diff --git a/.dir-locals.el b/.dir-locals.el new file mode 100644 index 0000000000..e40e4962ab --- /dev/null +++ b/.dir-locals.el @@ -0,0 +1,2 @@ +((c-mode . ((c-file-style . "linux"))) + (js-mode . ((indent-tabs-mode . nil)))) diff --git a/.gitignore b/.gitignore index 4b7c020828..e19ca802cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,36 +1,14 @@ -*.gcda -*.gcno -*.gcov -*.lo -*.log -*.o -*.out -*.plist -*.swp -*.tmp -*.trs +/.#configure.ac *~ -.deps -.dirstamp -.libs -.submodule.stamp +/ABOUT-NLS +AUTHORS ABOUT-NLS aclocal.m4 +aminclude_static.am autom4te.cache/ -build-aux/ar-lib -build-aux/compile -build-aux/config.guess -build-aux/config.rpath -build-aux/config.sub -build-aux/depcomp -build-aux/install-sh -build-aux/ltmain.sh -build-aux/mdate-sh -build-aux/missing -build-aux/test-driver -build-aux/texinfo.tex -build-aux/ylwrap build/ +/build-aux +build-aux/ ChangeLog compat_reports/ config.cache @@ -39,7 +17,9 @@ config.h.in config.log config.status configure +.deps devel/fuzz/gnutls_*_fuzzer +.dirstamp doc/abstract-api.texi doc/algorithms.texi doc/compat-api.texi @@ -62,12 +42,14 @@ doc/doxygen/Doxyfile doc/doxygen/html/ doc/doxygen/latex/ doc/dtls-api.texi -doc/enums.texi doc/enums/ +doc/enums.texi doc/errcodes doc/error_codes.texi doc/examples/ex-cert-select doc/examples/ex-cert-select-pkcs11 +doc/examples/ex-client1 +doc/examples/ex-client2 doc/examples/ex-client-anon doc/examples/ex-client-dtls doc/examples/ex-client-psk @@ -78,13 +60,12 @@ doc/examples/ex-client-udp doc/examples/ex-client-x509 doc/examples/ex-client-xssl1 doc/examples/ex-client-xssl2 -doc/examples/ex-client1 -doc/examples/ex-client2 doc/examples/ex-crq doc/examples/ex-cxx doc/examples/ex-ocsp-client doc/examples/ex-ocsp-verify doc/examples/ex-rfc2818 +doc/examples/ex-serv1 doc/examples/ex-serv-anon doc/examples/ex-serv-dtls doc/examples/ex-serv-export @@ -92,7 +73,6 @@ doc/examples/ex-serv-pgp doc/examples/ex-serv-psk doc/examples/ex-serv-srp doc/examples/ex-serv-x509 -doc/examples/ex-serv1 doc/examples/libexamples.la doc/examples/Makefile doc/examples/Makefile.in @@ -101,15 +81,15 @@ doc/extra.c.texi doc/functions/ doc/gendocs_template_min doc/gnutls-api.texi -doc/gnutls-extra-api.texi -doc/gnutls-guile.html doc/gnutls.aux doc/gnutls.cp doc/gnutls.cps doc/gnutls.dvi doc/gnutls.epub +doc/gnutls-extra-api.texi doc/gnutls.fn doc/gnutls.fns +doc/gnutls-guile.html doc/gnutls.html doc/gnutls.info* doc/gnutls.ky @@ -135,12 +115,12 @@ doc/latex/gnutls.lot doc/Makefile doc/Makefile.in doc/manpages/certtool.1 -doc/manpages/danetool.1 doc/manpages/dane_*.3 -doc/manpages/gnutls-cli-debug.1 +doc/manpages/danetool.1 +doc/manpages/gnutls_*.3 doc/manpages/gnutls-cli.1 +doc/manpages/gnutls-cli-debug.1 doc/manpages/gnutls-serv.1 -doc/manpages/gnutls_*.3 doc/manpages/Makefile doc/manpages/Makefile.in doc/manpages/ocsptool.1 @@ -158,22 +138,22 @@ doc/pkcs12-api.texi doc/pkcs7-api.texi doc/printlist doc/reference/*.bak +doc/reference/gnutls.args doc/reference/gnutls-decl-list.txt doc/reference/gnutls-decl.txt -doc/reference/gnutls-overrides.txt -doc/reference/gnutls-sections.txt -doc/reference/gnutls-undeclared.txt -doc/reference/gnutls-undocumented.txt -doc/reference/gnutls-unused.txt -doc/reference/gnutls.args doc/reference/gnutls.hierarchy doc/reference/gnutls.interfaces +doc/reference/gnutls-overrides.txt doc/reference/gnutls.pdf doc/reference/gnutls.prerequisites +doc/reference/gnutls-sections.txt doc/reference/gnutls.signals +doc/reference/gnutls-undeclared.txt +doc/reference/gnutls-undocumented.txt +doc/reference/gnutls-unused.txt +doc/reference/html/ doc/reference/html-build.stamp doc/reference/html.stamp -doc/reference/html/ doc/reference/Makefile doc/reference/Makefile.in doc/reference/pdf-build.stamp @@ -182,9 +162,9 @@ doc/reference/scan-build.stamp doc/reference/setup-build.stamp doc/reference/sgml-build.stamp doc/reference/sgml.stamp +doc/reference/tmpl/ doc/reference/tmpl-build.stamp doc/reference/tmpl.stamp -doc/reference/tmpl/ doc/reference/version.xml doc/reference/xml/ doc/sbuf-api.texi @@ -192,10 +172,10 @@ doc/scripts/Makefile doc/scripts/Makefile.in doc/socket-api.texi doc/stamp-1 -doc/stamp-vti doc/stamp_enums doc/stamp_functions doc/stamp_invoke +doc/stamp-vti doc/tpm-api.texi doc/version-guile.texi doc/version.texi @@ -205,203 +185,21 @@ extra/includes/Makefile.in extra/libgnutls-openssl.la extra/Makefile extra/Makefile.in -gl/alloca.h -gl/arg-nonnull.h -gl/byteswap.h -gl/c++defs.h -gl/dirent.h -gl/errno.h -gl/getopt.h -gl/glthread/.dirstamp -gl/iconv.h -gl/libgnu.la -gl/limits.h -gl/Makefile -gl/Makefile.in -gl/math.h -gl/netdb.h -gl/signal.h -gl/stdalign.h -gl/stddef.h -gl/stdint.h -gl/stdio.h -gl/stdlib.h -gl/string.h -gl/strings.h -gl/sys/ -gl/tests/arg-nonnull.h -gl/tests/arpa/ -gl/tests/c++defs.h -gl/tests/ctype.h -gl/tests/fcntl.h -gl/tests/glthread/.dirstamp -gl/tests/glthread/glthread -gl/tests/inttypes.h -gl/tests/inttypes.h -gl/tests/libtests.a -gl/tests/locale.h -gl/tests/Makefile -gl/tests/Makefile.in -gl/tests/sys/ -gl/tests/test-accept -gl/tests/test-alignof -gl/tests/test-alloca-opt -gl/tests/test-argp -gl/tests/test-arpa_inet -gl/tests/test-base64 -gl/tests/test-binary-io -gl/tests/test-bind -gl/tests/test-byteswap -gl/tests/test-c-ctype -gl/tests/test-c-strcasecmp -gl/tests/test-c-strncasecmp -gl/tests/test-close -gl/tests/test-connect -gl/tests/test-ctype -gl/tests/test-dirent -gl/tests/test-dup2 -gl/tests/test-environ -gl/tests/test-errno -gl/tests/test-fcntl-h -gl/tests/test-fdopen -gl/tests/test-fgetc -gl/tests/test-float -gl/tests/test-fputc -gl/tests/test-fread -gl/tests/test-frexp-nolibm -gl/tests/test-frexpl-nolibm -gl/tests/test-fseek -gl/tests/test-fseeko -gl/tests/test-fseeko3 -gl/tests/test-fseeko4 -gl/tests/test-fseterr -gl/tests/test-fstat -gl/tests/test-ftell -gl/tests/test-ftell3 -gl/tests/test-ftello -gl/tests/test-ftello3 -gl/tests/test-ftello4 -gl/tests/test-ftruncate -gl/tests/test-func -gl/tests/test-fwrite -gl/tests/test-getaddrinfo -gl/tests/test-getcwd-lgpl -gl/tests/test-getdelim -gl/tests/test-getdtablesize -gl/tests/test-getline -gl/tests/test-getopt -gl/tests/test-getpeername -gl/tests/test-gettimeofday -gl/tests/test-hmac-md5 -gl/tests/test-iconv -gl/tests/test-iconv-h -gl/tests/test-iconv-utf -gl/tests/test-ignore-value -gl/tests/test-inet_ntop -gl/tests/test-inet_pton -gl/tests/test-intprops -gl/tests/test-intprops -gl/tests/test-inttypes -gl/tests/test-inttypes -gl/tests/test-ioctl -gl/tests/test-isnand-nolibm -gl/tests/test-isnanf-nolibm -gl/tests/test-isnanl-nolibm -gl/tests/test-limits-h -gl/tests/test-listen -gl/tests/test-locale -gl/tests/test-localename -gl/tests/test-lock -gl/tests/test-lseek -gl/tests/test-lstat -gl/tests/test-malloc-gnu -gl/tests/test-malloca -gl/tests/test-math -gl/tests/test-md5 -gl/tests/test-memchr -gl/tests/test-netdb -gl/tests/test-netinet_in -gl/tests/test-open -gl/tests/test-pathmax -gl/tests/test-perror -gl/tests/test-perror2 -gl/tests/test-pipe -gl/tests/test-printf-frexp -gl/tests/test-printf-frexpl -gl/tests/test-rawmemchr -gl/tests/test-read-file -gl/tests/test-recv -gl/tests/test-recvfrom -gl/tests/test-select -gl/tests/test-select-fd -gl/tests/test-select-stdin -gl/tests/test-send -gl/tests/test-sendto -gl/tests/test-setenv -gl/tests/test-setlocale1 -gl/tests/test-setlocale2 -gl/tests/test-setsockopt -gl/tests/test-shutdown -gl/tests/test-signal-h -gl/tests/test-signbit -gl/tests/test-sleep -gl/tests/test-snprintf -gl/tests/test-sockets -gl/tests/test-stat -gl/tests/test-stdalign -gl/tests/test-stdbool -gl/tests/test-stddef -gl/tests/test-stdint -gl/tests/test-stdio -gl/tests/test-stdlib -gl/tests/test-strchrnul -gl/tests/test-strerror -gl/tests/test-strerror_r -gl/tests/test-string -gl/tests/test-strings -gl/tests/test-strnlen -gl/tests/test-strverscmp -gl/tests/test-symlink -gl/tests/test-sysexits -gl/tests/test-sys_ioctl -gl/tests/test-sys_select -gl/tests/test-sys_socket -gl/tests/test-sys_stat -gl/tests/test-sys_time -gl/tests/test-sys_types -gl/tests/test-sys_uio -gl/tests/test-thread_create -gl/tests/test-thread_self -gl/tests/test-time -gl/tests/test-u64 -gl/tests/test-u8-mbtoucr -gl/tests/test-u8-uctomb -gl/tests/test-unistd -gl/tests/test-unsetenv -gl/tests/test-vasnprintf -gl/tests/test-vasprintf -gl/tests/test-verify -gl/tests/test-version-etc -gl/tests/test-vfprintf-posix -gl/tests/test-vprintf-posix -gl/tests/test-vsnprintf -gl/tests/test-wchar -gl/tests/unused-parameter.h -gl/tests/warn-on-use.h -gl/time.h -gl/unistd.h -gl/unistr.h -gl/unitypes.h -gl/unused-parameter.h -gl/warn-on-use.h -gl/wchar.h +fuzz/*_fuzzer +*.gcda +*.gcno +*.gcov +gl +/GNUmakefile GnuTLS-*-coverage/ gnutls-*.tar.* +gtk-doc.m4 +gtk-doc.make guile/Makefile guile/Makefile.in +guile/modules/gnutls/extra.go guile/modules/gnutls.go guile/modules/gnutls.scm -guile/modules/gnutls/extra.go guile/modules/Makefile guile/modules/Makefile.in guile/src/guile-gnutls-v-2.la @@ -410,11 +208,14 @@ guile/src/Makefile.in guile/tests/Makefile guile/tests/Makefile.in INSTALL +ldd.sh lib/accelerated/aarch64/libaarch64.la lib/accelerated/libaccelerated.la lib/accelerated/x86/libx86.la lib/algorithms/libgnutls_alg.la lib/auth/libgnutls_auth.la +libdane/gnutls-dane.pc +libdane/libgnutls-dane.la lib/ext/libgnutls_ext.la lib/extras/libgnutls_extras.la lib/gcrypt/libcrypto.la @@ -423,8 +224,8 @@ lib/gnutls.pc lib/includes/gnutls/gnutls.h lib/includes/Makefile lib/includes/Makefile.in -lib/libgnutls-xssl.la lib/libgnutls.la +lib/libgnutls-xssl.la lib/libgnutlsxx.la lib/Makefile lib/Makefile.in @@ -432,6 +233,8 @@ lib/minitasn1/libminitasn1.la lib/minitasn1/Makefile lib/minitasn1/Makefile.in lib/nettle/libcrypto.la +lib/nettle/backport +lib/nettle/ecc lib/opencdk/libminiopencdk.la lib/opencdk/Makefile lib/opencdk/Makefile.in @@ -439,85 +242,29 @@ lib/openpgp/libgnutls_openpgp.la lib/openpgp/Makefile lib/openpgp/Makefile.in lib/openpgp/pgp-api.texi +libopts/libopts.la lib/priority_options.h -lib/unistring/libunistring.la -lib/unistring/limits.h -lib/unistring/stdint.h -lib/unistring/sys/ -lib/unistring/unictype.h -lib/unistring/unictype/categ_byname.h -lib/unistring/uninorm.h -lib/unistring/unistr.h -lib/unistring/unitypes.h -lib/unistring/unused-parameter.h +.libs +libtool +lib/unistring lib/x509/libgnutls_x509.la lib/x509/Makefile lib/x509/Makefile.in +lib/x509/supported_exts.h lib/x509/x509-api.texi -libdane/gnutls-dane.pc -libdane/libgnutls-dane.la -libopts/libopts.la -libtool -m4/codeset.m4 -m4/extern-inline.m4 -m4/fcntl-o.m4 -m4/gettext.m4 -m4/glibc2.m4 -m4/glibc21.m4 -m4/iconv.m4 -m4/intdiv0.m4 -m4/intl.m4 -m4/intldir.m4 -m4/intlmacosx.m4 -m4/intmax.m4 -m4/inttypes-pri.m4 -m4/inttypes_h.m4 -m4/lcmessage.m4 -m4/lib-ld.m4 -m4/lib-link.m4 -m4/lib-prefix.m4 -m4/libtool.m4 -m4/lock.m4 -m4/longlong.m4 -m4/ltoptions.m4 -m4/ltsugar.m4 -m4/ltversion.m4 -m4/lt~obsolete.m4 -m4/nls.m4 -m4/po.m4 -m4/printf-posix.m4 -m4/progtest.m4 -m4/size_max.m4 -m4/stdint_h.m4 -m4/threadlib.m4 -m4/uintmax_t.m4 -m4/visibility.m4 -m4/wchar_t.m4 -m4/wint_t.m4 -m4/xsize.m4 +*.lo +*.log +m4/* +!m4/ax_* +!m4/hooks.m4 +/maint.mk Makefile Makefile.in Makefile.user -po/*.gmo -po/*.po -po/boldquot.sed -po/en@boldquot.header -po/en@boldquot.insert-header -po/en@quot.header -po/en@quot.insert-header -po/gnutls.pot -po/insert-header.sin -po/Makefile -po/Makefile.in -po/Makefile.in.in -po/Makevars.template -po/POTFILES -po/quot.sed -po/remove-potcdate.sed -po/remove-potcdate.sin -po/Rules-quot -po/stamp-po -src/*.stamp +*.o +*.out +*.plist +src/args-std.def src/benchmark src/benchmark-cipher src/benchmark-tls @@ -539,27 +286,7 @@ src/danetool src/danetool-args.c src/danetool-args.h src/gaa.skel -src/gl/alloca.h -src/gl/arg-nonnull.h -src/gl/arpa/ -src/gl/c++defs.h -src/gl/libgnu_gpl.a -src/gl/libgnu_gpl.la -src/gl/limits.h -src/gl/netdb.h -src/gl/netinet/ -src/gl/parse-datetime.c -src/gl/signal.h -src/gl/stddef.h -src/gl/stdint.h -src/gl/stdio.h -src/gl/stdlib.h -src/gl/string.h -src/gl/sys/ -src/gl/time.h -src/gl/unistd.h -src/gl/warn-on-use.h -src/gl/wchar.h +src/gl src/gnutls-cli src/gnutls-cli-debug src/gnutls-serv @@ -579,6 +306,7 @@ src/libcmd-tpmtool.la src/libopts/libopts.la src/Makefile src/Makefile.in +src/mech-list.h src/ocsptool src/ocsptool-args.c src/ocsptool-args.h @@ -593,6 +321,7 @@ src/serv-args.h src/srptool src/srptool-args.c src/srptool-args.h +src/*.stamp src/systemkey src/systemkey-args.c src/systemkey-args.h @@ -600,29 +329,38 @@ src/tpmtool src/tpmtool-args.c src/tpmtool-args.h stamp-h1 +.submodule.stamp +*.swp tags tests/*/out +tests/Makefile +tests/Makefile.in +tests/aead-cipher-vec +tests/alerts tests/alpn-server-prec tests/anonself tests/atfork tests/auto-verify tests/base64 +tests/base64-raw tests/cert tests/cert-key-exchange +tests/cert-status +tests/cert_verify_inv_utf8 tests/certder tests/certificate_set_x509_crl tests/certuniqueid -tests/cert_verify_inv_utf8 tests/chainverify tests/chainverify-unsorted tests/cipher-test tests/client tests/client-fastopen +tests/client-sign-md5-rep tests/client_dsa_key tests/conv-utf8 tests/crl-basic -tests/crlverify tests/crl_apis +tests/crlverify tests/crq-basic tests/crq_apis tests/crq_key_id @@ -635,10 +373,14 @@ tests/cve-2008-4989 tests/cve-2009-1415 tests/cve-2009-1416 tests/dane +tests/dane-strcodes +tests/datefudge-check tests/dh-params tests/dhepskself +tests/dhex509self tests/dn tests/dn2 +tests/dss-sig-val tests/dtls-client-with-seccomp tests/dtls-etm tests/dtls-handshake-versions @@ -648,20 +390,44 @@ tests/dtls-rehandshake-anon tests/dtls-rehandshake-cert tests/dtls-rehandshake-cert-2 tests/dtls-rehandshake-cert-3 +tests/dtls-repro-20170915 +tests/dtls-session-ticket-lost tests/dtls-sliding-window +tests/dtls-stress tests/dtls-with-seccomp tests/dtls/dtls-stress tests/dtls1-2-mtu-check tests/dtls1.0-cert-key-exchange tests/dtls1.2-cert-key-exchange +tests/dtls10-cert-key-exchange +tests/dtls12-cert-key-exchange +tests/duplicate-extensions +tests/eagain +tests/eagain-auto-auth +tests/empty_retrieve_function tests/fallback-scsv tests/finished +tests/fips-mode-pthread +tests/fips-override-test tests/fips-test tests/gc tests/global-init tests/global-init-override +tests/gnutls-strcodes +tests/gnutls_ext_raw_parse +tests/gnutls_ext_raw_parse_dtls +tests/gnutls_hmac_fast +tests/gnutls_ocsp_resp_list_import2 +tests/gnutls_record_overhead +tests/gnutls_session_set_id +tests/gnutls_x509_crq_sign +tests/gnutls_x509_crt_list_import +tests/gnutls_x509_crt_sign +tests/gnutls_x509_privkey_import tests/handshake-false-start +tests/handshake-large-cert tests/handshake-large-packet +tests/handshake-timeout tests/handshake-versions tests/hex tests/hostname-check @@ -670,7 +436,11 @@ tests/infoaccess tests/init_fds tests/init_roundtrip tests/insecure_key +tests/iov +tests/ip-check tests/ip-utils +tests/kdf-api +tests/key-export-pkcs8 tests/key-id/Makefile tests/key-id/Makefile.in tests/key-import-export @@ -684,10 +454,12 @@ tests/key-usage-rsa tests/keygen tests/keylog-env tests/libpkcs11mock1.la +tests/libpkcs11mock2.la tests/libutils.la tests/long-session-id -tests/Makefile -tests/Makefile.in +tests/memset +tests/memset0 +tests/memset1 tests/mini tests/mini-alignment tests/mini-alpn @@ -744,6 +516,7 @@ tests/mini-x509-cas tests/mini-x509-cert-callback tests/mini-x509-default-prio tests/mini-x509-dual +tests/mini-x509-ipaddr tests/mini-x509-kx tests/mini-x509-rehandshake tests/mini-xssl @@ -755,10 +528,13 @@ tests/name-constraints tests/name-constraints-ip tests/name-constraints-merge tests/netconf-psk +tests/no-extensions tests/no-signal tests/nul-in-x509-names +tests/null_retrieve_function tests/ocsp tests/ocsp-filename-memleak +tests/ocsp-resp tests/oids tests/openpgp-auth tests/openpgp-auth2 @@ -781,15 +557,23 @@ tests/pkcs11-cert-import-url4-exts tests/pkcs11-get-exts tests/pkcs11-get-raw-issuer-exts tests/pkcs11-import-url-privkey +tests/pkcs11-import-url-privkey-caps tests/pkcs11-mechanisms +tests/pkcs11-obj-raw tests/pkcs11-privkey-always-auth tests/pkcs11-privkey-export tests/pkcs11-privkey-fork tests/pkcs11-privkey-fork-reinit tests/pkcs11-privkey-raw +tests/pkcs11-privkey-safenet-always-auth +tests/pkcs11-token-raw +tests/pkcs11/gnutls_pcert_list_import_x509_file +tests/pkcs11/gnutls_x509_crt_list_import_url +tests/pkcs11/list-objects tests/pkcs11/pkcs11-chainverify tests/pkcs11/pkcs11-combo tests/pkcs11/pkcs11-ec-privkey-test +tests/pkcs11/pkcs11-eddsa-privkey-test tests/pkcs11/pkcs11-get-issuer tests/pkcs11/pkcs11-import-url-privkey tests/pkcs11/pkcs11-import-with-pin @@ -799,10 +583,14 @@ tests/pkcs11/pkcs11-pin-func tests/pkcs11/pkcs11-privkey tests/pkcs11/pkcs11-privkey-always-auth tests/pkcs11/pkcs11-privkey-fork-reinit +tests/pkcs11/pkcs11-privkey-generate tests/pkcs11/pkcs11-privkey-pthread tests/pkcs11/pkcs11-pthread tests/pkcs11/pkcs11-pubkey-import-ecdsa tests/pkcs11/pkcs11-pubkey-import-rsa +tests/pkcs11/pkcs11-rsa-pss-privkey-test +tests/pkcs11/tls-neg-pkcs11-key +tests/pkcs11/tls-neg-pkcs11-no-key tests/pkcs12-decode/Makefile tests/pkcs12-decode/Makefile.in tests/pkcs12_encode @@ -816,11 +604,23 @@ tests/pkcs8-decode/Makefile tests/pkcs8-decode/Makefile.in tests/pkcs8-key-decode tests/pkcs8-key-decode-encrypted +tests/post-client-hello-change-prio tests/prf tests/priorities +tests/priorities-groups +tests/priority-init2 tests/priority-mix +tests/priority-set +tests/priority-set2 +tests/privkey-keygen +tests/privkey-verify-broken tests/psk-file tests/pskself +tests/pubkey-import-export +tests/random-art +tests/rawpk-api +tests/record-pad +tests/record-retvals tests/record-sizes tests/record-sizes-range tests/record-timeouts @@ -835,8 +635,12 @@ tests/rehandshake-switch-srp-id tests/resume tests/resume-anon tests/resume-dtls +tests/resume-lifetime tests/resume-psk tests/resume-with-false-start +tests/resume-with-previous-stek +tests/resume-with-record-size-limit +tests/resume-with-stek-expiration tests/resume-x509 tests/rng-fork tests/rng-no-onload @@ -849,21 +653,29 @@ tests/rsa-encrypt-decrypt tests/rsa-illegal-import tests/rsa-md5-collision/Makefile tests/rsa-md5-collision/Makefile.in +tests/rsa-psk +tests/rsa-psk-cb +tests/rsa-rsa-pss tests/safe-renegotiation/Makefile tests/safe-renegotiation/Makefile.in tests/safe-renegotiation/srn* tests/safe-renegotiation/srn1 tests/safe-renegotiation/srn2 tests/safe-renegotiation/srn3 +tests/sanity-cpp tests/sec-params +tests/secret-hook tests/send-client-cert tests/send-data-befor tests/send-data-before-handshake +tests/server +tests/server-sign-md5-rep tests/server_ecdsa_key tests/session-export-funcs +tests/session-rdn-read tests/session-tickets-missing tests/session-tickets-ok -tests/setcredcrash +tests/set-default-prio tests/set_key tests/set_key_utf8 tests/set_known_dh_params_anon @@ -872,6 +684,7 @@ tests/set_known_dh_params_x509 tests/set_pkcs12_cred tests/set_x509_key tests/set_x509_key_file +tests/set_x509_key_file-late tests/set_x509_key_file_der tests/set_x509_key_file_legacy tests/set_x509_key_file_ocsp @@ -879,11 +692,24 @@ tests/set_x509_key_file_ocsp_multi tests/set_x509_key_file_ocsp_multi2 tests/set_x509_key_mem tests/set_x509_key_utf8 +tests/set_x509_ocsp_multi_invalid +tests/set_x509_ocsp_multi_pem +tests/set_x509_ocsp_multi_unknown tests/set_x509_pkcs12_key +tests/setcredcrash tests/sha2/Makefile tests/sha2/Makefile.in +tests/sign-is-secure tests/sign-md5-rep +tests/sign-pk-api +tests/sign-verify +tests/sign-verify-data +tests/sign-verify-deterministic +tests/sign-verify-ed25519-rfc8080 +tests/sign-verify-ext +tests/sign-verify-ext4 tests/simple +tests/slow/cipher-api-test tests/slow/cipher-compat tests/slow/cipher-openssl-compat tests/slow/cipher-override @@ -895,15 +721,21 @@ tests/slow/hash-large tests/slow/keygen tests/slow/mac-override tests/softhsm-*.db/ +tests/spki +tests/spki-abstract tests/srp tests/srp/mini-srp tests/srpbase64 tests/ssl2-hello tests/ssl3.0-cert-key-exchange +tests/ssl30-cert-key-exchange +tests/ssl30-cipher-neg +tests/ssl30-server-kx-neg tests/status-request tests/status-request-ext tests/status-request-missing tests/status-request-ok +tests/status-request-revoked tests/str-idna tests/str-unicode tests/strict-der @@ -911,6 +743,7 @@ tests/suite/cert-coverage tests/suite/ciphersuite/gnutls-ciphers.js tests/suite/danetool-cert* tests/suite/eagain-cli +tests/suite/ecdsa tests/suite/libecore.la tests/suite/mini-record-timing tests/suite/ocsp-coverage @@ -931,15 +764,25 @@ tests/suite/softhsm*.db-journal tests/suite/softhsm.config tests/suite/testpkcs11.debug tests/suite/testtpm.sh +tests/suite/tlslite tests/suite/x509paths/X509tests tests/system-prio-file tests/tls-client-with-seccomp +tests/tls-crt_type-neg tests/tls-etm +tests/tls-ext-not-in-dtls tests/tls-ext-register +tests/tls-force-etm tests/tls-max-record +tests/tls-neg-ext-key +tests/tls-neg-ext4-key +tests/tls-record-size-limit +tests/tls-record-size-limit-asym tests/tls-rehandshake-anon tests/tls-rehandshake-cert tests/tls-rehandshake-cert-2 +tests/tls-rehandshake-cert-3 +tests/tls-session-ext-override tests/tls-session-ext-register tests/tls-session-supplemental tests/tls-supplemental @@ -947,10 +790,73 @@ tests/tls-with-seccomp tests/tls1.0-cert-key-exchange tests/tls1.1-cert-key-exchange tests/tls1.2-cert-key-exchange +tests/tls10-cert-key-exchange +tests/tls10-cipher-neg +tests/tls10-prf +tests/tls10-server-kx-neg +tests/tls11-cert-key-exchange +tests/tls11-check-rollback-val +tests/tls11-cipher-neg +tests/tls11-rollback-detection +tests/tls11-server-kx-neg +tests/tls12-anon-upgrade +tests/tls12-cert-key-exchange +tests/tls12-check-rollback-val +tests/tls12-cipher-neg +tests/tls12-ffdhe +tests/tls12-invalid-key-exchanges +tests/tls12-max-record +tests/tls12-prf +tests/tls12-rehandshake-cert +tests/tls12-rehandshake-cert-2 +tests/tls12-rehandshake-cert-3 +tests/tls12-rehandshake-cert-auto +tests/tls12-rehandshake-set-prio +tests/tls12-resume-anon +tests/tls12-resume-psk +tests/tls12-resume-x509 +tests/tls12-rollback-detection +tests/tls12-server-kx-neg +tests/tls13-cert-key-exchange +tests/tls13-cipher-neg +tests/tls13-early-data +tests/tls13-early-data-neg +tests/tls13-early-start +tests/tls13-rehandshake-cert +tests/tls13-resume-psk +tests/tls13-resume-x509 +tests/tls13-server-kx-neg +tests/tls13/anti_replay +tests/tls13/change_cipher_spec +tests/tls13/cookie +tests/tls13/hello_random_value +tests/tls13/hello_retry_request +tests/tls13/key_limits +tests/tls13/key_share +tests/tls13/key_update +tests/tls13/key_update_multiple +tests/tls13/multi-ocsp +tests/tls13/no-psk-exts +tests/tls13/ocsp-client +tests/tls13/post-handshake-with-cert +tests/tls13/post-handshake-with-cert-auto +tests/tls13/post-handshake-with-cert-pkcs11 +tests/tls13/post-handshake-with-cert-ticket +tests/tls13/post-handshake-with-psk +tests/tls13/post-handshake-without-cert +tests/tls13/prf +tests/tls13/prf-early +tests/tls13/psk-dumbfw +tests/tls13/psk-ext +tests/tls13/supported_versions +tests/tls13/tls12-no-tls13-exts +tests/tls13/no-auto-send-ticket tests/tlsext-decoding tests/tlsfeature-crt tests/tlsfeature-ext tests/tlsia +tests/trust-store +tests/trustdb-tofu tests/urls tests/userid/Makefile tests/userid/Makefile.in @@ -958,12 +864,16 @@ tests/version-checks tests/windows/cng-windows tests/x509-cert-callback tests/x509-cert-callback-legacy +tests/x509-cert-callback-ocsp +tests/x509-crt-list-import-url.config.db/ tests/x509-dn tests/x509-dn-decode tests/x509-dn-decode-compat tests/x509-extensions tests/x509-verify-with-crl +tests/x509_altname tests/x509cert +tests/x509cert-dntypes tests/x509cert-invalid tests/x509cert-tl tests/x509dn @@ -972,15 +882,12 @@ tests/x509self tests/x509sign-verify tests/x509sign-verify-ecdsa tests/x509sign-verify-error +tests/x509sign-verify-gost tests/x509sign-verify-rsa tests/x509sign-verify2 tests/x509signself -tests/x509_altname +*.tmp* tmp-* +*.trs win32 win64 -lib/x509/supported_exts.h -tests/tls-rehandshake-cert-3 -tests/dane-strcodes -tests/gnutls-strcodes -tests/ip-check diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index edc2a08f54..ccc4eddfa1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,179 +1,245 @@ stages: - - initialization - stage1-testing # we utilize the images generated by the build-images project, to -# speed up CI runs. +# speed up CI runs. We also use ccache and store config.cache +# to speed up compilation. We include a version number in cache +# name to allow expiration of old caches. -variables: - BUILD_IMAGES_PROJECT: gnutls/build-images - DEBIAN_BUILD: buildenv-debian-stretch - FEDORA_BUILD: buildenv-f25 - FEDORA_X86_BUILD: buildenv-f23-x86 - GET_SOURCES_ATTEMPTS: "3" +cache: + key: "$CI_JOB_NAME-ver14" + paths: + - cache/ -################ -# Initialization -################ +before_script: + # CCache Config + - mkdir -p cache + - export CCACHE_BASEDIR=${PWD} + - export CCACHE_DIR=${PWD}/cache + - export CC="ccache gcc" -init/Fedora/x86_64: - stage: initialization - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD - script: - - make autoreconf - - ./configure --prefix=/usr --libdir=/usr/lib64 --disable-cxx --disable-non-suiteb-curves --disable-maintainer-mode --disable-guile - - make syntax-check - tags: - - shared - artifacts: - expire_in: 1 week - when: on_failure - paths: - - ./*.log +# With just one virtual core, parallel builds only make sense when +# I/O wait is involved. If too many parallel builds are used, the overall +# time even increases (e.g. due to more cache misses). +# $BUILDJOBS seems to be best with $(nproc)+1, while $CHECKJOBS can be much +# higher because several tests have a large I/O waiting time. +# The numbers are hard-coded since FreeBSD doesn't know the nproc command. + - export BUILDJOBS=2 + - export CHECKJOBS=16 + +after_script: + # somehow after_script looses environment + - export CCACHE_BASEDIR=${PWD} + - export CCACHE_DIR=${PWD}/cache + - ccache -s +variables: + BUILD_IMAGES_PROJECT: gnutls/build-images + DEBIAN_BUILD: buildenv-debian + DEBIAN_CROSS_BUILD: buildenv-debian-cross + DEBIAN_X86_CROSS_BUILD: buildenv-debian-x86-cross + FEDORA28_BUILD: buildenv-f28 + FEDORA_BUILD: buildenv-fedora31 + MINGW_BUILD: buildenv-mingw + ALPINE_BASE_BUILD: buildenv-alpine-base + CPPCHECK_OPTIONS: "--enable=warning --enable=style --enable=performance --enable=portability --std=c99 --suppressions-list=devel/cppcheck.suppressions --template='{id}:{file}:{line},{severity},{message}'" + GET_SOURCES_ATTEMPTS: "3" ################################################## # Stage 1, documentation, and advanced checks ################################################## -doc-dist/Fedora: +commit-check: + stage: stage1-testing + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$ALPINE_BASE_BUILD + before_script: + - /bin/true + after_script: + - /bin/true + except: + - master@gnutls/gnutls + cache: + # do not load cache files + key: none + policy: pull + script: + # we want $ALPINE_BASE_BUILD without git, so add it here + - apk add git bash + - devel/check_if_signed + retry: 0 + +doc-dist.Fedora: stage: stage1-testing image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD script: - - git submodule update --init --no-fetch - - make autoreconf - - CFLAGS="-std=c99 -O2 -g" ./configure --prefix=/usr --libdir=/usr/lib64 --disable-cxx --disable-non-suiteb-curves --enable-gtk-doc --disable-maintainer-mode - && make -C doc stamp-vti && make -C doc stamp-1 && make -j$(nproc) - - make -C doc gnutls.html - - PATH="$PATH:/usr/share/sgml/docbook/xsl-stylesheets-1.79.1/epub/bin/" make -C doc gnutls.epub && - make -C doc/latex gnutls.pdf - - make dist + - SUBMODULE_NOFETCH=1 ./bootstrap + - GUILE=/usr/bin/guile2.2 + - GUILD=/usr/bin/guild2.2 + - guile_snarf=/usr/bin/guile-snarf2.2 + - export GUILE GUILD guile_snarf + - CFLAGS="-std=c99 -O2 -g" dash ./configure --disable-gcc-warnings --cache-file cache/config.cache --prefix=/usr --libdir=/usr/lib64 --disable-cxx --disable-non-suiteb-curves --enable-gtk-doc --disable-maintainer-mode + - make -j$BUILDJOBS -C doc stamp-vti + - make -j$BUILDJOBS -C doc stamp-1 + - make -j$BUILDJOBS -C doc stamp_enums + - make -j$BUILDJOBS + - make -j$BUILDJOBS -C doc gnutls.html + - make -j$BUILDJOBS -C doc/latex gnutls.pdf + - DB2EPUBDIR=$(dirname $(find /usr/share/sgml/docbook/xsl-ns-stylesheets-*/epub/bin/ -name dbtoepub -print)) + - PATH="$PATH:$DB2EPUBDIR" make -C doc gnutls.epub +# check whether distribution with or without included libopts is ok + - make -j$CHECKJOBS distcheck DISTCHECK_CONFIGURE_FLAGS="--enable-local-libopts --disable-tests" + - make -j$CHECKJOBS distcheck tags: - shared + - linux except: - tags + retry: 1 -# ABI check + coverage -abi-coverage/Fedora: +abi/coverage: stage: stage1-testing image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD script: - - git submodule update --init --no-fetch - - make autoreconf - - CFLAGS="-std=c99 -O2 -g" ./configure --prefix=/usr --libdir=/usr/lib64 --disable-cxx --enable-code-coverage --disable-non-suiteb-curves --disable-maintainer-mode --disable-doc - && make -j$(nproc) + - SUBMODULE_NOFETCH=1 ./bootstrap + - GUILE=/usr/bin/guile2.2 + - GUILD=/usr/bin/guild2.2 + - guile_snarf=/usr/bin/guile-snarf2.2 + - export GUILE GUILD guile_snarf + - CFLAGS="-g -Og" dash ./configure --disable-gcc-warnings --cache-file cache/config.cache --prefix=/usr --libdir=/usr/lib64 --enable-code-coverage --disable-maintainer-mode --disable-doc + - make -j$BUILDJOBS - make abi-check - make pic-check - - make -j$(nproc) check + - make -j$CHECKJOBS check - make local-code-coverage-output || true + - if objdump -R lib/.libs/libgnutls.so | grep INTERNAL ; then false ; fi tags: - shared + - linux except: - tags artifacts: expire_in: 1 week - when: always + when: on_failure paths: - - GnuTLS*-coverage/* + - ./*.xml + - ./gnutls-prev-abi.tmp/ + - compat_reports/ + - ./*.log + - tests/*.log + - tests/*/*.log + - tests/suite/*/*.log + - guile/tests/*.log + retry: 1 -minimal/Fedora/x86_64: +minimal.Fedora.x86_64: stage: stage1-testing image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD script: - echo "No tools build" - - make autoreconf - - ./configure --disable-full-test-suite --disable-doc --disable-guile --disable-tools --enable-tests - - make -j$(nproc) - - make -j$(nproc) check + - ./bootstrap + - dash ./configure --cache-file cache/config.cache --disable-gcc-warnings --disable-full-test-suite --disable-doc --disable-guile --disable-tools --enable-tests + - make -j$BUILDJOBS + - make -j$CHECKJOBS check - echo "Minimal build" - - dnf remove -y libunistring-devel libtasn1-devel libidn-devel && - ./configure --with-included-libtasn1 --enable-valgrind-tests - --disable-doc --disable-dtls-srtp-support --disable-alpn-support --disable-rsa-export + - dnf remove -y libunistring-devel libtasn1-devel libidn-devel + - dash ./configure --cache-file cache/config.cache --with-included-libtasn1 + --disable-doc --disable-dtls-srtp-support --disable-alpn-support --disable-tests --disable-heartbeat-support --disable-srp-authentication --disable-psk-authentication --disable-anon-authentication --disable-dhe --disable-ecdhe - --disable-ocsp --disable-session-tickets --disable-non-suiteb-curves --with-included-unistring - --disable-nls --disable-crywrap --disable-libdane --without-p11-kit --without-tpm - --disable-ssl3-support --disable-ssl2-support --without-zlib --disable-doc --disable-tests --enable-openssl-compatibility && make -j$(nproc) - tags: - - shared - except: - - tags - -no-SSL-3.0/Fedora/x86_64: - stage: stage1-testing - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD - script: - - make autoreconf - - mkdir -p build && cd build && - ../configure --disable-ssl3-support --disable-ssl2-support --disable-full-test-suite --enable-seccomp-tests --disable-doc --disable-guile && - make -j$(nproc) && make check -j$(nproc) + --disable-ocsp --disable-non-suiteb-curves --with-included-unistring + --disable-nls --disable-libdane --without-p11-kit --without-tpm + --disable-ssl3-support --disable-ssl2-support --disable-doc --enable-openssl-compatibility + --disable-gcc-warnings --with-system-priority-file="" + --disable-gost + --disable-guile + - make clean + - make -j$BUILDJOBS + - make -j$CHECKJOBS check tags: - shared + - linux except: - tags artifacts: expire_in: 1 week when: on_failure paths: - - build/guile/tests/*.log - - build/tests/*.log - - build/*.log - - build/tests/*/*.log - - build/tests/suite/*/*.log + - ./*.log + - fuzz/*.log + - tests/*.log + - tests/*/*.log + - tests/suite/*/*.log + retry: 1 -FIPS140-2/Fedora/x86_64: +# This enables SSL3.0 and SHA-1 support, and runs interop tests +# with openssl 1.1.0, which include legacy algorithms like DSA. +SSL-3.0.Fedora.x86_64: stage: stage1-testing - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA28_BUILD script: - - make autoreconf - - mkdir -p build && cd build && - ../configure --disable-non-suiteb-curves --enable-fips140-mode --disable-doc --disable-full-test-suite --disable-guile - - make -j$(nproc) - - GNUTLS_SKIP_FIPS_INTEGRITY_CHECKS=1 GNUTLS_FORCE_FIPS_MODE=1 make check -j$(nproc) - - make check -j$(nproc) + - ./bootstrap + - mkdir -p build + - cd build + - dash ../configure --disable-tls13-interop --disable-gcc-warnings --cache-file ../cache/config.cache --enable-sha1-support --enable-ssl3-support --enable-seccomp-tests --disable-doc --disable-guile --disable-strict-der-time + - make -j$BUILDJOBS + - make -j$CHECKJOBS check + - cd .. tags: - shared + - linux except: - tags artifacts: + expire_in: 1 week when: on_failure paths: - build/guile/tests/*.log - build/tests/*.log + - build/*.log - build/tests/*/*.log + - build/tests/suite/*/*.log + retry: 1 -openpgp/Fedora/x86_64: +FIPS140-2.Fedora.x86_64: stage: stage1-testing image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD script: - - make autoreconf - - mkdir -p build && cd build && - ../configure --enable-openpgp-authentication --disable-doc --disable-guile --disable-full-test-suite - - make -j$(nproc) - - make abi-check - - make check -j$(nproc) + - ./bootstrap + - mkdir -p build + - cd build + - dash ../configure --disable-gcc-warnings --cache-file ../cache/config.cache --disable-non-suiteb-curves --enable-fips140-mode --disable-doc --disable-full-test-suite --disable-guile + - make -j$BUILDJOBS + - make -j$CHECKJOBS check + - mkdir -p lib/.libs/fipscheck + - fipshmac -d lib/.libs/fipscheck/ -s .hmac lib/.libs/libgnutls.so* + - GNUTLS_FORCE_FIPS_MODE=1 make -j$CHECKJOBS check + - cd .. tags: - shared + - linux except: - tags artifacts: + expire_in: 1 week when: on_failure paths: - build/guile/tests/*.log - build/tests/*.log - build/tests/*/*.log - - build/compat_reports/* + retry: 1 -valgrind/Fedora/x86_64: +valgrind.Fedora.x86_64: stage: stage1-testing image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD script: - - make autoreconf - - ./configure --disable-doc --disable-guile --disable-full-test-suite --enable-valgrind-tests - - make -j$(nproc) - - make check -j$(nproc) + - ./bootstrap +# gcc in fedora31 inlines strcmp in a way that causes valgrind errors + - CFLAGS="-O2 -g -fno-builtin-strcmp" ./configure --disable-gcc-warnings --disable-doc --cache-file cache/config.cache --disable-guile --disable-full-test-suite --enable-valgrind-tests + - make -j$BUILDJOBS + - make -j$CHECKJOBS check tags: - shared + - linux except: - tags artifacts: @@ -183,24 +249,20 @@ valgrind/Fedora/x86_64: - ./*.log - tests/*.log - tests/*/*.log + retry: 1 -# Two runs, one with normal backend and another with pkcs11 trust store -asan/Fedora/x86_64: +threadsan.Fedora.x86_64: stage: stage1-testing image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD script: - - git submodule update --init --no-fetch - - make autoreconf - - CFLAGS="-fsanitize=address -g -O2" LDFLAGS="-static-libasan" - ./configure --disable-doc --disable-non-suiteb-curves --disable-guile - - make -j$(nproc) - - make check -j$(nproc) - - CFLAGS="-fsanitize=address -g -O2" LDFLAGS="-static-libasan" - ./configure --disable-doc --with-default-trust-store-pkcs11="pkcs11:" --disable-guile - - make -j$(nproc) - - make -C tests check -j$(nproc) TESTS=trust-store SUBDIRS=. + - ./bootstrap + - CFLAGS="-fsanitize=thread -g -O2" CXXFLAGS=$CFLAGS + dash ./configure --disable-gcc-warnings --disable-doc --cache-file cache/config.cache --disable-non-suiteb-curves --disable-guile --enable-fips140-mode --disable-full-test-suite + - make -j$BUILDJOBS + - make -j$CHECKJOBS -C tests check SUBDIRS=. TESTS="tls-pthread dtls-pthread fips-mode-pthread rng-pthread" TSAN_OPTIONS="suppressions=$(pwd)/devel/tsan.supp" GNUTLS_SKIP_FIPS_INTEGRITY_CHECKS=1 GNUTLS_FORCE_FIPS_MODE=1 tags: - shared + - linux except: - tags artifacts: @@ -208,119 +270,149 @@ asan/Fedora/x86_64: when: on_failure paths: - ./*.log + - fuzz/*.log - tests/*.log - tests/*/*.log - tests/suite/*/*.log + retry: 1 -static-analyzers/Fedora/x86_64: +static-analyzers.Fedora.x86_64: stage: stage1-testing image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + before_script: + - /bin/true script: - - make autoreconf - - scan-build ./configure --disable-doc --disable-guile --enable-fips140-mode --enable-valgrind-tests - - make -j$(nproc) -C gl - - scan-build --status-bugs -o scan-build-lib make -j$(nproc) -C lib - - scan-build --status-bugs -o scan-build-libdane make -j$(nproc) -C libdane - - cppcheck --force -q -Ilib/include -Igl/ -Ilib/ -I. --error-exitcode=1 lib/ -i lib/unistring - - cppcheck --force -q -Ilib/include -Igl/ -Ilibdane/ -I. --error-exitcode=1 libdane/ + - ./bootstrap + - scan-build ./configure --cache-file cache/config.cache --disable-doc --disable-guile --enable-fips140-mode + - make -j$BUILDJOBS syntax-check gnulib_dir=$GNULIB_SRCDIR + - make -j$BUILDJOBS -C gl + - scan-build --status-bugs -o scan-build-lib make -j$BUILDJOBS -C lib + - scan-build --status-bugs -o scan-build-lib make -j$BUILDJOBS -C libdane + - make -j$BUILDJOBS -C src/gl + - scan-build --status-bugs -o scan-build-lib make -j$BUILDJOBS -C src + - cppcheck --force -q -Ilib/include -Igl/ -Ilib/ -I. --error-exitcode=1 lib/ -i lib/unistring -i lib/minitasn1 -i lib/nettle/backport -i lib/nettle/ecc -j2 $CPPCHECK_OPTIONS + - cppcheck --force -q -Ilib/include -Igl/ -Ilibdane/ -I. --error-exitcode=1 libdane/ -j2 $CPPCHECK_OPTIONS + after_script: + - /bin/true tags: - shared + - linux except: - tags artifacts: expire_in: 1 week when: on_failure paths: + - ./*.log - scan-build-lib/* - scan-build-libdane/* + retry: 1 -MinGW32/DLLs: +MinGW32.DLLs: stage: stage1-testing - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$MINGW_BUILD script: - - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc && - echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register && - rm -f tests/suite/mini-eagain2.c - - make autoreconf - - mingw32-configure --with-included-libtasn1 --disable-nls --disable-guile --with-included-unistring --enable-local-libopts --disable-non-suiteb-curves --disable-doc && - mingw32-make -j$(nproc) && mingw32-make -C tests check -j$(nproc) + - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc + - echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register + - ./bootstrap + - export CC="ccache i686-w64-mingw32-gcc" + - export WINEPATH=/usr/i686-w64-mingw32/sys-root/mingw/bin + - dash ./configure --disable-gcc-warnings --host=i686-w64-mingw32 --target=i686-w64-mingw32 --cache-file cache/config.cache --with-included-libtasn1 --disable-nls --disable-guile --with-included-unistring --enable-local-libopts --disable-non-suiteb-curves --disable-full-test-suite --disable-doc + - mingw32-make -j$BUILDJOBS + - mingw32-make -j$BUILDJOBS -C tests check # Combine generated apps and DLLs. #libwinpthread is required by libgcc #libffi is required by libp11-kit - - mkdir -p win32-build/bin && mkdir -p win32-build/lib/includes && - cp lib/.libs/*.dll src/.libs/*.exe win32-build/bin && - i686-w64-mingw32-strip --strip-unneeded win32-build/bin/*.dll && - i686-w64-mingw32-strip win32-build/bin/*.exe && - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libp11-*.dll win32-build/bin && - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libnettle-*.dll win32-build/bin && - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libhogweed-*.dll win32-build/bin && - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libgmp-*.dll win32-build/bin && - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libgcc*.dll win32-build/bin && - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libwinpthread*.dll win32-build/bin && - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libidn2-*.dll win32-build/bin && - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/iconv*.dll win32-build/bin && - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libffi-*.dll win32-build/bin && - cp lib/.libs/*.a lib/*.def lib/gnutls.pc win32-build/lib && - cp lib/includes/gnutls/*.h win32-build/lib/includes + - mkdir -p win32-build/bin win32-build/lib/includes + - cp lib/.libs/*.dll src/.libs/*.exe win32-build/bin + - i686-w64-mingw32-strip --strip-unneeded win32-build/bin/*.dll + - i686-w64-mingw32-strip win32-build/bin/*.exe + - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libp11-*.dll win32-build/bin + - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libnettle-*.dll win32-build/bin + - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libhogweed-*.dll win32-build/bin + - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libgmp-*.dll win32-build/bin + - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libgcc*.dll win32-build/bin + - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libwinpthread*.dll win32-build/bin + - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libidn2-*.dll win32-build/bin + - cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libffi-*.dll win32-build/bin + - cp lib/.libs/*.a lib/*.def lib/gnutls.pc win32-build/lib + - cp lib/includes/gnutls/*.h win32-build/lib/includes tags: - shared - docker + - linux only: - tags artifacts: + name: "${CI_PROJECT_NAME}-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" paths: - win32-build/ + retry: 1 -MinGW64/DLLs: +MinGW64.DLLs: stage: stage1-testing - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$MINGW_BUILD script: - - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc && - echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register && - rm -f tests/suite/mini-eagain2.c - - make autoreconf - - mingw64-configure --with-included-libtasn1 --disable-guile --disable-nls --with-included-unistring --enable-local-libopts --disable-non-suiteb-curves --disable-doc && - mingw64-make -j$(nproc) && mingw64-make -C tests check -j$(nproc) + - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc + - echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register + - ./bootstrap + - export CC="ccache x86_64-w64-mingw32-gcc" + - export WINEPATH=/usr/x86_64-w64-mingw32/sys-root/mingw/bin + - dash ./configure --disable-gcc-warnings --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --cache-file cache/config.cache --with-included-libtasn1 --disable-guile --disable-nls --with-included-unistring --enable-local-libopts --disable-non-suiteb-curves --disable-full-test-suite --disable-doc + - mingw64-make -j$BUILDJOBS + - mingw64-make -j$BUILDJOBS -C tests check # Combine generated apps and DLLs. #libwinpthread is required by libgcc #libffi is required by libp11-kit - - mkdir -p win64-build/bin && mkdir -p win64-build/lib/includes && - cp lib/.libs/*.dll src/.libs/*.exe win64-build/bin && - x86_64-w64-mingw32-strip --strip-unneeded win64-build/bin/*.dll && - x86_64-w64-mingw32-strip win64-build/bin/*.exe && - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libp11-*.dll win64-build/bin && - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libnettle-*.dll win64-build/bin && - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libhogweed-*.dll win64-build/bin && - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgmp-*.dll win64-build/bin && - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc*.dll win64-build/bin && - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libwinpthread*.dll win64-build/bin && - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libidn2-*.dll win64-build/bin && - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/iconv*.dll win64-build/bin && - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libffi-*.dll win64-build/bin && - cp lib/.libs/*.a lib/*.def lib/gnutls.pc win64-build/lib && - cp lib/includes/gnutls/*.h win64-build/lib/includes + - mkdir -p win64-build/bin win64-build/lib/includes + - cp lib/.libs/*.dll src/.libs/*.exe win64-build/bin + - x86_64-w64-mingw32-strip --strip-unneeded win64-build/bin/*.dll + - x86_64-w64-mingw32-strip win64-build/bin/*.exe + - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libp11-*.dll win64-build/bin + - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libnettle-*.dll win64-build/bin + - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libhogweed-*.dll win64-build/bin + - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgmp-*.dll win64-build/bin + - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc*.dll win64-build/bin + - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libwinpthread*.dll win64-build/bin + - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libidn2-*.dll win64-build/bin + - cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libffi-*.dll win64-build/bin + - cp lib/.libs/*.a lib/*.def lib/gnutls.pc win64-build/lib + - cp lib/includes/gnutls/*.h win64-build/lib/includes tags: - shared - docker + - linux only: - tags artifacts: + name: "${CI_PROJECT_NAME}-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}" paths: - win64-build/ + retry: 1 MinGW64: stage: stage1-testing - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$MINGW_BUILD script: - - make autoreconf - - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc && - echo ':DOSWin:M::MZ::/usr/bin/wine64:' > /proc/sys/fs/binfmt_misc/register && - rm -f tests/suite/mini-eagain2.c && mkdir -p build && cd build && - mingw64-configure --with-included-libtasn1 --disable-guile --with-included-unistring --enable-local-libopts --without-p11-kit --disable-non-suiteb-curves --disable-doc && - mingw64-make -j$(nproc) && mingw64-make -C tests check -j$(nproc) + - ./bootstrap + - export CC="ccache x86_64-w64-mingw32-gcc" + - export WINEPATH=/usr/x86_64-w64-mingw32/sys-root/mingw/bin + - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc + - echo ':DOSWin:M::MZ::/usr/bin/wine64:' > /proc/sys/fs/binfmt_misc/register + - mkdir -p build + - cd build + - dash ../configure --disable-gcc-warnings --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --cache-file ../cache/config.cache --with-included-libtasn1 --disable-guile --disable-nls --with-included-unistring --enable-local-libopts --disable-full-test-suite --disable-non-suiteb-curves --disable-doc + # generate the certtool autogen file to check whether later compilation will modify it + - mingw64-make -j$BUILDJOBS -C src certtool-args.c.bak + - mingw64-make -j$BUILDJOBS + - mingw64-make -j$CHECKJOBS -C tests check + - cd .. + # since we use --enable-local-libopts the generated files must equal the .bak + - cmp build/src/certtool-args.c build/src/certtool-args.c.bak || false tags: - shared - docker + - linux except: - tags artifacts: @@ -330,20 +422,27 @@ MinGW64: - build/*.log - build/tests/*.log - build/tests/*/*.log + retry: 1 MinGW32: stage: stage1-testing - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$MINGW_BUILD script: - - make autoreconf - - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc && - echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register && - rm -f tests/suite/mini-eagain2.c && mkdir -p build && cd build && - mingw32-configure --with-included-libtasn1 --disable-guile --with-included-unistring --enable-local-libopts --without-p11-kit --disable-non-suiteb-curves --disable-doc && - mingw32-make -j$(nproc) && mingw32-make -C tests check -j$(nproc) + - ./bootstrap + - export CC="ccache i686-w64-mingw32-gcc" + - export WINEPATH=/usr/i686-w64-mingw32/sys-root/mingw/bin + - mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc + - echo ':DOSWin:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register + - mkdir -p build + - cd build + - dash ../configure --disable-gcc-warnings --host=i686-w64-mingw32 --target=i686-w64-mingw32 --cache-file ../cache/config.cache --with-included-libtasn1 --disable-guile --disable-nls --with-included-unistring --enable-local-libopts --disable-full-test-suite --disable-non-suiteb-curves --disable-doc + - mingw32-make -j$BUILDJOBS + - mingw32-make -j$CHECKJOBS -C tests check + - cd .. tags: - shared - docker + - linux except: - tags artifacts: @@ -353,17 +452,21 @@ MinGW32: - build/*.log - build/tests/*.log - build/tests/*/*.log + retry: 1 # That is a specific runner that we cannot enable universally. # We restrict it to builds under the $BUILD_IMAGES_PROJECT project. -FreeBSD10/x86_64: +FreeBSD.x86_64: stage: stage1-testing image: - before_script: - - /usr/bin/true script: - - gmake autoreconf && rm -f tests/suite/mini-eagain2.c && LIBS="-L/usr/local/lib" ./configure - --with-included-libtasn1 --disable-guile --with-included-unistring --disable-doc && gmake -j$(sysctl hw.ncpu | awk '{print $2}') && gmake check -j$(sysctl hw.ncpu | awk '{print $2}') + - export CC="ccache clang" + - ./bootstrap + - export LDFLAGS="-L/usr/local/lib" + - ./configure --disable-full-test-suite + --cache-file cache/config.cache --disable-gcc-warnings --disable-guile --disable-doc + - gmake -j$(sysctl hw.ncpu | awk '{print $2}') + - gmake check -j$(sysctl hw.ncpu | awk '{print $2}') tags: - freebsd only: @@ -377,71 +480,153 @@ FreeBSD10/x86_64: - ./*.log - tests/*.log - tests/*/*.log + retry: 1 -# We need a clean 32-bit fedora for testing -Fedora/x86: +# Two runs, one with normal backend and another with pkcs11 trust store +UB+ASAN-Werror.Fedora.x86_64.gcc: stage: stage1-testing - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_X86_BUILD + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD script: - - git submodule update --init --no-fetch - - make autoreconf && mkdir -p build && cd build && - ../configure --build=i686-redhat-linux --target=i686-redhat-linux --disable-cxx --enable-local-libopts --disable-non-suiteb-curves --enable-seccomp-tests --disable-doc --disable-guile && - make -j$(nproc) && make check -j$(nproc) && make pic-check + - ./bootstrap + - export UBSAN_OPTIONS=print_stacktrace=1 + - export LSAN_OPTIONS=suppressions=$(pwd)/devel/lsan.supp + - export CFLAGS="-std=c99 -O1 -g -Wno-cpp -Werror -fno-omit-frame-pointer -fsanitize=undefined,bool,alignment,null,enum,bounds-strict,address,leak,nonnull-attribute -fno-sanitize-recover=all -fsanitize-address-use-after-scope" + - export CXXFLAGS="$CFLAGS" + - dash ./configure --cache-file cache/config.cache --disable-guile --disable-doc --disable-hardware-acceleration + - sed -i 's/-Werror/-Wno-parentheses -Werror/g' src/Makefile + - make -j$BUILDJOBS + # Use $BUILDJOBS since the fuzzers should use mainly CPU (no blocking I/O) + - make -j$BUILDJOBS check -C fuzz + - make -j$BUILDJOBS check -C fuzz GNUTLS_CPUID_OVERRIDE=0x1 + - make -j$BUILDJOBS check -C fuzz GNUTLS_CPUID_OVERRIDE=0x2 + - make -j$BUILDJOBS check -C fuzz GNUTLS_CPUID_OVERRIDE=0x4 + - make -j$BUILDJOBS check -C fuzz GNUTLS_CPUID_OVERRIDE=0x8 + - make -j$BUILDJOBS check -C fuzz GNUTLS_CPUID_OVERRIDE=0x20 + - make -j$CHECKJOBS check -C tests + - dash ./configure --cache-file cache/config.cache --disable-guile --disable-doc --disable-hardware-acceleration --with-default-trust-store-pkcs11="pkcs11:" --with-system-priority-file=/etc/crypto-policies/back-ends/gnutls.config --with-default-priority-string=@SYSTEM + - make clean + - sed -i 's/-Werror/-Wno-parentheses -Werror/g' src/Makefile + - make -j$BUILDJOBS + # Use $BUILDJOBS since most of the job is building all tests, then just running 4 tests + - make -j$BUILDJOBS check -C tests TESTS="trust-store p11-kit-load.sh priority-init2 set-default-prio" SUBDIRS=. tags: - shared + - linux except: - tags artifacts: expire_in: 1 week when: on_failure paths: + - guile/tests/*.log + - ./*.log + - fuzz/*.log + - tests/*.log + - tests/*/*.log + - tests/suite/*/*.log + retry: 1 + +# This includes interoperability testing with gnutls 2.12.x +Debian.x86_64: + stage: stage1-testing + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD + script: + - ./bootstrap + - mkdir -p build + - cd build + - dash ../configure --enable-oldgnutls-interop --disable-gcc-warnings --cache-file ../cache/config.cache --disable-doc --disable-guile LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now' + - make -j$BUILDJOBS + - make -j$CHECKJOBS check + - cd .. + tags: + - shared + - linux + except: + - tags + artifacts: + expire_in: 1 week + when: on_failure + paths: + - build/guile/tests/*.log - build/*.log - build/tests/*.log - build/tests/*/*.log - build/tests/suite/*/*.log + retry: 1 -# Two runs, one with normal backend and another with pkcs11 trust store -ubsan-Werror/Fedora/x86_64: +Debian.cross.i686-linux-gnu: stage: stage1-testing - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_X86_CROSS_BUILD script: - - git submodule update --init --no-fetch - - make autoreconf - - CFLAGS="-fsanitize=undefined -fno-sanitize-recover -g -O2" LDFLAGS="-static-libubsan" ./configure --disable-non-suiteb-curves --disable-guile --disable-doc - - make -j$(nproc) -C gl - - make -j$(nproc) -C lib CFLAGS="-Werror -O2 -g" - - make -j$(nproc) -C libdane CFLAGS="-Werror -O2 -g" - - make -j$(nproc) - - make check -j$(nproc) - - CFLAGS="-fsanitize=undefined -fno-sanitize-recover -g -O2" LDFLAGS="-static-libubsan" ./configure --disable-non-suiteb-curves --disable-guile --disable-doc --with-default-trust-store-pkcs11="pkcs11:" - - make -j$(nproc) - - make -C tests check -j$(nproc) TESTS=trust-store SUBDIRS=. + - build=$(dpkg-architecture -qDEB_HOST_GNU_TYPE) + - host=i686-linux-gnu + # not setting CC_FOR_BUILD paired with qemu-user/binfmt somehow causes + # config.guess to detect the target as the build platform and not activate + # cross-compile mode even though --build is given + - export CC_FOR_BUILD="ccache gcc" + - export CC="ccache $host-gcc" + - ./bootstrap + - mkdir -p build + - cd build + # Debian's softhsm package is not multiarch yet. Missing softhsm libraries + # for the target will cause the test suite to fail when p11-kit is enabled. + - dash ../configure --build=$build --host=$host --disable-gcc-warnings + --cache-file ../cache/config.cache --disable-doc --disable-guile + --without-p11-kit --disable-full-test-suite + - make -j$BUILDJOBS + - make pic-check + # Parallel tests cause random failures, likely timing errors + - make -j1 check + - cd .. tags: - shared + - docker + - linux except: - tags artifacts: + expire_in: 1 week when: on_failure paths: - - guile/tests/*.log - - ./*.log - - tests/*.log - - tests/*/*.log - - tests/suite/*/*.log + - build/guile/tests/*.log + - build/*.log + - build/tests/*.log + - build/tests/*/*.log + - build/tests/suite/*/*.log + retry: 1 -build/Debian/x86_64: +.Debian.cross.template: &Debian_cross_template stage: stage1-testing - image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_BUILD + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$DEBIAN_CROSS_BUILD script: - - git submodule update --init --no-fetch - - make autoreconf && mkdir -p build && cd build && - ../configure --disable-doc --disable-guile && - make -j$(nproc) && make check -j$(nproc) + - build=$(dpkg-architecture -qDEB_HOST_GNU_TYPE) + - host="${CI_JOB_NAME#*.cross.}" + # not setting CC_FOR_BUILD paired with qemu-user/binfmt somehow causes + # config.guess to detect the target as the build platform and not activate + # cross-compile mode even though --build is given + - export CC_FOR_BUILD="ccache gcc" + - export CC="ccache $host-gcc" + - ./bootstrap + - sed -i '/errno.==.EINVAL/d' gl/tests/test-strerror.c + - mkdir -p build + - cd build + # Debian's softhsm package is not multiarch yet. Missing softhsm libraries + # for the target will cause the test suite to fail when p11-kit is enabled. + - dash ../configure --build=$build --host=$host --disable-gcc-warnings + --cache-file ../cache/config.cache --disable-doc --disable-guile + --without-p11-kit --disable-full-test-suite + - make -j$BUILDJOBS + # Parallel tests cause random failures, likely timing errors + - make -j1 check + - cd .. tags: - shared + - docker + - linux except: - tags artifacts: + expire_in: 1 week when: on_failure paths: - build/guile/tests/*.log @@ -449,3 +634,77 @@ build/Debian/x86_64: - build/tests/*.log - build/tests/*/*.log - build/tests/suite/*/*.log + retry: 1 + +Debian.cross.arm-linux-gnueabihf: + <<: *Debian_cross_template + +Debian.cross.mips-linux-gnu: + <<: *Debian_cross_template + +Debian.cross.aarch64-linux-gnu: + <<: *Debian_cross_template + +nettle-master.Fedora: + stage: stage1-testing + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + script: + - git clone --depth 1 --branch master https://gitlab.com/gnutls/nettle.git nettle-git + - export NETTLE_DIR=${PWD}/nettle + - pushd nettle-git + - ./.bootstrap + - ./configure --disable-documentation --prefix=$NETTLE_DIR + - make -j$BUILDJOBS + - make -j$BUILDJOBS install + - popd + - SUBMODULE_NOFETCH=1 ./bootstrap + - PKG_CONFIG_PATH=$NETTLE_DIR/lib64/pkgconfig dash ./configure --cache-file cache/config.cache --disable-gcc-warnings --disable-doc --disable-guile + - make -j$BUILDJOBS + - PKG_CONFIG_PATH=$NETTLE_DIR/lib64/pkgconfig LD_LIBRARY_PATH=$NETTLE_DIR/lib64 make -j$CHECKJOBS check + tags: + - shared + - linux + except: + - tags + artifacts: + expire_in: 1 week + when: on_failure + paths: + - ./*.log + - fuzz/*.log + - tests/*.log + - tests/*/*.log + - tests/suite/*/*.log + retry: 1 + +nettle-master-minigmp.Fedora: + stage: stage1-testing + image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD + script: + - git clone --depth 1 --branch master https://gitlab.com/gnutls/nettle.git nettle-git + - export NETTLE_DIR=${PWD}/nettle + - pushd nettle-git + - ./.bootstrap + - ./configure --disable-documentation --enable-mini-gmp --prefix=$NETTLE_DIR + - make -j$BUILDJOBS + - make -j$BUILDJOBS install + - popd + - SUBMODULE_NOFETCH=1 ./bootstrap + - PKG_CONFIG_PATH=$NETTLE_DIR/lib64/pkgconfig dash ./configure --cache-file cache/config.cache --disable-gcc-warnings --disable-doc --disable-guile --disable-full-test-suite + - make -j$BUILDJOBS + - PKG_CONFIG_PATH=$NETTLE_DIR/lib64/pkgconfig LD_LIBRARY_PATH=$NETTLE_DIR/lib64 make -j$CHECKJOBS check + tags: + - shared + - linux + except: + - tags + artifacts: + expire_in: 1 week + when: on_failure + paths: + - ./*.log + - fuzz/*.log + - tests/*.log + - tests/*/*.log + - tests/suite/*/*.log + retry: 1 diff --git a/.gitmodules b/.gitmodules index 8748507257..911c918895 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,6 @@ [submodule "devel/openssl"] path = devel/openssl url = https://github.com/openssl/openssl.git -[submodule "tlsproxy"] - path = doc/examples/tlsproxy - url = https://github.com/abligh/tlsproxy.git [submodule "tests/suite/tls-fuzzer/tlsfuzzer"] path = tests/suite/tls-fuzzer/tlsfuzzer url = https://github.com/tomato42/tlsfuzzer.git @@ -13,3 +10,12 @@ [submodule "tests/suite/tls-fuzzer/tlslite-ng"] path = tests/suite/tls-fuzzer/tlslite-ng url = https://github.com/tomato42/tlslite-ng.git +[submodule "gnulib"] + path = gnulib + url = https://gitlab.com/libidn/gnulib-mirror.git +[submodule "devel/nettle"] + path = devel/nettle + url = https://gitlab.com/gnutls/nettle.git +[submodule "devel/libtasn1"] + path = devel/libtasn1 + url = https://gitlab.com/gnutls/libtasn1.git diff --git a/.lgtm.yml b/.lgtm.yml new file mode 100644 index 0000000000..be8dfe1e2e --- /dev/null +++ b/.lgtm.yml @@ -0,0 +1,10 @@ +extraction: + cpp: + configure: + command: + - sed 's/--with-tests/--without-tests/g' -i bootstrap.conf + - "./bootstrap --no-git --skip-po --no-bootstrap-sync --gnulib-srcdir=gnulib" + - "./configure --disable-tests --disable-doc --disable-gtk-doc --disable-dependency-tracking" + index: + build_command: + - "make -j4" diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000000..e44ed4e4e0 --- /dev/null +++ b/.mailmap @@ -0,0 +1,22 @@ +Andreas Metzler +Andreas Metzler +Daiki Ueno +Daiki Ueno +Daiki Ueno +David Woodhouse +Giuseppe Scrivano +Ludovic Courtès +Ludovic Courtès +Nikos Mavrogiannopoulos +Nikos Mavrogiannopoulos +Nikos Mavrogiannopoulos +Nikos Mavrogiannopoulos +Nikos Mavrogiannopoulos +Nikos Mavrogiannopoulos +Simon Josefsson +Simon Josefsson +Stefan Berger +Stef Walter +Tim Rühsen Tim Ruehsen +Tom Vrancken +Dmitry Baryshkov diff --git a/.travis.yml b/.travis.yml index e7e0272f49..026a05f26e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,17 +15,25 @@ notifications: before_install: - - git submodule update --init - if [[ "$TRAVIS_OS_NAME" = "osx" ]]; then - brew install autoconf automake autogen libtool nettle valgrind p11-kit libtasn1 gettext; + brew update; + for pkg in openssl autoconf automake autogen libtool nettle p11-kit libtasn1 gettext bison;do + brew install $pkg || true; + done; + for pkg in nettle wget p11-kit libtasn1;do + brew upgrade $pkg || true; + done; fi script: - - PATH=/usr/local/opt/gettext/bin:$PATH make autoreconf - - PATH=/usr/local/opt/gettext/bin:$PATH ./configure --disable-full-test-suite --disable-valgrind-tests --disable-doc --disable-guile --disable-dependency-tracking - - make -j$(sysctl -n hw.ncpu) + - export PATH="/usr/local/opt/gettext/bin:$PATH" + - export PATH="/usr/local/opt/bison/bin:$PATH" + - ./bootstrap + - ./configure --disable-full-test-suite --disable-valgrind-tests --disable-doc --disable-guile --disable-dependency-tracking + - make -j$(sysctl -n hw.ncpu) || make -j$(sysctl -n hw.ncpu) V=1 - make -j$(sysctl -n hw.ncpu) check gl_public_submodule_commit= after_failure: - - for i in tests/*.log;do echo "" && echo $i && cat $i;done - + - find . -name 'test-suite.log' -execdir grep -il "FAILED" {} \; -exec echo {} \; -exec cat {} \; + - for i in tests/*.log fuzz/*.log;do echo "" && echo $i && cat $i;done + - cat config.log diff --git a/.triage-policies.yml b/.triage-policies.yml new file mode 100644 index 0000000000..8a88ad9af9 --- /dev/null +++ b/.triage-policies.yml @@ -0,0 +1,69 @@ +resource_rules: + issues: + rules: + - name: Triage policy + conditions: + date: + attribute: updated_at + condition: older_than + interval_type: days + interval: 30 + state: opened + no_additional_labels: true + limits: + most_recent: 50 + actions: + labels: + - needs attention + comment: | + {{author}} This issue is unlabelled after 30 days. It needs attention. + summarize: + title: | + #{resource[:type].capitalize} require labels + item: | + - [ ] [{{title}}]({{web_url}}) {{labels}} + redact_confidential_resources: false + summary: | + The following issues require labels: + + {{items}} + + Please take care of them. + + /label ~"needs attention" + + - name: Close old needinfo policy + conditions: + date: + attribute: updated_at + condition: older_than + interval_type: months + interval: 1 + state: opened + labels: + - needinfo + limits: + most_recent: 50 + actions: + status: close + comment: | + {{author}} This issue was marked as needinfo with no update for long time. We are now closing it, but please re-open if it is still relevant. + + merge_requests: + rules: + - name: Close old WIP policy + conditions: + title: WIP + date: + attribute: updated_at + condition: older_than + interval_type: months + interval: 4 + state: opened + no_additional_labels: true + limits: + most_recent: 50 + actions: + status: close + comment: | + {{author}} This merge request is marked as work in progress with no update for very long time. We are now closing it, but please re-open if you are still interested in finishing this merge request. diff --git a/.x-sc_prohibit_test_minus_ao b/.x-sc_prohibit_test_minus_ao new file mode 100644 index 0000000000..ad4342ffed --- /dev/null +++ b/.x-sc_prohibit_test_minus_ao @@ -0,0 +1 @@ +^m4/guile.m4 diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index e0e7809de1..0000000000 --- a/AUTHORS +++ /dev/null @@ -1,56 +0,0 @@ -GnuTLS AUTHORS -- Information about the authors. -Copyright (C) 2000-2012 Free Software Foundation, Inc. -See the end for copying conditions. - -The copyright holder for GnuTLS is Free Software Foundation, Inc., 51 -Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -Simon Josefsson *simon [at] josefsson.org* -Previous maintainer; draft TLS 1.2 support. - -Nikos Mavrogiannopoulos *nmav [at] gnutls.org* -Original author and maintainer of GnuTLS. - -Fabio Fiorina *Fabio.Fiorina [at] alcatel.it* -ASN.1 structures parser library (libtasn1). - -Timo Schulz *twoaday [at] freakmail.de* -OpenPGP support (OpenCDK library). - -Andrew McDonald *andrew [at] mcdonald.org.uk* -OpenSSL compatible interface. - -Ludovic Courtes *ludo [at] gnu.org* -Guile bindings, OpenPGP bug fixes. - -Stefan Walter *stef [at] memberwebs.com* -PKCS8 fix, PKCS #11 backend move to p11-kit. - -Yoshisato YANAGISAWA *yanagisawa [at] csg.is.titech.ac.jp* -Initial Camellia-CBC support. - -Daiki Ueno *ueno [at] unixuser.org* -TLS Session Ticket (RFC 5077) support, -finished client-side TLS 1.2 support. - -Jonathan Bastien-Filiatrault *joe [at] x2a.org* -Fix TLS-version checks. -Redesign and implementation of the buffering layer. -Initial DTLS implementation. - -Andy Polyakov *appro [at] openssl.org* -AES-NI and Padlock assembler code (at lib/accelerated/intel/asm/) - -David Woodhouse *dwmw2 [at] infradead.org* -DTLS 0.9 implementation. - -Martin Storjo *martin [at] martin.st* -DTLS-SRTP support. - -Alessandro Ghedini *alessandro [at] ghedini.me* -TLS Fallback SCSV support (RFC7507). - ----------------------------------------------------------------------- -Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2c97025d7b..96fb7ff0cc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,6 +9,7 @@ of changes. We try to stick to the following rules, so when contributing please try to follow them too. + # Git commits: Note that when contributing code you will need to assert that the contribution is @@ -26,6 +27,7 @@ $ cp devel/git-template ~/.git-template $ git config commit.template ~/.git-template ``` + # Test suite: New functionality should be accompanied by a test case which verifies @@ -45,6 +47,7 @@ Note that we do not regenerate test certificates when they expire, but we rather fix the test's time using datefudge or gnutls_global_set_time_function(). For example, see [x509cert-tl.c](tests/x509cert-tl.c). + # File names: Files are split to directories according to the subsystem @@ -63,8 +66,20 @@ case by case basis. # Indentation style: - In general, use the Linux kernel coding style. You may indent the source -using GNU indent, e.g. "indent -linux *.c". + In general, use [the Linux kernel coding style](https://www.kernel.org/doc/html/latest/process/coding-style.html). +You may indent the source using GNU indent, e.g. "indent -linux *.c". + + +# Commenting style + +In general for documenting new code we prefer self-documented code to comments. That is: + - Meaningful function and macro names + - Short functions which do a single thing + +That does not mean that no comments are allowed, but that when they are +used, they are used to document something that is not obvious, or the protocol +expectations. Though we haven't followed that rule strictly in the past, it +should be followed on new code. # Function names: @@ -77,7 +92,6 @@ E.g. ```gnutls_x509_crt_get_dn```, refers to the X.509 certificate parsing part of gnutls. Some of the used prefixes are the following. * ```gnutls_x509_crt_``` for the X.509 certificate part - * ```gnutls_openpgp_key_``` for the openpgp key part * ```gnutls_session_``` for the TLS session part (but this may be omited) * ```gnutls_handshake_``` for the TLS handshake part * ```gnutls_record_``` for the TLS record protocol part @@ -85,14 +99,114 @@ following. * ```gnutls_credentials_``` for the credentials structures * ```gnutls_global_``` for the global structures handling -Internal functions -- that are not exported in the API -- should -be prefixed with an underscore. E.g. ```_gnutls_handshake_begin()``` +All exported API functions must be listed in libgnutls.map +in order to be exported. + +Internal functions, i.e, functions that are not exported in the API but +are used internally by multiple files, should be prefixed with an underscore. +For example `_gnutls_handshake_begin()`. + +Internal functions restricted to a file (static), or inline functions, should +not use the `_gnutls` prefix for simplicity, e.g., `get_version()`. Internal structures should not be exported. Especially pointers to internal data. Doing so harms future reorganization/rewrite of subsystems. +They can however be used by unit tests in tests/ directory; in that +case they should be part of the GNUTLS_PRIVATE_3_4 tag in libgnutls.map. -All exported functions must be listed in libgnutls.map.in, -in order to be exported. + +# Header guards + + Each private C header file SHOULD have a header guard consisting of the +project name and the file path relative to the project directory, all uppercase. + +Example: `lib/srp.h` uses the header guard `GNUTLS_LIB_SRP_H`. + +The header guard is used as first and last effective code in a header file, +like e.g. in lib/srp.h: + +``` +#ifndef GNUTLS_LIB_SRP_H +#define GNUTLS_LIB_SRP_H + +... + +#endif /* GNUTLS_LIB_SRP_H */ +``` + +The public header files follow a similar convention but use the relative +install directory as template, e.g. `GNUTLS_GNUTLS_H` for `gnutls/gnutls.h`. + + +# Introducing new functions / API + + Prior to introducing any new API consider all options to offer the same +functionality without introducing a new function. The reason is that we want +to avoid breaking the ABI, and thus we cannot typically remove any function +that was added (though we have few exceptions). Since we cannot remove, it +means that experimental APIs, or helper APIs that are not typically needed +may become a burden to maintain in the future. That is, they may prevent +a refactoring, or require to keep legacy code. + +As such, some questions to answer before adding a new API: + * Is this API useful for a large class of applications, or is it limited + to few? + * If it is limited to few, can we work around that functionality without + a new API? + * Would that function be relevant in the future when a new protocol such TLS + 13.0 is made available? Would it harm the addition of a new protocol? + + +The make rule 'abi-check' verifies that the ABI remained compatible since +the last tagged release. It relies on the git tree and abi-compliance-checker. + +The above do not apply to the C++ library; this library's ABI should not +be considered stable. + + +# Introducing new features / modifying behavior + + When a new feature is introduced which may affect already deployed code, +it must be disabled by default. For example a new TLS extension should be +enabled when explicitly requested by the application. That can happen for +example with a gnutls_init() flag. + +The same should be followed when an existing function behavior is modified +in a way that may break existing applications which use the API in a +reasonable way. If the existing function allows flags, then a new flag +should be introduced to enable the new behavior. + +When it is necessary, or desireable to enable the new features by default +(e.g., TLS1.3 introduction), the "next" releases should be used (and +introduced if necessary), to allow the modification to be tested for an +extended amount of time (see the [Release policy](RELEASES.md)). + + +# API documentation + +When introducing a new API, we provide the function documentation as +inline comments, in a way that it can be used to generate a man-page +and be included in our manual. For that we use gnome-style comments +as in the example below. The detailed form is documented on `doc/scripts/gdoc`. + +/** + * gnutls_init: + * @session: is a pointer to a #gnutls_session_t type. + * @flags: indicate if this session is to be used for server or client. + * + * This function initializes the provided session. Every + * session must be initialized before use, and must be deinitialized + * after used by calling gnutls_deinit(). + * + * @flags can be any combination of flags from %gnutls_init_flags_t. + * + * Note that since version 3.1.2 this function enables some common + * TLS extensions such as session tickets and OCSP certificate status + * request in client side by default. To prevent that use the %GNUTLS_NO_EXTENSIONS + * flag. + * + * Returns: %GNUTLS_E_SUCCESS on success, or a negative error code. + **/ # Constructed types: @@ -115,8 +229,14 @@ The gnutls functions accept parameters in the order: 1. Input parameters 2. Output parameters -When data and size is expected, a gnutls_datum structure should be -used (or more precisely a pointer to the structure). +When data and size are expected as input, a const gnutls_datum_t structure +should be used (or more precisely a pointer to the structure). + +When data pointer and size are to be returned as output, a gnutls_datum_t +structure should be used. + +When output is to be copied to caller an array of fixed data should be +provided. # Callback function parameters: @@ -139,6 +259,27 @@ error codes are defined in gnutls.h and a description is available in gnutls_errors.c +Functions which are intended to return a boolean value should return +a type of bool, and it is recommended to contain the string '_is_' +on its function name; e.g., +``` +bool _gnutls_is_not_prehashed(); +``` + +That allows the distinguishing functions that return negative errors +from boolean functions to both the developer and the compiler. Note +that in the past the 'unsigned' type was used to distinguish boolean functions +and several of these still exist. + +## Selecting the right return value + +When selecting the return value for a TLS protocol parsing function +a suggested approach is to check which alert fits best on that error +(see `alert.c`), and then select from the error codes which are mapped +to that alert (see `gnutls_error_to_alert()`). For more generic parsing +errors consider using the `GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER`. + + # Usage of assert() The assert() macro --not to be confused with gnutls_assert()-- is used @@ -160,6 +301,109 @@ The NDEBUG macro is not used in GnuTLS compilation, so the assert() macros are always active. +# Gnulib + +The directories `gl/`, `src/gl/` and `lib/unistring` contain gnulib files +copied/created by `./bootstrap`. Gnulib is a portability source code library +to handle API or behavior incompatibilities between target systems. + +To take advantage of the latest gnulib files, we have to update the +`gnulib/` submodule from time to time: +``` +$ make glimport +``` + +Note that the gnulib library in `gl/` is used by the GnuTLS library +and is kept separate from the gnulib used by the GnuTLS tools because +of license issues, and also to prevent any gnulib networking modules +from entering the library (gnulib networking re-implements the windows +network stack and causes issues to gnutls applications running on windows). + + +# Compiler warnings + +The compiler prints warnings for several reasons; these warnings are +also not constant in time, different versions of the same compiler may +warn about different issues. + +In GnuTLS we enable as many as possible warnings available in the compiler +via configure.ac. On certain cases however we silence or disable warnings +and the following subsections go case by case. + +## Switch unintended fall-through warnings + +These we silence by using the macro FALLTHROUGH under a switch +statement which intentionally falls through. Example: +``` +switch (session->internals.recv_state) { + case RECV_STATE_DTLS_RETRANSMIT: + ret = _dtls_retransmit(session); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.recv_state = RECV_STATE_0; + FALLTHROUGH; + case RECV_STATE_0: + + _dtls_async_timer_check(session); + return 1; +} +``` + + +# Symbol and library versioning + + The library uses the libtool versioning system, which in turn +results to a soname bump on incompatible changes. That is described +in [hooks.m4](m4/hooks.m4). Despite its complexity that system is +only sufficient to distinguish between versions of the library that +have broke ABI (i.e., soname bump occurred). + +Today however, soname versioning isn't sufficient. Symbol versioning +as provided by [libgnutls.map](lib/libgnutls.map) have several +advantages. + * they allow for symbol clashing between different gnutls library + versions being in the same address space. + * they allow installers to detect the library version used for + an application utilizing a specific symbol + * the allow introducing multiple versions of a symbol a la libc, + keeping the semantics of old functions while introducing new. + +As such for every symbol introduced on a particular version, we +create an entry in libgnutls.map based on the version and containing +the new symbols. For example, if in version 3.6.2 we introduce symbol +```gnutls_xyz```, the entry would be: + +GNUTLS_3_6_2 { + global: + gnutls_xyz; +} GNUTLS_3_6_1; + +where ```GNUTLS_3_6_1``` is the last version that symbols were introduced, +and indicates a dependency of 3.6.2 to symbols of 3.6.1. + +Note that when the soname version is bumped, i.e., the ABI is broken +all the previous symbol versions should be combined into a single. For +example on the 3.4.0 soname bump, all symbols were put under the +GNUTLS_3_4 version. + +Backporting new symbols to an old version which is soname compatible +is not allowed (can cause quite some problems). Backporting symbols +to an incompatible soname version is allowed, but must ensure that +the symbol version used for the backported symbol version is distinct from +the original library symbol version. E.g., if symbol ```gnutls_xyz``` +with version GNUTLS_3_6_3 is backported on gnutls 3.3.15, it should +use version GNUTLS_3_3_15. + + +# Auto-generated files: + Several parts of the documentation and the command line tools parameters +files (.def) are auto-generated. Normally when introducing new functions, +or adding new command line options to tools you need to run 'make +files-update', review the output (when feasible) and commit it separately, +e.g., with a message: "auto-generated files update". + + # Guile bindings: Parts of the Guile bindings, such as types (aka. "SMOBs"), enum values, @@ -182,3 +426,33 @@ two things must be done: Note that, for constants and enums, "schemefied" names are used, as noted under the "Guile API Conventions" node of the manual. + +# Automated testing + + GnuTLS primarily relies on gitlab-ci which is configured in .gitlab-ci.yml +file in the repository. The goal is to have a test suite which runs for +every new merge request prior to merging. There are no particular rules for +the test targets, except for them being reliable and running in a reasonable +timeframe (~1 hour). + + +# Reviewing code + + A review as part of the gitlab merge requests, is a way to prevent errors due to +these guidelines not being followed, e.g., verify there is a reasonable test suite, +and whether it covers reasonably the new code, that the function naming is +consistent with these guidelines, as well as check for obvious mistakes in the new +code. + +The intention is to keep reviews lightweight, and rely on CI for tasks such +as compiling and testing code and features. + +A proposed checklist to assist such reviews follows. + * [ ] Any issues marked for closing are addressed + * [ ] There is a test suite reasonably covering new functionality or modifications + * [ ] Function naming, parameters, return values, types, etc., are consistent and according to `CONTRIBUTION.md` + * [ ] This feature/change has adequate documentation added + * [ ] No obvious mistakes in the code + + +[Guidelines to consider when reviewing.](https://github.com/thoughtbot/guides/tree/master/code-review) diff --git a/GNUmakefile b/GNUmakefile deleted file mode 100644 index a869da5bff..0000000000 --- a/GNUmakefile +++ /dev/null @@ -1,127 +0,0 @@ -# Having a separate GNUmakefile lets me 'include' the dynamically -# generated rules created via cfg.mk (package-local configuration) -# as well as maint.mk (generic maintainer rules). -# This makefile is used only if you run GNU Make. -# It is necessary if you want to build targets usually of interest -# only to the maintainer. - -# Copyright (C) 2001, 2003, 2006-2016 Free Software Foundation, Inc. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# If the user runs GNU make but has not yet run ./configure, -# give them a diagnostic. -_gl-Makefile := $(wildcard [M]akefile) -ifneq ($(_gl-Makefile),) - -# Make tar archive easier to reproduce. -export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner - -# Allow the user to add to this in the Makefile. -ALL_RECURSIVE_TARGETS = - -include Makefile - -# Some projects override e.g., _autoreconf here. --include $(srcdir)/cfg.mk - -# Allow cfg.mk to override these. -_build-aux ?= build-aux -_autoreconf ?= autoreconf -v - -include $(srcdir)/maint.mk - -# Ensure that $(VERSION) is up to date for dist-related targets, but not -# for others: rerunning autoreconf and recompiling everything isn't cheap. -_have-git-version-gen := \ - $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes) -ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL)) - _is-dist-target ?= $(filter-out %clean, \ - $(filter maintainer-% dist% alpha beta stable,$(MAKECMDGOALS))) - _is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS))) - ifneq (,$(_is-dist-target)$(_is-install-target)) - _curr-ver := $(shell cd $(srcdir) \ - && $(_build-aux)/git-version-gen \ - .tarball-version \ - $(git-version-gen-tag-sed-script)) - ifneq ($(_curr-ver),$(VERSION)) - ifeq ($(_curr-ver),UNKNOWN) - $(info WARNING: unable to verify if $(VERSION) is the correct version) - else - ifneq (,$(_is-install-target)) - # GNU Coding Standards state that 'make install' should not cause - # recompilation after 'make all'. But as long as changing the version - # string alters config.h, the cost of having 'make all' always have an - # up-to-date version is prohibitive. So, as a compromise, we merely - # warn when installing a version string that is out of date; the user - # should run 'autoreconf' (or something like 'make distcheck') to - # fix the version, 'make all' to propagate it, then 'make install'. - $(info WARNING: version string $(VERSION) is out of date;) - $(info run '$(MAKE) _version' to fix it) - else - $(info INFO: running autoreconf for new version string: $(_curr-ver)) -GNUmakefile: _version - touch GNUmakefile - endif - endif - endif - endif -endif - -.PHONY: _version -_version: - cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf) - $(MAKE) $(AM_MAKEFLAGS) Makefile - -else - -.DEFAULT_GOAL := abort-due-to-no-makefile -srcdir = . - -# The package can override .DEFAULT_GOAL to run actions like autoreconf. --include ./cfg.mk - -# Allow cfg.mk to override these. -_build-aux ?= build-aux -_autoreconf ?= autoreconf -v - -include ./maint.mk - -ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile) -$(MAKECMDGOALS): abort-due-to-no-makefile -endif - -abort-due-to-no-makefile: - @echo There seems to be no Makefile in this directory. 1>&2 - @echo "You must run ./configure before running 'make'." 1>&2 - @exit 1 - -endif - -# Tell version 3.79 and up of GNU make to not build goals in this -# directory in parallel, in case someone tries to build multiple -# targets, and one of them can cause a recursive target to be invoked. - -# Only set this if Automake doesn't provide it. -AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \ - $(RECURSIVE_CLEAN_TARGETS:-recursive=) \ - dist distcheck tags ctags - -ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS) - -ifneq ($(word 2, $(MAKECMDGOALS)), ) -ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), ) -.NOTPARALLEL: -endif -endif diff --git a/INSTALL.md b/INSTALL.md index 2016e91e0c..aa2c5fd5d4 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -3,7 +3,7 @@ GnuTLS README -- Important introductory notes GnuTLS implements the TLS/SSL (Transport Layer Security aka Secure Sockets Layer) protocol. GnuTLS is a GNU project. Additional -information can be found at . +information can be found at . README @@ -13,7 +13,7 @@ This README is targeted for users of the library who build from sources but do not necessarily develop. If you are interested in developing and contributing to the GnuTLS project, please see README-alpha and visit -http://www.gnutls.org/manual/html_node/Contributing.html. +https://www.gnutls.org/manual/html_node/Contributing.html. COMPILATION @@ -36,16 +36,16 @@ the shared object (libgnutls.so), and additional binaries such as certtool and gnutls-cli. The library depends on libnettle and gmplib. -* gmplib: for big number arithmetic, http://gmplib.org/ -* nettle: for cryptographic algorithms, http://www.lysator.liu.se/~nisse/nettle/ +* gmplib: for big number arithmetic, https://gmplib.org/ +* nettle: for cryptographic algorithms, https://www.lysator.liu.se/~nisse/nettle/ Optionally it may use the following libraries: -* libtasn1: For ASN.1 parsing (a copy is included, if not found), http://www.gnu.org/software/libtasn1/ -* p11-kit: for smart card support, http://p11-glue.freedesktop.org/p11-kit.html -* libtspi: for Trusted Platform Module (TPM) support, http://trousers.sourceforge.net/ -* libunbound: For DNSSEC/DANE support, http://unbound.net/ -* libz: For compression support, http://www.zlib.net/ -* libidn: For supporting internationalized DNS names (IDNA 2003), http://www.gnu.org/software/libidn/ +* libtasn1: For ASN.1 parsing (a copy is included, if not found), https://www.gnu.org/software/libtasn1/ +* p11-kit: for smart card support, https://p11-glue.github.io/p11-glue/p11-kit.html +* libtspi: for Trusted Platform Module (TPM) support, https://trousers.sourceforge.net/ +* libunbound: For DNSSEC/DANE support, https://unbound.net/ +* libz: For compression support, https://www.zlib.net/ +* libidn: For supporting internationalized DNS names (IDNA 2003), https://www.gnu.org/software/libidn/ * libidn2: For supporting internationalized DNS names (IDNA 2008), https://www.gnu.org/software/libidn/#libidn2 To configure libnettle for installation and use by GnuTLS, a typical @@ -74,14 +74,14 @@ DOCUMENTATION ============= See the documentation in doc/ and online at -http://www.gnutls.org/manual. +https://www.gnutls.org/manual. EXAMPLES ======== See the examples in doc/examples/ and online at 'How To Use GnuTLS in -Applications' at http://www.gnutls.org/manual. +Applications' at https://www.gnutls.org/manual. SECURITY ADVISORIES @@ -91,14 +91,14 @@ The project collects and publishes information on past security incidents and vulnerabilities. Open information exchange, including information which is [sometimes] suppressed in non-open or non-free projects, is one of the goals of the GnuTLS project. Please visit -http://www.gnutls.org/security.html. +https://www.gnutls.org/security.html. MAILING LISTS ============= The GnuTLS project maintains mailing lists for users, developers, and -commits. Please see http://www.gnutls.org/lists.html. +commits. Please see https://www.gnutls.org/lists.html. LICENSING @@ -144,7 +144,7 @@ of a previous git clone. git format-patch ``` -For more information on use of Git, visit http://git-scm.com/ +For more information on use of Git, visit https://git-scm.com/ ---------------------------------------------------------------------- Copying and distribution of this file, with or without modification, diff --git a/Makefile.am b/Makefile.am index 31288a33a6..ae5820c62d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -19,7 +19,14 @@ # along with this file; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --disable-valgrind-tests +DISTCHECK_CONFIGURE_FLAGS = \ + --enable-doc \ + --enable-gtk-doc \ + --disable-valgrind-tests \ + --with-guile-site-dir='$$(datarootdir)/guile/site/$$(GUILE_EFFECTIVE_VERSION)' \ + --with-guile-site-ccache-dir='$$(libdir)/guile/$$(GUILE_EFFECTIVE_VERSION)/site-ccache' \ + --with-guile-extension-dir='$$(libdir)/guile/$$(GUILE_EFFECTIVE_VERSION)/extensions' \ + AUTOGEN=false SUBDIRS = gl lib extra @@ -35,7 +42,7 @@ SUBDIRS += src/gl endif if ENABLE_TESTS -SUBDIRS += tests +SUBDIRS += tests fuzz endif if HAVE_GUILE @@ -50,12 +57,18 @@ if ENABLE_DOC SUBDIRS += doc endif -ACLOCAL_AMFLAGS = -I m4 -I gl/m4 -I src/libopts/m4 -I src/gl/m4 -I lib/unistring/m4 +ACLOCAL_AMFLAGS = -I m4 -I src/libopts/m4 -I src/gl/m4 -I lib/unistring/m4 --install EXTRA_DIST = cfg.mk maint.mk CONTRIBUTING.md README.md LICENSE AUTHORS NEWS \ - ChangeLog THANKS INSTALL.md + ChangeLog THANKS INSTALL.md RELEASES.md -TMPFILE="abi-temp.xml" +DISTCLEANFILES = AUTHORS + +AUTHORS: + @echo -e "The authors list is autogenerated from the git history; sorted by number of commits\n" >AUTHORS + @git shortlog -sen| cut -f 2 | sed 's/@/ at /g' >> AUTHORS + @echo -e "\n\nThe translators list is autogenerated from po file history\n" >>AUTHORS + @sed -n 's/.*Last-Translator: *\(.*\) *<.*/\1/p' po/*.po | sort -u >>AUTHORS pic-check: @echo "Checking for position dependent code" @@ -64,46 +77,89 @@ pic-check: false; \ fi -abi-dump: - @abi-dumper lib/.libs/libgnutls.so -lver $(VERSION) -o "./devel/ABI-$(VERSION)-$$(uname -m).dump" -public-headers lib/includes/gnutls/ - @echo "*******************************************************************************" - @echo "You need to modify Makefile.am abi-check rule if you need to check this release" - @echo "*******************************************************************************" - -abi-check: - @rm -f $(TMPFILE) - @echo "Checking libgnutls ABI" - @echo "$(VERSION)" >$(TMPFILE) - @echo "$(srcdir)/lib/includes/gnutls" >>$(TMPFILE) - @echo "$(builddir)/lib/includes/gnutls" >>$(TMPFILE) - @echo "$(builddir)/lib/.libs" >>$(TMPFILE) - for i in 3.4.0 3.4.17 3.5.8;do \ - test ! -f "$(srcdir)/devel/ABI-$$i-$$(uname -m).dump" || \ - abi-compliance-checker -abi -lib gnutls -old "$(srcdir)/devel/ABI-$$i-$$(uname -m).dump" -new $(TMPFILE) -skip-symbols $(srcdir)/devel/abi-unchecked-symbols; \ +ABIDW_COMMON = --no-show-locs --no-corpus-path +ABIGNORE_FILE = "$(top_srcdir)/devel/libgnutls.abignore" +SYMBOLS_LAST_FILE = "$(top_srcdir)/devel/symbols.last" +LIBGNUTLS_ABI_LAST_FILE = "$(top_srcdir)/devel/libgnutls-latest-$$(uname -m).abi" +LIBDANE_ABI_LAST_FILE = "$(top_srcdir)/devel/libdane-latest-$$(uname -m).abi" + +abi-dump-versioned: lib/libgnutls.la libdane/libgnutls-dane.la + @echo "**************************************************************************" + @echo "Generating versioned ABI files of current gnutls and gnutls-dane libraries" + @echo "**************************************************************************" + @abidw lib/.libs/libgnutls.so $(ABIDW_COMMON) --suppressions $(ABIGNORE_FILE) --out-file "$(srcdir)/devel/libgnutls-$(VERSION)-$$(uname -m).abi" + @abidw libdane/.libs/libgnutls-dane.so $(ABIDW_COMMON) --out-file "$(srcdir)/devel/libdane-$(VERSION)-$$(uname -m).abi" + +abi-dump-latest: lib/libgnutls.la libdane/libgnutls-dane.la + @echo "****************************************************************" + @echo "Generating ABI files of current gnutls and gnutls-dane libraries" + @echo "****************************************************************" + @abidw lib/.libs/libgnutls.so $(ABIDW_COMMON) --suppressions $(ABIGNORE_FILE) --out-file $(LIBGNUTLS_ABI_LAST_FILE) + @abidw libdane/.libs/libgnutls-dane.so $(ABIDW_COMMON) --out-file $(LIBDANE_ABI_LAST_FILE) + @rm -f "./devel/libgnutls-latest-$$(uname -m).tmp" + @rm -f "./devel/libdane-latest-$$(uname -m).tmp" + +abi-check-latest: lib/libgnutls.la libdane/libgnutls-dane.la + @echo "Checking whether the latest ABI dump matches" + @abidiff --suppressions $(ABIGNORE_FILE) lib/.libs/libgnutls.so $(LIBGNUTLS_ABI_LAST_FILE) --hd2 "$(srcdir)/lib/includes/gnutls/" --hd2 $(builddir)/lib/includes/gnutls/ ; if test $$? != 0;then \ + echo "*********************************************************"; \ + echo "libgnutls ABI has changed; use 'make files-update' "; \ + echo "and use 'git diff' to check correctness before committing"; \ + echo "*********************************************************"; \ + false; \ + fi + @abidiff libdane/.libs/libgnutls-dane.so $(LIBDANE_ABI_LAST_FILE) --hd2 "$(srcdir)/libdane/includes/gnutls/" --hd2 $(builddir)/lib/includes/gnutls/; if test $$? != 0;then \ + echo "*********************************************************"; \ + echo "libgnutls-dane ABI has changed; use 'make files-update' "; \ + echo "and use 'git diff' to check correctness before committing"; \ + echo "*********************************************************"; \ + false; \ + fi + @echo "********************************" + @echo "Current release matches ABI dump" + @echo "********************************" + +ABICHECK_COMMON = --no-added-syms +abi-check: lib/libgnutls.la libdane/libgnutls-dane.la + @for file in $$(echo $(srcdir)/devel/libgnutls-*-$$(uname -m).abi);do \ + echo "Comparing libgnutls with $$file"; \ + abidiff $${file} lib/.libs/libgnutls.so $(ABICHECK_COMMON) --suppressions $(ABIGNORE_FILE) --hd2 "$(srcdir)/lib/includes/gnutls/" --hd2 $(builddir)/lib/includes/gnutls/; \ + if test $$? != 0;then \ + echo "****************************************************************************"; \ + echo "ABI check failed; If intentional add suppression in devel/libgnutls.abignore"; \ + echo "****************************************************************************"; \ + exit 1; \ + fi; \ done - @echo "Checking libgnutls-dane ABI" - @echo "$(VERSION)" >$(TMPFILE) - @echo "$(srcdir)/libdane/includes/gnutls" >>$(TMPFILE) - @echo "$(srcdir)/lib/includes/gnutls" >>$(TMPFILE) - @echo "$(builddir)/lib/includes/gnutls" >>$(TMPFILE) - @echo "$(builddir)/libdane/.libs" >>$(TMPFILE) - test ! -f "$(srcdir)/devel/ABI-dane-$$(uname -m).dump" || abi-compliance-checker -abi -lib gnutls-dane -old "$(srcdir)/devel/ABI-dane-$$(uname -m).dump" -new $(TMPFILE) - @rm -f $(TMPFILE) - -symbol-check: - @objdump -T $(builddir)/lib/.libs/libgnutls.so | grep -v ' \*UND\*' | awk '{print $$7 "@" $$6;}' | grep -v GNUTLS_FIPS140 | grep -v GNUTLS_PRIVATE | grep -v '^@' | sort -u >symbols.last.tmp - @diff -u symbols.last symbols.last.tmp >/dev/null 2>&1; if test $$? != 0;then \ - diff -u symbols.last symbols.last.tmp | grep -v '\-\-\-' >symbols.diff.tmp 2>&1; \ + @for file in $$(echo $(srcdir)/devel/libdane-*-$$(uname -m).abi);do \ + echo "Comparing libgnutls-dane with $$file"; \ + abidiff $${file} libdane/.libs/libgnutls-dane.so $(ABICHECK_COMMON) --hd2 "$(srcdir)/libdane/includes/gnutls/" --hd2 $(builddir)/lib/includes/gnutls/; \ + if test $$? != 0;then \ + echo "**********************************************"; \ + echo "ABI check failed; If intentional add a "; \ + echo "libabigail suppression file for libgnutls-dane"; \ + echo "**********************************************"; \ + exit 1; \ + fi; \ + done + @echo "********************" + @echo "ABI checks completed" + @echo "********************" + +symbol-check: lib/libgnutls.la + @objdump -T $(builddir)/lib/.libs/libgnutls.so | grep -v ' \*UND\*' | awk '{print $$7 "@" $$6;}' | grep -v GNUTLS_FIPS140 | grep -v GNUTLS_PRIVATE | grep -v '^@' | sort -u >symbols.last.tmp + @diff -u $(SYMBOLS_LAST_FILE) symbols.last.tmp >/dev/null 2>&1; if test $$? != 0;then \ + diff -u $(SYMBOLS_LAST_FILE) symbols.last.tmp | grep -v '\-\-\-' >symbols.diff.tmp 2>&1; \ if grep -e '^-' symbols.diff.tmp;then \ echo "*******************************************"; \ - echo "Symbols were removed from the library."; \ + echo "Symbols were removed from the library. "; \ echo "Check symbols.diff.tmp for more information"; \ echo "*******************************************"; \ false; \ else \ echo "*************************************************************"; \ - echo "Symbols were added in the library; check symbols.diff.tmp for"; \ - echo "correctness; then use 'make files-update'"; \ + echo "Symbols were added in the library; use 'make files-update' "; \ + echo "and use 'git diff' to check correctness before committing "; \ echo "*************************************************************"; \ false; \ fi \ @@ -115,54 +171,39 @@ symbol-check: fi rm -f symbols.last.tmp symbols.diff.tmp -@CODE_COVERAGE_RULES@ +include $(top_srcdir)/aminclude_static.am +clean-local: code-coverage-clean +distclean-local: code-coverage-dist-clean local-code-coverage-output: code-coverage-capture - cat GnuTLS-$(VERSION)-coverage/index.html|grep headerCovTableEntryLo|head -1|sed 's/^.*>\([0-9]\+\.[0-9]\+\s*%\)<.*$$/ coverage lines: \1/' || true + cat GnuTLS-$(VERSION)-coverage/index.html|grep headerCovTableEntry|grep '%'|head -1|sed 's/^.*>\([0-9]\+\.[0-9]\+\s*%\)<.*$$/ coverage lines: \1/' || true libopts-check: @echo "*****************************************************************" @echo "Checking whether included libopts matches the system's. If the" @echo "check fails upgrade the included libopts." @echo "*****************************************************************" - test "`autoopts-config libsrc|cut -d '-' -f 2|sed 's/.tar.gz//'`" = "`cat src/libopts/autoopts/options.h |grep OPTIONS_VERSION_STRING|cut -d '"' -f 2|sed 's/:/./g'`" + test "`autoopts-config libsrc|awk -F '-' '{print $$NF}'|sed 's/.tar.gz//'`" = "`cat $(srcdir)/src/libopts/autoopts/options.h |grep OPTIONS_VERSION_STRING|cut -d '"' -f 2|sed 's/:/./g'`" -files-update: libopts-check - make -C doc/ compare-makefile || mv doc/tmp-compare-makefile doc/Makefile.am - make -C doc/manpages compare-makefile || mv doc/manpages/tmp-compare-makefile doc/manpages/Makefile.am - make -C . symbol-check || mv symbols.last.tmp symbols.last - @echo "******************************************************************************************" - @echo "updating autogen files in src/" - @echo "******************************************************************************************" - cd $(srcdir)/src/ && for i in *-args.c *-args.h;do \ - test -h $$i || cp $$i $$i.bak; \ - done +files-update: libopts-check abi-dump-latest + $(MAKE) -C doc/ compare-makefile || mv doc/tmp-compare-makefile $(srcdir)/doc/Makefile.am + $(MAKE) -C doc/manpages compare-makefile || mv doc/manpages/tmp-compare-makefile $(srcdir)/doc/manpages/Makefile.am + $(MAKE) -C . symbol-check || mv symbols.last.tmp $(SYMBOLS_LAST_FILE) @echo "******************************************************************************************" @echo "updated auto-generated files; please use git diff to verify the correctness of the changes" @echo "******************************************************************************************" -dist-hook: libopts-check symbol-check abi-check - make -C doc/ compare-makefile - make -C doc/ compare-exported - make -C doc/manpages compare-makefile - rm -f ChangeLog - make ChangeLog - cp -f ChangeLog $(distdir)/ - $(SED) 's/\@VERSION\@/$(VERSION)/g' -i $(distdir)/src/args-std.def - $(SED) 's/\@YEAR\@/$(YEAR)/g' -i $(distdir)/src/args-std.def - $(SED) 's/\@PACKAGE_BUGREPORT\@/$(PACKAGE_BUGREPORT)/g' -i $(distdir)/src/args-std.def - cd $(distdir)/src/ && for i in *.def;do \ - if test x"$$i" = x"args-std.def";then continue; fi; \ - autogen $$i; \ - cp $$i $$i.tmp; \ - $(SED) -i 's/@subheading \(.*\)/@*\n@var{\1}\n@*/' $$i.tmp; \ - autogen -Tagman-cmd.tpl $$i.tmp; \ - rm -f $$i.tmp; \ - mv -f *.1 ../doc/manpages/; \ - done - cd $(distdir)/src/ && for i in *-args.c *-args.h;do \ - mv $$i $$i.bak; \ - done - touch $(distdir)/doc/*.html $(distdir)/doc/*.pdf $(distdir)/doc/*.info - -.PHONY: abi-check abi-dump pic-check symbol-check local-code-coverage-output files-update libopts-check +dist-hook: libopts-check + $(PKG_CONFIG) --atleast-version=2.2.0 guile-2.2 + if test -d "$(top_srcdir)/devel";then \ + $(MAKE) -C $(top_srcdir) symbol-check && \ + $(MAKE) -C $(top_srcdir) abi-check-latest; \ + fi + $(MAKE) -C doc/ compare-makefile + $(MAKE) -C doc/ compare-exported + $(MAKE) -C doc/manpages compare-makefile + $(MAKE) ChangeLog + mv ChangeLog $(distdir) + touch -c $(distdir)/doc/*.html $(distdir)/doc/*.pdf $(distdir)/doc/*.info + +.PHONY: abi-check abi-dump-versioned abi-dump-latest pic-check symbol-check local-code-coverage-output files-update libopts-check AUTHORS diff --git a/NEWS b/NEWS index 218703d1a6..834cd629dd 100644 --- a/NEWS +++ b/NEWS @@ -2,10 +2,710 @@ GnuTLS NEWS -- History of user-visible changes. -*- outline -*- Bug numbers referenced in this log correspond to bug numbers at our issue tracker, available at https://gitlab.com/gnutls/gnutls/issues Copyright (C) 2000-2016 Free Software Foundation, Inc. -Copyright (C) 2013-2016 Nikos Mavrogiannopoulos +Copyright (C) 2013-2019 Nikos Mavrogiannopoulos See the end for copying conditions. -* Version 3.6.0 (unreleased) +* Version 3.6.14 (unreleased) + +** API and ABI modifications: +GNUTLS_CIPHER_AES_128_SIV: Added +GNUTLS_CIPHER_AES_256_SIV: Added +gnutls_pkcs7_print_signature_info: Added + +* Version 3.6.13 (released 2020-03-31) + +** libgnutls: Fix a DTLS-protocol regression (caused by TLS1.3 support), since 3.6.3. + The DTLS client would not contribute any randomness to the DTLS negotiation, + breaking the security guarantees of the DTLS protocol (#960) + [GNUTLS-SA-2020-03-31, CVSS: high] + +** libgnutls: Added new APIs to access KDF algorithms (#813). + +** libgnutls: Added new callback gnutls_keylog_func that enables a custom + logging functionality. + +** libgnutls: Added support for non-null terminated usernames in PSK + negotiation (#586). + +** gnutls-cli-debug: Improved support for old servers that only support + SSL 3.0. + +** API and ABI modifications: +gnutls_hkdf_extract: Added +gnutls_hkdf_expand: Added +gnutls_pbkdf2: Added +gnutls_session_get_keylog_function: Added +gnutls_session_set_keylog_function: Added +gnutls_prf_hash_get: Added +gnutls_psk_server_get_username2: Added +gnutls_psk_set_client_credentials2: Added +gnutls_psk_set_client_credentials_function2: Added +gnutls_psk_set_server_credentials_function2: Added + + +* Version 3.6.12 (released 2020-02-01) + +** libgnutls: Introduced TLS session flag (gnutls_session_get_flags()) + to identify sessions that client request OCSP status request (#829). + +** libgnutls: Added support for X448 key exchange (RFC 7748) and Ed448 + signature algorithm (RFC 8032) under TLS (#86). + +** libgnutls: Added the default-priority-string option to system configuration; + it allows overriding the compiled-in default-priority-string. + +** libgnutls: Added support for GOST CNT_IMIT ciphersuite (as defined by + draft-smyshlyaev-tls12-gost-suites-07). + By default this ciphersuite is disabled. It can be enabled by adding + +GOST to priority string. In the future this priority string may enable + other GOST ciphersuites as well. Note, that server will fail to negotiate + GOST ciphersuites if TLS 1.3 is enabled both on a server and a client. It + is recommended for now to disable TLS 1.3 in setups where GOST ciphersuites + are enabled on GnuTLS-based servers. + +** libgnutls: added priority shortcuts for different GOST categories like + CIPHER-GOST-ALL, MAC-GOST-ALL, KX-GOST-ALL, SIGN-GOST-ALL, GROUP-GOST-ALL. + +** libgnutls: Reject certificates with invalid time fields. That is we reject + certificates with invalid characters in Time fields, or invalid time formatting + To continue accepting the invalid form compile with --disable-strict-der-time + (#207, #870). + +** libgnutls: Reject certificates which contain duplicate extensions. We were + previously printing warnings when printing such a certificate, but that is + not always sufficient to flag such certificates as invalid. Instead we now + refuse to import them (#887). + +** libgnutls: If a CA is found in the trusted list, check in addition to + time validity, whether the algorithms comply to the expected level prior + to accepting it. This addresses the problem of accepting CAs which would + have been marked as insecure otherwise (#877). + +** libgnutls: The min-verification-profile from system configuration applies + for all certificate verifications, not only under TLS. The configuration can + be overriden using the GNUTLS_SYSTEM_PRIORITY_FILE environment variable. + +** libgnutls: The stapled OCSP certificate verification adheres to the convention + used throughout the library of setting the 'GNUTLS_CERT_INVALID' flag. + +** libgnutls: On client side only send OCSP staples if they have been requested + by the server, and on server side always advertise that we support OCSP stapling + (#876). + +** libgnutls: Introduced the gnutls_ocsp_req_const_t which is compatible + with gnutls_ocsp_req_t but const. + +** certtool: Added the --verify-profile option to set a certificate + verification profile. Use '--verify-profile low' for certificate verification + to apply the 'NORMAL' verification profile. + +** certtool: The add_extension template option is considered even when generating + a certificate from a certificate request. + +** API and ABI modifications: +GNUTLS_SFLAGS_CLI_REQUESTED_OCSP: Added +GNUTLS_SFLAGS_SERV_REQUESTED_OCSP: Added +gnutls_ocsp_req_const_t: Added + + +* Version 3.6.11 (released 2019-12-01) + +** libgnutls: Use KERN_ARND for the system random number generator on NetBSD. + This syscall provides an endless stream of random numbers from the kernel's + ChaCha20-based random number generator, without blocking or requiring an open file + descriptor. + +** libgnutls: Corrected issue with TLS 1.2 session ticket handling as client + during resumption (#841). + +** libgnutls: gnutls_base64_decode2() succeeds decoding the empty string to + the empty string. This is a behavioral change of the API but it conforms + to the RFC4648 expectations (#834). + +** libgnutls: Fixed AES-CFB8 implementation, when input is shorter than + the block size. Fix backported from nettle. + +** certtool: CRL distribution points will be set in CA certificates even when + non self-signed (#765). + +** gnutls-cli/serv: added raw public-key handling capabilities (RFC7250). + Key material can be set via the --rawpkkeyfile and --rawpkfile flags. + +** API and ABI modifications: +No changes since last version. + + +* Version 3.6.10 (released 2019-09-29) + +** libgnutls: Added support for deterministic ECDSA/DSA (RFC6979) + Deterministic signing can be enabled by setting + GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE when calling gnutls_privkey_sign_*() + functions (#94). + +** libgnutls: add gnutls_aead_cipher_encryptv2 and gnutls_aead_cipher_decryptv2 + functions that will perform in-place encryption/decryption on data buffers (#718). + +** libgnutls: Corrected issue in gnutls_session_get_data2() which could fail under + TLS1.3, if a timeout callback was not set using gnutls_transport_set_pull_timeout_function() + (#823). + +** libgnutls: added interoperability tests with gnutls 2.12.x; addressed + issue with large record handling due to random padding (#811). + +** libgnutls: the server now selects the highest TLS protocol version, + if TLS 1.3 is enabled and the client advertises an older protocol version first (#837). + +** libgnutls: fix non-PIC assembly on i386 (#818). + +** libgnutls: added support for GOST 28147-89 cipher in CNT (GOST counter) mode + and MAC generation based on GOST 28147-89 (IMIT). For description of the + modes see RFC 5830. S-Box is id-tc26-gost-28147-param-Z (TC26Z) defined in + RFC 7836. + +** certtool: when outputting an encrypted private key do not insert the textual description + of it. This fixes a regression since 3.6.5 (#840). + +** API and ABI modifications: +gnutls_aead_cipher_encryptv2: Added +gnutls_aead_cipher_decryptv2: Added +GNUTLS_CIPHER_GOST28147_TC26Z_CNT: Added +GNUTLS_MAC_GOST28147_TC26Z_IMIT: Added + +* Version 3.6.9 (released 2019-07-25) + +** libgnutls: add gnutls_hash_copy/gnutls_hmac_copy functions that will create a copy + of digest or MAC context. Copying contexts for externally-registered digest and MAC + contexts is unupported (#787). + +** Marked the crypto implementation override APIs as deprecated. These APIs are rarely + used, are for a niche use case, but have significant side effects, such as preventing + any internal re-organization and extension of the internal cipher API. The APIs remain + functional though a compiler warning will be issued, and a future minor version update + may transform them to a no-op while keeping ABI compatibility (#789). + +** libgnutls: Added support for AES-GMAC, as a separate to GCM, MAC algorithm (#781). + +** libgnutls: gnutls_privkey_sign_hash2 now accepts the GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA + flag as documented. This makes it a complete replacement of gnutls_privkey_sign_hash(). + +** libgnutls: Added support for Generalname registeredID. + +** The priority configuration was enhanced to allow more elaborate + system-wide configuration of the library (#587). + The following changes were included: + - The file is read as an ini file with '#' indicating a comment. + - The section "[priorities]" or global follows the existing semantics of + the configuration file, and allows to specify system-wide priority strings + which are accessed with the '@' prefix. + - The section "[overrides]" is added with the parameters "insecure-hash", + "insecure-sig", "insecure-sig-for-cert", "disabled-curve", + "disabled-version", "min-verification-profile", "tls-disabled-cipher", + "tls-disabled-mac", "tls-disabled-group", "tls-disabled-kx", which prohibit + specific algorithms or options globally. Existing algorithms in the + library can be marked as disabled and insecure, but no hard-coded + insecure algorithm can be marked as secure (so that the configuration + cannot be abused to make the system vulnerable). + - Unknown sections or options are skipped with a debug message, unless + the GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID environment parameter is + set to 1. + +** libgnutls: Added new flag for GNUTLS_CPUID_OVERRIDE + - 0x20: Enable SHA_NI instruction set + +** API and ABI modifications: +gnutls_crypto_register_cipher: Deprecated +gnutls_crypto_register_aead_cipher: Deprecated +gnutls_crypto_register_digest: Deprecated +gnutls_crypto_register_mac: Deprecated +gnutls_get_system_config_file: Added +gnutls_hash_copy: Added +gnutls_hmac_copy: Added +GNUTLS_MAC_AES_GMAC_128: Added +GNUTLS_MAC_AES_GMAC_192: Added +GNUTLS_MAC_AES_CMAC_256: Added +GNUTLS_SAN_REGISTERED_ID: Added + + +* Version 3.6.8 (released 2019-05-28) + +** libgnutls: Added gnutls_prf_early() function to retrieve early keying + material (#329) + +** libgnutls: Added support for AES-XTS cipher (#354) + +** libgnutls: Fix calculation of Streebog digests (incorrect carry operation in + 512 bit addition) + +** libgnutls: During Diffie-Hellman operations in TLS, verify that the peer's + public key is on the right subgroup (y^q=1 mod p), when q is available (under + TLS 1.3 and under earlier versions when RFC7919 parameters are used). + +** libgnutls: the gnutls_srp_set_server_credentials_function can now be used + with the 8192 parameters as well (#995). + +** libgnutls: Fixed bug preventing the use of gnutls_pubkey_verify_data2() and + gnutls_pubkey_verify_hash2() with the GNUTLS_VERIFY_DISABLE_CA_SIGN flag (#754) + +** libgnutls: The priority string option %ALLOW_SMALL_RECORDS was added to allow + clients to communicate with the server advertising smaller limits than 512 + +** libgnutls: Apply STD3 ASCII rules in gnutls_idna_map() to prevent + hostname/domain crafting via IDNA conversion (#720) + +** certtool: allow the digital signature key usage flag in CA certificates. + Previously certtool would ignore this flag for CA certificates even if + specified (#767) + +** gnutls-cli/serv: added the --keymatexport and --keymatexportsize options. + These allow testing the RFC5705 using these tools. + +** API and ABI modifications: +gnutls_prf_early: Added +gnutls_record_set_max_recv_size: Added +gnutls_dh_params_import_raw3: Added +gnutls_ffdhe_2048_group_q: Added +gnutls_ffdhe_3072_group_q: Added +gnutls_ffdhe_4096_group_q: Added +gnutls_ffdhe_6144_group_q: Added +gnutls_ffdhe_8192_group_q: Added + + +* Version 3.6.7 (released 2019-03-27) + +** libgnutls, gnutls tools: Every gnutls_free() will automatically set + the free'd pointer to NULL. This prevents possible use-after-free and + double free issues. Use-after-free will be turned into NULL dereference. + The counter-measure does not extend to applications using gnutls_free(). + +** libgnutls: Fixed a memory corruption (double free) vulnerability in the + certificate verification API. Reported by Tavis Ormandy; addressed with + the change above. [GNUTLS-SA-2019-03-27, #694] + +** libgnutls: Fixed an invalid pointer access via malformed TLS1.3 async messages; + Found using tlsfuzzer. [GNUTLS-SA-2019-03-27, #704] + +** libgnutls: enforce key usage limitations on certificates more actively. + Previously we would enforce it for TLS1.2 protocol, now we enforce it + even when TLS1.3 is negotiated, or on client certificates as well. When + an inappropriate for TLS1.3 certificate is seen on the credentials structure + GnuTLS will disable TLS1.3 support for that session (#690). + +** libgnutls: the default number of tickets sent under TLS 1.3 was increased to + two. This makes it easier for clients which perform multiple connections + to the server to use the tickets sent by a default server. + +** libgnutls: enforce the equality of the two signature parameters fields in + a certificate. We were already enforcing the signature algorithm, but there + was a bug in parameter checking code. + +** libgnutls: fixed issue preventing sending and receiving from different + threads when false start was enabled (#713). + +** libgnutls: the flag GNUTLS_PKCS11_OBJ_FLAG_LOGIN_SO now implies a writable + session, as non-writeable security officer sessions are undefined in PKCS#11 + (#721). + +** libgnutls: no longer send downgrade sentinel in TLS 1.3. + Previously the sentinel value was embedded to early in version + negotiation and was sent even on TLS 1.3. It is now sent only when + TLS 1.2 or earlier is negotiated (#689). + +** gnutls-cli: Added option --logfile to redirect informational messages output. + +** API and ABI modifications: +No changes since last version. + + +* Version 3.6.6 (released 2019-01-25) + +** libgnutls: gnutls_pubkey_import_ecc_raw() was fixed to set the number bits + on the public key (#640). + +** libgnutls: Added support for raw public-key authentication as defined in RFC7250. + Raw public-keys can be negotiated by enabling the corresponding certificate + types via the priority strings. The raw public-key mechanism must be explicitly + enabled via the GNUTLS_ENABLE_RAWPK init flag (#26, #280). + +** libgnutls: When on server or client side we are sending no extensions we do + not set an empty extensions field but we rather remove that field competely. + This solves a regression since 3.5.x and improves compatibility of the server + side with certain clients. + +** libgnutls: We no longer mark RSA keys in PKCS#11 tokens as RSA-PSS capable if + the CKA_SIGN is not set (#667). + +** libgnutls: The priority string option %NO_EXTENSIONS was improved to completely + disable extensions at all cases, while providing a functional session. This + also implies that when specified, TLS1.3 is disabled. + +** libgnutls: GNUTLS_X509_NO_WELL_DEFINED_EXPIRATION was marked as deprecated. + The previous definition was non-functional (#609). + +** API and ABI modifications: +GNUTLS_ENABLE_RAWPK: Added +GNUTLS_ENABLE_CERT_TYPE_NEG: Removed (was no-op; replaced by GNUTLS_ENABLE_RAWPK) +GNUTLS_X509_NO_WELL_DEFINED_EXPIRATION: Deprecated +GNUTLS_PCERT_NO_CERT: Deprecated + + +* Version 3.6.5 (released 2018-12-01) + +** libgnutls: Provide the option of transparent re-handshake/reauthentication + when the GNUTLS_AUTO_REAUTH flag is specified in gnutls_init() (#571). + +** libgnutls: Added support for TLS 1.3 zero round-trip (0-RTT) mode (#127) + +** libgnutls: The priority functions will ignore and not enable TLS1.3 if + requested with legacy TLS versions enabled but not TLS1.2. That is because + if such a priority string is used in the client side (e.g., TLS1.3+TLS1.0 enabled) + servers which do not support TLS1.3 will negotiate TLS1.2 which will be + rejected by the client as disabled (#621). + +** libgnutls: Change RSA decryption to use a new side-channel silent function. + This addresses a security issue where memory access patterns as well as timing + on the underlying Nettle rsa-decrypt function could lead to new Bleichenbacher + attacks. Side-channel resistant code is slower due to the need to mask + access and timings. When used in TLS the new functions cause RSA based + handshakes to be between 13% and 28% slower on average (Numbers are indicative, + the tests where performed on a relatively modern Intel CPU, results vary + depending on the CPU and architecture used). This change makes nettle 3.4.1 + the minimum requirement of gnutls (#630). [CVSS: medium] + +** libgnutls: gnutls_priority_init() and friends, allow the CTYPE-OPENPGP keyword + in the priority string. It is only accepted as legacy option and is ignored. + +** libgnutls: Added support for EdDSA under PKCS#11 (#417) + +** libgnutls: Added support for AES-CFB8 cipher (#357) + +** libgnutls: Added support for AES-CMAC MAC (#351) + +** libgnutls: In two previous versions GNUTLS_CIPHER_GOST28147_CPB/CPC/CPD_CFB ciphers + have incorrectly used CryptoPro-A S-BOX instead of proper (CryptoPro-B/-C/-D + S-BOXes). They are fixed now. + +** libgnutls: Added support for GOST key unmasking and unwrapped GOST private + keys parsing, as specified in R 50.1.112-2016. + +** gnutls-serv: It applies the default settings when no --priority option is given, + using gnutls_set_default_priority(). + +** p11tool: Fix initialization of security officer's PIN with the --initialize-so-pin + option (#561) + +** certtool: Add parameter --no-text that prevents certtool from outputting + text before PEM-encoded private key, public key, certificate, CRL or CSR. + +** API and ABI modifications: +GNUTLS_AUTO_REAUTH: Added +GNUTLS_CIPHER_AES_128_CFB8: Added +GNUTLS_CIPHER_AES_192_CFB8: Added +GNUTLS_CIPHER_AES_256_CFB8: Added +GNUTLS_MAC_AES_CMAC_128: Added +GNUTLS_MAC_AES_CMAC_256: Added +gnutls_record_get_max_early_data_size: Added +gnutls_record_send_early_data: Added +gnutls_record_recv_early_data: Added +gnutls_db_check_entry_expire_time: Added +gnutls_anti_replay_set_add_function: Added +gnutls_anti_replay_init: Added +gnutls_anti_replay_deinit: Added +gnutls_anti_replay_set_window: Added +gnutls_anti_replay_enable: Added +gnutls_privkey_decrypt_data2: Added + + +* Version 3.6.4 (released 2018-09-24) + +** libgnutls: Added the final (RFC8446) version numbering of the TLS1.3 protocol. + +** libgnutls: Corrected regression since 3.6.3 in the callbacks set with + gnutls_certificate_set_retrieve_function() which could not handle the case where + no certificates were returned, or the callbacks were set to NULL (see #528). + +** libgnutls: gnutls_handshake() on server returns early on handshake when no + certificate is presented by client and the gnutls_init() flag GNUTLS_ENABLE_EARLY_START + is specified. + +** libgnutls: Added session ticket key rotation on server side with TOTP. + The key set with gnutls_session_ticket_enable_server() is used as a + master key to generate time-based keys for tickets. The rotation + relates to the gnutls_db_set_cache_expiration() period. + +** libgnutls: The 'record size limit' extension is added and preferred to the + 'max record size' extension when possible. + +** libgnutls: Provide a more flexible PKCS#11 search of trust store certificates. + This addresses the problem where the CA certificate doesn't have a subject key + identifier whereas the end certificates have an authority key identifier (#569) + +** libgnutls: gnutls_privkey_export_gost_raw2(), gnutls_privkey_import_gost_raw(), + gnutls_pubkey_export_gost_raw2(), gnutls_pubkey_import_gost_raw() import + and export GOST parameters in the "native" little endian format used for these + curves. This is an intentional incompatible change with 3.6.3. + +** libgnutls: Added support for seperately negotiating client and server certificate types + as defined in RFC7250. This mechanism must be explicitly enabled via the + GNUTLS_ENABLE_CERT_TYPE_NEG flag in gnutls_init(). + +** gnutls-cli: enable CRL validation on startup (#564) + +** API and ABI modifications: +GNUTLS_ENABLE_EARLY_START: Added +GNUTLS_ENABLE_CERT_TYPE_NEG: Added +GNUTLS_TL_FAIL_ON_INVALID_CRL: Added +GNUTLS_CERTIFICATE_VERIFY_CRLS: Added +gnutls_ctype_target_t: New enumeration +gnutls_record_set_max_early_data_size: Added +gnutls_certificate_type_get2: Added +gnutls_priority_certificate_type_list2: Added +gnutls_ffdhe_6144_group_prime: Added +gnutls_ffdhe_6144_group_generator: Added +gnutls_ffdhe_6144_key_bits: Added + + +* Version 3.6.3 (released 2018-07-16) + +** libgnutls: Introduced support for draft-ietf-tls-tls13-28. It includes version + negotiation, post handshake authentication, length hiding, multiple OCSP support, + consistent ciphersuite support across protocols, hello retry requests, ability + to adjust key shares via gnutls_init() flags, certificate authorities extension, + and key usage limits. TLS1.3 draft-28 support can be enabled by default if + the option --enable-tls13-support is given to configure script. + +** libgnutls: Apply compatibility settings for existing applications running with TLS1.2 or + earlier and TLS 1.3. When SRP or NULL ciphersuites are specified in priority strings + TLS 1.3 is will be disabled. When Anonymous ciphersuites are specified in priority + strings, then TLS 1.3 negotiation will be disabled if the session is associated + only with an anonymous credentials structure. + +** Added support for Russian Public Key Infrastructure according to RFCs 4491/4357/7836. + This adds support for using GOST keys for digital signatures and under PKCS#7, PKCS#12, + and PKCS#8 standards. In particular added elliptic curves GOST R 34.10-2001 CryptoProA + 256-bit curve (RFC 4357), GOST R 34.10-2001 CryptoProXchA 256-bit curve (RFC 4357), + and GOST R 34.10-2012 TC26-512-A 512-bit curve (RFC 7836). + +** Provide a uniform cipher list across supported TLS protocols; the CAMELLIA ciphers + as well as ciphers utilizing HMAC-SHA384 and SHA256 have been removed from the default + priority strings, as they are undefined under TLS1.3 and they provide no advantage + over other options in earlier protocols. + +** The SSL 3.0 protocol is disabled on compile-time by default. It can be re-enabled + by specifying --enable-ssl3-support on configure script. + +** libgnutls: Introduced function to switch the current FIPS140-2 operational + mode, i.e., strict vs a more lax mode which will allow certain non FIPS140-2 + operations. + +** libgnutls: Introduced low-level function to assist applications attempting client + hello extension parsing, prior to GnuTLS' parsing of the message. + +** libgnutls: When exporting an X.509 certificate avoid re-encoding if there are no + modifications to the certificate. That prevents DER re-encoding issues with incorrectly + encoded certificates, or other DER incompatibilities to affect a TLS session. + Relates with #403 + +** libgnutls: on group exchange honor the %SERVER_PRECEDENCE and select the groups + which are preferred by the server. That unfortunately has complicated semantics + as TLS1.2 requires specific ordering of the groups based on the ciphersuite ordering, + which could make group order unpredictable if TLS1.3 is negotiated. + +** Improved counter-measures for TLS CBC record padding. Kenny Paterson, Eyal Ronen + and Adi Shamir reported that the existing counter-measures had certain issues and + were insufficient when the attacker has additional access to the CPU cache and + performs a chosen-plaintext attack. This affected the legacy CBC ciphersuites. [CVSS: medium] + +** Introduced the %FORCE_ETM priority string option. This option prevents the negotiation + of legacy CBC ciphersuites unless encrypt-then-mac is negotiated. + +** libgnutls: gnutls_privkey_import_ext4() was enhanced with the + GNUTLS_PRIVKEY_INFO_PK_ALGO_BITS flag. + +** libgnutls: gnutls_pkcs11_copy_secret_key, gnutls_pkcs11_copy_x509_privkey2, + gnutls_pkcs11_privkey_generate3 will mark objects as sensitive by default + unless GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE is specified. This is an API + change for these functions which make them err towards safety. + +** libgnutls: improved aarch64 cpu features detection by using getauxval(). + +** certtool: It is now possible to specify certificate and serial CRL numbers greater + than 2**63-2 as a hex-encoded string both when prompted and in a template file. + Default certificate serial numbers are now fully random. Default CRL + numbers include more random bits and are larger than in previous GnuTLS versions. + Since CRL numbers are required to be monotonic, specify suitable CRL numbers manually + if you intend to later downgrade to previous versions as it was not possible + to specify large CRL numbers in previous versions of certtool. + +** API and ABI modifications: +gnutls_fips140_set_mode: Added +gnutls_session_key_update: Added +gnutls_ext_get_current_msg: Added +gnutls_reauth: Added +gnutls_ocsp_status_request_get2: Added +gnutls_ocsp_resp_import2: Added +gnutls_ocsp_resp_export2: Added +gnutls_ocsp_resp_list_import2: Added +gnutls_certificate_set_retrieve_function3: Added +gnutls_certificate_set_ocsp_status_request_file2: Added +gnutls_certificate_set_ocsp_status_request_mem: Added +gnutls_certificate_get_ocsp_expiration: Added +gnutls_record_send2: Added +gnutls_ext_raw_parse: Added +gnutls_x509_crt_list_import_url: Added +gnutls_pcert_list_import_x509_file: Added +gnutls_pkcs11_token_get_ptr: Added +gnutls_pkcs11_obj_get_ptr: Added +gnutls_session_ticket_send: Added +gnutls_aead_cipher_encryptv: Added +gnutls_gost_paramset_get_name: Added +gnutls_gost_paramset_get_oid: Added +gnutls_oid_to_gost_paramset: Added +gnutls_decode_gost_rs_value: Added +gnutls_encode_gost_rs_value: Added +gnutls_pubkey_export_gost_raw2: Added +gnutls_pubkey_import_gost_raw: Added +gnutls_x509_crt_get_pk_gost_raw: Added +gnutls_privkey_export_gost_raw2: Added +gnutls_privkey_import_gost_raw: Added +gnutls_x509_privkey_export_gost_raw: Added +gnutls_x509_privkey_import_gost_raw: Added +gnutls_set_default_priority_append: Added +gnutls_priority_init2: Added +GNUTLS_PRIVKEY_INFO_PK_ALGO_BITS: Added +GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE: Added + + +* Version 3.6.2 (released 2018-02-16) + +** libgnutls: When verifying against a self signed certificate ignore issuer. + That is, ignore issuer when checking the issuer's parameters strength, resolving + issue #347 which caused self signed certificates to be additionally marked as of + insufficient security level. + +** libgnutls: Corrected MTU calculation for the CBC ciphersuites. The data + MTU calculation now, it correctly accounts for the fixed overhead due to + padding (as 1 byte), while at the same time considers the rest of the + padding as part of data MTU. + +** libgnutls: Address issue of loading of all PKCS#11 modules on startup + on systems with a PKCS#11 trust store (as opposed to a file trust store). + Introduced a multi-stage initialization which loads the trust modules, and + other modules are deferred for the first pure PKCS#11 request. + +** libgnutls: The SRP authentication will reject any parameters outside + RFC5054. This protects any client from potential MitM due to insecure + parameters. That also brings SRP in par with the RFC7919 changes to + Diffie-Hellman. + +** libgnutls: Added the 8192-bit parameters of SRP to the accepted parameters + for SRP authentication. + +** libgnutls: Addressed issue in the accelerated code affecting interoperability + with versions of nettle >= 3.4. + +** libgnutls: Addressed issue in the AES-GCM acceleration under aarch64. + +** libgnutls: Addressed issue in the AES-CBC acceleration under ssse3 (patch by + Vitezslav Cizek). + +** srptool: the --create-conf option no longer includes 1024-bit parameters. + +** p11tool: Fixed the deletion of objects in batch mode. + +** API and ABI modifications: +gnutls_srp_8192_group_generator: Added +gnutls_srp_8192_group_prime: Added + + +* Version 3.6.1 (released 2017-10-21) + +** libgnutls: Fixed interoperability issue with openssl when safe renegotiation was + used. Resolves gitlab issue #259. + +** libgnutls: gnutls_x509_crl_sign, gnutls_x509_crt_sign, + gnutls_x509_crq_sign, were modified to sign with a better algorithm than + SHA1. They will now sign with an algorithm that corresponds to the security + level of the signer's key. + +** libgnutls: gnutls_x509_*_sign2() functions and gnutls_x509_*_privkey_sign() + accept GNUTLS_DIG_UNKNOWN (0) as a hash function option. That will signal + the function to auto-detect an appropriate hash algorithm to use. + +** libgnutls: Removed support for signature algorithms using SHA2-224 in TLS. + TLS 1.3 no longer uses SHA2-224 and it was never a widespread algorithm + in TLS 1.2. As such, no reason to keep supporting it. + +** libgnutls: Refuse to use client certificates containing disallowed + algorithms for a session. That reverts a change on 3.5.5, which allowed + a client to use DSA-SHA1 due to his old DSA certificate, without requiring him + to enable DSA-SHA1 (and thus make it acceptable for the server's certificate). + The previous approach was to allow a smooth move for client infrastructure + after the DSA algorithm became disabled by default, and is no longer necessary + as DSA is now being universally depracated. + +** libgnutls: Refuse to resume a session which had a different SNI advertised. That + improves RFC6066 support in server side. Reported by Thomas Klute. + +** p11tool: Mark all generated objects as sensitive by default. + +** p11tool: added options --sign-params and --hash. This allows testing + signature with multiple algorithms, including RSA-PSS. + +** API and ABI modifications: +No changes since last version. + + +* Version 3.6.0 (released 2017-08-21) + +** libgnutls: tlsfuzzer is part of the CI testsuite. This is a TLS testing and + fuzzying toolkit, allowing for corner case testing, and ensuring that the + behavior of the library will not change across releases. + https://github.com/tomato42/tlsfuzzer + +** libgnutls: Introduced a lock-free random generator which operates per-thread + and eliminates random-generator related bottlenecks in multi-threaded operation. + Resolves gitlab issue #141. + http://nmav.gnutls.org/2017/03/improving-by-simplifying-gnutls-prng.html + +** libgnutls: Replaced the Salsa20 random generator with one based on CHACHA. + The goal is to reduce code needed in cache (CHACHA is also used for TLS), + and the number of primitives used by the library. That does not affect the + AES-DRBG random generator used in FIPS140-2 mode. + +** libgnutls: Added support for RSA-PSS key type as well as signatures in + certificates, and TLS key exchange. Contributed by Daiki Ueno. + RSA-PSS signatures can be generated by RSA-PSS keys and normal RSA keys, + but not vice-versa. The feature includes: + * RSA-PSS key generation and key handling (in PKCS#8 form) + * RSA-PSS key generation and key handling from PKCS#11 (with CKM_RSA_PKCS_PSS mech) + * Handling of RSA-PSS subjectPublicKeyInfo parameters, when present + in either the private key or certificate. + * RSA-PSS signing and verification of PKIX certificates + * RSA-PSS signing and verification of TLS 1.2 handshake + * RSA-PSS signing and verification of PKCS#7 structures + * RSA-PSS and RSA key combinations for TLS credentials. That is, when + multiple keys are supplied, RSA-PSS keys are preferred over RSA for RSA-PSS + TLS signatures, to contain risks of cross-protocol attacks between the algorithms. + * RSA-PSS key conversion to RSA PKCS#1 form (certtool --to-rsa) + Note that RSA-PSS signatures with SHA1 are (intentionally) not supported. + +** libgnutls: Added support for Ed25519 signing in certificates and TLS key + exchange following draft-ietf-tls-rfc4492bis-17. The feature includes: + * Ed25519 key generation and key handling (in PKCS#8 form) + * Ed25519 signing and verification of PKIX certificates + * Ed25519 signing and verification of TLS 1.2 handshake + * Ed25519 signing and verification of PKCS#7 structures + +** libgnutls: Enabled X25519 key exchange by default, following draft-ietf-tls-rfc4492bis-17. + +** libgnutls: Added support for Diffie-Hellman group negotiation following RFC7919. + That makes the DH parameters negotiation more robust and less prone to errors + due to insecure parameters. Servers are no longer required to specific explicit + DH parameters, though if they do these parameters will be used. Group + selection can be done via priority strings. The introduced strings are + GROUP-ALL, GROUP-FFDHE2048, GROUP-FFDHE3072, GROUP-FFDHE4096 and + GROUP-FFDHE8192, as well as the corresponding to curves groups. Note that + the 6144 group from RFC7919 is not supported. ** libgnutls: Introduced various sanity checks on certificate import. Refuse to import certificates which have fractional seconds in Time fields, X.509v1 @@ -17,69 +717,128 @@ See the end for copying conditions. GNUTLS_X509_CRT_FLAG_IGNORE_SANITY which skips the certificate sanity checks on import. -** libgnutls: Refuse gnutls_record_send() and gnutls_record_recv() - calls prior to handshake being complete. Addresses gitlab issue #158. - -** libgnutls: 3DES-CBC is no longer included in the default priorities - list. It has to be explicitly enabled, e.g., with a string like - "NORMAL:+3DES-CBC". - -** libgnutls: Introduced a lock-free random generator which operates per-thread - and eliminates random-generator related bottlenecks in multi-threaded operation. - Resolves gitlab issue #141. - ** libgnutls: PKIX certificates with unknown critical extensions are rejected on verification with status GNUTLS_CERT_UNKNOWN_CRIT_EXTENSIONS. This - behavior can be overriden by providing the flag GNUTLS_VERIFY_IGNORE_UNKNOWN_CRIT_EXTENSIONS + behavior can be overridden by providing the flag GNUTLS_VERIFY_IGNORE_UNKNOWN_CRIT_EXTENSIONS to verification functions. Resolves gitlab issue #177. -** libgnutls: OpenPGP authentication is disabled by default, and the resulting - library is ABI compatible (will openpgp related functions being stubs that fail - on invocation). The flag --enable-openpgp-authentication to configure will - enable OpenPGP authentication support. - ** libgnutls: Refuse to generate a certificate with an illegal version, or an illegal serial number. That is, gnutls_x509_crt_set_version() and gnutls_x509_crt_set_serial(), will fail on input considered to be invalid in RFC5280. -** libgnutls: SHA1 was removed from the trusted set of hashes. Verification - and other operations relying on SHA1 is now considered insecure and will - fail, unless flags intended to enable broken algorithms are set. This - can be reverted on compile time with the configure flag --enable-sha1-support. +** libgnutls: Calls to gnutls_record_send() and gnutls_record_recv() + prior to handshake being complete are now refused. Addresses gitlab issue #158. -** libgnutls: Added support for PKCS#12 files with no (zero length) salt used in their +** libgnutls: Added support for PKCS#12 files with no salt (zero length) in their password encoding, and PKCS#12 files using SHA384 and SHA512 as MAC. +** libgnutls: Exported functions to encode and decode DSA and ECDSA r,s values. + +** libgnutls: Added new callback setting function to gnutls_privkey_t for external + keys. The new function (gnutls_privkey_import_ext4), allows signing in addition + to previous algorithms (RSA PKCS#1 1.5, DSA, ECDSA), with RSA-PSS and Ed25519 + keys. + ** libgnutls: Introduced the %VERIFY_ALLOW_BROKEN and %VERIFY_ALLOW_SIGN_WITH_SHA1 priority string options. These allows enabling all broken and SHA1-based signature algorithms in certificate verification, respectively. -** libgnutls: gnutls_pem_base64_encode/2() and gnutls_pem_base64_decode/2() can - be used to decode arbitrary base64 data if the header parameter is set to NULL. +** libgnutls: 3DES-CBC is no longer included in the default priorities + list. It has to be explicitly enabled, e.g., with a string like + "NORMAL:+3DES-CBC". + +** libgnutls: SHA1 was marked as insecure for signing certificates. Verification + of certificates signed with SHA1 is now considered insecure and will + fail, unless flags intended to enable broken algorithms are set. Other uses + of SHA1 are still allowed. This can be reverted on compile time with the configure + flag --enable-sha1-support. + +** libgnutls: RIPEMD160 was marked as insecure for certificate signatures. Verification + of certificates signed with RIPEMD160 hash algorithm is now considered insecure and + will fail, unless flags intended to enable broken algorithms are set. -** libgnutls: removed support for libidn; gnutls can now be compiled only with - libidn2. +** libgnutls: No longer enable SECP192R1 and SECP224R1 by default on TLS handshakes. + These curves were rarely used for that purpose, provide no advantage over + x25519 and were deprecated by TLS 1.3. -** certtool: the option '--load-ca-certificate' can now accept PKCS#11 +** libgnutls: Removed support for DEFLATE, or any other compression method. + +** libgnutls: OpenPGP authentication was removed; the resulting library is ABI + compatible, with the openpgp related functions being stubs that fail + on invocation. + +** libgnutls: Removed support for libidn (i.e., IDNA2003); gnutls can now be compiled + only with libidn2 which provides IDNA2008. + +** certtool: The option '--load-ca-certificate' can now accept PKCS#11 URLs in addition to files. -** certtool: the option '--load-crl' can now be used when generating PKCS#12 +** certtool: The option '--load-crl' can now be used when generating PKCS#12 files (i.e., in conjunction with '--to-p12' option). +** certtool: Keys with provable RSA and DSA parameters are now only read and + exported from PKCS#8 form, following draft-mavrogiannopoulos-pkcs8-validated-parameters-00.txt. + This removes support for the previous a non-standard key format. + +** certtool: Added support for generating, printing and handling RSA-PSS and + Ed25519 keys and certificates. + +** certtool: the parameters --rsa, --dsa and --ecdsa to --generate-privkey are now + deprecated, replaced by the --key-type option. + +** p11tool: The --generate-rsa, --generate-ecc and --generate-dsa options were + replaced by the --generate-privkey option. + +** psktool: Generate 256-bit keys by default. + +** gnutls-server: Increase request buffer size to 16kb, and added the --alpn and + --alpn-fatal options, allowing testing of ALPN negotiation. + ** API and ABI modifications: +gnutls_encode_rs_value: Added +gnutls_decode_rs_value: Added +gnutls_base64_encode2: Added +gnutls_base64_decode2: Added gnutls_x509_crt_set_flags: Added gnutls_x509_crt_check_ip: Added gnutls_x509_ext_import_inhibit_anypolicy: Added gnutls_x509_ext_export_inhibit_anypolicy: Added gnutls_x509_crt_get_inhibit_anypolicy: Added gnutls_x509_crt_set_inhibit_anypolicy: Added +gnutls_pubkey_export_rsa_raw2: Added +gnutls_pubkey_export_dsa_raw2: Added +gnutls_pubkey_export_ecc_raw2: Added +gnutls_privkey_export_rsa_raw2: Added +gnutls_privkey_export_dsa_raw2: Added +gnutls_privkey_export_ecc_raw2: Added +gnutls_x509_spki_init: Added +gnutls_x509_spki_deinit: Added +gnutls_x509_spki_get_pk_algorithm: Added +gnutls_x509_spki_set_pk_algorithm: Added +gnutls_x509_spki_get_digest_algorithm: Added +gnutls_x509_spki_set_digest_algorithm: Added +gnutls_x509_spki_get_salt_size: Added +gnutls_x509_spki_set_salt_size: Added +gnutls_x509_crt_set_spki: Added +gnutls_x509_crt_get_spki: Added +gnutls_x509_privkey_get_spki: Added +gnutls_x509_privkey_set_spki: Added +gnutls_x509_crq_get_spki: Added +gnutls_x509_crq_set_spki: Added +gnutls_pubkey_set_spki: Added +gnutls_pubkey_get_spki: Added +gnutls_privkey_set_spki: Added +gnutls_privkey_get_spki: Added +gnutls_privkey_import_ext4: Added +GNUTLS_EXPORT_FLAG_NO_LZ: Added GNUTLS_DT_IP_ADDRESS: Added GNUTLS_X509_CRT_FLAG_IGNORE_SANITY: Added GNUTLS_CERT_UNKNOWN_CRIT_EXTENSIONS: Added GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1: Added GNUTLS_VERIFY_DO_NOT_ALLOW_IP_MATCHES: Added GNUTLS_VERIFY_IGNORE_UNKNOWN_CRIT_EXTENSIONS: Added +GNUTLS_SFLAGS_RFC7919: Added * Version 3.5.7 (released 2016-12-8) @@ -98,7 +857,7 @@ GNUTLS_VERIFY_IGNORE_UNKNOWN_CRIT_EXTENSIONS: Added a flag. ** libgnutls: Improved TPM key handling. Check authorization requirements - prior to using a key and fix issue on loop for PIN input. Patches by + prior to using a key and fix issue on loop for PIN input. Patches by James Bottomley. ** libgnutls: In all functions accepting UTF-8 passwords, ensure that @@ -176,7 +935,7 @@ gnutls_x509_crq_get_dn3: Added not identical to CVE-2016-8610, due to the difference in alert handling of the libraries (gnutls delegates that handling to applications). -** libgnutls: Reverted the change which made the gnutls_certificate_set_*key* +** libgnutls: Reverted the change which made the gnutls_certificate_set_*key* functions return an index (introduced in 3.5.5), to avoid affecting programs which explicitly check success of the function as equality to zero. In order for these functions to return an index an explicit call to gnutls_certificate_set_flags @@ -410,7 +1169,7 @@ gnutls_ext_get_name: Added * Version 3.5.0 (released 2016-05-09) ** libgnutls: Added SHA3 based signing algorithms for DSA, RSA and ECDSA, - based on http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html + based on https://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html ** libgnutls: Added support for curve X25519 (RFC 7748, draft-ietf-tls-rfc4492bis-07). This curve is disabled by default as it is still on specification status. It @@ -536,11 +1295,11 @@ gnutls_session_get_master_secret: Added ** libgnutls: Removed support for pthread_atfork() as it has undefined semantics when used with dlopen(), and may lead to a crash. -** libgnutls: corrected failure when importing plain files +** libgnutls: corrected failure when importing plain files with gnutls_x509_privkey_import2(), and a password was provided. ** libgnutls: Don't reject certificates if a CA has the URI or IP address - name constraints, and the end certificate doesn't have an IP address + name constraints, and the end certificate doesn't have an IP address name or a URI set. ** libgnutls: set and read the hint in DHE-PSK and ECDHE-PSK ciphersuites. @@ -636,7 +1395,7 @@ explicitly enabled, since they reduce the overall security level. ** libgnutls: Added support for Chacha20-Poly1305 ciphersuites following draft-mavrogiannopoulos-chacha-tls-05 and draft-irtf-cfrg-chacha20-poly1305-10. That is currently provided as technology preview and is not enabled by -default, since there are no assigned ciphersuite points by IETF and there +default, since there are no assigned ciphersuite points by IETF and there is no guarrantee of compatibility between draft versions. The ciphersuite priority string to enable it is "+CHACHA20-POLY1305". @@ -688,14 +1447,14 @@ applications closing all open file descriptors on startup. ** libgnutls: If a key purpose (extended key usage) is specified for verification, it is applied into intermediate certificates. The verification result -GNUTLS_CERT_PURPOSE_MISMATCH is also introduced. +GNUTLS_CERT_PURPOSE_MISMATCH is also introduced. ** libgnutls: When gnutls_certificate_set_x509_key_file2() is used in combination with PKCS #11, or TPM URLs, it will utilize the provided password as PIN if required. That removes the requirement for the application to set a callback for PINs in that case. -** libgnutls: priority strings VERS-TLS-ALL and VERS-DTLS-ALL are +** libgnutls: priority strings VERS-TLS-ALL and VERS-DTLS-ALL are restricted to the corresponding protocols only, and the VERS-ALL string is introduced to catch all possible protocols. @@ -747,14 +1506,14 @@ when available. ** gnutls-cli: added options --priority-list and --save-cert. -** guile: Deprecated priority API has been removed. The old priority API, +** guile: Deprecated priority API has been removed. The old priority API, which had been deprecated for some time, is now gone; use 'set-session-priorities!' instead. -** guile: Remove RSA parameters and related procedures. This API had been -deprecated. +** guile: Remove RSA parameters and related procedures. This API had been +deprecated. -** guile: Fix compilation on MinGW. Previously only the static version of the +** guile: Fix compilation on MinGW. Previously only the static version of the 'guile-gnutls-v-2' library would be built, preventing dynamic loading from Guile. ** API and ABI modifications: @@ -884,9 +1643,9 @@ being usable after a reinitialization. ** libgnutls: fixed PKCS #11 ECDSA key generation. -** libgnutls: The GNUTLS_CPUID_OVERRIDE environment variable can be used to +** libgnutls: The GNUTLS_CPUID_OVERRIDE environment variable can be used to explicitly enable/disable the use of certain CPU capabilities. Note that CPU -detection cannot be overriden, i.e., VIA options cannot be enabled on an Intel +detection cannot be overridden, i.e., VIA options cannot be enabled on an Intel CPU. The currently available options are: 0x1: Disable all run-time detected optimizations 0x2: Enable AES-NI @@ -1051,7 +1810,7 @@ were moved to self-test.h. different recv and send pointers have been specified. Reported and investigated by JMRecio. -** libgnutls: Fixed issue in the RSA-PSK key exchange, which would +** libgnutls: Fixed issue in the RSA-PSK key exchange, which would result to illegal memory access if a server hint was provided. Reported by André Klitzing. @@ -1078,7 +1837,7 @@ That avoids long delays in gnutls initialization due to broken PKCS #11 modules. ** libgnutls: The PKCS #11 subsystem is re-initialized "automatically" -on the first PKCS #11 API call after a fork. +on the first PKCS #11 API call after a fork. ** libgnutls: certificate verification profiles were introduced that can be specified as flags to verification functions. They @@ -1092,15 +1851,15 @@ specified configuration file to be used to read pre-configured priority strings from. That can be used to impose system specific policies. ** libgnutls: Increased the default security level of priority -strings (NORMAL and PFS strings require at minimum a 1008 DH prime), -and set a verification profile by default. The LEGACY keyword is +strings (NORMAL and PFS strings require at minimum a 1008 DH prime), +and set a verification profile by default. The LEGACY keyword is introduced to set the old defaults. ** libgnutls: Added support for the name constraints PKIX extension. Currently only DNS names and e-mails are supported (no URIs, IPs or DNs). -** libgnutls: Security parameter SEC_PARAM_NORMAL was renamed to +** libgnutls: Security parameter SEC_PARAM_NORMAL was renamed to SEC_PARAM_MEDIUM to avoid confusion with the priority string NORMAL. ** libgnutls: Added new API in x509-ext.h to handle X.509 extensions. @@ -1157,7 +1916,7 @@ to SHA1. That option enables (when running on FIPS140-enabled system): o RSA, DSA and DH key generation as in FIPS-186-4 (using provable primes) o The DRBG-CTR-AES256 deterministic random generator from SP800-90A. - o Self-tests on initialization on ciphers/MACs, public key algorithms + o Self-tests on initialization on ciphers/MACs, public key algorithms and the random generator. o HMAC-SHA256 verification of the library on load. o MD5 is included for TLS purposes but cannot be used by the high level @@ -1269,7 +2028,7 @@ GCM mode is prioritized over CBC in all of the default priority strings. ** libgnutls: Added ciphersuite GNUTLS_ECDHE_RSA_AES_256_CBC_SHA384. ** libgnutls: Fixed ciphersuites GNUTLS_ECDHE_ECDSA_CAMELLIA_256_CBC_SHA384, -GNUTLS_ECDHE_RSA_CAMELLIA_256_CBC_SHA384 and GNUTLS_PSK_CAMELLIA_128_GCM_SHA256. +GNUTLS_ECDHE_RSA_CAMELLIA_256_CBC_SHA384 and GNUTLS_PSK_CAMELLIA_128_GCM_SHA256. Reported by Stefan Buehler. ** libgnutls: Added support for ISO OID for RSA-SHA1 signatures. @@ -1311,7 +2070,7 @@ by Christian Grothoff. ** srptool: Fixed index command line option. Patch by Attila Molnar. ** gnutls-cli: Added support for inline commands, using the ---inline-commands-prefix and --inline-commands options. Patch by Raj Raman. +--inline-commands-prefix and --inline-commands options. Patch by Raj Raman. ** certtool: pathlen constraint is now read correctly. Reported by Christoph Seitz. @@ -1348,13 +2107,13 @@ gnutls_record_set_timeout: Exported ** libgnutls: Fixes in parsing of priority strings. Patch by Stefan Buehler. -** libgnutls: Solve issue with received TLS packets that exceed 2^14. +** libgnutls: Solve issue with received TLS packets that exceed 2^14. (this fixes a bug that was accidentally introduced in 3.2.2) ** libgnutls: Removed gnulib modules under LGPLv3 that could possibly be used by the library. -** libgnutls: Fixes in gnutls_record_send_range(). Report and initial fix by +** libgnutls: Fixes in gnutls_record_send_range(). Report and initial fix by Alfredo Pironti. ** API and ABI modifications: @@ -1419,7 +2178,7 @@ gnutls_session_set_id: Added ** libgnutls: Added UMAC-96 and UMAC-128 ** libgnutls: Added ciphersuites involving Salsa20 and UMAC-96. -As they are not standardized they are defined using private ciphersuite +As they are not standardized they are defined using private ciphersuite numbers. ** libgnutls: Added support for DTLS 1.2. @@ -1440,7 +2199,7 @@ gnutls_mac_get_nonce_size: Added * Version 3.1.10 (released 2013-03-22) -** certtool: When generating PKCS #12 files use by default the +** certtool: When generating PKCS #12 files use by default the ARCFOUR (RC4) cipher to be compatible with devices that don't support AES with PKCS #12. @@ -1457,12 +2216,12 @@ cards are present. ** libgnutls: Corrected issue in the (deprecated) external key signing interface, when used with TLS 1.2. Reported by Bjorn H. Christensen. -** libgnutls: Fixes in openpgp handshake with fingerprints. Reported by +** libgnutls: Fixes in openpgp handshake with fingerprints. Reported by Joke de Buhr. ** libgnutls-dane: Updated DANE verification options. -** configure: Trust store file must be explicitly set or unset when +** configure: Trust store file must be explicitly set or unset when cross compiling. ** API and ABI modifications: @@ -1485,7 +2244,7 @@ a PKCS #12 file from an encrypted key file. Reported by Yan Fiz. ** libgnutls: Corrected issue in gnutls_pubkey_verify_data(). -** libgnutls: Corrected parsing issue in XMPP within a subject +** libgnutls: Corrected parsing issue in XMPP within a subject alternative name. Reported by James Cloos. ** libgnutls: gnutls_pkcs11_reinit() will reinitialize all PKCS #11 @@ -1516,7 +2275,7 @@ with encrypted keys. Reported by Yan Fiz. PERFORMANCE was set to previous defaults 727 bits. Reported by Diego Elio Petteno. -** libgnutls: Corrected issue which prevented gnutls_pubkey_verify_hash() +** libgnutls: Corrected issue which prevented gnutls_pubkey_verify_hash() to operate with long keys. Reported by Erik A Jensen. ** API and ABI modifications: @@ -1540,7 +2299,7 @@ in a template from an RFC4514 string. ** libgnutls: DN variable 'T' was expanded to 'title'. -** libgnutls: Fixes in record padding parsing to prevent a timing attack. +** libgnutls: Fixes in record padding parsing to prevent a timing attack. Issue reported by Kenny Paterson and Nadhem Alfardan. ** libgnutls: Added functions to directly set the DN in a certificate @@ -1556,17 +2315,17 @@ by the specified priority string. The current values correspond to the previous defaults (727 bits), except for the SECURE128 and SECURE192 strings which increase the minimum to 1248 and 1776 respectively. -** libgnutls: Added the gnutls_record_cork() and uncork API to enable +** libgnutls: Added the gnutls_record_cork() and uncork API to enable buffering in sending application data. -** libgnutls: Removed default random padding, and added a length-hiding interface -instead. Both the server and the client must support this extension. Whether +** libgnutls: Removed default random padding, and added a length-hiding interface +instead. Both the server and the client must support this extension. Whether length-hiding can be used on a given session can be checked using gnutls_record_can_use_length_hiding(). Contributed by Alfredo Pironti. -** libgnutls: Added the experimental %NEW_PADDING priority string. It enables +** libgnutls: Added the experimental %NEW_PADDING priority string. It enables a new padding mechanism in TLS allowing arbitrary padding in TLS records -in all ciphersuites, which makes length-hiding more efficient and solves +in all ciphersuites, which makes length-hiding more efficient and solves the issues with timing attacks on CBC ciphersuites. ** libgnutls: Corrected gnutls_cipher_decrypt2() when used with AEAD @@ -1638,10 +2397,10 @@ extension. ** libgnutls: Handle BMPString (UCS-2) encoding in the Distinguished Name by translating it to UTF-8 (works on windows or systems with iconv). -** libgnutls: Added PKCS #11 key generation function that returns the +** libgnutls: Added PKCS #11 key generation function that returns the public key on generation. -** libgnutls: Corrected bug in priority string parsing, that mostly +** libgnutls: Corrected bug in priority string parsing, that mostly affected combined levels. Patch by Tim Kosse. ** certtool: The --pubkey-info option can be combined with the @@ -1649,7 +2408,7 @@ affected combined levels. Patch by Tim Kosse. ** certtool: It is able to set certificate policies via a template. -** certtool: Added --hex-numbers option which prints big numbers in +** certtool: Added --hex-numbers option which prints big numbers in an easier to parse format. ** p11tool: After key generation, outputs the public key (useful in @@ -1685,7 +2444,7 @@ gnutls_certificate_verify_peers3(). Contributed by Martin Storsjo. ** libgnutls: The X.509 verification functions check the key -usage bits and pathlen constraints and on failure output +usage bits and pathlen constraints and on failure output GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE. ** libgnutls: gnutls_x509_crl_verify() includes the time checks. @@ -1760,7 +2519,7 @@ GNUTLS_NO_EXTENSIONS can be used to prevent that. is fully RFC6091 compliant and RFC5081 support is only supported in client mode. -** libgnutls-dane: Added. It is a library to provide DANE with DNSSEC +** libgnutls-dane: Added. It is a library to provide DANE with DNSSEC certificate verification. ** gnutls-cli: Added --dane option to enable DANE certificate verification. @@ -1812,10 +2571,10 @@ of certificates in the windows platform. ** libgnutls: Added support for DTLS/TLS heartbeats by Olga Smolenchuk. (the work was done during Google Summer of Code). -** libgnutls: Added X.509 certificate verification flag +** libgnutls: Added X.509 certificate verification flag GNUTLS_VERIFY_ALLOW_UNSORTED_CHAIN. This flag allows the verification of unsorted certificate chains and is enabled by default for -TLS certificate verification (if gnutls_certificate_set_verify_flags() +TLS certificate verification (if gnutls_certificate_set_verify_flags() does not override it). ** libgnutls: Prints warning on certificates that contain keys of @@ -1857,7 +2616,7 @@ GNUTLS_SEC_PARAM_INSECURE: Added ** certtool: Changes in password handling of certtool. Ask password when required and only if the '--password' option is not -given. If the '--password' option is given during key generation then +given. If the '--password' option is given during key generation then assume the PKCS #8 file format, instead of ignoring the password. ** tpmtool: No longer asks for key password in registered keys. @@ -1886,7 +2645,7 @@ gnutls_sign_get_pk_algorithm: Added * Version 3.1.0 (released 2012-08-15) -** libgnutls: Added direct support for TPM as a cryptographic module +** libgnutls: Added direct support for TPM as a cryptographic module in gnutls/tpm.h. TPM keys can be used in functions accepting files using URLs of the following types: tpmkey:file=/path/to/file @@ -1912,8 +2671,8 @@ the whole certificate chain (if any) to the credentials structure, instead of only the end-user certificate. ** libgnutls: Key import functions such as gnutls_pkcs12_simple_parse() -and gnutls_x509_privkey_import_pkcs8(), return consistently -GNUTLS_E_DECRYPTION_FAILED if the input structure is encrypted but no +and gnutls_x509_privkey_import_pkcs8(), return consistently +GNUTLS_E_DECRYPTION_FAILED if the input structure is encrypted but no password was provided. ** libgnutls: Added gnutls_handshake_set_timeout() a function that @@ -2002,11 +2761,11 @@ No changes since last version. * Version 3.0.21 (released 2012-07-02) -** libgnutls: fixed bug in gnutls_x509_privkey_import() +** libgnutls: fixed bug in gnutls_x509_privkey_import() that prevented the loading of EC private keys when DER encoded. Reported by David Woodhouse. -** libgnutls: In DTLS larger to mtu records result to +** libgnutls: In DTLS larger to mtu records result to GNUTLS_E_LARGE_PACKET instead of being truncated. ** libgnutls: gnutls_dtls_get_data_mtu() is more precise. Based @@ -2015,11 +2774,11 @@ on patch by David Woodhouse. ** libgnutls: Fixed memory leak in PKCS #8 key import. ** libgnutls: Added support for an old version of the DTLS protocol -used by openconnect vpn client for compatibility with Cisco's AnyConnect +used by openconnect vpn client for compatibility with Cisco's AnyConnect SSL VPN. It is marked as GNUTLS_DTLS0_9. Do not use it for newer protocols as it has issues. -** libgnutls: Corrected bug that prevented resolving PKCS #11 URLs +** libgnutls: Corrected bug that prevented resolving PKCS #11 URLs if only the label is specified. Patch by David Woodhouse. ** libgnutls: When EMSGSIZE errno is seen then GNUTLS_E_LARGE_PACKET @@ -2049,7 +2808,7 @@ name type in certtool. ** certtool: Increase to 128 the maximum number of distinct options (e.g. dns_names) allowed. -** gnutls-cli: If --print-cert is given, print the certificate, +** gnutls-cli: If --print-cert is given, print the certificate, even on verification failure. ** API and ABI modifications: @@ -2066,7 +2825,7 @@ by David Smith. ** libgnutls: gnutls_record_check_pending() no longer returns unprocessed data, and thus ensure the non-blocking -of the next call to gnutls_record_recv(). +of the next call to gnutls_record_recv(). ** libgnutls: Added strict tests in Diffie-Hellman and SRP key exchange public keys. @@ -2093,7 +2852,7 @@ is returned on premature termination (and added unit test). ** libgnutls: Fixes for W64 API. Patch by B. Scott Michel. -** libgnutls: Corrected VIA padlock detection for old +** libgnutls: Corrected VIA padlock detection for old VIA processors. Reported by Kris Karas. ** libgnutls: Updated assembler files. @@ -2128,7 +2887,7 @@ No changes since last version. ** libgnutls: included assembler files for MacOSX. -** p11tool: Small fixes in handling of the --private command +** p11tool: Small fixes in handling of the --private command line option. ** certtool: The template option allows for setting the domain @@ -2144,7 +2903,7 @@ gnutls_x509_crt_set_authority_info_access: Added ** test suite: Only run under valgrind in the development system (the full git repository) -** command line apps: Link with local libopts if the +** command line apps: Link with local libopts if the installed is an old one. ** libgnutls: Eliminate double free during SRP @@ -2204,7 +2963,7 @@ status from an ocsp server. ** command line apps: Use gnu autogen (libopts) to parse command line arguments and template files. -** tests: Added stress test for DTLS packet losses and +** tests: Added stress test for DTLS packet losses and out-of-order receival. Contributed by Sean Buckheister. ** libgnutls: Several updates and corrections in the DTLS @@ -2283,7 +3042,7 @@ correctly aligned in rare circumstances. ** libgnutls: Corrected memory leaks in DH parameter generation and ecc_projective_check_point(). -** libgnutls: Added gnutls_x509_dn_oid_name() to +** libgnutls: Added gnutls_x509_dn_oid_name() to return a descriptive name of a DN OID. ** API and ABI modifications: @@ -2329,7 +3088,7 @@ gnutls_ocsp_resp_verify: Added. * Version 3.0.11 (released 2012-01-06) -** libgnutls: Corrected functionality of +** libgnutls: Corrected functionality of gnutls_record_get_direction(). Reported by Philip Allison. ** libgnutls: Provide less timing information when decoding @@ -2356,7 +3115,7 @@ issue in windows systems. ** libgnutls: Added ciphersuites: GNUTLS_PSK_WITH_AES_256_GCM_SHA384 and GNUTLS_DHE_PSK_WITH_AES_256_GCM_SHA384. -** libgnutls: Added function gnutls_random_art() to convert +** libgnutls: Added function gnutls_random_art() to convert fingerprints to images (currently ascii-art). ** libgnutls: Corrected bug in DSA private key parsing, which @@ -2439,13 +3198,13 @@ No changes since last version. ** gnutls-guile: Compilation fixes. -** libgnutls: Fixed possible buffer overflow in +** libgnutls: Fixed possible buffer overflow in gnutls_session_get_data(). Reported and fix by Alban Crequy. ** libgnutls: Bug fixes in the ciphersuites with NULL cipher. Reported by Fabrice Gautier. -** libgnutls: Bug fixes in ECC code for 64-bit MIPS systems. +** libgnutls: Bug fixes in ECC code for 64-bit MIPS systems. Thanks to Joseph Graham for providing access to such a system. ** libgnutls: Correctly report ECC private key parsing errors. @@ -2468,7 +3227,7 @@ No changes since last version. ** libgnutls: Corrections in VIA padlock code for VIA C5 processor and new detection of PHE with support for partial hashing. -** libgnutls: Corrected bug in gnutls_x509_data2hex. Report and fix +** libgnutls: Corrected bug in gnutls_x509_data2hex. Report and fix by Vincent Untz. ** minitasn1: Upgraded to libtasn1 version 2.10. @@ -2486,7 +3245,7 @@ removed. SHA256 and elliptic curves. ** gnutls-cli: Added --benchmark-soft-ciphers to benchmark -the software version of the ciphers instead of hw accelerated +the software version of the ciphers instead of hw accelerated (where available) ** libgnutls: Public key ID calculation is consistent among @@ -2501,13 +3260,13 @@ used with a gnutls_privkey_t and a gnutls_pcert_st structure using gnutls_certificate_set_key(). ** libgnutls: Fixes to enable external signing callback to -operate with TLS 1.2. +operate with TLS 1.2. -** libgnutls: Fixed crash when printing ECDSA certificate key +** libgnutls: Fixed crash when printing ECDSA certificate key ID. Reported by Erik Jensen. -** libgnutls: Corrected VIA padlock code for C3. In C3 benchmarks -show a 50x increase in AES speed and a 14x increase in VIA nano. Added +** libgnutls: Corrected VIA padlock code for C3. In C3 benchmarks +show a 50x increase in AES speed and a 14x increase in VIA nano. Added support for hashes and HMACs. ** libgnutls: Compilation fixed when p11-kit is not detected. @@ -2539,13 +3298,13 @@ number of discarded records in a DTLS session. ** libgnutls: All functions related to RSA-EXPORT were deprecated. Support for RSA-EXPORT ciphersuites will be ceased in future versions. -** libgnutls: Memory leak fixes in credentials private key +** libgnutls: Memory leak fixes in credentials private key deinitialization. Reported by Dan Winship. ** libgnutls: Memory leak fixes in ECC ciphersuites. -** libgnutls: Do not send an empty extension structure in server -hello. This affected old implementations that do not support extensions. +** libgnutls: Do not send an empty extension structure in server +hello. This affected old implementations that do not support extensions. Reported by J. Cameijo Cerdeira. ** libgnutls: Allow CA importing of 0 certificates to succeed. @@ -2561,11 +3320,11 @@ PKCS #11. ** libgnutls: Added gnutls_pkcs11_privkey_generate() to allow generating a key in a token. -** p11tool: Added generate-rsa, generate-dsa and +** p11tool: Added generate-rsa, generate-dsa and generate-ecc options to allow generating private keys in the token. -** libgnutls: gnutls_transport_set_lowat dummy macro was +** libgnutls: gnutls_transport_set_lowat dummy macro was removed. ** API and ABI modifications: @@ -2586,7 +3345,7 @@ by default. ** libgnutls: Corrected issue in gnutls_record_recv() triggered on encryption or compression error. -** libgnutls: Compatibility fixes in CPU ID detection +** libgnutls: Compatibility fixes in CPU ID detection for i386 and old GCC. ** gnutls-cli: Benchmark applications were incorporated @@ -2609,16 +3368,16 @@ GNUTLS_PRIVKEY_IMPORT_COPY: new gnutls_privkey_import() flag * Version 3.0.1 (released 2011-08-20) -** libgnutls: gnutls_certificate_set_x509_key_file() and -friends support server name indication. If multiple -certificates are set using these functions the proper one -will be selected during a handshake. +** libgnutls: gnutls_certificate_set_x509_key_file() and +friends support server name indication. If multiple +certificates are set using these functions the proper one +will be selected during a handshake. ** libgnutls: Added AES-256-GCM which was left out from the previous release. Reported by Benjamin Hof. -** libgnutls: When asking for a PKCS# 11 PIN multiple -times, the flags in the callback were not being updated +** libgnutls: When asking for a PKCS# 11 PIN multiple +times, the flags in the callback were not being updated to reflect for PIN low count or final try. ** libgnutls: Do not allow second instances of PKCS #11 @@ -2630,11 +3389,11 @@ modules. is being read if provided. ** libgnutls: Ensure that a certificate list specified -using gnutls_certificate_set_x509_key() and friends, is +using gnutls_certificate_set_x509_key() and friends, is sorted according to TLS specification (from subject to issuer). ** libgnutls: Added GNUTLS_X509_CRT_LIST_FAIL_IF_UNSORTED flag for -gnutls_x509_crt_list_import. It checks whether the list to be +gnutls_x509_crt_list_import. It checks whether the list to be imported is properly sorted. ** crywrap: Added to the distribution. It is an application @@ -2693,10 +3452,10 @@ strings to enable the NSA SuiteB cryptography ciphersuites. ** libgnutls: Added gnutls_pubkey_verify_data2() that will verify data provided the signature algorithm. -** libgnutls: Simplified the handling of handshake messages to -be hashed. Instead of hashing during the handshake process we now -keep the data until handshake is over and hash them on request. -This uses more memory but eliminates issues with TLS 1.2 and +** libgnutls: Simplified the handling of handshake messages to +be hashed. Instead of hashing during the handshake process we now +keep the data until handshake is over and hash them on request. +This uses more memory but eliminates issues with TLS 1.2 and simplifies code. ** libgnutls: Added AES-GCM optimizations using the PCLMULQDQ @@ -2788,7 +3547,7 @@ GNUTLS_PK_ECC: New public key algorithm GNUTLS_SIGN_ECDSA_SHA1: New signature algorithm GNUTLS_SIGN_ECDSA_SHA256: New signature algorithm GNUTLS_SIGN_ECDSA_SHA384: New signature algorithm -GNUTLS_SIGN_ECDSA_SHA512: New signature algorithm +GNUTLS_SIGN_ECDSA_SHA512: New signature algorithm GNUTLS_SIGN_ECDSA_SHA224: New signature algorithm GNUTLS_ECC_CURVE_INVALID: New curve definition GNUTLS_ECC_CURVE_SECP224R1: New curve definition @@ -2806,7 +3565,7 @@ GNUTLS_ECC_CURVE_SECP521R1: New curve definition ** libgnutls: Added support for AES-NI if detected. Uses Andy Polyakov's AES-NI code. -** libgnutls: Restored HMAC-MD5 for compatibility. Although considered +** libgnutls: Restored HMAC-MD5 for compatibility. Although considered weak, several sites require it for connection. It is enabled for "NORMAL" and "PERFORMANCE" priority strings. @@ -2850,10 +3609,10 @@ by Todd A. Ouska. every error and not only on fatal ones. This allows easier handling of errors. -** libgnutls: Corrected issue in DHE-PSK ciphersuites that ignored +** libgnutls: Corrected issue in DHE-PSK ciphersuites that ignored the PSK callback. -** libgnutls: SRP and PSK are no longer set on the default priorities. +** libgnutls: SRP and PSK are no longer set on the default priorities. They have to be explicitly set. ** libgnutls: During handshake message verification using DSS @@ -2868,7 +3627,7 @@ on unexpected EOF, instead of GNUTLS_E_UNEXPECTED_PACKET_LENGTH. It was never standardized nor published as an RFC. ** libgnutls: Added new certificate verification functions, that -can provide more details and are more efficient. Check +can provide more details and are more efficient. Check gnutls_x509_trust_list_*. ** certtool: Uses the new certificate verification functions for @@ -2970,7 +3729,7 @@ the incompatibility with TLS other than 1.2. ** libgnutls: Modified signature algorithm selection in client certificate request, to avoid failures in DSA certificates. -** libgnutls: Instead of failing with internal error, return +** libgnutls: Instead of failing with internal error, return GNUTLS_E_INCOMPAT_DSA_KEY_WITH_TLS_PROTOCOL if an incompatible DSA key with the negotiated protocol is encountered. @@ -2997,9 +3756,9 @@ gnutls_pubkey_import_openpgp: MODIFIED replaced by gnutls_privkey_sign_hash2(). ** libgnutls: gnutls_pubkey_verify_data, gnutls_pubkey_verify_hash, -gnutls_x509_privkey_verify_data, gnutls_x509_crt_verify_data, -gnutls_x509_crt_verify_hash return the negative error code -GNUTLS_E_PK_SIG_VERIFY_FAILED if verification fails to simplify error +gnutls_x509_privkey_verify_data, gnutls_x509_crt_verify_data, +gnutls_x509_crt_verify_hash return the negative error code +GNUTLS_E_PK_SIG_VERIFY_FAILED if verification fails to simplify error checking. ** libgnutls: Added helper functions for signature verification: @@ -3057,7 +3816,7 @@ gnutls_privkey_sign_hash: REMOVED (was added in 2.11.0) SSL 3.0. To restore the previous default behavior use %LATEST_RECORD_VERSION priority string. -** libgnutls: Use ASN1_NULL when writing parameters for RSA signatures. +** libgnutls: Use ASN1_NULL when writing parameters for RSA signatures. This makes us comply with RFC3279. Reported by Michael Rommel. ** gnutls-serv: Corrected a buffer overflow. Reported and patch by Tomas Mraz. @@ -3157,7 +3916,7 @@ backend crypto library. ** libgnutls: Several updates in the buffering internal interface. -** libgnutls: Is now more liberal in the PEM decoding. That is spaces and +** libgnutls: Is now more liberal in the PEM decoding. That is spaces and tabs are being skipped. ** libgnutls: Added support for draft-pechanec-pkcs11uri-02. @@ -3209,7 +3968,7 @@ jurisdictionOfIncorporationLocalityName, jurisdictionOfIncorporationStateOrProvinceName, jurisdictionOfIncorporationCountryName -** libgnutls: Added support for DSA signing/verifying with bit +** libgnutls: Added support for DSA signing/verifying with bit length over 1024. ** libgnutls-extra: When in FIPS mode gnutls_global_init_extra() @@ -3232,7 +3991,7 @@ imported from tokens, and operations can be performed on private keys. ** libgnutls: Added abstract gnutls_privkey_t and gnutls_pubkey_t ** libgnutls: Added initial support for the nettle library. It uses -the system's random generator for seeding. That is /dev/urandom in Linux, +the system's random generator for seeding. That is /dev/urandom in Linux, system calls in Win32 and EGD on other systems. ** libgnutls: Corrected issue on the %SSL3_RECORD_VERSION priority string. It now @@ -3452,8 +4211,8 @@ Instead new error code GNUTLS_E_UNKNOWN_SRP_USERNAME is added. ** certtool: Corrected two issues that affected certificate request generation. (1) Null padding is added on integers (found thanks to Wilankar Trupti), (2) In optional SignatureAlgorithm parameters field for DSA keys the DSA -parameters were added. Those were rejected by Verisign. Gnutls no longer adds -those parameters there since other implementations don't do either and having +parameters were added. Those were rejected by Verisign. Gnutls no longer adds +those parameters there since other implementations don't do either and having them does not seem to offer anything (anyway you need the signer's certificate to verify thus public key will be available). Found thanks to Boyan Kasarov. This however has the side-effect that public key IDs shown by certtool are @@ -3542,7 +4301,7 @@ with gnutls_sign_algorithm_get_requested() whether the certificate they send complies with the peer's preferences in signature algorithms. -** libgnutls: In server side when resuming a session do not overwrite the +** libgnutls: In server side when resuming a session do not overwrite the ** initial session data with the resumed session data. ** libgnutls: Added support for AES-128, AES-192 and AES-256 in PKCS #8 @@ -3785,7 +4544,7 @@ No changes since last version. * Version 2.8.5 (released 2009-11-02) -** libgnutls: In server side when resuming a session do not overwrite the +** libgnutls: In server side when resuming a session do not overwrite the ** initial session data with the resumed session data. ** libgnutls: Fix PKCS#12 encoding. @@ -4025,7 +4784,7 @@ The symbols are: _gnutls* gnutls_asn1_tab - + Normally when symbols are removed, the shared library version has to be incremented. This leads to a significant cost for everyone using the library. Because none of the above symbols have ever been @@ -4286,7 +5045,7 @@ Reported by Roman Bogorodskiy in It is currently only used by the core library. This will enable a new domain 'gnutls' for translations of the command line tools. -** Corrected possible memory corruption on signature verification failure. +** Corrected possible memory corruption on signature verification failure. Reported by Miroslav Kratochvil ** API and ABI modifications: @@ -4316,8 +5075,8 @@ information. This avoids code duplication. They can be used to override the default certificate chain validation behaviour. -** libgnutls: Added %SSL3_RECORD_VERSION priority string that allows to -specify the client hello message record version. Used to overcome buggy +** libgnutls: Added %SSL3_RECORD_VERSION priority string that allows to +specify the client hello message record version. Used to overcome buggy TLS servers. Report by Martin von Gagern. ** libgnutls: gnutls_x509_crt_print prints signature algorithm in oneline mode. @@ -4433,7 +5192,7 @@ trusting that name. Thanks for report and analysis from Martin von Gagern . [CVE-2008-4989] Any updates with more details about this vulnerability will be added -to +to ** libgnutls: Fix namespace issue with version symbols. The symbols LIBGNUTLS_VERSION, LIBGNUTLS_VERSION_MAJOR, @@ -4591,7 +5350,7 @@ GNUTLS_VERIFY_DISABLE_TIME_CHECKS, that can be used to disable the new behaviour. More details about the vulnerabilities will be posted at -. +. ** gnutls-cli, gnutls-cli-debug: Fix AIX build problem. Reported by LAUPRETRE François (P) in @@ -4708,7 +5467,7 @@ trusting that name. Thanks for report and analysis from Martin von Gagern . [CVE-2008-4989] Any updates with more details about this vulnerability will be added -to +to ** libgnutls: Add missing prototype for gnutls_srp_set_prime_bits. Reported by Kevin Quick in @@ -5125,7 +5884,7 @@ trusting that name. Thanks for report and analysis from Martin von Gagern . [CVE-2008-4989] Any updates with more details about this vulnerability will be added -to +to ** libgnutls: Fix buffer overrun in gnutls_x509_crt_list_import. Report and patch by Jonathan Manktelow. @@ -5166,7 +5925,7 @@ can happen for re-handshakes, the library would crash because it tried to hash some data using a libgcrypt handle that had been deallocated. Report and tiny patch from Tomas Mraz . Any updates with more details about this vulnerability will be added to - + ** libgnutls: Fix memory leaks when doing a re-handshake. Reported by Sam Varshavchik in @@ -5475,7 +6234,7 @@ Thanks to CERT-FI for finding the bugs and providing detailed reports, which allowed the bugs to be reproduced and fixed easily. Patches developed by Simon Josefsson and Nikos Mavrogiannopoulos. Any updates with more details about these vulnerabilities will be added to - + *** [GNUTLS-SA-2008-1-1] *** libgnutls: Fix crash when sending invalid server name. @@ -5496,7 +6255,7 @@ The crash can be triggered remotely before authentication, which can lead to a Daniel of Service attack to disable the server. The bug cause gnutls to read memory beyond the end of the received record. -** libgnutlsxx: Updated API according to patches from Eduardo +** libgnutlsxx: Updated API according to patches from Eduardo Villanueva Che (discussion at ) @@ -5682,7 +6441,7 @@ gnutls_openpgp_crt_get_auth_subkey: MODIFIED ** Finish renaming of gnutls_certificate_export_x509_cas etc. They weren't renamed in the public header file. -** Added functions to register a cipher/mac/digest. This allows to +** Added functions to register a cipher/mac/digest. This allows to override the included ones. ** Fix a bunch of compiler warnings. @@ -5887,7 +6646,7 @@ Thanks to CERT-FI for finding the bugs and providing detailed reports, which allowed the bugs to be reproduced and fixed easily. Patches developed by Simon Josefsson and Nikos Mavrogiannopoulos. Any updates with more details about these vulnerabilities will be added to - + *** [GNUTLS-SA-2008-1-1] *** libgnutls: Fix crash when sending invalid server name. @@ -6242,7 +7001,7 @@ No changes since last version. * Version 2.1.4 (released 2007-10-27) ** Added the --v1 option to certtool, to allow generating X.509 -version 1 certificates. +version 1 certificates. ** certtool: Add option --disable-quick-random to enable the old behaviour of using /dev/random to generate keys. @@ -6252,7 +7011,7 @@ of using /dev/random to generate keys. ** Added gnutls_set_default_priority2() which accepts a flag to indicate priorities preferences. -** Added gnutls_record_disable_padding() to allow servers talking to +** Added gnutls_record_disable_padding() to allow servers talking to buggy clients that complain if the TLS 1.0 record protocol padding is used. @@ -6400,7 +7159,7 @@ gnutls_oprfi_enable_server: ADD, new function. * Version 2.0.4 (released 2007-11-16) -** Corrected bug in decompression of expanded compression data. +** Corrected bug in decompression of expanded compression data. ** API and ABI modifications: No changes since last version. @@ -7388,7 +8147,7 @@ This enables 'make distcheck' to succeed. Reported by Daniel Black . ** Fix a crash (strcmp() on a NULL value) in the certificate verification logic. -See http://www.gnu.org/software/gnutls/security.html regardging +See https://www.gnu.org/software/gnutls/security.html regardging GNUTLS-SA-2006-2 for more up to date information. Reported by satyakumar . @@ -7461,7 +8220,7 @@ known at this point whether the crash can be triggered without the special local CA certificate, and thus turn this into a remote crash of clients that verify server certificates when they talk to a server with the special server certificate. See GNUTLS-SA-2006-2 on -http://www.gnu.org/software/gnutls/security.html for more up to date +https://www.gnu.org/software/gnutls/security.html for more up to date information. Reported by satyakumar . ** Change SRP and Cert-Type extensions to match IANA registry. @@ -7547,13 +8306,13 @@ Protover SSL. Libtasn1 0.2.18 is now required, which contains the previous bug fix. The included libtasn1 version in GnuTLS has been updated. -** Fixed bug in non-blocking gnutls_bye(). gnutls_record_send() will no -longer invalidate a session if the underlying send fails, but it will +** Fixed bug in non-blocking gnutls_bye(). gnutls_record_send() will no +longer invalidate a session if the underlying send fails, but it will prevent future writes. That is to allow reading the already received data. Patches and bug reports by Yoann Vandoorselaere ** Corrected bugs in gnutls_certificate_set_x509_crl() and -gnutls_certificate_set_x509_trust(), that caused memory corruption if +gnutls_certificate_set_x509_trust(), that caused memory corruption if more than one certificates were added. Report and patch by Max Kellermann. ** Fix build problems of OpenCDK on AIX. @@ -7828,8 +8587,8 @@ Use size_t instead of int for output size parameter: - Corrected bugs in gnutls_certificate_set_x509_crl() and gnutls_certificate_set_x509_trust(), that caused memory corruption if more than one certificates were added. Report and patch by Max Kellermann. -- Fixed bug in non-blocking gnutls_bye(). gnutls_record_send() will no - longer invalidate a session if the underlying send fails, but it will +- Fixed bug in non-blocking gnutls_bye(). gnutls_record_send() will no + longer invalidate a session if the underlying send fails, but it will prevent future writes. That is to allow reading the already received data. Patches and bug reports by Yoann Vandoorselaere @@ -7945,7 +8704,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS . - Fixed off-by-one bug in the size parameter of gnutls_x509_crt_get*_dn, reported by Adam Langley . -- Corrected some stuff in minilzo detection. Pointed out by +- Corrected some stuff in minilzo detection. Pointed out by Sergey Lipnevich. - MiniLZO updated to version 2.00. - gnutls_x509_crt_list_import now accept a DER formatted CRL. @@ -8008,7 +8767,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS . - Eliminated some memory leaks in DHE and RSA-EXPORT cipher suites. Reported by Yoann Vandoorselaere . -- If the library has been compiled with features disabled, a warning is +- If the library has been compiled with features disabled, a warning is issued during the compilation of any program. - API and ABI modifications: gnutls_x509_crt_list_import(): Add @@ -8020,7 +8779,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS * Version 1.2.0 (2005-01-27) - Added the definitions and OIDs for the RIPEMD-160 hash algorithm. -- Introduced gnutls_x509_crt_sign2(), gnutls_x509_crq_sign2() and +- Introduced gnutls_x509_crt_sign2(), gnutls_x509_crq_sign2() and gnutls_x509_crl_sign2(). - Fixed license header in source code files. @@ -8106,7 +8865,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - Added self test that tests anonymous TLS client and server. - Added self tests of Nettle and generic crypto layer. - Added API reference manual in HTML format in doc/reference/ using GTK-DOC. - Online version at . + Online version at . - Assume C89 or better; removed checks for size_t, ptrdiff_t and time_t. - Man pages for API functions are included. @@ -8144,14 +8903,14 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - Changed the makefiles to be more portable. - SRP ciphersuites were moved to the gnutls library. - Added some default limits in the verification of certificate - chains, to avoid denial of service attacks. Also added + chains, to avoid denial of service attacks. Also added gnutls_certificate_set_verify_limits() to override them. Issue pointed out by Patrik Hornik . - Added gnutls_certificate_verify_peers2(). * Version 1.1.11 (2004-07-16) - Added the '_t' suffix to all exported symbols. -- Fixed bug in RSA encryption, report and patch by Martijn Koster +- Fixed bug in RSA encryption, report and patch by Martijn Koster . - Corrected a bug in certificate verification. Pointed out by Yoann Vandoorselaere @@ -8159,7 +8918,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS verification functions. - The ephemeral DH and RSA parameters are no longer stored in the session resume DB. -- Do not free the SRP (prime and generator) parameters obtained from the +- Do not free the SRP (prime and generator) parameters obtained from the callback if they are the static ones defined in extra.h - Eliminated some memory leaks. Reported by Yoann Vandoorselaere. @@ -8205,14 +8964,14 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - Optimized the copying of rsa_params. * Version 1.1.7 (2004-03-29) -- Added gnutls_certificate_set_params_function() and +- Added gnutls_certificate_set_params_function() and gnutls_anon_set_params_function() that set the RSA or DH parameters using a callback. - Added functions gnutls_rsa_params_cpy(), gnutls_dh_params_cpy() and gnutls_x509_privkey_cpy(). - Corrected a compilation issue when opencdk was installed in a non standard directory. -- Deprecated: gnutls_srp_server_set_select_function(), +- Deprecated: gnutls_srp_server_set_select_function(), gnutls_certificate_client_set_select_function(), gnutls_srp_server_set_select_function(). * Version 1.1.6 (2004-02-24) @@ -8324,19 +9083,19 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS compatibility with previous versions. - Changed the makefiles to be more portable. - Added some default limits in the verification of certificate - chains, to avoid denial of service attacks. Also added + chains, to avoid denial of service attacks. Also added gnutls_certificate_set_verify_limits() to override them. Issue pointed out by Patrik Hornik . - Added gnutls_certificate_verify_peers2(). * Version 1.0.16 (2004-07-10) -- Do not free the SRP (prime and generator) parameters obtained from the +- Do not free the SRP (prime and generator) parameters obtained from the callback if they are the static ones defined in extra.h. - Eliminated some memory leaks. Reported by Yoann Vandoorselaere. - Some fixes in the makefiles. * Version 1.0.15 (2004-06-29) -- Fixed bug in RSA encryption, report and patch by Martijn Koster +- Fixed bug in RSA encryption, report and patch by Martijn Koster . - Corrected a bug in certificate verification. Pointed out by Yoann Vandoorselaere . @@ -8380,7 +9139,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - Corrected bug in SSL 3.0 authentication. * Version 1.0.9 (2004-03-29) -- Added gnutls_certificate_set_params_function() and +- Added gnutls_certificate_set_params_function() and gnutls_anon_set_params_function() that set the RSA or DH parameters using a callback. - Added functions gnutls_rsa_params_cpy(), gnutls_dh_params_cpy() @@ -8459,7 +9218,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS * Version 0.9.99 (2003-11-28) - Some fixes in the gnutls.h header for the gnutls_server_name_set() and gnutls_server_name_get() prototypes. -- Exported the gnutls_x509_privkey_sign_data(), gnutls_x509_privkey_verify_data() +- Exported the gnutls_x509_privkey_sign_data(), gnutls_x509_privkey_verify_data() and gnutls_x509_crt_verify_data(). - Some fixes in the openpgp authentication. - Removed the Twofish cipher. @@ -8498,7 +9257,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS * Version 0.9.94 (2003-10-30) - Added manpages for the included programs. -- Documented and improved the certtool utility. +- Documented and improved the certtool utility. - Added PKCS #12 support to certtool utility. * Version 0.9.93 (2003-10-26) @@ -8530,7 +9289,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - The library can now decrypt PKCS #12 files encrypted with the RC2-40 cipher. - The missing rfc2818_hostname object is now included. -- Several corrections and bug fixes in the library by +- Several corrections and bug fixes in the library by Arne Thomassen . - CR is now allowed in the base64 decoder. @@ -8561,7 +9320,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - Added functionality to generate PKCS #7 structures (with certificates). * Version 0.9.3 (2003-03-24) -- Support for MD2 was dropped. +- Support for MD2 was dropped. - Improved the error logging functions, by adding a level, and by allowing debugging messages just by increasing the level. - The diffie Hellman ciphersuites are now of higher priority than @@ -8570,18 +9329,18 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - Implemented the counter measure discussed in the paper "Attacking RSA-based Sessions in SSL/TLS", against the attack described in the same paper. -- Added the functions: gnutls_handshake_get_last_in(), +- Added the functions: gnutls_handshake_get_last_in(), gnutls_handshake_get_last_out(). -- The gnutls_certificate_set_rsa_params() was renamed to +- The gnutls_certificate_set_rsa_params() was renamed to gnutls_certificate_set_rsa_export_params(). - Added the new functions: gnutls_certificate_set_x509_key() gnutls_certificate_set_x509_trust(), gnutls_certificate_set_x509_crl(), gnutls_x509_crt_export(), gnutls_x509_crl_export(). -- Added support for encoding and decoding PKCS #8 2.0 encrypted +- Added support for encoding and decoding PKCS #8 2.0 encrypted RSA private keys. * Version 0.9.2 (2003-03-15) -- Some corrections in the memory mapping code (file is unmapped after +- Some corrections in the memory mapping code (file is unmapped after it is read). - Added support for PKCS#10 certificate requests generation. @@ -8599,27 +9358,27 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - Added an strnstr() function and the requirement in some functions to use null terminated PEM structures is no more. - Use mmap() if available to read files. -- Fixed a memory leak in SRP code reported by Rupert Kittinger +- Fixed a memory leak in SRP code reported by Rupert Kittinger . * Version 0.9.0 (2003-03-03) - This version is not binary compatible with the previous ones. -- The library notifies the application on empty and illegal SRP usernames, +- The library notifies the application on empty and illegal SRP usernames, so that proper notification (via an alert) is sent to the peer. - Added ability to send some messages back to the application using the gnutls_global_set_log_function(). -- gnutls_dh_params_generate() and gnutls_rsa_params_generate() now use +- gnutls_dh_params_generate() and gnutls_rsa_params_generate() now use gnutls_malloc() to allocate the output parameters. - Added support for MD2 algorithm in certificate signature verification. - The RSA and DH parameter generation interface was changed. Added - ability to import and export from and to PKCS3 structures. This + ability to import and export from and to PKCS3 structures. This was needed to read parameters generated using the openssl dhparam tool. -- Several changes in the temporary (DH/RSA) parameter codebase. No DH - parameters are now included in the library. Also the credentials structure +- Several changes in the temporary (DH/RSA) parameter codebase. No DH + parameters are now included in the library. Also the credentials structure can now hold only one temporary parameter of a kind. -- Added a new Certificate, CRL, Private key and PKCS7 structures handling +- Added a new Certificate, CRL, Private key and PKCS7 structures handling API, defined in gnutls/x509.h -- Added gnutls_certificate_set_verify_flags() function to allow setting the +- Added gnutls_certificate_set_verify_flags() function to allow setting the verification flags in the credentials structure. They will be used in the *verify_peers functions. - Added protection against the new TLS 1.0 record layer timing attack. @@ -8637,19 +9396,19 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - Some fixes which now allow compilation. * Version 0.8.0 (2003-01-20) -- Added gnutls_x509_extract_dn_string() which returns a +- Added gnutls_x509_extract_dn_string() which returns a distinguished name in a single string. - Added gnutls_openpgp_extract_key_name_string() which returns an openpgp user ID in a single string. - Added gnutls_x509_extract_certificate_ca_status() which returns the CA status of the given certificate. - Added SRP-6 support. Follows draft-ietf-tls-srp-04. -- If libtasn1 is not present in the system, it is included in +- If libtasn1 is not present in the system, it is included in the main gnutls library. - If liblzo is present in the system, then the included minilzo will not be used, and libgnutls-extra will depend on liblzo. -- GNUTLS_E_PARSING_ERROR error code was replaced by GNUTLS_E_BASE64_DECODING_ERROR, - and GNUTLS_E_SRP_PWD_PARSING_ERROR. GNUTLS_E_ASCII_ARMOR_ERROR was also +- GNUTLS_E_PARSING_ERROR error code was replaced by GNUTLS_E_BASE64_DECODING_ERROR, + and GNUTLS_E_SRP_PWD_PARSING_ERROR. GNUTLS_E_ASCII_ARMOR_ERROR was also replaced by GNUTLS_E_BASE64_DECODING_ERROR. * Version 0.6.0 (2002-12-08) @@ -8679,7 +9438,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS these are binary compatible. * Version 0.5.11 (2002-11-05) -- Some fixes in 'gnutls-cli' client program to prevent some segmentation +- Some fixes in 'gnutls-cli' client program to prevent some segmentation faults at exit. - Example programs found in the documentation can now be generated by running "make examples" in doc/tex directory. @@ -8705,7 +9464,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS starttls implementations. - Added gnutls_x509_extract_key_pk_algorithm() function which extracts the private key type, of a DER encoded key. -- Added gnutls_x509_extract_certificate_dn_string() which returns the +- Added gnutls_x509_extract_certificate_dn_string() which returns the certificate's distinguished name in a single string. - Added gnutls_set_default_priority() and gnutls_set_default_export_priority() functions, to avoid calling all the *_priority() functions if the defaults @@ -8729,7 +9488,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - Corrected bug in session resuming code in server side. * Version 0.5.6 (2002-09-06) -- Corrected bugs in SRP implementation, which prevented gnutls +- Corrected bugs in SRP implementation, which prevented gnutls to interoperate with other implementations. (interoperability testing was done by David Taylor) - Corrected bug in cert_type extension. @@ -8741,10 +9500,10 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS * Version 0.5.5 (2002-09-03) - Updated the SRP implementation to the latest draft. The blowfish crypt implementation was removed, since the new draft does not allow - other hash algorithms except for the srpsha. + other hash algorithms except for the srpsha. - Renamed all the constructed types in order to have more consistent - names. -- Improved the certificate and key read functions. Now they can read + names. +- Improved the certificate and key read functions. Now they can read the certificate and the private key from the same file. - Updated and corrected documentation. @@ -8774,7 +9533,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - Documentation fixes - Added gnutls_transport_set_ptr2() function, which accepts two - different pointers, to be used while receiving, and + different pointers, to be used while receiving, and while sending data. - Semantic changes in gnutls_record_set_max_size(). The requested size is now immediately enforced at the output buffers. @@ -8856,15 +9615,15 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - Corrections in session resumption - Rehandshake can now handle negotiation of different authentication type. -- gnutls-cli, gnutls-serv, gnutls-srpcrypt and gnutls-cli-debug are +- gnutls-cli, gnutls-serv, gnutls-srpcrypt and gnutls-cli-debug are now being installed. * Version 0.3.90 (2002-02-24) -- Handshake messages are not kept in memory any more. Now we use +- Handshake messages are not kept in memory any more. Now we use less memory during a handshake - Added support for certificates with DSA parameters - Added DHE_DSS cipher suites -- Key exchange methods changed so they do not depend on the +- Key exchange methods changed so they do not depend on the certificate type. Added certificate type negotiation TLS extension. - Added openpgp key support (EXPERIMENTAL) - Improved Diffie Hellman key exchange support. @@ -8873,7 +9632,7 @@ LIBGNUTLS_VERSION_NUMBER: New CPP symbols, indicating the GnuTLS - TLS extensions now use a 16 bit type field. - Added a minimal string library to assist in ASN.1 parsing - Changes in ASN.1 parser to work with the new bison -- Added gnutls_x509_extract_subject_alt_name(), which deprecates +- Added gnutls_x509_extract_subject_alt_name(), which deprecates gnutls_x509_extract_subject_dns_name() - gnutls_x509_set_trust_(file/mem) can now be called multiple times - gnutls_srp_server_set_cred_file() can now be called multiple times diff --git a/README.md b/README.md index 0d3c214e95..3ee6c79671 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,16 @@ [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/330/badge)](https://bestpractices.coreinfrastructure.org/projects/330) -|Branch|CI system|Status|Coverage| -|:----:|:-------:|-----:|:------:| -|Master|Gitlab|[![build status](https://gitlab.com/gnutls/gnutls/badges/master/build.svg)](https://gitlab.com/gnutls/gnutls/commits/master)|[![coverage report](https://gitlab.com/gnutls/gnutls/badges/master/coverage.svg)](https://gnutls.gitlab.io/coverage/master)| -|Master|Travis|[![build status](https://travis-ci.org/gnutls/gnutls.svg?branch=master)](https://travis-ci.org/gnutls/gnutls)|N/A| -|3.5.x|Gitlab|[![build status](https://gitlab.com/gnutls/gnutls/badges/gnutls_3_5_x/build.svg)](https://gitlab.com/gnutls/gnutls/commits/gnutls_3_5_x)|[![coverage report](https://gitlab.com/gnutls/gnutls/badges/gnutls_3_5_x/coverage.svg)](https://gnutls.gitlab.io/coverage/3.5.x)| -|3.5.x|Travis|[![build status](https://travis-ci.org/gnutls/gnutls.svg?branch=gnutls_3_5_x)](https://travis-ci.org/gnutls/gnutls)|N/A| -|3.3.x|Gitlab|[![build status](https://gitlab.com/gnutls/gnutls/badges/gnutls_3_3_x/build.svg)](https://gitlab.com/gnutls/gnutls/commits/gnutls_3_3_x)|N/A| +|Branch|CI system|Status|Test suite coverage|Fuzzer coverage| +|:----:|:-------:|-----:|:------:|:-------------:| +|Master/3.6.x|Gitlab|[![build status](https://gitlab.com/gnutls/gnutls/badges/master/pipeline.svg)](https://gitlab.com/gnutls/gnutls/commits/master)|[![coverage report](https://gitlab.com/gnutls/gnutls/badges/master/coverage.svg)](https://gnutls.gitlab.io/coverage/master)|[![Fuzzer coverage report](https://gnutls.gitlab.io/coverage/master-fuzz/badge.svg)](https://gnutls.gitlab.io/coverage/master-fuzz)| +|Master/3.6.x|Travis|[![build status](https://travis-ci.org/gnutls/gnutls.svg?branch=master)](https://travis-ci.org/gnutls/gnutls)|N/A|N/A| # GnuTLS -- Information for developers GnuTLS implements the TLS/SSL (Transport Layer Security aka Secure Sockets Layer) protocol. Additional information can be found at -[www.gnutls.org](http://www.gnutls.org/). +[www.gnutls.org](https://www.gnutls.org/). This file contains instructions for developers and advanced users that want to build from version controlled sources. See [INSTALL.md](INSTALL.md) @@ -21,30 +18,35 @@ for building released versions. We require several tools to check out and build the software, including: -* [Make](http://www.gnu.org/software/make/) -* [Automake](http://www.gnu.org/software/automake/) (use 1.11.3 or later) -* [Autoconf](http://www.gnu.org/software/autoconf/) -* [Autogen](http://www.gnu.org/software/autogen/) (use 5.16 or later) -* [Libtool](http://www.gnu.org/software/libtool/) -* [Gettext](http://www.gnu.org/software/gettext/) -* [Texinfo](http://www.gnu.org/software/texinfo/) -* [Tar](http://www.gnu.org/software/tar/) -* [Gzip](http://www.gnu.org/software/gzip/) -* [Texlive & epsf](http://www.tug.org/texlive/) (for PDF manual) -* [GTK-DOC](http://www.gtk.org/gtk-doc/) (for API manual) -* [Git](http://git-scm.com/) -* [Perl](http://www.cpan.org/) -* [Nettle](http://www.lysator.liu.se/~nisse/nettle/) -* [Guile](http://www.gnu.org/software/guile/) -* [p11-kit](http://p11-glue.freedesktop.org/p11-kit.html) -* [gperf](http://www.gnu.org/software/gperf/) +* [Make](https://www.gnu.org/software/make/) +* [Automake](https://www.gnu.org/software/automake/) (use 1.11.3 or later) +* [Autoconf](https://www.gnu.org/software/autoconf/) +* [Autogen](https://www.gnu.org/software/autogen/) (use 5.16 or later) +* [Libtool](https://www.gnu.org/software/libtool/) +* [Gettext](https://www.gnu.org/software/gettext/) +* [Texinfo](https://www.gnu.org/software/texinfo/) +* [Tar](https://www.gnu.org/software/tar/) +* [Gzip](https://www.gnu.org/software/gzip/) +* [Texlive & epsf](https://www.tug.org/texlive/) (for PDF manual) +* [GTK-DOC](https://www.gtk.org/gtk-doc/) (for API manual) +* [Git](https://git-scm.com/) +* [Perl](https://www.cpan.org/) +* [Nettle](https://www.lysator.liu.se/~nisse/nettle/) +* [Guile](https://www.gnu.org/software/guile/) +* [p11-kit](https://p11-glue.github.io/p11-glue/p11-kit.html) +* [gperf](https://www.gnu.org/software/gperf/) * [libtasn1](https://www.gnu.org/software/libtasn1/) (optional) * [Libidn2](https://www.gnu.org/software/libidn/#libidn2) (optional, for internationalization of DNS, IDNA 2008) -* [Libunistring](http://www.gnu.org/software/libunistring/) (optional, for internationalization) -* [AWK](http://www.gnu.org/software/awk/) (for make dist, pmccabe2html) -* [bison](http://www.gnu.org/software/bison) (for datetime parser in certtool) +* [Libunistring](https://www.gnu.org/software/libunistring/) (optional, for internationalization) +* [AWK](https://www.gnu.org/software/awk/) (for make dist, pmccabe2html) +* [bison](https://www.gnu.org/software/bison) (for datetime parser in certtool) * [libunbound](https://unbound.net/) (for DANE support) -* [abi-compliance-checker](http://ispras.linuxbase.org/index.php/ABI_compliance_checker) (for make dist) +* [libabigail](https://pagure.io/libabigail/) (for abi comparison in make dist) +* [tcsd](https://trousers.sourceforge.net/) (for TPM support; optional) +* [swtpm](https://github.com/stefanberger/swtpm) (for TPM test; optional) +* [ncat](https://nmap.org/download.html) (for TPM test; optional) +* [tpm-tools](https://trousers.sourceforge.net/) (for TPM test; optional) +* [expect](https://core.tcl.tk/expect/index) (for TPM test; optional) The required software is typically distributed with your operating system, and the instructions for installing them differ. Here are @@ -52,19 +54,22 @@ some hints: Debian/Ubuntu: ``` -apt-get install -y git-core autoconf libtool gettext autopoint +apt-get install -y dash git-core autoconf libtool gettext autopoint apt-get install -y automake autogen nettle-dev libp11-kit-dev libtspi-dev libunistring-dev -apt-get install -y guile-2.0-dev libtasn1-6-dev libidn2-0-dev gawk gperf -apt-get install -y libunbound-dev dns-root-data bison help2man gtk-doc-tools +apt-get install -y guile-2.2-dev libtasn1-6-dev libidn2-0-dev gawk gperf +apt-get install -y libunbound-dev dns-root-data bison gtk-doc-tools apt-get install -y texinfo texlive texlive-generic-recommended texlive-extra-utils ``` +__NOTE:__ Some software versions might not be available in older releases, e.g. `nettle-dev`. +Available backport repos, APT-Pinning or source code compilating can be used to install these versions (and dependencies) from a newer release. + Fedora/RHEL: ``` -yum install -y git autoconf libtool gettext-devel automake autogen +yum install -y dash git autoconf libtool gettext-devel automake autogen patch yum install -y nettle-devel p11-kit-devel autogen-libopts-devel libunistring-devel -yum install -y trousers-devel guile-devel libtasn1-devel libidn2-devel gawk gperf -yum install -y libtasn1-tools unbound-devel bison help2man gtk-doc texinfo texlive +yum install -y trousers-devel guile22-devel libtasn1-devel libidn2-devel gawk gperf +yum install -y libtasn1-tools unbound-devel bison gtk-doc texinfo texlive ``` Sometimes, you may need to install more recent versions of Automake, @@ -72,26 +77,34 @@ Nettle, P11-kit and Autogen, which you will need to build from sources. Dependencies that are used during make check or make dist are listed below. Moreover, for basic interoperability testing you may want to install openssl -and polarssl. +and mbedtls. -* [Valgrind](http://valgrind.org/) (optional) +* [Valgrind](https://valgrind.org/) (optional) * [Libasan](https://gcc.gnu.org//) (optional) -* [datefudge](http://packages.debian.org/datefudge) (optional) -* [nodejs](http://nodejs.org/) (needed for certain test cases) -* [softhsm](http://www.opendnssec.org/softhsm/) (for testing smart card support) -* [dieharder](http://www.phy.duke.edu/~rgb/General/dieharder.php) (for testing PRNG) -* [lcov](http://linux-test-project.github.io/) (for code coverage) +* [datefudge](https://packages.debian.org/datefudge) (optional) +* [nodejs](https://nodejs.org/) (needed for certain test cases) +* [softhsm](https://www.opendnssec.org/softhsm/) (for testing smart card support) +* [dieharder](https://www.phy.duke.edu/~rgb/General/dieharder.php) (for testing PRNG) +* [lcov](https://linux-test-project.github.io/) (for code coverage) +* [util-linux](https://github.com/karelzak/util-linux) or just [lscpu](https://github.com/NanXiao/lscpu) (for CPU feature detection) +* [libev](hhttp://software.schmorp.de/pkg/libev.html) (for testing) Debian/Ubuntu: ``` -apt-get install -y valgrind libasan1 libubsan0 nodejs softhsm2 datefudge lcov libssl-dev libcmocka-dev -apt-get install -y dieharder libpolarssl-runtime openssl abi-compliance-checker socat net-tools ppp +apt-get install -y valgrind nodejs softhsm2 datefudge lcov libssl-dev libcmocka-dev expect libev-dev +apt-get install -y dieharder openssl abigail-tools socat net-tools ppp lockfile-progs util-linux +``` + +__NOTE:__ `libubsan0` and `libasan1` are required on older versions of Ubuntu <= 16.04. This packages must be manually added on these versions: + +``` +apt-get install -y v libubsan0 libasan1 ``` Fedora/RHEL: ``` -yum install -y valgrind libasan libasan-static libubsan nodejs softhsm datefudge lcov openssl-devel -yum install -y dieharder mbedtls-utils openssl abi-compliance-checker libcmocka-devel socat +yum install -y valgrind libasan libasan-static libubsan nodejs softhsm datefudge lcov openssl-devel expect libev-devel +yum install -y dieharder mbedtls-utils openssl libabigail libcmocka-devel socat lockfile-progs util-linux ``` @@ -100,13 +113,13 @@ To download the version controlled sources: ``` $ git clone https://gitlab.com/gnutls/gnutls.git $ cd gnutls -$ git submodule update --init ``` -The next step is to run autoreconf (etc) and then ./configure: +The next step is to bootstrap and ./configure: ``` -$ make bootstrap +$ ./bootstrap +$ ./configure ``` When built this way, some developer defaults will be enabled. See diff --git a/RELEASES.md b/RELEASES.md new file mode 100644 index 0000000000..5922814900 --- /dev/null +++ b/RELEASES.md @@ -0,0 +1,44 @@ +# Release policy + +In the GnuTLS project there are at most two ongoing releases, one marked as +'stable' and one marked as 'next'. The former is always present and +supported, while the latter is introduced on the discretion of the +development team. + +For both release branches all the rules in [CONTRIBUTING.md](CONTRIBUTING.md) +apply, but in principle the 'stable' release is more conservative in new features, +while the 'next' branch allows for mild behavioral changes. The 'stable' branch +always provides API and ABI compatibility, while the 'next' branch may on exceptional +cases change the API. + + +|Branch|Version|Release interval| +|:----:|:-----:|:--------------:| +|stable|3.6.x |bi-monthly | +|next |- | | + + +# Release process + + 0. Create a new 'milestone' for the next release and move all issues present in the + current release milestone. + 1. Verification of release notes: ensure that release notes ([NEWS](NEWS)) exist + for this release, and include all significant changes since last release. + 2. Update of release date in [NEWS](NEWS), and bump of version number in + [configure.ac](configure.ac) as well as soname numbers in [m4/hooks.m4](m4/hooks.m4). + 3. make distcheck + 4. git tag -s $(VERSION). The 3.6.12 was including both the 3.6.12 and + gnutls_3_6_12 tags, but it may make sense to only use the version from + now on. + 5. git push && git push --tags + 6. make dist && gpg --sign --detach gnutls-$(VERSION).tar.xz + 7. scp gnutls-$(VERSION).tar.xz* trithemius.gnupg.org:/home/ftp/gcrypt/v3.6/ + 8. Create and send announcement email based on previously sent email to the list and + [NEWS](NEWS) file. + 9. Create a NEWS entry at [web-pages repository](https://gitlab.com/gnutls/web-pages/-/tree/master/news-entries), + and/or [a security advisory entry](https://gitlab.com/gnutls/web-pages/-/tree/master/security-entries) + if necessary. The NEWS entry is usually pointing to the announcement email. + A commit auto-generates the [gnutls web site](https://gnutls.gitlab.io/web-pages/) + which is mirrored twice a day by www.gnutls.org. +10. Use the @GnuTLS twitter account to announce the release. +11. Close the current release milestone. diff --git a/SECURITY.md b/SECURITY.md index 372fcacc4e..b8d055c282 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -21,11 +21,11 @@ branches which are affected. The commit message must refer to the bug report addressed (e.g., our issue tracker or some external issue tracker). For issues reported by third parties which request an embargo time, the -general aim to have embargo dates which are two weeks or less in duration. -In exceptional circumstances longer initial embargoes may be negotiated by -mutual agreement between members of the security team and other relevant -parties to the problem. Any such extended embargoes will aim to be at most -one month in duration. +general aim to have embargo dates which do not exceed the upcoming stable +release date, or the following one, if the report was received late for +a fix to be included. In exceptional circumstances longer initial embargoes +may be negotiated by mutual agreement between members of the security team +and other relevant parties to the problem. # Releasing diff --git a/bootstrap b/bootstrap new file mode 100755 index 0000000000..f80a56631e --- /dev/null +++ b/bootstrap @@ -0,0 +1,1073 @@ +#! /bin/sh +# Print a version string. +scriptversion=2019-01-04.17; # UTC + +# Bootstrap this package from checked-out sources. + +# Copyright (C) 2003-2019 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Originally written by Paul Eggert. The canonical version of this +# script is maintained as build-aux/bootstrap in gnulib, however, to +# be useful to your project, you should place a copy of it under +# version control in the top-level directory of your project. The +# intent is that all customization can be done with a bootstrap.conf +# file also maintained in your version control; gnulib comes with a +# template build-aux/bootstrap.conf to get you started. + +# Please report bugs or propose patches to bug-gnulib@gnu.org. + +nl=' +' + +# Ensure file names are sorted consistently across platforms. +LC_ALL=C +export LC_ALL + +# Ensure that CDPATH is not set. Otherwise, the output from cd +# would cause trouble in at least one use below. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +local_gl_dir=gl + +# Honor $PERL, but work even if there is none. +PERL="${PERL-perl}" + +me=$0 + +default_gnulib_url=git://git.sv.gnu.org/gnulib + +usage() { + cat <&2 +} + +# warn_ WORD1... +warn_ () +{ + # If IFS does not start with ' ', set it and emit the warning in a subshell. + case $IFS in + ' '*) warnf_ '%s\n' "$*";; + *) (IFS=' '; warn_ "$@");; + esac +} + +# die WORD1... +die() { warn_ "$@"; exit 1; } + +# Configuration. + +# Name of the Makefile.am +gnulib_mk=gnulib.mk + +# List of gnulib modules needed. +gnulib_modules= + +# Any gnulib files needed that are not in modules. +gnulib_files= + +: ${AUTOPOINT=autopoint} +: ${AUTORECONF=autoreconf} + +# A function to be called right after gnulib-tool is run. +# Override it via your own definition in bootstrap.conf. +bootstrap_post_import_hook() { :; } + +# A function to be called after everything else in this script. +# Override it via your own definition in bootstrap.conf. +bootstrap_epilogue() { :; } + +# The command to download all .po files for a specified domain into a +# specified directory. Fill in the first %s with the destination +# directory and the second with the domain name. +po_download_command_format=\ +"wget --mirror --level=1 -nd -q -A.po -P '%s' \ + https://translationproject.org/latest/%s/" + +# Prefer a non-empty tarname (4th argument of AC_INIT if given), else +# fall back to the package name (1st argument with munging) +extract_package_name=' + /^AC_INIT(\[*/{ + s/// + /^[^,]*,[^,]*,[^,]*,[ []*\([^][ ,)]\)/{ + s//\1/ + s/[],)].*// + p + q + } + s/[],)].*// + s/^GNU // + y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g + p + } +' +package=$(sed -n "$extract_package_name" configure.ac) \ + || die 'cannot find package name in configure.ac' +gnulib_name=lib$package + +build_aux=build-aux +source_base=lib +m4_base=m4 +doc_base=doc +tests_base=tests +gnulib_extra_files=" + build-aux/install-sh + build-aux/mdate-sh + build-aux/texinfo.tex + build-aux/depcomp + build-aux/config.guess + build-aux/config.sub + doc/INSTALL +" + +# Additional gnulib-tool options to use. Use "\newline" to break lines. +gnulib_tool_option_extras= + +# Other locale categories that need message catalogs. +EXTRA_LOCALE_CATEGORIES= + +# Additional xgettext options to use. Use "\\\newline" to break lines. +XGETTEXT_OPTIONS='\\\ + --flag=_:1:pass-c-format\\\ + --flag=N_:1:pass-c-format\\\ + --flag=error:3:c-format --flag=error_at_line:5:c-format\\\ +' + +# Package bug report address and copyright holder for gettext files +COPYRIGHT_HOLDER='Free Software Foundation, Inc.' +MSGID_BUGS_ADDRESS=bug-$package@gnu.org + +# Files we don't want to import. +excluded_files= + +# File that should exist in the top directory of a checked out hierarchy, +# but not in a distribution tarball. +checkout_only_file=README-hacking + +# Whether to use copies instead of symlinks. +copy=false + +# Set this to '.cvsignore .gitignore' in bootstrap.conf if you want +# those files to be generated in directories like lib/, m4/, and po/. +# Or set it to 'auto' to make this script select which to use based +# on which version control system (if any) is used in the source directory. +vc_ignore=auto + +# Set this to true in bootstrap.conf to enable --bootstrap-sync by +# default. +bootstrap_sync=false + +# Use git to update gnulib sources +use_git=true + +check_exists() { + if test "$1" = "--verbose"; then + ($2 --version /dev/null 2>&1 + if test $? -ge 126; then + # If not found, run with diagnostics as one may be + # presented with env variables to set to find the right version + ($2 --version /dev/null 2>&1 + fi + + test $? -lt 126 +} + +# find_tool ENVVAR NAMES... +# ------------------------- +# Search for a required program. Use the value of ENVVAR, if set, +# otherwise find the first of the NAMES that can be run. +# If found, set ENVVAR to the program name, die otherwise. +# +# FIXME: code duplication, see also gnu-web-doc-update. +find_tool () +{ + find_tool_envvar=$1 + shift + find_tool_names=$@ + eval "find_tool_res=\$$find_tool_envvar" + if test x"$find_tool_res" = x; then + for i; do + if check_exists $i; then + find_tool_res=$i + break + fi + done + fi + if test x"$find_tool_res" = x; then + warn_ "one of these is required: $find_tool_names;" + die "alternatively set $find_tool_envvar to a compatible tool" + fi + eval "$find_tool_envvar=\$find_tool_res" + eval "export $find_tool_envvar" +} + +# Override the default configuration, if necessary. +# Make sure that bootstrap.conf is sourced from the current directory +# if we were invoked as "sh bootstrap". +case "$0" in + */*) test -r "$0.conf" && . "$0.conf" ;; + *) test -r "$0.conf" && . ./"$0.conf" ;; +esac + +if test "$vc_ignore" = auto; then + vc_ignore= + test -d .git && vc_ignore=.gitignore + test -d CVS && vc_ignore="$vc_ignore .cvsignore" +fi + +if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then + use_gnulib=false +else + use_gnulib=true +fi + +# Translate configuration into internal form. + +# Parse options. + +for option +do + case $option in + --help) + usage + exit;; + --gnulib-srcdir=*) + GNULIB_SRCDIR=${option#--gnulib-srcdir=};; + --skip-po) + SKIP_PO=t;; + --force) + checkout_only_file=;; + --copy) + copy=true;; + --bootstrap-sync) + bootstrap_sync=true;; + --no-bootstrap-sync) + bootstrap_sync=false;; + --no-git) + use_git=false;; + *) + die "$option: unknown option";; + esac +done + +$use_git || test -d "$GNULIB_SRCDIR" \ + || die "Error: --no-git requires --gnulib-srcdir" + +if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then + die "Bootstrapping from a non-checked-out distribution is risky." +fi + +# Strip blank and comment lines to leave significant entries. +gitignore_entries() { + sed '/^#/d; /^$/d' "$@" +} + +# If $STR is not already on a line by itself in $FILE, insert it at the start. +# Entries are inserted at the start of the ignore list to ensure existing +# entries starting with ! are not overridden. Such entries support +# whitelisting exceptions after a more generic blacklist pattern. +insert_if_absent() { + file=$1 + str=$2 + test -f $file || touch $file + test -r $file || die "Error: failed to read ignore file: $file" + duplicate_entries=$(gitignore_entries $file | sort | uniq -d) + if [ "$duplicate_entries" ] ; then + die "Error: Duplicate entries in $file: " $duplicate_entries + fi + linesold=$(gitignore_entries $file | wc -l) + linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l) + if [ $linesold != $linesnew ] ; then + { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \ + || die "insert_if_absent $file $str: failed" + fi +} + +# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with +# insert_if_absent. +insert_vc_ignore() { + vc_ignore_file="$1" + pattern="$2" + case $vc_ignore_file in + *.gitignore) + # A .gitignore entry that does not start with '/' applies + # recursively to subdirectories, so prepend '/' to every + # .gitignore entry. + pattern=$(echo "$pattern" | sed s,^,/,);; + esac + insert_if_absent "$vc_ignore_file" "$pattern" +} + +# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. +found_aux_dir=no +grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \ + >/dev/null && found_aux_dir=yes +grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ + >/dev/null && found_aux_dir=yes +test $found_aux_dir = yes \ + || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it" + +# If $build_aux doesn't exist, create it now, otherwise some bits +# below will malfunction. If creating it, also mark it as ignored. +if test ! -d $build_aux; then + mkdir $build_aux + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + insert_vc_ignore $dot_ig $build_aux + done +fi + +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +sort_ver() { # sort -V is not generally available + ver1="$1" + ver2="$2" + + # split on '.' and compare each component + i=1 + while : ; do + p1=$(echo "$ver1" | cut -d. -f$i) + p2=$(echo "$ver2" | cut -d. -f$i) + if [ ! "$p1" ]; then + echo "$1 $2" + break + elif [ ! "$p2" ]; then + echo "$2 $1" + break + elif [ ! "$p1" = "$p2" ]; then + if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison + echo "$2 $1" + elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison + echo "$1 $2" + else # numeric, then lexicographic comparison + lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1) + if [ "$lp" = "$p2" ]; then + echo "$1 $2" + else + echo "$2 $1" + fi + fi + break + fi + i=$(($i+1)) + done +} + +get_version_sed=' +# Move version to start of line. +s/.*[v ]\([0-9]\)/\1/ + +# Skip lines that do not start with version. +/^[0-9]/!d + +# Remove characters after the version. +s/[^.a-z0-9-].*// + +# The first component must be digits only. +s/^\([0-9]*\)[a-z-].*/\1/ + +#the following essentially does s/5.005/5.5/ +s/\.0*\([1-9]\)/.\1/g +p +q' + +get_version() { + app=$1 + + $app --version >/dev/null 2>&1 || { $app --version; return 1; } + + $app --version 2>&1 | sed -n "$get_version_sed" +} + +check_versions() { + ret=0 + + while read app req_ver; do + # We only need libtoolize from the libtool package. + if test "$app" = libtool; then + app=libtoolize + fi + # Exempt git if --no-git is in effect. + if test "$app" = git; then + $use_git || continue + fi + # Honor $APP variables ($TAR, $AUTOCONF, etc.) + appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_') + test "$appvar" = TAR && appvar=AMTAR + case $appvar in + GZIP) ;; # Do not use $GZIP: it contains gzip options. + PERL::*) ;; # Keep perl modules as-is + *) eval "app=\${$appvar-$app}" ;; + esac + + # Handle the still-experimental Automake-NG programs specially. + # They remain named as the mainstream Automake programs ("automake", + # and "aclocal") to avoid gratuitous incompatibilities with + # pre-existing usages (by, say, autoreconf, or custom autogen.sh + # scripts), but correctly identify themselves (as being part of + # "GNU automake-ng") when asked their version. + case $app in + automake-ng|aclocal-ng) + app=${app%-ng} + ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || { + warn_ "Error: '$app' not found or not from Automake-NG" + ret=1 + continue + } ;; + # Another check is for perl modules. These can be written as + # e.g. perl::XML::XPath in case of XML::XPath module, etc. + perl::*) + # Extract module name + app="${app#perl::}" + if ! $PERL -m"$app" -e 'exit 0' >/dev/null 2>&1; then + warn_ "Error: perl module '$app' not found" + ret=1 + fi + continue + ;; + esac + if [ "$req_ver" = "-" ]; then + # Merely require app to exist; not all prereq apps are well-behaved + # so we have to rely on $? rather than get_version. + if ! check_exists --verbose $app; then + warn_ "Error: '$app' not found" + ret=1 + fi + else + # Require app to produce a new enough version string. + inst_ver=$(get_version $app) + if [ ! "$inst_ver" ]; then + warn_ "Error: '$app' not found" + ret=1 + else + latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) + if [ ! "$latest_ver" = "$inst_ver" ]; then + warnf_ '%s\n' \ + "Error: '$app' version == $inst_ver is too old" \ + " '$app' version >= $req_ver is required" + ret=1 + fi + fi + fi + done + + return $ret +} + +print_versions() { + echo "Program Min_version" + echo "----------------------" + printf %s "$buildreq" + echo "----------------------" + # can't depend on column -t +} + +# Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6. +# Also find the compatible sha1 utility on the BSDs +if test x"$SKIP_PO" = x; then + find_tool SHA1SUM sha1sum gsha1sum shasum sha1 +fi + +use_libtool=0 +# We'd like to use grep -E, to see if any of LT_INIT, +# AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, +# but that's not portable enough (e.g., for Solaris). +grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ + && use_libtool=1 +grep '^[ ]*LT_INIT' configure.ac >/dev/null \ + && use_libtool=1 +if test $use_libtool = 1; then + find_tool LIBTOOLIZE glibtoolize libtoolize +fi + +# gnulib-tool requires at least automake and autoconf. +# If either is not listed, add it (with minimum version) as a prerequisite. +case $buildreq in + *automake*) ;; + *) buildreq="automake 1.9 +$buildreq" ;; +esac +case $buildreq in + *autoconf*) ;; + *) buildreq="autoconf 2.59 +$buildreq" ;; +esac + +# When we can deduce that gnulib-tool will require patch, +# and when patch is not already listed as a prerequisite, add it, too. +if test -d "$local_gl_dir" \ + && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then + case $buildreq in + *patch*) ;; + *) buildreq="patch - +$buildreq" ;; + esac +fi + +if ! printf "$buildreq" | check_versions; then + echo >&2 + if test -f README-prereq; then + die "See README-prereq for how to get the prerequisite programs" + else + die "Please install the prerequisite programs" + fi +fi + +# Warn the user if autom4te appears to be broken; this causes known +# issues with at least gettext 0.18.3. +probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -) +if test "x$probe" != xhi; then + warn_ "WARNING: your autom4te wrapper eats stdin;" + warn_ "if bootstrap fails, consider upgrading your autotools" +fi + +echo "$0: Bootstrapping from checked-out $package sources..." + +# See if we can use gnulib's git-merge-changelog merge driver. +if $use_git && test -d .git && check_exists git; then + if git config merge.merge-changelog.driver >/dev/null ; then + : + elif check_exists git-merge-changelog; then + echo "$0: initializing git-merge-changelog driver" + git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' + git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' + else + echo "$0: consider installing git-merge-changelog from gnulib" + fi +fi + + +cleanup_gnulib() { + status=$? + rm -fr "$gnulib_path" + exit $status +} + +git_modules_config () { + test -f .gitmodules && git config --file .gitmodules "$@" +} + +if $use_gnulib; then + if $use_git; then + gnulib_path=$(git_modules_config submodule.gnulib.path) + test -z "$gnulib_path" && gnulib_path=gnulib + fi + + # Get gnulib files. Populate $GNULIB_SRCDIR, possibly updating a + # submodule, for use in the rest of the script. + + case ${GNULIB_SRCDIR--} in + -) + # Note that $use_git is necessarily true in this case. + if git_modules_config submodule.gnulib.url >/dev/null; then + echo "$0: getting gnulib files..." + git submodule init -- "$gnulib_path" || exit $? + git submodule update -- "$gnulib_path" || exit $? + + elif [ ! -d "$gnulib_path" ]; then + echo "$0: getting gnulib files..." + + trap cleanup_gnulib 1 2 13 15 + + shallow= + if test -z "$GNULIB_REVISION"; then + git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' + fi + git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \ + || cleanup_gnulib + + trap - 1 2 13 15 + fi + GNULIB_SRCDIR=$gnulib_path + ;; + *) + # Use GNULIB_SRCDIR directly or as a reference. + if $use_git && test -d "$GNULIB_SRCDIR"/.git && \ + git_modules_config submodule.gnulib.url >/dev/null; then + echo "$0: getting gnulib files..." + if git submodule -h|grep -- --reference > /dev/null; then + # Prefer the one-liner available in git 1.6.4 or newer. + git submodule update --init --reference "$GNULIB_SRCDIR" \ + "$gnulib_path" || exit $? + else + # This fallback allows at least git 1.5.5. + if test -f "$gnulib_path"/gnulib-tool; then + # Since file already exists, assume submodule init already complete. + git submodule update -- "$gnulib_path" || exit $? + else + # Older git can't clone into an empty directory. + rmdir "$gnulib_path" 2>/dev/null + git clone --reference "$GNULIB_SRCDIR" \ + "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \ + && git submodule init -- "$gnulib_path" \ + && git submodule update -- "$gnulib_path" \ + || exit $? + fi + fi + GNULIB_SRCDIR=$gnulib_path + fi + ;; + esac + + if test -d "$GNULIB_SRCDIR"/.git && test -n "$GNULIB_REVISION" \ + && ! git_modules_config submodule.gnulib.url >/dev/null; then + (cd "$GNULIB_SRCDIR" && git checkout "$GNULIB_REVISION") || cleanup_gnulib + fi + + # $GNULIB_SRCDIR now points to the version of gnulib to use, and + # we no longer need to use git or $gnulib_path below here. + + if $bootstrap_sync; then + cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || { + echo "$0: updating bootstrap and restarting..." + case $(sh -c 'echo "$1"' -- a) in + a) ignored=--;; + *) ignored=ignored;; + esac + exec sh -c \ + 'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ + $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \ + "$0" "$@" --no-bootstrap-sync + } + fi + + gnulib_tool=$GNULIB_SRCDIR/gnulib-tool + <$gnulib_tool || exit $? +fi + +# Get translations. + +download_po_files() { + subdir=$1 + domain=$2 + echo "$me: getting translations into $subdir for $domain..." + cmd=$(printf "$po_download_command_format" "$subdir" "$domain") + eval "$cmd" +} + +# Mirror .po files to $po_dir/.reference and copy only the new +# or modified ones into $po_dir. Also update $po_dir/LINGUAS. +# Note po files that exist locally only are left in $po_dir but will +# not be included in LINGUAS and hence will not be distributed. +update_po_files() { + # Directory containing primary .po files. + # Overwrite them only when we're sure a .po file is new. + po_dir=$1 + domain=$2 + + # Mirror *.po files into this dir. + # Usually contains *.s1 checksum files. + ref_po_dir="$po_dir/.reference" + + test -d $ref_po_dir || mkdir $ref_po_dir || return + download_po_files $ref_po_dir $domain \ + && ls "$ref_po_dir"/*.po 2>/dev/null | + sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return + + langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g') + test "$langs" = '*' && langs=x + for po in $langs; do + case $po in x) continue;; esac + new_po="$ref_po_dir/$po.po" + cksum_file="$ref_po_dir/$po.s1" + if ! test -f "$cksum_file" || + ! test -f "$po_dir/$po.po" || + ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then + echo "$me: updated $po_dir/$po.po..." + cp "$new_po" "$po_dir/$po.po" \ + && $SHA1SUM < "$new_po" > "$cksum_file" || return + fi + done +} + +case $SKIP_PO in +'') + if test -d po; then + update_po_files po $package || exit + fi + + if test -d runtime-po; then + update_po_files runtime-po $package-runtime || exit + fi;; +esac + +symlink_to_dir() +{ + src=$1/$2 + dst=${3-$2} + + test -f "$src" && { + + # If the destination directory doesn't exist, create it. + # This is required at least for "lib/uniwidth/cjk.h". + dst_dir=$(dirname "$dst") + if ! test -d "$dst_dir"; then + mkdir -p "$dst_dir" + + # If we've just created a directory like lib/uniwidth, + # tell version control system(s) it's ignorable. + # FIXME: for now, this does only one level + parent=$(dirname "$dst_dir") + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + ig=$parent/$dot_ig + insert_vc_ignore $ig "${dst_dir##*/}" + done + fi + + if $copy; then + { + test ! -h "$dst" || { + echo "$me: rm -f $dst" && + rm -f "$dst" + } + } && + test -f "$dst" && + cmp -s "$src" "$dst" || { + echo "$me: cp -fp $src $dst" && + cp -fp "$src" "$dst" + } + else + # Leave any existing symlink alone, if it already points to the source, + # so that broken build tools that care about symlink times + # aren't confused into doing unnecessary builds. Conversely, if the + # existing symlink's timestamp is older than the source, make it afresh, + # so that broken tools aren't confused into skipping needed builds. See + # . + test -h "$dst" && + src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 && + dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 && + test "$src_i" = "$dst_i" && + both_ls=$(ls -dt "$src" "$dst") && + test "X$both_ls" = "X$dst$nl$src" || { + dot_dots= + case $src in + /*) ;; + *) + case /$dst/ in + *//* | */../* | */./* | /*/*/*/*/*/) + die "invalid symlink calculation: $src -> $dst";; + /*/*/*/*/) dot_dots=../../../;; + /*/*/*/) dot_dots=../../;; + /*/*/) dot_dots=../;; + esac;; + esac + + echo "$me: ln -fs $dot_dots$src $dst" && + ln -fs "$dot_dots$src" "$dst" + } + fi + } +} + +version_controlled_file() { + parent=$1 + file=$2 + if test -d .git; then + git rm -n "$file" > /dev/null 2>&1 + elif test -d .svn; then + svn log -r HEAD "$file" > /dev/null 2>&1 + elif test -d CVS; then + grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null | + grep '^/[^/]*/[0-9]' > /dev/null + else + warn_ "no version control for $file?" + false + fi +} + +# NOTE: we have to be careful to run both autopoint and libtoolize +# before gnulib-tool, since gnulib-tool is likely to provide newer +# versions of files "installed" by these two programs. +# Then, *after* gnulib-tool (see below), we have to be careful to +# run autoreconf in such a way that it does not run either of these +# two just-pre-run programs. + +# Import from gettext. +with_gettext=yes +grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ + with_gettext=no + +if test $with_gettext = yes || test $use_libtool = 1; then + + tempbase=.bootstrap$$ + trap "rm -f $tempbase.0 $tempbase.1" 1 2 13 15 + + > $tempbase.0 > $tempbase.1 && + find . ! -type d -print | sort > $tempbase.0 || exit + + if test $with_gettext = yes; then + # Released autopoint has the tendency to install macros that have been + # obsoleted in current gnulib, so run this before gnulib-tool. + echo "$0: $AUTOPOINT --force" + $AUTOPOINT --force || exit + fi + + # Autoreconf runs aclocal before libtoolize, which causes spurious + # warnings if the initial aclocal is confused by the libtoolized + # (or worse out-of-date) macro directory. + # libtoolize 1.9b added the --install option; but we support back + # to libtoolize 1.5.22, where the install action was default. + if test $use_libtool = 1; then + install= + case $($LIBTOOLIZE --help) in + *--install*) install=--install ;; + esac + echo "running: $LIBTOOLIZE $install --copy" + $LIBTOOLIZE $install --copy + fi + + find . ! -type d -print | sort >$tempbase.1 + old_IFS=$IFS + IFS=$nl + for file in $(comm -13 $tempbase.0 $tempbase.1); do + IFS=$old_IFS + parent=${file%/*} + version_controlled_file "$parent" "$file" || { + for dot_ig in x $vc_ignore; do + test $dot_ig = x && continue + ig=$parent/$dot_ig + insert_vc_ignore "$ig" "${file##*/}" + done + } + done + IFS=$old_IFS + + rm -f $tempbase.0 $tempbase.1 + trap - 1 2 13 15 +fi + +# Import from gnulib. + +if $use_gnulib; then + gnulib_tool_options="\ + --no-changelog\ + --aux-dir=$build_aux\ + --doc-base=$doc_base\ + --lib=$gnulib_name\ + --m4-base=$m4_base/\ + --source-base=$source_base/\ + --tests-base=$tests_base\ + --local-dir=$local_gl_dir\ + $gnulib_tool_option_extras\ + " + if test $use_libtool = 1; then + case "$gnulib_tool_options " in + *' --libtool '*) ;; + *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; + esac + fi + echo "$0: $gnulib_tool $gnulib_tool_options --import ..." + $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ + || die "gnulib-tool failed" + + for file in $gnulib_files; do + symlink_to_dir "$GNULIB_SRCDIR" $file \ + || die "failed to symlink $file" + done +fi + +bootstrap_post_import_hook \ + || die "bootstrap_post_import_hook failed" + +# Don't proceed if there are uninitialized submodules. In particular, +# the next step will remove dangling links, which might be links into +# uninitialized submodules. +# +# Uninitialized submodules are listed with an initial dash. +#if $use_git && git submodule | grep '^-' >/dev/null; then +# die "some git submodules are not initialized. " \ +# "Run 'git submodule init' and bootstrap again." +#fi + +# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some +# gnulib-populated directories. Such .m4 files would cause aclocal to fail. +# The following requires GNU find 4.2.3 or newer. Considering the usual +# portability constraints of this script, that may seem a very demanding +# requirement, but it should be ok. Ignore any failure, which is fine, +# since this is only a convenience to help developers avoid the relatively +# unusual case in which a symlinked-to .m4 file is git-removed from gnulib +# between successive runs of this script. +find "$m4_base" "$source_base" \ + -depth \( -name '*.m4' -o -name '*.[ch]' \) \ + -type l -xtype l -delete > /dev/null 2>&1 + +# Invoke autoreconf with --force --install to ensure upgrades of tools +# such as ylwrap. +AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS" + +# Some systems (RHEL 5) are using ancient autotools, for which the +# --no-recursive option had not been invented. Detect that lack and +# omit the option when it's not supported. FIXME in 2017: remove this +# hack when RHEL 5 autotools are updated, or when they become irrelevant. +case $($AUTORECONF --help) in + *--no-recursive*) AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive";; +esac + +# Tell autoreconf not to invoke autopoint or libtoolize; they were run above. +echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS" +AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \ + || die "autoreconf failed" + +# Get some extra files from gnulib, overriding existing files. +for file in $gnulib_extra_files; do + case $file in + */INSTALL) dst=INSTALL;; + build-aux/*) dst=$build_aux/${file#build-aux/};; + *) dst=$file;; + esac + symlink_to_dir "$GNULIB_SRCDIR" $file $dst \ + || die "failed to symlink $file" +done + +if test $with_gettext = yes; then + # Create gettext configuration. + echo "$0: Creating po/Makevars from po/Makevars.template ..." + rm -f po/Makevars + sed ' + /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ + /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ + /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| + /^XGETTEXT_OPTIONS *=/{ + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} + } + ' po/Makevars.template >po/Makevars \ + || die 'cannot generate po/Makevars' + + # If the 'gettext' module is in use, grab the latest Makefile.in.in. + # If only the 'gettext-h' module is in use, assume autopoint already + # put the correct version of this file into place. + case $gnulib_modules in + *gettext-h*) ;; + *gettext*) + cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \ + || die "cannot create po/Makefile.in.in" + ;; + esac + + if test -d runtime-po; then + # Similarly for runtime-po/Makevars, but not quite the same. + rm -f runtime-po/Makevars + sed ' + /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ + /^subdir *=.*/s/=.*/= runtime-po/ + /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ + /^XGETTEXT_OPTIONS *=/{ + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} + } + ' po/Makevars.template >runtime-po/Makevars \ + || die 'cannot generate runtime-po/Makevars' + + # Copy identical files from po to runtime-po. + (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) + fi +fi + +bootstrap_epilogue + +echo "$0: done. Now you can run './configure'." + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/bootstrap.conf b/bootstrap.conf new file mode 100644 index 0000000000..4c186d6c37 --- /dev/null +++ b/bootstrap.conf @@ -0,0 +1,108 @@ +# Copyright (C) 2016,2018 Tim Rühsen +# Copyright (C) 2016-2017 Simon Josefsson + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# gnulib library name +source_base=gl +tests_base=gl/tests +m4_base=m4 +gnulib_name=libgnu +gnulib_tool_option_extras="--with-tests --avoid=alignof-tests --avoid=lock-tests --avoid=lseek-tests --lgpl=2" +use_libtool=1 +checkout_only_file= +local_gl_dir=gl/override/ +required_submodules="tests/suite/tls-fuzzer/python-ecdsa tests/suite/tls-fuzzer/tlsfuzzer tests/suite/tls-fuzzer/tlslite-ng devel/nettle devel/libtasn1" + +# Reproduce by: gnulib-tool --import --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=gl/tests --aux-dir=build-aux --with-tests --avoid=alignof-tests --avoid=lock-tests --avoid=lseek-tests --lgpl=2 --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files alloca byteswap c-ctype extensions func gendocs getline gettext-h gettimeofday hash-pjw-bare havelib intprops ldd lib-msvc-compat lib-symbol-versions maintainer-makefile manywarnings memmem-simple minmax netdb netinet_in pmccabe2html read-file secure_getenv snprintf stdint strcase strndup strtok_r strverscmp sys_socket sys_stat time_r unistd vasprintf verify vsnprintf warnings + +gnulib_modules=" +alloca byteswap c-ctype c-strcase extensions func gendocs getline gettext-h gettimeofday hash hash-pjw-bare havelib arpa_inet inet_ntop inet_pton intprops ldd lib-msvc-compat lib-symbol-versions maintainer-makefile manywarnings memmem-simple minmax netdb netinet_in pmccabe2html read-file secure_getenv setsockopt snprintf stdint strcase strdup-posix strndup strtok_r strverscmp sys_socket sys_stat sys_types time_r unistd valgrind-tests vasprintf verify vsnprintf warnings +" + +unistring_modules=" +unictype/category-all unictype/property-default-ignorable-code-point unictype/property-join-control unictype/property-not-a-character uninorm/nfc uninorm/nfkc uninorm/u16-normalize uninorm/u32-normalize uninorm/u8-normalize unistr/u16-to-u8 unistr/u32-to-u8 unistr/u8-check unistr/u8-to-u16 unistr/u8-to-u32 +" + +src_modules=" +accept bind close connect getaddrinfo getpass gettext-h arpa_inet inet_ntop inet_pton listen minmax parse-datetime progname read-file recv recvfrom select send sendto servent setsockopt shutdown socket sockets socklen inttypes +" + +# Build prerequisites +buildreq="\ +autoconf 2.62 +automake 1.11.1 +gettext 0.17 +git 1.4.4 +perl 5.5 +gperf - +autopoint - +autogen - +" + +GTKDOCIZE=$(which gtkdocize 2>/dev/null) +if test $? -ne 0; then + echo "No gtk-doc support found. You can't build the docs." + # rm because gtk-doc.make might be a link to a protected file + rm -f gtk-doc.make 2>/dev/null + echo "EXTRA_DIST =" >gtk-doc.make + echo "CLEANFILES =" >>gtk-doc.make + GTKDOCIZE="" +else + $GTKDOCIZE +fi + +# update git submodules +git_options= +if test -n "$SUBMODULE_NOFETCH"; then + git_options="--no-fetch" +fi + +for mod in $required_submodules;do + git submodule update --init $git_options $mod +done + +if test -d ./gnulib;then + TMP_GNULIB_SRCDIR="${GNULIB_SRCDIR:-./gnulib/}" + + deps=$(${TMP_GNULIB_SRCDIR}/gnulib-tool --extract-recursive-dependencies ${gnulib_modules}) + deps="echo -n ${deps} ${gnulib_modules}|sort -u" + case ${deps} in + *select*|*poll*|*sockets*|*recv*|*send*) + echo "******************************************************************" + die "the library cannot include the gnulib sockets; see CONTRIBUTION.md" + ;; + esac +fi + +bootstrap_post_import_hook () +{ + # we re-use malloc-posix from the original gnulib +# for i in ${unistring_modules}; do +# sed -i 's/malloc-posix//g' ${GNULIB_SRCDIR}/modules/$i +# done + + ${GNULIB_SRCDIR}/gnulib-tool --import --local-dir=lib/unistring/override --lib=libunistring --source-base=lib/unistring --m4-base=lib/unistring/m4 --doc-base=doc --aux-dir=build-aux --lgpl=3orGPLv2 --no-conditional-dependencies --libtool --without-tests --macro-prefix=unistring ${unistring_modules} + + ${GNULIB_SRCDIR}/gnulib-tool --import --local-dir=src/gl/override --lib=libgnu_gpl --source-base=src/gl --m4-base=src/gl/m4 --doc-base=doc --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=ggl --without-tests --no-vc-files ${src_modules} + +# git -C ${GNULIB_SRCDIR} reset --hard + + # Automake requires that ChangeLog exist. + touch ChangeLog || return 1 + + devel/import-ecc-from-nettle.sh + devel/import-from-nettle.sh + devel/import-minitasn1.sh +} diff --git a/build-aux/gendocs.sh b/build-aux/gendocs.sh deleted file mode 100755 index fef6280a21..0000000000 --- a/build-aux/gendocs.sh +++ /dev/null @@ -1,504 +0,0 @@ -#!/bin/sh -e -# gendocs.sh -- generate a GNU manual in many formats. This script is -# mentioned in maintain.texi. See the help message below for usage details. - -scriptversion=2016-05-20.09 - -# Copyright 2003-2016 Free Software Foundation, Inc. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -# Original author: Mohit Agarwal. -# Send bug reports and any other correspondence to bug-gnulib@gnu.org. -# -# The latest version of this script, and the companion template, is -# available from the Gnulib repository: -# -# http://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh -# http://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template - -# TODO: -# - image importing was only implemented for HTML generated by -# makeinfo. But it should be simple enough to adjust. -# - images are not imported in the source tarball. All the needed -# formats (PDF, PNG, etc.) should be included. - -prog=`basename "$0"` -srcdir=`pwd` - -scripturl="http://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh" -templateurl="http://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template" - -: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} -: ${MAKEINFO="makeinfo"} -: ${TEXI2DVI="texi2dvi"} -: ${DOCBOOK2HTML="docbook2html"} -: ${DOCBOOK2PDF="docbook2pdf"} -: ${DOCBOOK2TXT="docbook2txt"} -: ${GENDOCS_TEMPLATE_DIR="."} -: ${PERL='perl'} -: ${TEXI2HTML="texi2html"} -unset CDPATH -unset use_texi2html - -MANUAL_TITLE= -PACKAGE= -EMAIL=webmasters@gnu.org # please override with --email -commonarg= # passed to all makeinfo/texi2html invcations. -dirargs= # passed to all tools (-I dir). -dirs= # -I directories. -htmlarg="--css-ref=/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual" -infoarg=--no-split -generate_ascii=true -generate_html=true -generate_info=true -generate_tex=true -outdir=manual -source_extra= -split=node -srcfile= -texarg="-t @finalout" - -version="gendocs.sh $scriptversion - -Copyright 2016 Free Software Foundation, Inc. -There is NO warranty. You may redistribute this software -under the terms of the GNU General Public License. -For more information about these matters, see the files named COPYING." - -usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE - -Generate output in various formats from PACKAGE.texinfo (or .texi or -.txi) source. See the GNU Maintainers document for a more extensive -discussion: - http://www.gnu.org/prep/maintain_toc.html - -Options: - --email ADR use ADR as contact in generated web pages; always give this. - - -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} - -o OUTDIR write files into OUTDIR, instead of manual/. - -I DIR append DIR to the Texinfo search path. - --common ARG pass ARG in all invocations. - --html ARG pass ARG to makeinfo or texi2html for HTML targets, - instead of '$htmlarg'. - --info ARG pass ARG to makeinfo for Info, instead of --no-split. - --no-ascii skip generating the plain text output. - --no-html skip generating the html output. - --no-info skip generating the info output. - --no-tex skip generating the dvi and pdf output. - --source ARG include ARG in tar archive of sources. - --split HOW make split HTML by node, section, chapter; default node. - --tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout. - - --texi2html use texi2html to make HTML target, with all split versions. - --docbook convert through DocBook too (xml, txt, html, pdf). - - --help display this help and exit successfully. - --version display version information and exit successfully. - -Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\" - -Typical sequence: - cd PACKAGESOURCE/doc - wget \"$scripturl\" - wget \"$templateurl\" - $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" - -Output will be in a new subdirectory \"manual\" (by default; -use -o OUTDIR to override). Move all the new files into your web CVS -tree, as explained in the Web Pages node of maintain.texi. - -Please use the --email ADDRESS option so your own bug-reporting -address will be used in the generated HTML pages. - -MANUAL-TITLE is included as part of the HTML of the overall -manual/index.html file. It should include the name of the package being -documented. manual/index.html is created by substitution from the file -$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the -generic template for your own purposes.) - -If you have several manuals, you'll need to run this script several -times with different MANUAL values, specifying a different output -directory with -o each time. Then write (by hand) an overall index.html -with links to them all. - -If a manual's Texinfo sources are spread across several directories, -first copy or symlink all Texinfo sources into a single directory. -(Part of the script's work is to make a tar.gz of the sources.) - -As implied above, by default monolithic Info files are generated. -If you want split Info, or other Info options, use --info to override. - -You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, -and PERL to control the programs that get executed, and -GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is -looked for. With --docbook, the environment variables DOCBOOK2HTML, -DOCBOOK2PDF, and DOCBOOK2TXT are also consulted. - -By default, makeinfo and texi2dvi are run in the default (English) -locale, since that's the language of most Texinfo manuals. If you -happen to have a non-English manual and non-English web site, see the -SETLANG setting in the source. - -Email bug reports or enhancement requests to bug-gnulib@gnu.org. -" - -while test $# -gt 0; do - case $1 in - -s) shift; srcfile=$1;; - -o) shift; outdir=$1;; - -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";; - --common) shift; commonarg=$1;; - --docbook) docbook=yes;; - --email) shift; EMAIL=$1;; - --html) shift; htmlarg=$1;; - --info) shift; infoarg=$1;; - --no-ascii) generate_ascii=false;; - --no-html) generate_ascii=false;; - --no-info) generate_info=false;; - --no-tex) generate_tex=false;; - --source) shift; source_extra=$1;; - --split) shift; split=$1;; - --tex) shift; texarg=$1;; - --texi2html) use_texi2html=1;; - - --help) echo "$usage"; exit 0;; - --version) echo "$version"; exit 0;; - -*) - echo "$0: Unknown option \`$1'." >&2 - echo "$0: Try \`--help' for more information." >&2 - exit 1;; - *) - if test -z "$PACKAGE"; then - PACKAGE=$1 - elif test -z "$MANUAL_TITLE"; then - MANUAL_TITLE=$1 - else - echo "$0: extra non-option argument \`$1'." >&2 - exit 1 - fi;; - esac - shift -done - -# makeinfo uses the dirargs, but texi2dvi doesn't. -commonarg=" $dirargs $commonarg" - -# For most of the following, the base name is just $PACKAGE -base=$PACKAGE - -if test -n "$srcfile"; then - # but here, we use the basename of $srcfile - base=`basename "$srcfile"` - case $base in - *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;; - esac - PACKAGE=$base -elif test -s "$srcdir/$PACKAGE.texinfo"; then - srcfile=$srcdir/$PACKAGE.texinfo -elif test -s "$srcdir/$PACKAGE.texi"; then - srcfile=$srcdir/$PACKAGE.texi -elif test -s "$srcdir/$PACKAGE.txi"; then - srcfile=$srcdir/$PACKAGE.txi -else - echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2 - exit 1 -fi - -if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then - echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2 - echo "$0: it is available from $templateurl." >&2 - exit 1 -fi - -# Function to return size of $1 in something resembling kilobytes. -calcsize() -{ - size=`ls -ksl $1 | awk '{print $1}'` - echo $size -} - -# copy_images OUTDIR HTML-FILE... -# ------------------------------- -# Copy all the images needed by the HTML-FILEs into OUTDIR. -# Look for them in . and the -I directories; this is simpler than what -# makeinfo supports with -I, but hopefully it will suffice. -copy_images() -{ - local odir - odir=$1 - shift - $PERL -n -e " -BEGIN { - \$me = '$prog'; - \$odir = '$odir'; - @dirs = qw(. $dirs); -} -" -e ' -/<img src="(.*?)"/g && ++$need{$1}; - -END { - #print "$me: @{[keys %need]}\n"; # for debugging, show images found. - FILE: for my $f (keys %need) { - for my $d (@dirs) { - if (-f "$d/$f") { - use File::Basename; - my $dest = dirname ("$odir/$f"); - # - use File::Path; - -d $dest || mkpath ($dest) - || die "$me: cannot mkdir $dest: $!\n"; - # - use File::Copy; - copy ("$d/$f", $dest) - || die "$me: cannot copy $d/$f to $dest: $!\n"; - next FILE; - } - } - die "$me: $ARGV: cannot find image $f\n"; - } -} -' -- "$@" || exit 1 -} - -case $outdir in - /*) abs_outdir=$outdir;; - *) abs_outdir=$srcdir/$outdir;; -esac - -echo "Making output for $srcfile" -echo " in `pwd`" -mkdir -p "$outdir/" - -# -if $generate_info; then - cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\"" - echo "Generating info... ($cmd)" - rm -f $PACKAGE.info* # get rid of any strays - eval "$cmd" - tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* - ls -l "$outdir/$PACKAGE.info.tar.gz" - info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"` - # do not mv the info files, there's no point in having them available - # separately on the web. -fi # end info - -# -if $generate_tex; then - cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\"" - printf "\nGenerating dvi... ($cmd)\n" - eval "$cmd" - # compress/finish dvi: - gzip -f -9 $PACKAGE.dvi - dvi_gz_size=`calcsize $PACKAGE.dvi.gz` - mv $PACKAGE.dvi.gz "$outdir/" - ls -l "$outdir/$PACKAGE.dvi.gz" - - cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\"" - printf "\nGenerating pdf... ($cmd)\n" - eval "$cmd" - pdf_size=`calcsize $PACKAGE.pdf` - mv $PACKAGE.pdf "$outdir/" - ls -l "$outdir/$PACKAGE.pdf" -fi # end tex (dvi + pdf) - -# -if $generate_ascii; then - opt="-o $PACKAGE.txt --no-split --no-headers $commonarg" - cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" - printf "\nGenerating ascii... ($cmd)\n" - eval "$cmd" - ascii_size=`calcsize $PACKAGE.txt` - gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz" - ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"` - mv $PACKAGE.txt "$outdir/" - ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz" -fi - -# - -if $generate_html; then -# Split HTML at level $1. Used for texi2html. -html_split() -{ - opt="--split=$1 --node-files $commonarg $htmlarg" - cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" - printf "\nGenerating html by $1... ($cmd)\n" - eval "$cmd" - split_html_dir=$PACKAGE.html - ( - cd ${split_html_dir} || exit 1 - ln -sf ${PACKAGE}.html index.html - tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html - ) - eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"` - rm -f "$outdir"/html_$1/*.html - mkdir -p "$outdir/html_$1/" - mv ${split_html_dir}/*.html "$outdir/html_$1/" - rmdir ${split_html_dir} -} - -if test -z "$use_texi2html"; then - opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg" - cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" - printf "\nGenerating monolithic html... ($cmd)\n" - rm -rf $PACKAGE.html # in case a directory is left over - eval "$cmd" - html_mono_size=`calcsize $PACKAGE.html` - gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" - html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` - copy_images "$outdir/" $PACKAGE.html - mv $PACKAGE.html "$outdir/" - ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz" - - # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option, - # it just always split by node. So if we're splitting by node anyway, - # leave it out. - if test "x$split" = xnode; then - split_arg= - else - split_arg=--split=$split - fi - # - opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg" - cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" - printf "\nGenerating html by $split... ($cmd)\n" - eval "$cmd" - split_html_dir=$PACKAGE.html - copy_images $split_html_dir/ $split_html_dir/*.html - ( - cd $split_html_dir || exit 1 - tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- * - ) - eval \ - html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"` - rm -rf "$outdir/html_$split/" - mv $split_html_dir "$outdir/html_$split/" - du -s "$outdir/html_$split/" - ls -l "$outdir/$PACKAGE.html_$split.tar.gz" - -else # use texi2html: - opt="--output $PACKAGE.html $commonarg $htmlarg" - cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\"" - printf "\nGenerating monolithic html with texi2html... ($cmd)\n" - rm -rf $PACKAGE.html # in case a directory is left over - eval "$cmd" - html_mono_size=`calcsize $PACKAGE.html` - gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" - html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` - mv $PACKAGE.html "$outdir/" - - html_split node - html_split chapter - html_split section -fi -fi # end html - -# -printf "\nMaking .tar.gz for sources...\n" -d=`dirname $srcfile` -( - cd "$d" - srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true - tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles - ls -l "$abs_outdir/$PACKAGE.texi.tar.gz" -) -texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` - -# -# Do everything again through docbook. -if test -n "$docbook"; then - opt="-o - --docbook $commonarg" - cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml" - printf "\nGenerating docbook XML... ($cmd)\n" - eval "$cmd" - docbook_xml_size=`calcsize $PACKAGE-db.xml` - gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz" - docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"` - mv $PACKAGE-db.xml "$outdir/" - - split_html_db_dir=html_node_db - opt="$commonarg -o $split_html_db_dir" - cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\"" - printf "\nGenerating docbook HTML... ($cmd)\n" - eval "$cmd" - ( - cd ${split_html_db_dir} || exit 1 - tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html - ) - html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"` - rm -f "$outdir"/html_node_db/*.html - mkdir -p "$outdir/html_node_db" - mv ${split_html_db_dir}/*.html "$outdir/html_node_db/" - rmdir ${split_html_db_dir} - - cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\"" - printf "\nGenerating docbook ASCII... ($cmd)\n" - eval "$cmd" - docbook_ascii_size=`calcsize $PACKAGE-db.txt` - mv $PACKAGE-db.txt "$outdir/" - - cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\"" - printf "\nGenerating docbook PDF... ($cmd)\n" - eval "$cmd" - docbook_pdf_size=`calcsize $PACKAGE-db.pdf` - mv $PACKAGE-db.pdf "$outdir/" -fi - -# -printf "\nMaking index.html for $PACKAGE...\n" -if test -z "$use_texi2html"; then - CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ - /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" -else - # should take account of --split here. - CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" -fi - -curdate=`$SETLANG date '+%B %d, %Y'` -sed \ - -e "s!%%TITLE%%!$MANUAL_TITLE!g" \ - -e "s!%%EMAIL%%!$EMAIL!g" \ - -e "s!%%PACKAGE%%!$PACKAGE!g" \ - -e "s!%%DATE%%!$curdate!g" \ - -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \ - -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \ - -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \ - -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \ - -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \ - -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \ - -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \ - -e "s!%%PDF_SIZE%%!$pdf_size!g" \ - -e "s!%%ASCII_SIZE%%!$ascii_size!g" \ - -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \ - -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \ - -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \ - -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \ - -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \ - -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \ - -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \ - -e "s,%%SCRIPTURL%%,$scripturl,g" \ - -e "s!%%SCRIPTNAME%%!$prog!g" \ - -e "$CONDS" \ -$GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html" - -echo "Done, see $outdir/ subdirectory for new files." - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/build-aux/gnupload b/build-aux/gnupload deleted file mode 100755 index 68215caf69..0000000000 --- a/build-aux/gnupload +++ /dev/null @@ -1,416 +0,0 @@ -#!/bin/sh -# Sign files and upload them. - -scriptversion=2010-05-23.15; # UTC - -# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Originally written by Alexandre Duret-Lutz <adl@gnu.org>. - -set -e - -GPG='gpg --batch --no-tty' -conffile=.gnuploadrc -to= -dry_run=false -symlink_files= -delete_files= -delete_symlinks= -collect_var= -dbg= -nl=' -' - -usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...] - -Sign all FILES, and process them at selected destinations according to CMD. -<http://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html> -explains further. - -Commands: - --delete delete FILES from destination - --symlink create symbolic links - --rmsymlink remove symbolic links - -- treat the remaining arguments as files to upload - -Options: - --help print this help text and exit - --to DEST specify one destination for FILES - (multiple --to options are allowed) - --user NAME sign with key NAME - --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names - --dry-run do nothing, show what would have been done - --version output version information and exit - -If --symlink-regex is given without EXPR, then the link target name -is created by replacing the version information with \`-latest', e.g.: - - foo-1.3.4.tar.gz -> foo-latest.tar.gz - -Recognized destinations are: - alpha.gnu.org:DIRECTORY - savannah.gnu.org:DIRECTORY - savannah.nongnu.org:DIRECTORY - ftp.gnu.org:DIRECTORY - build directive files and upload files by FTP - download.gnu.org.ua:{alpha|ftp}/DIRECTORY - build directive files and upload files by SFTP - [user@]host:DIRECTORY upload files with scp - -Options and commands are applied in order. If the file $conffile exists -in the current working directory, its contents are prepended to the -actual command line options. Use this to keep your defaults. Comments -(#) and empty lines in $conffile are allowed. - -Examples: -1. Upload foobar-1.0.tar.gz to ftp.gnu.org: - gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz - -2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org: - gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz - -3. Same as above, and also create symbolic links to foobar-latest.tar.*: - gnupload --to ftp.gnu.org:foobar \\ - --symlink-regex \\ - foobar-1.0.tar.gz foobar-1.0.tar.xz - -4. Upload foobar-0.9.90.tar.gz to two sites: - gnupload --to alpha.gnu.org:foobar \\ - --to sources.redhat.com:~ftp/pub/foobar \\ - foobar-0.9.90.tar.gz - -5. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz - (the -- terminates the list of files to delete): - gnupload --to alpha.gnu.org:foobar \\ - --to sources.redhat.com:~ftp/pub/foobar \\ - --delete oopsbar-0.9.91.tar.gz \\ - -- foobar-0.9.91.tar.gz - -gnupload uses the ncftpput program to do the transfers; if you don't -happen to have an ncftp package installed, the ncftpput-ftp script in -the build-aux/ directory of the gnulib package -(http://savannah.gnu.org/projects/gnulib) may serve as a replacement. - -Report bugs to <bug-automake@gnu.org>. -Send patches to <automake-patches@gnu.org>." - -# Read local configuration file -if test -r "$conffile"; then - echo "$0: Reading configuration file $conffile" - conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" ' '` - eval set x "$conf \"\$@\"" - shift -fi - -while test -n "$1"; do - case $1 in - -*) - collect_var= - case $1 in - --help) - echo "$usage" - exit $? - ;; - --to) - if test -z "$2"; then - echo "$0: Missing argument for --to" 1>&2 - exit 1 - else - to="$to $2" - shift - fi - ;; - --user) - if test -z "$2"; then - echo "$0: Missing argument for --user" 1>&2 - exit 1 - else - GPG="$GPG --local-user $2" - shift - fi - ;; - --delete) - collect_var=delete_files - ;; - --rmsymlink) - collect_var=delete_symlinks - ;; - --symlink-regex=*) - symlink_expr=`expr "$1" : '[^=]*=\(.*\)'` - ;; - --symlink-regex) - symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|' - ;; - --symlink) - collect_var=symlink_files - ;; - --dry-run|-n) - dry_run=: - ;; - --version) - echo "gnupload $scriptversion" - exit $? - ;; - --) - shift - break - ;; - -*) - echo "$0: Unknown option \`$1', try \`$0 --help'" 1>&2 - exit 1 - ;; - esac - ;; - *) - if test -z "$collect_var"; then - break - else - eval "$collect_var=\"\$$collect_var $1\"" - fi - ;; - esac - shift -done - -dprint() -{ - echo "Running $* ..." -} - -if $dry_run; then - dbg=dprint -fi - -if test -z "$to"; then - echo "$0: Missing destination sites" >&2 - exit 1 -fi - -if test -n "$symlink_files"; then - x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'` - if test -n "$x"; then - echo "$0: Odd number of symlink arguments" >&2 - exit 1 - fi -fi - -if test $# = 0; then - if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then - echo "$0: No file to upload" 1>&2 - exit 1 - fi -else - # Make sure all files exist. We don't want to ask - # for the passphrase if the script will fail. - for file - do - if test ! -f $file; then - echo "$0: Cannot find \`$file'" 1>&2 - exit 1 - elif test -n "$symlink_expr"; then - linkname=`echo $file | sed "$symlink_expr"` - if test -z "$linkname"; then - echo "$0: symlink expression produces empty results" >&2 - exit 1 - elif test "$linkname" = $file; then - echo "$0: symlink expression does not alter file name" >&2 - exit 1 - fi - fi - done -fi - -# Make sure passphrase is not exported in the environment. -unset passphrase - -# Reset PATH to be sure that echo is a built-in. We will later use -# `echo $passphrase' to output the passphrase, so it is important that -# it is a built-in (third-party programs tend to appear in `ps' -# listings with their arguments...). -# Remember this script runs with `set -e', so if echo is not built-in -# it will exit now. -PATH=/empty echo -n "Enter GPG passphrase: " -stty -echo -read -r passphrase -stty echo -echo - -if test $# -ne 0; then - for file - do - echo "Signing $file ..." - rm -f $file.sig - echo "$passphrase" | $dbg $GPG --passphrase-fd 0 -ba -o $file.sig $file - done -fi - - -# mkdirective DESTDIR BASE FILE STMT -# Arguments: See upload, below -mkdirective () -{ - stmt="$4" - if test -n "$3"; then - stmt=" -filename: $3$stmt" - fi - - cat >${2}.directive<<EOF -version: 1.1 -directory: $1 -comment: gnupload v. $scriptversion$stmt -EOF - if $dry_run; then - echo "File ${2}.directive:" - cat ${2}.directive - echo "File ${2}.directive:" | sed 's/./-/g' - fi -} - -mksymlink () -{ - while test $# -ne 0 - do - echo "symlink: $1 $2" - shift - shift - done -} - -# upload DEST DESTDIR BASE FILE STMT FILES -# Arguments: -# DEST Destination site; -# DESTDIR Destination directory; -# BASE Base name for the directive file; -# FILE Name of the file to distribute (may be empty); -# STMT Additional statements for the directive file; -# FILES List of files to upload. -upload () -{ - dest=$1 - destdir=$2 - base=$3 - file=$4 - stmt=$5 - files=$6 - - rm -f $base.directive $base.directive.asc - case $dest in - alpha.gnu.org:*) - mkdirective "$destdir" "$base" "$file" "$stmt" - echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive - $dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc - ;; - ftp.gnu.org:*) - mkdirective "$destdir" "$base" "$file" "$stmt" - echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive - $dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc - ;; - savannah.gnu.org:*) - if test -z "$files"; then - echo "$0: warning: standalone directives not applicable for $dest" >&2 - fi - $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files - ;; - savannah.nongnu.org:*) - if test -z "$files"; then - echo "$0: warning: standalone directives not applicable for $dest" >&2 - fi - $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files - ;; - download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*) - destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'` - destdir_topdir=`echo "$destdir" | sed 's,/.*,,'` - mkdirective "$destdir_p1" "$base" "$file" "$stmt" - echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive - for f in $files $base.directive.asc - do - echo put $f - done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir - ;; - /*) - dest_host=`echo "$dest" | sed 's,:.*,,'` - mkdirective "$destdir" "$base" "$file" "$stmt" - echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive - $dbg cp $files $base.directive.asc $dest_host - ;; - *) - if test -z "$files"; then - echo "$0: warning: standalone directives not applicable for $dest" >&2 - fi - $dbg scp $files $dest - ;; - esac - rm -f $base.directive $base.directive.asc -} - -##### -# Process any standalone directives -stmt= -if test -n "$symlink_files"; then - stmt="$stmt -`mksymlink $symlink_files`" -fi - -for file in $delete_files -do - stmt="$stmt -archive: $file" -done - -for file in $delete_symlinks -do - stmt="$stmt -rmsymlink: $file" -done - -if test -n "$stmt"; then - for dest in $to - do - destdir=`echo $dest | sed 's/[^:]*://'` - upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt" - done -fi - -# Process actual uploads -for dest in $to -do - for file - do - echo "Uploading $file to $dest ..." - stmt= - files="$file $file.sig" - destdir=`echo $dest | sed 's/[^:]*://'` - if test -n "$symlink_expr"; then - linkname=`echo $file | sed "$symlink_expr"` - stmt="$stmt -symlink: $file $linkname -symlink: $file.sig $linkname.sig" - fi - upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files" - done -done - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/build-aux/pmccabe.css b/build-aux/pmccabe.css deleted file mode 100644 index a10ee35026..0000000000 --- a/build-aux/pmccabe.css +++ /dev/null @@ -1,159 +0,0 @@ -body { - font-family: Helvetica, sans-serif; -} - -.page_title { - font: 18pt Georgia, serif; - color: darkred; -} - -.section_title { - font: 14pt Georgia, serif; - color: darkred; -} - -.report_timestamp { - color: darkred; - font-weight: bold; -} - -.function_src { - text-align: left; - background: white; -} - -.resume_table { -} - -.resume_header_entry { - color: black; -} - -.resume_number_entry { - color: darkred; - font-weight: bold; - text-align: right; -} - -.ranges_table { - border-spacing: 0px; - border-bottom: solid 2px black; - border-top: solid 2px black; - border-left: solid 2px black; - border-right: solid 2px black; -} - -.ranges_header_entry { - padding: 5px; - border-bottom: solid 1px black; - font-size: 1em; - font-weight: bold; - color: darkred; - text-align: left; -} - -.ranges_entry { -} - -.ranges_entry_simple { - background: #87ff75; -} - -.ranges_entry_moderate { - background: #fffc60; -} - -.ranges_entry_high { - background: #ff5a5d; -} - -.ranges_entry_untestable { - background: #993300 -} - - -.function_table { - border-spacing: 0px; - border-bottom: solid 2px black; - border-top: solid 2px black; - border-left: solid 2px black; - border-right: solid 2px black; -} - -.function_table_caption { - font-size: 1.1em; - font-weight: bold; - color: black; - padding: 5px; -} - -.function_table_header { -} - - -.function_table_header_entry { - padding: 5px; - border-bottom: solid 1px black; - font-size: 1em; - font-weight: bold; - color: darkred; - text-align: left; -} - -.function_entry { -} - - -.function_entry_simple { - background: #87ff75; -} - -.function_entry_moderate { - background: #fffc60; -} - -.function_entry_high { - background: #ff5a5d; -} - -.function_entry_untestable { - background: #993300 -} - - -.function_entry_name { - font-size: 1em; - text-align: left; - font-weight: bold; - text-valign: top; - - border-top: solid 1px black; - padding: 3px; -} - -.function_entry_cyclo { - font-size: 1em; - text-align: right; - text-valign: top; - - border-top: solid 1px black; - padding: 3px; -} - -.function_entry_number { - font-size: 1em; - text-align: right; - text-valign: top; - - border-top: solid 1px black; - padding: 3px; -} - -.function_entry_filename { - font-size: 1em; - text-align: left; - text-valign: top; - - border-top: solid 1px black; - padding: 3px; -} diff --git a/build-aux/pmccabe2html b/build-aux/pmccabe2html deleted file mode 100644 index ca4d0b1f4d..0000000000 --- a/build-aux/pmccabe2html +++ /dev/null @@ -1,911 +0,0 @@ -# pmccabe2html - AWK script to convert pmccabe output to html -*- awk -*- - -# Copyright (C) 2007-2016 Free Software Foundation, Inc. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Written by Jose E. Marchesi <jemarch@gnu.org>. -# Adapted for gnulib by Simon Josefsson <simon@josefsson.org>. -# Added support for C++ by Giuseppe Scrivano <gscrivano@gnu.org>. - -# Typical Invocation is from a Makefile.am: -# -# CYCLO_SOURCES = ${top_srcdir}/src/*.[ch] -# -# cyclo-$(PACKAGE).html: $(CYCLO_SOURCES) -# $(PMCCABE) $(CYCLO_SOURCES) \ -# | sort -nr \ -# | $(AWK) -f ${top_srcdir}/build-aux/pmccabe2html \ -# -v lang=html -v name="$(PACKAGE_NAME)" \ -# -v vcurl="http://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=%FILENAME%;hb=HEAD" \ -# -v url="http://www.gnu.org/software/$(PACKAGE)/" \ -# -v css=${top_srcdir}/build-aux/pmccabe.css \ -# -v cut_dir=${top_srcdir}/ \ -# > $@-tmp -# mv $@-tmp $@ -# -# The variables available are: -# lang output language, either 'html' or 'wiki' -# name project name -# url link to project's home page -# vcurl URL to version controlled source code browser, -# a %FILENAME% in the string is replaced with the relative -# source filename -# css CSS stylesheet filename, included verbatim in HTML output -# css_url link to CSS stylesheet, an URL - -# Prologue & configuration -BEGIN { - # Portable lookup of present time. - "date +%s" | getline epoch_time - "date" | getline chronos_time - - section_global_stats_p = 1 - section_function_cyclo_p = 1 - - # "html" or "wiki" - package_name = name - output_lang = lang - - # General Options - cyclo_simple_max = 10 - cyclo_moderate_max = 20 - cyclo_high_max = 50 - source_file_link_tmpl = vcurl - - # HTML options - if (url != "") - { - html_prolog = "<a href=\"" url "\">Back to " package_name " Homepage</a><br/><br/>" - } - html_epilog = "<hr color=\"black\" size=\"2\"/> \ -Copyright (c) 2007, 2008 Free Software Foundation, Inc." - html_doctype = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \ -\"http://www.w3.org/TR/html401/loose.dtd\">" - html_comment = "<!-- Generated by gnulib's pmccabe2html at " epoch_time " -->" - html_title = "Cyclomatic Complexity report for " package_name - - # Wiki options - wiki_prolog = "{{Note|This page has been automatically generated}}" - wiki_epilog = "" - - # Internal variables - nfuncs = 0; -} - -# Functions - -function build_stats() -{ - # Maximum modified cyclo - for (fcn in mcyclo) - { - num_of_functions++ - if (mcyclo[fcn] > max_mcyclo) - { - max_mcyclo = mcyclo[fcn] - } - - if (mcyclo[fcn] > cyclo_high_max) - { - num_of_untestable_functions++ - } - else if (mcyclo[fcn] > cyclo_moderate_max) - { - num_of_high_functions++ - } - else if (mcyclo[fcn] > cyclo_simple_max) - { - num_of_moderate_functions++ - } - else - { - num_of_simple_functions++ - } - } -} - -function html_fnc_table_complete (caption) -{ - html_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1) -} - -function html_fnc_table_abbrev (caption) -{ - html_fnc_table(caption, 1, 1, 0, 0, 1, 0, 0) -} - - -function html_fnc_table (caption, - fname_p, - mcyclo_p, - cyclo_p, - num_statements_p, - num_lines_p, - first_line_p, - file_p) -{ - print "<table width=\"90%\" class=\"function_table\" cellpadding=\"0\" cellspacing=\"0\">" - if (caption != "") - { - print "<caption class=\"function_table_caption\">" caption "</caption>" - } - html_fnc_header(fname_p, - mcyclo_p, - cyclo_p, - num_statements_p, - num_lines_p, - first_line_p, - file_p) - for (nfnc = 1; nfnc <= nfuncs; nfnc++) - { - html_fnc(nfnc, - fname_p, - mcyclo_p, - cyclo_p, - num_statements_p, - num_lines_p, - first_line_p, - file_p) - } - print "</table>" -} - -function html_header () -{ - print html_doctype - print "<html>" - print html_comment - print "<head>" - print "<title>" html_title "" - print "" - print "" - print "" - print "" - print "" - print "" - print "" - print "" - - - if (css_url != "") - { - print "" - } - if (css != "") - { - print "" - close(css) - } - print "" - print "" -} - -function html_footer () -{ - print "" - print "" -} - -function html_fnc_header (fname_p, - mcyclo_p, - cyclo_p, - num_statements_p, - num_lines_p, - first_line_p, - file_p) -{ - print "" - if (fname_p) - { - # Function name - print "" - print "" - print "" - - print "" - print "Function Name" - print "" - } - if (mcyclo_p) - { - # Modified cyclo - print "" - print "Modified Cyclo" - print "" - } - if (cyclo_p) - { - # Cyclo - print "" - print "Cyclomatic" - print "
" - print "Complexity" - print "" - } - if (num_statements_p) - { - print "" - print "Number of" - print "
" - print "Statements" - print "" - } - if (num_lines_p) - { - print "" - print "Number of" - print "
" - print "Lines" - print "" - } - if (first_line_p) - { - print "" - print "First Line" - print "" - } - if (file_p) - { - print "" - print "Source File" - print "" - - } - print "" -} - -function html_fnc (nfun, - fname_p, - mcyclo_p, - cyclo_p, - num_statements_p, - num_lines_p, - first_line_p, - file_p) -{ - fname = fnames[nfun] - - # Function name - trclass = "function_entry_simple" - if (mcyclo[nfun] > cyclo_high_max) - { - trclass="function_entry_untestable" - } - else if (mcyclo[nfun] > cyclo_moderate_max) - { - trclass="function_entry_high" - } - else if (mcyclo[nfun] > cyclo_simple_max) - { - trclass="function_entry_moderate" - } - - print "" - if (fname_p) - { - print "" - if (file_p && mcyclo[nfun] > cyclo_simple_max) - { - print "\ -" - } - else - { - print " " - } - print "" - - print "" - print fname - print "" - } - if (mcyclo_p) - { - # Modified cyclo - print "" - print mcyclo[nfun] - print "" - } - if (cyclo_p) - { - # Cyclo - print "" - print cyclo[nfun] - print "" - } - if (num_statements_p) - { - # Number of statements - print "" - print num_statements[nfun] - print "" - } - if (num_lines_p) - { - # Number of lines - print "" - print num_lines[nfun] - print "" - } - if (first_line_p) - { - # First line - print "" - print first_line[nfun] - print "" - } - if (file_p) - { - href = "" - if (source_file_link_tmpl != "") - { - # Get href target - href = source_file_link_tmpl - sub(/%FILENAME%/, file[nfun], href) - } - - # Source file - print "" - if (href != "") - { - print "" file[nfun] "" - } - else - { - print file[nfun] - } - - print "" - - - print "" - - if (mcyclo[nfun] > cyclo_simple_max) - { - print "" - - num_columns = 1; - if (fname_p) { num_columns++ } - if (mcyclo_p) { num_columns++ } - if (cyclo_p) { num_columns++ } - if (num_statements_p) { num_columns++ } - if (num_lines_p) { num_columns++ } - if (first_line_p) { num_columns++ } - if (file_p) { num_columns++ } - - print "" - print "
" - print "
"
-
-            while ((getline codeline < (fname nfun "_fn.txt")) > 0)
-            {
-                gsub(/&/, "\\&", codeline)	# Must come first.
-                gsub(//, "\\>", codeline)
-
-                print codeline
-            }
-            close(fname nfun "_fn.txt")
-            system("rm " "'" fname "'" nfun "_fn.txt")
-            print "
" - print "
" - print "" - print "" - } - - } -} - -function html_global_stats () -{ - print "
Summary
" - - print "" - # Total number of functions - print "" - print "" - print "" - print "" - # Number of simple functions - print "" - print "" - print "" - print "" - # Number of moderate functions - print "" - print "" - print "" - print "" - # Number of high functions - print "" - print "" - print "" - print "" - # Number of untestable functions - print "" - print "" - print "" - print "" - print "
" - print "Total number of functions" - print "" - print num_of_functions - print "
" - print "Number of low risk functions" - print "" - print num_of_simple_functions - print "
" - print "Number of moderate risk functions" - print "" - print num_of_moderate_functions - print "
" - print "Number of high risk functions" - print "" - print num_of_high_functions - print "
" - print "Number of untestable functions" - print "" - print num_of_untestable_functions - print "
" - print "
" -} - -function html_function_cyclo () -{ - print "
Details for all functions
" - - print "" - print "" - print "" - print "" - print "" - print "" - # Simple - print "" - print "" - print "" - print "" - print "" - # Moderate - print "" - print "" - print "" - print "" - print "" - # High - print "" - print "" - print "" - print "" - print "" - # Untestable - print "" - print "" - print "" - print "" - print "" - print "
" - print " " - print "" - print "Cyclomatic Complexity" - print "" - print "Risk Evaluation" - print "
" - print " " - print "" - print "0 - " cyclo_simple_max - print "" - print "Simple module, without much risk" - print "
" - print " " - print "" - print cyclo_simple_max + 1 " - " cyclo_moderate_max - print "" - print "More complex module, moderate risk" - print "
" - print " " - print "" - print cyclo_moderate_max + 1 " - " cyclo_high_max - print "" - print "Complex module, high risk" - print "
" - print " " - print "" - print "greater than " cyclo_high_max - print "" - print "Untestable module, very high risk" - print "
" - print "
" - html_fnc_table_complete("") -} - -function wiki_global_stats () -{ - print "{| class=\"cyclo_summary_table\"" - # Total number of functions - print "|-" - print "| class=\"cyclo_summary_header_entry\" | Total number of functions" - print "| class=\"cyclo_summary_number_entry\" |" num_of_functions - # Number of simple functions - print "|-" - print "| class=\"cyclo_summary_header_entry\" | Number of low risk functions" - print "| class=\"cyclo_summary_number_entry\" |" num_of_simple_functions - # Number of moderate functions - print "|-" - print "| class=\"cyclo_summary_header_entry\" | Number of moderate risk functions" - print "| class=\"cyclo_summary_number_entry\" |" num_of_moderate_functions - # Number of high functions - print "|-" - print "| class=\"cyclo_summary_header_entry\" | Number of high risk functions" - print "| class=\"cyclo_summary_number_entry\" |" num_of_high_functions - # Number of untestable functions - print "|-" - print "| class=\"cyclo_summary_header_entry\" | Number of untestable functions" - print "| class=\"cyclo_summary_number_entry\" |" num_of_untestable_functions - print "|}" -} - -function wiki_function_cyclo () -{ - print "==Details for all functions==" - - print "Used ranges:" - - print "{| class =\"cyclo_ranges_table\"" - print "|-" - print "| class=\"cyclo_ranges_header_entry\" | " - print "| class=\"cyclo_ranges_header_entry\" | Cyclomatic Complexity" - print "| class=\"cyclo_ranges_header_entry\" | Risk Evaluation" - # Simple - print "|-" - print "| class=\"cyclo_ranges_entry_simple\" | " - print "| class=\"cyclo_ranges_entry\" | 0 - " cyclo_simple_max - print "| class=\"cyclo_ranges_entry\" | Simple module, without much risk" - # Moderate - print "|-" - print "| class=\"cyclo_ranges_entry_moderate\" | " - print "| class=\"cyclo_ranges_entry\" |" cyclo_simple_max + 1 " - " cyclo_moderate_max - print "| class=\"cyclo_ranges_entry\" | More complex module, moderate risk" - # High - print "|-" - print "| class=\"cyclo_ranges_entry_high\" | " - print "| class=\"cyclo_ranges_entry\" |" cyclo_moderate_max + 1 " - " cyclo_high_max - print "| class=\"cyclo_ranges_entry\" | Complex module, high risk" - # Untestable - print "|-" - print "| class=\"cyclo_ranges_entry_untestable\" | " - print "| class=\"cyclo_ranges_entry\" | greater than " cyclo_high_max - print "| class=\"cyclo_ranges_entry\" | Untestable module, very high risk" - print "|}" - - print "" - print "" - wiki_fnc_table_complete("") -} - -function wiki_fnc_table_complete (caption) -{ - wiki_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1) -} - -function wiki_fnc_table_abbrev (caption) -{ - wiki_fnc_table(caption, 1, 0, 0, 0, 0, 0, 0) -} - -function wiki_fnc_table (caption, - fname_p, - mcyclo_p, - cyclo_p, - num_statements_p, - num_lines_p, - first_line_p, - file_p) -{ - print "{| width=\"90%\" class=\"cyclo_function_table\" cellpadding=\"0\" cellspacing=\"0\">" - if (caption != "") - { - print "|+" caption - } - wiki_fnc_header(fname_p, - mcyclo_p, - cyclo_p, - num_statements_p, - num_lines_p, - first_line_p, - file_p) - for (nfnc = 1; nfnc <= nfuncs; nfnc++) - { - wiki_fnc(nfnc, - fname_p, - mcyclo_p, - cyclo_p, - num_statements_p, - num_lines_p, - first_line_p, - file_p) - } - print "|}" -} - -function wiki_fnc_header (fname_p, - mcyclo_p, - cyclo_p, - num_statements_p, - num_lines_p, - first_line_p, - file_p) -{ - if (fname_p) - { - # Function name - print "! class=\"cyclo_function_table_header_entry\" | Function Name" - } - if (mcyclo_p) - { - # Modified cyclo - print "! class=\"cyclo_function_table_header_entry\" | Modified Cyclo" - } - if (cyclo_p) - { - # Cyclo - print "! class=\"cyclo_function_table_header_entry\" | Cyclomatic Complexity" - } - if (num_statements_p) - { - print "! class=\"cyclo_function_table_header_entry\" | Number of Statements" - } - if (num_lines_p) - { - print "! class=\"cyclo_function_table_header_entry\" | Number of Lines" - } - if (first_line_p) - { - print "! class=\"cyclo_function_table_header_entry\" | First Line" - } - if (file_p) - { - print "! class=\"cyclo_function_table_header_entry\" | Source File" - } -} - -function wiki_fnc (nfnc, - fname_p, - mcyclo_p, - cyclo_p, - num_statements_p, - num_lines_p, - first_line_p, - file_p) -{ - fname = fnames[nfnc] - - # Function name - trclass = "cyclo_function_entry_simple" - if (mcyclo[nfnc] > cyclo_high_max) - { - trclass="cyclo_function_entry_untestable" - } - else if (mcyclo[nfnc] > cyclo_moderate_max) - { - trclass="cyclo_function_entry_high" - } - else if (mcyclo[nfnc] > cyclo_simple_max) - { - trclass="cyclo_function_entry_moderate" - } - - print "|- class=\"" trclass "\"" - if (fname_p) - { - print "| class=\"cyclo_function_entry_name\" |" fname - } - if (mcyclo_p) - { - # Modified cyclo - print "| class=\"cyclo_function_entry_cyclo\" |" mcyclo[nfnc] - } - if (cyclo_p) - { - # Cyclo - print "| class=\"cyclo_function_entry_cyclo\" |" cyclo[nfnc] - } - if (num_statements_p) - { - # Number of statements - print "| class=\"cyclo_function_entry_number\" |" num_statements[nfnc] - } - if (num_lines_p) - { - # Number of lines - print "| class=\"cyclo_function_entry_number\" |" num_lines[nfnc] - } - if (first_line_p) - { - # First line - print "| class=\"cyclo_function_entry_number\" |" first_line[nfnc] - } - if (file_p) - { - href = "" - if (source_file_link_tmpl != "") - { - # Get href target - href = source_file_link_tmpl - sub(/%FILENAME%/, file[nfnc], href) - } - - # Source file - print "| class=\"cyclo_function_entry_filename\" |" \ - ((href != "") ? "[" href " " file[nfnc] "]" : "[" file[nfnc] "]") - } -} - -# Scan data from a line -{ - function_name = $7 - - nfuncs++; - fnames[nfuncs] = function_name - mcyclo[nfuncs] = $1 - cyclo[nfuncs] = $2 - num_statements[nfuncs] = $3 - first_line[nfuncs] = $4 - num_lines[nfuncs] = $5 - - # Build the filename from the file_spec ($6) - begin_util_path = index($6, cut_dir) - tmpfilename = substr($6, begin_util_path + length(cut_dir)) - sub(/\([0-9]+\):/, "", tmpfilename) - file[nfuncs] = tmpfilename - - if (mcyclo[nfuncs] > cyclo_simple_max) - { - # Extract function contents to a fn_txt file - filepath = $6 - - sub(/\([0-9]+\):/, "", filepath) - num_line = 0 - - while ((getline codeline < filepath) > 0) - { - num_line++; - if ((num_line >= first_line[nfuncs]) && - (num_line < first_line[nfuncs] + num_lines[nfuncs])) - { - print codeline > (function_name nfuncs "_fn.txt") - } - } - close (function_name nfuncs "_fn.txt") - close(filepath) - } - - # Initial values for statistics variables - num_of_functions = 0 - max_mcyclo = 0 - max_function_length = 0 - num_of_simple_functions = 0 - num_of_moderate_functions = 0 - num_of_high_functions = 0 - num_of_untestable_functions = 0 -} - -# Epilogue -END { - # Print header (only for html) - if (output_lang == "html") - { - html_header() - } - - # Print prolog - if ((output_lang == "html") && - (html_prolog != "")) - { - print html_prolog - } - if ((output_lang == "wiki") && - (wiki_prolog != "")) - { - print wiki_prolog - } - - if (output_lang == "html") - { - print "
" package_name " Cyclomatic Complexity Report
" - print "

Report generated at: " chronos_time "

" - } - if (output_lang == "wiki") - { - print "==" package_name " Cyclomatic Complexity Report==" - print "Report generated at: '''" chronos_time "'''" - } - - if (section_global_stats_p) - { - build_stats() - - if (output_lang == "html") - { - html_global_stats() - } - if (output_lang == "wiki") - { - wiki_global_stats() - } - } - if (section_function_cyclo_p) - { - if (output_lang == "html") - { - html_function_cyclo() - } - if (output_lang == "wiki") - { - wiki_function_cyclo() - } - } - - # Print epilog - if ((output_lang == "html") && - (html_epilog != "")) - { - print html_epilog - } - if ((output_lang == "wiki") && - (wiki_epilog != "")) - { - print wiki_epilog - } - - # Print footer (html only) - if (output_lang == "html") - { - html_footer() - } -} - -# End of pmccabe2html diff --git a/build-aux/snippet/arg-nonnull.h b/build-aux/snippet/arg-nonnull.h deleted file mode 100644 index 584649f694..0000000000 --- a/build-aux/snippet/arg-nonnull.h +++ /dev/null @@ -1,26 +0,0 @@ -/* A C macro for declaring that specific arguments must not be NULL. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools - that the values passed as arguments n, ..., m must be non-NULL pointers. - n = 1 stands for the first argument, n = 2 for the second argument etc. */ -#ifndef _GL_ARG_NONNULL -# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 -# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) -# else -# define _GL_ARG_NONNULL(params) -# endif -#endif diff --git a/build-aux/snippet/c++defs.h b/build-aux/snippet/c++defs.h deleted file mode 100644 index 2b819da5e0..0000000000 --- a/build-aux/snippet/c++defs.h +++ /dev/null @@ -1,316 +0,0 @@ -/* C++ compatible function declaration macros. - Copyright (C) 2010-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef _GL_CXXDEFS_H -#define _GL_CXXDEFS_H - -/* Begin/end the GNULIB_NAMESPACE namespace. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { -# define _GL_END_NAMESPACE } -#else -# define _GL_BEGIN_NAMESPACE -# define _GL_END_NAMESPACE -#endif - -/* The three most frequent use cases of these macros are: - - * For providing a substitute for a function that is missing on some - platforms, but is declared and works fine on the platforms on which - it exists: - - #if @GNULIB_FOO@ - # if !@HAVE_FOO@ - _GL_FUNCDECL_SYS (foo, ...); - # endif - _GL_CXXALIAS_SYS (foo, ...); - _GL_CXXALIASWARN (foo); - #elif defined GNULIB_POSIXCHECK - ... - #endif - - * For providing a replacement for a function that exists on all platforms, - but is broken/insufficient and needs to be replaced on some platforms: - - #if @GNULIB_FOO@ - # if @REPLACE_FOO@ - # if !(defined __cplusplus && defined GNULIB_NAMESPACE) - # undef foo - # define foo rpl_foo - # endif - _GL_FUNCDECL_RPL (foo, ...); - _GL_CXXALIAS_RPL (foo, ...); - # else - _GL_CXXALIAS_SYS (foo, ...); - # endif - _GL_CXXALIASWARN (foo); - #elif defined GNULIB_POSIXCHECK - ... - #endif - - * For providing a replacement for a function that exists on some platforms - but is broken/insufficient and needs to be replaced on some of them and - is additionally either missing or undeclared on some other platforms: - - #if @GNULIB_FOO@ - # if @REPLACE_FOO@ - # if !(defined __cplusplus && defined GNULIB_NAMESPACE) - # undef foo - # define foo rpl_foo - # endif - _GL_FUNCDECL_RPL (foo, ...); - _GL_CXXALIAS_RPL (foo, ...); - # else - # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ - _GL_FUNCDECL_SYS (foo, ...); - # endif - _GL_CXXALIAS_SYS (foo, ...); - # endif - _GL_CXXALIASWARN (foo); - #elif defined GNULIB_POSIXCHECK - ... - #endif -*/ - -/* _GL_EXTERN_C declaration; - performs the declaration with C linkage. */ -#if defined __cplusplus -# define _GL_EXTERN_C extern "C" -#else -# define _GL_EXTERN_C extern -#endif - -/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); - declares a replacement function, named rpl_func, with the given prototype, - consisting of return type, parameters, and attributes. - Example: - _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) - _GL_ARG_NONNULL ((1))); - */ -#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ - _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) -#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ - _GL_EXTERN_C rettype rpl_func parameters_and_attributes - -/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); - declares the system function, named func, with the given prototype, - consisting of return type, parameters, and attributes. - Example: - _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) - _GL_ARG_NONNULL ((1))); - */ -#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ - _GL_EXTERN_C rettype func parameters_and_attributes - -/* _GL_CXXALIAS_RPL (func, rettype, parameters); - declares a C++ alias called GNULIB_NAMESPACE::func - that redirects to rpl_func, if GNULIB_NAMESPACE is defined. - Example: - _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); - - Wrapping rpl_func in an object with an inline conversion operator - avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is - actually used in the program. */ -#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ - _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ - namespace GNULIB_NAMESPACE \ - { \ - static const struct _gl_ ## func ## _wrapper \ - { \ - typedef rettype (*type) parameters; \ - \ - inline operator type () const \ - { \ - return ::rpl_func; \ - } \ - } func = {}; \ - } \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#else -# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); - is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); - except that the C function rpl_func may have a slightly different - declaration. A cast is used to silence the "invalid conversion" error - that would otherwise occur. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ - namespace GNULIB_NAMESPACE \ - { \ - static const struct _gl_ ## func ## _wrapper \ - { \ - typedef rettype (*type) parameters; \ - \ - inline operator type () const \ - { \ - return reinterpret_cast(::rpl_func); \ - } \ - } func = {}; \ - } \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#else -# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIAS_SYS (func, rettype, parameters); - declares a C++ alias called GNULIB_NAMESPACE::func - that redirects to the system provided function func, if GNULIB_NAMESPACE - is defined. - Example: - _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); - - Wrapping func in an object with an inline conversion operator - avoids a reference to func unless GNULIB_NAMESPACE::func is - actually used in the program. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ - namespace GNULIB_NAMESPACE \ - { \ - static const struct _gl_ ## func ## _wrapper \ - { \ - typedef rettype (*type) parameters; \ - \ - inline operator type () const \ - { \ - return ::func; \ - } \ - } func = {}; \ - } \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#else -# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); - is like _GL_CXXALIAS_SYS (func, rettype, parameters); - except that the C function func may have a slightly different declaration. - A cast is used to silence the "invalid conversion" error that would - otherwise occur. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ - namespace GNULIB_NAMESPACE \ - { \ - static const struct _gl_ ## func ## _wrapper \ - { \ - typedef rettype (*type) parameters; \ - \ - inline operator type () const \ - { \ - return reinterpret_cast(::func); \ - } \ - } func = {}; \ - } \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#else -# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); - is like _GL_CXXALIAS_SYS (func, rettype, parameters); - except that the C function is picked among a set of overloaded functions, - namely the one with rettype2 and parameters2. Two consecutive casts - are used to silence the "cannot find a match" and "invalid conversion" - errors that would otherwise occur. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE - /* The outer cast must be a reinterpret_cast. - The inner cast: When the function is defined as a set of overloaded - functions, it works as a static_cast<>, choosing the designated variant. - When the function is defined as a single variant, it works as a - reinterpret_cast<>. The parenthesized cast syntax works both ways. */ -# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ - namespace GNULIB_NAMESPACE \ - { \ - static const struct _gl_ ## func ## _wrapper \ - { \ - typedef rettype (*type) parameters; \ - \ - inline operator type () const \ - { \ - return reinterpret_cast((rettype2 (*) parameters2)(::func)); \ - } \ - } func = {}; \ - } \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#else -# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIASWARN (func); - causes a warning to be emitted when ::func is used but not when - GNULIB_NAMESPACE::func is used. func must be defined without overloaded - variants. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIASWARN(func) \ - _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) -# define _GL_CXXALIASWARN_1(func,namespace) \ - _GL_CXXALIASWARN_2 (func, namespace) -/* To work around GCC bug , - we enable the warning only when not optimizing. */ -# if !__OPTIMIZE__ -# define _GL_CXXALIASWARN_2(func,namespace) \ - _GL_WARN_ON_USE (func, \ - "The symbol ::" #func " refers to the system function. " \ - "Use " #namespace "::" #func " instead.") -# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING -# define _GL_CXXALIASWARN_2(func,namespace) \ - extern __typeof__ (func) func -# else -# define _GL_CXXALIASWARN_2(func,namespace) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -# endif -#else -# define _GL_CXXALIASWARN(func) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); - causes a warning to be emitted when the given overloaded variant of ::func - is used but not when GNULIB_NAMESPACE::func is used. */ -#if defined __cplusplus && defined GNULIB_NAMESPACE -# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ - _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ - GNULIB_NAMESPACE) -# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ - _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) -/* To work around GCC bug , - we enable the warning only when not optimizing. */ -# if !__OPTIMIZE__ -# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ - _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ - "The symbol ::" #func " refers to the system function. " \ - "Use " #namespace "::" #func " instead.") -# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING -# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ - extern __typeof__ (func) func -# else -# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -# endif -#else -# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ - _GL_EXTERN_C int _gl_cxxalias_dummy -#endif - -#endif /* _GL_CXXDEFS_H */ diff --git a/build-aux/snippet/unused-parameter.h b/build-aux/snippet/unused-parameter.h deleted file mode 100644 index 843db76af0..0000000000 --- a/build-aux/snippet/unused-parameter.h +++ /dev/null @@ -1,36 +0,0 @@ -/* A C macro for declaring that specific function parameters are not used. - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* _GL_UNUSED_PARAMETER is a marker that can be appended to function parameter - declarations for parameters that are not used. This helps to reduce - warnings, such as from GCC -Wunused-parameter. The syntax is as follows: - type param _GL_UNUSED_PARAMETER - or more generally - param_decl _GL_UNUSED_PARAMETER - For example: - int param _GL_UNUSED_PARAMETER - int *(*param)(void) _GL_UNUSED_PARAMETER - Other possible, but obscure and discouraged syntaxes: - int _GL_UNUSED_PARAMETER *(*param)(void) - _GL_UNUSED_PARAMETER int *(*param)(void) - */ -#ifndef _GL_UNUSED_PARAMETER -# if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_UNUSED_PARAMETER __attribute__ ((__unused__)) -# else -# define _GL_UNUSED_PARAMETER -# endif -#endif diff --git a/build-aux/snippet/warn-on-use.h b/build-aux/snippet/warn-on-use.h deleted file mode 100644 index 2948b47882..0000000000 --- a/build-aux/snippet/warn-on-use.h +++ /dev/null @@ -1,109 +0,0 @@ -/* A C macro for emitting warnings if a function is used. - Copyright (C) 2010-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* _GL_WARN_ON_USE (function, "literal string") issues a declaration - for FUNCTION which will then trigger a compiler warning containing - the text of "literal string" anywhere that function is called, if - supported by the compiler. If the compiler does not support this - feature, the macro expands to an unused extern declaration. - - This macro is useful for marking a function as a potential - portability trap, with the intent that "literal string" include - instructions on the replacement function that should be used - instead. However, one of the reasons that a function is a - portability trap is if it has the wrong signature. Declaring - FUNCTION with a different signature in C is a compilation error, so - this macro must use the same type as any existing declaration so - that programs that avoid the problematic FUNCTION do not fail to - compile merely because they included a header that poisoned the - function. But this implies that _GL_WARN_ON_USE is only safe to - use if FUNCTION is known to already have a declaration. Use of - this macro implies that there must not be any other macro hiding - the declaration of FUNCTION; but undefining FUNCTION first is part - of the poisoning process anyway (although for symbols that are - provided only via a macro, the result is a compilation error rather - than a warning containing "literal string"). Also note that in - C++, it is only safe to use if FUNCTION has no overloads. - - For an example, it is possible to poison 'getline' by: - - adding a call to gl_WARN_ON_USE_PREPARE([[#include ]], - [getline]) in configure.ac, which potentially defines - HAVE_RAW_DECL_GETLINE - - adding this code to a header that wraps the system : - #undef getline - #if HAVE_RAW_DECL_GETLINE - _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" - "not universally present; use the gnulib module getline"); - #endif - - It is not possible to directly poison global variables. But it is - possible to write a wrapper accessor function, and poison that - (less common usage, like &environ, will cause a compilation error - rather than issue the nice warning, but the end result of informing - the developer about their portability problem is still achieved): - #if HAVE_RAW_DECL_ENVIRON - static char ***rpl_environ (void) { return &environ; } - _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); - # undef environ - # define environ (*rpl_environ ()) - #endif - */ -#ifndef _GL_WARN_ON_USE - -# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) -/* A compiler attribute is available in gcc versions 4.3.0 and later. */ -# define _GL_WARN_ON_USE(function, message) \ -extern __typeof__ (function) function __attribute__ ((__warning__ (message))) -# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING -/* Verify the existence of the function. */ -# define _GL_WARN_ON_USE(function, message) \ -extern __typeof__ (function) function -# else /* Unsupported. */ -# define _GL_WARN_ON_USE(function, message) \ -_GL_WARN_EXTERN_C int _gl_warn_on_use -# endif -#endif - -/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") - is like _GL_WARN_ON_USE (function, "string"), except that the function is - declared with the given prototype, consisting of return type, parameters, - and attributes. - This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does - not work in this case. */ -#ifndef _GL_WARN_ON_USE_CXX -# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) -# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ -extern rettype function parameters_and_attributes \ - __attribute__ ((__warning__ (msg))) -# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING -/* Verify the existence of the function. */ -# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ -extern rettype function parameters_and_attributes -# else /* Unsupported. */ -# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ -_GL_WARN_EXTERN_C int _gl_warn_on_use -# endif -#endif - -/* _GL_WARN_EXTERN_C declaration; - performs the declaration with C linkage. */ -#ifndef _GL_WARN_EXTERN_C -# if defined __cplusplus -# define _GL_WARN_EXTERN_C extern "C" -# else -# define _GL_WARN_EXTERN_C extern -# endif -#endif diff --git a/build-aux/update-copyright b/build-aux/update-copyright deleted file mode 100755 index 28ff44180e..0000000000 --- a/build-aux/update-copyright +++ /dev/null @@ -1,266 +0,0 @@ -eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}' - & eval 'exec perl -wS -0777 -pi "$0" $argv:q' - if 0; -# Update an FSF copyright year list to include the current year. - -my $VERSION = '2009-12-28.11:09'; # UTC - -# Copyright (C) 2009-2010 Free Software Foundation, Inc. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Written by Jim Meyering and Joel E. Denny - -# The arguments to this script should be names of files that contain FSF -# copyright statements to be updated. For example, you might wish to -# use the update-copyright target rule in maint.mk from gnulib's -# maintainer-makefile module. -# -# Iff an FSF copyright statement is recognized in a file and the final -# year is not the current year, then the statement is updated for the -# new year and it is reformatted to: -# -# 1. Fit within 72 columns. -# 2. Convert 2-digit years to 4-digit years by prepending "19". -# 3. Expand copyright year intervals. (See "Environment variables" -# below.) -# -# A warning is printed for every file for which no FSF copyright -# statement is recognized. -# -# Each file's FSF copyright statement must be formated correctly in -# order to be recognized. For example, each of these is fine: -# -# Copyright @copyright{} 1990-2005, 2007-2009 Free Software -# Foundation, Inc. -# -# # Copyright (C) 1990-2005, 2007-2009 Free Software -# # Foundation, Inc. -# -# /* -# * Copyright © 90,2005,2007-2009 -# * Free Software Foundation, Inc. -# */ -# -# However, the following format is not recognized because the line -# prefix changes after the first line: -# -# ## Copyright (C) 1990-2005, 2007-2009 Free Software -# # Foundation, Inc. -# -# The following copyright statement is not recognized because the -# copyright holder is not the FSF: -# -# Copyright (C) 1990-2005, 2007-2009 Acme, Inc. -# -# However, any correctly formatted FSF copyright statement following -# either of the previous two copyright statements would be recognized. -# -# The exact conditions that a file's FSF copyright statement must meet -# to be recognized are: -# -# 1. It is the first FSF copyright statement that meets all of the -# following conditions. Subsequent FSF copyright statements are -# ignored. -# 2. Its format is "Copyright (C)", then a list of copyright years, -# and then the name of the copyright holder, which is "Free -# Software Foundation, Inc.". -# 3. The "(C)" takes one of the following forms or is omitted -# entirely: -# -# A. (C) -# B. (c) -# C. @copyright{} -# D. © -# -# 4. The "Copyright" appears at the beginning of a line except that it -# may be prefixed by any sequence (e.g., a comment) of no more than -# 5 characters. -# 5. Iff such a prefix is present, the same prefix appears at the -# beginning of each remaining line within the FSF copyright -# statement. There is one exception in order to support C-style -# comments: if the first line's prefix contains nothing but -# whitespace surrounding a "/*", then the prefix for all subsequent -# lines is the same as the first line's prefix except with each of -# "/" and possibly "*" replaced by a " ". The replacement of "*" -# by " " is consistent throughout all subsequent lines. -# 6. Blank lines, even if preceded by the prefix, do not appear -# within the FSF copyright statement. -# 7. Each copyright year is 2 or 4 digits, and years are separated by -# commas or dashes. Whitespace may appear after commas. -# -# Environment variables: -# -# 1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement -# is reformatted even if it does not need updating for the new -# year. If unset or set to 0, only updated FSF copyright -# statements are reformatted. -# 2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive -# copyright years (such as 90, 1991, 1992-2007, 2008) in a -# reformatted FSF copyright statement is collapsed to a single -# interval (such as 1990-2008). If unset or set to 0, all existing -# copyright year intervals in a reformatted FSF copyright statement -# are expanded instead. -# 3. For testing purposes, you can set the assumed current year in -# UPDATE_COPYRIGHT_YEAR. -# 4. The default maximum line length for a copyright line is 72. -# Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length. - -use strict; -use warnings; - -my $copyright_re = 'Copyright'; -my $circle_c_re = '(?:\([cC]\)|@copyright{}|©)'; -my $holder = 'Free Software Foundation, Inc.'; -my $prefix_max = 5; -my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH}; -!$margin || $margin !~ m/^\d+$/ - and $margin = 72; - -my $tab_width = 8; - -my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR}; -if (!$this_year || $this_year !~ m/^\d{4}$/) - { - my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ()); - $this_year = $year + 1900; - } - -# Unless the file consistently uses "\r\n" as the EOL, use "\n" instead. -my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n"; - -my $leading; -my $prefix; -my $ws_re; -my $stmt_re; -while (/(^|\n)(.{0,$prefix_max})$copyright_re/g) - { - $leading = "$1$2"; - $prefix = $2; - if ($prefix =~ /^(\s*\/)\*(\s*)$/) - { - $prefix =~ s,/, ,; - my $prefix_ws = $prefix; - $prefix_ws =~ s/\*/ /; # Only whitespace. - if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/) - { - $prefix = $prefix_ws; - } - } - $ws_re = '[ \t\r\f]'; # \s without \n - $ws_re = - "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)"; - my $holder_re = $holder; - $holder_re =~ s/\s/$ws_re/g; - my $stmt_remainder_re = - "(?:$ws_re$circle_c_re)?" - . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|-))*" - . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re"; - if (/\G$stmt_remainder_re/) - { - $stmt_re = - quotemeta($leading) . "($copyright_re$stmt_remainder_re)"; - last; - } - } -if (defined $stmt_re) - { - /$stmt_re/ or die; # Should never die. - my $stmt = $1; - my $final_year_orig = $2; - - # Handle two-digit year numbers like "98" and "99". - my $final_year = $final_year_orig; - $final_year <= 99 - and $final_year += 1900; - - if ($final_year != $this_year) - { - # Update the year. - $stmt =~ s/$final_year_orig/$final_year, $this_year/; - } - if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'}) - { - # Normalize all whitespace including newline-prefix sequences. - $stmt =~ s/$ws_re/ /g; - - # Put spaces after commas. - $stmt =~ s/, ?/, /g; - - # Convert 2-digit to 4-digit years. - $stmt =~ s/(\b\d\d\b)/19$1/g; - - # Make the use of intervals consistent. - if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS}) - { - $stmt =~ s/(\d{4})-(\d{4})/join(', ', $1..$2)/eg; - } - else - { - $stmt =~ - s/ - (\d{4}) - (?: - (,\ |-) - ((??{ - if ($2 eq '-') { '\d{4}'; } - elsif (!$3) { $1 + 1; } - else { $3 + 1; } - })) - )+ - /$1-$3/gx; - } - - # Format within margin. - my $stmt_wrapped; - my $text_margin = $margin - length($prefix); - if ($prefix =~ /^(\t+)/) - { - $text_margin -= length($1) * ($tab_width - 1); - } - while (length $stmt) - { - if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//) - || ($stmt =~ s/^([\S]+)(?: |$)//)) - { - my $line = $1; - $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading; - $stmt_wrapped .= $line; - } - else - { - # Should be unreachable, but we don't want an infinite - # loop if it can be reached. - die; - } - } - - # Replace the old copyright statement. - s/$stmt_re/$stmt_wrapped/; - } - } -else - { - print STDERR "$ARGV: warning: FSF copyright statement not found\n"; - } - -# Local variables: -# mode: perl -# indent-tabs-mode: nil -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "my $VERSION = '" -# time-stamp-format: "%:y-%02m-%02d.%02H:%02M" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "'; # UTC" -# End: diff --git a/build-aux/useless-if-before-free b/build-aux/useless-if-before-free deleted file mode 100755 index d7a8c0dc61..0000000000 --- a/build-aux/useless-if-before-free +++ /dev/null @@ -1,210 +0,0 @@ -eval '(exit $?0)' && eval 'exec perl -wST "$0" "$@"' - & eval 'exec perl -wST "$0" $argv:q' - if 0; -# Detect instances of "if (p) free (p);". -# Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces. - -my $VERSION = '2016-08-01 17:47'; # UTC -# The definition above must lie within the first 8 lines in order -# for the Emacs time-stamp write hook (at end) to update it. -# If you change this file with Emacs, please let the write hook -# do its job. Otherwise, update this string manually. - -# Copyright (C) 2008-2016 Free Software Foundation, Inc. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Written by Jim Meyering - -use strict; -use warnings; -use Getopt::Long; - -(my $ME = $0) =~ s|.*/||; - -# use File::Coda; # http://meyering.net/code/Coda/ -END { - defined fileno STDOUT or return; - close STDOUT and return; - warn "$ME: failed to close standard output: $!\n"; - $? ||= 1; -} - -sub usage ($) -{ - my ($exit_code) = @_; - my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); - if ($exit_code != 0) - { - print $STREAM "Try '$ME --help' for more information.\n"; - } - else - { - print $STREAM < sub { usage 0 }, - version => sub { print "$ME version $VERSION\n"; exit }, - list => \$list, - 'name=s@' => \@name, - ) or usage 1; - - # Make sure we have the right number of non-option arguments. - # Always tell the user why we fail. - @ARGV < 1 - and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR; - - my $or = join '|', @name; - my $regexp = qr/(?:$or)/; - - # Set the input record separator. - # Note: this makes it impractical to print line numbers. - $/ = '"'; - - my $found_match = 0; - FILE: - foreach my $file (@ARGV) - { - open FH, '<', $file - or (warn "$ME: can't open '$file' for reading: $!\n"), - $err = EXIT_ERROR, next; - while (defined (my $line = )) - { - # Skip non-matching lines early to save time - $line =~ /\bif\b/ - or next; - while ($line =~ - /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\) - # 1 2 3 - (?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;| - \s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg) - { - my $all = $1; - my ($lhs, $rhs) = ($2, $3); - my ($free_opnd, $braced_free_opnd) = ($4, $5); - my $non_NULL; - if (!defined $rhs) { $non_NULL = $lhs } - elsif (is_NULL $rhs) { $non_NULL = $lhs } - elsif (is_NULL $lhs) { $non_NULL = $rhs } - else { next } - - # Compare the non-NULL part of the "if" expression and the - # free'd expression, without regard to white space. - $non_NULL =~ tr/ \t//d; - my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd; - $e2 =~ tr/ \t//d; - if ($non_NULL eq $e2) - { - $found_match = 1; - $list - and (print "$file\0"), next FILE; - print "$file: $all\n"; - } - } - } - } - continue - { - close FH; - } - - $found_match && $err == EXIT_NO_MATCH - and $err = EXIT_MATCH; - - exit $err; -} - -my $foo = <<'EOF'; -# The above is to *find* them. -# This adjusts them, removing the unnecessary "if (p)" part. - -# FIXME: do something like this as an option (doesn't do braces): -free=xfree -git grep -l -z "$free *(" \ - | xargs -0 useless-if-before-free -l --name="$free" \ - | xargs -0 perl -0x3b -pi -e \ - 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;)/$2/s' - -# Use the following to remove redundant uses of kfree inside braces. -# Note that -0777 puts perl in slurp-whole-file mode; -# but we have plenty of memory, these days... -free=kfree -git grep -l -z "$free *(" \ - | xargs -0 useless-if-before-free -l --name="$free" \ - | xargs -0 perl -0777 -pi -e \ - 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms' - -Be careful that the result of the above transformation is valid. -If the matched string is followed by "else", then obviously, it won't be. - -When modifying files, refuse to process anything other than a regular file. -EOF - -## Local Variables: -## mode: perl -## indent-tabs-mode: nil -## eval: (add-hook 'write-file-hooks 'time-stamp) -## time-stamp-start: "my $VERSION = '" -## time-stamp-format: "%:y-%02m-%02d %02H:%02M" -## time-stamp-time-zone: "UTC0" -## time-stamp-end: "'; # UTC" -## End: diff --git a/build-aux/vc-list-files b/build-aux/vc-list-files deleted file mode 100755 index c5c420a4bb..0000000000 --- a/build-aux/vc-list-files +++ /dev/null @@ -1,113 +0,0 @@ -#!/bin/sh -# List version-controlled file names. - -# Print a version string. -scriptversion=2016-01-11.22; # UTC - -# Copyright (C) 2006-2016 Free Software Foundation, Inc. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -# List the specified version-controlled files. -# With no argument, list them all. With a single DIRECTORY argument, -# list the version-controlled files in that directory. - -# If there's an argument, it must be a single, "."-relative directory name. -# cvsu is part of the cvsutils package: http://www.red-bean.com/cvsutils/ - -postprocess= -case $1 in - --help) cat <. -EOF - exit ;; - - --version) - year=`echo "$scriptversion" | sed 's/[^0-9].*//'` - cat < -This is free software: you are free to change and redistribute it. -There is NO WARRANTY, to the extent permitted by law. -EOF - exit ;; - - -C) - test "$2" = . || postprocess="| sed 's|^|$2/|'" - cd "$2" || exit 1 - shift; shift ;; -esac - -test $# = 0 && set . - -for dir -do - if test -d .git; then - test "x$dir" = x. \ - && dir= sed_esc= \ - || { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; } - # Ignore git symlinks - either they point into the tree, in which case - # we don't need to visit the target twice, or they point somewhere - # else (often into a submodule), in which case the content does not - # belong to this package. - eval exec git ls-tree -r 'HEAD:"$dir"' \ - \| sed -n '"s/^100[^ ]*./$sed_esc/p"' $postprocess - elif test -d .hg; then - eval exec hg locate '"$dir/*"' $postprocess - elif test -d .bzr; then - test "$postprocess" = '' && postprocess="| sed 's|^\./||'" - eval exec bzr ls -R --versioned '"$dir"' $postprocess - elif test -d CVS; then - test "$postprocess" = '' && postprocess="| sed 's|^\./||'" - if test -x build-aux/cvsu; then - eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess - elif (cvsu --help) >/dev/null 2>&1; then - eval cvsu --find --types=AFGM '"$dir"' $postprocess - else - eval awk -F/ \''{ \ - if (!$1 && $3 !~ /^-/) { \ - f=FILENAME; \ - if (f ~ /CVS\/Entries$/) \ - f = substr(f, 1, length(f)-11); \ - print f $2; \ - }}'\'' \ - `find "$dir" -name Entries -print` /dev/null' $postprocess - fi - elif test -d .svn; then - eval exec svn list -R '"$dir"' $postprocess - else - echo "$0: Failed to determine type of version control used in `pwd`" 1>&2 - exit 1 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/cfg.mk b/cfg.mk index 9e2fb99784..3205378767 100644 --- a/cfg.mk +++ b/cfg.mk @@ -23,7 +23,7 @@ ADDFLAGS ?= CFGFLAGS ?= --enable-gtk-doc --enable-gtk-doc-pdf --enable-gtk-doc-html $(ADDFLAGS) $(WFLAGS) PACKAGE ?= gnutls -.PHONY: config +.PHONY: config glimport INDENT_SOURCES = `find . -name \*.[ch] -o -name gnutls.h.in | grep -v -e ^./build-aux/ -e ^./lib/minitasn1/ -e ^./lib/build-aux/ -e ^./gl/ -e ^./src/libopts/ -e -args.[ch] -e asn1_tab.c -e ^./tests/suite/` @@ -31,54 +31,36 @@ ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile) .DEFAULT_GOAL := bootstrap endif -PODIR := po -PO_DOMAIN := libgnutls - local-checks-to-skip = sc_GPL_version sc_bindtextdomain \ sc_immutable_NEWS sc_program_name sc_prohibit_atoi_atof \ + sc_prohibit_always_true_header_tests \ sc_prohibit_empty_lines_at_EOF sc_prohibit_hash_without_use \ + sc_prohibit_gnu_make_extensions \ sc_prohibit_have_config_h sc_prohibit_magic_number_exit \ sc_prohibit_strcmp sc_require_config_h \ sc_require_config_h_first sc_texinfo_acronym sc_trailing_blank \ sc_unmarked_diagnostics sc_useless_cpp_parens \ sc_two_space_separator_in_usage -VC_LIST_ALWAYS_EXCLUDE_REGEX = ^maint.mk|gtk-doc.make|m4/pkg|doc/fdl-1.3.texi|po/.*.po.in|src/crywrap/|(devel/perlasm/|lib/accelerated/x86/|build-aux/|gl/|src/libopts/|tests/suite/ecore/|doc/protocol/).*$$ -update-copyright-env = UPDATE_COPYRIGHT_USE_INTERVALS=1 +VC_LIST_ALWAYS_EXCLUDE_REGEX = ^maint.mk|gtk-doc.make|m4/pkg|doc/fdl-1.3.texi|src/.*\.bak|src/crywrap/|(devel/perlasm/|lib/accelerated/x86/|build-aux/|gl/|src/libopts/|tests/suite/ecore/|doc/protocol/).*$$ # Explicit syntax-check exceptions. -exclude_file_name_regexp--sc_error_message_period = ^src/crywrap/crywrap.c$$ +exclude_file_name_regexp--sc_copyright_check = ^./gnulib/.*$$ exclude_file_name_regexp--sc_error_message_uppercase = ^doc/examples/ex-cxx.cpp|guile/src/core.c|src/certtool.c|src/ocsptool.c|src/crywrap/crywrap.c|tests/pkcs12_encode.c$$ exclude_file_name_regexp--sc_file_system = ^doc/doxygen/Doxyfile exclude_file_name_regexp--sc_prohibit_cvs_keyword = ^lib/nettle/.*$$ exclude_file_name_regexp--sc_prohibit_undesirable_word_seq = ^tests/nist-pkits/gnutls-nist-tests.html$$ -exclude_file_name_regexp--sc_space_tab = ^doc/.*.(pdf|png)|\.crl|\.pdf|\.zip|tests/nist-pkits/|tests/data/|devel/|tests/suite/x509paths/.*$$ +exclude_file_name_regexp--sc_space_tab = ^doc/.*.(pdf|png)|\.crl|\.pdf|\.zip|tests/nist-pkits/|tests/data/|tests/system-override-curves.sh|devel/|tests/suite/x509paths/.*|fuzz/.*\.repro|fuzz/.*\.in/.*$$ _makefile_at_at_check_exceptions = ' && !/CODE_COVERAGE_RULES/ && !/VERSION/' exclude_file_name_regexp--sc_m4_quote_check='lib/unistring/m4/absolute-header.m4' exclude_file_name_regexp--sc_makefile_at_at_check='lib/unistring/Makefile.am' exclude_file_name_regexp--sc_prohibit_stddef_without_use='u*-normalize.c' exclude_file_name_regexp--sc_prohibit_strncpy='unistr.in.h' +exclude_file_name_regexp--sc_prohibit_strncpy='lib/inih/ini.c' gl_public_submodule_commit = autoreconf: - for f in $(PODIR)/*.po.in; do \ - cp $$f `echo $$f | sed 's/.in//'`; \ - done - autopoint - for i in po.m4 nls.m4 gettext.m4 codeset.m4 glibc21.m4 glibc2.m4 iconv.m4 intdiv0.m4 intldir.m4 intl.m4 intlmacosx.m4 intmax.m4 inttypes_h.m4 inttypes-pri.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 lock.m4 longlong.m4 printf-posix.m4 progtest.m4 size_max.m4 stdint_h.m4 uintmax_t.m4 wchar_t.m4 wint_t.m4 visibility.m4 xsize.m4;do \ - if test -f /usr/share/aclocal/$$i;then \ - rm -f m4/$$i; \ - fi; \ - done - touch ChangeLog - test -f ./configure || AUTOPOINT=true autoreconf --install - -update-po: refresh-po - for f in `ls $(PODIR)/*.po | grep -v quot.po`; do \ - cp $$f $$f.in; \ - done - git add $(PODIR)/*.po.in - git commit -m "Sync with TP." $(PODIR)/LINGUAS $(PODIR)/*.po.in + ./bootstrap config: ./configure $(CFGFLAGS) @@ -90,27 +72,24 @@ config: bootstrap: autoreconf .submodule.stamp -UNISTRING_MODULES = "unistr/u8-check unistr/u8-to-u16 unistr/u8-to-u32 unistr/u32-to-u8 \ - unistr/u16-to-u8 uninorm/nfc uninorm/nfkc uninorm/u8-normalize uninorm/u16-normalize \ - uninorm/u32-normalize unictype/category-all unictype/property-not-a-character \ - unictype/property-default-ignorable-code-point unictype/property-join-control" +glimport: + pushd gnulib && git checkout master && git pull && popd + echo "If everything looks well, commit the gnulib update with:" + echo " git commit -m "Update gnulib submodule" gnulib" -unistringimport: - ../gnulib/gnulib-tool --without-tests --libtool --macro-prefix=unistring --lgpl=3orGPLv2 --dir=. --local-dir=lib/unistring/override --lib=libunistring --without-tests --source-base=lib/unistring --m4-base=lib/unistring/m4 --doc-base=doc --aux-dir=build-aux --import $(UNISTRING_MODULES) +# Update Copyright year in tools and docs -# The only non-lgpl modules used are: gettime progname timespec. Those -# are not used (and must not be used) in the library) -glimport: unistringimport - ../gnulib/gnulib-tool --dir=. --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=gl/tests --aux-dir=build-aux --lgpl=2 --add-import - ../gnulib/gnulib-tool --dir=. --local-dir=src/gl/override --lib=libgnu_gpl --source-base=src/gl --m4-base=src/gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --add-import +update-copyright-year: + $(AM_V_at)$(SED) -i "s/\"2000-[0-9]\{4,\}\"/\"2000-`date +%Y`\"/g" src/args-std.def.in + $(AM_V_at)$(SED) -i "s/ 2001-[0-9]\{4,\} / 2001-`date +%Y` /g" doc/gnutls.texi # Code Coverage clang: - make clean + $(MAKE) clean scan-build ./configure rm -rf scan.tmp - scan-build -o scan.tmp make + scan-build -o scan.tmp $(MAKE) clang-copy: rm -fv `find $(htmldir)/clang -type f | grep -v CVS` @@ -119,8 +98,10 @@ clang-copy: # Release +# ChangeLog must be PHONY, else it isn't generated on 'make distcheck' +.PHONY: ChangeLog ChangeLog: - git log --no-merges --no-decorate --pretty --since="2014 November 07"|grep -v ^'commit' > ChangeLog + (cd "$(srcdir)" ; if test -d .git ; then git log --no-merges --no-decorate --pretty --since="2014 November 07"|grep -v ^'commit' ; else echo "Empty" ; fi) > ChangeLog tag = $(PACKAGE)_`echo $(VERSION) | sed 's/\./_/g'` @@ -138,14 +119,14 @@ web: echo generating documentation for $(PACKAGE) mkdir -p $(htmldir)/manual mkdir -p $(htmldir)/reference - make -C doc gnutls.html + $(MAKE) -C doc gnutls.html cd doc && cp gnutls.html *.png ../$(htmldir)/manual/ cd doc && makeinfo --html --split=node -o ../$(htmldir)/manual/html_node/ --css-include=./texinfo.css gnutls.texi cd doc && cp *.png ../$(htmldir)/manual/html_node/ sed 's/\@VERSION\@/$(VERSION)/g' -i $(htmldir)/manual/html_node/*.html $(htmldir)/manual/gnutls.html - -cd doc && make gnutls.epub && cp gnutls.epub ../$(htmldir)/manual/ - cd doc/latex && make gnutls.pdf && cp gnutls.pdf ../../$(htmldir)/manual/ - make -C doc gnutls-guile.html gnutls-guile.pdf + -cd doc && $(MAKE) gnutls.epub && cp gnutls.epub ../$(htmldir)/manual/ + cd doc/latex && $(MAKE) gnutls.pdf && cp gnutls.pdf ../../$(htmldir)/manual/ + $(MAKE) -C doc gnutls-guile.html gnutls-guile.pdf cd doc && makeinfo --html --split=node -o ../$(htmldir)/manual/gnutls-guile/ --css-include=./texinfo.css gnutls-guile.texi cd doc && cp gnutls-guile.pdf gnutls-guile.html ../$(htmldir)/manual/ -cp -v doc/reference/html/*.html doc/reference/html/*.png doc/reference/html/*.devhelp* doc/reference/html/*.css $(htmldir)/reference/ @@ -156,20 +137,25 @@ ASM_SOURCES_XXX := \ lib/accelerated/aarch64/XXX/sha1-armv8.s \ lib/accelerated/aarch64/XXX/sha256-armv8.s \ lib/accelerated/aarch64/XXX/sha512-armv8.s \ - lib/accelerated/x86/XXX/cpuid-x86_64.s \ - lib/accelerated/x86/XXX/cpuid-x86.s \ lib/accelerated/x86/XXX/ghash-x86_64.s \ lib/accelerated/x86/XXX/aesni-x86_64.s \ lib/accelerated/x86/XXX/aesni-x86.s \ lib/accelerated/x86/XXX/sha1-ssse3-x86.s \ lib/accelerated/x86/XXX/sha1-ssse3-x86_64.s \ lib/accelerated/x86/XXX/sha256-ssse3-x86.s \ + lib/accelerated/x86/XXX/sha256-ssse3-x86_64.s \ lib/accelerated/x86/XXX/sha512-ssse3-x86.s \ lib/accelerated/x86/XXX/sha512-ssse3-x86_64.s \ lib/accelerated/x86/XXX/aesni-gcm-x86_64.s \ lib/accelerated/x86/XXX/aes-ssse3-x86.s \ lib/accelerated/x86/XXX/aes-ssse3-x86_64.s +# CRYPTOGAMS' perl-scripts can produce different output if -fPIC +# is passed as option. List the files that seem to need it: +PL_NEEDS_FPIC := aesni-x86.pl aes-ssse3-x86.pl e_padlock-x86.pl \ + ghash-x86.pl sha1-ssse3-x86.pl sha256-ssse3-x86.pl \ + sha512-ssse3-x86.pl + ASM_SOURCES_ELF := $(subst XXX,elf,$(ASM_SOURCES_XXX)) ASM_SOURCES_COFF := $(subst XXX,coff,$(ASM_SOURCES_XXX)) ASM_SOURCES_MACOSX := $(subst XXX,macosx,$(ASM_SOURCES_XXX)) @@ -179,12 +165,12 @@ asm-sources: $(ASM_SOURCES_ELF) $(ASM_SOURCES_COFF) $(ASM_SOURCES_MACOSX) lib/ac asm-sources-clean: rm -f $(ASM_SOURCES_ELF) $(ASM_SOURCES_COFF) $(ASM_SOURCES_MACOSX) lib/accelerated/x86/files.mk -X86_FILES=XXX/aesni-x86.s XXX/cpuid-x86.s XXX/sha1-ssse3-x86.s \ +X86_FILES=XXX/aesni-x86.s XXX/sha1-ssse3-x86.s \ XXX/sha256-ssse3-x86.s XXX/sha512-ssse3-x86.s XXX/aes-ssse3-x86.s -X86_64_FILES=XXX/aesni-x86_64.s XXX/cpuid-x86_64.s XXX/ghash-x86_64.s \ +X86_64_FILES=XXX/aesni-x86_64.s XXX/ghash-x86_64.s \ XXX/sha1-ssse3-x86_64.s XXX/sha512-ssse3-x86_64.s XXX/aes-ssse3-x86_64.s \ - XXX/aesni-gcm-x86_64.s + XXX/aesni-gcm-x86_64.s XXX/sha256-ssse3-x86_64.s X86_PADLOCK_FILES=XXX/e_padlock-x86.s X86_64_PADLOCK_FILES=XXX/e_padlock-x86_64.s @@ -220,33 +206,43 @@ lib/accelerated/x86/files.mk: $(ASM_SOURCES_ELF) # Appro's code lib/accelerated/x86/elf/%.s: devel/perlasm/%.pl .submodule.stamp - cat $<.license > $@ - CC=gcc perl $< elf >> $@ + CC=gcc perl $< elf \ + $(if $(findstring $( $@ && rm -f $@.tmp echo "" >> $@ echo ".section .note.GNU-stack,\"\",%progbits" >> $@ sed -i 's/OPENSSL_ia32cap_P/_gnutls_x86_cpuid_s/g' $@ lib/accelerated/x86/coff/%-x86.s: devel/perlasm/%-x86.pl .submodule.stamp - cat $<.license > $@ - CC=gcc perl $< coff >> $@ + CC=gcc perl $< coff \ + $(if $(findstring $( $@ && rm -f $@.tmp echo "" >> $@ sed -i 's/OPENSSL_ia32cap_P/_gnutls_x86_cpuid_s/g' $@ lib/accelerated/x86/coff/%-x86_64.s: devel/perlasm/%-x86_64.pl .submodule.stamp - cat $<.license > $@ - CC=gcc perl $< mingw64 >> $@ + CC=gcc perl $< mingw64 \ + $(if $(findstring $( $@ && rm -f $@.tmp echo "" >> $@ sed -i 's/OPENSSL_ia32cap_P/_gnutls_x86_cpuid_s/g' $@ lib/accelerated/x86/macosx/%.s: devel/perlasm/%.pl .submodule.stamp - cat $<.license > $@ - CC=gcc perl $< macosx >> $@ + CC=gcc perl $< macosx \ + $(if $(findstring $( $@ && rm -f $@.tmp echo "" >> $@ sed -i 's/OPENSSL_ia32cap_P/_gnutls_x86_cpuid_s/g' $@ lib/accelerated/aarch64/elf/%.s: devel/perlasm/%.pl .submodule.stamp rm -f $@tmp - CC=aarch64-linux-gnu-gcc perl $< linux64 $@.tmp + CC=aarch64-linux-gnu-gcc perl $< linux64 \ + $(if $(findstring $( $@.tmp.S echo "" >> $@.tmp.S sed -i 's/OPENSSL_armcap_P/_gnutls_arm_cpuid_s/g' $@.tmp.S @@ -256,4 +252,18 @@ lib/accelerated/aarch64/elf/%.s: devel/perlasm/%.pl .submodule.stamp echo ".section .note.GNU-stack,\"\",%progbits" >> $@ rm -f $@.tmp.S $@.tmp.s $@.tmp +lib/accelerated/aarch64/macosx/%.s: devel/perlasm/%.pl .submodule.stamp + rm -f $@tmp + CC=aarch64-linux-gnu-gcc perl $< ios64 \ + $(if $(findstring $( $@.tmp.S + echo "" >> $@.tmp.S + sed -i 's/OPENSSL_armcap_P/_gnutls_arm_cpuid_s/g' $@.tmp.S + sed -i 's/arm_arch.h/aarch64-common.h/g' $@.tmp.S + aarch64-linux-gnu-gcc -D__ARM_MAX_ARCH__=8 -Ilib/accelerated/aarch64 -Wa,--noexecstack -E $@.tmp.S -o $@.tmp.s + cat $<.license $@.tmp.s > $@ + rm -f $@.tmp.S $@.tmp.s $@.tmp +lib/accelerated/aarch64/coff/%.s: devel/perlasm/%.pl .submodule.stamp + @true diff --git a/configure.ac b/configure.ac index a02579afff..9b346e0f17 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -# Copyright (C) 2000-2012, 2016 Free Software Foundation, Inc. +# Copyright (C) 2000-2012, 2016, 2019 Free Software Foundation, Inc. # # Author: Nikos Mavrogiannopoulos, Simon Josefsson # @@ -20,10 +20,12 @@ dnl Process this file with autoconf to produce a configure script. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 # USA -AC_PREREQ(2.61) -AC_INIT([GnuTLS], [3.6.0], [bugs@gnutls.org]) +AC_PREREQ(2.63) + +dnl when updating version also update LT_REVISION in m4/hooks.m4 +AC_INIT([GnuTLS], [3.6.13], [bugs@gnutls.org]) AC_CONFIG_AUX_DIR([build-aux]) -AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_MACRO_DIRS([m4 src/gl/m4 src/libopts/m4 lib/unistring/m4]) AC_CANONICAL_HOST AM_INIT_AUTOMAKE([1.12.2 foreign subdir-objects no-dist-gzip dist-xz -Wall -Wno-override]) @@ -58,8 +60,14 @@ if test "$ac_cv_prog_cc_c99" = "no"; then fi AX_CODE_COVERAGE + AM_MAINTAINER_MODE([enable]) +AC_ARG_ENABLE(bash-tests, + AS_HELP_STRING([--disable-bash-tests], [skip some tests that badly need bash]), + enable_bash_tests=$enableval, enable_bash_tests=yes) +AM_CONDITIONAL(DISABLE_BASH_TESTS, test "$enable_bash_tests" != "yes") + AC_ARG_ENABLE(doc, AS_HELP_STRING([--disable-doc], [don't generate any documentation]), enable_doc=$enableval, enable_doc=yes) @@ -80,18 +88,6 @@ AC_ARG_ENABLE(tools, enable_tools=$enableval, enable_tools=yes) AM_CONDITIONAL(ENABLE_TOOLS, test "$enable_tools" != "no") -if test "$enable_tools" != "no" || test "$enable_doc" != "no"; then - AC_CHECK_PROG([AUTOGEN], [autogen], [autogen], [:]) - - if test x"$AUTOGEN" = "x:"; then - AC_MSG_WARN([[ -*** -*** autogen not found. Will not link against libopts. -*** ]]) - included_libopts=yes - fi -fi - # For includes/gnutls/gnutls.h.in. AC_SUBST(MAJOR_VERSION, `echo $PACKAGE_VERSION | sed 's/\(.*\)\..*\..*/\1/g'`) AC_SUBST(MINOR_VERSION, `echo $PACKAGE_VERSION | sed 's/.*\.\(.*\)\..*/\1/g'`) @@ -122,11 +118,23 @@ case "$host" in ;; *mingw32* | *mingw64*) have_win=yes + AC_DEFINE([_UNICODE], [1], [Defined to 1 for Unicode (wide chars) APIs]) + LIB_CRYPT32="-lcrypt32" + AC_SUBST([LIB_CRYPT32]) ;; *darwin*) have_macosx=yes + save_LDFLAGS="$LDFLAGS" + dnl Try to use -no_weak_imports if available. This makes sure we + dnl error out when linking to a function that doesn't exist in the + dnl intended minimum runtime version. + LDFLAGS="$LDFLAGS -Wl,-no_weak_imports" + AC_MSG_CHECKING([whether the linker supports -Wl,-no_weak_imports]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [fd_set rfds; FD_ZERO(&rfds); FD_SET(0, &rfds);])], + [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no); LDFLAGS="$save_LDFLAGS"]) ;; *solaris*) + have_elf=yes use_accel=no AC_MSG_WARN([[ *** @@ -156,6 +164,12 @@ if test "$use_accel" != "no"; then case $host_cpu in armv8 | aarch64) hw_accel="aarch64" + case $host_os in + *_ilp32) + dnl ILP32 not supported in assembler yet + hw_accel="none" + ;; + esac ;; i?86 | x86_64 | amd64) AC_CHECK_HEADERS(cpuid.h) @@ -170,10 +184,27 @@ case $host_cpu in ;; esac +# check for gcc's __get_cpuid_count functionality +AC_MSG_CHECKING([for __get_cpuid_count]) +AC_LINK_IFELSE( + [AC_LANG_SOURCE([ + #include + int main(void) { unsigned t1; return __get_cpuid_count(7, 0, &t1, &t1, &t1, &t1); } + ])], + [AC_DEFINE([HAVE_GET_CPUID_COUNT], [1], [use __get_cpuid_count]) AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] +) + fi +AC_ARG_ENABLE(tls13-interop, + AS_HELP_STRING([--disable-tls13-interop], [disable TLS1.3 interoperability testing with openssl]), + enable_tls13_interop=$enableval, enable_tls13_interop=yes) + +AM_CONDITIONAL(ENABLE_TLS13_INTEROP, test "$enable_tls13_interop" != "no") + dnl Check for iovec type -AC_CHECK_MEMBERS([struct iovec.iov_basea], +AC_CHECK_MEMBERS([struct iovec.iov_base], [ AC_SUBST([DEFINE_IOVEC_T], ["#include typedef struct iovec giovec_t;"]) @@ -192,9 +223,20 @@ dnl Need netinet/tcp.h for TCP_FASTOPEN AC_CHECK_HEADERS([netinet/tcp.h]) AC_CHECK_HEADERS([stdatomic.h]) +dnl This ensures that we link with the right library for atomic operations on Linux SPARC +save_LIBS=$LIBS +AC_SEARCH_LIBS([__atomic_load_4], [atomic], [], [AC_MSG_NOTICE([Could not detect libatomic])]) +LIBS=$save_LIBS + +AS_IF([test "$ac_cv_search___atomic_load_4" = "none required" || test "$ac_cv_search___atomic_load_4" = "no"], + [AC_SUBST([LIBATOMIC_LIBS], [])], + [AC_SUBST([LIBATOMIC_LIBS], [$ac_cv_search___atomic_load_4])]) + dnl We use its presence to detect C11 threads AC_CHECK_HEADERS([threads.h]) +AC_CHECK_HEADERS([valgrind/memcheck.h]) + AC_ARG_ENABLE(padlock, AS_HELP_STRING([--disable-padlock], [unconditionally disable padlock acceleration]), use_padlock=$enableval) @@ -215,17 +257,37 @@ dnl check for getrandom() rnd_variant="auto-detect" AC_MSG_CHECKING([for getrandom]) AC_LINK_IFELSE([AC_LANG_PROGRAM([ - #include ],[ + #include ],[ getrandom(0, 0, 0); ])], [AC_MSG_RESULT(yes) - AC_DEFINE([HAVE_LINUX_GETRANDOM], 1, [Enable the Linux getrandom function]) + AC_DEFINE([HAVE_GETRANDOM], 1, [Enable the Linux getrandom function]) rnd_variant=getrandom], [AC_MSG_RESULT(no)]) +AC_MSG_CHECKING([for KERN_ARND]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([ + #include + #ifdef __linux__ + #error 1 + #endif + static int name[] = {CTL_KERN, KERN_ARND}; + ],[ + sysctl(0, 0, 0, 0, 0, 0); + ])], + [AC_MSG_RESULT(yes) + AC_DEFINE([HAVE_KERN_ARND], 1, [Enable the BSD sysctl(KERN_ARND) function]) + rnd_variant=kern_arnd], + [AC_MSG_RESULT(no)]) + +AM_CONDITIONAL(HAVE_KERN_ARND, test "$rnd_variant" = "kern_arnd") + AC_MSG_CHECKING([for getentropy]) AC_LINK_IFELSE([AC_LANG_PROGRAM([ #include + #ifdef __APPLE__ + #include + #endif #ifdef __linux__ #error 1 #endif @@ -248,7 +310,26 @@ AC_ARG_ENABLE(tests, enable_tests=$enableval, enable_tests=$enable_tools) AM_CONDITIONAL(ENABLE_TESTS, test "$enable_tests" != "no") -GTK_DOC_CHECK(1.1) +AC_ARG_ENABLE(fuzzer-target, + AS_HELP_STRING([--enable-fuzzer-target], [make a library intended for testing - not production]), + enable_fuzzer_target=$enableval, enable_fuzzer_target=no) +if test "$enable_fuzzer_target" != "no";then + AC_DEFINE([FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION], 1, [Enable fuzzer target -not for production]) +fi + +dnl +dnl check for gtk-doc +dnl +m4_ifdef([GTK_DOC_CHECK], [ +GTK_DOC_CHECK([1.14],[--flavour no-tmpl]) +],[ +AM_CONDITIONAL([ENABLE_GTK_DOC], false) +]) +# needed for some older versions of gtk-doc +m4_ifdef([GTK_DOC_USE_LIBTOOL], [], [ +AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], false) +]) + AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.19]) @@ -256,33 +337,28 @@ AC_C_BIGENDIAN dnl No fork on MinGW, disable some self-tests until we fix them. dnl Check clock_gettime and pthread_mutex_lock in libc (avoid linking to other libs) -AC_CHECK_FUNCS([fork setitimer inet_ntop inet_pton getrusage getpwuid_r nanosleep daemon getpid clock_gettime localtime fmemopen vasprintf mmap],,) -if test "$ac_cv_func_vasprintf" != "yes";then - AC_MSG_CHECKING([for va_copy]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([ - #include - va_list a;],[ - va_list b; - va_copy(b,a); - va_end(b);])], - [AC_DEFINE([HAVE_VA_COPY], 1, [Have va_copy()]) - AC_MSG_RESULT(va_copy)], - [AC_LINK_IFELSE([AC_LANG_PROGRAM([ - #include - va_list a;],[ - va_list b; - __va_copy(b,a); - va_end(b);])], - [AC_DEFINE([HAVE___VA_COPY], 1, [Have __va_copy()]) - AC_MSG_RESULT(__va_copy)], - [AC_MSG_RESULT(no) - AC_MSG_ERROR([Your system lacks vasprintf() and va_copy()])]) - ]) -fi +AC_CHECK_FUNCS([fork setitimer getrusage getpwuid_r nanosleep daemon getpid localtime mmap explicit_bzero],,) +dnl Manually check some functions by including headers first. On macOS, you +dnl normally only have the latest SDK available, containing all existing +dnl functions, but having them restricted according to target version in +dnl headers. If we bypass the headers and just try linking (as AC_CHECK_FUNCS +dnl does), we will accidentally detect functions which we shouldn't use. Set +dnl ac_cv_func_* as well, to avoid later AC_CHECK_FUNCS from other included +dnl scripts from overriding it. +AC_MSG_CHECKING([for clock_gettime]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [clock_gettime(0, 0);])], + [AC_MSG_RESULT(yes); ac_cv_func_clock_gettime=yes + AC_DEFINE([HAVE_CLOCK_GETTIME], 1, [Define to 1 if you have the `clock_gettime' function.])], + [AC_MSG_RESULT(no); ac_cv_func_clock_gettime=no]) +AC_MSG_CHECKING([for fmemopen]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [fmemopen(0, 0, 0);])], + [AC_MSG_RESULT(yes); ac_cv_func_fmemopen=yes + AC_DEFINE([HAVE_FMEMOPEN], 1, [Define to 1 if you have the `fmemopen' function.])], + [AC_MSG_RESULT(no); ac_cv_func_fmemopen=no]) AM_CONDITIONAL(HAVE_FORK, test "$ac_cv_func_fork" != "no") -AC_CHECK_FUNCS([__register_atfork secure_getenv],,) +AC_CHECK_FUNCS([__register_atfork secure_getenv getauxval],,) AC_ARG_ENABLE(seccomp-tests, AS_HELP_STRING([--enable-seccomp-tests], [unconditionally enable tests with seccomp]), @@ -316,10 +392,6 @@ if test "$ac_cv_func_nanosleep" != "yes";then gnutls_needs_librt=yes fi -if test "$ac_cv_func_inet_pton" != "yes";then - AC_LIB_HAVE_LINKFLAGS(nsl,, [#include ], [inet_pton(0,0,0);]) -fi - if test "$ac_cv_func_clock_gettime" != "yes";then AC_LIB_HAVE_LINKFLAGS(rt,, [#include ], [clock_gettime (0, 0);]) gnutls_needs_librt=yes @@ -333,17 +405,19 @@ AC_ARG_WITH(included-unistring, AS_HELP_STRING([--with-included-unistring], if test "$included_unistring" = yes;then ac_have_unistring=no else - AC_LIB_HAVE_LINKFLAGS(unistring,, [#include ], [u8_normalize(0, 0, 0, 0, 0);]) - - if test "$HAVE_LIBUNISTRING" = "yes";then + save_LIBS=$LIBS + AC_SEARCH_LIBS(u8_normalize, unistring, [ included_unistring=no ac_have_unistring=yes - else - AC_MSG_ERROR([[ + AC_SUBST([LIBUNISTRING], [$ac_cv_search_u8_normalize]) + ], [ + ac_cv_libunistring=no + AC_MSG_ERROR([[ *** *** Libunistring was not found. To use the included one, use --with-included-unistring - ]]) - fi + ]]) + ]) + LIBS=$save_LIBS fi AM_CONDITIONAL(HAVE_LIBUNISTRING, test "$ac_have_unistring" = "yes") @@ -351,7 +425,7 @@ AM_CONDITIONAL(HAVE_LIBUNISTRING, test "$ac_have_unistring" = "yes") dnl Note that g*l_INIT are run after we check for library capabilities, dnl to prevent issues from caching lib dependencies. See discussion dnl in https://bugs.gentoo.org/show_bug.cgi?id=494940 and -dnl http://gnu-autoconf.7623.n7.nabble.com/Correct-way-to-check-for-clock-gettime-td12276.html +dnl https://gnu-autoconf.7623.n7.nabble.com/Correct-way-to-check-for-clock-gettime-td12276.html gl_INIT ggl_INIT unistring_INIT @@ -363,13 +437,33 @@ AC_ARG_ENABLE(full-test-suite, # test if we are in git master or in release build. In release # builds we do not use valgrind. -SUITE_FILE="${srcdir}/tests/suite/mini-eagain2.c" +SUITE_FILE="${srcdir}/tests/suite/prime-check.c" if test "$full_test_suite" = yes && test ! -f "$SUITE_FILE";then full_test_suite=no fi AM_CONDITIONAL(WANT_TEST_SUITE, test "$full_test_suite" = "yes") +AC_ARG_ENABLE(oldgnutls-interop, + AS_HELP_STRING([--enable-oldgnutls-interop], [enable interoperability testing with old gnutls version]), + enable_oldgnutls_interop=$enableval, enable_oldgnutls_interop=no) + +if test "$enable_oldgnutls_interop" != "no" && test "$full_test_suite" != yes;then + AC_MSG_ERROR([cannot --enable-oldgnutls-interop without --enable-full-test-suite]) +fi + +AM_CONDITIONAL(ENABLE_OLDGNUTLS_INTEROP, test "$enable_oldgnutls_interop" != "no") + +# check for libev - used in full test suite +AC_LIB_HAVE_LINKFLAGS(ev,, [#include ], [ev_run(0,0);]) +if test "$ac_cv_libev" = yes; then + AC_SUBST([LIBEV_LIBS], [$LIBEV]) +elif test "$full_test_suite" = yes;then + AC_MSG_ERROR([[*** +*** libev4 was not found. +***]]) +fi + dnl GCC warnings to enable AC_ARG_ENABLE([gcc-warnings], @@ -415,6 +509,9 @@ if test "$gl_gcc_warnings" = yes; then done gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now + gl_WARN_ADD([-Wno-format-truncation]) # Many warnings with no point + gl_WARN_ADD([-Wimplicit-fallthrough=2]) + gl_WARN_ADD([-Wabi=11]) gl_WARN_ADD([-fdiagnostics-show-option]) fi @@ -454,16 +551,9 @@ if [ test "$enable_fips" = "yes" ];then fi fi -PKG_CHECK_MODULES(CMOCKA, cmocka, [with_cmocka=yes], [with_cmocka=no]) +PKG_CHECK_MODULES(CMOCKA, [cmocka >= 1.0.1], [with_cmocka=yes], [with_cmocka=no]) AM_CONDITIONAL(HAVE_CMOCKA, test "$with_cmocka" != "no") -with_old_nettle=no -if ! $PKG_CONFIG --atleast-version=3.3 nettle; then - with_old_nettle=yes -fi -AM_CONDITIONAL(WITH_OLD_NETTLE, test "$with_old_nettle" != "no") - - AC_ARG_WITH(idn, AS_HELP_STRING([--without-idn], [disable support for IDNA]), try_libidn2="$withval", @@ -473,24 +563,18 @@ idna_support=no with_libidn2=no if test "$try_libidn2" = yes;then - AC_SEARCH_LIBS(idn2_lookup_u8, idn2, [ - with_libidn2=yes; + PKG_CHECK_MODULES(LIBIDN2, [libidn2 >= 2.0.0], [with_libidn2=yes], [with_libidn2=no]) + if test "${with_libidn2}" = "yes";then idna_support="IDNA 2008 (libidn2)" AC_DEFINE([HAVE_LIBIDN2], 1, [Define if IDNA 2008 support is enabled.]) - AC_SUBST([LIBIDN2_CFLAGS], []) - AC_SUBST([LIBIDN2_LIBS], [-lidn2]) dnl used in gnutls.pc.in -dnl enable once libidn2.pc is widespread; and remove LIBIDN2_LIBS from gnutls.pc.in (Libs.private) -dnl if test "x$GNUTLS_REQUIRES_PRIVATE" = "x"; then -dnl GNUTLS_REQUIRES_PRIVATE="Requires.private: libidn2" -dnl else -dnl GNUTLS_REQUIRES_PRIVATE="${GNUTLS_REQUIRES_PRIVATE}, libidn2" -dnl fi - ],[ - with_libidn2=no; + if test "x$GNUTLS_REQUIRES_PRIVATE" = "x"; then + GNUTLS_REQUIRES_PRIVATE="Requires.private: libidn2" + else + GNUTLS_REQUIRES_PRIVATE="${GNUTLS_REQUIRES_PRIVATE}, libidn2" + fi + else AC_MSG_WARN(*** LIBIDN2 was not found. You will not be able to use IDN2008 support) - ]) -else - with_libidn2=no + fi fi AM_CONDITIONAL(HAVE_LIBIDN2, test "$with_libidn2" != "no") @@ -501,7 +585,7 @@ AC_ARG_ENABLE(non-suiteb-curves, if test "$enable_non_suiteb" = "yes";then dnl nettle_secp_192r1 is not really a function - AC_CHECK_LIB(hogweed, nettle_secp_192r1, enable_non_suiteb=yes, enable_non_suiteb=no, [$HOGWEED_LIBS]) + AC_CHECK_LIB(hogweed, nettle_get_secp_192r1, enable_non_suiteb=yes, enable_non_suiteb=no, [$HOGWEED_LIBS $NETTLE_LIBS]) if test "$enable_non_suiteb" = "yes";then AC_DEFINE([ENABLE_NON_SUITEB_CURVES], 1, [Enable all curves]) @@ -509,6 +593,135 @@ if test "$enable_non_suiteb" = "yes";then fi AM_CONDITIONAL(ENABLE_NON_SUITEB_CURVES, test "$enable_non_suiteb" = "yes") +# We MUST require a Nettle version that has rsa_sec_decrypt now. +save_LIBS=$LIBS +LIBS="$LIBS $HOGWEED_LIBS $NETTLE_LIBS" +AC_CHECK_FUNCS(nettle_rsa_sec_decrypt, + [], + [AC_MSG_ERROR([Nettle lacks the required rsa_sec_decrypt function])] +) +LIBS=$save_LIBS + +# Check if nettle has CFB8 support +if test -z "$ac_cv_func_nettle_cfb8_encrypt"; then + # nettle_cfb8_decrypt in nettle upto 3.6 is known to be broken + if ! $PKG_CONFIG --atleast-version=3.6 nettle; then + ac_cv_func_nettle_cfb8_encrypt=no + fi +fi + +save_LIBS=$LIBS +LIBS="$LIBS $NETTLE_LIBS" +AC_CHECK_FUNCS(nettle_cfb8_encrypt) +LIBS=$save_LIBS +AM_CONDITIONAL(NEED_CFB, [test "$ac_cv_func_nettle_cfb8_encrypt" != "yes"]) + +# Check if nettle has CMAC support +save_CFLAGS=$CFLAGS +CFLAGS="$CFLAGS $NETTLE_CFLAGS" +AC_CHECK_TYPES([union nettle_block8], , , [[#include ]]) +CFLAGS=$save_CFLAGS + +save_LIBS=$LIBS +LIBS="$LIBS $NETTLE_LIBS" +AC_CHECK_FUNCS(nettle_cmac128_update) +LIBS=$save_LIBS +AM_CONDITIONAL(NEED_CMAC, [test "$ac_cv_func_nettle_cmac128_update" != "yes"]) + +# Check if nettle has XTS support +save_LIBS=$LIBS +LIBS="$LIBS $NETTLE_LIBS" +AC_CHECK_FUNCS(nettle_xts_encrypt_message) +LIBS=$save_LIBS +AM_CONDITIONAL(NEED_XTS, [test "$ac_cv_func_nettle_xts_encrypt_message" != "yes"]) + +# Check for Gosthash94 with CryptoPro S-box support +save_LIBS=$LIBS +LIBS="$LIBS $NETTLE_LIBS" +AC_CHECK_FUNCS(nettle_gosthash94cp_update) +LIBS=$save_LIBS + +# Check for GOST28147 +save_LIBS=$LIBS +LIBS="$LIBS $NETTLE_LIBS" +AC_CHECK_FUNCS(nettle_gost28147_set_key) +LIBS=$save_LIBS + +# Check for Streebog support +save_LIBS=$LIBS +LIBS="$LIBS $NETTLE_LIBS" +AC_CHECK_FUNCS(nettle_streebog512_update) +LIBS=$save_LIBS + +# Check for Curve448 and Ed448 +have_new_ecc=yes +save_LIBS=$LIBS +LIBS="$LIBS $HOGWEED_LIBS $NETTLE_LIBS" +AC_CHECK_FUNCS([nettle_curve448_mul nettle_ed448_shake256_sign nettle_get_gost_gc256b nettle_get_gost_gc512a nettle_gostdsa_sign], + [], [have_new_ecc=no]) +LIBS=$save_LIBS +AS_IF([test "$have_new_ecc" != "yes"], AC_DEFINE([NEED_INT_ECC], 1, [Use backported Curve448/GOST R 34.10 DSA support])) +AM_CONDITIONAL(NEED_INT_ECC, test "$have_new_ecc" != "yes") + +# Check if nettle has ChaCha20 initial block counter support +have_chacha_set_counter=no +save_LIBS=$LIBS +LIBS="$LIBS $NETTLE_LIBS" +AC_CHECK_FUNCS([nettle_chacha_set_counter], + [have_chacha_set_counter=yes]) +LIBS=$save_LIBS +AM_CONDITIONAL(NEED_CHACHA, [test "$have_chacha_set_counter" != "yes"]) + +# Check for SIV-CMAC +save_LIBS=$LIBS +LIBS="$LIBS $NETTLE_LIBS" +AC_CHECK_FUNCS(nettle_siv_cmac_aes128_set_key) +LIBS=$save_LIBS +AM_CONDITIONAL(NEED_SIV, [test "$ac_cv_func_nettle_siv_cmac_aes128_set_key" != "yes"]) + +# Check sonames of the linked libraries needed for FIPS selftests. +save_LIBS=$LIBS +LIBS="$LIBS $GMP_LIBS" +AC_MSG_CHECKING([gmp soname]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], + [gmp_so=`(eval "$LDDPROG conftest$EXEEXT $LDDPOSTPROC") | grep '^libgmp\.so'`], + [gmp_so=none]) +if test -z "$gmp_so"; then + gmp_so=none +fi +AC_MSG_RESULT($gmp_so) +AC_DEFINE_UNQUOTED([GMP_LIBRARY_SONAME], ["$gmp_so"], [The soname of gmp library]) +LIBS=$save_LIBS + +save_LIBS=$LIBS +LIBS="$LIBS $NETTLE_LIBS" +AC_MSG_CHECKING([nettle soname]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], + [nettle_so=`(eval "$LDDPROG conftest$EXEEXT $LDDPOSTPROC") | grep '^libnettle\.so'`], + [nettle_so=none]) +if test -z "$nettle_so"; then + nettle_so=none +fi +AC_MSG_RESULT($nettle_so) +AC_DEFINE_UNQUOTED([NETTLE_LIBRARY_SONAME], ["$nettle_so"], [The soname of nettle library]) +LIBS=$save_LIBS + +save_LIBS=$LIBS +LIBS="$LIBS $HOGWEED_LIBS" +AC_MSG_CHECKING([hogweed soname]) +AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], + [hogweed_so=`(eval "$LDDPROG conftest$EXEEXT $LDDPOSTPROC") | grep '^libhogweed\.so'`], + [hogweed_so=none]) +if test -z "$hogweed_so"; then + hogweed_so=none +fi +AC_MSG_RESULT($hogweed_so) +AC_DEFINE_UNQUOTED([HOGWEED_LIBRARY_SONAME], ["$hogweed_so"], [The soname of hogweed library]) +LIBS=$save_LIBS + +gnutls_so=libgnutls.so.`expr "$LT_CURRENT" - "$LT_AGE"` +AC_DEFINE_UNQUOTED([GNUTLS_LIBRARY_SONAME], ["$gnutls_so"], [The soname of gnutls library]) + AC_MSG_CHECKING([whether to build libdane]) AC_ARG_ENABLE(libdane, AS_HELP_STRING([--disable-libdane], @@ -560,17 +773,23 @@ fi AC_DEFINE_UNQUOTED([UNBOUND_ROOT_KEY_FILE], ["$unbound_root_key_file"], [The DNSSEC root key file]) +system_config_file="/etc/gnutls/config" AC_ARG_WITH(system-priority-file, AS_HELP_STRING([--with-system-priority-file], - [specify the system priority file]), - system_priority_file="$withval", -system_priority_file="/etc/gnutls/default-priorities" + [specify the system-wide config file (set empty to disable)]), + system_config_file="$withval" ) +AM_CONDITIONAL(DISABLE_SYSTEM_CONFIG, test -z "${system_config_file}") + +if test -z "${system_config_file}";then + AC_DEFINE([DISABLE_SYSTEM_CONFIG], 1, [Whether to disable system configuration]) +fi + AC_DEFINE_UNQUOTED([SYSTEM_PRIORITY_FILE], - ["$system_priority_file"], [The system priority file]) + ["$system_config_file"], [The system-wide gnutls configuration file]) AC_ARG_WITH(default-priority-string, AS_HELP_STRING([--with-default-priority-string], - [specify the default priority string (e.g. @SYSTEM)]), + [specify the default priority string used by gnutls_set_default_priority (default is NORMAL)]), prio_string="$withval", prio_string="NORMAL") @@ -596,11 +815,13 @@ if test "$with_p11_kit" != "no"; then *** *** p11-kit >= $P11_KIT_MINIMUM was not found. To disable PKCS #11 support *** use --without-p11-kit, otherwise you may get p11-kit from -*** http://p11-glue.freedesktop.org/p11-kit.html +*** https://p11-glue.freedesktop.org/p11-kit.html *** ]]) fi fi +AM_CONDITIONAL(P11KIT_0_23_11_API, $PKG_CONFIG --atleast-version=0.23.11 p11-kit-1) + AM_CONDITIONAL(ENABLE_PKCS11, test "$with_p11_kit" != "no") AC_ARG_WITH(tpm, @@ -653,73 +874,41 @@ fi AC_DEFINE_UNQUOTED([TROUSERS_LIB], ["$ac_trousers_lib"], [the location of the trousers library]) AC_SUBST(TROUSERS_LIB) +AM_MISSING_PROG([AUTOGEN], [autogen]) + included_libopts=no -create_libopts_links=no if test "$enable_tools" != "no" || test "$enable_doc" != "no"; then + AC_CHECK_PROGS([autogen], [autogen]) + + if test -z "$autogen"; then + AC_MSG_WARN([[ +*** +*** autogen not found. Will not link against system libopts. +*** ]]) + dnl simulate specifying option on the command line + included_libopts=yes + fi LIBOPTS_CHECK([src/libopts]) if test "$NEED_LIBOPTS_DIR" = "true";then dnl replace libopts-generated files with distributed backups, if present - create_libopts_links=yes - AC_SUBST([AUTOGEN], [/bin/true]) included_libopts=yes fi else # Need to ensure the relevant conditionals get set gl_STDNORETURN_H AM_CONDITIONAL([INSTALL_LIBOPTS],[false]) - AM_CONDITIONAL([NEED_LIBOPTS], [false]) - included_libopts=yes fi AM_CONDITIONAL(NEED_LIBOPTS, test "$included_libopts" = "yes") -AC_CHECK_TYPE(ssize_t, - [ - DEFINE_SSIZE_T="#include " - AC_SUBST(DEFINE_SSIZE_T) - ], [ - AC_DEFINE([NO_SSIZE_T], 1, [no ssize_t type was found]) - DEFINE_SSIZE_T="typedef int ssize_t;" - AC_SUBST(DEFINE_SSIZE_T) - ], [ - #include - ]) - # For minitasn1. AC_CHECK_SIZEOF(unsigned long int, 4) AC_CHECK_SIZEOF(unsigned int, 4) +AC_CHECK_SIZEOF(time_t, 4) -AC_ARG_WITH(zlib, AS_HELP_STRING([--without-zlib], - [disable zlib compression support]), - ac_zlib=$withval, ac_zlib=yes) -AC_MSG_CHECKING([whether to include zlib compression support]) -if test x$ac_zlib != xno; then - AC_MSG_RESULT(yes) - AC_LIB_HAVE_LINKFLAGS(z,, [#include ], [compress (0, 0, 0, 0);]) - if test x$ac_cv_libz != xyes; then - AC_MSG_WARN( -*** -*** ZLIB was not found. You will not be able to use ZLIB compression.) - fi -else - AC_MSG_RESULT(no) -fi - -PKG_CHECK_EXISTS(zlib, ZLIB_HAS_PKGCONFIG=y, ZLIB_HAS_PKGCONFIG=n) +# export for use in scripts +AC_SUBST(ac_cv_sizeof_time_t) -if test x$ac_zlib != xno; then - if test "$ZLIB_HAS_PKGCONFIG" = "y" ; then - if test "x$GNUTLS_REQUIRES_PRIVATE" = x; then - GNUTLS_REQUIRES_PRIVATE="Requires.private: zlib" - else - GNUTLS_REQUIRES_PRIVATE="$GNUTLS_REQUIRES_PRIVATE, zlib" - fi - LIBZ_PC="" - else - LIBZ_PC=$LIBZ - fi -fi -AC_SUBST(LIBZ_PC) AC_SUBST(GNUTLS_REQUIRES_PRIVATE) @@ -735,6 +924,8 @@ if test "x$with_default_trust_store_pkcs11" != x; then ["$with_default_trust_store_pkcs11"], [use the given pkcs11 uri as default trust store]) fi +AM_CONDITIONAL([HAVE_PKCS11_TRUST_STORE], [test -n "${with_default_trust_store_pkcs11}"]) + AC_ARG_WITH([default-trust-store-dir], [AS_HELP_STRING([--with-default-trust-store-dir=DIR], [use the given directory as default trust store])]) @@ -744,7 +935,7 @@ if test "x$with_default_trust_store_dir" != x; then ["$with_default_trust_store_dir"], [use the given directory as default trust store]) fi -dnl auto detect http://lists.gnu.org/archive/html/help-gnutls/2012-05/msg00004.html +dnl auto detect https://lists.gnu.org/archive/html/help-gnutls/2012-05/msg00004.html AC_ARG_WITH([default-trust-store-file], [AS_HELP_STRING([--with-default-trust-store-file=FILE], [use the given file default trust store])], with_default_trust_store_file="$withval", @@ -792,16 +983,25 @@ if test "x$with_default_blacklist_file" != x; then fi dnl Guile bindings. -opt_guile_bindings=yes AC_MSG_CHECKING([whether building Guile bindings]) AC_ARG_ENABLE(guile, AS_HELP_STRING([--enable-guile], [build GNU Guile bindings]), -opt_guile_bindings=$enableval) + [opt_guile_bindings=$enableval], [opt_guile_bindings=yes]) AC_MSG_RESULT($opt_guile_bindings) -AC_ARG_WITH([guile-site-dir], - [AS_HELP_STRING([--with-guile-site-dir], - [use the given directory as the Guile site (use with care)])]) +AC_ARG_WITH([guile-site-dir], AS_HELP_STRING([--with-guile-site-dir=DIR], + [guile site directory for gnutls, default is guile system settings]), + [guilesitedir="${withval}"], [guilesitedir='$(GUILE_SITE)']) +AC_ARG_WITH([guile-site-ccache-dir], AS_HELP_STRING([--with-guile-site-ccache-dir=DIR], + [guile ccache directory for gnutls, default is guile system settings]), + [guilesiteccachedir="${withval}"], [guilesiteccachedir='$(GUILE_SITE_CCACHE)']) +AC_ARG_WITH([guile-extension-dir], AS_HELP_STRING([--with-guile-extension-dir=DIR], + [guile extension directory for gnutls, default is guile system settings]), + [guileextensiondir="${withval}"], [guileextensiondir='$(GUILE_EXTENSION)']) +AC_SUBST([guilesitedir]) +AC_SUBST([guilesiteccachedir]) +AC_SUBST([guileextensiondir]) +maybe_guileextensiondir="\"$guileextensiondir\"" if test "$opt_guile_bindings" = "yes"; then AC_MSG_RESULT([*** @@ -818,9 +1018,33 @@ if test "$opt_guile_bindings" = "yes"; then AC_PATH_PROG([GUILD], [guild]) AC_SUBST([GUILD]) + GUILE_PKG([3.0 2.2 2.0 1.8]) GUILE_PROGS + GUILE_SITE_DIR GUILE_FLAGS + # Backward compatibility with $$log_file/echo $$@|grep exe >\/dev\/null; if [ $$? == 0 ];then wine "$$@" >$$log_file;else \/bin\/true >$$log_file;fi/g' $(GNUTLS_DIR)/build-aux/test-driver - -make -C $(GNUTLS_DIR)/tests check $(SMP) - make -C $(GNUTLS_DIR) install -i - cp $(GNUTLS_DIR)/COPYING $(GNUTLS_DIR)/COPYING.LESSER $(CROSS_DIR) - -for i in $(GCC_DLLS);do cp $(GCC_DLLS_PATH)/$$i $(BIN_DIR)/ && echo $$i;done - touch $@ - -$(GNUTLS_DIR)/.configured: $(NETTLE_DIR)/.installed $(P11_KIT_DIR)/.installed - test -f $(GNUTLS_FILE) || wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.4/$(GNUTLS_FILE) - test -f $(GNUTLS_FILE).sig || wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.4/$(GNUTLS_FILE).sig - gpg --verify $(GNUTLS_FILE).sig - test -d $(GNUTLS_DIR) || tar -xf $(GNUTLS_FILE) - cd $(GNUTLS_DIR) && \ - $(CONFIG_ENV) LDFLAGS="$(LDFLAGS) -L$(LIB_DIR)" CFLAGS="-I$(HEADERS_DIR)" CXXFLAGS="-I$(HEADERS_DIR)" \ - ./configure $(CONFIG_FLAGS) --enable-local-libopts --disable-cxx \ - --disable-doc --without-zlib --disable-nls --enable-gcc-warnings --disable-libdane --disable-openssl-compatibility --with-included-libtasn1 && cd .. - touch $@ - -$(OPENCONNECT_DIR)/.installed: $(OPENCONNECT_DIR)/.configured - make -C $(OPENCONNECT_DIR) $(SMP) - make -C $(OPENCONNECT_DIR) install -i - touch $@ - -$(OPENCONNECT_DIR)/.configured: $(GNUTLS_DIR)/.installed $(XML2_DIR)/.installed - test -f $(OPENCONNECT_FILE) || wget ftp://ftp.infradead.org/pub/openconnect/$(OPENCONNECT_FILE) - test -f $(OPENCONNECT_FILE).sig || wget ftp://ftp.infradead.org/pub/openconnect/$(OPENCONNECT_FILE).asc - gpg --verify $(OPENCONNECT_FILE).asc - test -d $(OPENCONNECT_DIR) || tar -xf $(OPENCONNECT_FILE) - cd $(OPENCONNECT_DIR) && \ - $(CONFIG_ENV) LDFLAGS="$(LDFLAGS) -L$(LIB_DIR)" CFLAGS="-I$(HEADERS_DIR)" CXXFLAGS="-I$(HEADERS_DIR)" \ - ./configure $(CONFIG_FLAGS) && cd .. - sed -i 's/-Werror-implicit-function-declaration//g' $(OPENCONNECT_DIR)/Makefile - touch $@ - -$(XML2_DIR)/.configured: $(GMP_DIR)/.installed - test -f $(XML2_FILE) || wget ftp://xmlsoft.org/libxml2/$(XML2_FILE) - #test -f $(XML2_FILE).sig || wget ftp://xmlsoft.org/libxml2//$(XML2_FILE).sig - #gpg --verify $(XML2_FILE).sig - test -d $(XML2_DIR) || tar -xf $(XML2_FILE) - cd $(XML2_DIR) && CFLAGS="-I$(HEADERS_DIR)" CXXFLAGS="-I$(HEADERS_DIR)" LDFLAGS="$(LDFLAGS)" $(CONFIG_ENV) ./configure $(CONFIG_FLAGS) --without-python --without-legacy --without-python --without-http --without-ftp --with-lib-path=$(LIB_DIR) && cd .. - touch $@ - -$(XML2_DIR)/.installed: $(XML2_DIR)/.configured - make -C $(XML2_DIR) $(SMP) - make -C $(XML2_DIR) install - touch $@ - -clean: - rm -rf $(CROSS_DIR) $(XML2_DIR)/.installed $(GNUTLS_DIR)/.installed $(OPENCONNECT_DIR)/.installed $(NETTLE_DIR)/.installed $(GMP_DIR)/.installed $(P11_KIT_DIR)/.installed - -dirclean: - rm -rf $(CROSS_DIR) $(GNUTLS_DIR) $(NETTLE_DIR) $(GMP_DIR) $(P11_KIT_DIR) - diff --git a/devel/ABI-3.4.0-x86_64.dump b/devel/ABI-3.4.0-x86_64.dump deleted file mode 100644 index db4797e575..0000000000 --- a/devel/ABI-3.4.0-x86_64.dump +++ /dev/null @@ -1,42683 +0,0 @@ -$VAR1 = { - 'ABI_DUMPER_VERSION' => '0.99.14', - 'ABI_DUMP_VERSION' => '3.2', - 'Arch' => 'x86_64', - 'GccVersion' => '5.3.1', - 'Headers' => { - 'abstract.h' => 1, - 'abstract_int.h' => 1, - 'algorithms.h' => 1, - 'alpn.h' => 1, - 'anon.h' => 1, - 'cert.h' => 1, - 'context.h' => 1, - 'crypto-backend.h' => 1, - 'crypto.h' => 1, - 'dtls.h' => 1, - 'ecc.h' => 1, - 'etm.h' => 1, - 'ext_master_secret.h' => 1, - 'filters.h' => 1, - 'fips.h' => 1, - 'gnutls.h' => 1, - 'gnutls_auth.h' => 1, - 'gnutls_cipher_int.h' => 1, - 'gnutls_compress.h' => 1, - 'gnutls_errors.h' => 1, - 'gnutls_extensions.h' => 1, - 'gnutls_global.h' => 1, - 'gnutls_hash_int.h' => 1, - 'gnutls_int.h' => 1, - 'gnutls_mpi.h' => 1, - 'gnutls_pk.h' => 1, - 'gnutls_str.h' => 1, - 'gnutls_str_array.h' => 1, - 'heartbeat.h' => 1, - 'keydb.h' => 1, - 'libio.h' => 1, - 'libtasn1.h' => 1, - 'locks.h' => 1, - 'max_record.h' => 1, - 'ocsp.h' => 1, - 'opencdk.h' => 1, - 'openpgp.h' => 1, - 'openpgp_int.h' => 1, - 'packet.h' => 1, - 'pin.h' => 1, - 'pkcs11.h' => 1, - 'pkcs11_int.h' => 1, - 'pkcs12.h' => 1, - 'platform.h' => 1, - 'psk.h' => 1, - 'random.h' => 1, - 'safe_renegotiation.h' => 1, - 'server_name.h' => 1, - 'session_ticket.h' => 1, - 'signature.h' => 1, - 'srp.h' => 1, - 'srtp.h' => 1, - 'status_request.h' => 1, - 'stddef.h' => 1, - 'stdint.h' => 1, - 'stdio.h' => 1, - 'stream.h' => 1, - 'system-keys.h' => 1, - 'system.h' => 1, - 'time.h' => 1, - 'tpm.h' => 1, - 'tss_structs.h' => 1, - 'tss_typedef.h' => 1, - 'types.h' => 1, - 'urls.h' => 1, - 'verify-high.h' => 1, - 'x509-ext.h' => 1, - 'x509.h' => 1, - 'x509_int.h' => 1 - }, - 'Language' => 'C', - 'LibraryName' => 'libgnutls.so.30.0.0', - 'LibraryVersion' => '3.4.0', - 'NameSpaces' => {}, - 'Needed' => { - 'libc.so.6' => 1, - 'libgmp.so.10' => 1, - 'libhogweed.so.4' => 1, - 'libidn.so.11' => 1, - 'libnettle.so.6' => 1, - 'libp11-kit.so.0' => 1, - 'libtasn1.so.6' => 1, - 'libtspi.so.1' => 1, - 'libz.so.1' => 1 - }, - 'Sources' => { - 'alpn.c' => 1, - 'cert_types.c' => 1, - 'ciphers.c' => 1, - 'ciphersuites.c' => 1, - 'common.c' => 1, - 'crl.c' => 1, - 'crl_write.c' => 1, - 'crq.c' => 1, - 'crypto-api.c' => 1, - 'crypto-backend.c' => 1, - 'debug.c' => 1, - 'dn.c' => 1, - 'ecc.c' => 1, - 'email-verify.c' => 1, - 'etm.c' => 1, - 'ext_master_secret.c' => 1, - 'extensions.c' => 1, - 'extras.c' => 1, - 'fips.c' => 1, - 'gnutls_alert.c' => 1, - 'gnutls_anon_cred.c' => 1, - 'gnutls_auth.c' => 1, - 'gnutls_buffers.c' => 1, - 'gnutls_cert.c' => 1, - 'gnutls_compress.c' => 1, - 'gnutls_db.c' => 1, - 'gnutls_dh.c' => 1, - 'gnutls_dtls.c' => 1, - 'gnutls_errors.c' => 1, - 'gnutls_extensions.c' => 1, - 'gnutls_global.c' => 1, - 'gnutls_handshake.c' => 1, - 'gnutls_mem.c' => 1, - 'gnutls_openpgp.c' => 1, - 'gnutls_pcert.c' => 1, - 'gnutls_pk.c' => 1, - 'gnutls_priority.c' => 1, - 'gnutls_privkey.c' => 1, - 'gnutls_privkey_raw.c' => 1, - 'gnutls_psk.c' => 1, - 'gnutls_pubkey.c' => 1, - 'gnutls_range.c' => 1, - 'gnutls_record.c' => 1, - 'gnutls_session.c' => 1, - 'gnutls_session_pack.c' => 1, - 'gnutls_srp.c' => 1, - 'gnutls_state.c' => 1, - 'gnutls_str.c' => 1, - 'gnutls_supplemental.c' => 1, - 'gnutls_ui.c' => 1, - 'gnutls_x509.c' => 1, - 'heartbeat.c' => 1, - 'hostname-verify.c' => 1, - 'kx.c' => 1, - 'locks.c' => 1, - 'mac.c' => 1, - 'max_record.c' => 1, - 'mpi.c' => 1, - 'name_constraints.c' => 1, - 'ocsp.c' => 1, - 'ocsp_output.c' => 1, - 'output.c' => 1, - 'pgp.c' => 1, - 'pgpverify.c' => 1, - 'pin.c' => 1, - 'pk.c' => 1, - 'pkcs11.c' => 1, - 'pkcs11_privkey.c' => 1, - 'pkcs11_secret.c' => 1, - 'pkcs11_write.c' => 1, - 'pkcs11x.c' => 1, - 'pkcs12.c' => 1, - 'pkcs12_bag.c' => 1, - 'pkcs12_encr.c' => 1, - 'pkcs7.c' => 1, - 'privkey.c' => 1, - 'privkey_openssl.c' => 1, - 'privkey_pkcs8.c' => 1, - 'protocols.c' => 1, - 'publickey.c' => 1, - 'random.c' => 1, - 'safe-memfuncs.c' => 1, - 'safe_renegotiation.c' => 1, - 'secparams.c' => 1, - 'server_name.c' => 1, - 'session_ticket.c' => 1, - 'sign.c' => 1, - 'signature.c' => 1, - 'srp.c' => 1, - 'srp_sb64.c' => 1, - 'srtp.c' => 1, - 'status_request.c' => 1, - 'system-keys-dummy.c' => 1, - 'system.c' => 1, - 'system_override.c' => 1, - 'tpm.c' => 1, - 'urls.c' => 1, - 'verify-high.c' => 1, - 'verify-high2.c' => 1, - 'verify-tofu.c' => 1, - 'verify.c' => 1, - 'x509.c' => 1, - 'x509_b64.c' => 1, - 'x509_dn.c' => 1, - 'x509_ext.c' => 1, - 'x509_write.c' => 1 - }, - 'SymbolInfo' => { - '1002031' => { - 'Header' => 'x509.h', - 'Line' => '491', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'indx', - 'type' => '130' - }, - '2' => { - 'name' => 'data', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_extension_data2', - 'Source' => 'extensions.c', - 'SourceLine' => '180' - }, - '1002315' => { - 'Header' => 'x509.h', - 'Line' => '744', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'indx', - 'type' => '130' - }, - '2' => { - 'name' => 'data', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_extension_data2', - 'Source' => 'extensions.c', - 'SourceLine' => '216' - }, - '1009188' => { - 'Line' => '56', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '1272629' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_subject_alt_names_init', - 'Source' => 'x509_ext.c' - }, - '1009199' => { - 'Line' => '178', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '999716' - }, - '1' => { - 'name' => 'san_type', - 'type' => '130' - }, - '2' => { - 'name' => 'san', - 'type' => '3587' - }, - '3' => { - 'name' => 'othername_oid', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_subject_alt_names_set', - 'Source' => 'x509_ext.c' - }, - '1009210' => { - 'Line' => '305', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '999716' - }, - '1' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_subject_alt_names', - 'Source' => 'x509_ext.c' - }, - '1009221' => { - 'Line' => '86', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '999716' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_subject_alt_names_deinit', - 'Source' => 'x509_ext.c' - }, - '1009232' => { - 'Line' => '222', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'sans', - 'type' => '999716' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_subject_alt_names', - 'Source' => 'x509_ext.c' - }, - '1009243' => { - 'Line' => '673', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1277421' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_aki_init', - 'Source' => 'x509_ext.c' - }, - '1009254' => { - 'Line' => '732', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '999738' - }, - '1' => { - 'name' => 'id', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_aki_set_id', - 'Source' => 'x509_ext.c' - }, - '1009265' => { - 'Line' => '966', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '999738' - }, - '1' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_authority_key_id', - 'Source' => 'x509_ext.c' - }, - '1009276' => { - 'Line' => '690', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '999738' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_aki_deinit', - 'Source' => 'x509_ext.c' - }, - '1051366' => { - 'Header' => 'x509.h', - 'Line' => '572', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'format', - 'type' => '1017994' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_print', - 'Source' => 'output.c', - 'SourceLine' => '1685' - }, - '1052028' => { - 'Line' => '2054', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'format', - 'type' => '1017994' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_print', - 'Source' => 'output.c' - }, - '1052802' => { - 'Line' => '2354', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'format', - 'type' => '1017994' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_print', - 'Source' => 'output.c' - }, - '1056242' => { - 'Line' => '2426', - 'Param' => { - '0' => { - 'name' => 'pubkey', - 'type' => '3631' - }, - '1' => { - 'name' => 'format', - 'type' => '1017994' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_print', - 'Source' => 'output.c' - }, - '1057105' => { - 'Line' => '2458', - 'Param' => { - '0' => { - 'name' => 'exts', - 'type' => '798703' - }, - '1' => { - 'name' => 'exts_size', - 'type' => '130' - }, - '2' => { - 'name' => 'format', - 'type' => '1017994' - }, - '3' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_print', - 'Source' => 'output.c' - }, - '1057506' => { - 'Header' => 'gnutls.h', - 'Line' => '863', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2348' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_pk_get_name', - 'Source' => 'publickey.c', - 'SourceLine' => '198' - }, - '1057541' => { - 'Line' => '537', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'buf', - 'type' => '208' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_dn', - 'Source' => 'x509.c' - }, - '1057552' => { - 'Line' => '393', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'buf', - 'type' => '208' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn', - 'Source' => 'x509.c' - }, - '1057563' => { - 'Header' => 'gnutls.h', - 'Line' => '646', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2348' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_pk_algorithm_get_name', - 'Source' => 'publickey.c', - 'SourceLine' => '117' - }, - '1057587' => { - 'Line' => '137', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2500' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_sign_is_secure', - 'Source' => 'sign.c' - }, - '1057645' => { - 'Line' => '1830', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'critical', - 'type' => '17947' - }, - '2' => { - 'name' => 'pathlen', - 'type' => '13711' - }, - '3' => { - 'name' => 'policyLanguage', - 'type' => '211849' - }, - '4' => { - 'name' => 'policy', - 'type' => '211849' - }, - '5' => { - 'name' => 'sizeof_policy', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_proxy', - 'Source' => 'x509.c' - }, - '1057657' => { - 'Line' => '2466', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'algo', - 'type' => '109671' - }, - '2' => { - 'name' => 'buf', - 'type' => '184' - }, - '3' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_fingerprint', - 'Source' => 'x509.c' - }, - '1057669' => { - 'Line' => '672', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_signature_algorithm', - 'Source' => 'x509.c' - }, - '1057747' => { - 'Header' => 'gnutls.h', - 'Line' => '825', - 'Param' => { - '0' => { - 'name' => 'algo', - 'type' => '2348' - }, - '1' => { - 'name' => 'bits', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '2648', - 'ShortName' => 'gnutls_pk_bits_to_sec_param', - 'Source' => 'secparams.c', - 'SourceLine' => '181' - }, - '1057759' => { - 'Header' => 'gnutls.h', - 'Line' => '827', - 'Param' => { - '0' => { - 'name' => 'param', - 'type' => '2648' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_sec_param_get_name', - 'Source' => 'secparams.c', - 'SourceLine' => '153' - }, - '1057839' => { - 'Line' => '811', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '999738' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'san_type', - 'type' => '17947' - }, - '3' => { - 'name' => 'san', - 'type' => '3665' - }, - '4' => { - 'name' => 'othername_oid', - 'type' => '3665' - }, - '5' => { - 'name' => 'serial', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_aki_get_cert_issuer', - 'Source' => 'x509_ext.c' - }, - '1057861' => { - 'Line' => '860', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'aki', - 'type' => '999738' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_authority_key_id', - 'Source' => 'x509_ext.c' - }, - '1057872' => { - 'Line' => '711', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '999738' - }, - '1' => { - 'name' => 'id', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_aki_get_id', - 'Source' => 'x509_ext.c' - }, - '1058049' => { - 'Line' => '3138', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '105' - }, - '1' => { - 'name' => 'othername', - 'type' => '3587' - }, - '2' => { - 'name' => 'virt_type', - 'type' => '17947' - }, - '3' => { - 'name' => 'virt', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_othername_to_virtual', - 'Source' => 'x509_ext.c' - }, - '1058094' => { - 'Line' => '109', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '999716' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'san_type', - 'type' => '17947' - }, - '3' => { - 'name' => 'san', - 'type' => '3665' - }, - '4' => { - 'name' => 'othername_oid', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_subject_alt_names_get', - 'Source' => 'x509_ext.c' - }, - '1058127' => { - 'Line' => '571', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'id', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_subject_key_id', - 'Source' => 'x509_ext.c' - }, - '1058138' => { - 'Line' => '1654', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1284640' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_policies_init', - 'Source' => 'x509_ext.c' - }, - '1058149' => { - 'Line' => '1779', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'policies', - 'type' => '1020553' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_policies', - 'Source' => 'x509_ext.c' - }, - '1058160' => { - 'Line' => '1695', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1020553' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'policy', - 'type' => '1201578' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_policies_get', - 'Source' => 'x509_ext.c' - }, - '1058171' => { - 'Line' => '1671', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1020553' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_policies_deinit', - 'Source' => 'x509_ext.c' - }, - '1058182' => { - 'Line' => '1162', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'activation', - 'type' => '17423' - }, - '2' => { - 'name' => 'expiration', - 'type' => '17423' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_private_key_usage_period', - 'Source' => 'x509_ext.c' - }, - '1058204' => { - 'Line' => '2818', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1294616' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_key_purpose_init', - 'Source' => 'x509_ext.c' - }, - '1058215' => { - 'Line' => '2918', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'p', - 'type' => '1020531' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_key_purposes', - 'Source' => 'x509_ext.c' - }, - '1058226' => { - 'Line' => '2893', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1020531' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'oid', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_key_purpose_get', - 'Source' => 'x509_ext.c' - }, - '1058237' => { - 'Line' => '2846', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1020531' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_key_purpose_deinit', - 'Source' => 'x509_ext.c' - }, - '1058248' => { - 'Line' => '2141', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1289333' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_dist_points_init', - 'Source' => 'x509_ext.c' - }, - '1058259' => { - 'Line' => '2279', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'cdp', - 'type' => '1020465' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_crl_dist_points', - 'Source' => 'x509_ext.c' - }, - '1058270' => { - 'Line' => '2184', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1020465' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'type', - 'type' => '17947' - }, - '3' => { - 'name' => 'san', - 'type' => '3665' - }, - '4' => { - 'name' => 'reasons', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_dist_points_get', - 'Source' => 'x509_ext.c' - }, - '1058281' => { - 'Line' => '2158', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1020465' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crl_dist_points_deinit', - 'Source' => 'x509_ext.c' - }, - '1058307' => { - 'Line' => '1410', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'pathlen', - 'type' => '13711' - }, - '2' => { - 'name' => 'policyLanguage', - 'type' => '211849' - }, - '3' => { - 'name' => 'policy', - 'type' => '211849' - }, - '4' => { - 'name' => 'sizeof_policy', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_proxy', - 'Source' => 'x509_ext.c' - }, - '1058318' => { - 'Line' => '2499', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1291928' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_aia_init', - 'Source' => 'x509_ext.c' - }, - '1058329' => { - 'Line' => '2693', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'aia', - 'type' => '1020487' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_aia', - 'Source' => 'x509_ext.c' - }, - '1058340' => { - 'Line' => '2549', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1020487' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'oid', - 'type' => '3665' - }, - '3' => { - 'name' => 'san_type', - 'type' => '17947' - }, - '4' => { - 'name' => 'san', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_aia_get', - 'Source' => 'x509_ext.c' - }, - '1058351' => { - 'Line' => '2516', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1020487' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_aia_deinit', - 'Source' => 'x509_ext.c' - }, - '1058362' => { - 'Line' => '233', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1242914' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_name_constraints_init', - 'Source' => 'name_constraints.c' - }, - '1058374' => { - 'Line' => '370', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'nc', - 'type' => '1018880' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_name_constraints', - 'Source' => 'x509_ext.c' - }, - '1058385' => { - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1018880' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'type', - 'type' => '17947' - }, - '3' => { - 'name' => 'name', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_name_constraints_get_permitted' - }, - '1058397' => { - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1018880' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'type', - 'type' => '17947' - }, - '3' => { - 'name' => 'name', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_name_constraints_get_excluded' - }, - '1058409' => { - 'Line' => '201', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1018880' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_name_constraints_deinit', - 'Source' => 'name_constraints.c' - }, - '1058457' => { - 'Line' => '2134', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '5416' - }, - '4' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_extension_info', - 'Source' => 'x509.c' - }, - '1058469' => { - 'Header' => 'x509.h', - 'Line' => '191', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_version' - }, - '1058525' => { - 'Line' => '3445', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'buf', - 'type' => '208' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_issuer_unique_id', - 'Source' => 'x509.c' - }, - '1058536' => { - 'Line' => '3401', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'buf', - 'type' => '208' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_subject_unique_id', - 'Source' => 'x509.c' - }, - '1058547' => { - 'Line' => '690', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'sig', - 'type' => '208' - }, - '2' => { - 'name' => 'sig_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_signature', - 'Source' => 'x509.c' - }, - '1065187' => { - 'Line' => '282', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '554659' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '184' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_export', - 'Source' => 'pkcs12.c' - }, - '1065403' => { - 'Line' => '314', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '554659' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_export2', - 'Source' => 'pkcs12.c' - }, - '1067573' => { - 'Line' => '602', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '554659' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'bag', - 'type' => '1062767' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_get_bag', - 'Source' => 'pkcs12.c' - }, - '1068476' => { - 'Line' => '861', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '554659' - }, - '1' => { - 'name' => 'mac', - 'type' => '1971' - }, - '2' => { - 'name' => 'pass', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_generate_mac2', - 'Source' => 'pkcs12.c' - }, - '1069836' => { - 'Line' => '991', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '554659' - }, - '1' => { - 'name' => 'pass', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_generate_mac', - 'Source' => 'pkcs12.c' - }, - '1072812' => { - 'Line' => '737', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '554659' - }, - '1' => { - 'name' => 'bag', - 'type' => '1062767' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_set_bag', - 'Source' => 'pkcs12.c' - }, - '107472' => { - 'Header' => 'gnutls_str.h', - 'Line' => '45', - 'Param' => { - '0' => { - 'name' => 'str', - 'type' => '10555' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_buffer_init', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '82' - }, - '107483' => { - 'Header' => 'gnutls_str.h', - 'Line' => '48', - 'Param' => { - '0' => { - 'name' => 'str', - 'type' => '10555' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_buffer_clear', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '97' - }, - '1076703' => { - 'Line' => '1845', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '554659' - }, - '1' => { - 'name' => 'mac', - 'type' => '17947' - }, - '2' => { - 'name' => 'salt', - 'type' => '184' - }, - '3' => { - 'name' => 'salt_size', - 'type' => '17947' - }, - '4' => { - 'name' => 'iter_count', - 'type' => '17947' - }, - '5' => { - 'name' => 'oid', - 'type' => '211849' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_mac_info', - 'Source' => 'pkcs12.c' - }, - '1077758' => { - 'Header' => 'x509_int.h', - 'Line' => '348', - 'Param' => { - '0' => { - 'name' => 'me', - 'type' => '7511' - }, - '1' => { - 'name' => 'id', - 'type' => '130' - }, - '2' => { - 'name' => 'salt', - 'type' => '25160' - }, - '3' => { - 'name' => 'salt_size', - 'type' => '130' - }, - '4' => { - 'name' => 'iter', - 'type' => '130' - }, - '5' => { - 'name' => 'pw', - 'type' => '105' - }, - '6' => { - 'name' => 'req_keylen', - 'offset' => '0', - 'type' => '130' - }, - '7' => { - 'name' => 'keybuf', - 'offset' => '8', - 'type' => '5817' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => '_gnutls_pkcs12_string_to_key', - 'Source' => 'pkcs12_encr.c', - 'SourceLine' => '57' - }, - '1077905' => { - 'Line' => '97', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1062891', - 'ShortName' => 'gnutls_pkcs12_bag_get_type', - 'Source' => 'pkcs12_bag.c' - }, - '1077916' => { - 'Line' => '142', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'data', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_get_data', - 'Source' => 'pkcs12_bag.c' - }, - '1077939' => { - 'Line' => '1441', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - }, - '3' => { - 'name' => 'password', - 'type' => '105' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_import_pkcs8', - 'Source' => 'privkey_pkcs8.c' - }, - '1078066' => { - 'Line' => '46', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1081968' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_init', - 'Source' => 'pkcs12_bag.c' - }, - '1078077' => { - 'Line' => '662', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'pass', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_decrypt', - 'Source' => 'pkcs12_bag.c' - }, - '1078088' => { - 'Line' => '118', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_get_count', - 'Source' => 'pkcs12_bag.c' - }, - '1078099' => { - 'Line' => '77', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs12_bag_deinit', - 'Source' => 'pkcs12_bag.c' - }, - '1084116' => { - 'Line' => '387', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'type', - 'type' => '1062891' - }, - '2' => { - 'name' => 'data', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_set_data', - 'Source' => 'pkcs12_bag.c' - }, - '1084273' => { - 'Line' => '444', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'crt', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_set_crt', - 'Source' => 'pkcs12_bag.c' - }, - '1084527' => { - 'Line' => '480', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'crl', - 'type' => '545129' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_set_crl', - 'Source' => 'pkcs12_bag.c' - }, - '1084781' => { - 'Line' => '519', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'id', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_set_key_id', - 'Source' => 'pkcs12_bag.c' - }, - '1084965' => { - 'Line' => '560', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'id', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_get_key_id', - 'Source' => 'pkcs12_bag.c' - }, - '1085092' => { - 'Line' => '593', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'name', - 'type' => '211849' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_get_friendly_name', - 'Source' => 'pkcs12_bag.c' - }, - '1085220' => { - 'Line' => '627', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'name', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_set_friendly_name', - 'Source' => 'pkcs12_bag.c' - }, - '1085640' => { - 'Line' => '715', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'pass', - 'type' => '105' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_encrypt', - 'Source' => 'pkcs12_bag.c' - }, - '1086215' => { - 'Line' => '808', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'schema', - 'type' => '17947' - }, - '2' => { - 'name' => 'cipher', - 'type' => '17947' - }, - '3' => { - 'name' => 'salt', - 'type' => '184' - }, - '4' => { - 'name' => 'salt_size', - 'type' => '17947' - }, - '5' => { - 'name' => 'iter_count', - 'type' => '17947' - }, - '6' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '211849' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_enc_info', - 'Source' => 'pkcs12_bag.c' - }, - '1086595' => { - 'Line' => '872', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1062767' - }, - '1' => { - 'name' => 'privkey', - 'type' => '111785' - }, - '2' => { - 'name' => 'password', - 'type' => '105' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_bag_set_privkey', - 'Source' => 'pkcs12_bag.c' - }, - '10868' => { - 'Line' => '104', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_record_can_use_length_hiding', - 'Source' => 'gnutls_range.c' - }, - '1087349' => { - 'Line' => '765', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'password', - 'type' => '105' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - }, - '4' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_export2_pkcs8', - 'Source' => 'privkey_pkcs8.c' - }, - '1096815' => { - 'Line' => '156', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1096973' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_init', - 'Source' => 'pkcs7.c' - }, - '1096979' => { - 'Line' => '178', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs7_deinit', - 'Source' => 'pkcs7.c' - }, - '1097065' => { - 'Line' => '205', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_import', - 'Source' => 'pkcs7.c' - }, - '1097440' => { - 'Line' => '280', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'certificate', - 'type' => '184' - }, - '3' => { - 'name' => 'certificate_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_get_crt_raw', - 'Source' => 'pkcs7.c' - }, - '1098228' => { - 'Line' => '371', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_get_crt_count', - 'Source' => 'pkcs7.c' - }, - '1098459' => { - 'Line' => '423', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '184' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_export', - 'Source' => 'pkcs7.c' - }, - '1098619' => { - 'Line' => '453', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_export2', - 'Source' => 'pkcs7.c' - }, - '1098756' => { - 'Line' => '550', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - }, - '1' => { - 'name' => 'crt', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_set_crt_raw', - 'Source' => 'pkcs7.c' - }, - '1099402' => { - 'Line' => '639', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - }, - '1' => { - 'name' => 'crt', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_set_crt', - 'Source' => 'pkcs7.c' - }, - '1099651' => { - 'Line' => '677', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_delete_crt', - 'Source' => 'pkcs7.c' - }, - '1100181' => { - 'Line' => '745', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'crl', - 'type' => '184' - }, - '3' => { - 'name' => 'crl_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_get_crl_raw', - 'Source' => 'pkcs7.c' - }, - '1100747' => { - 'Line' => '813', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_get_crl_count', - 'Source' => 'pkcs7.c' - }, - '1100978' => { - 'Line' => '855', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - }, - '1' => { - 'name' => 'crl', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_set_crl_raw', - 'Source' => 'pkcs7.c' - }, - '1101582' => { - 'Line' => '933', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - }, - '1' => { - 'name' => 'crl', - 'type' => '545129' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_set_crl', - 'Source' => 'pkcs7.c' - }, - '1101831' => { - 'Line' => '970', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1094060' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs7_delete_crl', - 'Source' => 'pkcs7.c' - }, - '1110236' => { - 'Header' => 'x509.h', - 'Line' => '986', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_import', - 'Source' => 'privkey.c', - 'SourceLine' => '453' - }, - '1112927' => { - 'Line' => '735', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'm', - 'type' => '3587' - }, - '2' => { - 'name' => 'e', - 'type' => '3587' - }, - '3' => { - 'name' => 'd', - 'type' => '3587' - }, - '4' => { - 'name' => 'p', - 'type' => '3587' - }, - '5' => { - 'name' => 'q', - 'type' => '3587' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_import_rsa_raw', - 'Source' => 'privkey.c' - }, - '1114112' => { - 'Line' => '1071', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'bits', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_get_pk_algorithm2', - 'Source' => 'privkey.c' - }, - '1114271' => { - 'Line' => '1126', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '184' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_export', - 'Source' => 'privkey.c' - }, - '1114510' => { - 'Header' => 'x509.h', - 'Line' => '1063', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_export2', - 'Source' => 'privkey.c', - 'SourceLine' => '1164' - }, - '1114733' => { - 'Line' => '1192', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2648', - 'ShortName' => 'gnutls_x509_privkey_sec_param', - 'Source' => 'privkey.c' - }, - '1114837' => { - 'Line' => '1220', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'curve', - 'type' => '365382' - }, - '2' => { - 'name' => 'x', - 'type' => '3665' - }, - '3' => { - 'name' => 'y', - 'type' => '3665' - }, - '4' => { - 'name' => 'k', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_export_ecc_raw', - 'Source' => 'privkey.c' - }, - '1115057' => { - 'Line' => '1252', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'm', - 'type' => '3665' - }, - '2' => { - 'name' => 'e', - 'type' => '3665' - }, - '3' => { - 'name' => 'd', - 'type' => '3665' - }, - '4' => { - 'name' => 'p', - 'type' => '3665' - }, - '5' => { - 'name' => 'q', - 'type' => '3665' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_export_rsa_raw', - 'Source' => 'privkey.c' - }, - '1116114' => { - 'Line' => '1497', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_verify_params', - 'Source' => 'privkey.c' - }, - '1116453' => { - 'Line' => '1633', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'hash', - 'type' => '3587' - }, - '2' => { - 'name' => 'signature', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_sign_hash', - 'Source' => 'privkey.c' - }, - '1116632' => { - 'Line' => '1684', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'digest', - 'type' => '109671' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - }, - '3' => { - 'name' => 'data', - 'type' => '3587' - }, - '4' => { - 'name' => 'signature', - 'type' => '184' - }, - '5' => { - 'name' => 'signature_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_sign_data', - 'Source' => 'privkey.c' - }, - '1117395' => { - 'Line' => '1742', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_fix', - 'Source' => 'privkey.c' - }, - '1118011' => { - 'Line' => '123', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'password', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_import_openssl', - 'Source' => 'privkey_openssl.c' - }, - '11308' => { - 'Line' => '148', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'orig', - 'type' => '12472' - }, - '2' => { - 'name' => 'next', - 'type' => '10964' - }, - '3' => { - 'name' => 'remainder', - 'type' => '10964' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_range_split', - 'Source' => 'gnutls_range.c' - }, - '1139602' => { - 'Line' => '351', - 'Param' => { - '0' => { - 'name' => 'schema', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_pkcs_schema_get_name', - 'Source' => 'privkey_pkcs8.c' - }, - '1139672' => { - 'Line' => '368', - 'Param' => { - '0' => { - 'name' => 'schema', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_pkcs_schema_get_oid', - 'Source' => 'privkey_pkcs8.c' - }, - '1139742' => { - 'Line' => '571', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'password', - 'type' => '105' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - }, - '4' => { - 'name' => 'output_data', - 'type' => '184' - }, - '5' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_export_pkcs8', - 'Source' => 'privkey_pkcs8.c' - }, - '1140452' => { - 'Line' => '655', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '3587' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'schema', - 'type' => '17947' - }, - '3' => { - 'name' => 'cipher', - 'type' => '17947' - }, - '4' => { - 'name' => 'salt', - 'type' => '184' - }, - '5' => { - 'name' => 'salt_size', - 'type' => '17947' - }, - '6' => { - 'name' => 'iter_count', - 'offset' => '0', - 'type' => '17947' - }, - '7' => { - 'name' => 'oid', - 'offset' => '8', - 'type' => '211849' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs8_info', - 'Source' => 'privkey_pkcs8.c' - }, - '1145939' => { - 'Header' => 'crypto.h', - 'Line' => '59', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1695' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_cipher_get_block_size', - 'Source' => 'ciphers.c', - 'SourceLine' => '253' - }, - '1146061' => { - 'Line' => '316', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1695' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_cipher_get_key_size', - 'Source' => 'ciphers.c' - }, - '1146202' => { - 'Line' => '284', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1695' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_cipher_get_iv_size', - 'Source' => 'ciphers.c' - }, - '1156358' => { - 'Header' => 'x509.h', - 'Line' => '182', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'hostname', - 'type' => '105' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_check_hostname2', - 'Source' => 'hostname-verify.c', - 'SourceLine' => '120' - }, - '1157713' => { - 'Line' => '45', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'hostname', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_check_hostname', - 'Source' => 'hostname-verify.c' - }, - '1179801' => { - 'Line' => '1267', - 'Param' => { - '0' => { - 'name' => 'cert_list', - 'type' => '1170871' - }, - '1' => { - 'name' => 'cert_list_length', - 'type' => '70' - }, - '2' => { - 'name' => 'CA_list', - 'type' => '1170871' - }, - '3' => { - 'name' => 'CA_list_length', - 'type' => '70' - }, - '4' => { - 'name' => 'CRL_list', - 'type' => '1180076' - }, - '5' => { - 'name' => 'CRL_list_length', - 'type' => '70' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '130' - }, - '7' => { - 'name' => 'verify', - 'offset' => '8', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_list_verify', - 'Source' => 'verify.c' - }, - '1180087' => { - 'Header' => 'x509.h', - 'Line' => '900', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'CA_list', - 'type' => '1170871' - }, - '2' => { - 'name' => 'CA_list_length', - 'type' => '70' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - }, - '4' => { - 'name' => 'verify', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_verify', - 'Source' => 'verify.c', - 'SourceLine' => '1321' - }, - '1180253' => { - 'Line' => '1347', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'issuer', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_check_issuer', - 'Source' => 'verify.c' - }, - '1180459' => { - 'Header' => 'x509.h', - 'Line' => '904', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'trusted_cas', - 'type' => '1170871' - }, - '2' => { - 'name' => 'tcas_size', - 'type' => '70' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - }, - '4' => { - 'name' => 'verify', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_verify', - 'Source' => 'verify.c', - 'SourceLine' => '1392' - }, - '1181859' => { - 'Header' => 'x509.h', - 'Line' => '917', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '5416' - }, - '4' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_key_purpose_oid', - 'Source' => 'x509.c', - 'SourceLine' => '2950' - }, - '1181939' => { - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'critical', - 'type' => '17947' - }, - '2' => { - 'name' => 'ca', - 'type' => '17947' - }, - '3' => { - 'name' => 'pathlen', - 'type' => '13711' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_basic_constraints' - }, - '1181962' => { - 'Line' => '113', - 'Param' => { - '0' => { - 'name' => 'param', - 'type' => '2648' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_sec_param_to_symmetric_bits', - 'Source' => 'secparams.c' - }, - '1182020' => { - 'Line' => '156', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'nc', - 'type' => '1018880' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - }, - '3' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_name_constraints', - 'Source' => 'name_constraints.c' - }, - '1182056' => { - 'Line' => '606', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1018880' - }, - '1' => { - 'name' => 'type', - 'type' => '370754' - }, - '2' => { - 'name' => 'cert', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_x509_name_constraints_check_crt', - 'Source' => 'name_constraints.c' - }, - '1182114' => { - 'Line' => '2781', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'crl_list', - 'type' => '1180076' - }, - '2' => { - 'name' => 'crl_list_length', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_check_revocation', - 'Source' => 'x509.c' - }, - '1182162' => { - 'Header' => 'x509.h', - 'Line' => '404', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_ca_status', - 'Source' => 'x509.c', - 'SourceLine' => '1749' - }, - '1190328' => { - 'Line' => '422', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'dn', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn2', - 'Source' => 'x509.c' - }, - '1190484' => { - 'Line' => '464', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'indx', - 'type' => '70' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '130' - }, - '4' => { - 'name' => 'buf', - 'type' => '184' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn_by_oid', - 'Source' => 'x509.c' - }, - '1190836' => { - 'Line' => '506', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn_oid', - 'Source' => 'x509.c' - }, - '1191219' => { - 'Header' => 'x509.h', - 'Line' => '173', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'dn', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_dn2', - 'Source' => 'x509.c', - 'SourceLine' => '565' - }, - '1191727' => { - 'Line' => '648', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_dn_oid', - 'Source' => 'x509.c' - }, - '1194714' => { - 'Line' => '807', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'activation', - 'type' => '17423' - }, - '2' => { - 'name' => 'expiration', - 'type' => '17423' - }, - '3' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_private_key_usage_period', - 'Source' => 'x509.c' - }, - '1195886' => { - 'Line' => '977', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'alt', - 'type' => '184' - }, - '3' => { - 'name' => 'alt_size', - 'type' => '5416' - }, - '4' => { - 'name' => 'alt_type', - 'type' => '17947' - }, - '5' => { - 'name' => 'serial', - 'type' => '184' - }, - '6' => { - 'name' => 'serial_size', - 'offset' => '0', - 'type' => '5416' - }, - '7' => { - 'name' => 'critical', - 'offset' => '8', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_authority_key_gn_serial', - 'Source' => 'x509.c' - }, - '1199559' => { - 'Line' => '1507', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'ian', - 'type' => '184' - }, - '3' => { - 'name' => 'ian_size', - 'type' => '5416' - }, - '4' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_issuer_alt_name', - 'Source' => 'x509.c' - }, - '1199734' => { - 'Header' => 'x509.h', - 'Line' => '373', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'san', - 'type' => '184' - }, - '3' => { - 'name' => 'san_size', - 'type' => '5416' - }, - '4' => { - 'name' => 'san_type', - 'type' => '17947' - }, - '5' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_subject_alt_name2', - 'Source' => 'x509.c', - 'SourceLine' => '1541' - }, - '1199927' => { - 'Line' => '1579', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'ian', - 'type' => '184' - }, - '3' => { - 'name' => 'ian_size', - 'type' => '5416' - }, - '4' => { - 'name' => 'ian_type', - 'type' => '17947' - }, - '5' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_issuer_alt_name2', - 'Source' => 'x509.c' - }, - '1200120' => { - 'Line' => '1620', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_subject_alt_othername_oid', - 'Source' => 'x509.c' - }, - '1200279' => { - 'Line' => '1661', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'ret', - 'type' => '184' - }, - '3' => { - 'name' => 'ret_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_issuer_alt_othername_oid', - 'Source' => 'x509.c' - }, - '1201517' => { - 'Header' => 'x509.h', - 'Line' => '453', - 'Param' => { - '0' => { - 'name' => 'policy', - 'type' => '1201578' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_policy_release', - 'Source' => 'x509.c', - 'SourceLine' => '1878' - }, - '1201584' => { - 'Line' => '1907', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'policy', - 'type' => '1201578' - }, - '3' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_policy', - 'Source' => 'x509.c' - }, - '1202101' => { - 'Line' => '1982', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'indx', - 'type' => '70' - }, - '3' => { - 'name' => 'buf', - 'type' => '184' - }, - '4' => { - 'name' => 'buf_size', - 'type' => '5416' - }, - '5' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_extension_by_oid', - 'Source' => 'x509.c' - }, - '1202488' => { - 'Line' => '2043', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'indx', - 'type' => '70' - }, - '3' => { - 'name' => 'output', - 'type' => '3665' - }, - '4' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_extension_by_oid2', - 'Source' => 'x509.c' - }, - '1202716' => { - 'Line' => '2089', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_extension_oid', - 'Source' => 'x509.c' - }, - '1203507' => { - 'Line' => '2204', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'data', - 'type' => '184' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_extension_data', - 'Source' => 'x509.c' - }, - '1203875' => { - 'Header' => 'x509.h', - 'Line' => '581', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'dn', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_raw_issuer_dn', - 'Source' => 'x509.c', - 'SourceLine' => '2250' - }, - '1204057' => { - 'Line' => '2273', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'dn', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_raw_dn', - 'Source' => 'x509.c' - }, - '1204239' => { - 'Line' => '2306', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'dn', - 'type' => '993661' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_subject', - 'Source' => 'x509.c' - }, - '1204381' => { - 'Line' => '2326', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'dn', - 'type' => '993661' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_issuer', - 'Source' => 'x509.c' - }, - '1204523' => { - 'Line' => '2360', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '985583' - }, - '1' => { - 'name' => 'irdn', - 'type' => '70' - }, - '2' => { - 'name' => 'iava', - 'type' => '70' - }, - '3' => { - 'name' => 'ava', - 'type' => '1205392' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_dn_get_rdn_ava', - 'Source' => 'x509.c' - }, - '1208430' => { - 'Line' => '2807', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'hash', - 'type' => '363186' - }, - '2' => { - 'name' => 'mand', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_preferred_hash_algorithm', - 'Source' => 'x509.c' - }, - '1208804' => { - 'Line' => '2862', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'san', - 'type' => '184' - }, - '3' => { - 'name' => 'san_size', - 'type' => '5416' - }, - '4' => { - 'name' => 'reason_flags', - 'type' => '17947' - }, - '5' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_crl_dist_points', - 'Source' => 'x509.c' - }, - '1209965' => { - 'Line' => '3026', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'm', - 'type' => '3665' - }, - '2' => { - 'name' => 'e', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_pk_rsa_raw', - 'Source' => 'x509.c' - }, - '1210474' => { - 'Line' => '3084', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'p', - 'type' => '3665' - }, - '2' => { - 'name' => 'q', - 'type' => '3665' - }, - '3' => { - 'name' => 'g', - 'type' => '3665' - }, - '4' => { - 'name' => 'y', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_pk_dsa_raw', - 'Source' => 'x509.c' - }, - '1212333' => { - 'Header' => 'x509.h', - 'Line' => '130', - 'Param' => { - '0' => { - 'name' => 'certs', - 'type' => '564554' - }, - '1' => { - 'name' => 'size', - 'type' => '17947' - }, - '2' => { - 'name' => 'data', - 'type' => '3587' - }, - '3' => { - 'name' => 'format', - 'type' => '177145' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_list_import2', - 'Source' => 'x509.c', - 'SourceLine' => '3176' - }, - '1213240' => { - 'Line' => '3634', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'what', - 'type' => '70' - }, - '3' => { - 'name' => 'data', - 'type' => '3665' - }, - '4' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_authority_info_access', - 'Source' => 'x509.c' - }, - '1221280' => { - 'Line' => '205', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'dn', - 'type' => '105' - }, - '2' => { - 'name' => 'err', - 'type' => '225961' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_dn', - 'Source' => 'x509_dn.c' - }, - '1221393' => { - 'Line' => '225', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'dn', - 'type' => '105' - }, - '2' => { - 'name' => 'err', - 'type' => '225961' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_issuer_dn', - 'Source' => 'x509_dn.c' - }, - '1221506' => { - 'Line' => '246', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'dn', - 'type' => '105' - }, - '2' => { - 'name' => 'err', - 'type' => '225961' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_dn', - 'Source' => 'x509_dn.c' - }, - '1225949' => { - 'Line' => '434', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'ca', - 'type' => '130' - }, - '2' => { - 'name' => 'pathLenConstraint', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_basic_constraints', - 'Source' => 'x509_write.c' - }, - '1226026' => { - 'Line' => '1416', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'issuer', - 'type' => '111797' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '111762' - }, - '3' => { - 'name' => 'dig', - 'type' => '109671' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_privkey_sign', - 'Source' => 'x509_write.c' - }, - '1226116' => { - 'Line' => '860', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'issuer', - 'type' => '111797' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '111785' - }, - '3' => { - 'name' => 'dig', - 'type' => '109671' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_sign2', - 'Source' => 'x509_write.c' - }, - '1226226' => { - 'Line' => '62', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '130' - }, - '3' => { - 'name' => 'name', - 'type' => '291' - }, - '4' => { - 'name' => 'sizeof_name', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_dn_by_oid', - 'Source' => 'x509_write.c' - }, - '1226390' => { - 'Line' => '100', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '130' - }, - '3' => { - 'name' => 'name', - 'type' => '291' - }, - '4' => { - 'name' => 'sizeof_name', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_issuer_dn_by_oid', - 'Source' => 'x509_write.c' - }, - '1226554' => { - 'Line' => '132', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'eecrt', - 'type' => '111797' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '130' - }, - '3' => { - 'name' => 'name', - 'type' => '291' - }, - '4' => { - 'name' => 'sizeof_name', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_proxy_dn', - 'Source' => 'x509_write.c' - }, - '1226851' => { - 'Line' => '179', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'version', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_version', - 'Source' => 'x509_write.c' - }, - '1227116' => { - 'Line' => '217', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'key', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_key', - 'Source' => 'x509_write.c' - }, - '1227278' => { - 'Line' => '254', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'crq', - 'type' => '629572' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_crq', - 'Source' => 'x509_write.c' - }, - '1227710' => { - 'Line' => '301', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'crq', - 'type' => '629572' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_crq_extensions', - 'Source' => 'x509_write.c' - }, - '1228240' => { - 'Line' => '391', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'buf', - 'type' => '291' - }, - '3' => { - 'name' => 'sizeof_buf', - 'type' => '52' - }, - '4' => { - 'name' => 'critical', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_extension_by_oid', - 'Source' => 'x509_write.c' - }, - '1228761' => { - 'Line' => '481', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'ca', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_ca_status', - 'Source' => 'x509_write.c' - }, - '1229117' => { - 'Line' => '596', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'type', - 'type' => '370754' - }, - '2' => { - 'name' => 'data', - 'type' => '291' - }, - '3' => { - 'name' => 'data_size', - 'type' => '130' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_subject_alt_name', - 'Source' => 'x509_write.c' - }, - '1229708' => { - 'Line' => '548', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'type', - 'type' => '370754' - }, - '2' => { - 'name' => 'data_string', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_subject_alternative_name', - 'Source' => 'x509_write.c' - }, - '1229906' => { - 'Line' => '679', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'type', - 'type' => '370754' - }, - '2' => { - 'name' => 'data', - 'type' => '291' - }, - '3' => { - 'name' => 'data_size', - 'type' => '130' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_issuer_alt_name', - 'Source' => 'x509_write.c' - }, - '1230497' => { - 'Line' => '761', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'pathLenConstraint', - 'type' => '70' - }, - '2' => { - 'name' => 'policyLanguage', - 'type' => '105' - }, - '3' => { - 'name' => 'policy', - 'type' => '105' - }, - '4' => { - 'name' => 'sizeof_policy', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_proxy', - 'Source' => 'x509_write.c' - }, - '1230822' => { - 'Line' => '812', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'activation', - 'type' => '225' - }, - '2' => { - 'name' => 'expiration', - 'type' => '225' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_private_key_usage_period', - 'Source' => 'x509_write.c' - }, - '1231109' => { - 'Line' => '931', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'act_time', - 'type' => '225' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_activation_time', - 'Source' => 'x509_write.c' - }, - '1231271' => { - 'Line' => '957', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'exp_time', - 'type' => '225' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_expiration_time', - 'Source' => 'x509_write.c' - }, - '1231433' => { - 'Line' => '986', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'serial', - 'type' => '291' - }, - '2' => { - 'name' => 'serial_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_serial', - 'Source' => 'x509_write.c' - }, - '1231698' => { - 'Line' => '1068', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'type', - 'type' => '370754' - }, - '2' => { - 'name' => 'data', - 'type' => '291' - }, - '3' => { - 'name' => 'data_size', - 'type' => '130' - }, - '4' => { - 'name' => 'reason_flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_crl_dist_points2', - 'Source' => 'x509_write.c' - }, - '1232366' => { - 'Line' => '1042', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'type', - 'type' => '370754' - }, - '2' => { - 'name' => 'data_string', - 'type' => '291' - }, - '3' => { - 'name' => 'reason_flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_crl_dist_points', - 'Source' => 'x509_write.c' - }, - '1232531' => { - 'Line' => '1154', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '111797' - }, - '1' => { - 'name' => 'src', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_cpy_crl_dist_points', - 'Source' => 'x509_write.c' - }, - '1232814' => { - 'Line' => '1204', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'id', - 'type' => '291' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_subject_key_id', - 'Source' => 'x509_write.c' - }, - '1233274' => { - 'Line' => '1270', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'id', - 'type' => '291' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_authority_key_id', - 'Source' => 'x509_write.c' - }, - '1233725' => { - 'Line' => '1335', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'oid', - 'type' => '291' - }, - '2' => { - 'name' => 'critical', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_key_purpose_oid', - 'Source' => 'x509_write.c' - }, - '1235136' => { - 'Line' => '912', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'issuer', - 'type' => '111797' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_sign', - 'Source' => 'x509_write.c' - }, - '1235264' => { - 'Line' => '1465', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'what', - 'type' => '70' - }, - '2' => { - 'name' => 'data', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_authority_info_access', - 'Source' => 'x509_write.c' - }, - '1236001' => { - 'Line' => '1550', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'policy', - 'type' => '1236541' - }, - '2' => { - 'name' => 'critical', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_policy', - 'Source' => 'x509_write.c' - }, - '1236801' => { - 'Line' => '1505', - 'Param' => { - '0' => { - 'name' => 'pathLenConstraint', - 'type' => '70' - }, - '1' => { - 'name' => 'policyLanguage', - 'type' => '105' - }, - '2' => { - 'name' => 'policy', - 'type' => '105' - }, - '3' => { - 'name' => 'sizeof_policy', - 'type' => '52' - }, - '4' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_proxy', - 'Source' => 'x509_ext.c' - }, - '1236812' => { - 'Line' => '1215', - 'Param' => { - '0' => { - 'name' => 'activation', - 'type' => '225' - }, - '1' => { - 'name' => 'expiration', - 'type' => '225' - }, - '2' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_private_key_usage_period', - 'Source' => 'x509_ext.c' - }, - '1236856' => { - 'Line' => '2245', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1020465' - }, - '1' => { - 'name' => 'type', - 'type' => '370754' - }, - '2' => { - 'name' => 'san', - 'type' => '3587' - }, - '3' => { - 'name' => 'reasons', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_dist_points_set', - 'Source' => 'x509_ext.c' - }, - '1236867' => { - 'Line' => '2387', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1020465' - }, - '1' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_crl_dist_points', - 'Source' => 'x509_ext.c' - }, - '1236889' => { - 'Line' => '624', - 'Param' => { - '0' => { - 'name' => 'id', - 'type' => '3587' - }, - '1' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_subject_key_id', - 'Source' => 'x509_ext.c' - }, - '1236934' => { - 'Line' => '2864', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1020531' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_key_purpose_set', - 'Source' => 'x509_ext.c' - }, - '1236945' => { - 'Line' => '2992', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1020531' - }, - '1' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_key_purposes', - 'Source' => 'x509_ext.c' - }, - '1237045' => { - 'Line' => '2590', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1020487' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'san_type', - 'type' => '130' - }, - '3' => { - 'name' => 'san', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_aia_set', - 'Source' => 'x509_ext.c' - }, - '1237056' => { - 'Line' => '2745', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1020487' - }, - '1' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_aia', - 'Source' => 'x509_ext.c' - }, - '1237100' => { - 'Line' => '1732', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1020553' - }, - '1' => { - 'name' => 'policy', - 'type' => '1236541' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_policies_set', - 'Source' => 'x509_ext.c' - }, - '1237111' => { - 'Line' => '1987', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1020553' - }, - '1' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_policies', - 'Source' => 'x509_ext.c' - }, - '1242920' => { - 'Line' => '310', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1018880' - }, - '1' => { - 'name' => 'type', - 'type' => '370754' - }, - '2' => { - 'name' => 'name', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_name_constraints_add_permitted', - 'Source' => 'name_constraints.c' - }, - '1243042' => { - 'Line' => '330', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1018880' - }, - '1' => { - 'name' => 'type', - 'type' => '370754' - }, - '2' => { - 'name' => 'name', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_name_constraints_add_excluded', - 'Source' => 'name_constraints.c' - }, - '1243164' => { - 'Line' => '351', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'nc', - 'type' => '1018880' - }, - '2' => { - 'name' => 'critical', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_name_constraints', - 'Source' => 'name_constraints.c' - }, - '1244760' => { - 'Line' => '576', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1018880' - }, - '1' => { - 'name' => 'type', - 'type' => '370754' - }, - '2' => { - 'name' => 'name', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_x509_name_constraints_check', - 'Source' => 'name_constraints.c' - }, - '1247511' => { - 'Line' => '431', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1018880' - }, - '1' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_name_constraints', - 'Source' => 'x509_ext.c' - }, - '12483' => { - 'Line' => '227', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'data', - 'type' => '291' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - }, - '3' => { - 'name' => 'range', - 'type' => '12472' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '214', - 'ShortName' => 'gnutls_record_send_range', - 'Source' => 'gnutls_range.c' - }, - '1253944' => { - 'Line' => '502', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '1249853' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_trust_list_iter_deinit', - 'Source' => 'verify-high.c' - }, - '1254078' => { - 'Line' => '409', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'iter', - 'type' => '1254865' - }, - '2' => { - 'name' => 'crt', - 'type' => '112890' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_iter_get_ca', - 'Source' => 'verify-high.c' - }, - '1254871' => { - 'Header' => 'x509.h', - 'Line' => '1285', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'clist', - 'type' => '1170871' - }, - '2' => { - 'name' => 'clist_size', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_remove_cas', - 'Source' => 'verify-high.c', - 'SourceLine' => '560' - }, - '1255181' => { - 'Line' => '640', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'cert', - 'type' => '111797' - }, - '2' => { - 'name' => 'name', - 'type' => '291' - }, - '3' => { - 'name' => 'name_size', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_add_named_crt', - 'Source' => 'verify-high.c' - }, - '1256625' => { - 'Header' => 'x509.h', - 'Line' => '1271', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'dn', - 'type' => '3587' - }, - '2' => { - 'name' => 'issuer', - 'type' => '112890' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_get_issuer_by_dn', - 'Source' => 'verify-high.c', - 'SourceLine' => '956' - }, - '1257193' => { - 'Line' => '1304', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'cert', - 'type' => '111797' - }, - '2' => { - 'name' => 'name', - 'type' => '291' - }, - '3' => { - 'name' => 'name_size', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - }, - '5' => { - 'name' => 'voutput', - 'type' => '17947' - }, - '6' => { - 'name' => 'func', - 'offset' => '0', - 'type' => '1178041' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_verify_named_crt', - 'Source' => 'verify-high.c' - }, - '1259055' => { - 'Line' => '1041', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'cert_list', - 'type' => '112890' - }, - '2' => { - 'name' => 'cert_list_size', - 'type' => '130' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - }, - '4' => { - 'name' => 'voutput', - 'type' => '17947' - }, - '5' => { - 'name' => 'func', - 'type' => '1178041' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_verify_crt', - 'Source' => 'verify-high.c' - }, - '1259813' => { - 'Line' => '49', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'email', - 'type' => '105' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_check_email', - 'Source' => 'email-verify.c' - }, - '1264317' => { - 'Line' => '136', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'cas', - 'type' => '3587' - }, - '2' => { - 'name' => 'type', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_remove_trust_mem', - 'Source' => 'verify-high2.c' - }, - '1266809' => { - 'Line' => '489', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'ca_file', - 'type' => '105' - }, - '2' => { - 'name' => 'type', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_remove_trust_file', - 'Source' => 'verify-high2.c' - }, - '1277768' => { - 'Line' => '753', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '999738' - }, - '1' => { - 'name' => 'san_type', - 'type' => '130' - }, - '2' => { - 'name' => 'san', - 'type' => '3587' - }, - '3' => { - 'name' => 'othername_oid', - 'type' => '105' - }, - '4' => { - 'name' => 'serial', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_aki_set_cert_issuer', - 'Source' => 'x509_ext.c' - }, - '1307184' => { - 'Line' => '536', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - }, - '1' => { - 'name' => 'digest', - 'type' => '109671' - }, - '2' => { - 'name' => 'issuer_name_hash', - 'type' => '3587' - }, - '3' => { - 'name' => 'issuer_key_hash', - 'type' => '3587' - }, - '4' => { - 'name' => 'serial_number', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_add_cert_id', - 'Source' => 'ocsp.c' - }, - '1307286' => { - 'Header' => 'ocsp.h', - 'Line' => '173', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - }, - '1' => { - 'name' => 'indx', - 'type' => '130' - }, - '2' => { - 'name' => 'oid', - 'type' => '3665' - }, - '3' => { - 'name' => 'critical', - 'type' => '17947' - }, - '4' => { - 'name' => 'data', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_get_extension', - 'Source' => 'ocsp.c', - 'SourceLine' => '732' - }, - '1307444' => { - 'Line' => '883', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - }, - '1' => { - 'name' => 'critical', - 'type' => '130' - }, - '2' => { - 'name' => 'nonce', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_set_nonce', - 'Source' => 'ocsp.c' - }, - '1307562' => { - 'Header' => 'ocsp.h', - 'Line' => '205', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_get_status', - 'Source' => 'ocsp.c', - 'SourceLine' => '967' - }, - '1307644' => { - 'Header' => 'ocsp.h', - 'Line' => '220', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'type', - 'type' => '130' - }, - '2' => { - 'name' => 'raw', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_get_responder_raw_id', - 'Source' => 'ocsp.c', - 'SourceLine' => '1170' - }, - '1307772' => { - 'Header' => 'ocsp.h', - 'Line' => '245', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'sig', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_get_signature', - 'Source' => 'ocsp.c', - 'SourceLine' => '1731' - }, - '1308319' => { - 'Line' => '60', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1308543' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_init', - 'Source' => 'ocsp.c' - }, - '1308549' => { - 'Line' => '88', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_ocsp_req_deinit', - 'Source' => 'ocsp.c' - }, - '1309092' => { - 'Line' => '179', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_import', - 'Source' => 'ocsp.c' - }, - '1309526' => { - 'Line' => '353', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'data', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_export', - 'Source' => 'ocsp.c' - }, - '1309740' => { - 'Header' => 'ocsp.h', - 'Line' => '153', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_get_version', - 'Source' => 'ocsp.c', - 'SourceLine' => '372' - }, - '1310012' => { - 'Header' => 'ocsp.h', - 'Line' => '155', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - }, - '1' => { - 'name' => 'indx', - 'type' => '130' - }, - '2' => { - 'name' => 'digest', - 'type' => '363186' - }, - '3' => { - 'name' => 'issuer_name_hash', - 'type' => '3665' - }, - '4' => { - 'name' => 'issuer_key_hash', - 'type' => '3665' - }, - '5' => { - 'name' => 'serial_number', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_get_cert_id', - 'Source' => 'ocsp.c', - 'SourceLine' => '425' - }, - '1311477' => { - 'Line' => '640', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - }, - '1' => { - 'name' => 'digest', - 'type' => '109671' - }, - '2' => { - 'name' => 'issuer', - 'type' => '111797' - }, - '3' => { - 'name' => 'cert', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_add_cert', - 'Source' => 'ocsp.c' - }, - '1312645' => { - 'Line' => '321', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - }, - '1' => { - 'name' => 'data', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_export', - 'Source' => 'ocsp.c' - }, - '1313038' => { - 'Line' => '808', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'critical', - 'type' => '130' - }, - '3' => { - 'name' => 'data', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_set_extension', - 'Source' => 'ocsp.c' - }, - '1313241' => { - 'Header' => 'ocsp.h', - 'Line' => '183', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - }, - '1' => { - 'name' => 'critical', - 'type' => '17947' - }, - '2' => { - 'name' => 'nonce', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_get_nonce', - 'Source' => 'ocsp.c', - 'SourceLine' => '837' - }, - '1313894' => { - 'Line' => '931', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_randomize_nonce', - 'Source' => 'ocsp.c' - }, - '1315249' => { - 'Header' => 'ocsp.h', - 'Line' => '206', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'response_type_oid', - 'type' => '3665' - }, - '2' => { - 'name' => 'response', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_get_response', - 'Source' => 'ocsp.c', - 'SourceLine' => '1020' - }, - '1315468' => { - 'Header' => 'ocsp.h', - 'Line' => '211', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_get_version', - 'Source' => 'ocsp.c', - 'SourceLine' => '1066' - }, - '1315740' => { - 'Header' => 'ocsp.h', - 'Line' => '212', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'dn', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_get_responder', - 'Source' => 'ocsp.c', - 'SourceLine' => '1110' - }, - '1316331' => { - 'Header' => 'ocsp.h', - 'Line' => '224', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_ocsp_resp_get_produced', - 'Source' => 'ocsp.c', - 'SourceLine' => '1238' - }, - '1319218' => { - 'Header' => 'ocsp.h', - 'Line' => '236', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'indx', - 'type' => '130' - }, - '2' => { - 'name' => 'oid', - 'type' => '3665' - }, - '3' => { - 'name' => 'critical', - 'type' => '17947' - }, - '4' => { - 'name' => 'data', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_get_extension', - 'Source' => 'ocsp.c', - 'SourceLine' => '1583' - }, - '1319825' => { - 'Header' => 'ocsp.h', - 'Line' => '241', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'critical', - 'type' => '17947' - }, - '2' => { - 'name' => 'nonce', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_get_nonce', - 'Source' => 'ocsp.c', - 'SourceLine' => '1661' - }, - '1320143' => { - 'Header' => 'ocsp.h', - 'Line' => '244', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_get_signature_algorithm', - 'Source' => 'ocsp.c', - 'SourceLine' => '1701' - }, - '1321039' => { - 'Header' => 'ocsp.h', - 'Line' => '247', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'certs', - 'type' => '564554' - }, - '2' => { - 'name' => 'ncerts', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_get_certs', - 'Source' => 'ocsp.c', - 'SourceLine' => '1773' - }, - '1322856' => { - 'Line' => '2156', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'trustlist', - 'type' => '113318' - }, - '2' => { - 'name' => 'verify', - 'type' => '17947' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_verify', - 'Source' => 'ocsp.c' - }, - '1333822' => { - 'Line' => '174', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '1306782' - }, - '1' => { - 'name' => 'format', - 'type' => '1328076' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_req_print', - 'Source' => 'ocsp_output.c' - }, - '1335691' => { - 'Line' => '644', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'format', - 'type' => '1328076' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_print', - 'Source' => 'ocsp_output.c' - }, - '13418' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1558', - 'Return' => '3671', - 'ShortName' => 'gnutls_free', - 'Source' => 'gnutls_mem.c', - 'SourceLine' => '30' - }, - '13430' => { - 'Data' => 1, - 'Header' => 'gnutls_mpi.h', - 'Line' => '31', - 'Return' => '5428', - 'ShortName' => '_gnutls_mpi_ops', - 'Source' => 'mpi.c', - 'SourceLine' => '353' - }, - '13441' => { - 'Data' => 1, - 'Header' => 'gnutls_global.h', - 'Line' => '43', - 'Return' => '70', - 'ShortName' => '_gnutls_log_level', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '66' - }, - '13463' => { - 'Line' => '737', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_dtls_get_data_mtu', - 'Source' => 'gnutls_dtls.c' - }, - '13474' => { - 'Header' => 'gnutls_errors.h', - 'Line' => '43', - 'Param' => { - '0' => { - 'name' => 'level', - 'type' => '70' - }, - '1' => { - 'name' => 'fmt', - 'type' => '105' - }, - '2' => { - 'type' => '-1' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_log', - 'Source' => 'gnutls_errors.c', - 'SourceLine' => '623' - }, - '1348849' => { - 'Line' => '258', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_get_max_size', - 'Source' => 'max_record.c' - }, - '1348898' => { - 'Line' => '287', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '214', - 'ShortName' => 'gnutls_record_set_max_size', - 'Source' => 'max_record.c' - }, - '136538' => { - 'Line' => '2389', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_rehandshake', - 'Source' => 'gnutls_handshake.c' - }, - '136710' => { - 'Line' => '2627', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'ms', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_timeout', - 'Source' => 'gnutls_handshake.c' - }, - '1375422' => { - 'Header' => 'gnutls.h', - 'Line' => '1036', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'data', - 'type' => '184' - }, - '2' => { - 'name' => 'data_length', - 'type' => '5416' - }, - '3' => { - 'name' => 'type', - 'type' => '17947' - }, - '4' => { - 'name' => 'indx', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_server_name_get', - 'Source' => 'server_name.c', - 'SourceLine' => '283' - }, - '1375911' => { - 'Line' => '376', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'type', - 'type' => '1365156' - }, - '2' => { - 'name' => 'name', - 'type' => '291' - }, - '3' => { - 'name' => 'name_length', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_server_name_set', - 'Source' => 'server_name.c' - }, - '1392323' => { - 'Line' => '424', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'indx', - 'type' => '52' - }, - '2' => { - 'name' => 'algo', - 'type' => '469673' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_sign_algorithm_get_requested', - 'Source' => 'signature.c' - }, - '1392604' => { - 'Line' => '469', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_sign_algorithm_get', - 'Source' => 'signature.c' - }, - '1392653' => { - 'Line' => '485', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_sign_algorithm_get_client', - 'Source' => 'signature.c' - }, - '1407081' => { - 'Line' => '425', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_safe_renegotiation_status', - 'Source' => 'safe_renegotiation.c' - }, - '1422031' => { - 'Line' => '446', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_ticket_key_generate', - 'Source' => 'session_ticket.c' - }, - '1422293' => { - 'Line' => '504', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'key', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_ticket_enable_server', - 'Source' => 'session_ticket.c' - }, - '145246' => { - 'Line' => '2532', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_handshake', - 'Source' => 'gnutls_handshake.c' - }, - '1464145' => { - 'Line' => '76', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'type', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_heartbeat_allowed', - 'Source' => 'heartbeat.c' - }, - '1466137' => { - 'Line' => '55', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'type', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_heartbeat_enable', - 'Source' => 'heartbeat.c' - }, - '1466372' => { - 'Line' => '159', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'data_size', - 'type' => '52' - }, - '2' => { - 'name' => 'max_tries', - 'type' => '130' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_heartbeat_ping', - 'Source' => 'heartbeat.c' - }, - '1467613' => { - 'Line' => '284', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_heartbeat_pong', - 'Source' => 'heartbeat.c' - }, - '1469121' => { - 'Line' => '400', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_heartbeat_get_timeout', - 'Source' => 'heartbeat.c' - }, - '1469289' => { - 'Line' => '431', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'retrans_timeout', - 'type' => '130' - }, - '2' => { - 'name' => 'total_timeout', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_heartbeat_set_timeouts', - 'Source' => 'heartbeat.c' - }, - '1487566' => { - 'Line' => '418', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '111966' - }, - '1' => { - 'name' => 'ocsp_func', - 'type' => '112213' - }, - '2' => { - 'name' => 'ptr', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_ocsp_status_request_function', - 'Source' => 'status_request.c' - }, - '1487638' => { - 'Line' => '459', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '111966' - }, - '1' => { - 'name' => 'response_file', - 'type' => '105' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_ocsp_status_request_file', - 'Source' => 'status_request.c' - }, - '1513057' => { - 'Line' => '124', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_session_ext_master_secret_status', - 'Source' => 'ext_master_secret.c' - }, - '1525038' => { - 'Line' => '137', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_session_etm_status', - 'Source' => 'etm.c' - }, - '1538447' => { - 'Line' => '212', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'protocol', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_alpn_get_selected_protocol', - 'Source' => 'alpn.c' - }, - '1538683' => { - 'Line' => '259', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'protocols', - 'type' => '3587' - }, - '2' => { - 'name' => 'protocols_size', - 'type' => '130' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_alpn_set_protocols', - 'Source' => 'alpn.c' - }, - '1550845' => { - 'Line' => '306', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'profile', - 'type' => '1550923' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srtp_get_selected_profile', - 'Source' => 'srtp.c' - }, - '1553439' => { - 'Line' => '126', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - }, - '1' => { - 'name' => 'profile', - 'type' => '1550923' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srtp_get_profile_id', - 'Source' => 'srtp.c' - }, - '1553529' => { - 'Line' => '150', - 'Param' => { - '0' => { - 'name' => 'profile', - 'type' => '1542727' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_srtp_get_profile_name', - 'Source' => 'srtp.c' - }, - '1553874' => { - 'Line' => '346', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'mki', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srtp_get_mki', - 'Source' => 'srtp.c' - }, - '1554171' => { - 'Line' => '387', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'mki', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srtp_set_mki', - 'Source' => 'srtp.c' - }, - '1554474' => { - 'Line' => '431', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'profile', - 'type' => '1542727' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srtp_set_profile', - 'Source' => 'srtp.c' - }, - '1554736' => { - 'Line' => '476', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'profiles', - 'type' => '105' - }, - '2' => { - 'name' => 'err_pos', - 'type' => '225961' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srtp_set_profile_direct', - 'Source' => 'srtp.c' - }, - '1555143' => { - 'Line' => '550', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'key_material', - 'type' => '184' - }, - '2' => { - 'name' => 'key_material_size', - 'type' => '130' - }, - '3' => { - 'name' => 'client_key', - 'type' => '3665' - }, - '4' => { - 'name' => 'client_salt', - 'type' => '3665' - }, - '5' => { - 'name' => 'server_key', - 'type' => '3665' - }, - '6' => { - 'name' => 'server_salt', - 'offset' => '0', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srtp_get_keys', - 'Source' => 'srtp.c' - }, - '157036' => { - 'Header' => 'gnutls.h', - 'Line' => '1282', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'max', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_max_packet_length', - 'Source' => 'gnutls_handshake.c', - 'SourceLine' => '3320' - }, - '157095' => { - 'Line' => '3341', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2144', - 'ShortName' => 'gnutls_handshake_get_last_in', - 'Source' => 'gnutls_handshake.c' - }, - '157144' => { - 'Line' => '3361', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2144', - 'ShortName' => 'gnutls_handshake_get_last_out', - 'Source' => 'gnutls_handshake.c' - }, - '158339' => { - 'Header' => 'gnutls_str.h', - 'Line' => '74', - 'Param' => { - '0' => { - 'name' => 'buf', - 'type' => '10555' - }, - '1' => { - 'name' => 'pfx_size', - 'type' => '70' - }, - '2' => { - 'name' => 'data', - 'type' => '291' - }, - '3' => { - 'name' => 'data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => '_gnutls_buffer_append_data_prefix', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '750' - }, - '158361' => { - 'Line' => '242', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1869', - 'ShortName' => 'gnutls_auth_client_get_type', - 'Source' => 'gnutls_auth.c' - }, - '158373' => { - 'Line' => '222', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1869', - 'ShortName' => 'gnutls_auth_server_get_type', - 'Source' => 'gnutls_auth.c' - }, - '158407' => { - 'Header' => 'algorithms.h', - 'Line' => '78', - 'Param' => { - '0' => { - 'name' => 'c', - 'type' => '1971' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '7511', - 'ShortName' => '_gnutls_mac_to_entry', - 'Source' => 'mac.c', - 'SourceLine' => '57' - }, - '158718' => { - 'Header' => 'gnutls_str.h', - 'Line' => '113', - 'Param' => { - '0' => { - 'name' => '_old', - 'type' => '291' - }, - '1' => { - 'name' => 'oldlen', - 'type' => '52' - }, - '2' => { - 'name' => 'buffer', - 'type' => '208' - }, - '3' => { - 'name' => 'buffer_size', - 'type' => '52' - }, - '4' => { - 'name' => 'separator', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_bin2hex' - }, - '158740' => { - 'Header' => 'gnutls_str.h', - 'Line' => '68', - 'Param' => { - '0' => { - 'name' => 'buf', - 'type' => '10555' - }, - '1' => { - 'name' => 'pfx_size', - 'type' => '70' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_buffer_append_prefix' - }, - '158762' => { - 'Line' => '728', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'major', - 'type' => '123' - }, - '2' => { - 'name' => 'minor', - 'type' => '123' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_record_set_default_version', - 'Source' => 'gnutls_state.c' - }, - '158895' => { - 'Line' => '144', - 'Param' => { - '0' => { - 'name' => 'version', - 'type' => '2242' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_protocol_get_name', - 'Source' => 'protocols.c' - }, - '159218' => { - 'Line' => '351', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '482458', - 'ShortName' => 'gnutls_alert_get', - 'Source' => 'gnutls_alert.c' - }, - '1720921' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1733', - 'Return' => '3593', - 'ShortName' => 'gnutls_srp_4096_group_prime', - 'Source' => 'srp.c', - 'SourceLine' => '665' - }, - '1720943' => { - 'Data' => 1, - 'Line' => '661', - 'Return' => '3593', - 'ShortName' => 'gnutls_srp_4096_group_generator', - 'Source' => 'srp.c' - }, - '1720965' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1736', - 'Return' => '3593', - 'ShortName' => 'gnutls_srp_3072_group_prime', - 'Source' => 'srp.c', - 'SourceLine' => '569' - }, - '1720987' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1737', - 'Return' => '3593', - 'ShortName' => 'gnutls_srp_3072_group_generator', - 'Source' => 'srp.c', - 'SourceLine' => '565' - }, - '1721009' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1739', - 'Return' => '3593', - 'ShortName' => 'gnutls_srp_2048_group_prime', - 'Source' => 'srp.c', - 'SourceLine' => '511' - }, - '1721031' => { - 'Data' => 1, - 'Line' => '515', - 'Return' => '3593', - 'ShortName' => 'gnutls_srp_2048_group_generator', - 'Source' => 'srp.c' - }, - '1721053' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1742', - 'Return' => '3593', - 'ShortName' => 'gnutls_srp_1536_group_prime', - 'Source' => 'srp.c', - 'SourceLine' => '471' - }, - '1721075' => { - 'Data' => 1, - 'Line' => '475', - 'Return' => '3593', - 'ShortName' => 'gnutls_srp_1536_group_generator', - 'Source' => 'srp.c' - }, - '1721097' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1745', - 'Return' => '3593', - 'ShortName' => 'gnutls_srp_1024_group_prime', - 'Source' => 'srp.c', - 'SourceLine' => '438' - }, - '1721119' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1746', - 'Return' => '3593', - 'ShortName' => 'gnutls_srp_1024_group_generator', - 'Source' => 'srp.c', - 'SourceLine' => '442' - }, - '172715' => { - 'Header' => 'gnutls.h', - 'Line' => '913', - 'Param' => { - '0' => { - 'name' => 'error', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_strerror', - 'Source' => 'gnutls_errors.c', - 'SourceLine' => '456' - }, - '173045' => { - 'Line' => '438', - 'Param' => { - '0' => { - 'name' => 'error', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_perror', - 'Source' => 'gnutls_errors.c' - }, - '173144' => { - 'Line' => '497', - 'Param' => { - '0' => { - 'name' => 'error', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_strerror_name', - 'Source' => 'gnutls_errors.c' - }, - '173223' => { - 'Header' => 'gnutls_errors.h', - 'Line' => '42', - 'Param' => { - '0' => { - 'name' => 'asn_err', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => '_gnutls_asn2err', - 'Source' => 'gnutls_errors.c', - 'SourceLine' => '521' - }, - '173450' => { - 'Header' => 'gnutls_errors.h', - 'Line' => '57', - 'Param' => { - '0' => { - 'name' => 'prefix', - 'type' => '105' - }, - '1' => { - 'name' => 'a', - 'type' => '4648' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_mpi_log', - 'Source' => 'gnutls_errors.c', - 'SourceLine' => '557' - }, - '174681' => { - 'Data' => 1, - 'Header' => 'gnutls_global.h', - 'Line' => '41', - 'Return' => '165689', - 'ShortName' => '_gnutls_log_func', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '64' - }, - '174692' => { - 'Data' => 1, - 'Header' => 'gnutls_global.h', - 'Line' => '42', - 'Return' => '165723', - 'ShortName' => '_gnutls_audit_log_func', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '65' - }, - '1755342' => { - 'Line' => '310', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '3587' - }, - '1' => { - 'name' => 'result', - 'type' => '208' - }, - '2' => { - 'name' => 'result_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srp_base64_encode', - 'Source' => 'srp_sb64.c' - }, - '1755532' => { - 'Line' => '351', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '3587' - }, - '1' => { - 'name' => 'result', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srp_base64_encode2', - 'Source' => 'srp_sb64.c' - }, - '1755650' => { - 'Line' => '390', - 'Param' => { - '0' => { - 'name' => 'b64_data', - 'type' => '3587' - }, - '1' => { - 'name' => 'result', - 'type' => '208' - }, - '2' => { - 'name' => 'result_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srp_base64_decode', - 'Source' => 'srp_sb64.c' - }, - '1755840' => { - 'Line' => '432', - 'Param' => { - '0' => { - 'name' => 'b64_data', - 'type' => '3587' - }, - '1' => { - 'name' => 'result', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srp_base64_decode2', - 'Source' => 'srp_sb64.c' - }, - '1788223' => { - 'Line' => '86', - 'Return' => '1788252', - 'ShortName' => 'gnutls_certificate_type_list', - 'Source' => 'cert_types.c' - }, - '1800028' => { - 'Line' => '269', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1695' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_cipher_get_tag_size', - 'Source' => 'ciphers.c' - }, - '1800462' => { - 'Line' => '352', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1695', - 'ShortName' => 'gnutls_cipher_get_id', - 'Source' => 'ciphers.c' - }, - '1800580' => { - 'Line' => '381', - 'Return' => '1800684', - 'ShortName' => 'gnutls_cipher_list', - 'Source' => 'ciphers.c' - }, - '1816421' => { - 'Line' => '1451', - 'Param' => { - '0' => { - 'name' => 'kx_algorithm', - 'type' => '1815' - }, - '1' => { - 'name' => 'cipher_algorithm', - 'type' => '1695' - }, - '2' => { - 'name' => 'mac_algorithm', - 'type' => '1971' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_cipher_suite_get_name', - 'Source' => 'ciphersuites.c' - }, - '1816829' => { - 'Line' => '1516', - 'Param' => { - '0' => { - 'name' => 'idx', - 'type' => '52' - }, - '1' => { - 'name' => 'cs_id', - 'type' => '3186' - }, - '2' => { - 'name' => 'kx', - 'type' => '380249' - }, - '3' => { - 'name' => 'cipher', - 'type' => '1129064' - }, - '4' => { - 'name' => 'mac', - 'type' => '1816957' - }, - '5' => { - 'name' => 'min_version', - 'type' => '1816963' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_cipher_suite_info', - 'Source' => 'ciphersuites.c' - }, - '1817480' => { - 'Line' => '1648', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '210699' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'sidx', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_get_cipher_suite_index', - 'Source' => 'ciphersuites.c' - }, - '1821290' => { - 'Line' => '102', - 'Return' => '1821395', - 'ShortName' => 'gnutls_ecc_curve_list', - 'Source' => 'ecc.c' - }, - '1834165' => { - 'Line' => '213', - 'Return' => '1834264', - 'ShortName' => 'gnutls_kx_list', - 'Source' => 'kx.c' - }, - '1846788' => { - 'Line' => '105', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '109671' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_digest_get_name', - 'Source' => 'mac.c' - }, - '1846863' => { - 'Line' => '129', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '109671', - 'ShortName' => 'gnutls_digest_get_id', - 'Source' => 'mac.c' - }, - '1847091' => { - 'Line' => '178', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1971' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_mac_get_key_size', - 'Source' => 'mac.c' - }, - '1847166' => { - 'Line' => '198', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1971' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_mac_get_nonce_size', - 'Source' => 'mac.c' - }, - '1847241' => { - 'Line' => '218', - 'Return' => '1847341', - 'ShortName' => 'gnutls_mac_list', - 'Source' => 'mac.c' - }, - '1847368' => { - 'Line' => '245', - 'Return' => '1847468', - 'ShortName' => 'gnutls_digest_list', - 'Source' => 'mac.c' - }, - '1859763' => { - 'Line' => '187', - 'Return' => '1859862', - 'ShortName' => 'gnutls_protocol_list', - 'Source' => 'protocols.c' - }, - '1863382' => { - 'Line' => '143', - 'Return' => '113098', - 'ShortName' => 'gnutls_pk_list', - 'Source' => 'publickey.c' - }, - '1863515' => { - 'Line' => '173', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2348', - 'ShortName' => 'gnutls_pk_get_id', - 'Source' => 'publickey.c' - }, - '1870921' => { - 'Line' => '160', - 'Return' => '1871038', - 'ShortName' => 'gnutls_sign_list', - 'Source' => 'sign.c' - }, - '187192' => { - 'Line' => '120', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '2759' - }, - '1' => { - 'name' => 'prime', - 'type' => '3587' - }, - '2' => { - 'name' => 'generator', - 'type' => '3587' - }, - '3' => { - 'name' => 'key_bits', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_params_import_raw2', - 'Source' => 'gnutls_dh.c' - }, - '187459' => { - 'Line' => '98', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '2759' - }, - '1' => { - 'name' => 'prime', - 'type' => '3587' - }, - '2' => { - 'name' => 'generator', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_params_import_raw', - 'Source' => 'gnutls_dh.c' - }, - '187578' => { - 'Line' => '159', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '187702' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_params_init', - 'Source' => 'gnutls_dh.c' - }, - '187708' => { - 'Header' => 'gnutls.h', - 'Line' => '1577', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '2759' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dh_params_deinit', - 'Source' => 'gnutls_dh.c', - 'SourceLine' => '178' - }, - '187844' => { - 'Line' => '201', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '2759' - }, - '1' => { - 'name' => 'src', - 'type' => '2759' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_params_cpy', - 'Source' => 'gnutls_dh.c' - }, - '187908' => { - 'Line' => '237', - 'Param' => { - '0' => { - 'name' => 'dparams', - 'type' => '2759' - }, - '1' => { - 'name' => 'bits', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_params_generate2', - 'Source' => 'gnutls_dh.c' - }, - '188196' => { - 'Line' => '273', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '2759' - }, - '1' => { - 'name' => 'pkcs3_params', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_params_import_pkcs3', - 'Source' => 'gnutls_dh.c' - }, - '189377' => { - 'Line' => '440', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '2759' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_params_export2_pkcs3', - 'Source' => 'gnutls_dh.c' - }, - '190593' => { - 'Line' => '391', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '2759' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'params_data', - 'type' => '3186' - }, - '3' => { - 'name' => 'params_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_params_export_pkcs3', - 'Source' => 'gnutls_dh.c' - }, - '190977' => { - 'Line' => '564', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '2759' - }, - '1' => { - 'name' => 'prime', - 'type' => '3665' - }, - '2' => { - 'name' => 'generator', - 'type' => '3665' - }, - '3' => { - 'name' => 'bits', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_params_export_raw', - 'Source' => 'gnutls_dh.c' - }, - '191313' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1557', - 'Return' => '178968', - 'ShortName' => 'gnutls_calloc', - 'Source' => 'gnutls_mem.c', - 'SourceLine' => '33' - }, - '191348' => { - 'Data' => 1, - 'Header' => 'gnutls_global.h', - 'Line' => '32', - 'Return' => '117419', - 'ShortName' => '_gnutls_gnutls_asn', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '62' - }, - '191370' => { - 'Data' => 1, - 'Header' => 'gnutls_pk.h', - 'Line' => '27', - 'Return' => '181585', - 'ShortName' => '_gnutls_pk_ops', - 'Source' => 'pk.c', - 'SourceLine' => '1712' - }, - '191381' => { - 'Data' => 1, - 'Header' => 'fips.h', - 'Line' => '41', - 'Return' => '130', - 'ShortName' => '_gnutls_lib_mode', - 'Source' => 'fips.c', - 'SourceLine' => '32' - }, - '1980930' => { - 'Header' => 'openpgp.h', - 'Line' => '118', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_get_revoked_status', - 'Source' => 'pgp.c', - 'SourceLine' => '566' - }, - '1981026' => { - 'Header' => 'openpgp.h', - 'Line' => '120', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_count', - 'Source' => 'pgp.c', - 'SourceLine' => '751' - }, - '1981102' => { - 'Header' => 'openpgp.h', - 'Line' => '123', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_revoked_status', - 'Source' => 'pgp.c', - 'SourceLine' => '896' - }, - '1983516' => { - 'Line' => '252', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'format', - 'type' => '604879' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_export2', - 'Source' => 'pgp.c' - }, - '1983950' => { - 'Header' => 'openpgp.h', - 'Line' => '96', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'idx', - 'type' => '70' - }, - '2' => { - 'name' => 'buf', - 'type' => '208' - }, - '3' => { - 'name' => 'sizeof_buf', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_get_name', - 'Source' => 'pgp.c', - 'SourceLine' => '338' - }, - '1984424' => { - 'Header' => 'openpgp.h', - 'Line' => '103', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_get_version', - 'Source' => 'pgp.c', - 'SourceLine' => '451' - }, - '1984522' => { - 'Header' => 'openpgp.h', - 'Line' => '105', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_openpgp_crt_get_creation_time', - 'Source' => 'pgp.c', - 'SourceLine' => '477' - }, - '1984620' => { - 'Header' => 'openpgp.h', - 'Line' => '106', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_openpgp_crt_get_expiration_time', - 'Source' => 'pgp.c', - 'SourceLine' => '504' - }, - '1985275' => { - 'Header' => 'openpgp.h', - 'Line' => '113', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'hostname', - 'type' => '105' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_check_hostname2', - 'Source' => 'pgp.c', - 'SourceLine' => '618' - }, - '1985510' => { - 'Line' => '596', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'hostname', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_check_hostname', - 'Source' => 'pgp.c' - }, - '1985610' => { - 'Line' => '660', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'email', - 'type' => '105' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_check_email', - 'Source' => 'pgp.c' - }, - '1987231' => { - 'Header' => 'openpgp.h', - 'Line' => '131', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_creation_time', - 'Source' => 'pgp.c', - 'SourceLine' => '978' - }, - '1987371' => { - 'Header' => 'openpgp.h', - 'Line' => '134', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_expiration_time', - 'Source' => 'pgp.c', - 'SourceLine' => '1013' - }, - '1987948' => { - 'Line' => '1086', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'fpr', - 'type' => '184' - }, - '3' => { - 'name' => 'fprlen', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_fingerprint', - 'Source' => 'pgp.c' - }, - '1992049' => { - 'Header' => 'openpgp.h', - 'Line' => '158', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '112649' - }, - '1' => { - 'name' => 'm', - 'type' => '3665' - }, - '2' => { - 'name' => 'e', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_get_pk_rsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1498' - }, - '1992283' => { - 'Header' => 'openpgp.h', - 'Line' => '153', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '112649' - }, - '1' => { - 'name' => 'p', - 'type' => '3665' - }, - '2' => { - 'name' => 'q', - 'type' => '3665' - }, - '3' => { - 'name' => 'g', - 'type' => '3665' - }, - '4' => { - 'name' => 'y', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_get_pk_dsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1530' - }, - '1992558' => { - 'Header' => 'openpgp.h', - 'Line' => '149', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '112649' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'm', - 'type' => '3665' - }, - '3' => { - 'name' => 'e', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1562' - }, - '1992845' => { - 'Header' => 'openpgp.h', - 'Line' => '143', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '112649' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'p', - 'type' => '3665' - }, - '3' => { - 'name' => 'q', - 'type' => '3665' - }, - '4' => { - 'name' => 'g', - 'type' => '3665' - }, - '5' => { - 'name' => 'y', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1600' - }, - '1994318' => { - 'Header' => 'openpgp.h', - 'Line' => '262', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '112649' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3186' - }, - '2' => { - 'name' => 'flag', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_get_auth_subkey', - 'Source' => 'pgp.c', - 'SourceLine' => '1718' - }, - '1998113' => { - 'Header' => 'openpgp.h', - 'Line' => '281', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'keyring', - 'type' => '111924' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - }, - '3' => { - 'name' => 'verify', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_verify_ring', - 'Source' => 'pgpverify.c', - 'SourceLine' => '53' - }, - '1998535' => { - 'Header' => 'openpgp.h', - 'Line' => '288', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - }, - '2' => { - 'name' => 'verify', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_verify_self', - 'Source' => 'pgpverify.c', - 'SourceLine' => '122' - }, - '1998775' => { - 'Line' => '86', - 'Param' => { - '0' => { - 'name' => 'ring', - 'type' => '111924' - }, - '1' => { - 'name' => 'keyid', - 'type' => '4032' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_keyring_check_id', - 'Source' => 'extras.c' - }, - '2002975' => { - 'Header' => 'openpgp.h', - 'Line' => '269', - 'Param' => { - '0' => { - 'name' => 'keyring', - 'type' => '2003044' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_keyring_init', - 'Source' => 'extras.c', - 'SourceLine' => '45' - }, - '2003475' => { - 'Header' => 'openpgp.h', - 'Line' => '272', - 'Param' => { - '0' => { - 'name' => 'keyring', - 'type' => '111924' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '604879' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_keyring_import', - 'Source' => 'extras.c', - 'SourceLine' => '119' - }, - '2004176' => { - 'Line' => '216', - 'Param' => { - '0' => { - 'name' => 'ring', - 'type' => '111924' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_keyring_get_crt_count', - 'Source' => 'extras.c' - }, - '2004532' => { - 'Line' => '264', - 'Param' => { - '0' => { - 'name' => 'ring', - 'type' => '111924' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'cert', - 'type' => '623824' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_keyring_get_crt', - 'Source' => 'extras.c' - }, - '2024992' => { - 'Line' => '344', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_get_revoked_status', - 'Source' => 'privkey.c' - }, - '2025034' => { - 'Line' => '376', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'fpr', - 'type' => '184' - }, - '2' => { - 'name' => 'fprlen', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_get_fingerprint', - 'Source' => 'privkey.c' - }, - '2025146' => { - 'Line' => '418', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_get_key_id', - 'Source' => 'privkey.c' - }, - '2025356' => { - 'Line' => '704', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'keyid', - 'type' => '3186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_id', - 'Source' => 'privkey.c' - }, - '2026647' => { - 'Line' => '225', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'format', - 'type' => '604879' - }, - '2' => { - 'name' => 'password', - 'type' => '105' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - }, - '4' => { - 'name' => 'output_data', - 'type' => '184' - }, - '5' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_export', - 'Source' => 'privkey.c' - }, - '2027377' => { - 'Line' => '251', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'format', - 'type' => '604879' - }, - '2' => { - 'name' => 'password', - 'type' => '105' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - }, - '4' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_export2', - 'Source' => 'privkey.c' - }, - '2028450' => { - 'Line' => '451', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_count', - 'Source' => 'privkey.c' - }, - '2028656' => { - 'Line' => '506', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_revoked_status', - 'Source' => 'privkey.c' - }, - '2029365' => { - 'Line' => '632', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_creation_time', - 'Source' => 'privkey.c' - }, - '2029520' => { - 'Line' => '668', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_expiration_time', - 'Source' => 'privkey.c' - }, - '2030121' => { - 'Line' => '745', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'fpr', - 'type' => '184' - }, - '3' => { - 'name' => 'fprlen', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_fingerprint', - 'Source' => 'privkey.c' - }, - '2033425' => { - 'Line' => '1062', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '112716' - }, - '1' => { - 'name' => 'm', - 'type' => '3665' - }, - '2' => { - 'name' => 'e', - 'type' => '3665' - }, - '3' => { - 'name' => 'd', - 'type' => '3665' - }, - '4' => { - 'name' => 'p', - 'type' => '3665' - }, - '5' => { - 'name' => 'q', - 'type' => '3665' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_export_rsa_raw', - 'Source' => 'privkey.c' - }, - '2033851' => { - 'Line' => '1100', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '112716' - }, - '1' => { - 'name' => 'p', - 'type' => '3665' - }, - '2' => { - 'name' => 'q', - 'type' => '3665' - }, - '3' => { - 'name' => 'g', - 'type' => '3665' - }, - '4' => { - 'name' => 'y', - 'type' => '3665' - }, - '5' => { - 'name' => 'x', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_export_dsa_raw', - 'Source' => 'privkey.c' - }, - '2034255' => { - 'Line' => '1139', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '112716' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'm', - 'type' => '3665' - }, - '3' => { - 'name' => 'e', - 'type' => '3665' - }, - '4' => { - 'name' => 'd', - 'type' => '3665' - }, - '5' => { - 'name' => 'p', - 'type' => '3665' - }, - '6' => { - 'name' => 'q', - 'offset' => '0', - 'type' => '3665' - }, - '7' => { - 'name' => 'u', - 'offset' => '8', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_export_subkey_rsa_raw', - 'Source' => 'privkey.c' - }, - '2034725' => { - 'Line' => '1183', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '112716' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'p', - 'type' => '3665' - }, - '3' => { - 'name' => 'q', - 'type' => '3665' - }, - '4' => { - 'name' => 'g', - 'type' => '3665' - }, - '5' => { - 'name' => 'y', - 'type' => '3665' - }, - '6' => { - 'name' => 'x', - 'offset' => '0', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_export_subkey_dsa_raw', - 'Source' => 'privkey.c' - }, - '2035713' => { - 'Line' => '141', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2648', - 'ShortName' => 'gnutls_openpgp_privkey_sec_param', - 'Source' => 'privkey.c' - }, - '2047782' => { - 'Line' => '562', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '112649' - }, - '1' => { - 'name' => 'format', - 'type' => '1017994' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_print', - 'Source' => 'output.c' - }, - '2065171' => { - 'Line' => '519', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'certfile', - 'type' => '105' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '105' - }, - '3' => { - 'name' => 'subkey_id', - 'type' => '105' - }, - '4' => { - 'name' => 'format', - 'type' => '604879' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_file2', - 'Source' => 'gnutls_openpgp.c' - }, - '2065428' => { - 'Line' => '83', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'crt', - 'type' => '112649' - }, - '2' => { - 'name' => 'pkey', - 'type' => '112716' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_openpgp_key', - 'Source' => 'gnutls_openpgp.c' - }, - '2066850' => { - 'Line' => '193', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'index', - 'type' => '130' - }, - '2' => { - 'name' => 'key', - 'type' => '613892' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_get_openpgp_key', - 'Source' => 'gnutls_openpgp.c' - }, - '2067011' => { - 'Line' => '232', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'index', - 'type' => '130' - }, - '2' => { - 'name' => 'crt_list', - 'type' => '2067256' - }, - '3' => { - 'name' => 'crt_list_size', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_get_openpgp_crt', - 'Source' => 'gnutls_openpgp.c' - }, - '2068054' => { - 'Line' => '422', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'cert', - 'type' => '3587' - }, - '2' => { - 'name' => 'key', - 'type' => '3587' - }, - '3' => { - 'name' => 'subkey_id', - 'type' => '105' - }, - '4' => { - 'name' => 'format', - 'type' => '604879' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_mem2', - 'Source' => 'gnutls_openpgp.c' - }, - '2068943' => { - 'Line' => '349', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'cert', - 'type' => '3587' - }, - '2' => { - 'name' => 'key', - 'type' => '3587' - }, - '3' => { - 'name' => 'format', - 'type' => '604879' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_mem', - 'Source' => 'gnutls_openpgp.c' - }, - '2069743' => { - 'Line' => '372', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'certfile', - 'type' => '105' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '105' - }, - '3' => { - 'name' => 'format', - 'type' => '604879' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_file', - 'Source' => 'gnutls_openpgp.c' - }, - '2070145' => { - 'Line' => '659', - 'Param' => { - '0' => { - 'name' => 'c', - 'type' => '111966' - }, - '1' => { - 'name' => 'data', - 'type' => '25160' - }, - '2' => { - 'name' => 'dlen', - 'type' => '52' - }, - '3' => { - 'name' => 'format', - 'type' => '604879' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_openpgp_keyring_mem', - 'Source' => 'gnutls_openpgp.c' - }, - '2070442' => { - 'Line' => '615', - 'Param' => { - '0' => { - 'name' => 'c', - 'type' => '111966' - }, - '1' => { - 'name' => 'file', - 'type' => '105' - }, - '2' => { - 'name' => 'format', - 'type' => '604879' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_openpgp_keyring_file', - 'Source' => 'gnutls_openpgp.c' - }, - '2071024' => { - 'Line' => '757', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'func', - 'type' => '4043' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_set_recv_key_function', - 'Source' => 'gnutls_openpgp.c' - }, - '207715' => { - 'Header' => 'gnutls.h', - 'Line' => '1563', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '184' - }, - '1' => { - 'name' => 'c', - 'type' => '70' - }, - '2' => { - 'name' => 'size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_memset', - 'Source' => 'safe-memfuncs.c', - 'SourceLine' => '40' - }, - '219547' => { - 'Line' => '504', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'priority', - 'type' => '210699' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_set', - 'Source' => 'gnutls_priority.c' - }, - '222520' => { - 'Line' => '1051', - 'Param' => { - '0' => { - 'name' => 'priority_cache', - 'type' => '225955' - }, - '1' => { - 'name' => 'priorities', - 'type' => '105' - }, - '2' => { - 'name' => 'err_pos', - 'type' => '225961' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_init', - 'Source' => 'gnutls_priority.c' - }, - '225989' => { - 'Line' => '1305', - 'Param' => { - '0' => { - 'name' => 'priority_cache', - 'type' => '210699' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_priority_deinit', - 'Source' => 'gnutls_priority.c' - }, - '226053' => { - 'Line' => '1328', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'priorities', - 'type' => '105' - }, - '2' => { - 'name' => 'err_pos', - 'type' => '225961' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_set_direct', - 'Source' => 'gnutls_priority.c' - }, - '226287' => { - 'Line' => '1390', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_set_default_priority', - 'Source' => 'gnutls_priority.c' - }, - '226369' => { - 'Line' => '1407', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '210699' - }, - '1' => { - 'name' => 'list', - 'type' => '226434' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_ecc_curve_list', - 'Source' => 'gnutls_priority.c' - }, - '226451' => { - 'Line' => '1429', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '210699' - }, - '1' => { - 'name' => 'list', - 'type' => '226434' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_kx_list', - 'Source' => 'gnutls_priority.c' - }, - '226516' => { - 'Line' => '1451', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '210699' - }, - '1' => { - 'name' => 'list', - 'type' => '226434' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_cipher_list', - 'Source' => 'gnutls_priority.c' - }, - '226579' => { - 'Line' => '1473', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '210699' - }, - '1' => { - 'name' => 'list', - 'type' => '226434' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_mac_list', - 'Source' => 'gnutls_priority.c' - }, - '226644' => { - 'Line' => '1495', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '210699' - }, - '1' => { - 'name' => 'list', - 'type' => '226434' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_compression_list', - 'Source' => 'gnutls_priority.c' - }, - '226709' => { - 'Line' => '1517', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '210699' - }, - '1' => { - 'name' => 'list', - 'type' => '226434' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_protocol_list', - 'Source' => 'gnutls_priority.c' - }, - '226774' => { - 'Line' => '1539', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '210699' - }, - '1' => { - 'name' => 'list', - 'type' => '226434' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_sign_list', - 'Source' => 'gnutls_priority.c' - }, - '226839' => { - 'Line' => '1561', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '210699' - }, - '1' => { - 'name' => 'list', - 'type' => '226434' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_priority_certificate_type_list', - 'Source' => 'gnutls_priority.c' - }, - '226904' => { - 'Line' => '1585', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '130' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_priority_string_list', - 'Source' => 'gnutls_priority.c' - }, - '228903' => { - 'Line' => '154', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1971', - 'ShortName' => 'gnutls_mac_get_id', - 'Source' => 'mac.c' - }, - '228926' => { - 'Line' => '189', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1815', - 'ShortName' => 'gnutls_kx_get_id', - 'Source' => 'kx.c' - }, - '228974' => { - 'Line' => '162', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2242', - 'ShortName' => 'gnutls_protocol_get_id', - 'Source' => 'protocols.c' - }, - '228986' => { - 'Line' => '59', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2292', - 'ShortName' => 'gnutls_certificate_type_get_id', - 'Source' => 'cert_types.c' - }, - '228998' => { - 'Line' => '183', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2500', - 'ShortName' => 'gnutls_sign_get_id', - 'Source' => 'sign.c' - }, - '240027' => { - 'Data' => 1, - 'Header' => 'gnutls_hash_int.h', - 'Line' => '34', - 'Return' => '231245', - 'ShortName' => '_gnutls_mac_ops', - 'Source' => 'mac.c', - 'SourceLine' => '461' - }, - '240038' => { - 'Data' => 1, - 'Header' => 'gnutls_hash_int.h', - 'Line' => '37', - 'Return' => '231358', - 'ShortName' => '_gnutls_digest_ops', - 'Source' => 'mac.c', - 'SourceLine' => '472' - }, - '261843' => { - 'Line' => '44', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'session_data', - 'type' => '184' - }, - '2' => { - 'name' => 'session_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_get_data', - 'Source' => 'gnutls_session.c' - }, - '262147' => { - 'Line' => '96', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'data', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_get_data2', - 'Source' => 'gnutls_session.c' - }, - '262309' => { - 'Line' => '137', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'session_id', - 'type' => '184' - }, - '2' => { - 'name' => 'session_id_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_get_id', - 'Source' => 'gnutls_session.c' - }, - '26238' => { - 'Line' => '1558', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'data', - 'type' => '291' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '214', - 'ShortName' => 'gnutls_record_send', - 'Source' => 'gnutls_record.c' - }, - '262403' => { - 'Line' => '174', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'session_id', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_get_id2', - 'Source' => 'gnutls_session.c' - }, - '262465' => { - 'Header' => 'gnutls.h', - 'Line' => '1188', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'session_data', - 'type' => '291' - }, - '2' => { - 'name' => 'session_data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_set_data', - 'Source' => 'gnutls_session.c', - 'SourceLine' => '202' - }, - '262648' => { - 'Line' => '237', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_force_valid', - 'Source' => 'gnutls_session.c' - }, - '26739' => { - 'Line' => '81', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_record_disable_padding', - 'Source' => 'gnutls_record.c' - }, - '26782' => { - 'Line' => '97', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'ptr', - 'type' => '2660' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_ptr', - 'Source' => 'gnutls_record.c' - }, - '26838' => { - 'Line' => '116', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'recv_ptr', - 'type' => '2660' - }, - '2' => { - 'name' => 'send_ptr', - 'type' => '2660' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_ptr2', - 'Source' => 'gnutls_record.c' - }, - '26907' => { - 'Line' => '138', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'recv_int', - 'type' => '70' - }, - '2' => { - 'name' => 'send_int', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_int2', - 'Source' => 'gnutls_record.c' - }, - '26976' => { - 'Line' => '179', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2660', - 'ShortName' => 'gnutls_transport_get_ptr', - 'Source' => 'gnutls_record.c' - }, - '27023' => { - 'Line' => '195', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'recv_ptr', - 'type' => '27092' - }, - '2' => { - 'name' => 'send_ptr', - 'type' => '27092' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_get_ptr2', - 'Source' => 'gnutls_record.c' - }, - '27098' => { - 'Line' => '217', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'recv_int', - 'type' => '13711' - }, - '2' => { - 'name' => 'send_int', - 'type' => '13711' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_get_int2', - 'Source' => 'gnutls_record.c' - }, - '27167' => { - 'Line' => '237', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_transport_get_int', - 'Source' => 'gnutls_record.c' - }, - '273520' => { - 'Line' => '50', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'retr_func', - 'type' => '3496' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_retrieve_function', - 'Source' => 'gnutls_db.c' - }, - '273576' => { - 'Line' => '68', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'rem_func', - 'type' => '3458' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_remove_function', - 'Source' => 'gnutls_db.c' - }, - '273632' => { - 'Line' => '86', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'store_func', - 'type' => '3415' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_store_function', - 'Source' => 'gnutls_db.c' - }, - '273688' => { - 'Line' => '100', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'ptr', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_ptr', - 'Source' => 'gnutls_db.c' - }, - '273744' => { - 'Line' => '114', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '184', - 'ShortName' => 'gnutls_db_get_ptr', - 'Source' => 'gnutls_db.c' - }, - '273791' => { - 'Line' => '127', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'seconds', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_cache_expiration', - 'Source' => 'gnutls_db.c' - }, - '273847' => { - 'Line' => '137', - 'Return' => '130', - 'ShortName' => 'gnutls_db_get_default_cache_expiration', - 'Source' => 'gnutls_db.c' - }, - '273876' => { - 'Line' => '153', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'session_entry', - 'type' => '3192' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_db_check_entry', - 'Source' => 'gnutls_db.c' - }, - '273941' => { - 'Line' => '169', - 'Param' => { - '0' => { - 'name' => 'entry', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_db_check_entry_time', - 'Source' => 'gnutls_db.c' - }, - '275068' => { - 'Line' => '325', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_remove_session', - 'Source' => 'gnutls_db.c' - }, - '278952' => { - 'Line' => '135', - 'Param' => { - '0' => { - 'name' => 'msg', - 'type' => '105' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'result', - 'type' => '208' - }, - '3' => { - 'name' => 'result_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pem_base64_encode', - 'Source' => 'x509_b64.c' - }, - '279152' => { - 'Header' => 'gnutls.h', - 'Line' => '2056', - 'Param' => { - '0' => { - 'name' => 'msg', - 'type' => '105' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'result', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pem_base64_encode2', - 'Source' => 'x509_b64.c', - 'SourceLine' => '175' - }, - '280943' => { - 'Line' => '367', - 'Param' => { - '0' => { - 'name' => 'header', - 'type' => '105' - }, - '1' => { - 'name' => 'b64_data', - 'type' => '3587' - }, - '2' => { - 'name' => 'result', - 'type' => '3186' - }, - '3' => { - 'name' => 'result_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pem_base64_decode', - 'Source' => 'x509_b64.c' - }, - '281258' => { - 'Header' => 'gnutls.h', - 'Line' => '2059', - 'Param' => { - '0' => { - 'name' => 'header', - 'type' => '105' - }, - '1' => { - 'name' => 'b64_data', - 'type' => '3587' - }, - '2' => { - 'name' => 'result', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pem_base64_decode2', - 'Source' => 'x509_b64.c', - 'SourceLine' => '411' - }, - '293018' => { - 'Line' => '408', - 'Param' => { - '0' => { - 'name' => 'mod', - 'type' => '293058' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => '_gnutls_ext_register', - 'Source' => 'gnutls_extensions.c' - }, - '295475' => { - 'Header' => 'gnutls_extensions.h', - 'Line' => '45', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'type', - 'type' => '799' - }, - '2' => { - 'name' => 'data', - 'type' => '4020' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_ext_set_session_data', - 'Source' => 'gnutls_extensions.c', - 'SourceLine' => '657' - }, - '295625' => { - 'Header' => 'gnutls_extensions.h', - 'Line' => '47', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'type', - 'type' => '799' - }, - '2' => { - 'name' => 'data', - 'type' => '285892' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => '_gnutls_ext_get_session_data', - 'Source' => 'gnutls_extensions.c', - 'SourceLine' => '685' - }, - '297871' => { - 'Line' => '749', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - }, - '1' => { - 'name' => 'type', - 'type' => '70' - }, - '2' => { - 'name' => 'parse_type', - 'type' => '285942' - }, - '3' => { - 'name' => 'recv_func', - 'type' => '285695' - }, - '4' => { - 'name' => 'send_func', - 'type' => '285749' - }, - '5' => { - 'name' => 'deinit_func', - 'type' => '285787' - }, - '6' => { - 'name' => 'pack_func', - 'offset' => '0', - 'type' => '285816' - }, - '7' => { - 'name' => 'unpack_func', - 'offset' => '8', - 'type' => '285854' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ext_register', - 'Source' => 'gnutls_extensions.c' - }, - '298223' => { - 'Line' => '795', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'type', - 'type' => '130' - }, - '2' => { - 'name' => 'data', - 'type' => '4020' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_ext_set_data', - 'Source' => 'gnutls_extensions.c' - }, - '298341' => { - 'Line' => '814', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'type', - 'type' => '130' - }, - '2' => { - 'name' => 'data', - 'type' => '285892' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ext_get_data', - 'Source' => 'gnutls_extensions.c' - }, - '298554' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1560', - 'Return' => '298566', - 'ShortName' => 'gnutls_strdup', - 'Source' => 'gnutls_mem.c', - 'SourceLine' => '34' - }, - '298594' => { - 'Data' => 1, - 'Header' => 'max_record.h', - 'Line' => '28', - 'Return' => '292626', - 'ShortName' => 'ext_mod_max_record_size', - 'Source' => 'max_record.c', - 'SourceLine' => '50' - }, - '298616' => { - 'Data' => 1, - 'Header' => 'server_name.h', - 'Line' => '41', - 'Return' => '292626', - 'ShortName' => 'ext_mod_server_name', - 'Source' => 'server_name.c', - 'SourceLine' => '46' - }, - '298627' => { - 'Data' => 1, - 'Header' => 'srp.h', - 'Line' => '33', - 'Return' => '292626', - 'ShortName' => 'ext_mod_srp', - 'Source' => 'srp.c', - 'SourceLine' => '45' - }, - '298638' => { - 'Data' => 1, - 'Header' => 'heartbeat.h', - 'Line' => '39', - 'Return' => '292626', - 'ShortName' => 'ext_mod_heartbeat', - 'Source' => 'heartbeat.c', - 'SourceLine' => '525' - }, - '298649' => { - 'Data' => 1, - 'Header' => 'session_ticket.h', - 'Line' => '28', - 'Return' => '292626', - 'ShortName' => 'ext_mod_session_ticket', - 'Source' => 'session_ticket.c', - 'SourceLine' => '57' - }, - '298660' => { - 'Data' => 1, - 'Header' => 'safe_renegotiation.h', - 'Line' => '41', - 'Return' => '292626', - 'ShortName' => 'ext_mod_sr', - 'Source' => 'safe_renegotiation.c', - 'SourceLine' => '34' - }, - '298671' => { - 'Data' => 1, - 'Header' => 'signature.h', - 'Line' => '30', - 'Return' => '292626', - 'ShortName' => 'ext_mod_sig', - 'Source' => 'signature.c', - 'SourceLine' => '51' - }, - '298682' => { - 'Data' => 1, - 'Header' => 'ecc.h', - 'Line' => '27', - 'Return' => '292626', - 'ShortName' => 'ext_mod_supported_ecc', - 'Source' => 'ecc.c', - 'SourceLine' => '52' - }, - '298693' => { - 'Data' => 1, - 'Header' => 'ecc.h', - 'Line' => '28', - 'Return' => '292626', - 'ShortName' => 'ext_mod_supported_ecc_pf', - 'Source' => 'ecc.c', - 'SourceLine' => '64' - }, - '298704' => { - 'Data' => 1, - 'Header' => 'status_request.h', - 'Line' => '28', - 'Return' => '292626', - 'ShortName' => 'ext_mod_status_request', - 'Source' => 'status_request.c', - 'SourceLine' => '522' - }, - '298715' => { - 'Data' => 1, - 'Header' => 'ext_master_secret.h', - 'Line' => '28', - 'Return' => '292626', - 'ShortName' => 'ext_mod_ext_master_secret', - 'Source' => 'ext_master_secret.c', - 'SourceLine' => '38' - }, - '298726' => { - 'Data' => 1, - 'Header' => 'srtp.h', - 'Line' => '38', - 'Return' => '292626', - 'ShortName' => 'ext_mod_srtp', - 'Source' => 'srtp.c', - 'SourceLine' => '42' - }, - '298737' => { - 'Data' => 1, - 'Header' => 'alpn.h', - 'Line' => '37', - 'Return' => '292626', - 'ShortName' => 'ext_mod_alpn', - 'Source' => 'alpn.c', - 'SourceLine' => '40' - }, - '298759' => { - 'Data' => 1, - 'Header' => 'etm.h', - 'Line' => '28', - 'Return' => '292626', - 'ShortName' => 'ext_mod_etm', - 'Source' => 'etm.c', - 'SourceLine' => '38' - }, - '298803' => { - 'Header' => 'gnutls_str.h', - 'Line' => '80', - 'Param' => { - '0' => { - 'name' => 'buf', - 'type' => '10555' - }, - '1' => { - 'name' => 'data_size', - 'type' => '5416' - }, - '2' => { - 'name' => 'check', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_buffer_pop_prefix' - }, - '309863' => { - 'Header' => 'gnutls.h', - 'Line' => '1291', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_credentials_clear', - 'Source' => 'gnutls_auth.c', - 'SourceLine' => '44' - }, - '309956' => { - 'Line' => '93', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'type', - 'type' => '1869' - }, - '2' => { - 'name' => 'cred', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_credentials_set', - 'Source' => 'gnutls_auth.c' - }, - '310114' => { - 'Header' => 'gnutls.h', - 'Line' => '1937', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1869', - 'ShortName' => 'gnutls_auth_get_type', - 'Source' => 'gnutls_auth.c', - 'SourceLine' => '196' - }, - '310510' => { - 'Line' => '166', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'type', - 'type' => '1869' - }, - '2' => { - 'name' => 'cred', - 'type' => '17450' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_credentials_get', - 'Source' => 'gnutls_auth.c' - }, - '347793' => { - 'Line' => '912', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'entity', - 'type' => '130' - }, - '2' => { - 'name' => 'version', - 'type' => '2242' - }, - '3' => { - 'name' => 'kx', - 'type' => '1815' - }, - '4' => { - 'name' => 'cipher', - 'type' => '1695' - }, - '5' => { - 'name' => 'mac', - 'type' => '1971' - }, - '6' => { - 'name' => 'comp', - 'offset' => '0', - 'type' => '2021' - }, - '7' => { - 'name' => 'master', - 'offset' => '8', - 'type' => '3587' - }, - '8' => { - 'name' => 'session_id', - 'offset' => '16', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_set_premaster', - 'Source' => 'gnutls_session_pack.c' - }, - '348622' => { - 'Header' => 'gnutls_str.h', - 'Line' => '88', - 'Param' => { - '0' => { - 'name' => 'str', - 'type' => '10555' - }, - '1' => { - 'name' => 'data', - 'type' => '3665' - }, - '2' => { - 'name' => 'is_str', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => '_gnutls_buffer_to_datum', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '249' - }, - '348644' => { - 'Header' => 'gnutls_str.h', - 'Line' => '76', - 'Param' => { - '0' => { - 'name' => 'str', - 'type' => '10555' - }, - '1' => { - 'name' => 'data', - 'type' => '184' - }, - '2' => { - 'name' => 'req_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_buffer_pop_data', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '293' - }, - '359255' => { - 'Header' => 'gnutls_pk.h', - 'Line' => '59', - 'Param' => { - '0' => { - 'name' => 'sig_value', - 'type' => '3665' - }, - '1' => { - 'name' => 'r', - 'type' => '3587' - }, - '2' => { - 'name' => 's', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => '_gnutls_encode_ber_rs_raw', - 'Source' => 'gnutls_pk.c', - 'SourceLine' => '42' - }, - '37499' => { - 'Line' => '274', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'how', - 'type' => '15899' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_bye', - 'Source' => 'gnutls_record.c' - }, - '37735' => { - 'Line' => '1441', - 'Param' => { - '0' => { - 'name' => 'packet', - 'type' => '16959' - }, - '1' => { - 'name' => 'data', - 'type' => '3665' - }, - '2' => { - 'name' => 'sequence', - 'type' => '3186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_packet_get', - 'Source' => 'gnutls_record.c' - }, - '37866' => { - 'Line' => '1470', - 'Param' => { - '0' => { - 'name' => 'packet', - 'type' => '16959' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_packet_deinit', - 'Source' => 'gnutls_record.c' - }, - '378881' => { - 'Line' => '672', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'data', - 'type' => '378993' - }, - '2' => { - 'name' => 'elements', - 'type' => '130' - }, - '3' => { - 'name' => 'status', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_verify_peers', - 'Source' => 'gnutls_cert.c' - }, - '378999' => { - 'Line' => '57', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '111966' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_keys', - 'Source' => 'gnutls_cert.c' - }, - '379152' => { - 'Line' => '91', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '111966' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_cas', - 'Source' => 'gnutls_cert.c' - }, - '379194' => { - 'Line' => '115', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '111966' - }, - '1' => { - 'name' => 'cert', - 'type' => '111797' - }, - '2' => { - 'name' => 'issuer', - 'type' => '112890' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_get_issuer', - 'Source' => 'gnutls_cert.c' - }, - '37930' => { - 'Line' => '1487', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_discard_queued', - 'Source' => 'gnutls_record.c' - }, - '379322' => { - 'Line' => '143', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '111966' - }, - '1' => { - 'name' => 'idx1', - 'type' => '130' - }, - '2' => { - 'name' => 'idx2', - 'type' => '130' - }, - '3' => { - 'name' => 'cert', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_get_crt_raw', - 'Source' => 'gnutls_cert.c' - }, - '379558' => { - 'Line' => '177', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '111966' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_ca_names', - 'Source' => 'gnutls_cert.c' - }, - '379635' => { - 'Line' => '195', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '111966' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_credentials', - 'Source' => 'gnutls_cert.c' - }, - '379756' => { - 'Line' => '219', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '379919' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_allocate_credentials', - 'Source' => 'gnutls_cert.c' - }, - '38021' => { - 'Line' => '1514', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'packet', - 'type' => '25888' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '214', - 'ShortName' => 'gnutls_record_recv_packet', - 'Source' => 'gnutls_record.c' - }, - '380255' => { - 'Line' => '306', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'req', - 'type' => '368110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_server_set_request', - 'Source' => 'gnutls_cert.c' - }, - '380314' => { - 'Line' => '349', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '111966' - }, - '1' => { - 'name' => 'func', - 'type' => '120593' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_retrieve_function', - 'Source' => 'gnutls_cert.c' - }, - '380373' => { - 'Line' => '397', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '111966' - }, - '1' => { - 'name' => 'func', - 'type' => '120599' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_retrieve_function2', - 'Source' => 'gnutls_cert.c' - }, - '380432' => { - 'Line' => '427', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '111966' - }, - '1' => { - 'name' => 'func', - 'type' => '120605' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_verify_function', - 'Source' => 'gnutls_cert.c' - }, - '381219' => { - 'Line' => '594', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'status', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_verify_peers2', - 'Source' => 'gnutls_cert.c' - }, - '381324' => { - 'Line' => '628', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'hostname', - 'type' => '105' - }, - '2' => { - 'name' => 'status', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_verify_peers3', - 'Source' => 'gnutls_cert.c' - }, - '381515' => { - 'Line' => '729', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_certificate_expiration_time_peers', - 'Source' => 'gnutls_cert.c' - }, - '381891' => { - 'Line' => '773', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_certificate_activation_time_peers', - 'Source' => 'gnutls_cert.c' - }, - '382686' => { - 'Line' => '873', - 'Param' => { - '0' => { - 'name' => 'status', - 'type' => '130' - }, - '1' => { - 'name' => 'type', - 'type' => '2292' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_verification_status_print', - 'Source' => 'gnutls_cert.c' - }, - '384081' => { - 'Header' => 'abstract.h', - 'Line' => '497', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '4156' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pcert_deinit', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '501' - }, - '384093' => { - 'Header' => 'abstract.h', - 'Line' => '235', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_privkey_deinit', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '286' - }, - '384104' => { - 'Line' => '884', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'cert', - 'type' => '111797' - }, - '2' => { - 'name' => 'issuer', - 'type' => '112890' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_get_issuer', - 'Source' => 'verify-high.c' - }, - '384127' => { - 'Line' => '125', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'all', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_trust_list_deinit', - 'Source' => 'verify-high.c' - }, - '384139' => { - 'Header' => 'openpgp.h', - 'Line' => '270', - 'Param' => { - '0' => { - 'name' => 'keyring', - 'type' => '111924' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_keyring_deinit', - 'Source' => 'extras.c', - 'SourceLine' => '61' - }, - '384151' => { - 'Line' => '83', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '565972' - }, - '1' => { - 'name' => 'size', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_init', - 'Source' => 'verify-high.c' - }, - '384163' => { - 'Header' => 'abstract.h', - 'Line' => '88', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'bits', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_get_pk_algorithm', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '74' - }, - '384231' => { - 'Header' => 'gnutls.h', - 'Line' => '845', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2292', - 'ShortName' => 'gnutls_certificate_type_get', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '110' - }, - '384254' => { - 'Header' => 'x509.h', - 'Line' => '125', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '112890' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_init', - 'Source' => 'x509.c', - 'SourceLine' => '70' - }, - '384265' => { - 'Header' => 'x509.h', - 'Line' => '127', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_import', - 'Source' => 'x509.c', - 'SourceLine' => '252' - }, - '384276' => { - 'Line' => '780', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_x509_crt_get_expiration_time', - 'Source' => 'x509.c' - }, - '384288' => { - 'Header' => 'x509.h', - 'Line' => '126', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_deinit', - 'Source' => 'x509.c', - 'SourceLine' => '159' - }, - '384310' => { - 'Line' => '756', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_x509_crt_get_activation_time', - 'Source' => 'x509.c' - }, - '384333' => { - 'Header' => 'abstract.h', - 'Line' => '254', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - }, - '1' => { - 'name' => 'bits', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_get_pk_algorithm', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '78' - }, - '384344' => { - 'Header' => 'abstract.h', - 'Line' => '383', - 'Param' => { - '0' => { - 'name' => 'signer', - 'type' => '111762' - }, - '1' => { - 'name' => 'hash', - 'type' => '109671' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - }, - '3' => { - 'name' => 'data', - 'type' => '3587' - }, - '4' => { - 'name' => 'signature', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_sign_data', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '972' - }, - '384356' => { - 'Line' => '225', - 'Param' => { - '0' => { - 'name' => 'pk', - 'type' => '2348' - }, - '1' => { - 'name' => 'hash', - 'type' => '109671' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '2500', - 'ShortName' => 'gnutls_pk_to_sign', - 'Source' => 'sign.c' - }, - '384368' => { - 'Header' => 'abstract.h', - 'Line' => '226', - 'Param' => { - '0' => { - 'name' => 'pubkey', - 'type' => '3631' - }, - '1' => { - 'name' => 'algo', - 'type' => '2500' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - }, - '3' => { - 'name' => 'data', - 'type' => '3587' - }, - '4' => { - 'name' => 'signature', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_verify_data2', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1579' - }, - '384401' => { - 'Header' => 'gnutls_str.h', - 'Line' => '59', - 'Param' => { - '0' => { - 'name' => 'dest', - 'type' => '10555' - }, - '1' => { - 'name' => 'src', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => '_gnutls_buffer_append_str', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '204' - }, - '38655' => { - 'Line' => '1598', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_record_cork', - 'Source' => 'gnutls_record.c' - }, - '38700' => { - 'Line' => '1624', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_record_uncork', - 'Source' => 'gnutls_record.c' - }, - '38859' => { - 'Line' => '1699', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'data', - 'type' => '184' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '214', - 'ShortName' => 'gnutls_record_recv', - 'Source' => 'gnutls_record.c' - }, - '38993' => { - 'Line' => '1727', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'data', - 'type' => '184' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - }, - '3' => { - 'name' => 'seq', - 'type' => '3186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '214', - 'ShortName' => 'gnutls_record_recv_seq', - 'Source' => 'gnutls_record.c' - }, - '39143' => { - 'Line' => '1746', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'ms', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_record_set_timeout', - 'Source' => 'gnutls_record.c' - }, - '39235' => { - 'Data' => 1, - 'Header' => 'system.h', - 'Line' => '63', - 'Return' => '17390', - 'ShortName' => 'gnutls_time', - 'Source' => 'system.c', - 'SourceLine' => '284' - }, - '39268' => { - 'Data' => 1, - 'Header' => 'random.h', - 'Line' => '30', - 'Return' => '184', - 'ShortName' => 'gnutls_rnd_ctx', - 'Source' => 'random.c', - 'SourceLine' => '31' - }, - '39367' => { - 'Line' => '161', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2021', - 'ShortName' => 'gnutls_compression_get', - 'Source' => 'gnutls_state.c' - }, - '39434' => { - 'Line' => '802', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_dtls_get_mtu', - 'Source' => 'gnutls_dtls.c' - }, - '39445' => { - 'Line' => '411', - 'Param' => { - '0' => { - 'name' => 'error', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_error_is_fatal', - 'Source' => 'gnutls_errors.c' - }, - '39592' => { - 'Line' => '99', - 'Param' => { - '0' => { - 'name' => 'alert', - 'type' => '482458' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_alert_get_name', - 'Source' => 'gnutls_alert.c' - }, - '396368' => { - 'Line' => '85', - 'Param' => { - '0' => { - 'name' => 'log_func', - 'type' => '165689' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_log_function', - 'Source' => 'gnutls_global.c' - }, - '396411' => { - 'Line' => '105', - 'Param' => { - '0' => { - 'name' => 'log_func', - 'type' => '165723' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_audit_log_function', - 'Source' => 'gnutls_global.c' - }, - '396454' => { - 'Line' => '120', - 'Param' => { - '0' => { - 'name' => 'time_func', - 'type' => '17390' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_time_function', - 'Source' => 'gnutls_global.c' - }, - '396497' => { - 'Line' => '136', - 'Param' => { - '0' => { - 'name' => 'level', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_log_level', - 'Source' => 'gnutls_global.c' - }, - '396540' => { - 'Line' => '162', - 'Param' => { - '0' => { - 'name' => 'alloc_func', - 'type' => '43323' - }, - '1' => { - 'name' => 'secure_alloc_func', - 'type' => '43323' - }, - '2' => { - 'name' => 'is_secure_func', - 'type' => '388398' - }, - '3' => { - 'name' => 'realloc_func', - 'type' => '388460' - }, - '4' => { - 'name' => 'free_func', - 'type' => '3671' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_mem_functions', - 'Source' => 'gnutls_global.c' - }, - '39659' => { - 'Line' => '150', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'level', - 'type' => '482258' - }, - '2' => { - 'name' => 'desc', - 'type' => '482458' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_alert_send', - 'Source' => 'gnutls_alert.c' - }, - '396677' => { - 'Header' => 'gnutls.h', - 'Line' => '1522', - 'Return' => '70', - 'ShortName' => 'gnutls_global_init', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '204' - }, - '39682' => { - 'Header' => 'gnutls.h', - 'Line' => '2236', - 'Param' => { - '0' => { - 'name' => 'dest', - 'type' => '285604' - }, - '1' => { - 'name' => 'data', - 'type' => '291' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_buffer_append_data', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '130' - }, - '397711' => { - 'Header' => 'gnutls.h', - 'Line' => '1523', - 'Return' => '1', - 'ShortName' => 'gnutls_global_deinit', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '423' - }, - '397761' => { - 'Line' => '442', - 'Param' => { - '0' => { - 'name' => 'req_version', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_check_version', - 'Source' => 'gnutls_global.c' - }, - '398405' => { - 'Data' => 1, - 'Header' => 'gnutls_global.h', - 'Line' => '31', - 'Return' => '117419', - 'ShortName' => '_gnutls_pkix1_asn', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '61' - }, - '398532' => { - 'Data' => 1, - 'Header' => 'locks.h', - 'Line' => '30', - 'Return' => '388314', - 'ShortName' => 'gnutls_mutex_init', - 'Source' => 'system.c', - 'SourceLine' => '285' - }, - '398543' => { - 'Data' => 1, - 'Header' => 'locks.h', - 'Line' => '31', - 'Return' => '388353', - 'ShortName' => 'gnutls_mutex_deinit', - 'Source' => 'system.c', - 'SourceLine' => '286' - }, - '398785' => { - 'Header' => 'pkcs11.h', - 'Line' => '78', - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_deinit', - 'Source' => 'pkcs11.c', - 'SourceLine' => '837' - }, - '430094' => { - 'Line' => '42', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '423019' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_free_server_credentials', - 'Source' => 'gnutls_anon_cred.c' - }, - '430155' => { - 'Line' => '58', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '430223' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_anon_allocate_server_credentials', - 'Source' => 'gnutls_anon_cred.c' - }, - '430229' => { - 'Line' => '76', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '423074' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_free_client_credentials', - 'Source' => 'gnutls_anon_cred.c' - }, - '430271' => { - 'Line' => '94', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '430317' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_anon_allocate_client_credentials', - 'Source' => 'gnutls_anon_cred.c' - }, - '430323' => { - 'Line' => '115', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '423019' - }, - '1' => { - 'name' => 'dh_params', - 'type' => '2759' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_set_server_dh_params', - 'Source' => 'gnutls_anon_cred.c' - }, - '430379' => { - 'Line' => '131', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '423019' - }, - '1' => { - 'name' => 'func', - 'type' => '120581' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_set_server_params_function', - 'Source' => 'gnutls_anon_cred.c' - }, - '435222' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1556', - 'Return' => '388460', - 'ShortName' => 'gnutls_realloc', - 'Source' => 'gnutls_mem.c', - 'SourceLine' => '31' - }, - '435349' => { - 'Data' => 1, - 'Line' => '28', - 'Return' => '43323', - 'ShortName' => 'gnutls_secure_malloc', - 'Source' => 'gnutls_mem.c' - }, - '448510' => { - 'Line' => '318', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_get_prime_bits', - 'Source' => 'gnutls_ui.c' - }, - '448813' => { - 'Line' => '56', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '440287' - }, - '1' => { - 'name' => 'key_type', - 'type' => '105' - }, - '2' => { - 'name' => 'key_size', - 'type' => '130' - }, - '3' => { - 'name' => 'fpr', - 'type' => '184' - }, - '4' => { - 'name' => 'fpr_size', - 'type' => '52' - }, - '5' => { - 'name' => 'art', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_random_art', - 'Source' => 'gnutls_ui.c' - }, - '449141' => { - 'Line' => '104', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'bits', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dh_set_prime_bits', - 'Source' => 'gnutls_ui.c' - }, - '449268' => { - 'Line' => '131', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'raw_gen', - 'type' => '3665' - }, - '2' => { - 'name' => 'raw_prime', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_get_group', - 'Source' => 'gnutls_ui.c' - }, - '449614' => { - 'Line' => '196', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'raw_key', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_get_pubkey', - 'Source' => 'gnutls_ui.c' - }, - '449825' => { - 'Line' => '249', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_get_secret_bits', - 'Source' => 'gnutls_ui.c' - }, - '450310' => { - 'Line' => '373', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dh_get_peers_public_bits', - 'Source' => 'gnutls_ui.c' - }, - '450580' => { - 'Line' => '432', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'dh_params', - 'type' => '2759' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_dh_params', - 'Source' => 'gnutls_ui.c' - }, - '450639' => { - 'Line' => '454', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '3587', - 'ShortName' => 'gnutls_certificate_get_ours', - 'Source' => 'gnutls_ui.c' - }, - '450804' => { - 'Line' => '491', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'list_size', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '3587', - 'ShortName' => 'gnutls_certificate_get_peers', - 'Source' => 'gnutls_ui.c' - }, - '450959' => { - 'Line' => '522', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'id', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_get_peers_subkey_id', - 'Source' => 'gnutls_ui.c' - }, - '451113' => { - 'Line' => '549', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_client_get_request_status', - 'Source' => 'gnutls_ui.c' - }, - '451162' => { - 'Header' => 'gnutls.h', - 'Line' => '1674', - 'Param' => { - '0' => { - 'name' => 'algo', - 'type' => '109671' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'result', - 'type' => '184' - }, - '3' => { - 'name' => 'result_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_fingerprint', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '575' - }, - '451485' => { - 'Line' => '610', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'func', - 'type' => '120581' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_params_function', - 'Source' => 'gnutls_ui.c' - }, - '451544' => { - 'Line' => '627', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_verify_flags', - 'Source' => 'gnutls_ui.c' - }, - '451603' => { - 'Line' => '645', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_certificate_get_verify_flags', - 'Source' => 'gnutls_ui.c' - }, - '451652' => { - 'Line' => '662', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'max_bits', - 'type' => '130' - }, - '2' => { - 'name' => 'max_depth', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_verify_limits', - 'Source' => 'gnutls_ui.c' - }, - '451725' => { - 'Line' => '681', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '440299' - }, - '1' => { - 'name' => 'func', - 'type' => '120581' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_params_function', - 'Source' => 'gnutls_ui.c' - }, - '451784' => { - 'Line' => '699', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '423019' - }, - '1' => { - 'name' => 'func', - 'type' => '120581' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_set_params_function', - 'Source' => 'gnutls_ui.c' - }, - '451843' => { - 'Header' => 'gnutls.h', - 'Line' => '2157', - 'Param' => { - '0' => { - 'name' => 'filename', - 'type' => '105' - }, - '1' => { - 'name' => 'data', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_load_file', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '720' - }, - '452027' => { - 'Line' => '761', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_status_request_is_checked', - 'Source' => 'gnutls_ui.c' - }, - '452296' => { - 'Line' => '796', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '208', - 'ShortName' => 'gnutls_session_get_desc', - 'Source' => 'gnutls_ui.c' - }, - '453285' => { - 'Line' => '890', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'sid', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_set_id', - 'Source' => 'gnutls_ui.c' - }, - '453593' => { - 'Line' => '81', - 'Param' => { - '0' => { - 'name' => 'algo', - 'type' => '2348' - }, - '1' => { - 'name' => 'param', - 'type' => '2648' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_sec_param_to_pk_bits', - 'Source' => 'secparams.c' - }, - '453704' => { - 'Line' => '361', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'response', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_status_request_get', - 'Source' => 'status_request.c' - }, - '453716' => { - 'Line' => '169', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1815' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_kx_get_name', - 'Source' => 'kx.c' - }, - '453764' => { - 'Line' => '138', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1971', - 'ShortName' => 'gnutls_mac_get', - 'Source' => 'gnutls_state.c' - }, - '453776' => { - 'Line' => '86', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1971' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_mac_get_name', - 'Source' => 'mac.c' - }, - '453788' => { - 'Line' => '86', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1695', - 'ShortName' => 'gnutls_cipher_get', - 'Source' => 'gnutls_state.c' - }, - '453800' => { - 'Line' => '333', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1695' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_cipher_get_name', - 'Source' => 'ciphers.c' - }, - '453812' => { - 'Line' => '37', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '2292' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_certificate_type_get_name', - 'Source' => 'cert_types.c' - }, - '453824' => { - 'Line' => '1398', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2562', - 'ShortName' => 'gnutls_ecc_curve_get', - 'Source' => 'gnutls_state.c' - }, - '453836' => { - 'Line' => '212', - 'Param' => { - '0' => { - 'name' => 'curve', - 'type' => '2562' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_ecc_curve_get_name', - 'Source' => 'ecc.c' - }, - '476014' => { - 'Header' => 'abstract.h', - 'Line' => '178', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'usage', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_get_key_usage', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '94' - }, - '476047' => { - 'Line' => '1628', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'algo', - 'type' => '2500' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - }, - '3' => { - 'name' => 'hash', - 'type' => '3587' - }, - '4' => { - 'name' => 'signature', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_verify_hash2', - 'Source' => 'gnutls_pubkey.c' - }, - '476058' => { - 'Line' => '1037', - 'Param' => { - '0' => { - 'name' => 'signer', - 'type' => '111762' - }, - '1' => { - 'name' => 'hash_algo', - 'type' => '109671' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - }, - '3' => { - 'name' => 'hash_data', - 'type' => '3587' - }, - '4' => { - 'name' => 'signature', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_sign_hash', - 'Source' => 'gnutls_privkey.c' - }, - '476114' => { - 'Line' => '267', - 'Param' => { - '0' => { - 'name' => 'sign', - 'type' => '2500' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '109671', - 'ShortName' => 'gnutls_sign_get_hash_algorithm', - 'Source' => 'sign.c' - }, - '476137' => { - 'Line' => '120', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2500' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_sign_get_name', - 'Source' => 'sign.c' - }, - '476171' => { - 'Line' => '288', - 'Param' => { - '0' => { - 'name' => 'sign', - 'type' => '2500' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2348', - 'ShortName' => 'gnutls_sign_get_pk_algorithm', - 'Source' => 'sign.c' - }, - '480160' => { - 'Header' => 'gnutls.h', - 'Line' => '835', - 'Param' => { - '0' => { - 'name' => 'curve', - 'type' => '2562' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ecc_curve_get_size', - 'Source' => 'ecc.c', - 'SourceLine' => '282' - }, - '491242' => { - 'Line' => '120', - 'Param' => { - '0' => { - 'name' => 'alert', - 'type' => '482458' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_alert_get_strname', - 'Source' => 'gnutls_alert.c' - }, - '491627' => { - 'Line' => '191', - 'Param' => { - '0' => { - 'name' => 'err', - 'type' => '70' - }, - '1' => { - 'name' => 'level', - 'type' => '13711' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_error_to_alert', - 'Source' => 'gnutls_alert.c' - }, - '491719' => { - 'Line' => '325', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'err', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_alert_send_appropriate', - 'Source' => 'gnutls_alert.c' - }, - '496175' => { - 'Line' => '58', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - }, - '1' => { - 'name' => 'm', - 'type' => '3665' - }, - '2' => { - 'name' => 'e', - 'type' => '3665' - }, - '3' => { - 'name' => 'd', - 'type' => '3665' - }, - '4' => { - 'name' => 'p', - 'type' => '3665' - }, - '5' => { - 'name' => 'q', - 'type' => '3665' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '3665' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '3665' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_export_rsa_raw', - 'Source' => 'gnutls_privkey_raw.c' - }, - '496587' => { - 'Line' => '104', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - }, - '1' => { - 'name' => 'p', - 'type' => '3665' - }, - '2' => { - 'name' => 'q', - 'type' => '3665' - }, - '3' => { - 'name' => 'g', - 'type' => '3665' - }, - '4' => { - 'name' => 'y', - 'type' => '3665' - }, - '5' => { - 'name' => 'x', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_export_dsa_raw', - 'Source' => 'gnutls_privkey_raw.c' - }, - '496961' => { - 'Line' => '148', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - }, - '1' => { - 'name' => 'curve', - 'type' => '365382' - }, - '2' => { - 'name' => 'x', - 'type' => '3665' - }, - '3' => { - 'name' => 'y', - 'type' => '3665' - }, - '4' => { - 'name' => 'k', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_export_ecc_raw', - 'Source' => 'gnutls_privkey_raw.c' - }, - '497322' => { - 'Line' => '195', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - }, - '1' => { - 'name' => 'm', - 'type' => '3587' - }, - '2' => { - 'name' => 'e', - 'type' => '3587' - }, - '3' => { - 'name' => 'd', - 'type' => '3587' - }, - '4' => { - 'name' => 'p', - 'type' => '3587' - }, - '5' => { - 'name' => 'q', - 'type' => '3587' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '3587' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '3587' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_rsa_raw', - 'Source' => 'gnutls_privkey_raw.c' - }, - '497793' => { - 'Line' => '248', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - }, - '1' => { - 'name' => 'p', - 'type' => '3587' - }, - '2' => { - 'name' => 'q', - 'type' => '3587' - }, - '3' => { - 'name' => 'g', - 'type' => '3587' - }, - '4' => { - 'name' => 'y', - 'type' => '3587' - }, - '5' => { - 'name' => 'x', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_dsa_raw', - 'Source' => 'gnutls_privkey_raw.c' - }, - '498231' => { - 'Line' => '299', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - }, - '1' => { - 'name' => 'curve', - 'type' => '2562' - }, - '2' => { - 'name' => 'x', - 'type' => '3587' - }, - '3' => { - 'name' => 'y', - 'type' => '3587' - }, - '4' => { - 'name' => 'k', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_ecc_raw', - 'Source' => 'gnutls_privkey_raw.c' - }, - '498824' => { - 'Line' => '46', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '564296' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_init', - 'Source' => 'privkey.c' - }, - '498836' => { - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'm', - 'type' => '3587' - }, - '2' => { - 'name' => 'e', - 'type' => '3587' - }, - '3' => { - 'name' => 'd', - 'type' => '3587' - }, - '4' => { - 'name' => 'p', - 'type' => '3587' - }, - '5' => { - 'name' => 'q', - 'type' => '3587' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '3587' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '3587' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_privkey_import_rsa_raw2' - }, - '498848' => { - 'Header' => 'abstract.h', - 'Line' => '280', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'key', - 'type' => '111785' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_x509', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '662' - }, - '498860' => { - 'Line' => '75', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_privkey_deinit', - 'Source' => 'privkey.c' - }, - '498872' => { - 'Line' => '900', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'p', - 'type' => '3587' - }, - '2' => { - 'name' => 'q', - 'type' => '3587' - }, - '3' => { - 'name' => 'g', - 'type' => '3587' - }, - '4' => { - 'name' => 'y', - 'type' => '3587' - }, - '5' => { - 'name' => 'x', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_import_dsa_raw', - 'Source' => 'privkey.c' - }, - '498884' => { - 'Line' => '988', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'curve', - 'type' => '2562' - }, - '2' => { - 'name' => 'x', - 'type' => '3587' - }, - '3' => { - 'name' => 'y', - 'type' => '3587' - }, - '4' => { - 'name' => 'k', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_import_ecc_raw', - 'Source' => 'privkey.c' - }, - '503353' => { - 'Line' => '145', - 'Param' => { - '0' => { - 'name' => 'ptr', - 'type' => '2660' - }, - '1' => { - 'name' => 'ms', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_system_recv_timeout', - 'Source' => 'system.c' - }, - '503923' => { - 'Header' => 'x509.h', - 'Line' => '1383', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'tl_flags', - 'type' => '130' - }, - '2' => { - 'name' => 'tl_vflags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_add_system_trust', - 'Source' => 'system.c', - 'SourceLine' => '571' - }, - '504990' => { - 'Data' => 1, - 'Header' => 'locks.h', - 'Line' => '32', - 'Return' => '500942', - 'ShortName' => 'gnutls_mutex_lock', - 'Source' => 'system.c', - 'SourceLine' => '287' - }, - '505012' => { - 'Data' => 1, - 'Header' => 'locks.h', - 'Line' => '33', - 'Return' => '500954', - 'ShortName' => 'gnutls_mutex_unlock', - 'Source' => 'system.c', - 'SourceLine' => '288' - }, - '505208' => { - 'Line' => '304', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'ca_file', - 'type' => '105' - }, - '2' => { - 'name' => 'crl_file', - 'type' => '105' - }, - '3' => { - 'name' => 'type', - 'type' => '177145' - }, - '4' => { - 'name' => 'tl_flags', - 'type' => '130' - }, - '5' => { - 'name' => 'tl_vflags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_add_trust_file', - 'Source' => 'verify-high2.c' - }, - '50955' => { - 'Header' => 'gnutls.h', - 'Line' => '858', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2021' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_compression_get_name', - 'Source' => 'gnutls_compress.c', - 'SourceLine' => '78' - }, - '51030' => { - 'Header' => 'gnutls.h', - 'Line' => '882', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2021', - 'ShortName' => 'gnutls_compression_get_id', - 'Source' => 'gnutls_compress.c', - 'SourceLine' => '99' - }, - '51127' => { - 'Line' => '119', - 'Return' => '51156', - 'ShortName' => 'gnutls_compression_list', - 'Source' => 'gnutls_compress.c' - }, - '512933' => { - 'Line' => '486', - 'Param' => { - '0' => { - 'name' => 'hex_data', - 'type' => '105' - }, - '1' => { - 'name' => 'hex_size', - 'type' => '52' - }, - '2' => { - 'name' => 'bin_data', - 'type' => '184' - }, - '3' => { - 'name' => 'bin_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_hex2bin', - 'Source' => 'gnutls_str.c' - }, - '513074' => { - 'Header' => 'gnutls.h', - 'Line' => '1852', - 'Param' => { - '0' => { - 'name' => 'hex_data', - 'type' => '3587' - }, - '1' => { - 'name' => 'result', - 'type' => '184' - }, - '2' => { - 'name' => 'result_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_hex_decode', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '546' - }, - '513201' => { - 'Line' => '575', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '3587' - }, - '1' => { - 'name' => 'result', - 'type' => '208' - }, - '2' => { - 'name' => 'result_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_hex_encode', - 'Source' => 'gnutls_str.c' - }, - '53190' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1555', - 'Return' => '43323', - 'ShortName' => 'gnutls_malloc', - 'Source' => 'gnutls_mem.c', - 'SourceLine' => '29' - }, - '533088' => { - 'Header' => 'gnutls.h', - 'Line' => '840', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1815', - 'ShortName' => 'gnutls_kx_get', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '124' - }, - '533908' => { - 'Line' => '307', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '534467' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_init', - 'Source' => 'gnutls_state.c' - }, - '534546' => { - 'Line' => '442', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_deinit', - 'Source' => 'gnutls_state.c' - }, - '536738' => { - 'Line' => '682', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'status', - 'type' => '519149' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_send_cert', - 'Source' => 'gnutls_state.c' - }, - '536797' => { - 'Line' => '704', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'status', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_send_x509_rdn_sequence', - 'Source' => 'gnutls_state.c' - }, - '536978' => { - 'Line' => '747', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'major', - 'type' => '123' - }, - '2' => { - 'name' => 'minor', - 'type' => '123' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_hello_set_default_version', - 'Source' => 'gnutls_state.c' - }, - '537051' => { - 'Line' => '771', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'allow', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_private_extensions', - 'Source' => 'gnutls_state.c' - }, - '537802' => { - 'Line' => '1045', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'label_size', - 'type' => '52' - }, - '2' => { - 'name' => 'label', - 'type' => '105' - }, - '3' => { - 'name' => 'seed_size', - 'type' => '52' - }, - '4' => { - 'name' => 'seed', - 'type' => '105' - }, - '5' => { - 'name' => 'outsize', - 'type' => '52' - }, - '6' => { - 'name' => 'out', - 'offset' => '0', - 'type' => '208' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_prf_raw', - 'Source' => 'gnutls_state.c' - }, - '538019' => { - 'Header' => 'gnutls.h', - 'Line' => '1011', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'label_size', - 'type' => '52' - }, - '2' => { - 'name' => 'label', - 'type' => '105' - }, - '3' => { - 'name' => 'server_random_first', - 'type' => '70' - }, - '4' => { - 'name' => 'extra_size', - 'type' => '52' - }, - '5' => { - 'name' => 'extra', - 'type' => '105' - }, - '6' => { - 'name' => 'outsize', - 'offset' => '0', - 'type' => '52' - }, - '7' => { - 'name' => 'out', - 'offset' => '8', - 'type' => '208' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_prf', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1094' - }, - '538392' => { - 'Line' => '1141', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_is_resumed', - 'Source' => 'gnutls_state.c' - }, - '538477' => { - 'Line' => '1172', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_resumption_requested', - 'Source' => 'gnutls_state.c' - }, - '538704' => { - 'Line' => '1231', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '184', - 'ShortName' => 'gnutls_session_get_ptr', - 'Source' => 'gnutls_state.c' - }, - '538753' => { - 'Line' => '1245', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'ptr', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_set_ptr', - 'Source' => 'gnutls_state.c' - }, - '538812' => { - 'Line' => '1271', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_record_get_direction', - 'Source' => 'gnutls_state.c' - }, - '538861' => { - 'Line' => '1287', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'major', - 'type' => '123' - }, - '2' => { - 'name' => 'minor', - 'type' => '123' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => '_gnutls_rsa_pms_set_version', - 'Source' => 'gnutls_state.c' - }, - '538934' => { - 'Line' => '1321', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'func', - 'type' => '3598' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_post_client_hello_function', - 'Source' => 'gnutls_state.c' - }, - '538993' => { - 'Line' => '1344', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_enable_compatibility_mode', - 'Source' => 'gnutls_state.c' - }, - '539038' => { - 'Line' => '1366', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'cbtype', - 'type' => '519685' - }, - '2' => { - 'name' => 'cb', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_channel_binding', - 'Source' => 'gnutls_state.c' - }, - '539190' => { - 'Line' => '1411', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2242', - 'ShortName' => 'gnutls_protocol_get_version', - 'Source' => 'gnutls_state.c' - }, - '539271' => { - 'Line' => '1432', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'client', - 'type' => '3665' - }, - '2' => { - 'name' => 'server', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_get_random', - 'Source' => 'gnutls_state.c' - }, - '539415' => { - 'Line' => '1473', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'random', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_handshake_set_random', - 'Source' => 'gnutls_state.c' - }, - '539478' => { - 'Line' => '1516', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'htype', - 'type' => '130' - }, - '2' => { - 'name' => 'post', - 'type' => '70' - }, - '3' => { - 'name' => 'func', - 'type' => '3534' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_hook_function', - 'Source' => 'gnutls_state.c' - }, - '539565' => { - 'Line' => '1546', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'read', - 'type' => '130' - }, - '2' => { - 'name' => 'mac_key', - 'type' => '3665' - }, - '3' => { - 'name' => 'IV', - 'type' => '3665' - }, - '4' => { - 'name' => 'cipher_key', - 'type' => '3665' - }, - '5' => { - 'name' => 'seq_number', - 'type' => '3186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_record_get_state', - 'Source' => 'gnutls_state.c' - }, - '539973' => { - 'Line' => '1597', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'read', - 'type' => '130' - }, - '2' => { - 'name' => 'seq_number', - 'type' => '3186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_record_set_state', - 'Source' => 'gnutls_state.c' - }, - '540648' => { - 'Line' => '156', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'vec_func', - 'type' => '3872' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_vec_push_function', - 'Source' => 'system_override.c' - }, - '540660' => { - 'Line' => '463', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_session_ticket_enable_client', - 'Source' => 'session_ticket.c' - }, - '540672' => { - 'Line' => '316', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'responder_id', - 'type' => '3665' - }, - '2' => { - 'name' => 'responder_id_size', - 'type' => '52' - }, - '3' => { - 'name' => 'extensions', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_status_request_enable_client', - 'Source' => 'status_request.c' - }, - '555806' => { - 'Line' => '922', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'cert', - 'type' => '3587' - }, - '2' => { - 'name' => 'key', - 'type' => '3587' - }, - '3' => { - 'name' => 'type', - 'type' => '177145' - }, - '4' => { - 'name' => 'pass', - 'type' => '105' - }, - '5' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_key_mem2', - 'Source' => 'gnutls_x509.c' - }, - '555908' => { - 'Line' => '1403', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'certfile', - 'type' => '105' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '105' - }, - '3' => { - 'name' => 'type', - 'type' => '177145' - }, - '4' => { - 'name' => 'pass', - 'type' => '105' - }, - '5' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_key_file2', - 'Source' => 'gnutls_x509.c' - }, - '55994' => { - 'Header' => 'gnutls.h', - 'Line' => '462', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '2144' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_handshake_description_get_name', - 'Source' => 'debug.c', - 'SourceLine' => '83' - }, - '563371' => { - 'Line' => '886', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'cert', - 'type' => '3587' - }, - '2' => { - 'name' => 'key', - 'type' => '3587' - }, - '3' => { - 'name' => 'type', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_key_mem', - 'Source' => 'gnutls_x509.c' - }, - '563522' => { - 'Line' => '1014', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'cert_list', - 'type' => '112890' - }, - '2' => { - 'name' => 'cert_list_size', - 'type' => '70' - }, - '3' => { - 'name' => 'key', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_key', - 'Source' => 'gnutls_x509.c' - }, - '564136' => { - 'Line' => '1119', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'index', - 'type' => '130' - }, - '2' => { - 'name' => 'key', - 'type' => '564296' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_get_x509_key', - 'Source' => 'gnutls_x509.c' - }, - '564302' => { - 'Line' => '1158', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'index', - 'type' => '130' - }, - '2' => { - 'name' => 'crt_list', - 'type' => '564554' - }, - '3' => { - 'name' => 'crt_list_size', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_get_x509_crt', - 'Source' => 'gnutls_x509.c' - }, - '564560' => { - 'Line' => '1222', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'names', - 'type' => '225961' - }, - '2' => { - 'name' => 'names_size', - 'type' => '70' - }, - '3' => { - 'name' => 'pcert_list', - 'type' => '4156' - }, - '4' => { - 'name' => 'pcert_list_size', - 'type' => '70' - }, - '5' => { - 'name' => 'key', - 'type' => '111762' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_key', - 'Source' => 'gnutls_x509.c' - }, - '565815' => { - 'Line' => '1295', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'tlist', - 'type' => '113318' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_trust_list', - 'Source' => 'gnutls_x509.c' - }, - '565913' => { - 'Line' => '1317', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'tlist', - 'type' => '565972' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_get_trust_list', - 'Source' => 'gnutls_x509.c' - }, - '566238' => { - 'Line' => '1508', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'ca', - 'type' => '3587' - }, - '2' => { - 'name' => 'type', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_trust_mem', - 'Source' => 'gnutls_x509.c' - }, - '566379' => { - 'Line' => '1544', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'ca_list', - 'type' => '112890' - }, - '2' => { - 'name' => 'ca_list_size', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_trust', - 'Source' => 'gnutls_x509.c' - }, - '566703' => { - 'Line' => '1606', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '111966' - }, - '1' => { - 'name' => 'cafile', - 'type' => '105' - }, - '2' => { - 'name' => 'type', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_trust_file', - 'Source' => 'gnutls_x509.c' - }, - '566845' => { - 'Line' => '1637', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '111966' - }, - '1' => { - 'name' => 'ca_dir', - 'type' => '105' - }, - '2' => { - 'name' => 'type', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_trust_dir', - 'Source' => 'gnutls_x509.c' - }, - '566987' => { - 'Line' => '1667', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '111966' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_system_trust', - 'Source' => 'gnutls_x509.c' - }, - '567062' => { - 'Line' => '1689', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'CRL', - 'type' => '3587' - }, - '2' => { - 'name' => 'type', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_crl_mem', - 'Source' => 'gnutls_x509.c' - }, - '567204' => { - 'Line' => '1720', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'crl_list', - 'type' => '567509' - }, - '2' => { - 'name' => 'crl_list_size', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_crl', - 'Source' => 'gnutls_x509.c' - }, - '567539' => { - 'Line' => '1773', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'crlfile', - 'type' => '105' - }, - '2' => { - 'name' => 'type', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_crl_file', - 'Source' => 'gnutls_x509.c' - }, - '567681' => { - 'Line' => '1881', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'p12blob', - 'type' => '3587' - }, - '2' => { - 'name' => 'type', - 'type' => '177145' - }, - '3' => { - 'name' => 'password', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_simple_pkcs12_mem', - 'Source' => 'gnutls_x509.c' - }, - '568360' => { - 'Line' => '1824', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'pkcs12file', - 'type' => '105' - }, - '2' => { - 'name' => 'type', - 'type' => '177145' - }, - '3' => { - 'name' => 'password', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_simple_pkcs12_file', - 'Source' => 'gnutls_x509.c' - }, - '568643' => { - 'Line' => '1969', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '111966' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_crls', - 'Source' => 'gnutls_x509.c' - }, - '568687' => { - 'Line' => '1990', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '111966' - }, - '1' => { - 'name' => 'fn', - 'type' => '113127' - }, - '2' => { - 'name' => 'userdata', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_pin_function', - 'Source' => 'gnutls_x509.c' - }, - '571045' => { - 'Line' => '1357', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '111966' - }, - '1' => { - 'name' => 'certfile', - 'type' => '105' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '105' - }, - '3' => { - 'name' => 'type', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_certificate_set_x509_key_file', - 'Source' => 'gnutls_x509.c' - }, - '571341' => { - 'Header' => 'x509.h', - 'Line' => '368', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'san', - 'type' => '184' - }, - '3' => { - 'name' => 'san_size', - 'type' => '5416' - }, - '4' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_subject_alt_name', - 'Source' => 'x509.c', - 'SourceLine' => '1464' - }, - '571353' => { - 'Header' => 'x509.h', - 'Line' => '176', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'indx', - 'type' => '70' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '130' - }, - '4' => { - 'name' => 'buf', - 'type' => '184' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_dn_by_oid', - 'Source' => 'x509.c', - 'SourceLine' => '607' - }, - '571364' => { - 'Line' => '109', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '1308976' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_init', - 'Source' => 'ocsp.c' - }, - '571375' => { - 'Line' => '225', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_import', - 'Source' => 'ocsp.c' - }, - '571386' => { - 'Line' => '1278', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'indx', - 'type' => '130' - }, - '2' => { - 'name' => 'crt', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_check_crt', - 'Source' => 'ocsp.c' - }, - '571398' => { - 'Line' => '2074', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'issuer', - 'type' => '111797' - }, - '2' => { - 'name' => 'verify', - 'type' => '17947' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_verify_direct', - 'Source' => 'ocsp.c' - }, - '571409' => { - 'Line' => '147', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_ocsp_resp_deinit', - 'Source' => 'ocsp.c' - }, - '571443' => { - 'Header' => 'ocsp.h', - 'Line' => '225', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '555052' - }, - '1' => { - 'name' => 'indx', - 'type' => '130' - }, - '10' => { - 'name' => 'revocation_reason', - 'offset' => '32', - 'type' => '17947' - }, - '2' => { - 'name' => 'digest', - 'type' => '363186' - }, - '3' => { - 'name' => 'issuer_name_hash', - 'type' => '3665' - }, - '4' => { - 'name' => 'issuer_key_hash', - 'type' => '3665' - }, - '5' => { - 'name' => 'serial_number', - 'type' => '3665' - }, - '6' => { - 'name' => 'cert_status', - 'offset' => '0', - 'type' => '17947' - }, - '7' => { - 'name' => 'this_update', - 'offset' => '8', - 'type' => '17423' - }, - '8' => { - 'name' => 'next_update', - 'offset' => '16', - 'type' => '17423' - }, - '9' => { - 'name' => 'revocation_time', - 'offset' => '24', - 'type' => '17423' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_ocsp_resp_get_single', - 'Source' => 'ocsp.c', - 'SourceLine' => '1386' - }, - '571522' => { - 'Header' => 'x509.h', - 'Line' => '1327', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'cert_list', - 'type' => '112890' - }, - '2' => { - 'name' => 'cert_list_size', - 'type' => '130' - }, - '3' => { - 'name' => 'data', - 'type' => '378993' - }, - '4' => { - 'name' => 'elements', - 'type' => '130' - }, - '5' => { - 'name' => 'flags', - 'type' => '130' - }, - '6' => { - 'name' => 'voutput', - 'offset' => '0', - 'type' => '17947' - }, - '7' => { - 'name' => 'func', - 'offset' => '8', - 'type' => '1178041' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_verify_crt2', - 'Source' => 'verify-high.c', - 'SourceLine' => '1096' - }, - '571557' => { - 'Header' => 'abstract.h', - 'Line' => '461', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '4156' - }, - '1' => { - 'name' => 'crt', - 'type' => '111797' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pcert_import_x509', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '48' - }, - '571581' => { - 'Line' => '109', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '4156' - }, - '1' => { - 'name' => 'crt', - 'type' => '112890' - }, - '2' => { - 'name' => 'ncrt', - 'type' => '17947' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pcert_import_x509_list', - 'Source' => 'gnutls_pcert.c' - }, - '571605' => { - 'Header' => 'abstract.h', - 'Line' => '234', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '113534' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_init', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '265' - }, - '571616' => { - 'Line' => '1316', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - }, - '1' => { - 'name' => 'fn', - 'type' => '113127' - }, - '2' => { - 'name' => 'userdata', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_privkey_set_pin_function', - 'Source' => 'gnutls_privkey.c' - }, - '571627' => { - 'Line' => '1201', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - }, - '3' => { - 'name' => 'password', - 'type' => '105' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_x509_raw', - 'Source' => 'gnutls_privkey.c' - }, - '571673' => { - 'Line' => '708', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'key', - 'type' => '564296' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_export_x509', - 'Source' => 'gnutls_privkey.c' - }, - '571685' => { - 'Line' => '424', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '4156' - }, - '1' => { - 'name' => 'crt', - 'type' => '112890' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pcert_export_x509', - 'Source' => 'gnutls_pcert.c' - }, - '571756' => { - 'Line' => '66', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'cas', - 'type' => '3587' - }, - '2' => { - 'name' => 'crls', - 'type' => '3587' - }, - '3' => { - 'name' => 'type', - 'type' => '177145' - }, - '4' => { - 'name' => 'tl_flags', - 'type' => '130' - }, - '5' => { - 'name' => 'tl_vflags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_add_trust_mem', - 'Source' => 'verify-high2.c' - }, - '571779' => { - 'Header' => 'x509.h', - 'Line' => '1282', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'clist', - 'type' => '1170871' - }, - '2' => { - 'name' => 'clist_size', - 'type' => '130' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_add_cas', - 'Source' => 'verify-high.c', - 'SourceLine' => '271' - }, - '571803' => { - 'Line' => '443', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'ca_dir', - 'type' => '105' - }, - '2' => { - 'name' => 'crl_dir', - 'type' => '105' - }, - '3' => { - 'name' => 'type', - 'type' => '177145' - }, - '4' => { - 'name' => 'tl_flags', - 'type' => '130' - }, - '5' => { - 'name' => 'tl_vflags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_add_trust_dir', - 'Source' => 'verify-high2.c' - }, - '571838' => { - 'Header' => 'x509.h', - 'Line' => '630', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '567509' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_init', - 'Source' => 'crl.c', - 'SourceLine' => '68' - }, - '571850' => { - 'Header' => 'x509.h', - 'Line' => '631', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crl_deinit', - 'Source' => 'crl.c', - 'SourceLine' => '92' - }, - '571862' => { - 'Header' => 'x509.h', - 'Line' => '1298', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '113318' - }, - '1' => { - 'name' => 'crl_list', - 'type' => '1180076' - }, - '2' => { - 'name' => 'crl_size', - 'type' => '70' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - }, - '4' => { - 'name' => 'verification_flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_trust_list_add_crls', - 'Source' => 'verify-high.c', - 'SourceLine' => '697' - }, - '571874' => { - 'Header' => 'pkcs12.h', - 'Line' => '42', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '1064648' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_init', - 'Source' => 'pkcs12.c', - 'SourceLine' => '150' - }, - '571885' => { - 'Header' => 'pkcs12.h', - 'Line' => '44', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '554659' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_import', - 'Source' => 'pkcs12.c', - 'SourceLine' => '199' - }, - '571896' => { - 'Line' => '1006', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '554659' - }, - '1' => { - 'name' => 'pass', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_verify_mac', - 'Source' => 'pkcs12.c' - }, - '571907' => { - 'Header' => 'pkcs12.h', - 'Line' => '74', - 'Param' => { - '0' => { - 'name' => 'p12', - 'type' => '554659' - }, - '1' => { - 'name' => 'password', - 'type' => '105' - }, - '2' => { - 'name' => 'key', - 'type' => '564296' - }, - '3' => { - 'name' => 'chain', - 'type' => '564554' - }, - '4' => { - 'name' => 'chain_len', - 'type' => '17947' - }, - '5' => { - 'name' => 'extra_certs', - 'type' => '564554' - }, - '6' => { - 'name' => 'extra_certs_len', - 'offset' => '0', - 'type' => '17947' - }, - '7' => { - 'name' => 'crl', - 'offset' => '8', - 'type' => '567509' - }, - '8' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs12_simple_parse', - 'Source' => 'pkcs12.c', - 'SourceLine' => '1445' - }, - '571918' => { - 'Header' => 'pkcs12.h', - 'Line' => '43', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '554659' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs12_deinit', - 'Source' => 'pkcs12.c', - 'SourceLine' => '172' - }, - '571964' => { - 'Line' => '1256', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - }, - '1' => { - 'name' => 'url', - 'type' => '105' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_url', - 'Source' => 'gnutls_privkey.c' - }, - '571987' => { - 'Line' => '44', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_url_is_supported', - 'Source' => 'urls.c' - }, - '571999' => { - 'Line' => '3704', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'fn', - 'type' => '113127' - }, - '2' => { - 'name' => 'userdata', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_set_pin_function', - 'Source' => 'x509.c' - }, - '572010' => { - 'Line' => '3733', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'url', - 'type' => '105' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_import_url', - 'Source' => 'x509.c' - }, - '572021' => { - 'Header' => 'x509.h', - 'Line' => '889', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'issuer', - 'type' => '111797' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_check_issuer', - 'Source' => 'verify.c', - 'SourceLine' => '822' - }, - '584940' => { - 'Line' => '73', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '576827' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_supplemental_get_name', - 'Source' => 'gnutls_supplemental.c' - }, - '586219' => { - 'Line' => '269', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - }, - '1' => { - 'name' => 'type', - 'type' => '576827' - }, - '2' => { - 'name' => 'recv_func', - 'type' => '577549' - }, - '3' => { - 'name' => 'send_func', - 'type' => '577561' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_supplemental_register', - 'Source' => 'gnutls_supplemental.c' - }, - '586550' => { - 'Line' => '299', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'do_recv_supplemental', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_supplemental_recv', - 'Source' => 'gnutls_supplemental.c' - }, - '586609' => { - 'Line' => '315', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'do_send_supplemental', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_supplemental_send', - 'Source' => 'gnutls_supplemental.c' - }, - '589792' => { - 'Header' => 'crypto.h', - 'Line' => '134', - 'Param' => { - '0' => { - 'name' => 'level', - 'type' => '60597' - }, - '1' => { - 'name' => 'data', - 'type' => '184' - }, - '2' => { - 'name' => 'len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_rnd', - 'Source' => 'random.c', - 'SourceLine' => '82' - }, - '589972' => { - 'Line' => '99', - 'Return' => '1', - 'ShortName' => 'gnutls_rnd_refresh', - 'Source' => 'random.c' - }, - '595490' => { - 'Header' => 'crypto.h', - 'Line' => '34', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '595854' - }, - '1' => { - 'name' => 'cipher', - 'type' => '1695' - }, - '2' => { - 'name' => 'key', - 'type' => '3587' - }, - '3' => { - 'name' => 'iv', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_cipher_init', - 'Source' => 'crypto-api.c', - 'SourceLine' => '55' - }, - '595866' => { - 'Line' => '100', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592295' - }, - '1' => { - 'name' => 'tag', - 'type' => '184' - }, - '2' => { - 'name' => 'tag_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_cipher_tag', - 'Source' => 'crypto-api.c' - }, - '596164' => { - 'Line' => '128', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592295' - }, - '1' => { - 'name' => 'ptext', - 'type' => '291' - }, - '2' => { - 'name' => 'ptext_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_cipher_add_auth', - 'Source' => 'crypto-api.c' - }, - '596462' => { - 'Line' => '153', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592295' - }, - '1' => { - 'name' => 'iv', - 'type' => '184' - }, - '2' => { - 'name' => 'ivlen', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_cipher_set_iv', - 'Source' => 'crypto-api.c' - }, - '596752' => { - 'Line' => '177', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592295' - }, - '1' => { - 'name' => 'ptext', - 'type' => '184' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_cipher_encrypt', - 'Source' => 'crypto-api.c' - }, - '596947' => { - 'Header' => 'crypto.h', - 'Line' => '40', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592295' - }, - '1' => { - 'name' => 'ctext', - 'type' => '184' - }, - '2' => { - 'name' => 'ctext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_cipher_decrypt', - 'Source' => 'crypto-api.c', - 'SourceLine' => '202' - }, - '597248' => { - 'Line' => '231', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592295' - }, - '1' => { - 'name' => 'ptext', - 'type' => '291' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - }, - '3' => { - 'name' => 'ctext', - 'type' => '184' - }, - '4' => { - 'name' => 'ctext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_cipher_encrypt2', - 'Source' => 'crypto-api.c' - }, - '597473' => { - 'Line' => '260', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592295' - }, - '1' => { - 'name' => 'ctext', - 'type' => '291' - }, - '2' => { - 'name' => 'ctext_len', - 'type' => '52' - }, - '3' => { - 'name' => 'ptext', - 'type' => '184' - }, - '4' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_cipher_decrypt2', - 'Source' => 'crypto-api.c' - }, - '597776' => { - 'Header' => 'crypto.h', - 'Line' => '58', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592295' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_cipher_deinit', - 'Source' => 'crypto-api.c', - 'SourceLine' => '284' - }, - '597965' => { - 'Line' => '317', - 'Param' => { - '0' => { - 'name' => 'dig', - 'type' => '598192' - }, - '1' => { - 'name' => 'algorithm', - 'type' => '1971' - }, - '2' => { - 'name' => 'key', - 'type' => '291' - }, - '3' => { - 'name' => 'keylen', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_hmac_init', - 'Source' => 'crypto-api.c' - }, - '598198' => { - 'Line' => '352', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592415' - }, - '1' => { - 'name' => 'nonce', - 'type' => '291' - }, - '2' => { - 'name' => 'nonce_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hmac_set_nonce', - 'Source' => 'crypto-api.c' - }, - '598362' => { - 'Line' => '371', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592415' - }, - '1' => { - 'name' => 'ptext', - 'type' => '291' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_hmac', - 'Source' => 'crypto-api.c' - }, - '598502' => { - 'Line' => '386', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592415' - }, - '1' => { - 'name' => 'digest', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hmac_output', - 'Source' => 'crypto-api.c' - }, - '598621' => { - 'Line' => '401', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592415' - }, - '1' => { - 'name' => 'digest', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hmac_deinit', - 'Source' => 'crypto-api.c' - }, - '598732' => { - 'Line' => '418', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1971' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_hmac_get_len', - 'Source' => 'crypto-api.c' - }, - '598838' => { - 'Line' => '440', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1971' - }, - '1' => { - 'name' => 'key', - 'type' => '291' - }, - '2' => { - 'name' => 'keylen', - 'type' => '52' - }, - '3' => { - 'name' => 'ptext', - 'type' => '291' - }, - '4' => { - 'name' => 'ptext_len', - 'type' => '52' - }, - '5' => { - 'name' => 'digest', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_hmac_fast', - 'Source' => 'crypto-api.c' - }, - '599025' => { - 'Line' => '465', - 'Param' => { - '0' => { - 'name' => 'dig', - 'type' => '599201' - }, - '1' => { - 'name' => 'algorithm', - 'type' => '109671' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_hash_init', - 'Source' => 'crypto-api.c' - }, - '599207' => { - 'Line' => '501', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592393' - }, - '1' => { - 'name' => 'ptext', - 'type' => '291' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_hash', - 'Source' => 'crypto-api.c' - }, - '599347' => { - 'Line' => '516', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592393' - }, - '1' => { - 'name' => 'digest', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hash_output', - 'Source' => 'crypto-api.c' - }, - '599480' => { - 'Line' => '531', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592393' - }, - '1' => { - 'name' => 'digest', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hash_deinit', - 'Source' => 'crypto-api.c' - }, - '599591' => { - 'Line' => '548', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '109671' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_hash_get_len', - 'Source' => 'crypto-api.c' - }, - '599697' => { - 'Header' => 'crypto.h', - 'Line' => '112', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '109671' - }, - '1' => { - 'name' => 'ptext', - 'type' => '291' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - }, - '3' => { - 'name' => 'digest', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_hash_fast', - 'Source' => 'crypto-api.c', - 'SourceLine' => '568' - }, - '599838' => { - 'Header' => 'gnutls.h', - 'Line' => '1127', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3665' - }, - '1' => { - 'name' => 'key_size', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_key_generate', - 'Source' => 'crypto-api.c', - 'SourceLine' => '587' - }, - '600157' => { - 'Line' => '637', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '600450' - }, - '1' => { - 'name' => 'cipher', - 'type' => '1695' - }, - '2' => { - 'name' => 'key', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_aead_cipher_init', - 'Source' => 'crypto-api.c' - }, - '600462' => { - 'Line' => '684', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592349' - }, - '1' => { - 'name' => 'nonce', - 'type' => '291' - }, - '2' => { - 'name' => 'nonce_len', - 'type' => '52' - }, - '3' => { - 'name' => 'auth', - 'type' => '291' - }, - '4' => { - 'name' => 'auth_len', - 'type' => '52' - }, - '5' => { - 'name' => 'tag_size', - 'type' => '52' - }, - '6' => { - 'name' => 'ctext', - 'offset' => '0', - 'type' => '291' - }, - '7' => { - 'name' => 'ctext_len', - 'offset' => '8', - 'type' => '52' - }, - '8' => { - 'name' => 'ptext', - 'offset' => '16', - 'type' => '184' - }, - '9' => { - 'name' => 'ptext_len', - 'offset' => '24', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_aead_cipher_decrypt', - 'Source' => 'crypto-api.c' - }, - '601145' => { - 'Line' => '741', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592349' - }, - '1' => { - 'name' => 'nonce', - 'type' => '291' - }, - '2' => { - 'name' => 'nonce_len', - 'type' => '52' - }, - '3' => { - 'name' => 'auth', - 'type' => '291' - }, - '4' => { - 'name' => 'auth_len', - 'type' => '52' - }, - '5' => { - 'name' => 'tag_size', - 'type' => '52' - }, - '6' => { - 'name' => 'ptext', - 'offset' => '0', - 'type' => '291' - }, - '7' => { - 'name' => 'ptext_len', - 'offset' => '8', - 'type' => '52' - }, - '8' => { - 'name' => 'ctext', - 'offset' => '16', - 'type' => '184' - }, - '9' => { - 'name' => 'ctext_len', - 'offset' => '24', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_aead_cipher_encrypt', - 'Source' => 'crypto-api.c' - }, - '601833' => { - 'Line' => '783', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '592349' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_aead_cipher_deinit', - 'Source' => 'crypto-api.c' - }, - '607600' => { - 'Header' => 'abstract.h', - 'Line' => '277', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'key', - 'type' => '112783' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_pkcs11', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '351' - }, - '607666' => { - 'Header' => 'abstract.h', - 'Line' => '342', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'pk', - 'type' => '2348' - }, - '2' => { - 'name' => 'userdata', - 'type' => '184' - }, - '3' => { - 'name' => 'sign_fn', - 'type' => '179585' - }, - '4' => { - 'name' => 'decrypt_fn', - 'type' => '179632' - }, - '5' => { - 'name' => 'deinit_fn', - 'type' => '179643' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_ext2', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '538' - }, - '608060' => { - 'Line' => '59', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '112844', - 'ShortName' => 'gnutls_privkey_get_type', - 'Source' => 'gnutls_privkey.c' - }, - '610138' => { - 'Line' => '452', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'key', - 'type' => '610429' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_export_pkcs11', - 'Source' => 'gnutls_privkey.c' - }, - '610868' => { - 'Line' => '499', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'pk', - 'type' => '2348' - }, - '2' => { - 'name' => 'userdata', - 'type' => '184' - }, - '3' => { - 'name' => 'sign_func', - 'type' => '179585' - }, - '4' => { - 'name' => 'decrypt_func', - 'type' => '179632' - }, - '5' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_ext', - 'Source' => 'gnutls_privkey.c' - }, - '611052' => { - 'Line' => '602', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'userdata', - 'type' => '184' - }, - '2' => { - 'name' => 'sign_fn', - 'type' => '179585' - }, - '3' => { - 'name' => 'decrypt_fn', - 'type' => '179632' - }, - '4' => { - 'name' => 'deinit_fn', - 'type' => '179643' - }, - '5' => { - 'name' => 'info_fn', - 'type' => '179676' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_ext3', - 'Source' => 'gnutls_privkey.c' - }, - '612205' => { - 'Line' => '755', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'algo', - 'type' => '2348' - }, - '2' => { - 'name' => 'bits', - 'type' => '130' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_generate', - 'Source' => 'gnutls_privkey.c' - }, - '612551' => { - 'Header' => 'abstract.h', - 'Line' => '283', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'key', - 'type' => '112716' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_openpgp', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '802' - }, - '613155' => { - 'Line' => '865', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '604879' - }, - '3' => { - 'name' => 'keyid', - 'type' => '4032' - }, - '4' => { - 'name' => 'password', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_openpgp_raw', - 'Source' => 'gnutls_privkey.c' - }, - '613601' => { - 'Header' => 'abstract.h', - 'Line' => '289', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'key', - 'type' => '613892' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_export_openpgp', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '924' - }, - '614888' => { - 'Header' => 'abstract.h', - 'Line' => '399', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - }, - '2' => { - 'name' => 'ciphertext', - 'type' => '3587' - }, - '3' => { - 'name' => 'plaintext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_decrypt_data', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '1147' - }, - '616362' => { - 'Line' => '1338', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_status', - 'Source' => 'gnutls_privkey.c' - }, - '616426' => { - 'Line' => '1361', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111762' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_verify_params', - 'Source' => 'gnutls_privkey.c' - }, - '616894' => { - 'Data' => 1, - 'Header' => 'urls.h', - 'Line' => '31', - 'Return' => '616883', - 'ShortName' => '_gnutls_custom_urls', - 'Source' => 'urls.c', - 'SourceLine' => '29' - }, - '616905' => { - 'Data' => 1, - 'Header' => 'urls.h', - 'Line' => '32', - 'Return' => '130', - 'ShortName' => '_gnutls_custom_urls_size', - 'Source' => 'urls.c', - 'SourceLine' => '30' - }, - '616927' => { - 'Line' => '1307', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'hash', - 'type' => '3587' - }, - '2' => { - 'name' => 'signature', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_sign_hash', - 'Source' => 'privkey.c' - }, - '616949' => { - 'Line' => '153', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112783' - }, - '1' => { - 'name' => 'bits', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_privkey_get_pk_algorithm', - 'Source' => 'pkcs11_privkey.c' - }, - '616961' => { - 'Line' => '1049', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_get_pk_algorithm', - 'Source' => 'privkey.c' - }, - '616973' => { - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'bits', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_pk_algorithm' - }, - '617006' => { - 'Header' => 'abstract.h', - 'Line' => '80', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pubkey_deinit', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '134' - }, - '617017' => { - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_preferred_key_id' - }, - '617073' => { - 'Line' => '132', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112783' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_privkey_deinit', - 'Source' => 'pkcs11_privkey.c' - }, - '617097' => { - 'Header' => 'openpgp.h', - 'Line' => '173', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_deinit', - 'Source' => 'privkey.c', - 'SourceLine' => '59' - }, - '617108' => { - 'Line' => '1098', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112783' - }, - '1' => { - 'name' => 'fn', - 'type' => '113127' - }, - '2' => { - 'name' => 'userdata', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_privkey_set_pin_function', - 'Source' => 'pkcs11_privkey.c' - }, - '617120' => { - 'Line' => '86', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '610429' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_privkey_init', - 'Source' => 'pkcs11_privkey.c' - }, - '617132' => { - 'Line' => '120', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '112783' - }, - '1' => { - 'name' => 'src', - 'type' => '112783' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_privkey_cpy', - 'Source' => 'pkcs11_privkey.c' - }, - '617156' => { - 'Line' => '96', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '111785' - }, - '1' => { - 'name' => 'src', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_cpy', - 'Source' => 'privkey.c' - }, - '617168' => { - 'Line' => '1429', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'algo', - 'type' => '2348' - }, - '2' => { - 'name' => 'bits', - 'type' => '130' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_generate', - 'Source' => 'privkey.c' - }, - '617180' => { - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'keyid', - 'type' => '4032' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_idx' - }, - '617191' => { - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'bits', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_pk_algorithm' - }, - '617202' => { - 'Header' => 'openpgp.h', - 'Line' => '172', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '613892' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_init', - 'Source' => 'privkey.c', - 'SourceLine' => '44' - }, - '617224' => { - 'Header' => 'openpgp.h', - 'Line' => '180', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '604879' - }, - '3' => { - 'name' => 'password', - 'type' => '105' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_import', - 'Source' => 'privkey.c', - 'SourceLine' => '170' - }, - '617235' => { - 'Header' => 'openpgp.h', - 'Line' => '257', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112716' - }, - '1' => { - 'name' => 'keyid', - 'type' => '4032' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_privkey_set_preferred_key_id', - 'Source' => 'privkey.c', - 'SourceLine' => '1252' - }, - '617311' => { - 'Line' => '1779', - 'Param' => { - '0' => { - 'name' => 'privkey', - 'type' => '111785' - }, - '1' => { - 'name' => 'fn', - 'type' => '113127' - }, - '2' => { - 'name' => 'userdata', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_privkey_set_pin_function', - 'Source' => 'privkey.c' - }, - '617323' => { - 'Line' => '650', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - }, - '3' => { - 'name' => 'password', - 'type' => '105' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_import2', - 'Source' => 'privkey.c' - }, - '617335' => { - 'Line' => '393', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '112783' - }, - '1' => { - 'name' => 'url', - 'type' => '105' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_privkey_import_url', - 'Source' => 'pkcs11_privkey.c' - }, - '617369' => { - 'Line' => '839', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'url', - 'type' => '105' - }, - '2' => { - 'name' => 'srk_password', - 'type' => '105' - }, - '3' => { - 'name' => 'key_password', - 'type' => '105' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_tpm_url', - 'Source' => 'tpm.c' - }, - '617381' => { - 'Line' => '358', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112783' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_privkey_status', - 'Source' => 'pkcs11_privkey.c' - }, - '621464' => { - 'Header' => 'abstract.h', - 'Line' => '478', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '4156' - }, - '1' => { - 'name' => 'cert', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pcert_import_x509_raw', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '239' - }, - '621963' => { - 'Header' => 'abstract.h', - 'Line' => '490', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '4156' - }, - '1' => { - 'name' => 'crt', - 'type' => '112649' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pcert_import_openpgp', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '290' - }, - '622593' => { - 'Header' => 'abstract.h', - 'Line' => '483', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '4156' - }, - '1' => { - 'name' => 'cert', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '604879' - }, - '3' => { - 'name' => 'keyid', - 'type' => '3186' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pcert_import_openpgp_raw', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '365' - }, - '623513' => { - 'Header' => 'abstract.h', - 'Line' => '494', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '4156' - }, - '1' => { - 'name' => 'crt', - 'type' => '623824' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pcert_export_openpgp', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '466' - }, - '624277' => { - 'Line' => '175', - 'Param' => { - '0' => { - 'name' => 'pcerts', - 'type' => '4156' - }, - '1' => { - 'name' => 'pcert_max', - 'type' => '17947' - }, - '2' => { - 'name' => 'data', - 'type' => '3587' - }, - '3' => { - 'name' => 'format', - 'type' => '177145' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pcert_list_import_x509_raw', - 'Source' => 'gnutls_pcert.c' - }, - '625225' => { - 'Line' => '2563', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_export2', - 'Source' => 'x509.c' - }, - '625236' => { - 'Header' => 'abstract.h', - 'Line' => '79', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '639857' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_init', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '113' - }, - '625247' => { - 'Header' => 'abstract.h', - 'Line' => '91', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'crt', - 'type' => '111797' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_x509', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '157' - }, - '625302' => { - 'Line' => '230', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'format', - 'type' => '604879' - }, - '2' => { - 'name' => 'output_data', - 'type' => '184' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_export', - 'Source' => 'pgp.c' - }, - '625313' => { - 'Header' => 'abstract.h', - 'Line' => '99', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'crt', - 'type' => '112649' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pubkey_import_openpgp' - }, - '625324' => { - 'Header' => 'openpgp.h', - 'Line' => '63', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '623824' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_init', - 'Source' => 'pgp.c', - 'SourceLine' => '43' - }, - '625335' => { - 'Header' => 'openpgp.h', - 'Line' => '67', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '604879' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_import', - 'Source' => 'pgp.c', - 'SourceLine' => '84' - }, - '625346' => { - 'Header' => 'openpgp.h', - 'Line' => '166', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'keyid', - 'type' => '4032' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_openpgp_crt_set_preferred_key_id', - 'Source' => 'pgp.c', - 'SourceLine' => '1666' - }, - '625357' => { - 'Header' => 'openpgp.h', - 'Line' => '65', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_deinit', - 'Source' => 'pgp.c', - 'SourceLine' => '58' - }, - '625390' => { - 'Line' => '3242', - 'Param' => { - '0' => { - 'name' => 'certs', - 'type' => '112890' - }, - '1' => { - 'name' => 'cert_max', - 'type' => '17947' - }, - '2' => { - 'name' => 'data', - 'type' => '3587' - }, - '3' => { - 'name' => 'format', - 'type' => '177145' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_list_import', - 'Source' => 'x509.c' - }, - '638753' => { - 'Header' => 'abstract.h', - 'Line' => '193', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'm', - 'type' => '3587' - }, - '2' => { - 'name' => 'e', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_rsa_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1333' - }, - '638815' => { - 'Line' => '1508', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'p', - 'type' => '3587' - }, - '2' => { - 'name' => 'q', - 'type' => '3587' - }, - '3' => { - 'name' => 'g', - 'type' => '3587' - }, - '4' => { - 'name' => 'y', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_dsa_raw', - 'Source' => 'gnutls_pubkey.c' - }, - '640214' => { - 'Header' => 'abstract.h', - 'Line' => '93', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'crq', - 'type' => '629572' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_x509_crq', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '196' - }, - '640479' => { - 'Line' => '236', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '2' => { - 'name' => 'usage', - 'type' => '130' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_privkey', - 'Source' => 'gnutls_pubkey.c' - }, - '641628' => { - 'Header' => 'abstract.h', - 'Line' => '172', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3186' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - }, - '4' => { - 'name' => 'subkey', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_get_openpgp_key_id', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '516' - }, - '642037' => { - 'Line' => '585', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '3631' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '604879' - }, - '3' => { - 'name' => 'keyid', - 'type' => '4032' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_openpgp_raw', - 'Source' => 'gnutls_pubkey.c' - }, - '642473' => { - 'Header' => 'abstract.h', - 'Line' => '158', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '184' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_export', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '654' - }, - '642961' => { - 'Header' => 'abstract.h', - 'Line' => '162', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_export2', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '720' - }, - '643426' => { - 'Header' => 'abstract.h', - 'Line' => '166', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3186' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_get_key_id', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '786' - }, - '643627' => { - 'Header' => 'abstract.h', - 'Line' => '139', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'm', - 'type' => '3665' - }, - '2' => { - 'name' => 'e', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_export_rsa_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '823' - }, - '643906' => { - 'Header' => 'abstract.h', - 'Line' => '143', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'p', - 'type' => '3665' - }, - '2' => { - 'name' => 'q', - 'type' => '3665' - }, - '3' => { - 'name' => 'g', - 'type' => '3665' - }, - '4' => { - 'name' => 'y', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_export_dsa_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '872' - }, - '644525' => { - 'Header' => 'abstract.h', - 'Line' => '149', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'curve', - 'type' => '365382' - }, - '2' => { - 'name' => 'x', - 'type' => '3665' - }, - '3' => { - 'name' => 'y', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_export_ecc_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '943' - }, - '644826' => { - 'Line' => '993', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'parameters', - 'type' => '3665' - }, - '2' => { - 'name' => 'ecpoint', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_export_ecc_x962', - 'Source' => 'gnutls_pubkey.c' - }, - '645338' => { - 'Line' => '1045', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import', - 'Source' => 'gnutls_pubkey.c' - }, - '645937' => { - 'Line' => '1127', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'key', - 'type' => '3631' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_pubkey', - 'Source' => 'gnutls_pubkey.c' - }, - '646126' => { - 'Line' => '1165', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'key', - 'type' => '3631' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_pubkey', - 'Source' => 'gnutls_pubkey.c' - }, - '646315' => { - 'Line' => '1204', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'usage', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_set_key_usage', - 'Source' => 'gnutls_pubkey.c' - }, - '646810' => { - 'Line' => '1383', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'curve', - 'type' => '2562' - }, - '2' => { - 'name' => 'x', - 'type' => '3587' - }, - '3' => { - 'name' => 'y', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_ecc_raw', - 'Source' => 'gnutls_pubkey.c' - }, - '647158' => { - 'Line' => '1439', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'parameters', - 'type' => '3587' - }, - '2' => { - 'name' => 'ecpoint', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_ecc_x962', - 'Source' => 'gnutls_pubkey.c' - }, - '648258' => { - 'Header' => 'abstract.h', - 'Line' => '96', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'obj', - 'type' => '630301' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_pkcs11', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '327' - }, - '648872' => { - 'Line' => '1289', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'url', - 'type' => '105' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_url', - 'Source' => 'gnutls_pubkey.c' - }, - '649406' => { - 'Line' => '1668', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - }, - '2' => { - 'name' => 'plaintext', - 'type' => '3587' - }, - '3' => { - 'name' => 'ciphertext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_encrypt_data', - 'Source' => 'gnutls_pubkey.c' - }, - '649874' => { - 'Header' => 'abstract.h', - 'Line' => '134', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'hash', - 'type' => '363186' - }, - '2' => { - 'name' => 'mand', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_get_preferred_hash_algorithm', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '269' - }, - '652709' => { - 'Line' => '1998', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - }, - '1' => { - 'name' => 'fn', - 'type' => '113127' - }, - '2' => { - 'name' => 'userdata', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pubkey_set_pin_function', - 'Source' => 'gnutls_pubkey.c' - }, - '652781' => { - 'Line' => '2021', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '3631' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_x509_raw', - 'Source' => 'gnutls_pubkey.c' - }, - '653186' => { - 'Line' => '2064', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3631' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_verify_params', - 'Source' => 'gnutls_pubkey.c' - }, - '653518' => { - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'bits', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_pk_algorithm' - }, - '653530' => { - 'Line' => '1778', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '17947' - }, - '2' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_key_usage', - 'Source' => 'x509.c' - }, - '653554' => { - 'Header' => 'x509.h', - 'Line' => '1215', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'bits', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crq_get_pk_algorithm' - }, - '653566' => { - 'Line' => '1639', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '17947' - }, - '2' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_key_usage', - 'Source' => 'crq.c' - }, - '653623' => { - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_preferred_key_id' - }, - '653634' => { - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'keyid', - 'type' => '4032' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_idx' - }, - '653645' => { - 'Header' => 'openpgp.h', - 'Line' => '136', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'keyid', - 'type' => '3186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_id' - }, - '653656' => { - 'Header' => 'openpgp.h', - 'Line' => '139', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'key_usage', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_usage' - }, - '653667' => { - 'Header' => 'openpgp.h', - 'Line' => '126', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'bits', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_pk_algorithm' - }, - '653689' => { - 'Header' => 'openpgp.h', - 'Line' => '100', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'bits', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_pk_algorithm' - }, - '653700' => { - 'Header' => 'openpgp.h', - 'Line' => '108', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_key_id' - }, - '653711' => { - 'Header' => 'openpgp.h', - 'Line' => '87', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_key_usage' - }, - '653722' => { - 'Header' => 'openpgp.h', - 'Line' => '89', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112649' - }, - '1' => { - 'name' => 'fpr', - 'type' => '184' - }, - '2' => { - 'name' => 'fprlen', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_fingerprint' - }, - '653945' => { - 'Line' => '497', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'usage', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_set_key_usage', - 'Source' => 'x509_write.c' - }, - '653957' => { - 'Line' => '2180', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'usage', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_key_usage', - 'Source' => 'crq.c' - }, - '654024' => { - 'Header' => 'pkcs11.h', - 'Line' => '375', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'pkcs11_crt', - 'type' => '630301' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_import_pkcs11', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3035' - }, - '654047' => { - 'Line' => '2207', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '630495', - 'ShortName' => 'gnutls_pkcs11_obj_get_type', - 'Source' => 'pkcs11.c' - }, - '654059' => { - 'Header' => 'pkcs11.h', - 'Line' => '89', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '761498' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_init' - }, - '654070' => { - 'Line' => '1005', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - }, - '1' => { - 'name' => 'fn', - 'type' => '113127' - }, - '2' => { - 'name' => 'userdata', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_set_pin_function', - 'Source' => 'pkcs11.c' - }, - '654081' => { - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - }, - '1' => { - 'name' => 'url', - 'type' => '105' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_import_url' - }, - '654092' => { - 'Header' => 'pkcs11.h', - 'Line' => '172', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_deinit', - 'Source' => 'pkcs11.c', - 'SourceLine' => '1021' - }, - '654114' => { - 'Line' => '1098', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '3631' - }, - '1' => { - 'name' => 'url', - 'type' => '105' - }, - '2' => { - 'name' => 'srk_password', - 'type' => '105' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_tpm_url', - 'Source' => 'tpm.c' - }, - '656762' => { - 'Line' => '51', - 'Param' => { - '0' => { - 'name' => 'init', - 'type' => '388314' - }, - '1' => { - 'name' => 'deinit', - 'type' => '388353' - }, - '2' => { - 'name' => 'lock', - 'type' => '500942' - }, - '3' => { - 'name' => 'unlock', - 'type' => '500954' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_mutex', - 'Source' => 'locks.c' - }, - '670505' => { - 'Line' => '560', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'retrans_timeout', - 'type' => '130' - }, - '2' => { - 'name' => 'total_timeout', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dtls_set_timeouts', - 'Source' => 'gnutls_dtls.c' - }, - '670578' => { - 'Line' => '581', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'mtu', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dtls_set_mtu', - 'Source' => 'gnutls_dtls.c' - }, - '670639' => { - 'Line' => '639', - 'Param' => { - '0' => { - 'name' => 'version', - 'type' => '2242' - }, - '1' => { - 'name' => 'cipher', - 'type' => '1695' - }, - '2' => { - 'name' => 'mac', - 'type' => '1971' - }, - '3' => { - 'name' => 'comp', - 'type' => '2021' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_est_record_overhead_size', - 'Source' => 'gnutls_dtls.c' - }, - '670922' => { - 'Line' => '708', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_overhead_size', - 'Source' => 'gnutls_dtls.c' - }, - '675126' => { - 'Line' => '771', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'mtu', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dtls_set_data_mtu', - 'Source' => 'gnutls_dtls.c' - }, - '675302' => { - 'Line' => '821', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_dtls_get_timeout', - 'Source' => 'gnutls_dtls.c' - }, - '675470' => { - 'Line' => '873', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3665' - }, - '1' => { - 'name' => 'client_data', - 'type' => '184' - }, - '2' => { - 'name' => 'client_data_size', - 'type' => '52' - }, - '3' => { - 'name' => 'prestate', - 'type' => '676133' - }, - '4' => { - 'name' => 'ptr', - 'type' => '2660' - }, - '5' => { - 'name' => 'push_func', - 'type' => '3791' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dtls_cookie_send', - 'Source' => 'gnutls_dtls.c' - }, - '676155' => { - 'Line' => '982', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '3665' - }, - '1' => { - 'name' => 'client_data', - 'type' => '184' - }, - '2' => { - 'name' => 'client_data_size', - 'type' => '52' - }, - '3' => { - 'name' => '_msg', - 'type' => '184' - }, - '4' => { - 'name' => 'msg_size', - 'type' => '52' - }, - '5' => { - 'name' => 'prestate', - 'type' => '676133' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_dtls_cookie_verify', - 'Source' => 'gnutls_dtls.c' - }, - '676971' => { - 'Line' => '1061', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'prestate', - 'type' => '676133' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dtls_prestate_set', - 'Source' => 'gnutls_dtls.c' - }, - '677100' => { - 'Line' => '1095', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '130', - 'ShortName' => 'gnutls_record_get_discarded', - 'Source' => 'gnutls_dtls.c' - }, - '688051' => { - 'Line' => '59', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'err', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_errno', - 'Source' => 'system_override.c' - }, - '688107' => { - 'Line' => '79', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'pull_func', - 'type' => '3748' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_pull_function', - 'Source' => 'system_override.c' - }, - '688163' => { - 'Line' => '109', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'func', - 'type' => '3834' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_pull_timeout_function', - 'Source' => 'system_override.c' - }, - '688219' => { - 'Line' => '133', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'push_func', - 'type' => '3791' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_push_function', - 'Source' => 'system_override.c' - }, - '688331' => { - 'Line' => '178', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'errno_func', - 'type' => '3926' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_errno_function', - 'Source' => 'system_override.c' - }, - '694195' => { - 'Line' => '211', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1695' - }, - '1' => { - 'name' => 'priority', - 'type' => '70' - }, - '2' => { - 'name' => 'init', - 'type' => '242100' - }, - '3' => { - 'name' => 'setkey', - 'type' => '242142' - }, - '4' => { - 'name' => 'setiv', - 'type' => '242184' - }, - '5' => { - 'name' => 'encrypt', - 'type' => '242195' - }, - '6' => { - 'name' => 'decrypt', - 'offset' => '0', - 'type' => '242247' - }, - '7' => { - 'name' => 'deinit', - 'offset' => '8', - 'type' => '242395' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_crypto_register_cipher', - 'Source' => 'crypto-backend.c' - }, - '694527' => { - 'Line' => '261', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1695' - }, - '1' => { - 'name' => 'priority', - 'type' => '70' - }, - '2' => { - 'name' => 'init', - 'type' => '242100' - }, - '3' => { - 'name' => 'setkey', - 'type' => '242142' - }, - '4' => { - 'name' => 'aead_encrypt', - 'type' => '242307' - }, - '5' => { - 'name' => 'aead_decrypt', - 'type' => '242384' - }, - '6' => { - 'name' => 'deinit', - 'offset' => '0', - 'type' => '242395' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_crypto_register_aead_cipher', - 'Source' => 'crypto-backend.c' - }, - '695487' => { - 'Line' => '409', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '1971' - }, - '1' => { - 'name' => 'priority', - 'type' => '70' - }, - '2' => { - 'name' => 'init', - 'type' => '230812' - }, - '3' => { - 'name' => 'setkey', - 'type' => '230849' - }, - '4' => { - 'name' => 'setnonce', - 'type' => '230860' - }, - '5' => { - 'name' => 'hash', - 'type' => '230871' - }, - '6' => { - 'name' => 'output', - 'offset' => '0', - 'type' => '230882' - }, - '7' => { - 'name' => 'deinit', - 'offset' => '8', - 'type' => '230924' - }, - '8' => { - 'name' => 'hash_fast', - 'offset' => '16', - 'type' => '230935' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_crypto_register_mac', - 'Source' => 'crypto-backend.c' - }, - '695849' => { - 'Line' => '455', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '109671' - }, - '1' => { - 'name' => 'priority', - 'type' => '70' - }, - '2' => { - 'name' => 'init', - 'type' => '231002' - }, - '3' => { - 'name' => 'hash', - 'type' => '231039' - }, - '4' => { - 'name' => 'output', - 'type' => '231050' - }, - '5' => { - 'name' => 'deinit', - 'type' => '231061' - }, - '6' => { - 'name' => 'hash_fast', - 'offset' => '0', - 'type' => '231072' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_crypto_register_digest', - 'Source' => 'crypto-backend.c' - }, - '707532' => { - 'Line' => '107', - 'Param' => { - '0' => { - 'name' => 'db_name', - 'type' => '105' - }, - '1' => { - 'name' => 'tdb', - 'type' => '698721' - }, - '2' => { - 'name' => 'host', - 'type' => '105' - }, - '3' => { - 'name' => 'service', - 'type' => '105' - }, - '4' => { - 'name' => 'cert_type', - 'type' => '2292' - }, - '5' => { - 'name' => 'cert', - 'type' => '3587' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_verify_stored_pubkey', - 'Source' => 'verify-tofu.c' - }, - '708076' => { - 'Line' => '552', - 'Param' => { - '0' => { - 'name' => 'db_name', - 'type' => '105' - }, - '1' => { - 'name' => 'tdb', - 'type' => '698721' - }, - '2' => { - 'name' => 'host', - 'type' => '105' - }, - '3' => { - 'name' => 'service', - 'type' => '105' - }, - '4' => { - 'name' => 'cert_type', - 'type' => '2292' - }, - '5' => { - 'name' => 'cert', - 'type' => '3587' - }, - '6' => { - 'name' => 'expiration', - 'offset' => '0', - 'type' => '225' - }, - '7' => { - 'name' => 'flags', - 'offset' => '8', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_store_pubkey', - 'Source' => 'verify-tofu.c' - }, - '708809' => { - 'Line' => '637', - 'Param' => { - '0' => { - 'name' => 'db_name', - 'type' => '105' - }, - '1' => { - 'name' => 'tdb', - 'type' => '698721' - }, - '2' => { - 'name' => 'host', - 'type' => '105' - }, - '3' => { - 'name' => 'service', - 'type' => '105' - }, - '4' => { - 'name' => 'hash_algo', - 'type' => '109671' - }, - '5' => { - 'name' => 'hash', - 'type' => '3587' - }, - '6' => { - 'name' => 'expiration', - 'offset' => '0', - 'type' => '225' - }, - '7' => { - 'name' => 'flags', - 'offset' => '8', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_store_commitment', - 'Source' => 'verify-tofu.c' - }, - '709526' => { - 'Line' => '716', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '709597' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_tdb_init', - 'Source' => 'verify-tofu.c' - }, - '709603' => { - 'Line' => '741', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '698721' - }, - '1' => { - 'name' => 'store', - 'type' => '698562' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_set_store_func', - 'Source' => 'verify-tofu.c' - }, - '709662' => { - 'Line' => '762', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '698721' - }, - '1' => { - 'name' => 'cstore', - 'type' => '698615' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_set_store_commitment_func', - 'Source' => 'verify-tofu.c' - }, - '709721' => { - 'Line' => '786', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '698721' - }, - '1' => { - 'name' => 'verify', - 'type' => '698673' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_set_verify_func', - 'Source' => 'verify-tofu.c' - }, - '709780' => { - 'Line' => '798', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '698721' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_deinit', - 'Source' => 'verify-tofu.c' - }, - '712946' => { - 'Header' => 'pkcs11.h', - 'Line' => '82', - 'Param' => { - '0' => { - 'name' => 'fn', - 'type' => '113127' - }, - '1' => { - 'name' => 'userdata', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_set_pin_function', - 'Source' => 'pin.c', - 'SourceLine' => '41' - }, - '713001' => { - 'Line' => '58', - 'Param' => { - '0' => { - 'name' => 'userdata', - 'type' => '17450' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '113127', - 'ShortName' => 'gnutls_pkcs11_get_pin_function', - 'Source' => 'pin.c' - }, - '713443' => { - 'Data' => 1, - 'Header' => 'pin.h', - 'Line' => '4', - 'Return' => '113127', - 'ShortName' => '_gnutls_pin_func', - 'Source' => 'pin.c', - 'SourceLine' => '26' - }, - '713464' => { - 'Data' => 1, - 'Header' => 'pin.h', - 'Line' => '5', - 'Return' => '184', - 'ShortName' => '_gnutls_pin_data', - 'Source' => 'pin.c', - 'SourceLine' => '27' - }, - '719238' => { - 'Line' => '566', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '111762' - }, - '1' => { - 'name' => 'fdata', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '715074' - }, - '3' => { - 'name' => 'srk_password', - 'type' => '105' - }, - '4' => { - 'name' => 'key_password', - 'type' => '105' - }, - '5' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_privkey_import_tpm_raw', - 'Source' => 'tpm.c' - }, - '719328' => { - 'Line' => '1062', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '3631' - }, - '1' => { - 'name' => 'fdata', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '715074' - }, - '3' => { - 'name' => 'srk_password', - 'type' => '105' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pubkey_import_tpm_raw', - 'Source' => 'tpm.c' - }, - '729726' => { - 'Line' => '1191', - 'Param' => { - '0' => { - 'name' => 'pk', - 'type' => '2348' - }, - '1' => { - 'name' => 'bits', - 'type' => '130' - }, - '2' => { - 'name' => 'srk_password', - 'type' => '105' - }, - '3' => { - 'name' => 'key_password', - 'type' => '105' - }, - '4' => { - 'name' => 'format', - 'type' => '715074' - }, - '5' => { - 'name' => 'pub_format', - 'type' => '177145' - }, - '6' => { - 'name' => 'privkey', - 'offset' => '0', - 'type' => '3665' - }, - '7' => { - 'name' => 'pubkey', - 'offset' => '8', - 'type' => '3665' - }, - '8' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_tpm_privkey_generate', - 'Source' => 'tpm.c' - }, - '732267' => { - 'Line' => '1470', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '714978' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tpm_key_list_deinit', - 'Source' => 'tpm.c' - }, - '732344' => { - 'Line' => '1495', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '714978' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'url', - 'type' => '211849' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_tpm_key_list_get_url', - 'Source' => 'tpm.c' - }, - '732568' => { - 'Line' => '1519', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '733036' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_tpm_get_registered', - 'Source' => 'tpm.c' - }, - '733042' => { - 'Line' => '1573', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '105' - }, - '1' => { - 'name' => 'srk_password', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_tpm_privkey_delete', - 'Source' => 'tpm.c' - }, - '737134' => { - 'Line' => '399', - 'Return' => '70', - 'ShortName' => 'gnutls_fips140_mode_enabled', - 'Source' => 'fips.c' - }, - '737164' => { - 'Line' => '410', - 'Return' => '1', - 'ShortName' => '_gnutls_lib_simulate_error', - 'Source' => 'fips.c' - }, - '748623' => { - 'Line' => '106', - 'Param' => { - '0' => { - 'name' => 'st', - 'type' => '748884' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_register_custom_url', - 'Source' => 'urls.c' - }, - '749258' => { - 'Header' => 'pkcs11.h', - 'Line' => '182', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '105' - }, - '1' => { - 'name' => 'cert', - 'type' => '111797' - }, - '2' => { - 'name' => 'issuer', - 'type' => '3665' - }, - '3' => { - 'name' => 'fmt', - 'type' => '177145' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_get_raw_issuer', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3597' - }, - '752431' => { - 'Line' => '31', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '752409' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_system_key_iter_deinit', - 'Source' => 'system-keys-dummy.c' - }, - '752474' => { - 'Line' => '37', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '752600' - }, - '1' => { - 'name' => 'cert_type', - 'type' => '130' - }, - '2' => { - 'name' => 'cert_url', - 'type' => '211849' - }, - '3' => { - 'name' => 'key_url', - 'type' => '211849' - }, - '4' => { - 'name' => 'label', - 'type' => '211849' - }, - '5' => { - 'name' => 'der', - 'type' => '3665' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_system_key_iter_get_info', - 'Source' => 'system-keys-dummy.c' - }, - '752606' => { - 'Line' => '53', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'privkey', - 'type' => '111785' - }, - '2' => { - 'name' => 'label', - 'type' => '105' - }, - '3' => { - 'name' => 'cert_url', - 'type' => '211849' - }, - '4' => { - 'name' => 'key_url', - 'type' => '211849' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_system_key_add_x509', - 'Source' => 'system-keys-dummy.c' - }, - '762247' => { - 'Line' => '755', - 'Param' => { - '0' => { - 'name' => 'flags', - 'type' => '130' - }, - '1' => { - 'name' => 'deprecated_config_file', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_init', - 'Source' => 'pkcs11.c' - }, - '762327' => { - 'Line' => '800', - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_reinit', - 'Source' => 'pkcs11.c' - }, - '76524' => { - 'Header' => 'gnutls.h', - 'Line' => '1566', - 'Param' => { - '0' => { - 'name' => 's1', - 'type' => '291' - }, - '1' => { - 'name' => 's2', - 'type' => '291' - }, - '2' => { - 'name' => 'n', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_memcmp', - 'Source' => 'safe-memfuncs.c', - 'SourceLine' => '70' - }, - '766426' => { - 'Line' => '302', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '105' - }, - '1' => { - 'name' => 'params', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_add_provider', - 'Source' => 'pkcs11.c' - }, - '768106' => { - 'Line' => '529', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - }, - '1' => { - 'name' => 'itype', - 'type' => '755675' - }, - '2' => { - 'name' => 'output', - 'type' => '184' - }, - '3' => { - 'name' => 'output_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_obj_get_info', - 'Source' => 'pkcs11.c' - }, - '769467' => { - 'Line' => '873', - 'Param' => { - '0' => { - 'name' => 'fn', - 'type' => '755194' - }, - '1' => { - 'name' => 'userdata', - 'type' => '184' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_set_token_function', - 'Source' => 'pkcs11.c' - }, - '770588' => { - 'Line' => '1049', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - }, - '1' => { - 'name' => 'output_data', - 'type' => '184' - }, - '2' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_obj_export', - 'Source' => 'pkcs11.c' - }, - '770741' => { - 'Line' => '1108', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - }, - '1' => { - 'name' => 'fmt', - 'type' => '177145' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_obj_export3', - 'Source' => 'pkcs11.c' - }, - '771330' => { - 'Line' => '1085', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - }, - '1' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_obj_export2', - 'Source' => 'pkcs11.c' - }, - '778215' => { - 'Line' => '2108', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '105' - }, - '1' => { - 'name' => 'ttype', - 'type' => '755725' - }, - '2' => { - 'name' => 'output', - 'type' => '184' - }, - '3' => { - 'name' => 'output_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_token_get_info', - 'Source' => 'pkcs11.c' - }, - '778684' => { - 'Line' => '2181', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - }, - '1' => { - 'name' => 'detailed', - 'type' => '755590' - }, - '2' => { - 'name' => 'url', - 'type' => '211849' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_obj_export_url', - 'Source' => 'pkcs11.c' - }, - '782147' => { - 'Line' => '402', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - }, - '1' => { - 'name' => 'itype', - 'type' => '755675' - }, - '2' => { - 'name' => 'data', - 'type' => '291' - }, - '3' => { - 'name' => 'data_size', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_obj_set_info', - 'Source' => 'pkcs11.c' - }, - '784696' => { - 'Line' => '2061', - 'Param' => { - '0' => { - 'name' => 'seq', - 'type' => '130' - }, - '1' => { - 'name' => 'detailed', - 'type' => '755590' - }, - '2' => { - 'name' => 'url', - 'type' => '211849' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_token_get_url', - 'Source' => 'pkcs11.c' - }, - '785263' => { - 'Header' => 'pkcs11.h', - 'Line' => '360', - 'Param' => { - '0' => { - 'name' => 'p_list', - 'type' => '761498' - }, - '1' => { - 'name' => 'n_list', - 'type' => '17947' - }, - '2' => { - 'name' => 'url', - 'type' => '105' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_obj_list_import_url3', - 'Source' => 'pkcs11.c', - 'SourceLine' => '2894' - }, - '785840' => { - 'Header' => 'pkcs11.h', - 'Line' => '368', - 'Param' => { - '0' => { - 'name' => 'p_list', - 'type' => '786256' - }, - '1' => { - 'name' => 'n_list', - 'type' => '17947' - }, - '2' => { - 'name' => 'url', - 'type' => '105' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_obj_list_import_url4', - 'Source' => 'pkcs11.c', - 'SourceLine' => '2976' - }, - '786706' => { - 'Header' => 'pkcs11.h', - 'Line' => '391', - 'Param' => { - '0' => { - 'name' => 'certs', - 'type' => '112890' - }, - '1' => { - 'name' => 'cert_max', - 'type' => '130' - }, - '2' => { - 'name' => 'objs', - 'type' => '786960' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_list_import_pkcs11', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3110' - }, - '786965' => { - 'Line' => '3184', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '105' - }, - '1' => { - 'name' => 'flags', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_token_get_flags', - 'Source' => 'pkcs11.c' - }, - '787272' => { - 'Line' => '3234', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '105' - }, - '1' => { - 'name' => 'idx', - 'type' => '130' - }, - '2' => { - 'name' => 'mechanism', - 'type' => '759038' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_token_get_mechanism', - 'Source' => 'pkcs11.c' - }, - '787817' => { - 'Line' => '3293', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '630495' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_pkcs11_type_get_name', - 'Source' => 'pkcs11.c' - }, - '788482' => { - 'Header' => 'pkcs11.h', - 'Line' => '187', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '105' - }, - '1' => { - 'name' => 'dn', - 'type' => '3587' - }, - '2' => { - 'name' => 'issuer', - 'type' => '3665' - }, - '3' => { - 'name' => 'fmt', - 'type' => '177145' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_get_raw_issuer_by_dn', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3691' - }, - '789007' => { - 'Header' => 'pkcs11.h', - 'Line' => '192', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '105' - }, - '1' => { - 'name' => 'cert', - 'type' => '111797' - }, - '2' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_crt_is_known', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3780' - }, - '789807' => { - 'Line' => '3887', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - }, - '1' => { - 'name' => 'oflags', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_obj_get_flags', - 'Source' => 'pkcs11.c' - }, - '789870' => { - 'Line' => '3906', - 'Param' => { - '0' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '208', - 'ShortName' => 'gnutls_pkcs11_obj_flags_get_str', - 'Source' => 'pkcs11.c' - }, - '790651' => { - 'Data' => 1, - 'Header' => 'pkcs11_int.h', - 'Line' => '115', - 'Return' => '755194', - 'ShortName' => '_gnutls_token_func', - 'Source' => 'pkcs11.c', - 'SourceLine' => '105' - }, - '791519' => { - 'Line' => '1069', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'id', - 'type' => '184' - }, - '2' => { - 'name' => 'id_size', - 'type' => '5416' - }, - '3' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_authority_key_id', - 'Source' => 'x509.c' - }, - '791530' => { - 'Header' => 'x509.h', - 'Line' => '356', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'result', - 'type' => '184' - }, - '2' => { - 'name' => 'result_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_serial' - }, - '800697' => { - 'Line' => '247', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '630301' - }, - '1' => { - 'name' => 'exts', - 'type' => '801245' - }, - '2' => { - 'name' => 'exts_size', - 'type' => '17947' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_obj_get_exts', - 'Source' => 'pkcs11x.c' - }, - '801452' => { - 'Line' => '3049', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '798703' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_ext_deinit', - 'Source' => 'x509_ext.c' - }, - '810911' => { - 'Line' => '176', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '112783' - }, - '1' => { - 'name' => 'itype', - 'type' => '755675' - }, - '2' => { - 'name' => 'output', - 'type' => '184' - }, - '3' => { - 'name' => 'output_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_privkey_get_info', - 'Source' => 'pkcs11_privkey.c' - }, - '814485' => { - 'Line' => '581', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '112783' - }, - '1' => { - 'name' => 'detailed', - 'type' => '755590' - }, - '2' => { - 'name' => 'url', - 'type' => '211849' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_privkey_export_url', - 'Source' => 'pkcs11_privkey.c' - }, - '814668' => { - 'Line' => '686', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '105' - }, - '1' => { - 'name' => 'pk', - 'type' => '2348' - }, - '2' => { - 'name' => 'bits', - 'type' => '130' - }, - '3' => { - 'name' => 'label', - 'type' => '105' - }, - '4' => { - 'name' => 'cid', - 'type' => '3587' - }, - '5' => { - 'name' => 'fmt', - 'type' => '177145' - }, - '6' => { - 'name' => 'pubkey', - 'offset' => '0', - 'type' => '3665' - }, - '7' => { - 'name' => 'key_usage', - 'offset' => '8', - 'type' => '130' - }, - '8' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_privkey_generate3', - 'Source' => 'pkcs11_privkey.c' - }, - '816790' => { - 'Line' => '1057', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '112783' - }, - '1' => { - 'name' => 'fmt', - 'type' => '177145' - }, - '2' => { - 'name' => 'data', - 'type' => '3665' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_privkey_export_pubkey', - 'Source' => 'pkcs11_privkey.c' - }, - '826142' => { - 'Line' => '91', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '105' - }, - '1' => { - 'name' => 'crt', - 'type' => '111797' - }, - '2' => { - 'name' => 'label', - 'type' => '105' - }, - '3' => { - 'name' => 'cid', - 'type' => '3587' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_copy_x509_crt2', - 'Source' => 'pkcs11_write.c' - }, - '827185' => { - 'Line' => '245', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '105' - }, - '1' => { - 'name' => 'crt', - 'type' => '111797' - }, - '2' => { - 'name' => 'data', - 'type' => '3665' - }, - '3' => { - 'name' => 'label', - 'type' => '105' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_copy_attached_extension', - 'Source' => 'pkcs11_write.c' - }, - '827969' => { - 'Line' => '348', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '105' - }, - '1' => { - 'name' => 'key', - 'type' => '111785' - }, - '2' => { - 'name' => 'label', - 'type' => '105' - }, - '3' => { - 'name' => 'cid', - 'type' => '3587' - }, - '4' => { - 'name' => 'key_usage', - 'type' => '130' - }, - '5' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_copy_x509_privkey2', - 'Source' => 'pkcs11_write.c' - }, - '829544' => { - 'Line' => '819', - 'Param' => { - '0' => { - 'name' => 'object_url', - 'type' => '105' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_delete_url', - 'Source' => 'pkcs11_write.c' - }, - '829870' => { - 'Line' => '864', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '105' - }, - '1' => { - 'name' => 'so_pin', - 'type' => '105' - }, - '2' => { - 'name' => 'label', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_token_init', - 'Source' => 'pkcs11_write.c' - }, - '830500' => { - 'Line' => '922', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '105' - }, - '1' => { - 'name' => 'oldpin', - 'type' => '105' - }, - '2' => { - 'name' => 'newpin', - 'type' => '105' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_token_set_pin', - 'Source' => 'pkcs11_write.c' - }, - '831164' => { - 'Line' => '1001', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '105' - }, - '1' => { - 'name' => 'rnddata', - 'type' => '184' - }, - '2' => { - 'name' => 'len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_token_get_random', - 'Source' => 'pkcs11_write.c' - }, - '832010' => { - 'Header' => 'x509.h', - 'Line' => '146', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '184' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_export' - }, - '832056' => { - 'Line' => '900', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '111797' - }, - '1' => { - 'name' => 'ret', - 'type' => '184' - }, - '2' => { - 'name' => 'ret_size', - 'type' => '5416' - }, - '3' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_subject_key_id', - 'Source' => 'x509.c' - }, - '832067' => { - 'Line' => '2631', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '111797' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3186' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crt_get_key_id', - 'Source' => 'x509.c' - }, - '832101' => { - 'Line' => '1531', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3186' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_get_key_id', - 'Source' => 'privkey.c' - }, - '832113' => { - 'Line' => '1282', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'm', - 'type' => '3665' - }, - '2' => { - 'name' => 'e', - 'type' => '3665' - }, - '3' => { - 'name' => 'd', - 'type' => '3665' - }, - '4' => { - 'name' => 'p', - 'type' => '3665' - }, - '5' => { - 'name' => 'q', - 'type' => '3665' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '3665' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '3665' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_export_rsa_raw2', - 'Source' => 'privkey.c' - }, - '832148' => { - 'Line' => '1309', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '111785' - }, - '1' => { - 'name' => 'p', - 'type' => '3665' - }, - '2' => { - 'name' => 'q', - 'type' => '3665' - }, - '3' => { - 'name' => 'g', - 'type' => '3665' - }, - '4' => { - 'name' => 'y', - 'type' => '3665' - }, - '5' => { - 'name' => 'x', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_privkey_export_dsa_raw', - 'Source' => 'privkey.c' - }, - '839137' => { - 'Line' => '47', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '105' - }, - '1' => { - 'name' => 'key', - 'type' => '3665' - }, - '2' => { - 'name' => 'label', - 'type' => '105' - }, - '3' => { - 'name' => 'key_usage', - 'type' => '130' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_pkcs11_copy_secret_key', - 'Source' => 'pkcs11_secret.c' - }, - '866054' => { - 'Line' => '414', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '854145' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_free_client_credentials', - 'Source' => 'gnutls_srp.c' - }, - '866117' => { - 'Line' => '432', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '866187' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srp_allocate_client_credentials', - 'Source' => 'gnutls_srp.c' - }, - '866193' => { - 'Line' => '459', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '854145' - }, - '1' => { - 'name' => 'username', - 'type' => '105' - }, - '2' => { - 'name' => 'password', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srp_set_client_credentials', - 'Source' => 'gnutls_srp.c' - }, - '866370' => { - 'Line' => '489', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '854054' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_free_server_credentials', - 'Source' => 'gnutls_srp.c' - }, - '866471' => { - 'Line' => '521', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '866772' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srp_allocate_server_credentials', - 'Source' => 'gnutls_srp.c' - }, - '866778' => { - 'Line' => '571', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '854054' - }, - '1' => { - 'name' => 'password_file', - 'type' => '105' - }, - '2' => { - 'name' => 'password_conf_file', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srp_set_server_credentials_file', - 'Source' => 'gnutls_srp.c' - }, - '867101' => { - 'Line' => '645', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '854054' - }, - '1' => { - 'name' => 'func', - 'type' => '861141' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_server_credentials_function', - 'Source' => 'gnutls_srp.c' - }, - '867160' => { - 'Line' => '679', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '854145' - }, - '1' => { - 'name' => 'func', - 'type' => '861135' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_client_credentials_function', - 'Source' => 'gnutls_srp.c' - }, - '867219' => { - 'Line' => '698', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_srp_server_get_username', - 'Source' => 'gnutls_srp.c' - }, - '867358' => { - 'Line' => '730', - 'Param' => { - '0' => { - 'name' => 'username', - 'type' => '105' - }, - '1' => { - 'name' => 'password', - 'type' => '105' - }, - '2' => { - 'name' => 'salt', - 'type' => '3587' - }, - '3' => { - 'name' => 'generator', - 'type' => '3587' - }, - '4' => { - 'name' => 'prime', - 'type' => '3587' - }, - '5' => { - 'name' => 'res', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_srp_verifier', - 'Source' => 'gnutls_srp.c' - }, - '868226' => { - 'Line' => '786', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - }, - '1' => { - 'name' => 'bits', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_prime_bits', - 'Source' => 'gnutls_srp.c' - }, - '868285' => { - 'Line' => '822', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '854054' - }, - '1' => { - 'name' => 'seed', - 'type' => '3587' - }, - '2' => { - 'name' => 'salt_length', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_server_fake_salt_seed', - 'Source' => 'gnutls_srp.c' - }, - '880078' => { - 'Line' => '45', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '873025' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_free_client_credentials', - 'Source' => 'gnutls_psk.c' - }, - '880213' => { - 'Line' => '93', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '873025' - }, - '1' => { - 'name' => 'username', - 'type' => '105' - }, - '2' => { - 'name' => 'key', - 'type' => '3587' - }, - '3' => { - 'name' => 'flags', - 'type' => '873122' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_psk_set_client_credentials', - 'Source' => 'gnutls_psk.c' - }, - '880692' => { - 'Line' => '158', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '440299' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_free_server_credentials', - 'Source' => 'gnutls_psk.c' - }, - '880753' => { - 'Line' => '176', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '880822' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_psk_allocate_server_credentials', - 'Source' => 'gnutls_psk.c' - }, - '880828' => { - 'Line' => '201', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '440299' - }, - '1' => { - 'name' => 'password_file', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_psk_set_server_credentials_file', - 'Source' => 'gnutls_psk.c' - }, - '880981' => { - 'Line' => '241', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '440299' - }, - '1' => { - 'name' => 'hint', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_psk_set_server_credentials_hint', - 'Source' => 'gnutls_psk.c' - }, - '881117' => { - 'Line' => '274', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '440299' - }, - '1' => { - 'name' => 'func', - 'type' => '448220' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_server_credentials_function', - 'Source' => 'gnutls_psk.c' - }, - '881176' => { - 'Line' => '303', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '873025' - }, - '1' => { - 'name' => 'func', - 'type' => '879915' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_client_credentials_function', - 'Source' => 'gnutls_psk.c' - }, - '881235' => { - 'Line' => '321', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_psk_server_get_username', - 'Source' => 'gnutls_psk.c' - }, - '881374' => { - 'Line' => '349', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_psk_client_get_hint', - 'Source' => 'gnutls_psk.c' - }, - '881513' => { - 'Line' => '375', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '440299' - }, - '1' => { - 'name' => 'dh_params', - 'type' => '2759' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_server_dh_params', - 'Source' => 'gnutls_psk.c' - }, - '881572' => { - 'Line' => '391', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '440299' - }, - '1' => { - 'name' => 'func', - 'type' => '120581' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_server_params_function', - 'Source' => 'gnutls_psk.c' - }, - '905101' => { - 'Header' => 'x509.h', - 'Line' => '460', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_dn_oid_known', - 'Source' => 'common.c', - 'SourceLine' => '241' - }, - '905262' => { - 'Header' => 'x509.h', - 'Line' => '463', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '105' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '105', - 'ShortName' => 'gnutls_x509_dn_oid_name', - 'Source' => 'common.c', - 'SourceLine' => '271' - }, - '940694' => { - 'Line' => '752', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_export2', - 'Source' => 'crl.c' - }, - '941871' => { - 'Header' => 'x509.h', - 'Line' => '633', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_import', - 'Source' => 'crl.c', - 'SourceLine' => '119' - }, - '942384' => { - 'Header' => 'x509.h', - 'Line' => '647', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'buf', - 'type' => '208' - }, - '2' => { - 'name' => 'sizeof_buf', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_issuer_dn', - 'Source' => 'crl.c', - 'SourceLine' => '203' - }, - '942564' => { - 'Line' => '243', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'indx', - 'type' => '70' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '130' - }, - '4' => { - 'name' => 'buf', - 'type' => '184' - }, - '5' => { - 'name' => 'sizeof_buf', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_issuer_dn_by_oid', - 'Source' => 'crl.c' - }, - '942907' => { - 'Line' => '283', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_dn_oid', - 'Source' => 'crl.c' - }, - '943110' => { - 'Line' => '312', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'dn', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_issuer_dn2', - 'Source' => 'crl.c' - }, - '943266' => { - 'Header' => 'x509.h', - 'Line' => '658', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_signature_algorithm', - 'Source' => 'crl.c', - 'SourceLine' => '333' - }, - '943476' => { - 'Header' => 'x509.h', - 'Line' => '659', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'sig', - 'type' => '208' - }, - '2' => { - 'name' => 'sizeof_sig', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_signature', - 'Source' => 'crl.c', - 'SourceLine' => '375' - }, - '943809' => { - 'Header' => 'x509.h', - 'Line' => '661', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_version', - 'Source' => 'crl.c', - 'SourceLine' => '425' - }, - '944081' => { - 'Header' => 'x509.h', - 'Line' => '663', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_x509_crl_get_this_update', - 'Source' => 'crl.c', - 'SourceLine' => '454' - }, - '944220' => { - 'Header' => 'x509.h', - 'Line' => '664', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '225', - 'ShortName' => 'gnutls_x509_crl_get_next_update', - 'Source' => 'crl.c', - 'SourceLine' => '475' - }, - '944359' => { - 'Header' => 'x509.h', - 'Line' => '666', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_crt_count', - 'Source' => 'crl.c', - 'SourceLine' => '495' - }, - '944523' => { - 'Line' => '536', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'serial', - 'type' => '3186' - }, - '3' => { - 'name' => 'serial_size', - 'type' => '5416' - }, - '4' => { - 'name' => 't', - 'type' => '17423' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_crt_serial', - 'Source' => 'crl.c' - }, - '945017' => { - 'Header' => 'x509.h', - 'Line' => '678', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '939238' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crl_iter_deinit', - 'Source' => 'crl.c', - 'SourceLine' => '582' - }, - '945081' => { - 'Header' => 'x509.h', - 'Line' => '673', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'iter', - 'type' => '945757' - }, - '2' => { - 'name' => 'serial', - 'type' => '3186' - }, - '3' => { - 'name' => 'serial_size', - 'type' => '5416' - }, - '4' => { - 'name' => 't', - 'type' => '17423' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_iter_crt_serial', - 'Source' => 'crl.c', - 'SourceLine' => '612' - }, - '945763' => { - 'Line' => '689', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'dn', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_raw_issuer_dn', - 'Source' => 'crl.c' - }, - '945945' => { - 'Line' => '720', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '184' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_export', - 'Source' => 'crl.c' - }, - '946629' => { - 'Line' => '864', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'alt', - 'type' => '184' - }, - '3' => { - 'name' => 'alt_size', - 'type' => '5416' - }, - '4' => { - 'name' => 'alt_type', - 'type' => '17947' - }, - '5' => { - 'name' => 'serial', - 'type' => '184' - }, - '6' => { - 'name' => 'serial_size', - 'offset' => '0', - 'type' => '5416' - }, - '7' => { - 'name' => 'critical', - 'offset' => '8', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_authority_key_gn_serial', - 'Source' => 'crl.c' - }, - '947259' => { - 'Line' => '934', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'id', - 'type' => '184' - }, - '2' => { - 'name' => 'id_size', - 'type' => '5416' - }, - '3' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_authority_key_id', - 'Source' => 'crl.c' - }, - '947752' => { - 'Header' => 'x509.h', - 'Line' => '728', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'ret', - 'type' => '184' - }, - '2' => { - 'name' => 'ret_size', - 'type' => '5416' - }, - '3' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_number', - 'Source' => 'crl.c', - 'SourceLine' => '981' - }, - '948073' => { - 'Line' => '1041', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_extension_oid', - 'Source' => 'crl.c' - }, - '948286' => { - 'Header' => 'x509.h', - 'Line' => '735', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '5416' - }, - '4' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_extension_info', - 'Source' => 'crl.c', - 'SourceLine' => '1087' - }, - '948864' => { - 'Line' => '1159', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'data', - 'type' => '184' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_get_extension_data', - 'Source' => 'crl.c' - }, - '949232' => { - 'Line' => '1268', - 'Param' => { - '0' => { - 'name' => 'crls', - 'type' => '567509' - }, - '1' => { - 'name' => 'crl_max', - 'type' => '17947' - }, - '2' => { - 'name' => 'data', - 'type' => '3587' - }, - '3' => { - 'name' => 'format', - 'type' => '177145' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_list_import', - 'Source' => 'crl.c' - }, - '949837' => { - 'Header' => 'x509.h', - 'Line' => '686', - 'Param' => { - '0' => { - 'name' => 'crls', - 'type' => '950146' - }, - '1' => { - 'name' => 'size', - 'type' => '17947' - }, - '2' => { - 'name' => 'data', - 'type' => '3587' - }, - '3' => { - 'name' => 'format', - 'type' => '177145' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_list_import2', - 'Source' => 'crl.c', - 'SourceLine' => '1207' - }, - '950365' => { - 'Header' => 'x509_int.h', - 'Line' => '145', - 'Param' => { - '0' => { - 'name' => 'asn1_struct', - 'type' => '117419' - }, - '1' => { - 'name' => 'asn1_rdn_name', - 'type' => '105' - }, - '2' => { - 'name' => 'given_oid', - 'type' => '105' - }, - '3' => { - 'name' => 'indx', - 'type' => '70' - }, - '4' => { - 'name' => 'raw_flag', - 'type' => '130' - }, - '5' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => '_gnutls_x509_parse_dn_oid', - 'Source' => 'dn.c', - 'SourceLine' => '282' - }, - '954381' => { - 'Line' => '209', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'serial', - 'type' => '291' - }, - '2' => { - 'name' => 'serial_size', - 'type' => '52' - }, - '3' => { - 'name' => 'revocation_time', - 'type' => '225' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_set_crt_serial', - 'Source' => 'crl_write.c' - }, - '954477' => { - 'Line' => '464', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'issuer', - 'type' => '111797' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '111762' - }, - '3' => { - 'name' => 'dig', - 'type' => '109671' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_privkey_sign', - 'Source' => 'crl_write.c' - }, - '954567' => { - 'Line' => '94', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'issuer', - 'type' => '111797' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '111785' - }, - '3' => { - 'name' => 'dig', - 'type' => '109671' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_sign2', - 'Source' => 'crl_write.c' - }, - '954668' => { - 'Line' => '52', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'version', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_set_version', - 'Source' => 'crl_write.c' - }, - '954933' => { - 'Line' => '165', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'act_time', - 'type' => '225' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_set_this_update', - 'Source' => 'crl_write.c' - }, - '955091' => { - 'Line' => '186', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'exp_time', - 'type' => '225' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_set_next_update', - 'Source' => 'crl_write.c' - }, - '955716' => { - 'Line' => '270', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'crt', - 'type' => '111797' - }, - '2' => { - 'name' => 'revocation_time', - 'type' => '225' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_set_crt', - 'Source' => 'crl_write.c' - }, - '956056' => { - 'Line' => '332', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'id', - 'type' => '291' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_set_authority_key_id', - 'Source' => 'crl_write.c' - }, - '95629' => { - 'Header' => 'gnutls.h', - 'Line' => '1006', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_check_pending', - 'Source' => 'gnutls_buffers.c', - 'SourceLine' => '95' - }, - '956507' => { - 'Line' => '396', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'nr', - 'type' => '291' - }, - '2' => { - 'name' => 'nr_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_set_number', - 'Source' => 'crl_write.c' - }, - '95676' => { - 'Line' => '111', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '2672' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_check_corked', - 'Source' => 'gnutls_buffers.c' - }, - '957650' => { - 'Line' => '148', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'issuer', - 'type' => '111797' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crl_sign', - 'Source' => 'crl_write.c' - }, - '962098' => { - 'Header' => 'x509.h', - 'Line' => '1157', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'indx', - 'type' => '70' - }, - '3' => { - 'name' => 'buf', - 'type' => '184' - }, - '4' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_attribute_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '733' - }, - '962199' => { - 'Line' => '802', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'version', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_version', - 'Source' => 'crq.c' - }, - '962265' => { - 'Header' => 'x509.h', - 'Line' => '1144', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_version', - 'Source' => 'crq.c', - 'SourceLine' => '836' - }, - '962385' => { - 'Line' => '2517', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'key', - 'type' => '111762' - }, - '2' => { - 'name' => 'dig', - 'type' => '109671' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_privkey_sign', - 'Source' => 'crq.c' - }, - '962487' => { - 'Line' => '1088', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'key', - 'type' => '111785' - }, - '2' => { - 'name' => 'dig', - 'type' => '109671' - }, - '3' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_sign2', - 'Source' => 'crq.c' - }, - '965462' => { - 'Line' => '50', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '965668' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_init', - 'Source' => 'crq.c' - }, - '965674' => { - 'Line' => '79', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crq_deinit', - 'Source' => 'crq.c' - }, - '965760' => { - 'Line' => '110', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - }, - '2' => { - 'name' => 'format', - 'type' => '177145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_import', - 'Source' => 'crq.c' - }, - '966274' => { - 'Header' => 'x509.h', - 'Line' => '475', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_signature_algorithm', - 'Source' => 'crq.c', - 'SourceLine' => '175' - }, - '966350' => { - 'Header' => 'x509.h', - 'Line' => '1126', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'buf', - 'type' => '208' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_dn', - 'Source' => 'crq.c', - 'SourceLine' => '263' - }, - '966530' => { - 'Line' => '290', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'dn', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_dn2', - 'Source' => 'crq.c' - }, - '966686' => { - 'Line' => '328', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'indx', - 'type' => '70' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '130' - }, - '4' => { - 'name' => 'buf', - 'type' => '184' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_dn_by_oid', - 'Source' => 'crq.c' - }, - '967038' => { - 'Line' => '365', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_dn_oid', - 'Source' => 'crq.c' - }, - '967241' => { - 'Header' => 'x509.h', - 'Line' => '1150', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'pass', - 'type' => '208' - }, - '2' => { - 'name' => 'pass_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_challenge_password', - 'Source' => 'crq.c', - 'SourceLine' => '512' - }, - '967534' => { - 'Header' => 'x509.h', - 'Line' => '1154', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'buf', - 'type' => '184' - }, - '3' => { - 'name' => 'buf_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_attribute_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '694' - }, - '968072' => { - 'Line' => '777', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '130' - }, - '3' => { - 'name' => 'data', - 'type' => '291' - }, - '4' => { - 'name' => 'sizeof_data', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_dn_by_oid', - 'Source' => 'crq.c' - }, - '968840' => { - 'Line' => '872', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'key', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_key', - 'Source' => 'crq.c' - }, - '969006' => { - 'Line' => '970', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'm', - 'type' => '3587' - }, - '2' => { - 'name' => 'e', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_key_rsa_raw', - 'Source' => 'crq.c' - }, - '969460' => { - 'Line' => '1033', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'pass', - 'type' => '105' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_challenge_password', - 'Source' => 'crq.c' - }, - '969785' => { - 'Line' => '1165', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '184' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_export', - 'Source' => 'crq.c' - }, - '970001' => { - 'Line' => '1198', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_export2', - 'Source' => 'crq.c' - }, - '970387' => { - 'Line' => '910', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'm', - 'type' => '3665' - }, - '2' => { - 'name' => 'e', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_key_rsa_raw', - 'Source' => 'crq.c' - }, - '970920' => { - 'Header' => 'x509.h', - 'Line' => '1212', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_attribute_info', - 'Source' => 'crq.c', - 'SourceLine' => '1268' - }, - '971288' => { - 'Header' => 'x509.h', - 'Line' => '1209', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'data', - 'type' => '184' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_attribute_data', - 'Source' => 'crq.c', - 'SourceLine' => '1322' - }, - '971656' => { - 'Header' => 'x509.h', - 'Line' => '1205', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '5416' - }, - '4' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_extension_info', - 'Source' => 'crq.c', - 'SourceLine' => '1377' - }, - '972865' => { - 'Header' => 'x509.h', - 'Line' => '1202', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'indx', - 'type' => '130' - }, - '2' => { - 'name' => 'data', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_extension_data2', - 'Source' => 'crq.c', - 'SourceLine' => '1540' - }, - '973654' => { - 'Header' => 'x509.h', - 'Line' => '1198', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'data', - 'type' => '184' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_extension_data', - 'Source' => 'crq.c', - 'SourceLine' => '1502' - }, - '973967' => { - 'Line' => '1906', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'indx', - 'type' => '70' - }, - '3' => { - 'name' => 'buf', - 'type' => '184' - }, - '4' => { - 'name' => 'buf_size', - 'type' => '5416' - }, - '5' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_extension_by_oid', - 'Source' => 'crq.c' - }, - '974380' => { - 'Line' => '195', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'activation', - 'type' => '17423' - }, - '2' => { - 'name' => 'expiration', - 'type' => '17423' - }, - '3' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_private_key_usage_period', - 'Source' => 'crq.c' - }, - '975417' => { - 'Line' => '1695', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'critical', - 'type' => '17947' - }, - '2' => { - 'name' => 'ca', - 'type' => '17947' - }, - '3' => { - 'name' => 'pathlen', - 'type' => '13711' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_basic_constraints', - 'Source' => 'crq.c' - }, - '976728' => { - 'Line' => '1837', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'ret', - 'type' => '184' - }, - '3' => { - 'name' => 'ret_size', - 'type' => '5416' - }, - '4' => { - 'name' => 'ret_type', - 'type' => '17947' - }, - '5' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_subject_alt_name', - 'Source' => 'crq.c' - }, - '976915' => { - 'Line' => '1876', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'seq', - 'type' => '130' - }, - '2' => { - 'name' => 'ret', - 'type' => '184' - }, - '3' => { - 'name' => 'ret_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_subject_alt_othername_oid', - 'Source' => 'crq.c' - }, - '977066' => { - 'Line' => '1965', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'indx', - 'type' => '70' - }, - '3' => { - 'name' => 'output', - 'type' => '3665' - }, - '4' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_extension_by_oid2', - 'Source' => 'crq.c' - }, - '977454' => { - 'Line' => '2029', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'nt', - 'type' => '370754' - }, - '2' => { - 'name' => 'data', - 'type' => '291' - }, - '3' => { - 'name' => 'data_size', - 'type' => '130' - }, - '4' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_subject_alt_name', - 'Source' => 'crq.c' - }, - '977990' => { - 'Line' => '2134', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'ca', - 'type' => '130' - }, - '2' => { - 'name' => 'pathLenConstraint', - 'type' => '70' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_basic_constraints', - 'Source' => 'crq.c' - }, - '978524' => { - 'Line' => '2232', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'oid', - 'type' => '184' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '5416' - }, - '4' => { - 'name' => 'critical', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_key_purpose_oid', - 'Source' => 'crq.c' - }, - '979596' => { - 'Line' => '2335', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'oid', - 'type' => '291' - }, - '2' => { - 'name' => 'critical', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_key_purpose_oid', - 'Source' => 'crq.c' - }, - '980737' => { - 'Header' => 'x509.h', - 'Line' => '1218', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3186' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_get_key_id', - 'Source' => 'crq.c', - 'SourceLine' => '2462' - }, - '981957' => { - 'Line' => '1138', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'key', - 'type' => '111785' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_sign', - 'Source' => 'crq.c' - }, - '982062' => { - 'Header' => 'x509.h', - 'Line' => '1110', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'flags', - 'type' => '130' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_verify', - 'Source' => 'crq.c', - 'SourceLine' => '2600' - }, - '982701' => { - 'Line' => '2673', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '629572' - }, - '1' => { - 'name' => 'activation', - 'type' => '225' - }, - '2' => { - 'name' => 'expiration', - 'type' => '225' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_crq_set_private_key_usage_period', - 'Source' => 'crq.c' - }, - '983791' => { - 'Line' => '1061', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '17947' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_key_usage', - 'Source' => 'x509_ext.c' - }, - '983802' => { - 'Line' => '1269', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '3587' - }, - '1' => { - 'name' => 'ca', - 'type' => '17947' - }, - '2' => { - 'name' => 'pathlen', - 'type' => '13711' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_import_basic_constraints', - 'Source' => 'x509_ext.c' - }, - '983856' => { - 'Line' => '1337', - 'Param' => { - '0' => { - 'name' => 'ca', - 'type' => '130' - }, - '1' => { - 'name' => 'pathlen', - 'type' => '70' - }, - '2' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_basic_constraints', - 'Source' => 'x509_ext.c' - }, - '983867' => { - 'Line' => '1113', - 'Param' => { - '0' => { - 'name' => 'usage', - 'type' => '130' - }, - '1' => { - 'name' => 'ext', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_ext_export_key_usage', - 'Source' => 'x509_ext.c' - }, - '993467' => { - 'Line' => '754', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '993661' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_dn_init', - 'Source' => 'dn.c' - }, - '993667' => { - 'Line' => '786', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '985583' - }, - '1' => { - 'name' => 'data', - 'type' => '3587' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_dn_import', - 'Source' => 'dn.c' - }, - '993979' => { - 'Line' => '812', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '985583' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_dn_deinit', - 'Source' => 'dn.c' - }, - '994045' => { - 'Line' => '833', - 'Param' => { - '0' => { - 'name' => 'idn', - 'type' => '3587' - }, - '1' => { - 'name' => 'buf', - 'type' => '208' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_rdn_get', - 'Source' => 'dn.c' - }, - '994571' => { - 'Line' => '890', - 'Param' => { - '0' => { - 'name' => 'idn', - 'type' => '3587' - }, - '1' => { - 'name' => 'oid', - 'type' => '105' - }, - '2' => { - 'name' => 'indx', - 'type' => '70' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '130' - }, - '4' => { - 'name' => 'buf', - 'type' => '184' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_rdn_get_by_oid', - 'Source' => 'dn.c' - }, - '995280' => { - 'Line' => '946', - 'Param' => { - '0' => { - 'name' => 'idn', - 'type' => '3587' - }, - '1' => { - 'name' => 'indx', - 'type' => '70' - }, - '2' => { - 'name' => 'buf', - 'type' => '184' - }, - '3' => { - 'name' => 'buf_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_rdn_get_oid', - 'Source' => 'dn.c' - }, - '995899' => { - 'Line' => '1022', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '985583' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '184' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '5416' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_dn_export', - 'Source' => 'dn.c' - }, - '996137' => { - 'Line' => '1058', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '985583' - }, - '1' => { - 'name' => 'format', - 'type' => '177145' - }, - '2' => { - 'name' => 'out', - 'type' => '3665' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '70', - 'ShortName' => 'gnutls_x509_dn_export2', - 'Source' => 'dn.c' - } - }, - 'SymbolVersion' => { - 'Trspi_Error_Code' => 'writev@@GLIBC_2.2.5', - 'Trspi_Error_Layer' => 'writev@@GLIBC_2.2.5', - 'Trspi_Error_String' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_Close' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_CloseObject' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_Connect' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_Create' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_CreateObject' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_FreeMemory' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_GetRegisteredKeysByUUID2' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_GetTpmObject' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_LoadKeyByBlob' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_LoadKeyByUUID' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_RegisterKey' => 'writev@@GLIBC_2.2.5', - 'Tspi_Context_UnregisterKey' => 'writev@@GLIBC_2.2.5', - 'Tspi_DecodeBER_TssBlob' => 'writev@@GLIBC_2.2.5', - 'Tspi_EncodeDER_TssBlob' => 'writev@@GLIBC_2.2.5', - 'Tspi_GetAttribData' => 'writev@@GLIBC_2.2.5', - 'Tspi_GetPolicyObject' => 'writev@@GLIBC_2.2.5', - 'Tspi_Hash_SetHashValue' => 'writev@@GLIBC_2.2.5', - 'Tspi_Hash_Sign' => 'writev@@GLIBC_2.2.5', - 'Tspi_Key_CreateKey' => 'writev@@GLIBC_2.2.5', - 'Tspi_Policy_AssignToObject' => 'writev@@GLIBC_2.2.5', - 'Tspi_Policy_SetSecret' => 'writev@@GLIBC_2.2.5', - 'Tspi_SetAttribUint32' => 'writev@@GLIBC_2.2.5', - 'Tspi_TPM_StirRandom' => 'writev@@GLIBC_2.2.5', - '_ITM_deregisterTMCloneTable' => 'writev@@GLIBC_2.2.5', - '_ITM_registerTMCloneTable' => 'writev@@GLIBC_2.2.5', - '_Jv_RegisterClasses' => 'writev@@GLIBC_2.2.5', - '__gmon_start__' => 'writev@@GLIBC_2.2.5', - '__gmpz_add' => 'writev@@GLIBC_2.2.5', - '__gmpz_add_ui' => 'writev@@GLIBC_2.2.5', - '__gmpz_cdiv_q' => 'writev@@GLIBC_2.2.5', - '__gmpz_clear' => 'writev@@GLIBC_2.2.5', - '__gmpz_cmp' => 'writev@@GLIBC_2.2.5', - '__gmpz_cmp_ui' => 'writev@@GLIBC_2.2.5', - '__gmpz_fdiv_r' => 'writev@@GLIBC_2.2.5', - '__gmpz_init' => 'writev@@GLIBC_2.2.5', - '__gmpz_invert' => 'writev@@GLIBC_2.2.5', - '__gmpz_mod' => 'writev@@GLIBC_2.2.5', - '__gmpz_mul' => 'writev@@GLIBC_2.2.5', - '__gmpz_mul_ui' => 'writev@@GLIBC_2.2.5', - '__gmpz_powm' => 'writev@@GLIBC_2.2.5', - '__gmpz_probab_prime_p' => 'writev@@GLIBC_2.2.5', - '__gmpz_set' => 'writev@@GLIBC_2.2.5', - '__gmpz_set_ui' => 'writev@@GLIBC_2.2.5', - '__gmpz_sizeinbase' => 'writev@@GLIBC_2.2.5', - '__gmpz_sub' => 'writev@@GLIBC_2.2.5', - '__gmpz_sub_ui' => 'writev@@GLIBC_2.2.5', - '_gnutls_asn2err' => '_gnutls_asn2err@@GNUTLS_PRIVATE', - '_gnutls_bin2hex' => '_gnutls_bin2hex@@GNUTLS_PRIVATE', - '_gnutls_buffer_append_data_prefix' => '_gnutls_buffer_append_data_prefix@@GNUTLS_PRIVATE', - '_gnutls_buffer_append_prefix' => '_gnutls_buffer_append_prefix@@GNUTLS_PRIVATE', - '_gnutls_buffer_append_str' => '_gnutls_buffer_append_str@@GNUTLS_PRIVATE', - '_gnutls_buffer_clear' => '_gnutls_buffer_clear@@GNUTLS_PRIVATE', - '_gnutls_buffer_init' => '_gnutls_buffer_init@@GNUTLS_PRIVATE', - '_gnutls_buffer_pop_data' => '_gnutls_buffer_pop_data@@GNUTLS_PRIVATE', - '_gnutls_buffer_pop_prefix' => '_gnutls_buffer_pop_prefix@@GNUTLS_PRIVATE', - '_gnutls_buffer_to_datum' => '_gnutls_buffer_to_datum@@GNUTLS_PRIVATE', - '_gnutls_encode_ber_rs_raw' => '_gnutls_encode_ber_rs_raw@@GNUTLS_FIPS140_3_4', - '_gnutls_ext_get_session_data' => '_gnutls_ext_get_session_data@@GNUTLS_PRIVATE', - '_gnutls_ext_register' => '_gnutls_ext_register@@GNUTLS_PRIVATE', - '_gnutls_ext_set_session_data' => '_gnutls_ext_set_session_data@@GNUTLS_PRIVATE', - '_gnutls_hello_set_default_version' => '_gnutls_hello_set_default_version@@GNUTLS_PRIVATE', - '_gnutls_lib_simulate_error' => '_gnutls_lib_simulate_error@@GNUTLS_PRIVATE', - '_gnutls_log' => '_gnutls_log@@GNUTLS_PRIVATE', - '_gnutls_log_level' => '_gnutls_log_level@@GNUTLS_PRIVATE', - '_gnutls_mac_to_entry' => '_gnutls_mac_to_entry@@GNUTLS_PRIVATE', - '_gnutls_mpi_log' => '_gnutls_mpi_log@@GNUTLS_PRIVATE', - '_gnutls_mpi_ops' => '_gnutls_mpi_ops@@GNUTLS_PRIVATE', - '_gnutls_pkcs12_string_to_key' => '_gnutls_pkcs12_string_to_key@@GNUTLS_PRIVATE', - '_gnutls_pkix1_asn' => '_gnutls_pkix1_asn@@GNUTLS_PRIVATE', - '_gnutls_record_set_default_version' => '_gnutls_record_set_default_version@@GNUTLS_PRIVATE', - '_gnutls_rsa_pms_set_version' => '_gnutls_rsa_pms_set_version@@GNUTLS_PRIVATE', - '_gnutls_x509_parse_dn_oid' => '_gnutls_x509_parse_dn_oid@@GNUTLS_PRIVATE', - 'deflate' => 'writev@@GLIBC_2.2.5', - 'deflateEnd' => 'writev@@GLIBC_2.2.5', - 'deflateInit2_' => 'writev@@GLIBC_2.2.5', - 'gnutls_aead_cipher_decrypt' => 'gnutls_aead_cipher_decrypt@@GNUTLS_3_4', - 'gnutls_aead_cipher_deinit' => 'gnutls_aead_cipher_deinit@@GNUTLS_3_4', - 'gnutls_aead_cipher_encrypt' => 'gnutls_aead_cipher_encrypt@@GNUTLS_3_4', - 'gnutls_aead_cipher_init' => 'gnutls_aead_cipher_init@@GNUTLS_3_4', - 'gnutls_alert_get' => 'gnutls_alert_get@@GNUTLS_3_4', - 'gnutls_alert_get_name' => 'gnutls_alert_get_name@@GNUTLS_3_4', - 'gnutls_alert_get_strname' => 'gnutls_alert_get_strname@@GNUTLS_3_4', - 'gnutls_alert_send' => 'gnutls_alert_send@@GNUTLS_3_4', - 'gnutls_alert_send_appropriate' => 'gnutls_alert_send_appropriate@@GNUTLS_3_4', - 'gnutls_alpn_get_selected_protocol' => 'gnutls_alpn_get_selected_protocol@@GNUTLS_3_4', - 'gnutls_alpn_set_protocols' => 'gnutls_alpn_set_protocols@@GNUTLS_3_4', - 'gnutls_anon_allocate_client_credentials' => 'gnutls_anon_allocate_client_credentials@@GNUTLS_3_4', - 'gnutls_anon_allocate_server_credentials' => 'gnutls_anon_allocate_server_credentials@@GNUTLS_3_4', - 'gnutls_anon_free_client_credentials' => 'gnutls_anon_free_client_credentials@@GNUTLS_3_4', - 'gnutls_anon_free_server_credentials' => 'gnutls_anon_free_server_credentials@@GNUTLS_3_4', - 'gnutls_anon_set_params_function' => 'gnutls_anon_set_params_function@@GNUTLS_3_4', - 'gnutls_anon_set_server_dh_params' => 'gnutls_anon_set_server_dh_params@@GNUTLS_3_4', - 'gnutls_anon_set_server_params_function' => 'gnutls_anon_set_server_params_function@@GNUTLS_3_4', - 'gnutls_auth_client_get_type' => 'gnutls_auth_client_get_type@@GNUTLS_3_4', - 'gnutls_auth_get_type' => 'gnutls_auth_get_type@@GNUTLS_3_4', - 'gnutls_auth_server_get_type' => 'gnutls_auth_server_get_type@@GNUTLS_3_4', - 'gnutls_buffer_append_data' => 'gnutls_buffer_append_data@@GNUTLS_3_4', - 'gnutls_bye' => 'gnutls_bye@@GNUTLS_3_4', - 'gnutls_calloc' => 'gnutls_calloc@@GNUTLS_3_4', - 'gnutls_certificate_activation_time_peers' => 'gnutls_certificate_activation_time_peers@@GNUTLS_3_4', - 'gnutls_certificate_allocate_credentials' => 'gnutls_certificate_allocate_credentials@@GNUTLS_3_4', - 'gnutls_certificate_client_get_request_status' => 'gnutls_certificate_client_get_request_status@@GNUTLS_3_4', - 'gnutls_certificate_expiration_time_peers' => 'gnutls_certificate_expiration_time_peers@@GNUTLS_3_4', - 'gnutls_certificate_free_ca_names' => 'gnutls_certificate_free_ca_names@@GNUTLS_3_4', - 'gnutls_certificate_free_cas' => 'gnutls_certificate_free_cas@@GNUTLS_3_4', - 'gnutls_certificate_free_credentials' => 'gnutls_certificate_free_credentials@@GNUTLS_3_4', - 'gnutls_certificate_free_crls' => 'gnutls_certificate_free_crls@@GNUTLS_3_4', - 'gnutls_certificate_free_keys' => 'gnutls_certificate_free_keys@@GNUTLS_3_4', - 'gnutls_certificate_get_crt_raw' => 'gnutls_certificate_get_crt_raw@@GNUTLS_3_4', - 'gnutls_certificate_get_issuer' => 'gnutls_certificate_get_issuer@@GNUTLS_3_4', - 'gnutls_certificate_get_openpgp_crt' => 'gnutls_certificate_get_openpgp_crt@@GNUTLS_3_4', - 'gnutls_certificate_get_openpgp_key' => 'gnutls_certificate_get_openpgp_key@@GNUTLS_3_4', - 'gnutls_certificate_get_ours' => 'gnutls_certificate_get_ours@@GNUTLS_3_4', - 'gnutls_certificate_get_peers' => 'gnutls_certificate_get_peers@@GNUTLS_3_4', - 'gnutls_certificate_get_peers_subkey_id' => 'gnutls_certificate_get_peers_subkey_id@@GNUTLS_3_4', - 'gnutls_certificate_get_trust_list' => 'gnutls_certificate_get_trust_list@@GNUTLS_3_4', - 'gnutls_certificate_get_verify_flags' => 'gnutls_certificate_get_verify_flags@@GNUTLS_3_4', - 'gnutls_certificate_get_x509_crt' => 'gnutls_certificate_get_x509_crt@@GNUTLS_3_4', - 'gnutls_certificate_get_x509_key' => 'gnutls_certificate_get_x509_key@@GNUTLS_3_4', - 'gnutls_certificate_send_x509_rdn_sequence' => 'gnutls_certificate_send_x509_rdn_sequence@@GNUTLS_3_4', - 'gnutls_certificate_server_set_request' => 'gnutls_certificate_server_set_request@@GNUTLS_3_4', - 'gnutls_certificate_set_dh_params' => 'gnutls_certificate_set_dh_params@@GNUTLS_3_4', - 'gnutls_certificate_set_key' => 'gnutls_certificate_set_key@@GNUTLS_3_4', - 'gnutls_certificate_set_ocsp_status_request_file' => 'gnutls_certificate_set_ocsp_status_request_file@@GNUTLS_3_4', - 'gnutls_certificate_set_ocsp_status_request_function' => 'gnutls_certificate_set_ocsp_status_request_function@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key' => 'gnutls_certificate_set_openpgp_key@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_file' => 'gnutls_certificate_set_openpgp_key_file@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_file2' => 'gnutls_certificate_set_openpgp_key_file2@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_mem' => 'gnutls_certificate_set_openpgp_key_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_mem2' => 'gnutls_certificate_set_openpgp_key_mem2@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_keyring_file' => 'gnutls_certificate_set_openpgp_keyring_file@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_keyring_mem' => 'gnutls_certificate_set_openpgp_keyring_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_params_function' => 'gnutls_certificate_set_params_function@@GNUTLS_3_4', - 'gnutls_certificate_set_pin_function' => 'gnutls_certificate_set_pin_function@@GNUTLS_3_4', - 'gnutls_certificate_set_retrieve_function' => 'gnutls_certificate_set_retrieve_function@@GNUTLS_3_4', - 'gnutls_certificate_set_retrieve_function2' => 'gnutls_certificate_set_retrieve_function2@@GNUTLS_3_4', - 'gnutls_certificate_set_trust_list' => 'gnutls_certificate_set_trust_list@@GNUTLS_3_4', - 'gnutls_certificate_set_verify_flags' => 'gnutls_certificate_set_verify_flags@@GNUTLS_3_4', - 'gnutls_certificate_set_verify_function' => 'gnutls_certificate_set_verify_function@@GNUTLS_3_4', - 'gnutls_certificate_set_verify_limits' => 'gnutls_certificate_set_verify_limits@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_crl' => 'gnutls_certificate_set_x509_crl@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_crl_file' => 'gnutls_certificate_set_x509_crl_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_crl_mem' => 'gnutls_certificate_set_x509_crl_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key' => 'gnutls_certificate_set_x509_key@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_file' => 'gnutls_certificate_set_x509_key_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_file2' => 'gnutls_certificate_set_x509_key_file2@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_mem' => 'gnutls_certificate_set_x509_key_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_mem2' => 'gnutls_certificate_set_x509_key_mem2@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_simple_pkcs12_file' => 'gnutls_certificate_set_x509_simple_pkcs12_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_simple_pkcs12_mem' => 'gnutls_certificate_set_x509_simple_pkcs12_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_system_trust' => 'gnutls_certificate_set_x509_system_trust@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust' => 'gnutls_certificate_set_x509_trust@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust_dir' => 'gnutls_certificate_set_x509_trust_dir@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust_file' => 'gnutls_certificate_set_x509_trust_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust_mem' => 'gnutls_certificate_set_x509_trust_mem@@GNUTLS_3_4', - 'gnutls_certificate_type_get' => 'gnutls_certificate_type_get@@GNUTLS_3_4', - 'gnutls_certificate_type_get_id' => 'gnutls_certificate_type_get_id@@GNUTLS_3_4', - 'gnutls_certificate_type_get_name' => 'gnutls_certificate_type_get_name@@GNUTLS_3_4', - 'gnutls_certificate_type_list' => 'gnutls_certificate_type_list@@GNUTLS_3_4', - 'gnutls_certificate_verification_status_print' => 'gnutls_certificate_verification_status_print@@GNUTLS_3_4', - 'gnutls_certificate_verify_peers' => 'gnutls_certificate_verify_peers@@GNUTLS_3_4', - 'gnutls_certificate_verify_peers2' => 'gnutls_certificate_verify_peers2@@GNUTLS_3_4', - 'gnutls_certificate_verify_peers3' => 'gnutls_certificate_verify_peers3@@GNUTLS_3_4', - 'gnutls_check_version' => 'gnutls_check_version@@GNUTLS_3_4', - 'gnutls_cipher_add_auth' => 'gnutls_cipher_add_auth@@GNUTLS_3_4', - 'gnutls_cipher_decrypt' => 'gnutls_cipher_decrypt@@GNUTLS_3_4', - 'gnutls_cipher_decrypt2' => 'gnutls_cipher_decrypt2@@GNUTLS_3_4', - 'gnutls_cipher_deinit' => 'gnutls_cipher_deinit@@GNUTLS_3_4', - 'gnutls_cipher_encrypt' => 'gnutls_cipher_encrypt@@GNUTLS_3_4', - 'gnutls_cipher_encrypt2' => 'gnutls_cipher_encrypt2@@GNUTLS_3_4', - 'gnutls_cipher_get' => 'gnutls_cipher_get@@GNUTLS_3_4', - 'gnutls_cipher_get_block_size' => 'gnutls_cipher_get_block_size@@GNUTLS_3_4', - 'gnutls_cipher_get_id' => 'gnutls_cipher_get_id@@GNUTLS_3_4', - 'gnutls_cipher_get_iv_size' => 'gnutls_cipher_get_iv_size@@GNUTLS_3_4', - 'gnutls_cipher_get_key_size' => 'gnutls_cipher_get_key_size@@GNUTLS_3_4', - 'gnutls_cipher_get_name' => 'gnutls_cipher_get_name@@GNUTLS_3_4', - 'gnutls_cipher_get_tag_size' => 'gnutls_cipher_get_tag_size@@GNUTLS_3_4', - 'gnutls_cipher_init' => 'gnutls_cipher_init@@GNUTLS_3_4', - 'gnutls_cipher_list' => 'gnutls_cipher_list@@GNUTLS_3_4', - 'gnutls_cipher_set_iv' => 'gnutls_cipher_set_iv@@GNUTLS_3_4', - 'gnutls_cipher_suite_get_name' => 'gnutls_cipher_suite_get_name@@GNUTLS_3_4', - 'gnutls_cipher_suite_info' => 'gnutls_cipher_suite_info@@GNUTLS_3_4', - 'gnutls_cipher_tag' => 'gnutls_cipher_tag@@GNUTLS_3_4', - 'gnutls_compression_get' => 'gnutls_compression_get@@GNUTLS_3_4', - 'gnutls_compression_get_id' => 'gnutls_compression_get_id@@GNUTLS_3_4', - 'gnutls_compression_get_name' => 'gnutls_compression_get_name@@GNUTLS_3_4', - 'gnutls_compression_list' => 'gnutls_compression_list@@GNUTLS_3_4', - 'gnutls_credentials_clear' => 'gnutls_credentials_clear@@GNUTLS_3_4', - 'gnutls_credentials_get' => 'gnutls_credentials_get@@GNUTLS_3_4', - 'gnutls_credentials_set' => 'gnutls_credentials_set@@GNUTLS_3_4', - 'gnutls_crypto_register_aead_cipher' => 'gnutls_crypto_register_aead_cipher@@GNUTLS_3_4', - 'gnutls_crypto_register_cipher' => 'gnutls_crypto_register_cipher@@GNUTLS_3_4', - 'gnutls_crypto_register_digest' => 'gnutls_crypto_register_digest@@GNUTLS_3_4', - 'gnutls_crypto_register_mac' => 'gnutls_crypto_register_mac@@GNUTLS_3_4', - 'gnutls_db_check_entry' => 'gnutls_db_check_entry@@GNUTLS_3_4', - 'gnutls_db_check_entry_time' => 'gnutls_db_check_entry_time@@GNUTLS_3_4', - 'gnutls_db_get_default_cache_expiration' => 'gnutls_db_get_default_cache_expiration@@GNUTLS_3_4', - 'gnutls_db_get_ptr' => 'gnutls_db_get_ptr@@GNUTLS_3_4', - 'gnutls_db_remove_session' => 'gnutls_db_remove_session@@GNUTLS_3_4', - 'gnutls_db_set_cache_expiration' => 'gnutls_db_set_cache_expiration@@GNUTLS_3_4', - 'gnutls_db_set_ptr' => 'gnutls_db_set_ptr@@GNUTLS_3_4', - 'gnutls_db_set_remove_function' => 'gnutls_db_set_remove_function@@GNUTLS_3_4', - 'gnutls_db_set_retrieve_function' => 'gnutls_db_set_retrieve_function@@GNUTLS_3_4', - 'gnutls_db_set_store_function' => 'gnutls_db_set_store_function@@GNUTLS_3_4', - 'gnutls_deinit' => 'gnutls_deinit@@GNUTLS_3_4', - 'gnutls_dh_get_group' => 'gnutls_dh_get_group@@GNUTLS_3_4', - 'gnutls_dh_get_peers_public_bits' => 'gnutls_dh_get_peers_public_bits@@GNUTLS_3_4', - 'gnutls_dh_get_prime_bits' => 'gnutls_dh_get_prime_bits@@GNUTLS_3_4', - 'gnutls_dh_get_pubkey' => 'gnutls_dh_get_pubkey@@GNUTLS_3_4', - 'gnutls_dh_get_secret_bits' => 'gnutls_dh_get_secret_bits@@GNUTLS_3_4', - 'gnutls_dh_params_cpy' => 'gnutls_dh_params_cpy@@GNUTLS_3_4', - 'gnutls_dh_params_deinit' => 'gnutls_dh_params_deinit@@GNUTLS_3_4', - 'gnutls_dh_params_export2_pkcs3' => 'gnutls_dh_params_export2_pkcs3@@GNUTLS_3_4', - 'gnutls_dh_params_export_pkcs3' => 'gnutls_dh_params_export_pkcs3@@GNUTLS_3_4', - 'gnutls_dh_params_export_raw' => 'gnutls_dh_params_export_raw@@GNUTLS_3_4', - 'gnutls_dh_params_generate2' => 'gnutls_dh_params_generate2@@GNUTLS_3_4', - 'gnutls_dh_params_import_pkcs3' => 'gnutls_dh_params_import_pkcs3@@GNUTLS_3_4', - 'gnutls_dh_params_import_raw' => 'gnutls_dh_params_import_raw@@GNUTLS_3_4', - 'gnutls_dh_params_import_raw2' => 'gnutls_dh_params_import_raw2@@GNUTLS_3_4', - 'gnutls_dh_params_init' => 'gnutls_dh_params_init@@GNUTLS_3_4', - 'gnutls_dh_set_prime_bits' => 'gnutls_dh_set_prime_bits@@GNUTLS_3_4', - 'gnutls_digest_get_id' => 'gnutls_digest_get_id@@GNUTLS_3_4', - 'gnutls_digest_get_name' => 'gnutls_digest_get_name@@GNUTLS_3_4', - 'gnutls_digest_list' => 'gnutls_digest_list@@GNUTLS_3_4', - 'gnutls_dtls_cookie_send' => 'gnutls_dtls_cookie_send@@GNUTLS_3_4', - 'gnutls_dtls_cookie_verify' => 'gnutls_dtls_cookie_verify@@GNUTLS_3_4', - 'gnutls_dtls_get_data_mtu' => 'gnutls_dtls_get_data_mtu@@GNUTLS_3_4', - 'gnutls_dtls_get_mtu' => 'gnutls_dtls_get_mtu@@GNUTLS_3_4', - 'gnutls_dtls_get_timeout' => 'gnutls_dtls_get_timeout@@GNUTLS_3_4', - 'gnutls_dtls_prestate_set' => 'gnutls_dtls_prestate_set@@GNUTLS_3_4', - 'gnutls_dtls_set_data_mtu' => 'gnutls_dtls_set_data_mtu@@GNUTLS_3_4', - 'gnutls_dtls_set_mtu' => 'gnutls_dtls_set_mtu@@GNUTLS_3_4', - 'gnutls_dtls_set_timeouts' => 'gnutls_dtls_set_timeouts@@GNUTLS_3_4', - 'gnutls_ecc_curve_get' => 'gnutls_ecc_curve_get@@GNUTLS_3_4', - 'gnutls_ecc_curve_get_name' => 'gnutls_ecc_curve_get_name@@GNUTLS_3_4', - 'gnutls_ecc_curve_get_size' => 'gnutls_ecc_curve_get_size@@GNUTLS_3_4', - 'gnutls_ecc_curve_list' => 'gnutls_ecc_curve_list@@GNUTLS_3_4', - 'gnutls_error_is_fatal' => 'gnutls_error_is_fatal@@GNUTLS_3_4', - 'gnutls_error_to_alert' => 'gnutls_error_to_alert@@GNUTLS_3_4', - 'gnutls_est_record_overhead_size' => 'gnutls_est_record_overhead_size@@GNUTLS_3_4', - 'gnutls_ext_get_data' => 'gnutls_ext_get_data@@GNUTLS_3_4', - 'gnutls_ext_register' => 'gnutls_ext_register@@GNUTLS_3_4', - 'gnutls_ext_set_data' => 'gnutls_ext_set_data@@GNUTLS_3_4', - 'gnutls_fingerprint' => 'gnutls_fingerprint@@GNUTLS_3_4', - 'gnutls_fips140_mode_enabled' => 'gnutls_fips140_mode_enabled@@GNUTLS_3_4', - 'gnutls_free' => 'gnutls_free@@GNUTLS_3_4', - 'gnutls_global_deinit' => 'gnutls_global_deinit@@GNUTLS_3_4', - 'gnutls_global_init' => 'gnutls_global_init@@GNUTLS_3_4', - 'gnutls_global_set_audit_log_function' => 'gnutls_global_set_audit_log_function@@GNUTLS_3_4', - 'gnutls_global_set_log_function' => 'gnutls_global_set_log_function@@GNUTLS_3_4', - 'gnutls_global_set_log_level' => 'gnutls_global_set_log_level@@GNUTLS_3_4', - 'gnutls_global_set_mem_functions' => 'gnutls_global_set_mem_functions@@GNUTLS_3_4', - 'gnutls_global_set_mutex' => 'gnutls_global_set_mutex@@GNUTLS_3_4', - 'gnutls_global_set_time_function' => 'gnutls_global_set_time_function@@GNUTLS_3_4', - 'gnutls_handshake' => 'gnutls_handshake@@GNUTLS_3_4', - 'gnutls_handshake_description_get_name' => 'gnutls_handshake_description_get_name@@GNUTLS_3_4', - 'gnutls_handshake_get_last_in' => 'gnutls_handshake_get_last_in@@GNUTLS_3_4', - 'gnutls_handshake_get_last_out' => 'gnutls_handshake_get_last_out@@GNUTLS_3_4', - 'gnutls_handshake_set_hook_function' => 'gnutls_handshake_set_hook_function@@GNUTLS_3_4', - 'gnutls_handshake_set_max_packet_length' => 'gnutls_handshake_set_max_packet_length@@GNUTLS_3_4', - 'gnutls_handshake_set_post_client_hello_function' => 'gnutls_handshake_set_post_client_hello_function@@GNUTLS_3_4', - 'gnutls_handshake_set_private_extensions' => 'gnutls_handshake_set_private_extensions@@GNUTLS_3_4', - 'gnutls_handshake_set_random' => 'gnutls_handshake_set_random@@GNUTLS_3_4', - 'gnutls_handshake_set_timeout' => 'gnutls_handshake_set_timeout@@GNUTLS_3_4', - 'gnutls_hash' => 'gnutls_hash@@GNUTLS_3_4', - 'gnutls_hash_deinit' => 'gnutls_hash_deinit@@GNUTLS_3_4', - 'gnutls_hash_fast' => 'gnutls_hash_fast@@GNUTLS_3_4', - 'gnutls_hash_get_len' => 'gnutls_hash_get_len@@GNUTLS_3_4', - 'gnutls_hash_init' => 'gnutls_hash_init@@GNUTLS_3_4', - 'gnutls_hash_output' => 'gnutls_hash_output@@GNUTLS_3_4', - 'gnutls_heartbeat_allowed' => 'gnutls_heartbeat_allowed@@GNUTLS_3_4', - 'gnutls_heartbeat_enable' => 'gnutls_heartbeat_enable@@GNUTLS_3_4', - 'gnutls_heartbeat_get_timeout' => 'gnutls_heartbeat_get_timeout@@GNUTLS_3_4', - 'gnutls_heartbeat_ping' => 'gnutls_heartbeat_ping@@GNUTLS_3_4', - 'gnutls_heartbeat_pong' => 'gnutls_heartbeat_pong@@GNUTLS_3_4', - 'gnutls_heartbeat_set_timeouts' => 'gnutls_heartbeat_set_timeouts@@GNUTLS_3_4', - 'gnutls_hex2bin' => 'gnutls_hex2bin@@GNUTLS_3_4', - 'gnutls_hex_decode' => 'gnutls_hex_decode@@GNUTLS_3_4', - 'gnutls_hex_encode' => 'gnutls_hex_encode@@GNUTLS_3_4', - 'gnutls_hmac' => 'gnutls_hmac@@GNUTLS_3_4', - 'gnutls_hmac_deinit' => 'gnutls_hmac_deinit@@GNUTLS_3_4', - 'gnutls_hmac_fast' => 'gnutls_hmac_fast@@GNUTLS_3_4', - 'gnutls_hmac_get_len' => 'gnutls_hmac_get_len@@GNUTLS_3_4', - 'gnutls_hmac_init' => 'gnutls_hmac_init@@GNUTLS_3_4', - 'gnutls_hmac_output' => 'gnutls_hmac_output@@GNUTLS_3_4', - 'gnutls_hmac_set_nonce' => 'gnutls_hmac_set_nonce@@GNUTLS_3_4', - 'gnutls_init' => 'gnutls_init@@GNUTLS_3_4', - 'gnutls_key_generate' => 'gnutls_key_generate@@GNUTLS_3_4', - 'gnutls_kx_get' => 'gnutls_kx_get@@GNUTLS_3_4', - 'gnutls_kx_get_id' => 'gnutls_kx_get_id@@GNUTLS_3_4', - 'gnutls_kx_get_name' => 'gnutls_kx_get_name@@GNUTLS_3_4', - 'gnutls_kx_list' => 'gnutls_kx_list@@GNUTLS_3_4', - 'gnutls_load_file' => 'gnutls_load_file@@GNUTLS_3_4', - 'gnutls_mac_get' => 'gnutls_mac_get@@GNUTLS_3_4', - 'gnutls_mac_get_id' => 'gnutls_mac_get_id@@GNUTLS_3_4', - 'gnutls_mac_get_key_size' => 'gnutls_mac_get_key_size@@GNUTLS_3_4', - 'gnutls_mac_get_name' => 'gnutls_mac_get_name@@GNUTLS_3_4', - 'gnutls_mac_get_nonce_size' => 'gnutls_mac_get_nonce_size@@GNUTLS_3_4', - 'gnutls_mac_list' => 'gnutls_mac_list@@GNUTLS_3_4', - 'gnutls_malloc' => 'gnutls_malloc@@GNUTLS_3_4', - 'gnutls_memcmp' => 'gnutls_memcmp@@GNUTLS_3_4', - 'gnutls_memset' => 'gnutls_memset@@GNUTLS_3_4', - 'gnutls_ocsp_req_add_cert' => 'gnutls_ocsp_req_add_cert@@GNUTLS_3_4', - 'gnutls_ocsp_req_add_cert_id' => 'gnutls_ocsp_req_add_cert_id@@GNUTLS_3_4', - 'gnutls_ocsp_req_deinit' => 'gnutls_ocsp_req_deinit@@GNUTLS_3_4', - 'gnutls_ocsp_req_export' => 'gnutls_ocsp_req_export@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_cert_id' => 'gnutls_ocsp_req_get_cert_id@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_extension' => 'gnutls_ocsp_req_get_extension@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_nonce' => 'gnutls_ocsp_req_get_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_version' => 'gnutls_ocsp_req_get_version@@GNUTLS_3_4', - 'gnutls_ocsp_req_import' => 'gnutls_ocsp_req_import@@GNUTLS_3_4', - 'gnutls_ocsp_req_init' => 'gnutls_ocsp_req_init@@GNUTLS_3_4', - 'gnutls_ocsp_req_print' => 'gnutls_ocsp_req_print@@GNUTLS_3_4', - 'gnutls_ocsp_req_randomize_nonce' => 'gnutls_ocsp_req_randomize_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_req_set_extension' => 'gnutls_ocsp_req_set_extension@@GNUTLS_3_4', - 'gnutls_ocsp_req_set_nonce' => 'gnutls_ocsp_req_set_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_resp_check_crt' => 'gnutls_ocsp_resp_check_crt@@GNUTLS_3_4', - 'gnutls_ocsp_resp_deinit' => 'gnutls_ocsp_resp_deinit@@GNUTLS_3_4', - 'gnutls_ocsp_resp_export' => 'gnutls_ocsp_resp_export@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_certs' => 'gnutls_ocsp_resp_get_certs@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_extension' => 'gnutls_ocsp_resp_get_extension@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_nonce' => 'gnutls_ocsp_resp_get_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_produced' => 'gnutls_ocsp_resp_get_produced@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_responder' => 'gnutls_ocsp_resp_get_responder@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_responder_raw_id' => 'gnutls_ocsp_resp_get_responder_raw_id@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_response' => 'gnutls_ocsp_resp_get_response@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_signature' => 'gnutls_ocsp_resp_get_signature@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_signature_algorithm' => 'gnutls_ocsp_resp_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_single' => 'gnutls_ocsp_resp_get_single@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_status' => 'gnutls_ocsp_resp_get_status@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_version' => 'gnutls_ocsp_resp_get_version@@GNUTLS_3_4', - 'gnutls_ocsp_resp_import' => 'gnutls_ocsp_resp_import@@GNUTLS_3_4', - 'gnutls_ocsp_resp_init' => 'gnutls_ocsp_resp_init@@GNUTLS_3_4', - 'gnutls_ocsp_resp_print' => 'gnutls_ocsp_resp_print@@GNUTLS_3_4', - 'gnutls_ocsp_resp_verify' => 'gnutls_ocsp_resp_verify@@GNUTLS_3_4', - 'gnutls_ocsp_resp_verify_direct' => 'gnutls_ocsp_resp_verify_direct@@GNUTLS_3_4', - 'gnutls_ocsp_status_request_enable_client' => 'gnutls_ocsp_status_request_enable_client@@GNUTLS_3_4', - 'gnutls_ocsp_status_request_get' => 'gnutls_ocsp_status_request_get@@GNUTLS_3_4', - 'gnutls_ocsp_status_request_is_checked' => 'gnutls_ocsp_status_request_is_checked@@GNUTLS_3_4', - 'gnutls_openpgp_crt_check_email' => 'gnutls_openpgp_crt_check_email@@GNUTLS_3_4', - 'gnutls_openpgp_crt_check_hostname' => 'gnutls_openpgp_crt_check_hostname@@GNUTLS_3_4', - 'gnutls_openpgp_crt_check_hostname2' => 'gnutls_openpgp_crt_check_hostname2@@GNUTLS_3_4', - 'gnutls_openpgp_crt_deinit' => 'gnutls_openpgp_crt_deinit@@GNUTLS_3_4', - 'gnutls_openpgp_crt_export' => 'gnutls_openpgp_crt_export@@GNUTLS_3_4', - 'gnutls_openpgp_crt_export2' => 'gnutls_openpgp_crt_export2@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_auth_subkey' => 'gnutls_openpgp_crt_get_auth_subkey@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_creation_time' => 'gnutls_openpgp_crt_get_creation_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_expiration_time' => 'gnutls_openpgp_crt_get_expiration_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_fingerprint' => 'gnutls_openpgp_crt_get_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_key_id' => 'gnutls_openpgp_crt_get_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_key_usage' => 'gnutls_openpgp_crt_get_key_usage@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_name' => 'gnutls_openpgp_crt_get_name@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_pk_algorithm' => 'gnutls_openpgp_crt_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_pk_dsa_raw' => 'gnutls_openpgp_crt_get_pk_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_pk_rsa_raw' => 'gnutls_openpgp_crt_get_pk_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_preferred_key_id' => 'gnutls_openpgp_crt_get_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_revoked_status' => 'gnutls_openpgp_crt_get_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_count' => 'gnutls_openpgp_crt_get_subkey_count@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_creation_time' => 'gnutls_openpgp_crt_get_subkey_creation_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_expiration_time' => 'gnutls_openpgp_crt_get_subkey_expiration_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_fingerprint' => 'gnutls_openpgp_crt_get_subkey_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_id' => 'gnutls_openpgp_crt_get_subkey_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_idx' => 'gnutls_openpgp_crt_get_subkey_idx@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_pk_algorithm' => 'gnutls_openpgp_crt_get_subkey_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw' => 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw' => 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_revoked_status' => 'gnutls_openpgp_crt_get_subkey_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_usage' => 'gnutls_openpgp_crt_get_subkey_usage@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_version' => 'gnutls_openpgp_crt_get_version@@GNUTLS_3_4', - 'gnutls_openpgp_crt_import' => 'gnutls_openpgp_crt_import@@GNUTLS_3_4', - 'gnutls_openpgp_crt_init' => 'gnutls_openpgp_crt_init@@GNUTLS_3_4', - 'gnutls_openpgp_crt_print' => 'gnutls_openpgp_crt_print@@GNUTLS_3_4', - 'gnutls_openpgp_crt_set_preferred_key_id' => 'gnutls_openpgp_crt_set_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_verify_ring' => 'gnutls_openpgp_crt_verify_ring@@GNUTLS_3_4', - 'gnutls_openpgp_crt_verify_self' => 'gnutls_openpgp_crt_verify_self@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_check_id' => 'gnutls_openpgp_keyring_check_id@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_deinit' => 'gnutls_openpgp_keyring_deinit@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_get_crt' => 'gnutls_openpgp_keyring_get_crt@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_get_crt_count' => 'gnutls_openpgp_keyring_get_crt_count@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_import' => 'gnutls_openpgp_keyring_import@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_init' => 'gnutls_openpgp_keyring_init@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_deinit' => 'gnutls_openpgp_privkey_deinit@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export' => 'gnutls_openpgp_privkey_export@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export2' => 'gnutls_openpgp_privkey_export2@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_dsa_raw' => 'gnutls_openpgp_privkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_rsa_raw' => 'gnutls_openpgp_privkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_subkey_dsa_raw' => 'gnutls_openpgp_privkey_export_subkey_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_subkey_rsa_raw' => 'gnutls_openpgp_privkey_export_subkey_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_fingerprint' => 'gnutls_openpgp_privkey_get_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_key_id' => 'gnutls_openpgp_privkey_get_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_pk_algorithm' => 'gnutls_openpgp_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_preferred_key_id' => 'gnutls_openpgp_privkey_get_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_revoked_status' => 'gnutls_openpgp_privkey_get_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_count' => 'gnutls_openpgp_privkey_get_subkey_count@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_creation_time' => 'gnutls_openpgp_privkey_get_subkey_creation_time@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_expiration_time' => 'gnutls_openpgp_privkey_get_subkey_expiration_time@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_fingerprint' => 'gnutls_openpgp_privkey_get_subkey_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_id' => 'gnutls_openpgp_privkey_get_subkey_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_idx' => 'gnutls_openpgp_privkey_get_subkey_idx@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_pk_algorithm' => 'gnutls_openpgp_privkey_get_subkey_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_revoked_status' => 'gnutls_openpgp_privkey_get_subkey_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_import' => 'gnutls_openpgp_privkey_import@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_init' => 'gnutls_openpgp_privkey_init@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_sec_param' => 'gnutls_openpgp_privkey_sec_param@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_set_preferred_key_id' => 'gnutls_openpgp_privkey_set_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_sign_hash' => 'gnutls_openpgp_privkey_sign_hash@@GNUTLS_3_4', - 'gnutls_openpgp_send_cert' => 'gnutls_openpgp_send_cert@@GNUTLS_3_4', - 'gnutls_openpgp_set_recv_key_function' => 'gnutls_openpgp_set_recv_key_function@@GNUTLS_3_4', - 'gnutls_packet_deinit' => 'gnutls_packet_deinit@@GNUTLS_3_4', - 'gnutls_packet_get' => 'gnutls_packet_get@@GNUTLS_3_4', - 'gnutls_pcert_deinit' => 'gnutls_pcert_deinit@@GNUTLS_3_4', - 'gnutls_pcert_export_openpgp' => 'gnutls_pcert_export_openpgp@@GNUTLS_3_4', - 'gnutls_pcert_export_x509' => 'gnutls_pcert_export_x509@@GNUTLS_3_4', - 'gnutls_pcert_import_openpgp' => 'gnutls_pcert_import_openpgp@@GNUTLS_3_4', - 'gnutls_pcert_import_openpgp_raw' => 'gnutls_pcert_import_openpgp_raw@@GNUTLS_3_4', - 'gnutls_pcert_import_x509' => 'gnutls_pcert_import_x509@@GNUTLS_3_4', - 'gnutls_pcert_import_x509_list' => 'gnutls_pcert_import_x509_list@@GNUTLS_3_4', - 'gnutls_pcert_import_x509_raw' => 'gnutls_pcert_import_x509_raw@@GNUTLS_3_4', - 'gnutls_pcert_list_import_x509_raw' => 'gnutls_pcert_list_import_x509_raw@@GNUTLS_3_4', - 'gnutls_pem_base64_decode' => 'gnutls_pem_base64_decode@@GNUTLS_3_4', - 'gnutls_pem_base64_decode2' => 'gnutls_pem_base64_decode2@@GNUTLS_3_4', - 'gnutls_pem_base64_encode' => 'gnutls_pem_base64_encode@@GNUTLS_3_4', - 'gnutls_pem_base64_encode2' => 'gnutls_pem_base64_encode2@@GNUTLS_3_4', - 'gnutls_perror' => 'gnutls_perror@@GNUTLS_3_4', - 'gnutls_pk_algorithm_get_name' => 'gnutls_pk_algorithm_get_name@@GNUTLS_3_4', - 'gnutls_pk_bits_to_sec_param' => 'gnutls_pk_bits_to_sec_param@@GNUTLS_3_4', - 'gnutls_pk_get_id' => 'gnutls_pk_get_id@@GNUTLS_3_4', - 'gnutls_pk_get_name' => 'gnutls_pk_get_name@@GNUTLS_3_4', - 'gnutls_pk_list' => 'gnutls_pk_list@@GNUTLS_3_4', - 'gnutls_pk_to_sign' => 'gnutls_pk_to_sign@@GNUTLS_3_4', - 'gnutls_pkcs11_add_provider' => 'gnutls_pkcs11_add_provider@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_attached_extension' => 'gnutls_pkcs11_copy_attached_extension@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_secret_key' => 'gnutls_pkcs11_copy_secret_key@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_x509_crt2' => 'gnutls_pkcs11_copy_x509_crt2@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_x509_privkey2' => 'gnutls_pkcs11_copy_x509_privkey2@@GNUTLS_3_4', - 'gnutls_pkcs11_crt_is_known' => 'gnutls_pkcs11_crt_is_known@@GNUTLS_3_4', - 'gnutls_pkcs11_deinit' => 'gnutls_pkcs11_deinit@@GNUTLS_3_4', - 'gnutls_pkcs11_delete_url' => 'gnutls_pkcs11_delete_url@@GNUTLS_3_4', - 'gnutls_pkcs11_get_pin_function' => 'gnutls_pkcs11_get_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_get_raw_issuer' => 'gnutls_pkcs11_get_raw_issuer@@GNUTLS_3_4', - 'gnutls_pkcs11_get_raw_issuer_by_dn' => 'gnutls_pkcs11_get_raw_issuer_by_dn@@GNUTLS_3_4', - 'gnutls_pkcs11_init' => 'gnutls_pkcs11_init@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_deinit' => 'gnutls_pkcs11_obj_deinit@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export' => 'gnutls_pkcs11_obj_export@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export2' => 'gnutls_pkcs11_obj_export2@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export3' => 'gnutls_pkcs11_obj_export3@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export_url' => 'gnutls_pkcs11_obj_export_url@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_flags_get_str' => 'gnutls_pkcs11_obj_flags_get_str@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_exts' => 'gnutls_pkcs11_obj_get_exts@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_flags' => 'gnutls_pkcs11_obj_get_flags@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_info' => 'gnutls_pkcs11_obj_get_info@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_type' => 'gnutls_pkcs11_obj_get_type@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_import_url' => 'gnutls_pkcs11_obj_import_url@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_init' => 'gnutls_pkcs11_obj_init@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_list_import_url3' => 'gnutls_pkcs11_obj_list_import_url3@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_list_import_url4' => 'gnutls_pkcs11_obj_list_import_url4@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_set_info' => 'gnutls_pkcs11_obj_set_info@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_set_pin_function' => 'gnutls_pkcs11_obj_set_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_cpy' => 'gnutls_pkcs11_privkey_cpy@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_deinit' => 'gnutls_pkcs11_privkey_deinit@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_export_pubkey' => 'gnutls_pkcs11_privkey_export_pubkey@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_export_url' => 'gnutls_pkcs11_privkey_export_url@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_generate3' => 'gnutls_pkcs11_privkey_generate3@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_get_info' => 'gnutls_pkcs11_privkey_get_info@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_get_pk_algorithm' => 'gnutls_pkcs11_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_import_url' => 'gnutls_pkcs11_privkey_import_url@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_init' => 'gnutls_pkcs11_privkey_init@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_set_pin_function' => 'gnutls_pkcs11_privkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_status' => 'gnutls_pkcs11_privkey_status@@GNUTLS_3_4', - 'gnutls_pkcs11_reinit' => 'gnutls_pkcs11_reinit@@GNUTLS_3_4', - 'gnutls_pkcs11_set_pin_function' => 'gnutls_pkcs11_set_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_set_token_function' => 'gnutls_pkcs11_set_token_function@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_flags' => 'gnutls_pkcs11_token_get_flags@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_info' => 'gnutls_pkcs11_token_get_info@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_mechanism' => 'gnutls_pkcs11_token_get_mechanism@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_random' => 'gnutls_pkcs11_token_get_random@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_url' => 'gnutls_pkcs11_token_get_url@@GNUTLS_3_4', - 'gnutls_pkcs11_token_init' => 'gnutls_pkcs11_token_init@@GNUTLS_3_4', - 'gnutls_pkcs11_token_set_pin' => 'gnutls_pkcs11_token_set_pin@@GNUTLS_3_4', - 'gnutls_pkcs11_type_get_name' => 'gnutls_pkcs11_type_get_name@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_decrypt' => 'gnutls_pkcs12_bag_decrypt@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_deinit' => 'gnutls_pkcs12_bag_deinit@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_enc_info' => 'gnutls_pkcs12_bag_enc_info@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_encrypt' => 'gnutls_pkcs12_bag_encrypt@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_count' => 'gnutls_pkcs12_bag_get_count@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_data' => 'gnutls_pkcs12_bag_get_data@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_friendly_name' => 'gnutls_pkcs12_bag_get_friendly_name@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_key_id' => 'gnutls_pkcs12_bag_get_key_id@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_type' => 'gnutls_pkcs12_bag_get_type@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_init' => 'gnutls_pkcs12_bag_init@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_crl' => 'gnutls_pkcs12_bag_set_crl@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_crt' => 'gnutls_pkcs12_bag_set_crt@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_data' => 'gnutls_pkcs12_bag_set_data@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_friendly_name' => 'gnutls_pkcs12_bag_set_friendly_name@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_key_id' => 'gnutls_pkcs12_bag_set_key_id@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_privkey' => 'gnutls_pkcs12_bag_set_privkey@@GNUTLS_3_4', - 'gnutls_pkcs12_deinit' => 'gnutls_pkcs12_deinit@@GNUTLS_3_4', - 'gnutls_pkcs12_export' => 'gnutls_pkcs12_export@@GNUTLS_3_4', - 'gnutls_pkcs12_export2' => 'gnutls_pkcs12_export2@@GNUTLS_3_4', - 'gnutls_pkcs12_generate_mac' => 'gnutls_pkcs12_generate_mac@@GNUTLS_3_4', - 'gnutls_pkcs12_generate_mac2' => 'gnutls_pkcs12_generate_mac2@@GNUTLS_3_4', - 'gnutls_pkcs12_get_bag' => 'gnutls_pkcs12_get_bag@@GNUTLS_3_4', - 'gnutls_pkcs12_import' => 'gnutls_pkcs12_import@@GNUTLS_3_4', - 'gnutls_pkcs12_init' => 'gnutls_pkcs12_init@@GNUTLS_3_4', - 'gnutls_pkcs12_mac_info' => 'gnutls_pkcs12_mac_info@@GNUTLS_3_4', - 'gnutls_pkcs12_set_bag' => 'gnutls_pkcs12_set_bag@@GNUTLS_3_4', - 'gnutls_pkcs12_simple_parse' => 'gnutls_pkcs12_simple_parse@@GNUTLS_3_4', - 'gnutls_pkcs12_verify_mac' => 'gnutls_pkcs12_verify_mac@@GNUTLS_3_4', - 'gnutls_pkcs7_deinit' => 'gnutls_pkcs7_deinit@@GNUTLS_3_4', - 'gnutls_pkcs7_delete_crl' => 'gnutls_pkcs7_delete_crl@@GNUTLS_3_4', - 'gnutls_pkcs7_delete_crt' => 'gnutls_pkcs7_delete_crt@@GNUTLS_3_4', - 'gnutls_pkcs7_export' => 'gnutls_pkcs7_export@@GNUTLS_3_4', - 'gnutls_pkcs7_export2' => 'gnutls_pkcs7_export2@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crl_count' => 'gnutls_pkcs7_get_crl_count@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crl_raw' => 'gnutls_pkcs7_get_crl_raw@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crt_count' => 'gnutls_pkcs7_get_crt_count@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crt_raw' => 'gnutls_pkcs7_get_crt_raw@@GNUTLS_3_4', - 'gnutls_pkcs7_import' => 'gnutls_pkcs7_import@@GNUTLS_3_4', - 'gnutls_pkcs7_init' => 'gnutls_pkcs7_init@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crl' => 'gnutls_pkcs7_set_crl@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crl_raw' => 'gnutls_pkcs7_set_crl_raw@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crt' => 'gnutls_pkcs7_set_crt@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crt_raw' => 'gnutls_pkcs7_set_crt_raw@@GNUTLS_3_4', - 'gnutls_pkcs8_info' => 'gnutls_pkcs8_info@@GNUTLS_3_4', - 'gnutls_pkcs_schema_get_name' => 'gnutls_pkcs_schema_get_name@@GNUTLS_3_4', - 'gnutls_pkcs_schema_get_oid' => 'gnutls_pkcs_schema_get_oid@@GNUTLS_3_4', - 'gnutls_prf' => 'gnutls_prf@@GNUTLS_3_4', - 'gnutls_prf_raw' => 'gnutls_prf_raw@@GNUTLS_3_4', - 'gnutls_priority_certificate_type_list' => 'gnutls_priority_certificate_type_list@@GNUTLS_3_4', - 'gnutls_priority_cipher_list' => 'gnutls_priority_cipher_list@@GNUTLS_3_4', - 'gnutls_priority_compression_list' => 'gnutls_priority_compression_list@@GNUTLS_3_4', - 'gnutls_priority_deinit' => 'gnutls_priority_deinit@@GNUTLS_3_4', - 'gnutls_priority_ecc_curve_list' => 'gnutls_priority_ecc_curve_list@@GNUTLS_3_4', - 'gnutls_priority_get_cipher_suite_index' => 'gnutls_priority_get_cipher_suite_index@@GNUTLS_3_4', - 'gnutls_priority_init' => 'gnutls_priority_init@@GNUTLS_3_4', - 'gnutls_priority_kx_list' => 'gnutls_priority_kx_list@@GNUTLS_3_4', - 'gnutls_priority_mac_list' => 'gnutls_priority_mac_list@@GNUTLS_3_4', - 'gnutls_priority_protocol_list' => 'gnutls_priority_protocol_list@@GNUTLS_3_4', - 'gnutls_priority_set' => 'gnutls_priority_set@@GNUTLS_3_4', - 'gnutls_priority_set_direct' => 'gnutls_priority_set_direct@@GNUTLS_3_4', - 'gnutls_priority_sign_list' => 'gnutls_priority_sign_list@@GNUTLS_3_4', - 'gnutls_priority_string_list' => 'gnutls_priority_string_list@@GNUTLS_3_4', - 'gnutls_privkey_decrypt_data' => 'gnutls_privkey_decrypt_data@@GNUTLS_3_4', - 'gnutls_privkey_deinit' => 'gnutls_privkey_deinit@@GNUTLS_3_4', - 'gnutls_privkey_export_dsa_raw' => 'gnutls_privkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_export_ecc_raw' => 'gnutls_privkey_export_ecc_raw@@GNUTLS_3_4', - 'gnutls_privkey_export_openpgp' => 'gnutls_privkey_export_openpgp@@GNUTLS_3_4', - 'gnutls_privkey_export_pkcs11' => 'gnutls_privkey_export_pkcs11@@GNUTLS_3_4', - 'gnutls_privkey_export_rsa_raw' => 'gnutls_privkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_export_x509' => 'gnutls_privkey_export_x509@@GNUTLS_3_4', - 'gnutls_privkey_generate' => 'gnutls_privkey_generate@@GNUTLS_3_4', - 'gnutls_privkey_get_pk_algorithm' => 'gnutls_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_privkey_get_type' => 'gnutls_privkey_get_type@@GNUTLS_3_4', - 'gnutls_privkey_import_dsa_raw' => 'gnutls_privkey_import_dsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_ecc_raw' => 'gnutls_privkey_import_ecc_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_ext' => 'gnutls_privkey_import_ext@@GNUTLS_3_4', - 'gnutls_privkey_import_ext2' => 'gnutls_privkey_import_ext2@@GNUTLS_3_4', - 'gnutls_privkey_import_ext3' => 'gnutls_privkey_import_ext3@@GNUTLS_3_4', - 'gnutls_privkey_import_openpgp' => 'gnutls_privkey_import_openpgp@@GNUTLS_3_4', - 'gnutls_privkey_import_openpgp_raw' => 'gnutls_privkey_import_openpgp_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_pkcs11' => 'gnutls_privkey_import_pkcs11@@GNUTLS_3_4', - 'gnutls_privkey_import_rsa_raw' => 'gnutls_privkey_import_rsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_tpm_raw' => 'gnutls_privkey_import_tpm_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_tpm_url' => 'gnutls_privkey_import_tpm_url@@GNUTLS_3_4', - 'gnutls_privkey_import_url' => 'gnutls_privkey_import_url@@GNUTLS_3_4', - 'gnutls_privkey_import_x509' => 'gnutls_privkey_import_x509@@GNUTLS_3_4', - 'gnutls_privkey_import_x509_raw' => 'gnutls_privkey_import_x509_raw@@GNUTLS_3_4', - 'gnutls_privkey_init' => 'gnutls_privkey_init@@GNUTLS_3_4', - 'gnutls_privkey_set_pin_function' => 'gnutls_privkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_privkey_sign_data' => 'gnutls_privkey_sign_data@@GNUTLS_3_4', - 'gnutls_privkey_sign_hash' => 'gnutls_privkey_sign_hash@@GNUTLS_3_4', - 'gnutls_privkey_status' => 'gnutls_privkey_status@@GNUTLS_3_4', - 'gnutls_privkey_verify_params' => 'gnutls_privkey_verify_params@@GNUTLS_3_4', - 'gnutls_protocol_get_id' => 'gnutls_protocol_get_id@@GNUTLS_3_4', - 'gnutls_protocol_get_name' => 'gnutls_protocol_get_name@@GNUTLS_3_4', - 'gnutls_protocol_get_version' => 'gnutls_protocol_get_version@@GNUTLS_3_4', - 'gnutls_protocol_list' => 'gnutls_protocol_list@@GNUTLS_3_4', - 'gnutls_psk_allocate_client_credentials' => 'gnutls_psk_allocate_client_credentials@@GNUTLS_3_4', - 'gnutls_psk_allocate_server_credentials' => 'gnutls_psk_allocate_server_credentials@@GNUTLS_3_4', - 'gnutls_psk_allocate_server_credentials.localalias.1' => 'gnutls_psk_allocate_server_credentials@@GNUTLS_3_4', - 'gnutls_psk_client_get_hint' => 'gnutls_psk_client_get_hint@@GNUTLS_3_4', - 'gnutls_psk_free_client_credentials' => 'gnutls_psk_free_client_credentials@@GNUTLS_3_4', - 'gnutls_psk_free_server_credentials' => 'gnutls_psk_free_server_credentials@@GNUTLS_3_4', - 'gnutls_psk_server_get_username' => 'gnutls_psk_server_get_username@@GNUTLS_3_4', - 'gnutls_psk_set_client_credentials' => 'gnutls_psk_set_client_credentials@@GNUTLS_3_4', - 'gnutls_psk_set_client_credentials_function' => 'gnutls_psk_set_client_credentials_function@@GNUTLS_3_4', - 'gnutls_psk_set_params_function' => 'gnutls_psk_set_params_function@@GNUTLS_3_4', - 'gnutls_psk_set_server_credentials_file' => 'gnutls_psk_set_server_credentials_file@@GNUTLS_3_4', - 'gnutls_psk_set_server_credentials_function' => 'gnutls_psk_set_server_credentials_function@@GNUTLS_3_4', - 'gnutls_psk_set_server_credentials_hint' => 'gnutls_psk_set_server_credentials_hint@@GNUTLS_3_4', - 'gnutls_psk_set_server_dh_params' => 'gnutls_psk_set_server_dh_params@@GNUTLS_3_4', - 'gnutls_psk_set_server_params_function' => 'gnutls_psk_set_server_params_function@@GNUTLS_3_4', - 'gnutls_pubkey_deinit' => 'gnutls_pubkey_deinit@@GNUTLS_3_4', - 'gnutls_pubkey_encrypt_data' => 'gnutls_pubkey_encrypt_data@@GNUTLS_3_4', - 'gnutls_pubkey_export' => 'gnutls_pubkey_export@@GNUTLS_3_4', - 'gnutls_pubkey_export2' => 'gnutls_pubkey_export2@@GNUTLS_3_4', - 'gnutls_pubkey_export_dsa_raw' => 'gnutls_pubkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_export_ecc_raw' => 'gnutls_pubkey_export_ecc_raw@@GNUTLS_3_4', - 'gnutls_pubkey_export_ecc_x962' => 'gnutls_pubkey_export_ecc_x962@@GNUTLS_3_4', - 'gnutls_pubkey_export_rsa_raw' => 'gnutls_pubkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_get_key_id' => 'gnutls_pubkey_get_key_id@@GNUTLS_3_4', - 'gnutls_pubkey_get_key_usage' => 'gnutls_pubkey_get_key_usage@@GNUTLS_3_4', - 'gnutls_pubkey_get_openpgp_key_id' => 'gnutls_pubkey_get_openpgp_key_id@@GNUTLS_3_4', - 'gnutls_pubkey_get_pk_algorithm' => 'gnutls_pubkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_pubkey_get_preferred_hash_algorithm' => 'gnutls_pubkey_get_preferred_hash_algorithm@@GNUTLS_3_4', - 'gnutls_pubkey_import' => 'gnutls_pubkey_import@@GNUTLS_3_4', - 'gnutls_pubkey_import_dsa_raw' => 'gnutls_pubkey_import_dsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_ecc_raw' => 'gnutls_pubkey_import_ecc_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_ecc_x962' => 'gnutls_pubkey_import_ecc_x962@@GNUTLS_3_4', - 'gnutls_pubkey_import_openpgp' => 'gnutls_pubkey_import_openpgp@@GNUTLS_3_4', - 'gnutls_pubkey_import_openpgp_raw' => 'gnutls_pubkey_import_openpgp_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_pkcs11' => 'gnutls_pubkey_import_pkcs11@@GNUTLS_3_4', - 'gnutls_pubkey_import_privkey' => 'gnutls_pubkey_import_privkey@@GNUTLS_3_4', - 'gnutls_pubkey_import_rsa_raw' => 'gnutls_pubkey_import_rsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_tpm_raw' => 'gnutls_pubkey_import_tpm_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_tpm_url' => 'gnutls_pubkey_import_tpm_url@@GNUTLS_3_4', - 'gnutls_pubkey_import_url' => 'gnutls_pubkey_import_url@@GNUTLS_3_4', - 'gnutls_pubkey_import_x509' => 'gnutls_pubkey_import_x509@@GNUTLS_3_4', - 'gnutls_pubkey_import_x509_crq' => 'gnutls_pubkey_import_x509_crq@@GNUTLS_3_4', - 'gnutls_pubkey_import_x509_raw' => 'gnutls_pubkey_import_x509_raw@@GNUTLS_3_4', - 'gnutls_pubkey_init' => 'gnutls_pubkey_init@@GNUTLS_3_4', - 'gnutls_pubkey_print' => 'gnutls_pubkey_print@@GNUTLS_3_4', - 'gnutls_pubkey_set_key_usage' => 'gnutls_pubkey_set_key_usage@@GNUTLS_3_4', - 'gnutls_pubkey_set_pin_function' => 'gnutls_pubkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_pubkey_verify_data2' => 'gnutls_pubkey_verify_data2@@GNUTLS_3_4', - 'gnutls_pubkey_verify_hash2' => 'gnutls_pubkey_verify_hash2@@GNUTLS_3_4', - 'gnutls_pubkey_verify_params' => 'gnutls_pubkey_verify_params@@GNUTLS_3_4', - 'gnutls_random_art' => 'gnutls_random_art@@GNUTLS_3_4', - 'gnutls_range_split' => 'gnutls_range_split@@GNUTLS_3_4', - 'gnutls_realloc' => 'gnutls_realloc@@GNUTLS_3_4', - 'gnutls_record_can_use_length_hiding' => 'gnutls_record_can_use_length_hiding@@GNUTLS_3_4', - 'gnutls_record_check_corked' => 'gnutls_record_check_corked@@GNUTLS_3_4', - 'gnutls_record_check_pending' => 'gnutls_record_check_pending@@GNUTLS_3_4', - 'gnutls_record_cork' => 'gnutls_record_cork@@GNUTLS_3_4', - 'gnutls_record_disable_padding' => 'gnutls_record_disable_padding@@GNUTLS_3_4', - 'gnutls_record_discard_queued' => 'gnutls_record_discard_queued@@GNUTLS_3_4', - 'gnutls_record_get_direction' => 'gnutls_record_get_direction@@GNUTLS_3_4', - 'gnutls_record_get_discarded' => 'gnutls_record_get_discarded@@GNUTLS_3_4', - 'gnutls_record_get_max_size' => 'gnutls_record_get_max_size@@GNUTLS_3_4', - 'gnutls_record_get_state' => 'gnutls_record_get_state@@GNUTLS_3_4', - 'gnutls_record_overhead_size' => 'gnutls_record_overhead_size@@GNUTLS_3_4', - 'gnutls_record_recv' => 'gnutls_record_recv@@GNUTLS_3_4', - 'gnutls_record_recv_packet' => 'gnutls_record_recv_packet@@GNUTLS_3_4', - 'gnutls_record_recv_seq' => 'gnutls_record_recv_seq@@GNUTLS_3_4', - 'gnutls_record_send' => 'gnutls_record_send@@GNUTLS_3_4', - 'gnutls_record_send_range' => 'gnutls_record_send_range@@GNUTLS_3_4', - 'gnutls_record_set_max_size' => 'gnutls_record_set_max_size@@GNUTLS_3_4', - 'gnutls_record_set_state' => 'gnutls_record_set_state@@GNUTLS_3_4', - 'gnutls_record_set_timeout' => 'gnutls_record_set_timeout@@GNUTLS_3_4', - 'gnutls_record_uncork' => 'gnutls_record_uncork@@GNUTLS_3_4', - 'gnutls_register_custom_url' => 'gnutls_register_custom_url@@GNUTLS_3_4', - 'gnutls_rehandshake' => 'gnutls_rehandshake@@GNUTLS_3_4', - 'gnutls_rnd' => 'gnutls_rnd@@GNUTLS_3_4', - 'gnutls_rnd_refresh' => 'gnutls_rnd_refresh@@GNUTLS_3_4', - 'gnutls_safe_renegotiation_status' => 'gnutls_safe_renegotiation_status@@GNUTLS_3_4', - 'gnutls_sec_param_get_name' => 'gnutls_sec_param_get_name@@GNUTLS_3_4', - 'gnutls_sec_param_to_pk_bits' => 'gnutls_sec_param_to_pk_bits@@GNUTLS_3_4', - 'gnutls_sec_param_to_symmetric_bits' => 'gnutls_sec_param_to_symmetric_bits@@GNUTLS_3_4', - 'gnutls_secure_malloc' => 'gnutls_secure_malloc@@GNUTLS_3_4', - 'gnutls_server_name_get' => 'gnutls_server_name_get@@GNUTLS_3_4', - 'gnutls_server_name_set' => 'gnutls_server_name_set@@GNUTLS_3_4', - 'gnutls_session_channel_binding' => 'gnutls_session_channel_binding@@GNUTLS_3_4', - 'gnutls_session_enable_compatibility_mode' => 'gnutls_session_enable_compatibility_mode@@GNUTLS_3_4', - 'gnutls_session_etm_status' => 'gnutls_session_etm_status@@GNUTLS_3_4', - 'gnutls_session_ext_master_secret_status' => 'gnutls_session_ext_master_secret_status@@GNUTLS_3_4', - 'gnutls_session_force_valid' => 'gnutls_session_force_valid@@GNUTLS_3_4', - 'gnutls_session_get_data' => 'gnutls_session_get_data@@GNUTLS_3_4', - 'gnutls_session_get_data2' => 'gnutls_session_get_data2@@GNUTLS_3_4', - 'gnutls_session_get_desc' => 'gnutls_session_get_desc@@GNUTLS_3_4', - 'gnutls_session_get_id' => 'gnutls_session_get_id@@GNUTLS_3_4', - 'gnutls_session_get_id2' => 'gnutls_session_get_id2@@GNUTLS_3_4', - 'gnutls_session_get_ptr' => 'gnutls_session_get_ptr@@GNUTLS_3_4', - 'gnutls_session_get_random' => 'gnutls_session_get_random@@GNUTLS_3_4', - 'gnutls_session_is_resumed' => 'gnutls_session_is_resumed@@GNUTLS_3_4', - 'gnutls_session_resumption_requested' => 'gnutls_session_resumption_requested@@GNUTLS_3_4', - 'gnutls_session_set_data' => 'gnutls_session_set_data@@GNUTLS_3_4', - 'gnutls_session_set_id' => 'gnutls_session_set_id@@GNUTLS_3_4', - 'gnutls_session_set_premaster' => 'gnutls_session_set_premaster@@GNUTLS_3_4', - 'gnutls_session_set_ptr' => 'gnutls_session_set_ptr@@GNUTLS_3_4', - 'gnutls_session_ticket_enable_client' => 'gnutls_session_ticket_enable_client@@GNUTLS_3_4', - 'gnutls_session_ticket_enable_server' => 'gnutls_session_ticket_enable_server@@GNUTLS_3_4', - 'gnutls_session_ticket_key_generate' => 'gnutls_session_ticket_key_generate@@GNUTLS_3_4', - 'gnutls_set_default_priority' => 'gnutls_set_default_priority@@GNUTLS_3_4', - 'gnutls_sign_algorithm_get' => 'gnutls_sign_algorithm_get@@GNUTLS_3_4', - 'gnutls_sign_algorithm_get_client' => 'gnutls_sign_algorithm_get_client@@GNUTLS_3_4', - 'gnutls_sign_algorithm_get_requested' => 'gnutls_sign_algorithm_get_requested@@GNUTLS_3_4', - 'gnutls_sign_get_hash_algorithm' => 'gnutls_sign_get_hash_algorithm@@GNUTLS_3_4', - 'gnutls_sign_get_id' => 'gnutls_sign_get_id@@GNUTLS_3_4', - 'gnutls_sign_get_name' => 'gnutls_sign_get_name@@GNUTLS_3_4', - 'gnutls_sign_get_pk_algorithm' => 'gnutls_sign_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_sign_is_secure' => 'gnutls_sign_is_secure@@GNUTLS_3_4', - 'gnutls_sign_list' => 'gnutls_sign_list@@GNUTLS_3_4', - 'gnutls_srp_1024_group_generator' => 'gnutls_srp_1024_group_generator@@GNUTLS_3_4', - 'gnutls_srp_1024_group_prime' => 'gnutls_srp_1024_group_prime@@GNUTLS_3_4', - 'gnutls_srp_1536_group_generator' => 'gnutls_srp_1536_group_generator@@GNUTLS_3_4', - 'gnutls_srp_1536_group_prime' => 'gnutls_srp_1536_group_prime@@GNUTLS_3_4', - 'gnutls_srp_2048_group_generator' => 'gnutls_srp_2048_group_generator@@GNUTLS_3_4', - 'gnutls_srp_2048_group_prime' => 'gnutls_srp_2048_group_prime@@GNUTLS_3_4', - 'gnutls_srp_3072_group_generator' => 'gnutls_srp_3072_group_generator@@GNUTLS_3_4', - 'gnutls_srp_3072_group_prime' => 'gnutls_srp_3072_group_prime@@GNUTLS_3_4', - 'gnutls_srp_4096_group_generator' => 'gnutls_srp_4096_group_generator@@GNUTLS_3_4', - 'gnutls_srp_4096_group_prime' => 'gnutls_srp_4096_group_prime@@GNUTLS_3_4', - 'gnutls_srp_allocate_client_credentials' => 'gnutls_srp_allocate_client_credentials@@GNUTLS_3_4', - 'gnutls_srp_allocate_server_credentials' => 'gnutls_srp_allocate_server_credentials@@GNUTLS_3_4', - 'gnutls_srp_base64_decode' => 'gnutls_srp_base64_decode@@GNUTLS_3_4', - 'gnutls_srp_base64_decode2' => 'gnutls_srp_base64_decode2@@GNUTLS_3_4', - 'gnutls_srp_base64_encode' => 'gnutls_srp_base64_encode@@GNUTLS_3_4', - 'gnutls_srp_base64_encode2' => 'gnutls_srp_base64_encode2@@GNUTLS_3_4', - 'gnutls_srp_free_client_credentials' => 'gnutls_srp_free_client_credentials@@GNUTLS_3_4', - 'gnutls_srp_free_server_credentials' => 'gnutls_srp_free_server_credentials@@GNUTLS_3_4', - 'gnutls_srp_server_get_username' => 'gnutls_srp_server_get_username@@GNUTLS_3_4', - 'gnutls_srp_set_client_credentials' => 'gnutls_srp_set_client_credentials@@GNUTLS_3_4', - 'gnutls_srp_set_client_credentials_function' => 'gnutls_srp_set_client_credentials_function@@GNUTLS_3_4', - 'gnutls_srp_set_prime_bits' => 'gnutls_srp_set_prime_bits@@GNUTLS_3_4', - 'gnutls_srp_set_server_credentials_file' => 'gnutls_srp_set_server_credentials_file@@GNUTLS_3_4', - 'gnutls_srp_set_server_credentials_function' => 'gnutls_srp_set_server_credentials_function@@GNUTLS_3_4', - 'gnutls_srp_set_server_fake_salt_seed' => 'gnutls_srp_set_server_fake_salt_seed@@GNUTLS_3_4', - 'gnutls_srp_verifier' => 'gnutls_srp_verifier@@GNUTLS_3_4', - 'gnutls_srtp_get_keys' => 'gnutls_srtp_get_keys@@GNUTLS_3_4', - 'gnutls_srtp_get_mki' => 'gnutls_srtp_get_mki@@GNUTLS_3_4', - 'gnutls_srtp_get_profile_id' => 'gnutls_srtp_get_profile_id@@GNUTLS_3_4', - 'gnutls_srtp_get_profile_name' => 'gnutls_srtp_get_profile_name@@GNUTLS_3_4', - 'gnutls_srtp_get_selected_profile' => 'gnutls_srtp_get_selected_profile@@GNUTLS_3_4', - 'gnutls_srtp_set_mki' => 'gnutls_srtp_set_mki@@GNUTLS_3_4', - 'gnutls_srtp_set_profile' => 'gnutls_srtp_set_profile@@GNUTLS_3_4', - 'gnutls_srtp_set_profile_direct' => 'gnutls_srtp_set_profile_direct@@GNUTLS_3_4', - 'gnutls_store_commitment' => 'gnutls_store_commitment@@GNUTLS_3_4', - 'gnutls_store_pubkey' => 'gnutls_store_pubkey@@GNUTLS_3_4', - 'gnutls_strdup' => 'gnutls_strdup@@GNUTLS_3_4', - 'gnutls_strerror' => 'gnutls_strerror@@GNUTLS_3_4', - 'gnutls_strerror_name' => 'gnutls_strerror_name@@GNUTLS_3_4', - 'gnutls_subject_alt_names_deinit' => 'gnutls_subject_alt_names_deinit@@GNUTLS_3_4', - 'gnutls_subject_alt_names_get' => 'gnutls_subject_alt_names_get@@GNUTLS_3_4', - 'gnutls_subject_alt_names_init' => 'gnutls_subject_alt_names_init@@GNUTLS_3_4', - 'gnutls_subject_alt_names_set' => 'gnutls_subject_alt_names_set@@GNUTLS_3_4', - 'gnutls_supplemental_get_name' => 'gnutls_supplemental_get_name@@GNUTLS_3_4', - 'gnutls_supplemental_recv' => 'gnutls_supplemental_recv@@GNUTLS_3_4', - 'gnutls_supplemental_register' => 'gnutls_supplemental_register@@GNUTLS_3_4', - 'gnutls_supplemental_send' => 'gnutls_supplemental_send@@GNUTLS_3_4', - 'gnutls_system_key_add_x509' => 'gnutls_system_key_add_x509@@GNUTLS_3_4', - 'gnutls_system_key_delete' => 'gnutls_system_key_delete@@GNUTLS_3_4', - 'gnutls_system_key_iter_deinit' => 'gnutls_system_key_iter_deinit@@GNUTLS_3_4', - 'gnutls_system_key_iter_get_info' => 'gnutls_system_key_iter_get_info@@GNUTLS_3_4', - 'gnutls_system_recv_timeout' => 'gnutls_system_recv_timeout@@GNUTLS_3_4', - 'gnutls_tdb_deinit' => 'gnutls_tdb_deinit@@GNUTLS_3_4', - 'gnutls_tdb_init' => 'gnutls_tdb_init@@GNUTLS_3_4', - 'gnutls_tdb_set_store_commitment_func' => 'gnutls_tdb_set_store_commitment_func@@GNUTLS_3_4', - 'gnutls_tdb_set_store_func' => 'gnutls_tdb_set_store_func@@GNUTLS_3_4', - 'gnutls_tdb_set_verify_func' => 'gnutls_tdb_set_verify_func@@GNUTLS_3_4', - 'gnutls_tpm_get_registered' => 'gnutls_tpm_get_registered@@GNUTLS_3_4', - 'gnutls_tpm_key_list_deinit' => 'gnutls_tpm_key_list_deinit@@GNUTLS_3_4', - 'gnutls_tpm_key_list_get_url' => 'gnutls_tpm_key_list_get_url@@GNUTLS_3_4', - 'gnutls_tpm_privkey_delete' => 'gnutls_tpm_privkey_delete@@GNUTLS_3_4', - 'gnutls_tpm_privkey_generate' => 'gnutls_tpm_privkey_generate@@GNUTLS_3_4', - 'gnutls_transport_get_int' => 'gnutls_transport_get_int@@GNUTLS_3_4', - 'gnutls_transport_get_int2' => 'gnutls_transport_get_int2@@GNUTLS_3_4', - 'gnutls_transport_get_ptr' => 'gnutls_transport_get_ptr@@GNUTLS_3_4', - 'gnutls_transport_get_ptr2' => 'gnutls_transport_get_ptr2@@GNUTLS_3_4', - 'gnutls_transport_set_errno' => 'gnutls_transport_set_errno@@GNUTLS_3_4', - 'gnutls_transport_set_errno_function' => 'gnutls_transport_set_errno_function@@GNUTLS_3_4', - 'gnutls_transport_set_int2' => 'gnutls_transport_set_int2@@GNUTLS_3_4', - 'gnutls_transport_set_ptr' => 'gnutls_transport_set_ptr@@GNUTLS_3_4', - 'gnutls_transport_set_ptr2' => 'gnutls_transport_set_ptr2@@GNUTLS_3_4', - 'gnutls_transport_set_pull_function' => 'gnutls_transport_set_pull_function@@GNUTLS_3_4', - 'gnutls_transport_set_pull_timeout_function' => 'gnutls_transport_set_pull_timeout_function@@GNUTLS_3_4', - 'gnutls_transport_set_push_function' => 'gnutls_transport_set_push_function@@GNUTLS_3_4', - 'gnutls_transport_set_vec_push_function' => 'gnutls_transport_set_vec_push_function@@GNUTLS_3_4', - 'gnutls_url_is_supported' => 'gnutls_url_is_supported@@GNUTLS_3_4', - 'gnutls_verify_stored_pubkey' => 'gnutls_verify_stored_pubkey@@GNUTLS_3_4', - 'gnutls_x509_aia_deinit' => 'gnutls_x509_aia_deinit@@GNUTLS_3_4', - 'gnutls_x509_aia_get' => 'gnutls_x509_aia_get@@GNUTLS_3_4', - 'gnutls_x509_aia_init' => 'gnutls_x509_aia_init@@GNUTLS_3_4', - 'gnutls_x509_aia_set' => 'gnutls_x509_aia_set@@GNUTLS_3_4', - 'gnutls_x509_aki_deinit' => 'gnutls_x509_aki_deinit@@GNUTLS_3_4', - 'gnutls_x509_aki_get_cert_issuer' => 'gnutls_x509_aki_get_cert_issuer@@GNUTLS_3_4', - 'gnutls_x509_aki_get_id' => 'gnutls_x509_aki_get_id@@GNUTLS_3_4', - 'gnutls_x509_aki_init' => 'gnutls_x509_aki_init@@GNUTLS_3_4', - 'gnutls_x509_aki_set_cert_issuer' => 'gnutls_x509_aki_set_cert_issuer@@GNUTLS_3_4', - 'gnutls_x509_aki_set_id' => 'gnutls_x509_aki_set_id@@GNUTLS_3_4', - 'gnutls_x509_crl_check_issuer' => 'gnutls_x509_crl_check_issuer@@GNUTLS_3_4', - 'gnutls_x509_crl_deinit' => 'gnutls_x509_crl_deinit@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_deinit' => 'gnutls_x509_crl_dist_points_deinit@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_get' => 'gnutls_x509_crl_dist_points_get@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_init' => 'gnutls_x509_crl_dist_points_init@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_set' => 'gnutls_x509_crl_dist_points_set@@GNUTLS_3_4', - 'gnutls_x509_crl_export' => 'gnutls_x509_crl_export@@GNUTLS_3_4', - 'gnutls_x509_crl_export2' => 'gnutls_x509_crl_export2@@GNUTLS_3_4', - 'gnutls_x509_crl_get_authority_key_gn_serial' => 'gnutls_x509_crl_get_authority_key_gn_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_get_authority_key_id' => 'gnutls_x509_crl_get_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crl_get_crt_count' => 'gnutls_x509_crl_get_crt_count@@GNUTLS_3_4', - 'gnutls_x509_crl_get_crt_serial' => 'gnutls_x509_crl_get_crt_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_get_dn_oid' => 'gnutls_x509_crl_get_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_data' => 'gnutls_x509_crl_get_extension_data@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_data2' => 'gnutls_x509_crl_get_extension_data2@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_info' => 'gnutls_x509_crl_get_extension_info@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_oid' => 'gnutls_x509_crl_get_extension_oid@@GNUTLS_3_4', - 'gnutls_x509_crl_get_issuer_dn' => 'gnutls_x509_crl_get_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crl_get_issuer_dn2' => 'gnutls_x509_crl_get_issuer_dn2@@GNUTLS_3_4', - 'gnutls_x509_crl_get_issuer_dn_by_oid' => 'gnutls_x509_crl_get_issuer_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crl_get_next_update' => 'gnutls_x509_crl_get_next_update@@GNUTLS_3_4', - 'gnutls_x509_crl_get_number' => 'gnutls_x509_crl_get_number@@GNUTLS_3_4', - 'gnutls_x509_crl_get_raw_issuer_dn' => 'gnutls_x509_crl_get_raw_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crl_get_signature' => 'gnutls_x509_crl_get_signature@@GNUTLS_3_4', - 'gnutls_x509_crl_get_signature_algorithm' => 'gnutls_x509_crl_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crl_get_this_update' => 'gnutls_x509_crl_get_this_update@@GNUTLS_3_4', - 'gnutls_x509_crl_get_version' => 'gnutls_x509_crl_get_version@@GNUTLS_3_4', - 'gnutls_x509_crl_import' => 'gnutls_x509_crl_import@@GNUTLS_3_4', - 'gnutls_x509_crl_init' => 'gnutls_x509_crl_init@@GNUTLS_3_4', - 'gnutls_x509_crl_iter_crt_serial' => 'gnutls_x509_crl_iter_crt_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_iter_deinit' => 'gnutls_x509_crl_iter_deinit@@GNUTLS_3_4', - 'gnutls_x509_crl_list_import' => 'gnutls_x509_crl_list_import@@GNUTLS_3_4', - 'gnutls_x509_crl_list_import2' => 'gnutls_x509_crl_list_import2@@GNUTLS_3_4', - 'gnutls_x509_crl_print' => 'gnutls_x509_crl_print@@GNUTLS_3_4', - 'gnutls_x509_crl_privkey_sign' => 'gnutls_x509_crl_privkey_sign@@GNUTLS_3_4', - 'gnutls_x509_crl_set_authority_key_id' => 'gnutls_x509_crl_set_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crl_set_crt' => 'gnutls_x509_crl_set_crt@@GNUTLS_3_4', - 'gnutls_x509_crl_set_crt_serial' => 'gnutls_x509_crl_set_crt_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_set_next_update' => 'gnutls_x509_crl_set_next_update@@GNUTLS_3_4', - 'gnutls_x509_crl_set_number' => 'gnutls_x509_crl_set_number@@GNUTLS_3_4', - 'gnutls_x509_crl_set_this_update' => 'gnutls_x509_crl_set_this_update@@GNUTLS_3_4', - 'gnutls_x509_crl_set_version' => 'gnutls_x509_crl_set_version@@GNUTLS_3_4', - 'gnutls_x509_crl_sign' => 'gnutls_x509_crl_sign@@GNUTLS_3_4', - 'gnutls_x509_crl_sign2' => 'gnutls_x509_crl_sign2@@GNUTLS_3_4', - 'gnutls_x509_crl_verify' => 'gnutls_x509_crl_verify@@GNUTLS_3_4', - 'gnutls_x509_crq_deinit' => 'gnutls_x509_crq_deinit@@GNUTLS_3_4', - 'gnutls_x509_crq_export' => 'gnutls_x509_crq_export@@GNUTLS_3_4', - 'gnutls_x509_crq_export2' => 'gnutls_x509_crq_export2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_attribute_by_oid' => 'gnutls_x509_crq_get_attribute_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_attribute_data' => 'gnutls_x509_crq_get_attribute_data@@GNUTLS_3_4', - 'gnutls_x509_crq_get_attribute_info' => 'gnutls_x509_crq_get_attribute_info@@GNUTLS_3_4', - 'gnutls_x509_crq_get_basic_constraints' => 'gnutls_x509_crq_get_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crq_get_challenge_password' => 'gnutls_x509_crq_get_challenge_password@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn' => 'gnutls_x509_crq_get_dn@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn2' => 'gnutls_x509_crq_get_dn2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn_by_oid' => 'gnutls_x509_crq_get_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn_oid' => 'gnutls_x509_crq_get_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_by_oid' => 'gnutls_x509_crq_get_extension_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_by_oid2' => 'gnutls_x509_crq_get_extension_by_oid2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_data' => 'gnutls_x509_crq_get_extension_data@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_data2' => 'gnutls_x509_crq_get_extension_data2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_info' => 'gnutls_x509_crq_get_extension_info@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_id' => 'gnutls_x509_crq_get_key_id@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_purpose_oid' => 'gnutls_x509_crq_get_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_rsa_raw' => 'gnutls_x509_crq_get_key_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_usage' => 'gnutls_x509_crq_get_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crq_get_pk_algorithm' => 'gnutls_x509_crq_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crq_get_private_key_usage_period' => 'gnutls_x509_crq_get_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crq_get_signature_algorithm' => 'gnutls_x509_crq_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crq_get_subject_alt_name' => 'gnutls_x509_crq_get_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crq_get_subject_alt_othername_oid' => 'gnutls_x509_crq_get_subject_alt_othername_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_version' => 'gnutls_x509_crq_get_version@@GNUTLS_3_4', - 'gnutls_x509_crq_import' => 'gnutls_x509_crq_import@@GNUTLS_3_4', - 'gnutls_x509_crq_init' => 'gnutls_x509_crq_init@@GNUTLS_3_4', - 'gnutls_x509_crq_print' => 'gnutls_x509_crq_print@@GNUTLS_3_4', - 'gnutls_x509_crq_privkey_sign' => 'gnutls_x509_crq_privkey_sign@@GNUTLS_3_4', - 'gnutls_x509_crq_set_attribute_by_oid' => 'gnutls_x509_crq_set_attribute_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_set_basic_constraints' => 'gnutls_x509_crq_set_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crq_set_challenge_password' => 'gnutls_x509_crq_set_challenge_password@@GNUTLS_3_4', - 'gnutls_x509_crq_set_dn' => 'gnutls_x509_crq_set_dn@@GNUTLS_3_4', - 'gnutls_x509_crq_set_dn_by_oid' => 'gnutls_x509_crq_set_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key' => 'gnutls_x509_crq_set_key@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key_purpose_oid' => 'gnutls_x509_crq_set_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key_rsa_raw' => 'gnutls_x509_crq_set_key_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key_usage' => 'gnutls_x509_crq_set_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crq_set_private_key_usage_period' => 'gnutls_x509_crq_set_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crq_set_pubkey' => 'gnutls_x509_crq_set_pubkey@@GNUTLS_3_4', - 'gnutls_x509_crq_set_subject_alt_name' => 'gnutls_x509_crq_set_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crq_set_version' => 'gnutls_x509_crq_set_version@@GNUTLS_3_4', - 'gnutls_x509_crq_sign' => 'gnutls_x509_crq_sign@@GNUTLS_3_4', - 'gnutls_x509_crq_sign2' => 'gnutls_x509_crq_sign2@@GNUTLS_3_4', - 'gnutls_x509_crq_verify' => 'gnutls_x509_crq_verify@@GNUTLS_3_4', - 'gnutls_x509_crt_check_email' => 'gnutls_x509_crt_check_email@@GNUTLS_3_4', - 'gnutls_x509_crt_check_hostname' => 'gnutls_x509_crt_check_hostname@@GNUTLS_3_4', - 'gnutls_x509_crt_check_hostname2' => 'gnutls_x509_crt_check_hostname2@@GNUTLS_3_4', - 'gnutls_x509_crt_check_issuer' => 'gnutls_x509_crt_check_issuer@@GNUTLS_3_4', - 'gnutls_x509_crt_check_revocation' => 'gnutls_x509_crt_check_revocation@@GNUTLS_3_4', - 'gnutls_x509_crt_cpy_crl_dist_points' => 'gnutls_x509_crt_cpy_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_crt_deinit' => 'gnutls_x509_crt_deinit@@GNUTLS_3_4', - 'gnutls_x509_crt_export' => 'gnutls_x509_crt_export@@GNUTLS_3_4', - 'gnutls_x509_crt_export2' => 'gnutls_x509_crt_export2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_activation_time' => 'gnutls_x509_crt_get_activation_time@@GNUTLS_3_4', - 'gnutls_x509_crt_get_authority_info_access' => 'gnutls_x509_crt_get_authority_info_access@@GNUTLS_3_4', - 'gnutls_x509_crt_get_authority_key_gn_serial' => 'gnutls_x509_crt_get_authority_key_gn_serial@@GNUTLS_3_4', - 'gnutls_x509_crt_get_authority_key_id' => 'gnutls_x509_crt_get_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_basic_constraints' => 'gnutls_x509_crt_get_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_get_ca_status' => 'gnutls_x509_crt_get_ca_status@@GNUTLS_3_4', - 'gnutls_x509_crt_get_crl_dist_points' => 'gnutls_x509_crt_get_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn' => 'gnutls_x509_crt_get_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn2' => 'gnutls_x509_crt_get_dn2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn_by_oid' => 'gnutls_x509_crt_get_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn_oid' => 'gnutls_x509_crt_get_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_expiration_time' => 'gnutls_x509_crt_get_expiration_time@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_by_oid' => 'gnutls_x509_crt_get_extension_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_by_oid2' => 'gnutls_x509_crt_get_extension_by_oid2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_data' => 'gnutls_x509_crt_get_extension_data@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_data2' => 'gnutls_x509_crt_get_extension_data2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_info' => 'gnutls_x509_crt_get_extension_info@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_oid' => 'gnutls_x509_crt_get_extension_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_fingerprint' => 'gnutls_x509_crt_get_fingerprint@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer' => 'gnutls_x509_crt_get_issuer@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_alt_name' => 'gnutls_x509_crt_get_issuer_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_alt_name2' => 'gnutls_x509_crt_get_issuer_alt_name2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_alt_othername_oid' => 'gnutls_x509_crt_get_issuer_alt_othername_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn' => 'gnutls_x509_crt_get_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn2' => 'gnutls_x509_crt_get_issuer_dn2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn_by_oid' => 'gnutls_x509_crt_get_issuer_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn_oid' => 'gnutls_x509_crt_get_issuer_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_unique_id' => 'gnutls_x509_crt_get_issuer_unique_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_key_id' => 'gnutls_x509_crt_get_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_key_purpose_oid' => 'gnutls_x509_crt_get_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_key_usage' => 'gnutls_x509_crt_get_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crt_get_name_constraints' => 'gnutls_x509_crt_get_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_algorithm' => 'gnutls_x509_crt_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_dsa_raw' => 'gnutls_x509_crt_get_pk_dsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_rsa_raw' => 'gnutls_x509_crt_get_pk_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crt_get_policy' => 'gnutls_x509_crt_get_policy@@GNUTLS_3_4', - 'gnutls_x509_crt_get_preferred_hash_algorithm' => 'gnutls_x509_crt_get_preferred_hash_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crt_get_private_key_usage_period' => 'gnutls_x509_crt_get_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crt_get_proxy' => 'gnutls_x509_crt_get_proxy@@GNUTLS_3_4', - 'gnutls_x509_crt_get_raw_dn' => 'gnutls_x509_crt_get_raw_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_raw_issuer_dn' => 'gnutls_x509_crt_get_raw_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_serial' => 'gnutls_x509_crt_get_serial@@GNUTLS_3_4', - 'gnutls_x509_crt_get_signature' => 'gnutls_x509_crt_get_signature@@GNUTLS_3_4', - 'gnutls_x509_crt_get_signature_algorithm' => 'gnutls_x509_crt_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject' => 'gnutls_x509_crt_get_subject@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_alt_name' => 'gnutls_x509_crt_get_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_alt_name2' => 'gnutls_x509_crt_get_subject_alt_name2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_alt_othername_oid' => 'gnutls_x509_crt_get_subject_alt_othername_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_key_id' => 'gnutls_x509_crt_get_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_unique_id' => 'gnutls_x509_crt_get_subject_unique_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_version' => 'gnutls_x509_crt_get_version@@GNUTLS_3_4', - 'gnutls_x509_crt_import' => 'gnutls_x509_crt_import@@GNUTLS_3_4', - 'gnutls_x509_crt_import_pkcs11' => 'gnutls_x509_crt_import_pkcs11@@GNUTLS_3_4', - 'gnutls_x509_crt_import_url' => 'gnutls_x509_crt_import_url@@GNUTLS_3_4', - 'gnutls_x509_crt_init' => 'gnutls_x509_crt_init@@GNUTLS_3_4', - 'gnutls_x509_crt_list_import' => 'gnutls_x509_crt_list_import@@GNUTLS_3_4', - 'gnutls_x509_crt_list_import2' => 'gnutls_x509_crt_list_import2@@GNUTLS_3_4', - 'gnutls_x509_crt_list_import_pkcs11' => 'gnutls_x509_crt_list_import_pkcs11@@GNUTLS_3_4', - 'gnutls_x509_crt_list_verify' => 'gnutls_x509_crt_list_verify@@GNUTLS_3_4', - 'gnutls_x509_crt_print' => 'gnutls_x509_crt_print@@GNUTLS_3_4', - 'gnutls_x509_crt_privkey_sign' => 'gnutls_x509_crt_privkey_sign@@GNUTLS_3_4', - 'gnutls_x509_crt_set_activation_time' => 'gnutls_x509_crt_set_activation_time@@GNUTLS_3_4', - 'gnutls_x509_crt_set_authority_info_access' => 'gnutls_x509_crt_set_authority_info_access@@GNUTLS_3_4', - 'gnutls_x509_crt_set_authority_key_id' => 'gnutls_x509_crt_set_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_set_basic_constraints' => 'gnutls_x509_crt_set_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_set_ca_status' => 'gnutls_x509_crt_set_ca_status@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crl_dist_points' => 'gnutls_x509_crt_set_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crl_dist_points2' => 'gnutls_x509_crt_set_crl_dist_points2@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crq' => 'gnutls_x509_crt_set_crq@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crq_extensions' => 'gnutls_x509_crt_set_crq_extensions@@GNUTLS_3_4', - 'gnutls_x509_crt_set_dn' => 'gnutls_x509_crt_set_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_set_dn_by_oid' => 'gnutls_x509_crt_set_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_expiration_time' => 'gnutls_x509_crt_set_expiration_time@@GNUTLS_3_4', - 'gnutls_x509_crt_set_extension_by_oid' => 'gnutls_x509_crt_set_extension_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_alt_name' => 'gnutls_x509_crt_set_issuer_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_dn' => 'gnutls_x509_crt_set_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_dn_by_oid' => 'gnutls_x509_crt_set_issuer_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_key' => 'gnutls_x509_crt_set_key@@GNUTLS_3_4', - 'gnutls_x509_crt_set_key_purpose_oid' => 'gnutls_x509_crt_set_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_key_usage' => 'gnutls_x509_crt_set_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crt_set_name_constraints' => 'gnutls_x509_crt_set_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_set_pin_function' => 'gnutls_x509_crt_set_pin_function@@GNUTLS_3_4', - 'gnutls_x509_crt_set_policy' => 'gnutls_x509_crt_set_policy@@GNUTLS_3_4', - 'gnutls_x509_crt_set_private_key_usage_period' => 'gnutls_x509_crt_set_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crt_set_proxy' => 'gnutls_x509_crt_set_proxy@@GNUTLS_3_4', - 'gnutls_x509_crt_set_proxy_dn' => 'gnutls_x509_crt_set_proxy_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_set_pubkey' => 'gnutls_x509_crt_set_pubkey@@GNUTLS_3_4', - 'gnutls_x509_crt_set_serial' => 'gnutls_x509_crt_set_serial@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_alt_name' => 'gnutls_x509_crt_set_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_alternative_name' => 'gnutls_x509_crt_set_subject_alternative_name@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_key_id' => 'gnutls_x509_crt_set_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_set_version' => 'gnutls_x509_crt_set_version@@GNUTLS_3_4', - 'gnutls_x509_crt_sign' => 'gnutls_x509_crt_sign@@GNUTLS_3_4', - 'gnutls_x509_crt_sign2' => 'gnutls_x509_crt_sign2@@GNUTLS_3_4', - 'gnutls_x509_crt_verify' => 'gnutls_x509_crt_verify@@GNUTLS_3_4', - 'gnutls_x509_dn_deinit' => 'gnutls_x509_dn_deinit@@GNUTLS_3_4', - 'gnutls_x509_dn_export' => 'gnutls_x509_dn_export@@GNUTLS_3_4', - 'gnutls_x509_dn_export2' => 'gnutls_x509_dn_export2@@GNUTLS_3_4', - 'gnutls_x509_dn_get_rdn_ava' => 'gnutls_x509_dn_get_rdn_ava@@GNUTLS_3_4', - 'gnutls_x509_dn_import' => 'gnutls_x509_dn_import@@GNUTLS_3_4', - 'gnutls_x509_dn_init' => 'gnutls_x509_dn_init@@GNUTLS_3_4', - 'gnutls_x509_dn_oid_known' => 'gnutls_x509_dn_oid_known@@GNUTLS_3_4', - 'gnutls_x509_dn_oid_name' => 'gnutls_x509_dn_oid_name@@GNUTLS_3_4', - 'gnutls_x509_ext_deinit' => 'gnutls_x509_ext_deinit@@GNUTLS_3_4', - 'gnutls_x509_ext_export_aia' => 'gnutls_x509_ext_export_aia@@GNUTLS_3_4', - 'gnutls_x509_ext_export_authority_key_id' => 'gnutls_x509_ext_export_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_export_basic_constraints' => 'gnutls_x509_ext_export_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_export_crl_dist_points' => 'gnutls_x509_ext_export_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_ext_export_key_purposes' => 'gnutls_x509_ext_export_key_purposes@@GNUTLS_3_4', - 'gnutls_x509_ext_export_key_usage' => 'gnutls_x509_ext_export_key_usage@@GNUTLS_3_4', - 'gnutls_x509_ext_export_name_constraints' => 'gnutls_x509_ext_export_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_export_policies' => 'gnutls_x509_ext_export_policies@@GNUTLS_3_4', - 'gnutls_x509_ext_export_private_key_usage_period' => 'gnutls_x509_ext_export_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_ext_export_proxy' => 'gnutls_x509_ext_export_proxy@@GNUTLS_3_4', - 'gnutls_x509_ext_export_subject_alt_names' => 'gnutls_x509_ext_export_subject_alt_names@@GNUTLS_3_4', - 'gnutls_x509_ext_export_subject_key_id' => 'gnutls_x509_ext_export_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_import_aia' => 'gnutls_x509_ext_import_aia@@GNUTLS_3_4', - 'gnutls_x509_ext_import_authority_key_id' => 'gnutls_x509_ext_import_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_import_basic_constraints' => 'gnutls_x509_ext_import_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_import_crl_dist_points' => 'gnutls_x509_ext_import_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_ext_import_key_purposes' => 'gnutls_x509_ext_import_key_purposes@@GNUTLS_3_4', - 'gnutls_x509_ext_import_key_usage' => 'gnutls_x509_ext_import_key_usage@@GNUTLS_3_4', - 'gnutls_x509_ext_import_name_constraints' => 'gnutls_x509_ext_import_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_import_policies' => 'gnutls_x509_ext_import_policies@@GNUTLS_3_4', - 'gnutls_x509_ext_import_private_key_usage_period' => 'gnutls_x509_ext_import_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_ext_import_proxy' => 'gnutls_x509_ext_import_proxy@@GNUTLS_3_4', - 'gnutls_x509_ext_import_subject_alt_names' => 'gnutls_x509_ext_import_subject_alt_names@@GNUTLS_3_4', - 'gnutls_x509_ext_import_subject_key_id' => 'gnutls_x509_ext_import_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_print' => 'gnutls_x509_ext_print@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_deinit' => 'gnutls_x509_key_purpose_deinit@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_get' => 'gnutls_x509_key_purpose_get@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_init' => 'gnutls_x509_key_purpose_init@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_set' => 'gnutls_x509_key_purpose_set@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_add_excluded' => 'gnutls_x509_name_constraints_add_excluded@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_add_permitted' => 'gnutls_x509_name_constraints_add_permitted@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_check' => 'gnutls_x509_name_constraints_check@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_check_crt' => 'gnutls_x509_name_constraints_check_crt@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_deinit' => 'gnutls_x509_name_constraints_deinit@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_get_excluded' => 'gnutls_x509_name_constraints_get_excluded@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_get_permitted' => 'gnutls_x509_name_constraints_get_permitted@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_init' => 'gnutls_x509_name_constraints_init@@GNUTLS_3_4', - 'gnutls_x509_othername_to_virtual' => 'gnutls_x509_othername_to_virtual@@GNUTLS_3_4', - 'gnutls_x509_policies_deinit' => 'gnutls_x509_policies_deinit@@GNUTLS_3_4', - 'gnutls_x509_policies_get' => 'gnutls_x509_policies_get@@GNUTLS_3_4', - 'gnutls_x509_policies_init' => 'gnutls_x509_policies_init@@GNUTLS_3_4', - 'gnutls_x509_policies_set' => 'gnutls_x509_policies_set@@GNUTLS_3_4', - 'gnutls_x509_policy_release' => 'gnutls_x509_policy_release@@GNUTLS_3_4', - 'gnutls_x509_privkey_cpy' => 'gnutls_x509_privkey_cpy@@GNUTLS_3_4', - 'gnutls_x509_privkey_deinit' => 'gnutls_x509_privkey_deinit@@GNUTLS_3_4', - 'gnutls_x509_privkey_export' => 'gnutls_x509_privkey_export@@GNUTLS_3_4', - 'gnutls_x509_privkey_export2' => 'gnutls_x509_privkey_export2@@GNUTLS_3_4', - 'gnutls_x509_privkey_export2_pkcs8' => 'gnutls_x509_privkey_export2_pkcs8@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_dsa_raw' => 'gnutls_x509_privkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_ecc_raw' => 'gnutls_x509_privkey_export_ecc_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_pkcs8' => 'gnutls_x509_privkey_export_pkcs8@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_rsa_raw' => 'gnutls_x509_privkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_rsa_raw2' => 'gnutls_x509_privkey_export_rsa_raw2@@GNUTLS_3_4', - 'gnutls_x509_privkey_fix' => 'gnutls_x509_privkey_fix@@GNUTLS_3_4', - 'gnutls_x509_privkey_generate' => 'gnutls_x509_privkey_generate@@GNUTLS_3_4', - 'gnutls_x509_privkey_get_key_id' => 'gnutls_x509_privkey_get_key_id@@GNUTLS_3_4', - 'gnutls_x509_privkey_get_pk_algorithm' => 'gnutls_x509_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_x509_privkey_get_pk_algorithm2' => 'gnutls_x509_privkey_get_pk_algorithm2@@GNUTLS_3_4', - 'gnutls_x509_privkey_import' => 'gnutls_x509_privkey_import@@GNUTLS_3_4', - 'gnutls_x509_privkey_import2' => 'gnutls_x509_privkey_import2@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_dsa_raw' => 'gnutls_x509_privkey_import_dsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_ecc_raw' => 'gnutls_x509_privkey_import_ecc_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_openssl' => 'gnutls_x509_privkey_import_openssl@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_pkcs8' => 'gnutls_x509_privkey_import_pkcs8@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_rsa_raw' => 'gnutls_x509_privkey_import_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_rsa_raw2' => 'gnutls_x509_privkey_import_rsa_raw2@@GNUTLS_3_4', - 'gnutls_x509_privkey_init' => 'gnutls_x509_privkey_init@@GNUTLS_3_4', - 'gnutls_x509_privkey_sec_param' => 'gnutls_x509_privkey_sec_param@@GNUTLS_3_4', - 'gnutls_x509_privkey_set_pin_function' => 'gnutls_x509_privkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_x509_privkey_sign_data' => 'gnutls_x509_privkey_sign_data@@GNUTLS_3_4', - 'gnutls_x509_privkey_sign_hash' => 'gnutls_x509_privkey_sign_hash@@GNUTLS_3_4', - 'gnutls_x509_privkey_verify_params' => 'gnutls_x509_privkey_verify_params@@GNUTLS_3_4', - 'gnutls_x509_rdn_get' => 'gnutls_x509_rdn_get@@GNUTLS_3_4', - 'gnutls_x509_rdn_get_by_oid' => 'gnutls_x509_rdn_get_by_oid@@GNUTLS_3_4', - 'gnutls_x509_rdn_get_oid' => 'gnutls_x509_rdn_get_oid@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_cas' => 'gnutls_x509_trust_list_add_cas@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_crls' => 'gnutls_x509_trust_list_add_crls@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_named_crt' => 'gnutls_x509_trust_list_add_named_crt@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_system_trust' => 'gnutls_x509_trust_list_add_system_trust@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_trust_dir' => 'gnutls_x509_trust_list_add_trust_dir@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_trust_file' => 'gnutls_x509_trust_list_add_trust_file@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_trust_mem' => 'gnutls_x509_trust_list_add_trust_mem@@GNUTLS_3_4', - 'gnutls_x509_trust_list_deinit' => 'gnutls_x509_trust_list_deinit@@GNUTLS_3_4', - 'gnutls_x509_trust_list_get_issuer' => 'gnutls_x509_trust_list_get_issuer@@GNUTLS_3_4', - 'gnutls_x509_trust_list_get_issuer_by_dn' => 'gnutls_x509_trust_list_get_issuer_by_dn@@GNUTLS_3_4', - 'gnutls_x509_trust_list_init' => 'gnutls_x509_trust_list_init@@GNUTLS_3_4', - 'gnutls_x509_trust_list_iter_deinit' => 'gnutls_x509_trust_list_iter_deinit@@GNUTLS_3_4', - 'gnutls_x509_trust_list_iter_get_ca' => 'gnutls_x509_trust_list_iter_get_ca@@GNUTLS_3_4', - 'gnutls_x509_trust_list_remove_cas' => 'gnutls_x509_trust_list_remove_cas@@GNUTLS_3_4', - 'gnutls_x509_trust_list_remove_trust_file' => 'gnutls_x509_trust_list_remove_trust_file@@GNUTLS_3_4', - 'gnutls_x509_trust_list_remove_trust_mem' => 'gnutls_x509_trust_list_remove_trust_mem@@GNUTLS_3_4', - 'gnutls_x509_trust_list_verify_crt' => 'gnutls_x509_trust_list_verify_crt@@GNUTLS_3_4', - 'gnutls_x509_trust_list_verify_crt2' => 'gnutls_x509_trust_list_verify_crt2@@GNUTLS_3_4', - 'gnutls_x509_trust_list_verify_named_crt' => 'gnutls_x509_trust_list_verify_named_crt@@GNUTLS_3_4', - 'inflate' => 'writev@@GLIBC_2.2.5', - 'inflateEnd' => 'writev@@GLIBC_2.2.5', - 'inflateInit2_' => 'writev@@GLIBC_2.2.5', - 'p11_kit_message' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_finalize' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_get_flags' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_get_name' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_initialize' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_load' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_release' => 'writev@@GLIBC_2.2.5', - 'p11_kit_modules_load_and_initialize' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_file_callback' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_get_length' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_get_value' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_new_for_string' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_register_callback' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_request' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_unref' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_unregister_callback' => 'writev@@GLIBC_2.2.5', - 'p11_kit_space_strdup' => 'writev@@GLIBC_2.2.5', - 'p11_kit_space_strlen' => 'writev@@GLIBC_2.2.5', - 'p11_kit_strerror' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_format' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_free' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_attribute' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_attributes' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_module_info' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_pin_source' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_pin_value' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_token_info' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_match_module_info' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_match_token_info' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_new' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_parse' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_set_attribute' => 'writev@@GLIBC_2.2.5' - }, - 'Symbols' => { - 'libgnutls.so.30.0.0' => { - '_gnutls_asn2err@@GNUTLS_PRIVATE' => 1, - '_gnutls_bin2hex@@GNUTLS_PRIVATE' => 1, - '_gnutls_buffer_append_data_prefix@@GNUTLS_PRIVATE' => 1, - '_gnutls_buffer_append_prefix@@GNUTLS_PRIVATE' => 1, - '_gnutls_buffer_append_str@@GNUTLS_PRIVATE' => 1, - '_gnutls_buffer_clear@@GNUTLS_PRIVATE' => 1, - '_gnutls_buffer_init@@GNUTLS_PRIVATE' => 1, - '_gnutls_buffer_pop_data@@GNUTLS_PRIVATE' => 1, - '_gnutls_buffer_pop_prefix@@GNUTLS_PRIVATE' => 1, - '_gnutls_buffer_to_datum@@GNUTLS_PRIVATE' => 1, - '_gnutls_encode_ber_rs_raw@@GNUTLS_FIPS140_3_4' => 1, - '_gnutls_ext_get_session_data@@GNUTLS_PRIVATE' => 1, - '_gnutls_ext_register@@GNUTLS_PRIVATE' => 1, - '_gnutls_ext_set_session_data@@GNUTLS_PRIVATE' => 1, - '_gnutls_hello_set_default_version@@GNUTLS_PRIVATE' => 1, - '_gnutls_lib_simulate_error@@GNUTLS_PRIVATE' => 1, - '_gnutls_log@@GNUTLS_PRIVATE' => 1, - '_gnutls_log_level@@GNUTLS_PRIVATE' => -4, - '_gnutls_mac_to_entry@@GNUTLS_PRIVATE' => 1, - '_gnutls_mpi_log@@GNUTLS_PRIVATE' => 1, - '_gnutls_mpi_ops@@GNUTLS_PRIVATE' => -200, - '_gnutls_pkcs12_string_to_key@@GNUTLS_PRIVATE' => 1, - '_gnutls_pkix1_asn@@GNUTLS_PRIVATE' => -8, - '_gnutls_record_set_default_version@@GNUTLS_PRIVATE' => 1, - '_gnutls_rsa_pms_set_version@@GNUTLS_PRIVATE' => 1, - '_gnutls_x509_parse_dn_oid@@GNUTLS_PRIVATE' => 1, - 'gnutls_aead_cipher_decrypt@@GNUTLS_3_4' => 1, - 'gnutls_aead_cipher_deinit@@GNUTLS_3_4' => 1, - 'gnutls_aead_cipher_encrypt@@GNUTLS_3_4' => 1, - 'gnutls_aead_cipher_init@@GNUTLS_3_4' => 1, - 'gnutls_alert_get@@GNUTLS_3_4' => 1, - 'gnutls_alert_get_name@@GNUTLS_3_4' => 1, - 'gnutls_alert_get_strname@@GNUTLS_3_4' => 1, - 'gnutls_alert_send@@GNUTLS_3_4' => 1, - 'gnutls_alert_send_appropriate@@GNUTLS_3_4' => 1, - 'gnutls_alpn_get_selected_protocol@@GNUTLS_3_4' => 1, - 'gnutls_alpn_set_protocols@@GNUTLS_3_4' => 1, - 'gnutls_anon_allocate_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_allocate_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_free_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_free_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_set_params_function@@GNUTLS_3_4' => 1, - 'gnutls_anon_set_server_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_anon_set_server_params_function@@GNUTLS_3_4' => 1, - 'gnutls_auth_client_get_type@@GNUTLS_3_4' => 1, - 'gnutls_auth_get_type@@GNUTLS_3_4' => 1, - 'gnutls_auth_server_get_type@@GNUTLS_3_4' => 1, - 'gnutls_buffer_append_data@@GNUTLS_3_4' => 1, - 'gnutls_bye@@GNUTLS_3_4' => 1, - 'gnutls_calloc@@GNUTLS_3_4' => -8, - 'gnutls_certificate_activation_time_peers@@GNUTLS_3_4' => 1, - 'gnutls_certificate_allocate_credentials@@GNUTLS_3_4' => 1, - 'gnutls_certificate_client_get_request_status@@GNUTLS_3_4' => 1, - 'gnutls_certificate_expiration_time_peers@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_ca_names@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_cas@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_credentials@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_crls@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_keys@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_crt_raw@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_issuer@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_openpgp_crt@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_openpgp_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_ours@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_peers@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_peers_subkey_id@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_trust_list@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_verify_flags@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_x509_crt@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_x509_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_send_x509_rdn_sequence@@GNUTLS_3_4' => 1, - 'gnutls_certificate_server_set_request@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_ocsp_status_request_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_ocsp_status_request_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_file2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_mem2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_keyring_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_keyring_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_params_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_retrieve_function2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_retrieve_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_trust_list@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_verify_flags@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_verify_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_verify_limits@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_crl@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_crl_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_crl_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_file2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_mem2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_simple_pkcs12_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_simple_pkcs12_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_system_trust@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust_dir@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_get@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_get_id@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_get_name@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_list@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verification_status_print@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verify_peers2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verify_peers3@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verify_peers@@GNUTLS_3_4' => 1, - 'gnutls_check_version@@GNUTLS_3_4' => 1, - 'gnutls_cipher_add_auth@@GNUTLS_3_4' => 1, - 'gnutls_cipher_decrypt2@@GNUTLS_3_4' => 1, - 'gnutls_cipher_decrypt@@GNUTLS_3_4' => 1, - 'gnutls_cipher_deinit@@GNUTLS_3_4' => 1, - 'gnutls_cipher_encrypt2@@GNUTLS_3_4' => 1, - 'gnutls_cipher_encrypt@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_block_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_id@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_iv_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_key_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_name@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_tag_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_init@@GNUTLS_3_4' => 1, - 'gnutls_cipher_list@@GNUTLS_3_4' => 1, - 'gnutls_cipher_set_iv@@GNUTLS_3_4' => 1, - 'gnutls_cipher_suite_get_name@@GNUTLS_3_4' => 1, - 'gnutls_cipher_suite_info@@GNUTLS_3_4' => 1, - 'gnutls_cipher_tag@@GNUTLS_3_4' => 1, - 'gnutls_compression_get@@GNUTLS_3_4' => 1, - 'gnutls_compression_get_id@@GNUTLS_3_4' => 1, - 'gnutls_compression_get_name@@GNUTLS_3_4' => 1, - 'gnutls_compression_list@@GNUTLS_3_4' => 1, - 'gnutls_credentials_clear@@GNUTLS_3_4' => 1, - 'gnutls_credentials_get@@GNUTLS_3_4' => 1, - 'gnutls_credentials_set@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_aead_cipher@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_cipher@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_digest@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_mac@@GNUTLS_3_4' => 1, - 'gnutls_db_check_entry@@GNUTLS_3_4' => 1, - 'gnutls_db_check_entry_time@@GNUTLS_3_4' => 1, - 'gnutls_db_get_default_cache_expiration@@GNUTLS_3_4' => 1, - 'gnutls_db_get_ptr@@GNUTLS_3_4' => 1, - 'gnutls_db_remove_session@@GNUTLS_3_4' => 1, - 'gnutls_db_set_cache_expiration@@GNUTLS_3_4' => 1, - 'gnutls_db_set_ptr@@GNUTLS_3_4' => 1, - 'gnutls_db_set_remove_function@@GNUTLS_3_4' => 1, - 'gnutls_db_set_retrieve_function@@GNUTLS_3_4' => 1, - 'gnutls_db_set_store_function@@GNUTLS_3_4' => 1, - 'gnutls_deinit@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_group@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_peers_public_bits@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_prime_bits@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_secret_bits@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_cpy@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_deinit@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_export2_pkcs3@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_export_pkcs3@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_export_raw@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_generate2@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_import_pkcs3@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_import_raw2@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_import_raw@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_init@@GNUTLS_3_4' => 1, - 'gnutls_dh_set_prime_bits@@GNUTLS_3_4' => 1, - 'gnutls_digest_get_id@@GNUTLS_3_4' => 1, - 'gnutls_digest_get_name@@GNUTLS_3_4' => 1, - 'gnutls_digest_list@@GNUTLS_3_4' => 1, - 'gnutls_dtls_cookie_send@@GNUTLS_3_4' => 1, - 'gnutls_dtls_cookie_verify@@GNUTLS_3_4' => 1, - 'gnutls_dtls_get_data_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_get_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_get_timeout@@GNUTLS_3_4' => 1, - 'gnutls_dtls_prestate_set@@GNUTLS_3_4' => 1, - 'gnutls_dtls_set_data_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_set_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_set_timeouts@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get_name@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get_size@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_list@@GNUTLS_3_4' => 1, - 'gnutls_error_is_fatal@@GNUTLS_3_4' => 1, - 'gnutls_error_to_alert@@GNUTLS_3_4' => 1, - 'gnutls_est_record_overhead_size@@GNUTLS_3_4' => 1, - 'gnutls_ext_get_data@@GNUTLS_3_4' => 1, - 'gnutls_ext_register@@GNUTLS_3_4' => 1, - 'gnutls_ext_set_data@@GNUTLS_3_4' => 1, - 'gnutls_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_fips140_mode_enabled@@GNUTLS_3_4' => 1, - 'gnutls_free@@GNUTLS_3_4' => -8, - 'gnutls_global_deinit@@GNUTLS_3_4' => 1, - 'gnutls_global_init@@GNUTLS_3_4' => 1, - 'gnutls_global_set_audit_log_function@@GNUTLS_3_4' => 1, - 'gnutls_global_set_log_function@@GNUTLS_3_4' => 1, - 'gnutls_global_set_log_level@@GNUTLS_3_4' => 1, - 'gnutls_global_set_mem_functions@@GNUTLS_3_4' => 1, - 'gnutls_global_set_mutex@@GNUTLS_3_4' => 1, - 'gnutls_global_set_time_function@@GNUTLS_3_4' => 1, - 'gnutls_handshake@@GNUTLS_3_4' => 1, - 'gnutls_handshake_description_get_name@@GNUTLS_3_4' => 1, - 'gnutls_handshake_get_last_in@@GNUTLS_3_4' => 1, - 'gnutls_handshake_get_last_out@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_hook_function@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_max_packet_length@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_post_client_hello_function@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_private_extensions@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_random@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_timeout@@GNUTLS_3_4' => 1, - 'gnutls_hash@@GNUTLS_3_4' => 1, - 'gnutls_hash_deinit@@GNUTLS_3_4' => 1, - 'gnutls_hash_fast@@GNUTLS_3_4' => 1, - 'gnutls_hash_get_len@@GNUTLS_3_4' => 1, - 'gnutls_hash_init@@GNUTLS_3_4' => 1, - 'gnutls_hash_output@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_allowed@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_enable@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_get_timeout@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_ping@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_pong@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_set_timeouts@@GNUTLS_3_4' => 1, - 'gnutls_hex2bin@@GNUTLS_3_4' => 1, - 'gnutls_hex_decode@@GNUTLS_3_4' => 1, - 'gnutls_hex_encode@@GNUTLS_3_4' => 1, - 'gnutls_hmac@@GNUTLS_3_4' => 1, - 'gnutls_hmac_deinit@@GNUTLS_3_4' => 1, - 'gnutls_hmac_fast@@GNUTLS_3_4' => 1, - 'gnutls_hmac_get_len@@GNUTLS_3_4' => 1, - 'gnutls_hmac_init@@GNUTLS_3_4' => 1, - 'gnutls_hmac_output@@GNUTLS_3_4' => 1, - 'gnutls_hmac_set_nonce@@GNUTLS_3_4' => 1, - 'gnutls_init@@GNUTLS_3_4' => 1, - 'gnutls_key_generate@@GNUTLS_3_4' => 1, - 'gnutls_kx_get@@GNUTLS_3_4' => 1, - 'gnutls_kx_get_id@@GNUTLS_3_4' => 1, - 'gnutls_kx_get_name@@GNUTLS_3_4' => 1, - 'gnutls_kx_list@@GNUTLS_3_4' => 1, - 'gnutls_load_file@@GNUTLS_3_4' => 1, - 'gnutls_mac_get@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_id@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_key_size@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_name@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_nonce_size@@GNUTLS_3_4' => 1, - 'gnutls_mac_list@@GNUTLS_3_4' => 1, - 'gnutls_malloc@@GNUTLS_3_4' => -8, - 'gnutls_memcmp@@GNUTLS_3_4' => 1, - 'gnutls_memset@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_add_cert@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_add_cert_id@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_deinit@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_export@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_cert_id@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_extension@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_version@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_import@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_init@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_print@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_randomize_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_set_extension@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_set_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_check_crt@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_deinit@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_export@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_certs@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_extension@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_produced@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_responder@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_responder_raw_id@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_response@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_signature@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_single@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_status@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_version@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_import@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_init@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_print@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_verify@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_verify_direct@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_status_request_enable_client@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_status_request_get@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_status_request_is_checked@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_check_email@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_check_hostname2@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_check_hostname@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_deinit@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_export2@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_export@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_auth_subkey@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_creation_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_name@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_pk_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_pk_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_count@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_creation_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_idx@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_usage@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_version@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_import@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_init@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_print@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_set_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_verify_ring@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_verify_self@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_check_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_deinit@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_get_crt@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_get_crt_count@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_import@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_init@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export2@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_subkey_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_subkey_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_count@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_creation_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_idx@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_import@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_sec_param@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_set_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_sign_hash@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_send_cert@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_set_recv_key_function@@GNUTLS_3_4' => 1, - 'gnutls_packet_deinit@@GNUTLS_3_4' => 1, - 'gnutls_packet_get@@GNUTLS_3_4' => 1, - 'gnutls_pcert_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pcert_export_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_pcert_export_x509@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_openpgp_raw@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_x509@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_x509_list@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_pcert_list_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_decode2@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_decode@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_encode2@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_encode@@GNUTLS_3_4' => 1, - 'gnutls_perror@@GNUTLS_3_4' => 1, - 'gnutls_pk_algorithm_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pk_bits_to_sec_param@@GNUTLS_3_4' => 1, - 'gnutls_pk_get_id@@GNUTLS_3_4' => 1, - 'gnutls_pk_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pk_list@@GNUTLS_3_4' => 1, - 'gnutls_pk_to_sign@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_add_provider@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_attached_extension@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_secret_key@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_x509_crt2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_x509_privkey2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_crt_is_known@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_delete_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_get_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_get_raw_issuer@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_get_raw_issuer_by_dn@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export3@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_flags_get_str@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_exts@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_flags@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_type@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_import_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_list_import_url3@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_list_import_url4@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_set_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_cpy@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_export_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_export_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_generate3@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_get_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_import_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_status@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_reinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_set_token_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_flags@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_mechanism@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_random@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_set_pin@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_type_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_decrypt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_enc_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_encrypt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_count@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_data@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_friendly_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_type@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_crl@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_crt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_data@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_friendly_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_privkey@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_export2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_export@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_generate_mac2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_generate_mac@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_get_bag@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_import@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_mac_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_set_bag@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_simple_parse@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_verify_mac@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_delete_crl@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_delete_crt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_export2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_export@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crl_count@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crl_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crt_count@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crt_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_import@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crl@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crl_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crt_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs8_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs_schema_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs_schema_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_prf@@GNUTLS_3_4' => 1, - 'gnutls_prf_raw@@GNUTLS_3_4' => 1, - 'gnutls_priority_certificate_type_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_cipher_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_compression_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_deinit@@GNUTLS_3_4' => 1, - 'gnutls_priority_ecc_curve_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_get_cipher_suite_index@@GNUTLS_3_4' => 1, - 'gnutls_priority_init@@GNUTLS_3_4' => 1, - 'gnutls_priority_kx_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_mac_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_protocol_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_set@@GNUTLS_3_4' => 1, - 'gnutls_priority_set_direct@@GNUTLS_3_4' => 1, - 'gnutls_priority_sign_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_string_list@@GNUTLS_3_4' => 1, - 'gnutls_privkey_decrypt_data@@GNUTLS_3_4' => 1, - 'gnutls_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_x509@@GNUTLS_3_4' => 1, - 'gnutls_privkey_generate@@GNUTLS_3_4' => 1, - 'gnutls_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_privkey_get_type@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ext2@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ext3@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ext@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_openpgp_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_tpm_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_tpm_url@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_url@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_x509@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_privkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_privkey_sign_data@@GNUTLS_3_4' => 1, - 'gnutls_privkey_sign_hash@@GNUTLS_3_4' => 1, - 'gnutls_privkey_status@@GNUTLS_3_4' => 1, - 'gnutls_privkey_verify_params@@GNUTLS_3_4' => 1, - 'gnutls_protocol_get_id@@GNUTLS_3_4' => 1, - 'gnutls_protocol_get_name@@GNUTLS_3_4' => 1, - 'gnutls_protocol_get_version@@GNUTLS_3_4' => 1, - 'gnutls_protocol_list@@GNUTLS_3_4' => 1, - 'gnutls_psk_allocate_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_allocate_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_client_get_hint@@GNUTLS_3_4' => 1, - 'gnutls_psk_free_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_free_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_server_get_username@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_client_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_params_function@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_credentials_file@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_credentials_hint@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_params_function@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_encrypt_data@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export2@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_ecc_x962@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_openpgp_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_preferred_hash_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_ecc_x962@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_openpgp_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_privkey@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_tpm_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_tpm_url@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_url@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_x509@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_x509_crq@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_init@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_print@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_set_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_verify_data2@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_verify_hash2@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_verify_params@@GNUTLS_3_4' => 1, - 'gnutls_random_art@@GNUTLS_3_4' => 1, - 'gnutls_range_split@@GNUTLS_3_4' => 1, - 'gnutls_realloc@@GNUTLS_3_4' => -8, - 'gnutls_record_can_use_length_hiding@@GNUTLS_3_4' => 1, - 'gnutls_record_check_corked@@GNUTLS_3_4' => 1, - 'gnutls_record_check_pending@@GNUTLS_3_4' => 1, - 'gnutls_record_cork@@GNUTLS_3_4' => 1, - 'gnutls_record_disable_padding@@GNUTLS_3_4' => 1, - 'gnutls_record_discard_queued@@GNUTLS_3_4' => 1, - 'gnutls_record_get_direction@@GNUTLS_3_4' => 1, - 'gnutls_record_get_discarded@@GNUTLS_3_4' => 1, - 'gnutls_record_get_max_size@@GNUTLS_3_4' => 1, - 'gnutls_record_get_state@@GNUTLS_3_4' => 1, - 'gnutls_record_overhead_size@@GNUTLS_3_4' => 1, - 'gnutls_record_recv@@GNUTLS_3_4' => 1, - 'gnutls_record_recv_packet@@GNUTLS_3_4' => 1, - 'gnutls_record_recv_seq@@GNUTLS_3_4' => 1, - 'gnutls_record_send@@GNUTLS_3_4' => 1, - 'gnutls_record_send_range@@GNUTLS_3_4' => 1, - 'gnutls_record_set_max_size@@GNUTLS_3_4' => 1, - 'gnutls_record_set_state@@GNUTLS_3_4' => 1, - 'gnutls_record_set_timeout@@GNUTLS_3_4' => 1, - 'gnutls_record_uncork@@GNUTLS_3_4' => 1, - 'gnutls_register_custom_url@@GNUTLS_3_4' => 1, - 'gnutls_rehandshake@@GNUTLS_3_4' => 1, - 'gnutls_rnd@@GNUTLS_3_4' => 1, - 'gnutls_rnd_refresh@@GNUTLS_3_4' => 1, - 'gnutls_safe_renegotiation_status@@GNUTLS_3_4' => 1, - 'gnutls_sec_param_get_name@@GNUTLS_3_4' => 1, - 'gnutls_sec_param_to_pk_bits@@GNUTLS_3_4' => 1, - 'gnutls_sec_param_to_symmetric_bits@@GNUTLS_3_4' => 1, - 'gnutls_secure_malloc@@GNUTLS_3_4' => -8, - 'gnutls_server_name_get@@GNUTLS_3_4' => 1, - 'gnutls_server_name_set@@GNUTLS_3_4' => 1, - 'gnutls_session_channel_binding@@GNUTLS_3_4' => 1, - 'gnutls_session_enable_compatibility_mode@@GNUTLS_3_4' => 1, - 'gnutls_session_etm_status@@GNUTLS_3_4' => 1, - 'gnutls_session_ext_master_secret_status@@GNUTLS_3_4' => 1, - 'gnutls_session_force_valid@@GNUTLS_3_4' => 1, - 'gnutls_session_get_data2@@GNUTLS_3_4' => 1, - 'gnutls_session_get_data@@GNUTLS_3_4' => 1, - 'gnutls_session_get_desc@@GNUTLS_3_4' => 1, - 'gnutls_session_get_id2@@GNUTLS_3_4' => 1, - 'gnutls_session_get_id@@GNUTLS_3_4' => 1, - 'gnutls_session_get_ptr@@GNUTLS_3_4' => 1, - 'gnutls_session_get_random@@GNUTLS_3_4' => 1, - 'gnutls_session_is_resumed@@GNUTLS_3_4' => 1, - 'gnutls_session_resumption_requested@@GNUTLS_3_4' => 1, - 'gnutls_session_set_data@@GNUTLS_3_4' => 1, - 'gnutls_session_set_id@@GNUTLS_3_4' => 1, - 'gnutls_session_set_premaster@@GNUTLS_3_4' => 1, - 'gnutls_session_set_ptr@@GNUTLS_3_4' => 1, - 'gnutls_session_ticket_enable_client@@GNUTLS_3_4' => 1, - 'gnutls_session_ticket_enable_server@@GNUTLS_3_4' => 1, - 'gnutls_session_ticket_key_generate@@GNUTLS_3_4' => 1, - 'gnutls_set_default_priority@@GNUTLS_3_4' => 1, - 'gnutls_sign_algorithm_get@@GNUTLS_3_4' => 1, - 'gnutls_sign_algorithm_get_client@@GNUTLS_3_4' => 1, - 'gnutls_sign_algorithm_get_requested@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_hash_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_id@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_name@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_sign_is_secure@@GNUTLS_3_4' => 1, - 'gnutls_sign_list@@GNUTLS_3_4' => 1, - 'gnutls_srp_1024_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_1024_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_1536_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_1536_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_2048_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_2048_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_3072_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_3072_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_4096_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_4096_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_allocate_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_allocate_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_decode2@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_decode@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_encode2@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_encode@@GNUTLS_3_4' => 1, - 'gnutls_srp_free_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_free_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_server_get_username@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_client_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_prime_bits@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_server_credentials_file@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_server_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_server_fake_salt_seed@@GNUTLS_3_4' => 1, - 'gnutls_srp_verifier@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_keys@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_mki@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_profile_id@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_profile_name@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_selected_profile@@GNUTLS_3_4' => 1, - 'gnutls_srtp_set_mki@@GNUTLS_3_4' => 1, - 'gnutls_srtp_set_profile@@GNUTLS_3_4' => 1, - 'gnutls_srtp_set_profile_direct@@GNUTLS_3_4' => 1, - 'gnutls_store_commitment@@GNUTLS_3_4' => 1, - 'gnutls_store_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_strdup@@GNUTLS_3_4' => -8, - 'gnutls_strerror@@GNUTLS_3_4' => 1, - 'gnutls_strerror_name@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_deinit@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_get@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_init@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_set@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_get_name@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_recv@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_register@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_send@@GNUTLS_3_4' => 1, - 'gnutls_system_key_add_x509@@GNUTLS_3_4' => 1, - 'gnutls_system_key_delete@@GNUTLS_3_4' => 1, - 'gnutls_system_key_iter_deinit@@GNUTLS_3_4' => 1, - 'gnutls_system_key_iter_get_info@@GNUTLS_3_4' => 1, - 'gnutls_system_recv_timeout@@GNUTLS_3_4' => 1, - 'gnutls_tdb_deinit@@GNUTLS_3_4' => 1, - 'gnutls_tdb_init@@GNUTLS_3_4' => 1, - 'gnutls_tdb_set_store_commitment_func@@GNUTLS_3_4' => 1, - 'gnutls_tdb_set_store_func@@GNUTLS_3_4' => 1, - 'gnutls_tdb_set_verify_func@@GNUTLS_3_4' => 1, - 'gnutls_tpm_get_registered@@GNUTLS_3_4' => 1, - 'gnutls_tpm_key_list_deinit@@GNUTLS_3_4' => 1, - 'gnutls_tpm_key_list_get_url@@GNUTLS_3_4' => 1, - 'gnutls_tpm_privkey_delete@@GNUTLS_3_4' => 1, - 'gnutls_tpm_privkey_generate@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_int2@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_int@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_ptr2@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_ptr@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_errno@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_errno_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_int2@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_ptr2@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_ptr@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_pull_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_pull_timeout_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_push_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_vec_push_function@@GNUTLS_3_4' => 1, - 'gnutls_url_is_supported@@GNUTLS_3_4' => 1, - 'gnutls_verify_stored_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_get_cert_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_get_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_set_cert_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_set_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_check_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_authority_key_gn_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_crt_count@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_crt_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_data2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_issuer_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_issuer_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_next_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_number@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_raw_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_signature@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_this_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_iter_crt_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_iter_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_list_import2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_list_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_privkey_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_crt_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_next_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_number@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_this_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_sign2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_attribute_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_attribute_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_attribute_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_challenge_password@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_by_oid2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_data2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_subject_alt_othername_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_privkey_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_attribute_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_challenge_password@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_sign2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_email@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_hostname2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_hostname@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_revocation@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_cpy_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_activation_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_authority_info_access@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_authority_key_gn_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_ca_status@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_by_oid2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_data2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_alt_name2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_alt_othername_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_unique_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_policy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_preferred_hash_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_raw_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_raw_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_signature@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_alt_name2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_alt_othername_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_unique_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_import_url@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_import2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_privkey_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_activation_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_authority_info_access@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_ca_status@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crl_dist_points2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crq@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crq_extensions@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_extension_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_key@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_policy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_proxy_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_alternative_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_sign2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_get_rdn_ava@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_oid_known@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_oid_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_aia@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_key_purposes@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_policies@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_subject_alt_names@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_aia@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_key_purposes@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_policies@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_subject_alt_names@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_add_excluded@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_add_permitted@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_check@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_check_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_get_excluded@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_get_permitted@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_othername_to_virtual@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_policy_release@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_cpy@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export2_pkcs8@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_pkcs8@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_rsa_raw2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_fix@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_generate@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_get_pk_algorithm2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_openssl@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_pkcs8@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_rsa_raw2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_sec_param@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_sign_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_sign_hash@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_verify_params@@GNUTLS_3_4' => 1, - 'gnutls_x509_rdn_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_rdn_get_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_rdn_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_cas@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_crls@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_named_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_system_trust@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_trust_dir@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_trust_file@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_trust_mem@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_get_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_get_issuer_by_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_iter_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_iter_get_ca@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_remove_cas@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_remove_trust_file@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_remove_trust_mem@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_verify_crt2@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_verify_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_verify_named_crt@@GNUTLS_3_4' => 1 - } - }, - 'Target' => 'unix', - 'TypeInfo' => { - '-1' => { - 'Name' => '...', - 'Type' => 'Intrinsic' - }, - '1' => { - 'Name' => 'void', - 'Type' => 'Intrinsic' - }, - '1017946' => { - 'Header' => 'gnutls.h', - 'Line' => '619', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CRT_PRINT_FULL', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CRT_PRINT_ONELINE', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_CRT_PRINT_UNSIGNED_FULL', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_CRT_PRINT_COMPACT', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_CRT_PRINT_FULL_NUMBERS', - 'value' => '4' - } - }, - 'Name' => 'enum gnutls_certificate_print_formats', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1017994' => { - 'BaseType' => '1017946', - 'Header' => 'gnutls.h', - 'Line' => '625', - 'Name' => 'gnutls_certificate_print_formats_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1018880' => { - 'BaseType' => '1018892', - 'Header' => 'x509.h', - 'Line' => '264', - 'Name' => 'gnutls_x509_name_constraints_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1018892' => { - 'BaseType' => '1018898', - 'Name' => 'struct gnutls_name_constraints_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1018898' => { - 'Header' => 'x509_int.h', - 'Line' => '434', - 'Memb' => { - '0' => { - 'name' => 'permitted', - 'offset' => '0', - 'type' => '1240667' - }, - '1' => { - 'name' => 'excluded', - 'offset' => '8', - 'type' => '1240667' - } - }, - 'Name' => 'struct gnutls_name_constraints_st', - 'Size' => '16', - 'Type' => 'Struct' - }, - '1018938' => { - 'Header' => 'x509.h', - 'Line' => '438', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_X509_QUALIFIER_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_X509_QUALIFIER_URI', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_X509_QUALIFIER_NOTICE', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_x509_qualifier_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1018974' => { - 'BaseType' => '1018938', - 'Header' => 'x509.h', - 'Line' => '441', - 'Name' => 'gnutls_x509_qualifier_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1018986' => { - 'Header' => 'x509.h', - 'Line' => '446', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '1018974' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '208' - }, - '2' => { - 'name' => 'size', - 'offset' => '16', - 'type' => '130' - } - }, - 'Name' => 'anon-struct-x509.h-446', - 'Size' => '24', - 'Type' => 'Struct' - }, - '1019035' => { - 'Header' => 'x509.h', - 'Line' => '443', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '208' - }, - '1' => { - 'name' => 'qualifiers', - 'offset' => '8', - 'type' => '130' - }, - '2' => { - 'name' => 'qualifier', - 'offset' => '16', - 'type' => '1019088' - } - }, - 'Name' => 'struct gnutls_x509_policy_st', - 'Size' => '208', - 'Type' => 'Struct' - }, - '1019088' => { - 'BaseType' => '1018986', - 'Name' => 'anon-struct-x509.h-446[8]', - 'Size' => '192', - 'Type' => 'Array' - }, - '1020465' => { - 'BaseType' => '1020476', - 'Header' => 'x509-ext.h', - 'Line' => '60', - 'Name' => 'gnutls_x509_crl_dist_points_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1020476' => { - 'BaseType' => '1020482', - 'Name' => 'struct gnutls_x509_crl_dist_points_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1020482' => { - 'Line' => '2126', - 'Memb' => { - '0' => { - 'name' => 'points', - 'offset' => '0', - 'type' => '1271569' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_x509_crl_dist_points_st', - 'Size' => '16', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1020487' => { - 'BaseType' => '1020498', - 'Header' => 'x509-ext.h', - 'Line' => '83', - 'Name' => 'gnutls_x509_aia_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1020498' => { - 'BaseType' => '1020504', - 'Name' => 'struct gnutls_x509_aia_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1020504' => { - 'Line' => '2480', - 'Memb' => { - '0' => { - 'name' => 'aia', - 'offset' => '0', - 'type' => '1271624' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_x509_aia_st', - 'Size' => '16', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1020531' => { - 'BaseType' => '1020542', - 'Header' => 'x509-ext.h', - 'Line' => '146', - 'Name' => 'gnutls_x509_key_purposes_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1020542' => { - 'BaseType' => '1020548', - 'Name' => 'struct gnutls_x509_key_purposes_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1020548' => { - 'Line' => '2803', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '1271630' - }, - '1' => { - 'name' => 'size', - 'offset' => '1024', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_x509_key_purposes_st', - 'Size' => '1032', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1020553' => { - 'BaseType' => '1020564', - 'Header' => 'x509-ext.h', - 'Line' => '172', - 'Name' => 'gnutls_x509_policies_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1020564' => { - 'BaseType' => '1020570', - 'Name' => 'struct gnutls_x509_policies_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1020570' => { - 'Line' => '1639', - 'Memb' => { - '0' => { - 'name' => 'policy', - 'offset' => '0', - 'type' => '1271500' - }, - '1' => { - 'name' => 'size', - 'offset' => '13312', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_x509_policies_st', - 'Size' => '13320', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1020575' => { - 'Header' => 'x509_int.h', - 'Line' => '439', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'name' => 'name', - 'offset' => '8', - 'type' => '3192' - }, - '2' => { - 'name' => 'next', - 'offset' => '24', - 'type' => '1240667' - } - }, - 'Name' => 'struct name_constraints_node_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '10246' => { - 'BaseType' => '6068', - 'Name' => 'handshake_buffer_st[6]', - 'Size' => '432', - 'Type' => 'Array' - }, - '10262' => { - 'Header' => 'gnutls_auth.h', - 'Line' => '28', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '105' - }, - '1' => { - 'name' => 'gnutls_generate_server_certificate', - 'offset' => '8', - 'type' => '10561' - }, - '10' => { - 'name' => 'gnutls_process_client_kx', - 'offset' => '80', - 'type' => '10592' - }, - '11' => { - 'name' => 'gnutls_process_client_crt_vrfy', - 'offset' => '88', - 'type' => '10592' - }, - '12' => { - 'name' => 'gnutls_process_server_crt_request', - 'offset' => '96', - 'type' => '10592' - }, - '2' => { - 'name' => 'gnutls_generate_client_certificate', - 'offset' => '16', - 'type' => '10561' - }, - '3' => { - 'name' => 'gnutls_generate_server_kx', - 'offset' => '24', - 'type' => '10561' - }, - '4' => { - 'name' => 'gnutls_generate_client_kx', - 'offset' => '32', - 'type' => '10561' - }, - '5' => { - 'name' => 'gnutls_generate_client_crt_vrfy', - 'offset' => '40', - 'type' => '10561' - }, - '6' => { - 'name' => 'gnutls_generate_server_crt_request', - 'offset' => '48', - 'type' => '10561' - }, - '7' => { - 'name' => 'gnutls_process_server_certificate', - 'offset' => '56', - 'type' => '10592' - }, - '8' => { - 'name' => 'gnutls_process_client_certificate', - 'offset' => '64', - 'type' => '10592' - }, - '9' => { - 'name' => 'gnutls_process_server_kx', - 'offset' => '72', - 'type' => '10592' - } - }, - 'Name' => 'struct mod_auth_st_int', - 'Size' => '104', - 'Type' => 'Struct' - }, - '10431' => { - 'BaseType' => '10262', - 'Name' => 'struct mod_auth_st_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '10437' => { - 'BaseType' => '799', - 'Name' => 'uint16_t[32]', - 'Size' => '64', - 'Type' => 'Array' - }, - '10453' => { - 'BaseType' => '8865', - 'Name' => 'anon-struct-gnutls_int.h-948[32]', - 'Size' => '768', - 'Type' => 'Array' - }, - '10469' => { - 'BaseType' => '8914', - 'Name' => 'anon-struct-gnutls_int.h-954[32]', - 'Size' => '768', - 'Type' => 'Array' - }, - '1047674' => { - 'BaseType' => '111797', - 'Name' => 'gnutls_x509_crt_t const', - 'Size' => '8', - 'Type' => 'Const' - }, - '10485' => { - 'BaseType' => '123', - 'Name' => 'unsigned char[36]', - 'Size' => '36', - 'Type' => 'Array' - }, - '105' => { - 'BaseType' => '118', - 'Name' => 'char const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '10501' => { - 'Header' => 'gnutls_int.h', - 'Line' => '1002', - 'Memb' => { - '0' => { - 'name' => 'record_buffer', - 'offset' => '0', - 'type' => '6164' - }, - '1' => { - 'name' => 'handshake_hash_buffer_prev_len', - 'offset' => '32', - 'type' => '70' - }, - '10' => { - 'name' => 'may_not_write', - 'offset' => '86', - 'type' => '7357' - }, - '11' => { - 'name' => 'read_eof', - 'offset' => '87', - 'type' => '7357' - }, - '12' => { - 'name' => 'last_alert', - 'offset' => '88', - 'type' => '70' - }, - '13' => { - 'name' => 'last_handshake_in', - 'offset' => '92', - 'type' => '70' - }, - '14' => { - 'name' => 'last_handshake_out', - 'offset' => '96', - 'type' => '70' - }, - '15' => { - 'name' => 'priorities', - 'offset' => '100', - 'type' => '2817' - }, - '16' => { - 'name' => 'resumed', - 'offset' => '1188', - 'type' => '7357' - }, - '17' => { - 'name' => 'resumption_requested', - 'offset' => '1189', - 'type' => '7357' - }, - '18' => { - 'name' => 'resumed_security_parameters', - 'offset' => '1192', - 'type' => '8445' - }, - '19' => { - 'name' => 'handshake_send_buffer', - 'offset' => '1416', - 'type' => '6164' - }, - '2' => { - 'name' => 'handshake_hash_buffer_client_kx_len', - 'offset' => '36', - 'type' => '130' - }, - '20' => { - 'name' => 'handshake_recv_buffer', - 'offset' => '1448', - 'type' => '10246' - }, - '21' => { - 'name' => 'handshake_recv_buffer_size', - 'offset' => '1880', - 'type' => '70' - }, - '22' => { - 'name' => 'record_recv_buffer', - 'offset' => '1888', - 'type' => '6164' - }, - '23' => { - 'name' => 'record_send_buffer', - 'offset' => '1920', - 'type' => '6164' - }, - '24' => { - 'name' => 'record_send_buffer_user_size', - 'offset' => '1952', - 'type' => '52' - }, - '25' => { - 'name' => 'record_flush_mode', - 'offset' => '1960', - 'type' => '4441' - }, - '26' => { - 'name' => 'record_presend_buffer', - 'offset' => '1968', - 'type' => '5823' - }, - '27' => { - 'name' => 'expire_time', - 'offset' => '2000', - 'type' => '130' - }, - '28' => { - 'name' => 'auth_struct', - 'offset' => '2008', - 'type' => '10431' - }, - '29' => { - 'name' => 'adv_version_major', - 'offset' => '2016', - 'type' => '788' - }, - '3' => { - 'name' => 'handshake_hash_buffer', - 'offset' => '40', - 'type' => '5823' - }, - '30' => { - 'name' => 'adv_version_minor', - 'offset' => '2017', - 'type' => '788' - }, - '31' => { - 'name' => 'send_cert_req', - 'offset' => '2020', - 'type' => '130' - }, - '32' => { - 'name' => 'max_handshake_data_buffer_size', - 'offset' => '2024', - 'type' => '52' - }, - '33' => { - 'name' => 'pull_timeout_func', - 'offset' => '2032', - 'type' => '3834' - }, - '34' => { - 'name' => 'pull_func', - 'offset' => '2040', - 'type' => '3748' - }, - '35' => { - 'name' => 'push_func', - 'offset' => '2048', - 'type' => '3791' - }, - '36' => { - 'name' => 'vec_push_func', - 'offset' => '2056', - 'type' => '3872' - }, - '37' => { - 'name' => 'errno_func', - 'offset' => '2064', - 'type' => '3926' - }, - '38' => { - 'name' => 'transport_recv_ptr', - 'offset' => '2072', - 'type' => '2660' - }, - '39' => { - 'name' => 'transport_send_ptr', - 'offset' => '2080', - 'type' => '2660' - }, - '4' => { - 'name' => 'resumable', - 'offset' => '72', - 'type' => '7357' - }, - '40' => { - 'name' => 'db_store_func', - 'offset' => '2088', - 'type' => '3415' - }, - '41' => { - 'name' => 'db_retrieve_func', - 'offset' => '2096', - 'type' => '3496' - }, - '42' => { - 'name' => 'db_remove_func', - 'offset' => '2104', - 'type' => '3458' - }, - '43' => { - 'name' => 'db_ptr', - 'offset' => '2112', - 'type' => '184' - }, - '44' => { - 'name' => 'user_hello_func', - 'offset' => '2120', - 'type' => '3598' - }, - '45' => { - 'name' => 'h_hook', - 'offset' => '2128', - 'type' => '3534' - }, - '46' => { - 'name' => 'h_type', - 'offset' => '2136', - 'type' => '130' - }, - '47' => { - 'name' => 'h_post', - 'offset' => '2140', - 'type' => '236' - }, - '48' => { - 'name' => 'selected_cert_list', - 'offset' => '2144', - 'type' => '4156' - }, - '49' => { - 'name' => 'selected_cert_list_length', - 'offset' => '2152', - 'type' => '236' - }, - '5' => { - 'name' => 'ticket_sent', - 'offset' => '73', - 'type' => '7357' - }, - '50' => { - 'name' => 'selected_key', - 'offset' => '2160', - 'type' => '3654' - }, - '51' => { - 'name' => 'selected_need_free', - 'offset' => '2168', - 'type' => '7357' - }, - '52' => { - 'name' => 'extensions_sent', - 'offset' => '2170', - 'type' => '10437' - }, - '53' => { - 'name' => 'extensions_sent_size', - 'offset' => '2234', - 'type' => '799' - }, - '54' => { - 'name' => 'pgp_fingerprint', - 'offset' => '2236', - 'type' => '7357' - }, - '55' => { - 'name' => 'default_record_version', - 'offset' => '2237', - 'type' => '7034' - }, - '56' => { - 'name' => 'default_hello_version', - 'offset' => '2239', - 'type' => '7034' - }, - '57' => { - 'name' => 'user_ptr', - 'offset' => '2248', - 'type' => '184' - }, - '58' => { - 'name' => 'enable_private', - 'offset' => '2256', - 'type' => '7357' - }, - '59' => { - 'name' => 'direction', - 'offset' => '2257', - 'type' => '7357' - }, - '6' => { - 'name' => 'handshake_final_state', - 'offset' => '76', - 'type' => '5720' - }, - '60' => { - 'name' => 'openpgp_recv_key_func', - 'offset' => '2264', - 'type' => '4043' - }, - '61' => { - 'name' => 'ignore_rdn_sequence', - 'offset' => '2272', - 'type' => '7357' - }, - '62' => { - 'name' => 'rsa_pms_version', - 'offset' => '2273', - 'type' => '7034' - }, - '63' => { - 'name' => 'params', - 'offset' => '2280', - 'type' => '8623' - }, - '64' => { - 'name' => 'errnum', - 'offset' => '2296', - 'type' => '70' - }, - '65' => { - 'name' => 'srp_prime_bits', - 'offset' => '2300', - 'type' => '799' - }, - '66' => { - 'name' => 'initial_negotiation_completed', - 'offset' => '2302', - 'type' => '7357' - }, - '67' => { - 'name' => 'extension_int_data', - 'offset' => '2304', - 'type' => '10453' - }, - '68' => { - 'name' => 'resumed_extension_int_data', - 'offset' => '3072', - 'type' => '10469' - }, - '69' => { - 'name' => 'transport', - 'offset' => '3840', - 'type' => '4401' - }, - '7' => { - 'name' => 'handshake_state', - 'offset' => '80', - 'type' => '5720' - }, - '70' => { - 'name' => 'dtls', - 'offset' => '3848', - 'type' => '8853' - }, - '71' => { - 'name' => 'handshake_large_loops', - 'offset' => '3968', - 'type' => '130' - }, - '72' => { - 'name' => 'handshake_in_progress', - 'offset' => '3972', - 'type' => '7357' - }, - '73' => { - 'name' => 'premaster_set', - 'offset' => '3973', - 'type' => '7357' - }, - '74' => { - 'name' => 'cb_tls_unique_len', - 'offset' => '3976', - 'type' => '130' - }, - '75' => { - 'name' => 'cb_tls_unique', - 'offset' => '3980', - 'type' => '10485' - }, - '76' => { - 'name' => 'handshake_endtime', - 'offset' => '4016', - 'type' => '225' - }, - '77' => { - 'name' => 'handshake_timeout_ms', - 'offset' => '4024', - 'type' => '130' - }, - '78' => { - 'name' => 'record_timeout_ms', - 'offset' => '4028', - 'type' => '130' - }, - '79' => { - 'name' => 'hb_local_data', - 'offset' => '4032', - 'type' => '5823' - }, - '8' => { - 'name' => 'invalid_connection', - 'offset' => '84', - 'type' => '7357' - }, - '80' => { - 'name' => 'hb_remote_data', - 'offset' => '4064', - 'type' => '5823' - }, - '81' => { - 'name' => 'hb_ping_start', - 'offset' => '4096', - 'type' => '247' - }, - '82' => { - 'name' => 'hb_ping_sent', - 'offset' => '4112', - 'type' => '247' - }, - '83' => { - 'name' => 'hb_actual_retrans_timeout_ms', - 'offset' => '4128', - 'type' => '130' - }, - '84' => { - 'name' => 'hb_retrans_timeout_ms', - 'offset' => '4132', - 'type' => '130' - }, - '85' => { - 'name' => 'hb_total_timeout_ms', - 'offset' => '4136', - 'type' => '130' - }, - '86' => { - 'name' => 'ocsp_check_ok', - 'offset' => '4140', - 'type' => '7357' - }, - '87' => { - 'name' => 'hb_state', - 'offset' => '4144', - 'type' => '5766' - }, - '88' => { - 'name' => 'recv_state', - 'offset' => '4148', - 'type' => '5806' - }, - '89' => { - 'name' => 'sc_random_set', - 'offset' => '4152', - 'type' => '7357' - }, - '9' => { - 'name' => 'may_not_read', - 'offset' => '85', - 'type' => '7357' - }, - '90' => { - 'name' => 'no_replay_protection', - 'offset' => '4153', - 'type' => '7357' - }, - '91' => { - 'name' => 'try_ext_master_secret', - 'offset' => '4154', - 'type' => '7357' - } - }, - 'Name' => 'struct internals_st', - 'Size' => '4160', - 'Type' => 'Struct' - }, - '10513' => { - 'BaseType' => '10529', - 'Name' => 'record_parameters_st*[16]', - 'Size' => '128', - 'Type' => 'Array' - }, - '10529' => { - 'BaseType' => '6690', - 'Name' => 'record_parameters_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '10555' => { - 'BaseType' => '5823', - 'Name' => 'gnutls_buffer_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '10561' => { - 'Name' => 'int(*)(gnutls_session_t, gnutls_buffer_st*)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '10555' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '10592' => { - 'Name' => 'int(*)(gnutls_session_t, uint8_t*, size_t)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '5817' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1062767' => { - 'BaseType' => '1062778', - 'Header' => 'pkcs12.h', - 'Line' => '40', - 'Name' => 'gnutls_pkcs12_bag_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1062778' => { - 'BaseType' => '1062784', - 'Name' => 'struct gnutls_pkcs12_bag_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1062784' => { - 'Header' => 'x509_int.h', - 'Line' => '326', - 'Memb' => { - '0' => { - 'name' => 'element', - 'offset' => '0', - 'type' => '1062968' - }, - '1' => { - 'name' => 'bag_elements', - 'offset' => '1536', - 'type' => '70' - } - }, - 'Name' => 'struct gnutls_pkcs12_bag_int', - 'Size' => '1544', - 'Type' => 'Struct' - }, - '1062826' => { - 'Header' => 'pkcs12.h', - 'Line' => '97', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_BAG_EMPTY', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_BAG_PKCS8_ENCRYPTED_KEY', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_BAG_PKCS8_KEY', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_BAG_CERTIFICATE', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_BAG_CRL', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_BAG_SECRET', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_BAG_ENCRYPTED', - 'value' => '10' - }, - '7' => { - 'name' => 'GNUTLS_BAG_UNKNOWN', - 'value' => '20' - } - }, - 'Name' => 'enum gnutls_pkcs12_bag_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1062891' => { - 'BaseType' => '1062826', - 'Header' => 'pkcs12.h', - 'Line' => '110', - 'Name' => 'gnutls_pkcs12_bag_type_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1062902' => { - 'Header' => 'x509_int.h', - 'Line' => '319', - 'Memb' => { - '0' => { - 'name' => 'data', - 'offset' => '0', - 'type' => '3192' - }, - '1' => { - 'name' => 'type', - 'offset' => '16', - 'type' => '1062891' - }, - '2' => { - 'name' => 'local_key_id', - 'offset' => '24', - 'type' => '3192' - }, - '3' => { - 'name' => 'friendly_name', - 'offset' => '40', - 'type' => '208' - } - }, - 'Name' => 'struct bag_element', - 'Size' => '48', - 'Type' => 'Struct' - }, - '1062968' => { - 'BaseType' => '1062902', - 'Name' => 'struct bag_element[32]', - 'Size' => '1536', - 'Type' => 'Array' - }, - '1064648' => { - 'BaseType' => '554659', - 'Name' => 'gnutls_pkcs12_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '107847' => { - 'BaseType' => '111', - 'Name' => 'char[32]', - 'Size' => '32', - 'Type' => 'Array' - }, - '1081968' => { - 'BaseType' => '1062767', - 'Name' => 'gnutls_pkcs12_bag_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1094060' => { - 'BaseType' => '1094072', - 'Header' => 'x509.h', - 'Line' => '757', - 'Name' => 'gnutls_pkcs7_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1094072' => { - 'BaseType' => '1094078', - 'Name' => 'struct gnutls_pkcs7_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1094078' => { - 'Header' => 'x509_int.h', - 'Line' => '83', - 'Memb' => { - '0' => { - 'name' => 'pkcs7', - 'offset' => '0', - 'type' => '117419' - }, - '1' => { - 'name' => 'expanded', - 'offset' => '8', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_pkcs7_int', - 'Size' => '16', - 'Type' => 'Struct' - }, - '109429' => { - 'Header' => 'gnutls.h', - 'Line' => '205', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PARAMS_RSA_EXPORT', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_PARAMS_DH', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_PARAMS_ECDH', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_params_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '10964' => { - 'BaseType' => '3240', - 'Name' => 'gnutls_range_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '109671' => { - 'Header' => 'gnutls.h', - 'Line' => '293', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_DIG_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_DIG_NULL', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_DIG_MD5', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_DIG_SHA1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_DIG_RMD160', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_DIG_MD2', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_DIG_SHA256', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_DIG_SHA384', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_DIG_SHA512', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_DIG_SHA224', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_digest_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1096973' => { - 'BaseType' => '1094060', - 'Name' => 'gnutls_pkcs7_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '110737' => { - 'BaseType' => '110749', - 'Header' => 'gnutls.h', - 'Line' => '779', - 'Name' => 'gnutls_rsa_params_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '110749' => { - 'BaseType' => '110755', - 'Name' => 'struct gnutls_x509_privkey_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '110755' => { - 'Header' => 'x509_int.h', - 'Line' => '95', - 'Memb' => { - '0' => { - 'name' => 'params', - 'offset' => '0', - 'type' => '5512' - }, - '1' => { - 'name' => 'pk_algorithm', - 'offset' => '144', - 'type' => '2348' - }, - '2' => { - 'name' => 'expanded', - 'offset' => '148', - 'type' => '130' - }, - '3' => { - 'name' => 'key', - 'offset' => '152', - 'type' => '117419' - }, - '4' => { - 'name' => 'pin', - 'offset' => '160', - 'type' => '116316' - } - }, - 'Name' => 'struct gnutls_x509_privkey_int', - 'Size' => '176', - 'Type' => 'Struct' - }, - '111' => { - 'Name' => 'char', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '111215' => { - 'Header' => 'gnutls.h', - 'Line' => '792', - 'Memb' => { - '0' => { - 'name' => 'dh', - 'offset' => '0', - 'type' => '2759' - }, - '1' => { - 'name' => 'rsa_export', - 'offset' => '0', - 'type' => '110737' - } - }, - 'Name' => 'union params', - 'Size' => '8', - 'Type' => 'Union' - }, - '111252' => { - 'Header' => 'gnutls.h', - 'Line' => '790', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '109429' - }, - '1' => { - 'name' => 'params', - 'offset' => '8', - 'type' => '111215' - }, - '2' => { - 'name' => 'deinit', - 'offset' => '16', - 'type' => '70' - } - }, - 'Name' => 'struct gnutls_params_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '111305' => { - 'BaseType' => '111252', - 'Header' => 'gnutls.h', - 'Line' => '797', - 'Name' => 'gnutls_params_st', - 'Size' => '24', - 'Type' => 'Typedef' - }, - '111317' => { - 'BaseType' => '111329', - 'Header' => 'gnutls.h', - 'Line' => '799', - 'Name' => 'gnutls_params_function', - 'Type' => 'Typedef' - }, - '111329' => { - 'Name' => 'int()(gnutls_session_t, gnutls_params_type_t, gnutls_params_st*)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '109429' - }, - '2' => { - 'type' => '111354' - } - }, - 'Return' => '70', - 'Type' => 'Func' - }, - '111354' => { - 'BaseType' => '111305', - 'Name' => 'gnutls_params_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '111724' => { - 'Name' => 'int()(gnutls_session_t)', - 'Param' => { - '0' => { - 'type' => '2672' - } - }, - 'Return' => '70', - 'Type' => 'Func' - }, - '111762' => { - 'BaseType' => '3654', - 'Header' => 'gnutls.h', - 'Line' => '1307', - 'Name' => 'gnutls_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '111785' => { - 'BaseType' => '110749', - 'Header' => 'gnutls.h', - 'Line' => '1310', - 'Name' => 'gnutls_x509_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '111797' => { - 'BaseType' => '111809', - 'Header' => 'gnutls.h', - 'Line' => '1316', - 'Name' => 'gnutls_x509_crt_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '111809' => { - 'BaseType' => '111815', - 'Name' => 'struct gnutls_x509_crt_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '111815' => { - 'Header' => 'x509_int.h', - 'Line' => '64', - 'Memb' => { - '0' => { - 'name' => 'cert', - 'offset' => '0', - 'type' => '117419' - }, - '1' => { - 'name' => 'use_extensions', - 'offset' => '8', - 'type' => '70' - }, - '2' => { - 'name' => 'expanded', - 'offset' => '12', - 'type' => '70' - }, - '3' => { - 'name' => 'raw_dn', - 'offset' => '16', - 'type' => '3192' - }, - '4' => { - 'name' => 'raw_issuer_dn', - 'offset' => '32', - 'type' => '3192' - }, - '5' => { - 'name' => 'raw_spki', - 'offset' => '48', - 'type' => '3192' - }, - '6' => { - 'name' => 'der', - 'offset' => '64', - 'type' => '3192' - }, - '7' => { - 'name' => 'pin', - 'offset' => '80', - 'type' => '116316' - } - }, - 'Name' => 'struct gnutls_x509_crt_int', - 'Size' => '96', - 'Type' => 'Struct' - }, - '111924' => { - 'BaseType' => '111936', - 'Header' => 'gnutls.h', - 'Line' => '1322', - 'Name' => 'gnutls_openpgp_keyring_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '111936' => { - 'BaseType' => '111942', - 'Name' => 'struct gnutls_openpgp_keyring_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '111942' => { - 'Header' => 'openpgp_int.h', - 'Line' => '54', - 'Memb' => { - '0' => { - 'name' => 'db', - 'offset' => '0', - 'type' => '120421' - } - }, - 'Name' => 'struct gnutls_openpgp_keyring_int', - 'Size' => '8', - 'Type' => 'Struct' - }, - '111966' => { - 'BaseType' => '111978', - 'Header' => 'gnutls.h', - 'Line' => '1329', - 'Name' => 'gnutls_certificate_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '111978' => { - 'BaseType' => '111984', - 'Name' => 'struct gnutls_certificate_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '111984' => { - 'Header' => 'cert.h', - 'Line' => '42', - 'Memb' => { - '0' => { - 'name' => 'dh_params', - 'offset' => '0', - 'type' => '2759' - }, - '1' => { - 'name' => 'params_func', - 'offset' => '8', - 'type' => '120581' - }, - '10' => { - 'name' => 'get_cert_callback', - 'offset' => '72', - 'type' => '120593' - }, - '11' => { - 'name' => 'get_cert_callback2', - 'offset' => '80', - 'type' => '120599' - }, - '12' => { - 'name' => 'verify_callback', - 'offset' => '88', - 'type' => '120605' - }, - '13' => { - 'name' => 'pin', - 'offset' => '96', - 'type' => '116316' - }, - '14' => { - 'name' => 'pin_tmp', - 'offset' => '112', - 'type' => '107847' - }, - '15' => { - 'name' => 'ocsp_func', - 'offset' => '144', - 'type' => '112213' - }, - '16' => { - 'name' => 'ocsp_func_ptr', - 'offset' => '152', - 'type' => '184' - }, - '17' => { - 'name' => 'ocsp_response_file', - 'offset' => '160', - 'type' => '208' - }, - '2' => { - 'name' => 'certs', - 'offset' => '16', - 'type' => '120587' - }, - '3' => { - 'name' => 'ncerts', - 'offset' => '24', - 'type' => '130' - }, - '4' => { - 'name' => 'pkey', - 'offset' => '32', - 'type' => '113534' - }, - '5' => { - 'name' => 'keyring', - 'offset' => '40', - 'type' => '111924' - }, - '6' => { - 'name' => 'tlist', - 'offset' => '48', - 'type' => '113318' - }, - '7' => { - 'name' => 'verify_flags', - 'offset' => '56', - 'type' => '130' - }, - '8' => { - 'name' => 'verify_depth', - 'offset' => '60', - 'type' => '130' - }, - '9' => { - 'name' => 'verify_bits', - 'offset' => '64', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_certificate_credentials_st', - 'Size' => '168', - 'Type' => 'Struct' - }, - '112213' => { - 'BaseType' => '112225', - 'Header' => 'gnutls.h', - 'Line' => '1494', - 'Name' => 'gnutls_status_request_ocsp_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '112225' => { - 'Name' => 'int(*)(gnutls_session_t, void*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '184' - }, - '2' => { - 'type' => '3665' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '112649' => { - 'BaseType' => '112661', - 'Header' => 'gnutls.h', - 'Line' => '1890', - 'Name' => 'gnutls_openpgp_crt_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '112661' => { - 'BaseType' => '112667', - 'Name' => 'struct gnutls_openpgp_crt_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '112667' => { - 'Header' => 'openpgp_int.h', - 'Line' => '40', - 'Memb' => { - '0' => { - 'name' => 'knode', - 'offset' => '0', - 'type' => '120399' - }, - '1' => { - 'name' => 'preferred_keyid', - 'offset' => '8', - 'type' => '120443' - }, - '2' => { - 'name' => 'preferred_set', - 'offset' => '16', - 'type' => '70' - } - }, - 'Name' => 'struct gnutls_openpgp_crt_int', - 'Size' => '24', - 'Type' => 'Struct' - }, - '112716' => { - 'BaseType' => '112728', - 'Header' => 'gnutls.h', - 'Line' => '1893', - 'Name' => 'gnutls_openpgp_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '112728' => { - 'BaseType' => '112734', - 'Name' => 'struct gnutls_openpgp_privkey_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '112734' => { - 'Header' => 'openpgp_int.h', - 'Line' => '47', - 'Memb' => { - '0' => { - 'name' => 'knode', - 'offset' => '0', - 'type' => '120399' - }, - '1' => { - 'name' => 'preferred_keyid', - 'offset' => '8', - 'type' => '120443' - }, - '2' => { - 'name' => 'preferred_set', - 'offset' => '16', - 'type' => '70' - } - }, - 'Name' => 'struct gnutls_openpgp_privkey_int', - 'Size' => '24', - 'Type' => 'Struct' - }, - '112783' => { - 'BaseType' => '112795', - 'Header' => 'gnutls.h', - 'Line' => '1896', - 'Name' => 'gnutls_pkcs11_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '112795' => { - 'BaseType' => '112801', - 'Name' => 'struct gnutls_pkcs11_privkey_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '112801' => { - 'Line' => '64', - 'Memb' => { - '0' => { - 'name' => 'pk_algorithm', - 'offset' => '0', - 'type' => '2348' - }, - '1' => { - 'name' => 'flags', - 'offset' => '4', - 'type' => '130' - }, - '2' => { - 'name' => 'uinfo', - 'offset' => '8', - 'type' => '637806' - }, - '3' => { - 'name' => 'url', - 'offset' => '16', - 'type' => '208' - }, - '4' => { - 'name' => 'sinfo', - 'offset' => '24', - 'type' => '761053' - }, - '5' => { - 'name' => 'ref', - 'offset' => '376', - 'type' => '757625' - }, - '6' => { - 'name' => 'reauth', - 'offset' => '384', - 'type' => '130' - }, - '7' => { - 'name' => 'pin', - 'offset' => '392', - 'type' => '116316' - } - }, - 'Name' => 'struct gnutls_pkcs11_privkey_st', - 'Size' => '408', - 'Source' => 'pkcs11_privkey.c', - 'Type' => 'Struct' - }, - '112844' => { - 'Header' => 'gnutls.h', - 'Line' => '1912', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PRIVKEY_X509', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PRIVKEY_OPENPGP', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PRIVKEY_PKCS11', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PRIVKEY_EXT', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_privkey_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '112856' => { - 'Header' => 'gnutls.h', - 'Line' => '1918', - 'Memb' => { - '0' => { - 'name' => 'x509', - 'offset' => '0', - 'type' => '112890' - }, - '1' => { - 'name' => 'pgp', - 'offset' => '0', - 'type' => '112649' - } - }, - 'Name' => 'anon-union-gnutls.h-1918', - 'Size' => '8', - 'Type' => 'Union' - }, - '112890' => { - 'BaseType' => '111797', - 'Name' => 'gnutls_x509_crt_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '112896' => { - 'Header' => 'gnutls.h', - 'Line' => '1924', - 'Memb' => { - '0' => { - 'name' => 'x509', - 'offset' => '0', - 'type' => '111785' - }, - '1' => { - 'name' => 'pgp', - 'offset' => '0', - 'type' => '112716' - }, - '2' => { - 'name' => 'pkcs11', - 'offset' => '0', - 'type' => '112783' - } - }, - 'Name' => 'anon-union-gnutls.h-1924', - 'Size' => '8', - 'Type' => 'Union' - }, - '1129064' => { - 'BaseType' => '1695', - 'Name' => 'gnutls_cipher_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '112942' => { - 'Header' => 'gnutls.h', - 'Line' => '1914', - 'Memb' => { - '0' => { - 'name' => 'cert_type', - 'offset' => '0', - 'type' => '2292' - }, - '1' => { - 'name' => 'key_type', - 'offset' => '4', - 'type' => '112844' - }, - '2' => { - 'name' => 'cert', - 'offset' => '8', - 'type' => '112856' - }, - '3' => { - 'name' => 'ncerts', - 'offset' => '16', - 'type' => '130' - }, - '4' => { - 'name' => 'key', - 'offset' => '24', - 'type' => '112896' - }, - '5' => { - 'name' => 'deinit_all', - 'offset' => '32', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_retr2_st', - 'Size' => '40', - 'Type' => 'Struct' - }, - '113034' => { - 'BaseType' => '112942', - 'Header' => 'gnutls.h', - 'Line' => '1931', - 'Name' => 'gnutls_retr2_st', - 'Size' => '40', - 'Type' => 'Typedef' - }, - '113046' => { - 'BaseType' => '113058', - 'Header' => 'gnutls.h', - 'Line' => '1965', - 'Name' => 'gnutls_certificate_retrieve_function', - 'Type' => 'Typedef' - }, - '113058' => { - 'Name' => 'int()(gnutls_session_t, gnutls_datum_t const*, int, gnutls_pk_algorithm_t const*, int, gnutls_retr2_st*)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '3587' - }, - '2' => { - 'type' => '70' - }, - '3' => { - 'type' => '113098' - }, - '4' => { - 'type' => '70' - }, - '5' => { - 'type' => '113109' - } - }, - 'Return' => '70', - 'Type' => 'Func' - }, - '113098' => { - 'BaseType' => '113104', - 'Name' => 'gnutls_pk_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '113104' => { - 'BaseType' => '2348', - 'Name' => 'gnutls_pk_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '113109' => { - 'BaseType' => '113034', - 'Name' => 'gnutls_retr2_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '113115' => { - 'BaseType' => '111724', - 'Header' => 'gnutls.h', - 'Line' => '1984', - 'Name' => 'gnutls_certificate_verify_function', - 'Type' => 'Typedef' - }, - '113127' => { - 'BaseType' => '113139', - 'Header' => 'gnutls.h', - 'Line' => '2223', - 'Name' => 'gnutls_pin_callback_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '113139' => { - 'Name' => 'int(*)(void*, int, char const*, char const*, unsigned int, char*, size_t)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '70' - }, - '2' => { - 'type' => '105' - }, - '3' => { - 'type' => '105' - }, - '4' => { - 'type' => '130' - }, - '5' => { - 'type' => '208' - }, - '6' => { - 'type' => '52' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '113318' => { - 'BaseType' => '113330', - 'Header' => 'x509.h', - 'Line' => '1255', - 'Name' => 'gnutls_x509_trust_list_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '113330' => { - 'BaseType' => '113336', - 'Name' => 'struct gnutls_x509_trust_list_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '113336' => { - 'Header' => 'verify-high.h', - 'Line' => '26', - 'Memb' => { - '0' => { - 'name' => 'size', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'name' => 'node', - 'offset' => '8', - 'type' => '378710' - }, - '2' => { - 'name' => 'x509_rdn_sequence', - 'offset' => '16', - 'type' => '3192' - }, - '3' => { - 'name' => 'blacklisted', - 'offset' => '32', - 'type' => '112890' - }, - '4' => { - 'name' => 'blacklisted_size', - 'offset' => '40', - 'type' => '130' - }, - '5' => { - 'name' => 'keep_certs', - 'offset' => '48', - 'type' => '112890' - }, - '6' => { - 'name' => 'keep_certs_size', - 'offset' => '56', - 'type' => '130' - }, - '7' => { - 'name' => 'pkcs11_token', - 'offset' => '64', - 'type' => '208' - } - }, - 'Name' => 'struct gnutls_x509_trust_list_st', - 'Size' => '72', - 'Type' => 'Struct' - }, - '1133750' => { - 'BaseType' => '123', - 'Name' => 'unsigned char[2]', - 'Size' => '2', - 'Type' => 'Array' - }, - '113454' => { - 'BaseType' => '113466', - 'Header' => 'abstract.h', - 'Line' => '504', - 'Name' => 'gnutls_certificate_retrieve_function2', - 'Type' => 'Typedef' - }, - '113466' => { - 'Name' => 'int()(gnutls_session_t, gnutls_datum_t const*, int, gnutls_pk_algorithm_t const*, int, gnutls_pcert_st**, unsigned int*, gnutls_privkey_t*)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '3587' - }, - '2' => { - 'type' => '70' - }, - '3' => { - 'type' => '113098' - }, - '4' => { - 'type' => '70' - }, - '5' => { - 'type' => '113516' - }, - '6' => { - 'type' => '17947' - }, - '7' => { - 'type' => '113534' - } - }, - 'Return' => '70', - 'Type' => 'Func' - }, - '113516' => { - 'BaseType' => '4156', - 'Name' => 'gnutls_pcert_st**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '113534' => { - 'BaseType' => '111762', - 'Name' => 'gnutls_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '116316' => { - 'Header' => 'gnutls_int.h', - 'Line' => '424', - 'Memb' => { - '0' => { - 'name' => 'cb', - 'offset' => '0', - 'type' => '113127' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '184' - } - }, - 'Name' => 'struct pin_info_st', - 'Size' => '16', - 'Type' => 'Struct' - }, - '1165937' => { - 'BaseType' => '1165949', - 'Header' => 'x509.h', - 'Line' => '1312', - 'Name' => 'gnutls_verify_output_function', - 'Type' => 'Typedef' - }, - '1165949' => { - 'Name' => 'int()(gnutls_x509_crt_t, gnutls_x509_crt_t, gnutls_x509_crl_t, unsigned int)', - 'Param' => { - '0' => { - 'type' => '111797' - }, - '1' => { - 'type' => '111797' - }, - '2' => { - 'type' => '545129' - }, - '3' => { - 'type' => '130' - } - }, - 'Return' => '70', - 'Type' => 'Func' - }, - '1170871' => { - 'BaseType' => '1047674', - 'Name' => 'gnutls_x509_crt_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '117403' => { - 'BaseType' => '117414', - 'Header' => 'libtasn1.h', - 'Line' => '128', - 'Name' => 'asn1_node_st', - 'Type' => 'Typedef' - }, - '117414' => { - 'Name' => 'struct asn1_node_st', - 'Type' => 'Struct' - }, - '117419' => { - 'BaseType' => '117430', - 'Header' => 'libtasn1.h', - 'Line' => '130', - 'Name' => 'asn1_node', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '117430' => { - 'BaseType' => '117403', - 'Name' => 'asn1_node_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1178041' => { - 'BaseType' => '1165937', - 'Name' => 'gnutls_verify_output_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '118' => { - 'BaseType' => '111', - 'Name' => 'char const', - 'Size' => '1', - 'Type' => 'Const' - }, - '1180076' => { - 'BaseType' => '942559', - 'Name' => 'gnutls_x509_crl_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1185429' => { - 'Header' => 'x509.h', - 'Line' => '600', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '3192' - }, - '1' => { - 'name' => 'value', - 'offset' => '16', - 'type' => '3192' - }, - '2' => { - 'name' => 'value_tag', - 'offset' => '32', - 'type' => '63' - } - }, - 'Name' => 'struct gnutls_x509_ava_st', - 'Size' => '40', - 'Type' => 'Struct' - }, - '1185482' => { - 'BaseType' => '1185429', - 'Header' => 'x509.h', - 'Line' => '604', - 'Name' => 'gnutls_x509_ava_st', - 'Size' => '40', - 'Type' => 'Typedef' - }, - '1201578' => { - 'BaseType' => '1019035', - 'Name' => 'struct gnutls_x509_policy_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '120399' => { - 'BaseType' => '120410', - 'Header' => 'opencdk.h', - 'Line' => '76', - 'Name' => 'cdk_kbnode_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '120410' => { - 'BaseType' => '120416', - 'Name' => 'struct cdk_kbnode_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '120416' => { - 'Header' => 'packet.h', - 'Line' => '26', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '120410' - }, - '1' => { - 'name' => 'pkt', - 'offset' => '8', - 'type' => '1980536' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'is_deleted', - 'offset' => '16', - 'type' => '130' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'is_cloned', - 'offset' => '16', - 'type' => '130' - } - }, - 'Name' => 'struct cdk_kbnode_s', - 'Size' => '24', - 'Type' => 'Struct' - }, - '120421' => { - 'BaseType' => '120432', - 'Header' => 'opencdk.h', - 'Line' => '80', - 'Name' => 'cdk_keydb_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '120432' => { - 'BaseType' => '120438', - 'Name' => 'struct cdk_keydb_hd_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '120438' => { - 'Header' => 'keydb.h', - 'Line' => '56', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '70' - }, - '1' => { - 'name' => 'fp_ref', - 'offset' => '4', - 'type' => '70' - }, - '2' => { - 'name' => 'fp', - 'offset' => '8', - 'type' => '1978031' - }, - '3' => { - 'name' => 'name', - 'offset' => '16', - 'type' => '208' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'secret', - 'offset' => '24', - 'type' => '130' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'isopen', - 'offset' => '24', - 'type' => '130' - }, - '6' => { - 'name' => 'stats', - 'offset' => '32', - 'type' => '2109482' - } - }, - 'Name' => 'struct cdk_keydb_hd_s', - 'Size' => '40', - 'Type' => 'Struct' - }, - '120443' => { - 'BaseType' => '788', - 'Name' => 'uint8_t[8]', - 'Size' => '8', - 'Type' => 'Array' - }, - '120459' => { - 'Header' => 'gnutls_str_array.h', - 'Line' => '33', - 'Memb' => { - '0' => { - 'name' => 'str', - 'offset' => '0', - 'type' => '208' - }, - '1' => { - 'name' => 'len', - 'offset' => '8', - 'type' => '130' - }, - '2' => { - 'name' => 'next', - 'offset' => '16', - 'type' => '120508' - } - }, - 'Name' => 'struct gnutls_str_array_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '120508' => { - 'BaseType' => '120459', - 'Name' => 'struct gnutls_str_array_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '120514' => { - 'BaseType' => '120508', - 'Header' => 'gnutls_str_array.h', - 'Line' => '37', - 'Name' => 'gnutls_str_array_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1205392' => { - 'BaseType' => '1185482', - 'Name' => 'gnutls_x509_ava_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '120570' => { - 'Header' => 'cert.h', - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'cert_list', - 'offset' => '0', - 'type' => '4156' - }, - '1' => { - 'name' => 'cert_list_length', - 'offset' => '8', - 'type' => '130' - }, - '2' => { - 'name' => 'names', - 'offset' => '16', - 'type' => '120514' - } - }, - 'Name' => 'struct certs_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '120581' => { - 'BaseType' => '111317', - 'Name' => 'gnutls_params_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '120587' => { - 'BaseType' => '120570', - 'Name' => 'certs_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '120593' => { - 'BaseType' => '113046', - 'Name' => 'gnutls_certificate_retrieve_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '120599' => { - 'BaseType' => '113454', - 'Name' => 'gnutls_certificate_retrieve_function2*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '120605' => { - 'BaseType' => '113115', - 'Name' => 'gnutls_certificate_verify_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1207297' => { - 'BaseType' => '109671', - 'Name' => 'gnutls_digest_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '123' => { - 'Name' => 'unsigned char', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '1236541' => { - 'BaseType' => '1236547', - 'Name' => 'struct gnutls_x509_policy_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1236547' => { - 'BaseType' => '1019035', - 'Name' => 'struct gnutls_x509_policy_st const', - 'Size' => '208', - 'Type' => 'Const' - }, - '1240096' => { - 'BaseType' => '1020575', - 'Header' => 'x509_int.h', - 'Line' => '443', - 'Name' => 'name_constraints_node_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '1240667' => { - 'BaseType' => '1240096', - 'Name' => 'name_constraints_node_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1242914' => { - 'BaseType' => '1018880', - 'Name' => 'gnutls_x509_name_constraints_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '12472' => { - 'BaseType' => '12478', - 'Name' => 'gnutls_range_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '12478' => { - 'BaseType' => '3240', - 'Name' => 'gnutls_range_st const', - 'Size' => '16', - 'Type' => 'Const' - }, - '1249853' => { - 'BaseType' => '1249865', - 'Header' => 'x509.h', - 'Line' => '1256', - 'Name' => 'gnutls_x509_trust_list_iter_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1249865' => { - 'BaseType' => '1249871', - 'Name' => 'struct gnutls_x509_trust_list_iter*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1249871' => { - 'Line' => '57', - 'Memb' => { - '0' => { - 'name' => 'node_index', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'name' => 'ca_index', - 'offset' => '4', - 'type' => '130' - }, - '2' => { - 'name' => 'pkcs11_list', - 'offset' => '8', - 'type' => '761498' - }, - '3' => { - 'name' => 'pkcs11_index', - 'offset' => '16', - 'type' => '130' - }, - '4' => { - 'name' => 'pkcs11_size', - 'offset' => '20', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_x509_trust_list_iter', - 'Size' => '24', - 'Source' => 'verify-high.c', - 'Type' => 'Struct' - }, - '1251426' => { - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'cert', - 'offset' => '0', - 'type' => '111797' - }, - '1' => { - 'name' => 'name', - 'offset' => '8', - 'type' => '158178' - }, - '2' => { - 'name' => 'name_size', - 'offset' => '136', - 'type' => '130' - } - }, - 'Name' => 'struct named_cert_st', - 'Size' => '144', - 'Source' => 'verify-high.c', - 'Type' => 'Struct' - }, - '1251491' => { - 'BaseType' => '1251426', - 'Name' => 'struct named_cert_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1254865' => { - 'BaseType' => '1249853', - 'Name' => 'gnutls_x509_trust_list_iter_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1271445' => { - 'Line' => '34', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'name' => 'san', - 'offset' => '8', - 'type' => '3192' - }, - '2' => { - 'name' => 'othername_oid', - 'offset' => '24', - 'type' => '3192' - } - }, - 'Name' => 'struct name_st', - 'Size' => '40', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1271494' => { - 'BaseType' => '1271445', - 'Name' => 'struct name_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1271500' => { - 'BaseType' => '1019035', - 'Name' => 'struct gnutls_x509_policy_st[64]', - 'Size' => '13312', - 'Type' => 'Array' - }, - '1271516' => { - 'Line' => '2120', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'name' => 'san', - 'offset' => '8', - 'type' => '3192' - }, - '2' => { - 'name' => 'reasons', - 'offset' => '24', - 'type' => '130' - } - }, - 'Name' => 'struct crl_dist_point_st', - 'Size' => '32', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1271569' => { - 'BaseType' => '1271516', - 'Name' => 'struct crl_dist_point_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1271575' => { - 'Line' => '2481', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '3192' - }, - '1' => { - 'name' => 'san_type', - 'offset' => '16', - 'type' => '130' - }, - '2' => { - 'name' => 'san', - 'offset' => '24', - 'type' => '3192' - } - }, - 'Name' => 'anon-struct-x509_ext.c-2481', - 'Size' => '40', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1271624' => { - 'BaseType' => '1271575', - 'Name' => 'anon-struct-x509_ext.c-2481*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1271630' => { - 'BaseType' => '3192', - 'Name' => 'gnutls_datum_t[64]', - 'Size' => '1024', - 'Type' => 'Array' - }, - '1272629' => { - 'BaseType' => '999716', - 'Name' => 'gnutls_subject_alt_names_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1277421' => { - 'BaseType' => '999738', - 'Name' => 'gnutls_x509_aki_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1284640' => { - 'BaseType' => '1020553', - 'Name' => 'gnutls_x509_policies_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1289333' => { - 'BaseType' => '1020465', - 'Name' => 'gnutls_x509_crl_dist_points_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1291928' => { - 'BaseType' => '1020487', - 'Name' => 'gnutls_x509_aia_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1294616' => { - 'BaseType' => '1020531', - 'Name' => 'gnutls_x509_key_purposes_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '130' => { - 'Name' => 'unsigned int', - 'Size' => '4', - 'Type' => 'Intrinsic' - }, - '1306782' => { - 'BaseType' => '1306793', - 'Header' => 'ocsp.h', - 'Line' => '141', - 'Name' => 'gnutls_ocsp_req_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1306793' => { - 'BaseType' => '1306799', - 'Name' => 'struct gnutls_ocsp_req_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1306799' => { - 'Line' => '36', - 'Memb' => { - '0' => { - 'name' => 'req', - 'offset' => '0', - 'type' => '117419' - }, - '1' => { - 'name' => 'init', - 'offset' => '8', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_ocsp_req_int', - 'Size' => '16', - 'Source' => 'ocsp.c', - 'Type' => 'Struct' - }, - '1308543' => { - 'BaseType' => '1306782', - 'Name' => 'gnutls_ocsp_req_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1308976' => { - 'BaseType' => '555052', - 'Name' => 'gnutls_ocsp_resp_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1328047' => { - 'Header' => 'ocsp.h', - 'Line' => '47', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_OCSP_PRINT_FULL', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_OCSP_PRINT_COMPACT', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_ocsp_print_formats_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1328076' => { - 'BaseType' => '1328047', - 'Header' => 'ocsp.h', - 'Line' => '50', - 'Name' => 'gnutls_ocsp_print_formats_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1365156' => { - 'Header' => 'gnutls.h', - 'Line' => '1030', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_NAME_DNS', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_server_name_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '137' => { - 'Name' => 'signed char', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '13711' => { - 'BaseType' => '70', - 'Name' => 'int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '144' => { - 'Name' => 'short', - 'Size' => '2', - 'Type' => 'Intrinsic' - }, - '1453' => { - 'BaseType' => '123', - 'Name' => 'unsigned char[8]', - 'Size' => '8', - 'Type' => 'Array' - }, - '1469' => { - 'Header' => 'gnutls_int.h', - 'Line' => '91', - 'Memb' => { - '0' => { - 'name' => 'i', - 'offset' => '0', - 'type' => '1453' - } - }, - 'Name' => 'struct uint64', - 'Size' => '8', - 'Type' => 'Struct' - }, - '1480' => { - 'Header' => 'gnutls.h', - 'Line' => '114', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CIPHER_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CIPHER_NULL', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_CIPHER_AES_128_GCM', - 'value' => '10' - }, - '11' => { - 'name' => 'GNUTLS_CIPHER_AES_256_GCM', - 'value' => '11' - }, - '12' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_192_CBC', - 'value' => '12' - }, - '13' => { - 'name' => 'GNUTLS_CIPHER_SALSA20_256', - 'value' => '13' - }, - '14' => { - 'name' => 'GNUTLS_CIPHER_ESTREAM_SALSA20_256', - 'value' => '14' - }, - '15' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_128_GCM', - 'value' => '15' - }, - '16' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_256_GCM', - 'value' => '16' - }, - '17' => { - 'name' => 'GNUTLS_CIPHER_RC2_40_CBC', - 'value' => '17' - }, - '18' => { - 'name' => 'GNUTLS_CIPHER_DES_CBC', - 'value' => '18' - }, - '19' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CCM', - 'value' => '19' - }, - '2' => { - 'name' => 'GNUTLS_CIPHER_ARCFOUR_128', - 'value' => '2' - }, - '20' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CCM', - 'value' => '20' - }, - '21' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CCM_8', - 'value' => '21' - }, - '22' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CCM_8', - 'value' => '22' - }, - '23' => { - 'name' => 'GNUTLS_CIPHER_CHACHA20_POLY1305', - 'value' => '23' - }, - '24' => { - 'name' => 'GNUTLS_CIPHER_IDEA_PGP_CFB', - 'value' => '200' - }, - '25' => { - 'name' => 'GNUTLS_CIPHER_3DES_PGP_CFB', - 'value' => '201' - }, - '26' => { - 'name' => 'GNUTLS_CIPHER_CAST5_PGP_CFB', - 'value' => '202' - }, - '27' => { - 'name' => 'GNUTLS_CIPHER_BLOWFISH_PGP_CFB', - 'value' => '203' - }, - '28' => { - 'name' => 'GNUTLS_CIPHER_SAFER_SK128_PGP_CFB', - 'value' => '204' - }, - '29' => { - 'name' => 'GNUTLS_CIPHER_AES128_PGP_CFB', - 'value' => '205' - }, - '3' => { - 'name' => 'GNUTLS_CIPHER_3DES_CBC', - 'value' => '3' - }, - '30' => { - 'name' => 'GNUTLS_CIPHER_AES192_PGP_CFB', - 'value' => '206' - }, - '31' => { - 'name' => 'GNUTLS_CIPHER_AES256_PGP_CFB', - 'value' => '207' - }, - '32' => { - 'name' => 'GNUTLS_CIPHER_TWOFISH_PGP_CFB', - 'value' => '208' - }, - '4' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CBC', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CBC', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_CIPHER_ARCFOUR_40', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_128_CBC', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_256_CBC', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_CIPHER_AES_192_CBC', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_cipher_algorithm', - 'Size' => '4', - 'Type' => 'Enum' - }, - '151' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '131', - 'Name' => '__off_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1542727' => { - 'Header' => 'gnutls.h', - 'Line' => '1094', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_SRTP_NULL_HMAC_SHA1_80', - 'value' => '5' - }, - '3' => { - 'name' => 'GNUTLS_SRTP_NULL_HMAC_SHA1_32', - 'value' => '6' - } - }, - 'Name' => 'enum gnutls_srtp_profile_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1550923' => { - 'BaseType' => '1542727', - 'Name' => 'gnutls_srtp_profile_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '158178' => { - 'BaseType' => '788', - 'Name' => 'uint8_t[128]', - 'Size' => '128', - 'Type' => 'Array' - }, - '15899' => { - 'Header' => 'gnutls.h', - 'Line' => '548', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SHUT_RDWR', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_SHUT_WR', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_close_request_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '162' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '132', - 'Name' => '__off64_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '165689' => { - 'BaseType' => '165701', - 'Header' => 'gnutls.h', - 'Line' => '1568', - 'Name' => 'gnutls_log_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '165701' => { - 'Name' => 'void(*)(int, char const*)', - 'Param' => { - '0' => { - 'type' => '70' - }, - '1' => { - 'type' => '105' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '165723' => { - 'BaseType' => '165735', - 'Header' => 'gnutls.h', - 'Line' => '1569', - 'Name' => 'gnutls_audit_log_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '165735' => { - 'Name' => 'void(*)(gnutls_session_t, char const*)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '105' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1695' => { - 'BaseType' => '1480', - 'Header' => 'gnutls.h', - 'Line' => '151', - 'Name' => 'gnutls_cipher_algorithm_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '16959' => { - 'BaseType' => '6158', - 'Header' => 'gnutls.h', - 'Line' => '974', - 'Name' => 'gnutls_packet_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '173' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '139', - 'Name' => '__time_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '17390' => { - 'BaseType' => '17402', - 'Header' => 'gnutls.h', - 'Line' => '1534', - 'Name' => 'gnutls_time_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '17402' => { - 'Name' => 'time_t(*)(time_t*)', - 'Param' => { - '0' => { - 'type' => '17423' - } - }, - 'Return' => '225', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '17423' => { - 'BaseType' => '225', - 'Name' => 'time_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '17429' => { - 'Name' => 'int(*)(void**)', - 'Param' => { - '0' => { - 'type' => '17450' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '17450' => { - 'BaseType' => '184', - 'Name' => 'void**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '177145' => { - 'Header' => 'gnutls.h', - 'Line' => '607', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_X509_FMT_DER', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_X509_FMT_PEM', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_x509_crt_fmt_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1788252' => { - 'BaseType' => '1788258', - 'Name' => 'gnutls_certificate_type_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1788258' => { - 'BaseType' => '2292', - 'Name' => 'gnutls_certificate_type_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '178968' => { - 'BaseType' => '178980', - 'Header' => 'gnutls.h', - 'Line' => '1547', - 'Name' => 'gnutls_calloc_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '178980' => { - 'Name' => 'void*(*)(size_t, size_t)', - 'Param' => { - '0' => { - 'type' => '52' - }, - '1' => { - 'type' => '52' - } - }, - 'Return' => '184', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '17947' => { - 'BaseType' => '130', - 'Name' => 'unsigned int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '179585' => { - 'BaseType' => '179596', - 'Header' => 'abstract.h', - 'Line' => '57', - 'Name' => 'gnutls_privkey_sign_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '179596' => { - 'Name' => 'int(*)(gnutls_privkey_t, void*, gnutls_datum_t const*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '111762' - }, - '1' => { - 'type' => '184' - }, - '2' => { - 'type' => '3587' - }, - '3' => { - 'type' => '3665' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '179632' => { - 'BaseType' => '179596', - 'Header' => 'abstract.h', - 'Line' => '62', - 'Name' => 'gnutls_privkey_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '179643' => { - 'BaseType' => '179654', - 'Header' => 'abstract.h', - 'Line' => '68', - 'Name' => 'gnutls_privkey_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '179654' => { - 'Name' => 'void(*)(gnutls_privkey_t, void*)', - 'Param' => { - '0' => { - 'type' => '111762' - }, - '1' => { - 'type' => '184' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '179676' => { - 'BaseType' => '179687', - 'Header' => 'abstract.h', - 'Line' => '77', - 'Name' => 'gnutls_privkey_info_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '179687' => { - 'Name' => 'int(*)(gnutls_privkey_t, unsigned int, void*)', - 'Param' => { - '0' => { - 'type' => '111762' - }, - '1' => { - 'type' => '130' - }, - '2' => { - 'type' => '184' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1800684' => { - 'BaseType' => '1800690', - 'Name' => 'gnutls_cipher_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1800690' => { - 'BaseType' => '1695', - 'Name' => 'gnutls_cipher_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '181182' => { - 'Header' => 'crypto-backend.h', - 'Line' => '295', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_IMPORT', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_EXPORT', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_direction_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '181194' => { - 'Header' => 'crypto-backend.h', - 'Line' => '298', - 'Memb' => { - '0' => { - 'name' => 'encrypt', - 'offset' => '0', - 'type' => '181392' - }, - '1' => { - 'name' => 'decrypt', - 'offset' => '8', - 'type' => '181392' - }, - '10' => { - 'name' => 'curve_exists', - 'offset' => '80', - 'type' => '181579' - }, - '2' => { - 'name' => 'sign', - 'offset' => '16', - 'type' => '181392' - }, - '3' => { - 'name' => 'verify', - 'offset' => '24', - 'type' => '181428' - }, - '4' => { - 'name' => 'verify_priv_params', - 'offset' => '32', - 'type' => '181454' - }, - '5' => { - 'name' => 'verify_pub_params', - 'offset' => '40', - 'type' => '181454' - }, - '6' => { - 'name' => 'generate_keys', - 'offset' => '48', - 'type' => '181491' - }, - '7' => { - 'name' => 'generate_params', - 'offset' => '56', - 'type' => '181491' - }, - '8' => { - 'name' => 'pk_fixup_private_params', - 'offset' => '64', - 'type' => '181522' - }, - '9' => { - 'name' => 'derive', - 'offset' => '72', - 'type' => '181558' - } - }, - 'Name' => 'struct gnutls_crypto_pk', - 'Size' => '88', - 'Type' => 'Struct' - }, - '181381' => { - 'BaseType' => '181387', - 'Name' => 'gnutls_pk_params_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '181387' => { - 'BaseType' => '5512', - 'Name' => 'gnutls_pk_params_st const', - 'Size' => '144', - 'Type' => 'Const' - }, - '181392' => { - 'Name' => 'int(*)(gnutls_pk_algorithm_t, gnutls_datum_t*, gnutls_datum_t const*, gnutls_pk_params_st const*)', - 'Param' => { - '0' => { - 'type' => '2348' - }, - '1' => { - 'type' => '3665' - }, - '2' => { - 'type' => '3587' - }, - '3' => { - 'type' => '181381' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '181428' => { - 'Name' => 'int(*)(gnutls_pk_algorithm_t, gnutls_datum_t const*, gnutls_datum_t const*, gnutls_pk_params_st const*)', - 'Param' => { - '0' => { - 'type' => '2348' - }, - '1' => { - 'type' => '3587' - }, - '2' => { - 'type' => '3587' - }, - '3' => { - 'type' => '181381' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '181454' => { - 'Name' => 'int(*)(gnutls_pk_algorithm_t, gnutls_pk_params_st const*)', - 'Param' => { - '0' => { - 'type' => '2348' - }, - '1' => { - 'type' => '181381' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '181485' => { - 'BaseType' => '5512', - 'Name' => 'gnutls_pk_params_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '181491' => { - 'Name' => 'int(*)(gnutls_pk_algorithm_t, unsigned int, gnutls_pk_params_st*)', - 'Param' => { - '0' => { - 'type' => '2348' - }, - '1' => { - 'type' => '130' - }, - '2' => { - 'type' => '181485' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1815' => { - 'Header' => 'gnutls.h', - 'Line' => '191', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_KX_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_KX_RSA', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_KX_DHE_PSK', - 'value' => '10' - }, - '11' => { - 'name' => 'GNUTLS_KX_ANON_ECDH', - 'value' => '11' - }, - '12' => { - 'name' => 'GNUTLS_KX_ECDHE_RSA', - 'value' => '12' - }, - '13' => { - 'name' => 'GNUTLS_KX_ECDHE_ECDSA', - 'value' => '13' - }, - '14' => { - 'name' => 'GNUTLS_KX_ECDHE_PSK', - 'value' => '14' - }, - '15' => { - 'name' => 'GNUTLS_KX_RSA_PSK', - 'value' => '15' - }, - '2' => { - 'name' => 'GNUTLS_KX_DHE_DSS', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_KX_DHE_RSA', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_KX_ANON_DH', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_KX_SRP', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_KX_RSA_EXPORT', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_KX_SRP_RSA', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_KX_SRP_DSS', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_KX_PSK', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_kx_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '181522' => { - 'Name' => 'int(*)(gnutls_pk_algorithm_t, gnutls_direction_t, gnutls_pk_params_st*)', - 'Param' => { - '0' => { - 'type' => '2348' - }, - '1' => { - 'type' => '181182' - }, - '2' => { - 'type' => '181485' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '181558' => { - 'Name' => 'int(*)(gnutls_pk_algorithm_t, gnutls_datum_t*, gnutls_pk_params_st const*, gnutls_pk_params_st const*)', - 'Param' => { - '0' => { - 'type' => '2348' - }, - '1' => { - 'type' => '3665' - }, - '2' => { - 'type' => '181381' - }, - '3' => { - 'type' => '181381' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '181579' => { - 'Name' => 'int(*)(gnutls_ecc_curve_t)', - 'Param' => { - '0' => { - 'type' => '2562' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '181585' => { - 'BaseType' => '181194', - 'Header' => 'crypto-backend.h', - 'Line' => '334', - 'Name' => 'gnutls_crypto_pk_st', - 'Size' => '88', - 'Type' => 'Typedef' - }, - '1816957' => { - 'BaseType' => '1971', - 'Name' => 'gnutls_mac_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1816963' => { - 'BaseType' => '2242', - 'Name' => 'gnutls_protocol_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1821395' => { - 'BaseType' => '1821401', - 'Name' => 'gnutls_ecc_curve_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1821401' => { - 'BaseType' => '2562', - 'Name' => 'gnutls_ecc_curve_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '1834264' => { - 'BaseType' => '1834270', - 'Name' => 'gnutls_kx_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1834270' => { - 'BaseType' => '1815', - 'Name' => 'gnutls_kx_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '184' => { - 'BaseType' => '1', - 'Name' => 'void*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1847341' => { - 'BaseType' => '1847347', - 'Name' => 'gnutls_mac_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1847347' => { - 'BaseType' => '1971', - 'Name' => 'gnutls_mac_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '1847468' => { - 'BaseType' => '1207297', - 'Name' => 'gnutls_digest_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1859263' => { - 'BaseType' => '2242', - 'Name' => 'gnutls_protocol_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '1859862' => { - 'BaseType' => '1859263', - 'Name' => 'gnutls_protocol_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '186' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '172', - 'Name' => '__ssize_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '186744' => { - 'Header' => 'abstract_int.h', - 'Line' => '40', - 'Memb' => { - '0' => { - 'name' => 'sign_func', - 'offset' => '0', - 'type' => '179585' - }, - '1' => { - 'name' => 'decrypt_func', - 'offset' => '8', - 'type' => '179632' - }, - '2' => { - 'name' => 'deinit_func', - 'offset' => '16', - 'type' => '179643' - }, - '3' => { - 'name' => 'info_func', - 'offset' => '24', - 'type' => '179676' - }, - '4' => { - 'name' => 'userdata', - 'offset' => '32', - 'type' => '184' - } - }, - 'Name' => 'anon-struct-abstract_int.h-40', - 'Size' => '40', - 'Type' => 'Struct' - }, - '186813' => { - 'Header' => 'abstract_int.h', - 'Line' => '32', - 'Memb' => { - '0' => { - 'name' => 'x509', - 'offset' => '0', - 'type' => '111785' - }, - '1' => { - 'name' => 'pkcs11', - 'offset' => '0', - 'type' => '112783' - }, - '2' => { - 'name' => 'openpgp', - 'offset' => '0', - 'type' => '112716' - }, - '3' => { - 'name' => 'ext', - 'offset' => '0', - 'type' => '186744' - } - }, - 'Name' => 'anon-union-abstract_int.h-32', - 'Size' => '40', - 'Type' => 'Union' - }, - '186882' => { - 'BaseType' => '788', - 'Name' => 'uint8_t[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '1869' => { - 'Header' => 'gnutls.h', - 'Line' => '223', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CRD_CERTIFICATE', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_CRD_ANON', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_CRD_SRP', - 'value' => '3' - }, - '3' => { - 'name' => 'GNUTLS_CRD_PSK', - 'value' => '4' - }, - '4' => { - 'name' => 'GNUTLS_CRD_IA', - 'value' => '5' - } - }, - 'Name' => 'enum gnutls_credentials_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1871038' => { - 'BaseType' => '1871044', - 'Name' => 'gnutls_sign_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1871044' => { - 'BaseType' => '2500', - 'Name' => 'gnutls_sign_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '187702' => { - 'BaseType' => '2759', - 'Name' => 'gnutls_dh_params_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '197' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '175', - 'Name' => '__syscall_slong_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1971' => { - 'Header' => 'gnutls.h', - 'Line' => '263', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_MAC_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_MAC_NULL', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_MAC_AEAD', - 'value' => '200' - }, - '11' => { - 'name' => 'GNUTLS_MAC_UMAC_96', - 'value' => '201' - }, - '12' => { - 'name' => 'GNUTLS_MAC_UMAC_128', - 'value' => '202' - }, - '2' => { - 'name' => 'GNUTLS_MAC_MD5', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_MAC_SHA1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_MAC_RMD160', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_MAC_MD2', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_MAC_SHA256', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_MAC_SHA384', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_MAC_SHA512', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_MAC_SHA224', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_mac_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1978009' => { - 'BaseType' => '1978020', - 'Header' => 'opencdk.h', - 'Line' => '64', - 'Name' => 'cdk_s2k_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1978020' => { - 'BaseType' => '1978026', - 'Name' => 'struct cdk_s2k_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1978026' => { - 'Header' => 'context.h', - 'Line' => '41', - 'Memb' => { - '0' => { - 'name' => 'mode', - 'offset' => '0', - 'type' => '70' - }, - '1' => { - 'name' => 'hash_algo', - 'offset' => '4', - 'type' => '2074760' - }, - '2' => { - 'name' => 'salt', - 'offset' => '5', - 'type' => '2084668' - }, - '3' => { - 'name' => 'count', - 'offset' => '16', - 'type' => '2074771' - } - }, - 'Name' => 'struct cdk_s2k_s', - 'Size' => '20', - 'Type' => 'Struct' - }, - '1978031' => { - 'BaseType' => '1978042', - 'Header' => 'opencdk.h', - 'Line' => '68', - 'Name' => 'cdk_stream_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1978042' => { - 'BaseType' => '1978048', - 'Name' => 'struct cdk_stream_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1978048' => { - 'Header' => 'stream.h', - 'Line' => '68', - 'Memb' => { - '0' => { - 'name' => 'filters', - 'offset' => '0', - 'type' => '2109202' - }, - '1' => { - 'name' => 'fmode', - 'offset' => '8', - 'type' => '70' - }, - '10' => { - 'name' => 'cbs_hd', - 'offset' => '128', - 'type' => '184' - }, - '2' => { - 'name' => 'error', - 'offset' => '12', - 'type' => '70' - }, - '3' => { - 'name' => 'blkmode', - 'offset' => '16', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'offset' => '24', - 'type' => '2109208' - }, - '5' => { - 'name' => 'cache', - 'offset' => '32', - 'type' => '2109322' - }, - '6' => { - 'name' => 'fname', - 'offset' => '64', - 'type' => '208' - }, - '7' => { - 'name' => 'fp', - 'offset' => '72', - 'type' => '219162' - }, - '8' => { - 'bitfield' => '1', - 'name' => 'fp_ref', - 'offset' => '80', - 'type' => '130' - }, - '9' => { - 'name' => 'cbs', - 'offset' => '88', - 'type' => '2108128' - } - }, - 'Name' => 'struct cdk_stream_s', - 'Size' => '136', - 'Type' => 'Struct' - }, - '1978053' => { - 'BaseType' => '1978064', - 'Header' => 'opencdk.h', - 'Line' => '72', - 'Name' => 'cdk_prefitem_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1978064' => { - 'BaseType' => '1978070', - 'Name' => 'struct cdk_prefitem_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1978070' => { - 'Header' => 'context.h', - 'Line' => '82', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '2074760' - }, - '1' => { - 'name' => 'value', - 'offset' => '1', - 'type' => '2074760' - } - }, - 'Name' => 'struct cdk_prefitem_s', - 'Size' => '2', - 'Type' => 'Struct' - }, - '1978097' => { - 'BaseType' => '1978108', - 'Header' => 'opencdk.h', - 'Line' => '91', - 'Name' => 'cdk_subpkt_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1978108' => { - 'BaseType' => '1978114', - 'Name' => 'struct cdk_subpkt_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1978114' => { - 'Header' => 'context.h', - 'Line' => '94', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '1978108' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '2074771' - }, - '2' => { - 'name' => 'type', - 'offset' => '12', - 'type' => '2074760' - }, - '3' => { - 'name' => 'd', - 'offset' => '16', - 'type' => '2084700' - } - }, - 'Name' => 'struct cdk_subpkt_s', - 'Size' => '24', - 'Type' => 'Struct' - }, - '1978119' => { - 'BaseType' => '1978130', - 'Header' => 'opencdk.h', - 'Line' => '99', - 'Name' => 'cdk_desig_revoker_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1978130' => { - 'BaseType' => '1978136', - 'Name' => 'struct cdk_desig_revoker_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1978136' => { - 'Header' => 'context.h', - 'Line' => '87', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '1978130' - }, - '1' => { - 'name' => 'r_class', - 'offset' => '8', - 'type' => '2074760' - }, - '2' => { - 'name' => 'algid', - 'offset' => '9', - 'type' => '2074760' - }, - '3' => { - 'name' => 'fpr', - 'offset' => '10', - 'type' => '2084684' - } - }, - 'Name' => 'struct cdk_desig_revoker_s', - 'Size' => '32', - 'Type' => 'Struct' - }, - '1978598' => { - 'Header' => 'opencdk.h', - 'Line' => '353', - 'Memb' => { - '0' => { - 'name' => 'CDK_PKT_RESERVED', - 'value' => '0' - }, - '1' => { - 'name' => 'CDK_PKT_PUBKEY_ENC', - 'value' => '1' - }, - '10' => { - 'name' => 'CDK_PKT_RING_TRUST', - 'value' => '12' - }, - '11' => { - 'name' => 'CDK_PKT_USER_ID', - 'value' => '13' - }, - '12' => { - 'name' => 'CDK_PKT_PUBLIC_SUBKEY', - 'value' => '14' - }, - '13' => { - 'name' => 'CDK_PKT_OLD_COMMENT', - 'value' => '16' - }, - '14' => { - 'name' => 'CDK_PKT_ATTRIBUTE', - 'value' => '17' - }, - '15' => { - 'name' => 'CDK_PKT_MDC', - 'value' => '19' - }, - '2' => { - 'name' => 'CDK_PKT_SIGNATURE', - 'value' => '2' - }, - '3' => { - 'name' => 'CDK_PKT_ONEPASS_SIG', - 'value' => '4' - }, - '4' => { - 'name' => 'CDK_PKT_SECRET_KEY', - 'value' => '5' - }, - '5' => { - 'name' => 'CDK_PKT_PUBLIC_KEY', - 'value' => '6' - }, - '6' => { - 'name' => 'CDK_PKT_SECRET_SUBKEY', - 'value' => '7' - }, - '7' => { - 'name' => 'CDK_PKT_COMPRESSED', - 'value' => '8' - }, - '8' => { - 'name' => 'CDK_PKT_MARKER', - 'value' => '10' - }, - '9' => { - 'name' => 'CDK_PKT_LITERAL', - 'value' => '11' - } - }, - 'Name' => 'enum cdk_packet_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1978610' => { - 'Header' => 'opencdk.h', - 'Line' => '385', - 'Memb' => { - '0' => { - 'bitfield' => '1', - 'name' => 'exportable', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'revocable', - 'offset' => '0', - 'type' => '130' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'policy_url', - 'offset' => '0', - 'type' => '130' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'notation', - 'offset' => '0', - 'type' => '130' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'expired', - 'offset' => '0', - 'type' => '130' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'checked', - 'offset' => '0', - 'type' => '130' - }, - '6' => { - 'bitfield' => '1', - 'name' => 'valid', - 'offset' => '0', - 'type' => '130' - }, - '7' => { - 'bitfield' => '1', - 'name' => 'missing_key', - 'offset' => '0', - 'type' => '130' - } - }, - 'Name' => 'anon-struct-opencdk.h-385', - 'Size' => '4', - 'Type' => 'Struct' - }, - '1978748' => { - 'Header' => 'opencdk.h', - 'Line' => '370', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '123' - }, - '1' => { - 'name' => 'sig_class', - 'offset' => '1', - 'type' => '123' - }, - '10' => { - 'name' => 'unhashed_size', - 'offset' => '40', - 'type' => '98' - }, - '11' => { - 'name' => 'unhashed', - 'offset' => '48', - 'type' => '1978097' - }, - '12' => { - 'name' => 'mpi', - 'offset' => '56', - 'type' => '6553' - }, - '13' => { - 'name' => 'revkeys', - 'offset' => '72', - 'type' => '1978119' - }, - '14' => { - 'name' => 'flags', - 'offset' => '80', - 'type' => '1978610' - }, - '15' => { - 'name' => 'key', - 'offset' => '84', - 'type' => '1978970' - }, - '2' => { - 'name' => 'timestamp', - 'offset' => '4', - 'type' => '130' - }, - '3' => { - 'name' => 'expiredate', - 'offset' => '8', - 'type' => '130' - }, - '4' => { - 'name' => 'keyid', - 'offset' => '12', - 'type' => '1978970' - }, - '5' => { - 'name' => 'pubkey_algo', - 'offset' => '20', - 'type' => '123' - }, - '6' => { - 'name' => 'digest_algo', - 'offset' => '21', - 'type' => '123' - }, - '7' => { - 'name' => 'digest_start', - 'offset' => '22', - 'type' => '1133750' - }, - '8' => { - 'name' => 'hashed_size', - 'offset' => '24', - 'type' => '98' - }, - '9' => { - 'name' => 'hashed', - 'offset' => '32', - 'type' => '1978097' - } - }, - 'Name' => 'struct cdk_pkt_signature_s', - 'Size' => '96', - 'Type' => 'Struct' - }, - '1978970' => { - 'BaseType' => '130', - 'Name' => 'unsigned int[2]', - 'Size' => '8', - 'Type' => 'Array' - }, - '1979002' => { - 'BaseType' => '1979014', - 'Header' => 'opencdk.h', - 'Line' => '397', - 'Name' => 'cdk_pkt_signature_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1979014' => { - 'BaseType' => '1978748', - 'Name' => 'struct cdk_pkt_signature_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1979020' => { - 'Header' => 'opencdk.h', - 'Line' => '400', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'is_primary', - 'offset' => '4', - 'type' => '130' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'is_revoked', - 'offset' => '4', - 'type' => '130' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'mdc_feature', - 'offset' => '4', - 'type' => '130' - }, - '4' => { - 'name' => 'prefs', - 'offset' => '8', - 'type' => '1978053' - }, - '5' => { - 'name' => 'prefs_size', - 'offset' => '16', - 'type' => '52' - }, - '6' => { - 'name' => 'attrib_img', - 'offset' => '24', - 'type' => '3186' - }, - '7' => { - 'name' => 'attrib_len', - 'offset' => '32', - 'type' => '52' - }, - '8' => { - 'name' => 'selfsig', - 'offset' => '40', - 'type' => '1979002' - }, - '9' => { - 'name' => 'name', - 'offset' => '48', - 'type' => '208' - } - }, - 'Name' => 'struct cdk_pkt_userid_s', - 'Size' => '56', - 'Type' => 'Struct' - }, - '1979173' => { - 'BaseType' => '1979185', - 'Header' => 'opencdk.h', - 'Line' => '412', - 'Name' => 'cdk_pkt_userid_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1979185' => { - 'BaseType' => '1979020', - 'Name' => 'struct cdk_pkt_userid_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1979191' => { - 'Header' => 'opencdk.h', - 'Line' => '415', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '123' - }, - '1' => { - 'name' => 'pubkey_algo', - 'offset' => '1', - 'type' => '123' - }, - '10' => { - 'bitfield' => '1', - 'name' => 'has_expired', - 'offset' => '80', - 'type' => '130' - }, - '11' => { - 'name' => 'pubkey_usage', - 'offset' => '84', - 'type' => '70' - }, - '12' => { - 'name' => 'uid', - 'offset' => '88', - 'type' => '1979173' - }, - '13' => { - 'name' => 'prefs', - 'offset' => '96', - 'type' => '1978053' - }, - '14' => { - 'name' => 'prefs_size', - 'offset' => '104', - 'type' => '52' - }, - '15' => { - 'name' => 'revkeys', - 'offset' => '112', - 'type' => '1978119' - }, - '2' => { - 'name' => 'fpr', - 'offset' => '2', - 'type' => '733604' - }, - '3' => { - 'name' => 'keyid', - 'offset' => '24', - 'type' => '1978970' - }, - '4' => { - 'name' => 'main_keyid', - 'offset' => '32', - 'type' => '1978970' - }, - '5' => { - 'name' => 'timestamp', - 'offset' => '40', - 'type' => '130' - }, - '6' => { - 'name' => 'expiredate', - 'offset' => '44', - 'type' => '130' - }, - '7' => { - 'name' => 'mpi', - 'offset' => '48', - 'type' => '1979438' - }, - '8' => { - 'bitfield' => '1', - 'name' => 'is_revoked', - 'offset' => '80', - 'type' => '130' - }, - '9' => { - 'bitfield' => '1', - 'name' => 'is_invalid', - 'offset' => '80', - 'type' => '130' - } - }, - 'Name' => 'struct cdk_pkt_pubkey_s', - 'Size' => '120', - 'Type' => 'Struct' - }, - '1979438' => { - 'BaseType' => '4648', - 'Name' => 'bigint_t[4]', - 'Size' => '32', - 'Type' => 'Array' - }, - '1979454' => { - 'BaseType' => '1979466', - 'Header' => 'opencdk.h', - 'Line' => '433', - 'Name' => 'cdk_pkt_pubkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1979466' => { - 'BaseType' => '1979191', - 'Name' => 'struct cdk_pkt_pubkey_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1979472' => { - 'Header' => 'opencdk.h', - 'Line' => '447', - 'Memb' => { - '0' => { - 'name' => 'algo', - 'offset' => '0', - 'type' => '123' - }, - '1' => { - 'name' => 'sha1chk', - 'offset' => '1', - 'type' => '123' - }, - '2' => { - 'name' => 's2k', - 'offset' => '8', - 'type' => '1978009' - }, - '3' => { - 'name' => 'iv', - 'offset' => '16', - 'type' => '757507' - }, - '4' => { - 'name' => 'ivlen', - 'offset' => '32', - 'type' => '123' - } - }, - 'Name' => 'anon-struct-opencdk.h-447', - 'Size' => '40', - 'Type' => 'Struct' - }, - '1979562' => { - 'Header' => 'opencdk.h', - 'Line' => '439', - 'Memb' => { - '0' => { - 'name' => 'pk', - 'offset' => '0', - 'type' => '1979454' - }, - '1' => { - 'name' => 'expiredate', - 'offset' => '8', - 'type' => '130' - }, - '10' => { - 'name' => 'encdata', - 'offset' => '120', - 'type' => '3186' - }, - '11' => { - 'name' => 'enclen', - 'offset' => '128', - 'type' => '52' - }, - '12' => { - 'name' => 'is_protected', - 'offset' => '136', - 'type' => '123' - }, - '13' => { - 'bitfield' => '1', - 'name' => 'is_primary', - 'offset' => '136', - 'type' => '130' - }, - '14' => { - 'bitfield' => '1', - 'name' => 'has_expired', - 'offset' => '136', - 'type' => '130' - }, - '15' => { - 'bitfield' => '1', - 'name' => 'is_revoked', - 'offset' => '136', - 'type' => '130' - }, - '2' => { - 'name' => 'version', - 'offset' => '12', - 'type' => '70' - }, - '3' => { - 'name' => 'pubkey_algo', - 'offset' => '16', - 'type' => '70' - }, - '4' => { - 'name' => 'keyid', - 'offset' => '20', - 'type' => '1978970' - }, - '5' => { - 'name' => 'main_keyid', - 'offset' => '28', - 'type' => '1978970' - }, - '6' => { - 'name' => 's2k_usage', - 'offset' => '36', - 'type' => '123' - }, - '7' => { - 'name' => 'protect', - 'offset' => '40', - 'type' => '1979472' - }, - '8' => { - 'name' => 'csum', - 'offset' => '80', - 'type' => '98' - }, - '9' => { - 'name' => 'mpi', - 'offset' => '88', - 'type' => '1979438' - } - }, - 'Name' => 'struct cdk_pkt_seckey_s', - 'Size' => '144', - 'Type' => 'Struct' - }, - '1979792' => { - 'BaseType' => '1979804', - 'Header' => 'opencdk.h', - 'Line' => '463', - 'Name' => 'cdk_pkt_seckey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1979804' => { - 'BaseType' => '1979562', - 'Name' => 'struct cdk_pkt_seckey_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1979810' => { - 'Header' => 'opencdk.h', - 'Line' => '469', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '123' - }, - '1' => { - 'name' => 'keyid', - 'offset' => '4', - 'type' => '1978970' - }, - '2' => { - 'name' => 'sig_class', - 'offset' => '12', - 'type' => '123' - }, - '3' => { - 'name' => 'digest_algo', - 'offset' => '13', - 'type' => '123' - }, - '4' => { - 'name' => 'pubkey_algo', - 'offset' => '14', - 'type' => '123' - }, - '5' => { - 'name' => 'last', - 'offset' => '15', - 'type' => '123' - } - }, - 'Name' => 'struct cdk_pkt_onepass_sig_s', - 'Size' => '16', - 'Type' => 'Struct' - }, - '1979902' => { - 'BaseType' => '1979914', - 'Header' => 'opencdk.h', - 'Line' => '477', - 'Name' => 'cdk_pkt_onepass_sig_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1979914' => { - 'BaseType' => '1979810', - 'Name' => 'struct cdk_pkt_onepass_sig_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1979920' => { - 'Header' => 'opencdk.h', - 'Line' => '480', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '123' - }, - '1' => { - 'name' => 'keyid', - 'offset' => '4', - 'type' => '1978970' - }, - '2' => { - 'name' => 'throw_keyid', - 'offset' => '12', - 'type' => '70' - }, - '3' => { - 'name' => 'pubkey_algo', - 'offset' => '16', - 'type' => '123' - }, - '4' => { - 'name' => 'mpi', - 'offset' => '24', - 'type' => '6553' - } - }, - 'Name' => 'struct cdk_pkt_pubkey_enc_s', - 'Size' => '40', - 'Type' => 'Struct' - }, - '1979999' => { - 'BaseType' => '1980011', - 'Header' => 'opencdk.h', - 'Line' => '487', - 'Name' => 'cdk_pkt_pubkey_enc_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1980011' => { - 'BaseType' => '1979920', - 'Name' => 'struct cdk_pkt_pubkey_enc_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1980017' => { - 'Header' => 'opencdk.h', - 'Line' => '489', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'name' => 'extralen', - 'offset' => '4', - 'type' => '70' - }, - '2' => { - 'name' => 'mdc_method', - 'offset' => '8', - 'type' => '123' - }, - '3' => { - 'name' => 'buf', - 'offset' => '16', - 'type' => '1978031' - } - }, - 'Name' => 'struct cdk_pkt_encrypted_s', - 'Size' => '24', - 'Type' => 'Struct' - }, - '1980083' => { - 'BaseType' => '1980095', - 'Header' => 'opencdk.h', - 'Line' => '495', - 'Name' => 'cdk_pkt_encrypted_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1980095' => { - 'BaseType' => '1980017', - 'Name' => 'struct cdk_pkt_encrypted_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1980101' => { - 'Header' => 'opencdk.h', - 'Line' => '498', - 'Memb' => { - '0' => { - 'name' => 'hash', - 'offset' => '0', - 'type' => '733604' - } - }, - 'Name' => 'struct cdk_pkt_mdc_s', - 'Size' => '20', - 'Type' => 'Struct' - }, - '1980128' => { - 'BaseType' => '1980140', - 'Header' => 'opencdk.h', - 'Line' => '501', - 'Name' => 'cdk_pkt_mdc_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1980140' => { - 'BaseType' => '1980101', - 'Name' => 'struct cdk_pkt_mdc_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1980146' => { - 'Header' => 'opencdk.h', - 'Line' => '504', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'name' => 'buf', - 'offset' => '8', - 'type' => '1978031' - }, - '2' => { - 'name' => 'mode', - 'offset' => '16', - 'type' => '70' - }, - '3' => { - 'name' => 'timestamp', - 'offset' => '20', - 'type' => '130' - }, - '4' => { - 'name' => 'namelen', - 'offset' => '24', - 'type' => '70' - }, - '5' => { - 'name' => 'name', - 'offset' => '32', - 'type' => '208' - } - }, - 'Name' => 'struct cdk_pkt_literal_s', - 'Size' => '40', - 'Type' => 'Struct' - }, - '1980238' => { - 'BaseType' => '1980250', - 'Header' => 'opencdk.h', - 'Line' => '512', - 'Name' => 'cdk_pkt_literal_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1980250' => { - 'BaseType' => '1980146', - 'Name' => 'struct cdk_pkt_literal_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1980256' => { - 'Header' => 'opencdk.h', - 'Line' => '515', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'name' => 'algorithm', - 'offset' => '4', - 'type' => '70' - }, - '2' => { - 'name' => 'buf', - 'offset' => '8', - 'type' => '1978031' - } - }, - 'Name' => 'struct cdk_pkt_compressed_s', - 'Size' => '16', - 'Type' => 'Struct' - }, - '1980309' => { - 'BaseType' => '1980321', - 'Header' => 'opencdk.h', - 'Line' => '520', - 'Name' => 'cdk_pkt_compressed_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1980321' => { - 'BaseType' => '1980256', - 'Name' => 'struct cdk_pkt_compressed_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1980327' => { - 'Header' => 'opencdk.h', - 'Line' => '529', - 'Memb' => { - '0' => { - 'name' => 'mdc', - 'offset' => '0', - 'type' => '1980128' - }, - '1' => { - 'name' => 'user_id', - 'offset' => '0', - 'type' => '1979173' - }, - '2' => { - 'name' => 'public_key', - 'offset' => '0', - 'type' => '1979454' - }, - '3' => { - 'name' => 'secret_key', - 'offset' => '0', - 'type' => '1979792' - }, - '4' => { - 'name' => 'signature', - 'offset' => '0', - 'type' => '1979002' - }, - '5' => { - 'name' => 'pubkey_enc', - 'offset' => '0', - 'type' => '1979999' - }, - '6' => { - 'name' => 'compressed', - 'offset' => '0', - 'type' => '1980309' - }, - '7' => { - 'name' => 'encrypted', - 'offset' => '0', - 'type' => '1980083' - }, - '8' => { - 'name' => 'literal', - 'offset' => '0', - 'type' => '1980238' - }, - '9' => { - 'name' => 'onepass_sig', - 'offset' => '0', - 'type' => '1979902' - } - }, - 'Name' => 'anon-union-opencdk.h-529', - 'Size' => '8', - 'Type' => 'Union' - }, - '1980457' => { - 'Header' => 'opencdk.h', - 'Line' => '524', - 'Memb' => { - '0' => { - 'name' => 'pktlen', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'pktsize', - 'offset' => '8', - 'type' => '52' - }, - '2' => { - 'name' => 'old_ctb', - 'offset' => '16', - 'type' => '70' - }, - '3' => { - 'name' => 'pkttype', - 'offset' => '20', - 'type' => '1978598' - }, - '4' => { - 'name' => 'pkt', - 'offset' => '24', - 'type' => '1980327' - } - }, - 'Name' => 'struct cdk_packet_s', - 'Size' => '32', - 'Type' => 'Struct' - }, - '1980536' => { - 'BaseType' => '1980548', - 'Header' => 'opencdk.h', - 'Line' => '542', - 'Name' => 'cdk_packet_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1980548' => { - 'BaseType' => '1980457', - 'Name' => 'struct cdk_packet_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1998038' => { - 'Header' => 'opencdk.h', - 'Line' => '136', - 'Memb' => { - '0' => { - 'name' => 'CDK_EOF', - 'value' => '-1' - }, - '1' => { - 'name' => 'CDK_Success', - 'value' => '0' - }, - '10' => { - 'name' => 'CDK_MPI_Error', - 'value' => '10' - }, - '11' => { - 'name' => 'CDK_Inv_Value', - 'value' => '11' - }, - '12' => { - 'name' => 'CDK_Error_No_Key', - 'value' => '12' - }, - '13' => { - 'name' => 'CDK_Chksum_Error', - 'value' => '13' - }, - '14' => { - 'name' => 'CDK_Time_Conflict', - 'value' => '14' - }, - '15' => { - 'name' => 'CDK_Zlib_Error', - 'value' => '15' - }, - '16' => { - 'name' => 'CDK_Weak_Key', - 'value' => '16' - }, - '17' => { - 'name' => 'CDK_Out_Of_Core', - 'value' => '17' - }, - '18' => { - 'name' => 'CDK_Wrong_Seckey', - 'value' => '18' - }, - '19' => { - 'name' => 'CDK_Bad_MDC', - 'value' => '19' - }, - '2' => { - 'name' => 'CDK_General_Error', - 'value' => '1' - }, - '20' => { - 'name' => 'CDK_Inv_Mode', - 'value' => '20' - }, - '21' => { - 'name' => 'CDK_Error_No_Keyring', - 'value' => '21' - }, - '22' => { - 'name' => 'CDK_Wrong_Format', - 'value' => '22' - }, - '23' => { - 'name' => 'CDK_Inv_Packet_Ver', - 'value' => '23' - }, - '24' => { - 'name' => 'CDK_Too_Short', - 'value' => '24' - }, - '25' => { - 'name' => 'CDK_Unusable_Key', - 'value' => '25' - }, - '26' => { - 'name' => 'CDK_No_Data', - 'value' => '26' - }, - '27' => { - 'name' => 'CDK_No_Passphrase', - 'value' => '27' - }, - '28' => { - 'name' => 'CDK_Network_Error', - 'value' => '28' - }, - '3' => { - 'name' => 'CDK_File_Error', - 'value' => '2' - }, - '4' => { - 'name' => 'CDK_Bad_Sig', - 'value' => '3' - }, - '5' => { - 'name' => 'CDK_Inv_Packet', - 'value' => '4' - }, - '6' => { - 'name' => 'CDK_Inv_Algo', - 'value' => '5' - }, - '7' => { - 'name' => 'CDK_Not_Implemented', - 'value' => '6' - }, - '8' => { - 'name' => 'CDK_Armor_Error', - 'value' => '8' - }, - '9' => { - 'name' => 'CDK_Armor_CRC_Error', - 'value' => '9' - } - }, - 'Name' => 'enum cdk_error_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2003044' => { - 'BaseType' => '111924', - 'Name' => 'gnutls_openpgp_keyring_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2021' => { - 'Header' => 'gnutls.h', - 'Line' => '316', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_COMP_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_COMP_NULL', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_COMP_DEFLATE', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_COMP_ZLIB', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_compression_method_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2067256' => { - 'BaseType' => '623824', - 'Name' => 'gnutls_openpgp_crt_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2074760' => { - 'BaseType' => '123', - 'Header' => 'types.h', - 'Line' => '28', - 'Name' => 'byte', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '2074771' => { - 'BaseType' => '130', - 'Header' => 'types.h', - 'Line' => '40', - 'Name' => 'u32', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '2074893' => { - 'Header' => 'filters.h', - 'Line' => '57', - 'Memb' => { - '0' => { - 'name' => 'le', - 'offset' => '0', - 'type' => '105' - }, - '1' => { - 'name' => 'hdrlines', - 'offset' => '8', - 'type' => '105' - }, - '2' => { - 'name' => 'crc', - 'offset' => '16', - 'type' => '2074771' - }, - '3' => { - 'name' => 'crc_okay', - 'offset' => '20', - 'type' => '70' - }, - '4' => { - 'name' => 'idx', - 'offset' => '24', - 'type' => '70' - }, - '5' => { - 'name' => 'idx2', - 'offset' => '28', - 'type' => '70' - } - }, - 'Name' => 'struct armor_filter_t', - 'Size' => '32', - 'Type' => 'Struct' - }, - '208' => { - 'BaseType' => '111', - 'Name' => 'char*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '208169' => { - 'BaseType' => '298', - 'Header' => 'stdio.h', - 'Line' => '48', - 'Name' => 'FILE', - 'Size' => '216', - 'Type' => 'Typedef' - }, - '2084668' => { - 'BaseType' => '2074760', - 'Name' => 'byte[8]', - 'Size' => '8', - 'Type' => 'Array' - }, - '2084684' => { - 'BaseType' => '2074760', - 'Name' => 'byte[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '2084700' => { - 'BaseType' => '2074760', - 'Name' => 'byte*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2106026' => { - 'Header' => 'opencdk.h', - 'Line' => '333', - 'Memb' => { - '0' => { - 'name' => 'CDK_LITFMT_BINARY', - 'value' => '0' - }, - '1' => { - 'name' => 'CDK_LITFMT_TEXT', - 'value' => '1' - }, - '2' => { - 'name' => 'CDK_LITFMT_UNICODE', - 'value' => '2' - } - }, - 'Name' => 'enum cdk_lit_format_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '210699' => { - 'BaseType' => '210711', - 'Header' => 'gnutls.h', - 'Line' => '782', - 'Name' => 'gnutls_priority_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '210711' => { - 'BaseType' => '2817', - 'Name' => 'struct gnutls_priority_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2108128' => { - 'Header' => 'opencdk.h', - 'Line' => '691', - 'Memb' => { - '0' => { - 'name' => 'open', - 'offset' => '0', - 'type' => '2108222' - }, - '1' => { - 'name' => 'release', - 'offset' => '8', - 'type' => '2108222' - }, - '2' => { - 'name' => 'read', - 'offset' => '16', - 'type' => '4617' - }, - '3' => { - 'name' => 'write', - 'offset' => '24', - 'type' => '4452' - }, - '4' => { - 'name' => 'seek', - 'offset' => '32', - 'type' => '2108248' - } - }, - 'Name' => 'struct cdk_stream_cbs_s', - 'Size' => '40', - 'Type' => 'Struct' - }, - '2108222' => { - 'Name' => 'cdk_error_t(*)(void*)', - 'Param' => { - '0' => { - 'type' => '184' - } - }, - 'Return' => '1998038', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '2108248' => { - 'Name' => 'int(*)(void*, off_t)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '885625' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '2108361' => { - 'Header' => 'filters.h', - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'on', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '885625' - }, - '2' => { - 'name' => 'nleft', - 'offset' => '16', - 'type' => '885625' - } - }, - 'Name' => 'anon-struct-filters.h-37', - 'Size' => '24', - 'Type' => 'Struct' - }, - '2108483' => { - 'Header' => 'filters.h', - 'Line' => '43', - 'Memb' => { - '0' => { - 'name' => 'hd', - 'offset' => '0', - 'type' => '7861' - }, - '1' => { - 'name' => 'mdc', - 'offset' => '80', - 'type' => '7522' - }, - '2' => { - 'name' => 'mdc_method', - 'offset' => '136', - 'type' => '70' - }, - '3' => { - 'name' => 'datalen', - 'offset' => '140', - 'type' => '2074771' - }, - '4' => { - 'name' => 'blkmode', - 'offset' => '144', - 'type' => '2108361' - }, - '5' => { - 'name' => 's', - 'offset' => '168', - 'type' => '1978031' - } - }, - 'Name' => 'struct cipher_filter_t', - 'Size' => '176', - 'Type' => 'Struct' - }, - '2108538' => { - 'Header' => 'filters.h', - 'Line' => '49', - 'Memb' => { - '0' => { - 'name' => 'digest_algo', - 'offset' => '0', - 'type' => '70' - }, - '1' => { - 'name' => 'md', - 'offset' => '8', - 'type' => '7522' - }, - '2' => { - 'name' => 'md_initialized', - 'offset' => '64', - 'type' => '70' - } - }, - 'Name' => 'struct md_filter_t', - 'Size' => '72', - 'Type' => 'Struct' - }, - '2108640' => { - 'Header' => 'filters.h', - 'Line' => '65', - 'Memb' => { - '0' => { - 'name' => 'on', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '885625' - } - }, - 'Name' => 'anon-struct-filters.h-65', - 'Size' => '16', - 'Type' => 'Struct' - }, - '2108752' => { - 'Header' => 'filters.h', - 'Line' => '69', - 'Memb' => { - '0' => { - 'name' => 'mode', - 'offset' => '0', - 'type' => '2106026' - }, - '1' => { - 'name' => 'orig_filename', - 'offset' => '8', - 'type' => '208' - }, - '2' => { - 'name' => 'filename', - 'offset' => '16', - 'type' => '208' - }, - '3' => { - 'name' => 'md', - 'offset' => '24', - 'type' => '7522' - }, - '4' => { - 'name' => 'md_initialized', - 'offset' => '80', - 'type' => '70' - }, - '5' => { - 'name' => 'blkmode', - 'offset' => '88', - 'type' => '2108640' - } - }, - 'Name' => 'struct literal_filter_t', - 'Size' => '104', - 'Type' => 'Struct' - }, - '2108849' => { - 'BaseType' => '2074760', - 'Name' => 'byte[8192]', - 'Size' => '8192', - 'Type' => 'Array' - }, - '2108866' => { - 'Header' => 'filters.h', - 'Line' => '78', - 'Memb' => { - '0' => { - 'name' => 'inbufsize', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'inbuf', - 'offset' => '8', - 'type' => '2108849' - }, - '2' => { - 'name' => 'outbufsize', - 'offset' => '8200', - 'type' => '52' - }, - '3' => { - 'name' => 'outbuf', - 'offset' => '8208', - 'type' => '2108849' - }, - '4' => { - 'name' => 'algo', - 'offset' => '16400', - 'type' => '70' - }, - '5' => { - 'name' => 'level', - 'offset' => '16404', - 'type' => '70' - } - }, - 'Name' => 'struct compress_filter_t', - 'Size' => '16408', - 'Type' => 'Struct' - }, - '2108897' => { - 'Header' => 'filters.h', - 'Line' => '82', - 'Memb' => { - '0' => { - 'name' => 'lf', - 'offset' => '0', - 'type' => '105' - } - }, - 'Name' => 'struct text_filter_t', - 'Size' => '8', - 'Type' => 'Struct' - }, - '2108908' => { - 'BaseType' => '2108919', - 'Header' => 'stream.h', - 'Line' => '40', - 'Name' => 'filter_fnct_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2108919' => { - 'Name' => 'int(*)(void*, int, FILE*, FILE*)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '70' - }, - '2' => { - 'type' => '219162' - }, - '3' => { - 'type' => '219162' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '2108961' => { - 'Header' => 'stream.h', - 'Line' => '49', - 'Memb' => { - '0' => { - 'name' => 'afx', - 'offset' => '0', - 'type' => '2074893' - }, - '1' => { - 'name' => 'cfx', - 'offset' => '0', - 'type' => '2108483' - }, - '2' => { - 'name' => 'pfx', - 'offset' => '0', - 'type' => '2108752' - }, - '3' => { - 'name' => 'zfx', - 'offset' => '0', - 'type' => '2108866' - }, - '4' => { - 'name' => 'tfx', - 'offset' => '0', - 'type' => '2108897' - }, - '5' => { - 'name' => 'mfx', - 'offset' => '0', - 'type' => '2108538' - } - }, - 'Name' => 'anon-union-stream.h-49', - 'Size' => '16408', - 'Type' => 'Union' - }, - '2109037' => { - 'Header' => 'stream.h', - 'Line' => '57', - 'Memb' => { - '0' => { - 'bitfield' => '1', - 'name' => 'enabled', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'rdonly', - 'offset' => '0', - 'type' => '130' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'error', - 'offset' => '0', - 'type' => '130' - } - }, - 'Name' => 'anon-struct-stream.h-57', - 'Size' => '4', - 'Type' => 'Struct' - }, - '2109091' => { - 'Header' => 'stream.h', - 'Line' => '44', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '2109202' - }, - '1' => { - 'name' => 'fnct', - 'offset' => '8', - 'type' => '2108908' - }, - '2' => { - 'name' => 'uint8_t', - 'offset' => '16', - 'type' => '184' - }, - '3' => { - 'name' => 'tmp', - 'offset' => '24', - 'type' => '219162' - }, - '4' => { - 'name' => 'u', - 'offset' => '32', - 'type' => '2108961' - }, - '5' => { - 'name' => 'flags', - 'offset' => '16440', - 'type' => '2109037' - }, - '6' => { - 'name' => 'type', - 'offset' => '16444', - 'type' => '130' - }, - '7' => { - 'name' => 'ctl', - 'offset' => '16448', - 'type' => '130' - } - }, - 'Name' => 'struct stream_filter_s', - 'Size' => '16456', - 'Type' => 'Struct' - }, - '2109202' => { - 'BaseType' => '2109091', - 'Name' => 'struct stream_filter_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2109208' => { - 'Header' => 'stream.h', - 'Line' => '73', - 'Memb' => { - '0' => { - 'bitfield' => '1', - 'name' => 'filtrated', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'eof', - 'offset' => '0', - 'type' => '130' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'write', - 'offset' => '0', - 'type' => '130' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'temp', - 'offset' => '0', - 'type' => '130' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'reset', - 'offset' => '0', - 'type' => '130' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'no_filter', - 'offset' => '0', - 'type' => '130' - }, - '6' => { - 'bitfield' => '3', - 'name' => 'compressed', - 'offset' => '0', - 'type' => '130' - } - }, - 'Name' => 'anon-struct-stream.h-73', - 'Size' => '4', - 'Type' => 'Struct' - }, - '2109322' => { - 'Header' => 'stream.h', - 'Line' => '82', - 'Memb' => { - '0' => { - 'name' => 'buf', - 'offset' => '0', - 'type' => '3186' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'on', - 'offset' => '8', - 'type' => '130' - }, - '2' => { - 'name' => 'size', - 'offset' => '16', - 'type' => '52' - }, - '3' => { - 'name' => 'alloced', - 'offset' => '24', - 'type' => '52' - } - }, - 'Name' => 'anon-struct-stream.h-82', - 'Size' => '32', - 'Type' => 'Struct' - }, - '2109482' => { - 'Header' => 'keydb.h', - 'Line' => '65', - 'Memb' => { - '0' => { - 'name' => 'new_keys', - 'offset' => '0', - 'type' => '52' - } - }, - 'Name' => 'anon-struct-keydb.h-65', - 'Size' => '8', - 'Type' => 'Struct' - }, - '211849' => { - 'BaseType' => '208', - 'Name' => 'char**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '214' => { - 'BaseType' => '186', - 'Header' => 'types.h', - 'Line' => '109', - 'Name' => 'ssize_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2144' => { - 'Header' => 'gnutls.h', - 'Line' => '457', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_HANDSHAKE_HELLO_REQUEST', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_HELLO', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE', - 'value' => '16' - }, - '11' => { - 'name' => 'GNUTLS_HANDSHAKE_FINISHED', - 'value' => '20' - }, - '12' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_STATUS', - 'value' => '22' - }, - '13' => { - 'name' => 'GNUTLS_HANDSHAKE_SUPPLEMENTAL', - 'value' => '23' - }, - '14' => { - 'name' => 'GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC', - 'value' => '254' - }, - '15' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_HELLO_V2', - 'value' => '1024' - }, - '2' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_HELLO', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_HANDSHAKE_NEW_SESSION_TICKET', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_PKT', - 'value' => '11' - }, - '6' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE', - 'value' => '12' - }, - '7' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST', - 'value' => '13' - }, - '8' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_HELLO_DONE', - 'value' => '14' - }, - '9' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY', - 'value' => '15' - } - }, - 'Name' => 'enum gnutls_handshake_description_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '219162' => { - 'BaseType' => '208169', - 'Name' => 'FILE*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2242' => { - 'Header' => 'gnutls.h', - 'Line' => '579', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SSL3', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_TLS1_0', - 'value' => '2' - }, - '10' => { - 'name' => 'GNUTLS_TLS_VERSION_MAX', - 'value' => '4' - }, - '11' => { - 'name' => 'GNUTLS_VERSION_UNKNOWN', - 'value' => '255' - }, - '2' => { - 'name' => 'GNUTLS_TLS1', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_TLS1_1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_TLS1_2', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_DTLS0_9', - 'value' => '200' - }, - '6' => { - 'name' => 'GNUTLS_DTLS1_0', - 'value' => '201' - }, - '7' => { - 'name' => 'GNUTLS_DTLS1_2', - 'value' => '202' - }, - '8' => { - 'name' => 'GNUTLS_DTLS_VERSION_MIN', - 'value' => '200' - }, - '9' => { - 'name' => 'GNUTLS_DTLS_VERSION_MAX', - 'value' => '202' - } - }, - 'Name' => 'enum gnutls_protocol_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '225' => { - 'BaseType' => '173', - 'Header' => 'time.h', - 'Line' => '75', - 'Name' => 'time_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '225955' => { - 'BaseType' => '210699', - 'Name' => 'gnutls_priority_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '225961' => { - 'BaseType' => '105', - 'Name' => 'char const**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '226434' => { - 'BaseType' => '226440', - 'Name' => 'unsigned int const**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '226440' => { - 'BaseType' => '226446', - 'Name' => 'unsigned int const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '226446' => { - 'BaseType' => '130', - 'Name' => 'unsigned int const', - 'Size' => '4', - 'Type' => 'Const' - }, - '2292' => { - 'Header' => 'gnutls.h', - 'Line' => '595', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CRT_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CRT_X509', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_CRT_OPENPGP', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_CRT_RAW', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_certificate_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '230812' => { - 'BaseType' => '230823', - 'Header' => 'crypto.h', - 'Line' => '188', - 'Name' => 'gnutls_mac_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '230823' => { - 'Name' => 'int(*)(gnutls_mac_algorithm_t, void**)', - 'Param' => { - '0' => { - 'type' => '1971' - }, - '1' => { - 'type' => '17450' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '230849' => { - 'BaseType' => '4452', - 'Header' => 'crypto.h', - 'Line' => '189', - 'Name' => 'gnutls_mac_setkey_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '230860' => { - 'BaseType' => '4452', - 'Header' => 'crypto.h', - 'Line' => '190', - 'Name' => 'gnutls_mac_setnonce_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '230871' => { - 'BaseType' => '4452', - 'Header' => 'crypto.h', - 'Line' => '191', - 'Name' => 'gnutls_mac_hash_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '230882' => { - 'BaseType' => '4617', - 'Header' => 'crypto.h', - 'Line' => '192', - 'Name' => 'gnutls_mac_output_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '230924' => { - 'BaseType' => '3683', - 'Header' => 'crypto.h', - 'Line' => '193', - 'Name' => 'gnutls_mac_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '230935' => { - 'BaseType' => '230946', - 'Header' => 'crypto.h', - 'Line' => '194', - 'Name' => 'gnutls_mac_fast_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '230946' => { - 'Name' => 'int(*)(gnutls_mac_algorithm_t, void const*, size_t, void const*, size_t, void const*, size_t, void*)', - 'Param' => { - '0' => { - 'type' => '1971' - }, - '1' => { - 'type' => '291' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '291' - }, - '4' => { - 'type' => '52' - }, - '5' => { - 'type' => '291' - }, - '6' => { - 'type' => '52' - }, - '7' => { - 'type' => '184' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '231002' => { - 'BaseType' => '231013', - 'Header' => 'crypto.h', - 'Line' => '209', - 'Name' => 'gnutls_digest_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '231013' => { - 'Name' => 'int(*)(gnutls_digest_algorithm_t, void**)', - 'Param' => { - '0' => { - 'type' => '109671' - }, - '1' => { - 'type' => '17450' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '231039' => { - 'BaseType' => '4452', - 'Header' => 'crypto.h', - 'Line' => '210', - 'Name' => 'gnutls_digest_hash_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '231050' => { - 'BaseType' => '4617', - 'Header' => 'crypto.h', - 'Line' => '211', - 'Name' => 'gnutls_digest_output_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '231061' => { - 'BaseType' => '3683', - 'Header' => 'crypto.h', - 'Line' => '212', - 'Name' => 'gnutls_digest_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '231072' => { - 'BaseType' => '231083', - 'Header' => 'crypto.h', - 'Line' => '213', - 'Name' => 'gnutls_digest_fast_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '231083' => { - 'Name' => 'int(*)(gnutls_digest_algorithm_t, void const*, size_t, void*)', - 'Param' => { - '0' => { - 'type' => '109671' - }, - '1' => { - 'type' => '291' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '184' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '231239' => { - 'Name' => 'int(*)(gnutls_mac_algorithm_t)', - 'Param' => { - '0' => { - 'type' => '1971' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '231245' => { - 'Header' => 'crypto-backend.h', - 'Line' => '61', - 'Memb' => { - '0' => { - 'name' => 'init', - 'offset' => '0', - 'type' => '230812' - }, - '1' => { - 'name' => 'setkey', - 'offset' => '8', - 'type' => '230849' - }, - '2' => { - 'name' => 'setnonce', - 'offset' => '16', - 'type' => '230860' - }, - '3' => { - 'name' => 'hash', - 'offset' => '24', - 'type' => '230871' - }, - '4' => { - 'name' => 'output', - 'offset' => '32', - 'type' => '230882' - }, - '5' => { - 'name' => 'deinit', - 'offset' => '40', - 'type' => '230924' - }, - '6' => { - 'name' => 'fast', - 'offset' => '48', - 'type' => '230935' - }, - '7' => { - 'name' => 'exists', - 'offset' => '56', - 'type' => '231239' - } - }, - 'Name' => 'struct gnutls_crypto_mac_st', - 'Size' => '64', - 'Type' => 'Struct' - }, - '231352' => { - 'Name' => 'int(*)(gnutls_digest_algorithm_t)', - 'Param' => { - '0' => { - 'type' => '109671' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '231358' => { - 'Header' => 'crypto-backend.h', - 'Line' => '73', - 'Memb' => { - '0' => { - 'name' => 'init', - 'offset' => '0', - 'type' => '231002' - }, - '1' => { - 'name' => 'hash', - 'offset' => '8', - 'type' => '231039' - }, - '2' => { - 'name' => 'output', - 'offset' => '16', - 'type' => '231050' - }, - '3' => { - 'name' => 'deinit', - 'offset' => '24', - 'type' => '231061' - }, - '4' => { - 'name' => 'fast', - 'offset' => '32', - 'type' => '231072' - }, - '5' => { - 'name' => 'exists', - 'offset' => '40', - 'type' => '231352' - } - }, - 'Name' => 'struct gnutls_crypto_digest_st', - 'Size' => '48', - 'Type' => 'Struct' - }, - '2348' => { - 'Header' => 'gnutls.h', - 'Line' => '644', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PK_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PK_RSA', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PK_DSA', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PK_DH', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_PK_EC', - 'value' => '4' - } - }, - 'Name' => 'enum gnutls_pk_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '236' => { - 'BaseType' => '144', - 'Header' => 'types.h', - 'Line' => '195', - 'Name' => 'int16_t', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '242100' => { - 'BaseType' => '242111', - 'Header' => 'crypto.h', - 'Line' => '142', - 'Name' => 'gnutls_cipher_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '242111' => { - 'Name' => 'int(*)(gnutls_cipher_algorithm_t, void**, int)', - 'Param' => { - '0' => { - 'type' => '1695' - }, - '1' => { - 'type' => '17450' - }, - '2' => { - 'type' => '70' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '242142' => { - 'BaseType' => '4452', - 'Header' => 'crypto.h', - 'Line' => '143', - 'Name' => 'gnutls_cipher_setkey_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '242184' => { - 'BaseType' => '4452', - 'Header' => 'crypto.h', - 'Line' => '145', - 'Name' => 'gnutls_cipher_setiv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '242195' => { - 'BaseType' => '4483', - 'Header' => 'crypto.h', - 'Line' => '146', - 'Name' => 'gnutls_cipher_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '242247' => { - 'BaseType' => '4483', - 'Header' => 'crypto.h', - 'Line' => '148', - 'Name' => 'gnutls_cipher_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '242307' => { - 'BaseType' => '4551', - 'Header' => 'crypto.h', - 'Line' => '155', - 'Name' => 'gnutls_cipher_aead_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '242384' => { - 'BaseType' => '4551', - 'Header' => 'crypto.h', - 'Line' => '161', - 'Name' => 'gnutls_cipher_aead_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '242395' => { - 'BaseType' => '3683', - 'Header' => 'crypto.h', - 'Line' => '167', - 'Name' => 'gnutls_cipher_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '247' => { - 'Header' => 'time.h', - 'Line' => '120', - 'Memb' => { - '0' => { - 'name' => 'tv_sec', - 'offset' => '0', - 'type' => '173' - }, - '1' => { - 'name' => 'tv_nsec', - 'offset' => '8', - 'type' => '197' - } - }, - 'Name' => 'struct timespec', - 'Size' => '16', - 'Type' => 'Struct' - }, - '2500' => { - 'Header' => 'gnutls.h', - 'Line' => '696', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SIGN_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA1', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA512', - 'value' => '8' - }, - '11' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA224', - 'value' => '9' - }, - '12' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA224', - 'value' => '10' - }, - '13' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA256', - 'value' => '11' - }, - '14' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA1', - 'value' => '12' - }, - '15' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA224', - 'value' => '13' - }, - '16' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA256', - 'value' => '14' - }, - '17' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA384', - 'value' => '15' - }, - '18' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA512', - 'value' => '16' - }, - '19' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA384', - 'value' => '17' - }, - '2' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA', - 'value' => '1' - }, - '20' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA512', - 'value' => '18' - }, - '3' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA1', - 'value' => '2' - }, - '4' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA', - 'value' => '2' - }, - '5' => { - 'name' => 'GNUTLS_SIGN_RSA_MD5', - 'value' => '3' - }, - '6' => { - 'name' => 'GNUTLS_SIGN_RSA_MD2', - 'value' => '4' - }, - '7' => { - 'name' => 'GNUTLS_SIGN_RSA_RMD160', - 'value' => '5' - }, - '8' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA256', - 'value' => '6' - }, - '9' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA384', - 'value' => '7' - } - }, - 'Name' => 'enum gnutls_sign_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '25160' => { - 'BaseType' => '25166', - 'Name' => 'uint8_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '25166' => { - 'BaseType' => '788', - 'Name' => 'uint8_t const', - 'Size' => '1', - 'Type' => 'Const' - }, - '2562' => { - 'Header' => 'gnutls.h', - 'Line' => '716', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_ECC_CURVE_INVALID', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP224R1', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP256R1', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP384R1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP521R1', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP192R1', - 'value' => '5' - } - }, - 'Name' => 'enum gnutls_ecc_curve_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '25888' => { - 'BaseType' => '16959', - 'Name' => 'gnutls_packet_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2648' => { - 'Header' => 'gnutls.h', - 'Line' => '750', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SEC_PARAM_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_SEC_PARAM_INSECURE', - 'value' => '5' - }, - '2' => { - 'name' => 'GNUTLS_SEC_PARAM_EXPORT', - 'value' => '10' - }, - '3' => { - 'name' => 'GNUTLS_SEC_PARAM_VERY_WEAK', - 'value' => '15' - }, - '4' => { - 'name' => 'GNUTLS_SEC_PARAM_WEAK', - 'value' => '20' - }, - '5' => { - 'name' => 'GNUTLS_SEC_PARAM_LOW', - 'value' => '25' - }, - '6' => { - 'name' => 'GNUTLS_SEC_PARAM_LEGACY', - 'value' => '30' - }, - '7' => { - 'name' => 'GNUTLS_SEC_PARAM_MEDIUM', - 'value' => '35' - }, - '8' => { - 'name' => 'GNUTLS_SEC_PARAM_HIGH', - 'value' => '40' - }, - '9' => { - 'name' => 'GNUTLS_SEC_PARAM_ULTRA', - 'value' => '45' - } - }, - 'Name' => 'enum gnutls_sec_param_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2660' => { - 'BaseType' => '184', - 'Header' => 'gnutls.h', - 'Line' => '769', - 'Name' => 'gnutls_transport_ptr_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2672' => { - 'BaseType' => '2684', - 'Header' => 'gnutls.h', - 'Line' => '772', - 'Name' => 'gnutls_session_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2684' => { - 'BaseType' => '2690', - 'Name' => 'struct gnutls_session_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2690' => { - 'Header' => 'gnutls_int.h', - 'Line' => '1007', - 'Memb' => { - '0' => { - 'name' => 'security_parameters', - 'offset' => '0', - 'type' => '8445' - }, - '1' => { - 'name' => 'record_parameters', - 'offset' => '224', - 'type' => '10513' - }, - '2' => { - 'name' => 'internals', - 'offset' => '352', - 'type' => '10501' - }, - '3' => { - 'name' => 'key', - 'offset' => '4512', - 'type' => '6575' - } - }, - 'Name' => 'struct gnutls_session_int', - 'Size' => '4968', - 'Type' => 'Struct' - }, - '27092' => { - 'BaseType' => '2660', - 'Name' => 'gnutls_transport_ptr_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2759' => { - 'BaseType' => '2771', - 'Header' => 'gnutls.h', - 'Line' => '775', - 'Name' => 'gnutls_dh_params_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2771' => { - 'BaseType' => '2777', - 'Name' => 'struct gnutls_dh_params_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2777' => { - 'Header' => 'gnutls_int.h', - 'Line' => '696', - 'Memb' => { - '0' => { - 'name' => 'params', - 'offset' => '0', - 'type' => '6553' - }, - '1' => { - 'name' => 'q_bits', - 'offset' => '16', - 'type' => '70' - } - }, - 'Name' => 'struct gnutls_dh_params_int', - 'Size' => '24', - 'Type' => 'Struct' - }, - '2817' => { - 'Header' => 'gnutls_int.h', - 'Line' => '648', - 'Memb' => { - '0' => { - 'name' => 'cipher', - 'offset' => '0', - 'type' => '8525' - }, - '1' => { - 'name' => 'mac', - 'offset' => '132', - 'type' => '8525' - }, - '10' => { - 'name' => 'allow_large_records', - 'offset' => '1058', - 'type' => '7357' - }, - '11' => { - 'name' => 'dumbfw', - 'offset' => '1060', - 'type' => '130' - }, - '12' => { - 'name' => 'sr', - 'offset' => '1064', - 'type' => '8575' - }, - '13' => { - 'name' => 'min_record_version', - 'offset' => '1068', - 'type' => '7357' - }, - '14' => { - 'name' => 'server_precedence', - 'offset' => '1069', - 'type' => '7357' - }, - '15' => { - 'name' => 'allow_wrong_pms', - 'offset' => '1070', - 'type' => '7357' - }, - '16' => { - 'name' => 'no_tickets', - 'offset' => '1071', - 'type' => '7357' - }, - '17' => { - 'name' => 'no_etm', - 'offset' => '1072', - 'type' => '7357' - }, - '18' => { - 'name' => 'have_cbc', - 'offset' => '1073', - 'type' => '7357' - }, - '19' => { - 'name' => 'stateless_compression', - 'offset' => '1074', - 'type' => '7357' - }, - '2' => { - 'name' => 'kx', - 'offset' => '264', - 'type' => '8525' - }, - '20' => { - 'name' => 'additional_verify_flags', - 'offset' => '1076', - 'type' => '130' - }, - '21' => { - 'name' => 'level', - 'offset' => '1080', - 'type' => '2648' - }, - '22' => { - 'name' => 'dh_prime_bits', - 'offset' => '1084', - 'type' => '130' - }, - '3' => { - 'name' => 'compression', - 'offset' => '396', - 'type' => '8525' - }, - '4' => { - 'name' => 'protocol', - 'offset' => '528', - 'type' => '8525' - }, - '5' => { - 'name' => 'cert_type', - 'offset' => '660', - 'type' => '8525' - }, - '6' => { - 'name' => 'sign_algo', - 'offset' => '792', - 'type' => '8525' - }, - '7' => { - 'name' => 'supported_ecc', - 'offset' => '924', - 'type' => '8525' - }, - '8' => { - 'name' => 'no_extensions', - 'offset' => '1056', - 'type' => '7357' - }, - '9' => { - 'name' => 'no_ext_master_secret', - 'offset' => '1057', - 'type' => '7357' - } - }, - 'Name' => 'struct gnutls_priority_st', - 'Size' => '1088', - 'Type' => 'Struct' - }, - '285604' => { - 'BaseType' => '10555', - 'Header' => 'gnutls.h', - 'Line' => '2234', - 'Name' => 'gnutls_buffer_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '285695' => { - 'BaseType' => '285707', - 'Header' => 'gnutls.h', - 'Line' => '2247', - 'Name' => 'gnutls_ext_recv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '285707' => { - 'Name' => 'int(*)(gnutls_session_t, unsigned char const*, size_t)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '4032' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '285749' => { - 'BaseType' => '285761', - 'Header' => 'gnutls.h', - 'Line' => '2251', - 'Name' => 'gnutls_ext_send_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '285761' => { - 'Name' => 'int(*)(gnutls_session_t, gnutls_buffer_t)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '285604' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '285787' => { - 'BaseType' => '285799', - 'Header' => 'gnutls.h', - 'Line' => '2254', - 'Name' => 'gnutls_ext_deinit_data_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '285799' => { - 'Name' => 'void(*)(gnutls_ext_priv_data_t)', - 'Param' => { - '0' => { - 'type' => '4020' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '285816' => { - 'BaseType' => '285828', - 'Header' => 'gnutls.h', - 'Line' => '2256', - 'Name' => 'gnutls_ext_pack_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '285828' => { - 'Name' => 'int(*)(gnutls_ext_priv_data_t, gnutls_buffer_t)', - 'Param' => { - '0' => { - 'type' => '4020' - }, - '1' => { - 'type' => '285604' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '285854' => { - 'BaseType' => '285866', - 'Header' => 'gnutls.h', - 'Line' => '2259', - 'Name' => 'gnutls_ext_unpack_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '285866' => { - 'Name' => 'int(*)(gnutls_buffer_t, gnutls_ext_priv_data_t*)', - 'Param' => { - '0' => { - 'type' => '285604' - }, - '1' => { - 'type' => '285892' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '285892' => { - 'BaseType' => '4020', - 'Name' => 'gnutls_ext_priv_data_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '285942' => { - 'Header' => 'gnutls.h', - 'Line' => '2283', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_EXT_ANY', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_EXT_APPLICATION', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_EXT_TLS', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_EXT_MANDATORY', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_EXT_NONE', - 'value' => '4' - } - }, - 'Name' => 'enum gnutls_ext_parse_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '291' => { - 'BaseType' => '297', - 'Name' => 'void const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '292626' => { - 'Header' => 'gnutls_extensions.h', - 'Line' => '87', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '105' - }, - '1' => { - 'name' => 'free_name', - 'offset' => '8', - 'type' => '130' - }, - '2' => { - 'name' => 'type', - 'offset' => '12', - 'type' => '799' - }, - '3' => { - 'name' => 'parse_type', - 'offset' => '16', - 'type' => '285942' - }, - '4' => { - 'name' => 'recv_func', - 'offset' => '24', - 'type' => '285695' - }, - '5' => { - 'name' => 'send_func', - 'offset' => '32', - 'type' => '285749' - }, - '6' => { - 'name' => 'deinit_func', - 'offset' => '40', - 'type' => '285787' - }, - '7' => { - 'name' => 'pack_func', - 'offset' => '48', - 'type' => '285816' - }, - '8' => { - 'name' => 'unpack_func', - 'offset' => '56', - 'type' => '285854' - } - }, - 'Name' => 'struct extension_entry_st', - 'Size' => '64', - 'Type' => 'Struct' - }, - '293058' => { - 'BaseType' => '292626', - 'Name' => 'extension_entry_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '297' => { - 'BaseType' => '1', - 'Name' => 'void const', - 'Type' => 'Const' - }, - '298' => { - 'Header' => 'libio.h', - 'Line' => '245', - 'Memb' => { - '0' => { - 'name' => '_flags', - 'offset' => '0', - 'type' => '70' - }, - '1' => { - 'name' => '_IO_read_ptr', - 'offset' => '8', - 'type' => '208' - }, - '10' => { - 'name' => '_IO_backup_base', - 'offset' => '80', - 'type' => '208' - }, - '11' => { - 'name' => '_IO_save_end', - 'offset' => '88', - 'type' => '208' - }, - '12' => { - 'name' => '_markers', - 'offset' => '96', - 'type' => '738' - }, - '13' => { - 'name' => '_chain', - 'offset' => '104', - 'type' => '744' - }, - '14' => { - 'name' => '_fileno', - 'offset' => '112', - 'type' => '70' - }, - '15' => { - 'name' => '_flags2', - 'offset' => '116', - 'type' => '70' - }, - '16' => { - 'name' => '_old_offset', - 'offset' => '120', - 'type' => '151' - }, - '17' => { - 'name' => '_cur_column', - 'offset' => '128', - 'type' => '98' - }, - '18' => { - 'name' => '_vtable_offset', - 'offset' => '130', - 'type' => '137' - }, - '19' => { - 'name' => '_shortbuf', - 'offset' => '131', - 'type' => '750' - }, - '2' => { - 'name' => '_IO_read_end', - 'offset' => '16', - 'type' => '208' - }, - '20' => { - 'name' => '_lock', - 'offset' => '136', - 'type' => '766' - }, - '21' => { - 'name' => '_offset', - 'offset' => '144', - 'type' => '162' - }, - '22' => { - 'name' => '__pad1', - 'offset' => '152', - 'type' => '184' - }, - '23' => { - 'name' => '__pad2', - 'offset' => '160', - 'type' => '184' - }, - '24' => { - 'name' => '__pad3', - 'offset' => '168', - 'type' => '184' - }, - '25' => { - 'name' => '__pad4', - 'offset' => '176', - 'type' => '184' - }, - '26' => { - 'name' => '__pad5', - 'offset' => '184', - 'type' => '52' - }, - '27' => { - 'name' => '_mode', - 'offset' => '192', - 'type' => '70' - }, - '28' => { - 'name' => '_unused2', - 'offset' => '196', - 'type' => '772' - }, - '3' => { - 'name' => '_IO_read_base', - 'offset' => '24', - 'type' => '208' - }, - '4' => { - 'name' => '_IO_write_base', - 'offset' => '32', - 'type' => '208' - }, - '5' => { - 'name' => '_IO_write_ptr', - 'offset' => '40', - 'type' => '208' - }, - '6' => { - 'name' => '_IO_write_end', - 'offset' => '48', - 'type' => '208' - }, - '7' => { - 'name' => '_IO_buf_base', - 'offset' => '56', - 'type' => '208' - }, - '8' => { - 'name' => '_IO_buf_end', - 'offset' => '64', - 'type' => '208' - }, - '9' => { - 'name' => '_IO_save_base', - 'offset' => '72', - 'type' => '208' - } - }, - 'Name' => 'struct _IO_FILE', - 'Size' => '216', - 'Type' => 'Struct' - }, - '298566' => { - 'Name' => 'char*(*)(char const*)', - 'Param' => { - '0' => { - 'type' => '105' - } - }, - 'Return' => '208', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3186' => { - 'BaseType' => '123', - 'Name' => 'unsigned char*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3192' => { - 'Header' => 'gnutls.h', - 'Line' => '787', - 'Memb' => { - '0' => { - 'name' => 'data', - 'offset' => '0', - 'type' => '3186' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_datum_t', - 'Size' => '16', - 'Type' => 'Struct' - }, - '3240' => { - 'Header' => 'gnutls.h', - 'Line' => '959', - 'Memb' => { - '0' => { - 'name' => 'low', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'high', - 'offset' => '8', - 'type' => '52' - } - }, - 'Name' => 'struct gnutls_range_st', - 'Size' => '16', - 'Type' => 'Struct' - }, - '3258' => { - 'Header' => 'gnutls_int.h', - 'Line' => '310', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '6158' - }, - '1' => { - 'name' => 'prev', - 'offset' => '8', - 'type' => '6158' - }, - '10' => { - 'name' => 'handshake_sequence', - 'offset' => '72', - 'type' => '799' - }, - '2' => { - 'name' => 'mark', - 'offset' => '16', - 'type' => '52' - }, - '3' => { - 'name' => 'msg', - 'offset' => '24', - 'type' => '3192' - }, - '4' => { - 'name' => 'maximum_size', - 'offset' => '40', - 'type' => '52' - }, - '5' => { - 'name' => 'uhead_mark', - 'offset' => '48', - 'type' => '130' - }, - '6' => { - 'name' => 'type', - 'offset' => '52', - 'type' => '5926' - }, - '7' => { - 'name' => 'record_sequence', - 'offset' => '56', - 'type' => '1469' - }, - '8' => { - 'name' => 'epoch', - 'offset' => '64', - 'type' => '799' - }, - '9' => { - 'name' => 'htype', - 'offset' => '68', - 'type' => '2144' - } - }, - 'Name' => 'struct mbuffer_st', - 'Size' => '80', - 'Type' => 'Struct' - }, - '3415' => { - 'BaseType' => '3427', - 'Header' => 'gnutls.h', - 'Line' => '1229', - 'Name' => 'gnutls_db_store_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3427' => { - 'Name' => 'int(*)(void*, gnutls_datum_t, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '3192' - }, - '2' => { - 'type' => '3192' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3458' => { - 'BaseType' => '3470', - 'Header' => 'gnutls.h', - 'Line' => '1231', - 'Name' => 'gnutls_db_remove_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3470' => { - 'Name' => 'int(*)(void*, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '3192' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3496' => { - 'BaseType' => '3508', - 'Header' => 'gnutls.h', - 'Line' => '1232', - 'Name' => 'gnutls_db_retr_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3508' => { - 'Name' => 'gnutls_datum_t(*)(void*, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '3192' - } - }, - 'Return' => '3192', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3534' => { - 'BaseType' => '3546', - 'Header' => 'gnutls.h', - 'Line' => '1267', - 'Name' => 'gnutls_handshake_hook_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3546' => { - 'Name' => 'int(*)(gnutls_session_t, unsigned int, unsigned int, unsigned int, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '130' - }, - '2' => { - 'type' => '130' - }, - '3' => { - 'type' => '130' - }, - '4' => { - 'type' => '3587' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3587' => { - 'BaseType' => '3593', - 'Name' => 'gnutls_datum_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3593' => { - 'BaseType' => '3192', - 'Name' => 'gnutls_datum_t const', - 'Size' => '16', - 'Type' => 'Const' - }, - '3598' => { - 'BaseType' => '3610', - 'Header' => 'gnutls.h', - 'Line' => '1276', - 'Name' => 'gnutls_handshake_post_client_hello_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3610' => { - 'Name' => 'int(*)(gnutls_session_t)', - 'Param' => { - '0' => { - 'type' => '2672' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3631' => { - 'BaseType' => '3643', - 'Header' => 'gnutls.h', - 'Line' => '1304', - 'Name' => 'gnutls_pubkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '363186' => { - 'BaseType' => '109671', - 'Name' => 'gnutls_digest_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3643' => { - 'BaseType' => '3649', - 'Name' => 'struct gnutls_pubkey_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3649' => { - 'Header' => 'abstract_int.h', - 'Line' => '54', - 'Memb' => { - '0' => { - 'name' => 'pk_algorithm', - 'offset' => '0', - 'type' => '2348' - }, - '1' => { - 'name' => 'bits', - 'offset' => '4', - 'type' => '130' - }, - '2' => { - 'name' => 'params', - 'offset' => '8', - 'type' => '5512' - }, - '3' => { - 'name' => 'openpgp_key_id', - 'offset' => '152', - 'type' => '120443' - }, - '4' => { - 'name' => 'openpgp_key_id_set', - 'offset' => '160', - 'type' => '130' - }, - '5' => { - 'name' => 'openpgp_key_fpr', - 'offset' => '164', - 'type' => '186882' - }, - '6' => { - 'bitfield' => '1', - 'name' => 'openpgp_key_fpr_set', - 'offset' => '184', - 'type' => '130' - }, - '7' => { - 'name' => 'key_usage', - 'offset' => '188', - 'type' => '130' - }, - '8' => { - 'name' => 'pin', - 'offset' => '192', - 'type' => '116316' - } - }, - 'Name' => 'struct gnutls_pubkey_st', - 'Size' => '208', - 'Type' => 'Struct' - }, - '365382' => { - 'BaseType' => '2562', - 'Name' => 'gnutls_ecc_curve_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3654' => { - 'BaseType' => '3660', - 'Name' => 'struct gnutls_privkey_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3660' => { - 'Header' => 'abstract_int.h', - 'Line' => '28', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '112844' - }, - '1' => { - 'name' => 'pk_algorithm', - 'offset' => '4', - 'type' => '2348' - }, - '2' => { - 'name' => 'key', - 'offset' => '8', - 'type' => '186813' - }, - '3' => { - 'name' => 'flags', - 'offset' => '48', - 'type' => '130' - }, - '4' => { - 'name' => 'preferred_sign_algo', - 'offset' => '52', - 'type' => '2500' - }, - '5' => { - 'name' => 'pin', - 'offset' => '56', - 'type' => '116316' - } - }, - 'Name' => 'struct gnutls_privkey_st', - 'Size' => '72', - 'Type' => 'Struct' - }, - '3665' => { - 'BaseType' => '3192', - 'Name' => 'gnutls_datum_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3671' => { - 'BaseType' => '3683', - 'Header' => 'gnutls.h', - 'Line' => '1549', - 'Name' => 'gnutls_free_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '368110' => { - 'Header' => 'gnutls.h', - 'Line' => '524', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CERT_IGNORE', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CERT_REQUEST', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_CERT_REQUIRE', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_certificate_request_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '3683' => { - 'Name' => 'void(*)(void*)', - 'Param' => { - '0' => { - 'type' => '184' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '370693' => { - 'Header' => 'gnutls.h', - 'Line' => '1876', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SAN_DNSNAME', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_SAN_RFC822NAME', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_SAN_URI', - 'value' => '3' - }, - '3' => { - 'name' => 'GNUTLS_SAN_IPADDRESS', - 'value' => '4' - }, - '4' => { - 'name' => 'GNUTLS_SAN_OTHERNAME', - 'value' => '5' - }, - '5' => { - 'name' => 'GNUTLS_SAN_DN', - 'value' => '6' - }, - '6' => { - 'name' => 'GNUTLS_SAN_OTHERNAME_XMPP', - 'value' => '1000' - } - }, - 'Name' => 'enum gnutls_x509_subject_alt_name_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '370754' => { - 'BaseType' => '370693', - 'Header' => 'gnutls.h', - 'Line' => '1887', - 'Name' => 'gnutls_x509_subject_alt_name_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '371282' => { - 'Header' => 'gnutls.h', - 'Line' => '2030', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_DT_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_DT_DNS_HOSTNAME', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_DT_KEY_PURPOSE_OID', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_DT_RFC822NAME', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_vdata_types_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '371343' => { - 'Header' => 'gnutls.h', - 'Line' => '2036', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '371282' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '3186' - }, - '2' => { - 'name' => 'size', - 'offset' => '16', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_typed_vdata_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '3736' => { - 'Header' => 'gnutls.h', - 'Line' => '1610', - 'Memb' => { - '0' => { - 'name' => 'iov_base', - 'offset' => '0', - 'type' => '184' - }, - '1' => { - 'name' => 'iov_len', - 'offset' => '8', - 'type' => '52' - } - }, - 'Name' => 'struct giovec_t', - 'Size' => '16', - 'Type' => 'Struct' - }, - '3748' => { - 'BaseType' => '3760', - 'Header' => 'gnutls.h', - 'Line' => '1612', - 'Name' => 'gnutls_pull_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3760' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '2660' - }, - '1' => { - 'type' => '184' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '214', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '378705' => { - 'Line' => '43', - 'Memb' => { - '0' => { - 'name' => 'trusted_cas', - 'offset' => '0', - 'type' => '112890' - }, - '1' => { - 'name' => 'trusted_ca_size', - 'offset' => '8', - 'type' => '130' - }, - '2' => { - 'name' => 'named_certs', - 'offset' => '16', - 'type' => '1251491' - }, - '3' => { - 'name' => 'named_cert_size', - 'offset' => '24', - 'type' => '130' - }, - '4' => { - 'name' => 'crls', - 'offset' => '32', - 'type' => '567509' - }, - '5' => { - 'name' => 'crl_size', - 'offset' => '40', - 'type' => '130' - } - }, - 'Name' => 'struct node_st', - 'Size' => '48', - 'Source' => 'verify-high.c', - 'Type' => 'Struct' - }, - '378710' => { - 'BaseType' => '378705', - 'Name' => 'struct node_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '378993' => { - 'BaseType' => '371343', - 'Name' => 'gnutls_typed_vdata_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3791' => { - 'BaseType' => '3803', - 'Header' => 'gnutls.h', - 'Line' => '1614', - 'Name' => 'gnutls_push_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '379919' => { - 'BaseType' => '111966', - 'Name' => 'gnutls_certificate_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '380249' => { - 'BaseType' => '1815', - 'Name' => 'gnutls_kx_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3803' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, void const*, size_t)', - 'Param' => { - '0' => { - 'type' => '2660' - }, - '1' => { - 'type' => '291' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '214', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3834' => { - 'BaseType' => '3846', - 'Header' => 'gnutls.h', - 'Line' => '1618', - 'Name' => 'gnutls_pull_timeout_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3846' => { - 'Name' => 'int(*)(gnutls_transport_ptr_t, unsigned int)', - 'Param' => { - '0' => { - 'type' => '2660' - }, - '1' => { - 'type' => '130' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3872' => { - 'BaseType' => '3884', - 'Header' => 'gnutls.h', - 'Line' => '1621', - 'Name' => 'gnutls_vec_push_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '388314' => { - 'BaseType' => '17429', - 'Header' => 'gnutls.h', - 'Line' => '1536', - 'Name' => 'mutex_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '388353' => { - 'BaseType' => '17429', - 'Header' => 'gnutls.h', - 'Line' => '1539', - 'Name' => 'mutex_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '388398' => { - 'BaseType' => '388410', - 'Header' => 'gnutls.h', - 'Line' => '1548', - 'Name' => 'gnutls_is_secure_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3884' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, giovec_t const*, int)', - 'Param' => { - '0' => { - 'type' => '2660' - }, - '1' => { - 'type' => '3915' - }, - '2' => { - 'type' => '70' - } - }, - 'Return' => '214', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '388410' => { - 'Name' => 'int(*)(void const*)', - 'Param' => { - '0' => { - 'type' => '291' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '388460' => { - 'BaseType' => '388472', - 'Header' => 'gnutls.h', - 'Line' => '1550', - 'Name' => 'gnutls_realloc_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '388472' => { - 'Name' => 'void*(*)(void*, size_t)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '52' - } - }, - 'Return' => '184', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3915' => { - 'BaseType' => '3921', - 'Name' => 'giovec_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3921' => { - 'BaseType' => '3736', - 'Name' => 'giovec_t const', - 'Size' => '16', - 'Type' => 'Const' - }, - '3926' => { - 'BaseType' => '3938', - 'Header' => 'gnutls.h', - 'Line' => '1624', - 'Name' => 'gnutls_errno_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3938' => { - 'Name' => 'int(*)(gnutls_transport_ptr_t)', - 'Param' => { - '0' => { - 'type' => '2660' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3959' => { - 'Header' => 'gnutls_str.h', - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'allocd', - 'offset' => '0', - 'type' => '5817' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '5817' - }, - '2' => { - 'name' => 'max_length', - 'offset' => '16', - 'type' => '52' - }, - '3' => { - 'name' => 'length', - 'offset' => '24', - 'type' => '52' - } - }, - 'Name' => 'struct gnutls_buffer_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '4020' => { - 'BaseType' => '184', - 'Header' => 'gnutls.h', - 'Line' => '2240', - 'Name' => 'gnutls_ext_priv_data_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4032' => { - 'BaseType' => '4038', - 'Name' => 'unsigned char const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4038' => { - 'BaseType' => '123', - 'Name' => 'unsigned char const', - 'Size' => '1', - 'Type' => 'Const' - }, - '4043' => { - 'BaseType' => '4055', - 'Header' => 'openpgp.h', - 'Line' => '317', - 'Name' => 'gnutls_openpgp_recv_key_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4055' => { - 'Name' => 'int(*)(gnutls_session_t, unsigned char const*, unsigned int, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '4032' - }, - '2' => { - 'type' => '130' - }, - '3' => { - 'type' => '3665' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4091' => { - 'Header' => 'abstract.h', - 'Line' => '451', - 'Memb' => { - '0' => { - 'name' => 'pubkey', - 'offset' => '0', - 'type' => '3631' - }, - '1' => { - 'name' => 'cert', - 'offset' => '8', - 'type' => '3192' - }, - '2' => { - 'name' => 'type', - 'offset' => '24', - 'type' => '2292' - } - }, - 'Name' => 'struct gnutls_pcert_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '4144' => { - 'BaseType' => '4091', - 'Header' => 'abstract.h', - 'Line' => '455', - 'Name' => 'gnutls_pcert_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '4156' => { - 'BaseType' => '4144', - 'Name' => 'gnutls_pcert_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '423019' => { - 'BaseType' => '423031', - 'Header' => 'gnutls.h', - 'Line' => '1336', - 'Name' => 'gnutls_anon_server_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '423031' => { - 'BaseType' => '423037', - 'Name' => 'struct gnutls_anon_server_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '423037' => { - 'Header' => 'anon.h', - 'Line' => '27', - 'Memb' => { - '0' => { - 'name' => 'dh_params', - 'offset' => '0', - 'type' => '2759' - }, - '1' => { - 'name' => 'params_func', - 'offset' => '8', - 'type' => '120581' - } - }, - 'Name' => 'struct gnutls_anon_server_credentials_st', - 'Size' => '16', - 'Type' => 'Struct' - }, - '423074' => { - 'BaseType' => '423086', - 'Header' => 'gnutls.h', - 'Line' => '1338', - 'Name' => 'gnutls_anon_client_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '423086' => { - 'BaseType' => '423092', - 'Name' => 'struct gnutls_anon_client_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '423092' => { - 'Header' => 'anon.h', - 'Line' => '35', - 'Memb' => { - '0' => { - 'name' => 'dummy', - 'offset' => '0', - 'type' => '70' - } - }, - 'Name' => 'struct gnutls_anon_client_credentials_st', - 'Size' => '4', - 'Type' => 'Struct' - }, - '430223' => { - 'BaseType' => '423019', - 'Name' => 'gnutls_anon_server_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '430317' => { - 'BaseType' => '423074', - 'Name' => 'gnutls_anon_client_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '43323' => { - 'BaseType' => '43335', - 'Header' => 'gnutls.h', - 'Line' => '1546', - 'Name' => 'gnutls_alloc_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '43335' => { - 'Name' => 'void*(*)(size_t)', - 'Param' => { - '0' => { - 'type' => '52' - } - }, - 'Return' => '184', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4372' => { - 'Header' => 'gnutls_int.h', - 'Line' => '146', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_STREAM', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_DGRAM', - 'value' => '1' - } - }, - 'Name' => 'enum transport_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '4401' => { - 'BaseType' => '4372', - 'Header' => 'gnutls_int.h', - 'Line' => '149', - 'Name' => 'transport_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '440263' => { - 'Header' => 'gnutls.h', - 'Line' => '1684', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_RANDOM_ART_OPENSSH', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_random_art', - 'Size' => '4', - 'Type' => 'Enum' - }, - '440287' => { - 'BaseType' => '440263', - 'Header' => 'gnutls.h', - 'Line' => '1686', - 'Name' => 'gnutls_random_art_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '440299' => { - 'BaseType' => '440311', - 'Header' => 'gnutls.h', - 'Line' => '1791', - 'Name' => 'gnutls_psk_server_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '440311' => { - 'BaseType' => '440317', - 'Name' => 'struct gnutls_psk_server_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '440317' => { - 'Header' => 'psk.h', - 'Line' => '35', - 'Memb' => { - '0' => { - 'name' => 'password_file', - 'offset' => '0', - 'type' => '208' - }, - '1' => { - 'name' => 'pwd_callback', - 'offset' => '8', - 'type' => '448220' - }, - '2' => { - 'name' => 'dh_params', - 'offset' => '16', - 'type' => '2759' - }, - '3' => { - 'name' => 'params_func', - 'offset' => '24', - 'type' => '120581' - }, - '4' => { - 'name' => 'hint', - 'offset' => '32', - 'type' => '208' - } - }, - 'Name' => 'struct gnutls_psk_server_credentials_st', - 'Size' => '40', - 'Type' => 'Struct' - }, - '440390' => { - 'BaseType' => '440402', - 'Header' => 'gnutls.h', - 'Line' => '1832', - 'Name' => 'gnutls_psk_server_credentials_function', - 'Type' => 'Typedef' - }, - '440402' => { - 'Name' => 'int()(gnutls_session_t, char const*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '105' - }, - '2' => { - 'type' => '3665' - } - }, - 'Return' => '70', - 'Type' => 'Func' - }, - '4412' => { - 'Header' => 'gnutls_int.h', - 'Line' => '151', - 'Memb' => { - '0' => { - 'name' => 'RECORD_FLUSH', - 'value' => '0' - }, - '1' => { - 'name' => 'RECORD_CORKED', - 'value' => '1' - } - }, - 'Name' => 'enum record_flush_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '4441' => { - 'BaseType' => '4412', - 'Header' => 'gnutls_int.h', - 'Line' => '154', - 'Name' => 'record_flush_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '4452' => { - 'Name' => 'int(*)(void*, void const*, size_t)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '291' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '448220' => { - 'BaseType' => '440390', - 'Name' => 'gnutls_psk_server_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4483' => { - 'Name' => 'int(*)(void*, void const*, size_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '291' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '184' - }, - '4' => { - 'type' => '52' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '45' => { - 'Name' => 'long', - 'Size' => '8', - 'Type' => 'Intrinsic' - }, - '4524' => { - 'Name' => 'void(*)(void*, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '184' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4551' => { - 'Name' => 'int(*)(void*, void const*, size_t, void const*, size_t, size_t, void const*, size_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '291' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '291' - }, - '4' => { - 'type' => '52' - }, - '5' => { - 'type' => '52' - }, - '6' => { - 'type' => '291' - }, - '7' => { - 'type' => '52' - }, - '8' => { - 'type' => '184' - }, - '9' => { - 'type' => '52' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4617' => { - 'Name' => 'int(*)(void*, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '184' - }, - '1' => { - 'type' => '184' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4648' => { - 'BaseType' => '184', - 'Header' => 'crypto-backend.h', - 'Line' => '84', - 'Name' => 'bigint_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4690' => { - 'Header' => 'crypto-backend.h', - 'Line' => '102', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_MPI_FORMAT_USG', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_MPI_FORMAT_STD', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_MPI_FORMAT_PGP', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_bigint_format_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '469673' => { - 'BaseType' => '2500', - 'Name' => 'gnutls_sign_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4701' => { - 'Header' => 'crypto-backend.h', - 'Line' => '105', - 'Memb' => { - '0' => { - 'name' => 'bigint_init', - 'offset' => '0', - 'type' => '5035' - }, - '1' => { - 'name' => 'bigint_init_multi', - 'offset' => '8', - 'type' => '5057' - }, - '10' => { - 'name' => 'bigint_get_nbits', - 'offset' => '80', - 'type' => '5256' - }, - '11' => { - 'name' => 'bigint_powm', - 'offset' => '88', - 'type' => '5292' - }, - '12' => { - 'name' => 'bigint_addm', - 'offset' => '96', - 'type' => '5292' - }, - '13' => { - 'name' => 'bigint_subm', - 'offset' => '104', - 'type' => '5292' - }, - '14' => { - 'name' => 'bigint_mulm', - 'offset' => '112', - 'type' => '5292' - }, - '15' => { - 'name' => 'bigint_add', - 'offset' => '120', - 'type' => '5162' - }, - '16' => { - 'name' => 'bigint_sub', - 'offset' => '128', - 'type' => '5162' - }, - '17' => { - 'name' => 'bigint_mul', - 'offset' => '136', - 'type' => '5162' - }, - '18' => { - 'name' => 'bigint_add_ui', - 'offset' => '144', - 'type' => '5323' - }, - '19' => { - 'name' => 'bigint_sub_ui', - 'offset' => '152', - 'type' => '5323' - }, - '2' => { - 'name' => 'bigint_release', - 'offset' => '16', - 'type' => '5074' - }, - '20' => { - 'name' => 'bigint_mul_ui', - 'offset' => '160', - 'type' => '5323' - }, - '21' => { - 'name' => 'bigint_div', - 'offset' => '168', - 'type' => '5162' - }, - '22' => { - 'name' => 'bigint_prime_check', - 'offset' => '176', - 'type' => '5344' - }, - '23' => { - 'name' => 'bigint_scan', - 'offset' => '184', - 'type' => '5380' - }, - '24' => { - 'name' => 'bigint_print', - 'offset' => '192', - 'type' => '5422' - }, - '3' => { - 'name' => 'bigint_clear', - 'offset' => '24', - 'type' => '5074' - }, - '4' => { - 'name' => 'bigint_cmp', - 'offset' => '32', - 'type' => '5105' - }, - '5' => { - 'name' => 'bigint_cmp_ui', - 'offset' => '40', - 'type' => '5131' - }, - '6' => { - 'name' => 'bigint_modm', - 'offset' => '48', - 'type' => '5162' - }, - '7' => { - 'name' => 'bigint_set', - 'offset' => '56', - 'type' => '5188' - }, - '8' => { - 'name' => 'bigint_copy', - 'offset' => '64', - 'type' => '5209' - }, - '9' => { - 'name' => 'bigint_set_ui', - 'offset' => '72', - 'type' => '5235' - } - }, - 'Name' => 'struct gnutls_crypto_bigint', - 'Size' => '200', - 'Type' => 'Struct' - }, - '482258' => { - 'Header' => 'gnutls.h', - 'Line' => '346', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_AL_WARNING', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_AL_FATAL', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_alert_level_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '482458' => { - 'Header' => 'gnutls.h', - 'Line' => '417', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_A_CLOSE_NOTIFY', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_A_UNEXPECTED_MESSAGE', - 'value' => '10' - }, - '10' => { - 'name' => 'GNUTLS_A_CERTIFICATE_REVOKED', - 'value' => '44' - }, - '11' => { - 'name' => 'GNUTLS_A_CERTIFICATE_EXPIRED', - 'value' => '45' - }, - '12' => { - 'name' => 'GNUTLS_A_CERTIFICATE_UNKNOWN', - 'value' => '46' - }, - '13' => { - 'name' => 'GNUTLS_A_ILLEGAL_PARAMETER', - 'value' => '47' - }, - '14' => { - 'name' => 'GNUTLS_A_UNKNOWN_CA', - 'value' => '48' - }, - '15' => { - 'name' => 'GNUTLS_A_ACCESS_DENIED', - 'value' => '49' - }, - '16' => { - 'name' => 'GNUTLS_A_DECODE_ERROR', - 'value' => '50' - }, - '17' => { - 'name' => 'GNUTLS_A_DECRYPT_ERROR', - 'value' => '51' - }, - '18' => { - 'name' => 'GNUTLS_A_EXPORT_RESTRICTION', - 'value' => '60' - }, - '19' => { - 'name' => 'GNUTLS_A_PROTOCOL_VERSION', - 'value' => '70' - }, - '2' => { - 'name' => 'GNUTLS_A_BAD_RECORD_MAC', - 'value' => '20' - }, - '20' => { - 'name' => 'GNUTLS_A_INSUFFICIENT_SECURITY', - 'value' => '71' - }, - '21' => { - 'name' => 'GNUTLS_A_INTERNAL_ERROR', - 'value' => '80' - }, - '22' => { - 'name' => 'GNUTLS_A_USER_CANCELED', - 'value' => '90' - }, - '23' => { - 'name' => 'GNUTLS_A_NO_RENEGOTIATION', - 'value' => '100' - }, - '24' => { - 'name' => 'GNUTLS_A_UNSUPPORTED_EXTENSION', - 'value' => '110' - }, - '25' => { - 'name' => 'GNUTLS_A_CERTIFICATE_UNOBTAINABLE', - 'value' => '111' - }, - '26' => { - 'name' => 'GNUTLS_A_UNRECOGNIZED_NAME', - 'value' => '112' - }, - '27' => { - 'name' => 'GNUTLS_A_UNKNOWN_PSK_IDENTITY', - 'value' => '115' - }, - '28' => { - 'name' => 'GNUTLS_A_NO_APPLICATION_PROTOCOL', - 'value' => '120' - }, - '3' => { - 'name' => 'GNUTLS_A_DECRYPTION_FAILED', - 'value' => '21' - }, - '4' => { - 'name' => 'GNUTLS_A_RECORD_OVERFLOW', - 'value' => '22' - }, - '5' => { - 'name' => 'GNUTLS_A_DECOMPRESSION_FAILURE', - 'value' => '30' - }, - '6' => { - 'name' => 'GNUTLS_A_HANDSHAKE_FAILURE', - 'value' => '40' - }, - '7' => { - 'name' => 'GNUTLS_A_SSL3_NO_CERTIFICATE', - 'value' => '41' - }, - '8' => { - 'name' => 'GNUTLS_A_BAD_CERTIFICATE', - 'value' => '42' - }, - '9' => { - 'name' => 'GNUTLS_A_UNSUPPORTED_CERTIFICATE', - 'value' => '43' - } - }, - 'Name' => 'enum gnutls_alert_description_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '500942' => { - 'BaseType' => '17429', - 'Header' => 'gnutls.h', - 'Line' => '1537', - 'Name' => 'mutex_lock_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '500954' => { - 'BaseType' => '17429', - 'Header' => 'gnutls.h', - 'Line' => '1538', - 'Name' => 'mutex_unlock_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5029' => { - 'BaseType' => '4648', - 'Name' => 'bigint_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5035' => { - 'Name' => 'int(*)(bigint_t*)', - 'Param' => { - '0' => { - 'type' => '5029' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5057' => { - 'Name' => 'int(*)(bigint_t*, ...)', - 'Param' => { - '0' => { - 'type' => '5029' - }, - '1' => { - 'type' => '-1' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5074' => { - 'Name' => 'void(*)(bigint_t)', - 'Param' => { - '0' => { - 'type' => '4648' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5100' => { - 'BaseType' => '4648', - 'Name' => 'bigint_t const', - 'Size' => '8', - 'Type' => 'Const' - }, - '5105' => { - 'Name' => 'int(*)(bigint_t const, bigint_t const)', - 'Param' => { - '0' => { - 'type' => '5100' - }, - '1' => { - 'type' => '5100' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '51156' => { - 'BaseType' => '51162', - 'Name' => 'gnutls_compression_method_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '51162' => { - 'BaseType' => '2021', - 'Name' => 'gnutls_compression_method_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '5131' => { - 'Name' => 'int(*)(bigint_t const, unsigned long)', - 'Param' => { - '0' => { - 'type' => '5100' - }, - '1' => { - 'type' => '63' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5162' => { - 'Name' => 'int(*)(bigint_t, bigint_t const, bigint_t const)', - 'Param' => { - '0' => { - 'type' => '4648' - }, - '1' => { - 'type' => '5100' - }, - '2' => { - 'type' => '5100' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5188' => { - 'Name' => 'int(*)(bigint_t, bigint_t const)', - 'Param' => { - '0' => { - 'type' => '4648' - }, - '1' => { - 'type' => '5100' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '519149' => { - 'Header' => 'gnutls.h', - 'Line' => '536', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_OPENPGP_CERT', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_OPENPGP_CERT_FINGERPRINT', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_openpgp_crt_status_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '519685' => { - 'Header' => 'gnutls.h', - 'Line' => '763', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CB_TLS_UNIQUE', - 'value' => '0' - } - }, - 'Name' => 'enum gnutls_channel_binding_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '52' => { - 'BaseType' => '63', - 'Header' => 'stddef.h', - 'Line' => '216', - 'Name' => 'size_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5209' => { - 'Name' => 'bigint_t(*)(bigint_t const)', - 'Param' => { - '0' => { - 'type' => '5100' - } - }, - 'Return' => '4648', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5235' => { - 'Name' => 'int(*)(bigint_t, unsigned long)', - 'Param' => { - '0' => { - 'type' => '4648' - }, - '1' => { - 'type' => '63' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5256' => { - 'Name' => 'unsigned int(*)(bigint_t const)', - 'Param' => { - '0' => { - 'type' => '5100' - } - }, - 'Return' => '130', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5292' => { - 'Name' => 'int(*)(bigint_t, bigint_t const, bigint_t const, bigint_t const)', - 'Param' => { - '0' => { - 'type' => '4648' - }, - '1' => { - 'type' => '5100' - }, - '2' => { - 'type' => '5100' - }, - '3' => { - 'type' => '5100' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5323' => { - 'Name' => 'int(*)(bigint_t, bigint_t const, unsigned long)', - 'Param' => { - '0' => { - 'type' => '4648' - }, - '1' => { - 'type' => '5100' - }, - '2' => { - 'type' => '63' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5344' => { - 'Name' => 'int(*)(bigint_t const)', - 'Param' => { - '0' => { - 'type' => '5100' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '534467' => { - 'BaseType' => '2672', - 'Name' => 'gnutls_session_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5380' => { - 'Name' => 'int(*)(bigint_t, void const*, size_t, gnutls_bigint_format_t)', - 'Param' => { - '0' => { - 'type' => '4648' - }, - '1' => { - 'type' => '291' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '4690' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5416' => { - 'BaseType' => '52', - 'Name' => 'size_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5422' => { - 'Name' => 'int(*)(bigint_t const, void*, size_t*, gnutls_bigint_format_t)', - 'Param' => { - '0' => { - 'type' => '5100' - }, - '1' => { - 'type' => '184' - }, - '2' => { - 'type' => '5416' - }, - '3' => { - 'type' => '4690' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5428' => { - 'BaseType' => '4701', - 'Header' => 'crypto-backend.h', - 'Line' => '168', - 'Name' => 'gnutls_crypto_bigint_st', - 'Size' => '200', - 'Type' => 'Typedef' - }, - '545129' => { - 'BaseType' => '545141', - 'Header' => 'gnutls.h', - 'Line' => '1313', - 'Name' => 'gnutls_x509_crl_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '545141' => { - 'BaseType' => '545147', - 'Name' => 'struct gnutls_x509_crl_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '545147' => { - 'Header' => 'x509_int.h', - 'Line' => '51', - 'Memb' => { - '0' => { - 'name' => 'crl', - 'offset' => '0', - 'type' => '117419' - }, - '1' => { - 'name' => 'expanded', - 'offset' => '8', - 'type' => '130' - }, - '2' => { - 'name' => 'rcache', - 'offset' => '16', - 'type' => '117419' - }, - '3' => { - 'name' => 'rcache_idx', - 'offset' => '24', - 'type' => '130' - }, - '4' => { - 'name' => 'use_extensions', - 'offset' => '28', - 'type' => '70' - }, - '5' => { - 'name' => 'der', - 'offset' => '32', - 'type' => '3192' - }, - '6' => { - 'name' => 'raw_issuer_dn', - 'offset' => '48', - 'type' => '3192' - } - }, - 'Name' => 'struct gnutls_x509_crl_int', - 'Size' => '64', - 'Type' => 'Struct' - }, - '5496' => { - 'BaseType' => '4648', - 'Name' => 'bigint_t[16]', - 'Size' => '128', - 'Type' => 'Array' - }, - '5512' => { - 'Header' => 'crypto-backend.h', - 'Line' => '177', - 'Memb' => { - '0' => { - 'name' => 'params', - 'offset' => '0', - 'type' => '5496' - }, - '1' => { - 'name' => 'params_nr', - 'offset' => '128', - 'type' => '130' - }, - '2' => { - 'name' => 'flags', - 'offset' => '132', - 'type' => '130' - }, - '3' => { - 'name' => 'algo', - 'offset' => '136', - 'type' => '2348' - } - }, - 'Name' => 'struct gnutls_pk_params_st', - 'Size' => '144', - 'Type' => 'Struct' - }, - '5523' => { - 'Header' => 'gnutls_int.h', - 'Line' => '220', - 'Memb' => { - '0' => { - 'name' => 'STATE0', - 'value' => '0' - }, - '1' => { - 'name' => 'STATE1', - 'value' => '1' - }, - '10' => { - 'name' => 'STATE10', - 'value' => '10' - }, - '11' => { - 'name' => 'STATE11', - 'value' => '11' - }, - '12' => { - 'name' => 'STATE12', - 'value' => '12' - }, - '13' => { - 'name' => 'STATE13', - 'value' => '13' - }, - '14' => { - 'name' => 'STATE14', - 'value' => '14' - }, - '15' => { - 'name' => 'STATE15', - 'value' => '15' - }, - '16' => { - 'name' => 'STATE16', - 'value' => '16' - }, - '17' => { - 'name' => 'STATE17', - 'value' => '17' - }, - '18' => { - 'name' => 'STATE18', - 'value' => '18' - }, - '19' => { - 'name' => 'STATE20', - 'value' => '20' - }, - '2' => { - 'name' => 'STATE2', - 'value' => '2' - }, - '20' => { - 'name' => 'STATE21', - 'value' => '21' - }, - '21' => { - 'name' => 'STATE22', - 'value' => '22' - }, - '22' => { - 'name' => 'STATE30', - 'value' => '30' - }, - '23' => { - 'name' => 'STATE31', - 'value' => '31' - }, - '24' => { - 'name' => 'STATE40', - 'value' => '40' - }, - '25' => { - 'name' => 'STATE41', - 'value' => '41' - }, - '26' => { - 'name' => 'STATE50', - 'value' => '50' - }, - '27' => { - 'name' => 'STATE60', - 'value' => '60' - }, - '28' => { - 'name' => 'STATE61', - 'value' => '61' - }, - '29' => { - 'name' => 'STATE62', - 'value' => '62' - }, - '3' => { - 'name' => 'STATE3', - 'value' => '3' - }, - '4' => { - 'name' => 'STATE4', - 'value' => '4' - }, - '5' => { - 'name' => 'STATE5', - 'value' => '5' - }, - '6' => { - 'name' => 'STATE6', - 'value' => '6' - }, - '7' => { - 'name' => 'STATE7', - 'value' => '7' - }, - '8' => { - 'name' => 'STATE8', - 'value' => '8' - }, - '9' => { - 'name' => 'STATE9', - 'value' => '9' - } - }, - 'Name' => 'enum handshake_state_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '554659' => { - 'BaseType' => '554670', - 'Header' => 'pkcs12.h', - 'Line' => '37', - 'Name' => 'gnutls_pkcs12_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '554670' => { - 'BaseType' => '554676', - 'Name' => 'struct gnutls_pkcs12_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '554676' => { - 'Header' => 'x509_int.h', - 'Line' => '312', - 'Memb' => { - '0' => { - 'name' => 'pkcs12', - 'offset' => '0', - 'type' => '117419' - }, - '1' => { - 'name' => 'expanded', - 'offset' => '8', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_pkcs12_int', - 'Size' => '16', - 'Type' => 'Struct' - }, - '555052' => { - 'BaseType' => '555063', - 'Header' => 'ocsp.h', - 'Line' => '192', - 'Name' => 'gnutls_ocsp_resp_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '555063' => { - 'BaseType' => '555069', - 'Name' => 'struct gnutls_ocsp_resp_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '555069' => { - 'Line' => '41', - 'Memb' => { - '0' => { - 'name' => 'resp', - 'offset' => '0', - 'type' => '117419' - }, - '1' => { - 'name' => 'response_type_oid', - 'offset' => '8', - 'type' => '3192' - }, - '2' => { - 'name' => 'basicresp', - 'offset' => '24', - 'type' => '117419' - }, - '3' => { - 'name' => 'der', - 'offset' => '32', - 'type' => '3192' - }, - '4' => { - 'name' => 'init', - 'offset' => '48', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_ocsp_resp_int', - 'Size' => '56', - 'Source' => 'ocsp.c', - 'Type' => 'Struct' - }, - '564296' => { - 'BaseType' => '111785', - 'Name' => 'gnutls_x509_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '564554' => { - 'BaseType' => '112890', - 'Name' => 'gnutls_x509_crt_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '565972' => { - 'BaseType' => '113318', - 'Name' => 'gnutls_x509_trust_list_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '567509' => { - 'BaseType' => '545129', - 'Name' => 'gnutls_x509_crl_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5720' => { - 'BaseType' => '5523', - 'Header' => 'gnutls_int.h', - 'Line' => '227', - 'Name' => 'handshake_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '5731' => { - 'Header' => 'gnutls_int.h', - 'Line' => '229', - 'Memb' => { - '0' => { - 'name' => 'SHB_SEND1', - 'value' => '0' - }, - '1' => { - 'name' => 'SHB_SEND2', - 'value' => '1' - }, - '2' => { - 'name' => 'SHB_RECV', - 'value' => '2' - } - }, - 'Name' => 'enum heartbeat_state_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '5766' => { - 'BaseType' => '5731', - 'Header' => 'gnutls_int.h', - 'Line' => '233', - 'Name' => 'heartbeat_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '576827' => { - 'Header' => 'gnutls.h', - 'Line' => '1067', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SUPPLEMENTAL_UNKNOWN', - 'value' => '0' - } - }, - 'Name' => 'enum gnutls_supplemental_data_format_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '577549' => { - 'BaseType' => '285707', - 'Header' => 'gnutls.h', - 'Line' => '2294', - 'Name' => 'gnutls_supp_recv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '577561' => { - 'BaseType' => '285761', - 'Header' => 'gnutls.h', - 'Line' => '2296', - 'Name' => 'gnutls_supp_send_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5777' => { - 'Header' => 'gnutls_int.h', - 'Line' => '235', - 'Memb' => { - '0' => { - 'name' => 'RECV_STATE_0', - 'value' => '0' - }, - '1' => { - 'name' => 'RECV_STATE_DTLS_RETRANSMIT', - 'value' => '1' - } - }, - 'Name' => 'enum recv_state_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '5806' => { - 'BaseType' => '5777', - 'Header' => 'gnutls_int.h', - 'Line' => '238', - 'Name' => 'recv_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '5817' => { - 'BaseType' => '788', - 'Name' => 'uint8_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5823' => { - 'BaseType' => '3959', - 'Header' => 'gnutls_str.h', - 'Line' => '42', - 'Name' => 'gnutls_buffer_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '5866' => { - 'Header' => 'gnutls_int.h', - 'Line' => '268', - 'Memb' => { - '0' => { - 'name' => 'CIPHER_STREAM', - 'value' => '0' - }, - '1' => { - 'name' => 'CIPHER_BLOCK', - 'value' => '1' - }, - '2' => { - 'name' => 'CIPHER_AEAD', - 'value' => '2' - } - }, - 'Name' => 'enum cipher_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '5878' => { - 'Header' => 'gnutls_int.h', - 'Line' => '274', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CHANGE_CIPHER_SPEC', - 'value' => '20' - }, - '1' => { - 'name' => 'GNUTLS_ALERT', - 'value' => '21' - }, - '2' => { - 'name' => 'GNUTLS_HANDSHAKE', - 'value' => '22' - }, - '3' => { - 'name' => 'GNUTLS_APPLICATION_DATA', - 'value' => '23' - }, - '4' => { - 'name' => 'GNUTLS_HEARTBEAT', - 'value' => '24' - } - }, - 'Name' => 'enum content_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '592295' => { - 'BaseType' => '595860', - 'Header' => 'crypto.h', - 'Line' => '32', - 'Name' => 'gnutls_cipher_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '592312' => { - 'Line' => '33', - 'Memb' => { - '0' => { - 'name' => 'ctx_enc', - 'offset' => '0', - 'type' => '7861' - }, - '1' => { - 'name' => 'ctx_dec', - 'offset' => '80', - 'type' => '7861' - } - }, - 'Name' => 'struct api_cipher_hd_st', - 'Size' => '160', - 'Source' => 'crypto-api.c', - 'Type' => 'Struct' - }, - '592349' => { - 'BaseType' => '600456', - 'Header' => 'crypto.h', - 'Line' => '65', - 'Name' => 'gnutls_aead_cipher_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '592366' => { - 'Line' => '618', - 'Memb' => { - '0' => { - 'name' => 'ctx_enc', - 'offset' => '0', - 'type' => '7861' - } - }, - 'Name' => 'struct api_aead_cipher_hd_st', - 'Size' => '80', - 'Source' => 'crypto-api.c', - 'Type' => 'Struct' - }, - '592393' => { - 'BaseType' => '592404', - 'Header' => 'crypto.h', - 'Line' => '89', - 'Name' => 'gnutls_hash_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '592404' => { - 'BaseType' => '592410', - 'Name' => 'struct hash_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '592410' => { - 'Name' => 'struct hash_hd_st', - 'Type' => 'Struct' - }, - '592415' => { - 'BaseType' => '592426', - 'Header' => 'crypto.h', - 'Line' => '90', - 'Name' => 'gnutls_hmac_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '592426' => { - 'BaseType' => '592432', - 'Name' => 'struct hmac_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '592432' => { - 'Name' => 'struct hmac_hd_st', - 'Type' => 'Struct' - }, - '5926' => { - 'BaseType' => '5878', - 'Header' => 'gnutls_int.h', - 'Line' => '278', - 'Name' => 'content_type_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '594444' => { - 'BaseType' => '592312', - 'Line' => '36', - 'Name' => 'api_cipher_hd_st', - 'Size' => '160', - 'Source' => 'crypto-api.c', - 'Type' => 'Typedef' - }, - '594455' => { - 'BaseType' => '592366', - 'Line' => '620', - 'Name' => 'api_aead_cipher_hd_st', - 'Size' => '80', - 'Source' => 'crypto-api.c', - 'Type' => 'Typedef' - }, - '595854' => { - 'BaseType' => '592295', - 'Name' => 'gnutls_cipher_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '595860' => { - 'BaseType' => '594444', - 'Name' => 'api_cipher_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '598192' => { - 'BaseType' => '592415', - 'Name' => 'gnutls_hmac_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '599201' => { - 'BaseType' => '592393', - 'Name' => 'gnutls_hash_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '600450' => { - 'BaseType' => '592349', - 'Name' => 'gnutls_aead_cipher_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '600456' => { - 'BaseType' => '594455', - 'Name' => 'api_aead_cipher_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '604850' => { - 'Header' => 'openpgp.h', - 'Line' => '49', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_OPENPGP_FMT_RAW', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_OPENPGP_FMT_BASE64', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_openpgp_crt_fmt', - 'Size' => '4', - 'Type' => 'Enum' - }, - '604879' => { - 'BaseType' => '604850', - 'Header' => 'openpgp.h', - 'Line' => '52', - 'Name' => 'gnutls_openpgp_crt_fmt_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '6052' => { - 'BaseType' => '788', - 'Name' => 'uint8_t[12]', - 'Size' => '12', - 'Type' => 'Array' - }, - '60562' => { - 'Header' => 'crypto.h', - 'Line' => '128', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_RND_NONCE', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_RND_RANDOM', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_RND_KEY', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_rnd_level', - 'Size' => '4', - 'Type' => 'Enum' - }, - '60597' => { - 'BaseType' => '60562', - 'Header' => 'crypto.h', - 'Line' => '132', - 'Name' => 'gnutls_rnd_level_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '6068' => { - 'Header' => 'gnutls_int.h', - 'Line' => '308', - 'Memb' => { - '0' => { - 'name' => 'htype', - 'offset' => '0', - 'type' => '2144' - }, - '1' => { - 'name' => 'length', - 'offset' => '4', - 'type' => '810' - }, - '2' => { - 'name' => 'sequence', - 'offset' => '8', - 'type' => '799' - }, - '3' => { - 'name' => 'start_offset', - 'offset' => '12', - 'type' => '810' - }, - '4' => { - 'name' => 'end_offset', - 'offset' => '16', - 'type' => '810' - }, - '5' => { - 'name' => 'header', - 'offset' => '20', - 'type' => '6052' - }, - '6' => { - 'name' => 'header_size', - 'offset' => '32', - 'type' => '70' - }, - '7' => { - 'name' => 'data', - 'offset' => '40', - 'type' => '5823' - } - }, - 'Name' => 'struct handshake_buffer_st', - 'Size' => '72', - 'Type' => 'Struct' - }, - '606933' => { - 'BaseType' => '606944', - 'Header' => 'urls.h', - 'Line' => '40', - 'Name' => 'gnutls_privkey_import_url_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '606944' => { - 'Name' => 'int(*)(gnutls_privkey_t, char const*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '111762' - }, - '1' => { - 'type' => '105' - }, - '2' => { - 'type' => '130' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '606975' => { - 'BaseType' => '606986', - 'Header' => 'urls.h', - 'Line' => '43', - 'Name' => 'gnutls_x509_crt_import_url_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '606986' => { - 'Name' => 'int(*)(gnutls_x509_crt_t, char const*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '111797' - }, - '1' => { - 'type' => '105' - }, - '2' => { - 'type' => '130' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '607017' => { - 'BaseType' => '607028', - 'Header' => 'urls.h', - 'Line' => '49', - 'Name' => 'gnutls_pubkey_import_url_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '607028' => { - 'Name' => 'int(*)(gnutls_pubkey_t, char const*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '3631' - }, - '1' => { - 'type' => '105' - }, - '2' => { - 'type' => '130' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '607059' => { - 'BaseType' => '607070', - 'Header' => 'urls.h', - 'Line' => '56', - 'Name' => 'gnutls_get_raw_issuer_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '607070' => { - 'Name' => 'int(*)(char const*, gnutls_x509_crt_t, gnutls_datum_t*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '105' - }, - '1' => { - 'type' => '111797' - }, - '2' => { - 'type' => '3665' - }, - '3' => { - 'type' => '130' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '607106' => { - 'Header' => 'urls.h', - 'Line' => '59', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '105' - }, - '1' => { - 'name' => 'name_size', - 'offset' => '8', - 'type' => '130' - }, - '2' => { - 'name' => 'import_key', - 'offset' => '16', - 'type' => '606933' - }, - '3' => { - 'name' => 'import_crt', - 'offset' => '24', - 'type' => '606975' - }, - '4' => { - 'name' => 'import_pubkey', - 'offset' => '32', - 'type' => '607017' - }, - '5' => { - 'name' => 'get_issuer', - 'offset' => '40', - 'type' => '607059' - }, - '6' => { - 'name' => 'future1', - 'offset' => '48', - 'type' => '184' - }, - '7' => { - 'name' => 'future2', - 'offset' => '56', - 'type' => '184' - } - }, - 'Name' => 'struct gnutls_custom_url_st', - 'Size' => '64', - 'Type' => 'Struct' - }, - '607215' => { - 'BaseType' => '607106', - 'Header' => 'urls.h', - 'Line' => '68', - 'Name' => 'gnutls_custom_url_st', - 'Size' => '64', - 'Type' => 'Typedef' - }, - '6080' => { - 'BaseType' => '3258', - 'Header' => 'gnutls_int.h', - 'Line' => '349', - 'Name' => 'mbuffer_st', - 'Size' => '80', - 'Type' => 'Typedef' - }, - '6092' => { - 'Header' => 'gnutls_int.h', - 'Line' => '351', - 'Memb' => { - '0' => { - 'name' => 'head', - 'offset' => '0', - 'type' => '6158' - }, - '1' => { - 'name' => 'tail', - 'offset' => '8', - 'type' => '6158' - }, - '2' => { - 'name' => 'length', - 'offset' => '16', - 'type' => '130' - }, - '3' => { - 'name' => 'byte_length', - 'offset' => '24', - 'type' => '52' - } - }, - 'Name' => 'struct mbuffer_head_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '610429' => { - 'BaseType' => '112783', - 'Name' => 'gnutls_pkcs11_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '613892' => { - 'BaseType' => '112716', - 'Name' => 'gnutls_openpgp_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '6158' => { - 'BaseType' => '6080', - 'Name' => 'mbuffer_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '6164' => { - 'BaseType' => '6092', - 'Header' => 'gnutls_int.h', - 'Line' => '357', - 'Name' => 'mbuffer_head_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '616883' => { - 'BaseType' => '607215', - 'Name' => 'gnutls_custom_url_st[]', - 'Size' => '8', - 'Type' => 'Array' - }, - '6176' => { - 'Header' => 'gnutls_int.h', - 'Line' => '362', - 'Memb' => { - '0' => { - 'name' => 'algorithm', - 'offset' => '0', - 'type' => '1869' - }, - '1' => { - 'name' => 'credentials', - 'offset' => '8', - 'type' => '184' - }, - '2' => { - 'name' => 'next', - 'offset' => '16', - 'type' => '6569' - } - }, - 'Name' => 'struct auth_cred_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '6235' => { - 'BaseType' => '6176', - 'Header' => 'gnutls_int.h', - 'Line' => '369', - 'Name' => 'auth_cred_st', - 'Size' => '24', - 'Type' => 'Typedef' - }, - '623824' => { - 'BaseType' => '112649', - 'Name' => 'gnutls_openpgp_crt_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '6247' => { - 'Header' => 'gnutls_int.h', - 'Line' => '371', - 'Memb' => { - '0' => { - 'name' => 'ecdh_params', - 'offset' => '0', - 'type' => '5512' - }, - '1' => { - 'name' => 'ecdh_x', - 'offset' => '144', - 'type' => '4648' - }, - '10' => { - 'name' => 'B', - 'offset' => '360', - 'type' => '4648' - }, - '11' => { - 'name' => 'u', - 'offset' => '368', - 'type' => '4648' - }, - '12' => { - 'name' => 'b', - 'offset' => '376', - 'type' => '4648' - }, - '13' => { - 'name' => 'a', - 'offset' => '384', - 'type' => '4648' - }, - '14' => { - 'name' => 'x', - 'offset' => '392', - 'type' => '4648' - }, - '15' => { - 'name' => 'rsa', - 'offset' => '400', - 'type' => '6553' - }, - '16' => { - 'name' => 'auth_info', - 'offset' => '416', - 'type' => '184' - }, - '17' => { - 'name' => 'auth_info_type', - 'offset' => '424', - 'type' => '1869' - }, - '18' => { - 'name' => 'auth_info_size', - 'offset' => '428', - 'type' => '70' - }, - '19' => { - 'name' => 'crypt_algo', - 'offset' => '432', - 'type' => '788' - }, - '2' => { - 'name' => 'ecdh_y', - 'offset' => '152', - 'type' => '4648' - }, - '20' => { - 'name' => 'cred', - 'offset' => '440', - 'type' => '6569' - }, - '21' => { - 'name' => 'crt_requested', - 'offset' => '448', - 'type' => '70' - }, - '3' => { - 'name' => 'key', - 'offset' => '160', - 'type' => '3192' - }, - '4' => { - 'name' => 'dh_params', - 'offset' => '176', - 'type' => '5512' - }, - '5' => { - 'name' => 'client_Y', - 'offset' => '320', - 'type' => '4648' - }, - '6' => { - 'name' => 'srp_key', - 'offset' => '328', - 'type' => '4648' - }, - '7' => { - 'name' => 'srp_g', - 'offset' => '336', - 'type' => '4648' - }, - '8' => { - 'name' => 'srp_p', - 'offset' => '344', - 'type' => '4648' - }, - '9' => { - 'name' => 'A', - 'offset' => '352', - 'type' => '4648' - } - }, - 'Name' => 'struct gnutls_key_st', - 'Size' => '456', - 'Type' => 'Struct' - }, - '629572' => { - 'BaseType' => '629584', - 'Header' => 'gnutls.h', - 'Line' => '1319', - 'Name' => 'gnutls_x509_crq_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '629584' => { - 'BaseType' => '629590', - 'Name' => 'struct gnutls_x509_crq_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '629590' => { - 'Header' => 'x509_int.h', - 'Line' => '79', - 'Memb' => { - '0' => { - 'name' => 'crq', - 'offset' => '0', - 'type' => '117419' - } - }, - 'Name' => 'struct gnutls_x509_crq_int', - 'Size' => '8', - 'Type' => 'Struct' - }, - '63' => { - 'Name' => 'unsigned long', - 'Size' => '8', - 'Type' => 'Intrinsic' - }, - '630301' => { - 'BaseType' => '630312', - 'Header' => 'pkcs11.h', - 'Line' => '64', - 'Name' => 'gnutls_pkcs11_obj_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '630312' => { - 'BaseType' => '630318', - 'Name' => 'struct gnutls_pkcs11_obj_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '630318' => { - 'Header' => 'pkcs11_int.h', - 'Line' => '46', - 'Memb' => { - '0' => { - 'name' => 'raw', - 'offset' => '0', - 'type' => '3192' - }, - '1' => { - 'name' => 'type', - 'offset' => '16', - 'type' => '630495' - }, - '2' => { - 'name' => 'class', - 'offset' => '24', - 'type' => '637789' - }, - '3' => { - 'name' => 'flags', - 'offset' => '32', - 'type' => '130' - }, - '4' => { - 'name' => 'info', - 'offset' => '40', - 'type' => '637806' - }, - '5' => { - 'name' => 'pubkey', - 'offset' => '48', - 'type' => '637812' - }, - '6' => { - 'name' => 'pk_algorithm', - 'offset' => '112', - 'type' => '2348' - }, - '7' => { - 'name' => 'key_usage', - 'offset' => '116', - 'type' => '130' - }, - '8' => { - 'name' => 'pin', - 'offset' => '120', - 'type' => '116316' - } - }, - 'Name' => 'struct gnutls_pkcs11_obj_st', - 'Size' => '136', - 'Type' => 'Struct' - }, - '630495' => { - 'Header' => 'pkcs11.h', - 'Line' => '333', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_OBJ_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_OBJ_X509_CRT', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_OBJ_PUBKEY', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PKCS11_OBJ_PRIVKEY', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_PKCS11_OBJ_SECRET_KEY', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_PKCS11_OBJ_DATA', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_PKCS11_OBJ_X509_CRT_EXTENSION', - 'value' => '6' - } - }, - 'Name' => 'enum gnutls_pkcs11_obj_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '637789' => { - 'BaseType' => '63', - 'Header' => 'pkcs11.h', - 'Line' => '311', - 'Name' => 'ck_object_class_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '637801' => { - 'Name' => 'struct p11_kit_uri', - 'Type' => 'Struct' - }, - '637806' => { - 'BaseType' => '637801', - 'Name' => 'struct p11_kit_uri*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '637812' => { - 'BaseType' => '3192', - 'Name' => 'gnutls_datum_t[4]', - 'Size' => '64', - 'Type' => 'Array' - }, - '639857' => { - 'BaseType' => '3631', - 'Name' => 'gnutls_pubkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '6553' => { - 'BaseType' => '4648', - 'Name' => 'bigint_t[2]', - 'Size' => '16', - 'Type' => 'Array' - }, - '6569' => { - 'BaseType' => '6235', - 'Name' => 'auth_cred_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '6575' => { - 'BaseType' => '6247', - 'Header' => 'gnutls_int.h', - 'Line' => '422', - 'Name' => 'gnutls_key_st', - 'Size' => '456', - 'Type' => 'Typedef' - }, - '6587' => { - 'BaseType' => '6599', - 'Header' => 'gnutls_int.h', - 'Line' => '430', - 'Name' => 'record_state_st', - 'Size' => '224', - 'Type' => 'Typedef' - }, - '6599' => { - 'Header' => 'gnutls_int.h', - 'Line' => '591', - 'Memb' => { - '0' => { - 'name' => 'mac_secret', - 'offset' => '0', - 'type' => '3192' - }, - '1' => { - 'name' => 'IV', - 'offset' => '16', - 'type' => '3192' - }, - '2' => { - 'name' => 'key', - 'offset' => '32', - 'type' => '3192' - }, - '3' => { - 'name' => 'cipher_state', - 'offset' => '48', - 'type' => '8008' - }, - '4' => { - 'name' => 'compression_state', - 'offset' => '200', - 'type' => '8056' - }, - '5' => { - 'name' => 'sequence_number', - 'offset' => '216', - 'type' => '1469' - } - }, - 'Name' => 'struct record_state_st', - 'Size' => '224', - 'Type' => 'Struct' - }, - '661220' => { - 'Header' => 'dtls.h', - 'Line' => '67', - 'Memb' => { - '0' => { - 'name' => 'record_seq', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'name' => 'hsk_read_seq', - 'offset' => '4', - 'type' => '130' - }, - '2' => { - 'name' => 'hsk_write_seq', - 'offset' => '8', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_dtls_prestate_st', - 'Size' => '12', - 'Type' => 'Struct' - }, - '6690' => { - 'BaseType' => '6702', - 'Header' => 'gnutls_int.h', - 'Line' => '433', - 'Name' => 'record_parameters_st', - 'Size' => '1016', - 'Type' => 'Typedef' - }, - '6702' => { - 'Header' => 'gnutls_int.h', - 'Line' => '609', - 'Memb' => { - '0' => { - 'name' => 'epoch', - 'offset' => '0', - 'type' => '799' - }, - '1' => { - 'name' => 'initialized', - 'offset' => '4', - 'type' => '70' - }, - '10' => { - 'name' => 'write', - 'offset' => '784', - 'type' => '6587' - }, - '11' => { - 'name' => 'send_nonce', - 'offset' => '1008', - 'type' => '130' - }, - '12' => { - 'name' => 'usage_cnt', - 'offset' => '1012', - 'type' => '70' - }, - '2' => { - 'name' => 'compression_algorithm', - 'offset' => '8', - 'type' => '2021' - }, - '3' => { - 'name' => 'cipher', - 'offset' => '16', - 'type' => '7850' - }, - '4' => { - 'name' => 'etm', - 'offset' => '24', - 'type' => '7357' - }, - '5' => { - 'name' => 'mac', - 'offset' => '32', - 'type' => '7511' - }, - '6' => { - 'name' => 'record_sw', - 'offset' => '40', - 'type' => '8457' - }, - '7' => { - 'name' => 'record_sw_head_idx', - 'offset' => '552', - 'type' => '130' - }, - '8' => { - 'name' => 'record_sw_size', - 'offset' => '556', - 'type' => '130' - }, - '9' => { - 'name' => 'read', - 'offset' => '560', - 'type' => '6587' - } - }, - 'Name' => 'struct record_parameters_st', - 'Size' => '1016', - 'Type' => 'Struct' - }, - '676133' => { - 'BaseType' => '661220', - 'Name' => 'gnutls_dtls_prestate_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '682' => { - 'Header' => 'libio.h', - 'Line' => '154', - 'Name' => '_IO_lock_t', - 'Type' => 'Typedef' - }, - '689' => { - 'Header' => 'libio.h', - 'Line' => '160', - 'Memb' => { - '0' => { - 'name' => '_next', - 'offset' => '0', - 'type' => '738' - }, - '1' => { - 'name' => '_sbuf', - 'offset' => '8', - 'type' => '744' - }, - '2' => { - 'name' => '_pos', - 'offset' => '16', - 'type' => '70' - } - }, - 'Name' => 'struct _IO_marker', - 'Size' => '24', - 'Type' => 'Struct' - }, - '6892' => { - 'Header' => 'gnutls_int.h', - 'Line' => '436', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '105' - }, - '1' => { - 'name' => 'id', - 'offset' => '8', - 'type' => '1695' - }, - '2' => { - 'name' => 'blocksize', - 'offset' => '12', - 'type' => '799' - }, - '3' => { - 'name' => 'keysize', - 'offset' => '14', - 'type' => '799' - }, - '4' => { - 'name' => 'type', - 'offset' => '16', - 'type' => '5866' - }, - '5' => { - 'name' => 'implicit_iv', - 'offset' => '20', - 'type' => '799' - }, - '6' => { - 'name' => 'explicit_iv', - 'offset' => '22', - 'type' => '799' - }, - '7' => { - 'name' => 'cipher_iv', - 'offset' => '24', - 'type' => '799' - }, - '8' => { - 'name' => 'tagsize', - 'offset' => '26', - 'type' => '799' - } - }, - 'Name' => 'struct cipher_entry_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '698562' => { - 'BaseType' => '698574', - 'Header' => 'gnutls.h', - 'Line' => '2096', - 'Name' => 'gnutls_tdb_store_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '698574' => { - 'Name' => 'int(*)(char const*, char const*, char const*, time_t, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '105' - }, - '1' => { - 'type' => '105' - }, - '2' => { - 'type' => '105' - }, - '3' => { - 'type' => '225' - }, - '4' => { - 'type' => '3587' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '698615' => { - 'BaseType' => '698627', - 'Header' => 'gnutls.h', - 'Line' => '2102', - 'Name' => 'gnutls_tdb_store_commitment_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '698627' => { - 'Name' => 'int(*)(char const*, char const*, char const*, time_t, gnutls_digest_algorithm_t, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '105' - }, - '1' => { - 'type' => '105' - }, - '2' => { - 'type' => '105' - }, - '3' => { - 'type' => '225' - }, - '4' => { - 'type' => '109671' - }, - '5' => { - 'type' => '3587' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '698673' => { - 'BaseType' => '698685', - 'Header' => 'gnutls.h', - 'Line' => '2113', - 'Name' => 'gnutls_tdb_verify_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '698685' => { - 'Name' => 'int(*)(char const*, char const*, char const*, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '105' - }, - '1' => { - 'type' => '105' - }, - '2' => { - 'type' => '105' - }, - '3' => { - 'type' => '3587' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '698721' => { - 'BaseType' => '698733', - 'Header' => 'gnutls.h', - 'Line' => '2120', - 'Name' => 'gnutls_tdb_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '698733' => { - 'BaseType' => '698739', - 'Name' => 'struct gnutls_tdb_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '698739' => { - 'Line' => '38', - 'Memb' => { - '0' => { - 'name' => 'store', - 'offset' => '0', - 'type' => '698562' - }, - '1' => { - 'name' => 'cstore', - 'offset' => '8', - 'type' => '698615' - }, - '2' => { - 'name' => 'verify', - 'offset' => '16', - 'type' => '698673' - } - }, - 'Name' => 'struct gnutls_tdb_int', - 'Size' => '24', - 'Source' => 'verify-tofu.c', - 'Type' => 'Struct' - }, - '70' => { - 'Name' => 'int', - 'Size' => '4', - 'Type' => 'Intrinsic' - }, - '7022' => { - 'BaseType' => '6892', - 'Header' => 'gnutls_int.h', - 'Line' => '446', - 'Name' => 'cipher_entry_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '7034' => { - 'BaseType' => '788', - 'Name' => 'uint8_t[2]', - 'Size' => '2', - 'Type' => 'Array' - }, - '7050' => { - 'Header' => 'gnutls_int.h', - 'Line' => '469', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '105' - }, - '1' => { - 'name' => 'oid', - 'offset' => '8', - 'type' => '105' - }, - '2' => { - 'name' => 'id', - 'offset' => '16', - 'type' => '1971' - }, - '3' => { - 'name' => 'output_size', - 'offset' => '20', - 'type' => '130' - }, - '4' => { - 'name' => 'key_size', - 'offset' => '24', - 'type' => '130' - }, - '5' => { - 'name' => 'nonce_size', - 'offset' => '28', - 'type' => '130' - }, - '6' => { - 'name' => 'placeholder', - 'offset' => '32', - 'type' => '130' - }, - '7' => { - 'name' => 'secure', - 'offset' => '36', - 'type' => '130' - }, - '8' => { - 'name' => 'block_size', - 'offset' => '40', - 'type' => '130' - } - }, - 'Name' => 'struct mac_entry_st', - 'Size' => '48', - 'Type' => 'Struct' - }, - '709597' => { - 'BaseType' => '698721', - 'Name' => 'gnutls_tdb_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '713689' => { - 'BaseType' => '137', - 'Header' => 'types.h', - 'Line' => '194', - 'Name' => 'int8_t', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '714978' => { - 'BaseType' => '714989', - 'Header' => 'tpm.h', - 'Line' => '36', - 'Name' => 'gnutls_tpm_key_list_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '714989' => { - 'BaseType' => '714995', - 'Name' => 'struct tpm_key_list_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '714995' => { - 'Line' => '57', - 'Memb' => { - '0' => { - 'name' => 'size', - 'offset' => '0', - 'type' => '717993' - }, - '1' => { - 'name' => 'ki', - 'offset' => '8', - 'type' => '718487' - }, - '2' => { - 'name' => 'tpm_ctx', - 'offset' => '16', - 'type' => '718043' - } - }, - 'Name' => 'struct tpm_key_list_st', - 'Size' => '24', - 'Source' => 'tpm.c', - 'Type' => 'Struct' - }, - '715074' => { - 'Header' => 'tpm.h', - 'Line' => '54', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_TPMKEY_FMT_RAW', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_TPMKEY_FMT_DER', - 'value' => '0' - }, - '2' => { - 'name' => 'GNUTLS_TPMKEY_FMT_CTK_PEM', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_tpmkey_fmt_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '717960' => { - 'BaseType' => '788', - 'Header' => 'platform.h', - 'Line' => '17', - 'Name' => 'BYTE', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '717971' => { - 'BaseType' => '713689', - 'Header' => 'platform.h', - 'Line' => '18', - 'Name' => 'TSS_BOOL', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '717982' => { - 'BaseType' => '799', - 'Header' => 'platform.h', - 'Line' => '19', - 'Name' => 'UINT16', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '717993' => { - 'BaseType' => '810', - 'Header' => 'platform.h', - 'Line' => '20', - 'Name' => 'UINT32', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '7180' => { - 'BaseType' => '7050', - 'Header' => 'gnutls_int.h', - 'Line' => '479', - 'Name' => 'mac_entry_st', - 'Size' => '48', - 'Type' => 'Typedef' - }, - '718004' => { - 'BaseType' => '717960', - 'Name' => 'BYTE*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '718010' => { - 'BaseType' => '717993', - 'Header' => 'tss_typedef.h', - 'Line' => '17', - 'Name' => 'TSS_FLAG', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '718032' => { - 'BaseType' => '717993', - 'Header' => 'tss_typedef.h', - 'Line' => '20', - 'Name' => 'TSS_HOBJECT', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '718043' => { - 'BaseType' => '718032', - 'Header' => 'tss_typedef.h', - 'Line' => '21', - 'Name' => 'TSS_HCONTEXT', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '718098' => { - 'Header' => 'tss_structs.h', - 'Line' => '14', - 'Memb' => { - '0' => { - 'name' => 'bMajor', - 'offset' => '0', - 'type' => '717960' - }, - '1' => { - 'name' => 'bMinor', - 'offset' => '1', - 'type' => '717960' - }, - '2' => { - 'name' => 'bRevMajor', - 'offset' => '2', - 'type' => '717960' - }, - '3' => { - 'name' => 'bRevMinor', - 'offset' => '3', - 'type' => '717960' - } - }, - 'Name' => 'struct tdTSS_VERSION', - 'Size' => '4', - 'Type' => 'Struct' - }, - '718159' => { - 'BaseType' => '718098', - 'Header' => 'tss_structs.h', - 'Line' => '20', - 'Name' => 'TSS_VERSION', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '718170' => { - 'Header' => 'tss_structs.h', - 'Line' => '62', - 'Memb' => { - '0' => { - 'name' => 'ulTimeLow', - 'offset' => '0', - 'type' => '717993' - }, - '1' => { - 'name' => 'usTimeMid', - 'offset' => '4', - 'type' => '717982' - }, - '2' => { - 'name' => 'usTimeHigh', - 'offset' => '6', - 'type' => '717982' - }, - '3' => { - 'name' => 'bClockSeqHigh', - 'offset' => '8', - 'type' => '717960' - }, - '4' => { - 'name' => 'bClockSeqLow', - 'offset' => '9', - 'type' => '717960' - }, - '5' => { - 'name' => 'rgbNode', - 'offset' => '10', - 'type' => '718255' - } - }, - 'Name' => 'struct tdTSS_UUID', - 'Size' => '16', - 'Type' => 'Struct' - }, - '718255' => { - 'BaseType' => '717960', - 'Name' => 'BYTE[6]', - 'Size' => '6', - 'Type' => 'Array' - }, - '718271' => { - 'BaseType' => '718170', - 'Header' => 'tss_structs.h', - 'Line' => '70', - 'Name' => 'TSS_UUID', - 'Size' => '16', - 'Type' => 'Typedef' - }, - '718282' => { - 'Header' => 'tss_structs.h', - 'Line' => '87', - 'Memb' => { - '0' => { - 'name' => 'versionInfo', - 'offset' => '0', - 'type' => '718159' - }, - '1' => { - 'name' => 'keyUUID', - 'offset' => '4', - 'type' => '718271' - }, - '2' => { - 'name' => 'parentKeyUUID', - 'offset' => '20', - 'type' => '718271' - }, - '3' => { - 'name' => 'bAuthDataUsage', - 'offset' => '36', - 'type' => '717960' - }, - '4' => { - 'name' => 'persistentStorageType', - 'offset' => '40', - 'type' => '718010' - }, - '5' => { - 'name' => 'persistentStorageTypeParent', - 'offset' => '44', - 'type' => '718010' - }, - '6' => { - 'name' => 'fIsLoaded', - 'offset' => '48', - 'type' => '717971' - }, - '7' => { - 'name' => 'ulVendorDataLength', - 'offset' => '52', - 'type' => '717993' - }, - '8' => { - 'name' => 'rgbVendorData', - 'offset' => '56', - 'type' => '718004' - } - }, - 'Name' => 'struct tdTSS_KM_KEYINFO2', - 'Size' => '64', - 'Type' => 'Struct' - }, - '718403' => { - 'BaseType' => '718282', - 'Header' => 'tss_structs.h', - 'Line' => '101', - 'Name' => 'TSS_KM_KEYINFO2', - 'Size' => '64', - 'Type' => 'Typedef' - }, - '718487' => { - 'BaseType' => '718403', - 'Name' => 'TSS_KM_KEYINFO2*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '733036' => { - 'BaseType' => '714978', - 'Name' => 'gnutls_tpm_key_list_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '733604' => { - 'BaseType' => '123', - 'Name' => 'unsigned char[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '7357' => { - 'Name' => '_Bool', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '7364' => { - 'Header' => 'gnutls_int.h', - 'Line' => '494', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '105' - }, - '1' => { - 'name' => 'id', - 'offset' => '8', - 'type' => '2242' - }, - '10' => { - 'name' => 'selectable_prf', - 'offset' => '28', - 'type' => '7357' - }, - '11' => { - 'name' => 'obsolete', - 'offset' => '29', - 'type' => '7357' - }, - '2' => { - 'name' => 'age', - 'offset' => '12', - 'type' => '130' - }, - '3' => { - 'name' => 'major', - 'offset' => '16', - 'type' => '788' - }, - '4' => { - 'name' => 'minor', - 'offset' => '17', - 'type' => '788' - }, - '5' => { - 'name' => 'transport', - 'offset' => '20', - 'type' => '4401' - }, - '6' => { - 'name' => 'supported', - 'offset' => '24', - 'type' => '7357' - }, - '7' => { - 'name' => 'explicit_iv', - 'offset' => '25', - 'type' => '7357' - }, - '8' => { - 'name' => 'extensions', - 'offset' => '26', - 'type' => '7357' - }, - '9' => { - 'name' => 'selectable_sighash', - 'offset' => '27', - 'type' => '7357' - } - }, - 'Name' => 'struct version_entry_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '7376' => { - 'BaseType' => '4452', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '39', - 'Name' => 'hash_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '738' => { - 'BaseType' => '689', - 'Name' => 'struct _IO_marker*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7387' => { - 'BaseType' => '4452', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '40', - 'Name' => 'nonce_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '7398' => { - 'BaseType' => '4617', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '41', - 'Name' => 'output_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '7409' => { - 'BaseType' => '3683', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '43', - 'Name' => 'hash_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '744' => { - 'BaseType' => '298', - 'Name' => 'struct _IO_FILE*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '748884' => { - 'BaseType' => '748890', - 'Name' => 'gnutls_custom_url_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '748890' => { - 'BaseType' => '607215', - 'Name' => 'gnutls_custom_url_st const', - 'Size' => '64', - 'Type' => 'Const' - }, - '750' => { - 'BaseType' => '111', - 'Name' => 'char[1]', - 'Size' => '1', - 'Type' => 'Array' - }, - '7511' => { - 'BaseType' => '7517', - 'Name' => 'mac_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7517' => { - 'BaseType' => '7180', - 'Name' => 'mac_entry_st const', - 'Size' => '48', - 'Type' => 'Const' - }, - '7522' => { - 'Header' => 'gnutls_hash_int.h', - 'Line' => '55', - 'Memb' => { - '0' => { - 'name' => 'e', - 'offset' => '0', - 'type' => '7511' - }, - '1' => { - 'name' => 'hash', - 'offset' => '8', - 'type' => '7376' - }, - '2' => { - 'name' => 'output', - 'offset' => '16', - 'type' => '7398' - }, - '3' => { - 'name' => 'deinit', - 'offset' => '24', - 'type' => '7409' - }, - '4' => { - 'name' => 'key', - 'offset' => '32', - 'type' => '291' - }, - '5' => { - 'name' => 'keysize', - 'offset' => '40', - 'type' => '70' - }, - '6' => { - 'name' => 'handle', - 'offset' => '48', - 'type' => '184' - } - }, - 'Name' => 'struct digest_hd_st', - 'Size' => '56', - 'Type' => 'Struct' - }, - '752409' => { - 'BaseType' => '752420', - 'Header' => 'system-keys.h', - 'Line' => '41', - 'Name' => 'gnutls_system_key_iter_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '752420' => { - 'BaseType' => '752426', - 'Name' => 'struct system_key_iter_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '752426' => { - 'Name' => 'struct system_key_iter_st', - 'Type' => 'Struct' - }, - '752600' => { - 'BaseType' => '752409', - 'Name' => 'gnutls_system_key_iter_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '755194' => { - 'BaseType' => '755205', - 'Header' => 'pkcs11.h', - 'Line' => '57', - 'Name' => 'gnutls_pkcs11_token_callback_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '755205' => { - 'Name' => 'int(*)(void*const, char const*const, unsigned int)', - 'Param' => { - '0' => { - 'type' => '755236' - }, - '1' => { - 'type' => '755241' - }, - '2' => { - 'type' => '130' - } - }, - 'Return' => '70', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '755236' => { - 'BaseType' => '184', - 'Name' => 'void*const', - 'Size' => '8', - 'Type' => 'Const' - }, - '755241' => { - 'BaseType' => '105', - 'Name' => 'char const*const', - 'Size' => '8', - 'Type' => 'Const' - }, - '755590' => { - 'Header' => 'pkcs11.h', - 'Line' => '164', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_URL_GENERIC', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_URL_LIB', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_URL_LIB_VERSION', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_pkcs11_url_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '755675' => { - 'Header' => 'pkcs11.h', - 'Line' => '277', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_OBJ_ID_HEX', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LABEL', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_LABEL', - 'value' => '3' - }, - '3' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_SERIAL', - 'value' => '4' - }, - '4' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_MANUFACTURER', - 'value' => '5' - }, - '5' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_MODEL', - 'value' => '6' - }, - '6' => { - 'name' => 'GNUTLS_PKCS11_OBJ_ID', - 'value' => '7' - }, - '7' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LIBRARY_VERSION', - 'value' => '8' - }, - '8' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LIBRARY_DESCRIPTION', - 'value' => '9' - }, - '9' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LIBRARY_MANUFACTURER', - 'value' => '10' - } - }, - 'Name' => 'enum gnutls_pkcs11_obj_info_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '755725' => { - 'Header' => 'pkcs11.h', - 'Line' => '311', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_LABEL', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_SERIAL', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_MANUFACTURER', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_MODEL', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_pkcs11_token_info_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '757030' => { - 'BaseType' => '63', - 'Header' => 'pkcs11.h', - 'Line' => '186', - 'Name' => 'ck_flags_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757041' => { - 'Header' => 'pkcs11.h', - 'Line' => '188', - 'Memb' => { - '0' => { - 'name' => 'major', - 'offset' => '0', - 'type' => '123' - }, - '1' => { - 'name' => 'minor', - 'offset' => '1', - 'type' => '123' - } - }, - 'Name' => 'struct ck_version', - 'Size' => '2', - 'Type' => 'Struct' - }, - '757078' => { - 'Header' => 'pkcs11.h', - 'Line' => '195', - 'Memb' => { - '0' => { - 'name' => 'cryptoki_version', - 'offset' => '0', - 'type' => '757041' - }, - '1' => { - 'name' => 'manufacturer_id', - 'offset' => '2', - 'type' => '757151' - }, - '2' => { - 'name' => 'flags', - 'offset' => '40', - 'type' => '757030' - }, - '3' => { - 'name' => 'library_description', - 'offset' => '48', - 'type' => '757151' - }, - '4' => { - 'name' => 'library_version', - 'offset' => '80', - 'type' => '757041' - } - }, - 'Name' => 'struct ck_info', - 'Size' => '88', - 'Type' => 'Struct' - }, - '757151' => { - 'BaseType' => '123', - 'Name' => 'unsigned char[32]', - 'Size' => '32', - 'Type' => 'Array' - }, - '757167' => { - 'BaseType' => '63', - 'Header' => 'pkcs11.h', - 'Line' => '205', - 'Name' => 'ck_notification_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757178' => { - 'BaseType' => '63', - 'Header' => 'pkcs11.h', - 'Line' => '210', - 'Name' => 'ck_slot_id_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757189' => { - 'Header' => 'pkcs11.h', - 'Line' => '213', - 'Memb' => { - '0' => { - 'name' => 'slot_description', - 'offset' => '0', - 'type' => '757262' - }, - '1' => { - 'name' => 'manufacturer_id', - 'offset' => '64', - 'type' => '757151' - }, - '2' => { - 'name' => 'flags', - 'offset' => '96', - 'type' => '757030' - }, - '3' => { - 'name' => 'hardware_version', - 'offset' => '104', - 'type' => '757041' - }, - '4' => { - 'name' => 'firmware_version', - 'offset' => '106', - 'type' => '757041' - } - }, - 'Name' => 'struct ck_slot_info', - 'Size' => '112', - 'Type' => 'Struct' - }, - '757262' => { - 'BaseType' => '123', - 'Name' => 'unsigned char[64]', - 'Size' => '64', - 'Type' => 'Array' - }, - '757278' => { - 'Header' => 'pkcs11.h', - 'Line' => '229', - 'Memb' => { - '0' => { - 'name' => 'label', - 'offset' => '0', - 'type' => '757151' - }, - '1' => { - 'name' => 'manufacturer_id', - 'offset' => '32', - 'type' => '757151' - }, - '10' => { - 'name' => 'min_pin_len', - 'offset' => '144', - 'type' => '63' - }, - '11' => { - 'name' => 'total_public_memory', - 'offset' => '152', - 'type' => '63' - }, - '12' => { - 'name' => 'free_public_memory', - 'offset' => '160', - 'type' => '63' - }, - '13' => { - 'name' => 'total_private_memory', - 'offset' => '168', - 'type' => '63' - }, - '14' => { - 'name' => 'free_private_memory', - 'offset' => '176', - 'type' => '63' - }, - '15' => { - 'name' => 'hardware_version', - 'offset' => '184', - 'type' => '757041' - }, - '16' => { - 'name' => 'firmware_version', - 'offset' => '186', - 'type' => '757041' - }, - '17' => { - 'name' => 'utc_time', - 'offset' => '188', - 'type' => '757507' - }, - '2' => { - 'name' => 'model', - 'offset' => '64', - 'type' => '757507' - }, - '3' => { - 'name' => 'serial_number', - 'offset' => '80', - 'type' => '757507' - }, - '4' => { - 'name' => 'flags', - 'offset' => '96', - 'type' => '757030' - }, - '5' => { - 'name' => 'max_session_count', - 'offset' => '104', - 'type' => '63' - }, - '6' => { - 'name' => 'session_count', - 'offset' => '112', - 'type' => '63' - }, - '7' => { - 'name' => 'max_rw_session_count', - 'offset' => '120', - 'type' => '63' - }, - '8' => { - 'name' => 'rw_session_count', - 'offset' => '128', - 'type' => '63' - }, - '9' => { - 'name' => 'max_pin_len', - 'offset' => '136', - 'type' => '63' - } - }, - 'Name' => 'struct ck_token_info', - 'Size' => '208', - 'Type' => 'Struct' - }, - '757507' => { - 'BaseType' => '123', - 'Name' => 'unsigned char[16]', - 'Size' => '16', - 'Type' => 'Array' - }, - '757523' => { - 'BaseType' => '63', - 'Header' => 'pkcs11.h', - 'Line' => '275', - 'Name' => 'ck_session_handle_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757535' => { - 'BaseType' => '63', - 'Header' => 'pkcs11.h', - 'Line' => '280', - 'Name' => 'ck_user_type_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757547' => { - 'BaseType' => '63', - 'Header' => 'pkcs11.h', - 'Line' => '287', - 'Name' => 'ck_state_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757559' => { - 'Header' => 'pkcs11.h', - 'Line' => '296', - 'Memb' => { - '0' => { - 'name' => 'slot_id', - 'offset' => '0', - 'type' => '757178' - }, - '1' => { - 'name' => 'state', - 'offset' => '8', - 'type' => '757547' - }, - '2' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '757030' - }, - '3' => { - 'name' => 'device_error', - 'offset' => '24', - 'type' => '63' - } - }, - 'Name' => 'struct ck_session_info', - 'Size' => '32', - 'Type' => 'Struct' - }, - '757625' => { - 'BaseType' => '63', - 'Header' => 'pkcs11.h', - 'Line' => '308', - 'Name' => 'ck_object_handle_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757673' => { - 'BaseType' => '63', - 'Header' => 'pkcs11.h', - 'Line' => '370', - 'Name' => 'ck_attribute_type_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757685' => { - 'Header' => 'pkcs11.h', - 'Line' => '459', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '757673' - }, - '1' => { - 'name' => 'value', - 'offset' => '8', - 'type' => '184' - }, - '2' => { - 'name' => 'value_len', - 'offset' => '16', - 'type' => '63' - } - }, - 'Name' => 'struct ck_attribute', - 'Size' => '24', - 'Type' => 'Struct' - }, - '757738' => { - 'BaseType' => '63', - 'Header' => 'pkcs11.h', - 'Line' => '475', - 'Name' => 'ck_mechanism_type_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757750' => { - 'Header' => 'pkcs11.h', - 'Line' => '719', - 'Memb' => { - '0' => { - 'name' => 'mechanism', - 'offset' => '0', - 'type' => '757738' - }, - '1' => { - 'name' => 'parameter', - 'offset' => '8', - 'type' => '184' - }, - '2' => { - 'name' => 'parameter_len', - 'offset' => '16', - 'type' => '63' - } - }, - 'Name' => 'struct ck_mechanism', - 'Size' => '24', - 'Type' => 'Struct' - }, - '757803' => { - 'Header' => 'pkcs11.h', - 'Line' => '727', - 'Memb' => { - '0' => { - 'name' => 'min_key_size', - 'offset' => '0', - 'type' => '63' - }, - '1' => { - 'name' => 'max_key_size', - 'offset' => '8', - 'type' => '63' - }, - '2' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '757030' - } - }, - 'Name' => 'struct ck_mechanism_info', - 'Size' => '24', - 'Type' => 'Struct' - }, - '757856' => { - 'BaseType' => '63', - 'Header' => 'pkcs11.h', - 'Line' => '754', - 'Name' => 'ck_rv_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757868' => { - 'BaseType' => '757880', - 'Header' => 'pkcs11.h', - 'Line' => '757', - 'Name' => 'ck_notify_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757880' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_notification_t, void*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '757167' - }, - '2' => { - 'type' => '184' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '757911' => { - 'BaseType' => '757923', - 'Header' => 'pkcs11.h', - 'Line' => '767', - 'Name' => 'CK_C_Initialize', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757923' => { - 'Name' => 'ck_rv_t(*)(void*)', - 'Param' => { - '0' => { - 'type' => '184' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '757944' => { - 'BaseType' => '757923', - 'Header' => 'pkcs11.h', - 'Line' => '768', - 'Name' => 'CK_C_Finalize', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757956' => { - 'BaseType' => '757968', - 'Header' => 'pkcs11.h', - 'Line' => '769', - 'Name' => 'CK_C_GetInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '757968' => { - 'Name' => 'ck_rv_t(*)(struct ck_info*)', - 'Param' => { - '0' => { - 'type' => '757989' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '757989' => { - 'BaseType' => '757078', - 'Name' => 'struct ck_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '757995' => { - 'BaseType' => '758007', - 'Header' => 'pkcs11.h', - 'Line' => '770', - 'Name' => 'CK_C_GetFunctionList', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '758007' => { - 'Name' => 'ck_rv_t(*)(struct ck_function_list**)', - 'Param' => { - '0' => { - 'type' => '758028' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '758028' => { - 'BaseType' => '758034', - 'Name' => 'struct ck_function_list**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '758034' => { - 'BaseType' => '758040', - 'Name' => 'struct ck_function_list*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '758040' => { - 'Header' => 'pkcs11.h', - 'Line' => '1044', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '757041' - }, - '1' => { - 'name' => 'C_Initialize', - 'offset' => '8', - 'type' => '757911' - }, - '10' => { - 'name' => 'C_InitToken', - 'offset' => '80', - 'type' => '759273' - }, - '11' => { - 'name' => 'C_InitPIN', - 'offset' => '88', - 'type' => '759321' - }, - '12' => { - 'name' => 'C_SetPIN', - 'offset' => '96', - 'type' => '759364' - }, - '13' => { - 'name' => 'C_OpenSession', - 'offset' => '104', - 'type' => '759417' - }, - '14' => { - 'name' => 'C_CloseSession', - 'offset' => '112', - 'type' => '759476' - }, - '15' => { - 'name' => 'C_CloseAllSessions', - 'offset' => '120', - 'type' => '759509' - }, - '16' => { - 'name' => 'C_GetSessionInfo', - 'offset' => '128', - 'type' => '759542' - }, - '17' => { - 'name' => 'C_GetOperationState', - 'offset' => '136', - 'type' => '759586' - }, - '18' => { - 'name' => 'C_SetOperationState', - 'offset' => '144', - 'type' => '759629' - }, - '19' => { - 'name' => 'C_Login', - 'offset' => '152', - 'type' => '759682' - }, - '2' => { - 'name' => 'C_Finalize', - 'offset' => '16', - 'type' => '757944' - }, - '20' => { - 'name' => 'C_Logout', - 'offset' => '160', - 'type' => '759730' - }, - '21' => { - 'name' => 'C_CreateObject', - 'offset' => '168', - 'type' => '759742' - }, - '22' => { - 'name' => 'C_CopyObject', - 'offset' => '176', - 'type' => '759802' - }, - '23' => { - 'name' => 'C_DestroyObject', - 'offset' => '184', - 'type' => '759855' - }, - '24' => { - 'name' => 'C_GetObjectSize', - 'offset' => '192', - 'type' => '759893' - }, - '25' => { - 'name' => 'C_GetAttributeValue', - 'offset' => '200', - 'type' => '759936' - }, - '26' => { - 'name' => 'C_SetAttributeValue', - 'offset' => '208', - 'type' => '759984' - }, - '27' => { - 'name' => 'C_FindObjectsInit', - 'offset' => '216', - 'type' => '759996' - }, - '28' => { - 'name' => 'C_FindObjects', - 'offset' => '224', - 'type' => '760039' - }, - '29' => { - 'name' => 'C_FindObjectsFinal', - 'offset' => '232', - 'type' => '760087' - }, - '3' => { - 'name' => 'C_GetInfo', - 'offset' => '24', - 'type' => '757956' - }, - '30' => { - 'name' => 'C_EncryptInit', - 'offset' => '240', - 'type' => '760099' - }, - '31' => { - 'name' => 'C_Encrypt', - 'offset' => '248', - 'type' => '760148' - }, - '32' => { - 'name' => 'C_EncryptUpdate', - 'offset' => '256', - 'type' => '760201' - }, - '33' => { - 'name' => 'C_EncryptFinal', - 'offset' => '264', - 'type' => '760213' - }, - '34' => { - 'name' => 'C_DecryptInit', - 'offset' => '272', - 'type' => '760225' - }, - '35' => { - 'name' => 'C_Decrypt', - 'offset' => '280', - 'type' => '760237' - }, - '36' => { - 'name' => 'C_DecryptUpdate', - 'offset' => '288', - 'type' => '760249' - }, - '37' => { - 'name' => 'C_DecryptFinal', - 'offset' => '296', - 'type' => '760261' - }, - '38' => { - 'name' => 'C_DigestInit', - 'offset' => '304', - 'type' => '760273' - }, - '39' => { - 'name' => 'C_Digest', - 'offset' => '312', - 'type' => '760311' - }, - '4' => { - 'name' => 'C_GetFunctionList', - 'offset' => '32', - 'type' => '757995' - }, - '40' => { - 'name' => 'C_DigestUpdate', - 'offset' => '320', - 'type' => '760323' - }, - '41' => { - 'name' => 'C_DigestKey', - 'offset' => '328', - 'type' => '760335' - }, - '42' => { - 'name' => 'C_DigestFinal', - 'offset' => '336', - 'type' => '760347' - }, - '43' => { - 'name' => 'C_SignInit', - 'offset' => '344', - 'type' => '760359' - }, - '44' => { - 'name' => 'C_Sign', - 'offset' => '352', - 'type' => '760371' - }, - '45' => { - 'name' => 'C_SignUpdate', - 'offset' => '360', - 'type' => '760383' - }, - '46' => { - 'name' => 'C_SignFinal', - 'offset' => '368', - 'type' => '760395' - }, - '47' => { - 'name' => 'C_SignRecoverInit', - 'offset' => '376', - 'type' => '760407' - }, - '48' => { - 'name' => 'C_SignRecover', - 'offset' => '384', - 'type' => '760419' - }, - '49' => { - 'name' => 'C_VerifyInit', - 'offset' => '392', - 'type' => '760431' - }, - '5' => { - 'name' => 'C_GetSlotList', - 'offset' => '40', - 'type' => '758989' - }, - '50' => { - 'name' => 'C_Verify', - 'offset' => '400', - 'type' => '760443' - }, - '51' => { - 'name' => 'C_VerifyUpdate', - 'offset' => '408', - 'type' => '760455' - }, - '52' => { - 'name' => 'C_VerifyFinal', - 'offset' => '416', - 'type' => '760467' - }, - '53' => { - 'name' => 'C_VerifyRecoverInit', - 'offset' => '424', - 'type' => '760479' - }, - '54' => { - 'name' => 'C_VerifyRecover', - 'offset' => '432', - 'type' => '760491' - }, - '55' => { - 'name' => 'C_DigestEncryptUpdate', - 'offset' => '440', - 'type' => '760503' - }, - '56' => { - 'name' => 'C_DecryptDigestUpdate', - 'offset' => '448', - 'type' => '760515' - }, - '57' => { - 'name' => 'C_SignEncryptUpdate', - 'offset' => '456', - 'type' => '760527' - }, - '58' => { - 'name' => 'C_DecryptVerifyUpdate', - 'offset' => '464', - 'type' => '760539' - }, - '59' => { - 'name' => 'C_GenerateKey', - 'offset' => '472', - 'type' => '760551' - }, - '6' => { - 'name' => 'C_GetSlotInfo', - 'offset' => '48', - 'type' => '759044' - }, - '60' => { - 'name' => 'C_GenerateKeyPair', - 'offset' => '480', - 'type' => '760604' - }, - '61' => { - 'name' => 'C_WrapKey', - 'offset' => '488', - 'type' => '760672' - }, - '62' => { - 'name' => 'C_UnwrapKey', - 'offset' => '496', - 'type' => '760730' - }, - '63' => { - 'name' => 'C_DeriveKey', - 'offset' => '504', - 'type' => '760798' - }, - '64' => { - 'name' => 'C_SeedRandom', - 'offset' => '512', - 'type' => '760856' - }, - '65' => { - 'name' => 'C_GenerateRandom', - 'offset' => '520', - 'type' => '760868' - }, - '66' => { - 'name' => 'C_GetFunctionStatus', - 'offset' => '528', - 'type' => '760880' - }, - '67' => { - 'name' => 'C_CancelFunction', - 'offset' => '536', - 'type' => '760892' - }, - '68' => { - 'name' => 'C_WaitForSlotEvent', - 'offset' => '544', - 'type' => '759132' - }, - '7' => { - 'name' => 'C_GetTokenInfo', - 'offset' => '56', - 'type' => '759088' - }, - '8' => { - 'name' => 'C_GetMechanismList', - 'offset' => '64', - 'type' => '759175' - }, - '9' => { - 'name' => 'C_GetMechanismInfo', - 'offset' => '72', - 'type' => '759224' - } - }, - 'Name' => 'struct ck_function_list', - 'Size' => '552', - 'Type' => 'Struct' - }, - '758989' => { - 'BaseType' => '759001', - 'Header' => 'pkcs11.h', - 'Line' => '773', - 'Name' => 'CK_C_GetSlotList', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759001' => { - 'Name' => 'ck_rv_t(*)(unsigned char, ck_slot_id_t*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '123' - }, - '1' => { - 'type' => '759032' - }, - '2' => { - 'type' => '759038' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759032' => { - 'BaseType' => '757178', - 'Name' => 'ck_slot_id_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '759038' => { - 'BaseType' => '63', - 'Name' => 'unsigned long*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '759044' => { - 'BaseType' => '759056', - 'Header' => 'pkcs11.h', - 'Line' => '776', - 'Name' => 'CK_C_GetSlotInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759056' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, struct ck_slot_info*)', - 'Param' => { - '0' => { - 'type' => '757178' - }, - '1' => { - 'type' => '759082' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759082' => { - 'BaseType' => '757189', - 'Name' => 'struct ck_slot_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '759088' => { - 'BaseType' => '759100', - 'Header' => 'pkcs11.h', - 'Line' => '778', - 'Name' => 'CK_C_GetTokenInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759100' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, struct ck_token_info*)', - 'Param' => { - '0' => { - 'type' => '757178' - }, - '1' => { - 'type' => '759126' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759126' => { - 'BaseType' => '757278', - 'Name' => 'struct ck_token_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '759132' => { - 'BaseType' => '759144', - 'Header' => 'pkcs11.h', - 'Line' => '780', - 'Name' => 'CK_C_WaitForSlotEvent', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759144' => { - 'Name' => 'ck_rv_t(*)(ck_flags_t, ck_slot_id_t*, void*)', - 'Param' => { - '0' => { - 'type' => '757030' - }, - '1' => { - 'type' => '759032' - }, - '2' => { - 'type' => '184' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759175' => { - 'BaseType' => '759187', - 'Header' => 'pkcs11.h', - 'Line' => '782', - 'Name' => 'CK_C_GetMechanismList', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759187' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, ck_mechanism_type_t*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '757178' - }, - '1' => { - 'type' => '759218' - }, - '2' => { - 'type' => '759038' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759218' => { - 'BaseType' => '757738', - 'Name' => 'ck_mechanism_type_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '759224' => { - 'BaseType' => '759236', - 'Header' => 'pkcs11.h', - 'Line' => '786', - 'Name' => 'CK_C_GetMechanismInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759236' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, ck_mechanism_type_t, struct ck_mechanism_info*)', - 'Param' => { - '0' => { - 'type' => '757178' - }, - '1' => { - 'type' => '757738' - }, - '2' => { - 'type' => '759267' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759267' => { - 'BaseType' => '757803', - 'Name' => 'struct ck_mechanism_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '759273' => { - 'BaseType' => '759285', - 'Header' => 'pkcs11.h', - 'Line' => '789', - 'Name' => 'CK_C_InitToken', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759285' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, unsigned char*, unsigned long, unsigned char*)', - 'Param' => { - '0' => { - 'type' => '757178' - }, - '1' => { - 'type' => '3186' - }, - '2' => { - 'type' => '63' - }, - '3' => { - 'type' => '3186' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759321' => { - 'BaseType' => '759333', - 'Header' => 'pkcs11.h', - 'Line' => '792', - 'Name' => 'CK_C_InitPIN', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759333' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '3186' - }, - '2' => { - 'type' => '63' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759364' => { - 'BaseType' => '759376', - 'Header' => 'pkcs11.h', - 'Line' => '795', - 'Name' => 'CK_C_SetPIN', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759376' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long, unsigned char*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '3186' - }, - '2' => { - 'type' => '63' - }, - '3' => { - 'type' => '3186' - }, - '4' => { - 'type' => '63' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759417' => { - 'BaseType' => '759429', - 'Header' => 'pkcs11.h', - 'Line' => '800', - 'Name' => 'CK_C_OpenSession', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759429' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, ck_flags_t, void*, ck_notify_t, ck_session_handle_t*)', - 'Param' => { - '0' => { - 'type' => '757178' - }, - '1' => { - 'type' => '757030' - }, - '2' => { - 'type' => '184' - }, - '3' => { - 'type' => '757868' - }, - '4' => { - 'type' => '759470' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759470' => { - 'BaseType' => '757523', - 'Name' => 'ck_session_handle_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '759476' => { - 'BaseType' => '759488', - 'Header' => 'pkcs11.h', - 'Line' => '804', - 'Name' => 'CK_C_CloseSession', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759488' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t)', - 'Param' => { - '0' => { - 'type' => '757523' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759509' => { - 'BaseType' => '759521', - 'Header' => 'pkcs11.h', - 'Line' => '805', - 'Name' => 'CK_C_CloseAllSessions', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759521' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t)', - 'Param' => { - '0' => { - 'type' => '757178' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759542' => { - 'BaseType' => '759554', - 'Header' => 'pkcs11.h', - 'Line' => '806', - 'Name' => 'CK_C_GetSessionInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759554' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_session_info*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '759580' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759580' => { - 'BaseType' => '757559', - 'Name' => 'struct ck_session_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '759586' => { - 'BaseType' => '759598', - 'Header' => 'pkcs11.h', - 'Line' => '809', - 'Name' => 'CK_C_GetOperationState', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759598' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '3186' - }, - '2' => { - 'type' => '759038' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759629' => { - 'BaseType' => '759641', - 'Header' => 'pkcs11.h', - 'Line' => '813', - 'Name' => 'CK_C_SetOperationState', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759641' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long, ck_object_handle_t, ck_object_handle_t)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '3186' - }, - '2' => { - 'type' => '63' - }, - '3' => { - 'type' => '757625' - }, - '4' => { - 'type' => '757625' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759682' => { - 'BaseType' => '759694', - 'Header' => 'pkcs11.h', - 'Line' => '819', - 'Name' => 'CK_C_Login', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759694' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_user_type_t, unsigned char*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '757535' - }, - '2' => { - 'type' => '3186' - }, - '3' => { - 'type' => '63' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759730' => { - 'BaseType' => '759488', - 'Header' => 'pkcs11.h', - 'Line' => '822', - 'Name' => 'CK_C_Logout', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759742' => { - 'BaseType' => '759754', - 'Header' => 'pkcs11.h', - 'Line' => '824', - 'Name' => 'CK_C_CreateObject', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759754' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '759790' - }, - '2' => { - 'type' => '63' - }, - '3' => { - 'type' => '759796' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759790' => { - 'BaseType' => '757685', - 'Name' => 'struct ck_attribute*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '759796' => { - 'BaseType' => '757625', - 'Name' => 'ck_object_handle_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '759802' => { - 'BaseType' => '759814', - 'Header' => 'pkcs11.h', - 'Line' => '828', - 'Name' => 'CK_C_CopyObject', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759814' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '757625' - }, - '2' => { - 'type' => '759790' - }, - '3' => { - 'type' => '63' - }, - '4' => { - 'type' => '759796' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759855' => { - 'BaseType' => '759867', - 'Header' => 'pkcs11.h', - 'Line' => '832', - 'Name' => 'CK_C_DestroyObject', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759867' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '757625' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759893' => { - 'BaseType' => '759905', - 'Header' => 'pkcs11.h', - 'Line' => '835', - 'Name' => 'CK_C_GetObjectSize', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759905' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '757625' - }, - '2' => { - 'type' => '759038' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759936' => { - 'BaseType' => '759948', - 'Header' => 'pkcs11.h', - 'Line' => '839', - 'Name' => 'CK_C_GetAttributeValue', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759948' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t, struct ck_attribute*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '757625' - }, - '2' => { - 'type' => '759790' - }, - '3' => { - 'type' => '63' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '759984' => { - 'BaseType' => '759948', - 'Header' => 'pkcs11.h', - 'Line' => '844', - 'Name' => 'CK_C_SetAttributeValue', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '759996' => { - 'BaseType' => '760008', - 'Header' => 'pkcs11.h', - 'Line' => '849', - 'Name' => 'CK_C_FindObjectsInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760008' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_attribute*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '759790' - }, - '2' => { - 'type' => '63' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '760039' => { - 'BaseType' => '760051', - 'Header' => 'pkcs11.h', - 'Line' => '853', - 'Name' => 'CK_C_FindObjects', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760051' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t*, unsigned long, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '759796' - }, - '2' => { - 'type' => '63' - }, - '3' => { - 'type' => '759038' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '760087' => { - 'BaseType' => '759488', - 'Header' => 'pkcs11.h', - 'Line' => '858', - 'Name' => 'CK_C_FindObjectsFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760099' => { - 'BaseType' => '760111', - 'Header' => 'pkcs11.h', - 'Line' => '861', - 'Name' => 'CK_C_EncryptInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760111' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '760142' - }, - '2' => { - 'type' => '757625' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '760142' => { - 'BaseType' => '757750', - 'Name' => 'struct ck_mechanism*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '760148' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '865', - 'Name' => 'CK_C_Encrypt', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760160' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long, unsigned char*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '3186' - }, - '2' => { - 'type' => '63' - }, - '3' => { - 'type' => '3186' - }, - '4' => { - 'type' => '759038' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '760201' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '870', - 'Name' => 'CK_C_EncryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760213' => { - 'BaseType' => '759598', - 'Header' => 'pkcs11.h', - 'Line' => '875', - 'Name' => 'CK_C_EncryptFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760225' => { - 'BaseType' => '760111', - 'Header' => 'pkcs11.h', - 'Line' => '880', - 'Name' => 'CK_C_DecryptInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760237' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '884', - 'Name' => 'CK_C_Decrypt', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760249' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '889', - 'Name' => 'CK_C_DecryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760261' => { - 'BaseType' => '759598', - 'Header' => 'pkcs11.h', - 'Line' => '894', - 'Name' => 'CK_C_DecryptFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760273' => { - 'BaseType' => '760285', - 'Header' => 'pkcs11.h', - 'Line' => '899', - 'Name' => 'CK_C_DigestInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760285' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '760142' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '760311' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '902', - 'Name' => 'CK_C_Digest', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760323' => { - 'BaseType' => '759333', - 'Header' => 'pkcs11.h', - 'Line' => '907', - 'Name' => 'CK_C_DigestUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760335' => { - 'BaseType' => '759867', - 'Header' => 'pkcs11.h', - 'Line' => '910', - 'Name' => 'CK_C_DigestKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760347' => { - 'BaseType' => '759598', - 'Header' => 'pkcs11.h', - 'Line' => '912', - 'Name' => 'CK_C_DigestFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760359' => { - 'BaseType' => '760111', - 'Header' => 'pkcs11.h', - 'Line' => '917', - 'Name' => 'CK_C_SignInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760371' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '921', - 'Name' => 'CK_C_Sign', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760383' => { - 'BaseType' => '759333', - 'Header' => 'pkcs11.h', - 'Line' => '926', - 'Name' => 'CK_C_SignUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760395' => { - 'BaseType' => '759598', - 'Header' => 'pkcs11.h', - 'Line' => '929', - 'Name' => 'CK_C_SignFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760407' => { - 'BaseType' => '760111', - 'Header' => 'pkcs11.h', - 'Line' => '933', - 'Name' => 'CK_C_SignRecoverInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760419' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '937', - 'Name' => 'CK_C_SignRecover', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760431' => { - 'BaseType' => '760111', - 'Header' => 'pkcs11.h', - 'Line' => '943', - 'Name' => 'CK_C_VerifyInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760443' => { - 'BaseType' => '759376', - 'Header' => 'pkcs11.h', - 'Line' => '947', - 'Name' => 'CK_C_Verify', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760455' => { - 'BaseType' => '759333', - 'Header' => 'pkcs11.h', - 'Line' => '952', - 'Name' => 'CK_C_VerifyUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760467' => { - 'BaseType' => '759333', - 'Header' => 'pkcs11.h', - 'Line' => '955', - 'Name' => 'CK_C_VerifyFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760479' => { - 'BaseType' => '760111', - 'Header' => 'pkcs11.h', - 'Line' => '959', - 'Name' => 'CK_C_VerifyRecoverInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760491' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '963', - 'Name' => 'CK_C_VerifyRecover', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760503' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '970', - 'Name' => 'CK_C_DigestEncryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760515' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '975', - 'Name' => 'CK_C_DecryptDigestUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760527' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '981', - 'Name' => 'CK_C_SignEncryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760539' => { - 'BaseType' => '760160', - 'Header' => 'pkcs11.h', - 'Line' => '986', - 'Name' => 'CK_C_DecryptVerifyUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760551' => { - 'BaseType' => '760563', - 'Header' => 'pkcs11.h', - 'Line' => '993', - 'Name' => 'CK_C_GenerateKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760563' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '760142' - }, - '2' => { - 'type' => '759790' - }, - '3' => { - 'type' => '63' - }, - '4' => { - 'type' => '759796' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '760604' => { - 'BaseType' => '760616', - 'Header' => 'pkcs11.h', - 'Line' => '999', - 'Name' => 'CK_C_GenerateKeyPair', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760616' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, struct ck_attribute*, unsigned long, struct ck_attribute*, unsigned long, ck_object_handle_t*, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '760142' - }, - '2' => { - 'type' => '759790' - }, - '3' => { - 'type' => '63' - }, - '4' => { - 'type' => '759790' - }, - '5' => { - 'type' => '63' - }, - '6' => { - 'type' => '759796' - }, - '7' => { - 'type' => '759796' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '760672' => { - 'BaseType' => '760684', - 'Header' => 'pkcs11.h', - 'Line' => '1008', - 'Name' => 'CK_C_WrapKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760684' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t, ck_object_handle_t, unsigned char*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '760142' - }, - '2' => { - 'type' => '757625' - }, - '3' => { - 'type' => '757625' - }, - '4' => { - 'type' => '3186' - }, - '5' => { - 'type' => '759038' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '760730' => { - 'BaseType' => '760742', - 'Header' => 'pkcs11.h', - 'Line' => '1015', - 'Name' => 'CK_C_UnwrapKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760742' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t, unsigned char*, unsigned long, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '760142' - }, - '2' => { - 'type' => '757625' - }, - '3' => { - 'type' => '3186' - }, - '4' => { - 'type' => '63' - }, - '5' => { - 'type' => '759790' - }, - '6' => { - 'type' => '63' - }, - '7' => { - 'type' => '759796' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '760798' => { - 'BaseType' => '760810', - 'Header' => 'pkcs11.h', - 'Line' => '1024', - 'Name' => 'CK_C_DeriveKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760810' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '757523' - }, - '1' => { - 'type' => '760142' - }, - '2' => { - 'type' => '757625' - }, - '3' => { - 'type' => '759790' - }, - '4' => { - 'type' => '63' - }, - '5' => { - 'type' => '759796' - } - }, - 'Return' => '757856', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '760856' => { - 'BaseType' => '759333', - 'Header' => 'pkcs11.h', - 'Line' => '1032', - 'Name' => 'CK_C_SeedRandom', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760868' => { - 'BaseType' => '759333', - 'Header' => 'pkcs11.h', - 'Line' => '1035', - 'Name' => 'CK_C_GenerateRandom', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760880' => { - 'BaseType' => '759488', - 'Header' => 'pkcs11.h', - 'Line' => '1040', - 'Name' => 'CK_C_GetFunctionStatus', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '760892' => { - 'BaseType' => '759488', - 'Header' => 'pkcs11.h', - 'Line' => '1041', - 'Name' => 'CK_C_CancelFunction', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '761053' => { - 'Header' => 'pkcs11_int.h', - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'module', - 'offset' => '0', - 'type' => '758034' - }, - '1' => { - 'name' => 'tinfo', - 'offset' => '8', - 'type' => '757278' - }, - '2' => { - 'name' => 'slot_info', - 'offset' => '216', - 'type' => '757189' - }, - '3' => { - 'name' => 'pks', - 'offset' => '328', - 'type' => '757523' - }, - '4' => { - 'name' => 'sid', - 'offset' => '336', - 'type' => '757178' - }, - '5' => { - 'name' => 'init', - 'offset' => '344', - 'type' => '130' - } - }, - 'Name' => 'struct pkcs11_session_info', - 'Size' => '352', - 'Type' => 'Struct' - }, - '761498' => { - 'BaseType' => '630301', - 'Name' => 'gnutls_pkcs11_obj_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7624' => { - 'Header' => 'gnutls_hash_int.h', - 'Line' => '67', - 'Memb' => { - '0' => { - 'name' => 'e', - 'offset' => '0', - 'type' => '7511' - }, - '1' => { - 'name' => 'mac_len', - 'offset' => '8', - 'type' => '70' - }, - '2' => { - 'name' => 'hash', - 'offset' => '16', - 'type' => '7376' - }, - '3' => { - 'name' => 'setnonce', - 'offset' => '24', - 'type' => '7387' - }, - '4' => { - 'name' => 'output', - 'offset' => '32', - 'type' => '7398' - }, - '5' => { - 'name' => 'deinit', - 'offset' => '40', - 'type' => '7409' - }, - '6' => { - 'name' => 'handle', - 'offset' => '48', - 'type' => '184' - } - }, - 'Name' => 'struct mac_hd_st', - 'Size' => '56', - 'Type' => 'Struct' - }, - '7635' => { - 'BaseType' => '4483', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '33', - 'Name' => 'cipher_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '7646' => { - 'BaseType' => '4483', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '35', - 'Name' => 'cipher_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '7657' => { - 'BaseType' => '4551', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '37', - 'Name' => 'aead_cipher_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '766' => { - 'BaseType' => '682', - 'Name' => '_IO_lock_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7668' => { - 'BaseType' => '4551', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '43', - 'Name' => 'aead_cipher_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '7679' => { - 'BaseType' => '3683', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '49', - 'Name' => 'cipher_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '7690' => { - 'BaseType' => '4452', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '51', - 'Name' => 'cipher_auth_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '7701' => { - 'BaseType' => '4452', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '52', - 'Name' => 'cipher_setiv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '7712' => { - 'BaseType' => '4524', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '54', - 'Name' => 'cipher_tag_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '772' => { - 'BaseType' => '111', - 'Name' => 'char[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '7850' => { - 'BaseType' => '7856', - 'Name' => 'cipher_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7856' => { - 'BaseType' => '7022', - 'Name' => 'cipher_entry_st const', - 'Size' => '32', - 'Type' => 'Const' - }, - '7861' => { - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '67', - 'Memb' => { - '0' => { - 'name' => 'handle', - 'offset' => '0', - 'type' => '184' - }, - '1' => { - 'name' => 'e', - 'offset' => '8', - 'type' => '7850' - }, - '2' => { - 'name' => 'encrypt', - 'offset' => '16', - 'type' => '7635' - }, - '3' => { - 'name' => 'decrypt', - 'offset' => '24', - 'type' => '7646' - }, - '4' => { - 'name' => 'aead_encrypt', - 'offset' => '32', - 'type' => '7657' - }, - '5' => { - 'name' => 'aead_decrypt', - 'offset' => '40', - 'type' => '7668' - }, - '6' => { - 'name' => 'auth', - 'offset' => '48', - 'type' => '7690' - }, - '7' => { - 'name' => 'tag', - 'offset' => '56', - 'type' => '7712' - }, - '8' => { - 'name' => 'setiv', - 'offset' => '64', - 'type' => '7701' - }, - '9' => { - 'name' => 'deinit', - 'offset' => '72', - 'type' => '7679' - } - }, - 'Name' => 'struct cipher_hd_st', - 'Size' => '80', - 'Type' => 'Struct' - }, - '786256' => { - 'BaseType' => '761498', - 'Name' => 'gnutls_pkcs11_obj_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '786960' => { - 'BaseType' => '761498', - 'Name' => 'gnutls_pkcs11_obj_t*const', - 'Size' => '8', - 'Type' => 'Const' - }, - '7872' => { - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '191', - 'Memb' => { - '0' => { - 'name' => 'dig', - 'offset' => '0', - 'type' => '7522' - }, - '1' => { - 'name' => 'mac', - 'offset' => '0', - 'type' => '7624' - } - }, - 'Name' => 'anon-union-gnutls_cipher_int.h-191', - 'Size' => '56', - 'Type' => 'Union' - }, - '788' => { - 'BaseType' => '123', - 'Header' => 'stdint.h', - 'Line' => '48', - 'Name' => 'uint8_t', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '793307' => { - 'Header' => 'x509.h', - 'Line' => '1395', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '208' - }, - '1' => { - 'name' => 'critical', - 'offset' => '8', - 'type' => '130' - }, - '2' => { - 'name' => 'data', - 'offset' => '16', - 'type' => '3192' - } - }, - 'Name' => 'struct gnutls_x509_ext_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '793360' => { - 'BaseType' => '793307', - 'Header' => 'x509.h', - 'Line' => '1399', - 'Name' => 'gnutls_x509_ext_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '798703' => { - 'BaseType' => '793360', - 'Name' => 'gnutls_x509_ext_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '799' => { - 'BaseType' => '98', - 'Header' => 'stdint.h', - 'Line' => '49', - 'Name' => 'uint16_t', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '8008' => { - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '200', - 'Memb' => { - '0' => { - 'name' => 'cipher', - 'offset' => '0', - 'type' => '7861' - }, - '1' => { - 'name' => 'mac', - 'offset' => '80', - 'type' => '7872' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'is_mac', - 'offset' => '136', - 'type' => '130' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'ssl_hmac', - 'offset' => '136', - 'type' => '130' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'non_null', - 'offset' => '136', - 'type' => '130' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'etm', - 'offset' => '136', - 'type' => '130' - }, - '6' => { - 'name' => 'tag_size', - 'offset' => '144', - 'type' => '52' - } - }, - 'Name' => 'struct auth_cipher_hd_st', - 'Size' => '152', - 'Type' => 'Struct' - }, - '801245' => { - 'BaseType' => '798703', - 'Name' => 'gnutls_x509_ext_st**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8019' => { - 'Header' => 'gnutls_compress.h', - 'Line' => '38', - 'Memb' => { - '0' => { - 'name' => 'handle', - 'offset' => '0', - 'type' => '184' - }, - '1' => { - 'name' => 'algo', - 'offset' => '8', - 'type' => '2021' - } - }, - 'Name' => 'struct comp_hd_st', - 'Size' => '16', - 'Type' => 'Struct' - }, - '8056' => { - 'BaseType' => '8019', - 'Header' => 'gnutls_compress.h', - 'Line' => '41', - 'Name' => 'comp_hd_st', - 'Size' => '16', - 'Type' => 'Typedef' - }, - '810' => { - 'BaseType' => '130', - 'Header' => 'stdint.h', - 'Line' => '51', - 'Name' => 'uint32_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '821' => { - 'BaseType' => '63', - 'Header' => 'stdint.h', - 'Line' => '55', - 'Name' => 'uint64_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8402' => { - 'BaseType' => '788', - 'Name' => 'uint8_t[48]', - 'Size' => '48', - 'Type' => 'Array' - }, - '8418' => { - 'BaseType' => '788', - 'Name' => 'uint8_t[32]', - 'Size' => '32', - 'Type' => 'Array' - }, - '8434' => { - 'BaseType' => '8440', - 'Name' => 'version_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8440' => { - 'BaseType' => '7364', - 'Name' => 'version_entry_st const', - 'Size' => '32', - 'Type' => 'Const' - }, - '8445' => { - 'Header' => 'gnutls_int.h', - 'Line' => '589', - 'Memb' => { - '0' => { - 'name' => 'entity', - 'offset' => '0', - 'type' => '130' - }, - '1' => { - 'name' => 'kx_algorithm', - 'offset' => '4', - 'type' => '1815' - }, - '10' => { - 'name' => 'server_random', - 'offset' => '104', - 'type' => '8418' - }, - '11' => { - 'name' => 'session_id', - 'offset' => '136', - 'type' => '8418' - }, - '12' => { - 'name' => 'session_id_size', - 'offset' => '168', - 'type' => '788' - }, - '13' => { - 'name' => 'timestamp', - 'offset' => '176', - 'type' => '225' - }, - '14' => { - 'name' => 'max_record_send_size', - 'offset' => '184', - 'type' => '799' - }, - '15' => { - 'name' => 'max_record_recv_size', - 'offset' => '186', - 'type' => '799' - }, - '16' => { - 'name' => 'cert_type', - 'offset' => '188', - 'type' => '2292' - }, - '17' => { - 'name' => 'ecc_curve', - 'offset' => '192', - 'type' => '2562' - }, - '18' => { - 'name' => 'server_sign_algo', - 'offset' => '196', - 'type' => '2500' - }, - '19' => { - 'name' => 'client_sign_algo', - 'offset' => '200', - 'type' => '2500' - }, - '2' => { - 'name' => 'epoch_read', - 'offset' => '8', - 'type' => '799' - }, - '20' => { - 'name' => 'ext_master_secret', - 'offset' => '204', - 'type' => '788' - }, - '21' => { - 'name' => 'etm', - 'offset' => '205', - 'type' => '788' - }, - '22' => { - 'name' => 'do_recv_supplemental', - 'offset' => '208', - 'type' => '70' - }, - '23' => { - 'name' => 'do_send_supplemental', - 'offset' => '212', - 'type' => '70' - }, - '24' => { - 'name' => 'pversion', - 'offset' => '216', - 'type' => '8434' - }, - '3' => { - 'name' => 'epoch_write', - 'offset' => '10', - 'type' => '799' - }, - '4' => { - 'name' => 'epoch_next', - 'offset' => '12', - 'type' => '799' - }, - '5' => { - 'name' => 'epoch_min', - 'offset' => '14', - 'type' => '799' - }, - '6' => { - 'name' => 'cipher_suite', - 'offset' => '16', - 'type' => '7034' - }, - '7' => { - 'name' => 'compression_method', - 'offset' => '20', - 'type' => '2021' - }, - '8' => { - 'name' => 'master_secret', - 'offset' => '24', - 'type' => '8402' - }, - '9' => { - 'name' => 'client_random', - 'offset' => '72', - 'type' => '8418' - } - }, - 'Name' => 'struct security_parameters_st', - 'Size' => '224', - 'Type' => 'Struct' - }, - '8457' => { - 'BaseType' => '821', - 'Name' => 'uint64_t[64]', - 'Size' => '512', - 'Type' => 'Array' - }, - '8509' => { - 'BaseType' => '130', - 'Name' => 'unsigned int[32]', - 'Size' => '128', - 'Type' => 'Array' - }, - '8525' => { - 'Header' => 'gnutls_int.h', - 'Line' => '638', - 'Memb' => { - '0' => { - 'name' => 'priority', - 'offset' => '0', - 'type' => '8509' - }, - '1' => { - 'name' => 'algorithms', - 'offset' => '128', - 'type' => '130' - } - }, - 'Name' => 'struct priority_st', - 'Size' => '132', - 'Type' => 'Struct' - }, - '854054' => { - 'BaseType' => '854066', - 'Header' => 'gnutls.h', - 'Line' => '1696', - 'Name' => 'gnutls_srp_server_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '854066' => { - 'BaseType' => '854072', - 'Name' => 'struct gnutls_srp_server_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '854072' => { - 'Header' => 'srp.h', - 'Line' => '34', - 'Memb' => { - '0' => { - 'name' => 'password_file', - 'offset' => '0', - 'type' => '208' - }, - '1' => { - 'name' => 'password_conf_file', - 'offset' => '8', - 'type' => '208' - }, - '2' => { - 'name' => 'pwd_callback', - 'offset' => '16', - 'type' => '861141' - }, - '3' => { - 'name' => 'fake_salt_seed', - 'offset' => '24', - 'type' => '3192' - }, - '4' => { - 'name' => 'fake_salt_length', - 'offset' => '40', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_srp_server_credentials_st', - 'Size' => '48', - 'Type' => 'Struct' - }, - '854145' => { - 'BaseType' => '854157', - 'Header' => 'gnutls.h', - 'Line' => '1698', - 'Name' => 'gnutls_srp_client_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '854157' => { - 'BaseType' => '854163', - 'Name' => 'struct gnutls_srp_client_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '854163' => { - 'Header' => 'srp.h', - 'Line' => '28', - 'Memb' => { - '0' => { - 'name' => 'username', - 'offset' => '0', - 'type' => '208' - }, - '1' => { - 'name' => 'password', - 'offset' => '8', - 'type' => '208' - }, - '2' => { - 'name' => 'get_function', - 'offset' => '16', - 'type' => '861135' - } - }, - 'Name' => 'struct gnutls_srp_client_credentials_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '854212' => { - 'BaseType' => '854224', - 'Header' => 'gnutls.h', - 'Line' => '1748', - 'Name' => 'gnutls_srp_server_credentials_function', - 'Type' => 'Typedef' - }, - '854224' => { - 'Name' => 'int()(gnutls_session_t, char const*, gnutls_datum_t*, gnutls_datum_t*, gnutls_datum_t*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '105' - }, - '2' => { - 'type' => '3665' - }, - '3' => { - 'type' => '3665' - }, - '4' => { - 'type' => '3665' - }, - '5' => { - 'type' => '3665' - } - }, - 'Return' => '70', - 'Type' => 'Func' - }, - '854264' => { - 'BaseType' => '854276', - 'Header' => 'gnutls.h', - 'Line' => '1762', - 'Name' => 'gnutls_srp_client_credentials_function', - 'Type' => 'Typedef' - }, - '854276' => { - 'Name' => 'int()(gnutls_session_t, char**, char**)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '211849' - }, - '2' => { - 'type' => '211849' - } - }, - 'Return' => '70', - 'Type' => 'Func' - }, - '8575' => { - 'Header' => 'gnutls_int.h', - 'Line' => '645', - 'Memb' => { - '0' => { - 'name' => 'SR_DISABLED', - 'value' => '0' - }, - '1' => { - 'name' => 'SR_UNSAFE', - 'value' => '1' - }, - '2' => { - 'name' => 'SR_PARTIAL', - 'value' => '2' - }, - '3' => { - 'name' => 'SR_SAFE', - 'value' => '3' - } - }, - 'Name' => 'enum safe_renegotiation_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '861135' => { - 'BaseType' => '854264', - 'Name' => 'gnutls_srp_client_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '861141' => { - 'BaseType' => '854212', - 'Name' => 'gnutls_srp_server_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8623' => { - 'Header' => 'gnutls_int.h', - 'Line' => '707', - 'Memb' => { - '0' => { - 'name' => 'dh_params', - 'offset' => '0', - 'type' => '2759' - }, - '1' => { - 'name' => 'free_dh_params', - 'offset' => '8', - 'type' => '70' - } - }, - 'Name' => 'struct internal_params_st', - 'Size' => '16', - 'Type' => 'Struct' - }, - '866187' => { - 'BaseType' => '854145', - 'Name' => 'gnutls_srp_client_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '866772' => { - 'BaseType' => '854054', - 'Name' => 'gnutls_srp_server_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '873025' => { - 'BaseType' => '873037', - 'Header' => 'gnutls.h', - 'Line' => '1793', - 'Name' => 'gnutls_psk_client_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '873037' => { - 'BaseType' => '873043', - 'Name' => 'struct gnutls_psk_client_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '873043' => { - 'Header' => 'psk.h', - 'Line' => '29', - 'Memb' => { - '0' => { - 'name' => 'username', - 'offset' => '0', - 'type' => '3192' - }, - '1' => { - 'name' => 'key', - 'offset' => '16', - 'type' => '3192' - }, - '2' => { - 'name' => 'get_function', - 'offset' => '32', - 'type' => '879915' - } - }, - 'Name' => 'struct gnutls_psk_client_credentials_st', - 'Size' => '40', - 'Type' => 'Struct' - }, - '873092' => { - 'Header' => 'gnutls.h', - 'Line' => '1802', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PSK_KEY_RAW', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PSK_KEY_HEX', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_psk_key_flags', - 'Size' => '4', - 'Type' => 'Enum' - }, - '873122' => { - 'BaseType' => '873092', - 'Header' => 'gnutls.h', - 'Line' => '1805', - 'Name' => 'gnutls_psk_key_flags', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '873171' => { - 'BaseType' => '873183', - 'Header' => 'gnutls.h', - 'Line' => '1841', - 'Name' => 'gnutls_psk_client_credentials_function', - 'Type' => 'Typedef' - }, - '873183' => { - 'Name' => 'int()(gnutls_session_t, char**, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '2672' - }, - '1' => { - 'type' => '211849' - }, - '2' => { - 'type' => '3665' - } - }, - 'Return' => '70', - 'Type' => 'Func' - }, - '879915' => { - 'BaseType' => '873171', - 'Name' => 'gnutls_psk_client_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '880822' => { - 'BaseType' => '440299', - 'Name' => 'gnutls_psk_server_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8853' => { - 'Header' => 'gnutls_int.h', - 'Line' => '751', - 'Memb' => { - '0' => { - 'name' => 'cookie', - 'offset' => '0', - 'type' => '8418' - }, - '1' => { - 'name' => 'cookie_len', - 'offset' => '32', - 'type' => '788' - }, - '10' => { - 'name' => 'blocking', - 'offset' => '56', - 'type' => '7357' - }, - '11' => { - 'name' => 'handshake_start_time', - 'offset' => '64', - 'type' => '247' - }, - '12' => { - 'name' => 'actual_retrans_timeout_ms', - 'offset' => '80', - 'type' => '130' - }, - '13' => { - 'name' => 'async_term', - 'offset' => '88', - 'type' => '225' - }, - '14' => { - 'name' => 'last_retransmit', - 'offset' => '96', - 'type' => '247' - }, - '15' => { - 'name' => 'packets_dropped', - 'offset' => '112', - 'type' => '130' - }, - '2' => { - 'name' => 'hsk_write_seq', - 'offset' => '34', - 'type' => '799' - }, - '3' => { - 'name' => 'hsk_read_seq', - 'offset' => '36', - 'type' => '130' - }, - '4' => { - 'name' => 'mtu', - 'offset' => '40', - 'type' => '799' - }, - '5' => { - 'name' => 'flight_init', - 'offset' => '42', - 'type' => '7357' - }, - '6' => { - 'name' => 'last_flight', - 'offset' => '43', - 'type' => '7357' - }, - '7' => { - 'name' => 'retrans_timeout_ms', - 'offset' => '44', - 'type' => '130' - }, - '8' => { - 'name' => 'total_timeout_ms', - 'offset' => '48', - 'type' => '130' - }, - '9' => { - 'name' => 'hsk_hello_verify_requests', - 'offset' => '52', - 'type' => '130' - } - }, - 'Name' => 'struct dtls_st', - 'Size' => '120', - 'Type' => 'Struct' - }, - '885625' => { - 'BaseType' => '151', - 'Header' => 'stdio.h', - 'Line' => '90', - 'Name' => 'off_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8865' => { - 'Header' => 'gnutls_int.h', - 'Line' => '948', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '799' - }, - '1' => { - 'name' => 'priv', - 'offset' => '8', - 'type' => '4020' - }, - '2' => { - 'name' => 'set', - 'offset' => '16', - 'type' => '7357' - } - }, - 'Name' => 'anon-struct-gnutls_int.h-948', - 'Size' => '24', - 'Type' => 'Struct' - }, - '8914' => { - 'Header' => 'gnutls_int.h', - 'Line' => '954', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '799' - }, - '1' => { - 'name' => 'priv', - 'offset' => '8', - 'type' => '4020' - }, - '2' => { - 'name' => 'set', - 'offset' => '16', - 'type' => '7357' - } - }, - 'Name' => 'anon-struct-gnutls_int.h-954', - 'Size' => '24', - 'Type' => 'Struct' - }, - '939238' => { - 'BaseType' => '939250', - 'Header' => 'x509.h', - 'Line' => '671', - 'Name' => 'gnutls_x509_crl_iter_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '939250' => { - 'BaseType' => '939256', - 'Name' => 'struct gnutls_x509_crl_iter*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '939256' => { - 'Header' => 'x509_int.h', - 'Line' => '45', - 'Memb' => { - '0' => { - 'name' => 'rcache', - 'offset' => '0', - 'type' => '117419' - }, - '1' => { - 'name' => 'rcache_idx', - 'offset' => '8', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_x509_crl_iter', - 'Size' => '16', - 'Type' => 'Struct' - }, - '942559' => { - 'BaseType' => '545129', - 'Name' => 'gnutls_x509_crl_t const', - 'Size' => '8', - 'Type' => 'Const' - }, - '945757' => { - 'BaseType' => '939238', - 'Name' => 'gnutls_x509_crl_iter_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '950146' => { - 'BaseType' => '567509', - 'Name' => 'gnutls_x509_crl_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '965668' => { - 'BaseType' => '629572', - 'Name' => 'gnutls_x509_crq_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '98' => { - 'Name' => 'unsigned short', - 'Size' => '2', - 'Type' => 'Intrinsic' - }, - '985583' => { - 'BaseType' => '184', - 'Header' => 'x509.h', - 'Line' => '598', - 'Name' => 'gnutls_x509_dn_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '993661' => { - 'BaseType' => '985583', - 'Name' => 'gnutls_x509_dn_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '999716' => { - 'BaseType' => '999727', - 'Header' => 'x509-ext.h', - 'Line' => '37', - 'Name' => 'gnutls_subject_alt_names_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '999727' => { - 'BaseType' => '999733', - 'Name' => 'struct gnutls_subject_alt_names_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '999733' => { - 'Line' => '41', - 'Memb' => { - '0' => { - 'name' => 'names', - 'offset' => '0', - 'type' => '1271494' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '130' - } - }, - 'Name' => 'struct gnutls_subject_alt_names_st', - 'Size' => '16', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '999738' => { - 'BaseType' => '999749', - 'Header' => 'x509-ext.h', - 'Line' => '107', - 'Name' => 'gnutls_x509_aki_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '999749' => { - 'BaseType' => '999755', - 'Name' => 'struct gnutls_x509_aki_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '999755' => { - 'Line' => '657', - 'Memb' => { - '0' => { - 'name' => 'id', - 'offset' => '0', - 'type' => '3192' - }, - '1' => { - 'name' => 'cert_issuer', - 'offset' => '16', - 'type' => '999733' - }, - '2' => { - 'name' => 'serial', - 'offset' => '32', - 'type' => '3192' - } - }, - 'Name' => 'struct gnutls_x509_aki_st', - 'Size' => '48', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - } - }, - 'UndefinedSymbols' => { - 'libgnutls.so.30.0.0' => { - 'Trspi_Error_Code' => 0, - 'Trspi_Error_Layer' => 0, - 'Trspi_Error_String' => 0, - 'Tspi_Context_Close' => 0, - 'Tspi_Context_CloseObject' => 0, - 'Tspi_Context_Connect' => 0, - 'Tspi_Context_Create' => 0, - 'Tspi_Context_CreateObject' => 0, - 'Tspi_Context_FreeMemory' => 0, - 'Tspi_Context_GetRegisteredKeysByUUID2' => 0, - 'Tspi_Context_GetTpmObject' => 0, - 'Tspi_Context_LoadKeyByBlob' => 0, - 'Tspi_Context_LoadKeyByUUID' => 0, - 'Tspi_Context_RegisterKey' => 0, - 'Tspi_Context_UnregisterKey' => 0, - 'Tspi_DecodeBER_TssBlob' => 0, - 'Tspi_EncodeDER_TssBlob' => 0, - 'Tspi_GetAttribData' => 0, - 'Tspi_GetPolicyObject' => 0, - 'Tspi_Hash_SetHashValue' => 0, - 'Tspi_Hash_Sign' => 0, - 'Tspi_Key_CreateKey' => 0, - 'Tspi_Policy_AssignToObject' => 0, - 'Tspi_Policy_SetSecret' => 0, - 'Tspi_SetAttribUint32' => 0, - 'Tspi_TPM_StirRandom' => 0, - '_ITM_deregisterTMCloneTable' => 0, - '_ITM_registerTMCloneTable' => 0, - '_Jv_RegisterClasses' => 0, - '__assert_fail@GLIBC_2.2.5' => 0, - '__ctype_b_loc@GLIBC_2.3' => 0, - '__cxa_finalize@GLIBC_2.2.5' => 0, - '__errno_location@GLIBC_2.2.5' => 0, - '__fxstat@GLIBC_2.2.5' => 0, - '__getdelim@GLIBC_2.2.5' => 0, - '__gmon_start__' => 0, - '__gmpz_add' => 0, - '__gmpz_add_ui' => 0, - '__gmpz_cdiv_q' => 0, - '__gmpz_clear' => 0, - '__gmpz_cmp' => 0, - '__gmpz_cmp_ui' => 0, - '__gmpz_fdiv_r' => 0, - '__gmpz_init' => 0, - '__gmpz_invert' => 0, - '__gmpz_mod' => 0, - '__gmpz_mul' => 0, - '__gmpz_mul_ui' => 0, - '__gmpz_powm' => 0, - '__gmpz_probab_prime_p' => 0, - '__gmpz_set' => 0, - '__gmpz_set_ui' => 0, - '__gmpz_sizeinbase' => 0, - '__gmpz_sub' => 0, - '__gmpz_sub_ui' => 0, - '__rawmemchr@GLIBC_2.2.5' => 0, - '__register_atfork@GLIBC_2.3.2' => 0, - '__xstat@GLIBC_2.2.5' => 0, - 'abort@GLIBC_2.2.5' => 0, - 'asn1_array2tree@LIBTASN1_0_3' => 0, - 'asn1_check_version@LIBTASN1_0_3' => 0, - 'asn1_copy_node@LIBTASN1_0_3' => 0, - 'asn1_create_element@LIBTASN1_0_3' => 0, - 'asn1_decode_simple_ber@LIBTASN1_0_3' => 0, - 'asn1_decode_simple_der@LIBTASN1_0_3' => 0, - 'asn1_delete_structure2@LIBTASN1_0_3' => 0, - 'asn1_delete_structure@LIBTASN1_0_3' => 0, - 'asn1_der_coding@LIBTASN1_0_3' => 0, - 'asn1_der_decoding2@LIBTASN1_0_3' => 0, - 'asn1_der_decoding@LIBTASN1_0_3' => 0, - 'asn1_der_decoding_startEnd@LIBTASN1_0_3' => 0, - 'asn1_encode_simple_der@LIBTASN1_0_3' => 0, - 'asn1_find_node@LIBTASN1_0_3' => 0, - 'asn1_get_length_der@LIBTASN1_0_3' => 0, - 'asn1_get_tag_der@LIBTASN1_0_3' => 0, - 'asn1_length_der@LIBTASN1_0_3' => 0, - 'asn1_number_of_elements@LIBTASN1_0_3' => 0, - 'asn1_read_node_value@LIBTASN1_0_3' => 0, - 'asn1_read_value@LIBTASN1_0_3' => 0, - 'asn1_read_value_type@LIBTASN1_0_3' => 0, - 'asn1_write_value@LIBTASN1_0_3' => 0, - 'bindtextdomain@GLIBC_2.2.5' => 0, - 'calloc@GLIBC_2.2.5' => 0, - 'clock_gettime@GLIBC_2.17' => 0, - 'close@GLIBC_2.2.5' => 0, - 'closedir@GLIBC_2.2.5' => 0, - 'connect@GLIBC_2.2.5' => 0, - 'dcgettext@GLIBC_2.2.5' => 0, - 'deflate' => 0, - 'deflateEnd' => 0, - 'deflateInit2_' => 0, - 'fclose@GLIBC_2.2.5' => 0, - 'fcntl@GLIBC_2.2.5' => 0, - 'feof@GLIBC_2.2.5' => 0, - 'ferror@GLIBC_2.2.5' => 0, - 'fflush@GLIBC_2.2.5' => 0, - 'fgetc@GLIBC_2.2.5' => 0, - 'fgets@GLIBC_2.2.5' => 0, - 'fileno@GLIBC_2.2.5' => 0, - 'fopen@GLIBC_2.2.5' => 0, - 'fprintf@GLIBC_2.2.5' => 0, - 'fputs@GLIBC_2.2.5' => 0, - 'fread@GLIBC_2.2.5' => 0, - 'free@GLIBC_2.2.5' => 0, - 'fseek@GLIBC_2.2.5' => 0, - 'ftell@GLIBC_2.2.5' => 0, - 'ftello@GLIBC_2.2.5' => 0, - 'fwrite@GLIBC_2.2.5' => 0, - 'getenv@GLIBC_2.2.5' => 0, - 'getpid@GLIBC_2.2.5' => 0, - 'getpwuid_r@GLIBC_2.2.5' => 0, - 'getrusage@GLIBC_2.2.5' => 0, - 'getuid@GLIBC_2.2.5' => 0, - 'gmtime_r@GLIBC_2.2.5' => 0, - 'iconv@GLIBC_2.2.5' => 0, - 'iconv_close@GLIBC_2.2.5' => 0, - 'iconv_open@GLIBC_2.2.5' => 0, - 'idn_free@LIBIDN_1.0' => 0, - 'idna_strerror@LIBIDN_1.0' => 0, - 'idna_to_ascii_8z@LIBIDN_1.0' => 0, - 'inet_aton@GLIBC_2.2.5' => 0, - 'inet_ntop@GLIBC_2.2.5' => 0, - 'inet_pton@GLIBC_2.2.5' => 0, - 'inflate' => 0, - 'inflateEnd' => 0, - 'inflateInit2_' => 0, - 'malloc@GLIBC_2.2.5' => 0, - 'memchr@GLIBC_2.2.5' => 0, - 'memcmp@GLIBC_2.2.5' => 0, - 'memcpy@GLIBC_2.14' => 0, - 'memmem@GLIBC_2.2.5' => 0, - 'memmove@GLIBC_2.2.5' => 0, - 'memset@GLIBC_2.2.5' => 0, - 'mkdir@GLIBC_2.2.5' => 0, - 'nanosleep@GLIBC_2.2.5' => 0, - 'nettle_aes128_decrypt@NETTLE_6' => 0, - 'nettle_aes128_encrypt@NETTLE_6' => 0, - 'nettle_aes128_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes128_set_encrypt_key@NETTLE_6' => 0, - 'nettle_aes192_decrypt@NETTLE_6' => 0, - 'nettle_aes192_encrypt@NETTLE_6' => 0, - 'nettle_aes192_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes192_set_encrypt_key@NETTLE_6' => 0, - 'nettle_aes256_decrypt@NETTLE_6' => 0, - 'nettle_aes256_encrypt@NETTLE_6' => 0, - 'nettle_aes256_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes256_set_encrypt_key@NETTLE_6' => 0, - 'nettle_aes_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes_set_encrypt_key@NETTLE_6' => 0, - 'nettle_arcfour128_set_key@NETTLE_6' => 0, - 'nettle_arcfour_crypt@NETTLE_6' => 0, - 'nettle_arctwo40_set_key@NETTLE_6' => 0, - 'nettle_arctwo_decrypt@NETTLE_6' => 0, - 'nettle_arctwo_encrypt@NETTLE_6' => 0, - 'nettle_camellia128_crypt@NETTLE_6' => 0, - 'nettle_camellia128_set_encrypt_key@NETTLE_6' => 0, - 'nettle_camellia192_set_decrypt_key@NETTLE_6' => 0, - 'nettle_camellia192_set_encrypt_key@NETTLE_6' => 0, - 'nettle_camellia256_crypt@NETTLE_6' => 0, - 'nettle_camellia256_set_decrypt_key@NETTLE_6' => 0, - 'nettle_camellia256_set_encrypt_key@NETTLE_6' => 0, - 'nettle_camellia_set_decrypt_key@NETTLE_6' => 0, - 'nettle_cbc_decrypt@NETTLE_6' => 0, - 'nettle_cbc_encrypt@NETTLE_6' => 0, - 'nettle_ccm_decrypt_message@NETTLE_6' => 0, - 'nettle_ccm_encrypt_message@NETTLE_6' => 0, - 'nettle_chacha_poly1305_decrypt@NETTLE_6' => 0, - 'nettle_chacha_poly1305_digest@NETTLE_6' => 0, - 'nettle_chacha_poly1305_encrypt@NETTLE_6' => 0, - 'nettle_chacha_poly1305_set_key@NETTLE_6' => 0, - 'nettle_chacha_poly1305_set_nonce@NETTLE_6' => 0, - 'nettle_chacha_poly1305_update@NETTLE_6' => 0, - 'nettle_des3_decrypt@NETTLE_6' => 0, - 'nettle_des3_encrypt@NETTLE_6' => 0, - 'nettle_des3_set_key@NETTLE_6' => 0, - 'nettle_des_decrypt@NETTLE_6' => 0, - 'nettle_des_encrypt@NETTLE_6' => 0, - 'nettle_des_set_key@NETTLE_6' => 0, - 'nettle_dsa_generate_params@HOGWEED_4' => 0, - 'nettle_dsa_params_clear@HOGWEED_4' => 0, - 'nettle_dsa_params_init@HOGWEED_4' => 0, - 'nettle_dsa_sign@HOGWEED_4' => 0, - 'nettle_dsa_signature_clear@HOGWEED_4' => 0, - 'nettle_dsa_signature_init@HOGWEED_4' => 0, - 'nettle_dsa_verify@HOGWEED_4' => 0, - 'nettle_ecc_point_clear@HOGWEED_4' => 0, - 'nettle_ecc_point_get@HOGWEED_4' => 0, - 'nettle_ecc_point_init@HOGWEED_4' => 0, - 'nettle_ecc_point_mul@HOGWEED_4' => 0, - 'nettle_ecc_point_mul_g@HOGWEED_4' => 0, - 'nettle_ecc_point_set@HOGWEED_4' => 0, - 'nettle_ecc_scalar_clear@HOGWEED_4' => 0, - 'nettle_ecc_scalar_get@HOGWEED_4' => 0, - 'nettle_ecc_scalar_init@HOGWEED_4' => 0, - 'nettle_ecc_scalar_set@HOGWEED_4' => 0, - 'nettle_ecc_size@HOGWEED_4' => 0, - 'nettle_ecc_size_a@HOGWEED_4' => 0, - 'nettle_ecdsa_generate_keypair@HOGWEED_4' => 0, - 'nettle_ecdsa_sign@HOGWEED_4' => 0, - 'nettle_ecdsa_verify@HOGWEED_4' => 0, - 'nettle_gcm_aes128_digest@NETTLE_6' => 0, - 'nettle_gcm_aes128_set_iv@NETTLE_6' => 0, - 'nettle_gcm_aes128_set_key@NETTLE_6' => 0, - 'nettle_gcm_aes128_update@NETTLE_6' => 0, - 'nettle_gcm_aes256_digest@NETTLE_6' => 0, - 'nettle_gcm_aes256_set_iv@NETTLE_6' => 0, - 'nettle_gcm_aes256_set_key@NETTLE_6' => 0, - 'nettle_gcm_aes256_update@NETTLE_6' => 0, - 'nettle_gcm_camellia128_digest@NETTLE_6' => 0, - 'nettle_gcm_camellia128_set_iv@NETTLE_6' => 0, - 'nettle_gcm_camellia128_set_key@NETTLE_6' => 0, - 'nettle_gcm_camellia128_update@NETTLE_6' => 0, - 'nettle_gcm_camellia256_digest@NETTLE_6' => 0, - 'nettle_gcm_camellia256_set_iv@NETTLE_6' => 0, - 'nettle_gcm_camellia256_set_key@NETTLE_6' => 0, - 'nettle_gcm_camellia256_update@NETTLE_6' => 0, - 'nettle_gcm_decrypt@NETTLE_6' => 0, - 'nettle_gcm_digest@NETTLE_6' => 0, - 'nettle_gcm_encrypt@NETTLE_6' => 0, - 'nettle_gcm_set_iv@NETTLE_6' => 0, - 'nettle_gcm_set_key@NETTLE_6' => 0, - 'nettle_gcm_update@NETTLE_6' => 0, - 'nettle_hmac_digest@NETTLE_6' => 0, - 'nettle_hmac_md5_digest@NETTLE_6' => 0, - 'nettle_hmac_md5_set_key@NETTLE_6' => 0, - 'nettle_hmac_md5_update@NETTLE_6' => 0, - 'nettle_hmac_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha1_digest@NETTLE_6' => 0, - 'nettle_hmac_sha1_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha1_update@NETTLE_6' => 0, - 'nettle_hmac_sha224_digest@NETTLE_6' => 0, - 'nettle_hmac_sha224_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha256_digest@NETTLE_6' => 0, - 'nettle_hmac_sha256_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha256_update@NETTLE_6' => 0, - 'nettle_hmac_sha384_digest@NETTLE_6' => 0, - 'nettle_hmac_sha384_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha512_digest@NETTLE_6' => 0, - 'nettle_hmac_sha512_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha512_update@NETTLE_6' => 0, - 'nettle_md2_digest@NETTLE_6' => 0, - 'nettle_md2_init@NETTLE_6' => 0, - 'nettle_md2_update@NETTLE_6' => 0, - 'nettle_md5_digest@NETTLE_6' => 0, - 'nettle_md5_init@NETTLE_6' => 0, - 'nettle_md5_update@NETTLE_6' => 0, - 'nettle_memxor@NETTLE_6' => 0, - 'nettle_mpz_get_str_256@HOGWEED_4' => 0, - 'nettle_mpz_random@HOGWEED_4' => 0, - 'nettle_mpz_random_size@HOGWEED_4' => 0, - 'nettle_mpz_set_str_256_s@HOGWEED_4' => 0, - 'nettle_mpz_set_str_256_u@HOGWEED_4' => 0, - 'nettle_mpz_sizeinbase_256_s@HOGWEED_4' => 0, - 'nettle_mpz_sizeinbase_256_u@HOGWEED_4' => 0, - 'nettle_pbkdf2_hmac_sha1@NETTLE_6' => 0, - 'nettle_rsa_decrypt_tr@HOGWEED_4' => 0, - 'nettle_rsa_encrypt@HOGWEED_4' => 0, - 'nettle_rsa_generate_keypair@HOGWEED_4' => 0, - 'nettle_rsa_pkcs1_sign_tr@HOGWEED_4' => 0, - 'nettle_rsa_pkcs1_verify@HOGWEED_4' => 0, - 'nettle_rsa_private_key_clear@HOGWEED_4' => 0, - 'nettle_rsa_private_key_init@HOGWEED_4' => 0, - 'nettle_rsa_public_key_clear@HOGWEED_4' => 0, - 'nettle_rsa_public_key_init@HOGWEED_4' => 0, - 'nettle_salsa20_256_set_key@NETTLE_6' => 0, - 'nettle_salsa20_crypt@NETTLE_6' => 0, - 'nettle_salsa20_set_key@NETTLE_6' => 0, - 'nettle_salsa20_set_nonce@NETTLE_6' => 0, - 'nettle_salsa20r12_crypt@NETTLE_6' => 0, - 'nettle_secp_256r1@HOGWEED_4' => 0, - 'nettle_secp_384r1@HOGWEED_4' => 0, - 'nettle_secp_521r1@HOGWEED_4' => 0, - 'nettle_sha1_digest@NETTLE_6' => 0, - 'nettle_sha1_init@NETTLE_6' => 0, - 'nettle_sha1_update@NETTLE_6' => 0, - 'nettle_sha224_digest@NETTLE_6' => 0, - 'nettle_sha224_init@NETTLE_6' => 0, - 'nettle_sha256_digest@NETTLE_6' => 0, - 'nettle_sha256_init@NETTLE_6' => 0, - 'nettle_sha256_update@NETTLE_6' => 0, - 'nettle_sha384_digest@NETTLE_6' => 0, - 'nettle_sha384_init@NETTLE_6' => 0, - 'nettle_sha512_digest@NETTLE_6' => 0, - 'nettle_sha512_init@NETTLE_6' => 0, - 'nettle_sha512_update@NETTLE_6' => 0, - 'nettle_umac128_digest@NETTLE_6' => 0, - 'nettle_umac128_set_key@NETTLE_6' => 0, - 'nettle_umac128_set_nonce@NETTLE_6' => 0, - 'nettle_umac128_update@NETTLE_6' => 0, - 'nettle_umac96_digest@NETTLE_6' => 0, - 'nettle_umac96_set_key@NETTLE_6' => 0, - 'nettle_umac96_set_nonce@NETTLE_6' => 0, - 'nettle_umac96_update@NETTLE_6' => 0, - 'nettle_yarrow256_init@NETTLE_6' => 0, - 'nettle_yarrow256_random@NETTLE_6' => 0, - 'nettle_yarrow256_slow_reseed@NETTLE_6' => 0, - 'nettle_yarrow256_update@NETTLE_6' => 0, - 'open@GLIBC_2.2.5' => 0, - 'opendir@GLIBC_2.2.5' => 0, - 'p11_kit_message' => 0, - 'p11_kit_module_finalize' => 0, - 'p11_kit_module_get_flags' => 0, - 'p11_kit_module_get_name' => 0, - 'p11_kit_module_initialize' => 0, - 'p11_kit_module_load' => 0, - 'p11_kit_module_release' => 0, - 'p11_kit_modules_load_and_initialize' => 0, - 'p11_kit_pin_file_callback' => 0, - 'p11_kit_pin_get_length' => 0, - 'p11_kit_pin_get_value' => 0, - 'p11_kit_pin_new_for_string' => 0, - 'p11_kit_pin_register_callback' => 0, - 'p11_kit_pin_request' => 0, - 'p11_kit_pin_unref' => 0, - 'p11_kit_pin_unregister_callback' => 0, - 'p11_kit_space_strdup' => 0, - 'p11_kit_space_strlen' => 0, - 'p11_kit_strerror' => 0, - 'p11_kit_uri_format' => 0, - 'p11_kit_uri_free' => 0, - 'p11_kit_uri_get_attribute' => 0, - 'p11_kit_uri_get_attributes' => 0, - 'p11_kit_uri_get_module_info' => 0, - 'p11_kit_uri_get_pin_source' => 0, - 'p11_kit_uri_get_pin_value' => 0, - 'p11_kit_uri_get_token_info' => 0, - 'p11_kit_uri_match_module_info' => 0, - 'p11_kit_uri_match_token_info' => 0, - 'p11_kit_uri_new' => 0, - 'p11_kit_uri_parse' => 0, - 'p11_kit_uri_set_attribute' => 0, - 'pthread_mutex_destroy@GLIBC_2.2.5' => 0, - 'pthread_mutex_init@GLIBC_2.2.5' => 0, - 'pthread_mutex_lock@GLIBC_2.2.5' => 0, - 'pthread_mutex_unlock@GLIBC_2.2.5' => 0, - 'qsort@GLIBC_2.2.5' => 0, - 'read@GLIBC_2.2.5' => 0, - 'readdir_r@GLIBC_2.2.5' => 0, - 'realloc@GLIBC_2.2.5' => 0, - 'recv@GLIBC_2.2.5' => 0, - 'select@GLIBC_2.2.5' => 0, - 'snprintf@GLIBC_2.2.5' => 0, - 'socket@GLIBC_2.2.5' => 0, - 'sprintf@GLIBC_2.2.5' => 0, - 'sscanf@GLIBC_2.2.5' => 0, - 'stderr@GLIBC_2.2.5' => 0, - 'strcasecmp@GLIBC_2.2.5' => 0, - 'strchr@GLIBC_2.2.5' => 0, - 'strcmp@GLIBC_2.2.5' => 0, - 'strdup@GLIBC_2.2.5' => 0, - 'strerror@GLIBC_2.2.5' => 0, - 'strftime@GLIBC_2.2.5' => 0, - 'strlen@GLIBC_2.2.5' => 0, - 'strncasecmp@GLIBC_2.2.5' => 0, - 'strncat@GLIBC_2.2.5' => 0, - 'strncmp@GLIBC_2.2.5' => 0, - 'strncpy@GLIBC_2.2.5' => 0, - 'strpbrk@GLIBC_2.2.5' => 0, - 'strrchr@GLIBC_2.2.5' => 0, - 'strstr@GLIBC_2.2.5' => 0, - 'strtol@GLIBC_2.2.5' => 0, - 'strtoul@GLIBC_2.2.5' => 0, - 'strverscmp@GLIBC_2.2.5' => 0, - 'time@GLIBC_2.2.5' => 0, - 'tmpfile@GLIBC_2.2.5' => 0, - 'vasprintf@GLIBC_2.2.5' => 0, - 'write@GLIBC_2.2.5' => 0, - 'writev@GLIBC_2.2.5' => 0 - } - }, - 'WordSize' => '8' - }; diff --git a/devel/ABI-3.4.17-x86_64.dump b/devel/ABI-3.4.17-x86_64.dump deleted file mode 100644 index 89f5b5cbfb..0000000000 --- a/devel/ABI-3.4.17-x86_64.dump +++ /dev/null @@ -1,42810 +0,0 @@ -$VAR1 = { - 'ABI_DUMPER_VERSION' => '0.99.16', - 'ABI_DUMP_VERSION' => '3.2', - 'Arch' => 'x86_64', - 'GccVersion' => '6.2.0', - 'Headers' => { - 'abstract.h' => 1, - 'crypto.h' => 1, - 'dtls.h' => 1, - 'gnutls.h' => 1, - 'ocsp.h' => 1, - 'openpgp.h' => 1, - 'pkcs11.h' => 1, - 'pkcs12.h' => 1, - 'pkcs7.h' => 1, - 'system-keys.h' => 1, - 'tpm.h' => 1, - 'urls.h' => 1, - 'x509-ext.h' => 1, - 'x509.h' => 1 - }, - 'Language' => 'C', - 'LibraryName' => 'libgnutls.so.30.7.0', - 'LibraryVersion' => '3.4.17', - 'NameSpaces' => {}, - 'Needed' => { - 'libc.so.6' => 1, - 'libgmp.so.10' => 1, - 'libhogweed.so.4' => 1, - 'libidn.so.11' => 1, - 'libnettle.so.6' => 1, - 'libp11-kit.so.0' => 1, - 'libtasn1.so.6' => 1, - 'libz.so.1' => 1 - }, - 'PublicABI' => '1', - 'Sources' => { - 'alpn.c' => 1, - 'auto-verify.c' => 1, - 'cert_types.c' => 1, - 'ciphers.c' => 1, - 'ciphersuites.c' => 1, - 'common.c' => 1, - 'crl.c' => 1, - 'crl_write.c' => 1, - 'crq.c' => 1, - 'crypto-api.c' => 1, - 'crypto-backend.c' => 1, - 'debug.c' => 1, - 'dn.c' => 1, - 'ecc.c' => 1, - 'email-verify.c' => 1, - 'etm.c' => 1, - 'ext_master_secret.c' => 1, - 'extensions.c' => 1, - 'extras.c' => 1, - 'fips.c' => 1, - 'gnutls_alert.c' => 1, - 'gnutls_anon_cred.c' => 1, - 'gnutls_auth.c' => 1, - 'gnutls_buffers.c' => 1, - 'gnutls_cert.c' => 1, - 'gnutls_compress.c' => 1, - 'gnutls_db.c' => 1, - 'gnutls_dh.c' => 1, - 'gnutls_dtls.c' => 1, - 'gnutls_errors.c' => 1, - 'gnutls_extensions.c' => 1, - 'gnutls_global.c' => 1, - 'gnutls_handshake.c' => 1, - 'gnutls_mem.c' => 1, - 'gnutls_openpgp.c' => 1, - 'gnutls_pcert.c' => 1, - 'gnutls_priority.c' => 1, - 'gnutls_privkey.c' => 1, - 'gnutls_privkey_raw.c' => 1, - 'gnutls_psk.c' => 1, - 'gnutls_pubkey.c' => 1, - 'gnutls_range.c' => 1, - 'gnutls_record.c' => 1, - 'gnutls_session.c' => 1, - 'gnutls_session_pack.c' => 1, - 'gnutls_srp.c' => 1, - 'gnutls_state.c' => 1, - 'gnutls_str.c' => 1, - 'gnutls_supplemental.c' => 1, - 'gnutls_ui.c' => 1, - 'gnutls_x509.c' => 1, - 'heartbeat.c' => 1, - 'hostname-verify.c' => 1, - 'kx.c' => 1, - 'locks.c' => 1, - 'mac.c' => 1, - 'max_record.c' => 1, - 'name_constraints.c' => 1, - 'ocsp.c' => 1, - 'ocsp_output.c' => 1, - 'output.c' => 1, - 'pgp.c' => 1, - 'pgpverify.c' => 1, - 'pin.c' => 1, - 'pkcs11.c' => 1, - 'pkcs11_privkey.c' => 1, - 'pkcs11_secret.c' => 1, - 'pkcs11_write.c' => 1, - 'pkcs11x.c' => 1, - 'pkcs12.c' => 1, - 'pkcs12_bag.c' => 1, - 'pkcs7-attrs.c' => 1, - 'pkcs7-output.c' => 1, - 'pkcs7.c' => 1, - 'privkey.c' => 1, - 'privkey_openssl.c' => 1, - 'privkey_pkcs8.c' => 1, - 'protocols.c' => 1, - 'publickey.c' => 1, - 'random.c' => 1, - 'safe-memfuncs.c' => 1, - 'safe_renegotiation.c' => 1, - 'secparams.c' => 1, - 'server_name.c' => 1, - 'session_ticket.c' => 1, - 'sign.c' => 1, - 'signature.c' => 1, - 'srp.c' => 1, - 'srp_sb64.c' => 1, - 'srtp.c' => 1, - 'status_request.c' => 1, - 'system-keys-dummy.c' => 1, - 'system.c' => 1, - 'system_override.c' => 1, - 'tpm.c' => 1, - 'urls.c' => 1, - 'verify-high.c' => 1, - 'verify-high2.c' => 1, - 'verify-tofu.c' => 1, - 'verify.c' => 1, - 'x509.c' => 1, - 'x509_b64.c' => 1, - 'x509_dn.c' => 1, - 'x509_ext.c' => 1, - 'x509_write.c' => 1 - }, - 'SymbolInfo' => { - '1011159' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'userdata', - 'type' => '4278' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '146579', - 'ShortName' => 'gnutls_pkcs11_get_pin_function', - 'Source' => 'pin.c', - 'SourceLine' => '58' - }, - '1011206' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'fn', - 'type' => '146579' - }, - '1' => { - 'name' => 'userdata', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_set_pin_function', - 'Source' => 'pin.c', - 'SourceLine' => '41' - }, - '1027887' => { - 'Header' => 'tpm.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'srk_password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_tpm_privkey_delete', - 'Source' => 'tpm.c', - 'SourceLine' => '1718' - }, - '1028509' => { - 'Header' => 'tpm.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '1029014' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_tpm_get_registered', - 'Source' => 'tpm.c', - 'SourceLine' => '1662' - }, - '1029020' => { - 'Header' => 'tpm.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '1015619' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'url', - 'type' => '1002' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_tpm_key_list_get_url', - 'Source' => 'tpm.c', - 'SourceLine' => '1636' - }, - '1029302' => { - 'Header' => 'tpm.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '1015619' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tpm_key_list_deinit', - 'Source' => 'tpm.c', - 'SourceLine' => '1609' - }, - '1029379' => { - 'Header' => 'tpm.h', - 'Param' => { - '0' => { - 'name' => 'pk', - 'type' => '2768' - }, - '1' => { - 'name' => 'bits', - 'type' => '145' - }, - '2' => { - 'name' => 'srk_password', - 'type' => '110' - }, - '3' => { - 'name' => 'key_password', - 'type' => '110' - }, - '4' => { - 'name' => 'format', - 'type' => '1015715' - }, - '5' => { - 'name' => 'pub_format', - 'type' => '225461' - }, - '6' => { - 'name' => 'privkey', - 'offset' => '0', - 'type' => '4233' - }, - '7' => { - 'name' => 'pubkey', - 'offset' => '8', - 'type' => '4233' - }, - '8' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_tpm_privkey_generate', - 'Source' => 'tpm.c', - 'SourceLine' => '1328' - }, - '1032446' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '4199' - }, - '1' => { - 'name' => 'fdata', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '1015715' - }, - '3' => { - 'name' => 'srk_password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_tpm_raw', - 'Source' => 'tpm.c', - 'SourceLine' => '1195' - }, - '1035114' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'fdata', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '1015715' - }, - '3' => { - 'name' => 'srk_password', - 'type' => '110' - }, - '4' => { - 'name' => 'key_password', - 'type' => '110' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_tpm_raw', - 'Source' => 'tpm.c', - 'SourceLine' => '692' - }, - '1057820' => { - 'Header' => 'gnutls.h', - 'Return' => '75', - 'ShortName' => 'gnutls_fips140_mode_enabled', - 'Source' => 'fips.c', - 'SourceLine' => '406' - }, - '1110026' => { - 'Header' => 'urls.h', - 'Param' => { - '0' => { - 'name' => 'st', - 'type' => '1110287' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_register_custom_url', - 'Source' => 'urls.c', - 'SourceLine' => '106' - }, - '1110518' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'cert', - 'type' => '144886' - }, - '2' => { - 'name' => 'issuer', - 'type' => '4233' - }, - '3' => { - 'name' => 'fmt', - 'type' => '225461' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_get_raw_issuer', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3676' - }, - '1123278' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_session_get_verify_cert_status', - 'Source' => 'auto-verify.c', - 'SourceLine' => '151' - }, - '1123325' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'data', - 'type' => '12677' - }, - '2' => { - 'name' => 'elements', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_set_verify_cert2', - 'Source' => 'auto-verify.c', - 'SourceLine' => '122' - }, - '1123442' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_set_verify_cert', - 'Source' => 'auto-verify.c', - 'SourceLine' => '81' - }, - '1137439' => { - 'Header' => 'system-keys.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'privkey', - 'type' => '144874' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'cert_url', - 'type' => '1002' - }, - '4' => { - 'name' => 'key_url', - 'type' => '1002' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_system_key_add_x509', - 'Source' => 'system-keys-dummy.c', - 'SourceLine' => '53' - }, - '1137538' => { - 'Header' => 'system-keys.h', - 'Param' => { - '0' => { - 'name' => 'cert_url', - 'type' => '110' - }, - '1' => { - 'name' => 'key_url', - 'type' => '110' - } - }, - 'Return' => '75', - 'ShortName' => 'gnutls_system_key_delete', - 'Source' => 'system-keys-dummy.c', - 'SourceLine' => '48' - }, - '1137576' => { - 'Header' => 'system-keys.h', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '1137702' - }, - '1' => { - 'name' => 'cert_type', - 'type' => '145' - }, - '2' => { - 'name' => 'cert_url', - 'type' => '1002' - }, - '3' => { - 'name' => 'key_url', - 'type' => '1002' - }, - '4' => { - 'name' => 'label', - 'type' => '1002' - }, - '5' => { - 'name' => 'der', - 'type' => '4233' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_system_key_iter_get_info', - 'Source' => 'system-keys-dummy.c', - 'SourceLine' => '37' - }, - '1137708' => { - 'Header' => 'system-keys.h', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '1137264' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_system_key_iter_deinit', - 'Source' => 'system-keys-dummy.c', - 'SourceLine' => '31' - }, - '1157503' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '235', - 'ShortName' => 'gnutls_pkcs11_obj_flags_get_str', - 'Source' => 'pkcs11.c', - 'SourceLine' => '4072' - }, - '1158016' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - }, - '1' => { - 'name' => 'oflags', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_get_flags', - 'Source' => 'pkcs11.c', - 'SourceLine' => '4053' - }, - '1158079' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'cert', - 'type' => '144886' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_crt_is_known', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3951' - }, - '1158868' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'dn', - 'type' => '4175' - }, - '2' => { - 'name' => 'spki', - 'type' => '4175' - }, - '3' => { - 'name' => 'issuer', - 'type' => '4233' - }, - '4' => { - 'name' => 'fmt', - 'type' => '225461' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_get_raw_issuer_by_subject_key_id', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3855' - }, - '1159413' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'dn', - 'type' => '4175' - }, - '2' => { - 'name' => 'issuer', - 'type' => '4233' - }, - '3' => { - 'name' => 'fmt', - 'type' => '225461' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_get_raw_issuer_by_dn', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3770' - }, - '1162315' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '883691' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pkcs11_type_get_name', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3371' - }, - '1162366' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'mechanism', - 'type' => '1154584' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_get_mechanism', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3312' - }, - '1162911' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'flags', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_get_flags', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3262' - }, - '1163314' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'certs', - 'type' => '146359' - }, - '1' => { - 'name' => 'cert_max', - 'type' => '145' - }, - '2' => { - 'name' => 'objs', - 'type' => '1157111' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_list_import_pkcs11', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3188' - }, - '1164012' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'p_list', - 'type' => '1164428' - }, - '1' => { - 'name' => 'n_list', - 'type' => '21238' - }, - '2' => { - 'name' => 'url', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_list_import_url4', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3054' - }, - '1164434' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'p_list', - 'type' => '1157105' - }, - '1' => { - 'name' => 'n_list', - 'type' => '21238' - }, - '2' => { - 'name' => 'url', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_list_import_url3', - 'Source' => 'pkcs11.c', - 'SourceLine' => '2971' - }, - '1170449' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - }, - '1' => { - 'name' => 'detailed', - 'type' => '1144009' - }, - '2' => { - 'name' => 'url', - 'type' => '1002' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_export_url', - 'Source' => 'pkcs11.c', - 'SourceLine' => '2260' - }, - '1170632' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'ttype', - 'type' => '1144150' - }, - '2' => { - 'name' => 'output', - 'type' => '211' - }, - '3' => { - 'name' => 'output_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_get_info', - 'Source' => 'pkcs11.c', - 'SourceLine' => '2169' - }, - '1171290' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'seq', - 'type' => '145' - }, - '1' => { - 'name' => 'detailed', - 'type' => '1144009' - }, - '2' => { - 'name' => 'url', - 'type' => '1002' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_get_url', - 'Source' => 'pkcs11.c', - 'SourceLine' => '2123' - }, - '1177134' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - }, - '1' => { - 'name' => 'fmt', - 'type' => '225461' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_export3', - 'Source' => 'pkcs11.c', - 'SourceLine' => '1123' - }, - '1177723' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - }, - '1' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_export2', - 'Source' => 'pkcs11.c', - 'SourceLine' => '1100' - }, - '1177823' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - }, - '1' => { - 'name' => 'output_data', - 'type' => '211' - }, - '2' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_export', - 'Source' => 'pkcs11.c', - 'SourceLine' => '1064' - }, - '1178823' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'fn', - 'type' => '659961' - }, - '1' => { - 'name' => 'userdata', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_set_token_function', - 'Source' => 'pkcs11.c', - 'SourceLine' => '885' - }, - '1179040' => { - 'Header' => 'pkcs11.h', - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_reinit', - 'Source' => 'pkcs11.c', - 'SourceLine' => '810' - }, - '1179079' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'flags', - 'type' => '145' - }, - '1' => { - 'name' => 'deprecated_config_file', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_init', - 'Source' => 'pkcs11.c', - 'SourceLine' => '760' - }, - '1180333' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - }, - '1' => { - 'name' => 'itype', - 'type' => '1144094' - }, - '2' => { - 'name' => 'output', - 'type' => '211' - }, - '3' => { - 'name' => 'output_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_get_info', - 'Source' => 'pkcs11.c', - 'SourceLine' => '534' - }, - '1180467' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - }, - '1' => { - 'name' => 'itype', - 'type' => '1144094' - }, - '2' => { - 'name' => 'data', - 'type' => '318' - }, - '3' => { - 'name' => 'data_size', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_set_info', - 'Source' => 'pkcs11.c', - 'SourceLine' => '407' - }, - '1182061' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - }, - '1' => { - 'name' => 'params', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_add_provider', - 'Source' => 'pkcs11.c', - 'SourceLine' => '307' - }, - '1187585' => { - 'Header' => 'x509.h', - 'Line' => '372', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'result', - 'type' => '211' - }, - '2' => { - 'name' => 'result_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_serial' - }, - '1187620' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'id', - 'type' => '211' - }, - '2' => { - 'name' => 'id_size', - 'type' => '7280' - }, - '3' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_authority_key_id', - 'Source' => 'x509.c', - 'SourceLine' => '1078' - }, - '1206734' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - }, - '1' => { - 'name' => 'exts', - 'type' => '1207285' - }, - '2' => { - 'name' => 'exts_size', - 'type' => '21238' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_get_exts', - 'Source' => 'pkcs11x.c', - 'SourceLine' => '251' - }, - '1209470' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '1206728' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_ext_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '3049' - }, - '1228556' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '146252' - }, - '1' => { - 'name' => 'fmt', - 'type' => '225461' - }, - '2' => { - 'name' => 'data', - 'type' => '4233' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_export_pubkey', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '1172' - }, - '1229961' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'pk', - 'type' => '2768' - }, - '2' => { - 'name' => 'bits', - 'type' => '145' - }, - '3' => { - 'name' => 'label', - 'type' => '110' - }, - '4' => { - 'name' => 'cid', - 'type' => '4175' - }, - '5' => { - 'name' => 'fmt', - 'type' => '225461' - }, - '6' => { - 'name' => 'pubkey', - 'offset' => '0', - 'type' => '4233' - }, - '7' => { - 'name' => 'key_usage', - 'offset' => '8', - 'type' => '145' - }, - '8' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_generate3', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '738' - }, - '1232020' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146252' - }, - '1' => { - 'name' => 'detailed', - 'type' => '1144009' - }, - '2' => { - 'name' => 'url', - 'type' => '1002' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_export_url', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '581' - }, - '1235221' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '146252' - }, - '1' => { - 'name' => 'itype', - 'type' => '1144094' - }, - '2' => { - 'name' => 'output', - 'type' => '211' - }, - '3' => { - 'name' => 'output_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_get_info', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '176' - }, - '1255353' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'rnddata', - 'type' => '211' - }, - '2' => { - 'name' => 'len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_get_random', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '1279' - }, - '1255906' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'oldpin', - 'type' => '110' - }, - '2' => { - 'name' => 'newpin', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_set_pin', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '1200' - }, - '1256570' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'so_pin', - 'type' => '110' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_init', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '1142' - }, - '1257202' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'object_url', - 'type' => '110' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_delete_url', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '1097' - }, - '1258342' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'key', - 'type' => '144874' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'cid', - 'type' => '4175' - }, - '4' => { - 'name' => 'key_usage', - 'type' => '145' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_copy_x509_privkey2', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '626' - }, - '1259909' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'crt', - 'type' => '144886' - }, - '2' => { - 'name' => 'data', - 'type' => '4233' - }, - '3' => { - 'name' => 'label', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_copy_attached_extension', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '523' - }, - '1260720' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'pubkey', - 'type' => '4199' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'cid', - 'type' => '4175' - }, - '4' => { - 'name' => 'key_usage', - 'type' => '145' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_copy_pubkey', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '371' - }, - '1262439' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'crt', - 'type' => '144886' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'cid', - 'type' => '4175' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_copy_x509_crt2', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '91' - }, - '1264109' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3626' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_get_key_id', - 'Source' => 'privkey.c', - 'SourceLine' => '1608' - }, - '1264121' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'm', - 'type' => '4233' - }, - '2' => { - 'name' => 'e', - 'type' => '4233' - }, - '3' => { - 'name' => 'd', - 'type' => '4233' - }, - '4' => { - 'name' => 'p', - 'type' => '4233' - }, - '5' => { - 'name' => 'q', - 'type' => '4233' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4233' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '4233' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export_rsa_raw2', - 'Source' => 'privkey.c', - 'SourceLine' => '1359' - }, - '1264145' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'p', - 'type' => '4233' - }, - '2' => { - 'name' => 'q', - 'type' => '4233' - }, - '3' => { - 'name' => 'g', - 'type' => '4233' - }, - '4' => { - 'name' => 'y', - 'type' => '4233' - }, - '5' => { - 'name' => 'x', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export_dsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1386' - }, - '1264246' => { - 'Header' => 'x509.h', - 'Line' => '146', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'output_data', - 'type' => '211' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_export' - }, - '1264281' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'ret', - 'type' => '211' - }, - '2' => { - 'name' => 'ret_size', - 'type' => '7280' - }, - '3' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject_key_id', - 'Source' => 'x509.c', - 'SourceLine' => '909' - }, - '1264292' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3626' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_key_id', - 'Source' => 'x509.c', - 'SourceLine' => '2682' - }, - '12780' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'data', - 'type' => '318' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - }, - '3' => { - 'name' => 'range', - 'type' => '13694' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '241', - 'ShortName' => 'gnutls_record_send_range', - 'Source' => 'gnutls_range.c', - 'SourceLine' => '227' - }, - '1281506' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'key', - 'type' => '4233' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'key_usage', - 'type' => '145' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_copy_secret_key', - 'Source' => 'pkcs11_secret.c', - 'SourceLine' => '47' - }, - '1316163' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '1307663' - }, - '1' => { - 'name' => 'seed', - 'type' => '4175' - }, - '2' => { - 'name' => 'salt_length', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_server_fake_salt_seed', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '822' - }, - '1316350' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'bits', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_prime_bits', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '786' - }, - '1316409' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'username', - 'type' => '110' - }, - '1' => { - 'name' => 'password', - 'type' => '110' - }, - '2' => { - 'name' => 'salt', - 'type' => '4175' - }, - '3' => { - 'name' => 'generator', - 'type' => '4175' - }, - '4' => { - 'name' => 'prime', - 'type' => '4175' - }, - '5' => { - 'name' => 'res', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_verifier', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '730' - }, - '1317281' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_srp_server_get_username', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '698' - }, - '1317420' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '1307754' - }, - '1' => { - 'name' => 'func', - 'type' => '1316049' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_client_credentials_function', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '679' - }, - '1317479' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '1307663' - }, - '1' => { - 'name' => 'func', - 'type' => '1316055' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_server_credentials_function', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '645' - }, - '1317538' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1307663' - }, - '1' => { - 'name' => 'password_file', - 'type' => '110' - }, - '2' => { - 'name' => 'password_conf_file', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_set_server_credentials_file', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '571' - }, - '1317861' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1318138' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_allocate_server_credentials', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '521' - }, - '1318144' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1307663' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_free_server_credentials', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '489' - }, - '1318245' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1307754' - }, - '1' => { - 'name' => 'username', - 'type' => '110' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_set_client_credentials', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '459' - }, - '1318422' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1318492' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_allocate_client_credentials', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '432' - }, - '1318498' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1307754' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_free_client_credentials', - 'Source' => 'gnutls_srp.c', - 'SourceLine' => '414' - }, - '1336907' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '586075' - }, - '1' => { - 'name' => 'func', - 'type' => '155577' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_server_params_function', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '391' - }, - '1336966' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '586075' - }, - '1' => { - 'name' => 'dh_params', - 'type' => '3185' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_server_dh_params', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '375' - }, - '1337025' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_psk_client_get_hint', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '349' - }, - '1337164' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_psk_server_get_username', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '321' - }, - '1337303' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '1328726' - }, - '1' => { - 'name' => 'func', - 'type' => '1336807' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_client_credentials_function', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '303' - }, - '1337362' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '586075' - }, - '1' => { - 'name' => 'func', - 'type' => '595167' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_server_credentials_function', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '274' - }, - '1337421' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '586075' - }, - '1' => { - 'name' => 'hint', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_psk_set_server_credentials_hint', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '241' - }, - '1337557' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '586075' - }, - '1' => { - 'name' => 'password_file', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_psk_set_server_credentials_file', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '201' - }, - '1337710' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1337779' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_psk_allocate_server_credentials', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '176' - }, - '1337785' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '586075' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_free_server_credentials', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '158' - }, - '1337846' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1328726' - }, - '1' => { - 'name' => 'username', - 'type' => '110' - }, - '2' => { - 'name' => 'key', - 'type' => '4175' - }, - '3' => { - 'name' => 'flags', - 'type' => '1328823' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_psk_set_client_credentials', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '93' - }, - '1338325' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1338394' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_psk_allocate_client_credentials', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '63' - }, - '1338400' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1328726' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_free_client_credentials', - 'Source' => 'gnutls_psk.c', - 'SourceLine' => '45' - }, - '13750' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'orig', - 'type' => '13694' - }, - '2' => { - 'name' => 'next', - 'type' => '14875' - }, - '3' => { - 'name' => 'remainder', - 'type' => '14875' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_range_split', - 'Source' => 'gnutls_range.c', - 'SourceLine' => '148' - }, - '138486' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_check_corked', - 'Source' => 'gnutls_buffers.c', - 'SourceLine' => '111' - }, - '138533' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_check_pending', - 'Source' => 'gnutls_buffers.c', - 'SourceLine' => '95' - }, - '1387081' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '110' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_x509_dn_oid_name', - 'Source' => 'common.c', - 'SourceLine' => '273' - }, - '1387264' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_oid_known', - 'Source' => 'common.c', - 'SourceLine' => '243' - }, - '1391447' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2920', - 'ShortName' => 'gnutls_oid_to_sign', - 'Source' => 'sign.c', - 'SourceLine' => '209' - }, - '1391481' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2768', - 'ShortName' => 'gnutls_oid_to_pk', - 'Source' => 'publickey.c', - 'SourceLine' => '223' - }, - '1391526' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2768' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pk_get_oid', - 'Source' => 'publickey.c', - 'SourceLine' => '248' - }, - '1411557' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'curve', - 'type' => '2982' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_ecc_curve_get_oid', - 'Source' => 'ecc.c', - 'SourceLine' => '241' - }, - '1428340' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2982', - 'ShortName' => 'gnutls_oid_to_ecc_curve', - 'Source' => 'ecc.c', - 'SourceLine' => '145' - }, - '1442378' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crls', - 'type' => '756477' - }, - '1' => { - 'name' => 'crl_max', - 'type' => '21238' - }, - '2' => { - 'name' => 'data', - 'type' => '4175' - }, - '3' => { - 'name' => 'format', - 'type' => '225461' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_list_import', - 'Source' => 'crl.c', - 'SourceLine' => '1268' - }, - '1442989' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crls', - 'type' => '1443301' - }, - '1' => { - 'name' => 'size', - 'type' => '21238' - }, - '2' => { - 'name' => 'data', - 'type' => '4175' - }, - '3' => { - 'name' => 'format', - 'type' => '225461' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_list_import2', - 'Source' => 'crl.c', - 'SourceLine' => '1207' - }, - '1443307' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'data', - 'type' => '211' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_extension_data', - 'Source' => 'crl.c', - 'SourceLine' => '1159' - }, - '1443675' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7280' - }, - '4' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_extension_info', - 'Source' => 'crl.c', - 'SourceLine' => '1087' - }, - '1444253' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_extension_oid', - 'Source' => 'crl.c', - 'SourceLine' => '1041' - }, - '1444466' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'ret', - 'type' => '211' - }, - '2' => { - 'name' => 'ret_size', - 'type' => '7280' - }, - '3' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_number', - 'Source' => 'crl.c', - 'SourceLine' => '981' - }, - '1444787' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'id', - 'type' => '211' - }, - '2' => { - 'name' => 'id_size', - 'type' => '7280' - }, - '3' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_authority_key_id', - 'Source' => 'crl.c', - 'SourceLine' => '934' - }, - '1445280' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'alt', - 'type' => '211' - }, - '3' => { - 'name' => 'alt_size', - 'type' => '7280' - }, - '4' => { - 'name' => 'alt_type', - 'type' => '21238' - }, - '5' => { - 'name' => 'serial', - 'type' => '211' - }, - '6' => { - 'name' => 'serial_size', - 'offset' => '0', - 'type' => '7280' - }, - '7' => { - 'name' => 'critical', - 'offset' => '8', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_authority_key_gn_serial', - 'Source' => 'crl.c', - 'SourceLine' => '864' - }, - '1446264' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_export2', - 'Source' => 'crl.c', - 'SourceLine' => '752' - }, - '1446318' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'output_data', - 'type' => '211' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_export', - 'Source' => 'crl.c', - 'SourceLine' => '720' - }, - '1446534' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'dn', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_raw_issuer_dn', - 'Source' => 'crl.c', - 'SourceLine' => '689' - }, - '1446716' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'iter', - 'type' => '1447392' - }, - '2' => { - 'name' => 'serial', - 'type' => '3626' - }, - '3' => { - 'name' => 'serial_size', - 'type' => '7280' - }, - '4' => { - 'name' => 't', - 'type' => '4272' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_iter_crt_serial', - 'Source' => 'crl.c', - 'SourceLine' => '612' - }, - '1447398' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '1433999' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crl_iter_deinit', - 'Source' => 'crl.c', - 'SourceLine' => '582' - }, - '1447462' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'serial', - 'type' => '3626' - }, - '3' => { - 'name' => 'serial_size', - 'type' => '7280' - }, - '4' => { - 'name' => 't', - 'type' => '4272' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_crt_serial', - 'Source' => 'crl.c', - 'SourceLine' => '536' - }, - '1447939' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_crt_count', - 'Source' => 'crl.c', - 'SourceLine' => '495' - }, - '1448103' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_x509_crl_get_next_update', - 'Source' => 'crl.c', - 'SourceLine' => '475' - }, - '1448242' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_x509_crl_get_this_update', - 'Source' => 'crl.c', - 'SourceLine' => '454' - }, - '1448381' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_version', - 'Source' => 'crl.c', - 'SourceLine' => '425' - }, - '1448653' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'sig', - 'type' => '235' - }, - '2' => { - 'name' => 'sizeof_sig', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_signature', - 'Source' => 'crl.c', - 'SourceLine' => '375' - }, - '1449073' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_signature_algorithm', - 'Source' => 'crl.c', - 'SourceLine' => '333' - }, - '1449283' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'dn', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_issuer_dn2', - 'Source' => 'crl.c', - 'SourceLine' => '312' - }, - '1449439' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_dn_oid', - 'Source' => 'crl.c', - 'SourceLine' => '283' - }, - '1449642' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '75' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '4' => { - 'name' => 'buf', - 'type' => '211' - }, - '5' => { - 'name' => 'sizeof_buf', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_issuer_dn_by_oid', - 'Source' => 'crl.c', - 'SourceLine' => '243' - }, - '1449985' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'buf', - 'type' => '235' - }, - '2' => { - 'name' => 'sizeof_buf', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_issuer_dn', - 'Source' => 'crl.c', - 'SourceLine' => '203' - }, - '1450160' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_import', - 'Source' => 'crl.c', - 'SourceLine' => '119' - }, - '1466516' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'issuer', - 'type' => '144886' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '144851' - }, - '3' => { - 'name' => 'dig', - 'type' => '2391' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_privkey_sign', - 'Source' => 'crl_write.c', - 'SourceLine' => '464' - }, - '1466606' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'nr', - 'type' => '318' - }, - '2' => { - 'name' => 'nr_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_number', - 'Source' => 'crl_write.c', - 'SourceLine' => '396' - }, - '1467057' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'id', - 'type' => '318' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_authority_key_id', - 'Source' => 'crl_write.c', - 'SourceLine' => '332' - }, - '1467534' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'crt', - 'type' => '144886' - }, - '2' => { - 'name' => 'revocation_time', - 'type' => '252' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_crt', - 'Source' => 'crl_write.c', - 'SourceLine' => '270' - }, - '1467873' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'serial', - 'type' => '318' - }, - '2' => { - 'name' => 'serial_size', - 'type' => '52' - }, - '3' => { - 'name' => 'revocation_time', - 'type' => '252' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_crt_serial', - 'Source' => 'crl_write.c', - 'SourceLine' => '209' - }, - '1467945' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'exp_time', - 'type' => '252' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_next_update', - 'Source' => 'crl_write.c', - 'SourceLine' => '186' - }, - '1468103' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'act_time', - 'type' => '252' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_this_update', - 'Source' => 'crl_write.c', - 'SourceLine' => '165' - }, - '1468385' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'issuer', - 'type' => '144886' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '144874' - }, - '3' => { - 'name' => 'dig', - 'type' => '2391' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_sign2', - 'Source' => 'crl_write.c', - 'SourceLine' => '94' - }, - '1468486' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'version', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_version', - 'Source' => 'crl_write.c', - 'SourceLine' => '52' - }, - '1483982' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'activation', - 'type' => '252' - }, - '2' => { - 'name' => 'expiration', - 'type' => '252' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_private_key_usage_period', - 'Source' => 'crq.c', - 'SourceLine' => '2673' - }, - '1484577' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_verify', - 'Source' => 'crq.c', - 'SourceLine' => '2600' - }, - '1485216' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'key', - 'type' => '144851' - }, - '2' => { - 'name' => 'dig', - 'type' => '2391' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_privkey_sign', - 'Source' => 'crq.c', - 'SourceLine' => '2517' - }, - '1485318' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3626' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_key_id', - 'Source' => 'crq.c', - 'SourceLine' => '2462' - }, - '1485640' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'oid', - 'type' => '318' - }, - '2' => { - 'name' => 'critical', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_key_purpose_oid', - 'Source' => 'crq.c', - 'SourceLine' => '2335' - }, - '1486766' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7280' - }, - '4' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_key_purpose_oid', - 'Source' => 'crq.c', - 'SourceLine' => '2232' - }, - '1488079' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'ca', - 'type' => '145' - }, - '2' => { - 'name' => 'pathLenConstraint', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_basic_constraints', - 'Source' => 'crq.c', - 'SourceLine' => '2134' - }, - '14881' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_record_can_use_length_hiding', - 'Source' => 'gnutls_range.c', - 'SourceLine' => '104' - }, - '1488357' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'nt', - 'type' => '497857' - }, - '2' => { - 'name' => 'data', - 'type' => '318' - }, - '3' => { - 'name' => 'data_size', - 'type' => '145' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_subject_alt_name', - 'Source' => 'crq.c', - 'SourceLine' => '2029' - }, - '1488897' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '75' - }, - '3' => { - 'name' => 'output', - 'type' => '4233' - }, - '4' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_extension_by_oid2', - 'Source' => 'crq.c', - 'SourceLine' => '1965' - }, - '1489285' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '75' - }, - '3' => { - 'name' => 'buf', - 'type' => '211' - }, - '4' => { - 'name' => 'buf_size', - 'type' => '7280' - }, - '5' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_extension_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '1906' - }, - '1489698' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'ret', - 'type' => '211' - }, - '3' => { - 'name' => 'ret_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_subject_alt_othername_oid', - 'Source' => 'crq.c', - 'SourceLine' => '1876' - }, - '1489849' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'ret', - 'type' => '211' - }, - '3' => { - 'name' => 'ret_size', - 'type' => '7280' - }, - '4' => { - 'name' => 'ret_type', - 'type' => '21238' - }, - '5' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_subject_alt_name', - 'Source' => 'crq.c', - 'SourceLine' => '1837' - }, - '1491004' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'critical', - 'type' => '21238' - }, - '2' => { - 'name' => 'ca', - 'type' => '21238' - }, - '3' => { - 'name' => 'pathlen', - 'type' => '16639' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_basic_constraints', - 'Source' => 'crq.c', - 'SourceLine' => '1695' - }, - '1491644' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_extension_data2', - 'Source' => 'crq.c', - 'SourceLine' => '1540' - }, - '1492433' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'data', - 'type' => '211' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_extension_data', - 'Source' => 'crq.c', - 'SourceLine' => '1502' - }, - '1492744' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7280' - }, - '4' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_extension_info', - 'Source' => 'crq.c', - 'SourceLine' => '1377' - }, - '1493947' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'data', - 'type' => '211' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_attribute_data', - 'Source' => 'crq.c', - 'SourceLine' => '1322' - }, - '1494315' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_attribute_info', - 'Source' => 'crq.c', - 'SourceLine' => '1268' - }, - '1494737' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_export2', - 'Source' => 'crq.c', - 'SourceLine' => '1198' - }, - '1494930' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'output_data', - 'type' => '211' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_export', - 'Source' => 'crq.c', - 'SourceLine' => '1165' - }, - '1495251' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'key', - 'type' => '144874' - }, - '2' => { - 'name' => 'dig', - 'type' => '2391' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_sign2', - 'Source' => 'crq.c', - 'SourceLine' => '1088' - }, - '1495349' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'pass', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_challenge_password', - 'Source' => 'crq.c', - 'SourceLine' => '1033' - }, - '1495674' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'm', - 'type' => '4175' - }, - '2' => { - 'name' => 'e', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_key_rsa_raw', - 'Source' => 'crq.c', - 'SourceLine' => '970' - }, - '1496128' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'm', - 'type' => '4233' - }, - '2' => { - 'name' => 'e', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_key_rsa_raw', - 'Source' => 'crq.c', - 'SourceLine' => '910' - }, - '1496661' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'key', - 'type' => '144874' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_key', - 'Source' => 'crq.c', - 'SourceLine' => '872' - }, - '1496827' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_version', - 'Source' => 'crq.c', - 'SourceLine' => '836' - }, - '1496893' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'version', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_version', - 'Source' => 'crq.c', - 'SourceLine' => '802' - }, - '1496959' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '318' - }, - '4' => { - 'name' => 'sizeof_data', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_dn_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '777' - }, - '1497129' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '75' - }, - '3' => { - 'name' => 'buf', - 'type' => '211' - }, - '4' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_attribute_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '733' - }, - '1497230' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'buf', - 'type' => '211' - }, - '3' => { - 'name' => 'buf_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_attribute_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '694' - }, - '1497781' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'pass', - 'type' => '235' - }, - '2' => { - 'name' => 'pass_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_challenge_password', - 'Source' => 'crq.c', - 'SourceLine' => '512' - }, - '1498308' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_dn_oid', - 'Source' => 'crq.c', - 'SourceLine' => '365' - }, - '1498511' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '75' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '4' => { - 'name' => 'buf', - 'type' => '211' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_dn_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '328' - }, - '1498863' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'dn', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_dn2', - 'Source' => 'crq.c', - 'SourceLine' => '290' - }, - '1499019' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'buf', - 'type' => '235' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_dn', - 'Source' => 'crq.c', - 'SourceLine' => '263' - }, - '1499199' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'activation', - 'type' => '4272' - }, - '2' => { - 'name' => 'expiration', - 'type' => '4272' - }, - '3' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_private_key_usage_period', - 'Source' => 'crq.c', - 'SourceLine' => '195' - }, - '1499850' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_signature_algorithm', - 'Source' => 'crq.c', - 'SourceLine' => '175' - }, - '1499926' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_import', - 'Source' => 'crq.c', - 'SourceLine' => '110' - }, - '1500459' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crq_deinit', - 'Source' => 'crq.c', - 'SourceLine' => '79' - }, - '1500545' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1500751' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_init', - 'Source' => 'crq.c', - 'SourceLine' => '50' - }, - '1505512' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'usage', - 'type' => '145' - }, - '1' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_key_usage', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1113' - }, - '1505523' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ca', - 'type' => '145' - }, - '1' => { - 'name' => 'pathlen', - 'type' => '75' - }, - '2' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_basic_constraints', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1339' - }, - '1505572' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'ca', - 'type' => '21238' - }, - '2' => { - 'name' => 'pathlen', - 'type' => '16639' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_basic_constraints', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1271' - }, - '1505583' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_key_usage', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1061' - }, - '1519726' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '1511409' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_export2', - 'Source' => 'dn.c', - 'SourceLine' => '1060' - }, - '1519918' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '1511409' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'output_data', - 'type' => '211' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_export', - 'Source' => 'dn.c', - 'SourceLine' => '1026' - }, - '1520258' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'idn', - 'type' => '4175' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'buf', - 'type' => '211' - }, - '3' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_rdn_get_oid', - 'Source' => 'dn.c', - 'SourceLine' => '950' - }, - '1520752' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'idn', - 'type' => '4175' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '75' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '4' => { - 'name' => 'buf', - 'type' => '211' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_rdn_get_by_oid', - 'Source' => 'dn.c', - 'SourceLine' => '894' - }, - '1521461' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'idn', - 'type' => '4175' - }, - '1' => { - 'name' => 'buf', - 'type' => '235' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_rdn_get', - 'Source' => 'dn.c', - 'SourceLine' => '837' - }, - '1521987' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '1511409' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_dn_deinit', - 'Source' => 'dn.c', - 'SourceLine' => '815' - }, - '1522074' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '1511409' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_import', - 'Source' => 'dn.c', - 'SourceLine' => '786' - }, - '1522490' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '1522676' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_init', - 'Source' => 'dn.c', - 'SourceLine' => '754' - }, - '1550862' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_extension_data2', - 'Source' => 'extensions.c', - 'SourceLine' => '216' - }, - '1551146' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_data2', - 'Source' => 'extensions.c', - 'SourceLine' => '180' - }, - '1552906' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '2073171' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aki_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '673' - }, - '1552917' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1543748' - }, - '1' => { - 'name' => 'id', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aki_set_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '732' - }, - '1552928' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1543748' - }, - '1' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_authority_key_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '966' - }, - '1552939' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1543748' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_aki_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '690' - }, - '1552950' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '2078201' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_subject_alt_names_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '56' - }, - '1552961' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '1543726' - }, - '1' => { - 'name' => 'san_type', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'type' => '4175' - }, - '3' => { - 'name' => 'othername_oid', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_subject_alt_names_set', - 'Source' => 'x509_ext.c', - 'SourceLine' => '178' - }, - '1552972' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '1543726' - }, - '1' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_subject_alt_names', - 'Source' => 'x509_ext.c', - 'SourceLine' => '305' - }, - '1552983' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '1543726' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_subject_alt_names_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '86' - }, - '1552994' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'sans', - 'type' => '1543726' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_subject_alt_names', - 'Source' => 'x509_ext.c', - 'SourceLine' => '222' - }, - '15563' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_dtls_get_data_mtu', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '758' - }, - '156706' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2564', - 'ShortName' => 'gnutls_handshake_get_last_out', - 'Source' => 'gnutls_handshake.c', - 'SourceLine' => '3384' - }, - '156755' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2564', - 'ShortName' => 'gnutls_handshake_get_last_in', - 'Source' => 'gnutls_handshake.c', - 'SourceLine' => '3364' - }, - '156804' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'max', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_max_packet_length', - 'Source' => 'gnutls_handshake.c', - 'SourceLine' => '3343' - }, - '1570939' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sign', - 'type' => '2920' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_sign_get_oid', - 'Source' => 'sign.c', - 'SourceLine' => '263' - }, - '1586251' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'exts', - 'type' => '1206728' - }, - '1' => { - 'name' => 'exts_size', - 'type' => '145' - }, - '2' => { - 'name' => 'format', - 'type' => '1573993' - }, - '3' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_print', - 'Source' => 'output.c', - 'SourceLine' => '2548' - }, - '1586499' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pubkey', - 'type' => '4199' - }, - '1' => { - 'name' => 'format', - 'type' => '1573993' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_print', - 'Source' => 'output.c', - 'SourceLine' => '2516' - }, - '1587476' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'format', - 'type' => '1573993' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_print', - 'Source' => 'output.c', - 'SourceLine' => '2444' - }, - '1591534' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'format', - 'type' => '1573993' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_print', - 'Source' => 'output.c', - 'SourceLine' => '2141' - }, - '1596669' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'format', - 'type' => '1573993' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_print', - 'Source' => 'output.c', - 'SourceLine' => '1769' - }, - '161261' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'ms', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_timeout', - 'Source' => 'gnutls_handshake.c', - 'SourceLine' => '2631' - }, - '161370' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_handshake', - 'Source' => 'gnutls_handshake.c', - 'SourceLine' => '2545' - }, - '1624812' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'buf', - 'type' => '235' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_dn', - 'Source' => 'x509.c', - 'SourceLine' => '543' - }, - '1624823' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'buf', - 'type' => '235' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn', - 'Source' => 'x509.c', - 'SourceLine' => '399' - }, - '1624846' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2768' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pk_algorithm_get_name', - 'Source' => 'publickey.c', - 'SourceLine' => '117' - }, - '1624882' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'critical', - 'type' => '21238' - }, - '2' => { - 'name' => 'pathlen', - 'type' => '16639' - }, - '3' => { - 'name' => 'policyLanguage', - 'type' => '1002' - }, - '4' => { - 'name' => 'policy', - 'type' => '1002' - }, - '5' => { - 'name' => 'sizeof_policy', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_proxy', - 'Source' => 'x509.c', - 'SourceLine' => '1839' - }, - '1624894' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'algo', - 'type' => '2391' - }, - '2' => { - 'name' => 'buf', - 'type' => '211' - }, - '3' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_fingerprint', - 'Source' => 'x509.c', - 'SourceLine' => '2511' - }, - '1624906' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_signature_algorithm', - 'Source' => 'x509.c', - 'SourceLine' => '678' - }, - '1624917' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'curve', - 'type' => '485763' - }, - '2' => { - 'name' => 'x', - 'type' => '4233' - }, - '3' => { - 'name' => 'y', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_pk_ecc_raw', - 'Source' => 'x509.c', - 'SourceLine' => '3125' - }, - '1624952' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2768' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pk_get_name', - 'Source' => 'publickey.c', - 'SourceLine' => '198' - }, - '1624987' => { - 'Header' => 'x509.h', - 'Line' => '191', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_version' - }, - '1625010' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'sig', - 'type' => '235' - }, - '2' => { - 'name' => 'sig_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_signature', - 'Source' => 'x509.c', - 'SourceLine' => '696' - }, - '1625032' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'buf', - 'type' => '235' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_unique_id', - 'Source' => 'x509.c', - 'SourceLine' => '3513' - }, - '1625043' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'buf', - 'type' => '235' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject_unique_id', - 'Source' => 'x509.c', - 'SourceLine' => '3463' - }, - '1625098' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algo', - 'type' => '2768' - }, - '1' => { - 'name' => 'bits', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '3074', - 'ShortName' => 'gnutls_pk_bits_to_sec_param', - 'Source' => 'secparams.c', - 'SourceLine' => '180' - }, - '1625110' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'param', - 'type' => '3074' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_sec_param_get_name', - 'Source' => 'secparams.c', - 'SourceLine' => '152' - }, - '1625158' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7280' - }, - '4' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_info', - 'Source' => 'x509.c', - 'SourceLine' => '2143' - }, - '1625181' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '2065449' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_policies_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1654' - }, - '1625192' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'policies', - 'type' => '1585828' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_policies', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1779' - }, - '1625203' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1585828' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'policy', - 'type' => '1914157' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_policies_get', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1695' - }, - '1625214' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1585828' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_policies_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1671' - }, - '1625251' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'id', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_subject_key_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '571' - }, - '1625262' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'activation', - 'type' => '4272' - }, - '2' => { - 'name' => 'expiration', - 'type' => '4272' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_private_key_usage_period', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1164' - }, - '1625284' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '2055626' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_key_purpose_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2818' - }, - '1625295' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'p', - 'type' => '1585806' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_key_purposes', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2918' - }, - '1625306' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1585806' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_key_purpose_get', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2893' - }, - '1625317' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1585806' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_key_purpose_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2846' - }, - '1625328' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '2061015' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_dist_points_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2141' - }, - '1625339' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'cdp', - 'type' => '1585740' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_crl_dist_points', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2279' - }, - '1625350' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1585740' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'type', - 'type' => '21238' - }, - '3' => { - 'name' => 'san', - 'type' => '4233' - }, - '4' => { - 'name' => 'reasons', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_dist_points_get', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2184' - }, - '1625361' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1585740' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crl_dist_points_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2158' - }, - '1625372' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'pathlen', - 'type' => '16639' - }, - '2' => { - 'name' => 'policyLanguage', - 'type' => '1002' - }, - '3' => { - 'name' => 'policy', - 'type' => '1002' - }, - '4' => { - 'name' => 'sizeof_policy', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_proxy', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1412' - }, - '1625383' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '2058346' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aia_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2499' - }, - '1625394' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'aia', - 'type' => '1585762' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_aia', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2693' - }, - '1625405' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1585762' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '4233' - }, - '3' => { - 'name' => 'san_type', - 'type' => '21238' - }, - '4' => { - 'name' => 'san', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aia_get', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2549' - }, - '1625416' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1585762' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_aia_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2516' - }, - '1625427' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1991623' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_name_constraints_init', - 'Source' => 'name_constraints.c', - 'SourceLine' => '233' - }, - '1625439' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'nc', - 'type' => '1577113' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_name_constraints', - 'Source' => 'x509_ext.c', - 'SourceLine' => '370' - }, - '1625462' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1577113' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'type', - 'type' => '21238' - }, - '3' => { - 'name' => 'name', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_name_constraints_get_permitted' - }, - '1625474' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1577113' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'type', - 'type' => '21238' - }, - '3' => { - 'name' => 'name', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_name_constraints_get_excluded' - }, - '1625486' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1577113' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_name_constraints_deinit', - 'Source' => 'name_constraints.c', - 'SourceLine' => '201' - }, - '1625498' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '110' - }, - '1' => { - 'name' => 'othername', - 'type' => '4175' - }, - '2' => { - 'name' => 'virt_type', - 'type' => '21238' - }, - '3' => { - 'name' => 'virt', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_othername_to_virtual', - 'Source' => 'x509_ext.c', - 'SourceLine' => '3138' - }, - '1625531' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '1543726' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'san_type', - 'type' => '21238' - }, - '3' => { - 'name' => 'san', - 'type' => '4233' - }, - '4' => { - 'name' => 'othername_oid', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_subject_alt_names_get', - 'Source' => 'x509_ext.c', - 'SourceLine' => '109' - }, - '1625553' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1543748' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'san_type', - 'type' => '21238' - }, - '3' => { - 'name' => 'san', - 'type' => '4233' - }, - '4' => { - 'name' => 'othername_oid', - 'type' => '4233' - }, - '5' => { - 'name' => 'serial', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aki_get_cert_issuer', - 'Source' => 'x509_ext.c', - 'SourceLine' => '811' - }, - '1625575' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4175' - }, - '1' => { - 'name' => 'aki', - 'type' => '1543748' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_authority_key_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '860' - }, - '1625586' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1543748' - }, - '1' => { - 'name' => 'id', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aki_get_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '711' - }, - '1640187' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '754035' - }, - '1' => { - 'name' => 'mac', - 'type' => '21238' - }, - '2' => { - 'name' => 'salt', - 'type' => '211' - }, - '3' => { - 'name' => 'salt_size', - 'type' => '21238' - }, - '4' => { - 'name' => 'iter_count', - 'type' => '21238' - }, - '5' => { - 'name' => 'oid', - 'type' => '1002' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_mac_info', - 'Source' => 'pkcs12.c', - 'SourceLine' => '1842' - }, - '1646401' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '754035' - }, - '1' => { - 'name' => 'pass', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_generate_mac', - 'Source' => 'pkcs12.c', - 'SourceLine' => '991' - }, - '1646501' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '754035' - }, - '1' => { - 'name' => 'mac', - 'type' => '2305' - }, - '2' => { - 'name' => 'pass', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_generate_mac2', - 'Source' => 'pkcs12.c', - 'SourceLine' => '861' - }, - '1647685' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '754035' - }, - '1' => { - 'name' => 'bag', - 'type' => '1639904' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_set_bag', - 'Source' => 'pkcs12.c', - 'SourceLine' => '737' - }, - '1649132' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '754035' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'bag', - 'type' => '1639904' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_get_bag', - 'Source' => 'pkcs12.c', - 'SourceLine' => '602' - }, - '1652299' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '754035' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_export2', - 'Source' => 'pkcs12.c', - 'SourceLine' => '314' - }, - '1652492' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '754035' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'output_data', - 'type' => '211' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_export', - 'Source' => 'pkcs12.c', - 'SourceLine' => '282' - }, - '1654853' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1640028', - 'ShortName' => 'gnutls_pkcs12_bag_get_type', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '98' - }, - '1654864' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_get_data', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '143' - }, - '1654887' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import_pkcs8', - 'Source' => 'privkey_pkcs8.c', - 'SourceLine' => '1442' - }, - '1655025' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1675094' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_init', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '46' - }, - '1655036' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'pass', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_decrypt', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '663' - }, - '1655047' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_get_count', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '119' - }, - '1655058' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs12_bag_deinit', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '77' - }, - '1669968' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'privkey', - 'type' => '144874' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_privkey', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '873' - }, - '1670407' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'schema', - 'type' => '21238' - }, - '2' => { - 'name' => 'cipher', - 'type' => '21238' - }, - '3' => { - 'name' => 'salt', - 'type' => '211' - }, - '4' => { - 'name' => 'salt_size', - 'type' => '21238' - }, - '5' => { - 'name' => 'iter_count', - 'type' => '21238' - }, - '6' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '1002' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_enc_info', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '809' - }, - '1670782' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'pass', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_encrypt', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '716' - }, - '1671628' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_friendly_name', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '628' - }, - '1671777' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'name', - 'type' => '1002' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_get_friendly_name', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '594' - }, - '1671905' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'id', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_get_key_id', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '561' - }, - '1672032' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'id', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_key_id', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '520' - }, - '1672216' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'crl', - 'type' => '742906' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_crl', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '481' - }, - '1672470' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'crt', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_crt', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '445' - }, - '1672724' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1639904' - }, - '1' => { - 'name' => 'type', - 'type' => '1640028' - }, - '2' => { - 'name' => 'data', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_data', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '388' - }, - '1675185' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export2_pkcs8', - 'Source' => 'privkey_pkcs8.c', - 'SourceLine' => '765' - }, - '1704416' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'signer', - 'type' => '144886' - }, - '2' => { - 'name' => 'signer_key', - 'type' => '144851' - }, - '3' => { - 'name' => 'data', - 'type' => '4175' - }, - '4' => { - 'name' => 'signed_attrs', - 'type' => '1695860' - }, - '5' => { - 'name' => 'unsigned_attrs', - 'type' => '1695860' - }, - '6' => { - 'name' => 'dig', - 'offset' => '0', - 'type' => '2391' - }, - '7' => { - 'name' => 'flags', - 'offset' => '8', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_sign', - 'Source' => 'pkcs7.c', - 'SourceLine' => '2069' - }, - '1706906' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_delete_crl', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1775' - }, - '1707183' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'crl', - 'type' => '742906' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_set_crl', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1738' - }, - '1707432' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'crl', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_set_crl_raw', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1683' - }, - '1707742' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crl_count', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1653' - }, - '1707913' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'crl', - 'type' => '211' - }, - '3' => { - 'name' => 'crl_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crl_raw', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1618' - }, - '1708286' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'crl', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crl_raw2', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1560' - }, - '1708787' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_delete_crt', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1516' - }, - '1709064' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'crt', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_set_crt', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1478' - }, - '1709313' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'crt', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_set_crt_raw', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1411' - }, - '1709740' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_export2', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1320' - }, - '1710021' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'output_data', - 'type' => '211' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_export', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1286' - }, - '1710417' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'tl', - 'type' => '147012' - }, - '2' => { - 'name' => 'vdata', - 'type' => '12677' - }, - '3' => { - 'name' => 'vdata_size', - 'type' => '145' - }, - '4' => { - 'name' => 'idx', - 'type' => '145' - }, - '5' => { - 'name' => 'data', - 'type' => '4175' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_verify', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1156' - }, - '1712317' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'signer', - 'type' => '144886' - }, - '2' => { - 'name' => 'idx', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4175' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_verify_direct', - 'Source' => 'pkcs7.c', - 'SourceLine' => '953' - }, - '1712909' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pkcs7_get_embedded_data_oid', - 'Source' => 'pkcs7.c', - 'SourceLine' => '918' - }, - '1712958' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_embedded_data', - 'Source' => 'pkcs7.c', - 'SourceLine' => '885' - }, - '1715012' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'info', - 'type' => '1712311' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_signature_info', - 'Source' => 'pkcs7.c', - 'SourceLine' => '560' - }, - '1717264' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_signature_count', - 'Source' => 'pkcs7.c', - 'SourceLine' => '529' - }, - '1717544' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'info', - 'type' => '1712311' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs7_signature_info_deinit', - 'Source' => 'pkcs7.c', - 'SourceLine' => '470' - }, - '1717617' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crt_count', - 'Source' => 'pkcs7.c', - 'SourceLine' => '443' - }, - '1717671' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'certificate', - 'type' => '211' - }, - '3' => { - 'name' => 'certificate_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crt_raw', - 'Source' => 'pkcs7.c', - 'SourceLine' => '406' - }, - '1718044' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'cert', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crt_raw2', - 'Source' => 'pkcs7.c', - 'SourceLine' => '324' - }, - '1718677' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_import', - 'Source' => 'pkcs7.c', - 'SourceLine' => '244' - }, - '1720336' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs7_deinit', - 'Source' => 'pkcs7.c', - 'SourceLine' => '212' - }, - '1720480' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1720639' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_init', - 'Source' => 'pkcs7.c', - 'SourceLine' => '190' - }, - '1725466' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'dn', - 'type' => '4175' - }, - '2' => { - 'name' => 'issuer', - 'type' => '146359' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_get_issuer_by_dn', - 'Source' => 'verify-high.c', - 'SourceLine' => '1017' - }, - '1725557' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'dn', - 'type' => '4175' - }, - '2' => { - 'name' => 'spki', - 'type' => '4175' - }, - '3' => { - 'name' => 'issuer', - 'type' => '146359' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_get_issuer_by_subject_key_id', - 'Source' => 'verify-high.c', - 'SourceLine' => '1077' - }, - '1725581' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'algo', - 'type' => '2920' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4175' - }, - '4' => { - 'name' => 'signature', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_verify_data2', - 'Source' => 'x509.c', - 'SourceLine' => '3931' - }, - '1725718' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '1740355' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'data', - 'type' => '4233' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_add_attr', - 'Source' => 'pkcs7-attrs.c', - 'SourceLine' => '54' - }, - '1725741' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '1695860' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs7_attrs_deinit', - 'Source' => 'pkcs7-attrs.c', - 'SourceLine' => '147' - }, - '173443' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_rehandshake', - 'Source' => 'gnutls_handshake.c', - 'SourceLine' => '2402' - }, - '1739744' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '1695860' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '1002' - }, - '3' => { - 'name' => 'data', - 'type' => '4233' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_attr', - 'Source' => 'pkcs7-attrs.c', - 'SourceLine' => '109' - }, - '1755003' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_fix', - 'Source' => 'privkey.c', - 'SourceLine' => '1817' - }, - '1755174' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'digest', - 'type' => '2391' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4175' - }, - '4' => { - 'name' => 'signature', - 'type' => '211' - }, - '5' => { - 'name' => 'signature_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_sign_data', - 'Source' => 'privkey.c', - 'SourceLine' => '1759' - }, - '1756432' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_verify_params', - 'Source' => 'privkey.c', - 'SourceLine' => '1574' - }, - '1757439' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'm', - 'type' => '4233' - }, - '2' => { - 'name' => 'e', - 'type' => '4233' - }, - '3' => { - 'name' => 'd', - 'type' => '4233' - }, - '4' => { - 'name' => 'p', - 'type' => '4233' - }, - '5' => { - 'name' => 'q', - 'type' => '4233' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export_rsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1329' - }, - '1757629' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'curve', - 'type' => '485763' - }, - '2' => { - 'name' => 'x', - 'type' => '4233' - }, - '3' => { - 'name' => 'y', - 'type' => '4233' - }, - '4' => { - 'name' => 'k', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export_ecc_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1297' - }, - '1757849' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '3074', - 'ShortName' => 'gnutls_x509_privkey_sec_param', - 'Source' => 'privkey.c', - 'SourceLine' => '1269' - }, - '1757953' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export2', - 'Source' => 'privkey.c', - 'SourceLine' => '1241' - }, - '1758176' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'output_data', - 'type' => '211' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export', - 'Source' => 'privkey.c', - 'SourceLine' => '1203' - }, - '1758445' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'bits', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_get_pk_algorithm2', - 'Source' => 'privkey.c', - 'SourceLine' => '1148' - }, - '1759743' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'm', - 'type' => '4175' - }, - '2' => { - 'name' => 'e', - 'type' => '4175' - }, - '3' => { - 'name' => 'd', - 'type' => '4175' - }, - '4' => { - 'name' => 'p', - 'type' => '4175' - }, - '5' => { - 'name' => 'q', - 'type' => '4175' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import_rsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '809' - }, - '1761240' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import', - 'Source' => 'privkey.c', - 'SourceLine' => '454' - }, - '1766734' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import_openssl', - 'Source' => 'privkey_openssl.c', - 'SourceLine' => '123' - }, - '1800017' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '4175' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'schema', - 'type' => '21238' - }, - '3' => { - 'name' => 'cipher', - 'type' => '21238' - }, - '4' => { - 'name' => 'salt', - 'type' => '211' - }, - '5' => { - 'name' => 'salt_size', - 'type' => '21238' - }, - '6' => { - 'name' => 'iter_count', - 'offset' => '0', - 'type' => '21238' - }, - '7' => { - 'name' => 'oid', - 'offset' => '8', - 'type' => '1002' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs8_info', - 'Source' => 'privkey_pkcs8.c', - 'SourceLine' => '655' - }, - '1801525' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'output_data', - 'type' => '211' - }, - '5' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export_pkcs8', - 'Source' => 'privkey_pkcs8.c', - 'SourceLine' => '571' - }, - '1803307' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'schema', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pkcs_schema_get_oid', - 'Source' => 'privkey_pkcs8.c', - 'SourceLine' => '368' - }, - '1803377' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'schema', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pkcs_schema_get_name', - 'Source' => 'privkey_pkcs8.c', - 'SourceLine' => '351' - }, - '1806513' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2029' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_get_block_size', - 'Source' => 'ciphers.c', - 'SourceLine' => '251' - }, - '1806578' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2029' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_cipher_get_key_size', - 'Source' => 'ciphers.c', - 'SourceLine' => '314' - }, - '1806590' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2029' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_get_iv_size', - 'Source' => 'ciphers.c', - 'SourceLine' => '282' - }, - '1837632' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_check_hostname2', - 'Source' => 'hostname-verify.c', - 'SourceLine' => '120' - }, - '1839144' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_check_hostname', - 'Source' => 'hostname-verify.c', - 'SourceLine' => '45' - }, - '1870125' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'trusted_cas', - 'type' => '1871309' - }, - '2' => { - 'name' => 'tcas_size', - 'type' => '75' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'verify', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_verify', - 'Source' => 'verify.c', - 'SourceLine' => '1392' - }, - '1871379' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - }, - '1' => { - 'name' => 'issuer', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_check_issuer', - 'Source' => 'verify.c', - 'SourceLine' => '1347' - }, - '1871517' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'CA_list', - 'type' => '1871309' - }, - '2' => { - 'name' => 'CA_list_length', - 'type' => '75' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'verify', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_verify', - 'Source' => 'verify.c', - 'SourceLine' => '1321' - }, - '1871683' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert_list', - 'type' => '1871309' - }, - '1' => { - 'name' => 'cert_list_length', - 'type' => '75' - }, - '2' => { - 'name' => 'CA_list', - 'type' => '1871309' - }, - '3' => { - 'name' => 'CA_list_length', - 'type' => '75' - }, - '4' => { - 'name' => 'CRL_list', - 'type' => '1871958' - }, - '5' => { - 'name' => 'CRL_list_length', - 'type' => '75' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - }, - '7' => { - 'name' => 'verify', - 'offset' => '8', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_list_verify', - 'Source' => 'verify.c', - 'SourceLine' => '1267' - }, - '1883896' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_ca_status', - 'Source' => 'x509.c', - 'SourceLine' => '1758' - }, - '1883920' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'crl_list', - 'type' => '1871958' - }, - '2' => { - 'name' => 'crl_list_length', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_check_revocation', - 'Source' => 'x509.c', - 'SourceLine' => '2832' - }, - '1884048' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7280' - }, - '4' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_key_purpose_oid', - 'Source' => 'x509.c', - 'SourceLine' => '3001' - }, - '1884108' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'critical', - 'type' => '21238' - }, - '2' => { - 'name' => 'ca', - 'type' => '21238' - }, - '3' => { - 'name' => 'pathlen', - 'type' => '16639' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_basic_constraints' - }, - '1884142' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'param', - 'type' => '3074' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_sec_param_to_symmetric_bits', - 'Source' => 'secparams.c', - 'SourceLine' => '113' - }, - '1884166' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'nc', - 'type' => '1577113' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_name_constraints', - 'Source' => 'name_constraints.c', - 'SourceLine' => '156' - }, - '1884190' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1577113' - }, - '1' => { - 'name' => 'type', - 'type' => '497857' - }, - '2' => { - 'name' => 'cert', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_name_constraints_check_crt', - 'Source' => 'name_constraints.c', - 'SourceLine' => '662' - }, - '1900942' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'what', - 'type' => '75' - }, - '3' => { - 'name' => 'data', - 'type' => '4233' - }, - '4' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_authority_info_access', - 'Source' => 'x509.c', - 'SourceLine' => '3703' - }, - '1904527' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'certs', - 'type' => '759949' - }, - '1' => { - 'name' => 'size', - 'type' => '21238' - }, - '2' => { - 'name' => 'data', - 'type' => '4175' - }, - '3' => { - 'name' => 'format', - 'type' => '225461' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_list_import2', - 'Source' => 'x509.c', - 'SourceLine' => '3229' - }, - '1904845' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'p', - 'type' => '4233' - }, - '2' => { - 'name' => 'q', - 'type' => '4233' - }, - '3' => { - 'name' => 'g', - 'type' => '4233' - }, - '4' => { - 'name' => 'y', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_pk_dsa_raw', - 'Source' => 'x509.c', - 'SourceLine' => '3173' - }, - '1905643' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'm', - 'type' => '4233' - }, - '2' => { - 'name' => 'e', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_pk_rsa_raw', - 'Source' => 'x509.c', - 'SourceLine' => '3077' - }, - '1906503' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'type' => '211' - }, - '3' => { - 'name' => 'san_size', - 'type' => '7280' - }, - '4' => { - 'name' => 'reason_flags', - 'type' => '21238' - }, - '5' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_crl_dist_points', - 'Source' => 'x509.c', - 'SourceLine' => '2913' - }, - '1910093' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '1511409' - }, - '1' => { - 'name' => 'str', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_get_str', - 'Source' => 'x509.c', - 'SourceLine' => '2483' - }, - '1910249' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '1511409' - }, - '1' => { - 'name' => 'irdn', - 'type' => '75' - }, - '2' => { - 'name' => 'iava', - 'type' => '75' - }, - '3' => { - 'name' => 'ava', - 'type' => '1911106' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_get_rdn_ava', - 'Source' => 'x509.c', - 'SourceLine' => '2379' - }, - '1911112' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'dn', - 'type' => '1522676' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer', - 'Source' => 'x509.c', - 'SourceLine' => '2345' - }, - '1911283' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'dn', - 'type' => '1522676' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject', - 'Source' => 'x509.c', - 'SourceLine' => '2325' - }, - '1911531' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'dn', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_raw_dn', - 'Source' => 'x509.c', - 'SourceLine' => '2282' - }, - '1911713' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'dn', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_raw_issuer_dn', - 'Source' => 'x509.c', - 'SourceLine' => '2259' - }, - '1911895' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'data', - 'type' => '211' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_data', - 'Source' => 'x509.c', - 'SourceLine' => '2213' - }, - '1912841' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_oid', - 'Source' => 'x509.c', - 'SourceLine' => '2098' - }, - '1913054' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '75' - }, - '3' => { - 'name' => 'output', - 'type' => '4233' - }, - '4' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_by_oid2', - 'Source' => 'x509.c', - 'SourceLine' => '2052' - }, - '1913282' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '75' - }, - '3' => { - 'name' => 'buf', - 'type' => '211' - }, - '4' => { - 'name' => 'buf_size', - 'type' => '7280' - }, - '5' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_by_oid', - 'Source' => 'x509.c', - 'SourceLine' => '1991' - }, - '1913639' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'policy', - 'type' => '1914157' - }, - '3' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_policy', - 'Source' => 'x509.c', - 'SourceLine' => '1916' - }, - '1914163' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'policy', - 'type' => '1914157' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_policy_release', - 'Source' => 'x509.c', - 'SourceLine' => '1887' - }, - '1914885' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'ret', - 'type' => '211' - }, - '3' => { - 'name' => 'ret_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_alt_othername_oid', - 'Source' => 'x509.c', - 'SourceLine' => '1670' - }, - '1915044' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject_alt_othername_oid', - 'Source' => 'x509.c', - 'SourceLine' => '1629' - }, - '1915203' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'ian', - 'type' => '211' - }, - '3' => { - 'name' => 'ian_size', - 'type' => '7280' - }, - '4' => { - 'name' => 'ian_type', - 'type' => '21238' - }, - '5' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_alt_name2', - 'Source' => 'x509.c', - 'SourceLine' => '1588' - }, - '1915396' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'type' => '211' - }, - '3' => { - 'name' => 'san_size', - 'type' => '7280' - }, - '4' => { - 'name' => 'san_type', - 'type' => '21238' - }, - '5' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject_alt_name2', - 'Source' => 'x509.c', - 'SourceLine' => '1550' - }, - '1915589' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'ian', - 'type' => '211' - }, - '3' => { - 'name' => 'ian_size', - 'type' => '7280' - }, - '4' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_alt_name', - 'Source' => 'x509.c', - 'SourceLine' => '1516' - }, - '1919330' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'alt', - 'type' => '211' - }, - '3' => { - 'name' => 'alt_size', - 'type' => '7280' - }, - '4' => { - 'name' => 'alt_type', - 'type' => '21238' - }, - '5' => { - 'name' => 'serial', - 'type' => '211' - }, - '6' => { - 'name' => 'serial_size', - 'offset' => '0', - 'type' => '7280' - }, - '7' => { - 'name' => 'critical', - 'offset' => '8', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_authority_key_gn_serial', - 'Source' => 'x509.c', - 'SourceLine' => '986' - }, - '1920551' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'activation', - 'type' => '4272' - }, - '2' => { - 'name' => 'expiration', - 'type' => '4272' - }, - '3' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_private_key_usage_period', - 'Source' => 'x509.c', - 'SourceLine' => '816' - }, - '1921644' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_dn_oid', - 'Source' => 'x509.c', - 'SourceLine' => '654' - }, - '1922199' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'dn', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_dn2', - 'Source' => 'x509.c', - 'SourceLine' => '571' - }, - '1922535' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'oid', - 'type' => '211' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn_oid', - 'Source' => 'x509.c', - 'SourceLine' => '512' - }, - '1922738' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '75' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '4' => { - 'name' => 'buf', - 'type' => '211' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn_by_oid', - 'Source' => 'x509.c', - 'SourceLine' => '470' - }, - '1923090' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'dn', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn2', - 'Source' => 'x509.c', - 'SourceLine' => '428' - }, - '194155' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2203', - 'ShortName' => 'gnutls_auth_client_get_type', - 'Source' => 'gnutls_auth.c', - 'SourceLine' => '244' - }, - '194167' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2203', - 'ShortName' => 'gnutls_auth_server_get_type', - 'Source' => 'gnutls_auth.c', - 'SourceLine' => '224' - }, - '194179' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'retrans_timeout', - 'type' => '145' - }, - '2' => { - 'name' => 'total_timeout', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dtls_set_timeouts', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '584' - }, - '194400' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '643167', - 'ShortName' => 'gnutls_alert_get', - 'Source' => 'gnutls_alert.c', - 'SourceLine' => '354' - }, - '1944186' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'dn', - 'type' => '110' - }, - '2' => { - 'name' => 'err', - 'type' => '276511' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_dn', - 'Source' => 'x509_dn.c', - 'SourceLine' => '246' - }, - '1944305' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'dn', - 'type' => '110' - }, - '2' => { - 'name' => 'err', - 'type' => '276511' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_issuer_dn', - 'Source' => 'x509_dn.c', - 'SourceLine' => '225' - }, - '1944418' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'dn', - 'type' => '110' - }, - '2' => { - 'name' => 'err', - 'type' => '276511' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_dn', - 'Source' => 'x509_dn.c', - 'SourceLine' => '205' - }, - '194811' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'version', - 'type' => '2662' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_protocol_get_name', - 'Source' => 'protocols.c', - 'SourceLine' => '144' - }, - '194879' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2662', - 'ShortName' => 'gnutls_protocol_get_version', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1509' - }, - '1960636' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'policy', - 'type' => '1961176' - }, - '2' => { - 'name' => 'critical', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_policy', - 'Source' => 'x509_write.c', - 'SourceLine' => '1640' - }, - '1961182' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'what', - 'type' => '75' - }, - '2' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_authority_info_access', - 'Source' => 'x509_write.c', - 'SourceLine' => '1555' - }, - '1961919' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'issuer', - 'type' => '144886' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '144851' - }, - '3' => { - 'name' => 'dig', - 'type' => '2391' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_privkey_sign', - 'Source' => 'x509_write.c', - 'SourceLine' => '1506' - }, - '1962009' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'oid', - 'type' => '318' - }, - '2' => { - 'name' => 'critical', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_key_purpose_oid', - 'Source' => 'x509_write.c', - 'SourceLine' => '1425' - }, - '1962596' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'id', - 'type' => '318' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_authority_key_id', - 'Source' => 'x509_write.c', - 'SourceLine' => '1360' - }, - '1963047' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'id', - 'type' => '318' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_subject_key_id', - 'Source' => 'x509_write.c', - 'SourceLine' => '1294' - }, - '1963507' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '144886' - }, - '1' => { - 'name' => 'src', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_cpy_crl_dist_points', - 'Source' => 'x509_write.c', - 'SourceLine' => '1244' - }, - '1963790' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'type', - 'type' => '497857' - }, - '2' => { - 'name' => 'data', - 'type' => '318' - }, - '3' => { - 'name' => 'data_size', - 'type' => '145' - }, - '4' => { - 'name' => 'reason_flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_crl_dist_points2', - 'Source' => 'x509_write.c', - 'SourceLine' => '1158' - }, - '1964458' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'type', - 'type' => '497857' - }, - '2' => { - 'name' => 'data_string', - 'type' => '318' - }, - '3' => { - 'name' => 'reason_flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_crl_dist_points', - 'Source' => 'x509_write.c', - 'SourceLine' => '1132' - }, - '1964695' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'id', - 'type' => '318' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_subject_unique_id', - 'Source' => 'x509_write.c', - 'SourceLine' => '1059' - }, - '1964961' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'id', - 'type' => '318' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_issuer_unique_id', - 'Source' => 'x509_write.c', - 'SourceLine' => '1024' - }, - '1965227' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'serial', - 'type' => '318' - }, - '2' => { - 'name' => 'serial_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_serial', - 'Source' => 'x509_write.c', - 'SourceLine' => '988' - }, - '1965492' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'exp_time', - 'type' => '252' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_expiration_time', - 'Source' => 'x509_write.c', - 'SourceLine' => '959' - }, - '1965654' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'act_time', - 'type' => '252' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_activation_time', - 'Source' => 'x509_write.c', - 'SourceLine' => '933' - }, - '1965816' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'issuer', - 'type' => '144886' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '144874' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_sign', - 'Source' => 'x509_write.c', - 'SourceLine' => '914' - }, - '1965944' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'issuer', - 'type' => '144886' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '144874' - }, - '3' => { - 'name' => 'dig', - 'type' => '2391' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_sign2', - 'Source' => 'x509_write.c', - 'SourceLine' => '862' - }, - '1966054' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'activation', - 'type' => '252' - }, - '2' => { - 'name' => 'expiration', - 'type' => '252' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_private_key_usage_period', - 'Source' => 'x509_write.c', - 'SourceLine' => '814' - }, - '1966341' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'pathLenConstraint', - 'type' => '75' - }, - '2' => { - 'name' => 'policyLanguage', - 'type' => '110' - }, - '3' => { - 'name' => 'policy', - 'type' => '110' - }, - '4' => { - 'name' => 'sizeof_policy', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_proxy', - 'Source' => 'x509_write.c', - 'SourceLine' => '763' - }, - '1966666' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'type', - 'type' => '497857' - }, - '2' => { - 'name' => 'data', - 'type' => '318' - }, - '3' => { - 'name' => 'data_size', - 'type' => '145' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_issuer_alt_name', - 'Source' => 'x509_write.c', - 'SourceLine' => '681' - }, - '1967261' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'type', - 'type' => '497857' - }, - '2' => { - 'name' => 'data', - 'type' => '318' - }, - '3' => { - 'name' => 'data_size', - 'type' => '145' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_subject_alt_name', - 'Source' => 'x509_write.c', - 'SourceLine' => '598' - }, - '1967856' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'type', - 'type' => '497857' - }, - '2' => { - 'name' => 'data_string', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_subject_alternative_name', - 'Source' => 'x509_write.c', - 'SourceLine' => '550' - }, - '1968310' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'ca', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_ca_status', - 'Source' => 'x509_write.c', - 'SourceLine' => '483' - }, - '1968410' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'ca', - 'type' => '145' - }, - '2' => { - 'name' => 'pathLenConstraint', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_basic_constraints', - 'Source' => 'x509_write.c', - 'SourceLine' => '436' - }, - '1968487' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'buf', - 'type' => '318' - }, - '3' => { - 'name' => 'sizeof_buf', - 'type' => '52' - }, - '4' => { - 'name' => 'critical', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_extension_by_oid', - 'Source' => 'x509_write.c', - 'SourceLine' => '393' - }, - '1968722' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'crq', - 'type' => '882186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_crq_extensions', - 'Source' => 'x509_write.c', - 'SourceLine' => '303' - }, - '1969236' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'crq', - 'type' => '882186' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_crq', - 'Source' => 'x509_write.c', - 'SourceLine' => '256' - }, - '1969595' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'key', - 'type' => '144874' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_key', - 'Source' => 'x509_write.c', - 'SourceLine' => '219' - }, - '1969757' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'version', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_version', - 'Source' => 'x509_write.c', - 'SourceLine' => '179' - }, - '1970022' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'eecrt', - 'type' => '144886' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '3' => { - 'name' => 'name', - 'type' => '318' - }, - '4' => { - 'name' => 'sizeof_name', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_proxy_dn', - 'Source' => 'x509_write.c', - 'SourceLine' => '132' - }, - '1970319' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '3' => { - 'name' => 'name', - 'type' => '318' - }, - '4' => { - 'name' => 'sizeof_name', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_issuer_dn_by_oid', - 'Source' => 'x509_write.c', - 'SourceLine' => '100' - }, - '1970483' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '3' => { - 'name' => 'name', - 'type' => '318' - }, - '4' => { - 'name' => 'sizeof_name', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_dn_by_oid', - 'Source' => 'x509_write.c', - 'SourceLine' => '62' - }, - '1972129' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1585828' - }, - '1' => { - 'name' => 'policy', - 'type' => '1961176' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_policies_set', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1732' - }, - '1972140' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1585828' - }, - '1' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_policies', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1987' - }, - '1972195' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1585762' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'san_type', - 'type' => '145' - }, - '3' => { - 'name' => 'san', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aia_set', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2590' - }, - '1972206' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1585762' - }, - '1' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_aia', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2745' - }, - '1972239' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1585806' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_key_purpose_set', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2864' - }, - '1972250' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1585806' - }, - '1' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_key_purposes', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2992' - }, - '1972284' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'id', - 'type' => '4175' - }, - '1' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_subject_key_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '624' - }, - '1972317' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1585740' - }, - '1' => { - 'name' => 'type', - 'type' => '497857' - }, - '2' => { - 'name' => 'san', - 'type' => '4175' - }, - '3' => { - 'name' => 'reasons', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_dist_points_set', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2245' - }, - '1972328' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1585740' - }, - '1' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_crl_dist_points', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2387' - }, - '1972395' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'activation', - 'type' => '252' - }, - '1' => { - 'name' => 'expiration', - 'type' => '252' - }, - '2' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_private_key_usage_period', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1217' - }, - '1972406' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'pathLenConstraint', - 'type' => '75' - }, - '1' => { - 'name' => 'policyLanguage', - 'type' => '110' - }, - '2' => { - 'name' => 'policy', - 'type' => '110' - }, - '3' => { - 'name' => 'sizeof_policy', - 'type' => '52' - }, - '4' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_proxy', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1505' - }, - '1988844' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1577113' - }, - '1' => { - 'name' => 'type', - 'type' => '497857' - }, - '2' => { - 'name' => 'name', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_name_constraints_check', - 'Source' => 'name_constraints.c', - 'SourceLine' => '592' - }, - '1990756' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'nc', - 'type' => '1577113' - }, - '2' => { - 'name' => 'critical', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_name_constraints', - 'Source' => 'name_constraints.c', - 'SourceLine' => '357' - }, - '1991163' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1577113' - }, - '1' => { - 'name' => 'type', - 'type' => '497857' - }, - '2' => { - 'name' => 'name', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_name_constraints_add_excluded', - 'Source' => 'name_constraints.c', - 'SourceLine' => '336' - }, - '1991285' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1577113' - }, - '1' => { - 'name' => 'type', - 'type' => '497857' - }, - '2' => { - 'name' => 'name', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_name_constraints_add_permitted', - 'Source' => 'name_constraints.c', - 'SourceLine' => '312' - }, - '1994295' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1577113' - }, - '1' => { - 'name' => 'ext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_name_constraints', - 'Source' => 'x509_ext.c', - 'SourceLine' => '431' - }, - '2009480' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'cert', - 'type' => '144886' - }, - '2' => { - 'name' => 'name', - 'type' => '318' - }, - '3' => { - 'name' => 'name_size', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - }, - '5' => { - 'name' => 'voutput', - 'type' => '21238' - }, - '6' => { - 'name' => 'func', - 'offset' => '0', - 'type' => '1873276' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_verify_named_crt', - 'Source' => 'verify-high.c', - 'SourceLine' => '1426' - }, - '2011341' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'cert_list', - 'type' => '146359' - }, - '2' => { - 'name' => 'cert_list_size', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'voutput', - 'type' => '21238' - }, - '5' => { - 'name' => 'func', - 'type' => '1873276' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_verify_crt', - 'Source' => 'verify-high.c', - 'SourceLine' => '1163' - }, - '2014213' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'cert', - 'type' => '144886' - }, - '2' => { - 'name' => 'name', - 'type' => '318' - }, - '3' => { - 'name' => 'name_size', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_named_crt', - 'Source' => 'verify-high.c', - 'SourceLine' => '641' - }, - '2014545' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'clist', - 'type' => '1871309' - }, - '2' => { - 'name' => 'clist_size', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_remove_cas', - 'Source' => 'verify-high.c', - 'SourceLine' => '561' - }, - '2014926' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '2000502' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_trust_list_iter_deinit', - 'Source' => 'verify-high.c', - 'SourceLine' => '503' - }, - '2015060' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'iter', - 'type' => '2015844' - }, - '2' => { - 'name' => 'crt', - 'type' => '146359' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_iter_get_ca', - 'Source' => 'verify-high.c', - 'SourceLine' => '410' - }, - '2018294' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'email', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_check_email', - 'Source' => 'email-verify.c', - 'SourceLine' => '49' - }, - '2033435' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'ca_file', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_remove_trust_file', - 'Source' => 'verify-high2.c', - 'SourceLine' => '489' - }, - '2036477' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'cas', - 'type' => '4175' - }, - '2' => { - 'name' => 'type', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_remove_trust_mem', - 'Source' => 'verify-high2.c', - 'SourceLine' => '136' - }, - '2072168' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1543748' - }, - '1' => { - 'name' => 'san_type', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'type' => '4175' - }, - '3' => { - 'name' => 'othername_oid', - 'type' => '110' - }, - '4' => { - 'name' => 'serial', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aki_set_cert_issuer', - 'Source' => 'x509_ext.c', - 'SourceLine' => '753' - }, - '2108489' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '1695770' - }, - '1' => { - 'name' => 'format', - 'type' => '1573993' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_print', - 'Source' => 'pkcs7-output.c', - 'SourceLine' => '174' - }, - '2126274' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'trustlist', - 'type' => '147012' - }, - '2' => { - 'name' => 'verify', - 'type' => '21238' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_verify', - 'Source' => 'ocsp.c', - 'SourceLine' => '2160' - }, - '2128847' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'certs', - 'type' => '759949' - }, - '2' => { - 'name' => 'ncerts', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_certs', - 'Source' => 'ocsp.c', - 'SourceLine' => '1775' - }, - '2129384' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'sig', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_signature', - 'Source' => 'ocsp.c', - 'SourceLine' => '1733' - }, - '2129438' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_signature_algorithm', - 'Source' => 'ocsp.c', - 'SourceLine' => '1703' - }, - '2129655' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'critical', - 'type' => '21238' - }, - '2' => { - 'name' => 'nonce', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_nonce', - 'Source' => 'ocsp.c', - 'SourceLine' => '1663' - }, - '2129973' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '4233' - }, - '3' => { - 'name' => 'critical', - 'type' => '21238' - }, - '4' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_extension', - 'Source' => 'ocsp.c', - 'SourceLine' => '1585' - }, - '2133383' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_ocsp_resp_get_produced', - 'Source' => 'ocsp.c', - 'SourceLine' => '1238' - }, - '2133611' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'type', - 'type' => '145' - }, - '2' => { - 'name' => 'raw', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_responder_raw_id', - 'Source' => 'ocsp.c', - 'SourceLine' => '1170' - }, - '2133713' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'dn', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_responder', - 'Source' => 'ocsp.c', - 'SourceLine' => '1110' - }, - '2133932' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_version', - 'Source' => 'ocsp.c', - 'SourceLine' => '1066' - }, - '2134204' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'response_type_oid', - 'type' => '4233' - }, - '2' => { - 'name' => 'response', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_response', - 'Source' => 'ocsp.c', - 'SourceLine' => '1020' - }, - '2134423' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_status', - 'Source' => 'ocsp.c', - 'SourceLine' => '967' - }, - '2134505' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_randomize_nonce', - 'Source' => 'ocsp.c', - 'SourceLine' => '931' - }, - '2134733' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - }, - '1' => { - 'name' => 'critical', - 'type' => '145' - }, - '2' => { - 'name' => 'nonce', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_set_nonce', - 'Source' => 'ocsp.c', - 'SourceLine' => '883' - }, - '2134851' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - }, - '1' => { - 'name' => 'critical', - 'type' => '21238' - }, - '2' => { - 'name' => 'nonce', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_get_nonce', - 'Source' => 'ocsp.c', - 'SourceLine' => '837' - }, - '2135162' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'critical', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_set_extension', - 'Source' => 'ocsp.c', - 'SourceLine' => '808' - }, - '2135365' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '4233' - }, - '3' => { - 'name' => 'critical', - 'type' => '21238' - }, - '4' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_get_extension', - 'Source' => 'ocsp.c', - 'SourceLine' => '732' - }, - '2135491' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - }, - '1' => { - 'name' => 'digest', - 'type' => '2391' - }, - '2' => { - 'name' => 'issuer', - 'type' => '144886' - }, - '3' => { - 'name' => 'cert', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_add_cert', - 'Source' => 'ocsp.c', - 'SourceLine' => '640' - }, - '2136032' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - }, - '1' => { - 'name' => 'digest', - 'type' => '2391' - }, - '2' => { - 'name' => 'issuer_name_hash', - 'type' => '4175' - }, - '3' => { - 'name' => 'issuer_key_hash', - 'type' => '4175' - }, - '4' => { - 'name' => 'serial_number', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_add_cert_id', - 'Source' => 'ocsp.c', - 'SourceLine' => '536' - }, - '2136134' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'digest', - 'type' => '488340' - }, - '3' => { - 'name' => 'issuer_name_hash', - 'type' => '4233' - }, - '4' => { - 'name' => 'issuer_key_hash', - 'type' => '4233' - }, - '5' => { - 'name' => 'serial_number', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_get_cert_id', - 'Source' => 'ocsp.c', - 'SourceLine' => '425' - }, - '2136834' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_get_version', - 'Source' => 'ocsp.c', - 'SourceLine' => '372' - }, - '2137106' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_export', - 'Source' => 'ocsp.c', - 'SourceLine' => '353' - }, - '2137320' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - }, - '1' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_export', - 'Source' => 'ocsp.c', - 'SourceLine' => '321' - }, - '2138544' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_import', - 'Source' => 'ocsp.c', - 'SourceLine' => '179' - }, - '2139435' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_ocsp_req_deinit', - 'Source' => 'ocsp.c', - 'SourceLine' => '88' - }, - '2139521' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2139745' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_init', - 'Source' => 'ocsp.c', - 'SourceLine' => '60' - }, - '2157159' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'format', - 'type' => '2157016' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_print', - 'Source' => 'ocsp_output.c', - 'SourceLine' => '643' - }, - '2162862' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2126108' - }, - '1' => { - 'name' => 'format', - 'type' => '2157016' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_print', - 'Source' => 'ocsp_output.c', - 'SourceLine' => '172' - }, - '2178616' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '241', - 'ShortName' => 'gnutls_record_set_max_size', - 'Source' => 'max_record.c', - 'SourceLine' => '290' - }, - '2178838' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_get_max_size', - 'Source' => 'max_record.c', - 'SourceLine' => '261' - }, - '2209305' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'type', - 'type' => '2198673' - }, - '2' => { - 'name' => 'name', - 'type' => '318' - }, - '3' => { - 'name' => 'name_length', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_server_name_set', - 'Source' => 'server_name.c', - 'SourceLine' => '400' - }, - '2210145' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'data', - 'type' => '211' - }, - '2' => { - 'name' => 'data_length', - 'type' => '7280' - }, - '3' => { - 'name' => 'type', - 'type' => '21238' - }, - '4' => { - 'name' => 'indx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_server_name_get', - 'Source' => 'server_name.c', - 'SourceLine' => '286' - }, - '222112' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'error', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_strerror_name', - 'Source' => 'gnutls_errors.c', - 'SourceLine' => '506' - }, - '222197' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'error', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_strerror', - 'Source' => 'gnutls_errors.c', - 'SourceLine' => '465' - }, - '222249' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'error', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_perror', - 'Source' => 'gnutls_errors.c', - 'SourceLine' => '447' - }, - '2226286' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_sign_algorithm_get_client', - 'Source' => 'signature.c', - 'SourceLine' => '479' - }, - '2226335' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_sign_algorithm_get', - 'Source' => 'signature.c', - 'SourceLine' => '463' - }, - '2226384' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'indx', - 'type' => '52' - }, - '2' => { - 'name' => 'algo', - 'type' => '625528' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_sign_algorithm_get_requested', - 'Source' => 'signature.c', - 'SourceLine' => '418' - }, - '2243801' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_safe_renegotiation_status', - 'Source' => 'safe_renegotiation.c', - 'SourceLine' => '430' - }, - '2263379' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'key', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_ticket_enable_server', - 'Source' => 'session_ticket.c', - 'SourceLine' => '504' - }, - '2263792' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_ticket_key_generate', - 'Source' => 'session_ticket.c', - 'SourceLine' => '446' - }, - '2312507' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'retrans_timeout', - 'type' => '145' - }, - '2' => { - 'name' => 'total_timeout', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_heartbeat_set_timeouts', - 'Source' => 'heartbeat.c', - 'SourceLine' => '428' - }, - '2312580' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_heartbeat_get_timeout', - 'Source' => 'heartbeat.c', - 'SourceLine' => '400' - }, - '2313940' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_heartbeat_pong', - 'Source' => 'heartbeat.c', - 'SourceLine' => '284' - }, - '2314252' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'data_size', - 'type' => '52' - }, - '2' => { - 'name' => 'max_tries', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_heartbeat_ping', - 'Source' => 'heartbeat.c', - 'SourceLine' => '159' - }, - '2316053' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'type', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_heartbeat_allowed', - 'Source' => 'heartbeat.c', - 'SourceLine' => '76' - }, - '2316103' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'type', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_heartbeat_enable', - 'Source' => 'heartbeat.c', - 'SourceLine' => '55' - }, - '2334860' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '145078' - }, - '1' => { - 'name' => 'response_file', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_ocsp_status_request_file', - 'Source' => 'status_request.c', - 'SourceLine' => '459' - }, - '2335142' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '145078' - }, - '1' => { - 'name' => 'ocsp_func', - 'type' => '145337' - }, - '2' => { - 'name' => 'ptr', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_ocsp_status_request_function', - 'Source' => 'status_request.c', - 'SourceLine' => '418' - }, - '2366781' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_session_ext_master_secret_status', - 'Source' => 'ext_master_secret.c', - 'SourceLine' => '124' - }, - '237075' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '3185' - }, - '1' => { - 'name' => 'prime', - 'type' => '4233' - }, - '2' => { - 'name' => 'generator', - 'type' => '4233' - }, - '3' => { - 'name' => 'bits', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_export_raw', - 'Source' => 'gnutls_dh.c', - 'SourceLine' => '564' - }, - '237377' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '3185' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_export2_pkcs3', - 'Source' => 'gnutls_dh.c', - 'SourceLine' => '440' - }, - '2380901' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_session_etm_status', - 'Source' => 'etm.c', - 'SourceLine' => '137' - }, - '238630' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '3185' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'params_data', - 'type' => '3626' - }, - '3' => { - 'name' => 'params_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_export_pkcs3', - 'Source' => 'gnutls_dh.c', - 'SourceLine' => '391' - }, - '239014' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '3185' - }, - '1' => { - 'name' => 'pkcs3_params', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_import_pkcs3', - 'Source' => 'gnutls_dh.c', - 'SourceLine' => '273' - }, - '2395227' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'protocols', - 'type' => '4175' - }, - '2' => { - 'name' => 'protocols_size', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_alpn_set_protocols', - 'Source' => 'alpn.c', - 'SourceLine' => '258' - }, - '2395698' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'protocol', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_alpn_get_selected_protocol', - 'Source' => 'alpn.c', - 'SourceLine' => '211' - }, - '240191' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dparams', - 'type' => '3185' - }, - '1' => { - 'name' => 'bits', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_generate2', - 'Source' => 'gnutls_dh.c', - 'SourceLine' => '237' - }, - '240477' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '3185' - }, - '1' => { - 'name' => 'src', - 'type' => '3185' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_cpy', - 'Source' => 'gnutls_dh.c', - 'SourceLine' => '201' - }, - '240541' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '3185' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dh_params_deinit', - 'Source' => 'gnutls_dh.c', - 'SourceLine' => '178' - }, - '240677' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '240801' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_init', - 'Source' => 'gnutls_dh.c', - 'SourceLine' => '159' - }, - '240807' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '3185' - }, - '1' => { - 'name' => 'prime', - 'type' => '4175' - }, - '2' => { - 'name' => 'generator', - 'type' => '4175' - }, - '3' => { - 'name' => 'key_bits', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_import_raw2', - 'Source' => 'gnutls_dh.c', - 'SourceLine' => '120' - }, - '241074' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '3185' - }, - '1' => { - 'name' => 'prime', - 'type' => '4175' - }, - '2' => { - 'name' => 'generator', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_import_raw', - 'Source' => 'gnutls_dh.c', - 'SourceLine' => '98' - }, - '2411923' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'key_material', - 'type' => '211' - }, - '2' => { - 'name' => 'key_material_size', - 'type' => '145' - }, - '3' => { - 'name' => 'client_key', - 'type' => '4233' - }, - '4' => { - 'name' => 'client_salt', - 'type' => '4233' - }, - '5' => { - 'name' => 'server_key', - 'type' => '4233' - }, - '6' => { - 'name' => 'server_salt', - 'offset' => '0', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_get_keys', - 'Source' => 'srtp.c', - 'SourceLine' => '550' - }, - '2412646' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'profiles', - 'type' => '110' - }, - '2' => { - 'name' => 'err_pos', - 'type' => '276511' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_set_profile_direct', - 'Source' => 'srtp.c', - 'SourceLine' => '476' - }, - '2413053' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'profile', - 'type' => '2401140' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_set_profile', - 'Source' => 'srtp.c', - 'SourceLine' => '431' - }, - '2413315' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'mki', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_set_mki', - 'Source' => 'srtp.c', - 'SourceLine' => '387' - }, - '2413618' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'mki', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_get_mki', - 'Source' => 'srtp.c', - 'SourceLine' => '346' - }, - '2413915' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'profile', - 'type' => '2413993' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_get_selected_profile', - 'Source' => 'srtp.c', - 'SourceLine' => '306' - }, - '2415280' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'profile', - 'type' => '2401140' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_srtp_get_profile_name', - 'Source' => 'srtp.c', - 'SourceLine' => '150' - }, - '2415396' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - }, - '1' => { - 'name' => 'profile', - 'type' => '2413993' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_get_profile_id', - 'Source' => 'srtp.c', - 'SourceLine' => '126' - }, - '260561' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '211' - }, - '1' => { - 'name' => 'c', - 'type' => '75' - }, - '2' => { - 'name' => 'size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_memset', - 'Source' => 'safe-memfuncs.c', - 'SourceLine' => '40' - }, - '2650641' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'b64_data', - 'type' => '4175' - }, - '1' => { - 'name' => 'result', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_base64_decode2', - 'Source' => 'srp_sb64.c', - 'SourceLine' => '432' - }, - '2650759' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'b64_data', - 'type' => '4175' - }, - '1' => { - 'name' => 'result', - 'type' => '235' - }, - '2' => { - 'name' => 'result_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_base64_decode', - 'Source' => 'srp_sb64.c', - 'SourceLine' => '390' - }, - '2650949' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '4175' - }, - '1' => { - 'name' => 'result', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_base64_encode2', - 'Source' => 'srp_sb64.c', - 'SourceLine' => '351' - }, - '2651067' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '4175' - }, - '1' => { - 'name' => 'result', - 'type' => '235' - }, - '2' => { - 'name' => 'result_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_base64_encode', - 'Source' => 'srp_sb64.c', - 'SourceLine' => '310' - }, - '2700462' => { - 'Header' => 'gnutls.h', - 'Return' => '2700491', - 'ShortName' => 'gnutls_certificate_type_list', - 'Source' => 'cert_types.c', - 'SourceLine' => '86' - }, - '2714479' => { - 'Header' => 'gnutls.h', - 'Return' => '2714583', - 'ShortName' => 'gnutls_cipher_list', - 'Source' => 'ciphers.c', - 'SourceLine' => '379' - }, - '2714605' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2029', - 'ShortName' => 'gnutls_cipher_get_id', - 'Source' => 'ciphers.c', - 'SourceLine' => '350' - }, - '2715039' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2029' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_get_tag_size', - 'Source' => 'ciphers.c', - 'SourceLine' => '267' - }, - '2730954' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '263876' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'sidx', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_get_cipher_suite_index', - 'Source' => 'ciphersuites.c', - 'SourceLine' => '1644' - }, - '2731628' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'idx', - 'type' => '52' - }, - '1' => { - 'name' => 'cs_id', - 'type' => '3626' - }, - '2' => { - 'name' => 'kx', - 'type' => '510458' - }, - '3' => { - 'name' => 'cipher', - 'type' => '1803029' - }, - '4' => { - 'name' => 'mac', - 'type' => '2731762' - }, - '5' => { - 'name' => 'min_version', - 'type' => '2731768' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_cipher_suite_info', - 'Source' => 'ciphersuites.c', - 'SourceLine' => '1510' - }, - '2731984' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'kx_algorithm', - 'type' => '2149' - }, - '1' => { - 'name' => 'cipher_algorithm', - 'type' => '2029' - }, - '2' => { - 'name' => 'mac_algorithm', - 'type' => '2305' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_cipher_suite_get_name', - 'Source' => 'ciphersuites.c', - 'SourceLine' => '1445' - }, - '2749775' => { - 'Header' => 'gnutls.h', - 'Return' => '2749880', - 'ShortName' => 'gnutls_ecc_curve_list', - 'Source' => 'ecc.c', - 'SourceLine' => '102' - }, - '275538' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '145' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_priority_string_list', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1603' - }, - '275605' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '263876' - }, - '1' => { - 'name' => 'list', - 'type' => '275670' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_certificate_type_list', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1579' - }, - '275682' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '263876' - }, - '1' => { - 'name' => 'list', - 'type' => '275670' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_sign_list', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1557' - }, - '275747' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '263876' - }, - '1' => { - 'name' => 'list', - 'type' => '275670' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_protocol_list', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1535' - }, - '275812' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '263876' - }, - '1' => { - 'name' => 'list', - 'type' => '275670' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_compression_list', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1513' - }, - '275877' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '263876' - }, - '1' => { - 'name' => 'list', - 'type' => '275670' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_mac_list', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1491' - }, - '275942' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '263876' - }, - '1' => { - 'name' => 'list', - 'type' => '275670' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_cipher_list', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1469' - }, - '276005' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '263876' - }, - '1' => { - 'name' => 'list', - 'type' => '275670' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_kx_list', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1447' - }, - '276070' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '263876' - }, - '1' => { - 'name' => 'list', - 'type' => '275670' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_ecc_curve_list', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1425' - }, - '276135' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_set_default_priority', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1408' - }, - '276277' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'priorities', - 'type' => '110' - }, - '2' => { - 'name' => 'err_pos', - 'type' => '276511' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_set_direct', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1346' - }, - '2764630' => { - 'Header' => 'gnutls.h', - 'Return' => '2764729', - 'ShortName' => 'gnutls_kx_list', - 'Source' => 'kx.c', - 'SourceLine' => '232' - }, - '2764848' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2149', - 'ShortName' => 'gnutls_kx_get_id', - 'Source' => 'kx.c', - 'SourceLine' => '190' - }, - '276517' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'priority_cache', - 'type' => '263876' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_priority_deinit', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1323' - }, - '276581' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'priority_cache', - 'type' => '279862' - }, - '1' => { - 'name' => 'priorities', - 'type' => '110' - }, - '2' => { - 'name' => 'err_pos', - 'type' => '276511' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_init', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '1066' - }, - '2778927' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2391' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_digest_get_oid', - 'Source' => 'mac.c', - 'SourceLine' => '339' - }, - '2779306' => { - 'Header' => 'gnutls.h', - 'Return' => '2779408', - 'ShortName' => 'gnutls_digest_list', - 'Source' => 'mac.c', - 'SourceLine' => '251' - }, - '2779430' => { - 'Header' => 'gnutls.h', - 'Return' => '2779530', - 'ShortName' => 'gnutls_mac_list', - 'Source' => 'mac.c', - 'SourceLine' => '224' - }, - '2779552' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2305' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_mac_get_nonce_size', - 'Source' => 'mac.c', - 'SourceLine' => '204' - }, - '2779624' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2305' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_mac_get_key_size', - 'Source' => 'mac.c', - 'SourceLine' => '184' - }, - '2779813' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2391', - 'ShortName' => 'gnutls_digest_get_id', - 'Source' => 'mac.c', - 'SourceLine' => '135' - }, - '2779927' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2391' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_digest_get_name', - 'Source' => 'mac.c', - 'SourceLine' => '111' - }, - '2794146' => { - 'Header' => 'gnutls.h', - 'Return' => '2794245', - 'ShortName' => 'gnutls_protocol_list', - 'Source' => 'protocols.c', - 'SourceLine' => '187' - }, - '2809412' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2768', - 'ShortName' => 'gnutls_pk_get_id', - 'Source' => 'publickey.c', - 'SourceLine' => '173' - }, - '2809549' => { - 'Header' => 'gnutls.h', - 'Return' => '146567', - 'ShortName' => 'gnutls_pk_list', - 'Source' => 'publickey.c', - 'SourceLine' => '143' - }, - '282077' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'priority', - 'type' => '263876' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_set', - 'Source' => 'gnutls_priority.c', - 'SourceLine' => '513' - }, - '283433' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2305', - 'ShortName' => 'gnutls_mac_get_id', - 'Source' => 'mac.c', - 'SourceLine' => '160' - }, - '283491' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2982', - 'ShortName' => 'gnutls_ecc_curve_get_id', - 'Source' => 'ecc.c', - 'SourceLine' => '170' - }, - '283503' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2662', - 'ShortName' => 'gnutls_protocol_get_id', - 'Source' => 'protocols.c', - 'SourceLine' => '162' - }, - '283527' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2712', - 'ShortName' => 'gnutls_certificate_type_get_id', - 'Source' => 'cert_types.c', - 'SourceLine' => '59' - }, - '283539' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2920', - 'ShortName' => 'gnutls_sign_get_id', - 'Source' => 'sign.c', - 'SourceLine' => '183' - }, - '2839025' => { - 'Header' => 'gnutls.h', - 'Return' => '2839142', - 'ShortName' => 'gnutls_sign_list', - 'Source' => 'sign.c', - 'SourceLine' => '160' - }, - '29324' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'ms', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_record_set_timeout', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '1761' - }, - '29382' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'data', - 'type' => '211' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - }, - '3' => { - 'name' => 'seq', - 'type' => '3626' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '241', - 'ShortName' => 'gnutls_record_recv_seq', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '1739' - }, - '29532' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'data', - 'type' => '211' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '241', - 'ShortName' => 'gnutls_record_recv', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '1711' - }, - '29666' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_record_uncork', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '1637' - }, - '29825' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_record_cork', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '1611' - }, - '29870' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'data', - 'type' => '318' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '241', - 'ShortName' => 'gnutls_record_send', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '1571' - }, - '29938' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'packet', - 'type' => '30054' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '241', - 'ShortName' => 'gnutls_record_recv_packet', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '1527' - }, - '30060' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_discard_queued', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '1500' - }, - '30151' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'packet', - 'type' => '19493' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_packet_deinit', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '1483' - }, - '30215' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'packet', - 'type' => '19493' - }, - '1' => { - 'name' => 'data', - 'type' => '4233' - }, - '2' => { - 'name' => 'sequence', - 'type' => '3626' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_packet_get', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '1453' - }, - '3131635' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '146118' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3626' - }, - '2' => { - 'name' => 'flag', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_auth_subkey', - 'Source' => 'pgp.c', - 'SourceLine' => '1718' - }, - '3132372' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '146118' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'p', - 'type' => '4233' - }, - '3' => { - 'name' => 'q', - 'type' => '4233' - }, - '4' => { - 'name' => 'g', - 'type' => '4233' - }, - '5' => { - 'name' => 'y', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1600' - }, - '3132715' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '146118' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'm', - 'type' => '4233' - }, - '3' => { - 'name' => 'e', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1562' - }, - '3133002' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '146118' - }, - '1' => { - 'name' => 'p', - 'type' => '4233' - }, - '2' => { - 'name' => 'q', - 'type' => '4233' - }, - '3' => { - 'name' => 'g', - 'type' => '4233' - }, - '4' => { - 'name' => 'y', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_pk_dsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1530' - }, - '3133279' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '146118' - }, - '1' => { - 'name' => 'm', - 'type' => '4233' - }, - '2' => { - 'name' => 'e', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_pk_rsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1498' - }, - '3136733' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'fpr', - 'type' => '211' - }, - '3' => { - 'name' => 'fprlen', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_fingerprint', - 'Source' => 'pgp.c', - 'SourceLine' => '1086' - }, - '3137081' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_expiration_time', - 'Source' => 'pgp.c', - 'SourceLine' => '1013' - }, - '3137221' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_creation_time', - 'Source' => 'pgp.c', - 'SourceLine' => '978' - }, - '3137439' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_revoked_status', - 'Source' => 'pgp.c', - 'SourceLine' => '896' - }, - '3138257' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_count', - 'Source' => 'pgp.c', - 'SourceLine' => '751' - }, - '3138454' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'email', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_check_email', - 'Source' => 'pgp.c', - 'SourceLine' => '660' - }, - '3138690' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_check_hostname2', - 'Source' => 'pgp.c', - 'SourceLine' => '618' - }, - '3138909' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_check_hostname', - 'Source' => 'pgp.c', - 'SourceLine' => '596' - }, - '3139009' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_revoked_status', - 'Source' => 'pgp.c', - 'SourceLine' => '566' - }, - '3139117' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_openpgp_crt_get_expiration_time', - 'Source' => 'pgp.c', - 'SourceLine' => '504' - }, - '3139215' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_openpgp_crt_get_creation_time', - 'Source' => 'pgp.c', - 'SourceLine' => '477' - }, - '3139313' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_version', - 'Source' => 'pgp.c', - 'SourceLine' => '451' - }, - '3139515' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'idx', - 'type' => '75' - }, - '2' => { - 'name' => 'buf', - 'type' => '235' - }, - '3' => { - 'name' => 'sizeof_buf', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_name', - 'Source' => 'pgp.c', - 'SourceLine' => '338' - }, - '3140142' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'format', - 'type' => '839799' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_export2', - 'Source' => 'pgp.c', - 'SourceLine' => '252' - }, - '3159388' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'verify', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_verify_self', - 'Source' => 'pgpverify.c', - 'SourceLine' => '122' - }, - '3159515' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'keyring', - 'type' => '145036' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'verify', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_verify_ring', - 'Source' => 'pgpverify.c', - 'SourceLine' => '53' - }, - '3159994' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'ring', - 'type' => '145036' - }, - '1' => { - 'name' => 'keyid', - 'type' => '5023' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_keyring_check_id', - 'Source' => 'extras.c', - 'SourceLine' => '86' - }, - '3174300' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'ring', - 'type' => '145036' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'cert', - 'type' => '873738' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_keyring_get_crt', - 'Source' => 'extras.c', - 'SourceLine' => '272' - }, - '3174758' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'ring', - 'type' => '145036' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_keyring_get_crt_count', - 'Source' => 'extras.c', - 'SourceLine' => '224' - }, - '3175114' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'keyring', - 'type' => '145036' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '839799' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_keyring_import', - 'Source' => 'extras.c', - 'SourceLine' => '119' - }, - '3176321' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'keyring', - 'type' => '3176390' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_keyring_init', - 'Source' => 'extras.c', - 'SourceLine' => '45' - }, - '3210235' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '146185' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'p', - 'type' => '4233' - }, - '3' => { - 'name' => 'q', - 'type' => '4233' - }, - '4' => { - 'name' => 'g', - 'type' => '4233' - }, - '5' => { - 'name' => 'y', - 'type' => '4233' - }, - '6' => { - 'name' => 'x', - 'offset' => '0', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export_subkey_dsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1183' - }, - '3210685' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '146185' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'm', - 'type' => '4233' - }, - '3' => { - 'name' => 'e', - 'type' => '4233' - }, - '4' => { - 'name' => 'd', - 'type' => '4233' - }, - '5' => { - 'name' => 'p', - 'type' => '4233' - }, - '6' => { - 'name' => 'q', - 'offset' => '0', - 'type' => '4233' - }, - '7' => { - 'name' => 'u', - 'offset' => '8', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export_subkey_rsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1139' - }, - '3211157' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '146185' - }, - '1' => { - 'name' => 'p', - 'type' => '4233' - }, - '2' => { - 'name' => 'q', - 'type' => '4233' - }, - '3' => { - 'name' => 'g', - 'type' => '4233' - }, - '4' => { - 'name' => 'y', - 'type' => '4233' - }, - '5' => { - 'name' => 'x', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export_dsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1100' - }, - '3211561' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '146185' - }, - '1' => { - 'name' => 'm', - 'type' => '4233' - }, - '2' => { - 'name' => 'e', - 'type' => '4233' - }, - '3' => { - 'name' => 'd', - 'type' => '4233' - }, - '4' => { - 'name' => 'p', - 'type' => '4233' - }, - '5' => { - 'name' => 'q', - 'type' => '4233' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export_rsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1062' - }, - '3212851' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'fpr', - 'type' => '211' - }, - '3' => { - 'name' => 'fprlen', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_fingerprint', - 'Source' => 'privkey.c', - 'SourceLine' => '745' - }, - '3213130' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'keyid', - 'type' => '3626' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_id', - 'Source' => 'privkey.c', - 'SourceLine' => '704' - }, - '3213208' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_expiration_time', - 'Source' => 'privkey.c', - 'SourceLine' => '668' - }, - '3213367' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_creation_time', - 'Source' => 'privkey.c', - 'SourceLine' => '632' - }, - '3213682' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_revoked_status', - 'Source' => 'privkey.c', - 'SourceLine' => '506' - }, - '3213959' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_count', - 'Source' => 'privkey.c', - 'SourceLine' => '451' - }, - '3214165' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3626' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_key_id', - 'Source' => 'privkey.c', - 'SourceLine' => '418' - }, - '3214231' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'fpr', - 'type' => '211' - }, - '2' => { - 'name' => 'fprlen', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_fingerprint', - 'Source' => 'privkey.c', - 'SourceLine' => '376' - }, - '3214308' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_revoked_status', - 'Source' => 'privkey.c', - 'SourceLine' => '344' - }, - '3214496' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'format', - 'type' => '839799' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export2', - 'Source' => 'privkey.c', - 'SourceLine' => '251' - }, - '3214638' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'format', - 'type' => '839799' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'output_data', - 'type' => '211' - }, - '5' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export', - 'Source' => 'privkey.c', - 'SourceLine' => '225' - }, - '3215122' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '3074', - 'ShortName' => 'gnutls_openpgp_privkey_sec_param', - 'Source' => 'privkey.c', - 'SourceLine' => '141' - }, - '3234774' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '146118' - }, - '1' => { - 'name' => 'format', - 'type' => '1573993' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_print', - 'Source' => 'output.c', - 'SourceLine' => '562' - }, - '3260309' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'func', - 'type' => '5029' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_set_recv_key_function', - 'Source' => 'gnutls_openpgp.c', - 'SourceLine' => '763' - }, - '3260689' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'c', - 'type' => '145078' - }, - '1' => { - 'name' => 'data', - 'type' => '40623' - }, - '2' => { - 'name' => 'dlen', - 'type' => '52' - }, - '3' => { - 'name' => 'format', - 'type' => '839799' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_keyring_mem', - 'Source' => 'gnutls_openpgp.c', - 'SourceLine' => '665' - }, - '3260992' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'c', - 'type' => '145078' - }, - '1' => { - 'name' => 'file', - 'type' => '110' - }, - '2' => { - 'name' => 'format', - 'type' => '839799' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_keyring_file', - 'Source' => 'gnutls_openpgp.c', - 'SourceLine' => '621' - }, - '3261504' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'certfile', - 'type' => '110' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '110' - }, - '3' => { - 'name' => 'subkey_id', - 'type' => '110' - }, - '4' => { - 'name' => 'format', - 'type' => '839799' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_file2', - 'Source' => 'gnutls_openpgp.c', - 'SourceLine' => '525' - }, - '3261641' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'cert', - 'type' => '4175' - }, - '2' => { - 'name' => 'key', - 'type' => '4175' - }, - '3' => { - 'name' => 'subkey_id', - 'type' => '110' - }, - '4' => { - 'name' => 'format', - 'type' => '839799' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_mem2', - 'Source' => 'gnutls_openpgp.c', - 'SourceLine' => '428' - }, - '3262647' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'certfile', - 'type' => '110' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '110' - }, - '3' => { - 'name' => 'format', - 'type' => '839799' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_file', - 'Source' => 'gnutls_openpgp.c', - 'SourceLine' => '372' - }, - '3262793' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'cert', - 'type' => '4175' - }, - '2' => { - 'name' => 'key', - 'type' => '4175' - }, - '3' => { - 'name' => 'format', - 'type' => '839799' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_mem', - 'Source' => 'gnutls_openpgp.c', - 'SourceLine' => '349' - }, - '3263671' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'index', - 'type' => '145' - }, - '2' => { - 'name' => 'crt_list', - 'type' => '3263916' - }, - '3' => { - 'name' => 'crt_list_size', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_openpgp_crt', - 'Source' => 'gnutls_openpgp.c', - 'SourceLine' => '232' - }, - '3263928' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'index', - 'type' => '145' - }, - '2' => { - 'name' => 'key', - 'type' => '852159' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_openpgp_key', - 'Source' => 'gnutls_openpgp.c', - 'SourceLine' => '193' - }, - '3264089' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'crt', - 'type' => '146118' - }, - '2' => { - 'name' => 'pkey', - 'type' => '146185' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_key', - 'Source' => 'gnutls_openpgp.c', - 'SourceLine' => '83' - }, - '336661' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_force_valid', - 'Source' => 'gnutls_session.c', - 'SourceLine' => '237' - }, - '336704' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'session_data', - 'type' => '318' - }, - '2' => { - 'name' => 'session_data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_set_data', - 'Source' => 'gnutls_session.c', - 'SourceLine' => '202' - }, - '336887' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'session_id', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_get_id2', - 'Source' => 'gnutls_session.c', - 'SourceLine' => '174' - }, - '336949' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'session_id', - 'type' => '211' - }, - '2' => { - 'name' => 'session_id_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_get_id', - 'Source' => 'gnutls_session.c', - 'SourceLine' => '137' - }, - '337043' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_get_data2', - 'Source' => 'gnutls_session.c', - 'SourceLine' => '96' - }, - '337205' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'session_data', - 'type' => '211' - }, - '2' => { - 'name' => 'session_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_get_data', - 'Source' => 'gnutls_session.c', - 'SourceLine' => '44' - }, - '350303' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_remove_session', - 'Source' => 'gnutls_db.c', - 'SourceLine' => '323' - }, - '351336' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'entry', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_db_check_entry_time', - 'Source' => 'gnutls_db.c', - 'SourceLine' => '169' - }, - '351645' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'session_entry', - 'type' => '3632' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_db_check_entry', - 'Source' => 'gnutls_db.c', - 'SourceLine' => '153' - }, - '351710' => { - 'Header' => 'gnutls.h', - 'Return' => '145', - 'ShortName' => 'gnutls_db_get_default_cache_expiration', - 'Source' => 'gnutls_db.c', - 'SourceLine' => '137' - }, - '351739' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'seconds', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_cache_expiration', - 'Source' => 'gnutls_db.c', - 'SourceLine' => '127' - }, - '351795' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '211', - 'ShortName' => 'gnutls_db_get_ptr', - 'Source' => 'gnutls_db.c', - 'SourceLine' => '114' - }, - '351842' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'ptr', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_ptr', - 'Source' => 'gnutls_db.c', - 'SourceLine' => '100' - }, - '351898' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'store_func', - 'type' => '4003' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_store_function', - 'Source' => 'gnutls_db.c', - 'SourceLine' => '86' - }, - '351954' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'rem_func', - 'type' => '4046' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_remove_function', - 'Source' => 'gnutls_db.c', - 'SourceLine' => '68' - }, - '352010' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'retr_func', - 'type' => '4084' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_retrieve_function', - 'Source' => 'gnutls_db.c', - 'SourceLine' => '50' - }, - '364986' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'header', - 'type' => '110' - }, - '1' => { - 'name' => 'b64_data', - 'type' => '4175' - }, - '2' => { - 'name' => 'result', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pem_base64_decode2', - 'Source' => 'x509_b64.c', - 'SourceLine' => '423' - }, - '365268' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'header', - 'type' => '110' - }, - '1' => { - 'name' => 'b64_data', - 'type' => '4175' - }, - '2' => { - 'name' => 'result', - 'type' => '3626' - }, - '3' => { - 'name' => 'result_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pem_base64_decode', - 'Source' => 'x509_b64.c', - 'SourceLine' => '373' - }, - '367077' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'msg', - 'type' => '110' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'result', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pem_base64_encode2', - 'Source' => 'x509_b64.c', - 'SourceLine' => '181' - }, - '367351' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'msg', - 'type' => '110' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'result', - 'type' => '235' - }, - '3' => { - 'name' => 'result_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pem_base64_encode', - 'Source' => 'x509_b64.c', - 'SourceLine' => '135' - }, - '382071' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'type', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '21057' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ext_get_data', - 'Source' => 'gnutls_extensions.c', - 'SourceLine' => '828' - }, - '382193' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'type', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '5011' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_ext_set_data', - 'Source' => 'gnutls_extensions.c', - 'SourceLine' => '809' - }, - '382311' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - }, - '1' => { - 'name' => 'type', - 'type' => '75' - }, - '2' => { - 'name' => 'parse_type', - 'type' => '21107' - }, - '3' => { - 'name' => 'recv_func', - 'type' => '20865' - }, - '4' => { - 'name' => 'send_func', - 'type' => '20914' - }, - '5' => { - 'name' => 'deinit_func', - 'type' => '20952' - }, - '6' => { - 'name' => 'pack_func', - 'offset' => '0', - 'type' => '20981' - }, - '7' => { - 'name' => 'unpack_func', - 'offset' => '8', - 'type' => '21019' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ext_register', - 'Source' => 'gnutls_extensions.c', - 'SourceLine' => '763' - }, - '401982' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2203', - 'ShortName' => 'gnutls_auth_get_type', - 'Source' => 'gnutls_auth.c', - 'SourceLine' => '198' - }, - '402086' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'type', - 'type' => '2203' - }, - '2' => { - 'name' => 'cred', - 'type' => '4278' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_credentials_get', - 'Source' => 'gnutls_auth.c', - 'SourceLine' => '168' - }, - '402310' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'type', - 'type' => '2203' - }, - '2' => { - 'name' => 'cred', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_credentials_set', - 'Source' => 'gnutls_auth.c', - 'SourceLine' => '93' - }, - '402468' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_credentials_clear', - 'Source' => 'gnutls_auth.c', - 'SourceLine' => '44' - }, - '40789' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'how', - 'type' => '18408' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_bye', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '274' - }, - '41025' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_transport_get_int', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '237' - }, - '41072' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'recv_int', - 'type' => '16639' - }, - '2' => { - 'name' => 'send_int', - 'type' => '16639' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_get_int2', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '217' - }, - '41141' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'recv_ptr', - 'type' => '41210' - }, - '2' => { - 'name' => 'send_ptr', - 'type' => '41210' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_get_ptr2', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '195' - }, - '41216' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '3086', - 'ShortName' => 'gnutls_transport_get_ptr', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '179' - }, - '41263' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'recv_int', - 'type' => '75' - }, - '2' => { - 'name' => 'send_int', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_int2', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '138' - }, - '41332' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'recv_ptr', - 'type' => '3086' - }, - '2' => { - 'name' => 'send_ptr', - 'type' => '3086' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_ptr2', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '116' - }, - '41401' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'ptr', - 'type' => '3086' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_ptr', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '97' - }, - '41457' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_record_disable_padding', - 'Source' => 'gnutls_record.c', - 'SourceLine' => '81' - }, - '4422' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1640', - 'Return' => '4284', - 'ShortName' => 'gnutls_malloc', - 'Source' => 'gnutls_mem.c', - 'SourceLine' => '29' - }, - '4434' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1641', - 'Return' => '4384', - 'ShortName' => 'gnutls_realloc', - 'Source' => 'gnutls_mem.c', - 'SourceLine' => '31' - }, - '443441' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'entity', - 'type' => '145' - }, - '2' => { - 'name' => 'version', - 'type' => '2662' - }, - '3' => { - 'name' => 'kx', - 'type' => '2149' - }, - '4' => { - 'name' => 'cipher', - 'type' => '2029' - }, - '5' => { - 'name' => 'mac', - 'type' => '2305' - }, - '6' => { - 'name' => 'comp', - 'offset' => '0', - 'type' => '2441' - }, - '7' => { - 'name' => 'master', - 'offset' => '8', - 'type' => '4175' - }, - '8' => { - 'name' => 'session_id', - 'offset' => '16', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_set_premaster', - 'Source' => 'gnutls_session_pack.c', - 'SourceLine' => '916' - }, - '4446' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1642', - 'Return' => '4317', - 'ShortName' => 'gnutls_calloc', - 'Source' => 'gnutls_mem.c', - 'SourceLine' => '33' - }, - '4458' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1643', - 'Return' => '4355', - 'ShortName' => 'gnutls_free', - 'Source' => 'gnutls_mem.c', - 'SourceLine' => '30' - }, - '44595' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2441', - 'ShortName' => 'gnutls_compression_get', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '163' - }, - '44640' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'error', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_error_is_fatal', - 'Source' => 'gnutls_errors.c', - 'SourceLine' => '420' - }, - '44765' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'alert', - 'type' => '643167' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_alert_get_name', - 'Source' => 'gnutls_alert.c', - 'SourceLine' => '97' - }, - '4485' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1645', - 'Return' => '4497', - 'ShortName' => 'gnutls_strdup', - 'Source' => 'gnutls_mem.c', - 'SourceLine' => '34' - }, - '44876' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_dtls_get_mtu', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '823' - }, - '44887' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'level', - 'type' => '642961' - }, - '2' => { - 'name' => 'desc', - 'type' => '643167' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_alert_send', - 'Source' => 'gnutls_alert.c', - 'SourceLine' => '148' - }, - '44932' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dest', - 'type' => '20774' - }, - '1' => { - 'name' => 'data', - 'type' => '318' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_buffer_append_data', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '131' - }, - '4830' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1818', - 'Return' => '3644', - 'ShortName' => 'gnutls_srp_4096_group_prime', - 'Source' => 'srp.c', - 'SourceLine' => '665' - }, - '4842' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1819', - 'Return' => '3644', - 'ShortName' => 'gnutls_srp_4096_group_generator', - 'Source' => 'srp.c', - 'SourceLine' => '661' - }, - '4854' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1821', - 'Return' => '3644', - 'ShortName' => 'gnutls_srp_3072_group_prime', - 'Source' => 'srp.c', - 'SourceLine' => '569' - }, - '4866' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1822', - 'Return' => '3644', - 'ShortName' => 'gnutls_srp_3072_group_generator', - 'Source' => 'srp.c', - 'SourceLine' => '565' - }, - '4878' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1824', - 'Return' => '3644', - 'ShortName' => 'gnutls_srp_2048_group_prime', - 'Source' => 'srp.c', - 'SourceLine' => '511' - }, - '4890' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1825', - 'Return' => '3644', - 'ShortName' => 'gnutls_srp_2048_group_generator', - 'Source' => 'srp.c', - 'SourceLine' => '515' - }, - '4902' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1827', - 'Return' => '3644', - 'ShortName' => 'gnutls_srp_1536_group_prime', - 'Source' => 'srp.c', - 'SourceLine' => '471' - }, - '4914' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1828', - 'Return' => '3644', - 'ShortName' => 'gnutls_srp_1536_group_generator', - 'Source' => 'srp.c', - 'SourceLine' => '475' - }, - '491782' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2391', - 'ShortName' => 'gnutls_oid_to_digest', - 'Source' => 'mac.c', - 'SourceLine' => '283' - }, - '4926' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1830', - 'Return' => '3644', - 'ShortName' => 'gnutls_srp_1024_group_prime', - 'Source' => 'srp.c', - 'SourceLine' => '438' - }, - '4938' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1831', - 'Return' => '3644', - 'ShortName' => 'gnutls_srp_1024_group_generator', - 'Source' => 'srp.c', - 'SourceLine' => '442' - }, - '506879' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'status', - 'type' => '145' - }, - '1' => { - 'name' => 'type', - 'type' => '2712' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_verification_status_print', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '890' - }, - '508667' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_certificate_activation_time_peers', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '787' - }, - '508989' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '252', - 'ShortName' => 'gnutls_certificate_expiration_time_peers', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '743' - }, - '509311' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'data', - 'type' => '12677' - }, - '2' => { - 'name' => 'elements', - 'type' => '145' - }, - '3' => { - 'name' => 'status', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_verify_peers', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '686' - }, - '509423' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - }, - '2' => { - 'name' => 'status', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_verify_peers3', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '640' - }, - '509560' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'status', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_verify_peers2', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '604' - }, - '509899' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '145078' - }, - '1' => { - 'name' => 'func', - 'type' => '12671' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_verify_function', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '434' - }, - '509958' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '145078' - }, - '1' => { - 'name' => 'func', - 'type' => '155595' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_retrieve_function2', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '403' - }, - '510017' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '145078' - }, - '1' => { - 'name' => 'func', - 'type' => '155589' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_retrieve_function', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '351' - }, - '510076' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'req', - 'type' => '494654' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_server_set_request', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '305' - }, - '510464' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '510627' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_allocate_credentials', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '218' - }, - '510633' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '145078' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_credentials', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '194' - }, - '510754' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '145078' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_ca_names', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '176' - }, - '510831' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '145078' - }, - '1' => { - 'name' => 'idx1', - 'type' => '145' - }, - '2' => { - 'name' => 'idx2', - 'type' => '145' - }, - '3' => { - 'name' => 'cert', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_crt_raw', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '142' - }, - '511067' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '145078' - }, - '1' => { - 'name' => 'cert', - 'type' => '144886' - }, - '2' => { - 'name' => 'issuer', - 'type' => '146359' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_issuer', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '114' - }, - '511195' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '145078' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_cas', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '90' - }, - '511237' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '145078' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_keys', - 'Source' => 'gnutls_cert.c', - 'SourceLine' => '56' - }, - '512204' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'bits', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_get_pk_algorithm', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '74' - }, - '512215' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - }, - '1' => { - 'name' => 'bits', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_get_pk_algorithm', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '78' - }, - '512226' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'signer', - 'type' => '144851' - }, - '1' => { - 'name' => 'hash', - 'type' => '2391' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4175' - }, - '4' => { - 'name' => 'signature', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_sign_data', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '972' - }, - '512238' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pk', - 'type' => '2768' - }, - '1' => { - 'name' => 'hash', - 'type' => '2391' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '2920', - 'ShortName' => 'gnutls_pk_to_sign', - 'Source' => 'sign.c', - 'SourceLine' => '236' - }, - '512250' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pubkey', - 'type' => '4199' - }, - '1' => { - 'name' => 'algo', - 'type' => '2920' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4175' - }, - '4' => { - 'name' => 'signature', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_verify_data2', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1605' - }, - '512261' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '146359' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_init', - 'Source' => 'x509.c', - 'SourceLine' => '70' - }, - '512272' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_import', - 'Source' => 'x509.c', - 'SourceLine' => '252' - }, - '512283' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_activation_time' - }, - '512295' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_deinit', - 'Source' => 'x509.c', - 'SourceLine' => '159' - }, - '512318' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2712', - 'ShortName' => 'gnutls_certificate_type_get', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '112' - }, - '512341' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_expiration_time' - }, - '512387' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '758030' - }, - '1' => { - 'name' => 'size', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_init', - 'Source' => 'verify-high.c', - 'SourceLine' => '84' - }, - '512399' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'all', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_trust_list_deinit', - 'Source' => 'verify-high.c', - 'SourceLine' => '126' - }, - '512411' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'keyring', - 'type' => '145036' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_keyring_deinit', - 'Source' => 'extras.c', - 'SourceLine' => '61' - }, - '512423' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'cert', - 'type' => '144886' - }, - '2' => { - 'name' => 'issuer', - 'type' => '146359' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_get_issuer', - 'Source' => 'verify-high.c', - 'SourceLine' => '945' - }, - '512435' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5142' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pcert_deinit', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '501' - }, - '512447' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_privkey_deinit', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '286' - }, - '526627' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'req_version', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_check_version', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '460' - }, - '526712' => { - 'Header' => 'gnutls.h', - 'Return' => '1', - 'ShortName' => 'gnutls_global_deinit', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '441' - }, - '527216' => { - 'Header' => 'gnutls.h', - 'Return' => '75', - 'ShortName' => 'gnutls_global_init', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '217' - }, - '528388' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'level', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_log_level', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '149' - }, - '528431' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'time_func', - 'type' => '4239' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_time_function', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '133' - }, - '528474' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'log_func', - 'type' => '4537' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_audit_log_function', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '118' - }, - '528517' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'log_func', - 'type' => '4503' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_log_function', - 'Source' => 'gnutls_global.c', - 'SourceLine' => '98' - }, - '528936' => { - 'Header' => 'pkcs11.h', - 'Line' => '77', - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_deinit', - 'Source' => 'pkcs11.c', - 'SourceLine' => '849' - }, - '564591' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '555892' - }, - '1' => { - 'name' => 'func', - 'type' => '155577' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_set_server_params_function', - 'Source' => 'gnutls_anon_cred.c', - 'SourceLine' => '131' - }, - '564647' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '555892' - }, - '1' => { - 'name' => 'dh_params', - 'type' => '3185' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_set_server_dh_params', - 'Source' => 'gnutls_anon_cred.c', - 'SourceLine' => '115' - }, - '564703' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '564749' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_anon_allocate_client_credentials', - 'Source' => 'gnutls_anon_cred.c', - 'SourceLine' => '94' - }, - '564755' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '555947' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_free_client_credentials', - 'Source' => 'gnutls_anon_cred.c', - 'SourceLine' => '76' - }, - '564797' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '564865' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_anon_allocate_server_credentials', - 'Source' => 'gnutls_anon_cred.c', - 'SourceLine' => '58' - }, - '564871' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '555892' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_free_server_credentials', - 'Source' => 'gnutls_anon_cred.c', - 'SourceLine' => '42' - }, - '595239' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'sid', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_set_id', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '917' - }, - '595434' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '235', - 'ShortName' => 'gnutls_session_get_desc', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '823' - }, - '596423' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_status_request_is_checked', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '788' - }, - '596692' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'filename', - 'type' => '110' - }, - '1' => { - 'name' => 'data', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_load_file', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '747' - }, - '596876' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '555892' - }, - '1' => { - 'name' => 'func', - 'type' => '155577' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_set_params_function', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '726' - }, - '596935' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '586075' - }, - '1' => { - 'name' => 'func', - 'type' => '155577' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_params_function', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '708' - }, - '596994' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'max_bits', - 'type' => '145' - }, - '2' => { - 'name' => 'max_depth', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_verify_limits', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '689' - }, - '597067' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_certificate_get_verify_flags', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '672' - }, - '597116' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_verify_flags', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '654' - }, - '597175' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_flags', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '637' - }, - '597234' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'func', - 'type' => '155577' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_params_function', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '619' - }, - '597293' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algo', - 'type' => '2391' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'result', - 'type' => '211' - }, - '3' => { - 'name' => 'result_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_fingerprint', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '584' - }, - '597616' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_client_get_request_status', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '558' - }, - '597665' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'id', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_peers_subkey_id', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '531' - }, - '597819' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'list_size', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '4175', - 'ShortName' => 'gnutls_certificate_get_peers', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '500' - }, - '597974' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '4175', - 'ShortName' => 'gnutls_certificate_get_ours', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '463' - }, - '598139' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'dh_params', - 'type' => '3185' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_dh_params', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '441' - }, - '598198' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_get_peers_public_bits', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '382' - }, - '598577' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_get_prime_bits', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '324' - }, - '598990' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_get_secret_bits', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '255' - }, - '599318' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'raw_key', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_get_pubkey', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '202' - }, - '599672' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'raw_gen', - 'type' => '4233' - }, - '2' => { - 'name' => 'raw_prime', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_get_group', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '134' - }, - '600171' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'bits', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dh_set_prime_bits', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '104' - }, - '600298' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '585943' - }, - '1' => { - 'name' => 'key_type', - 'type' => '110' - }, - '2' => { - 'name' => 'key_size', - 'type' => '145' - }, - '3' => { - 'name' => 'fpr', - 'type' => '211' - }, - '4' => { - 'name' => 'fpr_size', - 'type' => '52' - }, - '5' => { - 'name' => 'art', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_random_art', - 'Source' => 'gnutls_ui.c', - 'SourceLine' => '56' - }, - '601002' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2149' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_kx_get_name', - 'Source' => 'kx.c', - 'SourceLine' => '170' - }, - '601050' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2305', - 'ShortName' => 'gnutls_mac_get', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '140' - }, - '601062' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2305' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_mac_get_name', - 'Source' => 'mac.c', - 'SourceLine' => '92' - }, - '601074' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2029', - 'ShortName' => 'gnutls_cipher_get', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '88' - }, - '601086' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2029' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_cipher_get_name', - 'Source' => 'ciphers.c', - 'SourceLine' => '331' - }, - '601098' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '2712' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_certificate_type_get_name', - 'Source' => 'cert_types.c', - 'SourceLine' => '37' - }, - '601110' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2982', - 'ShortName' => 'gnutls_ecc_curve_get', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1496' - }, - '601122' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'curve', - 'type' => '2982' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_ecc_curve_get_name', - 'Source' => 'ecc.c', - 'SourceLine' => '216' - }, - '601134' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'response', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_status_request_get', - 'Source' => 'status_request.c', - 'SourceLine' => '361' - }, - '601225' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algo', - 'type' => '2768' - }, - '1' => { - 'name' => 'param', - 'type' => '3074' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_sec_param_to_pk_bits', - 'Source' => 'secparams.c', - 'SourceLine' => '81' - }, - '60308' => { - 'Header' => 'gnutls.h', - 'Return' => '60337', - 'ShortName' => 'gnutls_compression_list', - 'Source' => 'gnutls_compress.c', - 'SourceLine' => '119' - }, - '60343' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2441', - 'ShortName' => 'gnutls_compression_get_id', - 'Source' => 'gnutls_compress.c', - 'SourceLine' => '99' - }, - '60440' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2441' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_compression_get_name', - 'Source' => 'gnutls_compress.c', - 'SourceLine' => '78' - }, - '626228' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sign', - 'type' => '2920' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2391', - 'ShortName' => 'gnutls_sign_get_hash_algorithm', - 'Source' => 'sign.c', - 'SourceLine' => '283' - }, - '626262' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2920' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_sign_get_name', - 'Source' => 'sign.c', - 'SourceLine' => '120' - }, - '626351' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sign', - 'type' => '2920' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2768', - 'ShortName' => 'gnutls_sign_get_pk_algorithm', - 'Source' => 'sign.c', - 'SourceLine' => '304' - }, - '626363' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'usage', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_get_key_usage', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '94' - }, - '626385' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'algo', - 'type' => '2920' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'hash', - 'type' => '4175' - }, - '4' => { - 'name' => 'signature', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_verify_hash2', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1661' - }, - '626396' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'signer', - 'type' => '144851' - }, - '1' => { - 'name' => 'hash_algo', - 'type' => '2391' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'hash_data', - 'type' => '4175' - }, - '4' => { - 'name' => 'signature', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_sign_hash', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '1037' - }, - '640459' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'curve', - 'type' => '2982' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ecc_curve_get_size', - 'Source' => 'ecc.c', - 'SourceLine' => '288' - }, - '653605' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'err', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_alert_send_appropriate', - 'Source' => 'gnutls_alert.c', - 'SourceLine' => '328' - }, - '653754' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'err', - 'type' => '75' - }, - '1' => { - 'name' => 'level', - 'type' => '16639' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_error_to_alert', - 'Source' => 'gnutls_alert.c', - 'SourceLine' => '189' - }, - '654171' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'alert', - 'type' => '643167' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_alert_get_strname', - 'Source' => 'gnutls_alert.c', - 'SourceLine' => '118' - }, - '668794' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - }, - '1' => { - 'name' => 'curve', - 'type' => '2982' - }, - '2' => { - 'name' => 'x', - 'type' => '4175' - }, - '3' => { - 'name' => 'y', - 'type' => '4175' - }, - '4' => { - 'name' => 'k', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_ecc_raw', - 'Source' => 'gnutls_privkey_raw.c', - 'SourceLine' => '299' - }, - '669213' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - }, - '1' => { - 'name' => 'p', - 'type' => '4175' - }, - '2' => { - 'name' => 'q', - 'type' => '4175' - }, - '3' => { - 'name' => 'g', - 'type' => '4175' - }, - '4' => { - 'name' => 'y', - 'type' => '4175' - }, - '5' => { - 'name' => 'x', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_dsa_raw', - 'Source' => 'gnutls_privkey_raw.c', - 'SourceLine' => '248' - }, - '669644' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - }, - '1' => { - 'name' => 'm', - 'type' => '4175' - }, - '2' => { - 'name' => 'e', - 'type' => '4175' - }, - '3' => { - 'name' => 'd', - 'type' => '4175' - }, - '4' => { - 'name' => 'p', - 'type' => '4175' - }, - '5' => { - 'name' => 'q', - 'type' => '4175' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4175' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '4175' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_rsa_raw', - 'Source' => 'gnutls_privkey_raw.c', - 'SourceLine' => '195' - }, - '670109' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - }, - '1' => { - 'name' => 'curve', - 'type' => '485763' - }, - '2' => { - 'name' => 'x', - 'type' => '4233' - }, - '3' => { - 'name' => 'y', - 'type' => '4233' - }, - '4' => { - 'name' => 'k', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_ecc_raw', - 'Source' => 'gnutls_privkey_raw.c', - 'SourceLine' => '148' - }, - '670470' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - }, - '1' => { - 'name' => 'p', - 'type' => '4233' - }, - '2' => { - 'name' => 'q', - 'type' => '4233' - }, - '3' => { - 'name' => 'g', - 'type' => '4233' - }, - '4' => { - 'name' => 'y', - 'type' => '4233' - }, - '5' => { - 'name' => 'x', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_dsa_raw', - 'Source' => 'gnutls_privkey_raw.c', - 'SourceLine' => '104' - }, - '670844' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - }, - '1' => { - 'name' => 'm', - 'type' => '4233' - }, - '2' => { - 'name' => 'e', - 'type' => '4233' - }, - '3' => { - 'name' => 'd', - 'type' => '4233' - }, - '4' => { - 'name' => 'p', - 'type' => '4233' - }, - '5' => { - 'name' => 'q', - 'type' => '4233' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4233' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '4233' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_rsa_raw', - 'Source' => 'gnutls_privkey_raw.c', - 'SourceLine' => '58' - }, - '671317' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '760115' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_init', - 'Source' => 'privkey.c', - 'SourceLine' => '46' - }, - '671329' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'curve', - 'type' => '2982' - }, - '2' => { - 'name' => 'x', - 'type' => '4175' - }, - '3' => { - 'name' => 'y', - 'type' => '4175' - }, - '4' => { - 'name' => 'k', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import_ecc_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1064' - }, - '671341' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'key', - 'type' => '144874' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_x509', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '662' - }, - '671353' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_privkey_deinit', - 'Source' => 'privkey.c', - 'SourceLine' => '75' - }, - '671365' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'p', - 'type' => '4175' - }, - '2' => { - 'name' => 'q', - 'type' => '4175' - }, - '3' => { - 'name' => 'g', - 'type' => '4175' - }, - '4' => { - 'name' => 'y', - 'type' => '4175' - }, - '5' => { - 'name' => 'x', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import_dsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '975' - }, - '671377' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'm', - 'type' => '4175' - }, - '2' => { - 'name' => 'e', - 'type' => '4175' - }, - '3' => { - 'name' => 'd', - 'type' => '4175' - }, - '4' => { - 'name' => 'p', - 'type' => '4175' - }, - '5' => { - 'name' => 'q', - 'type' => '4175' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4175' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '4175' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_privkey_import_rsa_raw2' - }, - '685933' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'tl_flags', - 'type' => '145' - }, - '2' => { - 'name' => 'tl_vflags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_system_trust', - 'Source' => 'system.c', - 'SourceLine' => '583' - }, - '686790' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'ptr', - 'type' => '3086' - }, - '1' => { - 'name' => 'ms', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_system_recv_timeout', - 'Source' => 'system.c', - 'SourceLine' => '160' - }, - '688019' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'ca_file', - 'type' => '110' - }, - '2' => { - 'name' => 'crl_file', - 'type' => '110' - }, - '3' => { - 'name' => 'type', - 'type' => '225461' - }, - '4' => { - 'name' => 'tl_flags', - 'type' => '145' - }, - '5' => { - 'name' => 'tl_vflags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_trust_file', - 'Source' => 'verify-high2.c', - 'SourceLine' => '304' - }, - '703964' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '4175' - }, - '1' => { - 'name' => 'result', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hex_encode2', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '653' - }, - '704238' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '4175' - }, - '1' => { - 'name' => 'result', - 'type' => '235' - }, - '2' => { - 'name' => 'result_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hex_encode', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '619' - }, - '704505' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'hex_data', - 'type' => '4175' - }, - '1' => { - 'name' => 'result', - 'type' => '211' - }, - '2' => { - 'name' => 'result_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hex_decode', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '583' - }, - '704778' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'hex_data', - 'type' => '4175' - }, - '1' => { - 'name' => 'result', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hex_decode2', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '544' - }, - '705308' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'hex_data', - 'type' => '110' - }, - '1' => { - 'name' => 'hex_size', - 'type' => '52' - }, - '2' => { - 'name' => 'bin_data', - 'type' => '211' - }, - '3' => { - 'name' => 'bin_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hex2bin', - 'Source' => 'gnutls_str.c', - 'SourceLine' => '489' - }, - '725922' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'read', - 'type' => '145' - }, - '2' => { - 'name' => 'seq_number', - 'type' => '3626' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_record_set_state', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1705' - }, - '726297' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'read', - 'type' => '145' - }, - '2' => { - 'name' => 'mac_key', - 'type' => '4233' - }, - '3' => { - 'name' => 'IV', - 'type' => '4233' - }, - '4' => { - 'name' => 'cipher_key', - 'type' => '4233' - }, - '5' => { - 'name' => 'seq_number', - 'type' => '3626' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_record_get_state', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1650' - }, - '726690' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'htype', - 'type' => '145' - }, - '2' => { - 'name' => 'post', - 'type' => '75' - }, - '3' => { - 'name' => 'func', - 'type' => '4122' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_hook_function', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1620' - }, - '726777' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'random', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_handshake_set_random', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1577' - }, - '726923' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'client', - 'type' => '4233' - }, - '2' => { - 'name' => 'server', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_get_random', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1530' - }, - '727128' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'cbtype', - 'type' => '714025' - }, - '2' => { - 'name' => 'cb', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_channel_binding', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1464' - }, - '727231' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_enable_compatibility_mode', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1442' - }, - '727276' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'func', - 'type' => '4181' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_post_client_hello_function', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1419' - }, - '727408' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_record_get_direction', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1369' - }, - '727457' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'func', - 'type' => '12671' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_set_verify_function', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1346' - }, - '727516' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'ptr', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_set_ptr', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1316' - }, - '727575' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '211', - 'ShortName' => 'gnutls_session_get_ptr', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1302' - }, - '727832' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_resumption_requested', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1243' - }, - '727881' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_is_resumed', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1212' - }, - '727966' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'label_size', - 'type' => '52' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'server_random_first', - 'type' => '75' - }, - '4' => { - 'name' => 'extra_size', - 'type' => '52' - }, - '5' => { - 'name' => 'extra', - 'type' => '110' - }, - '6' => { - 'name' => 'outsize', - 'offset' => '0', - 'type' => '52' - }, - '7' => { - 'name' => 'out', - 'offset' => '8', - 'type' => '235' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_prf', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1162' - }, - '728359' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'label_size', - 'type' => '52' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'context_size', - 'type' => '52' - }, - '4' => { - 'name' => 'context', - 'type' => '110' - }, - '5' => { - 'name' => 'outsize', - 'type' => '52' - }, - '6' => { - 'name' => 'out', - 'offset' => '0', - 'type' => '235' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_prf_rfc5705', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1099' - }, - '728788' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'label_size', - 'type' => '52' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'seed_size', - 'type' => '52' - }, - '4' => { - 'name' => 'seed', - 'type' => '110' - }, - '5' => { - 'name' => 'outsize', - 'type' => '52' - }, - '6' => { - 'name' => 'out', - 'offset' => '0', - 'type' => '235' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_prf_raw', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '1046' - }, - '730697' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'allow', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_private_extensions', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '772' - }, - '730951' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'status', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_send_x509_rdn_sequence', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '705' - }, - '731010' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'status', - 'type' => '713478' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_send_cert', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '683' - }, - '732631' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_deinit', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '446' - }, - '73382' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '2564' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_handshake_description_get_name', - 'Source' => 'debug.c', - 'SourceLine' => '83' - }, - '733835' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '734443' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_init', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '307' - }, - '735222' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2149', - 'ShortName' => 'gnutls_kx_get', - 'Source' => 'gnutls_state.c', - 'SourceLine' => '126' - }, - '737913' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'vec_func', - 'type' => '4748' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_vec_push_function', - 'Source' => 'system_override.c', - 'SourceLine' => '163' - }, - '737936' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_ticket_enable_client', - 'Source' => 'session_ticket.c', - 'SourceLine' => '463' - }, - '737948' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'responder_id', - 'type' => '4233' - }, - '2' => { - 'name' => 'responder_id_size', - 'type' => '52' - }, - '3' => { - 'name' => 'extensions', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_status_request_enable_client', - 'Source' => 'status_request.c', - 'SourceLine' => '316' - }, - '754930' => { - 'Data' => 1, - 'Header' => 'urls.h', - 'Line' => '31', - 'Return' => '754919', - 'ShortName' => '_gnutls_custom_urls' - }, - '754941' => { - 'Data' => 1, - 'Header' => 'urls.h', - 'Line' => '32', - 'Return' => '145', - 'ShortName' => '_gnutls_custom_urls_size' - }, - '754952' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '145078' - }, - '1' => { - 'name' => 'fn', - 'type' => '146579' - }, - '2' => { - 'name' => 'userdata', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_pin_function', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '2036' - }, - '755024' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '145078' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_crls', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '2015' - }, - '755068' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'p12blob', - 'type' => '4175' - }, - '2' => { - 'name' => 'type', - 'type' => '225461' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_simple_pkcs12_mem', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1927' - }, - '755747' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'pkcs12file', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '225461' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_simple_pkcs12_file', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1870' - }, - '756030' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'crlfile', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_crl_file', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1819' - }, - '756172' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'crl_list', - 'type' => '756477' - }, - '2' => { - 'name' => 'crl_list_size', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_crl', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1766' - }, - '756502' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'CRL', - 'type' => '4175' - }, - '2' => { - 'name' => 'type', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_crl_mem', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1735' - }, - '756644' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '145078' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_system_trust', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1713' - }, - '756719' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '145078' - }, - '1' => { - 'name' => 'ca_dir', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_trust_dir', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1683' - }, - '756861' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '145078' - }, - '1' => { - 'name' => 'cafile', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_trust_file', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1652' - }, - '757003' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'ca_list', - 'type' => '146359' - }, - '2' => { - 'name' => 'ca_list_size', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_trust', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1590' - }, - '757322' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'ca', - 'type' => '4175' - }, - '2' => { - 'name' => 'type', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_trust_mem', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1554' - }, - '757718' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'certfile', - 'type' => '110' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '110' - }, - '3' => { - 'name' => 'type', - 'type' => '225461' - }, - '4' => { - 'name' => 'pass', - 'type' => '110' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_key_file2', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1449' - }, - '757820' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'certfile', - 'type' => '110' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '110' - }, - '3' => { - 'name' => 'type', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_key_file', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1403' - }, - '757971' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'tlist', - 'type' => '758030' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_get_trust_list', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1363' - }, - '758036' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'tlist', - 'type' => '147012' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_trust_list', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1341' - }, - '758134' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'names', - 'type' => '276511' - }, - '2' => { - 'name' => 'names_size', - 'type' => '75' - }, - '3' => { - 'name' => 'pcert_list', - 'type' => '5142' - }, - '4' => { - 'name' => 'pcert_list_size', - 'type' => '75' - }, - '5' => { - 'name' => 'key', - 'type' => '144851' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_key', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1230' - }, - '759697' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'index', - 'type' => '145' - }, - '2' => { - 'name' => 'crt_list', - 'type' => '759949' - }, - '3' => { - 'name' => 'crt_list_size', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_x509_crt', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1166' - }, - '759955' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'index', - 'type' => '145' - }, - '2' => { - 'name' => 'key', - 'type' => '760115' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_x509_key', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1127' - }, - '760121' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'cert_list', - 'type' => '146359' - }, - '2' => { - 'name' => 'cert_list_size', - 'type' => '75' - }, - '3' => { - 'name' => 'key', - 'type' => '144874' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_key', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '1019' - }, - '760841' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'cert', - 'type' => '4175' - }, - '2' => { - 'name' => 'key', - 'type' => '4175' - }, - '3' => { - 'name' => 'type', - 'type' => '225461' - }, - '4' => { - 'name' => 'pass', - 'type' => '110' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_key_mem2', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '927' - }, - '760943' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '145078' - }, - '1' => { - 'name' => 'cert', - 'type' => '4175' - }, - '2' => { - 'name' => 'key', - 'type' => '4175' - }, - '3' => { - 'name' => 'type', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_key_mem', - 'Source' => 'gnutls_x509.c', - 'SourceLine' => '891' - }, - '771090' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '1653410' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_init', - 'Source' => 'pkcs12.c', - 'SourceLine' => '150' - }, - '771101' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '754035' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_import', - 'Source' => 'pkcs12.c', - 'SourceLine' => '199' - }, - '771112' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '754035' - }, - '1' => { - 'name' => 'pass', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_verify_mac', - 'Source' => 'pkcs12.c', - 'SourceLine' => '1006' - }, - '771123' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'p12', - 'type' => '754035' - }, - '1' => { - 'name' => 'password', - 'type' => '110' - }, - '2' => { - 'name' => 'key', - 'type' => '760115' - }, - '3' => { - 'name' => 'chain', - 'type' => '759949' - }, - '4' => { - 'name' => 'chain_len', - 'type' => '21238' - }, - '5' => { - 'name' => 'extra_certs', - 'type' => '759949' - }, - '6' => { - 'name' => 'extra_certs_len', - 'offset' => '0', - 'type' => '21238' - }, - '7' => { - 'name' => 'crl', - 'offset' => '8', - 'type' => '756477' - }, - '8' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_simple_parse', - 'Source' => 'pkcs12.c', - 'SourceLine' => '1445' - }, - '771134' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '754035' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs12_deinit', - 'Source' => 'pkcs12.c', - 'SourceLine' => '172' - }, - '771168' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '742906' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crl_deinit', - 'Source' => 'crl.c', - 'SourceLine' => '92' - }, - '771237' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '756477' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_init', - 'Source' => 'crl.c', - 'SourceLine' => '68' - }, - '771249' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'crl_list', - 'type' => '1871958' - }, - '2' => { - 'name' => 'crl_size', - 'type' => '75' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'verification_flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_crls', - 'Source' => 'verify-high.c', - 'SourceLine' => '701' - }, - '771261' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'cas', - 'type' => '4175' - }, - '2' => { - 'name' => 'crls', - 'type' => '4175' - }, - '3' => { - 'name' => 'type', - 'type' => '225461' - }, - '4' => { - 'name' => 'tl_flags', - 'type' => '145' - }, - '5' => { - 'name' => 'tl_vflags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_trust_mem', - 'Source' => 'verify-high2.c', - 'SourceLine' => '66' - }, - '771285' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'ca_dir', - 'type' => '110' - }, - '2' => { - 'name' => 'crl_dir', - 'type' => '110' - }, - '3' => { - 'name' => 'type', - 'type' => '225461' - }, - '4' => { - 'name' => 'tl_flags', - 'type' => '145' - }, - '5' => { - 'name' => 'tl_vflags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_trust_dir', - 'Source' => 'verify-high2.c', - 'SourceLine' => '443' - }, - '771319' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'clist', - 'type' => '1871309' - }, - '2' => { - 'name' => 'clist_size', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_cas', - 'Source' => 'verify-high.c', - 'SourceLine' => '272' - }, - '771410' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - }, - '1' => { - 'name' => 'fn', - 'type' => '146579' - }, - '2' => { - 'name' => 'userdata', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_privkey_set_pin_function', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '1316' - }, - '771432' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5142' - }, - '1' => { - 'name' => 'crt', - 'type' => '146359' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_export_x509', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '424' - }, - '771444' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'key', - 'type' => '760115' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_x509', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '708' - }, - '771456' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '147228' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_init', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '265' - }, - '771479' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5142' - }, - '1' => { - 'name' => 'crt', - 'type' => '146359' - }, - '2' => { - 'name' => 'ncrt', - 'type' => '21238' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_import_x509_list', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '109' - }, - '771503' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'type' => '211' - }, - '3' => { - 'name' => 'san_size', - 'type' => '7280' - }, - '4' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject_alt_name', - 'Source' => 'x509.c', - 'SourceLine' => '1473' - }, - '771515' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '75' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '4' => { - 'name' => 'buf', - 'type' => '211' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_dn_by_oid', - 'Source' => 'x509.c', - 'SourceLine' => '613' - }, - '771526' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '2139429' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_init', - 'Source' => 'ocsp.c', - 'SourceLine' => '109' - }, - '771537' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_import', - 'Source' => 'ocsp.c', - 'SourceLine' => '225' - }, - '771548' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'crt', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_check_crt', - 'Source' => 'ocsp.c', - 'SourceLine' => '1278' - }, - '771560' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'issuer', - 'type' => '144886' - }, - '2' => { - 'name' => 'verify', - 'type' => '21238' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_verify_direct', - 'Source' => 'ocsp.c', - 'SourceLine' => '2076' - }, - '771571' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_ocsp_resp_deinit', - 'Source' => 'ocsp.c', - 'SourceLine' => '147' - }, - '771605' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '754444' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '10' => { - 'name' => 'revocation_reason', - 'offset' => '32', - 'type' => '21238' - }, - '2' => { - 'name' => 'digest', - 'type' => '488340' - }, - '3' => { - 'name' => 'issuer_name_hash', - 'type' => '4233' - }, - '4' => { - 'name' => 'issuer_key_hash', - 'type' => '4233' - }, - '5' => { - 'name' => 'serial_number', - 'type' => '4233' - }, - '6' => { - 'name' => 'cert_status', - 'offset' => '0', - 'type' => '21238' - }, - '7' => { - 'name' => 'this_update', - 'offset' => '8', - 'type' => '4272' - }, - '8' => { - 'name' => 'next_update', - 'offset' => '16', - 'type' => '4272' - }, - '9' => { - 'name' => 'revocation_time', - 'offset' => '24', - 'type' => '4272' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_single', - 'Source' => 'ocsp.c', - 'SourceLine' => '1387' - }, - '771651' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '147012' - }, - '1' => { - 'name' => 'cert_list', - 'type' => '146359' - }, - '2' => { - 'name' => 'cert_list_size', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '12677' - }, - '4' => { - 'name' => 'elements', - 'type' => '145' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - }, - '6' => { - 'name' => 'voutput', - 'offset' => '0', - 'type' => '21238' - }, - '7' => { - 'name' => 'func', - 'offset' => '8', - 'type' => '1873276' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_verify_crt2', - 'Source' => 'verify-high.c', - 'SourceLine' => '1218' - }, - '771686' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5142' - }, - '1' => { - 'name' => 'crt', - 'type' => '144886' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_import_x509', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '48' - }, - '771722' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_x509_raw', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '1201' - }, - '771745' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_url', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '1256' - }, - '771768' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_url_is_supported', - 'Source' => 'urls.c', - 'SourceLine' => '44' - }, - '771780' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'fn', - 'type' => '146579' - }, - '2' => { - 'name' => 'userdata', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_set_pin_function', - 'Source' => 'x509.c', - 'SourceLine' => '3773' - }, - '771791' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_import_url', - 'Source' => 'x509.c', - 'SourceLine' => '3800' - }, - '771802' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'issuer', - 'type' => '144886' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_check_issuer', - 'Source' => 'verify.c', - 'SourceLine' => '822' - }, - '797725' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'do_send_supplemental', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_supplemental_send', - 'Source' => 'gnutls_supplemental.c', - 'SourceLine' => '315' - }, - '797784' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'do_recv_supplemental', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_supplemental_recv', - 'Source' => 'gnutls_supplemental.c', - 'SourceLine' => '299' - }, - '797843' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - }, - '1' => { - 'name' => 'type', - 'type' => '788535' - }, - '2' => { - 'name' => 'recv_func', - 'type' => '789786' - }, - '3' => { - 'name' => 'send_func', - 'type' => '789798' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_supplemental_register', - 'Source' => 'gnutls_supplemental.c', - 'SourceLine' => '269' - }, - '799430' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '788535' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_supplemental_get_name', - 'Source' => 'gnutls_supplemental.c', - 'SourceLine' => '73' - }, - '812830' => { - 'Header' => 'crypto.h', - 'Return' => '1', - 'ShortName' => 'gnutls_rnd_refresh', - 'Source' => 'random.c', - 'SourceLine' => '99' - }, - '812883' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'level', - 'type' => '78954' - }, - '1' => { - 'name' => 'data', - 'type' => '211' - }, - '2' => { - 'name' => 'len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_rnd', - 'Source' => 'random.c', - 'SourceLine' => '82' - }, - '826450' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818775' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_aead_cipher_deinit', - 'Source' => 'crypto-api.c', - 'SourceLine' => '787' - }, - '826568' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818775' - }, - '1' => { - 'name' => 'nonce', - 'type' => '318' - }, - '2' => { - 'name' => 'nonce_len', - 'type' => '52' - }, - '3' => { - 'name' => 'auth', - 'type' => '318' - }, - '4' => { - 'name' => 'auth_len', - 'type' => '52' - }, - '5' => { - 'name' => 'tag_size', - 'type' => '52' - }, - '6' => { - 'name' => 'ptext', - 'offset' => '0', - 'type' => '318' - }, - '7' => { - 'name' => 'ptext_len', - 'offset' => '8', - 'type' => '52' - }, - '8' => { - 'name' => 'ctext', - 'offset' => '16', - 'type' => '211' - }, - '9' => { - 'name' => 'ctext_len', - 'offset' => '24', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_aead_cipher_encrypt', - 'Source' => 'crypto-api.c', - 'SourceLine' => '745' - }, - '827238' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818775' - }, - '1' => { - 'name' => 'nonce', - 'type' => '318' - }, - '2' => { - 'name' => 'nonce_len', - 'type' => '52' - }, - '3' => { - 'name' => 'auth', - 'type' => '318' - }, - '4' => { - 'name' => 'auth_len', - 'type' => '52' - }, - '5' => { - 'name' => 'tag_size', - 'type' => '52' - }, - '6' => { - 'name' => 'ctext', - 'offset' => '0', - 'type' => '318' - }, - '7' => { - 'name' => 'ctext_len', - 'offset' => '8', - 'type' => '52' - }, - '8' => { - 'name' => 'ptext', - 'offset' => '16', - 'type' => '211' - }, - '9' => { - 'name' => 'ptext_len', - 'offset' => '24', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_aead_cipher_decrypt', - 'Source' => 'crypto-api.c', - 'SourceLine' => '688' - }, - '827921' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '828214' - }, - '1' => { - 'name' => 'cipher', - 'type' => '2029' - }, - '2' => { - 'name' => 'key', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_aead_cipher_init', - 'Source' => 'crypto-api.c', - 'SourceLine' => '641' - }, - '828220' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4233' - }, - '1' => { - 'name' => 'key_size', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_key_generate', - 'Source' => 'crypto-api.c', - 'SourceLine' => '591' - }, - '828539' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2391' - }, - '1' => { - 'name' => 'ptext', - 'type' => '318' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - }, - '3' => { - 'name' => 'digest', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hash_fast', - 'Source' => 'crypto-api.c', - 'SourceLine' => '572' - }, - '828680' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2391' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hash_get_len', - 'Source' => 'crypto-api.c', - 'SourceLine' => '552' - }, - '828786' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818819' - }, - '1' => { - 'name' => 'digest', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hash_deinit', - 'Source' => 'crypto-api.c', - 'SourceLine' => '535' - }, - '828897' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818819' - }, - '1' => { - 'name' => 'digest', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hash_output', - 'Source' => 'crypto-api.c', - 'SourceLine' => '520' - }, - '829030' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818819' - }, - '1' => { - 'name' => 'ptext', - 'type' => '318' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hash', - 'Source' => 'crypto-api.c', - 'SourceLine' => '505' - }, - '829170' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'dig', - 'type' => '829346' - }, - '1' => { - 'name' => 'algorithm', - 'type' => '2391' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hash_init', - 'Source' => 'crypto-api.c', - 'SourceLine' => '469' - }, - '829352' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2305' - }, - '1' => { - 'name' => 'key', - 'type' => '318' - }, - '2' => { - 'name' => 'keylen', - 'type' => '52' - }, - '3' => { - 'name' => 'ptext', - 'type' => '318' - }, - '4' => { - 'name' => 'ptext_len', - 'type' => '52' - }, - '5' => { - 'name' => 'digest', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hmac_fast', - 'Source' => 'crypto-api.c', - 'SourceLine' => '444' - }, - '829539' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2305' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hmac_get_len', - 'Source' => 'crypto-api.c', - 'SourceLine' => '422' - }, - '829645' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818841' - }, - '1' => { - 'name' => 'digest', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hmac_deinit', - 'Source' => 'crypto-api.c', - 'SourceLine' => '405' - }, - '829756' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818841' - }, - '1' => { - 'name' => 'digest', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hmac_output', - 'Source' => 'crypto-api.c', - 'SourceLine' => '390' - }, - '829875' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818841' - }, - '1' => { - 'name' => 'ptext', - 'type' => '318' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hmac', - 'Source' => 'crypto-api.c', - 'SourceLine' => '375' - }, - '830015' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818841' - }, - '1' => { - 'name' => 'nonce', - 'type' => '318' - }, - '2' => { - 'name' => 'nonce_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hmac_set_nonce', - 'Source' => 'crypto-api.c', - 'SourceLine' => '356' - }, - '830179' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'dig', - 'type' => '830406' - }, - '1' => { - 'name' => 'algorithm', - 'type' => '2305' - }, - '2' => { - 'name' => 'key', - 'type' => '318' - }, - '3' => { - 'name' => 'keylen', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hmac_init', - 'Source' => 'crypto-api.c', - 'SourceLine' => '321' - }, - '830412' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818721' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_cipher_deinit', - 'Source' => 'crypto-api.c', - 'SourceLine' => '288' - }, - '830607' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818721' - }, - '1' => { - 'name' => 'ctext', - 'type' => '318' - }, - '2' => { - 'name' => 'ctext_len', - 'type' => '52' - }, - '3' => { - 'name' => 'ptext', - 'type' => '211' - }, - '4' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_decrypt2', - 'Source' => 'crypto-api.c', - 'SourceLine' => '264' - }, - '830910' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818721' - }, - '1' => { - 'name' => 'ptext', - 'type' => '318' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - }, - '3' => { - 'name' => 'ctext', - 'type' => '211' - }, - '4' => { - 'name' => 'ctext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_encrypt2', - 'Source' => 'crypto-api.c', - 'SourceLine' => '233' - }, - '831135' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818721' - }, - '1' => { - 'name' => 'ctext', - 'type' => '211' - }, - '2' => { - 'name' => 'ctext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_decrypt', - 'Source' => 'crypto-api.c', - 'SourceLine' => '202' - }, - '831436' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818721' - }, - '1' => { - 'name' => 'ptext', - 'type' => '211' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_encrypt', - 'Source' => 'crypto-api.c', - 'SourceLine' => '177' - }, - '831631' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818721' - }, - '1' => { - 'name' => 'iv', - 'type' => '211' - }, - '2' => { - 'name' => 'ivlen', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_cipher_set_iv', - 'Source' => 'crypto-api.c', - 'SourceLine' => '153' - }, - '831921' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818721' - }, - '1' => { - 'name' => 'ptext', - 'type' => '318' - }, - '2' => { - 'name' => 'ptext_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_add_auth', - 'Source' => 'crypto-api.c', - 'SourceLine' => '128' - }, - '832215' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '818721' - }, - '1' => { - 'name' => 'tag', - 'type' => '211' - }, - '2' => { - 'name' => 'tag_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_tag', - 'Source' => 'crypto-api.c', - 'SourceLine' => '100' - }, - '832509' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '832873' - }, - '1' => { - 'name' => 'cipher', - 'type' => '2029' - }, - '2' => { - 'name' => 'key', - 'type' => '4175' - }, - '3' => { - 'name' => 'iv', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_init', - 'Source' => 'crypto-api.c', - 'SourceLine' => '55' - }, - '849083' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_verify_params', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '1361' - }, - '849365' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_status', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '1338' - }, - '850536' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'ciphertext', - 'type' => '4175' - }, - '3' => { - 'name' => 'plaintext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_decrypt_data', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '1147' - }, - '851870' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'key', - 'type' => '852159' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_openpgp', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '924' - }, - '852165' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '839799' - }, - '3' => { - 'name' => 'keyid', - 'type' => '5023' - }, - '4' => { - 'name' => 'password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_openpgp_raw', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '865' - }, - '852609' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'key', - 'type' => '146185' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_openpgp', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '802' - }, - '853217' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'algo', - 'type' => '2768' - }, - '2' => { - 'name' => 'bits', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_generate', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '755' - }, - '854283' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'userdata', - 'type' => '211' - }, - '2' => { - 'name' => 'sign_fn', - 'type' => '228412' - }, - '3' => { - 'name' => 'decrypt_fn', - 'type' => '228459' - }, - '4' => { - 'name' => 'deinit_fn', - 'type' => '228470' - }, - '5' => { - 'name' => 'info_fn', - 'type' => '228503' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_ext3', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '602' - }, - '854712' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'pk', - 'type' => '2768' - }, - '2' => { - 'name' => 'userdata', - 'type' => '211' - }, - '3' => { - 'name' => 'sign_fn', - 'type' => '228412' - }, - '4' => { - 'name' => 'decrypt_fn', - 'type' => '228459' - }, - '5' => { - 'name' => 'deinit_fn', - 'type' => '228470' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_ext2', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '538' - }, - '854825' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'pk', - 'type' => '2768' - }, - '2' => { - 'name' => 'userdata', - 'type' => '211' - }, - '3' => { - 'name' => 'sign_func', - 'type' => '228412' - }, - '4' => { - 'name' => 'decrypt_func', - 'type' => '228459' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_ext', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '499' - }, - '855009' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'key', - 'type' => '855298' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_pkcs11', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '452' - }, - '855390' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'key', - 'type' => '146252' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_pkcs11', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '351' - }, - '857101' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144851' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '146313', - 'ShortName' => 'gnutls_privkey_get_type', - 'Source' => 'gnutls_privkey.c', - 'SourceLine' => '59' - }, - '858398' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146252' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_status', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '358' - }, - '858410' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '855298' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_init', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '86' - }, - '858422' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146252' - }, - '1' => { - 'name' => 'fn', - 'type' => '146579' - }, - '2' => { - 'name' => 'userdata', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_privkey_set_pin_function', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '1213' - }, - '858434' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '146252' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_import_url', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '393' - }, - '858446' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146252' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_privkey_deinit', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '132' - }, - '858480' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'srk_password', - 'type' => '110' - }, - '3' => { - 'name' => 'key_password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_tpm_url', - 'Source' => 'tpm.c', - 'SourceLine' => '970' - }, - '858504' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'privkey', - 'type' => '144874' - }, - '1' => { - 'name' => 'fn', - 'type' => '146579' - }, - '2' => { - 'name' => 'userdata', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_privkey_set_pin_function', - 'Source' => 'privkey.c', - 'SourceLine' => '1854' - }, - '858516' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import2', - 'Source' => 'privkey.c', - 'SourceLine' => '687' - }, - '858604' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '852159' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_init', - 'Source' => 'privkey.c', - 'SourceLine' => '44' - }, - '858626' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_deinit', - 'Source' => 'privkey.c', - 'SourceLine' => '59' - }, - '858637' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '839799' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_import', - 'Source' => 'privkey.c', - 'SourceLine' => '170' - }, - '858648' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'keyid', - 'type' => '5023' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_set_preferred_key_id', - 'Source' => 'privkey.c', - 'SourceLine' => '1252' - }, - '858660' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3626' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_preferred_key_id' - }, - '858672' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'keyid', - 'type' => '5023' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_idx' - }, - '858683' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'bits', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_pk_algorithm' - }, - '858694' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146185' - }, - '1' => { - 'name' => 'bits', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_pk_algorithm' - }, - '858705' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - }, - '1' => { - 'name' => 'algo', - 'type' => '2768' - }, - '2' => { - 'name' => 'bits', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_generate', - 'Source' => 'privkey.c', - 'SourceLine' => '1506' - }, - '858717' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '144874' - }, - '1' => { - 'name' => 'src', - 'type' => '144874' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_cpy', - 'Source' => 'privkey.c', - 'SourceLine' => '96' - }, - '858729' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '144874' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_get_pk_algorithm', - 'Source' => 'privkey.c', - 'SourceLine' => '1126' - }, - '858741' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '146252' - }, - '1' => { - 'name' => 'src', - 'type' => '146252' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_cpy', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '120' - }, - '858786' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pubkey_deinit', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '134' - }, - '858808' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146252' - }, - '1' => { - 'name' => 'bits', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_get_pk_algorithm', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '153' - }, - '873433' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5142' - }, - '1' => { - 'name' => 'crt', - 'type' => '873738' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_export_openpgp', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '466' - }, - '874049' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5142' - }, - '1' => { - 'name' => 'cert', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '839799' - }, - '3' => { - 'name' => 'keyid', - 'type' => '3626' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_import_openpgp_raw', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '365' - }, - '874660' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5142' - }, - '1' => { - 'name' => 'crt', - 'type' => '146118' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_import_openpgp', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '290' - }, - '875288' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5142' - }, - '1' => { - 'name' => 'cert', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_import_x509_raw', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '239' - }, - '875787' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcerts', - 'type' => '5142' - }, - '1' => { - 'name' => 'pcert_max', - 'type' => '21238' - }, - '2' => { - 'name' => 'data', - 'type' => '4175' - }, - '3' => { - 'name' => 'format', - 'type' => '225461' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_list_import_x509_raw', - 'Source' => 'gnutls_pcert.c', - 'SourceLine' => '175' - }, - '877345' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '873738' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_init', - 'Source' => 'pgp.c', - 'SourceLine' => '43' - }, - '877356' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '839799' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_import', - 'Source' => 'pgp.c', - 'SourceLine' => '84' - }, - '877367' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_deinit', - 'Source' => 'pgp.c', - 'SourceLine' => '58' - }, - '877411' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'keyid', - 'type' => '5023' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_set_preferred_key_id', - 'Source' => 'pgp.c', - 'SourceLine' => '1666' - }, - '877422' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'format', - 'type' => '839799' - }, - '2' => { - 'name' => 'output_data', - 'type' => '211' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_export', - 'Source' => 'pgp.c', - 'SourceLine' => '230' - }, - '877433' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '905354' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_init', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '113' - }, - '877444' => { - 'Header' => 'abstract.h', - 'Line' => '98', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'crt', - 'type' => '146118' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pubkey_import_openpgp' - }, - '877455' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'certs', - 'type' => '146359' - }, - '1' => { - 'name' => 'cert_max', - 'type' => '21238' - }, - '2' => { - 'name' => 'data', - 'type' => '4175' - }, - '3' => { - 'name' => 'format', - 'type' => '225461' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_list_import', - 'Source' => 'x509.c', - 'SourceLine' => '3295' - }, - '877488' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_export2', - 'Source' => 'x509.c', - 'SourceLine' => '2608' - }, - '877499' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'crt', - 'type' => '144886' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_x509', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '157' - }, - '892963' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_verify_params', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '2097' - }, - '893105' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '4199' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_x509_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '2054' - }, - '893501' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'fn', - 'type' => '146579' - }, - '2' => { - 'name' => 'userdata', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pubkey_set_pin_function', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '2031' - }, - '896306' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'plaintext', - 'type' => '4175' - }, - '3' => { - 'name' => 'ciphertext', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_encrypt_data', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1701' - }, - '897294' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'p', - 'type' => '4175' - }, - '2' => { - 'name' => 'q', - 'type' => '4175' - }, - '3' => { - 'name' => 'g', - 'type' => '4175' - }, - '4' => { - 'name' => 'y', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_dsa_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1530' - }, - '897376' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'parameters', - 'type' => '4175' - }, - '2' => { - 'name' => 'ecpoint', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_ecc_x962', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1461' - }, - '897768' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'curve', - 'type' => '2982' - }, - '2' => { - 'name' => 'x', - 'type' => '4175' - }, - '3' => { - 'name' => 'y', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_ecc_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1405' - }, - '898116' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'm', - 'type' => '4175' - }, - '2' => { - 'name' => 'e', - 'type' => '4175' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_rsa_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1355' - }, - '898178' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_url', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1311' - }, - '898798' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'usage', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_set_key_usage', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1226' - }, - '898861' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'key', - 'type' => '4199' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_pubkey', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1187' - }, - '899050' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'key', - 'type' => '4199' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_pubkey', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1149' - }, - '899239' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '225461' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1067' - }, - '899838' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'parameters', - 'type' => '4233' - }, - '2' => { - 'name' => 'ecpoint', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export_ecc_x962', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '1015' - }, - '900350' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'curve', - 'type' => '485763' - }, - '2' => { - 'name' => 'x', - 'type' => '4233' - }, - '3' => { - 'name' => 'y', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export_ecc_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '960' - }, - '900643' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'p', - 'type' => '4233' - }, - '2' => { - 'name' => 'q', - 'type' => '4233' - }, - '3' => { - 'name' => 'g', - 'type' => '4233' - }, - '4' => { - 'name' => 'y', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export_dsa_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '881' - }, - '901254' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'm', - 'type' => '4233' - }, - '2' => { - 'name' => 'e', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export_rsa_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '826' - }, - '901525' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3626' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_get_key_id', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '787' - }, - '901733' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'out', - 'type' => '4233' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export2', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '721' - }, - '902198' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'format', - 'type' => '225461' - }, - '2' => { - 'name' => 'output_data', - 'type' => '211' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '655' - }, - '902686' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '4199' - }, - '1' => { - 'name' => 'data', - 'type' => '4175' - }, - '2' => { - 'name' => 'format', - 'type' => '839799' - }, - '3' => { - 'name' => 'keyid', - 'type' => '5023' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_openpgp_raw', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '586' - }, - '903124' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3626' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7280' - }, - '4' => { - 'name' => 'subkey', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_get_openpgp_key_id', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '517' - }, - '903679' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'obj', - 'type' => '883485' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_pkcs11', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '328' - }, - '904195' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'hash', - 'type' => '488340' - }, - '2' => { - 'name' => 'mand', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_get_preferred_hash_algorithm', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '269' - }, - '904388' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'pkey', - 'type' => '144851' - }, - '2' => { - 'name' => 'usage', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_privkey', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '236' - }, - '904590' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4199' - }, - '1' => { - 'name' => 'crq', - 'type' => '882186' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_x509_crq', - 'Source' => 'gnutls_pubkey.c', - 'SourceLine' => '196' - }, - '908026' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2920' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_sign_is_secure', - 'Source' => 'sign.c', - 'SourceLine' => '137' - }, - '908104' => { - 'Header' => 'pkcs11.h', - 'Line' => '88', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1157105' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_init' - }, - '908115' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - }, - '1' => { - 'name' => 'fn', - 'type' => '146579' - }, - '2' => { - 'name' => 'userdata', - 'type' => '211' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_set_pin_function', - 'Source' => 'pkcs11.c', - 'SourceLine' => '1017' - }, - '908126' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_import_url' - }, - '908137' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_deinit', - 'Source' => 'pkcs11.c', - 'SourceLine' => '1033' - }, - '908159' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '4199' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'srk_password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_tpm_url', - 'Source' => 'tpm.c', - 'SourceLine' => '1233' - }, - '908181' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'usage', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_key_usage', - 'Source' => 'crq.c', - 'SourceLine' => '2180' - }, - '908193' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'usage', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_key_usage', - 'Source' => 'x509_write.c', - 'SourceLine' => '499' - }, - '908406' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '144886' - }, - '1' => { - 'name' => 'pkcs11_crt', - 'type' => '883485' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_import_pkcs11', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3113' - }, - '908418' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '21238' - }, - '2' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_key_usage' - }, - '908430' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '883485' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '883691', - 'ShortName' => 'gnutls_pkcs11_obj_get_type', - 'Source' => 'pkcs11.c', - 'SourceLine' => '2286' - }, - '908464' => { - 'Header' => 'x509.h', - 'Line' => '1232', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'bits', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crq_get_pk_algorithm' - }, - '908476' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '882186' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '21238' - }, - '2' => { - 'name' => 'critical', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_key_usage', - 'Source' => 'crq.c', - 'SourceLine' => '1639' - }, - '908500' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '144886' - }, - '1' => { - 'name' => 'bits', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_pk_algorithm' - }, - '908524' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3626' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_preferred_key_id' - }, - '908535' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'keyid', - 'type' => '5023' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_idx' - }, - '908546' => { - 'Header' => 'openpgp.h', - 'Line' => '136', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'keyid', - 'type' => '3626' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_id' - }, - '908557' => { - 'Header' => 'openpgp.h', - 'Line' => '139', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'key_usage', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_usage' - }, - '908568' => { - 'Header' => 'openpgp.h', - 'Line' => '126', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'bits', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_pk_algorithm' - }, - '908590' => { - 'Header' => 'openpgp.h', - 'Line' => '100', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'bits', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_pk_algorithm' - }, - '908601' => { - 'Header' => 'openpgp.h', - 'Line' => '108', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3626' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_key_id' - }, - '908612' => { - 'Header' => 'openpgp.h', - 'Line' => '87', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '21238' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_key_usage' - }, - '908623' => { - 'Header' => 'openpgp.h', - 'Line' => '89', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '146118' - }, - '1' => { - 'name' => 'fpr', - 'type' => '211' - }, - '2' => { - 'name' => 'fprlen', - 'type' => '7280' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_fingerprint' - }, - '921657' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'init', - 'type' => '516940' - }, - '1' => { - 'name' => 'deinit', - 'type' => '517003' - }, - '2' => { - 'name' => 'lock', - 'type' => '516979' - }, - '3' => { - 'name' => 'unlock', - 'type' => '516991' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_mutex', - 'Source' => 'locks.c', - 'SourceLine' => '51' - }, - '934712' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_record_get_discarded', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '1116' - }, - '934761' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'prestate', - 'type' => '934890' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dtls_prestate_set', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '1082' - }, - '934896' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4233' - }, - '1' => { - 'name' => 'client_data', - 'type' => '211' - }, - '2' => { - 'name' => 'client_data_size', - 'type' => '52' - }, - '3' => { - 'name' => '_msg', - 'type' => '211' - }, - '4' => { - 'name' => 'msg_size', - 'type' => '52' - }, - '5' => { - 'name' => 'prestate', - 'type' => '934890' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dtls_cookie_verify', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '1003' - }, - '935728' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4233' - }, - '1' => { - 'name' => 'client_data', - 'type' => '211' - }, - '2' => { - 'name' => 'client_data_size', - 'type' => '52' - }, - '3' => { - 'name' => 'prestate', - 'type' => '934890' - }, - '4' => { - 'name' => 'ptr', - 'type' => '3086' - }, - '5' => { - 'name' => 'push_func', - 'type' => '4667' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dtls_cookie_send', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '894' - }, - '936391' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_dtls_get_timeout', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '842' - }, - '936608' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'mtu', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dtls_set_data_mtu', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '792' - }, - '936839' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_overhead_size', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '729' - }, - '937204' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'version', - 'type' => '2662' - }, - '1' => { - 'name' => 'cipher', - 'type' => '2029' - }, - '2' => { - 'name' => 'mac', - 'type' => '2305' - }, - '3' => { - 'name' => 'comp', - 'type' => '2441' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_est_record_overhead_size', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '661' - }, - '937764' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'mtu', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dtls_set_mtu', - 'Source' => 'gnutls_dtls.c', - 'SourceLine' => '605' - }, - '957372' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'errno_func', - 'type' => '4797' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_errno_function', - 'Source' => 'system_override.c', - 'SourceLine' => '185' - }, - '957484' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'push_func', - 'type' => '4667' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_push_function', - 'Source' => 'system_override.c', - 'SourceLine' => '140' - }, - '957540' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'func', - 'type' => '4710' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_pull_timeout_function', - 'Source' => 'system_override.c', - 'SourceLine' => '116' - }, - '957596' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'pull_func', - 'type' => '4624' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_pull_function', - 'Source' => 'system_override.c', - 'SourceLine' => '79' - }, - '957652' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3098' - }, - '1' => { - 'name' => 'err', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_errno', - 'Source' => 'system_override.c', - 'SourceLine' => '59' - }, - '96167' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 's1', - 'type' => '318' - }, - '1' => { - 'name' => 's2', - 'type' => '318' - }, - '2' => { - 'name' => 'n', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_memcmp', - 'Source' => 'safe-memfuncs.c', - 'SourceLine' => '70' - }, - '971322' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2391' - }, - '1' => { - 'name' => 'priority', - 'type' => '75' - }, - '2' => { - 'name' => 'init', - 'type' => '5972' - }, - '3' => { - 'name' => 'hash', - 'type' => '6009' - }, - '4' => { - 'name' => 'output', - 'type' => '6020' - }, - '5' => { - 'name' => 'deinit', - 'type' => '6031' - }, - '6' => { - 'name' => 'hash_fast', - 'offset' => '0', - 'type' => '6042' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_crypto_register_digest', - 'Source' => 'crypto-backend.c', - 'SourceLine' => '463' - }, - '971652' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2305' - }, - '1' => { - 'name' => 'priority', - 'type' => '75' - }, - '2' => { - 'name' => 'init', - 'type' => '5782' - }, - '3' => { - 'name' => 'setkey', - 'type' => '5819' - }, - '4' => { - 'name' => 'setnonce', - 'type' => '5830' - }, - '5' => { - 'name' => 'hash', - 'type' => '5841' - }, - '6' => { - 'name' => 'output', - 'offset' => '0', - 'type' => '5852' - }, - '7' => { - 'name' => 'deinit', - 'offset' => '8', - 'type' => '5894' - }, - '8' => { - 'name' => 'hash_fast', - 'offset' => '16', - 'type' => '5905' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_crypto_register_mac', - 'Source' => 'crypto-backend.c', - 'SourceLine' => '417' - }, - '972635' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2029' - }, - '1' => { - 'name' => 'priority', - 'type' => '75' - }, - '2' => { - 'name' => 'init', - 'type' => '5476' - }, - '3' => { - 'name' => 'setkey', - 'type' => '5518' - }, - '4' => { - 'name' => 'aead_encrypt', - 'type' => '5683' - }, - '5' => { - 'name' => 'aead_decrypt', - 'type' => '5760' - }, - '6' => { - 'name' => 'deinit', - 'offset' => '0', - 'type' => '5771' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_crypto_register_aead_cipher', - 'Source' => 'crypto-backend.c', - 'SourceLine' => '269' - }, - '972965' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2029' - }, - '1' => { - 'name' => 'priority', - 'type' => '75' - }, - '2' => { - 'name' => 'init', - 'type' => '5476' - }, - '3' => { - 'name' => 'setkey', - 'type' => '5518' - }, - '4' => { - 'name' => 'setiv', - 'type' => '5560' - }, - '5' => { - 'name' => 'encrypt', - 'type' => '5571' - }, - '6' => { - 'name' => 'decrypt', - 'offset' => '0', - 'type' => '5623' - }, - '7' => { - 'name' => 'deinit', - 'offset' => '8', - 'type' => '5771' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_crypto_register_cipher', - 'Source' => 'crypto-backend.c', - 'SourceLine' => '219' - }, - '988356' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '979800' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_deinit', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '793' - }, - '988420' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '979800' - }, - '1' => { - 'name' => 'verify', - 'type' => '979752' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_set_verify_func', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '781' - }, - '988479' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '979800' - }, - '1' => { - 'name' => 'cstore', - 'type' => '979694' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_set_store_commitment_func', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '757' - }, - '988538' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '979800' - }, - '1' => { - 'name' => 'store', - 'type' => '979641' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_set_store_func', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '736' - }, - '988597' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '988668' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_tdb_init', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '711' - }, - '988757' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'db_name', - 'type' => '110' - }, - '1' => { - 'name' => 'tdb', - 'type' => '979800' - }, - '2' => { - 'name' => 'host', - 'type' => '110' - }, - '3' => { - 'name' => 'service', - 'type' => '110' - }, - '4' => { - 'name' => 'hash_algo', - 'type' => '2391' - }, - '5' => { - 'name' => 'hash', - 'type' => '4175' - }, - '6' => { - 'name' => 'expiration', - 'offset' => '0', - 'type' => '252' - }, - '7' => { - 'name' => 'flags', - 'offset' => '8', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_store_commitment', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '636' - }, - '989456' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'db_name', - 'type' => '110' - }, - '1' => { - 'name' => 'tdb', - 'type' => '979800' - }, - '2' => { - 'name' => 'host', - 'type' => '110' - }, - '3' => { - 'name' => 'service', - 'type' => '110' - }, - '4' => { - 'name' => 'cert_type', - 'type' => '2712' - }, - '5' => { - 'name' => 'cert', - 'type' => '4175' - }, - '6' => { - 'name' => 'expiration', - 'offset' => '0', - 'type' => '252' - }, - '7' => { - 'name' => 'flags', - 'offset' => '8', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_store_pubkey', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '551' - }, - '995693' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'db_name', - 'type' => '110' - }, - '1' => { - 'name' => 'tdb', - 'type' => '979800' - }, - '2' => { - 'name' => 'host', - 'type' => '110' - }, - '3' => { - 'name' => 'service', - 'type' => '110' - }, - '4' => { - 'name' => 'cert_type', - 'type' => '2712' - }, - '5' => { - 'name' => 'cert', - 'type' => '4175' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_verify_stored_pubkey', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '107' - } - }, - 'SymbolVersion' => { - '_ITM_deregisterTMCloneTable' => 'writev@@GLIBC_2.2.5', - '_ITM_registerTMCloneTable' => 'writev@@GLIBC_2.2.5', - '_Jv_RegisterClasses' => 'writev@@GLIBC_2.2.5', - '__gmon_start__' => 'writev@@GLIBC_2.2.5', - '__gmpz_add' => 'writev@@GLIBC_2.2.5', - '__gmpz_add_ui' => 'writev@@GLIBC_2.2.5', - '__gmpz_cdiv_q' => 'writev@@GLIBC_2.2.5', - '__gmpz_clear' => 'writev@@GLIBC_2.2.5', - '__gmpz_cmp' => 'writev@@GLIBC_2.2.5', - '__gmpz_cmp_ui' => 'writev@@GLIBC_2.2.5', - '__gmpz_fdiv_r' => 'writev@@GLIBC_2.2.5', - '__gmpz_init' => 'writev@@GLIBC_2.2.5', - '__gmpz_invert' => 'writev@@GLIBC_2.2.5', - '__gmpz_mod' => 'writev@@GLIBC_2.2.5', - '__gmpz_mul' => 'writev@@GLIBC_2.2.5', - '__gmpz_mul_ui' => 'writev@@GLIBC_2.2.5', - '__gmpz_powm' => 'writev@@GLIBC_2.2.5', - '__gmpz_probab_prime_p' => 'writev@@GLIBC_2.2.5', - '__gmpz_set' => 'writev@@GLIBC_2.2.5', - '__gmpz_set_ui' => 'writev@@GLIBC_2.2.5', - '__gmpz_sizeinbase' => 'writev@@GLIBC_2.2.5', - '__gmpz_sub' => 'writev@@GLIBC_2.2.5', - '__gmpz_sub_ui' => 'writev@@GLIBC_2.2.5', - '_gnutls_bin2hex' => '_gnutls_bin2hex@@GNUTLS_PRIVATE_3_4', - '_gnutls_buffer_append_str' => '_gnutls_buffer_append_str@@GNUTLS_PRIVATE_3_4', - '_gnutls_buffer_init' => '_gnutls_buffer_init@@GNUTLS_PRIVATE_3_4', - '_gnutls_buffer_to_datum' => '_gnutls_buffer_to_datum@@GNUTLS_PRIVATE_3_4', - '_gnutls_encode_ber_rs_raw' => '_gnutls_encode_ber_rs_raw@@GNUTLS_FIPS140_3_4', - '_gnutls_global_init_skip' => '_gnutls_global_init_skip@@GNUTLS_3_4', - '_gnutls_hello_set_default_version' => '_gnutls_hello_set_default_version@@GNUTLS_PRIVATE_3_4', - '_gnutls_lib_simulate_error' => '_gnutls_lib_simulate_error@@GNUTLS_PRIVATE_3_4', - '_gnutls_log' => '_gnutls_log@@GNUTLS_PRIVATE_3_4', - '_gnutls_log_level' => '_gnutls_log_level@@GNUTLS_PRIVATE_3_4', - '_gnutls_mac_to_entry' => '_gnutls_mac_to_entry@@GNUTLS_PRIVATE_3_4', - '_gnutls_mpi_log' => '_gnutls_mpi_log@@GNUTLS_PRIVATE_3_4', - '_gnutls_mpi_ops' => '_gnutls_mpi_ops@@GNUTLS_PRIVATE_3_4', - '_gnutls_pkcs12_string_to_key' => '_gnutls_pkcs12_string_to_key@@GNUTLS_PRIVATE_3_4', - '_gnutls_record_set_default_version' => '_gnutls_record_set_default_version@@GNUTLS_PRIVATE_3_4', - '_gnutls_rsa_pms_set_version' => '_gnutls_rsa_pms_set_version@@GNUTLS_PRIVATE_3_4', - 'deflate' => 'writev@@GLIBC_2.2.5', - 'deflateEnd' => 'writev@@GLIBC_2.2.5', - 'deflateInit2_' => 'writev@@GLIBC_2.2.5', - 'dlclose' => 'writev@@GLIBC_2.2.5', - 'dlopen' => 'writev@@GLIBC_2.2.5', - 'dlsym' => 'writev@@GLIBC_2.2.5', - 'gnutls_aead_cipher_decrypt' => 'gnutls_aead_cipher_decrypt@@GNUTLS_3_4', - 'gnutls_aead_cipher_deinit' => 'gnutls_aead_cipher_deinit@@GNUTLS_3_4', - 'gnutls_aead_cipher_encrypt' => 'gnutls_aead_cipher_encrypt@@GNUTLS_3_4', - 'gnutls_aead_cipher_init' => 'gnutls_aead_cipher_init@@GNUTLS_3_4', - 'gnutls_alert_get' => 'gnutls_alert_get@@GNUTLS_3_4', - 'gnutls_alert_get_name' => 'gnutls_alert_get_name@@GNUTLS_3_4', - 'gnutls_alert_get_strname' => 'gnutls_alert_get_strname@@GNUTLS_3_4', - 'gnutls_alert_send' => 'gnutls_alert_send@@GNUTLS_3_4', - 'gnutls_alert_send_appropriate' => 'gnutls_alert_send_appropriate@@GNUTLS_3_4', - 'gnutls_alpn_get_selected_protocol' => 'gnutls_alpn_get_selected_protocol@@GNUTLS_3_4', - 'gnutls_alpn_set_protocols' => 'gnutls_alpn_set_protocols@@GNUTLS_3_4', - 'gnutls_anon_allocate_client_credentials' => 'gnutls_anon_allocate_client_credentials@@GNUTLS_3_4', - 'gnutls_anon_allocate_server_credentials' => 'gnutls_anon_allocate_server_credentials@@GNUTLS_3_4', - 'gnutls_anon_free_client_credentials' => 'gnutls_anon_free_client_credentials@@GNUTLS_3_4', - 'gnutls_anon_free_server_credentials' => 'gnutls_anon_free_server_credentials@@GNUTLS_3_4', - 'gnutls_anon_set_params_function' => 'gnutls_anon_set_params_function@@GNUTLS_3_4', - 'gnutls_anon_set_server_dh_params' => 'gnutls_anon_set_server_dh_params@@GNUTLS_3_4', - 'gnutls_anon_set_server_params_function' => 'gnutls_anon_set_server_params_function@@GNUTLS_3_4', - 'gnutls_auth_client_get_type' => 'gnutls_auth_client_get_type@@GNUTLS_3_4', - 'gnutls_auth_get_type' => 'gnutls_auth_get_type@@GNUTLS_3_4', - 'gnutls_auth_server_get_type' => 'gnutls_auth_server_get_type@@GNUTLS_3_4', - 'gnutls_buffer_append_data' => 'gnutls_buffer_append_data@@GNUTLS_3_4', - 'gnutls_bye' => 'gnutls_bye@@GNUTLS_3_4', - 'gnutls_calloc' => 'gnutls_calloc@@GNUTLS_3_4', - 'gnutls_certificate_activation_time_peers' => 'gnutls_certificate_activation_time_peers@@GNUTLS_3_4', - 'gnutls_certificate_allocate_credentials' => 'gnutls_certificate_allocate_credentials@@GNUTLS_3_4', - 'gnutls_certificate_client_get_request_status' => 'gnutls_certificate_client_get_request_status@@GNUTLS_3_4', - 'gnutls_certificate_expiration_time_peers' => 'gnutls_certificate_expiration_time_peers@@GNUTLS_3_4', - 'gnutls_certificate_free_ca_names' => 'gnutls_certificate_free_ca_names@@GNUTLS_3_4', - 'gnutls_certificate_free_cas' => 'gnutls_certificate_free_cas@@GNUTLS_3_4', - 'gnutls_certificate_free_credentials' => 'gnutls_certificate_free_credentials@@GNUTLS_3_4', - 'gnutls_certificate_free_crls' => 'gnutls_certificate_free_crls@@GNUTLS_3_4', - 'gnutls_certificate_free_keys' => 'gnutls_certificate_free_keys@@GNUTLS_3_4', - 'gnutls_certificate_get_crt_raw' => 'gnutls_certificate_get_crt_raw@@GNUTLS_3_4', - 'gnutls_certificate_get_issuer' => 'gnutls_certificate_get_issuer@@GNUTLS_3_4', - 'gnutls_certificate_get_openpgp_crt' => 'gnutls_certificate_get_openpgp_crt@@GNUTLS_3_4', - 'gnutls_certificate_get_openpgp_key' => 'gnutls_certificate_get_openpgp_key@@GNUTLS_3_4', - 'gnutls_certificate_get_ours' => 'gnutls_certificate_get_ours@@GNUTLS_3_4', - 'gnutls_certificate_get_peers' => 'gnutls_certificate_get_peers@@GNUTLS_3_4', - 'gnutls_certificate_get_peers_subkey_id' => 'gnutls_certificate_get_peers_subkey_id@@GNUTLS_3_4', - 'gnutls_certificate_get_trust_list' => 'gnutls_certificate_get_trust_list@@GNUTLS_3_4', - 'gnutls_certificate_get_verify_flags' => 'gnutls_certificate_get_verify_flags@@GNUTLS_3_4', - 'gnutls_certificate_get_x509_crt' => 'gnutls_certificate_get_x509_crt@@GNUTLS_3_4', - 'gnutls_certificate_get_x509_key' => 'gnutls_certificate_get_x509_key@@GNUTLS_3_4', - 'gnutls_certificate_send_x509_rdn_sequence' => 'gnutls_certificate_send_x509_rdn_sequence@@GNUTLS_3_4', - 'gnutls_certificate_server_set_request' => 'gnutls_certificate_server_set_request@@GNUTLS_3_4', - 'gnutls_certificate_set_dh_params' => 'gnutls_certificate_set_dh_params@@GNUTLS_3_4', - 'gnutls_certificate_set_flags' => 'gnutls_certificate_set_flags@@GNUTLS_3_4', - 'gnutls_certificate_set_key' => 'gnutls_certificate_set_key@@GNUTLS_3_4', - 'gnutls_certificate_set_ocsp_status_request_file' => 'gnutls_certificate_set_ocsp_status_request_file@@GNUTLS_3_4', - 'gnutls_certificate_set_ocsp_status_request_function' => 'gnutls_certificate_set_ocsp_status_request_function@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key' => 'gnutls_certificate_set_openpgp_key@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_file' => 'gnutls_certificate_set_openpgp_key_file@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_file2' => 'gnutls_certificate_set_openpgp_key_file2@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_mem' => 'gnutls_certificate_set_openpgp_key_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_mem2' => 'gnutls_certificate_set_openpgp_key_mem2@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_keyring_file' => 'gnutls_certificate_set_openpgp_keyring_file@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_keyring_mem' => 'gnutls_certificate_set_openpgp_keyring_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_params_function' => 'gnutls_certificate_set_params_function@@GNUTLS_3_4', - 'gnutls_certificate_set_pin_function' => 'gnutls_certificate_set_pin_function@@GNUTLS_3_4', - 'gnutls_certificate_set_retrieve_function' => 'gnutls_certificate_set_retrieve_function@@GNUTLS_3_4', - 'gnutls_certificate_set_retrieve_function2' => 'gnutls_certificate_set_retrieve_function2@@GNUTLS_3_4', - 'gnutls_certificate_set_trust_list' => 'gnutls_certificate_set_trust_list@@GNUTLS_3_4', - 'gnutls_certificate_set_verify_flags' => 'gnutls_certificate_set_verify_flags@@GNUTLS_3_4', - 'gnutls_certificate_set_verify_function' => 'gnutls_certificate_set_verify_function@@GNUTLS_3_4', - 'gnutls_certificate_set_verify_limits' => 'gnutls_certificate_set_verify_limits@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_crl' => 'gnutls_certificate_set_x509_crl@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_crl_file' => 'gnutls_certificate_set_x509_crl_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_crl_mem' => 'gnutls_certificate_set_x509_crl_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key' => 'gnutls_certificate_set_x509_key@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_file' => 'gnutls_certificate_set_x509_key_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_file2' => 'gnutls_certificate_set_x509_key_file2@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_mem' => 'gnutls_certificate_set_x509_key_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_mem2' => 'gnutls_certificate_set_x509_key_mem2@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_simple_pkcs12_file' => 'gnutls_certificate_set_x509_simple_pkcs12_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_simple_pkcs12_mem' => 'gnutls_certificate_set_x509_simple_pkcs12_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_system_trust' => 'gnutls_certificate_set_x509_system_trust@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust' => 'gnutls_certificate_set_x509_trust@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust_dir' => 'gnutls_certificate_set_x509_trust_dir@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust_file' => 'gnutls_certificate_set_x509_trust_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust_mem' => 'gnutls_certificate_set_x509_trust_mem@@GNUTLS_3_4', - 'gnutls_certificate_type_get' => 'gnutls_certificate_type_get@@GNUTLS_3_4', - 'gnutls_certificate_type_get_id' => 'gnutls_certificate_type_get_id@@GNUTLS_3_4', - 'gnutls_certificate_type_get_name' => 'gnutls_certificate_type_get_name@@GNUTLS_3_4', - 'gnutls_certificate_type_list' => 'gnutls_certificate_type_list@@GNUTLS_3_4', - 'gnutls_certificate_verification_status_print' => 'gnutls_certificate_verification_status_print@@GNUTLS_3_4', - 'gnutls_certificate_verify_peers' => 'gnutls_certificate_verify_peers@@GNUTLS_3_4', - 'gnutls_certificate_verify_peers2' => 'gnutls_certificate_verify_peers2@@GNUTLS_3_4', - 'gnutls_certificate_verify_peers3' => 'gnutls_certificate_verify_peers3@@GNUTLS_3_4', - 'gnutls_check_version' => 'gnutls_check_version@@GNUTLS_3_4', - 'gnutls_cipher_add_auth' => 'gnutls_cipher_add_auth@@GNUTLS_3_4', - 'gnutls_cipher_decrypt' => 'gnutls_cipher_decrypt@@GNUTLS_3_4', - 'gnutls_cipher_decrypt2' => 'gnutls_cipher_decrypt2@@GNUTLS_3_4', - 'gnutls_cipher_deinit' => 'gnutls_cipher_deinit@@GNUTLS_3_4', - 'gnutls_cipher_encrypt' => 'gnutls_cipher_encrypt@@GNUTLS_3_4', - 'gnutls_cipher_encrypt2' => 'gnutls_cipher_encrypt2@@GNUTLS_3_4', - 'gnutls_cipher_get' => 'gnutls_cipher_get@@GNUTLS_3_4', - 'gnutls_cipher_get_block_size' => 'gnutls_cipher_get_block_size@@GNUTLS_3_4', - 'gnutls_cipher_get_id' => 'gnutls_cipher_get_id@@GNUTLS_3_4', - 'gnutls_cipher_get_iv_size' => 'gnutls_cipher_get_iv_size@@GNUTLS_3_4', - 'gnutls_cipher_get_key_size' => 'gnutls_cipher_get_key_size@@GNUTLS_3_4', - 'gnutls_cipher_get_name' => 'gnutls_cipher_get_name@@GNUTLS_3_4', - 'gnutls_cipher_get_tag_size' => 'gnutls_cipher_get_tag_size@@GNUTLS_3_4', - 'gnutls_cipher_init' => 'gnutls_cipher_init@@GNUTLS_3_4', - 'gnutls_cipher_list' => 'gnutls_cipher_list@@GNUTLS_3_4', - 'gnutls_cipher_set_iv' => 'gnutls_cipher_set_iv@@GNUTLS_3_4', - 'gnutls_cipher_suite_get_name' => 'gnutls_cipher_suite_get_name@@GNUTLS_3_4', - 'gnutls_cipher_suite_info' => 'gnutls_cipher_suite_info@@GNUTLS_3_4', - 'gnutls_cipher_tag' => 'gnutls_cipher_tag@@GNUTLS_3_4', - 'gnutls_compression_get' => 'gnutls_compression_get@@GNUTLS_3_4', - 'gnutls_compression_get_id' => 'gnutls_compression_get_id@@GNUTLS_3_4', - 'gnutls_compression_get_name' => 'gnutls_compression_get_name@@GNUTLS_3_4', - 'gnutls_compression_list' => 'gnutls_compression_list@@GNUTLS_3_4', - 'gnutls_credentials_clear' => 'gnutls_credentials_clear@@GNUTLS_3_4', - 'gnutls_credentials_get' => 'gnutls_credentials_get@@GNUTLS_3_4', - 'gnutls_credentials_set' => 'gnutls_credentials_set@@GNUTLS_3_4', - 'gnutls_crypto_register_aead_cipher' => 'gnutls_crypto_register_aead_cipher@@GNUTLS_3_4', - 'gnutls_crypto_register_cipher' => 'gnutls_crypto_register_cipher@@GNUTLS_3_4', - 'gnutls_crypto_register_digest' => 'gnutls_crypto_register_digest@@GNUTLS_3_4', - 'gnutls_crypto_register_mac' => 'gnutls_crypto_register_mac@@GNUTLS_3_4', - 'gnutls_db_check_entry' => 'gnutls_db_check_entry@@GNUTLS_3_4', - 'gnutls_db_check_entry_time' => 'gnutls_db_check_entry_time@@GNUTLS_3_4', - 'gnutls_db_get_default_cache_expiration' => 'gnutls_db_get_default_cache_expiration@@GNUTLS_3_4', - 'gnutls_db_get_ptr' => 'gnutls_db_get_ptr@@GNUTLS_3_4', - 'gnutls_db_remove_session' => 'gnutls_db_remove_session@@GNUTLS_3_4', - 'gnutls_db_set_cache_expiration' => 'gnutls_db_set_cache_expiration@@GNUTLS_3_4', - 'gnutls_db_set_ptr' => 'gnutls_db_set_ptr@@GNUTLS_3_4', - 'gnutls_db_set_remove_function' => 'gnutls_db_set_remove_function@@GNUTLS_3_4', - 'gnutls_db_set_retrieve_function' => 'gnutls_db_set_retrieve_function@@GNUTLS_3_4', - 'gnutls_db_set_store_function' => 'gnutls_db_set_store_function@@GNUTLS_3_4', - 'gnutls_deinit' => 'gnutls_deinit@@GNUTLS_3_4', - 'gnutls_dh_get_group' => 'gnutls_dh_get_group@@GNUTLS_3_4', - 'gnutls_dh_get_peers_public_bits' => 'gnutls_dh_get_peers_public_bits@@GNUTLS_3_4', - 'gnutls_dh_get_prime_bits' => 'gnutls_dh_get_prime_bits@@GNUTLS_3_4', - 'gnutls_dh_get_pubkey' => 'gnutls_dh_get_pubkey@@GNUTLS_3_4', - 'gnutls_dh_get_secret_bits' => 'gnutls_dh_get_secret_bits@@GNUTLS_3_4', - 'gnutls_dh_params_cpy' => 'gnutls_dh_params_cpy@@GNUTLS_3_4', - 'gnutls_dh_params_deinit' => 'gnutls_dh_params_deinit@@GNUTLS_3_4', - 'gnutls_dh_params_export2_pkcs3' => 'gnutls_dh_params_export2_pkcs3@@GNUTLS_3_4', - 'gnutls_dh_params_export_pkcs3' => 'gnutls_dh_params_export_pkcs3@@GNUTLS_3_4', - 'gnutls_dh_params_export_raw' => 'gnutls_dh_params_export_raw@@GNUTLS_3_4', - 'gnutls_dh_params_generate2' => 'gnutls_dh_params_generate2@@GNUTLS_3_4', - 'gnutls_dh_params_import_pkcs3' => 'gnutls_dh_params_import_pkcs3@@GNUTLS_3_4', - 'gnutls_dh_params_import_raw' => 'gnutls_dh_params_import_raw@@GNUTLS_3_4', - 'gnutls_dh_params_import_raw2' => 'gnutls_dh_params_import_raw2@@GNUTLS_3_4', - 'gnutls_dh_params_init' => 'gnutls_dh_params_init@@GNUTLS_3_4', - 'gnutls_dh_set_prime_bits' => 'gnutls_dh_set_prime_bits@@GNUTLS_3_4', - 'gnutls_digest_get_id' => 'gnutls_digest_get_id@@GNUTLS_3_4', - 'gnutls_digest_get_name' => 'gnutls_digest_get_name@@GNUTLS_3_4', - 'gnutls_digest_get_oid' => 'gnutls_digest_get_oid@@GNUTLS_3_4', - 'gnutls_digest_list' => 'gnutls_digest_list@@GNUTLS_3_4', - 'gnutls_dtls_cookie_send' => 'gnutls_dtls_cookie_send@@GNUTLS_3_4', - 'gnutls_dtls_cookie_verify' => 'gnutls_dtls_cookie_verify@@GNUTLS_3_4', - 'gnutls_dtls_get_data_mtu' => 'gnutls_dtls_get_data_mtu@@GNUTLS_3_4', - 'gnutls_dtls_get_mtu' => 'gnutls_dtls_get_mtu@@GNUTLS_3_4', - 'gnutls_dtls_get_timeout' => 'gnutls_dtls_get_timeout@@GNUTLS_3_4', - 'gnutls_dtls_prestate_set' => 'gnutls_dtls_prestate_set@@GNUTLS_3_4', - 'gnutls_dtls_set_data_mtu' => 'gnutls_dtls_set_data_mtu@@GNUTLS_3_4', - 'gnutls_dtls_set_mtu' => 'gnutls_dtls_set_mtu@@GNUTLS_3_4', - 'gnutls_dtls_set_timeouts' => 'gnutls_dtls_set_timeouts@@GNUTLS_3_4', - 'gnutls_ecc_curve_get' => 'gnutls_ecc_curve_get@@GNUTLS_3_4', - 'gnutls_ecc_curve_get_id' => 'gnutls_ecc_curve_get_id@@GNUTLS_3_4', - 'gnutls_ecc_curve_get_name' => 'gnutls_ecc_curve_get_name@@GNUTLS_3_4', - 'gnutls_ecc_curve_get_oid' => 'gnutls_ecc_curve_get_oid@@GNUTLS_3_4', - 'gnutls_ecc_curve_get_size' => 'gnutls_ecc_curve_get_size@@GNUTLS_3_4', - 'gnutls_ecc_curve_list' => 'gnutls_ecc_curve_list@@GNUTLS_3_4', - 'gnutls_error_is_fatal' => 'gnutls_error_is_fatal@@GNUTLS_3_4', - 'gnutls_error_to_alert' => 'gnutls_error_to_alert@@GNUTLS_3_4', - 'gnutls_est_record_overhead_size' => 'gnutls_est_record_overhead_size@@GNUTLS_3_4', - 'gnutls_ext_get_data' => 'gnutls_ext_get_data@@GNUTLS_3_4', - 'gnutls_ext_register' => 'gnutls_ext_register@@GNUTLS_3_4', - 'gnutls_ext_set_data' => 'gnutls_ext_set_data@@GNUTLS_3_4', - 'gnutls_fingerprint' => 'gnutls_fingerprint@@GNUTLS_3_4', - 'gnutls_fips140_mode_enabled' => 'gnutls_fips140_mode_enabled@@GNUTLS_3_4', - 'gnutls_free' => 'gnutls_free@@GNUTLS_3_4', - 'gnutls_global_deinit' => 'gnutls_global_deinit@@GNUTLS_3_4', - 'gnutls_global_init' => 'gnutls_global_init@@GNUTLS_3_4', - 'gnutls_global_set_audit_log_function' => 'gnutls_global_set_audit_log_function@@GNUTLS_3_4', - 'gnutls_global_set_log_function' => 'gnutls_global_set_log_function@@GNUTLS_3_4', - 'gnutls_global_set_log_level' => 'gnutls_global_set_log_level@@GNUTLS_3_4', - 'gnutls_global_set_mem_functions' => 'gnutls_global_set_mem_functions@@GNUTLS_3_4', - 'gnutls_global_set_mutex' => 'gnutls_global_set_mutex@@GNUTLS_3_4', - 'gnutls_global_set_time_function' => 'gnutls_global_set_time_function@@GNUTLS_3_4', - 'gnutls_handshake' => 'gnutls_handshake@@GNUTLS_3_4', - 'gnutls_handshake_description_get_name' => 'gnutls_handshake_description_get_name@@GNUTLS_3_4', - 'gnutls_handshake_get_last_in' => 'gnutls_handshake_get_last_in@@GNUTLS_3_4', - 'gnutls_handshake_get_last_out' => 'gnutls_handshake_get_last_out@@GNUTLS_3_4', - 'gnutls_handshake_set_hook_function' => 'gnutls_handshake_set_hook_function@@GNUTLS_3_4', - 'gnutls_handshake_set_max_packet_length' => 'gnutls_handshake_set_max_packet_length@@GNUTLS_3_4', - 'gnutls_handshake_set_post_client_hello_function' => 'gnutls_handshake_set_post_client_hello_function@@GNUTLS_3_4', - 'gnutls_handshake_set_private_extensions' => 'gnutls_handshake_set_private_extensions@@GNUTLS_3_4', - 'gnutls_handshake_set_random' => 'gnutls_handshake_set_random@@GNUTLS_3_4', - 'gnutls_handshake_set_timeout' => 'gnutls_handshake_set_timeout@@GNUTLS_3_4', - 'gnutls_hash' => 'gnutls_hash@@GNUTLS_3_4', - 'gnutls_hash_deinit' => 'gnutls_hash_deinit@@GNUTLS_3_4', - 'gnutls_hash_fast' => 'gnutls_hash_fast@@GNUTLS_3_4', - 'gnutls_hash_get_len' => 'gnutls_hash_get_len@@GNUTLS_3_4', - 'gnutls_hash_init' => 'gnutls_hash_init@@GNUTLS_3_4', - 'gnutls_hash_output' => 'gnutls_hash_output@@GNUTLS_3_4', - 'gnutls_heartbeat_allowed' => 'gnutls_heartbeat_allowed@@GNUTLS_3_4', - 'gnutls_heartbeat_enable' => 'gnutls_heartbeat_enable@@GNUTLS_3_4', - 'gnutls_heartbeat_get_timeout' => 'gnutls_heartbeat_get_timeout@@GNUTLS_3_4', - 'gnutls_heartbeat_ping' => 'gnutls_heartbeat_ping@@GNUTLS_3_4', - 'gnutls_heartbeat_pong' => 'gnutls_heartbeat_pong@@GNUTLS_3_4', - 'gnutls_heartbeat_set_timeouts' => 'gnutls_heartbeat_set_timeouts@@GNUTLS_3_4', - 'gnutls_hex2bin' => 'gnutls_hex2bin@@GNUTLS_3_4', - 'gnutls_hex_decode' => 'gnutls_hex_decode@@GNUTLS_3_4', - 'gnutls_hex_decode2' => 'gnutls_hex_decode2@@GNUTLS_3_4', - 'gnutls_hex_encode' => 'gnutls_hex_encode@@GNUTLS_3_4', - 'gnutls_hex_encode2' => 'gnutls_hex_encode2@@GNUTLS_3_4', - 'gnutls_hmac' => 'gnutls_hmac@@GNUTLS_3_4', - 'gnutls_hmac_deinit' => 'gnutls_hmac_deinit@@GNUTLS_3_4', - 'gnutls_hmac_fast' => 'gnutls_hmac_fast@@GNUTLS_3_4', - 'gnutls_hmac_get_len' => 'gnutls_hmac_get_len@@GNUTLS_3_4', - 'gnutls_hmac_init' => 'gnutls_hmac_init@@GNUTLS_3_4', - 'gnutls_hmac_output' => 'gnutls_hmac_output@@GNUTLS_3_4', - 'gnutls_hmac_set_nonce' => 'gnutls_hmac_set_nonce@@GNUTLS_3_4', - 'gnutls_init' => 'gnutls_init@@GNUTLS_3_4', - 'gnutls_key_generate' => 'gnutls_key_generate@@GNUTLS_3_4', - 'gnutls_kx_get' => 'gnutls_kx_get@@GNUTLS_3_4', - 'gnutls_kx_get_id' => 'gnutls_kx_get_id@@GNUTLS_3_4', - 'gnutls_kx_get_name' => 'gnutls_kx_get_name@@GNUTLS_3_4', - 'gnutls_kx_list' => 'gnutls_kx_list@@GNUTLS_3_4', - 'gnutls_load_file' => 'gnutls_load_file@@GNUTLS_3_4', - 'gnutls_mac_get' => 'gnutls_mac_get@@GNUTLS_3_4', - 'gnutls_mac_get_id' => 'gnutls_mac_get_id@@GNUTLS_3_4', - 'gnutls_mac_get_key_size' => 'gnutls_mac_get_key_size@@GNUTLS_3_4', - 'gnutls_mac_get_name' => 'gnutls_mac_get_name@@GNUTLS_3_4', - 'gnutls_mac_get_nonce_size' => 'gnutls_mac_get_nonce_size@@GNUTLS_3_4', - 'gnutls_mac_list' => 'gnutls_mac_list@@GNUTLS_3_4', - 'gnutls_malloc' => 'gnutls_malloc@@GNUTLS_3_4', - 'gnutls_memcmp' => 'gnutls_memcmp@@GNUTLS_3_4', - 'gnutls_memset' => 'gnutls_memset@@GNUTLS_3_4', - 'gnutls_ocsp_req_add_cert' => 'gnutls_ocsp_req_add_cert@@GNUTLS_3_4', - 'gnutls_ocsp_req_add_cert_id' => 'gnutls_ocsp_req_add_cert_id@@GNUTLS_3_4', - 'gnutls_ocsp_req_deinit' => 'gnutls_ocsp_req_deinit@@GNUTLS_3_4', - 'gnutls_ocsp_req_export' => 'gnutls_ocsp_req_export@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_cert_id' => 'gnutls_ocsp_req_get_cert_id@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_extension' => 'gnutls_ocsp_req_get_extension@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_nonce' => 'gnutls_ocsp_req_get_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_version' => 'gnutls_ocsp_req_get_version@@GNUTLS_3_4', - 'gnutls_ocsp_req_import' => 'gnutls_ocsp_req_import@@GNUTLS_3_4', - 'gnutls_ocsp_req_init' => 'gnutls_ocsp_req_init@@GNUTLS_3_4', - 'gnutls_ocsp_req_print' => 'gnutls_ocsp_req_print@@GNUTLS_3_4', - 'gnutls_ocsp_req_randomize_nonce' => 'gnutls_ocsp_req_randomize_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_req_set_extension' => 'gnutls_ocsp_req_set_extension@@GNUTLS_3_4', - 'gnutls_ocsp_req_set_nonce' => 'gnutls_ocsp_req_set_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_resp_check_crt' => 'gnutls_ocsp_resp_check_crt@@GNUTLS_3_4', - 'gnutls_ocsp_resp_deinit' => 'gnutls_ocsp_resp_deinit@@GNUTLS_3_4', - 'gnutls_ocsp_resp_export' => 'gnutls_ocsp_resp_export@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_certs' => 'gnutls_ocsp_resp_get_certs@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_extension' => 'gnutls_ocsp_resp_get_extension@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_nonce' => 'gnutls_ocsp_resp_get_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_produced' => 'gnutls_ocsp_resp_get_produced@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_responder' => 'gnutls_ocsp_resp_get_responder@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_responder_raw_id' => 'gnutls_ocsp_resp_get_responder_raw_id@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_response' => 'gnutls_ocsp_resp_get_response@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_signature' => 'gnutls_ocsp_resp_get_signature@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_signature_algorithm' => 'gnutls_ocsp_resp_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_single' => 'gnutls_ocsp_resp_get_single@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_status' => 'gnutls_ocsp_resp_get_status@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_version' => 'gnutls_ocsp_resp_get_version@@GNUTLS_3_4', - 'gnutls_ocsp_resp_import' => 'gnutls_ocsp_resp_import@@GNUTLS_3_4', - 'gnutls_ocsp_resp_init' => 'gnutls_ocsp_resp_init@@GNUTLS_3_4', - 'gnutls_ocsp_resp_print' => 'gnutls_ocsp_resp_print@@GNUTLS_3_4', - 'gnutls_ocsp_resp_verify' => 'gnutls_ocsp_resp_verify@@GNUTLS_3_4', - 'gnutls_ocsp_resp_verify_direct' => 'gnutls_ocsp_resp_verify_direct@@GNUTLS_3_4', - 'gnutls_ocsp_status_request_enable_client' => 'gnutls_ocsp_status_request_enable_client@@GNUTLS_3_4', - 'gnutls_ocsp_status_request_get' => 'gnutls_ocsp_status_request_get@@GNUTLS_3_4', - 'gnutls_ocsp_status_request_is_checked' => 'gnutls_ocsp_status_request_is_checked@@GNUTLS_3_4', - 'gnutls_oid_to_digest' => 'gnutls_oid_to_digest@@GNUTLS_3_4', - 'gnutls_oid_to_ecc_curve' => 'gnutls_oid_to_ecc_curve@@GNUTLS_3_4', - 'gnutls_oid_to_pk' => 'gnutls_oid_to_pk@@GNUTLS_3_4', - 'gnutls_oid_to_sign' => 'gnutls_oid_to_sign@@GNUTLS_3_4', - 'gnutls_openpgp_crt_check_email' => 'gnutls_openpgp_crt_check_email@@GNUTLS_3_4', - 'gnutls_openpgp_crt_check_hostname' => 'gnutls_openpgp_crt_check_hostname@@GNUTLS_3_4', - 'gnutls_openpgp_crt_check_hostname2' => 'gnutls_openpgp_crt_check_hostname2@@GNUTLS_3_4', - 'gnutls_openpgp_crt_deinit' => 'gnutls_openpgp_crt_deinit@@GNUTLS_3_4', - 'gnutls_openpgp_crt_export' => 'gnutls_openpgp_crt_export@@GNUTLS_3_4', - 'gnutls_openpgp_crt_export2' => 'gnutls_openpgp_crt_export2@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_auth_subkey' => 'gnutls_openpgp_crt_get_auth_subkey@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_creation_time' => 'gnutls_openpgp_crt_get_creation_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_expiration_time' => 'gnutls_openpgp_crt_get_expiration_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_fingerprint' => 'gnutls_openpgp_crt_get_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_key_id' => 'gnutls_openpgp_crt_get_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_key_usage' => 'gnutls_openpgp_crt_get_key_usage@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_name' => 'gnutls_openpgp_crt_get_name@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_pk_algorithm' => 'gnutls_openpgp_crt_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_pk_dsa_raw' => 'gnutls_openpgp_crt_get_pk_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_pk_rsa_raw' => 'gnutls_openpgp_crt_get_pk_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_preferred_key_id' => 'gnutls_openpgp_crt_get_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_revoked_status' => 'gnutls_openpgp_crt_get_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_count' => 'gnutls_openpgp_crt_get_subkey_count@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_creation_time' => 'gnutls_openpgp_crt_get_subkey_creation_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_expiration_time' => 'gnutls_openpgp_crt_get_subkey_expiration_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_fingerprint' => 'gnutls_openpgp_crt_get_subkey_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_id' => 'gnutls_openpgp_crt_get_subkey_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_idx' => 'gnutls_openpgp_crt_get_subkey_idx@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_pk_algorithm' => 'gnutls_openpgp_crt_get_subkey_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw' => 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw' => 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_revoked_status' => 'gnutls_openpgp_crt_get_subkey_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_usage' => 'gnutls_openpgp_crt_get_subkey_usage@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_version' => 'gnutls_openpgp_crt_get_version@@GNUTLS_3_4', - 'gnutls_openpgp_crt_import' => 'gnutls_openpgp_crt_import@@GNUTLS_3_4', - 'gnutls_openpgp_crt_init' => 'gnutls_openpgp_crt_init@@GNUTLS_3_4', - 'gnutls_openpgp_crt_print' => 'gnutls_openpgp_crt_print@@GNUTLS_3_4', - 'gnutls_openpgp_crt_set_preferred_key_id' => 'gnutls_openpgp_crt_set_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_verify_ring' => 'gnutls_openpgp_crt_verify_ring@@GNUTLS_3_4', - 'gnutls_openpgp_crt_verify_self' => 'gnutls_openpgp_crt_verify_self@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_check_id' => 'gnutls_openpgp_keyring_check_id@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_deinit' => 'gnutls_openpgp_keyring_deinit@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_get_crt' => 'gnutls_openpgp_keyring_get_crt@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_get_crt_count' => 'gnutls_openpgp_keyring_get_crt_count@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_import' => 'gnutls_openpgp_keyring_import@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_init' => 'gnutls_openpgp_keyring_init@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_deinit' => 'gnutls_openpgp_privkey_deinit@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export' => 'gnutls_openpgp_privkey_export@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export2' => 'gnutls_openpgp_privkey_export2@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_dsa_raw' => 'gnutls_openpgp_privkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_rsa_raw' => 'gnutls_openpgp_privkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_subkey_dsa_raw' => 'gnutls_openpgp_privkey_export_subkey_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_subkey_rsa_raw' => 'gnutls_openpgp_privkey_export_subkey_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_fingerprint' => 'gnutls_openpgp_privkey_get_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_key_id' => 'gnutls_openpgp_privkey_get_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_pk_algorithm' => 'gnutls_openpgp_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_preferred_key_id' => 'gnutls_openpgp_privkey_get_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_revoked_status' => 'gnutls_openpgp_privkey_get_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_count' => 'gnutls_openpgp_privkey_get_subkey_count@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_creation_time' => 'gnutls_openpgp_privkey_get_subkey_creation_time@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_expiration_time' => 'gnutls_openpgp_privkey_get_subkey_expiration_time@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_fingerprint' => 'gnutls_openpgp_privkey_get_subkey_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_id' => 'gnutls_openpgp_privkey_get_subkey_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_idx' => 'gnutls_openpgp_privkey_get_subkey_idx@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_pk_algorithm' => 'gnutls_openpgp_privkey_get_subkey_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_revoked_status' => 'gnutls_openpgp_privkey_get_subkey_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_import' => 'gnutls_openpgp_privkey_import@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_init' => 'gnutls_openpgp_privkey_init@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_sec_param' => 'gnutls_openpgp_privkey_sec_param@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_set_preferred_key_id' => 'gnutls_openpgp_privkey_set_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_sign_hash' => 'gnutls_openpgp_privkey_sign_hash@@GNUTLS_3_4', - 'gnutls_openpgp_send_cert' => 'gnutls_openpgp_send_cert@@GNUTLS_3_4', - 'gnutls_openpgp_set_recv_key_function' => 'gnutls_openpgp_set_recv_key_function@@GNUTLS_3_4', - 'gnutls_packet_deinit' => 'gnutls_packet_deinit@@GNUTLS_3_4', - 'gnutls_packet_get' => 'gnutls_packet_get@@GNUTLS_3_4', - 'gnutls_pcert_deinit' => 'gnutls_pcert_deinit@@GNUTLS_3_4', - 'gnutls_pcert_export_openpgp' => 'gnutls_pcert_export_openpgp@@GNUTLS_3_4', - 'gnutls_pcert_export_x509' => 'gnutls_pcert_export_x509@@GNUTLS_3_4', - 'gnutls_pcert_import_openpgp' => 'gnutls_pcert_import_openpgp@@GNUTLS_3_4', - 'gnutls_pcert_import_openpgp_raw' => 'gnutls_pcert_import_openpgp_raw@@GNUTLS_3_4', - 'gnutls_pcert_import_x509' => 'gnutls_pcert_import_x509@@GNUTLS_3_4', - 'gnutls_pcert_import_x509_list' => 'gnutls_pcert_import_x509_list@@GNUTLS_3_4', - 'gnutls_pcert_import_x509_raw' => 'gnutls_pcert_import_x509_raw@@GNUTLS_3_4', - 'gnutls_pcert_list_import_x509_raw' => 'gnutls_pcert_list_import_x509_raw@@GNUTLS_3_4', - 'gnutls_pem_base64_decode' => 'gnutls_pem_base64_decode@@GNUTLS_3_4', - 'gnutls_pem_base64_decode2' => 'gnutls_pem_base64_decode2@@GNUTLS_3_4', - 'gnutls_pem_base64_encode' => 'gnutls_pem_base64_encode@@GNUTLS_3_4', - 'gnutls_pem_base64_encode2' => 'gnutls_pem_base64_encode2@@GNUTLS_3_4', - 'gnutls_perror' => 'gnutls_perror@@GNUTLS_3_4', - 'gnutls_pk_algorithm_get_name' => 'gnutls_pk_algorithm_get_name@@GNUTLS_3_4', - 'gnutls_pk_bits_to_sec_param' => 'gnutls_pk_bits_to_sec_param@@GNUTLS_3_4', - 'gnutls_pk_get_id' => 'gnutls_pk_get_id@@GNUTLS_3_4', - 'gnutls_pk_get_name' => 'gnutls_pk_get_name@@GNUTLS_3_4', - 'gnutls_pk_get_oid' => 'gnutls_pk_get_oid@@GNUTLS_3_4', - 'gnutls_pk_list' => 'gnutls_pk_list@@GNUTLS_3_4', - 'gnutls_pk_to_sign' => 'gnutls_pk_to_sign@@GNUTLS_3_4', - 'gnutls_pkcs11_add_provider' => 'gnutls_pkcs11_add_provider@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_attached_extension' => 'gnutls_pkcs11_copy_attached_extension@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_pubkey' => 'gnutls_pkcs11_copy_pubkey@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_secret_key' => 'gnutls_pkcs11_copy_secret_key@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_x509_crt2' => 'gnutls_pkcs11_copy_x509_crt2@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_x509_privkey2' => 'gnutls_pkcs11_copy_x509_privkey2@@GNUTLS_3_4', - 'gnutls_pkcs11_crt_is_known' => 'gnutls_pkcs11_crt_is_known@@GNUTLS_3_4', - 'gnutls_pkcs11_deinit' => 'gnutls_pkcs11_deinit@@GNUTLS_3_4', - 'gnutls_pkcs11_delete_url' => 'gnutls_pkcs11_delete_url@@GNUTLS_3_4', - 'gnutls_pkcs11_get_pin_function' => 'gnutls_pkcs11_get_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_get_raw_issuer' => 'gnutls_pkcs11_get_raw_issuer@@GNUTLS_3_4', - 'gnutls_pkcs11_get_raw_issuer_by_dn' => 'gnutls_pkcs11_get_raw_issuer_by_dn@@GNUTLS_3_4', - 'gnutls_pkcs11_get_raw_issuer_by_subject_key_id' => 'gnutls_pkcs11_get_raw_issuer_by_subject_key_id@@GNUTLS_3_4', - 'gnutls_pkcs11_init' => 'gnutls_pkcs11_init@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_deinit' => 'gnutls_pkcs11_obj_deinit@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export' => 'gnutls_pkcs11_obj_export@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export2' => 'gnutls_pkcs11_obj_export2@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export3' => 'gnutls_pkcs11_obj_export3@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export_url' => 'gnutls_pkcs11_obj_export_url@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_flags_get_str' => 'gnutls_pkcs11_obj_flags_get_str@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_exts' => 'gnutls_pkcs11_obj_get_exts@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_flags' => 'gnutls_pkcs11_obj_get_flags@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_info' => 'gnutls_pkcs11_obj_get_info@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_type' => 'gnutls_pkcs11_obj_get_type@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_import_url' => 'gnutls_pkcs11_obj_import_url@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_init' => 'gnutls_pkcs11_obj_init@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_list_import_url3' => 'gnutls_pkcs11_obj_list_import_url3@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_list_import_url4' => 'gnutls_pkcs11_obj_list_import_url4@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_set_info' => 'gnutls_pkcs11_obj_set_info@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_set_pin_function' => 'gnutls_pkcs11_obj_set_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_cpy' => 'gnutls_pkcs11_privkey_cpy@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_deinit' => 'gnutls_pkcs11_privkey_deinit@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_export_pubkey' => 'gnutls_pkcs11_privkey_export_pubkey@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_export_url' => 'gnutls_pkcs11_privkey_export_url@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_generate3' => 'gnutls_pkcs11_privkey_generate3@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_get_info' => 'gnutls_pkcs11_privkey_get_info@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_get_pk_algorithm' => 'gnutls_pkcs11_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_import_url' => 'gnutls_pkcs11_privkey_import_url@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_init' => 'gnutls_pkcs11_privkey_init@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_set_pin_function' => 'gnutls_pkcs11_privkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_status' => 'gnutls_pkcs11_privkey_status@@GNUTLS_3_4', - 'gnutls_pkcs11_reinit' => 'gnutls_pkcs11_reinit@@GNUTLS_3_4', - 'gnutls_pkcs11_set_pin_function' => 'gnutls_pkcs11_set_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_set_token_function' => 'gnutls_pkcs11_set_token_function@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_flags' => 'gnutls_pkcs11_token_get_flags@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_info' => 'gnutls_pkcs11_token_get_info@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_mechanism' => 'gnutls_pkcs11_token_get_mechanism@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_random' => 'gnutls_pkcs11_token_get_random@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_url' => 'gnutls_pkcs11_token_get_url@@GNUTLS_3_4', - 'gnutls_pkcs11_token_init' => 'gnutls_pkcs11_token_init@@GNUTLS_3_4', - 'gnutls_pkcs11_token_set_pin' => 'gnutls_pkcs11_token_set_pin@@GNUTLS_3_4', - 'gnutls_pkcs11_type_get_name' => 'gnutls_pkcs11_type_get_name@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_decrypt' => 'gnutls_pkcs12_bag_decrypt@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_deinit' => 'gnutls_pkcs12_bag_deinit@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_enc_info' => 'gnutls_pkcs12_bag_enc_info@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_encrypt' => 'gnutls_pkcs12_bag_encrypt@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_count' => 'gnutls_pkcs12_bag_get_count@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_data' => 'gnutls_pkcs12_bag_get_data@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_friendly_name' => 'gnutls_pkcs12_bag_get_friendly_name@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_key_id' => 'gnutls_pkcs12_bag_get_key_id@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_type' => 'gnutls_pkcs12_bag_get_type@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_init' => 'gnutls_pkcs12_bag_init@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_crl' => 'gnutls_pkcs12_bag_set_crl@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_crt' => 'gnutls_pkcs12_bag_set_crt@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_data' => 'gnutls_pkcs12_bag_set_data@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_friendly_name' => 'gnutls_pkcs12_bag_set_friendly_name@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_key_id' => 'gnutls_pkcs12_bag_set_key_id@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_privkey' => 'gnutls_pkcs12_bag_set_privkey@@GNUTLS_3_4', - 'gnutls_pkcs12_deinit' => 'gnutls_pkcs12_deinit@@GNUTLS_3_4', - 'gnutls_pkcs12_export' => 'gnutls_pkcs12_export@@GNUTLS_3_4', - 'gnutls_pkcs12_export2' => 'gnutls_pkcs12_export2@@GNUTLS_3_4', - 'gnutls_pkcs12_generate_mac' => 'gnutls_pkcs12_generate_mac@@GNUTLS_3_4', - 'gnutls_pkcs12_generate_mac2' => 'gnutls_pkcs12_generate_mac2@@GNUTLS_3_4', - 'gnutls_pkcs12_get_bag' => 'gnutls_pkcs12_get_bag@@GNUTLS_3_4', - 'gnutls_pkcs12_import' => 'gnutls_pkcs12_import@@GNUTLS_3_4', - 'gnutls_pkcs12_init' => 'gnutls_pkcs12_init@@GNUTLS_3_4', - 'gnutls_pkcs12_mac_info' => 'gnutls_pkcs12_mac_info@@GNUTLS_3_4', - 'gnutls_pkcs12_set_bag' => 'gnutls_pkcs12_set_bag@@GNUTLS_3_4', - 'gnutls_pkcs12_simple_parse' => 'gnutls_pkcs12_simple_parse@@GNUTLS_3_4', - 'gnutls_pkcs12_verify_mac' => 'gnutls_pkcs12_verify_mac@@GNUTLS_3_4', - 'gnutls_pkcs7_add_attr' => 'gnutls_pkcs7_add_attr@@GNUTLS_3_4', - 'gnutls_pkcs7_attrs_deinit' => 'gnutls_pkcs7_attrs_deinit@@GNUTLS_3_4', - 'gnutls_pkcs7_deinit' => 'gnutls_pkcs7_deinit@@GNUTLS_3_4', - 'gnutls_pkcs7_delete_crl' => 'gnutls_pkcs7_delete_crl@@GNUTLS_3_4', - 'gnutls_pkcs7_delete_crt' => 'gnutls_pkcs7_delete_crt@@GNUTLS_3_4', - 'gnutls_pkcs7_export' => 'gnutls_pkcs7_export@@GNUTLS_3_4', - 'gnutls_pkcs7_export2' => 'gnutls_pkcs7_export2@@GNUTLS_3_4', - 'gnutls_pkcs7_get_attr' => 'gnutls_pkcs7_get_attr@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crl_count' => 'gnutls_pkcs7_get_crl_count@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crl_raw' => 'gnutls_pkcs7_get_crl_raw@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crl_raw2' => 'gnutls_pkcs7_get_crl_raw2@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crt_count' => 'gnutls_pkcs7_get_crt_count@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crt_raw' => 'gnutls_pkcs7_get_crt_raw@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crt_raw2' => 'gnutls_pkcs7_get_crt_raw2@@GNUTLS_3_4', - 'gnutls_pkcs7_get_embedded_data' => 'gnutls_pkcs7_get_embedded_data@@GNUTLS_3_4', - 'gnutls_pkcs7_get_embedded_data_oid' => 'gnutls_pkcs7_get_embedded_data_oid@@GNUTLS_3_4', - 'gnutls_pkcs7_get_signature_count' => 'gnutls_pkcs7_get_signature_count@@GNUTLS_3_4', - 'gnutls_pkcs7_get_signature_info' => 'gnutls_pkcs7_get_signature_info@@GNUTLS_3_4', - 'gnutls_pkcs7_import' => 'gnutls_pkcs7_import@@GNUTLS_3_4', - 'gnutls_pkcs7_init' => 'gnutls_pkcs7_init@@GNUTLS_3_4', - 'gnutls_pkcs7_print' => 'gnutls_pkcs7_print@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crl' => 'gnutls_pkcs7_set_crl@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crl_raw' => 'gnutls_pkcs7_set_crl_raw@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crt' => 'gnutls_pkcs7_set_crt@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crt_raw' => 'gnutls_pkcs7_set_crt_raw@@GNUTLS_3_4', - 'gnutls_pkcs7_sign' => 'gnutls_pkcs7_sign@@GNUTLS_3_4', - 'gnutls_pkcs7_signature_info_deinit' => 'gnutls_pkcs7_signature_info_deinit@@GNUTLS_3_4', - 'gnutls_pkcs7_verify' => 'gnutls_pkcs7_verify@@GNUTLS_3_4', - 'gnutls_pkcs7_verify_direct' => 'gnutls_pkcs7_verify_direct@@GNUTLS_3_4', - 'gnutls_pkcs8_info' => 'gnutls_pkcs8_info@@GNUTLS_3_4', - 'gnutls_pkcs_schema_get_name' => 'gnutls_pkcs_schema_get_name@@GNUTLS_3_4', - 'gnutls_pkcs_schema_get_oid' => 'gnutls_pkcs_schema_get_oid@@GNUTLS_3_4', - 'gnutls_prf' => 'gnutls_prf@@GNUTLS_3_4', - 'gnutls_prf_raw' => 'gnutls_prf_raw@@GNUTLS_3_4', - 'gnutls_prf_rfc5705' => 'gnutls_prf_rfc5705@@GNUTLS_3_4', - 'gnutls_priority_certificate_type_list' => 'gnutls_priority_certificate_type_list@@GNUTLS_3_4', - 'gnutls_priority_cipher_list' => 'gnutls_priority_cipher_list@@GNUTLS_3_4', - 'gnutls_priority_compression_list' => 'gnutls_priority_compression_list@@GNUTLS_3_4', - 'gnutls_priority_deinit' => 'gnutls_priority_deinit@@GNUTLS_3_4', - 'gnutls_priority_ecc_curve_list' => 'gnutls_priority_ecc_curve_list@@GNUTLS_3_4', - 'gnutls_priority_get_cipher_suite_index' => 'gnutls_priority_get_cipher_suite_index@@GNUTLS_3_4', - 'gnutls_priority_init' => 'gnutls_priority_init@@GNUTLS_3_4', - 'gnutls_priority_kx_list' => 'gnutls_priority_kx_list@@GNUTLS_3_4', - 'gnutls_priority_mac_list' => 'gnutls_priority_mac_list@@GNUTLS_3_4', - 'gnutls_priority_protocol_list' => 'gnutls_priority_protocol_list@@GNUTLS_3_4', - 'gnutls_priority_set' => 'gnutls_priority_set@@GNUTLS_3_4', - 'gnutls_priority_set_direct' => 'gnutls_priority_set_direct@@GNUTLS_3_4', - 'gnutls_priority_sign_list' => 'gnutls_priority_sign_list@@GNUTLS_3_4', - 'gnutls_priority_string_list' => 'gnutls_priority_string_list@@GNUTLS_3_4', - 'gnutls_privkey_decrypt_data' => 'gnutls_privkey_decrypt_data@@GNUTLS_3_4', - 'gnutls_privkey_deinit' => 'gnutls_privkey_deinit@@GNUTLS_3_4', - 'gnutls_privkey_export_dsa_raw' => 'gnutls_privkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_export_ecc_raw' => 'gnutls_privkey_export_ecc_raw@@GNUTLS_3_4', - 'gnutls_privkey_export_openpgp' => 'gnutls_privkey_export_openpgp@@GNUTLS_3_4', - 'gnutls_privkey_export_pkcs11' => 'gnutls_privkey_export_pkcs11@@GNUTLS_3_4', - 'gnutls_privkey_export_rsa_raw' => 'gnutls_privkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_export_x509' => 'gnutls_privkey_export_x509@@GNUTLS_3_4', - 'gnutls_privkey_generate' => 'gnutls_privkey_generate@@GNUTLS_3_4', - 'gnutls_privkey_get_pk_algorithm' => 'gnutls_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_privkey_get_type' => 'gnutls_privkey_get_type@@GNUTLS_3_4', - 'gnutls_privkey_import_dsa_raw' => 'gnutls_privkey_import_dsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_ecc_raw' => 'gnutls_privkey_import_ecc_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_ext' => 'gnutls_privkey_import_ext@@GNUTLS_3_4', - 'gnutls_privkey_import_ext2' => 'gnutls_privkey_import_ext2@@GNUTLS_3_4', - 'gnutls_privkey_import_ext3' => 'gnutls_privkey_import_ext3@@GNUTLS_3_4', - 'gnutls_privkey_import_openpgp' => 'gnutls_privkey_import_openpgp@@GNUTLS_3_4', - 'gnutls_privkey_import_openpgp_raw' => 'gnutls_privkey_import_openpgp_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_pkcs11' => 'gnutls_privkey_import_pkcs11@@GNUTLS_3_4', - 'gnutls_privkey_import_rsa_raw' => 'gnutls_privkey_import_rsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_tpm_raw' => 'gnutls_privkey_import_tpm_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_tpm_url' => 'gnutls_privkey_import_tpm_url@@GNUTLS_3_4', - 'gnutls_privkey_import_url' => 'gnutls_privkey_import_url@@GNUTLS_3_4', - 'gnutls_privkey_import_x509' => 'gnutls_privkey_import_x509@@GNUTLS_3_4', - 'gnutls_privkey_import_x509_raw' => 'gnutls_privkey_import_x509_raw@@GNUTLS_3_4', - 'gnutls_privkey_init' => 'gnutls_privkey_init@@GNUTLS_3_4', - 'gnutls_privkey_set_pin_function' => 'gnutls_privkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_privkey_sign_data' => 'gnutls_privkey_sign_data@@GNUTLS_3_4', - 'gnutls_privkey_sign_hash' => 'gnutls_privkey_sign_hash@@GNUTLS_3_4', - 'gnutls_privkey_status' => 'gnutls_privkey_status@@GNUTLS_3_4', - 'gnutls_privkey_verify_params' => 'gnutls_privkey_verify_params@@GNUTLS_3_4', - 'gnutls_protocol_get_id' => 'gnutls_protocol_get_id@@GNUTLS_3_4', - 'gnutls_protocol_get_name' => 'gnutls_protocol_get_name@@GNUTLS_3_4', - 'gnutls_protocol_get_version' => 'gnutls_protocol_get_version@@GNUTLS_3_4', - 'gnutls_protocol_list' => 'gnutls_protocol_list@@GNUTLS_3_4', - 'gnutls_psk_allocate_client_credentials' => 'gnutls_psk_allocate_client_credentials@@GNUTLS_3_4', - 'gnutls_psk_allocate_server_credentials' => 'gnutls_psk_allocate_server_credentials@@GNUTLS_3_4', - 'gnutls_psk_client_get_hint' => 'gnutls_psk_client_get_hint@@GNUTLS_3_4', - 'gnutls_psk_free_client_credentials' => 'gnutls_psk_free_client_credentials@@GNUTLS_3_4', - 'gnutls_psk_free_server_credentials' => 'gnutls_psk_free_server_credentials@@GNUTLS_3_4', - 'gnutls_psk_server_get_username' => 'gnutls_psk_server_get_username@@GNUTLS_3_4', - 'gnutls_psk_set_client_credentials' => 'gnutls_psk_set_client_credentials@@GNUTLS_3_4', - 'gnutls_psk_set_client_credentials_function' => 'gnutls_psk_set_client_credentials_function@@GNUTLS_3_4', - 'gnutls_psk_set_params_function' => 'gnutls_psk_set_params_function@@GNUTLS_3_4', - 'gnutls_psk_set_server_credentials_file' => 'gnutls_psk_set_server_credentials_file@@GNUTLS_3_4', - 'gnutls_psk_set_server_credentials_function' => 'gnutls_psk_set_server_credentials_function@@GNUTLS_3_4', - 'gnutls_psk_set_server_credentials_hint' => 'gnutls_psk_set_server_credentials_hint@@GNUTLS_3_4', - 'gnutls_psk_set_server_dh_params' => 'gnutls_psk_set_server_dh_params@@GNUTLS_3_4', - 'gnutls_psk_set_server_params_function' => 'gnutls_psk_set_server_params_function@@GNUTLS_3_4', - 'gnutls_pubkey_deinit' => 'gnutls_pubkey_deinit@@GNUTLS_3_4', - 'gnutls_pubkey_encrypt_data' => 'gnutls_pubkey_encrypt_data@@GNUTLS_3_4', - 'gnutls_pubkey_export' => 'gnutls_pubkey_export@@GNUTLS_3_4', - 'gnutls_pubkey_export2' => 'gnutls_pubkey_export2@@GNUTLS_3_4', - 'gnutls_pubkey_export_dsa_raw' => 'gnutls_pubkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_export_ecc_raw' => 'gnutls_pubkey_export_ecc_raw@@GNUTLS_3_4', - 'gnutls_pubkey_export_ecc_x962' => 'gnutls_pubkey_export_ecc_x962@@GNUTLS_3_4', - 'gnutls_pubkey_export_rsa_raw' => 'gnutls_pubkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_get_key_id' => 'gnutls_pubkey_get_key_id@@GNUTLS_3_4', - 'gnutls_pubkey_get_key_usage' => 'gnutls_pubkey_get_key_usage@@GNUTLS_3_4', - 'gnutls_pubkey_get_openpgp_key_id' => 'gnutls_pubkey_get_openpgp_key_id@@GNUTLS_3_4', - 'gnutls_pubkey_get_pk_algorithm' => 'gnutls_pubkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_pubkey_get_preferred_hash_algorithm' => 'gnutls_pubkey_get_preferred_hash_algorithm@@GNUTLS_3_4', - 'gnutls_pubkey_import' => 'gnutls_pubkey_import@@GNUTLS_3_4', - 'gnutls_pubkey_import_dsa_raw' => 'gnutls_pubkey_import_dsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_ecc_raw' => 'gnutls_pubkey_import_ecc_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_ecc_x962' => 'gnutls_pubkey_import_ecc_x962@@GNUTLS_3_4', - 'gnutls_pubkey_import_openpgp' => 'gnutls_pubkey_import_openpgp@@GNUTLS_3_4', - 'gnutls_pubkey_import_openpgp_raw' => 'gnutls_pubkey_import_openpgp_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_pkcs11' => 'gnutls_pubkey_import_pkcs11@@GNUTLS_3_4', - 'gnutls_pubkey_import_privkey' => 'gnutls_pubkey_import_privkey@@GNUTLS_3_4', - 'gnutls_pubkey_import_rsa_raw' => 'gnutls_pubkey_import_rsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_tpm_raw' => 'gnutls_pubkey_import_tpm_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_tpm_url' => 'gnutls_pubkey_import_tpm_url@@GNUTLS_3_4', - 'gnutls_pubkey_import_url' => 'gnutls_pubkey_import_url@@GNUTLS_3_4', - 'gnutls_pubkey_import_x509' => 'gnutls_pubkey_import_x509@@GNUTLS_3_4', - 'gnutls_pubkey_import_x509_crq' => 'gnutls_pubkey_import_x509_crq@@GNUTLS_3_4', - 'gnutls_pubkey_import_x509_raw' => 'gnutls_pubkey_import_x509_raw@@GNUTLS_3_4', - 'gnutls_pubkey_init' => 'gnutls_pubkey_init@@GNUTLS_3_4', - 'gnutls_pubkey_print' => 'gnutls_pubkey_print@@GNUTLS_3_4', - 'gnutls_pubkey_set_key_usage' => 'gnutls_pubkey_set_key_usage@@GNUTLS_3_4', - 'gnutls_pubkey_set_pin_function' => 'gnutls_pubkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_pubkey_verify_data2' => 'gnutls_pubkey_verify_data2@@GNUTLS_3_4', - 'gnutls_pubkey_verify_hash2' => 'gnutls_pubkey_verify_hash2@@GNUTLS_3_4', - 'gnutls_pubkey_verify_params' => 'gnutls_pubkey_verify_params@@GNUTLS_3_4', - 'gnutls_random_art' => 'gnutls_random_art@@GNUTLS_3_4', - 'gnutls_range_split' => 'gnutls_range_split@@GNUTLS_3_4', - 'gnutls_realloc' => 'gnutls_realloc@@GNUTLS_3_4', - 'gnutls_record_can_use_length_hiding' => 'gnutls_record_can_use_length_hiding@@GNUTLS_3_4', - 'gnutls_record_check_corked' => 'gnutls_record_check_corked@@GNUTLS_3_4', - 'gnutls_record_check_pending' => 'gnutls_record_check_pending@@GNUTLS_3_4', - 'gnutls_record_cork' => 'gnutls_record_cork@@GNUTLS_3_4', - 'gnutls_record_disable_padding' => 'gnutls_record_disable_padding@@GNUTLS_3_4', - 'gnutls_record_discard_queued' => 'gnutls_record_discard_queued@@GNUTLS_3_4', - 'gnutls_record_get_direction' => 'gnutls_record_get_direction@@GNUTLS_3_4', - 'gnutls_record_get_discarded' => 'gnutls_record_get_discarded@@GNUTLS_3_4', - 'gnutls_record_get_max_size' => 'gnutls_record_get_max_size@@GNUTLS_3_4', - 'gnutls_record_get_state' => 'gnutls_record_get_state@@GNUTLS_3_4', - 'gnutls_record_overhead_size' => 'gnutls_record_overhead_size@@GNUTLS_3_4', - 'gnutls_record_recv' => 'gnutls_record_recv@@GNUTLS_3_4', - 'gnutls_record_recv_packet' => 'gnutls_record_recv_packet@@GNUTLS_3_4', - 'gnutls_record_recv_seq' => 'gnutls_record_recv_seq@@GNUTLS_3_4', - 'gnutls_record_send' => 'gnutls_record_send@@GNUTLS_3_4', - 'gnutls_record_send_range' => 'gnutls_record_send_range@@GNUTLS_3_4', - 'gnutls_record_set_max_size' => 'gnutls_record_set_max_size@@GNUTLS_3_4', - 'gnutls_record_set_state' => 'gnutls_record_set_state@@GNUTLS_3_4', - 'gnutls_record_set_timeout' => 'gnutls_record_set_timeout@@GNUTLS_3_4', - 'gnutls_record_uncork' => 'gnutls_record_uncork@@GNUTLS_3_4', - 'gnutls_register_custom_url' => 'gnutls_register_custom_url@@GNUTLS_3_4', - 'gnutls_rehandshake' => 'gnutls_rehandshake@@GNUTLS_3_4', - 'gnutls_rnd' => 'gnutls_rnd@@GNUTLS_3_4', - 'gnutls_rnd_refresh' => 'gnutls_rnd_refresh@@GNUTLS_3_4', - 'gnutls_safe_renegotiation_status' => 'gnutls_safe_renegotiation_status@@GNUTLS_3_4', - 'gnutls_sec_param_get_name' => 'gnutls_sec_param_get_name@@GNUTLS_3_4', - 'gnutls_sec_param_to_pk_bits' => 'gnutls_sec_param_to_pk_bits@@GNUTLS_3_4', - 'gnutls_sec_param_to_symmetric_bits' => 'gnutls_sec_param_to_symmetric_bits@@GNUTLS_3_4', - 'gnutls_secure_malloc' => 'gnutls_secure_malloc@@GNUTLS_3_4', - 'gnutls_server_name_get' => 'gnutls_server_name_get@@GNUTLS_3_4', - 'gnutls_server_name_set' => 'gnutls_server_name_set@@GNUTLS_3_4', - 'gnutls_session_channel_binding' => 'gnutls_session_channel_binding@@GNUTLS_3_4', - 'gnutls_session_enable_compatibility_mode' => 'gnutls_session_enable_compatibility_mode@@GNUTLS_3_4', - 'gnutls_session_etm_status' => 'gnutls_session_etm_status@@GNUTLS_3_4', - 'gnutls_session_ext_master_secret_status' => 'gnutls_session_ext_master_secret_status@@GNUTLS_3_4', - 'gnutls_session_force_valid' => 'gnutls_session_force_valid@@GNUTLS_3_4', - 'gnutls_session_get_data' => 'gnutls_session_get_data@@GNUTLS_3_4', - 'gnutls_session_get_data2' => 'gnutls_session_get_data2@@GNUTLS_3_4', - 'gnutls_session_get_desc' => 'gnutls_session_get_desc@@GNUTLS_3_4', - 'gnutls_session_get_id' => 'gnutls_session_get_id@@GNUTLS_3_4', - 'gnutls_session_get_id2' => 'gnutls_session_get_id2@@GNUTLS_3_4', - 'gnutls_session_get_ptr' => 'gnutls_session_get_ptr@@GNUTLS_3_4', - 'gnutls_session_get_random' => 'gnutls_session_get_random@@GNUTLS_3_4', - 'gnutls_session_get_verify_cert_status' => 'gnutls_session_get_verify_cert_status@@GNUTLS_3_4', - 'gnutls_session_is_resumed' => 'gnutls_session_is_resumed@@GNUTLS_3_4', - 'gnutls_session_resumption_requested' => 'gnutls_session_resumption_requested@@GNUTLS_3_4', - 'gnutls_session_set_data' => 'gnutls_session_set_data@@GNUTLS_3_4', - 'gnutls_session_set_id' => 'gnutls_session_set_id@@GNUTLS_3_4', - 'gnutls_session_set_premaster' => 'gnutls_session_set_premaster@@GNUTLS_3_4', - 'gnutls_session_set_ptr' => 'gnutls_session_set_ptr@@GNUTLS_3_4', - 'gnutls_session_set_verify_cert' => 'gnutls_session_set_verify_cert@@GNUTLS_3_4', - 'gnutls_session_set_verify_cert2' => 'gnutls_session_set_verify_cert2@@GNUTLS_3_4', - 'gnutls_session_set_verify_function' => 'gnutls_session_set_verify_function@@GNUTLS_3_4', - 'gnutls_session_ticket_enable_client' => 'gnutls_session_ticket_enable_client@@GNUTLS_3_4', - 'gnutls_session_ticket_enable_server' => 'gnutls_session_ticket_enable_server@@GNUTLS_3_4', - 'gnutls_session_ticket_key_generate' => 'gnutls_session_ticket_key_generate@@GNUTLS_3_4', - 'gnutls_set_default_priority' => 'gnutls_set_default_priority@@GNUTLS_3_4', - 'gnutls_sign_algorithm_get' => 'gnutls_sign_algorithm_get@@GNUTLS_3_4', - 'gnutls_sign_algorithm_get_client' => 'gnutls_sign_algorithm_get_client@@GNUTLS_3_4', - 'gnutls_sign_algorithm_get_requested' => 'gnutls_sign_algorithm_get_requested@@GNUTLS_3_4', - 'gnutls_sign_get_hash_algorithm' => 'gnutls_sign_get_hash_algorithm@@GNUTLS_3_4', - 'gnutls_sign_get_id' => 'gnutls_sign_get_id@@GNUTLS_3_4', - 'gnutls_sign_get_name' => 'gnutls_sign_get_name@@GNUTLS_3_4', - 'gnutls_sign_get_oid' => 'gnutls_sign_get_oid@@GNUTLS_3_4', - 'gnutls_sign_get_pk_algorithm' => 'gnutls_sign_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_sign_is_secure' => 'gnutls_sign_is_secure@@GNUTLS_3_4', - 'gnutls_sign_list' => 'gnutls_sign_list@@GNUTLS_3_4', - 'gnutls_srp_1024_group_generator' => 'gnutls_srp_1024_group_generator@@GNUTLS_3_4', - 'gnutls_srp_1024_group_prime' => 'gnutls_srp_1024_group_prime@@GNUTLS_3_4', - 'gnutls_srp_1536_group_generator' => 'gnutls_srp_1536_group_generator@@GNUTLS_3_4', - 'gnutls_srp_1536_group_prime' => 'gnutls_srp_1536_group_prime@@GNUTLS_3_4', - 'gnutls_srp_2048_group_generator' => 'gnutls_srp_2048_group_generator@@GNUTLS_3_4', - 'gnutls_srp_2048_group_prime' => 'gnutls_srp_2048_group_prime@@GNUTLS_3_4', - 'gnutls_srp_3072_group_generator' => 'gnutls_srp_3072_group_generator@@GNUTLS_3_4', - 'gnutls_srp_3072_group_prime' => 'gnutls_srp_3072_group_prime@@GNUTLS_3_4', - 'gnutls_srp_4096_group_generator' => 'gnutls_srp_4096_group_generator@@GNUTLS_3_4', - 'gnutls_srp_4096_group_prime' => 'gnutls_srp_4096_group_prime@@GNUTLS_3_4', - 'gnutls_srp_allocate_client_credentials' => 'gnutls_srp_allocate_client_credentials@@GNUTLS_3_4', - 'gnutls_srp_allocate_server_credentials' => 'gnutls_srp_allocate_server_credentials@@GNUTLS_3_4', - 'gnutls_srp_base64_decode' => 'gnutls_srp_base64_decode@@GNUTLS_3_4', - 'gnutls_srp_base64_decode2' => 'gnutls_srp_base64_decode2@@GNUTLS_3_4', - 'gnutls_srp_base64_encode' => 'gnutls_srp_base64_encode@@GNUTLS_3_4', - 'gnutls_srp_base64_encode2' => 'gnutls_srp_base64_encode2@@GNUTLS_3_4', - 'gnutls_srp_free_client_credentials' => 'gnutls_srp_free_client_credentials@@GNUTLS_3_4', - 'gnutls_srp_free_server_credentials' => 'gnutls_srp_free_server_credentials@@GNUTLS_3_4', - 'gnutls_srp_server_get_username' => 'gnutls_srp_server_get_username@@GNUTLS_3_4', - 'gnutls_srp_set_client_credentials' => 'gnutls_srp_set_client_credentials@@GNUTLS_3_4', - 'gnutls_srp_set_client_credentials_function' => 'gnutls_srp_set_client_credentials_function@@GNUTLS_3_4', - 'gnutls_srp_set_prime_bits' => 'gnutls_srp_set_prime_bits@@GNUTLS_3_4', - 'gnutls_srp_set_server_credentials_file' => 'gnutls_srp_set_server_credentials_file@@GNUTLS_3_4', - 'gnutls_srp_set_server_credentials_function' => 'gnutls_srp_set_server_credentials_function@@GNUTLS_3_4', - 'gnutls_srp_set_server_fake_salt_seed' => 'gnutls_srp_set_server_fake_salt_seed@@GNUTLS_3_4', - 'gnutls_srp_verifier' => 'gnutls_srp_verifier@@GNUTLS_3_4', - 'gnutls_srtp_get_keys' => 'gnutls_srtp_get_keys@@GNUTLS_3_4', - 'gnutls_srtp_get_mki' => 'gnutls_srtp_get_mki@@GNUTLS_3_4', - 'gnutls_srtp_get_profile_id' => 'gnutls_srtp_get_profile_id@@GNUTLS_3_4', - 'gnutls_srtp_get_profile_name' => 'gnutls_srtp_get_profile_name@@GNUTLS_3_4', - 'gnutls_srtp_get_selected_profile' => 'gnutls_srtp_get_selected_profile@@GNUTLS_3_4', - 'gnutls_srtp_set_mki' => 'gnutls_srtp_set_mki@@GNUTLS_3_4', - 'gnutls_srtp_set_profile' => 'gnutls_srtp_set_profile@@GNUTLS_3_4', - 'gnutls_srtp_set_profile_direct' => 'gnutls_srtp_set_profile_direct@@GNUTLS_3_4', - 'gnutls_store_commitment' => 'gnutls_store_commitment@@GNUTLS_3_4', - 'gnutls_store_pubkey' => 'gnutls_store_pubkey@@GNUTLS_3_4', - 'gnutls_strdup' => 'gnutls_strdup@@GNUTLS_3_4', - 'gnutls_strerror' => 'gnutls_strerror@@GNUTLS_3_4', - 'gnutls_strerror_name' => 'gnutls_strerror_name@@GNUTLS_3_4', - 'gnutls_subject_alt_names_deinit' => 'gnutls_subject_alt_names_deinit@@GNUTLS_3_4', - 'gnutls_subject_alt_names_get' => 'gnutls_subject_alt_names_get@@GNUTLS_3_4', - 'gnutls_subject_alt_names_init' => 'gnutls_subject_alt_names_init@@GNUTLS_3_4', - 'gnutls_subject_alt_names_set' => 'gnutls_subject_alt_names_set@@GNUTLS_3_4', - 'gnutls_supplemental_get_name' => 'gnutls_supplemental_get_name@@GNUTLS_3_4', - 'gnutls_supplemental_recv' => 'gnutls_supplemental_recv@@GNUTLS_3_4', - 'gnutls_supplemental_register' => 'gnutls_supplemental_register@@GNUTLS_3_4', - 'gnutls_supplemental_send' => 'gnutls_supplemental_send@@GNUTLS_3_4', - 'gnutls_system_key_add_x509' => 'gnutls_system_key_add_x509@@GNUTLS_3_4', - 'gnutls_system_key_delete' => 'gnutls_system_key_delete@@GNUTLS_3_4', - 'gnutls_system_key_iter_deinit' => 'gnutls_system_key_iter_deinit@@GNUTLS_3_4', - 'gnutls_system_key_iter_get_info' => 'gnutls_system_key_iter_get_info@@GNUTLS_3_4', - 'gnutls_system_recv_timeout' => 'gnutls_system_recv_timeout@@GNUTLS_3_4', - 'gnutls_tdb_deinit' => 'gnutls_tdb_deinit@@GNUTLS_3_4', - 'gnutls_tdb_init' => 'gnutls_tdb_init@@GNUTLS_3_4', - 'gnutls_tdb_set_store_commitment_func' => 'gnutls_tdb_set_store_commitment_func@@GNUTLS_3_4', - 'gnutls_tdb_set_store_func' => 'gnutls_tdb_set_store_func@@GNUTLS_3_4', - 'gnutls_tdb_set_verify_func' => 'gnutls_tdb_set_verify_func@@GNUTLS_3_4', - 'gnutls_tpm_get_registered' => 'gnutls_tpm_get_registered@@GNUTLS_3_4', - 'gnutls_tpm_key_list_deinit' => 'gnutls_tpm_key_list_deinit@@GNUTLS_3_4', - 'gnutls_tpm_key_list_get_url' => 'gnutls_tpm_key_list_get_url@@GNUTLS_3_4', - 'gnutls_tpm_privkey_delete' => 'gnutls_tpm_privkey_delete@@GNUTLS_3_4', - 'gnutls_tpm_privkey_generate' => 'gnutls_tpm_privkey_generate@@GNUTLS_3_4', - 'gnutls_transport_get_int' => 'gnutls_transport_get_int@@GNUTLS_3_4', - 'gnutls_transport_get_int2' => 'gnutls_transport_get_int2@@GNUTLS_3_4', - 'gnutls_transport_get_ptr' => 'gnutls_transport_get_ptr@@GNUTLS_3_4', - 'gnutls_transport_get_ptr2' => 'gnutls_transport_get_ptr2@@GNUTLS_3_4', - 'gnutls_transport_set_errno' => 'gnutls_transport_set_errno@@GNUTLS_3_4', - 'gnutls_transport_set_errno_function' => 'gnutls_transport_set_errno_function@@GNUTLS_3_4', - 'gnutls_transport_set_int2' => 'gnutls_transport_set_int2@@GNUTLS_3_4', - 'gnutls_transport_set_ptr' => 'gnutls_transport_set_ptr@@GNUTLS_3_4', - 'gnutls_transport_set_ptr2' => 'gnutls_transport_set_ptr2@@GNUTLS_3_4', - 'gnutls_transport_set_pull_function' => 'gnutls_transport_set_pull_function@@GNUTLS_3_4', - 'gnutls_transport_set_pull_timeout_function' => 'gnutls_transport_set_pull_timeout_function@@GNUTLS_3_4', - 'gnutls_transport_set_push_function' => 'gnutls_transport_set_push_function@@GNUTLS_3_4', - 'gnutls_transport_set_vec_push_function' => 'gnutls_transport_set_vec_push_function@@GNUTLS_3_4', - 'gnutls_url_is_supported' => 'gnutls_url_is_supported@@GNUTLS_3_4', - 'gnutls_verify_stored_pubkey' => 'gnutls_verify_stored_pubkey@@GNUTLS_3_4', - 'gnutls_x509_aia_deinit' => 'gnutls_x509_aia_deinit@@GNUTLS_3_4', - 'gnutls_x509_aia_get' => 'gnutls_x509_aia_get@@GNUTLS_3_4', - 'gnutls_x509_aia_init' => 'gnutls_x509_aia_init@@GNUTLS_3_4', - 'gnutls_x509_aia_set' => 'gnutls_x509_aia_set@@GNUTLS_3_4', - 'gnutls_x509_aki_deinit' => 'gnutls_x509_aki_deinit@@GNUTLS_3_4', - 'gnutls_x509_aki_get_cert_issuer' => 'gnutls_x509_aki_get_cert_issuer@@GNUTLS_3_4', - 'gnutls_x509_aki_get_id' => 'gnutls_x509_aki_get_id@@GNUTLS_3_4', - 'gnutls_x509_aki_init' => 'gnutls_x509_aki_init@@GNUTLS_3_4', - 'gnutls_x509_aki_set_cert_issuer' => 'gnutls_x509_aki_set_cert_issuer@@GNUTLS_3_4', - 'gnutls_x509_aki_set_id' => 'gnutls_x509_aki_set_id@@GNUTLS_3_4', - 'gnutls_x509_crl_check_issuer' => 'gnutls_x509_crl_check_issuer@@GNUTLS_3_4', - 'gnutls_x509_crl_deinit' => 'gnutls_x509_crl_deinit@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_deinit' => 'gnutls_x509_crl_dist_points_deinit@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_get' => 'gnutls_x509_crl_dist_points_get@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_init' => 'gnutls_x509_crl_dist_points_init@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_set' => 'gnutls_x509_crl_dist_points_set@@GNUTLS_3_4', - 'gnutls_x509_crl_export' => 'gnutls_x509_crl_export@@GNUTLS_3_4', - 'gnutls_x509_crl_export2' => 'gnutls_x509_crl_export2@@GNUTLS_3_4', - 'gnutls_x509_crl_get_authority_key_gn_serial' => 'gnutls_x509_crl_get_authority_key_gn_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_get_authority_key_id' => 'gnutls_x509_crl_get_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crl_get_crt_count' => 'gnutls_x509_crl_get_crt_count@@GNUTLS_3_4', - 'gnutls_x509_crl_get_crt_serial' => 'gnutls_x509_crl_get_crt_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_get_dn_oid' => 'gnutls_x509_crl_get_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_data' => 'gnutls_x509_crl_get_extension_data@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_data2' => 'gnutls_x509_crl_get_extension_data2@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_info' => 'gnutls_x509_crl_get_extension_info@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_oid' => 'gnutls_x509_crl_get_extension_oid@@GNUTLS_3_4', - 'gnutls_x509_crl_get_issuer_dn' => 'gnutls_x509_crl_get_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crl_get_issuer_dn2' => 'gnutls_x509_crl_get_issuer_dn2@@GNUTLS_3_4', - 'gnutls_x509_crl_get_issuer_dn_by_oid' => 'gnutls_x509_crl_get_issuer_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crl_get_next_update' => 'gnutls_x509_crl_get_next_update@@GNUTLS_3_4', - 'gnutls_x509_crl_get_number' => 'gnutls_x509_crl_get_number@@GNUTLS_3_4', - 'gnutls_x509_crl_get_raw_issuer_dn' => 'gnutls_x509_crl_get_raw_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crl_get_signature' => 'gnutls_x509_crl_get_signature@@GNUTLS_3_4', - 'gnutls_x509_crl_get_signature_algorithm' => 'gnutls_x509_crl_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crl_get_this_update' => 'gnutls_x509_crl_get_this_update@@GNUTLS_3_4', - 'gnutls_x509_crl_get_version' => 'gnutls_x509_crl_get_version@@GNUTLS_3_4', - 'gnutls_x509_crl_import' => 'gnutls_x509_crl_import@@GNUTLS_3_4', - 'gnutls_x509_crl_init' => 'gnutls_x509_crl_init@@GNUTLS_3_4', - 'gnutls_x509_crl_iter_crt_serial' => 'gnutls_x509_crl_iter_crt_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_iter_deinit' => 'gnutls_x509_crl_iter_deinit@@GNUTLS_3_4', - 'gnutls_x509_crl_list_import' => 'gnutls_x509_crl_list_import@@GNUTLS_3_4', - 'gnutls_x509_crl_list_import2' => 'gnutls_x509_crl_list_import2@@GNUTLS_3_4', - 'gnutls_x509_crl_print' => 'gnutls_x509_crl_print@@GNUTLS_3_4', - 'gnutls_x509_crl_privkey_sign' => 'gnutls_x509_crl_privkey_sign@@GNUTLS_3_4', - 'gnutls_x509_crl_set_authority_key_id' => 'gnutls_x509_crl_set_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crl_set_crt' => 'gnutls_x509_crl_set_crt@@GNUTLS_3_4', - 'gnutls_x509_crl_set_crt_serial' => 'gnutls_x509_crl_set_crt_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_set_next_update' => 'gnutls_x509_crl_set_next_update@@GNUTLS_3_4', - 'gnutls_x509_crl_set_number' => 'gnutls_x509_crl_set_number@@GNUTLS_3_4', - 'gnutls_x509_crl_set_this_update' => 'gnutls_x509_crl_set_this_update@@GNUTLS_3_4', - 'gnutls_x509_crl_set_version' => 'gnutls_x509_crl_set_version@@GNUTLS_3_4', - 'gnutls_x509_crl_sign' => 'gnutls_x509_crl_sign@@GNUTLS_3_4', - 'gnutls_x509_crl_sign2' => 'gnutls_x509_crl_sign2@@GNUTLS_3_4', - 'gnutls_x509_crl_verify' => 'gnutls_x509_crl_verify@@GNUTLS_3_4', - 'gnutls_x509_crq_deinit' => 'gnutls_x509_crq_deinit@@GNUTLS_3_4', - 'gnutls_x509_crq_export' => 'gnutls_x509_crq_export@@GNUTLS_3_4', - 'gnutls_x509_crq_export2' => 'gnutls_x509_crq_export2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_attribute_by_oid' => 'gnutls_x509_crq_get_attribute_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_attribute_data' => 'gnutls_x509_crq_get_attribute_data@@GNUTLS_3_4', - 'gnutls_x509_crq_get_attribute_info' => 'gnutls_x509_crq_get_attribute_info@@GNUTLS_3_4', - 'gnutls_x509_crq_get_basic_constraints' => 'gnutls_x509_crq_get_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crq_get_challenge_password' => 'gnutls_x509_crq_get_challenge_password@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn' => 'gnutls_x509_crq_get_dn@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn2' => 'gnutls_x509_crq_get_dn2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn_by_oid' => 'gnutls_x509_crq_get_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn_oid' => 'gnutls_x509_crq_get_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_by_oid' => 'gnutls_x509_crq_get_extension_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_by_oid2' => 'gnutls_x509_crq_get_extension_by_oid2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_data' => 'gnutls_x509_crq_get_extension_data@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_data2' => 'gnutls_x509_crq_get_extension_data2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_info' => 'gnutls_x509_crq_get_extension_info@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_id' => 'gnutls_x509_crq_get_key_id@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_purpose_oid' => 'gnutls_x509_crq_get_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_rsa_raw' => 'gnutls_x509_crq_get_key_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_usage' => 'gnutls_x509_crq_get_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crq_get_pk_algorithm' => 'gnutls_x509_crq_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crq_get_private_key_usage_period' => 'gnutls_x509_crq_get_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crq_get_signature_algorithm' => 'gnutls_x509_crq_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crq_get_subject_alt_name' => 'gnutls_x509_crq_get_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crq_get_subject_alt_othername_oid' => 'gnutls_x509_crq_get_subject_alt_othername_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_version' => 'gnutls_x509_crq_get_version@@GNUTLS_3_4', - 'gnutls_x509_crq_import' => 'gnutls_x509_crq_import@@GNUTLS_3_4', - 'gnutls_x509_crq_init' => 'gnutls_x509_crq_init@@GNUTLS_3_4', - 'gnutls_x509_crq_print' => 'gnutls_x509_crq_print@@GNUTLS_3_4', - 'gnutls_x509_crq_privkey_sign' => 'gnutls_x509_crq_privkey_sign@@GNUTLS_3_4', - 'gnutls_x509_crq_set_attribute_by_oid' => 'gnutls_x509_crq_set_attribute_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_set_basic_constraints' => 'gnutls_x509_crq_set_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crq_set_challenge_password' => 'gnutls_x509_crq_set_challenge_password@@GNUTLS_3_4', - 'gnutls_x509_crq_set_dn' => 'gnutls_x509_crq_set_dn@@GNUTLS_3_4', - 'gnutls_x509_crq_set_dn_by_oid' => 'gnutls_x509_crq_set_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key' => 'gnutls_x509_crq_set_key@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key_purpose_oid' => 'gnutls_x509_crq_set_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key_rsa_raw' => 'gnutls_x509_crq_set_key_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key_usage' => 'gnutls_x509_crq_set_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crq_set_private_key_usage_period' => 'gnutls_x509_crq_set_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crq_set_pubkey' => 'gnutls_x509_crq_set_pubkey@@GNUTLS_3_4', - 'gnutls_x509_crq_set_subject_alt_name' => 'gnutls_x509_crq_set_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crq_set_version' => 'gnutls_x509_crq_set_version@@GNUTLS_3_4', - 'gnutls_x509_crq_sign' => 'gnutls_x509_crq_sign@@GNUTLS_3_4', - 'gnutls_x509_crq_sign2' => 'gnutls_x509_crq_sign2@@GNUTLS_3_4', - 'gnutls_x509_crq_verify' => 'gnutls_x509_crq_verify@@GNUTLS_3_4', - 'gnutls_x509_crt_check_email' => 'gnutls_x509_crt_check_email@@GNUTLS_3_4', - 'gnutls_x509_crt_check_hostname' => 'gnutls_x509_crt_check_hostname@@GNUTLS_3_4', - 'gnutls_x509_crt_check_hostname2' => 'gnutls_x509_crt_check_hostname2@@GNUTLS_3_4', - 'gnutls_x509_crt_check_issuer' => 'gnutls_x509_crt_check_issuer@@GNUTLS_3_4', - 'gnutls_x509_crt_check_revocation' => 'gnutls_x509_crt_check_revocation@@GNUTLS_3_4', - 'gnutls_x509_crt_cpy_crl_dist_points' => 'gnutls_x509_crt_cpy_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_crt_deinit' => 'gnutls_x509_crt_deinit@@GNUTLS_3_4', - 'gnutls_x509_crt_export' => 'gnutls_x509_crt_export@@GNUTLS_3_4', - 'gnutls_x509_crt_export2' => 'gnutls_x509_crt_export2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_activation_time' => 'gnutls_x509_crt_get_activation_time@@GNUTLS_3_4', - 'gnutls_x509_crt_get_authority_info_access' => 'gnutls_x509_crt_get_authority_info_access@@GNUTLS_3_4', - 'gnutls_x509_crt_get_authority_key_gn_serial' => 'gnutls_x509_crt_get_authority_key_gn_serial@@GNUTLS_3_4', - 'gnutls_x509_crt_get_authority_key_id' => 'gnutls_x509_crt_get_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_basic_constraints' => 'gnutls_x509_crt_get_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_get_ca_status' => 'gnutls_x509_crt_get_ca_status@@GNUTLS_3_4', - 'gnutls_x509_crt_get_crl_dist_points' => 'gnutls_x509_crt_get_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn' => 'gnutls_x509_crt_get_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn2' => 'gnutls_x509_crt_get_dn2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn_by_oid' => 'gnutls_x509_crt_get_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn_oid' => 'gnutls_x509_crt_get_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_expiration_time' => 'gnutls_x509_crt_get_expiration_time@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_by_oid' => 'gnutls_x509_crt_get_extension_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_by_oid2' => 'gnutls_x509_crt_get_extension_by_oid2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_data' => 'gnutls_x509_crt_get_extension_data@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_data2' => 'gnutls_x509_crt_get_extension_data2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_info' => 'gnutls_x509_crt_get_extension_info@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_oid' => 'gnutls_x509_crt_get_extension_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_fingerprint' => 'gnutls_x509_crt_get_fingerprint@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer' => 'gnutls_x509_crt_get_issuer@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_alt_name' => 'gnutls_x509_crt_get_issuer_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_alt_name2' => 'gnutls_x509_crt_get_issuer_alt_name2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_alt_othername_oid' => 'gnutls_x509_crt_get_issuer_alt_othername_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn' => 'gnutls_x509_crt_get_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn2' => 'gnutls_x509_crt_get_issuer_dn2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn_by_oid' => 'gnutls_x509_crt_get_issuer_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn_oid' => 'gnutls_x509_crt_get_issuer_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_unique_id' => 'gnutls_x509_crt_get_issuer_unique_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_key_id' => 'gnutls_x509_crt_get_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_key_purpose_oid' => 'gnutls_x509_crt_get_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_key_usage' => 'gnutls_x509_crt_get_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crt_get_name_constraints' => 'gnutls_x509_crt_get_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_algorithm' => 'gnutls_x509_crt_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_dsa_raw' => 'gnutls_x509_crt_get_pk_dsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_ecc_raw' => 'gnutls_x509_crt_get_pk_ecc_raw@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_rsa_raw' => 'gnutls_x509_crt_get_pk_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crt_get_policy' => 'gnutls_x509_crt_get_policy@@GNUTLS_3_4', - 'gnutls_x509_crt_get_preferred_hash_algorithm' => 'gnutls_x509_crt_get_preferred_hash_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crt_get_private_key_usage_period' => 'gnutls_x509_crt_get_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crt_get_proxy' => 'gnutls_x509_crt_get_proxy@@GNUTLS_3_4', - 'gnutls_x509_crt_get_raw_dn' => 'gnutls_x509_crt_get_raw_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_raw_issuer_dn' => 'gnutls_x509_crt_get_raw_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_serial' => 'gnutls_x509_crt_get_serial@@GNUTLS_3_4', - 'gnutls_x509_crt_get_signature' => 'gnutls_x509_crt_get_signature@@GNUTLS_3_4', - 'gnutls_x509_crt_get_signature_algorithm' => 'gnutls_x509_crt_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject' => 'gnutls_x509_crt_get_subject@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_alt_name' => 'gnutls_x509_crt_get_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_alt_name2' => 'gnutls_x509_crt_get_subject_alt_name2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_alt_othername_oid' => 'gnutls_x509_crt_get_subject_alt_othername_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_key_id' => 'gnutls_x509_crt_get_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_unique_id' => 'gnutls_x509_crt_get_subject_unique_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_version' => 'gnutls_x509_crt_get_version@@GNUTLS_3_4', - 'gnutls_x509_crt_import' => 'gnutls_x509_crt_import@@GNUTLS_3_4', - 'gnutls_x509_crt_import_pkcs11' => 'gnutls_x509_crt_import_pkcs11@@GNUTLS_3_4', - 'gnutls_x509_crt_import_url' => 'gnutls_x509_crt_import_url@@GNUTLS_3_4', - 'gnutls_x509_crt_init' => 'gnutls_x509_crt_init@@GNUTLS_3_4', - 'gnutls_x509_crt_list_import' => 'gnutls_x509_crt_list_import@@GNUTLS_3_4', - 'gnutls_x509_crt_list_import2' => 'gnutls_x509_crt_list_import2@@GNUTLS_3_4', - 'gnutls_x509_crt_list_import_pkcs11' => 'gnutls_x509_crt_list_import_pkcs11@@GNUTLS_3_4', - 'gnutls_x509_crt_list_verify' => 'gnutls_x509_crt_list_verify@@GNUTLS_3_4', - 'gnutls_x509_crt_print' => 'gnutls_x509_crt_print@@GNUTLS_3_4', - 'gnutls_x509_crt_privkey_sign' => 'gnutls_x509_crt_privkey_sign@@GNUTLS_3_4', - 'gnutls_x509_crt_set_activation_time' => 'gnutls_x509_crt_set_activation_time@@GNUTLS_3_4', - 'gnutls_x509_crt_set_authority_info_access' => 'gnutls_x509_crt_set_authority_info_access@@GNUTLS_3_4', - 'gnutls_x509_crt_set_authority_key_id' => 'gnutls_x509_crt_set_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_set_basic_constraints' => 'gnutls_x509_crt_set_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_set_ca_status' => 'gnutls_x509_crt_set_ca_status@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crl_dist_points' => 'gnutls_x509_crt_set_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crl_dist_points2' => 'gnutls_x509_crt_set_crl_dist_points2@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crq' => 'gnutls_x509_crt_set_crq@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crq_extensions' => 'gnutls_x509_crt_set_crq_extensions@@GNUTLS_3_4', - 'gnutls_x509_crt_set_dn' => 'gnutls_x509_crt_set_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_set_dn_by_oid' => 'gnutls_x509_crt_set_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_expiration_time' => 'gnutls_x509_crt_set_expiration_time@@GNUTLS_3_4', - 'gnutls_x509_crt_set_extension_by_oid' => 'gnutls_x509_crt_set_extension_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_alt_name' => 'gnutls_x509_crt_set_issuer_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_dn' => 'gnutls_x509_crt_set_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_dn_by_oid' => 'gnutls_x509_crt_set_issuer_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_unique_id' => 'gnutls_x509_crt_set_issuer_unique_id@@GNUTLS_3_4', - 'gnutls_x509_crt_set_key' => 'gnutls_x509_crt_set_key@@GNUTLS_3_4', - 'gnutls_x509_crt_set_key_purpose_oid' => 'gnutls_x509_crt_set_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_key_usage' => 'gnutls_x509_crt_set_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crt_set_name_constraints' => 'gnutls_x509_crt_set_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_set_pin_function' => 'gnutls_x509_crt_set_pin_function@@GNUTLS_3_4', - 'gnutls_x509_crt_set_policy' => 'gnutls_x509_crt_set_policy@@GNUTLS_3_4', - 'gnutls_x509_crt_set_private_key_usage_period' => 'gnutls_x509_crt_set_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crt_set_proxy' => 'gnutls_x509_crt_set_proxy@@GNUTLS_3_4', - 'gnutls_x509_crt_set_proxy_dn' => 'gnutls_x509_crt_set_proxy_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_set_pubkey' => 'gnutls_x509_crt_set_pubkey@@GNUTLS_3_4', - 'gnutls_x509_crt_set_serial' => 'gnutls_x509_crt_set_serial@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_alt_name' => 'gnutls_x509_crt_set_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_alternative_name' => 'gnutls_x509_crt_set_subject_alternative_name@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_key_id' => 'gnutls_x509_crt_set_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_unique_id' => 'gnutls_x509_crt_set_subject_unique_id@@GNUTLS_3_4', - 'gnutls_x509_crt_set_version' => 'gnutls_x509_crt_set_version@@GNUTLS_3_4', - 'gnutls_x509_crt_sign' => 'gnutls_x509_crt_sign@@GNUTLS_3_4', - 'gnutls_x509_crt_sign2' => 'gnutls_x509_crt_sign2@@GNUTLS_3_4', - 'gnutls_x509_crt_verify' => 'gnutls_x509_crt_verify@@GNUTLS_3_4', - 'gnutls_x509_crt_verify_data2' => 'gnutls_x509_crt_verify_data2@@GNUTLS_3_4', - 'gnutls_x509_dn_deinit' => 'gnutls_x509_dn_deinit@@GNUTLS_3_4', - 'gnutls_x509_dn_export' => 'gnutls_x509_dn_export@@GNUTLS_3_4', - 'gnutls_x509_dn_export2' => 'gnutls_x509_dn_export2@@GNUTLS_3_4', - 'gnutls_x509_dn_get_rdn_ava' => 'gnutls_x509_dn_get_rdn_ava@@GNUTLS_3_4', - 'gnutls_x509_dn_get_str' => 'gnutls_x509_dn_get_str@@GNUTLS_3_4', - 'gnutls_x509_dn_import' => 'gnutls_x509_dn_import@@GNUTLS_3_4', - 'gnutls_x509_dn_init' => 'gnutls_x509_dn_init@@GNUTLS_3_4', - 'gnutls_x509_dn_oid_known' => 'gnutls_x509_dn_oid_known@@GNUTLS_3_4', - 'gnutls_x509_dn_oid_name' => 'gnutls_x509_dn_oid_name@@GNUTLS_3_4', - 'gnutls_x509_ext_deinit' => 'gnutls_x509_ext_deinit@@GNUTLS_3_4', - 'gnutls_x509_ext_export_aia' => 'gnutls_x509_ext_export_aia@@GNUTLS_3_4', - 'gnutls_x509_ext_export_authority_key_id' => 'gnutls_x509_ext_export_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_export_basic_constraints' => 'gnutls_x509_ext_export_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_export_crl_dist_points' => 'gnutls_x509_ext_export_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_ext_export_key_purposes' => 'gnutls_x509_ext_export_key_purposes@@GNUTLS_3_4', - 'gnutls_x509_ext_export_key_usage' => 'gnutls_x509_ext_export_key_usage@@GNUTLS_3_4', - 'gnutls_x509_ext_export_name_constraints' => 'gnutls_x509_ext_export_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_export_policies' => 'gnutls_x509_ext_export_policies@@GNUTLS_3_4', - 'gnutls_x509_ext_export_private_key_usage_period' => 'gnutls_x509_ext_export_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_ext_export_proxy' => 'gnutls_x509_ext_export_proxy@@GNUTLS_3_4', - 'gnutls_x509_ext_export_subject_alt_names' => 'gnutls_x509_ext_export_subject_alt_names@@GNUTLS_3_4', - 'gnutls_x509_ext_export_subject_key_id' => 'gnutls_x509_ext_export_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_import_aia' => 'gnutls_x509_ext_import_aia@@GNUTLS_3_4', - 'gnutls_x509_ext_import_authority_key_id' => 'gnutls_x509_ext_import_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_import_basic_constraints' => 'gnutls_x509_ext_import_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_import_crl_dist_points' => 'gnutls_x509_ext_import_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_ext_import_key_purposes' => 'gnutls_x509_ext_import_key_purposes@@GNUTLS_3_4', - 'gnutls_x509_ext_import_key_usage' => 'gnutls_x509_ext_import_key_usage@@GNUTLS_3_4', - 'gnutls_x509_ext_import_name_constraints' => 'gnutls_x509_ext_import_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_import_policies' => 'gnutls_x509_ext_import_policies@@GNUTLS_3_4', - 'gnutls_x509_ext_import_private_key_usage_period' => 'gnutls_x509_ext_import_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_ext_import_proxy' => 'gnutls_x509_ext_import_proxy@@GNUTLS_3_4', - 'gnutls_x509_ext_import_subject_alt_names' => 'gnutls_x509_ext_import_subject_alt_names@@GNUTLS_3_4', - 'gnutls_x509_ext_import_subject_key_id' => 'gnutls_x509_ext_import_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_print' => 'gnutls_x509_ext_print@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_deinit' => 'gnutls_x509_key_purpose_deinit@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_get' => 'gnutls_x509_key_purpose_get@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_init' => 'gnutls_x509_key_purpose_init@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_set' => 'gnutls_x509_key_purpose_set@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_add_excluded' => 'gnutls_x509_name_constraints_add_excluded@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_add_permitted' => 'gnutls_x509_name_constraints_add_permitted@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_check' => 'gnutls_x509_name_constraints_check@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_check_crt' => 'gnutls_x509_name_constraints_check_crt@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_deinit' => 'gnutls_x509_name_constraints_deinit@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_get_excluded' => 'gnutls_x509_name_constraints_get_excluded@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_get_permitted' => 'gnutls_x509_name_constraints_get_permitted@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_init' => 'gnutls_x509_name_constraints_init@@GNUTLS_3_4', - 'gnutls_x509_othername_to_virtual' => 'gnutls_x509_othername_to_virtual@@GNUTLS_3_4', - 'gnutls_x509_policies_deinit' => 'gnutls_x509_policies_deinit@@GNUTLS_3_4', - 'gnutls_x509_policies_get' => 'gnutls_x509_policies_get@@GNUTLS_3_4', - 'gnutls_x509_policies_init' => 'gnutls_x509_policies_init@@GNUTLS_3_4', - 'gnutls_x509_policies_set' => 'gnutls_x509_policies_set@@GNUTLS_3_4', - 'gnutls_x509_policy_release' => 'gnutls_x509_policy_release@@GNUTLS_3_4', - 'gnutls_x509_privkey_cpy' => 'gnutls_x509_privkey_cpy@@GNUTLS_3_4', - 'gnutls_x509_privkey_deinit' => 'gnutls_x509_privkey_deinit@@GNUTLS_3_4', - 'gnutls_x509_privkey_export' => 'gnutls_x509_privkey_export@@GNUTLS_3_4', - 'gnutls_x509_privkey_export2' => 'gnutls_x509_privkey_export2@@GNUTLS_3_4', - 'gnutls_x509_privkey_export2_pkcs8' => 'gnutls_x509_privkey_export2_pkcs8@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_dsa_raw' => 'gnutls_x509_privkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_ecc_raw' => 'gnutls_x509_privkey_export_ecc_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_pkcs8' => 'gnutls_x509_privkey_export_pkcs8@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_rsa_raw' => 'gnutls_x509_privkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_rsa_raw2' => 'gnutls_x509_privkey_export_rsa_raw2@@GNUTLS_3_4', - 'gnutls_x509_privkey_fix' => 'gnutls_x509_privkey_fix@@GNUTLS_3_4', - 'gnutls_x509_privkey_generate' => 'gnutls_x509_privkey_generate@@GNUTLS_3_4', - 'gnutls_x509_privkey_get_key_id' => 'gnutls_x509_privkey_get_key_id@@GNUTLS_3_4', - 'gnutls_x509_privkey_get_pk_algorithm' => 'gnutls_x509_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_x509_privkey_get_pk_algorithm2' => 'gnutls_x509_privkey_get_pk_algorithm2@@GNUTLS_3_4', - 'gnutls_x509_privkey_import' => 'gnutls_x509_privkey_import@@GNUTLS_3_4', - 'gnutls_x509_privkey_import2' => 'gnutls_x509_privkey_import2@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_dsa_raw' => 'gnutls_x509_privkey_import_dsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_ecc_raw' => 'gnutls_x509_privkey_import_ecc_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_openssl' => 'gnutls_x509_privkey_import_openssl@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_pkcs8' => 'gnutls_x509_privkey_import_pkcs8@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_rsa_raw' => 'gnutls_x509_privkey_import_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_rsa_raw2' => 'gnutls_x509_privkey_import_rsa_raw2@@GNUTLS_3_4', - 'gnutls_x509_privkey_init' => 'gnutls_x509_privkey_init@@GNUTLS_3_4', - 'gnutls_x509_privkey_sec_param' => 'gnutls_x509_privkey_sec_param@@GNUTLS_3_4', - 'gnutls_x509_privkey_set_pin_function' => 'gnutls_x509_privkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_x509_privkey_sign_data' => 'gnutls_x509_privkey_sign_data@@GNUTLS_3_4', - 'gnutls_x509_privkey_sign_hash' => 'gnutls_x509_privkey_sign_hash@@GNUTLS_3_4', - 'gnutls_x509_privkey_verify_params' => 'gnutls_x509_privkey_verify_params@@GNUTLS_3_4', - 'gnutls_x509_rdn_get' => 'gnutls_x509_rdn_get@@GNUTLS_3_4', - 'gnutls_x509_rdn_get_by_oid' => 'gnutls_x509_rdn_get_by_oid@@GNUTLS_3_4', - 'gnutls_x509_rdn_get_oid' => 'gnutls_x509_rdn_get_oid@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_cas' => 'gnutls_x509_trust_list_add_cas@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_crls' => 'gnutls_x509_trust_list_add_crls@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_named_crt' => 'gnutls_x509_trust_list_add_named_crt@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_system_trust' => 'gnutls_x509_trust_list_add_system_trust@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_trust_dir' => 'gnutls_x509_trust_list_add_trust_dir@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_trust_file' => 'gnutls_x509_trust_list_add_trust_file@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_trust_mem' => 'gnutls_x509_trust_list_add_trust_mem@@GNUTLS_3_4', - 'gnutls_x509_trust_list_deinit' => 'gnutls_x509_trust_list_deinit@@GNUTLS_3_4', - 'gnutls_x509_trust_list_get_issuer' => 'gnutls_x509_trust_list_get_issuer@@GNUTLS_3_4', - 'gnutls_x509_trust_list_get_issuer_by_dn' => 'gnutls_x509_trust_list_get_issuer_by_dn@@GNUTLS_3_4', - 'gnutls_x509_trust_list_get_issuer_by_subject_key_id' => 'gnutls_x509_trust_list_get_issuer_by_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_trust_list_init' => 'gnutls_x509_trust_list_init@@GNUTLS_3_4', - 'gnutls_x509_trust_list_iter_deinit' => 'gnutls_x509_trust_list_iter_deinit@@GNUTLS_3_4', - 'gnutls_x509_trust_list_iter_get_ca' => 'gnutls_x509_trust_list_iter_get_ca@@GNUTLS_3_4', - 'gnutls_x509_trust_list_remove_cas' => 'gnutls_x509_trust_list_remove_cas@@GNUTLS_3_4', - 'gnutls_x509_trust_list_remove_trust_file' => 'gnutls_x509_trust_list_remove_trust_file@@GNUTLS_3_4', - 'gnutls_x509_trust_list_remove_trust_mem' => 'gnutls_x509_trust_list_remove_trust_mem@@GNUTLS_3_4', - 'gnutls_x509_trust_list_verify_crt' => 'gnutls_x509_trust_list_verify_crt@@GNUTLS_3_4', - 'gnutls_x509_trust_list_verify_crt2' => 'gnutls_x509_trust_list_verify_crt2@@GNUTLS_3_4', - 'gnutls_x509_trust_list_verify_named_crt' => 'gnutls_x509_trust_list_verify_named_crt@@GNUTLS_3_4', - 'inflate' => 'writev@@GLIBC_2.2.5', - 'inflateEnd' => 'writev@@GLIBC_2.2.5', - 'inflateInit2_' => 'writev@@GLIBC_2.2.5', - 'p11_kit_config_option' => 'writev@@GLIBC_2.2.5', - 'p11_kit_message' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_finalize' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_get_flags' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_get_name' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_initialize' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_load' => 'writev@@GLIBC_2.2.5', - 'p11_kit_module_release' => 'writev@@GLIBC_2.2.5', - 'p11_kit_modules_load_and_initialize' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_file_callback' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_get_length' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_get_value' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_new_for_string' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_register_callback' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_request' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_unref' => 'writev@@GLIBC_2.2.5', - 'p11_kit_pin_unregister_callback' => 'writev@@GLIBC_2.2.5', - 'p11_kit_space_strdup' => 'writev@@GLIBC_2.2.5', - 'p11_kit_space_strlen' => 'writev@@GLIBC_2.2.5', - 'p11_kit_strerror' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_format' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_free' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_attribute' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_attributes' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_module_info' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_pin_source' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_pin_value' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_get_token_info' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_match_module_info' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_match_token_info' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_new' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_parse' => 'writev@@GLIBC_2.2.5', - 'p11_kit_uri_set_attribute' => 'writev@@GLIBC_2.2.5' - }, - 'Symbols' => { - 'libgnutls.so.30.7.0' => { - '_gnutls_bin2hex@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_buffer_append_str@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_buffer_init@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_buffer_to_datum@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_encode_ber_rs_raw@@GNUTLS_FIPS140_3_4' => 1, - '_gnutls_global_init_skip@@GNUTLS_3_4' => 1, - '_gnutls_hello_set_default_version@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_lib_simulate_error@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_log@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_log_level@@GNUTLS_PRIVATE_3_4' => -4, - '_gnutls_mac_to_entry@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_mpi_log@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_mpi_ops@@GNUTLS_PRIVATE_3_4' => -200, - '_gnutls_pkcs12_string_to_key@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_record_set_default_version@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_rsa_pms_set_version@@GNUTLS_PRIVATE_3_4' => 1, - 'gnutls_aead_cipher_decrypt@@GNUTLS_3_4' => 1, - 'gnutls_aead_cipher_deinit@@GNUTLS_3_4' => 1, - 'gnutls_aead_cipher_encrypt@@GNUTLS_3_4' => 1, - 'gnutls_aead_cipher_init@@GNUTLS_3_4' => 1, - 'gnutls_alert_get@@GNUTLS_3_4' => 1, - 'gnutls_alert_get_name@@GNUTLS_3_4' => 1, - 'gnutls_alert_get_strname@@GNUTLS_3_4' => 1, - 'gnutls_alert_send@@GNUTLS_3_4' => 1, - 'gnutls_alert_send_appropriate@@GNUTLS_3_4' => 1, - 'gnutls_alpn_get_selected_protocol@@GNUTLS_3_4' => 1, - 'gnutls_alpn_set_protocols@@GNUTLS_3_4' => 1, - 'gnutls_anon_allocate_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_allocate_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_free_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_free_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_set_params_function@@GNUTLS_3_4' => 1, - 'gnutls_anon_set_server_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_anon_set_server_params_function@@GNUTLS_3_4' => 1, - 'gnutls_auth_client_get_type@@GNUTLS_3_4' => 1, - 'gnutls_auth_get_type@@GNUTLS_3_4' => 1, - 'gnutls_auth_server_get_type@@GNUTLS_3_4' => 1, - 'gnutls_buffer_append_data@@GNUTLS_3_4' => 1, - 'gnutls_bye@@GNUTLS_3_4' => 1, - 'gnutls_calloc@@GNUTLS_3_4' => -8, - 'gnutls_certificate_activation_time_peers@@GNUTLS_3_4' => 1, - 'gnutls_certificate_allocate_credentials@@GNUTLS_3_4' => 1, - 'gnutls_certificate_client_get_request_status@@GNUTLS_3_4' => 1, - 'gnutls_certificate_expiration_time_peers@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_ca_names@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_cas@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_credentials@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_crls@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_keys@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_crt_raw@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_issuer@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_openpgp_crt@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_openpgp_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_ours@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_peers@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_peers_subkey_id@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_trust_list@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_verify_flags@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_x509_crt@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_x509_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_send_x509_rdn_sequence@@GNUTLS_3_4' => 1, - 'gnutls_certificate_server_set_request@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_flags@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_ocsp_status_request_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_ocsp_status_request_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_file2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_mem2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_keyring_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_keyring_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_params_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_retrieve_function2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_retrieve_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_trust_list@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_verify_flags@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_verify_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_verify_limits@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_crl@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_crl_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_crl_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_file2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_mem2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_simple_pkcs12_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_simple_pkcs12_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_system_trust@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust_dir@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_get@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_get_id@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_get_name@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_list@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verification_status_print@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verify_peers2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verify_peers3@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verify_peers@@GNUTLS_3_4' => 1, - 'gnutls_check_version@@GNUTLS_3_4' => 1, - 'gnutls_cipher_add_auth@@GNUTLS_3_4' => 1, - 'gnutls_cipher_decrypt2@@GNUTLS_3_4' => 1, - 'gnutls_cipher_decrypt@@GNUTLS_3_4' => 1, - 'gnutls_cipher_deinit@@GNUTLS_3_4' => 1, - 'gnutls_cipher_encrypt2@@GNUTLS_3_4' => 1, - 'gnutls_cipher_encrypt@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_block_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_id@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_iv_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_key_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_name@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_tag_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_init@@GNUTLS_3_4' => 1, - 'gnutls_cipher_list@@GNUTLS_3_4' => 1, - 'gnutls_cipher_set_iv@@GNUTLS_3_4' => 1, - 'gnutls_cipher_suite_get_name@@GNUTLS_3_4' => 1, - 'gnutls_cipher_suite_info@@GNUTLS_3_4' => 1, - 'gnutls_cipher_tag@@GNUTLS_3_4' => 1, - 'gnutls_compression_get@@GNUTLS_3_4' => 1, - 'gnutls_compression_get_id@@GNUTLS_3_4' => 1, - 'gnutls_compression_get_name@@GNUTLS_3_4' => 1, - 'gnutls_compression_list@@GNUTLS_3_4' => 1, - 'gnutls_credentials_clear@@GNUTLS_3_4' => 1, - 'gnutls_credentials_get@@GNUTLS_3_4' => 1, - 'gnutls_credentials_set@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_aead_cipher@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_cipher@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_digest@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_mac@@GNUTLS_3_4' => 1, - 'gnutls_db_check_entry@@GNUTLS_3_4' => 1, - 'gnutls_db_check_entry_time@@GNUTLS_3_4' => 1, - 'gnutls_db_get_default_cache_expiration@@GNUTLS_3_4' => 1, - 'gnutls_db_get_ptr@@GNUTLS_3_4' => 1, - 'gnutls_db_remove_session@@GNUTLS_3_4' => 1, - 'gnutls_db_set_cache_expiration@@GNUTLS_3_4' => 1, - 'gnutls_db_set_ptr@@GNUTLS_3_4' => 1, - 'gnutls_db_set_remove_function@@GNUTLS_3_4' => 1, - 'gnutls_db_set_retrieve_function@@GNUTLS_3_4' => 1, - 'gnutls_db_set_store_function@@GNUTLS_3_4' => 1, - 'gnutls_deinit@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_group@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_peers_public_bits@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_prime_bits@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_secret_bits@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_cpy@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_deinit@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_export2_pkcs3@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_export_pkcs3@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_export_raw@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_generate2@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_import_pkcs3@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_import_raw2@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_import_raw@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_init@@GNUTLS_3_4' => 1, - 'gnutls_dh_set_prime_bits@@GNUTLS_3_4' => 1, - 'gnutls_digest_get_id@@GNUTLS_3_4' => 1, - 'gnutls_digest_get_name@@GNUTLS_3_4' => 1, - 'gnutls_digest_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_digest_list@@GNUTLS_3_4' => 1, - 'gnutls_dtls_cookie_send@@GNUTLS_3_4' => 1, - 'gnutls_dtls_cookie_verify@@GNUTLS_3_4' => 1, - 'gnutls_dtls_get_data_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_get_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_get_timeout@@GNUTLS_3_4' => 1, - 'gnutls_dtls_prestate_set@@GNUTLS_3_4' => 1, - 'gnutls_dtls_set_data_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_set_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_set_timeouts@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get_id@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get_name@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get_size@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_list@@GNUTLS_3_4' => 1, - 'gnutls_error_is_fatal@@GNUTLS_3_4' => 1, - 'gnutls_error_to_alert@@GNUTLS_3_4' => 1, - 'gnutls_est_record_overhead_size@@GNUTLS_3_4' => 1, - 'gnutls_ext_get_data@@GNUTLS_3_4' => 1, - 'gnutls_ext_register@@GNUTLS_3_4' => 1, - 'gnutls_ext_set_data@@GNUTLS_3_4' => 1, - 'gnutls_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_fips140_mode_enabled@@GNUTLS_3_4' => 1, - 'gnutls_free@@GNUTLS_3_4' => -8, - 'gnutls_global_deinit@@GNUTLS_3_4' => 1, - 'gnutls_global_init@@GNUTLS_3_4' => 1, - 'gnutls_global_set_audit_log_function@@GNUTLS_3_4' => 1, - 'gnutls_global_set_log_function@@GNUTLS_3_4' => 1, - 'gnutls_global_set_log_level@@GNUTLS_3_4' => 1, - 'gnutls_global_set_mem_functions@@GNUTLS_3_4' => 1, - 'gnutls_global_set_mutex@@GNUTLS_3_4' => 1, - 'gnutls_global_set_time_function@@GNUTLS_3_4' => 1, - 'gnutls_handshake@@GNUTLS_3_4' => 1, - 'gnutls_handshake_description_get_name@@GNUTLS_3_4' => 1, - 'gnutls_handshake_get_last_in@@GNUTLS_3_4' => 1, - 'gnutls_handshake_get_last_out@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_hook_function@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_max_packet_length@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_post_client_hello_function@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_private_extensions@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_random@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_timeout@@GNUTLS_3_4' => 1, - 'gnutls_hash@@GNUTLS_3_4' => 1, - 'gnutls_hash_deinit@@GNUTLS_3_4' => 1, - 'gnutls_hash_fast@@GNUTLS_3_4' => 1, - 'gnutls_hash_get_len@@GNUTLS_3_4' => 1, - 'gnutls_hash_init@@GNUTLS_3_4' => 1, - 'gnutls_hash_output@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_allowed@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_enable@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_get_timeout@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_ping@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_pong@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_set_timeouts@@GNUTLS_3_4' => 1, - 'gnutls_hex2bin@@GNUTLS_3_4' => 1, - 'gnutls_hex_decode2@@GNUTLS_3_4' => 1, - 'gnutls_hex_decode@@GNUTLS_3_4' => 1, - 'gnutls_hex_encode2@@GNUTLS_3_4' => 1, - 'gnutls_hex_encode@@GNUTLS_3_4' => 1, - 'gnutls_hmac@@GNUTLS_3_4' => 1, - 'gnutls_hmac_deinit@@GNUTLS_3_4' => 1, - 'gnutls_hmac_fast@@GNUTLS_3_4' => 1, - 'gnutls_hmac_get_len@@GNUTLS_3_4' => 1, - 'gnutls_hmac_init@@GNUTLS_3_4' => 1, - 'gnutls_hmac_output@@GNUTLS_3_4' => 1, - 'gnutls_hmac_set_nonce@@GNUTLS_3_4' => 1, - 'gnutls_init@@GNUTLS_3_4' => 1, - 'gnutls_key_generate@@GNUTLS_3_4' => 1, - 'gnutls_kx_get@@GNUTLS_3_4' => 1, - 'gnutls_kx_get_id@@GNUTLS_3_4' => 1, - 'gnutls_kx_get_name@@GNUTLS_3_4' => 1, - 'gnutls_kx_list@@GNUTLS_3_4' => 1, - 'gnutls_load_file@@GNUTLS_3_4' => 1, - 'gnutls_mac_get@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_id@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_key_size@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_name@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_nonce_size@@GNUTLS_3_4' => 1, - 'gnutls_mac_list@@GNUTLS_3_4' => 1, - 'gnutls_malloc@@GNUTLS_3_4' => -8, - 'gnutls_memcmp@@GNUTLS_3_4' => 1, - 'gnutls_memset@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_add_cert@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_add_cert_id@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_deinit@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_export@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_cert_id@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_extension@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_version@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_import@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_init@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_print@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_randomize_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_set_extension@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_set_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_check_crt@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_deinit@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_export@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_certs@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_extension@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_produced@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_responder@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_responder_raw_id@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_response@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_signature@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_single@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_status@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_version@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_import@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_init@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_print@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_verify@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_verify_direct@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_status_request_enable_client@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_status_request_get@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_status_request_is_checked@@GNUTLS_3_4' => 1, - 'gnutls_oid_to_digest@@GNUTLS_3_4' => 1, - 'gnutls_oid_to_ecc_curve@@GNUTLS_3_4' => 1, - 'gnutls_oid_to_pk@@GNUTLS_3_4' => 1, - 'gnutls_oid_to_sign@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_check_email@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_check_hostname2@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_check_hostname@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_deinit@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_export2@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_export@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_auth_subkey@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_creation_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_name@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_pk_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_pk_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_count@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_creation_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_idx@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_usage@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_version@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_import@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_init@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_print@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_set_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_verify_ring@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_verify_self@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_check_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_deinit@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_get_crt@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_get_crt_count@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_import@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_init@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export2@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_subkey_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_subkey_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_count@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_creation_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_idx@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_import@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_sec_param@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_set_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_sign_hash@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_send_cert@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_set_recv_key_function@@GNUTLS_3_4' => 1, - 'gnutls_packet_deinit@@GNUTLS_3_4' => 1, - 'gnutls_packet_get@@GNUTLS_3_4' => 1, - 'gnutls_pcert_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pcert_export_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_pcert_export_x509@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_openpgp_raw@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_x509@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_x509_list@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_pcert_list_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_decode2@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_decode@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_encode2@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_encode@@GNUTLS_3_4' => 1, - 'gnutls_perror@@GNUTLS_3_4' => 1, - 'gnutls_pk_algorithm_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pk_bits_to_sec_param@@GNUTLS_3_4' => 1, - 'gnutls_pk_get_id@@GNUTLS_3_4' => 1, - 'gnutls_pk_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pk_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_pk_list@@GNUTLS_3_4' => 1, - 'gnutls_pk_to_sign@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_add_provider@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_attached_extension@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_secret_key@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_x509_crt2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_x509_privkey2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_crt_is_known@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_delete_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_get_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_get_raw_issuer@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_get_raw_issuer_by_dn@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_get_raw_issuer_by_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export3@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_flags_get_str@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_exts@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_flags@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_type@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_import_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_list_import_url3@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_list_import_url4@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_set_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_cpy@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_export_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_export_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_generate3@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_get_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_import_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_status@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_reinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_set_token_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_flags@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_mechanism@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_random@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_set_pin@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_type_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_decrypt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_enc_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_encrypt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_count@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_data@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_friendly_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_type@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_crl@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_crt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_data@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_friendly_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_privkey@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_export2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_export@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_generate_mac2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_generate_mac@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_get_bag@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_import@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_mac_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_set_bag@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_simple_parse@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_verify_mac@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_add_attr@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_attrs_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_delete_crl@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_delete_crt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_export2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_export@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_attr@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crl_count@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crl_raw2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crl_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crt_count@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crt_raw2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crt_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_embedded_data@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_embedded_data_oid@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_signature_count@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_signature_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_import@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_print@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crl@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crl_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crt_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_sign@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_signature_info_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_verify@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_verify_direct@@GNUTLS_3_4' => 1, - 'gnutls_pkcs8_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs_schema_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs_schema_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_prf@@GNUTLS_3_4' => 1, - 'gnutls_prf_raw@@GNUTLS_3_4' => 1, - 'gnutls_prf_rfc5705@@GNUTLS_3_4' => 1, - 'gnutls_priority_certificate_type_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_cipher_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_compression_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_deinit@@GNUTLS_3_4' => 1, - 'gnutls_priority_ecc_curve_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_get_cipher_suite_index@@GNUTLS_3_4' => 1, - 'gnutls_priority_init@@GNUTLS_3_4' => 1, - 'gnutls_priority_kx_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_mac_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_protocol_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_set@@GNUTLS_3_4' => 1, - 'gnutls_priority_set_direct@@GNUTLS_3_4' => 1, - 'gnutls_priority_sign_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_string_list@@GNUTLS_3_4' => 1, - 'gnutls_privkey_decrypt_data@@GNUTLS_3_4' => 1, - 'gnutls_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_x509@@GNUTLS_3_4' => 1, - 'gnutls_privkey_generate@@GNUTLS_3_4' => 1, - 'gnutls_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_privkey_get_type@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ext2@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ext3@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ext@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_openpgp_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_tpm_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_tpm_url@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_url@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_x509@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_privkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_privkey_sign_data@@GNUTLS_3_4' => 1, - 'gnutls_privkey_sign_hash@@GNUTLS_3_4' => 1, - 'gnutls_privkey_status@@GNUTLS_3_4' => 1, - 'gnutls_privkey_verify_params@@GNUTLS_3_4' => 1, - 'gnutls_protocol_get_id@@GNUTLS_3_4' => 1, - 'gnutls_protocol_get_name@@GNUTLS_3_4' => 1, - 'gnutls_protocol_get_version@@GNUTLS_3_4' => 1, - 'gnutls_protocol_list@@GNUTLS_3_4' => 1, - 'gnutls_psk_allocate_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_allocate_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_client_get_hint@@GNUTLS_3_4' => 1, - 'gnutls_psk_free_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_free_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_server_get_username@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_client_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_params_function@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_credentials_file@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_credentials_hint@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_params_function@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_encrypt_data@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export2@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_ecc_x962@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_openpgp_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_preferred_hash_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_ecc_x962@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_openpgp_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_privkey@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_tpm_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_tpm_url@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_url@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_x509@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_x509_crq@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_init@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_print@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_set_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_verify_data2@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_verify_hash2@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_verify_params@@GNUTLS_3_4' => 1, - 'gnutls_random_art@@GNUTLS_3_4' => 1, - 'gnutls_range_split@@GNUTLS_3_4' => 1, - 'gnutls_realloc@@GNUTLS_3_4' => -8, - 'gnutls_record_can_use_length_hiding@@GNUTLS_3_4' => 1, - 'gnutls_record_check_corked@@GNUTLS_3_4' => 1, - 'gnutls_record_check_pending@@GNUTLS_3_4' => 1, - 'gnutls_record_cork@@GNUTLS_3_4' => 1, - 'gnutls_record_disable_padding@@GNUTLS_3_4' => 1, - 'gnutls_record_discard_queued@@GNUTLS_3_4' => 1, - 'gnutls_record_get_direction@@GNUTLS_3_4' => 1, - 'gnutls_record_get_discarded@@GNUTLS_3_4' => 1, - 'gnutls_record_get_max_size@@GNUTLS_3_4' => 1, - 'gnutls_record_get_state@@GNUTLS_3_4' => 1, - 'gnutls_record_overhead_size@@GNUTLS_3_4' => 1, - 'gnutls_record_recv@@GNUTLS_3_4' => 1, - 'gnutls_record_recv_packet@@GNUTLS_3_4' => 1, - 'gnutls_record_recv_seq@@GNUTLS_3_4' => 1, - 'gnutls_record_send@@GNUTLS_3_4' => 1, - 'gnutls_record_send_range@@GNUTLS_3_4' => 1, - 'gnutls_record_set_max_size@@GNUTLS_3_4' => 1, - 'gnutls_record_set_state@@GNUTLS_3_4' => 1, - 'gnutls_record_set_timeout@@GNUTLS_3_4' => 1, - 'gnutls_record_uncork@@GNUTLS_3_4' => 1, - 'gnutls_register_custom_url@@GNUTLS_3_4' => 1, - 'gnutls_rehandshake@@GNUTLS_3_4' => 1, - 'gnutls_rnd@@GNUTLS_3_4' => 1, - 'gnutls_rnd_refresh@@GNUTLS_3_4' => 1, - 'gnutls_safe_renegotiation_status@@GNUTLS_3_4' => 1, - 'gnutls_sec_param_get_name@@GNUTLS_3_4' => 1, - 'gnutls_sec_param_to_pk_bits@@GNUTLS_3_4' => 1, - 'gnutls_sec_param_to_symmetric_bits@@GNUTLS_3_4' => 1, - 'gnutls_secure_malloc@@GNUTLS_3_4' => -8, - 'gnutls_server_name_get@@GNUTLS_3_4' => 1, - 'gnutls_server_name_set@@GNUTLS_3_4' => 1, - 'gnutls_session_channel_binding@@GNUTLS_3_4' => 1, - 'gnutls_session_enable_compatibility_mode@@GNUTLS_3_4' => 1, - 'gnutls_session_etm_status@@GNUTLS_3_4' => 1, - 'gnutls_session_ext_master_secret_status@@GNUTLS_3_4' => 1, - 'gnutls_session_force_valid@@GNUTLS_3_4' => 1, - 'gnutls_session_get_data2@@GNUTLS_3_4' => 1, - 'gnutls_session_get_data@@GNUTLS_3_4' => 1, - 'gnutls_session_get_desc@@GNUTLS_3_4' => 1, - 'gnutls_session_get_id2@@GNUTLS_3_4' => 1, - 'gnutls_session_get_id@@GNUTLS_3_4' => 1, - 'gnutls_session_get_ptr@@GNUTLS_3_4' => 1, - 'gnutls_session_get_random@@GNUTLS_3_4' => 1, - 'gnutls_session_get_verify_cert_status@@GNUTLS_3_4' => 1, - 'gnutls_session_is_resumed@@GNUTLS_3_4' => 1, - 'gnutls_session_resumption_requested@@GNUTLS_3_4' => 1, - 'gnutls_session_set_data@@GNUTLS_3_4' => 1, - 'gnutls_session_set_id@@GNUTLS_3_4' => 1, - 'gnutls_session_set_premaster@@GNUTLS_3_4' => 1, - 'gnutls_session_set_ptr@@GNUTLS_3_4' => 1, - 'gnutls_session_set_verify_cert2@@GNUTLS_3_4' => 1, - 'gnutls_session_set_verify_cert@@GNUTLS_3_4' => 1, - 'gnutls_session_set_verify_function@@GNUTLS_3_4' => 1, - 'gnutls_session_ticket_enable_client@@GNUTLS_3_4' => 1, - 'gnutls_session_ticket_enable_server@@GNUTLS_3_4' => 1, - 'gnutls_session_ticket_key_generate@@GNUTLS_3_4' => 1, - 'gnutls_set_default_priority@@GNUTLS_3_4' => 1, - 'gnutls_sign_algorithm_get@@GNUTLS_3_4' => 1, - 'gnutls_sign_algorithm_get_client@@GNUTLS_3_4' => 1, - 'gnutls_sign_algorithm_get_requested@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_hash_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_id@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_name@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_sign_is_secure@@GNUTLS_3_4' => 1, - 'gnutls_sign_list@@GNUTLS_3_4' => 1, - 'gnutls_srp_1024_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_1024_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_1536_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_1536_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_2048_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_2048_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_3072_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_3072_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_4096_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_4096_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_allocate_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_allocate_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_decode2@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_decode@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_encode2@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_encode@@GNUTLS_3_4' => 1, - 'gnutls_srp_free_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_free_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_server_get_username@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_client_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_prime_bits@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_server_credentials_file@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_server_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_server_fake_salt_seed@@GNUTLS_3_4' => 1, - 'gnutls_srp_verifier@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_keys@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_mki@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_profile_id@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_profile_name@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_selected_profile@@GNUTLS_3_4' => 1, - 'gnutls_srtp_set_mki@@GNUTLS_3_4' => 1, - 'gnutls_srtp_set_profile@@GNUTLS_3_4' => 1, - 'gnutls_srtp_set_profile_direct@@GNUTLS_3_4' => 1, - 'gnutls_store_commitment@@GNUTLS_3_4' => 1, - 'gnutls_store_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_strdup@@GNUTLS_3_4' => -8, - 'gnutls_strerror@@GNUTLS_3_4' => 1, - 'gnutls_strerror_name@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_deinit@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_get@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_init@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_set@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_get_name@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_recv@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_register@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_send@@GNUTLS_3_4' => 1, - 'gnutls_system_key_add_x509@@GNUTLS_3_4' => 1, - 'gnutls_system_key_delete@@GNUTLS_3_4' => 1, - 'gnutls_system_key_iter_deinit@@GNUTLS_3_4' => 1, - 'gnutls_system_key_iter_get_info@@GNUTLS_3_4' => 1, - 'gnutls_system_recv_timeout@@GNUTLS_3_4' => 1, - 'gnutls_tdb_deinit@@GNUTLS_3_4' => 1, - 'gnutls_tdb_init@@GNUTLS_3_4' => 1, - 'gnutls_tdb_set_store_commitment_func@@GNUTLS_3_4' => 1, - 'gnutls_tdb_set_store_func@@GNUTLS_3_4' => 1, - 'gnutls_tdb_set_verify_func@@GNUTLS_3_4' => 1, - 'gnutls_tpm_get_registered@@GNUTLS_3_4' => 1, - 'gnutls_tpm_key_list_deinit@@GNUTLS_3_4' => 1, - 'gnutls_tpm_key_list_get_url@@GNUTLS_3_4' => 1, - 'gnutls_tpm_privkey_delete@@GNUTLS_3_4' => 1, - 'gnutls_tpm_privkey_generate@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_int2@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_int@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_ptr2@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_ptr@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_errno@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_errno_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_int2@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_ptr2@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_ptr@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_pull_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_pull_timeout_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_push_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_vec_push_function@@GNUTLS_3_4' => 1, - 'gnutls_url_is_supported@@GNUTLS_3_4' => 1, - 'gnutls_verify_stored_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_get_cert_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_get_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_set_cert_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_set_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_check_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_authority_key_gn_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_crt_count@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_crt_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_data2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_issuer_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_issuer_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_next_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_number@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_raw_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_signature@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_this_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_iter_crt_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_iter_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_list_import2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_list_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_privkey_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_crt_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_next_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_number@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_this_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_sign2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_attribute_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_attribute_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_attribute_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_challenge_password@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_by_oid2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_data2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_subject_alt_othername_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_privkey_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_attribute_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_challenge_password@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_sign2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_email@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_hostname2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_hostname@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_revocation@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_cpy_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_activation_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_authority_info_access@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_authority_key_gn_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_ca_status@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_by_oid2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_data2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_alt_name2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_alt_othername_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_unique_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_policy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_preferred_hash_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_raw_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_raw_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_signature@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_alt_name2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_alt_othername_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_unique_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_import_url@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_import2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_privkey_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_activation_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_authority_info_access@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_ca_status@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crl_dist_points2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crq@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crq_extensions@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_extension_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_unique_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_key@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_policy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_proxy_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_alternative_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_unique_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_sign2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_verify_data2@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_get_rdn_ava@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_get_str@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_oid_known@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_oid_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_aia@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_key_purposes@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_policies@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_subject_alt_names@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_aia@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_key_purposes@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_policies@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_subject_alt_names@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_add_excluded@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_add_permitted@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_check@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_check_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_get_excluded@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_get_permitted@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_othername_to_virtual@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_policy_release@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_cpy@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export2_pkcs8@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_pkcs8@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_rsa_raw2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_fix@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_generate@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_get_pk_algorithm2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_openssl@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_pkcs8@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_rsa_raw2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_sec_param@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_sign_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_sign_hash@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_verify_params@@GNUTLS_3_4' => 1, - 'gnutls_x509_rdn_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_rdn_get_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_rdn_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_cas@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_crls@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_named_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_system_trust@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_trust_dir@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_trust_file@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_trust_mem@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_get_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_get_issuer_by_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_get_issuer_by_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_iter_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_iter_get_ca@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_remove_cas@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_remove_trust_file@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_remove_trust_mem@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_verify_crt2@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_verify_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_verify_named_crt@@GNUTLS_3_4' => 1 - } - }, - 'Target' => 'unix', - 'TypeInfo' => { - '1' => { - 'Name' => 'void', - 'Type' => 'Intrinsic' - }, - '1002' => { - 'BaseType' => '235', - 'Name' => 'char**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '10094' => { - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '200', - 'Memb' => { - '0' => { - 'name' => 'cipher', - 'offset' => '0', - 'type' => '9947' - }, - '1' => { - 'name' => 'mac', - 'offset' => '80', - 'type' => '9958' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'is_mac', - 'offset' => '136', - 'type' => '145' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'ssl_hmac', - 'offset' => '136', - 'type' => '145' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'non_null', - 'offset' => '136', - 'type' => '145' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'etm', - 'offset' => '136', - 'type' => '145' - }, - '6' => { - 'name' => 'tag_size', - 'offset' => '144', - 'type' => '52' - } - }, - 'Name' => 'struct auth_cipher_hd_st', - 'PrivateABI' => 1, - 'Size' => '152', - 'Type' => 'Struct' - }, - '10105' => { - 'Header' => 'gnutls_compress.h', - 'Line' => '38', - 'Memb' => { - '0' => { - 'name' => 'handle', - 'offset' => '0', - 'type' => '211' - }, - '1' => { - 'name' => 'algo', - 'offset' => '8', - 'type' => '2441' - } - }, - 'Name' => 'struct comp_hd_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '1011563' => { - 'BaseType' => '164', - 'Header' => 'types.h', - 'Line' => '194', - 'Name' => 'int8_t', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '10142' => { - 'BaseType' => '10105', - 'Header' => 'gnutls_compress.h', - 'Line' => '41', - 'Name' => 'comp_hd_st', - 'Size' => '16', - 'Type' => 'Typedef' - }, - '1015619' => { - 'BaseType' => '1015630', - 'Header' => 'tpm.h', - 'Line' => '36', - 'Name' => 'gnutls_tpm_key_list_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1015630' => { - 'BaseType' => '1015636', - 'Name' => 'struct tpm_key_list_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1015636' => { - 'Line' => '183', - 'Memb' => { - '0' => { - 'name' => 'size', - 'offset' => '0', - 'type' => '1025525' - }, - '1' => { - 'name' => 'ki', - 'offset' => '8', - 'type' => '1027088' - }, - '2' => { - 'name' => 'tpm_ctx', - 'offset' => '16', - 'type' => '1025586' - } - }, - 'Name' => 'struct tpm_key_list_st', - 'PrivateABI' => 1, - 'Size' => '24', - 'Source' => 'tpm.c', - 'Type' => 'Struct' - }, - '1015715' => { - 'Header' => 'tpm.h', - 'Line' => '54', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_TPMKEY_FMT_RAW', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_TPMKEY_FMT_DER', - 'value' => '0' - }, - '2' => { - 'name' => 'GNUTLS_TPMKEY_FMT_CTK_PEM', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_tpmkey_fmt_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1025492' => { - 'BaseType' => '946', - 'Header' => 'platform.h', - 'Line' => '17', - 'Name' => 'BYTE', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '1025503' => { - 'BaseType' => '1011563', - 'Header' => 'platform.h', - 'Line' => '18', - 'Name' => 'TSS_BOOL', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '1025514' => { - 'BaseType' => '957', - 'Header' => 'platform.h', - 'Line' => '19', - 'Name' => 'UINT16', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '1025525' => { - 'BaseType' => '968', - 'Header' => 'platform.h', - 'Line' => '20', - 'Name' => 'UINT32', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1025547' => { - 'BaseType' => '1025492', - 'Name' => 'BYTE*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1025553' => { - 'BaseType' => '1025525', - 'Header' => 'tss_typedef.h', - 'Line' => '17', - 'Name' => 'TSS_FLAG', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1025575' => { - 'BaseType' => '1025525', - 'Header' => 'tss_typedef.h', - 'Line' => '20', - 'Name' => 'TSS_HOBJECT', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1025586' => { - 'BaseType' => '1025575', - 'Header' => 'tss_typedef.h', - 'Line' => '21', - 'Name' => 'TSS_HCONTEXT', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1025652' => { - 'Header' => 'tss_structs.h', - 'Line' => '14', - 'Memb' => { - '0' => { - 'name' => 'bMajor', - 'offset' => '0', - 'type' => '1025492' - }, - '1' => { - 'name' => 'bMinor', - 'offset' => '1', - 'type' => '1025492' - }, - '2' => { - 'name' => 'bRevMajor', - 'offset' => '2', - 'type' => '1025492' - }, - '3' => { - 'name' => 'bRevMinor', - 'offset' => '3', - 'type' => '1025492' - } - }, - 'Name' => 'struct tdTSS_VERSION', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Struct' - }, - '1025713' => { - 'BaseType' => '1025652', - 'Header' => 'tss_structs.h', - 'Line' => '20', - 'Name' => 'TSS_VERSION', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1025724' => { - 'Header' => 'tss_structs.h', - 'Line' => '62', - 'Memb' => { - '0' => { - 'name' => 'ulTimeLow', - 'offset' => '0', - 'type' => '1025525' - }, - '1' => { - 'name' => 'usTimeMid', - 'offset' => '4', - 'type' => '1025514' - }, - '2' => { - 'name' => 'usTimeHigh', - 'offset' => '6', - 'type' => '1025514' - }, - '3' => { - 'name' => 'bClockSeqHigh', - 'offset' => '8', - 'type' => '1025492' - }, - '4' => { - 'name' => 'bClockSeqLow', - 'offset' => '9', - 'type' => '1025492' - }, - '5' => { - 'name' => 'rgbNode', - 'offset' => '10', - 'type' => '1025809' - } - }, - 'Name' => 'struct tdTSS_UUID', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '1025809' => { - 'BaseType' => '1025492', - 'Name' => 'BYTE[6]', - 'Size' => '6', - 'Type' => 'Array' - }, - '1025825' => { - 'BaseType' => '1025724', - 'Header' => 'tss_structs.h', - 'Line' => '70', - 'Name' => 'TSS_UUID', - 'Size' => '16', - 'Type' => 'Typedef' - }, - '1025841' => { - 'Header' => 'tss_structs.h', - 'Line' => '87', - 'Memb' => { - '0' => { - 'name' => 'versionInfo', - 'offset' => '0', - 'type' => '1025713' - }, - '1' => { - 'name' => 'keyUUID', - 'offset' => '4', - 'type' => '1025825' - }, - '2' => { - 'name' => 'parentKeyUUID', - 'offset' => '20', - 'type' => '1025825' - }, - '3' => { - 'name' => 'bAuthDataUsage', - 'offset' => '36', - 'type' => '1025492' - }, - '4' => { - 'name' => 'persistentStorageType', - 'offset' => '40', - 'type' => '1025553' - }, - '5' => { - 'name' => 'persistentStorageTypeParent', - 'offset' => '44', - 'type' => '1025553' - }, - '6' => { - 'name' => 'fIsLoaded', - 'offset' => '48', - 'type' => '1025503' - }, - '7' => { - 'name' => 'ulVendorDataLength', - 'offset' => '52', - 'type' => '1025525' - }, - '8' => { - 'name' => 'rgbVendorData', - 'offset' => '56', - 'type' => '1025547' - } - }, - 'Name' => 'struct tdTSS_KM_KEYINFO2', - 'PrivateABI' => 1, - 'Size' => '64', - 'Type' => 'Struct' - }, - '1025962' => { - 'BaseType' => '1025841', - 'Header' => 'tss_structs.h', - 'Line' => '101', - 'Name' => 'TSS_KM_KEYINFO2', - 'Size' => '64', - 'Type' => 'Typedef' - }, - '1027088' => { - 'BaseType' => '1025962', - 'Name' => 'TSS_KM_KEYINFO2*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1029014' => { - 'BaseType' => '1015619', - 'Name' => 'gnutls_tpm_key_list_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '103' => { - 'Name' => 'unsigned short', - 'Size' => '2', - 'Type' => 'Intrinsic' - }, - '10488' => { - 'BaseType' => '946', - 'Name' => 'uint8_t[2]', - 'Size' => '2', - 'Type' => 'Array' - }, - '10504' => { - 'BaseType' => '946', - 'Name' => 'uint8_t[48]', - 'Size' => '48', - 'Type' => 'Array' - }, - '10520' => { - 'BaseType' => '946', - 'Name' => 'uint8_t[32]', - 'Size' => '32', - 'Type' => 'Array' - }, - '10536' => { - 'BaseType' => '9313', - 'Name' => 'version_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '10542' => { - 'Header' => 'gnutls_int.h', - 'Line' => '587', - 'Memb' => { - '0' => { - 'name' => 'entity', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'kx_algorithm', - 'offset' => '4', - 'type' => '2149' - }, - '10' => { - 'name' => 'server_random', - 'offset' => '104', - 'type' => '10520' - }, - '11' => { - 'name' => 'session_id', - 'offset' => '136', - 'type' => '10520' - }, - '12' => { - 'name' => 'session_id_size', - 'offset' => '168', - 'type' => '946' - }, - '13' => { - 'name' => 'timestamp', - 'offset' => '176', - 'type' => '252' - }, - '14' => { - 'name' => 'max_record_send_size', - 'offset' => '184', - 'type' => '957' - }, - '15' => { - 'name' => 'max_record_recv_size', - 'offset' => '186', - 'type' => '957' - }, - '16' => { - 'name' => 'cert_type', - 'offset' => '188', - 'type' => '2712' - }, - '17' => { - 'name' => 'ecc_curve', - 'offset' => '192', - 'type' => '2982' - }, - '18' => { - 'name' => 'server_sign_algo', - 'offset' => '196', - 'type' => '2920' - }, - '19' => { - 'name' => 'client_sign_algo', - 'offset' => '200', - 'type' => '2920' - }, - '2' => { - 'name' => 'epoch_read', - 'offset' => '8', - 'type' => '957' - }, - '20' => { - 'name' => 'ext_master_secret', - 'offset' => '204', - 'type' => '946' - }, - '21' => { - 'name' => 'etm', - 'offset' => '205', - 'type' => '946' - }, - '22' => { - 'name' => 'do_recv_supplemental', - 'offset' => '208', - 'type' => '75' - }, - '23' => { - 'name' => 'do_send_supplemental', - 'offset' => '212', - 'type' => '75' - }, - '24' => { - 'name' => 'pversion', - 'offset' => '216', - 'type' => '10536' - }, - '3' => { - 'name' => 'epoch_write', - 'offset' => '10', - 'type' => '957' - }, - '4' => { - 'name' => 'epoch_next', - 'offset' => '12', - 'type' => '957' - }, - '5' => { - 'name' => 'epoch_min', - 'offset' => '14', - 'type' => '957' - }, - '6' => { - 'name' => 'cipher_suite', - 'offset' => '16', - 'type' => '10488' - }, - '7' => { - 'name' => 'compression_method', - 'offset' => '20', - 'type' => '2441' - }, - '8' => { - 'name' => 'master_secret', - 'offset' => '24', - 'type' => '10504' - }, - '9' => { - 'name' => 'client_random', - 'offset' => '72', - 'type' => '10520' - } - }, - 'Name' => 'struct security_parameters_st', - 'PrivateABI' => 1, - 'Size' => '224', - 'Type' => 'Struct' - }, - '10554' => { - 'BaseType' => '979', - 'Name' => 'uint64_t[64]', - 'Size' => '512', - 'Type' => 'Array' - }, - '10606' => { - 'BaseType' => '145', - 'Name' => 'unsigned int[32]', - 'Size' => '128', - 'Type' => 'Array' - }, - '10622' => { - 'Header' => 'gnutls_int.h', - 'Line' => '635', - 'Memb' => { - '0' => { - 'name' => 'priority', - 'offset' => '0', - 'type' => '10606' - }, - '1' => { - 'name' => 'algorithms', - 'offset' => '128', - 'type' => '145' - } - }, - 'Name' => 'struct priority_st', - 'PrivateABI' => 1, - 'Size' => '132', - 'Type' => 'Struct' - }, - '10672' => { - 'Header' => 'gnutls_int.h', - 'Line' => '642', - 'Memb' => { - '0' => { - 'name' => 'SR_DISABLED', - 'value' => '0' - }, - '1' => { - 'name' => 'SR_UNSAFE', - 'value' => '1' - }, - '2' => { - 'name' => 'SR_PARTIAL', - 'value' => '2' - }, - '3' => { - 'name' => 'SR_SAFE', - 'value' => '3' - } - }, - 'Name' => 'enum safe_renegotiation_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '10720' => { - 'Header' => 'gnutls_int.h', - 'Line' => '707', - 'Memb' => { - '0' => { - 'name' => 'dh_params', - 'offset' => '0', - 'type' => '3185' - }, - '1' => { - 'name' => 'free_dh_params', - 'offset' => '8', - 'type' => '75' - } - }, - 'Name' => 'struct internal_params_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '10911' => { - 'Header' => 'gnutls_int.h', - 'Line' => '744', - 'Memb' => { - '0' => { - 'name' => 'cookie', - 'offset' => '0', - 'type' => '10520' - }, - '1' => { - 'name' => 'cookie_len', - 'offset' => '32', - 'type' => '946' - }, - '10' => { - 'name' => 'async_term', - 'offset' => '56', - 'type' => '252' - }, - '11' => { - 'name' => 'last_retransmit', - 'offset' => '64', - 'type' => '274' - }, - '12' => { - 'name' => 'packets_dropped', - 'offset' => '80', - 'type' => '145' - }, - '2' => { - 'name' => 'hsk_write_seq', - 'offset' => '34', - 'type' => '957' - }, - '3' => { - 'name' => 'hsk_read_seq', - 'offset' => '36', - 'type' => '145' - }, - '4' => { - 'name' => 'mtu', - 'offset' => '40', - 'type' => '957' - }, - '5' => { - 'name' => 'flight_init', - 'offset' => '42', - 'type' => '8952' - }, - '6' => { - 'name' => 'last_flight', - 'offset' => '43', - 'type' => '8952' - }, - '7' => { - 'name' => 'retrans_timeout_ms', - 'offset' => '44', - 'type' => '145' - }, - '8' => { - 'name' => 'hsk_hello_verify_requests', - 'offset' => '48', - 'type' => '145' - }, - '9' => { - 'name' => 'actual_retrans_timeout_ms', - 'offset' => '52', - 'type' => '145' - } - }, - 'Name' => 'struct dtls_st', - 'PrivateABI' => 1, - 'Size' => '88', - 'Type' => 'Struct' - }, - '10923' => { - 'Header' => 'gnutls_int.h', - 'Line' => '941', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '957' - }, - '1' => { - 'name' => 'priv', - 'offset' => '8', - 'type' => '5011' - }, - '2' => { - 'name' => 'set', - 'offset' => '16', - 'type' => '8952' - } - }, - 'Name' => 'anon-struct-gnutls_int.h-941', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '10972' => { - 'Header' => 'gnutls_int.h', - 'Line' => '947', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '957' - }, - '1' => { - 'name' => 'priv', - 'offset' => '8', - 'type' => '5011' - }, - '2' => { - 'name' => 'set', - 'offset' => '16', - 'type' => '8952' - } - }, - 'Name' => 'anon-struct-gnutls_int.h-947', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '110' => { - 'BaseType' => '128', - 'Name' => 'char const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1109742' => { - 'BaseType' => '754908', - 'Name' => 'gnutls_custom_url_st const', - 'Size' => '64', - 'Type' => 'Const' - }, - '1110287' => { - 'BaseType' => '1109742', - 'Name' => 'gnutls_custom_url_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1137264' => { - 'BaseType' => '1137275', - 'Header' => 'system-keys.h', - 'Line' => '41', - 'Name' => 'gnutls_system_key_iter_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1137275' => { - 'BaseType' => '1137281', - 'Name' => 'struct system_key_iter_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1137281' => { - 'Name' => 'struct system_key_iter_st', - 'PrivateABI' => 1, - 'Type' => 'Struct' - }, - '1137702' => { - 'BaseType' => '1137264', - 'Name' => 'gnutls_system_key_iter_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1144009' => { - 'Header' => 'pkcs11.h', - 'Line' => '164', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_URL_GENERIC', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_URL_LIB', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_URL_LIB_VERSION', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_pkcs11_url_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1144094' => { - 'Header' => 'pkcs11.h', - 'Line' => '290', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_OBJ_ID_HEX', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LABEL', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_LABEL', - 'value' => '3' - }, - '3' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_SERIAL', - 'value' => '4' - }, - '4' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_MANUFACTURER', - 'value' => '5' - }, - '5' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_MODEL', - 'value' => '6' - }, - '6' => { - 'name' => 'GNUTLS_PKCS11_OBJ_ID', - 'value' => '7' - }, - '7' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LIBRARY_VERSION', - 'value' => '8' - }, - '8' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LIBRARY_DESCRIPTION', - 'value' => '9' - }, - '9' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LIBRARY_MANUFACTURER', - 'value' => '10' - } - }, - 'Name' => 'enum gnutls_pkcs11_obj_info_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1144150' => { - 'Header' => 'pkcs11.h', - 'Line' => '325', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_LABEL', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_SERIAL', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_MANUFACTURER', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_MODEL', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_MODNAME', - 'value' => '4' - } - }, - 'Name' => 'enum gnutls_pkcs11_token_info_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1152576' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '186', - 'Name' => 'ck_flags_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1152587' => { - 'Header' => 'pkcs11.h', - 'Line' => '188', - 'Memb' => { - '0' => { - 'name' => 'major', - 'offset' => '0', - 'type' => '152' - }, - '1' => { - 'name' => 'minor', - 'offset' => '1', - 'type' => '152' - } - }, - 'Name' => 'struct ck_version', - 'Size' => '2', - 'Type' => 'Struct' - }, - '1152624' => { - 'Header' => 'pkcs11.h', - 'Line' => '195', - 'Memb' => { - '0' => { - 'name' => 'cryptoki_version', - 'offset' => '0', - 'type' => '1152587' - }, - '1' => { - 'name' => 'manufacturer_id', - 'offset' => '2', - 'type' => '1152697' - }, - '2' => { - 'name' => 'flags', - 'offset' => '40', - 'type' => '1152576' - }, - '3' => { - 'name' => 'library_description', - 'offset' => '48', - 'type' => '1152697' - }, - '4' => { - 'name' => 'library_version', - 'offset' => '80', - 'type' => '1152587' - } - }, - 'Name' => 'struct ck_info', - 'Size' => '88', - 'Type' => 'Struct' - }, - '1152697' => { - 'BaseType' => '152', - 'Name' => 'unsigned char[32]', - 'Size' => '32', - 'Type' => 'Array' - }, - '1152713' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '205', - 'Name' => 'ck_notification_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1152724' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '210', - 'Name' => 'ck_slot_id_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1152735' => { - 'Header' => 'pkcs11.h', - 'Line' => '213', - 'Memb' => { - '0' => { - 'name' => 'slot_description', - 'offset' => '0', - 'type' => '1152808' - }, - '1' => { - 'name' => 'manufacturer_id', - 'offset' => '64', - 'type' => '1152697' - }, - '2' => { - 'name' => 'flags', - 'offset' => '96', - 'type' => '1152576' - }, - '3' => { - 'name' => 'hardware_version', - 'offset' => '104', - 'type' => '1152587' - }, - '4' => { - 'name' => 'firmware_version', - 'offset' => '106', - 'type' => '1152587' - } - }, - 'Name' => 'struct ck_slot_info', - 'Size' => '112', - 'Type' => 'Struct' - }, - '1152808' => { - 'BaseType' => '152', - 'Name' => 'unsigned char[64]', - 'Size' => '64', - 'Type' => 'Array' - }, - '1152824' => { - 'Header' => 'pkcs11.h', - 'Line' => '229', - 'Memb' => { - '0' => { - 'name' => 'label', - 'offset' => '0', - 'type' => '1152697' - }, - '1' => { - 'name' => 'manufacturer_id', - 'offset' => '32', - 'type' => '1152697' - }, - '10' => { - 'name' => 'min_pin_len', - 'offset' => '144', - 'type' => '68' - }, - '11' => { - 'name' => 'total_public_memory', - 'offset' => '152', - 'type' => '68' - }, - '12' => { - 'name' => 'free_public_memory', - 'offset' => '160', - 'type' => '68' - }, - '13' => { - 'name' => 'total_private_memory', - 'offset' => '168', - 'type' => '68' - }, - '14' => { - 'name' => 'free_private_memory', - 'offset' => '176', - 'type' => '68' - }, - '15' => { - 'name' => 'hardware_version', - 'offset' => '184', - 'type' => '1152587' - }, - '16' => { - 'name' => 'firmware_version', - 'offset' => '186', - 'type' => '1152587' - }, - '17' => { - 'name' => 'utc_time', - 'offset' => '188', - 'type' => '1153053' - }, - '2' => { - 'name' => 'model', - 'offset' => '64', - 'type' => '1153053' - }, - '3' => { - 'name' => 'serial_number', - 'offset' => '80', - 'type' => '1153053' - }, - '4' => { - 'name' => 'flags', - 'offset' => '96', - 'type' => '1152576' - }, - '5' => { - 'name' => 'max_session_count', - 'offset' => '104', - 'type' => '68' - }, - '6' => { - 'name' => 'session_count', - 'offset' => '112', - 'type' => '68' - }, - '7' => { - 'name' => 'max_rw_session_count', - 'offset' => '120', - 'type' => '68' - }, - '8' => { - 'name' => 'rw_session_count', - 'offset' => '128', - 'type' => '68' - }, - '9' => { - 'name' => 'max_pin_len', - 'offset' => '136', - 'type' => '68' - } - }, - 'Name' => 'struct ck_token_info', - 'Size' => '208', - 'Type' => 'Struct' - }, - '1153053' => { - 'BaseType' => '152', - 'Name' => 'unsigned char[16]', - 'Size' => '16', - 'Type' => 'Array' - }, - '1153069' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '275', - 'Name' => 'ck_session_handle_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153081' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '280', - 'Name' => 'ck_user_type_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153093' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '287', - 'Name' => 'ck_state_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153105' => { - 'Header' => 'pkcs11.h', - 'Line' => '296', - 'Memb' => { - '0' => { - 'name' => 'slot_id', - 'offset' => '0', - 'type' => '1152724' - }, - '1' => { - 'name' => 'state', - 'offset' => '8', - 'type' => '1153093' - }, - '2' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '1152576' - }, - '3' => { - 'name' => 'device_error', - 'offset' => '24', - 'type' => '68' - } - }, - 'Name' => 'struct ck_session_info', - 'Size' => '32', - 'Type' => 'Struct' - }, - '1153171' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '308', - 'Name' => 'ck_object_handle_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153219' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '370', - 'Name' => 'ck_attribute_type_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153231' => { - 'Header' => 'pkcs11.h', - 'Line' => '459', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '1153219' - }, - '1' => { - 'name' => 'value', - 'offset' => '8', - 'type' => '211' - }, - '2' => { - 'name' => 'value_len', - 'offset' => '16', - 'type' => '68' - } - }, - 'Name' => 'struct ck_attribute', - 'Size' => '24', - 'Type' => 'Struct' - }, - '1153284' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '475', - 'Name' => 'ck_mechanism_type_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153296' => { - 'Header' => 'pkcs11.h', - 'Line' => '719', - 'Memb' => { - '0' => { - 'name' => 'mechanism', - 'offset' => '0', - 'type' => '1153284' - }, - '1' => { - 'name' => 'parameter', - 'offset' => '8', - 'type' => '211' - }, - '2' => { - 'name' => 'parameter_len', - 'offset' => '16', - 'type' => '68' - } - }, - 'Name' => 'struct ck_mechanism', - 'Size' => '24', - 'Type' => 'Struct' - }, - '1153349' => { - 'Header' => 'pkcs11.h', - 'Line' => '727', - 'Memb' => { - '0' => { - 'name' => 'min_key_size', - 'offset' => '0', - 'type' => '68' - }, - '1' => { - 'name' => 'max_key_size', - 'offset' => '8', - 'type' => '68' - }, - '2' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '1152576' - } - }, - 'Name' => 'struct ck_mechanism_info', - 'Size' => '24', - 'Type' => 'Struct' - }, - '1153402' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '754', - 'Name' => 'ck_rv_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153414' => { - 'BaseType' => '1153426', - 'Header' => 'pkcs11.h', - 'Line' => '757', - 'Name' => 'ck_notify_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153426' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_notification_t, void*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1152713' - }, - '2' => { - 'type' => '211' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1153457' => { - 'BaseType' => '1153469', - 'Header' => 'pkcs11.h', - 'Line' => '767', - 'Name' => 'CK_C_Initialize', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153469' => { - 'Name' => 'ck_rv_t(*)(void*)', - 'Param' => { - '0' => { - 'type' => '211' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1153490' => { - 'BaseType' => '1153469', - 'Header' => 'pkcs11.h', - 'Line' => '768', - 'Name' => 'CK_C_Finalize', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153502' => { - 'BaseType' => '1153514', - 'Header' => 'pkcs11.h', - 'Line' => '769', - 'Name' => 'CK_C_GetInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153514' => { - 'Name' => 'ck_rv_t(*)(struct ck_info*)', - 'Param' => { - '0' => { - 'type' => '1153535' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1153535' => { - 'BaseType' => '1152624', - 'Name' => 'struct ck_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1153541' => { - 'BaseType' => '1153553', - 'Header' => 'pkcs11.h', - 'Line' => '770', - 'Name' => 'CK_C_GetFunctionList', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1153553' => { - 'Name' => 'ck_rv_t(*)(struct ck_function_list**)', - 'Param' => { - '0' => { - 'type' => '1153574' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1153574' => { - 'BaseType' => '1153580', - 'Name' => 'struct ck_function_list**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1153580' => { - 'BaseType' => '1153586', - 'Name' => 'struct ck_function_list*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1153586' => { - 'Header' => 'pkcs11.h', - 'Line' => '1044', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '1152587' - }, - '1' => { - 'name' => 'C_Initialize', - 'offset' => '8', - 'type' => '1153457' - }, - '10' => { - 'name' => 'C_InitToken', - 'offset' => '80', - 'type' => '1154819' - }, - '11' => { - 'name' => 'C_InitPIN', - 'offset' => '88', - 'type' => '1154867' - }, - '12' => { - 'name' => 'C_SetPIN', - 'offset' => '96', - 'type' => '1154910' - }, - '13' => { - 'name' => 'C_OpenSession', - 'offset' => '104', - 'type' => '1154963' - }, - '14' => { - 'name' => 'C_CloseSession', - 'offset' => '112', - 'type' => '1155022' - }, - '15' => { - 'name' => 'C_CloseAllSessions', - 'offset' => '120', - 'type' => '1155055' - }, - '16' => { - 'name' => 'C_GetSessionInfo', - 'offset' => '128', - 'type' => '1155088' - }, - '17' => { - 'name' => 'C_GetOperationState', - 'offset' => '136', - 'type' => '1155132' - }, - '18' => { - 'name' => 'C_SetOperationState', - 'offset' => '144', - 'type' => '1155175' - }, - '19' => { - 'name' => 'C_Login', - 'offset' => '152', - 'type' => '1155228' - }, - '2' => { - 'name' => 'C_Finalize', - 'offset' => '16', - 'type' => '1153490' - }, - '20' => { - 'name' => 'C_Logout', - 'offset' => '160', - 'type' => '1155276' - }, - '21' => { - 'name' => 'C_CreateObject', - 'offset' => '168', - 'type' => '1155288' - }, - '22' => { - 'name' => 'C_CopyObject', - 'offset' => '176', - 'type' => '1155348' - }, - '23' => { - 'name' => 'C_DestroyObject', - 'offset' => '184', - 'type' => '1155401' - }, - '24' => { - 'name' => 'C_GetObjectSize', - 'offset' => '192', - 'type' => '1155439' - }, - '25' => { - 'name' => 'C_GetAttributeValue', - 'offset' => '200', - 'type' => '1155482' - }, - '26' => { - 'name' => 'C_SetAttributeValue', - 'offset' => '208', - 'type' => '1155530' - }, - '27' => { - 'name' => 'C_FindObjectsInit', - 'offset' => '216', - 'type' => '1155542' - }, - '28' => { - 'name' => 'C_FindObjects', - 'offset' => '224', - 'type' => '1155585' - }, - '29' => { - 'name' => 'C_FindObjectsFinal', - 'offset' => '232', - 'type' => '1155633' - }, - '3' => { - 'name' => 'C_GetInfo', - 'offset' => '24', - 'type' => '1153502' - }, - '30' => { - 'name' => 'C_EncryptInit', - 'offset' => '240', - 'type' => '1155645' - }, - '31' => { - 'name' => 'C_Encrypt', - 'offset' => '248', - 'type' => '1155694' - }, - '32' => { - 'name' => 'C_EncryptUpdate', - 'offset' => '256', - 'type' => '1155747' - }, - '33' => { - 'name' => 'C_EncryptFinal', - 'offset' => '264', - 'type' => '1155759' - }, - '34' => { - 'name' => 'C_DecryptInit', - 'offset' => '272', - 'type' => '1155771' - }, - '35' => { - 'name' => 'C_Decrypt', - 'offset' => '280', - 'type' => '1155783' - }, - '36' => { - 'name' => 'C_DecryptUpdate', - 'offset' => '288', - 'type' => '1155795' - }, - '37' => { - 'name' => 'C_DecryptFinal', - 'offset' => '296', - 'type' => '1155807' - }, - '38' => { - 'name' => 'C_DigestInit', - 'offset' => '304', - 'type' => '1155819' - }, - '39' => { - 'name' => 'C_Digest', - 'offset' => '312', - 'type' => '1155857' - }, - '4' => { - 'name' => 'C_GetFunctionList', - 'offset' => '32', - 'type' => '1153541' - }, - '40' => { - 'name' => 'C_DigestUpdate', - 'offset' => '320', - 'type' => '1155869' - }, - '41' => { - 'name' => 'C_DigestKey', - 'offset' => '328', - 'type' => '1155881' - }, - '42' => { - 'name' => 'C_DigestFinal', - 'offset' => '336', - 'type' => '1155893' - }, - '43' => { - 'name' => 'C_SignInit', - 'offset' => '344', - 'type' => '1155905' - }, - '44' => { - 'name' => 'C_Sign', - 'offset' => '352', - 'type' => '1155917' - }, - '45' => { - 'name' => 'C_SignUpdate', - 'offset' => '360', - 'type' => '1155929' - }, - '46' => { - 'name' => 'C_SignFinal', - 'offset' => '368', - 'type' => '1155941' - }, - '47' => { - 'name' => 'C_SignRecoverInit', - 'offset' => '376', - 'type' => '1155953' - }, - '48' => { - 'name' => 'C_SignRecover', - 'offset' => '384', - 'type' => '1155965' - }, - '49' => { - 'name' => 'C_VerifyInit', - 'offset' => '392', - 'type' => '1155977' - }, - '5' => { - 'name' => 'C_GetSlotList', - 'offset' => '40', - 'type' => '1154535' - }, - '50' => { - 'name' => 'C_Verify', - 'offset' => '400', - 'type' => '1155989' - }, - '51' => { - 'name' => 'C_VerifyUpdate', - 'offset' => '408', - 'type' => '1156001' - }, - '52' => { - 'name' => 'C_VerifyFinal', - 'offset' => '416', - 'type' => '1156013' - }, - '53' => { - 'name' => 'C_VerifyRecoverInit', - 'offset' => '424', - 'type' => '1156025' - }, - '54' => { - 'name' => 'C_VerifyRecover', - 'offset' => '432', - 'type' => '1156037' - }, - '55' => { - 'name' => 'C_DigestEncryptUpdate', - 'offset' => '440', - 'type' => '1156049' - }, - '56' => { - 'name' => 'C_DecryptDigestUpdate', - 'offset' => '448', - 'type' => '1156061' - }, - '57' => { - 'name' => 'C_SignEncryptUpdate', - 'offset' => '456', - 'type' => '1156073' - }, - '58' => { - 'name' => 'C_DecryptVerifyUpdate', - 'offset' => '464', - 'type' => '1156085' - }, - '59' => { - 'name' => 'C_GenerateKey', - 'offset' => '472', - 'type' => '1156097' - }, - '6' => { - 'name' => 'C_GetSlotInfo', - 'offset' => '48', - 'type' => '1154590' - }, - '60' => { - 'name' => 'C_GenerateKeyPair', - 'offset' => '480', - 'type' => '1156150' - }, - '61' => { - 'name' => 'C_WrapKey', - 'offset' => '488', - 'type' => '1156218' - }, - '62' => { - 'name' => 'C_UnwrapKey', - 'offset' => '496', - 'type' => '1156276' - }, - '63' => { - 'name' => 'C_DeriveKey', - 'offset' => '504', - 'type' => '1156344' - }, - '64' => { - 'name' => 'C_SeedRandom', - 'offset' => '512', - 'type' => '1156402' - }, - '65' => { - 'name' => 'C_GenerateRandom', - 'offset' => '520', - 'type' => '1156414' - }, - '66' => { - 'name' => 'C_GetFunctionStatus', - 'offset' => '528', - 'type' => '1156426' - }, - '67' => { - 'name' => 'C_CancelFunction', - 'offset' => '536', - 'type' => '1156438' - }, - '68' => { - 'name' => 'C_WaitForSlotEvent', - 'offset' => '544', - 'type' => '1154678' - }, - '7' => { - 'name' => 'C_GetTokenInfo', - 'offset' => '56', - 'type' => '1154634' - }, - '8' => { - 'name' => 'C_GetMechanismList', - 'offset' => '64', - 'type' => '1154721' - }, - '9' => { - 'name' => 'C_GetMechanismInfo', - 'offset' => '72', - 'type' => '1154770' - } - }, - 'Name' => 'struct ck_function_list', - 'Size' => '552', - 'Type' => 'Struct' - }, - '1154535' => { - 'BaseType' => '1154547', - 'Header' => 'pkcs11.h', - 'Line' => '773', - 'Name' => 'CK_C_GetSlotList', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1154547' => { - 'Name' => 'ck_rv_t(*)(unsigned char, ck_slot_id_t*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '152' - }, - '1' => { - 'type' => '1154578' - }, - '2' => { - 'type' => '1154584' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1154578' => { - 'BaseType' => '1152724', - 'Name' => 'ck_slot_id_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1154584' => { - 'BaseType' => '68', - 'Name' => 'unsigned long*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1154590' => { - 'BaseType' => '1154602', - 'Header' => 'pkcs11.h', - 'Line' => '776', - 'Name' => 'CK_C_GetSlotInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1154602' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, struct ck_slot_info*)', - 'Param' => { - '0' => { - 'type' => '1152724' - }, - '1' => { - 'type' => '1154628' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1154628' => { - 'BaseType' => '1152735', - 'Name' => 'struct ck_slot_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1154634' => { - 'BaseType' => '1154646', - 'Header' => 'pkcs11.h', - 'Line' => '778', - 'Name' => 'CK_C_GetTokenInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1154646' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, struct ck_token_info*)', - 'Param' => { - '0' => { - 'type' => '1152724' - }, - '1' => { - 'type' => '1154672' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1154672' => { - 'BaseType' => '1152824', - 'Name' => 'struct ck_token_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1154678' => { - 'BaseType' => '1154690', - 'Header' => 'pkcs11.h', - 'Line' => '780', - 'Name' => 'CK_C_WaitForSlotEvent', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1154690' => { - 'Name' => 'ck_rv_t(*)(ck_flags_t, ck_slot_id_t*, void*)', - 'Param' => { - '0' => { - 'type' => '1152576' - }, - '1' => { - 'type' => '1154578' - }, - '2' => { - 'type' => '211' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1154721' => { - 'BaseType' => '1154733', - 'Header' => 'pkcs11.h', - 'Line' => '782', - 'Name' => 'CK_C_GetMechanismList', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1154733' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, ck_mechanism_type_t*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1152724' - }, - '1' => { - 'type' => '1154764' - }, - '2' => { - 'type' => '1154584' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1154764' => { - 'BaseType' => '1153284', - 'Name' => 'ck_mechanism_type_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1154770' => { - 'BaseType' => '1154782', - 'Header' => 'pkcs11.h', - 'Line' => '786', - 'Name' => 'CK_C_GetMechanismInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1154782' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, ck_mechanism_type_t, struct ck_mechanism_info*)', - 'Param' => { - '0' => { - 'type' => '1152724' - }, - '1' => { - 'type' => '1153284' - }, - '2' => { - 'type' => '1154813' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1154813' => { - 'BaseType' => '1153349', - 'Name' => 'struct ck_mechanism_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1154819' => { - 'BaseType' => '1154831', - 'Header' => 'pkcs11.h', - 'Line' => '789', - 'Name' => 'CK_C_InitToken', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1154831' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, unsigned char*, unsigned long, unsigned char*)', - 'Param' => { - '0' => { - 'type' => '1152724' - }, - '1' => { - 'type' => '3626' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '3626' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1154867' => { - 'BaseType' => '1154879', - 'Header' => 'pkcs11.h', - 'Line' => '792', - 'Name' => 'CK_C_InitPIN', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1154879' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '3626' - }, - '2' => { - 'type' => '68' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1154910' => { - 'BaseType' => '1154922', - 'Header' => 'pkcs11.h', - 'Line' => '795', - 'Name' => 'CK_C_SetPIN', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1154922' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long, unsigned char*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '3626' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '3626' - }, - '4' => { - 'type' => '68' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1154963' => { - 'BaseType' => '1154975', - 'Header' => 'pkcs11.h', - 'Line' => '800', - 'Name' => 'CK_C_OpenSession', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1154975' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, ck_flags_t, void*, ck_notify_t, ck_session_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1152724' - }, - '1' => { - 'type' => '1152576' - }, - '2' => { - 'type' => '211' - }, - '3' => { - 'type' => '1153414' - }, - '4' => { - 'type' => '1155016' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155016' => { - 'BaseType' => '1153069', - 'Name' => 'ck_session_handle_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1155022' => { - 'BaseType' => '1155034', - 'Header' => 'pkcs11.h', - 'Line' => '804', - 'Name' => 'CK_C_CloseSession', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155034' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t)', - 'Param' => { - '0' => { - 'type' => '1153069' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155055' => { - 'BaseType' => '1155067', - 'Header' => 'pkcs11.h', - 'Line' => '805', - 'Name' => 'CK_C_CloseAllSessions', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155067' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t)', - 'Param' => { - '0' => { - 'type' => '1152724' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155088' => { - 'BaseType' => '1155100', - 'Header' => 'pkcs11.h', - 'Line' => '806', - 'Name' => 'CK_C_GetSessionInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155100' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_session_info*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1155126' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155126' => { - 'BaseType' => '1153105', - 'Name' => 'struct ck_session_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1155132' => { - 'BaseType' => '1155144', - 'Header' => 'pkcs11.h', - 'Line' => '809', - 'Name' => 'CK_C_GetOperationState', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155144' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '3626' - }, - '2' => { - 'type' => '1154584' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155175' => { - 'BaseType' => '1155187', - 'Header' => 'pkcs11.h', - 'Line' => '813', - 'Name' => 'CK_C_SetOperationState', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155187' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long, ck_object_handle_t, ck_object_handle_t)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '3626' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '1153171' - }, - '4' => { - 'type' => '1153171' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155228' => { - 'BaseType' => '1155240', - 'Header' => 'pkcs11.h', - 'Line' => '819', - 'Name' => 'CK_C_Login', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155240' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_user_type_t, unsigned char*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1153081' - }, - '2' => { - 'type' => '3626' - }, - '3' => { - 'type' => '68' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155276' => { - 'BaseType' => '1155034', - 'Header' => 'pkcs11.h', - 'Line' => '822', - 'Name' => 'CK_C_Logout', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155288' => { - 'BaseType' => '1155300', - 'Header' => 'pkcs11.h', - 'Line' => '824', - 'Name' => 'CK_C_CreateObject', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155300' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1155336' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '1155342' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155336' => { - 'BaseType' => '1153231', - 'Name' => 'struct ck_attribute*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1155342' => { - 'BaseType' => '1153171', - 'Name' => 'ck_object_handle_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1155348' => { - 'BaseType' => '1155360', - 'Header' => 'pkcs11.h', - 'Line' => '828', - 'Name' => 'CK_C_CopyObject', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155360' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1153171' - }, - '2' => { - 'type' => '1155336' - }, - '3' => { - 'type' => '68' - }, - '4' => { - 'type' => '1155342' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155401' => { - 'BaseType' => '1155413', - 'Header' => 'pkcs11.h', - 'Line' => '832', - 'Name' => 'CK_C_DestroyObject', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155413' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1153171' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155439' => { - 'BaseType' => '1155451', - 'Header' => 'pkcs11.h', - 'Line' => '835', - 'Name' => 'CK_C_GetObjectSize', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155451' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1153171' - }, - '2' => { - 'type' => '1154584' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155482' => { - 'BaseType' => '1155494', - 'Header' => 'pkcs11.h', - 'Line' => '839', - 'Name' => 'CK_C_GetAttributeValue', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155494' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t, struct ck_attribute*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1153171' - }, - '2' => { - 'type' => '1155336' - }, - '3' => { - 'type' => '68' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155530' => { - 'BaseType' => '1155494', - 'Header' => 'pkcs11.h', - 'Line' => '844', - 'Name' => 'CK_C_SetAttributeValue', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155542' => { - 'BaseType' => '1155554', - 'Header' => 'pkcs11.h', - 'Line' => '849', - 'Name' => 'CK_C_FindObjectsInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155554' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_attribute*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1155336' - }, - '2' => { - 'type' => '68' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155585' => { - 'BaseType' => '1155597', - 'Header' => 'pkcs11.h', - 'Line' => '853', - 'Name' => 'CK_C_FindObjects', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155597' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t*, unsigned long, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1155342' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '1154584' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155633' => { - 'BaseType' => '1155034', - 'Header' => 'pkcs11.h', - 'Line' => '858', - 'Name' => 'CK_C_FindObjectsFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155645' => { - 'BaseType' => '1155657', - 'Header' => 'pkcs11.h', - 'Line' => '861', - 'Name' => 'CK_C_EncryptInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155657' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1155688' - }, - '2' => { - 'type' => '1153171' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155688' => { - 'BaseType' => '1153296', - 'Name' => 'struct ck_mechanism*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1155694' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '865', - 'Name' => 'CK_C_Encrypt', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155706' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long, unsigned char*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '3626' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '3626' - }, - '4' => { - 'type' => '1154584' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155747' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '870', - 'Name' => 'CK_C_EncryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155759' => { - 'BaseType' => '1155144', - 'Header' => 'pkcs11.h', - 'Line' => '875', - 'Name' => 'CK_C_EncryptFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155771' => { - 'BaseType' => '1155657', - 'Header' => 'pkcs11.h', - 'Line' => '880', - 'Name' => 'CK_C_DecryptInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155783' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '884', - 'Name' => 'CK_C_Decrypt', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155795' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '889', - 'Name' => 'CK_C_DecryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155807' => { - 'BaseType' => '1155144', - 'Header' => 'pkcs11.h', - 'Line' => '894', - 'Name' => 'CK_C_DecryptFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155819' => { - 'BaseType' => '1155831', - 'Header' => 'pkcs11.h', - 'Line' => '899', - 'Name' => 'CK_C_DigestInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155831' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1155688' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1155857' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '902', - 'Name' => 'CK_C_Digest', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155869' => { - 'BaseType' => '1154879', - 'Header' => 'pkcs11.h', - 'Line' => '907', - 'Name' => 'CK_C_DigestUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155881' => { - 'BaseType' => '1155413', - 'Header' => 'pkcs11.h', - 'Line' => '910', - 'Name' => 'CK_C_DigestKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155893' => { - 'BaseType' => '1155144', - 'Header' => 'pkcs11.h', - 'Line' => '912', - 'Name' => 'CK_C_DigestFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155905' => { - 'BaseType' => '1155657', - 'Header' => 'pkcs11.h', - 'Line' => '917', - 'Name' => 'CK_C_SignInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155917' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '921', - 'Name' => 'CK_C_Sign', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155929' => { - 'BaseType' => '1154879', - 'Header' => 'pkcs11.h', - 'Line' => '926', - 'Name' => 'CK_C_SignUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155941' => { - 'BaseType' => '1155144', - 'Header' => 'pkcs11.h', - 'Line' => '929', - 'Name' => 'CK_C_SignFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155953' => { - 'BaseType' => '1155657', - 'Header' => 'pkcs11.h', - 'Line' => '933', - 'Name' => 'CK_C_SignRecoverInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155965' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '937', - 'Name' => 'CK_C_SignRecover', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155977' => { - 'BaseType' => '1155657', - 'Header' => 'pkcs11.h', - 'Line' => '943', - 'Name' => 'CK_C_VerifyInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1155989' => { - 'BaseType' => '1154922', - 'Header' => 'pkcs11.h', - 'Line' => '947', - 'Name' => 'CK_C_Verify', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156001' => { - 'BaseType' => '1154879', - 'Header' => 'pkcs11.h', - 'Line' => '952', - 'Name' => 'CK_C_VerifyUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156013' => { - 'BaseType' => '1154879', - 'Header' => 'pkcs11.h', - 'Line' => '955', - 'Name' => 'CK_C_VerifyFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156025' => { - 'BaseType' => '1155657', - 'Header' => 'pkcs11.h', - 'Line' => '959', - 'Name' => 'CK_C_VerifyRecoverInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156037' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '963', - 'Name' => 'CK_C_VerifyRecover', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156049' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '970', - 'Name' => 'CK_C_DigestEncryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156061' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '975', - 'Name' => 'CK_C_DecryptDigestUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156073' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '981', - 'Name' => 'CK_C_SignEncryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156085' => { - 'BaseType' => '1155706', - 'Header' => 'pkcs11.h', - 'Line' => '986', - 'Name' => 'CK_C_DecryptVerifyUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156097' => { - 'BaseType' => '1156109', - 'Header' => 'pkcs11.h', - 'Line' => '993', - 'Name' => 'CK_C_GenerateKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156109' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1155688' - }, - '2' => { - 'type' => '1155336' - }, - '3' => { - 'type' => '68' - }, - '4' => { - 'type' => '1155342' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1156150' => { - 'BaseType' => '1156162', - 'Header' => 'pkcs11.h', - 'Line' => '999', - 'Name' => 'CK_C_GenerateKeyPair', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156162' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, struct ck_attribute*, unsigned long, struct ck_attribute*, unsigned long, ck_object_handle_t*, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1155688' - }, - '2' => { - 'type' => '1155336' - }, - '3' => { - 'type' => '68' - }, - '4' => { - 'type' => '1155336' - }, - '5' => { - 'type' => '68' - }, - '6' => { - 'type' => '1155342' - }, - '7' => { - 'type' => '1155342' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1156218' => { - 'BaseType' => '1156230', - 'Header' => 'pkcs11.h', - 'Line' => '1008', - 'Name' => 'CK_C_WrapKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156230' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t, ck_object_handle_t, unsigned char*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1155688' - }, - '2' => { - 'type' => '1153171' - }, - '3' => { - 'type' => '1153171' - }, - '4' => { - 'type' => '3626' - }, - '5' => { - 'type' => '1154584' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1156276' => { - 'BaseType' => '1156288', - 'Header' => 'pkcs11.h', - 'Line' => '1015', - 'Name' => 'CK_C_UnwrapKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156288' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t, unsigned char*, unsigned long, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1155688' - }, - '2' => { - 'type' => '1153171' - }, - '3' => { - 'type' => '3626' - }, - '4' => { - 'type' => '68' - }, - '5' => { - 'type' => '1155336' - }, - '6' => { - 'type' => '68' - }, - '7' => { - 'type' => '1155342' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1156344' => { - 'BaseType' => '1156356', - 'Header' => 'pkcs11.h', - 'Line' => '1024', - 'Name' => 'CK_C_DeriveKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156356' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1153069' - }, - '1' => { - 'type' => '1155688' - }, - '2' => { - 'type' => '1153171' - }, - '3' => { - 'type' => '1155336' - }, - '4' => { - 'type' => '68' - }, - '5' => { - 'type' => '1155342' - } - }, - 'Return' => '1153402', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1156402' => { - 'BaseType' => '1154879', - 'Header' => 'pkcs11.h', - 'Line' => '1032', - 'Name' => 'CK_C_SeedRandom', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156414' => { - 'BaseType' => '1154879', - 'Header' => 'pkcs11.h', - 'Line' => '1035', - 'Name' => 'CK_C_GenerateRandom', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156426' => { - 'BaseType' => '1155034', - 'Header' => 'pkcs11.h', - 'Line' => '1040', - 'Name' => 'CK_C_GetFunctionStatus', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156438' => { - 'BaseType' => '1155034', - 'Header' => 'pkcs11.h', - 'Line' => '1041', - 'Name' => 'CK_C_CancelFunction', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1156599' => { - 'Header' => 'pkcs11_int.h', - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'module', - 'offset' => '0', - 'type' => '1153580' - }, - '1' => { - 'name' => 'tinfo', - 'offset' => '8', - 'type' => '1152824' - }, - '2' => { - 'name' => 'slot_info', - 'offset' => '216', - 'type' => '1152735' - }, - '3' => { - 'name' => 'pks', - 'offset' => '328', - 'type' => '1153069' - }, - '4' => { - 'name' => 'sid', - 'offset' => '336', - 'type' => '1152724' - }, - '5' => { - 'name' => 'init', - 'offset' => '344', - 'type' => '145' - } - }, - 'Name' => 'struct pkcs11_session_info', - 'PrivateABI' => 1, - 'Size' => '352', - 'Type' => 'Struct' - }, - '1157105' => { - 'BaseType' => '883485', - 'Name' => 'gnutls_pkcs11_obj_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1157111' => { - 'BaseType' => '1157105', - 'Name' => 'gnutls_pkcs11_obj_t*const', - 'Size' => '8', - 'Type' => 'Const' - }, - '116' => { - 'BaseType' => '110', - 'Name' => 'char const*const', - 'Size' => '8', - 'Type' => 'Const' - }, - '1164428' => { - 'BaseType' => '1157105', - 'Name' => 'gnutls_pkcs11_obj_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1194089' => { - 'Header' => 'x509.h', - 'Line' => '1418', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '235' - }, - '1' => { - 'name' => 'critical', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'offset' => '16', - 'type' => '3632' - } - }, - 'Name' => 'struct gnutls_x509_ext_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '1194142' => { - 'BaseType' => '1194089', - 'Header' => 'x509.h', - 'Line' => '1422', - 'Name' => 'gnutls_x509_ext_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '1206728' => { - 'BaseType' => '1194142', - 'Name' => 'gnutls_x509_ext_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1207285' => { - 'BaseType' => '1206728', - 'Name' => 'gnutls_x509_ext_st**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '121' => { - 'Name' => 'char', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '12416' => { - 'BaseType' => '7999', - 'Name' => 'handshake_buffer_st[6]', - 'Size' => '432', - 'Type' => 'Array' - }, - '12432' => { - 'Header' => 'gnutls_auth.h', - 'Line' => '28', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'gnutls_generate_server_certificate', - 'offset' => '8', - 'type' => '12743' - }, - '10' => { - 'name' => 'gnutls_process_client_kx', - 'offset' => '80', - 'type' => '12774' - }, - '11' => { - 'name' => 'gnutls_process_client_crt_vrfy', - 'offset' => '88', - 'type' => '12774' - }, - '12' => { - 'name' => 'gnutls_process_server_crt_request', - 'offset' => '96', - 'type' => '12774' - }, - '2' => { - 'name' => 'gnutls_generate_client_certificate', - 'offset' => '16', - 'type' => '12743' - }, - '3' => { - 'name' => 'gnutls_generate_server_kx', - 'offset' => '24', - 'type' => '12743' - }, - '4' => { - 'name' => 'gnutls_generate_client_kx', - 'offset' => '32', - 'type' => '12743' - }, - '5' => { - 'name' => 'gnutls_generate_client_crt_vrfy', - 'offset' => '40', - 'type' => '12743' - }, - '6' => { - 'name' => 'gnutls_generate_server_crt_request', - 'offset' => '48', - 'type' => '12743' - }, - '7' => { - 'name' => 'gnutls_process_server_certificate', - 'offset' => '56', - 'type' => '12774' - }, - '8' => { - 'name' => 'gnutls_process_client_certificate', - 'offset' => '64', - 'type' => '12774' - }, - '9' => { - 'name' => 'gnutls_process_server_kx', - 'offset' => '72', - 'type' => '12774' - } - }, - 'Name' => 'struct mod_auth_st_int', - 'PrivateABI' => 1, - 'Size' => '104', - 'Type' => 'Struct' - }, - '12601' => { - 'BaseType' => '12432', - 'Name' => 'struct mod_auth_st_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '12607' => { - 'BaseType' => '957', - 'Name' => 'uint16_t[32]', - 'Size' => '64', - 'Type' => 'Array' - }, - '12623' => { - 'BaseType' => '10923', - 'Name' => 'anon-struct-gnutls_int.h-941[32]', - 'Size' => '768', - 'Type' => 'Array' - }, - '12639' => { - 'BaseType' => '10972', - 'Name' => 'anon-struct-gnutls_int.h-947[32]', - 'Size' => '768', - 'Type' => 'Array' - }, - '12655' => { - 'BaseType' => '152', - 'Name' => 'unsigned char[36]', - 'Size' => '36', - 'Type' => 'Array' - }, - '12671' => { - 'BaseType' => '3865', - 'Name' => 'gnutls_certificate_verify_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '12677' => { - 'BaseType' => '3991', - 'Name' => 'gnutls_typed_vdata_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '12683' => { - 'Header' => 'gnutls_int.h', - 'Line' => '1019', - 'Memb' => { - '0' => { - 'name' => 'record_buffer', - 'offset' => '0', - 'type' => '8095' - }, - '1' => { - 'name' => 'handshake_hash_buffer_prev_len', - 'offset' => '32', - 'type' => '75' - }, - '10' => { - 'name' => 'may_not_write', - 'offset' => '86', - 'type' => '8952' - }, - '11' => { - 'name' => 'read_eof', - 'offset' => '87', - 'type' => '8952' - }, - '12' => { - 'name' => 'last_alert', - 'offset' => '88', - 'type' => '75' - }, - '13' => { - 'name' => 'last_handshake_in', - 'offset' => '92', - 'type' => '75' - }, - '14' => { - 'name' => 'last_handshake_out', - 'offset' => '96', - 'type' => '75' - }, - '15' => { - 'name' => 'priorities', - 'offset' => '100', - 'type' => '3243' - }, - '16' => { - 'name' => 'resumed', - 'offset' => '1192', - 'type' => '8952' - }, - '17' => { - 'name' => 'resumption_requested', - 'offset' => '1193', - 'type' => '8952' - }, - '18' => { - 'name' => 'resumed_security_parameters', - 'offset' => '1200', - 'type' => '10542' - }, - '19' => { - 'name' => 'handshake_send_buffer', - 'offset' => '1424', - 'type' => '8095' - }, - '2' => { - 'name' => 'handshake_hash_buffer_client_kx_len', - 'offset' => '36', - 'type' => '145' - }, - '20' => { - 'name' => 'handshake_recv_buffer', - 'offset' => '1456', - 'type' => '12416' - }, - '21' => { - 'name' => 'handshake_recv_buffer_size', - 'offset' => '1888', - 'type' => '75' - }, - '22' => { - 'name' => 'record_recv_buffer', - 'offset' => '1896', - 'type' => '8095' - }, - '23' => { - 'name' => 'record_send_buffer', - 'offset' => '1928', - 'type' => '8095' - }, - '24' => { - 'name' => 'record_send_buffer_user_size', - 'offset' => '1960', - 'type' => '52' - }, - '25' => { - 'name' => 'record_flush_mode', - 'offset' => '1968', - 'type' => '5465' - }, - '26' => { - 'name' => 'record_presend_buffer', - 'offset' => '1976', - 'type' => '7709' - }, - '27' => { - 'name' => 'expire_time', - 'offset' => '2008', - 'type' => '145' - }, - '28' => { - 'name' => 'auth_struct', - 'offset' => '2016', - 'type' => '12601' - }, - '29' => { - 'name' => 'adv_version_major', - 'offset' => '2024', - 'type' => '946' - }, - '3' => { - 'name' => 'handshake_hash_buffer', - 'offset' => '40', - 'type' => '7709' - }, - '30' => { - 'name' => 'adv_version_minor', - 'offset' => '2025', - 'type' => '946' - }, - '31' => { - 'name' => 'send_cert_req', - 'offset' => '2028', - 'type' => '145' - }, - '32' => { - 'name' => 'max_handshake_data_buffer_size', - 'offset' => '2032', - 'type' => '52' - }, - '33' => { - 'name' => 'pull_timeout_func', - 'offset' => '2040', - 'type' => '4710' - }, - '34' => { - 'name' => 'pull_func', - 'offset' => '2048', - 'type' => '4624' - }, - '35' => { - 'name' => 'push_func', - 'offset' => '2056', - 'type' => '4667' - }, - '36' => { - 'name' => 'vec_push_func', - 'offset' => '2064', - 'type' => '4748' - }, - '37' => { - 'name' => 'errno_func', - 'offset' => '2072', - 'type' => '4797' - }, - '38' => { - 'name' => 'transport_recv_ptr', - 'offset' => '2080', - 'type' => '3086' - }, - '39' => { - 'name' => 'transport_send_ptr', - 'offset' => '2088', - 'type' => '3086' - }, - '4' => { - 'name' => 'resumable', - 'offset' => '72', - 'type' => '8952' - }, - '40' => { - 'name' => 'db_store_func', - 'offset' => '2096', - 'type' => '4003' - }, - '41' => { - 'name' => 'db_retrieve_func', - 'offset' => '2104', - 'type' => '4084' - }, - '42' => { - 'name' => 'db_remove_func', - 'offset' => '2112', - 'type' => '4046' - }, - '43' => { - 'name' => 'db_ptr', - 'offset' => '2120', - 'type' => '211' - }, - '44' => { - 'name' => 'user_hello_func', - 'offset' => '2128', - 'type' => '4181' - }, - '45' => { - 'name' => 'h_hook', - 'offset' => '2136', - 'type' => '4122' - }, - '46' => { - 'name' => 'h_type', - 'offset' => '2144', - 'type' => '145' - }, - '47' => { - 'name' => 'h_post', - 'offset' => '2148', - 'type' => '263' - }, - '48' => { - 'name' => 'selected_cert_list', - 'offset' => '2152', - 'type' => '5142' - }, - '49' => { - 'name' => 'selected_cert_list_length', - 'offset' => '2160', - 'type' => '263' - }, - '5' => { - 'name' => 'ticket_sent', - 'offset' => '73', - 'type' => '8952' - }, - '50' => { - 'name' => 'selected_key', - 'offset' => '2168', - 'type' => '4222' - }, - '51' => { - 'name' => 'selected_need_free', - 'offset' => '2176', - 'type' => '8952' - }, - '52' => { - 'name' => 'extensions_sent', - 'offset' => '2178', - 'type' => '12607' - }, - '53' => { - 'name' => 'extensions_sent_size', - 'offset' => '2242', - 'type' => '957' - }, - '54' => { - 'name' => 'pgp_fingerprint', - 'offset' => '2244', - 'type' => '8952' - }, - '55' => { - 'name' => 'default_record_version', - 'offset' => '2245', - 'type' => '10488' - }, - '56' => { - 'name' => 'default_hello_version', - 'offset' => '2247', - 'type' => '10488' - }, - '57' => { - 'name' => 'user_ptr', - 'offset' => '2256', - 'type' => '211' - }, - '58' => { - 'name' => 'enable_private', - 'offset' => '2264', - 'type' => '8952' - }, - '59' => { - 'name' => 'direction', - 'offset' => '2265', - 'type' => '8952' - }, - '6' => { - 'name' => 'handshake_final_state', - 'offset' => '76', - 'type' => '7606' - }, - '60' => { - 'name' => 'openpgp_recv_key_func', - 'offset' => '2272', - 'type' => '5029' - }, - '61' => { - 'name' => 'ignore_rdn_sequence', - 'offset' => '2280', - 'type' => '8952' - }, - '62' => { - 'name' => 'rsa_pms_version', - 'offset' => '2281', - 'type' => '10488' - }, - '63' => { - 'name' => 'params', - 'offset' => '2288', - 'type' => '10720' - }, - '64' => { - 'name' => 'errnum', - 'offset' => '2304', - 'type' => '75' - }, - '65' => { - 'name' => 'srp_prime_bits', - 'offset' => '2308', - 'type' => '957' - }, - '66' => { - 'name' => 'initial_negotiation_completed', - 'offset' => '2310', - 'type' => '8952' - }, - '67' => { - 'name' => 'extension_int_data', - 'offset' => '2312', - 'type' => '12623' - }, - '68' => { - 'name' => 'resumed_extension_int_data', - 'offset' => '3080', - 'type' => '12639' - }, - '69' => { - 'name' => 'transport', - 'offset' => '3848', - 'type' => '5425' - }, - '7' => { - 'name' => 'handshake_state', - 'offset' => '80', - 'type' => '7606' - }, - '70' => { - 'name' => 'dtls', - 'offset' => '3856', - 'type' => '10911' - }, - '71' => { - 'name' => 'handshake_suspicious_loops', - 'offset' => '3944', - 'type' => '145' - }, - '72' => { - 'name' => 'handshake_in_progress', - 'offset' => '3948', - 'type' => '8952' - }, - '73' => { - 'name' => 'premaster_set', - 'offset' => '3949', - 'type' => '8952' - }, - '74' => { - 'name' => 'cb_tls_unique_len', - 'offset' => '3952', - 'type' => '145' - }, - '75' => { - 'name' => 'cb_tls_unique', - 'offset' => '3956', - 'type' => '12655' - }, - '76' => { - 'name' => 'handshake_start_time', - 'offset' => '3992', - 'type' => '274' - }, - '77' => { - 'name' => 'handshake_endtime', - 'offset' => '4008', - 'type' => '252' - }, - '78' => { - 'name' => 'handshake_timeout_ms', - 'offset' => '4016', - 'type' => '145' - }, - '79' => { - 'name' => 'record_timeout_ms', - 'offset' => '4020', - 'type' => '145' - }, - '8' => { - 'name' => 'invalid_connection', - 'offset' => '84', - 'type' => '8952' - }, - '80' => { - 'name' => 'hb_local_data', - 'offset' => '4024', - 'type' => '7709' - }, - '81' => { - 'name' => 'hb_remote_data', - 'offset' => '4056', - 'type' => '7709' - }, - '82' => { - 'name' => 'hb_ping_start', - 'offset' => '4088', - 'type' => '274' - }, - '83' => { - 'name' => 'hb_ping_sent', - 'offset' => '4104', - 'type' => '274' - }, - '84' => { - 'name' => 'hb_actual_retrans_timeout_ms', - 'offset' => '4120', - 'type' => '145' - }, - '85' => { - 'name' => 'hb_retrans_timeout_ms', - 'offset' => '4124', - 'type' => '145' - }, - '86' => { - 'name' => 'hb_total_timeout_ms', - 'offset' => '4128', - 'type' => '145' - }, - '87' => { - 'name' => 'ocsp_check_ok', - 'offset' => '4132', - 'type' => '8952' - }, - '88' => { - 'name' => 'hb_state', - 'offset' => '4136', - 'type' => '7652' - }, - '89' => { - 'name' => 'recv_state', - 'offset' => '4140', - 'type' => '7692' - }, - '9' => { - 'name' => 'may_not_read', - 'offset' => '85', - 'type' => '8952' - }, - '90' => { - 'name' => 'sc_random_set', - 'offset' => '4144', - 'type' => '8952' - }, - '91' => { - 'name' => 'no_replay_protection', - 'offset' => '4145', - 'type' => '8952' - }, - '92' => { - 'name' => 'try_ext_master_secret', - 'offset' => '4146', - 'type' => '8952' - }, - '93' => { - 'name' => 'verify_callback', - 'offset' => '4152', - 'type' => '12671' - }, - '94' => { - 'name' => 'vc_data', - 'offset' => '4160', - 'type' => '12677' - }, - '95' => { - 'name' => 'vc_sdata', - 'offset' => '4168', - 'type' => '3991' - }, - '96' => { - 'name' => 'vc_elements', - 'offset' => '4192', - 'type' => '145' - }, - '97' => { - 'name' => 'vc_status', - 'offset' => '4196', - 'type' => '145' - }, - '98' => { - 'name' => 'additional_verify_flags', - 'offset' => '4200', - 'type' => '145' - }, - '99' => { - 'name' => 'blocking', - 'offset' => '4204', - 'type' => '8952' - } - }, - 'Name' => 'struct internals_st', - 'PrivateABI' => 1, - 'Size' => '4208', - 'Type' => 'Struct' - }, - '12695' => { - 'BaseType' => '12711', - 'Name' => 'record_parameters_st*[16]', - 'Size' => '128', - 'Type' => 'Array' - }, - '12711' => { - 'BaseType' => '8621', - 'Name' => 'record_parameters_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '12737' => { - 'BaseType' => '7709', - 'Name' => 'gnutls_buffer_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '12743' => { - 'Name' => 'int(*)(gnutls_session_t, gnutls_buffer_st*)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '12737' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '12774' => { - 'Name' => 'int(*)(gnutls_session_t, uint8_t*, size_t)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '7703' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '128' => { - 'BaseType' => '121', - 'Name' => 'char const', - 'Size' => '1', - 'Type' => 'Const' - }, - '1307663' => { - 'BaseType' => '1307675', - 'Header' => 'gnutls.h', - 'Line' => '1781', - 'Name' => 'gnutls_srp_server_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1307675' => { - 'BaseType' => '1307681', - 'Name' => 'struct gnutls_srp_server_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1307681' => { - 'Header' => 'srp.h', - 'Line' => '34', - 'Memb' => { - '0' => { - 'name' => 'password_file', - 'offset' => '0', - 'type' => '235' - }, - '1' => { - 'name' => 'password_conf_file', - 'offset' => '8', - 'type' => '235' - }, - '2' => { - 'name' => 'pwd_callback', - 'offset' => '16', - 'type' => '1316055' - }, - '3' => { - 'name' => 'fake_salt_seed', - 'offset' => '24', - 'type' => '3632' - }, - '4' => { - 'name' => 'fake_salt_length', - 'offset' => '40', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_srp_server_credentials_st', - 'PrivateABI' => 1, - 'Size' => '48', - 'Type' => 'Struct' - }, - '1307754' => { - 'BaseType' => '1307766', - 'Header' => 'gnutls.h', - 'Line' => '1783', - 'Name' => 'gnutls_srp_client_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1307766' => { - 'BaseType' => '1307772', - 'Name' => 'struct gnutls_srp_client_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1307772' => { - 'Header' => 'srp.h', - 'Line' => '28', - 'Memb' => { - '0' => { - 'name' => 'username', - 'offset' => '0', - 'type' => '235' - }, - '1' => { - 'name' => 'password', - 'offset' => '8', - 'type' => '235' - }, - '2' => { - 'name' => 'get_function', - 'offset' => '16', - 'type' => '1316049' - } - }, - 'Name' => 'struct gnutls_srp_client_credentials_st', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '1307941' => { - 'BaseType' => '1307953', - 'Header' => 'gnutls.h', - 'Line' => '1833', - 'Name' => 'gnutls_srp_server_credentials_function', - 'Type' => 'Typedef' - }, - '1307953' => { - 'Name' => 'int()(gnutls_session_t, char const*, gnutls_datum_t*, gnutls_datum_t*, gnutls_datum_t*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '4233' - }, - '3' => { - 'type' => '4233' - }, - '4' => { - 'type' => '4233' - }, - '5' => { - 'type' => '4233' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '1307993' => { - 'BaseType' => '1308005', - 'Header' => 'gnutls.h', - 'Line' => '1847', - 'Name' => 'gnutls_srp_client_credentials_function', - 'Type' => 'Typedef' - }, - '1308005' => { - 'Name' => 'int()(gnutls_session_t, char**, char**)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '1002' - }, - '2' => { - 'type' => '1002' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '1316049' => { - 'BaseType' => '1307993', - 'Name' => 'gnutls_srp_client_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1316055' => { - 'BaseType' => '1307941', - 'Name' => 'gnutls_srp_server_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1318138' => { - 'BaseType' => '1307663', - 'Name' => 'gnutls_srp_server_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1318492' => { - 'BaseType' => '1307754', - 'Name' => 'gnutls_srp_client_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1328726' => { - 'BaseType' => '1328738', - 'Header' => 'gnutls.h', - 'Line' => '1878', - 'Name' => 'gnutls_psk_client_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1328738' => { - 'BaseType' => '1328744', - 'Name' => 'struct gnutls_psk_client_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1328744' => { - 'Header' => 'psk.h', - 'Line' => '29', - 'Memb' => { - '0' => { - 'name' => 'username', - 'offset' => '0', - 'type' => '3632' - }, - '1' => { - 'name' => 'key', - 'offset' => '16', - 'type' => '3632' - }, - '2' => { - 'name' => 'get_function', - 'offset' => '32', - 'type' => '1336807' - } - }, - 'Name' => 'struct gnutls_psk_client_credentials_st', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '1328793' => { - 'Header' => 'gnutls.h', - 'Line' => '1887', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PSK_KEY_RAW', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PSK_KEY_HEX', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_psk_key_flags', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1328823' => { - 'BaseType' => '1328793', - 'Header' => 'gnutls.h', - 'Line' => '1890', - 'Name' => 'gnutls_psk_key_flags', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1328872' => { - 'BaseType' => '1328884', - 'Header' => 'gnutls.h', - 'Line' => '1926', - 'Name' => 'gnutls_psk_client_credentials_function', - 'Type' => 'Typedef' - }, - '1328884' => { - 'Name' => 'int()(gnutls_session_t, char**, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '1002' - }, - '2' => { - 'type' => '4233' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '1336807' => { - 'BaseType' => '1328872', - 'Name' => 'gnutls_psk_client_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1337779' => { - 'BaseType' => '586075', - 'Name' => 'gnutls_psk_server_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1338394' => { - 'BaseType' => '1328726', - 'Name' => 'gnutls_psk_client_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1342545' => { - 'BaseType' => '178', - 'Header' => 'stdio.h', - 'Line' => '90', - 'Name' => 'off_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1361353' => { - 'BaseType' => '121', - 'Name' => 'char[64]', - 'Size' => '64', - 'Type' => 'Array' - }, - '13694' => { - 'BaseType' => '3697', - 'Name' => 'gnutls_range_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '140470' => { - 'BaseType' => '121', - 'Name' => 'char[32]', - 'Size' => '32', - 'Type' => 'Array' - }, - '142364' => { - 'Header' => 'gnutls.h', - 'Line' => '210', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PARAMS_RSA_EXPORT', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_PARAMS_DH', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_PARAMS_ECDH', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_params_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '143221' => { - 'BaseType' => '2768', - 'Name' => 'gnutls_pk_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '1432880' => { - 'BaseType' => '742906', - 'Name' => 'gnutls_x509_crl_t const', - 'Size' => '8', - 'Type' => 'Const' - }, - '1433999' => { - 'BaseType' => '1434011', - 'Header' => 'x509.h', - 'Line' => '701', - 'Name' => 'gnutls_x509_crl_iter_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1434011' => { - 'BaseType' => '1434017', - 'Name' => 'struct gnutls_x509_crl_iter*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1434017' => { - 'Header' => 'x509_int.h', - 'Line' => '45', - 'Memb' => { - '0' => { - 'name' => 'rcache', - 'offset' => '0', - 'type' => '9632' - }, - '1' => { - 'name' => 'rcache_idx', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_crl_iter', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '143689' => { - 'BaseType' => '143701', - 'Header' => 'gnutls.h', - 'Line' => '790', - 'Name' => 'gnutls_rsa_params_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '143701' => { - 'BaseType' => '143707', - 'Name' => 'struct gnutls_x509_privkey_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '143707' => { - 'Header' => 'x509_int.h', - 'Line' => '116', - 'Memb' => { - '0' => { - 'name' => 'params', - 'offset' => '0', - 'type' => '7376' - }, - '1' => { - 'name' => 'pk_algorithm', - 'offset' => '144', - 'type' => '2768' - }, - '2' => { - 'name' => 'expanded', - 'offset' => '148', - 'type' => '145' - }, - '3' => { - 'name' => 'key', - 'offset' => '152', - 'type' => '9632' - }, - '4' => { - 'name' => 'pin', - 'offset' => '160', - 'type' => '150955' - } - }, - 'Name' => 'struct gnutls_x509_privkey_int', - 'PrivateABI' => 1, - 'Size' => '176', - 'Type' => 'Struct' - }, - '144186' => { - 'Header' => 'gnutls.h', - 'Line' => '803', - 'Memb' => { - '0' => { - 'name' => 'dh', - 'offset' => '0', - 'type' => '3185' - }, - '1' => { - 'name' => 'rsa_export', - 'offset' => '0', - 'type' => '143689' - } - }, - 'Name' => 'union params', - 'Size' => '8', - 'Type' => 'Union' - }, - '144223' => { - 'Header' => 'gnutls.h', - 'Line' => '801', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '142364' - }, - '1' => { - 'name' => 'params', - 'offset' => '8', - 'type' => '144186' - }, - '2' => { - 'name' => 'deinit', - 'offset' => '16', - 'type' => '75' - } - }, - 'Name' => 'struct gnutls_params_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '144276' => { - 'BaseType' => '144223', - 'Header' => 'gnutls.h', - 'Line' => '808', - 'Name' => 'gnutls_params_st', - 'Size' => '24', - 'Type' => 'Typedef' - }, - '144288' => { - 'BaseType' => '144300', - 'Header' => 'gnutls.h', - 'Line' => '810', - 'Name' => 'gnutls_params_function', - 'Type' => 'Typedef' - }, - '144300' => { - 'Name' => 'int()(gnutls_session_t, gnutls_params_type_t, gnutls_params_st*)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '142364' - }, - '2' => { - 'type' => '144325' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '144325' => { - 'BaseType' => '144276', - 'Name' => 'gnutls_params_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1443301' => { - 'BaseType' => '756477', - 'Name' => 'gnutls_x509_crl_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1447392' => { - 'BaseType' => '1433999', - 'Name' => 'gnutls_x509_crl_iter_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '144851' => { - 'BaseType' => '4222', - 'Header' => 'gnutls.h', - 'Line' => '1379', - 'Name' => 'gnutls_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '144874' => { - 'BaseType' => '143701', - 'Header' => 'gnutls.h', - 'Line' => '1382', - 'Name' => 'gnutls_x509_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '144886' => { - 'BaseType' => '144898', - 'Header' => 'gnutls.h', - 'Line' => '1388', - 'Name' => 'gnutls_x509_crt_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '144898' => { - 'BaseType' => '144904', - 'Name' => 'struct gnutls_x509_crt_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '144904' => { - 'Header' => 'x509_int.h', - 'Line' => '68', - 'Memb' => { - '0' => { - 'name' => 'cert', - 'offset' => '0', - 'type' => '9632' - }, - '1' => { - 'name' => 'use_extensions', - 'offset' => '8', - 'type' => '75' - }, - '2' => { - 'name' => 'expanded', - 'offset' => '12', - 'type' => '75' - }, - '3' => { - 'name' => 'raw_dn', - 'offset' => '16', - 'type' => '3632' - }, - '4' => { - 'name' => 'raw_issuer_dn', - 'offset' => '32', - 'type' => '3632' - }, - '5' => { - 'name' => 'raw_spki', - 'offset' => '48', - 'type' => '3632' - }, - '6' => { - 'name' => 'der', - 'offset' => '64', - 'type' => '3632' - }, - '7' => { - 'name' => 'pin', - 'offset' => '80', - 'type' => '150955' - }, - '8' => { - 'name' => 'dn', - 'offset' => '96', - 'type' => '155384' - }, - '9' => { - 'name' => 'idn', - 'offset' => '104', - 'type' => '155384' - } - }, - 'Name' => 'struct gnutls_x509_crt_int', - 'PrivateABI' => 1, - 'Size' => '112', - 'Type' => 'Struct' - }, - '145' => { - 'Name' => 'unsigned int', - 'Size' => '4', - 'Type' => 'Intrinsic' - }, - '145036' => { - 'BaseType' => '145048', - 'Header' => 'gnutls.h', - 'Line' => '1394', - 'Name' => 'gnutls_openpgp_keyring_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '145048' => { - 'BaseType' => '145054', - 'Name' => 'struct gnutls_openpgp_keyring_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '145054' => { - 'Header' => 'openpgp_int.h', - 'Line' => '54', - 'Memb' => { - '0' => { - 'name' => 'db', - 'offset' => '0', - 'type' => '155417' - } - }, - 'Name' => 'struct gnutls_openpgp_keyring_int', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '145078' => { - 'BaseType' => '145090', - 'Header' => 'gnutls.h', - 'Line' => '1401', - 'Name' => 'gnutls_certificate_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '145090' => { - 'BaseType' => '145096', - 'Name' => 'struct gnutls_certificate_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '145096' => { - 'Header' => 'cert.h', - 'Line' => '42', - 'Memb' => { - '0' => { - 'name' => 'dh_params', - 'offset' => '0', - 'type' => '3185' - }, - '1' => { - 'name' => 'params_func', - 'offset' => '8', - 'type' => '155577' - }, - '10' => { - 'name' => 'verify_bits', - 'offset' => '68', - 'type' => '145' - }, - '11' => { - 'name' => 'get_cert_callback', - 'offset' => '72', - 'type' => '155589' - }, - '12' => { - 'name' => 'get_cert_callback2', - 'offset' => '80', - 'type' => '155595' - }, - '13' => { - 'name' => 'verify_callback', - 'offset' => '88', - 'type' => '12671' - }, - '14' => { - 'name' => 'pin', - 'offset' => '96', - 'type' => '150955' - }, - '15' => { - 'name' => 'pin_tmp', - 'offset' => '112', - 'type' => '140470' - }, - '16' => { - 'name' => 'ocsp_func', - 'offset' => '144', - 'type' => '145337' - }, - '17' => { - 'name' => 'ocsp_func_ptr', - 'offset' => '152', - 'type' => '211' - }, - '18' => { - 'name' => 'ocsp_response_file', - 'offset' => '160', - 'type' => '235' - }, - '2' => { - 'name' => 'certs', - 'offset' => '16', - 'type' => '155583' - }, - '3' => { - 'name' => 'ncerts', - 'offset' => '24', - 'type' => '145' - }, - '4' => { - 'name' => 'pkey', - 'offset' => '32', - 'type' => '147228' - }, - '5' => { - 'name' => 'keyring', - 'offset' => '40', - 'type' => '145036' - }, - '6' => { - 'name' => 'tlist', - 'offset' => '48', - 'type' => '147012' - }, - '7' => { - 'name' => 'flags', - 'offset' => '56', - 'type' => '145' - }, - '8' => { - 'name' => 'verify_flags', - 'offset' => '60', - 'type' => '145' - }, - '9' => { - 'name' => 'verify_depth', - 'offset' => '64', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_certificate_credentials_st', - 'PrivateABI' => 1, - 'Size' => '168', - 'Type' => 'Struct' - }, - '145337' => { - 'BaseType' => '145349', - 'Header' => 'gnutls.h', - 'Line' => '1579', - 'Name' => 'gnutls_status_request_ocsp_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '145349' => { - 'Name' => 'int(*)(gnutls_session_t, void*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '211' - }, - '2' => { - 'type' => '4233' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '146118' => { - 'BaseType' => '146130', - 'Header' => 'gnutls.h', - 'Line' => '1978', - 'Name' => 'gnutls_openpgp_crt_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '146130' => { - 'BaseType' => '146136', - 'Name' => 'struct gnutls_openpgp_crt_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '146136' => { - 'Header' => 'openpgp_int.h', - 'Line' => '40', - 'Memb' => { - '0' => { - 'name' => 'knode', - 'offset' => '0', - 'type' => '155395' - }, - '1' => { - 'name' => 'preferred_keyid', - 'offset' => '8', - 'type' => '155439' - }, - '2' => { - 'name' => 'preferred_set', - 'offset' => '16', - 'type' => '75' - } - }, - 'Name' => 'struct gnutls_openpgp_crt_int', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '146185' => { - 'BaseType' => '146197', - 'Header' => 'gnutls.h', - 'Line' => '1981', - 'Name' => 'gnutls_openpgp_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '146197' => { - 'BaseType' => '146203', - 'Name' => 'struct gnutls_openpgp_privkey_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '146203' => { - 'Header' => 'openpgp_int.h', - 'Line' => '47', - 'Memb' => { - '0' => { - 'name' => 'knode', - 'offset' => '0', - 'type' => '155395' - }, - '1' => { - 'name' => 'preferred_keyid', - 'offset' => '8', - 'type' => '155439' - }, - '2' => { - 'name' => 'preferred_set', - 'offset' => '16', - 'type' => '75' - } - }, - 'Name' => 'struct gnutls_openpgp_privkey_int', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '146252' => { - 'BaseType' => '146264', - 'Header' => 'gnutls.h', - 'Line' => '1984', - 'Name' => 'gnutls_pkcs11_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '146264' => { - 'BaseType' => '146270', - 'Name' => 'struct gnutls_pkcs11_privkey_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '146270' => { - 'Line' => '64', - 'Memb' => { - '0' => { - 'name' => 'pk_algorithm', - 'offset' => '0', - 'type' => '2768' - }, - '1' => { - 'name' => 'flags', - 'offset' => '4', - 'type' => '145' - }, - '2' => { - 'name' => 'uinfo', - 'offset' => '8', - 'type' => '892313' - }, - '3' => { - 'name' => 'url', - 'offset' => '16', - 'type' => '235' - }, - '4' => { - 'name' => 'sinfo', - 'offset' => '24', - 'type' => '1156599' - }, - '5' => { - 'name' => 'ref', - 'offset' => '376', - 'type' => '1153171' - }, - '6' => { - 'name' => 'reauth', - 'offset' => '384', - 'type' => '145' - }, - '7' => { - 'name' => 'pin', - 'offset' => '392', - 'type' => '150955' - } - }, - 'Name' => 'struct gnutls_pkcs11_privkey_st', - 'PrivateABI' => 1, - 'Size' => '408', - 'Source' => 'pkcs11_privkey.c', - 'Type' => 'Struct' - }, - '146313' => { - 'Header' => 'gnutls.h', - 'Line' => '2000', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PRIVKEY_X509', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PRIVKEY_OPENPGP', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PRIVKEY_PKCS11', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PRIVKEY_EXT', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_privkey_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '146325' => { - 'Header' => 'gnutls.h', - 'Line' => '2006', - 'Memb' => { - '0' => { - 'name' => 'x509', - 'offset' => '0', - 'type' => '146359' - }, - '1' => { - 'name' => 'pgp', - 'offset' => '0', - 'type' => '146118' - } - }, - 'Name' => 'anon-union-gnutls.h-2006', - 'Size' => '8', - 'Type' => 'Union' - }, - '146359' => { - 'BaseType' => '144886', - 'Name' => 'gnutls_x509_crt_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '146365' => { - 'Header' => 'gnutls.h', - 'Line' => '2012', - 'Memb' => { - '0' => { - 'name' => 'x509', - 'offset' => '0', - 'type' => '144874' - }, - '1' => { - 'name' => 'pgp', - 'offset' => '0', - 'type' => '146185' - }, - '2' => { - 'name' => 'pkcs11', - 'offset' => '0', - 'type' => '146252' - } - }, - 'Name' => 'anon-union-gnutls.h-2012', - 'Size' => '8', - 'Type' => 'Union' - }, - '146411' => { - 'Header' => 'gnutls.h', - 'Line' => '2002', - 'Memb' => { - '0' => { - 'name' => 'cert_type', - 'offset' => '0', - 'type' => '2712' - }, - '1' => { - 'name' => 'key_type', - 'offset' => '4', - 'type' => '146313' - }, - '2' => { - 'name' => 'cert', - 'offset' => '8', - 'type' => '146325' - }, - '3' => { - 'name' => 'ncerts', - 'offset' => '16', - 'type' => '145' - }, - '4' => { - 'name' => 'key', - 'offset' => '24', - 'type' => '146365' - }, - '5' => { - 'name' => 'deinit_all', - 'offset' => '32', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_retr2_st', - 'Size' => '40', - 'Type' => 'Struct' - }, - '146503' => { - 'BaseType' => '146411', - 'Header' => 'gnutls.h', - 'Line' => '2019', - 'Name' => 'gnutls_retr2_st', - 'Size' => '40', - 'Type' => 'Typedef' - }, - '146515' => { - 'BaseType' => '146527', - 'Header' => 'gnutls.h', - 'Line' => '2053', - 'Name' => 'gnutls_certificate_retrieve_function', - 'Type' => 'Typedef' - }, - '146527' => { - 'Name' => 'int()(gnutls_session_t, gnutls_datum_t const*, int, gnutls_pk_algorithm_t const*, int, gnutls_retr2_st*)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '4175' - }, - '2' => { - 'type' => '75' - }, - '3' => { - 'type' => '146567' - }, - '4' => { - 'type' => '75' - }, - '5' => { - 'type' => '146573' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '146567' => { - 'BaseType' => '143221', - 'Name' => 'gnutls_pk_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '146573' => { - 'BaseType' => '146503', - 'Name' => 'gnutls_retr2_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '146579' => { - 'BaseType' => '146591', - 'Header' => 'gnutls.h', - 'Line' => '2288', - 'Name' => 'gnutls_pin_callback_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '146591' => { - 'Name' => 'int(*)(void*, int, char const*, char const*, unsigned int, char*, size_t)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '75' - }, - '2' => { - 'type' => '110' - }, - '3' => { - 'type' => '110' - }, - '4' => { - 'type' => '145' - }, - '5' => { - 'type' => '235' - }, - '6' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '146987' => { - 'Header' => 'x509_int.h', - 'Line' => '64', - 'Memb' => { - '0' => { - 'name' => 'asn', - 'offset' => '0', - 'type' => '9632' - } - }, - 'Name' => 'struct gnutls_x509_dn_st', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '147012' => { - 'BaseType' => '147024', - 'Header' => 'x509.h', - 'Line' => '1272', - 'Name' => 'gnutls_x509_trust_list_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '147024' => { - 'BaseType' => '147030', - 'Name' => 'struct gnutls_x509_trust_list_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '147030' => { - 'Header' => 'verify-high.h', - 'Line' => '26', - 'Memb' => { - '0' => { - 'name' => 'size', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'node', - 'offset' => '8', - 'type' => '506873' - }, - '2' => { - 'name' => 'x509_rdn_sequence', - 'offset' => '16', - 'type' => '3632' - }, - '3' => { - 'name' => 'blacklisted', - 'offset' => '32', - 'type' => '146359' - }, - '4' => { - 'name' => 'blacklisted_size', - 'offset' => '40', - 'type' => '145' - }, - '5' => { - 'name' => 'keep_certs', - 'offset' => '48', - 'type' => '146359' - }, - '6' => { - 'name' => 'keep_certs_size', - 'offset' => '56', - 'type' => '145' - }, - '7' => { - 'name' => 'pkcs11_token', - 'offset' => '64', - 'type' => '235' - } - }, - 'Name' => 'struct gnutls_x509_trust_list_st', - 'PrivateABI' => 1, - 'Size' => '72', - 'Type' => 'Struct' - }, - '147148' => { - 'BaseType' => '147160', - 'Header' => 'abstract.h', - 'Line' => '503', - 'Name' => 'gnutls_certificate_retrieve_function2', - 'Type' => 'Typedef' - }, - '147160' => { - 'Name' => 'int()(gnutls_session_t, gnutls_datum_t const*, int, gnutls_pk_algorithm_t const*, int, gnutls_pcert_st**, unsigned int*, gnutls_privkey_t*)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '4175' - }, - '2' => { - 'type' => '75' - }, - '3' => { - 'type' => '146567' - }, - '4' => { - 'type' => '75' - }, - '5' => { - 'type' => '147210' - }, - '6' => { - 'type' => '21238' - }, - '7' => { - 'type' => '147228' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '147210' => { - 'BaseType' => '5142', - 'Name' => 'gnutls_pcert_st**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '147228' => { - 'BaseType' => '144851', - 'Name' => 'gnutls_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '14875' => { - 'BaseType' => '3685', - 'Name' => 'gnutls_range_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1500751' => { - 'BaseType' => '882186', - 'Name' => 'gnutls_x509_crq_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '150955' => { - 'Header' => 'gnutls_int.h', - 'Line' => '426', - 'Memb' => { - '0' => { - 'name' => 'cb', - 'offset' => '0', - 'type' => '146579' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '211' - } - }, - 'Name' => 'struct pin_info_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '1511409' => { - 'BaseType' => '1911525', - 'Header' => 'x509.h', - 'Line' => '626', - 'Name' => 'gnutls_x509_dn_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '152' => { - 'Name' => 'unsigned char', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '1522676' => { - 'BaseType' => '1511409', - 'Name' => 'gnutls_x509_dn_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1543726' => { - 'BaseType' => '1543737', - 'Header' => 'x509-ext.h', - 'Line' => '37', - 'Name' => 'gnutls_subject_alt_names_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1543737' => { - 'BaseType' => '1543743', - 'Name' => 'struct gnutls_subject_alt_names_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1543743' => { - 'Line' => '41', - 'Memb' => { - '0' => { - 'name' => 'names', - 'offset' => '0', - 'type' => '2052388' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_subject_alt_names_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1543748' => { - 'BaseType' => '1543759', - 'Header' => 'x509-ext.h', - 'Line' => '107', - 'Name' => 'gnutls_x509_aki_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1543759' => { - 'BaseType' => '1543765', - 'Name' => 'struct gnutls_x509_aki_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1543765' => { - 'Line' => '657', - 'Memb' => { - '0' => { - 'name' => 'id', - 'offset' => '0', - 'type' => '3632' - }, - '1' => { - 'name' => 'cert_issuer', - 'offset' => '16', - 'type' => '1543743' - }, - '2' => { - 'name' => 'serial', - 'offset' => '32', - 'type' => '3632' - } - }, - 'Name' => 'struct gnutls_x509_aki_st', - 'PrivateABI' => 1, - 'Size' => '48', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '155384' => { - 'BaseType' => '146987', - 'Header' => 'x509_int.h', - 'Line' => '66', - 'Name' => 'gnutls_x509_dn_st', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '155395' => { - 'BaseType' => '155406', - 'Header' => 'opencdk.h', - 'Line' => '76', - 'Name' => 'cdk_kbnode_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '155406' => { - 'BaseType' => '155412', - 'Name' => 'struct cdk_kbnode_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '155412' => { - 'Header' => 'packet.h', - 'Line' => '26', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '155406' - }, - '1' => { - 'name' => 'pkt', - 'offset' => '8', - 'type' => '3131441' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'is_deleted', - 'offset' => '16', - 'type' => '145' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'is_cloned', - 'offset' => '16', - 'type' => '145' - } - }, - 'Name' => 'struct cdk_kbnode_s', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '155417' => { - 'BaseType' => '155428', - 'Header' => 'opencdk.h', - 'Line' => '80', - 'Name' => 'cdk_keydb_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '155428' => { - 'BaseType' => '155434', - 'Name' => 'struct cdk_keydb_hd_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '155434' => { - 'Header' => 'keydb.h', - 'Line' => '56', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '75' - }, - '1' => { - 'name' => 'fp_ref', - 'offset' => '4', - 'type' => '75' - }, - '2' => { - 'name' => 'fp', - 'offset' => '8', - 'type' => '3128936' - }, - '3' => { - 'name' => 'name', - 'offset' => '16', - 'type' => '235' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'secret', - 'offset' => '24', - 'type' => '145' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'isopen', - 'offset' => '24', - 'type' => '145' - }, - '6' => { - 'name' => 'stats', - 'offset' => '32', - 'type' => '3343360' - } - }, - 'Name' => 'struct cdk_keydb_hd_s', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '155439' => { - 'BaseType' => '946', - 'Name' => 'uint8_t[8]', - 'Size' => '8', - 'Type' => 'Array' - }, - '155455' => { - 'Header' => 'gnutls_str_array.h', - 'Line' => '33', - 'Memb' => { - '0' => { - 'name' => 'str', - 'offset' => '0', - 'type' => '235' - }, - '1' => { - 'name' => 'len', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'next', - 'offset' => '16', - 'type' => '155504' - } - }, - 'Name' => 'struct gnutls_str_array_st', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '155504' => { - 'BaseType' => '155455', - 'Name' => 'struct gnutls_str_array_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '155510' => { - 'BaseType' => '155504', - 'Header' => 'gnutls_str_array.h', - 'Line' => '37', - 'Name' => 'gnutls_str_array_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '155566' => { - 'Header' => 'cert.h', - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'cert_list', - 'offset' => '0', - 'type' => '5142' - }, - '1' => { - 'name' => 'cert_list_length', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'names', - 'offset' => '16', - 'type' => '155510' - } - }, - 'Name' => 'struct certs_st', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '155577' => { - 'BaseType' => '144288', - 'Name' => 'gnutls_params_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '155583' => { - 'BaseType' => '155566', - 'Name' => 'certs_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '155589' => { - 'BaseType' => '146515', - 'Name' => 'gnutls_certificate_retrieve_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '155595' => { - 'BaseType' => '147148', - 'Name' => 'gnutls_certificate_retrieve_function2*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '156690' => { - 'BaseType' => '946', - 'Name' => 'uint8_t[128]', - 'Size' => '128', - 'Type' => 'Array' - }, - '1573945' => { - 'Header' => 'gnutls.h', - 'Line' => '628', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CRT_PRINT_FULL', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CRT_PRINT_ONELINE', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_CRT_PRINT_UNSIGNED_FULL', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_CRT_PRINT_COMPACT', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_CRT_PRINT_FULL_NUMBERS', - 'value' => '4' - } - }, - 'Name' => 'enum gnutls_certificate_print_formats', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1573993' => { - 'BaseType' => '1573945', - 'Header' => 'gnutls.h', - 'Line' => '634', - 'Name' => 'gnutls_certificate_print_formats_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1575890' => { - 'BaseType' => '144886', - 'Name' => 'gnutls_x509_crt_t const', - 'Size' => '8', - 'Type' => 'Const' - }, - '1577113' => { - 'BaseType' => '1577125', - 'Header' => 'x509.h', - 'Line' => '280', - 'Name' => 'gnutls_x509_name_constraints_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1577125' => { - 'BaseType' => '1577131', - 'Name' => 'struct gnutls_name_constraints_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1577131' => { - 'Header' => 'x509_int.h', - 'Line' => '464', - 'Memb' => { - '0' => { - 'name' => 'permitted', - 'offset' => '0', - 'type' => '1991758' - }, - '1' => { - 'name' => 'excluded', - 'offset' => '8', - 'type' => '1991758' - } - }, - 'Name' => 'struct gnutls_name_constraints_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '1577171' => { - 'Header' => 'x509.h', - 'Line' => '458', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_X509_QUALIFIER_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_X509_QUALIFIER_URI', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_X509_QUALIFIER_NOTICE', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_x509_qualifier_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1577207' => { - 'BaseType' => '1577171', - 'Header' => 'x509.h', - 'Line' => '461', - 'Name' => 'gnutls_x509_qualifier_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1577219' => { - 'Header' => 'x509.h', - 'Line' => '466', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '1577207' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '235' - }, - '2' => { - 'name' => 'size', - 'offset' => '16', - 'type' => '145' - } - }, - 'Name' => 'anon-struct-x509.h-466', - 'Size' => '24', - 'Type' => 'Struct' - }, - '1577268' => { - 'Header' => 'x509.h', - 'Line' => '463', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '235' - }, - '1' => { - 'name' => 'qualifiers', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'qualifier', - 'offset' => '16', - 'type' => '1577321' - } - }, - 'Name' => 'struct gnutls_x509_policy_st', - 'Size' => '208', - 'Type' => 'Struct' - }, - '1577321' => { - 'BaseType' => '1577219', - 'Name' => 'anon-struct-x509.h-466[8]', - 'Size' => '192', - 'Type' => 'Array' - }, - '1585740' => { - 'BaseType' => '1585751', - 'Header' => 'x509-ext.h', - 'Line' => '60', - 'Name' => 'gnutls_x509_crl_dist_points_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1585751' => { - 'BaseType' => '1585757', - 'Name' => 'struct gnutls_x509_crl_dist_points_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1585757' => { - 'Line' => '2126', - 'Memb' => { - '0' => { - 'name' => 'points', - 'offset' => '0', - 'type' => '2052463' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_crl_dist_points_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1585762' => { - 'BaseType' => '1585773', - 'Header' => 'x509-ext.h', - 'Line' => '83', - 'Name' => 'gnutls_x509_aia_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1585773' => { - 'BaseType' => '1585779', - 'Name' => 'struct gnutls_x509_aia_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1585779' => { - 'Line' => '2480', - 'Memb' => { - '0' => { - 'name' => 'aia', - 'offset' => '0', - 'type' => '2052518' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_aia_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1585806' => { - 'BaseType' => '1585817', - 'Header' => 'x509-ext.h', - 'Line' => '146', - 'Name' => 'gnutls_x509_key_purposes_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1585817' => { - 'BaseType' => '1585823', - 'Name' => 'struct gnutls_x509_key_purposes_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1585823' => { - 'Line' => '2803', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '2052524' - }, - '1' => { - 'name' => 'size', - 'offset' => '1024', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_key_purposes_st', - 'PrivateABI' => 1, - 'Size' => '1032', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1585828' => { - 'BaseType' => '1585839', - 'Header' => 'x509-ext.h', - 'Line' => '172', - 'Name' => 'gnutls_x509_policies_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1585839' => { - 'BaseType' => '1585845', - 'Name' => 'struct gnutls_x509_policies_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1585845' => { - 'Line' => '1639', - 'Memb' => { - '0' => { - 'name' => 'policy', - 'offset' => '0', - 'type' => '2052394' - }, - '1' => { - 'name' => 'size', - 'offset' => '13312', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_policies_st', - 'PrivateABI' => 1, - 'Size' => '13320', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1585877' => { - 'Header' => 'x509_int.h', - 'Line' => '469', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'name', - 'offset' => '8', - 'type' => '3632' - }, - '2' => { - 'name' => 'next', - 'offset' => '24', - 'type' => '1991758' - } - }, - 'Name' => 'struct name_constraints_node_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '159' => { - 'BaseType' => '152', - 'Name' => 'unsigned char const', - 'Size' => '1', - 'Type' => 'Const' - }, - '1639904' => { - 'BaseType' => '1639915', - 'Header' => 'pkcs12.h', - 'Line' => '40', - 'Name' => 'gnutls_pkcs12_bag_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1639915' => { - 'BaseType' => '1639921', - 'Name' => 'struct gnutls_pkcs12_bag_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1639921' => { - 'Header' => 'x509_int.h', - 'Line' => '347', - 'Memb' => { - '0' => { - 'name' => 'element', - 'offset' => '0', - 'type' => '1640105' - }, - '1' => { - 'name' => 'bag_elements', - 'offset' => '1536', - 'type' => '75' - } - }, - 'Name' => 'struct gnutls_pkcs12_bag_int', - 'PrivateABI' => 1, - 'Size' => '1544', - 'Type' => 'Struct' - }, - '1639963' => { - 'Header' => 'pkcs12.h', - 'Line' => '97', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_BAG_EMPTY', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_BAG_PKCS8_ENCRYPTED_KEY', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_BAG_PKCS8_KEY', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_BAG_CERTIFICATE', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_BAG_CRL', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_BAG_SECRET', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_BAG_ENCRYPTED', - 'value' => '10' - }, - '7' => { - 'name' => 'GNUTLS_BAG_UNKNOWN', - 'value' => '20' - } - }, - 'Name' => 'enum gnutls_pkcs12_bag_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '164' => { - 'Name' => 'signed char', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '1640028' => { - 'BaseType' => '1639963', - 'Header' => 'pkcs12.h', - 'Line' => '110', - 'Name' => 'gnutls_pkcs12_bag_type_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1640039' => { - 'Header' => 'x509_int.h', - 'Line' => '340', - 'Memb' => { - '0' => { - 'name' => 'data', - 'offset' => '0', - 'type' => '3632' - }, - '1' => { - 'name' => 'type', - 'offset' => '16', - 'type' => '1640028' - }, - '2' => { - 'name' => 'local_key_id', - 'offset' => '24', - 'type' => '3632' - }, - '3' => { - 'name' => 'friendly_name', - 'offset' => '40', - 'type' => '235' - } - }, - 'Name' => 'struct bag_element', - 'PrivateABI' => 1, - 'Size' => '48', - 'Type' => 'Struct' - }, - '1640105' => { - 'BaseType' => '1640039', - 'Name' => 'struct bag_element[32]', - 'Size' => '1536', - 'Type' => 'Array' - }, - '16527' => { - 'BaseType' => '946', - 'Name' => 'uint8_t const', - 'Size' => '1', - 'Type' => 'Const' - }, - '1653410' => { - 'BaseType' => '754035', - 'Name' => 'gnutls_pkcs12_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '16639' => { - 'BaseType' => '75', - 'Name' => 'int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1675094' => { - 'BaseType' => '1639904', - 'Name' => 'gnutls_pkcs12_bag_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1695770' => { - 'BaseType' => '1695781', - 'Header' => 'pkcs7.h', - 'Line' => '43', - 'Name' => 'gnutls_pkcs7_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1695781' => { - 'BaseType' => '1695787', - 'Name' => 'struct gnutls_pkcs7_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1695787' => { - 'Header' => 'x509_int.h', - 'Line' => '98', - 'Memb' => { - '0' => { - 'name' => 'pkcs7', - 'offset' => '0', - 'type' => '9632' - }, - '1' => { - 'name' => 'encap_data_oid', - 'offset' => '8', - 'type' => '366330' - }, - '2' => { - 'name' => 'der_signed_data', - 'offset' => '136', - 'type' => '3632' - }, - '3' => { - 'name' => 'signed_data', - 'offset' => '152', - 'type' => '9632' - }, - '4' => { - 'name' => 'expanded', - 'offset' => '160', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_pkcs7_int', - 'PrivateABI' => 1, - 'Size' => '168', - 'Type' => 'Struct' - }, - '1695860' => { - 'BaseType' => '1706757', - 'Header' => 'pkcs7.h', - 'Line' => '83', - 'Name' => 'gnutls_pkcs7_attrs_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1695877' => { - 'Header' => 'x509_int.h', - 'Line' => '92', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '235' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '3632' - }, - '2' => { - 'name' => 'next', - 'offset' => '24', - 'type' => '1706757' - } - }, - 'Name' => 'struct gnutls_pkcs7_attrs_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '1695926' => { - 'Header' => 'pkcs7.h', - 'Line' => '85', - 'Memb' => { - '0' => { - 'name' => 'algo', - 'offset' => '0', - 'type' => '2920' - }, - '1' => { - 'name' => 'sig', - 'offset' => '8', - 'type' => '3632' - }, - '2' => { - 'name' => 'issuer_dn', - 'offset' => '24', - 'type' => '3632' - }, - '3' => { - 'name' => 'signer_serial', - 'offset' => '40', - 'type' => '3632' - }, - '4' => { - 'name' => 'issuer_keyid', - 'offset' => '56', - 'type' => '3632' - }, - '5' => { - 'name' => 'signing_time', - 'offset' => '72', - 'type' => '252' - }, - '6' => { - 'name' => 'signed_attrs', - 'offset' => '80', - 'type' => '1695860' - }, - '7' => { - 'name' => 'unsigned_attrs', - 'offset' => '88', - 'type' => '1695860' - }, - '8' => { - 'name' => 'pad', - 'offset' => '96', - 'type' => '1361353' - } - }, - 'Name' => 'struct gnutls_pkcs7_signature_info_st', - 'Size' => '160', - 'Type' => 'Struct' - }, - '1696063' => { - 'BaseType' => '1695926', - 'Header' => 'pkcs7.h', - 'Line' => '95', - 'Name' => 'gnutls_pkcs7_signature_info_st', - 'Size' => '160', - 'Type' => 'Typedef' - }, - '1704346' => { - 'BaseType' => '1695877', - 'Header' => 'x509_int.h', - 'Line' => '96', - 'Name' => 'gnutls_pkcs7_attrs_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '1706757' => { - 'BaseType' => '1704346', - 'Name' => 'gnutls_pkcs7_attrs_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '171' => { - 'Name' => 'short', - 'Size' => '2', - 'Type' => 'Intrinsic' - }, - '1712311' => { - 'BaseType' => '1696063', - 'Name' => 'gnutls_pkcs7_signature_info_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1720639' => { - 'BaseType' => '1695770', - 'Name' => 'gnutls_pkcs7_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1740355' => { - 'BaseType' => '1695860', - 'Name' => 'gnutls_pkcs7_attrs_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '178' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '131', - 'Name' => '__off_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1787' => { - 'BaseType' => '152', - 'Name' => 'unsigned char[8]', - 'Size' => '8', - 'Type' => 'Array' - }, - '1789614' => { - 'BaseType' => '152', - 'Name' => 'unsigned char[2]', - 'Size' => '2', - 'Type' => 'Array' - }, - '1803' => { - 'Header' => 'gnutls_int.h', - 'Line' => '90', - 'Memb' => { - '0' => { - 'name' => 'i', - 'offset' => '0', - 'type' => '1787' - } - }, - 'Name' => 'struct uint64', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '1803029' => { - 'BaseType' => '2029', - 'Name' => 'gnutls_cipher_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1814' => { - 'Header' => 'gnutls.h', - 'Line' => '119', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CIPHER_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CIPHER_NULL', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_CIPHER_AES_128_GCM', - 'value' => '10' - }, - '11' => { - 'name' => 'GNUTLS_CIPHER_AES_256_GCM', - 'value' => '11' - }, - '12' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_192_CBC', - 'value' => '12' - }, - '13' => { - 'name' => 'GNUTLS_CIPHER_SALSA20_256', - 'value' => '13' - }, - '14' => { - 'name' => 'GNUTLS_CIPHER_ESTREAM_SALSA20_256', - 'value' => '14' - }, - '15' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_128_GCM', - 'value' => '15' - }, - '16' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_256_GCM', - 'value' => '16' - }, - '17' => { - 'name' => 'GNUTLS_CIPHER_RC2_40_CBC', - 'value' => '17' - }, - '18' => { - 'name' => 'GNUTLS_CIPHER_DES_CBC', - 'value' => '18' - }, - '19' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CCM', - 'value' => '19' - }, - '2' => { - 'name' => 'GNUTLS_CIPHER_ARCFOUR_128', - 'value' => '2' - }, - '20' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CCM', - 'value' => '20' - }, - '21' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CCM_8', - 'value' => '21' - }, - '22' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CCM_8', - 'value' => '22' - }, - '23' => { - 'name' => 'GNUTLS_CIPHER_CHACHA20_POLY1305', - 'value' => '23' - }, - '24' => { - 'name' => 'GNUTLS_CIPHER_IDEA_PGP_CFB', - 'value' => '200' - }, - '25' => { - 'name' => 'GNUTLS_CIPHER_3DES_PGP_CFB', - 'value' => '201' - }, - '26' => { - 'name' => 'GNUTLS_CIPHER_CAST5_PGP_CFB', - 'value' => '202' - }, - '27' => { - 'name' => 'GNUTLS_CIPHER_BLOWFISH_PGP_CFB', - 'value' => '203' - }, - '28' => { - 'name' => 'GNUTLS_CIPHER_SAFER_SK128_PGP_CFB', - 'value' => '204' - }, - '29' => { - 'name' => 'GNUTLS_CIPHER_AES128_PGP_CFB', - 'value' => '205' - }, - '3' => { - 'name' => 'GNUTLS_CIPHER_3DES_CBC', - 'value' => '3' - }, - '30' => { - 'name' => 'GNUTLS_CIPHER_AES192_PGP_CFB', - 'value' => '206' - }, - '31' => { - 'name' => 'GNUTLS_CIPHER_AES256_PGP_CFB', - 'value' => '207' - }, - '32' => { - 'name' => 'GNUTLS_CIPHER_TWOFISH_PGP_CFB', - 'value' => '208' - }, - '4' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CBC', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CBC', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_CIPHER_ARCFOUR_40', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_128_CBC', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_256_CBC', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_CIPHER_AES_192_CBC', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_cipher_algorithm', - 'Size' => '4', - 'Type' => 'Enum' - }, - '18408' => { - 'Header' => 'gnutls.h', - 'Line' => '557', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SHUT_RDWR', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_SHUT_WR', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_close_request_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1861102' => { - 'BaseType' => '1861114', - 'Header' => 'x509.h', - 'Line' => '1335', - 'Name' => 'gnutls_verify_output_function', - 'Type' => 'Typedef' - }, - '1861114' => { - 'Name' => 'int()(gnutls_x509_crt_t, gnutls_x509_crt_t, gnutls_x509_crl_t, unsigned int)', - 'Param' => { - '0' => { - 'type' => '144886' - }, - '1' => { - 'type' => '144886' - }, - '2' => { - 'type' => '742906' - }, - '3' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '1871309' => { - 'BaseType' => '1575890', - 'Name' => 'gnutls_x509_crt_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1871958' => { - 'BaseType' => '1432880', - 'Name' => 'gnutls_x509_crl_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1873276' => { - 'BaseType' => '1861102', - 'Name' => 'gnutls_verify_output_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '189' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '132', - 'Name' => '__off64_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1890525' => { - 'Header' => 'x509.h', - 'Line' => '628', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '3632' - }, - '1' => { - 'name' => 'value', - 'offset' => '16', - 'type' => '3632' - }, - '2' => { - 'name' => 'value_tag', - 'offset' => '32', - 'type' => '68' - } - }, - 'Name' => 'struct gnutls_x509_ava_st', - 'Size' => '40', - 'Type' => 'Struct' - }, - '1890578' => { - 'BaseType' => '1890525', - 'Header' => 'x509.h', - 'Line' => '632', - 'Name' => 'gnutls_x509_ava_st', - 'Size' => '40', - 'Type' => 'Typedef' - }, - '1911106' => { - 'BaseType' => '1890578', - 'Name' => 'gnutls_x509_ava_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1911525' => { - 'BaseType' => '155384', - 'Name' => 'gnutls_x509_dn_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1914157' => { - 'BaseType' => '1577268', - 'Name' => 'struct gnutls_x509_policy_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '19493' => { - 'BaseType' => '8089', - 'Header' => 'gnutls.h', - 'Line' => '1000', - 'Name' => 'gnutls_packet_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1952161' => { - 'BaseType' => '1577268', - 'Name' => 'struct gnutls_x509_policy_st const', - 'Size' => '208', - 'Type' => 'Const' - }, - '1961176' => { - 'BaseType' => '1952161', - 'Name' => 'struct gnutls_x509_policy_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1986662' => { - 'BaseType' => '1585877', - 'Header' => 'x509_int.h', - 'Line' => '473', - 'Name' => 'name_constraints_node_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '1991623' => { - 'BaseType' => '1577113', - 'Name' => 'gnutls_x509_name_constraints_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1991758' => { - 'BaseType' => '1986662', - 'Name' => 'name_constraints_node_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '200' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '139', - 'Name' => '__time_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2000502' => { - 'BaseType' => '2000514', - 'Header' => 'x509.h', - 'Line' => '1273', - 'Name' => 'gnutls_x509_trust_list_iter_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2000514' => { - 'BaseType' => '2000520', - 'Name' => 'struct gnutls_x509_trust_list_iter*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2000520' => { - 'Line' => '58', - 'Memb' => { - '0' => { - 'name' => 'node_index', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'ca_index', - 'offset' => '4', - 'type' => '145' - }, - '2' => { - 'name' => 'pkcs11_list', - 'offset' => '8', - 'type' => '1157105' - }, - '3' => { - 'name' => 'pkcs11_index', - 'offset' => '16', - 'type' => '145' - }, - '4' => { - 'name' => 'pkcs11_size', - 'offset' => '20', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_trust_list_iter', - 'PrivateABI' => 1, - 'Size' => '24', - 'Source' => 'verify-high.c', - 'Type' => 'Struct' - }, - '20081' => { - 'Name' => 'int(*)(void**)', - 'Param' => { - '0' => { - 'type' => '4278' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '2009251' => { - 'Line' => '38', - 'Memb' => { - '0' => { - 'name' => 'cert', - 'offset' => '0', - 'type' => '144886' - }, - '1' => { - 'name' => 'name', - 'offset' => '8', - 'type' => '156690' - }, - '2' => { - 'name' => 'name_size', - 'offset' => '136', - 'type' => '145' - } - }, - 'Name' => 'struct named_cert_st', - 'PrivateABI' => 1, - 'Size' => '144', - 'Source' => 'verify-high.c', - 'Type' => 'Struct' - }, - '2009316' => { - 'BaseType' => '2009251', - 'Name' => 'struct named_cert_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2015844' => { - 'BaseType' => '2000502', - 'Name' => 'gnutls_x509_trust_list_iter_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2029' => { - 'BaseType' => '1814', - 'Header' => 'gnutls.h', - 'Line' => '156', - 'Name' => 'gnutls_cipher_algorithm_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '2052339' => { - 'Line' => '34', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'san', - 'offset' => '8', - 'type' => '3632' - }, - '2' => { - 'name' => 'othername_oid', - 'offset' => '24', - 'type' => '3632' - } - }, - 'Name' => 'struct name_st', - 'PrivateABI' => 1, - 'Size' => '40', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '2052388' => { - 'BaseType' => '2052339', - 'Name' => 'struct name_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2052394' => { - 'BaseType' => '1577268', - 'Name' => 'struct gnutls_x509_policy_st[64]', - 'Size' => '13312', - 'Type' => 'Array' - }, - '2052410' => { - 'Line' => '2120', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'san', - 'offset' => '8', - 'type' => '3632' - }, - '2' => { - 'name' => 'reasons', - 'offset' => '24', - 'type' => '145' - } - }, - 'Name' => 'struct crl_dist_point_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '2052463' => { - 'BaseType' => '2052410', - 'Name' => 'struct crl_dist_point_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2052469' => { - 'Line' => '2481', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '3632' - }, - '1' => { - 'name' => 'san_type', - 'offset' => '16', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'offset' => '24', - 'type' => '3632' - } - }, - 'Name' => 'anon-struct-x509_ext.c-2481', - 'PrivateABI' => 1, - 'Size' => '40', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '2052518' => { - 'BaseType' => '2052469', - 'Name' => 'anon-struct-x509_ext.c-2481*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2052524' => { - 'BaseType' => '3632', - 'Name' => 'gnutls_datum_t[64]', - 'Size' => '1024', - 'Type' => 'Array' - }, - '2055626' => { - 'BaseType' => '1585806', - 'Name' => 'gnutls_x509_key_purposes_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2058346' => { - 'BaseType' => '1585762', - 'Name' => 'gnutls_x509_aia_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2061015' => { - 'BaseType' => '1585740', - 'Name' => 'gnutls_x509_crl_dist_points_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2065449' => { - 'BaseType' => '1585828', - 'Name' => 'gnutls_x509_policies_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2073171' => { - 'BaseType' => '1543748', - 'Name' => 'gnutls_x509_aki_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '20774' => { - 'BaseType' => '12737', - 'Header' => 'gnutls.h', - 'Line' => '2299', - 'Name' => 'gnutls_buffer_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2078201' => { - 'BaseType' => '1543726', - 'Name' => 'gnutls_subject_alt_names_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '20865' => { - 'BaseType' => '20877', - 'Header' => 'gnutls.h', - 'Line' => '2312', - 'Name' => 'gnutls_ext_recv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '20877' => { - 'Name' => 'int(*)(gnutls_session_t, unsigned char const*, size_t)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '5023' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '20914' => { - 'BaseType' => '20926', - 'Header' => 'gnutls.h', - 'Line' => '2316', - 'Name' => 'gnutls_ext_send_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '20926' => { - 'Name' => 'int(*)(gnutls_session_t, gnutls_buffer_t)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '20774' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '20952' => { - 'BaseType' => '20964', - 'Header' => 'gnutls.h', - 'Line' => '2319', - 'Name' => 'gnutls_ext_deinit_data_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '20964' => { - 'Name' => 'void(*)(gnutls_ext_priv_data_t)', - 'Param' => { - '0' => { - 'type' => '5011' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '20981' => { - 'BaseType' => '20993', - 'Header' => 'gnutls.h', - 'Line' => '2321', - 'Name' => 'gnutls_ext_pack_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '20993' => { - 'Name' => 'int(*)(gnutls_ext_priv_data_t, gnutls_buffer_t)', - 'Param' => { - '0' => { - 'type' => '5011' - }, - '1' => { - 'type' => '20774' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '21019' => { - 'BaseType' => '21031', - 'Header' => 'gnutls.h', - 'Line' => '2324', - 'Name' => 'gnutls_ext_unpack_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '21031' => { - 'Name' => 'int(*)(gnutls_buffer_t, gnutls_ext_priv_data_t*)', - 'Param' => { - '0' => { - 'type' => '20774' - }, - '1' => { - 'type' => '21057' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '21057' => { - 'BaseType' => '5011', - 'Name' => 'gnutls_ext_priv_data_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '211' => { - 'BaseType' => '1', - 'Name' => 'void*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '21107' => { - 'Header' => 'gnutls.h', - 'Line' => '2348', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_EXT_ANY', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_EXT_APPLICATION', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_EXT_TLS', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_EXT_MANDATORY', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_EXT_NONE', - 'value' => '4' - } - }, - 'Name' => 'enum gnutls_ext_parse_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '21238' => { - 'BaseType' => '145', - 'Name' => 'unsigned int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2126108' => { - 'BaseType' => '2126119', - 'Header' => 'ocsp.h', - 'Line' => '141', - 'Name' => 'gnutls_ocsp_req_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2126119' => { - 'BaseType' => '2126125', - 'Name' => 'struct gnutls_ocsp_req_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2126125' => { - 'Line' => '36', - 'Memb' => { - '0' => { - 'name' => 'req', - 'offset' => '0', - 'type' => '9632' - }, - '1' => { - 'name' => 'init', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_ocsp_req_int', - 'PrivateABI' => 1, - 'Size' => '16', - 'Source' => 'ocsp.c', - 'Type' => 'Struct' - }, - '213' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '172', - 'Name' => '__ssize_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2139429' => { - 'BaseType' => '754444', - 'Name' => 'gnutls_ocsp_resp_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2139745' => { - 'BaseType' => '2126108', - 'Name' => 'gnutls_ocsp_req_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2149' => { - 'Header' => 'gnutls.h', - 'Line' => '196', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_KX_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_KX_RSA', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_KX_DHE_PSK', - 'value' => '10' - }, - '11' => { - 'name' => 'GNUTLS_KX_ANON_ECDH', - 'value' => '11' - }, - '12' => { - 'name' => 'GNUTLS_KX_ECDHE_RSA', - 'value' => '12' - }, - '13' => { - 'name' => 'GNUTLS_KX_ECDHE_ECDSA', - 'value' => '13' - }, - '14' => { - 'name' => 'GNUTLS_KX_ECDHE_PSK', - 'value' => '14' - }, - '15' => { - 'name' => 'GNUTLS_KX_RSA_PSK', - 'value' => '15' - }, - '2' => { - 'name' => 'GNUTLS_KX_DHE_DSS', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_KX_DHE_RSA', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_KX_ANON_DH', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_KX_SRP', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_KX_RSA_EXPORT', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_KX_SRP_RSA', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_KX_SRP_DSS', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_KX_PSK', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_kx_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2156987' => { - 'Header' => 'ocsp.h', - 'Line' => '47', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_OCSP_PRINT_FULL', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_OCSP_PRINT_COMPACT', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_ocsp_print_formats_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2157016' => { - 'BaseType' => '2156987', - 'Header' => 'ocsp.h', - 'Line' => '50', - 'Name' => 'gnutls_ocsp_print_formats_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '2198673' => { - 'Header' => 'gnutls.h', - 'Line' => '1060', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_NAME_DNS', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_server_name_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2203' => { - 'Header' => 'gnutls.h', - 'Line' => '228', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CRD_CERTIFICATE', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_CRD_ANON', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_CRD_SRP', - 'value' => '3' - }, - '3' => { - 'name' => 'GNUTLS_CRD_PSK', - 'value' => '4' - }, - '4' => { - 'name' => 'GNUTLS_CRD_IA', - 'value' => '5' - } - }, - 'Name' => 'enum gnutls_credentials_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '224' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '175', - 'Name' => '__syscall_slong_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '225461' => { - 'Header' => 'gnutls.h', - 'Line' => '616', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_X509_FMT_DER', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_X509_FMT_PEM', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_x509_crt_fmt_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '228412' => { - 'BaseType' => '228423', - 'Header' => 'abstract.h', - 'Line' => '56', - 'Name' => 'gnutls_privkey_sign_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '228423' => { - 'Name' => 'int(*)(gnutls_privkey_t, void*, gnutls_datum_t const*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '144851' - }, - '1' => { - 'type' => '211' - }, - '2' => { - 'type' => '4175' - }, - '3' => { - 'type' => '4233' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '228459' => { - 'BaseType' => '228423', - 'Header' => 'abstract.h', - 'Line' => '61', - 'Name' => 'gnutls_privkey_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '228470' => { - 'BaseType' => '228481', - 'Header' => 'abstract.h', - 'Line' => '67', - 'Name' => 'gnutls_privkey_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '228481' => { - 'Name' => 'void(*)(gnutls_privkey_t, void*)', - 'Param' => { - '0' => { - 'type' => '144851' - }, - '1' => { - 'type' => '211' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '228503' => { - 'BaseType' => '228514', - 'Header' => 'abstract.h', - 'Line' => '76', - 'Name' => 'gnutls_privkey_info_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '228514' => { - 'Name' => 'int(*)(gnutls_privkey_t, unsigned int, void*)', - 'Param' => { - '0' => { - 'type' => '144851' - }, - '1' => { - 'type' => '145' - }, - '2' => { - 'type' => '211' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '2305' => { - 'Header' => 'gnutls.h', - 'Line' => '268', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_MAC_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_MAC_NULL', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_MAC_AEAD', - 'value' => '200' - }, - '11' => { - 'name' => 'GNUTLS_MAC_UMAC_96', - 'value' => '201' - }, - '12' => { - 'name' => 'GNUTLS_MAC_UMAC_128', - 'value' => '202' - }, - '2' => { - 'name' => 'GNUTLS_MAC_MD5', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_MAC_SHA1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_MAC_RMD160', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_MAC_MD2', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_MAC_SHA256', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_MAC_SHA384', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_MAC_SHA512', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_MAC_SHA224', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_mac_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '235' => { - 'BaseType' => '121', - 'Name' => 'char*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '236899' => { - 'Header' => 'abstract_int.h', - 'Line' => '40', - 'Memb' => { - '0' => { - 'name' => 'sign_func', - 'offset' => '0', - 'type' => '228412' - }, - '1' => { - 'name' => 'decrypt_func', - 'offset' => '8', - 'type' => '228459' - }, - '2' => { - 'name' => 'deinit_func', - 'offset' => '16', - 'type' => '228470' - }, - '3' => { - 'name' => 'info_func', - 'offset' => '24', - 'type' => '228503' - }, - '4' => { - 'name' => 'userdata', - 'offset' => '32', - 'type' => '211' - } - }, - 'Name' => 'anon-struct-abstract_int.h-40', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '236968' => { - 'Header' => 'abstract_int.h', - 'Line' => '32', - 'Memb' => { - '0' => { - 'name' => 'x509', - 'offset' => '0', - 'type' => '144874' - }, - '1' => { - 'name' => 'pkcs11', - 'offset' => '0', - 'type' => '146252' - }, - '2' => { - 'name' => 'openpgp', - 'offset' => '0', - 'type' => '146185' - }, - '3' => { - 'name' => 'ext', - 'offset' => '0', - 'type' => '236899' - } - }, - 'Name' => 'anon-union-abstract_int.h-32', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Union' - }, - '237037' => { - 'BaseType' => '946', - 'Name' => 'uint8_t[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '2391' => { - 'Header' => 'gnutls.h', - 'Line' => '298', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_DIG_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_DIG_NULL', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_DIG_MD5', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_DIG_SHA1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_DIG_RMD160', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_DIG_MD2', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_DIG_SHA256', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_DIG_SHA384', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_DIG_SHA512', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_DIG_SHA224', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_digest_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2401140' => { - 'Header' => 'gnutls.h', - 'Line' => '1124', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_SRTP_NULL_HMAC_SHA1_80', - 'value' => '5' - }, - '3' => { - 'name' => 'GNUTLS_SRTP_NULL_HMAC_SHA1_32', - 'value' => '6' - } - }, - 'Name' => 'enum gnutls_srtp_profile_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '240801' => { - 'BaseType' => '3185', - 'Name' => 'gnutls_dh_params_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '241' => { - 'BaseType' => '213', - 'Header' => 'types.h', - 'Line' => '109', - 'Name' => 'ssize_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2413993' => { - 'BaseType' => '2401140', - 'Name' => 'gnutls_srtp_profile_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '241986' => { - 'BaseType' => '325', - 'Header' => 'stdio.h', - 'Line' => '48', - 'Name' => 'FILE', - 'Size' => '216', - 'Type' => 'Typedef' - }, - '2441' => { - 'Header' => 'gnutls.h', - 'Line' => '321', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_COMP_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_COMP_NULL', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_COMP_DEFLATE', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_COMP_ZLIB', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_compression_method_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '252' => { - 'BaseType' => '200', - 'Header' => 'time.h', - 'Line' => '75', - 'Name' => 'time_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2564' => { - 'Header' => 'gnutls.h', - 'Line' => '466', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_HANDSHAKE_HELLO_REQUEST', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_HELLO', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE', - 'value' => '16' - }, - '11' => { - 'name' => 'GNUTLS_HANDSHAKE_FINISHED', - 'value' => '20' - }, - '12' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_STATUS', - 'value' => '22' - }, - '13' => { - 'name' => 'GNUTLS_HANDSHAKE_SUPPLEMENTAL', - 'value' => '23' - }, - '14' => { - 'name' => 'GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC', - 'value' => '254' - }, - '15' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_HELLO_V2', - 'value' => '1024' - }, - '2' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_HELLO', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_HANDSHAKE_NEW_SESSION_TICKET', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_PKT', - 'value' => '11' - }, - '6' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE', - 'value' => '12' - }, - '7' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST', - 'value' => '13' - }, - '8' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_HELLO_DONE', - 'value' => '14' - }, - '9' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY', - 'value' => '15' - } - }, - 'Name' => 'enum gnutls_handshake_description_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '259252' => { - 'BaseType' => '241986', - 'Name' => 'FILE*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '260763' => { - 'BaseType' => '145', - 'Name' => 'unsigned int const', - 'Size' => '4', - 'Type' => 'Const' - }, - '263' => { - 'BaseType' => '171', - 'Header' => 'types.h', - 'Line' => '195', - 'Name' => 'int16_t', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '263876' => { - 'BaseType' => '263888', - 'Header' => 'gnutls.h', - 'Line' => '793', - 'Name' => 'gnutls_priority_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '263888' => { - 'BaseType' => '3243', - 'Name' => 'struct gnutls_priority_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2662' => { - 'Header' => 'gnutls.h', - 'Line' => '588', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SSL3', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_TLS1_0', - 'value' => '2' - }, - '10' => { - 'name' => 'GNUTLS_TLS_VERSION_MAX', - 'value' => '4' - }, - '11' => { - 'name' => 'GNUTLS_VERSION_UNKNOWN', - 'value' => '255' - }, - '2' => { - 'name' => 'GNUTLS_TLS1', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_TLS1_1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_TLS1_2', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_DTLS0_9', - 'value' => '200' - }, - '6' => { - 'name' => 'GNUTLS_DTLS1_0', - 'value' => '201' - }, - '7' => { - 'name' => 'GNUTLS_DTLS1_2', - 'value' => '202' - }, - '8' => { - 'name' => 'GNUTLS_DTLS_VERSION_MIN', - 'value' => '200' - }, - '9' => { - 'name' => 'GNUTLS_DTLS_VERSION_MAX', - 'value' => '202' - } - }, - 'Name' => 'enum gnutls_protocol_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2689439' => { - 'BaseType' => '2712', - 'Name' => 'gnutls_certificate_type_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '2700491' => { - 'BaseType' => '2689439', - 'Name' => 'gnutls_certificate_type_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2702772' => { - 'BaseType' => '2029', - 'Name' => 'gnutls_cipher_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '2712' => { - 'Header' => 'gnutls.h', - 'Line' => '604', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CRT_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CRT_X509', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_CRT_OPENPGP', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_CRT_RAW', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_certificate_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2714583' => { - 'BaseType' => '2702772', - 'Name' => 'gnutls_cipher_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2731762' => { - 'BaseType' => '2305', - 'Name' => 'gnutls_mac_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2731768' => { - 'BaseType' => '2662', - 'Name' => 'gnutls_protocol_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2737708' => { - 'BaseType' => '2982', - 'Name' => 'gnutls_ecc_curve_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '274' => { - 'Header' => 'time.h', - 'Line' => '120', - 'Memb' => { - '0' => { - 'name' => 'tv_sec', - 'offset' => '0', - 'type' => '200' - }, - '1' => { - 'name' => 'tv_nsec', - 'offset' => '8', - 'type' => '224' - } - }, - 'Name' => 'struct timespec', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '2749880' => { - 'BaseType' => '2737708', - 'Name' => 'gnutls_ecc_curve_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2752153' => { - 'BaseType' => '2149', - 'Name' => 'gnutls_kx_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '275670' => { - 'BaseType' => '275676', - 'Name' => 'unsigned int const**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '275676' => { - 'BaseType' => '260763', - 'Name' => 'unsigned int const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2764729' => { - 'BaseType' => '2752153', - 'Name' => 'gnutls_kx_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '276511' => { - 'BaseType' => '110', - 'Name' => 'char const**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2767492' => { - 'BaseType' => '2305', - 'Name' => 'gnutls_mac_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '2767583' => { - 'BaseType' => '2391', - 'Name' => 'gnutls_digest_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '2768' => { - 'Header' => 'gnutls.h', - 'Line' => '653', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PK_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PK_RSA', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PK_DSA', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PK_DH', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_PK_EC', - 'value' => '4' - } - }, - 'Name' => 'enum gnutls_pk_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2779408' => { - 'BaseType' => '2767583', - 'Name' => 'gnutls_digest_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2779530' => { - 'BaseType' => '2767492', - 'Name' => 'gnutls_mac_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2782926' => { - 'BaseType' => '2662', - 'Name' => 'gnutls_protocol_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '2794245' => { - 'BaseType' => '2782926', - 'Name' => 'gnutls_protocol_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '279862' => { - 'BaseType' => '263876', - 'Name' => 'gnutls_priority_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2827139' => { - 'BaseType' => '2920', - 'Name' => 'gnutls_sign_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '2839142' => { - 'BaseType' => '2827139', - 'Name' => 'gnutls_sign_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2920' => { - 'Header' => 'gnutls.h', - 'Line' => '705', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SIGN_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA1', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA512', - 'value' => '8' - }, - '11' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA224', - 'value' => '9' - }, - '12' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA224', - 'value' => '10' - }, - '13' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA256', - 'value' => '11' - }, - '14' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA1', - 'value' => '12' - }, - '15' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA224', - 'value' => '13' - }, - '16' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA256', - 'value' => '14' - }, - '17' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA384', - 'value' => '15' - }, - '18' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA512', - 'value' => '16' - }, - '19' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA384', - 'value' => '17' - }, - '2' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA', - 'value' => '1' - }, - '20' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA512', - 'value' => '18' - }, - '3' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA1', - 'value' => '2' - }, - '4' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA', - 'value' => '2' - }, - '5' => { - 'name' => 'GNUTLS_SIGN_RSA_MD5', - 'value' => '3' - }, - '6' => { - 'name' => 'GNUTLS_SIGN_RSA_MD2', - 'value' => '4' - }, - '7' => { - 'name' => 'GNUTLS_SIGN_RSA_RMD160', - 'value' => '5' - }, - '8' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA256', - 'value' => '6' - }, - '9' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA384', - 'value' => '7' - } - }, - 'Name' => 'enum gnutls_sign_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2982' => { - 'Header' => 'gnutls.h', - 'Line' => '725', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_ECC_CURVE_INVALID', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP224R1', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP256R1', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP384R1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP521R1', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP192R1', - 'value' => '5' - } - }, - 'Name' => 'enum gnutls_ecc_curve_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '30054' => { - 'BaseType' => '19493', - 'Name' => 'gnutls_packet_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3074' => { - 'Header' => 'gnutls.h', - 'Line' => '761', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SEC_PARAM_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_SEC_PARAM_INSECURE', - 'value' => '5' - }, - '10' => { - 'name' => 'GNUTLS_SEC_PARAM_FUTURE', - 'value' => '50' - }, - '2' => { - 'name' => 'GNUTLS_SEC_PARAM_EXPORT', - 'value' => '10' - }, - '3' => { - 'name' => 'GNUTLS_SEC_PARAM_VERY_WEAK', - 'value' => '15' - }, - '4' => { - 'name' => 'GNUTLS_SEC_PARAM_WEAK', - 'value' => '20' - }, - '5' => { - 'name' => 'GNUTLS_SEC_PARAM_LOW', - 'value' => '25' - }, - '6' => { - 'name' => 'GNUTLS_SEC_PARAM_LEGACY', - 'value' => '30' - }, - '7' => { - 'name' => 'GNUTLS_SEC_PARAM_MEDIUM', - 'value' => '35' - }, - '8' => { - 'name' => 'GNUTLS_SEC_PARAM_HIGH', - 'value' => '40' - }, - '9' => { - 'name' => 'GNUTLS_SEC_PARAM_ULTRA', - 'value' => '45' - } - }, - 'Name' => 'enum gnutls_sec_param_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '3086' => { - 'BaseType' => '211', - 'Header' => 'gnutls.h', - 'Line' => '780', - 'Name' => 'gnutls_transport_ptr_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3098' => { - 'BaseType' => '3110', - 'Header' => 'gnutls.h', - 'Line' => '783', - 'Name' => 'gnutls_session_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3110' => { - 'BaseType' => '3116', - 'Name' => 'struct gnutls_session_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3116' => { - 'Header' => 'gnutls_int.h', - 'Line' => '1024', - 'Memb' => { - '0' => { - 'name' => 'security_parameters', - 'offset' => '0', - 'type' => '10542' - }, - '1' => { - 'name' => 'record_parameters', - 'offset' => '224', - 'type' => '12695' - }, - '2' => { - 'name' => 'internals', - 'offset' => '352', - 'type' => '12683' - }, - '3' => { - 'name' => 'key', - 'offset' => '4560', - 'type' => '8506' - } - }, - 'Name' => 'struct gnutls_session_int', - 'PrivateABI' => 1, - 'Size' => '5016', - 'Type' => 'Struct' - }, - '3128914' => { - 'BaseType' => '3128925', - 'Header' => 'opencdk.h', - 'Line' => '64', - 'Name' => 'cdk_s2k_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3128925' => { - 'BaseType' => '3128931', - 'Name' => 'struct cdk_s2k_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3128931' => { - 'Header' => 'context.h', - 'Line' => '41', - 'Memb' => { - '0' => { - 'name' => 'mode', - 'offset' => '0', - 'type' => '75' - }, - '1' => { - 'name' => 'hash_algo', - 'offset' => '4', - 'type' => '3280343' - }, - '2' => { - 'name' => 'salt', - 'offset' => '5', - 'type' => '3299986' - }, - '3' => { - 'name' => 'count', - 'offset' => '16', - 'type' => '3280359' - } - }, - 'Name' => 'struct cdk_s2k_s', - 'PrivateABI' => 1, - 'Size' => '20', - 'Type' => 'Struct' - }, - '3128936' => { - 'BaseType' => '3128947', - 'Header' => 'opencdk.h', - 'Line' => '68', - 'Name' => 'cdk_stream_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3128947' => { - 'BaseType' => '3128953', - 'Name' => 'struct cdk_stream_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3128953' => { - 'Header' => 'stream.h', - 'Line' => '68', - 'Memb' => { - '0' => { - 'name' => 'filters', - 'offset' => '0', - 'type' => '3343080' - }, - '1' => { - 'name' => 'fmode', - 'offset' => '8', - 'type' => '75' - }, - '10' => { - 'name' => 'cbs_hd', - 'offset' => '128', - 'type' => '211' - }, - '2' => { - 'name' => 'error', - 'offset' => '12', - 'type' => '75' - }, - '3' => { - 'name' => 'blkmode', - 'offset' => '16', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'offset' => '24', - 'type' => '3343086' - }, - '5' => { - 'name' => 'cache', - 'offset' => '32', - 'type' => '3343200' - }, - '6' => { - 'name' => 'fname', - 'offset' => '64', - 'type' => '235' - }, - '7' => { - 'name' => 'fp', - 'offset' => '72', - 'type' => '259252' - }, - '8' => { - 'bitfield' => '1', - 'name' => 'fp_ref', - 'offset' => '80', - 'type' => '145' - }, - '9' => { - 'name' => 'cbs', - 'offset' => '88', - 'type' => '3341996' - } - }, - 'Name' => 'struct cdk_stream_s', - 'PrivateABI' => 1, - 'Size' => '136', - 'Type' => 'Struct' - }, - '3128958' => { - 'BaseType' => '3128969', - 'Header' => 'opencdk.h', - 'Line' => '72', - 'Name' => 'cdk_prefitem_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3128969' => { - 'BaseType' => '3128975', - 'Name' => 'struct cdk_prefitem_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3128975' => { - 'Header' => 'context.h', - 'Line' => '82', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '3280343' - }, - '1' => { - 'name' => 'value', - 'offset' => '1', - 'type' => '3280343' - } - }, - 'Name' => 'struct cdk_prefitem_s', - 'PrivateABI' => 1, - 'Size' => '2', - 'Type' => 'Struct' - }, - '3129002' => { - 'BaseType' => '3129013', - 'Header' => 'opencdk.h', - 'Line' => '91', - 'Name' => 'cdk_subpkt_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3129013' => { - 'BaseType' => '3129019', - 'Name' => 'struct cdk_subpkt_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3129019' => { - 'Header' => 'context.h', - 'Line' => '94', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '3129013' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '3280359' - }, - '2' => { - 'name' => 'type', - 'offset' => '12', - 'type' => '3280343' - }, - '3' => { - 'name' => 'd', - 'offset' => '16', - 'type' => '3300018' - } - }, - 'Name' => 'struct cdk_subpkt_s', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '3129024' => { - 'BaseType' => '3129035', - 'Header' => 'opencdk.h', - 'Line' => '99', - 'Name' => 'cdk_desig_revoker_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3129035' => { - 'BaseType' => '3129041', - 'Name' => 'struct cdk_desig_revoker_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3129041' => { - 'Header' => 'context.h', - 'Line' => '87', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '3129035' - }, - '1' => { - 'name' => 'r_class', - 'offset' => '8', - 'type' => '3280343' - }, - '2' => { - 'name' => 'algid', - 'offset' => '9', - 'type' => '3280343' - }, - '3' => { - 'name' => 'fpr', - 'offset' => '10', - 'type' => '3300002' - } - }, - 'Name' => 'struct cdk_desig_revoker_s', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '3129503' => { - 'Header' => 'opencdk.h', - 'Line' => '353', - 'Memb' => { - '0' => { - 'name' => 'CDK_PKT_RESERVED', - 'value' => '0' - }, - '1' => { - 'name' => 'CDK_PKT_PUBKEY_ENC', - 'value' => '1' - }, - '10' => { - 'name' => 'CDK_PKT_RING_TRUST', - 'value' => '12' - }, - '11' => { - 'name' => 'CDK_PKT_USER_ID', - 'value' => '13' - }, - '12' => { - 'name' => 'CDK_PKT_PUBLIC_SUBKEY', - 'value' => '14' - }, - '13' => { - 'name' => 'CDK_PKT_OLD_COMMENT', - 'value' => '16' - }, - '14' => { - 'name' => 'CDK_PKT_ATTRIBUTE', - 'value' => '17' - }, - '15' => { - 'name' => 'CDK_PKT_MDC', - 'value' => '19' - }, - '2' => { - 'name' => 'CDK_PKT_SIGNATURE', - 'value' => '2' - }, - '3' => { - 'name' => 'CDK_PKT_ONEPASS_SIG', - 'value' => '4' - }, - '4' => { - 'name' => 'CDK_PKT_SECRET_KEY', - 'value' => '5' - }, - '5' => { - 'name' => 'CDK_PKT_PUBLIC_KEY', - 'value' => '6' - }, - '6' => { - 'name' => 'CDK_PKT_SECRET_SUBKEY', - 'value' => '7' - }, - '7' => { - 'name' => 'CDK_PKT_COMPRESSED', - 'value' => '8' - }, - '8' => { - 'name' => 'CDK_PKT_MARKER', - 'value' => '10' - }, - '9' => { - 'name' => 'CDK_PKT_LITERAL', - 'value' => '11' - } - }, - 'Name' => 'enum cdk_packet_type_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '3129515' => { - 'Header' => 'opencdk.h', - 'Line' => '385', - 'Memb' => { - '0' => { - 'bitfield' => '1', - 'name' => 'exportable', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'revocable', - 'offset' => '0', - 'type' => '145' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'policy_url', - 'offset' => '0', - 'type' => '145' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'notation', - 'offset' => '0', - 'type' => '145' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'expired', - 'offset' => '0', - 'type' => '145' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'checked', - 'offset' => '0', - 'type' => '145' - }, - '6' => { - 'bitfield' => '1', - 'name' => 'valid', - 'offset' => '0', - 'type' => '145' - }, - '7' => { - 'bitfield' => '1', - 'name' => 'missing_key', - 'offset' => '0', - 'type' => '145' - } - }, - 'Name' => 'anon-struct-opencdk.h-385', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Struct' - }, - '3129653' => { - 'Header' => 'opencdk.h', - 'Line' => '370', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '152' - }, - '1' => { - 'name' => 'sig_class', - 'offset' => '1', - 'type' => '152' - }, - '10' => { - 'name' => 'unhashed_size', - 'offset' => '40', - 'type' => '103' - }, - '11' => { - 'name' => 'unhashed', - 'offset' => '48', - 'type' => '3129002' - }, - '12' => { - 'name' => 'mpi', - 'offset' => '56', - 'type' => '8484' - }, - '13' => { - 'name' => 'revkeys', - 'offset' => '72', - 'type' => '3129024' - }, - '14' => { - 'name' => 'flags', - 'offset' => '80', - 'type' => '3129515' - }, - '15' => { - 'name' => 'key', - 'offset' => '84', - 'type' => '3129875' - }, - '2' => { - 'name' => 'timestamp', - 'offset' => '4', - 'type' => '145' - }, - '3' => { - 'name' => 'expiredate', - 'offset' => '8', - 'type' => '145' - }, - '4' => { - 'name' => 'keyid', - 'offset' => '12', - 'type' => '3129875' - }, - '5' => { - 'name' => 'pubkey_algo', - 'offset' => '20', - 'type' => '152' - }, - '6' => { - 'name' => 'digest_algo', - 'offset' => '21', - 'type' => '152' - }, - '7' => { - 'name' => 'digest_start', - 'offset' => '22', - 'type' => '1789614' - }, - '8' => { - 'name' => 'hashed_size', - 'offset' => '24', - 'type' => '103' - }, - '9' => { - 'name' => 'hashed', - 'offset' => '32', - 'type' => '3129002' - } - }, - 'Name' => 'struct cdk_pkt_signature_s', - 'PrivateABI' => 1, - 'Size' => '96', - 'Type' => 'Struct' - }, - '3129875' => { - 'BaseType' => '145', - 'Name' => 'unsigned int[2]', - 'Size' => '8', - 'Type' => 'Array' - }, - '3129907' => { - 'BaseType' => '3129919', - 'Header' => 'opencdk.h', - 'Line' => '397', - 'Name' => 'cdk_pkt_signature_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3129919' => { - 'BaseType' => '3129653', - 'Name' => 'struct cdk_pkt_signature_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3129925' => { - 'Header' => 'opencdk.h', - 'Line' => '400', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'is_primary', - 'offset' => '4', - 'type' => '145' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'is_revoked', - 'offset' => '4', - 'type' => '145' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'mdc_feature', - 'offset' => '4', - 'type' => '145' - }, - '4' => { - 'name' => 'prefs', - 'offset' => '8', - 'type' => '3128958' - }, - '5' => { - 'name' => 'prefs_size', - 'offset' => '16', - 'type' => '52' - }, - '6' => { - 'name' => 'attrib_img', - 'offset' => '24', - 'type' => '3626' - }, - '7' => { - 'name' => 'attrib_len', - 'offset' => '32', - 'type' => '52' - }, - '8' => { - 'name' => 'selfsig', - 'offset' => '40', - 'type' => '3129907' - }, - '9' => { - 'name' => 'name', - 'offset' => '48', - 'type' => '235' - } - }, - 'Name' => 'struct cdk_pkt_userid_s', - 'PrivateABI' => 1, - 'Size' => '56', - 'Type' => 'Struct' - }, - '3130078' => { - 'BaseType' => '3130090', - 'Header' => 'opencdk.h', - 'Line' => '412', - 'Name' => 'cdk_pkt_userid_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3130090' => { - 'BaseType' => '3129925', - 'Name' => 'struct cdk_pkt_userid_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3130096' => { - 'Header' => 'opencdk.h', - 'Line' => '415', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '152' - }, - '1' => { - 'name' => 'pubkey_algo', - 'offset' => '1', - 'type' => '152' - }, - '10' => { - 'bitfield' => '1', - 'name' => 'has_expired', - 'offset' => '80', - 'type' => '145' - }, - '11' => { - 'name' => 'pubkey_usage', - 'offset' => '84', - 'type' => '75' - }, - '12' => { - 'name' => 'uid', - 'offset' => '88', - 'type' => '3130078' - }, - '13' => { - 'name' => 'prefs', - 'offset' => '96', - 'type' => '3128958' - }, - '14' => { - 'name' => 'prefs_size', - 'offset' => '104', - 'type' => '52' - }, - '15' => { - 'name' => 'revkeys', - 'offset' => '112', - 'type' => '3129024' - }, - '2' => { - 'name' => 'fpr', - 'offset' => '2', - 'type' => '3130327' - }, - '3' => { - 'name' => 'keyid', - 'offset' => '24', - 'type' => '3129875' - }, - '4' => { - 'name' => 'main_keyid', - 'offset' => '32', - 'type' => '3129875' - }, - '5' => { - 'name' => 'timestamp', - 'offset' => '40', - 'type' => '145' - }, - '6' => { - 'name' => 'expiredate', - 'offset' => '44', - 'type' => '145' - }, - '7' => { - 'name' => 'mpi', - 'offset' => '48', - 'type' => '3130343' - }, - '8' => { - 'bitfield' => '1', - 'name' => 'is_revoked', - 'offset' => '80', - 'type' => '145' - }, - '9' => { - 'bitfield' => '1', - 'name' => 'is_invalid', - 'offset' => '80', - 'type' => '145' - } - }, - 'Name' => 'struct cdk_pkt_pubkey_s', - 'PrivateABI' => 1, - 'Size' => '120', - 'Type' => 'Struct' - }, - '3130327' => { - 'BaseType' => '152', - 'Name' => 'unsigned char[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '3130343' => { - 'BaseType' => '6512', - 'Name' => 'bigint_t[4]', - 'Size' => '32', - 'Type' => 'Array' - }, - '3130359' => { - 'BaseType' => '3130371', - 'Header' => 'opencdk.h', - 'Line' => '433', - 'Name' => 'cdk_pkt_pubkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3130371' => { - 'BaseType' => '3130096', - 'Name' => 'struct cdk_pkt_pubkey_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3130377' => { - 'Header' => 'opencdk.h', - 'Line' => '447', - 'Memb' => { - '0' => { - 'name' => 'algo', - 'offset' => '0', - 'type' => '152' - }, - '1' => { - 'name' => 'sha1chk', - 'offset' => '1', - 'type' => '152' - }, - '2' => { - 'name' => 's2k', - 'offset' => '8', - 'type' => '3128914' - }, - '3' => { - 'name' => 'iv', - 'offset' => '16', - 'type' => '1153053' - }, - '4' => { - 'name' => 'ivlen', - 'offset' => '32', - 'type' => '152' - } - }, - 'Name' => 'anon-struct-opencdk.h-447', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '3130467' => { - 'Header' => 'opencdk.h', - 'Line' => '439', - 'Memb' => { - '0' => { - 'name' => 'pk', - 'offset' => '0', - 'type' => '3130359' - }, - '1' => { - 'name' => 'expiredate', - 'offset' => '8', - 'type' => '145' - }, - '10' => { - 'name' => 'encdata', - 'offset' => '120', - 'type' => '3626' - }, - '11' => { - 'name' => 'enclen', - 'offset' => '128', - 'type' => '52' - }, - '12' => { - 'name' => 'is_protected', - 'offset' => '136', - 'type' => '152' - }, - '13' => { - 'bitfield' => '1', - 'name' => 'is_primary', - 'offset' => '137', - 'type' => '145' - }, - '14' => { - 'bitfield' => '1', - 'name' => 'has_expired', - 'offset' => '137', - 'type' => '145' - }, - '15' => { - 'bitfield' => '1', - 'name' => 'is_revoked', - 'offset' => '137', - 'type' => '145' - }, - '2' => { - 'name' => 'version', - 'offset' => '12', - 'type' => '75' - }, - '3' => { - 'name' => 'pubkey_algo', - 'offset' => '16', - 'type' => '75' - }, - '4' => { - 'name' => 'keyid', - 'offset' => '20', - 'type' => '3129875' - }, - '5' => { - 'name' => 'main_keyid', - 'offset' => '28', - 'type' => '3129875' - }, - '6' => { - 'name' => 's2k_usage', - 'offset' => '36', - 'type' => '152' - }, - '7' => { - 'name' => 'protect', - 'offset' => '40', - 'type' => '3130377' - }, - '8' => { - 'name' => 'csum', - 'offset' => '80', - 'type' => '103' - }, - '9' => { - 'name' => 'mpi', - 'offset' => '88', - 'type' => '3130343' - } - }, - 'Name' => 'struct cdk_pkt_seckey_s', - 'PrivateABI' => 1, - 'Size' => '144', - 'Type' => 'Struct' - }, - '3130697' => { - 'BaseType' => '3130709', - 'Header' => 'opencdk.h', - 'Line' => '463', - 'Name' => 'cdk_pkt_seckey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3130709' => { - 'BaseType' => '3130467', - 'Name' => 'struct cdk_pkt_seckey_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3130715' => { - 'Header' => 'opencdk.h', - 'Line' => '469', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '152' - }, - '1' => { - 'name' => 'keyid', - 'offset' => '4', - 'type' => '3129875' - }, - '2' => { - 'name' => 'sig_class', - 'offset' => '12', - 'type' => '152' - }, - '3' => { - 'name' => 'digest_algo', - 'offset' => '13', - 'type' => '152' - }, - '4' => { - 'name' => 'pubkey_algo', - 'offset' => '14', - 'type' => '152' - }, - '5' => { - 'name' => 'last', - 'offset' => '15', - 'type' => '152' - } - }, - 'Name' => 'struct cdk_pkt_onepass_sig_s', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '3130807' => { - 'BaseType' => '3130819', - 'Header' => 'opencdk.h', - 'Line' => '477', - 'Name' => 'cdk_pkt_onepass_sig_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3130819' => { - 'BaseType' => '3130715', - 'Name' => 'struct cdk_pkt_onepass_sig_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3130825' => { - 'Header' => 'opencdk.h', - 'Line' => '480', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '152' - }, - '1' => { - 'name' => 'keyid', - 'offset' => '4', - 'type' => '3129875' - }, - '2' => { - 'name' => 'throw_keyid', - 'offset' => '12', - 'type' => '75' - }, - '3' => { - 'name' => 'pubkey_algo', - 'offset' => '16', - 'type' => '152' - }, - '4' => { - 'name' => 'mpi', - 'offset' => '24', - 'type' => '8484' - } - }, - 'Name' => 'struct cdk_pkt_pubkey_enc_s', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '3130904' => { - 'BaseType' => '3130916', - 'Header' => 'opencdk.h', - 'Line' => '487', - 'Name' => 'cdk_pkt_pubkey_enc_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3130916' => { - 'BaseType' => '3130825', - 'Name' => 'struct cdk_pkt_pubkey_enc_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3130922' => { - 'Header' => 'opencdk.h', - 'Line' => '489', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'extralen', - 'offset' => '4', - 'type' => '75' - }, - '2' => { - 'name' => 'mdc_method', - 'offset' => '8', - 'type' => '152' - }, - '3' => { - 'name' => 'buf', - 'offset' => '16', - 'type' => '3128936' - } - }, - 'Name' => 'struct cdk_pkt_encrypted_s', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '3130988' => { - 'BaseType' => '3131000', - 'Header' => 'opencdk.h', - 'Line' => '495', - 'Name' => 'cdk_pkt_encrypted_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3131000' => { - 'BaseType' => '3130922', - 'Name' => 'struct cdk_pkt_encrypted_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3131006' => { - 'Header' => 'opencdk.h', - 'Line' => '498', - 'Memb' => { - '0' => { - 'name' => 'hash', - 'offset' => '0', - 'type' => '3130327' - } - }, - 'Name' => 'struct cdk_pkt_mdc_s', - 'PrivateABI' => 1, - 'Size' => '20', - 'Type' => 'Struct' - }, - '3131033' => { - 'BaseType' => '3131045', - 'Header' => 'opencdk.h', - 'Line' => '501', - 'Name' => 'cdk_pkt_mdc_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3131045' => { - 'BaseType' => '3131006', - 'Name' => 'struct cdk_pkt_mdc_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3131051' => { - 'Header' => 'opencdk.h', - 'Line' => '504', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'buf', - 'offset' => '8', - 'type' => '3128936' - }, - '2' => { - 'name' => 'mode', - 'offset' => '16', - 'type' => '75' - }, - '3' => { - 'name' => 'timestamp', - 'offset' => '20', - 'type' => '145' - }, - '4' => { - 'name' => 'namelen', - 'offset' => '24', - 'type' => '75' - }, - '5' => { - 'name' => 'name', - 'offset' => '32', - 'type' => '235' - } - }, - 'Name' => 'struct cdk_pkt_literal_s', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '3131143' => { - 'BaseType' => '3131155', - 'Header' => 'opencdk.h', - 'Line' => '512', - 'Name' => 'cdk_pkt_literal_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3131155' => { - 'BaseType' => '3131051', - 'Name' => 'struct cdk_pkt_literal_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3131161' => { - 'Header' => 'opencdk.h', - 'Line' => '515', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'algorithm', - 'offset' => '4', - 'type' => '75' - }, - '2' => { - 'name' => 'buf', - 'offset' => '8', - 'type' => '3128936' - } - }, - 'Name' => 'struct cdk_pkt_compressed_s', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '3131214' => { - 'BaseType' => '3131226', - 'Header' => 'opencdk.h', - 'Line' => '520', - 'Name' => 'cdk_pkt_compressed_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3131226' => { - 'BaseType' => '3131161', - 'Name' => 'struct cdk_pkt_compressed_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3131232' => { - 'Header' => 'opencdk.h', - 'Line' => '529', - 'Memb' => { - '0' => { - 'name' => 'mdc', - 'offset' => '0', - 'type' => '3131033' - }, - '1' => { - 'name' => 'user_id', - 'offset' => '0', - 'type' => '3130078' - }, - '2' => { - 'name' => 'public_key', - 'offset' => '0', - 'type' => '3130359' - }, - '3' => { - 'name' => 'secret_key', - 'offset' => '0', - 'type' => '3130697' - }, - '4' => { - 'name' => 'signature', - 'offset' => '0', - 'type' => '3129907' - }, - '5' => { - 'name' => 'pubkey_enc', - 'offset' => '0', - 'type' => '3130904' - }, - '6' => { - 'name' => 'compressed', - 'offset' => '0', - 'type' => '3131214' - }, - '7' => { - 'name' => 'encrypted', - 'offset' => '0', - 'type' => '3130988' - }, - '8' => { - 'name' => 'literal', - 'offset' => '0', - 'type' => '3131143' - }, - '9' => { - 'name' => 'onepass_sig', - 'offset' => '0', - 'type' => '3130807' - } - }, - 'Name' => 'anon-union-opencdk.h-529', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Union' - }, - '3131362' => { - 'Header' => 'opencdk.h', - 'Line' => '524', - 'Memb' => { - '0' => { - 'name' => 'pktlen', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'pktsize', - 'offset' => '8', - 'type' => '52' - }, - '2' => { - 'name' => 'old_ctb', - 'offset' => '16', - 'type' => '75' - }, - '3' => { - 'name' => 'pkttype', - 'offset' => '20', - 'type' => '3129503' - }, - '4' => { - 'name' => 'pkt', - 'offset' => '24', - 'type' => '3131232' - } - }, - 'Name' => 'struct cdk_packet_s', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '3131441' => { - 'BaseType' => '3131453', - 'Header' => 'opencdk.h', - 'Line' => '542', - 'Name' => 'cdk_packet_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3131453' => { - 'BaseType' => '3131362', - 'Name' => 'struct cdk_packet_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3159313' => { - 'Header' => 'opencdk.h', - 'Line' => '136', - 'Memb' => { - '0' => { - 'name' => 'CDK_EOF', - 'value' => '-1' - }, - '1' => { - 'name' => 'CDK_Success', - 'value' => '0' - }, - '10' => { - 'name' => 'CDK_MPI_Error', - 'value' => '10' - }, - '11' => { - 'name' => 'CDK_Inv_Value', - 'value' => '11' - }, - '12' => { - 'name' => 'CDK_Error_No_Key', - 'value' => '12' - }, - '13' => { - 'name' => 'CDK_Chksum_Error', - 'value' => '13' - }, - '14' => { - 'name' => 'CDK_Time_Conflict', - 'value' => '14' - }, - '15' => { - 'name' => 'CDK_Zlib_Error', - 'value' => '15' - }, - '16' => { - 'name' => 'CDK_Weak_Key', - 'value' => '16' - }, - '17' => { - 'name' => 'CDK_Out_Of_Core', - 'value' => '17' - }, - '18' => { - 'name' => 'CDK_Wrong_Seckey', - 'value' => '18' - }, - '19' => { - 'name' => 'CDK_Bad_MDC', - 'value' => '19' - }, - '2' => { - 'name' => 'CDK_General_Error', - 'value' => '1' - }, - '20' => { - 'name' => 'CDK_Inv_Mode', - 'value' => '20' - }, - '21' => { - 'name' => 'CDK_Error_No_Keyring', - 'value' => '21' - }, - '22' => { - 'name' => 'CDK_Wrong_Format', - 'value' => '22' - }, - '23' => { - 'name' => 'CDK_Inv_Packet_Ver', - 'value' => '23' - }, - '24' => { - 'name' => 'CDK_Too_Short', - 'value' => '24' - }, - '25' => { - 'name' => 'CDK_Unusable_Key', - 'value' => '25' - }, - '26' => { - 'name' => 'CDK_No_Data', - 'value' => '26' - }, - '27' => { - 'name' => 'CDK_No_Passphrase', - 'value' => '27' - }, - '28' => { - 'name' => 'CDK_Network_Error', - 'value' => '28' - }, - '3' => { - 'name' => 'CDK_File_Error', - 'value' => '2' - }, - '4' => { - 'name' => 'CDK_Bad_Sig', - 'value' => '3' - }, - '5' => { - 'name' => 'CDK_Inv_Packet', - 'value' => '4' - }, - '6' => { - 'name' => 'CDK_Inv_Algo', - 'value' => '5' - }, - '7' => { - 'name' => 'CDK_Not_Implemented', - 'value' => '6' - }, - '8' => { - 'name' => 'CDK_Armor_Error', - 'value' => '8' - }, - '9' => { - 'name' => 'CDK_Armor_CRC_Error', - 'value' => '9' - } - }, - 'Name' => 'enum cdk_error_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '3176390' => { - 'BaseType' => '145036', - 'Name' => 'gnutls_openpgp_keyring_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '318' => { - 'BaseType' => '324', - 'Name' => 'void const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3185' => { - 'BaseType' => '3197', - 'Header' => 'gnutls.h', - 'Line' => '786', - 'Name' => 'gnutls_dh_params_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3197' => { - 'BaseType' => '3203', - 'Name' => 'struct gnutls_dh_params_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3203' => { - 'Header' => 'gnutls_int.h', - 'Line' => '696', - 'Memb' => { - '0' => { - 'name' => 'params', - 'offset' => '0', - 'type' => '8484' - }, - '1' => { - 'name' => 'q_bits', - 'offset' => '16', - 'type' => '75' - } - }, - 'Name' => 'struct gnutls_dh_params_int', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '324' => { - 'BaseType' => '1', - 'Name' => 'void const', - 'Type' => 'Const' - }, - '3243' => { - 'Header' => 'gnutls_int.h', - 'Line' => '645', - 'Memb' => { - '0' => { - 'name' => 'cipher', - 'offset' => '0', - 'type' => '10622' - }, - '1' => { - 'name' => 'mac', - 'offset' => '132', - 'type' => '10622' - }, - '10' => { - 'name' => 'allow_large_records', - 'offset' => '1058', - 'type' => '8952' - }, - '11' => { - 'name' => 'dumbfw', - 'offset' => '1060', - 'type' => '145' - }, - '12' => { - 'name' => 'sr', - 'offset' => '1064', - 'type' => '10672' - }, - '13' => { - 'name' => 'min_record_version', - 'offset' => '1068', - 'type' => '8952' - }, - '14' => { - 'name' => 'server_precedence', - 'offset' => '1069', - 'type' => '8952' - }, - '15' => { - 'name' => 'allow_wrong_pms', - 'offset' => '1070', - 'type' => '8952' - }, - '16' => { - 'name' => 'no_tickets', - 'offset' => '1071', - 'type' => '8952' - }, - '17' => { - 'name' => 'no_etm', - 'offset' => '1072', - 'type' => '8952' - }, - '18' => { - 'name' => 'have_cbc', - 'offset' => '1073', - 'type' => '8952' - }, - '19' => { - 'name' => 'stateless_compression', - 'offset' => '1074', - 'type' => '8952' - }, - '2' => { - 'name' => 'kx', - 'offset' => '264', - 'type' => '10622' - }, - '20' => { - 'name' => 'additional_verify_flags', - 'offset' => '1076', - 'type' => '145' - }, - '21' => { - 'name' => 'level', - 'offset' => '1080', - 'type' => '3074' - }, - '22' => { - 'name' => 'dh_prime_bits', - 'offset' => '1084', - 'type' => '145' - }, - '23' => { - 'name' => 'fallback', - 'offset' => '1088', - 'type' => '8952' - }, - '3' => { - 'name' => 'compression', - 'offset' => '396', - 'type' => '10622' - }, - '4' => { - 'name' => 'protocol', - 'offset' => '528', - 'type' => '10622' - }, - '5' => { - 'name' => 'cert_type', - 'offset' => '660', - 'type' => '10622' - }, - '6' => { - 'name' => 'sign_algo', - 'offset' => '792', - 'type' => '10622' - }, - '7' => { - 'name' => 'supported_ecc', - 'offset' => '924', - 'type' => '10622' - }, - '8' => { - 'name' => 'no_extensions', - 'offset' => '1056', - 'type' => '8952' - }, - '9' => { - 'name' => 'no_ext_master_secret', - 'offset' => '1057', - 'type' => '8952' - } - }, - 'Name' => 'struct gnutls_priority_st', - 'PrivateABI' => 1, - 'Size' => '1092', - 'Type' => 'Struct' - }, - '325' => { - 'Header' => 'libio.h', - 'Line' => '241', - 'Memb' => { - '0' => { - 'name' => '_flags', - 'offset' => '0', - 'type' => '75' - }, - '1' => { - 'name' => '_IO_read_ptr', - 'offset' => '8', - 'type' => '235' - }, - '10' => { - 'name' => '_IO_backup_base', - 'offset' => '80', - 'type' => '235' - }, - '11' => { - 'name' => '_IO_save_end', - 'offset' => '88', - 'type' => '235' - }, - '12' => { - 'name' => '_markers', - 'offset' => '96', - 'type' => '762' - }, - '13' => { - 'name' => '_chain', - 'offset' => '104', - 'type' => '768' - }, - '14' => { - 'name' => '_fileno', - 'offset' => '112', - 'type' => '75' - }, - '15' => { - 'name' => '_flags2', - 'offset' => '116', - 'type' => '75' - }, - '16' => { - 'name' => '_old_offset', - 'offset' => '120', - 'type' => '178' - }, - '17' => { - 'name' => '_cur_column', - 'offset' => '128', - 'type' => '103' - }, - '18' => { - 'name' => '_vtable_offset', - 'offset' => '130', - 'type' => '164' - }, - '19' => { - 'name' => '_shortbuf', - 'offset' => '131', - 'type' => '774' - }, - '2' => { - 'name' => '_IO_read_end', - 'offset' => '16', - 'type' => '235' - }, - '20' => { - 'name' => '_lock', - 'offset' => '136', - 'type' => '790' - }, - '21' => { - 'name' => '_offset', - 'offset' => '144', - 'type' => '189' - }, - '22' => { - 'name' => '__pad1', - 'offset' => '152', - 'type' => '211' - }, - '23' => { - 'name' => '__pad2', - 'offset' => '160', - 'type' => '211' - }, - '24' => { - 'name' => '__pad3', - 'offset' => '168', - 'type' => '211' - }, - '25' => { - 'name' => '__pad4', - 'offset' => '176', - 'type' => '211' - }, - '26' => { - 'name' => '__pad5', - 'offset' => '184', - 'type' => '52' - }, - '27' => { - 'name' => '_mode', - 'offset' => '192', - 'type' => '75' - }, - '28' => { - 'name' => '_unused2', - 'offset' => '196', - 'type' => '796' - }, - '3' => { - 'name' => '_IO_read_base', - 'offset' => '24', - 'type' => '235' - }, - '4' => { - 'name' => '_IO_write_base', - 'offset' => '32', - 'type' => '235' - }, - '5' => { - 'name' => '_IO_write_ptr', - 'offset' => '40', - 'type' => '235' - }, - '6' => { - 'name' => '_IO_write_end', - 'offset' => '48', - 'type' => '235' - }, - '7' => { - 'name' => '_IO_buf_base', - 'offset' => '56', - 'type' => '235' - }, - '8' => { - 'name' => '_IO_buf_end', - 'offset' => '64', - 'type' => '235' - }, - '9' => { - 'name' => '_IO_save_base', - 'offset' => '72', - 'type' => '235' - } - }, - 'Name' => 'struct _IO_FILE', - 'PrivateABI' => 1, - 'Size' => '216', - 'Type' => 'Struct' - }, - '3263916' => { - 'BaseType' => '873738', - 'Name' => 'gnutls_openpgp_crt_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3280343' => { - 'BaseType' => '152', - 'Header' => 'types.h', - 'Line' => '28', - 'Name' => 'byte', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '3280359' => { - 'BaseType' => '145', - 'Header' => 'types.h', - 'Line' => '40', - 'Name' => 'u32', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '3280486' => { - 'Header' => 'filters.h', - 'Line' => '57', - 'Memb' => { - '0' => { - 'name' => 'le', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'hdrlines', - 'offset' => '8', - 'type' => '110' - }, - '2' => { - 'name' => 'crc', - 'offset' => '16', - 'type' => '3280359' - }, - '3' => { - 'name' => 'crc_okay', - 'offset' => '20', - 'type' => '75' - }, - '4' => { - 'name' => 'idx', - 'offset' => '24', - 'type' => '75' - }, - '5' => { - 'name' => 'idx2', - 'offset' => '28', - 'type' => '75' - } - }, - 'Name' => 'struct armor_filter_t', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '3299986' => { - 'BaseType' => '3280343', - 'Name' => 'byte[8]', - 'Size' => '8', - 'Type' => 'Array' - }, - '3300002' => { - 'BaseType' => '3280343', - 'Name' => 'byte[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '3300018' => { - 'BaseType' => '3280343', - 'Name' => 'byte*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3339894' => { - 'Header' => 'opencdk.h', - 'Line' => '333', - 'Memb' => { - '0' => { - 'name' => 'CDK_LITFMT_BINARY', - 'value' => '0' - }, - '1' => { - 'name' => 'CDK_LITFMT_TEXT', - 'value' => '1' - }, - '2' => { - 'name' => 'CDK_LITFMT_UNICODE', - 'value' => '2' - } - }, - 'Name' => 'enum cdk_lit_format_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '3341996' => { - 'Header' => 'opencdk.h', - 'Line' => '691', - 'Memb' => { - '0' => { - 'name' => 'open', - 'offset' => '0', - 'type' => '3342090' - }, - '1' => { - 'name' => 'release', - 'offset' => '8', - 'type' => '3342090' - }, - '2' => { - 'name' => 'read', - 'offset' => '16', - 'type' => '5863' - }, - '3' => { - 'name' => 'write', - 'offset' => '24', - 'type' => '5529' - }, - '4' => { - 'name' => 'seek', - 'offset' => '32', - 'type' => '3342116' - } - }, - 'Name' => 'struct cdk_stream_cbs_s', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '3342090' => { - 'Name' => 'cdk_error_t(*)(void*)', - 'Param' => { - '0' => { - 'type' => '211' - } - }, - 'Return' => '3159313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3342116' => { - 'Name' => 'int(*)(void*, off_t)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '1342545' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3342239' => { - 'Header' => 'filters.h', - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'on', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '1342545' - }, - '2' => { - 'name' => 'nleft', - 'offset' => '16', - 'type' => '1342545' - } - }, - 'Name' => 'anon-struct-filters.h-37', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '3342361' => { - 'Header' => 'filters.h', - 'Line' => '43', - 'Memb' => { - '0' => { - 'name' => 'hd', - 'offset' => '0', - 'type' => '9947' - }, - '1' => { - 'name' => 'mdc', - 'offset' => '80', - 'type' => '9503' - }, - '2' => { - 'name' => 'mdc_method', - 'offset' => '136', - 'type' => '75' - }, - '3' => { - 'name' => 'datalen', - 'offset' => '140', - 'type' => '3280359' - }, - '4' => { - 'name' => 'blkmode', - 'offset' => '144', - 'type' => '3342239' - }, - '5' => { - 'name' => 's', - 'offset' => '168', - 'type' => '3128936' - } - }, - 'Name' => 'struct cipher_filter_t', - 'PrivateABI' => 1, - 'Size' => '176', - 'Type' => 'Struct' - }, - '3342416' => { - 'Header' => 'filters.h', - 'Line' => '49', - 'Memb' => { - '0' => { - 'name' => 'digest_algo', - 'offset' => '0', - 'type' => '75' - }, - '1' => { - 'name' => 'md', - 'offset' => '8', - 'type' => '9503' - }, - '2' => { - 'name' => 'md_initialized', - 'offset' => '64', - 'type' => '75' - } - }, - 'Name' => 'struct md_filter_t', - 'PrivateABI' => 1, - 'Size' => '72', - 'Type' => 'Struct' - }, - '3342518' => { - 'Header' => 'filters.h', - 'Line' => '65', - 'Memb' => { - '0' => { - 'name' => 'on', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '1342545' - } - }, - 'Name' => 'anon-struct-filters.h-65', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '3342630' => { - 'Header' => 'filters.h', - 'Line' => '69', - 'Memb' => { - '0' => { - 'name' => 'mode', - 'offset' => '0', - 'type' => '3339894' - }, - '1' => { - 'name' => 'orig_filename', - 'offset' => '8', - 'type' => '235' - }, - '2' => { - 'name' => 'filename', - 'offset' => '16', - 'type' => '235' - }, - '3' => { - 'name' => 'md', - 'offset' => '24', - 'type' => '9503' - }, - '4' => { - 'name' => 'md_initialized', - 'offset' => '80', - 'type' => '75' - }, - '5' => { - 'name' => 'blkmode', - 'offset' => '88', - 'type' => '3342518' - } - }, - 'Name' => 'struct literal_filter_t', - 'PrivateABI' => 1, - 'Size' => '104', - 'Type' => 'Struct' - }, - '3342727' => { - 'BaseType' => '3280343', - 'Name' => 'byte[8192]', - 'Size' => '8192', - 'Type' => 'Array' - }, - '3342744' => { - 'Header' => 'filters.h', - 'Line' => '78', - 'Memb' => { - '0' => { - 'name' => 'inbufsize', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'inbuf', - 'offset' => '8', - 'type' => '3342727' - }, - '2' => { - 'name' => 'outbufsize', - 'offset' => '8200', - 'type' => '52' - }, - '3' => { - 'name' => 'outbuf', - 'offset' => '8208', - 'type' => '3342727' - }, - '4' => { - 'name' => 'algo', - 'offset' => '16400', - 'type' => '75' - }, - '5' => { - 'name' => 'level', - 'offset' => '16404', - 'type' => '75' - } - }, - 'Name' => 'struct compress_filter_t', - 'PrivateABI' => 1, - 'Size' => '16408', - 'Type' => 'Struct' - }, - '3342775' => { - 'Header' => 'filters.h', - 'Line' => '82', - 'Memb' => { - '0' => { - 'name' => 'lf', - 'offset' => '0', - 'type' => '110' - } - }, - 'Name' => 'struct text_filter_t', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '3342786' => { - 'BaseType' => '3342797', - 'Header' => 'stream.h', - 'Line' => '40', - 'Name' => 'filter_fnct_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3342797' => { - 'Name' => 'int(*)(void*, int, FILE*, FILE*)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '75' - }, - '2' => { - 'type' => '259252' - }, - '3' => { - 'type' => '259252' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3342839' => { - 'Header' => 'stream.h', - 'Line' => '49', - 'Memb' => { - '0' => { - 'name' => 'afx', - 'offset' => '0', - 'type' => '3280486' - }, - '1' => { - 'name' => 'cfx', - 'offset' => '0', - 'type' => '3342361' - }, - '2' => { - 'name' => 'pfx', - 'offset' => '0', - 'type' => '3342630' - }, - '3' => { - 'name' => 'zfx', - 'offset' => '0', - 'type' => '3342744' - }, - '4' => { - 'name' => 'tfx', - 'offset' => '0', - 'type' => '3342775' - }, - '5' => { - 'name' => 'mfx', - 'offset' => '0', - 'type' => '3342416' - } - }, - 'Name' => 'anon-union-stream.h-49', - 'PrivateABI' => 1, - 'Size' => '16408', - 'Type' => 'Union' - }, - '3342915' => { - 'Header' => 'stream.h', - 'Line' => '57', - 'Memb' => { - '0' => { - 'bitfield' => '1', - 'name' => 'enabled', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'rdonly', - 'offset' => '0', - 'type' => '145' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'error', - 'offset' => '0', - 'type' => '145' - } - }, - 'Name' => 'anon-struct-stream.h-57', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Struct' - }, - '3342969' => { - 'Header' => 'stream.h', - 'Line' => '44', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '3343080' - }, - '1' => { - 'name' => 'fnct', - 'offset' => '8', - 'type' => '3342786' - }, - '2' => { - 'name' => 'uint8_t', - 'offset' => '16', - 'type' => '211' - }, - '3' => { - 'name' => 'tmp', - 'offset' => '24', - 'type' => '259252' - }, - '4' => { - 'name' => 'u', - 'offset' => '32', - 'type' => '3342839' - }, - '5' => { - 'name' => 'flags', - 'offset' => '16440', - 'type' => '3342915' - }, - '6' => { - 'name' => 'type', - 'offset' => '16444', - 'type' => '145' - }, - '7' => { - 'name' => 'ctl', - 'offset' => '16448', - 'type' => '145' - } - }, - 'Name' => 'struct stream_filter_s', - 'PrivateABI' => 1, - 'Size' => '16456', - 'Type' => 'Struct' - }, - '3343080' => { - 'BaseType' => '3342969', - 'Name' => 'struct stream_filter_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3343086' => { - 'Header' => 'stream.h', - 'Line' => '73', - 'Memb' => { - '0' => { - 'bitfield' => '1', - 'name' => 'filtrated', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'eof', - 'offset' => '0', - 'type' => '145' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'write', - 'offset' => '0', - 'type' => '145' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'temp', - 'offset' => '0', - 'type' => '145' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'reset', - 'offset' => '0', - 'type' => '145' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'no_filter', - 'offset' => '0', - 'type' => '145' - }, - '6' => { - 'bitfield' => '3', - 'name' => 'compressed', - 'offset' => '0', - 'type' => '145' - } - }, - 'Name' => 'anon-struct-stream.h-73', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Struct' - }, - '3343200' => { - 'Header' => 'stream.h', - 'Line' => '82', - 'Memb' => { - '0' => { - 'name' => 'buf', - 'offset' => '0', - 'type' => '3626' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'on', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'size', - 'offset' => '16', - 'type' => '52' - }, - '3' => { - 'name' => 'alloced', - 'offset' => '24', - 'type' => '52' - } - }, - 'Name' => 'anon-struct-stream.h-82', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '3343360' => { - 'Header' => 'keydb.h', - 'Line' => '65', - 'Memb' => { - '0' => { - 'name' => 'new_keys', - 'offset' => '0', - 'type' => '52' - } - }, - 'Name' => 'anon-struct-keydb.h-65', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '3626' => { - 'BaseType' => '152', - 'Name' => 'unsigned char*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3632' => { - 'Header' => 'gnutls.h', - 'Line' => '798', - 'Memb' => { - '0' => { - 'name' => 'data', - 'offset' => '0', - 'type' => '3626' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_datum_t', - 'Size' => '16', - 'Type' => 'Struct' - }, - '3644' => { - 'BaseType' => '3632', - 'Name' => 'gnutls_datum_t const', - 'Size' => '16', - 'Type' => 'Const' - }, - '366330' => { - 'BaseType' => '121', - 'Name' => 'char[128]', - 'Size' => '128', - 'Type' => 'Array' - }, - '3685' => { - 'Header' => 'gnutls.h', - 'Line' => '985', - 'Memb' => { - '0' => { - 'name' => 'low', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'high', - 'offset' => '8', - 'type' => '52' - } - }, - 'Name' => 'struct gnutls_range_st', - 'Size' => '16', - 'Type' => 'Struct' - }, - '3697' => { - 'BaseType' => '3685', - 'Name' => 'gnutls_range_st const', - 'Size' => '16', - 'Type' => 'Const' - }, - '3708' => { - 'Header' => 'gnutls_int.h', - 'Line' => '312', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '8089' - }, - '1' => { - 'name' => 'prev', - 'offset' => '8', - 'type' => '8089' - }, - '10' => { - 'name' => 'handshake_sequence', - 'offset' => '72', - 'type' => '957' - }, - '2' => { - 'name' => 'mark', - 'offset' => '16', - 'type' => '52' - }, - '3' => { - 'name' => 'msg', - 'offset' => '24', - 'type' => '3632' - }, - '4' => { - 'name' => 'maximum_size', - 'offset' => '40', - 'type' => '52' - }, - '5' => { - 'name' => 'uhead_mark', - 'offset' => '48', - 'type' => '145' - }, - '6' => { - 'name' => 'type', - 'offset' => '52', - 'type' => '7857' - }, - '7' => { - 'name' => 'record_sequence', - 'offset' => '56', - 'type' => '1803' - }, - '8' => { - 'name' => 'epoch', - 'offset' => '64', - 'type' => '957' - }, - '9' => { - 'name' => 'htype', - 'offset' => '68', - 'type' => '2564' - } - }, - 'Name' => 'struct mbuffer_st', - 'PrivateABI' => 1, - 'Size' => '80', - 'Type' => 'Struct' - }, - '3865' => { - 'BaseType' => '3877', - 'Header' => 'gnutls.h', - 'Line' => '1230', - 'Name' => 'gnutls_certificate_verify_function', - 'Type' => 'Typedef' - }, - '3877' => { - 'Name' => 'int()(gnutls_session_t)', - 'Param' => { - '0' => { - 'type' => '3098' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '3930' => { - 'Header' => 'gnutls.h', - 'Line' => '1254', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_DT_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_DT_DNS_HOSTNAME', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_DT_KEY_PURPOSE_OID', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_DT_RFC822NAME', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_vdata_types_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '3991' => { - 'Header' => 'gnutls.h', - 'Line' => '1260', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '3930' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '3626' - }, - '2' => { - 'name' => 'size', - 'offset' => '16', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_typed_vdata_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '4003' => { - 'BaseType' => '4015', - 'Header' => 'gnutls.h', - 'Line' => '1301', - 'Name' => 'gnutls_db_store_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4015' => { - 'Name' => 'int(*)(void*, gnutls_datum_t, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '3632' - }, - '2' => { - 'type' => '3632' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4046' => { - 'BaseType' => '4058', - 'Header' => 'gnutls.h', - 'Line' => '1303', - 'Name' => 'gnutls_db_remove_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4058' => { - 'Name' => 'int(*)(void*, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '3632' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '40623' => { - 'BaseType' => '16527', - 'Name' => 'uint8_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4084' => { - 'BaseType' => '4096', - 'Header' => 'gnutls.h', - 'Line' => '1304', - 'Name' => 'gnutls_db_retr_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4096' => { - 'Name' => 'gnutls_datum_t(*)(void*, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '3632' - } - }, - 'Return' => '3632', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '41210' => { - 'BaseType' => '3086', - 'Name' => 'gnutls_transport_ptr_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4122' => { - 'BaseType' => '4134', - 'Header' => 'gnutls.h', - 'Line' => '1339', - 'Name' => 'gnutls_handshake_hook_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4134' => { - 'Name' => 'int(*)(gnutls_session_t, unsigned int, unsigned int, unsigned int, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '145' - }, - '2' => { - 'type' => '145' - }, - '3' => { - 'type' => '145' - }, - '4' => { - 'type' => '4175' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4175' => { - 'BaseType' => '3644', - 'Name' => 'gnutls_datum_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4181' => { - 'BaseType' => '4193', - 'Header' => 'gnutls.h', - 'Line' => '1348', - 'Name' => 'gnutls_handshake_post_client_hello_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4193' => { - 'Name' => 'int(*)(gnutls_session_t)', - 'Param' => { - '0' => { - 'type' => '3098' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4199' => { - 'BaseType' => '4211', - 'Header' => 'gnutls.h', - 'Line' => '1376', - 'Name' => 'gnutls_pubkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4211' => { - 'BaseType' => '4217', - 'Name' => 'struct gnutls_pubkey_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4217' => { - 'Header' => 'abstract_int.h', - 'Line' => '54', - 'Memb' => { - '0' => { - 'name' => 'pk_algorithm', - 'offset' => '0', - 'type' => '2768' - }, - '1' => { - 'name' => 'bits', - 'offset' => '4', - 'type' => '145' - }, - '2' => { - 'name' => 'params', - 'offset' => '8', - 'type' => '7376' - }, - '3' => { - 'name' => 'openpgp_key_id', - 'offset' => '152', - 'type' => '155439' - }, - '4' => { - 'name' => 'openpgp_key_id_set', - 'offset' => '160', - 'type' => '145' - }, - '5' => { - 'name' => 'openpgp_key_fpr', - 'offset' => '164', - 'type' => '237037' - }, - '6' => { - 'bitfield' => '1', - 'name' => 'openpgp_key_fpr_set', - 'offset' => '184', - 'type' => '145' - }, - '7' => { - 'name' => 'key_usage', - 'offset' => '188', - 'type' => '145' - }, - '8' => { - 'name' => 'pin', - 'offset' => '192', - 'type' => '150955' - } - }, - 'Name' => 'struct gnutls_pubkey_st', - 'PrivateABI' => 1, - 'Size' => '208', - 'Type' => 'Struct' - }, - '4222' => { - 'BaseType' => '4228', - 'Name' => 'struct gnutls_privkey_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4228' => { - 'Header' => 'abstract_int.h', - 'Line' => '28', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '146313' - }, - '1' => { - 'name' => 'pk_algorithm', - 'offset' => '4', - 'type' => '2768' - }, - '2' => { - 'name' => 'key', - 'offset' => '8', - 'type' => '236968' - }, - '3' => { - 'name' => 'flags', - 'offset' => '48', - 'type' => '145' - }, - '4' => { - 'name' => 'preferred_sign_algo', - 'offset' => '52', - 'type' => '2920' - }, - '5' => { - 'name' => 'pin', - 'offset' => '56', - 'type' => '150955' - } - }, - 'Name' => 'struct gnutls_privkey_st', - 'PrivateABI' => 1, - 'Size' => '72', - 'Type' => 'Struct' - }, - '4233' => { - 'BaseType' => '3632', - 'Name' => 'gnutls_datum_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4239' => { - 'BaseType' => '4251', - 'Header' => 'gnutls.h', - 'Line' => '1619', - 'Name' => 'gnutls_time_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4251' => { - 'Name' => 'time_t(*)(time_t*)', - 'Param' => { - '0' => { - 'type' => '4272' - } - }, - 'Return' => '252', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4272' => { - 'BaseType' => '252', - 'Name' => 'time_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4278' => { - 'BaseType' => '211', - 'Name' => 'void**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4284' => { - 'BaseType' => '4296', - 'Header' => 'gnutls.h', - 'Line' => '1631', - 'Name' => 'gnutls_alloc_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4296' => { - 'Name' => 'void*(*)(size_t)', - 'Param' => { - '0' => { - 'type' => '52' - } - }, - 'Return' => '211', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4317' => { - 'BaseType' => '4329', - 'Header' => 'gnutls.h', - 'Line' => '1632', - 'Name' => 'gnutls_calloc_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4329' => { - 'Name' => 'void*(*)(size_t, size_t)', - 'Param' => { - '0' => { - 'type' => '52' - }, - '1' => { - 'type' => '52' - } - }, - 'Return' => '211', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4355' => { - 'BaseType' => '4367', - 'Header' => 'gnutls.h', - 'Line' => '1634', - 'Name' => 'gnutls_free_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4367' => { - 'Name' => 'void(*)(void*)', - 'Param' => { - '0' => { - 'type' => '211' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4384' => { - 'BaseType' => '4396', - 'Header' => 'gnutls.h', - 'Line' => '1635', - 'Name' => 'gnutls_realloc_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4396' => { - 'Name' => 'void*(*)(void*, size_t)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '52' - } - }, - 'Return' => '211', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4497' => { - 'Name' => 'char*(*)(char const*)', - 'Param' => { - '0' => { - 'type' => '110' - } - }, - 'Return' => '235', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '45' => { - 'Name' => 'long', - 'Size' => '8', - 'Type' => 'Intrinsic' - }, - '4503' => { - 'BaseType' => '4515', - 'Header' => 'gnutls.h', - 'Line' => '1653', - 'Name' => 'gnutls_log_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4515' => { - 'Name' => 'void(*)(int, char const*)', - 'Param' => { - '0' => { - 'type' => '75' - }, - '1' => { - 'type' => '110' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4537' => { - 'BaseType' => '4549', - 'Header' => 'gnutls.h', - 'Line' => '1654', - 'Name' => 'gnutls_audit_log_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4549' => { - 'Name' => 'void(*)(gnutls_session_t, char const*)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '110' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4607' => { - 'Header' => 'gnutls.h', - 'Line' => '1695', - 'Memb' => { - '0' => { - 'name' => 'iov_base', - 'offset' => '0', - 'type' => '211' - }, - '1' => { - 'name' => 'iov_len', - 'offset' => '8', - 'type' => '52' - } - }, - 'Name' => 'struct giovec_t', - 'Size' => '16', - 'Type' => 'Struct' - }, - '4619' => { - 'BaseType' => '4607', - 'Name' => 'giovec_t const', - 'Size' => '16', - 'Type' => 'Const' - }, - '4624' => { - 'BaseType' => '4636', - 'Header' => 'gnutls.h', - 'Line' => '1697', - 'Name' => 'gnutls_pull_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4636' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '3086' - }, - '1' => { - 'type' => '211' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '241', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4667' => { - 'BaseType' => '4679', - 'Header' => 'gnutls.h', - 'Line' => '1699', - 'Name' => 'gnutls_push_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4679' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, void const*, size_t)', - 'Param' => { - '0' => { - 'type' => '3086' - }, - '1' => { - 'type' => '318' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '241', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4710' => { - 'BaseType' => '4722', - 'Header' => 'gnutls.h', - 'Line' => '1703', - 'Name' => 'gnutls_pull_timeout_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4722' => { - 'Name' => 'int(*)(gnutls_transport_ptr_t, unsigned int)', - 'Param' => { - '0' => { - 'type' => '3086' - }, - '1' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '47403' => { - 'BaseType' => '2441', - 'Name' => 'gnutls_compression_method_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '4748' => { - 'BaseType' => '4760', - 'Header' => 'gnutls.h', - 'Line' => '1706', - 'Name' => 'gnutls_vec_push_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4760' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, giovec_t const*, int)', - 'Param' => { - '0' => { - 'type' => '3086' - }, - '1' => { - 'type' => '4791' - }, - '2' => { - 'type' => '75' - } - }, - 'Return' => '241', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4791' => { - 'BaseType' => '4619', - 'Name' => 'giovec_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4797' => { - 'BaseType' => '4809', - 'Header' => 'gnutls.h', - 'Line' => '1709', - 'Name' => 'gnutls_errno_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4809' => { - 'Name' => 'int(*)(gnutls_transport_ptr_t)', - 'Param' => { - '0' => { - 'type' => '3086' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '485763' => { - 'BaseType' => '2982', - 'Name' => 'gnutls_ecc_curve_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '488340' => { - 'BaseType' => '2391', - 'Name' => 'gnutls_digest_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '494654' => { - 'Header' => 'gnutls.h', - 'Line' => '533', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CERT_IGNORE', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CERT_REQUEST', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_CERT_REQUIRE', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_certificate_request_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '4950' => { - 'Header' => 'gnutls_str.h', - 'Line' => '44', - 'Memb' => { - '0' => { - 'name' => 'allocd', - 'offset' => '0', - 'type' => '7703' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '7703' - }, - '2' => { - 'name' => 'max_length', - 'offset' => '16', - 'type' => '52' - }, - '3' => { - 'name' => 'length', - 'offset' => '24', - 'type' => '52' - } - }, - 'Name' => 'struct gnutls_buffer_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '497796' => { - 'Header' => 'gnutls.h', - 'Line' => '1964', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SAN_DNSNAME', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_SAN_RFC822NAME', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_SAN_URI', - 'value' => '3' - }, - '3' => { - 'name' => 'GNUTLS_SAN_IPADDRESS', - 'value' => '4' - }, - '4' => { - 'name' => 'GNUTLS_SAN_OTHERNAME', - 'value' => '5' - }, - '5' => { - 'name' => 'GNUTLS_SAN_DN', - 'value' => '6' - }, - '6' => { - 'name' => 'GNUTLS_SAN_OTHERNAME_XMPP', - 'value' => '1000' - } - }, - 'Name' => 'enum gnutls_x509_subject_alt_name_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '497857' => { - 'BaseType' => '497796', - 'Header' => 'gnutls.h', - 'Line' => '1975', - 'Name' => 'gnutls_x509_subject_alt_name_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '5011' => { - 'BaseType' => '211', - 'Header' => 'gnutls.h', - 'Line' => '2305', - 'Name' => 'gnutls_ext_priv_data_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5023' => { - 'BaseType' => '159', - 'Name' => 'unsigned char const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5029' => { - 'BaseType' => '5041', - 'Header' => 'openpgp.h', - 'Line' => '317', - 'Name' => 'gnutls_openpgp_recv_key_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5041' => { - 'Name' => 'int(*)(gnutls_session_t, unsigned char const*, unsigned int, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '5023' - }, - '2' => { - 'type' => '145' - }, - '3' => { - 'type' => '4233' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '506868' => { - 'Line' => '44', - 'Memb' => { - '0' => { - 'name' => 'trusted_cas', - 'offset' => '0', - 'type' => '146359' - }, - '1' => { - 'name' => 'trusted_ca_size', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'named_certs', - 'offset' => '16', - 'type' => '2009316' - }, - '3' => { - 'name' => 'named_cert_size', - 'offset' => '24', - 'type' => '145' - }, - '4' => { - 'name' => 'crls', - 'offset' => '32', - 'type' => '756477' - }, - '5' => { - 'name' => 'crl_size', - 'offset' => '40', - 'type' => '145' - } - }, - 'Name' => 'struct node_st', - 'PrivateABI' => 1, - 'Size' => '48', - 'Source' => 'verify-high.c', - 'Type' => 'Struct' - }, - '506873' => { - 'BaseType' => '506868', - 'Name' => 'struct node_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5077' => { - 'Header' => 'abstract.h', - 'Line' => '450', - 'Memb' => { - '0' => { - 'name' => 'pubkey', - 'offset' => '0', - 'type' => '4199' - }, - '1' => { - 'name' => 'cert', - 'offset' => '8', - 'type' => '3632' - }, - '2' => { - 'name' => 'type', - 'offset' => '24', - 'type' => '2712' - } - }, - 'Name' => 'struct gnutls_pcert_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '510458' => { - 'BaseType' => '2149', - 'Name' => 'gnutls_kx_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '510627' => { - 'BaseType' => '145078', - 'Name' => 'gnutls_certificate_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5130' => { - 'BaseType' => '5077', - 'Header' => 'abstract.h', - 'Line' => '454', - 'Name' => 'gnutls_pcert_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '5142' => { - 'BaseType' => '5130', - 'Name' => 'gnutls_pcert_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '516940' => { - 'BaseType' => '20081', - 'Header' => 'gnutls.h', - 'Line' => '1621', - 'Name' => 'mutex_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '516979' => { - 'BaseType' => '20081', - 'Header' => 'gnutls.h', - 'Line' => '1622', - 'Name' => 'mutex_lock_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '516991' => { - 'BaseType' => '20081', - 'Header' => 'gnutls.h', - 'Line' => '1623', - 'Name' => 'mutex_unlock_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '517003' => { - 'BaseType' => '20081', - 'Header' => 'gnutls.h', - 'Line' => '1624', - 'Name' => 'mutex_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '52' => { - 'BaseType' => '68', - 'Header' => 'stddef.h', - 'Line' => '216', - 'Name' => 'size_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5396' => { - 'Header' => 'gnutls_int.h', - 'Line' => '146', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_STREAM', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_DGRAM', - 'value' => '1' - } - }, - 'Name' => 'enum transport_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '5425' => { - 'BaseType' => '5396', - 'Header' => 'gnutls_int.h', - 'Line' => '149', - 'Name' => 'transport_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '5436' => { - 'Header' => 'gnutls_int.h', - 'Line' => '151', - 'Memb' => { - '0' => { - 'name' => 'RECORD_FLUSH', - 'value' => '0' - }, - '1' => { - 'name' => 'RECORD_CORKED', - 'value' => '1' - } - }, - 'Name' => 'enum record_flush_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '5465' => { - 'BaseType' => '5436', - 'Header' => 'gnutls_int.h', - 'Line' => '154', - 'Name' => 'record_flush_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '5476' => { - 'BaseType' => '5487', - 'Header' => 'crypto.h', - 'Line' => '142', - 'Name' => 'gnutls_cipher_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5487' => { - 'Name' => 'int(*)(gnutls_cipher_algorithm_t, void**, int)', - 'Param' => { - '0' => { - 'type' => '2029' - }, - '1' => { - 'type' => '4278' - }, - '2' => { - 'type' => '75' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5518' => { - 'BaseType' => '5529', - 'Header' => 'crypto.h', - 'Line' => '143', - 'Name' => 'gnutls_cipher_setkey_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5529' => { - 'Name' => 'int(*)(void*, void const*, size_t)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '318' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '555892' => { - 'BaseType' => '555904', - 'Header' => 'gnutls.h', - 'Line' => '1408', - 'Name' => 'gnutls_anon_server_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '555904' => { - 'BaseType' => '555910', - 'Name' => 'struct gnutls_anon_server_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '555910' => { - 'Header' => 'anon.h', - 'Line' => '27', - 'Memb' => { - '0' => { - 'name' => 'dh_params', - 'offset' => '0', - 'type' => '3185' - }, - '1' => { - 'name' => 'params_func', - 'offset' => '8', - 'type' => '155577' - } - }, - 'Name' => 'struct gnutls_anon_server_credentials_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '555947' => { - 'BaseType' => '555964', - 'Header' => 'gnutls.h', - 'Line' => '1410', - 'Name' => 'gnutls_anon_client_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '555964' => { - 'BaseType' => '555970', - 'Name' => 'struct gnutls_anon_client_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '555970' => { - 'Header' => 'anon.h', - 'Line' => '35', - 'Memb' => { - '0' => { - 'name' => 'dummy', - 'offset' => '0', - 'type' => '75' - } - }, - 'Name' => 'struct gnutls_anon_client_credentials_st', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Struct' - }, - '5560' => { - 'BaseType' => '5529', - 'Header' => 'crypto.h', - 'Line' => '145', - 'Name' => 'gnutls_cipher_setiv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5571' => { - 'BaseType' => '5582', - 'Header' => 'crypto.h', - 'Line' => '146', - 'Name' => 'gnutls_cipher_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5582' => { - 'Name' => 'int(*)(void*, void const*, size_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '318' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '211' - }, - '4' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5623' => { - 'BaseType' => '5582', - 'Header' => 'crypto.h', - 'Line' => '148', - 'Name' => 'gnutls_cipher_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '564749' => { - 'BaseType' => '555947', - 'Name' => 'gnutls_anon_client_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '564865' => { - 'BaseType' => '555892', - 'Name' => 'gnutls_anon_server_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5656' => { - 'Name' => 'void(*)(void*, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '211' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5683' => { - 'BaseType' => '5694', - 'Header' => 'crypto.h', - 'Line' => '155', - 'Name' => 'gnutls_cipher_aead_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5694' => { - 'Name' => 'int(*)(void*, void const*, size_t, void const*, size_t, size_t, void const*, size_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '318' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '318' - }, - '4' => { - 'type' => '52' - }, - '5' => { - 'type' => '52' - }, - '6' => { - 'type' => '318' - }, - '7' => { - 'type' => '52' - }, - '8' => { - 'type' => '211' - }, - '9' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5760' => { - 'BaseType' => '5694', - 'Header' => 'crypto.h', - 'Line' => '161', - 'Name' => 'gnutls_cipher_aead_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5771' => { - 'BaseType' => '4367', - 'Header' => 'crypto.h', - 'Line' => '167', - 'Name' => 'gnutls_cipher_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5782' => { - 'BaseType' => '5793', - 'Header' => 'crypto.h', - 'Line' => '188', - 'Name' => 'gnutls_mac_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5793' => { - 'Name' => 'int(*)(gnutls_mac_algorithm_t, void**)', - 'Param' => { - '0' => { - 'type' => '2305' - }, - '1' => { - 'type' => '4278' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5819' => { - 'BaseType' => '5529', - 'Header' => 'crypto.h', - 'Line' => '189', - 'Name' => 'gnutls_mac_setkey_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5830' => { - 'BaseType' => '5529', - 'Header' => 'crypto.h', - 'Line' => '190', - 'Name' => 'gnutls_mac_setnonce_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5841' => { - 'BaseType' => '5529', - 'Header' => 'crypto.h', - 'Line' => '191', - 'Name' => 'gnutls_mac_hash_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5852' => { - 'BaseType' => '5863', - 'Header' => 'crypto.h', - 'Line' => '192', - 'Name' => 'gnutls_mac_output_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '585919' => { - 'Header' => 'gnutls.h', - 'Line' => '1769', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_RANDOM_ART_OPENSSH', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_random_art', - 'Size' => '4', - 'Type' => 'Enum' - }, - '585943' => { - 'BaseType' => '585919', - 'Header' => 'gnutls.h', - 'Line' => '1771', - 'Name' => 'gnutls_random_art_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '586075' => { - 'BaseType' => '586087', - 'Header' => 'gnutls.h', - 'Line' => '1876', - 'Name' => 'gnutls_psk_server_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '586087' => { - 'BaseType' => '586093', - 'Name' => 'struct gnutls_psk_server_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '586093' => { - 'Header' => 'psk.h', - 'Line' => '35', - 'Memb' => { - '0' => { - 'name' => 'password_file', - 'offset' => '0', - 'type' => '235' - }, - '1' => { - 'name' => 'pwd_callback', - 'offset' => '8', - 'type' => '595167' - }, - '2' => { - 'name' => 'dh_params', - 'offset' => '16', - 'type' => '3185' - }, - '3' => { - 'name' => 'params_func', - 'offset' => '24', - 'type' => '155577' - }, - '4' => { - 'name' => 'hint', - 'offset' => '32', - 'type' => '235' - } - }, - 'Name' => 'struct gnutls_psk_server_credentials_st', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '586166' => { - 'BaseType' => '586178', - 'Header' => 'gnutls.h', - 'Line' => '1917', - 'Name' => 'gnutls_psk_server_credentials_function', - 'Type' => 'Typedef' - }, - '586178' => { - 'Name' => 'int()(gnutls_session_t, char const*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '3098' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '4233' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '5863' => { - 'Name' => 'int(*)(void*, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '211' - }, - '1' => { - 'type' => '211' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5894' => { - 'BaseType' => '4367', - 'Header' => 'crypto.h', - 'Line' => '193', - 'Name' => 'gnutls_mac_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5905' => { - 'BaseType' => '5916', - 'Header' => 'crypto.h', - 'Line' => '194', - 'Name' => 'gnutls_mac_fast_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5916' => { - 'Name' => 'int(*)(gnutls_mac_algorithm_t, void const*, size_t, void const*, size_t, void const*, size_t, void*)', - 'Param' => { - '0' => { - 'type' => '2305' - }, - '1' => { - 'type' => '318' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '318' - }, - '4' => { - 'type' => '52' - }, - '5' => { - 'type' => '318' - }, - '6' => { - 'type' => '52' - }, - '7' => { - 'type' => '211' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '595167' => { - 'BaseType' => '586166', - 'Name' => 'gnutls_psk_server_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5972' => { - 'BaseType' => '5983', - 'Header' => 'crypto.h', - 'Line' => '209', - 'Name' => 'gnutls_digest_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5983' => { - 'Name' => 'int(*)(gnutls_digest_algorithm_t, void**)', - 'Param' => { - '0' => { - 'type' => '2391' - }, - '1' => { - 'type' => '4278' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '6009' => { - 'BaseType' => '5529', - 'Header' => 'crypto.h', - 'Line' => '210', - 'Name' => 'gnutls_digest_hash_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6020' => { - 'BaseType' => '5863', - 'Header' => 'crypto.h', - 'Line' => '211', - 'Name' => 'gnutls_digest_output_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6031' => { - 'BaseType' => '4367', - 'Header' => 'crypto.h', - 'Line' => '212', - 'Name' => 'gnutls_digest_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '60337' => { - 'BaseType' => '47403', - 'Name' => 'gnutls_compression_method_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '6042' => { - 'BaseType' => '6053', - 'Header' => 'crypto.h', - 'Line' => '213', - 'Name' => 'gnutls_digest_fast_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6053' => { - 'Name' => 'int(*)(gnutls_digest_algorithm_t, void const*, size_t, void*)', - 'Param' => { - '0' => { - 'type' => '2391' - }, - '1' => { - 'type' => '318' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '211' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '625528' => { - 'BaseType' => '2920', - 'Name' => 'gnutls_sign_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '642961' => { - 'Header' => 'gnutls.h', - 'Line' => '353', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_AL_WARNING', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_AL_FATAL', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_alert_level_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '643167' => { - 'Header' => 'gnutls.h', - 'Line' => '426', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_A_CLOSE_NOTIFY', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_A_UNEXPECTED_MESSAGE', - 'value' => '10' - }, - '10' => { - 'name' => 'GNUTLS_A_CERTIFICATE_REVOKED', - 'value' => '44' - }, - '11' => { - 'name' => 'GNUTLS_A_CERTIFICATE_EXPIRED', - 'value' => '45' - }, - '12' => { - 'name' => 'GNUTLS_A_CERTIFICATE_UNKNOWN', - 'value' => '46' - }, - '13' => { - 'name' => 'GNUTLS_A_ILLEGAL_PARAMETER', - 'value' => '47' - }, - '14' => { - 'name' => 'GNUTLS_A_UNKNOWN_CA', - 'value' => '48' - }, - '15' => { - 'name' => 'GNUTLS_A_ACCESS_DENIED', - 'value' => '49' - }, - '16' => { - 'name' => 'GNUTLS_A_DECODE_ERROR', - 'value' => '50' - }, - '17' => { - 'name' => 'GNUTLS_A_DECRYPT_ERROR', - 'value' => '51' - }, - '18' => { - 'name' => 'GNUTLS_A_EXPORT_RESTRICTION', - 'value' => '60' - }, - '19' => { - 'name' => 'GNUTLS_A_PROTOCOL_VERSION', - 'value' => '70' - }, - '2' => { - 'name' => 'GNUTLS_A_BAD_RECORD_MAC', - 'value' => '20' - }, - '20' => { - 'name' => 'GNUTLS_A_INSUFFICIENT_SECURITY', - 'value' => '71' - }, - '21' => { - 'name' => 'GNUTLS_A_INTERNAL_ERROR', - 'value' => '80' - }, - '22' => { - 'name' => 'GNUTLS_A_INAPPROPRIATE_FALLBACK', - 'value' => '86' - }, - '23' => { - 'name' => 'GNUTLS_A_USER_CANCELED', - 'value' => '90' - }, - '24' => { - 'name' => 'GNUTLS_A_NO_RENEGOTIATION', - 'value' => '100' - }, - '25' => { - 'name' => 'GNUTLS_A_UNSUPPORTED_EXTENSION', - 'value' => '110' - }, - '26' => { - 'name' => 'GNUTLS_A_CERTIFICATE_UNOBTAINABLE', - 'value' => '111' - }, - '27' => { - 'name' => 'GNUTLS_A_UNRECOGNIZED_NAME', - 'value' => '112' - }, - '28' => { - 'name' => 'GNUTLS_A_UNKNOWN_PSK_IDENTITY', - 'value' => '115' - }, - '29' => { - 'name' => 'GNUTLS_A_NO_APPLICATION_PROTOCOL', - 'value' => '120' - }, - '3' => { - 'name' => 'GNUTLS_A_DECRYPTION_FAILED', - 'value' => '21' - }, - '4' => { - 'name' => 'GNUTLS_A_RECORD_OVERFLOW', - 'value' => '22' - }, - '5' => { - 'name' => 'GNUTLS_A_DECOMPRESSION_FAILURE', - 'value' => '30' - }, - '6' => { - 'name' => 'GNUTLS_A_HANDSHAKE_FAILURE', - 'value' => '40' - }, - '7' => { - 'name' => 'GNUTLS_A_SSL3_NO_CERTIFICATE', - 'value' => '41' - }, - '8' => { - 'name' => 'GNUTLS_A_BAD_CERTIFICATE', - 'value' => '42' - }, - '9' => { - 'name' => 'GNUTLS_A_UNSUPPORTED_CERTIFICATE', - 'value' => '43' - } - }, - 'Name' => 'enum gnutls_alert_description_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '6512' => { - 'BaseType' => '211', - 'Header' => 'crypto-backend.h', - 'Line' => '84', - 'Name' => 'bigint_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '654667' => { - 'BaseType' => '211', - 'Name' => 'void*const', - 'Size' => '8', - 'Type' => 'Const' - }, - '659961' => { - 'BaseType' => '659972', - 'Header' => 'pkcs11.h', - 'Line' => '56', - 'Name' => 'gnutls_pkcs11_token_callback_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '659972' => { - 'Name' => 'int(*)(void*const, char const*const, unsigned int)', - 'Param' => { - '0' => { - 'type' => '654667' - }, - '1' => { - 'type' => '116' - }, - '2' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '68' => { - 'Name' => 'unsigned long', - 'Size' => '8', - 'Type' => 'Intrinsic' - }, - '706' => { - 'Header' => 'libio.h', - 'Line' => '150', - 'Name' => '_IO_lock_t', - 'Type' => 'Typedef' - }, - '713' => { - 'Header' => 'libio.h', - 'Line' => '156', - 'Memb' => { - '0' => { - 'name' => '_next', - 'offset' => '0', - 'type' => '762' - }, - '1' => { - 'name' => '_sbuf', - 'offset' => '8', - 'type' => '768' - }, - '2' => { - 'name' => '_pos', - 'offset' => '16', - 'type' => '75' - } - }, - 'Name' => 'struct _IO_marker', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '713478' => { - 'Header' => 'gnutls.h', - 'Line' => '545', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_OPENPGP_CERT', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_OPENPGP_CERT_FINGERPRINT', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_openpgp_crt_status_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '714025' => { - 'Header' => 'gnutls.h', - 'Line' => '774', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CB_TLS_UNIQUE', - 'value' => '0' - } - }, - 'Name' => 'enum gnutls_channel_binding_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '7280' => { - 'BaseType' => '52', - 'Name' => 'size_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '734443' => { - 'BaseType' => '3098', - 'Name' => 'gnutls_session_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7360' => { - 'BaseType' => '6512', - 'Name' => 'bigint_t[16]', - 'Size' => '128', - 'Type' => 'Array' - }, - '7376' => { - 'Header' => 'crypto-backend.h', - 'Line' => '177', - 'Memb' => { - '0' => { - 'name' => 'params', - 'offset' => '0', - 'type' => '7360' - }, - '1' => { - 'name' => 'params_nr', - 'offset' => '128', - 'type' => '145' - }, - '2' => { - 'name' => 'flags', - 'offset' => '132', - 'type' => '145' - }, - '3' => { - 'name' => 'algo', - 'offset' => '136', - 'type' => '2768' - } - }, - 'Name' => 'struct gnutls_pk_params_st', - 'PrivateABI' => 1, - 'Size' => '144', - 'Type' => 'Struct' - }, - '7409' => { - 'Header' => 'gnutls_int.h', - 'Line' => '222', - 'Memb' => { - '0' => { - 'name' => 'STATE0', - 'value' => '0' - }, - '1' => { - 'name' => 'STATE1', - 'value' => '1' - }, - '10' => { - 'name' => 'STATE10', - 'value' => '10' - }, - '11' => { - 'name' => 'STATE11', - 'value' => '11' - }, - '12' => { - 'name' => 'STATE12', - 'value' => '12' - }, - '13' => { - 'name' => 'STATE13', - 'value' => '13' - }, - '14' => { - 'name' => 'STATE14', - 'value' => '14' - }, - '15' => { - 'name' => 'STATE15', - 'value' => '15' - }, - '16' => { - 'name' => 'STATE16', - 'value' => '16' - }, - '17' => { - 'name' => 'STATE17', - 'value' => '17' - }, - '18' => { - 'name' => 'STATE18', - 'value' => '18' - }, - '19' => { - 'name' => 'STATE20', - 'value' => '20' - }, - '2' => { - 'name' => 'STATE2', - 'value' => '2' - }, - '20' => { - 'name' => 'STATE21', - 'value' => '21' - }, - '21' => { - 'name' => 'STATE22', - 'value' => '22' - }, - '22' => { - 'name' => 'STATE30', - 'value' => '30' - }, - '23' => { - 'name' => 'STATE31', - 'value' => '31' - }, - '24' => { - 'name' => 'STATE40', - 'value' => '40' - }, - '25' => { - 'name' => 'STATE41', - 'value' => '41' - }, - '26' => { - 'name' => 'STATE50', - 'value' => '50' - }, - '27' => { - 'name' => 'STATE60', - 'value' => '60' - }, - '28' => { - 'name' => 'STATE61', - 'value' => '61' - }, - '29' => { - 'name' => 'STATE62', - 'value' => '62' - }, - '3' => { - 'name' => 'STATE3', - 'value' => '3' - }, - '4' => { - 'name' => 'STATE4', - 'value' => '4' - }, - '5' => { - 'name' => 'STATE5', - 'value' => '5' - }, - '6' => { - 'name' => 'STATE6', - 'value' => '6' - }, - '7' => { - 'name' => 'STATE7', - 'value' => '7' - }, - '8' => { - 'name' => 'STATE8', - 'value' => '8' - }, - '9' => { - 'name' => 'STATE9', - 'value' => '9' - } - }, - 'Name' => 'enum handshake_state_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '742906' => { - 'BaseType' => '742918', - 'Header' => 'gnutls.h', - 'Line' => '1385', - 'Name' => 'gnutls_x509_crl_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '742918' => { - 'BaseType' => '742924', - 'Name' => 'struct gnutls_x509_crl_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '742924' => { - 'Header' => 'x509_int.h', - 'Line' => '51', - 'Memb' => { - '0' => { - 'name' => 'crl', - 'offset' => '0', - 'type' => '9632' - }, - '1' => { - 'name' => 'expanded', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'rcache', - 'offset' => '16', - 'type' => '9632' - }, - '3' => { - 'name' => 'rcache_idx', - 'offset' => '24', - 'type' => '145' - }, - '4' => { - 'name' => 'use_extensions', - 'offset' => '28', - 'type' => '75' - }, - '5' => { - 'name' => 'der', - 'offset' => '32', - 'type' => '3632' - }, - '6' => { - 'name' => 'raw_issuer_dn', - 'offset' => '48', - 'type' => '3632' - } - }, - 'Name' => 'struct gnutls_x509_crl_int', - 'PrivateABI' => 1, - 'Size' => '64', - 'Type' => 'Struct' - }, - '75' => { - 'Name' => 'int', - 'Size' => '4', - 'Type' => 'Intrinsic' - }, - '754035' => { - 'BaseType' => '754046', - 'Header' => 'pkcs12.h', - 'Line' => '37', - 'Name' => 'gnutls_pkcs12_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '754046' => { - 'BaseType' => '754052', - 'Name' => 'struct gnutls_pkcs12_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '754052' => { - 'Header' => 'x509_int.h', - 'Line' => '333', - 'Memb' => { - '0' => { - 'name' => 'pkcs12', - 'offset' => '0', - 'type' => '9632' - }, - '1' => { - 'name' => 'expanded', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_pkcs12_int', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '754444' => { - 'BaseType' => '754455', - 'Header' => 'ocsp.h', - 'Line' => '192', - 'Name' => 'gnutls_ocsp_resp_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '754455' => { - 'BaseType' => '754461', - 'Name' => 'struct gnutls_ocsp_resp_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '754461' => { - 'Line' => '41', - 'Memb' => { - '0' => { - 'name' => 'resp', - 'offset' => '0', - 'type' => '9632' - }, - '1' => { - 'name' => 'response_type_oid', - 'offset' => '8', - 'type' => '3632' - }, - '2' => { - 'name' => 'basicresp', - 'offset' => '24', - 'type' => '9632' - }, - '3' => { - 'name' => 'der', - 'offset' => '32', - 'type' => '3632' - }, - '4' => { - 'name' => 'init', - 'offset' => '48', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_ocsp_resp_int', - 'PrivateABI' => 1, - 'Size' => '56', - 'Source' => 'ocsp.c', - 'Type' => 'Struct' - }, - '754626' => { - 'BaseType' => '754637', - 'Header' => 'urls.h', - 'Line' => '40', - 'Name' => 'gnutls_privkey_import_url_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '754637' => { - 'Name' => 'int(*)(gnutls_privkey_t, char const*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '144851' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '754668' => { - 'BaseType' => '754679', - 'Header' => 'urls.h', - 'Line' => '43', - 'Name' => 'gnutls_x509_crt_import_url_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '754679' => { - 'Name' => 'int(*)(gnutls_x509_crt_t, char const*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '144886' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '754710' => { - 'BaseType' => '754721', - 'Header' => 'urls.h', - 'Line' => '49', - 'Name' => 'gnutls_pubkey_import_url_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '754721' => { - 'Name' => 'int(*)(gnutls_pubkey_t, char const*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '4199' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '754752' => { - 'BaseType' => '754763', - 'Header' => 'urls.h', - 'Line' => '56', - 'Name' => 'gnutls_get_raw_issuer_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '754763' => { - 'Name' => 'int(*)(char const*, gnutls_x509_crt_t, gnutls_datum_t*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '110' - }, - '1' => { - 'type' => '144886' - }, - '2' => { - 'type' => '4233' - }, - '3' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '754799' => { - 'Header' => 'urls.h', - 'Line' => '59', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'name_size', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'import_key', - 'offset' => '16', - 'type' => '754626' - }, - '3' => { - 'name' => 'import_crt', - 'offset' => '24', - 'type' => '754668' - }, - '4' => { - 'name' => 'import_pubkey', - 'offset' => '32', - 'type' => '754710' - }, - '5' => { - 'name' => 'get_issuer', - 'offset' => '40', - 'type' => '754752' - }, - '6' => { - 'name' => 'future1', - 'offset' => '48', - 'type' => '211' - }, - '7' => { - 'name' => 'future2', - 'offset' => '56', - 'type' => '211' - } - }, - 'Name' => 'struct gnutls_custom_url_st', - 'Size' => '64', - 'Type' => 'Struct' - }, - '754908' => { - 'BaseType' => '754799', - 'Header' => 'urls.h', - 'Line' => '68', - 'Name' => 'gnutls_custom_url_st', - 'Size' => '64', - 'Type' => 'Typedef' - }, - '754919' => { - 'BaseType' => '754908', - 'Name' => 'gnutls_custom_url_st[]', - 'Size' => '8', - 'Type' => 'Array' - }, - '756477' => { - 'BaseType' => '742906', - 'Name' => 'gnutls_x509_crl_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '758030' => { - 'BaseType' => '147012', - 'Name' => 'gnutls_x509_trust_list_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '759949' => { - 'BaseType' => '146359', - 'Name' => 'gnutls_x509_crt_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '760115' => { - 'BaseType' => '144874', - 'Name' => 'gnutls_x509_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7606' => { - 'BaseType' => '7409', - 'Header' => 'gnutls_int.h', - 'Line' => '229', - 'Name' => 'handshake_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '7617' => { - 'Header' => 'gnutls_int.h', - 'Line' => '231', - 'Memb' => { - '0' => { - 'name' => 'SHB_SEND1', - 'value' => '0' - }, - '1' => { - 'name' => 'SHB_SEND2', - 'value' => '1' - }, - '2' => { - 'name' => 'SHB_RECV', - 'value' => '2' - } - }, - 'Name' => 'enum heartbeat_state_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '762' => { - 'BaseType' => '713', - 'Name' => 'struct _IO_marker*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7652' => { - 'BaseType' => '7617', - 'Header' => 'gnutls_int.h', - 'Line' => '235', - 'Name' => 'heartbeat_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '7663' => { - 'Header' => 'gnutls_int.h', - 'Line' => '237', - 'Memb' => { - '0' => { - 'name' => 'RECV_STATE_0', - 'value' => '0' - }, - '1' => { - 'name' => 'RECV_STATE_DTLS_RETRANSMIT', - 'value' => '1' - } - }, - 'Name' => 'enum recv_state_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '768' => { - 'BaseType' => '325', - 'Name' => 'struct _IO_FILE*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7692' => { - 'BaseType' => '7663', - 'Header' => 'gnutls_int.h', - 'Line' => '240', - 'Name' => 'recv_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '7703' => { - 'BaseType' => '946', - 'Name' => 'uint8_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7709' => { - 'BaseType' => '4950', - 'Header' => 'gnutls_str.h', - 'Line' => '49', - 'Name' => 'gnutls_buffer_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '774' => { - 'BaseType' => '121', - 'Name' => 'char[1]', - 'Size' => '1', - 'Type' => 'Array' - }, - '7797' => { - 'Header' => 'gnutls_int.h', - 'Line' => '270', - 'Memb' => { - '0' => { - 'name' => 'CIPHER_STREAM', - 'value' => '0' - }, - '1' => { - 'name' => 'CIPHER_BLOCK', - 'value' => '1' - }, - '2' => { - 'name' => 'CIPHER_AEAD', - 'value' => '2' - } - }, - 'Name' => 'enum cipher_type_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '7809' => { - 'Header' => 'gnutls_int.h', - 'Line' => '276', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CHANGE_CIPHER_SPEC', - 'value' => '20' - }, - '1' => { - 'name' => 'GNUTLS_ALERT', - 'value' => '21' - }, - '2' => { - 'name' => 'GNUTLS_HANDSHAKE', - 'value' => '22' - }, - '3' => { - 'name' => 'GNUTLS_APPLICATION_DATA', - 'value' => '23' - }, - '4' => { - 'name' => 'GNUTLS_HEARTBEAT', - 'value' => '24' - } - }, - 'Name' => 'enum content_type_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '7857' => { - 'BaseType' => '7809', - 'Header' => 'gnutls_int.h', - 'Line' => '280', - 'Name' => 'content_type_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '788535' => { - 'Header' => 'gnutls.h', - 'Line' => '1097', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SUPPLEMENTAL_UNKNOWN', - 'value' => '0' - } - }, - 'Name' => 'enum gnutls_supplemental_data_format_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '78919' => { - 'Header' => 'crypto.h', - 'Line' => '128', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_RND_NONCE', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_RND_RANDOM', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_RND_KEY', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_rnd_level', - 'Size' => '4', - 'Type' => 'Enum' - }, - '78954' => { - 'BaseType' => '78919', - 'Header' => 'crypto.h', - 'Line' => '132', - 'Name' => 'gnutls_rnd_level_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '789786' => { - 'BaseType' => '20877', - 'Header' => 'gnutls.h', - 'Line' => '2359', - 'Name' => 'gnutls_supp_recv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '789798' => { - 'BaseType' => '20926', - 'Header' => 'gnutls.h', - 'Line' => '2361', - 'Name' => 'gnutls_supp_send_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '790' => { - 'BaseType' => '706', - 'Name' => '_IO_lock_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '796' => { - 'BaseType' => '121', - 'Name' => 'char[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '7983' => { - 'BaseType' => '946', - 'Name' => 'uint8_t[12]', - 'Size' => '12', - 'Type' => 'Array' - }, - '7999' => { - 'Header' => 'gnutls_int.h', - 'Line' => '310', - 'Memb' => { - '0' => { - 'name' => 'htype', - 'offset' => '0', - 'type' => '2564' - }, - '1' => { - 'name' => 'length', - 'offset' => '4', - 'type' => '968' - }, - '2' => { - 'name' => 'sequence', - 'offset' => '8', - 'type' => '957' - }, - '3' => { - 'name' => 'start_offset', - 'offset' => '12', - 'type' => '968' - }, - '4' => { - 'name' => 'end_offset', - 'offset' => '16', - 'type' => '968' - }, - '5' => { - 'name' => 'header', - 'offset' => '20', - 'type' => '7983' - }, - '6' => { - 'name' => 'header_size', - 'offset' => '32', - 'type' => '75' - }, - '7' => { - 'name' => 'data', - 'offset' => '40', - 'type' => '7709' - } - }, - 'Name' => 'struct handshake_buffer_st', - 'PrivateABI' => 1, - 'Size' => '72', - 'Type' => 'Struct' - }, - '8011' => { - 'BaseType' => '3708', - 'Header' => 'gnutls_int.h', - 'Line' => '351', - 'Name' => 'mbuffer_st', - 'Size' => '80', - 'Type' => 'Typedef' - }, - '8023' => { - 'Header' => 'gnutls_int.h', - 'Line' => '353', - 'Memb' => { - '0' => { - 'name' => 'head', - 'offset' => '0', - 'type' => '8089' - }, - '1' => { - 'name' => 'tail', - 'offset' => '8', - 'type' => '8089' - }, - '2' => { - 'name' => 'length', - 'offset' => '16', - 'type' => '145' - }, - '3' => { - 'name' => 'byte_length', - 'offset' => '24', - 'type' => '52' - } - }, - 'Name' => 'struct mbuffer_head_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '8089' => { - 'BaseType' => '8011', - 'Name' => 'mbuffer_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8095' => { - 'BaseType' => '8023', - 'Header' => 'gnutls_int.h', - 'Line' => '359', - 'Name' => 'mbuffer_head_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '8107' => { - 'Header' => 'gnutls_int.h', - 'Line' => '364', - 'Memb' => { - '0' => { - 'name' => 'algorithm', - 'offset' => '0', - 'type' => '2203' - }, - '1' => { - 'name' => 'credentials', - 'offset' => '8', - 'type' => '211' - }, - '2' => { - 'name' => 'next', - 'offset' => '16', - 'type' => '8500' - } - }, - 'Name' => 'struct auth_cred_st', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '8166' => { - 'BaseType' => '8107', - 'Header' => 'gnutls_int.h', - 'Line' => '371', - 'Name' => 'auth_cred_st', - 'Size' => '24', - 'Type' => 'Typedef' - }, - '8178' => { - 'Header' => 'gnutls_int.h', - 'Line' => '373', - 'Memb' => { - '0' => { - 'name' => 'ecdh_params', - 'offset' => '0', - 'type' => '7376' - }, - '1' => { - 'name' => 'ecdh_x', - 'offset' => '144', - 'type' => '6512' - }, - '10' => { - 'name' => 'B', - 'offset' => '360', - 'type' => '6512' - }, - '11' => { - 'name' => 'u', - 'offset' => '368', - 'type' => '6512' - }, - '12' => { - 'name' => 'b', - 'offset' => '376', - 'type' => '6512' - }, - '13' => { - 'name' => 'a', - 'offset' => '384', - 'type' => '6512' - }, - '14' => { - 'name' => 'x', - 'offset' => '392', - 'type' => '6512' - }, - '15' => { - 'name' => 'rsa', - 'offset' => '400', - 'type' => '8484' - }, - '16' => { - 'name' => 'auth_info', - 'offset' => '416', - 'type' => '211' - }, - '17' => { - 'name' => 'auth_info_type', - 'offset' => '424', - 'type' => '2203' - }, - '18' => { - 'name' => 'auth_info_size', - 'offset' => '428', - 'type' => '75' - }, - '19' => { - 'name' => 'crypt_algo', - 'offset' => '432', - 'type' => '946' - }, - '2' => { - 'name' => 'ecdh_y', - 'offset' => '152', - 'type' => '6512' - }, - '20' => { - 'name' => 'cred', - 'offset' => '440', - 'type' => '8500' - }, - '21' => { - 'name' => 'crt_requested', - 'offset' => '448', - 'type' => '75' - }, - '3' => { - 'name' => 'key', - 'offset' => '160', - 'type' => '3632' - }, - '4' => { - 'name' => 'dh_params', - 'offset' => '176', - 'type' => '7376' - }, - '5' => { - 'name' => 'client_Y', - 'offset' => '320', - 'type' => '6512' - }, - '6' => { - 'name' => 'srp_key', - 'offset' => '328', - 'type' => '6512' - }, - '7' => { - 'name' => 'srp_g', - 'offset' => '336', - 'type' => '6512' - }, - '8' => { - 'name' => 'srp_p', - 'offset' => '344', - 'type' => '6512' - }, - '9' => { - 'name' => 'A', - 'offset' => '352', - 'type' => '6512' - } - }, - 'Name' => 'struct gnutls_key_st', - 'PrivateABI' => 1, - 'Size' => '456', - 'Type' => 'Struct' - }, - '818721' => { - 'BaseType' => '830601', - 'Header' => 'crypto.h', - 'Line' => '32', - 'Name' => 'gnutls_cipher_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '818738' => { - 'Line' => '33', - 'Memb' => { - '0' => { - 'name' => 'ctx_enc', - 'offset' => '0', - 'type' => '9947' - }, - '1' => { - 'name' => 'ctx_dec', - 'offset' => '80', - 'type' => '9947' - } - }, - 'Name' => 'struct api_cipher_hd_st', - 'PrivateABI' => 1, - 'Size' => '160', - 'Source' => 'crypto-api.c', - 'Type' => 'Struct' - }, - '818775' => { - 'BaseType' => '826562', - 'Header' => 'crypto.h', - 'Line' => '65', - 'Name' => 'gnutls_aead_cipher_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '818792' => { - 'Line' => '622', - 'Memb' => { - '0' => { - 'name' => 'ctx_enc', - 'offset' => '0', - 'type' => '9947' - } - }, - 'Name' => 'struct api_aead_cipher_hd_st', - 'PrivateABI' => 1, - 'Size' => '80', - 'Source' => 'crypto-api.c', - 'Type' => 'Struct' - }, - '818819' => { - 'BaseType' => '818830', - 'Header' => 'crypto.h', - 'Line' => '89', - 'Name' => 'gnutls_hash_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '818830' => { - 'BaseType' => '818836', - 'Name' => 'struct hash_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '818836' => { - 'Name' => 'struct hash_hd_st', - 'PrivateABI' => 1, - 'Type' => 'Struct' - }, - '818841' => { - 'BaseType' => '818852', - 'Header' => 'crypto.h', - 'Line' => '90', - 'Name' => 'gnutls_hmac_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '818852' => { - 'BaseType' => '818858', - 'Name' => 'struct hmac_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '818858' => { - 'Name' => 'struct hmac_hd_st', - 'PrivateABI' => 1, - 'Type' => 'Struct' - }, - '826427' => { - 'BaseType' => '818738', - 'Line' => '36', - 'Name' => 'api_cipher_hd_st', - 'Size' => '160', - 'Source' => 'crypto-api.c', - 'Type' => 'Typedef' - }, - '826438' => { - 'BaseType' => '818792', - 'Line' => '624', - 'Name' => 'api_aead_cipher_hd_st', - 'Size' => '80', - 'Source' => 'crypto-api.c', - 'Type' => 'Typedef' - }, - '826562' => { - 'BaseType' => '826438', - 'Name' => 'api_aead_cipher_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '828214' => { - 'BaseType' => '818775', - 'Name' => 'gnutls_aead_cipher_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '829346' => { - 'BaseType' => '818819', - 'Name' => 'gnutls_hash_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '830406' => { - 'BaseType' => '818841', - 'Name' => 'gnutls_hmac_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '830601' => { - 'BaseType' => '826427', - 'Name' => 'api_cipher_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '832873' => { - 'BaseType' => '818721', - 'Name' => 'gnutls_cipher_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '839770' => { - 'Header' => 'openpgp.h', - 'Line' => '49', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_OPENPGP_FMT_RAW', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_OPENPGP_FMT_BASE64', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_openpgp_crt_fmt', - 'Size' => '4', - 'Type' => 'Enum' - }, - '839799' => { - 'BaseType' => '839770', - 'Header' => 'openpgp.h', - 'Line' => '52', - 'Name' => 'gnutls_openpgp_crt_fmt_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '8484' => { - 'BaseType' => '6512', - 'Name' => 'bigint_t[2]', - 'Size' => '16', - 'Type' => 'Array' - }, - '8500' => { - 'BaseType' => '8166', - 'Name' => 'auth_cred_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8506' => { - 'BaseType' => '8178', - 'Header' => 'gnutls_int.h', - 'Line' => '424', - 'Name' => 'gnutls_key_st', - 'Size' => '456', - 'Type' => 'Typedef' - }, - '8518' => { - 'BaseType' => '8530', - 'Header' => 'gnutls_int.h', - 'Line' => '432', - 'Name' => 'record_state_st', - 'Size' => '224', - 'Type' => 'Typedef' - }, - '852159' => { - 'BaseType' => '146185', - 'Name' => 'gnutls_openpgp_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8530' => { - 'Header' => 'gnutls_int.h', - 'Line' => '589', - 'Memb' => { - '0' => { - 'name' => 'mac_secret', - 'offset' => '0', - 'type' => '3632' - }, - '1' => { - 'name' => 'IV', - 'offset' => '16', - 'type' => '3632' - }, - '2' => { - 'name' => 'key', - 'offset' => '32', - 'type' => '3632' - }, - '3' => { - 'name' => 'cipher_state', - 'offset' => '48', - 'type' => '10094' - }, - '4' => { - 'name' => 'compression_state', - 'offset' => '200', - 'type' => '10142' - }, - '5' => { - 'name' => 'sequence_number', - 'offset' => '216', - 'type' => '1803' - } - }, - 'Name' => 'struct record_state_st', - 'PrivateABI' => 1, - 'Size' => '224', - 'Type' => 'Struct' - }, - '855298' => { - 'BaseType' => '146252', - 'Name' => 'gnutls_pkcs11_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8621' => { - 'BaseType' => '8633', - 'Header' => 'gnutls_int.h', - 'Line' => '435', - 'Name' => 'record_parameters_st', - 'Size' => '1016', - 'Type' => 'Typedef' - }, - '8633' => { - 'Header' => 'gnutls_int.h', - 'Line' => '607', - 'Memb' => { - '0' => { - 'name' => 'epoch', - 'offset' => '0', - 'type' => '957' - }, - '1' => { - 'name' => 'initialized', - 'offset' => '4', - 'type' => '75' - }, - '10' => { - 'name' => 'write', - 'offset' => '784', - 'type' => '8518' - }, - '11' => { - 'name' => 'usage_cnt', - 'offset' => '1008', - 'type' => '75' - }, - '2' => { - 'name' => 'compression_algorithm', - 'offset' => '8', - 'type' => '2441' - }, - '3' => { - 'name' => 'cipher', - 'offset' => '16', - 'type' => '9941' - }, - '4' => { - 'name' => 'etm', - 'offset' => '24', - 'type' => '8952' - }, - '5' => { - 'name' => 'mac', - 'offset' => '32', - 'type' => '9497' - }, - '6' => { - 'name' => 'record_sw', - 'offset' => '40', - 'type' => '10554' - }, - '7' => { - 'name' => 'record_sw_head_idx', - 'offset' => '552', - 'type' => '145' - }, - '8' => { - 'name' => 'record_sw_size', - 'offset' => '556', - 'type' => '145' - }, - '9' => { - 'name' => 'read', - 'offset' => '560', - 'type' => '8518' - } - }, - 'Name' => 'struct record_parameters_st', - 'PrivateABI' => 1, - 'Size' => '1016', - 'Type' => 'Struct' - }, - '873738' => { - 'BaseType' => '146118', - 'Name' => 'gnutls_openpgp_crt_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8809' => { - 'Header' => 'gnutls_int.h', - 'Line' => '438', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'id', - 'offset' => '8', - 'type' => '2029' - }, - '2' => { - 'name' => 'blocksize', - 'offset' => '12', - 'type' => '957' - }, - '3' => { - 'name' => 'keysize', - 'offset' => '14', - 'type' => '957' - }, - '4' => { - 'name' => 'type', - 'offset' => '16', - 'type' => '7797' - }, - '5' => { - 'name' => 'implicit_iv', - 'offset' => '20', - 'type' => '957' - }, - '6' => { - 'name' => 'explicit_iv', - 'offset' => '22', - 'type' => '957' - }, - '7' => { - 'name' => 'cipher_iv', - 'offset' => '24', - 'type' => '957' - }, - '8' => { - 'name' => 'tagsize', - 'offset' => '26', - 'type' => '957' - }, - '9' => { - 'name' => 'xor_nonce', - 'offset' => '28', - 'type' => '8952' - } - }, - 'Name' => 'struct cipher_entry_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '882186' => { - 'BaseType' => '882198', - 'Header' => 'gnutls.h', - 'Line' => '1391', - 'Name' => 'gnutls_x509_crq_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '882198' => { - 'BaseType' => '882204', - 'Name' => 'struct gnutls_x509_crq_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '882204' => { - 'Header' => 'x509_int.h', - 'Line' => '88', - 'Memb' => { - '0' => { - 'name' => 'crq', - 'offset' => '0', - 'type' => '9632' - } - }, - 'Name' => 'struct gnutls_x509_crq_int', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '883485' => { - 'BaseType' => '883496', - 'Header' => 'pkcs11.h', - 'Line' => '63', - 'Name' => 'gnutls_pkcs11_obj_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '883496' => { - 'BaseType' => '883502', - 'Name' => 'struct gnutls_pkcs11_obj_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '883502' => { - 'Header' => 'pkcs11_int.h', - 'Line' => '46', - 'Memb' => { - '0' => { - 'name' => 'raw', - 'offset' => '0', - 'type' => '3632' - }, - '1' => { - 'name' => 'type', - 'offset' => '16', - 'type' => '883691' - }, - '2' => { - 'name' => 'class', - 'offset' => '24', - 'type' => '892285' - }, - '3' => { - 'name' => 'flags', - 'offset' => '32', - 'type' => '145' - }, - '4' => { - 'name' => 'info', - 'offset' => '40', - 'type' => '892313' - }, - '5' => { - 'name' => 'pubkey', - 'offset' => '48', - 'type' => '892319' - }, - '6' => { - 'name' => 'pubkey_size', - 'offset' => '112', - 'type' => '145' - }, - '7' => { - 'name' => 'pk_algorithm', - 'offset' => '116', - 'type' => '2768' - }, - '8' => { - 'name' => 'key_usage', - 'offset' => '120', - 'type' => '145' - }, - '9' => { - 'name' => 'pin', - 'offset' => '128', - 'type' => '150955' - } - }, - 'Name' => 'struct gnutls_pkcs11_obj_st', - 'PrivateABI' => 1, - 'Size' => '144', - 'Type' => 'Struct' - }, - '883691' => { - 'Header' => 'pkcs11.h', - 'Line' => '347', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_OBJ_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_OBJ_X509_CRT', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_OBJ_PUBKEY', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PKCS11_OBJ_PRIVKEY', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_PKCS11_OBJ_SECRET_KEY', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_PKCS11_OBJ_DATA', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_PKCS11_OBJ_X509_CRT_EXTENSION', - 'value' => '6' - } - }, - 'Name' => 'enum gnutls_pkcs11_obj_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '892285' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '311', - 'Name' => 'ck_object_class_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '892308' => { - 'Name' => 'struct p11_kit_uri', - 'PrivateABI' => 1, - 'Type' => 'Struct' - }, - '892313' => { - 'BaseType' => '892308', - 'Name' => 'struct p11_kit_uri*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '892319' => { - 'BaseType' => '3632', - 'Name' => 'gnutls_datum_t[4]', - 'Size' => '64', - 'Type' => 'Array' - }, - '8952' => { - 'Name' => '_Bool', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '8959' => { - 'BaseType' => '8809', - 'Header' => 'gnutls_int.h', - 'Line' => '449', - 'Name' => 'cipher_entry_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '8971' => { - 'BaseType' => '8959', - 'Name' => 'cipher_entry_st const', - 'Size' => '32', - 'Type' => 'Const' - }, - '8976' => { - 'Header' => 'gnutls_int.h', - 'Line' => '466', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'oid', - 'offset' => '8', - 'type' => '110' - }, - '2' => { - 'name' => 'mac_oid', - 'offset' => '16', - 'type' => '110' - }, - '3' => { - 'name' => 'id', - 'offset' => '24', - 'type' => '2305' - }, - '4' => { - 'name' => 'output_size', - 'offset' => '28', - 'type' => '145' - }, - '5' => { - 'name' => 'key_size', - 'offset' => '32', - 'type' => '145' - }, - '6' => { - 'name' => 'nonce_size', - 'offset' => '36', - 'type' => '145' - }, - '7' => { - 'name' => 'placeholder', - 'offset' => '40', - 'type' => '145' - }, - '8' => { - 'name' => 'secure', - 'offset' => '44', - 'type' => '145' - }, - '9' => { - 'name' => 'block_size', - 'offset' => '48', - 'type' => '145' - } - }, - 'Name' => 'struct mac_entry_st', - 'PrivateABI' => 1, - 'Size' => '56', - 'Type' => 'Struct' - }, - '905354' => { - 'BaseType' => '4199', - 'Name' => 'gnutls_pubkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '9119' => { - 'BaseType' => '8976', - 'Header' => 'gnutls_int.h', - 'Line' => '477', - 'Name' => 'mac_entry_st', - 'Size' => '56', - 'Type' => 'Typedef' - }, - '9131' => { - 'BaseType' => '9119', - 'Name' => 'mac_entry_st const', - 'Size' => '56', - 'Type' => 'Const' - }, - '926902' => { - 'Header' => 'dtls.h', - 'Line' => '67', - 'Memb' => { - '0' => { - 'name' => 'record_seq', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'hsk_read_seq', - 'offset' => '4', - 'type' => '145' - }, - '2' => { - 'name' => 'hsk_write_seq', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_dtls_prestate_st', - 'Size' => '12', - 'Type' => 'Struct' - }, - '9301' => { - 'Header' => 'gnutls_int.h', - 'Line' => '492', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'id', - 'offset' => '8', - 'type' => '2662' - }, - '10' => { - 'name' => 'selectable_prf', - 'offset' => '28', - 'type' => '8952' - }, - '11' => { - 'name' => 'obsolete', - 'offset' => '29', - 'type' => '8952' - }, - '2' => { - 'name' => 'age', - 'offset' => '12', - 'type' => '145' - }, - '3' => { - 'name' => 'major', - 'offset' => '16', - 'type' => '946' - }, - '4' => { - 'name' => 'minor', - 'offset' => '17', - 'type' => '946' - }, - '5' => { - 'name' => 'transport', - 'offset' => '20', - 'type' => '5425' - }, - '6' => { - 'name' => 'supported', - 'offset' => '24', - 'type' => '8952' - }, - '7' => { - 'name' => 'explicit_iv', - 'offset' => '25', - 'type' => '8952' - }, - '8' => { - 'name' => 'extensions', - 'offset' => '26', - 'type' => '8952' - }, - '9' => { - 'name' => 'selectable_sighash', - 'offset' => '27', - 'type' => '8952' - } - }, - 'Name' => 'struct version_entry_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '9313' => { - 'BaseType' => '9301', - 'Name' => 'version_entry_st const', - 'Size' => '32', - 'Type' => 'Const' - }, - '934890' => { - 'BaseType' => '926902', - 'Name' => 'gnutls_dtls_prestate_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '9362' => { - 'BaseType' => '5529', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '39', - 'Name' => 'hash_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9373' => { - 'BaseType' => '5529', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '40', - 'Name' => 'nonce_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9384' => { - 'BaseType' => '5863', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '41', - 'Name' => 'output_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9395' => { - 'BaseType' => '4367', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '43', - 'Name' => 'hash_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '946' => { - 'BaseType' => '152', - 'Header' => 'stdint.h', - 'Line' => '48', - 'Name' => 'uint8_t', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '9497' => { - 'BaseType' => '9131', - 'Name' => 'mac_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '9503' => { - 'Header' => 'gnutls_hash_int.h', - 'Line' => '55', - 'Memb' => { - '0' => { - 'name' => 'e', - 'offset' => '0', - 'type' => '9497' - }, - '1' => { - 'name' => 'hash', - 'offset' => '8', - 'type' => '9362' - }, - '2' => { - 'name' => 'output', - 'offset' => '16', - 'type' => '9384' - }, - '3' => { - 'name' => 'deinit', - 'offset' => '24', - 'type' => '9395' - }, - '4' => { - 'name' => 'key', - 'offset' => '32', - 'type' => '318' - }, - '5' => { - 'name' => 'keysize', - 'offset' => '40', - 'type' => '75' - }, - '6' => { - 'name' => 'handle', - 'offset' => '48', - 'type' => '211' - } - }, - 'Name' => 'struct digest_hd_st', - 'PrivateABI' => 1, - 'Size' => '56', - 'Type' => 'Struct' - }, - '957' => { - 'BaseType' => '103', - 'Header' => 'stdint.h', - 'Line' => '49', - 'Name' => 'uint16_t', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '9605' => { - 'Header' => 'gnutls_hash_int.h', - 'Line' => '67', - 'Memb' => { - '0' => { - 'name' => 'e', - 'offset' => '0', - 'type' => '9497' - }, - '1' => { - 'name' => 'mac_len', - 'offset' => '8', - 'type' => '75' - }, - '2' => { - 'name' => 'hash', - 'offset' => '16', - 'type' => '9362' - }, - '3' => { - 'name' => 'setnonce', - 'offset' => '24', - 'type' => '9373' - }, - '4' => { - 'name' => 'output', - 'offset' => '32', - 'type' => '9384' - }, - '5' => { - 'name' => 'deinit', - 'offset' => '40', - 'type' => '9395' - }, - '6' => { - 'name' => 'handle', - 'offset' => '48', - 'type' => '211' - } - }, - 'Name' => 'struct mac_hd_st', - 'PrivateABI' => 1, - 'Size' => '56', - 'Type' => 'Struct' - }, - '9616' => { - 'BaseType' => '9627', - 'Header' => 'libtasn1.h', - 'Line' => '128', - 'Name' => 'asn1_node_st', - 'Type' => 'Typedef' - }, - '9627' => { - 'Name' => 'struct asn1_node_st', - 'PrivateABI' => 1, - 'Type' => 'Struct' - }, - '9632' => { - 'BaseType' => '9643', - 'Header' => 'libtasn1.h', - 'Line' => '130', - 'Name' => 'asn1_node', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9643' => { - 'BaseType' => '9616', - 'Name' => 'asn1_node_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '968' => { - 'BaseType' => '145', - 'Header' => 'stdint.h', - 'Line' => '51', - 'Name' => 'uint32_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '9726' => { - 'BaseType' => '5582', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '33', - 'Name' => 'cipher_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9737' => { - 'BaseType' => '5582', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '35', - 'Name' => 'cipher_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9748' => { - 'BaseType' => '5694', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '37', - 'Name' => 'aead_cipher_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9759' => { - 'BaseType' => '5694', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '43', - 'Name' => 'aead_cipher_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9770' => { - 'BaseType' => '4367', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '49', - 'Name' => 'cipher_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9781' => { - 'BaseType' => '5529', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '51', - 'Name' => 'cipher_auth_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '979' => { - 'BaseType' => '68', - 'Header' => 'stdint.h', - 'Line' => '55', - 'Name' => 'uint64_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9792' => { - 'BaseType' => '5529', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '52', - 'Name' => 'cipher_setiv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '979641' => { - 'BaseType' => '979653', - 'Header' => 'gnutls.h', - 'Line' => '2161', - 'Name' => 'gnutls_tdb_store_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '979653' => { - 'Name' => 'int(*)(char const*, char const*, char const*, time_t, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '110' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '110' - }, - '3' => { - 'type' => '252' - }, - '4' => { - 'type' => '4175' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '979694' => { - 'BaseType' => '979706', - 'Header' => 'gnutls.h', - 'Line' => '2167', - 'Name' => 'gnutls_tdb_store_commitment_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '979706' => { - 'Name' => 'int(*)(char const*, char const*, char const*, time_t, gnutls_digest_algorithm_t, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '110' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '110' - }, - '3' => { - 'type' => '252' - }, - '4' => { - 'type' => '2391' - }, - '5' => { - 'type' => '4175' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '979752' => { - 'BaseType' => '979764', - 'Header' => 'gnutls.h', - 'Line' => '2178', - 'Name' => 'gnutls_tdb_verify_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '979764' => { - 'Name' => 'int(*)(char const*, char const*, char const*, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '110' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '110' - }, - '3' => { - 'type' => '4175' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '979800' => { - 'BaseType' => '979812', - 'Header' => 'gnutls.h', - 'Line' => '2185', - 'Name' => 'gnutls_tdb_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '979812' => { - 'BaseType' => '979818', - 'Name' => 'struct gnutls_tdb_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '979818' => { - 'Line' => '38', - 'Memb' => { - '0' => { - 'name' => 'store', - 'offset' => '0', - 'type' => '979641' - }, - '1' => { - 'name' => 'cstore', - 'offset' => '8', - 'type' => '979694' - }, - '2' => { - 'name' => 'verify', - 'offset' => '16', - 'type' => '979752' - } - }, - 'Name' => 'struct gnutls_tdb_int', - 'PrivateABI' => 1, - 'Size' => '24', - 'Source' => 'verify-tofu.c', - 'Type' => 'Struct' - }, - '9803' => { - 'BaseType' => '5656', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '54', - 'Name' => 'cipher_tag_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '988668' => { - 'BaseType' => '979800', - 'Name' => 'gnutls_tdb_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '9941' => { - 'BaseType' => '8971', - 'Name' => 'cipher_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '9947' => { - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '67', - 'Memb' => { - '0' => { - 'name' => 'handle', - 'offset' => '0', - 'type' => '211' - }, - '1' => { - 'name' => 'e', - 'offset' => '8', - 'type' => '9941' - }, - '2' => { - 'name' => 'encrypt', - 'offset' => '16', - 'type' => '9726' - }, - '3' => { - 'name' => 'decrypt', - 'offset' => '24', - 'type' => '9737' - }, - '4' => { - 'name' => 'aead_encrypt', - 'offset' => '32', - 'type' => '9748' - }, - '5' => { - 'name' => 'aead_decrypt', - 'offset' => '40', - 'type' => '9759' - }, - '6' => { - 'name' => 'auth', - 'offset' => '48', - 'type' => '9781' - }, - '7' => { - 'name' => 'tag', - 'offset' => '56', - 'type' => '9803' - }, - '8' => { - 'name' => 'setiv', - 'offset' => '64', - 'type' => '9792' - }, - '9' => { - 'name' => 'deinit', - 'offset' => '72', - 'type' => '9770' - } - }, - 'Name' => 'struct cipher_hd_st', - 'PrivateABI' => 1, - 'Size' => '80', - 'Type' => 'Struct' - }, - '9958' => { - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '191', - 'Memb' => { - '0' => { - 'name' => 'dig', - 'offset' => '0', - 'type' => '9503' - }, - '1' => { - 'name' => 'mac', - 'offset' => '0', - 'type' => '9605' - } - }, - 'Name' => 'anon-union-gnutls_cipher_int.h-191', - 'PrivateABI' => 1, - 'Size' => '56', - 'Type' => 'Union' - } - }, - 'UndefinedSymbols' => { - 'libgnutls.so.30.7.0' => { - '_ITM_deregisterTMCloneTable' => 0, - '_ITM_registerTMCloneTable' => 0, - '_Jv_RegisterClasses' => 0, - '__assert_fail@GLIBC_2.2.5' => 0, - '__ctype_b_loc@GLIBC_2.3' => 0, - '__cxa_finalize@GLIBC_2.2.5' => 0, - '__errno_location@GLIBC_2.2.5' => 0, - '__fxstat@GLIBC_2.2.5' => 0, - '__getdelim@GLIBC_2.2.5' => 0, - '__gmon_start__' => 0, - '__gmpz_add' => 0, - '__gmpz_add_ui' => 0, - '__gmpz_cdiv_q' => 0, - '__gmpz_clear' => 0, - '__gmpz_cmp' => 0, - '__gmpz_cmp_ui' => 0, - '__gmpz_fdiv_r' => 0, - '__gmpz_init' => 0, - '__gmpz_invert' => 0, - '__gmpz_mod' => 0, - '__gmpz_mul' => 0, - '__gmpz_mul_ui' => 0, - '__gmpz_powm' => 0, - '__gmpz_probab_prime_p' => 0, - '__gmpz_set' => 0, - '__gmpz_set_ui' => 0, - '__gmpz_sizeinbase' => 0, - '__gmpz_sub' => 0, - '__gmpz_sub_ui' => 0, - '__rawmemchr@GLIBC_2.2.5' => 0, - '__register_atfork@GLIBC_2.3.2' => 0, - '__xstat@GLIBC_2.2.5' => 0, - 'abort@GLIBC_2.2.5' => 0, - 'asn1_array2tree@LIBTASN1_0_3' => 0, - 'asn1_check_version@LIBTASN1_0_3' => 0, - 'asn1_copy_node@LIBTASN1_0_3' => 0, - 'asn1_create_element@LIBTASN1_0_3' => 0, - 'asn1_decode_simple_ber@LIBTASN1_0_3' => 0, - 'asn1_decode_simple_der@LIBTASN1_0_3' => 0, - 'asn1_delete_structure2@LIBTASN1_0_3' => 0, - 'asn1_delete_structure@LIBTASN1_0_3' => 0, - 'asn1_der_coding@LIBTASN1_0_3' => 0, - 'asn1_der_decoding2@LIBTASN1_0_3' => 0, - 'asn1_der_decoding@LIBTASN1_0_3' => 0, - 'asn1_der_decoding_startEnd@LIBTASN1_0_3' => 0, - 'asn1_encode_simple_der@LIBTASN1_0_3' => 0, - 'asn1_find_node@LIBTASN1_0_3' => 0, - 'asn1_get_length_der@LIBTASN1_0_3' => 0, - 'asn1_get_tag_der@LIBTASN1_0_3' => 0, - 'asn1_length_der@LIBTASN1_0_3' => 0, - 'asn1_number_of_elements@LIBTASN1_0_3' => 0, - 'asn1_read_node_value@LIBTASN1_0_3' => 0, - 'asn1_read_value@LIBTASN1_0_3' => 0, - 'asn1_read_value_type@LIBTASN1_0_3' => 0, - 'asn1_write_value@LIBTASN1_0_3' => 0, - 'bindtextdomain@GLIBC_2.2.5' => 0, - 'calloc@GLIBC_2.2.5' => 0, - 'clock_gettime@GLIBC_2.17' => 0, - 'close@GLIBC_2.2.5' => 0, - 'closedir@GLIBC_2.2.5' => 0, - 'connect@GLIBC_2.2.5' => 0, - 'dcgettext@GLIBC_2.2.5' => 0, - 'deflate' => 0, - 'deflateEnd' => 0, - 'deflateInit2_' => 0, - 'dlclose' => 0, - 'dlopen' => 0, - 'dlsym' => 0, - 'fclose@GLIBC_2.2.5' => 0, - 'fcntl@GLIBC_2.2.5' => 0, - 'feof@GLIBC_2.2.5' => 0, - 'ferror@GLIBC_2.2.5' => 0, - 'fflush@GLIBC_2.2.5' => 0, - 'fgetc@GLIBC_2.2.5' => 0, - 'fgets@GLIBC_2.2.5' => 0, - 'fileno@GLIBC_2.2.5' => 0, - 'fopen@GLIBC_2.2.5' => 0, - 'fprintf@GLIBC_2.2.5' => 0, - 'fputs@GLIBC_2.2.5' => 0, - 'fread@GLIBC_2.2.5' => 0, - 'free@GLIBC_2.2.5' => 0, - 'fseek@GLIBC_2.2.5' => 0, - 'ftell@GLIBC_2.2.5' => 0, - 'ftello@GLIBC_2.2.5' => 0, - 'fwrite@GLIBC_2.2.5' => 0, - 'getpid@GLIBC_2.2.5' => 0, - 'getpwuid_r@GLIBC_2.2.5' => 0, - 'getrusage@GLIBC_2.2.5' => 0, - 'getuid@GLIBC_2.2.5' => 0, - 'gmtime_r@GLIBC_2.2.5' => 0, - 'iconv@GLIBC_2.2.5' => 0, - 'iconv_close@GLIBC_2.2.5' => 0, - 'iconv_open@GLIBC_2.2.5' => 0, - 'idn_free@LIBIDN_1.0' => 0, - 'idna_strerror@LIBIDN_1.0' => 0, - 'idna_to_ascii_8z@LIBIDN_1.0' => 0, - 'inet_aton@GLIBC_2.2.5' => 0, - 'inet_ntop@GLIBC_2.2.5' => 0, - 'inet_pton@GLIBC_2.2.5' => 0, - 'inflate' => 0, - 'inflateEnd' => 0, - 'inflateInit2_' => 0, - 'malloc@GLIBC_2.2.5' => 0, - 'memchr@GLIBC_2.2.5' => 0, - 'memcmp@GLIBC_2.2.5' => 0, - 'memcpy@GLIBC_2.14' => 0, - 'memmem@GLIBC_2.2.5' => 0, - 'memmove@GLIBC_2.2.5' => 0, - 'memset@GLIBC_2.2.5' => 0, - 'mkdir@GLIBC_2.2.5' => 0, - 'nanosleep@GLIBC_2.2.5' => 0, - 'nettle_aes128_decrypt@NETTLE_6' => 0, - 'nettle_aes128_encrypt@NETTLE_6' => 0, - 'nettle_aes128_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes128_set_encrypt_key@NETTLE_6' => 0, - 'nettle_aes192_decrypt@NETTLE_6' => 0, - 'nettle_aes192_encrypt@NETTLE_6' => 0, - 'nettle_aes192_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes192_set_encrypt_key@NETTLE_6' => 0, - 'nettle_aes256_decrypt@NETTLE_6' => 0, - 'nettle_aes256_encrypt@NETTLE_6' => 0, - 'nettle_aes256_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes256_set_encrypt_key@NETTLE_6' => 0, - 'nettle_aes_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes_set_encrypt_key@NETTLE_6' => 0, - 'nettle_arcfour128_set_key@NETTLE_6' => 0, - 'nettle_arcfour_crypt@NETTLE_6' => 0, - 'nettle_arcfour_set_key@NETTLE_6' => 0, - 'nettle_arctwo40_set_key@NETTLE_6' => 0, - 'nettle_arctwo_decrypt@NETTLE_6' => 0, - 'nettle_arctwo_encrypt@NETTLE_6' => 0, - 'nettle_camellia128_crypt@NETTLE_6' => 0, - 'nettle_camellia128_set_encrypt_key@NETTLE_6' => 0, - 'nettle_camellia192_set_decrypt_key@NETTLE_6' => 0, - 'nettle_camellia192_set_encrypt_key@NETTLE_6' => 0, - 'nettle_camellia256_crypt@NETTLE_6' => 0, - 'nettle_camellia256_set_decrypt_key@NETTLE_6' => 0, - 'nettle_camellia256_set_encrypt_key@NETTLE_6' => 0, - 'nettle_camellia_set_decrypt_key@NETTLE_6' => 0, - 'nettle_cbc_decrypt@NETTLE_6' => 0, - 'nettle_cbc_encrypt@NETTLE_6' => 0, - 'nettle_ccm_decrypt_message@NETTLE_6' => 0, - 'nettle_ccm_encrypt_message@NETTLE_6' => 0, - 'nettle_chacha_poly1305_decrypt@NETTLE_6' => 0, - 'nettle_chacha_poly1305_digest@NETTLE_6' => 0, - 'nettle_chacha_poly1305_encrypt@NETTLE_6' => 0, - 'nettle_chacha_poly1305_set_key@NETTLE_6' => 0, - 'nettle_chacha_poly1305_set_nonce@NETTLE_6' => 0, - 'nettle_chacha_poly1305_update@NETTLE_6' => 0, - 'nettle_des3_decrypt@NETTLE_6' => 0, - 'nettle_des3_encrypt@NETTLE_6' => 0, - 'nettle_des3_set_key@NETTLE_6' => 0, - 'nettle_des_decrypt@NETTLE_6' => 0, - 'nettle_des_encrypt@NETTLE_6' => 0, - 'nettle_des_set_key@NETTLE_6' => 0, - 'nettle_dsa_generate_params@HOGWEED_4' => 0, - 'nettle_dsa_params_clear@HOGWEED_4' => 0, - 'nettle_dsa_params_init@HOGWEED_4' => 0, - 'nettle_dsa_sign@HOGWEED_4' => 0, - 'nettle_dsa_signature_clear@HOGWEED_4' => 0, - 'nettle_dsa_signature_init@HOGWEED_4' => 0, - 'nettle_dsa_verify@HOGWEED_4' => 0, - 'nettle_ecc_point_clear@HOGWEED_4' => 0, - 'nettle_ecc_point_get@HOGWEED_4' => 0, - 'nettle_ecc_point_init@HOGWEED_4' => 0, - 'nettle_ecc_point_mul@HOGWEED_4' => 0, - 'nettle_ecc_point_mul_g@HOGWEED_4' => 0, - 'nettle_ecc_point_set@HOGWEED_4' => 0, - 'nettle_ecc_scalar_clear@HOGWEED_4' => 0, - 'nettle_ecc_scalar_get@HOGWEED_4' => 0, - 'nettle_ecc_scalar_init@HOGWEED_4' => 0, - 'nettle_ecc_scalar_set@HOGWEED_4' => 0, - 'nettle_ecc_size@HOGWEED_4' => 0, - 'nettle_ecc_size_a@HOGWEED_4' => 0, - 'nettle_ecdsa_generate_keypair@HOGWEED_4' => 0, - 'nettle_ecdsa_sign@HOGWEED_4' => 0, - 'nettle_ecdsa_verify@HOGWEED_4' => 0, - 'nettle_gcm_aes128_digest@NETTLE_6' => 0, - 'nettle_gcm_aes128_set_iv@NETTLE_6' => 0, - 'nettle_gcm_aes128_set_key@NETTLE_6' => 0, - 'nettle_gcm_aes128_update@NETTLE_6' => 0, - 'nettle_gcm_aes256_digest@NETTLE_6' => 0, - 'nettle_gcm_aes256_set_iv@NETTLE_6' => 0, - 'nettle_gcm_aes256_set_key@NETTLE_6' => 0, - 'nettle_gcm_aes256_update@NETTLE_6' => 0, - 'nettle_gcm_camellia128_digest@NETTLE_6' => 0, - 'nettle_gcm_camellia128_set_iv@NETTLE_6' => 0, - 'nettle_gcm_camellia128_set_key@NETTLE_6' => 0, - 'nettle_gcm_camellia128_update@NETTLE_6' => 0, - 'nettle_gcm_camellia256_digest@NETTLE_6' => 0, - 'nettle_gcm_camellia256_set_iv@NETTLE_6' => 0, - 'nettle_gcm_camellia256_set_key@NETTLE_6' => 0, - 'nettle_gcm_camellia256_update@NETTLE_6' => 0, - 'nettle_gcm_decrypt@NETTLE_6' => 0, - 'nettle_gcm_digest@NETTLE_6' => 0, - 'nettle_gcm_encrypt@NETTLE_6' => 0, - 'nettle_gcm_set_iv@NETTLE_6' => 0, - 'nettle_gcm_set_key@NETTLE_6' => 0, - 'nettle_gcm_update@NETTLE_6' => 0, - 'nettle_hmac_digest@NETTLE_6' => 0, - 'nettle_hmac_md5_digest@NETTLE_6' => 0, - 'nettle_hmac_md5_set_key@NETTLE_6' => 0, - 'nettle_hmac_md5_update@NETTLE_6' => 0, - 'nettle_hmac_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha1_digest@NETTLE_6' => 0, - 'nettle_hmac_sha1_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha1_update@NETTLE_6' => 0, - 'nettle_hmac_sha224_digest@NETTLE_6' => 0, - 'nettle_hmac_sha224_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha256_digest@NETTLE_6' => 0, - 'nettle_hmac_sha256_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha256_update@NETTLE_6' => 0, - 'nettle_hmac_sha384_digest@NETTLE_6' => 0, - 'nettle_hmac_sha384_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha512_digest@NETTLE_6' => 0, - 'nettle_hmac_sha512_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha512_update@NETTLE_6' => 0, - 'nettle_md2_digest@NETTLE_6' => 0, - 'nettle_md2_init@NETTLE_6' => 0, - 'nettle_md2_update@NETTLE_6' => 0, - 'nettle_md5_digest@NETTLE_6' => 0, - 'nettle_md5_init@NETTLE_6' => 0, - 'nettle_md5_update@NETTLE_6' => 0, - 'nettle_memxor@NETTLE_6' => 0, - 'nettle_mpz_get_str_256@HOGWEED_4' => 0, - 'nettle_mpz_random@HOGWEED_4' => 0, - 'nettle_mpz_random_size@HOGWEED_4' => 0, - 'nettle_mpz_set_str_256_s@HOGWEED_4' => 0, - 'nettle_mpz_set_str_256_u@HOGWEED_4' => 0, - 'nettle_mpz_sizeinbase_256_s@HOGWEED_4' => 0, - 'nettle_mpz_sizeinbase_256_u@HOGWEED_4' => 0, - 'nettle_pbkdf2_hmac_sha1@NETTLE_6' => 0, - 'nettle_pbkdf2_hmac_sha256@NETTLE_6' => 0, - 'nettle_rsa_decrypt_tr@HOGWEED_4' => 0, - 'nettle_rsa_encrypt@HOGWEED_4' => 0, - 'nettle_rsa_generate_keypair@HOGWEED_4' => 0, - 'nettle_rsa_pkcs1_sign_tr@HOGWEED_4' => 0, - 'nettle_rsa_pkcs1_verify@HOGWEED_4' => 0, - 'nettle_rsa_private_key_clear@HOGWEED_4' => 0, - 'nettle_rsa_private_key_init@HOGWEED_4' => 0, - 'nettle_rsa_private_key_prepare@HOGWEED_4' => 0, - 'nettle_rsa_public_key_clear@HOGWEED_4' => 0, - 'nettle_rsa_public_key_init@HOGWEED_4' => 0, - 'nettle_rsa_public_key_prepare@HOGWEED_4' => 0, - 'nettle_salsa20_256_set_key@NETTLE_6' => 0, - 'nettle_salsa20_crypt@NETTLE_6' => 0, - 'nettle_salsa20_set_key@NETTLE_6' => 0, - 'nettle_salsa20_set_nonce@NETTLE_6' => 0, - 'nettle_salsa20r12_crypt@NETTLE_6' => 0, - 'nettle_secp_192r1@HOGWEED_4' => 0, - 'nettle_secp_224r1@HOGWEED_4' => 0, - 'nettle_secp_256r1@HOGWEED_4' => 0, - 'nettle_secp_384r1@HOGWEED_4' => 0, - 'nettle_secp_521r1@HOGWEED_4' => 0, - 'nettle_sha1_digest@NETTLE_6' => 0, - 'nettle_sha1_init@NETTLE_6' => 0, - 'nettle_sha1_update@NETTLE_6' => 0, - 'nettle_sha224_digest@NETTLE_6' => 0, - 'nettle_sha224_init@NETTLE_6' => 0, - 'nettle_sha256_digest@NETTLE_6' => 0, - 'nettle_sha256_init@NETTLE_6' => 0, - 'nettle_sha256_update@NETTLE_6' => 0, - 'nettle_sha384_digest@NETTLE_6' => 0, - 'nettle_sha384_init@NETTLE_6' => 0, - 'nettle_sha512_digest@NETTLE_6' => 0, - 'nettle_sha512_init@NETTLE_6' => 0, - 'nettle_sha512_update@NETTLE_6' => 0, - 'nettle_umac128_digest@NETTLE_6' => 0, - 'nettle_umac128_set_key@NETTLE_6' => 0, - 'nettle_umac128_set_nonce@NETTLE_6' => 0, - 'nettle_umac128_update@NETTLE_6' => 0, - 'nettle_umac96_digest@NETTLE_6' => 0, - 'nettle_umac96_set_key@NETTLE_6' => 0, - 'nettle_umac96_set_nonce@NETTLE_6' => 0, - 'nettle_umac96_update@NETTLE_6' => 0, - 'nettle_yarrow256_init@NETTLE_6' => 0, - 'nettle_yarrow256_random@NETTLE_6' => 0, - 'nettle_yarrow256_slow_reseed@NETTLE_6' => 0, - 'nettle_yarrow256_update@NETTLE_6' => 0, - 'open@GLIBC_2.2.5' => 0, - 'opendir@GLIBC_2.2.5' => 0, - 'p11_kit_config_option' => 0, - 'p11_kit_message' => 0, - 'p11_kit_module_finalize' => 0, - 'p11_kit_module_get_flags' => 0, - 'p11_kit_module_get_name' => 0, - 'p11_kit_module_initialize' => 0, - 'p11_kit_module_load' => 0, - 'p11_kit_module_release' => 0, - 'p11_kit_modules_load_and_initialize' => 0, - 'p11_kit_pin_file_callback' => 0, - 'p11_kit_pin_get_length' => 0, - 'p11_kit_pin_get_value' => 0, - 'p11_kit_pin_new_for_string' => 0, - 'p11_kit_pin_register_callback' => 0, - 'p11_kit_pin_request' => 0, - 'p11_kit_pin_unref' => 0, - 'p11_kit_pin_unregister_callback' => 0, - 'p11_kit_space_strdup' => 0, - 'p11_kit_space_strlen' => 0, - 'p11_kit_strerror' => 0, - 'p11_kit_uri_format' => 0, - 'p11_kit_uri_free' => 0, - 'p11_kit_uri_get_attribute' => 0, - 'p11_kit_uri_get_attributes' => 0, - 'p11_kit_uri_get_module_info' => 0, - 'p11_kit_uri_get_pin_source' => 0, - 'p11_kit_uri_get_pin_value' => 0, - 'p11_kit_uri_get_token_info' => 0, - 'p11_kit_uri_match_module_info' => 0, - 'p11_kit_uri_match_token_info' => 0, - 'p11_kit_uri_new' => 0, - 'p11_kit_uri_parse' => 0, - 'p11_kit_uri_set_attribute' => 0, - 'pthread_mutex_destroy@GLIBC_2.2.5' => 0, - 'pthread_mutex_init@GLIBC_2.2.5' => 0, - 'pthread_mutex_lock@GLIBC_2.2.5' => 0, - 'pthread_mutex_unlock@GLIBC_2.2.5' => 0, - 'qsort@GLIBC_2.2.5' => 0, - 'read@GLIBC_2.2.5' => 0, - 'readdir_r@GLIBC_2.2.5' => 0, - 'realloc@GLIBC_2.2.5' => 0, - 'recv@GLIBC_2.2.5' => 0, - 'secure_getenv@GLIBC_2.17' => 0, - 'select@GLIBC_2.2.5' => 0, - 'sendmsg@GLIBC_2.2.5' => 0, - 'snprintf@GLIBC_2.2.5' => 0, - 'socket@GLIBC_2.2.5' => 0, - 'sprintf@GLIBC_2.2.5' => 0, - 'sscanf@GLIBC_2.2.5' => 0, - 'stderr@GLIBC_2.2.5' => 0, - 'strcasecmp@GLIBC_2.2.5' => 0, - 'strchr@GLIBC_2.2.5' => 0, - 'strcmp@GLIBC_2.2.5' => 0, - 'strdup@GLIBC_2.2.5' => 0, - 'strerror@GLIBC_2.2.5' => 0, - 'strftime@GLIBC_2.2.5' => 0, - 'strlen@GLIBC_2.2.5' => 0, - 'strncasecmp@GLIBC_2.2.5' => 0, - 'strncat@GLIBC_2.2.5' => 0, - 'strncmp@GLIBC_2.2.5' => 0, - 'strncpy@GLIBC_2.2.5' => 0, - 'strpbrk@GLIBC_2.2.5' => 0, - 'strrchr@GLIBC_2.2.5' => 0, - 'strstr@GLIBC_2.2.5' => 0, - 'strtol@GLIBC_2.2.5' => 0, - 'strtoul@GLIBC_2.2.5' => 0, - 'strverscmp@GLIBC_2.2.5' => 0, - 'time@GLIBC_2.2.5' => 0, - 'tmpfile@GLIBC_2.2.5' => 0, - 'vasprintf@GLIBC_2.2.5' => 0, - 'write@GLIBC_2.2.5' => 0, - 'writev@GLIBC_2.2.5' => 0 - } - }, - 'WordSize' => '8' - }; diff --git a/devel/ABI-3.5.8-x86_64.dump b/devel/ABI-3.5.8-x86_64.dump deleted file mode 100644 index 50bafe7e00..0000000000 --- a/devel/ABI-3.5.8-x86_64.dump +++ /dev/null @@ -1,44418 +0,0 @@ -$VAR1 = { - 'ABI_DUMPER_VERSION' => '0.99.16', - 'ABI_DUMP_VERSION' => '3.2', - 'Arch' => 'x86_64', - 'GccVersion' => '6.2.1', - 'Headers' => { - 'abstract.h' => 1, - 'crypto.h' => 1, - 'dtls.h' => 1, - 'gnutls.h' => 1, - 'ocsp.h' => 1, - 'openpgp.h' => 1, - 'pkcs11.h' => 1, - 'pkcs12.h' => 1, - 'pkcs7.h' => 1, - 'socket.h' => 1, - 'system-keys.h' => 1, - 'tpm.h' => 1, - 'urls.h' => 1, - 'x509-ext.h' => 1, - 'x509.h' => 1 - }, - 'Language' => 'C', - 'LibraryName' => 'libgnutls.so.30.13.1', - 'LibraryVersion' => '3.5.8', - 'NameSpaces' => {}, - 'Needed' => { - 'libc.so.6' => 1, - 'libdl.so.2' => 1, - 'libgmp.so.10' => 1, - 'libhogweed.so.4' => 1, - 'libidn.so.11' => 1, - 'libnettle.so.6' => 1, - 'libp11-kit.so.0' => 1, - 'libtasn1.so.6' => 1, - 'libunistring.so.0' => 1, - 'libz.so.1' => 1 - }, - 'PublicABI' => '1', - 'Sources' => { - 'alert.c' => 1, - 'alpn.c' => 1, - 'anon_cred.c' => 1, - 'auth.c' => 1, - 'auto-verify.c' => 1, - 'buffers.c' => 1, - 'cert-session.c' => 1, - 'cert.c' => 1, - 'certs.c' => 1, - 'ciphers.c' => 1, - 'ciphersuites.c' => 1, - 'common.c' => 1, - 'compress.c' => 1, - 'crl.c' => 1, - 'crl_write.c' => 1, - 'crq.c' => 1, - 'crypto-api.c' => 1, - 'crypto-backend.c' => 1, - 'db.c' => 1, - 'debug.c' => 1, - 'dh-primes.c' => 1, - 'dh-session.c' => 1, - 'dh.c' => 1, - 'dn.c' => 1, - 'dtls.c' => 1, - 'ecc.c' => 1, - 'email-verify.c' => 1, - 'errors.c' => 1, - 'etm.c' => 1, - 'ext_master_secret.c' => 1, - 'extensions.c' => 1, - 'extras.c' => 1, - 'fastopen.c' => 1, - 'file.c' => 1, - 'fingerprint.c' => 1, - 'fips.c' => 1, - 'global.c' => 1, - 'handshake.c' => 1, - 'heartbeat.c' => 1, - 'hostname-verify.c' => 1, - 'ip.c' => 1, - 'keys-dummy.c' => 1, - 'locks.c' => 1, - 'max_record.c' => 1, - 'mem.c' => 1, - 'name_constraints.c' => 1, - 'ocsp.c' => 1, - 'ocsp_output.c' => 1, - 'openpgp.c' => 1, - 'output.c' => 1, - 'pcert.c' => 1, - 'pgp.c' => 1, - 'pgpverify.c' => 1, - 'pin.c' => 1, - 'pk.c' => 1, - 'pkcs11.c' => 1, - 'pkcs11_privkey.c' => 1, - 'pkcs11_secret.c' => 1, - 'pkcs11_write.c' => 1, - 'pkcs11x.c' => 1, - 'pkcs12.c' => 1, - 'pkcs12_bag.c' => 1, - 'pkcs7-attrs.c' => 1, - 'pkcs7-crypt.c' => 1, - 'pkcs7-output.c' => 1, - 'pkcs7.c' => 1, - 'prf.c' => 1, - 'priority.c' => 1, - 'privkey.c' => 1, - 'privkey_openssl.c' => 1, - 'privkey_pkcs8.c' => 1, - 'privkey_raw.c' => 1, - 'psk.c' => 1, - 'pubkey.c' => 1, - 'publickey.c' => 1, - 'random.c' => 1, - 'randomart.c' => 1, - 'range.c' => 1, - 'record.c' => 1, - 'safe-memfuncs.c' => 1, - 'safe_renegotiation.c' => 1, - 'secparams.c' => 1, - 'server_name.c' => 1, - 'session.c' => 1, - 'session_pack.c' => 1, - 'session_ticket.c' => 1, - 'signature.c' => 1, - 'sockets.c' => 1, - 'srp.c' => 1, - 'srp_kx.c' => 1, - 'srp_sb64.c' => 1, - 'srtp.c' => 1, - 'state.c' => 1, - 'status_request.c' => 1, - 'str-unicode.c' => 1, - 'str.c' => 1, - 'supplemental.c' => 1, - 'system_override.c' => 1, - 'tls_features.c' => 1, - 'tpm.c' => 1, - 'urls.c' => 1, - 'verify-high.c' => 1, - 'verify-high2.c' => 1, - 'verify-tofu.c' => 1, - 'verify.c' => 1, - 'virt-san.c' => 1, - 'x509.c' => 1, - 'x509_b64.c' => 1, - 'x509_dn.c' => 1, - 'x509_ext.c' => 1, - 'x509_write.c' => 1 - }, - 'SymbolInfo' => { - '1008314' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_verify_params', - 'Source' => 'privkey.c', - 'SourceLine' => '1479' - }, - '1008658' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_status', - 'Source' => 'privkey.c', - 'SourceLine' => '1456' - }, - '1008722' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_privkey_set_flags', - 'Source' => 'privkey.c', - 'SourceLine' => '1433' - }, - '1010047' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'ciphertext', - 'type' => '4430' - }, - '3' => { - 'name' => 'plaintext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_decrypt_data', - 'Source' => 'privkey.c', - 'SourceLine' => '1245' - }, - '1011597' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'key', - 'type' => '1011939' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_openpgp', - 'Source' => 'privkey.c', - 'SourceLine' => '1022' - }, - '1011945' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '998610' - }, - '3' => { - 'name' => 'keyid', - 'type' => '5465' - }, - '4' => { - 'name' => 'password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_openpgp_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '963' - }, - '1012464' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'key', - 'type' => '158215' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_openpgp', - 'Source' => 'privkey.c', - 'SourceLine' => '900' - }, - '1013144' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'algo', - 'type' => '2916' - }, - '2' => { - 'name' => 'bits', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'data', - 'type' => '1013259' - }, - '5' => { - 'name' => 'data_size', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_generate2', - 'Source' => 'privkey.c', - 'SourceLine' => '853' - }, - '1013265' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'algo', - 'type' => '2916' - }, - '2' => { - 'name' => 'bits', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_generate', - 'Source' => 'privkey.c', - 'SourceLine' => '820' - }, - '1014275' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'userdata', - 'type' => '216' - }, - '2' => { - 'name' => 'sign_fn', - 'type' => '248357' - }, - '3' => { - 'name' => 'decrypt_fn', - 'type' => '248404' - }, - '4' => { - 'name' => 'deinit_fn', - 'type' => '248415' - }, - '5' => { - 'name' => 'info_fn', - 'type' => '248448' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_ext3', - 'Source' => 'privkey.c', - 'SourceLine' => '661' - }, - '1014767' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'pk', - 'type' => '2916' - }, - '2' => { - 'name' => 'userdata', - 'type' => '216' - }, - '3' => { - 'name' => 'sign_fn', - 'type' => '248357' - }, - '4' => { - 'name' => 'decrypt_fn', - 'type' => '248404' - }, - '5' => { - 'name' => 'deinit_fn', - 'type' => '248415' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_ext2', - 'Source' => 'privkey.c', - 'SourceLine' => '597' - }, - '1014893' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'pk', - 'type' => '2916' - }, - '2' => { - 'name' => 'userdata', - 'type' => '216' - }, - '3' => { - 'name' => 'sign_func', - 'type' => '248357' - }, - '4' => { - 'name' => 'decrypt_func', - 'type' => '248404' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_ext', - 'Source' => 'privkey.c', - 'SourceLine' => '558' - }, - '1015077' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'key', - 'type' => '1015419' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_pkcs11', - 'Source' => 'privkey.c', - 'SourceLine' => '506' - }, - '1015524' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'key', - 'type' => '158282' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_pkcs11', - 'Source' => 'privkey.c', - 'SourceLine' => '405' - }, - '1017555' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'digest', - 'type' => '2533' - }, - '2' => { - 'name' => 'seed', - 'type' => '334' - }, - '3' => { - 'name' => 'seed_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_verify_seed', - 'Source' => 'privkey.c', - 'SourceLine' => '102' - }, - '1017805' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'digest', - 'type' => '535126' - }, - '2' => { - 'name' => 'seed', - 'type' => '216' - }, - '3' => { - 'name' => 'seed_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_get_seed', - 'Source' => 'privkey.c', - 'SourceLine' => '80' - }, - '1018082' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '158343', - 'ShortName' => 'gnutls_privkey_get_type', - 'Source' => 'privkey.c', - 'SourceLine' => '59' - }, - '1019995' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158282' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_pkcs11_privkey_status', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '358' - }, - '1020007' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_privkey_set_flags', - 'Source' => 'privkey.c', - 'SourceLine' => '2128' - }, - '1020049' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '1015419' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_init', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '86' - }, - '1020061' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158282' - }, - '1' => { - 'name' => 'fn', - 'type' => '158609' - }, - '2' => { - 'name' => 'userdata', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_privkey_set_pin_function', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '1216' - }, - '1020073' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '158282' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_import_url', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '393' - }, - '1020085' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158282' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_privkey_deinit', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '132' - }, - '1020108' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'srk_password', - 'type' => '110' - }, - '3' => { - 'name' => 'key_password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_tpm_url', - 'Source' => 'tpm.c', - 'SourceLine' => '1014' - }, - '1020178' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'privkey', - 'type' => '156748' - }, - '1' => { - 'name' => 'fn', - 'type' => '158609' - }, - '2' => { - 'name' => 'userdata', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_privkey_set_pin_function', - 'Source' => 'privkey.c', - 'SourceLine' => '2108' - }, - '1020190' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import2', - 'Source' => 'privkey.c', - 'SourceLine' => '718' - }, - '1020373' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '1011939' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_init', - 'Source' => 'privkey.c', - 'SourceLine' => '44' - }, - '1020395' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_deinit', - 'Source' => 'privkey.c', - 'SourceLine' => '59' - }, - '1020444' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '998610' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_import', - 'Source' => 'privkey.c', - 'SourceLine' => '170' - }, - '1020455' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'keyid', - 'type' => '5465' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_set_preferred_key_id', - 'Source' => 'privkey.c', - 'SourceLine' => '1252' - }, - '1020501' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_preferred_key_id' - }, - '1020513' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'keyid', - 'type' => '5465' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_idx' - }, - '1020524' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'bits', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_pk_algorithm' - }, - '1020535' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'bits', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_privkey_get_pk_algorithm' - }, - '1020577' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '156748' - }, - '1' => { - 'name' => 'src', - 'type' => '156748' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_cpy', - 'Source' => 'privkey.c', - 'SourceLine' => '98' - }, - '1020620' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_get_pk_algorithm', - 'Source' => 'privkey.c', - 'SourceLine' => '1180' - }, - '1020696' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '158282' - }, - '1' => { - 'name' => 'src', - 'type' => '158282' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_cpy', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '120' - }, - '1020806' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pubkey_deinit', - 'Source' => 'pubkey.c', - 'SourceLine' => '134' - }, - '1020828' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158282' - }, - '1' => { - 'name' => 'bits', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_get_pk_algorithm', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '153' - }, - '1020871' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'digest', - 'type' => '2533' - }, - '2' => { - 'name' => 'seed', - 'type' => '334' - }, - '3' => { - 'name' => 'seed_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_verify_seed', - 'Source' => 'privkey.c', - 'SourceLine' => '1766' - }, - '1020911' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'digest', - 'type' => '535126' - }, - '2' => { - 'name' => 'seed', - 'type' => '216' - }, - '3' => { - 'name' => 'seed_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_get_seed', - 'Source' => 'privkey.c', - 'SourceLine' => '1613' - }, - '1021072' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'algo', - 'type' => '2916' - }, - '2' => { - 'name' => 'bits', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'data', - 'type' => '1013259' - }, - '5' => { - 'name' => 'data_size', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_privkey_generate2' - }, - '1036615' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5584' - }, - '1' => { - 'name' => 'crt', - 'type' => '1036973' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_export_openpgp', - 'Source' => 'pcert.c', - 'SourceLine' => '466' - }, - '1037358' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5584' - }, - '1' => { - 'name' => 'cert', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '998610' - }, - '3' => { - 'name' => 'keyid', - 'type' => '3881' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_import_openpgp_raw', - 'Source' => 'pcert.c', - 'SourceLine' => '365' - }, - '1038074' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5584' - }, - '1' => { - 'name' => 'crt', - 'type' => '158148' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_import_openpgp', - 'Source' => 'pcert.c', - 'SourceLine' => '290' - }, - '1038782' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5584' - }, - '1' => { - 'name' => 'cert', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_import_x509_raw', - 'Source' => 'pcert.c', - 'SourceLine' => '239' - }, - '1039377' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcerts', - 'type' => '5584' - }, - '1' => { - 'name' => 'pcert_max', - 'type' => '22864' - }, - '2' => { - 'name' => 'data', - 'type' => '4430' - }, - '3' => { - 'name' => 'format', - 'type' => '245081' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_list_import_x509_raw', - 'Source' => 'pcert.c', - 'SourceLine' => '175' - }, - '104046' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 's1', - 'type' => '334' - }, - '1' => { - 'name' => 's2', - 'type' => '334' - }, - '2' => { - 'name' => 'n', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_memcmp', - 'Source' => 'safe-memfuncs.c', - 'SourceLine' => '70' - }, - '1041199' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '1036973' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_init', - 'Source' => 'pgp.c', - 'SourceLine' => '43' - }, - '1041210' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '998610' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_import', - 'Source' => 'pgp.c', - 'SourceLine' => '84' - }, - '1041221' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_deinit', - 'Source' => 'pgp.c', - 'SourceLine' => '58' - }, - '1041330' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'keyid', - 'type' => '5465' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_set_preferred_key_id', - 'Source' => 'pgp.c', - 'SourceLine' => '1666' - }, - '1041373' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'format', - 'type' => '998610' - }, - '2' => { - 'name' => 'output_data', - 'type' => '216' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_export', - 'Source' => 'pgp.c', - 'SourceLine' => '230' - }, - '1041384' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '1072048' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_init', - 'Source' => 'pubkey.c', - 'SourceLine' => '113' - }, - '1041395' => { - 'Header' => 'abstract.h', - 'Line' => '98', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'crt', - 'type' => '158148' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pubkey_import_openpgp' - }, - '1041477' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'certs', - 'type' => '158389' - }, - '1' => { - 'name' => 'cert_max', - 'type' => '22864' - }, - '2' => { - 'name' => 'data', - 'type' => '4430' - }, - '3' => { - 'name' => 'format', - 'type' => '245081' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_list_import', - 'Source' => 'x509.c', - 'SourceLine' => '3429' - }, - '104151' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'level', - 'type' => '503803' - }, - '1' => { - 'name' => 'data', - 'type' => '216' - }, - '2' => { - 'name' => 'len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_rnd', - 'Source' => 'random.c', - 'SourceLine' => '137' - }, - '1041539' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_export2' - }, - '1041550' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'crt', - 'type' => '156760' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_x509', - 'Source' => 'pubkey.c', - 'SourceLine' => '157' - }, - '1057901' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_verify_params', - 'Source' => 'pubkey.c', - 'SourceLine' => '2100' - }, - '1058096' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '4454' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_x509_raw', - 'Source' => 'pubkey.c', - 'SourceLine' => '2057' - }, - '1058567' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'fn', - 'type' => '158609' - }, - '2' => { - 'name' => 'userdata', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pubkey_set_pin_function', - 'Source' => 'pubkey.c', - 'SourceLine' => '2034' - }, - '1061768' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'plaintext', - 'type' => '4430' - }, - '3' => { - 'name' => 'ciphertext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_encrypt_data', - 'Source' => 'pubkey.c', - 'SourceLine' => '1702' - }, - '1062913' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'p', - 'type' => '4430' - }, - '2' => { - 'name' => 'q', - 'type' => '4430' - }, - '3' => { - 'name' => 'g', - 'type' => '4430' - }, - '4' => { - 'name' => 'y', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_dsa_raw', - 'Source' => 'pubkey.c', - 'SourceLine' => '1531' - }, - '1063029' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'parameters', - 'type' => '4430' - }, - '2' => { - 'name' => 'ecpoint', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_ecc_x962', - 'Source' => 'pubkey.c', - 'SourceLine' => '1462' - }, - '1063466' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'curve', - 'type' => '3208' - }, - '2' => { - 'name' => 'x', - 'type' => '4430' - }, - '3' => { - 'name' => 'y', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_ecc_raw', - 'Source' => 'pubkey.c', - 'SourceLine' => '1406' - }, - '1063859' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'm', - 'type' => '4430' - }, - '2' => { - 'name' => 'e', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_rsa_raw', - 'Source' => 'pubkey.c', - 'SourceLine' => '1360' - }, - '1063922' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_url', - 'Source' => 'pubkey.c', - 'SourceLine' => '1316' - }, - '1064643' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'usage', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_set_key_usage', - 'Source' => 'pubkey.c', - 'SourceLine' => '1231' - }, - '1064706' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'key', - 'type' => '4454' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_pubkey', - 'Source' => 'pubkey.c', - 'SourceLine' => '1192' - }, - '1064927' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'key', - 'type' => '4454' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_pubkey', - 'Source' => 'pubkey.c', - 'SourceLine' => '1154' - }, - '1065148' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import', - 'Source' => 'pubkey.c', - 'SourceLine' => '1072' - }, - '1065826' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'parameters', - 'type' => '4531' - }, - '2' => { - 'name' => 'ecpoint', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export_ecc_x962', - 'Source' => 'pubkey.c', - 'SourceLine' => '1020' - }, - '1066414' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'curve', - 'type' => '532314' - }, - '2' => { - 'name' => 'x', - 'type' => '4531' - }, - '3' => { - 'name' => 'y', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export_ecc_raw', - 'Source' => 'pubkey.c', - 'SourceLine' => '965' - }, - '1066752' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'p', - 'type' => '4531' - }, - '2' => { - 'name' => 'q', - 'type' => '4531' - }, - '3' => { - 'name' => 'g', - 'type' => '4531' - }, - '4' => { - 'name' => 'y', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export_dsa_raw', - 'Source' => 'pubkey.c', - 'SourceLine' => '886' - }, - '1067434' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'm', - 'type' => '4531' - }, - '2' => { - 'name' => 'e', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export_rsa_raw', - 'Source' => 'pubkey.c', - 'SourceLine' => '831' - }, - '1067750' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3881' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_get_key_id', - 'Source' => 'pubkey.c', - 'SourceLine' => '792' - }, - '1067990' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export2', - 'Source' => 'pubkey.c', - 'SourceLine' => '726' - }, - '1068502' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'output_data', - 'type' => '216' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_export', - 'Source' => 'pubkey.c', - 'SourceLine' => '660' - }, - '1069037' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '4454' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '998610' - }, - '3' => { - 'name' => 'keyid', - 'type' => '5465' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_openpgp_raw', - 'Source' => 'pubkey.c', - 'SourceLine' => '591' - }, - '1069529' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3881' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - }, - '4' => { - 'name' => 'subkey', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_get_openpgp_key_id', - 'Source' => 'pubkey.c', - 'SourceLine' => '522' - }, - '1070178' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'obj', - 'type' => '1048015' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_pkcs11', - 'Source' => 'pubkey.c', - 'SourceLine' => '331' - }, - '1070739' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'hash', - 'type' => '535126' - }, - '2' => { - 'name' => 'mand', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_get_preferred_hash_algorithm', - 'Source' => 'pubkey.c', - 'SourceLine' => '272' - }, - '1070985' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '2' => { - 'name' => 'usage', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_privkey', - 'Source' => 'pubkey.c', - 'SourceLine' => '239' - }, - '1071187' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_x509_crq', - 'Source' => 'pubkey.c', - 'SourceLine' => '196' - }, - '1075187' => { - 'Header' => 'pkcs11.h', - 'Line' => '88', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1455041' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_init' - }, - '1075198' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - }, - '1' => { - 'name' => 'fn', - 'type' => '158609' - }, - '2' => { - 'name' => 'userdata', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_set_pin_function', - 'Source' => 'pkcs11.c', - 'SourceLine' => '1019' - }, - '1075209' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_import_url' - }, - '1075220' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_obj_deinit', - 'Source' => 'pkcs11.c', - 'SourceLine' => '1035' - }, - '1075242' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '4454' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'srk_password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_tpm_url', - 'Source' => 'tpm.c', - 'SourceLine' => '1277' - }, - '1075264' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'usage', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_key_usage', - 'Source' => 'crq.c', - 'SourceLine' => '2431' - }, - '1075276' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'usage', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_key_usage', - 'Source' => 'x509_write.c', - 'SourceLine' => '533' - }, - '1075597' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'pkcs11_crt', - 'type' => '1048015' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_import_pkcs11', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3167' - }, - '1075609' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '22864' - }, - '2' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_key_usage' - }, - '1075621' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1048221', - 'ShortName' => 'gnutls_pkcs11_obj_get_type', - 'Source' => 'pkcs11.c', - 'SourceLine' => '2309' - }, - '1075656' => { - 'Header' => 'x509.h', - 'Line' => '1355', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'bits', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crq_get_pk_algorithm' - }, - '1075668' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '22864' - }, - '2' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_key_usage', - 'Source' => 'crq.c', - 'SourceLine' => '1771' - }, - '1075692' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'bits', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_pk_algorithm' - }, - '1075749' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_preferred_key_id' - }, - '1075760' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'keyid', - 'type' => '5465' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_idx' - }, - '1075771' => { - 'Header' => 'openpgp.h', - 'Line' => '136', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'keyid', - 'type' => '3881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_id' - }, - '1075782' => { - 'Header' => 'openpgp.h', - 'Line' => '139', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'key_usage', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_usage' - }, - '1075793' => { - 'Header' => 'openpgp.h', - 'Line' => '126', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'bits', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_pk_algorithm' - }, - '1075815' => { - 'Header' => 'openpgp.h', - 'Line' => '100', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'bits', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_pk_algorithm' - }, - '1075826' => { - 'Header' => 'openpgp.h', - 'Line' => '108', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_key_id' - }, - '1075837' => { - 'Header' => 'openpgp.h', - 'Line' => '87', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_key_usage' - }, - '1075848' => { - 'Header' => 'openpgp.h', - 'Line' => '89', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'fpr', - 'type' => '216' - }, - '2' => { - 'name' => 'fprlen', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_crt_get_fingerprint' - }, - '1089791' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'init', - 'type' => '568116' - }, - '1' => { - 'name' => 'deinit', - 'type' => '568179' - }, - '2' => { - 'name' => 'lock', - 'type' => '568155' - }, - '3' => { - 'name' => 'unlock', - 'type' => '568167' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_mutex', - 'Source' => 'locks.c', - 'SourceLine' => '51' - }, - '1103703' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_record_get_discarded', - 'Source' => 'dtls.c', - 'SourceLine' => '1035' - }, - '1103752' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'prestate', - 'type' => '1103881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dtls_prestate_set', - 'Source' => 'dtls.c', - 'SourceLine' => '1001' - }, - '1103887' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4531' - }, - '1' => { - 'name' => 'client_data', - 'type' => '216' - }, - '2' => { - 'name' => 'client_data_size', - 'type' => '52' - }, - '3' => { - 'name' => '_msg', - 'type' => '216' - }, - '4' => { - 'name' => 'msg_size', - 'type' => '52' - }, - '5' => { - 'name' => 'prestate', - 'type' => '1103881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dtls_cookie_verify', - 'Source' => 'dtls.c', - 'SourceLine' => '922' - }, - '1104851' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4531' - }, - '1' => { - 'name' => 'client_data', - 'type' => '216' - }, - '2' => { - 'name' => 'client_data_size', - 'type' => '52' - }, - '3' => { - 'name' => 'prestate', - 'type' => '1103881' - }, - '4' => { - 'name' => 'ptr', - 'type' => '3312' - }, - '5' => { - 'name' => 'push_func', - 'type' => '4965' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dtls_cookie_send', - 'Source' => 'dtls.c', - 'SourceLine' => '813' - }, - '1105585' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_dtls_get_timeout', - 'Source' => 'dtls.c', - 'SourceLine' => '761' - }, - '1105802' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'mtu', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dtls_set_data_mtu', - 'Source' => 'dtls.c', - 'SourceLine' => '709' - }, - '1106038' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_overhead_size', - 'Source' => 'dtls.c', - 'SourceLine' => '639' - }, - '1107353' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'mtu', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dtls_set_mtu', - 'Source' => 'dtls.c', - 'SourceLine' => '491' - }, - '1127994' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'errno_func', - 'type' => '5095' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_errno_function', - 'Source' => 'system_override.c', - 'SourceLine' => '187' - }, - '1128106' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'push_func', - 'type' => '4965' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_push_function', - 'Source' => 'system_override.c', - 'SourceLine' => '142' - }, - '1128274' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'err', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_errno', - 'Source' => 'system_override.c', - 'SourceLine' => '59' - }, - '1142853' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2533' - }, - '1' => { - 'name' => 'priority', - 'type' => '75' - }, - '2' => { - 'name' => 'init', - 'type' => '6414' - }, - '3' => { - 'name' => 'hash', - 'type' => '6451' - }, - '4' => { - 'name' => 'output', - 'type' => '6462' - }, - '5' => { - 'name' => 'deinit', - 'type' => '6473' - }, - '6' => { - 'name' => 'hash_fast', - 'offset' => '0', - 'type' => '6484' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_crypto_register_digest', - 'Source' => 'crypto-backend.c', - 'SourceLine' => '463' - }, - '1143248' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2423' - }, - '1' => { - 'name' => 'priority', - 'type' => '75' - }, - '2' => { - 'name' => 'init', - 'type' => '6224' - }, - '3' => { - 'name' => 'setkey', - 'type' => '6261' - }, - '4' => { - 'name' => 'setnonce', - 'type' => '6272' - }, - '5' => { - 'name' => 'hash', - 'type' => '6283' - }, - '6' => { - 'name' => 'output', - 'offset' => '0', - 'type' => '6294' - }, - '7' => { - 'name' => 'deinit', - 'offset' => '8', - 'type' => '6336' - }, - '8' => { - 'name' => 'hash_fast', - 'offset' => '16', - 'type' => '6347' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_crypto_register_mac', - 'Source' => 'crypto-backend.c', - 'SourceLine' => '417' - }, - '1144296' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2122' - }, - '1' => { - 'name' => 'priority', - 'type' => '75' - }, - '2' => { - 'name' => 'init', - 'type' => '5918' - }, - '3' => { - 'name' => 'setkey', - 'type' => '5960' - }, - '4' => { - 'name' => 'aead_encrypt', - 'type' => '6125' - }, - '5' => { - 'name' => 'aead_decrypt', - 'type' => '6202' - }, - '6' => { - 'name' => 'deinit', - 'offset' => '0', - 'type' => '6213' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_crypto_register_aead_cipher', - 'Source' => 'crypto-backend.c', - 'SourceLine' => '269' - }, - '1144691' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2122' - }, - '1' => { - 'name' => 'priority', - 'type' => '75' - }, - '2' => { - 'name' => 'init', - 'type' => '5918' - }, - '3' => { - 'name' => 'setkey', - 'type' => '5960' - }, - '4' => { - 'name' => 'setiv', - 'type' => '6002' - }, - '5' => { - 'name' => 'encrypt', - 'type' => '6013' - }, - '6' => { - 'name' => 'decrypt', - 'offset' => '0', - 'type' => '6065' - }, - '7' => { - 'name' => 'deinit', - 'offset' => '8', - 'type' => '6213' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_crypto_register_cipher', - 'Source' => 'crypto-backend.c', - 'SourceLine' => '219' - }, - '1161231' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '1152267' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_deinit', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '801' - }, - '1161295' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '1152267' - }, - '1' => { - 'name' => 'verify', - 'type' => '1152219' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_set_verify_func', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '789' - }, - '1161354' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '1152267' - }, - '1' => { - 'name' => 'cstore', - 'type' => '1152161' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_set_store_commitment_func', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '765' - }, - '1161413' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '1152267' - }, - '1' => { - 'name' => 'store', - 'type' => '1152108' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tdb_set_store_func', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '744' - }, - '1161472' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'tdb', - 'type' => '1161543' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_tdb_init', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '719' - }, - '1161666' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'db_name', - 'type' => '110' - }, - '1' => { - 'name' => 'tdb', - 'type' => '1152267' - }, - '2' => { - 'name' => 'host', - 'type' => '110' - }, - '3' => { - 'name' => 'service', - 'type' => '110' - }, - '4' => { - 'name' => 'hash_algo', - 'type' => '2533' - }, - '5' => { - 'name' => 'hash', - 'type' => '4430' - }, - '6' => { - 'name' => 'expiration', - 'offset' => '0', - 'type' => '268' - }, - '7' => { - 'name' => 'flags', - 'offset' => '8', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_store_commitment', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '644' - }, - '1162454' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'db_name', - 'type' => '110' - }, - '1' => { - 'name' => 'tdb', - 'type' => '1152267' - }, - '2' => { - 'name' => 'host', - 'type' => '110' - }, - '3' => { - 'name' => 'service', - 'type' => '110' - }, - '4' => { - 'name' => 'cert_type', - 'type' => '2854' - }, - '5' => { - 'name' => 'cert', - 'type' => '4430' - }, - '6' => { - 'name' => 'expiration', - 'offset' => '0', - 'type' => '268' - }, - '7' => { - 'name' => 'flags', - 'offset' => '8', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_store_pubkey', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '559' - }, - '1169329' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'db_name', - 'type' => '110' - }, - '1' => { - 'name' => 'tdb', - 'type' => '1152267' - }, - '2' => { - 'name' => 'host', - 'type' => '110' - }, - '3' => { - 'name' => 'service', - 'type' => '110' - }, - '4' => { - 'name' => 'cert_type', - 'type' => '2854' - }, - '5' => { - 'name' => 'cert', - 'type' => '4430' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_verify_stored_pubkey', - 'Source' => 'verify-tofu.c', - 'SourceLine' => '107' - }, - '1186192' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'userdata', - 'type' => '4576' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '158609', - 'ShortName' => 'gnutls_pkcs11_get_pin_function', - 'Source' => 'pin.c', - 'SourceLine' => '58' - }, - '1186239' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'fn', - 'type' => '158609' - }, - '1' => { - 'name' => 'userdata', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_set_pin_function', - 'Source' => 'pin.c', - 'SourceLine' => '41' - }, - '1203937' => { - 'Header' => 'tpm.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'srk_password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_tpm_privkey_delete', - 'Source' => 'tpm.c', - 'SourceLine' => '1773' - }, - '1204666' => { - 'Header' => 'tpm.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '1205247' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_tpm_get_registered', - 'Source' => 'tpm.c', - 'SourceLine' => '1717' - }, - '1205253' => { - 'Header' => 'tpm.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '1191078' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'url', - 'type' => '1030' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_tpm_key_list_get_url', - 'Source' => 'tpm.c', - 'SourceLine' => '1691' - }, - '1205606' => { - 'Header' => 'tpm.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '1191078' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_tpm_key_list_deinit', - 'Source' => 'tpm.c', - 'SourceLine' => '1664' - }, - '1205683' => { - 'Header' => 'tpm.h', - 'Param' => { - '0' => { - 'name' => 'pk', - 'type' => '2916' - }, - '1' => { - 'name' => 'bits', - 'type' => '145' - }, - '2' => { - 'name' => 'srk_password', - 'type' => '110' - }, - '3' => { - 'name' => 'key_password', - 'type' => '110' - }, - '4' => { - 'name' => 'format', - 'type' => '1191174' - }, - '5' => { - 'name' => 'pub_format', - 'type' => '245081' - }, - '6' => { - 'name' => 'privkey', - 'offset' => '0', - 'type' => '4531' - }, - '7' => { - 'name' => 'pubkey', - 'offset' => '8', - 'type' => '4531' - }, - '8' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_tpm_privkey_generate', - 'Source' => 'tpm.c', - 'SourceLine' => '1372' - }, - '1209044' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '4454' - }, - '1' => { - 'name' => 'fdata', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '1191174' - }, - '3' => { - 'name' => 'srk_password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_import_tpm_raw', - 'Source' => 'tpm.c', - 'SourceLine' => '1239' - }, - '1212362' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'fdata', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '1191174' - }, - '3' => { - 'name' => 'srk_password', - 'type' => '110' - }, - '4' => { - 'name' => 'key_password', - 'type' => '110' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_tpm_raw', - 'Source' => 'tpm.c', - 'SourceLine' => '736' - }, - '1237300' => { - 'Header' => 'gnutls.h', - 'Return' => '145', - 'ShortName' => 'gnutls_fips140_mode_enabled', - 'Source' => 'fips.c', - 'SourceLine' => '406' - }, - '1292458' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '1283932' - }, - '1' => { - 'name' => 'key_type', - 'type' => '110' - }, - '2' => { - 'name' => 'key_size', - 'type' => '145' - }, - '3' => { - 'name' => 'fpr', - 'type' => '216' - }, - '4' => { - 'name' => 'fpr_size', - 'type' => '52' - }, - '5' => { - 'name' => 'art', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_random_art', - 'Source' => 'randomart.c', - 'SourceLine' => '43' - }, - '1307197' => { - 'Header' => 'urls.h', - 'Param' => { - '0' => { - 'name' => 'st', - 'type' => '1307508' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_register_custom_url', - 'Source' => 'urls.c', - 'SourceLine' => '108' - }, - '1307771' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'cert', - 'type' => '156760' - }, - '2' => { - 'name' => 'issuer', - 'type' => '4531' - }, - '3' => { - 'name' => 'fmt', - 'type' => '245081' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_get_raw_issuer', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3737' - }, - '1321429' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'label_size', - 'type' => '52' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'server_random_first', - 'type' => '75' - }, - '4' => { - 'name' => 'extra_size', - 'type' => '52' - }, - '5' => { - 'name' => 'extra', - 'type' => '110' - }, - '6' => { - 'name' => 'outsize', - 'offset' => '0', - 'type' => '52' - }, - '7' => { - 'name' => 'out', - 'offset' => '8', - 'type' => '240' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_prf', - 'Source' => 'prf.c', - 'SourceLine' => '420' - }, - '1321875' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'label_size', - 'type' => '52' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'context_size', - 'type' => '52' - }, - '4' => { - 'name' => 'context', - 'type' => '110' - }, - '5' => { - 'name' => 'outsize', - 'type' => '52' - }, - '6' => { - 'name' => 'out', - 'offset' => '0', - 'type' => '240' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_prf_rfc5705', - 'Source' => 'prf.c', - 'SourceLine' => '354' - }, - '1322357' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'label_size', - 'type' => '52' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'seed_size', - 'type' => '52' - }, - '4' => { - 'name' => 'seed', - 'type' => '110' - }, - '5' => { - 'name' => 'outsize', - 'type' => '52' - }, - '6' => { - 'name' => 'out', - 'offset' => '0', - 'type' => '240' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_prf_raw', - 'Source' => 'prf.c', - 'SourceLine' => '301' - }, - '1339615' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_session_get_verify_cert_status', - 'Source' => 'auto-verify.c', - 'SourceLine' => '151' - }, - '1339662' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'data', - 'type' => '13501' - }, - '2' => { - 'name' => 'elements', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_set_verify_cert2', - 'Source' => 'auto-verify.c', - 'SourceLine' => '122' - }, - '1339779' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_set_verify_cert', - 'Source' => 'auto-verify.c', - 'SourceLine' => '81' - }, - '1354366' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_get_peers_public_bits', - 'Source' => 'dh-session.c', - 'SourceLine' => '346' - }, - '1355358' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_get_secret_bits', - 'Source' => 'dh-session.c', - 'SourceLine' => '219' - }, - '1355760' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'raw_key', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_get_pubkey', - 'Source' => 'dh-session.c', - 'SourceLine' => '166' - }, - '1356194' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'raw_gen', - 'type' => '4531' - }, - '2' => { - 'name' => 'raw_prime', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_get_group', - 'Source' => 'dh-session.c', - 'SourceLine' => '98' - }, - '1356786' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'bits', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dh_set_prime_bits', - 'Source' => 'dh-session.c', - 'SourceLine' => '68' - }, - '1357420' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algo', - 'type' => '2916' - }, - '1' => { - 'name' => 'param', - 'type' => '3300' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_sec_param_to_pk_bits', - 'Source' => 'secparams.c', - 'SourceLine' => '81' - }, - '13642' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'data', - 'type' => '334' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - }, - '3' => { - 'name' => 'range', - 'type' => '14637' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '257', - 'ShortName' => 'gnutls_record_send_range', - 'Source' => 'range.c', - 'SourceLine' => '229' - }, - '1372944' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'max_bits', - 'type' => '145' - }, - '2' => { - 'name' => 'max_depth', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_verify_limits', - 'Source' => 'cert-session.c', - 'SourceLine' => '236' - }, - '1373013' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_certificate_get_verify_flags', - 'Source' => 'cert-session.c', - 'SourceLine' => '219' - }, - '1373060' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_verify_flags', - 'Source' => 'cert-session.c', - 'SourceLine' => '201' - }, - '1373116' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_flags', - 'Source' => 'cert-session.c', - 'SourceLine' => '184' - }, - '1373172' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'func', - 'type' => '168045' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_params_function', - 'Source' => 'cert-session.c', - 'SourceLine' => '166' - }, - '1373228' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_client_get_request_status', - 'Source' => 'cert-session.c', - 'SourceLine' => '151' - }, - '1373275' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'id', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_peers_subkey_id', - 'Source' => 'cert-session.c', - 'SourceLine' => '124' - }, - '1373477' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'list_size', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '4430', - 'ShortName' => 'gnutls_certificate_get_peers', - 'Source' => 'cert-session.c', - 'SourceLine' => '93' - }, - '1373680' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '4430', - 'ShortName' => 'gnutls_certificate_get_ours', - 'Source' => 'cert-session.c', - 'SourceLine' => '53' - }, - '1434461' => { - 'Header' => 'system-keys.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'privkey', - 'type' => '156748' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'cert_url', - 'type' => '1030' - }, - '4' => { - 'name' => 'key_url', - 'type' => '1030' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_system_key_add_x509', - 'Source' => 'keys-dummy.c', - 'SourceLine' => '53' - }, - '1434560' => { - 'Header' => 'system-keys.h', - 'Param' => { - '0' => { - 'name' => 'cert_url', - 'type' => '110' - }, - '1' => { - 'name' => 'key_url', - 'type' => '110' - } - }, - 'Return' => '75', - 'ShortName' => 'gnutls_system_key_delete', - 'Source' => 'keys-dummy.c', - 'SourceLine' => '48' - }, - '1434598' => { - 'Header' => 'system-keys.h', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '1434724' - }, - '1' => { - 'name' => 'cert_type', - 'type' => '145' - }, - '2' => { - 'name' => 'cert_url', - 'type' => '1030' - }, - '3' => { - 'name' => 'key_url', - 'type' => '1030' - }, - '4' => { - 'name' => 'label', - 'type' => '1030' - }, - '5' => { - 'name' => 'der', - 'type' => '4531' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_system_key_iter_get_info', - 'Source' => 'keys-dummy.c', - 'SourceLine' => '37' - }, - '1434730' => { - 'Header' => 'system-keys.h', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '1434286' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_system_key_iter_deinit', - 'Source' => 'keys-dummy.c', - 'SourceLine' => '31' - }, - '1455439' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '240', - 'ShortName' => 'gnutls_pkcs11_obj_flags_get_str', - 'Source' => 'pkcs11.c', - 'SourceLine' => '4133' - }, - '1456042' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - }, - '1' => { - 'name' => 'oflags', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_get_flags', - 'Source' => 'pkcs11.c', - 'SourceLine' => '4114' - }, - '1456105' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'cert', - 'type' => '156760' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_pkcs11_crt_is_known', - 'Source' => 'pkcs11.c', - 'SourceLine' => '4012' - }, - '1456995' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'dn', - 'type' => '4430' - }, - '2' => { - 'name' => 'spki', - 'type' => '4430' - }, - '3' => { - 'name' => 'issuer', - 'type' => '4531' - }, - '4' => { - 'name' => 'fmt', - 'type' => '245081' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_get_raw_issuer_by_subject_key_id', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3916' - }, - '1457615' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'dn', - 'type' => '4430' - }, - '2' => { - 'name' => 'issuer', - 'type' => '4531' - }, - '3' => { - 'name' => 'fmt', - 'type' => '245081' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_get_raw_issuer_by_dn', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3831' - }, - '1460999' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '1048221' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pkcs11_type_get_name', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3425' - }, - '1461050' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'mechanism', - 'type' => '1452495' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_get_mechanism', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3366' - }, - '1461675' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'flags', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_get_flags', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3316' - }, - '1462174' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'certs', - 'type' => '158389' - }, - '1' => { - 'name' => 'cert_max', - 'type' => '145' - }, - '2' => { - 'name' => 'objs', - 'type' => '1455047' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_list_import_pkcs11', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3242' - }, - '1462949' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'p_list', - 'type' => '1463052' - }, - '1' => { - 'name' => 'n_list', - 'type' => '22864' - }, - '2' => { - 'name' => 'url', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_list_import_url4', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3104' - }, - '1463058' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'p_list', - 'type' => '1455041' - }, - '1' => { - 'name' => 'n_list', - 'type' => '22864' - }, - '2' => { - 'name' => 'url', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_list_import_url3', - 'Source' => 'pkcs11.c', - 'SourceLine' => '3044' - }, - '1469717' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - }, - '1' => { - 'name' => 'detailed', - 'type' => '1441512' - }, - '2' => { - 'name' => 'url', - 'type' => '1030' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_export_url', - 'Source' => 'pkcs11.c', - 'SourceLine' => '2283' - }, - '1469932' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'ttype', - 'type' => '1441653' - }, - '2' => { - 'name' => 'output', - 'type' => '216' - }, - '3' => { - 'name' => 'output_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_get_info', - 'Source' => 'pkcs11.c', - 'SourceLine' => '2192' - }, - '1470644' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'seq', - 'type' => '145' - }, - '1' => { - 'name' => 'detailed', - 'type' => '1441512' - }, - '2' => { - 'name' => 'url', - 'type' => '1030' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_get_url', - 'Source' => 'pkcs11.c', - 'SourceLine' => '2146' - }, - '14714' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'orig', - 'type' => '14637' - }, - '2' => { - 'name' => 'next', - 'type' => '15933' - }, - '3' => { - 'name' => 'remainder', - 'type' => '15933' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_range_split', - 'Source' => 'range.c', - 'SourceLine' => '150' - }, - '1478903' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - }, - '1' => { - 'name' => 'fmt', - 'type' => '245081' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_export3', - 'Source' => 'pkcs11.c', - 'SourceLine' => '1125' - }, - '1479588' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - }, - '1' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_export2', - 'Source' => 'pkcs11.c', - 'SourceLine' => '1102' - }, - '1479688' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - }, - '1' => { - 'name' => 'output_data', - 'type' => '216' - }, - '2' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_export', - 'Source' => 'pkcs11.c', - 'SourceLine' => '1066' - }, - '1480831' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'fn', - 'type' => '713671' - }, - '1' => { - 'name' => 'userdata', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_set_token_function', - 'Source' => 'pkcs11.c', - 'SourceLine' => '887' - }, - '1481048' => { - 'Header' => 'pkcs11.h', - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_reinit', - 'Source' => 'pkcs11.c', - 'SourceLine' => '812' - }, - '1481087' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'flags', - 'type' => '145' - }, - '1' => { - 'name' => 'deprecated_config_file', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_init', - 'Source' => 'pkcs11.c', - 'SourceLine' => '762' - }, - '1482473' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - }, - '1' => { - 'name' => 'itype', - 'type' => '1441597' - }, - '2' => { - 'name' => 'output', - 'type' => '216' - }, - '3' => { - 'name' => 'output_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_get_info', - 'Source' => 'pkcs11.c', - 'SourceLine' => '536' - }, - '1482607' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - }, - '1' => { - 'name' => 'itype', - 'type' => '1441597' - }, - '2' => { - 'name' => 'data', - 'type' => '334' - }, - '3' => { - 'name' => 'data_size', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_set_info', - 'Source' => 'pkcs11.c', - 'SourceLine' => '409' - }, - '1484352' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - }, - '1' => { - 'name' => 'params', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_add_provider', - 'Source' => 'pkcs11.c', - 'SourceLine' => '309' - }, - '1489078' => { - 'Header' => 'x509.h', - 'Line' => '392', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'result', - 'type' => '216' - }, - '2' => { - 'name' => 'result_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_serial' - }, - '1489236' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'id', - 'type' => '216' - }, - '2' => { - 'name' => 'id_size', - 'type' => '7722' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_authority_key_id', - 'Source' => 'x509.c', - 'SourceLine' => '1330' - }, - '1489292' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert1', - 'type' => '156760' - }, - '1' => { - 'name' => 'cert2', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_crt_equals', - 'Source' => 'x509.c', - 'SourceLine' => '75' - }, - '149393' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_check_corked', - 'Source' => 'buffers.c', - 'SourceLine' => '111' - }, - '149440' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_check_pending', - 'Source' => 'buffers.c', - 'SourceLine' => '95' - }, - '1509788' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'obj', - 'type' => '1048015' - }, - '1' => { - 'name' => 'exts', - 'type' => '1510420' - }, - '2' => { - 'name' => 'exts_size', - 'type' => '22864' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_obj_get_exts', - 'Source' => 'pkcs11x.c', - 'SourceLine' => '264' - }, - '1513097' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '1509782' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_ext_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '3118' - }, - '1533138' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '158282' - }, - '1' => { - 'name' => 'fmt', - 'type' => '245081' - }, - '2' => { - 'name' => 'data', - 'type' => '4531' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_export_pubkey', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '1175' - }, - '1534745' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - }, - '1' => { - 'name' => 'pk', - 'type' => '2916' - }, - '2' => { - 'name' => 'bits', - 'type' => '145' - }, - '3' => { - 'name' => 'label', - 'type' => '110' - }, - '4' => { - 'name' => 'cid', - 'type' => '4430' - }, - '5' => { - 'name' => 'fmt', - 'type' => '245081' - }, - '6' => { - 'name' => 'pubkey', - 'offset' => '0', - 'type' => '4531' - }, - '7' => { - 'name' => 'key_usage', - 'offset' => '8', - 'type' => '145' - }, - '8' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_generate3', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '742' - }, - '1536934' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158282' - }, - '1' => { - 'name' => 'detailed', - 'type' => '1441512' - }, - '2' => { - 'name' => 'url', - 'type' => '1030' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_export_url', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '583' - }, - '1540643' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '158282' - }, - '1' => { - 'name' => 'itype', - 'type' => '1441597' - }, - '2' => { - 'name' => 'output', - 'type' => '216' - }, - '3' => { - 'name' => 'output_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_privkey_get_info', - 'Source' => 'pkcs11_privkey.c', - 'SourceLine' => '176' - }, - '1562016' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'rnddata', - 'type' => '216' - }, - '2' => { - 'name' => 'len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_get_random', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '1280' - }, - '1562644' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'oldpin', - 'type' => '110' - }, - '2' => { - 'name' => 'newpin', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_set_pin', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '1203' - }, - '1563383' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'so_pin', - 'type' => '110' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_token_init', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '1145' - }, - '1564095' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'object_url', - 'type' => '110' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_delete_url', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '1100' - }, - '1565355' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'key', - 'type' => '156748' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'cid', - 'type' => '4430' - }, - '4' => { - 'name' => 'key_usage', - 'type' => '145' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_copy_x509_privkey2', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '631' - }, - '1567064' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'crt', - 'type' => '156760' - }, - '2' => { - 'name' => 'data', - 'type' => '4531' - }, - '3' => { - 'name' => 'label', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_copy_attached_extension', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '530' - }, - '1567963' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'pubkey', - 'type' => '4454' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'cid', - 'type' => '4430' - }, - '4' => { - 'name' => 'key_usage', - 'type' => '145' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_copy_pubkey', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '380' - }, - '1569841' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'crt', - 'type' => '156760' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'cid', - 'type' => '4430' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_copy_x509_crt2', - 'Source' => 'pkcs11_write.c', - 'SourceLine' => '102' - }, - '1571728' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3881' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_get_key_id', - 'Source' => 'privkey.c', - 'SourceLine' => '1862' - }, - '1571740' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'm', - 'type' => '4531' - }, - '2' => { - 'name' => 'e', - 'type' => '4531' - }, - '3' => { - 'name' => 'd', - 'type' => '4531' - }, - '4' => { - 'name' => 'p', - 'type' => '4531' - }, - '5' => { - 'name' => 'q', - 'type' => '4531' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4531' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '4531' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export_rsa_raw2', - 'Source' => 'privkey.c', - 'SourceLine' => '1433' - }, - '1571985' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'output_data', - 'type' => '216' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_export', - 'Source' => 'x509.c', - 'SourceLine' => '2689' - }, - '1572020' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'ret', - 'type' => '216' - }, - '2' => { - 'name' => 'ret_size', - 'type' => '7722' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject_key_id', - 'Source' => 'x509.c', - 'SourceLine' => '1161' - }, - '1572031' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3881' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_key_id', - 'Source' => 'x509.c', - 'SourceLine' => '2794' - }, - '1590163' => { - 'Header' => 'pkcs11.h', - 'Param' => { - '0' => { - 'name' => 'token_url', - 'type' => '110' - }, - '1' => { - 'name' => 'key', - 'type' => '4531' - }, - '2' => { - 'name' => 'label', - 'type' => '110' - }, - '3' => { - 'name' => 'key_usage', - 'type' => '145' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs11_copy_secret_key', - 'Source' => 'pkcs11_secret.c', - 'SourceLine' => '47' - }, - '15960' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_record_can_use_length_hiding', - 'Source' => 'range.c', - 'SourceLine' => '104' - }, - '1626720' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '1617636' - }, - '1' => { - 'name' => 'seed', - 'type' => '4430' - }, - '2' => { - 'name' => 'salt_length', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_server_fake_salt_seed', - 'Source' => 'srp.c', - 'SourceLine' => '831' - }, - '1626907' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'bits', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_prime_bits', - 'Source' => 'srp.c', - 'SourceLine' => '795' - }, - '1626966' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'username', - 'type' => '110' - }, - '1' => { - 'name' => 'password', - 'type' => '110' - }, - '2' => { - 'name' => 'salt', - 'type' => '4430' - }, - '3' => { - 'name' => 'generator', - 'type' => '4430' - }, - '4' => { - 'name' => 'prime', - 'type' => '4430' - }, - '5' => { - 'name' => 'res', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_verifier', - 'Source' => 'srp.c', - 'SourceLine' => '739' - }, - '1627935' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_srp_server_get_username', - 'Source' => 'srp.c', - 'SourceLine' => '707' - }, - '1628127' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '1617727' - }, - '1' => { - 'name' => 'func', - 'type' => '1626563' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_client_credentials_function', - 'Source' => 'srp.c', - 'SourceLine' => '688' - }, - '1628186' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '1617636' - }, - '1' => { - 'name' => 'func', - 'type' => '1626569' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_set_server_credentials_function', - 'Source' => 'srp.c', - 'SourceLine' => '654' - }, - '1628245' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1617636' - }, - '1' => { - 'name' => 'password_file', - 'type' => '110' - }, - '2' => { - 'name' => 'password_conf_file', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_set_server_credentials_file', - 'Source' => 'srp.c', - 'SourceLine' => '580' - }, - '1628647' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1628912' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_allocate_server_credentials', - 'Source' => 'srp.c', - 'SourceLine' => '530' - }, - '1628918' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1617636' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_free_server_credentials', - 'Source' => 'srp.c', - 'SourceLine' => '499' - }, - '1629019' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1617727' - }, - '1' => { - 'name' => 'username', - 'type' => '110' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_set_client_credentials', - 'Source' => 'srp.c', - 'SourceLine' => '470' - }, - '1629249' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1629319' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_allocate_client_credentials', - 'Source' => 'srp.c', - 'SourceLine' => '443' - }, - '1629325' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1617727' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_srp_free_client_credentials', - 'Source' => 'srp.c', - 'SourceLine' => '426' - }, - '1649185' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1640497' - }, - '1' => { - 'name' => 'func', - 'type' => '168045' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_params_function', - 'Source' => 'psk.c', - 'SourceLine' => '444' - }, - '1649223' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1640497' - }, - '1' => { - 'name' => 'func', - 'type' => '168045' - } - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_server_params_function', - 'Source' => 'psk.c', - 'SourceLine' => '428' - }, - '1649260' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1640497' - }, - '1' => { - 'name' => 'sec_param', - 'type' => '3300' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_psk_set_server_known_dh_params', - 'Source' => 'psk.c', - 'SourceLine' => '398' - }, - '1649593' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1640497' - }, - '1' => { - 'name' => 'dh_params', - 'type' => '3411' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_server_dh_params', - 'Source' => 'psk.c', - 'SourceLine' => '376' - }, - '1649652' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_psk_client_get_hint', - 'Source' => 'psk.c', - 'SourceLine' => '350' - }, - '1649844' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_psk_server_get_username', - 'Source' => 'psk.c', - 'SourceLine' => '322' - }, - '1650036' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '1640600' - }, - '1' => { - 'name' => 'func', - 'type' => '1649101' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_client_credentials_function', - 'Source' => 'psk.c', - 'SourceLine' => '304' - }, - '1650095' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '1640497' - }, - '1' => { - 'name' => 'func', - 'type' => '1649107' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_set_server_credentials_function', - 'Source' => 'psk.c', - 'SourceLine' => '275' - }, - '1650154' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1640497' - }, - '1' => { - 'name' => 'hint', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_psk_set_server_credentials_hint', - 'Source' => 'psk.c', - 'SourceLine' => '242' - }, - '1650343' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1640497' - }, - '1' => { - 'name' => 'password_file', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_psk_set_server_credentials_file', - 'Source' => 'psk.c', - 'SourceLine' => '202' - }, - '1650528' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1650597' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_psk_allocate_server_credentials', - 'Source' => 'psk.c', - 'SourceLine' => '177' - }, - '1650603' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1640497' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_free_server_credentials', - 'Source' => 'psk.c', - 'SourceLine' => '156' - }, - '1650677' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '1640600' - }, - '1' => { - 'name' => 'username', - 'type' => '110' - }, - '2' => { - 'name' => 'key', - 'type' => '4430' - }, - '3' => { - 'name' => 'flags', - 'type' => '1640697' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_psk_set_client_credentials', - 'Source' => 'psk.c', - 'SourceLine' => '92' - }, - '1651235' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1651304' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_psk_allocate_client_credentials', - 'Source' => 'psk.c', - 'SourceLine' => '62' - }, - '1651310' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '1640600' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_psk_free_client_credentials', - 'Source' => 'psk.c', - 'SourceLine' => '45' - }, - '16747' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_dtls_get_data_mtu', - 'Source' => 'dtls.c', - 'SourceLine' => '668' - }, - '169331' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2706', - 'ShortName' => 'gnutls_handshake_get_last_out', - 'Source' => 'handshake.c', - 'SourceLine' => '3464' - }, - '169380' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2706', - 'ShortName' => 'gnutls_handshake_get_last_in', - 'Source' => 'handshake.c', - 'SourceLine' => '3444' - }, - '169429' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'max', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_max_packet_length', - 'Source' => 'handshake.c', - 'SourceLine' => '3423' - }, - '1697616' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '110' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_x509_dn_oid_name', - 'Source' => 'common.c', - 'SourceLine' => '262' - }, - '1697799' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_oid_known', - 'Source' => 'common.c', - 'SourceLine' => '232' - }, - '174532' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'ms', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_timeout', - 'Source' => 'handshake.c', - 'SourceLine' => '2663' - }, - '1776219' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crls', - 'type' => '906321' - }, - '1' => { - 'name' => 'crl_max', - 'type' => '22864' - }, - '2' => { - 'name' => 'data', - 'type' => '4430' - }, - '3' => { - 'name' => 'format', - 'type' => '245081' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_list_import', - 'Source' => 'crl.c', - 'SourceLine' => '1349' - }, - '1776909' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crls', - 'type' => '1777253' - }, - '1' => { - 'name' => 'size', - 'type' => '22864' - }, - '2' => { - 'name' => 'data', - 'type' => '4430' - }, - '3' => { - 'name' => 'format', - 'type' => '245081' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_list_import2', - 'Source' => 'crl.c', - 'SourceLine' => '1288' - }, - '1777280' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '216' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_extension_data', - 'Source' => 'crl.c', - 'SourceLine' => '1240' - }, - '1777703' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7722' - }, - '4' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_extension_info', - 'Source' => 'crl.c', - 'SourceLine' => '1168' - }, - '1778304' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_extension_oid', - 'Source' => 'crl.c', - 'SourceLine' => '1122' - }, - '1778570' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'ret', - 'type' => '216' - }, - '2' => { - 'name' => 'ret_size', - 'type' => '7722' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_number', - 'Source' => 'crl.c', - 'SourceLine' => '1062' - }, - '1778944' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'id', - 'type' => '216' - }, - '2' => { - 'name' => 'id_size', - 'type' => '7722' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_authority_key_id', - 'Source' => 'crl.c', - 'SourceLine' => '1015' - }, - '1779510' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'alt', - 'type' => '216' - }, - '3' => { - 'name' => 'alt_size', - 'type' => '7722' - }, - '4' => { - 'name' => 'alt_type', - 'type' => '22864' - }, - '5' => { - 'name' => 'serial', - 'type' => '216' - }, - '6' => { - 'name' => 'serial_size', - 'offset' => '0', - 'type' => '7722' - }, - '7' => { - 'name' => 'critical', - 'offset' => '8', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_authority_key_gn_serial', - 'Source' => 'crl.c', - 'SourceLine' => '945' - }, - '1780674' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_export2', - 'Source' => 'crl.c', - 'SourceLine' => '833' - }, - '1780762' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'output_data', - 'type' => '216' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_export', - 'Source' => 'crl.c', - 'SourceLine' => '801' - }, - '1781031' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_raw_issuer_dn', - 'Source' => 'crl.c', - 'SourceLine' => '770' - }, - '1781213' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'iter', - 'type' => '1781941' - }, - '2' => { - 'name' => 'serial', - 'type' => '3881' - }, - '3' => { - 'name' => 'serial_size', - 'type' => '7722' - }, - '4' => { - 'name' => 't', - 'type' => '4570' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_iter_crt_serial', - 'Source' => 'crl.c', - 'SourceLine' => '693' - }, - '1781968' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '1767416' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crl_iter_deinit', - 'Source' => 'crl.c', - 'SourceLine' => '663' - }, - '1782032' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'serial', - 'type' => '3881' - }, - '3' => { - 'name' => 'serial_size', - 'type' => '7722' - }, - '4' => { - 'name' => 't', - 'type' => '4570' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_crt_serial', - 'Source' => 'crl.c', - 'SourceLine' => '617' - }, - '1782564' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_crt_count', - 'Source' => 'crl.c', - 'SourceLine' => '576' - }, - '1782781' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_x509_crl_get_next_update', - 'Source' => 'crl.c', - 'SourceLine' => '556' - }, - '1782952' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_x509_crl_get_this_update', - 'Source' => 'crl.c', - 'SourceLine' => '535' - }, - '1783123' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_version', - 'Source' => 'crl.c', - 'SourceLine' => '506' - }, - '1783429' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'sig', - 'type' => '240' - }, - '2' => { - 'name' => 'sizeof_sig', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_signature', - 'Source' => 'crl.c', - 'SourceLine' => '456' - }, - '1783872' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'oid', - 'type' => '240' - }, - '2' => { - 'name' => 'oid_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_signature_oid', - 'Source' => 'crl.c', - 'SourceLine' => '419' - }, - '1784282' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_signature_algorithm', - 'Source' => 'crl.c', - 'SourceLine' => '374' - }, - '1784572' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_issuer_dn3', - 'Source' => 'crl.c', - 'SourceLine' => '352' - }, - '1784783' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_issuer_dn2', - 'Source' => 'crl.c', - 'SourceLine' => '319' - }, - '1784976' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_dn_oid', - 'Source' => 'crl.c', - 'SourceLine' => '287' - }, - '1785211' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '145' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '4' => { - 'name' => 'buf', - 'type' => '216' - }, - '5' => { - 'name' => 'sizeof_buf', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_issuer_dn_by_oid', - 'Source' => 'crl.c', - 'SourceLine' => '247' - }, - '1785595' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '545129' - }, - '1' => { - 'name' => 'buf', - 'type' => '240' - }, - '2' => { - 'name' => 'sizeof_buf', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_issuer_dn', - 'Source' => 'crl.c', - 'SourceLine' => '207' - }, - '1785807' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_import', - 'Source' => 'crl.c', - 'SourceLine' => '120' - }, - '1803481' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'issuer', - 'type' => '156760' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '156725' - }, - '3' => { - 'name' => 'dig', - 'type' => '2533' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_privkey_sign', - 'Source' => 'crl_write.c', - 'SourceLine' => '484' - }, - '1803605' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'nr', - 'type' => '334' - }, - '2' => { - 'name' => 'nr_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_number', - 'Source' => 'crl_write.c', - 'SourceLine' => '412' - }, - '1804122' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'id', - 'type' => '334' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_authority_key_id', - 'Source' => 'crl_write.c', - 'SourceLine' => '348' - }, - '1804675' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'crt', - 'type' => '156760' - }, - '2' => { - 'name' => 'revocation_time', - 'type' => '268' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_crt', - 'Source' => 'crl_write.c', - 'SourceLine' => '280' - }, - '1805069' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'serial', - 'type' => '334' - }, - '2' => { - 'name' => 'serial_size', - 'type' => '52' - }, - '3' => { - 'name' => 'revocation_time', - 'type' => '268' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_crt_serial', - 'Source' => 'crl_write.c', - 'SourceLine' => '219' - }, - '1805175' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'exp_time', - 'type' => '268' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_next_update', - 'Source' => 'crl_write.c', - 'SourceLine' => '196' - }, - '1805386' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'act_time', - 'type' => '268' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_this_update', - 'Source' => 'crl_write.c', - 'SourceLine' => '170' - }, - '1805700' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'issuer', - 'type' => '156760' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '156748' - }, - '3' => { - 'name' => 'dig', - 'type' => '2533' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_sign2', - 'Source' => 'crl_write.c', - 'SourceLine' => '99' - }, - '1805835' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'version', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_set_version', - 'Source' => 'crl_write.c', - 'SourceLine' => '53' - }, - '1822530' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'buf', - 'type' => '334' - }, - '3' => { - 'name' => 'sizeof_buf', - 'type' => '52' - }, - '4' => { - 'name' => 'critical', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_extension_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '3095' - }, - '1822819' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'features', - 'type' => '893892' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_tlsfeatures', - 'Source' => 'crq.c', - 'SourceLine' => '3051' - }, - '1823121' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'features', - 'type' => '893892' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_tlsfeatures', - 'Source' => 'crq.c', - 'SourceLine' => '2999' - }, - '1823505' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'activation', - 'type' => '268' - }, - '2' => { - 'name' => 'expiration', - 'type' => '268' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_private_key_usage_period', - 'Source' => 'crq.c', - 'SourceLine' => '2924' - }, - '1824168' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_verify', - 'Source' => 'crq.c', - 'SourceLine' => '2851' - }, - '1824873' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'key', - 'type' => '156725' - }, - '2' => { - 'name' => 'dig', - 'type' => '2533' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_privkey_sign', - 'Source' => 'crq.c', - 'SourceLine' => '2768' - }, - '1825009' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'output_data', - 'type' => '3881' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_key_id', - 'Source' => 'crq.c', - 'SourceLine' => '2713' - }, - '1825384' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'oid', - 'type' => '334' - }, - '2' => { - 'name' => 'critical', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_key_purpose_oid', - 'Source' => 'crq.c', - 'SourceLine' => '2586' - }, - '1826615' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7722' - }, - '4' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_key_purpose_oid', - 'Source' => 'crq.c', - 'SourceLine' => '2483' - }, - '1828017' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'ca', - 'type' => '145' - }, - '2' => { - 'name' => 'pathLenConstraint', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_basic_constraints', - 'Source' => 'crq.c', - 'SourceLine' => '2385' - }, - '1828348' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'data', - 'type' => '334' - }, - '3' => { - 'name' => 'data_size', - 'type' => '145' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_subject_alt_othername', - 'Source' => 'crq.c', - 'SourceLine' => '2273' - }, - '1829084' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'nt', - 'type' => '546645' - }, - '2' => { - 'name' => 'data', - 'type' => '334' - }, - '3' => { - 'name' => 'data_size', - 'type' => '145' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_subject_alt_name', - 'Source' => 'crq.c', - 'SourceLine' => '2164' - }, - '1829680' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '145' - }, - '3' => { - 'name' => 'output', - 'type' => '4531' - }, - '4' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_extension_by_oid2', - 'Source' => 'crq.c', - 'SourceLine' => '2097' - }, - '1830100' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '145' - }, - '3' => { - 'name' => 'buf', - 'type' => '216' - }, - '4' => { - 'name' => 'buf_size', - 'type' => '7722' - }, - '5' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_extension_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '2038' - }, - '1830545' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'ret', - 'type' => '216' - }, - '3' => { - 'name' => 'ret_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_subject_alt_othername_oid', - 'Source' => 'crq.c', - 'SourceLine' => '2008' - }, - '1830696' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'ret', - 'type' => '216' - }, - '3' => { - 'name' => 'ret_size', - 'type' => '7722' - }, - '4' => { - 'name' => 'ret_type', - 'type' => '22864' - }, - '5' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_subject_alt_name', - 'Source' => 'crq.c', - 'SourceLine' => '1969' - }, - '1831908' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'critical', - 'type' => '22864' - }, - '2' => { - 'name' => 'ca', - 'type' => '22864' - }, - '3' => { - 'name' => 'pathlen', - 'type' => '17851' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_basic_constraints', - 'Source' => 'crq.c', - 'SourceLine' => '1827' - }, - '1832596' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_extension_data2', - 'Source' => 'crq.c', - 'SourceLine' => '1672' - }, - '1833456' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '216' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_extension_data', - 'Source' => 'crq.c', - 'SourceLine' => '1634' - }, - '1833832' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7722' - }, - '4' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_extension_info', - 'Source' => 'crq.c', - 'SourceLine' => '1509' - }, - '1835132' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '216' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_attribute_data', - 'Source' => 'crq.c', - 'SourceLine' => '1454' - }, - '1835534' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_attribute_info', - 'Source' => 'crq.c', - 'SourceLine' => '1400' - }, - '1835936' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'oid', - 'type' => '240' - }, - '2' => { - 'name' => 'oid_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_pk_oid', - 'Source' => 'crq.c', - 'SourceLine' => '1350' - }, - '1836346' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'oid', - 'type' => '240' - }, - '2' => { - 'name' => 'oid_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_signature_oid', - 'Source' => 'crq.c', - 'SourceLine' => '1310' - }, - '1836865' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_export2', - 'Source' => 'crq.c', - 'SourceLine' => '1250' - }, - '1837111' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'output_data', - 'type' => '216' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_export', - 'Source' => 'crq.c', - 'SourceLine' => '1217' - }, - '1837464' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'key', - 'type' => '156748' - }, - '2' => { - 'name' => 'dig', - 'type' => '2533' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_sign2', - 'Source' => 'crq.c', - 'SourceLine' => '1140' - }, - '1837596' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'pass', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_challenge_password', - 'Source' => 'crq.c', - 'SourceLine' => '1071' - }, - '1838321' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'm', - 'type' => '4430' - }, - '2' => { - 'name' => 'e', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_key_rsa_raw', - 'Source' => 'crq.c', - 'SourceLine' => '1008' - }, - '1838833' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'm', - 'type' => '4531' - }, - '2' => { - 'name' => 'e', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_key_rsa_raw', - 'Source' => 'crq.c', - 'SourceLine' => '948' - }, - '1839437' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'key', - 'type' => '156748' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_key', - 'Source' => 'crq.c', - 'SourceLine' => '910' - }, - '1839635' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_version', - 'Source' => 'crq.c', - 'SourceLine' => '874' - }, - '1839735' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'version', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_version', - 'Source' => 'crq.c', - 'SourceLine' => '840' - }, - '1839814' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '334' - }, - '4' => { - 'name' => 'sizeof_data', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_dn_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '815' - }, - '1839984' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '145' - }, - '3' => { - 'name' => 'buf', - 'type' => '216' - }, - '4' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_attribute_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '771' - }, - '1840098' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'buf', - 'type' => '216' - }, - '3' => { - 'name' => 'buf_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_attribute_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '732' - }, - '1840762' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'pass', - 'type' => '240' - }, - '2' => { - 'name' => 'pass_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_challenge_password', - 'Source' => 'crq.c', - 'SourceLine' => '550' - }, - '1841364' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'sizeof_oid', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_dn_oid', - 'Source' => 'crq.c', - 'SourceLine' => '403' - }, - '1841599' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '145' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '4' => { - 'name' => 'buf', - 'type' => '216' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_dn_by_oid', - 'Source' => 'crq.c', - 'SourceLine' => '366' - }, - '1841992' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_dn3', - 'Source' => 'crq.c', - 'SourceLine' => '328' - }, - '1842203' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_dn2', - 'Source' => 'crq.c', - 'SourceLine' => '296' - }, - '1842396' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'buf', - 'type' => '240' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_dn', - 'Source' => 'crq.c', - 'SourceLine' => '266' - }, - '1842613' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'activation', - 'type' => '4570' - }, - '2' => { - 'name' => 'expiration', - 'type' => '4570' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_private_key_usage_period', - 'Source' => 'crq.c', - 'SourceLine' => '195' - }, - '1843318' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_get_signature_algorithm', - 'Source' => 'crq.c', - 'SourceLine' => '175' - }, - '1843394' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_import', - 'Source' => 'crq.c', - 'SourceLine' => '110' - }, - '1843972' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crq_deinit', - 'Source' => 'crq.c', - 'SourceLine' => '79' - }, - '1844058' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1844296' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_init', - 'Source' => 'crq.c', - 'SourceLine' => '50' - }, - '1849004' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'f', - 'type' => '893892' - }, - '1' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_tlsfeatures', - 'Source' => 'x509_ext.c', - 'SourceLine' => '3316' - }, - '1849015' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'f', - 'type' => '893892' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_tlsfeatures', - 'Source' => 'x509_ext.c', - 'SourceLine' => '3266' - }, - '1849248' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'usage', - 'type' => '145' - }, - '1' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_key_usage', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1147' - }, - '1849259' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ca', - 'type' => '145' - }, - '1' => { - 'name' => 'pathlen', - 'type' => '75' - }, - '2' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_basic_constraints', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1373' - }, - '1849319' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'ca', - 'type' => '22864' - }, - '2' => { - 'name' => 'pathlen', - 'type' => '17851' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_basic_constraints', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1305' - }, - '1849330' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'key_usage', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_key_usage', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1095' - }, - '1864717' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'idn', - 'type' => '4430' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'buf', - 'type' => '216' - }, - '3' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_rdn_get_oid', - 'Source' => 'dn.c', - 'SourceLine' => '959' - }, - '1865266' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'idn', - 'type' => '4430' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '145' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '4' => { - 'name' => 'buf', - 'type' => '216' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_rdn_get_by_oid', - 'Source' => 'dn.c', - 'SourceLine' => '903' - }, - '1866039' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'idn', - 'type' => '4430' - }, - '1' => { - 'name' => 'str', - 'type' => '4531' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_rdn_get2', - 'Source' => 'dn.c', - 'SourceLine' => '855' - }, - '1866564' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'idn', - 'type' => '4430' - }, - '1' => { - 'name' => 'buf', - 'type' => '240' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_rdn_get', - 'Source' => 'dn.c', - 'SourceLine' => '797' - }, - '188496' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_rehandshake', - 'Source' => 'handshake.c', - 'SourceLine' => '2423' - }, - '1898982' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_get_extension_data2', - 'Source' => 'extensions.c', - 'SourceLine' => '216' - }, - '1899266' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_data2', - 'Source' => 'extensions.c', - 'SourceLine' => '180' - }, - '1901191' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '2524447' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aki_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '704' - }, - '1901202' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1890260' - }, - '1' => { - 'name' => 'id', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aki_set_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '763' - }, - '1901213' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1890260' - }, - '1' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_authority_key_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1000' - }, - '1901224' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1890260' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_aki_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '721' - }, - '1901235' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '2530214' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_subject_alt_names_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '51' - }, - '1901246' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '1890238' - }, - '1' => { - 'name' => 'san_type', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'type' => '4430' - }, - '3' => { - 'name' => 'othername_oid', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_subject_alt_names_set', - 'Source' => 'x509_ext.c', - 'SourceLine' => '171' - }, - '1901257' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '1890238' - }, - '1' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_subject_alt_names', - 'Source' => 'x509_ext.c', - 'SourceLine' => '298' - }, - '1901268' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '1890238' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_subject_alt_names_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '81' - }, - '1901279' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'sans', - 'type' => '1890238' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_subject_alt_names', - 'Source' => 'x509_ext.c', - 'SourceLine' => '215' - }, - '1936983' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'exts', - 'type' => '1509782' - }, - '1' => { - 'name' => 'exts_size', - 'type' => '145' - }, - '2' => { - 'name' => 'format', - 'type' => '1923523' - }, - '3' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_print', - 'Source' => 'output.c', - 'SourceLine' => '2588' - }, - '1937231' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pubkey', - 'type' => '4454' - }, - '1' => { - 'name' => 'format', - 'type' => '1923523' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_print', - 'Source' => 'output.c', - 'SourceLine' => '2556' - }, - '1937924' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'format', - 'type' => '1923523' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_print', - 'Source' => 'output.c', - 'SourceLine' => '2495' - }, - '1941674' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'format', - 'type' => '1923523' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_print', - 'Source' => 'output.c', - 'SourceLine' => '2231' - }, - '1946945' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'format', - 'type' => '1923523' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_print', - 'Source' => 'output.c', - 'SourceLine' => '1873' - }, - '1976372' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2916' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pk_algorithm_get_name', - 'Source' => 'publickey.c', - 'SourceLine' => '119' - }, - '1976736' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'algo', - 'type' => '2533' - }, - '2' => { - 'name' => 'buf', - 'type' => '216' - }, - '3' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_fingerprint', - 'Source' => 'x509.c', - 'SourceLine' => '2623' - }, - '1976797' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_dn3', - 'Source' => 'x509.c', - 'SourceLine' => '741' - }, - '1976808' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn3', - 'Source' => 'x509.c', - 'SourceLine' => '559' - }, - '1976855' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'critical', - 'type' => '22864' - }, - '2' => { - 'name' => 'pathlen', - 'type' => '17851' - }, - '3' => { - 'name' => 'policyLanguage', - 'type' => '1030' - }, - '4' => { - 'name' => 'policy', - 'type' => '1030' - }, - '5' => { - 'name' => 'sizeof_policy', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_proxy', - 'Source' => 'x509.c', - 'SourceLine' => '2093' - }, - '1976878' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'curve', - 'type' => '532314' - }, - '2' => { - 'name' => 'x', - 'type' => '4531' - }, - '3' => { - 'name' => 'y', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_pk_ecc_raw', - 'Source' => 'x509.c', - 'SourceLine' => '3259' - }, - '1976914' => { - 'Header' => 'gnutls.h', - 'Line' => '977', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2916' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pk_get_name', - 'Source' => 'publickey.c', - 'SourceLine' => '200' - }, - '1976937' => { - 'Header' => 'x509.h', - 'Line' => '206', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_version' - }, - '1976948' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'sig', - 'type' => '240' - }, - '2' => { - 'name' => 'sig_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_signature', - 'Source' => 'x509.c', - 'SourceLine' => '948' - }, - '1976970' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'buf', - 'type' => '240' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_unique_id', - 'Source' => 'x509.c', - 'SourceLine' => '3647' - }, - '1976982' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'buf', - 'type' => '240' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject_unique_id', - 'Source' => 'x509.c', - 'SourceLine' => '3597' - }, - '1977038' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algo', - 'type' => '2916' - }, - '1' => { - 'name' => 'bits', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '3300', - 'ShortName' => 'gnutls_pk_bits_to_sec_param', - 'Source' => 'secparams.c', - 'SourceLine' => '180' - }, - '1977050' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'param', - 'type' => '3300' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_sec_param_get_name', - 'Source' => 'secparams.c', - 'SourceLine' => '152' - }, - '1977098' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7722' - }, - '4' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_info', - 'Source' => 'x509.c', - 'SourceLine' => '2398' - }, - '1977110' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '2515899' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_policies_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1688' - }, - '1977121' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'policies', - 'type' => '1936596' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_policies', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1814' - }, - '1977132' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1936596' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'policy', - 'type' => '2335241' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_policies_get', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1730' - }, - '1977143' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1936596' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_policies_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1705' - }, - '1977180' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'id', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_subject_key_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '602' - }, - '1977191' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'activation', - 'type' => '4570' - }, - '2' => { - 'name' => 'expiration', - 'type' => '4570' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_private_key_usage_period', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1198' - }, - '1977213' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '2504149' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_key_purpose_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2887' - }, - '1977224' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'p', - 'type' => '1936574' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_key_purposes', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2987' - }, - '1977235' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1936574' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_key_purpose_get', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2962' - }, - '1977246' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1936574' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_key_purpose_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2915' - }, - '1977257' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '2511039' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_dist_points_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2176' - }, - '1977268' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'cdp', - 'type' => '1936508' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_crl_dist_points', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2314' - }, - '1977279' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1936508' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'type', - 'type' => '22864' - }, - '3' => { - 'name' => 'san', - 'type' => '4531' - }, - '4' => { - 'name' => 'reasons', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_dist_points_get', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2219' - }, - '1977290' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1936508' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crl_dist_points_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2193' - }, - '1977301' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'pathlen', - 'type' => '17851' - }, - '2' => { - 'name' => 'policyLanguage', - 'type' => '1030' - }, - '3' => { - 'name' => 'policy', - 'type' => '1030' - }, - '4' => { - 'name' => 'sizeof_policy', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_proxy', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1446' - }, - '1977312' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '2508025' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aia_init', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2534' - }, - '1977323' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'aia', - 'type' => '1936530' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_aia', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2762' - }, - '1977334' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1936530' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '4531' - }, - '3' => { - 'name' => 'san_type', - 'type' => '22864' - }, - '4' => { - 'name' => 'san', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aia_get', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2584' - }, - '1977345' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1936530' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_aia_deinit', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2551' - }, - '1977356' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '2431798' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_name_constraints_init', - 'Source' => 'name_constraints.c', - 'SourceLine' => '516' - }, - '1977368' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'nc', - 'type' => '1927293' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_name_constraints', - 'Source' => 'x509_ext.c', - 'SourceLine' => '367' - }, - '1977391' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1927293' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'type', - 'type' => '22864' - }, - '3' => { - 'name' => 'name', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_name_constraints_get_permitted' - }, - '1977403' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1927293' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'type', - 'type' => '22864' - }, - '3' => { - 'name' => 'name', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_name_constraints_get_excluded' - }, - '1977415' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1927293' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_name_constraints_deinit', - 'Source' => 'name_constraints.c', - 'SourceLine' => '498' - }, - '1977486' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'oid', - 'type' => '110' - }, - '1' => { - 'name' => 'othername', - 'type' => '4430' - }, - '2' => { - 'name' => 'virt_type', - 'type' => '22864' - }, - '3' => { - 'name' => 'virt', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_othername_to_virtual', - 'Source' => 'virt-san.c', - 'SourceLine' => '143' - }, - '1977519' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'sans', - 'type' => '1890238' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'san_type', - 'type' => '22864' - }, - '3' => { - 'name' => 'san', - 'type' => '4531' - }, - '4' => { - 'name' => 'othername_oid', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_subject_alt_names_get', - 'Source' => 'x509_ext.c', - 'SourceLine' => '104' - }, - '1977541' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1890260' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'san_type', - 'type' => '22864' - }, - '3' => { - 'name' => 'san', - 'type' => '4531' - }, - '4' => { - 'name' => 'othername_oid', - 'type' => '4531' - }, - '5' => { - 'name' => 'serial', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aki_get_cert_issuer', - 'Source' => 'x509_ext.c', - 'SourceLine' => '845' - }, - '1977563' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '4430' - }, - '1' => { - 'name' => 'aki', - 'type' => '1890260' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_import_authority_key_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '894' - }, - '1977574' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1890260' - }, - '1' => { - 'name' => 'id', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aki_get_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '742' - }, - '1977596' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_signature_algorithm', - 'Source' => 'x509.c', - 'SourceLine' => '850' - }, - '1977607' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '240' - }, - '2' => { - 'name' => 'oid_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_signature_oid', - 'Source' => 'x509.c', - 'SourceLine' => '871' - }, - '1977618' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '240' - }, - '2' => { - 'name' => 'oid_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_pk_oid', - 'Source' => 'x509.c', - 'SourceLine' => '911' - }, - '1993151' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '903650' - }, - '1' => { - 'name' => 'mac', - 'type' => '22864' - }, - '2' => { - 'name' => 'salt', - 'type' => '216' - }, - '3' => { - 'name' => 'salt_size', - 'type' => '22864' - }, - '4' => { - 'name' => 'iter_count', - 'type' => '22864' - }, - '5' => { - 'name' => 'oid', - 'type' => '1030' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_mac_info', - 'Source' => 'pkcs12.c', - 'SourceLine' => '1844' - }, - '1999996' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '903650' - }, - '1' => { - 'name' => 'pass', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_generate_mac', - 'Source' => 'pkcs12.c', - 'SourceLine' => '993' - }, - '2000096' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '903650' - }, - '1' => { - 'name' => 'mac', - 'type' => '2423' - }, - '2' => { - 'name' => 'pass', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_generate_mac2', - 'Source' => 'pkcs12.c', - 'SourceLine' => '863' - }, - '2001333' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '903650' - }, - '1' => { - 'name' => 'bag', - 'type' => '1992831' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_set_bag', - 'Source' => 'pkcs12.c', - 'SourceLine' => '739' - }, - '2002916' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '903650' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - }, - '2' => { - 'name' => 'bag', - 'type' => '1992831' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_get_bag', - 'Source' => 'pkcs12.c', - 'SourceLine' => '604' - }, - '2006277' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '903650' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_export2', - 'Source' => 'pkcs12.c', - 'SourceLine' => '315' - }, - '2006502' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '903650' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'output_data', - 'type' => '216' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_export', - 'Source' => 'pkcs12.c', - 'SourceLine' => '283' - }, - '2009138' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_get_type', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '98' - }, - '2009149' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_get_data', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '143' - }, - '2009172' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import_pkcs8', - 'Source' => 'privkey_pkcs8.c', - 'SourceLine' => '1150' - }, - '2009310' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '2031104' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_init', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '47' - }, - '2009321' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'pass', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_decrypt', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '663' - }, - '2009332' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_get_count', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '119' - }, - '2009343' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs12_bag_deinit', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '78' - }, - '2025210' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'privkey', - 'type' => '156748' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_privkey', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '873' - }, - '2025724' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'schema', - 'type' => '22864' - }, - '2' => { - 'name' => 'cipher', - 'type' => '22864' - }, - '3' => { - 'name' => 'salt', - 'type' => '216' - }, - '4' => { - 'name' => 'salt_size', - 'type' => '22864' - }, - '5' => { - 'name' => 'iter_count', - 'type' => '22864' - }, - '6' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '1030' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_enc_info', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '809' - }, - '2026161' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'pass', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_encrypt', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '716' - }, - '2027105' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_friendly_name', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '628' - }, - '2027307' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'name', - 'type' => '1030' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_get_friendly_name', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '594' - }, - '2027467' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'id', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_get_key_id', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '561' - }, - '2027647' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'id', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_key_id', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '520' - }, - '2027863' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'crl', - 'type' => '891381' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_crl', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '481' - }, - '2028149' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'crt', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_crt', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '445' - }, - '2028435' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'bag', - 'type' => '1992831' - }, - '1' => { - 'name' => 'type', - 'type' => '1992955' - }, - '2' => { - 'name' => 'data', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_bag_set_data', - 'Source' => 'pkcs12_bag.c', - 'SourceLine' => '388' - }, - '2031240' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export2_pkcs8', - 'Source' => 'privkey_pkcs8.c', - 'SourceLine' => '575' - }, - '2062777' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'signer', - 'type' => '156760' - }, - '2' => { - 'name' => 'signer_key', - 'type' => '156725' - }, - '3' => { - 'name' => 'data', - 'type' => '4430' - }, - '4' => { - 'name' => 'signed_attrs', - 'type' => '2053813' - }, - '5' => { - 'name' => 'unsigned_attrs', - 'type' => '2053813' - }, - '6' => { - 'name' => 'dig', - 'offset' => '0', - 'type' => '2533' - }, - '7' => { - 'name' => 'flags', - 'offset' => '8', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_sign', - 'Source' => 'pkcs7.c', - 'SourceLine' => '2332' - }, - '2065445' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_delete_crl', - 'Source' => 'pkcs7.c', - 'SourceLine' => '2026' - }, - '2065756' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'crl', - 'type' => '891381' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_set_crl', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1989' - }, - '2066058' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'crl', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_set_crl_raw', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1931' - }, - '2066434' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crl_count', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1902' - }, - '2066658' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'crl', - 'type' => '216' - }, - '3' => { - 'name' => 'crl_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crl_raw', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1867' - }, - '2067075' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'crl', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crl_raw2', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1808' - }, - '2067642' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'indx', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_delete_crt', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1764' - }, - '2067932' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'crt', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_set_crt', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1727' - }, - '2068213' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'crt', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_set_crt_raw', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1658' - }, - '2068698' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_export2', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1571' - }, - '2069020' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'output_data', - 'type' => '216' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_export', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1537' - }, - '2069512' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'tl', - 'type' => '159042' - }, - '2' => { - 'name' => 'vdata', - 'type' => '13501' - }, - '3' => { - 'name' => 'vdata_size', - 'type' => '145' - }, - '4' => { - 'name' => 'idx', - 'type' => '145' - }, - '5' => { - 'name' => 'data', - 'type' => '4430' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_verify', - 'Source' => 'pkcs7.c', - 'SourceLine' => '1403' - }, - '2074454' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'signer', - 'type' => '156760' - }, - '2' => { - 'name' => 'idx', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4430' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_verify_direct', - 'Source' => 'pkcs7.c', - 'SourceLine' => '987' - }, - '2075091' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pkcs7_get_embedded_data_oid', - 'Source' => 'pkcs7.c', - 'SourceLine' => '951' - }, - '2075140' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_embedded_data', - 'Source' => 'pkcs7.c', - 'SourceLine' => '918' - }, - '2077469' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'info', - 'type' => '2072785' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_signature_info', - 'Source' => 'pkcs7.c', - 'SourceLine' => '557' - }, - '2079866' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_signature_count', - 'Source' => 'pkcs7.c', - 'SourceLine' => '525' - }, - '2080233' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'info', - 'type' => '2072785' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs7_signature_info_deinit', - 'Source' => 'pkcs7.c', - 'SourceLine' => '466' - }, - '2080306' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crt_count', - 'Source' => 'pkcs7.c', - 'SourceLine' => '438' - }, - '2080373' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'certificate', - 'type' => '216' - }, - '3' => { - 'name' => 'certificate_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crt_raw', - 'Source' => 'pkcs7.c', - 'SourceLine' => '402' - }, - '2080790' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'cert', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_crt_raw2', - 'Source' => 'pkcs7.c', - 'SourceLine' => '319' - }, - '2081468' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_import', - 'Source' => 'pkcs7.c', - 'SourceLine' => '240' - }, - '2083314' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs7_deinit', - 'Source' => 'pkcs7.c', - 'SourceLine' => '208' - }, - '2083458' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2083649' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_init', - 'Source' => 'pkcs7.c', - 'SourceLine' => '186' - }, - '2088778' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'CA_list', - 'type' => '2286759' - }, - '2' => { - 'name' => 'CA_list_length', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'verify', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_verify', - 'Source' => 'verify.c', - 'SourceLine' => '1316' - }, - '2088825' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'dn', - 'type' => '4430' - }, - '2' => { - 'name' => 'spki', - 'type' => '4430' - }, - '3' => { - 'name' => 'issuer', - 'type' => '158389' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_get_issuer_by_subject_key_id', - 'Source' => 'verify-high.c', - 'SourceLine' => '1081' - }, - '2088837' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'dn', - 'type' => '4430' - }, - '2' => { - 'name' => 'issuer', - 'type' => '158389' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_get_issuer_by_dn', - 'Source' => 'verify-high.c', - 'SourceLine' => '1021' - }, - '2088895' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'algo', - 'type' => '3140' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4430' - }, - '4' => { - 'name' => 'signature', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_verify_data2', - 'Source' => 'x509.c', - 'SourceLine' => '4067' - }, - '2089149' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '2104786' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'data', - 'type' => '4531' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_add_attr', - 'Source' => 'pkcs7-attrs.c', - 'SourceLine' => '54' - }, - '2089172' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '2053813' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs7_attrs_deinit', - 'Source' => 'pkcs7-attrs.c', - 'SourceLine' => '150' - }, - '2104101' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '2053813' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '1030' - }, - '3' => { - 'name' => 'data', - 'type' => '4531' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_get_attr', - 'Source' => 'pkcs7-attrs.c', - 'SourceLine' => '111' - }, - '211279' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2296', - 'ShortName' => 'gnutls_auth_client_get_type', - 'Source' => 'auth.c', - 'SourceLine' => '244' - }, - '211302' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2296', - 'ShortName' => 'gnutls_auth_server_get_type', - 'Source' => 'auth.c', - 'SourceLine' => '224' - }, - '211314' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'retrans_timeout', - 'type' => '145' - }, - '2' => { - 'name' => 'total_timeout', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dtls_set_timeouts', - 'Source' => 'dtls.c', - 'SourceLine' => '466' - }, - '211654' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '695690', - 'ShortName' => 'gnutls_alert_get', - 'Source' => 'alert.c', - 'SourceLine' => '364' - }, - '212348' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2804', - 'ShortName' => 'gnutls_protocol_get_version', - 'Source' => 'state.c', - 'SourceLine' => '1087' - }, - '2137171' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'schema', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pkcs_schema_get_oid', - 'Source' => 'pkcs7-crypt.c', - 'SourceLine' => '199' - }, - '2137240' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'schema', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_pkcs_schema_get_name', - 'Source' => 'pkcs7-crypt.c', - 'SourceLine' => '181' - }, - '2138568' => { - 'Header' => 'crypto.h', - 'Line' => '59', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2122' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_cipher_get_block_size', - 'Source' => 'ciphers.c', - 'SourceLine' => '252' - }, - '2154765' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_fix', - 'Source' => 'privkey.c', - 'SourceLine' => '2071' - }, - '2154841' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'digest', - 'type' => '2533' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4430' - }, - '4' => { - 'name' => 'signature', - 'type' => '216' - }, - '5' => { - 'name' => 'signature_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_sign_data', - 'Source' => 'privkey.c', - 'SourceLine' => '2013' - }, - '2156302' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_verify_params', - 'Source' => 'privkey.c', - 'SourceLine' => '1828' - }, - '2159060' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'algo', - 'type' => '2916' - }, - '2' => { - 'name' => 'bits', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_generate', - 'Source' => 'privkey.c', - 'SourceLine' => '1494' - }, - '2159630' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'm', - 'type' => '4531' - }, - '2' => { - 'name' => 'e', - 'type' => '4531' - }, - '3' => { - 'name' => 'd', - 'type' => '4531' - }, - '4' => { - 'name' => 'p', - 'type' => '4531' - }, - '5' => { - 'name' => 'q', - 'type' => '4531' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export_rsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1403' - }, - '2159820' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'curve', - 'type' => '532314' - }, - '2' => { - 'name' => 'x', - 'type' => '4531' - }, - '3' => { - 'name' => 'y', - 'type' => '4531' - }, - '4' => { - 'name' => 'k', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export_ecc_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1371' - }, - '2160093' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '3300', - 'ShortName' => 'gnutls_x509_privkey_sec_param', - 'Source' => 'privkey.c', - 'SourceLine' => '1343' - }, - '2160197' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export2', - 'Source' => 'privkey.c', - 'SourceLine' => '1308' - }, - '2160581' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'output_data', - 'type' => '216' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export', - 'Source' => 'privkey.c', - 'SourceLine' => '1263' - }, - '2161010' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'bits', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_get_pk_algorithm2', - 'Source' => 'privkey.c', - 'SourceLine' => '1202' - }, - '2162645' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'm', - 'type' => '4430' - }, - '2' => { - 'name' => 'e', - 'type' => '4430' - }, - '3' => { - 'name' => 'd', - 'type' => '4430' - }, - '4' => { - 'name' => 'p', - 'type' => '4430' - }, - '5' => { - 'name' => 'q', - 'type' => '4430' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import_rsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '849' - }, - '2164332' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import', - 'Source' => 'privkey.c', - 'SourceLine' => '497' - }, - '2172348' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import_openssl', - 'Source' => 'privkey_openssl.c', - 'SourceLine' => '138' - }, - '2194719' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '4430' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'schema', - 'type' => '22864' - }, - '3' => { - 'name' => 'cipher', - 'type' => '22864' - }, - '4' => { - 'name' => 'salt', - 'type' => '216' - }, - '5' => { - 'name' => 'salt_size', - 'type' => '22864' - }, - '6' => { - 'name' => 'iter_count', - 'offset' => '0', - 'type' => '22864' - }, - '7' => { - 'name' => 'oid', - 'offset' => '8', - 'type' => '1030' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs8_info', - 'Source' => 'privkey_pkcs8.c', - 'SourceLine' => '463' - }, - '2196637' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'output_data', - 'type' => '216' - }, - '5' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export_pkcs8', - 'Source' => 'privkey_pkcs8.c', - 'SourceLine' => '379' - }, - '2250997' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_crt_check_hostname2', - 'Source' => 'hostname-verify.c', - 'SourceLine' => '120' - }, - '2252602' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_crt_check_hostname', - 'Source' => 'hostname-verify.c', - 'SourceLine' => '45' - }, - '2285386' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'trusted_cas', - 'type' => '2286759' - }, - '2' => { - 'name' => 'tcas_size', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'verify', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_verify', - 'Source' => 'verify.c', - 'SourceLine' => '1390' - }, - '2286884' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - }, - '1' => { - 'name' => 'issuer', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_crl_check_issuer', - 'Source' => 'verify.c', - 'SourceLine' => '1342' - }, - '2287188' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert_list', - 'type' => '2286759' - }, - '1' => { - 'name' => 'cert_list_length', - 'type' => '145' - }, - '2' => { - 'name' => 'CA_list', - 'type' => '2286759' - }, - '3' => { - 'name' => 'CA_list_length', - 'type' => '145' - }, - '4' => { - 'name' => 'CRL_list', - 'type' => '2287463' - }, - '5' => { - 'name' => 'CRL_list_length', - 'type' => '145' - }, - '6' => { - 'name' => 'flags', - 'offset' => '0', - 'type' => '145' - }, - '7' => { - 'name' => 'verify', - 'offset' => '8', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_list_verify', - 'Source' => 'verify.c', - 'SourceLine' => '1261' - }, - '2303461' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_ca_status', - 'Source' => 'x509.c', - 'SourceLine' => '2012' - }, - '2303485' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'crl_list', - 'type' => '2287463' - }, - '2' => { - 'name' => 'crl_list_length', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_check_revocation', - 'Source' => 'x509.c', - 'SourceLine' => '2944' - }, - '2303598' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'critical', - 'type' => '22864' - }, - '2' => { - 'name' => 'ca', - 'type' => '22864' - }, - '3' => { - 'name' => 'pathlen', - 'type' => '17851' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_basic_constraints' - }, - '2303625' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7722' - }, - '4' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_key_purpose_oid', - 'Source' => 'x509.c', - 'SourceLine' => '3135' - }, - '2303720' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'nc', - 'type' => '1927293' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_name_constraints', - 'Source' => 'name_constraints.c', - 'SourceLine' => '453' - }, - '2303767' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1927293' - }, - '1' => { - 'name' => 'type', - 'type' => '546645' - }, - '2' => { - 'name' => 'cert', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_name_constraints_check_crt', - 'Source' => 'name_constraints.c', - 'SourceLine' => '1105' - }, - '2303779' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'feat', - 'type' => '893892' - }, - '1' => { - 'name' => 'cert', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_tlsfeatures_check_crt', - 'Source' => 'tls_features.c', - 'SourceLine' => '216' - }, - '2321511' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'what', - 'type' => '75' - }, - '3' => { - 'name' => 'data', - 'type' => '4531' - }, - '4' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_authority_info_access', - 'Source' => 'x509.c', - 'SourceLine' => '3837' - }, - '2325518' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'certs', - 'type' => '909294' - }, - '1' => { - 'name' => 'size', - 'type' => '22864' - }, - '2' => { - 'name' => 'data', - 'type' => '4430' - }, - '3' => { - 'name' => 'format', - 'type' => '245081' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_list_import2', - 'Source' => 'x509.c', - 'SourceLine' => '3363' - }, - '2325868' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'p', - 'type' => '4531' - }, - '2' => { - 'name' => 'q', - 'type' => '4531' - }, - '3' => { - 'name' => 'g', - 'type' => '4531' - }, - '4' => { - 'name' => 'y', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_pk_dsa_raw', - 'Source' => 'x509.c', - 'SourceLine' => '3307' - }, - '2326795' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'm', - 'type' => '4531' - }, - '2' => { - 'name' => 'e', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_pk_rsa_raw', - 'Source' => 'x509.c', - 'SourceLine' => '3211' - }, - '2327775' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'type' => '216' - }, - '3' => { - 'name' => 'san_size', - 'type' => '7722' - }, - '4' => { - 'name' => 'reason_flags', - 'type' => '22864' - }, - '5' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_crl_dist_points', - 'Source' => 'x509.c', - 'SourceLine' => '3047' - }, - '2328952' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'purpose', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_crt_check_key_purpose', - 'Source' => 'x509.c', - 'SourceLine' => '2967' - }, - '2331968' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'dn', - 'type' => '2332133' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer', - 'Source' => 'x509.c', - 'SourceLine' => '2600' - }, - '2332139' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'dn', - 'type' => '2332133' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject', - 'Source' => 'x509.c', - 'SourceLine' => '2580' - }, - '2332387' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_raw_dn', - 'Source' => 'x509.c', - 'SourceLine' => '2537' - }, - '2332569' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_raw_issuer_dn', - 'Source' => 'x509.c', - 'SourceLine' => '2514' - }, - '2332751' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '216' - }, - '3' => { - 'name' => 'sizeof_data', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_data', - 'Source' => 'x509.c', - 'SourceLine' => '2468' - }, - '2333775' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_oid', - 'Source' => 'x509.c', - 'SourceLine' => '2353' - }, - '2334020' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '145' - }, - '3' => { - 'name' => 'output', - 'type' => '4531' - }, - '4' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_by_oid2', - 'Source' => 'x509.c', - 'SourceLine' => '2307' - }, - '2334280' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '145' - }, - '3' => { - 'name' => 'buf', - 'type' => '216' - }, - '4' => { - 'name' => 'buf_size', - 'type' => '7722' - }, - '5' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_extension_by_oid', - 'Source' => 'x509.c', - 'SourceLine' => '2246' - }, - '2334669' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'policy', - 'type' => '2335241' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_policy', - 'Source' => 'x509.c', - 'SourceLine' => '2171' - }, - '2335247' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'policy', - 'type' => '2335241' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_policy_release', - 'Source' => 'x509.c', - 'SourceLine' => '2142' - }, - '2336069' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'ret', - 'type' => '216' - }, - '3' => { - 'name' => 'ret_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_alt_othername_oid', - 'Source' => 'x509.c', - 'SourceLine' => '1924' - }, - '2336228' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject_alt_othername_oid', - 'Source' => 'x509.c', - 'SourceLine' => '1883' - }, - '2336387' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'ian', - 'type' => '216' - }, - '3' => { - 'name' => 'ian_size', - 'type' => '7722' - }, - '4' => { - 'name' => 'ian_type', - 'type' => '22864' - }, - '5' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_alt_name2', - 'Source' => 'x509.c', - 'SourceLine' => '1842' - }, - '2336580' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'type' => '216' - }, - '3' => { - 'name' => 'san_size', - 'type' => '7722' - }, - '4' => { - 'name' => 'san_type', - 'type' => '22864' - }, - '5' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject_alt_name2', - 'Source' => 'x509.c', - 'SourceLine' => '1804' - }, - '2336773' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'ian', - 'type' => '216' - }, - '3' => { - 'name' => 'ian_size', - 'type' => '7722' - }, - '4' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_alt_name', - 'Source' => 'x509.c', - 'SourceLine' => '1770' - }, - '2340848' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'alt', - 'type' => '216' - }, - '3' => { - 'name' => 'alt_size', - 'type' => '7722' - }, - '4' => { - 'name' => 'alt_type', - 'type' => '22864' - }, - '5' => { - 'name' => 'serial', - 'type' => '216' - }, - '6' => { - 'name' => 'serial_size', - 'offset' => '0', - 'type' => '7722' - }, - '7' => { - 'name' => 'critical', - 'offset' => '8', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_authority_key_gn_serial', - 'Source' => 'x509.c', - 'SourceLine' => '1238' - }, - '2342202' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'activation', - 'type' => '4570' - }, - '2' => { - 'name' => 'expiration', - 'type' => '4570' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_private_key_usage_period', - 'Source' => 'x509.c', - 'SourceLine' => '1068' - }, - '2344280' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_dn_oid', - 'Source' => 'x509.c', - 'SourceLine' => '824' - }, - '2345119' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_dn2', - 'Source' => 'x509.c', - 'SourceLine' => '709' - }, - '2345312' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'buf', - 'type' => '240' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_dn', - 'Source' => 'x509.c', - 'SourceLine' => '678' - }, - '2345529' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '216' - }, - '3' => { - 'name' => 'oid_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn_oid', - 'Source' => 'x509.c', - 'SourceLine' => '643' - }, - '2345764' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '145' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '4' => { - 'name' => 'buf', - 'type' => '216' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn_by_oid', - 'Source' => 'x509.c', - 'SourceLine' => '601' - }, - '2346368' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn2', - 'Source' => 'x509.c', - 'SourceLine' => '526' - }, - '2346561' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'buf', - 'type' => '240' - }, - '2' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_issuer_dn', - 'Source' => 'x509.c', - 'SourceLine' => '494' - }, - '2349674' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert1', - 'type' => '156760' - }, - '1' => { - 'name' => 'der', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_crt_equals2', - 'Source' => 'x509.c', - 'SourceLine' => '137' - }, - '2371006' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '2310683' - }, - '1' => { - 'name' => 'str', - 'type' => '4531' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_get_str2', - 'Source' => 'x509_dn.c', - 'SourceLine' => '694' - }, - '2371238' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '2310683' - }, - '1' => { - 'name' => 'str', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_get_str', - 'Source' => 'x509_dn.c', - 'SourceLine' => '663' - }, - '2371452' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '2310683' - }, - '1' => { - 'name' => 'irdn', - 'type' => '75' - }, - '2' => { - 'name' => 'iava', - 'type' => '75' - }, - '3' => { - 'name' => 'ava', - 'type' => '2372356' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_get_rdn_ava', - 'Source' => 'x509_dn.c', - 'SourceLine' => '559' - }, - '2372383' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '2310683' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_export2', - 'Source' => 'x509_dn.c', - 'SourceLine' => '518' - }, - '2372607' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '2310683' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'output_data', - 'type' => '216' - }, - '3' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_export', - 'Source' => 'x509_dn.c', - 'SourceLine' => '484' - }, - '2372875' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '2310683' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_dn_deinit', - 'Source' => 'x509_dn.c', - 'SourceLine' => '457' - }, - '2372962' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '2310683' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_import', - 'Source' => 'x509_dn.c', - 'SourceLine' => '428' - }, - '2373421' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '2332133' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_init', - 'Source' => 'x509_dn.c', - 'SourceLine' => '396' - }, - '2373666' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dn', - 'type' => '2310683' - }, - '1' => { - 'name' => 'str', - 'type' => '110' - }, - '2' => { - 'name' => 'err', - 'type' => '301410' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_dn_set_str', - 'Source' => 'x509_dn.c', - 'SourceLine' => '371' - }, - '2374059' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '1' => { - 'name' => 'dn', - 'type' => '110' - }, - '2' => { - 'name' => 'err', - 'type' => '301410' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crq_set_dn', - 'Source' => 'x509_dn.c', - 'SourceLine' => '342' - }, - '2374176' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'dn', - 'type' => '110' - }, - '2' => { - 'name' => 'err', - 'type' => '301410' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_issuer_dn', - 'Source' => 'x509_dn.c', - 'SourceLine' => '320' - }, - '2374293' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'dn', - 'type' => '110' - }, - '2' => { - 'name' => 'err', - 'type' => '301410' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_dn', - 'Source' => 'x509_dn.c', - 'SourceLine' => '299' - }, - '2392929' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'policy', - 'type' => '2393514' - }, - '2' => { - 'name' => 'critical', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_policy', - 'Source' => 'x509_write.c', - 'SourceLine' => '1864' - }, - '2393541' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'what', - 'type' => '75' - }, - '2' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_authority_info_access', - 'Source' => 'x509_write.c', - 'SourceLine' => '1781' - }, - '2394375' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'issuer', - 'type' => '156760' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '156725' - }, - '3' => { - 'name' => 'dig', - 'type' => '2533' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_privkey_sign', - 'Source' => 'x509_write.c', - 'SourceLine' => '1730' - }, - '2394499' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '334' - }, - '2' => { - 'name' => 'critical', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_key_purpose_oid', - 'Source' => 'x509_write.c', - 'SourceLine' => '1647' - }, - '2395161' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'id', - 'type' => '334' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_authority_key_id', - 'Source' => 'x509_write.c', - 'SourceLine' => '1584' - }, - '2395678' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'id', - 'type' => '334' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_subject_key_id', - 'Source' => 'x509_write.c', - 'SourceLine' => '1520' - }, - '2396204' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '156760' - }, - '1' => { - 'name' => 'src', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_cpy_crl_dist_points', - 'Source' => 'x509_write.c', - 'SourceLine' => '1472' - }, - '2396519' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'type', - 'type' => '546645' - }, - '2' => { - 'name' => 'data', - 'type' => '334' - }, - '3' => { - 'name' => 'data_size', - 'type' => '145' - }, - '4' => { - 'name' => 'reason_flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_crl_dist_points2', - 'Source' => 'x509_write.c', - 'SourceLine' => '1387' - }, - '2397241' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'type', - 'type' => '546645' - }, - '2' => { - 'name' => 'data_string', - 'type' => '334' - }, - '3' => { - 'name' => 'reason_flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_crl_dist_points', - 'Source' => 'x509_write.c', - 'SourceLine' => '1361' - }, - '2397478' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'id', - 'type' => '334' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_subject_unique_id', - 'Source' => 'x509_write.c', - 'SourceLine' => '1286' - }, - '2397810' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'id', - 'type' => '334' - }, - '2' => { - 'name' => 'id_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_issuer_unique_id', - 'Source' => 'x509_write.c', - 'SourceLine' => '1249' - }, - '2398121' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'serial', - 'type' => '334' - }, - '2' => { - 'name' => 'serial_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_serial', - 'Source' => 'x509_write.c', - 'SourceLine' => '1211' - }, - '2398431' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'exp_time', - 'type' => '268' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_expiration_time', - 'Source' => 'x509_write.c', - 'SourceLine' => '1179' - }, - '2398625' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'act_time', - 'type' => '268' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_activation_time', - 'Source' => 'x509_write.c', - 'SourceLine' => '1151' - }, - '2398819' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'issuer', - 'type' => '156760' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '156748' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_sign', - 'Source' => 'x509_write.c', - 'SourceLine' => '1132' - }, - '2398947' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'issuer', - 'type' => '156760' - }, - '2' => { - 'name' => 'issuer_key', - 'type' => '156748' - }, - '3' => { - 'name' => 'dig', - 'type' => '2533' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_sign2', - 'Source' => 'x509_write.c', - 'SourceLine' => '1078' - }, - '2399091' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'activation', - 'type' => '268' - }, - '2' => { - 'name' => 'expiration', - 'type' => '268' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_private_key_usage_period', - 'Source' => 'x509_write.c', - 'SourceLine' => '1028' - }, - '2399431' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'pathLenConstraint', - 'type' => '75' - }, - '2' => { - 'name' => 'policyLanguage', - 'type' => '110' - }, - '3' => { - 'name' => 'policy', - 'type' => '110' - }, - '4' => { - 'name' => 'sizeof_policy', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_proxy', - 'Source' => 'x509_write.c', - 'SourceLine' => '979' - }, - '2399809' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'data', - 'type' => '334' - }, - '3' => { - 'name' => 'data_size', - 'type' => '145' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_issuer_alt_othername', - 'Source' => 'x509_write.c', - 'SourceLine' => '896' - }, - '2400466' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'data', - 'type' => '334' - }, - '3' => { - 'name' => 'data_size', - 'type' => '145' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_subject_alt_othername', - 'Source' => 'x509_write.c', - 'SourceLine' => '806' - }, - '2401180' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'type', - 'type' => '546645' - }, - '2' => { - 'name' => 'data', - 'type' => '334' - }, - '3' => { - 'name' => 'data_size', - 'type' => '145' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_issuer_alt_name', - 'Source' => 'x509_write.c', - 'SourceLine' => '709' - }, - '2401748' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'type', - 'type' => '546645' - }, - '2' => { - 'name' => 'data', - 'type' => '334' - }, - '3' => { - 'name' => 'data_size', - 'type' => '145' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_subject_alt_name', - 'Source' => 'x509_write.c', - 'SourceLine' => '628' - }, - '2402316' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'type', - 'type' => '546645' - }, - '2' => { - 'name' => 'data_string', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_subject_alternative_name', - 'Source' => 'x509_write.c', - 'SourceLine' => '584' - }, - '2402855' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'ca', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_ca_status', - 'Source' => 'x509_write.c', - 'SourceLine' => '517' - }, - '2402955' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'ca', - 'type' => '145' - }, - '2' => { - 'name' => 'pathLenConstraint', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_basic_constraints', - 'Source' => 'x509_write.c', - 'SourceLine' => '472' - }, - '2403045' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'buf', - 'type' => '334' - }, - '3' => { - 'name' => 'sizeof_buf', - 'type' => '52' - }, - '4' => { - 'name' => 'critical', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_extension_by_oid', - 'Source' => 'x509_write.c', - 'SourceLine' => '431' - }, - '2403313' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'crq', - 'type' => '1046529' - }, - '2' => { - 'name' => 'oid', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_crq_extension_by_oid', - 'Source' => 'x509_write.c', - 'SourceLine' => '338' - }, - '2403514' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'crq', - 'type' => '1046529' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_crq_extensions', - 'Source' => 'x509_write.c', - 'SourceLine' => '316' - }, - '2403619' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'crq', - 'type' => '1046529' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_crq', - 'Source' => 'x509_write.c', - 'SourceLine' => '267' - }, - '2404053' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'key', - 'type' => '156748' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_key', - 'Source' => 'x509_write.c', - 'SourceLine' => '228' - }, - '2404247' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'version', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_version', - 'Source' => 'x509_write.c', - 'SourceLine' => '186' - }, - '2404567' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'eecrt', - 'type' => '156760' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '3' => { - 'name' => 'name', - 'type' => '334' - }, - '4' => { - 'name' => 'sizeof_name', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_proxy_dn', - 'Source' => 'x509_write.c', - 'SourceLine' => '137' - }, - '2404896' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '3' => { - 'name' => 'name', - 'type' => '334' - }, - '4' => { - 'name' => 'sizeof_name', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_issuer_dn_by_oid', - 'Source' => 'x509_write.c', - 'SourceLine' => '103' - }, - '2405060' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '3' => { - 'name' => 'name', - 'type' => '334' - }, - '4' => { - 'name' => 'sizeof_name', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_dn_by_oid', - 'Source' => 'x509_write.c', - 'SourceLine' => '63' - }, - '2407632' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1936596' - }, - '1' => { - 'name' => 'policy', - 'type' => '2393514' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_policies_set', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1767' - }, - '2407643' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'policies', - 'type' => '1936596' - }, - '1' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_policies', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2022' - }, - '2407745' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1936530' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'san_type', - 'type' => '145' - }, - '3' => { - 'name' => 'san', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aia_set', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2659' - }, - '2407756' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aia', - 'type' => '1936530' - }, - '1' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_aia', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2814' - }, - '2407829' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1936574' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_key_purpose_set', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2933' - }, - '2407840' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'p', - 'type' => '1936574' - }, - '1' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_key_purposes', - 'Source' => 'x509_ext.c', - 'SourceLine' => '3061' - }, - '2407874' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'id', - 'type' => '4430' - }, - '1' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_subject_key_id', - 'Source' => 'x509_ext.c', - 'SourceLine' => '655' - }, - '2407948' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1936508' - }, - '1' => { - 'name' => 'type', - 'type' => '546645' - }, - '2' => { - 'name' => 'san', - 'type' => '4430' - }, - '3' => { - 'name' => 'reasons', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_dist_points_set', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2280' - }, - '2407959' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'cdp', - 'type' => '1936508' - }, - '1' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_crl_dist_points', - 'Source' => 'x509_ext.c', - 'SourceLine' => '2422' - }, - '2408026' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'activation', - 'type' => '268' - }, - '1' => { - 'name' => 'expiration', - 'type' => '268' - }, - '2' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_private_key_usage_period', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1251' - }, - '2408037' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'pathLenConstraint', - 'type' => '75' - }, - '1' => { - 'name' => 'policyLanguage', - 'type' => '110' - }, - '2' => { - 'name' => 'policy', - 'type' => '110' - }, - '3' => { - 'name' => 'sizeof_policy', - 'type' => '52' - }, - '4' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_proxy', - 'Source' => 'x509_ext.c', - 'SourceLine' => '1539' - }, - '241675' => { - 'Header' => 'gnutls.h', - 'Line' => '1069', - 'Param' => { - '0' => { - 'name' => 'error', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_strerror', - 'Source' => 'errors.c', - 'SourceLine' => '494' - }, - '241727' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'error', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_perror', - 'Source' => 'errors.c', - 'SourceLine' => '476' - }, - '2426025' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1927293' - }, - '1' => { - 'name' => 'type', - 'type' => '546645' - }, - '2' => { - 'name' => 'name', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_name_constraints_check', - 'Source' => 'name_constraints.c', - 'SourceLine' => '1032' - }, - '2428748' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'nc', - 'type' => '1927293' - }, - '2' => { - 'name' => 'critical', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_name_constraints', - 'Source' => 'name_constraints.c', - 'SourceLine' => '668' - }, - '2429230' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1927293' - }, - '1' => { - 'name' => 'type', - 'type' => '546645' - }, - '2' => { - 'name' => 'name', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_name_constraints_add_excluded', - 'Source' => 'name_constraints.c', - 'SourceLine' => '647' - }, - '2429352' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1927293' - }, - '1' => { - 'name' => 'type', - 'type' => '546645' - }, - '2' => { - 'name' => 'name', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_name_constraints_add_permitted', - 'Source' => 'name_constraints.c', - 'SourceLine' => '623' - }, - '2435801' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'nc', - 'type' => '1927293' - }, - '1' => { - 'name' => 'ext', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_ext_export_name_constraints', - 'Source' => 'x509_ext.c', - 'SourceLine' => '462' - }, - '2452276' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'cert', - 'type' => '156760' - }, - '2' => { - 'name' => 'name', - 'type' => '334' - }, - '3' => { - 'name' => 'name_size', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - }, - '5' => { - 'name' => 'voutput', - 'type' => '22864' - }, - '6' => { - 'name' => 'func', - 'offset' => '0', - 'type' => '2285368' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_verify_named_crt', - 'Source' => 'verify-high.c', - 'SourceLine' => '1433' - }, - '2454265' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'cert_list', - 'type' => '158389' - }, - '2' => { - 'name' => 'cert_list_size', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'voutput', - 'type' => '22864' - }, - '5' => { - 'name' => 'func', - 'type' => '2285368' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_verify_crt', - 'Source' => 'verify-high.c', - 'SourceLine' => '1167' - }, - '2457439' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'cert', - 'type' => '156760' - }, - '2' => { - 'name' => 'name', - 'type' => '334' - }, - '3' => { - 'name' => 'name_size', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_named_crt', - 'Source' => 'verify-high.c', - 'SourceLine' => '641' - }, - '2457842' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'clist', - 'type' => '2286759' - }, - '2' => { - 'name' => 'clist_size', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_remove_cas', - 'Source' => 'verify-high.c', - 'SourceLine' => '561' - }, - '2458298' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '2442897' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_trust_list_iter_deinit', - 'Source' => 'verify-high.c', - 'SourceLine' => '503' - }, - '2458432' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'iter', - 'type' => '2459323' - }, - '2' => { - 'name' => 'crt', - 'type' => '158389' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_iter_get_ca', - 'Source' => 'verify-high.c', - 'SourceLine' => '410' - }, - '2462117' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'email', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_crt_check_email', - 'Source' => 'email-verify.c', - 'SourceLine' => '48' - }, - '2478425' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'ca_file', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_remove_trust_file', - 'Source' => 'verify-high2.c', - 'SourceLine' => '481' - }, - '2481693' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'cas', - 'type' => '4430' - }, - '2' => { - 'name' => 'type', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_remove_trust_mem', - 'Source' => 'verify-high2.c', - 'SourceLine' => '136' - }, - '2499072' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'f', - 'type' => '893892' - }, - '1' => { - 'name' => 'feature', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_tlsfeatures_add', - 'Source' => 'x509_ext.c', - 'SourceLine' => '3376' - }, - '2523271' => { - 'Header' => 'x509-ext.h', - 'Param' => { - '0' => { - 'name' => 'aki', - 'type' => '1890260' - }, - '1' => { - 'name' => 'san_type', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'type' => '4430' - }, - '3' => { - 'name' => 'othername_oid', - 'type' => '110' - }, - '4' => { - 'name' => 'serial', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_aki_set_cert_issuer', - 'Source' => 'x509_ext.c', - 'SourceLine' => '787' - }, - '2563303' => { - 'Header' => 'pkcs7.h', - 'Param' => { - '0' => { - 'name' => 'pkcs7', - 'type' => '2053723' - }, - '1' => { - 'name' => 'format', - 'type' => '1923523' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs7_print', - 'Source' => 'pkcs7-output.c', - 'SourceLine' => '174' - }, - '257428' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '3411' - }, - '1' => { - 'name' => 'prime', - 'type' => '4531' - }, - '2' => { - 'name' => 'generator', - 'type' => '4531' - }, - '3' => { - 'name' => 'bits', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_export_raw', - 'Source' => 'dh.c', - 'SourceLine' => '605' - }, - '257796' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '3411' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_export2_pkcs3', - 'Source' => 'dh.c', - 'SourceLine' => '481' - }, - '259117' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '3411' - }, - '1' => { - 'name' => 'format', - 'type' => '245081' - }, - '2' => { - 'name' => 'params_data', - 'type' => '3881' - }, - '3' => { - 'name' => 'params_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_export_pkcs3', - 'Source' => 'dh.c', - 'SourceLine' => '432' - }, - '259576' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'params', - 'type' => '3411' - }, - '1' => { - 'name' => 'pkcs3_params', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_import_pkcs3', - 'Source' => 'dh.c', - 'SourceLine' => '314' - }, - '2598844' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'features', - 'type' => '893892' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_set_tlsfeatures', - 'Source' => 'tls_features.c', - 'SourceLine' => '175' - }, - '260857' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dparams', - 'type' => '3411' - }, - '1' => { - 'name' => 'bits', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_generate2', - 'Source' => 'dh.c', - 'SourceLine' => '278' - }, - '261217' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dst', - 'type' => '3411' - }, - '1' => { - 'name' => 'src', - 'type' => '3411' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_cpy', - 'Source' => 'dh.c', - 'SourceLine' => '242' - }, - '261281' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '3411' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_dh_params_deinit', - 'Source' => 'dh.c', - 'SourceLine' => '219' - }, - '261417' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '261573' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_init', - 'Source' => 'dh.c', - 'SourceLine' => '200' - }, - '261600' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '3411' - }, - '1' => { - 'name' => 'prime', - 'type' => '4430' - }, - '2' => { - 'name' => 'generator', - 'type' => '4430' - }, - '3' => { - 'name' => 'key_bits', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_import_raw2', - 'Source' => 'dh.c', - 'SourceLine' => '161' - }, - '261920' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '3411' - }, - '1' => { - 'name' => 'key', - 'type' => '156748' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_import_dsa', - 'Source' => 'dh.c', - 'SourceLine' => '117' - }, - '262425' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dh_params', - 'type' => '3411' - }, - '1' => { - 'name' => 'prime', - 'type' => '4430' - }, - '2' => { - 'name' => 'generator', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_params_import_raw', - 'Source' => 'dh.c', - 'SourceLine' => '98' - }, - '263193' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'p', - 'type' => '4531' - }, - '2' => { - 'name' => 'q', - 'type' => '4531' - }, - '3' => { - 'name' => 'g', - 'type' => '4531' - }, - '4' => { - 'name' => 'y', - 'type' => '4531' - }, - '5' => { - 'name' => 'x', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_export_dsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1460' - }, - '2632228' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cidr', - 'type' => '110' - }, - '1' => { - 'name' => 'cidr_rfc5280', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_cidr_to_rfc5280', - 'Source' => 'ip.c', - 'SourceLine' => '208' - }, - '2653402' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'certs', - 'type' => '909294' - }, - '2' => { - 'name' => 'ncerts', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_certs', - 'Source' => 'ocsp.c', - 'SourceLine' => '1810' - }, - '2654005' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'sig', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_signature', - 'Source' => 'ocsp.c', - 'SourceLine' => '1768' - }, - '2654072' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_signature_algorithm', - 'Source' => 'ocsp.c', - 'SourceLine' => '1738' - }, - '2654369' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'critical', - 'type' => '22864' - }, - '2' => { - 'name' => 'nonce', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_nonce', - 'Source' => 'ocsp.c', - 'SourceLine' => '1698' - }, - '2654732' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '4531' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - }, - '4' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_extension', - 'Source' => 'ocsp.c', - 'SourceLine' => '1620' - }, - '2658460' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_ocsp_resp_get_produced', - 'Source' => 'ocsp.c', - 'SourceLine' => '1256' - }, - '2658741' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'type', - 'type' => '145' - }, - '2' => { - 'name' => 'raw', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_responder_raw_id', - 'Source' => 'ocsp.c', - 'SourceLine' => '1188' - }, - '2658877' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_responder2', - 'Source' => 'ocsp.c', - 'SourceLine' => '1155' - }, - '2658964' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'dn', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_responder', - 'Source' => 'ocsp.c', - 'SourceLine' => '1114' - }, - '2659078' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_version', - 'Source' => 'ocsp.c', - 'SourceLine' => '1066' - }, - '2659405' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'response_type_oid', - 'type' => '4531' - }, - '2' => { - 'name' => 'response', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_response', - 'Source' => 'ocsp.c', - 'SourceLine' => '1020' - }, - '2659656' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_status', - 'Source' => 'ocsp.c', - 'SourceLine' => '967' - }, - '2659751' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_randomize_nonce', - 'Source' => 'ocsp.c', - 'SourceLine' => '931' - }, - '2660011' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - }, - '1' => { - 'name' => 'critical', - 'type' => '145' - }, - '2' => { - 'name' => 'nonce', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_set_nonce', - 'Source' => 'ocsp.c', - 'SourceLine' => '883' - }, - '2660163' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - }, - '1' => { - 'name' => 'critical', - 'type' => '22864' - }, - '2' => { - 'name' => 'nonce', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_get_nonce', - 'Source' => 'ocsp.c', - 'SourceLine' => '837' - }, - '2660519' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'critical', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_set_extension', - 'Source' => 'ocsp.c', - 'SourceLine' => '808' - }, - '2660754' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'oid', - 'type' => '4531' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - }, - '4' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_get_extension', - 'Source' => 'ocsp.c', - 'SourceLine' => '732' - }, - '2660893' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - }, - '1' => { - 'name' => 'digest', - 'type' => '2533' - }, - '2' => { - 'name' => 'issuer', - 'type' => '156760' - }, - '3' => { - 'name' => 'cert', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_add_cert', - 'Source' => 'ocsp.c', - 'SourceLine' => '640' - }, - '2661466' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - }, - '1' => { - 'name' => 'digest', - 'type' => '2533' - }, - '2' => { - 'name' => 'issuer_name_hash', - 'type' => '4430' - }, - '3' => { - 'name' => 'issuer_key_hash', - 'type' => '4430' - }, - '4' => { - 'name' => 'serial_number', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_add_cert_id', - 'Source' => 'ocsp.c', - 'SourceLine' => '536' - }, - '2661581' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'digest', - 'type' => '535126' - }, - '3' => { - 'name' => 'issuer_name_hash', - 'type' => '4531' - }, - '4' => { - 'name' => 'issuer_key_hash', - 'type' => '4531' - }, - '5' => { - 'name' => 'serial_number', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_get_cert_id', - 'Source' => 'ocsp.c', - 'SourceLine' => '425' - }, - '2662353' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_get_version', - 'Source' => 'ocsp.c', - 'SourceLine' => '372' - }, - '2662659' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_export', - 'Source' => 'ocsp.c', - 'SourceLine' => '353' - }, - '2662905' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - }, - '1' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_export', - 'Source' => 'ocsp.c', - 'SourceLine' => '321' - }, - '2664207' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_import', - 'Source' => 'ocsp.c', - 'SourceLine' => '179' - }, - '2665200' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_ocsp_req_deinit', - 'Source' => 'ocsp.c', - 'SourceLine' => '88' - }, - '2665286' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2665542' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_init', - 'Source' => 'ocsp.c', - 'SourceLine' => '60' - }, - '2684387' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'format', - 'type' => '2684244' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_print', - 'Source' => 'ocsp_output.c', - 'SourceLine' => '640' - }, - '2690142' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'req', - 'type' => '2650307' - }, - '1' => { - 'name' => 'format', - 'type' => '2684244' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_req_print', - 'Source' => 'ocsp_output.c', - 'SourceLine' => '172' - }, - '2706816' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '257', - 'ShortName' => 'gnutls_record_set_max_size', - 'Source' => 'max_record.c', - 'SourceLine' => '287' - }, - '2707091' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_get_max_size', - 'Source' => 'max_record.c', - 'SourceLine' => '258' - }, - '2739767' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'type', - 'type' => '2728514' - }, - '2' => { - 'name' => 'name', - 'type' => '334' - }, - '3' => { - 'name' => 'name_length', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_server_name_set', - 'Source' => 'server_name.c', - 'SourceLine' => '429' - }, - '2740551' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'data', - 'type' => '216' - }, - '2' => { - 'name' => 'data_length', - 'type' => '7722' - }, - '3' => { - 'name' => 'type', - 'type' => '22864' - }, - '4' => { - 'name' => 'indx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_server_name_get', - 'Source' => 'server_name.c', - 'SourceLine' => '290' - }, - '2757727' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_sign_algorithm_get_client', - 'Source' => 'signature.c', - 'SourceLine' => '480' - }, - '2757776' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_sign_algorithm_get', - 'Source' => 'signature.c', - 'SourceLine' => '463' - }, - '2757825' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'indx', - 'type' => '52' - }, - '2' => { - 'name' => 'algo', - 'type' => '676431' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_sign_algorithm_get_requested', - 'Source' => 'signature.c', - 'SourceLine' => '417' - }, - '2798099' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'key', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_ticket_enable_server', - 'Source' => 'session_ticket.c', - 'SourceLine' => '565' - }, - '2798597' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_ticket_key_generate', - 'Source' => 'session_ticket.c', - 'SourceLine' => '507' - }, - '283585' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '216' - }, - '1' => { - 'name' => 'c', - 'type' => '75' - }, - '2' => { - 'name' => 'size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_memset', - 'Source' => 'safe-memfuncs.c', - 'SourceLine' => '40' - }, - '2852428' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'retrans_timeout', - 'type' => '145' - }, - '2' => { - 'name' => 'total_timeout', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_heartbeat_set_timeouts', - 'Source' => 'heartbeat.c', - 'SourceLine' => '428' - }, - '2852501' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_heartbeat_get_timeout', - 'Source' => 'heartbeat.c', - 'SourceLine' => '400' - }, - '2853999' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_heartbeat_pong', - 'Source' => 'heartbeat.c', - 'SourceLine' => '284' - }, - '2854382' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'data_size', - 'type' => '52' - }, - '2' => { - 'name' => 'max_tries', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_heartbeat_ping', - 'Source' => 'heartbeat.c', - 'SourceLine' => '159' - }, - '2856335' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'type', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_heartbeat_enable', - 'Source' => 'heartbeat.c', - 'SourceLine' => '55' - }, - '2874087' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_status_request_is_checked', - 'Source' => 'status_request.c', - 'SourceLine' => '760' - }, - '2876827' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '156964' - }, - '1' => { - 'name' => 'response_file', - 'type' => '110' - }, - '2' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_ocsp_status_request_file', - 'Source' => 'status_request.c', - 'SourceLine' => '535' - }, - '2877302' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '156964' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'ocsp_func', - 'type' => '4488' - }, - '3' => { - 'name' => 'ptr', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_ocsp_status_request_function2', - 'Source' => 'status_request.c', - 'SourceLine' => '485' - }, - '2877401' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '156964' - }, - '1' => { - 'name' => 'ocsp_func', - 'type' => '4488' - }, - '2' => { - 'name' => 'ptr', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_ocsp_status_request_function', - 'Source' => 'status_request.c', - 'SourceLine' => '446' - }, - '2942615' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'protocols', - 'type' => '4430' - }, - '2' => { - 'name' => 'protocols_size', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_alpn_set_protocols', - 'Source' => 'alpn.c', - 'SourceLine' => '274' - }, - '2943170' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'protocol', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_alpn_get_selected_protocol', - 'Source' => 'alpn.c', - 'SourceLine' => '227' - }, - '2960751' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'key_material', - 'type' => '216' - }, - '2' => { - 'name' => 'key_material_size', - 'type' => '145' - }, - '3' => { - 'name' => 'client_key', - 'type' => '4531' - }, - '4' => { - 'name' => 'client_salt', - 'type' => '4531' - }, - '5' => { - 'name' => 'server_key', - 'type' => '4531' - }, - '6' => { - 'name' => 'server_salt', - 'offset' => '0', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_get_keys', - 'Source' => 'srtp.c', - 'SourceLine' => '550' - }, - '2961585' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'profiles', - 'type' => '110' - }, - '2' => { - 'name' => 'err_pos', - 'type' => '301410' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_set_profile_direct', - 'Source' => 'srtp.c', - 'SourceLine' => '476' - }, - '2962045' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'profile', - 'type' => '2949240' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_set_profile', - 'Source' => 'srtp.c', - 'SourceLine' => '431' - }, - '2962360' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'mki', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_set_mki', - 'Source' => 'srtp.c', - 'SourceLine' => '387' - }, - '2962704' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'mki', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_get_mki', - 'Source' => 'srtp.c', - 'SourceLine' => '346' - }, - '2963054' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'profile', - 'type' => '2963145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_get_selected_profile', - 'Source' => 'srtp.c', - 'SourceLine' => '306' - }, - '2964614' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'profile', - 'type' => '2949240' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_srtp_get_profile_name', - 'Source' => 'srtp.c', - 'SourceLine' => '150' - }, - '2964730' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - }, - '1' => { - 'name' => 'profile', - 'type' => '2963145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srtp_get_profile_id', - 'Source' => 'srtp.c', - 'SourceLine' => '126' - }, - '300405' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'iter', - 'type' => '145' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_priority_string_list', - 'Source' => 'priority.c', - 'SourceLine' => '1746' - }, - '300472' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '287418' - }, - '1' => { - 'name' => 'list', - 'type' => '300537' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_certificate_type_list', - 'Source' => 'priority.c', - 'SourceLine' => '1722' - }, - '300549' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '287418' - }, - '1' => { - 'name' => 'list', - 'type' => '300537' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_sign_list', - 'Source' => 'priority.c', - 'SourceLine' => '1700' - }, - '300614' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '287418' - }, - '1' => { - 'name' => 'list', - 'type' => '300537' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_protocol_list', - 'Source' => 'priority.c', - 'SourceLine' => '1678' - }, - '300679' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '287418' - }, - '1' => { - 'name' => 'list', - 'type' => '300537' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_compression_list', - 'Source' => 'priority.c', - 'SourceLine' => '1656' - }, - '300744' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '287418' - }, - '1' => { - 'name' => 'list', - 'type' => '300537' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_mac_list', - 'Source' => 'priority.c', - 'SourceLine' => '1634' - }, - '300809' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '287418' - }, - '1' => { - 'name' => 'list', - 'type' => '300537' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_cipher_list', - 'Source' => 'priority.c', - 'SourceLine' => '1612' - }, - '300872' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '287418' - }, - '1' => { - 'name' => 'list', - 'type' => '300537' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_kx_list', - 'Source' => 'priority.c', - 'SourceLine' => '1590' - }, - '300937' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '287418' - }, - '1' => { - 'name' => 'list', - 'type' => '300537' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_ecc_curve_list', - 'Source' => 'priority.c', - 'SourceLine' => '1568' - }, - '301002' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_set_default_priority', - 'Source' => 'priority.c', - 'SourceLine' => '1551' - }, - '301144' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'priorities', - 'type' => '110' - }, - '2' => { - 'name' => 'err_pos', - 'type' => '301410' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_set_direct', - 'Source' => 'priority.c', - 'SourceLine' => '1489' - }, - '301437' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'priority_cache', - 'type' => '287418' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_priority_deinit', - 'Source' => 'priority.c', - 'SourceLine' => '1466' - }, - '301501' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'priority_cache', - 'type' => '304052' - }, - '1' => { - 'name' => 'priorities', - 'type' => '110' - }, - '2' => { - 'name' => 'err_pos', - 'type' => '301410' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_init', - 'Source' => 'priority.c', - 'SourceLine' => '1209' - }, - '307717' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'priority', - 'type' => '287418' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_set', - 'Source' => 'priority.c', - 'SourceLine' => '545' - }, - '309407' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'filename', - 'type' => '110' - }, - '1' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_load_file', - 'Source' => 'file.c', - 'SourceLine' => '54' - }, - '31421' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'ms', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_record_set_timeout', - 'Source' => 'record.c', - 'SourceLine' => '1815' - }, - '31479' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'data', - 'type' => '216' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - }, - '3' => { - 'name' => 'seq', - 'type' => '3881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '257', - 'ShortName' => 'gnutls_record_recv_seq', - 'Source' => 'record.c', - 'SourceLine' => '1792' - }, - '31625' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'data', - 'type' => '216' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '257', - 'ShortName' => 'gnutls_record_recv', - 'Source' => 'record.c', - 'SourceLine' => '1764' - }, - '31753' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_record_uncork', - 'Source' => 'record.c', - 'SourceLine' => '1690' - }, - '31912' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_record_cork', - 'Source' => 'record.c', - 'SourceLine' => '1664' - }, - '31957' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'data', - 'type' => '334' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '257', - 'ShortName' => 'gnutls_record_send', - 'Source' => 'record.c', - 'SourceLine' => '1624' - }, - '32059' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'packet', - 'type' => '32662' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '257', - 'ShortName' => 'gnutls_record_recv_packet', - 'Source' => 'record.c', - 'SourceLine' => '1564' - }, - '3218488' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'b64_data', - 'type' => '4430' - }, - '1' => { - 'name' => 'result', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_base64_decode2', - 'Source' => 'srp_sb64.c', - 'SourceLine' => '432' - }, - '3218606' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'b64_data', - 'type' => '4430' - }, - '1' => { - 'name' => 'result', - 'type' => '240' - }, - '2' => { - 'name' => 'result_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_base64_decode', - 'Source' => 'srp_sb64.c', - 'SourceLine' => '390' - }, - '3218796' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '4430' - }, - '1' => { - 'name' => 'result', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_base64_encode2', - 'Source' => 'srp_sb64.c', - 'SourceLine' => '351' - }, - '3218914' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '4430' - }, - '1' => { - 'name' => 'result', - 'type' => '240' - }, - '2' => { - 'name' => 'result_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_srp_base64_encode', - 'Source' => 'srp_sb64.c', - 'SourceLine' => '310' - }, - '32689' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '52', - 'ShortName' => 'gnutls_record_discard_queued', - 'Source' => 'record.c', - 'SourceLine' => '1537' - }, - '32780' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'packet', - 'type' => '20932' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_packet_deinit', - 'Source' => 'record.c', - 'SourceLine' => '1520' - }, - '32844' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'packet', - 'type' => '20932' - }, - '1' => { - 'name' => 'data', - 'type' => '4531' - }, - '2' => { - 'name' => 'sequence', - 'type' => '3881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_packet_get', - 'Source' => 'record.c', - 'SourceLine' => '1490' - }, - '3305531' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'pcache', - 'type' => '287418' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'sidx', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_priority_get_cipher_suite_index', - 'Source' => 'ciphersuites.c', - 'SourceLine' => '1648' - }, - '3306289' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'idx', - 'type' => '52' - }, - '1' => { - 'name' => 'cs_id', - 'type' => '3881' - }, - '2' => { - 'name' => 'kx', - 'type' => '560826' - }, - '3' => { - 'name' => 'cipher', - 'type' => '2136943' - }, - '4' => { - 'name' => 'mac', - 'type' => '3306423' - }, - '5' => { - 'name' => 'min_version', - 'type' => '3306429' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_cipher_suite_info', - 'Source' => 'ciphersuites.c', - 'SourceLine' => '1514' - }, - '366491' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'sid', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_set_id', - 'Source' => 'session.c', - 'SourceLine' => '365' - }, - '366748' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '240', - 'ShortName' => 'gnutls_session_get_desc', - 'Source' => 'session.c', - 'SourceLine' => '270' - }, - '367690' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_force_valid', - 'Source' => 'session.c', - 'SourceLine' => '249' - }, - '367733' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'session_data', - 'type' => '334' - }, - '2' => { - 'name' => 'session_data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_set_data', - 'Source' => 'session.c', - 'SourceLine' => '210' - }, - '368000' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'session_id', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_get_id2', - 'Source' => 'session.c', - 'SourceLine' => '182' - }, - '368062' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'session_id', - 'type' => '216' - }, - '2' => { - 'name' => 'session_id_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_get_id', - 'Source' => 'session.c', - 'SourceLine' => '145' - }, - '368156' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'data', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_get_data2', - 'Source' => 'session.c', - 'SourceLine' => '96' - }, - '368240' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'session_data', - 'type' => '216' - }, - '2' => { - 'name' => 'session_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_get_data', - 'Source' => 'session.c', - 'SourceLine' => '47' - }, - '369100' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2854', - 'ShortName' => 'gnutls_certificate_type_get', - 'Source' => 'state.c', - 'SourceLine' => '113' - }, - '369148' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2423', - 'ShortName' => 'gnutls_mac_get', - 'Source' => 'state.c', - 'SourceLine' => '146' - }, - '369172' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2122', - 'ShortName' => 'gnutls_cipher_get', - 'Source' => 'state.c', - 'SourceLine' => '89' - }, - '369196' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_dh_get_prime_bits', - 'Source' => 'dh-session.c', - 'SourceLine' => '288' - }, - '369208' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '3208', - 'ShortName' => 'gnutls_ecc_curve_get', - 'Source' => 'state.c', - 'SourceLine' => '1074' - }, - '369283' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_is_resumed', - 'Source' => 'state.c', - 'SourceLine' => '791' - }, - '3753511' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '158148' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3881' - }, - '2' => { - 'name' => 'flag', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_auth_subkey', - 'Source' => 'pgp.c', - 'SourceLine' => '1718' - }, - '3754379' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '158148' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'p', - 'type' => '4531' - }, - '3' => { - 'name' => 'q', - 'type' => '4531' - }, - '4' => { - 'name' => 'g', - 'type' => '4531' - }, - '5' => { - 'name' => 'y', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1600' - }, - '3754775' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '158148' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'm', - 'type' => '4531' - }, - '3' => { - 'name' => 'e', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1562' - }, - '3755094' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '158148' - }, - '1' => { - 'name' => 'p', - 'type' => '4531' - }, - '2' => { - 'name' => 'q', - 'type' => '4531' - }, - '3' => { - 'name' => 'g', - 'type' => '4531' - }, - '4' => { - 'name' => 'y', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_pk_dsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1530' - }, - '3755424' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '158148' - }, - '1' => { - 'name' => 'm', - 'type' => '4531' - }, - '2' => { - 'name' => 'e', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_pk_rsa_raw', - 'Source' => 'pgp.c', - 'SourceLine' => '1498' - }, - '3759291' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'fpr', - 'type' => '216' - }, - '3' => { - 'name' => 'fprlen', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_fingerprint', - 'Source' => 'pgp.c', - 'SourceLine' => '1086' - }, - '3759726' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_expiration_time', - 'Source' => 'pgp.c', - 'SourceLine' => '1013' - }, - '3759866' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_creation_time', - 'Source' => 'pgp.c', - 'SourceLine' => '978' - }, - '3760118' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_revoked_status', - 'Source' => 'pgp.c', - 'SourceLine' => '896' - }, - '3761110' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_subkey_count', - 'Source' => 'pgp.c', - 'SourceLine' => '751' - }, - '3761333' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'email', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_check_email', - 'Source' => 'pgp.c', - 'SourceLine' => '660' - }, - '3761569' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_check_hostname2', - 'Source' => 'pgp.c', - 'SourceLine' => '618' - }, - '3761788' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_check_hostname', - 'Source' => 'pgp.c', - 'SourceLine' => '596' - }, - '3761888' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_revoked_status', - 'Source' => 'pgp.c', - 'SourceLine' => '566' - }, - '3762064' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_openpgp_crt_get_expiration_time', - 'Source' => 'pgp.c', - 'SourceLine' => '504' - }, - '3762162' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_openpgp_crt_get_creation_time', - 'Source' => 'pgp.c', - 'SourceLine' => '477' - }, - '3762260' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_version', - 'Source' => 'pgp.c', - 'SourceLine' => '451' - }, - '3762475' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'idx', - 'type' => '75' - }, - '2' => { - 'name' => 'buf', - 'type' => '240' - }, - '3' => { - 'name' => 'sizeof_buf', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_get_name', - 'Source' => 'pgp.c', - 'SourceLine' => '338' - }, - '3763199' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'format', - 'type' => '998610' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_export2', - 'Source' => 'pgp.c', - 'SourceLine' => '252' - }, - '3784039' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - }, - '2' => { - 'name' => 'verify', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_verify_self', - 'Source' => 'pgpverify.c', - 'SourceLine' => '122' - }, - '3784166' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158148' - }, - '1' => { - 'name' => 'keyring', - 'type' => '156922' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'verify', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_verify_ring', - 'Source' => 'pgpverify.c', - 'SourceLine' => '53' - }, - '3784711' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'ring', - 'type' => '156922' - }, - '1' => { - 'name' => 'keyid', - 'type' => '5465' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_keyring_check_id', - 'Source' => 'extras.c', - 'SourceLine' => '86' - }, - '3799879' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'ring', - 'type' => '156922' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'cert', - 'type' => '1036973' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_keyring_get_crt', - 'Source' => 'extras.c', - 'SourceLine' => '272' - }, - '3800403' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'ring', - 'type' => '156922' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_keyring_get_crt_count', - 'Source' => 'extras.c', - 'SourceLine' => '224' - }, - '3800825' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'keyring', - 'type' => '156922' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '998610' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_keyring_import', - 'Source' => 'extras.c', - 'SourceLine' => '119' - }, - '3802124' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'keyring', - 'type' => '3802193' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_keyring_init', - 'Source' => 'extras.c', - 'SourceLine' => '45' - }, - '382896' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_remove_session', - 'Source' => 'db.c', - 'SourceLine' => '332' - }, - '3838234' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '158215' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'p', - 'type' => '4531' - }, - '3' => { - 'name' => 'q', - 'type' => '4531' - }, - '4' => { - 'name' => 'g', - 'type' => '4531' - }, - '5' => { - 'name' => 'y', - 'type' => '4531' - }, - '6' => { - 'name' => 'x', - 'offset' => '0', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export_subkey_dsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1183' - }, - '3838729' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '158215' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'm', - 'type' => '4531' - }, - '3' => { - 'name' => 'e', - 'type' => '4531' - }, - '4' => { - 'name' => 'd', - 'type' => '4531' - }, - '5' => { - 'name' => 'p', - 'type' => '4531' - }, - '6' => { - 'name' => 'q', - 'offset' => '0', - 'type' => '4531' - }, - '7' => { - 'name' => 'u', - 'offset' => '8', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export_subkey_rsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1139' - }, - '3839225' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '158215' - }, - '1' => { - 'name' => 'p', - 'type' => '4531' - }, - '2' => { - 'name' => 'q', - 'type' => '4531' - }, - '3' => { - 'name' => 'g', - 'type' => '4531' - }, - '4' => { - 'name' => 'y', - 'type' => '4531' - }, - '5' => { - 'name' => 'x', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export_dsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1100' - }, - '3839674' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '158215' - }, - '1' => { - 'name' => 'm', - 'type' => '4531' - }, - '2' => { - 'name' => 'e', - 'type' => '4531' - }, - '3' => { - 'name' => 'd', - 'type' => '4531' - }, - '4' => { - 'name' => 'p', - 'type' => '4531' - }, - '5' => { - 'name' => 'q', - 'type' => '4531' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export_rsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1062' - }, - '3841080' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'fpr', - 'type' => '216' - }, - '3' => { - 'name' => 'fprlen', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_fingerprint', - 'Source' => 'privkey.c', - 'SourceLine' => '745' - }, - '3841412' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'keyid', - 'type' => '3881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_id', - 'Source' => 'privkey.c', - 'SourceLine' => '704' - }, - '3841503' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_expiration_time', - 'Source' => 'privkey.c', - 'SourceLine' => '668' - }, - '3841662' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_creation_time', - 'Source' => 'privkey.c', - 'SourceLine' => '632' - }, - '3842024' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_revoked_status', - 'Source' => 'privkey.c', - 'SourceLine' => '506' - }, - '3842354' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_subkey_count', - 'Source' => 'privkey.c', - 'SourceLine' => '451' - }, - '3842613' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'keyid', - 'type' => '3881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_key_id', - 'Source' => 'privkey.c', - 'SourceLine' => '418' - }, - '3842713' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'fpr', - 'type' => '216' - }, - '2' => { - 'name' => 'fprlen', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_fingerprint', - 'Source' => 'privkey.c', - 'SourceLine' => '376' - }, - '3842824' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_get_revoked_status', - 'Source' => 'privkey.c', - 'SourceLine' => '344' - }, - '3843059' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'format', - 'type' => '998610' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export2', - 'Source' => 'privkey.c', - 'SourceLine' => '251' - }, - '3843201' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - }, - '1' => { - 'name' => 'format', - 'type' => '998610' - }, - '2' => { - 'name' => 'password', - 'type' => '110' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'output_data', - 'type' => '216' - }, - '5' => { - 'name' => 'output_data_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_privkey_export', - 'Source' => 'privkey.c', - 'SourceLine' => '225' - }, - '384324' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'entry', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_db_check_entry_time', - 'Source' => 'db.c', - 'SourceLine' => '169' - }, - '3843751' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '158215' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '3300', - 'ShortName' => 'gnutls_openpgp_privkey_sec_param', - 'Source' => 'privkey.c', - 'SourceLine' => '141' - }, - '384704' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'session_entry', - 'type' => '3887' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_db_check_entry', - 'Source' => 'db.c', - 'SourceLine' => '153' - }, - '384769' => { - 'Header' => 'gnutls.h', - 'Return' => '145', - 'ShortName' => 'gnutls_db_get_default_cache_expiration', - 'Source' => 'db.c', - 'SourceLine' => '137' - }, - '384798' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'seconds', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_cache_expiration', - 'Source' => 'db.c', - 'SourceLine' => '127' - }, - '384854' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '216', - 'ShortName' => 'gnutls_db_get_ptr', - 'Source' => 'db.c', - 'SourceLine' => '114' - }, - '384901' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'ptr', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_ptr', - 'Source' => 'db.c', - 'SourceLine' => '100' - }, - '384957' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'store_func', - 'type' => '4258' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_store_function', - 'Source' => 'db.c', - 'SourceLine' => '86' - }, - '385013' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'rem_func', - 'type' => '4301' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_remove_function', - 'Source' => 'db.c', - 'SourceLine' => '68' - }, - '385069' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'retr_func', - 'type' => '4339' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_db_set_retrieve_function', - 'Source' => 'db.c', - 'SourceLine' => '50' - }, - '3864952' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '158148' - }, - '1' => { - 'name' => 'format', - 'type' => '1923523' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_openpgp_crt_print', - 'Source' => 'output.c', - 'SourceLine' => '562' - }, - '3891671' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'func', - 'type' => '5471' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_set_recv_key_function', - 'Source' => 'openpgp.c', - 'SourceLine' => '763' - }, - '3892117' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'c', - 'type' => '156964' - }, - '1' => { - 'name' => 'data', - 'type' => '44422' - }, - '2' => { - 'name' => 'dlen', - 'type' => '52' - }, - '3' => { - 'name' => 'format', - 'type' => '998610' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_keyring_mem', - 'Source' => 'openpgp.c', - 'SourceLine' => '665' - }, - '3892486' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'c', - 'type' => '156964' - }, - '1' => { - 'name' => 'file', - 'type' => '110' - }, - '2' => { - 'name' => 'format', - 'type' => '998610' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_keyring_file', - 'Source' => 'openpgp.c', - 'SourceLine' => '621' - }, - '3893104' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'certfile', - 'type' => '110' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '110' - }, - '3' => { - 'name' => 'subkey_id', - 'type' => '110' - }, - '4' => { - 'name' => 'format', - 'type' => '998610' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_file2', - 'Source' => 'openpgp.c', - 'SourceLine' => '525' - }, - '3893275' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'cert', - 'type' => '4430' - }, - '2' => { - 'name' => 'key', - 'type' => '4430' - }, - '3' => { - 'name' => 'subkey_id', - 'type' => '110' - }, - '4' => { - 'name' => 'format', - 'type' => '998610' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_mem2', - 'Source' => 'openpgp.c', - 'SourceLine' => '428' - }, - '3894373' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'certfile', - 'type' => '110' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '110' - }, - '3' => { - 'name' => 'format', - 'type' => '998610' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_file', - 'Source' => 'openpgp.c', - 'SourceLine' => '372' - }, - '3894519' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'cert', - 'type' => '4430' - }, - '2' => { - 'name' => 'key', - 'type' => '4430' - }, - '3' => { - 'name' => 'format', - 'type' => '998610' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_key_mem', - 'Source' => 'openpgp.c', - 'SourceLine' => '349' - }, - '3895450' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'index', - 'type' => '145' - }, - '2' => { - 'name' => 'crt_list', - 'type' => '3895736' - }, - '3' => { - 'name' => 'crt_list_size', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_openpgp_crt', - 'Source' => 'openpgp.c', - 'SourceLine' => '232' - }, - '3895769' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'index', - 'type' => '145' - }, - '2' => { - 'name' => 'key', - 'type' => '1011939' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_openpgp_key', - 'Source' => 'openpgp.c', - 'SourceLine' => '193' - }, - '3895962' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'crt', - 'type' => '158148' - }, - '2' => { - 'name' => 'pkey', - 'type' => '158215' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_openpgp_key', - 'Source' => 'openpgp.c', - 'SourceLine' => '83' - }, - '399369' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'header', - 'type' => '110' - }, - '1' => { - 'name' => 'b64_data', - 'type' => '4430' - }, - '2' => { - 'name' => 'result', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pem_base64_decode2', - 'Source' => 'x509_b64.c', - 'SourceLine' => '418' - }, - '399725' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'header', - 'type' => '110' - }, - '1' => { - 'name' => 'b64_data', - 'type' => '4430' - }, - '2' => { - 'name' => 'result', - 'type' => '3881' - }, - '3' => { - 'name' => 'result_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pem_base64_decode', - 'Source' => 'x509_b64.c', - 'SourceLine' => '368' - }, - '401745' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'msg', - 'type' => '110' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'result', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pem_base64_encode2', - 'Source' => 'x509_b64.c', - 'SourceLine' => '183' - }, - '402072' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'msg', - 'type' => '110' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'result', - 'type' => '240' - }, - '3' => { - 'name' => 'result_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pem_base64_encode', - 'Source' => 'x509_b64.c', - 'SourceLine' => '137' - }, - '417977' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'type', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '22683' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ext_get_data', - 'Source' => 'extensions.c', - 'SourceLine' => '926' - }, - '418099' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'type', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'type' => '5453' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_ext_set_data', - 'Source' => 'extensions.c', - 'SourceLine' => '907' - }, - '418217' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'name', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '75' - }, - '3' => { - 'name' => 'parse_type', - 'type' => '22733' - }, - '4' => { - 'name' => 'recv_func', - 'type' => '22491' - }, - '5' => { - 'name' => 'send_func', - 'type' => '22540' - }, - '6' => { - 'name' => 'deinit_func', - 'offset' => '0', - 'type' => '22578' - }, - '7' => { - 'name' => 'pack_func', - 'offset' => '8', - 'type' => '22607' - }, - '8' => { - 'name' => 'unpack_func', - 'offset' => '16', - 'type' => '22645' - }, - '9' => { - 'name' => 'flags', - 'offset' => '24', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_ext_register', - 'Source' => 'extensions.c', - 'SourceLine' => '856' - }, - '418681' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - }, - '1' => { - 'name' => 'type', - 'type' => '75' - }, - '2' => { - 'name' => 'parse_type', - 'type' => '22733' - }, - '3' => { - 'name' => 'recv_func', - 'type' => '22491' - }, - '4' => { - 'name' => 'send_func', - 'type' => '22540' - }, - '5' => { - 'name' => 'deinit_func', - 'type' => '22578' - }, - '6' => { - 'name' => 'pack_func', - 'offset' => '0', - 'type' => '22607' - }, - '7' => { - 'name' => 'unpack_func', - 'offset' => '8', - 'type' => '22645' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ext_register', - 'Source' => 'extensions.c', - 'SourceLine' => '794' - }, - '423906' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'ext', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_ext_get_name', - 'Source' => 'extensions.c', - 'SourceLine' => '171' - }, - '440845' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2296', - 'ShortName' => 'gnutls_auth_get_type', - 'Source' => 'auth.c', - 'SourceLine' => '198' - }, - '440949' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'type', - 'type' => '2296' - }, - '2' => { - 'name' => 'cred', - 'type' => '4576' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_credentials_get', - 'Source' => 'auth.c', - 'SourceLine' => '168' - }, - '441214' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'type', - 'type' => '2296' - }, - '2' => { - 'name' => 'cred', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_credentials_set', - 'Source' => 'auth.c', - 'SourceLine' => '93' - }, - '441372' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_credentials_clear', - 'Source' => 'auth.c', - 'SourceLine' => '44' - }, - '44588' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'how', - 'type' => '19734' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_bye', - 'Source' => 'record.c', - 'SourceLine' => '283' - }, - '44860' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_transport_get_int', - 'Source' => 'record.c', - 'SourceLine' => '246' - }, - '44907' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'recv_int', - 'type' => '17851' - }, - '2' => { - 'name' => 'send_int', - 'type' => '17851' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_get_int2', - 'Source' => 'record.c', - 'SourceLine' => '226' - }, - '44976' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'recv_ptr', - 'type' => '45045' - }, - '2' => { - 'name' => 'send_ptr', - 'type' => '45045' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_get_ptr2', - 'Source' => 'record.c', - 'SourceLine' => '204' - }, - '45051' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '3312', - 'ShortName' => 'gnutls_transport_get_ptr', - 'Source' => 'record.c', - 'SourceLine' => '188' - }, - '45098' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'recv_fd', - 'type' => '75' - }, - '2' => { - 'name' => 'send_fd', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_int2', - 'Source' => 'record.c', - 'SourceLine' => '143' - }, - '45167' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'recv_ptr', - 'type' => '3312' - }, - '2' => { - 'name' => 'send_ptr', - 'type' => '3312' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_ptr2', - 'Source' => 'record.c', - 'SourceLine' => '118' - }, - '45236' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'ptr', - 'type' => '3312' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_ptr', - 'Source' => 'record.c', - 'SourceLine' => '99' - }, - '45292' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_record_disable_padding', - 'Source' => 'record.c', - 'SourceLine' => '83' - }, - '4720' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1835', - 'Return' => '4582', - 'ShortName' => 'gnutls_malloc', - 'Source' => 'mem.c', - 'SourceLine' => '29' - }, - '4732' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1836', - 'Return' => '4682', - 'ShortName' => 'gnutls_realloc', - 'Source' => 'mem.c', - 'SourceLine' => '31' - }, - '4744' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1837', - 'Return' => '4615', - 'ShortName' => 'gnutls_calloc', - 'Source' => 'mem.c', - 'SourceLine' => '33' - }, - '4756' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1838', - 'Return' => '4653', - 'ShortName' => 'gnutls_free', - 'Source' => 'mem.c', - 'SourceLine' => '30' - }, - '4783' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '1840', - 'Return' => '4795', - 'ShortName' => 'gnutls_strdup', - 'Source' => 'mem.c', - 'SourceLine' => '34' - }, - '485898' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'entity', - 'type' => '145' - }, - '2' => { - 'name' => 'version', - 'type' => '2804' - }, - '3' => { - 'name' => 'kx', - 'type' => '2242' - }, - '4' => { - 'name' => 'cipher', - 'type' => '2122' - }, - '5' => { - 'name' => 'mac', - 'type' => '2423' - }, - '6' => { - 'name' => 'comp', - 'offset' => '0', - 'type' => '2583' - }, - '7' => { - 'name' => 'master', - 'offset' => '8', - 'type' => '4430' - }, - '8' => { - 'name' => 'session_id', - 'offset' => '16', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_set_premaster', - 'Source' => 'session_pack.c', - 'SourceLine' => '920' - }, - '48709' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2583', - 'ShortName' => 'gnutls_compression_get', - 'Source' => 'state.c', - 'SourceLine' => '169' - }, - '48933' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'alert', - 'type' => '695690' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_alert_get_name', - 'Source' => 'alert.c', - 'SourceLine' => '97' - }, - '49059' => { - 'Header' => 'dtls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_dtls_get_mtu', - 'Source' => 'dtls.c', - 'SourceLine' => '742' - }, - '49081' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'level', - 'type' => '695484' - }, - '2' => { - 'name' => 'desc', - 'type' => '695690' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_alert_send', - 'Source' => 'alert.c', - 'SourceLine' => '148' - }, - '49129' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_handshake', - 'Source' => 'handshake.c', - 'SourceLine' => '2566' - }, - '49207' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'dest', - 'type' => '22400' - }, - '1' => { - 'name' => 'data', - 'type' => '334' - }, - '2' => { - 'name' => 'data_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_buffer_append_data', - 'Source' => 'str.c', - 'SourceLine' => '131' - }, - '5128' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2014', - 'Return' => '3899', - 'ShortName' => 'gnutls_srp_4096_group_prime', - 'Source' => 'srp_kx.c', - 'SourceLine' => '664' - }, - '5140' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2015', - 'Return' => '3899', - 'ShortName' => 'gnutls_srp_4096_group_generator', - 'Source' => 'srp_kx.c', - 'SourceLine' => '660' - }, - '5152' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2017', - 'Return' => '3899', - 'ShortName' => 'gnutls_srp_3072_group_prime', - 'Source' => 'srp_kx.c', - 'SourceLine' => '568' - }, - '5164' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2018', - 'Return' => '3899', - 'ShortName' => 'gnutls_srp_3072_group_generator', - 'Source' => 'srp_kx.c', - 'SourceLine' => '564' - }, - '5176' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2020', - 'Return' => '3899', - 'ShortName' => 'gnutls_srp_2048_group_prime', - 'Source' => 'srp_kx.c', - 'SourceLine' => '510' - }, - '5188' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2021', - 'Return' => '3899', - 'ShortName' => 'gnutls_srp_2048_group_generator', - 'Source' => 'srp_kx.c', - 'SourceLine' => '514' - }, - '5200' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2023', - 'Return' => '3899', - 'ShortName' => 'gnutls_srp_1536_group_prime', - 'Source' => 'srp_kx.c', - 'SourceLine' => '470' - }, - '5212' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2024', - 'Return' => '3899', - 'ShortName' => 'gnutls_srp_1536_group_generator', - 'Source' => 'srp_kx.c', - 'SourceLine' => '474' - }, - '5224' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2026', - 'Return' => '3899', - 'ShortName' => 'gnutls_srp_1024_group_prime', - 'Source' => 'srp_kx.c', - 'SourceLine' => '437' - }, - '5236' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2027', - 'Return' => '3899', - 'ShortName' => 'gnutls_srp_1024_group_generator', - 'Source' => 'srp_kx.c', - 'SourceLine' => '441' - }, - '5248' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2032', - 'Return' => '3899', - 'ShortName' => 'gnutls_ffdhe_8192_group_prime', - 'Source' => 'dh-primes.c', - 'SourceLine' => '388' - }, - '5260' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2033', - 'Return' => '3899', - 'ShortName' => 'gnutls_ffdhe_8192_group_generator', - 'Source' => 'dh-primes.c', - 'SourceLine' => '384' - }, - '5272' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2034', - 'Return' => '152', - 'ShortName' => 'gnutls_ffdhe_8192_key_bits', - 'Source' => 'dh-primes.c', - 'SourceLine' => '391' - }, - '5284' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2036', - 'Return' => '3899', - 'ShortName' => 'gnutls_ffdhe_4096_group_prime', - 'Source' => 'dh-primes.c', - 'SourceLine' => '229' - }, - '5296' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2037', - 'Return' => '3899', - 'ShortName' => 'gnutls_ffdhe_4096_group_generator', - 'Source' => 'dh-primes.c', - 'SourceLine' => '225' - }, - '5308' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2038', - 'Return' => '152', - 'ShortName' => 'gnutls_ffdhe_4096_key_bits', - 'Source' => 'dh-primes.c', - 'SourceLine' => '232' - }, - '5320' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2040', - 'Return' => '3899', - 'ShortName' => 'gnutls_ffdhe_3072_group_prime', - 'Source' => 'dh-primes.c', - 'SourceLine' => '143' - }, - '5332' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2041', - 'Return' => '3899', - 'ShortName' => 'gnutls_ffdhe_3072_group_generator', - 'Source' => 'dh-primes.c', - 'SourceLine' => '139' - }, - '534098' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'info', - 'type' => '4430' - }, - '1' => { - 'name' => 'hash', - 'type' => '535126' - }, - '2' => { - 'name' => 'digest', - 'type' => '3881' - }, - '3' => { - 'name' => 'digest_size', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_decode_ber_digest_info', - 'Source' => 'pk.c', - 'SourceLine' => '453' - }, - '5344' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2042', - 'Return' => '152', - 'ShortName' => 'gnutls_ffdhe_3072_key_bits', - 'Source' => 'dh-primes.c', - 'SourceLine' => '146' - }, - '535153' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'hash', - 'type' => '2533' - }, - '1' => { - 'name' => 'digest', - 'type' => '4430' - }, - '2' => { - 'name' => 'output', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_encode_ber_digest_info', - 'Source' => 'pk.c', - 'SourceLine' => '425' - }, - '5356' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2044', - 'Return' => '3899', - 'ShortName' => 'gnutls_ffdhe_2048_group_prime', - 'Source' => 'dh-primes.c', - 'SourceLine' => '70' - }, - '5368' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2045', - 'Return' => '3899', - 'ShortName' => 'gnutls_ffdhe_2048_group_generator', - 'Source' => 'dh-primes.c', - 'SourceLine' => '76' - }, - '5380' => { - 'Data' => 1, - 'Header' => 'gnutls.h', - 'Line' => '2046', - 'Return' => '152', - 'ShortName' => 'gnutls_ffdhe_2048_key_bits', - 'Source' => 'dh-primes.c', - 'SourceLine' => '79' - }, - '556164' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'sec_param', - 'type' => '3300' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_known_dh_params', - 'Source' => 'cert.c', - 'SourceLine' => '1101' - }, - '556497' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'dh_params', - 'type' => '3411' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_dh_params', - 'Source' => 'cert.c', - 'SourceLine' => '1072' - }, - '556573' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'status', - 'type' => '145' - }, - '1' => { - 'name' => 'type', - 'type' => '2854' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_verification_status_print', - 'Source' => 'cert.c', - 'SourceLine' => '950' - }, - '558529' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_certificate_activation_time_peers', - 'Source' => 'cert.c', - 'SourceLine' => '847' - }, - '558904' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '268', - 'ShortName' => 'gnutls_certificate_expiration_time_peers', - 'Source' => 'cert.c', - 'SourceLine' => '803' - }, - '559258' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'data', - 'type' => '13501' - }, - '2' => { - 'name' => 'elements', - 'type' => '145' - }, - '3' => { - 'name' => 'status', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_verify_peers', - 'Source' => 'cert.c', - 'SourceLine' => '746' - }, - '559404' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'hostname', - 'type' => '110' - }, - '2' => { - 'name' => 'status', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_verify_peers3', - 'Source' => 'cert.c', - 'SourceLine' => '699' - }, - '559541' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'status', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_verify_peers2', - 'Source' => 'cert.c', - 'SourceLine' => '664' - }, - '559914' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '156964' - }, - '1' => { - 'name' => 'func', - 'type' => '13495' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_verify_function', - 'Source' => 'cert.c', - 'SourceLine' => '495' - }, - '559973' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '156964' - }, - '1' => { - 'name' => 'func', - 'type' => '168063' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_retrieve_function2', - 'Source' => 'cert.c', - 'SourceLine' => '464' - }, - '560032' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '156964' - }, - '1' => { - 'name' => 'func', - 'type' => '168057' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_retrieve_function', - 'Source' => 'cert.c', - 'SourceLine' => '412' - }, - '560091' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'req', - 'type' => '543136' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_server_set_request', - 'Source' => 'cert.c', - 'SourceLine' => '366' - }, - '560955' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '561150' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_allocate_credentials', - 'Source' => 'cert.c', - 'SourceLine' => '225' - }, - '561177' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '156964' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_credentials', - 'Source' => 'cert.c', - 'SourceLine' => '200' - }, - '561311' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '156964' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_ca_names', - 'Source' => 'cert.c', - 'SourceLine' => '183' - }, - '561388' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '156964' - }, - '1' => { - 'name' => 'idx1', - 'type' => '145' - }, - '2' => { - 'name' => 'idx2', - 'type' => '145' - }, - '3' => { - 'name' => 'cert', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_crt_raw', - 'Source' => 'cert.c', - 'SourceLine' => '149' - }, - '561695' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '156964' - }, - '1' => { - 'name' => 'cert', - 'type' => '156760' - }, - '2' => { - 'name' => 'issuer', - 'type' => '158389' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_issuer', - 'Source' => 'cert.c', - 'SourceLine' => '120' - }, - '561823' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '156964' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_cas', - 'Source' => 'cert.c', - 'SourceLine' => '92' - }, - '561865' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '156964' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_keys', - 'Source' => 'cert.c', - 'SourceLine' => '57' - }, - '562983' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'bits', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_get_pk_algorithm', - 'Source' => 'pubkey.c', - 'SourceLine' => '74' - }, - '562994' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'bits', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_get_pk_algorithm', - 'Source' => 'privkey.c', - 'SourceLine' => '123' - }, - '563006' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'signer', - 'type' => '156725' - }, - '1' => { - 'name' => 'hash', - 'type' => '2533' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4430' - }, - '4' => { - 'name' => 'signature', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_sign_data', - 'Source' => 'privkey.c', - 'SourceLine' => '1070' - }, - '563030' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pubkey', - 'type' => '4454' - }, - '1' => { - 'name' => 'algo', - 'type' => '3140' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '4430' - }, - '4' => { - 'name' => 'signature', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_verify_data2', - 'Source' => 'pubkey.c', - 'SourceLine' => '1606' - }, - '563041' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '158389' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_init', - 'Source' => 'x509.c', - 'SourceLine' => '179' - }, - '563052' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_import', - 'Source' => 'x509.c', - 'SourceLine' => '347' - }, - '563063' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_activation_time' - }, - '563075' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_deinit', - 'Source' => 'x509.c', - 'SourceLine' => '254' - }, - '563121' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_expiration_time' - }, - '563156' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'usage', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_get_key_usage', - 'Source' => 'pubkey.c', - 'SourceLine' => '94' - }, - '563230' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '907727' - }, - '1' => { - 'name' => 'size', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_init', - 'Source' => 'verify-high.c', - 'SourceLine' => '84' - }, - '563242' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'all', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_trust_list_deinit', - 'Source' => 'verify-high.c', - 'SourceLine' => '126' - }, - '563254' => { - 'Header' => 'openpgp.h', - 'Param' => { - '0' => { - 'name' => 'keyring', - 'type' => '156922' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_keyring_deinit', - 'Source' => 'extras.c', - 'SourceLine' => '61' - }, - '563301' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'cert', - 'type' => '156760' - }, - '2' => { - 'name' => 'issuer', - 'type' => '158389' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_get_issuer', - 'Source' => 'verify-high.c', - 'SourceLine' => '949' - }, - '563313' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5584' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pcert_deinit', - 'Source' => 'pcert.c', - 'SourceLine' => '501' - }, - '563325' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_privkey_deinit', - 'Source' => 'privkey.c', - 'SourceLine' => '331' - }, - '578869' => { - 'Header' => 'gnutls.h', - 'Return' => '1', - 'ShortName' => 'gnutls_global_deinit', - 'Source' => 'global.c', - 'SourceLine' => '463' - }, - '580585' => { - 'Header' => 'gnutls.h', - 'Return' => '75', - 'ShortName' => 'gnutls_global_init', - 'Source' => 'global.c', - 'SourceLine' => '220' - }, - '580775' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'level', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_log_level', - 'Source' => 'global.c', - 'SourceLine' => '153' - }, - '580818' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'time_func', - 'type' => '4537' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_time_function', - 'Source' => 'global.c', - 'SourceLine' => '137' - }, - '580861' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'log_func', - 'type' => '4835' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_audit_log_function', - 'Source' => 'global.c', - 'SourceLine' => '122' - }, - '580904' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'log_func', - 'type' => '4801' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_global_set_log_function', - 'Source' => 'global.c', - 'SourceLine' => '102' - }, - '581356' => { - 'Header' => 'pkcs11.h', - 'Line' => '77', - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs11_deinit', - 'Source' => 'pkcs11.c', - 'SourceLine' => '851' - }, - '620568' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '611250' - }, - '1' => { - 'name' => 'func', - 'type' => '168045' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_set_params_function', - 'Source' => 'anon_cred.c', - 'SourceLine' => '187' - }, - '620603' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '611250' - }, - '1' => { - 'name' => 'func', - 'type' => '168045' - } - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_set_server_params_function', - 'Source' => 'anon_cred.c', - 'SourceLine' => '171' - }, - '620637' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '611250' - }, - '1' => { - 'name' => 'sec_param', - 'type' => '3300' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_anon_set_server_known_dh_params', - 'Source' => 'anon_cred.c', - 'SourceLine' => '141' - }, - '620963' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '611250' - }, - '1' => { - 'name' => 'dh_params', - 'type' => '3411' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_set_server_dh_params', - 'Source' => 'anon_cred.c', - 'SourceLine' => '113' - }, - '621036' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '621082' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_anon_allocate_client_credentials', - 'Source' => 'anon_cred.c', - 'SourceLine' => '92' - }, - '621088' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '611317' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_free_client_credentials', - 'Source' => 'anon_cred.c', - 'SourceLine' => '75' - }, - '621130' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '621198' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_anon_allocate_server_credentials', - 'Source' => 'anon_cred.c', - 'SourceLine' => '58' - }, - '621204' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '611250' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_anon_free_server_credentials', - 'Source' => 'anon_cred.c', - 'SourceLine' => '41' - }, - '651352' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'algo', - 'type' => '2533' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'result', - 'type' => '216' - }, - '3' => { - 'name' => 'result_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_fingerprint', - 'Source' => 'fingerprint.c', - 'SourceLine' => '55' - }, - '65780' => { - 'Header' => 'gnutls.h', - 'Line' => '1007', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2583', - 'ShortName' => 'gnutls_compression_get_id', - 'Source' => 'compress.c', - 'SourceLine' => '99' - }, - '65877' => { - 'Header' => 'gnutls.h', - 'Line' => '969', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2583' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_compression_get_name', - 'Source' => 'compress.c', - 'SourceLine' => '78' - }, - '677579' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4454' - }, - '1' => { - 'name' => 'algo', - 'type' => '3140' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'hash', - 'type' => '4430' - }, - '4' => { - 'name' => 'signature', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pubkey_verify_hash2', - 'Source' => 'pubkey.c', - 'SourceLine' => '1662' - }, - '677651' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'signer', - 'type' => '156725' - }, - '1' => { - 'name' => 'hash_algo', - 'type' => '2533' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'hash_data', - 'type' => '4430' - }, - '4' => { - 'name' => 'signature', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_sign_hash', - 'Source' => 'privkey.c', - 'SourceLine' => '1135' - }, - '692840' => { - 'Header' => 'gnutls.h', - 'Line' => '938', - 'Param' => { - '0' => { - 'name' => 'curve', - 'type' => '3208' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ecc_curve_get_size', - 'Source' => 'ecc.c', - 'SourceLine' => '298' - }, - '706848' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'err', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_alert_send_appropriate', - 'Source' => 'alert.c', - 'SourceLine' => '338' - }, - '706997' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'err', - 'type' => '75' - }, - '1' => { - 'name' => 'level', - 'type' => '17851' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_error_to_alert', - 'Source' => 'alert.c', - 'SourceLine' => '189' - }, - '707414' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'alert', - 'type' => '695690' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_alert_get_strname', - 'Source' => 'alert.c', - 'SourceLine' => '118' - }, - '722924' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'curve', - 'type' => '3208' - }, - '2' => { - 'name' => 'x', - 'type' => '4430' - }, - '3' => { - 'name' => 'y', - 'type' => '4430' - }, - '4' => { - 'name' => 'k', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_ecc_raw', - 'Source' => 'privkey_raw.c', - 'SourceLine' => '299' - }, - '723418' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'p', - 'type' => '4430' - }, - '2' => { - 'name' => 'q', - 'type' => '4430' - }, - '3' => { - 'name' => 'g', - 'type' => '4430' - }, - '4' => { - 'name' => 'y', - 'type' => '4430' - }, - '5' => { - 'name' => 'x', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_dsa_raw', - 'Source' => 'privkey_raw.c', - 'SourceLine' => '248' - }, - '723903' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'm', - 'type' => '4430' - }, - '2' => { - 'name' => 'e', - 'type' => '4430' - }, - '3' => { - 'name' => 'd', - 'type' => '4430' - }, - '4' => { - 'name' => 'p', - 'type' => '4430' - }, - '5' => { - 'name' => 'q', - 'type' => '4430' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4430' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '4430' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_rsa_raw', - 'Source' => 'privkey_raw.c', - 'SourceLine' => '195' - }, - '724422' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'curve', - 'type' => '532314' - }, - '2' => { - 'name' => 'x', - 'type' => '4531' - }, - '3' => { - 'name' => 'y', - 'type' => '4531' - }, - '4' => { - 'name' => 'k', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_ecc_raw', - 'Source' => 'privkey_raw.c', - 'SourceLine' => '148' - }, - '724824' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'p', - 'type' => '4531' - }, - '2' => { - 'name' => 'q', - 'type' => '4531' - }, - '3' => { - 'name' => 'g', - 'type' => '4531' - }, - '4' => { - 'name' => 'y', - 'type' => '4531' - }, - '5' => { - 'name' => 'x', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_dsa_raw', - 'Source' => 'privkey_raw.c', - 'SourceLine' => '104' - }, - '725239' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'm', - 'type' => '4531' - }, - '2' => { - 'name' => 'e', - 'type' => '4531' - }, - '3' => { - 'name' => 'd', - 'type' => '4531' - }, - '4' => { - 'name' => 'p', - 'type' => '4531' - }, - '5' => { - 'name' => 'q', - 'type' => '4531' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4531' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '4531' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_rsa_raw', - 'Source' => 'privkey_raw.c', - 'SourceLine' => '58' - }, - '725798' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '909492' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_init', - 'Source' => 'privkey.c', - 'SourceLine' => '48' - }, - '725810' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'curve', - 'type' => '3208' - }, - '2' => { - 'name' => 'x', - 'type' => '4430' - }, - '3' => { - 'name' => 'y', - 'type' => '4430' - }, - '4' => { - 'name' => 'k', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import_ecc_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1111' - }, - '725822' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'key', - 'type' => '156748' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_x509', - 'Source' => 'privkey.c', - 'SourceLine' => '721' - }, - '725834' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_privkey_deinit', - 'Source' => 'privkey.c', - 'SourceLine' => '77' - }, - '725880' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'p', - 'type' => '4430' - }, - '2' => { - 'name' => 'q', - 'type' => '4430' - }, - '3' => { - 'name' => 'g', - 'type' => '4430' - }, - '4' => { - 'name' => 'y', - 'type' => '4430' - }, - '5' => { - 'name' => 'x', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_privkey_import_dsa_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1015' - }, - '725926' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156748' - }, - '1' => { - 'name' => 'm', - 'type' => '4430' - }, - '2' => { - 'name' => 'e', - 'type' => '4430' - }, - '3' => { - 'name' => 'd', - 'type' => '4430' - }, - '4' => { - 'name' => 'p', - 'type' => '4430' - }, - '5' => { - 'name' => 'q', - 'type' => '4430' - }, - '6' => { - 'name' => 'u', - 'offset' => '0', - 'type' => '4430' - }, - '7' => { - 'name' => 'e1', - 'offset' => '8', - 'type' => '4430' - }, - '8' => { - 'name' => 'e2', - 'offset' => '16', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_privkey_import_rsa_raw2' - }, - '739881' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'tl_flags', - 'type' => '145' - }, - '2' => { - 'name' => 'tl_vflags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_system_trust', - 'Source' => 'certs.c', - 'SourceLine' => '296' - }, - '740478' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'ca_file', - 'type' => '110' - }, - '2' => { - 'name' => 'crl_file', - 'type' => '110' - }, - '3' => { - 'name' => 'type', - 'type' => '245081' - }, - '4' => { - 'name' => 'tl_flags', - 'type' => '145' - }, - '5' => { - 'name' => 'tl_vflags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_trust_file', - 'Source' => 'verify-high2.c', - 'SourceLine' => '304' - }, - '769565' => { - 'Header' => 'socket.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'fd', - 'type' => '75' - }, - '2' => { - 'name' => 'connect_addr', - 'type' => '1326' - }, - '3' => { - 'name' => 'connect_addrlen', - 'type' => '1006' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_fastopen', - 'Source' => 'fastopen.c', - 'SourceLine' => '181' - }, - '770815' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'pull_func', - 'type' => '4922' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_pull_function', - 'Source' => 'system_override.c', - 'SourceLine' => '79' - }, - '770827' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'func', - 'type' => '5008' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_pull_timeout_function', - 'Source' => 'system_override.c', - 'SourceLine' => '118' - }, - '770851' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'vec_func', - 'type' => '5046' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_transport_set_vec_push_function', - 'Source' => 'system_override.c', - 'SourceLine' => '165' - }, - '770897' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'ptr', - 'type' => '3312' - }, - '1' => { - 'name' => 'ms', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_system_recv_timeout', - 'Source' => 'sockets.c', - 'SourceLine' => '148' - }, - '79800' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '2706' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_handshake_description_get_name', - 'Source' => 'debug.c', - 'SourceLine' => '83' - }, - '832785' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '4430' - }, - '1' => { - 'name' => 'result', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hex_encode2', - 'Source' => 'str.c', - 'SourceLine' => '660' - }, - '833121' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'data', - 'type' => '4430' - }, - '1' => { - 'name' => 'result', - 'type' => '240' - }, - '2' => { - 'name' => 'result_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hex_encode', - 'Source' => 'str.c', - 'SourceLine' => '626' - }, - '833450' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'hex_data', - 'type' => '4430' - }, - '1' => { - 'name' => 'result', - 'type' => '216' - }, - '2' => { - 'name' => 'result_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hex_decode', - 'Source' => 'str.c', - 'SourceLine' => '590' - }, - '833764' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'hex_data', - 'type' => '4430' - }, - '1' => { - 'name' => 'result', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hex_decode2', - 'Source' => 'str.c', - 'SourceLine' => '551' - }, - '834518' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'hex_data', - 'type' => '110' - }, - '1' => { - 'name' => 'hex_size', - 'type' => '52' - }, - '2' => { - 'name' => 'bin_data', - 'type' => '216' - }, - '3' => { - 'name' => 'bin_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hex2bin', - 'Source' => 'str.c', - 'SourceLine' => '493' - }, - '857913' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'password', - 'type' => '5465' - }, - '1' => { - 'name' => 'plen', - 'type' => '145' - }, - '2' => { - 'name' => 'out', - 'type' => '4531' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_utf8_password_normalize', - 'Source' => 'str-unicode.c', - 'SourceLine' => '194' - }, - '877134' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_session_get_flags', - 'Source' => 'state.c', - 'SourceLine' => '1349' - }, - '877327' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'read', - 'type' => '145' - }, - '2' => { - 'name' => 'seq_number', - 'type' => '3881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_record_set_state', - 'Source' => 'state.c', - 'SourceLine' => '1300' - }, - '877760' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'read', - 'type' => '145' - }, - '2' => { - 'name' => 'mac_key', - 'type' => '4531' - }, - '3' => { - 'name' => 'IV', - 'type' => '4531' - }, - '4' => { - 'name' => 'cipher_key', - 'type' => '4531' - }, - '5' => { - 'name' => 'seq_number', - 'type' => '3881' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_record_get_state', - 'Source' => 'state.c', - 'SourceLine' => '1245' - }, - '878203' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'htype', - 'type' => '145' - }, - '2' => { - 'name' => 'post', - 'type' => '75' - }, - '3' => { - 'name' => 'func', - 'type' => '4377' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_hook_function', - 'Source' => 'state.c', - 'SourceLine' => '1215' - }, - '878290' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'random', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_handshake_set_random', - 'Source' => 'state.c', - 'SourceLine' => '1172' - }, - '878436' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'secret', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_get_master_secret', - 'Source' => 'state.c', - 'SourceLine' => '1135' - }, - '878497' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'client', - 'type' => '4531' - }, - '2' => { - 'name' => 'server', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_get_random', - 'Source' => 'state.c', - 'SourceLine' => '1108' - }, - '878702' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'cbtype', - 'type' => '864137' - }, - '2' => { - 'name' => 'cb', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_channel_binding', - 'Source' => 'state.c', - 'SourceLine' => '1042' - }, - '878805' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_enable_compatibility_mode', - 'Source' => 'state.c', - 'SourceLine' => '1020' - }, - '878850' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'func', - 'type' => '4436' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_post_client_hello_function', - 'Source' => 'state.c', - 'SourceLine' => '998' - }, - '878982' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_record_get_direction', - 'Source' => 'state.c', - 'SourceLine' => '948' - }, - '879031' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'func', - 'type' => '13495' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_set_verify_function', - 'Source' => 'state.c', - 'SourceLine' => '925' - }, - '879090' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'ptr', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_session_set_ptr', - 'Source' => 'state.c', - 'SourceLine' => '895' - }, - '879149' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '216', - 'ShortName' => 'gnutls_session_get_ptr', - 'Source' => 'state.c', - 'SourceLine' => '881' - }, - '879406' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_resumption_requested', - 'Source' => 'state.c', - 'SourceLine' => '822' - }, - '879540' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'allow', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_handshake_set_private_extensions', - 'Source' => 'state.c', - 'SourceLine' => '775' - }, - '879794' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'status', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_send_x509_rdn_sequence', - 'Source' => 'state.c', - 'SourceLine' => '708' - }, - '879853' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'status', - 'type' => '863506' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_openpgp_send_cert', - 'Source' => 'state.c', - 'SourceLine' => '686' - }, - '881736' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_deinit', - 'Source' => 'state.c', - 'SourceLine' => '467' - }, - '882335' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '882975' - }, - '1' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_init', - 'Source' => 'state.c', - 'SourceLine' => '334' - }, - '884565' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '2242', - 'ShortName' => 'gnutls_kx_get', - 'Source' => 'state.c', - 'SourceLine' => '127' - }, - '885608' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_safe_renegotiation_status', - 'Source' => 'safe_renegotiation.c', - 'SourceLine' => '430' - }, - '885620' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_session_ext_master_secret_status', - 'Source' => 'ext_master_secret.c', - 'SourceLine' => '144' - }, - '885632' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_session_etm_status', - 'Source' => 'etm.c', - 'SourceLine' => '137' - }, - '885644' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'type', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_heartbeat_allowed' - }, - '886044' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'responder_id', - 'type' => '4531' - }, - '2' => { - 'name' => 'responder_id_size', - 'type' => '52' - }, - '3' => { - 'name' => 'extensions', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_status_request_enable_client', - 'Source' => 'status_request.c', - 'SourceLine' => '345' - }, - '886056' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_ticket_enable_client', - 'Source' => 'session_ticket.c', - 'SourceLine' => '524' - }, - '904581' => { - 'Data' => 1, - 'Header' => 'urls.h', - 'Line' => '31', - 'Return' => '904570', - 'ShortName' => '_gnutls_custom_urls' - }, - '904592' => { - 'Data' => 1, - 'Header' => 'urls.h', - 'Line' => '32', - 'Return' => '145', - 'ShortName' => '_gnutls_custom_urls_size' - }, - '904603' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '156964' - }, - '1' => { - 'name' => 'fn', - 'type' => '158609' - }, - '2' => { - 'name' => 'userdata', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_pin_function', - 'Source' => 'x509.c', - 'SourceLine' => '2135' - }, - '904675' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'sc', - 'type' => '156964' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_free_crls', - 'Source' => 'x509.c', - 'SourceLine' => '2114' - }, - '904719' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'p12blob', - 'type' => '4430' - }, - '2' => { - 'name' => 'type', - 'type' => '245081' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_simple_pkcs12_mem', - 'Source' => 'x509.c', - 'SourceLine' => '2021' - }, - '905506' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'pkcs12file', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '245081' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_simple_pkcs12_file', - 'Source' => 'x509.c', - 'SourceLine' => '1960' - }, - '905842' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'crlfile', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_crl_file', - 'Source' => 'x509.c', - 'SourceLine' => '1904' - }, - '905984' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'crl_list', - 'type' => '906321' - }, - '2' => { - 'name' => 'crl_list_size', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_crl', - 'Source' => 'x509.c', - 'SourceLine' => '1851' - }, - '906367' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'CRL', - 'type' => '4430' - }, - '2' => { - 'name' => 'type', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_crl_mem', - 'Source' => 'x509.c', - 'SourceLine' => '1820' - }, - '906509' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '156964' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_system_trust', - 'Source' => 'x509.c', - 'SourceLine' => '1798' - }, - '906584' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '156964' - }, - '1' => { - 'name' => 'ca_dir', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_trust_dir', - 'Source' => 'x509.c', - 'SourceLine' => '1768' - }, - '906726' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'cred', - 'type' => '156964' - }, - '1' => { - 'name' => 'cafile', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_trust_file', - 'Source' => 'x509.c', - 'SourceLine' => '1737' - }, - '906868' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'ca_list', - 'type' => '158389' - }, - '2' => { - 'name' => 'ca_list_size', - 'type' => '75' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_trust', - 'Source' => 'x509.c', - 'SourceLine' => '1675' - }, - '907240' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'ca', - 'type' => '4430' - }, - '2' => { - 'name' => 'type', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_trust_mem', - 'Source' => 'x509.c', - 'SourceLine' => '1639' - }, - '907381' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'certfile', - 'type' => '110' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '110' - }, - '3' => { - 'name' => 'type', - 'type' => '245081' - }, - '4' => { - 'name' => 'pass', - 'type' => '110' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_key_file2', - 'Source' => 'x509.c', - 'SourceLine' => '1590' - }, - '907517' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'certfile', - 'type' => '110' - }, - '2' => { - 'name' => 'keyfile', - 'type' => '110' - }, - '3' => { - 'name' => 'type', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_key_file', - 'Source' => 'x509.c', - 'SourceLine' => '1539' - }, - '907668' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'tlist', - 'type' => '907727' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_get_trust_list', - 'Source' => 'x509.c', - 'SourceLine' => '1495' - }, - '907733' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'tlist', - 'type' => '159042' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_certificate_set_trust_list', - 'Source' => 'x509.c', - 'SourceLine' => '1473' - }, - '907831' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'names', - 'type' => '301410' - }, - '2' => { - 'name' => 'names_size', - 'type' => '75' - }, - '3' => { - 'name' => 'pcert_list', - 'type' => '5584' - }, - '4' => { - 'name' => 'pcert_list_size', - 'type' => '75' - }, - '5' => { - 'name' => 'key', - 'type' => '156725' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_key', - 'Source' => 'x509.c', - 'SourceLine' => '1362' - }, - '909001' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'index', - 'type' => '145' - }, - '2' => { - 'name' => 'crt_list', - 'type' => '909294' - }, - '3' => { - 'name' => 'crt_list_size', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_x509_crt', - 'Source' => 'x509.c', - 'SourceLine' => '1294' - }, - '909300' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'index', - 'type' => '145' - }, - '2' => { - 'name' => 'key', - 'type' => '909492' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_get_x509_key', - 'Source' => 'x509.c', - 'SourceLine' => '1252' - }, - '909498' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'cert_list', - 'type' => '158389' - }, - '2' => { - 'name' => 'cert_list_size', - 'type' => '75' - }, - '3' => { - 'name' => 'key', - 'type' => '156748' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_key', - 'Source' => 'x509.c', - 'SourceLine' => '1141' - }, - '910331' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'cert', - 'type' => '4430' - }, - '2' => { - 'name' => 'key', - 'type' => '4430' - }, - '3' => { - 'name' => 'type', - 'type' => '245081' - }, - '4' => { - 'name' => 'pass', - 'type' => '110' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_key_mem2', - 'Source' => 'x509.c', - 'SourceLine' => '1043' - }, - '910467' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'res', - 'type' => '156964' - }, - '1' => { - 'name' => 'cert', - 'type' => '4430' - }, - '2' => { - 'name' => 'key', - 'type' => '4430' - }, - '3' => { - 'name' => 'type', - 'type' => '245081' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_certificate_set_x509_key_mem', - 'Source' => 'x509.c', - 'SourceLine' => '1003' - }, - '922680' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '2007529' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_init', - 'Source' => 'pkcs12.c', - 'SourceLine' => '151' - }, - '922691' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '903650' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_import', - 'Source' => 'pkcs12.c', - 'SourceLine' => '200' - }, - '922702' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '903650' - }, - '1' => { - 'name' => 'pass', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_verify_mac', - 'Source' => 'pkcs12.c', - 'SourceLine' => '1008' - }, - '922713' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'p12', - 'type' => '903650' - }, - '1' => { - 'name' => 'password', - 'type' => '110' - }, - '2' => { - 'name' => 'key', - 'type' => '909492' - }, - '3' => { - 'name' => 'chain', - 'type' => '909294' - }, - '4' => { - 'name' => 'chain_len', - 'type' => '22864' - }, - '5' => { - 'name' => 'extra_certs', - 'type' => '909294' - }, - '6' => { - 'name' => 'extra_certs_len', - 'offset' => '0', - 'type' => '22864' - }, - '7' => { - 'name' => 'crl', - 'offset' => '8', - 'type' => '906321' - }, - '8' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pkcs12_simple_parse', - 'Source' => 'pkcs12.c', - 'SourceLine' => '1447' - }, - '922724' => { - 'Header' => 'pkcs12.h', - 'Param' => { - '0' => { - 'name' => 'pkcs12', - 'type' => '903650' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_pkcs12_deinit', - 'Source' => 'pkcs12.c', - 'SourceLine' => '173' - }, - '922758' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '891381' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crl_deinit', - 'Source' => 'crl.c', - 'SourceLine' => '93' - }, - '922827' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crl', - 'type' => '906321' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crl_init', - 'Source' => 'crl.c', - 'SourceLine' => '69' - }, - '922839' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'crl_list', - 'type' => '2287463' - }, - '2' => { - 'name' => 'crl_size', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - }, - '4' => { - 'name' => 'verification_flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_crls', - 'Source' => 'verify-high.c', - 'SourceLine' => '703' - }, - '922851' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'cas', - 'type' => '4430' - }, - '2' => { - 'name' => 'crls', - 'type' => '4430' - }, - '3' => { - 'name' => 'type', - 'type' => '245081' - }, - '4' => { - 'name' => 'tl_flags', - 'type' => '145' - }, - '5' => { - 'name' => 'tl_vflags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_trust_mem', - 'Source' => 'verify-high2.c', - 'SourceLine' => '66' - }, - '922875' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'ca_dir', - 'type' => '110' - }, - '2' => { - 'name' => 'crl_dir', - 'type' => '110' - }, - '3' => { - 'name' => 'type', - 'type' => '245081' - }, - '4' => { - 'name' => 'tl_flags', - 'type' => '145' - }, - '5' => { - 'name' => 'tl_vflags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_trust_dir', - 'Source' => 'verify-high2.c', - 'SourceLine' => '435' - }, - '922909' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'clist', - 'type' => '2286759' - }, - '2' => { - 'name' => 'clist_size', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_add_cas', - 'Source' => 'verify-high.c', - 'SourceLine' => '272' - }, - '922987' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'fn', - 'type' => '158609' - }, - '2' => { - 'name' => 'userdata', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_privkey_set_pin_function', - 'Source' => 'privkey.c', - 'SourceLine' => '1414' - }, - '923055' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5584' - }, - '1' => { - 'name' => 'crt', - 'type' => '158389' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_export_x509', - 'Source' => 'pcert.c', - 'SourceLine' => '424' - }, - '923067' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'key', - 'type' => '909492' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_export_x509', - 'Source' => 'privkey.c', - 'SourceLine' => '767' - }, - '923079' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '159258' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_init', - 'Source' => 'privkey.c', - 'SourceLine' => '310' - }, - '923102' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5584' - }, - '1' => { - 'name' => 'crt', - 'type' => '158389' - }, - '2' => { - 'name' => 'ncrt', - 'type' => '22864' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_import_x509_list', - 'Source' => 'pcert.c', - 'SourceLine' => '109' - }, - '923144' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'seq', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'type' => '216' - }, - '3' => { - 'name' => 'san_size', - 'type' => '7722' - }, - '4' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_subject_alt_name', - 'Source' => 'x509.c', - 'SourceLine' => '1727' - }, - '923156' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'oid', - 'type' => '110' - }, - '2' => { - 'name' => 'indx', - 'type' => '145' - }, - '3' => { - 'name' => 'raw_flag', - 'type' => '145' - }, - '4' => { - 'name' => 'buf', - 'type' => '216' - }, - '5' => { - 'name' => 'buf_size', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_get_dn_by_oid', - 'Source' => 'x509.c', - 'SourceLine' => '783' - }, - '923191' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'issuer', - 'type' => '156760' - }, - '2' => { - 'name' => 'verify', - 'type' => '22864' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_verify_direct', - 'Source' => 'ocsp.c', - 'SourceLine' => '2112' - }, - '923202' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '2665173' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_init', - 'Source' => 'ocsp.c', - 'SourceLine' => '109' - }, - '923213' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_import', - 'Source' => 'ocsp.c', - 'SourceLine' => '225' - }, - '923224' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '2' => { - 'name' => 'crt', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_check_crt', - 'Source' => 'ocsp.c', - 'SourceLine' => '1296' - }, - '923236' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'trustlist', - 'type' => '159042' - }, - '2' => { - 'name' => 'verify', - 'type' => '22864' - }, - '3' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_verify', - 'Source' => 'ocsp.c', - 'SourceLine' => '2196' - }, - '923248' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_ocsp_resp_deinit', - 'Source' => 'ocsp.c', - 'SourceLine' => '147' - }, - '923282' => { - 'Header' => 'ocsp.h', - 'Param' => { - '0' => { - 'name' => 'resp', - 'type' => '904095' - }, - '1' => { - 'name' => 'indx', - 'type' => '145' - }, - '10' => { - 'name' => 'revocation_reason', - 'offset' => '32', - 'type' => '22864' - }, - '2' => { - 'name' => 'digest', - 'type' => '535126' - }, - '3' => { - 'name' => 'issuer_name_hash', - 'type' => '4531' - }, - '4' => { - 'name' => 'issuer_key_hash', - 'type' => '4531' - }, - '5' => { - 'name' => 'serial_number', - 'type' => '4531' - }, - '6' => { - 'name' => 'cert_status', - 'offset' => '0', - 'type' => '22864' - }, - '7' => { - 'name' => 'this_update', - 'offset' => '8', - 'type' => '4570' - }, - '8' => { - 'name' => 'next_update', - 'offset' => '16', - 'type' => '4570' - }, - '9' => { - 'name' => 'revocation_time', - 'offset' => '24', - 'type' => '4570' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_ocsp_resp_get_single', - 'Source' => 'ocsp.c', - 'SourceLine' => '1405' - }, - '923339' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'f', - 'type' => '2599573' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_tlsfeatures_init' - }, - '923351' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'features', - 'type' => '893892' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - }, - '3' => { - 'name' => 'critical', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_get_tlsfeatures' - }, - '923363' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'f', - 'type' => '893892' - }, - '1' => { - 'name' => 'idx', - 'type' => '145' - }, - '2' => { - 'name' => 'feature', - 'type' => '22864' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_tlsfeatures_get', - 'Source' => 'tls_features.c', - 'SourceLine' => '84' - }, - '923375' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'f', - 'type' => '893892' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_tlsfeatures_deinit', - 'Source' => 'tls_features.c', - 'SourceLine' => '65' - }, - '923410' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'list', - 'type' => '159042' - }, - '1' => { - 'name' => 'cert_list', - 'type' => '158389' - }, - '2' => { - 'name' => 'cert_list_size', - 'type' => '145' - }, - '3' => { - 'name' => 'data', - 'type' => '13501' - }, - '4' => { - 'name' => 'elements', - 'type' => '145' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - }, - '6' => { - 'name' => 'voutput', - 'offset' => '0', - 'type' => '22864' - }, - '7' => { - 'name' => 'func', - 'offset' => '8', - 'type' => '2285368' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_trust_list_verify_crt2', - 'Source' => 'verify-high.c', - 'SourceLine' => '1225' - }, - '923422' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'response', - 'type' => '4531' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_ocsp_status_request_get' - }, - '923485' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pcert', - 'type' => '5584' - }, - '1' => { - 'name' => 'crt', - 'type' => '156760' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_pcert_import_x509', - 'Source' => 'pcert.c', - 'SourceLine' => '48' - }, - '923521' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'pkey', - 'type' => '156725' - }, - '1' => { - 'name' => 'data', - 'type' => '4430' - }, - '2' => { - 'name' => 'format', - 'type' => '245081' - }, - '3' => { - 'name' => 'password', - 'type' => '110' - }, - '4' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_x509_raw', - 'Source' => 'privkey.c', - 'SourceLine' => '1299' - }, - '923544' => { - 'Header' => 'abstract.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '156725' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_privkey_import_url', - 'Source' => 'privkey.c', - 'SourceLine' => '1354' - }, - '923585' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'url', - 'type' => '110' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_url_is_supported', - 'Source' => 'urls.c', - 'SourceLine' => '44' - }, - '923597' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'fn', - 'type' => '158609' - }, - '2' => { - 'name' => 'userdata', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_x509_crt_set_pin_function', - 'Source' => 'x509.c', - 'SourceLine' => '3907' - }, - '923609' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'crt', - 'type' => '156760' - }, - '1' => { - 'name' => 'url', - 'type' => '110' - }, - '2' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_x509_crt_import_url', - 'Source' => 'x509.c', - 'SourceLine' => '3934' - }, - '923620' => { - 'Header' => 'x509.h', - 'Param' => { - '0' => { - 'name' => 'cert', - 'type' => '156760' - }, - '1' => { - 'name' => 'issuer', - 'type' => '156760' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_x509_crt_check_issuer', - 'Source' => 'verify.c', - 'SourceLine' => '775' - }, - '951482' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'do_send_supplemental', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_supplemental_send', - 'Source' => 'supplemental.c', - 'SourceLine' => '390' - }, - '951541' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'do_recv_supplemental', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_supplemental_recv', - 'Source' => 'supplemental.c', - 'SourceLine' => '374' - }, - '951600' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'session', - 'type' => '3324' - }, - '1' => { - 'name' => 'name', - 'type' => '110' - }, - '2' => { - 'name' => 'type', - 'type' => '941681' - }, - '3' => { - 'name' => 'recv_func', - 'type' => '943119' - }, - '4' => { - 'name' => 'send_func', - 'type' => '943131' - }, - '5' => { - 'name' => 'flags', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_session_supplemental_register', - 'Source' => 'supplemental.c', - 'SourceLine' => '329' - }, - '951995' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'name', - 'type' => '110' - }, - '1' => { - 'name' => 'type', - 'type' => '941681' - }, - '2' => { - 'name' => 'recv_func', - 'type' => '943119' - }, - '3' => { - 'name' => 'send_func', - 'type' => '943131' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_supplemental_register', - 'Source' => 'supplemental.c', - 'SourceLine' => '289' - }, - '953991' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '941681' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '110', - 'ShortName' => 'gnutls_supplemental_get_name', - 'Source' => 'supplemental.c', - 'SourceLine' => '73' - }, - '968983' => { - 'Header' => 'crypto.h', - 'Return' => '1', - 'ShortName' => 'gnutls_rnd_refresh', - 'Source' => 'random.c', - 'SourceLine' => '163' - }, - '984006' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975837' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_aead_cipher_deinit', - 'Source' => 'crypto-api.c', - 'SourceLine' => '789' - }, - '984124' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975837' - }, - '1' => { - 'name' => 'nonce', - 'type' => '334' - }, - '2' => { - 'name' => 'nonce_len', - 'type' => '52' - }, - '3' => { - 'name' => 'auth', - 'type' => '334' - }, - '4' => { - 'name' => 'auth_len', - 'type' => '52' - }, - '5' => { - 'name' => 'tag_size', - 'type' => '52' - }, - '6' => { - 'name' => 'ptext', - 'offset' => '0', - 'type' => '334' - }, - '7' => { - 'name' => 'ptext_len', - 'offset' => '8', - 'type' => '52' - }, - '8' => { - 'name' => 'ctext', - 'offset' => '16', - 'type' => '216' - }, - '9' => { - 'name' => 'ctext_len', - 'offset' => '24', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_aead_cipher_encrypt', - 'Source' => 'crypto-api.c', - 'SourceLine' => '747' - }, - '984874' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975837' - }, - '1' => { - 'name' => 'nonce', - 'type' => '334' - }, - '2' => { - 'name' => 'nonce_len', - 'type' => '52' - }, - '3' => { - 'name' => 'auth', - 'type' => '334' - }, - '4' => { - 'name' => 'auth_len', - 'type' => '52' - }, - '5' => { - 'name' => 'tag_size', - 'type' => '52' - }, - '6' => { - 'name' => 'ctext', - 'offset' => '0', - 'type' => '334' - }, - '7' => { - 'name' => 'ctext_len', - 'offset' => '8', - 'type' => '52' - }, - '8' => { - 'name' => 'ptext', - 'offset' => '16', - 'type' => '216' - }, - '9' => { - 'name' => 'ptext_len', - 'offset' => '24', - 'type' => '7722' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_aead_cipher_decrypt', - 'Source' => 'crypto-api.c', - 'SourceLine' => '691' - }, - '985620' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '985954' - }, - '1' => { - 'name' => 'cipher', - 'type' => '2122' - }, - '2' => { - 'name' => 'key', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_aead_cipher_init', - 'Source' => 'crypto-api.c', - 'SourceLine' => '644' - }, - '985981' => { - 'Header' => 'gnutls.h', - 'Param' => { - '0' => { - 'name' => 'key', - 'type' => '4531' - }, - '1' => { - 'name' => 'key_size', - 'type' => '145' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_key_generate', - 'Source' => 'crypto-api.c', - 'SourceLine' => '592' - }, - '986350' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2533' - }, - '1' => { - 'name' => 'ptext', - 'type' => '334' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - }, - '3' => { - 'name' => 'digest', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hash_fast', - 'Source' => 'crypto-api.c', - 'SourceLine' => '573' - }, - '986491' => { - 'Header' => 'crypto.h', - 'Line' => '111', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2533' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '145', - 'ShortName' => 'gnutls_hash_get_len', - 'Source' => 'crypto-api.c', - 'SourceLine' => '553' - }, - '986597' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975881' - }, - '1' => { - 'name' => 'digest', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hash_deinit', - 'Source' => 'crypto-api.c', - 'SourceLine' => '536' - }, - '986708' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975881' - }, - '1' => { - 'name' => 'digest', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hash_output', - 'Source' => 'crypto-api.c', - 'SourceLine' => '521' - }, - '986841' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975881' - }, - '1' => { - 'name' => 'ptext', - 'type' => '334' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hash', - 'Source' => 'crypto-api.c', - 'SourceLine' => '506' - }, - '986981' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'dig', - 'type' => '987189' - }, - '1' => { - 'name' => 'algorithm', - 'type' => '2533' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hash_init', - 'Source' => 'crypto-api.c', - 'SourceLine' => '470' - }, - '987216' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'algorithm', - 'type' => '2423' - }, - '1' => { - 'name' => 'key', - 'type' => '334' - }, - '2' => { - 'name' => 'keylen', - 'type' => '52' - }, - '3' => { - 'name' => 'ptext', - 'type' => '334' - }, - '4' => { - 'name' => 'ptext_len', - 'type' => '52' - }, - '5' => { - 'name' => 'digest', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hmac_fast', - 'Source' => 'crypto-api.c', - 'SourceLine' => '445' - }, - '987509' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975903' - }, - '1' => { - 'name' => 'digest', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hmac_deinit', - 'Source' => 'crypto-api.c', - 'SourceLine' => '406' - }, - '987620' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975903' - }, - '1' => { - 'name' => 'digest', - 'type' => '216' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hmac_output', - 'Source' => 'crypto-api.c', - 'SourceLine' => '391' - }, - '987739' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975903' - }, - '1' => { - 'name' => 'ptext', - 'type' => '334' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hmac', - 'Source' => 'crypto-api.c', - 'SourceLine' => '376' - }, - '987879' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975903' - }, - '1' => { - 'name' => 'nonce', - 'type' => '334' - }, - '2' => { - 'name' => 'nonce_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_hmac_set_nonce', - 'Source' => 'crypto-api.c', - 'SourceLine' => '357' - }, - '988043' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'dig', - 'type' => '988302' - }, - '1' => { - 'name' => 'algorithm', - 'type' => '2423' - }, - '2' => { - 'name' => 'key', - 'type' => '334' - }, - '3' => { - 'name' => 'keylen', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_hmac_init', - 'Source' => 'crypto-api.c', - 'SourceLine' => '322' - }, - '988308' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975783' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_cipher_deinit', - 'Source' => 'crypto-api.c', - 'SourceLine' => '289' - }, - '988503' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975783' - }, - '1' => { - 'name' => 'ctext', - 'type' => '334' - }, - '2' => { - 'name' => 'ctext_len', - 'type' => '52' - }, - '3' => { - 'name' => 'ptext', - 'type' => '216' - }, - '4' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_decrypt2', - 'Source' => 'crypto-api.c', - 'SourceLine' => '265' - }, - '988806' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975783' - }, - '1' => { - 'name' => 'ptext', - 'type' => '334' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - }, - '3' => { - 'name' => 'ctext', - 'type' => '216' - }, - '4' => { - 'name' => 'ctext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_encrypt2', - 'Source' => 'crypto-api.c', - 'SourceLine' => '234' - }, - '989031' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975783' - }, - '1' => { - 'name' => 'ctext', - 'type' => '216' - }, - '2' => { - 'name' => 'ctext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_decrypt', - 'Source' => 'crypto-api.c', - 'SourceLine' => '203' - }, - '989332' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975783' - }, - '1' => { - 'name' => 'ptext', - 'type' => '216' - }, - '2' => { - 'name' => 'ptext_len', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_encrypt', - 'Source' => 'crypto-api.c', - 'SourceLine' => '178' - }, - '989527' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975783' - }, - '1' => { - 'name' => 'iv', - 'type' => '216' - }, - '2' => { - 'name' => 'ivlen', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '1', - 'ShortName' => 'gnutls_cipher_set_iv', - 'Source' => 'crypto-api.c', - 'SourceLine' => '154' - }, - '989817' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975783' - }, - '1' => { - 'name' => 'ptext', - 'type' => '334' - }, - '2' => { - 'name' => 'ptext_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_add_auth', - 'Source' => 'crypto-api.c', - 'SourceLine' => '129' - }, - '990173' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '975783' - }, - '1' => { - 'name' => 'tag', - 'type' => '216' - }, - '2' => { - 'name' => 'tag_size', - 'type' => '52' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_tag', - 'Source' => 'crypto-api.c', - 'SourceLine' => '101' - }, - '990529' => { - 'Header' => 'crypto.h', - 'Param' => { - '0' => { - 'name' => 'handle', - 'type' => '990934' - }, - '1' => { - 'name' => 'cipher', - 'type' => '2122' - }, - '2' => { - 'name' => 'key', - 'type' => '4430' - }, - '3' => { - 'name' => 'iv', - 'type' => '4430' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx' - }, - 'Return' => '75', - 'ShortName' => 'gnutls_cipher_init', - 'Source' => 'crypto-api.c', - 'SourceLine' => '56' - } - }, - 'SymbolVersion' => { - 'UC_CATEGORY_Cc' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Ll' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Lm' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Lo' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Lt' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Lu' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Mc' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Me' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Mn' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Nd' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Nl' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_No' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Pc' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Pd' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Pe' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Pf' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Pi' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Po' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Ps' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Sc' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Sk' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Sm' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_So' => 'vasprintf@@GLIBC_2.2.5', - 'UC_CATEGORY_Zs' => 'vasprintf@@GLIBC_2.2.5', - '_ITM_deregisterTMCloneTable' => 'vasprintf@@GLIBC_2.2.5', - '_ITM_registerTMCloneTable' => 'vasprintf@@GLIBC_2.2.5', - '_Jv_RegisterClasses' => 'vasprintf@@GLIBC_2.2.5', - '__gmon_start__' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_add' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_add_ui' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_cdiv_q' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_clear' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_cmp' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_cmp_ui' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_fdiv_q' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_fdiv_q_2exp' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_fdiv_r' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_fdiv_r_2exp' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_gcd' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_init' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_invert' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_lcm' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_mod' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_mul' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_mul_2exp' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_mul_ui' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_powm' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_probab_prime_p' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_set' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_set_ui' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_sizeinbase' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_sqrt' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_sub' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_sub_ui' => 'vasprintf@@GLIBC_2.2.5', - '__gmpz_tstbit' => 'vasprintf@@GLIBC_2.2.5', - '_dsa_generate_dss_g' => '_dsa_generate_dss_g@@GNUTLS_FIPS140_3_4', - '_dsa_generate_dss_pq' => '_dsa_generate_dss_pq@@GNUTLS_FIPS140_3_4', - '_dsa_validate_dss_g' => '_dsa_validate_dss_g@@GNUTLS_FIPS140_3_4', - '_dsa_validate_dss_pq' => '_dsa_validate_dss_pq@@GNUTLS_FIPS140_3_4', - '_gnutls_bin2hex' => '_gnutls_bin2hex@@GNUTLS_PRIVATE_3_4', - '_gnutls_buffer_append_str' => '_gnutls_buffer_append_str@@GNUTLS_PRIVATE_3_4', - '_gnutls_buffer_init' => '_gnutls_buffer_init@@GNUTLS_PRIVATE_3_4', - '_gnutls_buffer_to_datum' => '_gnutls_buffer_to_datum@@GNUTLS_PRIVATE_3_4', - '_gnutls_cidr_to_string' => '_gnutls_cidr_to_string@@GNUTLS_PRIVATE_3_4', - '_gnutls_decode_ber_rs_raw' => '_gnutls_decode_ber_rs_raw@@GNUTLS_FIPS140_3_4', - '_gnutls_digest_exists' => '_gnutls_digest_exists@@GNUTLS_PRIVATE_3_4', - '_gnutls_encode_ber_rs_raw' => '_gnutls_encode_ber_rs_raw@@GNUTLS_FIPS140_3_4', - '_gnutls_global_init_skip' => '_gnutls_global_init_skip@@GNUTLS_3_4', - '_gnutls_hello_set_default_version' => '_gnutls_hello_set_default_version@@GNUTLS_PRIVATE_3_4', - '_gnutls_idna_map' => '_gnutls_idna_map@@GNUTLS_PRIVATE_3_4', - '_gnutls_idna_reverse_map' => '_gnutls_idna_reverse_map@@GNUTLS_PRIVATE_3_4', - '_gnutls_ip_to_string' => '_gnutls_ip_to_string@@GNUTLS_PRIVATE_3_4', - '_gnutls_lib_simulate_error' => '_gnutls_lib_simulate_error@@GNUTLS_PRIVATE_3_4', - '_gnutls_log' => '_gnutls_log@@GNUTLS_PRIVATE_3_4', - '_gnutls_log_level' => '_gnutls_log_level@@GNUTLS_PRIVATE_3_4', - '_gnutls_mac_to_entry' => '_gnutls_mac_to_entry@@GNUTLS_PRIVATE_3_4', - '_gnutls_mpi_log' => '_gnutls_mpi_log@@GNUTLS_PRIVATE_3_4', - '_gnutls_mpi_ops' => '_gnutls_mpi_ops@@GNUTLS_PRIVATE_3_4', - '_gnutls_pkcs12_string_to_key' => '_gnutls_pkcs12_string_to_key@@GNUTLS_PRIVATE_3_4', - '_gnutls_record_set_default_version' => '_gnutls_record_set_default_version@@GNUTLS_PRIVATE_3_4', - '_gnutls_resolve_priorities' => '_gnutls_resolve_priorities@@GNUTLS_PRIVATE_3_4', - '_gnutls_rsa_pms_set_version' => '_gnutls_rsa_pms_set_version@@GNUTLS_PRIVATE_3_4', - '_gnutls_server_name_set_raw' => '_gnutls_server_name_set_raw@@GNUTLS_PRIVATE_3_4', - '_gnutls_ucs2_to_utf8' => '_gnutls_ucs2_to_utf8@@GNUTLS_PRIVATE_3_4', - '_gnutls_utf8_to_ucs2' => '_gnutls_utf8_to_ucs2@@GNUTLS_PRIVATE_3_4', - '_gnutls_x509_name_constraints_merge' => '_gnutls_x509_name_constraints_merge@@GNUTLS_PRIVATE_3_4', - '_rsa_generate_fips186_4_keypair' => '_rsa_generate_fips186_4_keypair@@GNUTLS_FIPS140_3_4', - 'deflate' => 'vasprintf@@GLIBC_2.2.5', - 'deflateEnd' => 'vasprintf@@GLIBC_2.2.5', - 'deflateInit2_' => 'vasprintf@@GLIBC_2.2.5', - 'dsa_generate_dss_keypair' => 'dsa_generate_dss_keypair@@GNUTLS_FIPS140_3_4', - 'gnutls_aead_cipher_decrypt' => 'gnutls_aead_cipher_decrypt@@GNUTLS_3_4', - 'gnutls_aead_cipher_deinit' => 'gnutls_aead_cipher_deinit@@GNUTLS_3_4', - 'gnutls_aead_cipher_encrypt' => 'gnutls_aead_cipher_encrypt@@GNUTLS_3_4', - 'gnutls_aead_cipher_init' => 'gnutls_aead_cipher_init@@GNUTLS_3_4', - 'gnutls_alert_get' => 'gnutls_alert_get@@GNUTLS_3_4', - 'gnutls_alert_get_name' => 'gnutls_alert_get_name@@GNUTLS_3_4', - 'gnutls_alert_get_strname' => 'gnutls_alert_get_strname@@GNUTLS_3_4', - 'gnutls_alert_send' => 'gnutls_alert_send@@GNUTLS_3_4', - 'gnutls_alert_send_appropriate' => 'gnutls_alert_send_appropriate@@GNUTLS_3_4', - 'gnutls_alpn_get_selected_protocol' => 'gnutls_alpn_get_selected_protocol@@GNUTLS_3_4', - 'gnutls_alpn_set_protocols' => 'gnutls_alpn_set_protocols@@GNUTLS_3_4', - 'gnutls_anon_allocate_client_credentials' => 'gnutls_anon_allocate_client_credentials@@GNUTLS_3_4', - 'gnutls_anon_allocate_server_credentials' => 'gnutls_anon_allocate_server_credentials@@GNUTLS_3_4', - 'gnutls_anon_free_client_credentials' => 'gnutls_anon_free_client_credentials@@GNUTLS_3_4', - 'gnutls_anon_free_server_credentials' => 'gnutls_anon_free_server_credentials@@GNUTLS_3_4', - 'gnutls_anon_set_params_function' => 'gnutls_anon_set_params_function@@GNUTLS_3_4', - 'gnutls_anon_set_server_dh_params' => 'gnutls_anon_set_server_dh_params@@GNUTLS_3_4', - 'gnutls_anon_set_server_known_dh_params' => 'gnutls_anon_set_server_known_dh_params@@GNUTLS_3_4', - 'gnutls_anon_set_server_params_function' => 'gnutls_anon_set_server_params_function@@GNUTLS_3_4', - 'gnutls_auth_client_get_type' => 'gnutls_auth_client_get_type@@GNUTLS_3_4', - 'gnutls_auth_get_type' => 'gnutls_auth_get_type@@GNUTLS_3_4', - 'gnutls_auth_server_get_type' => 'gnutls_auth_server_get_type@@GNUTLS_3_4', - 'gnutls_buffer_append_data' => 'gnutls_buffer_append_data@@GNUTLS_3_4', - 'gnutls_bye' => 'gnutls_bye@@GNUTLS_3_4', - 'gnutls_calloc' => 'gnutls_calloc@@GNUTLS_3_4', - 'gnutls_certificate_activation_time_peers' => 'gnutls_certificate_activation_time_peers@@GNUTLS_3_4', - 'gnutls_certificate_allocate_credentials' => 'gnutls_certificate_allocate_credentials@@GNUTLS_3_4', - 'gnutls_certificate_client_get_request_status' => 'gnutls_certificate_client_get_request_status@@GNUTLS_3_4', - 'gnutls_certificate_expiration_time_peers' => 'gnutls_certificate_expiration_time_peers@@GNUTLS_3_4', - 'gnutls_certificate_free_ca_names' => 'gnutls_certificate_free_ca_names@@GNUTLS_3_4', - 'gnutls_certificate_free_cas' => 'gnutls_certificate_free_cas@@GNUTLS_3_4', - 'gnutls_certificate_free_credentials' => 'gnutls_certificate_free_credentials@@GNUTLS_3_4', - 'gnutls_certificate_free_crls' => 'gnutls_certificate_free_crls@@GNUTLS_3_4', - 'gnutls_certificate_free_keys' => 'gnutls_certificate_free_keys@@GNUTLS_3_4', - 'gnutls_certificate_get_crt_raw' => 'gnutls_certificate_get_crt_raw@@GNUTLS_3_4', - 'gnutls_certificate_get_issuer' => 'gnutls_certificate_get_issuer@@GNUTLS_3_4', - 'gnutls_certificate_get_openpgp_crt' => 'gnutls_certificate_get_openpgp_crt@@GNUTLS_3_4', - 'gnutls_certificate_get_openpgp_key' => 'gnutls_certificate_get_openpgp_key@@GNUTLS_3_4', - 'gnutls_certificate_get_ours' => 'gnutls_certificate_get_ours@@GNUTLS_3_4', - 'gnutls_certificate_get_peers' => 'gnutls_certificate_get_peers@@GNUTLS_3_4', - 'gnutls_certificate_get_peers_subkey_id' => 'gnutls_certificate_get_peers_subkey_id@@GNUTLS_3_4', - 'gnutls_certificate_get_trust_list' => 'gnutls_certificate_get_trust_list@@GNUTLS_3_4', - 'gnutls_certificate_get_verify_flags' => 'gnutls_certificate_get_verify_flags@@GNUTLS_3_4', - 'gnutls_certificate_get_x509_crt' => 'gnutls_certificate_get_x509_crt@@GNUTLS_3_4', - 'gnutls_certificate_get_x509_key' => 'gnutls_certificate_get_x509_key@@GNUTLS_3_4', - 'gnutls_certificate_send_x509_rdn_sequence' => 'gnutls_certificate_send_x509_rdn_sequence@@GNUTLS_3_4', - 'gnutls_certificate_server_set_request' => 'gnutls_certificate_server_set_request@@GNUTLS_3_4', - 'gnutls_certificate_set_dh_params' => 'gnutls_certificate_set_dh_params@@GNUTLS_3_4', - 'gnutls_certificate_set_flags' => 'gnutls_certificate_set_flags@@GNUTLS_3_4', - 'gnutls_certificate_set_key' => 'gnutls_certificate_set_key@@GNUTLS_3_4', - 'gnutls_certificate_set_known_dh_params' => 'gnutls_certificate_set_known_dh_params@@GNUTLS_3_4', - 'gnutls_certificate_set_ocsp_status_request_file' => 'gnutls_certificate_set_ocsp_status_request_file@@GNUTLS_3_4', - 'gnutls_certificate_set_ocsp_status_request_function' => 'gnutls_certificate_set_ocsp_status_request_function@@GNUTLS_3_4', - 'gnutls_certificate_set_ocsp_status_request_function2' => 'gnutls_certificate_set_ocsp_status_request_function2@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key' => 'gnutls_certificate_set_openpgp_key@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_file' => 'gnutls_certificate_set_openpgp_key_file@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_file2' => 'gnutls_certificate_set_openpgp_key_file2@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_mem' => 'gnutls_certificate_set_openpgp_key_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_key_mem2' => 'gnutls_certificate_set_openpgp_key_mem2@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_keyring_file' => 'gnutls_certificate_set_openpgp_keyring_file@@GNUTLS_3_4', - 'gnutls_certificate_set_openpgp_keyring_mem' => 'gnutls_certificate_set_openpgp_keyring_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_params_function' => 'gnutls_certificate_set_params_function@@GNUTLS_3_4', - 'gnutls_certificate_set_pin_function' => 'gnutls_certificate_set_pin_function@@GNUTLS_3_4', - 'gnutls_certificate_set_retrieve_function' => 'gnutls_certificate_set_retrieve_function@@GNUTLS_3_4', - 'gnutls_certificate_set_retrieve_function2' => 'gnutls_certificate_set_retrieve_function2@@GNUTLS_3_4', - 'gnutls_certificate_set_trust_list' => 'gnutls_certificate_set_trust_list@@GNUTLS_3_4', - 'gnutls_certificate_set_verify_flags' => 'gnutls_certificate_set_verify_flags@@GNUTLS_3_4', - 'gnutls_certificate_set_verify_function' => 'gnutls_certificate_set_verify_function@@GNUTLS_3_4', - 'gnutls_certificate_set_verify_limits' => 'gnutls_certificate_set_verify_limits@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_crl' => 'gnutls_certificate_set_x509_crl@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_crl_file' => 'gnutls_certificate_set_x509_crl_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_crl_mem' => 'gnutls_certificate_set_x509_crl_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key' => 'gnutls_certificate_set_x509_key@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_file' => 'gnutls_certificate_set_x509_key_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_file2' => 'gnutls_certificate_set_x509_key_file2@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_mem' => 'gnutls_certificate_set_x509_key_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_key_mem2' => 'gnutls_certificate_set_x509_key_mem2@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_simple_pkcs12_file' => 'gnutls_certificate_set_x509_simple_pkcs12_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_simple_pkcs12_mem' => 'gnutls_certificate_set_x509_simple_pkcs12_mem@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_system_trust' => 'gnutls_certificate_set_x509_system_trust@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust' => 'gnutls_certificate_set_x509_trust@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust_dir' => 'gnutls_certificate_set_x509_trust_dir@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust_file' => 'gnutls_certificate_set_x509_trust_file@@GNUTLS_3_4', - 'gnutls_certificate_set_x509_trust_mem' => 'gnutls_certificate_set_x509_trust_mem@@GNUTLS_3_4', - 'gnutls_certificate_type_get' => 'gnutls_certificate_type_get@@GNUTLS_3_4', - 'gnutls_certificate_type_get_id' => 'gnutls_certificate_type_get_id@@GNUTLS_3_4', - 'gnutls_certificate_type_get_name' => 'gnutls_certificate_type_get_name@@GNUTLS_3_4', - 'gnutls_certificate_type_list' => 'gnutls_certificate_type_list@@GNUTLS_3_4', - 'gnutls_certificate_verification_status_print' => 'gnutls_certificate_verification_status_print@@GNUTLS_3_4', - 'gnutls_certificate_verify_peers' => 'gnutls_certificate_verify_peers@@GNUTLS_3_4', - 'gnutls_certificate_verify_peers2' => 'gnutls_certificate_verify_peers2@@GNUTLS_3_4', - 'gnutls_certificate_verify_peers3' => 'gnutls_certificate_verify_peers3@@GNUTLS_3_4', - 'gnutls_check_version' => 'gnutls_check_version@@GNUTLS_3_4', - 'gnutls_cipher_add_auth' => 'gnutls_cipher_add_auth@@GNUTLS_3_4', - 'gnutls_cipher_decrypt' => 'gnutls_cipher_decrypt@@GNUTLS_3_4', - 'gnutls_cipher_decrypt2' => 'gnutls_cipher_decrypt2@@GNUTLS_3_4', - 'gnutls_cipher_deinit' => 'gnutls_cipher_deinit@@GNUTLS_3_4', - 'gnutls_cipher_encrypt' => 'gnutls_cipher_encrypt@@GNUTLS_3_4', - 'gnutls_cipher_encrypt2' => 'gnutls_cipher_encrypt2@@GNUTLS_3_4', - 'gnutls_cipher_get' => 'gnutls_cipher_get@@GNUTLS_3_4', - 'gnutls_cipher_get_block_size' => 'gnutls_cipher_get_block_size@@GNUTLS_3_4', - 'gnutls_cipher_get_id' => 'gnutls_cipher_get_id@@GNUTLS_3_4', - 'gnutls_cipher_get_iv_size' => 'gnutls_cipher_get_iv_size@@GNUTLS_3_4', - 'gnutls_cipher_get_key_size' => 'gnutls_cipher_get_key_size@@GNUTLS_3_4', - 'gnutls_cipher_get_name' => 'gnutls_cipher_get_name@@GNUTLS_3_4', - 'gnutls_cipher_get_tag_size' => 'gnutls_cipher_get_tag_size@@GNUTLS_3_4', - 'gnutls_cipher_init' => 'gnutls_cipher_init@@GNUTLS_3_4', - 'gnutls_cipher_list' => 'gnutls_cipher_list@@GNUTLS_3_4', - 'gnutls_cipher_set_iv' => 'gnutls_cipher_set_iv@@GNUTLS_3_4', - 'gnutls_cipher_suite_get_name' => 'gnutls_cipher_suite_get_name@@GNUTLS_3_4', - 'gnutls_cipher_suite_info' => 'gnutls_cipher_suite_info@@GNUTLS_3_4', - 'gnutls_cipher_tag' => 'gnutls_cipher_tag@@GNUTLS_3_4', - 'gnutls_compression_get' => 'gnutls_compression_get@@GNUTLS_3_4', - 'gnutls_compression_get_id' => 'gnutls_compression_get_id@@GNUTLS_3_4', - 'gnutls_compression_get_name' => 'gnutls_compression_get_name@@GNUTLS_3_4', - 'gnutls_compression_list' => 'gnutls_compression_list@@GNUTLS_3_4', - 'gnutls_credentials_clear' => 'gnutls_credentials_clear@@GNUTLS_3_4', - 'gnutls_credentials_get' => 'gnutls_credentials_get@@GNUTLS_3_4', - 'gnutls_credentials_set' => 'gnutls_credentials_set@@GNUTLS_3_4', - 'gnutls_crypto_register_aead_cipher' => 'gnutls_crypto_register_aead_cipher@@GNUTLS_3_4', - 'gnutls_crypto_register_cipher' => 'gnutls_crypto_register_cipher@@GNUTLS_3_4', - 'gnutls_crypto_register_digest' => 'gnutls_crypto_register_digest@@GNUTLS_3_4', - 'gnutls_crypto_register_mac' => 'gnutls_crypto_register_mac@@GNUTLS_3_4', - 'gnutls_db_check_entry' => 'gnutls_db_check_entry@@GNUTLS_3_4', - 'gnutls_db_check_entry_time' => 'gnutls_db_check_entry_time@@GNUTLS_3_4', - 'gnutls_db_get_default_cache_expiration' => 'gnutls_db_get_default_cache_expiration@@GNUTLS_3_4', - 'gnutls_db_get_ptr' => 'gnutls_db_get_ptr@@GNUTLS_3_4', - 'gnutls_db_remove_session' => 'gnutls_db_remove_session@@GNUTLS_3_4', - 'gnutls_db_set_cache_expiration' => 'gnutls_db_set_cache_expiration@@GNUTLS_3_4', - 'gnutls_db_set_ptr' => 'gnutls_db_set_ptr@@GNUTLS_3_4', - 'gnutls_db_set_remove_function' => 'gnutls_db_set_remove_function@@GNUTLS_3_4', - 'gnutls_db_set_retrieve_function' => 'gnutls_db_set_retrieve_function@@GNUTLS_3_4', - 'gnutls_db_set_store_function' => 'gnutls_db_set_store_function@@GNUTLS_3_4', - 'gnutls_decode_ber_digest_info' => 'gnutls_decode_ber_digest_info@@GNUTLS_3_4', - 'gnutls_deinit' => 'gnutls_deinit@@GNUTLS_3_4', - 'gnutls_dh_get_group' => 'gnutls_dh_get_group@@GNUTLS_3_4', - 'gnutls_dh_get_peers_public_bits' => 'gnutls_dh_get_peers_public_bits@@GNUTLS_3_4', - 'gnutls_dh_get_prime_bits' => 'gnutls_dh_get_prime_bits@@GNUTLS_3_4', - 'gnutls_dh_get_pubkey' => 'gnutls_dh_get_pubkey@@GNUTLS_3_4', - 'gnutls_dh_get_secret_bits' => 'gnutls_dh_get_secret_bits@@GNUTLS_3_4', - 'gnutls_dh_params_cpy' => 'gnutls_dh_params_cpy@@GNUTLS_3_4', - 'gnutls_dh_params_deinit' => 'gnutls_dh_params_deinit@@GNUTLS_3_4', - 'gnutls_dh_params_export2_pkcs3' => 'gnutls_dh_params_export2_pkcs3@@GNUTLS_3_4', - 'gnutls_dh_params_export_pkcs3' => 'gnutls_dh_params_export_pkcs3@@GNUTLS_3_4', - 'gnutls_dh_params_export_raw' => 'gnutls_dh_params_export_raw@@GNUTLS_3_4', - 'gnutls_dh_params_generate2' => 'gnutls_dh_params_generate2@@GNUTLS_3_4', - 'gnutls_dh_params_import_dsa' => 'gnutls_dh_params_import_dsa@@GNUTLS_3_4', - 'gnutls_dh_params_import_pkcs3' => 'gnutls_dh_params_import_pkcs3@@GNUTLS_3_4', - 'gnutls_dh_params_import_raw' => 'gnutls_dh_params_import_raw@@GNUTLS_3_4', - 'gnutls_dh_params_import_raw2' => 'gnutls_dh_params_import_raw2@@GNUTLS_3_4', - 'gnutls_dh_params_init' => 'gnutls_dh_params_init@@GNUTLS_3_4', - 'gnutls_dh_set_prime_bits' => 'gnutls_dh_set_prime_bits@@GNUTLS_3_4', - 'gnutls_digest_get_id' => 'gnutls_digest_get_id@@GNUTLS_3_4', - 'gnutls_digest_get_name' => 'gnutls_digest_get_name@@GNUTLS_3_4', - 'gnutls_digest_get_oid' => 'gnutls_digest_get_oid@@GNUTLS_3_4', - 'gnutls_digest_list' => 'gnutls_digest_list@@GNUTLS_3_4', - 'gnutls_dtls_cookie_send' => 'gnutls_dtls_cookie_send@@GNUTLS_3_4', - 'gnutls_dtls_cookie_verify' => 'gnutls_dtls_cookie_verify@@GNUTLS_3_4', - 'gnutls_dtls_get_data_mtu' => 'gnutls_dtls_get_data_mtu@@GNUTLS_3_4', - 'gnutls_dtls_get_mtu' => 'gnutls_dtls_get_mtu@@GNUTLS_3_4', - 'gnutls_dtls_get_timeout' => 'gnutls_dtls_get_timeout@@GNUTLS_3_4', - 'gnutls_dtls_prestate_set' => 'gnutls_dtls_prestate_set@@GNUTLS_3_4', - 'gnutls_dtls_set_data_mtu' => 'gnutls_dtls_set_data_mtu@@GNUTLS_3_4', - 'gnutls_dtls_set_mtu' => 'gnutls_dtls_set_mtu@@GNUTLS_3_4', - 'gnutls_dtls_set_timeouts' => 'gnutls_dtls_set_timeouts@@GNUTLS_3_4', - 'gnutls_ecc_curve_get' => 'gnutls_ecc_curve_get@@GNUTLS_3_4', - 'gnutls_ecc_curve_get_id' => 'gnutls_ecc_curve_get_id@@GNUTLS_3_4', - 'gnutls_ecc_curve_get_name' => 'gnutls_ecc_curve_get_name@@GNUTLS_3_4', - 'gnutls_ecc_curve_get_oid' => 'gnutls_ecc_curve_get_oid@@GNUTLS_3_4', - 'gnutls_ecc_curve_get_pk' => 'gnutls_ecc_curve_get_pk@@GNUTLS_3_4', - 'gnutls_ecc_curve_get_size' => 'gnutls_ecc_curve_get_size@@GNUTLS_3_4', - 'gnutls_ecc_curve_list' => 'gnutls_ecc_curve_list@@GNUTLS_3_4', - 'gnutls_encode_ber_digest_info' => 'gnutls_encode_ber_digest_info@@GNUTLS_3_4', - 'gnutls_error_is_fatal' => 'gnutls_error_is_fatal@@GNUTLS_3_4', - 'gnutls_error_to_alert' => 'gnutls_error_to_alert@@GNUTLS_3_4', - 'gnutls_est_record_overhead_size' => 'gnutls_est_record_overhead_size@@GNUTLS_3_4', - 'gnutls_ext_get_data' => 'gnutls_ext_get_data@@GNUTLS_3_4', - 'gnutls_ext_get_name' => 'gnutls_ext_get_name@@GNUTLS_3_4', - 'gnutls_ext_register' => 'gnutls_ext_register@@GNUTLS_3_4', - 'gnutls_ext_set_data' => 'gnutls_ext_set_data@@GNUTLS_3_4', - 'gnutls_ffdhe_2048_group_generator' => 'gnutls_ffdhe_2048_group_generator@@GNUTLS_3_4', - 'gnutls_ffdhe_2048_group_prime' => 'gnutls_ffdhe_2048_group_prime@@GNUTLS_3_4', - 'gnutls_ffdhe_2048_key_bits' => 'gnutls_ffdhe_2048_key_bits@@GNUTLS_3_4', - 'gnutls_ffdhe_3072_group_generator' => 'gnutls_ffdhe_3072_group_generator@@GNUTLS_3_4', - 'gnutls_ffdhe_3072_group_prime' => 'gnutls_ffdhe_3072_group_prime@@GNUTLS_3_4', - 'gnutls_ffdhe_3072_key_bits' => 'gnutls_ffdhe_3072_key_bits@@GNUTLS_3_4', - 'gnutls_ffdhe_4096_group_generator' => 'gnutls_ffdhe_4096_group_generator@@GNUTLS_3_4', - 'gnutls_ffdhe_4096_group_prime' => 'gnutls_ffdhe_4096_group_prime@@GNUTLS_3_4', - 'gnutls_ffdhe_4096_key_bits' => 'gnutls_ffdhe_4096_key_bits@@GNUTLS_3_4', - 'gnutls_ffdhe_8192_group_generator' => 'gnutls_ffdhe_8192_group_generator@@GNUTLS_3_4', - 'gnutls_ffdhe_8192_group_prime' => 'gnutls_ffdhe_8192_group_prime@@GNUTLS_3_4', - 'gnutls_ffdhe_8192_key_bits' => 'gnutls_ffdhe_8192_key_bits@@GNUTLS_3_4', - 'gnutls_fingerprint' => 'gnutls_fingerprint@@GNUTLS_3_4', - 'gnutls_fips140_mode_enabled' => 'gnutls_fips140_mode_enabled@@GNUTLS_3_4', - 'gnutls_free' => 'gnutls_free@@GNUTLS_3_4', - 'gnutls_global_deinit' => 'gnutls_global_deinit@@GNUTLS_3_4', - 'gnutls_global_init' => 'gnutls_global_init@@GNUTLS_3_4', - 'gnutls_global_set_audit_log_function' => 'gnutls_global_set_audit_log_function@@GNUTLS_3_4', - 'gnutls_global_set_log_function' => 'gnutls_global_set_log_function@@GNUTLS_3_4', - 'gnutls_global_set_log_level' => 'gnutls_global_set_log_level@@GNUTLS_3_4', - 'gnutls_global_set_mem_functions' => 'gnutls_global_set_mem_functions@@GNUTLS_3_4', - 'gnutls_global_set_mutex' => 'gnutls_global_set_mutex@@GNUTLS_3_4', - 'gnutls_global_set_time_function' => 'gnutls_global_set_time_function@@GNUTLS_3_4', - 'gnutls_handshake' => 'gnutls_handshake@@GNUTLS_3_4', - 'gnutls_handshake_description_get_name' => 'gnutls_handshake_description_get_name@@GNUTLS_3_4', - 'gnutls_handshake_get_last_in' => 'gnutls_handshake_get_last_in@@GNUTLS_3_4', - 'gnutls_handshake_get_last_out' => 'gnutls_handshake_get_last_out@@GNUTLS_3_4', - 'gnutls_handshake_set_hook_function' => 'gnutls_handshake_set_hook_function@@GNUTLS_3_4', - 'gnutls_handshake_set_max_packet_length' => 'gnutls_handshake_set_max_packet_length@@GNUTLS_3_4', - 'gnutls_handshake_set_post_client_hello_function' => 'gnutls_handshake_set_post_client_hello_function@@GNUTLS_3_4', - 'gnutls_handshake_set_private_extensions' => 'gnutls_handshake_set_private_extensions@@GNUTLS_3_4', - 'gnutls_handshake_set_random' => 'gnutls_handshake_set_random@@GNUTLS_3_4', - 'gnutls_handshake_set_timeout' => 'gnutls_handshake_set_timeout@@GNUTLS_3_4', - 'gnutls_hash' => 'gnutls_hash@@GNUTLS_3_4', - 'gnutls_hash_deinit' => 'gnutls_hash_deinit@@GNUTLS_3_4', - 'gnutls_hash_fast' => 'gnutls_hash_fast@@GNUTLS_3_4', - 'gnutls_hash_get_len' => 'gnutls_hash_get_len@@GNUTLS_3_4', - 'gnutls_hash_init' => 'gnutls_hash_init@@GNUTLS_3_4', - 'gnutls_hash_output' => 'gnutls_hash_output@@GNUTLS_3_4', - 'gnutls_heartbeat_allowed' => 'gnutls_heartbeat_allowed@@GNUTLS_3_4', - 'gnutls_heartbeat_enable' => 'gnutls_heartbeat_enable@@GNUTLS_3_4', - 'gnutls_heartbeat_get_timeout' => 'gnutls_heartbeat_get_timeout@@GNUTLS_3_4', - 'gnutls_heartbeat_ping' => 'gnutls_heartbeat_ping@@GNUTLS_3_4', - 'gnutls_heartbeat_pong' => 'gnutls_heartbeat_pong@@GNUTLS_3_4', - 'gnutls_heartbeat_set_timeouts' => 'gnutls_heartbeat_set_timeouts@@GNUTLS_3_4', - 'gnutls_hex2bin' => 'gnutls_hex2bin@@GNUTLS_3_4', - 'gnutls_hex_decode' => 'gnutls_hex_decode@@GNUTLS_3_4', - 'gnutls_hex_decode2' => 'gnutls_hex_decode2@@GNUTLS_3_4', - 'gnutls_hex_encode' => 'gnutls_hex_encode@@GNUTLS_3_4', - 'gnutls_hex_encode2' => 'gnutls_hex_encode2@@GNUTLS_3_4', - 'gnutls_hmac' => 'gnutls_hmac@@GNUTLS_3_4', - 'gnutls_hmac_deinit' => 'gnutls_hmac_deinit@@GNUTLS_3_4', - 'gnutls_hmac_fast' => 'gnutls_hmac_fast@@GNUTLS_3_4', - 'gnutls_hmac_get_len' => 'gnutls_hmac_get_len@@GNUTLS_3_4', - 'gnutls_hmac_init' => 'gnutls_hmac_init@@GNUTLS_3_4', - 'gnutls_hmac_output' => 'gnutls_hmac_output@@GNUTLS_3_4', - 'gnutls_hmac_set_nonce' => 'gnutls_hmac_set_nonce@@GNUTLS_3_4', - 'gnutls_init' => 'gnutls_init@@GNUTLS_3_4', - 'gnutls_key_generate' => 'gnutls_key_generate@@GNUTLS_3_4', - 'gnutls_kx_get' => 'gnutls_kx_get@@GNUTLS_3_4', - 'gnutls_kx_get_id' => 'gnutls_kx_get_id@@GNUTLS_3_4', - 'gnutls_kx_get_name' => 'gnutls_kx_get_name@@GNUTLS_3_4', - 'gnutls_kx_list' => 'gnutls_kx_list@@GNUTLS_3_4', - 'gnutls_load_file' => 'gnutls_load_file@@GNUTLS_3_4', - 'gnutls_mac_get' => 'gnutls_mac_get@@GNUTLS_3_4', - 'gnutls_mac_get_id' => 'gnutls_mac_get_id@@GNUTLS_3_4', - 'gnutls_mac_get_key_size' => 'gnutls_mac_get_key_size@@GNUTLS_3_4', - 'gnutls_mac_get_name' => 'gnutls_mac_get_name@@GNUTLS_3_4', - 'gnutls_mac_get_nonce_size' => 'gnutls_mac_get_nonce_size@@GNUTLS_3_4', - 'gnutls_mac_list' => 'gnutls_mac_list@@GNUTLS_3_4', - 'gnutls_malloc' => 'gnutls_malloc@@GNUTLS_3_4', - 'gnutls_memcmp' => 'gnutls_memcmp@@GNUTLS_3_4', - 'gnutls_memset' => 'gnutls_memset@@GNUTLS_3_4', - 'gnutls_ocsp_req_add_cert' => 'gnutls_ocsp_req_add_cert@@GNUTLS_3_4', - 'gnutls_ocsp_req_add_cert_id' => 'gnutls_ocsp_req_add_cert_id@@GNUTLS_3_4', - 'gnutls_ocsp_req_deinit' => 'gnutls_ocsp_req_deinit@@GNUTLS_3_4', - 'gnutls_ocsp_req_export' => 'gnutls_ocsp_req_export@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_cert_id' => 'gnutls_ocsp_req_get_cert_id@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_extension' => 'gnutls_ocsp_req_get_extension@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_nonce' => 'gnutls_ocsp_req_get_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_req_get_version' => 'gnutls_ocsp_req_get_version@@GNUTLS_3_4', - 'gnutls_ocsp_req_import' => 'gnutls_ocsp_req_import@@GNUTLS_3_4', - 'gnutls_ocsp_req_init' => 'gnutls_ocsp_req_init@@GNUTLS_3_4', - 'gnutls_ocsp_req_print' => 'gnutls_ocsp_req_print@@GNUTLS_3_4', - 'gnutls_ocsp_req_randomize_nonce' => 'gnutls_ocsp_req_randomize_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_req_set_extension' => 'gnutls_ocsp_req_set_extension@@GNUTLS_3_4', - 'gnutls_ocsp_req_set_nonce' => 'gnutls_ocsp_req_set_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_resp_check_crt' => 'gnutls_ocsp_resp_check_crt@@GNUTLS_3_4', - 'gnutls_ocsp_resp_deinit' => 'gnutls_ocsp_resp_deinit@@GNUTLS_3_4', - 'gnutls_ocsp_resp_export' => 'gnutls_ocsp_resp_export@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_certs' => 'gnutls_ocsp_resp_get_certs@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_extension' => 'gnutls_ocsp_resp_get_extension@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_nonce' => 'gnutls_ocsp_resp_get_nonce@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_produced' => 'gnutls_ocsp_resp_get_produced@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_responder' => 'gnutls_ocsp_resp_get_responder@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_responder2' => 'gnutls_ocsp_resp_get_responder2@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_responder_raw_id' => 'gnutls_ocsp_resp_get_responder_raw_id@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_response' => 'gnutls_ocsp_resp_get_response@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_signature' => 'gnutls_ocsp_resp_get_signature@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_signature_algorithm' => 'gnutls_ocsp_resp_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_single' => 'gnutls_ocsp_resp_get_single@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_status' => 'gnutls_ocsp_resp_get_status@@GNUTLS_3_4', - 'gnutls_ocsp_resp_get_version' => 'gnutls_ocsp_resp_get_version@@GNUTLS_3_4', - 'gnutls_ocsp_resp_import' => 'gnutls_ocsp_resp_import@@GNUTLS_3_4', - 'gnutls_ocsp_resp_init' => 'gnutls_ocsp_resp_init@@GNUTLS_3_4', - 'gnutls_ocsp_resp_print' => 'gnutls_ocsp_resp_print@@GNUTLS_3_4', - 'gnutls_ocsp_resp_verify' => 'gnutls_ocsp_resp_verify@@GNUTLS_3_4', - 'gnutls_ocsp_resp_verify_direct' => 'gnutls_ocsp_resp_verify_direct@@GNUTLS_3_4', - 'gnutls_ocsp_status_request_enable_client' => 'gnutls_ocsp_status_request_enable_client@@GNUTLS_3_4', - 'gnutls_ocsp_status_request_get' => 'gnutls_ocsp_status_request_get@@GNUTLS_3_4', - 'gnutls_ocsp_status_request_is_checked' => 'gnutls_ocsp_status_request_is_checked@@GNUTLS_3_4', - 'gnutls_oid_to_digest' => 'gnutls_oid_to_digest@@GNUTLS_3_4', - 'gnutls_oid_to_ecc_curve' => 'gnutls_oid_to_ecc_curve@@GNUTLS_3_4', - 'gnutls_oid_to_mac' => 'gnutls_oid_to_mac@@GNUTLS_3_4', - 'gnutls_oid_to_pk' => 'gnutls_oid_to_pk@@GNUTLS_3_4', - 'gnutls_oid_to_sign' => 'gnutls_oid_to_sign@@GNUTLS_3_4', - 'gnutls_openpgp_crt_check_email' => 'gnutls_openpgp_crt_check_email@@GNUTLS_3_4', - 'gnutls_openpgp_crt_check_hostname' => 'gnutls_openpgp_crt_check_hostname@@GNUTLS_3_4', - 'gnutls_openpgp_crt_check_hostname2' => 'gnutls_openpgp_crt_check_hostname2@@GNUTLS_3_4', - 'gnutls_openpgp_crt_deinit' => 'gnutls_openpgp_crt_deinit@@GNUTLS_3_4', - 'gnutls_openpgp_crt_export' => 'gnutls_openpgp_crt_export@@GNUTLS_3_4', - 'gnutls_openpgp_crt_export2' => 'gnutls_openpgp_crt_export2@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_auth_subkey' => 'gnutls_openpgp_crt_get_auth_subkey@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_creation_time' => 'gnutls_openpgp_crt_get_creation_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_expiration_time' => 'gnutls_openpgp_crt_get_expiration_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_fingerprint' => 'gnutls_openpgp_crt_get_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_key_id' => 'gnutls_openpgp_crt_get_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_key_usage' => 'gnutls_openpgp_crt_get_key_usage@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_name' => 'gnutls_openpgp_crt_get_name@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_pk_algorithm' => 'gnutls_openpgp_crt_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_pk_dsa_raw' => 'gnutls_openpgp_crt_get_pk_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_pk_rsa_raw' => 'gnutls_openpgp_crt_get_pk_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_preferred_key_id' => 'gnutls_openpgp_crt_get_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_revoked_status' => 'gnutls_openpgp_crt_get_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_count' => 'gnutls_openpgp_crt_get_subkey_count@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_creation_time' => 'gnutls_openpgp_crt_get_subkey_creation_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_expiration_time' => 'gnutls_openpgp_crt_get_subkey_expiration_time@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_fingerprint' => 'gnutls_openpgp_crt_get_subkey_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_id' => 'gnutls_openpgp_crt_get_subkey_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_idx' => 'gnutls_openpgp_crt_get_subkey_idx@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_pk_algorithm' => 'gnutls_openpgp_crt_get_subkey_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw' => 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw' => 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_revoked_status' => 'gnutls_openpgp_crt_get_subkey_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_subkey_usage' => 'gnutls_openpgp_crt_get_subkey_usage@@GNUTLS_3_4', - 'gnutls_openpgp_crt_get_version' => 'gnutls_openpgp_crt_get_version@@GNUTLS_3_4', - 'gnutls_openpgp_crt_import' => 'gnutls_openpgp_crt_import@@GNUTLS_3_4', - 'gnutls_openpgp_crt_init' => 'gnutls_openpgp_crt_init@@GNUTLS_3_4', - 'gnutls_openpgp_crt_print' => 'gnutls_openpgp_crt_print@@GNUTLS_3_4', - 'gnutls_openpgp_crt_set_preferred_key_id' => 'gnutls_openpgp_crt_set_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_crt_verify_ring' => 'gnutls_openpgp_crt_verify_ring@@GNUTLS_3_4', - 'gnutls_openpgp_crt_verify_self' => 'gnutls_openpgp_crt_verify_self@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_check_id' => 'gnutls_openpgp_keyring_check_id@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_deinit' => 'gnutls_openpgp_keyring_deinit@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_get_crt' => 'gnutls_openpgp_keyring_get_crt@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_get_crt_count' => 'gnutls_openpgp_keyring_get_crt_count@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_import' => 'gnutls_openpgp_keyring_import@@GNUTLS_3_4', - 'gnutls_openpgp_keyring_init' => 'gnutls_openpgp_keyring_init@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_deinit' => 'gnutls_openpgp_privkey_deinit@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export' => 'gnutls_openpgp_privkey_export@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export2' => 'gnutls_openpgp_privkey_export2@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_dsa_raw' => 'gnutls_openpgp_privkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_rsa_raw' => 'gnutls_openpgp_privkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_subkey_dsa_raw' => 'gnutls_openpgp_privkey_export_subkey_dsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_export_subkey_rsa_raw' => 'gnutls_openpgp_privkey_export_subkey_rsa_raw@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_fingerprint' => 'gnutls_openpgp_privkey_get_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_key_id' => 'gnutls_openpgp_privkey_get_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_pk_algorithm' => 'gnutls_openpgp_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_preferred_key_id' => 'gnutls_openpgp_privkey_get_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_revoked_status' => 'gnutls_openpgp_privkey_get_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_count' => 'gnutls_openpgp_privkey_get_subkey_count@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_creation_time' => 'gnutls_openpgp_privkey_get_subkey_creation_time@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_expiration_time' => 'gnutls_openpgp_privkey_get_subkey_expiration_time@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_fingerprint' => 'gnutls_openpgp_privkey_get_subkey_fingerprint@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_id' => 'gnutls_openpgp_privkey_get_subkey_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_idx' => 'gnutls_openpgp_privkey_get_subkey_idx@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_pk_algorithm' => 'gnutls_openpgp_privkey_get_subkey_pk_algorithm@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_get_subkey_revoked_status' => 'gnutls_openpgp_privkey_get_subkey_revoked_status@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_import' => 'gnutls_openpgp_privkey_import@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_init' => 'gnutls_openpgp_privkey_init@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_sec_param' => 'gnutls_openpgp_privkey_sec_param@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_set_preferred_key_id' => 'gnutls_openpgp_privkey_set_preferred_key_id@@GNUTLS_3_4', - 'gnutls_openpgp_privkey_sign_hash' => 'gnutls_openpgp_privkey_sign_hash@@GNUTLS_3_4', - 'gnutls_openpgp_send_cert' => 'gnutls_openpgp_send_cert@@GNUTLS_3_4', - 'gnutls_openpgp_set_recv_key_function' => 'gnutls_openpgp_set_recv_key_function@@GNUTLS_3_4', - 'gnutls_packet_deinit' => 'gnutls_packet_deinit@@GNUTLS_3_4', - 'gnutls_packet_get' => 'gnutls_packet_get@@GNUTLS_3_4', - 'gnutls_pcert_deinit' => 'gnutls_pcert_deinit@@GNUTLS_3_4', - 'gnutls_pcert_export_openpgp' => 'gnutls_pcert_export_openpgp@@GNUTLS_3_4', - 'gnutls_pcert_export_x509' => 'gnutls_pcert_export_x509@@GNUTLS_3_4', - 'gnutls_pcert_import_openpgp' => 'gnutls_pcert_import_openpgp@@GNUTLS_3_4', - 'gnutls_pcert_import_openpgp_raw' => 'gnutls_pcert_import_openpgp_raw@@GNUTLS_3_4', - 'gnutls_pcert_import_x509' => 'gnutls_pcert_import_x509@@GNUTLS_3_4', - 'gnutls_pcert_import_x509_list' => 'gnutls_pcert_import_x509_list@@GNUTLS_3_4', - 'gnutls_pcert_import_x509_raw' => 'gnutls_pcert_import_x509_raw@@GNUTLS_3_4', - 'gnutls_pcert_list_import_x509_raw' => 'gnutls_pcert_list_import_x509_raw@@GNUTLS_3_4', - 'gnutls_pem_base64_decode' => 'gnutls_pem_base64_decode@@GNUTLS_3_4', - 'gnutls_pem_base64_decode2' => 'gnutls_pem_base64_decode2@@GNUTLS_3_4', - 'gnutls_pem_base64_encode' => 'gnutls_pem_base64_encode@@GNUTLS_3_4', - 'gnutls_pem_base64_encode2' => 'gnutls_pem_base64_encode2@@GNUTLS_3_4', - 'gnutls_perror' => 'gnutls_perror@@GNUTLS_3_4', - 'gnutls_pk_algorithm_get_name' => 'gnutls_pk_algorithm_get_name@@GNUTLS_3_4', - 'gnutls_pk_bits_to_sec_param' => 'gnutls_pk_bits_to_sec_param@@GNUTLS_3_4', - 'gnutls_pk_get_id' => 'gnutls_pk_get_id@@GNUTLS_3_4', - 'gnutls_pk_get_name' => 'gnutls_pk_get_name@@GNUTLS_3_4', - 'gnutls_pk_get_oid' => 'gnutls_pk_get_oid@@GNUTLS_3_4', - 'gnutls_pk_list' => 'gnutls_pk_list@@GNUTLS_3_4', - 'gnutls_pk_to_sign' => 'gnutls_pk_to_sign@@GNUTLS_3_4', - 'gnutls_pkcs11_add_provider' => 'gnutls_pkcs11_add_provider@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_attached_extension' => 'gnutls_pkcs11_copy_attached_extension@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_pubkey' => 'gnutls_pkcs11_copy_pubkey@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_secret_key' => 'gnutls_pkcs11_copy_secret_key@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_x509_crt2' => 'gnutls_pkcs11_copy_x509_crt2@@GNUTLS_3_4', - 'gnutls_pkcs11_copy_x509_privkey2' => 'gnutls_pkcs11_copy_x509_privkey2@@GNUTLS_3_4', - 'gnutls_pkcs11_crt_is_known' => 'gnutls_pkcs11_crt_is_known@@GNUTLS_3_4', - 'gnutls_pkcs11_deinit' => 'gnutls_pkcs11_deinit@@GNUTLS_3_4', - 'gnutls_pkcs11_delete_url' => 'gnutls_pkcs11_delete_url@@GNUTLS_3_4', - 'gnutls_pkcs11_get_pin_function' => 'gnutls_pkcs11_get_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_get_raw_issuer' => 'gnutls_pkcs11_get_raw_issuer@@GNUTLS_3_4', - 'gnutls_pkcs11_get_raw_issuer_by_dn' => 'gnutls_pkcs11_get_raw_issuer_by_dn@@GNUTLS_3_4', - 'gnutls_pkcs11_get_raw_issuer_by_subject_key_id' => 'gnutls_pkcs11_get_raw_issuer_by_subject_key_id@@GNUTLS_3_4', - 'gnutls_pkcs11_init' => 'gnutls_pkcs11_init@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_deinit' => 'gnutls_pkcs11_obj_deinit@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export' => 'gnutls_pkcs11_obj_export@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export2' => 'gnutls_pkcs11_obj_export2@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export3' => 'gnutls_pkcs11_obj_export3@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_export_url' => 'gnutls_pkcs11_obj_export_url@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_flags_get_str' => 'gnutls_pkcs11_obj_flags_get_str@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_exts' => 'gnutls_pkcs11_obj_get_exts@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_flags' => 'gnutls_pkcs11_obj_get_flags@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_info' => 'gnutls_pkcs11_obj_get_info@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_get_type' => 'gnutls_pkcs11_obj_get_type@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_import_url' => 'gnutls_pkcs11_obj_import_url@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_init' => 'gnutls_pkcs11_obj_init@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_list_import_url3' => 'gnutls_pkcs11_obj_list_import_url3@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_list_import_url4' => 'gnutls_pkcs11_obj_list_import_url4@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_set_info' => 'gnutls_pkcs11_obj_set_info@@GNUTLS_3_4', - 'gnutls_pkcs11_obj_set_pin_function' => 'gnutls_pkcs11_obj_set_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_cpy' => 'gnutls_pkcs11_privkey_cpy@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_deinit' => 'gnutls_pkcs11_privkey_deinit@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_export_pubkey' => 'gnutls_pkcs11_privkey_export_pubkey@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_export_url' => 'gnutls_pkcs11_privkey_export_url@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_generate3' => 'gnutls_pkcs11_privkey_generate3@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_get_info' => 'gnutls_pkcs11_privkey_get_info@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_get_pk_algorithm' => 'gnutls_pkcs11_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_import_url' => 'gnutls_pkcs11_privkey_import_url@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_init' => 'gnutls_pkcs11_privkey_init@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_set_pin_function' => 'gnutls_pkcs11_privkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_privkey_status' => 'gnutls_pkcs11_privkey_status@@GNUTLS_3_4', - 'gnutls_pkcs11_reinit' => 'gnutls_pkcs11_reinit@@GNUTLS_3_4', - 'gnutls_pkcs11_set_pin_function' => 'gnutls_pkcs11_set_pin_function@@GNUTLS_3_4', - 'gnutls_pkcs11_set_token_function' => 'gnutls_pkcs11_set_token_function@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_flags' => 'gnutls_pkcs11_token_get_flags@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_info' => 'gnutls_pkcs11_token_get_info@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_mechanism' => 'gnutls_pkcs11_token_get_mechanism@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_random' => 'gnutls_pkcs11_token_get_random@@GNUTLS_3_4', - 'gnutls_pkcs11_token_get_url' => 'gnutls_pkcs11_token_get_url@@GNUTLS_3_4', - 'gnutls_pkcs11_token_init' => 'gnutls_pkcs11_token_init@@GNUTLS_3_4', - 'gnutls_pkcs11_token_set_pin' => 'gnutls_pkcs11_token_set_pin@@GNUTLS_3_4', - 'gnutls_pkcs11_type_get_name' => 'gnutls_pkcs11_type_get_name@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_decrypt' => 'gnutls_pkcs12_bag_decrypt@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_deinit' => 'gnutls_pkcs12_bag_deinit@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_enc_info' => 'gnutls_pkcs12_bag_enc_info@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_encrypt' => 'gnutls_pkcs12_bag_encrypt@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_count' => 'gnutls_pkcs12_bag_get_count@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_data' => 'gnutls_pkcs12_bag_get_data@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_friendly_name' => 'gnutls_pkcs12_bag_get_friendly_name@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_key_id' => 'gnutls_pkcs12_bag_get_key_id@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_get_type' => 'gnutls_pkcs12_bag_get_type@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_init' => 'gnutls_pkcs12_bag_init@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_crl' => 'gnutls_pkcs12_bag_set_crl@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_crt' => 'gnutls_pkcs12_bag_set_crt@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_data' => 'gnutls_pkcs12_bag_set_data@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_friendly_name' => 'gnutls_pkcs12_bag_set_friendly_name@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_key_id' => 'gnutls_pkcs12_bag_set_key_id@@GNUTLS_3_4', - 'gnutls_pkcs12_bag_set_privkey' => 'gnutls_pkcs12_bag_set_privkey@@GNUTLS_3_4', - 'gnutls_pkcs12_deinit' => 'gnutls_pkcs12_deinit@@GNUTLS_3_4', - 'gnutls_pkcs12_export' => 'gnutls_pkcs12_export@@GNUTLS_3_4', - 'gnutls_pkcs12_export2' => 'gnutls_pkcs12_export2@@GNUTLS_3_4', - 'gnutls_pkcs12_generate_mac' => 'gnutls_pkcs12_generate_mac@@GNUTLS_3_4', - 'gnutls_pkcs12_generate_mac2' => 'gnutls_pkcs12_generate_mac2@@GNUTLS_3_4', - 'gnutls_pkcs12_get_bag' => 'gnutls_pkcs12_get_bag@@GNUTLS_3_4', - 'gnutls_pkcs12_import' => 'gnutls_pkcs12_import@@GNUTLS_3_4', - 'gnutls_pkcs12_init' => 'gnutls_pkcs12_init@@GNUTLS_3_4', - 'gnutls_pkcs12_mac_info' => 'gnutls_pkcs12_mac_info@@GNUTLS_3_4', - 'gnutls_pkcs12_set_bag' => 'gnutls_pkcs12_set_bag@@GNUTLS_3_4', - 'gnutls_pkcs12_simple_parse' => 'gnutls_pkcs12_simple_parse@@GNUTLS_3_4', - 'gnutls_pkcs12_verify_mac' => 'gnutls_pkcs12_verify_mac@@GNUTLS_3_4', - 'gnutls_pkcs7_add_attr' => 'gnutls_pkcs7_add_attr@@GNUTLS_3_4', - 'gnutls_pkcs7_attrs_deinit' => 'gnutls_pkcs7_attrs_deinit@@GNUTLS_3_4', - 'gnutls_pkcs7_deinit' => 'gnutls_pkcs7_deinit@@GNUTLS_3_4', - 'gnutls_pkcs7_delete_crl' => 'gnutls_pkcs7_delete_crl@@GNUTLS_3_4', - 'gnutls_pkcs7_delete_crt' => 'gnutls_pkcs7_delete_crt@@GNUTLS_3_4', - 'gnutls_pkcs7_export' => 'gnutls_pkcs7_export@@GNUTLS_3_4', - 'gnutls_pkcs7_export2' => 'gnutls_pkcs7_export2@@GNUTLS_3_4', - 'gnutls_pkcs7_get_attr' => 'gnutls_pkcs7_get_attr@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crl_count' => 'gnutls_pkcs7_get_crl_count@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crl_raw' => 'gnutls_pkcs7_get_crl_raw@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crl_raw2' => 'gnutls_pkcs7_get_crl_raw2@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crt_count' => 'gnutls_pkcs7_get_crt_count@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crt_raw' => 'gnutls_pkcs7_get_crt_raw@@GNUTLS_3_4', - 'gnutls_pkcs7_get_crt_raw2' => 'gnutls_pkcs7_get_crt_raw2@@GNUTLS_3_4', - 'gnutls_pkcs7_get_embedded_data' => 'gnutls_pkcs7_get_embedded_data@@GNUTLS_3_4', - 'gnutls_pkcs7_get_embedded_data_oid' => 'gnutls_pkcs7_get_embedded_data_oid@@GNUTLS_3_4', - 'gnutls_pkcs7_get_signature_count' => 'gnutls_pkcs7_get_signature_count@@GNUTLS_3_4', - 'gnutls_pkcs7_get_signature_info' => 'gnutls_pkcs7_get_signature_info@@GNUTLS_3_4', - 'gnutls_pkcs7_import' => 'gnutls_pkcs7_import@@GNUTLS_3_4', - 'gnutls_pkcs7_init' => 'gnutls_pkcs7_init@@GNUTLS_3_4', - 'gnutls_pkcs7_print' => 'gnutls_pkcs7_print@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crl' => 'gnutls_pkcs7_set_crl@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crl_raw' => 'gnutls_pkcs7_set_crl_raw@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crt' => 'gnutls_pkcs7_set_crt@@GNUTLS_3_4', - 'gnutls_pkcs7_set_crt_raw' => 'gnutls_pkcs7_set_crt_raw@@GNUTLS_3_4', - 'gnutls_pkcs7_sign' => 'gnutls_pkcs7_sign@@GNUTLS_3_4', - 'gnutls_pkcs7_signature_info_deinit' => 'gnutls_pkcs7_signature_info_deinit@@GNUTLS_3_4', - 'gnutls_pkcs7_verify' => 'gnutls_pkcs7_verify@@GNUTLS_3_4', - 'gnutls_pkcs7_verify_direct' => 'gnutls_pkcs7_verify_direct@@GNUTLS_3_4', - 'gnutls_pkcs8_info' => 'gnutls_pkcs8_info@@GNUTLS_3_4', - 'gnutls_pkcs_schema_get_name' => 'gnutls_pkcs_schema_get_name@@GNUTLS_3_4', - 'gnutls_pkcs_schema_get_oid' => 'gnutls_pkcs_schema_get_oid@@GNUTLS_3_4', - 'gnutls_prf' => 'gnutls_prf@@GNUTLS_3_4', - 'gnutls_prf_raw' => 'gnutls_prf_raw@@GNUTLS_3_4', - 'gnutls_prf_rfc5705' => 'gnutls_prf_rfc5705@@GNUTLS_3_4', - 'gnutls_priority_certificate_type_list' => 'gnutls_priority_certificate_type_list@@GNUTLS_3_4', - 'gnutls_priority_cipher_list' => 'gnutls_priority_cipher_list@@GNUTLS_3_4', - 'gnutls_priority_compression_list' => 'gnutls_priority_compression_list@@GNUTLS_3_4', - 'gnutls_priority_deinit' => 'gnutls_priority_deinit@@GNUTLS_3_4', - 'gnutls_priority_ecc_curve_list' => 'gnutls_priority_ecc_curve_list@@GNUTLS_3_4', - 'gnutls_priority_get_cipher_suite_index' => 'gnutls_priority_get_cipher_suite_index@@GNUTLS_3_4', - 'gnutls_priority_init' => 'gnutls_priority_init@@GNUTLS_3_4', - 'gnutls_priority_kx_list' => 'gnutls_priority_kx_list@@GNUTLS_3_4', - 'gnutls_priority_mac_list' => 'gnutls_priority_mac_list@@GNUTLS_3_4', - 'gnutls_priority_protocol_list' => 'gnutls_priority_protocol_list@@GNUTLS_3_4', - 'gnutls_priority_set' => 'gnutls_priority_set@@GNUTLS_3_4', - 'gnutls_priority_set_direct' => 'gnutls_priority_set_direct@@GNUTLS_3_4', - 'gnutls_priority_sign_list' => 'gnutls_priority_sign_list@@GNUTLS_3_4', - 'gnutls_priority_string_list' => 'gnutls_priority_string_list@@GNUTLS_3_4', - 'gnutls_privkey_decrypt_data' => 'gnutls_privkey_decrypt_data@@GNUTLS_3_4', - 'gnutls_privkey_deinit' => 'gnutls_privkey_deinit@@GNUTLS_3_4', - 'gnutls_privkey_export_dsa_raw' => 'gnutls_privkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_export_ecc_raw' => 'gnutls_privkey_export_ecc_raw@@GNUTLS_3_4', - 'gnutls_privkey_export_openpgp' => 'gnutls_privkey_export_openpgp@@GNUTLS_3_4', - 'gnutls_privkey_export_pkcs11' => 'gnutls_privkey_export_pkcs11@@GNUTLS_3_4', - 'gnutls_privkey_export_rsa_raw' => 'gnutls_privkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_export_x509' => 'gnutls_privkey_export_x509@@GNUTLS_3_4', - 'gnutls_privkey_generate' => 'gnutls_privkey_generate@@GNUTLS_3_4', - 'gnutls_privkey_generate2' => 'gnutls_privkey_generate2@@GNUTLS_3_4', - 'gnutls_privkey_get_pk_algorithm' => 'gnutls_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_privkey_get_seed' => 'gnutls_privkey_get_seed@@GNUTLS_3_4', - 'gnutls_privkey_get_type' => 'gnutls_privkey_get_type@@GNUTLS_3_4', - 'gnutls_privkey_import_dsa_raw' => 'gnutls_privkey_import_dsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_ecc_raw' => 'gnutls_privkey_import_ecc_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_ext' => 'gnutls_privkey_import_ext@@GNUTLS_3_4', - 'gnutls_privkey_import_ext2' => 'gnutls_privkey_import_ext2@@GNUTLS_3_4', - 'gnutls_privkey_import_ext3' => 'gnutls_privkey_import_ext3@@GNUTLS_3_4', - 'gnutls_privkey_import_openpgp' => 'gnutls_privkey_import_openpgp@@GNUTLS_3_4', - 'gnutls_privkey_import_openpgp_raw' => 'gnutls_privkey_import_openpgp_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_pkcs11' => 'gnutls_privkey_import_pkcs11@@GNUTLS_3_4', - 'gnutls_privkey_import_rsa_raw' => 'gnutls_privkey_import_rsa_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_tpm_raw' => 'gnutls_privkey_import_tpm_raw@@GNUTLS_3_4', - 'gnutls_privkey_import_tpm_url' => 'gnutls_privkey_import_tpm_url@@GNUTLS_3_4', - 'gnutls_privkey_import_url' => 'gnutls_privkey_import_url@@GNUTLS_3_4', - 'gnutls_privkey_import_x509' => 'gnutls_privkey_import_x509@@GNUTLS_3_4', - 'gnutls_privkey_import_x509_raw' => 'gnutls_privkey_import_x509_raw@@GNUTLS_3_4', - 'gnutls_privkey_init' => 'gnutls_privkey_init@@GNUTLS_3_4', - 'gnutls_privkey_set_flags' => 'gnutls_privkey_set_flags@@GNUTLS_3_4', - 'gnutls_privkey_set_pin_function' => 'gnutls_privkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_privkey_sign_data' => 'gnutls_privkey_sign_data@@GNUTLS_3_4', - 'gnutls_privkey_sign_hash' => 'gnutls_privkey_sign_hash@@GNUTLS_3_4', - 'gnutls_privkey_status' => 'gnutls_privkey_status@@GNUTLS_3_4', - 'gnutls_privkey_verify_params' => 'gnutls_privkey_verify_params@@GNUTLS_3_4', - 'gnutls_privkey_verify_seed' => 'gnutls_privkey_verify_seed@@GNUTLS_3_4', - 'gnutls_protocol_get_id' => 'gnutls_protocol_get_id@@GNUTLS_3_4', - 'gnutls_protocol_get_name' => 'gnutls_protocol_get_name@@GNUTLS_3_4', - 'gnutls_protocol_get_version' => 'gnutls_protocol_get_version@@GNUTLS_3_4', - 'gnutls_protocol_list' => 'gnutls_protocol_list@@GNUTLS_3_4', - 'gnutls_psk_allocate_client_credentials' => 'gnutls_psk_allocate_client_credentials@@GNUTLS_3_4', - 'gnutls_psk_allocate_server_credentials' => 'gnutls_psk_allocate_server_credentials@@GNUTLS_3_4', - 'gnutls_psk_client_get_hint' => 'gnutls_psk_client_get_hint@@GNUTLS_3_4', - 'gnutls_psk_free_client_credentials' => 'gnutls_psk_free_client_credentials@@GNUTLS_3_4', - 'gnutls_psk_free_server_credentials' => 'gnutls_psk_free_server_credentials@@GNUTLS_3_4', - 'gnutls_psk_server_get_username' => 'gnutls_psk_server_get_username@@GNUTLS_3_4', - 'gnutls_psk_set_client_credentials' => 'gnutls_psk_set_client_credentials@@GNUTLS_3_4', - 'gnutls_psk_set_client_credentials_function' => 'gnutls_psk_set_client_credentials_function@@GNUTLS_3_4', - 'gnutls_psk_set_params_function' => 'gnutls_psk_set_params_function@@GNUTLS_3_4', - 'gnutls_psk_set_server_credentials_file' => 'gnutls_psk_set_server_credentials_file@@GNUTLS_3_4', - 'gnutls_psk_set_server_credentials_function' => 'gnutls_psk_set_server_credentials_function@@GNUTLS_3_4', - 'gnutls_psk_set_server_credentials_hint' => 'gnutls_psk_set_server_credentials_hint@@GNUTLS_3_4', - 'gnutls_psk_set_server_dh_params' => 'gnutls_psk_set_server_dh_params@@GNUTLS_3_4', - 'gnutls_psk_set_server_known_dh_params' => 'gnutls_psk_set_server_known_dh_params@@GNUTLS_3_4', - 'gnutls_psk_set_server_params_function' => 'gnutls_psk_set_server_params_function@@GNUTLS_3_4', - 'gnutls_pubkey_deinit' => 'gnutls_pubkey_deinit@@GNUTLS_3_4', - 'gnutls_pubkey_encrypt_data' => 'gnutls_pubkey_encrypt_data@@GNUTLS_3_4', - 'gnutls_pubkey_export' => 'gnutls_pubkey_export@@GNUTLS_3_4', - 'gnutls_pubkey_export2' => 'gnutls_pubkey_export2@@GNUTLS_3_4', - 'gnutls_pubkey_export_dsa_raw' => 'gnutls_pubkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_export_ecc_raw' => 'gnutls_pubkey_export_ecc_raw@@GNUTLS_3_4', - 'gnutls_pubkey_export_ecc_x962' => 'gnutls_pubkey_export_ecc_x962@@GNUTLS_3_4', - 'gnutls_pubkey_export_rsa_raw' => 'gnutls_pubkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_get_key_id' => 'gnutls_pubkey_get_key_id@@GNUTLS_3_4', - 'gnutls_pubkey_get_key_usage' => 'gnutls_pubkey_get_key_usage@@GNUTLS_3_4', - 'gnutls_pubkey_get_openpgp_key_id' => 'gnutls_pubkey_get_openpgp_key_id@@GNUTLS_3_4', - 'gnutls_pubkey_get_pk_algorithm' => 'gnutls_pubkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_pubkey_get_preferred_hash_algorithm' => 'gnutls_pubkey_get_preferred_hash_algorithm@@GNUTLS_3_4', - 'gnutls_pubkey_import' => 'gnutls_pubkey_import@@GNUTLS_3_4', - 'gnutls_pubkey_import_dsa_raw' => 'gnutls_pubkey_import_dsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_ecc_raw' => 'gnutls_pubkey_import_ecc_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_ecc_x962' => 'gnutls_pubkey_import_ecc_x962@@GNUTLS_3_4', - 'gnutls_pubkey_import_openpgp' => 'gnutls_pubkey_import_openpgp@@GNUTLS_3_4', - 'gnutls_pubkey_import_openpgp_raw' => 'gnutls_pubkey_import_openpgp_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_pkcs11' => 'gnutls_pubkey_import_pkcs11@@GNUTLS_3_4', - 'gnutls_pubkey_import_privkey' => 'gnutls_pubkey_import_privkey@@GNUTLS_3_4', - 'gnutls_pubkey_import_rsa_raw' => 'gnutls_pubkey_import_rsa_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_tpm_raw' => 'gnutls_pubkey_import_tpm_raw@@GNUTLS_3_4', - 'gnutls_pubkey_import_tpm_url' => 'gnutls_pubkey_import_tpm_url@@GNUTLS_3_4', - 'gnutls_pubkey_import_url' => 'gnutls_pubkey_import_url@@GNUTLS_3_4', - 'gnutls_pubkey_import_x509' => 'gnutls_pubkey_import_x509@@GNUTLS_3_4', - 'gnutls_pubkey_import_x509_crq' => 'gnutls_pubkey_import_x509_crq@@GNUTLS_3_4', - 'gnutls_pubkey_import_x509_raw' => 'gnutls_pubkey_import_x509_raw@@GNUTLS_3_4', - 'gnutls_pubkey_init' => 'gnutls_pubkey_init@@GNUTLS_3_4', - 'gnutls_pubkey_print' => 'gnutls_pubkey_print@@GNUTLS_3_4', - 'gnutls_pubkey_set_key_usage' => 'gnutls_pubkey_set_key_usage@@GNUTLS_3_4', - 'gnutls_pubkey_set_pin_function' => 'gnutls_pubkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_pubkey_verify_data2' => 'gnutls_pubkey_verify_data2@@GNUTLS_3_4', - 'gnutls_pubkey_verify_hash2' => 'gnutls_pubkey_verify_hash2@@GNUTLS_3_4', - 'gnutls_pubkey_verify_params' => 'gnutls_pubkey_verify_params@@GNUTLS_3_4', - 'gnutls_random_art' => 'gnutls_random_art@@GNUTLS_3_4', - 'gnutls_range_split' => 'gnutls_range_split@@GNUTLS_3_4', - 'gnutls_realloc' => 'gnutls_realloc@@GNUTLS_3_4', - 'gnutls_record_can_use_length_hiding' => 'gnutls_record_can_use_length_hiding@@GNUTLS_3_4', - 'gnutls_record_check_corked' => 'gnutls_record_check_corked@@GNUTLS_3_4', - 'gnutls_record_check_pending' => 'gnutls_record_check_pending@@GNUTLS_3_4', - 'gnutls_record_cork' => 'gnutls_record_cork@@GNUTLS_3_4', - 'gnutls_record_disable_padding' => 'gnutls_record_disable_padding@@GNUTLS_3_4', - 'gnutls_record_discard_queued' => 'gnutls_record_discard_queued@@GNUTLS_3_4', - 'gnutls_record_get_direction' => 'gnutls_record_get_direction@@GNUTLS_3_4', - 'gnutls_record_get_discarded' => 'gnutls_record_get_discarded@@GNUTLS_3_4', - 'gnutls_record_get_max_size' => 'gnutls_record_get_max_size@@GNUTLS_3_4', - 'gnutls_record_get_state' => 'gnutls_record_get_state@@GNUTLS_3_4', - 'gnutls_record_overhead_size' => 'gnutls_record_overhead_size@@GNUTLS_3_4', - 'gnutls_record_recv' => 'gnutls_record_recv@@GNUTLS_3_4', - 'gnutls_record_recv_packet' => 'gnutls_record_recv_packet@@GNUTLS_3_4', - 'gnutls_record_recv_seq' => 'gnutls_record_recv_seq@@GNUTLS_3_4', - 'gnutls_record_send' => 'gnutls_record_send@@GNUTLS_3_4', - 'gnutls_record_send_range' => 'gnutls_record_send_range@@GNUTLS_3_4', - 'gnutls_record_set_max_size' => 'gnutls_record_set_max_size@@GNUTLS_3_4', - 'gnutls_record_set_state' => 'gnutls_record_set_state@@GNUTLS_3_4', - 'gnutls_record_set_timeout' => 'gnutls_record_set_timeout@@GNUTLS_3_4', - 'gnutls_record_uncork' => 'gnutls_record_uncork@@GNUTLS_3_4', - 'gnutls_register_custom_url' => 'gnutls_register_custom_url@@GNUTLS_3_4', - 'gnutls_rehandshake' => 'gnutls_rehandshake@@GNUTLS_3_4', - 'gnutls_rnd' => 'gnutls_rnd@@GNUTLS_3_4', - 'gnutls_rnd_refresh' => 'gnutls_rnd_refresh@@GNUTLS_3_4', - 'gnutls_safe_renegotiation_status' => 'gnutls_safe_renegotiation_status@@GNUTLS_3_4', - 'gnutls_sec_param_get_name' => 'gnutls_sec_param_get_name@@GNUTLS_3_4', - 'gnutls_sec_param_to_pk_bits' => 'gnutls_sec_param_to_pk_bits@@GNUTLS_3_4', - 'gnutls_sec_param_to_symmetric_bits' => 'gnutls_sec_param_to_symmetric_bits@@GNUTLS_3_4', - 'gnutls_secure_malloc' => 'gnutls_secure_malloc@@GNUTLS_3_4', - 'gnutls_server_name_get' => 'gnutls_server_name_get@@GNUTLS_3_4', - 'gnutls_server_name_set' => 'gnutls_server_name_set@@GNUTLS_3_4', - 'gnutls_session_channel_binding' => 'gnutls_session_channel_binding@@GNUTLS_3_4', - 'gnutls_session_enable_compatibility_mode' => 'gnutls_session_enable_compatibility_mode@@GNUTLS_3_4', - 'gnutls_session_etm_status' => 'gnutls_session_etm_status@@GNUTLS_3_4', - 'gnutls_session_ext_master_secret_status' => 'gnutls_session_ext_master_secret_status@@GNUTLS_3_4', - 'gnutls_session_ext_register' => 'gnutls_session_ext_register@@GNUTLS_3_4', - 'gnutls_session_force_valid' => 'gnutls_session_force_valid@@GNUTLS_3_4', - 'gnutls_session_get_data' => 'gnutls_session_get_data@@GNUTLS_3_4', - 'gnutls_session_get_data2' => 'gnutls_session_get_data2@@GNUTLS_3_4', - 'gnutls_session_get_desc' => 'gnutls_session_get_desc@@GNUTLS_3_4', - 'gnutls_session_get_flags' => 'gnutls_session_get_flags@@GNUTLS_3_4', - 'gnutls_session_get_id' => 'gnutls_session_get_id@@GNUTLS_3_4', - 'gnutls_session_get_id2' => 'gnutls_session_get_id2@@GNUTLS_3_4', - 'gnutls_session_get_master_secret' => 'gnutls_session_get_master_secret@@GNUTLS_3_4', - 'gnutls_session_get_ptr' => 'gnutls_session_get_ptr@@GNUTLS_3_4', - 'gnutls_session_get_random' => 'gnutls_session_get_random@@GNUTLS_3_4', - 'gnutls_session_get_verify_cert_status' => 'gnutls_session_get_verify_cert_status@@GNUTLS_3_4', - 'gnutls_session_is_resumed' => 'gnutls_session_is_resumed@@GNUTLS_3_4', - 'gnutls_session_resumption_requested' => 'gnutls_session_resumption_requested@@GNUTLS_3_4', - 'gnutls_session_set_data' => 'gnutls_session_set_data@@GNUTLS_3_4', - 'gnutls_session_set_id' => 'gnutls_session_set_id@@GNUTLS_3_4', - 'gnutls_session_set_premaster' => 'gnutls_session_set_premaster@@GNUTLS_3_4', - 'gnutls_session_set_ptr' => 'gnutls_session_set_ptr@@GNUTLS_3_4', - 'gnutls_session_set_verify_cert' => 'gnutls_session_set_verify_cert@@GNUTLS_3_4', - 'gnutls_session_set_verify_cert2' => 'gnutls_session_set_verify_cert2@@GNUTLS_3_4', - 'gnutls_session_set_verify_function' => 'gnutls_session_set_verify_function@@GNUTLS_3_4', - 'gnutls_session_supplemental_register' => 'gnutls_session_supplemental_register@@GNUTLS_3_4', - 'gnutls_session_ticket_enable_client' => 'gnutls_session_ticket_enable_client@@GNUTLS_3_4', - 'gnutls_session_ticket_enable_server' => 'gnutls_session_ticket_enable_server@@GNUTLS_3_4', - 'gnutls_session_ticket_key_generate' => 'gnutls_session_ticket_key_generate@@GNUTLS_3_4', - 'gnutls_set_default_priority' => 'gnutls_set_default_priority@@GNUTLS_3_4', - 'gnutls_sign_algorithm_get' => 'gnutls_sign_algorithm_get@@GNUTLS_3_4', - 'gnutls_sign_algorithm_get_client' => 'gnutls_sign_algorithm_get_client@@GNUTLS_3_4', - 'gnutls_sign_algorithm_get_requested' => 'gnutls_sign_algorithm_get_requested@@GNUTLS_3_4', - 'gnutls_sign_get_hash_algorithm' => 'gnutls_sign_get_hash_algorithm@@GNUTLS_3_4', - 'gnutls_sign_get_id' => 'gnutls_sign_get_id@@GNUTLS_3_4', - 'gnutls_sign_get_name' => 'gnutls_sign_get_name@@GNUTLS_3_4', - 'gnutls_sign_get_oid' => 'gnutls_sign_get_oid@@GNUTLS_3_4', - 'gnutls_sign_get_pk_algorithm' => 'gnutls_sign_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_sign_is_secure' => 'gnutls_sign_is_secure@@GNUTLS_3_4', - 'gnutls_sign_list' => 'gnutls_sign_list@@GNUTLS_3_4', - 'gnutls_srp_1024_group_generator' => 'gnutls_srp_1024_group_generator@@GNUTLS_3_4', - 'gnutls_srp_1024_group_prime' => 'gnutls_srp_1024_group_prime@@GNUTLS_3_4', - 'gnutls_srp_1536_group_generator' => 'gnutls_srp_1536_group_generator@@GNUTLS_3_4', - 'gnutls_srp_1536_group_prime' => 'gnutls_srp_1536_group_prime@@GNUTLS_3_4', - 'gnutls_srp_2048_group_generator' => 'gnutls_srp_2048_group_generator@@GNUTLS_3_4', - 'gnutls_srp_2048_group_prime' => 'gnutls_srp_2048_group_prime@@GNUTLS_3_4', - 'gnutls_srp_3072_group_generator' => 'gnutls_srp_3072_group_generator@@GNUTLS_3_4', - 'gnutls_srp_3072_group_prime' => 'gnutls_srp_3072_group_prime@@GNUTLS_3_4', - 'gnutls_srp_4096_group_generator' => 'gnutls_srp_4096_group_generator@@GNUTLS_3_4', - 'gnutls_srp_4096_group_prime' => 'gnutls_srp_4096_group_prime@@GNUTLS_3_4', - 'gnutls_srp_allocate_client_credentials' => 'gnutls_srp_allocate_client_credentials@@GNUTLS_3_4', - 'gnutls_srp_allocate_server_credentials' => 'gnutls_srp_allocate_server_credentials@@GNUTLS_3_4', - 'gnutls_srp_base64_decode' => 'gnutls_srp_base64_decode@@GNUTLS_3_4', - 'gnutls_srp_base64_decode2' => 'gnutls_srp_base64_decode2@@GNUTLS_3_4', - 'gnutls_srp_base64_encode' => 'gnutls_srp_base64_encode@@GNUTLS_3_4', - 'gnutls_srp_base64_encode2' => 'gnutls_srp_base64_encode2@@GNUTLS_3_4', - 'gnutls_srp_free_client_credentials' => 'gnutls_srp_free_client_credentials@@GNUTLS_3_4', - 'gnutls_srp_free_server_credentials' => 'gnutls_srp_free_server_credentials@@GNUTLS_3_4', - 'gnutls_srp_server_get_username' => 'gnutls_srp_server_get_username@@GNUTLS_3_4', - 'gnutls_srp_set_client_credentials' => 'gnutls_srp_set_client_credentials@@GNUTLS_3_4', - 'gnutls_srp_set_client_credentials_function' => 'gnutls_srp_set_client_credentials_function@@GNUTLS_3_4', - 'gnutls_srp_set_prime_bits' => 'gnutls_srp_set_prime_bits@@GNUTLS_3_4', - 'gnutls_srp_set_server_credentials_file' => 'gnutls_srp_set_server_credentials_file@@GNUTLS_3_4', - 'gnutls_srp_set_server_credentials_function' => 'gnutls_srp_set_server_credentials_function@@GNUTLS_3_4', - 'gnutls_srp_set_server_fake_salt_seed' => 'gnutls_srp_set_server_fake_salt_seed@@GNUTLS_3_4', - 'gnutls_srp_verifier' => 'gnutls_srp_verifier@@GNUTLS_3_4', - 'gnutls_srtp_get_keys' => 'gnutls_srtp_get_keys@@GNUTLS_3_4', - 'gnutls_srtp_get_mki' => 'gnutls_srtp_get_mki@@GNUTLS_3_4', - 'gnutls_srtp_get_profile_id' => 'gnutls_srtp_get_profile_id@@GNUTLS_3_4', - 'gnutls_srtp_get_profile_name' => 'gnutls_srtp_get_profile_name@@GNUTLS_3_4', - 'gnutls_srtp_get_selected_profile' => 'gnutls_srtp_get_selected_profile@@GNUTLS_3_4', - 'gnutls_srtp_set_mki' => 'gnutls_srtp_set_mki@@GNUTLS_3_4', - 'gnutls_srtp_set_profile' => 'gnutls_srtp_set_profile@@GNUTLS_3_4', - 'gnutls_srtp_set_profile_direct' => 'gnutls_srtp_set_profile_direct@@GNUTLS_3_4', - 'gnutls_store_commitment' => 'gnutls_store_commitment@@GNUTLS_3_4', - 'gnutls_store_pubkey' => 'gnutls_store_pubkey@@GNUTLS_3_4', - 'gnutls_strdup' => 'gnutls_strdup@@GNUTLS_3_4', - 'gnutls_strerror' => 'gnutls_strerror@@GNUTLS_3_4', - 'gnutls_strerror_name' => 'gnutls_strerror_name@@GNUTLS_3_4', - 'gnutls_subject_alt_names_deinit' => 'gnutls_subject_alt_names_deinit@@GNUTLS_3_4', - 'gnutls_subject_alt_names_get' => 'gnutls_subject_alt_names_get@@GNUTLS_3_4', - 'gnutls_subject_alt_names_init' => 'gnutls_subject_alt_names_init@@GNUTLS_3_4', - 'gnutls_subject_alt_names_set' => 'gnutls_subject_alt_names_set@@GNUTLS_3_4', - 'gnutls_supplemental_get_name' => 'gnutls_supplemental_get_name@@GNUTLS_3_4', - 'gnutls_supplemental_recv' => 'gnutls_supplemental_recv@@GNUTLS_3_4', - 'gnutls_supplemental_register' => 'gnutls_supplemental_register@@GNUTLS_3_4', - 'gnutls_supplemental_send' => 'gnutls_supplemental_send@@GNUTLS_3_4', - 'gnutls_system_key_add_x509' => 'gnutls_system_key_add_x509@@GNUTLS_3_4', - 'gnutls_system_key_delete' => 'gnutls_system_key_delete@@GNUTLS_3_4', - 'gnutls_system_key_iter_deinit' => 'gnutls_system_key_iter_deinit@@GNUTLS_3_4', - 'gnutls_system_key_iter_get_info' => 'gnutls_system_key_iter_get_info@@GNUTLS_3_4', - 'gnutls_system_recv_timeout' => 'gnutls_system_recv_timeout@@GNUTLS_3_4', - 'gnutls_tdb_deinit' => 'gnutls_tdb_deinit@@GNUTLS_3_4', - 'gnutls_tdb_init' => 'gnutls_tdb_init@@GNUTLS_3_4', - 'gnutls_tdb_set_store_commitment_func' => 'gnutls_tdb_set_store_commitment_func@@GNUTLS_3_4', - 'gnutls_tdb_set_store_func' => 'gnutls_tdb_set_store_func@@GNUTLS_3_4', - 'gnutls_tdb_set_verify_func' => 'gnutls_tdb_set_verify_func@@GNUTLS_3_4', - 'gnutls_tpm_get_registered' => 'gnutls_tpm_get_registered@@GNUTLS_3_4', - 'gnutls_tpm_key_list_deinit' => 'gnutls_tpm_key_list_deinit@@GNUTLS_3_4', - 'gnutls_tpm_key_list_get_url' => 'gnutls_tpm_key_list_get_url@@GNUTLS_3_4', - 'gnutls_tpm_privkey_delete' => 'gnutls_tpm_privkey_delete@@GNUTLS_3_4', - 'gnutls_tpm_privkey_generate' => 'gnutls_tpm_privkey_generate@@GNUTLS_3_4', - 'gnutls_transport_get_int' => 'gnutls_transport_get_int@@GNUTLS_3_4', - 'gnutls_transport_get_int2' => 'gnutls_transport_get_int2@@GNUTLS_3_4', - 'gnutls_transport_get_ptr' => 'gnutls_transport_get_ptr@@GNUTLS_3_4', - 'gnutls_transport_get_ptr2' => 'gnutls_transport_get_ptr2@@GNUTLS_3_4', - 'gnutls_transport_set_errno' => 'gnutls_transport_set_errno@@GNUTLS_3_4', - 'gnutls_transport_set_errno_function' => 'gnutls_transport_set_errno_function@@GNUTLS_3_4', - 'gnutls_transport_set_fastopen' => 'gnutls_transport_set_fastopen@@GNUTLS_3_4', - 'gnutls_transport_set_int2' => 'gnutls_transport_set_int2@@GNUTLS_3_4', - 'gnutls_transport_set_ptr' => 'gnutls_transport_set_ptr@@GNUTLS_3_4', - 'gnutls_transport_set_ptr2' => 'gnutls_transport_set_ptr2@@GNUTLS_3_4', - 'gnutls_transport_set_pull_function' => 'gnutls_transport_set_pull_function@@GNUTLS_3_4', - 'gnutls_transport_set_pull_timeout_function' => 'gnutls_transport_set_pull_timeout_function@@GNUTLS_3_4', - 'gnutls_transport_set_push_function' => 'gnutls_transport_set_push_function@@GNUTLS_3_4', - 'gnutls_transport_set_vec_push_function' => 'gnutls_transport_set_vec_push_function@@GNUTLS_3_4', - 'gnutls_url_is_supported' => 'gnutls_url_is_supported@@GNUTLS_3_4', - 'gnutls_utf8_password_normalize' => 'gnutls_utf8_password_normalize@@GNUTLS_3_4', - 'gnutls_verify_stored_pubkey' => 'gnutls_verify_stored_pubkey@@GNUTLS_3_4', - 'gnutls_x509_aia_deinit' => 'gnutls_x509_aia_deinit@@GNUTLS_3_4', - 'gnutls_x509_aia_get' => 'gnutls_x509_aia_get@@GNUTLS_3_4', - 'gnutls_x509_aia_init' => 'gnutls_x509_aia_init@@GNUTLS_3_4', - 'gnutls_x509_aia_set' => 'gnutls_x509_aia_set@@GNUTLS_3_4', - 'gnutls_x509_aki_deinit' => 'gnutls_x509_aki_deinit@@GNUTLS_3_4', - 'gnutls_x509_aki_get_cert_issuer' => 'gnutls_x509_aki_get_cert_issuer@@GNUTLS_3_4', - 'gnutls_x509_aki_get_id' => 'gnutls_x509_aki_get_id@@GNUTLS_3_4', - 'gnutls_x509_aki_init' => 'gnutls_x509_aki_init@@GNUTLS_3_4', - 'gnutls_x509_aki_set_cert_issuer' => 'gnutls_x509_aki_set_cert_issuer@@GNUTLS_3_4', - 'gnutls_x509_aki_set_id' => 'gnutls_x509_aki_set_id@@GNUTLS_3_4', - 'gnutls_x509_cidr_to_rfc5280' => 'gnutls_x509_cidr_to_rfc5280@@GNUTLS_3_4', - 'gnutls_x509_crl_check_issuer' => 'gnutls_x509_crl_check_issuer@@GNUTLS_3_4', - 'gnutls_x509_crl_deinit' => 'gnutls_x509_crl_deinit@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_deinit' => 'gnutls_x509_crl_dist_points_deinit@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_get' => 'gnutls_x509_crl_dist_points_get@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_init' => 'gnutls_x509_crl_dist_points_init@@GNUTLS_3_4', - 'gnutls_x509_crl_dist_points_set' => 'gnutls_x509_crl_dist_points_set@@GNUTLS_3_4', - 'gnutls_x509_crl_export' => 'gnutls_x509_crl_export@@GNUTLS_3_4', - 'gnutls_x509_crl_export2' => 'gnutls_x509_crl_export2@@GNUTLS_3_4', - 'gnutls_x509_crl_get_authority_key_gn_serial' => 'gnutls_x509_crl_get_authority_key_gn_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_get_authority_key_id' => 'gnutls_x509_crl_get_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crl_get_crt_count' => 'gnutls_x509_crl_get_crt_count@@GNUTLS_3_4', - 'gnutls_x509_crl_get_crt_serial' => 'gnutls_x509_crl_get_crt_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_get_dn_oid' => 'gnutls_x509_crl_get_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_data' => 'gnutls_x509_crl_get_extension_data@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_data2' => 'gnutls_x509_crl_get_extension_data2@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_info' => 'gnutls_x509_crl_get_extension_info@@GNUTLS_3_4', - 'gnutls_x509_crl_get_extension_oid' => 'gnutls_x509_crl_get_extension_oid@@GNUTLS_3_4', - 'gnutls_x509_crl_get_issuer_dn' => 'gnutls_x509_crl_get_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crl_get_issuer_dn2' => 'gnutls_x509_crl_get_issuer_dn2@@GNUTLS_3_4', - 'gnutls_x509_crl_get_issuer_dn3' => 'gnutls_x509_crl_get_issuer_dn3@@GNUTLS_3_4', - 'gnutls_x509_crl_get_issuer_dn_by_oid' => 'gnutls_x509_crl_get_issuer_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crl_get_next_update' => 'gnutls_x509_crl_get_next_update@@GNUTLS_3_4', - 'gnutls_x509_crl_get_number' => 'gnutls_x509_crl_get_number@@GNUTLS_3_4', - 'gnutls_x509_crl_get_raw_issuer_dn' => 'gnutls_x509_crl_get_raw_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crl_get_signature' => 'gnutls_x509_crl_get_signature@@GNUTLS_3_4', - 'gnutls_x509_crl_get_signature_algorithm' => 'gnutls_x509_crl_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crl_get_signature_oid' => 'gnutls_x509_crl_get_signature_oid@@GNUTLS_3_4', - 'gnutls_x509_crl_get_this_update' => 'gnutls_x509_crl_get_this_update@@GNUTLS_3_4', - 'gnutls_x509_crl_get_version' => 'gnutls_x509_crl_get_version@@GNUTLS_3_4', - 'gnutls_x509_crl_import' => 'gnutls_x509_crl_import@@GNUTLS_3_4', - 'gnutls_x509_crl_init' => 'gnutls_x509_crl_init@@GNUTLS_3_4', - 'gnutls_x509_crl_iter_crt_serial' => 'gnutls_x509_crl_iter_crt_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_iter_deinit' => 'gnutls_x509_crl_iter_deinit@@GNUTLS_3_4', - 'gnutls_x509_crl_list_import' => 'gnutls_x509_crl_list_import@@GNUTLS_3_4', - 'gnutls_x509_crl_list_import2' => 'gnutls_x509_crl_list_import2@@GNUTLS_3_4', - 'gnutls_x509_crl_print' => 'gnutls_x509_crl_print@@GNUTLS_3_4', - 'gnutls_x509_crl_privkey_sign' => 'gnutls_x509_crl_privkey_sign@@GNUTLS_3_4', - 'gnutls_x509_crl_set_authority_key_id' => 'gnutls_x509_crl_set_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crl_set_crt' => 'gnutls_x509_crl_set_crt@@GNUTLS_3_4', - 'gnutls_x509_crl_set_crt_serial' => 'gnutls_x509_crl_set_crt_serial@@GNUTLS_3_4', - 'gnutls_x509_crl_set_next_update' => 'gnutls_x509_crl_set_next_update@@GNUTLS_3_4', - 'gnutls_x509_crl_set_number' => 'gnutls_x509_crl_set_number@@GNUTLS_3_4', - 'gnutls_x509_crl_set_this_update' => 'gnutls_x509_crl_set_this_update@@GNUTLS_3_4', - 'gnutls_x509_crl_set_version' => 'gnutls_x509_crl_set_version@@GNUTLS_3_4', - 'gnutls_x509_crl_sign' => 'gnutls_x509_crl_sign@@GNUTLS_3_4', - 'gnutls_x509_crl_sign2' => 'gnutls_x509_crl_sign2@@GNUTLS_3_4', - 'gnutls_x509_crl_verify' => 'gnutls_x509_crl_verify@@GNUTLS_3_4', - 'gnutls_x509_crq_deinit' => 'gnutls_x509_crq_deinit@@GNUTLS_3_4', - 'gnutls_x509_crq_export' => 'gnutls_x509_crq_export@@GNUTLS_3_4', - 'gnutls_x509_crq_export2' => 'gnutls_x509_crq_export2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_attribute_by_oid' => 'gnutls_x509_crq_get_attribute_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_attribute_data' => 'gnutls_x509_crq_get_attribute_data@@GNUTLS_3_4', - 'gnutls_x509_crq_get_attribute_info' => 'gnutls_x509_crq_get_attribute_info@@GNUTLS_3_4', - 'gnutls_x509_crq_get_basic_constraints' => 'gnutls_x509_crq_get_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crq_get_challenge_password' => 'gnutls_x509_crq_get_challenge_password@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn' => 'gnutls_x509_crq_get_dn@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn2' => 'gnutls_x509_crq_get_dn2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn3' => 'gnutls_x509_crq_get_dn3@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn_by_oid' => 'gnutls_x509_crq_get_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_dn_oid' => 'gnutls_x509_crq_get_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_by_oid' => 'gnutls_x509_crq_get_extension_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_by_oid2' => 'gnutls_x509_crq_get_extension_by_oid2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_data' => 'gnutls_x509_crq_get_extension_data@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_data2' => 'gnutls_x509_crq_get_extension_data2@@GNUTLS_3_4', - 'gnutls_x509_crq_get_extension_info' => 'gnutls_x509_crq_get_extension_info@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_id' => 'gnutls_x509_crq_get_key_id@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_purpose_oid' => 'gnutls_x509_crq_get_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_rsa_raw' => 'gnutls_x509_crq_get_key_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crq_get_key_usage' => 'gnutls_x509_crq_get_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crq_get_pk_algorithm' => 'gnutls_x509_crq_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crq_get_pk_oid' => 'gnutls_x509_crq_get_pk_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_private_key_usage_period' => 'gnutls_x509_crq_get_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crq_get_signature_algorithm' => 'gnutls_x509_crq_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crq_get_signature_oid' => 'gnutls_x509_crq_get_signature_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_subject_alt_name' => 'gnutls_x509_crq_get_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crq_get_subject_alt_othername_oid' => 'gnutls_x509_crq_get_subject_alt_othername_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_get_tlsfeatures' => 'gnutls_x509_crq_get_tlsfeatures@@GNUTLS_3_4', - 'gnutls_x509_crq_get_version' => 'gnutls_x509_crq_get_version@@GNUTLS_3_4', - 'gnutls_x509_crq_import' => 'gnutls_x509_crq_import@@GNUTLS_3_4', - 'gnutls_x509_crq_init' => 'gnutls_x509_crq_init@@GNUTLS_3_4', - 'gnutls_x509_crq_print' => 'gnutls_x509_crq_print@@GNUTLS_3_4', - 'gnutls_x509_crq_privkey_sign' => 'gnutls_x509_crq_privkey_sign@@GNUTLS_3_4', - 'gnutls_x509_crq_set_attribute_by_oid' => 'gnutls_x509_crq_set_attribute_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_set_basic_constraints' => 'gnutls_x509_crq_set_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crq_set_challenge_password' => 'gnutls_x509_crq_set_challenge_password@@GNUTLS_3_4', - 'gnutls_x509_crq_set_dn' => 'gnutls_x509_crq_set_dn@@GNUTLS_3_4', - 'gnutls_x509_crq_set_dn_by_oid' => 'gnutls_x509_crq_set_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_set_extension_by_oid' => 'gnutls_x509_crq_set_extension_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key' => 'gnutls_x509_crq_set_key@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key_purpose_oid' => 'gnutls_x509_crq_set_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key_rsa_raw' => 'gnutls_x509_crq_set_key_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crq_set_key_usage' => 'gnutls_x509_crq_set_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crq_set_private_key_usage_period' => 'gnutls_x509_crq_set_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crq_set_pubkey' => 'gnutls_x509_crq_set_pubkey@@GNUTLS_3_4', - 'gnutls_x509_crq_set_subject_alt_name' => 'gnutls_x509_crq_set_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crq_set_subject_alt_othername' => 'gnutls_x509_crq_set_subject_alt_othername@@GNUTLS_3_4', - 'gnutls_x509_crq_set_tlsfeatures' => 'gnutls_x509_crq_set_tlsfeatures@@GNUTLS_3_4', - 'gnutls_x509_crq_set_version' => 'gnutls_x509_crq_set_version@@GNUTLS_3_4', - 'gnutls_x509_crq_sign' => 'gnutls_x509_crq_sign@@GNUTLS_3_4', - 'gnutls_x509_crq_sign2' => 'gnutls_x509_crq_sign2@@GNUTLS_3_4', - 'gnutls_x509_crq_verify' => 'gnutls_x509_crq_verify@@GNUTLS_3_4', - 'gnutls_x509_crt_check_email' => 'gnutls_x509_crt_check_email@@GNUTLS_3_4', - 'gnutls_x509_crt_check_hostname' => 'gnutls_x509_crt_check_hostname@@GNUTLS_3_4', - 'gnutls_x509_crt_check_hostname2' => 'gnutls_x509_crt_check_hostname2@@GNUTLS_3_4', - 'gnutls_x509_crt_check_issuer' => 'gnutls_x509_crt_check_issuer@@GNUTLS_3_4', - 'gnutls_x509_crt_check_key_purpose' => 'gnutls_x509_crt_check_key_purpose@@GNUTLS_3_4', - 'gnutls_x509_crt_check_revocation' => 'gnutls_x509_crt_check_revocation@@GNUTLS_3_4', - 'gnutls_x509_crt_cpy_crl_dist_points' => 'gnutls_x509_crt_cpy_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_crt_deinit' => 'gnutls_x509_crt_deinit@@GNUTLS_3_4', - 'gnutls_x509_crt_equals' => 'gnutls_x509_crt_equals@@GNUTLS_3_4', - 'gnutls_x509_crt_equals2' => 'gnutls_x509_crt_equals2@@GNUTLS_3_4', - 'gnutls_x509_crt_export' => 'gnutls_x509_crt_export@@GNUTLS_3_4', - 'gnutls_x509_crt_export2' => 'gnutls_x509_crt_export2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_activation_time' => 'gnutls_x509_crt_get_activation_time@@GNUTLS_3_4', - 'gnutls_x509_crt_get_authority_info_access' => 'gnutls_x509_crt_get_authority_info_access@@GNUTLS_3_4', - 'gnutls_x509_crt_get_authority_key_gn_serial' => 'gnutls_x509_crt_get_authority_key_gn_serial@@GNUTLS_3_4', - 'gnutls_x509_crt_get_authority_key_id' => 'gnutls_x509_crt_get_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_basic_constraints' => 'gnutls_x509_crt_get_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_get_ca_status' => 'gnutls_x509_crt_get_ca_status@@GNUTLS_3_4', - 'gnutls_x509_crt_get_crl_dist_points' => 'gnutls_x509_crt_get_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn' => 'gnutls_x509_crt_get_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn2' => 'gnutls_x509_crt_get_dn2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn3' => 'gnutls_x509_crt_get_dn3@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn_by_oid' => 'gnutls_x509_crt_get_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_dn_oid' => 'gnutls_x509_crt_get_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_expiration_time' => 'gnutls_x509_crt_get_expiration_time@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_by_oid' => 'gnutls_x509_crt_get_extension_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_by_oid2' => 'gnutls_x509_crt_get_extension_by_oid2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_data' => 'gnutls_x509_crt_get_extension_data@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_data2' => 'gnutls_x509_crt_get_extension_data2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_info' => 'gnutls_x509_crt_get_extension_info@@GNUTLS_3_4', - 'gnutls_x509_crt_get_extension_oid' => 'gnutls_x509_crt_get_extension_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_fingerprint' => 'gnutls_x509_crt_get_fingerprint@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer' => 'gnutls_x509_crt_get_issuer@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_alt_name' => 'gnutls_x509_crt_get_issuer_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_alt_name2' => 'gnutls_x509_crt_get_issuer_alt_name2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_alt_othername_oid' => 'gnutls_x509_crt_get_issuer_alt_othername_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn' => 'gnutls_x509_crt_get_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn2' => 'gnutls_x509_crt_get_issuer_dn2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn3' => 'gnutls_x509_crt_get_issuer_dn3@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn_by_oid' => 'gnutls_x509_crt_get_issuer_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_dn_oid' => 'gnutls_x509_crt_get_issuer_dn_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_issuer_unique_id' => 'gnutls_x509_crt_get_issuer_unique_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_key_id' => 'gnutls_x509_crt_get_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_key_purpose_oid' => 'gnutls_x509_crt_get_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_key_usage' => 'gnutls_x509_crt_get_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crt_get_name_constraints' => 'gnutls_x509_crt_get_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_algorithm' => 'gnutls_x509_crt_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_dsa_raw' => 'gnutls_x509_crt_get_pk_dsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_ecc_raw' => 'gnutls_x509_crt_get_pk_ecc_raw@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_oid' => 'gnutls_x509_crt_get_pk_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_pk_rsa_raw' => 'gnutls_x509_crt_get_pk_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_crt_get_policy' => 'gnutls_x509_crt_get_policy@@GNUTLS_3_4', - 'gnutls_x509_crt_get_preferred_hash_algorithm' => 'gnutls_x509_crt_get_preferred_hash_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crt_get_private_key_usage_period' => 'gnutls_x509_crt_get_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crt_get_proxy' => 'gnutls_x509_crt_get_proxy@@GNUTLS_3_4', - 'gnutls_x509_crt_get_raw_dn' => 'gnutls_x509_crt_get_raw_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_raw_issuer_dn' => 'gnutls_x509_crt_get_raw_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_get_serial' => 'gnutls_x509_crt_get_serial@@GNUTLS_3_4', - 'gnutls_x509_crt_get_signature' => 'gnutls_x509_crt_get_signature@@GNUTLS_3_4', - 'gnutls_x509_crt_get_signature_algorithm' => 'gnutls_x509_crt_get_signature_algorithm@@GNUTLS_3_4', - 'gnutls_x509_crt_get_signature_oid' => 'gnutls_x509_crt_get_signature_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject' => 'gnutls_x509_crt_get_subject@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_alt_name' => 'gnutls_x509_crt_get_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_alt_name2' => 'gnutls_x509_crt_get_subject_alt_name2@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_alt_othername_oid' => 'gnutls_x509_crt_get_subject_alt_othername_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_key_id' => 'gnutls_x509_crt_get_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_subject_unique_id' => 'gnutls_x509_crt_get_subject_unique_id@@GNUTLS_3_4', - 'gnutls_x509_crt_get_tlsfeatures' => 'gnutls_x509_crt_get_tlsfeatures@@GNUTLS_3_4', - 'gnutls_x509_crt_get_version' => 'gnutls_x509_crt_get_version@@GNUTLS_3_4', - 'gnutls_x509_crt_import' => 'gnutls_x509_crt_import@@GNUTLS_3_4', - 'gnutls_x509_crt_import_pkcs11' => 'gnutls_x509_crt_import_pkcs11@@GNUTLS_3_4', - 'gnutls_x509_crt_import_url' => 'gnutls_x509_crt_import_url@@GNUTLS_3_4', - 'gnutls_x509_crt_init' => 'gnutls_x509_crt_init@@GNUTLS_3_4', - 'gnutls_x509_crt_list_import' => 'gnutls_x509_crt_list_import@@GNUTLS_3_4', - 'gnutls_x509_crt_list_import2' => 'gnutls_x509_crt_list_import2@@GNUTLS_3_4', - 'gnutls_x509_crt_list_import_pkcs11' => 'gnutls_x509_crt_list_import_pkcs11@@GNUTLS_3_4', - 'gnutls_x509_crt_list_verify' => 'gnutls_x509_crt_list_verify@@GNUTLS_3_4', - 'gnutls_x509_crt_print' => 'gnutls_x509_crt_print@@GNUTLS_3_4', - 'gnutls_x509_crt_privkey_sign' => 'gnutls_x509_crt_privkey_sign@@GNUTLS_3_4', - 'gnutls_x509_crt_set_activation_time' => 'gnutls_x509_crt_set_activation_time@@GNUTLS_3_4', - 'gnutls_x509_crt_set_authority_info_access' => 'gnutls_x509_crt_set_authority_info_access@@GNUTLS_3_4', - 'gnutls_x509_crt_set_authority_key_id' => 'gnutls_x509_crt_set_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_set_basic_constraints' => 'gnutls_x509_crt_set_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_set_ca_status' => 'gnutls_x509_crt_set_ca_status@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crl_dist_points' => 'gnutls_x509_crt_set_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crl_dist_points2' => 'gnutls_x509_crt_set_crl_dist_points2@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crq' => 'gnutls_x509_crt_set_crq@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crq_extension_by_oid' => 'gnutls_x509_crt_set_crq_extension_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_crq_extensions' => 'gnutls_x509_crt_set_crq_extensions@@GNUTLS_3_4', - 'gnutls_x509_crt_set_dn' => 'gnutls_x509_crt_set_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_set_dn_by_oid' => 'gnutls_x509_crt_set_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_expiration_time' => 'gnutls_x509_crt_set_expiration_time@@GNUTLS_3_4', - 'gnutls_x509_crt_set_extension_by_oid' => 'gnutls_x509_crt_set_extension_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_alt_name' => 'gnutls_x509_crt_set_issuer_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_alt_othername' => 'gnutls_x509_crt_set_issuer_alt_othername@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_dn' => 'gnutls_x509_crt_set_issuer_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_dn_by_oid' => 'gnutls_x509_crt_set_issuer_dn_by_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_issuer_unique_id' => 'gnutls_x509_crt_set_issuer_unique_id@@GNUTLS_3_4', - 'gnutls_x509_crt_set_key' => 'gnutls_x509_crt_set_key@@GNUTLS_3_4', - 'gnutls_x509_crt_set_key_purpose_oid' => 'gnutls_x509_crt_set_key_purpose_oid@@GNUTLS_3_4', - 'gnutls_x509_crt_set_key_usage' => 'gnutls_x509_crt_set_key_usage@@GNUTLS_3_4', - 'gnutls_x509_crt_set_name_constraints' => 'gnutls_x509_crt_set_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_crt_set_pin_function' => 'gnutls_x509_crt_set_pin_function@@GNUTLS_3_4', - 'gnutls_x509_crt_set_policy' => 'gnutls_x509_crt_set_policy@@GNUTLS_3_4', - 'gnutls_x509_crt_set_private_key_usage_period' => 'gnutls_x509_crt_set_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_crt_set_proxy' => 'gnutls_x509_crt_set_proxy@@GNUTLS_3_4', - 'gnutls_x509_crt_set_proxy_dn' => 'gnutls_x509_crt_set_proxy_dn@@GNUTLS_3_4', - 'gnutls_x509_crt_set_pubkey' => 'gnutls_x509_crt_set_pubkey@@GNUTLS_3_4', - 'gnutls_x509_crt_set_serial' => 'gnutls_x509_crt_set_serial@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_alt_name' => 'gnutls_x509_crt_set_subject_alt_name@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_alt_othername' => 'gnutls_x509_crt_set_subject_alt_othername@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_alternative_name' => 'gnutls_x509_crt_set_subject_alternative_name@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_key_id' => 'gnutls_x509_crt_set_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_crt_set_subject_unique_id' => 'gnutls_x509_crt_set_subject_unique_id@@GNUTLS_3_4', - 'gnutls_x509_crt_set_tlsfeatures' => 'gnutls_x509_crt_set_tlsfeatures@@GNUTLS_3_4', - 'gnutls_x509_crt_set_version' => 'gnutls_x509_crt_set_version@@GNUTLS_3_4', - 'gnutls_x509_crt_sign' => 'gnutls_x509_crt_sign@@GNUTLS_3_4', - 'gnutls_x509_crt_sign2' => 'gnutls_x509_crt_sign2@@GNUTLS_3_4', - 'gnutls_x509_crt_verify' => 'gnutls_x509_crt_verify@@GNUTLS_3_4', - 'gnutls_x509_crt_verify_data2' => 'gnutls_x509_crt_verify_data2@@GNUTLS_3_4', - 'gnutls_x509_dn_deinit' => 'gnutls_x509_dn_deinit@@GNUTLS_3_4', - 'gnutls_x509_dn_export' => 'gnutls_x509_dn_export@@GNUTLS_3_4', - 'gnutls_x509_dn_export2' => 'gnutls_x509_dn_export2@@GNUTLS_3_4', - 'gnutls_x509_dn_get_rdn_ava' => 'gnutls_x509_dn_get_rdn_ava@@GNUTLS_3_4', - 'gnutls_x509_dn_get_str' => 'gnutls_x509_dn_get_str@@GNUTLS_3_4', - 'gnutls_x509_dn_get_str2' => 'gnutls_x509_dn_get_str2@@GNUTLS_3_4', - 'gnutls_x509_dn_import' => 'gnutls_x509_dn_import@@GNUTLS_3_4', - 'gnutls_x509_dn_init' => 'gnutls_x509_dn_init@@GNUTLS_3_4', - 'gnutls_x509_dn_oid_known' => 'gnutls_x509_dn_oid_known@@GNUTLS_3_4', - 'gnutls_x509_dn_oid_name' => 'gnutls_x509_dn_oid_name@@GNUTLS_3_4', - 'gnutls_x509_dn_set_str' => 'gnutls_x509_dn_set_str@@GNUTLS_3_4', - 'gnutls_x509_ext_deinit' => 'gnutls_x509_ext_deinit@@GNUTLS_3_4', - 'gnutls_x509_ext_export_aia' => 'gnutls_x509_ext_export_aia@@GNUTLS_3_4', - 'gnutls_x509_ext_export_authority_key_id' => 'gnutls_x509_ext_export_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_export_basic_constraints' => 'gnutls_x509_ext_export_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_export_crl_dist_points' => 'gnutls_x509_ext_export_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_ext_export_key_purposes' => 'gnutls_x509_ext_export_key_purposes@@GNUTLS_3_4', - 'gnutls_x509_ext_export_key_usage' => 'gnutls_x509_ext_export_key_usage@@GNUTLS_3_4', - 'gnutls_x509_ext_export_name_constraints' => 'gnutls_x509_ext_export_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_export_policies' => 'gnutls_x509_ext_export_policies@@GNUTLS_3_4', - 'gnutls_x509_ext_export_private_key_usage_period' => 'gnutls_x509_ext_export_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_ext_export_proxy' => 'gnutls_x509_ext_export_proxy@@GNUTLS_3_4', - 'gnutls_x509_ext_export_subject_alt_names' => 'gnutls_x509_ext_export_subject_alt_names@@GNUTLS_3_4', - 'gnutls_x509_ext_export_subject_key_id' => 'gnutls_x509_ext_export_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_export_tlsfeatures' => 'gnutls_x509_ext_export_tlsfeatures@@GNUTLS_3_4', - 'gnutls_x509_ext_import_aia' => 'gnutls_x509_ext_import_aia@@GNUTLS_3_4', - 'gnutls_x509_ext_import_authority_key_id' => 'gnutls_x509_ext_import_authority_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_import_basic_constraints' => 'gnutls_x509_ext_import_basic_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_import_crl_dist_points' => 'gnutls_x509_ext_import_crl_dist_points@@GNUTLS_3_4', - 'gnutls_x509_ext_import_key_purposes' => 'gnutls_x509_ext_import_key_purposes@@GNUTLS_3_4', - 'gnutls_x509_ext_import_key_usage' => 'gnutls_x509_ext_import_key_usage@@GNUTLS_3_4', - 'gnutls_x509_ext_import_name_constraints' => 'gnutls_x509_ext_import_name_constraints@@GNUTLS_3_4', - 'gnutls_x509_ext_import_policies' => 'gnutls_x509_ext_import_policies@@GNUTLS_3_4', - 'gnutls_x509_ext_import_private_key_usage_period' => 'gnutls_x509_ext_import_private_key_usage_period@@GNUTLS_3_4', - 'gnutls_x509_ext_import_proxy' => 'gnutls_x509_ext_import_proxy@@GNUTLS_3_4', - 'gnutls_x509_ext_import_subject_alt_names' => 'gnutls_x509_ext_import_subject_alt_names@@GNUTLS_3_4', - 'gnutls_x509_ext_import_subject_key_id' => 'gnutls_x509_ext_import_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_ext_import_tlsfeatures' => 'gnutls_x509_ext_import_tlsfeatures@@GNUTLS_3_4', - 'gnutls_x509_ext_print' => 'gnutls_x509_ext_print@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_deinit' => 'gnutls_x509_key_purpose_deinit@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_get' => 'gnutls_x509_key_purpose_get@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_init' => 'gnutls_x509_key_purpose_init@@GNUTLS_3_4', - 'gnutls_x509_key_purpose_set' => 'gnutls_x509_key_purpose_set@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_add_excluded' => 'gnutls_x509_name_constraints_add_excluded@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_add_permitted' => 'gnutls_x509_name_constraints_add_permitted@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_check' => 'gnutls_x509_name_constraints_check@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_check_crt' => 'gnutls_x509_name_constraints_check_crt@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_deinit' => 'gnutls_x509_name_constraints_deinit@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_get_excluded' => 'gnutls_x509_name_constraints_get_excluded@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_get_permitted' => 'gnutls_x509_name_constraints_get_permitted@@GNUTLS_3_4', - 'gnutls_x509_name_constraints_init' => 'gnutls_x509_name_constraints_init@@GNUTLS_3_4', - 'gnutls_x509_othername_to_virtual' => 'gnutls_x509_othername_to_virtual@@GNUTLS_3_4', - 'gnutls_x509_policies_deinit' => 'gnutls_x509_policies_deinit@@GNUTLS_3_4', - 'gnutls_x509_policies_get' => 'gnutls_x509_policies_get@@GNUTLS_3_4', - 'gnutls_x509_policies_init' => 'gnutls_x509_policies_init@@GNUTLS_3_4', - 'gnutls_x509_policies_set' => 'gnutls_x509_policies_set@@GNUTLS_3_4', - 'gnutls_x509_policy_release' => 'gnutls_x509_policy_release@@GNUTLS_3_4', - 'gnutls_x509_privkey_cpy' => 'gnutls_x509_privkey_cpy@@GNUTLS_3_4', - 'gnutls_x509_privkey_deinit' => 'gnutls_x509_privkey_deinit@@GNUTLS_3_4', - 'gnutls_x509_privkey_export' => 'gnutls_x509_privkey_export@@GNUTLS_3_4', - 'gnutls_x509_privkey_export2' => 'gnutls_x509_privkey_export2@@GNUTLS_3_4', - 'gnutls_x509_privkey_export2_pkcs8' => 'gnutls_x509_privkey_export2_pkcs8@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_dsa_raw' => 'gnutls_x509_privkey_export_dsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_ecc_raw' => 'gnutls_x509_privkey_export_ecc_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_pkcs8' => 'gnutls_x509_privkey_export_pkcs8@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_rsa_raw' => 'gnutls_x509_privkey_export_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_export_rsa_raw2' => 'gnutls_x509_privkey_export_rsa_raw2@@GNUTLS_3_4', - 'gnutls_x509_privkey_fix' => 'gnutls_x509_privkey_fix@@GNUTLS_3_4', - 'gnutls_x509_privkey_generate' => 'gnutls_x509_privkey_generate@@GNUTLS_3_4', - 'gnutls_x509_privkey_generate2' => 'gnutls_x509_privkey_generate2@@GNUTLS_3_4', - 'gnutls_x509_privkey_get_key_id' => 'gnutls_x509_privkey_get_key_id@@GNUTLS_3_4', - 'gnutls_x509_privkey_get_pk_algorithm' => 'gnutls_x509_privkey_get_pk_algorithm@@GNUTLS_3_4', - 'gnutls_x509_privkey_get_pk_algorithm2' => 'gnutls_x509_privkey_get_pk_algorithm2@@GNUTLS_3_4', - 'gnutls_x509_privkey_get_seed' => 'gnutls_x509_privkey_get_seed@@GNUTLS_3_4', - 'gnutls_x509_privkey_import' => 'gnutls_x509_privkey_import@@GNUTLS_3_4', - 'gnutls_x509_privkey_import2' => 'gnutls_x509_privkey_import2@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_dsa_raw' => 'gnutls_x509_privkey_import_dsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_ecc_raw' => 'gnutls_x509_privkey_import_ecc_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_openssl' => 'gnutls_x509_privkey_import_openssl@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_pkcs8' => 'gnutls_x509_privkey_import_pkcs8@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_rsa_raw' => 'gnutls_x509_privkey_import_rsa_raw@@GNUTLS_3_4', - 'gnutls_x509_privkey_import_rsa_raw2' => 'gnutls_x509_privkey_import_rsa_raw2@@GNUTLS_3_4', - 'gnutls_x509_privkey_init' => 'gnutls_x509_privkey_init@@GNUTLS_3_4', - 'gnutls_x509_privkey_sec_param' => 'gnutls_x509_privkey_sec_param@@GNUTLS_3_4', - 'gnutls_x509_privkey_set_flags' => 'gnutls_x509_privkey_set_flags@@GNUTLS_3_4', - 'gnutls_x509_privkey_set_pin_function' => 'gnutls_x509_privkey_set_pin_function@@GNUTLS_3_4', - 'gnutls_x509_privkey_sign_data' => 'gnutls_x509_privkey_sign_data@@GNUTLS_3_4', - 'gnutls_x509_privkey_sign_hash' => 'gnutls_x509_privkey_sign_hash@@GNUTLS_3_4', - 'gnutls_x509_privkey_verify_params' => 'gnutls_x509_privkey_verify_params@@GNUTLS_3_4', - 'gnutls_x509_privkey_verify_seed' => 'gnutls_x509_privkey_verify_seed@@GNUTLS_3_4', - 'gnutls_x509_rdn_get' => 'gnutls_x509_rdn_get@@GNUTLS_3_4', - 'gnutls_x509_rdn_get2' => 'gnutls_x509_rdn_get2@@GNUTLS_3_4', - 'gnutls_x509_rdn_get_by_oid' => 'gnutls_x509_rdn_get_by_oid@@GNUTLS_3_4', - 'gnutls_x509_rdn_get_oid' => 'gnutls_x509_rdn_get_oid@@GNUTLS_3_4', - 'gnutls_x509_tlsfeatures_add' => 'gnutls_x509_tlsfeatures_add@@GNUTLS_3_4', - 'gnutls_x509_tlsfeatures_check_crt' => 'gnutls_x509_tlsfeatures_check_crt@@GNUTLS_3_4', - 'gnutls_x509_tlsfeatures_deinit' => 'gnutls_x509_tlsfeatures_deinit@@GNUTLS_3_4', - 'gnutls_x509_tlsfeatures_get' => 'gnutls_x509_tlsfeatures_get@@GNUTLS_3_4', - 'gnutls_x509_tlsfeatures_init' => 'gnutls_x509_tlsfeatures_init@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_cas' => 'gnutls_x509_trust_list_add_cas@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_crls' => 'gnutls_x509_trust_list_add_crls@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_named_crt' => 'gnutls_x509_trust_list_add_named_crt@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_system_trust' => 'gnutls_x509_trust_list_add_system_trust@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_trust_dir' => 'gnutls_x509_trust_list_add_trust_dir@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_trust_file' => 'gnutls_x509_trust_list_add_trust_file@@GNUTLS_3_4', - 'gnutls_x509_trust_list_add_trust_mem' => 'gnutls_x509_trust_list_add_trust_mem@@GNUTLS_3_4', - 'gnutls_x509_trust_list_deinit' => 'gnutls_x509_trust_list_deinit@@GNUTLS_3_4', - 'gnutls_x509_trust_list_get_issuer' => 'gnutls_x509_trust_list_get_issuer@@GNUTLS_3_4', - 'gnutls_x509_trust_list_get_issuer_by_dn' => 'gnutls_x509_trust_list_get_issuer_by_dn@@GNUTLS_3_4', - 'gnutls_x509_trust_list_get_issuer_by_subject_key_id' => 'gnutls_x509_trust_list_get_issuer_by_subject_key_id@@GNUTLS_3_4', - 'gnutls_x509_trust_list_init' => 'gnutls_x509_trust_list_init@@GNUTLS_3_4', - 'gnutls_x509_trust_list_iter_deinit' => 'gnutls_x509_trust_list_iter_deinit@@GNUTLS_3_4', - 'gnutls_x509_trust_list_iter_get_ca' => 'gnutls_x509_trust_list_iter_get_ca@@GNUTLS_3_4', - 'gnutls_x509_trust_list_remove_cas' => 'gnutls_x509_trust_list_remove_cas@@GNUTLS_3_4', - 'gnutls_x509_trust_list_remove_trust_file' => 'gnutls_x509_trust_list_remove_trust_file@@GNUTLS_3_4', - 'gnutls_x509_trust_list_remove_trust_mem' => 'gnutls_x509_trust_list_remove_trust_mem@@GNUTLS_3_4', - 'gnutls_x509_trust_list_verify_crt' => 'gnutls_x509_trust_list_verify_crt@@GNUTLS_3_4', - 'gnutls_x509_trust_list_verify_crt2' => 'gnutls_x509_trust_list_verify_crt2@@GNUTLS_3_4', - 'gnutls_x509_trust_list_verify_named_crt' => 'gnutls_x509_trust_list_verify_named_crt@@GNUTLS_3_4', - 'inflate' => 'vasprintf@@GLIBC_2.2.5', - 'inflateEnd' => 'vasprintf@@GLIBC_2.2.5', - 'inflateInit2_' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_config_option' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_message' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_module_finalize' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_module_get_flags' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_module_get_name' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_module_initialize' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_module_load' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_module_release' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_modules_load_and_initialize' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_pin_file_callback' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_pin_get_length' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_pin_get_value' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_pin_new_for_string' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_pin_register_callback' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_pin_request' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_pin_unref' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_pin_unregister_callback' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_space_strdup' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_space_strlen' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_strerror' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_format' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_free' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_get_attribute' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_get_attributes' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_get_module_info' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_get_pin_source' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_get_pin_value' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_get_token_info' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_match_module_info' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_match_token_info' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_new' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_parse' => 'vasprintf@@GLIBC_2.2.5', - 'p11_kit_uri_set_attribute' => 'vasprintf@@GLIBC_2.2.5', - 'u16_normalize' => 'vasprintf@@GLIBC_2.2.5', - 'u16_to_u8' => 'vasprintf@@GLIBC_2.2.5', - 'u32_normalize' => 'vasprintf@@GLIBC_2.2.5', - 'u32_to_u8' => 'vasprintf@@GLIBC_2.2.5', - 'u8_check' => 'vasprintf@@GLIBC_2.2.5', - 'u8_to_u16' => 'vasprintf@@GLIBC_2.2.5', - 'u8_to_u32' => 'vasprintf@@GLIBC_2.2.5', - 'uc_general_category_and_not' => 'vasprintf@@GLIBC_2.2.5', - 'uc_general_category_or' => 'vasprintf@@GLIBC_2.2.5', - 'uc_is_general_category' => 'vasprintf@@GLIBC_2.2.5', - 'uc_is_property_default_ignorable_code_point' => 'vasprintf@@GLIBC_2.2.5', - 'uc_is_property_join_control' => 'vasprintf@@GLIBC_2.2.5', - 'uc_is_property_not_a_character' => 'vasprintf@@GLIBC_2.2.5', - 'uninorm_nfc' => 'vasprintf@@GLIBC_2.2.5', - 'uninorm_nfkc' => 'vasprintf@@GLIBC_2.2.5' - }, - 'Symbols' => { - 'libgnutls.so.30.13.1' => { - '_dsa_generate_dss_g@@GNUTLS_FIPS140_3_4' => 1, - '_dsa_generate_dss_pq@@GNUTLS_FIPS140_3_4' => 1, - '_dsa_validate_dss_g@@GNUTLS_FIPS140_3_4' => 1, - '_dsa_validate_dss_pq@@GNUTLS_FIPS140_3_4' => 1, - '_gnutls_bin2hex@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_buffer_append_str@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_buffer_init@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_buffer_to_datum@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_cidr_to_string@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_decode_ber_rs_raw@@GNUTLS_FIPS140_3_4' => 1, - '_gnutls_digest_exists@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_encode_ber_rs_raw@@GNUTLS_FIPS140_3_4' => 1, - '_gnutls_global_init_skip@@GNUTLS_3_4' => 1, - '_gnutls_hello_set_default_version@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_idna_map@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_idna_reverse_map@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_ip_to_string@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_lib_simulate_error@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_log@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_log_level@@GNUTLS_PRIVATE_3_4' => -4, - '_gnutls_mac_to_entry@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_mpi_log@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_mpi_ops@@GNUTLS_PRIVATE_3_4' => -200, - '_gnutls_pkcs12_string_to_key@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_record_set_default_version@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_resolve_priorities@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_rsa_pms_set_version@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_server_name_set_raw@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_ucs2_to_utf8@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_utf8_to_ucs2@@GNUTLS_PRIVATE_3_4' => 1, - '_gnutls_x509_name_constraints_merge@@GNUTLS_PRIVATE_3_4' => 1, - '_rsa_generate_fips186_4_keypair@@GNUTLS_FIPS140_3_4' => 1, - 'dsa_generate_dss_keypair@@GNUTLS_FIPS140_3_4' => 1, - 'gnutls_aead_cipher_decrypt@@GNUTLS_3_4' => 1, - 'gnutls_aead_cipher_deinit@@GNUTLS_3_4' => 1, - 'gnutls_aead_cipher_encrypt@@GNUTLS_3_4' => 1, - 'gnutls_aead_cipher_init@@GNUTLS_3_4' => 1, - 'gnutls_alert_get@@GNUTLS_3_4' => 1, - 'gnutls_alert_get_name@@GNUTLS_3_4' => 1, - 'gnutls_alert_get_strname@@GNUTLS_3_4' => 1, - 'gnutls_alert_send@@GNUTLS_3_4' => 1, - 'gnutls_alert_send_appropriate@@GNUTLS_3_4' => 1, - 'gnutls_alpn_get_selected_protocol@@GNUTLS_3_4' => 1, - 'gnutls_alpn_set_protocols@@GNUTLS_3_4' => 1, - 'gnutls_anon_allocate_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_allocate_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_free_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_free_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_anon_set_params_function@@GNUTLS_3_4' => 1, - 'gnutls_anon_set_server_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_anon_set_server_known_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_anon_set_server_params_function@@GNUTLS_3_4' => 1, - 'gnutls_auth_client_get_type@@GNUTLS_3_4' => 1, - 'gnutls_auth_get_type@@GNUTLS_3_4' => 1, - 'gnutls_auth_server_get_type@@GNUTLS_3_4' => 1, - 'gnutls_buffer_append_data@@GNUTLS_3_4' => 1, - 'gnutls_bye@@GNUTLS_3_4' => 1, - 'gnutls_calloc@@GNUTLS_3_4' => -8, - 'gnutls_certificate_activation_time_peers@@GNUTLS_3_4' => 1, - 'gnutls_certificate_allocate_credentials@@GNUTLS_3_4' => 1, - 'gnutls_certificate_client_get_request_status@@GNUTLS_3_4' => 1, - 'gnutls_certificate_expiration_time_peers@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_ca_names@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_cas@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_credentials@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_crls@@GNUTLS_3_4' => 1, - 'gnutls_certificate_free_keys@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_crt_raw@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_issuer@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_openpgp_crt@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_openpgp_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_ours@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_peers@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_peers_subkey_id@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_trust_list@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_verify_flags@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_x509_crt@@GNUTLS_3_4' => 1, - 'gnutls_certificate_get_x509_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_send_x509_rdn_sequence@@GNUTLS_3_4' => 1, - 'gnutls_certificate_server_set_request@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_flags@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_known_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_ocsp_status_request_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_ocsp_status_request_function2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_ocsp_status_request_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_file2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_mem2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_key_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_keyring_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_openpgp_keyring_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_params_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_retrieve_function2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_retrieve_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_trust_list@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_verify_flags@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_verify_function@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_verify_limits@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_crl@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_crl_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_crl_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_file2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_mem2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_key_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_simple_pkcs12_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_simple_pkcs12_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_system_trust@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust_dir@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust_file@@GNUTLS_3_4' => 1, - 'gnutls_certificate_set_x509_trust_mem@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_get@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_get_id@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_get_name@@GNUTLS_3_4' => 1, - 'gnutls_certificate_type_list@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verification_status_print@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verify_peers2@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verify_peers3@@GNUTLS_3_4' => 1, - 'gnutls_certificate_verify_peers@@GNUTLS_3_4' => 1, - 'gnutls_check_version@@GNUTLS_3_4' => 1, - 'gnutls_cipher_add_auth@@GNUTLS_3_4' => 1, - 'gnutls_cipher_decrypt2@@GNUTLS_3_4' => 1, - 'gnutls_cipher_decrypt@@GNUTLS_3_4' => 1, - 'gnutls_cipher_deinit@@GNUTLS_3_4' => 1, - 'gnutls_cipher_encrypt2@@GNUTLS_3_4' => 1, - 'gnutls_cipher_encrypt@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_block_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_id@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_iv_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_key_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_name@@GNUTLS_3_4' => 1, - 'gnutls_cipher_get_tag_size@@GNUTLS_3_4' => 1, - 'gnutls_cipher_init@@GNUTLS_3_4' => 1, - 'gnutls_cipher_list@@GNUTLS_3_4' => 1, - 'gnutls_cipher_set_iv@@GNUTLS_3_4' => 1, - 'gnutls_cipher_suite_get_name@@GNUTLS_3_4' => 1, - 'gnutls_cipher_suite_info@@GNUTLS_3_4' => 1, - 'gnutls_cipher_tag@@GNUTLS_3_4' => 1, - 'gnutls_compression_get@@GNUTLS_3_4' => 1, - 'gnutls_compression_get_id@@GNUTLS_3_4' => 1, - 'gnutls_compression_get_name@@GNUTLS_3_4' => 1, - 'gnutls_compression_list@@GNUTLS_3_4' => 1, - 'gnutls_credentials_clear@@GNUTLS_3_4' => 1, - 'gnutls_credentials_get@@GNUTLS_3_4' => 1, - 'gnutls_credentials_set@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_aead_cipher@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_cipher@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_digest@@GNUTLS_3_4' => 1, - 'gnutls_crypto_register_mac@@GNUTLS_3_4' => 1, - 'gnutls_db_check_entry@@GNUTLS_3_4' => 1, - 'gnutls_db_check_entry_time@@GNUTLS_3_4' => 1, - 'gnutls_db_get_default_cache_expiration@@GNUTLS_3_4' => 1, - 'gnutls_db_get_ptr@@GNUTLS_3_4' => 1, - 'gnutls_db_remove_session@@GNUTLS_3_4' => 1, - 'gnutls_db_set_cache_expiration@@GNUTLS_3_4' => 1, - 'gnutls_db_set_ptr@@GNUTLS_3_4' => 1, - 'gnutls_db_set_remove_function@@GNUTLS_3_4' => 1, - 'gnutls_db_set_retrieve_function@@GNUTLS_3_4' => 1, - 'gnutls_db_set_store_function@@GNUTLS_3_4' => 1, - 'gnutls_decode_ber_digest_info@@GNUTLS_3_4' => 1, - 'gnutls_deinit@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_group@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_peers_public_bits@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_prime_bits@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_dh_get_secret_bits@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_cpy@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_deinit@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_export2_pkcs3@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_export_pkcs3@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_export_raw@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_generate2@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_import_dsa@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_import_pkcs3@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_import_raw2@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_import_raw@@GNUTLS_3_4' => 1, - 'gnutls_dh_params_init@@GNUTLS_3_4' => 1, - 'gnutls_dh_set_prime_bits@@GNUTLS_3_4' => 1, - 'gnutls_digest_get_id@@GNUTLS_3_4' => 1, - 'gnutls_digest_get_name@@GNUTLS_3_4' => 1, - 'gnutls_digest_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_digest_list@@GNUTLS_3_4' => 1, - 'gnutls_dtls_cookie_send@@GNUTLS_3_4' => 1, - 'gnutls_dtls_cookie_verify@@GNUTLS_3_4' => 1, - 'gnutls_dtls_get_data_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_get_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_get_timeout@@GNUTLS_3_4' => 1, - 'gnutls_dtls_prestate_set@@GNUTLS_3_4' => 1, - 'gnutls_dtls_set_data_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_set_mtu@@GNUTLS_3_4' => 1, - 'gnutls_dtls_set_timeouts@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get_id@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get_name@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get_pk@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_get_size@@GNUTLS_3_4' => 1, - 'gnutls_ecc_curve_list@@GNUTLS_3_4' => 1, - 'gnutls_encode_ber_digest_info@@GNUTLS_3_4' => 1, - 'gnutls_error_is_fatal@@GNUTLS_3_4' => 1, - 'gnutls_error_to_alert@@GNUTLS_3_4' => 1, - 'gnutls_est_record_overhead_size@@GNUTLS_3_4' => 1, - 'gnutls_ext_get_data@@GNUTLS_3_4' => 1, - 'gnutls_ext_get_name@@GNUTLS_3_4' => 1, - 'gnutls_ext_register@@GNUTLS_3_4' => 1, - 'gnutls_ext_set_data@@GNUTLS_3_4' => 1, - 'gnutls_ffdhe_2048_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_ffdhe_2048_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_ffdhe_2048_key_bits@@GNUTLS_3_4' => -4, - 'gnutls_ffdhe_3072_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_ffdhe_3072_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_ffdhe_3072_key_bits@@GNUTLS_3_4' => -4, - 'gnutls_ffdhe_4096_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_ffdhe_4096_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_ffdhe_4096_key_bits@@GNUTLS_3_4' => -4, - 'gnutls_ffdhe_8192_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_ffdhe_8192_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_ffdhe_8192_key_bits@@GNUTLS_3_4' => -4, - 'gnutls_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_fips140_mode_enabled@@GNUTLS_3_4' => 1, - 'gnutls_free@@GNUTLS_3_4' => -8, - 'gnutls_global_deinit@@GNUTLS_3_4' => 1, - 'gnutls_global_init@@GNUTLS_3_4' => 1, - 'gnutls_global_set_audit_log_function@@GNUTLS_3_4' => 1, - 'gnutls_global_set_log_function@@GNUTLS_3_4' => 1, - 'gnutls_global_set_log_level@@GNUTLS_3_4' => 1, - 'gnutls_global_set_mem_functions@@GNUTLS_3_4' => 1, - 'gnutls_global_set_mutex@@GNUTLS_3_4' => 1, - 'gnutls_global_set_time_function@@GNUTLS_3_4' => 1, - 'gnutls_handshake@@GNUTLS_3_4' => 1, - 'gnutls_handshake_description_get_name@@GNUTLS_3_4' => 1, - 'gnutls_handshake_get_last_in@@GNUTLS_3_4' => 1, - 'gnutls_handshake_get_last_out@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_hook_function@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_max_packet_length@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_post_client_hello_function@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_private_extensions@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_random@@GNUTLS_3_4' => 1, - 'gnutls_handshake_set_timeout@@GNUTLS_3_4' => 1, - 'gnutls_hash@@GNUTLS_3_4' => 1, - 'gnutls_hash_deinit@@GNUTLS_3_4' => 1, - 'gnutls_hash_fast@@GNUTLS_3_4' => 1, - 'gnutls_hash_get_len@@GNUTLS_3_4' => 1, - 'gnutls_hash_init@@GNUTLS_3_4' => 1, - 'gnutls_hash_output@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_allowed@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_enable@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_get_timeout@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_ping@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_pong@@GNUTLS_3_4' => 1, - 'gnutls_heartbeat_set_timeouts@@GNUTLS_3_4' => 1, - 'gnutls_hex2bin@@GNUTLS_3_4' => 1, - 'gnutls_hex_decode2@@GNUTLS_3_4' => 1, - 'gnutls_hex_decode@@GNUTLS_3_4' => 1, - 'gnutls_hex_encode2@@GNUTLS_3_4' => 1, - 'gnutls_hex_encode@@GNUTLS_3_4' => 1, - 'gnutls_hmac@@GNUTLS_3_4' => 1, - 'gnutls_hmac_deinit@@GNUTLS_3_4' => 1, - 'gnutls_hmac_fast@@GNUTLS_3_4' => 1, - 'gnutls_hmac_get_len@@GNUTLS_3_4' => 1, - 'gnutls_hmac_init@@GNUTLS_3_4' => 1, - 'gnutls_hmac_output@@GNUTLS_3_4' => 1, - 'gnutls_hmac_set_nonce@@GNUTLS_3_4' => 1, - 'gnutls_init@@GNUTLS_3_4' => 1, - 'gnutls_key_generate@@GNUTLS_3_4' => 1, - 'gnutls_kx_get@@GNUTLS_3_4' => 1, - 'gnutls_kx_get_id@@GNUTLS_3_4' => 1, - 'gnutls_kx_get_name@@GNUTLS_3_4' => 1, - 'gnutls_kx_list@@GNUTLS_3_4' => 1, - 'gnutls_load_file@@GNUTLS_3_4' => 1, - 'gnutls_mac_get@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_id@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_key_size@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_name@@GNUTLS_3_4' => 1, - 'gnutls_mac_get_nonce_size@@GNUTLS_3_4' => 1, - 'gnutls_mac_list@@GNUTLS_3_4' => 1, - 'gnutls_malloc@@GNUTLS_3_4' => -8, - 'gnutls_memcmp@@GNUTLS_3_4' => 1, - 'gnutls_memset@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_add_cert@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_add_cert_id@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_deinit@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_export@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_cert_id@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_extension@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_get_version@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_import@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_init@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_print@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_randomize_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_set_extension@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_req_set_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_check_crt@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_deinit@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_export@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_certs@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_extension@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_nonce@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_produced@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_responder2@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_responder@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_responder_raw_id@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_response@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_signature@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_single@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_status@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_get_version@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_import@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_init@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_print@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_verify@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_resp_verify_direct@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_status_request_enable_client@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_status_request_get@@GNUTLS_3_4' => 1, - 'gnutls_ocsp_status_request_is_checked@@GNUTLS_3_4' => 1, - 'gnutls_oid_to_digest@@GNUTLS_3_4' => 1, - 'gnutls_oid_to_ecc_curve@@GNUTLS_3_4' => 1, - 'gnutls_oid_to_mac@@GNUTLS_3_4' => 1, - 'gnutls_oid_to_pk@@GNUTLS_3_4' => 1, - 'gnutls_oid_to_sign@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_check_email@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_check_hostname2@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_check_hostname@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_deinit@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_export2@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_export@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_auth_subkey@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_creation_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_name@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_pk_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_pk_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_count@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_creation_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_idx@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_pk_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_pk_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_subkey_usage@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_get_version@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_import@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_init@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_print@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_set_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_verify_ring@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_crt_verify_self@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_check_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_deinit@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_get_crt@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_get_crt_count@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_import@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_keyring_init@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export2@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_subkey_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_export_subkey_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_count@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_creation_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_idx@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_get_subkey_revoked_status@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_import@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_sec_param@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_set_preferred_key_id@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_privkey_sign_hash@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_send_cert@@GNUTLS_3_4' => 1, - 'gnutls_openpgp_set_recv_key_function@@GNUTLS_3_4' => 1, - 'gnutls_packet_deinit@@GNUTLS_3_4' => 1, - 'gnutls_packet_get@@GNUTLS_3_4' => 1, - 'gnutls_pcert_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pcert_export_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_pcert_export_x509@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_openpgp_raw@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_x509@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_x509_list@@GNUTLS_3_4' => 1, - 'gnutls_pcert_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_pcert_list_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_decode2@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_decode@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_encode2@@GNUTLS_3_4' => 1, - 'gnutls_pem_base64_encode@@GNUTLS_3_4' => 1, - 'gnutls_perror@@GNUTLS_3_4' => 1, - 'gnutls_pk_algorithm_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pk_bits_to_sec_param@@GNUTLS_3_4' => 1, - 'gnutls_pk_get_id@@GNUTLS_3_4' => 1, - 'gnutls_pk_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pk_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_pk_list@@GNUTLS_3_4' => 1, - 'gnutls_pk_to_sign@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_add_provider@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_attached_extension@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_secret_key@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_x509_crt2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_copy_x509_privkey2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_crt_is_known@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_delete_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_get_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_get_raw_issuer@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_get_raw_issuer_by_dn@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_get_raw_issuer_by_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export3@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_export_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_flags_get_str@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_exts@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_flags@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_get_type@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_import_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_list_import_url3@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_list_import_url4@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_set_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_obj_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_cpy@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_export_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_export_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_generate3@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_get_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_import_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_privkey_status@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_reinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_set_token_function@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_flags@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_mechanism@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_random@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_get_url@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_token_set_pin@@GNUTLS_3_4' => 1, - 'gnutls_pkcs11_type_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_decrypt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_enc_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_encrypt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_count@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_data@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_friendly_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_get_type@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_crl@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_crt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_data@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_friendly_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_bag_set_privkey@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_export2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_export@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_generate_mac2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_generate_mac@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_get_bag@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_import@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_mac_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_set_bag@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_simple_parse@@GNUTLS_3_4' => 1, - 'gnutls_pkcs12_verify_mac@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_add_attr@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_attrs_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_delete_crl@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_delete_crt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_export2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_export@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_attr@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crl_count@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crl_raw2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crl_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crt_count@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crt_raw2@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_crt_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_embedded_data@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_embedded_data_oid@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_signature_count@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_get_signature_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_import@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_init@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_print@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crl@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crl_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crt@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_set_crt_raw@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_sign@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_signature_info_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_verify@@GNUTLS_3_4' => 1, - 'gnutls_pkcs7_verify_direct@@GNUTLS_3_4' => 1, - 'gnutls_pkcs8_info@@GNUTLS_3_4' => 1, - 'gnutls_pkcs_schema_get_name@@GNUTLS_3_4' => 1, - 'gnutls_pkcs_schema_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_prf@@GNUTLS_3_4' => 1, - 'gnutls_prf_raw@@GNUTLS_3_4' => 1, - 'gnutls_prf_rfc5705@@GNUTLS_3_4' => 1, - 'gnutls_priority_certificate_type_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_cipher_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_compression_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_deinit@@GNUTLS_3_4' => 1, - 'gnutls_priority_ecc_curve_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_get_cipher_suite_index@@GNUTLS_3_4' => 1, - 'gnutls_priority_init@@GNUTLS_3_4' => 1, - 'gnutls_priority_kx_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_mac_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_protocol_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_set@@GNUTLS_3_4' => 1, - 'gnutls_priority_set_direct@@GNUTLS_3_4' => 1, - 'gnutls_priority_sign_list@@GNUTLS_3_4' => 1, - 'gnutls_priority_string_list@@GNUTLS_3_4' => 1, - 'gnutls_privkey_decrypt_data@@GNUTLS_3_4' => 1, - 'gnutls_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_export_x509@@GNUTLS_3_4' => 1, - 'gnutls_privkey_generate2@@GNUTLS_3_4' => 1, - 'gnutls_privkey_generate@@GNUTLS_3_4' => 1, - 'gnutls_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_privkey_get_seed@@GNUTLS_3_4' => 1, - 'gnutls_privkey_get_type@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ext2@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ext3@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_ext@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_openpgp_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_tpm_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_tpm_url@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_url@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_x509@@GNUTLS_3_4' => 1, - 'gnutls_privkey_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_privkey_set_flags@@GNUTLS_3_4' => 1, - 'gnutls_privkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_privkey_sign_data@@GNUTLS_3_4' => 1, - 'gnutls_privkey_sign_hash@@GNUTLS_3_4' => 1, - 'gnutls_privkey_status@@GNUTLS_3_4' => 1, - 'gnutls_privkey_verify_params@@GNUTLS_3_4' => 1, - 'gnutls_privkey_verify_seed@@GNUTLS_3_4' => 1, - 'gnutls_protocol_get_id@@GNUTLS_3_4' => 1, - 'gnutls_protocol_get_name@@GNUTLS_3_4' => 1, - 'gnutls_protocol_get_version@@GNUTLS_3_4' => 1, - 'gnutls_protocol_list@@GNUTLS_3_4' => 1, - 'gnutls_psk_allocate_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_allocate_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_client_get_hint@@GNUTLS_3_4' => 1, - 'gnutls_psk_free_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_free_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_server_get_username@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_client_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_params_function@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_credentials_file@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_credentials_hint@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_known_dh_params@@GNUTLS_3_4' => 1, - 'gnutls_psk_set_server_params_function@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_encrypt_data@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export2@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_ecc_x962@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_openpgp_key_id@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_get_preferred_hash_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_ecc_x962@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_openpgp@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_openpgp_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_privkey@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_tpm_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_tpm_url@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_url@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_x509@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_x509_crq@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_import_x509_raw@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_init@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_print@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_set_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_verify_data2@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_verify_hash2@@GNUTLS_3_4' => 1, - 'gnutls_pubkey_verify_params@@GNUTLS_3_4' => 1, - 'gnutls_random_art@@GNUTLS_3_4' => 1, - 'gnutls_range_split@@GNUTLS_3_4' => 1, - 'gnutls_realloc@@GNUTLS_3_4' => -8, - 'gnutls_record_can_use_length_hiding@@GNUTLS_3_4' => 1, - 'gnutls_record_check_corked@@GNUTLS_3_4' => 1, - 'gnutls_record_check_pending@@GNUTLS_3_4' => 1, - 'gnutls_record_cork@@GNUTLS_3_4' => 1, - 'gnutls_record_disable_padding@@GNUTLS_3_4' => 1, - 'gnutls_record_discard_queued@@GNUTLS_3_4' => 1, - 'gnutls_record_get_direction@@GNUTLS_3_4' => 1, - 'gnutls_record_get_discarded@@GNUTLS_3_4' => 1, - 'gnutls_record_get_max_size@@GNUTLS_3_4' => 1, - 'gnutls_record_get_state@@GNUTLS_3_4' => 1, - 'gnutls_record_overhead_size@@GNUTLS_3_4' => 1, - 'gnutls_record_recv@@GNUTLS_3_4' => 1, - 'gnutls_record_recv_packet@@GNUTLS_3_4' => 1, - 'gnutls_record_recv_seq@@GNUTLS_3_4' => 1, - 'gnutls_record_send@@GNUTLS_3_4' => 1, - 'gnutls_record_send_range@@GNUTLS_3_4' => 1, - 'gnutls_record_set_max_size@@GNUTLS_3_4' => 1, - 'gnutls_record_set_state@@GNUTLS_3_4' => 1, - 'gnutls_record_set_timeout@@GNUTLS_3_4' => 1, - 'gnutls_record_uncork@@GNUTLS_3_4' => 1, - 'gnutls_register_custom_url@@GNUTLS_3_4' => 1, - 'gnutls_rehandshake@@GNUTLS_3_4' => 1, - 'gnutls_rnd@@GNUTLS_3_4' => 1, - 'gnutls_rnd_refresh@@GNUTLS_3_4' => 1, - 'gnutls_safe_renegotiation_status@@GNUTLS_3_4' => 1, - 'gnutls_sec_param_get_name@@GNUTLS_3_4' => 1, - 'gnutls_sec_param_to_pk_bits@@GNUTLS_3_4' => 1, - 'gnutls_sec_param_to_symmetric_bits@@GNUTLS_3_4' => 1, - 'gnutls_secure_malloc@@GNUTLS_3_4' => -8, - 'gnutls_server_name_get@@GNUTLS_3_4' => 1, - 'gnutls_server_name_set@@GNUTLS_3_4' => 1, - 'gnutls_session_channel_binding@@GNUTLS_3_4' => 1, - 'gnutls_session_enable_compatibility_mode@@GNUTLS_3_4' => 1, - 'gnutls_session_etm_status@@GNUTLS_3_4' => 1, - 'gnutls_session_ext_master_secret_status@@GNUTLS_3_4' => 1, - 'gnutls_session_ext_register@@GNUTLS_3_4' => 1, - 'gnutls_session_force_valid@@GNUTLS_3_4' => 1, - 'gnutls_session_get_data2@@GNUTLS_3_4' => 1, - 'gnutls_session_get_data@@GNUTLS_3_4' => 1, - 'gnutls_session_get_desc@@GNUTLS_3_4' => 1, - 'gnutls_session_get_flags@@GNUTLS_3_4' => 1, - 'gnutls_session_get_id2@@GNUTLS_3_4' => 1, - 'gnutls_session_get_id@@GNUTLS_3_4' => 1, - 'gnutls_session_get_master_secret@@GNUTLS_3_4' => 1, - 'gnutls_session_get_ptr@@GNUTLS_3_4' => 1, - 'gnutls_session_get_random@@GNUTLS_3_4' => 1, - 'gnutls_session_get_verify_cert_status@@GNUTLS_3_4' => 1, - 'gnutls_session_is_resumed@@GNUTLS_3_4' => 1, - 'gnutls_session_resumption_requested@@GNUTLS_3_4' => 1, - 'gnutls_session_set_data@@GNUTLS_3_4' => 1, - 'gnutls_session_set_id@@GNUTLS_3_4' => 1, - 'gnutls_session_set_premaster@@GNUTLS_3_4' => 1, - 'gnutls_session_set_ptr@@GNUTLS_3_4' => 1, - 'gnutls_session_set_verify_cert2@@GNUTLS_3_4' => 1, - 'gnutls_session_set_verify_cert@@GNUTLS_3_4' => 1, - 'gnutls_session_set_verify_function@@GNUTLS_3_4' => 1, - 'gnutls_session_supplemental_register@@GNUTLS_3_4' => 1, - 'gnutls_session_ticket_enable_client@@GNUTLS_3_4' => 1, - 'gnutls_session_ticket_enable_server@@GNUTLS_3_4' => 1, - 'gnutls_session_ticket_key_generate@@GNUTLS_3_4' => 1, - 'gnutls_set_default_priority@@GNUTLS_3_4' => 1, - 'gnutls_sign_algorithm_get@@GNUTLS_3_4' => 1, - 'gnutls_sign_algorithm_get_client@@GNUTLS_3_4' => 1, - 'gnutls_sign_algorithm_get_requested@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_hash_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_id@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_name@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_sign_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_sign_is_secure@@GNUTLS_3_4' => 1, - 'gnutls_sign_list@@GNUTLS_3_4' => 1, - 'gnutls_srp_1024_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_1024_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_1536_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_1536_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_2048_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_2048_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_3072_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_3072_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_4096_group_generator@@GNUTLS_3_4' => -16, - 'gnutls_srp_4096_group_prime@@GNUTLS_3_4' => -16, - 'gnutls_srp_allocate_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_allocate_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_decode2@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_decode@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_encode2@@GNUTLS_3_4' => 1, - 'gnutls_srp_base64_encode@@GNUTLS_3_4' => 1, - 'gnutls_srp_free_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_free_server_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_server_get_username@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_client_credentials@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_client_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_prime_bits@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_server_credentials_file@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_server_credentials_function@@GNUTLS_3_4' => 1, - 'gnutls_srp_set_server_fake_salt_seed@@GNUTLS_3_4' => 1, - 'gnutls_srp_verifier@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_keys@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_mki@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_profile_id@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_profile_name@@GNUTLS_3_4' => 1, - 'gnutls_srtp_get_selected_profile@@GNUTLS_3_4' => 1, - 'gnutls_srtp_set_mki@@GNUTLS_3_4' => 1, - 'gnutls_srtp_set_profile@@GNUTLS_3_4' => 1, - 'gnutls_srtp_set_profile_direct@@GNUTLS_3_4' => 1, - 'gnutls_store_commitment@@GNUTLS_3_4' => 1, - 'gnutls_store_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_strdup@@GNUTLS_3_4' => -8, - 'gnutls_strerror@@GNUTLS_3_4' => 1, - 'gnutls_strerror_name@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_deinit@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_get@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_init@@GNUTLS_3_4' => 1, - 'gnutls_subject_alt_names_set@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_get_name@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_recv@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_register@@GNUTLS_3_4' => 1, - 'gnutls_supplemental_send@@GNUTLS_3_4' => 1, - 'gnutls_system_key_add_x509@@GNUTLS_3_4' => 1, - 'gnutls_system_key_delete@@GNUTLS_3_4' => 1, - 'gnutls_system_key_iter_deinit@@GNUTLS_3_4' => 1, - 'gnutls_system_key_iter_get_info@@GNUTLS_3_4' => 1, - 'gnutls_system_recv_timeout@@GNUTLS_3_4' => 1, - 'gnutls_tdb_deinit@@GNUTLS_3_4' => 1, - 'gnutls_tdb_init@@GNUTLS_3_4' => 1, - 'gnutls_tdb_set_store_commitment_func@@GNUTLS_3_4' => 1, - 'gnutls_tdb_set_store_func@@GNUTLS_3_4' => 1, - 'gnutls_tdb_set_verify_func@@GNUTLS_3_4' => 1, - 'gnutls_tpm_get_registered@@GNUTLS_3_4' => 1, - 'gnutls_tpm_key_list_deinit@@GNUTLS_3_4' => 1, - 'gnutls_tpm_key_list_get_url@@GNUTLS_3_4' => 1, - 'gnutls_tpm_privkey_delete@@GNUTLS_3_4' => 1, - 'gnutls_tpm_privkey_generate@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_int2@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_int@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_ptr2@@GNUTLS_3_4' => 1, - 'gnutls_transport_get_ptr@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_errno@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_errno_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_fastopen@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_int2@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_ptr2@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_ptr@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_pull_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_pull_timeout_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_push_function@@GNUTLS_3_4' => 1, - 'gnutls_transport_set_vec_push_function@@GNUTLS_3_4' => 1, - 'gnutls_url_is_supported@@GNUTLS_3_4' => 1, - 'gnutls_utf8_password_normalize@@GNUTLS_3_4' => 1, - 'gnutls_verify_stored_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_aia_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_get_cert_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_get_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_set_cert_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_aki_set_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_cidr_to_rfc5280@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_check_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_dist_points_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_authority_key_gn_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_crt_count@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_crt_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_data2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_extension_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_issuer_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_issuer_dn3@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_issuer_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_next_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_number@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_raw_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_signature@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_signature_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_this_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_get_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_iter_crt_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_iter_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_list_import2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_list_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_privkey_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_crt_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_next_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_number@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_this_update@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_set_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_sign2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crl_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_attribute_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_attribute_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_attribute_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_challenge_password@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn3@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_by_oid2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_data2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_extension_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_pk_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_signature_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_subject_alt_othername_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_tlsfeatures@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_get_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_privkey_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_attribute_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_challenge_password@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_extension_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_subject_alt_othername@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_tlsfeatures@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_set_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_sign2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crq_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_email@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_hostname2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_hostname@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_key_purpose@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_check_revocation@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_cpy_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_equals2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_equals@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_activation_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_authority_info_access@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_authority_key_gn_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_ca_status@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn3@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_by_oid2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_data2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_info@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_extension_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_fingerprint@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_alt_name2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_alt_othername_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn3@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_dn_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_issuer_unique_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_pk_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_policy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_preferred_hash_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_raw_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_raw_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_signature@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_signature_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_signature_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_alt_name2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_alt_othername_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_subject_unique_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_tlsfeatures@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_get_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_import_url@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_import2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_import_pkcs11@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_list_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_privkey_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_activation_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_authority_info_access@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_ca_status@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crl_dist_points2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crq@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crq_extension_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_crq_extensions@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_expiration_time@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_extension_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_alt_othername@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_dn_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_issuer_unique_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_key@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_key_purpose_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_policy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_proxy_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_pubkey@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_serial@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_alt_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_alt_othername@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_alternative_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_subject_unique_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_tlsfeatures@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_set_version@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_sign2@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_sign@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_verify@@GNUTLS_3_4' => 1, - 'gnutls_x509_crt_verify_data2@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_get_rdn_ava@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_get_str2@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_get_str@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_oid_known@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_oid_name@@GNUTLS_3_4' => 1, - 'gnutls_x509_dn_set_str@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_aia@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_key_purposes@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_policies@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_subject_alt_names@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_export_tlsfeatures@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_aia@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_authority_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_basic_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_crl_dist_points@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_key_purposes@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_key_usage@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_name_constraints@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_policies@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_private_key_usage_period@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_proxy@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_subject_alt_names@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_import_tlsfeatures@@GNUTLS_3_4' => 1, - 'gnutls_x509_ext_print@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_key_purpose_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_add_excluded@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_add_permitted@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_check@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_check_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_get_excluded@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_get_permitted@@GNUTLS_3_4' => 1, - 'gnutls_x509_name_constraints_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_othername_to_virtual@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_policies_set@@GNUTLS_3_4' => 1, - 'gnutls_x509_policy_release@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_cpy@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export2_pkcs8@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_pkcs8@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_rsa_raw2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_export_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_fix@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_generate2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_generate@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_get_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_get_pk_algorithm2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_get_pk_algorithm@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_get_seed@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_dsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_ecc_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_openssl@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_pkcs8@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_rsa_raw2@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_import_rsa_raw@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_sec_param@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_set_flags@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_set_pin_function@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_sign_data@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_sign_hash@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_verify_params@@GNUTLS_3_4' => 1, - 'gnutls_x509_privkey_verify_seed@@GNUTLS_3_4' => 1, - 'gnutls_x509_rdn_get2@@GNUTLS_3_4' => 1, - 'gnutls_x509_rdn_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_rdn_get_by_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_rdn_get_oid@@GNUTLS_3_4' => 1, - 'gnutls_x509_tlsfeatures_add@@GNUTLS_3_4' => 1, - 'gnutls_x509_tlsfeatures_check_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_tlsfeatures_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_tlsfeatures_get@@GNUTLS_3_4' => 1, - 'gnutls_x509_tlsfeatures_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_cas@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_crls@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_named_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_system_trust@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_trust_dir@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_trust_file@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_add_trust_mem@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_get_issuer@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_get_issuer_by_dn@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_get_issuer_by_subject_key_id@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_init@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_iter_deinit@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_iter_get_ca@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_remove_cas@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_remove_trust_file@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_remove_trust_mem@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_verify_crt2@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_verify_crt@@GNUTLS_3_4' => 1, - 'gnutls_x509_trust_list_verify_named_crt@@GNUTLS_3_4' => 1 - } - }, - 'Target' => 'unix', - 'TypeInfo' => { - '1' => { - 'Name' => 'void', - 'Type' => 'Intrinsic' - }, - '10015' => { - 'BaseType' => '5971', - 'Header' => 'hash_int.h', - 'Line' => '39', - 'Name' => 'hash_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '10026' => { - 'BaseType' => '5971', - 'Header' => 'hash_int.h', - 'Line' => '40', - 'Name' => 'nonce_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '10037' => { - 'BaseType' => '6305', - 'Header' => 'hash_int.h', - 'Line' => '41', - 'Name' => 'output_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '10048' => { - 'BaseType' => '4665', - 'Header' => 'hash_int.h', - 'Line' => '43', - 'Name' => 'hash_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1006' => { - 'BaseType' => '246', - 'Header' => 'unistd.h', - 'Line' => '277', - 'Name' => 'socklen_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1011939' => { - 'BaseType' => '158215', - 'Name' => 'gnutls_openpgp_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1013259' => { - 'BaseType' => '998534', - 'Name' => 'gnutls_keygen_data_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '10150' => { - 'BaseType' => '9771', - 'Name' => 'mac_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1015419' => { - 'BaseType' => '158282', - 'Name' => 'gnutls_pkcs11_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '10156' => { - 'Header' => 'hash_int.h', - 'Line' => '55', - 'Memb' => { - '0' => { - 'name' => 'e', - 'offset' => '0', - 'type' => '10150' - }, - '1' => { - 'name' => 'hash', - 'offset' => '8', - 'type' => '10015' - }, - '2' => { - 'name' => 'output', - 'offset' => '16', - 'type' => '10037' - }, - '3' => { - 'name' => 'deinit', - 'offset' => '24', - 'type' => '10048' - }, - '4' => { - 'name' => 'key', - 'offset' => '32', - 'type' => '334' - }, - '5' => { - 'name' => 'keysize', - 'offset' => '40', - 'type' => '75' - }, - '6' => { - 'name' => 'handle', - 'offset' => '48', - 'type' => '216' - } - }, - 'Name' => 'struct digest_hd_st', - 'PrivateABI' => 1, - 'Size' => '56', - 'Type' => 'Struct' - }, - '10258' => { - 'Header' => 'hash_int.h', - 'Line' => '67', - 'Memb' => { - '0' => { - 'name' => 'e', - 'offset' => '0', - 'type' => '10150' - }, - '1' => { - 'name' => 'mac_len', - 'offset' => '8', - 'type' => '75' - }, - '2' => { - 'name' => 'hash', - 'offset' => '16', - 'type' => '10015' - }, - '3' => { - 'name' => 'setnonce', - 'offset' => '24', - 'type' => '10026' - }, - '4' => { - 'name' => 'output', - 'offset' => '32', - 'type' => '10037' - }, - '5' => { - 'name' => 'deinit', - 'offset' => '40', - 'type' => '10048' - }, - '6' => { - 'name' => 'handle', - 'offset' => '48', - 'type' => '216' - } - }, - 'Name' => 'struct mac_hd_st', - 'PrivateABI' => 1, - 'Size' => '56', - 'Type' => 'Struct' - }, - '10291' => { - 'BaseType' => '6024', - 'Header' => 'cipher_int.h', - 'Line' => '33', - 'Name' => 'cipher_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '103' => { - 'Name' => 'unsigned short', - 'Size' => '2', - 'Type' => 'Intrinsic' - }, - '1030' => { - 'BaseType' => '240', - 'Name' => 'char**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '10302' => { - 'BaseType' => '6024', - 'Header' => 'cipher_int.h', - 'Line' => '35', - 'Name' => 'cipher_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '10313' => { - 'BaseType' => '6136', - 'Header' => 'cipher_int.h', - 'Line' => '37', - 'Name' => 'aead_cipher_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '10324' => { - 'BaseType' => '6136', - 'Header' => 'cipher_int.h', - 'Line' => '43', - 'Name' => 'aead_cipher_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '10335' => { - 'BaseType' => '4665', - 'Header' => 'cipher_int.h', - 'Line' => '49', - 'Name' => 'cipher_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '10346' => { - 'BaseType' => '5971', - 'Header' => 'cipher_int.h', - 'Line' => '51', - 'Name' => 'cipher_auth_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '10357' => { - 'BaseType' => '5971', - 'Header' => 'cipher_int.h', - 'Line' => '52', - 'Name' => 'cipher_setiv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '10368' => { - 'BaseType' => '6098', - 'Header' => 'cipher_int.h', - 'Line' => '54', - 'Name' => 'cipher_tag_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1036973' => { - 'BaseType' => '158148', - 'Name' => 'gnutls_openpgp_crt_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1046529' => { - 'BaseType' => '1046541', - 'Header' => 'gnutls.h', - 'Line' => '1572', - 'Name' => 'gnutls_x509_crq_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1046541' => { - 'BaseType' => '1046547', - 'Name' => 'struct gnutls_x509_crq_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1046547' => { - 'Header' => 'x509_int.h', - 'Line' => '96', - 'Memb' => { - '0' => { - 'name' => 'crq', - 'offset' => '0', - 'type' => '8286' - } - }, - 'Name' => 'struct gnutls_x509_crq_int', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '1048015' => { - 'BaseType' => '1048026', - 'Header' => 'pkcs11.h', - 'Line' => '63', - 'Name' => 'gnutls_pkcs11_obj_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1048026' => { - 'BaseType' => '1048032', - 'Name' => 'struct gnutls_pkcs11_obj_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1048032' => { - 'Header' => 'pkcs11_int.h', - 'Line' => '47', - 'Memb' => { - '0' => { - 'name' => 'raw', - 'offset' => '0', - 'type' => '3887' - }, - '1' => { - 'name' => 'type', - 'offset' => '16', - 'type' => '1048221' - }, - '2' => { - 'name' => 'class', - 'offset' => '24', - 'type' => '1057223' - }, - '3' => { - 'name' => 'flags', - 'offset' => '32', - 'type' => '145' - }, - '4' => { - 'name' => 'info', - 'offset' => '40', - 'type' => '1057251' - }, - '5' => { - 'name' => 'pubkey', - 'offset' => '48', - 'type' => '1057257' - }, - '6' => { - 'name' => 'pubkey_size', - 'offset' => '112', - 'type' => '145' - }, - '7' => { - 'name' => 'pk_algorithm', - 'offset' => '116', - 'type' => '2916' - }, - '8' => { - 'name' => 'key_usage', - 'offset' => '120', - 'type' => '145' - }, - '9' => { - 'name' => 'pin', - 'offset' => '128', - 'type' => '163164' - } - }, - 'Name' => 'struct gnutls_pkcs11_obj_st', - 'PrivateABI' => 1, - 'Size' => '144', - 'Type' => 'Struct' - }, - '1048221' => { - 'Header' => 'pkcs11.h', - 'Line' => '349', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_OBJ_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_OBJ_X509_CRT', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_OBJ_PUBKEY', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PKCS11_OBJ_PRIVKEY', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_PKCS11_OBJ_SECRET_KEY', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_PKCS11_OBJ_DATA', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_PKCS11_OBJ_X509_CRT_EXTENSION', - 'value' => '6' - } - }, - 'Name' => 'enum gnutls_pkcs11_obj_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '10506' => { - 'BaseType' => '9611', - 'Name' => 'cipher_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '10512' => { - 'Header' => 'cipher_int.h', - 'Line' => '67', - 'Memb' => { - '0' => { - 'name' => 'handle', - 'offset' => '0', - 'type' => '216' - }, - '1' => { - 'name' => 'e', - 'offset' => '8', - 'type' => '10506' - }, - '2' => { - 'name' => 'encrypt', - 'offset' => '16', - 'type' => '10291' - }, - '3' => { - 'name' => 'decrypt', - 'offset' => '24', - 'type' => '10302' - }, - '4' => { - 'name' => 'aead_encrypt', - 'offset' => '32', - 'type' => '10313' - }, - '5' => { - 'name' => 'aead_decrypt', - 'offset' => '40', - 'type' => '10324' - }, - '6' => { - 'name' => 'auth', - 'offset' => '48', - 'type' => '10346' - }, - '7' => { - 'name' => 'tag', - 'offset' => '56', - 'type' => '10368' - }, - '8' => { - 'name' => 'setiv', - 'offset' => '64', - 'type' => '10357' - }, - '9' => { - 'name' => 'deinit', - 'offset' => '72', - 'type' => '10335' - } - }, - 'Name' => 'struct cipher_hd_st', - 'PrivateABI' => 1, - 'Size' => '80', - 'Type' => 'Struct' - }, - '10523' => { - 'Header' => 'cipher_int.h', - 'Line' => '191', - 'Memb' => { - '0' => { - 'name' => 'dig', - 'offset' => '0', - 'type' => '10156' - }, - '1' => { - 'name' => 'mac', - 'offset' => '0', - 'type' => '10258' - } - }, - 'Name' => 'anon-union-cipher_int.h-191', - 'PrivateABI' => 1, - 'Size' => '56', - 'Type' => 'Union' - }, - '1057223' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '311', - 'Name' => 'ck_object_class_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1057246' => { - 'Name' => 'struct p11_kit_uri', - 'PrivateABI' => 1, - 'Type' => 'Struct' - }, - '1057251' => { - 'BaseType' => '1057246', - 'Name' => 'struct p11_kit_uri*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1057257' => { - 'BaseType' => '3887', - 'Name' => 'gnutls_datum_t[4]', - 'Size' => '64', - 'Type' => 'Array' - }, - '10659' => { - 'Header' => 'cipher_int.h', - 'Line' => '202', - 'Memb' => { - '0' => { - 'name' => 'cipher', - 'offset' => '0', - 'type' => '10512' - }, - '1' => { - 'name' => 'mac', - 'offset' => '80', - 'type' => '10523' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'is_mac', - 'offset' => '136', - 'type' => '145' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'ssl_hmac', - 'offset' => '136', - 'type' => '145' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'non_null', - 'offset' => '136', - 'type' => '145' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'etm', - 'offset' => '136', - 'type' => '145' - }, - '6' => { - 'name' => 'tag_size', - 'offset' => '144', - 'type' => '52' - } - }, - 'Name' => 'struct auth_cipher_hd_st', - 'PrivateABI' => 1, - 'Size' => '152', - 'Type' => 'Struct' - }, - '10670' => { - 'Header' => 'compress.h', - 'Line' => '38', - 'Memb' => { - '0' => { - 'name' => 'handle', - 'offset' => '0', - 'type' => '216' - }, - '1' => { - 'name' => 'algo', - 'offset' => '8', - 'type' => '2583' - } - }, - 'Name' => 'struct comp_hd_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '10707' => { - 'BaseType' => '10670', - 'Header' => 'compress.h', - 'Line' => '41', - 'Name' => 'comp_hd_st', - 'Size' => '16', - 'Type' => 'Typedef' - }, - '1072048' => { - 'BaseType' => '4454', - 'Name' => 'gnutls_pubkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1095473' => { - 'Header' => 'dtls.h', - 'Line' => '67', - 'Memb' => { - '0' => { - 'name' => 'record_seq', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'hsk_read_seq', - 'offset' => '4', - 'type' => '145' - }, - '2' => { - 'name' => 'hsk_write_seq', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_dtls_prestate_st', - 'Size' => '12', - 'Type' => 'Struct' - }, - '110' => { - 'BaseType' => '128', - 'Name' => 'char const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1103881' => { - 'BaseType' => '1095473', - 'Name' => 'gnutls_dtls_prestate_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '11053' => { - 'BaseType' => '962', - 'Name' => 'uint8_t[2]', - 'Size' => '2', - 'Type' => 'Array' - }, - '11069' => { - 'BaseType' => '962', - 'Name' => 'uint8_t[48]', - 'Size' => '48', - 'Type' => 'Array' - }, - '11085' => { - 'BaseType' => '962', - 'Name' => 'uint8_t[32]', - 'Size' => '32', - 'Type' => 'Array' - }, - '11101' => { - 'BaseType' => '9966', - 'Name' => 'version_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '11107' => { - 'Header' => 'gnutls_int.h', - 'Line' => '599', - 'Memb' => { - '0' => { - 'name' => 'entity', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'kx_algorithm', - 'offset' => '4', - 'type' => '2242' - }, - '10' => { - 'name' => 'server_random', - 'offset' => '104', - 'type' => '11085' - }, - '11' => { - 'name' => 'session_id', - 'offset' => '136', - 'type' => '11085' - }, - '12' => { - 'name' => 'session_id_size', - 'offset' => '168', - 'type' => '962' - }, - '13' => { - 'name' => 'timestamp', - 'offset' => '176', - 'type' => '268' - }, - '14' => { - 'name' => 'max_record_send_size', - 'offset' => '184', - 'type' => '973' - }, - '15' => { - 'name' => 'max_record_recv_size', - 'offset' => '186', - 'type' => '973' - }, - '16' => { - 'name' => 'cert_type', - 'offset' => '188', - 'type' => '2854' - }, - '17' => { - 'name' => 'ecc_curve', - 'offset' => '192', - 'type' => '3208' - }, - '18' => { - 'name' => 'server_sign_algo', - 'offset' => '196', - 'type' => '3140' - }, - '19' => { - 'name' => 'client_sign_algo', - 'offset' => '200', - 'type' => '3140' - }, - '2' => { - 'name' => 'epoch_read', - 'offset' => '8', - 'type' => '973' - }, - '20' => { - 'name' => 'ext_master_secret', - 'offset' => '204', - 'type' => '962' - }, - '21' => { - 'name' => 'etm', - 'offset' => '205', - 'type' => '962' - }, - '22' => { - 'name' => 'do_recv_supplemental', - 'offset' => '208', - 'type' => '75' - }, - '23' => { - 'name' => 'do_send_supplemental', - 'offset' => '212', - 'type' => '75' - }, - '24' => { - 'name' => 'pversion', - 'offset' => '216', - 'type' => '11101' - }, - '3' => { - 'name' => 'epoch_write', - 'offset' => '10', - 'type' => '973' - }, - '4' => { - 'name' => 'epoch_next', - 'offset' => '12', - 'type' => '973' - }, - '5' => { - 'name' => 'epoch_min', - 'offset' => '14', - 'type' => '973' - }, - '6' => { - 'name' => 'cipher_suite', - 'offset' => '16', - 'type' => '11053' - }, - '7' => { - 'name' => 'compression_method', - 'offset' => '20', - 'type' => '2583' - }, - '8' => { - 'name' => 'master_secret', - 'offset' => '24', - 'type' => '11069' - }, - '9' => { - 'name' => 'client_random', - 'offset' => '72', - 'type' => '11085' - } - }, - 'Name' => 'struct security_parameters_st', - 'PrivateABI' => 1, - 'Size' => '224', - 'Type' => 'Struct' - }, - '11157' => { - 'BaseType' => '145', - 'Name' => 'unsigned int[64]', - 'Size' => '256', - 'Type' => 'Array' - }, - '11173' => { - 'Header' => 'gnutls_int.h', - 'Line' => '647', - 'Memb' => { - '0' => { - 'name' => 'priority', - 'offset' => '0', - 'type' => '11157' - }, - '1' => { - 'name' => 'algorithms', - 'offset' => '256', - 'type' => '145' - } - }, - 'Name' => 'struct priority_st', - 'PrivateABI' => 1, - 'Size' => '260', - 'Type' => 'Struct' - }, - '11223' => { - 'Header' => 'gnutls_int.h', - 'Line' => '654', - 'Memb' => { - '0' => { - 'name' => 'SR_DISABLED', - 'value' => '0' - }, - '1' => { - 'name' => 'SR_UNSAFE', - 'value' => '1' - }, - '2' => { - 'name' => 'SR_PARTIAL', - 'value' => '2' - }, - '3' => { - 'name' => 'SR_SAFE', - 'value' => '3' - } - }, - 'Name' => 'enum safe_renegotiation_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '11235' => { - 'BaseType' => '6954', - 'Name' => 'bigint_t[2]', - 'Size' => '16', - 'Type' => 'Array' - }, - '11287' => { - 'Header' => 'gnutls_int.h', - 'Line' => '722', - 'Memb' => { - '0' => { - 'name' => 'dh_params', - 'offset' => '0', - 'type' => '3411' - }, - '1' => { - 'name' => 'free_dh_params', - 'offset' => '8', - 'type' => '75' - } - }, - 'Name' => 'struct internal_params_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '11478' => { - 'Header' => 'gnutls_int.h', - 'Line' => '759', - 'Memb' => { - '0' => { - 'name' => 'cookie', - 'offset' => '0', - 'type' => '11085' - }, - '1' => { - 'name' => 'cookie_len', - 'offset' => '32', - 'type' => '962' - }, - '10' => { - 'name' => 'async_term', - 'offset' => '56', - 'type' => '268' - }, - '11' => { - 'name' => 'last_retransmit', - 'offset' => '64', - 'type' => '290' - }, - '12' => { - 'name' => 'packets_dropped', - 'offset' => '80', - 'type' => '145' - }, - '2' => { - 'name' => 'hsk_write_seq', - 'offset' => '34', - 'type' => '973' - }, - '3' => { - 'name' => 'hsk_read_seq', - 'offset' => '36', - 'type' => '145' - }, - '4' => { - 'name' => 'mtu', - 'offset' => '40', - 'type' => '973' - }, - '5' => { - 'name' => 'flight_init', - 'offset' => '42', - 'type' => '9592' - }, - '6' => { - 'name' => 'last_flight', - 'offset' => '43', - 'type' => '9592' - }, - '7' => { - 'name' => 'retrans_timeout_ms', - 'offset' => '44', - 'type' => '145' - }, - '8' => { - 'name' => 'hsk_hello_verify_requests', - 'offset' => '48', - 'type' => '145' - }, - '9' => { - 'name' => 'actual_retrans_timeout_ms', - 'offset' => '52', - 'type' => '145' - } - }, - 'Name' => 'struct dtls_st', - 'PrivateABI' => 1, - 'Size' => '88', - 'Type' => 'Struct' - }, - '11490' => { - 'Header' => 'gnutls_int.h', - 'Line' => '761', - 'Memb' => { - '0' => { - 'name' => 'fd', - 'offset' => '0', - 'type' => '75' - }, - '1' => { - 'name' => 'flags', - 'offset' => '4', - 'type' => '75' - }, - '2' => { - 'name' => 'connect_only', - 'offset' => '8', - 'type' => '9592' - }, - '3' => { - 'name' => 'connect_addr', - 'offset' => '16', - 'type' => '1261' - }, - '4' => { - 'name' => 'connect_addrlen', - 'offset' => '144', - 'type' => '1006' - } - }, - 'Name' => 'struct tfo_st', - 'PrivateABI' => 1, - 'Size' => '152', - 'Type' => 'Struct' - }, - '1152108' => { - 'BaseType' => '1152120', - 'Header' => 'gnutls.h', - 'Line' => '2382', - 'Name' => 'gnutls_tdb_store_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1152120' => { - 'Name' => 'int(*)(char const*, char const*, char const*, time_t, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '110' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '110' - }, - '3' => { - 'type' => '268' - }, - '4' => { - 'type' => '4430' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1152161' => { - 'BaseType' => '1152173', - 'Header' => 'gnutls.h', - 'Line' => '2388', - 'Name' => 'gnutls_tdb_store_commitment_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1152173' => { - 'Name' => 'int(*)(char const*, char const*, char const*, time_t, gnutls_digest_algorithm_t, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '110' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '110' - }, - '3' => { - 'type' => '268' - }, - '4' => { - 'type' => '2533' - }, - '5' => { - 'type' => '4430' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1152219' => { - 'BaseType' => '1152231', - 'Header' => 'gnutls.h', - 'Line' => '2399', - 'Name' => 'gnutls_tdb_verify_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1152231' => { - 'Name' => 'int(*)(char const*, char const*, char const*, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '110' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '110' - }, - '3' => { - 'type' => '4430' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1152267' => { - 'BaseType' => '1152279', - 'Header' => 'gnutls.h', - 'Line' => '2406', - 'Name' => 'gnutls_tdb_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1152279' => { - 'BaseType' => '1152285', - 'Name' => 'struct gnutls_tdb_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1152285' => { - 'Line' => '38', - 'Memb' => { - '0' => { - 'name' => 'store', - 'offset' => '0', - 'type' => '1152108' - }, - '1' => { - 'name' => 'cstore', - 'offset' => '8', - 'type' => '1152161' - }, - '2' => { - 'name' => 'verify', - 'offset' => '16', - 'type' => '1152219' - } - }, - 'Name' => 'struct gnutls_tdb_int', - 'PrivateABI' => 1, - 'Size' => '24', - 'Source' => 'verify-tofu.c', - 'Type' => 'Struct' - }, - '11568' => { - 'BaseType' => '11490', - 'Header' => 'gnutls_int.h', - 'Line' => '767', - 'Name' => 'tfo_st', - 'Size' => '152', - 'Type' => 'Typedef' - }, - '11580' => { - 'Header' => 'gnutls_int.h', - 'Line' => '968', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '973' - }, - '1' => { - 'name' => 'priv', - 'offset' => '8', - 'type' => '5453' - }, - '2' => { - 'name' => 'set', - 'offset' => '16', - 'type' => '9592' - } - }, - 'Name' => 'anon-struct-gnutls_int.h-968', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '116' => { - 'BaseType' => '110', - 'Name' => 'char const*const', - 'Size' => '8', - 'Type' => 'Const' - }, - '1161543' => { - 'BaseType' => '1152267', - 'Name' => 'gnutls_tdb_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '11629' => { - 'Header' => 'gnutls_int.h', - 'Line' => '974', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '973' - }, - '1' => { - 'name' => 'priv', - 'offset' => '8', - 'type' => '5453' - }, - '2' => { - 'name' => 'set', - 'offset' => '16', - 'type' => '9592' - } - }, - 'Name' => 'anon-struct-gnutls_int.h-974', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '1186648' => { - 'BaseType' => '169', - 'Header' => 'types.h', - 'Line' => '194', - 'Name' => 'int8_t', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '1191078' => { - 'BaseType' => '1191089', - 'Header' => 'tpm.h', - 'Line' => '36', - 'Name' => 'gnutls_tpm_key_list_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1191089' => { - 'BaseType' => '1191095', - 'Name' => 'struct tpm_key_list_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1191095' => { - 'Line' => '186', - 'Memb' => { - '0' => { - 'name' => 'size', - 'offset' => '0', - 'type' => '1201507' - }, - '1' => { - 'name' => 'ki', - 'offset' => '8', - 'type' => '1203117' - }, - '2' => { - 'name' => 'tpm_ctx', - 'offset' => '16', - 'type' => '1201568' - } - }, - 'Name' => 'struct tpm_key_list_st', - 'PrivateABI' => 1, - 'Size' => '24', - 'Source' => 'tpm.c', - 'Type' => 'Struct' - }, - '1191174' => { - 'Header' => 'tpm.h', - 'Line' => '54', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_TPMKEY_FMT_RAW', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_TPMKEY_FMT_DER', - 'value' => '0' - }, - '2' => { - 'name' => 'GNUTLS_TPMKEY_FMT_CTK_PEM', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_tpmkey_fmt_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1192' => { - 'BaseType' => '103', - 'Header' => 'sockaddr.h', - 'Line' => '28', - 'Name' => 'sa_family_t', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '1201474' => { - 'BaseType' => '962', - 'Header' => 'platform.h', - 'Line' => '17', - 'Name' => 'BYTE', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '1201485' => { - 'BaseType' => '1186648', - 'Header' => 'platform.h', - 'Line' => '18', - 'Name' => 'TSS_BOOL', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '1201496' => { - 'BaseType' => '973', - 'Header' => 'platform.h', - 'Line' => '19', - 'Name' => 'UINT16', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '1201507' => { - 'BaseType' => '984', - 'Header' => 'platform.h', - 'Line' => '20', - 'Name' => 'UINT32', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1201529' => { - 'BaseType' => '1201474', - 'Name' => 'BYTE*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1201535' => { - 'BaseType' => '1201507', - 'Header' => 'tss_typedef.h', - 'Line' => '17', - 'Name' => 'TSS_FLAG', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1201557' => { - 'BaseType' => '1201507', - 'Header' => 'tss_typedef.h', - 'Line' => '20', - 'Name' => 'TSS_HOBJECT', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1201568' => { - 'BaseType' => '1201557', - 'Header' => 'tss_typedef.h', - 'Line' => '21', - 'Name' => 'TSS_HCONTEXT', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1201634' => { - 'Header' => 'tss_structs.h', - 'Line' => '14', - 'Memb' => { - '0' => { - 'name' => 'bMajor', - 'offset' => '0', - 'type' => '1201474' - }, - '1' => { - 'name' => 'bMinor', - 'offset' => '1', - 'type' => '1201474' - }, - '2' => { - 'name' => 'bRevMajor', - 'offset' => '2', - 'type' => '1201474' - }, - '3' => { - 'name' => 'bRevMinor', - 'offset' => '3', - 'type' => '1201474' - } - }, - 'Name' => 'struct tdTSS_VERSION', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Struct' - }, - '1201695' => { - 'BaseType' => '1201634', - 'Header' => 'tss_structs.h', - 'Line' => '20', - 'Name' => 'TSS_VERSION', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1201706' => { - 'Header' => 'tss_structs.h', - 'Line' => '62', - 'Memb' => { - '0' => { - 'name' => 'ulTimeLow', - 'offset' => '0', - 'type' => '1201507' - }, - '1' => { - 'name' => 'usTimeMid', - 'offset' => '4', - 'type' => '1201496' - }, - '2' => { - 'name' => 'usTimeHigh', - 'offset' => '6', - 'type' => '1201496' - }, - '3' => { - 'name' => 'bClockSeqHigh', - 'offset' => '8', - 'type' => '1201474' - }, - '4' => { - 'name' => 'bClockSeqLow', - 'offset' => '9', - 'type' => '1201474' - }, - '5' => { - 'name' => 'rgbNode', - 'offset' => '10', - 'type' => '1201791' - } - }, - 'Name' => 'struct tdTSS_UUID', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '1201791' => { - 'BaseType' => '1201474', - 'Name' => 'BYTE[6]', - 'Size' => '6', - 'Type' => 'Array' - }, - '1201807' => { - 'BaseType' => '1201706', - 'Header' => 'tss_structs.h', - 'Line' => '70', - 'Name' => 'TSS_UUID', - 'Size' => '16', - 'Type' => 'Typedef' - }, - '1201823' => { - 'Header' => 'tss_structs.h', - 'Line' => '87', - 'Memb' => { - '0' => { - 'name' => 'versionInfo', - 'offset' => '0', - 'type' => '1201695' - }, - '1' => { - 'name' => 'keyUUID', - 'offset' => '4', - 'type' => '1201807' - }, - '2' => { - 'name' => 'parentKeyUUID', - 'offset' => '20', - 'type' => '1201807' - }, - '3' => { - 'name' => 'bAuthDataUsage', - 'offset' => '36', - 'type' => '1201474' - }, - '4' => { - 'name' => 'persistentStorageType', - 'offset' => '40', - 'type' => '1201535' - }, - '5' => { - 'name' => 'persistentStorageTypeParent', - 'offset' => '44', - 'type' => '1201535' - }, - '6' => { - 'name' => 'fIsLoaded', - 'offset' => '48', - 'type' => '1201485' - }, - '7' => { - 'name' => 'ulVendorDataLength', - 'offset' => '52', - 'type' => '1201507' - }, - '8' => { - 'name' => 'rgbVendorData', - 'offset' => '56', - 'type' => '1201529' - } - }, - 'Name' => 'struct tdTSS_KM_KEYINFO2', - 'PrivateABI' => 1, - 'Size' => '64', - 'Type' => 'Struct' - }, - '1201944' => { - 'BaseType' => '1201823', - 'Header' => 'tss_structs.h', - 'Line' => '101', - 'Name' => 'TSS_KM_KEYINFO2', - 'Size' => '64', - 'Type' => 'Typedef' - }, - '1203' => { - 'Header' => 'socket.h', - 'Line' => '170', - 'Memb' => { - '0' => { - 'name' => 'sa_family', - 'offset' => '0', - 'type' => '1192' - }, - '1' => { - 'name' => 'sa_data', - 'offset' => '2', - 'type' => '1245' - } - }, - 'Name' => 'struct sockaddr', - 'Size' => '16', - 'Type' => 'Struct' - }, - '1203117' => { - 'BaseType' => '1201944', - 'Name' => 'TSS_KM_KEYINFO2*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1205247' => { - 'BaseType' => '1191078', - 'Name' => 'gnutls_tpm_key_list_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '121' => { - 'Name' => 'char', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '1245' => { - 'BaseType' => '121', - 'Name' => 'char[14]', - 'Size' => '14', - 'Type' => 'Array' - }, - '1261' => { - 'Header' => 'socket.h', - 'Line' => '183', - 'Memb' => { - '0' => { - 'name' => 'ss_family', - 'offset' => '0', - 'type' => '1192' - }, - '1' => { - 'name' => '__ss_padding', - 'offset' => '2', - 'type' => '1310' - }, - '2' => { - 'name' => '__ss_align', - 'offset' => '120', - 'type' => '68' - } - }, - 'Name' => 'struct sockaddr_storage', - 'Size' => '128', - 'Type' => 'Struct' - }, - '128' => { - 'BaseType' => '121', - 'Name' => 'char const', - 'Size' => '1', - 'Type' => 'Const' - }, - '1283908' => { - 'Header' => 'gnutls.h', - 'Line' => '1965', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_RANDOM_ART_OPENSSH', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_random_art', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1283932' => { - 'BaseType' => '1283908', - 'Header' => 'gnutls.h', - 'Line' => '1967', - 'Name' => 'gnutls_random_art_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1306913' => { - 'BaseType' => '904559', - 'Name' => 'gnutls_custom_url_st const', - 'Size' => '64', - 'Type' => 'Const' - }, - '1307508' => { - 'BaseType' => '1306913', - 'Name' => 'gnutls_custom_url_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1310' => { - 'BaseType' => '121', - 'Name' => 'char[118]', - 'Size' => '118', - 'Type' => 'Array' - }, - '13240' => { - 'BaseType' => '8654', - 'Name' => 'handshake_buffer_st[6]', - 'Size' => '432', - 'Type' => 'Array' - }, - '13256' => { - 'Header' => 'auth.h', - 'Line' => '28', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'gnutls_generate_server_certificate', - 'offset' => '8', - 'type' => '13605' - }, - '10' => { - 'name' => 'gnutls_process_client_kx', - 'offset' => '80', - 'type' => '13636' - }, - '11' => { - 'name' => 'gnutls_process_client_crt_vrfy', - 'offset' => '88', - 'type' => '13636' - }, - '12' => { - 'name' => 'gnutls_process_server_crt_request', - 'offset' => '96', - 'type' => '13636' - }, - '2' => { - 'name' => 'gnutls_generate_client_certificate', - 'offset' => '16', - 'type' => '13605' - }, - '3' => { - 'name' => 'gnutls_generate_server_kx', - 'offset' => '24', - 'type' => '13605' - }, - '4' => { - 'name' => 'gnutls_generate_client_kx', - 'offset' => '32', - 'type' => '13605' - }, - '5' => { - 'name' => 'gnutls_generate_client_crt_vrfy', - 'offset' => '40', - 'type' => '13605' - }, - '6' => { - 'name' => 'gnutls_generate_server_crt_request', - 'offset' => '48', - 'type' => '13605' - }, - '7' => { - 'name' => 'gnutls_process_server_certificate', - 'offset' => '56', - 'type' => '13636' - }, - '8' => { - 'name' => 'gnutls_process_client_certificate', - 'offset' => '64', - 'type' => '13636' - }, - '9' => { - 'name' => 'gnutls_process_server_kx', - 'offset' => '72', - 'type' => '13636' - } - }, - 'Name' => 'struct mod_auth_st_int', - 'PrivateABI' => 1, - 'Size' => '104', - 'Type' => 'Struct' - }, - '1326' => { - 'BaseType' => '1203', - 'Name' => 'struct sockaddr*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '13425' => { - 'BaseType' => '13256', - 'Name' => 'struct mod_auth_st_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '13431' => { - 'BaseType' => '973', - 'Name' => 'uint16_t[32]', - 'Size' => '64', - 'Type' => 'Array' - }, - '13447' => { - 'BaseType' => '11580', - 'Name' => 'anon-struct-gnutls_int.h-968[32]', - 'Size' => '768', - 'Type' => 'Array' - }, - '13463' => { - 'BaseType' => '11629', - 'Name' => 'anon-struct-gnutls_int.h-974[32]', - 'Size' => '768', - 'Type' => 'Array' - }, - '13479' => { - 'BaseType' => '157', - 'Name' => 'unsigned char[36]', - 'Size' => '36', - 'Type' => 'Array' - }, - '13495' => { - 'BaseType' => '4120', - 'Name' => 'gnutls_certificate_verify_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '13501' => { - 'BaseType' => '4246', - 'Name' => 'gnutls_typed_vdata_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '13507' => { - 'BaseType' => '121', - 'Name' => 'char[129]', - 'Size' => '129', - 'Type' => 'Array' - }, - '13523' => { - 'Line' => '52', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '240' - }, - '1' => { - 'name' => 'type', - 'offset' => '8', - 'type' => '941681' - }, - '2' => { - 'name' => 'supp_recv_func', - 'offset' => '16', - 'type' => '943119' - }, - '3' => { - 'name' => 'supp_send_func', - 'offset' => '24', - 'type' => '943131' - } - }, - 'Name' => 'struct gnutls_supplemental_entry_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Source' => 'supplemental.c', - 'Type' => 'Struct' - }, - '13534' => { - 'Header' => 'extensions.h', - 'Line' => '63', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'free_struct', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'type', - 'offset' => '12', - 'type' => '973' - }, - '3' => { - 'name' => 'parse_type', - 'offset' => '16', - 'type' => '22733' - }, - '4' => { - 'name' => 'recv_func', - 'offset' => '24', - 'type' => '22491' - }, - '5' => { - 'name' => 'send_func', - 'offset' => '32', - 'type' => '22540' - }, - '6' => { - 'name' => 'deinit_func', - 'offset' => '40', - 'type' => '22578' - }, - '7' => { - 'name' => 'pack_func', - 'offset' => '48', - 'type' => '22607' - }, - '8' => { - 'name' => 'unpack_func', - 'offset' => '56', - 'type' => '22645' - } - }, - 'Name' => 'struct extension_entry_st', - 'PrivateABI' => 1, - 'Size' => '64', - 'Type' => 'Struct' - }, - '13545' => { - 'Header' => 'gnutls_int.h', - 'Line' => '1062', - 'Memb' => { - '0' => { - 'name' => 'record_buffer', - 'offset' => '0', - 'type' => '8750' - }, - '1' => { - 'name' => 'handshake_hash_buffer_prev_len', - 'offset' => '32', - 'type' => '75' - }, - '10' => { - 'name' => 'may_not_read', - 'offset' => '89', - 'type' => '9592' - }, - '100' => { - 'name' => 'vc_status', - 'offset' => '5260', - 'type' => '145' - }, - '101' => { - 'name' => 'additional_verify_flags', - 'offset' => '5264', - 'type' => '145' - }, - '102' => { - 'name' => 'cert_hash', - 'offset' => '5268', - 'type' => '11085' - }, - '103' => { - 'name' => 'cert_hash_set', - 'offset' => '5300', - 'type' => '9592' - }, - '104' => { - 'name' => 'saved_username', - 'offset' => '5301', - 'type' => '13507' - }, - '105' => { - 'name' => 'saved_username_set', - 'offset' => '5430', - 'type' => '9592' - }, - '106' => { - 'name' => 'false_start_used', - 'offset' => '5431', - 'type' => '9592' - }, - '107' => { - 'name' => 'tfo', - 'offset' => '5432', - 'type' => '11568' - }, - '108' => { - 'name' => 'rsup', - 'offset' => '5584', - 'type' => '951476' - }, - '109' => { - 'name' => 'rsup_size', - 'offset' => '5592', - 'type' => '145' - }, - '11' => { - 'name' => 'may_not_write', - 'offset' => '90', - 'type' => '9592' - }, - '110' => { - 'name' => 'rexts', - 'offset' => '5600', - 'type' => '418654' - }, - '111' => { - 'name' => 'rexts_size', - 'offset' => '5608', - 'type' => '145' - }, - '12' => { - 'name' => 'read_eof', - 'offset' => '91', - 'type' => '9592' - }, - '13' => { - 'name' => 'last_alert', - 'offset' => '92', - 'type' => '75' - }, - '14' => { - 'name' => 'last_handshake_in', - 'offset' => '96', - 'type' => '75' - }, - '15' => { - 'name' => 'last_handshake_out', - 'offset' => '100', - 'type' => '75' - }, - '16' => { - 'name' => 'priorities', - 'offset' => '104', - 'type' => '3469' - }, - '17' => { - 'name' => 'resumed', - 'offset' => '2224', - 'type' => '9592' - }, - '18' => { - 'name' => 'resumption_requested', - 'offset' => '2225', - 'type' => '9592' - }, - '19' => { - 'name' => 'resumed_security_parameters', - 'offset' => '2232', - 'type' => '11107' - }, - '2' => { - 'name' => 'handshake_hash_buffer_client_kx_len', - 'offset' => '36', - 'type' => '145' - }, - '20' => { - 'name' => 'resumption_data', - 'offset' => '2456', - 'type' => '3887' - }, - '21' => { - 'name' => 'handshake_send_buffer', - 'offset' => '2472', - 'type' => '8750' - }, - '22' => { - 'name' => 'handshake_recv_buffer', - 'offset' => '2504', - 'type' => '13240' - }, - '23' => { - 'name' => 'handshake_recv_buffer_size', - 'offset' => '2936', - 'type' => '75' - }, - '24' => { - 'name' => 'record_recv_buffer', - 'offset' => '2944', - 'type' => '8750' - }, - '25' => { - 'name' => 'record_send_buffer', - 'offset' => '2976', - 'type' => '8750' - }, - '26' => { - 'name' => 'record_send_buffer_user_size', - 'offset' => '3008', - 'type' => '52' - }, - '27' => { - 'name' => 'record_flush_mode', - 'offset' => '3016', - 'type' => '5907' - }, - '28' => { - 'name' => 'record_presend_buffer', - 'offset' => '3024', - 'type' => '8364' - }, - '29' => { - 'name' => 'expire_time', - 'offset' => '3056', - 'type' => '268' - }, - '3' => { - 'name' => 'handshake_hash_buffer', - 'offset' => '40', - 'type' => '8364' - }, - '30' => { - 'name' => 'auth_struct', - 'offset' => '3064', - 'type' => '13425' - }, - '31' => { - 'name' => 'adv_version_major', - 'offset' => '3072', - 'type' => '962' - }, - '32' => { - 'name' => 'adv_version_minor', - 'offset' => '3073', - 'type' => '962' - }, - '33' => { - 'name' => 'send_cert_req', - 'offset' => '3076', - 'type' => '145' - }, - '34' => { - 'name' => 'max_handshake_data_buffer_size', - 'offset' => '3080', - 'type' => '52' - }, - '35' => { - 'name' => 'pull_timeout_func', - 'offset' => '3088', - 'type' => '5008' - }, - '36' => { - 'name' => 'pull_func', - 'offset' => '3096', - 'type' => '4922' - }, - '37' => { - 'name' => 'push_func', - 'offset' => '3104', - 'type' => '4965' - }, - '38' => { - 'name' => 'vec_push_func', - 'offset' => '3112', - 'type' => '5046' - }, - '39' => { - 'name' => 'errno_func', - 'offset' => '3120', - 'type' => '5095' - }, - '4' => { - 'name' => 'resumable', - 'offset' => '72', - 'type' => '9592' - }, - '40' => { - 'name' => 'transport_recv_ptr', - 'offset' => '3128', - 'type' => '3312' - }, - '41' => { - 'name' => 'transport_send_ptr', - 'offset' => '3136', - 'type' => '3312' - }, - '42' => { - 'name' => 'db_store_func', - 'offset' => '3144', - 'type' => '4258' - }, - '43' => { - 'name' => 'db_retrieve_func', - 'offset' => '3152', - 'type' => '4339' - }, - '44' => { - 'name' => 'db_remove_func', - 'offset' => '3160', - 'type' => '4301' - }, - '45' => { - 'name' => 'db_ptr', - 'offset' => '3168', - 'type' => '216' - }, - '46' => { - 'name' => 'user_hello_func', - 'offset' => '3176', - 'type' => '4436' - }, - '47' => { - 'name' => 'h_hook', - 'offset' => '3184', - 'type' => '4377' - }, - '48' => { - 'name' => 'h_type', - 'offset' => '3192', - 'type' => '145' - }, - '49' => { - 'name' => 'h_post', - 'offset' => '3196', - 'type' => '279' - }, - '5' => { - 'name' => 'ticket_sent', - 'offset' => '73', - 'type' => '9592' - }, - '50' => { - 'name' => 'selected_cert_list', - 'offset' => '3200', - 'type' => '5584' - }, - '51' => { - 'name' => 'selected_cert_list_length', - 'offset' => '3208', - 'type' => '279' - }, - '52' => { - 'name' => 'selected_key', - 'offset' => '3216', - 'type' => '4477' - }, - '53' => { - 'name' => 'selected_need_free', - 'offset' => '3224', - 'type' => '9592' - }, - '54' => { - 'name' => 'selected_ocsp_func', - 'offset' => '3232', - 'type' => '4488' - }, - '55' => { - 'name' => 'selected_ocsp_func_ptr', - 'offset' => '3240', - 'type' => '216' - }, - '56' => { - 'name' => 'extensions_sent', - 'offset' => '3248', - 'type' => '13431' - }, - '57' => { - 'name' => 'extensions_sent_size', - 'offset' => '3312', - 'type' => '973' - }, - '58' => { - 'name' => 'pgp_fingerprint', - 'offset' => '3314', - 'type' => '9592' - }, - '59' => { - 'name' => 'default_record_version', - 'offset' => '3315', - 'type' => '11053' - }, - '6' => { - 'name' => 'bye_state', - 'offset' => '76', - 'type' => '8161' - }, - '60' => { - 'name' => 'default_hello_version', - 'offset' => '3317', - 'type' => '11053' - }, - '61' => { - 'name' => 'user_ptr', - 'offset' => '3320', - 'type' => '216' - }, - '62' => { - 'name' => 'enable_private', - 'offset' => '3328', - 'type' => '9592' - }, - '63' => { - 'name' => 'direction', - 'offset' => '3329', - 'type' => '9592' - }, - '64' => { - 'name' => 'openpgp_recv_key_func', - 'offset' => '3336', - 'type' => '5471' - }, - '65' => { - 'name' => 'ignore_rdn_sequence', - 'offset' => '3344', - 'type' => '9592' - }, - '66' => { - 'name' => 'rsa_pms_version', - 'offset' => '3345', - 'type' => '11053' - }, - '67' => { - 'name' => 'params', - 'offset' => '3352', - 'type' => '11287' - }, - '68' => { - 'name' => 'errnum', - 'offset' => '3368', - 'type' => '75' - }, - '69' => { - 'name' => 'srp_prime_bits', - 'offset' => '3372', - 'type' => '973' - }, - '7' => { - 'name' => 'handshake_final_state', - 'offset' => '80', - 'type' => '8115' - }, - '70' => { - 'name' => 'initial_negotiation_completed', - 'offset' => '3374', - 'type' => '9592' - }, - '71' => { - 'name' => 'extension_int_data', - 'offset' => '3376', - 'type' => '13447' - }, - '72' => { - 'name' => 'resumed_extension_int_data', - 'offset' => '4144', - 'type' => '13463' - }, - '73' => { - 'name' => 'transport', - 'offset' => '4912', - 'type' => '5867' - }, - '74' => { - 'name' => 'dtls', - 'offset' => '4920', - 'type' => '11478' - }, - '75' => { - 'name' => 'handshake_suspicious_loops', - 'offset' => '5008', - 'type' => '145' - }, - '76' => { - 'name' => 'handshake_in_progress', - 'offset' => '5012', - 'type' => '9592' - }, - '77' => { - 'name' => 'premaster_set', - 'offset' => '5013', - 'type' => '9592' - }, - '78' => { - 'name' => 'cb_tls_unique_len', - 'offset' => '5016', - 'type' => '145' - }, - '79' => { - 'name' => 'cb_tls_unique', - 'offset' => '5020', - 'type' => '13479' - }, - '8' => { - 'name' => 'handshake_state', - 'offset' => '84', - 'type' => '8115' - }, - '80' => { - 'name' => 'handshake_start_time', - 'offset' => '5056', - 'type' => '290' - }, - '81' => { - 'name' => 'handshake_endtime', - 'offset' => '5072', - 'type' => '268' - }, - '82' => { - 'name' => 'handshake_timeout_ms', - 'offset' => '5080', - 'type' => '145' - }, - '83' => { - 'name' => 'record_timeout_ms', - 'offset' => '5084', - 'type' => '145' - }, - '84' => { - 'name' => 'hb_local_data', - 'offset' => '5088', - 'type' => '8364' - }, - '85' => { - 'name' => 'hb_remote_data', - 'offset' => '5120', - 'type' => '8364' - }, - '86' => { - 'name' => 'hb_ping_start', - 'offset' => '5152', - 'type' => '290' - }, - '87' => { - 'name' => 'hb_ping_sent', - 'offset' => '5168', - 'type' => '290' - }, - '88' => { - 'name' => 'hb_actual_retrans_timeout_ms', - 'offset' => '5184', - 'type' => '145' - }, - '89' => { - 'name' => 'hb_retrans_timeout_ms', - 'offset' => '5188', - 'type' => '145' - }, - '9' => { - 'name' => 'invalid_connection', - 'offset' => '88', - 'type' => '9592' - }, - '90' => { - 'name' => 'hb_total_timeout_ms', - 'offset' => '5192', - 'type' => '145' - }, - '91' => { - 'name' => 'ocsp_check_ok', - 'offset' => '5196', - 'type' => '9592' - }, - '92' => { - 'name' => 'hb_state', - 'offset' => '5200', - 'type' => '8207' - }, - '93' => { - 'name' => 'recv_state', - 'offset' => '5204', - 'type' => '8259' - }, - '94' => { - 'name' => 'sc_random_set', - 'offset' => '5208', - 'type' => '9592' - }, - '95' => { - 'name' => 'flags', - 'offset' => '5212', - 'type' => '145' - }, - '96' => { - 'name' => 'verify_callback', - 'offset' => '5216', - 'type' => '13495' - }, - '97' => { - 'name' => 'vc_data', - 'offset' => '5224', - 'type' => '13501' - }, - '98' => { - 'name' => 'vc_sdata', - 'offset' => '5232', - 'type' => '4246' - }, - '99' => { - 'name' => 'vc_elements', - 'offset' => '5256', - 'type' => '145' - } - }, - 'Name' => 'struct internals_st', - 'PrivateABI' => 1, - 'Size' => '5616', - 'Type' => 'Struct' - }, - '13557' => { - 'BaseType' => '13573', - 'Name' => 'record_parameters_st*[16]', - 'Size' => '128', - 'Type' => 'Array' - }, - '13573' => { - 'BaseType' => '9264', - 'Name' => 'record_parameters_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '13599' => { - 'BaseType' => '8364', - 'Name' => 'gnutls_buffer_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '13605' => { - 'Name' => 'int(*)(gnutls_session_t, gnutls_buffer_st*)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '13599' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '13636' => { - 'Name' => 'int(*)(gnutls_session_t, uint8_t*, size_t)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '8358' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1434286' => { - 'BaseType' => '1434297', - 'Header' => 'system-keys.h', - 'Line' => '41', - 'Name' => 'gnutls_system_key_iter_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1434297' => { - 'BaseType' => '1434303', - 'Name' => 'struct system_key_iter_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1434303' => { - 'Name' => 'struct system_key_iter_st', - 'PrivateABI' => 1, - 'Type' => 'Struct' - }, - '1434724' => { - 'BaseType' => '1434286', - 'Name' => 'gnutls_system_key_iter_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1441512' => { - 'Header' => 'pkcs11.h', - 'Line' => '166', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_URL_GENERIC', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_URL_LIB', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_URL_LIB_VERSION', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_pkcs11_url_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1441597' => { - 'Header' => 'pkcs11.h', - 'Line' => '292', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_OBJ_ID_HEX', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LABEL', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_LABEL', - 'value' => '3' - }, - '3' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_SERIAL', - 'value' => '4' - }, - '4' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_MANUFACTURER', - 'value' => '5' - }, - '5' => { - 'name' => 'GNUTLS_PKCS11_OBJ_TOKEN_MODEL', - 'value' => '6' - }, - '6' => { - 'name' => 'GNUTLS_PKCS11_OBJ_ID', - 'value' => '7' - }, - '7' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LIBRARY_VERSION', - 'value' => '8' - }, - '8' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LIBRARY_DESCRIPTION', - 'value' => '9' - }, - '9' => { - 'name' => 'GNUTLS_PKCS11_OBJ_LIBRARY_MANUFACTURER', - 'value' => '10' - } - }, - 'Name' => 'enum gnutls_pkcs11_obj_info_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1441653' => { - 'Header' => 'pkcs11.h', - 'Line' => '327', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_LABEL', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_SERIAL', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_MANUFACTURER', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_MODEL', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_PKCS11_TOKEN_MODNAME', - 'value' => '4' - } - }, - 'Name' => 'enum gnutls_pkcs11_token_info_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '145' => { - 'Name' => 'unsigned int', - 'Size' => '4', - 'Type' => 'Intrinsic' - }, - '1450487' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '186', - 'Name' => 'ck_flags_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1450498' => { - 'Header' => 'pkcs11.h', - 'Line' => '188', - 'Memb' => { - '0' => { - 'name' => 'major', - 'offset' => '0', - 'type' => '157' - }, - '1' => { - 'name' => 'minor', - 'offset' => '1', - 'type' => '157' - } - }, - 'Name' => 'struct ck_version', - 'Size' => '2', - 'Type' => 'Struct' - }, - '1450535' => { - 'Header' => 'pkcs11.h', - 'Line' => '195', - 'Memb' => { - '0' => { - 'name' => 'cryptoki_version', - 'offset' => '0', - 'type' => '1450498' - }, - '1' => { - 'name' => 'manufacturer_id', - 'offset' => '2', - 'type' => '1450608' - }, - '2' => { - 'name' => 'flags', - 'offset' => '40', - 'type' => '1450487' - }, - '3' => { - 'name' => 'library_description', - 'offset' => '48', - 'type' => '1450608' - }, - '4' => { - 'name' => 'library_version', - 'offset' => '80', - 'type' => '1450498' - } - }, - 'Name' => 'struct ck_info', - 'Size' => '88', - 'Type' => 'Struct' - }, - '1450608' => { - 'BaseType' => '157', - 'Name' => 'unsigned char[32]', - 'Size' => '32', - 'Type' => 'Array' - }, - '1450624' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '205', - 'Name' => 'ck_notification_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1450635' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '210', - 'Name' => 'ck_slot_id_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1450646' => { - 'Header' => 'pkcs11.h', - 'Line' => '213', - 'Memb' => { - '0' => { - 'name' => 'slot_description', - 'offset' => '0', - 'type' => '1450719' - }, - '1' => { - 'name' => 'manufacturer_id', - 'offset' => '64', - 'type' => '1450608' - }, - '2' => { - 'name' => 'flags', - 'offset' => '96', - 'type' => '1450487' - }, - '3' => { - 'name' => 'hardware_version', - 'offset' => '104', - 'type' => '1450498' - }, - '4' => { - 'name' => 'firmware_version', - 'offset' => '106', - 'type' => '1450498' - } - }, - 'Name' => 'struct ck_slot_info', - 'Size' => '112', - 'Type' => 'Struct' - }, - '1450719' => { - 'BaseType' => '157', - 'Name' => 'unsigned char[64]', - 'Size' => '64', - 'Type' => 'Array' - }, - '1450735' => { - 'Header' => 'pkcs11.h', - 'Line' => '229', - 'Memb' => { - '0' => { - 'name' => 'label', - 'offset' => '0', - 'type' => '1450608' - }, - '1' => { - 'name' => 'manufacturer_id', - 'offset' => '32', - 'type' => '1450608' - }, - '10' => { - 'name' => 'min_pin_len', - 'offset' => '144', - 'type' => '68' - }, - '11' => { - 'name' => 'total_public_memory', - 'offset' => '152', - 'type' => '68' - }, - '12' => { - 'name' => 'free_public_memory', - 'offset' => '160', - 'type' => '68' - }, - '13' => { - 'name' => 'total_private_memory', - 'offset' => '168', - 'type' => '68' - }, - '14' => { - 'name' => 'free_private_memory', - 'offset' => '176', - 'type' => '68' - }, - '15' => { - 'name' => 'hardware_version', - 'offset' => '184', - 'type' => '1450498' - }, - '16' => { - 'name' => 'firmware_version', - 'offset' => '186', - 'type' => '1450498' - }, - '17' => { - 'name' => 'utc_time', - 'offset' => '188', - 'type' => '1450964' - }, - '2' => { - 'name' => 'model', - 'offset' => '64', - 'type' => '1450964' - }, - '3' => { - 'name' => 'serial_number', - 'offset' => '80', - 'type' => '1450964' - }, - '4' => { - 'name' => 'flags', - 'offset' => '96', - 'type' => '1450487' - }, - '5' => { - 'name' => 'max_session_count', - 'offset' => '104', - 'type' => '68' - }, - '6' => { - 'name' => 'session_count', - 'offset' => '112', - 'type' => '68' - }, - '7' => { - 'name' => 'max_rw_session_count', - 'offset' => '120', - 'type' => '68' - }, - '8' => { - 'name' => 'rw_session_count', - 'offset' => '128', - 'type' => '68' - }, - '9' => { - 'name' => 'max_pin_len', - 'offset' => '136', - 'type' => '68' - } - }, - 'Name' => 'struct ck_token_info', - 'Size' => '208', - 'Type' => 'Struct' - }, - '1450964' => { - 'BaseType' => '157', - 'Name' => 'unsigned char[16]', - 'Size' => '16', - 'Type' => 'Array' - }, - '1450980' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '275', - 'Name' => 'ck_session_handle_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1450992' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '280', - 'Name' => 'ck_user_type_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1451004' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '287', - 'Name' => 'ck_state_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1451016' => { - 'Header' => 'pkcs11.h', - 'Line' => '296', - 'Memb' => { - '0' => { - 'name' => 'slot_id', - 'offset' => '0', - 'type' => '1450635' - }, - '1' => { - 'name' => 'state', - 'offset' => '8', - 'type' => '1451004' - }, - '2' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '1450487' - }, - '3' => { - 'name' => 'device_error', - 'offset' => '24', - 'type' => '68' - } - }, - 'Name' => 'struct ck_session_info', - 'Size' => '32', - 'Type' => 'Struct' - }, - '1451082' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '308', - 'Name' => 'ck_object_handle_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1451130' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '370', - 'Name' => 'ck_attribute_type_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1451142' => { - 'Header' => 'pkcs11.h', - 'Line' => '459', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '1451130' - }, - '1' => { - 'name' => 'value', - 'offset' => '8', - 'type' => '216' - }, - '2' => { - 'name' => 'value_len', - 'offset' => '16', - 'type' => '68' - } - }, - 'Name' => 'struct ck_attribute', - 'Size' => '24', - 'Type' => 'Struct' - }, - '1451195' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '475', - 'Name' => 'ck_mechanism_type_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1451207' => { - 'Header' => 'pkcs11.h', - 'Line' => '719', - 'Memb' => { - '0' => { - 'name' => 'mechanism', - 'offset' => '0', - 'type' => '1451195' - }, - '1' => { - 'name' => 'parameter', - 'offset' => '8', - 'type' => '216' - }, - '2' => { - 'name' => 'parameter_len', - 'offset' => '16', - 'type' => '68' - } - }, - 'Name' => 'struct ck_mechanism', - 'Size' => '24', - 'Type' => 'Struct' - }, - '1451260' => { - 'Header' => 'pkcs11.h', - 'Line' => '727', - 'Memb' => { - '0' => { - 'name' => 'min_key_size', - 'offset' => '0', - 'type' => '68' - }, - '1' => { - 'name' => 'max_key_size', - 'offset' => '8', - 'type' => '68' - }, - '2' => { - 'name' => 'flags', - 'offset' => '16', - 'type' => '1450487' - } - }, - 'Name' => 'struct ck_mechanism_info', - 'Size' => '24', - 'Type' => 'Struct' - }, - '1451313' => { - 'BaseType' => '68', - 'Header' => 'pkcs11.h', - 'Line' => '754', - 'Name' => 'ck_rv_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1451325' => { - 'BaseType' => '1451337', - 'Header' => 'pkcs11.h', - 'Line' => '757', - 'Name' => 'ck_notify_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1451337' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_notification_t, void*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1450624' - }, - '2' => { - 'type' => '216' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1451368' => { - 'BaseType' => '1451380', - 'Header' => 'pkcs11.h', - 'Line' => '767', - 'Name' => 'CK_C_Initialize', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1451380' => { - 'Name' => 'ck_rv_t(*)(void*)', - 'Param' => { - '0' => { - 'type' => '216' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1451401' => { - 'BaseType' => '1451380', - 'Header' => 'pkcs11.h', - 'Line' => '768', - 'Name' => 'CK_C_Finalize', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1451413' => { - 'BaseType' => '1451425', - 'Header' => 'pkcs11.h', - 'Line' => '769', - 'Name' => 'CK_C_GetInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1451425' => { - 'Name' => 'ck_rv_t(*)(struct ck_info*)', - 'Param' => { - '0' => { - 'type' => '1451446' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1451446' => { - 'BaseType' => '1450535', - 'Name' => 'struct ck_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1451452' => { - 'BaseType' => '1451464', - 'Header' => 'pkcs11.h', - 'Line' => '770', - 'Name' => 'CK_C_GetFunctionList', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1451464' => { - 'Name' => 'ck_rv_t(*)(struct ck_function_list**)', - 'Param' => { - '0' => { - 'type' => '1451485' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1451485' => { - 'BaseType' => '1451491', - 'Name' => 'struct ck_function_list**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1451491' => { - 'BaseType' => '1451497', - 'Name' => 'struct ck_function_list*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1451497' => { - 'Header' => 'pkcs11.h', - 'Line' => '1044', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '1450498' - }, - '1' => { - 'name' => 'C_Initialize', - 'offset' => '8', - 'type' => '1451368' - }, - '10' => { - 'name' => 'C_InitToken', - 'offset' => '80', - 'type' => '1452730' - }, - '11' => { - 'name' => 'C_InitPIN', - 'offset' => '88', - 'type' => '1452778' - }, - '12' => { - 'name' => 'C_SetPIN', - 'offset' => '96', - 'type' => '1452821' - }, - '13' => { - 'name' => 'C_OpenSession', - 'offset' => '104', - 'type' => '1452874' - }, - '14' => { - 'name' => 'C_CloseSession', - 'offset' => '112', - 'type' => '1452933' - }, - '15' => { - 'name' => 'C_CloseAllSessions', - 'offset' => '120', - 'type' => '1452966' - }, - '16' => { - 'name' => 'C_GetSessionInfo', - 'offset' => '128', - 'type' => '1452999' - }, - '17' => { - 'name' => 'C_GetOperationState', - 'offset' => '136', - 'type' => '1453043' - }, - '18' => { - 'name' => 'C_SetOperationState', - 'offset' => '144', - 'type' => '1453086' - }, - '19' => { - 'name' => 'C_Login', - 'offset' => '152', - 'type' => '1453139' - }, - '2' => { - 'name' => 'C_Finalize', - 'offset' => '16', - 'type' => '1451401' - }, - '20' => { - 'name' => 'C_Logout', - 'offset' => '160', - 'type' => '1453187' - }, - '21' => { - 'name' => 'C_CreateObject', - 'offset' => '168', - 'type' => '1453199' - }, - '22' => { - 'name' => 'C_CopyObject', - 'offset' => '176', - 'type' => '1453259' - }, - '23' => { - 'name' => 'C_DestroyObject', - 'offset' => '184', - 'type' => '1453312' - }, - '24' => { - 'name' => 'C_GetObjectSize', - 'offset' => '192', - 'type' => '1453350' - }, - '25' => { - 'name' => 'C_GetAttributeValue', - 'offset' => '200', - 'type' => '1453393' - }, - '26' => { - 'name' => 'C_SetAttributeValue', - 'offset' => '208', - 'type' => '1453441' - }, - '27' => { - 'name' => 'C_FindObjectsInit', - 'offset' => '216', - 'type' => '1453453' - }, - '28' => { - 'name' => 'C_FindObjects', - 'offset' => '224', - 'type' => '1453496' - }, - '29' => { - 'name' => 'C_FindObjectsFinal', - 'offset' => '232', - 'type' => '1453544' - }, - '3' => { - 'name' => 'C_GetInfo', - 'offset' => '24', - 'type' => '1451413' - }, - '30' => { - 'name' => 'C_EncryptInit', - 'offset' => '240', - 'type' => '1453556' - }, - '31' => { - 'name' => 'C_Encrypt', - 'offset' => '248', - 'type' => '1453605' - }, - '32' => { - 'name' => 'C_EncryptUpdate', - 'offset' => '256', - 'type' => '1453658' - }, - '33' => { - 'name' => 'C_EncryptFinal', - 'offset' => '264', - 'type' => '1453670' - }, - '34' => { - 'name' => 'C_DecryptInit', - 'offset' => '272', - 'type' => '1453682' - }, - '35' => { - 'name' => 'C_Decrypt', - 'offset' => '280', - 'type' => '1453694' - }, - '36' => { - 'name' => 'C_DecryptUpdate', - 'offset' => '288', - 'type' => '1453706' - }, - '37' => { - 'name' => 'C_DecryptFinal', - 'offset' => '296', - 'type' => '1453718' - }, - '38' => { - 'name' => 'C_DigestInit', - 'offset' => '304', - 'type' => '1453730' - }, - '39' => { - 'name' => 'C_Digest', - 'offset' => '312', - 'type' => '1453768' - }, - '4' => { - 'name' => 'C_GetFunctionList', - 'offset' => '32', - 'type' => '1451452' - }, - '40' => { - 'name' => 'C_DigestUpdate', - 'offset' => '320', - 'type' => '1453780' - }, - '41' => { - 'name' => 'C_DigestKey', - 'offset' => '328', - 'type' => '1453792' - }, - '42' => { - 'name' => 'C_DigestFinal', - 'offset' => '336', - 'type' => '1453804' - }, - '43' => { - 'name' => 'C_SignInit', - 'offset' => '344', - 'type' => '1453816' - }, - '44' => { - 'name' => 'C_Sign', - 'offset' => '352', - 'type' => '1453828' - }, - '45' => { - 'name' => 'C_SignUpdate', - 'offset' => '360', - 'type' => '1453840' - }, - '46' => { - 'name' => 'C_SignFinal', - 'offset' => '368', - 'type' => '1453852' - }, - '47' => { - 'name' => 'C_SignRecoverInit', - 'offset' => '376', - 'type' => '1453864' - }, - '48' => { - 'name' => 'C_SignRecover', - 'offset' => '384', - 'type' => '1453876' - }, - '49' => { - 'name' => 'C_VerifyInit', - 'offset' => '392', - 'type' => '1453888' - }, - '5' => { - 'name' => 'C_GetSlotList', - 'offset' => '40', - 'type' => '1452446' - }, - '50' => { - 'name' => 'C_Verify', - 'offset' => '400', - 'type' => '1453900' - }, - '51' => { - 'name' => 'C_VerifyUpdate', - 'offset' => '408', - 'type' => '1453912' - }, - '52' => { - 'name' => 'C_VerifyFinal', - 'offset' => '416', - 'type' => '1453924' - }, - '53' => { - 'name' => 'C_VerifyRecoverInit', - 'offset' => '424', - 'type' => '1453936' - }, - '54' => { - 'name' => 'C_VerifyRecover', - 'offset' => '432', - 'type' => '1453948' - }, - '55' => { - 'name' => 'C_DigestEncryptUpdate', - 'offset' => '440', - 'type' => '1453960' - }, - '56' => { - 'name' => 'C_DecryptDigestUpdate', - 'offset' => '448', - 'type' => '1453972' - }, - '57' => { - 'name' => 'C_SignEncryptUpdate', - 'offset' => '456', - 'type' => '1453984' - }, - '58' => { - 'name' => 'C_DecryptVerifyUpdate', - 'offset' => '464', - 'type' => '1453996' - }, - '59' => { - 'name' => 'C_GenerateKey', - 'offset' => '472', - 'type' => '1454008' - }, - '6' => { - 'name' => 'C_GetSlotInfo', - 'offset' => '48', - 'type' => '1452501' - }, - '60' => { - 'name' => 'C_GenerateKeyPair', - 'offset' => '480', - 'type' => '1454061' - }, - '61' => { - 'name' => 'C_WrapKey', - 'offset' => '488', - 'type' => '1454129' - }, - '62' => { - 'name' => 'C_UnwrapKey', - 'offset' => '496', - 'type' => '1454187' - }, - '63' => { - 'name' => 'C_DeriveKey', - 'offset' => '504', - 'type' => '1454255' - }, - '64' => { - 'name' => 'C_SeedRandom', - 'offset' => '512', - 'type' => '1454313' - }, - '65' => { - 'name' => 'C_GenerateRandom', - 'offset' => '520', - 'type' => '1454325' - }, - '66' => { - 'name' => 'C_GetFunctionStatus', - 'offset' => '528', - 'type' => '1454337' - }, - '67' => { - 'name' => 'C_CancelFunction', - 'offset' => '536', - 'type' => '1454349' - }, - '68' => { - 'name' => 'C_WaitForSlotEvent', - 'offset' => '544', - 'type' => '1452589' - }, - '7' => { - 'name' => 'C_GetTokenInfo', - 'offset' => '56', - 'type' => '1452545' - }, - '8' => { - 'name' => 'C_GetMechanismList', - 'offset' => '64', - 'type' => '1452632' - }, - '9' => { - 'name' => 'C_GetMechanismInfo', - 'offset' => '72', - 'type' => '1452681' - } - }, - 'Name' => 'struct ck_function_list', - 'Size' => '552', - 'Type' => 'Struct' - }, - '1452446' => { - 'BaseType' => '1452458', - 'Header' => 'pkcs11.h', - 'Line' => '773', - 'Name' => 'CK_C_GetSlotList', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452458' => { - 'Name' => 'ck_rv_t(*)(unsigned char, ck_slot_id_t*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '157' - }, - '1' => { - 'type' => '1452489' - }, - '2' => { - 'type' => '1452495' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452489' => { - 'BaseType' => '1450635', - 'Name' => 'ck_slot_id_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1452495' => { - 'BaseType' => '68', - 'Name' => 'unsigned long*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1452501' => { - 'BaseType' => '1452513', - 'Header' => 'pkcs11.h', - 'Line' => '776', - 'Name' => 'CK_C_GetSlotInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452513' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, struct ck_slot_info*)', - 'Param' => { - '0' => { - 'type' => '1450635' - }, - '1' => { - 'type' => '1452539' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452539' => { - 'BaseType' => '1450646', - 'Name' => 'struct ck_slot_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1452545' => { - 'BaseType' => '1452557', - 'Header' => 'pkcs11.h', - 'Line' => '778', - 'Name' => 'CK_C_GetTokenInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452557' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, struct ck_token_info*)', - 'Param' => { - '0' => { - 'type' => '1450635' - }, - '1' => { - 'type' => '1452583' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452583' => { - 'BaseType' => '1450735', - 'Name' => 'struct ck_token_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1452589' => { - 'BaseType' => '1452601', - 'Header' => 'pkcs11.h', - 'Line' => '780', - 'Name' => 'CK_C_WaitForSlotEvent', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452601' => { - 'Name' => 'ck_rv_t(*)(ck_flags_t, ck_slot_id_t*, void*)', - 'Param' => { - '0' => { - 'type' => '1450487' - }, - '1' => { - 'type' => '1452489' - }, - '2' => { - 'type' => '216' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452632' => { - 'BaseType' => '1452644', - 'Header' => 'pkcs11.h', - 'Line' => '782', - 'Name' => 'CK_C_GetMechanismList', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452644' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, ck_mechanism_type_t*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1450635' - }, - '1' => { - 'type' => '1452675' - }, - '2' => { - 'type' => '1452495' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452675' => { - 'BaseType' => '1451195', - 'Name' => 'ck_mechanism_type_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1452681' => { - 'BaseType' => '1452693', - 'Header' => 'pkcs11.h', - 'Line' => '786', - 'Name' => 'CK_C_GetMechanismInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452693' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, ck_mechanism_type_t, struct ck_mechanism_info*)', - 'Param' => { - '0' => { - 'type' => '1450635' - }, - '1' => { - 'type' => '1451195' - }, - '2' => { - 'type' => '1452724' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452724' => { - 'BaseType' => '1451260', - 'Name' => 'struct ck_mechanism_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1452730' => { - 'BaseType' => '1452742', - 'Header' => 'pkcs11.h', - 'Line' => '789', - 'Name' => 'CK_C_InitToken', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452742' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, unsigned char*, unsigned long, unsigned char*)', - 'Param' => { - '0' => { - 'type' => '1450635' - }, - '1' => { - 'type' => '3881' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '3881' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452778' => { - 'BaseType' => '1452790', - 'Header' => 'pkcs11.h', - 'Line' => '792', - 'Name' => 'CK_C_InitPIN', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452790' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '3881' - }, - '2' => { - 'type' => '68' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452821' => { - 'BaseType' => '1452833', - 'Header' => 'pkcs11.h', - 'Line' => '795', - 'Name' => 'CK_C_SetPIN', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452833' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long, unsigned char*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '3881' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '3881' - }, - '4' => { - 'type' => '68' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452874' => { - 'BaseType' => '1452886', - 'Header' => 'pkcs11.h', - 'Line' => '800', - 'Name' => 'CK_C_OpenSession', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452886' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t, ck_flags_t, void*, ck_notify_t, ck_session_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1450635' - }, - '1' => { - 'type' => '1450487' - }, - '2' => { - 'type' => '216' - }, - '3' => { - 'type' => '1451325' - }, - '4' => { - 'type' => '1452927' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452927' => { - 'BaseType' => '1450980', - 'Name' => 'ck_session_handle_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1452933' => { - 'BaseType' => '1452945', - 'Header' => 'pkcs11.h', - 'Line' => '804', - 'Name' => 'CK_C_CloseSession', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452945' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t)', - 'Param' => { - '0' => { - 'type' => '1450980' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452966' => { - 'BaseType' => '1452978', - 'Header' => 'pkcs11.h', - 'Line' => '805', - 'Name' => 'CK_C_CloseAllSessions', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1452978' => { - 'Name' => 'ck_rv_t(*)(ck_slot_id_t)', - 'Param' => { - '0' => { - 'type' => '1450635' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1452999' => { - 'BaseType' => '1453011', - 'Header' => 'pkcs11.h', - 'Line' => '806', - 'Name' => 'CK_C_GetSessionInfo', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453011' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_session_info*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1453037' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453037' => { - 'BaseType' => '1451016', - 'Name' => 'struct ck_session_info*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1453043' => { - 'BaseType' => '1453055', - 'Header' => 'pkcs11.h', - 'Line' => '809', - 'Name' => 'CK_C_GetOperationState', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453055' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '3881' - }, - '2' => { - 'type' => '1452495' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453086' => { - 'BaseType' => '1453098', - 'Header' => 'pkcs11.h', - 'Line' => '813', - 'Name' => 'CK_C_SetOperationState', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453098' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long, ck_object_handle_t, ck_object_handle_t)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '3881' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '1451082' - }, - '4' => { - 'type' => '1451082' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453139' => { - 'BaseType' => '1453151', - 'Header' => 'pkcs11.h', - 'Line' => '819', - 'Name' => 'CK_C_Login', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453151' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_user_type_t, unsigned char*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1450992' - }, - '2' => { - 'type' => '3881' - }, - '3' => { - 'type' => '68' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453187' => { - 'BaseType' => '1452945', - 'Header' => 'pkcs11.h', - 'Line' => '822', - 'Name' => 'CK_C_Logout', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453199' => { - 'BaseType' => '1453211', - 'Header' => 'pkcs11.h', - 'Line' => '824', - 'Name' => 'CK_C_CreateObject', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453211' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1453247' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '1453253' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453247' => { - 'BaseType' => '1451142', - 'Name' => 'struct ck_attribute*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1453253' => { - 'BaseType' => '1451082', - 'Name' => 'ck_object_handle_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1453259' => { - 'BaseType' => '1453271', - 'Header' => 'pkcs11.h', - 'Line' => '828', - 'Name' => 'CK_C_CopyObject', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453271' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1451082' - }, - '2' => { - 'type' => '1453247' - }, - '3' => { - 'type' => '68' - }, - '4' => { - 'type' => '1453253' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453312' => { - 'BaseType' => '1453324', - 'Header' => 'pkcs11.h', - 'Line' => '832', - 'Name' => 'CK_C_DestroyObject', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453324' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1451082' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453350' => { - 'BaseType' => '1453362', - 'Header' => 'pkcs11.h', - 'Line' => '835', - 'Name' => 'CK_C_GetObjectSize', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453362' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1451082' - }, - '2' => { - 'type' => '1452495' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453393' => { - 'BaseType' => '1453405', - 'Header' => 'pkcs11.h', - 'Line' => '839', - 'Name' => 'CK_C_GetAttributeValue', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453405' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t, struct ck_attribute*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1451082' - }, - '2' => { - 'type' => '1453247' - }, - '3' => { - 'type' => '68' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453441' => { - 'BaseType' => '1453405', - 'Header' => 'pkcs11.h', - 'Line' => '844', - 'Name' => 'CK_C_SetAttributeValue', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453453' => { - 'BaseType' => '1453465', - 'Header' => 'pkcs11.h', - 'Line' => '849', - 'Name' => 'CK_C_FindObjectsInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453465' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_attribute*, unsigned long)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1453247' - }, - '2' => { - 'type' => '68' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453496' => { - 'BaseType' => '1453508', - 'Header' => 'pkcs11.h', - 'Line' => '853', - 'Name' => 'CK_C_FindObjects', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453508' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, ck_object_handle_t*, unsigned long, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1453253' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '1452495' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453544' => { - 'BaseType' => '1452945', - 'Header' => 'pkcs11.h', - 'Line' => '858', - 'Name' => 'CK_C_FindObjectsFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453556' => { - 'BaseType' => '1453568', - 'Header' => 'pkcs11.h', - 'Line' => '861', - 'Name' => 'CK_C_EncryptInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453568' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1453599' - }, - '2' => { - 'type' => '1451082' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453599' => { - 'BaseType' => '1451207', - 'Name' => 'struct ck_mechanism*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1453605' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '865', - 'Name' => 'CK_C_Encrypt', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453617' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, unsigned char*, unsigned long, unsigned char*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '3881' - }, - '2' => { - 'type' => '68' - }, - '3' => { - 'type' => '3881' - }, - '4' => { - 'type' => '1452495' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453658' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '870', - 'Name' => 'CK_C_EncryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453670' => { - 'BaseType' => '1453055', - 'Header' => 'pkcs11.h', - 'Line' => '875', - 'Name' => 'CK_C_EncryptFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453682' => { - 'BaseType' => '1453568', - 'Header' => 'pkcs11.h', - 'Line' => '880', - 'Name' => 'CK_C_DecryptInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453694' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '884', - 'Name' => 'CK_C_Decrypt', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453706' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '889', - 'Name' => 'CK_C_DecryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453718' => { - 'BaseType' => '1453055', - 'Header' => 'pkcs11.h', - 'Line' => '894', - 'Name' => 'CK_C_DecryptFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453730' => { - 'BaseType' => '1453742', - 'Header' => 'pkcs11.h', - 'Line' => '899', - 'Name' => 'CK_C_DigestInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453742' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1453599' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1453768' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '902', - 'Name' => 'CK_C_Digest', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453780' => { - 'BaseType' => '1452790', - 'Header' => 'pkcs11.h', - 'Line' => '907', - 'Name' => 'CK_C_DigestUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453792' => { - 'BaseType' => '1453324', - 'Header' => 'pkcs11.h', - 'Line' => '910', - 'Name' => 'CK_C_DigestKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453804' => { - 'BaseType' => '1453055', - 'Header' => 'pkcs11.h', - 'Line' => '912', - 'Name' => 'CK_C_DigestFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453816' => { - 'BaseType' => '1453568', - 'Header' => 'pkcs11.h', - 'Line' => '917', - 'Name' => 'CK_C_SignInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453828' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '921', - 'Name' => 'CK_C_Sign', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453840' => { - 'BaseType' => '1452790', - 'Header' => 'pkcs11.h', - 'Line' => '926', - 'Name' => 'CK_C_SignUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453852' => { - 'BaseType' => '1453055', - 'Header' => 'pkcs11.h', - 'Line' => '929', - 'Name' => 'CK_C_SignFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453864' => { - 'BaseType' => '1453568', - 'Header' => 'pkcs11.h', - 'Line' => '933', - 'Name' => 'CK_C_SignRecoverInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453876' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '937', - 'Name' => 'CK_C_SignRecover', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453888' => { - 'BaseType' => '1453568', - 'Header' => 'pkcs11.h', - 'Line' => '943', - 'Name' => 'CK_C_VerifyInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453900' => { - 'BaseType' => '1452833', - 'Header' => 'pkcs11.h', - 'Line' => '947', - 'Name' => 'CK_C_Verify', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453912' => { - 'BaseType' => '1452790', - 'Header' => 'pkcs11.h', - 'Line' => '952', - 'Name' => 'CK_C_VerifyUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453924' => { - 'BaseType' => '1452790', - 'Header' => 'pkcs11.h', - 'Line' => '955', - 'Name' => 'CK_C_VerifyFinal', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453936' => { - 'BaseType' => '1453568', - 'Header' => 'pkcs11.h', - 'Line' => '959', - 'Name' => 'CK_C_VerifyRecoverInit', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453948' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '963', - 'Name' => 'CK_C_VerifyRecover', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453960' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '970', - 'Name' => 'CK_C_DigestEncryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453972' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '975', - 'Name' => 'CK_C_DecryptDigestUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453984' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '981', - 'Name' => 'CK_C_SignEncryptUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1453996' => { - 'BaseType' => '1453617', - 'Header' => 'pkcs11.h', - 'Line' => '986', - 'Name' => 'CK_C_DecryptVerifyUpdate', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1454008' => { - 'BaseType' => '1454020', - 'Header' => 'pkcs11.h', - 'Line' => '993', - 'Name' => 'CK_C_GenerateKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1454020' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1453599' - }, - '2' => { - 'type' => '1453247' - }, - '3' => { - 'type' => '68' - }, - '4' => { - 'type' => '1453253' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1454061' => { - 'BaseType' => '1454073', - 'Header' => 'pkcs11.h', - 'Line' => '999', - 'Name' => 'CK_C_GenerateKeyPair', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1454073' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, struct ck_attribute*, unsigned long, struct ck_attribute*, unsigned long, ck_object_handle_t*, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1453599' - }, - '2' => { - 'type' => '1453247' - }, - '3' => { - 'type' => '68' - }, - '4' => { - 'type' => '1453247' - }, - '5' => { - 'type' => '68' - }, - '6' => { - 'type' => '1453253' - }, - '7' => { - 'type' => '1453253' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1454129' => { - 'BaseType' => '1454141', - 'Header' => 'pkcs11.h', - 'Line' => '1008', - 'Name' => 'CK_C_WrapKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1454141' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t, ck_object_handle_t, unsigned char*, unsigned long*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1453599' - }, - '2' => { - 'type' => '1451082' - }, - '3' => { - 'type' => '1451082' - }, - '4' => { - 'type' => '3881' - }, - '5' => { - 'type' => '1452495' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1454187' => { - 'BaseType' => '1454199', - 'Header' => 'pkcs11.h', - 'Line' => '1015', - 'Name' => 'CK_C_UnwrapKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1454199' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t, unsigned char*, unsigned long, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1453599' - }, - '2' => { - 'type' => '1451082' - }, - '3' => { - 'type' => '3881' - }, - '4' => { - 'type' => '68' - }, - '5' => { - 'type' => '1453247' - }, - '6' => { - 'type' => '68' - }, - '7' => { - 'type' => '1453253' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1454255' => { - 'BaseType' => '1454267', - 'Header' => 'pkcs11.h', - 'Line' => '1024', - 'Name' => 'CK_C_DeriveKey', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1454267' => { - 'Name' => 'ck_rv_t(*)(ck_session_handle_t, struct ck_mechanism*, ck_object_handle_t, struct ck_attribute*, unsigned long, ck_object_handle_t*)', - 'Param' => { - '0' => { - 'type' => '1450980' - }, - '1' => { - 'type' => '1453599' - }, - '2' => { - 'type' => '1451082' - }, - '3' => { - 'type' => '1453247' - }, - '4' => { - 'type' => '68' - }, - '5' => { - 'type' => '1453253' - } - }, - 'Return' => '1451313', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '1454313' => { - 'BaseType' => '1452790', - 'Header' => 'pkcs11.h', - 'Line' => '1032', - 'Name' => 'CK_C_SeedRandom', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1454325' => { - 'BaseType' => '1452790', - 'Header' => 'pkcs11.h', - 'Line' => '1035', - 'Name' => 'CK_C_GenerateRandom', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1454337' => { - 'BaseType' => '1452945', - 'Header' => 'pkcs11.h', - 'Line' => '1040', - 'Name' => 'CK_C_GetFunctionStatus', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1454349' => { - 'BaseType' => '1452945', - 'Header' => 'pkcs11.h', - 'Line' => '1041', - 'Name' => 'CK_C_CancelFunction', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1454510' => { - 'Header' => 'pkcs11_int.h', - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'module', - 'offset' => '0', - 'type' => '1451491' - }, - '1' => { - 'name' => 'tinfo', - 'offset' => '8', - 'type' => '1450735' - }, - '2' => { - 'name' => 'slot_info', - 'offset' => '216', - 'type' => '1450646' - }, - '3' => { - 'name' => 'pks', - 'offset' => '328', - 'type' => '1450980' - }, - '4' => { - 'name' => 'sid', - 'offset' => '336', - 'type' => '1450635' - }, - '5' => { - 'name' => 'init', - 'offset' => '344', - 'type' => '145' - }, - '6' => { - 'name' => 'trusted', - 'offset' => '348', - 'type' => '145' - } - }, - 'Name' => 'struct pkcs11_session_info', - 'PrivateABI' => 1, - 'Size' => '352', - 'Type' => 'Struct' - }, - '1455041' => { - 'BaseType' => '1048015', - 'Name' => 'gnutls_pkcs11_obj_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1455047' => { - 'BaseType' => '1455041', - 'Name' => 'gnutls_pkcs11_obj_t*const', - 'Size' => '8', - 'Type' => 'Const' - }, - '1463052' => { - 'BaseType' => '1455041', - 'Name' => 'gnutls_pkcs11_obj_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '14637' => { - 'BaseType' => '3952', - 'Name' => 'gnutls_range_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1496711' => { - 'Header' => 'x509.h', - 'Line' => '1577', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '240' - }, - '1' => { - 'name' => 'critical', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'data', - 'offset' => '16', - 'type' => '3887' - } - }, - 'Name' => 'struct gnutls_x509_ext_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '1496764' => { - 'BaseType' => '1496711', - 'Header' => 'x509.h', - 'Line' => '1581', - 'Name' => 'gnutls_x509_ext_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '1509782' => { - 'BaseType' => '1496764', - 'Name' => 'gnutls_x509_ext_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1510420' => { - 'BaseType' => '1509782', - 'Name' => 'gnutls_x509_ext_st**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '152' => { - 'BaseType' => '145', - 'Name' => 'unsigned int const', - 'Size' => '4', - 'Type' => 'Const' - }, - '152087' => { - 'BaseType' => '121', - 'Name' => 'char[32]', - 'Size' => '32', - 'Type' => 'Array' - }, - '154058' => { - 'Header' => 'gnutls.h', - 'Line' => '220', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PARAMS_RSA_EXPORT', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_PARAMS_DH', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_PARAMS_ECDH', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_params_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '154970' => { - 'BaseType' => '2916', - 'Name' => 'gnutls_pk_algorithm_t const', - 'Size' => '4', - 'Type' => 'Const' - }, - '155516' => { - 'BaseType' => '155528', - 'Header' => 'gnutls.h', - 'Line' => '876', - 'Name' => 'gnutls_rsa_params_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '155528' => { - 'BaseType' => '155534', - 'Name' => 'struct gnutls_x509_privkey_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '155534' => { - 'Header' => 'x509_int.h', - 'Line' => '124', - 'Memb' => { - '0' => { - 'name' => 'params', - 'offset' => '0', - 'type' => '7897' - }, - '1' => { - 'name' => 'pk_algorithm', - 'offset' => '440', - 'type' => '2916' - }, - '2' => { - 'name' => 'expanded', - 'offset' => '444', - 'type' => '145' - }, - '3' => { - 'name' => 'flags', - 'offset' => '448', - 'type' => '145' - }, - '4' => { - 'name' => 'key', - 'offset' => '456', - 'type' => '8286' - }, - '5' => { - 'name' => 'pin', - 'offset' => '464', - 'type' => '163164' - } - }, - 'Name' => 'struct gnutls_x509_privkey_int', - 'PrivateABI' => 1, - 'Size' => '480', - 'Type' => 'Struct' - }, - '156060' => { - 'Header' => 'gnutls.h', - 'Line' => '889', - 'Memb' => { - '0' => { - 'name' => 'dh', - 'offset' => '0', - 'type' => '3411' - }, - '1' => { - 'name' => 'rsa_export', - 'offset' => '0', - 'type' => '155516' - } - }, - 'Name' => 'union params', - 'Size' => '8', - 'Type' => 'Union' - }, - '156097' => { - 'Header' => 'gnutls.h', - 'Line' => '887', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '154058' - }, - '1' => { - 'name' => 'params', - 'offset' => '8', - 'type' => '156060' - }, - '2' => { - 'name' => 'deinit', - 'offset' => '16', - 'type' => '75' - } - }, - 'Name' => 'struct gnutls_params_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '156150' => { - 'BaseType' => '156097', - 'Header' => 'gnutls.h', - 'Line' => '894', - 'Name' => 'gnutls_params_st', - 'Size' => '24', - 'Type' => 'Typedef' - }, - '156162' => { - 'BaseType' => '156174', - 'Header' => 'gnutls.h', - 'Line' => '896', - 'Name' => 'gnutls_params_function', - 'Type' => 'Typedef' - }, - '156174' => { - 'Name' => 'int()(gnutls_session_t, gnutls_params_type_t, gnutls_params_st*)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '154058' - }, - '2' => { - 'type' => '156199' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '156199' => { - 'BaseType' => '156150', - 'Name' => 'gnutls_params_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '156725' => { - 'BaseType' => '4477', - 'Header' => 'gnutls.h', - 'Line' => '1560', - 'Name' => 'gnutls_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '156748' => { - 'BaseType' => '155528', - 'Header' => 'gnutls.h', - 'Line' => '1563', - 'Name' => 'gnutls_x509_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '156760' => { - 'BaseType' => '156772', - 'Header' => 'gnutls.h', - 'Line' => '1569', - 'Name' => 'gnutls_x509_crt_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '156772' => { - 'BaseType' => '156778', - 'Name' => 'struct gnutls_x509_crt_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '156778' => { - 'Header' => 'x509_int.h', - 'Line' => '72', - 'Memb' => { - '0' => { - 'name' => 'cert', - 'offset' => '0', - 'type' => '8286' - }, - '1' => { - 'name' => 'use_extensions', - 'offset' => '8', - 'type' => '75' - }, - '10' => { - 'name' => 'idn', - 'offset' => '112', - 'type' => '167816' - }, - '2' => { - 'name' => 'expanded', - 'offset' => '12', - 'type' => '145' - }, - '3' => { - 'name' => 'modified', - 'offset' => '16', - 'type' => '145' - }, - '4' => { - 'name' => 'pin', - 'offset' => '24', - 'type' => '163164' - }, - '5' => { - 'name' => 'raw_dn', - 'offset' => '40', - 'type' => '3887' - }, - '6' => { - 'name' => 'raw_issuer_dn', - 'offset' => '56', - 'type' => '3887' - }, - '7' => { - 'name' => 'raw_spki', - 'offset' => '72', - 'type' => '3887' - }, - '8' => { - 'name' => 'der', - 'offset' => '88', - 'type' => '3887' - }, - '9' => { - 'name' => 'dn', - 'offset' => '104', - 'type' => '167816' - } - }, - 'Name' => 'struct gnutls_x509_crt_int', - 'PrivateABI' => 1, - 'Size' => '120', - 'Type' => 'Struct' - }, - '156922' => { - 'BaseType' => '156934', - 'Header' => 'gnutls.h', - 'Line' => '1575', - 'Name' => 'gnutls_openpgp_keyring_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '156934' => { - 'BaseType' => '156940', - 'Name' => 'struct gnutls_openpgp_keyring_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '156940' => { - 'Header' => 'openpgp_int.h', - 'Line' => '54', - 'Memb' => { - '0' => { - 'name' => 'db', - 'offset' => '0', - 'type' => '167849' - } - }, - 'Name' => 'struct gnutls_openpgp_keyring_int', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '156964' => { - 'BaseType' => '156976', - 'Header' => 'gnutls.h', - 'Line' => '1582', - 'Name' => 'gnutls_certificate_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '156976' => { - 'BaseType' => '156982', - 'Name' => 'struct gnutls_certificate_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '156982' => { - 'Header' => 'cert.h', - 'Line' => '46', - 'Memb' => { - '0' => { - 'name' => 'dh_params', - 'offset' => '0', - 'type' => '3411' - }, - '1' => { - 'name' => 'deinit_dh_params', - 'offset' => '8', - 'type' => '145' - }, - '10' => { - 'name' => 'verify_depth', - 'offset' => '72', - 'type' => '145' - }, - '11' => { - 'name' => 'verify_bits', - 'offset' => '76', - 'type' => '145' - }, - '12' => { - 'name' => 'get_cert_callback', - 'offset' => '80', - 'type' => '168057' - }, - '13' => { - 'name' => 'get_cert_callback2', - 'offset' => '88', - 'type' => '168063' - }, - '14' => { - 'name' => 'verify_callback', - 'offset' => '96', - 'type' => '13495' - }, - '15' => { - 'name' => 'pin', - 'offset' => '104', - 'type' => '163164' - }, - '16' => { - 'name' => 'pin_tmp', - 'offset' => '120', - 'type' => '152087' - }, - '17' => { - 'name' => 'glob_ocsp_func', - 'offset' => '152', - 'type' => '4488' - }, - '18' => { - 'name' => 'glob_ocsp_func_ptr', - 'offset' => '160', - 'type' => '216' - }, - '2' => { - 'name' => 'params_func', - 'offset' => '16', - 'type' => '168045' - }, - '3' => { - 'name' => 'certs', - 'offset' => '24', - 'type' => '168051' - }, - '4' => { - 'name' => 'ncerts', - 'offset' => '32', - 'type' => '145' - }, - '5' => { - 'name' => 'pkey', - 'offset' => '40', - 'type' => '159258' - }, - '6' => { - 'name' => 'keyring', - 'offset' => '48', - 'type' => '156922' - }, - '7' => { - 'name' => 'tlist', - 'offset' => '56', - 'type' => '159042' - }, - '8' => { - 'name' => 'flags', - 'offset' => '64', - 'type' => '145' - }, - '9' => { - 'name' => 'verify_flags', - 'offset' => '68', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_certificate_credentials_st', - 'PrivateABI' => 1, - 'Size' => '168', - 'Type' => 'Struct' - }, - '157' => { - 'Name' => 'unsigned char', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '158148' => { - 'BaseType' => '158160', - 'Header' => 'gnutls.h', - 'Line' => '2199', - 'Name' => 'gnutls_openpgp_crt_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '158160' => { - 'BaseType' => '158166', - 'Name' => 'struct gnutls_openpgp_crt_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '158166' => { - 'Header' => 'openpgp_int.h', - 'Line' => '40', - 'Memb' => { - '0' => { - 'name' => 'knode', - 'offset' => '0', - 'type' => '167827' - }, - '1' => { - 'name' => 'preferred_keyid', - 'offset' => '8', - 'type' => '167871' - }, - '2' => { - 'name' => 'preferred_set', - 'offset' => '16', - 'type' => '75' - } - }, - 'Name' => 'struct gnutls_openpgp_crt_int', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '158215' => { - 'BaseType' => '158227', - 'Header' => 'gnutls.h', - 'Line' => '2202', - 'Name' => 'gnutls_openpgp_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '158227' => { - 'BaseType' => '158233', - 'Name' => 'struct gnutls_openpgp_privkey_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '158233' => { - 'Header' => 'openpgp_int.h', - 'Line' => '47', - 'Memb' => { - '0' => { - 'name' => 'knode', - 'offset' => '0', - 'type' => '167827' - }, - '1' => { - 'name' => 'preferred_keyid', - 'offset' => '8', - 'type' => '167871' - }, - '2' => { - 'name' => 'preferred_set', - 'offset' => '16', - 'type' => '75' - } - }, - 'Name' => 'struct gnutls_openpgp_privkey_int', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '158282' => { - 'BaseType' => '158294', - 'Header' => 'gnutls.h', - 'Line' => '2205', - 'Name' => 'gnutls_pkcs11_privkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '158294' => { - 'BaseType' => '158300', - 'Name' => 'struct gnutls_pkcs11_privkey_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '158300' => { - 'Line' => '64', - 'Memb' => { - '0' => { - 'name' => 'pk_algorithm', - 'offset' => '0', - 'type' => '2916' - }, - '1' => { - 'name' => 'flags', - 'offset' => '4', - 'type' => '145' - }, - '2' => { - 'name' => 'uinfo', - 'offset' => '8', - 'type' => '1057251' - }, - '3' => { - 'name' => 'url', - 'offset' => '16', - 'type' => '240' - }, - '4' => { - 'name' => 'sinfo', - 'offset' => '24', - 'type' => '1454510' - }, - '5' => { - 'name' => 'ref', - 'offset' => '376', - 'type' => '1451082' - }, - '6' => { - 'name' => 'reauth', - 'offset' => '384', - 'type' => '145' - }, - '7' => { - 'name' => 'pin', - 'offset' => '392', - 'type' => '163164' - } - }, - 'Name' => 'struct gnutls_pkcs11_privkey_st', - 'PrivateABI' => 1, - 'Size' => '408', - 'Source' => 'pkcs11_privkey.c', - 'Type' => 'Struct' - }, - '158343' => { - 'Header' => 'gnutls.h', - 'Line' => '2221', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PRIVKEY_X509', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PRIVKEY_OPENPGP', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PRIVKEY_PKCS11', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PRIVKEY_EXT', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_privkey_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '158355' => { - 'Header' => 'gnutls.h', - 'Line' => '2227', - 'Memb' => { - '0' => { - 'name' => 'x509', - 'offset' => '0', - 'type' => '158389' - }, - '1' => { - 'name' => 'pgp', - 'offset' => '0', - 'type' => '158148' - } - }, - 'Name' => 'anon-union-gnutls.h-2227', - 'Size' => '8', - 'Type' => 'Union' - }, - '158389' => { - 'BaseType' => '156760', - 'Name' => 'gnutls_x509_crt_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '158395' => { - 'Header' => 'gnutls.h', - 'Line' => '2233', - 'Memb' => { - '0' => { - 'name' => 'x509', - 'offset' => '0', - 'type' => '156748' - }, - '1' => { - 'name' => 'pgp', - 'offset' => '0', - 'type' => '158215' - }, - '2' => { - 'name' => 'pkcs11', - 'offset' => '0', - 'type' => '158282' - } - }, - 'Name' => 'anon-union-gnutls.h-2233', - 'Size' => '8', - 'Type' => 'Union' - }, - '158441' => { - 'Header' => 'gnutls.h', - 'Line' => '2223', - 'Memb' => { - '0' => { - 'name' => 'cert_type', - 'offset' => '0', - 'type' => '2854' - }, - '1' => { - 'name' => 'key_type', - 'offset' => '4', - 'type' => '158343' - }, - '2' => { - 'name' => 'cert', - 'offset' => '8', - 'type' => '158355' - }, - '3' => { - 'name' => 'ncerts', - 'offset' => '16', - 'type' => '145' - }, - '4' => { - 'name' => 'key', - 'offset' => '24', - 'type' => '158395' - }, - '5' => { - 'name' => 'deinit_all', - 'offset' => '32', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_retr2_st', - 'Size' => '40', - 'Type' => 'Struct' - }, - '158533' => { - 'BaseType' => '158441', - 'Header' => 'gnutls.h', - 'Line' => '2240', - 'Name' => 'gnutls_retr2_st', - 'Size' => '40', - 'Type' => 'Typedef' - }, - '158545' => { - 'BaseType' => '158557', - 'Header' => 'gnutls.h', - 'Line' => '2274', - 'Name' => 'gnutls_certificate_retrieve_function', - 'Type' => 'Typedef' - }, - '158557' => { - 'Name' => 'int()(gnutls_session_t, gnutls_datum_t const*, int, gnutls_pk_algorithm_t const*, int, gnutls_retr2_st*)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '4430' - }, - '2' => { - 'type' => '75' - }, - '3' => { - 'type' => '158597' - }, - '4' => { - 'type' => '75' - }, - '5' => { - 'type' => '158603' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '158597' => { - 'BaseType' => '154970', - 'Name' => 'gnutls_pk_algorithm_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '158603' => { - 'BaseType' => '158533', - 'Name' => 'gnutls_retr2_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '158609' => { - 'BaseType' => '158621', - 'Header' => 'gnutls.h', - 'Line' => '2509', - 'Name' => 'gnutls_pin_callback_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '158621' => { - 'Name' => 'int(*)(void*, int, char const*, char const*, unsigned int, char*, size_t)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '75' - }, - '2' => { - 'type' => '110' - }, - '3' => { - 'type' => '110' - }, - '4' => { - 'type' => '145' - }, - '5' => { - 'type' => '240' - }, - '6' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '159017' => { - 'Header' => 'x509_int.h', - 'Line' => '68', - 'Memb' => { - '0' => { - 'name' => 'asn', - 'offset' => '0', - 'type' => '8286' - } - }, - 'Name' => 'struct gnutls_x509_dn_st', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '159042' => { - 'BaseType' => '159054', - 'Header' => 'x509.h', - 'Line' => '1406', - 'Name' => 'gnutls_x509_trust_list_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '159054' => { - 'BaseType' => '159060', - 'Name' => 'struct gnutls_x509_trust_list_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '159060' => { - 'Header' => 'verify-high.h', - 'Line' => '26', - 'Memb' => { - '0' => { - 'name' => 'size', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'node', - 'offset' => '8', - 'type' => '556158' - }, - '2' => { - 'name' => 'x509_rdn_sequence', - 'offset' => '16', - 'type' => '3887' - }, - '3' => { - 'name' => 'blacklisted', - 'offset' => '32', - 'type' => '158389' - }, - '4' => { - 'name' => 'blacklisted_size', - 'offset' => '40', - 'type' => '145' - }, - '5' => { - 'name' => 'keep_certs', - 'offset' => '48', - 'type' => '158389' - }, - '6' => { - 'name' => 'keep_certs_size', - 'offset' => '56', - 'type' => '145' - }, - '7' => { - 'name' => 'pkcs11_token', - 'offset' => '64', - 'type' => '240' - } - }, - 'Name' => 'struct gnutls_x509_trust_list_st', - 'PrivateABI' => 1, - 'Size' => '72', - 'Type' => 'Struct' - }, - '159178' => { - 'BaseType' => '159190', - 'Header' => 'abstract.h', - 'Line' => '518', - 'Name' => 'gnutls_certificate_retrieve_function2', - 'Type' => 'Typedef' - }, - '159190' => { - 'Name' => 'int()(gnutls_session_t, gnutls_datum_t const*, int, gnutls_pk_algorithm_t const*, int, gnutls_pcert_st**, unsigned int*, gnutls_privkey_t*)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '4430' - }, - '2' => { - 'type' => '75' - }, - '3' => { - 'type' => '158597' - }, - '4' => { - 'type' => '75' - }, - '5' => { - 'type' => '159240' - }, - '6' => { - 'type' => '22864' - }, - '7' => { - 'type' => '159258' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '159240' => { - 'BaseType' => '5584', - 'Name' => 'gnutls_pcert_st**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '159258' => { - 'BaseType' => '156725', - 'Name' => 'gnutls_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '15933' => { - 'BaseType' => '3940', - 'Name' => 'gnutls_range_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1617636' => { - 'BaseType' => '1617648', - 'Header' => 'gnutls.h', - 'Line' => '1977', - 'Name' => 'gnutls_srp_server_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1617648' => { - 'BaseType' => '1617654', - 'Name' => 'struct gnutls_srp_server_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1617654' => { - 'Header' => 'srp_kx.h', - 'Line' => '34', - 'Memb' => { - '0' => { - 'name' => 'password_file', - 'offset' => '0', - 'type' => '240' - }, - '1' => { - 'name' => 'password_conf_file', - 'offset' => '8', - 'type' => '240' - }, - '2' => { - 'name' => 'pwd_callback', - 'offset' => '16', - 'type' => '1626569' - }, - '3' => { - 'name' => 'fake_salt_seed', - 'offset' => '24', - 'type' => '3887' - }, - '4' => { - 'name' => 'fake_salt_length', - 'offset' => '40', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_srp_server_credentials_st', - 'PrivateABI' => 1, - 'Size' => '48', - 'Type' => 'Struct' - }, - '1617727' => { - 'BaseType' => '1617739', - 'Header' => 'gnutls.h', - 'Line' => '1979', - 'Name' => 'gnutls_srp_client_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1617739' => { - 'BaseType' => '1617745', - 'Name' => 'struct gnutls_srp_client_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1617745' => { - 'Header' => 'srp_kx.h', - 'Line' => '28', - 'Memb' => { - '0' => { - 'name' => 'username', - 'offset' => '0', - 'type' => '240' - }, - '1' => { - 'name' => 'password', - 'offset' => '8', - 'type' => '240' - }, - '2' => { - 'name' => 'get_function', - 'offset' => '16', - 'type' => '1626563' - } - }, - 'Name' => 'struct gnutls_srp_client_credentials_st', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '1618058' => { - 'BaseType' => '1618070', - 'Header' => 'gnutls.h', - 'Line' => '2048', - 'Name' => 'gnutls_srp_server_credentials_function', - 'Type' => 'Typedef' - }, - '1618070' => { - 'Name' => 'int()(gnutls_session_t, char const*, gnutls_datum_t*, gnutls_datum_t*, gnutls_datum_t*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '4531' - }, - '3' => { - 'type' => '4531' - }, - '4' => { - 'type' => '4531' - }, - '5' => { - 'type' => '4531' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '1618110' => { - 'BaseType' => '1618122', - 'Header' => 'gnutls.h', - 'Line' => '2062', - 'Name' => 'gnutls_srp_client_credentials_function', - 'Type' => 'Typedef' - }, - '1618122' => { - 'Name' => 'int()(gnutls_session_t, char**, char**)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '1030' - }, - '2' => { - 'type' => '1030' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '1626563' => { - 'BaseType' => '1618110', - 'Name' => 'gnutls_srp_client_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1626569' => { - 'BaseType' => '1618058', - 'Name' => 'gnutls_srp_server_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1628912' => { - 'BaseType' => '1617636', - 'Name' => 'gnutls_srp_server_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1629319' => { - 'BaseType' => '1617727', - 'Name' => 'gnutls_srp_client_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '163164' => { - 'Header' => 'gnutls_int.h', - 'Line' => '434', - 'Memb' => { - '0' => { - 'name' => 'cb', - 'offset' => '0', - 'type' => '158609' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '216' - } - }, - 'Name' => 'struct pin_info_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '164' => { - 'BaseType' => '157', - 'Name' => 'unsigned char const', - 'Size' => '1', - 'Type' => 'Const' - }, - '1640497' => { - 'BaseType' => '1640509', - 'Header' => 'gnutls.h', - 'Line' => '2091', - 'Name' => 'gnutls_psk_server_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1640509' => { - 'BaseType' => '1640515', - 'Name' => 'struct gnutls_psk_server_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1640515' => { - 'Header' => 'psk.h', - 'Line' => '35', - 'Memb' => { - '0' => { - 'name' => 'password_file', - 'offset' => '0', - 'type' => '240' - }, - '1' => { - 'name' => 'pwd_callback', - 'offset' => '8', - 'type' => '1649107' - }, - '2' => { - 'name' => 'dh_params', - 'offset' => '16', - 'type' => '3411' - }, - '3' => { - 'name' => 'deinit_dh_params', - 'offset' => '24', - 'type' => '145' - }, - '4' => { - 'name' => 'params_func', - 'offset' => '32', - 'type' => '168045' - }, - '5' => { - 'name' => 'hint', - 'offset' => '40', - 'type' => '240' - } - }, - 'Name' => 'struct gnutls_psk_server_credentials_st', - 'PrivateABI' => 1, - 'Size' => '48', - 'Type' => 'Struct' - }, - '1640600' => { - 'BaseType' => '1640612', - 'Header' => 'gnutls.h', - 'Line' => '2093', - 'Name' => 'gnutls_psk_client_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1640612' => { - 'BaseType' => '1640618', - 'Name' => 'struct gnutls_psk_client_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1640618' => { - 'Header' => 'psk.h', - 'Line' => '29', - 'Memb' => { - '0' => { - 'name' => 'username', - 'offset' => '0', - 'type' => '3887' - }, - '1' => { - 'name' => 'key', - 'offset' => '16', - 'type' => '3887' - }, - '2' => { - 'name' => 'get_function', - 'offset' => '32', - 'type' => '1649101' - } - }, - 'Name' => 'struct gnutls_psk_client_credentials_st', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '1640667' => { - 'Header' => 'gnutls.h', - 'Line' => '2102', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PSK_KEY_RAW', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PSK_KEY_HEX', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_psk_key_flags', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1640697' => { - 'BaseType' => '1640667', - 'Header' => 'gnutls.h', - 'Line' => '2105', - 'Name' => 'gnutls_psk_key_flags', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1640709' => { - 'BaseType' => '1640721', - 'Header' => 'gnutls.h', - 'Line' => '2132', - 'Name' => 'gnutls_psk_server_credentials_function', - 'Type' => 'Typedef' - }, - '1640721' => { - 'Name' => 'int()(gnutls_session_t, char const*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '4531' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '1640746' => { - 'BaseType' => '1640758', - 'Header' => 'gnutls.h', - 'Line' => '2141', - 'Name' => 'gnutls_psk_client_credentials_function', - 'Type' => 'Typedef' - }, - '1640758' => { - 'Name' => 'int()(gnutls_session_t, char**, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '1030' - }, - '2' => { - 'type' => '4531' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '1649101' => { - 'BaseType' => '1640746', - 'Name' => 'gnutls_psk_client_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1649107' => { - 'BaseType' => '1640709', - 'Name' => 'gnutls_psk_server_credentials_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1650597' => { - 'BaseType' => '1640497', - 'Name' => 'gnutls_psk_server_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1651304' => { - 'BaseType' => '1640600', - 'Name' => 'gnutls_psk_client_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1653559' => { - 'BaseType' => '183', - 'Header' => 'stdio.h', - 'Line' => '90', - 'Name' => 'off_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1672678' => { - 'BaseType' => '121', - 'Name' => 'char[64]', - 'Size' => '64', - 'Type' => 'Array' - }, - '167816' => { - 'BaseType' => '159017', - 'Header' => 'x509_int.h', - 'Line' => '70', - 'Name' => 'gnutls_x509_dn_st', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '167827' => { - 'BaseType' => '167838', - 'Header' => 'opencdk.h', - 'Line' => '76', - 'Name' => 'cdk_kbnode_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '167838' => { - 'BaseType' => '167844', - 'Name' => 'struct cdk_kbnode_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '167844' => { - 'Header' => 'packet.h', - 'Line' => '26', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '167838' - }, - '1' => { - 'name' => 'pkt', - 'offset' => '8', - 'type' => '3753317' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'is_deleted', - 'offset' => '16', - 'type' => '145' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'is_cloned', - 'offset' => '16', - 'type' => '145' - } - }, - 'Name' => 'struct cdk_kbnode_s', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '167849' => { - 'BaseType' => '167860', - 'Header' => 'opencdk.h', - 'Line' => '80', - 'Name' => 'cdk_keydb_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '167860' => { - 'BaseType' => '167866', - 'Name' => 'struct cdk_keydb_hd_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '167866' => { - 'Header' => 'keydb.h', - 'Line' => '56', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '75' - }, - '1' => { - 'name' => 'fp_ref', - 'offset' => '4', - 'type' => '75' - }, - '2' => { - 'name' => 'fp', - 'offset' => '8', - 'type' => '3750812' - }, - '3' => { - 'name' => 'name', - 'offset' => '16', - 'type' => '240' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'secret', - 'offset' => '24', - 'type' => '145' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'isopen', - 'offset' => '24', - 'type' => '145' - }, - '6' => { - 'name' => 'stats', - 'offset' => '32', - 'type' => '3980705' - } - }, - 'Name' => 'struct cdk_keydb_hd_s', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '167871' => { - 'BaseType' => '962', - 'Name' => 'uint8_t[8]', - 'Size' => '8', - 'Type' => 'Array' - }, - '167887' => { - 'Header' => 'str_array.h', - 'Line' => '33', - 'Memb' => { - '0' => { - 'name' => 'str', - 'offset' => '0', - 'type' => '240' - }, - '1' => { - 'name' => 'len', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'next', - 'offset' => '16', - 'type' => '167936' - } - }, - 'Name' => 'struct gnutls_str_array_st', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '167936' => { - 'BaseType' => '167887', - 'Name' => 'struct gnutls_str_array_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '167942' => { - 'BaseType' => '167936', - 'Header' => 'str_array.h', - 'Line' => '37', - 'Name' => 'gnutls_str_array_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '168034' => { - 'Header' => 'cert.h', - 'Line' => '41', - 'Memb' => { - '0' => { - 'name' => 'cert_list', - 'offset' => '0', - 'type' => '5584' - }, - '1' => { - 'name' => 'cert_list_length', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'names', - 'offset' => '16', - 'type' => '167942' - }, - '3' => { - 'name' => 'ocsp_func', - 'offset' => '24', - 'type' => '4488' - }, - '4' => { - 'name' => 'ocsp_func_ptr', - 'offset' => '32', - 'type' => '216' - }, - '5' => { - 'name' => 'ocsp_response_file', - 'offset' => '40', - 'type' => '240' - } - }, - 'Name' => 'struct certs_st', - 'PrivateABI' => 1, - 'Size' => '48', - 'Type' => 'Struct' - }, - '168045' => { - 'BaseType' => '156162', - 'Name' => 'gnutls_params_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '168051' => { - 'BaseType' => '168034', - 'Name' => 'certs_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '168057' => { - 'BaseType' => '158545', - 'Name' => 'gnutls_certificate_retrieve_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '168063' => { - 'BaseType' => '159178', - 'Name' => 'gnutls_certificate_retrieve_function2*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '169' => { - 'Name' => 'signed char', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '176' => { - 'Name' => 'short', - 'Size' => '2', - 'Type' => 'Intrinsic' - }, - '1766110' => { - 'BaseType' => '891381', - 'Name' => 'gnutls_x509_crl_t const', - 'Size' => '8', - 'Type' => 'Const' - }, - '1767416' => { - 'BaseType' => '1767428', - 'Header' => 'x509.h', - 'Line' => '769', - 'Name' => 'gnutls_x509_crl_iter_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1767428' => { - 'BaseType' => '1767434', - 'Name' => 'struct gnutls_x509_crl_iter*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1767434' => { - 'Header' => 'x509_int.h', - 'Line' => '49', - 'Memb' => { - '0' => { - 'name' => 'rcache', - 'offset' => '0', - 'type' => '8286' - }, - '1' => { - 'name' => 'rcache_idx', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_crl_iter', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '17727' => { - 'BaseType' => '962', - 'Name' => 'uint8_t const', - 'Size' => '1', - 'Type' => 'Const' - }, - '1777253' => { - 'BaseType' => '906321', - 'Name' => 'gnutls_x509_crl_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1781941' => { - 'BaseType' => '1767416', - 'Name' => 'gnutls_x509_crl_iter_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '17851' => { - 'BaseType' => '75', - 'Name' => 'int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '183' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '131', - 'Name' => '__off_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1844296' => { - 'BaseType' => '1046529', - 'Name' => 'gnutls_x509_crq_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1880' => { - 'BaseType' => '157', - 'Name' => 'unsigned char[8]', - 'Size' => '8', - 'Type' => 'Array' - }, - '1890238' => { - 'BaseType' => '1890249', - 'Header' => 'x509-ext.h', - 'Line' => '37', - 'Name' => 'gnutls_subject_alt_names_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1890249' => { - 'BaseType' => '1890255', - 'Name' => 'struct gnutls_subject_alt_names_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1890255' => { - 'Line' => '36', - 'Memb' => { - '0' => { - 'name' => 'names', - 'offset' => '0', - 'type' => '2498920' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_subject_alt_names_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1890260' => { - 'BaseType' => '1890271', - 'Header' => 'x509-ext.h', - 'Line' => '107', - 'Name' => 'gnutls_x509_aki_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1890271' => { - 'BaseType' => '1890277', - 'Name' => 'struct gnutls_x509_aki_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1890277' => { - 'Line' => '688', - 'Memb' => { - '0' => { - 'name' => 'id', - 'offset' => '0', - 'type' => '3887' - }, - '1' => { - 'name' => 'cert_issuer', - 'offset' => '16', - 'type' => '1890255' - }, - '2' => { - 'name' => 'serial', - 'offset' => '32', - 'type' => '3887' - } - }, - 'Name' => 'struct gnutls_x509_aki_st', - 'PrivateABI' => 1, - 'Size' => '48', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1896' => { - 'Header' => 'gnutls_int.h', - 'Line' => '90', - 'Memb' => { - '0' => { - 'name' => 'i', - 'offset' => '0', - 'type' => '1880' - } - }, - 'Name' => 'struct uint64', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '1907' => { - 'Header' => 'gnutls.h', - 'Line' => '129', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CIPHER_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CIPHER_NULL', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_CIPHER_AES_128_GCM', - 'value' => '10' - }, - '11' => { - 'name' => 'GNUTLS_CIPHER_AES_256_GCM', - 'value' => '11' - }, - '12' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_192_CBC', - 'value' => '12' - }, - '13' => { - 'name' => 'GNUTLS_CIPHER_SALSA20_256', - 'value' => '13' - }, - '14' => { - 'name' => 'GNUTLS_CIPHER_ESTREAM_SALSA20_256', - 'value' => '14' - }, - '15' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_128_GCM', - 'value' => '15' - }, - '16' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_256_GCM', - 'value' => '16' - }, - '17' => { - 'name' => 'GNUTLS_CIPHER_RC2_40_CBC', - 'value' => '17' - }, - '18' => { - 'name' => 'GNUTLS_CIPHER_DES_CBC', - 'value' => '18' - }, - '19' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CCM', - 'value' => '19' - }, - '2' => { - 'name' => 'GNUTLS_CIPHER_ARCFOUR_128', - 'value' => '2' - }, - '20' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CCM', - 'value' => '20' - }, - '21' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CCM_8', - 'value' => '21' - }, - '22' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CCM_8', - 'value' => '22' - }, - '23' => { - 'name' => 'GNUTLS_CIPHER_CHACHA20_POLY1305', - 'value' => '23' - }, - '24' => { - 'name' => 'GNUTLS_CIPHER_IDEA_PGP_CFB', - 'value' => '200' - }, - '25' => { - 'name' => 'GNUTLS_CIPHER_3DES_PGP_CFB', - 'value' => '201' - }, - '26' => { - 'name' => 'GNUTLS_CIPHER_CAST5_PGP_CFB', - 'value' => '202' - }, - '27' => { - 'name' => 'GNUTLS_CIPHER_BLOWFISH_PGP_CFB', - 'value' => '203' - }, - '28' => { - 'name' => 'GNUTLS_CIPHER_SAFER_SK128_PGP_CFB', - 'value' => '204' - }, - '29' => { - 'name' => 'GNUTLS_CIPHER_AES128_PGP_CFB', - 'value' => '205' - }, - '3' => { - 'name' => 'GNUTLS_CIPHER_3DES_CBC', - 'value' => '3' - }, - '30' => { - 'name' => 'GNUTLS_CIPHER_AES192_PGP_CFB', - 'value' => '206' - }, - '31' => { - 'name' => 'GNUTLS_CIPHER_AES256_PGP_CFB', - 'value' => '207' - }, - '32' => { - 'name' => 'GNUTLS_CIPHER_TWOFISH_PGP_CFB', - 'value' => '208' - }, - '4' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CBC', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CBC', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_CIPHER_ARCFOUR_40', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_128_CBC', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_256_CBC', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_CIPHER_AES_192_CBC', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_cipher_algorithm', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1923475' => { - 'Header' => 'gnutls.h', - 'Line' => '682', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CRT_PRINT_FULL', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CRT_PRINT_ONELINE', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_CRT_PRINT_UNSIGNED_FULL', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_CRT_PRINT_COMPACT', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_CRT_PRINT_FULL_NUMBERS', - 'value' => '4' - } - }, - 'Name' => 'enum gnutls_certificate_print_formats', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1923523' => { - 'BaseType' => '1923475', - 'Header' => 'gnutls.h', - 'Line' => '688', - 'Name' => 'gnutls_certificate_print_formats_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1925558' => { - 'BaseType' => '156760', - 'Name' => 'gnutls_x509_crt_t const', - 'Size' => '8', - 'Type' => 'Const' - }, - '1927293' => { - 'BaseType' => '1927305', - 'Header' => 'x509.h', - 'Line' => '297', - 'Name' => 'gnutls_x509_name_constraints_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1927305' => { - 'BaseType' => '1927311', - 'Name' => 'struct gnutls_name_constraints_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1927311' => { - 'Header' => 'x509_int.h', - 'Line' => '445', - 'Memb' => { - '0' => { - 'name' => 'permitted', - 'offset' => '0', - 'type' => '2428073' - }, - '1' => { - 'name' => 'excluded', - 'offset' => '8', - 'type' => '2428073' - } - }, - 'Name' => 'struct gnutls_name_constraints_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '1927409' => { - 'Header' => 'x509.h', - 'Line' => '497', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_X509_QUALIFIER_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_X509_QUALIFIER_URI', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_X509_QUALIFIER_NOTICE', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_x509_qualifier_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1927445' => { - 'BaseType' => '1927409', - 'Header' => 'x509.h', - 'Line' => '500', - 'Name' => 'gnutls_x509_qualifier_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1927457' => { - 'Header' => 'x509.h', - 'Line' => '505', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '1927445' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '240' - }, - '2' => { - 'name' => 'size', - 'offset' => '16', - 'type' => '145' - } - }, - 'Name' => 'anon-struct-x509.h-505', - 'Size' => '24', - 'Type' => 'Struct' - }, - '1927506' => { - 'Header' => 'x509.h', - 'Line' => '502', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '240' - }, - '1' => { - 'name' => 'qualifiers', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'qualifier', - 'offset' => '16', - 'type' => '1927559' - } - }, - 'Name' => 'struct gnutls_x509_policy_st', - 'Size' => '208', - 'Type' => 'Struct' - }, - '1927559' => { - 'BaseType' => '1927457', - 'Name' => 'anon-struct-x509.h-505[8]', - 'Size' => '192', - 'Type' => 'Array' - }, - '1936508' => { - 'BaseType' => '1936519', - 'Header' => 'x509-ext.h', - 'Line' => '60', - 'Name' => 'gnutls_x509_crl_dist_points_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1936519' => { - 'BaseType' => '1936525', - 'Name' => 'struct gnutls_x509_crl_dist_points_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1936525' => { - 'Line' => '2161', - 'Memb' => { - '0' => { - 'name' => 'points', - 'offset' => '0', - 'type' => '2498995' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_crl_dist_points_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1936530' => { - 'BaseType' => '1936541', - 'Header' => 'x509-ext.h', - 'Line' => '83', - 'Name' => 'gnutls_x509_aia_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1936541' => { - 'BaseType' => '1936547', - 'Name' => 'struct gnutls_x509_aia_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1936547' => { - 'Line' => '2515', - 'Memb' => { - '0' => { - 'name' => 'aia', - 'offset' => '0', - 'type' => '2499050' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_aia_st', - 'PrivateABI' => 1, - 'Size' => '16', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1936574' => { - 'BaseType' => '1936585', - 'Header' => 'x509-ext.h', - 'Line' => '146', - 'Name' => 'gnutls_x509_key_purposes_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1936585' => { - 'BaseType' => '1936591', - 'Name' => 'struct gnutls_x509_key_purposes_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1936591' => { - 'Line' => '2872', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '2499056' - }, - '1' => { - 'name' => 'size', - 'offset' => '1024', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_key_purposes_st', - 'PrivateABI' => 1, - 'Size' => '1032', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1936596' => { - 'BaseType' => '1936607', - 'Header' => 'x509-ext.h', - 'Line' => '172', - 'Name' => 'gnutls_x509_policies_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1936607' => { - 'BaseType' => '1936613', - 'Name' => 'struct gnutls_x509_policies_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1936613' => { - 'Line' => '1673', - 'Memb' => { - '0' => { - 'name' => 'policy', - 'offset' => '0', - 'type' => '2498926' - }, - '1' => { - 'name' => 'size', - 'offset' => '13312', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_policies_st', - 'PrivateABI' => 1, - 'Size' => '13320', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '1936645' => { - 'Header' => 'x509_int.h', - 'Line' => '450', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'name', - 'offset' => '8', - 'type' => '3887' - }, - '2' => { - 'name' => 'next', - 'offset' => '24', - 'type' => '2428073' - } - }, - 'Name' => 'struct name_constraints_node_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '194' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '132', - 'Name' => '__off64_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '19734' => { - 'Header' => 'gnutls.h', - 'Line' => '611', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SHUT_RDWR', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_SHUT_WR', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_close_request_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1992831' => { - 'BaseType' => '1992842', - 'Header' => 'pkcs12.h', - 'Line' => '40', - 'Name' => 'gnutls_pkcs12_bag_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1992842' => { - 'BaseType' => '1992848', - 'Name' => 'struct gnutls_pkcs12_bag_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1992848' => { - 'Header' => 'x509_int.h', - 'Line' => '367', - 'Memb' => { - '0' => { - 'name' => 'element', - 'offset' => '0', - 'type' => '1993032' - }, - '1' => { - 'name' => 'bag_elements', - 'offset' => '1536', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_pkcs12_bag_int', - 'PrivateABI' => 1, - 'Size' => '1544', - 'Type' => 'Struct' - }, - '1992890' => { - 'Header' => 'pkcs12.h', - 'Line' => '97', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_BAG_EMPTY', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_BAG_PKCS8_ENCRYPTED_KEY', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_BAG_PKCS8_KEY', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_BAG_CERTIFICATE', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_BAG_CRL', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_BAG_SECRET', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_BAG_ENCRYPTED', - 'value' => '10' - }, - '7' => { - 'name' => 'GNUTLS_BAG_UNKNOWN', - 'value' => '20' - } - }, - 'Name' => 'enum gnutls_pkcs12_bag_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '1992955' => { - 'BaseType' => '1992890', - 'Header' => 'pkcs12.h', - 'Line' => '110', - 'Name' => 'gnutls_pkcs12_bag_type_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '1992966' => { - 'Header' => 'x509_int.h', - 'Line' => '360', - 'Memb' => { - '0' => { - 'name' => 'data', - 'offset' => '0', - 'type' => '3887' - }, - '1' => { - 'name' => 'type', - 'offset' => '16', - 'type' => '1992955' - }, - '2' => { - 'name' => 'local_key_id', - 'offset' => '24', - 'type' => '3887' - }, - '3' => { - 'name' => 'friendly_name', - 'offset' => '40', - 'type' => '240' - } - }, - 'Name' => 'struct bag_element', - 'PrivateABI' => 1, - 'Size' => '48', - 'Type' => 'Struct' - }, - '1993032' => { - 'BaseType' => '1992966', - 'Name' => 'struct bag_element[32]', - 'Size' => '1536', - 'Type' => 'Array' - }, - '2007529' => { - 'BaseType' => '903650', - 'Name' => 'gnutls_pkcs12_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2031104' => { - 'BaseType' => '1992831', - 'Name' => 'gnutls_pkcs12_bag_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '205' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '139', - 'Name' => '__time_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2053723' => { - 'BaseType' => '2053734', - 'Header' => 'pkcs7.h', - 'Line' => '43', - 'Name' => 'gnutls_pkcs7_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2053734' => { - 'BaseType' => '2053740', - 'Name' => 'struct gnutls_pkcs7_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2053740' => { - 'Header' => 'x509_int.h', - 'Line' => '106', - 'Memb' => { - '0' => { - 'name' => 'pkcs7', - 'offset' => '0', - 'type' => '8286' - }, - '1' => { - 'name' => 'encap_data_oid', - 'offset' => '8', - 'type' => '400888' - }, - '2' => { - 'name' => 'der_signed_data', - 'offset' => '136', - 'type' => '3887' - }, - '3' => { - 'name' => 'signed_data', - 'offset' => '152', - 'type' => '8286' - }, - '4' => { - 'name' => 'expanded', - 'offset' => '160', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_pkcs7_int', - 'PrivateABI' => 1, - 'Size' => '168', - 'Type' => 'Struct' - }, - '2053813' => { - 'BaseType' => '2065241', - 'Header' => 'pkcs7.h', - 'Line' => '83', - 'Name' => 'gnutls_pkcs7_attrs_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2053830' => { - 'Header' => 'x509_int.h', - 'Line' => '100', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '240' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '3887' - }, - '2' => { - 'name' => 'next', - 'offset' => '24', - 'type' => '2065241' - } - }, - 'Name' => 'struct gnutls_pkcs7_attrs_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '2053879' => { - 'Header' => 'pkcs7.h', - 'Line' => '85', - 'Memb' => { - '0' => { - 'name' => 'algo', - 'offset' => '0', - 'type' => '3140' - }, - '1' => { - 'name' => 'sig', - 'offset' => '8', - 'type' => '3887' - }, - '2' => { - 'name' => 'issuer_dn', - 'offset' => '24', - 'type' => '3887' - }, - '3' => { - 'name' => 'signer_serial', - 'offset' => '40', - 'type' => '3887' - }, - '4' => { - 'name' => 'issuer_keyid', - 'offset' => '56', - 'type' => '3887' - }, - '5' => { - 'name' => 'signing_time', - 'offset' => '72', - 'type' => '268' - }, - '6' => { - 'name' => 'signed_attrs', - 'offset' => '80', - 'type' => '2053813' - }, - '7' => { - 'name' => 'unsigned_attrs', - 'offset' => '88', - 'type' => '2053813' - }, - '8' => { - 'name' => 'pad', - 'offset' => '96', - 'type' => '1672678' - } - }, - 'Name' => 'struct gnutls_pkcs7_signature_info_st', - 'Size' => '160', - 'Type' => 'Struct' - }, - '2054016' => { - 'BaseType' => '2053879', - 'Header' => 'pkcs7.h', - 'Line' => '95', - 'Name' => 'gnutls_pkcs7_signature_info_st', - 'Size' => '160', - 'Type' => 'Typedef' - }, - '2062707' => { - 'BaseType' => '2053830', - 'Header' => 'x509_int.h', - 'Line' => '104', - 'Name' => 'gnutls_pkcs7_attrs_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '2065241' => { - 'BaseType' => '2062707', - 'Name' => 'gnutls_pkcs7_attrs_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2072785' => { - 'BaseType' => '2054016', - 'Name' => 'gnutls_pkcs7_signature_info_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2083649' => { - 'BaseType' => '2053723', - 'Name' => 'gnutls_pkcs7_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '20932' => { - 'BaseType' => '8744', - 'Header' => 'gnutls.h', - 'Line' => '1130', - 'Name' => 'gnutls_packet_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2104786' => { - 'BaseType' => '2053813', - 'Name' => 'gnutls_pkcs7_attrs_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2122' => { - 'BaseType' => '1907', - 'Header' => 'gnutls.h', - 'Line' => '166', - 'Name' => 'gnutls_cipher_algorithm_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '2126624' => { - 'BaseType' => '157', - 'Name' => 'unsigned char[2]', - 'Size' => '2', - 'Type' => 'Array' - }, - '2136943' => { - 'BaseType' => '2122', - 'Name' => 'gnutls_cipher_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '21563' => { - 'Name' => 'int(*)(void**)', - 'Param' => { - '0' => { - 'type' => '4576' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '216' => { - 'BaseType' => '1', - 'Name' => 'void*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '218' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '172', - 'Name' => '__ssize_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '22400' => { - 'BaseType' => '13599', - 'Header' => 'gnutls.h', - 'Line' => '2520', - 'Name' => 'gnutls_buffer_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2242' => { - 'Header' => 'gnutls.h', - 'Line' => '206', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_KX_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_KX_RSA', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_KX_DHE_PSK', - 'value' => '10' - }, - '11' => { - 'name' => 'GNUTLS_KX_ANON_ECDH', - 'value' => '11' - }, - '12' => { - 'name' => 'GNUTLS_KX_ECDHE_RSA', - 'value' => '12' - }, - '13' => { - 'name' => 'GNUTLS_KX_ECDHE_ECDSA', - 'value' => '13' - }, - '14' => { - 'name' => 'GNUTLS_KX_ECDHE_PSK', - 'value' => '14' - }, - '15' => { - 'name' => 'GNUTLS_KX_RSA_PSK', - 'value' => '15' - }, - '2' => { - 'name' => 'GNUTLS_KX_DHE_DSS', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_KX_DHE_RSA', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_KX_ANON_DH', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_KX_SRP', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_KX_RSA_EXPORT', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_KX_SRP_RSA', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_KX_SRP_DSS', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_KX_PSK', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_kx_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '22491' => { - 'BaseType' => '22503', - 'Header' => 'gnutls.h', - 'Line' => '2537', - 'Name' => 'gnutls_ext_recv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '22503' => { - 'Name' => 'int(*)(gnutls_session_t, unsigned char const*, size_t)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '5465' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '22540' => { - 'BaseType' => '22552', - 'Header' => 'gnutls.h', - 'Line' => '2541', - 'Name' => 'gnutls_ext_send_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '22552' => { - 'Name' => 'int(*)(gnutls_session_t, gnutls_buffer_t)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '22400' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '22578' => { - 'BaseType' => '22590', - 'Header' => 'gnutls.h', - 'Line' => '2544', - 'Name' => 'gnutls_ext_deinit_data_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '22590' => { - 'Name' => 'void(*)(gnutls_ext_priv_data_t)', - 'Param' => { - '0' => { - 'type' => '5453' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '22607' => { - 'BaseType' => '22619', - 'Header' => 'gnutls.h', - 'Line' => '2546', - 'Name' => 'gnutls_ext_pack_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '22619' => { - 'Name' => 'int(*)(gnutls_ext_priv_data_t, gnutls_buffer_t)', - 'Param' => { - '0' => { - 'type' => '5453' - }, - '1' => { - 'type' => '22400' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '22645' => { - 'BaseType' => '22657', - 'Header' => 'gnutls.h', - 'Line' => '2549', - 'Name' => 'gnutls_ext_unpack_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '22657' => { - 'Name' => 'int(*)(gnutls_buffer_t, gnutls_ext_priv_data_t*)', - 'Param' => { - '0' => { - 'type' => '22400' - }, - '1' => { - 'type' => '22683' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '22683' => { - 'BaseType' => '5453', - 'Name' => 'gnutls_ext_priv_data_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '22733' => { - 'Header' => 'gnutls.h', - 'Line' => '2573', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_EXT_ANY', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_EXT_APPLICATION', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_EXT_TLS', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_EXT_MANDATORY', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_EXT_NONE', - 'value' => '4' - } - }, - 'Name' => 'enum gnutls_ext_parse_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2275852' => { - 'BaseType' => '2275864', - 'Header' => 'x509.h', - 'Line' => '1494', - 'Name' => 'gnutls_verify_output_function', - 'Type' => 'Typedef' - }, - '2275864' => { - 'Name' => 'int()(gnutls_x509_crt_t, gnutls_x509_crt_t, gnutls_x509_crl_t, unsigned int)', - 'Param' => { - '0' => { - 'type' => '156760' - }, - '1' => { - 'type' => '156760' - }, - '2' => { - 'type' => '891381' - }, - '3' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '2285368' => { - 'BaseType' => '2275852', - 'Name' => 'gnutls_verify_output_function*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '22864' => { - 'BaseType' => '145', - 'Name' => 'unsigned int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2286759' => { - 'BaseType' => '1925558', - 'Name' => 'gnutls_x509_crt_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2287463' => { - 'BaseType' => '1766110', - 'Name' => 'gnutls_x509_crl_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '229' => { - 'BaseType' => '45', - 'Header' => 'types.h', - 'Line' => '175', - 'Name' => '__syscall_slong_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2296' => { - 'Header' => 'gnutls.h', - 'Line' => '238', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CRD_CERTIFICATE', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_CRD_ANON', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_CRD_SRP', - 'value' => '3' - }, - '3' => { - 'name' => 'GNUTLS_CRD_PSK', - 'value' => '4' - }, - '4' => { - 'name' => 'GNUTLS_CRD_IA', - 'value' => '5' - } - }, - 'Name' => 'enum gnutls_credentials_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2310683' => { - 'BaseType' => '2332381', - 'Header' => 'x509.h', - 'Line' => '683', - 'Name' => 'gnutls_x509_dn_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2332133' => { - 'BaseType' => '2310683', - 'Name' => 'gnutls_x509_dn_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2332381' => { - 'BaseType' => '167816', - 'Name' => 'gnutls_x509_dn_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2335241' => { - 'BaseType' => '1927506', - 'Name' => 'struct gnutls_x509_policy_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2362028' => { - 'Header' => 'x509.h', - 'Line' => '685', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '3887' - }, - '1' => { - 'name' => 'value', - 'offset' => '16', - 'type' => '3887' - }, - '2' => { - 'name' => 'value_tag', - 'offset' => '32', - 'type' => '68' - } - }, - 'Name' => 'struct gnutls_x509_ava_st', - 'Size' => '40', - 'Type' => 'Struct' - }, - '2362081' => { - 'BaseType' => '2362028', - 'Header' => 'x509.h', - 'Line' => '689', - 'Name' => 'gnutls_x509_ava_st', - 'Size' => '40', - 'Type' => 'Typedef' - }, - '2372356' => { - 'BaseType' => '2362081', - 'Name' => 'gnutls_x509_ava_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2384046' => { - 'BaseType' => '1927506', - 'Name' => 'struct gnutls_x509_policy_st const', - 'Size' => '208', - 'Type' => 'Const' - }, - '2393514' => { - 'BaseType' => '2384046', - 'Name' => 'struct gnutls_x509_policy_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '240' => { - 'BaseType' => '121', - 'Name' => 'char*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2423' => { - 'Header' => 'gnutls.h', - 'Line' => '282', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_MAC_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_MAC_NULL', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_MAC_SHA3_224', - 'value' => '10' - }, - '11' => { - 'name' => 'GNUTLS_MAC_SHA3_256', - 'value' => '11' - }, - '12' => { - 'name' => 'GNUTLS_MAC_SHA3_384', - 'value' => '12' - }, - '13' => { - 'name' => 'GNUTLS_MAC_SHA3_512', - 'value' => '13' - }, - '14' => { - 'name' => 'GNUTLS_MAC_AEAD', - 'value' => '200' - }, - '15' => { - 'name' => 'GNUTLS_MAC_UMAC_96', - 'value' => '201' - }, - '16' => { - 'name' => 'GNUTLS_MAC_UMAC_128', - 'value' => '202' - }, - '2' => { - 'name' => 'GNUTLS_MAC_MD5', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_MAC_SHA1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_MAC_RMD160', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_MAC_MD2', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_MAC_SHA256', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_MAC_SHA384', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_MAC_SHA512', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_MAC_SHA224', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_mac_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2423274' => { - 'BaseType' => '1936645', - 'Header' => 'x509_int.h', - 'Line' => '454', - 'Name' => 'name_constraints_node_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '2428073' => { - 'BaseType' => '2423274', - 'Name' => 'name_constraints_node_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2431798' => { - 'BaseType' => '1927293', - 'Name' => 'gnutls_x509_name_constraints_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2442897' => { - 'BaseType' => '2442909', - 'Header' => 'x509.h', - 'Line' => '1407', - 'Name' => 'gnutls_x509_trust_list_iter_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2442909' => { - 'BaseType' => '2442915', - 'Name' => 'struct gnutls_x509_trust_list_iter*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2442915' => { - 'Line' => '58', - 'Memb' => { - '0' => { - 'name' => 'node_index', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'ca_index', - 'offset' => '4', - 'type' => '145' - }, - '2' => { - 'name' => 'pkcs11_list', - 'offset' => '8', - 'type' => '1455041' - }, - '3' => { - 'name' => 'pkcs11_index', - 'offset' => '16', - 'type' => '145' - }, - '4' => { - 'name' => 'pkcs11_size', - 'offset' => '20', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_trust_list_iter', - 'PrivateABI' => 1, - 'Size' => '24', - 'Source' => 'verify-high.c', - 'Type' => 'Struct' - }, - '245081' => { - 'Header' => 'gnutls.h', - 'Line' => '670', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_X509_FMT_DER', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_X509_FMT_PEM', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_x509_crt_fmt_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2452061' => { - 'Line' => '38', - 'Memb' => { - '0' => { - 'name' => 'cert', - 'offset' => '0', - 'type' => '156760' - }, - '1' => { - 'name' => 'name', - 'offset' => '8', - 'type' => '7881' - }, - '2' => { - 'name' => 'name_size', - 'offset' => '264', - 'type' => '145' - } - }, - 'Name' => 'struct named_cert_st', - 'PrivateABI' => 1, - 'Size' => '272', - 'Source' => 'verify-high.c', - 'Type' => 'Struct' - }, - '2452112' => { - 'BaseType' => '2452061', - 'Name' => 'struct named_cert_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2459323' => { - 'BaseType' => '2442897', - 'Name' => 'gnutls_x509_trust_list_iter_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '246' => { - 'BaseType' => '145', - 'Header' => 'types.h', - 'Line' => '189', - 'Name' => '__socklen_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '248357' => { - 'BaseType' => '248368', - 'Header' => 'abstract.h', - 'Line' => '56', - 'Name' => 'gnutls_privkey_sign_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '248368' => { - 'Name' => 'int(*)(gnutls_privkey_t, void*, gnutls_datum_t const*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '156725' - }, - '1' => { - 'type' => '216' - }, - '2' => { - 'type' => '4430' - }, - '3' => { - 'type' => '4531' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '248404' => { - 'BaseType' => '248368', - 'Header' => 'abstract.h', - 'Line' => '61', - 'Name' => 'gnutls_privkey_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '248415' => { - 'BaseType' => '248426', - 'Header' => 'abstract.h', - 'Line' => '67', - 'Name' => 'gnutls_privkey_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '248426' => { - 'Name' => 'void(*)(gnutls_privkey_t, void*)', - 'Param' => { - '0' => { - 'type' => '156725' - }, - '1' => { - 'type' => '216' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '248448' => { - 'BaseType' => '248459', - 'Header' => 'abstract.h', - 'Line' => '76', - 'Name' => 'gnutls_privkey_info_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '248459' => { - 'Name' => 'int(*)(gnutls_privkey_t, unsigned int, void*)', - 'Param' => { - '0' => { - 'type' => '156725' - }, - '1' => { - 'type' => '145' - }, - '2' => { - 'type' => '216' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '2498871' => { - 'Header' => 'x509_ext_int.h', - 'Line' => '26', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'san', - 'offset' => '8', - 'type' => '3887' - }, - '2' => { - 'name' => 'othername_oid', - 'offset' => '24', - 'type' => '3887' - } - }, - 'Name' => 'struct name_st', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '2498920' => { - 'BaseType' => '2498871', - 'Name' => 'struct name_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2498926' => { - 'BaseType' => '1927506', - 'Name' => 'struct gnutls_x509_policy_st[64]', - 'Size' => '13312', - 'Type' => 'Array' - }, - '2498942' => { - 'Line' => '2155', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'san', - 'offset' => '8', - 'type' => '3887' - }, - '2' => { - 'name' => 'reasons', - 'offset' => '24', - 'type' => '145' - } - }, - 'Name' => 'struct crl_dist_point_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '2498995' => { - 'BaseType' => '2498942', - 'Name' => 'struct crl_dist_point_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2499001' => { - 'Line' => '2516', - 'Memb' => { - '0' => { - 'name' => 'oid', - 'offset' => '0', - 'type' => '3887' - }, - '1' => { - 'name' => 'san_type', - 'offset' => '16', - 'type' => '145' - }, - '2' => { - 'name' => 'san', - 'offset' => '24', - 'type' => '3887' - } - }, - 'Name' => 'anon-struct-x509_ext.c-2516', - 'PrivateABI' => 1, - 'Size' => '40', - 'Source' => 'x509_ext.c', - 'Type' => 'Struct' - }, - '2499050' => { - 'BaseType' => '2499001', - 'Name' => 'anon-struct-x509_ext.c-2516*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2499056' => { - 'BaseType' => '3887', - 'Name' => 'gnutls_datum_t[64]', - 'Size' => '1024', - 'Type' => 'Array' - }, - '2504149' => { - 'BaseType' => '1936574', - 'Name' => 'gnutls_x509_key_purposes_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2508025' => { - 'BaseType' => '1936530', - 'Name' => 'gnutls_x509_aia_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2511039' => { - 'BaseType' => '1936508', - 'Name' => 'gnutls_x509_crl_dist_points_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2515899' => { - 'BaseType' => '1936596', - 'Name' => 'gnutls_x509_policies_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2524447' => { - 'BaseType' => '1890260', - 'Name' => 'gnutls_x509_aki_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2530214' => { - 'BaseType' => '1890238', - 'Name' => 'gnutls_subject_alt_names_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2533' => { - 'Header' => 'gnutls.h', - 'Line' => '320', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_DIG_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_DIG_NULL', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_DIG_SHA3_224', - 'value' => '10' - }, - '11' => { - 'name' => 'GNUTLS_DIG_SHA3_256', - 'value' => '11' - }, - '12' => { - 'name' => 'GNUTLS_DIG_SHA3_384', - 'value' => '12' - }, - '13' => { - 'name' => 'GNUTLS_DIG_SHA3_512', - 'value' => '13' - }, - '2' => { - 'name' => 'GNUTLS_DIG_MD5', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_DIG_SHA1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_DIG_RMD160', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_DIG_MD2', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_DIG_SHA256', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_DIG_SHA384', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_DIG_SHA512', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_DIG_SHA224', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_digest_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '257' => { - 'BaseType' => '218', - 'Header' => 'types.h', - 'Line' => '109', - 'Name' => 'ssize_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '257252' => { - 'Header' => 'abstract_int.h', - 'Line' => '40', - 'Memb' => { - '0' => { - 'name' => 'sign_func', - 'offset' => '0', - 'type' => '248357' - }, - '1' => { - 'name' => 'decrypt_func', - 'offset' => '8', - 'type' => '248404' - }, - '2' => { - 'name' => 'deinit_func', - 'offset' => '16', - 'type' => '248415' - }, - '3' => { - 'name' => 'info_func', - 'offset' => '24', - 'type' => '248448' - }, - '4' => { - 'name' => 'userdata', - 'offset' => '32', - 'type' => '216' - } - }, - 'Name' => 'anon-struct-abstract_int.h-40', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '257321' => { - 'Header' => 'abstract_int.h', - 'Line' => '32', - 'Memb' => { - '0' => { - 'name' => 'x509', - 'offset' => '0', - 'type' => '156748' - }, - '1' => { - 'name' => 'pkcs11', - 'offset' => '0', - 'type' => '158282' - }, - '2' => { - 'name' => 'openpgp', - 'offset' => '0', - 'type' => '158215' - }, - '3' => { - 'name' => 'ext', - 'offset' => '0', - 'type' => '257252' - } - }, - 'Name' => 'anon-union-abstract_int.h-32', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Union' - }, - '257390' => { - 'BaseType' => '962', - 'Name' => 'uint8_t[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '2583' => { - 'Header' => 'gnutls.h', - 'Line' => '343', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_COMP_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_COMP_NULL', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_COMP_DEFLATE', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_COMP_ZLIB', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_compression_method_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2599573' => { - 'BaseType' => '893892', - 'Name' => 'gnutls_x509_tlsfeatures_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '261573' => { - 'BaseType' => '3411', - 'Name' => 'gnutls_dh_params_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '263542' => { - 'BaseType' => '341', - 'Header' => 'stdio.h', - 'Line' => '48', - 'Name' => 'FILE', - 'Size' => '216', - 'Type' => 'Typedef' - }, - '2650307' => { - 'BaseType' => '2650318', - 'Header' => 'ocsp.h', - 'Line' => '141', - 'Name' => 'gnutls_ocsp_req_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2650318' => { - 'BaseType' => '2650324', - 'Name' => 'struct gnutls_ocsp_req_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2650324' => { - 'Line' => '36', - 'Memb' => { - '0' => { - 'name' => 'req', - 'offset' => '0', - 'type' => '8286' - }, - '1' => { - 'name' => 'init', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_ocsp_req_int', - 'PrivateABI' => 1, - 'Size' => '16', - 'Source' => 'ocsp.c', - 'Type' => 'Struct' - }, - '2665173' => { - 'BaseType' => '904095', - 'Name' => 'gnutls_ocsp_resp_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2665542' => { - 'BaseType' => '2650307', - 'Name' => 'gnutls_ocsp_req_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '268' => { - 'BaseType' => '205', - 'Header' => 'time.h', - 'Line' => '75', - 'Name' => 'time_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '2684215' => { - 'Header' => 'ocsp.h', - 'Line' => '47', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_OCSP_PRINT_FULL', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_OCSP_PRINT_COMPACT', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_ocsp_print_formats_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2684244' => { - 'BaseType' => '2684215', - 'Header' => 'ocsp.h', - 'Line' => '50', - 'Name' => 'gnutls_ocsp_print_formats_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '2706' => { - 'Header' => 'gnutls.h', - 'Line' => '516', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_HANDSHAKE_HELLO_REQUEST', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_HELLO', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE', - 'value' => '16' - }, - '11' => { - 'name' => 'GNUTLS_HANDSHAKE_FINISHED', - 'value' => '20' - }, - '12' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_STATUS', - 'value' => '22' - }, - '13' => { - 'name' => 'GNUTLS_HANDSHAKE_SUPPLEMENTAL', - 'value' => '23' - }, - '14' => { - 'name' => 'GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC', - 'value' => '254' - }, - '15' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_HELLO_V2', - 'value' => '1024' - }, - '2' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_HELLO', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_HANDSHAKE_NEW_SESSION_TICKET', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_PKT', - 'value' => '11' - }, - '6' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE', - 'value' => '12' - }, - '7' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST', - 'value' => '13' - }, - '8' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_HELLO_DONE', - 'value' => '14' - }, - '9' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY', - 'value' => '15' - } - }, - 'Name' => 'enum gnutls_handshake_description_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2728514' => { - 'Header' => 'gnutls.h', - 'Line' => '1191', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_NAME_DNS', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_server_name_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '279' => { - 'BaseType' => '176', - 'Header' => 'types.h', - 'Line' => '195', - 'Name' => 'int16_t', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '2804' => { - 'Header' => 'gnutls.h', - 'Line' => '642', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SSL3', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_TLS1_0', - 'value' => '2' - }, - '10' => { - 'name' => 'GNUTLS_TLS_VERSION_MAX', - 'value' => '4' - }, - '11' => { - 'name' => 'GNUTLS_VERSION_UNKNOWN', - 'value' => '255' - }, - '2' => { - 'name' => 'GNUTLS_TLS1', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_TLS1_1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_TLS1_2', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_DTLS0_9', - 'value' => '200' - }, - '6' => { - 'name' => 'GNUTLS_DTLS1_0', - 'value' => '201' - }, - '7' => { - 'name' => 'GNUTLS_DTLS1_2', - 'value' => '202' - }, - '8' => { - 'name' => 'GNUTLS_DTLS_VERSION_MIN', - 'value' => '200' - }, - '9' => { - 'name' => 'GNUTLS_DTLS_VERSION_MAX', - 'value' => '202' - } - }, - 'Name' => 'enum gnutls_protocol_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '282168' => { - 'BaseType' => '263542', - 'Name' => 'FILE*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '2854' => { - 'Header' => 'gnutls.h', - 'Line' => '658', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CRT_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CRT_X509', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_CRT_OPENPGP', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_CRT_RAW', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_certificate_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '287418' => { - 'BaseType' => '287430', - 'Header' => 'gnutls.h', - 'Line' => '879', - 'Name' => 'gnutls_priority_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '287430' => { - 'BaseType' => '3469', - 'Name' => 'struct gnutls_priority_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '290' => { - 'Header' => 'time.h', - 'Line' => '120', - 'Memb' => { - '0' => { - 'name' => 'tv_sec', - 'offset' => '0', - 'type' => '205' - }, - '1' => { - 'name' => 'tv_nsec', - 'offset' => '8', - 'type' => '229' - } - }, - 'Name' => 'struct timespec', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '2916' => { - 'Header' => 'gnutls.h', - 'Line' => '711', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PK_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PK_RSA', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PK_DSA', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PK_DH', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_PK_ECDSA', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_PK_ECDHX', - 'value' => '5' - } - }, - 'Name' => 'enum gnutls_pk_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2949240' => { - 'Header' => 'gnutls.h', - 'Line' => '1277', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SRTP_AES128_CM_HMAC_SHA1_80', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_SRTP_AES128_CM_HMAC_SHA1_32', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_SRTP_NULL_HMAC_SHA1_80', - 'value' => '5' - }, - '3' => { - 'name' => 'GNUTLS_SRTP_NULL_HMAC_SHA1_32', - 'value' => '6' - } - }, - 'Name' => 'enum gnutls_srtp_profile_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2963145' => { - 'BaseType' => '2949240', - 'Name' => 'gnutls_srtp_profile_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '300537' => { - 'BaseType' => '300543', - 'Name' => 'unsigned int const**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '300543' => { - 'BaseType' => '152', - 'Name' => 'unsigned int const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '301410' => { - 'BaseType' => '110', - 'Name' => 'char const**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '304052' => { - 'BaseType' => '287418', - 'Name' => 'gnutls_priority_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '31169' => { - 'BaseType' => '13534', - 'Header' => 'extensions.h', - 'Line' => '88', - 'Name' => 'extension_entry_st', - 'Size' => '64', - 'Type' => 'Typedef' - }, - '3140' => { - 'Header' => 'gnutls.h', - 'Line' => '789', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SIGN_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA1', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA512', - 'value' => '8' - }, - '11' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA224', - 'value' => '9' - }, - '12' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA224', - 'value' => '10' - }, - '13' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA256', - 'value' => '11' - }, - '14' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA1', - 'value' => '12' - }, - '15' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA224', - 'value' => '13' - }, - '16' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA256', - 'value' => '14' - }, - '17' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA384', - 'value' => '15' - }, - '18' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA512', - 'value' => '16' - }, - '19' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA384', - 'value' => '17' - }, - '2' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA', - 'value' => '1' - }, - '20' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA512', - 'value' => '18' - }, - '21' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA3_224', - 'value' => '20' - }, - '22' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA3_256', - 'value' => '21' - }, - '23' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA3_384', - 'value' => '22' - }, - '24' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA3_512', - 'value' => '23' - }, - '25' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA3_224', - 'value' => '24' - }, - '26' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA3_256', - 'value' => '25' - }, - '27' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA3_384', - 'value' => '26' - }, - '28' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA3_512', - 'value' => '27' - }, - '29' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA3_224', - 'value' => '28' - }, - '3' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA1', - 'value' => '2' - }, - '30' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA3_256', - 'value' => '29' - }, - '31' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA3_384', - 'value' => '30' - }, - '32' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA3_512', - 'value' => '31' - }, - '4' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA', - 'value' => '2' - }, - '5' => { - 'name' => 'GNUTLS_SIGN_RSA_MD5', - 'value' => '3' - }, - '6' => { - 'name' => 'GNUTLS_SIGN_RSA_MD2', - 'value' => '4' - }, - '7' => { - 'name' => 'GNUTLS_SIGN_RSA_RMD160', - 'value' => '5' - }, - '8' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA256', - 'value' => '6' - }, - '9' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA384', - 'value' => '7' - } - }, - 'Name' => 'enum gnutls_sign_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '3208' => { - 'Header' => 'gnutls.h', - 'Line' => '811', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_ECC_CURVE_INVALID', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP224R1', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP256R1', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP384R1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP521R1', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP192R1', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_ECC_CURVE_X25519', - 'value' => '6' - } - }, - 'Name' => 'enum gnutls_ecc_curve_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '32662' => { - 'BaseType' => '20932', - 'Name' => 'gnutls_packet_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3300' => { - 'Header' => 'gnutls.h', - 'Line' => '847', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SEC_PARAM_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_SEC_PARAM_INSECURE', - 'value' => '5' - }, - '10' => { - 'name' => 'GNUTLS_SEC_PARAM_FUTURE', - 'value' => '50' - }, - '2' => { - 'name' => 'GNUTLS_SEC_PARAM_EXPORT', - 'value' => '10' - }, - '3' => { - 'name' => 'GNUTLS_SEC_PARAM_VERY_WEAK', - 'value' => '15' - }, - '4' => { - 'name' => 'GNUTLS_SEC_PARAM_WEAK', - 'value' => '20' - }, - '5' => { - 'name' => 'GNUTLS_SEC_PARAM_LOW', - 'value' => '25' - }, - '6' => { - 'name' => 'GNUTLS_SEC_PARAM_LEGACY', - 'value' => '30' - }, - '7' => { - 'name' => 'GNUTLS_SEC_PARAM_MEDIUM', - 'value' => '35' - }, - '8' => { - 'name' => 'GNUTLS_SEC_PARAM_HIGH', - 'value' => '40' - }, - '9' => { - 'name' => 'GNUTLS_SEC_PARAM_ULTRA', - 'value' => '45' - } - }, - 'Name' => 'enum gnutls_sec_param_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '3306423' => { - 'BaseType' => '2423', - 'Name' => 'gnutls_mac_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3306429' => { - 'BaseType' => '2804', - 'Name' => 'gnutls_protocol_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3312' => { - 'BaseType' => '216', - 'Header' => 'gnutls.h', - 'Line' => '866', - 'Name' => 'gnutls_transport_ptr_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3324' => { - 'BaseType' => '3336', - 'Header' => 'gnutls.h', - 'Line' => '869', - 'Name' => 'gnutls_session_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3336' => { - 'BaseType' => '3342', - 'Name' => 'struct gnutls_session_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '334' => { - 'BaseType' => '340', - 'Name' => 'void const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3342' => { - 'Header' => 'gnutls_int.h', - 'Line' => '1067', - 'Memb' => { - '0' => { - 'name' => 'security_parameters', - 'offset' => '0', - 'type' => '11107' - }, - '1' => { - 'name' => 'record_parameters', - 'offset' => '224', - 'type' => '13557' - }, - '2' => { - 'name' => 'internals', - 'offset' => '352', - 'type' => '13545' - }, - '3' => { - 'name' => 'key', - 'offset' => '5968', - 'type' => '9149' - } - }, - 'Name' => 'struct gnutls_session_int', - 'PrivateABI' => 1, - 'Size' => '7016', - 'Type' => 'Struct' - }, - '340' => { - 'BaseType' => '1', - 'Name' => 'void const', - 'Type' => 'Const' - }, - '341' => { - 'Header' => 'libio.h', - 'Line' => '241', - 'Memb' => { - '0' => { - 'name' => '_flags', - 'offset' => '0', - 'type' => '75' - }, - '1' => { - 'name' => '_IO_read_ptr', - 'offset' => '8', - 'type' => '240' - }, - '10' => { - 'name' => '_IO_backup_base', - 'offset' => '80', - 'type' => '240' - }, - '11' => { - 'name' => '_IO_save_end', - 'offset' => '88', - 'type' => '240' - }, - '12' => { - 'name' => '_markers', - 'offset' => '96', - 'type' => '778' - }, - '13' => { - 'name' => '_chain', - 'offset' => '104', - 'type' => '784' - }, - '14' => { - 'name' => '_fileno', - 'offset' => '112', - 'type' => '75' - }, - '15' => { - 'name' => '_flags2', - 'offset' => '116', - 'type' => '75' - }, - '16' => { - 'name' => '_old_offset', - 'offset' => '120', - 'type' => '183' - }, - '17' => { - 'name' => '_cur_column', - 'offset' => '128', - 'type' => '103' - }, - '18' => { - 'name' => '_vtable_offset', - 'offset' => '130', - 'type' => '169' - }, - '19' => { - 'name' => '_shortbuf', - 'offset' => '131', - 'type' => '790' - }, - '2' => { - 'name' => '_IO_read_end', - 'offset' => '16', - 'type' => '240' - }, - '20' => { - 'name' => '_lock', - 'offset' => '136', - 'type' => '806' - }, - '21' => { - 'name' => '_offset', - 'offset' => '144', - 'type' => '194' - }, - '22' => { - 'name' => '__pad1', - 'offset' => '152', - 'type' => '216' - }, - '23' => { - 'name' => '__pad2', - 'offset' => '160', - 'type' => '216' - }, - '24' => { - 'name' => '__pad3', - 'offset' => '168', - 'type' => '216' - }, - '25' => { - 'name' => '__pad4', - 'offset' => '176', - 'type' => '216' - }, - '26' => { - 'name' => '__pad5', - 'offset' => '184', - 'type' => '52' - }, - '27' => { - 'name' => '_mode', - 'offset' => '192', - 'type' => '75' - }, - '28' => { - 'name' => '_unused2', - 'offset' => '196', - 'type' => '812' - }, - '3' => { - 'name' => '_IO_read_base', - 'offset' => '24', - 'type' => '240' - }, - '4' => { - 'name' => '_IO_write_base', - 'offset' => '32', - 'type' => '240' - }, - '5' => { - 'name' => '_IO_write_ptr', - 'offset' => '40', - 'type' => '240' - }, - '6' => { - 'name' => '_IO_write_end', - 'offset' => '48', - 'type' => '240' - }, - '7' => { - 'name' => '_IO_buf_base', - 'offset' => '56', - 'type' => '240' - }, - '8' => { - 'name' => '_IO_buf_end', - 'offset' => '64', - 'type' => '240' - }, - '9' => { - 'name' => '_IO_save_base', - 'offset' => '72', - 'type' => '240' - } - }, - 'Name' => 'struct _IO_FILE', - 'PrivateABI' => 1, - 'Size' => '216', - 'Type' => 'Struct' - }, - '3411' => { - 'BaseType' => '3423', - 'Header' => 'gnutls.h', - 'Line' => '872', - 'Name' => 'gnutls_dh_params_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3423' => { - 'BaseType' => '3429', - 'Name' => 'struct gnutls_dh_params_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3429' => { - 'Header' => 'gnutls_int.h', - 'Line' => '711', - 'Memb' => { - '0' => { - 'name' => 'params', - 'offset' => '0', - 'type' => '11235' - }, - '1' => { - 'name' => 'q_bits', - 'offset' => '16', - 'type' => '75' - } - }, - 'Name' => 'struct gnutls_dh_params_int', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '3469' => { - 'Header' => 'gnutls_int.h', - 'Line' => '657', - 'Memb' => { - '0' => { - 'name' => 'cipher', - 'offset' => '0', - 'type' => '11173' - }, - '1' => { - 'name' => 'mac', - 'offset' => '260', - 'type' => '11173' - }, - '10' => { - 'name' => 'allow_large_records', - 'offset' => '2082', - 'type' => '9592' - }, - '11' => { - 'name' => 'dumbfw', - 'offset' => '2084', - 'type' => '145' - }, - '12' => { - 'name' => 'sr', - 'offset' => '2088', - 'type' => '11223' - }, - '13' => { - 'name' => 'min_record_version', - 'offset' => '2092', - 'type' => '9592' - }, - '14' => { - 'name' => 'server_precedence', - 'offset' => '2093', - 'type' => '9592' - }, - '15' => { - 'name' => 'allow_key_usage_violation', - 'offset' => '2094', - 'type' => '9592' - }, - '16' => { - 'name' => 'allow_server_key_usage_violation', - 'offset' => '2095', - 'type' => '9592' - }, - '17' => { - 'name' => 'allow_wrong_pms', - 'offset' => '2096', - 'type' => '9592' - }, - '18' => { - 'name' => 'no_tickets', - 'offset' => '2097', - 'type' => '9592' - }, - '19' => { - 'name' => 'no_etm', - 'offset' => '2098', - 'type' => '9592' - }, - '2' => { - 'name' => 'kx', - 'offset' => '520', - 'type' => '11173' - }, - '20' => { - 'name' => 'have_cbc', - 'offset' => '2099', - 'type' => '9592' - }, - '21' => { - 'name' => 'stateless_compression', - 'offset' => '2100', - 'type' => '9592' - }, - '22' => { - 'name' => 'additional_verify_flags', - 'offset' => '2104', - 'type' => '145' - }, - '23' => { - 'name' => 'level', - 'offset' => '2108', - 'type' => '3300' - }, - '24' => { - 'name' => 'dh_prime_bits', - 'offset' => '2112', - 'type' => '145' - }, - '25' => { - 'name' => 'fallback', - 'offset' => '2116', - 'type' => '9592' - }, - '3' => { - 'name' => 'compression', - 'offset' => '780', - 'type' => '11173' - }, - '4' => { - 'name' => 'protocol', - 'offset' => '1040', - 'type' => '11173' - }, - '5' => { - 'name' => 'cert_type', - 'offset' => '1300', - 'type' => '11173' - }, - '6' => { - 'name' => 'sign_algo', - 'offset' => '1560', - 'type' => '11173' - }, - '7' => { - 'name' => 'supported_ecc', - 'offset' => '1820', - 'type' => '11173' - }, - '8' => { - 'name' => 'no_extensions', - 'offset' => '2080', - 'type' => '9592' - }, - '9' => { - 'name' => 'no_ext_master_secret', - 'offset' => '2081', - 'type' => '9592' - } - }, - 'Name' => 'struct gnutls_priority_st', - 'PrivateABI' => 1, - 'Size' => '2120', - 'Type' => 'Struct' - }, - '3750790' => { - 'BaseType' => '3750801', - 'Header' => 'opencdk.h', - 'Line' => '64', - 'Name' => 'cdk_s2k_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3750801' => { - 'BaseType' => '3750807', - 'Name' => 'struct cdk_s2k_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3750807' => { - 'Header' => 'context.h', - 'Line' => '41', - 'Memb' => { - '0' => { - 'name' => 'mode', - 'offset' => '0', - 'type' => '75' - }, - '1' => { - 'name' => 'hash_algo', - 'offset' => '4', - 'type' => '3913432' - }, - '2' => { - 'name' => 'salt', - 'offset' => '5', - 'type' => '3934897' - }, - '3' => { - 'name' => 'count', - 'offset' => '16', - 'type' => '3913448' - } - }, - 'Name' => 'struct cdk_s2k_s', - 'PrivateABI' => 1, - 'Size' => '20', - 'Type' => 'Struct' - }, - '3750812' => { - 'BaseType' => '3750823', - 'Header' => 'opencdk.h', - 'Line' => '68', - 'Name' => 'cdk_stream_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3750823' => { - 'BaseType' => '3750829', - 'Name' => 'struct cdk_stream_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3750829' => { - 'Header' => 'stream.h', - 'Line' => '68', - 'Memb' => { - '0' => { - 'name' => 'filters', - 'offset' => '0', - 'type' => '3980425' - }, - '1' => { - 'name' => 'fmode', - 'offset' => '8', - 'type' => '75' - }, - '10' => { - 'name' => 'cbs_hd', - 'offset' => '128', - 'type' => '216' - }, - '2' => { - 'name' => 'error', - 'offset' => '12', - 'type' => '75' - }, - '3' => { - 'name' => 'blkmode', - 'offset' => '16', - 'type' => '52' - }, - '4' => { - 'name' => 'flags', - 'offset' => '24', - 'type' => '3980431' - }, - '5' => { - 'name' => 'cache', - 'offset' => '32', - 'type' => '3980545' - }, - '6' => { - 'name' => 'fname', - 'offset' => '64', - 'type' => '240' - }, - '7' => { - 'name' => 'fp', - 'offset' => '72', - 'type' => '282168' - }, - '8' => { - 'bitfield' => '1', - 'name' => 'fp_ref', - 'offset' => '80', - 'type' => '145' - }, - '9' => { - 'name' => 'cbs', - 'offset' => '88', - 'type' => '3979341' - } - }, - 'Name' => 'struct cdk_stream_s', - 'PrivateABI' => 1, - 'Size' => '136', - 'Type' => 'Struct' - }, - '3750834' => { - 'BaseType' => '3750845', - 'Header' => 'opencdk.h', - 'Line' => '72', - 'Name' => 'cdk_prefitem_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3750845' => { - 'BaseType' => '3750851', - 'Name' => 'struct cdk_prefitem_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3750851' => { - 'Header' => 'context.h', - 'Line' => '82', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '3913432' - }, - '1' => { - 'name' => 'value', - 'offset' => '1', - 'type' => '3913432' - } - }, - 'Name' => 'struct cdk_prefitem_s', - 'PrivateABI' => 1, - 'Size' => '2', - 'Type' => 'Struct' - }, - '3750878' => { - 'BaseType' => '3750889', - 'Header' => 'opencdk.h', - 'Line' => '91', - 'Name' => 'cdk_subpkt_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3750889' => { - 'BaseType' => '3750895', - 'Name' => 'struct cdk_subpkt_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3750895' => { - 'Header' => 'context.h', - 'Line' => '94', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '3750889' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '3913448' - }, - '2' => { - 'name' => 'type', - 'offset' => '12', - 'type' => '3913432' - }, - '3' => { - 'name' => 'd', - 'offset' => '16', - 'type' => '3934929' - } - }, - 'Name' => 'struct cdk_subpkt_s', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '3750900' => { - 'BaseType' => '3750911', - 'Header' => 'opencdk.h', - 'Line' => '99', - 'Name' => 'cdk_desig_revoker_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3750911' => { - 'BaseType' => '3750917', - 'Name' => 'struct cdk_desig_revoker_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3750917' => { - 'Header' => 'context.h', - 'Line' => '87', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '3750911' - }, - '1' => { - 'name' => 'r_class', - 'offset' => '8', - 'type' => '3913432' - }, - '2' => { - 'name' => 'algid', - 'offset' => '9', - 'type' => '3913432' - }, - '3' => { - 'name' => 'fpr', - 'offset' => '10', - 'type' => '3934913' - } - }, - 'Name' => 'struct cdk_desig_revoker_s', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '3751379' => { - 'Header' => 'opencdk.h', - 'Line' => '353', - 'Memb' => { - '0' => { - 'name' => 'CDK_PKT_RESERVED', - 'value' => '0' - }, - '1' => { - 'name' => 'CDK_PKT_PUBKEY_ENC', - 'value' => '1' - }, - '10' => { - 'name' => 'CDK_PKT_RING_TRUST', - 'value' => '12' - }, - '11' => { - 'name' => 'CDK_PKT_USER_ID', - 'value' => '13' - }, - '12' => { - 'name' => 'CDK_PKT_PUBLIC_SUBKEY', - 'value' => '14' - }, - '13' => { - 'name' => 'CDK_PKT_OLD_COMMENT', - 'value' => '16' - }, - '14' => { - 'name' => 'CDK_PKT_ATTRIBUTE', - 'value' => '17' - }, - '15' => { - 'name' => 'CDK_PKT_MDC', - 'value' => '19' - }, - '2' => { - 'name' => 'CDK_PKT_SIGNATURE', - 'value' => '2' - }, - '3' => { - 'name' => 'CDK_PKT_ONEPASS_SIG', - 'value' => '4' - }, - '4' => { - 'name' => 'CDK_PKT_SECRET_KEY', - 'value' => '5' - }, - '5' => { - 'name' => 'CDK_PKT_PUBLIC_KEY', - 'value' => '6' - }, - '6' => { - 'name' => 'CDK_PKT_SECRET_SUBKEY', - 'value' => '7' - }, - '7' => { - 'name' => 'CDK_PKT_COMPRESSED', - 'value' => '8' - }, - '8' => { - 'name' => 'CDK_PKT_MARKER', - 'value' => '10' - }, - '9' => { - 'name' => 'CDK_PKT_LITERAL', - 'value' => '11' - } - }, - 'Name' => 'enum cdk_packet_type_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '3751391' => { - 'Header' => 'opencdk.h', - 'Line' => '385', - 'Memb' => { - '0' => { - 'bitfield' => '1', - 'name' => 'exportable', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'revocable', - 'offset' => '0', - 'type' => '145' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'policy_url', - 'offset' => '0', - 'type' => '145' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'notation', - 'offset' => '0', - 'type' => '145' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'expired', - 'offset' => '0', - 'type' => '145' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'checked', - 'offset' => '0', - 'type' => '145' - }, - '6' => { - 'bitfield' => '1', - 'name' => 'valid', - 'offset' => '0', - 'type' => '145' - }, - '7' => { - 'bitfield' => '1', - 'name' => 'missing_key', - 'offset' => '0', - 'type' => '145' - } - }, - 'Name' => 'anon-struct-opencdk.h-385', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Struct' - }, - '3751529' => { - 'Header' => 'opencdk.h', - 'Line' => '370', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '157' - }, - '1' => { - 'name' => 'sig_class', - 'offset' => '1', - 'type' => '157' - }, - '10' => { - 'name' => 'unhashed_size', - 'offset' => '40', - 'type' => '103' - }, - '11' => { - 'name' => 'unhashed', - 'offset' => '48', - 'type' => '3750878' - }, - '12' => { - 'name' => 'mpi', - 'offset' => '56', - 'type' => '11235' - }, - '13' => { - 'name' => 'revkeys', - 'offset' => '72', - 'type' => '3750900' - }, - '14' => { - 'name' => 'flags', - 'offset' => '80', - 'type' => '3751391' - }, - '15' => { - 'name' => 'key', - 'offset' => '84', - 'type' => '3751751' - }, - '2' => { - 'name' => 'timestamp', - 'offset' => '4', - 'type' => '145' - }, - '3' => { - 'name' => 'expiredate', - 'offset' => '8', - 'type' => '145' - }, - '4' => { - 'name' => 'keyid', - 'offset' => '12', - 'type' => '3751751' - }, - '5' => { - 'name' => 'pubkey_algo', - 'offset' => '20', - 'type' => '157' - }, - '6' => { - 'name' => 'digest_algo', - 'offset' => '21', - 'type' => '157' - }, - '7' => { - 'name' => 'digest_start', - 'offset' => '22', - 'type' => '2126624' - }, - '8' => { - 'name' => 'hashed_size', - 'offset' => '24', - 'type' => '103' - }, - '9' => { - 'name' => 'hashed', - 'offset' => '32', - 'type' => '3750878' - } - }, - 'Name' => 'struct cdk_pkt_signature_s', - 'PrivateABI' => 1, - 'Size' => '96', - 'Type' => 'Struct' - }, - '3751751' => { - 'BaseType' => '145', - 'Name' => 'unsigned int[2]', - 'Size' => '8', - 'Type' => 'Array' - }, - '3751783' => { - 'BaseType' => '3751795', - 'Header' => 'opencdk.h', - 'Line' => '397', - 'Name' => 'cdk_pkt_signature_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3751795' => { - 'BaseType' => '3751529', - 'Name' => 'struct cdk_pkt_signature_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3751801' => { - 'Header' => 'opencdk.h', - 'Line' => '400', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'is_primary', - 'offset' => '4', - 'type' => '145' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'is_revoked', - 'offset' => '4', - 'type' => '145' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'mdc_feature', - 'offset' => '4', - 'type' => '145' - }, - '4' => { - 'name' => 'prefs', - 'offset' => '8', - 'type' => '3750834' - }, - '5' => { - 'name' => 'prefs_size', - 'offset' => '16', - 'type' => '52' - }, - '6' => { - 'name' => 'attrib_img', - 'offset' => '24', - 'type' => '3881' - }, - '7' => { - 'name' => 'attrib_len', - 'offset' => '32', - 'type' => '52' - }, - '8' => { - 'name' => 'selfsig', - 'offset' => '40', - 'type' => '3751783' - }, - '9' => { - 'name' => 'name', - 'offset' => '48', - 'type' => '240' - } - }, - 'Name' => 'struct cdk_pkt_userid_s', - 'PrivateABI' => 1, - 'Size' => '56', - 'Type' => 'Struct' - }, - '3751954' => { - 'BaseType' => '3751966', - 'Header' => 'opencdk.h', - 'Line' => '412', - 'Name' => 'cdk_pkt_userid_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3751966' => { - 'BaseType' => '3751801', - 'Name' => 'struct cdk_pkt_userid_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3751972' => { - 'Header' => 'opencdk.h', - 'Line' => '415', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '157' - }, - '1' => { - 'name' => 'pubkey_algo', - 'offset' => '1', - 'type' => '157' - }, - '10' => { - 'bitfield' => '1', - 'name' => 'has_expired', - 'offset' => '80', - 'type' => '145' - }, - '11' => { - 'name' => 'pubkey_usage', - 'offset' => '84', - 'type' => '75' - }, - '12' => { - 'name' => 'uid', - 'offset' => '88', - 'type' => '3751954' - }, - '13' => { - 'name' => 'prefs', - 'offset' => '96', - 'type' => '3750834' - }, - '14' => { - 'name' => 'prefs_size', - 'offset' => '104', - 'type' => '52' - }, - '15' => { - 'name' => 'revkeys', - 'offset' => '112', - 'type' => '3750900' - }, - '2' => { - 'name' => 'fpr', - 'offset' => '2', - 'type' => '3752203' - }, - '3' => { - 'name' => 'keyid', - 'offset' => '24', - 'type' => '3751751' - }, - '4' => { - 'name' => 'main_keyid', - 'offset' => '32', - 'type' => '3751751' - }, - '5' => { - 'name' => 'timestamp', - 'offset' => '40', - 'type' => '145' - }, - '6' => { - 'name' => 'expiredate', - 'offset' => '44', - 'type' => '145' - }, - '7' => { - 'name' => 'mpi', - 'offset' => '48', - 'type' => '3752219' - }, - '8' => { - 'bitfield' => '1', - 'name' => 'is_revoked', - 'offset' => '80', - 'type' => '145' - }, - '9' => { - 'bitfield' => '1', - 'name' => 'is_invalid', - 'offset' => '80', - 'type' => '145' - } - }, - 'Name' => 'struct cdk_pkt_pubkey_s', - 'PrivateABI' => 1, - 'Size' => '120', - 'Type' => 'Struct' - }, - '3752203' => { - 'BaseType' => '157', - 'Name' => 'unsigned char[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '3752219' => { - 'BaseType' => '6954', - 'Name' => 'bigint_t[4]', - 'Size' => '32', - 'Type' => 'Array' - }, - '3752235' => { - 'BaseType' => '3752247', - 'Header' => 'opencdk.h', - 'Line' => '433', - 'Name' => 'cdk_pkt_pubkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3752247' => { - 'BaseType' => '3751972', - 'Name' => 'struct cdk_pkt_pubkey_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3752253' => { - 'Header' => 'opencdk.h', - 'Line' => '447', - 'Memb' => { - '0' => { - 'name' => 'algo', - 'offset' => '0', - 'type' => '157' - }, - '1' => { - 'name' => 'sha1chk', - 'offset' => '1', - 'type' => '157' - }, - '2' => { - 'name' => 's2k', - 'offset' => '8', - 'type' => '3750790' - }, - '3' => { - 'name' => 'iv', - 'offset' => '16', - 'type' => '1450964' - }, - '4' => { - 'name' => 'ivlen', - 'offset' => '32', - 'type' => '157' - } - }, - 'Name' => 'anon-struct-opencdk.h-447', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '3752343' => { - 'Header' => 'opencdk.h', - 'Line' => '439', - 'Memb' => { - '0' => { - 'name' => 'pk', - 'offset' => '0', - 'type' => '3752235' - }, - '1' => { - 'name' => 'expiredate', - 'offset' => '8', - 'type' => '145' - }, - '10' => { - 'name' => 'encdata', - 'offset' => '120', - 'type' => '3881' - }, - '11' => { - 'name' => 'enclen', - 'offset' => '128', - 'type' => '52' - }, - '12' => { - 'name' => 'is_protected', - 'offset' => '136', - 'type' => '157' - }, - '13' => { - 'bitfield' => '1', - 'name' => 'is_primary', - 'offset' => '137', - 'type' => '145' - }, - '14' => { - 'bitfield' => '1', - 'name' => 'has_expired', - 'offset' => '137', - 'type' => '145' - }, - '15' => { - 'bitfield' => '1', - 'name' => 'is_revoked', - 'offset' => '137', - 'type' => '145' - }, - '2' => { - 'name' => 'version', - 'offset' => '12', - 'type' => '75' - }, - '3' => { - 'name' => 'pubkey_algo', - 'offset' => '16', - 'type' => '75' - }, - '4' => { - 'name' => 'keyid', - 'offset' => '20', - 'type' => '3751751' - }, - '5' => { - 'name' => 'main_keyid', - 'offset' => '28', - 'type' => '3751751' - }, - '6' => { - 'name' => 's2k_usage', - 'offset' => '36', - 'type' => '157' - }, - '7' => { - 'name' => 'protect', - 'offset' => '40', - 'type' => '3752253' - }, - '8' => { - 'name' => 'csum', - 'offset' => '80', - 'type' => '103' - }, - '9' => { - 'name' => 'mpi', - 'offset' => '88', - 'type' => '3752219' - } - }, - 'Name' => 'struct cdk_pkt_seckey_s', - 'PrivateABI' => 1, - 'Size' => '144', - 'Type' => 'Struct' - }, - '3752573' => { - 'BaseType' => '3752585', - 'Header' => 'opencdk.h', - 'Line' => '463', - 'Name' => 'cdk_pkt_seckey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3752585' => { - 'BaseType' => '3752343', - 'Name' => 'struct cdk_pkt_seckey_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3752591' => { - 'Header' => 'opencdk.h', - 'Line' => '469', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '157' - }, - '1' => { - 'name' => 'keyid', - 'offset' => '4', - 'type' => '3751751' - }, - '2' => { - 'name' => 'sig_class', - 'offset' => '12', - 'type' => '157' - }, - '3' => { - 'name' => 'digest_algo', - 'offset' => '13', - 'type' => '157' - }, - '4' => { - 'name' => 'pubkey_algo', - 'offset' => '14', - 'type' => '157' - }, - '5' => { - 'name' => 'last', - 'offset' => '15', - 'type' => '157' - } - }, - 'Name' => 'struct cdk_pkt_onepass_sig_s', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '3752683' => { - 'BaseType' => '3752695', - 'Header' => 'opencdk.h', - 'Line' => '477', - 'Name' => 'cdk_pkt_onepass_sig_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3752695' => { - 'BaseType' => '3752591', - 'Name' => 'struct cdk_pkt_onepass_sig_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3752701' => { - 'Header' => 'opencdk.h', - 'Line' => '480', - 'Memb' => { - '0' => { - 'name' => 'version', - 'offset' => '0', - 'type' => '157' - }, - '1' => { - 'name' => 'keyid', - 'offset' => '4', - 'type' => '3751751' - }, - '2' => { - 'name' => 'throw_keyid', - 'offset' => '12', - 'type' => '75' - }, - '3' => { - 'name' => 'pubkey_algo', - 'offset' => '16', - 'type' => '157' - }, - '4' => { - 'name' => 'mpi', - 'offset' => '24', - 'type' => '11235' - } - }, - 'Name' => 'struct cdk_pkt_pubkey_enc_s', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '3752780' => { - 'BaseType' => '3752792', - 'Header' => 'opencdk.h', - 'Line' => '487', - 'Name' => 'cdk_pkt_pubkey_enc_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3752792' => { - 'BaseType' => '3752701', - 'Name' => 'struct cdk_pkt_pubkey_enc_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3752798' => { - 'Header' => 'opencdk.h', - 'Line' => '489', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'extralen', - 'offset' => '4', - 'type' => '75' - }, - '2' => { - 'name' => 'mdc_method', - 'offset' => '8', - 'type' => '157' - }, - '3' => { - 'name' => 'buf', - 'offset' => '16', - 'type' => '3750812' - } - }, - 'Name' => 'struct cdk_pkt_encrypted_s', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '3752864' => { - 'BaseType' => '3752876', - 'Header' => 'opencdk.h', - 'Line' => '495', - 'Name' => 'cdk_pkt_encrypted_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3752876' => { - 'BaseType' => '3752798', - 'Name' => 'struct cdk_pkt_encrypted_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3752882' => { - 'Header' => 'opencdk.h', - 'Line' => '498', - 'Memb' => { - '0' => { - 'name' => 'hash', - 'offset' => '0', - 'type' => '3752203' - } - }, - 'Name' => 'struct cdk_pkt_mdc_s', - 'PrivateABI' => 1, - 'Size' => '20', - 'Type' => 'Struct' - }, - '3752909' => { - 'BaseType' => '3752921', - 'Header' => 'opencdk.h', - 'Line' => '501', - 'Name' => 'cdk_pkt_mdc_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3752921' => { - 'BaseType' => '3752882', - 'Name' => 'struct cdk_pkt_mdc_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3752927' => { - 'Header' => 'opencdk.h', - 'Line' => '504', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'buf', - 'offset' => '8', - 'type' => '3750812' - }, - '2' => { - 'name' => 'mode', - 'offset' => '16', - 'type' => '75' - }, - '3' => { - 'name' => 'timestamp', - 'offset' => '20', - 'type' => '145' - }, - '4' => { - 'name' => 'namelen', - 'offset' => '24', - 'type' => '75' - }, - '5' => { - 'name' => 'name', - 'offset' => '32', - 'type' => '240' - } - }, - 'Name' => 'struct cdk_pkt_literal_s', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '3753019' => { - 'BaseType' => '3753031', - 'Header' => 'opencdk.h', - 'Line' => '512', - 'Name' => 'cdk_pkt_literal_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3753031' => { - 'BaseType' => '3752927', - 'Name' => 'struct cdk_pkt_literal_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3753037' => { - 'Header' => 'opencdk.h', - 'Line' => '515', - 'Memb' => { - '0' => { - 'name' => 'len', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'name' => 'algorithm', - 'offset' => '4', - 'type' => '75' - }, - '2' => { - 'name' => 'buf', - 'offset' => '8', - 'type' => '3750812' - } - }, - 'Name' => 'struct cdk_pkt_compressed_s', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '3753090' => { - 'BaseType' => '3753102', - 'Header' => 'opencdk.h', - 'Line' => '520', - 'Name' => 'cdk_pkt_compressed_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3753102' => { - 'BaseType' => '3753037', - 'Name' => 'struct cdk_pkt_compressed_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3753108' => { - 'Header' => 'opencdk.h', - 'Line' => '529', - 'Memb' => { - '0' => { - 'name' => 'mdc', - 'offset' => '0', - 'type' => '3752909' - }, - '1' => { - 'name' => 'user_id', - 'offset' => '0', - 'type' => '3751954' - }, - '2' => { - 'name' => 'public_key', - 'offset' => '0', - 'type' => '3752235' - }, - '3' => { - 'name' => 'secret_key', - 'offset' => '0', - 'type' => '3752573' - }, - '4' => { - 'name' => 'signature', - 'offset' => '0', - 'type' => '3751783' - }, - '5' => { - 'name' => 'pubkey_enc', - 'offset' => '0', - 'type' => '3752780' - }, - '6' => { - 'name' => 'compressed', - 'offset' => '0', - 'type' => '3753090' - }, - '7' => { - 'name' => 'encrypted', - 'offset' => '0', - 'type' => '3752864' - }, - '8' => { - 'name' => 'literal', - 'offset' => '0', - 'type' => '3753019' - }, - '9' => { - 'name' => 'onepass_sig', - 'offset' => '0', - 'type' => '3752683' - } - }, - 'Name' => 'anon-union-opencdk.h-529', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Union' - }, - '3753238' => { - 'Header' => 'opencdk.h', - 'Line' => '524', - 'Memb' => { - '0' => { - 'name' => 'pktlen', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'pktsize', - 'offset' => '8', - 'type' => '52' - }, - '2' => { - 'name' => 'old_ctb', - 'offset' => '16', - 'type' => '75' - }, - '3' => { - 'name' => 'pkttype', - 'offset' => '20', - 'type' => '3751379' - }, - '4' => { - 'name' => 'pkt', - 'offset' => '24', - 'type' => '3753108' - } - }, - 'Name' => 'struct cdk_packet_s', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '3753317' => { - 'BaseType' => '3753329', - 'Header' => 'opencdk.h', - 'Line' => '542', - 'Name' => 'cdk_packet_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3753329' => { - 'BaseType' => '3753238', - 'Name' => 'struct cdk_packet_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3783964' => { - 'Header' => 'opencdk.h', - 'Line' => '136', - 'Memb' => { - '0' => { - 'name' => 'CDK_EOF', - 'value' => '-1' - }, - '1' => { - 'name' => 'CDK_Success', - 'value' => '0' - }, - '10' => { - 'name' => 'CDK_MPI_Error', - 'value' => '10' - }, - '11' => { - 'name' => 'CDK_Inv_Value', - 'value' => '11' - }, - '12' => { - 'name' => 'CDK_Error_No_Key', - 'value' => '12' - }, - '13' => { - 'name' => 'CDK_Chksum_Error', - 'value' => '13' - }, - '14' => { - 'name' => 'CDK_Time_Conflict', - 'value' => '14' - }, - '15' => { - 'name' => 'CDK_Zlib_Error', - 'value' => '15' - }, - '16' => { - 'name' => 'CDK_Weak_Key', - 'value' => '16' - }, - '17' => { - 'name' => 'CDK_Out_Of_Core', - 'value' => '17' - }, - '18' => { - 'name' => 'CDK_Wrong_Seckey', - 'value' => '18' - }, - '19' => { - 'name' => 'CDK_Bad_MDC', - 'value' => '19' - }, - '2' => { - 'name' => 'CDK_General_Error', - 'value' => '1' - }, - '20' => { - 'name' => 'CDK_Inv_Mode', - 'value' => '20' - }, - '21' => { - 'name' => 'CDK_Error_No_Keyring', - 'value' => '21' - }, - '22' => { - 'name' => 'CDK_Wrong_Format', - 'value' => '22' - }, - '23' => { - 'name' => 'CDK_Inv_Packet_Ver', - 'value' => '23' - }, - '24' => { - 'name' => 'CDK_Too_Short', - 'value' => '24' - }, - '25' => { - 'name' => 'CDK_Unusable_Key', - 'value' => '25' - }, - '26' => { - 'name' => 'CDK_No_Data', - 'value' => '26' - }, - '27' => { - 'name' => 'CDK_No_Passphrase', - 'value' => '27' - }, - '28' => { - 'name' => 'CDK_Network_Error', - 'value' => '28' - }, - '3' => { - 'name' => 'CDK_File_Error', - 'value' => '2' - }, - '4' => { - 'name' => 'CDK_Bad_Sig', - 'value' => '3' - }, - '5' => { - 'name' => 'CDK_Inv_Packet', - 'value' => '4' - }, - '6' => { - 'name' => 'CDK_Inv_Algo', - 'value' => '5' - }, - '7' => { - 'name' => 'CDK_Not_Implemented', - 'value' => '6' - }, - '8' => { - 'name' => 'CDK_Armor_Error', - 'value' => '8' - }, - '9' => { - 'name' => 'CDK_Armor_CRC_Error', - 'value' => '9' - } - }, - 'Name' => 'enum cdk_error_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '3802193' => { - 'BaseType' => '156922', - 'Name' => 'gnutls_openpgp_keyring_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3881' => { - 'BaseType' => '157', - 'Name' => 'unsigned char*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3887' => { - 'Header' => 'gnutls.h', - 'Line' => '884', - 'Memb' => { - '0' => { - 'name' => 'data', - 'offset' => '0', - 'type' => '3881' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_datum_t', - 'Size' => '16', - 'Type' => 'Struct' - }, - '3895736' => { - 'BaseType' => '1036973', - 'Name' => 'gnutls_openpgp_crt_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3899' => { - 'BaseType' => '3887', - 'Name' => 'gnutls_datum_t const', - 'Size' => '16', - 'Type' => 'Const' - }, - '3913432' => { - 'BaseType' => '157', - 'Header' => 'types.h', - 'Line' => '28', - 'Name' => 'byte', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '3913448' => { - 'BaseType' => '145', - 'Header' => 'types.h', - 'Line' => '40', - 'Name' => 'u32', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '3913575' => { - 'Header' => 'filters.h', - 'Line' => '57', - 'Memb' => { - '0' => { - 'name' => 'le', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'hdrlines', - 'offset' => '8', - 'type' => '110' - }, - '2' => { - 'name' => 'crc', - 'offset' => '16', - 'type' => '3913448' - }, - '3' => { - 'name' => 'crc_okay', - 'offset' => '20', - 'type' => '75' - }, - '4' => { - 'name' => 'idx', - 'offset' => '24', - 'type' => '75' - }, - '5' => { - 'name' => 'idx2', - 'offset' => '28', - 'type' => '75' - } - }, - 'Name' => 'struct armor_filter_t', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '3934897' => { - 'BaseType' => '3913432', - 'Name' => 'byte[8]', - 'Size' => '8', - 'Type' => 'Array' - }, - '3934913' => { - 'BaseType' => '3913432', - 'Name' => 'byte[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '3934929' => { - 'BaseType' => '3913432', - 'Name' => 'byte*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3940' => { - 'Header' => 'gnutls.h', - 'Line' => '1115', - 'Memb' => { - '0' => { - 'name' => 'low', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'high', - 'offset' => '8', - 'type' => '52' - } - }, - 'Name' => 'struct gnutls_range_st', - 'Size' => '16', - 'Type' => 'Struct' - }, - '3952' => { - 'BaseType' => '3940', - 'Name' => 'gnutls_range_st const', - 'Size' => '16', - 'Type' => 'Const' - }, - '3963' => { - 'Header' => 'gnutls_int.h', - 'Line' => '321', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '8744' - }, - '1' => { - 'name' => 'prev', - 'offset' => '8', - 'type' => '8744' - }, - '10' => { - 'name' => 'handshake_sequence', - 'offset' => '72', - 'type' => '973' - }, - '2' => { - 'name' => 'mark', - 'offset' => '16', - 'type' => '52' - }, - '3' => { - 'name' => 'msg', - 'offset' => '24', - 'type' => '3887' - }, - '4' => { - 'name' => 'maximum_size', - 'offset' => '40', - 'type' => '52' - }, - '5' => { - 'name' => 'uhead_mark', - 'offset' => '48', - 'type' => '145' - }, - '6' => { - 'name' => 'type', - 'offset' => '52', - 'type' => '8512' - }, - '7' => { - 'name' => 'record_sequence', - 'offset' => '56', - 'type' => '1896' - }, - '8' => { - 'name' => 'epoch', - 'offset' => '64', - 'type' => '973' - }, - '9' => { - 'name' => 'htype', - 'offset' => '68', - 'type' => '2706' - } - }, - 'Name' => 'struct mbuffer_st', - 'PrivateABI' => 1, - 'Size' => '80', - 'Type' => 'Struct' - }, - '3977239' => { - 'Header' => 'opencdk.h', - 'Line' => '333', - 'Memb' => { - '0' => { - 'name' => 'CDK_LITFMT_BINARY', - 'value' => '0' - }, - '1' => { - 'name' => 'CDK_LITFMT_TEXT', - 'value' => '1' - }, - '2' => { - 'name' => 'CDK_LITFMT_UNICODE', - 'value' => '2' - } - }, - 'Name' => 'enum cdk_lit_format_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '3979341' => { - 'Header' => 'opencdk.h', - 'Line' => '691', - 'Memb' => { - '0' => { - 'name' => 'open', - 'offset' => '0', - 'type' => '3979435' - }, - '1' => { - 'name' => 'release', - 'offset' => '8', - 'type' => '3979435' - }, - '2' => { - 'name' => 'read', - 'offset' => '16', - 'type' => '6305' - }, - '3' => { - 'name' => 'write', - 'offset' => '24', - 'type' => '5971' - }, - '4' => { - 'name' => 'seek', - 'offset' => '32', - 'type' => '3979461' - } - }, - 'Name' => 'struct cdk_stream_cbs_s', - 'PrivateABI' => 1, - 'Size' => '40', - 'Type' => 'Struct' - }, - '3979435' => { - 'Name' => 'cdk_error_t(*)(void*)', - 'Param' => { - '0' => { - 'type' => '216' - } - }, - 'Return' => '3783964', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3979461' => { - 'Name' => 'int(*)(void*, off_t)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '1653559' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3979584' => { - 'Header' => 'filters.h', - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'on', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '1653559' - }, - '2' => { - 'name' => 'nleft', - 'offset' => '16', - 'type' => '1653559' - } - }, - 'Name' => 'anon-struct-filters.h-37', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '3979706' => { - 'Header' => 'filters.h', - 'Line' => '43', - 'Memb' => { - '0' => { - 'name' => 'hd', - 'offset' => '0', - 'type' => '10512' - }, - '1' => { - 'name' => 'mdc', - 'offset' => '80', - 'type' => '10156' - }, - '2' => { - 'name' => 'mdc_method', - 'offset' => '136', - 'type' => '75' - }, - '3' => { - 'name' => 'datalen', - 'offset' => '140', - 'type' => '3913448' - }, - '4' => { - 'name' => 'blkmode', - 'offset' => '144', - 'type' => '3979584' - }, - '5' => { - 'name' => 's', - 'offset' => '168', - 'type' => '3750812' - } - }, - 'Name' => 'struct cipher_filter_t', - 'PrivateABI' => 1, - 'Size' => '176', - 'Type' => 'Struct' - }, - '3979761' => { - 'Header' => 'filters.h', - 'Line' => '49', - 'Memb' => { - '0' => { - 'name' => 'digest_algo', - 'offset' => '0', - 'type' => '75' - }, - '1' => { - 'name' => 'md', - 'offset' => '8', - 'type' => '10156' - }, - '2' => { - 'name' => 'md_initialized', - 'offset' => '64', - 'type' => '75' - } - }, - 'Name' => 'struct md_filter_t', - 'PrivateABI' => 1, - 'Size' => '72', - 'Type' => 'Struct' - }, - '3979863' => { - 'Header' => 'filters.h', - 'Line' => '65', - 'Memb' => { - '0' => { - 'name' => 'on', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '1653559' - } - }, - 'Name' => 'anon-struct-filters.h-65', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '3979975' => { - 'Header' => 'filters.h', - 'Line' => '69', - 'Memb' => { - '0' => { - 'name' => 'mode', - 'offset' => '0', - 'type' => '3977239' - }, - '1' => { - 'name' => 'orig_filename', - 'offset' => '8', - 'type' => '240' - }, - '2' => { - 'name' => 'filename', - 'offset' => '16', - 'type' => '240' - }, - '3' => { - 'name' => 'md', - 'offset' => '24', - 'type' => '10156' - }, - '4' => { - 'name' => 'md_initialized', - 'offset' => '80', - 'type' => '75' - }, - '5' => { - 'name' => 'blkmode', - 'offset' => '88', - 'type' => '3979863' - } - }, - 'Name' => 'struct literal_filter_t', - 'PrivateABI' => 1, - 'Size' => '104', - 'Type' => 'Struct' - }, - '3980072' => { - 'BaseType' => '3913432', - 'Name' => 'byte[8192]', - 'Size' => '8192', - 'Type' => 'Array' - }, - '3980089' => { - 'Header' => 'filters.h', - 'Line' => '78', - 'Memb' => { - '0' => { - 'name' => 'inbufsize', - 'offset' => '0', - 'type' => '52' - }, - '1' => { - 'name' => 'inbuf', - 'offset' => '8', - 'type' => '3980072' - }, - '2' => { - 'name' => 'outbufsize', - 'offset' => '8200', - 'type' => '52' - }, - '3' => { - 'name' => 'outbuf', - 'offset' => '8208', - 'type' => '3980072' - }, - '4' => { - 'name' => 'algo', - 'offset' => '16400', - 'type' => '75' - }, - '5' => { - 'name' => 'level', - 'offset' => '16404', - 'type' => '75' - } - }, - 'Name' => 'struct compress_filter_t', - 'PrivateABI' => 1, - 'Size' => '16408', - 'Type' => 'Struct' - }, - '3980120' => { - 'Header' => 'filters.h', - 'Line' => '82', - 'Memb' => { - '0' => { - 'name' => 'lf', - 'offset' => '0', - 'type' => '110' - } - }, - 'Name' => 'struct text_filter_t', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '3980131' => { - 'BaseType' => '3980142', - 'Header' => 'stream.h', - 'Line' => '40', - 'Name' => 'filter_fnct_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3980142' => { - 'Name' => 'int(*)(void*, int, FILE*, FILE*)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '75' - }, - '2' => { - 'type' => '282168' - }, - '3' => { - 'type' => '282168' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3980184' => { - 'Header' => 'stream.h', - 'Line' => '49', - 'Memb' => { - '0' => { - 'name' => 'afx', - 'offset' => '0', - 'type' => '3913575' - }, - '1' => { - 'name' => 'cfx', - 'offset' => '0', - 'type' => '3979706' - }, - '2' => { - 'name' => 'pfx', - 'offset' => '0', - 'type' => '3979975' - }, - '3' => { - 'name' => 'zfx', - 'offset' => '0', - 'type' => '3980089' - }, - '4' => { - 'name' => 'tfx', - 'offset' => '0', - 'type' => '3980120' - }, - '5' => { - 'name' => 'mfx', - 'offset' => '0', - 'type' => '3979761' - } - }, - 'Name' => 'anon-union-stream.h-49', - 'PrivateABI' => 1, - 'Size' => '16408', - 'Type' => 'Union' - }, - '3980260' => { - 'Header' => 'stream.h', - 'Line' => '57', - 'Memb' => { - '0' => { - 'bitfield' => '1', - 'name' => 'enabled', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'rdonly', - 'offset' => '0', - 'type' => '145' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'error', - 'offset' => '0', - 'type' => '145' - } - }, - 'Name' => 'anon-struct-stream.h-57', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Struct' - }, - '3980314' => { - 'Header' => 'stream.h', - 'Line' => '44', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '3980425' - }, - '1' => { - 'name' => 'fnct', - 'offset' => '8', - 'type' => '3980131' - }, - '2' => { - 'name' => 'uint8_t', - 'offset' => '16', - 'type' => '216' - }, - '3' => { - 'name' => 'tmp', - 'offset' => '24', - 'type' => '282168' - }, - '4' => { - 'name' => 'u', - 'offset' => '32', - 'type' => '3980184' - }, - '5' => { - 'name' => 'flags', - 'offset' => '16440', - 'type' => '3980260' - }, - '6' => { - 'name' => 'type', - 'offset' => '16444', - 'type' => '145' - }, - '7' => { - 'name' => 'ctl', - 'offset' => '16448', - 'type' => '145' - } - }, - 'Name' => 'struct stream_filter_s', - 'PrivateABI' => 1, - 'Size' => '16456', - 'Type' => 'Struct' - }, - '3980425' => { - 'BaseType' => '3980314', - 'Name' => 'struct stream_filter_s*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3980431' => { - 'Header' => 'stream.h', - 'Line' => '73', - 'Memb' => { - '0' => { - 'bitfield' => '1', - 'name' => 'filtrated', - 'offset' => '0', - 'type' => '145' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'eof', - 'offset' => '0', - 'type' => '145' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'write', - 'offset' => '0', - 'type' => '145' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'temp', - 'offset' => '0', - 'type' => '145' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'reset', - 'offset' => '0', - 'type' => '145' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'no_filter', - 'offset' => '0', - 'type' => '145' - }, - '6' => { - 'bitfield' => '3', - 'name' => 'compressed', - 'offset' => '0', - 'type' => '145' - } - }, - 'Name' => 'anon-struct-stream.h-73', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Struct' - }, - '3980545' => { - 'Header' => 'stream.h', - 'Line' => '82', - 'Memb' => { - '0' => { - 'name' => 'buf', - 'offset' => '0', - 'type' => '3881' - }, - '1' => { - 'bitfield' => '1', - 'name' => 'on', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'size', - 'offset' => '16', - 'type' => '52' - }, - '3' => { - 'name' => 'alloced', - 'offset' => '24', - 'type' => '52' - } - }, - 'Name' => 'anon-struct-stream.h-82', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '3980705' => { - 'Header' => 'keydb.h', - 'Line' => '65', - 'Memb' => { - '0' => { - 'name' => 'new_keys', - 'offset' => '0', - 'type' => '52' - } - }, - 'Name' => 'anon-struct-keydb.h-65', - 'PrivateABI' => 1, - 'Size' => '8', - 'Type' => 'Struct' - }, - '400888' => { - 'BaseType' => '121', - 'Name' => 'char[128]', - 'Size' => '128', - 'Type' => 'Array' - }, - '4120' => { - 'BaseType' => '4132', - 'Header' => 'gnutls.h', - 'Line' => '1401', - 'Name' => 'gnutls_certificate_verify_function', - 'Type' => 'Typedef' - }, - '4132' => { - 'Name' => 'int()(gnutls_session_t)', - 'Param' => { - '0' => { - 'type' => '3324' - } - }, - 'Return' => '75', - 'Type' => 'Func' - }, - '4185' => { - 'Header' => 'gnutls.h', - 'Line' => '1425', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_DT_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_DT_DNS_HOSTNAME', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_DT_KEY_PURPOSE_OID', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_DT_RFC822NAME', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_vdata_types_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '418654' => { - 'BaseType' => '31169', - 'Name' => 'extension_entry_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4246' => { - 'Header' => 'gnutls.h', - 'Line' => '1431', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '4185' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '3881' - }, - '2' => { - 'name' => 'size', - 'offset' => '16', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_typed_vdata_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '4258' => { - 'BaseType' => '4270', - 'Header' => 'gnutls.h', - 'Line' => '1472', - 'Name' => 'gnutls_db_store_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4270' => { - 'Name' => 'int(*)(void*, gnutls_datum_t, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '3887' - }, - '2' => { - 'type' => '3887' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4301' => { - 'BaseType' => '4313', - 'Header' => 'gnutls.h', - 'Line' => '1474', - 'Name' => 'gnutls_db_remove_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4313' => { - 'Name' => 'int(*)(void*, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '3887' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4339' => { - 'BaseType' => '4351', - 'Header' => 'gnutls.h', - 'Line' => '1475', - 'Name' => 'gnutls_db_retr_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4351' => { - 'Name' => 'gnutls_datum_t(*)(void*, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '3887' - } - }, - 'Return' => '3887', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4377' => { - 'BaseType' => '4389', - 'Header' => 'gnutls.h', - 'Line' => '1510', - 'Name' => 'gnutls_handshake_hook_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4389' => { - 'Name' => 'int(*)(gnutls_session_t, unsigned int, unsigned int, unsigned int, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '145' - }, - '2' => { - 'type' => '145' - }, - '3' => { - 'type' => '145' - }, - '4' => { - 'type' => '4430' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4430' => { - 'BaseType' => '3899', - 'Name' => 'gnutls_datum_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4436' => { - 'BaseType' => '4448', - 'Header' => 'gnutls.h', - 'Line' => '1520', - 'Name' => 'gnutls_handshake_simple_hook_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '44422' => { - 'BaseType' => '17727', - 'Name' => 'uint8_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4448' => { - 'Name' => 'int(*)(gnutls_session_t)', - 'Param' => { - '0' => { - 'type' => '3324' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4454' => { - 'BaseType' => '4466', - 'Header' => 'gnutls.h', - 'Line' => '1557', - 'Name' => 'gnutls_pubkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4466' => { - 'BaseType' => '4472', - 'Name' => 'struct gnutls_pubkey_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4472' => { - 'Header' => 'abstract_int.h', - 'Line' => '54', - 'Memb' => { - '0' => { - 'name' => 'pk_algorithm', - 'offset' => '0', - 'type' => '2916' - }, - '1' => { - 'name' => 'bits', - 'offset' => '4', - 'type' => '145' - }, - '2' => { - 'name' => 'params', - 'offset' => '8', - 'type' => '7897' - }, - '3' => { - 'name' => 'openpgp_key_id', - 'offset' => '448', - 'type' => '167871' - }, - '4' => { - 'name' => 'openpgp_key_id_set', - 'offset' => '456', - 'type' => '145' - }, - '5' => { - 'name' => 'openpgp_key_fpr', - 'offset' => '460', - 'type' => '257390' - }, - '6' => { - 'bitfield' => '1', - 'name' => 'openpgp_key_fpr_set', - 'offset' => '480', - 'type' => '145' - }, - '7' => { - 'name' => 'key_usage', - 'offset' => '484', - 'type' => '145' - }, - '8' => { - 'name' => 'pin', - 'offset' => '488', - 'type' => '163164' - } - }, - 'Name' => 'struct gnutls_pubkey_st', - 'PrivateABI' => 1, - 'Size' => '504', - 'Type' => 'Struct' - }, - '4477' => { - 'BaseType' => '4483', - 'Name' => 'struct gnutls_privkey_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4483' => { - 'Header' => 'abstract_int.h', - 'Line' => '28', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '158343' - }, - '1' => { - 'name' => 'pk_algorithm', - 'offset' => '4', - 'type' => '2916' - }, - '2' => { - 'name' => 'key', - 'offset' => '8', - 'type' => '257321' - }, - '3' => { - 'name' => 'flags', - 'offset' => '48', - 'type' => '145' - }, - '4' => { - 'name' => 'preferred_sign_algo', - 'offset' => '52', - 'type' => '3140' - }, - '5' => { - 'name' => 'pin', - 'offset' => '56', - 'type' => '163164' - } - }, - 'Name' => 'struct gnutls_privkey_st', - 'PrivateABI' => 1, - 'Size' => '72', - 'Type' => 'Struct' - }, - '4488' => { - 'BaseType' => '4500', - 'Header' => 'gnutls.h', - 'Line' => '1769', - 'Name' => 'gnutls_status_request_ocsp_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '45' => { - 'Name' => 'long', - 'Size' => '8', - 'Type' => 'Intrinsic' - }, - '4500' => { - 'Name' => 'int(*)(gnutls_session_t, void*, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '216' - }, - '2' => { - 'type' => '4531' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '45045' => { - 'BaseType' => '3312', - 'Name' => 'gnutls_transport_ptr_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4531' => { - 'BaseType' => '3887', - 'Name' => 'gnutls_datum_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4537' => { - 'BaseType' => '4549', - 'Header' => 'gnutls.h', - 'Line' => '1814', - 'Name' => 'gnutls_time_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4549' => { - 'Name' => 'time_t(*)(time_t*)', - 'Param' => { - '0' => { - 'type' => '4570' - } - }, - 'Return' => '268', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4570' => { - 'BaseType' => '268', - 'Name' => 'time_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4576' => { - 'BaseType' => '216', - 'Name' => 'void**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4582' => { - 'BaseType' => '4594', - 'Header' => 'gnutls.h', - 'Line' => '1826', - 'Name' => 'gnutls_alloc_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4594' => { - 'Name' => 'void*(*)(size_t)', - 'Param' => { - '0' => { - 'type' => '52' - } - }, - 'Return' => '216', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4615' => { - 'BaseType' => '4627', - 'Header' => 'gnutls.h', - 'Line' => '1827', - 'Name' => 'gnutls_calloc_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4627' => { - 'Name' => 'void*(*)(size_t, size_t)', - 'Param' => { - '0' => { - 'type' => '52' - }, - '1' => { - 'type' => '52' - } - }, - 'Return' => '216', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4653' => { - 'BaseType' => '4665', - 'Header' => 'gnutls.h', - 'Line' => '1829', - 'Name' => 'gnutls_free_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4665' => { - 'Name' => 'void(*)(void*)', - 'Param' => { - '0' => { - 'type' => '216' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4682' => { - 'BaseType' => '4694', - 'Header' => 'gnutls.h', - 'Line' => '1830', - 'Name' => 'gnutls_realloc_function', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4694' => { - 'Name' => 'void*(*)(void*, size_t)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '52' - } - }, - 'Return' => '216', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4795' => { - 'Name' => 'char*(*)(char const*)', - 'Param' => { - '0' => { - 'type' => '110' - } - }, - 'Return' => '240', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4801' => { - 'BaseType' => '4813', - 'Header' => 'gnutls.h', - 'Line' => '1848', - 'Name' => 'gnutls_log_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4813' => { - 'Name' => 'void(*)(int, char const*)', - 'Param' => { - '0' => { - 'type' => '75' - }, - '1' => { - 'type' => '110' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4835' => { - 'BaseType' => '4847', - 'Header' => 'gnutls.h', - 'Line' => '1849', - 'Name' => 'gnutls_audit_log_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4847' => { - 'Name' => 'void(*)(gnutls_session_t, char const*)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '110' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4905' => { - 'Header' => 'gnutls.h', - 'Line' => '1891', - 'Memb' => { - '0' => { - 'name' => 'iov_base', - 'offset' => '0', - 'type' => '216' - }, - '1' => { - 'name' => 'iov_len', - 'offset' => '8', - 'type' => '52' - } - }, - 'Name' => 'struct giovec_t', - 'Size' => '16', - 'Type' => 'Struct' - }, - '4917' => { - 'BaseType' => '4905', - 'Name' => 'giovec_t const', - 'Size' => '16', - 'Type' => 'Const' - }, - '4922' => { - 'BaseType' => '4934', - 'Header' => 'gnutls.h', - 'Line' => '1893', - 'Name' => 'gnutls_pull_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4934' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '3312' - }, - '1' => { - 'type' => '216' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '257', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4965' => { - 'BaseType' => '4977', - 'Header' => 'gnutls.h', - 'Line' => '1895', - 'Name' => 'gnutls_push_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4977' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, void const*, size_t)', - 'Param' => { - '0' => { - 'type' => '3312' - }, - '1' => { - 'type' => '334' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '257', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5008' => { - 'BaseType' => '5020', - 'Header' => 'gnutls.h', - 'Line' => '1899', - 'Name' => 'gnutls_pull_timeout_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5020' => { - 'Name' => 'int(*)(gnutls_transport_ptr_t, unsigned int)', - 'Param' => { - '0' => { - 'type' => '3312' - }, - '1' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '503803' => { - 'BaseType' => '85779', - 'Header' => 'crypto.h', - 'Line' => '132', - 'Name' => 'gnutls_rnd_level_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '5046' => { - 'BaseType' => '5058', - 'Header' => 'gnutls.h', - 'Line' => '1902', - 'Name' => 'gnutls_vec_push_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5058' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, giovec_t const*, int)', - 'Param' => { - '0' => { - 'type' => '3312' - }, - '1' => { - 'type' => '5089' - }, - '2' => { - 'type' => '75' - } - }, - 'Return' => '257', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5089' => { - 'BaseType' => '4917', - 'Name' => 'giovec_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5095' => { - 'BaseType' => '5107', - 'Header' => 'gnutls.h', - 'Line' => '1905', - 'Name' => 'gnutls_errno_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5107' => { - 'Name' => 'int(*)(gnutls_transport_ptr_t)', - 'Param' => { - '0' => { - 'type' => '3312' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '52' => { - 'BaseType' => '68', - 'Header' => 'stddef.h', - 'Line' => '216', - 'Name' => 'size_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '532314' => { - 'BaseType' => '3208', - 'Name' => 'gnutls_ecc_curve_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '535126' => { - 'BaseType' => '2533', - 'Name' => 'gnutls_digest_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5392' => { - 'Header' => 'str.h', - 'Line' => '87', - 'Memb' => { - '0' => { - 'name' => 'allocd', - 'offset' => '0', - 'type' => '8358' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '8358' - }, - '2' => { - 'name' => 'max_length', - 'offset' => '16', - 'type' => '52' - }, - '3' => { - 'name' => 'length', - 'offset' => '24', - 'type' => '52' - } - }, - 'Name' => 'struct gnutls_buffer_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '543136' => { - 'Header' => 'gnutls.h', - 'Line' => '587', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CERT_IGNORE', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CERT_REQUEST', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_CERT_REQUIRE', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_certificate_request_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '5453' => { - 'BaseType' => '216', - 'Header' => 'gnutls.h', - 'Line' => '2530', - 'Name' => 'gnutls_ext_priv_data_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5465' => { - 'BaseType' => '164', - 'Name' => 'unsigned char const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '546571' => { - 'Header' => 'gnutls.h', - 'Line' => '2183', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SAN_DNSNAME', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_SAN_RFC822NAME', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_SAN_URI', - 'value' => '3' - }, - '3' => { - 'name' => 'GNUTLS_SAN_IPADDRESS', - 'value' => '4' - }, - '4' => { - 'name' => 'GNUTLS_SAN_OTHERNAME', - 'value' => '5' - }, - '5' => { - 'name' => 'GNUTLS_SAN_DN', - 'value' => '6' - }, - '6' => { - 'name' => 'GNUTLS_SAN_MAX', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_SAN_OTHERNAME_XMPP', - 'value' => '1000' - }, - '8' => { - 'name' => 'GNUTLS_SAN_OTHERNAME_KRB5PRINCIPAL', - 'value' => '1001' - } - }, - 'Name' => 'enum gnutls_x509_subject_alt_name_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '546645' => { - 'BaseType' => '546571', - 'Header' => 'gnutls.h', - 'Line' => '2196', - 'Name' => 'gnutls_x509_subject_alt_name_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '5471' => { - 'BaseType' => '5483', - 'Header' => 'openpgp.h', - 'Line' => '317', - 'Name' => 'gnutls_openpgp_recv_key_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5483' => { - 'Name' => 'int(*)(gnutls_session_t, unsigned char const*, unsigned int, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '3324' - }, - '1' => { - 'type' => '5465' - }, - '2' => { - 'type' => '145' - }, - '3' => { - 'type' => '4531' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5519' => { - 'Header' => 'abstract.h', - 'Line' => '465', - 'Memb' => { - '0' => { - 'name' => 'pubkey', - 'offset' => '0', - 'type' => '4454' - }, - '1' => { - 'name' => 'cert', - 'offset' => '8', - 'type' => '3887' - }, - '2' => { - 'name' => 'type', - 'offset' => '24', - 'type' => '2854' - } - }, - 'Name' => 'struct gnutls_pcert_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '556153' => { - 'Line' => '44', - 'Memb' => { - '0' => { - 'name' => 'trusted_cas', - 'offset' => '0', - 'type' => '158389' - }, - '1' => { - 'name' => 'trusted_ca_size', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'named_certs', - 'offset' => '16', - 'type' => '2452112' - }, - '3' => { - 'name' => 'named_cert_size', - 'offset' => '24', - 'type' => '145' - }, - '4' => { - 'name' => 'crls', - 'offset' => '32', - 'type' => '906321' - }, - '5' => { - 'name' => 'crl_size', - 'offset' => '40', - 'type' => '145' - } - }, - 'Name' => 'struct node_st', - 'PrivateABI' => 1, - 'Size' => '48', - 'Source' => 'verify-high.c', - 'Type' => 'Struct' - }, - '556158' => { - 'BaseType' => '556153', - 'Name' => 'struct node_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5572' => { - 'BaseType' => '5519', - 'Header' => 'abstract.h', - 'Line' => '469', - 'Name' => 'gnutls_pcert_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '5584' => { - 'BaseType' => '5572', - 'Name' => 'gnutls_pcert_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '560826' => { - 'BaseType' => '2242', - 'Name' => 'gnutls_kx_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '561150' => { - 'BaseType' => '156964', - 'Name' => 'gnutls_certificate_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '568116' => { - 'BaseType' => '21563', - 'Header' => 'gnutls.h', - 'Line' => '1816', - 'Name' => 'mutex_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '568155' => { - 'BaseType' => '21563', - 'Header' => 'gnutls.h', - 'Line' => '1817', - 'Name' => 'mutex_lock_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '568167' => { - 'BaseType' => '21563', - 'Header' => 'gnutls.h', - 'Line' => '1818', - 'Name' => 'mutex_unlock_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '568179' => { - 'BaseType' => '21563', - 'Header' => 'gnutls.h', - 'Line' => '1819', - 'Name' => 'mutex_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5838' => { - 'Header' => 'gnutls_int.h', - 'Line' => '143', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_STREAM', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_DGRAM', - 'value' => '1' - } - }, - 'Name' => 'enum transport_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '5867' => { - 'BaseType' => '5838', - 'Header' => 'gnutls_int.h', - 'Line' => '146', - 'Name' => 'transport_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '5878' => { - 'Header' => 'gnutls_int.h', - 'Line' => '148', - 'Memb' => { - '0' => { - 'name' => 'RECORD_FLUSH', - 'value' => '0' - }, - '1' => { - 'name' => 'RECORD_CORKED', - 'value' => '1' - } - }, - 'Name' => 'enum record_flush_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '5907' => { - 'BaseType' => '5878', - 'Header' => 'gnutls_int.h', - 'Line' => '151', - 'Name' => 'record_flush_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '5918' => { - 'BaseType' => '5929', - 'Header' => 'crypto.h', - 'Line' => '142', - 'Name' => 'gnutls_cipher_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5929' => { - 'Name' => 'int(*)(gnutls_cipher_algorithm_t, void**, int)', - 'Param' => { - '0' => { - 'type' => '2122' - }, - '1' => { - 'type' => '4576' - }, - '2' => { - 'type' => '75' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5960' => { - 'BaseType' => '5971', - 'Header' => 'crypto.h', - 'Line' => '143', - 'Name' => 'gnutls_cipher_setkey_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5971' => { - 'Name' => 'int(*)(void*, void const*, size_t)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '334' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '6002' => { - 'BaseType' => '5971', - 'Header' => 'crypto.h', - 'Line' => '145', - 'Name' => 'gnutls_cipher_setiv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6013' => { - 'BaseType' => '6024', - 'Header' => 'crypto.h', - 'Line' => '146', - 'Name' => 'gnutls_cipher_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6024' => { - 'Name' => 'int(*)(void*, void const*, size_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '334' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '216' - }, - '4' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '6065' => { - 'BaseType' => '6024', - 'Header' => 'crypto.h', - 'Line' => '148', - 'Name' => 'gnutls_cipher_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6098' => { - 'Name' => 'void(*)(void*, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '216' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '611250' => { - 'BaseType' => '611262', - 'Header' => 'gnutls.h', - 'Line' => '1589', - 'Name' => 'gnutls_anon_server_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '611262' => { - 'BaseType' => '611268', - 'Name' => 'struct gnutls_anon_server_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '611268' => { - 'Header' => 'anon.h', - 'Line' => '27', - 'Memb' => { - '0' => { - 'name' => 'dh_params', - 'offset' => '0', - 'type' => '3411' - }, - '1' => { - 'name' => 'deinit_dh_params', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'params_func', - 'offset' => '16', - 'type' => '168045' - } - }, - 'Name' => 'struct gnutls_anon_server_credentials_st', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '611317' => { - 'BaseType' => '611334', - 'Header' => 'gnutls.h', - 'Line' => '1591', - 'Name' => 'gnutls_anon_client_credentials_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '611334' => { - 'BaseType' => '611340', - 'Name' => 'struct gnutls_anon_client_credentials_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '611340' => { - 'Header' => 'anon.h', - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'dummy', - 'offset' => '0', - 'type' => '75' - } - }, - 'Name' => 'struct gnutls_anon_client_credentials_st', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Struct' - }, - '6125' => { - 'BaseType' => '6136', - 'Header' => 'crypto.h', - 'Line' => '155', - 'Name' => 'gnutls_cipher_aead_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6136' => { - 'Name' => 'int(*)(void*, void const*, size_t, void const*, size_t, size_t, void const*, size_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '334' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '334' - }, - '4' => { - 'type' => '52' - }, - '5' => { - 'type' => '52' - }, - '6' => { - 'type' => '334' - }, - '7' => { - 'type' => '52' - }, - '8' => { - 'type' => '216' - }, - '9' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '6202' => { - 'BaseType' => '6136', - 'Header' => 'crypto.h', - 'Line' => '161', - 'Name' => 'gnutls_cipher_aead_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '621082' => { - 'BaseType' => '611317', - 'Name' => 'gnutls_anon_client_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '621198' => { - 'BaseType' => '611250', - 'Name' => 'gnutls_anon_server_credentials_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '6213' => { - 'BaseType' => '4665', - 'Header' => 'crypto.h', - 'Line' => '167', - 'Name' => 'gnutls_cipher_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6224' => { - 'BaseType' => '6235', - 'Header' => 'crypto.h', - 'Line' => '188', - 'Name' => 'gnutls_mac_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6235' => { - 'Name' => 'int(*)(gnutls_mac_algorithm_t, void**)', - 'Param' => { - '0' => { - 'type' => '2423' - }, - '1' => { - 'type' => '4576' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '6261' => { - 'BaseType' => '5971', - 'Header' => 'crypto.h', - 'Line' => '189', - 'Name' => 'gnutls_mac_setkey_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6272' => { - 'BaseType' => '5971', - 'Header' => 'crypto.h', - 'Line' => '190', - 'Name' => 'gnutls_mac_setnonce_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6283' => { - 'BaseType' => '5971', - 'Header' => 'crypto.h', - 'Line' => '191', - 'Name' => 'gnutls_mac_hash_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6294' => { - 'BaseType' => '6305', - 'Header' => 'crypto.h', - 'Line' => '192', - 'Name' => 'gnutls_mac_output_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6305' => { - 'Name' => 'int(*)(void*, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '216' - }, - '1' => { - 'type' => '216' - }, - '2' => { - 'type' => '52' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '6336' => { - 'BaseType' => '4665', - 'Header' => 'crypto.h', - 'Line' => '193', - 'Name' => 'gnutls_mac_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6347' => { - 'BaseType' => '6358', - 'Header' => 'crypto.h', - 'Line' => '194', - 'Name' => 'gnutls_mac_fast_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6358' => { - 'Name' => 'int(*)(gnutls_mac_algorithm_t, void const*, size_t, void const*, size_t, void const*, size_t, void*)', - 'Param' => { - '0' => { - 'type' => '2423' - }, - '1' => { - 'type' => '334' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '334' - }, - '4' => { - 'type' => '52' - }, - '5' => { - 'type' => '334' - }, - '6' => { - 'type' => '52' - }, - '7' => { - 'type' => '216' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '6414' => { - 'BaseType' => '6425', - 'Header' => 'crypto.h', - 'Line' => '209', - 'Name' => 'gnutls_digest_init_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6425' => { - 'Name' => 'int(*)(gnutls_digest_algorithm_t, void**)', - 'Param' => { - '0' => { - 'type' => '2533' - }, - '1' => { - 'type' => '4576' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '6451' => { - 'BaseType' => '5971', - 'Header' => 'crypto.h', - 'Line' => '210', - 'Name' => 'gnutls_digest_hash_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6462' => { - 'BaseType' => '6305', - 'Header' => 'crypto.h', - 'Line' => '211', - 'Name' => 'gnutls_digest_output_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6473' => { - 'BaseType' => '4665', - 'Header' => 'crypto.h', - 'Line' => '212', - 'Name' => 'gnutls_digest_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6484' => { - 'BaseType' => '6495', - 'Header' => 'crypto.h', - 'Line' => '213', - 'Name' => 'gnutls_digest_fast_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6495' => { - 'Name' => 'int(*)(gnutls_digest_algorithm_t, void const*, size_t, void*)', - 'Param' => { - '0' => { - 'type' => '2533' - }, - '1' => { - 'type' => '334' - }, - '2' => { - 'type' => '52' - }, - '3' => { - 'type' => '216' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '676431' => { - 'BaseType' => '3140', - 'Name' => 'gnutls_sign_algorithm_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '68' => { - 'Name' => 'unsigned long', - 'Size' => '8', - 'Type' => 'Intrinsic' - }, - '6954' => { - 'BaseType' => '216', - 'Header' => 'crypto-backend.h', - 'Line' => '83', - 'Name' => 'bigint_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '695484' => { - 'Header' => 'gnutls.h', - 'Line' => '403', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_AL_WARNING', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_AL_FATAL', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_alert_level_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '695690' => { - 'Header' => 'gnutls.h', - 'Line' => '476', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_A_CLOSE_NOTIFY', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_A_UNEXPECTED_MESSAGE', - 'value' => '10' - }, - '10' => { - 'name' => 'GNUTLS_A_CERTIFICATE_REVOKED', - 'value' => '44' - }, - '11' => { - 'name' => 'GNUTLS_A_CERTIFICATE_EXPIRED', - 'value' => '45' - }, - '12' => { - 'name' => 'GNUTLS_A_CERTIFICATE_UNKNOWN', - 'value' => '46' - }, - '13' => { - 'name' => 'GNUTLS_A_ILLEGAL_PARAMETER', - 'value' => '47' - }, - '14' => { - 'name' => 'GNUTLS_A_UNKNOWN_CA', - 'value' => '48' - }, - '15' => { - 'name' => 'GNUTLS_A_ACCESS_DENIED', - 'value' => '49' - }, - '16' => { - 'name' => 'GNUTLS_A_DECODE_ERROR', - 'value' => '50' - }, - '17' => { - 'name' => 'GNUTLS_A_DECRYPT_ERROR', - 'value' => '51' - }, - '18' => { - 'name' => 'GNUTLS_A_EXPORT_RESTRICTION', - 'value' => '60' - }, - '19' => { - 'name' => 'GNUTLS_A_PROTOCOL_VERSION', - 'value' => '70' - }, - '2' => { - 'name' => 'GNUTLS_A_BAD_RECORD_MAC', - 'value' => '20' - }, - '20' => { - 'name' => 'GNUTLS_A_INSUFFICIENT_SECURITY', - 'value' => '71' - }, - '21' => { - 'name' => 'GNUTLS_A_INTERNAL_ERROR', - 'value' => '80' - }, - '22' => { - 'name' => 'GNUTLS_A_INAPPROPRIATE_FALLBACK', - 'value' => '86' - }, - '23' => { - 'name' => 'GNUTLS_A_USER_CANCELED', - 'value' => '90' - }, - '24' => { - 'name' => 'GNUTLS_A_NO_RENEGOTIATION', - 'value' => '100' - }, - '25' => { - 'name' => 'GNUTLS_A_UNSUPPORTED_EXTENSION', - 'value' => '110' - }, - '26' => { - 'name' => 'GNUTLS_A_CERTIFICATE_UNOBTAINABLE', - 'value' => '111' - }, - '27' => { - 'name' => 'GNUTLS_A_UNRECOGNIZED_NAME', - 'value' => '112' - }, - '28' => { - 'name' => 'GNUTLS_A_UNKNOWN_PSK_IDENTITY', - 'value' => '115' - }, - '29' => { - 'name' => 'GNUTLS_A_NO_APPLICATION_PROTOCOL', - 'value' => '120' - }, - '3' => { - 'name' => 'GNUTLS_A_DECRYPTION_FAILED', - 'value' => '21' - }, - '4' => { - 'name' => 'GNUTLS_A_RECORD_OVERFLOW', - 'value' => '22' - }, - '5' => { - 'name' => 'GNUTLS_A_DECOMPRESSION_FAILURE', - 'value' => '30' - }, - '6' => { - 'name' => 'GNUTLS_A_HANDSHAKE_FAILURE', - 'value' => '40' - }, - '7' => { - 'name' => 'GNUTLS_A_SSL3_NO_CERTIFICATE', - 'value' => '41' - }, - '8' => { - 'name' => 'GNUTLS_A_BAD_CERTIFICATE', - 'value' => '42' - }, - '9' => { - 'name' => 'GNUTLS_A_UNSUPPORTED_CERTIFICATE', - 'value' => '43' - } - }, - 'Name' => 'enum gnutls_alert_description_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '707915' => { - 'BaseType' => '216', - 'Name' => 'void*const', - 'Size' => '8', - 'Type' => 'Const' - }, - '713671' => { - 'BaseType' => '713682', - 'Header' => 'pkcs11.h', - 'Line' => '56', - 'Name' => 'gnutls_pkcs11_token_callback_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '713682' => { - 'Name' => 'int(*)(void*const, char const*const, unsigned int)', - 'Param' => { - '0' => { - 'type' => '707915' - }, - '1' => { - 'type' => '116' - }, - '2' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '722' => { - 'Header' => 'libio.h', - 'Line' => '150', - 'Name' => '_IO_lock_t', - 'Type' => 'Typedef' - }, - '729' => { - 'Header' => 'libio.h', - 'Line' => '156', - 'Memb' => { - '0' => { - 'name' => '_next', - 'offset' => '0', - 'type' => '778' - }, - '1' => { - 'name' => '_sbuf', - 'offset' => '8', - 'type' => '784' - }, - '2' => { - 'name' => '_pos', - 'offset' => '16', - 'type' => '75' - } - }, - 'Name' => 'struct _IO_marker', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '75' => { - 'Name' => 'int', - 'Size' => '4', - 'Type' => 'Intrinsic' - }, - '7722' => { - 'BaseType' => '52', - 'Name' => 'size_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '778' => { - 'BaseType' => '729', - 'Name' => 'struct _IO_marker*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '784' => { - 'BaseType' => '341', - 'Name' => 'struct _IO_FILE*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7865' => { - 'BaseType' => '6954', - 'Name' => 'bigint_t[16]', - 'Size' => '128', - 'Type' => 'Array' - }, - '7881' => { - 'BaseType' => '962', - 'Name' => 'uint8_t[256]', - 'Size' => '256', - 'Type' => 'Array' - }, - '7897' => { - 'Header' => 'crypto-backend.h', - 'Line' => '183', - 'Memb' => { - '0' => { - 'name' => 'params', - 'offset' => '0', - 'type' => '7865' - }, - '1' => { - 'name' => 'params_nr', - 'offset' => '128', - 'type' => '145' - }, - '2' => { - 'name' => 'flags', - 'offset' => '132', - 'type' => '145' - }, - '3' => { - 'name' => 'raw_pub', - 'offset' => '136', - 'type' => '3887' - }, - '4' => { - 'name' => 'raw_priv', - 'offset' => '152', - 'type' => '3887' - }, - '5' => { - 'name' => 'seed_size', - 'offset' => '168', - 'type' => '145' - }, - '6' => { - 'name' => 'seed', - 'offset' => '172', - 'type' => '7881' - }, - '7' => { - 'name' => 'palgo', - 'offset' => '428', - 'type' => '2533' - }, - '8' => { - 'name' => 'algo', - 'offset' => '432', - 'type' => '2916' - } - }, - 'Name' => 'struct gnutls_pk_params_st', - 'PrivateABI' => 1, - 'Size' => '440', - 'Type' => 'Struct' - }, - '790' => { - 'BaseType' => '121', - 'Name' => 'char[1]', - 'Size' => '1', - 'Type' => 'Array' - }, - '7930' => { - 'Header' => 'gnutls_int.h', - 'Line' => '224', - 'Memb' => { - '0' => { - 'name' => 'STATE0', - 'value' => '0' - }, - '1' => { - 'name' => 'STATE1', - 'value' => '1' - }, - '10' => { - 'name' => 'STATE10', - 'value' => '10' - }, - '11' => { - 'name' => 'STATE11', - 'value' => '11' - }, - '12' => { - 'name' => 'STATE12', - 'value' => '12' - }, - '13' => { - 'name' => 'STATE13', - 'value' => '13' - }, - '14' => { - 'name' => 'STATE14', - 'value' => '14' - }, - '15' => { - 'name' => 'STATE15', - 'value' => '15' - }, - '16' => { - 'name' => 'STATE16', - 'value' => '16' - }, - '17' => { - 'name' => 'STATE17', - 'value' => '17' - }, - '18' => { - 'name' => 'STATE18', - 'value' => '18' - }, - '19' => { - 'name' => 'STATE19', - 'value' => '19' - }, - '2' => { - 'name' => 'STATE2', - 'value' => '2' - }, - '20' => { - 'name' => 'STATE20', - 'value' => '20' - }, - '21' => { - 'name' => 'STATE21', - 'value' => '21' - }, - '22' => { - 'name' => 'STATE22', - 'value' => '22' - }, - '23' => { - 'name' => 'STATE30', - 'value' => '30' - }, - '24' => { - 'name' => 'STATE31', - 'value' => '31' - }, - '25' => { - 'name' => 'STATE40', - 'value' => '40' - }, - '26' => { - 'name' => 'STATE41', - 'value' => '41' - }, - '27' => { - 'name' => 'STATE50', - 'value' => '50' - }, - '3' => { - 'name' => 'STATE3', - 'value' => '3' - }, - '4' => { - 'name' => 'STATE4', - 'value' => '4' - }, - '5' => { - 'name' => 'STATE5', - 'value' => '5' - }, - '6' => { - 'name' => 'STATE6', - 'value' => '6' - }, - '7' => { - 'name' => 'STATE7', - 'value' => '7' - }, - '8' => { - 'name' => 'STATE8', - 'value' => '8' - }, - '9' => { - 'name' => 'STATE9', - 'value' => '9' - } - }, - 'Name' => 'enum handshake_state_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '806' => { - 'BaseType' => '722', - 'Name' => '_IO_lock_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8115' => { - 'BaseType' => '7930', - 'Header' => 'gnutls_int.h', - 'Line' => '230', - 'Name' => 'handshake_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '812' => { - 'BaseType' => '121', - 'Name' => 'char[20]', - 'Size' => '20', - 'Type' => 'Array' - }, - '8126' => { - 'Header' => 'gnutls_int.h', - 'Line' => '232', - 'Memb' => { - '0' => { - 'name' => 'BYE_STATE0', - 'value' => '0' - }, - '1' => { - 'name' => 'BYE_STATE1', - 'value' => '1' - }, - '2' => { - 'name' => 'BYE_STATE2', - 'value' => '2' - } - }, - 'Name' => 'enum bye_state_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '8161' => { - 'BaseType' => '8126', - 'Header' => 'gnutls_int.h', - 'Line' => '234', - 'Name' => 'bye_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '8172' => { - 'Header' => 'gnutls_int.h', - 'Line' => '238', - 'Memb' => { - '0' => { - 'name' => 'SHB_SEND1', - 'value' => '0' - }, - '1' => { - 'name' => 'SHB_SEND2', - 'value' => '1' - }, - '2' => { - 'name' => 'SHB_RECV', - 'value' => '2' - } - }, - 'Name' => 'enum heartbeat_state_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '8207' => { - 'BaseType' => '8172', - 'Header' => 'gnutls_int.h', - 'Line' => '242', - 'Name' => 'heartbeat_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '8218' => { - 'Header' => 'gnutls_int.h', - 'Line' => '244', - 'Memb' => { - '0' => { - 'name' => 'RECV_STATE_0', - 'value' => '0' - }, - '1' => { - 'name' => 'RECV_STATE_DTLS_RETRANSMIT', - 'value' => '1' - }, - '2' => { - 'name' => 'RECV_STATE_FALSE_START_HANDLING', - 'value' => '2' - }, - '3' => { - 'name' => 'RECV_STATE_FALSE_START', - 'value' => '3' - } - }, - 'Name' => 'enum recv_state_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '8259' => { - 'BaseType' => '8218', - 'Header' => 'gnutls_int.h', - 'Line' => '249', - 'Name' => 'recv_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '8270' => { - 'BaseType' => '8281', - 'Header' => 'libtasn1.h', - 'Line' => '128', - 'Name' => 'asn1_node_st', - 'Type' => 'Typedef' - }, - '8281' => { - 'Name' => 'struct asn1_node_st', - 'PrivateABI' => 1, - 'Type' => 'Struct' - }, - '8286' => { - 'BaseType' => '8297', - 'Header' => 'libtasn1.h', - 'Line' => '130', - 'Name' => 'asn1_node', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8297' => { - 'BaseType' => '8270', - 'Name' => 'asn1_node_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8358' => { - 'BaseType' => '962', - 'Name' => 'uint8_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8364' => { - 'BaseType' => '5392', - 'Header' => 'str.h', - 'Line' => '92', - 'Name' => 'gnutls_buffer_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '8452' => { - 'Header' => 'gnutls_int.h', - 'Line' => '279', - 'Memb' => { - '0' => { - 'name' => 'CIPHER_STREAM', - 'value' => '0' - }, - '1' => { - 'name' => 'CIPHER_BLOCK', - 'value' => '1' - }, - '2' => { - 'name' => 'CIPHER_AEAD', - 'value' => '2' - } - }, - 'Name' => 'enum cipher_type_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '8464' => { - 'Header' => 'gnutls_int.h', - 'Line' => '285', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CHANGE_CIPHER_SPEC', - 'value' => '20' - }, - '1' => { - 'name' => 'GNUTLS_ALERT', - 'value' => '21' - }, - '2' => { - 'name' => 'GNUTLS_HANDSHAKE', - 'value' => '22' - }, - '3' => { - 'name' => 'GNUTLS_APPLICATION_DATA', - 'value' => '23' - }, - '4' => { - 'name' => 'GNUTLS_HEARTBEAT', - 'value' => '24' - } - }, - 'Name' => 'enum content_type_t', - 'PrivateABI' => 1, - 'Size' => '4', - 'Type' => 'Enum' - }, - '8512' => { - 'BaseType' => '8464', - 'Header' => 'gnutls_int.h', - 'Line' => '289', - 'Name' => 'content_type_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '85779' => { - 'Header' => 'crypto.h', - 'Line' => '128', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_RND_NONCE', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_RND_RANDOM', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_RND_KEY', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_rnd_level', - 'Size' => '4', - 'Type' => 'Enum' - }, - '863506' => { - 'Header' => 'gnutls.h', - 'Line' => '599', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_OPENPGP_CERT', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_OPENPGP_CERT_FINGERPRINT', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_openpgp_crt_status_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '8638' => { - 'BaseType' => '962', - 'Name' => 'uint8_t[12]', - 'Size' => '12', - 'Type' => 'Array' - }, - '864137' => { - 'Header' => 'gnutls.h', - 'Line' => '860', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CB_TLS_UNIQUE', - 'value' => '0' - } - }, - 'Name' => 'enum gnutls_channel_binding_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '8654' => { - 'Header' => 'gnutls_int.h', - 'Line' => '319', - 'Memb' => { - '0' => { - 'name' => 'htype', - 'offset' => '0', - 'type' => '2706' - }, - '1' => { - 'name' => 'length', - 'offset' => '4', - 'type' => '984' - }, - '2' => { - 'name' => 'sequence', - 'offset' => '8', - 'type' => '973' - }, - '3' => { - 'name' => 'start_offset', - 'offset' => '12', - 'type' => '984' - }, - '4' => { - 'name' => 'end_offset', - 'offset' => '16', - 'type' => '984' - }, - '5' => { - 'name' => 'header', - 'offset' => '20', - 'type' => '8638' - }, - '6' => { - 'name' => 'header_size', - 'offset' => '32', - 'type' => '75' - }, - '7' => { - 'name' => 'data', - 'offset' => '40', - 'type' => '8364' - } - }, - 'Name' => 'struct handshake_buffer_st', - 'PrivateABI' => 1, - 'Size' => '72', - 'Type' => 'Struct' - }, - '8666' => { - 'BaseType' => '3963', - 'Header' => 'gnutls_int.h', - 'Line' => '360', - 'Name' => 'mbuffer_st', - 'Size' => '80', - 'Type' => 'Typedef' - }, - '8678' => { - 'Header' => 'gnutls_int.h', - 'Line' => '362', - 'Memb' => { - '0' => { - 'name' => 'head', - 'offset' => '0', - 'type' => '8744' - }, - '1' => { - 'name' => 'tail', - 'offset' => '8', - 'type' => '8744' - }, - '2' => { - 'name' => 'length', - 'offset' => '16', - 'type' => '145' - }, - '3' => { - 'name' => 'byte_length', - 'offset' => '24', - 'type' => '52' - } - }, - 'Name' => 'struct mbuffer_head_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '8744' => { - 'BaseType' => '8666', - 'Name' => 'mbuffer_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8750' => { - 'BaseType' => '8678', - 'Header' => 'gnutls_int.h', - 'Line' => '368', - 'Name' => 'mbuffer_head_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '8762' => { - 'Header' => 'gnutls_int.h', - 'Line' => '373', - 'Memb' => { - '0' => { - 'name' => 'algorithm', - 'offset' => '0', - 'type' => '2296' - }, - '1' => { - 'name' => 'credentials', - 'offset' => '8', - 'type' => '216' - }, - '2' => { - 'name' => 'next', - 'offset' => '16', - 'type' => '9143' - } - }, - 'Name' => 'struct auth_cred_st', - 'PrivateABI' => 1, - 'Size' => '24', - 'Type' => 'Struct' - }, - '8821' => { - 'BaseType' => '8762', - 'Header' => 'gnutls_int.h', - 'Line' => '380', - 'Name' => 'auth_cred_st', - 'Size' => '24', - 'Type' => 'Typedef' - }, - '882975' => { - 'BaseType' => '3324', - 'Name' => 'gnutls_session_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8833' => { - 'Header' => 'gnutls_int.h', - 'Line' => '382', - 'Memb' => { - '0' => { - 'name' => 'ecdh_params', - 'offset' => '0', - 'type' => '7897' - }, - '1' => { - 'name' => 'ecdh_x', - 'offset' => '440', - 'type' => '6954' - }, - '10' => { - 'name' => 'A', - 'offset' => '960', - 'type' => '6954' - }, - '11' => { - 'name' => 'B', - 'offset' => '968', - 'type' => '6954' - }, - '12' => { - 'name' => 'u', - 'offset' => '976', - 'type' => '6954' - }, - '13' => { - 'name' => 'b', - 'offset' => '984', - 'type' => '6954' - }, - '14' => { - 'name' => 'a', - 'offset' => '992', - 'type' => '6954' - }, - '15' => { - 'name' => 'x', - 'offset' => '1000', - 'type' => '6954' - }, - '16' => { - 'name' => 'auth_info', - 'offset' => '1008', - 'type' => '216' - }, - '17' => { - 'name' => 'auth_info_type', - 'offset' => '1016', - 'type' => '2296' - }, - '18' => { - 'name' => 'auth_info_size', - 'offset' => '1020', - 'type' => '75' - }, - '19' => { - 'name' => 'crypt_algo', - 'offset' => '1024', - 'type' => '962' - }, - '2' => { - 'name' => 'ecdh_y', - 'offset' => '448', - 'type' => '6954' - }, - '20' => { - 'name' => 'cred', - 'offset' => '1032', - 'type' => '9143' - }, - '21' => { - 'name' => 'crt_requested', - 'offset' => '1040', - 'type' => '75' - }, - '3' => { - 'name' => 'ecdhx', - 'offset' => '456', - 'type' => '3887' - }, - '4' => { - 'name' => 'key', - 'offset' => '472', - 'type' => '3887' - }, - '5' => { - 'name' => 'dh_params', - 'offset' => '488', - 'type' => '7897' - }, - '6' => { - 'name' => 'client_Y', - 'offset' => '928', - 'type' => '6954' - }, - '7' => { - 'name' => 'srp_key', - 'offset' => '936', - 'type' => '6954' - }, - '8' => { - 'name' => 'srp_g', - 'offset' => '944', - 'type' => '6954' - }, - '9' => { - 'name' => 'srp_p', - 'offset' => '952', - 'type' => '6954' - } - }, - 'Name' => 'struct gnutls_key_st', - 'PrivateABI' => 1, - 'Size' => '1048', - 'Type' => 'Struct' - }, - '891381' => { - 'BaseType' => '891393', - 'Header' => 'gnutls.h', - 'Line' => '1566', - 'Name' => 'gnutls_x509_crl_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '891393' => { - 'BaseType' => '891399', - 'Name' => 'struct gnutls_x509_crl_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '891399' => { - 'Header' => 'x509_int.h', - 'Line' => '55', - 'Memb' => { - '0' => { - 'name' => 'crl', - 'offset' => '0', - 'type' => '8286' - }, - '1' => { - 'name' => 'expanded', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'rcache', - 'offset' => '16', - 'type' => '8286' - }, - '3' => { - 'name' => 'rcache_idx', - 'offset' => '24', - 'type' => '145' - }, - '4' => { - 'name' => 'use_extensions', - 'offset' => '28', - 'type' => '75' - }, - '5' => { - 'name' => 'der', - 'offset' => '32', - 'type' => '3887' - }, - '6' => { - 'name' => 'raw_issuer_dn', - 'offset' => '48', - 'type' => '3887' - } - }, - 'Name' => 'struct gnutls_x509_crl_int', - 'PrivateABI' => 1, - 'Size' => '64', - 'Type' => 'Struct' - }, - '893892' => { - 'BaseType' => '893904', - 'Header' => 'x509.h', - 'Line' => '469', - 'Name' => 'gnutls_x509_tlsfeatures_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '893904' => { - 'BaseType' => '893910', - 'Name' => 'struct gnutls_x509_tlsfeatures_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '893910' => { - 'Header' => 'x509_int.h', - 'Line' => '464', - 'Memb' => { - '0' => { - 'name' => 'feature', - 'offset' => '0', - 'type' => '13431' - }, - '1' => { - 'name' => 'size', - 'offset' => '64', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_x509_tlsfeatures_st', - 'PrivateABI' => 1, - 'Size' => '68', - 'Type' => 'Struct' - }, - '903650' => { - 'BaseType' => '903661', - 'Header' => 'pkcs12.h', - 'Line' => '37', - 'Name' => 'gnutls_pkcs12_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '903661' => { - 'BaseType' => '903667', - 'Name' => 'struct gnutls_pkcs12_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '903667' => { - 'Header' => 'x509_int.h', - 'Line' => '353', - 'Memb' => { - '0' => { - 'name' => 'pkcs12', - 'offset' => '0', - 'type' => '8286' - }, - '1' => { - 'name' => 'expanded', - 'offset' => '8', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_pkcs12_int', - 'PrivateABI' => 1, - 'Size' => '16', - 'Type' => 'Struct' - }, - '904095' => { - 'BaseType' => '904106', - 'Header' => 'ocsp.h', - 'Line' => '192', - 'Name' => 'gnutls_ocsp_resp_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '904106' => { - 'BaseType' => '904112', - 'Name' => 'struct gnutls_ocsp_resp_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '904112' => { - 'Line' => '41', - 'Memb' => { - '0' => { - 'name' => 'resp', - 'offset' => '0', - 'type' => '8286' - }, - '1' => { - 'name' => 'response_type_oid', - 'offset' => '8', - 'type' => '3887' - }, - '2' => { - 'name' => 'basicresp', - 'offset' => '24', - 'type' => '8286' - }, - '3' => { - 'name' => 'der', - 'offset' => '32', - 'type' => '3887' - }, - '4' => { - 'name' => 'init', - 'offset' => '48', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_ocsp_resp_int', - 'PrivateABI' => 1, - 'Size' => '56', - 'Source' => 'ocsp.c', - 'Type' => 'Struct' - }, - '904277' => { - 'BaseType' => '904288', - 'Header' => 'urls.h', - 'Line' => '40', - 'Name' => 'gnutls_privkey_import_url_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '904288' => { - 'Name' => 'int(*)(gnutls_privkey_t, char const*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '156725' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '904319' => { - 'BaseType' => '904330', - 'Header' => 'urls.h', - 'Line' => '43', - 'Name' => 'gnutls_x509_crt_import_url_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '904330' => { - 'Name' => 'int(*)(gnutls_x509_crt_t, char const*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '156760' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '904361' => { - 'BaseType' => '904372', - 'Header' => 'urls.h', - 'Line' => '49', - 'Name' => 'gnutls_pubkey_import_url_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '904372' => { - 'Name' => 'int(*)(gnutls_pubkey_t, char const*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '4454' - }, - '1' => { - 'type' => '110' - }, - '2' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '904403' => { - 'BaseType' => '904414', - 'Header' => 'urls.h', - 'Line' => '56', - 'Name' => 'gnutls_get_raw_issuer_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '904414' => { - 'Name' => 'int(*)(char const*, gnutls_x509_crt_t, gnutls_datum_t*, unsigned int)', - 'Param' => { - '0' => { - 'type' => '110' - }, - '1' => { - 'type' => '156760' - }, - '2' => { - 'type' => '4531' - }, - '3' => { - 'type' => '145' - } - }, - 'Return' => '75', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '904450' => { - 'Header' => 'urls.h', - 'Line' => '59', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'name_size', - 'offset' => '8', - 'type' => '145' - }, - '2' => { - 'name' => 'import_key', - 'offset' => '16', - 'type' => '904277' - }, - '3' => { - 'name' => 'import_crt', - 'offset' => '24', - 'type' => '904319' - }, - '4' => { - 'name' => 'import_pubkey', - 'offset' => '32', - 'type' => '904361' - }, - '5' => { - 'name' => 'get_issuer', - 'offset' => '40', - 'type' => '904403' - }, - '6' => { - 'name' => 'future1', - 'offset' => '48', - 'type' => '216' - }, - '7' => { - 'name' => 'future2', - 'offset' => '56', - 'type' => '216' - } - }, - 'Name' => 'struct gnutls_custom_url_st', - 'Size' => '64', - 'Type' => 'Struct' - }, - '904559' => { - 'BaseType' => '904450', - 'Header' => 'urls.h', - 'Line' => '68', - 'Name' => 'gnutls_custom_url_st', - 'Size' => '64', - 'Type' => 'Typedef' - }, - '904570' => { - 'BaseType' => '904559', - 'Name' => 'gnutls_custom_url_st[]', - 'Size' => '8', - 'Type' => 'Array' - }, - '906321' => { - 'BaseType' => '891381', - 'Name' => 'gnutls_x509_crl_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '907727' => { - 'BaseType' => '159042', - 'Name' => 'gnutls_x509_trust_list_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '909294' => { - 'BaseType' => '158389', - 'Name' => 'gnutls_x509_crt_t**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '909492' => { - 'BaseType' => '156748', - 'Name' => 'gnutls_x509_privkey_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '9143' => { - 'BaseType' => '8821', - 'Name' => 'auth_cred_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '9149' => { - 'BaseType' => '8833', - 'Header' => 'gnutls_int.h', - 'Line' => '432', - 'Name' => 'gnutls_key_st', - 'Size' => '1048', - 'Type' => 'Typedef' - }, - '9161' => { - 'BaseType' => '9173', - 'Header' => 'gnutls_int.h', - 'Line' => '440', - 'Name' => 'record_state_st', - 'Size' => '224', - 'Type' => 'Typedef' - }, - '9173' => { - 'Header' => 'gnutls_int.h', - 'Line' => '601', - 'Memb' => { - '0' => { - 'name' => 'mac_secret', - 'offset' => '0', - 'type' => '3887' - }, - '1' => { - 'name' => 'IV', - 'offset' => '16', - 'type' => '3887' - }, - '2' => { - 'name' => 'key', - 'offset' => '32', - 'type' => '3887' - }, - '3' => { - 'name' => 'cipher_state', - 'offset' => '48', - 'type' => '10659' - }, - '4' => { - 'name' => 'compression_state', - 'offset' => '200', - 'type' => '10707' - }, - '5' => { - 'name' => 'sequence_number', - 'offset' => '216', - 'type' => '1896' - } - }, - 'Name' => 'struct record_state_st', - 'PrivateABI' => 1, - 'Size' => '224', - 'Type' => 'Struct' - }, - '9264' => { - 'BaseType' => '9276', - 'Header' => 'gnutls_int.h', - 'Line' => '443', - 'Name' => 'record_parameters_st', - 'Size' => '520', - 'Type' => 'Typedef' - }, - '9276' => { - 'Header' => 'gnutls_int.h', - 'Line' => '619', - 'Memb' => { - '0' => { - 'name' => 'epoch', - 'offset' => '0', - 'type' => '973' - }, - '1' => { - 'name' => 'initialized', - 'offset' => '4', - 'type' => '75' - }, - '10' => { - 'name' => 'write', - 'offset' => '288', - 'type' => '9161' - }, - '11' => { - 'name' => 'usage_cnt', - 'offset' => '512', - 'type' => '75' - }, - '2' => { - 'name' => 'compression_algorithm', - 'offset' => '8', - 'type' => '2583' - }, - '3' => { - 'name' => 'cipher', - 'offset' => '16', - 'type' => '10506' - }, - '4' => { - 'name' => 'etm', - 'offset' => '24', - 'type' => '9592' - }, - '5' => { - 'name' => 'mac', - 'offset' => '32', - 'type' => '10150' - }, - '6' => { - 'name' => 'dtls_sw_next', - 'offset' => '40', - 'type' => '995' - }, - '7' => { - 'name' => 'dtls_sw_bits', - 'offset' => '48', - 'type' => '995' - }, - '8' => { - 'name' => 'dtls_sw_have_recv', - 'offset' => '56', - 'type' => '145' - }, - '9' => { - 'name' => 'read', - 'offset' => '64', - 'type' => '9161' - } - }, - 'Name' => 'struct record_parameters_st', - 'PrivateABI' => 1, - 'Size' => '520', - 'Type' => 'Struct' - }, - '941681' => { - 'Header' => 'gnutls.h', - 'Line' => '1250', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SUPPLEMENTAL_UNKNOWN', - 'value' => '0' - } - }, - 'Name' => 'enum gnutls_supplemental_data_format_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '943119' => { - 'BaseType' => '22503', - 'Header' => 'gnutls.h', - 'Line' => '2591', - 'Name' => 'gnutls_supp_recv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '943131' => { - 'BaseType' => '22552', - 'Header' => 'gnutls.h', - 'Line' => '2593', - 'Name' => 'gnutls_supp_send_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9449' => { - 'Header' => 'gnutls_int.h', - 'Line' => '446', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'id', - 'offset' => '8', - 'type' => '2122' - }, - '2' => { - 'name' => 'blocksize', - 'offset' => '12', - 'type' => '973' - }, - '3' => { - 'name' => 'keysize', - 'offset' => '14', - 'type' => '973' - }, - '4' => { - 'name' => 'type', - 'offset' => '16', - 'type' => '8452' - }, - '5' => { - 'name' => 'implicit_iv', - 'offset' => '20', - 'type' => '973' - }, - '6' => { - 'name' => 'explicit_iv', - 'offset' => '22', - 'type' => '973' - }, - '7' => { - 'name' => 'cipher_iv', - 'offset' => '24', - 'type' => '973' - }, - '8' => { - 'name' => 'tagsize', - 'offset' => '26', - 'type' => '973' - }, - '9' => { - 'name' => 'xor_nonce', - 'offset' => '28', - 'type' => '9592' - } - }, - 'Name' => 'struct cipher_entry_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '951418' => { - 'BaseType' => '13523', - 'Line' => '57', - 'Name' => 'gnutls_supplemental_entry_st', - 'Size' => '32', - 'Source' => 'supplemental.c', - 'Type' => 'Typedef' - }, - '951476' => { - 'BaseType' => '951418', - 'Name' => 'gnutls_supplemental_entry_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '9592' => { - 'Name' => '_Bool', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '9599' => { - 'BaseType' => '9449', - 'Header' => 'gnutls_int.h', - 'Line' => '457', - 'Name' => 'cipher_entry_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '9611' => { - 'BaseType' => '9599', - 'Name' => 'cipher_entry_st const', - 'Size' => '32', - 'Type' => 'Const' - }, - '9616' => { - 'Header' => 'gnutls_int.h', - 'Line' => '474', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'oid', - 'offset' => '8', - 'type' => '110' - }, - '2' => { - 'name' => 'mac_oid', - 'offset' => '16', - 'type' => '110' - }, - '3' => { - 'name' => 'id', - 'offset' => '24', - 'type' => '2423' - }, - '4' => { - 'name' => 'output_size', - 'offset' => '28', - 'type' => '145' - }, - '5' => { - 'name' => 'key_size', - 'offset' => '32', - 'type' => '145' - }, - '6' => { - 'name' => 'nonce_size', - 'offset' => '36', - 'type' => '145' - }, - '7' => { - 'name' => 'placeholder', - 'offset' => '40', - 'type' => '145' - }, - '8' => { - 'name' => 'secure', - 'offset' => '44', - 'type' => '145' - }, - '9' => { - 'name' => 'block_size', - 'offset' => '48', - 'type' => '145' - } - }, - 'Name' => 'struct mac_entry_st', - 'PrivateABI' => 1, - 'Size' => '56', - 'Type' => 'Struct' - }, - '962' => { - 'BaseType' => '157', - 'Header' => 'stdint.h', - 'Line' => '48', - 'Name' => 'uint8_t', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '973' => { - 'BaseType' => '103', - 'Header' => 'stdint.h', - 'Line' => '49', - 'Name' => 'uint16_t', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '975783' => { - 'BaseType' => '988497', - 'Header' => 'crypto.h', - 'Line' => '32', - 'Name' => 'gnutls_cipher_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '975800' => { - 'Line' => '34', - 'Memb' => { - '0' => { - 'name' => 'ctx_enc', - 'offset' => '0', - 'type' => '10512' - }, - '1' => { - 'name' => 'ctx_dec', - 'offset' => '80', - 'type' => '10512' - } - }, - 'Name' => 'struct api_cipher_hd_st', - 'PrivateABI' => 1, - 'Size' => '160', - 'Source' => 'crypto-api.c', - 'Type' => 'Struct' - }, - '975837' => { - 'BaseType' => '984118', - 'Header' => 'crypto.h', - 'Line' => '65', - 'Name' => 'gnutls_aead_cipher_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '975854' => { - 'Line' => '625', - 'Memb' => { - '0' => { - 'name' => 'ctx_enc', - 'offset' => '0', - 'type' => '10512' - } - }, - 'Name' => 'struct api_aead_cipher_hd_st', - 'PrivateABI' => 1, - 'Size' => '80', - 'Source' => 'crypto-api.c', - 'Type' => 'Struct' - }, - '975881' => { - 'BaseType' => '975892', - 'Header' => 'crypto.h', - 'Line' => '89', - 'Name' => 'gnutls_hash_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '975892' => { - 'BaseType' => '975898', - 'Name' => 'struct hash_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '975898' => { - 'Name' => 'struct hash_hd_st', - 'PrivateABI' => 1, - 'Type' => 'Struct' - }, - '9759' => { - 'BaseType' => '9616', - 'Header' => 'gnutls_int.h', - 'Line' => '485', - 'Name' => 'mac_entry_st', - 'Size' => '56', - 'Type' => 'Typedef' - }, - '975903' => { - 'BaseType' => '975914', - 'Header' => 'crypto.h', - 'Line' => '90', - 'Name' => 'gnutls_hmac_hd_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '975914' => { - 'BaseType' => '975920', - 'Name' => 'struct hmac_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '975920' => { - 'Name' => 'struct hmac_hd_st', - 'PrivateABI' => 1, - 'Type' => 'Struct' - }, - '9771' => { - 'BaseType' => '9759', - 'Name' => 'mac_entry_st const', - 'Size' => '56', - 'Type' => 'Const' - }, - '983983' => { - 'BaseType' => '975800', - 'Line' => '37', - 'Name' => 'api_cipher_hd_st', - 'Size' => '160', - 'Source' => 'crypto-api.c', - 'Type' => 'Typedef' - }, - '983994' => { - 'BaseType' => '975854', - 'Line' => '627', - 'Name' => 'api_aead_cipher_hd_st', - 'Size' => '80', - 'Source' => 'crypto-api.c', - 'Type' => 'Typedef' - }, - '984' => { - 'BaseType' => '145', - 'Header' => 'stdint.h', - 'Line' => '51', - 'Name' => 'uint32_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '984118' => { - 'BaseType' => '983994', - 'Name' => 'api_aead_cipher_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '985954' => { - 'BaseType' => '975837', - 'Name' => 'gnutls_aead_cipher_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '987189' => { - 'BaseType' => '975881', - 'Name' => 'gnutls_hash_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '988302' => { - 'BaseType' => '975903', - 'Name' => 'gnutls_hmac_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '988497' => { - 'BaseType' => '983983', - 'Name' => 'api_cipher_hd_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '990934' => { - 'BaseType' => '975783', - 'Name' => 'gnutls_cipher_hd_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '995' => { - 'BaseType' => '68', - 'Header' => 'stdint.h', - 'Line' => '55', - 'Name' => 'uint64_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '9954' => { - 'Header' => 'gnutls_int.h', - 'Line' => '504', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '110' - }, - '1' => { - 'name' => 'id', - 'offset' => '8', - 'type' => '2804' - }, - '10' => { - 'name' => 'selectable_prf', - 'offset' => '28', - 'type' => '9592' - }, - '11' => { - 'name' => 'obsolete', - 'offset' => '29', - 'type' => '9592' - }, - '12' => { - 'name' => 'false_start', - 'offset' => '30', - 'type' => '9592' - }, - '2' => { - 'name' => 'age', - 'offset' => '12', - 'type' => '145' - }, - '3' => { - 'name' => 'major', - 'offset' => '16', - 'type' => '962' - }, - '4' => { - 'name' => 'minor', - 'offset' => '17', - 'type' => '962' - }, - '5' => { - 'name' => 'transport', - 'offset' => '20', - 'type' => '5867' - }, - '6' => { - 'name' => 'supported', - 'offset' => '24', - 'type' => '9592' - }, - '7' => { - 'name' => 'explicit_iv', - 'offset' => '25', - 'type' => '9592' - }, - '8' => { - 'name' => 'extensions', - 'offset' => '26', - 'type' => '9592' - }, - '9' => { - 'name' => 'selectable_sighash', - 'offset' => '27', - 'type' => '9592' - } - }, - 'Name' => 'struct version_entry_st', - 'PrivateABI' => 1, - 'Size' => '32', - 'Type' => 'Struct' - }, - '9966' => { - 'BaseType' => '9954', - 'Name' => 'version_entry_st const', - 'Size' => '32', - 'Type' => 'Const' - }, - '998461' => { - 'Header' => 'x509.h', - 'Line' => '1154', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_KEYGEN_SEED', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_KEYGEN_DIGEST', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_keygen_types_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '998522' => { - 'Header' => 'x509.h', - 'Line' => '1160', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '998461' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '3881' - }, - '2' => { - 'name' => 'size', - 'offset' => '16', - 'type' => '145' - } - }, - 'Name' => 'struct gnutls_keygen_data_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '998534' => { - 'BaseType' => '998522', - 'Name' => 'gnutls_keygen_data_st const', - 'Size' => '24', - 'Type' => 'Const' - }, - '998581' => { - 'Header' => 'openpgp.h', - 'Line' => '49', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_OPENPGP_FMT_RAW', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_OPENPGP_FMT_BASE64', - 'value' => '1' - } - }, - 'Name' => 'enum gnutls_openpgp_crt_fmt', - 'Size' => '4', - 'Type' => 'Enum' - }, - '998610' => { - 'BaseType' => '998581', - 'Header' => 'openpgp.h', - 'Line' => '52', - 'Name' => 'gnutls_openpgp_crt_fmt_t', - 'Size' => '4', - 'Type' => 'Typedef' - } - }, - 'UndefinedSymbols' => { - 'libgnutls.so.30.13.1' => { - 'UC_CATEGORY_Cc' => 0, - 'UC_CATEGORY_Ll' => 0, - 'UC_CATEGORY_Lm' => 0, - 'UC_CATEGORY_Lo' => 0, - 'UC_CATEGORY_Lt' => 0, - 'UC_CATEGORY_Lu' => 0, - 'UC_CATEGORY_Mc' => 0, - 'UC_CATEGORY_Me' => 0, - 'UC_CATEGORY_Mn' => 0, - 'UC_CATEGORY_Nd' => 0, - 'UC_CATEGORY_Nl' => 0, - 'UC_CATEGORY_No' => 0, - 'UC_CATEGORY_Pc' => 0, - 'UC_CATEGORY_Pd' => 0, - 'UC_CATEGORY_Pe' => 0, - 'UC_CATEGORY_Pf' => 0, - 'UC_CATEGORY_Pi' => 0, - 'UC_CATEGORY_Po' => 0, - 'UC_CATEGORY_Ps' => 0, - 'UC_CATEGORY_Sc' => 0, - 'UC_CATEGORY_Sk' => 0, - 'UC_CATEGORY_Sm' => 0, - 'UC_CATEGORY_So' => 0, - 'UC_CATEGORY_Zs' => 0, - '_ITM_deregisterTMCloneTable' => 0, - '_ITM_registerTMCloneTable' => 0, - '_Jv_RegisterClasses' => 0, - '__assert_fail@GLIBC_2.2.5' => 0, - '__ctype_b_loc@GLIBC_2.3' => 0, - '__cxa_finalize@GLIBC_2.2.5' => 0, - '__errno_location@GLIBC_2.2.5' => 0, - '__fxstat@GLIBC_2.2.5' => 0, - '__getdelim@GLIBC_2.2.5' => 0, - '__gmon_start__' => 0, - '__gmpz_add' => 0, - '__gmpz_add_ui' => 0, - '__gmpz_cdiv_q' => 0, - '__gmpz_clear' => 0, - '__gmpz_cmp' => 0, - '__gmpz_cmp_ui' => 0, - '__gmpz_fdiv_q' => 0, - '__gmpz_fdiv_q_2exp' => 0, - '__gmpz_fdiv_r' => 0, - '__gmpz_fdiv_r_2exp' => 0, - '__gmpz_gcd' => 0, - '__gmpz_init' => 0, - '__gmpz_invert' => 0, - '__gmpz_lcm' => 0, - '__gmpz_mod' => 0, - '__gmpz_mul' => 0, - '__gmpz_mul_2exp' => 0, - '__gmpz_mul_ui' => 0, - '__gmpz_powm' => 0, - '__gmpz_probab_prime_p' => 0, - '__gmpz_set' => 0, - '__gmpz_set_ui' => 0, - '__gmpz_sizeinbase' => 0, - '__gmpz_sqrt' => 0, - '__gmpz_sub' => 0, - '__gmpz_sub_ui' => 0, - '__gmpz_tstbit' => 0, - '__rawmemchr@GLIBC_2.2.5' => 0, - '__register_atfork@GLIBC_2.3.2' => 0, - '__xstat@GLIBC_2.2.5' => 0, - 'abort@GLIBC_2.2.5' => 0, - 'asn1_array2tree@LIBTASN1_0_3' => 0, - 'asn1_check_version@LIBTASN1_0_3' => 0, - 'asn1_copy_node@LIBTASN1_0_3' => 0, - 'asn1_create_element@LIBTASN1_0_3' => 0, - 'asn1_decode_simple_ber@LIBTASN1_0_3' => 0, - 'asn1_decode_simple_der@LIBTASN1_0_3' => 0, - 'asn1_delete_structure2@LIBTASN1_0_3' => 0, - 'asn1_delete_structure@LIBTASN1_0_3' => 0, - 'asn1_der_coding@LIBTASN1_0_3' => 0, - 'asn1_der_decoding2@LIBTASN1_0_3' => 0, - 'asn1_der_decoding@LIBTASN1_0_3' => 0, - 'asn1_der_decoding_startEnd@LIBTASN1_0_3' => 0, - 'asn1_encode_simple_der@LIBTASN1_0_3' => 0, - 'asn1_find_node@LIBTASN1_0_3' => 0, - 'asn1_get_length_der@LIBTASN1_0_3' => 0, - 'asn1_get_tag_der@LIBTASN1_0_3' => 0, - 'asn1_length_der@LIBTASN1_0_3' => 0, - 'asn1_number_of_elements@LIBTASN1_0_3' => 0, - 'asn1_read_node_value@LIBTASN1_0_3' => 0, - 'asn1_read_value@LIBTASN1_0_3' => 0, - 'asn1_read_value_type@LIBTASN1_0_3' => 0, - 'asn1_write_value@LIBTASN1_0_3' => 0, - 'bindtextdomain@GLIBC_2.2.5' => 0, - 'calloc@GLIBC_2.2.5' => 0, - 'clock_gettime@GLIBC_2.17' => 0, - 'close@GLIBC_2.2.5' => 0, - 'closedir@GLIBC_2.2.5' => 0, - 'connect@GLIBC_2.2.5' => 0, - 'dcgettext@GLIBC_2.2.5' => 0, - 'deflate' => 0, - 'deflateEnd' => 0, - 'deflateInit2_' => 0, - 'dlclose@GLIBC_2.2.5' => 0, - 'dlopen@GLIBC_2.2.5' => 0, - 'dlsym@GLIBC_2.2.5' => 0, - 'fclose@GLIBC_2.2.5' => 0, - 'fcntl@GLIBC_2.2.5' => 0, - 'feof@GLIBC_2.2.5' => 0, - 'ferror@GLIBC_2.2.5' => 0, - 'fflush@GLIBC_2.2.5' => 0, - 'fgetc@GLIBC_2.2.5' => 0, - 'fgets@GLIBC_2.2.5' => 0, - 'fileno@GLIBC_2.2.5' => 0, - 'fmemopen@GLIBC_2.22' => 0, - 'fopen@GLIBC_2.2.5' => 0, - 'fprintf@GLIBC_2.2.5' => 0, - 'fputs@GLIBC_2.2.5' => 0, - 'fread@GLIBC_2.2.5' => 0, - 'free@GLIBC_2.2.5' => 0, - 'fseek@GLIBC_2.2.5' => 0, - 'ftell@GLIBC_2.2.5' => 0, - 'ftello@GLIBC_2.2.5' => 0, - 'fwrite@GLIBC_2.2.5' => 0, - 'getpid@GLIBC_2.2.5' => 0, - 'getpwuid_r@GLIBC_2.2.5' => 0, - 'getrusage@GLIBC_2.2.5' => 0, - 'getuid@GLIBC_2.2.5' => 0, - 'gmtime_r@GLIBC_2.2.5' => 0, - 'idn_free@LIBIDN_1.0' => 0, - 'idna_strerror@LIBIDN_1.0' => 0, - 'idna_to_ascii_8z@LIBIDN_1.0' => 0, - 'idna_to_unicode_8z8z@LIBIDN_1.0' => 0, - 'inet_aton@GLIBC_2.2.5' => 0, - 'inet_ntop@GLIBC_2.2.5' => 0, - 'inet_pton@GLIBC_2.2.5' => 0, - 'inflate' => 0, - 'inflateEnd' => 0, - 'inflateInit2_' => 0, - 'malloc@GLIBC_2.2.5' => 0, - 'memcmp@GLIBC_2.2.5' => 0, - 'memcpy@GLIBC_2.14' => 0, - 'memmem@GLIBC_2.2.5' => 0, - 'memmove@GLIBC_2.2.5' => 0, - 'memset@GLIBC_2.2.5' => 0, - 'mkdir@GLIBC_2.2.5' => 0, - 'nanosleep@GLIBC_2.2.5' => 0, - 'nettle_aes128_decrypt@NETTLE_6' => 0, - 'nettle_aes128_encrypt@NETTLE_6' => 0, - 'nettle_aes128_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes128_set_encrypt_key@NETTLE_6' => 0, - 'nettle_aes192_decrypt@NETTLE_6' => 0, - 'nettle_aes192_encrypt@NETTLE_6' => 0, - 'nettle_aes192_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes192_set_encrypt_key@NETTLE_6' => 0, - 'nettle_aes256_decrypt@NETTLE_6' => 0, - 'nettle_aes256_encrypt@NETTLE_6' => 0, - 'nettle_aes256_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes256_set_encrypt_key@NETTLE_6' => 0, - 'nettle_aes_set_decrypt_key@NETTLE_6' => 0, - 'nettle_aes_set_encrypt_key@NETTLE_6' => 0, - 'nettle_arcfour128_set_key@NETTLE_6' => 0, - 'nettle_arcfour_crypt@NETTLE_6' => 0, - 'nettle_arcfour_set_key@NETTLE_6' => 0, - 'nettle_arctwo40_set_key@NETTLE_6' => 0, - 'nettle_arctwo_decrypt@NETTLE_6' => 0, - 'nettle_arctwo_encrypt@NETTLE_6' => 0, - 'nettle_base64_decode_final@NETTLE_6' => 0, - 'nettle_base64_decode_init@NETTLE_6' => 0, - 'nettle_base64_decode_update@NETTLE_6' => 0, - 'nettle_base64_encode_raw@NETTLE_6' => 0, - 'nettle_camellia128_crypt@NETTLE_6' => 0, - 'nettle_camellia128_set_encrypt_key@NETTLE_6' => 0, - 'nettle_camellia192_set_decrypt_key@NETTLE_6' => 0, - 'nettle_camellia192_set_encrypt_key@NETTLE_6' => 0, - 'nettle_camellia256_crypt@NETTLE_6' => 0, - 'nettle_camellia256_set_decrypt_key@NETTLE_6' => 0, - 'nettle_camellia256_set_encrypt_key@NETTLE_6' => 0, - 'nettle_camellia_set_decrypt_key@NETTLE_6' => 0, - 'nettle_cbc_decrypt@NETTLE_6' => 0, - 'nettle_cbc_encrypt@NETTLE_6' => 0, - 'nettle_ccm_decrypt_message@NETTLE_6' => 0, - 'nettle_ccm_encrypt_message@NETTLE_6' => 0, - 'nettle_chacha_poly1305_decrypt@NETTLE_6' => 0, - 'nettle_chacha_poly1305_digest@NETTLE_6' => 0, - 'nettle_chacha_poly1305_encrypt@NETTLE_6' => 0, - 'nettle_chacha_poly1305_set_key@NETTLE_6' => 0, - 'nettle_chacha_poly1305_set_nonce@NETTLE_6' => 0, - 'nettle_chacha_poly1305_update@NETTLE_6' => 0, - 'nettle_curve25519_mul@HOGWEED_4' => 0, - 'nettle_curve25519_mul_g@HOGWEED_4' => 0, - 'nettle_des3_decrypt@NETTLE_6' => 0, - 'nettle_des3_encrypt@NETTLE_6' => 0, - 'nettle_des3_set_key@NETTLE_6' => 0, - 'nettle_des_decrypt@NETTLE_6' => 0, - 'nettle_des_encrypt@NETTLE_6' => 0, - 'nettle_des_set_key@NETTLE_6' => 0, - 'nettle_dsa_generate_params@HOGWEED_4' => 0, - 'nettle_dsa_params_clear@HOGWEED_4' => 0, - 'nettle_dsa_params_init@HOGWEED_4' => 0, - 'nettle_dsa_sign@HOGWEED_4' => 0, - 'nettle_dsa_signature_clear@HOGWEED_4' => 0, - 'nettle_dsa_signature_init@HOGWEED_4' => 0, - 'nettle_dsa_verify@HOGWEED_4' => 0, - 'nettle_ecc_point_clear@HOGWEED_4' => 0, - 'nettle_ecc_point_get@HOGWEED_4' => 0, - 'nettle_ecc_point_init@HOGWEED_4' => 0, - 'nettle_ecc_point_mul@HOGWEED_4' => 0, - 'nettle_ecc_point_mul_g@HOGWEED_4' => 0, - 'nettle_ecc_point_set@HOGWEED_4' => 0, - 'nettle_ecc_scalar_clear@HOGWEED_4' => 0, - 'nettle_ecc_scalar_get@HOGWEED_4' => 0, - 'nettle_ecc_scalar_init@HOGWEED_4' => 0, - 'nettle_ecc_scalar_set@HOGWEED_4' => 0, - 'nettle_ecc_size@HOGWEED_4' => 0, - 'nettle_ecc_size_a@HOGWEED_4' => 0, - 'nettle_ecdsa_generate_keypair@HOGWEED_4' => 0, - 'nettle_ecdsa_sign@HOGWEED_4' => 0, - 'nettle_ecdsa_verify@HOGWEED_4' => 0, - 'nettle_gcm_aes128_digest@NETTLE_6' => 0, - 'nettle_gcm_aes128_set_iv@NETTLE_6' => 0, - 'nettle_gcm_aes128_set_key@NETTLE_6' => 0, - 'nettle_gcm_aes128_update@NETTLE_6' => 0, - 'nettle_gcm_aes256_digest@NETTLE_6' => 0, - 'nettle_gcm_aes256_set_iv@NETTLE_6' => 0, - 'nettle_gcm_aes256_set_key@NETTLE_6' => 0, - 'nettle_gcm_aes256_update@NETTLE_6' => 0, - 'nettle_gcm_camellia128_digest@NETTLE_6' => 0, - 'nettle_gcm_camellia128_set_iv@NETTLE_6' => 0, - 'nettle_gcm_camellia128_set_key@NETTLE_6' => 0, - 'nettle_gcm_camellia128_update@NETTLE_6' => 0, - 'nettle_gcm_camellia256_digest@NETTLE_6' => 0, - 'nettle_gcm_camellia256_set_iv@NETTLE_6' => 0, - 'nettle_gcm_camellia256_set_key@NETTLE_6' => 0, - 'nettle_gcm_camellia256_update@NETTLE_6' => 0, - 'nettle_gcm_decrypt@NETTLE_6' => 0, - 'nettle_gcm_digest@NETTLE_6' => 0, - 'nettle_gcm_encrypt@NETTLE_6' => 0, - 'nettle_gcm_set_iv@NETTLE_6' => 0, - 'nettle_gcm_set_key@NETTLE_6' => 0, - 'nettle_gcm_update@NETTLE_6' => 0, - 'nettle_hmac_digest@NETTLE_6' => 0, - 'nettle_hmac_md5_digest@NETTLE_6' => 0, - 'nettle_hmac_md5_set_key@NETTLE_6' => 0, - 'nettle_hmac_md5_update@NETTLE_6' => 0, - 'nettle_hmac_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha1_digest@NETTLE_6' => 0, - 'nettle_hmac_sha1_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha1_update@NETTLE_6' => 0, - 'nettle_hmac_sha224_digest@NETTLE_6' => 0, - 'nettle_hmac_sha224_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha256_digest@NETTLE_6' => 0, - 'nettle_hmac_sha256_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha256_update@NETTLE_6' => 0, - 'nettle_hmac_sha384_digest@NETTLE_6' => 0, - 'nettle_hmac_sha384_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha512_digest@NETTLE_6' => 0, - 'nettle_hmac_sha512_set_key@NETTLE_6' => 0, - 'nettle_hmac_sha512_update@NETTLE_6' => 0, - 'nettle_md2_digest@NETTLE_6' => 0, - 'nettle_md2_init@NETTLE_6' => 0, - 'nettle_md2_update@NETTLE_6' => 0, - 'nettle_md5_digest@NETTLE_6' => 0, - 'nettle_md5_init@NETTLE_6' => 0, - 'nettle_md5_update@NETTLE_6' => 0, - 'nettle_memxor@NETTLE_6' => 0, - 'nettle_mpz_get_str_256@HOGWEED_4' => 0, - 'nettle_mpz_random@HOGWEED_4' => 0, - 'nettle_mpz_random_size@HOGWEED_4' => 0, - 'nettle_mpz_set_str_256_s@HOGWEED_4' => 0, - 'nettle_mpz_set_str_256_u@HOGWEED_4' => 0, - 'nettle_mpz_sizeinbase_256_s@HOGWEED_4' => 0, - 'nettle_mpz_sizeinbase_256_u@HOGWEED_4' => 0, - 'nettle_pbkdf2_hmac_sha1@NETTLE_6' => 0, - 'nettle_pbkdf2_hmac_sha256@NETTLE_6' => 0, - 'nettle_rsa_decrypt_tr@HOGWEED_4' => 0, - 'nettle_rsa_encrypt@HOGWEED_4' => 0, - 'nettle_rsa_generate_keypair@HOGWEED_4' => 0, - 'nettle_rsa_pkcs1_sign_tr@HOGWEED_4' => 0, - 'nettle_rsa_pkcs1_verify@HOGWEED_4' => 0, - 'nettle_rsa_private_key_clear@HOGWEED_4' => 0, - 'nettle_rsa_private_key_init@HOGWEED_4' => 0, - 'nettle_rsa_private_key_prepare@HOGWEED_4' => 0, - 'nettle_rsa_public_key_clear@HOGWEED_4' => 0, - 'nettle_rsa_public_key_init@HOGWEED_4' => 0, - 'nettle_rsa_public_key_prepare@HOGWEED_4' => 0, - 'nettle_salsa20_256_set_key@NETTLE_6' => 0, - 'nettle_salsa20_crypt@NETTLE_6' => 0, - 'nettle_salsa20_set_key@NETTLE_6' => 0, - 'nettle_salsa20_set_nonce@NETTLE_6' => 0, - 'nettle_salsa20r12_crypt@NETTLE_6' => 0, - 'nettle_secp_192r1@HOGWEED_4' => 0, - 'nettle_secp_224r1@HOGWEED_4' => 0, - 'nettle_secp_256r1@HOGWEED_4' => 0, - 'nettle_secp_384r1@HOGWEED_4' => 0, - 'nettle_secp_521r1@HOGWEED_4' => 0, - 'nettle_sha1_digest@NETTLE_6' => 0, - 'nettle_sha1_init@NETTLE_6' => 0, - 'nettle_sha1_update@NETTLE_6' => 0, - 'nettle_sha224_digest@NETTLE_6' => 0, - 'nettle_sha224_init@NETTLE_6' => 0, - 'nettle_sha256_digest@NETTLE_6' => 0, - 'nettle_sha256_init@NETTLE_6' => 0, - 'nettle_sha256_update@NETTLE_6' => 0, - 'nettle_sha384_digest@NETTLE_6' => 0, - 'nettle_sha384_init@NETTLE_6' => 0, - 'nettle_sha3_224_digest@NETTLE_6' => 0, - 'nettle_sha3_224_init@NETTLE_6' => 0, - 'nettle_sha3_224_update@NETTLE_6' => 0, - 'nettle_sha3_256_digest@NETTLE_6' => 0, - 'nettle_sha3_256_init@NETTLE_6' => 0, - 'nettle_sha3_256_update@NETTLE_6' => 0, - 'nettle_sha3_384_digest@NETTLE_6' => 0, - 'nettle_sha3_384_init@NETTLE_6' => 0, - 'nettle_sha3_384_update@NETTLE_6' => 0, - 'nettle_sha3_512_digest@NETTLE_6' => 0, - 'nettle_sha3_512_init@NETTLE_6' => 0, - 'nettle_sha3_512_update@NETTLE_6' => 0, - 'nettle_sha512_digest@NETTLE_6' => 0, - 'nettle_sha512_init@NETTLE_6' => 0, - 'nettle_sha512_update@NETTLE_6' => 0, - 'nettle_umac128_digest@NETTLE_6' => 0, - 'nettle_umac128_set_key@NETTLE_6' => 0, - 'nettle_umac128_set_nonce@NETTLE_6' => 0, - 'nettle_umac128_update@NETTLE_6' => 0, - 'nettle_umac96_digest@NETTLE_6' => 0, - 'nettle_umac96_set_key@NETTLE_6' => 0, - 'nettle_umac96_set_nonce@NETTLE_6' => 0, - 'nettle_umac96_update@NETTLE_6' => 0, - 'nettle_yarrow256_init@NETTLE_6' => 0, - 'nettle_yarrow256_random@NETTLE_6' => 0, - 'nettle_yarrow256_slow_reseed@NETTLE_6' => 0, - 'nettle_yarrow256_update@NETTLE_6' => 0, - 'open@GLIBC_2.2.5' => 0, - 'opendir@GLIBC_2.2.5' => 0, - 'p11_kit_config_option' => 0, - 'p11_kit_message' => 0, - 'p11_kit_module_finalize' => 0, - 'p11_kit_module_get_flags' => 0, - 'p11_kit_module_get_name' => 0, - 'p11_kit_module_initialize' => 0, - 'p11_kit_module_load' => 0, - 'p11_kit_module_release' => 0, - 'p11_kit_modules_load_and_initialize' => 0, - 'p11_kit_pin_file_callback' => 0, - 'p11_kit_pin_get_length' => 0, - 'p11_kit_pin_get_value' => 0, - 'p11_kit_pin_new_for_string' => 0, - 'p11_kit_pin_register_callback' => 0, - 'p11_kit_pin_request' => 0, - 'p11_kit_pin_unref' => 0, - 'p11_kit_pin_unregister_callback' => 0, - 'p11_kit_space_strdup' => 0, - 'p11_kit_space_strlen' => 0, - 'p11_kit_strerror' => 0, - 'p11_kit_uri_format' => 0, - 'p11_kit_uri_free' => 0, - 'p11_kit_uri_get_attribute' => 0, - 'p11_kit_uri_get_attributes' => 0, - 'p11_kit_uri_get_module_info' => 0, - 'p11_kit_uri_get_pin_source' => 0, - 'p11_kit_uri_get_pin_value' => 0, - 'p11_kit_uri_get_token_info' => 0, - 'p11_kit_uri_match_module_info' => 0, - 'p11_kit_uri_match_token_info' => 0, - 'p11_kit_uri_new' => 0, - 'p11_kit_uri_parse' => 0, - 'p11_kit_uri_set_attribute' => 0, - 'poll@GLIBC_2.2.5' => 0, - 'pthread_mutex_destroy@GLIBC_2.2.5' => 0, - 'pthread_mutex_init@GLIBC_2.2.5' => 0, - 'pthread_mutex_lock@GLIBC_2.2.5' => 0, - 'pthread_mutex_unlock@GLIBC_2.2.5' => 0, - 'qsort@GLIBC_2.2.5' => 0, - 'read@GLIBC_2.2.5' => 0, - 'readdir@GLIBC_2.2.5' => 0, - 'realloc@GLIBC_2.2.5' => 0, - 'recv@GLIBC_2.2.5' => 0, - 'secure_getenv@GLIBC_2.17' => 0, - 'sendmsg@GLIBC_2.2.5' => 0, - 'setsockopt@GLIBC_2.2.5' => 0, - 'snprintf@GLIBC_2.2.5' => 0, - 'sprintf@GLIBC_2.2.5' => 0, - 'sscanf@GLIBC_2.2.5' => 0, - 'stderr@GLIBC_2.2.5' => 0, - 'strcasecmp@GLIBC_2.2.5' => 0, - 'strchr@GLIBC_2.2.5' => 0, - 'strcmp@GLIBC_2.2.5' => 0, - 'strdup@GLIBC_2.2.5' => 0, - 'strerror@GLIBC_2.2.5' => 0, - 'strftime@GLIBC_2.2.5' => 0, - 'strlen@GLIBC_2.2.5' => 0, - 'strncasecmp@GLIBC_2.2.5' => 0, - 'strncat@GLIBC_2.2.5' => 0, - 'strncmp@GLIBC_2.2.5' => 0, - 'strpbrk@GLIBC_2.2.5' => 0, - 'strrchr@GLIBC_2.2.5' => 0, - 'strstr@GLIBC_2.2.5' => 0, - 'strtol@GLIBC_2.2.5' => 0, - 'strtoul@GLIBC_2.2.5' => 0, - 'strverscmp@GLIBC_2.2.5' => 0, - 'syscall@GLIBC_2.2.5' => 0, - 'time@GLIBC_2.2.5' => 0, - 'tmpfile@GLIBC_2.2.5' => 0, - 'u16_normalize' => 0, - 'u16_to_u8' => 0, - 'u32_normalize' => 0, - 'u32_to_u8' => 0, - 'u8_check' => 0, - 'u8_to_u16' => 0, - 'u8_to_u32' => 0, - 'uc_general_category_and_not' => 0, - 'uc_general_category_or' => 0, - 'uc_is_general_category' => 0, - 'uc_is_property_default_ignorable_code_point' => 0, - 'uc_is_property_join_control' => 0, - 'uc_is_property_not_a_character' => 0, - 'uninorm_nfc' => 0, - 'uninorm_nfkc' => 0, - 'vasprintf@GLIBC_2.2.5' => 0 - } - }, - 'WordSize' => '8' - }; diff --git a/devel/ABI-dane-x86_64.dump b/devel/ABI-dane-x86_64.dump deleted file mode 100644 index fb4614ccf1..0000000000 --- a/devel/ABI-dane-x86_64.dump +++ /dev/null @@ -1,5145 +0,0 @@ -$VAR1 = { - 'ABI_DUMPER_VERSION' => '0.99.14', - 'ABI_DUMP_VERSION' => '3.2', - 'Arch' => 'x86_64', - 'GccVersion' => '5.3.1', - 'Headers' => { - 'abstract.h' => 1, - 'crypto-backend.h' => 1, - 'dane.h' => 1, - 'gnutls.h' => 1, - 'gnutls_auth.h' => 1, - 'gnutls_cipher_int.h' => 1, - 'gnutls_compress.h' => 1, - 'gnutls_hash_int.h' => 1, - 'gnutls_int.h' => 1, - 'gnutls_str.h' => 1, - 'openpgp.h' => 1, - 'stddef.h' => 1, - 'stdint.h' => 1, - 'stdio.h' => 1, - 'time.h' => 1, - 'types.h' => 1, - 'unbound.h' => 1 - }, - 'Language' => 'C', - 'LibraryName' => 'libgnutls-dane.so.0.4.1', - 'LibraryVersion' => '3.4.0', - 'NameSpaces' => {}, - 'Needed' => { - 'libc.so.6' => 1, - 'libgmp.so.10' => 1, - 'libgnutls.so.30' => 1, - 'libhogweed.so.4' => 1, - 'libidn.so.11' => 1, - 'libnettle.so.6' => 1, - 'libp11-kit.so.0' => 1, - 'libtasn1.so.6' => 1, - 'libtspi.so.1' => 1, - 'libunbound.so.2' => 1, - 'libz.so.1' => 1 - }, - 'Sources' => { - 'dane-params.c' => 1, - 'dane.c' => 1, - 'errors.c' => 1 - }, - 'SymbolInfo' => { - '11612' => { - 'Line' => '769', - 'Param' => { - '0' => { - 'name' => 's', - 'type' => '4723' - }, - '1' => { - 'name' => 'chain', - 'type' => '3993' - }, - '2' => { - 'name' => 'chain_size', - 'type' => '77' - }, - '3' => { - 'name' => 'chain_type', - 'type' => '2720' - }, - '4' => { - 'name' => 'r', - 'type' => '4777' - }, - '5' => { - 'name' => 'sflags', - 'type' => '77' - }, - '6' => { - 'name' => 'vflags', - 'offset' => '0', - 'type' => '77' - }, - '7' => { - 'name' => 'verify', - 'offset' => '8', - 'type' => '5133' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '98', - 'ShortName' => 'dane_verify_crt_raw', - 'Source' => 'dane.c' - }, - '12358' => { - 'Line' => '82', - 'Param' => { - '0' => { - 'name' => 'q', - 'type' => '4777' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '4712', - 'ShortName' => 'dane_query_status', - 'Source' => 'dane.c' - }, - '12403' => { - 'Line' => '95', - 'Param' => { - '0' => { - 'name' => 'q', - 'type' => '4777' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '77', - 'ShortName' => 'dane_query_entries', - 'Source' => 'dane.c' - }, - '12448' => { - 'Line' => '116', - 'Param' => { - '0' => { - 'name' => 'q', - 'type' => '4777' - }, - '1' => { - 'name' => 'idx', - 'type' => '77' - }, - '2' => { - 'name' => 'usage', - 'type' => '5133' - }, - '3' => { - 'name' => 'type', - 'type' => '5133' - }, - '4' => { - 'name' => 'match', - 'type' => '5133' - }, - '5' => { - 'name' => 'data', - 'type' => '4117' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '98', - 'ShortName' => 'dane_query_data', - 'Source' => 'dane.c' - }, - '12562' => { - 'Line' => '162', - 'Param' => { - '0' => { - 'name' => 'q', - 'type' => '4777' - }, - '1' => { - 'name' => 'data_entries', - 'type' => '5133' - }, - '2' => { - 'name' => 'dane_data', - 'type' => '12793' - }, - '3' => { - 'name' => 'dane_data_len', - 'type' => '12799' - }, - '4' => { - 'name' => 'secure', - 'type' => '781' - }, - '5' => { - 'name' => 'bogus', - 'type' => '781' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '98', - 'ShortName' => 'dane_query_to_raw_tlsa', - 'Source' => 'dane.c' - }, - '12805' => { - 'Line' => '231', - 'Param' => { - '0' => { - 'name' => 's', - 'type' => '13098' - }, - '1' => { - 'name' => 'flags', - 'type' => '77' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '98', - 'ShortName' => 'dane_state_init', - 'Source' => 'dane.c' - }, - '13104' => { - 'Line' => '294', - 'Param' => { - '0' => { - 'name' => 's', - 'type' => '4723' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'dane_state_deinit', - 'Source' => 'dane.c' - }, - '13183' => { - 'Line' => '309', - 'Param' => { - '0' => { - 'name' => 's', - 'type' => '4723' - }, - '1' => { - 'name' => 'file', - 'type' => '679' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi' - }, - 'Return' => '98', - 'ShortName' => 'dane_state_set_dlv_file', - 'Source' => 'dane.c' - }, - '13298' => { - 'Line' => '329', - 'Param' => { - '0' => { - 'name' => 'q', - 'type' => '4777' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '1', - 'ShortName' => 'dane_query_deinit', - 'Source' => 'dane.c' - }, - '13377' => { - 'Line' => '358', - 'Param' => { - '0' => { - 'name' => 's', - 'type' => '4723' - }, - '1' => { - 'name' => 'r', - 'type' => '13560' - }, - '2' => { - 'name' => 'dane_data', - 'type' => '13566' - }, - '3' => { - 'name' => 'dane_data_len', - 'type' => '787' - }, - '4' => { - 'name' => 'secure', - 'type' => '98' - }, - '5' => { - 'name' => 'bogus', - 'type' => '98' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '98', - 'ShortName' => 'dane_raw_tlsa', - 'Source' => 'dane.c' - }, - '13577' => { - 'Line' => '424', - 'Param' => { - '0' => { - 'name' => 's', - 'type' => '4723' - }, - '1' => { - 'name' => 'r', - 'type' => '13560' - }, - '2' => { - 'name' => 'host', - 'type' => '679' - }, - '3' => { - 'name' => 'proto', - 'type' => '679' - }, - '4' => { - 'name' => 'port', - 'type' => '77' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8' - }, - 'Return' => '98', - 'ShortName' => 'dane_query_tlsa', - 'Source' => 'dane.c' - }, - '15348' => { - 'Line' => '873', - 'Param' => { - '0' => { - 'name' => 's', - 'type' => '4723' - }, - '1' => { - 'name' => 'chain', - 'type' => '3993' - }, - '2' => { - 'name' => 'chain_size', - 'type' => '77' - }, - '3' => { - 'name' => 'chain_type', - 'type' => '2720' - }, - '4' => { - 'name' => 'hostname', - 'type' => '679' - }, - '5' => { - 'name' => 'proto', - 'type' => '679' - }, - '6' => { - 'name' => 'port', - 'offset' => '0', - 'type' => '77' - }, - '7' => { - 'name' => 'sflags', - 'offset' => '8', - 'type' => '77' - }, - '8' => { - 'name' => 'vflags', - 'offset' => '16', - 'type' => '77' - }, - '9' => { - 'name' => 'verify', - 'offset' => '24', - 'type' => '5133' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '98', - 'ShortName' => 'dane_verify_crt', - 'Source' => 'dane.c' - }, - '15731' => { - 'Line' => '933', - 'Param' => { - '0' => { - 'name' => 's', - 'type' => '4723' - }, - '1' => { - 'name' => 'session', - 'type' => '3126' - }, - '2' => { - 'name' => 'hostname', - 'type' => '679' - }, - '3' => { - 'name' => 'proto', - 'type' => '679' - }, - '4' => { - 'name' => 'port', - 'type' => '77' - }, - '5' => { - 'name' => 'sflags', - 'type' => '77' - }, - '6' => { - 'name' => 'vflags', - 'offset' => '0', - 'type' => '77' - }, - '7' => { - 'name' => 'verify', - 'offset' => '8', - 'type' => '5133' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx', - '3' => 'rcx', - '4' => 'r8', - '5' => 'r9' - }, - 'Return' => '98', - 'ShortName' => 'dane_verify_session_crt', - 'Source' => 'dane.c' - }, - '16445' => { - 'Line' => '1035', - 'Param' => { - '0' => { - 'name' => 'status', - 'type' => '77' - }, - '1' => { - 'name' => 'out', - 'type' => '4117' - }, - '2' => { - 'name' => 'flags', - 'type' => '77' - } - }, - 'Reg' => { - '0' => 'rdi', - '1' => 'rsi', - '2' => 'rdx' - }, - 'Return' => '98', - 'ShortName' => 'dane_verification_status_print', - 'Source' => 'dane.c' - }, - '19215' => { - 'Line' => '82', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '4614' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '679', - 'ShortName' => 'dane_cert_type_name', - 'Source' => 'dane-params.c' - }, - '19286' => { - 'Line' => '104', - 'Param' => { - '0' => { - 'name' => 'type', - 'type' => '4660' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '679', - 'ShortName' => 'dane_match_type_name', - 'Source' => 'dane-params.c' - }, - '19357' => { - 'Line' => '126', - 'Param' => { - '0' => { - 'name' => 'usage', - 'type' => '4574' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '679', - 'ShortName' => 'dane_cert_usage_name', - 'Source' => 'dane-params.c' - }, - '19897' => { - 'Line' => '86', - 'Param' => { - '0' => { - 'name' => 'error', - 'type' => '98' - } - }, - 'Reg' => { - '0' => 'rdi' - }, - 'Return' => '679', - 'ShortName' => 'dane_strerror', - 'Source' => 'errors.c' - } - }, - 'SymbolVersion' => { - '_ITM_deregisterTMCloneTable' => 'stderr@@GLIBC_2.2.5', - '_ITM_registerTMCloneTable' => 'stderr@@GLIBC_2.2.5', - '_Jv_RegisterClasses' => 'stderr@@GLIBC_2.2.5', - '__gmon_start__' => 'stderr@@GLIBC_2.2.5', - 'dane_cert_type_name' => 'dane_cert_type_name@@DANE_0_0', - 'dane_cert_usage_name' => 'dane_cert_usage_name@@DANE_0_0', - 'dane_match_type_name' => 'dane_match_type_name@@DANE_0_0', - 'dane_query_data' => 'dane_query_data@@DANE_0_0', - 'dane_query_deinit' => 'dane_query_deinit@@DANE_0_0', - 'dane_query_entries' => 'dane_query_entries@@DANE_0_0', - 'dane_query_status' => 'dane_query_status@@DANE_0_0', - 'dane_query_tlsa' => 'dane_query_tlsa@@DANE_0_0', - 'dane_query_to_raw_tlsa' => 'dane_query_to_raw_tlsa@@DANE_0_0', - 'dane_raw_tlsa' => 'dane_raw_tlsa@@DANE_0_0', - 'dane_state_deinit' => 'dane_state_deinit@@DANE_0_0', - 'dane_state_init' => 'dane_state_init@@DANE_0_0', - 'dane_state_set_dlv_file' => 'dane_state_set_dlv_file@@DANE_0_0', - 'dane_strerror' => 'dane_strerror@@DANE_0_0', - 'dane_verification_status_print' => 'dane_verification_status_print@@DANE_0_0', - 'dane_verify_crt' => 'dane_verify_crt@@DANE_0_0', - 'dane_verify_crt_raw' => 'dane_verify_crt_raw@@DANE_0_0', - 'dane_verify_session_crt' => 'dane_verify_session_crt@@DANE_0_0', - 'ub_ctx_add_ta_file' => 'stderr@@GLIBC_2.2.5', - 'ub_ctx_create' => 'stderr@@GLIBC_2.2.5', - 'ub_ctx_debugout' => 'stderr@@GLIBC_2.2.5', - 'ub_ctx_delete' => 'stderr@@GLIBC_2.2.5', - 'ub_ctx_hosts' => 'stderr@@GLIBC_2.2.5', - 'ub_ctx_resolvconf' => 'stderr@@GLIBC_2.2.5', - 'ub_ctx_set_option' => 'stderr@@GLIBC_2.2.5', - 'ub_resolve' => 'stderr@@GLIBC_2.2.5', - 'ub_resolve_free' => 'stderr@@GLIBC_2.2.5' - }, - 'Symbols' => { - 'libgnutls-dane.so.0.4.1' => { - 'dane_cert_type_name@@DANE_0_0' => 1, - 'dane_cert_usage_name@@DANE_0_0' => 1, - 'dane_match_type_name@@DANE_0_0' => 1, - 'dane_query_data@@DANE_0_0' => 1, - 'dane_query_deinit@@DANE_0_0' => 1, - 'dane_query_entries@@DANE_0_0' => 1, - 'dane_query_status@@DANE_0_0' => 1, - 'dane_query_tlsa@@DANE_0_0' => 1, - 'dane_query_to_raw_tlsa@@DANE_0_0' => 1, - 'dane_raw_tlsa@@DANE_0_0' => 1, - 'dane_state_deinit@@DANE_0_0' => 1, - 'dane_state_init@@DANE_0_0' => 1, - 'dane_state_set_dlv_file@@DANE_0_0' => 1, - 'dane_strerror@@DANE_0_0' => 1, - 'dane_verification_status_print@@DANE_0_0' => 1, - 'dane_verify_crt@@DANE_0_0' => 1, - 'dane_verify_crt_raw@@DANE_0_0' => 1, - 'dane_verify_session_crt@@DANE_0_0' => 1 - } - }, - 'Target' => 'unix', - 'TypeInfo' => { - '1' => { - 'Name' => 'void', - 'Type' => 'Intrinsic' - }, - '105' => { - 'Name' => 'long', - 'Size' => '8', - 'Type' => 'Intrinsic' - }, - '11091' => { - 'BaseType' => '6913', - 'Name' => 'handshake_buffer_st[6]', - 'Size' => '432', - 'Type' => 'Array' - }, - '11107' => { - 'Header' => 'gnutls_auth.h', - 'Line' => '28', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '679' - }, - '1' => { - 'name' => 'gnutls_generate_server_certificate', - 'offset' => '8', - 'type' => '11406' - }, - '10' => { - 'name' => 'gnutls_process_client_kx', - 'offset' => '80', - 'type' => '11437' - }, - '11' => { - 'name' => 'gnutls_process_client_crt_vrfy', - 'offset' => '88', - 'type' => '11437' - }, - '12' => { - 'name' => 'gnutls_process_server_crt_request', - 'offset' => '96', - 'type' => '11437' - }, - '2' => { - 'name' => 'gnutls_generate_client_certificate', - 'offset' => '16', - 'type' => '11406' - }, - '3' => { - 'name' => 'gnutls_generate_server_kx', - 'offset' => '24', - 'type' => '11406' - }, - '4' => { - 'name' => 'gnutls_generate_client_kx', - 'offset' => '32', - 'type' => '11406' - }, - '5' => { - 'name' => 'gnutls_generate_client_crt_vrfy', - 'offset' => '40', - 'type' => '11406' - }, - '6' => { - 'name' => 'gnutls_generate_server_crt_request', - 'offset' => '48', - 'type' => '11406' - }, - '7' => { - 'name' => 'gnutls_process_server_certificate', - 'offset' => '56', - 'type' => '11437' - }, - '8' => { - 'name' => 'gnutls_process_client_certificate', - 'offset' => '64', - 'type' => '11437' - }, - '9' => { - 'name' => 'gnutls_process_server_kx', - 'offset' => '72', - 'type' => '11437' - } - }, - 'Name' => 'struct mod_auth_st_int', - 'Size' => '104', - 'Type' => 'Struct' - }, - '11276' => { - 'BaseType' => '11107', - 'Name' => 'struct mod_auth_st_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '11282' => { - 'BaseType' => '816', - 'Name' => 'uint16_t[32]', - 'Size' => '64', - 'Type' => 'Array' - }, - '11298' => { - 'BaseType' => '9710', - 'Name' => 'anon-struct-gnutls_int.h-948[32]', - 'Size' => '768', - 'Type' => 'Array' - }, - '11314' => { - 'BaseType' => '9759', - 'Name' => 'anon-struct-gnutls_int.h-954[32]', - 'Size' => '768', - 'Type' => 'Array' - }, - '11330' => { - 'BaseType' => '63', - 'Name' => 'unsigned char[36]', - 'Size' => '36', - 'Type' => 'Array' - }, - '11346' => { - 'Header' => 'gnutls_int.h', - 'Line' => '1002', - 'Memb' => { - '0' => { - 'name' => 'record_buffer', - 'offset' => '0', - 'type' => '7009' - }, - '1' => { - 'name' => 'handshake_hash_buffer_prev_len', - 'offset' => '32', - 'type' => '98' - }, - '10' => { - 'name' => 'may_not_write', - 'offset' => '86', - 'type' => '8202' - }, - '11' => { - 'name' => 'read_eof', - 'offset' => '87', - 'type' => '8202' - }, - '12' => { - 'name' => 'last_alert', - 'offset' => '88', - 'type' => '98' - }, - '13' => { - 'name' => 'last_handshake_in', - 'offset' => '92', - 'type' => '98' - }, - '14' => { - 'name' => 'last_handshake_out', - 'offset' => '96', - 'type' => '98' - }, - '15' => { - 'name' => 'priorities', - 'offset' => '100', - 'type' => '3271' - }, - '16' => { - 'name' => 'resumed', - 'offset' => '1188', - 'type' => '8202' - }, - '17' => { - 'name' => 'resumption_requested', - 'offset' => '1189', - 'type' => '8202' - }, - '18' => { - 'name' => 'resumed_security_parameters', - 'offset' => '1192', - 'type' => '9290' - }, - '19' => { - 'name' => 'handshake_send_buffer', - 'offset' => '1416', - 'type' => '7009' - }, - '2' => { - 'name' => 'handshake_hash_buffer_client_kx_len', - 'offset' => '36', - 'type' => '77' - }, - '20' => { - 'name' => 'handshake_recv_buffer', - 'offset' => '1448', - 'type' => '11091' - }, - '21' => { - 'name' => 'handshake_recv_buffer_size', - 'offset' => '1880', - 'type' => '98' - }, - '22' => { - 'name' => 'record_recv_buffer', - 'offset' => '1888', - 'type' => '7009' - }, - '23' => { - 'name' => 'record_send_buffer', - 'offset' => '1920', - 'type' => '7009' - }, - '24' => { - 'name' => 'record_send_buffer_user_size', - 'offset' => '1952', - 'type' => '45' - }, - '25' => { - 'name' => 'record_flush_mode', - 'offset' => '1960', - 'type' => '5482' - }, - '26' => { - 'name' => 'record_presend_buffer', - 'offset' => '1968', - 'type' => '6668' - }, - '27' => { - 'name' => 'expire_time', - 'offset' => '2000', - 'type' => '77' - }, - '28' => { - 'name' => 'auth_struct', - 'offset' => '2008', - 'type' => '11276' - }, - '29' => { - 'name' => 'adv_version_major', - 'offset' => '2016', - 'type' => '805' - }, - '3' => { - 'name' => 'handshake_hash_buffer', - 'offset' => '40', - 'type' => '6668' - }, - '30' => { - 'name' => 'adv_version_minor', - 'offset' => '2017', - 'type' => '805' - }, - '31' => { - 'name' => 'send_cert_req', - 'offset' => '2020', - 'type' => '77' - }, - '32' => { - 'name' => 'max_handshake_data_buffer_size', - 'offset' => '2024', - 'type' => '45' - }, - '33' => { - 'name' => 'pull_timeout_func', - 'offset' => '2032', - 'type' => '4324' - }, - '34' => { - 'name' => 'pull_func', - 'offset' => '2040', - 'type' => '4238' - }, - '35' => { - 'name' => 'push_func', - 'offset' => '2048', - 'type' => '4281' - }, - '36' => { - 'name' => 'vec_push_func', - 'offset' => '2056', - 'type' => '4362' - }, - '37' => { - 'name' => 'errno_func', - 'offset' => '2064', - 'type' => '4416' - }, - '38' => { - 'name' => 'transport_recv_ptr', - 'offset' => '2072', - 'type' => '3114' - }, - '39' => { - 'name' => 'transport_send_ptr', - 'offset' => '2080', - 'type' => '3114' - }, - '4' => { - 'name' => 'resumable', - 'offset' => '72', - 'type' => '8202' - }, - '40' => { - 'name' => 'db_store_func', - 'offset' => '2088', - 'type' => '3821' - }, - '41' => { - 'name' => 'db_retrieve_func', - 'offset' => '2096', - 'type' => '3902' - }, - '42' => { - 'name' => 'db_remove_func', - 'offset' => '2104', - 'type' => '3864' - }, - '43' => { - 'name' => 'db_ptr', - 'offset' => '2112', - 'type' => '152' - }, - '44' => { - 'name' => 'user_hello_func', - 'offset' => '2120', - 'type' => '4004' - }, - '45' => { - 'name' => 'h_hook', - 'offset' => '2128', - 'type' => '3940' - }, - '46' => { - 'name' => 'h_type', - 'offset' => '2136', - 'type' => '77' - }, - '47' => { - 'name' => 'h_post', - 'offset' => '2140', - 'type' => '726' - }, - '48' => { - 'name' => 'selected_cert_list', - 'offset' => '2144', - 'type' => '5127' - }, - '49' => { - 'name' => 'selected_cert_list_length', - 'offset' => '2152', - 'type' => '726' - }, - '5' => { - 'name' => 'ticket_sent', - 'offset' => '73', - 'type' => '8202' - }, - '50' => { - 'name' => 'selected_key', - 'offset' => '2160', - 'type' => '4060' - }, - '51' => { - 'name' => 'selected_need_free', - 'offset' => '2168', - 'type' => '8202' - }, - '52' => { - 'name' => 'extensions_sent', - 'offset' => '2170', - 'type' => '11282' - }, - '53' => { - 'name' => 'extensions_sent_size', - 'offset' => '2234', - 'type' => '816' - }, - '54' => { - 'name' => 'pgp_fingerprint', - 'offset' => '2236', - 'type' => '8202' - }, - '55' => { - 'name' => 'default_record_version', - 'offset' => '2237', - 'type' => '7879' - }, - '56' => { - 'name' => 'default_hello_version', - 'offset' => '2239', - 'type' => '7879' - }, - '57' => { - 'name' => 'user_ptr', - 'offset' => '2248', - 'type' => '152' - }, - '58' => { - 'name' => 'enable_private', - 'offset' => '2256', - 'type' => '8202' - }, - '59' => { - 'name' => 'direction', - 'offset' => '2257', - 'type' => '8202' - }, - '6' => { - 'name' => 'handshake_final_state', - 'offset' => '76', - 'type' => '6565' - }, - '60' => { - 'name' => 'openpgp_recv_key_func', - 'offset' => '2264', - 'type' => '5014' - }, - '61' => { - 'name' => 'ignore_rdn_sequence', - 'offset' => '2272', - 'type' => '8202' - }, - '62' => { - 'name' => 'rsa_pms_version', - 'offset' => '2273', - 'type' => '7879' - }, - '63' => { - 'name' => 'params', - 'offset' => '2280', - 'type' => '9468' - }, - '64' => { - 'name' => 'errnum', - 'offset' => '2296', - 'type' => '98' - }, - '65' => { - 'name' => 'srp_prime_bits', - 'offset' => '2300', - 'type' => '816' - }, - '66' => { - 'name' => 'initial_negotiation_completed', - 'offset' => '2302', - 'type' => '8202' - }, - '67' => { - 'name' => 'extension_int_data', - 'offset' => '2304', - 'type' => '11298' - }, - '68' => { - 'name' => 'resumed_extension_int_data', - 'offset' => '3072', - 'type' => '11314' - }, - '69' => { - 'name' => 'transport', - 'offset' => '3840', - 'type' => '5442' - }, - '7' => { - 'name' => 'handshake_state', - 'offset' => '80', - 'type' => '6565' - }, - '70' => { - 'name' => 'dtls', - 'offset' => '3848', - 'type' => '9698' - }, - '71' => { - 'name' => 'handshake_large_loops', - 'offset' => '3968', - 'type' => '77' - }, - '72' => { - 'name' => 'handshake_in_progress', - 'offset' => '3972', - 'type' => '8202' - }, - '73' => { - 'name' => 'premaster_set', - 'offset' => '3973', - 'type' => '8202' - }, - '74' => { - 'name' => 'cb_tls_unique_len', - 'offset' => '3976', - 'type' => '77' - }, - '75' => { - 'name' => 'cb_tls_unique', - 'offset' => '3980', - 'type' => '11330' - }, - '76' => { - 'name' => 'handshake_endtime', - 'offset' => '4016', - 'type' => '715' - }, - '77' => { - 'name' => 'handshake_timeout_ms', - 'offset' => '4024', - 'type' => '77' - }, - '78' => { - 'name' => 'record_timeout_ms', - 'offset' => '4028', - 'type' => '77' - }, - '79' => { - 'name' => 'hb_local_data', - 'offset' => '4032', - 'type' => '6668' - }, - '8' => { - 'name' => 'invalid_connection', - 'offset' => '84', - 'type' => '8202' - }, - '80' => { - 'name' => 'hb_remote_data', - 'offset' => '4064', - 'type' => '6668' - }, - '81' => { - 'name' => 'hb_ping_start', - 'offset' => '4096', - 'type' => '737' - }, - '82' => { - 'name' => 'hb_ping_sent', - 'offset' => '4112', - 'type' => '737' - }, - '83' => { - 'name' => 'hb_actual_retrans_timeout_ms', - 'offset' => '4128', - 'type' => '77' - }, - '84' => { - 'name' => 'hb_retrans_timeout_ms', - 'offset' => '4132', - 'type' => '77' - }, - '85' => { - 'name' => 'hb_total_timeout_ms', - 'offset' => '4136', - 'type' => '77' - }, - '86' => { - 'name' => 'ocsp_check_ok', - 'offset' => '4140', - 'type' => '8202' - }, - '87' => { - 'name' => 'hb_state', - 'offset' => '4144', - 'type' => '6611' - }, - '88' => { - 'name' => 'recv_state', - 'offset' => '4148', - 'type' => '6651' - }, - '89' => { - 'name' => 'sc_random_set', - 'offset' => '4152', - 'type' => '8202' - }, - '9' => { - 'name' => 'may_not_read', - 'offset' => '85', - 'type' => '8202' - }, - '90' => { - 'name' => 'no_replay_protection', - 'offset' => '4153', - 'type' => '8202' - }, - '91' => { - 'name' => 'try_ext_master_secret', - 'offset' => '4154', - 'type' => '8202' - } - }, - 'Name' => 'struct internals_st', - 'Size' => '4160', - 'Type' => 'Struct' - }, - '11358' => { - 'BaseType' => '11374', - 'Name' => 'record_parameters_st*[16]', - 'Size' => '128', - 'Type' => 'Array' - }, - '11374' => { - 'BaseType' => '7535', - 'Name' => 'record_parameters_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '11400' => { - 'BaseType' => '6668', - 'Name' => 'gnutls_buffer_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '11406' => { - 'Name' => 'int(*)(gnutls_session_t, gnutls_buffer_st*)', - 'Param' => { - '0' => { - 'type' => '3126' - }, - '1' => { - 'type' => '11400' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '11437' => { - 'Name' => 'int(*)(gnutls_session_t, uint8_t*, size_t)', - 'Param' => { - '0' => { - 'type' => '3126' - }, - '1' => { - 'type' => '6662' - }, - '2' => { - 'type' => '45' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '11443' => { - 'Name' => 'struct ub_ctx', - 'Type' => 'Struct' - }, - '11448' => { - 'BaseType' => '11443', - 'Name' => 'struct ub_ctx*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '11454' => { - 'BaseType' => '4574', - 'Name' => 'dane_cert_usage_t[100]', - 'Size' => '400', - 'Type' => 'Array' - }, - '11470' => { - 'BaseType' => '4614', - 'Name' => 'dane_cert_type_t[100]', - 'Size' => '400', - 'Type' => 'Array' - }, - '11486' => { - 'BaseType' => '4660', - 'Name' => 'dane_match_type_t[100]', - 'Size' => '400', - 'Type' => 'Array' - }, - '11502' => { - 'BaseType' => '3646', - 'Name' => 'gnutls_datum_t[100]', - 'Size' => '1600', - 'Type' => 'Array' - }, - '12793' => { - 'BaseType' => '1822', - 'Name' => 'char***', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '12799' => { - 'BaseType' => '781', - 'Name' => 'int**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '13098' => { - 'BaseType' => '4723', - 'Name' => 'dane_state_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '13560' => { - 'BaseType' => '4777', - 'Name' => 'dane_query_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '13566' => { - 'BaseType' => '13572', - 'Name' => 'char*const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '13572' => { - 'BaseType' => '176', - 'Name' => 'char*const', - 'Size' => '8', - 'Type' => 'Const' - }, - '141' => { - 'BaseType' => '105', - 'Header' => 'types.h', - 'Line' => '139', - 'Name' => '__time_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '152' => { - 'BaseType' => '1', - 'Name' => 'void*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '154' => { - 'BaseType' => '105', - 'Header' => 'types.h', - 'Line' => '172', - 'Name' => '__ssize_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '1613' => { - 'BaseType' => '63', - 'Name' => 'unsigned char[8]', - 'Size' => '8', - 'Type' => 'Array' - }, - '1629' => { - 'Header' => 'unbound.h', - 'Line' => '123', - 'Memb' => { - '0' => { - 'name' => 'qname', - 'offset' => '0', - 'type' => '176' - }, - '1' => { - 'name' => 'qtype', - 'offset' => '8', - 'type' => '98' - }, - '10' => { - 'name' => 'nxdomain', - 'offset' => '64', - 'type' => '98' - }, - '11' => { - 'name' => 'secure', - 'offset' => '68', - 'type' => '98' - }, - '12' => { - 'name' => 'bogus', - 'offset' => '72', - 'type' => '98' - }, - '13' => { - 'name' => 'why_bogus', - 'offset' => '80', - 'type' => '176' - }, - '14' => { - 'name' => 'ttl', - 'offset' => '88', - 'type' => '98' - }, - '2' => { - 'name' => 'qclass', - 'offset' => '12', - 'type' => '98' - }, - '3' => { - 'name' => 'data', - 'offset' => '16', - 'type' => '1822' - }, - '4' => { - 'name' => 'len', - 'offset' => '24', - 'type' => '781' - }, - '5' => { - 'name' => 'canonname', - 'offset' => '32', - 'type' => '176' - }, - '6' => { - 'name' => 'rcode', - 'offset' => '40', - 'type' => '98' - }, - '7' => { - 'name' => 'answer_packet', - 'offset' => '48', - 'type' => '152' - }, - '8' => { - 'name' => 'answer_len', - 'offset' => '56', - 'type' => '98' - }, - '9' => { - 'name' => 'havedata', - 'offset' => '60', - 'type' => '98' - } - }, - 'Name' => 'struct ub_result', - 'Size' => '96', - 'Type' => 'Struct' - }, - '165' => { - 'BaseType' => '105', - 'Header' => 'types.h', - 'Line' => '175', - 'Name' => '__syscall_slong_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '176' => { - 'BaseType' => '182', - 'Name' => 'char*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '182' => { - 'Name' => 'char', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '1822' => { - 'BaseType' => '176', - 'Name' => 'char**', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1828' => { - 'BaseType' => '1629', - 'Name' => 'struct ub_result*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '1834' => { - 'Header' => 'gnutls.h', - 'Line' => '114', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CIPHER_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CIPHER_NULL', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_CIPHER_AES_128_GCM', - 'value' => '10' - }, - '11' => { - 'name' => 'GNUTLS_CIPHER_AES_256_GCM', - 'value' => '11' - }, - '12' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_192_CBC', - 'value' => '12' - }, - '13' => { - 'name' => 'GNUTLS_CIPHER_SALSA20_256', - 'value' => '13' - }, - '14' => { - 'name' => 'GNUTLS_CIPHER_ESTREAM_SALSA20_256', - 'value' => '14' - }, - '15' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_128_GCM', - 'value' => '15' - }, - '16' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_256_GCM', - 'value' => '16' - }, - '17' => { - 'name' => 'GNUTLS_CIPHER_RC2_40_CBC', - 'value' => '17' - }, - '18' => { - 'name' => 'GNUTLS_CIPHER_DES_CBC', - 'value' => '18' - }, - '19' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CCM', - 'value' => '19' - }, - '2' => { - 'name' => 'GNUTLS_CIPHER_ARCFOUR_128', - 'value' => '2' - }, - '20' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CCM', - 'value' => '20' - }, - '21' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CCM_8', - 'value' => '21' - }, - '22' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CCM_8', - 'value' => '22' - }, - '23' => { - 'name' => 'GNUTLS_CIPHER_CHACHA20_POLY1305', - 'value' => '23' - }, - '24' => { - 'name' => 'GNUTLS_CIPHER_IDEA_PGP_CFB', - 'value' => '200' - }, - '25' => { - 'name' => 'GNUTLS_CIPHER_3DES_PGP_CFB', - 'value' => '201' - }, - '26' => { - 'name' => 'GNUTLS_CIPHER_CAST5_PGP_CFB', - 'value' => '202' - }, - '27' => { - 'name' => 'GNUTLS_CIPHER_BLOWFISH_PGP_CFB', - 'value' => '203' - }, - '28' => { - 'name' => 'GNUTLS_CIPHER_SAFER_SK128_PGP_CFB', - 'value' => '204' - }, - '29' => { - 'name' => 'GNUTLS_CIPHER_AES128_PGP_CFB', - 'value' => '205' - }, - '3' => { - 'name' => 'GNUTLS_CIPHER_3DES_CBC', - 'value' => '3' - }, - '30' => { - 'name' => 'GNUTLS_CIPHER_AES192_PGP_CFB', - 'value' => '206' - }, - '31' => { - 'name' => 'GNUTLS_CIPHER_AES256_PGP_CFB', - 'value' => '207' - }, - '32' => { - 'name' => 'GNUTLS_CIPHER_TWOFISH_PGP_CFB', - 'value' => '208' - }, - '4' => { - 'name' => 'GNUTLS_CIPHER_AES_128_CBC', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_CIPHER_AES_256_CBC', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_CIPHER_ARCFOUR_40', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_128_CBC', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_CIPHER_CAMELLIA_256_CBC', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_CIPHER_AES_192_CBC', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_cipher_algorithm', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2049' => { - 'BaseType' => '1834', - 'Header' => 'gnutls.h', - 'Line' => '151', - 'Name' => 'gnutls_cipher_algorithm_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '2169' => { - 'Header' => 'gnutls.h', - 'Line' => '191', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_KX_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_KX_RSA', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_KX_DHE_PSK', - 'value' => '10' - }, - '11' => { - 'name' => 'GNUTLS_KX_ANON_ECDH', - 'value' => '11' - }, - '12' => { - 'name' => 'GNUTLS_KX_ECDHE_RSA', - 'value' => '12' - }, - '13' => { - 'name' => 'GNUTLS_KX_ECDHE_ECDSA', - 'value' => '13' - }, - '14' => { - 'name' => 'GNUTLS_KX_ECDHE_PSK', - 'value' => '14' - }, - '15' => { - 'name' => 'GNUTLS_KX_RSA_PSK', - 'value' => '15' - }, - '2' => { - 'name' => 'GNUTLS_KX_DHE_DSS', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_KX_DHE_RSA', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_KX_ANON_DH', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_KX_SRP', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_KX_RSA_EXPORT', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_KX_SRP_RSA', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_KX_SRP_DSS', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_KX_PSK', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_kx_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2223' => { - 'Header' => 'gnutls.h', - 'Line' => '223', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CRD_CERTIFICATE', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_CRD_ANON', - 'value' => '2' - }, - '2' => { - 'name' => 'GNUTLS_CRD_SRP', - 'value' => '3' - }, - '3' => { - 'name' => 'GNUTLS_CRD_PSK', - 'value' => '4' - }, - '4' => { - 'name' => 'GNUTLS_CRD_IA', - 'value' => '5' - } - }, - 'Name' => 'enum gnutls_credentials_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2325' => { - 'Header' => 'gnutls.h', - 'Line' => '263', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_MAC_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_MAC_NULL', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_MAC_AEAD', - 'value' => '200' - }, - '11' => { - 'name' => 'GNUTLS_MAC_UMAC_96', - 'value' => '201' - }, - '12' => { - 'name' => 'GNUTLS_MAC_UMAC_128', - 'value' => '202' - }, - '2' => { - 'name' => 'GNUTLS_MAC_MD5', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_MAC_SHA1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_MAC_RMD160', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_MAC_MD2', - 'value' => '5' - }, - '6' => { - 'name' => 'GNUTLS_MAC_SHA256', - 'value' => '6' - }, - '7' => { - 'name' => 'GNUTLS_MAC_SHA384', - 'value' => '7' - }, - '8' => { - 'name' => 'GNUTLS_MAC_SHA512', - 'value' => '8' - }, - '9' => { - 'name' => 'GNUTLS_MAC_SHA224', - 'value' => '9' - } - }, - 'Name' => 'enum gnutls_mac_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2449' => { - 'Header' => 'gnutls.h', - 'Line' => '316', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_COMP_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_COMP_NULL', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_COMP_DEFLATE', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_COMP_ZLIB', - 'value' => '2' - } - }, - 'Name' => 'enum gnutls_compression_method_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2572' => { - 'Header' => 'gnutls.h', - 'Line' => '457', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_HANDSHAKE_HELLO_REQUEST', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_HELLO', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE', - 'value' => '16' - }, - '11' => { - 'name' => 'GNUTLS_HANDSHAKE_FINISHED', - 'value' => '20' - }, - '12' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_STATUS', - 'value' => '22' - }, - '13' => { - 'name' => 'GNUTLS_HANDSHAKE_SUPPLEMENTAL', - 'value' => '23' - }, - '14' => { - 'name' => 'GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC', - 'value' => '254' - }, - '15' => { - 'name' => 'GNUTLS_HANDSHAKE_CLIENT_HELLO_V2', - 'value' => '1024' - }, - '2' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_HELLO', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_HANDSHAKE_NEW_SESSION_TICKET', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_PKT', - 'value' => '11' - }, - '6' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE', - 'value' => '12' - }, - '7' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST', - 'value' => '13' - }, - '8' => { - 'name' => 'GNUTLS_HANDSHAKE_SERVER_HELLO_DONE', - 'value' => '14' - }, - '9' => { - 'name' => 'GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY', - 'value' => '15' - } - }, - 'Name' => 'enum gnutls_handshake_description_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2670' => { - 'Header' => 'gnutls.h', - 'Line' => '579', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SSL3', - 'value' => '1' - }, - '1' => { - 'name' => 'GNUTLS_TLS1_0', - 'value' => '2' - }, - '10' => { - 'name' => 'GNUTLS_TLS_VERSION_MAX', - 'value' => '4' - }, - '11' => { - 'name' => 'GNUTLS_VERSION_UNKNOWN', - 'value' => '255' - }, - '2' => { - 'name' => 'GNUTLS_TLS1', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_TLS1_1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_TLS1_2', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_DTLS0_9', - 'value' => '200' - }, - '6' => { - 'name' => 'GNUTLS_DTLS1_0', - 'value' => '201' - }, - '7' => { - 'name' => 'GNUTLS_DTLS1_2', - 'value' => '202' - }, - '8' => { - 'name' => 'GNUTLS_DTLS_VERSION_MIN', - 'value' => '200' - }, - '9' => { - 'name' => 'GNUTLS_DTLS_VERSION_MAX', - 'value' => '202' - } - }, - 'Name' => 'enum gnutls_protocol_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2720' => { - 'Header' => 'gnutls.h', - 'Line' => '595', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CRT_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_CRT_X509', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_CRT_OPENPGP', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_CRT_RAW', - 'value' => '3' - } - }, - 'Name' => 'enum gnutls_certificate_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2802' => { - 'Header' => 'gnutls.h', - 'Line' => '644', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_PK_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_PK_RSA', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_PK_DSA', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_PK_DH', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_PK_EC', - 'value' => '4' - } - }, - 'Name' => 'enum gnutls_pk_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '2954' => { - 'Header' => 'gnutls.h', - 'Line' => '696', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SIGN_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA1', - 'value' => '1' - }, - '10' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA512', - 'value' => '8' - }, - '11' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA224', - 'value' => '9' - }, - '12' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA224', - 'value' => '10' - }, - '13' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA256', - 'value' => '11' - }, - '14' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA1', - 'value' => '12' - }, - '15' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA224', - 'value' => '13' - }, - '16' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA256', - 'value' => '14' - }, - '17' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA384', - 'value' => '15' - }, - '18' => { - 'name' => 'GNUTLS_SIGN_ECDSA_SHA512', - 'value' => '16' - }, - '19' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA384', - 'value' => '17' - }, - '2' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA', - 'value' => '1' - }, - '20' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA512', - 'value' => '18' - }, - '3' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA1', - 'value' => '2' - }, - '4' => { - 'name' => 'GNUTLS_SIGN_DSA_SHA', - 'value' => '2' - }, - '5' => { - 'name' => 'GNUTLS_SIGN_RSA_MD5', - 'value' => '3' - }, - '6' => { - 'name' => 'GNUTLS_SIGN_RSA_MD2', - 'value' => '4' - }, - '7' => { - 'name' => 'GNUTLS_SIGN_RSA_RMD160', - 'value' => '5' - }, - '8' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA256', - 'value' => '6' - }, - '9' => { - 'name' => 'GNUTLS_SIGN_RSA_SHA384', - 'value' => '7' - } - }, - 'Name' => 'enum gnutls_sign_algorithm_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '3016' => { - 'Header' => 'gnutls.h', - 'Line' => '716', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_ECC_CURVE_INVALID', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP224R1', - 'value' => '1' - }, - '2' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP256R1', - 'value' => '2' - }, - '3' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP384R1', - 'value' => '3' - }, - '4' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP521R1', - 'value' => '4' - }, - '5' => { - 'name' => 'GNUTLS_ECC_CURVE_SECP192R1', - 'value' => '5' - } - }, - 'Name' => 'enum gnutls_ecc_curve_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '3102' => { - 'Header' => 'gnutls.h', - 'Line' => '750', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_SEC_PARAM_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_SEC_PARAM_INSECURE', - 'value' => '5' - }, - '2' => { - 'name' => 'GNUTLS_SEC_PARAM_EXPORT', - 'value' => '10' - }, - '3' => { - 'name' => 'GNUTLS_SEC_PARAM_VERY_WEAK', - 'value' => '15' - }, - '4' => { - 'name' => 'GNUTLS_SEC_PARAM_WEAK', - 'value' => '20' - }, - '5' => { - 'name' => 'GNUTLS_SEC_PARAM_LOW', - 'value' => '25' - }, - '6' => { - 'name' => 'GNUTLS_SEC_PARAM_LEGACY', - 'value' => '30' - }, - '7' => { - 'name' => 'GNUTLS_SEC_PARAM_MEDIUM', - 'value' => '35' - }, - '8' => { - 'name' => 'GNUTLS_SEC_PARAM_HIGH', - 'value' => '40' - }, - '9' => { - 'name' => 'GNUTLS_SEC_PARAM_ULTRA', - 'value' => '45' - } - }, - 'Name' => 'enum gnutls_sec_param_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '3114' => { - 'BaseType' => '152', - 'Header' => 'gnutls.h', - 'Line' => '769', - 'Name' => 'gnutls_transport_ptr_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3126' => { - 'BaseType' => '3138', - 'Header' => 'gnutls.h', - 'Line' => '772', - 'Name' => 'gnutls_session_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3138' => { - 'BaseType' => '3144', - 'Name' => 'struct gnutls_session_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3144' => { - 'Header' => 'gnutls_int.h', - 'Line' => '1007', - 'Memb' => { - '0' => { - 'name' => 'security_parameters', - 'offset' => '0', - 'type' => '9290' - }, - '1' => { - 'name' => 'record_parameters', - 'offset' => '224', - 'type' => '11358' - }, - '2' => { - 'name' => 'internals', - 'offset' => '352', - 'type' => '11346' - }, - '3' => { - 'name' => 'key', - 'offset' => '4512', - 'type' => '7420' - } - }, - 'Name' => 'struct gnutls_session_int', - 'Size' => '4968', - 'Type' => 'Struct' - }, - '3213' => { - 'BaseType' => '3225', - 'Header' => 'gnutls.h', - 'Line' => '775', - 'Name' => 'gnutls_dh_params_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3225' => { - 'BaseType' => '3231', - 'Name' => 'struct gnutls_dh_params_int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3231' => { - 'Header' => 'gnutls_int.h', - 'Line' => '696', - 'Memb' => { - '0' => { - 'name' => 'params', - 'offset' => '0', - 'type' => '7398' - }, - '1' => { - 'name' => 'q_bits', - 'offset' => '16', - 'type' => '98' - } - }, - 'Name' => 'struct gnutls_dh_params_int', - 'Size' => '24', - 'Type' => 'Struct' - }, - '3271' => { - 'Header' => 'gnutls_int.h', - 'Line' => '648', - 'Memb' => { - '0' => { - 'name' => 'cipher', - 'offset' => '0', - 'type' => '9370' - }, - '1' => { - 'name' => 'mac', - 'offset' => '132', - 'type' => '9370' - }, - '10' => { - 'name' => 'allow_large_records', - 'offset' => '1058', - 'type' => '8202' - }, - '11' => { - 'name' => 'dumbfw', - 'offset' => '1060', - 'type' => '77' - }, - '12' => { - 'name' => 'sr', - 'offset' => '1064', - 'type' => '9420' - }, - '13' => { - 'name' => 'min_record_version', - 'offset' => '1068', - 'type' => '8202' - }, - '14' => { - 'name' => 'server_precedence', - 'offset' => '1069', - 'type' => '8202' - }, - '15' => { - 'name' => 'allow_wrong_pms', - 'offset' => '1070', - 'type' => '8202' - }, - '16' => { - 'name' => 'no_tickets', - 'offset' => '1071', - 'type' => '8202' - }, - '17' => { - 'name' => 'no_etm', - 'offset' => '1072', - 'type' => '8202' - }, - '18' => { - 'name' => 'have_cbc', - 'offset' => '1073', - 'type' => '8202' - }, - '19' => { - 'name' => 'stateless_compression', - 'offset' => '1074', - 'type' => '8202' - }, - '2' => { - 'name' => 'kx', - 'offset' => '264', - 'type' => '9370' - }, - '20' => { - 'name' => 'additional_verify_flags', - 'offset' => '1076', - 'type' => '77' - }, - '21' => { - 'name' => 'level', - 'offset' => '1080', - 'type' => '3102' - }, - '22' => { - 'name' => 'dh_prime_bits', - 'offset' => '1084', - 'type' => '77' - }, - '3' => { - 'name' => 'compression', - 'offset' => '396', - 'type' => '9370' - }, - '4' => { - 'name' => 'protocol', - 'offset' => '528', - 'type' => '9370' - }, - '5' => { - 'name' => 'cert_type', - 'offset' => '660', - 'type' => '9370' - }, - '6' => { - 'name' => 'sign_algo', - 'offset' => '792', - 'type' => '9370' - }, - '7' => { - 'name' => 'supported_ecc', - 'offset' => '924', - 'type' => '9370' - }, - '8' => { - 'name' => 'no_extensions', - 'offset' => '1056', - 'type' => '8202' - }, - '9' => { - 'name' => 'no_ext_master_secret', - 'offset' => '1057', - 'type' => '8202' - } - }, - 'Name' => 'struct gnutls_priority_st', - 'Size' => '1088', - 'Type' => 'Struct' - }, - '3640' => { - 'BaseType' => '63', - 'Name' => 'unsigned char*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3646' => { - 'Header' => 'gnutls.h', - 'Line' => '787', - 'Memb' => { - '0' => { - 'name' => 'data', - 'offset' => '0', - 'type' => '3640' - }, - '1' => { - 'name' => 'size', - 'offset' => '8', - 'type' => '77' - } - }, - 'Name' => 'struct gnutls_datum_t', - 'Size' => '16', - 'Type' => 'Struct' - }, - '3664' => { - 'Header' => 'gnutls_int.h', - 'Line' => '310', - 'Memb' => { - '0' => { - 'name' => 'next', - 'offset' => '0', - 'type' => '7003' - }, - '1' => { - 'name' => 'prev', - 'offset' => '8', - 'type' => '7003' - }, - '10' => { - 'name' => 'handshake_sequence', - 'offset' => '72', - 'type' => '816' - }, - '2' => { - 'name' => 'mark', - 'offset' => '16', - 'type' => '45' - }, - '3' => { - 'name' => 'msg', - 'offset' => '24', - 'type' => '3646' - }, - '4' => { - 'name' => 'maximum_size', - 'offset' => '40', - 'type' => '45' - }, - '5' => { - 'name' => 'uhead_mark', - 'offset' => '48', - 'type' => '77' - }, - '6' => { - 'name' => 'type', - 'offset' => '52', - 'type' => '6771' - }, - '7' => { - 'name' => 'record_sequence', - 'offset' => '56', - 'type' => '5354' - }, - '8' => { - 'name' => 'epoch', - 'offset' => '64', - 'type' => '816' - }, - '9' => { - 'name' => 'htype', - 'offset' => '68', - 'type' => '2572' - } - }, - 'Name' => 'struct mbuffer_st', - 'Size' => '80', - 'Type' => 'Struct' - }, - '3821' => { - 'BaseType' => '3833', - 'Header' => 'gnutls.h', - 'Line' => '1229', - 'Name' => 'gnutls_db_store_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3833' => { - 'Name' => 'int(*)(void*, gnutls_datum_t, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '152' - }, - '1' => { - 'type' => '3646' - }, - '2' => { - 'type' => '3646' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3864' => { - 'BaseType' => '3876', - 'Header' => 'gnutls.h', - 'Line' => '1231', - 'Name' => 'gnutls_db_remove_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3876' => { - 'Name' => 'int(*)(void*, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '152' - }, - '1' => { - 'type' => '3646' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3902' => { - 'BaseType' => '3914', - 'Header' => 'gnutls.h', - 'Line' => '1232', - 'Name' => 'gnutls_db_retr_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3914' => { - 'Name' => 'gnutls_datum_t(*)(void*, gnutls_datum_t)', - 'Param' => { - '0' => { - 'type' => '152' - }, - '1' => { - 'type' => '3646' - } - }, - 'Return' => '3646', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3940' => { - 'BaseType' => '3952', - 'Header' => 'gnutls.h', - 'Line' => '1267', - 'Name' => 'gnutls_handshake_hook_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '3952' => { - 'Name' => 'int(*)(gnutls_session_t, unsigned int, unsigned int, unsigned int, gnutls_datum_t const*)', - 'Param' => { - '0' => { - 'type' => '3126' - }, - '1' => { - 'type' => '77' - }, - '2' => { - 'type' => '77' - }, - '3' => { - 'type' => '77' - }, - '4' => { - 'type' => '3993' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '3993' => { - 'BaseType' => '3999', - 'Name' => 'gnutls_datum_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '3999' => { - 'BaseType' => '3646', - 'Name' => 'gnutls_datum_t const', - 'Size' => '16', - 'Type' => 'Const' - }, - '4004' => { - 'BaseType' => '4016', - 'Header' => 'gnutls.h', - 'Line' => '1276', - 'Name' => 'gnutls_handshake_post_client_hello_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4016' => { - 'Name' => 'int(*)(gnutls_session_t)', - 'Param' => { - '0' => { - 'type' => '3126' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4037' => { - 'BaseType' => '4049', - 'Header' => 'gnutls.h', - 'Line' => '1304', - 'Name' => 'gnutls_pubkey_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4049' => { - 'BaseType' => '4055', - 'Name' => 'struct gnutls_pubkey_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4055' => { - 'Name' => 'struct gnutls_pubkey_st', - 'Type' => 'Struct' - }, - '4060' => { - 'BaseType' => '4066', - 'Name' => 'struct gnutls_privkey_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4066' => { - 'Name' => 'struct gnutls_privkey_st', - 'Type' => 'Struct' - }, - '4117' => { - 'BaseType' => '3646', - 'Name' => 'gnutls_datum_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4173' => { - 'Name' => 'void(*)(void*)', - 'Param' => { - '0' => { - 'type' => '152' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4226' => { - 'Header' => 'gnutls.h', - 'Line' => '1610', - 'Memb' => { - '0' => { - 'name' => 'iov_base', - 'offset' => '0', - 'type' => '152' - }, - '1' => { - 'name' => 'iov_len', - 'offset' => '8', - 'type' => '45' - } - }, - 'Name' => 'struct giovec_t', - 'Size' => '16', - 'Type' => 'Struct' - }, - '4238' => { - 'BaseType' => '4250', - 'Header' => 'gnutls.h', - 'Line' => '1612', - 'Name' => 'gnutls_pull_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4250' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '3114' - }, - '1' => { - 'type' => '152' - }, - '2' => { - 'type' => '45' - } - }, - 'Return' => '690', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4281' => { - 'BaseType' => '4293', - 'Header' => 'gnutls.h', - 'Line' => '1614', - 'Name' => 'gnutls_push_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4293' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, void const*, size_t)', - 'Param' => { - '0' => { - 'type' => '3114' - }, - '1' => { - 'type' => '798' - }, - '2' => { - 'type' => '45' - } - }, - 'Return' => '690', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4324' => { - 'BaseType' => '4336', - 'Header' => 'gnutls.h', - 'Line' => '1618', - 'Name' => 'gnutls_pull_timeout_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4336' => { - 'Name' => 'int(*)(gnutls_transport_ptr_t, unsigned int)', - 'Param' => { - '0' => { - 'type' => '3114' - }, - '1' => { - 'type' => '77' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4362' => { - 'BaseType' => '4374', - 'Header' => 'gnutls.h', - 'Line' => '1621', - 'Name' => 'gnutls_vec_push_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4374' => { - 'Name' => 'ssize_t(*)(gnutls_transport_ptr_t, giovec_t const*, int)', - 'Param' => { - '0' => { - 'type' => '3114' - }, - '1' => { - 'type' => '4405' - }, - '2' => { - 'type' => '98' - } - }, - 'Return' => '690', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4405' => { - 'BaseType' => '4411', - 'Name' => 'giovec_t const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4411' => { - 'BaseType' => '4226', - 'Name' => 'giovec_t const', - 'Size' => '16', - 'Type' => 'Const' - }, - '4416' => { - 'BaseType' => '4428', - 'Header' => 'gnutls.h', - 'Line' => '1624', - 'Name' => 'gnutls_errno_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4428' => { - 'Name' => 'int(*)(gnutls_transport_ptr_t)', - 'Param' => { - '0' => { - 'type' => '3114' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '4449' => { - 'Header' => 'gnutls_str.h', - 'Line' => '37', - 'Memb' => { - '0' => { - 'name' => 'allocd', - 'offset' => '0', - 'type' => '6662' - }, - '1' => { - 'name' => 'data', - 'offset' => '8', - 'type' => '6662' - }, - '2' => { - 'name' => 'max_length', - 'offset' => '16', - 'type' => '45' - }, - '3' => { - 'name' => 'length', - 'offset' => '24', - 'type' => '45' - } - }, - 'Name' => 'struct gnutls_buffer_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '45' => { - 'BaseType' => '56', - 'Header' => 'stddef.h', - 'Line' => '216', - 'Name' => 'size_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4510' => { - 'BaseType' => '152', - 'Header' => 'gnutls.h', - 'Line' => '2240', - 'Name' => 'gnutls_ext_priv_data_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4522' => { - 'BaseType' => '4528', - 'Name' => 'unsigned char const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4528' => { - 'BaseType' => '63', - 'Name' => 'unsigned char const', - 'Size' => '1', - 'Type' => 'Const' - }, - '4533' => { - 'Header' => 'dane.h', - 'Line' => '39', - 'Memb' => { - '0' => { - 'name' => 'DANE_CERT_USAGE_CA', - 'value' => '0' - }, - '1' => { - 'name' => 'DANE_CERT_USAGE_EE', - 'value' => '1' - }, - '2' => { - 'name' => 'DANE_CERT_USAGE_LOCAL_CA', - 'value' => '2' - }, - '3' => { - 'name' => 'DANE_CERT_USAGE_LOCAL_EE', - 'value' => '3' - } - }, - 'Name' => 'enum dane_cert_usage_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '4574' => { - 'BaseType' => '4533', - 'Header' => 'dane.h', - 'Line' => '44', - 'Name' => 'dane_cert_usage_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '4585' => { - 'Header' => 'dane.h', - 'Line' => '53', - 'Memb' => { - '0' => { - 'name' => 'DANE_CERT_X509', - 'value' => '0' - }, - '1' => { - 'name' => 'DANE_CERT_PK', - 'value' => '1' - } - }, - 'Name' => 'enum dane_cert_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '4614' => { - 'BaseType' => '4585', - 'Header' => 'dane.h', - 'Line' => '56', - 'Name' => 'dane_cert_type_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '4625' => { - 'Header' => 'dane.h', - 'Line' => '66', - 'Memb' => { - '0' => { - 'name' => 'DANE_MATCH_EXACT', - 'value' => '0' - }, - '1' => { - 'name' => 'DANE_MATCH_SHA2_256', - 'value' => '1' - }, - '2' => { - 'name' => 'DANE_MATCH_SHA2_512', - 'value' => '2' - } - }, - 'Name' => 'enum dane_match_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '4660' => { - 'BaseType' => '4625', - 'Header' => 'dane.h', - 'Line' => '70', - 'Name' => 'dane_match_type_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '4671' => { - 'Header' => 'dane.h', - 'Line' => '81', - 'Memb' => { - '0' => { - 'name' => 'DANE_QUERY_UNKNOWN', - 'value' => '0' - }, - '1' => { - 'name' => 'DANE_QUERY_DNSSEC_VERIFIED', - 'value' => '1' - }, - '2' => { - 'name' => 'DANE_QUERY_BOGUS', - 'value' => '2' - }, - '3' => { - 'name' => 'DANE_QUERY_NO_DNSSEC', - 'value' => '3' - } - }, - 'Name' => 'enum dane_query_status_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '4712' => { - 'BaseType' => '4671', - 'Header' => 'dane.h', - 'Line' => '86', - 'Name' => 'dane_query_status_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '4723' => { - 'BaseType' => '4734', - 'Header' => 'dane.h', - 'Line' => '88', - 'Name' => 'dane_state_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4734' => { - 'BaseType' => '4740', - 'Name' => 'struct dane_state_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4740' => { - 'Line' => '57', - 'Memb' => { - '0' => { - 'name' => 'ctx', - 'offset' => '0', - 'type' => '11448' - }, - '1' => { - 'name' => 'flags', - 'offset' => '8', - 'type' => '77' - } - }, - 'Name' => 'struct dane_state_st', - 'Size' => '16', - 'Source' => 'dane.c', - 'Type' => 'Struct' - }, - '4777' => { - 'BaseType' => '4788', - 'Header' => 'dane.h', - 'Line' => '89', - 'Name' => 'dane_query_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '4788' => { - 'BaseType' => '4794', - 'Name' => 'struct dane_query_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '4794' => { - 'Line' => '62', - 'Memb' => { - '0' => { - 'name' => 'result', - 'offset' => '0', - 'type' => '1828' - }, - '1' => { - 'name' => 'data_entries', - 'offset' => '8', - 'type' => '77' - }, - '2' => { - 'name' => 'usage', - 'offset' => '12', - 'type' => '11454' - }, - '3' => { - 'name' => 'type', - 'offset' => '412', - 'type' => '11470' - }, - '4' => { - 'name' => 'match', - 'offset' => '812', - 'type' => '11486' - }, - '5' => { - 'name' => 'data', - 'offset' => '1216', - 'type' => '11502' - }, - '6' => { - 'name' => 'flags', - 'offset' => '2816', - 'type' => '77' - }, - '7' => { - 'name' => 'status', - 'offset' => '2820', - 'type' => '4712' - } - }, - 'Name' => 'struct dane_query_st', - 'Size' => '2824', - 'Source' => 'dane.c', - 'Type' => 'Struct' - }, - '5014' => { - 'BaseType' => '5026', - 'Header' => 'openpgp.h', - 'Line' => '317', - 'Name' => 'gnutls_openpgp_recv_key_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '5026' => { - 'Name' => 'int(*)(gnutls_session_t, unsigned char const*, unsigned int, gnutls_datum_t*)', - 'Param' => { - '0' => { - 'type' => '3126' - }, - '1' => { - 'type' => '4522' - }, - '2' => { - 'type' => '77' - }, - '3' => { - 'type' => '4117' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5062' => { - 'Header' => 'abstract.h', - 'Line' => '451', - 'Memb' => { - '0' => { - 'name' => 'pubkey', - 'offset' => '0', - 'type' => '4037' - }, - '1' => { - 'name' => 'cert', - 'offset' => '8', - 'type' => '3646' - }, - '2' => { - 'name' => 'type', - 'offset' => '24', - 'type' => '2720' - } - }, - 'Name' => 'struct gnutls_pcert_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '5115' => { - 'BaseType' => '5062', - 'Header' => 'abstract.h', - 'Line' => '455', - 'Name' => 'gnutls_pcert_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '5127' => { - 'BaseType' => '5115', - 'Name' => 'gnutls_pcert_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5133' => { - 'BaseType' => '77', - 'Name' => 'unsigned int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '5139' => { - 'Name' => 'int(*)(void*, void const*, size_t)', - 'Param' => { - '0' => { - 'type' => '152' - }, - '1' => { - 'type' => '798' - }, - '2' => { - 'type' => '45' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5170' => { - 'Name' => 'int(*)(void*, void const*, size_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '152' - }, - '1' => { - 'type' => '798' - }, - '2' => { - 'type' => '45' - }, - '3' => { - 'type' => '152' - }, - '4' => { - 'type' => '45' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5211' => { - 'Name' => 'void(*)(void*, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '152' - }, - '1' => { - 'type' => '152' - }, - '2' => { - 'type' => '45' - } - }, - 'Return' => '1', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5238' => { - 'Name' => 'int(*)(void*, void const*, size_t, void const*, size_t, size_t, void const*, size_t, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '152' - }, - '1' => { - 'type' => '798' - }, - '2' => { - 'type' => '45' - }, - '3' => { - 'type' => '798' - }, - '4' => { - 'type' => '45' - }, - '5' => { - 'type' => '45' - }, - '6' => { - 'type' => '798' - }, - '7' => { - 'type' => '45' - }, - '8' => { - 'type' => '152' - }, - '9' => { - 'type' => '45' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5304' => { - 'Name' => 'int(*)(void*, void*, size_t)', - 'Param' => { - '0' => { - 'type' => '152' - }, - '1' => { - 'type' => '152' - }, - '2' => { - 'type' => '45' - } - }, - 'Return' => '98', - 'Size' => '8', - 'Type' => 'FuncPtr' - }, - '5354' => { - 'Header' => 'gnutls_int.h', - 'Line' => '91', - 'Memb' => { - '0' => { - 'name' => 'i', - 'offset' => '0', - 'type' => '1613' - } - }, - 'Name' => 'struct uint64', - 'Size' => '8', - 'Type' => 'Struct' - }, - '5413' => { - 'Header' => 'gnutls_int.h', - 'Line' => '146', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_STREAM', - 'value' => '0' - }, - '1' => { - 'name' => 'GNUTLS_DGRAM', - 'value' => '1' - } - }, - 'Name' => 'enum transport_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '5442' => { - 'BaseType' => '5413', - 'Header' => 'gnutls_int.h', - 'Line' => '149', - 'Name' => 'transport_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '5453' => { - 'Header' => 'gnutls_int.h', - 'Line' => '151', - 'Memb' => { - '0' => { - 'name' => 'RECORD_FLUSH', - 'value' => '0' - }, - '1' => { - 'name' => 'RECORD_CORKED', - 'value' => '1' - } - }, - 'Name' => 'enum record_flush_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '5482' => { - 'BaseType' => '5453', - 'Header' => 'gnutls_int.h', - 'Line' => '154', - 'Name' => 'record_flush_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '5493' => { - 'BaseType' => '152', - 'Header' => 'crypto-backend.h', - 'Line' => '84', - 'Name' => 'bigint_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '56' => { - 'Name' => 'unsigned long', - 'Size' => '8', - 'Type' => 'Intrinsic' - }, - '63' => { - 'Name' => 'unsigned char', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '6341' => { - 'BaseType' => '5493', - 'Name' => 'bigint_t[16]', - 'Size' => '128', - 'Type' => 'Array' - }, - '6357' => { - 'Header' => 'crypto-backend.h', - 'Line' => '177', - 'Memb' => { - '0' => { - 'name' => 'params', - 'offset' => '0', - 'type' => '6341' - }, - '1' => { - 'name' => 'params_nr', - 'offset' => '128', - 'type' => '77' - }, - '2' => { - 'name' => 'flags', - 'offset' => '132', - 'type' => '77' - }, - '3' => { - 'name' => 'algo', - 'offset' => '136', - 'type' => '2802' - } - }, - 'Name' => 'struct gnutls_pk_params_st', - 'Size' => '144', - 'Type' => 'Struct' - }, - '6368' => { - 'Header' => 'gnutls_int.h', - 'Line' => '220', - 'Memb' => { - '0' => { - 'name' => 'STATE0', - 'value' => '0' - }, - '1' => { - 'name' => 'STATE1', - 'value' => '1' - }, - '10' => { - 'name' => 'STATE10', - 'value' => '10' - }, - '11' => { - 'name' => 'STATE11', - 'value' => '11' - }, - '12' => { - 'name' => 'STATE12', - 'value' => '12' - }, - '13' => { - 'name' => 'STATE13', - 'value' => '13' - }, - '14' => { - 'name' => 'STATE14', - 'value' => '14' - }, - '15' => { - 'name' => 'STATE15', - 'value' => '15' - }, - '16' => { - 'name' => 'STATE16', - 'value' => '16' - }, - '17' => { - 'name' => 'STATE17', - 'value' => '17' - }, - '18' => { - 'name' => 'STATE18', - 'value' => '18' - }, - '19' => { - 'name' => 'STATE20', - 'value' => '20' - }, - '2' => { - 'name' => 'STATE2', - 'value' => '2' - }, - '20' => { - 'name' => 'STATE21', - 'value' => '21' - }, - '21' => { - 'name' => 'STATE22', - 'value' => '22' - }, - '22' => { - 'name' => 'STATE30', - 'value' => '30' - }, - '23' => { - 'name' => 'STATE31', - 'value' => '31' - }, - '24' => { - 'name' => 'STATE40', - 'value' => '40' - }, - '25' => { - 'name' => 'STATE41', - 'value' => '41' - }, - '26' => { - 'name' => 'STATE50', - 'value' => '50' - }, - '27' => { - 'name' => 'STATE60', - 'value' => '60' - }, - '28' => { - 'name' => 'STATE61', - 'value' => '61' - }, - '29' => { - 'name' => 'STATE62', - 'value' => '62' - }, - '3' => { - 'name' => 'STATE3', - 'value' => '3' - }, - '4' => { - 'name' => 'STATE4', - 'value' => '4' - }, - '5' => { - 'name' => 'STATE5', - 'value' => '5' - }, - '6' => { - 'name' => 'STATE6', - 'value' => '6' - }, - '7' => { - 'name' => 'STATE7', - 'value' => '7' - }, - '8' => { - 'name' => 'STATE8', - 'value' => '8' - }, - '9' => { - 'name' => 'STATE9', - 'value' => '9' - } - }, - 'Name' => 'enum handshake_state_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '6565' => { - 'BaseType' => '6368', - 'Header' => 'gnutls_int.h', - 'Line' => '227', - 'Name' => 'handshake_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '6576' => { - 'Header' => 'gnutls_int.h', - 'Line' => '229', - 'Memb' => { - '0' => { - 'name' => 'SHB_SEND1', - 'value' => '0' - }, - '1' => { - 'name' => 'SHB_SEND2', - 'value' => '1' - }, - '2' => { - 'name' => 'SHB_RECV', - 'value' => '2' - } - }, - 'Name' => 'enum heartbeat_state_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '6611' => { - 'BaseType' => '6576', - 'Header' => 'gnutls_int.h', - 'Line' => '233', - 'Name' => 'heartbeat_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '6622' => { - 'Header' => 'gnutls_int.h', - 'Line' => '235', - 'Memb' => { - '0' => { - 'name' => 'RECV_STATE_0', - 'value' => '0' - }, - '1' => { - 'name' => 'RECV_STATE_DTLS_RETRANSMIT', - 'value' => '1' - } - }, - 'Name' => 'enum recv_state_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '6651' => { - 'BaseType' => '6622', - 'Header' => 'gnutls_int.h', - 'Line' => '238', - 'Name' => 'recv_state_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '6662' => { - 'BaseType' => '805', - 'Name' => 'uint8_t*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '6668' => { - 'BaseType' => '4449', - 'Header' => 'gnutls_str.h', - 'Line' => '42', - 'Name' => 'gnutls_buffer_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '6711' => { - 'Header' => 'gnutls_int.h', - 'Line' => '268', - 'Memb' => { - '0' => { - 'name' => 'CIPHER_STREAM', - 'value' => '0' - }, - '1' => { - 'name' => 'CIPHER_BLOCK', - 'value' => '1' - }, - '2' => { - 'name' => 'CIPHER_AEAD', - 'value' => '2' - } - }, - 'Name' => 'enum cipher_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '6723' => { - 'Header' => 'gnutls_int.h', - 'Line' => '274', - 'Memb' => { - '0' => { - 'name' => 'GNUTLS_CHANGE_CIPHER_SPEC', - 'value' => '20' - }, - '1' => { - 'name' => 'GNUTLS_ALERT', - 'value' => '21' - }, - '2' => { - 'name' => 'GNUTLS_HANDSHAKE', - 'value' => '22' - }, - '3' => { - 'name' => 'GNUTLS_APPLICATION_DATA', - 'value' => '23' - }, - '4' => { - 'name' => 'GNUTLS_HEARTBEAT', - 'value' => '24' - } - }, - 'Name' => 'enum content_type_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '6771' => { - 'BaseType' => '6723', - 'Header' => 'gnutls_int.h', - 'Line' => '278', - 'Name' => 'content_type_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '679' => { - 'BaseType' => '685', - 'Name' => 'char const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '685' => { - 'BaseType' => '182', - 'Name' => 'char const', - 'Size' => '1', - 'Type' => 'Const' - }, - '6897' => { - 'BaseType' => '805', - 'Name' => 'uint8_t[12]', - 'Size' => '12', - 'Type' => 'Array' - }, - '690' => { - 'BaseType' => '154', - 'Header' => 'stdio.h', - 'Line' => '102', - 'Name' => 'ssize_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '6913' => { - 'Header' => 'gnutls_int.h', - 'Line' => '308', - 'Memb' => { - '0' => { - 'name' => 'htype', - 'offset' => '0', - 'type' => '2572' - }, - '1' => { - 'name' => 'length', - 'offset' => '4', - 'type' => '827' - }, - '2' => { - 'name' => 'sequence', - 'offset' => '8', - 'type' => '816' - }, - '3' => { - 'name' => 'start_offset', - 'offset' => '12', - 'type' => '827' - }, - '4' => { - 'name' => 'end_offset', - 'offset' => '16', - 'type' => '827' - }, - '5' => { - 'name' => 'header', - 'offset' => '20', - 'type' => '6897' - }, - '6' => { - 'name' => 'header_size', - 'offset' => '32', - 'type' => '98' - }, - '7' => { - 'name' => 'data', - 'offset' => '40', - 'type' => '6668' - } - }, - 'Name' => 'struct handshake_buffer_st', - 'Size' => '72', - 'Type' => 'Struct' - }, - '6925' => { - 'BaseType' => '3664', - 'Header' => 'gnutls_int.h', - 'Line' => '349', - 'Name' => 'mbuffer_st', - 'Size' => '80', - 'Type' => 'Typedef' - }, - '6937' => { - 'Header' => 'gnutls_int.h', - 'Line' => '351', - 'Memb' => { - '0' => { - 'name' => 'head', - 'offset' => '0', - 'type' => '7003' - }, - '1' => { - 'name' => 'tail', - 'offset' => '8', - 'type' => '7003' - }, - '2' => { - 'name' => 'length', - 'offset' => '16', - 'type' => '77' - }, - '3' => { - 'name' => 'byte_length', - 'offset' => '24', - 'type' => '45' - } - }, - 'Name' => 'struct mbuffer_head_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '70' => { - 'Name' => 'unsigned short', - 'Size' => '2', - 'Type' => 'Intrinsic' - }, - '7003' => { - 'BaseType' => '6925', - 'Name' => 'mbuffer_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7009' => { - 'BaseType' => '6937', - 'Header' => 'gnutls_int.h', - 'Line' => '357', - 'Name' => 'mbuffer_head_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '7021' => { - 'Header' => 'gnutls_int.h', - 'Line' => '362', - 'Memb' => { - '0' => { - 'name' => 'algorithm', - 'offset' => '0', - 'type' => '2223' - }, - '1' => { - 'name' => 'credentials', - 'offset' => '8', - 'type' => '152' - }, - '2' => { - 'name' => 'next', - 'offset' => '16', - 'type' => '7414' - } - }, - 'Name' => 'struct auth_cred_st', - 'Size' => '24', - 'Type' => 'Struct' - }, - '7080' => { - 'BaseType' => '7021', - 'Header' => 'gnutls_int.h', - 'Line' => '369', - 'Name' => 'auth_cred_st', - 'Size' => '24', - 'Type' => 'Typedef' - }, - '7092' => { - 'Header' => 'gnutls_int.h', - 'Line' => '371', - 'Memb' => { - '0' => { - 'name' => 'ecdh_params', - 'offset' => '0', - 'type' => '6357' - }, - '1' => { - 'name' => 'ecdh_x', - 'offset' => '144', - 'type' => '5493' - }, - '10' => { - 'name' => 'B', - 'offset' => '360', - 'type' => '5493' - }, - '11' => { - 'name' => 'u', - 'offset' => '368', - 'type' => '5493' - }, - '12' => { - 'name' => 'b', - 'offset' => '376', - 'type' => '5493' - }, - '13' => { - 'name' => 'a', - 'offset' => '384', - 'type' => '5493' - }, - '14' => { - 'name' => 'x', - 'offset' => '392', - 'type' => '5493' - }, - '15' => { - 'name' => 'rsa', - 'offset' => '400', - 'type' => '7398' - }, - '16' => { - 'name' => 'auth_info', - 'offset' => '416', - 'type' => '152' - }, - '17' => { - 'name' => 'auth_info_type', - 'offset' => '424', - 'type' => '2223' - }, - '18' => { - 'name' => 'auth_info_size', - 'offset' => '428', - 'type' => '98' - }, - '19' => { - 'name' => 'crypt_algo', - 'offset' => '432', - 'type' => '805' - }, - '2' => { - 'name' => 'ecdh_y', - 'offset' => '152', - 'type' => '5493' - }, - '20' => { - 'name' => 'cred', - 'offset' => '440', - 'type' => '7414' - }, - '21' => { - 'name' => 'crt_requested', - 'offset' => '448', - 'type' => '98' - }, - '3' => { - 'name' => 'key', - 'offset' => '160', - 'type' => '3646' - }, - '4' => { - 'name' => 'dh_params', - 'offset' => '176', - 'type' => '6357' - }, - '5' => { - 'name' => 'client_Y', - 'offset' => '320', - 'type' => '5493' - }, - '6' => { - 'name' => 'srp_key', - 'offset' => '328', - 'type' => '5493' - }, - '7' => { - 'name' => 'srp_g', - 'offset' => '336', - 'type' => '5493' - }, - '8' => { - 'name' => 'srp_p', - 'offset' => '344', - 'type' => '5493' - }, - '9' => { - 'name' => 'A', - 'offset' => '352', - 'type' => '5493' - } - }, - 'Name' => 'struct gnutls_key_st', - 'Size' => '456', - 'Type' => 'Struct' - }, - '715' => { - 'BaseType' => '141', - 'Header' => 'time.h', - 'Line' => '75', - 'Name' => 'time_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '726' => { - 'BaseType' => '91', - 'Header' => 'types.h', - 'Line' => '195', - 'Name' => 'int16_t', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '737' => { - 'Header' => 'time.h', - 'Line' => '120', - 'Memb' => { - '0' => { - 'name' => 'tv_sec', - 'offset' => '0', - 'type' => '141' - }, - '1' => { - 'name' => 'tv_nsec', - 'offset' => '8', - 'type' => '165' - } - }, - 'Name' => 'struct timespec', - 'Size' => '16', - 'Type' => 'Struct' - }, - '7398' => { - 'BaseType' => '5493', - 'Name' => 'bigint_t[2]', - 'Size' => '16', - 'Type' => 'Array' - }, - '7414' => { - 'BaseType' => '7080', - 'Name' => 'auth_cred_st*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7420' => { - 'BaseType' => '7092', - 'Header' => 'gnutls_int.h', - 'Line' => '422', - 'Name' => 'gnutls_key_st', - 'Size' => '456', - 'Type' => 'Typedef' - }, - '7432' => { - 'BaseType' => '7444', - 'Header' => 'gnutls_int.h', - 'Line' => '430', - 'Name' => 'record_state_st', - 'Size' => '224', - 'Type' => 'Typedef' - }, - '7444' => { - 'Header' => 'gnutls_int.h', - 'Line' => '591', - 'Memb' => { - '0' => { - 'name' => 'mac_secret', - 'offset' => '0', - 'type' => '3646' - }, - '1' => { - 'name' => 'IV', - 'offset' => '16', - 'type' => '3646' - }, - '2' => { - 'name' => 'key', - 'offset' => '32', - 'type' => '3646' - }, - '3' => { - 'name' => 'cipher_state', - 'offset' => '48', - 'type' => '8853' - }, - '4' => { - 'name' => 'compression_state', - 'offset' => '200', - 'type' => '8901' - }, - '5' => { - 'name' => 'sequence_number', - 'offset' => '216', - 'type' => '5354' - } - }, - 'Name' => 'struct record_state_st', - 'Size' => '224', - 'Type' => 'Struct' - }, - '7535' => { - 'BaseType' => '7547', - 'Header' => 'gnutls_int.h', - 'Line' => '433', - 'Name' => 'record_parameters_st', - 'Size' => '1016', - 'Type' => 'Typedef' - }, - '7547' => { - 'Header' => 'gnutls_int.h', - 'Line' => '609', - 'Memb' => { - '0' => { - 'name' => 'epoch', - 'offset' => '0', - 'type' => '816' - }, - '1' => { - 'name' => 'initialized', - 'offset' => '4', - 'type' => '98' - }, - '10' => { - 'name' => 'write', - 'offset' => '784', - 'type' => '7432' - }, - '11' => { - 'name' => 'send_nonce', - 'offset' => '1008', - 'type' => '77' - }, - '12' => { - 'name' => 'usage_cnt', - 'offset' => '1012', - 'type' => '98' - }, - '2' => { - 'name' => 'compression_algorithm', - 'offset' => '8', - 'type' => '2449' - }, - '3' => { - 'name' => 'cipher', - 'offset' => '16', - 'type' => '8695' - }, - '4' => { - 'name' => 'etm', - 'offset' => '24', - 'type' => '8202' - }, - '5' => { - 'name' => 'mac', - 'offset' => '32', - 'type' => '8356' - }, - '6' => { - 'name' => 'record_sw', - 'offset' => '40', - 'type' => '9302' - }, - '7' => { - 'name' => 'record_sw_head_idx', - 'offset' => '552', - 'type' => '77' - }, - '8' => { - 'name' => 'record_sw_size', - 'offset' => '556', - 'type' => '77' - }, - '9' => { - 'name' => 'read', - 'offset' => '560', - 'type' => '7432' - } - }, - 'Name' => 'struct record_parameters_st', - 'Size' => '1016', - 'Type' => 'Struct' - }, - '77' => { - 'Name' => 'unsigned int', - 'Size' => '4', - 'Type' => 'Intrinsic' - }, - '7737' => { - 'Header' => 'gnutls_int.h', - 'Line' => '436', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '679' - }, - '1' => { - 'name' => 'id', - 'offset' => '8', - 'type' => '2049' - }, - '2' => { - 'name' => 'blocksize', - 'offset' => '12', - 'type' => '816' - }, - '3' => { - 'name' => 'keysize', - 'offset' => '14', - 'type' => '816' - }, - '4' => { - 'name' => 'type', - 'offset' => '16', - 'type' => '6711' - }, - '5' => { - 'name' => 'implicit_iv', - 'offset' => '20', - 'type' => '816' - }, - '6' => { - 'name' => 'explicit_iv', - 'offset' => '22', - 'type' => '816' - }, - '7' => { - 'name' => 'cipher_iv', - 'offset' => '24', - 'type' => '816' - }, - '8' => { - 'name' => 'tagsize', - 'offset' => '26', - 'type' => '816' - } - }, - 'Name' => 'struct cipher_entry_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '781' => { - 'BaseType' => '98', - 'Name' => 'int*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7867' => { - 'BaseType' => '7737', - 'Header' => 'gnutls_int.h', - 'Line' => '446', - 'Name' => 'cipher_entry_st', - 'Size' => '32', - 'Type' => 'Typedef' - }, - '787' => { - 'BaseType' => '793', - 'Name' => 'int const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '7879' => { - 'BaseType' => '805', - 'Name' => 'uint8_t[2]', - 'Size' => '2', - 'Type' => 'Array' - }, - '7895' => { - 'Header' => 'gnutls_int.h', - 'Line' => '469', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '679' - }, - '1' => { - 'name' => 'oid', - 'offset' => '8', - 'type' => '679' - }, - '2' => { - 'name' => 'id', - 'offset' => '16', - 'type' => '2325' - }, - '3' => { - 'name' => 'output_size', - 'offset' => '20', - 'type' => '77' - }, - '4' => { - 'name' => 'key_size', - 'offset' => '24', - 'type' => '77' - }, - '5' => { - 'name' => 'nonce_size', - 'offset' => '28', - 'type' => '77' - }, - '6' => { - 'name' => 'placeholder', - 'offset' => '32', - 'type' => '77' - }, - '7' => { - 'name' => 'secure', - 'offset' => '36', - 'type' => '77' - }, - '8' => { - 'name' => 'block_size', - 'offset' => '40', - 'type' => '77' - } - }, - 'Name' => 'struct mac_entry_st', - 'Size' => '48', - 'Type' => 'Struct' - }, - '793' => { - 'BaseType' => '98', - 'Name' => 'int const', - 'Size' => '4', - 'Type' => 'Const' - }, - '798' => { - 'BaseType' => '804', - 'Name' => 'void const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8025' => { - 'BaseType' => '7895', - 'Header' => 'gnutls_int.h', - 'Line' => '479', - 'Name' => 'mac_entry_st', - 'Size' => '48', - 'Type' => 'Typedef' - }, - '804' => { - 'BaseType' => '1', - 'Name' => 'void const', - 'Type' => 'Const' - }, - '805' => { - 'BaseType' => '63', - 'Header' => 'stdint.h', - 'Line' => '48', - 'Name' => 'uint8_t', - 'Size' => '1', - 'Type' => 'Typedef' - }, - '816' => { - 'BaseType' => '70', - 'Header' => 'stdint.h', - 'Line' => '49', - 'Name' => 'uint16_t', - 'Size' => '2', - 'Type' => 'Typedef' - }, - '8202' => { - 'Name' => '_Bool', - 'Size' => '1', - 'Type' => 'Intrinsic' - }, - '8209' => { - 'Header' => 'gnutls_int.h', - 'Line' => '494', - 'Memb' => { - '0' => { - 'name' => 'name', - 'offset' => '0', - 'type' => '679' - }, - '1' => { - 'name' => 'id', - 'offset' => '8', - 'type' => '2670' - }, - '10' => { - 'name' => 'selectable_prf', - 'offset' => '28', - 'type' => '8202' - }, - '11' => { - 'name' => 'obsolete', - 'offset' => '29', - 'type' => '8202' - }, - '2' => { - 'name' => 'age', - 'offset' => '12', - 'type' => '77' - }, - '3' => { - 'name' => 'major', - 'offset' => '16', - 'type' => '805' - }, - '4' => { - 'name' => 'minor', - 'offset' => '17', - 'type' => '805' - }, - '5' => { - 'name' => 'transport', - 'offset' => '20', - 'type' => '5442' - }, - '6' => { - 'name' => 'supported', - 'offset' => '24', - 'type' => '8202' - }, - '7' => { - 'name' => 'explicit_iv', - 'offset' => '25', - 'type' => '8202' - }, - '8' => { - 'name' => 'extensions', - 'offset' => '26', - 'type' => '8202' - }, - '9' => { - 'name' => 'selectable_sighash', - 'offset' => '27', - 'type' => '8202' - } - }, - 'Name' => 'struct version_entry_st', - 'Size' => '32', - 'Type' => 'Struct' - }, - '8221' => { - 'BaseType' => '5139', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '39', - 'Name' => 'hash_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8232' => { - 'BaseType' => '5139', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '40', - 'Name' => 'nonce_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8243' => { - 'BaseType' => '5304', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '41', - 'Name' => 'output_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8254' => { - 'BaseType' => '4173', - 'Header' => 'gnutls_hash_int.h', - 'Line' => '43', - 'Name' => 'hash_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '827' => { - 'BaseType' => '77', - 'Header' => 'stdint.h', - 'Line' => '51', - 'Name' => 'uint32_t', - 'Size' => '4', - 'Type' => 'Typedef' - }, - '8356' => { - 'BaseType' => '8362', - 'Name' => 'mac_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8362' => { - 'BaseType' => '8025', - 'Name' => 'mac_entry_st const', - 'Size' => '48', - 'Type' => 'Const' - }, - '8367' => { - 'Header' => 'gnutls_hash_int.h', - 'Line' => '55', - 'Memb' => { - '0' => { - 'name' => 'e', - 'offset' => '0', - 'type' => '8356' - }, - '1' => { - 'name' => 'hash', - 'offset' => '8', - 'type' => '8221' - }, - '2' => { - 'name' => 'output', - 'offset' => '16', - 'type' => '8243' - }, - '3' => { - 'name' => 'deinit', - 'offset' => '24', - 'type' => '8254' - }, - '4' => { - 'name' => 'key', - 'offset' => '32', - 'type' => '798' - }, - '5' => { - 'name' => 'keysize', - 'offset' => '40', - 'type' => '98' - }, - '6' => { - 'name' => 'handle', - 'offset' => '48', - 'type' => '152' - } - }, - 'Name' => 'struct digest_hd_st', - 'Size' => '56', - 'Type' => 'Struct' - }, - '838' => { - 'BaseType' => '56', - 'Header' => 'stdint.h', - 'Line' => '55', - 'Name' => 'uint64_t', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8469' => { - 'Header' => 'gnutls_hash_int.h', - 'Line' => '67', - 'Memb' => { - '0' => { - 'name' => 'e', - 'offset' => '0', - 'type' => '8356' - }, - '1' => { - 'name' => 'mac_len', - 'offset' => '8', - 'type' => '98' - }, - '2' => { - 'name' => 'hash', - 'offset' => '16', - 'type' => '8221' - }, - '3' => { - 'name' => 'setnonce', - 'offset' => '24', - 'type' => '8232' - }, - '4' => { - 'name' => 'output', - 'offset' => '32', - 'type' => '8243' - }, - '5' => { - 'name' => 'deinit', - 'offset' => '40', - 'type' => '8254' - }, - '6' => { - 'name' => 'handle', - 'offset' => '48', - 'type' => '152' - } - }, - 'Name' => 'struct mac_hd_st', - 'Size' => '56', - 'Type' => 'Struct' - }, - '8480' => { - 'BaseType' => '5170', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '33', - 'Name' => 'cipher_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8491' => { - 'BaseType' => '5170', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '35', - 'Name' => 'cipher_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8502' => { - 'BaseType' => '5238', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '37', - 'Name' => 'aead_cipher_encrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8513' => { - 'BaseType' => '5238', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '43', - 'Name' => 'aead_cipher_decrypt_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8524' => { - 'BaseType' => '4173', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '49', - 'Name' => 'cipher_deinit_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8535' => { - 'BaseType' => '5139', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '51', - 'Name' => 'cipher_auth_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8546' => { - 'BaseType' => '5139', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '52', - 'Name' => 'cipher_setiv_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8557' => { - 'BaseType' => '5211', - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '54', - 'Name' => 'cipher_tag_func', - 'Size' => '8', - 'Type' => 'Typedef' - }, - '8695' => { - 'BaseType' => '8701', - 'Name' => 'cipher_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '8701' => { - 'BaseType' => '7867', - 'Name' => 'cipher_entry_st const', - 'Size' => '32', - 'Type' => 'Const' - }, - '8706' => { - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '67', - 'Memb' => { - '0' => { - 'name' => 'handle', - 'offset' => '0', - 'type' => '152' - }, - '1' => { - 'name' => 'e', - 'offset' => '8', - 'type' => '8695' - }, - '2' => { - 'name' => 'encrypt', - 'offset' => '16', - 'type' => '8480' - }, - '3' => { - 'name' => 'decrypt', - 'offset' => '24', - 'type' => '8491' - }, - '4' => { - 'name' => 'aead_encrypt', - 'offset' => '32', - 'type' => '8502' - }, - '5' => { - 'name' => 'aead_decrypt', - 'offset' => '40', - 'type' => '8513' - }, - '6' => { - 'name' => 'auth', - 'offset' => '48', - 'type' => '8535' - }, - '7' => { - 'name' => 'tag', - 'offset' => '56', - 'type' => '8557' - }, - '8' => { - 'name' => 'setiv', - 'offset' => '64', - 'type' => '8546' - }, - '9' => { - 'name' => 'deinit', - 'offset' => '72', - 'type' => '8524' - } - }, - 'Name' => 'struct cipher_hd_st', - 'Size' => '80', - 'Type' => 'Struct' - }, - '8717' => { - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '191', - 'Memb' => { - '0' => { - 'name' => 'dig', - 'offset' => '0', - 'type' => '8367' - }, - '1' => { - 'name' => 'mac', - 'offset' => '0', - 'type' => '8469' - } - }, - 'Name' => 'anon-union-gnutls_cipher_int.h-191', - 'Size' => '56', - 'Type' => 'Union' - }, - '8853' => { - 'Header' => 'gnutls_cipher_int.h', - 'Line' => '200', - 'Memb' => { - '0' => { - 'name' => 'cipher', - 'offset' => '0', - 'type' => '8706' - }, - '1' => { - 'name' => 'mac', - 'offset' => '80', - 'type' => '8717' - }, - '2' => { - 'bitfield' => '1', - 'name' => 'is_mac', - 'offset' => '136', - 'type' => '77' - }, - '3' => { - 'bitfield' => '1', - 'name' => 'ssl_hmac', - 'offset' => '136', - 'type' => '77' - }, - '4' => { - 'bitfield' => '1', - 'name' => 'non_null', - 'offset' => '136', - 'type' => '77' - }, - '5' => { - 'bitfield' => '1', - 'name' => 'etm', - 'offset' => '136', - 'type' => '77' - }, - '6' => { - 'name' => 'tag_size', - 'offset' => '144', - 'type' => '45' - } - }, - 'Name' => 'struct auth_cipher_hd_st', - 'Size' => '152', - 'Type' => 'Struct' - }, - '8864' => { - 'Header' => 'gnutls_compress.h', - 'Line' => '38', - 'Memb' => { - '0' => { - 'name' => 'handle', - 'offset' => '0', - 'type' => '152' - }, - '1' => { - 'name' => 'algo', - 'offset' => '8', - 'type' => '2449' - } - }, - 'Name' => 'struct comp_hd_st', - 'Size' => '16', - 'Type' => 'Struct' - }, - '8901' => { - 'BaseType' => '8864', - 'Header' => 'gnutls_compress.h', - 'Line' => '41', - 'Name' => 'comp_hd_st', - 'Size' => '16', - 'Type' => 'Typedef' - }, - '91' => { - 'Name' => 'short', - 'Size' => '2', - 'Type' => 'Intrinsic' - }, - '9247' => { - 'BaseType' => '805', - 'Name' => 'uint8_t[48]', - 'Size' => '48', - 'Type' => 'Array' - }, - '9263' => { - 'BaseType' => '805', - 'Name' => 'uint8_t[32]', - 'Size' => '32', - 'Type' => 'Array' - }, - '9279' => { - 'BaseType' => '9285', - 'Name' => 'version_entry_st const*', - 'Size' => '8', - 'Type' => 'Pointer' - }, - '9285' => { - 'BaseType' => '8209', - 'Name' => 'version_entry_st const', - 'Size' => '32', - 'Type' => 'Const' - }, - '9290' => { - 'Header' => 'gnutls_int.h', - 'Line' => '589', - 'Memb' => { - '0' => { - 'name' => 'entity', - 'offset' => '0', - 'type' => '77' - }, - '1' => { - 'name' => 'kx_algorithm', - 'offset' => '4', - 'type' => '2169' - }, - '10' => { - 'name' => 'server_random', - 'offset' => '104', - 'type' => '9263' - }, - '11' => { - 'name' => 'session_id', - 'offset' => '136', - 'type' => '9263' - }, - '12' => { - 'name' => 'session_id_size', - 'offset' => '168', - 'type' => '805' - }, - '13' => { - 'name' => 'timestamp', - 'offset' => '176', - 'type' => '715' - }, - '14' => { - 'name' => 'max_record_send_size', - 'offset' => '184', - 'type' => '816' - }, - '15' => { - 'name' => 'max_record_recv_size', - 'offset' => '186', - 'type' => '816' - }, - '16' => { - 'name' => 'cert_type', - 'offset' => '188', - 'type' => '2720' - }, - '17' => { - 'name' => 'ecc_curve', - 'offset' => '192', - 'type' => '3016' - }, - '18' => { - 'name' => 'server_sign_algo', - 'offset' => '196', - 'type' => '2954' - }, - '19' => { - 'name' => 'client_sign_algo', - 'offset' => '200', - 'type' => '2954' - }, - '2' => { - 'name' => 'epoch_read', - 'offset' => '8', - 'type' => '816' - }, - '20' => { - 'name' => 'ext_master_secret', - 'offset' => '204', - 'type' => '805' - }, - '21' => { - 'name' => 'etm', - 'offset' => '205', - 'type' => '805' - }, - '22' => { - 'name' => 'do_recv_supplemental', - 'offset' => '208', - 'type' => '98' - }, - '23' => { - 'name' => 'do_send_supplemental', - 'offset' => '212', - 'type' => '98' - }, - '24' => { - 'name' => 'pversion', - 'offset' => '216', - 'type' => '9279' - }, - '3' => { - 'name' => 'epoch_write', - 'offset' => '10', - 'type' => '816' - }, - '4' => { - 'name' => 'epoch_next', - 'offset' => '12', - 'type' => '816' - }, - '5' => { - 'name' => 'epoch_min', - 'offset' => '14', - 'type' => '816' - }, - '6' => { - 'name' => 'cipher_suite', - 'offset' => '16', - 'type' => '7879' - }, - '7' => { - 'name' => 'compression_method', - 'offset' => '20', - 'type' => '2449' - }, - '8' => { - 'name' => 'master_secret', - 'offset' => '24', - 'type' => '9247' - }, - '9' => { - 'name' => 'client_random', - 'offset' => '72', - 'type' => '9263' - } - }, - 'Name' => 'struct security_parameters_st', - 'Size' => '224', - 'Type' => 'Struct' - }, - '9302' => { - 'BaseType' => '838', - 'Name' => 'uint64_t[64]', - 'Size' => '512', - 'Type' => 'Array' - }, - '9354' => { - 'BaseType' => '77', - 'Name' => 'unsigned int[32]', - 'Size' => '128', - 'Type' => 'Array' - }, - '9370' => { - 'Header' => 'gnutls_int.h', - 'Line' => '638', - 'Memb' => { - '0' => { - 'name' => 'priority', - 'offset' => '0', - 'type' => '9354' - }, - '1' => { - 'name' => 'algorithms', - 'offset' => '128', - 'type' => '77' - } - }, - 'Name' => 'struct priority_st', - 'Size' => '132', - 'Type' => 'Struct' - }, - '9420' => { - 'Header' => 'gnutls_int.h', - 'Line' => '645', - 'Memb' => { - '0' => { - 'name' => 'SR_DISABLED', - 'value' => '0' - }, - '1' => { - 'name' => 'SR_UNSAFE', - 'value' => '1' - }, - '2' => { - 'name' => 'SR_PARTIAL', - 'value' => '2' - }, - '3' => { - 'name' => 'SR_SAFE', - 'value' => '3' - } - }, - 'Name' => 'enum safe_renegotiation_t', - 'Size' => '4', - 'Type' => 'Enum' - }, - '9468' => { - 'Header' => 'gnutls_int.h', - 'Line' => '707', - 'Memb' => { - '0' => { - 'name' => 'dh_params', - 'offset' => '0', - 'type' => '3213' - }, - '1' => { - 'name' => 'free_dh_params', - 'offset' => '8', - 'type' => '98' - } - }, - 'Name' => 'struct internal_params_st', - 'Size' => '16', - 'Type' => 'Struct' - }, - '9698' => { - 'Header' => 'gnutls_int.h', - 'Line' => '751', - 'Memb' => { - '0' => { - 'name' => 'cookie', - 'offset' => '0', - 'type' => '9263' - }, - '1' => { - 'name' => 'cookie_len', - 'offset' => '32', - 'type' => '805' - }, - '10' => { - 'name' => 'blocking', - 'offset' => '56', - 'type' => '8202' - }, - '11' => { - 'name' => 'handshake_start_time', - 'offset' => '64', - 'type' => '737' - }, - '12' => { - 'name' => 'actual_retrans_timeout_ms', - 'offset' => '80', - 'type' => '77' - }, - '13' => { - 'name' => 'async_term', - 'offset' => '88', - 'type' => '715' - }, - '14' => { - 'name' => 'last_retransmit', - 'offset' => '96', - 'type' => '737' - }, - '15' => { - 'name' => 'packets_dropped', - 'offset' => '112', - 'type' => '77' - }, - '2' => { - 'name' => 'hsk_write_seq', - 'offset' => '34', - 'type' => '816' - }, - '3' => { - 'name' => 'hsk_read_seq', - 'offset' => '36', - 'type' => '77' - }, - '4' => { - 'name' => 'mtu', - 'offset' => '40', - 'type' => '816' - }, - '5' => { - 'name' => 'flight_init', - 'offset' => '42', - 'type' => '8202' - }, - '6' => { - 'name' => 'last_flight', - 'offset' => '43', - 'type' => '8202' - }, - '7' => { - 'name' => 'retrans_timeout_ms', - 'offset' => '44', - 'type' => '77' - }, - '8' => { - 'name' => 'total_timeout_ms', - 'offset' => '48', - 'type' => '77' - }, - '9' => { - 'name' => 'hsk_hello_verify_requests', - 'offset' => '52', - 'type' => '77' - } - }, - 'Name' => 'struct dtls_st', - 'Size' => '120', - 'Type' => 'Struct' - }, - '9710' => { - 'Header' => 'gnutls_int.h', - 'Line' => '948', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '816' - }, - '1' => { - 'name' => 'priv', - 'offset' => '8', - 'type' => '4510' - }, - '2' => { - 'name' => 'set', - 'offset' => '16', - 'type' => '8202' - } - }, - 'Name' => 'anon-struct-gnutls_int.h-948', - 'Size' => '24', - 'Type' => 'Struct' - }, - '9759' => { - 'Header' => 'gnutls_int.h', - 'Line' => '954', - 'Memb' => { - '0' => { - 'name' => 'type', - 'offset' => '0', - 'type' => '816' - }, - '1' => { - 'name' => 'priv', - 'offset' => '8', - 'type' => '4510' - }, - '2' => { - 'name' => 'set', - 'offset' => '16', - 'type' => '8202' - } - }, - 'Name' => 'anon-struct-gnutls_int.h-954', - 'Size' => '24', - 'Type' => 'Struct' - }, - '98' => { - 'Name' => 'int', - 'Size' => '4', - 'Type' => 'Intrinsic' - } - }, - 'UndefinedSymbols' => { - 'libgnutls-dane.so.0.4.1' => { - '_ITM_deregisterTMCloneTable' => 0, - '_ITM_registerTMCloneTable' => 0, - '_Jv_RegisterClasses' => 0, - '__cxa_finalize@GLIBC_2.2.5' => 0, - '__errno_location@GLIBC_2.2.5' => 0, - '__fxstat@GLIBC_2.2.5' => 0, - '__gmon_start__' => 0, - '_gnutls_buffer_append_str@GNUTLS_PRIVATE' => 0, - '_gnutls_buffer_init@GNUTLS_PRIVATE' => 0, - '_gnutls_buffer_to_datum@GNUTLS_PRIVATE' => 0, - 'abort@GLIBC_2.2.5' => 0, - 'calloc@GLIBC_2.2.5' => 0, - 'dcgettext@GLIBC_2.2.5' => 0, - 'fclose@GLIBC_2.2.5' => 0, - 'ferror@GLIBC_2.2.5' => 0, - 'fileno@GLIBC_2.2.5' => 0, - 'fopen@GLIBC_2.2.5' => 0, - 'fread@GLIBC_2.2.5' => 0, - 'free@GLIBC_2.2.5' => 0, - 'ftello@GLIBC_2.2.5' => 0, - 'gnutls_calloc@GNUTLS_3_4' => 0, - 'gnutls_certificate_get_issuer@GNUTLS_3_4' => 0, - 'gnutls_certificate_get_peers@GNUTLS_3_4' => 0, - 'gnutls_certificate_type_get@GNUTLS_3_4' => 0, - 'gnutls_credentials_get@GNUTLS_3_4' => 0, - 'gnutls_free@GNUTLS_3_4' => 0, - 'gnutls_hash_fast@GNUTLS_3_4' => 0, - 'gnutls_pubkey_deinit@GNUTLS_3_4' => 0, - 'gnutls_pubkey_export2@GNUTLS_3_4' => 0, - 'gnutls_pubkey_import_x509@GNUTLS_3_4' => 0, - 'gnutls_pubkey_init@GNUTLS_3_4' => 0, - 'gnutls_x509_crt_check_issuer@GNUTLS_3_4' => 0, - 'gnutls_x509_crt_deinit@GNUTLS_3_4' => 0, - 'gnutls_x509_crt_export2@GNUTLS_3_4' => 0, - 'gnutls_x509_crt_import@GNUTLS_3_4' => 0, - 'gnutls_x509_crt_init@GNUTLS_3_4' => 0, - 'gnutls_x509_crt_verify@GNUTLS_3_4' => 0, - 'malloc@GLIBC_2.2.5' => 0, - 'memchr@GLIBC_2.2.5' => 0, - 'memcmp@GLIBC_2.2.5' => 0, - 'memcpy@GLIBC_2.14' => 0, - 'realloc@GLIBC_2.2.5' => 0, - 'snprintf@GLIBC_2.2.5' => 0, - 'stderr@GLIBC_2.2.5' => 0, - 'ub_ctx_add_ta_file' => 0, - 'ub_ctx_create' => 0, - 'ub_ctx_debugout' => 0, - 'ub_ctx_delete' => 0, - 'ub_ctx_hosts' => 0, - 'ub_ctx_resolvconf' => 0, - 'ub_ctx_set_option' => 0, - 'ub_resolve' => 0, - 'ub_resolve_free' => 0 - } - }, - 'WordSize' => '8' - }; diff --git a/devel/DCO/people-dco.txt b/devel/DCO/people-dco.txt index 6d13adc84d..82beb68c77 100644 --- a/devel/DCO/people-dco.txt +++ b/devel/DCO/people-dco.txt @@ -4,48 +4,48 @@ People who have sent DCO for gnutls Adam Sampson 16 Jul 2013 (received by personal mail by nmav) - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/6857 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/6857 Alessandro Ghedini 1 Aug 2015 - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/8266 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/8266 Frank Morgner 30 Aug 2013 - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/6960 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/6960 Wolfgang Meyer zu Bergsten 25 Oct 2013 - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7068 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7068 Jens Lechtenboerger 22 Feb 2014 - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7337 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7337 Jason Spafford 6 Mar 2014 - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7352 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7352 Simon Arlott 10 Jul 2014 - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7572 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7572 Alon Bar-Lev 25 Aug 2014 - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7615 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7615 Armin Burgmeier 16 Sep 2014 - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7657 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7657 Jaak Ristioja 17 Dec 2014 - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7885 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7885 Luke Dashjr 13 Jan 2015 - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7949 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/7949 Tim Kosse 30 May 2016 - http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/8559 + https://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/8559 diff --git a/devel/README-ci.freebsd.md b/devel/README-ci.freebsd.md new file mode 100644 index 0000000000..24a47cc97f --- /dev/null +++ b/devel/README-ci.freebsd.md @@ -0,0 +1,76 @@ +# Install a FreeBSD CI instance + +``` +pkg install -y git gmake bash autoconf gettext libtool automake nettle p11-kit libunistring libtasn1 libidn2 gperf gawk bison softhsm2 openssl cmocka socat wget pkgconf ccache autogen +bash +pw group add -n gitlab-runner +pw user add -n gitlab-runner -g gitlab-runner -s /usr/local/bin/bash +mkdir /home/gitlab-runner +chown gitlab-runner:gitlab-runner /home/gitlab-runner +wget -O /usr/local/bin/gitlab-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-freebsd-amd64 +chmod +x /usr/local/bin/gitlab-runner +touch /var/log/gitlab_runner.log && chown gitlab-runner:gitlab-runner /var/log/gitlab_runner.log +mkdir -p /usr/local/etc/rc.d +cat > /usr/local/etc/rc.d/gitlab_runner << "EOF" +#!/usr/local/bin/bash +# PROVIDE: gitlab_runner +# REQUIRE: DAEMON NETWORKING +# BEFORE: +# KEYWORD: + +. /etc/rc.subr + +name="gitlab_runner" +rcvar="gitlab_runner_enable" + +load_rc_config $name + +user="gitlab-runner" +user_home="/home/gitlab-runner" +command="/usr/local/bin/gitlab-runner run" +pidfile="/var/run/${name}.pid" + +start_cmd="gitlab_runner_start" +stop_cmd="gitlab_runner_stop" +status_cmd="gitlab_runner_status" + +gitlab_runner_start() +{ + export USER=${user} + export HOME=${user_home} + export GNULIB_SRCDIR=/builds/common/gnulib + export GNULIB_TOOL=/builds/common/gnulib/gnulib-tool + + if checkyesno ${rcvar}; then + cd ${user_home} + /usr/sbin/daemon -u ${user} -p ${pidfile} ${command} > /var/log/gitlab_runner.log 2>&1 + fi +} + +gitlab_runner_stop() +{ + if [ -f ${pidfile} ]; then + kill `cat ${pidfile}` + fi +} + +gitlab_runner_status() +{ + if [ ! -f ${pidfile} ] || kill -0 `cat ${pidfile}`; then + echo "Service ${name} is not running." + else + echo "${name} appears to be running." + fi +} + +run_rc_command $1 +EOF +chmod +x /usr/local/etc/rc.d/gitlab_runner +su gitlab-runner -c 'gitlab-runner register' +sysrc -f /etc/rc.conf "gitlab_runner_enable=YES" +service gitlab_runner start +mkdir -p /builds/common +git clone https://git.savannah.gnu.org/git/gnulib.git /builds/common/gnulib + +``` + diff --git a/devel/check_if_signed b/devel/check_if_signed new file mode 100755 index 0000000000..61466a05b3 --- /dev/null +++ b/devel/check_if_signed @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +# MRs have the contributor git tree as the only remote +# Add GnuTLS Gitlab upstream tree as remote so we can compare against +# the right master tree + +git remote add gitlab-gnutls-upstream-git-tree https://gitlab.com/gnutls/gnutls.git +git fetch -q gitlab-gnutls-upstream-git-tree master + +if [ -z "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME"]; then + CI_MERGE_REQUEST_TARGET_BRANCH_NAME="gitlab-gnutls-upstream-git-tree/master" +fi + +echo "target=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" +echo "source=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" + +# create list of commits of the current branch +commits=$(git rev-list --no-merges $CI_MERGE_REQUEST_TARGET_BRANCH_NAME..) +if [ -z "$commits" ]; then + # OK if both branches are 'even' + git diff --quiet $CI_MERGE_REQUEST_TARGET_BRANCH_NAME.. && exit 0 + + echo "Couldn't find any commits to check" + exit 1 +fi + +# check if author's email matches email in 'Signed-off-by' +for hash in $commits; do + author=$(git log --format='%ae' ${hash}^\!) + signed=$(git log --format='%b' ${hash}^\! | grep -i "Signed-off-by:") + echo "Checking commit $hash from Author $author and Signed-off-by: $signed" + if [ $? -ne 0 ]; then + echo "Missing Signed-off-by" + exit 1 + fi + if ! echo $signed | grep -q "Signed-off-by:.*<${author}>"; then + echo "Author '${author}' doesn't match" + exit 1 + fi +done diff --git a/devel/cppcheck.suppressions b/devel/cppcheck.suppressions new file mode 100644 index 0000000000..2273647a4f --- /dev/null +++ b/devel/cppcheck.suppressions @@ -0,0 +1,6 @@ +allocaCalled:lib/nettle/int/pss*.c +variableScope:lib/safe-memfuncs.c:42 +variableScope:gl/gettext.h +redundantAssignment:lib/nettle/backport/cmac.c:132 +variableScope:lib/inih/ini.c:97 +variableScope:lib/inih/ini.c:241 diff --git a/devel/fuzz/Makefile b/devel/fuzz/Makefile deleted file mode 100644 index 6b313dee11..0000000000 --- a/devel/fuzz/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (C) 2016 Red Hat, Inc. -# -# This file is part of GnuTLS. -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -CC?="afl-gcc" -#CFLAGS?=-g -fsanitize=address -fsanitize=undefined -COMMON=-I../../lib/includes -L../../lib/.libs -Wl,-rpath=../../lib/.libs -lgnutls - -all: gnutls_pkcs7_parser_fuzzer gnutls_client_fuzzer gnutls_dn_parser_fuzzer \ - gnutls_openpgp_cert_parser_fuzzer gnutls_pkcs7_parser_fuzzer gnutls_pkcs8_key_parser_fuzzer \ - gnutls_private_key_parser_fuzzer gnutls_server_fuzzer gnutls_x509_parser_fuzzer \ - gnutls_reverse_idna_parser_fuzzer gnutls_idna_parser_fuzzer gnutls_ocsp_resp_parser_fuzzer \ - gnutls_ocsp_req_parser_fuzzer gnutls_pkcs12_key_parser_fuzzer gnutls_base64_decoder_fuzzer \ - gnutls_base64_encoder_fuzzer - -%: %.cc - $(CC) $(CFLAGS) main.c $^ $(COMMON) -o $@ - -clean: - rm -f gnutls_pkcs7_parser_fuzzer gnutls_client_fuzzer gnutls_dn_parser_fuzzer \ - gnutls_openpgp_cert_parser_fuzzer gnutls_pkcs7_parser_fuzzer gnutls_pkcs8_key_parser_fuzzer \ - gnutls_private_key_parser_fuzzer gnutls_server_fuzzer gnutls_x509_parser_fuzzer \ - gnutls_idna_parser_fuzzer gnutls_reverse_idna_parser_fuzzer gnutls_ocsp_resp_parser_fuzzer \ - gnutls_ocsp_req_parser_fuzzer gnutls_base64_decoder_fuzzer \ - gnutls_base64_encoder_fuzzer diff --git a/devel/fuzz/README.md b/devel/fuzz/README.md deleted file mode 100644 index 8fdcf0ac8b..0000000000 --- a/devel/fuzz/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# Fuzzers - -These are fuzzers designed for use with `libFuzzer`. Currently they are -primarily run on Google's OSS-Fuzz (https://github.com/google/oss-fuzz/). - -OSS-Fuzz will automatically locate and compile any `*_fuzzer.cc` files and -assume they are fuzzers it should run. - -The initial values for each parser fuzzer are taken from the $NAME.in -directory. - - -# Running a fuzzer using AFL - -Use the following commands on top dir: - -``` -$ CC="afl-gcc" ./configure -$ make -j$(nproc) -$ cd devel/fuzz -$ make gnutls_pkcs7_parser_fuzzer -$ ./run-afl.sh gnutls_pkcs7_parser_fuzzer -``` - -This will execute AFL (which runs indefinitely until CTRL+C is pressed) and -provide its output in a "gnutls_pkcs7_parser_fuzzer.PID.out" directory. - - -# Reproducing a reported issue from oss-fuzz - -Assuming an issue on the "gnutls_pkcs7_parser_fuzzer" was found, and the -reproducer is placed in $FILE, to reproduce locally use the following commands -on top dir: - -``` -$ CFLAGS="-fsanitize=address -g -O2" ./configure -$ make -j$(nproc) -$ cd devel/fuzz -$ make gnutls_pkcs7_parser_fuzzer -$ ./gnutls_pkcs7_parser_fuzzer <$FILE -``` - -Alternatively (if local reproduction is not possible), you can reproduce it -using the original docker instance used to find the issue as follows. - -``` -sudo docker run --rm -e ASAN_OPTIONS="detect_leaks=0" -ti -v $FILE:/testcase ossfuzz/gnutls reproduce gnutls_pkcs7_parser_fuzzer -``` - -# Enhancing the testsuite for issues found - -For the following tests dropping a file to a subdirectory in tests is -sufficient: - -| Fuzzer | Directory | -|:-------------------------:|:-----------------------:| -|gnutls_client_fuzzer | tests/client-interesting| -|gnutls_server_fuzzer | tests/server-interesting| -|gnutls_pkcs7_parser_fuzzer | tests/pkcs7-interesting | -|gnutls_x509_parser_fuzzer | tests/certs-interesting | - -The following require modifying a test case. Mappings are shown in the -table below. - -| Fuzzer | Test case | -|:-------------------------------:|:--------------------------------------------------------:| -|gnutls_dn_parser_fuzzer |tests/x509-dn-decode.c | -|gnutls_openpgp_cert_parser_fuzzer|tests/cert-tests/openpgp-cert-parser | -|gnutls_pkcs8_key_parser_fuzzer |tests/key-tests/pkcs8-invalid,tests/key-tests/pkcs8-decode| -|gnutls_private_key_parser_fuzzer |tests/key-tests/key-invalid | diff --git a/devel/fuzz/gnutls_base64_decoder.in/key.pem b/devel/fuzz/gnutls_base64_decoder.in/key.pem deleted file mode 100644 index fec5c5081d..0000000000 --- a/devel/fuzz/gnutls_base64_decoder.in/key.pem +++ /dev/null @@ -1,32 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIFfgIBAAKCATEAtGsnmCWvwf8eyrB+9Ni87UOGZ1Rd2rQewpBfgzwCEfwTcoWy -iKRlQQt2XyO+ip/+eUtzOy7HSzy/FsmXVTUX86FySzDC4CeUEvNWAObOgksRXaQe -m/r6uRsqTRi1uqXmDMeoqKFtqoiE3JYOsmwcNarnx5Q9+dXHwqINS7NuevcIX8UJ -zRWTGveY3ypMZokk7R/QFmOBZaVYO6HNJWKbmYFUCBcY7HwvCKI7KFcynRdHCob7 -YrFBmeb73qjqIH7zG+666pohZCmS8q1z5RkFnTdT4hGfGF8iuuKLDQCMni+nhz1A -vkqipZIIDC5hwFh8mpnh1qyDOSXPPhvt66NtncvFON7Bx26bNBS+MD6CkB65Spp2 -5O8zDEaiMXL2w2EL+KpnifSl5XY3oSmfgHmqdQIDAQABAoIBMQCAiid3esIx0PW7 -KuwIvbI8yHMlgzIq81FHBV1HPqWq8pFYcnC0cYvCP8xiFDFYyoyfFmZOsBFFRU5P -iejLyDv8U/X+JAtzcD9LERshIU/X/Guu75LvRm0DHJuSuhwfkrrIOCetnPVpHkKq -di6aZ/PhOJZR1wggy3K69IHMgVYhPYc11EgbWVepSuYbeSNdmjA40QWMLfCu3V65 -SwpX0+LnFVc1eJmFrE5wYNe0pomce4J3FWsn8Yu3G5EumWV50KOGKSLklSd+pTdu -VSxwQMRQn9oKBx3zgyr16PlhJkR4+Q+PA4WIN/IYIUV9SxfsMaij7wgLpxXLxJdM -3gvxi36pv/Pkax6IdNKRXss4dzd8LBUy3uUKu23TxTCkDrW04MPrN7rRqlh1jvBw -6KihBoEBAoGZAO02FxxbPPTRVFxjFHgV6EFSSvhPeEkRagoV9o6fn1N3kWTS08fl -xKO1NDtFYCoZSnbRdgomrMinsYIukrLUQu1TKMrhJ1RDyZfRtfZT429k9iptXq87 -5hVtirC+QoePF+SYwenwvKO7qapODb8COagg6ds1lySj5IuzqVYFV68yyZUP+Flp -MHn0YFWJF42UV6sSvuGqfuYlAoGZAMK1e+7cRZFnp/zIbgeYG8Ss+vQKgpeuyDJv -qclkD7HztouQgCw791vMgaXW9y+Rgdkced7eheqI8RGenHbKGifNVQD3Mbl8mkEN -pu8eVqbOX758fHZz0Iaum3ZWrkSihNpuUcl4dZRz5NfOdxPmltrJCI+7uHOMztzH -oMu6gQhh+F3lSDUpHdvhWvIshZQu9EbyxFfNyDoRAoGZAILZPoBW19YYDlf0E5t2 -QiqeMVqtw6VSpNKxcNMVu/Z300zxev8egIzpbMlxKG2wi8HlIx7QXKlGz4UHGcbp -jY2KPMtEzcQOrIpBlQUvGxscbynSMNOqz+1sAoAiQ2KxjTV9CiJ4uCX9Y8bczXpa -yOE0Xqub8Sa1/WEOls8rnUW4VzgRmiX//0yWf/lO6R4hAQcODRtASEW9AoGZAJ6/ -ixkXfJztr3gZDiSg7tru0fjQ7OKwvUbp5btuGqHS+51UpjvqdGXjGj1VQ9oDv6N9 -ZRvBv9uV5T6hXB457xNOhSSxZlg98CJj+BvzV2DO2B8drfiBup1klRnp2FHbU4gn -9ATYcr0jtIwDKPEPyyT8TT+rJNsJDcvR8xbHq9Zi0jXz72hwaojQdu8GP66ujbme -y1hvTfWRAoGZALNT3AbF9EDnJmZlS30MWtBggw83UhszC8XN2tY30AsvsDOS6a0F -/aQ45EKyCvnqtsCOmB6giDsKRaVncp6lIHSH4kHKT7UvlKadWDW5CNWGR3puoHLk -UVhyNvBTKo6lPqXqUsVxp16TKeeQKF+DuYuuNZN3pXXsHTiHkRMDCRVEqz7UnZEc -/Bq/Kh2aOkelkX2S27QzTZGL ------END RSA PRIVATE KEY----- diff --git a/devel/fuzz/gnutls_base64_decoder_fuzzer.cc b/devel/fuzz/gnutls_base64_decoder_fuzzer.cc deleted file mode 100644 index f6d436766b..0000000000 --- a/devel/fuzz/gnutls_base64_decoder_fuzzer.cc +++ /dev/null @@ -1,39 +0,0 @@ -/* -# Copyright 2017 Red Hat, Inc. -# -# 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. -# -################################################################################ -*/ - -#include -#include - -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t raw; - gnutls_datum_t out; - int ret; - - raw.data = (unsigned char *)data; - raw.size = size; - - ret = gnutls_pem_base64_decode2(NULL, &raw, &out); - if (ret >= 0) { - gnutls_free(out.data); - } - - return 0; -} diff --git a/devel/fuzz/gnutls_base64_encoder.in/rnd.raw b/devel/fuzz/gnutls_base64_encoder.in/rnd.raw deleted file mode 100644 index effbe3446f..0000000000 Binary files a/devel/fuzz/gnutls_base64_encoder.in/rnd.raw and /dev/null differ diff --git a/devel/fuzz/gnutls_base64_encoder_fuzzer.cc b/devel/fuzz/gnutls_base64_encoder_fuzzer.cc deleted file mode 100644 index d1ae23ff90..0000000000 --- a/devel/fuzz/gnutls_base64_encoder_fuzzer.cc +++ /dev/null @@ -1,39 +0,0 @@ -/* -# Copyright 2017 Red Hat, Inc. -# -# 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. -# -################################################################################ -*/ - -#include -#include - -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t raw; - gnutls_datum_t out; - int ret; - - raw.data = (unsigned char *)data; - raw.size = size; - - ret = gnutls_pem_base64_encode2("ARBITRARY", &raw, &out); - if (ret >= 0) { - gnutls_free(out.data); - } - - return 0; -} diff --git a/devel/fuzz/gnutls_client_fuzzer.cc b/devel/fuzz/gnutls_client_fuzzer.cc deleted file mode 100644 index 5a198ce9ea..0000000000 --- a/devel/fuzz/gnutls_client_fuzzer.cc +++ /dev/null @@ -1,76 +0,0 @@ -/* -# Copyright 2016 Google Inc. -# -# 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. -# -################################################################################ -*/ - -#include -#include -#include -#include -#include -#include - -#include - - -#ifdef __cplusplus -extern "C" -#endif -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - int res; - gnutls_session_t session; - gnutls_certificate_credentials_t xcred; - - int socket_fds[2]; - res = socketpair(AF_UNIX, SOCK_STREAM, 0, socket_fds); - assert(res >= 0); - ssize_t send_res = send(socket_fds[1], data, size, 0); - assert(send_res == size); - res = shutdown(socket_fds[1], SHUT_WR); - assert(res == 0); - - res = gnutls_init(&session, GNUTLS_CLIENT); - assert(res >= 0); - - res = gnutls_certificate_allocate_credentials(&xcred); - assert(res >= 0); - res = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - assert(res >= 0); - - res = gnutls_set_default_priority(session); - assert(res >= 0); - - gnutls_transport_set_int(session, socket_fds[0]); - - do { - res = gnutls_handshake(session); - } while (res < 0 && gnutls_error_is_fatal(res) == 0); - if (res >= 0) { - while (true) { - char buf[16384]; - res = gnutls_record_recv(session, buf, sizeof(buf)); - if (res <= 0) { - break; - } - } - } - - close(socket_fds[0]); - close(socket_fds[1]); - gnutls_deinit(session); - gnutls_certificate_free_credentials(xcred); - return 0; -} diff --git a/devel/fuzz/gnutls_dn_parser.in/dn2.der b/devel/fuzz/gnutls_dn_parser.in/dn2.der deleted file mode 100644 index 59728d7343..0000000000 --- a/devel/fuzz/gnutls_dn_parser.in/dn2.der +++ /dev/null @@ -1,2 +0,0 @@ -0Y1 0 U 🐨1$0"U - Μεγάλη εταιρία10U Αττική1 0 UGR \ No newline at end of file diff --git a/devel/fuzz/gnutls_dn_parser.in/dn3.der b/devel/fuzz/gnutls_dn_parser.in/dn3.der deleted file mode 100644 index 4bb065281a..0000000000 --- a/devel/fuzz/gnutls_dn_parser.in/dn3.der +++ /dev/null @@ -1 +0,0 @@ -010 U,+;<>\ \ No newline at end of file diff --git a/devel/fuzz/gnutls_dn_parser.in/dn4.der b/devel/fuzz/gnutls_dn_parser.in/dn4.der deleted file mode 100644 index 03fb36ee92..0000000000 --- a/devel/fuzz/gnutls_dn_parser.in/dn4.der +++ /dev/null @@ -1 +0,0 @@ -0+1 0 U, 1 0 U  X 1 0 U #XXX \ No newline at end of file diff --git a/devel/fuzz/gnutls_dn_parser_fuzzer.cc b/devel/fuzz/gnutls_dn_parser_fuzzer.cc deleted file mode 100644 index 24f76a54c6..0000000000 --- a/devel/fuzz/gnutls_dn_parser_fuzzer.cc +++ /dev/null @@ -1,52 +0,0 @@ -/* -# Copyright 2016 Nikos Mavrogiannopoulos -# -# 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. -# -################################################################################ -*/ - -#include -#include - -#include -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t out, raw; - gnutls_x509_dn_t dn; - int ret; - - raw.data = (unsigned char *)data; - raw.size = size; - - ret = gnutls_x509_dn_init(&dn); - assert(ret >= 0); - - ret = gnutls_x509_dn_import(dn, &raw); - if (ret < 0) - goto cleanup; - - /* If properly loaded, try to re-export in string */ - ret = gnutls_x509_dn_get_str(dn, &out); - if (ret < 0) { - goto cleanup; - } - - gnutls_free(out.data); - - cleanup: - gnutls_x509_dn_deinit(dn); - return 0; -} diff --git a/devel/fuzz/gnutls_idna_parser.in/dns2 b/devel/fuzz/gnutls_idna_parser.in/dns2 deleted file mode 100644 index 7fed584a6e..0000000000 --- a/devel/fuzz/gnutls_idna_parser.in/dns2 +++ /dev/null @@ -1 +0,0 @@ -bücher.de diff --git a/devel/fuzz/gnutls_idna_parser.in/dns3 b/devel/fuzz/gnutls_idna_parser.in/dns3 deleted file mode 100644 index 30babe3601..0000000000 --- a/devel/fuzz/gnutls_idna_parser.in/dns3 +++ /dev/null @@ -1 +0,0 @@ -日本語.jp diff --git a/devel/fuzz/gnutls_idna_parser.in/dns4 b/devel/fuzz/gnutls_idna_parser.in/dns4 deleted file mode 100644 index c08920141f..0000000000 --- a/devel/fuzz/gnutls_idna_parser.in/dns4 +++ /dev/null @@ -1 +0,0 @@ -简体中文.εξτρα.com diff --git a/devel/fuzz/gnutls_idna_parser_fuzzer.cc b/devel/fuzz/gnutls_idna_parser_fuzzer.cc deleted file mode 100644 index 0690ac31b8..0000000000 --- a/devel/fuzz/gnutls_idna_parser_fuzzer.cc +++ /dev/null @@ -1,40 +0,0 @@ -/* -# Copyright 2016 Nikos Mavrogiannopoulos -# -# 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. -# -################################################################################ -*/ - -#include -#include -#include -#include - -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t out; - int ret; - - ret = gnutls_idna_map((const char*)data, size, &out, 0); - if (ret < 0) - goto cleanup; - - assert(out.size == strlen((char*)out.data)); - gnutls_free(out.data); - - cleanup: - return 0; -} diff --git a/devel/fuzz/gnutls_ocsp_req_parser.in/request1.der b/devel/fuzz/gnutls_ocsp_req_parser.in/request1.der deleted file mode 100644 index 11f93d3405..0000000000 Binary files a/devel/fuzz/gnutls_ocsp_req_parser.in/request1.der and /dev/null differ diff --git a/devel/fuzz/gnutls_ocsp_req_parser_fuzzer.cc b/devel/fuzz/gnutls_ocsp_req_parser_fuzzer.cc deleted file mode 100644 index af99056158..0000000000 --- a/devel/fuzz/gnutls_ocsp_req_parser_fuzzer.cc +++ /dev/null @@ -1,47 +0,0 @@ -/* -# Copyright 2017 Red Hat, Inc. -# -# 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. -# -################################################################################ -*/ - -#include -#include - -#include -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t raw; - gnutls_datum_t out; - gnutls_ocsp_req_t req; - int ret; - - raw.data = (unsigned char *)data; - raw.size = size; - - ret = gnutls_ocsp_req_init(&req); - assert(ret >= 0); - - ret = gnutls_ocsp_req_import(req, &raw); - if (ret >= 0) { - ret = gnutls_ocsp_req_print(req, GNUTLS_OCSP_PRINT_FULL, &out); - assert(ret >= 0); - gnutls_free(out.data); - } - - gnutls_ocsp_req_deinit(req); - return 0; -} diff --git a/devel/fuzz/gnutls_ocsp_resp_parser.in/response1.der b/devel/fuzz/gnutls_ocsp_resp_parser.in/response1.der deleted file mode 100644 index f632b4abd4..0000000000 Binary files a/devel/fuzz/gnutls_ocsp_resp_parser.in/response1.der and /dev/null differ diff --git a/devel/fuzz/gnutls_ocsp_resp_parser.in/response2.der b/devel/fuzz/gnutls_ocsp_resp_parser.in/response2.der deleted file mode 100644 index ee428bd504..0000000000 Binary files a/devel/fuzz/gnutls_ocsp_resp_parser.in/response2.der and /dev/null differ diff --git a/devel/fuzz/gnutls_ocsp_resp_parser.in/response4.der b/devel/fuzz/gnutls_ocsp_resp_parser.in/response4.der deleted file mode 100644 index 0a8ec3bd4d..0000000000 Binary files a/devel/fuzz/gnutls_ocsp_resp_parser.in/response4.der and /dev/null differ diff --git a/devel/fuzz/gnutls_ocsp_resp_parser_fuzzer.cc b/devel/fuzz/gnutls_ocsp_resp_parser_fuzzer.cc deleted file mode 100644 index 5e8657c2cc..0000000000 --- a/devel/fuzz/gnutls_ocsp_resp_parser_fuzzer.cc +++ /dev/null @@ -1,47 +0,0 @@ -/* -# Copyright 2017 Red Hat, Inc. -# -# 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. -# -################################################################################ -*/ - -#include -#include - -#include -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t raw; - gnutls_datum_t out; - gnutls_ocsp_resp_t resp; - int ret; - - raw.data = (unsigned char *)data; - raw.size = size; - - ret = gnutls_ocsp_resp_init(&resp); - assert(ret >= 0); - - ret = gnutls_ocsp_resp_import(resp, &raw); - if (ret >= 0) { - ret = gnutls_ocsp_resp_print(resp, GNUTLS_OCSP_PRINT_FULL, &out); - assert(ret >= 0); - gnutls_free(out.data); - } - - gnutls_ocsp_resp_deinit(resp); - return 0; -} diff --git a/devel/fuzz/gnutls_openpgp_cert_parser_fuzzer.cc b/devel/fuzz/gnutls_openpgp_cert_parser_fuzzer.cc deleted file mode 100644 index 4e103ecfab..0000000000 --- a/devel/fuzz/gnutls_openpgp_cert_parser_fuzzer.cc +++ /dev/null @@ -1,48 +0,0 @@ -/* -# Copyright 2016 Alex Gaynor. -# -# 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. -# -################################################################################ -*/ -#include -#include - -#include -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t raw; - gnutls_datum_t out; - gnutls_openpgp_crt_t crt; - int ret; - - raw.data = (unsigned char *)data; - raw.size = size; - - ret = gnutls_openpgp_crt_init(&crt); - if (ret == GNUTLS_E_UNIMPLEMENTED_FEATURE) - return 0; - assert(ret >= 0); - - ret = gnutls_openpgp_crt_import(crt, &raw, GNUTLS_OPENPGP_FMT_RAW); - if (ret >= 0) { - ret = gnutls_openpgp_crt_print(crt, GNUTLS_CRT_PRINT_FULL, &out); - assert(ret >= 0); - gnutls_free(out.data); - } - - gnutls_openpgp_crt_deinit(crt); - return 0; -} diff --git a/devel/fuzz/gnutls_pkcs12_key_parser.in/key-cert-crl.p12 b/devel/fuzz/gnutls_pkcs12_key_parser.in/key-cert-crl.p12 deleted file mode 100644 index 9407555321..0000000000 Binary files a/devel/fuzz/gnutls_pkcs12_key_parser.in/key-cert-crl.p12 and /dev/null differ diff --git a/devel/fuzz/gnutls_pkcs12_key_parser.in/key-cert.p12 b/devel/fuzz/gnutls_pkcs12_key_parser.in/key-cert.p12 deleted file mode 100644 index dd4ffa1fca..0000000000 Binary files a/devel/fuzz/gnutls_pkcs12_key_parser.in/key-cert.p12 and /dev/null differ diff --git a/devel/fuzz/gnutls_pkcs12_key_parser.in/large-bundle.p12 b/devel/fuzz/gnutls_pkcs12_key_parser.in/large-bundle.p12 deleted file mode 100644 index 5fc9cd397d..0000000000 Binary files a/devel/fuzz/gnutls_pkcs12_key_parser.in/large-bundle.p12 and /dev/null differ diff --git a/devel/fuzz/gnutls_pkcs12_key_parser_fuzzer.cc b/devel/fuzz/gnutls_pkcs12_key_parser_fuzzer.cc deleted file mode 100644 index 84f1ddb153..0000000000 --- a/devel/fuzz/gnutls_pkcs12_key_parser_fuzzer.cc +++ /dev/null @@ -1,71 +0,0 @@ -/* -# Copyright 2016 Nikos Mavrogiannopoulos -# -# 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. -# -################################################################################ -*/ - -#include -#include - -#include -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t raw = {(unsigned char*)data, (unsigned int)size}; - gnutls_pkcs12_t p12; - gnutls_x509_privkey_t key; - gnutls_x509_crt_t *chain; - gnutls_x509_crt_t *extras; - gnutls_x509_crl_t crl; - unsigned int chain_len = 0, extras_len = 0; - unsigned int i; - int ret; - - raw.data = (unsigned char *)data; - raw.size = size; - - ret = gnutls_pkcs12_init(&p12); - assert(ret >= 0); - - ret = gnutls_pkcs12_import(p12, &raw, GNUTLS_X509_FMT_DER, 0); - if (ret < 0) { - goto cleanup; - } - - /* catch crashes */ - gnutls_pkcs12_verify_mac(p12, "1234"); - - ret = gnutls_pkcs12_simple_parse(p12, "1234", &key, &chain, &chain_len, &extras, &extras_len, &crl, 0); - if (ret >= 0) { - gnutls_x509_privkey_deinit(key); - if (crl) - gnutls_x509_crl_deinit(crl); - if (extras_len > 0) { - for (i=0;i 0) { - for (i=0;i -#include - -#include -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t raw; - gnutls_datum_t out; - gnutls_pkcs7_t pkcs7; - int ret; - - raw.data = (unsigned char *)data; - raw.size = size; - - ret = gnutls_pkcs7_init(&pkcs7); - assert(ret >= 0); - - ret = gnutls_pkcs7_import(pkcs7, &raw, GNUTLS_X509_FMT_DER); - if (ret >= 0) { - ret = gnutls_pkcs7_print(pkcs7, GNUTLS_CRT_PRINT_FULL, &out); - assert(ret >= 0); - gnutls_free(out.data); - } - - gnutls_pkcs7_deinit(pkcs7); - return 0; -} diff --git a/devel/fuzz/gnutls_pkcs8_key_parser.in/decrypted-key-dsa.p8 b/devel/fuzz/gnutls_pkcs8_key_parser.in/decrypted-key-dsa.p8 deleted file mode 100644 index bce3728e50..0000000000 Binary files a/devel/fuzz/gnutls_pkcs8_key_parser.in/decrypted-key-dsa.p8 and /dev/null differ diff --git a/devel/fuzz/gnutls_pkcs8_key_parser.in/decrypted-key-ecc.p8 b/devel/fuzz/gnutls_pkcs8_key_parser.in/decrypted-key-ecc.p8 deleted file mode 100644 index 2ca856f677..0000000000 Binary files a/devel/fuzz/gnutls_pkcs8_key_parser.in/decrypted-key-ecc.p8 and /dev/null differ diff --git a/devel/fuzz/gnutls_pkcs8_key_parser.in/decrypted-key-rsa.p8 b/devel/fuzz/gnutls_pkcs8_key_parser.in/decrypted-key-rsa.p8 deleted file mode 100644 index f6cdc3c047..0000000000 Binary files a/devel/fuzz/gnutls_pkcs8_key_parser.in/decrypted-key-rsa.p8 and /dev/null differ diff --git a/devel/fuzz/gnutls_pkcs8_key_parser.in/key-ecc-arcfour.p8 b/devel/fuzz/gnutls_pkcs8_key_parser.in/key-ecc-arcfour.p8 deleted file mode 100644 index b4f00e4ab8..0000000000 Binary files a/devel/fuzz/gnutls_pkcs8_key_parser.in/key-ecc-arcfour.p8 and /dev/null differ diff --git a/devel/fuzz/gnutls_pkcs8_key_parser.in/key-pbes1-des-md5.p8 b/devel/fuzz/gnutls_pkcs8_key_parser.in/key-pbes1-des-md5.p8 deleted file mode 100644 index 4fee25bf39..0000000000 Binary files a/devel/fuzz/gnutls_pkcs8_key_parser.in/key-pbes1-des-md5.p8 and /dev/null differ diff --git a/devel/fuzz/gnutls_pkcs8_key_parser_fuzzer.cc b/devel/fuzz/gnutls_pkcs8_key_parser_fuzzer.cc deleted file mode 100644 index 2aed9def60..0000000000 --- a/devel/fuzz/gnutls_pkcs8_key_parser_fuzzer.cc +++ /dev/null @@ -1,54 +0,0 @@ -/* -# Copyright 2016 Nikos Mavrogiannopoulos -# -# 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. -# -################################################################################ -*/ - -#include -#include - -#include -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t raw; - gnutls_x509_privkey_t key; - gnutls_datum_t out; - int ret; - - raw.data = (unsigned char *)data; - raw.size = size; - - ret = gnutls_x509_privkey_init(&key); - assert(ret >= 0); - - ret = gnutls_x509_privkey_import_pkcs8(key, &raw, GNUTLS_X509_FMT_DER, "password", 0); - if (ret < 0) { - goto cleanup; - } - - /* If properly loaded, try to re-export */ - ret = gnutls_x509_privkey_export2(key, GNUTLS_X509_FMT_DER, &out); - if (ret < 0) { - goto cleanup; - } - - gnutls_free(out.data); - - cleanup: - gnutls_x509_privkey_deinit(key); - return 0; -} diff --git a/devel/fuzz/gnutls_private_key_parser_fuzzer.cc b/devel/fuzz/gnutls_private_key_parser_fuzzer.cc deleted file mode 100644 index 63d8163fa7..0000000000 --- a/devel/fuzz/gnutls_private_key_parser_fuzzer.cc +++ /dev/null @@ -1,41 +0,0 @@ -/* -# Copyright 2016 Google Inc. -# -# 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. -# -################################################################################ -*/ - -#include -#include - -#include -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t raw; - gnutls_x509_privkey_t key; - int ret; - - raw.data = (unsigned char *)data; - raw.size = size; - - ret = gnutls_x509_privkey_init(&key); - assert(ret >= 0); - - ret = gnutls_x509_privkey_import(key, &raw, GNUTLS_X509_FMT_DER); - - gnutls_x509_privkey_deinit(key); - return 0; -} diff --git a/devel/fuzz/gnutls_reverse_idna_parser.in/ace1 b/devel/fuzz/gnutls_reverse_idna_parser.in/ace1 deleted file mode 100644 index 64b6119730..0000000000 --- a/devel/fuzz/gnutls_reverse_idna_parser.in/ace1 +++ /dev/null @@ -1 +0,0 @@ -xn--fa-hia.de diff --git a/devel/fuzz/gnutls_reverse_idna_parser.in/ace2 b/devel/fuzz/gnutls_reverse_idna_parser.in/ace2 deleted file mode 100644 index a42c184210..0000000000 --- a/devel/fuzz/gnutls_reverse_idna_parser.in/ace2 +++ /dev/null @@ -1 +0,0 @@ -xn--fiqu1az03c18t.xn--mxah1amo.com diff --git a/devel/fuzz/gnutls_reverse_idna_parser.in/ace3 b/devel/fuzz/gnutls_reverse_idna_parser.in/ace3 deleted file mode 100644 index 13ce7f21d1..0000000000 --- a/devel/fuzz/gnutls_reverse_idna_parser.in/ace3 +++ /dev/null @@ -1 +0,0 @@ -LOCALHOST diff --git a/devel/fuzz/gnutls_reverse_idna_parser_fuzzer.cc b/devel/fuzz/gnutls_reverse_idna_parser_fuzzer.cc deleted file mode 100644 index 78deae68f9..0000000000 --- a/devel/fuzz/gnutls_reverse_idna_parser_fuzzer.cc +++ /dev/null @@ -1,40 +0,0 @@ -/* -# Copyright 2016 Nikos Mavrogiannopoulos -# -# 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. -# -################################################################################ -*/ - -#include -#include -#include -#include - -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t out; - int ret; - - ret = gnutls_idna_reverse_map((char*)data, size, &out, 0); - if (ret < 0) - goto cleanup; - - assert(out.size == strlen((char*)out.data)); - gnutls_free(out.data); - - cleanup: - return 0; -} diff --git a/devel/fuzz/gnutls_server_fuzzer.cc b/devel/fuzz/gnutls_server_fuzzer.cc deleted file mode 100644 index 1d1f87d195..0000000000 --- a/devel/fuzz/gnutls_server_fuzzer.cc +++ /dev/null @@ -1,254 +0,0 @@ -/* -# Copyright 2016 Google Inc. -# -# 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. -# -################################################################################ -*/ - -#include -#include -#include -#include - -#include - -static const uint8_t kCertificateDER[] = { - 0x30, 0x82, 0x02, 0xff, 0x30, 0x82, 0x01, 0xe7, 0xa0, 0x03, 0x02, 0x01, - 0x02, 0x02, 0x11, 0x00, 0xb1, 0x84, 0xee, 0x34, 0x99, 0x98, 0x76, 0xfb, - 0x6f, 0xb2, 0x15, 0xc8, 0x47, 0x79, 0x05, 0x9b, 0x30, 0x0d, 0x06, 0x09, - 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, - 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x07, - 0x41, 0x63, 0x6d, 0x65, 0x20, 0x43, 0x6f, 0x30, 0x1e, 0x17, 0x0d, 0x31, - 0x35, 0x31, 0x31, 0x30, 0x37, 0x30, 0x30, 0x32, 0x34, 0x35, 0x36, 0x5a, - 0x17, 0x0d, 0x31, 0x36, 0x31, 0x31, 0x30, 0x36, 0x30, 0x30, 0x32, 0x34, - 0x35, 0x36, 0x5a, 0x30, 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, - 0x04, 0x0a, 0x13, 0x07, 0x41, 0x63, 0x6d, 0x65, 0x20, 0x43, 0x6f, 0x30, - 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, - 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, - 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xce, 0x47, 0xcb, 0x11, - 0xbb, 0xd2, 0x9d, 0x8e, 0x9e, 0xd2, 0x1e, 0x14, 0xaf, 0xc7, 0xea, 0xb6, - 0xc9, 0x38, 0x2a, 0x6f, 0xb3, 0x7e, 0xfb, 0xbc, 0xfc, 0x59, 0x42, 0xb9, - 0x56, 0xf0, 0x4c, 0x3f, 0xf7, 0x31, 0x84, 0xbe, 0xac, 0x03, 0x9e, 0x71, - 0x91, 0x85, 0xd8, 0x32, 0xbd, 0x00, 0xea, 0xac, 0x65, 0xf6, 0x03, 0xc8, - 0x0f, 0x8b, 0xfd, 0x6e, 0x58, 0x88, 0x04, 0x41, 0x92, 0x74, 0xa6, 0x57, - 0x2e, 0x8e, 0x88, 0xd5, 0x3d, 0xda, 0x14, 0x3e, 0x63, 0x88, 0x22, 0xe3, - 0x53, 0xe9, 0xba, 0x39, 0x09, 0xac, 0xfb, 0xd0, 0x4c, 0xf2, 0x3c, 0x20, - 0xd6, 0x97, 0xe6, 0xed, 0xf1, 0x62, 0x1e, 0xe5, 0xc9, 0x48, 0xa0, 0xca, - 0x2e, 0x3c, 0x14, 0x5a, 0x82, 0xd4, 0xed, 0xb1, 0xe3, 0x43, 0xc1, 0x2a, - 0x59, 0xa5, 0xb9, 0xc8, 0x48, 0xa7, 0x39, 0x23, 0x74, 0xa7, 0x37, 0xb0, - 0x6f, 0xc3, 0x64, 0x99, 0x6c, 0xa2, 0x82, 0xc8, 0xf6, 0xdb, 0x86, 0x40, - 0xce, 0xd1, 0x85, 0x9f, 0xce, 0x69, 0xf4, 0x15, 0x2a, 0x23, 0xca, 0xea, - 0xb7, 0x7b, 0xdf, 0xfb, 0x43, 0x5f, 0xff, 0x7a, 0x49, 0x49, 0x0e, 0xe7, - 0x02, 0x51, 0x45, 0x13, 0xe8, 0x90, 0x64, 0x21, 0x0c, 0x26, 0x2b, 0x5d, - 0xfc, 0xe4, 0xb5, 0x86, 0x89, 0x43, 0x22, 0x4c, 0xf3, 0x3b, 0xf3, 0x09, - 0xc4, 0xa4, 0x10, 0x80, 0xf2, 0x46, 0xe2, 0x46, 0x8f, 0x76, 0x50, 0xbf, - 0xaf, 0x2b, 0x90, 0x1b, 0x78, 0xc7, 0xcf, 0xc1, 0x77, 0xd0, 0xfb, 0xa9, - 0xfb, 0xc9, 0x66, 0x5a, 0xc5, 0x9b, 0x31, 0x41, 0x67, 0x01, 0xbe, 0x33, - 0x10, 0xba, 0x05, 0x58, 0xed, 0x76, 0x53, 0xde, 0x5d, 0xc1, 0xe8, 0xbb, - 0x9f, 0xf1, 0xcd, 0xfb, 0xdf, 0x64, 0x7f, 0xd7, 0x18, 0xab, 0x0f, 0x94, - 0x28, 0x95, 0x4a, 0xcc, 0x6a, 0xa9, 0x50, 0xc7, 0x05, 0x47, 0x10, 0x41, - 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x0e, 0x06, - 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05, - 0xa0, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, 0x0c, 0x30, 0x0a, - 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x0c, - 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, - 0x30, 0x19, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x12, 0x30, 0x10, 0x82, - 0x0e, 0x66, 0x75, 0x7a, 0x7a, 0x2e, 0x62, 0x6f, 0x72, 0x69, 0x6e, 0x67, - 0x73, 0x73, 0x6c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, - 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x92, - 0xde, 0xef, 0x96, 0x06, 0x7b, 0xff, 0x71, 0x7d, 0x4e, 0xa0, 0x7d, 0xae, - 0xb8, 0x22, 0xb4, 0x2c, 0xf7, 0x96, 0x9c, 0x37, 0x1d, 0x8f, 0xe7, 0xd9, - 0x47, 0xff, 0x3f, 0xe9, 0x35, 0x95, 0x0e, 0xdd, 0xdc, 0x7f, 0xc8, 0x8a, - 0x1e, 0x36, 0x1d, 0x38, 0x47, 0xfc, 0x76, 0xd2, 0x1f, 0x98, 0xa1, 0x36, - 0xac, 0xc8, 0x70, 0x38, 0x0a, 0x3d, 0x51, 0x8d, 0x0f, 0x03, 0x1b, 0xef, - 0x62, 0xa1, 0xcb, 0x2b, 0x4a, 0x8c, 0x12, 0x2b, 0x54, 0x50, 0x9a, 0x6b, - 0xfe, 0xaf, 0xd9, 0xf6, 0xbf, 0x58, 0x11, 0x58, 0x5e, 0xe5, 0x86, 0x1e, - 0x3b, 0x6b, 0x30, 0x7e, 0x72, 0x89, 0xe8, 0x6b, 0x7b, 0xb7, 0xaf, 0xef, - 0x8b, 0xa9, 0x3e, 0xb0, 0xcd, 0x0b, 0xef, 0xb0, 0x0c, 0x96, 0x2b, 0xc5, - 0x3b, 0xd5, 0xf1, 0xc2, 0xae, 0x3a, 0x60, 0xd9, 0x0f, 0x75, 0x37, 0x55, - 0x4d, 0x62, 0xd2, 0xed, 0x96, 0xac, 0x30, 0x6b, 0xda, 0xa1, 0x48, 0x17, - 0x96, 0x23, 0x85, 0x9a, 0x57, 0x77, 0xe9, 0x22, 0xa2, 0x37, 0x03, 0xba, - 0x49, 0x77, 0x40, 0x3b, 0x76, 0x4b, 0xda, 0xc1, 0x04, 0x57, 0x55, 0x34, - 0x22, 0x83, 0x45, 0x29, 0xab, 0x2e, 0x11, 0xff, 0x0d, 0xab, 0x55, 0xb1, - 0xa7, 0x58, 0x59, 0x05, 0x25, 0xf9, 0x1e, 0x3d, 0xb7, 0xac, 0x04, 0x39, - 0x2c, 0xf9, 0xaf, 0xb8, 0x68, 0xfb, 0x8e, 0x35, 0x71, 0x32, 0xff, 0x70, - 0xe9, 0x46, 0x6d, 0x5c, 0x06, 0x90, 0x88, 0x23, 0x48, 0x0c, 0x50, 0xeb, - 0x0a, 0xa9, 0xae, 0xe8, 0xfc, 0xbe, 0xa5, 0x76, 0x94, 0xd7, 0x64, 0x22, - 0x38, 0x98, 0x17, 0xa4, 0x3a, 0xa7, 0x59, 0x9f, 0x1d, 0x3b, 0x75, 0x90, - 0x1a, 0x81, 0xef, 0x19, 0xfb, 0x2b, 0xb7, 0xa7, 0x64, 0x61, 0x22, 0xa4, - 0x6f, 0x7b, 0xfa, 0x58, 0xbb, 0x8c, 0x4e, 0x77, 0x67, 0xd0, 0x5d, 0x58, - 0x76, 0x8a, 0xbb, -}; - -static const uint8_t kRSAPrivateKeyDER[] = { - 0x30, 0x82, 0x04, 0xa5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, - 0xce, 0x47, 0xcb, 0x11, 0xbb, 0xd2, 0x9d, 0x8e, 0x9e, 0xd2, 0x1e, 0x14, - 0xaf, 0xc7, 0xea, 0xb6, 0xc9, 0x38, 0x2a, 0x6f, 0xb3, 0x7e, 0xfb, 0xbc, - 0xfc, 0x59, 0x42, 0xb9, 0x56, 0xf0, 0x4c, 0x3f, 0xf7, 0x31, 0x84, 0xbe, - 0xac, 0x03, 0x9e, 0x71, 0x91, 0x85, 0xd8, 0x32, 0xbd, 0x00, 0xea, 0xac, - 0x65, 0xf6, 0x03, 0xc8, 0x0f, 0x8b, 0xfd, 0x6e, 0x58, 0x88, 0x04, 0x41, - 0x92, 0x74, 0xa6, 0x57, 0x2e, 0x8e, 0x88, 0xd5, 0x3d, 0xda, 0x14, 0x3e, - 0x63, 0x88, 0x22, 0xe3, 0x53, 0xe9, 0xba, 0x39, 0x09, 0xac, 0xfb, 0xd0, - 0x4c, 0xf2, 0x3c, 0x20, 0xd6, 0x97, 0xe6, 0xed, 0xf1, 0x62, 0x1e, 0xe5, - 0xc9, 0x48, 0xa0, 0xca, 0x2e, 0x3c, 0x14, 0x5a, 0x82, 0xd4, 0xed, 0xb1, - 0xe3, 0x43, 0xc1, 0x2a, 0x59, 0xa5, 0xb9, 0xc8, 0x48, 0xa7, 0x39, 0x23, - 0x74, 0xa7, 0x37, 0xb0, 0x6f, 0xc3, 0x64, 0x99, 0x6c, 0xa2, 0x82, 0xc8, - 0xf6, 0xdb, 0x86, 0x40, 0xce, 0xd1, 0x85, 0x9f, 0xce, 0x69, 0xf4, 0x15, - 0x2a, 0x23, 0xca, 0xea, 0xb7, 0x7b, 0xdf, 0xfb, 0x43, 0x5f, 0xff, 0x7a, - 0x49, 0x49, 0x0e, 0xe7, 0x02, 0x51, 0x45, 0x13, 0xe8, 0x90, 0x64, 0x21, - 0x0c, 0x26, 0x2b, 0x5d, 0xfc, 0xe4, 0xb5, 0x86, 0x89, 0x43, 0x22, 0x4c, - 0xf3, 0x3b, 0xf3, 0x09, 0xc4, 0xa4, 0x10, 0x80, 0xf2, 0x46, 0xe2, 0x46, - 0x8f, 0x76, 0x50, 0xbf, 0xaf, 0x2b, 0x90, 0x1b, 0x78, 0xc7, 0xcf, 0xc1, - 0x77, 0xd0, 0xfb, 0xa9, 0xfb, 0xc9, 0x66, 0x5a, 0xc5, 0x9b, 0x31, 0x41, - 0x67, 0x01, 0xbe, 0x33, 0x10, 0xba, 0x05, 0x58, 0xed, 0x76, 0x53, 0xde, - 0x5d, 0xc1, 0xe8, 0xbb, 0x9f, 0xf1, 0xcd, 0xfb, 0xdf, 0x64, 0x7f, 0xd7, - 0x18, 0xab, 0x0f, 0x94, 0x28, 0x95, 0x4a, 0xcc, 0x6a, 0xa9, 0x50, 0xc7, - 0x05, 0x47, 0x10, 0x41, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01, - 0x01, 0x00, 0xa8, 0x47, 0xb9, 0x4a, 0x06, 0x47, 0x93, 0x71, 0x3d, 0xef, - 0x7b, 0xca, 0xb4, 0x7c, 0x0a, 0xe6, 0x82, 0xd0, 0xe7, 0x0d, 0xa9, 0x08, - 0xf6, 0xa4, 0xfd, 0xd8, 0x73, 0xae, 0x6f, 0x56, 0x29, 0x5e, 0x25, 0x72, - 0xa8, 0x30, 0x44, 0x73, 0xcf, 0x56, 0x26, 0xb9, 0x61, 0xde, 0x42, 0x81, - 0xf4, 0xf0, 0x1f, 0x5d, 0xcb, 0x47, 0xf2, 0x26, 0xe9, 0xe0, 0x93, 0x28, - 0xa3, 0x10, 0x3b, 0x42, 0x1e, 0x51, 0x11, 0x12, 0x06, 0x5e, 0xaf, 0xce, - 0xb0, 0xa5, 0x14, 0xdd, 0x82, 0x58, 0xa1, 0xa4, 0x12, 0xdf, 0x65, 0x1d, - 0x51, 0x70, 0x64, 0xd5, 0x58, 0x68, 0x11, 0xa8, 0x6a, 0x23, 0xc2, 0xbf, - 0xa1, 0x25, 0x24, 0x47, 0xb3, 0xa4, 0x3c, 0x83, 0x96, 0xb7, 0x1f, 0xf4, - 0x44, 0xd4, 0xd1, 0xe9, 0xfc, 0x33, 0x68, 0x5e, 0xe2, 0x68, 0x99, 0x9c, - 0x91, 0xe8, 0x72, 0xc9, 0xd7, 0x8c, 0x80, 0x20, 0x8e, 0x77, 0x83, 0x4d, - 0xe4, 0xab, 0xf9, 0x74, 0xa1, 0xdf, 0xd3, 0xc0, 0x0d, 0x5b, 0x05, 0x51, - 0xc2, 0x6f, 0xb2, 0x91, 0x02, 0xec, 0xc0, 0x02, 0x1a, 0x5c, 0x91, 0x05, - 0xf1, 0xe3, 0xfa, 0x65, 0xc2, 0xad, 0x24, 0xe6, 0xe5, 0x3c, 0xb6, 0x16, - 0xf1, 0xa1, 0x67, 0x1a, 0x9d, 0x37, 0x56, 0xbf, 0x01, 0xd7, 0x3b, 0x35, - 0x30, 0x57, 0x73, 0xf4, 0xf0, 0x5e, 0xa7, 0xe8, 0x0a, 0xc1, 0x94, 0x17, - 0xcf, 0x0a, 0xbd, 0xf5, 0x31, 0xa7, 0x2d, 0xf7, 0xf5, 0xd9, 0x8c, 0xc2, - 0x01, 0xbd, 0xda, 0x16, 0x8e, 0xb9, 0x30, 0x40, 0xa6, 0x6e, 0xbd, 0xcd, - 0x4d, 0x84, 0x67, 0x4e, 0x0b, 0xce, 0xd5, 0xef, 0xf8, 0x08, 0x63, 0x02, - 0xc6, 0xc7, 0xf7, 0x67, 0x92, 0xe2, 0x23, 0x9d, 0x27, 0x22, 0x1d, 0xc6, - 0x67, 0x5e, 0x66, 0xbf, 0x03, 0xb8, 0xa9, 0x67, 0xd4, 0x39, 0xd8, 0x75, - 0xfa, 0xe8, 0xed, 0x56, 0xb8, 0x81, 0x02, 0x81, 0x81, 0x00, 0xf7, 0x46, - 0x68, 0xc6, 0x13, 0xf8, 0xba, 0x0f, 0x83, 0xdb, 0x05, 0xa8, 0x25, 0x00, - 0x70, 0x9c, 0x9e, 0x8b, 0x12, 0x34, 0x0d, 0x96, 0xcf, 0x0d, 0x98, 0x9b, - 0x8d, 0x9c, 0x96, 0x78, 0xd1, 0x3c, 0x01, 0x8c, 0xb9, 0x35, 0x5c, 0x20, - 0x42, 0xb4, 0x38, 0xe3, 0xd6, 0x54, 0xe7, 0x55, 0xd6, 0x26, 0x8a, 0x0c, - 0xf6, 0x1f, 0xe0, 0x04, 0xc1, 0x22, 0x42, 0x19, 0x61, 0xc4, 0x94, 0x7c, - 0x07, 0x2e, 0x80, 0x52, 0xfe, 0x8d, 0xe6, 0x92, 0x3a, 0x91, 0xfe, 0x72, - 0x99, 0xe1, 0x2a, 0x73, 0x76, 0xb1, 0x24, 0x20, 0x67, 0xde, 0x28, 0xcb, - 0x0e, 0xe6, 0x52, 0xb5, 0xfa, 0xfb, 0x8b, 0x1e, 0x6a, 0x1d, 0x09, 0x26, - 0xb9, 0xa7, 0x61, 0xba, 0xf8, 0x79, 0xd2, 0x66, 0x57, 0x28, 0xd7, 0x31, - 0xb5, 0x0b, 0x27, 0x19, 0x1e, 0x6f, 0x46, 0xfc, 0x54, 0x95, 0xeb, 0x78, - 0x01, 0xb6, 0xd9, 0x79, 0x5a, 0x4d, 0x02, 0x81, 0x81, 0x00, 0xd5, 0x8f, - 0x16, 0x53, 0x2f, 0x57, 0x93, 0xbf, 0x09, 0x75, 0xbf, 0x63, 0x40, 0x3d, - 0x27, 0xfd, 0x23, 0x21, 0xde, 0x9b, 0xe9, 0x73, 0x3f, 0x49, 0x02, 0xd2, - 0x38, 0x96, 0xcf, 0xc3, 0xba, 0x92, 0x07, 0x87, 0x52, 0xa9, 0x35, 0xe3, - 0x0c, 0xe4, 0x2f, 0x05, 0x7b, 0x37, 0xa5, 0x40, 0x9c, 0x3b, 0x94, 0xf7, - 0xad, 0xa0, 0xee, 0x3a, 0xa8, 0xfb, 0x1f, 0x11, 0x1f, 0xd8, 0x9a, 0x80, - 0x42, 0x3d, 0x7f, 0xa4, 0xb8, 0x9a, 0xaa, 0xea, 0x72, 0xc1, 0xe3, 0xed, - 0x06, 0x60, 0x92, 0x37, 0xf9, 0xba, 0xfb, 0x9e, 0xed, 0x05, 0xa6, 0xd4, - 0x72, 0x68, 0x4f, 0x63, 0xfe, 0xd6, 0x10, 0x0d, 0x4f, 0x0a, 0x93, 0xc6, - 0xb9, 0xd7, 0xaf, 0xfd, 0xd9, 0x57, 0x7d, 0xcb, 0x75, 0xe8, 0x93, 0x2b, - 0xae, 0x4f, 0xea, 0xd7, 0x30, 0x0b, 0x58, 0x44, 0x82, 0x0f, 0x84, 0x5d, - 0x62, 0x11, 0x78, 0xea, 0x5f, 0xc5, 0x02, 0x81, 0x81, 0x00, 0x82, 0x0c, - 0xc1, 0xe6, 0x0b, 0x72, 0xf1, 0x48, 0x5f, 0xac, 0xbd, 0x98, 0xe5, 0x7d, - 0x09, 0xbd, 0x15, 0x95, 0x47, 0x09, 0xa1, 0x6c, 0x03, 0x91, 0xbf, 0x05, - 0x70, 0xc1, 0x3e, 0x52, 0x64, 0x99, 0x0e, 0xa7, 0x98, 0x70, 0xfb, 0xf6, - 0xeb, 0x9e, 0x25, 0x9d, 0x8e, 0x88, 0x30, 0xf2, 0xf0, 0x22, 0x6c, 0xd0, - 0xcc, 0x51, 0x8f, 0x5c, 0x70, 0xc7, 0x37, 0xc4, 0x69, 0xab, 0x1d, 0xfc, - 0xed, 0x3a, 0x03, 0xbb, 0xa2, 0xad, 0xb6, 0xea, 0x89, 0x6b, 0x67, 0x4b, - 0x96, 0xaa, 0xd9, 0xcc, 0xc8, 0x4b, 0xfa, 0x18, 0x21, 0x08, 0xb2, 0xa3, - 0xb9, 0x3e, 0x61, 0x99, 0xdc, 0x5a, 0x97, 0x9c, 0x73, 0x6a, 0xb9, 0xf9, - 0x68, 0x03, 0x24, 0x5f, 0x55, 0x77, 0x9c, 0xb4, 0xbe, 0x7a, 0x78, 0x53, - 0x68, 0x48, 0x69, 0x53, 0xc8, 0xb1, 0xf5, 0xbf, 0x98, 0x2d, 0x11, 0x1e, - 0x98, 0xa8, 0x36, 0x50, 0xa0, 0xb1, 0x02, 0x81, 0x81, 0x00, 0x90, 0x88, - 0x30, 0x71, 0xc7, 0xfe, 0x9b, 0x6d, 0x95, 0x37, 0x6d, 0x79, 0xfc, 0x85, - 0xe7, 0x44, 0x78, 0xbc, 0x79, 0x6e, 0x47, 0x86, 0xc9, 0xf3, 0xdd, 0xc6, - 0xec, 0xa9, 0x94, 0x9f, 0x40, 0xeb, 0x87, 0xd0, 0xdb, 0xee, 0xcd, 0x1b, - 0x87, 0x23, 0xff, 0x76, 0xd4, 0x37, 0x8a, 0xcd, 0xb9, 0x6e, 0xd1, 0x98, - 0xf6, 0x97, 0x8d, 0xe3, 0x81, 0x6d, 0xc3, 0x4e, 0xd1, 0xa0, 0xc4, 0x9f, - 0xbd, 0x34, 0xe5, 0xe8, 0x53, 0x4f, 0xca, 0x10, 0xb5, 0xed, 0xe7, 0x16, - 0x09, 0x54, 0xde, 0x60, 0xa7, 0xd1, 0x16, 0x6e, 0x2e, 0xb7, 0xbe, 0x7a, - 0xd5, 0x9b, 0x26, 0xef, 0xe4, 0x0e, 0x77, 0xfa, 0xa9, 0xdd, 0xdc, 0xb9, - 0x88, 0x19, 0x23, 0x70, 0xc7, 0xe1, 0x60, 0xaf, 0x8c, 0x73, 0x04, 0xf7, - 0x71, 0x17, 0x81, 0x36, 0x75, 0xbb, 0x97, 0xd7, 0x75, 0xb6, 0x8e, 0xbc, - 0xac, 0x9c, 0x6a, 0x9b, 0x24, 0x89, 0x02, 0x81, 0x80, 0x5a, 0x2b, 0xc7, - 0x6b, 0x8c, 0x65, 0xdb, 0x04, 0x73, 0xab, 0x25, 0xe1, 0x5b, 0xbc, 0x3c, - 0xcf, 0x5a, 0x3c, 0x04, 0xae, 0x97, 0x2e, 0xfd, 0xa4, 0x97, 0x1f, 0x05, - 0x17, 0x27, 0xac, 0x7c, 0x30, 0x85, 0xb4, 0x82, 0x3f, 0x5b, 0xb7, 0x94, - 0x3b, 0x7f, 0x6c, 0x0c, 0xc7, 0x16, 0xc6, 0xa0, 0xbd, 0x80, 0xb0, 0x81, - 0xde, 0xa0, 0x23, 0xa6, 0xf6, 0x75, 0x33, 0x51, 0x35, 0xa2, 0x75, 0x55, - 0x70, 0x4d, 0x42, 0xbb, 0xcf, 0x54, 0xe4, 0xdb, 0x2d, 0x88, 0xa0, 0x7a, - 0xf2, 0x17, 0xa7, 0xdd, 0x13, 0x44, 0x9f, 0x5f, 0x6b, 0x2c, 0x42, 0x42, - 0x8b, 0x13, 0x4d, 0xf9, 0x5b, 0xf8, 0x33, 0x42, 0xd9, 0x9e, 0x50, 0x1c, - 0x7c, 0xbc, 0xfa, 0x62, 0x85, 0x0b, 0xcf, 0x99, 0xda, 0x9e, 0x04, 0x90, - 0xb2, 0xc6, 0xb2, 0x0a, 0x2a, 0x7c, 0x6d, 0x6a, 0x40, 0xfc, 0xf5, 0x50, - 0x98, 0x46, 0x89, 0x82, 0x40, -}; - -#ifdef __cplusplus -extern "C" -#endif -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) -{ - int res; - gnutls_datum_t cert, key; - gnutls_session_t session; - gnutls_certificate_credentials_t xcred; - - int socket_fds[2]; - res = socketpair(AF_UNIX, SOCK_STREAM, 0, socket_fds); - assert(res >= 0); - ssize_t send_res = send(socket_fds[1], data, size, 0); - assert(send_res == size); - res = shutdown(socket_fds[1], SHUT_WR); - assert(res == 0); - - res = gnutls_init(&session, GNUTLS_SERVER); - assert(res >= 0); - - res = gnutls_certificate_allocate_credentials(&xcred); - assert(res >= 0); - - cert.data = (unsigned char *)kCertificateDER; - cert.size = sizeof(kCertificateDER); - key.data = (unsigned char *)kRSAPrivateKeyDER; - key.size = sizeof(kRSAPrivateKeyDER); - res = gnutls_certificate_set_x509_key_mem( - xcred, &cert, &key, GNUTLS_X509_FMT_DER); - assert(res >= 0); - res = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - assert(res >= 0); - - res = gnutls_set_default_priority(session); - assert(res >= 0); - - gnutls_transport_set_int(session, socket_fds[0]); - - do { - res = gnutls_handshake(session); - } while (res < 0 && gnutls_error_is_fatal(res) == 0); - if (res >= 0) { - while (true) { - char buf[16384]; - res = gnutls_record_recv(session, buf, sizeof(buf)); - if (res <= 0) { - break; - } - } - } - - close(socket_fds[0]); - close(socket_fds[1]); - gnutls_deinit(session); - gnutls_certificate_free_credentials(xcred); - return 0; -} diff --git a/devel/fuzz/gnutls_x509_parser.in/cert0.der b/devel/fuzz/gnutls_x509_parser.in/cert0.der deleted file mode 100644 index 012cc1611d..0000000000 Binary files a/devel/fuzz/gnutls_x509_parser.in/cert0.der and /dev/null differ diff --git a/devel/fuzz/gnutls_x509_parser.in/cert1.der b/devel/fuzz/gnutls_x509_parser.in/cert1.der deleted file mode 100644 index 221617d65b..0000000000 Binary files a/devel/fuzz/gnutls_x509_parser.in/cert1.der and /dev/null differ diff --git a/devel/fuzz/gnutls_x509_parser.in/cert7.der b/devel/fuzz/gnutls_x509_parser.in/cert7.der deleted file mode 100644 index 5bd40111e3..0000000000 Binary files a/devel/fuzz/gnutls_x509_parser.in/cert7.der and /dev/null differ diff --git a/devel/fuzz/gnutls_x509_parser.in/cert9.der b/devel/fuzz/gnutls_x509_parser.in/cert9.der deleted file mode 100644 index e6329f6acb..0000000000 Binary files a/devel/fuzz/gnutls_x509_parser.in/cert9.der and /dev/null differ diff --git a/devel/fuzz/gnutls_x509_parser_fuzzer.cc b/devel/fuzz/gnutls_x509_parser_fuzzer.cc deleted file mode 100644 index 28dc3397fc..0000000000 --- a/devel/fuzz/gnutls_x509_parser_fuzzer.cc +++ /dev/null @@ -1,47 +0,0 @@ -/* -# Copyright 2016 Google Inc. -# -# 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. -# -################################################################################ -*/ - -#include -#include - -#include -#include - - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - gnutls_datum_t raw; - gnutls_datum_t out; - gnutls_x509_crt_t crt; - int ret; - - raw.data = (unsigned char *)data; - raw.size = size; - - ret = gnutls_x509_crt_init(&crt); - assert(ret >= 0); - - ret = gnutls_x509_crt_import(crt, &raw, GNUTLS_X509_FMT_DER); - if (ret >= 0) { - ret = gnutls_x509_crt_print(crt, GNUTLS_CRT_PRINT_FULL, &out); - assert(ret >= 0); - gnutls_free(out.data); - } - - gnutls_x509_crt_deinit(crt); - return 0; -} diff --git a/devel/fuzz/main.c b/devel/fuzz/main.c deleted file mode 100644 index 602943014c..0000000000 --- a/devel/fuzz/main.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2017 Nikos Mavrogiannopoulos - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include - -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); - -int main(int argc, char **argv) -{ - int ret; - unsigned char buf[64*1024]; - - ret = fread(buf, 1, sizeof(buf), stdin); - if (ret <= 0) - return 0; - - return LLVMFuzzerTestOneInput(buf, ret); -} diff --git a/devel/fuzz/run-afl.sh b/devel/fuzz/run-afl.sh deleted file mode 100755 index 95c6c43099..0000000000 --- a/devel/fuzz/run-afl.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh -# Copyright (C) 2017 Red Hat, Inc. -# -# This file is part of GnuTLS. -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see - -srcdir="${srcdir:-.}" -export LD_LIBRARY_PATH=${srcdir}/../../lib/.libs/ - -cat ${srcdir}/../../config.log|grep afl-gcc >/dev/null 2>&1 -if test $? != 0;then - echo "compile first library as:" - echo "CC=afl-gcc ./configure" - exit 1 -fi - -if test -z "$1";then - echo "Usage: $0 test-case" - echo "Example: $0 gnutls_x509_parser_fuzzer" - exit 1 -fi - -rm -f $1 -CFLAGS="-g -O2" CC=afl-gcc make $1 || exit 1 - -TEST=$(echo $1|sed s/_fuzzer//) - -TMPOUT=${TEST}.$$.out -mkdir -p ${TMPOUT} -afl-fuzz -i ${TEST}.in -o ${TMPOUT} -- ./${TEST}_fuzzer - -echo "output was stored in $TMPOUT" - -exit 0 diff --git a/devel/import-ecc-from-nettle.sh b/devel/import-ecc-from-nettle.sh new file mode 100755 index 0000000000..da121786dd --- /dev/null +++ b/devel/import-ecc-from-nettle.sh @@ -0,0 +1,219 @@ +#!/bin/sh + +# This script copies the Curve448 and Ed448, GOST 34.10 implementation from the +# nettle upstream, with necessary adjustments for bundling in GnuTLS. + +set +e + +: ${srcdir=.} +SRC=$srcdir/devel/nettle +DST=$srcdir/lib/nettle/ecc + +IMPORTS=" +cnd-copy.c +curve448-eh-to-x.c +curve448.h +curve448-mul.c +curve448-mul-g.c +eccdata.c +ecc-curve448.c +ecc-add-eh.c +ecc-add-ehh.c +ecc-add-jja.c +ecc-add-jjj.c +ecc-a-to-j.c +ecc-dup-eh.c +ecc-dup-jj.c +ecc-eh-to-a.c +ecc-gost-gc256b.c +ecc-gost-gc512a.c +ecc-gostdsa-sign.c +ecc-gostdsa-verify.c +ecc-internal.h +ecc-j-to-a.c +ecc-mod-arith.c +ecc-mod.c +ecc-mod-inv.c +ecc-mul-a.c +ecc-mul-a-eh.c +ecc-mul-g.c +ecc-mul-g-eh.c +ecc-mul-m.c +ecc-random.c +ed448-shake256.c +ed448-shake256-pubkey.c +ed448-shake256-sign.c +ed448-shake256-verify.c +eddsa-compress.c +eddsa-decompress.c +eddsa-expand.c +eddsa.h +eddsa-hash.c +eddsa-internal.h +eddsa-pubkey.c +eddsa-sign.c +eddsa-verify.c +gostdsa.h +gostdsa-sign.c +gostdsa-verify.c +gostdsa-vko.c +gmp-glue.h +gmp-glue.c +nettle-write.h +sec-add-1.c +sec-tabselect.c +sha3.c +sha3.h +sha3-256.c +sha3-internal.h +sha3-permute.c +shake256.c +write-le64.c +" + +PUBLIC=" +bignum.h +dsa.h +ecc-curve.h +ecc.h +ecdsa.h +macros.h +memxor.h +nettle-meta.h +nettle-types.h +" + +test -d $DST || mkdir $DST + +for f in $IMPORTS; do + src=$SRC/$f + dst=$DST/$f + if test -f $src; then + if test -f $dst; then + echo "Replacing $dst (existing file backed up in $dst~)" + mv $dst $dst~ + else + echo "Copying file $dst" + fi + cp $src $dst + # Use for public headers. + for h in $PUBLIC; do + p=$(echo $h | sed 's/\./\\./g') + if grep '^#include "'$p'"' $dst 2>&1 >/dev/null; then + sed 's!^#include "'$p'"!#include !' $dst > $dst-t && \ + mv $dst-t $dst + fi + done + # Remove unused . + if grep '^#include ' $dst 2>&1 >/dev/null; then + if ! grep 'assert *(' $dst 2>&1 >/dev/null; then + sed '/^#include /d' $dst > $dst-t && mv $dst-t $dst + fi + fi + case $dst in + *.h) + # Rename header guard so as not to conflict with the public ones. + if grep '^#ifndef NETTLE_.*_H\(_INCLUDED\)*' $dst 2>&1 >/dev/null; then + g=$(sed -n 's/^#ifndef NETTLE_\(.*_H\(_INCLUDED\)*\)/\1/p' $dst) + sed 's/\(NETTLE_'$g'\)/GNUTLS_LIB_NETTLE_ECC_\1/' $dst > $dst-t && \ + mv $dst-t $dst + fi + # Add prefix to function symbols avoid clashing with the public ones. + sed -e 's/^#define \(.*\) nettle_\1/#define \1 gnutls_nettle_ecc_\1/' \ + -e 's/^#define \(.*\) _nettle_\1/#define \1 _gnutls_nettle_ecc_\1/' \ + -e 's/^#define _\(.*\) _nettle_\1/#define _\1 _gnutls_nettle_ecc_\1/' \ + -e '/^_nettle_/ { h ; s/^_nettle_\(.*\)(.*/#define _nettle_\1 _gnutls_nettle_ecc_\1/g ; p; x; }' \ + -e '/^extern const struct ecc_curve _nettle_\(.*\);/ { h ; s/.*_nettle\(.*\);/#define _nettle_\1 _gnutls_nettle_ecc_\1/ ; p; x; }' \ + -e '/^extern const struct ecc_eddsa _nettle_\(.*\);/ { h ; s/.*_nettle\(.*\);/#define _nettle_\1 _gnutls_nettle_ecc_\1/ ; p; x; }' \ + -e '/gostdsa_generate_keypair/d' \ + $dst > $dst-t && \ + mv $dst-t $dst + ;; + */eccdata.c) + sed 's/^#include "mini-gmp.c"/#include /' $dst > $dst-t && \ + mv $dst-t $dst + ;; + */ecc-curve448.c) + # The generated file is arch dependent, conditionalize the + # inclusion. + sed '/^#include "ecc-curve448\.h"/ { i\ +#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)\ +# pragma GCC diagnostic ignored "-Wunused-const-variable"\ +#endif\ +#if GMP_NUMB_BITS == 32\ +#include "ecc/ecc-curve448-32.h"\ +#elif GMP_NUMB_BITS == 64\ +#include "ecc/ecc-curve448-64.h"\ +#else\ +#error unsupported configuration\ +#endif +; d +}' $dst > $dst-t && mv $dst-t $dst + ;; + */ecc-gost-gc256b.c) + # The generated file is arch dependent, conditionalize the + # inclusion. + sed -e '/^#include "ecc-gost-gc256b\.h"/ { i\ +#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)\ +# pragma GCC diagnostic ignored "-Wunused-const-variable"\ +#endif\ +#if GMP_NUMB_BITS == 32\ +#include "ecc/ecc-gost-gc256b-32.h"\ +#elif GMP_NUMB_BITS == 64\ +#include "ecc/ecc-gost-gc256b-64.h"\ +#else\ +#error unsupported configuration\ +#endif +; d +}' \ + -e '/#include "ecc-internal.h"/ { i\ +#include "ecc-gost-curve.h" +; }' \ + $dst > $dst-t && mv $dst-t $dst + ;; + */ecc-gost-gc512a.c) + # The generated file is arch dependent, conditionalize the + # inclusion. + sed -e '/^#include "ecc-gost-gc512a\.h"/ { i\ +#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)\ +# pragma GCC diagnostic ignored "-Wunused-const-variable"\ +#endif\ +#if GMP_NUMB_BITS == 32\ +#include "ecc/ecc-gost-gc512a-32.h"\ +#elif GMP_NUMB_BITS == 64\ +#include "ecc/ecc-gost-gc512a-64.h"\ +#else\ +#error unsupported configuration\ +#endif +; d +}' \ + -e '/#include "ecc-internal.h"/ { i\ +#include "ecc-gost-curve.h" +; }' \ + $dst > $dst-t && mv $dst-t $dst + ;; + */eddsa-hash.c) + # Known to be unnecessary. + sed '/^#include "nettle-internal\.h"/d' $dst > $dst-t && mv $dst-t $dst + ;; + */ecc-add-eh*.c) + # Suppress whitespace errors in 'make syntax-check'. + sed 's/ * / /g' $dst > $dst-t && mv $dst-t $dst + ;; + */ecc-random.c ) + sed \ + -e 's/"nettle-internal\.h"/"nettle-alloca.h"/' \ + -e 's/^ & (mpn_sub_n/ \& (int)(mpn_sub_n/' \ + $dst > $dst-t && mv $dst-t $dst + ;; + */gostdsa-sign.c) + sed \ + -e 's/"nettle-internal\.h"/"nettle-alloca.h"/' \ + $dst > $dst-t && mv $dst-t $dst + ;; + esac + else + echo "Error: $src not found" 1>&2 + exit 1 + fi +done diff --git a/devel/import-from-nettle.sh b/devel/import-from-nettle.sh new file mode 100755 index 0000000000..3867f9e2a7 --- /dev/null +++ b/devel/import-from-nettle.sh @@ -0,0 +1,136 @@ +#!/bin/sh + +# This script copies files from the nettle upstream, with necessary +# adjustments for bundling in GnuTLS. + +set +e + +: ${srcdir=.} +SRC=$srcdir/devel/nettle +DST=$srcdir/lib/nettle/backport + +IMPORTS=" +block-internal.h +cfb.c +cfb.h +cmac.c +cmac.h +cmac-aes128.c +cmac-aes256.c +chacha-core-internal.c +chacha-crypt.c +chacha-internal.h +chacha-poly1305.c +chacha-poly1305.h +chacha-set-key.c +chacha-set-nonce.c +chacha.h +poly1305-internal.c +poly1305-internal.h +poly1305.h +xts.c +xts.h +xts-aes128.c +xts-aes256.c +siv-cmac.c +siv-cmac.h +siv-cmac-aes128.c +siv-cmac-aes256.c +" + +PUBLIC=" +aes.h +bignum.h +ctr.h +des.h +ecc-curve.h +ecc.h +macros.h +memops.h +memxor.h +nettle-meta.h +nettle-types.h +" + +test -d $DST || mkdir $DST + +for f in $IMPORTS; do + src=$SRC/$f + dst=$DST/$f + if test -f $src; then + if test -f $dst; then + echo "Replacing $dst (existing file backed up in $dst~)" + mv $dst $dst~ + else + echo "Copying file $dst" + fi + cp $src $dst + # Use for public headers. + for h in $PUBLIC; do + p=$(echo $h | sed 's/\./\\./g') + if grep '^#include "'$p'"' $dst 2>&1 >/dev/null; then + sed 's!^#include "'$p'"!#include !' $dst > $dst-t && \ + mv $dst-t $dst + fi + done + # Remove unused . + if grep '^#include ' $dst 2>&1 >/dev/null; then + if ! grep 'assert *(' $dst 2>&1 >/dev/null; then + sed '/^#include /d' $dst > $dst-t && mv $dst-t $dst + fi + fi + case $dst in + *.h) + # Rename header guard so as not to conflict with the public ones. + if grep '^#ifndef NETTLE_.*_H\(_INCLUDED\)*' $dst 2>&1 >/dev/null; then + g=$(sed -n 's/^#ifndef NETTLE_\(.*_H\(_INCLUDED\)*\)/\1/p' $dst) + sed 's/\(NETTLE_'$g'\)/GNUTLS_LIB_NETTLE_BACKPORT_\1/' $dst > $dst-t && \ + mv $dst-t $dst + fi + ;; + esac + case $dst in + *.h) + # Add prefix to function symbols avoid clashing with the public ones. + sed -e 's/^#define \(.*\) nettle_\1/#define \1 gnutls_nettle_backport_\1/' \ + -e 's/^#define _\(.*\) _nettle_\1/#define _\1 _gnutls_nettle_backport_\1/' \ + -e 's/^#define \(.*\) _nettle_\1/#define \1 _gnutls_nettle_backport_\1/' \ + $dst > $dst-t && \ + mv $dst-t $dst + ;; + esac + case $dst in + */cfb.c | */cmac.c | */xts.c | */siv-cmac.c) + sed \ + -e 's/"nettle-internal\.h"/"nettle-alloca.h"/' \ + $dst > $dst-t && mv $dst-t $dst + ;; + esac + case $dst in + */*.[ch]) + sed \ + -e '/^#include /a\ +#include "block8.h" +' \ + $dst > $dst-t && mv $dst-t $dst + ;; + esac + case $dst in + */siv-cmac*.[ch]) + sed \ + -e '/^#include "cmac\.h"/ { i\ +#ifdef HAVE_NETTLE_CMAC128_UPDATE\ +#include \ +#else\ +#include "cmac.h"\ +#endif +; d +}' \ + $dst > $dst-t && mv $dst-t $dst + ;; + esac + else + echo "Error: $src not found" 1>&2 + exit 1 + fi +done diff --git a/devel/import-minitasn1.sh b/devel/import-minitasn1.sh new file mode 100755 index 0000000000..d8b48daac8 --- /dev/null +++ b/devel/import-minitasn1.sh @@ -0,0 +1,67 @@ +#!/bin/sh + +# This script copies files from the libtasn1 upstream, with necessary +# adjustments for bundling in GnuTLS. + +set +e + +: ${srcdir=.} +SRC=$srcdir/devel/libtasn1/lib +DST=$srcdir/lib/minitasn1 + +IMPORTS=" +coding.c +decoding.c +element.c +element.h +errors.c +gstr.c +gstr.h +int.h +parser_aux.c +parser_aux.h +structure.c +structure.h +version.c +libtasn1.h +" + +test -d $DST || mkdir $DST + +ASN1_VERSION=`grep AC_INIT $SRC/../configure.ac | sed -e 's/.*\],\[\([^]]*\)\],\[.*/\1/g'` +ASN1_VERSION_MAJOR=`echo ${ASN1_VERSION} | cut -d . -f 1` +ASN1_VERSION_MINOR=`echo ${ASN1_VERSION} | cut -d . -f 2` +ASN1_VERSION_PATCH=`echo ${ASN1_VERSION} | cut -d . -f 3` +ASN1_VERSION_NUMBER=`printf '0x%02x%02x%02x' $ASN1_VERSION_MAJOR $ASN1_VERSION_MINOR $ASN1_VERSION_PATCH` + +for f in $IMPORTS; do + src=$SRC/$f + dst=$DST/$f + if test "$f" = "libtasn1.h"; then + src=$SRC/includes/$f.in + fi + if test -f $src; then + if test -f $dst; then + echo "Replacing $dst (existing file backed up in $dst~)" + mv $dst $dst~ + else + echo "Copying file $dst" + fi + cp $src $dst + case $dst in + */libtasn1.h) + sed \ + -e 's/@VERSION@/'${ASN1_VERSION}'/g' \ + -e 's/@ASN1_VERSION_MAJOR@/'${ASN1_VERSION_MAJOR}'/g' \ + -e 's/@ASN1_VERSION_MINOR@/'${ASN1_VERSION_MINOR}'/g' \ + -e 's/@ASN1_VERSION_PATCH@/'${ASN1_VERSION_PATCH}'/g' \ + -e 's/@ASN1_VERSION_NUMBER@/'${ASN1_VERSION_NUMBER}'/g' \ + $dst > $dst-t && \ + mv $dst-t $dst + ;; + esac + else + echo "Error: $src not found" 1>&2 + exit 1 + fi +done diff --git a/devel/libdane-3.6.12-x86_64.abi b/devel/libdane-3.6.12-x86_64.abi new file mode 100644 index 0000000000..903a3b1d22 --- /dev/null +++ b/devel/libdane-3.6.12-x86_64.abi @@ -0,0 +1,2991 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/devel/libdane-latest-x86_64.abi b/devel/libdane-latest-x86_64.abi new file mode 100644 index 0000000000..cf25f40e1e --- /dev/null +++ b/devel/libdane-latest-x86_64.abi @@ -0,0 +1,3019 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/devel/libgnutls-3.6.12-x86_64.abi b/devel/libgnutls-3.6.12-x86_64.abi new file mode 100644 index 0000000000..3e0142397c --- /dev/null +++ b/devel/libgnutls-3.6.12-x86_64.abi @@ -0,0 +1,19953 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/devel/libgnutls-latest-x86_64.abi b/devel/libgnutls-latest-x86_64.abi new file mode 100644 index 0000000000..8e5e787950 --- /dev/null +++ b/devel/libgnutls-latest-x86_64.abi @@ -0,0 +1,20512 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/devel/libgnutls.abignore b/devel/libgnutls.abignore new file mode 100644 index 0000000000..2156ed39a4 --- /dev/null +++ b/devel/libgnutls.abignore @@ -0,0 +1,56 @@ +# Syntax is documented at +# https://sourceware.org/libabigail/manual/libabigail-concepts.html#suppr-spec-label + +[suppress_function] +symbol_version = GNUTLS_PRIVATE_3_4 + +[suppress_function] +name_regexp = _gnutls* + +[suppress_variable] +symbol_version = GNUTLS_PRIVATE_3_4 + +[suppress_type] +name = gnutls_x509_subject_alt_name_t +changed_enumerators = GNUTLS_SAN_MAX + +[suppress_type] +name = gnutls_alert_description_t +changed_enumerators = GNUTLS_A_NO_APPLICATION_PROTOCOL + +[suppress_type] +name = gnutls_protocol_t +changed_enumerators = GNUTLS_TLS_VERSION_MAX + +[suppress_type] +name = gnutls_protocol_t +changed_enumerators = GNUTLS_DTLS_VERSION_MAX + +[suppress_type] +name = gnutls_certificate_type_t +changed_enumerators = GNUTLS_CRT_MAX + +[suppress_type] +name = gnutls_pk_algorithm_t +changed_enumerators = GNUTLS_PK_MAX + +[suppress_type] +name = gnutls_sign_algorithm_t +changed_enumerators = GNUTLS_SIGN_MAX + +[suppress_type] +name = gnutls_ecc_curve_t +changed_enumerators = GNUTLS_ECC_CURVE_MAX + +[suppress_type] +name = gnutls_group_t +changed_enumerators = GNUTLS_GROUP_MAX + +[suppress_type] +name = gnutls_sec_param_t +changed_enumerators = GNUTLS_SEC_PARAM_MAX + +# return type changed from int to unsigned int; no ABI change +[suppress_function] +name = gnutls_ocsp_status_request_is_checked +return_type_name = unsigned int diff --git a/devel/libtasn1 b/devel/libtasn1 new file mode 160000 index 0000000000..7820459382 --- /dev/null +++ b/devel/libtasn1 @@ -0,0 +1 @@ +Subproject commit 78204593822b4c1a8e0ca87f57c48e5936b0fe2c diff --git a/devel/lsan.supp b/devel/lsan.supp new file mode 100644 index 0000000000..05541f71a1 --- /dev/null +++ b/devel/lsan.supp @@ -0,0 +1 @@ +leak:__gmp_default_allocate diff --git a/devel/nettle b/devel/nettle new file mode 160000 index 0000000000..228ae2618c --- /dev/null +++ b/devel/nettle @@ -0,0 +1 @@ +Subproject commit 228ae2618cfeb84b8d4b189cc428fc55fac462e8 diff --git a/devel/openssl b/devel/openssl index 6b02b586c3..7216e9a20a 160000 --- a/devel/openssl +++ b/devel/openssl @@ -1 +1 @@ -Subproject commit 6b02b586c35359e338cfa151341e49aeb01590d0 +Subproject commit 7216e9a20aee620d85185a6ddb8caa30f11f2192 diff --git a/devel/perlasm/cpuid-x86.pl b/devel/perlasm/cpuid-x86.pl deleted file mode 100644 index fa9c14e577..0000000000 --- a/devel/perlasm/cpuid-x86.pl +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/perl -# -# ==================================================================== -# Written by Nikos Mavrogiannopoulos -# Placed under the LGPL -# ==================================================================== -# - -$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; -push(@INC,"${dir}","${dir}../../crypto/perlasm"); -require "x86asm.pl"; - -&asm_init($ARGV[0],$0); - -&function_begin_B("gnutls_cpuid"); - &push ("ebp"); - &mov ("ebp", "esp"); - &sub ("esp", 12); - &mov (&DWP(0,"esp"), "ebx"); - &mov ("eax",&DWP(8,"ebp")); - &mov (&DWP(4,"esp"), "esi"); - &mov (&DWP(8,"esp"), "edi"); - &push ("ebx"); - &cpuid (); - &mov ("edi", "ebx"); - &pop ("ebx"); - &mov ("esi","edx"); - &mov ("edx",&DWP(12,"ebp")); - &mov (&DWP(0,"edx"), "eax"); - &mov ("eax",&DWP(16,"ebp")); - &mov (&DWP(0,"eax"), "edi"); - &mov ("eax",&DWP(20,"ebp")); - &mov (&DWP(0,"eax"), "ecx"); - &mov ("eax",&DWP(24,"ebp")); - &mov (&DWP(0,"eax"), "esi"); - &mov ("ebx",&DWP(0,"esp")); - &mov ("esi",&DWP(4,"esp")); - &mov ("edi",&DWP(8,"esp")); - &mov ("esp","ebp"); - &pop ("ebp"); - &ret (); -&function_end_B("gnutls_cpuid"); - -&function_begin_B("gnutls_have_cpuid"); - &pushf (); - &pop ("eax"); - &or ("eax",0x200000); - &push ("eax"); - &popf (); - &pushf (); - &pop ("eax"); - &and ("eax",0x200000); - &ret (); -&function_end_B("gnutls_have_cpuid"); - -&asciz("CPUID for x86"); -&asm_finish(); diff --git a/devel/perlasm/cpuid-x86.pl.license b/devel/perlasm/cpuid-x86.pl.license deleted file mode 120000 index 6879a72497..0000000000 --- a/devel/perlasm/cpuid-x86.pl.license +++ /dev/null @@ -1 +0,0 @@ -license-gnutls.txt \ No newline at end of file diff --git a/devel/perlasm/cpuid-x86_64.pl b/devel/perlasm/cpuid-x86_64.pl deleted file mode 100644 index a6bb30ed7e..0000000000 --- a/devel/perlasm/cpuid-x86_64.pl +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env perl -# -# ==================================================================== -# Written by Nikos Mavrogiannopoulos -# Based on e_padlock-x86_64 -# ==================================================================== -# - -$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}../../crypto/perlasm/x86_64-xlate.pl" and -f $xlate) or -die "can't locate x86_64-xlate.pl"; - -open STDOUT,"| $^X $xlate $flavour $output"; - -$code=".text\n"; - -($arg1,$arg2,$arg3,$arg4)=$win64?("%rcx","%rdx","%r8", "%r9") : # Win64 order - ("%rdi","%rsi","%rdx","%rcx"); # Unix order - - -$code.=<<___; -.globl gnutls_cpuid -.type gnutls_cpuid,\@function -.align 16 -gnutls_cpuid: - pushq %rbp - movq %rsp, %rbp - pushq %rbx - movl %edi, -12(%rbp) - movq %rsi, -24(%rbp) - movq %rdx, -32(%rbp) - movq %rcx, -40(%rbp) - movq %r8, -48(%rbp) - movl -12(%rbp), %eax - movl %eax, -60(%rbp) - movl -60(%rbp), %eax - cpuid - movl %edx, -56(%rbp) - movl %ecx, %esi - movl %eax, -52(%rbp) - movq -24(%rbp), %rax - movl -52(%rbp), %edx - movl %edx, (%rax) - movq -32(%rbp), %rax - movl %ebx, (%rax) - movq -40(%rbp), %rax - movl %esi, (%rax) - movq -48(%rbp), %rax - movl -56(%rbp), %ecx - movl %ecx, (%rax) - popq %rbx - leave - ret -.size gnutls_cpuid,.-gnutls_cpuid -___ - -$code =~ s/\`([^\`]*)\`/eval($1)/gem; - -print $code; - -close STDOUT; - diff --git a/devel/perlasm/cpuid-x86_64.pl.license b/devel/perlasm/cpuid-x86_64.pl.license deleted file mode 120000 index 6879a72497..0000000000 --- a/devel/perlasm/cpuid-x86_64.pl.license +++ /dev/null @@ -1 +0,0 @@ -license-gnutls.txt \ No newline at end of file diff --git a/devel/perlasm/license-gnutls.txt b/devel/perlasm/license-gnutls.txt index 70bded0a16..18eab829eb 100644 --- a/devel/perlasm/license-gnutls.txt +++ b/devel/perlasm/license-gnutls.txt @@ -17,7 +17,7 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see . +# along with this program. If not, see . # # *** This file is auto-generated *** # diff --git a/devel/perlasm/sha256-ssse3-x86_64.pl b/devel/perlasm/sha256-ssse3-x86_64.pl new file mode 120000 index 0000000000..126162756a --- /dev/null +++ b/devel/perlasm/sha256-ssse3-x86_64.pl @@ -0,0 +1 @@ +sha512-ssse3-x86_64.pl \ No newline at end of file diff --git a/devel/perlasm/sha256-ssse3-x86_64.pl.license b/devel/perlasm/sha256-ssse3-x86_64.pl.license new file mode 120000 index 0000000000..614714ae16 --- /dev/null +++ b/devel/perlasm/sha256-ssse3-x86_64.pl.license @@ -0,0 +1 @@ +sha512-ssse3-x86_64.pl.license \ No newline at end of file diff --git a/symbols.last b/devel/symbols.last similarity index 88% rename from symbols.last rename to devel/symbols.last index 8db4867940..c5c279c42a 100644 --- a/symbols.last +++ b/devel/symbols.last @@ -1,8 +1,23 @@ GNUTLS_3_4@GNUTLS_3_4 +GNUTLS_3_6_0@GNUTLS_3_6_0 +GNUTLS_3_6_10@GNUTLS_3_6_10 +GNUTLS_3_6_12@GNUTLS_3_6_12 +GNUTLS_3_6_13@GNUTLS_3_6_13 +GNUTLS_3_6_14@GNUTLS_3_6_14 +GNUTLS_3_6_2@GNUTLS_3_6_2 +GNUTLS_3_6_3@GNUTLS_3_6_3 +GNUTLS_3_6_4@GNUTLS_3_6_4 +GNUTLS_3_6_5@GNUTLS_3_6_5 +GNUTLS_3_6_6@GNUTLS_3_6_6 +GNUTLS_3_6_8@GNUTLS_3_6_8 +GNUTLS_3_6_9@GNUTLS_3_6_9 _gnutls_global_init_skip@GNUTLS_3_4 gnutls_aead_cipher_decrypt@GNUTLS_3_4 +gnutls_aead_cipher_decryptv2@GNUTLS_3_6_10 gnutls_aead_cipher_deinit@GNUTLS_3_4 gnutls_aead_cipher_encrypt@GNUTLS_3_4 +gnutls_aead_cipher_encryptv2@GNUTLS_3_6_10 +gnutls_aead_cipher_encryptv@GNUTLS_3_6_3 gnutls_aead_cipher_init@GNUTLS_3_4 gnutls_alert_get@GNUTLS_3_4 gnutls_alert_get_name@GNUTLS_3_4 @@ -19,9 +34,17 @@ gnutls_anon_set_params_function@GNUTLS_3_4 gnutls_anon_set_server_dh_params@GNUTLS_3_4 gnutls_anon_set_server_known_dh_params@GNUTLS_3_4 gnutls_anon_set_server_params_function@GNUTLS_3_4 +gnutls_anti_replay_deinit@GNUTLS_3_6_5 +gnutls_anti_replay_enable@GNUTLS_3_6_5 +gnutls_anti_replay_init@GNUTLS_3_6_5 +gnutls_anti_replay_set_add_function@GNUTLS_3_6_5 +gnutls_anti_replay_set_ptr@GNUTLS_3_6_5 +gnutls_anti_replay_set_window@GNUTLS_3_6_5 gnutls_auth_client_get_type@GNUTLS_3_4 gnutls_auth_get_type@GNUTLS_3_4 gnutls_auth_server_get_type@GNUTLS_3_4 +gnutls_base64_decode2@GNUTLS_3_6_0 +gnutls_base64_encode2@GNUTLS_3_6_0 gnutls_buffer_append_data@GNUTLS_3_4 gnutls_bye@GNUTLS_3_4 gnutls_calloc@GNUTLS_3_4 @@ -36,6 +59,7 @@ gnutls_certificate_free_crls@GNUTLS_3_4 gnutls_certificate_free_keys@GNUTLS_3_4 gnutls_certificate_get_crt_raw@GNUTLS_3_4 gnutls_certificate_get_issuer@GNUTLS_3_4 +gnutls_certificate_get_ocsp_expiration@GNUTLS_3_6_3 gnutls_certificate_get_openpgp_crt@GNUTLS_3_4 gnutls_certificate_get_openpgp_key@GNUTLS_3_4 gnutls_certificate_get_ours@GNUTLS_3_4 @@ -51,9 +75,11 @@ gnutls_certificate_set_dh_params@GNUTLS_3_4 gnutls_certificate_set_flags@GNUTLS_3_4 gnutls_certificate_set_key@GNUTLS_3_4 gnutls_certificate_set_known_dh_params@GNUTLS_3_4 +gnutls_certificate_set_ocsp_status_request_file2@GNUTLS_3_6_3 gnutls_certificate_set_ocsp_status_request_file@GNUTLS_3_4 gnutls_certificate_set_ocsp_status_request_function2@GNUTLS_3_4 gnutls_certificate_set_ocsp_status_request_function@GNUTLS_3_4 +gnutls_certificate_set_ocsp_status_request_mem@GNUTLS_3_6_3 gnutls_certificate_set_openpgp_key@GNUTLS_3_4 gnutls_certificate_set_openpgp_key_file2@GNUTLS_3_4 gnutls_certificate_set_openpgp_key_file@GNUTLS_3_4 @@ -63,7 +89,10 @@ gnutls_certificate_set_openpgp_keyring_file@GNUTLS_3_4 gnutls_certificate_set_openpgp_keyring_mem@GNUTLS_3_4 gnutls_certificate_set_params_function@GNUTLS_3_4 gnutls_certificate_set_pin_function@GNUTLS_3_4 +gnutls_certificate_set_rawpk_key_file@GNUTLS_3_6_6 +gnutls_certificate_set_rawpk_key_mem@GNUTLS_3_6_6 gnutls_certificate_set_retrieve_function2@GNUTLS_3_4 +gnutls_certificate_set_retrieve_function3@GNUTLS_3_6_3 gnutls_certificate_set_retrieve_function@GNUTLS_3_4 gnutls_certificate_set_trust_list@GNUTLS_3_4 gnutls_certificate_set_verify_flags@GNUTLS_3_4 @@ -84,10 +113,13 @@ gnutls_certificate_set_x509_trust@GNUTLS_3_4 gnutls_certificate_set_x509_trust_dir@GNUTLS_3_4 gnutls_certificate_set_x509_trust_file@GNUTLS_3_4 gnutls_certificate_set_x509_trust_mem@GNUTLS_3_4 +gnutls_certificate_type_get2@GNUTLS_3_6_4 gnutls_certificate_type_get@GNUTLS_3_4 gnutls_certificate_type_get_id@GNUTLS_3_4 gnutls_certificate_type_get_name@GNUTLS_3_4 gnutls_certificate_type_list@GNUTLS_3_4 +gnutls_certificate_verification_profile_get_id@GNUTLS_3_6_12 +gnutls_certificate_verification_profile_get_name@GNUTLS_3_6_12 gnutls_certificate_verification_status_print@GNUTLS_3_4 gnutls_certificate_verify_peers2@GNUTLS_3_4 gnutls_certificate_verify_peers3@GNUTLS_3_4 @@ -124,6 +156,7 @@ gnutls_crypto_register_cipher@GNUTLS_3_4 gnutls_crypto_register_digest@GNUTLS_3_4 gnutls_crypto_register_mac@GNUTLS_3_4 gnutls_db_check_entry@GNUTLS_3_4 +gnutls_db_check_entry_expire_time@GNUTLS_3_6_5 gnutls_db_check_entry_time@GNUTLS_3_4 gnutls_db_get_default_cache_expiration@GNUTLS_3_4 gnutls_db_get_ptr@GNUTLS_3_4 @@ -134,6 +167,8 @@ gnutls_db_set_remove_function@GNUTLS_3_4 gnutls_db_set_retrieve_function@GNUTLS_3_4 gnutls_db_set_store_function@GNUTLS_3_4 gnutls_decode_ber_digest_info@GNUTLS_3_4 +gnutls_decode_gost_rs_value@GNUTLS_3_6_3 +gnutls_decode_rs_value@GNUTLS_3_6_0 gnutls_deinit@GNUTLS_3_4 gnutls_dh_get_group@GNUTLS_3_4 gnutls_dh_get_peers_public_bits@GNUTLS_3_4 @@ -149,6 +184,7 @@ gnutls_dh_params_generate2@GNUTLS_3_4 gnutls_dh_params_import_dsa@GNUTLS_3_4 gnutls_dh_params_import_pkcs3@GNUTLS_3_4 gnutls_dh_params_import_raw2@GNUTLS_3_4 +gnutls_dh_params_import_raw3@GNUTLS_3_6_8 gnutls_dh_params_import_raw@GNUTLS_3_4 gnutls_dh_params_init@GNUTLS_3_4 gnutls_dh_set_prime_bits@GNUTLS_3_4 @@ -173,28 +209,43 @@ gnutls_ecc_curve_get_pk@GNUTLS_3_4 gnutls_ecc_curve_get_size@GNUTLS_3_4 gnutls_ecc_curve_list@GNUTLS_3_4 gnutls_encode_ber_digest_info@GNUTLS_3_4 +gnutls_encode_gost_rs_value@GNUTLS_3_6_3 +gnutls_encode_rs_value@GNUTLS_3_6_0 gnutls_error_is_fatal@GNUTLS_3_4 gnutls_error_to_alert@GNUTLS_3_4 gnutls_est_record_overhead_size@GNUTLS_3_4 +gnutls_ext_get_current_msg@GNUTLS_3_6_3 gnutls_ext_get_data@GNUTLS_3_4 +gnutls_ext_get_name2@GNUTLS_3_6_14 gnutls_ext_get_name@GNUTLS_3_4 +gnutls_ext_raw_parse@GNUTLS_3_6_3 gnutls_ext_register@GNUTLS_3_4 gnutls_ext_set_data@GNUTLS_3_4 gnutls_ffdhe_2048_group_generator@GNUTLS_3_4 gnutls_ffdhe_2048_group_prime@GNUTLS_3_4 +gnutls_ffdhe_2048_group_q@GNUTLS_3_6_8 gnutls_ffdhe_2048_key_bits@GNUTLS_3_4 gnutls_ffdhe_3072_group_generator@GNUTLS_3_4 gnutls_ffdhe_3072_group_prime@GNUTLS_3_4 +gnutls_ffdhe_3072_group_q@GNUTLS_3_6_8 gnutls_ffdhe_3072_key_bits@GNUTLS_3_4 gnutls_ffdhe_4096_group_generator@GNUTLS_3_4 gnutls_ffdhe_4096_group_prime@GNUTLS_3_4 +gnutls_ffdhe_4096_group_q@GNUTLS_3_6_8 gnutls_ffdhe_4096_key_bits@GNUTLS_3_4 +gnutls_ffdhe_6144_group_generator@GNUTLS_3_6_4 +gnutls_ffdhe_6144_group_prime@GNUTLS_3_6_4 +gnutls_ffdhe_6144_group_q@GNUTLS_3_6_8 +gnutls_ffdhe_6144_key_bits@GNUTLS_3_6_4 gnutls_ffdhe_8192_group_generator@GNUTLS_3_4 gnutls_ffdhe_8192_group_prime@GNUTLS_3_4 +gnutls_ffdhe_8192_group_q@GNUTLS_3_6_8 gnutls_ffdhe_8192_key_bits@GNUTLS_3_4 gnutls_fingerprint@GNUTLS_3_4 gnutls_fips140_mode_enabled@GNUTLS_3_4 +gnutls_fips140_set_mode@GNUTLS_3_6_3 gnutls_free@GNUTLS_3_4 +gnutls_get_system_config_file@GNUTLS_3_6_9 gnutls_global_deinit@GNUTLS_3_4 gnutls_global_init@GNUTLS_3_4 gnutls_global_set_audit_log_function@GNUTLS_3_4 @@ -203,6 +254,12 @@ gnutls_global_set_log_level@GNUTLS_3_4 gnutls_global_set_mem_functions@GNUTLS_3_4 gnutls_global_set_mutex@GNUTLS_3_4 gnutls_global_set_time_function@GNUTLS_3_4 +gnutls_gost_paramset_get_name@GNUTLS_3_6_3 +gnutls_gost_paramset_get_oid@GNUTLS_3_6_3 +gnutls_group_get@GNUTLS_3_6_0 +gnutls_group_get_id@GNUTLS_3_6_0 +gnutls_group_get_name@GNUTLS_3_6_0 +gnutls_group_list@GNUTLS_3_6_0 gnutls_handshake@GNUTLS_3_4 gnutls_handshake_description_get_name@GNUTLS_3_4 gnutls_handshake_get_last_in@GNUTLS_3_4 @@ -214,6 +271,7 @@ gnutls_handshake_set_private_extensions@GNUTLS_3_4 gnutls_handshake_set_random@GNUTLS_3_4 gnutls_handshake_set_timeout@GNUTLS_3_4 gnutls_hash@GNUTLS_3_4 +gnutls_hash_copy@GNUTLS_3_6_9 gnutls_hash_deinit@GNUTLS_3_4 gnutls_hash_fast@GNUTLS_3_4 gnutls_hash_get_len@GNUTLS_3_4 @@ -230,9 +288,13 @@ gnutls_hex_decode2@GNUTLS_3_4 gnutls_hex_decode@GNUTLS_3_4 gnutls_hex_encode2@GNUTLS_3_4 gnutls_hex_encode@GNUTLS_3_4 +gnutls_hkdf_expand@GNUTLS_3_6_13 +gnutls_hkdf_extract@GNUTLS_3_6_13 gnutls_hmac@GNUTLS_3_4 +gnutls_hmac_copy@GNUTLS_3_6_9 gnutls_hmac_deinit@GNUTLS_3_4 gnutls_hmac_fast@GNUTLS_3_4 +gnutls_hmac_get_key_size@GNUTLS_3_6_12 gnutls_hmac_get_len@GNUTLS_3_4 gnutls_hmac_init@GNUTLS_3_4 gnutls_hmac_output@GNUTLS_3_4 @@ -271,6 +333,7 @@ gnutls_ocsp_req_set_extension@GNUTLS_3_4 gnutls_ocsp_req_set_nonce@GNUTLS_3_4 gnutls_ocsp_resp_check_crt@GNUTLS_3_4 gnutls_ocsp_resp_deinit@GNUTLS_3_4 +gnutls_ocsp_resp_export2@GNUTLS_3_6_3 gnutls_ocsp_resp_export@GNUTLS_3_4 gnutls_ocsp_resp_get_certs@GNUTLS_3_4 gnutls_ocsp_resp_get_extension@GNUTLS_3_4 @@ -285,16 +348,20 @@ gnutls_ocsp_resp_get_signature_algorithm@GNUTLS_3_4 gnutls_ocsp_resp_get_single@GNUTLS_3_4 gnutls_ocsp_resp_get_status@GNUTLS_3_4 gnutls_ocsp_resp_get_version@GNUTLS_3_4 +gnutls_ocsp_resp_import2@GNUTLS_3_6_3 gnutls_ocsp_resp_import@GNUTLS_3_4 gnutls_ocsp_resp_init@GNUTLS_3_4 +gnutls_ocsp_resp_list_import2@GNUTLS_3_6_3 gnutls_ocsp_resp_print@GNUTLS_3_4 gnutls_ocsp_resp_verify@GNUTLS_3_4 gnutls_ocsp_resp_verify_direct@GNUTLS_3_4 gnutls_ocsp_status_request_enable_client@GNUTLS_3_4 +gnutls_ocsp_status_request_get2@GNUTLS_3_6_3 gnutls_ocsp_status_request_get@GNUTLS_3_4 gnutls_ocsp_status_request_is_checked@GNUTLS_3_4 gnutls_oid_to_digest@GNUTLS_3_4 gnutls_oid_to_ecc_curve@GNUTLS_3_4 +gnutls_oid_to_gost_paramset@GNUTLS_3_6_3 gnutls_oid_to_mac@GNUTLS_3_4 gnutls_oid_to_pk@GNUTLS_3_4 gnutls_oid_to_sign@GNUTLS_3_4 @@ -369,14 +436,18 @@ gnutls_openpgp_send_cert@GNUTLS_3_4 gnutls_openpgp_set_recv_key_function@GNUTLS_3_4 gnutls_packet_deinit@GNUTLS_3_4 gnutls_packet_get@GNUTLS_3_4 +gnutls_pbkdf2@GNUTLS_3_6_13 gnutls_pcert_deinit@GNUTLS_3_4 gnutls_pcert_export_openpgp@GNUTLS_3_4 gnutls_pcert_export_x509@GNUTLS_3_4 gnutls_pcert_import_openpgp@GNUTLS_3_4 gnutls_pcert_import_openpgp_raw@GNUTLS_3_4 +gnutls_pcert_import_rawpk@GNUTLS_3_6_6 +gnutls_pcert_import_rawpk_raw@GNUTLS_3_6_6 gnutls_pcert_import_x509@GNUTLS_3_4 gnutls_pcert_import_x509_list@GNUTLS_3_4 gnutls_pcert_import_x509_raw@GNUTLS_3_4 +gnutls_pcert_list_import_x509_file@GNUTLS_3_6_3 gnutls_pcert_list_import_x509_raw@GNUTLS_3_4 gnutls_pem_base64_decode2@GNUTLS_3_4 gnutls_pem_base64_decode@GNUTLS_3_4 @@ -413,6 +484,7 @@ gnutls_pkcs11_obj_flags_get_str@GNUTLS_3_4 gnutls_pkcs11_obj_get_exts@GNUTLS_3_4 gnutls_pkcs11_obj_get_flags@GNUTLS_3_4 gnutls_pkcs11_obj_get_info@GNUTLS_3_4 +gnutls_pkcs11_obj_get_ptr@GNUTLS_3_6_3 gnutls_pkcs11_obj_get_type@GNUTLS_3_4 gnutls_pkcs11_obj_import_url@GNUTLS_3_4 gnutls_pkcs11_obj_init@GNUTLS_3_4 @@ -434,9 +506,11 @@ gnutls_pkcs11_privkey_status@GNUTLS_3_4 gnutls_pkcs11_reinit@GNUTLS_3_4 gnutls_pkcs11_set_pin_function@GNUTLS_3_4 gnutls_pkcs11_set_token_function@GNUTLS_3_4 +gnutls_pkcs11_token_check_mechanism@GNUTLS_3_6_0 gnutls_pkcs11_token_get_flags@GNUTLS_3_4 gnutls_pkcs11_token_get_info@GNUTLS_3_4 gnutls_pkcs11_token_get_mechanism@GNUTLS_3_4 +gnutls_pkcs11_token_get_ptr@GNUTLS_3_6_3 gnutls_pkcs11_token_get_random@GNUTLS_3_4 gnutls_pkcs11_token_get_url@GNUTLS_3_4 gnutls_pkcs11_token_init@GNUTLS_3_4 @@ -491,6 +565,7 @@ gnutls_pkcs7_get_signature_info@GNUTLS_3_4 gnutls_pkcs7_import@GNUTLS_3_4 gnutls_pkcs7_init@GNUTLS_3_4 gnutls_pkcs7_print@GNUTLS_3_4 +gnutls_pkcs7_print_signature_info@GNUTLS_3_6_14 gnutls_pkcs7_set_crl@GNUTLS_3_4 gnutls_pkcs7_set_crl_raw@GNUTLS_3_4 gnutls_pkcs7_set_crt@GNUTLS_3_4 @@ -503,14 +578,19 @@ gnutls_pkcs8_info@GNUTLS_3_4 gnutls_pkcs_schema_get_name@GNUTLS_3_4 gnutls_pkcs_schema_get_oid@GNUTLS_3_4 gnutls_prf@GNUTLS_3_4 +gnutls_prf_early@GNUTLS_3_6_8 +gnutls_prf_hash_get@GNUTLS_3_6_13 gnutls_prf_raw@GNUTLS_3_4 gnutls_prf_rfc5705@GNUTLS_3_4 +gnutls_priority_certificate_type_list2@GNUTLS_3_6_4 gnutls_priority_certificate_type_list@GNUTLS_3_4 gnutls_priority_cipher_list@GNUTLS_3_4 gnutls_priority_compression_list@GNUTLS_3_4 gnutls_priority_deinit@GNUTLS_3_4 gnutls_priority_ecc_curve_list@GNUTLS_3_4 gnutls_priority_get_cipher_suite_index@GNUTLS_3_4 +gnutls_priority_group_list@GNUTLS_3_6_0 +gnutls_priority_init2@GNUTLS_3_6_3 gnutls_priority_init@GNUTLS_3_4 gnutls_priority_kx_list@GNUTLS_3_4 gnutls_priority_mac_list@GNUTLS_3_4 @@ -519,24 +599,32 @@ gnutls_priority_set@GNUTLS_3_4 gnutls_priority_set_direct@GNUTLS_3_4 gnutls_priority_sign_list@GNUTLS_3_4 gnutls_priority_string_list@GNUTLS_3_4 +gnutls_privkey_decrypt_data2@GNUTLS_3_6_5 gnutls_privkey_decrypt_data@GNUTLS_3_4 gnutls_privkey_deinit@GNUTLS_3_4 +gnutls_privkey_export_dsa_raw2@GNUTLS_3_6_0 gnutls_privkey_export_dsa_raw@GNUTLS_3_4 +gnutls_privkey_export_ecc_raw2@GNUTLS_3_6_0 gnutls_privkey_export_ecc_raw@GNUTLS_3_4 +gnutls_privkey_export_gost_raw2@GNUTLS_3_6_3 gnutls_privkey_export_openpgp@GNUTLS_3_4 gnutls_privkey_export_pkcs11@GNUTLS_3_4 +gnutls_privkey_export_rsa_raw2@GNUTLS_3_6_0 gnutls_privkey_export_rsa_raw@GNUTLS_3_4 gnutls_privkey_export_x509@GNUTLS_3_4 gnutls_privkey_generate2@GNUTLS_3_4 gnutls_privkey_generate@GNUTLS_3_4 gnutls_privkey_get_pk_algorithm@GNUTLS_3_4 gnutls_privkey_get_seed@GNUTLS_3_4 +gnutls_privkey_get_spki@GNUTLS_3_6_0 gnutls_privkey_get_type@GNUTLS_3_4 gnutls_privkey_import_dsa_raw@GNUTLS_3_4 gnutls_privkey_import_ecc_raw@GNUTLS_3_4 gnutls_privkey_import_ext2@GNUTLS_3_4 gnutls_privkey_import_ext3@GNUTLS_3_4 +gnutls_privkey_import_ext4@GNUTLS_3_6_0 gnutls_privkey_import_ext@GNUTLS_3_4 +gnutls_privkey_import_gost_raw@GNUTLS_3_6_3 gnutls_privkey_import_openpgp@GNUTLS_3_4 gnutls_privkey_import_openpgp_raw@GNUTLS_3_4 gnutls_privkey_import_pkcs11@GNUTLS_3_4 @@ -549,7 +637,10 @@ gnutls_privkey_import_x509_raw@GNUTLS_3_4 gnutls_privkey_init@GNUTLS_3_4 gnutls_privkey_set_flags@GNUTLS_3_4 gnutls_privkey_set_pin_function@GNUTLS_3_4 +gnutls_privkey_set_spki@GNUTLS_3_6_0 +gnutls_privkey_sign_data2@GNUTLS_3_6_0 gnutls_privkey_sign_data@GNUTLS_3_4 +gnutls_privkey_sign_hash2@GNUTLS_3_6_0 gnutls_privkey_sign_hash@GNUTLS_3_4 gnutls_privkey_status@GNUTLS_3_4 gnutls_privkey_verify_params@GNUTLS_3_4 @@ -563,11 +654,15 @@ gnutls_psk_allocate_server_credentials@GNUTLS_3_4 gnutls_psk_client_get_hint@GNUTLS_3_4 gnutls_psk_free_client_credentials@GNUTLS_3_4 gnutls_psk_free_server_credentials@GNUTLS_3_4 +gnutls_psk_server_get_username2@GNUTLS_3_6_13 gnutls_psk_server_get_username@GNUTLS_3_4 +gnutls_psk_set_client_credentials2@GNUTLS_3_6_13 gnutls_psk_set_client_credentials@GNUTLS_3_4 +gnutls_psk_set_client_credentials_function2@GNUTLS_3_6_13 gnutls_psk_set_client_credentials_function@GNUTLS_3_4 gnutls_psk_set_params_function@GNUTLS_3_4 gnutls_psk_set_server_credentials_file@GNUTLS_3_4 +gnutls_psk_set_server_credentials_function2@GNUTLS_3_6_13 gnutls_psk_set_server_credentials_function@GNUTLS_3_4 gnutls_psk_set_server_credentials_hint@GNUTLS_3_4 gnutls_psk_set_server_dh_params@GNUTLS_3_4 @@ -577,19 +672,25 @@ gnutls_pubkey_deinit@GNUTLS_3_4 gnutls_pubkey_encrypt_data@GNUTLS_3_4 gnutls_pubkey_export2@GNUTLS_3_4 gnutls_pubkey_export@GNUTLS_3_4 +gnutls_pubkey_export_dsa_raw2@GNUTLS_3_6_0 gnutls_pubkey_export_dsa_raw@GNUTLS_3_4 +gnutls_pubkey_export_ecc_raw2@GNUTLS_3_6_0 gnutls_pubkey_export_ecc_raw@GNUTLS_3_4 gnutls_pubkey_export_ecc_x962@GNUTLS_3_4 +gnutls_pubkey_export_gost_raw2@GNUTLS_3_6_3 +gnutls_pubkey_export_rsa_raw2@GNUTLS_3_6_0 gnutls_pubkey_export_rsa_raw@GNUTLS_3_4 gnutls_pubkey_get_key_id@GNUTLS_3_4 gnutls_pubkey_get_key_usage@GNUTLS_3_4 gnutls_pubkey_get_openpgp_key_id@GNUTLS_3_4 gnutls_pubkey_get_pk_algorithm@GNUTLS_3_4 gnutls_pubkey_get_preferred_hash_algorithm@GNUTLS_3_4 +gnutls_pubkey_get_spki@GNUTLS_3_6_0 gnutls_pubkey_import@GNUTLS_3_4 gnutls_pubkey_import_dsa_raw@GNUTLS_3_4 gnutls_pubkey_import_ecc_raw@GNUTLS_3_4 gnutls_pubkey_import_ecc_x962@GNUTLS_3_4 +gnutls_pubkey_import_gost_raw@GNUTLS_3_6_3 gnutls_pubkey_import_openpgp@GNUTLS_3_4 gnutls_pubkey_import_openpgp_raw@GNUTLS_3_4 gnutls_pubkey_import_pkcs11@GNUTLS_3_4 @@ -605,12 +706,14 @@ gnutls_pubkey_init@GNUTLS_3_4 gnutls_pubkey_print@GNUTLS_3_4 gnutls_pubkey_set_key_usage@GNUTLS_3_4 gnutls_pubkey_set_pin_function@GNUTLS_3_4 +gnutls_pubkey_set_spki@GNUTLS_3_6_0 gnutls_pubkey_verify_data2@GNUTLS_3_4 gnutls_pubkey_verify_hash2@GNUTLS_3_4 gnutls_pubkey_verify_params@GNUTLS_3_4 gnutls_random_art@GNUTLS_3_4 gnutls_range_split@GNUTLS_3_4 gnutls_realloc@GNUTLS_3_4 +gnutls_reauth@GNUTLS_3_6_3 gnutls_record_can_use_length_hiding@GNUTLS_3_4 gnutls_record_check_corked@GNUTLS_3_4 gnutls_record_check_pending@GNUTLS_3_4 @@ -619,14 +722,20 @@ gnutls_record_disable_padding@GNUTLS_3_4 gnutls_record_discard_queued@GNUTLS_3_4 gnutls_record_get_direction@GNUTLS_3_4 gnutls_record_get_discarded@GNUTLS_3_4 +gnutls_record_get_max_early_data_size@GNUTLS_3_6_5 gnutls_record_get_max_size@GNUTLS_3_4 gnutls_record_get_state@GNUTLS_3_4 gnutls_record_overhead_size@GNUTLS_3_4 gnutls_record_recv@GNUTLS_3_4 +gnutls_record_recv_early_data@GNUTLS_3_6_5 gnutls_record_recv_packet@GNUTLS_3_4 gnutls_record_recv_seq@GNUTLS_3_4 +gnutls_record_send2@GNUTLS_3_6_3 gnutls_record_send@GNUTLS_3_4 +gnutls_record_send_early_data@GNUTLS_3_6_5 gnutls_record_send_range@GNUTLS_3_4 +gnutls_record_set_max_early_data_size@GNUTLS_3_6_4 +gnutls_record_set_max_recv_size@GNUTLS_3_6_8 gnutls_record_set_max_size@GNUTLS_3_4 gnutls_record_set_state@GNUTLS_3_4 gnutls_record_set_timeout@GNUTLS_3_4 @@ -654,14 +763,17 @@ gnutls_session_get_desc@GNUTLS_3_4 gnutls_session_get_flags@GNUTLS_3_4 gnutls_session_get_id2@GNUTLS_3_4 gnutls_session_get_id@GNUTLS_3_4 +gnutls_session_get_keylog_function@GNUTLS_3_6_13 gnutls_session_get_master_secret@GNUTLS_3_4 gnutls_session_get_ptr@GNUTLS_3_4 gnutls_session_get_random@GNUTLS_3_4 gnutls_session_get_verify_cert_status@GNUTLS_3_4 gnutls_session_is_resumed@GNUTLS_3_4 +gnutls_session_key_update@GNUTLS_3_6_3 gnutls_session_resumption_requested@GNUTLS_3_4 gnutls_session_set_data@GNUTLS_3_4 gnutls_session_set_id@GNUTLS_3_4 +gnutls_session_set_keylog_function@GNUTLS_3_6_13 gnutls_session_set_premaster@GNUTLS_3_4 gnutls_session_set_ptr@GNUTLS_3_4 gnutls_session_set_verify_cert2@GNUTLS_3_4 @@ -671,7 +783,9 @@ gnutls_session_supplemental_register@GNUTLS_3_4 gnutls_session_ticket_enable_client@GNUTLS_3_4 gnutls_session_ticket_enable_server@GNUTLS_3_4 gnutls_session_ticket_key_generate@GNUTLS_3_4 +gnutls_session_ticket_send@GNUTLS_3_6_3 gnutls_set_default_priority@GNUTLS_3_4 +gnutls_set_default_priority_append@GNUTLS_3_6_3 gnutls_sign_algorithm_get@GNUTLS_3_4 gnutls_sign_algorithm_get_client@GNUTLS_3_4 gnutls_sign_algorithm_get_requested@GNUTLS_3_4 @@ -680,8 +794,10 @@ gnutls_sign_get_id@GNUTLS_3_4 gnutls_sign_get_name@GNUTLS_3_4 gnutls_sign_get_oid@GNUTLS_3_4 gnutls_sign_get_pk_algorithm@GNUTLS_3_4 +gnutls_sign_is_secure2@GNUTLS_3_6_0 gnutls_sign_is_secure@GNUTLS_3_4 gnutls_sign_list@GNUTLS_3_4 +gnutls_sign_supports_pk_algorithm@GNUTLS_3_6_0 gnutls_srp_1024_group_generator@GNUTLS_3_4 gnutls_srp_1024_group_prime@GNUTLS_3_4 gnutls_srp_1536_group_generator@GNUTLS_3_4 @@ -692,6 +808,8 @@ gnutls_srp_3072_group_generator@GNUTLS_3_4 gnutls_srp_3072_group_prime@GNUTLS_3_4 gnutls_srp_4096_group_generator@GNUTLS_3_4 gnutls_srp_4096_group_prime@GNUTLS_3_4 +gnutls_srp_8192_group_generator@GNUTLS_3_6_2 +gnutls_srp_8192_group_prime@GNUTLS_3_6_2 gnutls_srp_allocate_client_credentials@GNUTLS_3_4 gnutls_srp_allocate_server_credentials@GNUTLS_3_4 gnutls_srp_base64_decode2@GNUTLS_3_4 @@ -846,6 +964,7 @@ gnutls_x509_crq_get_pk_oid@GNUTLS_3_4 gnutls_x509_crq_get_private_key_usage_period@GNUTLS_3_4 gnutls_x509_crq_get_signature_algorithm@GNUTLS_3_4 gnutls_x509_crq_get_signature_oid@GNUTLS_3_4 +gnutls_x509_crq_get_spki@GNUTLS_3_6_0 gnutls_x509_crq_get_subject_alt_name@GNUTLS_3_4 gnutls_x509_crq_get_subject_alt_othername_oid@GNUTLS_3_4 gnutls_x509_crq_get_tlsfeatures@GNUTLS_3_4 @@ -866,6 +985,7 @@ gnutls_x509_crq_set_key_rsa_raw@GNUTLS_3_4 gnutls_x509_crq_set_key_usage@GNUTLS_3_4 gnutls_x509_crq_set_private_key_usage_period@GNUTLS_3_4 gnutls_x509_crq_set_pubkey@GNUTLS_3_4 +gnutls_x509_crq_set_spki@GNUTLS_3_6_0 gnutls_x509_crq_set_subject_alt_name@GNUTLS_3_4 gnutls_x509_crq_set_subject_alt_othername@GNUTLS_3_4 gnutls_x509_crq_set_tlsfeatures@GNUTLS_3_4 @@ -876,7 +996,7 @@ gnutls_x509_crq_verify@GNUTLS_3_4 gnutls_x509_crt_check_email@GNUTLS_3_4 gnutls_x509_crt_check_hostname2@GNUTLS_3_4 gnutls_x509_crt_check_hostname@GNUTLS_3_4 -gnutls_x509_crt_check_ip@GNUTLS_3_4 +gnutls_x509_crt_check_ip@GNUTLS_3_6_0 gnutls_x509_crt_check_issuer@GNUTLS_3_4 gnutls_x509_crt_check_key_purpose@GNUTLS_3_4 gnutls_x509_crt_check_revocation@GNUTLS_3_4 @@ -906,7 +1026,7 @@ gnutls_x509_crt_get_extension_data@GNUTLS_3_4 gnutls_x509_crt_get_extension_info@GNUTLS_3_4 gnutls_x509_crt_get_extension_oid@GNUTLS_3_4 gnutls_x509_crt_get_fingerprint@GNUTLS_3_4 -gnutls_x509_crt_get_inhibit_anypolicy@GNUTLS_3_4 +gnutls_x509_crt_get_inhibit_anypolicy@GNUTLS_3_6_0 gnutls_x509_crt_get_issuer@GNUTLS_3_4 gnutls_x509_crt_get_issuer_alt_name2@GNUTLS_3_4 gnutls_x509_crt_get_issuer_alt_name@GNUTLS_3_4 @@ -924,6 +1044,7 @@ gnutls_x509_crt_get_name_constraints@GNUTLS_3_4 gnutls_x509_crt_get_pk_algorithm@GNUTLS_3_4 gnutls_x509_crt_get_pk_dsa_raw@GNUTLS_3_4 gnutls_x509_crt_get_pk_ecc_raw@GNUTLS_3_4 +gnutls_x509_crt_get_pk_gost_raw@GNUTLS_3_6_3 gnutls_x509_crt_get_pk_oid@GNUTLS_3_4 gnutls_x509_crt_get_pk_rsa_raw@GNUTLS_3_4 gnutls_x509_crt_get_policy@GNUTLS_3_4 @@ -936,6 +1057,7 @@ gnutls_x509_crt_get_serial@GNUTLS_3_4 gnutls_x509_crt_get_signature@GNUTLS_3_4 gnutls_x509_crt_get_signature_algorithm@GNUTLS_3_4 gnutls_x509_crt_get_signature_oid@GNUTLS_3_4 +gnutls_x509_crt_get_spki@GNUTLS_3_6_0 gnutls_x509_crt_get_subject@GNUTLS_3_4 gnutls_x509_crt_get_subject_alt_name2@GNUTLS_3_4 gnutls_x509_crt_get_subject_alt_name@GNUTLS_3_4 @@ -951,6 +1073,7 @@ gnutls_x509_crt_init@GNUTLS_3_4 gnutls_x509_crt_list_import2@GNUTLS_3_4 gnutls_x509_crt_list_import@GNUTLS_3_4 gnutls_x509_crt_list_import_pkcs11@GNUTLS_3_4 +gnutls_x509_crt_list_import_url@GNUTLS_3_6_3 gnutls_x509_crt_list_verify@GNUTLS_3_4 gnutls_x509_crt_print@GNUTLS_3_4 gnutls_x509_crt_privkey_sign@GNUTLS_3_4 @@ -968,8 +1091,8 @@ gnutls_x509_crt_set_dn@GNUTLS_3_4 gnutls_x509_crt_set_dn_by_oid@GNUTLS_3_4 gnutls_x509_crt_set_expiration_time@GNUTLS_3_4 gnutls_x509_crt_set_extension_by_oid@GNUTLS_3_4 -gnutls_x509_crt_set_flags@GNUTLS_3_4 -gnutls_x509_crt_set_inhibit_anypolicy@GNUTLS_3_4 +gnutls_x509_crt_set_flags@GNUTLS_3_6_0 +gnutls_x509_crt_set_inhibit_anypolicy@GNUTLS_3_6_0 gnutls_x509_crt_set_issuer_alt_name@GNUTLS_3_4 gnutls_x509_crt_set_issuer_alt_othername@GNUTLS_3_4 gnutls_x509_crt_set_issuer_dn@GNUTLS_3_4 @@ -986,6 +1109,7 @@ gnutls_x509_crt_set_proxy@GNUTLS_3_4 gnutls_x509_crt_set_proxy_dn@GNUTLS_3_4 gnutls_x509_crt_set_pubkey@GNUTLS_3_4 gnutls_x509_crt_set_serial@GNUTLS_3_4 +gnutls_x509_crt_set_spki@GNUTLS_3_6_0 gnutls_x509_crt_set_subject_alt_name@GNUTLS_3_4 gnutls_x509_crt_set_subject_alt_othername@GNUTLS_3_4 gnutls_x509_crt_set_subject_alternative_name@GNUTLS_3_4 @@ -1013,7 +1137,7 @@ gnutls_x509_ext_export_aia@GNUTLS_3_4 gnutls_x509_ext_export_authority_key_id@GNUTLS_3_4 gnutls_x509_ext_export_basic_constraints@GNUTLS_3_4 gnutls_x509_ext_export_crl_dist_points@GNUTLS_3_4 -gnutls_x509_ext_export_inhibit_anypolicy@GNUTLS_3_4 +gnutls_x509_ext_export_inhibit_anypolicy@GNUTLS_3_6_0 gnutls_x509_ext_export_key_purposes@GNUTLS_3_4 gnutls_x509_ext_export_key_usage@GNUTLS_3_4 gnutls_x509_ext_export_name_constraints@GNUTLS_3_4 @@ -1027,7 +1151,7 @@ gnutls_x509_ext_import_aia@GNUTLS_3_4 gnutls_x509_ext_import_authority_key_id@GNUTLS_3_4 gnutls_x509_ext_import_basic_constraints@GNUTLS_3_4 gnutls_x509_ext_import_crl_dist_points@GNUTLS_3_4 -gnutls_x509_ext_import_inhibit_anypolicy@GNUTLS_3_4 +gnutls_x509_ext_import_inhibit_anypolicy@GNUTLS_3_6_0 gnutls_x509_ext_import_key_purposes@GNUTLS_3_4 gnutls_x509_ext_import_key_usage@GNUTLS_3_4 gnutls_x509_ext_import_name_constraints@GNUTLS_3_4 @@ -1063,6 +1187,7 @@ gnutls_x509_privkey_export2_pkcs8@GNUTLS_3_4 gnutls_x509_privkey_export@GNUTLS_3_4 gnutls_x509_privkey_export_dsa_raw@GNUTLS_3_4 gnutls_x509_privkey_export_ecc_raw@GNUTLS_3_4 +gnutls_x509_privkey_export_gost_raw@GNUTLS_3_6_3 gnutls_x509_privkey_export_pkcs8@GNUTLS_3_4 gnutls_x509_privkey_export_rsa_raw2@GNUTLS_3_4 gnutls_x509_privkey_export_rsa_raw@GNUTLS_3_4 @@ -1073,10 +1198,12 @@ gnutls_x509_privkey_get_key_id@GNUTLS_3_4 gnutls_x509_privkey_get_pk_algorithm2@GNUTLS_3_4 gnutls_x509_privkey_get_pk_algorithm@GNUTLS_3_4 gnutls_x509_privkey_get_seed@GNUTLS_3_4 +gnutls_x509_privkey_get_spki@GNUTLS_3_6_0 gnutls_x509_privkey_import2@GNUTLS_3_4 gnutls_x509_privkey_import@GNUTLS_3_4 gnutls_x509_privkey_import_dsa_raw@GNUTLS_3_4 gnutls_x509_privkey_import_ecc_raw@GNUTLS_3_4 +gnutls_x509_privkey_import_gost_raw@GNUTLS_3_6_3 gnutls_x509_privkey_import_openssl@GNUTLS_3_4 gnutls_x509_privkey_import_pkcs8@GNUTLS_3_4 gnutls_x509_privkey_import_rsa_raw2@GNUTLS_3_4 @@ -1085,6 +1212,7 @@ gnutls_x509_privkey_init@GNUTLS_3_4 gnutls_x509_privkey_sec_param@GNUTLS_3_4 gnutls_x509_privkey_set_flags@GNUTLS_3_4 gnutls_x509_privkey_set_pin_function@GNUTLS_3_4 +gnutls_x509_privkey_set_spki@GNUTLS_3_6_0 gnutls_x509_privkey_sign_data@GNUTLS_3_4 gnutls_x509_privkey_sign_hash@GNUTLS_3_4 gnutls_x509_privkey_verify_params@GNUTLS_3_4 @@ -1093,6 +1221,10 @@ gnutls_x509_rdn_get2@GNUTLS_3_4 gnutls_x509_rdn_get@GNUTLS_3_4 gnutls_x509_rdn_get_by_oid@GNUTLS_3_4 gnutls_x509_rdn_get_oid@GNUTLS_3_4 +gnutls_x509_spki_deinit@GNUTLS_3_6_0 +gnutls_x509_spki_get_rsa_pss_params@GNUTLS_3_6_0 +gnutls_x509_spki_init@GNUTLS_3_6_0 +gnutls_x509_spki_set_rsa_pss_params@GNUTLS_3_6_0 gnutls_x509_tlsfeatures_add@GNUTLS_3_4 gnutls_x509_tlsfeatures_check_crt@GNUTLS_3_4 gnutls_x509_tlsfeatures_deinit@GNUTLS_3_4 diff --git a/devel/tsan.supp b/devel/tsan.supp new file mode 100644 index 0000000000..20a835b0af --- /dev/null +++ b/devel/tsan.supp @@ -0,0 +1,9 @@ +# the following is an inherent issue on gnutls_record_get_direction() +race:_gnutls_io_write_buffered +race:_gnutls_io_write_flush + +# the following is an inherent issue on gnutls_transport_set_errno() +race:reset_errno + +# this updates the recv_state to states that are harmless +race:check_session_status diff --git a/doc/.gitignore b/doc/.gitignore index 53e6d2ae35..c7bc1196ed 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -31,3 +31,5 @@ alert-printlist latex/alerts.tex latex/functions xssl-api.texi +/gendocs_template +/gendocs_template_min diff --git a/doc/COPYING b/doc/COPYING index 94a9ed024d..e60008693e 100644 --- a/doc/COPYING +++ b/doc/COPYING @@ -1,7 +1,7 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. diff --git a/doc/Makefile.am b/doc/Makefile.am index ead27efea3..01f7cd6fc1 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,5 +1,5 @@ ## Process this file with automake to produce Makefile.in -# Copyright (C) 2000-2012 Free Software Foundation, Inc. +# Copyright (C) 2000-2012, 2019 Free Software Foundation, Inc. # # Author: Nikos Mavrogiannopoulos # @@ -19,9 +19,9 @@ # along with this file; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -EXTRA_DIST = TODO certtool.cfg gnutls.pdf gnutls.html \ +EXTRA_DIST = TODO certtool.cfg gnutls.html \ doxygen/Doxyfile.in doxygen/Doxyfile.orig texinfo.css \ - gnutls-guile.pdf gnutls-guile.html stamp_enums stamp_functions \ + gnutls-guile.html stamp_enums stamp_functions \ doc.mk COPYING COPYING.LESSER IMAGES = \ @@ -32,7 +32,7 @@ IMAGES = \ gnutls-logo.png gnutls-x509.png \ pkcs11-vision.png -SUBDIRS = examples cyclo scripts credentials latex +SUBDIRS = examples scripts credentials latex if ENABLE_GTK_DOC SUBDIRS += reference endif @@ -40,7 +40,7 @@ endif -include $(top_srcdir)/doc/doc.mk invoke-gnutls-cli.texi: $(top_srcdir)/src/cli-args.def - PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -L$(top_srcdir)/src -Tagtexi-cmd.tpl $<; \ + PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -L$(top_builddir)/src -Tagtexi-cmd.tpl $<; \ if [ ! -e $@ ]; then \ cp $(srcdir)/$@ .; \ fi; \ @@ -48,7 +48,7 @@ invoke-gnutls-cli.texi: $(top_srcdir)/src/cli-args.def mv -f $@.tmp $@ invoke-gnutls-cli-debug.texi: $(top_srcdir)/src/cli-debug-args.def invoke-gnutls-cli.texi - PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -Tagtexi-cmd.tpl $<; \ + PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -L$(top_builddir)/src -Tagtexi-cmd.tpl $<; \ if [ ! -e $@ ]; then \ cp $(srcdir)/$@ .; \ fi; \ @@ -56,7 +56,7 @@ invoke-gnutls-cli-debug.texi: $(top_srcdir)/src/cli-debug-args.def invoke-gnutls mv -f $@.tmp $@ invoke-gnutls-serv.texi: $(top_srcdir)/src/serv-args.def invoke-gnutls-cli-debug.texi - PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -Tagtexi-cmd.tpl $<; \ + PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -L$(top_builddir)/src -Tagtexi-cmd.tpl $<; \ if [ ! -e $@ ]; then \ cp $(srcdir)/$@ .; \ fi; \ @@ -64,7 +64,7 @@ invoke-gnutls-serv.texi: $(top_srcdir)/src/serv-args.def invoke-gnutls-cli-debug mv -f $@.tmp $@ invoke-certtool.texi: $(top_srcdir)/src/certtool-args.def invoke-gnutls-serv.texi - PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -Tagtexi-cmd.tpl $<; \ + PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -L$(top_builddir)/src -Tagtexi-cmd.tpl $<; \ if [ ! -e $@ ]; then \ cp $(srcdir)/$@ .; \ fi; \ @@ -75,7 +75,7 @@ invoke-certtool.texi: $(top_srcdir)/src/certtool-args.def invoke-gnutls-serv.tex rm -f $@.tmp invoke-ocsptool.texi: $(top_srcdir)/src/ocsptool-args.def invoke-certtool.texi - PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -Tagtexi-cmd.tpl $<; \ + PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -L$(top_builddir)/src -Tagtexi-cmd.tpl $<; \ if [ ! -e $@ ]; then \ cp $(srcdir)/$@ .; \ fi; \ @@ -86,7 +86,7 @@ invoke-ocsptool.texi: $(top_srcdir)/src/ocsptool-args.def invoke-certtool.texi rm -f $@.tmp invoke-danetool.texi: $(top_srcdir)/src/danetool-args.def invoke-ocsptool.texi - PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -Tagtexi-cmd.tpl $<; \ + PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -L$(top_builddir)/src -Tagtexi-cmd.tpl $<; \ if [ ! -e $@ ]; then \ cp $(srcdir)/$@ .; \ fi; \ @@ -97,7 +97,7 @@ invoke-danetool.texi: $(top_srcdir)/src/danetool-args.def invoke-ocsptool.texi rm -f $@.tmp invoke-srptool.texi: $(top_srcdir)/src/srptool-args.def invoke-danetool.texi - PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -Tagtexi-cmd.tpl $<; \ + PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -L$(top_builddir)/src -Tagtexi-cmd.tpl $<; \ if [ ! -e $@ ]; then \ cp $(srcdir)/$@ .; \ fi; \ @@ -108,7 +108,7 @@ invoke-srptool.texi: $(top_srcdir)/src/srptool-args.def invoke-danetool.texi rm -f $@.tmp invoke-psktool.texi: $(top_srcdir)/src/psktool-args.def invoke-srptool.texi - PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -Tagtexi-cmd.tpl $<; \ + PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -L$(top_builddir)/src -Tagtexi-cmd.tpl $<; \ if [ ! -e $@ ]; then \ cp $(srcdir)/$@ .; \ fi; \ @@ -119,7 +119,7 @@ invoke-psktool.texi: $(top_srcdir)/src/psktool-args.def invoke-srptool.texi rm -f $@.tmp invoke-p11tool.texi: $(top_srcdir)/src/p11tool-args.def invoke-psktool.texi - PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -Tagtexi-cmd.tpl $<; \ + PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -L$(top_builddir)/src -Tagtexi-cmd.tpl $<; \ if [ ! -e $@ ]; then \ cp $(srcdir)/$@ .; \ fi; \ @@ -131,7 +131,7 @@ invoke-p11tool.texi: $(top_srcdir)/src/p11tool-args.def invoke-psktool.texi rm -f $@.tmp invoke-tpmtool.texi: $(top_srcdir)/src/tpmtool-args.def invoke-p11tool.texi - PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -Tagtexi-cmd.tpl $<; \ + PATH="$(top_builddir)/src/$(PATH_SEPARATOR)$${PATH}$(PATH_SEPARATOR)" $(AUTOGEN) -L$(top_builddir)/src -Tagtexi-cmd.tpl $<; \ if [ ! -e $@ ]; then \ cp $(srcdir)/$@ .; \ fi; \ @@ -151,7 +151,7 @@ gnutls_TEXINFOS = gnutls.texi fdl-1.3.texi \ cha-library.texi cha-preface.texi cha-programs.texi \ sec-tls-app.texi cha-errors.texi cha-support.texi \ cha-shared-key.texi cha-gtls-examples.texi cha-upgrade.texi \ - cha-tokens.texi cha-crypto.texi cha-auth.texi + cha-tokens.texi cha-crypto.texi cha-auth.texi cha-config.texi AUTOGENED_DOC = invoke-gnutls-cli.texi invoke-gnutls-cli-debug.texi \ invoke-gnutls-serv.texi invoke-certtool.texi invoke-srptool.texi \ @@ -225,7 +225,7 @@ gnutls-api.texi: $(top_srcdir)/lib/includes/gnutls/gnutls.h.in echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done mv -f $@-tmp $@ @@ -236,7 +236,7 @@ socket-api.texi: $(top_srcdir)/lib/includes/gnutls/socket.h echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done mv -f $@-tmp $@ @@ -247,7 +247,7 @@ dane-api.texi: $(top_srcdir)/libdane/includes/gnutls/dane.h echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done mv -f $@-tmp $@ @@ -259,7 +259,7 @@ x509-api.texi: $(top_srcdir)/lib/includes/gnutls/x509.h $(top_srcdir)/lib/includ echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done rm -f $@-tmp2 @@ -271,7 +271,7 @@ pkcs12-api.texi: $(top_srcdir)/lib/includes/gnutls/pkcs12.h echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_X509_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_X509_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done mv -f $@-tmp $@ @@ -282,7 +282,7 @@ pkcs11-api.texi: $(top_srcdir)/lib/includes/gnutls/pkcs11.h echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done mv -f $@-tmp $@ @@ -293,7 +293,7 @@ pkcs7-api.texi: $(top_srcdir)/lib/includes/gnutls/pkcs7.h echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_X509_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_X509_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done mv -f $@-tmp $@ @@ -304,7 +304,7 @@ tpm-api.texi: $(top_srcdir)/lib/includes/gnutls/tpm.h echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done mv -f $@-tmp $@ @@ -316,7 +316,7 @@ abstract-api.texi: $(top_srcdir)/lib/includes/gnutls/abstract.h $(top_srcdir)/li echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done rm -f $@-headers-tmp @@ -328,7 +328,7 @@ compat-api.texi: $(top_srcdir)/lib/includes/gnutls/compat.h echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done mv -f $@-tmp $@ @@ -339,7 +339,7 @@ dtls-api.texi: $(top_srcdir)/lib/includes/gnutls/dtls.h echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done mv -f $@-tmp $@ @@ -350,7 +350,7 @@ crypto-api.texi: $(top_srcdir)/lib/includes/gnutls/crypto.h echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done mv -f $@-tmp $@ @@ -361,7 +361,7 @@ ocsp-api.texi: $(top_srcdir)/lib/includes/gnutls/ocsp.h echo $(ECHO_N) "Creating documentation for $$i... " && \ $(srcdir)/scripts/gdoc -texinfo \ -function $$i \ - $(C_X509_SOURCE_FILES) >> $@-tmp 2>/dev/null && \ + $(C_X509_SOURCE_FILES) >> $@-tmp && \ echo "ok"; \ done mv -f $@-tmp $@ @@ -439,11 +439,11 @@ $(FUNCS): stamp_functions compare-exported: rm -f tmp-exp-$@ tmp-head-$@ - for i in ../libdane/includes/gnutls/*.h ../lib/includes/gnutls/*.h;do perl scripts/getfuncs.pl <$$i >>tmp-head-$@;done + for i in $(top_srcdir)/libdane/includes/gnutls/*.h $(top_srcdir)/lib/includes/gnutls/*.h $(top_builddir)/lib/includes/gnutls/*.h;do perl $(srcdir)/scripts/getfuncs.pl <$$i >>tmp-head-$@;done sort -u tmp-head-$@ > tmp2-head-$@ mv tmp2-head-$@ tmp-head-$@ - scripts/getfuncs-map.pl <../lib/libgnutls.map >tmp-exp-$@ - scripts/getfuncs-map.pl <../libdane/libdane.map >>tmp-exp-$@ + $(srcdir)/scripts/getfuncs-map.pl <$(top_srcdir)/lib/libgnutls.map >tmp-exp-$@ + $(srcdir)/scripts/getfuncs-map.pl <$(top_srcdir)/libdane/libdane.map >>tmp-exp-$@ sort -u tmp-exp-$@ > tmp2-exp-$@ mv tmp2-exp-$@ tmp-exp-$@ @echo "******************************************************************************" @@ -492,7 +492,7 @@ if HAVE_GUILE GUILE_FOR_BUILD = \ GUILE_AUTO_COMPILE=0 \ - $(GUILE) -L $(top_srcdir)/guile/modules + $(GUILE) -q -L $(top_srcdir)/guile/modules SNARF_CPPFLAGS = -I$(top_srcdir) -I$(top_builddir) \ -I$(top_srcdir)/lib/includes -I$(top_builddir)/lib/includes \ @@ -530,6 +530,7 @@ ENUMS += enums/dane_query_status_t ENUMS += enums/dane_state_flags_t ENUMS += enums/dane_verify_flags_t ENUMS += enums/dane_verify_status_t +ENUMS += enums/gnutls_abstract_export_flags_t ENUMS += enums/gnutls_alert_description_t ENUMS += enums/gnutls_alert_level_t ENUMS += enums/gnutls_alpn_flags_t @@ -546,10 +547,14 @@ ENUMS += enums/gnutls_cipher_algorithm_t ENUMS += enums/gnutls_close_request_t ENUMS += enums/gnutls_compression_method_t ENUMS += enums/gnutls_credentials_type_t +ENUMS += enums/gnutls_ctype_target_t ENUMS += enums/gnutls_digest_algorithm_t ENUMS += enums/gnutls_ecc_curve_t ENUMS += enums/gnutls_ext_flags_t ENUMS += enums/gnutls_ext_parse_type_t +ENUMS += enums/gnutls_fips_mode_t +ENUMS += enums/gnutls_gost_paramset_t +ENUMS += enums/gnutls_group_t ENUMS += enums/gnutls_handshake_description_t ENUMS += enums/gnutls_init_flags_t ENUMS += enums/gnutls_keygen_types_t @@ -630,10 +635,16 @@ FUNCS += functions/dane_verify_session_crt FUNCS += functions/dane_verify_session_crt.short FUNCS += functions/gnutls_aead_cipher_decrypt FUNCS += functions/gnutls_aead_cipher_decrypt.short +FUNCS += functions/gnutls_aead_cipher_decryptv2 +FUNCS += functions/gnutls_aead_cipher_decryptv2.short FUNCS += functions/gnutls_aead_cipher_deinit FUNCS += functions/gnutls_aead_cipher_deinit.short FUNCS += functions/gnutls_aead_cipher_encrypt FUNCS += functions/gnutls_aead_cipher_encrypt.short +FUNCS += functions/gnutls_aead_cipher_encryptv +FUNCS += functions/gnutls_aead_cipher_encryptv.short +FUNCS += functions/gnutls_aead_cipher_encryptv2 +FUNCS += functions/gnutls_aead_cipher_encryptv2.short FUNCS += functions/gnutls_aead_cipher_init FUNCS += functions/gnutls_aead_cipher_init.short FUNCS += functions/gnutls_alert_get @@ -666,12 +677,28 @@ FUNCS += functions/gnutls_anon_set_server_known_dh_params FUNCS += functions/gnutls_anon_set_server_known_dh_params.short FUNCS += functions/gnutls_anon_set_server_params_function FUNCS += functions/gnutls_anon_set_server_params_function.short +FUNCS += functions/gnutls_anti_replay_deinit +FUNCS += functions/gnutls_anti_replay_deinit.short +FUNCS += functions/gnutls_anti_replay_enable +FUNCS += functions/gnutls_anti_replay_enable.short +FUNCS += functions/gnutls_anti_replay_init +FUNCS += functions/gnutls_anti_replay_init.short +FUNCS += functions/gnutls_anti_replay_set_add_function +FUNCS += functions/gnutls_anti_replay_set_add_function.short +FUNCS += functions/gnutls_anti_replay_set_ptr +FUNCS += functions/gnutls_anti_replay_set_ptr.short +FUNCS += functions/gnutls_anti_replay_set_window +FUNCS += functions/gnutls_anti_replay_set_window.short FUNCS += functions/gnutls_auth_client_get_type FUNCS += functions/gnutls_auth_client_get_type.short FUNCS += functions/gnutls_auth_get_type FUNCS += functions/gnutls_auth_get_type.short FUNCS += functions/gnutls_auth_server_get_type FUNCS += functions/gnutls_auth_server_get_type.short +FUNCS += functions/gnutls_base64_decode2 +FUNCS += functions/gnutls_base64_decode2.short +FUNCS += functions/gnutls_base64_encode2 +FUNCS += functions/gnutls_base64_encode2.short FUNCS += functions/gnutls_buffer_append_data FUNCS += functions/gnutls_buffer_append_data.short FUNCS += functions/gnutls_bye @@ -698,6 +725,8 @@ FUNCS += functions/gnutls_certificate_get_crt_raw FUNCS += functions/gnutls_certificate_get_crt_raw.short FUNCS += functions/gnutls_certificate_get_issuer FUNCS += functions/gnutls_certificate_get_issuer.short +FUNCS += functions/gnutls_certificate_get_ocsp_expiration +FUNCS += functions/gnutls_certificate_get_ocsp_expiration.short FUNCS += functions/gnutls_certificate_get_ours FUNCS += functions/gnutls_certificate_get_ours.short FUNCS += functions/gnutls_certificate_get_peers @@ -726,18 +755,28 @@ FUNCS += functions/gnutls_certificate_set_known_dh_params FUNCS += functions/gnutls_certificate_set_known_dh_params.short FUNCS += functions/gnutls_certificate_set_ocsp_status_request_file FUNCS += functions/gnutls_certificate_set_ocsp_status_request_file.short +FUNCS += functions/gnutls_certificate_set_ocsp_status_request_file2 +FUNCS += functions/gnutls_certificate_set_ocsp_status_request_file2.short FUNCS += functions/gnutls_certificate_set_ocsp_status_request_function FUNCS += functions/gnutls_certificate_set_ocsp_status_request_function.short FUNCS += functions/gnutls_certificate_set_ocsp_status_request_function2 FUNCS += functions/gnutls_certificate_set_ocsp_status_request_function2.short +FUNCS += functions/gnutls_certificate_set_ocsp_status_request_mem +FUNCS += functions/gnutls_certificate_set_ocsp_status_request_mem.short FUNCS += functions/gnutls_certificate_set_params_function FUNCS += functions/gnutls_certificate_set_params_function.short FUNCS += functions/gnutls_certificate_set_pin_function FUNCS += functions/gnutls_certificate_set_pin_function.short +FUNCS += functions/gnutls_certificate_set_rawpk_key_file +FUNCS += functions/gnutls_certificate_set_rawpk_key_file.short +FUNCS += functions/gnutls_certificate_set_rawpk_key_mem +FUNCS += functions/gnutls_certificate_set_rawpk_key_mem.short FUNCS += functions/gnutls_certificate_set_retrieve_function FUNCS += functions/gnutls_certificate_set_retrieve_function.short FUNCS += functions/gnutls_certificate_set_retrieve_function2 FUNCS += functions/gnutls_certificate_set_retrieve_function2.short +FUNCS += functions/gnutls_certificate_set_retrieve_function3 +FUNCS += functions/gnutls_certificate_set_retrieve_function3.short FUNCS += functions/gnutls_certificate_set_trust_list FUNCS += functions/gnutls_certificate_set_trust_list.short FUNCS += functions/gnutls_certificate_set_verify_flags @@ -778,12 +817,18 @@ FUNCS += functions/gnutls_certificate_set_x509_trust_mem FUNCS += functions/gnutls_certificate_set_x509_trust_mem.short FUNCS += functions/gnutls_certificate_type_get FUNCS += functions/gnutls_certificate_type_get.short +FUNCS += functions/gnutls_certificate_type_get2 +FUNCS += functions/gnutls_certificate_type_get2.short FUNCS += functions/gnutls_certificate_type_get_id FUNCS += functions/gnutls_certificate_type_get_id.short FUNCS += functions/gnutls_certificate_type_get_name FUNCS += functions/gnutls_certificate_type_get_name.short FUNCS += functions/gnutls_certificate_type_list FUNCS += functions/gnutls_certificate_type_list.short +FUNCS += functions/gnutls_certificate_verification_profile_get_id +FUNCS += functions/gnutls_certificate_verification_profile_get_id.short +FUNCS += functions/gnutls_certificate_verification_profile_get_name +FUNCS += functions/gnutls_certificate_verification_profile_get_name.short FUNCS += functions/gnutls_certificate_verification_status_print FUNCS += functions/gnutls_certificate_verification_status_print.short FUNCS += functions/gnutls_certificate_verify_peers @@ -856,6 +901,8 @@ FUNCS += functions/gnutls_crypto_register_mac FUNCS += functions/gnutls_crypto_register_mac.short FUNCS += functions/gnutls_db_check_entry FUNCS += functions/gnutls_db_check_entry.short +FUNCS += functions/gnutls_db_check_entry_expire_time +FUNCS += functions/gnutls_db_check_entry_expire_time.short FUNCS += functions/gnutls_db_check_entry_time FUNCS += functions/gnutls_db_check_entry_time.short FUNCS += functions/gnutls_db_get_default_cache_expiration @@ -876,6 +923,10 @@ FUNCS += functions/gnutls_db_set_store_function FUNCS += functions/gnutls_db_set_store_function.short FUNCS += functions/gnutls_decode_ber_digest_info FUNCS += functions/gnutls_decode_ber_digest_info.short +FUNCS += functions/gnutls_decode_gost_rs_value +FUNCS += functions/gnutls_decode_gost_rs_value.short +FUNCS += functions/gnutls_decode_rs_value +FUNCS += functions/gnutls_decode_rs_value.short FUNCS += functions/gnutls_deinit FUNCS += functions/gnutls_deinit.short FUNCS += functions/gnutls_dh_get_group @@ -908,6 +959,8 @@ FUNCS += functions/gnutls_dh_params_import_raw FUNCS += functions/gnutls_dh_params_import_raw.short FUNCS += functions/gnutls_dh_params_import_raw2 FUNCS += functions/gnutls_dh_params_import_raw2.short +FUNCS += functions/gnutls_dh_params_import_raw3 +FUNCS += functions/gnutls_dh_params_import_raw3.short FUNCS += functions/gnutls_dh_params_init FUNCS += functions/gnutls_dh_params_init.short FUNCS += functions/gnutls_dh_set_prime_bits @@ -954,16 +1007,26 @@ FUNCS += functions/gnutls_ecc_curve_list FUNCS += functions/gnutls_ecc_curve_list.short FUNCS += functions/gnutls_encode_ber_digest_info FUNCS += functions/gnutls_encode_ber_digest_info.short +FUNCS += functions/gnutls_encode_gost_rs_value +FUNCS += functions/gnutls_encode_gost_rs_value.short +FUNCS += functions/gnutls_encode_rs_value +FUNCS += functions/gnutls_encode_rs_value.short FUNCS += functions/gnutls_error_is_fatal FUNCS += functions/gnutls_error_is_fatal.short FUNCS += functions/gnutls_error_to_alert FUNCS += functions/gnutls_error_to_alert.short FUNCS += functions/gnutls_est_record_overhead_size FUNCS += functions/gnutls_est_record_overhead_size.short +FUNCS += functions/gnutls_ext_get_current_msg +FUNCS += functions/gnutls_ext_get_current_msg.short FUNCS += functions/gnutls_ext_get_data FUNCS += functions/gnutls_ext_get_data.short FUNCS += functions/gnutls_ext_get_name FUNCS += functions/gnutls_ext_get_name.short +FUNCS += functions/gnutls_ext_get_name2 +FUNCS += functions/gnutls_ext_get_name2.short +FUNCS += functions/gnutls_ext_raw_parse +FUNCS += functions/gnutls_ext_raw_parse.short FUNCS += functions/gnutls_ext_register FUNCS += functions/gnutls_ext_register.short FUNCS += functions/gnutls_ext_set_data @@ -972,6 +1035,10 @@ FUNCS += functions/gnutls_fingerprint FUNCS += functions/gnutls_fingerprint.short FUNCS += functions/gnutls_fips140_mode_enabled FUNCS += functions/gnutls_fips140_mode_enabled.short +FUNCS += functions/gnutls_fips140_set_mode +FUNCS += functions/gnutls_fips140_set_mode.short +FUNCS += functions/gnutls_get_system_config_file +FUNCS += functions/gnutls_get_system_config_file.short FUNCS += functions/gnutls_global_deinit FUNCS += functions/gnutls_global_deinit.short FUNCS += functions/gnutls_global_init @@ -988,6 +1055,18 @@ FUNCS += functions/gnutls_global_set_mutex FUNCS += functions/gnutls_global_set_mutex.short FUNCS += functions/gnutls_global_set_time_function FUNCS += functions/gnutls_global_set_time_function.short +FUNCS += functions/gnutls_gost_paramset_get_name +FUNCS += functions/gnutls_gost_paramset_get_name.short +FUNCS += functions/gnutls_gost_paramset_get_oid +FUNCS += functions/gnutls_gost_paramset_get_oid.short +FUNCS += functions/gnutls_group_get +FUNCS += functions/gnutls_group_get.short +FUNCS += functions/gnutls_group_get_id +FUNCS += functions/gnutls_group_get_id.short +FUNCS += functions/gnutls_group_get_name +FUNCS += functions/gnutls_group_get_name.short +FUNCS += functions/gnutls_group_list +FUNCS += functions/gnutls_group_list.short FUNCS += functions/gnutls_handshake FUNCS += functions/gnutls_handshake.short FUNCS += functions/gnutls_handshake_description_get_name @@ -1010,6 +1089,8 @@ FUNCS += functions/gnutls_handshake_set_timeout FUNCS += functions/gnutls_handshake_set_timeout.short FUNCS += functions/gnutls_hash FUNCS += functions/gnutls_hash.short +FUNCS += functions/gnutls_hash_copy +FUNCS += functions/gnutls_hash_copy.short FUNCS += functions/gnutls_hash_deinit FUNCS += functions/gnutls_hash_deinit.short FUNCS += functions/gnutls_hash_fast @@ -1042,12 +1123,20 @@ FUNCS += functions/gnutls_hex_encode FUNCS += functions/gnutls_hex_encode.short FUNCS += functions/gnutls_hex_encode2 FUNCS += functions/gnutls_hex_encode2.short +FUNCS += functions/gnutls_hkdf_expand +FUNCS += functions/gnutls_hkdf_expand.short +FUNCS += functions/gnutls_hkdf_extract +FUNCS += functions/gnutls_hkdf_extract.short FUNCS += functions/gnutls_hmac FUNCS += functions/gnutls_hmac.short +FUNCS += functions/gnutls_hmac_copy +FUNCS += functions/gnutls_hmac_copy.short FUNCS += functions/gnutls_hmac_deinit FUNCS += functions/gnutls_hmac_deinit.short FUNCS += functions/gnutls_hmac_fast FUNCS += functions/gnutls_hmac_fast.short +FUNCS += functions/gnutls_hmac_get_key_size +FUNCS += functions/gnutls_hmac_get_key_size.short FUNCS += functions/gnutls_hmac_get_len FUNCS += functions/gnutls_hmac_get_len.short FUNCS += functions/gnutls_hmac_init @@ -1124,6 +1213,8 @@ FUNCS += functions/gnutls_ocsp_resp_deinit FUNCS += functions/gnutls_ocsp_resp_deinit.short FUNCS += functions/gnutls_ocsp_resp_export FUNCS += functions/gnutls_ocsp_resp_export.short +FUNCS += functions/gnutls_ocsp_resp_export2 +FUNCS += functions/gnutls_ocsp_resp_export2.short FUNCS += functions/gnutls_ocsp_resp_get_certs FUNCS += functions/gnutls_ocsp_resp_get_certs.short FUNCS += functions/gnutls_ocsp_resp_get_extension @@ -1152,8 +1243,12 @@ FUNCS += functions/gnutls_ocsp_resp_get_version FUNCS += functions/gnutls_ocsp_resp_get_version.short FUNCS += functions/gnutls_ocsp_resp_import FUNCS += functions/gnutls_ocsp_resp_import.short +FUNCS += functions/gnutls_ocsp_resp_import2 +FUNCS += functions/gnutls_ocsp_resp_import2.short FUNCS += functions/gnutls_ocsp_resp_init FUNCS += functions/gnutls_ocsp_resp_init.short +FUNCS += functions/gnutls_ocsp_resp_list_import2 +FUNCS += functions/gnutls_ocsp_resp_list_import2.short FUNCS += functions/gnutls_ocsp_resp_print FUNCS += functions/gnutls_ocsp_resp_print.short FUNCS += functions/gnutls_ocsp_resp_verify @@ -1164,12 +1259,16 @@ FUNCS += functions/gnutls_ocsp_status_request_enable_client FUNCS += functions/gnutls_ocsp_status_request_enable_client.short FUNCS += functions/gnutls_ocsp_status_request_get FUNCS += functions/gnutls_ocsp_status_request_get.short +FUNCS += functions/gnutls_ocsp_status_request_get2 +FUNCS += functions/gnutls_ocsp_status_request_get2.short FUNCS += functions/gnutls_ocsp_status_request_is_checked FUNCS += functions/gnutls_ocsp_status_request_is_checked.short FUNCS += functions/gnutls_oid_to_digest FUNCS += functions/gnutls_oid_to_digest.short FUNCS += functions/gnutls_oid_to_ecc_curve FUNCS += functions/gnutls_oid_to_ecc_curve.short +FUNCS += functions/gnutls_oid_to_gost_paramset +FUNCS += functions/gnutls_oid_to_gost_paramset.short FUNCS += functions/gnutls_oid_to_mac FUNCS += functions/gnutls_oid_to_mac.short FUNCS += functions/gnutls_oid_to_pk @@ -1184,6 +1283,8 @@ FUNCS += functions/gnutls_packet_deinit FUNCS += functions/gnutls_packet_deinit.short FUNCS += functions/gnutls_packet_get FUNCS += functions/gnutls_packet_get.short +FUNCS += functions/gnutls_pbkdf2 +FUNCS += functions/gnutls_pbkdf2.short FUNCS += functions/gnutls_pcert_deinit FUNCS += functions/gnutls_pcert_deinit.short FUNCS += functions/gnutls_pcert_export_openpgp @@ -1194,12 +1295,18 @@ FUNCS += functions/gnutls_pcert_import_openpgp FUNCS += functions/gnutls_pcert_import_openpgp.short FUNCS += functions/gnutls_pcert_import_openpgp_raw FUNCS += functions/gnutls_pcert_import_openpgp_raw.short +FUNCS += functions/gnutls_pcert_import_rawpk +FUNCS += functions/gnutls_pcert_import_rawpk.short +FUNCS += functions/gnutls_pcert_import_rawpk_raw +FUNCS += functions/gnutls_pcert_import_rawpk_raw.short FUNCS += functions/gnutls_pcert_import_x509 FUNCS += functions/gnutls_pcert_import_x509.short FUNCS += functions/gnutls_pcert_import_x509_list FUNCS += functions/gnutls_pcert_import_x509_list.short FUNCS += functions/gnutls_pcert_import_x509_raw FUNCS += functions/gnutls_pcert_import_x509_raw.short +FUNCS += functions/gnutls_pcert_list_import_x509_file +FUNCS += functions/gnutls_pcert_list_import_x509_file.short FUNCS += functions/gnutls_pcert_list_import_x509_raw FUNCS += functions/gnutls_pcert_list_import_x509_raw.short FUNCS += functions/gnutls_pem_base64_decode @@ -1266,6 +1373,8 @@ FUNCS += functions/gnutls_pkcs11_obj_get_flags FUNCS += functions/gnutls_pkcs11_obj_get_flags.short FUNCS += functions/gnutls_pkcs11_obj_get_info FUNCS += functions/gnutls_pkcs11_obj_get_info.short +FUNCS += functions/gnutls_pkcs11_obj_get_ptr +FUNCS += functions/gnutls_pkcs11_obj_get_ptr.short FUNCS += functions/gnutls_pkcs11_obj_get_type FUNCS += functions/gnutls_pkcs11_obj_get_type.short FUNCS += functions/gnutls_pkcs11_obj_import_url @@ -1312,12 +1421,16 @@ FUNCS += functions/gnutls_pkcs11_set_pin_function FUNCS += functions/gnutls_pkcs11_set_pin_function.short FUNCS += functions/gnutls_pkcs11_set_token_function FUNCS += functions/gnutls_pkcs11_set_token_function.short +FUNCS += functions/gnutls_pkcs11_token_check_mechanism +FUNCS += functions/gnutls_pkcs11_token_check_mechanism.short FUNCS += functions/gnutls_pkcs11_token_get_flags FUNCS += functions/gnutls_pkcs11_token_get_flags.short FUNCS += functions/gnutls_pkcs11_token_get_info FUNCS += functions/gnutls_pkcs11_token_get_info.short FUNCS += functions/gnutls_pkcs11_token_get_mechanism FUNCS += functions/gnutls_pkcs11_token_get_mechanism.short +FUNCS += functions/gnutls_pkcs11_token_get_ptr +FUNCS += functions/gnutls_pkcs11_token_get_ptr.short FUNCS += functions/gnutls_pkcs11_token_get_random FUNCS += functions/gnutls_pkcs11_token_get_random.short FUNCS += functions/gnutls_pkcs11_token_get_url @@ -1426,6 +1539,8 @@ FUNCS += functions/gnutls_pkcs7_init FUNCS += functions/gnutls_pkcs7_init.short FUNCS += functions/gnutls_pkcs7_print FUNCS += functions/gnutls_pkcs7_print.short +FUNCS += functions/gnutls_pkcs7_print_signature_info +FUNCS += functions/gnutls_pkcs7_print_signature_info.short FUNCS += functions/gnutls_pkcs7_set_crl FUNCS += functions/gnutls_pkcs7_set_crl.short FUNCS += functions/gnutls_pkcs7_set_crl_raw @@ -1460,12 +1575,18 @@ FUNCS += functions/gnutls_pk_to_sign FUNCS += functions/gnutls_pk_to_sign.short FUNCS += functions/gnutls_prf FUNCS += functions/gnutls_prf.short +FUNCS += functions/gnutls_prf_early +FUNCS += functions/gnutls_prf_early.short +FUNCS += functions/gnutls_prf_hash_get +FUNCS += functions/gnutls_prf_hash_get.short FUNCS += functions/gnutls_prf_raw FUNCS += functions/gnutls_prf_raw.short FUNCS += functions/gnutls_prf_rfc5705 FUNCS += functions/gnutls_prf_rfc5705.short FUNCS += functions/gnutls_priority_certificate_type_list FUNCS += functions/gnutls_priority_certificate_type_list.short +FUNCS += functions/gnutls_priority_certificate_type_list2 +FUNCS += functions/gnutls_priority_certificate_type_list2.short FUNCS += functions/gnutls_priority_cipher_list FUNCS += functions/gnutls_priority_cipher_list.short FUNCS += functions/gnutls_priority_compression_list @@ -1476,8 +1597,12 @@ FUNCS += functions/gnutls_priority_ecc_curve_list FUNCS += functions/gnutls_priority_ecc_curve_list.short FUNCS += functions/gnutls_priority_get_cipher_suite_index FUNCS += functions/gnutls_priority_get_cipher_suite_index.short +FUNCS += functions/gnutls_priority_group_list +FUNCS += functions/gnutls_priority_group_list.short FUNCS += functions/gnutls_priority_init FUNCS += functions/gnutls_priority_init.short +FUNCS += functions/gnutls_priority_init2 +FUNCS += functions/gnutls_priority_init2.short FUNCS += functions/gnutls_priority_kx_list FUNCS += functions/gnutls_priority_kx_list.short FUNCS += functions/gnutls_priority_mac_list @@ -1494,18 +1619,28 @@ FUNCS += functions/gnutls_priority_string_list FUNCS += functions/gnutls_priority_string_list.short FUNCS += functions/gnutls_privkey_decrypt_data FUNCS += functions/gnutls_privkey_decrypt_data.short +FUNCS += functions/gnutls_privkey_decrypt_data2 +FUNCS += functions/gnutls_privkey_decrypt_data2.short FUNCS += functions/gnutls_privkey_deinit FUNCS += functions/gnutls_privkey_deinit.short FUNCS += functions/gnutls_privkey_export_dsa_raw FUNCS += functions/gnutls_privkey_export_dsa_raw.short +FUNCS += functions/gnutls_privkey_export_dsa_raw2 +FUNCS += functions/gnutls_privkey_export_dsa_raw2.short FUNCS += functions/gnutls_privkey_export_ecc_raw FUNCS += functions/gnutls_privkey_export_ecc_raw.short +FUNCS += functions/gnutls_privkey_export_ecc_raw2 +FUNCS += functions/gnutls_privkey_export_ecc_raw2.short +FUNCS += functions/gnutls_privkey_export_gost_raw2 +FUNCS += functions/gnutls_privkey_export_gost_raw2.short FUNCS += functions/gnutls_privkey_export_openpgp FUNCS += functions/gnutls_privkey_export_openpgp.short FUNCS += functions/gnutls_privkey_export_pkcs11 FUNCS += functions/gnutls_privkey_export_pkcs11.short FUNCS += functions/gnutls_privkey_export_rsa_raw FUNCS += functions/gnutls_privkey_export_rsa_raw.short +FUNCS += functions/gnutls_privkey_export_rsa_raw2 +FUNCS += functions/gnutls_privkey_export_rsa_raw2.short FUNCS += functions/gnutls_privkey_export_x509 FUNCS += functions/gnutls_privkey_export_x509.short FUNCS += functions/gnutls_privkey_generate @@ -1516,6 +1651,8 @@ FUNCS += functions/gnutls_privkey_get_pk_algorithm FUNCS += functions/gnutls_privkey_get_pk_algorithm.short FUNCS += functions/gnutls_privkey_get_seed FUNCS += functions/gnutls_privkey_get_seed.short +FUNCS += functions/gnutls_privkey_get_spki +FUNCS += functions/gnutls_privkey_get_spki.short FUNCS += functions/gnutls_privkey_get_type FUNCS += functions/gnutls_privkey_get_type.short FUNCS += functions/gnutls_privkey_import_dsa_raw @@ -1528,6 +1665,10 @@ FUNCS += functions/gnutls_privkey_import_ext2 FUNCS += functions/gnutls_privkey_import_ext2.short FUNCS += functions/gnutls_privkey_import_ext3 FUNCS += functions/gnutls_privkey_import_ext3.short +FUNCS += functions/gnutls_privkey_import_ext4 +FUNCS += functions/gnutls_privkey_import_ext4.short +FUNCS += functions/gnutls_privkey_import_gost_raw +FUNCS += functions/gnutls_privkey_import_gost_raw.short FUNCS += functions/gnutls_privkey_import_openpgp FUNCS += functions/gnutls_privkey_import_openpgp.short FUNCS += functions/gnutls_privkey_import_openpgp_raw @@ -1554,10 +1695,16 @@ FUNCS += functions/gnutls_privkey_set_flags FUNCS += functions/gnutls_privkey_set_flags.short FUNCS += functions/gnutls_privkey_set_pin_function FUNCS += functions/gnutls_privkey_set_pin_function.short +FUNCS += functions/gnutls_privkey_set_spki +FUNCS += functions/gnutls_privkey_set_spki.short FUNCS += functions/gnutls_privkey_sign_data FUNCS += functions/gnutls_privkey_sign_data.short +FUNCS += functions/gnutls_privkey_sign_data2 +FUNCS += functions/gnutls_privkey_sign_data2.short FUNCS += functions/gnutls_privkey_sign_hash FUNCS += functions/gnutls_privkey_sign_hash.short +FUNCS += functions/gnutls_privkey_sign_hash2 +FUNCS += functions/gnutls_privkey_sign_hash2.short FUNCS += functions/gnutls_privkey_status FUNCS += functions/gnutls_privkey_status.short FUNCS += functions/gnutls_privkey_verify_params @@ -1584,16 +1731,24 @@ FUNCS += functions/gnutls_psk_free_server_credentials FUNCS += functions/gnutls_psk_free_server_credentials.short FUNCS += functions/gnutls_psk_server_get_username FUNCS += functions/gnutls_psk_server_get_username.short +FUNCS += functions/gnutls_psk_server_get_username2 +FUNCS += functions/gnutls_psk_server_get_username2.short FUNCS += functions/gnutls_psk_set_client_credentials FUNCS += functions/gnutls_psk_set_client_credentials.short +FUNCS += functions/gnutls_psk_set_client_credentials2 +FUNCS += functions/gnutls_psk_set_client_credentials2.short FUNCS += functions/gnutls_psk_set_client_credentials_function FUNCS += functions/gnutls_psk_set_client_credentials_function.short +FUNCS += functions/gnutls_psk_set_client_credentials_function2 +FUNCS += functions/gnutls_psk_set_client_credentials_function2.short FUNCS += functions/gnutls_psk_set_params_function FUNCS += functions/gnutls_psk_set_params_function.short FUNCS += functions/gnutls_psk_set_server_credentials_file FUNCS += functions/gnutls_psk_set_server_credentials_file.short FUNCS += functions/gnutls_psk_set_server_credentials_function FUNCS += functions/gnutls_psk_set_server_credentials_function.short +FUNCS += functions/gnutls_psk_set_server_credentials_function2 +FUNCS += functions/gnutls_psk_set_server_credentials_function2.short FUNCS += functions/gnutls_psk_set_server_credentials_hint FUNCS += functions/gnutls_psk_set_server_credentials_hint.short FUNCS += functions/gnutls_psk_set_server_dh_params @@ -1612,12 +1767,20 @@ FUNCS += functions/gnutls_pubkey_export2 FUNCS += functions/gnutls_pubkey_export2.short FUNCS += functions/gnutls_pubkey_export_dsa_raw FUNCS += functions/gnutls_pubkey_export_dsa_raw.short +FUNCS += functions/gnutls_pubkey_export_dsa_raw2 +FUNCS += functions/gnutls_pubkey_export_dsa_raw2.short FUNCS += functions/gnutls_pubkey_export_ecc_raw FUNCS += functions/gnutls_pubkey_export_ecc_raw.short +FUNCS += functions/gnutls_pubkey_export_ecc_raw2 +FUNCS += functions/gnutls_pubkey_export_ecc_raw2.short FUNCS += functions/gnutls_pubkey_export_ecc_x962 FUNCS += functions/gnutls_pubkey_export_ecc_x962.short +FUNCS += functions/gnutls_pubkey_export_gost_raw2 +FUNCS += functions/gnutls_pubkey_export_gost_raw2.short FUNCS += functions/gnutls_pubkey_export_rsa_raw FUNCS += functions/gnutls_pubkey_export_rsa_raw.short +FUNCS += functions/gnutls_pubkey_export_rsa_raw2 +FUNCS += functions/gnutls_pubkey_export_rsa_raw2.short FUNCS += functions/gnutls_pubkey_get_key_id FUNCS += functions/gnutls_pubkey_get_key_id.short FUNCS += functions/gnutls_pubkey_get_key_usage @@ -1628,6 +1791,8 @@ FUNCS += functions/gnutls_pubkey_get_pk_algorithm FUNCS += functions/gnutls_pubkey_get_pk_algorithm.short FUNCS += functions/gnutls_pubkey_get_preferred_hash_algorithm FUNCS += functions/gnutls_pubkey_get_preferred_hash_algorithm.short +FUNCS += functions/gnutls_pubkey_get_spki +FUNCS += functions/gnutls_pubkey_get_spki.short FUNCS += functions/gnutls_pubkey_import FUNCS += functions/gnutls_pubkey_import.short FUNCS += functions/gnutls_pubkey_import_dsa_raw @@ -1636,6 +1801,8 @@ FUNCS += functions/gnutls_pubkey_import_ecc_raw FUNCS += functions/gnutls_pubkey_import_ecc_raw.short FUNCS += functions/gnutls_pubkey_import_ecc_x962 FUNCS += functions/gnutls_pubkey_import_ecc_x962.short +FUNCS += functions/gnutls_pubkey_import_gost_raw +FUNCS += functions/gnutls_pubkey_import_gost_raw.short FUNCS += functions/gnutls_pubkey_import_openpgp FUNCS += functions/gnutls_pubkey_import_openpgp.short FUNCS += functions/gnutls_pubkey_import_openpgp_raw @@ -1666,6 +1833,8 @@ FUNCS += functions/gnutls_pubkey_set_key_usage FUNCS += functions/gnutls_pubkey_set_key_usage.short FUNCS += functions/gnutls_pubkey_set_pin_function FUNCS += functions/gnutls_pubkey_set_pin_function.short +FUNCS += functions/gnutls_pubkey_set_spki +FUNCS += functions/gnutls_pubkey_set_spki.short FUNCS += functions/gnutls_pubkey_verify_data2 FUNCS += functions/gnutls_pubkey_verify_data2.short FUNCS += functions/gnutls_pubkey_verify_hash2 @@ -1676,6 +1845,8 @@ FUNCS += functions/gnutls_random_art FUNCS += functions/gnutls_random_art.short FUNCS += functions/gnutls_range_split FUNCS += functions/gnutls_range_split.short +FUNCS += functions/gnutls_reauth +FUNCS += functions/gnutls_reauth.short FUNCS += functions/gnutls_record_can_use_length_hiding FUNCS += functions/gnutls_record_can_use_length_hiding.short FUNCS += functions/gnutls_record_check_corked @@ -1692,6 +1863,8 @@ FUNCS += functions/gnutls_record_get_direction FUNCS += functions/gnutls_record_get_direction.short FUNCS += functions/gnutls_record_get_discarded FUNCS += functions/gnutls_record_get_discarded.short +FUNCS += functions/gnutls_record_get_max_early_data_size +FUNCS += functions/gnutls_record_get_max_early_data_size.short FUNCS += functions/gnutls_record_get_max_size FUNCS += functions/gnutls_record_get_max_size.short FUNCS += functions/gnutls_record_get_state @@ -1700,14 +1873,24 @@ FUNCS += functions/gnutls_record_overhead_size FUNCS += functions/gnutls_record_overhead_size.short FUNCS += functions/gnutls_record_recv FUNCS += functions/gnutls_record_recv.short +FUNCS += functions/gnutls_record_recv_early_data +FUNCS += functions/gnutls_record_recv_early_data.short FUNCS += functions/gnutls_record_recv_packet FUNCS += functions/gnutls_record_recv_packet.short FUNCS += functions/gnutls_record_recv_seq FUNCS += functions/gnutls_record_recv_seq.short FUNCS += functions/gnutls_record_send FUNCS += functions/gnutls_record_send.short +FUNCS += functions/gnutls_record_send2 +FUNCS += functions/gnutls_record_send2.short +FUNCS += functions/gnutls_record_send_early_data +FUNCS += functions/gnutls_record_send_early_data.short FUNCS += functions/gnutls_record_send_range FUNCS += functions/gnutls_record_send_range.short +FUNCS += functions/gnutls_record_set_max_early_data_size +FUNCS += functions/gnutls_record_set_max_early_data_size.short +FUNCS += functions/gnutls_record_set_max_recv_size +FUNCS += functions/gnutls_record_set_max_recv_size.short FUNCS += functions/gnutls_record_set_max_size FUNCS += functions/gnutls_record_set_max_size.short FUNCS += functions/gnutls_record_set_state @@ -1760,6 +1943,8 @@ FUNCS += functions/gnutls_session_get_id FUNCS += functions/gnutls_session_get_id.short FUNCS += functions/gnutls_session_get_id2 FUNCS += functions/gnutls_session_get_id2.short +FUNCS += functions/gnutls_session_get_keylog_function +FUNCS += functions/gnutls_session_get_keylog_function.short FUNCS += functions/gnutls_session_get_master_secret FUNCS += functions/gnutls_session_get_master_secret.short FUNCS += functions/gnutls_session_get_ptr @@ -1770,12 +1955,16 @@ FUNCS += functions/gnutls_session_get_verify_cert_status FUNCS += functions/gnutls_session_get_verify_cert_status.short FUNCS += functions/gnutls_session_is_resumed FUNCS += functions/gnutls_session_is_resumed.short +FUNCS += functions/gnutls_session_key_update +FUNCS += functions/gnutls_session_key_update.short FUNCS += functions/gnutls_session_resumption_requested FUNCS += functions/gnutls_session_resumption_requested.short FUNCS += functions/gnutls_session_set_data FUNCS += functions/gnutls_session_set_data.short FUNCS += functions/gnutls_session_set_id FUNCS += functions/gnutls_session_set_id.short +FUNCS += functions/gnutls_session_set_keylog_function +FUNCS += functions/gnutls_session_set_keylog_function.short FUNCS += functions/gnutls_session_set_premaster FUNCS += functions/gnutls_session_set_premaster.short FUNCS += functions/gnutls_session_set_ptr @@ -1794,8 +1983,12 @@ FUNCS += functions/gnutls_session_ticket_enable_server FUNCS += functions/gnutls_session_ticket_enable_server.short FUNCS += functions/gnutls_session_ticket_key_generate FUNCS += functions/gnutls_session_ticket_key_generate.short +FUNCS += functions/gnutls_session_ticket_send +FUNCS += functions/gnutls_session_ticket_send.short FUNCS += functions/gnutls_set_default_priority FUNCS += functions/gnutls_set_default_priority.short +FUNCS += functions/gnutls_set_default_priority_append +FUNCS += functions/gnutls_set_default_priority_append.short FUNCS += functions/gnutls_sign_algorithm_get FUNCS += functions/gnutls_sign_algorithm_get.short FUNCS += functions/gnutls_sign_algorithm_get_client @@ -1814,8 +2007,12 @@ FUNCS += functions/gnutls_sign_get_pk_algorithm FUNCS += functions/gnutls_sign_get_pk_algorithm.short FUNCS += functions/gnutls_sign_is_secure FUNCS += functions/gnutls_sign_is_secure.short +FUNCS += functions/gnutls_sign_is_secure2 +FUNCS += functions/gnutls_sign_is_secure2.short FUNCS += functions/gnutls_sign_list FUNCS += functions/gnutls_sign_list.short +FUNCS += functions/gnutls_sign_supports_pk_algorithm +FUNCS += functions/gnutls_sign_supports_pk_algorithm.short FUNCS += functions/gnutls_srp_allocate_client_credentials FUNCS += functions/gnutls_srp_allocate_client_credentials.short FUNCS += functions/gnutls_srp_allocate_server_credentials @@ -2124,6 +2321,8 @@ FUNCS += functions/gnutls_x509_crq_get_signature_algorithm FUNCS += functions/gnutls_x509_crq_get_signature_algorithm.short FUNCS += functions/gnutls_x509_crq_get_signature_oid FUNCS += functions/gnutls_x509_crq_get_signature_oid.short +FUNCS += functions/gnutls_x509_crq_get_spki +FUNCS += functions/gnutls_x509_crq_get_spki.short FUNCS += functions/gnutls_x509_crq_get_subject_alt_name FUNCS += functions/gnutls_x509_crq_get_subject_alt_name.short FUNCS += functions/gnutls_x509_crq_get_subject_alt_othername_oid @@ -2164,6 +2363,8 @@ FUNCS += functions/gnutls_x509_crq_set_private_key_usage_period FUNCS += functions/gnutls_x509_crq_set_private_key_usage_period.short FUNCS += functions/gnutls_x509_crq_set_pubkey FUNCS += functions/gnutls_x509_crq_set_pubkey.short +FUNCS += functions/gnutls_x509_crq_set_spki +FUNCS += functions/gnutls_x509_crq_set_spki.short FUNCS += functions/gnutls_x509_crq_set_subject_alt_name FUNCS += functions/gnutls_x509_crq_set_subject_alt_name.short FUNCS += functions/gnutls_x509_crq_set_subject_alt_othername @@ -2280,6 +2481,8 @@ FUNCS += functions/gnutls_x509_crt_get_pk_dsa_raw FUNCS += functions/gnutls_x509_crt_get_pk_dsa_raw.short FUNCS += functions/gnutls_x509_crt_get_pk_ecc_raw FUNCS += functions/gnutls_x509_crt_get_pk_ecc_raw.short +FUNCS += functions/gnutls_x509_crt_get_pk_gost_raw +FUNCS += functions/gnutls_x509_crt_get_pk_gost_raw.short FUNCS += functions/gnutls_x509_crt_get_pk_oid FUNCS += functions/gnutls_x509_crt_get_pk_oid.short FUNCS += functions/gnutls_x509_crt_get_pk_rsa_raw @@ -2304,6 +2507,8 @@ FUNCS += functions/gnutls_x509_crt_get_signature_algorithm FUNCS += functions/gnutls_x509_crt_get_signature_algorithm.short FUNCS += functions/gnutls_x509_crt_get_signature_oid FUNCS += functions/gnutls_x509_crt_get_signature_oid.short +FUNCS += functions/gnutls_x509_crt_get_spki +FUNCS += functions/gnutls_x509_crt_get_spki.short FUNCS += functions/gnutls_x509_crt_get_subject FUNCS += functions/gnutls_x509_crt_get_subject.short FUNCS += functions/gnutls_x509_crt_get_subject_alt_name @@ -2334,6 +2539,8 @@ FUNCS += functions/gnutls_x509_crt_list_import2 FUNCS += functions/gnutls_x509_crt_list_import2.short FUNCS += functions/gnutls_x509_crt_list_import_pkcs11 FUNCS += functions/gnutls_x509_crt_list_import_pkcs11.short +FUNCS += functions/gnutls_x509_crt_list_import_url +FUNCS += functions/gnutls_x509_crt_list_import_url.short FUNCS += functions/gnutls_x509_crt_list_verify FUNCS += functions/gnutls_x509_crt_list_verify.short FUNCS += functions/gnutls_x509_crt_print @@ -2404,6 +2611,8 @@ FUNCS += functions/gnutls_x509_crt_set_pubkey FUNCS += functions/gnutls_x509_crt_set_pubkey.short FUNCS += functions/gnutls_x509_crt_set_serial FUNCS += functions/gnutls_x509_crt_set_serial.short +FUNCS += functions/gnutls_x509_crt_set_spki +FUNCS += functions/gnutls_x509_crt_set_spki.short FUNCS += functions/gnutls_x509_crt_set_subject_alternative_name FUNCS += functions/gnutls_x509_crt_set_subject_alternative_name.short FUNCS += functions/gnutls_x509_crt_set_subject_alt_name @@ -2558,6 +2767,8 @@ FUNCS += functions/gnutls_x509_privkey_export_dsa_raw FUNCS += functions/gnutls_x509_privkey_export_dsa_raw.short FUNCS += functions/gnutls_x509_privkey_export_ecc_raw FUNCS += functions/gnutls_x509_privkey_export_ecc_raw.short +FUNCS += functions/gnutls_x509_privkey_export_gost_raw +FUNCS += functions/gnutls_x509_privkey_export_gost_raw.short FUNCS += functions/gnutls_x509_privkey_export_pkcs8 FUNCS += functions/gnutls_x509_privkey_export_pkcs8.short FUNCS += functions/gnutls_x509_privkey_export_rsa_raw @@ -2578,6 +2789,8 @@ FUNCS += functions/gnutls_x509_privkey_get_pk_algorithm2 FUNCS += functions/gnutls_x509_privkey_get_pk_algorithm2.short FUNCS += functions/gnutls_x509_privkey_get_seed FUNCS += functions/gnutls_x509_privkey_get_seed.short +FUNCS += functions/gnutls_x509_privkey_get_spki +FUNCS += functions/gnutls_x509_privkey_get_spki.short FUNCS += functions/gnutls_x509_privkey_import FUNCS += functions/gnutls_x509_privkey_import.short FUNCS += functions/gnutls_x509_privkey_import2 @@ -2586,6 +2799,8 @@ FUNCS += functions/gnutls_x509_privkey_import_dsa_raw FUNCS += functions/gnutls_x509_privkey_import_dsa_raw.short FUNCS += functions/gnutls_x509_privkey_import_ecc_raw FUNCS += functions/gnutls_x509_privkey_import_ecc_raw.short +FUNCS += functions/gnutls_x509_privkey_import_gost_raw +FUNCS += functions/gnutls_x509_privkey_import_gost_raw.short FUNCS += functions/gnutls_x509_privkey_import_openssl FUNCS += functions/gnutls_x509_privkey_import_openssl.short FUNCS += functions/gnutls_x509_privkey_import_pkcs8 @@ -2602,6 +2817,8 @@ FUNCS += functions/gnutls_x509_privkey_set_flags FUNCS += functions/gnutls_x509_privkey_set_flags.short FUNCS += functions/gnutls_x509_privkey_set_pin_function FUNCS += functions/gnutls_x509_privkey_set_pin_function.short +FUNCS += functions/gnutls_x509_privkey_set_spki +FUNCS += functions/gnutls_x509_privkey_set_spki.short FUNCS += functions/gnutls_x509_privkey_sign_data FUNCS += functions/gnutls_x509_privkey_sign_data.short FUNCS += functions/gnutls_x509_privkey_sign_hash @@ -2618,6 +2835,14 @@ FUNCS += functions/gnutls_x509_rdn_get_by_oid FUNCS += functions/gnutls_x509_rdn_get_by_oid.short FUNCS += functions/gnutls_x509_rdn_get_oid FUNCS += functions/gnutls_x509_rdn_get_oid.short +FUNCS += functions/gnutls_x509_spki_deinit +FUNCS += functions/gnutls_x509_spki_deinit.short +FUNCS += functions/gnutls_x509_spki_get_rsa_pss_params +FUNCS += functions/gnutls_x509_spki_get_rsa_pss_params.short +FUNCS += functions/gnutls_x509_spki_init +FUNCS += functions/gnutls_x509_spki_init.short +FUNCS += functions/gnutls_x509_spki_set_rsa_pss_params +FUNCS += functions/gnutls_x509_spki_set_rsa_pss_params.short FUNCS += functions/gnutls_x509_tlsfeatures_add FUNCS += functions/gnutls_x509_tlsfeatures_add.short FUNCS += functions/gnutls_x509_tlsfeatures_check_crt diff --git a/doc/OID-registry.txt b/doc/OID-registry.txt new file mode 100644 index 0000000000..7671504e8e --- /dev/null +++ b/doc/OID-registry.txt @@ -0,0 +1,22 @@ +There is a sub-registry of Red Hat OIDs managed through gnutls. This +file is the canonical registry description of them. + +Top OID: 1.3.6.1.4.1.2312.18 + +1.3.6.1.4.1.2312.18.8 PKCS#8 attributes tree +1.3.6.1.4.1.2312.18.8.1 PKCS#8 Provable Seed attribute [0] + + + + + + +[0]. This is an attribute to be used in PKCS#8 privateKeyInfo structure +as an extension. It holds parameters related to private key validation +for provable private keys as in FIPS186-4. When the OID is present it +contains a single DER encoded value of the following. + +ProvableSeed ::= SEQUENCE { + algorithm OBJECT IDENTIFIER, -- the OID of the hash algorithm used in the key generation + seed OCTET STRING -- the seed used in key generation +} diff --git a/doc/alert-printlist.c b/doc/alert-printlist.c index ab746aa2f2..3483766817 100644 --- a/doc/alert-printlist.c +++ b/doc/alert-printlist.c @@ -15,7 +15,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ #include diff --git a/doc/announce.txt b/doc/announce.txt index 1037861599..942cf20a8b 100644 --- a/doc/announce.txt +++ b/doc/announce.txt @@ -17,7 +17,7 @@ Public License version 3.0 (or later). The manual is distributed under the GNU Free Documentation License version 1.3 (or later). The project page of the library is available at: - http://www.gnutls.org/ + https://www.gnutls.org/ What's New ========== @@ -41,7 +41,7 @@ explicitly enabled, since they reduce the overall security level. draft-mavrogiannopoulos-chacha-tls-05 and draft-irtf-cfrg-chacha20-poly1305-10. That is currently provided as technology preview and is not enabled by default, since there are no assigned ciphersuite points by IETF and there -is no guarrantee of compatibility between draft versions. The ciphersuite +is no guarantee of compatibility between draft versions. The ciphersuite priority string to enable it is "+CHACHA20-POLY1305". ** libgnutls: Added support for encrypt-then-authenticate in CBC @@ -278,12 +278,12 @@ Community If you need help to use GnuTLS, or want to help others, you are invited to join our help-gnutls mailing list, see: - http://lists.gnutls.org/mailman/listinfo/gnutls-help + https://lists.gnutls.org/mailman/listinfo/gnutls-help If you wish to participate in the development of GnuTLS, you are invited to join our gnutls-dev mailing list, see: - http://lists.gnutls.org/mailman/listinfo/gnutls-dev + https://lists.gnutls.org/mailman/listinfo/gnutls-dev Internationalization ==================== diff --git a/doc/certtool.cfg b/doc/certtool.cfg index 4a3021b28c..f3b47d9056 100644 --- a/doc/certtool.cfg +++ b/doc/certtool.cfg @@ -60,7 +60,7 @@ expiration_days = 700 # Alternatively you may set concrete dates and time. The GNU date string # formats are accepted. See: -# http://www.gnu.org/software/tar/manual/html_node/Date-input-formats.html +# https://www.gnu.org/software/tar/manual/html_node/Date-input-formats.html #activation_date = "2004-02-29 16:21:42" #expiration_date = "2025-02-29 16:24:41" @@ -72,7 +72,7 @@ expiration_days = 700 #dns_name = "www.morethanone.org" # A subject alternative name URI -#uri = "http://www.example.com" +#uri = "https://www.example.com" # An IP address in case of a server. #ip_address = "192.168.1.1" @@ -88,7 +88,7 @@ challenge_password = 123456 # An URL that has CRLs (certificate revocation lists) # available. Needed in CA certificates. -#crl_dist_points = "http://www.getcrl.crl/getcrl/" +#crl_dist_points = "https://www.getcrl.crl/getcrl/" # Whether this is a CA certificate or not #ca @@ -138,26 +138,26 @@ encryption_key # and store them in the real certificate. #honor_crq_extensions -# Path length contraint. Sets the maximum number of +# Path length constraint. Sets the maximum number of # certificates that can be used to certify this certificate. # (i.e. the certificate chain length) #path_len = -1 #path_len = 2 # OCSP URI -# ocsp_uri = http://my.ocsp.server/ocsp +# ocsp_uri = https://my.ocsp.server/ocsp # CA issuers URI -# ca_issuers_uri = http://my.ca.issuer +# ca_issuers_uri = https://my.ca.issuer # Certificate policies #policy1 = 1.3.6.1.4.1.5484.1.10.99.1.0 #policy1_txt = "This is a long policy to summarize" -#policy1_url = http://www.example.com/a-policy-to-read +#policy1_url = https://www.example.com/a-policy-to-read #policy2 = 1.3.6.1.4.1.5484.1.10.99.1.1 #policy2_txt = "This is a short policy" -#policy2_url = http://www.example.com/another-policy-to-read +#policy2_url = https://www.example.com/another-policy-to-read # Name constraints @@ -192,5 +192,5 @@ encryption_key # TLS feature extensions (RFC 7633) -# If the status_request TLS exension is set, OCSP stapling becomes mandatory +# If the status_request TLS extension is set, OCSP stapling becomes mandatory #tls_feature = 5 diff --git a/doc/cha-bib.texi b/doc/cha-bib.texi index af316bd6f5..4df5e98f90 100644 --- a/doc/cha-bib.texi +++ b/doc/cha-bib.texi @@ -6,16 +6,16 @@ @item @anchor{CBCATT}[CBCATT] Bodo Moeller, "Security of CBC Ciphersuites in SSL/TLS: Problems and Countermeasures", 2002, available from -@url{http://www.openssl.org/~bodo/tls-cbc.txt}. +@url{https://www.openssl.org/~bodo/tls-cbc.txt}. @item @anchor{GPGH}[GPGH] Mike Ashley, "The GNU Privacy Handbook", 2002, available from -@url{http://www.gnupg.org/gph/en/manual.pdf}. +@url{https://www.gnupg.org/gph/en/manual.pdf}. @item @anchor{GUTPKI}[GUTPKI] Peter Gutmann, "Everything you never wanted to know about PKI but were forced to find out", Available from -@url{http://www.cs.auckland.ac.nz/~pgut001/}. +@url{https://www.cs.auckland.ac.nz/~pgut001/}. @item @anchor{PRNGATTACKS}[PRNGATTACKS] John Kelsey and Bruce Schneier, "Cryptanalytic Attacks on Pseudorandom Number Generators", @@ -23,162 +23,167 @@ Available from @url{https://www.schneier.com/academic/paperfiles/paper-prngs.pdf @item @anchor{KEYPIN}[KEYPIN] Chris Evans and Chris Palmer, "Public Key Pinning Extension for HTTP", -Available from @url{http://tools.ietf.org/html/draft-ietf-websec-key-pinning-01}. +Available from @url{https://tools.ietf.org/html/draft-ietf-websec-key-pinning-01}. @item @anchor{NISTSP80057}[NISTSP80057] NIST Special Publication 800-57, "Recommendation for Key Management - Part 1: General (Revised)", March 2007, available from -@url{http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf}. +@url{https://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf}. @item @anchor{RFC7413}[RFC7413] Y. Cheng and J. Chu and S. Radhakrishnan and A. Jain, "TCP Fast Open", December 2014, Available from -@url{http://www.ietf.org/rfc/rfc7413.txt}. +@url{https://www.ietf.org/rfc/rfc7413.txt}. + +@item @anchor{RFC7918}[RFC7918] +A. Langley, N. Modadugu, B. Moeller, "Transport Layer Security (TLS) False Start", +August 2016, Available from +@url{https://www.ietf.org/rfc/rfc7918.txt}. @item @anchor{RFC6125}[RFC6125] Peter Saint-Andre and Jeff Hodges, "Representation and Verification of Domain-Based Application Service Identity within Internet Public Key Infrastructure Using X.509 (PKIX) Certificates in the Context of Transport Layer Security (TLS)", March 2011, Available from -@url{http://www.ietf.org/rfc/rfc6125.txt}. +@url{https://www.ietf.org/rfc/rfc6125.txt}. @item @anchor{RFC7685}[RFC7685] Adam Langley, "A Transport Layer Security (TLS) ClientHello Padding Extension", October 2015, Available from -@url{http://www.ietf.org/rfc/rfc7685.txt}. +@url{https://www.ietf.org/rfc/rfc7685.txt}. @item @anchor{RFC7613}[RFC7613] Peter Saint-Andre and Alexey Melnikov, "Preparation, Enforcement, and Comparison of Internationalized Strings Representing Usernames and Passwords", August 2015, Available from -@url{http://www.ietf.org/rfc/rfc7613.txt}. +@url{https://www.ietf.org/rfc/rfc7613.txt}. @item @anchor{RFC2246}[RFC2246] Tim Dierks and Christopher Allen, "The TLS Protocol Version 1.0", January 1999, Available from -@url{http://www.ietf.org/rfc/rfc2246.txt}. +@url{https://www.ietf.org/rfc/rfc2246.txt}. @item @anchor{RFC6083}[RFC6083] M. Tuexen and R. Seggelmann and E. Rescorla, "Datagram Transport Layer Security (DTLS) for Stream Control Transmission Protocol (SCTP)", January 2011, Available from -@url{http://www.ietf.org/rfc/rfc6083.txt}. +@url{https://www.ietf.org/rfc/rfc6083.txt}. @item @anchor{RFC4418}[RFC4418] Ted Krovetz, "UMAC: Message Authentication Code using Universal Hashing", March 2006, Available from -@url{http://www.ietf.org/rfc/rfc4418.txt}. +@url{https://www.ietf.org/rfc/rfc4418.txt}. @item @anchor{RFC4680}[RFC4680] S. Santesson, "TLS Handshake Message for Supplemental Data", September 2006, Available from -@url{http://www.ietf.org/rfc/rfc4680.txt}. +@url{https://www.ietf.org/rfc/rfc4680.txt}. @item @anchor{RFC7633}[RFC7633] P. Hallam-Baker, "X.509v3 Transport Layer Security (TLS) Feature Extension", October 2015, Available from -@url{http://www.ietf.org/rfc/rfc7633.txt}. +@url{https://www.ietf.org/rfc/rfc7633.txt}. @item @anchor{RFC7919}[RFC7919] D. Gillmor, "Negotiated Finite Field Diffie-Hellman Ephemeral Parameters for Transport Layer Security (TLS)", August 2016, Available from -@url{http://www.ietf.org/rfc/rfc7919.txt}. +@url{https://www.ietf.org/rfc/rfc7919.txt}. @item @anchor{RFC4514}[RFC4514] Kurt D. Zeilenga, "Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names", June 2006, Available from -@url{http://www.ietf.org/rfc/rfc4513.txt}. +@url{https://www.ietf.org/rfc/rfc4513.txt}. @item @anchor{RFC4346}[RFC4346] Tim Dierks and Eric Rescorla, "The TLS Protocol Version 1.1", Match -2006, Available from @url{http://www.ietf.org/rfc/rfc4346.txt}. +2006, Available from @url{https://www.ietf.org/rfc/rfc4346.txt}. @item @anchor{RFC4347}[RFC4347] Eric Rescorla and Nagendra Modadugu, "Datagram Transport Layer Security", April -2006, Available from @url{http://www.ietf.org/rfc/rfc4347.txt}. +2006, Available from @url{https://www.ietf.org/rfc/rfc4347.txt}. @item @anchor{RFC5246}[RFC5246] Tim Dierks and Eric Rescorla, "The TLS Protocol Version 1.2", August -2008, Available from @url{http://www.ietf.org/rfc/rfc5246.txt}. +2008, Available from @url{https://www.ietf.org/rfc/rfc5246.txt}. @item @anchor{RFC2440}[RFC2440] Jon Callas, Lutz Donnerhacke, Hal Finney and Rodney Thayer, "OpenPGP Message Format", November 1998, Available from -@url{http://www.ietf.org/rfc/rfc2440.txt}. +@url{https://www.ietf.org/rfc/rfc2440.txt}. @item @anchor{RFC4880}[RFC4880] Jon Callas, Lutz Donnerhacke, Hal Finney, David Shaw and Rodney Thayer, "OpenPGP Message Format", November 2007, Available from -@url{http://www.ietf.org/rfc/rfc4880.txt}. +@url{https://www.ietf.org/rfc/rfc4880.txt}. @item @anchor{RFC4211}[RFC4211] J. Schaad, "Internet X.509 Public Key Infrastructure Certificate Request Message Format (CRMF)", September 2005, Available from -@url{http://www.ietf.org/rfc/rfc4211.txt}. +@url{https://www.ietf.org/rfc/rfc4211.txt}. @item @anchor{RFC2817}[RFC2817] Rohit Khare and Scott Lawrence, "Upgrading to TLS Within HTTP/1.1", -May 2000, Available from @url{http://www.ietf.org/rfc/rfc2817.txt} +May 2000, Available from @url{https://www.ietf.org/rfc/rfc2817.txt} @item @anchor{RFC2818}[RFC2818] Eric Rescorla, "HTTP Over TLS", May 2000, Available from -@url{http://www.ietf/rfc/rfc2818.txt}. +@url{https://www.ietf/rfc/rfc2818.txt}. @item @anchor{RFC2945}[RFC2945] Tom Wu, "The SRP Authentication and Key Exchange System", September -2000, Available from @url{http://www.ietf.org/rfc/rfc2945.txt}. +2000, Available from @url{https://www.ietf.org/rfc/rfc2945.txt}. @item @anchor{RFC7301}[RFC7301] S. Friedl, A. Popov, A. Langley, E. Stephan, "Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension", -July 2014, Available from @url{http://www.ietf.org/rfc/rfc7301.txt}. +July 2014, Available from @url{https://www.ietf.org/rfc/rfc7301.txt}. @item @anchor{RFC2986}[RFC2986] Magnus Nystrom and Burt Kaliski, "PKCS 10 v1.7: Certification Request Syntax Specification", November 2000, Available from -@url{http://www.ietf.org/rfc/rfc2986.txt}. +@url{https://www.ietf.org/rfc/rfc2986.txt}. @item @anchor{PKIX}[PKIX] D. Cooper, S. Santesson, S. Farrel, S. Boeyen, R. Housley, W. Polk, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", May 2008, available from -@url{http://www.ietf.org/rfc/rfc5280.txt}. +@url{https://www.ietf.org/rfc/rfc5280.txt}. @item @anchor{RFC3749}[RFC3749] Scott Hollenbeck, "Transport Layer Security Protocol Compression Methods", May 2004, available from -@url{http://www.ietf.org/rfc/rfc3749.txt}. +@url{https://www.ietf.org/rfc/rfc3749.txt}. @item @anchor{RFC3820}[RFC3820] Steven Tuecke, Von Welch, Doug Engert, Laura Pearlman, and Mary Thompson, "Internet X.509 Public Key Infrastructure (PKI) Proxy Certificate Profile", June 2004, available from -@url{http://www.ietf.org/rfc/rfc3820}. +@url{https://www.ietf.org/rfc/rfc3820}. @item @anchor{RFC6520}[RFC6520] R. Seggelmann, M. Tuexen, and M. Williams, "Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) Heartbeat Extension", February 2012, available from -@url{http://www.ietf.org/rfc/rfc6520}. +@url{https://www.ietf.org/rfc/rfc6520}. @item @anchor{RFC5746}[RFC5746] E. Rescorla, M. Ray, S. Dispensa, and N. Oskov, "Transport Layer Security (TLS) Renegotiation Indication Extension", February 2010, -available from @url{http://www.ietf.org/rfc/rfc5746}. +available from @url{https://www.ietf.org/rfc/rfc5746}. @item @anchor{RFC5280}[RFC5280] D. Cooper, S. Santesson, S. Farrell, S. Boeyen, R. Housley, and W. Polk, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", May 2008, available from -@url{http://www.ietf.org/rfc/rfc5280}. +@url{https://www.ietf.org/rfc/rfc5280}. @item @anchor{TLSTKT}[TLSTKT] Joseph Salowey, Hao Zhou, Pasi Eronen, Hannes Tschofenig, "Transport Layer Security (TLS) Session Resumption without Server-Side State", -January 2008, available from @url{http://www.ietf.org/rfc/rfc5077}. +January 2008, available from @url{https://www.ietf.org/rfc/rfc5077}. @item @anchor{PKCS12}[PKCS12] RSA Laboratories, "PKCS 12 v1.0: Personal Information Exchange -Syntax", June 1999, Available from @url{http://www.rsa.com}. +Syntax", June 1999, Available from @url{https://www.rsa.com}. @item @anchor{PKCS11}[PKCS11] RSA Laboratories, "PKCS #11 Base Functionality v2.30: Cryptoki – Draft 4", -July 2009, Available from @url{http://www.rsa.com}. +July 2009, Available from @url{https://www.rsa.com}. @item @anchor{RESCORLA}[RESCORLA] Eric Rescorla, "SSL and TLS: Designing and Building Secure Systems", @@ -186,11 +191,11 @@ Eric Rescorla, "SSL and TLS: Designing and Building Secure Systems", @item @anchor{SELKEY}[SELKEY] Arjen Lenstra and Eric Verheul, "Selecting Cryptographic Key Sizes", -2003, available from @url{http://www.win.tue.nl/~klenstra/key.pdf}. +2003, available from @url{https://www.win.tue.nl/~klenstra/key.pdf}. @item @anchor{SSL3}[SSL3] Alan Freier, Philip Karlton and Paul Kocher, "The Secure Sockets Layer (SSL) Protocol Version 3.0", -August 2011, Available from @url{http://www.ietf.org/rfc/rfc6101.txt}. +August 2011, Available from @url{https://www.ietf.org/rfc/rfc6101.txt}. @item @anchor{STEVENS}[STEVENS] Richard Stevens, "UNIX Network Programming, Volume 1", Prentice Hall @@ -199,52 +204,56 @@ PTR, January 1998 @item @anchor{TLSEXT}[TLSEXT] Simon Blake-Wilson, Magnus Nystrom, David Hopwood, Jan Mikkelsen and Tim Wright, "Transport Layer Security (TLS) Extensions", June 2003, -Available from @url{http://www.ietf.org/rfc/rfc3546.txt}. +Available from @url{https://www.ietf.org/rfc/rfc3546.txt}. @item @anchor{TLSPGP}[TLSPGP] Nikos Mavrogiannopoulos, "Using OpenPGP keys for TLS authentication", January 2011. Available from -@url{http://www.ietf.org/rfc/rfc6091.txt}. +@url{https://www.ietf.org/rfc/rfc6091.txt}. @item @anchor{TLSSRP}[TLSSRP] David Taylor, Trevor Perrin, Tom Wu and Nikos Mavrogiannopoulos, "Using SRP for TLS Authentication", November 2007. Available from -@url{http://www.ietf.org/rfc/rfc5054.txt}. +@url{https://www.ietf.org/rfc/rfc5054.txt}. @item @anchor{TLSPSK}[TLSPSK] Pasi Eronen and Hannes Tschofenig, "Pre-shared key Ciphersuites for TLS", December 2005, Available from -@url{http://www.ietf.org/rfc/rfc4279.txt}. +@url{https://www.ietf.org/rfc/rfc4279.txt}. @item @anchor{TOMSRP}[TOMSRP] Tom Wu, "The Stanford SRP Authentication Project", Available at -@url{http://srp.stanford.edu/}. +@url{https://srp.stanford.edu/}. @item @anchor{WEGER}[WEGER] Arjen Lenstra and Xiaoyun Wang and Benne de Weger, "Colliding X.509 Certificates", Cryptology ePrint Archive, Report 2005/067, Available -at @url{http://eprint.iacr.org/}. +at @url{https://eprint.iacr.org/}. @item @anchor{ECRYPT}[ECRYPT] European Network of Excellence in Cryptology II, "ECRYPT II Yearly Report on Algorithms and Keysizes (2009-2010)", Available -at @url{http://www.ecrypt.eu.org/documents/D.SPA.13.pdf}. +at @url{https://www.ecrypt.eu.org/documents/D.SPA.13.pdf}. @item @anchor{RFC5056}[RFC5056] N. Williams, "On the Use of Channel Bindings to Secure Channels", -November 2007, available from @url{http://www.ietf.org/rfc/rfc5056}. +November 2007, available from @url{https://www.ietf.org/rfc/rfc5056}. + +@item @anchor{RFC5764}[RFC5764] +D. McGrew, E. Rescorla, "Datagram Transport Layer Security (DTLS) Extension to Establish Keys for the Secure Real-time Transport Protocol (SRTP)On the Use of Channel Bindings to Secure Channels", +May 2010, available from @url{https://www.ietf.org/rfc/rfc5764}. @item @anchor{RFC5929}[RFC5929] J. Altman, N. Williams, L. Zhu, "Channel Bindings for TLS", July 2010, -available from @url{http://www.ietf.org/rfc/rfc5929}. +available from @url{https://www.ietf.org/rfc/rfc5929}. @item @anchor{PKCS11URI}[PKCS11URI] J. Pechanec, D. Moffat, "The PKCS#11 URI Scheme", April 2015, -available from @url{http://www.ietf.org/rfc/rfc7512}. +available from @url{https://www.ietf.org/rfc/rfc7512}. @item @anchor{TPMURI}[TPMURI] C. Latze, N. Mavrogiannopoulos, "The TPMKEY URI Scheme", January 2013, -Work in progress, available from @url{http://tools.ietf.org/html/draft-mavrogiannopoulos-tpmuri-01}. +Work in progress, available from @url{https://tools.ietf.org/html/draft-mavrogiannopoulos-tpmuri-01}. @item @anchor{ANDERSON}[ANDERSON] R. J. Anderson, "Security Engineering: A Guide to Building Dependable Distributed Systems", @@ -252,18 +261,18 @@ John Wiley \& Sons, Inc., 2001. @item @anchor{RFC4821}[RFC4821] M. Mathis, J. Heffner, "Packetization Layer Path MTU Discovery", March 2007, -available from @url{http://www.ietf.org/rfc/rfc4821.txt}. +available from @url{https://www.ietf.org/rfc/rfc4821.txt}. @item @anchor{RFC2560}[RFC2560] M. Myers et al, "X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP", June 1999, Available from -@url{http://www.ietf.org/rfc/rfc2560.txt}. +@url{https://www.ietf.org/rfc/rfc2560.txt}. @item @anchor{RIVESTCRL}[RIVESTCRL] R. L. Rivest, "Can We Eliminate Certificate Revocation Lists?", Proceedings of Financial Cryptography '98; Springer Lecture Notes in Computer Science No. 1465 (Rafael Hirschfeld, ed.), February 1998), pages 178--183, available from -@url{http://people.csail.mit.edu/rivest/Rivest-CanWeEliminateCertificateRevocationLists.pdf}. +@url{https://people.csail.mit.edu/rivest/Rivest-CanWeEliminateCertificateRevocationLists.pdf}. @end table diff --git a/doc/cha-cert-auth.texi b/doc/cha-cert-auth.texi index a5432f3543..cea30cf465 100644 --- a/doc/cha-cert-auth.texi +++ b/doc/cha-cert-auth.texi @@ -5,7 +5,7 @@ The most known authentication method of @acronym{TLS} are certificates. The PKIX @xcite{PKIX} public key infrastructure is daily used by anyone using a browser today. @acronym{GnuTLS} provides a simple API to -use the @acronym{X.509} certificates @xcite{PKIX}. +verify the @acronym{X.509} certificates as in @xcite{PKIX}. The key exchange algorithms supported by certificate authentication are shown in @ref{tab:key-exchange}. @@ -53,6 +53,7 @@ to use this key exchange algorithm. @menu * X.509 certificates:: * OpenPGP certificates:: +* Raw public-keys:: * Advanced certificate verification:: * Digital signatures:: @end menu @@ -408,7 +409,7 @@ flags are part of the enumeration Some systems provide a system wide trusted certificate storage accessible using the PKCS #11 API. That is, the trusted certificates are queried and accessed using the PKCS #11 API, and trusted certificate properties, such as purpose, are marked using -attached extensions. One example is the p11-kit trust module@footnote{see @url{http://p11-glue.freedesktop.org/trust-module.html}.}. +attached extensions. One example is the p11-kit trust module@footnote{see @url{https://p11-glue.github.io/p11-glue/trust-module.html}.}. These special PKCS #11 modules can be used for GnuTLS certificate verification if marked as trust policy modules, i.e., with @code{trust-policy: yes} in the p11-kit module file. @@ -448,7 +449,7 @@ indicates that the CA is allowed to sign certificates for email users. @item GNUTLS_KP_OCSP_SIGNING @tab 1.3.6.1.5.5.7.3.9 @tab The certificate is to be used for signing OCSP responses. When in a CA certificate, it -indicates that the CA is allowed to sign certificates which sign OCSP reponses. +indicates that the CA is allowed to sign certificates which sign OCSP responses. @item GNUTLS_KP_ANY @tab 2.5.29.37.0 @tab @@ -469,16 +470,46 @@ other verification functions which do not allow setting a purpose, would operate @cindex OpenPGP certificates Previous versions of GnuTLS supported limited @acronym{OpenPGP} key -authentication. That functionality has been deprecated and although -is still made available, it is no longer recommended to use. -The reason is that, supporting alternative authentication -methods, when X.509 and PKIX were new and not well established, seemed like a -good idea, in today's internet X.509 is unquestionably the main +authentication. That functionality has been deprecated and is no longer +made available. The reason is that, supporting alternative authentication +methods, when X.509 and PKIX were new on the Internet and not well established, seemed like a +good idea, in today's Internet X.509 is unquestionably the main container for certificates. As such supporting more options with no clear use-cases, is a distraction that consumes considerable resources for -improving and testing. For that we have decided to mark this functionality -as deprecated, and will be dropped in one of the next GnuTLS major releases. +improving and testing the library. For that we have decided to drop +this functionality completely in 3.6.0. + +@node Raw public-keys +@subsection Raw public-keys +@cindex Raw public-keys + +There are situations in which a rather large certificate / certificate chain is undesirable or impractical. +An example could be a resource contrained sensor network in which you do want to use authentication of and +encryption between your devices but where your devices lack loads of memory or processing power. Furthermore, +there are situations in which you don't want to or can't rely on a PKIX. TLS is, next to a PKIX environment, +also commonly used with self-signed certificates in smaller deployments where the self-signed certificates +are distributed to all involved protocol endpoints out-of-band. This practice does, however, still require +the overhead of the certificate generation even though none of the information found in the certificate is +actually used. + +With raw public-keys, only a subset of the information found in typical certificates is utilized: namely, +the SubjectPublicKeyInfo structure (in ASN.1 format) of a PKIX certificate that carries the parameters +necessary to describe the public-key. Other parameters found in PKIX certificates are omitted. By omitting +various certificate-related structures, the resulting raw public-key is kept fairly small in comparison to +the original certificate, and the code to process the keys can be simpler. + +It should be noted however, that the authenticity of these raw keys must be verified by an out-of-band mechanism +or something like @acronym{TOFU}. +@menu +* Importing raw public-keys:: +@end menu + +@node Importing raw public-keys +@subsubsection Importing raw public-keys +Raw public-keys and their private counterparts can best be handled by using the abstract types +@code{gnutls_pubkey_t} and @code{gnutls_privkey_t} respectively. To learn how to use these +see @ref{Abstract key types}. @node Advanced certificate verification @subsection Advanced certificate verification @@ -514,7 +545,7 @@ failure is not enough to compromise the system. For example a server compromise may be detected using OCSP, and a CA compromise can be detected using the trust on first use method. Such a hybrid system with X.509 and trust on first use authentication is -shown in @ref{Simple client example with SSH-style certificate verification}. +shown in @ref{Client example with SSH-style certificate verification}. See @ref{Certificate verification} on how to use the available functionality. diff --git a/doc/cha-cert-auth2.texi b/doc/cha-cert-auth2.texi index 3b1d445922..e325b614c1 100644 --- a/doc/cha-cert-auth2.texi +++ b/doc/cha-cert-auth2.texi @@ -312,27 +312,53 @@ To avoid applications contacting the OCSP server directly, TLS servers can provide a "stapled" OCSP response in the TLS handshake. That way the client application needs to do nothing more. GnuTLS will automatically consider the stapled OCSP response during the TLS certificate verification -(see @funcref{gnutls_certificate_verify_peers2}). -The stapled response can be obtained using @funcref{gnutls_ocsp_status_request_get}. +(see @funcref{gnutls_certificate_verify_peers2}). To disable the automatic +OCSP verification the flag @code{GNUTLS_VERIFY_DISABLE_CRL_CHECKS} should be +specified to @funcref{gnutls_certificate_set_verify_flags}. -In addition, since GnuTLS 3.5.1 the client will consider the @xcite{RFC7633} OCSP-Must-staple -certificate extension, and will consider it while checking for stapled OCSP responses. If the -extension is present and no OCSP staple is found the certificate verification will fail -and the status code @code{GNUTLS_CERT_MISSING_OCSP_STATUS} will returned from the verification -function. +Since GnuTLS 3.5.1 the client certificate verification will consider the @xcite{RFC7633} +OCSP-Must-staple certificate extension, and will consider it while checking for stapled +OCSP responses. If the extension is present and no OCSP staple is found, the certificate +verification will fail and the status code @code{GNUTLS_CERT_MISSING_OCSP_STATUS} will +returned from the verification function. -GnuTLS servers can provide this response to their clients using the following functions. +Under TLS 1.2 only one stapled response can be sent by a server, the OCSP +response associated with the end-certificate. Under TLS 1.3 a server can +send multiple OCSP responses, typically one for each certificate in the +certificate chain. The following functions can be used by a client +application to retrieve the OCSP responses as sent by the server. -@showfuncC{gnutls_certificate_set_ocsp_status_request_function,gnutls_certificate_set_ocsp_status_request_file,gnutls_ocsp_status_request_is_checked} +@showfuncB{gnutls_ocsp_status_request_get,gnutls_ocsp_status_request_get2} -The simplest approach is for a server to provide the OCSP server's response using the @funcref{gnutls_certificate_set_ocsp_status_request_file}. -The response may be updated periodically using the following command (see also @ref{ocsptool Invocation}). +GnuTLS servers can provide OCSP responses to their clients using the following functions. + +@showfuncC{gnutls_certificate_set_retrieve_function3,gnutls_certificate_set_ocsp_status_request_file2,gnutls_ocsp_status_request_is_checked} + +A server is expected to provide the relevant certificate's OCSP responses using +@funcref{gnutls_certificate_set_ocsp_status_request_file2}, and ensure a +periodic reload/renew of the credentials. An estimation of the OCSP responses +expiration can be obtained using the @funcref{gnutls_certificate_get_ocsp_expiration} function. + +@showfuncdesc{gnutls_certificate_get_ocsp_expiration} + +Prior to GnuTLS 3.6.4, the functions +@funcref{gnutls_certificate_set_ocsp_status_request_function2} +@funcref{gnutls_certificate_set_ocsp_status_request_file} were provided +to set OCSP responses. These functions are still functional, but cannot be used +to set multiple OCSP responses as allowed by TLS1.3. + +The responses can be updated periodically using the 'ocsptool' command +(see also @ref{ocsptool Invocation}). @example ocsptool --ask --load-cert server_cert.pem --load-issuer the_issuer.pem - --load-signer the_issuer.pem --outfile ocsp.response + --load-signer the_issuer.pem --outfile ocsp.resp @end example +In order to allow multiple OCSP responses to be concatenated, GnuTLS +supports PEM-encoded OCSP responses. These can be generated using +'ocsptool' with the '--no-outder' parameter. + @node Managing encrypted keys @subsection Managing encrypted keys diff --git a/doc/cha-config.texi b/doc/cha-config.texi new file mode 100644 index 0000000000..f094407900 --- /dev/null +++ b/doc/cha-config.texi @@ -0,0 +1,174 @@ +@node System-wide configuration of the library +@chapter System-wide configuration of the library +@cindex System-wide configuration + +@acronym{GnuTLS} 3.6.9 introduced a system-wide configuration of the library +which can be used to disable or mark algorithms and protocols as insecure +system-wide, overriding the library defaults. The format of this +configuration file is of an INI file, with the hash ('#') allowed for +commenting. It intentionally does not allow switching algorithms or protocols +which were disabled or marked as insecure during compile time to the secure +set. This is to prevent the feature from being used to attack the system. +Unknown options or sections in the configuration file are skipped unless +the environment variable @code{GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID} is +set to 1, where it would cause the library to exit on unknown options. + +The location of the default configuration file is @code{/etc/gnutls/config}, +but its actual location may be overriden during compile time or at run-time +using the @code{GNUTLS_SYSTEM_PRIORITY_FILE} environment variable. The file +used can be queried using @funcref{gnutls_get_system_config_file}. + +@showfuncdesc{gnutls_get_system_config_file} + +@menu +* Application-specific priority strings:: +* Disabling algorithms and protocols:: +* Querying for disabled algorithms and protocols:: +* Overriding the parameter verification profile:: +* Overriding the default priority string:: +@end menu + +@node Application-specific priority strings +@section Application-specific priority strings + +It is possible to specify custom cipher priority strings, in addition to the +default priority strings (@code{NORMAL}, @code{PERFORMANCE}, etc.). These can +be used either by individual applications, or even as the default option if +the library is compiled with the configuration option +@code{--with-default-priority-string}. In the latter case the defined +priority string will be used for applications using @funcref{gnutls_set_default_priority} +or @funcref{gnutls_set_default_priority_append}. + +The priority strings can be specified in the global section of the +configuration file, or in the section named @code{[priorities]}. +The format is '@code{KEYWORD = VALUE}', e.g., + +When used they may be followed by additional options that will be appended to the +system string (e.g., '@code{@@EXAMPLE-PRIORITY:+SRP}'). '@code{EXAMPLE-PRIORITY=NORMAL:+ARCFOUR-128}'. +Since version 3.5.1 applications are allowed to specify fallback keywords such as +@@KEYWORD1,@@KEYWORD2, and the first valid keyword will be used. + +The following example configuration defines a priority string called @code{@@SYSTEM}. +When set, its full settings can be queried using @code{gnutls-cli --priority @@SYSTEM --list}. + +@example +[priorities] +SYSTEM = NORMAL:-AES-128-CBC:-AES-256-CBC +@end example + + +@node Disabling algorithms and protocols +@section Disabling algorithms and protocols + +The approach above works well to create consistent system-wide settings +for cooperative GnuTLS applications. When an application however does not +use the @funcref{gnutls_set_default_priority} or @funcref{gnutls_set_default_priority_append} +functions, the method is not sufficient to prevent applications from using +protocols or algorithms forbidden by a local policy. +The override method described below enables the deprecation of algorithms and +protocols system-wide for all applications. + +The available options must be set in the @code{[overrides]} section of the +configuration file and can be +@itemize +@item @code{insecure-sig-for-cert}: to mark the signature algorithm as insecure when used in certificates. +@item @code{insecure-sig}: to mark the signature algorithm as insecure for any use. +@item @code{insecure-hash}: to mark the hash algorithm as insecure for digital signature use (provides a more generic way to disable digital signatures for broken hash algorithms). +@item @code{disabled-version}: to disable the specified TLS versions. +@item @code{tls-disabled-cipher}: to disable the specified ciphers for use in the TLS or DTLS protocols. +@item @code{tls-disabled-mac}: to disable the specified MAC algorithms for use in the TLS or DTLS protocols. +@item @code{tls-disabled-group}: to disable the specified group for use in the TLS or DTLS protocols. +@item @code{tls-disabled-kx}: to disable the specified key exchange algorithms for use in the TLS or DTLS protocols (applies to TLS1.2 or earlier). +@end itemize + +Each of the options can be repeated multiple times when multiple values need +to be disabled. + +The valid values for the options above can be found in the 'Protocols', 'Digests' +'PK-signatures', 'Protocols', 'Ciphrers', and 'MACs' fields of the output of @code{gnutls-cli --list}. + +@subsection Examples + +The following example marks as insecure all digital signature algorithms +which depend on SHA384, as well as the RSA-SHA1 signature algorithm. + +@example +[overrides] +insecure-hash = sha384 +insecure-sig = rsa-sha1 +@end example + +The following example marks RSA-SHA256 as insecure for use in certificates +and disables the TLS1.0 and TLS1.1 protocols. + +@example +[overrides] +insecure-sig-for-cert = rsa-sha256 +disabled-version = tls1.0 +disabled-version = tls1.1 +@end example + +The following example disables the @code{AES-128-CBC} and @code{AES-256-CBC} +ciphers, the @code{HMAC-SHA1} MAC algorithm and the @code{GROUP-FFDHE8192} +group for TLS and DTLS protocols. + +@example +[overrides] +tls-disabled-cipher = aes-128-cbc +tls-disabled-cipher = aes-256-cbc +tls-disabled-mac = sha1 +tls-disabled-group = group-ffdhe8192 +@end example + +@node Querying for disabled algorithms and protocols +@section Querying for disabled algorithms and protocols + +When necessary applications can query whether a particular algorithm +or protocol has been marked as insecure or disabled system-wide. +Digital signatures can be queried using the following algorithms. +@showfuncB{gnutls_sign_is_secure,gnutls_sign_is_secure2} + +Any disabled protocol versions or elliptic curves will not show up in the +lists provided by the following functions. + +@showfuncC{gnutls_protocol_list,gnutls_group_list,gnutls_ecc_curve_list} + +It is not possible to query for insecure hash algorithms directly +(only indirectly through the signature API). + + +@node Overriding the parameter verification profile +@section Overriding the parameter verification profile + +When verifying a certificate or TLS session parameters, GnuTLS uses a set +of profiles associated with the session to determine whether the parameters +seen in the session are acceptable. For example, whether the RSA public key +size as seen on the wire, or the Diffie-Hellman parameters for the session. +These profiles are normally set using the @code{%PROFILE} priority string +(see @ref{Priority Strings} and @ref{Selecting cryptographic key sizes}). + +It is possible to set the low bar profile that applications cannot override +using the following. + +@example +[overrides] + +# do not allow applications use the LOW or VERY-WEAK profiles. +min-verification-profile = legacy + +@end example + +@node Overriding the default priority string +@section Overriding the default priority string + +GnuTLS uses default priority string which is defined at compiled +time. Usually it is set to @code{NORMAL}. This override allows to set +the default priority string to something more appropriate for a given +deployment. + +Below example sets a more specific default priority string. +@example +[overrides] +default-priority-string = SECURE128:-VERS-TLS-ALL:+VERS-TLS1.3 + +@end example diff --git a/doc/cha-crypto.texi b/doc/cha-crypto.texi index 567233afac..5fad4fdf6e 100644 --- a/doc/cha-crypto.texi +++ b/doc/cha-crypto.texi @@ -6,11 +6,12 @@ it does not provide access to basic cryptographic primitives. However it abstracts the internal cryptographic back-end (see @ref{Cryptographic Backend}), providing symmetric crypto, hash and HMAC algorithms, as well access to the random number generation. For a low-level crypto API the usage of nettle -@footnote{See @uref{http://www.lysator.liu.se/~nisse/nettle/}.} library is recommended. +@footnote{See @uref{https://www.lysator.liu.se/~nisse/nettle/}.} library is recommended. @menu * Symmetric algorithms:: * Public key algorithms:: +* Cryptographic Message Syntax / PKCS7:: * Hash and MAC functions:: * Random number generation:: * Overriding algorithms:: @@ -22,11 +23,39 @@ to the random number generation. For a low-level crypto API the usage of nettle @cindex symmetric cryptography The available functions to access symmetric crypto algorithms operations -are shown below. The supported algorithms are the algorithms required by the TLS protocol. -They are listed in @ref{gnutls_cipher_algorithm_t}. +are listed in the sections below. The supported algorithms are the algorithms required by the TLS protocol. +They are listed in @ref{gnutls_cipher_algorithm_t}. Note that there two +types of ciphers, the ones providing an authenticated-encryption with +associated data (AEAD), and the legacy ciphers which provide raw access +to the ciphers. We recommend the use of the AEAD ciphers under the AEAD APIs +for new applications as they are designed to minimize the misuse of +cryptographic primitives. @showenumdesc{gnutls_cipher_algorithm_t,The supported ciphers.} +@subheading Authenticated-encryption API + +The AEAD API provides access to all ciphers supported by GnuTLS which support +authenticated encryption with associated data; these ciphers are marked with +the AEAD keyword on the table above. The AEAD cipher API is +particularly suitable for message or packet-encryption as it provides +authentication and encryption on the same API. See @code{RFC5116} for more +information on authenticated encryption. + +@showfuncD{gnutls_aead_cipher_init,gnutls_aead_cipher_encrypt,gnutls_aead_cipher_decrypt,gnutls_aead_cipher_deinit} + +Because the encryption function above may be difficult to use with +scattered data, we provide the following API. + +@showfuncdesc{gnutls_aead_cipher_encryptv} + +@subheading Legacy API + +The legacy API provides low-level access to all legacy ciphers supported by GnuTLS, +and some of the AEAD ciphers (e.g., AES-GCM and CHACHA20). The restrictions +of the nettle library implementation of the ciphers apply verbatim to this +API@footnote{See the nettle manual @url{https://www.lysator.liu.se/~nisse/nettle/nettle.html}}. + @showfuncE{gnutls_cipher_init,gnutls_cipher_encrypt2,gnutls_cipher_decrypt2,gnutls_cipher_set_iv,gnutls_cipher_deinit} @showfuncB{gnutls_cipher_add_auth,gnutls_cipher_tag} @@ -35,34 +64,68 @@ it is recommended to use the following functions which are solely for AEAD ciphe API is designed to be simple to use and also hard to misuse, by handling the tag verification and addition in transparent way. -@showfuncD{gnutls_aead_cipher_init,gnutls_aead_cipher_encrypt,gnutls_aead_cipher_decrypt,gnutls_aead_cipher_deinit} - @node Public key algorithms @section Public key algorithms @cindex public key algorithms -Public key cryptography algorithms such as RSA, DSA and ECDSA, can be +Public key cryptography algorithms such as RSA, DSA and ECDSA, are accessed using the abstract key API in @ref{Abstract key types}. This is a high level API with the advantage of transparently handling keys -in memory and keys present in smart cards. +stored in memory and keys present in smart cards. -@subsection PKCS #7 signing -@cindex PKCS #7 +@showfuncF{gnutls_privkey_init,gnutls_privkey_import_url,gnutls_privkey_import_x509_raw,gnutls_privkey_sign_data,gnutls_privkey_sign_hash,gnutls_privkey_deinit} + +@showfuncF{gnutls_pubkey_init,gnutls_pubkey_import_url,gnutls_pubkey_import_x509,gnutls_pubkey_verify_data2,gnutls_pubkey_verify_hash2,gnutls_pubkey_deinit} + +Keys stored in memory can be imported using functions like +@funcref{gnutls_privkey_import_x509_raw}, while keys on smart cards or HSMs +should be imported using their PKCS#11 URL with +@funcref{gnutls_privkey_import_url}. + +If any of the smart card operations require PIN, that should be provided +either by setting the global PIN function +(@funcref{gnutls_pkcs11_set_pin_function}), or better with the targeted to +structures functions such as @funcref{gnutls_privkey_set_pin_function}. + + +@subsection Key generation + +All supported key types (including RSA, DSA, ECDSA, Ed25519, Ed448) can be generated +with GnuTLS. They can be generated with the simpler @funcref{gnutls_privkey_generate} +or with the more advanced @funcref{gnutls_privkey_generate2}. + +@showfuncdesc{gnutls_privkey_generate2} + +@node Cryptographic Message Syntax / PKCS7 +@section Cryptographic Message Syntax / PKCS7 +@cindex public key algorithms +@cindex cryptographic message syntax @cindex file signing +@cindex CMS +@cindex PKCS #7 -The PKCS #7 format is common format used for digital signatures. It allows to sign +The CMS or PKCS #7 format is a commonly used format for digital signatures. +PKCS #7 is the name of the original standard when published by RSA, though +today the standard is adopted by IETF under the name CMS. + +The standards include multiple ways of signing a digital document, e.g., by embedding the data into the signature, or creating detached signatures of the data, -including a timestamp, additional certificates etc. In certain cases this format is also -used to transport lists of certificates and CRLs. +including a timestamp, additional certificates etc. In certain cases the +same format is also used to transport lists of certificates and CRLs. + +It is a relatively popular standard to sign structures, and is being used to +sign in PDF files, as well as for signing kernel modules and other +structures. -The basic functions to initialize, deinitialize, import, export or print information -about a PKCS #7 structure are shown below. +In GnuTLS, the basic functions to initialize, deinitialize, import, export or print information +about a PKCS #7 structure are listed below. @showfuncE{gnutls_pkcs7_init,gnutls_pkcs7_deinit,gnutls_pkcs7_export2,gnutls_pkcs7_import,gnutls_pkcs7_print} The following functions allow the verification of a structure using either a trust list, or individual certificates. The @funcref{gnutls_pkcs7_sign} function is the data signing function. @showfuncB{gnutls_pkcs7_verify_direct,gnutls_pkcs7_verify} + @showfuncdesc{gnutls_pkcs7_sign} @showenumdesc{gnutls_pkcs7_sign_flags,Flags applicable to gnutls_pkcs7_sign()} diff --git a/doc/cha-gtls-app.texi b/doc/cha-gtls-app.texi index fc5e7acbab..ab82f14aad 100644 --- a/doc/cha-gtls-app.texi +++ b/doc/cha-gtls-app.texi @@ -129,7 +129,7 @@ See @ref{Error codes}, for a description of the available error codes. All strings that are to provided as input to @acronym{GnuTLS} functions should be in UTF-8 unless otherwise specified. Output strings are also in UTF-8 format unless otherwise specified. When functions take as input -passwords, they will normalize them using @xcite{rfc7613} rules (since +passwords, they will normalize them using @xcite{RFC7613} rules (since GnuTLS 3.5.7). When data of a fixed size are provided to @acronym{GnuTLS} functions then @@ -199,13 +199,15 @@ CPU. The currently available options are: @item 0x4: Enable SSSE3 @item 0x8: Enable PCLMUL @item 0x10: Enable AVX +@item 0x20: Enable SHA_NI @item 0x100000: Enable VIA padlock @item 0x200000: Enable VIA PHE @item 0x400000: Enable VIA PHE SHA512 @end itemize @item @code{GNUTLS_FORCE_FIPS_MODE} -@tab In setups where GnuTLS is compiled with support for FIPS140-2 (see --enable-fips140-mode in configure), that option if set to one enforces the FIPS140 mode. +@tab In setups where GnuTLS is compiled with support for FIPS140-2 (see @ref{FIPS140-2 mode}) +if set to one it will force the FIPS mode enablement. @end multitable @caption{Environment variables used by the library.} @@ -230,28 +232,37 @@ The @acronym{GnuTLS} library is thread safe by design, meaning that objects of the library such as TLS sessions, can be safely divided across threads as long as a single thread accesses a single object. This is sufficient to support a server which handles several sessions per thread. -If, however, an object needs to be shared across threads then access must be -protected with a mutex. Read-only access to objects, for example the -credentials holding structures, is also thread-safe. - -A @code{gnutls_session_t} object can be shared by two threads, one sending, -the other receiving. In that case rehandshakes, if required, -must only be handled by a single thread being active. The termination of a session -should be handled, either by a single thread being active, or by the sender thread -using @funcref{gnutls_bye} with @code{GNUTLS_SHUT_WR} and the receiving thread -waiting for a return value of zero. - -The random generator of the cryptographic back-end, utilizes mutex locks (e.g., pthreads on GNU/Linux and CriticalSection on Windows) -which are setup by @acronym{GnuTLS} on library initialization. Prior to version 3.3.0 -they were setup by calling @funcref{gnutls_global_init}.@footnote{On special systems +Read-only access to objects, for example the credentials holding structures, +is also thread-safe. + +A @code{gnutls_session_t} object could also be shared by two threads, one sending, +the other receiving. However, care must be taken on the following use cases: +@itemize +@item The re-handshake process in TLS 1.2 or earlier must be handled only in +a single thread and no other thread may be performing any operation. +@item The flag @code{GNUTLS_AUTO_REAUTH} cannot be used safely in this mode of operation. +@item Any other operation which may send or receive data, like key update (c.f., +@funcref{gnutls_session_key_update}), must not be performed while threads +are receiving or writing. +@item The termination of a session should be handled, either by a single thread being +active, or by the sender thread using @funcref{gnutls_bye} with @code{GNUTLS_SHUT_WR} +and the receiving thread waiting for a return value of zero (or timeout on +certain servers which do not respond). +@item The functions @funcref{gnutls_transport_set_errno} and @funcref{gnutls_record_get_direction} +should not be relied during parallel operation. +@end itemize + +For several aspects of the library (e.g., the random generator, PKCS#11 +operations), the library may utilize mutex locks (e.g., pthreads on GNU/Linux and CriticalSection on Windows) +which are transparently setup on library initialization. Prior to version 3.3.0 +these were setup by explicitly calling @funcref{gnutls_global_init}.@footnote{On special systems you could manually specify the locking system using the function @funcref{gnutls_global_set_mutex} before calling any other GnuTLS function. Setting mutexes manually is not recommended.} -Note that, on Glibc systems the GnuTLS library does not link with the libpthread -library by default, it utilizes the Glibc mutex stubs, which allows Glibc to -use the non-multithreaded (and optimized) variants of its algorithms. -That, however, for applications using GnuTLS that may potentially utilize mutexes, -requires them to explicitly link with libpthread. + +Note that, on Glibc systems, unless the application is explicitly linked +with the libpthread library, no mutex locks are used and setup by GnuTLS. It +will use the Glibc mutex stubs. @node Running in a sandbox @subsection Running in a sandbox @@ -287,10 +298,10 @@ operation. As well as any calls needed for memory allocation to work. Note however, that GnuTLS depends on libc for the system calls, and there is no guarantee that libc will call the expected system call. For that it is recommended to test your -program in all the targetted platforms when filters like seccomp are in place. +program in all the targeted platforms when filters like seccomp are in place. An example with a seccomp filter from GnuTLS' test suite is at: -@url{http://gitlab.com/gnutls/gnutls/blob/master/tests/seccomp.c}. +@url{https://gitlab.com/gnutls/gnutls/blob/master/tests/seccomp.c}. @node Sessions and fork @subsection Sessions and fork @@ -353,7 +364,9 @@ The GnuTLS library is initialized on load; prior to 3.3.0 was initialized by cal The original behavior of requiring explicit initialization can obtained by setting the GNUTLS_NO_EXPLICIT_INIT environment variable to 1, or by using the macro GNUTLS_SKIP_GLOBAL_INIT in a global section of your program --the latter works in systems with -support for weak symbols only.}. +support for weak symbols only.}. @funcref{gnutls_global_init} in +versions after 3.3.0 is thread-safe (see @ref{Thread safety}). + The initialization typically enables CPU-specific acceleration, performs any required precalculations needed, opens any required system devices (e.g., /dev/urandom on Linux) and initializes subsystems that could be used later. @@ -464,8 +477,8 @@ and the underlying protocol type, i.e., datagram (UDP) or reliable (TCP). After the session initialization details on the allowed ciphersuites and protocol versions should be set using the priority functions -such as @funcref{gnutls_priority_set_direct}. We elaborate on them -in @ref{Priority Strings}. +such as @funcref{gnutls_priority_set} and @funcref{gnutls_priority_set_direct}. +We elaborate on them in @ref{Priority Strings}. The credentials used for the key exchange method, such as certificates or usernames and passwords should also be associated with the session current session using @funcref{gnutls_credentials_set}. @@ -477,6 +490,7 @@ current session using @funcref{gnutls_credentials_set}. @menu * Certificate credentials:: +* Raw public-key credentials:: * SRP credentials:: * PSK credentials:: * Anonymous credentials:: @@ -493,7 +507,7 @@ with the credential types is shown in @ref{tab:key-exchange-cred}. @headitem Authentication method @tab Key exchange @tab Client credentials @tab Server credentials -@item Certificate +@item Certificate and Raw public-key @tab @code{KX_RSA}, @code{KX_DHE_RSA}, @code{KX_DHE_DSS}, @@ -538,6 +552,10 @@ a pair, but a server could require it. In this section we discuss general issues applying to both client and server certificates. The next section will elaborate on issues arising from client authentication only. +In order to use certificate credentials one must first initialize a credentials +structure of type @code{gnutls_certificate_credentials_t}. After use this structure must +be freed. This can be done with the following functions. + @showfuncB{gnutls_certificate_allocate_credentials,gnutls_certificate_free_credentials} After the credentials structures are initialized, the certificate @@ -579,8 +597,8 @@ In that case a certificate should be selected according the peer's signature algorithm preferences. To get those preferences use @funcref{gnutls_sign_algorithm_get_requested}. Both functions are shown below. -@showfuncC{gnutls_certificate_set_retrieve_function,gnutls_certificate_set_retrieve_function2,gnutls_sign_algorithm_get_requested} -c +@showfuncD{gnutls_certificate_set_retrieve_function,gnutls_certificate_set_retrieve_function2,gnutls_certificate_set_retrieve_function3,gnutls_sign_algorithm_get_requested} + The functions above do not handle the requested server name automatically. A server would need to check the name requested by the client using @funcref{gnutls_server_name_get}, and serve the appropriate @@ -614,8 +632,8 @@ available in certificate authentication. @subsubheading Client certificate authentication If a certificate is to be requested from the client during the handshake, the server -will send a certificate request message. This behavior is controlled @funcref{gnutls_certificate_server_set_request}. -The request contains a list of the acceptable by the server certificate signers. This list +will send a certificate request message. This behavior is controlled by @funcref{gnutls_certificate_server_set_request}. +The request contains a list of the by the server accepted certificate signers. This list is constructed using the trusted certificate authorities of the server. In cases where the server supports a large number of certificate authorities it makes sense not to advertise all of the names to save bandwidth. That can @@ -627,6 +645,20 @@ signed by server's acceptable signers. @showfuncdesc{gnutls_certificate_send_x509_rdn_sequence} +On the client side, it needs to set its certificates on the credentials +structure, similarly to server side from a file, or via a callback. Once the +certificates are available in the credentials structure, the client will +send them if during the handshake the server requests a certificate signed +by the issuer of its CA. + +In the case a single certificate is available and the server does not +specify a signer's list, then that certificate is always sent. It is, +however possible, to send a certificate even when the advertised CA +list by the server contains CAs other than its signer. That can be achieved +using the @code{GNUTLS_FORCE_CLIENT_CERT} flag in @funcref{gnutls_init}. + +@showfuncC{gnutls_certificate_set_x509_key_file,gnutls_certificate_set_x509_simple_pkcs12_file,gnutls_certificate_set_retrieve_function2} + @subsubheading Client or server certificate verification @@ -659,6 +691,22 @@ can be printed using @funcref{gnutls_certificate_verification_status_print}. @showfuncB{gnutls_certificate_verify_peers3,gnutls_certificate_set_verify_function} +Note that when using raw public-keys verification will not work because there is no corresponding +certificate body belonging to the raw key that can be verified. In that case the @funcref{gnutls_certificate_verify_peers} +family of functions will return a GNUTLS_E_INVALID_REQUEST error code. For authenticating raw public-keys +one must use an out-of-band mechanism, e.g. by comparing hashes or using trust on first use +(see @ref{Verifying a certificate using trust on first use authentication}). + + +@node Raw public-key credentials +@subsection Raw public-keys +As of version 3.6.6 GnuTLS supports @ref{Raw public-keys}. With raw public-keys only the +public-key part (that is normally embedded in a certificate) is transmitted to the peer. +In order to load a raw public-key and its corresponding private key in a credentials +structure one can use the following functions. + +@showfuncC{gnutls_certificate_set_key,gnutls_certificate_set_rawpk_key_mem,gnutls_certificate_set_rawpk_key_file} + @node SRP credentials @subsection SRP @@ -729,9 +777,9 @@ the hint, for example in the callback function, using @node Anonymous credentials @subsection Anonymous The key exchange methods for anonymous authentication -might require Diffie-Hellman parameters to be generated by the server and -associated with an anonymous credentials structure. Check -@ref{Parameter generation} for more information. +since GnuTLS 3.6.0 will utilize the RFC7919 parameters, unless +explicit parameters have been provided and associated with an +anonymous credentials structure. Check @ref{Parameter generation} for more information. The initialization functions for the credentials are shown below. @showfuncD{gnutls_anon_allocate_server_credentials,gnutls_anon_allocate_client_credentials,gnutls_anon_free_server_credentials,gnutls_anon_free_client_credentials} @@ -802,6 +850,8 @@ remaining until the next retransmission, or better the time until @menu * Asynchronous operation:: * Reducing round-trips:: +* Zero-roundtrip mode:: +* Anti-replay protection:: * DTLS sessions:: * DTLS and SCTP:: @end menu @@ -875,25 +925,177 @@ no data have been received. The full TLS 1.2 handshake requires 2 round-trips to complete, and when combined with TCP's SYN and SYN-ACK negotiation it extends to 3 full -round-trips. While, the abbreviated (resumed) TLS handshake drops that to 2.5 -round-trips, it still adds considerable latency, reducing its applicability -to certain applications. +round-trips. While, TLS 1.3 reduces that to two round-trips when under TCP, +it still adds considerable latency, making the protocol unsuitable for +certain applications. -In client side, it is possible to take advantage of the TCP fast open -@xcite{RFC7413} mechanism on operating +To optimize the handshake latency, in client side, it is possible to take +advantage of the TCP fast open @xcite{RFC7413} mechanism on operating systems that support it. That can be done either by manually crafting the push and pull callbacks, or by utilizing @funcref{gnutls_transport_set_fastopen}. In that -case the initial TCP handshake is eliminated, reducing the TLS handshake round-trip to 2. -Note, that in that case any connection failures will be reported during the -@funcref{gnutls_handshake} function call with error code -@code{GNUTLS_E_PUSH_ERROR}. +case the initial TCP handshake is eliminated, reducing the TLS 1.2 handshake round-trip +to 2, and the TLS 1.3 handshake to a single round-trip. +Note, that when this function is used, any connection failures will be reported during the +@funcref{gnutls_handshake} function call with error code @code{GNUTLS_E_PUSH_ERROR}. @showfuncdesc{gnutls_transport_set_fastopen} -In non-resumed sessions it is possible to further reduce the round-trips to -a single one by taking advantage of the @ref{False Start} TLS extension. -This can be enabled by setting the @acronym{GNUTLS_ENABLE_FALSE_START} flag -on @funcref{gnutls_init}. +When restricted to TLS 1.2, and non-resumed sessions, it is possible to further +reduce the round-trips to a single one by taking advantage of the @ref{False Start} +TLS extension. This can be enabled by setting the @acronym{GNUTLS_ENABLE_FALSE_START} +flag on @funcref{gnutls_init}. + +Under TLS 1.3, the server side can start transmitting before the handshake +is complete (i.e., while the client Finished message is still in flight), +when no client certificate authentication is requested. This, unlike false +start, is part of protocol design with no known security implications. +It can be enabled by setting the @acronym{GNUTLS_ENABLE_EARLY_START} on +@funcref{gnutls_init}, and the @funcref{gnutls_handshake} function will +return early, allowing the server to send data earlier. + + +@node Zero-roundtrip mode +@subsection Zero-roundtrip mode + +Under TLS 1.3, when the client has already connected to the server and +is resuming a session, it can start transmitting application data during +handshake. This is called zero round-trip time (0-RTT) mode, and the +application data sent in this mode is called early data. The client can +send early data with @funcref{gnutls_record_send_early_data}. The +client should call this function before calling +@funcref{gnutls_handshake} and after calling +@funcref{gnutls_session_set_data}. + +Note, however, that early data has weaker security properties than +normal application data sent after handshake, such as lack of forward +secrecy, no guarantees of non-replay between connections. Thus it is +disabled on the server side by default. To enable it, the server +needs to: +@enumerate +@item Set @acronym{GNUTLS_ENABLE_EARLY_DATA} on @funcref{gnutls_init}. Note that this option only has effect on server. + +@item Enable anti-replay measure. See @ref{Anti-replay protection} for the details. +@end enumerate + +The server caches the received early data until it is read. To set the +maximum amount of data to be stored in the cache, use +@funcref{gnutls_record_set_max_early_data_size}. After receiving the +EndOfEarlyData handshake message, the server can start retrieving the +received data with @funcref{gnutls_record_recv_early_data}. You can +call the function either after the handshake is complete, or through a +handshake hook (@funcref{gnutls_handshake_set_hook_function}). + +When sending early data, the client should respect the maximum amount +of early data, which may have been previously advertised by the +server. It can be checked using +@funcref{gnutls_record_get_max_early_data_size}, right after calling +@funcref{gnutls_session_set_data}. + +After sending early data, to check whether the sent early data was +accepted by the server, use @funcref{gnutls_session_get_flags} and +compare the result with @acronym{GNUTLS_SFLAGS_EARLY_DATA}. +Similarly, on the server side, the same function and flag can be used +to check whether it has actually accepted early data. + + +@node Anti-replay protection +@subsection Anti-replay protection + +When 0-RTT mode is used, the server must protect itself from replay +attacks, where adversary client reuses duplicate session ticket to send +early data, before the server authenticates the client. + +GnuTLS provides a simple mechanism against replay attacks, following the +method called ClientHello recording. When a session ticket is accepted, +the server checks if the ClientHello message has been already seen. If +there is a duplicate, the server rejects early data. + +The problem of this approach is that the number of recorded messages +grows indefinitely. To prevent that, the server can limit the recording +to a certain time window, which can be configured with +@funcref{gnutls_anti_replay_set_window}. + +The anti-replay mechanism shall be globally initialized with +@funcref{gnutls_anti_replay_init}, and then attached to a session using +@funcref{gnutls_anti_replay_enable}. It can be deinitialized with +@funcref{gnutls_anti_replay_deinit}. + +The server must also set up a database back-end to store ClientHello +messages. That can be achieved using +@funcref{gnutls_anti_replay_set_add_function} and +@funcref{gnutls_anti_replay_set_ptr}. + +Note that, if the back-end stores arbitrary number of ClientHello, it +needs to periodically clean up the stored entries based on the time +window set with @funcref{gnutls_anti_replay_set_window}. The cleanup +can be implemented by iterating through the database entries and calling +@funcref{gnutls_db_check_entry_expire_time}. This is similar to session +database cleanup used by TLS1.2 sessions. + +The full set up of the server using early data would be like the +following example: +@example +#define MAX_EARLY_DATA_SIZE 16384 + +static int +db_add_func(void *dbf, gnutls_datum_t key, gnutls_datum_t data) +@{ + /* Return GNUTLS_E_DB_ENTRY_EXISTS, if KEY is found in the database. + * Otherwise, store it and return 0. + */ +@} + +static int +handshake_hook_func(gnutls_session_t session, unsigned int htype, + unsigned when, unsigned int incoming, const gnutls_datum_t *msg) +@{ + int ret; + char buf[MAX_EARLY_DATA_SIZE]; + + assert(htype == GNUTLS_HANDSHAKE_END_OF_EARLY_DATA); + assert(when == GNUTLS_HOOK_POST); + + if (gnutls_session_get_flags(session) & GNUTLS_SFLAGS_EARLY_DATA) @{ + ret = gnutls_record_recv_early_data(session, buf, sizeof(buf)); + assert(ret >= 0); + @} + + return ret; +@} + +int main() +@{ + ... + /* Initialize anti-replay measure, which can be shared + * among multiple sessions. + */ + gnutls_anti_replay_init(&anti_replay); + + /* Set the database back-end function for the anti-replay data. */ + gnutls_anti_replay_set_add_function(anti_replay, db_add_func); + gnutls_anti_replay_set_ptr(anti_replay, NULL); + + ... + + gnutls_init(&server, GNUTLS_SERVER | GNUTLS_ENABLE_EARLY_DATA); + gnutls_record_set_max_early_data_size(server, MAX_EARLY_DATA_SIZE); + + ... + + /* Set the anti-replay measure to the session. + */ + gnutls_anti_replay_enable(server, anti_replay); + ... + + /* Retrieve early data in a handshake hook; + * you can also do that after handshake. + */ + gnutls_handshake_set_hook_function(server, GNUTLS_HANDSHAKE_END_OF_EARLY_DATA, + GNUTLS_HOOK_POST, handshake_hook_func); + ... +@} +@end example + @node DTLS sessions @subsection DTLS sessions @@ -955,13 +1157,16 @@ exchange. In GnuTLS 3.5.0 and later it is recommended to use @funcref{gnutls_session_set_verify_cert} for the handshake process to ensure the verification of the peer's identity. +That will verify the peer's certificate, against the trusted CA store while +accounting for stapled OCSP responses during the handshake; any error will +be returned as a handshake error. -In older GnuTLS versions it is required to manually verify the peer's certificate -during the handshake by using @funcref{gnutls_certificate_set_verify_function}, and -@funcref{gnutls_certificate_verify_peers2}. See @ref{Certificate authentication} +In older GnuTLS versions it is required to verify the peer's certificate +during the handshake by setting a callback with @funcref{gnutls_certificate_set_verify_function}, +and then using @funcref{gnutls_certificate_verify_peers3} from it. See @ref{Certificate authentication} for more information. -@showfuncB{gnutls_session_set_verify_cert,gnutls_certificate_verify_peers2} +@showfuncB{gnutls_session_set_verify_cert,gnutls_certificate_verify_peers3} @node Data transfer and termination @section Data transfer and termination @@ -1014,7 +1219,7 @@ A session can be deinitialized with the @funcref{gnutls_deinit} function. Although @funcref{gnutls_record_send} is sufficient to transmit data to the peer, when many small chunks of data are to be transmitted it is inefficient and wastes bandwidth due to the TLS record -overhead. In that case it is preferrable to combine the small chunks +overhead. In that case it is preferable to combine the small chunks before transmission. The following functions provide that functionality. @showfuncdesc{gnutls_record_cork} @@ -1057,8 +1262,9 @@ The GnuTLS priority strings specify the TLS session's handshake algorithms and options in a compact, easy-to-use format. These strings are intended as a user-specified override of the library defaults. -That is, applications should use the default settings -(c.f. @funcref{gnutls_set_default_priority}), and provide the user +That is, we recommend applications using the default settings +(c.f. @funcref{gnutls_set_default_priority} or +@funcref{gnutls_set_default_priority_append}), and provide the user with access to priority strings for overriding the default behavior, on configuration files, or other UI. Following such a principle, makes the GnuTLS library as the default settings provider. That is @@ -1066,6 +1272,17 @@ necessary and a good practice, because TLS protocol hardening and phasing out of legacy algorithms, is easier to co-ordinate when happens in a single library. +@showfuncC{gnutls_set_default_priority,gnutls_set_default_priority_append,gnutls_priority_set_direct} + +The priority string translation to the internal GnuTLS form requires +processing and the generated internal form also occupies some memory. +For that, it is recommended to do that processing once in server side, +and share the generated data across sessions. The following functions +allow the generation of a "priority cache" and the sharing of it across +sessions. + +@showfuncD{gnutls_priority_init2,gnutls_priority_init,gnutls_priority_set,gnutls_priority_deinit} + @subheading Using Priority Strings A priority string string may contain a single initial keyword such as in @@ -1075,13 +1292,11 @@ specific algorithm details, as the priority strings are not constant between gnutls versions (they are periodically updated to account for cryptographic advances while providing compatibility with old clients and servers). -@showfuncB{gnutls_priority_set_direct,gnutls_priority_set} - @float Table,tab:prio-keywords @multitable @columnfractions .20 .70 @headitem Keyword @tab Description @item @@KEYWORD @tab -Means that a compile-time specified system configuration file@footnote{The default is @code{/etc/gnutls/default-priorities}.} +Means that a compile-time specified system configuration file (see @ref{System-wide configuration of the library}) will be used to expand the provided keyword. That is used to impose system-specific policies. It may be followed by additional options that will be appended to the system string (e.g., "@@SYSTEM:+SRP"). The system file should have the @@ -1148,17 +1363,23 @@ with an 192 bit security level, as well as the enabling of the corresponding verification profile. @item NONE @tab -Means nothing is enabled. This disables even protocols and -compression methods. It should be followed by the -algorithms to be enabled. +Means nothing is enabled. This disables even protocol versions. +It should be followed by the algorithms to be enabled. Note that +using this option to build a priority string gives detailed control +into the resulting settings, however with new revisions of the TLS protocol +new priority items are routinely added, and such strings are not +forward compatible with new protocols. As such, we +advice against using that option for applications targeting multiple versions +of the GnuTLS library, and recommend using the defaults (see above) or +adjusting the defaults via @funcref{gnutls_set_default_priority_append}. @end multitable @caption{Supported initial keywords.} @end float Unless the initial keyword is "NONE" the defaults (in preference -order) are for TLS protocols TLS 1.2, TLS1.1, TLS1.0; for -compression NULL; for certificate types X.509. +order) are for TLS protocols TLS 1.2, TLS1.1, TLS1.0; +for certificate types X.509. In key exchange algorithms when in NORMAL or SECURE levels the perfect forward secrecy algorithms take precedence of the other protocols. In all cases all the supported key exchange algorithms @@ -1184,8 +1405,7 @@ to this document algorithms and protocols are shown in @ref{tab:prio-algorithms} to list the supported algorithms in your currently using version use @code{gnutls-cli -l}. -To avoid collisions in order to specify a compression algorithm in -the priority string you have to prefix it with "COMP-", protocol versions +To avoid collisions in order to specify a protocol version with "VERS-", signature algorithms with "SIGN-" and certificate types with "CTYPE-". All other algorithms don't need a prefix. Each specified keyword (except for @emph{special keywords}) can be prefixed with any of the following @@ -1202,58 +1422,89 @@ appended with an algorithm will add this algorithm. @multitable @columnfractions .20 .70 @headitem Type @tab Keywords @item Ciphers @tab -Examples are AES-128-GCM, AES-256-GCM, AES-256-CBC; see also +Examples are AES-128-GCM, AES-256-GCM, AES-256-CBC, GOST28147-TC26Z-CNT; see also @ref{tab:ciphers} for more options. Catch all name is CIPHER-ALL which will add -all the algorithms from NORMAL priority. +all the algorithms from NORMAL priority. The shortcut for secure GOST +algorithms is CIPHER-GOST-ALL. @item Key exchange @tab RSA, DHE-RSA, DHE-DSS, SRP, SRP-RSA, SRP-DSS, -PSK, DHE-PSK, ECDHE-RSA, ECDHE-ECDSA, ECDHE-PSK, ANON-ECDH, ANON-DH. The +PSK, DHE-PSK, ECDHE-PSK, ECDHE-RSA, ECDHE-ECDSA, VKO-GOST-12, ANON-ECDH, ANON-DH. Catch all name is KX-ALL which will add all the algorithms from NORMAL -priority. - -Add @code{!DHE-RSA:!DHE-DSS} to the priority string to disable DHE. +priority. Under TLS1.3, the DHE-PSK and ECDHE-PSK strings are equivalent +and instruct for a Diffie-Hellman key exchange using the enabled groups. The +shortcut for secure GOST algorithms is KX-GOST-ALL. @item MAC @tab -MD5, SHA1, SHA256, SHA384, AEAD (used with -GCM ciphers only). All algorithms from NORMAL priority can be accessed with MAC-ALL. +MD5, SHA1, SHA256, SHA384, GOST28147-TC26Z-IMIT, AEAD (used with +GCM ciphers only). All algorithms from NORMAL priority can be accessed with +MAC-ALL. The shortcut for secure GOST algorithms is MAC-GOST-ALL. @item Compression algorithms @tab COMP-NULL, COMP-DEFLATE. Catch all is COMP-ALL. @item TLS versions @tab -VERS-TLS1.0, VERS-TLS1.1, VERS-TLS1.2, +VERS-TLS1.0, VERS-TLS1.1, VERS-TLS1.2, VERS-TLS1.3, VERS-DTLS1.0, VERS-DTLS1.2. -Catch all are VERS-ALL, VERS-TLS-ALL and VERS-DTLS-ALL, and will enable -all protocols from NORMAL priority. +Catch all are VERS-ALL, and will enable +all protocols from NORMAL priority. To distinguish between TLS and DTLS +versions you can use VERS-TLS-ALL and VERS-DTLS-ALL. @item Signature algorithms @tab SIGN-RSA-SHA1, SIGN-RSA-SHA224, SIGN-RSA-SHA256, SIGN-RSA-SHA384, SIGN-RSA-SHA512, SIGN-DSA-SHA1, SIGN-DSA-SHA224, SIGN-DSA-SHA256, SIGN-RSA-MD5, SIGN-ECDSA-SHA1, -SIGN-ECDSA-SHA224, SIGN-ECDSA-SHA256, SIGN-ECDSA-SHA384, SIGN-ECDSA-SHA512. +SIGN-ECDSA-SHA224, SIGN-ECDSA-SHA256, SIGN-ECDSA-SHA384, SIGN-ECDSA-SHA512, +SIGN-RSA-PSS-SHA256, SIGN-RSA-PSS-SHA384, SIGN-RSA-PSS-SHA512, +SIGN-GOSTR341001, SIGN-GOSTR341012-256, SIGN-GOSTR341012-512. Catch all which enables all algorithms from NORMAL priority is SIGN-ALL. +Shortcut which enables secure GOST algorithms is SIGN-GOST-ALL. This option is only considered for TLS 1.2 and later. -@item Elliptic curves @tab +@item Groups @tab +GROUP-SECP256R1, GROUP-SECP384R1, GROUP-SECP521R1, GROUP-X25519, GROUP-X448, +GROUP-FFDHE2048, GROUP-FFDHE3072, GROUP-FFDHE4096, GROUP-FFDHE6144, and +GROUP-FFDHE8192. +Groups include both elliptic curve groups, e.g., SECP256R1, as well as +finite field groups such as FFDHE2048. Catch all which enables all groups +from NORMAL priority is GROUP-ALL. The helper keywords GROUP-DH-ALL, +GROUP-GOST-ALL and GROUP-EC-ALL are also available, restricting the groups +to finite fields (DH), GOST curves and generic elliptic curves. + +@item Elliptic curves (legacy) @tab CURVE-SECP192R1, CURVE-SECP224R1, CURVE-SECP256R1, CURVE-SECP384R1, -CURVE-SECP521R1, and CURVE-X25519. -Catch all which enables all curves from NORMAL priority is CURVE-ALL. - -@item Certificate type @tab -The options CTYPE-OPENPGP (deprecated), and CTYPE-X509 are available. Catch all is CTYPE-ALL. +CURVE-SECP521R1, CURVE-X25519, and CURVE-X448. +Catch all which enables all curves from NORMAL priority is CURVE-ALL. Note +that the CURVE keyword is kept for backwards compatibility only, for new +applications see the GROUP keyword above. + +@item Certificate types @tab +Certificate types can be given in a symmetric fashion (i.e. the same for +both client and server) or, as of GnuTLS 3.6.4, in an asymmetric fashion +(i.e. different for the client than for the server). Alternative certificate +types must be explicitly enabled via flags in @funcref{gnutls_init}. + +The currently supported types are CTYPE-X509, CTYPE-RAWPK which apply both to +client and server; catch all is CTYPE-ALL. The types CTYPE-CLI-X509, CTYPE-SRV-X509, +CTYPE-CLI-RAWPK, CTYPE-SRV-RAWPK can be used to specialize on client or server; +catch all is CTYPE-CLI-ALL and CTYPE-SRV-ALL. The type 'X509' is aliased to 'X.509' +for legacy reasons. + +@item Generic @tab +The keyword GOST is a shortcut for secure GOST algorithms (MACs, ciphers, +KXes, groups and signatures). For example the following string will enable all +TLS 1.2 GOST ciphersuites: 'NONE:+VERS-TLS1.2:+GOST'. @end multitable @caption{The supported algorithm keywords in priority strings.} @end float -Note that the DHE key exchange methods are generally -slower@footnote{It depends on the group used. Primes with -lesser bits are always faster, but also easier to break. See @ref{Selecting cryptographic key sizes} +Note that the finite field groups (indicated by the FFDHE prefix) and DHE key +exchange methods are generally slower@footnote{It depends on the group in use. Groups with +less bits are always faster, but the number of bits ties with the security +parameter. See @ref{Selecting cryptographic key sizes} for the acceptable security levels.} than their elliptic curves counterpart -(ECDHE). Moreover the plain Diffie-Hellman key exchange -requires parameters to be generated and associated with a credentials -structure by the server (see @ref{Parameter generation}). +(ECDHE). The available special keywords are shown in @ref{tab:prio-special1} and @ref{tab:prio-special2}. @@ -1266,21 +1517,22 @@ and @ref{tab:prio-special2}. will enable compatibility mode. It might mean that violations of the protocols are allowed as long as maximum compatibility with problematic clients and servers is achieved. More specifically this -string would disable TLS record random padding, tolerate packets -over the maximum allowed TLS record, and add a padding to TLS Client -Hello packet to prevent it being in the 256-512 range which is known -to be causing issues with a commonly used firewall (see the %DUMBFW option). +string will tolerate packets over the maximum allowed TLS record, +and add a padding to TLS Client Hello packet to prevent it being in the +256-512 range which is known to be causing issues with a commonly used +firewall (see the %DUMBFW option). @item %DUMBFW @tab will add a private extension with bogus data that make the client hello exceed 512 bytes. This avoids a black hole behavior in some -firewalls. This is the @xcite{rfc7685} client hello padding extension, also enabled +firewalls. This is the @xcite{RFC7685} client hello padding extension, also enabled with %COMPAT. @item %NO_EXTENSIONS @tab will prevent the sending of any TLS extensions in client side. Note that TLS 1.2 requires extensions to be used, as well as safe -renegotiation thus this option must be used with care. +renegotiation thus this option must be used with care. When this option +is set no versions later than TLS1.2 can be negotiated. @item %NO_TICKETS @tab will prevent the advertizing of the TLS session ticket extension. @@ -1312,11 +1564,7 @@ will use the latest TLS version record version in client hello. @headitem Keyword @tab Description @item %STATELESS_COMPRESSION @tab -will disable keeping state across records when compressing. This may -help to mitigate attacks when compression is used but an attacker -is in control of input data. This has to be used only when the -data that are possibly controlled by an attacker are placed in -separate records. +ignored; no longer used. @item %DISABLE_WILDCARDS @tab will disable matching wildcards when comparing hostnames @@ -1326,6 +1574,10 @@ in certificates. will disable the encrypt-then-mac TLS extension (RFC7366). This is implied by the %COMPAT keyword. +@item %FORCE_ETM @tab +negotiate CBC ciphersuites only when both sides of the connection support +encrypt-then-mac TLS extension (RFC7366). + @item %DISABLE_SAFE_RENEGOTIATION @tab will completely disable safe renegotiation completely. Do not use unless you know what you are doing. @@ -1372,7 +1624,7 @@ will disable CRL or OCSP checks in the verification of the certificate chain. @item %VERIFY_ALLOW_X509_V1_CA_CRT @tab will allow V1 CAs in chains. -@item %PROFILE_(LOW|LEGACY|MEDIUM|HIGH|ULTRA) @tab +@item %PROFILE_(LOW|LEGACY|MEDIUM|HIGH|ULTRA|FUTURE) @tab require a certificate verification profile the corresponds to the specified security level, see @ref{tab:key-sizes} for the mappings to values. @@ -1403,8 +1655,8 @@ Specifying RSA with AES-128-CBC: Specifying the defaults plus ARCFOUR-128: "NORMAL:+ARCFOUR-128" -Enabling the 128-bit secure ciphers, while disabling TLS 1.0 and enabling compression: - "SECURE128:-VERS-TLS1.0:+COMP-DEFLATE" +Enabling the 128-bit secure ciphers, while disabling TLS 1.0: + "SECURE128:-VERS-TLS1.0" Enabling the 128-bit and 192-bit secure ciphers, while disabling all TLS versions except TLS 1.2: @@ -1531,9 +1783,11 @@ and SRP authentication. @section Advanced topics @menu +* Virtual hosts and credentials:: * Session resumption:: * Certificate verification:: -* Re-authentication:: +* TLS 1.2 re-authentication:: +* TLS 1.3 re-authentication and re-key:: * Parameter generation:: * Deriving keys for other applications/protocols:: * Channel Bindings:: @@ -1541,21 +1795,95 @@ and SRP authentication. * Compatibility with the OpenSSL library:: @end menu +@node Virtual hosts and credentials +@subsection Virtual hosts and credentials +@cindex virtual hosts +@cindex credentials + +Often when operating with virtual hosts, one may not want to associate +a particular certificate set to the credentials function early, before +the virtual host is known. That can be achieved by calling +@funcref{gnutls_credentials_set} within a handshake pre-hook for client +hello. That message contains the peer's intended hostname, and if read, +and the appropriate credentials are set, gnutls will be able to +continue in the handshake process. A brief usage example is shown +below. + +@example +static int ext_hook_func(void *ctx, unsigned tls_id, + const unsigned char *data, unsigned size) +@{ + if (tls_id == 0) @{ /* server name */ + /* figure the advertized name - the following hack + * relies on the fact that this extension only supports + * DNS names, and due to a protocol bug cannot be extended + * to support anything else. */ + if (name < 5) return 0; + name = data+5; + name_size = size-5; + @} + return 0; +@} + +static int +handshake_hook_func(gnutls_session_t session, unsigned int htype, + unsigned when, unsigned int incoming, const gnutls_datum_t *msg) +@{ + int ret; + + assert(htype == GNUTLS_HANDSHAKE_CLIENT_HELLO); + assert(when == GNUTLS_HOOK_PRE); + + ret = gnutls_ext_raw_parse(NULL, ext_hook_func, msg, + GNUTLS_EXT_RAW_FLAG_TLS_CLIENT_HELLO); + assert(ret >= 0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, cred); + + return ret; +@} + +int main() +@{ + ... + + gnutls_handshake_set_hook_function(server, GNUTLS_HANDSHAKE_CLIENT_HELLO, + GNUTLS_HOOK_PRE, handshake_hook_func); + ... +@} +@end example + +@showfuncdesc{gnutls_handshake_set_hook_function} + @node Session resumption @subsection Session resumption @cindex resuming sessions @cindex session resumption +To reduce time and network traffic spent in a handshake the client can +request session resumption from a server that previously shared a +session with the client. + +Under TLS 1.2, in order to support resumption a server can either store +the session security parameters in a local database or use session +tickets (see @ref{Session tickets}) to delegate storage to the client. + +Under TLS 1.3, session resumption is only available through session +tickets, and multiple tickets could be sent from server to client. That +provides the following advantages: +@itemize +@item When tickets are not re-used the subsequent client sessions cannot be associated with each other by an eavesdropper +@item On post-handshake authentication the server may send different tickets asynchronously for each identity used by client. +@end itemize + @subsubheading Client side -To reduce time and roundtrips spent in a handshake the client can -request session resumption from a server that previously shared -a session with the client. For that the client has to retrieve and store -the session parameters. Before establishing a new session to the same -server the parameters must be re-associated with the GnuTLS session -using @funcref{gnutls_session_set_data}. +The client has to retrieve and store the session parameters. Before +establishing a new session to the same server the parameters must be +re-associated with the GnuTLS session using +@funcref{gnutls_session_set_data}. -@showfuncC{gnutls_session_get_data2,gnutls_session_get_id2,gnutls_session_set_data} +@showfuncB{gnutls_session_get_data2,gnutls_session_set_data} Keep in mind that sessions will be expired after some time, depending on the server, and a server may choose not to resume a session @@ -1565,13 +1893,12 @@ using the priority functions, at least the algorithms used in the last session. @showfuncdesc{gnutls_session_is_resumed} +@showfuncdesc{gnutls_session_get_id2} + @subsubheading Server side -In order to support resumption a server can store -the session security parameters in a local database or by using session -tickets (see @ref{Session tickets}) to delegate storage to the client. Because -session tickets might not be supported by all clients, servers -could combine the two methods. +A server enabling both session tickets and a storage for session data +would use session tickets when clients support it and the storage otherwise. A storing server needs to specify callback functions to store, retrieve and delete session data. These can be registered with the functions below. The stored sessions in the database can be checked using @funcref{gnutls_db_check_entry} @@ -1580,19 +1907,35 @@ for expiration. @showfuncD{gnutls_db_set_retrieve_function,gnutls_db_set_store_function,gnutls_db_set_ptr,gnutls_db_set_remove_function} @showfuncA{gnutls_db_check_entry} -A server utilizing tickets should generate ticket encryption +A server supporting session tickets must generate ticket encryption and authentication keys using @funcref{gnutls_session_ticket_key_generate}. Those keys should be associated with the GnuTLS session using -@funcref{gnutls_session_ticket_enable_server}, and should be rotated regularly -(e.g., every few hours), to prevent them from becoming long-term keys which -if revealed could be used to decrypt all previous sessions. +@funcref{gnutls_session_ticket_enable_server}. + +Those will be the initial keys, but GnuTLS will rotate them regularly. The key rotation interval +can be changed with @funcref{gnutls_db_set_cache_expiration} and will be set to +three times the ticket expiration time (ie. three times the value given in that function). +Every such interval, new keys will be generated from those initial keys. This is a necessary mechanism +to prevent the keys from becoming long-term keys +and as such preserve forward-secrecy in the issued session tickets. If no explicit key rotation interval +is provided, GnuTLS will rotate them every 18 hours by default. + +The master key can be shared between processes or between systems. Processes which share the same master key +will generate the same rotated subkeys, assuming they share the same time (irrespective of timezone differences). @showfuncdesc{gnutls_session_ticket_enable_server} @showfuncdesc{gnutls_session_ticket_key_generate} @showfuncdesc{gnutls_session_resumption_requested} -A server enabling both session tickets and a storage for session data -would use session tickets when clients support it and the storage otherwise. +The expiration time for session resumption, either in tickets or stored data +is set using @funcref{gnutls_db_set_cache_expiration}. This function also controls +the ticket key rotation period. Currently, the session key rotation interval is set +to 3 times the expiration time set by this function. + +Under TLS 1.3, the server sends by default 2 tickets, and can send +additional session tickets at any time using @funcref{gnutls_session_ticket_send}. + +@showfuncdesc{gnutls_session_ticket_send} @node Certificate verification @subsection Certificate verification @@ -1667,12 +2010,12 @@ you may use danetool (see @ref{danetool Invocation}). -@node Re-authentication -@subsection Re-authentication -@cindex renegotiation -@cindex reauthentication +@node TLS 1.2 re-authentication +@subsection TLS 1.2 re-authentication +@cindex re-negotiation +@cindex re-authentication -In TLS there is no distinction between rekey, re-authentication, and re-negotiation. +In TLS 1.2 or earlier there is no distinction between re-key, re-authentication, and re-negotiation. All of these use cases are handled by the TLS' rehandshake process. For that reason in GnuTLS rehandshake is not transparent to the application, and the application must explicitly take control of that process. In addition GnuTLS since version 3.5.0 will not @@ -1699,6 +2042,12 @@ Due to limitations of early protocol versions, it is required to check whether safe renegotiation is in place, i.e., using @funcref{gnutls_safe_renegotiation_status}, which ensures that the server remains the same as the initial. +To make re-authentication transparent to the application when requested +by the server, use the @code{GNUTLS_AUTO_REAUTH} flag on the +@funcref{gnutls_init} call. In that case the re-authentication will happen +in the call of @funcref{gnutls_record_recv} that received the +reauthentication request. + @showfuncdesc{gnutls_safe_renegotiation_status} @subsubsection Server side @@ -1707,31 +2056,67 @@ A server which wants to instruct the client to re-authenticate, should call @funcref{gnutls_rehandshake} and wait for the client to re-authenticate. It is recommended to only request re-handshake when safe renegotiation is enabled for that session (see @funcref{gnutls_safe_renegotiation_status} and -the discussion in @ref{Safe renegotiation}). +the discussion in @ref{Safe renegotiation}). A server could also encounter +the GNUTLS_E_REHANDSHAKE error code while receiving data. That indicates +a client-initiated re-handshake request. In that case the server could +ignore that request, perform handshake (unsafe when done generally), or +even drop the connection. @showfuncdesc{gnutls_rehandshake} +@node TLS 1.3 re-authentication and re-key +@subsection TLS 1.3 re-authentication and re-key +@cindex re-key +@cindex re-negotiation +@cindex re-authentication +@cindex post-handshake authentication + +The TLS 1.3 protocol distinguishes between re-key and re-authentication. +The re-key process ensures that fresh keys are supplied to the already +negotiated parameters, and on GnuTLS can be initiated using +@funcref{gnutls_session_key_update}. The re-key process can be one-way +(i.e., the calling party only changes its keys), or two-way where the peer +is requested to change keys as well. + +The re-authentication process, allows the connected client to switch +identity by presenting a new certificate. Unlike TLS 1.2, the server +is not allowed to change identities. That client re-authentication, or +post-handshake authentication can be initiated only by the server using +@funcref{gnutls_reauth}, and only if a client has advertized support for it. +Both server and client have to explicitly enable support for post handshake +authentication using the @code{GNUTLS_POST_HANDSHAKE_AUTH} flag at @funcref{gnutls_init}. + +A client receiving a re-authentication request will "see" the error code +@code{GNUTLS_E_REAUTH_REQUEST} at @funcref{gnutls_record_recv}. At this +point, it should also call @funcref{gnutls_reauth}. + +To make re-authentication transparent to the application when requested +by the server, use the @code{GNUTLS_AUTO_REAUTH} and @code{GNUTLS_POST_HANDSHAKE_AUTH} +flags on the @funcref{gnutls_init} call. In that case the re-authentication will happen +in the call of @funcref{gnutls_record_recv} that received the +reauthentication request. + @node Parameter generation @subsection Parameter generation @cindex parameter generation @cindex generating parameters -Few TLS ciphersuites require additional parameters that -need to be generated or provided by the application. In particular, -the Diffie-Hellman based ciphersuites (ANON-DH or DHE), require -the group parameters to be provided. -Applications can specify these parameters in a @acronym{TLS} credentials -structure by calling +Prior to GnuTLS 3.6.0 for the ephemeral or anonymous Diffie-Hellman (DH) TLS ciphersuites +the application was required to generate or provide +DH parameters. That is no longer necessary as GnuTLS utilizes DH parameters +and negotiation from @xcite{RFC7919}. + +Applications can tune the used parameters by explicitly specifying them +in the priority string. In server side applications can set the +minimum acceptable level of DH parameters by calling @funcref{gnutls_certificate_set_known_dh_params}, @funcref{gnutls_anon_set_server_known_dh_params}, or @funcref{gnutls_psk_set_server_known_dh_params}, depending on the type -of the credentials. +of the credentials, to set the lower acceptable parameter limits. Typical +applications should rely on the default settings. @showfuncC{gnutls_certificate_set_known_dh_params,gnutls_anon_set_server_known_dh_params,gnutls_psk_set_server_known_dh_params} -The functions above will set DH parameters pre-configured in the library -based on the security level provided. The GnuTLS' included parameters are -the FFDHE parameters from @xcite{RFC7919}. @subsubsection Legacy parameter generation Note that older than 3.5.6 versions of GnuTLS provided functions @@ -1739,13 +2124,13 @@ to generate or import arbitrary DH parameters from a file. This practice is still supported but discouraged in current versions. There is no known advantage from using random parameters, while there have been several occasions where applications were utilizing incorrect, -or insecure parameters. This is the main reason GnuTLS includes the -well-known parameters of @xcite{RFC7919} and recommends to applications +weak or insecure parameters. This is the main reason GnuTLS includes the +well-known parameters of @xcite{RFC7919} and recommends applications utilizing them. In older applications which require to specify explicit DH parameters, we recommend using @code{certtool} (of GnuTLS 3.5.6 or later) with the @code{--get-dh-params} -option to obtain the FFDHE parameters descussed above. The output +option to obtain the FFDHE parameters discussed above. The output parameters of the tool are in PKCS#3 format and can be imported by most existing applications. @@ -1766,12 +2151,11 @@ to derive keys to be used in another application or protocol (e.g., in an other TLS session using pre-shared keys). The following describe GnuTLS' implementation of RFC5705 to extract keys based on a session's master secret. -The API to use is @funcref{gnutls_prf}. The +The API to use is @funcref{gnutls_prf_rfc5705}. The function needs to be provided with a label, -and additional context data to mix in the @code{extra} parameter. -Moreover, the API allows to switch the mix of the -client and server random nonces, using the @code{server_random_first} parameter. -In typical uses you don't need it, so a zero value should be provided in @code{server_random_first}. +and additional context data to mix in the @code{context} parameter. + +@showfuncdesc{gnutls_prf_rfc5705} For example, after establishing a TLS session using @funcref{gnutls_handshake}, you can obtain 32-bytes to be used as key, using this call: @@ -1781,15 +2165,19 @@ For example, after establishing a TLS session using #define MYCONTEXT "my-protocol's-1st-session" char out[32]; -rc = gnutls_prf (session, sizeof(MYLABEL)-1, MYLABEL, 0, - sizeof(MYCONTEXT)-1, MYCONTEXT, 32, out); +rc = gnutls_prf_rfc5705 (session, sizeof(MYLABEL)-1, MYLABEL, + sizeof(MYCONTEXT)-1, MYCONTEXT, 32, out); @end example The output key depends on TLS' master secret, and is the same on both client and server. -If you don't want to use the RFC5705 interface and not mix in the client and server random -nonces, there is a low-level TLS PRF interface called @funcref{gnutls_prf_raw}. +For legacy applications which need to use a more flexible API, there is +@funcref{gnutls_prf}, which in addition, allows to switch the mix of the +client and server random nonces, using the @code{server_random_first} parameter. +For additional flexibility and low-level access to the TLS1.2 PRF, +there is a low-level TLS PRF interface called @funcref{gnutls_prf_raw}. +That however is not functional under newer protocol versions. @node Channel Bindings @subsection Channel bindings diff --git a/doc/cha-gtls-examples.texi b/doc/cha-gtls-examples.texi index a760503822..8a8675e02a 100644 --- a/doc/cha-gtls-examples.texi +++ b/doc/cha-gtls-examples.texi @@ -11,6 +11,7 @@ no error checking. @menu * Client examples:: * Server examples:: +* More advanced client and servers:: * OCSP example:: * Miscellaneous examples:: @end menu @@ -23,24 +24,15 @@ clients, using @acronym{GnuTLS}. Note that some of the examples require function implemented by another example. @menu -* Simple client example with X.509 certificate support:: -* Simple client example with SSH-style certificate verification:: -* Simple client example with anonymous authentication:: -* Simple Datagram TLS client example:: -* Obtaining session information:: -* Using a callback to select the certificate to use:: -* Verifying a certificate:: +* Client example with X.509 certificate support:: +* Datagram TLS client example:: * Client using a smart card with TLS:: * Client with Resume capability example:: -* Simple client example with SRP authentication:: -* Legacy client example with X.509 certificate support:: -* Simple client example in C++:: -* Helper functions for TCP connections:: -* Helper functions for UDP connections:: +* Client example with SSH-style certificate verification:: @end menu -@node Simple client example with X.509 certificate support -@subsection Simple client example with @acronym{X.509} certificate support +@node Client example with X.509 certificate support +@subsection Client example with @acronym{X.509} certificate support @anchor{ex-verify} Let's assume now that we want to create a TCP client which @@ -54,8 +46,47 @@ version. For a reasonably portable version see @ref{Legacy client example with X @verbatiminclude examples/ex-client-x509.c -@node Simple client example with SSH-style certificate verification -@subsection Simple client example with SSH-style certificate verification + +@node Datagram TLS client example +@subsection Datagram @acronym{TLS} client example + +This is a client that uses @acronym{UDP} to connect to a +server. This is the @acronym{DTLS} equivalent to the TLS example +with X.509 certificates. + +@verbatiminclude examples/ex-client-dtls.c + + +@node Client using a smart card with TLS +@subsection Using a smart card with TLS +@anchor{ex-pkcs11-client} +@cindex Smart card example + +This example will demonstrate how to load keys and certificates +from a smart-card or any other @acronym{PKCS} #11 token, and +use it in a TLS connection. The difference between this and the +@ref{Client example with X.509 certificate support} is that the +client keys are provided as PKCS #11 URIs instead of files. + +@verbatiminclude examples/ex-cert-select-pkcs11.c + + +@node Client with Resume capability example +@subsection Client with resume capability example +@anchor{ex-resume-client} + +This is a modification of the simple client example. Here we +demonstrate the use of session resumption. The client tries to connect +once using @acronym{TLS}, close the connection and then try to +establish a new connection using the previously negotiated data. + +@verbatiminclude examples/ex-client-resume.c + + + + +@node Client example with SSH-style certificate verification +@subsection Client example with SSH-style certificate verification This is an alternative verification function that will use the X.509 certificate authorities for verification, but also assume an @@ -65,8 +96,60 @@ trusted. @verbatiminclude examples/ex-verify-ssh.c -@node Simple client example with anonymous authentication -@subsection Simple client example with anonymous authentication +@node Server examples +@section Server examples + +This section contains examples of @acronym{TLS} and @acronym{SSL} +servers, using @acronym{GnuTLS}. + +@menu +* Echo server with X.509 authentication:: +* DTLS echo server with X.509 authentication:: +@end menu + +@node Echo server with X.509 authentication +@subsection Echo server with @acronym{X.509} authentication + +This example is a very simple echo server which supports +@acronym{X.509} authentication. + +@verbatiminclude examples/ex-serv-x509.c + + +@node DTLS echo server with X.509 authentication +@subsection DTLS echo server with @acronym{X.509} authentication + +This example is a very simple echo server using Datagram TLS and +@acronym{X.509} authentication. + +@verbatiminclude examples/ex-serv-dtls.c + + + + +@node More advanced client and servers +@section More advanced client and servers + +This section has various, more advanced topics in client and servers. + +@menu +* Client example with anonymous authentication:: +* Using a callback to select the certificate to use:: +* Obtaining session information:: +* Advanced certificate verification example:: +* Client example with PSK authentication:: +* Client example with SRP authentication:: +* Legacy client example with X.509 certificate support:: +* Client example in C++:: +* Echo server with PSK authentication:: +* Echo server with SRP authentication:: +* Echo server with anonymous authentication:: +* Helper functions for TCP connections:: +* Helper functions for UDP connections:: +@end menu + +@node Client example with anonymous authentication +@subsection Client example with anonymous authentication The simplest client using TLS is the one that doesn't do any authentication. This means no external certificates or passwords are @@ -80,15 +163,16 @@ servers support it. @verbatiminclude examples/ex-client-anon.c +@node Using a callback to select the certificate to use +@subsection Using a callback to select the certificate to use -@node Simple Datagram TLS client example -@subsection Simple datagram @acronym{TLS} client example +There are cases where a client holds several certificate and key +pairs, and may not want to load all of them in the credentials +structure. The following example demonstrates the use of the +certificate selection callback. -This is a client that uses @acronym{UDP} to connect to a -server. This is the @acronym{DTLS} equivalent to the TLS example -with X.509 certificates. +@verbatiminclude examples/ex-cert-select.c -@verbatiminclude examples/ex-client-dtls.c @node Obtaining session information @subsection Obtaining session information @@ -101,51 +185,31 @@ if called after a successful @funcref{gnutls_handshake}. @verbatiminclude examples/ex-session-info.c -@node Using a callback to select the certificate to use -@subsection Using a callback to select the certificate to use - -There are cases where a client holds several certificate and key -pairs, and may not want to load all of them in the credentials -structure. The following example demonstrates the use of the -certificate selection callback. -@verbatiminclude examples/ex-cert-select.c -@node Verifying a certificate -@subsection Verifying a certificate +@node Advanced certificate verification example +@subsection Advanced certificate verification @anchor{ex-verify2} An example is listed below which uses the high level verification -functions to verify a given certificate list. +functions to verify a given certificate chain against a set of CAs +and CRLs. @verbatiminclude examples/ex-verify.c -@node Client using a smart card with TLS -@subsection Using a smart card with TLS -@anchor{ex-pkcs11-client} -@cindex Smart card example - -This example will demonstrate how to load keys and certificates -from a smart-card or any other @acronym{PKCS} #11 token, and -use it in a TLS connection. - -@verbatiminclude examples/ex-cert-select-pkcs11.c - -@node Client with Resume capability example -@subsection Client with resume capability example -@anchor{ex-resume-client} +@node Client example with PSK authentication +@subsection Client example with @acronym{PSK} authentication -This is a modification of the simple client example. Here we -demonstrate the use of session resumption. The client tries to connect -once using @acronym{TLS}, close the connection and then try to -establish a new connection using the previously negotiated data. +The following client is a very simple @acronym{PSK} @acronym{TLS} +client which connects to a server and authenticates using a +@emph{username} and a @emph{key}. -@verbatiminclude examples/ex-client-resume.c +@verbatiminclude examples/ex-client-psk.c -@node Simple client example with SRP authentication -@subsection Simple client example with @acronym{SRP} authentication +@node Client example with SRP authentication +@subsection Client example with @acronym{SRP} authentication The following client is a very simple @acronym{SRP} @acronym{TLS} client which connects to a server and authenticates using a @@ -160,56 +224,27 @@ itself using a certificate, and in that case it has to be verified. @anchor{ex-verify-legacy} For applications that need to maintain compatibility with the GnuTLS 3.1.x -library, this client example is identical to @ref{Simple client example with X.509 certificate support} +library, this client example is identical to @ref{Client example with X.509 certificate support} but utilizes APIs that were available in GnuTLS 3.1.4. @verbatiminclude examples/ex-client-x509-3.1.c - -@node Simple client example in C++ -@subsection Simple client example using the C++ API +@node Client example in C++ +@subsection Client example using the C++ API The following client is a simple example of a client client utilizing the GnuTLS C++ API. @verbatiminclude examples/ex-cxx.cpp -@node Helper functions for TCP connections -@subsection Helper functions for TCP connections -Those helper function abstract away TCP connection handling from the -other examples. It is required to build some examples. +@node Echo server with PSK authentication +@subsection Echo server with @acronym{PSK} authentication -@verbatiminclude examples/tcp.c +This is a server which supports @acronym{PSK} authentication. -@node Helper functions for UDP connections -@subsection Helper functions for UDP connections +@verbatiminclude examples/ex-serv-psk.c -The UDP helper functions abstract away UDP connection handling from the -other examples. It is required to build the examples using UDP. - -@verbatiminclude examples/udp.c - -@node Server examples -@section Server examples - -This section contains examples of @acronym{TLS} and @acronym{SSL} -servers, using @acronym{GnuTLS}. - -@menu -* Echo server with X.509 authentication:: -* Echo server with SRP authentication:: -* Echo server with anonymous authentication:: -* DTLS echo server with X.509 authentication:: -@end menu - -@node Echo server with X.509 authentication -@subsection Echo server with @acronym{X.509} authentication - -This example is a very simple echo server which supports -@acronym{X.509} authentication. - -@verbatiminclude examples/ex-serv-x509.c @node Echo server with SRP authentication @subsection Echo server with @acronym{SRP} authentication @@ -220,6 +255,7 @@ server. Here it is separate for simplicity. @verbatiminclude examples/ex-serv-srp.c + @node Echo server with anonymous authentication @subsection Echo server with anonymous authentication @@ -228,13 +264,24 @@ used to serve the example client for anonymous authentication. @verbatiminclude examples/ex-serv-anon.c -@node DTLS echo server with X.509 authentication -@subsection DTLS echo server with @acronym{X.509} authentication -This example is a very simple echo server using Datagram TLS and -@acronym{X.509} authentication. -@verbatiminclude examples/ex-serv-dtls.c +@node Helper functions for TCP connections +@subsection Helper functions for TCP connections + +Those helper function abstract away TCP connection handling from the +other examples. It is required to build some examples. + +@verbatiminclude examples/tcp.c + +@node Helper functions for UDP connections +@subsection Helper functions for UDP connections + +The UDP helper functions abstract away UDP connection handling from the +other examples. It is required to build the examples using UDP. + +@verbatiminclude examples/udp.c + @node OCSP example diff --git a/doc/cha-internals.texi b/doc/cha-internals.texi index d368054712..2a9bc1a45b 100644 --- a/doc/cha-internals.texi +++ b/doc/cha-internals.texi @@ -11,9 +11,10 @@ happens inside the black box. * The TLS Protocol:: * TLS Handshake Protocol:: * TLS Authentication Methods:: -* TLS Extension Handling:: +* TLS Hello Extension Handling:: * Cryptographic Backend:: * Random Number Generators-internals:: +* FIPS140-2 mode:: @end menu @node The TLS Protocol @@ -39,10 +40,10 @@ transport layer functions are used. The main idea is shown in @ref{fig-gnutls-ha @caption{GnuTLS handshake state machine.} @end float -Also the way the input is processed varies per ciphersuite. Several -implementations of the internal handlers are available and -@funcref{gnutls_handshake} only multiplexes the input to the appropriate -handler. For example a @acronym{PSK} ciphersuite has a different +Also the way the input is processed varies per ciphersuite. Several +implementations of the internal handlers are available and +@funcref{gnutls_handshake} only multiplexes the input to the appropriate +handler. For example a @acronym{PSK} ciphersuite has a different implementation of the @code{process_client_key_exchange} than a certificate ciphersuite. We illustrate the idea in @ref{fig-gnutls-handshake-sequence}. @@ -59,7 +60,7 @@ affect only the handshake protocol, a simple interface is used. An authentication method needs to implement the functions shown below. @verbatim -typedef struct +typedef struct { const char *name; int (*gnutls_generate_server_certificate) (gnutls_session_t, gnutls_buffer_st*); @@ -96,10 +97,10 @@ ciphersuites. After implementing these functions the structure holding its pointers has to be registered in @code{gnutls_@-algorithms.c} in the @code{_gnutls_@-kx_@-algorithms} structure. -@node TLS Extension Handling +@node TLS Hello Extension Handling @section TLS Extension Handling -As with authentication methods, the TLS extensions handlers can be -implemented using the interface shown below. +As with authentication methods, adding TLS hello extensions can be done +quite easily by implementing the interface shown below. @verbatim typedef int (*gnutls_ext_recv_func) (gnutls_session_t session, @@ -108,35 +109,37 @@ typedef int (*gnutls_ext_send_func) (gnutls_session_t session, gnutls_buffer_st *extdata); @end verbatim -Here there are two functions, one for receiving the extension data -and one for sending. These functions have to check internally whether -they operate in client or server side. +Here there are two main functions, one for parsing the received extension data +and one for formatting the extension data that must be send. These functions +have to check internally whether they operate within a client or a server session. A simple example of an extension handler can be seen in -@code{ext/@-srp.c} in GnuTLS' source code. After implementing these functions, -together with the extension number they handle, they have to be registered -using @funcintref{_gnutls_ext_register} in -@code{gnutls_extensions.c} typically within @funcintref{_gnutls_ext_init}. - -@subheading Adding a new TLS extension - -Adding support for a new TLS extension is done from time to time, and -the process to do so is not difficult. Here are the steps you need to -follow if you wish to do this yourself. For sake of discussion, let's -consider adding support for the hypothetical TLS extension -@code{foobar}. The following section is about adding an extension to GnuTLS, -for custom application extensions you should check the exported functions +@code{lib/ext/@-srp.c} in GnuTLS' source code. After implementing these functions, +the extension has to be registered. Registering an extension can be done in two +ways. You can create a GnuTLS internal extension and register it in +@code{hello_ext.c} or write an external extension (not inside GnuTLS but +inside an application using GnuTLS) and register it via the exported functions +@funcref{gnutls_session_ext_register} or @funcref{gnutls_ext_register}. + +@subheading Adding a new TLS hello extension + +Adding support for a new TLS hello extension is done from time to time, and +the process to do so is not difficult. Here are the steps you need to +follow if you wish to do this yourself. For the sake of discussion, let's +consider adding support for the hypothetical TLS extension @code{foobar}. +The following section is about adding an hello extension to GnuTLS itself. +For custom application extensions you should check the exported functions @funcref{gnutls_session_ext_register} or @funcref{gnutls_ext_register}. @subsubheading Add @code{configure} option like @code{--enable-foobar} or @code{--disable-foobar}. This step is useful when the extension code is large and it might be desirable -to disable the extension under some circumstances. Otherwise it can be safely -skipped. +under some circumstances to be able to leave out the extension during compilation of GnuTLS. +If you don't need this kind of feature this step can be safely skipped. -Whether to chose enable or disable depends on whether you intend to make the extension be -enabled by default. Look at existing checks (i.e., SRP, authz) for -how to model the code. For example: +Whether to choose enable or disable depends on whether you intend to make the extension be +enabled by default. Look at existing checks (i.e., SRP, authz) for +how to model the code. For example: @example AC_MSG_CHECKING([whether to disable foobar support]) @@ -154,129 +157,157 @@ fi AM_CONDITIONAL(ENABLE_FOOBAR, test "$ac_enable_foobar" != "no") @end example -These lines should go in @code{m4/hooks.m4}. +These lines should go in @code{lib/m4/hooks.m4}. + +@subsubheading Add an extension identifier to @code{extensions_t} in @code{gnutls_int.h}. -@subsubheading Add IANA extension value to @code{extensions_t} in @code{gnutls_int.h}. +A good name for the identifier would be GNUTLS_EXTENSION_FOOBAR. If the +extension that you are implementing is an extension that is officially +registered by IANA then it is recommended to use its official name such +that the extension can be correctly identified by other developers. Check +with @url{https://www.iana.org/assignments/tls-extensiontype-values} +for registered extensions. -A good name for the value would be GNUTLS_EXTENSION_FOOBAR. Check -with @url{http://www.iana.org/assignments/tls-extensiontype-values} -for allocated values. For experiments, you could pick a number but -remember that some consider it a bad idea to deploy such modified -version since it will lead to interoperability problems in the future -when the IANA allocates that number to someone else, or when the -foobar protocol is allocated another number. +@subsubheading Register the extension in @code{lib/hello_ext.c}. -@subsubheading Add an entry to @code{_gnutls_extensions} in @code{gnutls_extensions.c}. +In order for the extension to be executed you need to register it in the +@code{static hello_ext_entry_st const *extfunc[]} list in @code{lib/hello_ext.c}. A typical entry would be: @example - int ret; - -#if ENABLE_FOOBAR - ret = _gnutls_ext_register (&foobar_ext); - if (ret != GNUTLS_E_SUCCESS) - return ret; +#ifdef ENABLE_FOOBAR + [GNUTLS_EXTENSION_FOOBAR] = &ext_mod_foobar, #endif @end example -Most likely you'll need to add an @code{#include "ext/@-foobar.h"}, that -will contain something like -like: +Also for every extension you need to create an @code{hello_ext_entry_st} +that describes the extension. This structure is placed in the designated +c file for your extension and its name is used in the registration entry +as depicted above. + +The structure of @code{hello_ext_entry_st} is as follows: @example - extension_entry_st foobar_ext = @{ + const hello_ext_entry_st ext_mod_foobar = @{ .name = "FOOBAR", - .type = GNUTLS_EXTENSION_FOOBAR, + .tls_id = 255, + .gid = GNUTLS_EXTENSION_FOOBAR, .parse_type = GNUTLS_EXT_TLS, - .recv_func = _foobar_recv_params, - .send_func = _foobar_send_params, - .pack_func = _foobar_pack, - .unpack_func = _foobar_unpack, - .deinit_func = NULL - @} + .validity = GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO | + GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO | + GNUTLS_EXT_FLAG_TLS, + .recv_func = _gnutls_foobar_recv_params, + .send_func = _gnutls_foobar_send_params, + .pack_func = _gnutls_foobar_pack, + .unpack_func = _gnutls_foobar_unpack, + .deinit_func = _gnutls_foobar_deinit, + .cannot_be_overriden = 1 + @}; @end example -The GNUTLS_EXTENSION_FOOBAR is the integer value you added to -@code{gnutls_int.h} earlier. In this structure you specify the -functions to read the extension from the hello message, the function -to send the reply to, and two more functions to pack and unpack from -stored session data (e.g. when resumming a session). The @code{deinit} function -will be called to deinitialize the extension's private parameters, if any. - -Note that the conditional @code{ENABLE_FOOBAR} definition should only be +The GNUTLS_EXTENSION_FOOBAR is the identifier that you've added to +@code{gnutls_int.h} earlier. The @code{.tls_id} should contain the number +that IANA has assigned to this extension, or an unassigned number of your +choice if this is an unregistered extension. In the rest of this structure +you specify the functions to handle the extension data. The @code{receive} function +will be called upon reception of the data and will be used to parse or +interpret the extension data. The @code{send} function will be called prior to +sending the extension data on the wire and will be used to format the data +such that it can be send over the wire. The @code{pack} and @code{unpack} +functions will be used to prepare the data for storage in case of session resumption +(and vice versa). The @code{deinit} function will be called to deinitialize +the extension's private parameters, if any. + +Look at @code{gnutls_ext_parse_type_t} and @code{gnutls_ext_flags_t} for a complete +list of available flags. + +Note that the conditional @code{ENABLE_FOOBAR} definition should only be used if step 1 with the @code{configure} options has taken place. -@subsubheading Add new files that implement the extension. +@subsubheading Add new files that implement the hello extension. -The functions you are responsible to add are those mentioned in the -previous step. They should be added in a file such as @code{ext/@-foobar.c} -and headers should be placed in @code{ext/@-foobar.h}. +To keep things structured every extension should have its own files. The +functions that you should (at least) add are those referenced in the struct +from the previous step. Use descriptive file names such as @code{lib/ext/@-foobar.c} +and for the corresponding header @code{lib/ext/@-foobar.h}. As a starter, you could add this: @example int -_foobar_recv_params (gnutls_session_t session, const opaque * data, +_gnutls_foobar_recv_params (gnutls_session_t session, const uint8_t * data, size_t data_size) @{ return 0; @} int -_foobar_send_params (gnutls_session_t session, gnutls_buffer_st* data) +_gnutls_foobar_send_params (gnutls_session_t session, gnutls_buffer_st* data) @{ return 0; @} int -_foobar_pack (extension_priv_data_t epriv, gnutls_buffer_st * ps) +_gnutls_foobar_pack (extension_priv_data_t epriv, gnutls_buffer_st * ps) @{ /* Append the extension's internal state to buffer */ return 0; @} int -_foobar_unpack (gnutls_buffer_st * ps, extension_priv_data_t * epriv) +_gnutls_foobar_unpack (gnutls_buffer_st * ps, extension_priv_data_t * epriv) @{ /* Read the internal state from buffer */ return 0; @} @end example -The @funcintref{_foobar_recv_params} function is responsible for +The @funcintref{_gnutls_foobar_recv_params} function is responsible for parsing incoming extension data (both in the client and server). -The @funcintref{_foobar_send_params} function is responsible for -sending extension data (both in the client and server). +The @funcintref{_gnutls_foobar_send_params} function is responsible for +formatting extension data such that it can be send over the wire (both in +the client and server). It should append data to provided buffer and +return a positive (or zero) number on success or a negative error code. +Previous to 3.6.0 versions of GnuTLS required that function to return the +number of bytes that were written. If zero is returned and no bytes are +appended the extension will not be sent. If a zero byte extension is to +be sent this function must return @code{GNUTLS_E_INT_RET_0}. If you receive length fields that don't match, return @code{GNUTLS_E_@-UNEXPECTED_@-PACKET_@-LENGTH}. If you receive invalid data, return @code{GNUTLS_E_@-RECEIVED_@-ILLEGAL_@-PARAMETER}. You can use -other error codes from the list in @ref{Error codes}. Return 0 on success. +other error codes from the list in @ref{Error codes}. Return 0 on success. An extension typically stores private information in the @code{session} -data for later usage. That can be done using the functions -@funcintref{_gnutls_ext_set_session_data} and -@funcintref{_gnutls_ext_get_session_data}. You can check simple examples -at @code{ext/@-max_@-record.c} and @code{ext/@-server_@-name.c} extensions. -That private information can be saved and restored across session +data for later usage. That can be done using the functions +@funcintref{_gnutls_hello_ext_set_datum} and +@funcintref{_gnutls_hello_ext_get_datum}. You can check simple examples +at @code{lib/ext/@-max_@-record.c} and @code{lib/ext/@-server_@-name.c} extensions. +That private information can be saved and restored across session resumption if the following functions are set: -The @funcintref{_foobar_pack} function is responsible for packing +The @funcintref{_gnutls_foobar_pack} function is responsible for packing internal extension data to save them in the session resumption storage. -The @funcintref{_foobar_unpack} function is responsible for +The @funcintref{_gnutls_foobar_unpack} function is responsible for restoring session data from the session resumption storage. -Recall that both the client and server, send and receive -parameters, and your code most likely will need to do different things -depending on which mode it is in. It may be useful to make this -distinction explicit in the code. Thus, for example, a better +When the internal data is stored using the @funcintref{_gnutls_hello_ext_set_datum}, +then you can rely on the default pack and unpack functions: +@funcintref{_gnutls_hello_ext_default_pack} and +@funcintref{_gnutls_hello_ext_default_unpack}. + +Recall that both for the client and server, the send and receive +functions most likely will need to do different things +depending on which mode they are in. It may be useful to make this +distinction explicit in the code. Thus, for example, a better template than above would be: @example int _gnutls_foobar_recv_params (gnutls_session_t session, - const opaque * data, + const uint8_t * data, size_t data_size) @{ if (session->security_parameters.entity == GNUTLS_CLIENT) @@ -298,7 +329,8 @@ _gnutls_foobar_send_params (gnutls_session_t session, The functions used would be declared as @code{static} functions, of the appropriate prototype, in the same file. -When adding the files, you'll need to add them to @code{ext/@-Makefile.am} + +When adding the new extension files, you'll need to add them to @code{lib/ext/@-Makefile.am} as well, for example: @example @@ -307,54 +339,26 @@ libgnutls_ext_la_SOURCES += ext/foobar.c ext/foobar.h endif @end example -@subsubheading Add API functions to enable/disable the extension. +@subsubheading Add API functions to use the extension. It might be desirable to allow users of the extension to -request use of the extension, or set extension specific data. +request the use of the extension, or set extension specific data. This can be implemented by adding extension specific function calls that can be added to @code{includes/@-gnutls/@-gnutls.h}, as long as the LGPLv2.1+ applies. -The implementation of the function should lie in the @code{ext/@-foobar.c} file. +The implementation of these functions should lie in the @code{lib/ext/@-foobar.c} file. -To make the API available in the shared library you need to add the -symbol in @code{lib/@-libgnutls.map}, so that the symbol -is exported properly. +To make the API available in the shared library you need to add the added +symbols in @code{lib/@-libgnutls.map}, so that the symbols are exported properly. When writing GTK-DOC style documentation for your new APIs, don't forget to add @code{Since:} tags to indicate the GnuTLS version the API was introduced in. -@subsubheading Heartbeat extension. - -One such extension is HeartBeat protocol (RFC6520: -@url{https://tools.ietf.org/html/rfc6520}) implementation. To enable -it use option --heartbeat with example client and server supplied with -gnutls: - -@example -./doc/credentials/gnutls-http-serv --priority "NORMAL:-CIPHER-ALL:+NULL" -d 100 \ - --heartbeat --echo -./src/gnutls-cli --priority "NORMAL:-CIPHER-ALL:+NULL" -d 100 localhost -p 5556 \ - --insecure --heartbeat -@end example - -After that pasting -@example -**HEARTBEAT** -@end example -command into gnutls-cli will trigger corresponding command on the server and it will send HeartBeat Request with random length to client. - -Another way is to run capabilities check with: - -@example -./doc/credentials/gnutls-http-serv -d 100 --heartbeat -./src/gnutls-cli-debug localhost -p 5556 -@end example - @subheading Adding a new Supplemental Data Handshake Message TLS handshake extensions allow to send so called supplemental data -handshake messages @xcite{RFC4680}. This short section explains how to +handshake messages @xcite{RFC4680}. This short section explains how to implement a supplemental data handshake message for a given TLS extension. First of all, modify your extension @code{foobar} in the way, to instruct @@ -380,7 +384,7 @@ _gnutls_foobar_send_params (gnutls_session_t session, gnutls_buffer_st *extdata) @end example Furthermore you'll need two new functions @funcintref{_foobar_supp_recv_params} -and @funcintref{_foobar_supp_send_params}, which must conform to the following +and @funcintref{_foobar_supp_send_params}, which must conform to the following prototypes. @example @@ -395,7 +399,7 @@ The following example code shows how to send a ``Hello World'' string in the supplemental data handshake message. @example -int +int _foobar_supp_recv_params(gnutls_session_t session, const opaque *data, size_t _data_size) @{ uint8_t len = _data_size; @@ -413,7 +417,7 @@ _foobar_supp_recv_params(gnutls_session_t session, const opaque *data, size_t _d return len; @} -int +int _foobar_supp_send_params(gnutls_session_t session, gnutls_buffer_t buf) @{ unsigned char *msg = "hello world"; @@ -434,8 +438,8 @@ or @funcref{gnutls_supplemental_register} at some point in your program. Today most new processors, either for embedded or desktop systems include either instructions intended to speed up cryptographic operations, -or a co-processor with cryptographic capabilities. Taking advantage of -those is a challenging task for every cryptographic application or +or a co-processor with cryptographic capabilities. Taking advantage of +those is a challenging task for every cryptographic application or library. GnuTLS handles the cryptographic provider in a modular way, following a layered approach to access cryptographic operations as in @ref{fig-crypto-layers}. @@ -445,7 +449,7 @@ cryptographic operations as in @ref{fig-crypto-layers}. @caption{GnuTLS cryptographic back-end design.} @end float -The TLS layer uses a cryptographic provider layer, that will in turn either +The TLS layer uses a cryptographic provider layer, that will in turn either use the default crypto provider -- a software crypto library, or use an external crypto provider, if available in the local system. The reason of handling the external cryptographic provider in GnuTLS and not delegating it to @@ -457,22 +461,22 @@ an efficient way. The Cryptographic library layer, currently supports only libnettle. Older versions of GnuTLS used to support libgcrypt, but it was switched with nettle mainly for performance reasons@footnote{See -@url{http://lists.gnu.org/archive/html/gnutls-devel/2011-02/msg00079.html}.} +@url{https://lists.gnu.org/archive/html/gnutls-devel/2011-02/msg00079.html}.} and secondary because it is a simpler library to use. In the future other cryptographic libraries might be supported as well. @subheading External cryptography provider Systems that include a cryptographic co-processor, typically come with -kernel drivers to utilize the operations from software. For this reason +kernel drivers to utilize the operations from software. For this reason GnuTLS provides a layer where each individual algorithm used can be replaced by another implementation, i.e., the one provided by the driver. The -FreeBSD, OpenBSD and Linux kernels@footnote{Check @url{http://home.gna.org/cryptodev-linux/} -for the Linux kernel implementation of @code{/dev/crypto}.} include already -a number of hardware assisted implementations, and also provide an interface +FreeBSD, OpenBSD and Linux kernels@footnote{Check @url{https://home.gna.org/cryptodev-linux/} +for the Linux kernel implementation of @code{/dev/crypto}.} include already +a number of hardware assisted implementations, and also provide an interface to access them, called @code{/dev/crypto}. GnuTLS will take advantage of this interface if compiled with special -options. That is because in most systems where hardware-assisted -cryptographic operations are not available, using this interface might +options. That is because in most systems where hardware-assisted +cryptographic operations are not available, using this interface might actually harm performance. In systems that include cryptographic instructions with the CPU's @@ -488,7 +492,7 @@ source code in @code{lib/accelerated/}. @subsubheading Overriding specific algorithms When an optimized implementation of a single algorithm is available, say a hardware assisted version of @acronym{AES-CBC} then the -following functions, from @code{crypto.h}, can +following functions, from @code{crypto.h}, can be used to register those algorithms. @itemize @@ -521,7 +525,13 @@ For more information see @ref{Hardware security modules and abstract key types}. @node Random Number Generators-internals @section Random Number Generators -@subheading Inner workings +@subheading About the generators + +GnuTLS provides two random generators. The default, and the AES-DRBG random +generator which is only used when the library is compiled with support for +FIPS140-2 and the system is in FIPS140-2 mode. + +@subheading The default generator - inner workings The random number generator levels in @code{gnutls_rnd_level_t} map to two CHACHA-based random generators which are initially seeded using the OS random device, e.g., @code{/dev/urandom} @@ -551,7 +561,7 @@ second is shared for the @code{GNUTLS_RND_KEY} and @code{GNUTLS_RND_RANDOM} levels. For the rest of this section we refer to the first as the nonce generator and the second as the key generator. -The nonce generator will reseed after outputing a fixed amount of bytes +The nonce generator will reseed after outputting a fixed amount of bytes (typically few megabytes), or after few hours of operation without reaching the limit has passed. It is being re-seed using the key generator to obtain a new key for the CHACHA cipher, which is mixed @@ -569,6 +579,17 @@ a re-key of the PRNG using its own output, is additionally performed. That ensur the recovery of the PRNG state will not be sufficient to recover previously generated values. +@subheading The AES-DRBG generator - inner workings + +Similar with the default generator, the random number generator levels in @code{gnutls_rnd_level_t} map to two +AES-DRBG random generators which are initially seeded using the OS random device, +e.g., @code{/dev/urandom} or @code{getrandom()}. These random generators are +unique per thread, and are automatically re-seeded when a fork is detected. + +The AES-DRBG generator is based on the AES cipher in counter mode and is +re-seeded after a fixed amount of bytes are generated. + + @subheading Defense against PRNG attacks This section describes the counter-measures available in the Pseudo-random number generator (PRNG) @@ -638,3 +659,84 @@ two distinct times, and being able to recover the state at the third time after observing the output of the PRNG. Given the approach described on the above paragraph, all levels are immune to such attack. +@node FIPS140-2 mode +@section FIPS140-2 mode + +GnuTLS can operate in a special mode for FIPS140-2. That mode of operation +is for the conformance to NIST's FIPS140-2 publication, which consists of policies +for cryptographic modules (such as software libraries). Its implementation in +GnuTLS is designed for Red Hat Enterprise Linux, and can only be enabled +when the library is explicitly compiled with the '--enable-fips140-mode' +configure option. The operation of the library is then modified, as follows. + +@itemize +@item FIPS140-2 mode is enabled when @code{/proc/sys/crypto/fips_enabled} contains '1' and @code{/etc/system-fips} is present. +@item Only approved by FIPS140-2 algorithms are enabled +@item Only approved by FIPS140-2 key lengths are allowed for key generation +@item The random generator used switches to DRBG-AES +@item The integrity of the GnuTLS and dependent libraries is checked on startup +@item Algorithm self-tests are run on library load +@item Any cryptographic operation will be refused if any of the self-tests failed +@end itemize + + +There are also few environment variables which modify that operation. The +environment variable @code{GNUTLS_SKIP_FIPS_INTEGRITY_CHECKS} will disable +the library integrity tests on startup, and the variable +@code{GNUTLS_FORCE_FIPS_MODE} can be set to force a value from +@ref{gnutls_fips_mode_t}, i.e., '1' will enable the FIPS140-2 +mode, while '0' will disable it. + +The integrity checks for the dependent libraries and GnuTLS are performed +using '.hmac' files which are present at the same path as the library. The +key for the operations can be provided on compile-time with the configure +option '--with-fips140-key'. The MAC algorithm used is HMAC-SHA256. + +On runtime an application can verify whether the library is in FIPS140-2 +mode using the @funcref{gnutls_fips140_mode_enabled} function. + +@subheading Relaxing FIPS140-2 requirements + +The library by default operates in a strict enforcing mode, ensuring that +all constraints imposed by the FIPS140-2 specification are enforced. However +the application can relax these requirements via @funcref{gnutls_fips140_set_mode} +which can switch to alternative modes as in @ref{gnutls_fips_mode_t}. + +@showenumdesc{gnutls_fips_mode_t,The @code{gnutls_@-fips_@-mode_t} enumeration.} + +The intention of this API is to be used by applications which may run in +FIPS140-2 mode, while they utilize few algorithms not in the allowed set, +e.g., for non-security related purposes. In these cases applications should +wrap the non-compliant code within blocks like the following. + +@example +GNUTLS_FIPS140_SET_LAX_MODE(); + +_gnutls_hash_fast(GNUTLS_DIG_MD5, buffer, sizeof(buffer), output); + +GNUTLS_FIPS140_SET_STRICT_MODE(); +@end example + +The @code{GNUTLS_FIPS140_SET_LAX_MODE} and +@code{GNUTLS_FIPS140_SET_STRICT_MODE} are macros to simplify the following +sequence of calls. + +@example +if (gnutls_fips140_mode_enabled()) + gnutls_fips140_set_mode(GNUTLS_FIPS140_LAX, GNUTLS_FIPS140_SET_MODE_THREAD); + +_gnutls_hash_fast(GNUTLS_DIG_MD5, buffer, sizeof(buffer), output); + +if (gnutls_fips140_mode_enabled()) + gnutls_fips140_set_mode(GNUTLS_FIPS140_STRICT, GNUTLS_FIPS140_SET_MODE_THREAD); +@end example + +The reason of the @code{GNUTLS_FIPS140_SET_MODE_THREAD} flag in the +previous calls is to localize the change in the mode. Note also, that +such a block has no effect when the library is not operating +under FIPS140-2 mode, and thus it can be considered a no-op. + +Applications could also switch FIPS140-2 mode explicitly off, by calling +@example +gnutls_fips140_set_mode(GNUTLS_FIPS140_LAX, 0); +@end example diff --git a/doc/cha-intro-tls.texi b/doc/cha-intro-tls.texi index a00db66037..6600fe9890 100644 --- a/doc/cha-intro-tls.texi +++ b/doc/cha-intro-tls.texi @@ -8,11 +8,11 @@ by @acronym{IETF}@footnote{IETF, or Internet Engineering Task Force, is a large open international community of network designers, operators, vendors, and researchers concerned with the evolution of the Internet architecture and the smooth operation of the Internet. -It is open to any interested individual.}, described in @xcite{RFC5246}. +It is open to any interested individual.}, described in @xcite{RFC5246}. The protocol provides confidentiality, and authentication layers over any reliable transport layer. The description, above, refers to @acronym{TLS} 1.0 but applies -to all other TLS versions as the differences between the protocols are not major. +to all other TLS versions as the differences between the protocols are not major. The @acronym{DTLS} protocol, or ``Datagram @acronym{TLS}'' @xcite{RFC4347} is a protocol with identical goals as @acronym{TLS}, but can operate @@ -38,15 +38,17 @@ noted otherwise. @acronym{TLS} is a layered protocol, and consists of the record protocol, the handshake protocol and the alert protocol. The record protocol is to serve all other protocols and is above the transport -layer. The record protocol offers symmetric encryption, data -authenticity, and optionally compression. +layer. The record protocol offers symmetric encryption, and data +authenticity@footnote{In early versions of TLS compression was optionally +available as well. This is no longer the case in recent versions of the +protocol.}. The alert protocol offers some signaling to the other protocols. It can help informing the peer for the cause of failures and other error conditions. @xref{The Alert Protocol}, for more information. The alert protocol is above the record protocol. The handshake protocol is responsible for the security parameters' -negotiation, the initial key exchange and authentication. +negotiation, the initial key exchange and authentication. @xref{The Handshake Protocol}, for more information about the handshake protocol. The protocol layering in TLS is shown in @ref{fig-tls-layers}. @@ -65,7 +67,7 @@ above any transport layer, as long as it is a reliable one. @acronym{DTLS} can be used over reliable and unreliable transport layers. @acronym{GnuTLS} supports TCP and UDP layers transparently using the Berkeley sockets API. However, any transport layer can be used -by providing callbacks for @acronym{GnuTLS} to access the transport layer +by providing callbacks for @acronym{GnuTLS} to access the transport layer (for details see @ref{Setting up the transport layer}). @node The TLS record protocol @@ -73,17 +75,17 @@ by providing callbacks for @acronym{GnuTLS} to access the transport layer @cindex record protocol The record protocol is the secure communications provider. Its purpose -is to encrypt, authenticate and ---optionally--- compress packets. +is to encrypt, and authenticate packets. The record layer functions can be called at any time after the handshake process is finished, when there is need to receive or send data. In @acronym{DTLS} however, due to re-transmission timers used in the handshake out-of-order handshake data might be received for some time (maximum 60 seconds) after the handshake -process is finished. +process is finished. The functions to access the record protocol are limited to send -and receive functions, which might, given -the importance of this protocol in @acronym{TLS}, seem awkward. This is because +and receive functions, which might, given +the importance of this protocol in @acronym{TLS}, seem awkward. This is because the record protocol's parameters are all set by the handshake protocol. The record protocol initially starts with NULL parameters, which means no encryption, and no MAC is used. Encryption and authentication begin @@ -91,8 +93,7 @@ just after the handshake protocol has finished. @menu * Encryption algorithms used in the record layer:: -* Compression algorithms used in the record layer:: -* Weaknesses and countermeasures:: +* Compression algorithms and the record layer:: * On Record Padding:: @end menu @@ -101,61 +102,99 @@ just after the handshake protocol has finished. @cindex symmetric encryption algorithms Confidentiality in the record layer is achieved by using symmetric -block encryption algorithms like @code{3DES}, @code{AES} -or stream algorithms like @code{ARCFOUR_128}. - Ciphers are encryption algorithms that use a single, secret, -key to encrypt and decrypt data. Block algorithms in CBC mode also provide -protection against statistical analysis of the data. Thus, if you're -using the @acronym{TLS} protocol, a random number of blocks will be -appended to data, to prevent eavesdroppers from guessing the actual -data size. +ciphers like @code{AES} or @code{CHACHA20}. Ciphers are encryption algorithms +that use a single, secret, key to encrypt and decrypt data. Early +versions of TLS separated between block and stream ciphers and had +message authentication plugged in to them by the protocol, though later +versions switched to using authenticated-encryption (AEAD) ciphers. The AEAD +ciphers are defined to combine encryption and authentication, and as such +they are not only more efficient, as the primitives used are designed to +interoperate nicely, but they are also known to interoperate in a secure +way. The supported in @acronym{GnuTLS} ciphers and MAC algorithms are shown in @ref{tab:ciphers} and @ref{tab:macs}. @float Table,tab:ciphers -@multitable @columnfractions .30 .60 -@headitem Algorithm @tab Description -@item AES-128-CBC, AES-256-CBC @tab -AES or RIJNDAEL is the block cipher algorithm that replaces the old -DES algorithm. It has 128 bits block size and is used in CBC mode. - +@multitable @columnfractions .20 .10 .15 .55 +@headitem Algorithm @tab Type @tab Applicable Protocols @tab Description @item AES-128-GCM, AES-256-GCM @tab +AEAD @tab +TLS 1.2, TLS 1.3 @tab This is the AES algorithm in the authenticated encryption GCM mode. This mode combines message authentication and encryption and can be extremely fast on CPUs that support hardware acceleration. @item AES-128-CCM, AES-256-CCM @tab +AEAD @tab +TLS 1.2, TLS 1.3 @tab This is the AES algorithm in the authenticated encryption CCM mode. This mode combines message authentication and encryption and is often used by systems without AES or GCM acceleration support. +@item CHACHA20-POLY1305 @tab +AEAD @tab +TLS 1.2, TLS 1.3 @tab +CHACHA20-POLY1305 is an authenticated encryption algorithm based on CHACHA20 cipher and +POLY1305 MAC. CHACHA20 is a refinement of SALSA20 algorithm, an approved cipher by +the European ESTREAM project. POLY1305 is Wegman-Carter, one-time authenticator. The +combination provides a fast stream cipher suitable for systems where a hardware AES +accelerator is not available. + @item AES-128-CCM-8, AES-256-CCM-8 @tab +AEAD @tab +TLS 1.2, TLS 1.3 @tab This is the AES algorithm in the authenticated encryption CCM mode with a truncated to 64-bit authentication tag. This mode is for communication with restricted systems. +@item CAMELLIA-128-GCM, CAMELLIA-256-GCM @tab +AEAD @tab +TLS 1.2 @tab +This is the CAMELLIA algorithm in the authenticated encryption GCM mode. + +@item AES-128-CBC, AES-256-CBC @tab +Legacy (block) @tab +TLS 1.0, TLS 1.1, TLS 1.2 @tab +AES or RIJNDAEL is the block cipher algorithm that replaces the old +DES algorithm. It has 128 bits block size and is used in CBC mode. + @item CAMELLIA-128-CBC, CAMELLIA-256-CBC @tab +Legacy (block) @tab +TLS 1.0, TLS 1.1, TLS 1.2 @tab This is an 128-bit block cipher developed by Mitsubishi and NTT. It is one of the approved ciphers of the European NESSIE and Japanese CRYPTREC projects. -@item CHACHA20-POLY1305 @tab -CHACHA20-POLY1305 is an authenticated encryption algorithm based on CHACHA20 cipher and -POLY1305 MAC. CHACHA20 is a refinement of SALSA20 algorithm, an approved cipher by -the European ESTREAM project. POLY1305 is Wegman-Carter, one-time authenticator. The -combination provides a fast stream cipher suitable for systems where a hardware AES -accelerator is not available. - @item 3DES-CBC @tab +Legacy (block) @tab +TLS 1.0, TLS 1.1, TLS 1.2 @tab This is the DES block cipher algorithm used with triple encryption (EDE). Has 64 bits block size and is used in CBC mode. @item ARCFOUR-128 @tab +Legacy (stream) @tab +TLS 1.0, TLS 1.1, TLS 1.2 @tab ARCFOUR-128 is a compatible algorithm with RSA's RC4 algorithm, which is considered to be a trade secret. It is a considered to be broken, and is only used for compatibility purposed. For this reason it is not enabled by default. +@item GOST28147-TC26Z-CNT @tab +Legacy (stream) @tab +TLS 1.2 @tab +This is a 64-bit block cipher GOST 28147-89 with TC26Z S-Box working in CNT +mode. It is one of the approved ciphers in Russia. It is not enabled by default. + +@item NULL @tab +Legacy (stream) @tab +TLS 1.0, TLS 1.1, TLS 1.2 @tab +NULL is the empty/identity cipher which doesn't encrypt any data. It can be +combined with data authentication under TLS 1.2 or earlier, but is only used +transiently under TLS 1.3 until encryption starts. This cipher cannot be negotiated +by default (need to be explicitly enabled) under TLS 1.2, and cannot be +negotiated at all under TLS 1.3. When enabled, TLS 1.3 (or later) support will be +implicitly disabled. + @end multitable @caption{Supported ciphers in TLS.} @end float @@ -165,11 +204,11 @@ purposed. For this reason it is not enabled by default. @multitable @columnfractions .20 .70 @headitem Algorithm @tab Description @item MAC-MD5 @tab -This is an HMAC based on MD5 a cryptographic hash algorithm designed +This is an HMAC based on MD5 a cryptographic hash algorithm designed by Ron Rivest. Outputs 128 bits of data. @item MAC-SHA1 @tab -An HMAC based on the SHA1 cryptographic hash algorithm +An HMAC based on the SHA1 cryptographic hash algorithm designed by NSA. Outputs 160 bits of data. @item MAC-SHA256 @tab @@ -178,6 +217,11 @@ An HMAC based on SHA2-256. Outputs 256 bits of data. @item MAC-SHA384 @tab An HMAC based on SHA2-384. Outputs 384 bits of data. +@item GOST28147-TC26Z-IMIT @tab +This is a 64-bit block cipher GOST 28147-89 with TC26Z S-Box working in special +MAC mode called Imitovstavks. It is one of the approved MAC algorithms in +Russia. Outputs 32 bits of data. It is not enabled by default. + @item MAC-AEAD @tab This indicates that an authenticated encryption algorithm, such as GCM, is in use. @@ -187,96 +231,44 @@ GCM, is in use. @end float -@node Compression algorithms used in the record layer -@subsection Compression algorithms used in the record layer +@node Compression algorithms and the record layer +@subsection Compression algorithms and the record layer @cindex compression algorithms -The TLS record layer also supports compression. The algorithms -implemented in @acronym{GnuTLS} can be found in the table below. -The included algorithms perform really good when text, or other -compressible data are to be transferred, but offer nothing on already -compressed data, such as compressed images, zipped archives etc. -These compression algorithms, may be useful in high bandwidth TLS -tunnels, and in cases where network usage has to be minimized. It -should be noted however that compression increases latency. - -The record layer compression in @acronym{GnuTLS} is implemented based -on @xcite{RFC3749}. The supported algorithms are shown below. - -@showenumdesc{gnutls_compression_method_t,Supported compression algorithms} - -Note that compression enables attacks such as traffic analysis, or even -plaintext recovery under certain circumstances. To avoid some of these -attacks GnuTLS allows each record to be compressed independently (i.e., -stateless compression), by using the "%STATELESS_COMPRESSION" priority string, -in order to be used in cases where the attacker controlled data are -pt in separate records. - -@node Weaknesses and countermeasures -@subsection Weaknesses and countermeasures - -Some weaknesses that may affect the security of the record layer have -been found in @acronym{TLS} 1.0 protocol. These weaknesses can be -exploited by active attackers, and exploit the facts that - -@enumerate - -@item -@acronym{TLS} has separate alerts for ``decryption_failed'' and -``bad_record_mac'' - -@item -The decryption failure reason can be detected by timing the response -time. - -@item -The IV for CBC encrypted packets is the last block of the previous -encrypted packet. - -@end enumerate - -Those weaknesses were solved in @acronym{TLS} 1.1 @xcite{RFC4346} -which is implemented in @acronym{GnuTLS}. For this reason we suggest -to always negotiate the highest supported TLS version with the -peer@footnote{If this is not possible then please consult @ref{Interoperability}.}. -For a detailed discussion of the issues see the archives of the TLS -Working Group mailing list and @xcite{CBCATT}. +In early versions of TLS the record layer supported compression. However, +that proved to be problematic in many ways, and enabled several attacks +based on traffic analysis on the transported data. For that newer versions of the protocol no longer +offer compression, and @acronym{GnuTLS} since 3.6.0 no longer implements any +support for compression. @node On Record Padding @subsection On record padding @cindex record padding @cindex bad_record_mac -The TLS protocol allows for extra padding of records in CBC ciphers, to prevent -statistical analysis based on the length of exchanged messages (see @xcite{RFC5246} section 6.2.3.2). -GnuTLS appears to be one of few implementations that take advantage of this feature: -the user can provide some plaintext data with a range of lengths she wishes to hide, -and GnuTLS adds extra padding to make sure the attacker cannot tell the real plaintext -length is in a range smaller than the user-provided one. -Use @funcref{gnutls_record_send_range} to send length-hidden messages and -@funcref{gnutls_record_can_use_length_hiding} to check whether the current -session supports length hiding. Using the standard @funcref{gnutls_record_send} -will only add minimal padding. - -The TLS implementation in the Symbian operating system, frequently -used by Nokia and Sony-Ericsson mobile phones, cannot handle -non-minimal record padding. What happens when one of these clients -handshake with a GnuTLS server is that the client will fail to compute -the correct MAC for the record. The client sends a TLS alert -(@code{bad_record_mac}) and disconnects. Typically this will result -in error messages such as 'A TLS fatal alert has been received', 'Bad -record MAC', or both, on the GnuTLS server side. - -If compatibility with such devices is a concern, not sending length-hidden messages -solves the problem by using minimal padding. - -If you implement an application that has a configuration file, we -recommend that you make it possible for users or administrators to -specify a GnuTLS protocol priority string, which is used by your -application via @funcref{gnutls_priority_set}. To allow the best -flexibility, make it possible to have a different priority string for -different incoming IP addresses. +The TLS 1.3 protocol allows for extra padding of records to prevent +statistical analysis based on the length of exchanged messages. +GnuTLS takes advantage of this feature, by allowing the user +to specify the amount of padding for a particular message. The simplest +interface is provided by @funcref{gnutls_record_send2}, and is made +available when under TLS1.3; alternatively @funcref{gnutls_record_can_use_length_hiding} +can be queried. + +Note that this interface is not sufficient to completely hide the length of the +data. The application code may reveal the data transferred by leaking its +data processing time, or by leaking the TLS1.3 record processing time by +GnuTLS. That is because under TLS1.3 the padding removal time depends on the +padding data for an efficient implementation. To make that processing +constant time the @funcref{gnutls_init} function must be called with +the flag @code{GNUTLS_SAFE_PADDING_CHECK}. +@showfuncdesc{gnutls_record_send2} + +Older GnuTLS versions provided an API suitable for cases where the sender +sends data that are always within a given range. That API is still +available, and consists of the following functions. + +@showfuncB{gnutls_record_can_use_length_hiding,gnutls_record_send_range} @node The TLS Alert Protocol @section The TLS alert protocol @@ -290,14 +282,14 @@ protocol and the application protocol does not have to cope with them (e.g. @code{GNUTLS_@-A_@-CLOSE_@-NOTIFY}), and others refer to the application protocol solely (e.g. @code{GNUTLS_@-A_@-USER_@-CANCELLED}). An alert signal includes a level indication which may be either fatal or -warning. Fatal alerts always terminate the current connection, and -prevent future re-negotiations using the current session ID. All alert -messages are summarized in the table below. +warning (under TLS1.3 all alerts are fatal). Fatal alerts always terminate +the current connection, and prevent future re-negotiations using the current +session ID. All supported alert messages are summarized in the table below. The alert messages are protected by the record protocol, thus the information that is included does not leak. You must take extreme care for the alert information not to leak to a possible attacker, via -public log files etc. +public log files etc. @include alerts.texi @@ -310,7 +302,7 @@ The handshake protocol is responsible for the ciphersuite negotiation, the initial key exchange, and the authentication of the two peers. This is fully controlled by the application layer, thus your program has to set up the required parameters. The main handshake function -is @funcref{gnutls_handshake}. In the next paragraphs we elaborate on +is @funcref{gnutls_handshake}. In the next paragraphs we elaborate on the handshake protocol, i.e., the ciphersuite negotiation. @@ -325,9 +317,14 @@ the handshake protocol, i.e., the ciphersuite negotiation. @node TLS Cipher Suites @subsection TLS ciphersuites -The handshake protocol of @acronym{TLS} negotiates cipher suites of -a special form illustrated by the @code{TLS_DHE_RSA_WITH_3DES_CBC_SHA} cipher suite name. A typical cipher -suite contains these parameters: +The TLS cipher suites have slightly different meaning under different +protocols. Under @acronym{TLS 1.3}, a cipher suite indicates the symmetric +encryption algorithm in use, as well as the pseudo-random function (PRF) +used in the TLS session. + +Under TLS 1.2 or early the handshake protocol negotiates cipher suites of +a special form illustrated by the @code{TLS_DHE_RSA_WITH_3DES_CBC_SHA} cipher suite name. +A typical cipher suite contains these parameters: @itemize @@ -354,14 +351,23 @@ All the supported ciphersuites are listed in @ref{ciphersuites}. @subsection Authentication The key exchange algorithms of the @acronym{TLS} protocol offer -authentication, which is a prerequisite for a secure connection. -The available authentication methods in @acronym{GnuTLS} follow. +authentication, which is a prerequisite for a secure connection. +The available authentication methods in @acronym{GnuTLS}, under +TLS 1.3 or earlier versions, follow. @itemize -@item Certificate authentication: Authenticated key exchange using public key infrastructure and certificates (X.509 or OpenPGP). -@item @acronym{SRP} authentication: Authenticated key exchange using a password. +@item Certificate authentication: Authenticated key exchange using public key infrastructure and X.509 certificates. @item @acronym{PSK} authentication: Authenticated key exchange using a pre-shared key. + +@end itemize + +Under TLS 1.2 or earlier versions, the following authentication methods +are also available. + +@itemize + +@item @acronym{SRP} authentication: Authenticated key exchange using a password. @item Anonymous authentication: Key exchange without peer authentication. @end itemize @@ -373,7 +379,7 @@ The available authentication methods in @acronym{GnuTLS} follow. In the case of ciphersuites that use certificate authentication, the authentication of the client is optional in @acronym{TLS}. A server may request a certificate from the client using the -@funcref{gnutls_certificate_server_set_request} function. We elaborate +@funcref{gnutls_certificate_server_set_request} function. We elaborate in @ref{Certificate credentials}. @node Resuming Sessions @@ -383,7 +389,7 @@ in @ref{Certificate credentials}. @cindex session resumption The TLS handshake process performs expensive calculations -and a busy server might easily be put under load. To +and a busy server might easily be put under load. To reduce the load, session resumption may be used. This is a feature of the @acronym{TLS} protocol which allows a client to connect to a server after a successful handshake, without @@ -391,8 +397,8 @@ the expensive calculations. This is achieved by re-using the previously established keys, meaning the server needs to store the state of established connections (unless session tickets are used -- @ref{Session tickets}). -Session resumption is an integral part of @acronym{GnuTLS}, and -@ref{Session resumption}, @ref{ex-resume-client} illustrate typical +Session resumption is an integral part of @acronym{GnuTLS}, and +@ref{Session resumption}, @ref{ex-resume-client} illustrate typical uses of it. @node TLS Extensions @@ -469,6 +475,9 @@ regularly. Since version 3.1.3 GnuTLS clients transparently support session tickets, unless forward secrecy is explicitly requested (with the PFS priority string). +Under TLS 1.3 session tickets are mandatory for session resumption, and they +do not share the forward secrecy concerns as with TLS 1.2 or earlier. + @node HeartBeat @subsection HeartBeat @cindex TLS extensions @@ -478,10 +487,10 @@ This is a TLS extension that allows to ping and receive confirmation from the pe and is described in @xcite{RFC6520}. The extension is disabled by default and @funcref{gnutls_heartbeat_enable} can be used to enable it. A policy may be negotiated to only allow sending heartbeat messages or sending and receiving. -The current session policy can be checked with @funcref{gnutls_heartbeat_allowed}. +The current session policy can be checked with @funcref{gnutls_heartbeat_allowed}. The requests coming from the peer result to @code{GNUTLS_@-E_@-HEARTBEAT_@-PING_@-RECEIVED} being returned from the receive function. Ping requests to peer can be send via -@funcref{gnutls_heartbeat_ping}. +@funcref{gnutls_heartbeat_ping}. @showfuncB{gnutls_heartbeat_allowed,gnutls_heartbeat_enable} @@ -514,7 +523,7 @@ to access certain parts of a web site. The attack works by having the attacker simulate a client and connect to a server, with server-only authentication, and send some data intended to cause harm. The server will then require renegotiation from him -in order to perform the request. +in order to perform the request. When the proper client attempts to contact the server, the attacker hijacks that connection and forwards traffic to the initial server that requested renegotiation. The @@ -552,7 +561,7 @@ Note that it is easy to configure clients to always require the safe renegotiation extension from servers. To modify the default behavior, we have introduced some new priority -strings (see @ref{Priority Strings}). +strings (see @ref{Priority Strings}). The @code{%UNSAFE_RENEGOTIATION} priority string permits (re-)handshakes even when the safe renegotiation extension was not negotiated. The default behavior is @code{%PARTIAL_RENEGOTIATION} that will @@ -636,9 +645,9 @@ Other helper functions are listed below. @cindex False Start @cindex TLS False Start -The TLS protocol was extended in @xcite{draft-ietf-tls-falsestart-01} to allow the client +The TLS protocol was extended in @xcite{RFC7918} to allow the client to send data to server in a single round trip. This change however operates on the borderline -of the TLS protocol security guarrantees and should be used for the cases where the reduced +of the TLS protocol security guarantees and should be used for the cases where the reduced latency outperforms the risk of an adversary intercepting the transferred data. In GnuTLS applications can use the @acronym{GNUTLS_ENABLE_FALSE_START} as option to @funcref{gnutls_init} to request an early return of the @funcref{gnutls_handshake} function. After that early @@ -657,7 +666,7 @@ whitelisted for false start or on insufficient key sizes, the handshake process will complete properly (i.e., no early return). To verify that false start was used you may use @funcref{gnutls_session_get_flags} and check for the @acronym{GNUTLS_SFLAGS_FALSE_START} flag. For GnuTLS the false start is whitelisted for the following -key exchange methods (see @xcite{draft-ietf-tls-falsestart-01} for rationale) +key exchange methods (see @xcite{RFC7918} for rationale) @itemize @item DHE @item ECDHE @@ -670,7 +679,7 @@ but only when the negotiated parameters exceed @code{GNUTLS_SEC_PARAM_HIGH} @cindex ALPN @cindex Application Layer Protocol Negotiation -The TLS protocol was extended in @code{RFC7301} +The TLS protocol was extended in @code{RFC7301} to provide the application layer a method of negotiating the application protocol version. This allows for negotiation of the application protocol during the TLS handshake, thus reducing @@ -691,8 +700,8 @@ to register them. It is possible to transfer supplemental data during the TLS handshake, following @xcite{RFC4680}. This is for "custom" protocol modifications for applications which may want to transfer additional data (e.g. additional authentication messages). Such -an exchange requires a custom extension to be registered. -The provided API for this functionality is low-level and described in @ref{TLS Extension Handling}. +an exchange requires a custom extension to be registered. +The provided API for this functionality is low-level and described in @ref{TLS Hello Extension Handling}. @include sec-tls-app.texi diff --git a/doc/cha-library.texi b/doc/cha-library.texi index 8ac36ccf7a..6e5df6eaaa 100644 --- a/doc/cha-library.texi +++ b/doc/cha-library.texi @@ -7,7 +7,7 @@ privacy over insecure lines, and were designed to prevent eavesdropping, tampering, or message forgery. Technically @acronym{GnuTLS} is a portable ANSI C based library which -implements the protocols ranging from SSL 3.0 to TLS 1.2 (see @ref{Introduction to TLS}, +implements the protocols ranging from SSL 3.0 to TLS 1.3 (see @ref{Introduction to TLS}, for a detailed description of the protocols), accompanied with the required framework for authentication and public key infrastructure. Important features of the @acronym{GnuTLS} library @@ -15,11 +15,11 @@ include: @itemize -@item Support for TLS 1.2, TLS 1.1, TLS 1.0 and SSL 3.0 protocols. +@item Support for TLS 1.3, TLS 1.2, TLS 1.1, TLS 1.0 and optionally SSL 3.0 protocols. @item Support for Datagram TLS 1.0 and 1.2. -@item Support for handling and verification of @acronym{X.509} and @acronym{OpenPGP} certificates. +@item Support for handling and verification of @acronym{X.509} certificates. @item Support for password authentication using @acronym{TLS-SRP}. @@ -52,7 +52,7 @@ and gmplib libraries. @cindex download GnuTLS is available for download at: -@url{http://www.gnutls.org/download.html} +@url{https://www.gnutls.org/download.html} GnuTLS uses a development cycle where even minor version numbers indicate a stable release and a odd minor version number indicate a @@ -62,8 +62,8 @@ release since 7 is odd. GnuTLS depends on @code{nettle} and @code{gmplib}, and you will need to install it before installing GnuTLS. The @code{nettle} library is available from -@url{http://www.lysator.liu.se/~nisse/nettle/}, while @code{gmplib} is available -from @url{http://www.gmplib.org/}. +@url{https://www.lysator.liu.se/~nisse/nettle/}, while @code{gmplib} is available +from @url{https://www.gmplib.org/}. Don't forget to verify the cryptographic signature after downloading source code packages. @@ -78,7 +78,7 @@ Several parts of GnuTLS require ASN.1 functionality, which is provided by a library called libtasn1. A copy of libtasn1 is included in GnuTLS. If you want to install it separately (e.g., to make it possibly to use libtasn1 in other programs), you can get it from -@url{http://www.gnu.org/software/libtasn1/}. +@url{https://www.gnu.org/software/libtasn1/}. The compression library, @code{libz}, the PKCS #11 helper library @code{p11-kit}, the TPM library @code{trousers}, as well as the IDN library @code{libidn}@footnote{Needed @@ -97,7 +97,6 @@ options are given. --disable-srp-authentication --disable-psk-authentication --disable-anon-authentication ---disable-openpgp-authentication --disable-dhe --disable-ecdhe --disable-openssl-compatibility @@ -143,7 +142,7 @@ the last, which allows to use a PKCS #11 trust policy module. That module not on provides the trusted certificates, but allows the categorization of them using purpose, e.g., CAs can be restricted for e-mail usage only, or administrative restrictions of CAs, for examples by restricting a CA to only issue certificates for a given DNS domain using NameConstraints. -A publicly available PKCS #11 trust module is p11-kit's trust module@footnote{@url{http://p11-glue.freedesktop.org/doc/p11-kit/trust-module.html}}. +A publicly available PKCS #11 trust module is p11-kit's trust module@footnote{@url{https://p11-glue.github.io/p11-glue/trust-module.html}}. @node Document overview @section Overview diff --git a/doc/cha-preface.texi b/doc/cha-preface.texi index a11b34651f..7c41f41b15 100644 --- a/doc/cha-preface.texi +++ b/doc/cha-preface.texi @@ -23,4 +23,4 @@ in @xcite{STEVENS}, to public key infrastructure in @xcite{GUTPKI} and to security engineering in @xcite{ANDERSON}. Updated versions of the @acronym{GnuTLS} software and this document -will be available from @url{http://www.gnutls.org/}. +will be available from @url{https://www.gnutls.org/}. diff --git a/doc/cha-shared-key.texi b/doc/cha-shared-key.texi index 78c1f36240..394fd7952f 100644 --- a/doc/cha-shared-key.texi +++ b/doc/cha-shared-key.texi @@ -6,11 +6,58 @@ used with password, shared-key and anonymous authentication methods. The rest of this chapter discusses details of these methods. @menu -* SRP authentication:: * PSK authentication:: +* SRP authentication:: * Anonymous authentication:: @end menu +@node PSK authentication +@subsection PSK authentication + +@menu +* Authentication using PSK:: +* psktool Invocation:: Invoking psktool +@end menu + +@node Authentication using PSK +@subsubsection Authentication using @acronym{PSK} +@cindex PSK authentication + +Authentication using Pre-shared keys is a method to authenticate using +usernames and binary keys. This protocol avoids making use of public +key infrastructure and expensive calculations, thus it is suitable for +constraint clients. It is available under all TLS protocol versions. + +The implementation in @acronym{GnuTLS} is based on @xcite{TLSPSK}. +The supported @acronym{PSK} key exchange methods are: + +@table @code + +@item PSK: +Authentication using the @acronym{PSK} protocol (no forward secrecy). + +@item DHE-PSK: +Authentication using the @acronym{PSK} protocol and Diffie-Hellman key +exchange. This method offers perfect forward secrecy. + +@item ECDHE-PSK: +Authentication using the @acronym{PSK} protocol and Elliptic curve Diffie-Hellman key +exchange. This method offers perfect forward secrecy. + +@item RSA-PSK: +Authentication using the @acronym{PSK} protocol for the client and an RSA certificate +for the server. This is not available under TLS 1.3. + +@end table + +Helper functions to generate and maintain @acronym{PSK} keys are also included +in @acronym{GnuTLS}. + +@showfuncC{gnutls_key_generate,gnutls_hex_encode,gnutls_hex_decode} + +@include invoke-psktool.texi + + @node SRP authentication @subsection SRP authentication @@ -29,7 +76,8 @@ The @acronym{SRP} key exchange is an extension to the @acronym{TLS} protocol, and it provides an authenticated with a password key exchange. The peers can be identified using a single password, or there can be combinations where the client is authenticated using @acronym{SRP} -and the server using a certificate. +and the server using a certificate. It is only available under TLS 1.2 or earlier +versions. The advantage of @acronym{SRP} authentication, over other proposed secure password authentication schemes, is that @acronym{SRP} is not @@ -53,7 +101,8 @@ follow those conventions. The srptool program, discussed in the next section is a tool to manipulate the SRP parameters. The implementation in @acronym{GnuTLS} is based on @xcite{TLSSRP}. The -supported key exchange methods are shown below. +supported key exchange methods are shown below. Enabling any of these +key exchange methods in a session disables support for TLS1.3. @table @code @@ -77,53 +126,6 @@ authenticated using a certificate with RSA parameters. @include invoke-srptool.texi -@node PSK authentication -@subsection PSK authentication - -@menu -* Authentication using PSK:: -* psktool Invocation:: Invoking psktool -@end menu - -@node Authentication using PSK -@subsubsection Authentication using @acronym{PSK} -@cindex PSK authentication - -Authentication using Pre-shared keys is a method to authenticate using -usernames and binary keys. This protocol avoids making use of public -key infrastructure and expensive calculations, thus it is suitable for -constraint clients. - -The implementation in @acronym{GnuTLS} is based on @xcite{TLSPSK}. -The supported @acronym{PSK} key exchange methods are: - -@table @code - -@item PSK: -Authentication using the @acronym{PSK} protocol. - -@item DHE-PSK: -Authentication using the @acronym{PSK} protocol and Diffie-Hellman key -exchange. This method offers perfect forward secrecy. - -@item ECDHE-PSK: -Authentication using the @acronym{PSK} protocol and Elliptic curve Diffie-Hellman key -exchange. This method offers perfect forward secrecy. - -@item RSA-PSK: -Authentication using the @acronym{PSK} protocol for the client and an RSA certificate -for the server. - -@end table - - -Helper functions to generate and maintain @acronym{PSK} keys are also included -in @acronym{GnuTLS}. - -@showfuncC{gnutls_key_generate,gnutls_hex_encode,gnutls_hex_decode} - -@include invoke-psktool.texi - @node Anonymous authentication @subsection Anonymous authentication @cindex anonymous authentication @@ -134,7 +136,8 @@ is vulnerable to a man in the middle attack, but can be used even if there is no prior communication or shared trusted parties with the peer. It is useful to establish a session over which certificate authentication will occur in order to hide the indentities of the participants -from passive eavesdroppers. +from passive eavesdroppers. It is only available under TLS 1.2 or earlier +versions. Unless in the above case, it is not recommended to use anonymous authentication. In the cases where there is no prior communication with the peers, @@ -143,7 +146,8 @@ an alternative with better properties, such as key continuity, is trust on first The available key exchange algorithms for anonymous authentication are shown below, but note that few public servers support them, and they -have to be explicitly enabled. +have to be explicitly enabled. These ciphersuites are negotiated only under +TLS 1.2. @table @code diff --git a/doc/cha-support.texi b/doc/cha-support.texi index 6ba2792554..b68cd073f4 100644 --- a/doc/cha-support.texi +++ b/doc/cha-support.texi @@ -16,47 +16,18 @@ A mailing list where users may help each other exists, and you can reach it by sending e-mail to @email{gnutls-help@@gnutls.org}. Archives of the mailing list discussions, and an interface to manage subscriptions, is available through the World Wide Web at -@url{http://lists.gnutls.org/pipermail/gnutls-help/}. +@url{https://lists.gnutls.org/pipermail/gnutls-help/}. A mailing list for developers are also available, see -@url{http://www.gnutls.org/lists.html}. +@url{https://www.gnutls.org/lists.html}. Bug reports should be sent to @email{bugs@@gnutls.org}, see @ref{Bug Reports}. @node Commercial Support @section Commercial Support -Commercial support is available for users of GnuTLS. The kind of -support that can be purchased may include: - -@itemize - -@item Implement new features. -Such as a new TLS extension. - -@item Port GnuTLS to new platforms. -This could include porting to an embedded platforms that may need -memory or size optimization. - -@item Integrating TLS as a security environment in your existing project. - -@item System design of components related to TLS. - -@end itemize - -If you are interested, please write to: - -@verbatim -Simon Josefsson Datakonsult -Hagagatan 24 -113 47 Stockholm -Sweden - -E-mail: simon@josefsson.org -@end verbatim - -If your company provides support related to GnuTLS and would like to -be mentioned here, contact the authors. +Commercial support is available for users of GnuTLS. See +@url{https://www.gnutls.org/commercial.html} for more information. @node Bug Reports @@ -160,13 +131,9 @@ formatted, are extracted into Texinfo manuals and GTK-DOC web pages. @section Certification @cindex certification -Many cryptographic libraries claim certifications from national or international bodies. These certifications are tied on a specific (and often restricted) version of the library or a -specific product using the library, and typically in the case of software they assure that the algorithms implemented are correct. The major certifications known are: -@itemize -@item USA's FIPS 140-2 at Level 1 which certifies that approved algorithms are used (see @url{http://en.wikipedia.org/wiki/FIPS_140-2}); -@item Common Criteria for Information Technology Security Evaluation (CC), an international standard for verification of elaborate security claims (see @url{http://en.wikipedia.org/wiki/Common_Criteria}). -@end itemize +There are certifications from national or international bodies which "prove" +to an auditor that the crypto component follows some best practices, such +as unit testing and reliance on well known crypto primitives. -Obtaining such a certification is an expensive and elaborate job that has no immediate value for a continuously developed free software library (as the certification is tied to the -particular version tested). While, as a free software project, we are not actively pursuing this kind of certification, GnuTLS has been FIPS-140-2 certified in several systems by -third parties. If you are, interested, see @ref{Commercial Support}. +GnuTLS has support for the FIPS 140-2 certification under Red Hat Enterprise Linux. +See @ref{FIPS140-2 mode} for more information. diff --git a/doc/cha-tokens.texi b/doc/cha-tokens.texi index 78d0bc8734..ab7a5fbf32 100644 --- a/doc/cha-tokens.texi +++ b/doc/cha-tokens.texi @@ -17,7 +17,7 @@ stored in such modules. In GnuTLS the approach is to handle all keys transparently by the high level API, e.g., the API that loads a key or certificate from a file. The high-level API will accept URIs in addition to files that specify keys on an HSM or in TPM, -and a callback function will be used to obtain any required keys. The URI format is defined in +and a callback function will be used to obtain any required keys. The URI format is defined in @xcite{PKCS11URI}. More information on the API is provided in the next sections. Examples of a URI of a certificate @@ -42,7 +42,7 @@ manufacturer=EnterSafe;object=test1;type=cert @cindex abstract types Since there are many forms of a public or private keys supported by @acronym{GnuTLS} such as -@acronym{X.509}, @acronym{OpenPGP}, @acronym{PKCS} #11 or TPM it is desirable to allow common operations +@acronym{X.509}, @acronym{PKCS} #11 or TPM it is desirable to allow common operations on them. For these reasons the abstract @code{gnutls_privkey_t} and @code{gnutls_pubkey_t} were introduced in @code{gnutls/@-abstract.h} header. Those types are initialized using a specific type of key and then can be used to perform operations in an abstract way. For example in order @@ -50,7 +50,7 @@ to sign an X.509 certificate with a key that resides in a token the following st used. @example -#inlude +#include void sign_cert( gnutls_x509_crt_t to_be_signed) @{ @@ -80,8 +80,12 @@ gnutls_privkey_t abs_key; @node Abstract public keys @subsection Public keys -An abstract @code{gnutls_pubkey_t} can be initialized -using the functions below. It can be imported through +An abstract @code{gnutls_pubkey_t} can be initialized and freed by +using the functions below. + +@showfuncB{gnutls_pubkey_init,gnutls_pubkey_deinit} + +After initialization its values can be imported from an existing structure like @code{gnutls_x509_crt_t}, or through an ASN.1 encoding of the X.509 @code{SubjectPublicKeyInfo} sequence. @@ -92,8 +96,7 @@ sequence. @showfuncdesc{gnutls_pubkey_export2} -Other helper functions that allow directly importing from raw X.509 or -OpenPGP structures are shown below. +Other helper functions that allow directly importing from raw X.509 structures are shown below. @showfuncA{gnutls_pubkey_import_x509_raw} @@ -117,12 +120,16 @@ subjectPublicKeyInfo object. To export the key-specific parameters, or obtain a unique key ID the following functions are provided. -@showfuncD{gnutls_pubkey_export_rsa_raw,gnutls_pubkey_export_dsa_raw,gnutls_pubkey_export_ecc_raw,gnutls_pubkey_export_ecc_x962} +@showfuncD{gnutls_pubkey_export_rsa_raw2,gnutls_pubkey_export_dsa_raw2,gnutls_pubkey_export_ecc_raw2,gnutls_pubkey_export_ecc_x962} @node Abstract private keys @subsection Private keys -An abstract @code{gnutls_privkey_t} can be initialized -using the functions below. It can be imported through +An abstract @code{gnutls_privkey_t} can be initialized and freed by +using the functions below. + +@showfuncB{gnutls_privkey_init,gnutls_privkey_deinit} + +After initialization its values can be imported from an existing structure like @code{gnutls_x509_privkey_t}, but unlike public keys it cannot be exported. That is to allow abstraction over keys stored in hardware that @@ -130,8 +137,8 @@ makes available only operations. @showfuncB{gnutls_privkey_import_x509,gnutls_privkey_import_pkcs11} -Other helper functions that allow directly importing from raw X.509 or -OpenPGP structures are shown below. Again, as with public keys, private keys +Other helper functions that allow directly importing from raw X.509 +structures are shown below. Again, as with public keys, private keys can be imported from a hardware module using URLs. @showfuncdesc{gnutls_privkey_import_url} @@ -143,7 +150,12 @@ an external API, the following function is provided. This allows for a simple extensibility API without resorting to @acronym{PKCS} #11. -@showfuncdesc{gnutls_privkey_import_ext3} +@showfuncdesc{gnutls_privkey_import_ext4} + +On the private keys where exporting of parameters is possible (i.e., +software keys), the following functions are also available. + +@showfuncC{gnutls_privkey_export_rsa_raw2,gnutls_privkey_export_dsa_raw2,gnutls_privkey_export_ecc_raw2} @node Operations @subsection Operations @@ -202,7 +214,7 @@ The input to this function are three callback functions as well as the prefix of the URL, (e.g., "mypkcs11:") and the length of the prefix. The types of the callbacks are shown below, and are expected to use the exported gnutls functions to import the keys and certificates. -E.g., a typical @code{import_key} callback should use @funcref{gnutls_privkey_import_ext3}. +E.g., a typical @code{import_key} callback should use @funcref{gnutls_privkey_import_ext4}. @example typedef int (*gnutls_privkey_import_url_func)(gnutls_privkey_t pkey, @@ -277,6 +289,7 @@ available in @code{gnutls/pkcs11.h}. * Accessing objects that require a PIN:: * Reading objects:: * Writing objects:: +* PKCS11 Low Level Access:: * Using a PKCS11 token with TLS:: * Verifying certificates over PKCS11:: * p11tool Invocation:: @@ -289,7 +302,7 @@ and tokens, @acronym{PKCS} #11 is automatically initialized during the first call of a @acronym{PKCS} #11 related function, in a thread safe way. The default initialization process, utilizes p11-kit configuration, and loads any appropriate @acronym{PKCS} #11 modules. The p11-kit configuration -files@footnote{@url{http://p11-glue.freedesktop.org/}} are typically stored in @code{/etc/pkcs11/modules/}. +files@footnote{@url{https://p11-glue.github.io/p11-glue/p11-kit.html}} are typically stored in @code{/etc/pkcs11/modules/}. For example a file that will instruct GnuTLS to load the @acronym{OpenSC} module, could be named @code{/etc/pkcs11/modules/opensc.module} and contain the following: @@ -333,7 +346,7 @@ flag. @showfuncdesc{gnutls_pkcs11_add_provider} -In that case, the application will only have access to the modules explictly +In that case, the application will only have access to the modules explicitly loaded. If the @code{GNUTLS_PKCS11_FLAG_MANUAL} flag is specified and no calls to @funcref{gnutls_pkcs11_add_provider} are made, then the PKCS #11 functionality is effectively disabled. @@ -462,6 +475,19 @@ entered before accessing the object (for operations or otherwise). @showfuncdesc{gnutls_pkcs11_delete_url} +@node PKCS11 Low Level Access +@subsection Low Level Access + +When it is needed to use PKCS#11 functionality which is not wrapped by +GnuTLS, it is possible to extract the PKCS#11 session, object or token pointers. +That allows an application to still access the low-level functionality, +while at the same time take advantage of the URI addressing scheme supported +by GnuTLS. + +@showfuncdesc{gnutls_pkcs11_token_get_ptr} +@showfuncdesc{gnutls_pkcs11_obj_get_ptr} + + @node Using a PKCS11 token with TLS @subsection Using a @acronym{PKCS} #11 token with TLS @@ -480,7 +506,7 @@ The @acronym{PKCS} #11 API can be used to allow all applications in the same operating system to access shared cryptographic keys and certificates in a uniform way, as in @ref{fig-pkcs11-vision}. That way applications could load their trusted certificate list, as well as user certificates from a common PKCS #11 module. -Such a provider is the p11-kit trust storage module@footnote{@url{http://p11-glue.freedesktop.org/trust-module.html}} +Such a provider is the p11-kit trust storage module@footnote{@url{https://p11-glue.github.io/p11-glue/trust-module.html}} and it provides access to the trusted Root CA certificates in a system. That provides a more dynamic list of Root CA certificates, as opposed to a static list in a file or directory. @@ -488,7 +514,7 @@ list in a file or directory. That store, allows for blacklisting of CAs or certificates, as well as categorization of the Root CAs (Web verification, Code signing, etc.), in addition to restricting their purpose via stapled extensions@footnote{See -the 'Restricting the scope of CA certificates' post at @url{http://nmav.gnutls.org/2016/06/restricting-scope-of-ca-certificates.html}}. +the 'Restricting the scope of CA certificates' post at @url{https://nmav.gnutls.org/2016/06/restricting-scope-of-ca-certificates.html}}. GnuTLS will utilize the p11-kit trust module as the default trust store if configured to; i.e., if '--with-default-trust-store-pkcs11=pkcs11:' is given to the configure script. diff --git a/doc/cha-upgrade.texi b/doc/cha-upgrade.texi index b2ef4822f7..91c6803ec6 100644 --- a/doc/cha-upgrade.texi +++ b/doc/cha-upgrade.texi @@ -182,3 +182,87 @@ however, several deprecated functions were removed, and are listed below. @tab @funcref{gnutls_privkey_sign_hash} with the flag GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA @end multitable + +@heading Upgrading to 3.6.x from 3.5.x + +GnuTLS 3.6.x is source and binary compatible with GnuTLS 3.5.x releases; +however, there are minor differences, listed below. + +@multitable @columnfractions .30 .60 +@headitem Old functionality @tab Replacement + +@item The priority strings "+COMP" are a no-op +@tab TLS compression is no longer available. + +@item The SSL 3.0 protocol is a no-op +@tab SSL 3.0 is no longer compiled in by default. It is a legacy protocol +which is completely eliminated from public internet. As such it was removed +to reduce the attack vector for applications using the library. + +@item The hash function SHA2-224 is a no-op for TLS1.2 +@tab TLS 1.3 no longer uses SHA2-224, and it was never a widespread hash +algorithm. As such it was removed for simplicity. + +@item The SRP key exchange accepted parameters outside the @xcite{TLSSRP} spec +@tab The SRP key exchange is restricted to @xcite{TLSSRP} spec parameters +to protect clients from MitM attacks. + +@item The compression-related functions are deprecated +@tab No longer use @funcintref{gnutls_compression_get}, +@funcintref{gnutls_compression_get_name}, @funcintref{gnutls_compression_list}, +and @funcintref{gnutls_compression_get_id}. + +@item @funcref{gnutls_x509_crt_sign}, @funcref{gnutls_x509_crl_sign}, @funcref{gnutls_x509_crq_sign} +@tab These signing functions will no longer sign using SHA1, but with a secure hash algorithm. + +@item @funcref{gnutls_certificate_set_ocsp_status_request_file} +@tab This function will return an error if the loaded response doesn't match +any of the present certificates. To revert to previous semantics set the @code{GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK} +flag using @funcref{gnutls_certificate_set_flags}. + +@item The callback @funcref{gnutls_privkey_import_ext3} is not flexible enough for new signature algorithms such as RSA-PSS +@tab It is replaced with @funcref{gnutls_privkey_import_ext4} + +@item Re-handshake functionality is not applicable under TLS 1.3. +@tab It is replaced by separate key update and re-authentication functionality +which can be accessed directly via @funcref{gnutls_session_key_update} and @funcref{gnutls_reauth}. + +@item TLS session identifiers are not shared with the server under TLS 1.3. +@tab The TLS session identifiers are persistent across resumption only on +server side and can be obtained as before via @funcref{gnutls_session_get_id2}. + +@item @funcref{gnutls_pkcs11_privkey_generate3}, @funcref{gnutls_pkcs11_copy_secret_key}, @funcref{gnutls_pkcs11_copy_x509_privkey2} +@tab These functions no longer create an exportable key by default; they require the flag @code{GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE} to do so. + +@item @funcref{gnutls_db_set_retrieve_function}, @funcref{gnutls_db_set_store_function}, @funcref{gnutls_db_set_remove_function} +@tab These functions are no longer relevant under TLS 1.3; resumption under +TLS 1.3 is done via session tickets, c.f. @funcref{gnutls_session_ticket_enable_server}. + +@item @funcref{gnutls_session_get_data2}, @funcref{gnutls_session_get_data} +@tab These functions may introduce a slight delay under TLS 1.3 for few +milliseconds. Check output of @funcref{gnutls_session_get_flags} for GNUTLS_SFLAGS_SESSION_TICKET +before calling this function to avoid delays. To work efficiently under +TLS 1.3 this function requires the application setting +@funcref{gnutls_transport_set_pull_timeout_function}. + +@item SRP and RSA-PSK key exchanges are not supported under TLS 1.3 +@tab SRP and RSA-PSK key exchanges are not supported in TLS 1.3, so when these key exchanges are present in a priority string, TLS 1.3 is disabled. + +@item Anonymous key exchange is not supported under TLS 1.3 +@tab There is no anonymous key exchange supported under TLS 1.3, so if an anonymous key exchange method is set in a priority string, and no certificate credentials are set in the client or server, TLS 1.3 will not be negotiated. + +@item ECDHE-PSK and DHE-PSK keywords have the same meaning under TLS 1.3 +@tab In the priority strings, both @code{ECDHE@-PSK} and @code{DHE@-PSK} indicate the intent to support an ephemeral key exchange with the pre-shared key. The parameters of the key exchange are negotiated with the supported groups specified in the priority string. + +@item Authentication-only ciphersuites are not supported under TLS 1.3 +@tab Ciphersuites with the @code{NULL} cipher (i.e., authentication-only) are not supported in TLS 1.3, so when they are specified in a priority string, TLS 1.3 is disabled. + +@item Supplemental data is not supported under TLS 1.3 +@tab The TLS supplemental data handshake message (RFC 4680) is not supported under TLS 1.3, so if the application calls @funcref{gnutls_supplemental_register} or @funcref{gnutls_session_supplemental_register}, TLS 1.3 is disabled. + +@item The GNUTLS_X509_NO_WELL_DEFINED_EXPIRATION macro is a no-op +@tab The macro was non-functional and because of the nature of the +definition of the no-well-defined date for certificates (a real date), +it will not be fixed or re-introduced. + +@end multitable diff --git a/doc/credentials/Makefile.am b/doc/credentials/Makefile.am index bfe0ae025a..ecdd57a106 100644 --- a/doc/credentials/Makefile.am +++ b/doc/credentials/Makefile.am @@ -19,7 +19,7 @@ # along with this file; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -SUBDIRS = openpgp srp x509 +SUBDIRS = srp x509 EXTRA_DIST = gnutls-http-serv @@ -31,6 +31,3 @@ EXTRA_DIST += srp-passwd.txt srp-tpasswd.conf EXTRA_DIST += psk-passwd.txt -EXTRA_DIST += openpgp-server.bin openpgp-server-key.bin \ - openpgp-server-key.txt openpgp-server.txt - diff --git a/doc/credentials/gnutls-http-serv b/doc/credentials/gnutls-http-serv index 8a58d50f37..51b1bc5389 100755 --- a/doc/credentials/gnutls-http-serv +++ b/doc/credentials/gnutls-http-serv @@ -1,8 +1,10 @@ #! /bin/sh ../../src/gnutls-serv --http --x509certfile x509/cert-rsa.pem --x509keyfile x509/key-rsa.pem --x509cafile x509/ca.pem \ - --x509dsacertfile x509/cert-dsa.pem --x509dsakeyfile x509/key-dsa.pem \ - --x509ecccertfile x509/cert-ecc.pem --x509ecckeyfile x509/key-ecc.pem \ + --x509certfile x509/cert-dsa.pem --x509keyfile x509/key-dsa.pem \ + --x509certfile x509/cert-ecc.pem --x509keyfile x509/key-ecc.pem \ + --x509certfile x509/cert-rsa-pss.pem --x509keyfile x509/key-rsa-pss.pem \ + --x509certfile x509/cert-gost01.pem --x509keyfile x509/key-gost01.pem \ --srppasswd srp/tpasswd --srppasswdconf srp/tpasswd.conf \ - --pgpkeyfile openpgp/sec.asc --pgpcertfile openpgp/pub.asc --pskpasswd psk-passwd.txt \ + --pskpasswd psk-passwd.txt \ $* diff --git a/doc/credentials/openpgp-server-key.bin b/doc/credentials/openpgp-server-key.bin deleted file mode 100644 index fa643ffd0d..0000000000 Binary files a/doc/credentials/openpgp-server-key.bin and /dev/null differ diff --git a/doc/credentials/openpgp-server-key.txt b/doc/credentials/openpgp-server-key.txt deleted file mode 100644 index fe53841627..0000000000 --- a/doc/credentials/openpgp-server-key.txt +++ /dev/null @@ -1,31 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- -Version: GnuPG v1.4.6 (GNU/Linux) - -lQG7BEXInlgRBAD0teb6ohIlchkHcFlmmvtVW1KXexlDfXExf8T+fOz5z354GPOX -sDq98ztCEE3hnPEOFj4NT0X3nEtrvLkhmZqrDHSbuJACB4qxeHwEbGFx7OIDW8+u -4sKxpaza1GVf1NQ7VIaQiXaGHy8Esn9SW7oNhK6z5l4TIRlm3OBt3cxU3wCgjnnO -jpGJeeo0OnZzSH+xsNLJQEcEAOmUc+7N9OhpT/gqddIgzYRr/FD0Ad6HBfABol6Q -wWCapzIxggnZJ9i+lHujpcA8idtrBU/DGhkGtW95QaHwQ8d5SvetM7Wc/xoHEP3o -HGvSGoXtfqlofastcC7eso39EBD10cpIB+gUmhe1MpaXm7A6m+KJO+2CkqE1vMkc -tmKHBACzDRrWgkV+AtGWKl3ge9RkYHKxAPc0FBrpzDrvmvvNMaIme2u/+WP/xa4T -nTjgys+pfeplHVfCO/n6nKWrVepMPE0+ZeNWzY6CsfhL7VjSN99vm7qzNHswBiJS -gCSwJXRmQcJcS9hxqLciUyVEB32zPqX24QHnsyPYaSCzEBgOnAAAnA3QL7uV8Ih4 -GuyFG3JIhrURZU89CYW0D3Rlc3QuZ251dGxzLm9yZ4hfBBMRAgAgBQJFyJ5YAhsD -BgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQrl+tPl0dFNhXHwCfXmQ5oZOWvZOC -v87vmucRcG/UlrIAl05A5ziEJrnmTx4OVFYCp2s3JCudAj0ERciedRAIAKM4vVZP -UeSNgLUXKleIy36c4d3ogWElLeFN2S8X3ywMrxjFFwOzgExhobiqYTUC7sdewBqU -TeJ7oJyFjCxPWpMq8V6oP9euVBSm8MFbJaaOysz7xFx5jmA4FRKktLGTVppCXjD3 -QlbA9sInz5KHLn1LtlMfApq709ZxIKIlbpFI6ZSTq2pUAXbD5CBJPCzFbRdyFtmh -whBE9MqydmNqtIv7tSuG8UlIuREqzdFDWlk+8LQnoHcFpTm8CRIMHLv/GLYzJ3wS -POeYF1XSYkS3Tib5FPuuSP45z0BuUBCEDMHi7cv/hh5F1TdscOThlCK8iD1B4vPh -AxjhqqMajVDE878AAwUH/20z3NM96B6fl4bI9yT/wDAkkFfO6XiqhWBJ0SLm7DeG -OLU8FYxJEQN7Obvqkzb3cqRNbbwBJnbKWgi/xCnzAhJbXFt1lMKlCFC0NmdLfbQb -lXzBB9WdY42+vCDlcEyWM/ogbZm6uVsaKpXOcKDgg1S/amikeoTrgLpE5ei98EC/ -ucxgROJOVHy3/FFSRGuGU6rKDIt4skABTv4e1s6lAEx92kEs/baYpSe+tMGnQ4XP -knbdmtFunAvkgZiWlP8pvbHk3dup8lhxvtNxvspwh3+aQQFx4XwjYQNJTL+Yd3iR -AjRJXAodLGBpqNfYzs255UUhikaq35TrTmMIUFyvcv4AAVEB20AMyHQcPwy7QnEQ -NooBEWWgCbp2MOEvZ5vcFeogSFA5VWCNe6UGXlq6EJOISQQYEQIACQUCRciedQIb -DAAKCRCuX60+XR0U2Aw4AJ0fIntwSCVnEbxskKgcrwfIpIrtUQCfUmOoEmaWa5iU -I3zib+LCy0UXtyo= -=n6h4 ------END PGP PRIVATE KEY BLOCK----- diff --git a/doc/credentials/openpgp-server.bin b/doc/credentials/openpgp-server.bin deleted file mode 100644 index 2774709697..0000000000 Binary files a/doc/credentials/openpgp-server.bin and /dev/null differ diff --git a/doc/credentials/openpgp-server.txt b/doc/credentials/openpgp-server.txt deleted file mode 100644 index eae6bf5443..0000000000 --- a/doc/credentials/openpgp-server.txt +++ /dev/null @@ -1,29 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.6 (GNU/Linux) - -mQGiBEXInlgRBAD0teb6ohIlchkHcFlmmvtVW1KXexlDfXExf8T+fOz5z354GPOX -sDq98ztCEE3hnPEOFj4NT0X3nEtrvLkhmZqrDHSbuJACB4qxeHwEbGFx7OIDW8+u -4sKxpaza1GVf1NQ7VIaQiXaGHy8Esn9SW7oNhK6z5l4TIRlm3OBt3cxU3wCgjnnO -jpGJeeo0OnZzSH+xsNLJQEcEAOmUc+7N9OhpT/gqddIgzYRr/FD0Ad6HBfABol6Q -wWCapzIxggnZJ9i+lHujpcA8idtrBU/DGhkGtW95QaHwQ8d5SvetM7Wc/xoHEP3o -HGvSGoXtfqlofastcC7eso39EBD10cpIB+gUmhe1MpaXm7A6m+KJO+2CkqE1vMkc -tmKHBACzDRrWgkV+AtGWKl3ge9RkYHKxAPc0FBrpzDrvmvvNMaIme2u/+WP/xa4T -nTjgys+pfeplHVfCO/n6nKWrVepMPE0+ZeNWzY6CsfhL7VjSN99vm7qzNHswBiJS -gCSwJXRmQcJcS9hxqLciUyVEB32zPqX24QHnsyPYaSCzEBgOnLQPdGVzdC5nbnV0 -bHMub3JniF8EExECACAFAkXInlgCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAK -CRCuX60+XR0U2FcfAJ9eZDmhk5a9k4K/zu+a5xFwb9SWsgCXTkDnOIQmueZPHg5U -VgKnazckK7kCDQRFyJ51EAgAozi9Vk9R5I2AtRcqV4jLfpzh3eiBYSUt4U3ZLxff -LAyvGMUXA7OATGGhuKphNQLux17AGpRN4nugnIWMLE9akyrxXqg/165UFKbwwVsl -po7KzPvEXHmOYDgVEqS0sZNWmkJeMPdCVsD2wifPkocufUu2Ux8CmrvT1nEgoiVu -kUjplJOralQBdsPkIEk8LMVtF3IW2aHCEET0yrJ2Y2q0i/u1K4bxSUi5ESrN0UNa -WT7wtCegdwWlObwJEgwcu/8YtjMnfBI855gXVdJiRLdOJvkU+65I/jnPQG5QEIQM -weLty/+GHkXVN2xw5OGUIryIPUHi8+EDGOGqoxqNUMTzvwADBQf/bTPc0z3oHp+X -hsj3JP/AMCSQV87peKqFYEnRIubsN4Y4tTwVjEkRA3s5u+qTNvdypE1tvAEmdspa -CL/EKfMCEltcW3WUwqUIULQ2Z0t9tBuVfMEH1Z1jjb68IOVwTJYz+iBtmbq5Wxoq -lc5woOCDVL9qaKR6hOuAukTl6L3wQL+5zGBE4k5UfLf8UVJEa4ZTqsoMi3iyQAFO -/h7WzqUATH3aQSz9tpilJ760wadDhc+Sdt2a0W6cC+SBmJaU/ym9seTd26nyWHG+ -03G+ynCHf5pBAXHhfCNhA0lMv5h3eJECNElcCh0sYGmo19jOzbnlRSGKRqrflOtO -YwhQXK9y/ohJBBgRAgAJBQJFyJ51AhsMAAoJEK5frT5dHRTYDDgAn2bLaS5n3Xy8 -Z/V2Me1st/9pqPfZAJ4+9YBnyjCq/0vosIoZabi+s92m7g== -=NkXV ------END PGP PUBLIC KEY BLOCK----- diff --git a/doc/credentials/openpgp/Makefile.am b/doc/credentials/openpgp/Makefile.am deleted file mode 100644 index d462c0c0c8..0000000000 --- a/doc/credentials/openpgp/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -EXTRA_DIST = pub.asc sec.asc cli_pub.asc cli_ring.gpg cli_sec.asc cli_ring.asc diff --git a/doc/credentials/openpgp/cli_pub.asc b/doc/credentials/openpgp/cli_pub.asc deleted file mode 100644 index 0ab058ce10..0000000000 --- a/doc/credentials/openpgp/cli_pub.asc +++ /dev/null @@ -1,18 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.0.6 (GNU/Linux) -Comment: For info see http://www.gnupg.org - -mQGiBDxnlY0RBACAsWUhi/goBvpvTBgL8fFPwBAuD04VYFEtC7+4pBp6kFsHjUR7 -TTUkBsOk2PvMHrDdv0+C4x2CH8YGP1e+O0f2yLWk8Uu+kkF12yiqbbvDEiCdeJT6 -c3vIstY8vJ9Jso5g/LB8Xggq88R7jXFS3hH+WC5v/6P6SARfzXl457cVewCgvxSf -Gsm9mFospJ0B3RGyg5MB0d8D/RQQryJCGdR2nLe4VfctPL2QBD/1XhtubqEbetaV -PxssqrJdA+eplBRT7UHokSBahM8gmSmNuSrLDujPfEtaMg6YIkB+Kq0VeJLE0cXT -ZIH29KJlI/qk1xG4K7D6B0cKaHC/L4BIoKcQLJzfTIPw3frS4jVeNaQZNHSVqZ8/ -VmOMA/9rkNtccQ4RVd9WTFoHKvT4vfiISEOIzKGmcBY9Hymq7MCci3mNe4CDImkv -ZgnjDlJAM91CX1ODthPLBqvyhnMhhxDnaDl4Nh42uPMSr9JEW2IwoIbFne10ihGT -O4lBS1C28UfSGEMm/8JBMtxAjbYy3BYzUtCMA+bGBG6Voe5i5LQlRHIuIFdobyAo -Tm8gY29tbWVudHMpIDx3aG9Ad2hvaXMub3JnPohdBBMRAgAdBQI8Z5WNBQkDwmcA -BQsHCgMEAxUDAgMWAgECF4AACgkQNRRc6qfZPD+WWACfeJnLyfbpTDB7mDh3aATb -+0PXz28AoKRdApBVM6Bty+vWyXH6HfF6ZTj+ -=m8dH ------END PGP PUBLIC KEY BLOCK----- diff --git a/doc/credentials/openpgp/cli_ring.asc b/doc/credentials/openpgp/cli_ring.asc deleted file mode 100644 index 3726de51af..0000000000 --- a/doc/credentials/openpgp/cli_ring.asc +++ /dev/null @@ -1,36 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mQGiBDxnlY0RBACAsWUhi/goBvpvTBgL8fFPwBAuD04VYFEtC7+4pBp6kFsHjUR7 -TTUkBsOk2PvMHrDdv0+C4x2CH8YGP1e+O0f2yLWk8Uu+kkF12yiqbbvDEiCdeJT6 -c3vIstY8vJ9Jso5g/LB8Xggq88R7jXFS3hH+WC5v/6P6SARfzXl457cVewCgvxSf -Gsm9mFospJ0B3RGyg5MB0d8D/RQQryJCGdR2nLe4VfctPL2QBD/1XhtubqEbetaV -PxssqrJdA+eplBRT7UHokSBahM8gmSmNuSrLDujPfEtaMg6YIkB+Kq0VeJLE0cXT -ZIH29KJlI/qk1xG4K7D6B0cKaHC/L4BIoKcQLJzfTIPw3frS4jVeNaQZNHSVqZ8/ -VmOMA/9rkNtccQ4RVd9WTFoHKvT4vfiISEOIzKGmcBY9Hymq7MCci3mNe4CDImkv -ZgnjDlJAM91CX1ODthPLBqvyhnMhhxDnaDl4Nh42uPMSr9JEW2IwoIbFne10ihGT -O4lBS1C28UfSGEMm/8JBMtxAjbYy3BYzUtCMA+bGBG6Voe5i5LQlRHIuIFdobyAo -Tm8gY29tbWVudHMpIDx3aG9Ad2hvaXMub3JnPohdBBMRAgAdBQI8Z5WNBQkDwmcA -BQsHCgMEAxUDAgMWAgECF4AACgkQNRRc6qfZPD+WWACfeJnLyfbpTDB7mDh3aATb -+0PXz28AoKRdApBVM6Bty+vWyXH6HfF6ZTj+mQGiBDxKxWwRBADnLna2Lu+po71Z -QJMpJBgFDALXAp1sogZu/DTIYDhifGQ+saZSp68dN89G/FBaweDGmbN4lbS8s+U1 -Qf/aR2bWFowriq/WqyJGbQbRgDTV2saY5pk7pbNQ/4IuHNhwKnURTotzprCcs7k8 -5E27UWybtflbtmYYhgKgoURyNsBljwCgj1teeNhfeSzCBy+UdGRXJvtNk3MD/jV4 -1onWYG6RGOn5pwQrljzyPz2PE3eic8Dwl02/RLPKvL4U3WRBJVWGPjmpxidmLXes -NmYq5El5LDJi0/EumDKnVlMJ1nugrk3yX17aCTcFatW+ifQGnr1+x2zkMkQd9dUv -/9BtOeX2HjaUe2mKd8tiq4HkpBIr+QUGcdmUbIZeBADQYUN6lk3eMYgYwrJN4Ajm -AJa2DbimhLhag40Rn8kwMRiJrVejuSf0SPhOslPGI+2nO0L/eLzmOmpTHXWmTOhU -BROAjp9bEM4HXTQXuAEWSRixMdNUTIdlqOy5lx9hoJ/HPVCYBhBrWXfSEcsOHQTQ -7Za86Juuj3PYALBSE5y/jbRJT3BlbkNESyB0ZXN0IGtleSAoT25seSBpbnRlbmRl -ZCBmb3IgdGVzdCBwdXJwb3NlcyEpIDxvcGVuY2RrQGZvby1iYXIub3JnPohiBBMR -AgAaBQI8SsVsBQsHCgMEAxUDAgMWAgECHgECF4AAEgkQvVcs3MzAfDUHZUdQRwAB -AYHBAJwOEo2O1ER8bcvOYVDZzYbiDYRZpQCfZoFmLIDGqs8dLSvCBPCC/oDT26S5 -AQ0EPErFbxAEAOIBVlJgadBn0k9NcebThljgi+O/JGwa3OCNtpzY1FnB7TNXOEEH -mHVa/befF5fPAi5wx5YPEspoltJ8/SShHNMW3eH7zB6mFcXDH+xlbkZweMh1/FCb -HsuZyLVsLYdcUOIBi1sPo3hgbrZCWiUzgw9V/SHWSQFWFdSaHQnpUQ9fAAMFBADQ -va3kBDJ1hnXIfQcww2CYFGe64b62zBBaPB82a/2+oS43hFZRMji4rUFOUqKpZh0d -8dtrtfM/aQYWYQdVbIEyJDMLMJMtt8jMgiVnLXriSvJGl1DlObZh6mR10uA82NOD -jcSorEr9ITU2/j6W7J0K6mUWS1duAbN6jcqJ8rJX0IhOBBgRAgAGBQI8SsVvABIJ -EL1XLNzMwHw1B2VHUEcAAQF1ZgCfYB4fmeCwfHfmfz7soeGflGPTc2cAn2rGnrQR -mm/79Enn0VTYLgXUCGHb -=7B/E ------END PGP PUBLIC KEY BLOCK----- diff --git a/doc/credentials/openpgp/cli_ring.gpg b/doc/credentials/openpgp/cli_ring.gpg deleted file mode 100644 index f78440407b..0000000000 Binary files a/doc/credentials/openpgp/cli_ring.gpg and /dev/null differ diff --git a/doc/credentials/openpgp/cli_sec.asc b/doc/credentials/openpgp/cli_sec.asc deleted file mode 100644 index 49348ca5b8..0000000000 --- a/doc/credentials/openpgp/cli_sec.asc +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- -Version: GnuPG v1.0.6 (GNU/Linux) -Comment: For info see http://www.gnupg.org - -lQG7BDxnlY0RBACAsWUhi/goBvpvTBgL8fFPwBAuD04VYFEtC7+4pBp6kFsHjUR7 -TTUkBsOk2PvMHrDdv0+C4x2CH8YGP1e+O0f2yLWk8Uu+kkF12yiqbbvDEiCdeJT6 -c3vIstY8vJ9Jso5g/LB8Xggq88R7jXFS3hH+WC5v/6P6SARfzXl457cVewCgvxSf -Gsm9mFospJ0B3RGyg5MB0d8D/RQQryJCGdR2nLe4VfctPL2QBD/1XhtubqEbetaV -PxssqrJdA+eplBRT7UHokSBahM8gmSmNuSrLDujPfEtaMg6YIkB+Kq0VeJLE0cXT -ZIH29KJlI/qk1xG4K7D6B0cKaHC/L4BIoKcQLJzfTIPw3frS4jVeNaQZNHSVqZ8/ -VmOMA/9rkNtccQ4RVd9WTFoHKvT4vfiISEOIzKGmcBY9Hymq7MCci3mNe4CDImkv -ZgnjDlJAM91CX1ODthPLBqvyhnMhhxDnaDl4Nh42uPMSr9JEW2IwoIbFne10ihGT -O4lBS1C28UfSGEMm/8JBMtxAjbYy3BYzUtCMA+bGBG6Voe5i5AAAnjMCLPrxGdgE -I0xXdwCQ4Sh2diNECAj9JiM6RFNBX2ZhY3RvcjoAAK9cun7/j4AUMmdvIy5UMJph -A6eq6atP/SYjOkRTQV9mYWN0b3I6AACvVjUuomodmmyCggPHWdeVSzpX3ODEHf0m -IzpEU0FfZmFjdG9yOgAAr2Iv9H2aSH+vJKGYW/BO4ehQwwFck7u0JURyLiBXaG8g -KE5vIGNvbW1lbnRzKSA8d2hvQHdob2lzLm9yZz6IXQQTEQIAHQUCPGeVjQUJA8Jn -AAULBwoDBAMVAwIDFgIBAheAAAoJEDUUXOqn2Tw/llgAnjBPQdWxIqBCQGlcI2K/ -gLkZR1ARAJ9kaAeJYERc0bV/vlm0ot7UDdr+bQ== -=4M0W ------END PGP PRIVATE KEY BLOCK----- diff --git a/doc/credentials/openpgp/pub.asc b/doc/credentials/openpgp/pub.asc deleted file mode 100644 index a5e795b332..0000000000 --- a/doc/credentials/openpgp/pub.asc +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.6 (GNU/Linux) - -mNEER2PogwEGINdIR4u5PR4SwADWwj/ztgtoi7XVbmlfbQTHpBYFxTSC88pISSNy -V/rgnlqunYP77F7aHL4KUReN3v9sKw01xSGEfox/JmlqUUg6CVvTjdeLfkuVIBnH -j+2KMlaxezp7IxtPaTXpXcSf8iOuVq7UX7p6tKbppKXO5GgmfA88VUVvGBs1/PQp -WKQdGrj+6I3RRmDN/hna1jGU/N23230Hbx+bu7g9cviiSh10ri7rdDhVJ67tRkRG -Usy3XO6dWC7EmzZlEO8AEQEAAbQQdGVzdDMuZ251dGxzLm9yZ4kBAAQTAQIAJgUC -R2PogwIbAwUJCWYBgAYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEKAh4/gImZBR -96QGH3E3zynETuQS3++hGMvMXq2mDJeT2e8964y/ifIOBpr2K2isuLYnrtGKyxi+ -ZptyHv6ymR3bDvio50cjnoT/WK1onosOJvtijGBS+U/ooq3im7ExpeQYXc/zpYsX -OmB5m6BvdomUp2PMqdxsmOPoaRkSYx5R2Rlo/z3csodl6sp3k465Y/jg7L4gkxDz -XJM+CS1xMhcOF0gBhppqLnG67x0ow847Pydstzkw0sOqedkLPuScaHNnlAWQ7QH6 -mbbpqHJwekS4jQRHiKV8AQQA0iZ81WXypLI4ZE2+hYfBCnfMVfQF/vPgvASxhwri -GDa9Zc2f/VfakfNiwZgHH6iCeppHBiP2jljnbuOsL6f1R+0FsnyTVwHbuEU7IU2y -+J0/s0z3wcx9sx8T7brP5z5F2hdagBsD9YFGCifHDAEew4mmAisY0i2QHVIuXJFj -4RMAEQEAAYkBhwQYAQIADwUCR4ilfAIbAgUJEOrPgACoCRCgIeP4CJmQUZ0gBBkB -AgAGBQJHiKV8AAoJEIN7b7QuD+F2AEcEAKAjhO9kSOE8UuwEOKlwsWL9LUUSkHJj -c/ca0asLAerzrHsldRAcwCbWkVxBBHySw2CLFjzpgdXhwRtsytMgHaapfAPbinAW -jCPIEJx2gDZeZnTgi4DVbZn5E3UzHGyL69MEoXr5t+vpiemQFd/nGD+h/Q2A76od -gvAryRvS1Soj8bcGHjUflayXGOSvaD8P2V5Vz0hS82QZcqWxD8qUBqbcB8atokmO -IYxhKyRmO58T5Ma+iaxBTUIwee+pBYDgdH6E2dh9xLlwwzZKaCcIRCQcObkLsMVo -fZJo+m0Xf8zI57NeQF+hXJhW7lIrWgQVr8IVp/lgo76acLHfL/t1n0Nhg4r2srz2 -fpP2w5laQ0qImYLnZhGFHU+rJUyFaHfhD8/svN2LuZkO570pjV/K68EaHnEfk5b8 -jWu/euohwcCwf20M1kTo3Bg= -=Xjon ------END PGP PUBLIC KEY BLOCK----- diff --git a/doc/credentials/openpgp/sec.asc b/doc/credentials/openpgp/sec.asc deleted file mode 100644 index d5dfd3b6de..0000000000 --- a/doc/credentials/openpgp/sec.asc +++ /dev/null @@ -1,44 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- -Version: GnuPG v1.4.6 (GNU/Linux) - -lQLGBEdj6IMBBiDXSEeLuT0eEsAA1sI/87YLaIu11W5pX20Ex6QWBcU0gvPKSEkj -clf64J5arp2D++xe2hy+ClEXjd7/bCsNNcUhhH6MfyZpalFIOglb043Xi35LlSAZ -x4/tijJWsXs6eyMbT2k16V3En/Ijrlau1F+6erSm6aSlzuRoJnwPPFVFbxgbNfz0 -KVikHRq4/uiN0UZgzf4Z2tYxlPzdt9t9B28fm7u4PXL4okoddK4u63Q4VSeu7UZE -RlLMt1zunVguxJs2ZRDvABEBAAEABhwMx6crpb75ko5gXl9gsYSMj9O/YyCvU7Fi -l8FnZ0dKMz3qs7jXyFlttLjh1DzYkXN6PAN5yp3+wnbK/e5eVeNSdo2WpJOwrVWO -7pcQovHoKklAjmU98olaRhpv6BBTK+0tGUFaRrmrrYuz2xnwf3+kIpt4ahYW2dr9 -B+/pvBSVC/sv2+3PEQSsXlWCYVgkQ7WBN4GQdyjjxhQpcWdf8Z6unx4zuS3s7GGM -4WaDxmDNCFlTGdrKPQeogtS3LVF9OiRCOvIlAxDmDvnC3zAwO/IvDUHFED9x9hmK -MeVwCg8rwDMptVYN2hm+bjNzjV4pimUVd+w7edjEky0Jd/6tTH01CBUWxs9Pfup2 -cQ9zkYcVz1bwcoqeyRzFCJgi6PiVT38QFEvyusoVkwMQ747D6p7y+R52MEcIvcLb -lBXhRviz3rW+Sch4+ohUPvBU41saM5B6UcOmhdPfdvPriI4qXwFxusGWt98NN3aW -Ns2/L9kMX/SWnN6Elfj5hrrExDZ2CE60uuvfj+O/uXfO8LUDENE4vQrC399KLbJw -uCaqjqLysYA9EY/Nv8RFGkk1UM4ViW8v1/95D95F9WqochSYH8Phr3br0chDxofb -rnm6dUPE8uiriNaKWdoiUNSuvumh9lVixmRI923+4imu3scq+rlJAZ20EHRlc3Qz -LmdudXRscy5vcmeJAQAEEwECACYFAkdj6IMCGwMFCQlmAYAGCwkIBwMCBBUCCAME -FgIDAQIeAQIXgAAKCRCgIeP4CJmQUfekBh9xN88pxE7kEt/voRjLzF6tpgyXk9nv -PeuMv4nyDgaa9itorLi2J67RissYvmabch7+spkd2w74qOdHI56E/1itaJ6LDib7 -YoxgUvlP6KKt4puxMaXkGF3P86WLFzpgeZugb3aJlKdjzKncbJjj6GkZEmMeUdkZ -aP893LKHZerKd5OOuWP44Oy+IJMQ81yTPgktcTIXDhdIAYaaai5xuu8dKMPOOz8n -bLc5MNLDqnnZCz7knGhzZ5QFkO0B+pm26ahycHpEnQHXBEeIpXwBBADSJnzVZfKk -sjhkTb6Fh8EKd8xV9AX+8+C8BLGHCuIYNr1lzZ/9V9qR82LBmAcfqIJ6mkcGI/aO -WOdu46wvp/VH7QWyfJNXAdu4RTshTbL4nT+zTPfBzH2zHxPtus/nPkXaF1qAGwP1 -gUYKJ8cMAR7DiaYCKxjSLZAdUi5ckWPhEwARAQABAAP3QKGVoNi52HXEN3ttUCyB -Q1CDurh0MLDQoHomY3MGfI4VByk2YKMb2el4IJqyHrUbBYjTpHY31W2CSIdWfoTU -DIik49CQaUpR13dJXEiG4d+nyETFutEalTQI4hMjABD9l1XvZP7Ll3YWmqN8Cam5 -JY23YAy2Noqbc3AcEut4+QIA1zcv8EU1QVqOwjSybRdm6HKK/A2bMqnITeUR/ikm -IuU4lhijm/d1qS6ZBehRvvYa9MY4V7BGEQLWSlyc5aYJ/wIA+fmRv0lHSs78QSUg -uRbNv6Aa6CXEOXmG+TpIaf/RWrPmBpdG8AROBVo1wmwG8oQaIjeX3RjKXfL3HTDD -CxNg7QIA06tApdo2j1gr3IrroUwQ7yvi56ELB1Lv+W3WLN8lzCfQ6Fs+7IJRrC2R -0uzLMGOsSORGAFIbAuLIMpc6rHCeS50hiQGHBBgBAgAPBQJHiKV8AhsCBQkQ6s+A -AKgJEKAh4/gImZBRnSAEGQECAAYFAkeIpXwACgkQg3tvtC4P4XYARwQAoCOE72RI -4TxS7AQ4qXCxYv0tRRKQcmNz9xrRqwsB6vOseyV1EBzAJtaRXEEEfJLDYIsWPOmB -1eHBG2zK0yAdpql8A9uKcBaMI8gQnHaANl5mdOCLgNVtmfkTdTMcbIvr0wShevm3 -6+mJ6ZAV3+cYP6H9DYDvqh2C8CvJG9LVKiPxtwYeNR+VrJcY5K9oPw/ZXlXPSFLz -ZBlypbEPypQGptwHxq2iSY4hjGErJGY7nxPkxr6JrEFNQjB576kFgOB0foTZ2H3E -uXDDNkpoJwhEJBw5uQuwxWh9kmj6bRd/zMjns15AX6FcmFbuUitaBBWvwhWn+WCj -vppwsd8v+3WfQ2GDivayvPZ+k/bDmVpDSoiZgudmEYUdT6slTIVod+EPz+y83Yu5 -mQ7nvSmNX8rrwRoecR+TlvyNa7966iHBwLB/bQzWROjcGA== -=mZnW ------END PGP PRIVATE KEY BLOCK----- diff --git a/doc/credentials/psk-passwd.txt b/doc/credentials/psk-passwd.txt index 40ac30efac..8ebe849d35 100644 --- a/doc/credentials/psk-passwd.txt +++ b/doc/credentials/psk-passwd.txt @@ -1 +1,3 @@ jas:9e32cf7786321a828ef7668f09fb35db +test:8a7759b3f26983c453e448060bde8981 +test32:8a7759b3f26983c453e448060bde89818a7759b3f26983c453e448060bde8981 diff --git a/doc/credentials/x509/Makefile.am b/doc/credentials/x509/Makefile.am index 979b3f2bb6..c12f80a242 100644 --- a/doc/credentials/x509/Makefile.am +++ b/doc/credentials/x509/Makefile.am @@ -1,3 +1,5 @@ EXTRA_DIST = ca-key.pem ca.pem cert-rsa.pem key-rsa.pem clikey.pem clicert.pem \ clicert-dsa.pem clikey-dsa.pem cert-dsa.pem key-dsa.pem cert-ecc.pem key-ecc.pem \ - cert-ecc-sign.pem + cert-ecc-sign.pem key-rsa-pss.pem cert-rsa-pss.pem example.com-cert.pem \ + example.com-key.pem \ + key-gost01.pem cert-gost01.pem key-gost12.pem cert-gost12.pem diff --git a/doc/credentials/x509/cert-ed25519.pem b/doc/credentials/x509/cert-ed25519.pem new file mode 100644 index 0000000000..4e82cdcba9 --- /dev/null +++ b/doc/credentials/x509/cert-ed25519.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICZzCCAR+gAwIBAgIIWtnbDCIn9iYwDQYJKoZIhvcNAQELBQAwGTEXMBUGA1UE +AxMOR251VExTIFRlc3QgQ0EwIBcNMTgwNDIwMTIyMDI5WhgPOTk5OTEyMzEyMzU5 +NTlaMAAwKjAFBgMrZXADIQDzBfvpcyyM38gl9L9AeyyGm2Vmf3Xj1vR3sSG1t7WJ +h6OBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAA +ATATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQW +BBTjUkpznRi86b98TXHIvGYiiqs8qjAfBgNVHSMEGDAWgBRNVrdqAFjxZ5L0pnVV +G45TAQPvzzANBgkqhkiG9w0BAQsFAAOCATEAkltD//26CvEfkpjCu+2Ol8hbg6/U +1saz3vyBx+5QAaaAu8bTxj2b1LmnSgmrGf/N1JmEA2QDb3Cal8lXlVgt02MIXyAk +SvUMyc5HiOWe6Km0+LW3pb2m+ADDDlHIWQ+j/3ot3DHClXwfqVT+QUnDgvLLKUWk +vKGsAHIzIMbuRzA+Pqdkrx57cGlLdgw52PhKEYfalOEPSgxZNrYDW1cMO/0ls4+d +WWKypJy+XE5svImmO2Zh9QvSeYQMewJXv94vYjhcH0dVZ2aFywdb62wtwEUR4JnP +0FwJOCEJiY4cKBR0IyRBKl56ZKPYn8Gjxl3snwhdTsTzw0aY6TrjnZL3u3W1SSwK +mtJv2hGr9szpuS0UiY+pZgYQdwY8vNVMVhsKxevyY8nllPAl6OMJM0fc/A== +-----END CERTIFICATE----- diff --git a/doc/credentials/x509/cert-ed448.pem b/doc/credentials/x509/cert-ed448.pem new file mode 100644 index 0000000000..5633c1c2a7 --- /dev/null +++ b/doc/credentials/x509/cert-ed448.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIIChjCCAT6gAwIBAgIUcXZDPNExk2Hd9zkOd9c1QTud7Y0wDQYJKoZIhvcNAQEL +BQAwGTEXMBUGA1UEAxMOR251VExTIFRlc3QgQ0EwIBcNMTkwNDI0MTQ1NjU4WhgP +OTk5OTEyMzEyMzU5NTlaMAAwQzAFBgMrZXEDOgCa3d5h9mjy28CsJIdK20eiqmrV +n6iIvcXUMHBe0HlqjDMHgrUYYHhb5j/Xmxx89Y/XKLK/PXc5UQCjgY0wgYowDAYD +VR0TAQH/BAIwADAUBgNVHREEDTALgglsb2NhbGhvc3QwEwYDVR0lBAwwCgYIKwYB +BQUHAwEwDwYDVR0PAQH/BAUDAweAADAdBgNVHQ4EFgQUYBo0B3El7CNa5XG8lewb +i5oZ3PswHwYDVR0jBBgwFoAUTVa3agBY8WeS9KZ1VRuOUwED788wDQYJKoZIhvcN +AQELBQADggExAC/syIXeeAirbS7Xwp8E4btQc/z1FbBIpTkMm+Bv9n/9SrIIoifn +aBs3KN7UGaTSdv8dpgIGhz0eB/x8i/fceBDJxmaT0xk8pne37uMdFdVZKNnZf0zC +bnkAr93cYWjrLpY53dZMmxBpTQWE11wDY/HjbXnYLrVAJ7g/l7Xql1t4XZ9zAPST +Y5kTNvkh74LcFvSallzpzniFSH9b/32O3rVwgSQ5jtKqYfNrVGGsJ/Yf7DXmItK4 +7x2UR44pcIcunzZTuuhPl6LNelInuPovoJp8zsHecA8se2oYO3I0fBF3CpwdLBjE +NKdYWrdY/y982nCqeKSJBlXuv1KJvxgKbwhRokdZlgbZDgFyWz9+dOlqL1QApB44 +A2ygsrT4MxZMGwwAp32EozNEMZZQmpnySt0= +-----END CERTIFICATE----- diff --git a/doc/credentials/x509/cert-gost01.pem b/doc/credentials/x509/cert-gost01.pem new file mode 100644 index 0000000000..91ee92c1d1 --- /dev/null +++ b/doc/credentials/x509/cert-gost01.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIICzzCCAYegAwIBAgIIWDz9jhh1DgAwDQYJKoZIhvcNAQELBQAwGTEXMBUGA1UE +AxMOR251VExTIFRlc3QgQ0EwIBcNMTYxMTI5MDQwMTE5WhgPOTk5OTEyMzEyMzU5 +NTlaMDUxMzAxBgNVBAMTKkdudVRMUyBUZXN0IHNlcnZlciAoR09TVCAyMDAxIGNl +cnRpZmljYXRlKTBjMBwGBiqFAwICEzASBgcqhQMCAiMBBgcqhQMCAh4BA0MABEC5 +V8s59a1LRKeQBv3Zknci/H581sZjfQavcTxe/rzVVDo0NtL6RjtY4fv0FcReVrap +HyrcsEoVgRlYtb2oP7ruo4GNMIGKMAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0wC4IJ +bG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMHgAAw +HQYDVR0OBBYEFPdNK/tTqJobyllIdBOSU0aVsZa4MB8GA1UdIwQYMBaAFE1Wt2oA +WPFnkvSmdVUbjlMBA+/PMA0GCSqGSIb3DQEBCwUAA4IBMQByEmQuG1vAVeEEPHxi +04P2dz7Vaw77QOXsKT3sungZpacGqFFB1ZgpxT6W0yriIa55grhTWRXnrCEWBFGE +eOQrg7qkgdwDEFdmjO5TBYhSrX8ykkq1trhSSTVBJkgweHsAVlbA+xhUMgu0FKyN +ViraCsbUh3QZSBTSUrQJpGQgdeBMiBfsf7rAo7ICQSdYhyc9lW7FZVwvX1Xvrjxq +W6G5XBdxAk7xPJxrpWzC/xkxK97ceCYSulGrgkYuFVWa66t3F0YtSYlQ1z0HqJh5 +yrkuxW1LS+f6gcxc/k1f/BZR1gxWMwME8kL3C9C1Ud+5wejKMVtT+/bPKZztoAPy +ik4r7vEu1WQDnepN5D0dQqzH7a/Xvy7ELOAKg0icKsHaHBX6OinLOOZeQ0xMQpjo +W411 +-----END CERTIFICATE----- diff --git a/doc/credentials/x509/cert-gost12.pem b/doc/credentials/x509/cert-gost12.pem new file mode 100644 index 0000000000..2b6f72ccac --- /dev/null +++ b/doc/credentials/x509/cert-gost12.pem @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDFzCCAc+gAwIBAgIIWDz9WwicqOswDQYJKoZIhvcNAQELBQAwGTEXMBUGA1UE +AxMOR251VExTIFRlc3QgQ0EwIBcNMTYxMTI5MDQwMDI5WhgPOTk5OTEyMzEyMzU5 +NTlaMDUxMzAxBgNVBAMTKkdudVRMUyBUZXN0IHNlcnZlciAoR09TVCAyMDEyIGNl +cnRpZmljYXRlKTCBqjAhBggqhQMHAQEBAjAVBgkqhQMHAQIBAgEGCCqFAwcBAQID +A4GEAASBgHrV5GYilkHQ75pNQH3H7XA0rFzLQU3cyiBXWa9GAajMmXCsEc96tLO8 +4inIoYd+pKXW5JFjpcKQP2RYWO8ozWiDcAipeNegdEFIj9YXGhlLkE9Ji5tLo3CQ +E/qmAXcG3/A4fnTPe8ONMcr1mNauvy2ZMR4GHMwngQnclHjxkA+po4GNMIGKMAwG +A1UdEwEB/wQCMAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFM3S8msevnnQj915hOMP +qlzJUzk0MB8GA1UdIwQYMBaAFE1Wt2oAWPFnkvSmdVUbjlMBA+/PMA0GCSqGSIb3 +DQEBCwUAA4IBMQBJV6tIOi08WYSTY26y5C+YytuMwYiEcSYQX0qEnTLroetO92UB +vlqvfR3LH/Dky7lal/gLdQ03Qiyam9uqOuPM+KUkveKdMEVus1pkqk7E450lXK27 +GEwbKtkGptwjdaVEmoUdha8Om9YsJpdccOaKVGf1XDrhVa0UPZmKDagLc8nkk8W4 +Gr5bE6QgxUfF7TUQIltM+5hhhRo2XWJJdANMSmcREj63rwTPcEyhqILms7a1LXlC +s/GED7P0KQYnuhzwrYhZgaD0/FMMljpHyIYuo7r0ELwb8wQNTIt3YfliOW131/fD +ZNgRZpxkTrEFw8TgOv78aSX60n6zeiRDGlQlFCmx1MHOEL/8jDDMEhKi1R47DZTX +rpz7EIn/e9OqO+E/B9tIIsEjuctNT/ylYjrG +-----END CERTIFICATE----- diff --git a/doc/credentials/x509/cert-rsa-pss.pem b/doc/credentials/x509/cert-rsa-pss.pem new file mode 100644 index 0000000000..a1a876acb4 --- /dev/null +++ b/doc/credentials/x509/cert-rsa-pss.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDWTCCAhGgAwIBAgIIWYl7hABP8u0wDQYJKoZIhvcNAQELBQAwGTEXMBUGA1UE +AxMOR251VExTIFRlc3QgQ0EwIBcNMTcwODA4MDg1MTE2WhgPOTk5OTEyMzEyMzU5 +NTlaMAAwggEgMAsGCSqGSIb3DQEBCgOCAQ8AMIIBCgKCAQEAndjwZ1p/m9BbCDGx +vn/yvqINoivwaCwrCQ94/ckTUhw+sE4n2MDU23tSxf/Ac8XMFUQg9M6W6RUGsG48 +W5gUs616kJVBRRtdQ7zQWsOfK4BxqN02Aq7RSAXy284sgdcP71nl9MR77/DDCdYk +UnWPu2N+mtnFfrPOT3TuAU6WZS38vCzz+qevnYFaAvvbU7th9cAEWDlaIPo7fQNx +8dC9ccVVk3nRaIitrFaLs3y0Y36eXDsLkR0g9qm6RjgHjVVWjhPPAb96SBj4LjMN +KgHRA6NtIUWB9tyyMrwcAaAp8hTZwFYjLS2tkJV0pYlfWvQSjl2I1swHrKNkheKX +R3L3eQIDAQABo4GNMIGKMAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0wC4IJbG9jYWxo +b3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMHgAAwHQYDVR0O +BBYEFGp+ppXHKlMtWeuML0b98cYOIdspMB8GA1UdIwQYMBaAFE1Wt2oAWPFnkvSm +dVUbjlMBA+/PMA0GCSqGSIb3DQEBCwUAA4IBMQBiV5IoE/3e/YjP7FVyjXGzp8Kz +Zalj5fByCAMIwQ2oiWYsPYegNvJzUs42QMZ/AdCZdpXjTeFxPoN4T9pO+65ONGBL +X2mPCRu8oB2q9BPoOTV2ENVfLJHQa507ouZsC3/7NePZW+PlPM774Yxdhbhbj+4E +J2Onl7yQeHrXLgnbO8GzDHfjvG3Z6Zmrv80YcfGSXPtSr2vKMlXTc7yU+OD1s685 +JjiCtIw2o5UmewJO4QpPPD2wcqwIQCXcCR2bVFZhf0/6nhfNQSFEK4qhJbOr2EY8 +zesxVU2YWGCDKluoFxwEEHTpmpNUDmW8lYN3Dh8Qd2luKRQaGZUKc9Ve+M9iAzu6 +2FmF6uGPfI0eu13eIe/Mas4zvFgYB43U5wWUGgNrvRASN9cyqVBqDIcLeuLj +-----END CERTIFICATE----- diff --git a/doc/credentials/x509/clicert-ed25519.pem b/doc/credentials/x509/clicert-ed25519.pem new file mode 100644 index 0000000000..9eec2effcf --- /dev/null +++ b/doc/credentials/x509/clicert-ed25519.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICYjCCARqgAwIBAgIIWtncvB3mnBcwDQYJKoZIhvcNAQELBQAwGTEXMBUGA1UE +AxMOR251VExTIFRlc3QgQ0EwIBcNMTgwNDIwMTIyNzQxWhgPOTk5OTEyMzEyMzU5 +NTlaMBkxFzAVBgNVBAMTDmVkMjU1MTkgY2xpZW50MCowBQYDK2VwAyEAt+PcuzkT +FosMmInrJTIh3lNYNGKvmeXYGanDrmPiqRGjdjB0MAwGA1UdEwEB/wQCMAAwEwYD +VR0lBAwwCgYIKwYBBQUHAwIwDwYDVR0PAQH/BAUDAweAADAdBgNVHQ4EFgQU5RHy +9vhAqVaB91nr7aHKyxW4984wHwYDVR0jBBgwFoAUTVa3agBY8WeS9KZ1VRuOUwED +788wDQYJKoZIhvcNAQELBQADggExAI8l0gXW5nUG3ykmvxvLlLkx2j3bMAuAG2jn +6CtmWBLFSoEYlCWlUWbrvK2GRZSFc5HGvhH/+GbM4ietrfmW+Xfgy2fDBp2pH4xh +iZgceDkCF9NI02+tyi/i+0iZxrobcfKoI2oK+WZ658+aM+IHVsLIIn5rs62sv5i3 +ak2ZBOHHYUzyszbzBz28eh169skl+pFd2RtySv+TwfX1m9e7jwiuXhFNtaegZvXa +yfiV3htHkVLf6eZiOSIAqni1cgStSc65kS3vswHxfSJkajYhQaAqSxaBv+/zbiJc +Le9sqsJGlWsXya2XL4bFhmct+pQ51F/oJ9iMmheZPWkYvRxznBcSBmLNCmg+LSX7 +NCsTPJ+wTg5jdK/1vIu1lV3pK3xj9DmuVyy+E8f+b2Kg7AuWYpI= +-----END CERTIFICATE----- diff --git a/doc/credentials/x509/clicert-ed448.pem b/doc/credentials/x509/clicert-ed448.pem new file mode 100644 index 0000000000..1040542fb7 --- /dev/null +++ b/doc/credentials/x509/clicert-ed448.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIIChzCCAT+gAwIBAgIUIQqoC9+469QU4oVvjLFOlEXj1dowDQYJKoZIhvcNAQEL +BQAwGTEXMBUGA1UEAxMOR251VExTIFRlc3QgQ0EwIBcNMjAwMTEzMTAyMzQwWhgP +OTk5OTEyMzEyMzU5NTlaMBkxFzAVBgNVBAMTDmVkMjU1MTkgY2xpZW50MEMwBQYD +K2VxAzoAbUzL5LCjH5iTXzngBUzpalQzDhz4lUsOpQvWiXG5/MusIzLkIDc8CrQK +xBQh6UgFC7nWVrQrQB4Ao3YwdDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsG +AQUFBwMCMA8GA1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFIsD4KoMJwNc+Cq6lEuC +tINDOBwDMB8GA1UdIwQYMBaAFE1Wt2oAWPFnkvSmdVUbjlMBA+/PMA0GCSqGSIb3 +DQEBCwUAA4IBMQAGt8G7QHCEsYix0G5keG8FRtbrTdPmb7FobrRp2Mxq8LOKykap +LuCQjenVO/KOYseFGvn76NSrOpMdVef2cu4rvBdDq7Mer6bgRABugBOBTlhfrTOF +6XjNkVjSIpOZjumD1rtYmeTGWGC437FtqDOgbVHBnIrOyxduLr6NrbtC7nnRr3px +DTmeUG0Pa+AG9jGH25tRug+AI7Si9wTFEE1UZJdsyyliL3Rm+Br/XnYaVN/p97hL +MUeOIgdHS6ejPiYL281zjN3H6uRbG/9Hzv2X52uAHnRWIzJDGVL1E1jt025txW/q +toEoBRGN30M6xf1YYy7hBt6DYgZAzTdljeKPMMO/6QpiGF678uc+xoVBMlTn1bhb +/rWiMWo03Ee1W8Ymx2H3Aj2maD8h9ovps2wx +-----END CERTIFICATE----- diff --git a/doc/credentials/x509/clicert-gost01.pem b/doc/credentials/x509/clicert-gost01.pem new file mode 100644 index 0000000000..e4e71da8b6 --- /dev/null +++ b/doc/credentials/x509/clicert-gost01.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICtjCCAW6gAwIBAgIIWD63xQjfjMkwDQYJKoZIhvcNAQELBQAwGTEXMBUGA1UE +AxMOR251VExTIFRlc3QgQ0EwIBcNMTYxMTMwMTEyODA1WhgPOTk5OTEyMzEyMzU5 +NTlaMBUxEzARBgNVBAMTCkNsaWVudCBubzQwYzAcBgYqhQMCAhMwEgYHKoUDAgIj +AwYHKoUDAgIeAQNDAARA95oquYmvSqn9iwzP1y7Lx8j26qOKEj1qH1HHFLk5HF1j +x4SWd4Wk7vNG0RWIEJNwraIm+YphAV1hs6ctAmw8RKOBlDCBkTAMBgNVHRMBAf8E +AjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMCMBsGA1UdEQQUMBKBEHRlc3RAZXhhbXBs +ZS5jb20wDwYDVR0PAQH/BAUDAweAADAdBgNVHQ4EFgQUssJK21ZcEfNQWXv1SJm2 +gUKbsuMwHwYDVR0jBBgwFoAUTVa3agBY8WeS9KZ1VRuOUwED788wDQYJKoZIhvcN +AQELBQADggExABAZgUjjPf8TdBPS/PntDDB22+raSqjRi7KK3P4iQfkYBXStYdQ3 +cBm86MvbvrAc2jTSpvfVviUmR9hiaCjs1y/3HRXWX+6XL3j0TndmaPAeUTdVeJZx +JBZRhiYYvd4ZsHQCfld7O4pGdDwZsqj5P2ku84BS9jA3/J9LIw7Ihe3ERxsz6V/V +1KvEZt1ub2hU0hq8M1e2bdQCD5B9oCF42FTmZa01S1trGHSCWXcSsL02nkLZGqAK +K49KXUfSho116/gift0nTr/smezZRY6dLBjxkHtB8WZakfQe61xwhOoItvdL60/l +jeMy61Afs+lGvy3Uw48wkoFKT416IyVvN2BPvXUhArMZ59X5L6SAfQrL7WO4W+9x +8Hb0XE45xDFSlLKdVbaV+mt/jE/+I+Q37Oc= +-----END CERTIFICATE----- diff --git a/doc/credentials/x509/clicert-gost12.pem b/doc/credentials/x509/clicert-gost12.pem new file mode 100644 index 0000000000..dccf56b391 --- /dev/null +++ b/doc/credentials/x509/clicert-gost12.pem @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIC/jCCAbagAwIBAgIIWD64LTQbMXgwDQYJKoZIhvcNAQELBQAwGTEXMBUGA1UE +AxMOR251VExTIFRlc3QgQ0EwIBcNMTYxMTMwMTEyOTUwWhgPOTk5OTEyMzEyMzU5 +NTlaMBUxEzARBgNVBAMTCkNsaWVudCBubzUwgaowIQYIKoUDBwEBAQIwFQYJKoUD +BwECAQIBBggqhQMHAQECAwOBhAAEgYBGj2SbfK0JnE6JJecjqpG1nJmdWrABsboS +YRNyxZjDzdQ7JswlwTewx9zmjbzpsnP/fVyZ3W+8IkTCPFizLQFkLLdrdWFuWpiB +vPTE0wSfIif33qrMvR1kmsxtsWcptXvGungyWmReNRhRx5Gmcpnn3XDMfA3VbPS0 +N4fXupcBzKOBlDCBkTAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMC +MBsGA1UdEQQUMBKBEHRlc3RAZXhhbXBsZS5jb20wDwYDVR0PAQH/BAUDAweAADAd +BgNVHQ4EFgQUPu0uSQQTvQ9WLoWaJdwHw14Eh0swHwYDVR0jBBgwFoAUTVa3agBY +8WeS9KZ1VRuOUwED788wDQYJKoZIhvcNAQELBQADggExABDT/c45PFXtR/VahEVj +pqWKCGbng1X2Y5snn44fgE7kDVi8h32h19wndfg294+4fKiL0XVvXZtUc46CMCuM +lvAT97YDN0Tf8Sg7PrDN1EEgE1M/rpN6kdAyvw9W8B5B66xb1K0PZIo4CnKVwn/T +ogQRk4qucEvky3Bcg/v7ZsK1ix9OuYB2M2rzhLpvn8/JIT3+6TmYrTbNgRiXoT3x +EV5V3uwg4kuh8XEDWd1vr9N2nyj1anM0m6D87HzYICCKpeXc/jij4i5c5XpxYeeC +UtAqsA1BGopQSWFpuheHsbODEScRdJLByweDZ9PbL3oEuKnWLyIYvzAAp3kP5Hg2 +MVp4a0BwbOmsUe5ciwFGVetcJ8DvBZzkqU49YOY4eCtnLAXpsE1nyLqfG/fXEpEQ +QS4= +-----END CERTIFICATE----- diff --git a/doc/credentials/x509/clicert-rsa-pss.pem b/doc/credentials/x509/clicert-rsa-pss.pem new file mode 100644 index 0000000000..de2d3a6a51 --- /dev/null +++ b/doc/credentials/x509/clicert-rsa-pss.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDUjCCAgqgAwIBAgIIWtncgib1CYYwDQYJKoZIhvcNAQELBQAwGTEXMBUGA1UE +AxMOR251VExTIFRlc3QgQ0EwIBcNMTgwNDIwMTIyNjQzWhgPOTk5OTEyMzEyMzU5 +NTlaMBExDzANBgNVBAMTBmNsaWVudDCCASAwCwYJKoZIhvcNAQEKA4IBDwAwggEK +AoIBAQCzjpTr0Kg/EjW9yVmSrCOlQ2R2s4RTnDsedZddp1JAc3Smjoe2M7ZD16LF +nu21VhLC3V7joX7xCeO4c719DD5naYNB9JKeepmZiBkPpuY4faDH2VSTkcQQOVBc +W48kcY4yglvVSpj/NtW5i+EYp4zJTo0e7xZMNIl5XjzgeRTcL65Ni5A3brmLKVop +T+Q3mn/UHDGN42T9pyba8vMCzP6EJ1oFK9ZZE5mvICXIAtx2fUqNv0BtdLRDcZNO +AgcN5uhvvZgDNIBxe25adUGZE5FIVbHnpzjB8r/3Xzev6eniANDhXmN/eyhHTE7E +VRGKQGLp8Bgjf+mc4cwNVdVUIuk5AgMBAAGjdjB0MAwGA1UdEwEB/wQCMAAwEwYD +VR0lBAwwCgYIKwYBBQUHAwIwDwYDVR0PAQH/BAUDAweAADAdBgNVHQ4EFgQUn90q +PpdDpwr6eLHYKX48ls2+Lm4wHwYDVR0jBBgwFoAUTVa3agBY8WeS9KZ1VRuOUwED +788wDQYJKoZIhvcNAQELBQADggExAJCDSEb3/qGFjS/OGiWtoVu+vwyQCfK4t/V5 +L25nPOHHZX3FuyKKomHqF+T+ueZt6fRxQ3uGyUie0MfIUcRP17hAtAsrzV+34uvP +05bmvOmKIvOeyWVfkqtuD2pXnzJXSfr3pcs6LwUyZIJedMCMVfL3T2C9YFQ/GmPk +O3pIK0SN+TkBRnBDbg5emiDCtqzgMnhjMN+dG0jpqt0+e1579QxRruLunbBX/4Xu +AgauWUskaJxqQsbomKFy1mLUgteDytykaEBhQdJwEPSH8USqWBxvV8p+VsE5Mrvu +bwHyP9dV4e6aZaAs25zWIJFOJCR2a2gbdoZvTufIRpj9IDBipQFVLYsrvDPQbehE +A8+7mm0NIzK8YCFEPEMSS7R/J0u/2ic57ePxWBGf/Elh6kOk2xc= +-----END CERTIFICATE----- diff --git a/doc/credentials/x509/clicert.pem b/doc/credentials/x509/clicert.pem index c6ce3616f5..e31f8105f6 100644 --- a/doc/credentials/x509/clicert.pem +++ b/doc/credentials/x509/clicert.pem @@ -1,19 +1,24 @@ -----BEGIN CERTIFICATE----- -MIIDAzCCAbugAwIBAgIETeC1gjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDEw5H -bnVUTFMgVGVzdCBDQTAeFw0xMTA1MjgwODQyNDNaFw0zODEwMTIwODQyNDVaMCYx -JDAiBgNVBAMTG0dudVRMUyBjbGllbnQgY2VydGlmaWNhdGUgMTCBnzANBgkqhkiG -9w0BAQEFAAOBjQAwgYkCgYEAyor4y6XppdhiDbAIpguscE8Y+OJi3MUvruvchVxY -NmfwHqVFPiL36lTnkVYINVh64fg2S7qAupMJ+2tmn1E88rayEyp4videBDWv2XBd -jK4UjPFmdTVq5r1JbY5GyUCMMlT7iMHkR9RAqkhcVagU/EcGGduxc0y/FhdSZ5Up -SrkCAwEAAaOBmTCBljAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMC -MCAGA1UdEQQZMBeBFXRlc3RjbGllbnRAZ251dGxzLm9yZzAPBgNVHQ8BAf8EBQMD -B4AAMB0GA1UdDgQWBBSk0m4tz242hrsQGy3e7zC6qXTeRDAfBgNVHSMEGDAWgBRN -VrdqAFjxZ5L0pnVVG45TAQPvzzANBgkqhkiG9w0BAQsFAAOCATEAO0CZBBN8Khw2 -NOAM3xx8A7m3Ki0PpODdNzfaTtNmgrDOb/z3/zi8EjRJnitnpI4mTAHoUoNryQth -ryDT8O9MWZEtR8vGNdZ7rgqph/pKPUpwlwLPAqh+28xakHBeRiXKR09SzmvqPpCi -vgAsdy2LMVXbIIo2jqv/qZRYVfrLnwzRYXND6qwjjjNDnZBFw2LzIHBkhMJESMVs -vfLuQOx7DAFooeSRva8A5kPWIyzrVizZROPDGIvMa1xfKxMeORgTsSdiDWK1nF8U -XHnYc8IPlLmDmjz2pbCOxS2BYrCfoEP/kCeFdvJIb20KhIj5rj/0dXEyFwnnja0v -q6uRAEIAGY8XBIf/5NbcimsqhUmmuzHhSjzJ6p4MltZlKSoKP1Pe4XjtBOTJopy4 -GXPLxLuxfQ== +MIIEBzCCAr+gAwIBAgIETeC1gjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDEw5H +bnVUTFMgVGVzdCBDQTAeFw0xMTAyMDEyMzAwMDBaFw00NjAzMjQwOTE5MjVaMCYx +JDAiBgNVBAMTG0dudVRMUyBjbGllbnQgY2VydGlmaWNhdGUgMTCCAaIwDQYJKoZI +hvcNAQEBBQADggGPADCCAYoCggGBANI/BXt91UnF78iyDDWWLr2viu5EgfrjPAdE +CDkw8gOYI2wJ3mFhdexPx+k9XPsQyQwqSXG2uFZSm/r7S++4EtqsZAjiQdMH1O/A +ZG1RdqBly1ibiHKUDQc5R75NOjD9IPXF+W0DptgKDk0Ayj6r03gW2mEKdH8/WyOt +SfZtTHbRzCO6q9C3Z+zUSJLo6Cis8WHkK5MWHhOWM+3D5CH4FuE2dn8nbKvclQSv +y3DfI3jTli7moGRnG+nl7Om+xLD+VC8/p1o83TZ37RbYfBC+e4QwOUY7aOOiijaX +EceNtIjOmXT2QoYd+opRZ02lD+DwIy8fyMbXJVVPCalA32fKdlF0bVKU57hdskQT +PBTY+KT4NNrOcQEA22np5CP6pE/PyqzcDy6GQIlWFprQMhN4mxvRDKeITg+i7tRz +FjmOyXY4tb3CE36zbOs33WGarzsgUODFbZxEhBvK8ZBlAYJu/1F7OL0ua6zst4d3 +LvaH1M+qWheZYRT3mlUGKxODRfpmpQIDAQABo4GZMIGWMAwGA1UdEwEB/wQCMAAw +EwYDVR0lBAwwCgYIKwYBBQUHAwIwIAYDVR0RBBkwF4EVdGVzdGNsaWVudEBnbnV0 +bHMub3JnMA8GA1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFKTSbi3PbjaGuxAbLd7v +MLqpdN5EMB8GA1UdIwQYMBaAFE1Wt2oAWPFnkvSmdVUbjlMBA+/PMA0GCSqGSIb3 +DQEBCwUAA4IBMQBDCpK+ejMoBFxk2FoGbWaYhSs2rIPrMpWP8zWIfieOsdhLfAvJ +E+BNrcCfqrVj02j2XTLzeQdDig2NTwCtrcsB0gas9fd+hoZWnFOSGM1yna2IuHTH +alDommWrICKvAONlK6V16NgZeGZ1PNWSuxquXFneC1WEVQLgseL5WyKEL8Qu/ftr +Lpp5k3PVpHdJaIihJHy583NPAR3wt3rU1E7Nlqr2hInyIpidoFuU8ExbIt5dc/W/ +FM4QuYSl3/PHzz9EbtHEl7F9uDUtuKBQ4VRVV+7AcNVJTA5M3jwwom6c6CWzbS5x +ypmozdKOyNV5+6yVx4SrRJyYApxIewWNuuWOMh5uJnbowq/p+K5EnXrOPVz8ooOv +dk7ZXwSib+EonzjB8UKyOd94mQfS6R/Y4PF2 -----END CERTIFICATE----- diff --git a/doc/credentials/x509/clikey-ed25519.pem b/doc/credentials/x509/clikey-ed25519.pem new file mode 100644 index 0000000000..40e1bc28dc --- /dev/null +++ b/doc/credentials/x509/clikey-ed25519.pem @@ -0,0 +1,25 @@ +Public Key Info: + Public Key Algorithm: EdDSA (Ed25519) + Key Security Level: High (256 bits) + +curve: Ed25519 +private key: + 83:a7:5b:8d:98:cc:ba:ef:ae:59:8e:ae:fe:6f:57:6c + 5d:1a:3c:21:86:bd:72:94:c9:9a:ae:0a:3b:bc:ac:36 + + +x: + b7:e3:dc:bb:39:13:16:8b:0c:98:89:eb:25:32:21:de + 53:58:34:62:af:99:e5:d8:19:a9:c3:ae:63:e2:a9:11 + + + +Public Key PIN: + pin-sha256:kL6CIOI8mjyxqGxH125s4iip1eA8AGbystEwB6Qop1o= +Public Key ID: + sha256:90be8220e23c9a3cb1a86c47d76e6ce228a9d5e03c0066f2b2d13007a428a75a + sha1:e511f2f6f840a95681f759ebeda1cacb15b8f7ce + +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIIOnW42YzLrvrlmOrv5vV2xdGjwhhr1ylMmargo7vKw2 +-----END PRIVATE KEY----- diff --git a/doc/credentials/x509/clikey-ed448.pem b/doc/credentials/x509/clikey-ed448.pem new file mode 100644 index 0000000000..3ccb704b5d --- /dev/null +++ b/doc/credentials/x509/clikey-ed448.pem @@ -0,0 +1,28 @@ +Public Key Info: + Public Key Algorithm: EdDSA (Ed448) + Key Security Level: Ultra (456 bits) + +curve: Ed448 +private key: + f0:c4:7b:22:dd:ef:95:e4:67:bb:d7:49:43:7f:12:56 + 44:7a:2c:53:a2:7d:1a:33:83:2f:2a:7c:54:aa:02:b5 + ed:ad:68:39:5b:6a:e6:3a:fc:9e:7f:de:08:47:a4:9c + f2:ec:bc:a1:2c:04:ad:71:fa: + +x: + 6d:4c:cb:e4:b0:a3:1f:98:93:5f:39:e0:05:4c:e9:6a + 54:33:0e:1c:f8:95:4b:0e:a5:0b:d6:89:71:b9:fc:cb + ac:23:32:e4:20:37:3c:0a:b4:0a:c4:14:21:e9:48:05 + 0b:b9:d6:56:b4:2b:40:1e:00: + + +Public Key PIN: + pin-sha256:2Rn8YAmzw19rFmh80LoUYPsqLZq7UQWpxDmGYO+J994= +Public Key ID: + sha256:d919fc6009b3c35f6b16687cd0ba1460fb2a2d9abb5105a9c4398660ef89f7de + sha1:8b03e0aa0c27035cf82aba944b82b48343381c03 + +-----BEGIN PRIVATE KEY----- +MEcCAQAwBQYDK2VxBDsEOfDEeyLd75XkZ7vXSUN/ElZEeixTon0aM4MvKnxUqgK1 +7a1oOVtq5jr8nn/eCEeknPLsvKEsBK1x+g== +-----END PRIVATE KEY----- diff --git a/doc/credentials/x509/clikey-gost01.pem b/doc/credentials/x509/clikey-gost01.pem new file mode 100644 index 0000000000..94bb51c461 --- /dev/null +++ b/doc/credentials/x509/clikey-gost01.pem @@ -0,0 +1,42 @@ +Public Key Info: + Public Key Algorithm: GOST R 34.10-2001 + Key Security Level: High (256 bits) + +curve: CryptoPro-C +digest: GOSTR341194 +private key: + 70:c1:b8:07:5a:3f:80:44:d7:e8:85:a6:53:2f:82:1c + 97:ec:e4:47:9d:96:18:21:31:58:6d:15:37:01:c7:d4 + + +x: + 5d:1c:39:b9:14:c7:51:1f:6a:3d:12:8a:a3:ea:f6:c8 + c7:cb:2e:d7:cf:0c:8b:fd:a9:4a:af:89:b9:2a:9a:f7 + + +y: + 44:3c:6c:02:2d:a7:b3:61:5d:01:61:8a:f9:26:a2:ad + 70:93:10:88:15:d1:46:f3:ee:a4:85:77:96:84:c7:63 + + + +Public Key ID: + sha256:C1:09:9D:FE:05:F2:77:97:09:A2:20:03:27:40:35:A8:BE:08:DC:22:4B:6B:4C:8F:72:57:FF:0D:C1:A8:E6:36 + sha1:B2:C2:4A:DB:56:5C:11:F3:50:59:7B:F5:48:99:B6:81:42:9B:B2:E3 +Public key's random art: ++--[CryptoPro-C]--+ +| ++oo...o.| +| .+oo.o=o.| +| ..+...oo.| +| .o .. | +| ...S | +| . o+ . | +| . o.. E | +| . +.. | +| o.. | ++-----------------+ + +-----BEGIN PRIVATE KEY----- +MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEEIgQg1McBNxVtWDEh +GJadR+TslxyCL1OmhejXRIA/Wge4wXA= +-----END PRIVATE KEY----- diff --git a/doc/credentials/x509/clikey-gost12.pem b/doc/credentials/x509/clikey-gost12.pem new file mode 100644 index 0000000000..b5ad09ce8f --- /dev/null +++ b/doc/credentials/x509/clikey-gost12.pem @@ -0,0 +1,49 @@ +Public Key Info: + Public Key Algorithm: GOST R 34.10-2012-512 + Key Security Level: Future (512 bits) + +curve: TC26-512-A +digest: STREEBOG-512 +private key: + 4b:b1:4d:85:91:bb:a4:6c:bd:10:6c:2c:34:b2:15:08 + 14:42:07:b1:54:cc:06:11:bd:f0:71:93:76:fe:33:48 + 81:75:2f:55:99:b6:e8:cc:e2:85:db:e7:19:2b:dd:74 + ba:f2:20:f1:d5:15:44:c3:13:ec:3f:bc:f4:98:c9:7d + + +x: + 64:01:2d:b3:58:3c:c2:44:22:bc:6f:dd:99:5c:7d:ff + 73:b2:e9:bc:8d:e6:dc:c7:b0:37:c1:25:cc:26:3b:d4 + cd:c3:98:c5:72:13:61:12:ba:b1:01:b0:5a:9d:99:9c + b5:91:aa:23:e7:25:89:4e:9c:09:ad:7c:9b:64:8f:46 + + +y: + 00:cc:01:97:ba:d7:87:37:b4:f4:6c:d5:0d:7c:cc:70 + dd:e7:99:72:a6:91:c7:51:18:35:5e:64:5a:32:78:ba + c6:7b:b5:29:67:b1:6d:cc:9a:64:1d:bd:cc:aa:de:f7 + 27:22:9f:04:d3:c4:f4:bc:81:98:5a:6e:61:75:6b:b7 + 2c: + + +Public Key ID: + sha256:BD:71:BD:0E:F6:4C:32:2D:11:AA:C5:56:9E:52:28:4F:A2:00:8D:70:29:F5:06:5A:1A:CB:B1:B5:F1:CB:C5:88 + sha1:3E:ED:2E:49:04:13:BD:0F:56:2E:85:9A:25:DC:07:C3:5E:04:87:4B +Public key's random art: ++--[TC26-512-A]---+ +| ..=+*o | +| = Eo= | +| X O | +| o O . | +| oS+ | +| .... | +| .o.. | +| oo | +| oo | ++-----------------+ + +-----BEGIN PRIVATE KEY----- +MGoCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwRCBEB9yZj0 +vD/sE8NEFdXxIPK6dN0rGefbheLM6LaZVS91gUgz/naTcfC9EQbMVLEHQhQIFbI0 +LGwQvWyku5GFTbFL +-----END PRIVATE KEY----- diff --git a/doc/credentials/x509/clikey-rsa-pss.pem b/doc/credentials/x509/clikey-rsa-pss.pem new file mode 100644 index 0000000000..e22878f40d --- /dev/null +++ b/doc/credentials/x509/clikey-rsa-pss.pem @@ -0,0 +1,139 @@ +Public Key Info: + Public Key Algorithm: RSA-PSS + Key Security Level: Medium (2048 bits) + +modulus: + 00:b3:8e:94:eb:d0:a8:3f:12:35:bd:c9:59:92:ac:23 + a5:43:64:76:b3:84:53:9c:3b:1e:75:97:5d:a7:52:40 + 73:74:a6:8e:87:b6:33:b6:43:d7:a2:c5:9e:ed:b5:56 + 12:c2:dd:5e:e3:a1:7e:f1:09:e3:b8:73:bd:7d:0c:3e + 67:69:83:41:f4:92:9e:7a:99:99:88:19:0f:a6:e6:38 + 7d:a0:c7:d9:54:93:91:c4:10:39:50:5c:5b:8f:24:71 + 8e:32:82:5b:d5:4a:98:ff:36:d5:b9:8b:e1:18:a7:8c + c9:4e:8d:1e:ef:16:4c:34:89:79:5e:3c:e0:79:14:dc + 2f:ae:4d:8b:90:37:6e:b9:8b:29:5a:29:4f:e4:37:9a + 7f:d4:1c:31:8d:e3:64:fd:a7:26:da:f2:f3:02:cc:fe + 84:27:5a:05:2b:d6:59:13:99:af:20:25:c8:02:dc:76 + 7d:4a:8d:bf:40:6d:74:b4:43:71:93:4e:02:07:0d:e6 + e8:6f:bd:98:03:34:80:71:7b:6e:5a:75:41:99:13:91 + 48:55:b1:e7:a7:38:c1:f2:bf:f7:5f:37:af:e9:e9:e2 + 00:d0:e1:5e:63:7f:7b:28:47:4c:4e:c4:55:11:8a:40 + 62:e9:f0:18:23:7f:e9:9c:e1:cc:0d:55:d5:54:22:e9 + 39: + +public exponent: + 01:00:01: + +private exponent: + 1a:c2:6a:11:46:d4:7c:29:d3:96:88:36:70:34:75:4f + 80:de:ad:0e:0d:ef:83:fe:0f:89:08:d8:ed:41:c5:d7 + 2f:10:4f:77:8c:40:e2:ad:f3:aa:0f:77:a3:07:7e:5f + 67:69:24:66:1a:40:57:dd:d8:71:39:d6:88:97:55:89 + 85:e1:08:e8:51:1d:8b:39:ee:f6:a8:7d:7b:ab:1d:ca + 23:37:05:7d:a4:4c:7a:02:cc:f7:db:fb:cd:36:6a:31 + fd:f7:0d:86:99:0a:7a:26:8a:ed:8f:1a:29:d9:76:92 + dd:c1:0c:56:27:65:8e:02:da:f2:9f:71:f8:b9:92:22 + cc:da:41:55:be:c8:3e:7d:1c:85:33:64:dd:92:14:0a + d9:a5:cb:a1:d7:2c:f1:d2:70:b2:a1:9b:7e:c5:5c:fd + 56:1e:46:3d:d3:bd:70:2f:8b:4d:ff:e3:e7:c1:a6:09 + bd:7e:47:07:52:ed:71:47:44:b5:30:fc:15:1c:5d:8f + 36:fd:bc:fa:c1:27:9c:97:ee:18:7a:50:80:83:d4:5c + a6:10:34:e1:c3:17:db:a0:99:41:bf:26:d8:34:4d:99 + 7a:30:af:b9:d7:d7:4d:f6:5f:8c:d6:c3:bc:a6:75:90 + 37:9b:d1:0c:3b:27:e6:3d:99:9f:53:9e:3f:a5:33:bd + + +prime1: + 00:e9:f6:a0:ca:5d:68:b5:b7:a4:46:17:7e:17:a5:57 + a7:06:a8:ae:f5:e8:ff:37:bf:6a:22:58:3c:8f:1e:6f + 09:d8:c0:85:1b:e6:ae:db:01:82:9a:fd:20:55:77:59 + fa:23:a4:49:95:1e:1f:b4:79:55:3e:8b:d0:6b:14:e4 + ae:7c:44:46:43:3c:2a:46:8f:d5:ae:c7:81:46:3d:cf + 42:af:ff:9d:a5:64:02:bc:de:eb:45:eb:07:e3:d7:01 + 1c:e3:8b:c5:86:24:0e:fa:22:7c:91:a5:3a:3d:0c:5f + f5:24:a7:44:37:4f:0b:42:b1:02:b6:5a:83:ad:48:ff + 9b: + +prime2: + 00:c4:78:18:4d:04:68:0f:e6:6a:e2:be:48:c5:3b:da + c4:1a:ad:60:44:65:af:01:7f:8f:ec:d5:94:21:d4:5c + d2:01:57:34:34:af:20:90:7a:b9:f7:10:c0:d9:4f:41 + cc:ca:48:68:49:34:50:9d:d8:ff:ab:b5:22:38:98:9d + 46:12:7b:7e:df:2e:f9:f0:53:3d:dd:b4:47:3c:0c:98 + 0b:d2:63:b5:f8:4a:7e:d1:6d:7c:be:4f:b5:1e:a7:d0 + 18:53:eb:35:c6:39:73:1a:e3:2a:9b:10:c7:56:8b:4a + 7c:5d:91:5c:a2:ed:37:1e:1a:3f:b5:91:e2:68:17:49 + bb: + +coefficient: + 00:a5:84:6d:e2:ff:0c:ab:d4:79:a8:c6:4a:43:4e:d4 + cf:82:78:aa:ee:87:3f:a5:6f:5a:63:20:56:b9:6f:6e + ea:73:49:64:c3:47:5d:a8:04:1c:b9:c9:c7:39:40:08 + 7b:fe:f0:b5:ec:11:87:58:92:46:5f:bd:0c:44:49:b8 + b2:fa:f6:ee:d3:e8:60:b1:db:4a:bc:3a:46:fb:e9:10 + 4c:2c:9e:bf:7c:3a:eb:d7:f7:cc:e2:63:7e:40:97:71 + 14:b1:00:7f:a9:78:89:cf:95:e6:48:5a:77:56:27:40 + 28:50:69:fe:dd:80:a9:f0:80:8b:ba:a4:dd:53:6c:46 + 28: + +exp1: + 00:a3:4e:9c:03:44:da:1e:e5:35:4c:1b:7f:cf:1f:81 + 24:3b:f8:a8:4f:4b:b8:41:80:61:a3:e1:75:3b:ec:e1 + 52:bd:31:fc:77:72:38:a0:f3:d7:e7:39:42:45:85:ce + 8f:54:2b:8b:95:03:76:db:f1:49:38:24:3d:71:51:1f + 22:4f:e9:14:26:40:2b:be:1f:0d:e7:36:a8:9c:8f:ee + 48:bd:32:ae:26:50:bd:bc:79:d9:3d:6f:85:8d:5a:79 + 13:62:1d:20:dd:b5:f3:a2:53:4a:22:1b:73:a0:43:30 + 03:9b:f7:09:1d:96:15:e5:12:4b:33:5f:d0:c3:b6:cd + 7b: + +exp2: + 3b:cf:4f:9e:8a:9b:df:53:46:f0:b5:fa:d3:48:50:65 + e8:b5:25:1c:4d:54:44:81:7f:e0:1a:78:d8:ff:9c:2e + 36:48:44:d5:51:06:f9:d4:d2:ae:1b:04:8a:63:2d:65 + d9:a2:c7:54:99:bf:7c:fe:25:7f:31:4a:34:ae:89:1a + 5e:e0:07:94:8b:e9:7c:b6:ea:9b:86:99:34:f7:a4:85 + dc:cb:8c:07:05:2e:ac:34:c7:87:ec:1d:f8:32:20:10 + 77:e3:9f:e0:33:77:0e:15:5f:d0:0b:00:94:21:1d:50 + d4:ef:3e:a3:3e:d1:cb:b1:33:f9:e3:6a:68:43:c6:a7 + + +Validation parameters: + Hash: SHA384 + Seed: 158ff315e310b156af4aea0d458569e4edbbb8594bdc787cad6342e60e58557a + +Public Key PIN: + pin-sha256:6+wU+clGtIweqv1JStyZVU3ySSAl/K9K0Cj+CpALWwE= +Public Key ID: + sha256:ebec14f9c946b48c1eaafd494adc99554df2492025fcaf4ad028fe0a900b5b01 + sha1:9fdd2a3e9743a70afa78b1d8297e3c96cdbe2e6e + +-----BEGIN PRIVATE KEY----- +MIIE/QIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAs46U69CoPxI1vclZ +kqwjpUNkdrOEU5w7HnWXXadSQHN0po6HtjO2Q9eixZ7ttVYSwt1e46F+8QnjuHO9 +fQw+Z2mDQfSSnnqZmYgZD6bmOH2gx9lUk5HEEDlQXFuPJHGOMoJb1UqY/zbVuYvh +GKeMyU6NHu8WTDSJeV484HkU3C+uTYuQN265iylaKU/kN5p/1BwxjeNk/acm2vLz +Asz+hCdaBSvWWROZryAlyALcdn1Kjb9AbXS0Q3GTTgIHDebob72YAzSAcXtuWnVB +mRORSFWx56c4wfK/9183r+np4gDQ4V5jf3soR0xOxFURikBi6fAYI3/pnOHMDVXV +VCLpOQIDAQABAoIBABrCahFG1Hwp05aINnA0dU+A3q0ODe+D/g+JCNjtQcXXLxBP +d4xA4q3zqg93owd+X2dpJGYaQFfd2HE51oiXVYmF4QjoUR2LOe72qH17qx3KIzcF +faRMegLM99v7zTZqMf33DYaZCnomiu2PGinZdpLdwQxWJ2WOAtryn3H4uZIizNpB +Vb7IPn0chTNk3ZIUCtmly6HXLPHScLKhm37FXP1WHkY9071wL4tN/+PnwaYJvX5H +B1LtcUdEtTD8FRxdjzb9vPrBJ5yX7hh6UICD1FymEDThwxfboJlBvybYNE2ZejCv +udfXTfZfjNbDvKZ1kDeb0Qw7J+Y9mZ9Tnj+lM70CgYEA6fagyl1otbekRhd+F6VX +pwaorvXo/ze/aiJYPI8ebwnYwIUb5q7bAYKa/SBVd1n6I6RJlR4ftHlVPovQaxTk +rnxERkM8KkaP1a7HgUY9z0Kv/52lZAK83utF6wfj1wEc44vFhiQO+iJ8kaU6PQxf +9SSnRDdPC0KxArZag61I/5sCgYEAxHgYTQRoD+Zq4r5IxTvaxBqtYERlrwF/j+zV +lCHUXNIBVzQ0ryCQern3EMDZT0HMykhoSTRQndj/q7UiOJidRhJ7ft8u+fBTPd20 +RzwMmAvSY7X4Sn7RbXy+T7Uep9AYU+s1xjlzGuMqmxDHVotKfF2RXKLtNx4aP7WR +4mgXSbsCgYEAo06cA0TaHuU1TBt/zx+BJDv4qE9LuEGAYaPhdTvs4VK9Mfx3cjig +89fnOUJFhc6PVCuLlQN22/FJOCQ9cVEfIk/pFCZAK74fDec2qJyP7ki9Mq4mUL28 +edk9b4WNWnkTYh0g3bXzolNKIhtzoEMwA5v3CR2WFeUSSzNf0MO2zXsCgYA7z0+e +ipvfU0bwtfrTSFBl6LUlHE1URIF/4Bp42P+cLjZIRNVRBvnU0q4bBIpjLWXZosdU +mb98/iV/MUo0rokaXuAHlIvpfLbqm4aZNPekhdzLjAcFLqw0x4fsHfgyIBB345/g +M3cOFV/QCwCUIR1Q1O8+oz7Ry7Ez+eNqaEPGpwKBgQClhG3i/wyr1HmoxkpDTtTP +gniq7oc/pW9aYyBWuW9u6nNJZMNHXagEHLnJxzlACHv+8LXsEYdYkkZfvQxESbiy ++vbu0+hgsdtKvDpG++kQTCyev3w669f3zOJjfkCXcRSxAH+peInPleZIWndWJ0Ao +UGn+3YCp8ICLuqTdU2xGKKA/MD0GCisGAQQBkggSCAExLzAtBglghkgBZQMEAgIE +IBWP8xXjELFWr0rqDUWFaeTtu7hZS9x4fK1jQuYOWFV6 +-----END PRIVATE KEY----- diff --git a/doc/credentials/x509/clikey.pem b/doc/credentials/x509/clikey.pem index 3c0f40d602..d289fe681d 100644 --- a/doc/credentials/x509/clikey.pem +++ b/doc/credentials/x509/clikey.pem @@ -1,15 +1,182 @@ +Public Key Info: + Public Key Algorithm: RSA + Key Security Level: High (3072 bits) + +modulus: + 00:d2:3f:05:7b:7d:d5:49:c5:ef:c8:b2:0c:35:96:2e + bd:af:8a:ee:44:81:fa:e3:3c:07:44:08:39:30:f2:03 + 98:23:6c:09:de:61:61:75:ec:4f:c7:e9:3d:5c:fb:10 + c9:0c:2a:49:71:b6:b8:56:52:9b:fa:fb:4b:ef:b8:12 + da:ac:64:08:e2:41:d3:07:d4:ef:c0:64:6d:51:76:a0 + 65:cb:58:9b:88:72:94:0d:07:39:47:be:4d:3a:30:fd + 20:f5:c5:f9:6d:03:a6:d8:0a:0e:4d:00:ca:3e:ab:d3 + 78:16:da:61:0a:74:7f:3f:5b:23:ad:49:f6:6d:4c:76 + d1:cc:23:ba:ab:d0:b7:67:ec:d4:48:92:e8:e8:28:ac + f1:61:e4:2b:93:16:1e:13:96:33:ed:c3:e4:21:f8:16 + e1:36:76:7f:27:6c:ab:dc:95:04:af:cb:70:df:23:78 + d3:96:2e:e6:a0:64:67:1b:e9:e5:ec:e9:be:c4:b0:fe + 54:2f:3f:a7:5a:3c:dd:36:77:ed:16:d8:7c:10:be:7b + 84:30:39:46:3b:68:e3:a2:8a:36:97:11:c7:8d:b4:88 + ce:99:74:f6:42:86:1d:fa:8a:51:67:4d:a5:0f:e0:f0 + 23:2f:1f:c8:c6:d7:25:55:4f:09:a9:40:df:67:ca:76 + 51:74:6d:52:94:e7:b8:5d:b2:44:13:3c:14:d8:f8:a4 + f8:34:da:ce:71:01:00:db:69:e9:e4:23:fa:a4:4f:cf + ca:ac:dc:0f:2e:86:40:89:56:16:9a:d0:32:13:78:9b + 1b:d1:0c:a7:88:4e:0f:a2:ee:d4:73:16:39:8e:c9:76 + 38:b5:bd:c2:13:7e:b3:6c:eb:37:dd:61:9a:af:3b:20 + 50:e0:c5:6d:9c:44:84:1b:ca:f1:90:65:01:82:6e:ff + 51:7b:38:bd:2e:6b:ac:ec:b7:87:77:2e:f6:87:d4:cf + aa:5a:17:99:61:14:f7:9a:55:06:2b:13:83:45:fa:66 + a5: + +public exponent: + 01:00:01: + +private exponent: + 00:9a:a3:45:da:05:bc:79:ed:7f:27:23:65:fd:87:ff + ca:fe:b1:75:fc:a7:89:ab:d6:fc:15:1a:e3:4d:cf:c3 + bb:03:da:b4:0b:7f:9e:9a:88:7c:49:b2:90:b2:b1:eb + 2f:a4:a5:f9:ad:0c:d2:da:93:1a:2c:e8:e6:7a:63:ee + 62:2e:47:c9:8c:f9:13:49:80:61:f3:25:2a:8e:af:6c + dc:52:4b:52:e2:72:3b:d8:b5:46:79:31:4c:46:0f:c0 + 2e:9c:f6:c7:35:5a:69:3e:1f:6f:53:4d:d0:73:76:18 + 2d:0c:ca:04:74:17:29:7c:a5:01:41:b4:d3:ee:a2:3e + 06:a3:5a:68:33:75:69:60:a3:fd:a3:7f:82:95:37:4d + b4:a0:e6:9c:f2:2b:63:65:ce:a5:55:2d:2e:bf:99:64 + e2:b3:17:47:00:ed:5a:1e:fc:f0:1c:88:ca:f5:24:76 + fb:51:4c:1f:cf:3a:e9:e7:cb:0a:95:4d:7b:45:da:54 + c4:a9:bf:a4:ba:62:13:0b:aa:c1:a3:62:26:20:9e:05 + 56:1a:aa:7d:ae:9d:c8:df:b5:25:bc:d3:1a:a7:ae:25 + 23:4f:09:5b:aa:b5:82:84:ac:a4:2e:4a:ff:61:85:d9 + 01:10:11:83:10:03:63:92:bc:c5:dc:2f:3d:9b:0a:2c + 77:9e:f7:34:9c:29:f5:7b:95:02:d6:37:9f:08:1f:65 + 2a:20:37:0d:a1:7e:78:7d:39:6e:06:92:39:01:87:ea + ca:5c:7f:6f:48:28:c8:59:00:b3:1b:9e:be:71:8a:78 + fb:7a:b9:ad:5e:ea:d3:f0:7e:b7:dd:4b:2e:32:9e:8b + ac:d8:4c:d7:a4:fc:49:09:9f:e6:d0:3f:8f:3a:9f:89 + d5:58:c9:b6:80:4d:63:ff:06:2a:00:19:46:ca:89:64 + 68:69:2b:dc:3c:97:da:4d:48:e3:94:97:67:66:a5:a6 + 72:c4:27:f2:61:46:c8:9d:0d:fc:78:80:63:f3:22:76 + 21: + +prime1: + 00:ff:51:fc:70:58:f7:f8:2d:a3:91:89:bd:79:d3:0f + 3a:1a:98:52:7f:60:40:09:6e:27:2f:a5:5c:0e:7e:58 + 15:3b:13:cc:15:e0:f8:53:c7:5e:b8:5b:77:72:97:c7 + 4c:08:cd:1b:ea:40:b8:9d:fc:3a:0f:e3:ae:86:59:f8 + db:e2:a3:27:a4:a4:1b:e8:fb:7d:2f:57:d6:a8:03:c1 + ee:83:5e:86:52:dc:c7:be:e6:cb:33:83:c8:9d:71:90 + ec:21:9d:07:13:76:28:eb:51:c1:fa:a8:84:55:54:a3 + 19:cc:8a:37:9a:3e:7f:08:24:a0:80:e3:72:e5:1b:41 + 70:5c:3e:3e:ce:c0:bf:32:c3:dd:6b:34:23:7f:a5:41 + 48:54:f3:e4:29:4a:dc:aa:54:ea:62:16:82:02:02:3d + 9b:9b:44:94:73:b8:02:35:38:88:ae:fd:15:b7:1a:d2 + e2:18:d4:7f:b2:15:73:27:10:5e:08:0e:91:e5:0a:c4 + a9: + +prime2: + 00:d2:ce:50:a5:03:ba:00:e9:d9:ca:33:8c:d3:f0:d5 + c4:99:db:0d:1a:9e:2f:70:fd:bc:ef:d9:9d:3d:5c:fc + ba:6e:0f:1b:a7:73:ea:01:07:92:0e:c6:42:4d:83:e7 + d5:f8:65:93:70:e8:41:bd:67:10:3c:e9:6c:f7:62:96 + bd:77:3d:d8:9a:23:d5:30:68:80:c7:b8:63:c5:b7:99 + 0d:fc:df:53:32:d9:19:d3:9e:f2:91:34:8f:ec:a3:5e + 17:28:03:7e:1d:8f:02:40:b4:62:aa:75:78:d5:95:48 + ba:64:34:8e:de:2f:7f:f9:7e:c2:93:27:9c:26:7c:c4 + 05:24:ae:e1:77:e8:46:b7:53:75:30:d6:00:ea:c6:10 + a1:da:11:8e:d5:92:77:b0:e1:f4:9a:20:62:63:71:42 + b6:6c:90:1f:0f:a4:b8:fd:de:93:63:67:b9:a4:5e:ad + 55:ae:25:ab:80:c6:d7:20:1f:90:17:85:a2:30:d5:53 + 9d: + +coefficient: + 01:bc:99:f2:2e:b4:af:26:ad:13:50:fe:13:2b:df:3f + 9b:8f:ff:da:ce:f2:e3:63:e9:13:8e:37:f8:07:3c:9a + f8:39:67:11:8c:a9:01:ad:14:9a:8e:1b:32:cd:db:99 + 70:2e:4c:3f:bb:66:37:85:c4:91:45:a5:8d:04:19:f9 + e8:d7:f7:5c:d2:63:8f:f0:4a:54:40:57:26:e4:99:e4 + 92:af:f1:39:a8:71:95:3f:e7:24:47:f0:8b:fd:e1:77 + 86:53:4d:72:e7:ac:7e:cf:1c:a3:ca:1d:68:3f:16:8e + 1d:0d:ad:51:fb:8a:6e:b1:f6:54:a1:b3:fd:c6:43:dd + d1:3e:5a:8a:54:2e:4f:fb:d3:1a:14:d5:72:a4:03:50 + 7f:0c:72:8e:0c:43:f8:6f:be:d6:cf:75:51:fd:8f:3b + 74:1c:2e:4a:d4:b1:f3:b6:94:44:c6:32:e0:d5:d0:70 + 14:6a:d5:5f:21:a6:27:b1:7a:12:a6:0e:33:63:8e:87 + + +exp1: + 5e:dd:f8:bd:49:e1:81:3e:7b:fb:54:c1:a9:65:69:cf + fe:17:c0:f7:81:2c:ea:14:1a:cd:52:54:dd:31:c6:ca + c4:b3:bb:6e:19:b4:4b:74:d5:d6:0c:6e:5a:8e:d8:c7 + 80:b1:ad:80:a1:e1:b7:1a:03:fc:e9:6d:6c:90:3b:ae + 80:0c:7d:6b:68:6a:d2:6b:b7:7d:02:d7:48:80:74:eb + 89:b6:72:94:91:62:4a:a5:78:b5:40:6f:27:49:0e:3f + 1e:d2:38:d1:db:62:a2:e5:32:fd:4e:e6:34:ca:88:fb + ca:0b:45:53:b3:8b:01:dc:92:22:b1:e0:7c:0e:5f:87 + 3f:4f:05:89:4f:06:fb:f6:d8:eb:bf:68:bd:42:0a:fa + b4:4e:16:e5:dc:e2:17:0c:0c:36:bc:04:3c:78:d6:a9 + 5d:cc:e2:98:08:b4:11:50:5b:41:21:da:92:b9:8d:c7 + e2:cf:fa:4e:92:37:c2:39:0b:a7:54:ba:92:ef:28:59 + + +exp2: + 7f:13:f6:53:73:6a:a6:70:52:64:ed:2c:80:fb:16:b2 + 7c:99:2b:4e:17:7b:bb:de:8a:0e:00:9e:24:46:b0:e7 + 65:bf:5f:c9:53:3c:06:40:dd:10:60:fd:c9:22:b2:18 + 2f:b4:73:ec:45:66:93:d9:d4:55:13:d6:27:4f:5c:55 + 7c:d3:60:86:93:01:4a:3c:45:1d:a0:8f:2c:ba:5f:de + a9:c8:aa:ab:e5:6a:07:43:33:30:cb:81:d3:82:2c:0f + 43:84:cf:7a:dc:21:dc:85:a1:50:e6:9d:e0:0b:2d:1b + 87:9a:93:61:67:3a:fb:59:29:cc:71:bd:55:0a:33:54 + 72:67:a5:ed:95:ad:43:88:61:05:fe:8b:f0:fb:53:3d + 6e:6a:d5:32:f4:27:89:0e:bd:58:48:1b:67:9c:f8:3d + 66:36:7f:32:fb:f6:b4:bb:7f:18:16:88:37:89:07:6e + b6:1b:69:46:a9:17:37:fb:2e:ee:af:15:35:e0:f3:95 + + + +Public Key PIN: + pin-sha256:KWlMZRRNkQ8f3/ujmY2mCGbw2vE0LL0SkxmwGtZnESc= +Public Key ID: + sha256:29694c65144d910f1fdffba3998da60866f0daf1342cbd129319b01ad6671127 + sha1:6cf70b945b564959c660bb2b3cb4409253cf5602 + -----BEGIN RSA PRIVATE KEY----- -MIICXQIBAAKBgQDKivjLpeml2GINsAimC6xwTxj44mLcxS+u69yFXFg2Z/AepUU+ -IvfqVOeRVgg1WHrh+DZLuoC6kwn7a2afUTzytrITKni+J14ENa/ZcF2MrhSM8WZ1 -NWrmvUltjkbJQIwyVPuIweRH1ECqSFxVqBT8RwYZ27FzTL8WF1JnlSlKuQIDAQAB -AoGAbn68VhUwTxqp+3+iaDuMGkT8gaK3fmtQpSPlTRfgw+WWGJHfIZPgHgWtwxrl -JX0cpLRNoqifW6ml03R3Kskd7u7OX5J2IIGEo5cgKUT0e1sasi21eRQsHb8N2E3h -MLeESijytvPQrxUazOZ2ff3rPAr0bYPNWW4hHJ9jNQ5rewECQQDt29FXygS3XJBb -C9ijo+rI92S0sjFdScFylJJElplNPlkFTyPyCNjjDFYAJ9kQgcSQJiskuikldco7 -OxhmFbmZAkEA2f2dPv9iep25VrU2qH8AjJPB4O09lOLjUsWWZrKulNFKq6BHhdR+ -7rpRmFbwQXFkl+dBCMl4OeYoTjn526YOIQJACSc+ZRx3Ff9P5tEL4zA5psYub+2z -jJ17/kbNYipRd/GAR34GKhhBEGu3G4ZtCf+Uat+tJVqsnq5ru9/ITpVjcQJBALmz -+f8u5J/8OWWKXpPQDZG0VhfdQvbRCkL7HBNE6MDSQsBOfF+gFLoec2BJv8agaMeX -M6nep9L7JR7u+NGLdsECQQCI+GN7oL/6Gx23LZsIoeRFwYjc/i6A6a+80UWwbctJ -T1a9N5uQAas5CWCuWMUq+jIOx2a94LdeOv+//QM8qwAr +MIIG4wIBAAKCAYEA0j8Fe33VScXvyLIMNZYuva+K7kSB+uM8B0QIOTDyA5gjbAne +YWF17E/H6T1c+xDJDCpJcba4VlKb+vtL77gS2qxkCOJB0wfU78BkbVF2oGXLWJuI +cpQNBzlHvk06MP0g9cX5bQOm2AoOTQDKPqvTeBbaYQp0fz9bI61J9m1MdtHMI7qr +0Ldn7NRIkujoKKzxYeQrkxYeE5Yz7cPkIfgW4TZ2fydsq9yVBK/LcN8jeNOWLuag +ZGcb6eXs6b7EsP5ULz+nWjzdNnftFth8EL57hDA5Rjto46KKNpcRx420iM6ZdPZC +hh36ilFnTaUP4PAjLx/IxtclVU8JqUDfZ8p2UXRtUpTnuF2yRBM8FNj4pPg02s5x +AQDbaenkI/qkT8/KrNwPLoZAiVYWmtAyE3ibG9EMp4hOD6Lu1HMWOY7Jdji1vcIT +frNs6zfdYZqvOyBQ4MVtnESEG8rxkGUBgm7/UXs4vS5rrOy3h3cu9ofUz6paF5lh +FPeaVQYrE4NF+malAgMBAAECggGBAJqjRdoFvHntfycjZf2H/8r+sXX8p4mr1vwV +GuNNz8O7A9q0C3+emoh8SbKQsrHrL6Sl+a0M0tqTGizo5npj7mIuR8mM+RNJgGHz +JSqOr2zcUktS4nI72LVGeTFMRg/ALpz2xzVaaT4fb1NN0HN2GC0MygR0Fyl8pQFB +tNPuoj4Go1poM3VpYKP9o3+ClTdNtKDmnPIrY2XOpVUtLr+ZZOKzF0cA7Voe/PAc +iMr1JHb7UUwfzzrp58sKlU17RdpUxKm/pLpiEwuqwaNiJiCeBVYaqn2uncjftSW8 +0xqnriUjTwlbqrWChKykLkr/YYXZARARgxADY5K8xdwvPZsKLHee9zScKfV7lQLW +N58IH2UqIDcNoX54fTluBpI5AYfqylx/b0goyFkAsxuevnGKePt6ua1e6tPwfrfd +Sy4ynous2EzXpPxJCZ/m0D+POp+J1VjJtoBNY/8GKgAZRsqJZGhpK9w8l9pNSOOU +l2dmpaZyxCfyYUbInQ38eIBj8yJ2IQKBwQD/UfxwWPf4LaORib150w86GphSf2BA +CW4nL6VcDn5YFTsTzBXg+FPHXrhbd3KXx0wIzRvqQLid/DoP466GWfjb4qMnpKQb +6Pt9L1fWqAPB7oNehlLcx77myzODyJ1xkOwhnQcTdijrUcH6qIRVVKMZzIo3mj5/ +CCSggONy5RtBcFw+Ps7AvzLD3Ws0I3+lQUhU8+QpStyqVOpiFoICAj2bm0SUc7gC +NTiIrv0VtxrS4hjUf7IVcycQXggOkeUKxKkCgcEA0s5QpQO6AOnZyjOM0/DVxJnb +DRqeL3D9vO/ZnT1c/LpuDxunc+oBB5IOxkJNg+fV+GWTcOhBvWcQPOls92KWvXc9 +2Joj1TBogMe4Y8W3mQ3831My2RnTnvKRNI/so14XKAN+HY8CQLRiqnV41ZVIumQ0 +jt4vf/l+wpMnnCZ8xAUkruF36Ea3U3Uw1gDqxhCh2hGO1ZJ3sOH0miBiY3FCtmyQ +Hw+kuP3ek2NnuaRerVWuJauAxtcgH5AXhaIw1VOdAoHAXt34vUnhgT57+1TBqWVp +z/4XwPeBLOoUGs1SVN0xxsrEs7tuGbRLdNXWDG5ajtjHgLGtgKHhtxoD/OltbJA7 +roAMfWtoatJrt30C10iAdOuJtnKUkWJKpXi1QG8nSQ4/HtI40dtiouUy/U7mNMqI ++8oLRVOziwHckiKx4HwOX4c/TwWJTwb79tjrv2i9Qgr6tE4W5dziFwwMNrwEPHjW +qV3M4pgItBFQW0Eh2pK5jcfiz/pOkjfCOQunVLqS7yhZAoHAfxP2U3NqpnBSZO0s +gPsWsnyZK04Xe7veig4AniRGsOdlv1/JUzwGQN0QYP3JIrIYL7Rz7EVmk9nUVRPW +J09cVXzTYIaTAUo8RR2gjyy6X96pyKqr5WoHQzMwy4HTgiwPQ4TPetwh3IWhUOad +4AstG4eak2FnOvtZKcxxvVUKM1RyZ6Xtla1DiGEF/ovw+1M9bmrVMvQniQ69WEgb +Z5z4PWY2fzL79rS7fxgWiDeJB262G2lGqRc3+y7urxU14POVAoHAAbyZ8i60ryat +E1D+EyvfP5uP/9rO8uNj6ROON/gHPJr4OWcRjKkBrRSajhsyzduZcC5MP7tmN4XE +kUWljQQZ+ejX91zSY4/wSlRAVybkmeSSr/E5qHGVP+ckR/CL/eF3hlNNcuesfs8c +o8odaD8Wjh0NrVH7im6x9lShs/3GQ93RPlqKVC5P+9MaFNVypANQfwxyjgxD+G++ +1s91Uf2PO3QcLkrUsfO2lETGMuDV0HAUatVfIaYnsXoSpg4zY46H -----END RSA PRIVATE KEY----- diff --git a/doc/credentials/x509/example.com-cert.pem b/doc/credentials/x509/example.com-cert.pem new file mode 100644 index 0000000000..110203fcfe --- /dev/null +++ b/doc/credentials/x509/example.com-cert.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICpjCCAV6gAwIBAgIIWt3gvC3CPKQwDQYJKoZIhvcNAQELBQAwGTEXMBUGA1UE +AxMOR251VExTIFRlc3QgQ0EwIBcNMTgwNDIzMTMzMzQ4WhgPOTk5OTEyMzEyMzU5 +NTlaMAAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS7hpflFRh3CVEd1EeYS4PT +K7e1RmUrYxo+35DIiZ3YDtnBUQkp1EW2vy0NKL2oC3oEydLV/MPVT74V7H6BXtrZ +o4GjMIGgMAwGA1UdEwEB/wQCMAAwKgYDVR0RBCMwIYILZXhhbXBsZS5jb22CEnNl +cnZlci5leGFtcGxlLmNvbTATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8BAf8E +BQMDB4AAMB0GA1UdDgQWBBTmJuEsWggOUoIu8Zze/DPDZcJHtDAfBgNVHSMEGDAW +gBRNVrdqAFjxZ5L0pnVVG45TAQPvzzANBgkqhkiG9w0BAQsFAAOCATEAfRdpFHrp +Dd/b9k2enKzpM7i77FJvNUl0rW44zlEhLaj2U1ww1l+/i7SAcXf7V7poq+r7JAXG +0nvWkMfYFCORQrJE6guJ7hvipCSoJM8lS7cuiKXTyUwLWgq6AXEIsHppyt7wmyYZ +t0oqYdhwfoS4jsfBJtB2vzn8Do2tJ9abYbXqdORGtqv9Lc5o0s17Fc4r2cuUFllF +IqGwB0/CHhmo75OtQ13nmM9TbxiI0QMYzX1FUQ3L/rsW0M02vzK/9OK6sZvRdZUP +e5Of0NNo0p5CUQSgQRi+pdXoC9JigkTFz86TSb8YjfP5hRLTU23V54XtLiIf2kxd +VaTNF+i7MB4+Ev/wzxC5g0XsxAmH9yTrQp71xUywCMo+PQPpXcWuQJE8nz8mV8u2 +Qr425yUcvrwHOQ== +-----END CERTIFICATE----- diff --git a/doc/credentials/x509/example.com-key.pem b/doc/credentials/x509/example.com-key.pem new file mode 100644 index 0000000000..e97dc6ffac --- /dev/null +++ b/doc/credentials/x509/example.com-key.pem @@ -0,0 +1,32 @@ +Public Key Info: + Public Key Algorithm: EC/ECDSA + Key Security Level: High (256 bits) + +curve: SECP256R1 +private key: + 00:fb:67:5c:f1:99:02:d2:90:78:a7:18:03:59:59:87 + 09:63:30:1b:f2:af:11:37:32:06:8c:2b:84:5a:c6:8d + 84: + +x: + 00:bb:86:97:e5:15:18:77:09:51:1d:d4:47:98:4b:83 + d3:2b:b7:b5:46:65:2b:63:1a:3e:df:90:c8:89:9d:d8 + 0e: + +y: + 00:d9:c1:51:09:29:d4:45:b6:bf:2d:0d:28:bd:a8:0b + 7a:04:c9:d2:d5:fc:c3:d5:4f:be:15:ec:7e:81:5e:da + d9: + + +Public Key PIN: + pin-sha256:/JZm32Lan7Ptf2pOdI5lEj2RdeDfUE9PGZnO/LBkC1Y= +Public Key ID: + sha256:fc9666df62da9fb3ed7f6a4e748e65123d9175e0df504f4f1999cefcb0640b56 + sha1:e626e12c5a080e52822ef19cdefc33c365c247b4 + +-----BEGIN EC PRIVATE KEY----- +MHgCAQEEIQD7Z1zxmQLSkHinGANZWYcJYzAb8q8RNzIGjCuEWsaNhKAKBggqhkjO +PQMBB6FEA0IABLuGl+UVGHcJUR3UR5hLg9Mrt7VGZStjGj7fkMiJndgO2cFRCSnU +Rba/LQ0ovagLegTJ0tX8w9VPvhXsfoFe2tk= +-----END EC PRIVATE KEY----- diff --git a/doc/credentials/x509/key-ed25519.pem b/doc/credentials/x509/key-ed25519.pem new file mode 100644 index 0000000000..7fedbd79bd --- /dev/null +++ b/doc/credentials/x509/key-ed25519.pem @@ -0,0 +1,25 @@ +Public Key Info: + Public Key Algorithm: EdDSA (Ed25519) + Key Security Level: High (256 bits) + +curve: Ed25519 +private key: + e5:c3:25:73:94:e8:9e:97:75:7c:78:59:f7:32:3c:82 + cf:60:90:c7:e5:b4:5f:9b:d7:a6:f8:36:0c:92:59:70 + + +x: + f3:05:fb:e9:73:2c:8c:df:c8:25:f4:bf:40:7b:2c:86 + 9b:65:66:7f:75:e3:d6:f4:77:b1:21:b5:b7:b5:89:87 + + + +Public Key PIN: + pin-sha256:7DW50qkZrEKqSrB29HkLvRoiuQAtHaaLAZKLE9s/VZ4= +Public Key ID: + sha256:ec35b9d2a919ac42aa4ab076f4790bbd1a22b9002d1da68b01928b13db3f559e + sha1:e3524a739d18bce9bf7c4d71c8bc66228aab3caa + +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIOXDJXOU6J6XdXx4WfcyPILPYJDH5bRfm9em+DYMkllw +-----END PRIVATE KEY----- diff --git a/doc/credentials/x509/key-ed448.pem b/doc/credentials/x509/key-ed448.pem new file mode 100644 index 0000000000..9f15dbdb74 --- /dev/null +++ b/doc/credentials/x509/key-ed448.pem @@ -0,0 +1,28 @@ +Public Key Info: + Public Key Algorithm: EdDSA (Ed448) + Key Security Level: Ultra (456 bits) + +curve: Ed448 +private key: + 0c:f8:7e:b0:94:bf:46:d1:61:bd:e3:b9:9d:1d:32:85 + 6f:ec:fa:e0:14:23:92:cd:98:c0:91:db:20:6d:17:4b + bf:8e:f4:76:a9:cf:74:6d:94:30:6c:56:5f:97:ac:50 + 79:6f:02:1e:ff:8d:77:9c:a5: + +x: + 9a:dd:de:61:f6:68:f2:db:c0:ac:24:87:4a:db:47:a2 + aa:6a:d5:9f:a8:88:bd:c5:d4:30:70:5e:d0:79:6a:8c + 33:07:82:b5:18:60:78:5b:e6:3f:d7:9b:1c:7c:f5:8f + d7:28:b2:bf:3d:77:39:51:00: + + +Public Key PIN: + pin-sha256:tZSB72Ha+TK+0mlTzgErm+T+WcmLAXNCqpjSbzFC8JE= +Public Key ID: + sha256:b59481ef61daf932bed26953ce012b9be4fe59c98b017342aa98d26f3142f091 + sha1:601a34077125ec235ae571bc95ec1b8b9a19dcfb + +-----BEGIN PRIVATE KEY----- +MEcCAQAwBQYDK2VxBDsEOQz4frCUv0bRYb3juZ0dMoVv7PrgFCOSzZjAkdsgbRdL +v470dqnPdG2UMGxWX5esUHlvAh7/jXecpQ== +-----END PRIVATE KEY----- diff --git a/doc/credentials/x509/key-gost01.pem b/doc/credentials/x509/key-gost01.pem new file mode 100644 index 0000000000..e0cd8cf0a1 --- /dev/null +++ b/doc/credentials/x509/key-gost01.pem @@ -0,0 +1,42 @@ +Public Key Info: + Public Key Algorithm: GOST R 34.10 + Key Security Level: High (256 bits) + +curve: CryptoPro-A +digest: GOSTR341194 +private key: + 66:00:9b:84:f4:bb:7b:25:52:7e:9e:b2:75:c3:84:c2 + 67:e9:ef:83:94:e7:3b:0e:a3:39:53:0e:57:76:b9:d0 + + +x: + 00:eb:af:2f:16:fe:e5:c2:02:c8:d9:fc:49:31:81:f3 + fb:1d:bb:eb:71:ac:d3:dc:52:f6:e2:fa:80:52:9d:45 + 48: + +y: + 00:ba:a8:46:1a:e1:cf:11:4d:e4:c7:db:3b:4b:f1:0b + 85:25:5e:34:76:9c:fc:70:d0:4d:1d:67:43:e5:88:66 + 35: + + +Public Key ID: + sha256:78:51:EF:CE:F5:49:34:51:04:92:DB:27:30:2B:C7:85:D6:96:62:74:A3:36:0A:D0:05:4B:5E:29:03:11:04:74 + sha1:2C:12:F8:92:1B:38:0B:60:E3:12:C8:4C:72:53:1E:06:F9:42:B3:5B +Public key's random art: ++--[CryptoPro-A]--+ +|..+++ | +|*.+= . | +|+*.+o | +|+o+oE. . | +|=.++o . S | +|oo.+ . . | +|. . | +| | +| | ++-----------------+ + +-----BEGIN PRIVATE KEY----- +MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIgQgZgCbhPS7eyVS +fp6ydcOEwmfp74OU5zsOozlTDld2udA= +-----END PRIVATE KEY----- diff --git a/doc/credentials/x509/key-gost12.pem b/doc/credentials/x509/key-gost12.pem new file mode 100644 index 0000000000..bca4daa133 --- /dev/null +++ b/doc/credentials/x509/key-gost12.pem @@ -0,0 +1,49 @@ +Public Key Info: + Public Key Algorithm: GOST R 34.10 + Key Security Level: Future (512 bits) + +curve: TC26-512-A +digest: STREEBOG-512 +private key: + 00:9d:31:40:ea:df:20:3e:75:0f:68:e2:06:f2:dc:57 + fe:04:52:5a:99:7a:9c:32:b0:fc:a0:ac:d3:c0:76:84 + bf:b2:4b:cc:61:b1:eb:d4:c1:8d:c3:1d:e6:b6:08:e7 + 6e:38:bc:0b:99:8b:6a:61:a5:97:66:1d:b7:28:e3:06 + 7d: + +x: + 68:cd:28:ef:58:58:64:3f:90:c2:a5:63:91:e4:d6:a5 + a4:7e:87:a1:c8:29:e2:bc:b3:b4:7a:cf:11:ac:70:99 + cc:a8:01:46:af:59:57:20:ca:dc:4d:41:cb:5c:ac:34 + 70:ed:c7:7d:40:4d:9a:ef:d0:41:96:22:66:e4:d5:7a + + +y: + 00:a9:0f:90:f1:78:94:dc:09:81:27:cc:1c:06:1e:31 + 99:2d:bf:ae:d6:98:f5:ca:31:8d:c3:7b:cf:74:7e:38 + f0:df:06:77:01:a6:fa:13:90:70:a3:4b:9b:8b:49:4f + 90:4b:19:1a:17:d6:8f:48:41:74:a0:d7:78:a9:08:70 + 83: + + +Public Key ID: + sha256:40:EE:B3:1D:48:9A:43:5D:3C:A0:9B:74:38:53:F0:66:F0:C8:9B:69:32:B2:15:7F:61:AF:A3:63:39:C3:87:65 + sha1:CD:D2:F2:6B:1E:BE:79:D0:8F:DD:79:84:E3:0F:AA:5C:C9:53:39:34 +Public key's random art: ++--[TC26-512-A]---+ +| | +| | +| E | +| + . o | +| S +. +. | +| +...oo..| +| o.==.+.| +| o.=oo+oo| +| oO+. .o| ++-----------------+ + +-----BEGIN PRIVATE KEY----- +MGoCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwRCBEB9BuMo +tx1ml6VhaouZC7w4bucItuYdw43B1OuxYcxLsr+EdsDTrKD8sDKceplaUgT+V9zy +BuJoD3U+IN/qQDGd +-----END PRIVATE KEY----- diff --git a/doc/credentials/x509/key-rsa-pss.pem b/doc/credentials/x509/key-rsa-pss.pem new file mode 100644 index 0000000000..7c69843234 --- /dev/null +++ b/doc/credentials/x509/key-rsa-pss.pem @@ -0,0 +1,139 @@ +Public Key Info: + Public Key Algorithm: RSA-PSS + Key Security Level: Medium (2048 bits) + +modulus: + 00:9d:d8:f0:67:5a:7f:9b:d0:5b:08:31:b1:be:7f:f2 + be:a2:0d:a2:2b:f0:68:2c:2b:09:0f:78:fd:c9:13:52 + 1c:3e:b0:4e:27:d8:c0:d4:db:7b:52:c5:ff:c0:73:c5 + cc:15:44:20:f4:ce:96:e9:15:06:b0:6e:3c:5b:98:14 + b3:ad:7a:90:95:41:45:1b:5d:43:bc:d0:5a:c3:9f:2b + 80:71:a8:dd:36:02:ae:d1:48:05:f2:db:ce:2c:81:d7 + 0f:ef:59:e5:f4:c4:7b:ef:f0:c3:09:d6:24:52:75:8f + bb:63:7e:9a:d9:c5:7e:b3:ce:4f:74:ee:01:4e:96:65 + 2d:fc:bc:2c:f3:fa:a7:af:9d:81:5a:02:fb:db:53:bb + 61:f5:c0:04:58:39:5a:20:fa:3b:7d:03:71:f1:d0:bd + 71:c5:55:93:79:d1:68:88:ad:ac:56:8b:b3:7c:b4:63 + 7e:9e:5c:3b:0b:91:1d:20:f6:a9:ba:46:38:07:8d:55 + 56:8e:13:cf:01:bf:7a:48:18:f8:2e:33:0d:2a:01:d1 + 03:a3:6d:21:45:81:f6:dc:b2:32:bc:1c:01:a0:29:f2 + 14:d9:c0:56:23:2d:2d:ad:90:95:74:a5:89:5f:5a:f4 + 12:8e:5d:88:d6:cc:07:ac:a3:64:85:e2:97:47:72:f7 + 79: + +public exponent: + 01:00:01: + +private exponent: + 02:9f:d5:0c:d2:47:9d:80:40:23:c7:45:bc:01:8c:ca + 9a:61:a4:00:ed:a7:fd:28:dc:27:61:e1:69:71:99:8a + 6b:9b:1d:4c:65:15:fd:16:46:f2:03:9c:82:b0:70:ed + b0:50:1c:8e:04:44:db:67:b4:8d:5f:74:f6:cc:be:2d + 5e:b9:40:fb:58:93:11:74:dd:c0:e8:6d:31:51:c8:f9 + 31:1c:dc:5e:ac:b1:3e:98:03:d9:97:00:9b:11:0b:23 + ed:a5:c7:f2:de:74:fe:57:14:cd:57:99:b6:5a:8a:f2 + f8:73:53:ce:d4:df:a7:95:dd:10:8a:71:30:7a:56:25 + 5b:7b:25:1c:f4:f6:a2:0a:71:d8:cb:80:f6:f7:26:80 + 78:f0:a2:86:e5:64:ec:19:15:5a:df:e3:71:99:d8:91 + b0:a2:aa:52:78:a2:4f:d1:57:8a:1a:b8:23:ac:74:65 + 91:a4:77:8c:13:59:f7:08:ff:2a:ae:29:91:6f:1a:de + 9c:4b:fe:c6:f0:03:1b:ea:6c:d7:1d:be:36:a8:96:75 + ef:ee:b3:b2:d8:37:31:c8:de:02:67:a4:97:24:65:a7 + f0:30:b9:48:26:c5:e5:49:e8:51:8e:48:dc:ab:dd:dc + 22:85:6c:6b:95:f7:3e:33:fa:0e:41:5c:c2:7d:d0:41 + + +prime1: + 00:b6:c2:1c:63:f6:2b:00:77:43:9f:d0:6b:3a:9d:05 + 85:d6:1d:6a:50:4d:d4:65:ea:c7:4a:3c:7a:e0:a3:b5 + 57:a1:de:78:7d:64:08:fb:ab:7c:58:26:2b:fc:b1:e2 + de:f2:4b:9c:18:b7:89:fd:cc:31:fe:90:45:67:c5:5b + 24:4b:9a:74:a1:eb:14:92:f7:89:b7:61:05:7b:7b:e1 + 3e:a9:22:4f:5a:51:44:e8:ea:9b:27:f0:5b:f5:d1:60 + df:f5:f0:70:9c:ad:56:23:13:cd:45:52:70:5b:f0:83 + 4d:d9:91:71:19:c0:52:88:fb:47:9e:4b:74:0e:2c:c3 + 59: + +prime2: + 00:dd:1b:20:cf:08:51:40:65:42:2d:4e:6b:b2:af:6f + 49:c3:e5:8d:76:5f:3e:30:ef:71:ed:06:4f:2a:95:32 + f8:b3:ec:b0:8a:2b:5a:8f:a6:2e:35:ef:31:66:7a:a9 + 4c:2e:62:8e:5b:ab:23:54:47:60:a4:43:ba:f3:de:4b + 08:dc:8a:78:52:19:e9:f5:2d:df:b7:37:e2:d1:73:7d + 8b:b5:94:5a:51:d9:42:ad:fa:3c:ef:33:ad:ab:a8:6b + ce:07:0e:dc:4c:aa:12:2d:e7:e2:5d:6a:c7:90:6e:55 + bf:c6:6e:02:9b:99:d7:26:70:f2:da:73:dd:e8:1f:f1 + 21: + +coefficient: + 4b:33:76:ee:7c:57:77:e1:6b:c8:21:db:97:3b:76:c6 + 78:92:52:2c:10:4a:22:45:45:97:48:de:df:bc:b0:a4 + d2:eb:c8:2d:cc:f6:df:13:3b:69:79:ce:08:77:7c:bb + 40:32:f8:26:4f:66:7c:44:29:74:30:ed:a3:21:9b:a7 + a4:9f:6b:1e:b1:46:bf:67:9e:9a:15:a3:66:b2:7b:eb + 87:cc:bc:26:70:71:16:06:8e:6b:7a:ad:2f:64:62:ef + be:3f:fa:1a:e5:af:07:6b:5a:e4:e2:f8:f2:7e:4a:9c + 65:24:f8:08:78:ad:4c:92:d0:80:dc:10:50:f3:11:92 + + +exp1: + 00:a0:9a:fb:0a:19:95:f6:a5:d8:86:c4:48:c7:4c:a0 + 42:da:44:25:5e:86:d7:05:ed:89:cf:42:51:15:c2:a8 + 25:67:b9:b3:17:36:66:f2:8b:e4:0d:2f:16:6e:ce:00 + ba:be:21:15:ff:5e:a3:e4:a6:a2:b4:bc:22:52:2c:4c + 89:1b:eb:93:5d:8b:d2:1b:c9:6f:7b:f8:c6:31:9b:4e + f9:9a:f6:ec:d7:49:1e:0e:b5:c5:3e:16:eb:29:9e:23 + cd:0d:3b:8c:2b:13:e4:e3:94:8e:4a:c2:44:bd:77:22 + 5c:b2:bb:2e:b2:5b:a1:ec:81:2e:91:fc:6a:f3:de:00 + 99: + +exp2: + 00:83:02:7f:fe:2c:3f:78:98:87:0d:b1:59:bf:16:94 + 2a:71:18:a3:29:70:65:b9:39:27:97:fa:15:0e:76:39 + 2d:83:ee:ca:ec:13:a4:25:59:a2:27:f3:02:a2:66:2b + ca:27:f1:dd:c8:13:2f:6b:d0:9f:42:b5:9f:20:c0:a6 + 55:29:d8:22:53:03:67:cd:0e:d1:70:0e:7d:26:fd:f7 + 75:c0:b1:96:92:c8:d8:e9:9d:4c:5d:af:91:48:15:13 + 4b:90:83:0d:a5:9f:60:06:33:4f:bd:6a:77:b4:ec:ab + 82:66:60:e8:ca:a9:ed:01:aa:0b:3b:c5:4b:c7:2e:a6 + 01: + +Validation parameters: + Hash: SHA384 + Seed: b5a6fc31ca1b2310a2f1ecb6812d933873b64f2b995b893a48737c97fecbf6b7 + +Public Key PIN: + pin-sha256:NN1idWI1043ahir5N4qSOKf/6IXzP/X1Kj4Ki5Z97xo= +Public Key ID: + sha256:34dd62756235d38dda862af9378a9238a7ffe885f33ff5f52a3e0a8b967def1a + sha1:6a7ea695c72a532d59eb8c2f46fdf1c60e21db29 + +-----BEGIN PRIVATE KEY----- +MIIE/QIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAndjwZ1p/m9BbCDGx +vn/yvqINoivwaCwrCQ94/ckTUhw+sE4n2MDU23tSxf/Ac8XMFUQg9M6W6RUGsG48 +W5gUs616kJVBRRtdQ7zQWsOfK4BxqN02Aq7RSAXy284sgdcP71nl9MR77/DDCdYk +UnWPu2N+mtnFfrPOT3TuAU6WZS38vCzz+qevnYFaAvvbU7th9cAEWDlaIPo7fQNx +8dC9ccVVk3nRaIitrFaLs3y0Y36eXDsLkR0g9qm6RjgHjVVWjhPPAb96SBj4LjMN +KgHRA6NtIUWB9tyyMrwcAaAp8hTZwFYjLS2tkJV0pYlfWvQSjl2I1swHrKNkheKX +R3L3eQIDAQABAoIBAAKf1QzSR52AQCPHRbwBjMqaYaQA7af9KNwnYeFpcZmKa5sd +TGUV/RZG8gOcgrBw7bBQHI4ERNtntI1fdPbMvi1euUD7WJMRdN3A6G0xUcj5MRzc +XqyxPpgD2ZcAmxELI+2lx/LedP5XFM1XmbZaivL4c1PO1N+nld0QinEwelYlW3sl +HPT2ogpx2MuA9vcmgHjwooblZOwZFVrf43GZ2JGwoqpSeKJP0VeKGrgjrHRlkaR3 +jBNZ9wj/Kq4pkW8a3pxL/sbwAxvqbNcdvjaolnXv7rOy2DcxyN4CZ6SXJGWn8DC5 +SCbF5UnoUY5I3Kvd3CKFbGuV9z4z+g5BXMJ90EECgYEAtsIcY/YrAHdDn9BrOp0F +hdYdalBN1GXqx0o8euCjtVeh3nh9ZAj7q3xYJiv8seLe8kucGLeJ/cwx/pBFZ8Vb +JEuadKHrFJL3ibdhBXt74T6pIk9aUUTo6psn8Fv10WDf9fBwnK1WIxPNRVJwW/CD +TdmRcRnAUoj7R55LdA4sw1kCgYEA3RsgzwhRQGVCLU5rsq9vScPljXZfPjDvce0G +TyqVMviz7LCKK1qPpi417zFmeqlMLmKOW6sjVEdgpEO6895LCNyKeFIZ6fUt37c3 +4tFzfYu1lFpR2UKt+jzvM62rqGvOBw7cTKoSLefiXWrHkG5Vv8ZuApuZ1yZw8tpz +3egf8SECgYEAoJr7ChmV9qXYhsRIx0ygQtpEJV6G1wXtic9CURXCqCVnubMXNmby +i+QNLxZuzgC6viEV/16j5KaitLwiUixMiRvrk12L0hvJb3v4xjGbTvma9uzXSR4O +tcU+FuspniPNDTuMKxPk45SOSsJEvXciXLK7LrJboeyBLpH8avPeAJkCgYEAgwJ/ +/iw/eJiHDbFZvxaUKnEYoylwZbk5J5f6FQ52OS2D7srsE6QlWaIn8wKiZivKJ/Hd +yBMva9CfQrWfIMCmVSnYIlMDZ80O0XAOfSb993XAsZaSyNjpnUxdr5FIFRNLkIMN +pZ9gBjNPvWp3tOyrgmZg6Mqp7QGqCzvFS8cupgECgYBLM3bufFd34WvIIduXO3bG +eJJSLBBKIkVFl0je37ywpNLryC3M9t8TO2l5zgh3fLtAMvgmT2Z8RCl0MO2jIZun +pJ9rHrFGv2eemhWjZrJ764fMvCZwcRYGjmt6rS9kYu++P/oa5a8Ha1rk4vjyfkqc +ZST4CHitTJLQgNwQUPMRkqA/MD0GCisGAQQBkggSCAExLzAtBglghkgBZQMEAgIE +ILWm/DHKGyMQovHstoEtkzhztk8rmVuJOkhzfJf+y/a3 +-----END PRIVATE KEY----- diff --git a/doc/cyclo/Makefile.am b/doc/cyclo/Makefile.am deleted file mode 100644 index f6327c1bb1..0000000000 --- a/doc/cyclo/Makefile.am +++ /dev/null @@ -1,37 +0,0 @@ -## Process this file with automake to produce Makefile.in -# Copyright (C) 2008-2012 Free Software Foundation, Inc. -# -# Author: Simon Josefsson -# -# This file is part of GnuTLS. -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -EXTRA_DIST = cyclo-gnutls.html - -vcurl = "http://git.savannah.gnu.org/gitweb/?p=gnutls.git;a=blob;f=lib/%FILENAME%;hb=HEAD" - -cyclo-gnutls.html: - (cd ${top_srcdir}/lib && \ - $(PMCCABE) `find . -type f -name \*.[ch] \ - | grep -v /minitasn1/ | sed 's,^./,,'` \ - | sort -nr \ - | LANG=C $(AWK) -f ${abs_top_srcdir}/build-aux/pmccabe2html \ - -v lang=html -v name="$(PACKAGE_STRING)" \ - -v vcurl=$(vcurl) \ - -v url="http://www.gnu.org/software/gnutls/" \ - -v css=${abs_top_srcdir}/build-aux/pmccabe.css) \ - > tmp - mv tmp $@ diff --git a/doc/doc.mk b/doc/doc.mk index 89a643c6c6..21636f6951 100644 --- a/doc/doc.mk +++ b/doc/doc.mk @@ -29,4 +29,4 @@ HEADER_FILES = $(top_srcdir)/lib/includes/gnutls/gnutls.h.in \ $(top_srcdir)/lib/includes/gnutls/pkcs7.h $(top_srcdir)/lib/includes/gnutls/socket.h C_SOURCE_FILES = $(top_srcdir)/lib/*/*.c $(top_srcdir)/lib/*.c $(top_srcdir)/libdane/*.c -C_X509_SOURCE_FILES = $(top_srcdir)/lib/x509/*.c $(top_srcdir)/lib/*.c $(top_srcdir)/lib/system/cert.c +C_X509_SOURCE_FILES = $(top_srcdir)/lib/x509/*.c $(top_srcdir)/lib/*.c $(top_srcdir)/lib/system/certs.c diff --git a/doc/doxygen/Doxyfile.in b/doc/doxygen/Doxyfile.in index 003e191487..6b7a1a7537 100644 --- a/doc/doxygen/Doxyfile.in +++ b/doc/doxygen/Doxyfile.in @@ -18,7 +18,7 @@ # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. +# https://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 @@ -539,7 +539,7 @@ INPUT = ../../ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# into libc) for the transcoding. See https://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 @@ -682,7 +682,7 @@ REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You +# tagging system (see https://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO @@ -1233,7 +1233,7 @@ CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# https://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. diff --git a/doc/doxygen/Doxyfile.orig b/doc/doxygen/Doxyfile.orig index 1eeea5ecd1..91ac9af6b6 100644 --- a/doc/doxygen/Doxyfile.orig +++ b/doc/doxygen/Doxyfile.orig @@ -18,7 +18,7 @@ # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. +# https://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 @@ -539,7 +539,7 @@ INPUT = # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# into libc) for the transcoding. See https://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 @@ -682,7 +682,7 @@ REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You +# tagging system (see https://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO @@ -1233,7 +1233,7 @@ CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# https://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. diff --git a/doc/epub.texi b/doc/epub.texi index 04fa9ca78f..1ec7073892 100644 --- a/doc/epub.texi +++ b/doc/epub.texi @@ -114,13 +114,15 @@ Documentation License''. * Preface:: * Introduction to GnuTLS:: * Introduction to TLS:: -* Certificate authentication:: -* Shared-key and anonymous authentication:: -* More on certificate authentication:: +* Authentication methods:: +* Hardware security modules and abstract key types:: * How to use GnuTLS in applications:: * GnuTLS application examples:: +* System-wide configuration of the library:: +* Using GnuTLS as a cryptographic library:: * Other included programs:: * Internal architecture of GnuTLS:: +* Upgrading from previous versions:: * Support:: * Error codes:: * Supported ciphersuites:: @@ -146,6 +148,8 @@ Documentation License''. @include cha-gtls-examples.texi +@include cha-config.texi + @include cha-crypto.texi @include cha-programs.texi diff --git a/doc/errcodes.c b/doc/errcodes.c index defee3a19c..1548f93aac 100644 --- a/doc/errcodes.c +++ b/doc/errcodes.c @@ -15,7 +15,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H diff --git a/doc/examples/Makefile.am b/doc/examples/Makefile.am index f230eca8a4..c40bf4f533 100644 --- a/doc/examples/Makefile.am +++ b/doc/examples/Makefile.am @@ -41,9 +41,7 @@ LDADD = libexamples.la \ CXX_LDADD = ../../lib/libgnutlsxx.la \ $(LDADD) -EXTRA_DIST = tlsproxy/buffer.c tlsproxy/buffer.h tlsproxy/crypto-gnutls.c \ - tlsproxy/crypto-gnutls.h tlsproxy/LICENSE tlsproxy/tlsproxy.c \ - tlsproxy/README.md tlsproxy/Makefile +EXTRA_DIST = tlsproxy/LICENSE tlsproxy/README.md noinst_PROGRAMS = ex-client-resume ex-client-dtls noinst_PROGRAMS += ex-cert-select ex-client-x509 @@ -76,6 +74,11 @@ if ENABLE_SRP noinst_PROGRAMS += ex-client-srp ex-serv-srp endif +noinst_PROGRAMS += tlsproxy/tlsproxy + +tlsproxy_tlsproxy_SOURCES = tlsproxy/buffer.c tlsproxy/buffer.h tlsproxy/crypto-gnutls.c \ + tlsproxy/crypto-gnutls.h tlsproxy/tlsproxy.c + noinst_LTLIBRARIES = libexamples.la if ENABLE_OCSP diff --git a/doc/examples/ex-cert-select-pkcs11.c b/doc/examples/ex-cert-select-pkcs11.c index c8a71126ff..2923a47da3 100644 --- a/doc/examples/ex-cert-select-pkcs11.c +++ b/doc/examples/ex-cert-select-pkcs11.c @@ -60,6 +60,7 @@ pin_callback(void *user, int attempt, const char *token_url, printf("*** Wrong PIN\n"); password = getpass("Enter pin: "); + /* FIXME: ensure that we are in UTF-8 locale */ if (password == NULL || password[0] == 0) { fprintf(stderr, "No password given\n"); exit(1); diff --git a/doc/examples/ex-client-anon.c b/doc/examples/ex-client-anon.c index e86e9302f5..39d5a7e3cd 100644 --- a/doc/examples/ex-client-anon.c +++ b/doc/examples/ex-client-anon.c @@ -11,11 +11,18 @@ #include #include #include +#include #include /* A very basic TLS client, with anonymous authentication. */ +#define LOOP_CHECK(rval, cmd) \ + do { \ + rval = cmd; \ + } while(rval == GNUTLS_E_AGAIN || rval == GNUTLS_E_INTERRUPTED); \ + assert(rval >= 0) + #define MAX_BUF 1024 #define MSG "GET / HTTP/1.0\r\n\r\n" @@ -74,9 +81,9 @@ int main(void) gnutls_free(desc); } - gnutls_record_send(session, MSG, strlen(MSG)); + LOOP_CHECK(ret, gnutls_record_send(session, MSG, strlen(MSG))); - ret = gnutls_record_recv(session, buffer, MAX_BUF); + LOOP_CHECK(ret, gnutls_record_recv(session, buffer, MAX_BUF)); if (ret == 0) { printf("- Peer has closed the TLS connection\n"); goto end; @@ -95,7 +102,7 @@ int main(void) fputs("\n", stdout); } - gnutls_bye(session, GNUTLS_SHUT_RDWR); + LOOP_CHECK(ret, gnutls_bye(session, GNUTLS_SHUT_RDWR)); end: diff --git a/doc/examples/ex-client-dtls.c b/doc/examples/ex-client-dtls.c index d154015395..095246e26c 100644 --- a/doc/examples/ex-client-dtls.c +++ b/doc/examples/ex-client-dtls.c @@ -19,9 +19,13 @@ */ #define CHECK(x) assert((x)>=0) +#define LOOP_CHECK(rval, cmd) \ + do { \ + rval = cmd; \ + } while(rval == GNUTLS_E_AGAIN || rval == GNUTLS_E_INTERRUPTED); \ + assert(rval >= 0) #define MAX_BUF 1024 -#define CAFILE "/etc/ssl/certs/ca-certificates.crt" #define MSG "GET / HTTP/1.0\r\n\r\n" extern int udp_connect(void); @@ -46,9 +50,8 @@ int main(void) /* X509 stuff */ CHECK(gnutls_certificate_allocate_credentials(&xcred)); - /* sets the trusted cas file */ - CHECK(gnutls_certificate_set_x509_trust_file(xcred, CAFILE, - GNUTLS_X509_FMT_PEM)); + /* sets the system trusted CAs for Internet PKI */ + CHECK(gnutls_certificate_set_x509_system_trust(xcred)); /* Initialize TLS session */ CHECK(gnutls_init(&session, GNUTLS_CLIENT | GNUTLS_DATAGRAM)); @@ -58,10 +61,10 @@ int main(void) /* put the x509 credentials to the current session */ CHECK(gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred)); - CHECK(gnutls_server_name_set(session, GNUTLS_NAME_DNS, "my_host_name", - strlen("my_host_name"))); + CHECK(gnutls_server_name_set(session, GNUTLS_NAME_DNS, "www.example.com", + strlen("www.example.com"))); - gnutls_session_set_verify_cert(session, "my_host_name", 0); + gnutls_session_set_verify_cert(session, "www.example.com", 0); /* connect to the peer */ sd = udp_connect(); @@ -91,9 +94,9 @@ int main(void) gnutls_free(desc); } - CHECK(gnutls_record_send(session, MSG, strlen(MSG))); + LOOP_CHECK(ret, gnutls_record_send(session, MSG, strlen(MSG))); - ret = gnutls_record_recv(session, buffer, MAX_BUF); + LOOP_CHECK(ret, gnutls_record_recv(session, buffer, MAX_BUF)); if (ret == 0) { printf("- Peer has closed the TLS connection\n"); goto end; diff --git a/doc/examples/ex-client-psk.c b/doc/examples/ex-client-psk.c index 5658cb0ce0..63ef884c70 100644 --- a/doc/examples/ex-client-psk.c +++ b/doc/examples/ex-client-psk.c @@ -18,6 +18,11 @@ */ #define CHECK(x) assert((x)>=0) +#define LOOP_CHECK(rval, cmd) \ + do { \ + rval = cmd; \ + } while(rval == GNUTLS_E_AGAIN || rval == GNUTLS_E_INTERRUPTED); \ + assert(rval >= 0) #define MAX_BUF 1024 #define MSG "GET / HTTP/1.0\r\n\r\n" @@ -34,6 +39,11 @@ int main(void) gnutls_psk_client_credentials_t pskcred; const gnutls_datum_t key = { (void *) "DEADBEEF", 8 }; + if (gnutls_check_version("3.6.3") == NULL) { + fprintf(stderr, "GnuTLS 3.6.3 or later is required for this example\n"); + exit(1); + } + CHECK(gnutls_global_init()); CHECK(gnutls_psk_allocate_client_credentials(&pskcred)); @@ -44,11 +54,14 @@ int main(void) */ CHECK(gnutls_init(&session, GNUTLS_CLIENT)); - /* Use default priorities */ ret = - gnutls_priority_set_direct(session, - "PERFORMANCE:+ECDHE-PSK:+DHE-PSK:+PSK", - &err); + gnutls_set_default_priority_append(session, + "-KX-ALL:+ECDHE-PSK:+DHE-PSK:+PSK", + &err, 0); + + /* Alternative for pre-3.6.3 versions: + * gnutls_priority_set_direct(session, "NORMAL:+ECDHE-PSK:+DHE-PSK:+PSK", &err) + */ if (ret < 0) { if (ret == GNUTLS_E_INVALID_REQUEST) { fprintf(stderr, "Syntax error at: %s\n", err); @@ -87,9 +100,9 @@ int main(void) gnutls_free(desc); } - CHECK(gnutls_record_send(session, MSG, strlen(MSG))); + LOOP_CHECK(ret, gnutls_record_send(session, MSG, strlen(MSG))); - ret = gnutls_record_recv(session, buffer, MAX_BUF); + LOOP_CHECK(ret, gnutls_record_recv(session, buffer, MAX_BUF)); if (ret == 0) { printf("- Peer has closed the TLS connection\n"); goto end; diff --git a/doc/examples/ex-client-resume.c b/doc/examples/ex-client-resume.c index 218cc4447a..3161ef3165 100644 --- a/doc/examples/ex-client-resume.c +++ b/doc/examples/ex-client-resume.c @@ -7,16 +7,27 @@ #include #include #include +#include #include -/* Those functions are defined in other examples. - */ extern void check_alert(gnutls_session_t session, int ret); extern int tcp_connect(void); extern void tcp_close(int sd); +/* A very basic TLS client, with X.509 authentication and server certificate + * verification as well as session resumption. + * + * Note that error recovery is minimal for simplicity. + */ + +#define CHECK(x) assert((x)>=0) +#define LOOP_CHECK(rval, cmd) \ + do { \ + rval = cmd; \ + } while(rval == GNUTLS_E_AGAIN || rval == GNUTLS_E_INTERRUPTED); \ + assert(rval >= 0) + #define MAX_BUF 1024 -#define CAFILE "/etc/ssl/certs/ca-certificates.crt" #define MSG "GET / HTTP/1.0\r\n\r\n" int main(void) @@ -30,41 +41,41 @@ int main(void) /* variables used in session resuming */ int t; - char *session_data = NULL; - size_t session_data_size = 0; - - gnutls_global_init(); + gnutls_datum_t sdata; - /* X509 stuff */ - gnutls_certificate_allocate_credentials(&xcred); + /* for backwards compatibility with gnutls < 3.3.0 */ + CHECK(gnutls_global_init()); - gnutls_certificate_set_x509_trust_file(xcred, CAFILE, - GNUTLS_X509_FMT_PEM); + CHECK(gnutls_certificate_allocate_credentials(&xcred)); + CHECK(gnutls_certificate_set_x509_system_trust(xcred)); for (t = 0; t < 2; t++) { /* connect 2 times to the server */ sd = tcp_connect(); - gnutls_init(&session, GNUTLS_CLIENT); + CHECK(gnutls_init(&session, GNUTLS_CLIENT)); - gnutls_priority_set_direct(session, - "PERFORMANCE:!ARCFOUR-128", - NULL); + CHECK(gnutls_server_name_set(session, GNUTLS_NAME_DNS, + "www.example.com", + strlen("www.example.com"))); + gnutls_session_set_verify_cert(session, "www.example.com", 0); + + CHECK(gnutls_set_default_priority(session)); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, + GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); if (t > 0) { /* if this is not the first time we connect */ - gnutls_session_set_data(session, session_data, - session_data_size); - free(session_data); + CHECK(gnutls_session_set_data(session, sdata.data, + sdata.size)); + gnutls_free(sdata.data); } - gnutls_transport_set_int(session, sd); - gnutls_handshake_set_timeout(session, - GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT); - /* Perform the TLS handshake */ do { @@ -81,16 +92,9 @@ int main(void) } if (t == 0) { /* the first time we connect */ - /* get the session data size */ - gnutls_session_get_data(session, NULL, - &session_data_size); - session_data = malloc(session_data_size); - - /* put session data to the session variable */ - gnutls_session_get_data(session, session_data, - &session_data_size); - - } else { /* the second time we connect */ + /* get the session data */ + CHECK(gnutls_session_get_data2(session, &sdata)); + } else { /* the second time we connect */ /* check if we actually resumed the previous session */ if (gnutls_session_is_resumed(session) != 0) { @@ -101,13 +105,9 @@ int main(void) } } - /* This function was defined in a previous example - */ - /* print_info(session); */ - - gnutls_record_send(session, MSG, strlen(MSG)); + LOOP_CHECK(ret, gnutls_record_send(session, MSG, strlen(MSG))); - ret = gnutls_record_recv(session, buffer, MAX_BUF); + LOOP_CHECK(ret, gnutls_record_recv(session, buffer, MAX_BUF)); if (ret == 0) { printf("- Peer has closed the TLS connection\n"); goto end; diff --git a/doc/examples/ex-client-x509-3.1.c b/doc/examples/ex-client-x509-3.1.c index a6cc5241c0..bd7fd2fcb6 100644 --- a/doc/examples/ex-client-x509-3.1.c +++ b/doc/examples/ex-client-x509-3.1.c @@ -18,6 +18,11 @@ */ #define CHECK(x) assert((x)>=0) +#define LOOP_CHECK(rval, cmd) \ + do { \ + rval = cmd; \ + } while(rval == GNUTLS_E_AGAIN || rval == GNUTLS_E_INTERRUPTED); \ + assert(rval >= 0) #define MAX_BUF 1024 #define CAFILE "/etc/ssl/certs/ca-certificates.crt" @@ -62,10 +67,10 @@ int main(void) */ CHECK(gnutls_init(&session, GNUTLS_CLIENT)); - gnutls_session_set_ptr(session, (void *) "my_host_name"); + gnutls_session_set_ptr(session, (void *) "www.example.com"); - gnutls_server_name_set(session, GNUTLS_NAME_DNS, "my_host_name", - strlen("my_host_name")); + gnutls_server_name_set(session, GNUTLS_NAME_DNS, "www.example.com", + strlen("www.example.com")); /* use default priorities */ CHECK(gnutls_set_default_priority(session)); @@ -112,9 +117,9 @@ int main(void) gnutls_free(desc); } - CHECK(gnutls_record_send(session, MSG, strlen(MSG))); + LOOP_CHECK(ret, gnutls_record_send(session, MSG, strlen(MSG))); - ret = gnutls_record_recv(session, buffer, MAX_BUF); + LOOP_CHECK(ret, gnutls_record_recv(session, buffer, MAX_BUF)); if (ret == 0) { printf("- Peer has closed the TLS connection\n"); goto end; diff --git a/doc/examples/ex-client-x509.c b/doc/examples/ex-client-x509.c index 4fd9c3bccf..07abcf015c 100644 --- a/doc/examples/ex-client-x509.c +++ b/doc/examples/ex-client-x509.c @@ -17,9 +17,13 @@ */ #define CHECK(x) assert((x)>=0) +#define LOOP_CHECK(rval, cmd) \ + do { \ + rval = cmd; \ + } while(rval == GNUTLS_E_AGAIN || rval == GNUTLS_E_INTERRUPTED); \ + assert(rval >= 0) #define MAX_BUF 1024 -#define CAFILE "/etc/ssl/certs/ca-certificates.crt" #define MSG "GET / HTTP/1.0\r\n\r\n" extern int tcp_connect(void); @@ -29,13 +33,10 @@ int main(void) { int ret, sd, ii; gnutls_session_t session; - char buffer[MAX_BUF + 1]; + char buffer[MAX_BUF + 1], *desc; gnutls_datum_t out; int type; unsigned status; -#if 0 - const char *err; -#endif gnutls_certificate_credentials_t xcred; if (gnutls_check_version("3.4.6") == NULL) { @@ -49,43 +50,28 @@ int main(void) /* X509 stuff */ CHECK(gnutls_certificate_allocate_credentials(&xcred)); - /* sets the trusted cas file - */ - CHECK(gnutls_certificate_set_x509_trust_file(xcred, CAFILE, - GNUTLS_X509_FMT_PEM)); + /* sets the system trusted CAs for Internet PKI */ + CHECK(gnutls_certificate_set_x509_system_trust(xcred)); /* If client holds a certificate it can be set using the following: * - gnutls_certificate_set_x509_key_file (xcred, - "cert.pem", "key.pem", + gnutls_certificate_set_x509_key_file (xcred, "cert.pem", "key.pem", GNUTLS_X509_FMT_PEM); */ - /* Initialize TLS session - */ + /* Initialize TLS session */ CHECK(gnutls_init(&session, GNUTLS_CLIENT)); - CHECK(gnutls_server_name_set(session, GNUTLS_NAME_DNS, "my_host_name", - strlen("my_host_name"))); + CHECK(gnutls_server_name_set(session, GNUTLS_NAME_DNS, "www.example.com", + strlen("www.example.com"))); /* It is recommended to use the default priorities */ CHECK(gnutls_set_default_priority(session)); -#if 0 - /* if more fine-graned control is required */ - ret = gnutls_priority_set_direct(session, - "NORMAL", &err); - if (ret < 0) { - if (ret == GNUTLS_E_INVALID_REQUEST) { - fprintf(stderr, "Syntax error at: %s\n", err); - } - exit(1); - } -#endif /* put the x509 credentials to the current session */ CHECK(gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred)); - gnutls_session_set_verify_cert(session, "my_host_name", 0); + gnutls_session_set_verify_cert(session, "www.example.com", 0); /* connect to the peer */ @@ -114,17 +100,15 @@ int main(void) fprintf(stderr, "*** Handshake failed: %s\n", gnutls_strerror(ret)); goto end; } else { - char *desc; - desc = gnutls_session_get_desc(session); printf("- Session info: %s\n", desc); gnutls_free(desc); } /* send data */ - CHECK(gnutls_record_send(session, MSG, strlen(MSG))); + LOOP_CHECK(ret, gnutls_record_send(session, MSG, strlen(MSG))); - ret = gnutls_record_recv(session, buffer, MAX_BUF); + LOOP_CHECK(ret, gnutls_record_recv(session, buffer, MAX_BUF)); if (ret == 0) { printf("- Peer has closed the TLS connection\n"); goto end; diff --git a/doc/examples/ex-serv-dtls.c b/doc/examples/ex-serv-dtls.c index 887b4b83df..7374d96b45 100644 --- a/doc/examples/ex-serv-dtls.c +++ b/doc/examples/ex-serv-dtls.c @@ -27,6 +27,11 @@ * Note that error checking is minimal to simplify the example. */ +#define LOOP_CHECK(rval, cmd) \ + do { \ + rval = cmd; \ + } while(rval == GNUTLS_E_AGAIN || rval == GNUTLS_E_INTERRUPTED) + #define MAX_BUFFER 1024 #define PORT 5557 @@ -88,9 +93,14 @@ int main(void) gnutls_certificate_set_known_dh_params(x509_cred, GNUTLS_SEC_PARAM_MEDIUM); - gnutls_priority_init(&priority_cache, - "PERFORMANCE:-VERS-TLS-ALL:+VERS-DTLS1.0:%SERVER_PRECEDENCE", - NULL); + /* pre-3.6.3 equivalent: + * gnutls_priority_init(&priority_cache, + * "NORMAL:-VERS-TLS-ALL:+VERS-DTLS1.0:%SERVER_PRECEDENCE", + * NULL); + */ + gnutls_priority_init2(&priority_cache, + "%SERVER_PRECEDENCE", + NULL, GNUTLS_PRIORITY_INIT_DEF_APPEND); gnutls_key_generate(&cookie_key, GNUTLS_COOKIE_KEY_SIZE); @@ -192,11 +202,7 @@ int main(void) gnutls_transport_set_pull_timeout_function(session, pull_timeout_func); - do { - ret = gnutls_handshake(session); - } - while (ret == GNUTLS_E_INTERRUPTED - || ret == GNUTLS_E_AGAIN); + LOOP_CHECK(ret, gnutls_handshake(session)); /* Note that DTLS may also receive GNUTLS_E_LARGE_PACKET. * In that case the MTU should be adjusted. */ @@ -211,14 +217,10 @@ int main(void) printf("- Handshake was completed\n"); for (;;) { - do { - ret = + LOOP_CHECK(ret, gnutls_record_recv_seq(session, buffer, MAX_BUFFER, - sequence); - } - while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); + sequence)); if (ret < 0 && gnutls_error_is_fatal(ret) == 0) { fprintf(stderr, "*** Warning: %s\n", @@ -243,7 +245,7 @@ int main(void) sequence[6], sequence[7], buffer); /* reply back */ - ret = gnutls_record_send(session, buffer, ret); + LOOP_CHECK(ret, gnutls_record_send(session, buffer, ret)); if (ret < 0) { fprintf(stderr, "Error in send(): %s\n", gnutls_strerror(ret)); @@ -251,7 +253,7 @@ int main(void) } } - gnutls_bye(session, GNUTLS_SHUT_WR); + LOOP_CHECK(ret, gnutls_bye(session, GNUTLS_SHUT_WR)); gnutls_deinit(session); } @@ -303,13 +305,8 @@ static int pull_timeout_func(gnutls_transport_ptr_t ptr, unsigned int ms) FD_ZERO(&rfds); FD_SET(priv->fd, &rfds); - tv.tv_sec = 0; - tv.tv_usec = ms * 1000; - - while (tv.tv_usec >= 1000000) { - tv.tv_usec -= 1000000; - tv.tv_sec++; - } + tv.tv_sec = ms / 1000; + tv.tv_usec = (ms % 1000) * 1000; ret = select(priv->fd + 1, &rfds, NULL, NULL, &tv); diff --git a/doc/examples/ex-serv-psk.c b/doc/examples/ex-serv-psk.c index 26aad02f47..b6d5d11c8d 100644 --- a/doc/examples/ex-serv-psk.c +++ b/doc/examples/ex-serv-psk.c @@ -20,6 +20,11 @@ #define CAFILE "/etc/ssl/certs/ca-certificates.crt" #define CRLFILE "crl.pem" +#define LOOP_CHECK(rval, cmd) \ + do { \ + rval = cmd; \ + } while(rval == GNUTLS_E_AGAIN || rval == GNUTLS_E_INTERRUPTED) + /* This is a sample TLS echo server, supporting X.509 and PSK authentication. */ @@ -79,9 +84,14 @@ int main(void) gnutls_psk_allocate_server_credentials(&psk_cred); gnutls_psk_set_server_credentials_function(psk_cred, pskfunc); - gnutls_priority_init(&priority_cache, - "NORMAL:+PSK:+ECDHE-PSK:+DHE-PSK", - NULL); + /* pre-3.6.3 equivalent: + * gnutls_priority_init(&priority_cache, + * "NORMAL:+PSK:+ECDHE-PSK:+DHE-PSK", + * NULL); + */ + gnutls_priority_init2(&priority_cache, + "+ECDHE-PSK:+DHE-PSK:+PSK", + NULL, GNUTLS_PRIORITY_INIT_DEF_APPEND); gnutls_certificate_set_known_dh_params(x509_cred, GNUTLS_SEC_PARAM_MEDIUM); @@ -127,7 +137,7 @@ int main(void) sizeof(topbuf)), ntohs(sa_cli.sin_port)); gnutls_transport_set_int(session, sd); - ret = gnutls_handshake(session); + LOOP_CHECK(ret, gnutls_handshake(session)); if (ret < 0) { close(sd); gnutls_deinit(session); @@ -149,7 +159,7 @@ int main(void) /* print_info(session); */ for (;;) { - ret = gnutls_record_recv(session, buffer, MAX_BUF); + LOOP_CHECK(ret, gnutls_record_recv(session, buffer, MAX_BUF)); if (ret == 0) { printf @@ -173,7 +183,7 @@ int main(void) printf("\n"); /* do not wait for the peer to close the connection. */ - gnutls_bye(session, GNUTLS_SHUT_WR); + LOOP_CHECK(ret, gnutls_bye(session, GNUTLS_SHUT_WR)); close(sd); gnutls_deinit(session); diff --git a/doc/examples/ex-serv-srp.c b/doc/examples/ex-serv-srp.c index c79ceb20c5..7686a8fc1c 100644 --- a/doc/examples/ex-serv-srp.c +++ b/doc/examples/ex-serv-srp.c @@ -22,6 +22,11 @@ #define CERTFILE "cert.pem" #define CAFILE "/etc/ssl/certs/ca-certificates.crt" +#define LOOP_CHECK(rval, cmd) \ + do { \ + rval = cmd; \ + } while(rval == GNUTLS_E_AGAIN || rval == GNUTLS_E_INTERRUPTED) + /* This is a sample TLS-SRP echo server. */ @@ -117,11 +122,7 @@ int main(void) gnutls_transport_set_int(session, sd); - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - + LOOP_CHECK(ret, gnutls_handshake(session)); if (ret < 0) { close(sd); gnutls_deinit(session); @@ -137,7 +138,7 @@ int main(void) /* print_info(session); */ for (;;) { - ret = gnutls_record_recv(session, buffer, MAX_BUF); + LOOP_CHECK(ret, gnutls_record_recv(session, buffer, MAX_BUF)); if (ret == 0) { printf @@ -160,7 +161,7 @@ int main(void) } printf("\n"); /* do not wait for the peer to close the connection. */ - gnutls_bye(session, GNUTLS_SHUT_WR); + LOOP_CHECK(ret, gnutls_bye(session, GNUTLS_SHUT_WR)); close(sd); gnutls_deinit(session); diff --git a/doc/examples/ex-serv-x509.c b/doc/examples/ex-serv-x509.c index 4bf1940b89..df57207140 100644 --- a/doc/examples/ex-serv-x509.c +++ b/doc/examples/ex-serv-x509.c @@ -22,6 +22,10 @@ #define CRLFILE "crl.pem" #define CHECK(x) assert((x)>=0) +#define LOOP_CHECK(rval, cmd) \ + do { \ + rval = cmd; \ + } while(rval == GNUTLS_E_AGAIN || rval == GNUTLS_E_INTERRUPTED) /* The OCSP status file contains up to date information about revocation * of the server's certificate. That can be periodically be updated @@ -77,8 +81,15 @@ int main(void) OCSP_STATUS_FILE, 0)); - CHECK(gnutls_priority_init(&priority_cache, - "PERFORMANCE:%SERVER_PRECEDENCE", NULL)); + CHECK(gnutls_priority_init(&priority_cache, NULL, NULL)); + + /* Instead of the default options as shown above one could specify + * additional options such as server precedence in ciphersuite selection + * as follows: + * gnutls_priority_init2(&priority_cache, + * "%SERVER_PRECEDENCE", + * NULL, GNUTLS_PRIORITY_INIT_DEF_APPEND); + */ #if GNUTLS_VERSION_NUMBER >= 0x030506 /* only available since GnuTLS 3.5.6, on previous versions see @@ -130,11 +141,7 @@ int main(void) gnutls_transport_set_int(session, sd); - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - + LOOP_CHECK(ret, gnutls_handshake(session)); if (ret < 0) { close(sd); gnutls_deinit(session); @@ -149,7 +156,7 @@ int main(void) /* print_info(session); */ for (;;) { - ret = gnutls_record_recv(session, buffer, MAX_BUF); + LOOP_CHECK(ret, gnutls_record_recv(session, buffer, MAX_BUF)); if (ret == 0) { printf @@ -173,7 +180,7 @@ int main(void) printf("\n"); /* do not wait for the peer to close the connection. */ - CHECK(gnutls_bye(session, GNUTLS_SHUT_WR)); + LOOP_CHECK(ret, gnutls_bye(session, GNUTLS_SHUT_WR)); close(sd); gnutls_deinit(session); diff --git a/doc/examples/ex-session-info.c b/doc/examples/ex-session-info.c index 7838e43105..6c20bbeb04 100644 --- a/doc/examples/ex-session-info.c +++ b/doc/examples/ex-session-info.c @@ -16,29 +16,27 @@ */ int print_info(gnutls_session_t session) { - const char *tmp; gnutls_credentials_type_t cred; gnutls_kx_algorithm_t kx; - int dhe, ecdh; + int dhe, ecdh, group; + char *desc; + + /* get a description of the session connection, protocol, + * cipher/key exchange */ + desc = gnutls_session_get_desc(session); + if (desc != NULL) { + printf("- Session: %s\n", desc); + } dhe = ecdh = 0; - /* print the key exchange's algorithm name - */ kx = gnutls_kx_get(session); - tmp = gnutls_kx_get_name(kx); - printf("- Key Exchange: %s\n", tmp); /* Check the authentication type used and switch * to the appropriate. */ cred = gnutls_auth_get_type(session); switch (cred) { - case GNUTLS_CRD_IA: - printf("- TLS/IA session\n"); - break; - - #ifdef ENABLE_SRP case GNUTLS_CRD_SRP: printf("- SRP session with username %s\n", @@ -87,48 +85,25 @@ int print_info(gnutls_session_t session) * print some information about it. */ print_x509_certificate_info(session); - + break; + default: + break; } /* switch */ - if (ecdh != 0) - printf("- Ephemeral ECDH using curve %s\n", - gnutls_ecc_curve_get_name(gnutls_ecc_curve_get - (session))); - else if (dhe != 0) - printf("- Ephemeral DH using prime of %d bits\n", - gnutls_dh_get_prime_bits(session)); - - /* print the protocol's name (ie TLS 1.0) - */ - tmp = - gnutls_protocol_get_name(gnutls_protocol_get_version(session)); - printf("- Protocol: %s\n", tmp); - - /* print the certificate type of the peer. - * ie X.509 - */ - tmp = - gnutls_certificate_type_get_name(gnutls_certificate_type_get - (session)); - - printf("- Certificate Type: %s\n", tmp); - - /* print the compression algorithm (if any) - */ - tmp = gnutls_compression_get_name(gnutls_compression_get(session)); - printf("- Compression: %s\n", tmp); - - /* print the name of the cipher used. - * ie 3DES. - */ - tmp = gnutls_cipher_get_name(gnutls_cipher_get(session)); - printf("- Cipher: %s\n", tmp); - - /* Print the MAC algorithms name. - * ie SHA1 - */ - tmp = gnutls_mac_get_name(gnutls_mac_get(session)); - printf("- MAC: %s\n", tmp); + /* read the negotiated group - if any */ + group = gnutls_group_get(session); + if (group != 0) { + printf("- Negotiated group %s\n", + gnutls_group_get_name(group)); + } else { + if (ecdh != 0) + printf("- Ephemeral ECDH using curve %s\n", + gnutls_ecc_curve_get_name(gnutls_ecc_curve_get + (session))); + else if (dhe != 0) + printf("- Ephemeral DH using prime of %d bits\n", + gnutls_dh_get_prime_bits(session)); + } return 0; } diff --git a/doc/examples/ex-verify.c b/doc/examples/ex-verify.c index 0aa9922f81..623198793b 100644 --- a/doc/examples/ex-verify.c +++ b/doc/examples/ex-verify.c @@ -55,6 +55,7 @@ verify_certificate_chain(const char *hostname, GNUTLS_TL_VERIFY_CRL, 0)); cert = malloc(sizeof(*cert) * cert_chain_length); + assert(cert != NULL); /* Import all the certificates in the chain to * native certificate format. diff --git a/doc/examples/tlsproxy b/doc/examples/tlsproxy deleted file mode 160000 index 60f0aa01f5..0000000000 --- a/doc/examples/tlsproxy +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 60f0aa01f53faaab73f762b63c4e9d4d568f6931 diff --git a/doc/examples/tlsproxy/.gitignore b/doc/examples/tlsproxy/.gitignore new file mode 100644 index 0000000000..4716367d42 --- /dev/null +++ b/doc/examples/tlsproxy/.gitignore @@ -0,0 +1,3 @@ +*~ +*.o +tlsproxy diff --git a/doc/examples/tlsproxy/LICENSE b/doc/examples/tlsproxy/LICENSE new file mode 100644 index 0000000000..43f5934c76 --- /dev/null +++ b/doc/examples/tlsproxy/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Wrymouth Innovation Ltd + +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. diff --git a/doc/examples/tlsproxy/README.md b/doc/examples/tlsproxy/README.md new file mode 100644 index 0000000000..a34a18c55c --- /dev/null +++ b/doc/examples/tlsproxy/README.md @@ -0,0 +1,53 @@ +tlsproxy +======== + +`tlsproxy` is a TLS proxy written with GnuTLS. It is mostly designed as an +example of how to use asynchronous (non-blocking) I/O with GnuTLS. More +accurately, it was designed so I could learn how to do it. I think I've +got it right. + +To that end, it's been divided up as follows: + +* `crypto.c` does all the crypto, and `tlssession_mainloop()` does the hard work. +* `buffer.c` provides ring buffer support. +* `tlsproxy.c` deals with command line options and connecting sockets. + +It can be used in two modes: + +* Client mode (default). Listens on an unencrypted port, connects to + an encrypted port. +* Server mode (run with `-s`). Listens on an encrypted port, connects to + an unencrypted port. + +Usage +===== + +``` +tlsproxy + +Usage: + tlsproxy [OPTIONS] + +A TLS client or server proxy + +Options: + -c, --connect ADDRRESS Connect to ADDRESS + -l, --listen ADDRESS Listen on ADDRESS + -K, --key FILE Use FILE as private key + -C, --cert FILE Use FILE as public key + -A, --cacert FILE Use FILE as public CA cert file + -H, --hostname HOSTNAME Use HOSTNAME to validate the CN of the peer + rather than hostname extracted from -C option + -s, --server Run the listen port encrypted rather than the + connect port + -i, --insecure Do not validate certificates + -n, --nofork Do not fork off (aids debugging); specify twice + to stop forking on accept as well + -d, --debug Turn on debugging + -h, --help Show this usage message +``` + +License +======= + +MIT \ No newline at end of file diff --git a/doc/examples/tlsproxy/buffer.c b/doc/examples/tlsproxy/buffer.c new file mode 100644 index 0000000000..05c82121fe --- /dev/null +++ b/doc/examples/tlsproxy/buffer.c @@ -0,0 +1,228 @@ +/* + +The MIT License (MIT) + +Copyright (c) 2016 Wrymouth Innovation Ltd + +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. + +*/ + +#include "config.h" +#include + +#include "buffer.h" + +struct buffer +{ + char *buf; + ssize_t size; + ssize_t hwm; + ssize_t ridx; + ssize_t widx; + int empty; +}; + +/* the buffer is organised internally as follows: + * + * * There are b->size bytes in the buffer. + * + * * Bytes are at offsets 0 to b->size-1 + * + * * b->ridx points to the first readable byte + * + * * b->widx points to the first empty space + * + * * b->ridx < b->widx indicates a non-wrapped buffer: + * + * 0 ridx widx size + * | | | | + * V V V V + * ........XXXXXXXXX................ + * + * * b->ridx > b->widx indicates a wrapped buffer: + * + * 0 widx ridx size + * | | | | + * V V V V + * XXXXXXXX.........XXXXXXXXXXXXXXXX + * + * * b->ridx == b->widx indicates a FULL buffer: + * + * * b->ridx == b->widx indicates a wrapped buffer: + * + * 0 widx == ridx size + * | | | + * V V V + * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + * + * An empty buffer is indicated by empty=1 + * + */ + +buffer_t * +bufNew (ssize_t size, ssize_t hwm) +{ + buffer_t *b = calloc (1, sizeof (buffer_t)); + if (!b) return NULL; + + b->buf = calloc (1, size); + b->size = size; + b->hwm = hwm; + b->empty = 1; + return b; +} + + +void +bufFree (buffer_t * b) +{ + free (b->buf); + free (b); +} + +/* get a maximal span to read. Returns 0 if buffer + * is empty + */ +ssize_t +bufGetReadSpan (buffer_t * b, void **addr) +{ + if (b->empty) + { + *addr = NULL; + return 0; + } + *addr = &(b->buf[b->ridx]); + ssize_t len = b->widx - b->ridx; + if (len <= 0) + len = b->size - b->ridx; + return len; +} + +/* get a maximal span to write. Returns 0 id buffer is full + */ +ssize_t +bufGetWriteSpan (buffer_t * b, void **addr) +{ + if (b->empty) + { + *addr = b->buf; + b->ridx = 0; + b->widx = 0; + return b->size; + } + if (b->ridx == b->widx) + { + *addr = NULL; + return 0; + } + *addr = &(b->buf[b->widx]); + ssize_t len = b->ridx - b->widx; + if (len <= 0) + len = b->size - b->widx; + return len; +} + +/* mark size bytes as read */ +void +bufDoneRead (buffer_t * b, ssize_t size) +{ + while (!b->empty && (size > 0)) + { + /* empty can't occur here, so equal pointers means full */ + ssize_t len = b->widx - b->ridx; + if (len <= 0) + len = b->size - b->ridx; + + /* len is the number of bytes in one read span */ + if (len > size) + len = size; + + b->ridx += len; + if (b->ridx >= b->size) + b->ridx = 0; + + if (b->ridx == b->widx) + { + b->ridx = 0; + b->widx = 0; + b->empty = 1; + } + + size -= len; + } +} + +/* mark size bytes as written */ +void +bufDoneWrite (buffer_t * b, ssize_t size) +{ + while ((b->empty || (b->ridx != b->widx)) && (size > 0)) + { + /* full can't occur here, so equal pointers means empty */ + ssize_t len = b->ridx - b->widx; + if (len <= 0) + len = b->size - b->widx; + + /* len is the number of bytes in one write span */ + if (len > size) + len = size; + + b->widx += len; + if (b->widx >= b->size) + b->widx = 0; + + /* it can't be empty as we've written at least one byte */ + b->empty = 0; + + size -= len; + } +} + +int +bufIsEmpty (buffer_t * b) +{ + return b->empty; +} + +int +bufIsFull (buffer_t * b) +{ + return !b->empty && (b->ridx == b->widx); +} + +int +bufIsOverHWM (buffer_t * b) +{ + return bufGetCount (b) > b->hwm; +} + +ssize_t +bufGetFree (buffer_t * b) +{ + return b->size - bufGetCount (b); +} + +ssize_t +bufGetCount (buffer_t * b) +{ + if (b->empty) + return 0; + return b->widx - b->ridx + ((b->ridx < b->widx) ? 0 : b->size); +} diff --git a/doc/examples/tlsproxy/buffer.h b/doc/examples/tlsproxy/buffer.h new file mode 100644 index 0000000000..c92b9a684d --- /dev/null +++ b/doc/examples/tlsproxy/buffer.h @@ -0,0 +1,45 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 Wrymouth Innovation Ltd + +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. +*/ + +#ifndef __TLSPROXY_BUFFERS_H +#define __TLSPROXY_BUFFERS_H + +#include +#include + +typedef struct buffer buffer_t; + +buffer_t *bufNew (ssize_t size, ssize_t hwm); +void bufFree (buffer_t * b); +ssize_t bufGetReadSpan (buffer_t * b, void **addr); +ssize_t bufGetWriteSpan (buffer_t * b, void **addr); +void bufDoneRead (buffer_t * b, ssize_t size); +void bufDoneWrite (buffer_t * b, ssize_t size); +int bufIsEmpty (buffer_t * b); +int bufIsFull (buffer_t * b); +int bufIsOverHWM (buffer_t * b); +ssize_t bufGetFree (buffer_t * b); +ssize_t bufGetCount (buffer_t * b); + +#endif diff --git a/doc/examples/tlsproxy/crypto-gnutls.c b/doc/examples/tlsproxy/crypto-gnutls.c new file mode 100644 index 0000000000..0764fdf10f --- /dev/null +++ b/doc/examples/tlsproxy/crypto-gnutls.c @@ -0,0 +1,585 @@ +/* + +The MIT License (MIT) + +Copyright (c) 2016 Wrymouth Innovation Ltd + +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. + +*/ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "crypto-gnutls.h" +#include "buffer.h" + +#define FALSE 0 +#define TRUE 1 + +struct tlssession +{ + gnutls_certificate_credentials_t creds; + gnutls_session_t session; + char *hostname; + int (*quitfn) (void *opaque); + int (*erroutfn) (void *opaque, const char *format, va_list ap); + int debug; + void *opaque; +}; + +#define BUF_SIZE 65536 +#define BUF_HWM ((BUF_SIZE*3)/4) + +static int +falsequit (void *opaque) +{ + return FALSE; +} + +static int +quit (tlssession_t * s) +{ + return s->quitfn (s->opaque); +} + +#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# pragma GCC diagnostic ignored "-Wsuggest-attribute=format" +#endif + +static int stderrout (void *opaque, const char *format, va_list ap) +{ + return vfprintf (stderr, format, ap); +} + +static int +errout (tlssession_t * s, const char *format, ...) +{ + va_list ap; + int ret; + va_start (ap, format); + ret = s->erroutfn (s->opaque, format, ap); + va_end (ap); + return ret; +} + +static int +debugout (tlssession_t * s, const char *format, ...) +{ + va_list ap; + int ret = 0; + va_start (ap, format); + if (s->debug) + ret = s->erroutfn (s->opaque, format, ap); + va_end (ap); + return ret; +} + +static int +socksetnonblock (int fd, int nb) +{ + int sf = fcntl (fd, F_GETFL, 0); + if (sf == -1) + return -1; + return fcntl (fd, F_SETFL, nb ? (sf | O_NONBLOCK) : (sf & ~O_NONBLOCK)); +} + +/* From (public domain) example file in GNUTLS + * + * This function will try to verify the peer's certificate, and + * also check if the hostname matches, and the activation, expiration dates. + */ +static int +verify_certificate_callback (gnutls_session_t session) +{ + unsigned int status; + int ret; + tlssession_t *s; + + /* read session pointer */ + s = (tlssession_t *) gnutls_session_get_ptr (session); + + if (gnutls_certificate_type_get (session) != GNUTLS_CRT_X509) + return GNUTLS_E_CERTIFICATE_ERROR; + + /* This verification function uses the trusted CAs in the credentials + * structure. So you must have installed one or more CA certificates. + */ + if (s->hostname && *s->hostname) + ret = gnutls_certificate_verify_peers3 (session, s->hostname, &status); + else + ret = gnutls_certificate_verify_peers2 (session, &status); + + if (ret < 0) + { + debugout (s, "Could not verfify peer certificate due to an error\n"); + return GNUTLS_E_CERTIFICATE_ERROR; + } + + if (status) + { + gnutls_datum_t txt; + ret = gnutls_certificate_verification_status_print(status, GNUTLS_CRT_X509, + &txt, 0); + if (ret >= 0) + { + debugout (s, "verification error: %s\n", txt.data); + gnutls_free(txt.data); + } + + return GNUTLS_E_CERTIFICATE_ERROR; + } + + debugout (s, "Peer passed certificate verification\n"); + + /* notify gnutls to continue handshake normally */ + return 0; +} + +tlssession_t * +tlssession_new (int isserver, + char *keyfile, char *certfile, char *cacertfile, + char *hostname, int insecure, int debug, + int (*quitfn) (void *opaque), + int (*erroutfn) (void *opaque, const char *format, + va_list ap), void *opaque) +{ + int ret; + tlssession_t *s = calloc (1, sizeof (tlssession_t)); + if (!s) + return NULL; + + if (quitfn) + s->quitfn = quitfn; + else + s->quitfn = falsequit; + + if (erroutfn) + s->erroutfn = erroutfn; + else + s->erroutfn = stderrout; + + if (hostname) + s->hostname = strdup (hostname); + + s->debug = debug; + + if (gnutls_certificate_allocate_credentials (&s->creds) < 0) + { + errout (s, "Certificate allocation memory error\n"); + goto error; + } + + if (cacertfile != NULL) + { + ret = + gnutls_certificate_set_x509_trust_file (s->creds, cacertfile, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + { + errout (s, "Error setting the x509 trust file: %s\n", + gnutls_strerror (ret)); + goto error; + } + + if (!insecure) + { + gnutls_certificate_set_verify_function (s->creds, + verify_certificate_callback); + gnutls_certificate_set_verify_flags (s->creds, + GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT); + } + } + + if (keyfile && !certfile) + certfile = keyfile; + + if (certfile != NULL && keyfile != NULL) + { + ret = + gnutls_certificate_set_x509_key_file (s->creds, certfile, keyfile, + GNUTLS_X509_FMT_PEM); + + if (ret < 0) + { + errout (s, + "Error loading certificate or key file (%s, %s): %s\n", + certfile, keyfile, gnutls_strerror (ret)); + goto error; + } + } + + if (isserver) + ret = gnutls_init (&s->session, GNUTLS_SERVER); + else + ret = gnutls_init (&s->session, GNUTLS_CLIENT); + + if (ret < 0) + { + errout (s, "Cannot initialize GNUTLS session: %s\n", + gnutls_strerror (ret)); + goto error; + } + + gnutls_session_set_ptr (s->session, (void *) s); + + if (!isserver && s->hostname && *s->hostname) + { + ret = gnutls_server_name_set (s->session, GNUTLS_NAME_DNS, s->hostname, + strlen (s->hostname)); + if (ret < 0) + { + errout (s, "Cannot set server name: %s\n", + gnutls_strerror (ret)); + goto error; + } + } + + ret = gnutls_set_default_priority (s->session); + if (ret < 0) + { + errout (s, "Cannot set default GNUTLS session priority: %s\n", + gnutls_strerror (ret)); + goto error; + } + + ret = gnutls_credentials_set (s->session, GNUTLS_CRD_CERTIFICATE, s->creds); + if (ret < 0) + { + errout (s, "Cannot set session GNUTL credentials: %s\n", + gnutls_strerror (ret)); + goto error; + } + + if (isserver) + { + /* requests but does not check a client certificate */ + gnutls_certificate_server_set_request (s->session, GNUTLS_CERT_REQUEST); + } + + + return s; + +error: + if (s->session) + gnutls_deinit (s->session); + free (s); + return NULL; +} + +void +tlssession_close (tlssession_t * s) +{ + if (s->session) + gnutls_deinit (s->session); + free (s->hostname); + free (s); +} + +int +tlssession_init (void) +{ + return gnutls_global_init (); +} + + +int +tlssession_mainloop (int cryptfd, int plainfd, tlssession_t * s) +{ + fd_set readfds; + fd_set writefds; + int maxfd; + int tls_wr_interrupted = 0; + int plainEOF = FALSE; + int cryptEOF = FALSE; + ssize_t ret; + + buffer_t *plainToCrypt = bufNew (BUF_SIZE, BUF_HWM); + buffer_t *cryptToPlain = bufNew (BUF_SIZE, BUF_HWM); + + if (socksetnonblock (cryptfd, 0) < 0) + { + errout (s, "Could not turn on blocking: %m"); + goto error; + } + + /* set it up to work with our FD */ + gnutls_transport_set_ptr (s->session, + (gnutls_transport_ptr_t) (intptr_t) cryptfd); + + + /* Now do the handshake */ + ret = gnutls_handshake (s->session); + if (ret < 0) + { + errout (s, "TLS handshake failed: %s\n", gnutls_strerror (ret)); + goto error; + } + + if (socksetnonblock (cryptfd, 1) < 0) + { + errout (s, "Could not turn on non-blocking on crypt FD: %m"); + goto error; + } + + if (socksetnonblock (plainfd, 1) < 0) + { + errout (s, "Could not turn on non-blocking on plain FD: %m"); + goto error; + } + + maxfd = (plainfd > cryptfd) ? plainfd + 1 : cryptfd + 1; + + while ((!plainEOF || !cryptEOF) && !quit (s)) + { + struct timeval timeout; + int result; + int selecterrno; + int wait = TRUE; + + FD_ZERO (&readfds); + FD_ZERO (&writefds); + + size_t buffered = gnutls_record_check_pending (s->session); + if (buffered) + wait = FALSE; /* do not wait for select to return if we have buffered data */ + + if (plainEOF) + { + /* plain text end has closed, but me may still have + * data yet to write to the crypt end */ + if (bufIsEmpty (plainToCrypt) && !tls_wr_interrupted) + { + cryptEOF = TRUE; + break; + } + } + else + { + if (!bufIsEmpty (cryptToPlain)) + FD_SET (plainfd, &writefds); + if (!bufIsOverHWM (plainToCrypt)) + FD_SET (plainfd, &readfds); + } + + if (cryptEOF) + { + /* crypt end has closed, but me way still have data to + * write from the crypt buffer */ + if (bufIsEmpty (cryptToPlain) && !buffered) + { + plainEOF = TRUE; + break; + } + } + else + { + if (!bufIsEmpty (plainToCrypt) || tls_wr_interrupted) + FD_SET (cryptfd, &writefds); + if (!bufIsOverHWM (cryptToPlain)) + FD_SET (cryptfd, &readfds); + } + + /* Repeat select whilst EINTR happens */ + do + { + timeout.tv_sec = wait ? 1 : 0; + timeout.tv_usec = 0; + result = select (maxfd, &readfds, &writefds, NULL, &timeout); + + selecterrno = errno; + } + while ((result == -1) && (selecterrno == EINTR) && !quit (s)); + if (quit (s)) + break; + + if (FD_ISSET (plainfd, &readfds)) + { + /* we can read at least one byte */ + void *addr = NULL; + /* get a span of characters to write to the + * buffer. As the empty portion may wrap the end of the + * circular buffer this might not be all we could read. + */ + ssize_t len = bufGetWriteSpan (plainToCrypt, &addr); + if (len > 0) + { + do + { + ret = read (plainfd, addr, (size_t) len); + } + while ((ret < 0) && (errno == EINTR) && !quit (s)); + if (quit (s)) + break; + if (ret < 0) + { + errout (s, "Error on read from plain socket: %m\n"); + goto error; + } + if (ret == 0) + { + plainEOF = TRUE; + } + else + { + bufDoneWrite (plainToCrypt, ret); /* mark ret bytes as written to the buffer */ + } + } + } + + if (FD_ISSET (plainfd, &writefds)) + { + /* we can write at least one byte */ + void *addr = NULL; + /* get a span of characters to read from the buffer + * as the full portion may wrap the end of the circular buffer + * this might not be all we have to write. + */ + ssize_t len = bufGetReadSpan (cryptToPlain, &addr); + if (len > 0) + { + do + { + ret = write (plainfd, addr, (size_t) len); + } + while ((ret < 0) && (errno == EINTR) && !quit (s)); + if (quit (s)) + break; + if (ret < 0) + { + errout (s, "Error on write to plain socket: %m\n"); + goto error; + } + bufDoneRead (cryptToPlain, ret); /* mark ret bytes as read from the buffer */ + } + } + + if (FD_ISSET (cryptfd, &readfds) || buffered) + { + /* we can read at least one byte */ + void *addr = NULL; + /* get a span of characters to write to the + * buffer. As the empty portion may wrap the end of the + * circular buffer this might not be all we could read. + */ + ssize_t len = bufGetWriteSpan (cryptToPlain, &addr); + if (len > 0) + { + do + { + ret = gnutls_record_recv (s->session, addr, (size_t) len); + } + while (ret == GNUTLS_E_INTERRUPTED && !quit (s)); + /* do not loop on GNUTLS_E_AGAIN - this means we'd block so we'd loop for + * ever + */ + if (quit (s)) + break; + if (ret < 0 && ret != GNUTLS_E_AGAIN) + { + errout (s, "Error on read from crypt socket: %s\n", + gnutls_strerror (ret)); + goto error; + } + if (ret == 0) + { + cryptEOF = TRUE; + } + else + { + bufDoneWrite (cryptToPlain, ret); /* mark ret bytes as written to the buffer */ + } + } + } + + if (FD_ISSET (cryptfd, &writefds)) + { + /* we can write at least one byte */ + void *addr = NULL; + /* get a span of characters to read from the buffer + * as the full portion may wrap the end of the circular buffer + * this might not be all we have to write. + */ + ssize_t len = bufGetReadSpan (plainToCrypt, &addr); + if (len > 0) + { + do + { + if (tls_wr_interrupted) + { + ret = gnutls_record_send (s->session, NULL, 0); + } + else + { + ret = gnutls_record_send (s->session, addr, len); + } + } + while (ret == GNUTLS_E_INTERRUPTED && !quit (s)); + if (quit (s)) + break; + if (ret == GNUTLS_E_AGAIN) + { + /* we need to call this again with NULL parameters + * as it blocked + */ + tls_wr_interrupted = TRUE; + } + else if (ret < 0) + { + errout (s, "Error on write to crypto socket: %s\n", + gnutls_strerror (ret)); + goto error; + } + else + { + bufDoneRead (plainToCrypt, ret); /* mark ret bytes as read from the buffer */ + } + } + } + } + + ret = 0; + goto freereturn; + +error: + ret = -1; + +freereturn: + gnutls_bye (s->session, GNUTLS_SHUT_RDWR); + shutdown (plainfd, SHUT_RDWR); + bufFree (plainToCrypt); + bufFree (cryptToPlain); + return ret; +} diff --git a/doc/examples/tlsproxy/crypto-gnutls.h b/doc/examples/tlsproxy/crypto-gnutls.h new file mode 100644 index 0000000000..2b6c40261b --- /dev/null +++ b/doc/examples/tlsproxy/crypto-gnutls.h @@ -0,0 +1,43 @@ +/* + +The MIT License (MIT) + +Copyright (c) 2016 Wrymouth Innovation Ltd + +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. + +*/ + +#ifndef __TLSPROXY_CRYPTO_GNUTLS_H +#define __TLSPROXY_CRYPTO_GNUTLS_H + +int tlssession_init (void); + +typedef struct tlssession tlssession_t; +tlssession_t *tlssession_new (int isserver, + char *keyfile, char *certfile, char *cacertfile, + char *hostname, int insecure, int debug, + int (*quitfn) (void *opaque), + int (*erroutfn) (void *opaque, + const char *format, + va_list ap), void *opaque); +void tlssession_close (tlssession_t * s); +int tlssession_mainloop (int cryptfd, int plainfd, tlssession_t * session); + +#endif diff --git a/doc/examples/tlsproxy/tlsproxy.c b/doc/examples/tlsproxy/tlsproxy.c new file mode 100644 index 0000000000..9404d875ef --- /dev/null +++ b/doc/examples/tlsproxy/tlsproxy.c @@ -0,0 +1,456 @@ +/* + +The MIT License (MIT) + +Copyright (c) 2016 Wrymouth Innovation Ltd + +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. + +*/ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "crypto-gnutls.h" + +static char *connectaddr = NULL; +static char *listenaddr = NULL; +static char *keyfile = NULL; +static char *certfile = NULL; +static char *cacertfile = NULL; +static char *hostname = NULL; +static int debug = 0; +static int insecure = 0; +static int nofork = 0; +static int server = 0; + +static const char *defaultport = "12345"; + +static volatile sig_atomic_t rxsigquit = 0; + +static int +bindtoaddress (char *addrport) +{ + struct addrinfo hints; + struct addrinfo *result, *rp; + int fd, s; + char addr[128]; + + snprintf(addr, sizeof(addr), "%s", addrport); + + memset (&hints, 0, sizeof (struct addrinfo)); + hints.ai_flags = AI_PASSIVE; /* For wildcard IP address */ + hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ + hints.ai_socktype = SOCK_STREAM; /* Stream socket */ + hints.ai_protocol = 0; /* any protocol */ + + char *colon = strrchr (addr, ':'); + const char *port = defaultport; + if (colon) + { + *colon = 0; + port = colon + 1; + } + + s = getaddrinfo (addr, port, &hints, &result); + if (s != 0) + { + fprintf (stderr, "Error in address %s: %s\n", addr, gai_strerror (s)); + return -1; + } + + /* attempt to bind to each address */ + + for (rp = result; rp != NULL; rp = rp->ai_next) + { + fd = socket (rp->ai_family, rp->ai_socktype, rp->ai_protocol); + + if (fd >= 0) + { + int one = 1; + if (setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof (one)) < + 0) + { + close (fd); + continue; + } + if (bind (fd, rp->ai_addr, rp->ai_addrlen) == 0) + break; + close (fd); + } + } + + if (!rp) + { + fprintf (stderr, "Error binding to %s:%s: %m\n", addr, port); + return -1; + } + + freeaddrinfo (result); /* No longer needed */ + + if (listen (fd, 5) < 0) + { + close (fd); + return -1; + } + + return fd; +} + +static int +connecttoaddress (char *addrport) +{ + struct addrinfo hints; + struct addrinfo *result, *rp; + int fd, s; + char addr[128]; + + snprintf(addr, sizeof(addr), "%s", addrport); + + memset (&hints, 0, sizeof (struct addrinfo)); + hints.ai_flags = AI_PASSIVE; /* For wildcard IP address */ + hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ + hints.ai_socktype = SOCK_STREAM; /* Stream socket */ + hints.ai_protocol = 0; /* any protocol */ + + char *colon = strrchr (addr, ':'); + const char *port = defaultport; + if (colon) + { + *colon = 0; + port = colon + 1; + } + + if (!hostname && !server) + hostname = strdup (addr); + + s = getaddrinfo (addr, port, &hints, &result); + if (s != 0) + { + fprintf (stderr, "Error in address %s: %s\n", addr, gai_strerror (s)); + return -1; + } + + /* attempt to connect to each address */ + for (rp = result; rp != NULL; rp = rp->ai_next) + { + fd = socket (rp->ai_family, rp->ai_socktype, rp->ai_protocol); + if (fd >= 0) + { + if (connect (fd, rp->ai_addr, rp->ai_addrlen) == 0) + break; + close (fd); + } + } + + if (!rp) + { + fprintf (stderr, "Error connecting to %s:%s: %m\n", addr, port); + return -1; + } + + freeaddrinfo (result); /* No longer needed */ + + return fd; +} + +static int +quitfn (void *opaque) +{ + return rxsigquit; +} + +static int +runproxy (int acceptfd) +{ + int connectfd; + if ((connectfd = connecttoaddress (connectaddr)) < 0) + { + fprintf (stderr, "Could not connect\n"); + close (acceptfd); + return -1; + } + + tlssession_t *session = + tlssession_new (server, keyfile, certfile, cacertfile, hostname, insecure, + debug, quitfn, NULL, NULL); + if (!session) + { + fprintf (stderr, "Could create TLS session\n"); + close (connectfd); + close (acceptfd); + return -1; + } + + int ret; + if (server) + ret = tlssession_mainloop (acceptfd, connectfd, session); + else + ret = tlssession_mainloop (connectfd, acceptfd, session); + + tlssession_close (session); + close (connectfd); + close (acceptfd); + + if (ret < 0) + { + fprintf (stderr, "TLS proxy exited with an error\n"); + return -1; + } + return 0; +} + +static int +runlistener (void) +{ + int listenfd; + if ((listenfd = bindtoaddress (listenaddr)) < 0) + { + fprintf (stderr, "Could not bind listener\n"); + return -1; + } + + /* + if (!nofork) + daemon (FALSE, FALSE); + */ + + int fd; + while (!rxsigquit) + { + do + { + if ((fd = accept (listenfd, NULL, NULL)) < 0) + { + if (errno != EINTR) + { + fprintf (stderr, "Accept failed\n"); + return -1; + } + } + } + while (fd < 0 && !rxsigquit); + if (rxsigquit) + break; + if (nofork < 2) + { + int ret = runproxy (fd); + if (ret < 0) + return -1; + } + else + { + int cpid = fork (); + if (cpid == 0) + { + /* we're the child */ + runproxy (fd); + exit (0); + } + else + close (fd); + } + } + return 0; +} + +static void +usage (void) +{ + fprintf (stderr, "tlsproxy\n\n\ +Usage:\n\ + tlsproxy [OPTIONS]\n\ +\n\ +A TLS client or server proxy\n\ +\n\ +Options:\n\ + -c, --connect ADDRRESS Connect to ADDRESS\n\ + -l, --listen ADDRESS Listen on ADDRESS\n\ + -K, --key FILE Use FILE as private key\n\ + -C, --cert FILE Use FILE as public key\n\ + -A, --cacert FILE Use FILE as public CA cert file\n\ + -H, --hostname HOSTNAME Use HOSTNAME to validate the CN of the peer\n\ + rather than hostname extracted from -C option\n\ + -s, --server Run the listen port encrypted rather than the\n\ + connect port\n\ + -i, --insecure Do not validate certificates\n\ + -n, --nofork Do not fork off (aids debugging); specify twice\n\ + to stop forking on accept as well\n\ + -d, --debug Turn on debugging\n\ + -h, --help Show this usage message\n\ +\n\ +\n"); +} + +static void +processoptions (int argc, char **argv) +{ + while (1) + { + static const struct option longopts[] = { + {"connect", required_argument, 0, 'c'}, + {"listen", required_argument, 0, 'l'}, + {"key", required_argument, 0, 'K'}, + {"cert", required_argument, 0, 'C'}, + {"cacert", required_argument, 0, 'A'}, + {"hostname", required_argument, 0, 'H'}, + {"server", no_argument, 0, 's'}, + {"insecure", no_argument, 0, 'i'}, + {"nofork", no_argument, 0, 'n'}, + {"debug", no_argument, 0, 'd'}, + {"help", no_argument, 0, 'h'}, + {0, 0, 0, 0} + }; + + int optidx = 0; + + int c = + getopt_long (argc, argv, "c:l:K:C:A:H:sindh", longopts, &optidx); + if (c == -1) + break; + + switch (c) + { + case 0: /* set a flag, nothing else to do */ + break; + + case 'c': + connectaddr = strdup (optarg); + break; + + case 'l': + listenaddr = strdup (optarg); + break; + + case 'K': + keyfile = strdup (optarg); + break; + + case 'C': + certfile = strdup (optarg); + break; + + case 'A': + cacertfile = strdup (optarg); + break; + + case 'H': + hostname = strdup (optarg); + break; + + case 's': + server = 1; + break; + + case 'i': + insecure = 1; + break; + + case 'n': + nofork++; + break; + + case 'd': + debug++; + break; + + case 'h': + usage (); + exit (0); + break; + + default: + usage (); + exit (1); + } + } + + if (optind != argc || !connectaddr || !listenaddr) + { + usage (); + exit (1); + } + + if (!certfile && keyfile) + certfile = strdup (keyfile); +} + +static void +handlesignal (int sig) +{ + switch (sig) + { + case SIGINT: + case SIGTERM: + rxsigquit++; + break; + default: + break; + } +} + +static void +setsignalmasks (void) +{ + struct sigaction sa; + /* Set up the structure to specify the new action. */ + memset (&sa, 0, sizeof (struct sigaction)); + sa.sa_handler = handlesignal; + sigemptyset (&sa.sa_mask); + sa.sa_flags = 0; + sigaction (SIGINT, &sa, NULL); + sigaction (SIGTERM, &sa, NULL); + + memset (&sa, 0, sizeof (struct sigaction)); + sa.sa_handler = SIG_IGN; + sa.sa_flags = SA_RESTART; + sigaction (SIGPIPE, &sa, NULL); +} + +int +main (int argc, char **argv) +{ + processoptions (argc, argv); + + setsignalmasks (); + + if (tlssession_init ()) + exit (1); + + runlistener (); + + free (connectaddr); + free (listenaddr); + free (keyfile); + free (certfile); + free (cacertfile); + free (hostname); + + exit (0); +} diff --git a/doc/examples/udp.c b/doc/examples/udp.c index 184f31718d..989ffcc6bf 100644 --- a/doc/examples/udp.c +++ b/doc/examples/udp.c @@ -24,7 +24,10 @@ extern int udp_connect(void) { const char *PORT = "5557"; const char *SERVER = "127.0.0.1"; - int err, sd, optval; + int err, sd; +#if defined(IP_DONTFRAG) || defined(IP_MTU_DISCOVER) + int optval; +#endif struct sockaddr_in sa; /* connects to server diff --git a/doc/fdl-1.3.texi b/doc/fdl-1.3.texi index 3a74be0f70..eaf3da0e92 100644 --- a/doc/fdl-1.3.texi +++ b/doc/fdl-1.3.texi @@ -6,7 +6,7 @@ @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. -@uref{http://fsf.org/} +@uref{https://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -97,7 +97,7 @@ format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and -JPG. Opaque formats include proprietary formats that can be +JPG@. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, @@ -414,7 +414,7 @@ The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See -@uref{http://www.gnu.org/copyleft/}. +@uref{https://www.gnu.org/licenses/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this @@ -468,7 +468,7 @@ To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: -@example +@smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document @@ -478,18 +478,18 @@ license notices just after the title page: Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group -@end example +@end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.''@: line with this: -@example +@smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group -@end example +@end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the @@ -503,4 +503,3 @@ to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: - diff --git a/doc/gendocs_template b/doc/gendocs_template deleted file mode 100644 index 3613c58fe0..0000000000 --- a/doc/gendocs_template +++ /dev/null @@ -1,98 +0,0 @@ - - -%%TITLE%% - GNU Project - Free Software Foundation - -

%%TITLE%%

- -
Free Software Foundation
-
last updated %%DATE%%
- -

This manual (%%PACKAGE%%) is available in the following formats:

- - - -

You can buy printed copies of -some manuals (among other items) from the Free Software Foundation; -this helps support FSF activities.

- -

There is also an API reference manual:

- - - -

(This page generated by the %%SCRIPTNAME%% -script.)

- - - - - - - - diff --git a/doc/gnutls-guile.texi b/doc/gnutls-guile.texi index 2488b62f70..3e0b64d7eb 100644 --- a/doc/gnutls-guile.texi +++ b/doc/gnutls-guile.texi @@ -17,7 +17,7 @@ This manual is last updated @value{UPDATED} for version @value{VERSION} of GnuTLS. -Copyright @copyright{} 2001-2012, 2014, 2016 Free Software Foundation, Inc. +Copyright @copyright{} 2001-2012, 2014, 2016, 2019 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document @@ -71,9 +71,9 @@ Documentation License''. @node Preface @chapter Preface -This manual describes the @uref{http://www.gnu.org/software/guile/, +This manual describes the @uref{https://www.gnu.org/software/guile/, GNU Guile} Scheme programming interface to GnuTLS, which is distributed -as part of @uref{http://gnutls.org,GnuTLS}. The reader is +as part of @uref{https://gnutls.org,GnuTLS}. The reader is assumed to have basic knowledge of the protocol and library. Details missing from this chapter may be found in Function reference, of the C API reference. @@ -85,8 +85,8 @@ a large subset thereof is available. @node Guile Preparations @chapter Guile Preparations -The GnuTLS Guile bindings are available for Guile's 2.0 stable series, -as well as the forthcoming 2.2 series and the legacy 1.8 series. +The GnuTLS Guile bindings are available for the Guile 3.0 and 2.2 +series, as well as the legacy 2.0 and even 1.8 series. By default they are installed under the GnuTLS installation directory, typically @file{/usr/local/share/guile/site/}). Normally Guile @@ -369,7 +369,7 @@ Once a TLS session is established, data can be communicated through it (bye session close-request/rdwr)))) @end example -@c See for details. +@c See for details. @cindex buffering Note that each write to the session record port leads to the transmission of an encrypted TLS ``Application Data'' packet. In the diff --git a/doc/gnutls.texi b/doc/gnutls.texi index e7359c599b..b2291a6867 100644 --- a/doc/gnutls.texi +++ b/doc/gnutls.texi @@ -16,8 +16,8 @@ This manual is last updated @value{UPDATED} for version @value{VERSION} of GnuTLS. -Copyright @copyright{} 2001-2017 Free Software Foundation, Inc.\\ -Copyright @copyright{} 2001-2017 Nikos Mavrogiannopoulos +Copyright @copyright{} 2001-2020 Free Software Foundation, Inc.\\ +Copyright @copyright{} 2001-2020 Nikos Mavrogiannopoulos @quotation Permission is granted to copy, distribute and/or modify this document @@ -36,12 +36,12 @@ Documentation License''. @dircategory System Administration @direntry -* certtool: (gnutls)Invoking certtool. Manipulate certificates and keys. -* gnutls-serv: (gnutls)Invoking gnutls-serv. GnuTLS test server. -* gnutls-cli: (gnutls)Invoking gnutls-cli. GnuTLS test client. -* gnutls-cli-debug: (gnutls)Invoking gnutls-cli-debug. GnuTLS debug client. -* psktool: (gnutls)Invoking psktool. Simple TLS-Pre-Shared-Keys manager. -* srptool: (gnutls)Invoking srptool. Simple SRP password tool. +* certtool: (gnutls)certtool Invocation. Manipulate certificates and keys. +* gnutls-serv: (gnutls)gnutls-serv Invocation. GnuTLS test server. +* gnutls-cli: (gnutls)gnutls-cli Invocation. GnuTLS test client. +* gnutls-cli-debug: (gnutls)gnutls-cli-debug Invocation. GnuTLS debug client. +* psktool: (gnutls)psktool Invocation. Simple TLS-Pre-Shared-Keys manager. +* srptool: (gnutls)srptool Invocation. Simple SRP password tool. @end direntry @titlepage @@ -63,7 +63,7 @@ Documentation License''. @end macro @macro xcite{ref} -[@emph{\ref\}] +[@ref{\ref\}] @end macro @macro funcref{ref} @@ -153,6 +153,7 @@ Documentation License''. * Hardware security modules and abstract key types:: * How to use GnuTLS in applications:: * GnuTLS application examples:: +* System-wide configuration of the library:: * Using GnuTLS as a cryptographic library:: * Other included programs:: * Internal architecture of GnuTLS:: @@ -182,6 +183,8 @@ Documentation License''. @include cha-gtls-examples.texi +@include cha-config.texi + @include cha-crypto.texi @include cha-programs.texi diff --git a/doc/latex/Makefile.am b/doc/latex/Makefile.am index 2ae3dff025..7056d56858 100644 --- a/doc/latex/Makefile.am +++ b/doc/latex/Makefile.am @@ -8,7 +8,7 @@ GEN_TEX_OBJECTS = cha-preface.tex cha-library.tex cha-intro-tls.tex cha-cert-aut invoke-certtool.tex invoke-gnutls-cli.tex invoke-gnutls-serv.tex cha-tokens.tex \ invoke-srptool.tex invoke-psktool.tex invoke-gnutls-cli-debug.tex \ invoke-p11tool.tex invoke-ocsptool.tex invoke-tpmtool.tex invoke-danetool.tex \ - cha-auth.tex + cha-auth.tex cha-crypto.tex invoke-certtool.tex: ../invoke-certtool.texi ../scripts/mytexi2latex $< > $@ @@ -76,6 +76,9 @@ cha-gtls-examples.tex: ../cha-gtls-examples.texi sec-tls-app.tex: ../sec-tls-app.texi ../scripts/mytexi2latex $< > $@ +cha-crypto.tex: ../cha-crypto.texi + ../scripts/mytexi2latex $< > $@ + cha-programs.tex: ../cha-programs.texi ../scripts/mytexi2latex $< > $@ diff --git a/doc/latex/cover.tex b/doc/latex/cover.tex index d3de705435..26a4487d33 100644 --- a/doc/latex/cover.tex +++ b/doc/latex/cover.tex @@ -13,7 +13,7 @@ \begin{flushleft} ISBN 978-1-326-00266-4\\ Copyright \copyright{} 2001-2015 Free Software Foundation, Inc.\\ -Copyright \copyright{} 2001-2015 Nikos Mavrogiannopoulos +Copyright \copyright{} 2001-2019 Nikos Mavrogiannopoulos \end{flushleft} \begin{flushleft} diff --git a/doc/latex/fdl.tex b/doc/latex/fdl.tex index 1b2ea6ea2c..f6d191326c 100644 --- a/doc/latex/fdl.tex +++ b/doc/latex/fdl.tex @@ -13,7 +13,7 @@ \chapter*{\rlap{GNU Free Documentation License}} \bigskip - \url{http://fsf.org/} + \url{https://fsf.org/} \bigskip @@ -483,7 +483,7 @@ \chapter*{\rlap{GNU Free Documentation License}} of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See -http://www.gnu.org/copyleft/. +https://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this diff --git a/doc/latex/gnutls.bib b/doc/latex/gnutls.bib index c1de769df8..a30f079f3d 100644 --- a/doc/latex/gnutls.bib +++ b/doc/latex/gnutls.bib @@ -3,8 +3,78 @@ @Misc{KEYPIN title = "{Public Key Pinning Extension for HTTP}", month = "December", year = "2011", - note = "Available from \url{http://tools.ietf.org/html/draft-ietf-websec-key-pinning-01}", - url = "http://tools.ietf.org/html/draft-ietf-websec-key-pinning-01" + note = "Available from \url{https://tools.ietf.org/html/draft-ietf-websec-key-pinning-01}", + url = "https://tools.ietf.org/html/draft-ietf-websec-key-pinning-01" +} + +@misc{RFC6083, + author = {M. Tuexen and R. Seggelmann and E. Rescorla}, + title = {Datagram Transport Layer Security (DTLS) for Stream Control Transmission Protocol (SCTP)}, + series="Request for Comments", + howpublished="RFC 6083", + number = {6083}, + year = {2011}, + month = {January}, + issn = {2070-1721}, + publisher = {RFC Editor}, + institution = {RFC Editor}, + url = {https://www.rfc-editor.org/rfc/rfc6083.txt}, + note = {\url{https://www.rfc-editor.org/rfc/rfc6083.txt}}, +} + +@misc{RFC7413, + author = {Y. Cheng and J. Chu and S. Radhakrishnan and A. Jain}, + title = {TCP Fast Open}, + series="Request for Comments", + howpublished="RFC 7413", + number = {7413}, + year = {2014}, + month = {December}, + issn = {2070-1721}, + publisher = {RFC Editor}, + institution = {RFC Editor}, + url = {https://www.rfc-editor.org/rfc/rfc7413.txt}, +} + +@misc{RFC7633, + author = {P. Hallam-Baker}, + title = {X.509v3 Transport Layer Security (TLS) Feature Extension}, + series="Request for Comments", + howpublished="RFC 7633", + number = {7633}, + year = {2015}, + month = {October}, + issn = {2070-1721}, + publisher = {RFC Editor}, + institution = {RFC Editor}, +} + +@misc{RFC7918, + author = {A. Langley and N. Modadugu and B. Moeller}, + title = {Transport Layer Security (TLS) False Start}, + series="Request for Comments", + howpublished="RFC 7918", + number = {7918}, + year = {2016}, + month = {August}, + issn = {2070-1721}, + publisher = {RFC Editor}, + institution = {RFC Editor}, + url = {https://www.rfc-editor.org/rfc/rfc7918.txt}, +} + +@misc{RFC5764, + author = {D. McGrew and E. Rescorla}, + title = {Datagram Transport Layer Security (DTLS) Extension to Establish Keys for the Secure Real-time Transport Protocol (SRTP)}, + series="Request for Comments", + howpublished="RFC 5764", + number = {5764}, + year = {2010}, + month = {May}, + issn = {2070-1721}, + publisher = {RFC Editor}, + institution = {RFC Editor}, + url = {https://www.rfc-editor.org/rfc/rfc5764.txt}, } @misc{rfc7919, @@ -17,7 +87,7 @@ @misc{rfc7919 organization="Internet Engineering Task Force", year=2016, month=aug, - url="http://www.ietf.org/rfc/rfc7919.txt", + url="https://www.ietf.org/rfc/rfc7919.txt", } @misc{RFC5280, @@ -30,7 +100,7 @@ @misc{RFC5280 organization="Internet Engineering Task Force", year=2008, month=may, - note="Available from \url{http://www.ietf.org/rfc/rfc5280}", + note="Available from \url{https://www.ietf.org/rfc/rfc5280}", } @misc{rfc7301, @@ -43,16 +113,7 @@ @misc{rfc7301 organization="Internet Engineering Task Force", year=2014, month=jul, - note="Available from \url{http://www.ietf.org/rfc/rfc7301}", -} - -@Misc{ RFC5764, - author = "David McGrew and Eric Rescorla", - title = "{Datagram Transport Layer Security (DTLS) Extension to Establish Keys for the Secure Real-time Transport Protocol (SRTP)}", - month = "May", - year = "2010", - note = "Available from \url{http://www.ietf.org/rfc/rfc5764}", - url = "http://www.ietf.org/rfc/rfc5764" + note="Available from \url{https://www.ietf.org/rfc/rfc7301}", } @Misc{ RFC7613, @@ -60,8 +121,8 @@ @Misc{ RFC7613 title = "{Preparation, Enforcement, and Comparison of Internationalized Strings Representing Usernames and Passwords}", month = "August", year = "2015", - note = "Available from \url{http://www.ietf.org/rfc/rfc7613}", - url = "http://www.ietf.org/rfc/rfc7613" + note = "Available from \url{https://www.ietf.org/rfc/rfc7613}", + url = "https://www.ietf.org/rfc/rfc7613" } @Misc{ RFC6125, @@ -69,8 +130,8 @@ @Misc{ RFC6125 title = "{Representation and Verification of Domain-Based Application Service Identity within Internet Public Key Infrastructure Using X.509 (PKIX) Certificates in the Context of Transport Layer Security (TLS)}", month = "March", year = "2011", - note = "Available from \url{http://www.ietf.org/rfc/rfc6125}", - url = "http://www.ietf.org/rfc/rfc6125" + note = "Available from \url{https://www.ietf.org/rfc/rfc6125}", + url = "https://www.ietf.org/rfc/rfc6125" } @Misc{ RFC7685, @@ -78,16 +139,16 @@ @Misc{ RFC7685 title = "{A Transport Layer Security (TLS) ClientHello Padding Extension}", month = "October", year = "2015", - note = "Available from \url{http://www.ietf.org/rfc/rfc7685}", - url = "http://www.ietf.org/rfc/rfc7685" + note = "Available from \url{https://www.ietf.org/rfc/rfc7685}", + url = "https://www.ietf.org/rfc/rfc7685" } @Misc{ RFC2246 , author = "Tim Dierks and Christopher Allen", title = "{The TLS Protocol Version 1.0}", month = "January", year = "1999", - note = "Available from \url{http://www.ietf.org/rfc/rfc2246}", - url = "http://www.ietf.org/rfc/rfc2246" + note = "Available from \url{https://www.ietf.org/rfc/rfc2246}", + url = "https://www.ietf.org/rfc/rfc2246" } @Misc{ RFC6520, @@ -95,8 +156,8 @@ @Misc{ RFC6520 title = "{Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) Heartbeat Extension}", month = "February", year = "2012", - note = "Available from \url{http://www.ietf.org/rfc/rfc6520}", - url = "http://www.ietf.org/rfc/rfc6520" + note = "Available from \url{https://www.ietf.org/rfc/rfc6520}", + url = "https://www.ietf.org/rfc/rfc6520" } @Misc{ RFC4680, @@ -104,8 +165,8 @@ @Misc{ RFC4680 title = "{TLS Handshake Message for Supplemental Data}", month = "September", year = "2006", - note = "Available from \url{http://www.ietf.org/rfc/rfc4680}", - url = "http://www.ietf.org/rfc/rfc4680" + note = "Available from \url{https://www.ietf.org/rfc/rfc4680}", + url = "https://www.ietf.org/rfc/rfc4680" } @Misc{ RFC4514, @@ -113,8 +174,8 @@ @Misc{ RFC4514 title = "{Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names}", month = "June", year = "2006", - note = "Available from \url{http://www.ietf.org/rfc/rfc4514}", - url = "http://www.ietf.org/rfc/rfc4514" + note = "Available from \url{https://www.ietf.org/rfc/rfc4514}", + url = "https://www.ietf.org/rfc/rfc4514" } @Misc{ RIVESTCRL, @@ -122,8 +183,8 @@ @Misc{ RIVESTCRL title = "{Can We Eliminate Certificate Revocation Lists?}", month = "February", year = "1998", - note = "Available from \url{http://people.csail.mit.edu/rivest/Rivest-CanWeEliminateCertificateRevocationLists.pdf}", - url = "http://people.csail.mit.edu/rivest/Rivest-CanWeEliminateCertificateRevocationLists.pdf" + note = "Available from \url{https://people.csail.mit.edu/rivest/Rivest-CanWeEliminateCertificateRevocationLists.pdf}", + url = "https://people.csail.mit.edu/rivest/Rivest-CanWeEliminateCertificateRevocationLists.pdf" } @misc{RFC3820, @@ -131,8 +192,8 @@ @misc{RFC3820 title="Internet {X.509} Public Key Infrastructure {(PKI)} Proxy Certificate Profile", month="June", year=2004, - note = "Available from \url{http://www.ietf.org/rfc/rfc3820}", - url = "http://www.ietf.org/rfc/rfc3820" + note = "Available from \url{https://www.ietf.org/rfc/rfc3820}", + url = "https://www.ietf.org/rfc/rfc3820" } @misc{RFC2560, @@ -140,8 +201,8 @@ @misc{RFC2560 title="{X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP}", month="June", year=1999, - note = "Available from \url{http://www.ietf.org/rfc/rfc2560}", - url = "http://www.ietf.org/rfc/rfc2560" + note = "Available from \url{https://www.ietf.org/rfc/rfc2560}", + url = "https://www.ietf.org/rfc/rfc2560" } @misc{RFC5746, @@ -149,8 +210,8 @@ @misc{RFC5746 title = "Transport Layer Security {(TLS)} Renegotiation Indication Extension", month ="February", year=2010, - note = "Available from \url{http://www.ietf.org/rfc/rfc5746}", - url = "http://www.ietf.org/rfc/rfc5746" + note = "Available from \url{https://www.ietf.org/rfc/rfc5746}", + url = "https://www.ietf.org/rfc/rfc5746" } @Misc{TLSTKT, @@ -158,14 +219,14 @@ @Misc{TLSTKT title = "Transport Layer Security {(TLS)} Session Resumption without Server-Side State", month="January", year="2008", - note = "Available from \url{http://www.ietf.org/rfc/rfc5077}", - url = "http://www.ietf.org/rfc/rfc5077" + note = "Available from \url{https://www.ietf.org/rfc/rfc5077}", + url = "https://www.ietf.org/rfc/rfc5077" } @Misc{PKCS11, publisher = "RSA Laboratories", title = "{PKCS \#11 Base Functionality v2.30: Cryptoki – Draft 4}", - url = "http://www.rsa.com", + url = "https://www.rsa.com", month="July", year=2009 } @@ -173,7 +234,7 @@ @Misc{PKCS11 @Misc{ECRYPT, publisher = "European Network of Excellence in Cryptology II", title = "{ECRYPT II Yearly Report on Algorithms and Keysizes (2009-2010)}", - url = "http://www.ecrypt.eu.org/documents/D.SPA.13.pdf", + url = "https://www.ecrypt.eu.org/documents/D.SPA.13.pdf", year=2010 } @@ -181,7 +242,7 @@ @misc{NISTSP80057 title="{NIST Special Publication 800-57, Recommendation for Key Management - Part 1: General (Revised)}", month="March", year="2007", - url="http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf" + url="https://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf" } @Misc{ RFC5246, @@ -189,8 +250,8 @@ @Misc{ RFC5246 title = "{The TLS Protocol Version 1.2}", month = "August", year = "2008", - note = "Available from \url{http://www.ietf.org/rfc/rfc5246}", - url = "http://www.ietf.org/rfc/rfc5246" + note = "Available from \url{https://www.ietf.org/rfc/rfc5246}", + url = "https://www.ietf.org/rfc/rfc5246" } @Misc{ WEGER, @@ -198,8 +259,8 @@ @Misc{ WEGER title = "{Colliding X.509 Certificates}", publisher = "Cryptology ePrint Archive, Report 2005/067", year = "2005", - note = "Available from \url{http://eprint.iacr.org/2005/067}", - url = "http://eprint.iacr.org/2005/067" + note = "Available from \url{https://eprint.iacr.org/2005/067}", + url = "https://eprint.iacr.org/2005/067" } @Misc{ RFC3749, @@ -207,8 +268,8 @@ @Misc{ RFC3749 title = "Transport Layer Security Protocol Compression Methods", month = "May", year = "2004", - note = "Available from \url{http://www.ietf.org/rfc/rfc3749}", - url = "http://www.ietf.org/rfc/rfc3749" + note = "Available from \url{https://www.ietf.org/rfc/rfc3749}", + url = "https://www.ietf.org/rfc/rfc3749" } @Misc{ RFC4347, @@ -216,8 +277,8 @@ @Misc{ RFC4347 title = "Datagram Transport Layer Security", month = "April", year = "2006", - note = "Available from \url{http://www.ietf.org/rfc/rfc4347}", - url = "http://www.ietf.org/rfc/rfc4347" + note = "Available from \url{https://www.ietf.org/rfc/rfc4347}", + url = "https://www.ietf.org/rfc/rfc4347" } @Misc{ RFC4346, @@ -225,8 +286,8 @@ @Misc{ RFC4346 title = "The {TLS} Protocol Version 1.1", month = "April", year = "2006", - note = "Available from \url{http://www.ietf.org/rfc/rfc4346}", - url = "http://www.ietf.org/rfc/rfc4346" + note = "Available from \url{https://www.ietf.org/rfc/rfc4346}", + url = "https://www.ietf.org/rfc/rfc4346" } @Misc{ RFC2440, @@ -234,8 +295,8 @@ @Misc{ RFC2440 title = "{OpenPGP} Message Format", month = "November", year = "2007", - note = "Available from \url{http://www.ietf.org/rfc/rfc4880}", - url = "http://www.ietf.org/rfc/rfc4880" + note = "Available from \url{https://www.ietf.org/rfc/rfc4880}", + url = "https://www.ietf.org/rfc/rfc4880" } @Misc{ RFC2511, @@ -243,8 +304,8 @@ @Misc{ RFC2511 title = "Internet {X.509} Certificate Request Message Format", month = "March", year = "1999", - note = "Available from \url{http://www.ietf.org/rfc/rfc2511}", - url = "http://www.ietf.org/rfc/rfc2511" + note = "Available from \url{https://www.ietf.org/rfc/rfc2511}", + url = "https://www.ietf.org/rfc/rfc2511" } @Misc{ RFC2817, @@ -252,8 +313,8 @@ @Misc{ RFC2817 title = "Upgrading to {TLS} Within {HTTP/1.1}", month = "May", year = "2000", - note = "Available from \url{http://www.ietf.org/rfc/rfc2817}", - url = "http://www.ietf.org/rfc/rfc2817" + note = "Available from \url{https://www.ietf.org/rfc/rfc2817}", + url = "https://www.ietf.org/rfc/rfc2817" } @Misc{ RFC2818, @@ -261,8 +322,8 @@ @Misc{ RFC2818 title = "{HTTP over TLS}", month = "May", year = "2000", - note = "Available from \url{http://www.ietf.org/rfc/rfc2818}", - url = "http://www.ietf.org/rfc/rfc2818" + note = "Available from \url{https://www.ietf.org/rfc/rfc2818}", + url = "https://www.ietf.org/rfc/rfc2818" } @Misc{ RFC2945, @@ -270,8 +331,8 @@ @Misc{ RFC2945 title = "The {SRP} Authentication and Key Exchange System", month = "September", year = "2000", - note = "Available from \url{http://www.ietf.org/rfc/rfc2945}", - url = "http://www.ietf.org/rfc/rfc2945" + note = "Available from \url{https://www.ietf.org/rfc/rfc2945}", + url = "https://www.ietf.org/rfc/rfc2945" } @Misc{ RFC2986, @@ -279,8 +340,8 @@ @Misc{ RFC2986 title = "{PKCS 10 v1.7:} Certification Request Syntax Specification", month = "November", year = "2000", - note = "Available from \url{http://www.ietf.org/rfc/rfc2986}", - url = "http://www.ietf.org/rfc/rfc2986" + note = "Available from \url{https://www.ietf.org/rfc/rfc2986}", + url = "https://www.ietf.org/rfc/rfc2986" } @Misc{PKIX, @@ -288,8 +349,8 @@ @Misc{PKIX title = "Internet {X.509} Public Key Infrastructure Certificate and Certificate Revocation List {(CRL)} Profile", month = "April", year = "2002", - note = "Available from \url{http://www.ietf.org/rfc/rfc3280}", - url = "http://www.ietf.org/rfc/rfc3280" + note = "Available from \url{https://www.ietf.org/rfc/rfc3280}", + url = "https://www.ietf.org/rfc/rfc3280" } @Misc{SSL3, @@ -297,8 +358,8 @@ @Misc{SSL3 title = "The Secure Sockets Layer (SSL) Protocol Version 3.0", month = "August", year = "2011", - note = "Available from \url{http://www.ietf.org/rfc/rfc6101}", - url = "http://www.ietf.org/rfc/rfc6101" + note = "Available from \url{https://www.ietf.org/rfc/rfc6101}", + url = "https://www.ietf.org/rfc/rfc6101" } @Misc{PKCS12, @@ -319,8 +380,8 @@ @Misc{ TLSEXT title = "Transport Layer Security {(TLS)} Extensions", month = "June", year = "2003", - note = "Available from \url{http://www.ietf.org/rfc/rfc3546}", - url = "http://www.ietf.org/rfc/rfc3546" + note = "Available from \url{https://www.ietf.org/rfc/rfc3546}", + url = "https://www.ietf.org/rfc/rfc3546" } @Misc{ TLSSRP, @@ -328,8 +389,8 @@ @Misc{ TLSSRP title = "Using {SRP for TLS} Authentication", month = "November", year = "2007", - note = "Available from \url{http://www.ietf.org/rfc/rfc5054}", - url = "http://www.ietf.org/rfc/rfc5054" + note = "Available from \url{https://www.ietf.org/rfc/rfc5054}", + url = "https://www.ietf.org/rfc/rfc5054" } @Misc{ RFC5056, @@ -337,8 +398,8 @@ @Misc{ RFC5056 title = "On the Use of Channel Bindings to Secure Channels", month = "November", year = "2007", - note = "Available from \url{http://www.ietf.org/rfc/rfc5056}", - url = "http://www.ietf.org/rfc/rfc5056" + note = "Available from \url{https://www.ietf.org/rfc/rfc5056}", + url = "https://www.ietf.org/rfc/rfc5056" } @Misc{ RFC5929, @@ -346,8 +407,8 @@ @Misc{ RFC5929 title = "Channel Bindings for {TLS}", month = "July", year = "2010", - note = "Available from \url{http://www.ietf.org/rfc/rfc5929}", - url = "http://www.ietf.org/rfc/rfc5929" + note = "Available from \url{https://www.ietf.org/rfc/rfc5929}", + url = "https://www.ietf.org/rfc/rfc5929" } @Misc{ TLSPSK, @@ -355,8 +416,8 @@ @Misc{ TLSPSK title = "Pre-shared key Ciphersuites for {TLS}", month = "December", year = "2005", - note = "Available from http://www.ietf.org/rfc/rfc4279", - url = "http://www.ietf.org/rfc/rfc4279" + note = "Available from https://www.ietf.org/rfc/rfc4279", + url = "https://www.ietf.org/rfc/rfc4279" } @Misc{ TLSPGP, @@ -364,8 +425,8 @@ @Misc{ TLSPGP title = "{Using OpenPGP Keys for Transport Layer Security (TLS) Authentication}", month = "February", year = "2011", - note = "Available from \url{http://www.ietf.org/rfc/rfc6091}", - url = "http://www.ietf.org/rfc/rfc6091" + note = "Available from \url{https://www.ietf.org/rfc/rfc6091}", + url = "https://www.ietf.org/rfc/rfc6091" } @Misc{ RFC4821, @@ -373,8 +434,8 @@ @Misc{ RFC4821 title = "{Packetization Layer Path MTU Discovery}", month = "March", year = "2007", - note = "Available from \url{http://www.ietf.org/rfc/rfc4821}", - url = "http://www.ietf.org/rfc/rfc4821" + note = "Available from \url{https://www.ietf.org/rfc/rfc4821}", + url = "https://www.ietf.org/rfc/rfc4821" } @Misc{ TLSCOMP, @@ -382,39 +443,39 @@ @Misc{ TLSCOMP title = "Transport Layer Security Protocol Compression Methods", month = "May", year = "2004", - note = "Available from \url{http://www.ietf.org/rfc/rfc3749}", - url = "http://www.ietf.org/rfc/rfc3749" + note = "Available from \url{https://www.ietf.org/rfc/rfc3749}", + url = "https://www.ietf.org/rfc/rfc3749" } @Misc{ CBCATT, author = "Bodo Moeller", title = "Security of {CBC} Ciphersuites in {SSL/TLS}: Problems and Countermeasures", year = "2002", - note = "Available from \url{http://www.openssl.org/\~bodo/tls-cbc.txt}", - url = "http://www.openssl.org/~bodo/tls-cbc.txt" + note = "Available from \url{https://www.openssl.org/\~bodo/tls-cbc.txt}", + url = "https://www.openssl.org/~bodo/tls-cbc.txt" } @Misc{ GUTPKI, author = "Peter Gutmann", title = "Everything you never wanted to know about {PKI} but were forced to find out", year = "2002", - note = "Available from \url{http://www.cs.auckland.ac.nz/\~pgut001/pubs/pkitutorial.pdf}", - url = "http://www.cs.auckland.ac.nz/~pgut001/pubs/pkitutorial.pdf" + note = "Available from \url{https://www.cs.auckland.ac.nz/\~pgut001/pubs/pkitutorial.pdf}", + url = "https://www.cs.auckland.ac.nz/~pgut001/pubs/pkitutorial.pdf" } @Misc{ GPGH, author = "Mike Ashley", title = "The {GNU} Privacy Handbook", year = "2002", - note = "Available from \url{http://www.gnupg.org/gph/en/manual.pdf}", - url = "http://www.gnupg.org/gph/en/manual.pdf" + note = "Available from \url{https://www.gnupg.org/gph/en/manual.pdf}", + url = "https://www.gnupg.org/gph/en/manual.pdf" } @Misc{ TOMSRP, author = "Tom Wu", title = "The Stanford {SRP} Authentication Project", - note = "Available from \url{http://srp.stanford.edu/}", - url = "http://srp.stanford.edu/" + note = "Available from \url{https://srp.stanford.edu/}", + url = "https://srp.stanford.edu/" } @Misc{ PRNGATTACKS, @@ -452,7 +513,7 @@ @misc{PKCS11URI organization="Internet Engineering Task Force", year=2015, month=apr, - url="http://www.ietf.org/rfc/rfc7512.txt", + url="https://www.ietf.org/rfc/rfc7512.txt", } @misc{TPMURI, @@ -460,8 +521,8 @@ @misc{TPMURI title="{The TPMKEY URI Scheme}", month="January", year=2013, - note = "Work in progress, available from \url{http://tools.ietf.org/html/draft-mavrogiannopoulos-tpmuri-01}", - url = "http://tools.ietf.org/html/draft-mavrogiannopoulos-tpmuri-01" + note = "Work in progress, available from \url{https://tools.ietf.org/html/draft-mavrogiannopoulos-tpmuri-01}", + url = "https://tools.ietf.org/html/draft-mavrogiannopoulos-tpmuri-01" } @misc{rfc4418, @@ -474,6 +535,6 @@ @misc{rfc4418 organization="Internet Engineering Task Force", year=2006, month=mar, - url="http://www.ietf.org/rfc/rfc4418.txt", + url="https://www.ietf.org/rfc/rfc4418.txt", } diff --git a/doc/latex/gnutls.tex b/doc/latex/gnutls.tex index 0d770d59d3..0a5d0bd995 100644 --- a/doc/latex/gnutls.tex +++ b/doc/latex/gnutls.tex @@ -80,6 +80,8 @@ \input{cha-gtls-examples} +\input{cha-crypto} + \input{cha-programs} \input{cha-internals} diff --git a/doc/latex/macros.tex b/doc/latex/macros.tex index f055bcf764..f9bfe29617 100644 --- a/doc/latex/macros.tex +++ b/doc/latex/macros.tex @@ -193,6 +193,14 @@ {\vspace{0.5cm}{\bf Description:}\footnotesize} {} +\newenvironment{functionDeprecated}% +{\vspace{0.5cm}{\bf Deprecated:}\footnotesize} +{} + +\newenvironment{functionWarning}% +{\vspace{0.5cm}{\bf Warning:}\footnotesize} +{} + \newenvironment{functionLimitation}% {\vspace{0.5cm}{\it Limitation:}\footnotesize} {} diff --git a/doc/manpages/Makefile.am b/doc/manpages/Makefile.am index 77a3860055..552130afa4 100644 --- a/doc/manpages/Makefile.am +++ b/doc/manpages/Makefile.am @@ -19,77 +19,84 @@ # along with this file; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +man_MANS = EXTRA_DIST = stamp_mans - -dist_man_MANS = +MAINTAINERCLEANFILES = stamp_mans -include $(top_srcdir)/doc/doc.mk -if ENABLE_TOOLS -dist_man_MANS += gnutls-cli.1 gnutls-cli-debug.1 gnutls-serv.1 \ +TOOLS_MANS = gnutls-cli.1 gnutls-cli-debug.1 gnutls-serv.1 \ certtool.1 psktool.1 p11tool.1 ocsptool.1 tpmtool.1 +SRP_MANS = srptool.1 +DANE_MANS = danetool.1 + +if ENABLE_TOOLS +man_MANS += $(TOOLS_MANS) if ENABLE_SRP -dist_man_MANS += srptool.1 +man_MANS += $(SRP_MANS) endif if ENABLE_DANE -dist_man_MANS += danetool.1 +man_MANS += $(DANE_MANS) endif endif +EXTRA_DIST += $(TOOLS_MANS) $(SRP_MANS) $(DANE_MANS) +MAINTAINERCLEANFILES += $(TOOLS_MANS) $(SRP_MANS) $(DANE_MANS) + # Note that our .def files depend on autogen # supporting the @subheading texi keyword. This # is not currently the case so we do remove it # before processing. Once the new version of autogen # is out, replace the sed and tmp files with a simple -# autogen -DMAN_SECTION=1 -Tagman-cmd.tpl $< +# autogen -L ../../src -DMAN_SECTION=1 -Tagman-cmd.tpl $< certtool.1: ../../src/certtool-args.def -sed 's/@subheading \(.*\)/@*\n@var{\1}\n@*/' $< > "$<".tmp && \ - autogen -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ + autogen -L ../../src -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ rm -f "$<".tmp ocsptool.1: ../../src/ocsptool-args.def -sed 's/@subheading \(.*\)/@*\n@var{\1}\n@*/' $< > "$<".tmp && \ - autogen -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ + autogen -L ../../src -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ rm -f "$<".tmp danetool.1: ../../src/danetool-args.def -sed 's/@subheading \(.*\)/@*\n@var{\1}\n@*/' $< > "$<".tmp && \ - autogen -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ + autogen -L ../../src -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ rm -f "$<".tmp gnutls-cli.1: ../../src/cli-args.def -sed 's/@subheading \(.*\)/@*\n@var{\1}\n@*/' $< > "$<".tmp && \ - autogen -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ + autogen -L ../../src -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ rm -f "$<".tmp gnutls-serv.1: ../../src/serv-args.def -sed 's/@subheading \(.*\)/@*\n@var{\1}\n@*/' $< > "$<".tmp && \ - autogen -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ + autogen -L ../../src -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ rm -f "$<".tmp gnutls-cli-debug.1: ../../src/cli-debug-args.def -sed 's/@subheading \(.*\)/@*\n@var{\1}\n@*/' $< > "$<".tmp && \ - autogen -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ + autogen -L ../../src -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ rm -f "$<".tmp srptool.1: ../../src/srptool-args.def -sed 's/@subheading \(.*\)/@*\n@var{\1}\n@*/' $< > "$<".tmp && \ - autogen -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ + autogen -L ../../src -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ rm -f "$<".tmp p11tool.1: ../../src/p11tool-args.def -sed 's/@subheading \(.*\)/@*\n@var{\1}\n@*/' $< > "$<".tmp && \ - autogen -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ + autogen -L ../../src -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ rm -f "$<".tmp tpmtool.1: ../../src/tpmtool-args.def -sed 's/@subheading \(.*\)/@*\n@var{\1}\n@*/' $< > "$<".tmp && \ - autogen -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ + autogen -L ../../src -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ rm -f "$<".tmp psktool.1: ../../src/psktool-args.def -sed 's/@subheading \(.*\)/@*\n@var{\1}\n@*/' $< > "$<".tmp && \ - autogen -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ + autogen -L ../../src -DMAN_SECTION=1 -Tagman-cmd.tpl "$<".tmp && \ rm -f "$<".tmp APIMANS = @@ -112,8 +119,11 @@ APIMANS += dane_verify_crt.3 APIMANS += dane_verify_crt_raw.3 APIMANS += dane_verify_session_crt.3 APIMANS += gnutls_aead_cipher_decrypt.3 +APIMANS += gnutls_aead_cipher_decryptv2.3 APIMANS += gnutls_aead_cipher_deinit.3 APIMANS += gnutls_aead_cipher_encrypt.3 +APIMANS += gnutls_aead_cipher_encryptv.3 +APIMANS += gnutls_aead_cipher_encryptv2.3 APIMANS += gnutls_aead_cipher_init.3 APIMANS += gnutls_alert_get.3 APIMANS += gnutls_alert_get_name.3 @@ -130,9 +140,17 @@ APIMANS += gnutls_anon_set_params_function.3 APIMANS += gnutls_anon_set_server_dh_params.3 APIMANS += gnutls_anon_set_server_known_dh_params.3 APIMANS += gnutls_anon_set_server_params_function.3 +APIMANS += gnutls_anti_replay_deinit.3 +APIMANS += gnutls_anti_replay_enable.3 +APIMANS += gnutls_anti_replay_init.3 +APIMANS += gnutls_anti_replay_set_add_function.3 +APIMANS += gnutls_anti_replay_set_ptr.3 +APIMANS += gnutls_anti_replay_set_window.3 APIMANS += gnutls_auth_client_get_type.3 APIMANS += gnutls_auth_get_type.3 APIMANS += gnutls_auth_server_get_type.3 +APIMANS += gnutls_base64_decode2.3 +APIMANS += gnutls_base64_encode2.3 APIMANS += gnutls_buffer_append_data.3 APIMANS += gnutls_bye.3 APIMANS += gnutls_certificate_activation_time_peers.3 @@ -146,6 +164,7 @@ APIMANS += gnutls_certificate_free_crls.3 APIMANS += gnutls_certificate_free_keys.3 APIMANS += gnutls_certificate_get_crt_raw.3 APIMANS += gnutls_certificate_get_issuer.3 +APIMANS += gnutls_certificate_get_ocsp_expiration.3 APIMANS += gnutls_certificate_get_ours.3 APIMANS += gnutls_certificate_get_peers.3 APIMANS += gnutls_certificate_get_peers_subkey_id.3 @@ -160,12 +179,17 @@ APIMANS += gnutls_certificate_set_flags.3 APIMANS += gnutls_certificate_set_key.3 APIMANS += gnutls_certificate_set_known_dh_params.3 APIMANS += gnutls_certificate_set_ocsp_status_request_file.3 +APIMANS += gnutls_certificate_set_ocsp_status_request_file2.3 APIMANS += gnutls_certificate_set_ocsp_status_request_function.3 APIMANS += gnutls_certificate_set_ocsp_status_request_function2.3 +APIMANS += gnutls_certificate_set_ocsp_status_request_mem.3 APIMANS += gnutls_certificate_set_params_function.3 APIMANS += gnutls_certificate_set_pin_function.3 +APIMANS += gnutls_certificate_set_rawpk_key_file.3 +APIMANS += gnutls_certificate_set_rawpk_key_mem.3 APIMANS += gnutls_certificate_set_retrieve_function.3 APIMANS += gnutls_certificate_set_retrieve_function2.3 +APIMANS += gnutls_certificate_set_retrieve_function3.3 APIMANS += gnutls_certificate_set_trust_list.3 APIMANS += gnutls_certificate_set_verify_flags.3 APIMANS += gnutls_certificate_set_verify_function.3 @@ -186,9 +210,12 @@ APIMANS += gnutls_certificate_set_x509_trust_dir.3 APIMANS += gnutls_certificate_set_x509_trust_file.3 APIMANS += gnutls_certificate_set_x509_trust_mem.3 APIMANS += gnutls_certificate_type_get.3 +APIMANS += gnutls_certificate_type_get2.3 APIMANS += gnutls_certificate_type_get_id.3 APIMANS += gnutls_certificate_type_get_name.3 APIMANS += gnutls_certificate_type_list.3 +APIMANS += gnutls_certificate_verification_profile_get_id.3 +APIMANS += gnutls_certificate_verification_profile_get_name.3 APIMANS += gnutls_certificate_verification_status_print.3 APIMANS += gnutls_certificate_verify_peers.3 APIMANS += gnutls_certificate_verify_peers2.3 @@ -225,6 +252,7 @@ APIMANS += gnutls_crypto_register_cipher.3 APIMANS += gnutls_crypto_register_digest.3 APIMANS += gnutls_crypto_register_mac.3 APIMANS += gnutls_db_check_entry.3 +APIMANS += gnutls_db_check_entry_expire_time.3 APIMANS += gnutls_db_check_entry_time.3 APIMANS += gnutls_db_get_default_cache_expiration.3 APIMANS += gnutls_db_get_ptr.3 @@ -235,6 +263,8 @@ APIMANS += gnutls_db_set_remove_function.3 APIMANS += gnutls_db_set_retrieve_function.3 APIMANS += gnutls_db_set_store_function.3 APIMANS += gnutls_decode_ber_digest_info.3 +APIMANS += gnutls_decode_gost_rs_value.3 +APIMANS += gnutls_decode_rs_value.3 APIMANS += gnutls_deinit.3 APIMANS += gnutls_dh_get_group.3 APIMANS += gnutls_dh_get_peers_public_bits.3 @@ -251,6 +281,7 @@ APIMANS += gnutls_dh_params_import_dsa.3 APIMANS += gnutls_dh_params_import_pkcs3.3 APIMANS += gnutls_dh_params_import_raw.3 APIMANS += gnutls_dh_params_import_raw2.3 +APIMANS += gnutls_dh_params_import_raw3.3 APIMANS += gnutls_dh_params_init.3 APIMANS += gnutls_dh_set_prime_bits.3 APIMANS += gnutls_digest_get_id.3 @@ -274,15 +305,22 @@ APIMANS += gnutls_ecc_curve_get_pk.3 APIMANS += gnutls_ecc_curve_get_size.3 APIMANS += gnutls_ecc_curve_list.3 APIMANS += gnutls_encode_ber_digest_info.3 +APIMANS += gnutls_encode_gost_rs_value.3 +APIMANS += gnutls_encode_rs_value.3 APIMANS += gnutls_error_is_fatal.3 APIMANS += gnutls_error_to_alert.3 APIMANS += gnutls_est_record_overhead_size.3 +APIMANS += gnutls_ext_get_current_msg.3 APIMANS += gnutls_ext_get_data.3 APIMANS += gnutls_ext_get_name.3 +APIMANS += gnutls_ext_get_name2.3 +APIMANS += gnutls_ext_raw_parse.3 APIMANS += gnutls_ext_register.3 APIMANS += gnutls_ext_set_data.3 APIMANS += gnutls_fingerprint.3 APIMANS += gnutls_fips140_mode_enabled.3 +APIMANS += gnutls_fips140_set_mode.3 +APIMANS += gnutls_get_system_config_file.3 APIMANS += gnutls_global_deinit.3 APIMANS += gnutls_global_init.3 APIMANS += gnutls_global_set_audit_log_function.3 @@ -291,6 +329,12 @@ APIMANS += gnutls_global_set_log_level.3 APIMANS += gnutls_global_set_mem_functions.3 APIMANS += gnutls_global_set_mutex.3 APIMANS += gnutls_global_set_time_function.3 +APIMANS += gnutls_gost_paramset_get_name.3 +APIMANS += gnutls_gost_paramset_get_oid.3 +APIMANS += gnutls_group_get.3 +APIMANS += gnutls_group_get_id.3 +APIMANS += gnutls_group_get_name.3 +APIMANS += gnutls_group_list.3 APIMANS += gnutls_handshake.3 APIMANS += gnutls_handshake_description_get_name.3 APIMANS += gnutls_handshake_get_last_in.3 @@ -302,6 +346,7 @@ APIMANS += gnutls_handshake_set_private_extensions.3 APIMANS += gnutls_handshake_set_random.3 APIMANS += gnutls_handshake_set_timeout.3 APIMANS += gnutls_hash.3 +APIMANS += gnutls_hash_copy.3 APIMANS += gnutls_hash_deinit.3 APIMANS += gnutls_hash_fast.3 APIMANS += gnutls_hash_get_len.3 @@ -318,9 +363,13 @@ APIMANS += gnutls_hex_decode.3 APIMANS += gnutls_hex_decode2.3 APIMANS += gnutls_hex_encode.3 APIMANS += gnutls_hex_encode2.3 +APIMANS += gnutls_hkdf_expand.3 +APIMANS += gnutls_hkdf_extract.3 APIMANS += gnutls_hmac.3 +APIMANS += gnutls_hmac_copy.3 APIMANS += gnutls_hmac_deinit.3 APIMANS += gnutls_hmac_fast.3 +APIMANS += gnutls_hmac_get_key_size.3 APIMANS += gnutls_hmac_get_len.3 APIMANS += gnutls_hmac_init.3 APIMANS += gnutls_hmac_output.3 @@ -359,6 +408,7 @@ APIMANS += gnutls_ocsp_req_set_nonce.3 APIMANS += gnutls_ocsp_resp_check_crt.3 APIMANS += gnutls_ocsp_resp_deinit.3 APIMANS += gnutls_ocsp_resp_export.3 +APIMANS += gnutls_ocsp_resp_export2.3 APIMANS += gnutls_ocsp_resp_get_certs.3 APIMANS += gnutls_ocsp_resp_get_extension.3 APIMANS += gnutls_ocsp_resp_get_nonce.3 @@ -373,15 +423,19 @@ APIMANS += gnutls_ocsp_resp_get_single.3 APIMANS += gnutls_ocsp_resp_get_status.3 APIMANS += gnutls_ocsp_resp_get_version.3 APIMANS += gnutls_ocsp_resp_import.3 +APIMANS += gnutls_ocsp_resp_import2.3 APIMANS += gnutls_ocsp_resp_init.3 +APIMANS += gnutls_ocsp_resp_list_import2.3 APIMANS += gnutls_ocsp_resp_print.3 APIMANS += gnutls_ocsp_resp_verify.3 APIMANS += gnutls_ocsp_resp_verify_direct.3 APIMANS += gnutls_ocsp_status_request_enable_client.3 APIMANS += gnutls_ocsp_status_request_get.3 +APIMANS += gnutls_ocsp_status_request_get2.3 APIMANS += gnutls_ocsp_status_request_is_checked.3 APIMANS += gnutls_oid_to_digest.3 APIMANS += gnutls_oid_to_ecc_curve.3 +APIMANS += gnutls_oid_to_gost_paramset.3 APIMANS += gnutls_oid_to_mac.3 APIMANS += gnutls_oid_to_pk.3 APIMANS += gnutls_oid_to_sign.3 @@ -389,14 +443,18 @@ APIMANS += gnutls_openpgp_privkey_sign_hash.3 APIMANS += gnutls_openpgp_send_cert.3 APIMANS += gnutls_packet_deinit.3 APIMANS += gnutls_packet_get.3 +APIMANS += gnutls_pbkdf2.3 APIMANS += gnutls_pcert_deinit.3 APIMANS += gnutls_pcert_export_openpgp.3 APIMANS += gnutls_pcert_export_x509.3 APIMANS += gnutls_pcert_import_openpgp.3 APIMANS += gnutls_pcert_import_openpgp_raw.3 +APIMANS += gnutls_pcert_import_rawpk.3 +APIMANS += gnutls_pcert_import_rawpk_raw.3 APIMANS += gnutls_pcert_import_x509.3 APIMANS += gnutls_pcert_import_x509_list.3 APIMANS += gnutls_pcert_import_x509_raw.3 +APIMANS += gnutls_pcert_list_import_x509_file.3 APIMANS += gnutls_pcert_list_import_x509_raw.3 APIMANS += gnutls_pem_base64_decode.3 APIMANS += gnutls_pem_base64_decode2.3 @@ -430,6 +488,7 @@ APIMANS += gnutls_pkcs11_obj_flags_get_str.3 APIMANS += gnutls_pkcs11_obj_get_exts.3 APIMANS += gnutls_pkcs11_obj_get_flags.3 APIMANS += gnutls_pkcs11_obj_get_info.3 +APIMANS += gnutls_pkcs11_obj_get_ptr.3 APIMANS += gnutls_pkcs11_obj_get_type.3 APIMANS += gnutls_pkcs11_obj_import_url.3 APIMANS += gnutls_pkcs11_obj_init.3 @@ -453,9 +512,11 @@ APIMANS += gnutls_pkcs11_privkey_status.3 APIMANS += gnutls_pkcs11_reinit.3 APIMANS += gnutls_pkcs11_set_pin_function.3 APIMANS += gnutls_pkcs11_set_token_function.3 +APIMANS += gnutls_pkcs11_token_check_mechanism.3 APIMANS += gnutls_pkcs11_token_get_flags.3 APIMANS += gnutls_pkcs11_token_get_info.3 APIMANS += gnutls_pkcs11_token_get_mechanism.3 +APIMANS += gnutls_pkcs11_token_get_ptr.3 APIMANS += gnutls_pkcs11_token_get_random.3 APIMANS += gnutls_pkcs11_token_get_url.3 APIMANS += gnutls_pkcs11_token_init.3 @@ -510,6 +571,7 @@ APIMANS += gnutls_pkcs7_get_signature_info.3 APIMANS += gnutls_pkcs7_import.3 APIMANS += gnutls_pkcs7_init.3 APIMANS += gnutls_pkcs7_print.3 +APIMANS += gnutls_pkcs7_print_signature_info.3 APIMANS += gnutls_pkcs7_set_crl.3 APIMANS += gnutls_pkcs7_set_crl_raw.3 APIMANS += gnutls_pkcs7_set_crt.3 @@ -527,15 +589,20 @@ APIMANS += gnutls_pk_get_oid.3 APIMANS += gnutls_pk_list.3 APIMANS += gnutls_pk_to_sign.3 APIMANS += gnutls_prf.3 +APIMANS += gnutls_prf_early.3 +APIMANS += gnutls_prf_hash_get.3 APIMANS += gnutls_prf_raw.3 APIMANS += gnutls_prf_rfc5705.3 APIMANS += gnutls_priority_certificate_type_list.3 +APIMANS += gnutls_priority_certificate_type_list2.3 APIMANS += gnutls_priority_cipher_list.3 APIMANS += gnutls_priority_compression_list.3 APIMANS += gnutls_priority_deinit.3 APIMANS += gnutls_priority_ecc_curve_list.3 APIMANS += gnutls_priority_get_cipher_suite_index.3 +APIMANS += gnutls_priority_group_list.3 APIMANS += gnutls_priority_init.3 +APIMANS += gnutls_priority_init2.3 APIMANS += gnutls_priority_kx_list.3 APIMANS += gnutls_priority_mac_list.3 APIMANS += gnutls_priority_protocol_list.3 @@ -544,23 +611,31 @@ APIMANS += gnutls_priority_set_direct.3 APIMANS += gnutls_priority_sign_list.3 APIMANS += gnutls_priority_string_list.3 APIMANS += gnutls_privkey_decrypt_data.3 +APIMANS += gnutls_privkey_decrypt_data2.3 APIMANS += gnutls_privkey_deinit.3 APIMANS += gnutls_privkey_export_dsa_raw.3 +APIMANS += gnutls_privkey_export_dsa_raw2.3 APIMANS += gnutls_privkey_export_ecc_raw.3 +APIMANS += gnutls_privkey_export_ecc_raw2.3 +APIMANS += gnutls_privkey_export_gost_raw2.3 APIMANS += gnutls_privkey_export_openpgp.3 APIMANS += gnutls_privkey_export_pkcs11.3 APIMANS += gnutls_privkey_export_rsa_raw.3 +APIMANS += gnutls_privkey_export_rsa_raw2.3 APIMANS += gnutls_privkey_export_x509.3 APIMANS += gnutls_privkey_generate.3 APIMANS += gnutls_privkey_generate2.3 APIMANS += gnutls_privkey_get_pk_algorithm.3 APIMANS += gnutls_privkey_get_seed.3 +APIMANS += gnutls_privkey_get_spki.3 APIMANS += gnutls_privkey_get_type.3 APIMANS += gnutls_privkey_import_dsa_raw.3 APIMANS += gnutls_privkey_import_ecc_raw.3 APIMANS += gnutls_privkey_import_ext.3 APIMANS += gnutls_privkey_import_ext2.3 APIMANS += gnutls_privkey_import_ext3.3 +APIMANS += gnutls_privkey_import_ext4.3 +APIMANS += gnutls_privkey_import_gost_raw.3 APIMANS += gnutls_privkey_import_openpgp.3 APIMANS += gnutls_privkey_import_openpgp_raw.3 APIMANS += gnutls_privkey_import_pkcs11.3 @@ -574,8 +649,11 @@ APIMANS += gnutls_privkey_import_x509_raw.3 APIMANS += gnutls_privkey_init.3 APIMANS += gnutls_privkey_set_flags.3 APIMANS += gnutls_privkey_set_pin_function.3 +APIMANS += gnutls_privkey_set_spki.3 APIMANS += gnutls_privkey_sign_data.3 +APIMANS += gnutls_privkey_sign_data2.3 APIMANS += gnutls_privkey_sign_hash.3 +APIMANS += gnutls_privkey_sign_hash2.3 APIMANS += gnutls_privkey_status.3 APIMANS += gnutls_privkey_verify_params.3 APIMANS += gnutls_privkey_verify_seed.3 @@ -589,11 +667,15 @@ APIMANS += gnutls_psk_client_get_hint.3 APIMANS += gnutls_psk_free_client_credentials.3 APIMANS += gnutls_psk_free_server_credentials.3 APIMANS += gnutls_psk_server_get_username.3 +APIMANS += gnutls_psk_server_get_username2.3 APIMANS += gnutls_psk_set_client_credentials.3 +APIMANS += gnutls_psk_set_client_credentials2.3 APIMANS += gnutls_psk_set_client_credentials_function.3 +APIMANS += gnutls_psk_set_client_credentials_function2.3 APIMANS += gnutls_psk_set_params_function.3 APIMANS += gnutls_psk_set_server_credentials_file.3 APIMANS += gnutls_psk_set_server_credentials_function.3 +APIMANS += gnutls_psk_set_server_credentials_function2.3 APIMANS += gnutls_psk_set_server_credentials_hint.3 APIMANS += gnutls_psk_set_server_dh_params.3 APIMANS += gnutls_psk_set_server_known_dh_params.3 @@ -603,18 +685,24 @@ APIMANS += gnutls_pubkey_encrypt_data.3 APIMANS += gnutls_pubkey_export.3 APIMANS += gnutls_pubkey_export2.3 APIMANS += gnutls_pubkey_export_dsa_raw.3 +APIMANS += gnutls_pubkey_export_dsa_raw2.3 APIMANS += gnutls_pubkey_export_ecc_raw.3 +APIMANS += gnutls_pubkey_export_ecc_raw2.3 APIMANS += gnutls_pubkey_export_ecc_x962.3 +APIMANS += gnutls_pubkey_export_gost_raw2.3 APIMANS += gnutls_pubkey_export_rsa_raw.3 +APIMANS += gnutls_pubkey_export_rsa_raw2.3 APIMANS += gnutls_pubkey_get_key_id.3 APIMANS += gnutls_pubkey_get_key_usage.3 APIMANS += gnutls_pubkey_get_openpgp_key_id.3 APIMANS += gnutls_pubkey_get_pk_algorithm.3 APIMANS += gnutls_pubkey_get_preferred_hash_algorithm.3 +APIMANS += gnutls_pubkey_get_spki.3 APIMANS += gnutls_pubkey_import.3 APIMANS += gnutls_pubkey_import_dsa_raw.3 APIMANS += gnutls_pubkey_import_ecc_raw.3 APIMANS += gnutls_pubkey_import_ecc_x962.3 +APIMANS += gnutls_pubkey_import_gost_raw.3 APIMANS += gnutls_pubkey_import_openpgp.3 APIMANS += gnutls_pubkey_import_openpgp_raw.3 APIMANS += gnutls_pubkey_import_pkcs11.3 @@ -630,11 +718,13 @@ APIMANS += gnutls_pubkey_init.3 APIMANS += gnutls_pubkey_print.3 APIMANS += gnutls_pubkey_set_key_usage.3 APIMANS += gnutls_pubkey_set_pin_function.3 +APIMANS += gnutls_pubkey_set_spki.3 APIMANS += gnutls_pubkey_verify_data2.3 APIMANS += gnutls_pubkey_verify_hash2.3 APIMANS += gnutls_pubkey_verify_params.3 APIMANS += gnutls_random_art.3 APIMANS += gnutls_range_split.3 +APIMANS += gnutls_reauth.3 APIMANS += gnutls_record_can_use_length_hiding.3 APIMANS += gnutls_record_check_corked.3 APIMANS += gnutls_record_check_pending.3 @@ -643,14 +733,20 @@ APIMANS += gnutls_record_disable_padding.3 APIMANS += gnutls_record_discard_queued.3 APIMANS += gnutls_record_get_direction.3 APIMANS += gnutls_record_get_discarded.3 +APIMANS += gnutls_record_get_max_early_data_size.3 APIMANS += gnutls_record_get_max_size.3 APIMANS += gnutls_record_get_state.3 APIMANS += gnutls_record_overhead_size.3 APIMANS += gnutls_record_recv.3 +APIMANS += gnutls_record_recv_early_data.3 APIMANS += gnutls_record_recv_packet.3 APIMANS += gnutls_record_recv_seq.3 APIMANS += gnutls_record_send.3 +APIMANS += gnutls_record_send2.3 +APIMANS += gnutls_record_send_early_data.3 APIMANS += gnutls_record_send_range.3 +APIMANS += gnutls_record_set_max_early_data_size.3 +APIMANS += gnutls_record_set_max_recv_size.3 APIMANS += gnutls_record_set_max_size.3 APIMANS += gnutls_record_set_state.3 APIMANS += gnutls_record_set_timeout.3 @@ -677,14 +773,17 @@ APIMANS += gnutls_session_get_desc.3 APIMANS += gnutls_session_get_flags.3 APIMANS += gnutls_session_get_id.3 APIMANS += gnutls_session_get_id2.3 +APIMANS += gnutls_session_get_keylog_function.3 APIMANS += gnutls_session_get_master_secret.3 APIMANS += gnutls_session_get_ptr.3 APIMANS += gnutls_session_get_random.3 APIMANS += gnutls_session_get_verify_cert_status.3 APIMANS += gnutls_session_is_resumed.3 +APIMANS += gnutls_session_key_update.3 APIMANS += gnutls_session_resumption_requested.3 APIMANS += gnutls_session_set_data.3 APIMANS += gnutls_session_set_id.3 +APIMANS += gnutls_session_set_keylog_function.3 APIMANS += gnutls_session_set_premaster.3 APIMANS += gnutls_session_set_ptr.3 APIMANS += gnutls_session_set_verify_cert.3 @@ -694,7 +793,9 @@ APIMANS += gnutls_session_supplemental_register.3 APIMANS += gnutls_session_ticket_enable_client.3 APIMANS += gnutls_session_ticket_enable_server.3 APIMANS += gnutls_session_ticket_key_generate.3 +APIMANS += gnutls_session_ticket_send.3 APIMANS += gnutls_set_default_priority.3 +APIMANS += gnutls_set_default_priority_append.3 APIMANS += gnutls_sign_algorithm_get.3 APIMANS += gnutls_sign_algorithm_get_client.3 APIMANS += gnutls_sign_algorithm_get_requested.3 @@ -704,7 +805,9 @@ APIMANS += gnutls_sign_get_name.3 APIMANS += gnutls_sign_get_oid.3 APIMANS += gnutls_sign_get_pk_algorithm.3 APIMANS += gnutls_sign_is_secure.3 +APIMANS += gnutls_sign_is_secure2.3 APIMANS += gnutls_sign_list.3 +APIMANS += gnutls_sign_supports_pk_algorithm.3 APIMANS += gnutls_srp_allocate_client_credentials.3 APIMANS += gnutls_srp_allocate_server_credentials.3 APIMANS += gnutls_srp_base64_decode.3 @@ -859,6 +962,7 @@ APIMANS += gnutls_x509_crq_get_pk_oid.3 APIMANS += gnutls_x509_crq_get_private_key_usage_period.3 APIMANS += gnutls_x509_crq_get_signature_algorithm.3 APIMANS += gnutls_x509_crq_get_signature_oid.3 +APIMANS += gnutls_x509_crq_get_spki.3 APIMANS += gnutls_x509_crq_get_subject_alt_name.3 APIMANS += gnutls_x509_crq_get_subject_alt_othername_oid.3 APIMANS += gnutls_x509_crq_get_tlsfeatures.3 @@ -879,6 +983,7 @@ APIMANS += gnutls_x509_crq_set_key_rsa_raw.3 APIMANS += gnutls_x509_crq_set_key_usage.3 APIMANS += gnutls_x509_crq_set_private_key_usage_period.3 APIMANS += gnutls_x509_crq_set_pubkey.3 +APIMANS += gnutls_x509_crq_set_spki.3 APIMANS += gnutls_x509_crq_set_subject_alt_name.3 APIMANS += gnutls_x509_crq_set_subject_alt_othername.3 APIMANS += gnutls_x509_crq_set_tlsfeatures.3 @@ -937,6 +1042,7 @@ APIMANS += gnutls_x509_crt_get_name_constraints.3 APIMANS += gnutls_x509_crt_get_pk_algorithm.3 APIMANS += gnutls_x509_crt_get_pk_dsa_raw.3 APIMANS += gnutls_x509_crt_get_pk_ecc_raw.3 +APIMANS += gnutls_x509_crt_get_pk_gost_raw.3 APIMANS += gnutls_x509_crt_get_pk_oid.3 APIMANS += gnutls_x509_crt_get_pk_rsa_raw.3 APIMANS += gnutls_x509_crt_get_policy.3 @@ -949,6 +1055,7 @@ APIMANS += gnutls_x509_crt_get_serial.3 APIMANS += gnutls_x509_crt_get_signature.3 APIMANS += gnutls_x509_crt_get_signature_algorithm.3 APIMANS += gnutls_x509_crt_get_signature_oid.3 +APIMANS += gnutls_x509_crt_get_spki.3 APIMANS += gnutls_x509_crt_get_subject.3 APIMANS += gnutls_x509_crt_get_subject_alt_name.3 APIMANS += gnutls_x509_crt_get_subject_alt_name2.3 @@ -964,6 +1071,7 @@ APIMANS += gnutls_x509_crt_init.3 APIMANS += gnutls_x509_crt_list_import.3 APIMANS += gnutls_x509_crt_list_import2.3 APIMANS += gnutls_x509_crt_list_import_pkcs11.3 +APIMANS += gnutls_x509_crt_list_import_url.3 APIMANS += gnutls_x509_crt_list_verify.3 APIMANS += gnutls_x509_crt_print.3 APIMANS += gnutls_x509_crt_privkey_sign.3 @@ -999,6 +1107,7 @@ APIMANS += gnutls_x509_crt_set_proxy.3 APIMANS += gnutls_x509_crt_set_proxy_dn.3 APIMANS += gnutls_x509_crt_set_pubkey.3 APIMANS += gnutls_x509_crt_set_serial.3 +APIMANS += gnutls_x509_crt_set_spki.3 APIMANS += gnutls_x509_crt_set_subject_alternative_name.3 APIMANS += gnutls_x509_crt_set_subject_alt_name.3 APIMANS += gnutls_x509_crt_set_subject_alt_othername.3 @@ -1076,6 +1185,7 @@ APIMANS += gnutls_x509_privkey_export2.3 APIMANS += gnutls_x509_privkey_export2_pkcs8.3 APIMANS += gnutls_x509_privkey_export_dsa_raw.3 APIMANS += gnutls_x509_privkey_export_ecc_raw.3 +APIMANS += gnutls_x509_privkey_export_gost_raw.3 APIMANS += gnutls_x509_privkey_export_pkcs8.3 APIMANS += gnutls_x509_privkey_export_rsa_raw.3 APIMANS += gnutls_x509_privkey_export_rsa_raw2.3 @@ -1086,10 +1196,12 @@ APIMANS += gnutls_x509_privkey_get_key_id.3 APIMANS += gnutls_x509_privkey_get_pk_algorithm.3 APIMANS += gnutls_x509_privkey_get_pk_algorithm2.3 APIMANS += gnutls_x509_privkey_get_seed.3 +APIMANS += gnutls_x509_privkey_get_spki.3 APIMANS += gnutls_x509_privkey_import.3 APIMANS += gnutls_x509_privkey_import2.3 APIMANS += gnutls_x509_privkey_import_dsa_raw.3 APIMANS += gnutls_x509_privkey_import_ecc_raw.3 +APIMANS += gnutls_x509_privkey_import_gost_raw.3 APIMANS += gnutls_x509_privkey_import_openssl.3 APIMANS += gnutls_x509_privkey_import_pkcs8.3 APIMANS += gnutls_x509_privkey_import_rsa_raw.3 @@ -1098,6 +1210,7 @@ APIMANS += gnutls_x509_privkey_init.3 APIMANS += gnutls_x509_privkey_sec_param.3 APIMANS += gnutls_x509_privkey_set_flags.3 APIMANS += gnutls_x509_privkey_set_pin_function.3 +APIMANS += gnutls_x509_privkey_set_spki.3 APIMANS += gnutls_x509_privkey_sign_data.3 APIMANS += gnutls_x509_privkey_sign_hash.3 APIMANS += gnutls_x509_privkey_verify_params.3 @@ -1106,6 +1219,10 @@ APIMANS += gnutls_x509_rdn_get.3 APIMANS += gnutls_x509_rdn_get2.3 APIMANS += gnutls_x509_rdn_get_by_oid.3 APIMANS += gnutls_x509_rdn_get_oid.3 +APIMANS += gnutls_x509_spki_deinit.3 +APIMANS += gnutls_x509_spki_get_rsa_pss_params.3 +APIMANS += gnutls_x509_spki_init.3 +APIMANS += gnutls_x509_spki_set_rsa_pss_params.3 APIMANS += gnutls_x509_tlsfeatures_add.3 APIMANS += gnutls_x509_tlsfeatures_check_crt.3 APIMANS += gnutls_x509_tlsfeatures_deinit.3 @@ -1133,9 +1250,12 @@ APIMANS += gnutls_x509_trust_list_verify_crt2.3 APIMANS += gnutls_x509_trust_list_verify_named_crt.3 if ENABLE_DOC -dist_man_MANS += $(APIMANS) +man_MANS += $(APIMANS) endif +EXTRA_DIST += $(APIMANS) +MAINTAINERCLEANFILES += $(APIMANS) + $(APIMANS): stamp_mans compare-makefile: @@ -1147,250 +1267,28 @@ compare-makefile: for i in $$FUNCS; do \ MANS="$$MANS\nAPIMANS += $$i.3"; \ done; \ - grep -v -e '^APIMANS += ' Makefile.am | \ + grep -v -e '^APIMANS += ' $(srcdir)/Makefile.am | \ perl -p -e "s/^APIMANS =/APIMANS =$$MANS/" > tmp-$@; \ diff -u $(srcdir)/Makefile.am tmp-$@ rm -f tmp-$@ stamp_mans: $(HEADER_FILES) - @echo $(ECHO_N) "Creating man pages for gnutls.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/gnutls.h.in`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/gnutls.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for compat.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/compat.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/compat.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for socket.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/socket.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/socket.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for dane.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/libdane/includes/gnutls/dane.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/dane.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for x509.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/x509.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/x509.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_X509_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for x509-ext.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/x509-ext.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/x509-ext.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_X509_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for pkcs7.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/pkcs7.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/pkcs7.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_X509_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for ocsp.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/ocsp.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/ocsp.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_X509_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for abstract.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/abstract.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/abstract.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for pkcs12.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/pkcs12.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/pkcs12.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_X509_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for pkcs11.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/pkcs11.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/pkcs11.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for dtls.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/dtls.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/dtls.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for openpgp.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/openpgp.h`; do \ + @for header in $(HEADER_FILES); do \ + echo $(ECHO_N) "Creating man pages for `basename $$header .in`..." && \ + for i in `$(top_srcdir)/doc/scripts/getfuncs.pl < $$header`; do \ $(top_srcdir)/doc/scripts/gdoc -man \ -module $(PACKAGE) -sourceversion $(VERSION) \ -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/openpgp.h" \ + -pkg-site "https://www.gnutls.org" \ + -include "gnutls/`basename $$header .in`" \ -seeinfo $(PACKAGE) -verbatimcopying \ -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for crypto.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/crypto.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/crypto.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for tpm.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/tpm.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/tpm.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2001-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for urls.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/urls.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/urls.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2014-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ - echo $(ECHO_N) "."; \ - done - @echo "" - @echo $(ECHO_N) "Creating man pages for system-keys.h..." && \ - for i in `$(top_srcdir)/doc/scripts/getfuncs.pl <$(top_srcdir)/lib/includes/gnutls/system-keys.h`; do \ - $(top_srcdir)/doc/scripts/gdoc -man \ - -module $(PACKAGE) -sourceversion $(VERSION) \ - -bugsto $(PACKAGE_BUGREPORT) \ - -pkg-site "http://www.gnutls.org" \ - -include "gnutls/system-keys.h" \ - -seeinfo $(PACKAGE) -verbatimcopying \ - -copyright "2014-$(YEAR) Free Software Foundation, Inc., and others" \ - -function $$i \ - $(C_SOURCE_FILES) > $$i.3 2>/dev/null && \ + $(C_SOURCE_FILES) > $$i.3 && \ echo $(ECHO_N) "."; \ + done ; \ + echo "" ; \ done - @echo "" echo $@ > $@ .PHONY: update-makefile diff --git a/doc/printlist.c b/doc/printlist.c index a87f14c545..bda2b01531 100644 --- a/doc/printlist.c +++ b/doc/printlist.c @@ -15,7 +15,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ #include @@ -147,25 +147,12 @@ static void main_texinfo(void) } { - const gnutls_ecc_curve_t *p = gnutls_ecc_curve_list(); + const gnutls_group_t *p = gnutls_group_list(); - printf("\n@heading Elliptic curves\n@table @code\n"); + printf("\n@heading Groups\n@table @code\n"); for (; *p; p++) { printf("@item %s\n", - gnutls_ecc_curve_get_name(*p)); - } - printf("@end table\n"); - } - - - { - const gnutls_compression_method_t *p = - gnutls_compression_list(); - - printf("\n@heading Compression methods\n@table @code\n"); - for (; *p; p++) { - printf("@item %s\n", - gnutls_compression_get_name(*p)); + gnutls_group_get_name(*p)); } printf("@end table\n"); } diff --git a/doc/reference/Makefile.am b/doc/reference/Makefile.am index 8128621e44..f10c8ed3ca 100644 --- a/doc/reference/Makefile.am +++ b/doc/reference/Makefile.am @@ -1,8 +1,3 @@ -## Process this file with automake to produce Makefile.in - -# We require automake 1.6 at least. -AUTOMAKE_OPTIONS = 1.6 - # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples @@ -14,36 +9,31 @@ DOC_MODULE=$(PACKAGE) # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 - -# The top-level SGML file. You can change this if you want to. +# The top-level XML file. DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml # Directories containing the source code. # gtk-doc will search all .c and .h files beneath these paths # for inline comments documenting functions and macros. # e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk -DOC_SOURCE_DIR=$(top_srcdir)/lib $(top_srcdir)/libdane/ +DOC_SOURCE_DIR=$(top_srcdir)/lib $(top_srcdir)/libdane/ $(top_builddir)/lib/includes/ -# Extra options to pass to gtkdoc-scangobj. Not normally needed. +# Extra options to pass to gtkdoc-scangobj. Normally not needed. SCANGOBJ_OPTIONS= # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS=--ignore-decorators=ASN1_API \ - --deprecated-guards=ASN1_DISABLE_DEPRECATED + --deprecated-guards=ASN1_DISABLE_DEPRECATED -# Extra options to supply to gtkdoc-mkdb. +# Extra options to supply to gtkdoc-mkdb # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml MKDB_OPTIONS=--xml-mode --output-format=xml -# Extra options to supply to gtkdoc-mktmpl -# e.g. MKTMPL_OPTIONS=--only-section-tmpl -MKTMPL_OPTIONS= - # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS= -# Extra options to supply to gtkdoc-fixref. Not normally needed. +# Extra options to supply to gtkdoc-fixref. Normally not needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS= @@ -70,13 +60,12 @@ IGNORE_HFILES += $(top_srcdir)/lib/*.h $(top_srcdir)/lib/*/*.h $(top_srcdir)/lib # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES= -# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). -# e.g. content_files=running.sgml building.sgml changes-2.0.sgml +# Extra files that are included by $(DOC_MAIN_SGML_FILE). +# e.g. content_files=running.xml building.xml changes-2.0.xml content_files= -# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded -# These files must be listed here *and* in content_files -# e.g. expand_content_files=running.sgml +# Files where gtk-doc abbreviations (#GtkWidget) are expanded +# e.g. expand_content_files=running.xml expand_content_files= # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. @@ -90,19 +79,13 @@ GTKDOC_LIBS= # This includes the standard gtk-doc make rules, copied by gtkdocize. include $(top_srcdir)/gtk-doc.make -# Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST += version.xml.in -# Files not to distribute -# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types -# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt -#DISTCLEANFILES += - # Comment this out if you want 'make check' to test you doc status # and run some sanity checks if ENABLE_GTK_DOC -TESTS_ENVIRONMENT = cd $(srcdir) && \ +TESTS_ENVIRONMENT = \ DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \ SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) #TESTS = $(GTKDOC_CHECK) diff --git a/doc/reference/gnutls-docs.sgml b/doc/reference/gnutls-docs.sgml index 174707d25c..ff508df907 100644 --- a/doc/reference/gnutls-docs.sgml +++ b/doc/reference/gnutls-docs.sgml @@ -1,8 +1,8 @@ + ]> @@ -11,7 +11,7 @@ for GnuTLS &version;. The latest version of this documentation can be found on-line at - http://www.gnutls.org/reference/. + https://www.gnutls.org/reference/. @@ -25,8 +25,8 @@ More up to date information can be found at - - http://www.gnutls.org/. + + https://www.gnutls.org/. diff --git a/doc/scripts/Makefile.am b/doc/scripts/Makefile.am index 4010b4f865..f7e192b98b 100644 --- a/doc/scripts/Makefile.am +++ b/doc/scripts/Makefile.am @@ -17,4 +17,4 @@ # along with this file; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -EXTRA_DIST = gdoc sort2.pl split-texi.pl cleanup-autogen.pl getfuncs.pl +EXTRA_DIST = gdoc sort2.pl split-texi.pl cleanup-autogen.pl getfuncs.pl getfuncs-map.pl diff --git a/doc/scripts/gdoc b/doc/scripts/gdoc index 5d2d609699..1ecbbdc16c 100755 --- a/doc/scripts/gdoc +++ b/doc/scripts/gdoc @@ -21,7 +21,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # This will read a C source code file and scan for embedded comments # in the style of gnome comments (+minor extensions - see below). @@ -95,7 +95,7 @@ # * my_function # **/ # -# If the Description: header tag is ommitted, then there must be a blank line +# If the Description: header tag is omitted, then there must be a blank line # after the last parameter specification. # e.g. # /** @@ -196,6 +196,8 @@ $blankline_man = ""; $blankline_text = ""; my $lineprefix = ""; +my $function_found = 0; + sub usage { print "Usage: $0 [ -v ] [ -docbook | -html | -text | -man | -tex | -texinfo -listfunc ]\n"; print " [ -sourceversion verno ] [ -include file | -includefuncprefix ]\n"; @@ -308,7 +310,7 @@ sub dump_section { # parameterlist => @list of parameters # parameters => %parameter descriptions # sectionlist => @list of sections -# sections => %descriont descriptions +# sections => %section descriptions # sub just_highlight { @@ -561,6 +563,7 @@ sub output_enum_tex { $param2 = $args{'parameters'}{$parameter}; $param2 =~ s/\#([a-zA-Z\_]+)/{\\it $1}/g; $param2 =~ s/\%([a-zA-Z\_]+)/{\\bf $1}/g; + $param2 =~ s/([0-9]+)\^([0-9]+)/\$\{$1\}\^\{$2\}\$/g; $out = just_highlight($param2); $out =~ s/_/\\_/g; chomp $out; @@ -710,7 +713,7 @@ sub output_man { print ".SH \"REPORTING BUGS\"\n"; print "Report bugs to <". $args{'bugsto'} . ">.\n"; #print ".br\n"; - #print "General guidelines for reporting bugs: http://www.gnu.org/gethelp/\n"; + #print "General guidelines for reporting bugs: https://www.gnu.org/gethelp/\n"; print ".br\n"; if ($args{'pkgsite'}) { print "Home page: " . $args{'pkgsite'} . "\n"; @@ -796,6 +799,10 @@ sub dump_function { $function_name = $2; $args = $3; + if ($return_type eq 'typedef') { + return; + } + # print STDERR "ARGS = '$args'\n"; foreach $arg (split ',', $args) { @@ -812,7 +819,7 @@ sub dump_function { $param = $2; push @args, $1; } - if ($param =~ m/^(.*)(\[\])$/) { + if ($param =~ m/^(.*)(\[[0-9]*\])$/) { $param = $1; push @args, $2; } @@ -821,7 +828,8 @@ sub dump_function { if ((!defined($parameters{$param}) || $parameters{$param} eq "") && $param ne "void") { $parameters{$param} = "-- undescribed --"; - print STDERR "warning: $lineno: Function parameter '$param' not described in '$function_name'\n"; + print STDERR "error: $lineno: Function parameter '$param' not described in '$function_name'\n"; + exit 1; } push @parameterlist, $param; @@ -830,11 +838,12 @@ sub dump_function { # print STDERR "param = '$param', type = '$type'\n"; } } else { - print STDERR "warning: $lineno: Cannot understand prototype: '$prototype'\n"; - return; + print STDERR "error: $lineno: Cannot understand prototype: '$prototype'\n"; + exit 1; } if ($function_only==0 || defined($function_table{$function_name})) { + $function_found=1; output_function({'function' => $function_name, 'module' => $modulename, 'sourceversion' => $sourceversion, @@ -1006,8 +1015,8 @@ foreach $file (@ARGV) { $contents .= $1."\n"; } } else { - # i dont know - bad line? ignore. - print STDERR "warning: $lineno: Bad line: $_"; + # i don't know - bad line? ignore. + #print STDERR "warning: $lineno: Bad line: $_"; } } elsif ($state == 3) { # scanning for function { (end of prototype) if ($line =~ /([a-zA-Z\s]+)enum(.*)$/) { @@ -1065,5 +1074,9 @@ foreach $file (@ARGV) { } } +} +if ($function_only != 0 && $function_found == 0) { + print STDERR "error: could not find the expected function\n"; + exit 1; } diff --git a/doc/scripts/getfuncs-map.pl b/doc/scripts/getfuncs-map.pl index 9076910b7e..3c75d1af82 100755 --- a/doc/scripts/getfuncs-map.pl +++ b/doc/scripts/getfuncs-map.pl @@ -32,17 +32,27 @@ 'gnutls_srp_3072_group_prime' => 1, 'gnutls_srp_4096_group_generator' => 1, 'gnutls_srp_4096_group_prime' => 1, + 'gnutls_srp_8192_group_generator' => 1, + 'gnutls_srp_8192_group_prime' => 1, 'gnutls_ffdhe_2048_group_generator' => 1, 'gnutls_ffdhe_2048_group_prime' => 1, + 'gnutls_ffdhe_2048_group_q' => 1, 'gnutls_ffdhe_2048_key_bits' => 1, 'gnutls_ffdhe_3072_group_generator' => 1, 'gnutls_ffdhe_3072_group_prime' => 1, + 'gnutls_ffdhe_3072_group_q' => 1, 'gnutls_ffdhe_3072_key_bits' => 1, 'gnutls_ffdhe_4096_group_generator' => 1, 'gnutls_ffdhe_4096_group_prime' => 1, + 'gnutls_ffdhe_4096_group_q' => 1, 'gnutls_ffdhe_4096_key_bits' => 1, + 'gnutls_ffdhe_6144_group_generator' => 1, + 'gnutls_ffdhe_6144_group_prime' => 1, + 'gnutls_ffdhe_6144_group_q' => 1, + 'gnutls_ffdhe_6144_key_bits' => 1, 'gnutls_ffdhe_8192_group_generator' => 1, 'gnutls_ffdhe_8192_group_prime' => 1, + 'gnutls_ffdhe_8192_group_q' => 1, 'gnutls_ffdhe_8192_key_bits' => 1, 'gnutls_transport_set_int' => 1, 'gnutls_strdup' => 1, diff --git a/doc/scripts/getfuncs.pl b/doc/scripts/getfuncs.pl index a041b23594..20eb391176 100755 --- a/doc/scripts/getfuncs.pl +++ b/doc/scripts/getfuncs.pl @@ -74,7 +74,11 @@ sub function_print { $line =~ m/^\s*typedef/) { next if ($line =~ m/;/); - $state = 2; + if ($line =~ m/\{/) { + $state = 2; + } else { + $state = 6; + } next; } elsif ($line =~ m/^\s*extern\s+"C"/) { next; @@ -103,8 +107,8 @@ sub function_print { $state = 0; next; } - } elsif ($state == 2) { #struct||enum||typedef - if ($line =~ m/;/) { + } elsif ($state == 2) { #struct||enum||typedef struct + if ($line =~ m/\}/) { $state = 0; next; } @@ -126,6 +130,11 @@ sub function_print { $state = 0; next; } + } elsif ($state == 6) { #typedef (not struct) + if ($line =~ m/;/) { + $state = 0; + next; + } } } diff --git a/doc/scripts/mytexi2latex b/doc/scripts/mytexi2latex index 5b7ea992ec..2e8bae16b9 100755 --- a/doc/scripts/mytexi2latex +++ b/doc/scripts/mytexi2latex @@ -83,7 +83,7 @@ my $pfuncref = \&funcref; my $pshowfunc = \&showfunc; my $pshowfuncdesc = \&showfuncdesc; my $pshowenumdesc = \&showenumdesc; -my $mode; +my $mode = NORMAL; my $num_args = $#ARGV + 1; if ($num_args != 1 || $ARGV[0] eq "-h" || $ARGV[0] eq "--help") { @@ -172,6 +172,9 @@ while ($line = ) { multitable: if ($line =~ s/\@end multitable/\\\\\n\\hline\n\\end{tabular}/g) { $mode = pop(@stack); + } elsif ($line =~ s/\@itemize/\\begin{itemize}/g) { + $mode = ITEMIZE; + push(@stack, MULTITABLE); } else { chomp $line; if ($line eq "") { @@ -209,7 +212,7 @@ multitable: if ($line =~ s/\@end example/\\end{example}/g) { $mode = pop(@stack); } - $line =~ s/\@{/{/g; + $line =~ s/\@\{/{/g; $line =~ s/\@}/}/g; $verbatim = 1; @@ -218,7 +221,7 @@ multitable: if ($line =~ s/\@end smallexample/\\end{smallexample}/g) { $mode = pop(@stack); } - $line =~ s/\@{/\{/g; + $line =~ s/\@\{/\{/g; $line =~ s/\@}/\}/g; $verbatim = 1; @@ -359,6 +362,7 @@ multitable: $line =~ s/\@c (.*)/\% $1/g; $line =~ s/\@math\{($mathmatch+)\}/\$$1\$/g; $line =~ s/\@acronym\{($spacematch+)\}/\\acronym{$1}/g; + $line =~ s/\@acronym\{/\\acronym{/g; $line =~ s/\s*\@xcite\{($match+)\}/~\\cite{$1}/g; $line =~ s/\s*\@xcite\{($match+)\,($match+)\}/~\\cite{$1,$2}/g; $line =~ s/\@footnote\{/\\footnote{/g; diff --git a/extra/gnutls_openssl.c b/extra/gnutls_openssl.c index 0bc4c5a1b4..aa5a0e708b 100644 --- a/extra/gnutls_openssl.c +++ b/extra/gnutls_openssl.c @@ -15,7 +15,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ #include diff --git a/extra/openssl_compat.c b/extra/openssl_compat.c index 4cee4cdb83..d8c60d4450 100644 --- a/extra/openssl_compat.c +++ b/extra/openssl_compat.c @@ -16,7 +16,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ /* This file includes all functions that were in the 0.5.x and 0.8.x diff --git a/fuzz/Makefile.am b/fuzz/Makefile.am new file mode 100644 index 0000000000..cf7fab1072 --- /dev/null +++ b/fuzz/Makefile.am @@ -0,0 +1,121 @@ +AM_CFLAGS = $(WERROR_CFLAGS) $(WARN_CFLAGS) -Wno-unused-parameter -Wno-pedantic +AM_CPPFLAGS = -I$(top_srcdir)/lib/includes -I$(top_builddir)/lib/includes -I$(srcdir) \ + -DSRCDIR=\"$(abs_srcdir)\" -DTEST_RUN + +LDADD = ../gl/libgnu.la ../lib/libgnutls.la \ + $(LIBOBJS) $(GETADDRINFO_LIB) $(HOSTENT_LIB) $(INET_NTOP_LIB)\ + $(LIBSOCKET) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) $(LIB_POLL) $(LIB_PTHREAD)\ + $(LIB_SELECT) $(LIBTHREAD) $(SERVENT_LIB) \ + $(LIBS) + +FUZZERS = \ + gnutls_x509_verify_fuzzer$(EXEEXT) \ + gnutls_base64_decoder_fuzzer$(EXEEXT) \ + gnutls_base64_encoder_fuzzer$(EXEEXT) \ + gnutls_client_fuzzer$(EXEEXT) \ + gnutls_client_rawpk_fuzzer$(EXEEXT) \ + gnutls_dn_parser_fuzzer$(EXEEXT) \ + gnutls_idna_parser_fuzzer$(EXEEXT) \ + gnutls_ocsp_req_parser_fuzzer$(EXEEXT) \ + gnutls_ocsp_resp_parser_fuzzer$(EXEEXT) \ + gnutls_pkcs12_key_parser_fuzzer$(EXEEXT) \ + gnutls_pkcs7_parser_fuzzer$(EXEEXT) \ + gnutls_pkcs8_key_parser_fuzzer$(EXEEXT) \ + gnutls_private_key_parser_fuzzer$(EXEEXT) \ + gnutls_psk_client_fuzzer$(EXEEXT) \ + gnutls_psk_server_fuzzer$(EXEEXT) \ + gnutls_reverse_idna_parser_fuzzer$(EXEEXT) \ + gnutls_server_fuzzer$(EXEEXT) \ + gnutls_server_rawpk_fuzzer$(EXEEXT) \ + gnutls_srp_client_fuzzer$(EXEEXT) \ + gnutls_srp_server_fuzzer$(EXEEXT) \ + gnutls_set_trust_file_fuzzer$(EXEEXT) \ + gnutls_x509_crl_parser_fuzzer$(EXEEXT) \ + gnutls_x509_crq_parser_fuzzer$(EXEEXT) \ + gnutls_x509_parser_fuzzer$(EXEEXT) \ + gnutls_ext_raw_parse_fuzzer$(EXEEXT) + +check_PROGRAMS = $(FUZZERS) + +COMMON_SOURCES = main.c fuzzer.h +gnutls_x509_verify_fuzzer_SOURCES = gnutls_x509_verify_fuzzer.c $(COMMON_SOURCES) +gnutls_base64_decoder_fuzzer_SOURCES = gnutls_base64_decoder_fuzzer.c $(COMMON_SOURCES) +gnutls_base64_encoder_fuzzer_SOURCES = gnutls_base64_encoder_fuzzer.c $(COMMON_SOURCES) +gnutls_client_fuzzer_SOURCES = gnutls_client_fuzzer.c $(COMMON_SOURCES) mem.h certs.h +gnutls_client_rawpk_fuzzer_SOURCES = gnutls_client_rawpk_fuzzer.c $(COMMON_SOURCES) mem.h certs.h +gnutls_dn_parser_fuzzer_SOURCES = gnutls_dn_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_idna_parser_fuzzer_SOURCES = gnutls_idna_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_ocsp_req_parser_fuzzer_SOURCES = gnutls_ocsp_req_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_ocsp_resp_parser_fuzzer_SOURCES = gnutls_ocsp_resp_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_pkcs12_key_parser_fuzzer_SOURCES = gnutls_pkcs12_key_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_pkcs7_parser_fuzzer_SOURCES = gnutls_pkcs7_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_pkcs8_key_parser_fuzzer_SOURCES = gnutls_pkcs8_key_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_private_key_parser_fuzzer_SOURCES = gnutls_private_key_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_psk_client_fuzzer_SOURCES = gnutls_psk_client_fuzzer.c $(COMMON_SOURCES) mem.h psk.h +gnutls_psk_server_fuzzer_SOURCES = gnutls_psk_server_fuzzer.c $(COMMON_SOURCES) mem.h psk.h +gnutls_reverse_idna_parser_fuzzer_SOURCES = gnutls_reverse_idna_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_server_fuzzer_SOURCES = gnutls_server_fuzzer.c $(COMMON_SOURCES) mem.h certs.h +gnutls_server_rawpk_fuzzer_SOURCES = gnutls_server_rawpk_fuzzer.c $(COMMON_SOURCES) mem.h certs.h +gnutls_srp_client_fuzzer_SOURCES = gnutls_srp_client_fuzzer.c $(COMMON_SOURCES) mem.h srp.h +gnutls_srp_server_fuzzer_SOURCES = gnutls_srp_server_fuzzer.c $(COMMON_SOURCES) mem.h srp.h +gnutls_set_trust_file_fuzzer_SOURCES = gnutls_set_trust_file_fuzzer.c $(COMMON_SOURCES) +gnutls_x509_crl_parser_fuzzer_SOURCES = gnutls_x509_crq_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_x509_crq_parser_fuzzer_SOURCES = gnutls_x509_crq_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_x509_parser_fuzzer_SOURCES = gnutls_x509_parser_fuzzer.c $(COMMON_SOURCES) +gnutls_ext_raw_parse_fuzzer_SOURCES = gnutls_ext_raw_parse_fuzzer.c $(COMMON_SOURCES) + +gnutls_set_trust_file_fuzzer_LDADD = $(LDADD) $(LIBDL) + + +#EXTRA_DIST = $(wildcard *.options) $(wildcard *.dict) \ +# $(wildcard *.in) $(wildcard *.repro) + +# We don't include the fuzz corpora into the tarball. +# Testing the corpora during dev cycles and in the CI is enough. +dist-hook: + find . -name '*.options' -exec cp -v '{}' $(distdir) ';' + find . -name '*.dict' -exec cp -v '{}' $(distdir) ';' +# find . -name '*.in' -exec cp -vr '{}' $(distdir) ';' + find . -name '*.repro' -exec cp -vr '{}' $(distdir) ';' + +TESTS = $(FUZZERS) + +clean-local: + rm -rf *.gc?? *.log lcov + +oss-fuzz: + if test "$$OUT" != ""; then \ + for ccfile in *_fuzzer.c; do \ + fuzzer=$$(basename $$ccfile .c); \ + XLIBS="-lhogweed -lnettle -ltasn1 -lgmp -lidn2 -lunistring"; \ + $$CC $$CFLAGS -I$(top_srcdir)/lib/includes/ -I$(top_srcdir) \ + -c "$${fuzzer}.c" -o "$${fuzzer}.o" ; \ + $$CXX $$CXXFLAGS "$${fuzzer}.o" -o "$${fuzzer}" \ + ../lib/.libs/libgnutls.a $${LIB_FUZZING_ENGINE} \ + -Wl,-Bstatic \ + $${XLIBS} \ + -Wl,-Bdynamic || exit $?; \ + done; \ + fi + +.PHONY: oss-fuzz + +CFLAGS ?= +LDFLAGS ?= +LCOV_INFO = coverage.info + +coverage-prepare: clean + rm -rf $(LCOV_INFO) ../*/*.gc?? ../*/.libs/*.gc?? lcov/ + lcov --zerocounters --directory ../lib/ + $(MAKE) -C .. clean + $(MAKE) -C ../gl + $(MAKE) -C ../lib CFLAGS="$(CFLAGS) --coverage" LDFLAGS="$(LDFLAGS) --coverage" + +coverage: + lcov --capture --initial --directory ../lib/ --output-file $(LCOV_INFO) + $(MAKE) check CFLAGS="$(CFLAGS) --coverage" LDFLAGS="$(LDFLAGS) --coverage" + lcov --capture --directory ../lib/ --output-file $(LCOV_INFO) + lcov --remove $(LCOV_INFO) '/usr/include/*' '*/gl/*' -o $(LCOV_INFO) + genhtml --prefix . --ignore-errors source $(LCOV_INFO) --legend --title "gnutls-fuzz" --output-directory=lcov + @echo + @echo "You can now view the coverage report with 'xdg-open lcov/index.html'" diff --git a/fuzz/README-adding-traces.md b/fuzz/README-adding-traces.md new file mode 100644 index 0000000000..20866f6ff3 --- /dev/null +++ b/fuzz/README-adding-traces.md @@ -0,0 +1,43 @@ +# Generate and add new protocol traces + +## Step 1: compilation + +Compile GnuTLS as: +``` +./configure --enable-fuzzer-target --disable-doc +``` + +## Step 2: Get the traces + +Start the server with the necessary parameters (here TLS1.3 is assumed). +``` +./gnutls-http-serv --priority NORMAL:-VERS-ALL:+VERS-TLS1.3 +``` + +Get the traces: +``` +gnutls-cli localhost:5556 --priority NORMAL:-VERS-ALL:+VERS-TLS1.3 --insecure --save-server-trace /tmp/server-trace-x509 --save-client-trace /tmp/client-trace-x509 +gnutls-cli localhost:5556 --priority NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:+PSK --insecure --save-server-trace /tmp/server-trace-psk1 --save-client-trace /tmp/client-trace-psk1 --pskusername test --pskkey 8a7759b3f26983c453e448060bde8981 +gnutls-cli localhost:5556 --priority NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:+DHE-PSK --insecure --save-server-trace /tmp/server-trace-psk2 --save-client-trace /tmp/client-trace-psk2 --pskusername test --pskkey 8a7759b3f26983c453e448060bde8981 +``` + +## Step 3: Ensure server can read them + +If there is a new key type tested, ensure that `gnutls_server_fuzzer` and +`gnutls_client_fuzzer` enable it, and set the appropriate keys. + +To verify that connection proceeds past to reading the first packet use: +$ make gnutls_server_fuzzer gnutls_client_fuzzer +$ GNUTLS_DEBUG_LEVEL=6 gnutls_server_fuzzer /tmp/server-trace-x509 +$ GNUTLS_DEBUG_LEVEL=6 gnutls_client_fuzzer /tmp/client-trace-x509 + + +## Step 4: Copy the traces + +cp /tmp/server-trace-x509 fuzz/gnutls_client_fuzzer.in/$(sha1sum /tmp/server-trace-x509|cut -d ' ' -f 1) +cp /tmp/server-trace-psk1 fuzz/gnutls_psk_client_fuzzer.in/$(sha1sum /tmp/server-trace-psk1|cut -d ' ' -f 1) +cp /tmp/server-trace-psk2 fuzz/gnutls_psk_client_fuzzer.in/$(sha1sum /tmp/server-trace-psk2|cut -d ' ' -f 1) + +cp /tmp/client-trace-x509 fuzz/gnutls_server_fuzzer.in/$(sha1sum /tmp/client-trace-x509|cut -d ' ' -f 1) +cp /tmp/client-trace-psk1 fuzz/gnutls_psk_server_fuzzer.in/$(sha1sum /tmp/client-trace-psk1|cut -d ' ' -f 1) +cp /tmp/client-trace-psk2 fuzz/gnutls_psk_server_fuzzer.in/$(sha1sum /tmp/client-trace-psk2|cut -d ' ' -f 1) diff --git a/fuzz/README.md b/fuzz/README.md new file mode 100644 index 0000000000..fecd62405c --- /dev/null +++ b/fuzz/README.md @@ -0,0 +1,102 @@ +# Fuzzers + +These are fuzzers designed for use with `libFuzzer` or `afl`. They can +be used to run on Google's OSS-Fuzz (https://github.com/google/oss-fuzz/). + +The convention used here is that the initial values for each parser fuzzer +are taken from the $NAME.in directory ($NAME is the name of the fuzzer, e.g. +'gnutls_x509_parser_fuzzer'). + +Crash reproducers from OSS-Fuzz are put into $NAME.repro directory for +regression testing with top dir 'make check'. + +The script `get_ossfuzz_corpora` downloads the corpora from OSS-Fuzz for +the given fuzzer. It puts those files together with the local ones and performs +a 'merge' step to remove superfluous corpora. The next step would be to add +changed/new corpora to the git repository. + +Example: +``` +./get_ossfuzz_corpora gnutls_x509_parser_fuzzer +git add gnutls_x509_parser_fuzzer.in/* +git commit -a -m "Update OSS-Fuzz corpora" +(create a branch and push if something changed) +(create a MR) +``` + +Since there are quite a few fuzzers now, you can update all their corpora +in one step with `./get_all_corpora`. Do this from time to time to stay +in sync with OSS-Fuzz. Whenever library code or fuzzers change, there might +me new corpora after 1-2 days. + + +# Running a fuzzer using clang and libFuzzer + +Use the following commands on top dir: +``` +export CC=clang +export CXX=clang++ +export CFLAGS="-O1 -g -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=undefined,integer,nullability,bool,alignment,null,enum,address,leak,nonnull-attribute -fno-sanitize-recover=all -fsanitize-recover=unsigned-integer-overflow -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link" +export CXXFLAGS="$CFLAGS" +./configure --disable-guile --enable-fuzzer-target --enable-static --disable-doc --disable-gcc-warnings --disable-hardware-acceleration +make clean +make +cd fuzz + +# build and run gnutls_base64_decode_fuzzer +export UBSAN_OPTIONS=print_stacktrace=1:report_error_type=1 +export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer +./run-clang.sh gnutls_base64_decoder_fuzzer +``` + + +# Running a fuzzer using AFL and clang + +Use the following commands on top dir: + +``` +$ CC=afl-clang-fast ./configure --disable-doc --enable-fuzzer-target --disable-guile +$ make -j$(nproc) clean all +$ cd fuzz +$ ./run-afl.sh gnutls_base64_decoder_fuzzer +``` + +# Running a fuzzer using AFL and gcc + +Use the following commands on top dir: + +``` +$ CC=afl-gcc ./configure --disable-doc --enable-fuzzer-target --disable-guile +$ make -j$(nproc) clean all +$ cd fuzz +$ ./run-afl.sh gnutls_base64_decoder_fuzzer +``` + +# Fuzz code coverage using the corpus directories *.in/ + +Code coverage reports currently work best with gcc+lcov+genhtml. + +In the top directory: +``` +./configure --enable-code-coverage --disable-doc +make clean +make +make -C fuzz check +make code-coverage-capture +xdg-open +# repeat the last three steps after changing *fuzzer.c +``` + +Each fuzzer target has it's own files/functions to cover, e.g. +`gnutls_base64_decode_fuzzer` covers lib/x509_b64.c. + +To work on corpora for better coverage, `cd fuzz` and use e.g. +`./view-coverage.sh gnutls_base64_decode_fuzzer`. + + +# Enhancing the testsuite for issues found + +Whenever you fix an issue from OSS-Fuzz (or an issue found via local fuzzing) +please download the corpus (data file) that triggers that issue and put it +into $NAME.repro. 'git add' the file and create a commit, to avoid future +regressions. diff --git a/fuzz/certs.h b/fuzz/certs.h new file mode 100644 index 0000000000..de57f9d4fe --- /dev/null +++ b/fuzz/certs.h @@ -0,0 +1,446 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * 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. + * + */ + +#ifndef CERTS_H +# define CERTS_H + +static const uint8_t kRSACertificateDER[] = { + 0x30, 0x82, 0x02, 0xff, 0x30, 0x82, 0x01, 0xe7, 0xa0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x11, 0x00, 0xb1, 0x84, 0xee, 0x34, 0x99, 0x98, 0x76, 0xfb, + 0x6f, 0xb2, 0x15, 0xc8, 0x47, 0x79, 0x05, 0x9b, 0x30, 0x0d, 0x06, 0x09, + 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, + 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x07, + 0x41, 0x63, 0x6d, 0x65, 0x20, 0x43, 0x6f, 0x30, 0x1e, 0x17, 0x0d, 0x31, + 0x35, 0x31, 0x31, 0x30, 0x37, 0x30, 0x30, 0x32, 0x34, 0x35, 0x36, 0x5a, + 0x17, 0x0d, 0x31, 0x36, 0x31, 0x31, 0x30, 0x36, 0x30, 0x30, 0x32, 0x34, + 0x35, 0x36, 0x5a, 0x30, 0x12, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, + 0x04, 0x0a, 0x13, 0x07, 0x41, 0x63, 0x6d, 0x65, 0x20, 0x43, 0x6f, 0x30, + 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, + 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xce, 0x47, 0xcb, 0x11, + 0xbb, 0xd2, 0x9d, 0x8e, 0x9e, 0xd2, 0x1e, 0x14, 0xaf, 0xc7, 0xea, 0xb6, + 0xc9, 0x38, 0x2a, 0x6f, 0xb3, 0x7e, 0xfb, 0xbc, 0xfc, 0x59, 0x42, 0xb9, + 0x56, 0xf0, 0x4c, 0x3f, 0xf7, 0x31, 0x84, 0xbe, 0xac, 0x03, 0x9e, 0x71, + 0x91, 0x85, 0xd8, 0x32, 0xbd, 0x00, 0xea, 0xac, 0x65, 0xf6, 0x03, 0xc8, + 0x0f, 0x8b, 0xfd, 0x6e, 0x58, 0x88, 0x04, 0x41, 0x92, 0x74, 0xa6, 0x57, + 0x2e, 0x8e, 0x88, 0xd5, 0x3d, 0xda, 0x14, 0x3e, 0x63, 0x88, 0x22, 0xe3, + 0x53, 0xe9, 0xba, 0x39, 0x09, 0xac, 0xfb, 0xd0, 0x4c, 0xf2, 0x3c, 0x20, + 0xd6, 0x97, 0xe6, 0xed, 0xf1, 0x62, 0x1e, 0xe5, 0xc9, 0x48, 0xa0, 0xca, + 0x2e, 0x3c, 0x14, 0x5a, 0x82, 0xd4, 0xed, 0xb1, 0xe3, 0x43, 0xc1, 0x2a, + 0x59, 0xa5, 0xb9, 0xc8, 0x48, 0xa7, 0x39, 0x23, 0x74, 0xa7, 0x37, 0xb0, + 0x6f, 0xc3, 0x64, 0x99, 0x6c, 0xa2, 0x82, 0xc8, 0xf6, 0xdb, 0x86, 0x40, + 0xce, 0xd1, 0x85, 0x9f, 0xce, 0x69, 0xf4, 0x15, 0x2a, 0x23, 0xca, 0xea, + 0xb7, 0x7b, 0xdf, 0xfb, 0x43, 0x5f, 0xff, 0x7a, 0x49, 0x49, 0x0e, 0xe7, + 0x02, 0x51, 0x45, 0x13, 0xe8, 0x90, 0x64, 0x21, 0x0c, 0x26, 0x2b, 0x5d, + 0xfc, 0xe4, 0xb5, 0x86, 0x89, 0x43, 0x22, 0x4c, 0xf3, 0x3b, 0xf3, 0x09, + 0xc4, 0xa4, 0x10, 0x80, 0xf2, 0x46, 0xe2, 0x46, 0x8f, 0x76, 0x50, 0xbf, + 0xaf, 0x2b, 0x90, 0x1b, 0x78, 0xc7, 0xcf, 0xc1, 0x77, 0xd0, 0xfb, 0xa9, + 0xfb, 0xc9, 0x66, 0x5a, 0xc5, 0x9b, 0x31, 0x41, 0x67, 0x01, 0xbe, 0x33, + 0x10, 0xba, 0x05, 0x58, 0xed, 0x76, 0x53, 0xde, 0x5d, 0xc1, 0xe8, 0xbb, + 0x9f, 0xf1, 0xcd, 0xfb, 0xdf, 0x64, 0x7f, 0xd7, 0x18, 0xab, 0x0f, 0x94, + 0x28, 0x95, 0x4a, 0xcc, 0x6a, 0xa9, 0x50, 0xc7, 0x05, 0x47, 0x10, 0x41, + 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30, 0x4e, 0x30, 0x0e, 0x06, + 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05, + 0xa0, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, 0x0c, 0x30, 0x0a, + 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x0c, + 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, + 0x30, 0x19, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x12, 0x30, 0x10, 0x82, + 0x0e, 0x66, 0x75, 0x7a, 0x7a, 0x2e, 0x62, 0x6f, 0x72, 0x69, 0x6e, 0x67, + 0x73, 0x73, 0x6c, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, + 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x92, + 0xde, 0xef, 0x96, 0x06, 0x7b, 0xff, 0x71, 0x7d, 0x4e, 0xa0, 0x7d, 0xae, + 0xb8, 0x22, 0xb4, 0x2c, 0xf7, 0x96, 0x9c, 0x37, 0x1d, 0x8f, 0xe7, 0xd9, + 0x47, 0xff, 0x3f, 0xe9, 0x35, 0x95, 0x0e, 0xdd, 0xdc, 0x7f, 0xc8, 0x8a, + 0x1e, 0x36, 0x1d, 0x38, 0x47, 0xfc, 0x76, 0xd2, 0x1f, 0x98, 0xa1, 0x36, + 0xac, 0xc8, 0x70, 0x38, 0x0a, 0x3d, 0x51, 0x8d, 0x0f, 0x03, 0x1b, 0xef, + 0x62, 0xa1, 0xcb, 0x2b, 0x4a, 0x8c, 0x12, 0x2b, 0x54, 0x50, 0x9a, 0x6b, + 0xfe, 0xaf, 0xd9, 0xf6, 0xbf, 0x58, 0x11, 0x58, 0x5e, 0xe5, 0x86, 0x1e, + 0x3b, 0x6b, 0x30, 0x7e, 0x72, 0x89, 0xe8, 0x6b, 0x7b, 0xb7, 0xaf, 0xef, + 0x8b, 0xa9, 0x3e, 0xb0, 0xcd, 0x0b, 0xef, 0xb0, 0x0c, 0x96, 0x2b, 0xc5, + 0x3b, 0xd5, 0xf1, 0xc2, 0xae, 0x3a, 0x60, 0xd9, 0x0f, 0x75, 0x37, 0x55, + 0x4d, 0x62, 0xd2, 0xed, 0x96, 0xac, 0x30, 0x6b, 0xda, 0xa1, 0x48, 0x17, + 0x96, 0x23, 0x85, 0x9a, 0x57, 0x77, 0xe9, 0x22, 0xa2, 0x37, 0x03, 0xba, + 0x49, 0x77, 0x40, 0x3b, 0x76, 0x4b, 0xda, 0xc1, 0x04, 0x57, 0x55, 0x34, + 0x22, 0x83, 0x45, 0x29, 0xab, 0x2e, 0x11, 0xff, 0x0d, 0xab, 0x55, 0xb1, + 0xa7, 0x58, 0x59, 0x05, 0x25, 0xf9, 0x1e, 0x3d, 0xb7, 0xac, 0x04, 0x39, + 0x2c, 0xf9, 0xaf, 0xb8, 0x68, 0xfb, 0x8e, 0x35, 0x71, 0x32, 0xff, 0x70, + 0xe9, 0x46, 0x6d, 0x5c, 0x06, 0x90, 0x88, 0x23, 0x48, 0x0c, 0x50, 0xeb, + 0x0a, 0xa9, 0xae, 0xe8, 0xfc, 0xbe, 0xa5, 0x76, 0x94, 0xd7, 0x64, 0x22, + 0x38, 0x98, 0x17, 0xa4, 0x3a, 0xa7, 0x59, 0x9f, 0x1d, 0x3b, 0x75, 0x90, + 0x1a, 0x81, 0xef, 0x19, 0xfb, 0x2b, 0xb7, 0xa7, 0x64, 0x61, 0x22, 0xa4, + 0x6f, 0x7b, 0xfa, 0x58, 0xbb, 0x8c, 0x4e, 0x77, 0x67, 0xd0, 0x5d, 0x58, + 0x76, 0x8a, 0xbb, +}; + +static const uint8_t kRSAPrivateKeyDER[] = { + 0x30, 0x82, 0x04, 0xa5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, + 0xce, 0x47, 0xcb, 0x11, 0xbb, 0xd2, 0x9d, 0x8e, 0x9e, 0xd2, 0x1e, 0x14, + 0xaf, 0xc7, 0xea, 0xb6, 0xc9, 0x38, 0x2a, 0x6f, 0xb3, 0x7e, 0xfb, 0xbc, + 0xfc, 0x59, 0x42, 0xb9, 0x56, 0xf0, 0x4c, 0x3f, 0xf7, 0x31, 0x84, 0xbe, + 0xac, 0x03, 0x9e, 0x71, 0x91, 0x85, 0xd8, 0x32, 0xbd, 0x00, 0xea, 0xac, + 0x65, 0xf6, 0x03, 0xc8, 0x0f, 0x8b, 0xfd, 0x6e, 0x58, 0x88, 0x04, 0x41, + 0x92, 0x74, 0xa6, 0x57, 0x2e, 0x8e, 0x88, 0xd5, 0x3d, 0xda, 0x14, 0x3e, + 0x63, 0x88, 0x22, 0xe3, 0x53, 0xe9, 0xba, 0x39, 0x09, 0xac, 0xfb, 0xd0, + 0x4c, 0xf2, 0x3c, 0x20, 0xd6, 0x97, 0xe6, 0xed, 0xf1, 0x62, 0x1e, 0xe5, + 0xc9, 0x48, 0xa0, 0xca, 0x2e, 0x3c, 0x14, 0x5a, 0x82, 0xd4, 0xed, 0xb1, + 0xe3, 0x43, 0xc1, 0x2a, 0x59, 0xa5, 0xb9, 0xc8, 0x48, 0xa7, 0x39, 0x23, + 0x74, 0xa7, 0x37, 0xb0, 0x6f, 0xc3, 0x64, 0x99, 0x6c, 0xa2, 0x82, 0xc8, + 0xf6, 0xdb, 0x86, 0x40, 0xce, 0xd1, 0x85, 0x9f, 0xce, 0x69, 0xf4, 0x15, + 0x2a, 0x23, 0xca, 0xea, 0xb7, 0x7b, 0xdf, 0xfb, 0x43, 0x5f, 0xff, 0x7a, + 0x49, 0x49, 0x0e, 0xe7, 0x02, 0x51, 0x45, 0x13, 0xe8, 0x90, 0x64, 0x21, + 0x0c, 0x26, 0x2b, 0x5d, 0xfc, 0xe4, 0xb5, 0x86, 0x89, 0x43, 0x22, 0x4c, + 0xf3, 0x3b, 0xf3, 0x09, 0xc4, 0xa4, 0x10, 0x80, 0xf2, 0x46, 0xe2, 0x46, + 0x8f, 0x76, 0x50, 0xbf, 0xaf, 0x2b, 0x90, 0x1b, 0x78, 0xc7, 0xcf, 0xc1, + 0x77, 0xd0, 0xfb, 0xa9, 0xfb, 0xc9, 0x66, 0x5a, 0xc5, 0x9b, 0x31, 0x41, + 0x67, 0x01, 0xbe, 0x33, 0x10, 0xba, 0x05, 0x58, 0xed, 0x76, 0x53, 0xde, + 0x5d, 0xc1, 0xe8, 0xbb, 0x9f, 0xf1, 0xcd, 0xfb, 0xdf, 0x64, 0x7f, 0xd7, + 0x18, 0xab, 0x0f, 0x94, 0x28, 0x95, 0x4a, 0xcc, 0x6a, 0xa9, 0x50, 0xc7, + 0x05, 0x47, 0x10, 0x41, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01, + 0x01, 0x00, 0xa8, 0x47, 0xb9, 0x4a, 0x06, 0x47, 0x93, 0x71, 0x3d, 0xef, + 0x7b, 0xca, 0xb4, 0x7c, 0x0a, 0xe6, 0x82, 0xd0, 0xe7, 0x0d, 0xa9, 0x08, + 0xf6, 0xa4, 0xfd, 0xd8, 0x73, 0xae, 0x6f, 0x56, 0x29, 0x5e, 0x25, 0x72, + 0xa8, 0x30, 0x44, 0x73, 0xcf, 0x56, 0x26, 0xb9, 0x61, 0xde, 0x42, 0x81, + 0xf4, 0xf0, 0x1f, 0x5d, 0xcb, 0x47, 0xf2, 0x26, 0xe9, 0xe0, 0x93, 0x28, + 0xa3, 0x10, 0x3b, 0x42, 0x1e, 0x51, 0x11, 0x12, 0x06, 0x5e, 0xaf, 0xce, + 0xb0, 0xa5, 0x14, 0xdd, 0x82, 0x58, 0xa1, 0xa4, 0x12, 0xdf, 0x65, 0x1d, + 0x51, 0x70, 0x64, 0xd5, 0x58, 0x68, 0x11, 0xa8, 0x6a, 0x23, 0xc2, 0xbf, + 0xa1, 0x25, 0x24, 0x47, 0xb3, 0xa4, 0x3c, 0x83, 0x96, 0xb7, 0x1f, 0xf4, + 0x44, 0xd4, 0xd1, 0xe9, 0xfc, 0x33, 0x68, 0x5e, 0xe2, 0x68, 0x99, 0x9c, + 0x91, 0xe8, 0x72, 0xc9, 0xd7, 0x8c, 0x80, 0x20, 0x8e, 0x77, 0x83, 0x4d, + 0xe4, 0xab, 0xf9, 0x74, 0xa1, 0xdf, 0xd3, 0xc0, 0x0d, 0x5b, 0x05, 0x51, + 0xc2, 0x6f, 0xb2, 0x91, 0x02, 0xec, 0xc0, 0x02, 0x1a, 0x5c, 0x91, 0x05, + 0xf1, 0xe3, 0xfa, 0x65, 0xc2, 0xad, 0x24, 0xe6, 0xe5, 0x3c, 0xb6, 0x16, + 0xf1, 0xa1, 0x67, 0x1a, 0x9d, 0x37, 0x56, 0xbf, 0x01, 0xd7, 0x3b, 0x35, + 0x30, 0x57, 0x73, 0xf4, 0xf0, 0x5e, 0xa7, 0xe8, 0x0a, 0xc1, 0x94, 0x17, + 0xcf, 0x0a, 0xbd, 0xf5, 0x31, 0xa7, 0x2d, 0xf7, 0xf5, 0xd9, 0x8c, 0xc2, + 0x01, 0xbd, 0xda, 0x16, 0x8e, 0xb9, 0x30, 0x40, 0xa6, 0x6e, 0xbd, 0xcd, + 0x4d, 0x84, 0x67, 0x4e, 0x0b, 0xce, 0xd5, 0xef, 0xf8, 0x08, 0x63, 0x02, + 0xc6, 0xc7, 0xf7, 0x67, 0x92, 0xe2, 0x23, 0x9d, 0x27, 0x22, 0x1d, 0xc6, + 0x67, 0x5e, 0x66, 0xbf, 0x03, 0xb8, 0xa9, 0x67, 0xd4, 0x39, 0xd8, 0x75, + 0xfa, 0xe8, 0xed, 0x56, 0xb8, 0x81, 0x02, 0x81, 0x81, 0x00, 0xf7, 0x46, + 0x68, 0xc6, 0x13, 0xf8, 0xba, 0x0f, 0x83, 0xdb, 0x05, 0xa8, 0x25, 0x00, + 0x70, 0x9c, 0x9e, 0x8b, 0x12, 0x34, 0x0d, 0x96, 0xcf, 0x0d, 0x98, 0x9b, + 0x8d, 0x9c, 0x96, 0x78, 0xd1, 0x3c, 0x01, 0x8c, 0xb9, 0x35, 0x5c, 0x20, + 0x42, 0xb4, 0x38, 0xe3, 0xd6, 0x54, 0xe7, 0x55, 0xd6, 0x26, 0x8a, 0x0c, + 0xf6, 0x1f, 0xe0, 0x04, 0xc1, 0x22, 0x42, 0x19, 0x61, 0xc4, 0x94, 0x7c, + 0x07, 0x2e, 0x80, 0x52, 0xfe, 0x8d, 0xe6, 0x92, 0x3a, 0x91, 0xfe, 0x72, + 0x99, 0xe1, 0x2a, 0x73, 0x76, 0xb1, 0x24, 0x20, 0x67, 0xde, 0x28, 0xcb, + 0x0e, 0xe6, 0x52, 0xb5, 0xfa, 0xfb, 0x8b, 0x1e, 0x6a, 0x1d, 0x09, 0x26, + 0xb9, 0xa7, 0x61, 0xba, 0xf8, 0x79, 0xd2, 0x66, 0x57, 0x28, 0xd7, 0x31, + 0xb5, 0x0b, 0x27, 0x19, 0x1e, 0x6f, 0x46, 0xfc, 0x54, 0x95, 0xeb, 0x78, + 0x01, 0xb6, 0xd9, 0x79, 0x5a, 0x4d, 0x02, 0x81, 0x81, 0x00, 0xd5, 0x8f, + 0x16, 0x53, 0x2f, 0x57, 0x93, 0xbf, 0x09, 0x75, 0xbf, 0x63, 0x40, 0x3d, + 0x27, 0xfd, 0x23, 0x21, 0xde, 0x9b, 0xe9, 0x73, 0x3f, 0x49, 0x02, 0xd2, + 0x38, 0x96, 0xcf, 0xc3, 0xba, 0x92, 0x07, 0x87, 0x52, 0xa9, 0x35, 0xe3, + 0x0c, 0xe4, 0x2f, 0x05, 0x7b, 0x37, 0xa5, 0x40, 0x9c, 0x3b, 0x94, 0xf7, + 0xad, 0xa0, 0xee, 0x3a, 0xa8, 0xfb, 0x1f, 0x11, 0x1f, 0xd8, 0x9a, 0x80, + 0x42, 0x3d, 0x7f, 0xa4, 0xb8, 0x9a, 0xaa, 0xea, 0x72, 0xc1, 0xe3, 0xed, + 0x06, 0x60, 0x92, 0x37, 0xf9, 0xba, 0xfb, 0x9e, 0xed, 0x05, 0xa6, 0xd4, + 0x72, 0x68, 0x4f, 0x63, 0xfe, 0xd6, 0x10, 0x0d, 0x4f, 0x0a, 0x93, 0xc6, + 0xb9, 0xd7, 0xaf, 0xfd, 0xd9, 0x57, 0x7d, 0xcb, 0x75, 0xe8, 0x93, 0x2b, + 0xae, 0x4f, 0xea, 0xd7, 0x30, 0x0b, 0x58, 0x44, 0x82, 0x0f, 0x84, 0x5d, + 0x62, 0x11, 0x78, 0xea, 0x5f, 0xc5, 0x02, 0x81, 0x81, 0x00, 0x82, 0x0c, + 0xc1, 0xe6, 0x0b, 0x72, 0xf1, 0x48, 0x5f, 0xac, 0xbd, 0x98, 0xe5, 0x7d, + 0x09, 0xbd, 0x15, 0x95, 0x47, 0x09, 0xa1, 0x6c, 0x03, 0x91, 0xbf, 0x05, + 0x70, 0xc1, 0x3e, 0x52, 0x64, 0x99, 0x0e, 0xa7, 0x98, 0x70, 0xfb, 0xf6, + 0xeb, 0x9e, 0x25, 0x9d, 0x8e, 0x88, 0x30, 0xf2, 0xf0, 0x22, 0x6c, 0xd0, + 0xcc, 0x51, 0x8f, 0x5c, 0x70, 0xc7, 0x37, 0xc4, 0x69, 0xab, 0x1d, 0xfc, + 0xed, 0x3a, 0x03, 0xbb, 0xa2, 0xad, 0xb6, 0xea, 0x89, 0x6b, 0x67, 0x4b, + 0x96, 0xaa, 0xd9, 0xcc, 0xc8, 0x4b, 0xfa, 0x18, 0x21, 0x08, 0xb2, 0xa3, + 0xb9, 0x3e, 0x61, 0x99, 0xdc, 0x5a, 0x97, 0x9c, 0x73, 0x6a, 0xb9, 0xf9, + 0x68, 0x03, 0x24, 0x5f, 0x55, 0x77, 0x9c, 0xb4, 0xbe, 0x7a, 0x78, 0x53, + 0x68, 0x48, 0x69, 0x53, 0xc8, 0xb1, 0xf5, 0xbf, 0x98, 0x2d, 0x11, 0x1e, + 0x98, 0xa8, 0x36, 0x50, 0xa0, 0xb1, 0x02, 0x81, 0x81, 0x00, 0x90, 0x88, + 0x30, 0x71, 0xc7, 0xfe, 0x9b, 0x6d, 0x95, 0x37, 0x6d, 0x79, 0xfc, 0x85, + 0xe7, 0x44, 0x78, 0xbc, 0x79, 0x6e, 0x47, 0x86, 0xc9, 0xf3, 0xdd, 0xc6, + 0xec, 0xa9, 0x94, 0x9f, 0x40, 0xeb, 0x87, 0xd0, 0xdb, 0xee, 0xcd, 0x1b, + 0x87, 0x23, 0xff, 0x76, 0xd4, 0x37, 0x8a, 0xcd, 0xb9, 0x6e, 0xd1, 0x98, + 0xf6, 0x97, 0x8d, 0xe3, 0x81, 0x6d, 0xc3, 0x4e, 0xd1, 0xa0, 0xc4, 0x9f, + 0xbd, 0x34, 0xe5, 0xe8, 0x53, 0x4f, 0xca, 0x10, 0xb5, 0xed, 0xe7, 0x16, + 0x09, 0x54, 0xde, 0x60, 0xa7, 0xd1, 0x16, 0x6e, 0x2e, 0xb7, 0xbe, 0x7a, + 0xd5, 0x9b, 0x26, 0xef, 0xe4, 0x0e, 0x77, 0xfa, 0xa9, 0xdd, 0xdc, 0xb9, + 0x88, 0x19, 0x23, 0x70, 0xc7, 0xe1, 0x60, 0xaf, 0x8c, 0x73, 0x04, 0xf7, + 0x71, 0x17, 0x81, 0x36, 0x75, 0xbb, 0x97, 0xd7, 0x75, 0xb6, 0x8e, 0xbc, + 0xac, 0x9c, 0x6a, 0x9b, 0x24, 0x89, 0x02, 0x81, 0x80, 0x5a, 0x2b, 0xc7, + 0x6b, 0x8c, 0x65, 0xdb, 0x04, 0x73, 0xab, 0x25, 0xe1, 0x5b, 0xbc, 0x3c, + 0xcf, 0x5a, 0x3c, 0x04, 0xae, 0x97, 0x2e, 0xfd, 0xa4, 0x97, 0x1f, 0x05, + 0x17, 0x27, 0xac, 0x7c, 0x30, 0x85, 0xb4, 0x82, 0x3f, 0x5b, 0xb7, 0x94, + 0x3b, 0x7f, 0x6c, 0x0c, 0xc7, 0x16, 0xc6, 0xa0, 0xbd, 0x80, 0xb0, 0x81, + 0xde, 0xa0, 0x23, 0xa6, 0xf6, 0x75, 0x33, 0x51, 0x35, 0xa2, 0x75, 0x55, + 0x70, 0x4d, 0x42, 0xbb, 0xcf, 0x54, 0xe4, 0xdb, 0x2d, 0x88, 0xa0, 0x7a, + 0xf2, 0x17, 0xa7, 0xdd, 0x13, 0x44, 0x9f, 0x5f, 0x6b, 0x2c, 0x42, 0x42, + 0x8b, 0x13, 0x4d, 0xf9, 0x5b, 0xf8, 0x33, 0x42, 0xd9, 0x9e, 0x50, 0x1c, + 0x7c, 0xbc, 0xfa, 0x62, 0x85, 0x0b, 0xcf, 0x99, 0xda, 0x9e, 0x04, 0x90, + 0xb2, 0xc6, 0xb2, 0x0a, 0x2a, 0x7c, 0x6d, 0x6a, 0x40, 0xfc, 0xf5, 0x50, + 0x98, 0x46, 0x89, 0x82, 0x40, +}; + +static const uint8_t kECDSACertificateDER[] = { + 0x30, 0x82, 0x02, 0xA6, 0x30, 0x82, 0x01, 0x5E, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x53, + 0x66, 0x2B, 0x39, 0x11, 0xBE, 0x18, 0xCB, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, + 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, 0x19, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x13, 0x0E, 0x47, 0x6E, 0x75, 0x54, 0x4C, 0x53, 0x20, 0x54, 0x65, 0x73, 0x74, 0x20, 0x43, + 0x41, 0x30, 0x22, 0x18, 0x0F, 0x32, 0x30, 0x31, 0x34, 0x30, 0x35, 0x30, 0x34, 0x31, 0x31, 0x35, + 0x37, 0x34, 0x36, 0x5A, 0x18, 0x0F, 0x39, 0x39, 0x39, 0x39, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, + 0x35, 0x39, 0x35, 0x39, 0x5A, 0x30, 0x14, 0x31, 0x12, 0x30, 0x10, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x13, 0x09, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x68, 0x6F, 0x73, 0x74, 0x30, 0x59, 0x30, 0x13, 0x06, + 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, + 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x4C, 0x54, 0x46, 0xB0, 0x82, 0x30, 0x2F, 0x08, 0x16, 0xB7, + 0x9F, 0x23, 0xFF, 0xCF, 0xBA, 0x05, 0x0D, 0x8B, 0x6D, 0x18, 0x58, 0xAC, 0x46, 0xB9, 0xD0, 0x9E, + 0xAB, 0x72, 0x76, 0xF7, 0xC8, 0x0B, 0x3B, 0xD7, 0x6F, 0x6D, 0xC4, 0x97, 0xFB, 0x0D, 0x88, 0x33, + 0xBD, 0x17, 0xE2, 0xFE, 0x43, 0x8B, 0x48, 0x99, 0x60, 0x24, 0x57, 0x9C, 0xB7, 0x25, 0x6E, 0x71, + 0x4A, 0x3F, 0x03, 0x64, 0xDC, 0xB1, 0xA3, 0x81, 0x8D, 0x30, 0x81, 0x8A, 0x30, 0x0C, 0x06, 0x03, + 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x02, 0x30, 0x00, 0x30, 0x14, 0x06, 0x03, 0x55, 0x1D, + 0x11, 0x04, 0x0D, 0x30, 0x0B, 0x82, 0x09, 0x6C, 0x6F, 0x63, 0x61, 0x6C, 0x68, 0x6F, 0x73, 0x74, + 0x30, 0x13, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x0C, 0x30, 0x0A, 0x06, 0x08, 0x2B, 0x06, 0x01, + 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, + 0x05, 0x03, 0x03, 0x07, 0x80, 0x00, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, + 0x14, 0xBE, 0xF6, 0x00, 0xC6, 0x24, 0x6B, 0x60, 0xEA, 0xB5, 0xF8, 0x13, 0xC9, 0xA5, 0xD5, 0xE0, + 0xC9, 0x29, 0xD5, 0xD7, 0x33, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, + 0x80, 0x14, 0x4D, 0x56, 0xB7, 0x6A, 0x00, 0x58, 0xF1, 0x67, 0x92, 0xF4, 0xA6, 0x75, 0x55, 0x1B, + 0x8E, 0x53, 0x01, 0x03, 0xEF, 0xCF, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, + 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, 0x01, 0x31, 0x00, 0x63, 0xCD, 0xAF, 0xA6, 0xFF, 0xCC, + 0x78, 0x47, 0xE5, 0x00, 0xE3, 0x69, 0xF8, 0xC5, 0x19, 0x47, 0xA0, 0xD7, 0x0A, 0x95, 0x95, 0x5C, + 0xC7, 0x88, 0x1C, 0x0A, 0x2A, 0x97, 0x1C, 0x7E, 0xC0, 0x0E, 0xBD, 0x3D, 0xFF, 0x9A, 0xBC, 0x17, + 0x0E, 0xD9, 0xB8, 0x30, 0xDE, 0x84, 0x5F, 0x13, 0xA7, 0xA3, 0xC4, 0xA3, 0x3F, 0x01, 0x4F, 0x48, + 0xBB, 0x8A, 0xD2, 0x59, 0x4F, 0x17, 0x6B, 0x99, 0xD7, 0xD7, 0x26, 0xF7, 0xFB, 0xFB, 0xAB, 0x8F, + 0x79, 0x45, 0x1C, 0x6C, 0x46, 0xD3, 0x4A, 0xB3, 0x39, 0x70, 0xE2, 0x40, 0x12, 0x02, 0x60, 0xCA, + 0xE9, 0x6E, 0xDB, 0x13, 0xC8, 0x24, 0x46, 0x38, 0xAB, 0x4A, 0xBC, 0xCE, 0xFF, 0x3C, 0x2D, 0x99, + 0xDC, 0x53, 0xF5, 0xC2, 0x2D, 0x42, 0x3A, 0xA8, 0xB6, 0x3D, 0x4D, 0x1C, 0x1D, 0x7D, 0xF3, 0x38, + 0x89, 0xC0, 0xDE, 0xCB, 0x90, 0x00, 0x5A, 0x5A, 0xB8, 0xA5, 0x3C, 0x76, 0xD7, 0x1D, 0x60, 0xE9, + 0x12, 0x31, 0x2B, 0x8C, 0xD3, 0xA0, 0xA0, 0x6B, 0x67, 0x17, 0xE8, 0xAD, 0x50, 0x87, 0xCA, 0x24, + 0x74, 0xFD, 0x4E, 0xED, 0x21, 0x10, 0xC1, 0x70, 0x59, 0x7E, 0x2B, 0x9D, 0x8B, 0x0E, 0xCB, 0x03, + 0xEC, 0xE5, 0x75, 0xC8, 0x1E, 0xB4, 0xAA, 0x1F, 0x81, 0x93, 0x1B, 0x8D, 0x77, 0xAF, 0x96, 0x83, + 0xBD, 0x03, 0xEC, 0x68, 0x4D, 0xE5, 0x1A, 0x7E, 0x32, 0x78, 0x85, 0x0D, 0x34, 0xBC, 0x60, 0xE2, + 0xDC, 0x2F, 0x43, 0x42, 0x1D, 0xE5, 0x66, 0xD2, 0x45, 0xAA, 0x86, 0x84, 0x41, 0xB3, 0x31, 0xA9, + 0xC8, 0x2F, 0xA6, 0x79, 0xC6, 0xA2, 0xBB, 0x7E, 0x08, 0x84, 0x43, 0x14, 0xBC, 0xB9, 0x30, 0xCA, + 0xA4, 0x46, 0x51, 0xFA, 0x40, 0xF4, 0x09, 0xAC, 0x03, 0xE0, 0xBC, 0xCE, 0x2C, 0xB3, 0xB4, 0x55, + 0xC7, 0x20, 0x4F, 0xE8, 0xAC, 0xC4, 0x95, 0x81, 0x6B, 0x4B, 0x1C, 0x02, 0x12, 0xB7, 0xA4, 0x1A, + 0x69, 0x69, 0xF1, 0x7D, 0x97, 0x55, 0xB4, 0x53, 0x40, 0x95, 0x10, 0x3A, 0x23, 0xE9, 0x43, 0xD3, + 0x62, 0xB7, 0x07, 0xAF, 0xE0, 0xF6, 0x81, 0x47, 0x93, 0x55, 0x1E, 0xE1, 0x0A, 0x64, 0xAA, 0x62, + 0x1D, 0x8B, 0xEA, 0xFA, 0xC7, 0x15, 0xA0, 0x8F, 0x88, 0xE0 +}; + +static const uint8_t kECDSAPrivateKeyDER[] = { + 0x30, 0x78, 0x02, 0x01, 0x01, 0x04, 0x21, 0x00, 0xDB, 0x98, 0xC6, 0xEB, 0xDB, 0xC9, 0x68, 0x33, + 0x25, 0x2C, 0x0B, 0xA9, 0xEC, 0x0C, 0x98, 0x4A, 0x3A, 0x01, 0x38, 0xB6, 0x10, 0x70, 0x4E, 0x24, + 0x5B, 0xAB, 0xB7, 0xD0, 0xB2, 0xC3, 0x99, 0xAB, 0xA0, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, + 0x3D, 0x03, 0x01, 0x07, 0xA1, 0x44, 0x03, 0x42, 0x00, 0x04, 0x4C, 0x54, 0x46, 0xB0, 0x82, 0x30, + 0x2F, 0x08, 0x16, 0xB7, 0x9F, 0x23, 0xFF, 0xCF, 0xBA, 0x05, 0x0D, 0x8B, 0x6D, 0x18, 0x58, 0xAC, + 0x46, 0xB9, 0xD0, 0x9E, 0xAB, 0x72, 0x76, 0xF7, 0xC8, 0x0B, 0x3B, 0xD7, 0x6F, 0x6D, 0xC4, 0x97, + 0xFB, 0x0D, 0x88, 0x33, 0xBD, 0x17, 0xE2, 0xFE, 0x43, 0x8B, 0x48, 0x99, 0x60, 0x24, 0x57, 0x9C, + 0xB7, 0x25, 0x6E, 0x71, 0x4A, 0x3F, 0x03, 0x64, 0xDC, 0xB1 +}; + +static const uint8_t kEd25519CertificateDER[] = { + 0x30, 0x82, 0x01, 0xc1, 0x30, 0x82, 0x01, 0x66, 0xa0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x08, 0x59, 0x36, 0x5a, 0xb1, 0x05, 0x86, 0x35, 0x51, 0x30, + 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x30, + 0x7d, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, + 0x42, 0x45, 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, + 0x06, 0x47, 0x6e, 0x75, 0x54, 0x4c, 0x53, 0x31, 0x25, 0x30, 0x23, 0x06, + 0x03, 0x55, 0x04, 0x0b, 0x13, 0x1c, 0x47, 0x6e, 0x75, 0x54, 0x4c, 0x53, + 0x20, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x31, 0x0f, + 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x06, 0x4c, 0x65, 0x75, + 0x76, 0x65, 0x6e, 0x31, 0x25, 0x30, 0x23, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x13, 0x1c, 0x47, 0x6e, 0x75, 0x54, 0x4c, 0x53, 0x20, 0x63, 0x65, 0x72, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x30, 0x20, 0x17, 0x0d, 0x31, 0x37, + 0x30, 0x36, 0x30, 0x36, 0x30, 0x37, 0x33, 0x33, 0x30, 0x35, 0x5a, 0x18, + 0x0f, 0x39, 0x39, 0x39, 0x39, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, + 0x39, 0x35, 0x39, 0x5a, 0x30, 0x19, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x13, 0x0e, 0x45, 0x64, 0x32, 0x35, 0x35, 0x31, 0x39, + 0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x30, 0x2a, 0x30, 0x05, 0x06, + 0x03, 0x2b, 0x65, 0x70, 0x03, 0x21, 0x00, 0xf3, 0x05, 0xfb, 0xe9, 0x73, + 0x2c, 0x8c, 0xdf, 0xc8, 0x25, 0xf4, 0xbf, 0x40, 0x7b, 0x2c, 0x86, 0x9b, + 0x65, 0x66, 0x7f, 0x75, 0xe3, 0xd6, 0xf4, 0x77, 0xb1, 0x21, 0xb5, 0xb7, + 0xb5, 0x89, 0x87, 0xa3, 0x61, 0x30, 0x5f, 0x30, 0x0c, 0x06, 0x03, 0x55, + 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0f, 0x06, + 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x05, 0x03, 0x03, 0x07, + 0x80, 0x00, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, + 0x14, 0xe3, 0x52, 0x4a, 0x73, 0x9d, 0x18, 0xbc, 0xe9, 0xbf, 0x7c, 0x4d, + 0x71, 0xc8, 0xbc, 0x66, 0x22, 0x8a, 0xab, 0x3c, 0xaa, 0x30, 0x1f, 0x06, + 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xf0, 0xb4, + 0x81, 0xfe, 0x98, 0x12, 0xbf, 0xb5, 0x28, 0xb9, 0x64, 0x40, 0x03, 0xcb, + 0xcc, 0x1f, 0x66, 0x4e, 0x28, 0x03, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, + 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, + 0x21, 0x00, 0xc7, 0x19, 0xf4, 0xa0, 0x33, 0x8e, 0x03, 0x55, 0x97, 0xeb, + 0x3f, 0x90, 0x85, 0xf0, 0xb4, 0x8d, 0x94, 0x53, 0x79, 0xe6, 0xd8, 0xb7, + 0x67, 0xaf, 0x58, 0x27, 0x44, 0x8a, 0xf0, 0x5c, 0xbd, 0x79, 0x02, 0x21, + 0x00, 0xdd, 0x94, 0x29, 0xe5, 0xf7, 0x97, 0xc0, 0x3d, 0x0a, 0x47, 0x26, + 0xed, 0xb6, 0xab, 0x46, 0x88, 0x7e, 0xab, 0x1e, 0xd9, 0x55, 0x8a, 0x5e, + 0xfb, 0x9c, 0x37, 0x25, 0x8b, 0xb1, 0xcb, 0x5e, 0xb0 +}; + +static const uint8_t kEd25519PrivateKeyDER[] = { + 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, + 0x04, 0x22, 0x04, 0x20, 0xe5, 0xc3, 0x25, 0x73, 0x94, 0xe8, 0x9e, 0x97, + 0x75, 0x7c, 0x78, 0x59, 0xf7, 0x32, 0x3c, 0x82, 0xcf, 0x60, 0x90, 0xc7, + 0xe5, 0xb4, 0x5f, 0x9b, 0xd7, 0xa6, 0xf8, 0x36, 0x0c, 0x92, 0x59, 0x70 +}; + +static const uint8_t kEd448PrivateKeyDER[] = { + 0x30, 0x47, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x71, + 0x04, 0x3b, 0x04, 0x39, 0x0c, 0xf8, 0x7e, 0xb0, 0x94, 0xbf, 0x46, 0xd1, + 0x61, 0xbd, 0xe3, 0xb9, 0x9d, 0x1d, 0x32, 0x85, 0x6f, 0xec, 0xfa, 0xe0, + 0x14, 0x23, 0x92, 0xcd, 0x98, 0xc0, 0x91, 0xdb, 0x20, 0x6d, 0x17, 0x4b, + 0xbf, 0x8e, 0xf4, 0x76, 0xa9, 0xcf, 0x74, 0x6d, 0x94, 0x30, 0x6c, 0x56, + 0x5f, 0x97, 0xac, 0x50, 0x79, 0x6f, 0x02, 0x1e, 0xff, 0x8d, 0x77, 0x9c, + 0xa5 +}; + +static const uint8_t kEd448CertificateDER[] = { + 0x30, 0x82, 0x02, 0x86, 0x30, 0x82, 0x01, 0x3e, 0xa0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x14, 0x71, 0x76, 0x43, 0x3c, 0xd1, 0x31, 0x93, 0x61, 0xdd, + 0xf7, 0x39, 0x0e, 0x77, 0xd7, 0x35, 0x41, 0x3b, 0x9d, 0xed, 0x8d, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, + 0x05, 0x00, 0x30, 0x19, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x13, 0x0e, 0x47, 0x6e, 0x75, 0x54, 0x4c, 0x53, 0x20, 0x54, 0x65, + 0x73, 0x74, 0x20, 0x43, 0x41, 0x30, 0x20, 0x17, 0x0d, 0x31, 0x39, 0x30, + 0x34, 0x32, 0x34, 0x31, 0x34, 0x35, 0x36, 0x35, 0x38, 0x5a, 0x18, 0x0f, + 0x39, 0x39, 0x39, 0x39, 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, + 0x35, 0x39, 0x5a, 0x30, 0x00, 0x30, 0x43, 0x30, 0x05, 0x06, 0x03, 0x2b, + 0x65, 0x71, 0x03, 0x3a, 0x00, 0x9a, 0xdd, 0xde, 0x61, 0xf6, 0x68, 0xf2, + 0xdb, 0xc0, 0xac, 0x24, 0x87, 0x4a, 0xdb, 0x47, 0xa2, 0xaa, 0x6a, 0xd5, + 0x9f, 0xa8, 0x88, 0xbd, 0xc5, 0xd4, 0x30, 0x70, 0x5e, 0xd0, 0x79, 0x6a, + 0x8c, 0x33, 0x07, 0x82, 0xb5, 0x18, 0x60, 0x78, 0x5b, 0xe6, 0x3f, 0xd7, + 0x9b, 0x1c, 0x7c, 0xf5, 0x8f, 0xd7, 0x28, 0xb2, 0xbf, 0x3d, 0x77, 0x39, + 0x51, 0x00, 0xa3, 0x81, 0x8d, 0x30, 0x81, 0x8a, 0x30, 0x0c, 0x06, 0x03, + 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x14, + 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x0d, 0x30, 0x0b, 0x82, 0x09, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x30, 0x13, 0x06, 0x03, + 0x55, 0x1d, 0x25, 0x04, 0x0c, 0x30, 0x0a, 0x06, 0x08, 0x2b, 0x06, 0x01, + 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x0f, + 0x01, 0x01, 0xff, 0x04, 0x05, 0x03, 0x03, 0x07, 0x80, 0x00, 0x30, 0x1d, + 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x60, 0x1a, 0x34, + 0x07, 0x71, 0x25, 0xec, 0x23, 0x5a, 0xe5, 0x71, 0xbc, 0x95, 0xec, 0x1b, + 0x8b, 0x9a, 0x19, 0xdc, 0xfb, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, + 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x4d, 0x56, 0xb7, 0x6a, 0x00, 0x58, + 0xf1, 0x67, 0x92, 0xf4, 0xa6, 0x75, 0x55, 0x1b, 0x8e, 0x53, 0x01, 0x03, + 0xef, 0xcf, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, + 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x31, 0x00, 0x2f, 0xec, + 0xc8, 0x85, 0xde, 0x78, 0x08, 0xab, 0x6d, 0x2e, 0xd7, 0xc2, 0x9f, 0x04, + 0xe1, 0xbb, 0x50, 0x73, 0xfc, 0xf5, 0x15, 0xb0, 0x48, 0xa5, 0x39, 0x0c, + 0x9b, 0xe0, 0x6f, 0xf6, 0x7f, 0xfd, 0x4a, 0xb2, 0x08, 0xa2, 0x27, 0xe7, + 0x68, 0x1b, 0x37, 0x28, 0xde, 0xd4, 0x19, 0xa4, 0xd2, 0x76, 0xff, 0x1d, + 0xa6, 0x02, 0x06, 0x87, 0x3d, 0x1e, 0x07, 0xfc, 0x7c, 0x8b, 0xf7, 0xdc, + 0x78, 0x10, 0xc9, 0xc6, 0x66, 0x93, 0xd3, 0x19, 0x3c, 0xa6, 0x77, 0xb7, + 0xee, 0xe3, 0x1d, 0x15, 0xd5, 0x59, 0x28, 0xd9, 0xd9, 0x7f, 0x4c, 0xc2, + 0x6e, 0x79, 0x00, 0xaf, 0xdd, 0xdc, 0x61, 0x68, 0xeb, 0x2e, 0x96, 0x39, + 0xdd, 0xd6, 0x4c, 0x9b, 0x10, 0x69, 0x4d, 0x05, 0x84, 0xd7, 0x5c, 0x03, + 0x63, 0xf1, 0xe3, 0x6d, 0x79, 0xd8, 0x2e, 0xb5, 0x40, 0x27, 0xb8, 0x3f, + 0x97, 0xb5, 0xea, 0x97, 0x5b, 0x78, 0x5d, 0x9f, 0x73, 0x00, 0xf4, 0x93, + 0x63, 0x99, 0x13, 0x36, 0xf9, 0x21, 0xef, 0x82, 0xdc, 0x16, 0xf4, 0x9a, + 0x96, 0x5c, 0xe9, 0xce, 0x78, 0x85, 0x48, 0x7f, 0x5b, 0xff, 0x7d, 0x8e, + 0xde, 0xb5, 0x70, 0x81, 0x24, 0x39, 0x8e, 0xd2, 0xaa, 0x61, 0xf3, 0x6b, + 0x54, 0x61, 0xac, 0x27, 0xf6, 0x1f, 0xec, 0x35, 0xe6, 0x22, 0xd2, 0xb8, + 0xef, 0x1d, 0x94, 0x47, 0x8e, 0x29, 0x70, 0x87, 0x2e, 0x9f, 0x36, 0x53, + 0xba, 0xe8, 0x4f, 0x97, 0xa2, 0xcd, 0x7a, 0x52, 0x27, 0xb8, 0xfa, 0x2f, + 0xa0, 0x9a, 0x7c, 0xce, 0xc1, 0xde, 0x70, 0x0f, 0x2c, 0x7b, 0x6a, 0x18, + 0x3b, 0x72, 0x34, 0x7c, 0x11, 0x77, 0x0a, 0x9c, 0x1d, 0x2c, 0x18, 0xc4, + 0x34, 0xa7, 0x58, 0x5a, 0xb7, 0x58, 0xff, 0x2f, 0x7c, 0xda, 0x70, 0xaa, + 0x78, 0xa4, 0x89, 0x06, 0x55, 0xee, 0xbf, 0x52, 0x89, 0xbf, 0x18, 0x0a, + 0x6f, 0x08, 0x51, 0xa2, 0x47, 0x59, 0x96, 0x06, 0xd9, 0x0e, 0x01, 0x72, + 0x5b, 0x3f, 0x7e, 0x74, 0xe9, 0x6a, 0x2f, 0x54, 0x00, 0xa4, 0x1e, 0x38, + 0x03, 0x6c, 0xa0, 0xb2, 0xb4, 0xf8, 0x33, 0x16, 0x4c, 0x1b, 0x0c, 0x00, + 0xa7, 0x7d, 0x84, 0xa3, 0x33, 0x44, 0x31, 0x96, 0x50, 0x9a, 0x99, 0xf2, + 0x4a, 0xdd +}; + +/* Raw public-key key material for testing */ +static char rawpk_public_key_pem1[] = + "-----BEGIN PUBLIC KEY-----\n" + "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAyAeBq7Ti7oVExeVT1PqH\n" + "GBXzC+johdeVnZgZRLhDTIaIGODV5F5JhE4NNb1O/DYLlAy5IIO8tfAE2KIxlarN\n" + "H/+AcfV6ZJQSG4SSmhoIGzfdcdjuBmFfdfhO+z/cgqiewh53/fFCQlaJweHhpmim\n" + "/LVL/M/1Rd6Urskv/5jXGG4FVUNfhXKQag0uzWsqcztCPX7Lrqr2BSOmkA1nWzdo\n" + "h5oBuxdooaH9/kwphqJAp03LwtaSStX/yz6Mh+ZqEbBuM4mWw/xKzbEbs7zA+d8s\n" + "ryHXkC8nsdA+h+IRd8bPa/KuWQNfjxXKNPzgmsZddHmHtYtWvAcoIMvtyO23Y2Nh\n" + "N4V0/7fwFLbZtfUBg4pqUl2ktkdwsNguTT1qzJCsYhsHXaqqvHy+5HR2D0w07y2X\n" + "1qCVmfHzBZCM5OhxoeoauE+xu+5nvYrgsgPE0y5Nty0y2MrApg3digaiKUXrI+mE\n" + "VKn9vsQeaVvw9D6PgNQM99HkbGhRMGPOzcHjS/ZeLd1zAgMBAAE=\n" + "-----END PUBLIC KEY-----"; + +const gnutls_datum_t rawpk_public_key1 = { + (unsigned char*)rawpk_public_key_pem1, + sizeof(rawpk_public_key_pem1) - 1 +}; + +static char rawpk_private_key_pem1[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIIG4wIBAAKCAYEAyAeBq7Ti7oVExeVT1PqHGBXzC+johdeVnZgZRLhDTIaIGODV\n" + "5F5JhE4NNb1O/DYLlAy5IIO8tfAE2KIxlarNH/+AcfV6ZJQSG4SSmhoIGzfdcdju\n" + "BmFfdfhO+z/cgqiewh53/fFCQlaJweHhpmim/LVL/M/1Rd6Urskv/5jXGG4FVUNf\n" + "hXKQag0uzWsqcztCPX7Lrqr2BSOmkA1nWzdoh5oBuxdooaH9/kwphqJAp03LwtaS\n" + "StX/yz6Mh+ZqEbBuM4mWw/xKzbEbs7zA+d8sryHXkC8nsdA+h+IRd8bPa/KuWQNf\n" + "jxXKNPzgmsZddHmHtYtWvAcoIMvtyO23Y2NhN4V0/7fwFLbZtfUBg4pqUl2ktkdw\n" + "sNguTT1qzJCsYhsHXaqqvHy+5HR2D0w07y2X1qCVmfHzBZCM5OhxoeoauE+xu+5n\n" + "vYrgsgPE0y5Nty0y2MrApg3digaiKUXrI+mEVKn9vsQeaVvw9D6PgNQM99HkbGhR\n" + "MGPOzcHjS/ZeLd1zAgMBAAECggGBALHiAw3Yscqd11gJpbCMDqF7u4VG3alQ26un\n" + "PClhl++w380H/Q62TriK1LKKpHgj8834NpXUsXg2d4jTTDcmCn6/L9GoFOzmxOeV\n" + "0O2b4sOZvaNl397qrwLxDAPhec7z9yL4B4tcBqmJ3b3+izX6cS3gaC/uG9fDpgN9\n" + "xOKPYBFInhOB86twAz9cc9eXysto0nJvlODDBj/xwUjvso9qydl1Or7PhWvf7Ek+\n" + "H9ur5MUjqOWe/b/xaSWsfTrJzF/ovbRnGbXLIpozIx609TZS4wYSqU5FUjkL0zTB\n" + "bTdb3jgFm/5SHnnThD67zbZavCxiN9wiTs3zeGlxYf8hMeaTkOYiAOR4/1bOTe2J\n" + "ttRA1EcY+i6H0+JOtLkqwj5ka0m3lrH2KD3E/mHs1yfERQx7VVjw9IpeAKmi5lzQ\n" + "v1lhIXiv75Mb0NMsCknGYPLHCyOY5aA2dhR8Wnr67gOYu3ssexLzMKczk5OTzl5c\n" + "PRHJRXDpJqgOYWujF99uCYhnxonO4QKBwQDUQB0s4shWTyOylq7j4rCSbHf2zHDf\n" + "HBYC75wyjQECNQXNk6hp5jJz2BC0XvnO7PYSRXaVauMc/S3V7V7GMsry3uugfwLy\n" + "XNnyRVY4voe5SNt/WAArybNsPNPEIPzgkZmeWvcpoY8ESufPfVW54BvGHt3YjPjI\n" + "gYmFUkpPRUWXfji91NpTlIrsP6jtBTYXGV4kVm+TawP06a6FdCjJQaI7Nm2dwUiX\n" + "Cmf4oFSo8mGxi0wimX+BiLJep2bYnUF2gqMCgcEA8UKESDX3jBpyz59vpSjmfpw1\n" + "AnlEfR6s83W92m0HfEYLulfxq9xA2zaQjy4GbaKVRfLrO2Pj3bZWs89RGXTQVGgq\n" + "ztCLIRsL+M1SQ883e8yx4jwFaqIM+pPpvAjOOOTdpgY33h7w20tgrbzVKeOl1ghC\n" + "IZ+K8C/tIGZXI5/TYppl7csIOoYRtzuRpyDE0tmwy658RfyxzEtfLxJoaLiFXOE0\n" + "zFFrEvT/jto4jN+cwsdnHhxrY9+bVNUNyb9ZH7bxAoHARvcIyjEo+nKLZPKsltT8\n" + "ZHiPw5ynQHGLin/CocQzSiGgRxPPg1jMFZ9wNl5q95ySyZkgBOUv+klMQfKTdYEW\n" + "Cg4uigLtYUtaM36rTV2m03RgrzslE37k1pOf2juNUShdTGztpqW1w6Gnz+AAAZ3E\n" + "q4E2e2jm5WMqL8FLxyVKF1TEc/Pu63MG3+aI/HZ5l0+MAmpD8+4b7I8VItmrqV6g\n" + "d1vDWrN9KcL48E/q/nHL6CjC0+6uiwjBWpRt9o7djFoxAoHAJzK/e1wJVGIXtVQa\n" + "N6Nlj7yhgD1ju1B4mTXQGuUMCkz3KtePFHU8tGExK5I2ySlZR3wobAXWx/cQLzbH\n" + "3nL0RkKGcgPAFyjl0Q7LBulsAllHrZJC7whVQ4E0wLBNkUDeIlNwUE6Go5qjopbD\n" + "q4KpNxUwaXYahNvEkzcNgWQ+XA7p8LDELX4K8tJi39ybHgbwiqdW2ags2xyD4ooD\n" + "HMCeKnEMuwWfd/0GaJdcCMdsGNl9D49eg2OZQTc8fkLwoA6BAoHATQdk3VZwGGn/\n" + "93p9vu189alkshTmir+SOo/ufH5U+j7t8cPeT7psuYAPZWS+Z6KEzvHxj54pAvcp\n" + "mlAngD3+AfHDn/VAtYv5HVcpZ+K2K0X4v8N5HGIubgaebs2oVNz+RAWnd8K2drDG\n" + "NcJV3C+zLziTCwvpGCIy3T/lHjKe+YczjGfhg2e6PgfwhTqPAjuhUZ8wScYo7l7V\n" + "zAhlSL0665IXJ32zX+3LyQFDbkB6pbKy5TU+rX3DmDyj3MSbc3kR\n" + "-----END RSA PRIVATE KEY-----\n"; + +const gnutls_datum_t rawpk_private_key1 = { + (unsigned char*)rawpk_private_key_pem1, + sizeof(rawpk_private_key_pem1) - 1 +}; + +#define IGNORE_CERTS \ + (void) kEd25519PrivateKeyDER; \ + (void) kEd25519CertificateDER; \ + (void) kEd448PrivateKeyDER; \ + (void) kEd448CertificateDER; \ + (void) kECDSAPrivateKeyDER; \ + (void) kECDSACertificateDER; \ + (void) kRSAPrivateKeyDER; \ + (void) kRSACertificateDER + +#endif diff --git a/fuzz/fuzzer.h b/fuzz/fuzzer.h new file mode 100644 index 0000000000..92ae91e49c --- /dev/null +++ b/fuzz/fuzzer.h @@ -0,0 +1,42 @@ +/* + * Copyright(c) 2017 Free Software Foundation, Inc. + * + * GnuTLS is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with gnutls. If not, see . + */ + +#include // size_t +#include // uint8_t +#include + +#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) + #pragma GCC diagnostic ignored "-Wvla-larger-than=" +#endif + +#ifdef __cplusplus +extern "C" +#endif + +#define VERS_STR "-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:+VERS-SSL3.0" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + +static void __attribute__((constructor)) init(void) +{ + gnutls_global_init(); +} + +static void __attribute__((destructor)) deinit(void) +{ + gnutls_global_deinit(); +} diff --git a/fuzz/get_all_corpora b/fuzz/get_all_corpora new file mode 100755 index 0000000000..3cec9f3dec --- /dev/null +++ b/fuzz/get_all_corpora @@ -0,0 +1,11 @@ +#!/bin/sh -u + +if ! grep -q FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION Makefile; then + echo "The fuzzers haven't been built for fuzzing (maybe for regression testing !?)" + echo "Please built regarding README.md and try again." + exit 1 +fi + +for fuzzer in *_fuzzer.c; do + ./get_ossfuzz_corpora $(basename $fuzzer .c) +done diff --git a/fuzz/get_ossfuzz_corpora b/fuzz/get_ossfuzz_corpora new file mode 100755 index 0000000000..ef1d5419c4 --- /dev/null +++ b/fuzz/get_ossfuzz_corpora @@ -0,0 +1,45 @@ +#!/bin/sh -eu + +# As a first step see README.md and follow the steps under "Running a fuzzer using clang". + +# You might need 'gsutil' to download new corpora from the Google cloud: +# Read the docs at https://github.com/google/oss-fuzz/blob/master/docs/corpora.md +# then install 'google-cloud-sdk' and execute 'gcloud init'. +# Now 'gsutil' should be ready to use. + +if test -z "$1"; then + echo "Usage: $0 " + echo "Example: $0 gnutls_base64_decode_fuzzer" + exit 1 +fi + +if ! grep -q FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION Makefile; then + echo "The fuzzers haven't been built for fuzzing (maybe for regression testing !?)" + echo "Please built regarding README.md and try again." + exit 1 +fi + +fuzzer=$1 +project=gnutls + +# sync/copy the OSS-Fuzz corpora into the .new directory +mkdir -p ${fuzzer}.new +cp -fp ${fuzzer}.in/* ${fuzzer}.new +gsutil cp $(gsutil ls gs://${project}-backup.clusterfuzz-external.appspot.com/corpus/libFuzzer/${fuzzer}|tail -n 1) ${fuzzer}.new +(cd ${fuzzer}.new && unzip -q -f -o *.zip && rm *.zip) + +# create fuzzer target +BUILD_ONLY=1 ./run-clang.sh ${fuzzer} + +# merge the corpora into the .in directory +./${fuzzer} -merge=1 ${fuzzer}.in ${fuzzer}.new + +# now clear .new dir and put all corpora there +rm -f ${fuzzer}.new/* +mv ${fuzzer}.in/* ${fuzzer}.new + +# now merge again (optimizes number of corpora) +./${fuzzer} -merge=1 ${fuzzer}.in ${fuzzer}.new + +echo +echo "If new files have been added, 'git add' and 'git commit' them." diff --git a/fuzz/gnutls_base64_decoder_fuzzer.c b/fuzz/gnutls_base64_decoder_fuzzer.c new file mode 100644 index 0000000000..c53f79de1e --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.c @@ -0,0 +1,43 @@ +/* +# Copyright 2017 Red Hat, Inc. +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include + +#include +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw = {.data = (unsigned char *)data, .size = size}; + gnutls_datum_t out; + unsigned char result[50]; + size_t result_size = sizeof(result); + int ret; + + ret = gnutls_pem_base64_decode2(NULL, &raw, &out); + if (ret >= 0) + gnutls_free(out.data); + + gnutls_pem_base64_decode(NULL, &raw, result, &result_size); + + ret = gnutls_base64_decode2(&raw, &out); + if (ret >= 0) + gnutls_free(out.data); + + return 0; +} diff --git a/fuzz/gnutls_base64_decoder_fuzzer.dict b/fuzz/gnutls_base64_decoder_fuzzer.dict new file mode 100644 index 0000000000..b5d5c9b392 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.dict @@ -0,0 +1,2 @@ +"-----BEGIN " +"-----END " diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/06a5fed5b06d6fb4ec5c70bc251d1d2456b8edff b/fuzz/gnutls_base64_decoder_fuzzer.in/06a5fed5b06d6fb4ec5c70bc251d1d2456b8edff new file mode 100644 index 0000000000..1409fe3036 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/06a5fed5b06d6fb4ec5c70bc251d1d2456b8edff @@ -0,0 +1 @@ +------BEGIN --- | -----END --END -BEGIN ----- ------END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/09b0e740c51d26189e9e95059696d80f21056df6 b/fuzz/gnutls_base64_decoder_fuzzer.in/09b0e740c51d26189e9e95059696d80f21056df6 new file mode 100644 index 0000000000..5e83897e2e Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/09b0e740c51d26189e9e95059696d80f21056df6 differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/13195d1815d942b639e38e230d7e7ee2b783af78 b/fuzz/gnutls_base64_decoder_fuzzer.in/13195d1815d942b639e38e230d7e7ee2b783af78 new file mode 100644 index 0000000000..9c6fe468a6 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/13195d1815d942b639e38e230d7e7ee2b783af78 differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/1d8956b540765b22b90a72e79867ad51d7245ae0 b/fuzz/gnutls_base64_decoder_fuzzer.in/1d8956b540765b22b90a72e79867ad51d7245ae0 new file mode 100644 index 0000000000..743210d118 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/1d8956b540765b22b90a72e79867ad51d7245ae0 differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/2193b67fae56eab32229eadd5b72879e3e51eba4 b/fuzz/gnutls_base64_decoder_fuzzer.in/2193b67fae56eab32229eadd5b72879e3e51eba4 new file mode 100644 index 0000000000..04f5128146 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/2193b67fae56eab32229eadd5b72879e3e51eba4 @@ -0,0 +1,73 @@ +------BEGIN ----- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +----- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BEGIN --------END -BE----- -N ,-----END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/22c586638f9bb3485df8b5ae1b850f571eaa47df b/fuzz/gnutls_base64_decoder_fuzzer.in/22c586638f9bb3485df8b5ae1b850f571eaa47df new file mode 100644 index 0000000000..3ae25e3b14 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/22c586638f9bb3485df8b5ae1b850f571eaa47df @@ -0,0 +1,2 @@ +------BEGI-----BEGIN -----BECIN IN N ------------END -BEGIN ; -BE-N GI------END N + diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/2eb0fbcd72b34101342ba7e89fe06035b7699ca7 b/fuzz/gnutls_base64_decoder_fuzzer.in/2eb0fbcd72b34101342ba7e89fe06035b7699ca7 new file mode 100644 index 0000000000..2ce7f9e871 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/2eb0fbcd72b34101342ba7e89fe06035b7699ca7 @@ -0,0 +1 @@ +------BEGIN -----BE -----END -----  ------BEGIN -----BEGIN --------END -BEGIN --------EN-----D -BE----- -N ,-----END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/300907961a955b62d2b561adad88785193150ece b/fuzz/gnutls_base64_decoder_fuzzer.in/300907961a955b62d2b561adad88785193150ece new file mode 100644 index 0000000000..2c5d1bc333 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/300907961a955b62d2b561adad88785193150ece @@ -0,0 +1 @@ +-----BEGIN IN \ No newline at end of file diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/319f4b080dbe99fe9ebbf970c6911344471fdf5a b/fuzz/gnutls_base64_decoder_fuzzer.in/319f4b080dbe99fe9ebbf970c6911344471fdf5a new file mode 100644 index 0000000000..193166a05a --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/319f4b080dbe99fe9ebbf970c6911344471fdf5a @@ -0,0 +1 @@ +-----BEGIN -----EGIHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHN -----B-----END TCIN IN \ No newline at end of file diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/3344167dd7b3463f7329576de6bdcdf8419cb38e b/fuzz/gnutls_base64_decoder_fuzzer.in/3344167dd7b3463f7329576de6bdcdf8419cb38e new file mode 100644 index 0000000000..922b58fe3e Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/3344167dd7b3463f7329576de6bdcdf8419cb38e differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/34dc5cb8d69dcf7e0949c299c96dc6c7e098dff1 b/fuzz/gnutls_base64_decoder_fuzzer.in/34dc5cb8d69dcf7e0949c299c96dc6c7e098dff1 new file mode 100644 index 0000000000..e32e789dbd --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/34dc5cb8d69dcf7e0949c299c96dc6c7e098dff1 @@ -0,0 +1 @@ + N diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/3501f140fb0eef625211cfbaf889383dafb0e585 b/fuzz/gnutls_base64_decoder_fuzzer.in/3501f140fb0eef625211cfbaf889383dafb0e585 new file mode 100644 index 0000000000..0bc5d46365 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/3501f140fb0eef625211cfbaf889383dafb0e585 differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/3a2556fd432243e5c4982bb94dac6e78faa3b3d6 b/fuzz/gnutls_base64_decoder_fuzzer.in/3a2556fd432243e5c4982bb94dac6e78faa3b3d6 new file mode 100644 index 0000000000..eeb2c2ea4b --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/3a2556fd432243e5c4982bb94dac6e78faa3b3d6 @@ -0,0 +1 @@ +-----BEGIN -----BE---------END -END CIN IN \ No newline at end of file diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/45c67d8749df8f1d7afbe50a0559d7a2847a6357 b/fuzz/gnutls_base64_decoder_fuzzer.in/45c67d8749df8f1d7afbe50a0559d7a2847a6357 new file mode 100644 index 0000000000..8c6a9d68bd --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/45c67d8749df8f1d7afbe50a0559d7a2847a6357 @@ -0,0 +1 @@ +------BEGIN --- | -----END -- ------END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/48c3a5fc14676b1f1b5b9734035722a316627293 b/fuzz/gnutls_base64_decoder_fuzzer.in/48c3a5fc14676b1f1b5b9734035722a316627293 new file mode 100644 index 0000000000..31faddd863 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/48c3a5fc14676b1f1b5b9734035722a316627293 differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/50c9e8d5fc98727b4bbc93cf5d64a68db647f04f b/fuzz/gnutls_base64_decoder_fuzzer.in/50c9e8d5fc98727b4bbc93cf5d64a68db647f04f new file mode 100644 index 0000000000..02358d2358 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/50c9e8d5fc98727b4bbc93cf5d64a68db647f04f @@ -0,0 +1 @@ +D \ No newline at end of file diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/650f3760e38b69b499ac5d81086bf9e5949008e0 b/fuzz/gnutls_base64_decoder_fuzzer.in/650f3760e38b69b499ac5d81086bf9e5949008e0 new file mode 100644 index 0000000000..2bbe7ad68c --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/650f3760e38b69b499ac5d81086bf9e5949008e0 @@ -0,0 +1 @@ +------BEGIN -----BE -----  ------BEGIN -----BEGIN --------END -BEGIN --------EN-----D -BE----- -N ,-----END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/69e85b72d4c822a22be86f5024c4d5722bfcdc77 b/fuzz/gnutls_base64_decoder_fuzzer.in/69e85b72d4c822a22be86f5024c4d5722bfcdc77 new file mode 100644 index 0000000000..3813503c30 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/69e85b72d4c822a22be86f5024c4d5722bfcdc77 @@ -0,0 +1,78 @@ +------BEGIN ----- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BEGIN --------END -BE----- -N ,-----END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/6ae3402940927c4e7837b9f439a6380f3ead06c1 b/fuzz/gnutls_base64_decoder_fuzzer.in/6ae3402940927c4e7837b9f439a6380f3ead06c1 new file mode 100644 index 0000000000..a5cdd5fb46 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/6ae3402940927c4e7837b9f439a6380f3ead06c1 @@ -0,0 +1,14 @@ +------BEGIN ----- + + + + + + + + + + + + +BEGIN -*-------END -BE----- -N ,-----END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/6c0fa37721c7632e1ca476d20c526bf05dd25810 b/fuzz/gnutls_base64_decoder_fuzzer.in/6c0fa37721c7632e1ca476d20c526bf05dd25810 new file mode 100644 index 0000000000..9385759829 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/6c0fa37721c7632e1ca476d20c526bf05dd25810 @@ -0,0 +1 @@ +------BEGIN -----'------END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/77a57c513f944af275d195c8ae9e63e545886bad b/fuzz/gnutls_base64_decoder_fuzzer.in/77a57c513f944af275d195c8ae9e63e545886bad new file mode 100644 index 0000000000..d53f95e1e0 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/77a57c513f944af275d195c8ae9e63e545886bad @@ -0,0 +1,2 @@ + prefer------BEGIN --- _smallEG + | -----END --END -BEGIN ----- ------END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/77b0d57b3fc7448e27c7e756926ef98073681922 b/fuzz/gnutls_base64_decoder_fuzzer.in/77b0d57b3fc7448e27c7e756926ef98073681922 new file mode 100644 index 0000000000..06f9c9bf32 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/77b0d57b3fc7448e27c7e756926ef98073681922 differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/7c140113dd16925a25ba13d591d5047ae6175808 b/fuzz/gnutls_base64_decoder_fuzzer.in/7c140113dd16925a25ba13d591d5047ae6175808 new file mode 100644 index 0000000000..bf275d00f4 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/7c140113dd16925a25ba13d591d5047ae6175808 differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/7d40cd8b28e1ae83ce39fdd27714c5ffdeaa627b b/fuzz/gnutls_base64_decoder_fuzzer.in/7d40cd8b28e1ae83ce39fdd27714c5ffdeaa627b new file mode 100644 index 0000000000..a8d2ab4ade --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/7d40cd8b28e1ae83ce39fdd27714c5ffdeaa627b @@ -0,0 +1 @@ +BEGI-----END -----END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/98265e1285328beb83bbe52cb8ce961f11400089 b/fuzz/gnutls_base64_decoder_fuzzer.in/98265e1285328beb83bbe52cb8ce961f11400089 new file mode 100644 index 0000000000..2219155eed --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/98265e1285328beb83bbe52cb8ce961f11400089 @@ -0,0 +1 @@ +-----BEGIN diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/98752bb27ec07792dfbc7f6215247edc9c58db22 b/fuzz/gnutls_base64_decoder_fuzzer.in/98752bb27ec07792dfbc7f6215247edc9c58db22 new file mode 100644 index 0000000000..d4b044280c --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/98752bb27ec07792dfbc7f6215247edc9c58db22 @@ -0,0 +1 @@ +------BEGIN -- --BEGIN --;----- -N ,-----END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/9a8893897449bcdb0593374aa9720ed939d51ba7 b/fuzz/gnutls_base64_decoder_fuzzer.in/9a8893897449bcdb0593374aa9720ed939d51ba7 new file mode 100644 index 0000000000..3ca438e2e0 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/9a8893897449bcdb0593374aa9720ed939d51ba7 differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/a19a16991961935af21205d2a833bb8de89fc6dc b/fuzz/gnutls_base64_decoder_fuzzer.in/a19a16991961935af21205d2a833bb8de89fc6dc new file mode 100644 index 0000000000..a825f67a56 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/a19a16991961935af21205d2a833bb8de89fc6dc differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/aaf6b87f3f843e5a6a2abc0c3267b0944f9b053d b/fuzz/gnutls_base64_decoder_fuzzer.in/aaf6b87f3f843e5a6a2abc0c3267b0944f9b053d new file mode 100644 index 0000000000..3193ab6cfc Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/aaf6b87f3f843e5a6a2abc0c3267b0944f9b053d differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/b3ab535e619d316ebb60044026a1511b3d659acd b/fuzz/gnutls_base64_decoder_fuzzer.in/b3ab535e619d316ebb60044026a1511b3d659acd new file mode 100644 index 0000000000..c71d88b8a4 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/b3ab535e619d316ebb60044026a1511b3d659acd @@ -0,0 +1 @@ +------BEGIN --- -----END --END -BEGIN ----- ------END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/b5b508f2347df89b2d788310b50cee17af603185 b/fuzz/gnutls_base64_decoder_fuzzer.in/b5b508f2347df89b2d788310b50cee17af603185 new file mode 100644 index 0000000000..283bc23618 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/b5b508f2347df89b2d788310b50cee17af603185 @@ -0,0 +1 @@ +------BEGIN --------END -BEGIN ; -N ------END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/c2dac13eef21fee0889051e205021e009c03956d b/fuzz/gnutls_base64_decoder_fuzzer.in/c2dac13eef21fee0889051e205021e009c03956d new file mode 100644 index 0000000000..102fae6c75 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/c2dac13eef21fee0889051e205021e009c03956d @@ -0,0 +1 @@ +------BEGIN -----'---END -BEGIN ; -N ------END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/c50d4f090b2aef63b0ab85cb58c6bcb28a2014e9 b/fuzz/gnutls_base64_decoder_fuzzer.in/c50d4f090b2aef63b0ab85cb58c6bcb28a2014e9 new file mode 100644 index 0000000000..993a45adb0 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/c50d4f090b2aef63b0ab85cb58c6bcb28a2014e9 @@ -0,0 +1 @@ +------BEGIN -----BE ------BEGIN -----BEGIN --------END -BEGIN --------END -BE----- -N ,-----END diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/c578771fe225a383634c94f6872a5e4b5f0c8d6f b/fuzz/gnutls_base64_decoder_fuzzer.in/c578771fe225a383634c94f6872a5e4b5f0c8d6f new file mode 100644 index 0000000000..daa9049dfa --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/c578771fe225a383634c94f6872a5e4b5f0c8d6f @@ -0,0 +1 @@ +-----BEGIN -----EGIN -----B-----END TCIN IN \ No newline at end of file diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/c834d85ccb334060996bdb34f7bfcbc9a5306bd5 b/fuzz/gnutls_base64_decoder_fuzzer.in/c834d85ccb334060996bdb34f7bfcbc9a5306bd5 new file mode 100644 index 0000000000..6f738b7820 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/c834d85ccb334060996bdb34f7bfcbc9a5306bd5 differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/c9a7d680773db474a865c5fdbdca782214f9adca b/fuzz/gnutls_base64_decoder_fuzzer.in/c9a7d680773db474a865c5fdbdca782214f9adca new file mode 100644 index 0000000000..20f2ebdcc9 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/c9a7d680773db474a865c5fdbdca782214f9adca differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/cf5f988c98ebfa885f10b00f9028c9ddf7d7a52e b/fuzz/gnutls_base64_decoder_fuzzer.in/cf5f988c98ebfa885f10b00f9028c9ddf7d7a52e new file mode 100644 index 0000000000..42dce3d537 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/cf5f988c98ebfa885f10b00f9028c9ddf7d7a52e @@ -0,0 +1 @@ + ----BEGIN diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/d20d393214c8ce0de6a2ec194862716750671faa b/fuzz/gnutls_base64_decoder_fuzzer.in/d20d393214c8ce0de6a2ec194862716750671faa new file mode 100644 index 0000000000..196bef7fea Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/d20d393214c8ce0de6a2ec194862716750671faa differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/d534bf1999fd5a4476912c43762d57b6e8d0bb2f b/fuzz/gnutls_base64_decoder_fuzzer.in/d534bf1999fd5a4476912c43762d57b6e8d0bb2f new file mode 100644 index 0000000000..430d3f291d --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/d534bf1999fd5a4476912c43762d57b6e8d0bb2f @@ -0,0 +1 @@ +-----BEGIN -----BECIN IN \ No newline at end of file diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/da6c5e58e5725f220ec7c66fa3b88a600646e256 b/fuzz/gnutls_base64_decoder_fuzzer.in/da6c5e58e5725f220ec7c66fa3b88a600646e256 new file mode 100644 index 0000000000..3b68b4b57b Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/da6c5e58e5725f220ec7c66fa3b88a600646e256 differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/dd255871b11d5def36dbc2353a055a3f430fd39e b/fuzz/gnutls_base64_decoder_fuzzer.in/dd255871b11d5def36dbc2353a055a3f430fd39e new file mode 100644 index 0000000000..e69109c9a2 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/dd255871b11d5def36dbc2353a055a3f430fd39e differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/e36cc9f82f6883cdd721ffb22be5c06a4192c88a b/fuzz/gnutls_base64_decoder_fuzzer.in/e36cc9f82f6883cdd721ffb22be5c06a4192c88a new file mode 100644 index 0000000000..422f06719e --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/e36cc9f82f6883cdd721ffb22be5c06a4192c88a @@ -0,0 +1 @@ +=----BE)IN \ No newline at end of file diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/e87b17778873e625e1bad3437aa8cda3ab265312 b/fuzz/gnutls_base64_decoder_fuzzer.in/e87b17778873e625e1bad3437aa8cda3ab265312 new file mode 100644 index 0000000000..4bff00df0e Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/e87b17778873e625e1bad3437aa8cda3ab265312 differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/eb6e0ceb5a2b210c044a2555f8860274597640af b/fuzz/gnutls_base64_decoder_fuzzer.in/eb6e0ceb5a2b210c044a2555f8860274597640af new file mode 100644 index 0000000000..0df52ee740 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/eb6e0ceb5a2b210c044a2555f8860274597640af differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/f0ce6fce4bf0eed40b43d50a4c55303e0aa0ee5e b/fuzz/gnutls_base64_decoder_fuzzer.in/f0ce6fce4bf0eed40b43d50a4c55303e0aa0ee5e new file mode 100644 index 0000000000..5527ee3d16 --- /dev/null +++ b/fuzz/gnutls_base64_decoder_fuzzer.in/f0ce6fce4bf0eed40b43d50a4c55303e0aa0ee5e @@ -0,0 +1 @@ +BG-E diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/f443317796f6bcf0dbeb3eff39f46a18f3f5407b b/fuzz/gnutls_base64_decoder_fuzzer.in/f443317796f6bcf0dbeb3eff39f46a18f3f5407b new file mode 100644 index 0000000000..21aa216437 Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/f443317796f6bcf0dbeb3eff39f46a18f3f5407b differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/f468c18bda9722e10e294669d37ecd44e2214c7d b/fuzz/gnutls_base64_decoder_fuzzer.in/f468c18bda9722e10e294669d37ecd44e2214c7d new file mode 100644 index 0000000000..ef19757f7b Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/f468c18bda9722e10e294669d37ecd44e2214c7d differ diff --git a/fuzz/gnutls_base64_decoder_fuzzer.in/f483199c73abad2884626b6e7498b9df8cdd8781 b/fuzz/gnutls_base64_decoder_fuzzer.in/f483199c73abad2884626b6e7498b9df8cdd8781 new file mode 100644 index 0000000000..462aede91f Binary files /dev/null and b/fuzz/gnutls_base64_decoder_fuzzer.in/f483199c73abad2884626b6e7498b9df8cdd8781 differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.c b/fuzz/gnutls_base64_encoder_fuzzer.c new file mode 100644 index 0000000000..da0c767c16 --- /dev/null +++ b/fuzz/gnutls_base64_encoder_fuzzer.c @@ -0,0 +1,43 @@ +/* +# Copyright 2017 Red Hat, Inc. +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include + +#include +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw = {.data = (unsigned char *)data, .size = size}; + gnutls_datum_t out; + char result[50]; + size_t result_size = sizeof(result); + int ret; + + ret = gnutls_pem_base64_encode2(NULL, &raw, &out); + if (ret >= 0) + gnutls_free(out.data); + + gnutls_pem_base64_encode("x", &raw, result, &result_size); + + ret = gnutls_base64_encode2(&raw, &out); + if (ret >= 0) + gnutls_free(out.data); + + return 0; +} diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/12b7c253191262d78cfe850c7332f62b40139285 b/fuzz/gnutls_base64_encoder_fuzzer.in/12b7c253191262d78cfe850c7332f62b40139285 new file mode 100644 index 0000000000..7cb9ac2395 Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/12b7c253191262d78cfe850c7332f62b40139285 differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/1fd2ca184c27e4e194ddfd737e748009344f4727 b/fuzz/gnutls_base64_encoder_fuzzer.in/1fd2ca184c27e4e194ddfd737e748009344f4727 new file mode 100644 index 0000000000..5dd843889d Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/1fd2ca184c27e4e194ddfd737e748009344f4727 differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/22149a3f84d3ffeddf53446cc1735ee1ea1d63fb b/fuzz/gnutls_base64_encoder_fuzzer.in/22149a3f84d3ffeddf53446cc1735ee1ea1d63fb new file mode 100644 index 0000000000..4c7dde5570 Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/22149a3f84d3ffeddf53446cc1735ee1ea1d63fb differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/3a613c6b780e0ba37063a489104ea04fb4e8403d b/fuzz/gnutls_base64_encoder_fuzzer.in/3a613c6b780e0ba37063a489104ea04fb4e8403d new file mode 100644 index 0000000000..5abd88cf52 Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/3a613c6b780e0ba37063a489104ea04fb4e8403d differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/3ecac05f06cb4ef9f6395de196303279cf1d4f56 b/fuzz/gnutls_base64_encoder_fuzzer.in/3ecac05f06cb4ef9f6395de196303279cf1d4f56 new file mode 100644 index 0000000000..4332c16961 Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/3ecac05f06cb4ef9f6395de196303279cf1d4f56 differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/5a394cc9cf8e31862e4049a4bbf802191881de9c b/fuzz/gnutls_base64_encoder_fuzzer.in/5a394cc9cf8e31862e4049a4bbf802191881de9c new file mode 100644 index 0000000000..94fbcbce50 Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/5a394cc9cf8e31862e4049a4bbf802191881de9c differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/5b10d736d681bc3a4e3f480cb54b1fecadd6efb4 b/fuzz/gnutls_base64_encoder_fuzzer.in/5b10d736d681bc3a4e3f480cb54b1fecadd6efb4 new file mode 100644 index 0000000000..5d93a4b190 Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/5b10d736d681bc3a4e3f480cb54b1fecadd6efb4 differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/80c62e73074c1f2f0bd65669be4b2d0bdab67627 b/fuzz/gnutls_base64_encoder_fuzzer.in/80c62e73074c1f2f0bd65669be4b2d0bdab67627 new file mode 100644 index 0000000000..3735f44ed7 Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/80c62e73074c1f2f0bd65669be4b2d0bdab67627 differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/88bb59b0031f67a95113b5f60ace4b0eb31b0805 b/fuzz/gnutls_base64_encoder_fuzzer.in/88bb59b0031f67a95113b5f60ace4b0eb31b0805 new file mode 100644 index 0000000000..ceeac01136 Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/88bb59b0031f67a95113b5f60ace4b0eb31b0805 differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/cc102db3b5b11cc73f518e1926282ede5647b701 b/fuzz/gnutls_base64_encoder_fuzzer.in/cc102db3b5b11cc73f518e1926282ede5647b701 new file mode 100644 index 0000000000..c6183664a7 Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/cc102db3b5b11cc73f518e1926282ede5647b701 differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/e201370a3a40a86e62437c974f188707305d6b88 b/fuzz/gnutls_base64_encoder_fuzzer.in/e201370a3a40a86e62437c974f188707305d6b88 new file mode 100644 index 0000000000..895cc2bd2c Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/e201370a3a40a86e62437c974f188707305d6b88 differ diff --git a/fuzz/gnutls_base64_encoder_fuzzer.in/fb2604f41b6c4016c035766d9d7343625e9266a0 b/fuzz/gnutls_base64_encoder_fuzzer.in/fb2604f41b6c4016c035766d9d7343625e9266a0 new file mode 100644 index 0000000000..9233145cbd Binary files /dev/null and b/fuzz/gnutls_base64_encoder_fuzzer.in/fb2604f41b6c4016c035766d9d7343625e9266a0 differ diff --git a/fuzz/gnutls_client_fuzzer.c b/fuzz/gnutls_client_fuzzer.c new file mode 100644 index 0000000000..b68cdb6d7c --- /dev/null +++ b/fuzz/gnutls_client_fuzzer.c @@ -0,0 +1,76 @@ +/* +# Copyright 2016 Google Inc. +# Copyright 2017 Red Hat, Inc. +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "mem.h" +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size) +{ + int res; + gnutls_session_t session; + gnutls_certificate_credentials_t xcred; + struct mem_st memdata; + + res = gnutls_init(&session, GNUTLS_CLIENT); + assert(res >= 0); + + res = gnutls_certificate_allocate_credentials(&xcred); + assert(res >= 0); + res = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + assert(res >= 0); + + /*res = gnutls_set_default_priority(session);*/ + res = gnutls_priority_set_direct(session, "NORMAL:+SIGN-EDDSA-ED448:"VERS_STR, NULL); + assert(res >= 0); + + memdata.data = data; + memdata.size = size; + + gnutls_transport_set_push_function(session, mem_push); + gnutls_transport_set_pull_function(session, mem_pull); + gnutls_transport_set_pull_timeout_function(session, mem_pull_timeout); + gnutls_transport_set_ptr(session, &memdata); + + do { + res = gnutls_handshake(session); + } while (res < 0 && gnutls_error_is_fatal(res) == 0); + if (res >= 0) { + while (true) { + char buf[16384]; + res = gnutls_record_recv(session, buf, sizeof(buf)); + if (res <= 0) { + break; + } + } + } + + gnutls_deinit(session); + gnutls_certificate_free_credentials(xcred); + return 0; +} diff --git a/fuzz/gnutls_client_fuzzer.in/002432133028e6bdfcdcfd4b008eb7e80aac91c3 b/fuzz/gnutls_client_fuzzer.in/002432133028e6bdfcdcfd4b008eb7e80aac91c3 new file mode 100644 index 0000000000..82a99921c6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/002432133028e6bdfcdcfd4b008eb7e80aac91c3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/0053a77d9843fe602ebac5461839499ede3b9d71 b/fuzz/gnutls_client_fuzzer.in/0053a77d9843fe602ebac5461839499ede3b9d71 new file mode 100644 index 0000000000..4446b43093 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0053a77d9843fe602ebac5461839499ede3b9d71 differ diff --git a/fuzz/gnutls_client_fuzzer.in/015256ec186d825ddd0d2bf160b6689abce95d1e b/fuzz/gnutls_client_fuzzer.in/015256ec186d825ddd0d2bf160b6689abce95d1e new file mode 100644 index 0000000000..a78317e0a4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/015256ec186d825ddd0d2bf160b6689abce95d1e differ diff --git a/fuzz/gnutls_client_fuzzer.in/022dc6673cd952e8b6549b310c6149cf75faaa25 b/fuzz/gnutls_client_fuzzer.in/022dc6673cd952e8b6549b310c6149cf75faaa25 new file mode 100644 index 0000000000..dd4d8a69cb Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/022dc6673cd952e8b6549b310c6149cf75faaa25 differ diff --git a/fuzz/gnutls_client_fuzzer.in/02545e9d8fc6abcbfc1be9ae4fdca4f00b5f189a b/fuzz/gnutls_client_fuzzer.in/02545e9d8fc6abcbfc1be9ae4fdca4f00b5f189a new file mode 100644 index 0000000000..802a292eea Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/02545e9d8fc6abcbfc1be9ae4fdca4f00b5f189a differ diff --git a/fuzz/gnutls_client_fuzzer.in/0346790568d241e95ac4245f7136d28ca4365937 b/fuzz/gnutls_client_fuzzer.in/0346790568d241e95ac4245f7136d28ca4365937 new file mode 100644 index 0000000000..ad405bb299 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0346790568d241e95ac4245f7136d28ca4365937 differ diff --git a/fuzz/gnutls_client_fuzzer.in/036c4f60f9cd017b135c0c4875991af98ac03c90 b/fuzz/gnutls_client_fuzzer.in/036c4f60f9cd017b135c0c4875991af98ac03c90 new file mode 100644 index 0000000000..0416b091f4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/036c4f60f9cd017b135c0c4875991af98ac03c90 differ diff --git a/fuzz/gnutls_client_fuzzer.in/03ba650c2c0421b24f59ababb9b41f06cb73a756 b/fuzz/gnutls_client_fuzzer.in/03ba650c2c0421b24f59ababb9b41f06cb73a756 new file mode 100644 index 0000000000..8bd391903b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/03ba650c2c0421b24f59ababb9b41f06cb73a756 differ diff --git a/fuzz/gnutls_client_fuzzer.in/03f035685963c8a83d9345dad676ea0b6d59e2e4 b/fuzz/gnutls_client_fuzzer.in/03f035685963c8a83d9345dad676ea0b6d59e2e4 new file mode 100644 index 0000000000..fb9689c9f6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/03f035685963c8a83d9345dad676ea0b6d59e2e4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/04929a209140cdbbf33123e17fea80f4ffb8b149 b/fuzz/gnutls_client_fuzzer.in/04929a209140cdbbf33123e17fea80f4ffb8b149 new file mode 100644 index 0000000000..492a51688a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/04929a209140cdbbf33123e17fea80f4ffb8b149 differ diff --git a/fuzz/gnutls_client_fuzzer.in/049e4b0ee719aac950b194acbcbcb6b126613fbb b/fuzz/gnutls_client_fuzzer.in/049e4b0ee719aac950b194acbcbcb6b126613fbb new file mode 100644 index 0000000000..0fbbfd6859 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/049e4b0ee719aac950b194acbcbcb6b126613fbb differ diff --git a/fuzz/gnutls_client_fuzzer.in/063753fef098f84adf36c8df54fbc1eb2b7bd4f5 b/fuzz/gnutls_client_fuzzer.in/063753fef098f84adf36c8df54fbc1eb2b7bd4f5 new file mode 100644 index 0000000000..10911ec127 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/063753fef098f84adf36c8df54fbc1eb2b7bd4f5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/071e73232b16b805b50a23b09a82ca8394b1dabd b/fuzz/gnutls_client_fuzzer.in/071e73232b16b805b50a23b09a82ca8394b1dabd new file mode 100644 index 0000000000..6f4a875138 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/071e73232b16b805b50a23b09a82ca8394b1dabd differ diff --git a/fuzz/gnutls_client_fuzzer.in/075c12272d2e7c3b9dacac07ea89f69c76d8968f b/fuzz/gnutls_client_fuzzer.in/075c12272d2e7c3b9dacac07ea89f69c76d8968f new file mode 100644 index 0000000000..24be586dfa Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/075c12272d2e7c3b9dacac07ea89f69c76d8968f differ diff --git a/fuzz/gnutls_client_fuzzer.in/07b919fba4f519475d6a325bb0835a0b3fa7490f b/fuzz/gnutls_client_fuzzer.in/07b919fba4f519475d6a325bb0835a0b3fa7490f new file mode 100644 index 0000000000..cf4ee9d26f --- /dev/null +++ b/fuzz/gnutls_client_fuzzer.in/07b919fba4f519475d6a325bb0835a0b3fa7490f @@ -0,0 +1 @@ +0d \ No newline at end of file diff --git a/fuzz/gnutls_client_fuzzer.in/085eb97d40b2f47521c6bee7af2a3dda5681ab07 b/fuzz/gnutls_client_fuzzer.in/085eb97d40b2f47521c6bee7af2a3dda5681ab07 new file mode 100644 index 0000000000..336446d84a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/085eb97d40b2f47521c6bee7af2a3dda5681ab07 differ diff --git a/fuzz/gnutls_client_fuzzer.in/08716f790be819321ba8515d43d595aeb4279f62 b/fuzz/gnutls_client_fuzzer.in/08716f790be819321ba8515d43d595aeb4279f62 new file mode 100644 index 0000000000..1650f2bef4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/08716f790be819321ba8515d43d595aeb4279f62 differ diff --git a/fuzz/gnutls_client_fuzzer.in/08b225d3473cbae8d0c6493bac77b9dabdca2973 b/fuzz/gnutls_client_fuzzer.in/08b225d3473cbae8d0c6493bac77b9dabdca2973 new file mode 100644 index 0000000000..41253e9a0c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/08b225d3473cbae8d0c6493bac77b9dabdca2973 differ diff --git a/fuzz/gnutls_client_fuzzer.in/08f223bf2a0ab5c7561e2beaf78b4f8303ed57f5 b/fuzz/gnutls_client_fuzzer.in/08f223bf2a0ab5c7561e2beaf78b4f8303ed57f5 new file mode 100644 index 0000000000..d425a8b747 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/08f223bf2a0ab5c7561e2beaf78b4f8303ed57f5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/09672e6134047f58e2d05add7c663a8fd2eb8fcb b/fuzz/gnutls_client_fuzzer.in/09672e6134047f58e2d05add7c663a8fd2eb8fcb new file mode 100644 index 0000000000..3cd2506571 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/09672e6134047f58e2d05add7c663a8fd2eb8fcb differ diff --git a/fuzz/gnutls_client_fuzzer.in/0a2ed2475f75ad29d7644b5e89065841bfff0f3f b/fuzz/gnutls_client_fuzzer.in/0a2ed2475f75ad29d7644b5e89065841bfff0f3f new file mode 100644 index 0000000000..c75c617209 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0a2ed2475f75ad29d7644b5e89065841bfff0f3f differ diff --git a/fuzz/gnutls_client_fuzzer.in/0a404a4f31bd20d000178541e95c679d0f4d75ec b/fuzz/gnutls_client_fuzzer.in/0a404a4f31bd20d000178541e95c679d0f4d75ec new file mode 100644 index 0000000000..f60346b40f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0a404a4f31bd20d000178541e95c679d0f4d75ec differ diff --git a/fuzz/gnutls_client_fuzzer.in/0a786adadfa7d748b519f7b77a9a76b74edf9fd4 b/fuzz/gnutls_client_fuzzer.in/0a786adadfa7d748b519f7b77a9a76b74edf9fd4 new file mode 100644 index 0000000000..5d0878e64b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0a786adadfa7d748b519f7b77a9a76b74edf9fd4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/0b397347ea69e46bda492d21d1e37318f23d3a4e b/fuzz/gnutls_client_fuzzer.in/0b397347ea69e46bda492d21d1e37318f23d3a4e new file mode 100644 index 0000000000..c5d485962a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0b397347ea69e46bda492d21d1e37318f23d3a4e differ diff --git a/fuzz/gnutls_client_fuzzer.in/0b434d0af91fc80230c1f9d8f93ca595995ea3a3 b/fuzz/gnutls_client_fuzzer.in/0b434d0af91fc80230c1f9d8f93ca595995ea3a3 new file mode 100644 index 0000000000..b5dc95f16b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0b434d0af91fc80230c1f9d8f93ca595995ea3a3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/0b6adcffdbdc259dfd95b484d0cadbe329a404bd b/fuzz/gnutls_client_fuzzer.in/0b6adcffdbdc259dfd95b484d0cadbe329a404bd new file mode 100644 index 0000000000..74f459995d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0b6adcffdbdc259dfd95b484d0cadbe329a404bd differ diff --git a/fuzz/gnutls_client_fuzzer.in/0b8cbc136eb6882e48ce9f3688ed843f15eaf262 b/fuzz/gnutls_client_fuzzer.in/0b8cbc136eb6882e48ce9f3688ed843f15eaf262 new file mode 100644 index 0000000000..f8945f1a64 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0b8cbc136eb6882e48ce9f3688ed843f15eaf262 differ diff --git a/fuzz/gnutls_client_fuzzer.in/0cc5d698ce7c1d73ab56832275bf1c6ed205e9d9 b/fuzz/gnutls_client_fuzzer.in/0cc5d698ce7c1d73ab56832275bf1c6ed205e9d9 new file mode 100644 index 0000000000..938397ec9c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0cc5d698ce7c1d73ab56832275bf1c6ed205e9d9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/0d082a8551836eb158684927c44193f9e35ab532 b/fuzz/gnutls_client_fuzzer.in/0d082a8551836eb158684927c44193f9e35ab532 new file mode 100644 index 0000000000..1170fd5c3d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0d082a8551836eb158684927c44193f9e35ab532 differ diff --git a/fuzz/gnutls_client_fuzzer.in/0d15f422a66f6544d8b5a3a67bce97f7a9093a80 b/fuzz/gnutls_client_fuzzer.in/0d15f422a66f6544d8b5a3a67bce97f7a9093a80 new file mode 100644 index 0000000000..835262c3b2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0d15f422a66f6544d8b5a3a67bce97f7a9093a80 differ diff --git a/fuzz/gnutls_client_fuzzer.in/0d75747299811443069d4ee133b325b16f245139 b/fuzz/gnutls_client_fuzzer.in/0d75747299811443069d4ee133b325b16f245139 new file mode 100644 index 0000000000..fa347aae5c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0d75747299811443069d4ee133b325b16f245139 differ diff --git a/fuzz/gnutls_client_fuzzer.in/0d9f28575d78eeb1da9c00dae452e41ca1ee3bb6 b/fuzz/gnutls_client_fuzzer.in/0d9f28575d78eeb1da9c00dae452e41ca1ee3bb6 new file mode 100644 index 0000000000..782b024bb4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0d9f28575d78eeb1da9c00dae452e41ca1ee3bb6 differ diff --git a/fuzz/gnutls_client_fuzzer.in/0e1815972aa10e92b4967335625261ccd58082e8 b/fuzz/gnutls_client_fuzzer.in/0e1815972aa10e92b4967335625261ccd58082e8 new file mode 100644 index 0000000000..dac155d024 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0e1815972aa10e92b4967335625261ccd58082e8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/0f1f96c313717731b2833104b837e6457550083f b/fuzz/gnutls_client_fuzzer.in/0f1f96c313717731b2833104b837e6457550083f new file mode 100644 index 0000000000..de8fb31583 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/0f1f96c313717731b2833104b837e6457550083f differ diff --git a/fuzz/gnutls_client_fuzzer.in/107a0c2096ac07dee4450277377b7324dd5bc864 b/fuzz/gnutls_client_fuzzer.in/107a0c2096ac07dee4450277377b7324dd5bc864 new file mode 100644 index 0000000000..b28d0f17c9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/107a0c2096ac07dee4450277377b7324dd5bc864 differ diff --git a/fuzz/gnutls_client_fuzzer.in/10874d695c193397f66bf69bd0370683543f64d2 b/fuzz/gnutls_client_fuzzer.in/10874d695c193397f66bf69bd0370683543f64d2 new file mode 100644 index 0000000000..a842b1350e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/10874d695c193397f66bf69bd0370683543f64d2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/108ac0b104c4f017c6927b3fde577c0e1538b13a b/fuzz/gnutls_client_fuzzer.in/108ac0b104c4f017c6927b3fde577c0e1538b13a new file mode 100644 index 0000000000..29bb357a69 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/108ac0b104c4f017c6927b3fde577c0e1538b13a differ diff --git a/fuzz/gnutls_client_fuzzer.in/10ae19aad866d132535c3c6cd463fa80ae982610 b/fuzz/gnutls_client_fuzzer.in/10ae19aad866d132535c3c6cd463fa80ae982610 new file mode 100644 index 0000000000..674f139dec Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/10ae19aad866d132535c3c6cd463fa80ae982610 differ diff --git a/fuzz/gnutls_client_fuzzer.in/10cbd4a78384d5dbc8c5a93481ddb7e8a84fd42d b/fuzz/gnutls_client_fuzzer.in/10cbd4a78384d5dbc8c5a93481ddb7e8a84fd42d new file mode 100644 index 0000000000..829538044e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/10cbd4a78384d5dbc8c5a93481ddb7e8a84fd42d differ diff --git a/fuzz/gnutls_client_fuzzer.in/120778ce65c0ce0b9b2b16df2f53afb2d2a7e436 b/fuzz/gnutls_client_fuzzer.in/120778ce65c0ce0b9b2b16df2f53afb2d2a7e436 new file mode 100644 index 0000000000..4f3c665c68 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/120778ce65c0ce0b9b2b16df2f53afb2d2a7e436 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1214f073742ce436b6bc8ad3ef2d0742860ce02c b/fuzz/gnutls_client_fuzzer.in/1214f073742ce436b6bc8ad3ef2d0742860ce02c new file mode 100644 index 0000000000..91a5822c21 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1214f073742ce436b6bc8ad3ef2d0742860ce02c differ diff --git a/fuzz/gnutls_client_fuzzer.in/12557fda3e0ce47ba95b3f1a62b250c07e9ea423 b/fuzz/gnutls_client_fuzzer.in/12557fda3e0ce47ba95b3f1a62b250c07e9ea423 new file mode 100644 index 0000000000..cf78042028 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/12557fda3e0ce47ba95b3f1a62b250c07e9ea423 differ diff --git a/fuzz/gnutls_client_fuzzer.in/12842f2e7746f97f86879941dbd4efdd6da9a874 b/fuzz/gnutls_client_fuzzer.in/12842f2e7746f97f86879941dbd4efdd6da9a874 new file mode 100644 index 0000000000..f1be37dfd5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/12842f2e7746f97f86879941dbd4efdd6da9a874 differ diff --git a/fuzz/gnutls_client_fuzzer.in/12df4c6e9677aaed45c35b17c32c5e82cf9eec6b b/fuzz/gnutls_client_fuzzer.in/12df4c6e9677aaed45c35b17c32c5e82cf9eec6b new file mode 100644 index 0000000000..60dbd2abca Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/12df4c6e9677aaed45c35b17c32c5e82cf9eec6b differ diff --git a/fuzz/gnutls_client_fuzzer.in/131b9137b4566bbf832cd3f8151fe26224da1225 b/fuzz/gnutls_client_fuzzer.in/131b9137b4566bbf832cd3f8151fe26224da1225 new file mode 100644 index 0000000000..436b040d26 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/131b9137b4566bbf832cd3f8151fe26224da1225 differ diff --git a/fuzz/gnutls_client_fuzzer.in/134165a3b32256cbe5d141869293d84f2ea22723 b/fuzz/gnutls_client_fuzzer.in/134165a3b32256cbe5d141869293d84f2ea22723 new file mode 100644 index 0000000000..6724e1ab91 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/134165a3b32256cbe5d141869293d84f2ea22723 differ diff --git a/fuzz/gnutls_client_fuzzer.in/13c1d5a9f4c354e6ade34d4183bbacc571fa00f4 b/fuzz/gnutls_client_fuzzer.in/13c1d5a9f4c354e6ade34d4183bbacc571fa00f4 new file mode 100644 index 0000000000..522c6e3d7f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/13c1d5a9f4c354e6ade34d4183bbacc571fa00f4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/13e72bf3d42e3511d0f1e2e1c5208751e24ab2a9 b/fuzz/gnutls_client_fuzzer.in/13e72bf3d42e3511d0f1e2e1c5208751e24ab2a9 new file mode 100644 index 0000000000..e6d676219b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/13e72bf3d42e3511d0f1e2e1c5208751e24ab2a9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/13faae2115b35f75673968462a217a96ecbf4f94 b/fuzz/gnutls_client_fuzzer.in/13faae2115b35f75673968462a217a96ecbf4f94 new file mode 100644 index 0000000000..251f2a781e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/13faae2115b35f75673968462a217a96ecbf4f94 differ diff --git a/fuzz/gnutls_client_fuzzer.in/13ffccae1f6022db7b7dfa8acba5c179f7bf3358 b/fuzz/gnutls_client_fuzzer.in/13ffccae1f6022db7b7dfa8acba5c179f7bf3358 new file mode 100644 index 0000000000..6290ca8c3f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/13ffccae1f6022db7b7dfa8acba5c179f7bf3358 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1448f74d6e77c5718918d759beefbc5664c4f94c b/fuzz/gnutls_client_fuzzer.in/1448f74d6e77c5718918d759beefbc5664c4f94c new file mode 100644 index 0000000000..c0e22134c7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1448f74d6e77c5718918d759beefbc5664c4f94c differ diff --git a/fuzz/gnutls_client_fuzzer.in/144adbb4eae63259425ddebc3f8fe615a574906a b/fuzz/gnutls_client_fuzzer.in/144adbb4eae63259425ddebc3f8fe615a574906a new file mode 100644 index 0000000000..236475c24b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/144adbb4eae63259425ddebc3f8fe615a574906a differ diff --git a/fuzz/gnutls_client_fuzzer.in/14640518f7a85f0add0fb813d61a677e27f2f11e b/fuzz/gnutls_client_fuzzer.in/14640518f7a85f0add0fb813d61a677e27f2f11e new file mode 100644 index 0000000000..bf29d67700 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/14640518f7a85f0add0fb813d61a677e27f2f11e differ diff --git a/fuzz/gnutls_client_fuzzer.in/14a625e5df60a702aa5635a382b86ad5c21d5978 b/fuzz/gnutls_client_fuzzer.in/14a625e5df60a702aa5635a382b86ad5c21d5978 new file mode 100644 index 0000000000..571f669ab3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/14a625e5df60a702aa5635a382b86ad5c21d5978 differ diff --git a/fuzz/gnutls_client_fuzzer.in/14d42fb2e70fa43af00e7a2cbdb6d146e3f48c8e b/fuzz/gnutls_client_fuzzer.in/14d42fb2e70fa43af00e7a2cbdb6d146e3f48c8e new file mode 100644 index 0000000000..52e9bcf3a1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/14d42fb2e70fa43af00e7a2cbdb6d146e3f48c8e differ diff --git a/fuzz/gnutls_client_fuzzer.in/14fc868742efaf55e54eac8e61d6469af28da3a3 b/fuzz/gnutls_client_fuzzer.in/14fc868742efaf55e54eac8e61d6469af28da3a3 new file mode 100644 index 0000000000..45f90fa5e8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/14fc868742efaf55e54eac8e61d6469af28da3a3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/154fffe0506cbca4b8e7f90cdaf7756ac5bbfd71 b/fuzz/gnutls_client_fuzzer.in/154fffe0506cbca4b8e7f90cdaf7756ac5bbfd71 new file mode 100644 index 0000000000..a45d3359c4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/154fffe0506cbca4b8e7f90cdaf7756ac5bbfd71 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1578b1bb8d187af6e2997bffad3e7526c11892ec b/fuzz/gnutls_client_fuzzer.in/1578b1bb8d187af6e2997bffad3e7526c11892ec new file mode 100644 index 0000000000..2a440e4135 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1578b1bb8d187af6e2997bffad3e7526c11892ec differ diff --git a/fuzz/gnutls_client_fuzzer.in/15bf7bbc968aca5a76fcee14f61e5f8f3a034ddc b/fuzz/gnutls_client_fuzzer.in/15bf7bbc968aca5a76fcee14f61e5f8f3a034ddc new file mode 100644 index 0000000000..6d84d839a6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/15bf7bbc968aca5a76fcee14f61e5f8f3a034ddc differ diff --git a/fuzz/gnutls_client_fuzzer.in/1688b37efb8ed6f72fd3b78c6ebf800e72144457 b/fuzz/gnutls_client_fuzzer.in/1688b37efb8ed6f72fd3b78c6ebf800e72144457 new file mode 100644 index 0000000000..31bbee0f09 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1688b37efb8ed6f72fd3b78c6ebf800e72144457 differ diff --git a/fuzz/gnutls_client_fuzzer.in/171dba30cd2d12d89a5787c7cd32b453216fb6f9 b/fuzz/gnutls_client_fuzzer.in/171dba30cd2d12d89a5787c7cd32b453216fb6f9 new file mode 100644 index 0000000000..817a595f46 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/171dba30cd2d12d89a5787c7cd32b453216fb6f9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/17910532a6fee1c36b668dc66e8372a933a84294 b/fuzz/gnutls_client_fuzzer.in/17910532a6fee1c36b668dc66e8372a933a84294 new file mode 100644 index 0000000000..bce86de2d6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/17910532a6fee1c36b668dc66e8372a933a84294 differ diff --git a/fuzz/gnutls_client_fuzzer.in/17ea220756b7d90f4307f1385dc88d303b3f84b2 b/fuzz/gnutls_client_fuzzer.in/17ea220756b7d90f4307f1385dc88d303b3f84b2 new file mode 100644 index 0000000000..1866e063bd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/17ea220756b7d90f4307f1385dc88d303b3f84b2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/17f2c79b4dfa1a093ccbfcc24103fd9e3d1f6f23 b/fuzz/gnutls_client_fuzzer.in/17f2c79b4dfa1a093ccbfcc24103fd9e3d1f6f23 new file mode 100644 index 0000000000..89e818a0f5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/17f2c79b4dfa1a093ccbfcc24103fd9e3d1f6f23 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1801c59754753a82bca1f05b25e32e837fda6a2d b/fuzz/gnutls_client_fuzzer.in/1801c59754753a82bca1f05b25e32e837fda6a2d new file mode 100644 index 0000000000..291df27886 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1801c59754753a82bca1f05b25e32e837fda6a2d differ diff --git a/fuzz/gnutls_client_fuzzer.in/18057e0f9a7bf160d1950eeca5c8ca4654e36cf1 b/fuzz/gnutls_client_fuzzer.in/18057e0f9a7bf160d1950eeca5c8ca4654e36cf1 new file mode 100644 index 0000000000..8f460af5b0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/18057e0f9a7bf160d1950eeca5c8ca4654e36cf1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/186c64cadd74cc7803a2df06ae23eadcca509673 b/fuzz/gnutls_client_fuzzer.in/186c64cadd74cc7803a2df06ae23eadcca509673 new file mode 100644 index 0000000000..a4bf6f63d7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/186c64cadd74cc7803a2df06ae23eadcca509673 differ diff --git a/fuzz/gnutls_client_fuzzer.in/18acd3e45ae970eb8c17fdd3f57cc6509e67fd61 b/fuzz/gnutls_client_fuzzer.in/18acd3e45ae970eb8c17fdd3f57cc6509e67fd61 new file mode 100644 index 0000000000..cb0286956e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/18acd3e45ae970eb8c17fdd3f57cc6509e67fd61 differ diff --git a/fuzz/gnutls_client_fuzzer.in/18d558a08dc869a93c3450edfbed5080d9389cb5 b/fuzz/gnutls_client_fuzzer.in/18d558a08dc869a93c3450edfbed5080d9389cb5 new file mode 100644 index 0000000000..19fd9508b8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/18d558a08dc869a93c3450edfbed5080d9389cb5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1907c8173e076a71d46bb3747c46b159e6f5eb4f b/fuzz/gnutls_client_fuzzer.in/1907c8173e076a71d46bb3747c46b159e6f5eb4f new file mode 100644 index 0000000000..c8a4ff5e40 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1907c8173e076a71d46bb3747c46b159e6f5eb4f differ diff --git a/fuzz/gnutls_client_fuzzer.in/1979e411d76c7f9174b445c268a5da431a9290c2 b/fuzz/gnutls_client_fuzzer.in/1979e411d76c7f9174b445c268a5da431a9290c2 new file mode 100644 index 0000000000..c4a4235ade Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1979e411d76c7f9174b445c268a5da431a9290c2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/197bfc54bca18550d64e5165253813a99e8838cb b/fuzz/gnutls_client_fuzzer.in/197bfc54bca18550d64e5165253813a99e8838cb new file mode 100644 index 0000000000..7e98b32b59 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/197bfc54bca18550d64e5165253813a99e8838cb differ diff --git a/fuzz/gnutls_client_fuzzer.in/199ce4e9cf3f1aeb5a8e1d05ff693cff8056ff6d b/fuzz/gnutls_client_fuzzer.in/199ce4e9cf3f1aeb5a8e1d05ff693cff8056ff6d new file mode 100644 index 0000000000..beecd0c581 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/199ce4e9cf3f1aeb5a8e1d05ff693cff8056ff6d differ diff --git a/fuzz/gnutls_client_fuzzer.in/19d19905b73c4bffec6de8db92e8c10e5dbf9252 b/fuzz/gnutls_client_fuzzer.in/19d19905b73c4bffec6de8db92e8c10e5dbf9252 new file mode 100644 index 0000000000..3115f93258 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/19d19905b73c4bffec6de8db92e8c10e5dbf9252 differ diff --git a/fuzz/gnutls_client_fuzzer.in/19efaa36973a3811bd0a6128295510955313eebd b/fuzz/gnutls_client_fuzzer.in/19efaa36973a3811bd0a6128295510955313eebd new file mode 100644 index 0000000000..a9914862d8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/19efaa36973a3811bd0a6128295510955313eebd differ diff --git a/fuzz/gnutls_client_fuzzer.in/1a2aff65bee0d53fb6a58175790eba98ce85da22 b/fuzz/gnutls_client_fuzzer.in/1a2aff65bee0d53fb6a58175790eba98ce85da22 new file mode 100644 index 0000000000..feda7caab4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1a2aff65bee0d53fb6a58175790eba98ce85da22 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1a6856542dc604064f2d7fa392e0983c03847626 b/fuzz/gnutls_client_fuzzer.in/1a6856542dc604064f2d7fa392e0983c03847626 new file mode 100644 index 0000000000..5972f72f25 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1a6856542dc604064f2d7fa392e0983c03847626 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1aa4c8680f4bcf9d8c1475d0919a6be2bc6dea0a b/fuzz/gnutls_client_fuzzer.in/1aa4c8680f4bcf9d8c1475d0919a6be2bc6dea0a new file mode 100644 index 0000000000..f8ff03bd91 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1aa4c8680f4bcf9d8c1475d0919a6be2bc6dea0a differ diff --git a/fuzz/gnutls_client_fuzzer.in/1b051c35ed28a07295f56244e0a0bf93f418651b b/fuzz/gnutls_client_fuzzer.in/1b051c35ed28a07295f56244e0a0bf93f418651b new file mode 100644 index 0000000000..4d7e8d5c1e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1b051c35ed28a07295f56244e0a0bf93f418651b differ diff --git a/fuzz/gnutls_client_fuzzer.in/1b81f7ab7a1469bba032816615e2aac214da70d6 b/fuzz/gnutls_client_fuzzer.in/1b81f7ab7a1469bba032816615e2aac214da70d6 new file mode 100644 index 0000000000..51b8ddcba6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1b81f7ab7a1469bba032816615e2aac214da70d6 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1b85a9759fdcec5850a33c7893d431c1d54a348f b/fuzz/gnutls_client_fuzzer.in/1b85a9759fdcec5850a33c7893d431c1d54a348f new file mode 100644 index 0000000000..fe1e449bad Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1b85a9759fdcec5850a33c7893d431c1d54a348f differ diff --git a/fuzz/gnutls_client_fuzzer.in/1b940ccde9e898dde8dee41d21e581fe5bcb3c64 b/fuzz/gnutls_client_fuzzer.in/1b940ccde9e898dde8dee41d21e581fe5bcb3c64 new file mode 100644 index 0000000000..eec7562f85 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1b940ccde9e898dde8dee41d21e581fe5bcb3c64 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1b96d2b1420fc14409e6b0884d13116930ab240f b/fuzz/gnutls_client_fuzzer.in/1b96d2b1420fc14409e6b0884d13116930ab240f new file mode 100644 index 0000000000..8624181e84 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1b96d2b1420fc14409e6b0884d13116930ab240f differ diff --git a/fuzz/gnutls_client_fuzzer.in/1b9b2a7dc7ffebb979b25863468aef82ec752392 b/fuzz/gnutls_client_fuzzer.in/1b9b2a7dc7ffebb979b25863468aef82ec752392 new file mode 100644 index 0000000000..0e0bcbba0c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1b9b2a7dc7ffebb979b25863468aef82ec752392 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1bdbf2162911b391e02f230a6e54ef1dbbb13ea4 b/fuzz/gnutls_client_fuzzer.in/1bdbf2162911b391e02f230a6e54ef1dbbb13ea4 new file mode 100644 index 0000000000..c7463c9e06 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1bdbf2162911b391e02f230a6e54ef1dbbb13ea4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1c550b1fc4893d911efe24752955ff630b583e3e b/fuzz/gnutls_client_fuzzer.in/1c550b1fc4893d911efe24752955ff630b583e3e new file mode 100644 index 0000000000..e85f80d526 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1c550b1fc4893d911efe24752955ff630b583e3e differ diff --git a/fuzz/gnutls_client_fuzzer.in/1c63042137d47ffec88253078e99cbc0926bc7c3 b/fuzz/gnutls_client_fuzzer.in/1c63042137d47ffec88253078e99cbc0926bc7c3 new file mode 100644 index 0000000000..c6fca3f4f5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1c63042137d47ffec88253078e99cbc0926bc7c3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1cca3e19bea174a67e958ca9e0b54ccdffffcb01 b/fuzz/gnutls_client_fuzzer.in/1cca3e19bea174a67e958ca9e0b54ccdffffcb01 new file mode 100644 index 0000000000..0c269137fa Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1cca3e19bea174a67e958ca9e0b54ccdffffcb01 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1cec3cae1f2bfdc1453ee0afd763cab4cf8288bd b/fuzz/gnutls_client_fuzzer.in/1cec3cae1f2bfdc1453ee0afd763cab4cf8288bd new file mode 100644 index 0000000000..31d42b938a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1cec3cae1f2bfdc1453ee0afd763cab4cf8288bd differ diff --git a/fuzz/gnutls_client_fuzzer.in/1d3490969461e53b6226530e3fded18ca8a5c1f5 b/fuzz/gnutls_client_fuzzer.in/1d3490969461e53b6226530e3fded18ca8a5c1f5 new file mode 100644 index 0000000000..90d0499dfd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1d3490969461e53b6226530e3fded18ca8a5c1f5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1dd596d4174fdf1b3df58d9f86930a286e63142f b/fuzz/gnutls_client_fuzzer.in/1dd596d4174fdf1b3df58d9f86930a286e63142f new file mode 100644 index 0000000000..6e63c8446a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1dd596d4174fdf1b3df58d9f86930a286e63142f differ diff --git a/fuzz/gnutls_client_fuzzer.in/1df3895d34d9c81c52f5928994dc0cd0054e55dd b/fuzz/gnutls_client_fuzzer.in/1df3895d34d9c81c52f5928994dc0cd0054e55dd new file mode 100644 index 0000000000..5f5434e830 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1df3895d34d9c81c52f5928994dc0cd0054e55dd differ diff --git a/fuzz/gnutls_client_fuzzer.in/1e0c05a962be36889d286f087c3994eff7b18c49 b/fuzz/gnutls_client_fuzzer.in/1e0c05a962be36889d286f087c3994eff7b18c49 new file mode 100644 index 0000000000..35fe36eb9b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1e0c05a962be36889d286f087c3994eff7b18c49 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1e4a36974fc8a5f293c0ee37aa51a0bdccb8cc83 b/fuzz/gnutls_client_fuzzer.in/1e4a36974fc8a5f293c0ee37aa51a0bdccb8cc83 new file mode 100644 index 0000000000..297e0391b8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1e4a36974fc8a5f293c0ee37aa51a0bdccb8cc83 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1ef637a6a866dd32e98a54e988f4eb609c148ca5 b/fuzz/gnutls_client_fuzzer.in/1ef637a6a866dd32e98a54e988f4eb609c148ca5 new file mode 100644 index 0000000000..11bc84d53f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1ef637a6a866dd32e98a54e988f4eb609c148ca5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/1f54287e6210d25f9521eac102742a7e7286394b b/fuzz/gnutls_client_fuzzer.in/1f54287e6210d25f9521eac102742a7e7286394b new file mode 100644 index 0000000000..f319f8cd83 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/1f54287e6210d25f9521eac102742a7e7286394b differ diff --git a/fuzz/gnutls_client_fuzzer.in/2070454f2b8d3ce6bb585c05c638774c86968553 b/fuzz/gnutls_client_fuzzer.in/2070454f2b8d3ce6bb585c05c638774c86968553 new file mode 100644 index 0000000000..fe8684f3f1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2070454f2b8d3ce6bb585c05c638774c86968553 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2076dc40ef6cd418f812715c472f68a6f6fac02d b/fuzz/gnutls_client_fuzzer.in/2076dc40ef6cd418f812715c472f68a6f6fac02d new file mode 100644 index 0000000000..9f10f04b4b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2076dc40ef6cd418f812715c472f68a6f6fac02d differ diff --git a/fuzz/gnutls_client_fuzzer.in/20c8b51e13c8ed9985272297fcdf22175387c68c b/fuzz/gnutls_client_fuzzer.in/20c8b51e13c8ed9985272297fcdf22175387c68c new file mode 100644 index 0000000000..09b4a807ad Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/20c8b51e13c8ed9985272297fcdf22175387c68c differ diff --git a/fuzz/gnutls_client_fuzzer.in/210b51b8e7d87962efee287ff325ef87a384aa57 b/fuzz/gnutls_client_fuzzer.in/210b51b8e7d87962efee287ff325ef87a384aa57 new file mode 100644 index 0000000000..9a309a456f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/210b51b8e7d87962efee287ff325ef87a384aa57 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2164aafbd090cc117fa7b5d2fb14ae3975967dda b/fuzz/gnutls_client_fuzzer.in/2164aafbd090cc117fa7b5d2fb14ae3975967dda new file mode 100644 index 0000000000..1939f40a9a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2164aafbd090cc117fa7b5d2fb14ae3975967dda differ diff --git a/fuzz/gnutls_client_fuzzer.in/21d006ca4488d8174528af0aa7e68413ffa70b23 b/fuzz/gnutls_client_fuzzer.in/21d006ca4488d8174528af0aa7e68413ffa70b23 new file mode 100644 index 0000000000..e977073e3d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/21d006ca4488d8174528af0aa7e68413ffa70b23 differ diff --git a/fuzz/gnutls_client_fuzzer.in/220d043d210c0498c694a890ba8dbec8032ed709 b/fuzz/gnutls_client_fuzzer.in/220d043d210c0498c694a890ba8dbec8032ed709 new file mode 100644 index 0000000000..940558bcb9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/220d043d210c0498c694a890ba8dbec8032ed709 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2216410736fb40f29bdb9bba16797985fb2e9f69 b/fuzz/gnutls_client_fuzzer.in/2216410736fb40f29bdb9bba16797985fb2e9f69 new file mode 100644 index 0000000000..e968727a98 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2216410736fb40f29bdb9bba16797985fb2e9f69 differ diff --git a/fuzz/gnutls_client_fuzzer.in/22321a981a383b288259bc2bd2f7c94308daa8e8 b/fuzz/gnutls_client_fuzzer.in/22321a981a383b288259bc2bd2f7c94308daa8e8 new file mode 100644 index 0000000000..5dda672f87 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/22321a981a383b288259bc2bd2f7c94308daa8e8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2247909817a16af1dfb1fdfa0798b3a26eec4882 b/fuzz/gnutls_client_fuzzer.in/2247909817a16af1dfb1fdfa0798b3a26eec4882 new file mode 100644 index 0000000000..21789ccbb2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2247909817a16af1dfb1fdfa0798b3a26eec4882 differ diff --git a/fuzz/gnutls_client_fuzzer.in/22b68a32180f397c4f1b0ab54c91ae5c1a182dd1 b/fuzz/gnutls_client_fuzzer.in/22b68a32180f397c4f1b0ab54c91ae5c1a182dd1 new file mode 100644 index 0000000000..f0652d1a0c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/22b68a32180f397c4f1b0ab54c91ae5c1a182dd1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/23579f6305ac80ac493698e1ab325a9edd0d0cad b/fuzz/gnutls_client_fuzzer.in/23579f6305ac80ac493698e1ab325a9edd0d0cad new file mode 100644 index 0000000000..e40841114f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/23579f6305ac80ac493698e1ab325a9edd0d0cad differ diff --git a/fuzz/gnutls_client_fuzzer.in/23658c990f9cc127d7283039e8bce3246cb20f87 b/fuzz/gnutls_client_fuzzer.in/23658c990f9cc127d7283039e8bce3246cb20f87 new file mode 100644 index 0000000000..a3890a2495 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/23658c990f9cc127d7283039e8bce3246cb20f87 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2394814bd53f2b6735298fe012f6efbe47d2dcfb b/fuzz/gnutls_client_fuzzer.in/2394814bd53f2b6735298fe012f6efbe47d2dcfb new file mode 100644 index 0000000000..3818d30c3f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2394814bd53f2b6735298fe012f6efbe47d2dcfb differ diff --git a/fuzz/gnutls_client_fuzzer.in/239e451c5c4392dafaa30f9b02c718f6319a7de1 b/fuzz/gnutls_client_fuzzer.in/239e451c5c4392dafaa30f9b02c718f6319a7de1 new file mode 100644 index 0000000000..ce4c4f26fe Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/239e451c5c4392dafaa30f9b02c718f6319a7de1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/23ab7b1f7237c3ea2e409294394a42bf59b02f3d b/fuzz/gnutls_client_fuzzer.in/23ab7b1f7237c3ea2e409294394a42bf59b02f3d new file mode 100644 index 0000000000..250d811f0d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/23ab7b1f7237c3ea2e409294394a42bf59b02f3d differ diff --git a/fuzz/gnutls_client_fuzzer.in/2480c105a7a4564e8167df23ddfc7cf177e97e86 b/fuzz/gnutls_client_fuzzer.in/2480c105a7a4564e8167df23ddfc7cf177e97e86 new file mode 100644 index 0000000000..249981c96e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2480c105a7a4564e8167df23ddfc7cf177e97e86 differ diff --git a/fuzz/gnutls_client_fuzzer.in/24daadcb4c57102c6045a6aec88d96ff3e17313c b/fuzz/gnutls_client_fuzzer.in/24daadcb4c57102c6045a6aec88d96ff3e17313c new file mode 100644 index 0000000000..c3bf2ef23a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/24daadcb4c57102c6045a6aec88d96ff3e17313c differ diff --git a/fuzz/gnutls_client_fuzzer.in/256afd7d5fb4baedcaabcf09a0f8bec5a120f2a4 b/fuzz/gnutls_client_fuzzer.in/256afd7d5fb4baedcaabcf09a0f8bec5a120f2a4 new file mode 100644 index 0000000000..608048de7d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/256afd7d5fb4baedcaabcf09a0f8bec5a120f2a4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/259826fca11b09a28896b25cff2522f964f81b75 b/fuzz/gnutls_client_fuzzer.in/259826fca11b09a28896b25cff2522f964f81b75 new file mode 100644 index 0000000000..9f2b7982cb Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/259826fca11b09a28896b25cff2522f964f81b75 differ diff --git a/fuzz/gnutls_client_fuzzer.in/266c1fa87be26f84b5fb50ae4019887cd4f71351 b/fuzz/gnutls_client_fuzzer.in/266c1fa87be26f84b5fb50ae4019887cd4f71351 new file mode 100644 index 0000000000..2de0492995 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/266c1fa87be26f84b5fb50ae4019887cd4f71351 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2696bea71bf2ce9fd5fa5dfe9731a6db260b0a38 b/fuzz/gnutls_client_fuzzer.in/2696bea71bf2ce9fd5fa5dfe9731a6db260b0a38 new file mode 100644 index 0000000000..623146044a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2696bea71bf2ce9fd5fa5dfe9731a6db260b0a38 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2748d710965af4547e03e69f163406997fec4c08 b/fuzz/gnutls_client_fuzzer.in/2748d710965af4547e03e69f163406997fec4c08 new file mode 100644 index 0000000000..d0a2a1c4f4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2748d710965af4547e03e69f163406997fec4c08 differ diff --git a/fuzz/gnutls_client_fuzzer.in/28038518f9a22f96efd39352bc61673fafa395e4 b/fuzz/gnutls_client_fuzzer.in/28038518f9a22f96efd39352bc61673fafa395e4 new file mode 100644 index 0000000000..8723174ce9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/28038518f9a22f96efd39352bc61673fafa395e4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/28b8b95dd91eb80187497ca1771442127b52c434 b/fuzz/gnutls_client_fuzzer.in/28b8b95dd91eb80187497ca1771442127b52c434 new file mode 100644 index 0000000000..8c30fddb0d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/28b8b95dd91eb80187497ca1771442127b52c434 differ diff --git a/fuzz/gnutls_client_fuzzer.in/28da8ec1e761463c782824a45a7a231708ab4141 b/fuzz/gnutls_client_fuzzer.in/28da8ec1e761463c782824a45a7a231708ab4141 new file mode 100644 index 0000000000..2c9e6f2cda Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/28da8ec1e761463c782824a45a7a231708ab4141 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2926c5b9c8e6654928a8dd1d4419071a6d32cbac b/fuzz/gnutls_client_fuzzer.in/2926c5b9c8e6654928a8dd1d4419071a6d32cbac new file mode 100644 index 0000000000..782fdbc4f3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2926c5b9c8e6654928a8dd1d4419071a6d32cbac differ diff --git a/fuzz/gnutls_client_fuzzer.in/29af92e268427abde6b1b6f41723f2ef40532de1 b/fuzz/gnutls_client_fuzzer.in/29af92e268427abde6b1b6f41723f2ef40532de1 new file mode 100644 index 0000000000..ba786beb66 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/29af92e268427abde6b1b6f41723f2ef40532de1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2ae5070701e5558b04cdeebbc5681f6f4f5ca85a b/fuzz/gnutls_client_fuzzer.in/2ae5070701e5558b04cdeebbc5681f6f4f5ca85a new file mode 100644 index 0000000000..d28361f96e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2ae5070701e5558b04cdeebbc5681f6f4f5ca85a differ diff --git a/fuzz/gnutls_client_fuzzer.in/2af8c5d158657c84c74c21cb20445c642cba1d95 b/fuzz/gnutls_client_fuzzer.in/2af8c5d158657c84c74c21cb20445c642cba1d95 new file mode 100644 index 0000000000..0ef0954230 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2af8c5d158657c84c74c21cb20445c642cba1d95 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2afbe10ca102fef79590b888b620c18d78475b1b b/fuzz/gnutls_client_fuzzer.in/2afbe10ca102fef79590b888b620c18d78475b1b new file mode 100644 index 0000000000..b3f97228a5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2afbe10ca102fef79590b888b620c18d78475b1b differ diff --git a/fuzz/gnutls_client_fuzzer.in/2afc7c4bda5b2ea6ce35be821477e2ce501f7923 b/fuzz/gnutls_client_fuzzer.in/2afc7c4bda5b2ea6ce35be821477e2ce501f7923 new file mode 100644 index 0000000000..f39f232716 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2afc7c4bda5b2ea6ce35be821477e2ce501f7923 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2b5aa6527c794311e3a0719d2d629ad06824b195 b/fuzz/gnutls_client_fuzzer.in/2b5aa6527c794311e3a0719d2d629ad06824b195 new file mode 100644 index 0000000000..86f5ebbd31 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2b5aa6527c794311e3a0719d2d629ad06824b195 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2ba38ca69bc85ebee0c422ad522af4550236f6bb b/fuzz/gnutls_client_fuzzer.in/2ba38ca69bc85ebee0c422ad522af4550236f6bb new file mode 100644 index 0000000000..d188821d27 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2ba38ca69bc85ebee0c422ad522af4550236f6bb differ diff --git a/fuzz/gnutls_client_fuzzer.in/2bd1ab6a5d2ed857972653cea4abb7c38eb50b46 b/fuzz/gnutls_client_fuzzer.in/2bd1ab6a5d2ed857972653cea4abb7c38eb50b46 new file mode 100644 index 0000000000..10971f4cbb Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2bd1ab6a5d2ed857972653cea4abb7c38eb50b46 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2bf6f4abc1b2cb262451f042f0aef6a67a84a67f b/fuzz/gnutls_client_fuzzer.in/2bf6f4abc1b2cb262451f042f0aef6a67a84a67f new file mode 100644 index 0000000000..f31891db64 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2bf6f4abc1b2cb262451f042f0aef6a67a84a67f differ diff --git a/fuzz/gnutls_client_fuzzer.in/2c5a3ab54a4f0e867275db43c363fe1437d079b2 b/fuzz/gnutls_client_fuzzer.in/2c5a3ab54a4f0e867275db43c363fe1437d079b2 new file mode 100644 index 0000000000..33abcd280b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2c5a3ab54a4f0e867275db43c363fe1437d079b2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2c6b6f4b543427c0c1c7c329aa1ea9460de2fc10 b/fuzz/gnutls_client_fuzzer.in/2c6b6f4b543427c0c1c7c329aa1ea9460de2fc10 new file mode 100644 index 0000000000..4d5e9d2e23 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2c6b6f4b543427c0c1c7c329aa1ea9460de2fc10 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2c72095a08ec1a4ddfbef83db389e8cbb5dd6ae9 b/fuzz/gnutls_client_fuzzer.in/2c72095a08ec1a4ddfbef83db389e8cbb5dd6ae9 new file mode 100644 index 0000000000..ba4d6b3f91 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2c72095a08ec1a4ddfbef83db389e8cbb5dd6ae9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2de27d16e1924dfb397be9144588b8258983cdcc b/fuzz/gnutls_client_fuzzer.in/2de27d16e1924dfb397be9144588b8258983cdcc new file mode 100644 index 0000000000..57b428f6f5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2de27d16e1924dfb397be9144588b8258983cdcc differ diff --git a/fuzz/gnutls_client_fuzzer.in/2df7c5626fc63ffd98689fd13899b4068b5ce5a5 b/fuzz/gnutls_client_fuzzer.in/2df7c5626fc63ffd98689fd13899b4068b5ce5a5 new file mode 100644 index 0000000000..80acb8c0e3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2df7c5626fc63ffd98689fd13899b4068b5ce5a5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/2ed2401145cc3b59dfb32f1ae554e5250322ef6c b/fuzz/gnutls_client_fuzzer.in/2ed2401145cc3b59dfb32f1ae554e5250322ef6c new file mode 100644 index 0000000000..b6c762ebc9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2ed2401145cc3b59dfb32f1ae554e5250322ef6c differ diff --git a/fuzz/gnutls_client_fuzzer.in/2f68ac1b465fb4a145b186952501513ffebd3fab b/fuzz/gnutls_client_fuzzer.in/2f68ac1b465fb4a145b186952501513ffebd3fab new file mode 100644 index 0000000000..fd4fb08776 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2f68ac1b465fb4a145b186952501513ffebd3fab differ diff --git a/fuzz/gnutls_client_fuzzer.in/2f7a44b86c01992a089912c62726433d1a93697a b/fuzz/gnutls_client_fuzzer.in/2f7a44b86c01992a089912c62726433d1a93697a new file mode 100644 index 0000000000..8d8d382f16 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/2f7a44b86c01992a089912c62726433d1a93697a differ diff --git a/fuzz/gnutls_client_fuzzer.in/30b438c4b4a3edcb2b3c891d9b3d6c266ab874ec b/fuzz/gnutls_client_fuzzer.in/30b438c4b4a3edcb2b3c891d9b3d6c266ab874ec new file mode 100644 index 0000000000..b1502c61bb Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/30b438c4b4a3edcb2b3c891d9b3d6c266ab874ec differ diff --git a/fuzz/gnutls_client_fuzzer.in/316805a046079cbeb9c057bd0d0c2326e29d6c9e b/fuzz/gnutls_client_fuzzer.in/316805a046079cbeb9c057bd0d0c2326e29d6c9e new file mode 100644 index 0000000000..96305bd191 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/316805a046079cbeb9c057bd0d0c2326e29d6c9e differ diff --git a/fuzz/gnutls_client_fuzzer.in/31f779223bc6f44ef7a9a464fe11b31ca5abd5e8 b/fuzz/gnutls_client_fuzzer.in/31f779223bc6f44ef7a9a464fe11b31ca5abd5e8 new file mode 100644 index 0000000000..6a0d64673c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/31f779223bc6f44ef7a9a464fe11b31ca5abd5e8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/31fd06334ceab6d413849c5d3a3506561853ba61 b/fuzz/gnutls_client_fuzzer.in/31fd06334ceab6d413849c5d3a3506561853ba61 new file mode 100644 index 0000000000..6cf0183f0a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/31fd06334ceab6d413849c5d3a3506561853ba61 differ diff --git a/fuzz/gnutls_client_fuzzer.in/320499e5a0a08d5c28f8aa196382b46129e5d50f b/fuzz/gnutls_client_fuzzer.in/320499e5a0a08d5c28f8aa196382b46129e5d50f new file mode 100644 index 0000000000..217185cf1f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/320499e5a0a08d5c28f8aa196382b46129e5d50f differ diff --git a/fuzz/gnutls_client_fuzzer.in/329341ff5cfb0c0b01b66fd5dd87457e793b3d87 b/fuzz/gnutls_client_fuzzer.in/329341ff5cfb0c0b01b66fd5dd87457e793b3d87 new file mode 100644 index 0000000000..43b0dceabf Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/329341ff5cfb0c0b01b66fd5dd87457e793b3d87 differ diff --git a/fuzz/gnutls_client_fuzzer.in/335f3abc44876858473b77937017a49306fa7d68 b/fuzz/gnutls_client_fuzzer.in/335f3abc44876858473b77937017a49306fa7d68 new file mode 100644 index 0000000000..69701dd0d2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/335f3abc44876858473b77937017a49306fa7d68 differ diff --git a/fuzz/gnutls_client_fuzzer.in/33d94b103da936f6e768dc5661ebe84b1a3f6a6d b/fuzz/gnutls_client_fuzzer.in/33d94b103da936f6e768dc5661ebe84b1a3f6a6d new file mode 100644 index 0000000000..46815c04a0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/33d94b103da936f6e768dc5661ebe84b1a3f6a6d differ diff --git a/fuzz/gnutls_client_fuzzer.in/33ec7fb9f452c06e6162d16824d94197f895d5a9 b/fuzz/gnutls_client_fuzzer.in/33ec7fb9f452c06e6162d16824d94197f895d5a9 new file mode 100644 index 0000000000..17d795a984 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/33ec7fb9f452c06e6162d16824d94197f895d5a9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/34ba5e2cd43e915ec97ea74d77de424834f680cf b/fuzz/gnutls_client_fuzzer.in/34ba5e2cd43e915ec97ea74d77de424834f680cf new file mode 100644 index 0000000000..ce9505a3e5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/34ba5e2cd43e915ec97ea74d77de424834f680cf differ diff --git a/fuzz/gnutls_client_fuzzer.in/35fb4c4393eec5eadc30c4f839ce9c4ae3512b3a b/fuzz/gnutls_client_fuzzer.in/35fb4c4393eec5eadc30c4f839ce9c4ae3512b3a new file mode 100644 index 0000000000..2d949c4b6f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/35fb4c4393eec5eadc30c4f839ce9c4ae3512b3a differ diff --git a/fuzz/gnutls_client_fuzzer.in/369a56597687d86d3ab284942331ac7fdd055b85 b/fuzz/gnutls_client_fuzzer.in/369a56597687d86d3ab284942331ac7fdd055b85 new file mode 100644 index 0000000000..957ed5d456 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/369a56597687d86d3ab284942331ac7fdd055b85 differ diff --git a/fuzz/gnutls_client_fuzzer.in/36a3fde8877fe40adecc96879100d214c1d0e249 b/fuzz/gnutls_client_fuzzer.in/36a3fde8877fe40adecc96879100d214c1d0e249 new file mode 100644 index 0000000000..b4abcdeae8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/36a3fde8877fe40adecc96879100d214c1d0e249 differ diff --git a/fuzz/gnutls_client_fuzzer.in/36f22376b50e57840a5fd1f2a99348531e424fca b/fuzz/gnutls_client_fuzzer.in/36f22376b50e57840a5fd1f2a99348531e424fca new file mode 100644 index 0000000000..06c819e978 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/36f22376b50e57840a5fd1f2a99348531e424fca differ diff --git a/fuzz/gnutls_client_fuzzer.in/370addea8a4b21cd137de1203f2474822962d538 b/fuzz/gnutls_client_fuzzer.in/370addea8a4b21cd137de1203f2474822962d538 new file mode 100644 index 0000000000..78634b5019 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/370addea8a4b21cd137de1203f2474822962d538 differ diff --git a/fuzz/gnutls_client_fuzzer.in/38183ed3113981e532e78b8ef5797e991cdb6c95 b/fuzz/gnutls_client_fuzzer.in/38183ed3113981e532e78b8ef5797e991cdb6c95 new file mode 100644 index 0000000000..443e61c8b9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/38183ed3113981e532e78b8ef5797e991cdb6c95 differ diff --git a/fuzz/gnutls_client_fuzzer.in/382df68c90bb2bb2f8e8b0dcd9d88dcfb717cdf1 b/fuzz/gnutls_client_fuzzer.in/382df68c90bb2bb2f8e8b0dcd9d88dcfb717cdf1 new file mode 100644 index 0000000000..9775ced03f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/382df68c90bb2bb2f8e8b0dcd9d88dcfb717cdf1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3859e4c9e1f1640e66eb35a037ec9422ee92a3dd b/fuzz/gnutls_client_fuzzer.in/3859e4c9e1f1640e66eb35a037ec9422ee92a3dd new file mode 100644 index 0000000000..5159d6f7b4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3859e4c9e1f1640e66eb35a037ec9422ee92a3dd differ diff --git a/fuzz/gnutls_client_fuzzer.in/38a01e750f63c9b79abf7aec740c109f12ffa8bd b/fuzz/gnutls_client_fuzzer.in/38a01e750f63c9b79abf7aec740c109f12ffa8bd new file mode 100644 index 0000000000..44ec9b3675 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/38a01e750f63c9b79abf7aec740c109f12ffa8bd differ diff --git a/fuzz/gnutls_client_fuzzer.in/38a4720a633f114984040c80ce41affbedf66916 b/fuzz/gnutls_client_fuzzer.in/38a4720a633f114984040c80ce41affbedf66916 new file mode 100644 index 0000000000..e830d5eca9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/38a4720a633f114984040c80ce41affbedf66916 differ diff --git a/fuzz/gnutls_client_fuzzer.in/38d4760261ec36cb13967bed3bd2f1914082ade5 b/fuzz/gnutls_client_fuzzer.in/38d4760261ec36cb13967bed3bd2f1914082ade5 new file mode 100644 index 0000000000..878a30bbd3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/38d4760261ec36cb13967bed3bd2f1914082ade5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3967b9cb3dfef6d7fd95aa14adeb6dd69480903e b/fuzz/gnutls_client_fuzzer.in/3967b9cb3dfef6d7fd95aa14adeb6dd69480903e new file mode 100644 index 0000000000..9ad961024e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3967b9cb3dfef6d7fd95aa14adeb6dd69480903e differ diff --git a/fuzz/gnutls_client_fuzzer.in/39eaa17ca277e733373f01548d63b3c67072cb76 b/fuzz/gnutls_client_fuzzer.in/39eaa17ca277e733373f01548d63b3c67072cb76 new file mode 100644 index 0000000000..8eb1a1ee8d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/39eaa17ca277e733373f01548d63b3c67072cb76 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3a200cfac4075ec3c8b6e29c83142896af57cbe0 b/fuzz/gnutls_client_fuzzer.in/3a200cfac4075ec3c8b6e29c83142896af57cbe0 new file mode 100644 index 0000000000..3970361e42 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3a200cfac4075ec3c8b6e29c83142896af57cbe0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3a7ab5179d841527dd340b120aa1739aa39f0c9e b/fuzz/gnutls_client_fuzzer.in/3a7ab5179d841527dd340b120aa1739aa39f0c9e new file mode 100644 index 0000000000..2fd7916452 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3a7ab5179d841527dd340b120aa1739aa39f0c9e differ diff --git a/fuzz/gnutls_client_fuzzer.in/3ae172681e0499f3883aa6e281b573793410a683 b/fuzz/gnutls_client_fuzzer.in/3ae172681e0499f3883aa6e281b573793410a683 new file mode 100644 index 0000000000..c4ddf2b529 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3ae172681e0499f3883aa6e281b573793410a683 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3af3aff666c43b94942af5450e7500e635e0c591 b/fuzz/gnutls_client_fuzzer.in/3af3aff666c43b94942af5450e7500e635e0c591 new file mode 100644 index 0000000000..ba30ddbb63 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3af3aff666c43b94942af5450e7500e635e0c591 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3b30f29b302de161a760ee1ca9c6670051b332df b/fuzz/gnutls_client_fuzzer.in/3b30f29b302de161a760ee1ca9c6670051b332df new file mode 100644 index 0000000000..3fcc1e61de Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3b30f29b302de161a760ee1ca9c6670051b332df differ diff --git a/fuzz/gnutls_client_fuzzer.in/3b6d9131ff71c3834db0e771f05588802e6d455d b/fuzz/gnutls_client_fuzzer.in/3b6d9131ff71c3834db0e771f05588802e6d455d new file mode 100644 index 0000000000..0501b5436b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3b6d9131ff71c3834db0e771f05588802e6d455d differ diff --git a/fuzz/gnutls_client_fuzzer.in/3b78945034b6ba9ad8db01399f6fb23a10ff198a b/fuzz/gnutls_client_fuzzer.in/3b78945034b6ba9ad8db01399f6fb23a10ff198a new file mode 100644 index 0000000000..eb7e3b7769 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3b78945034b6ba9ad8db01399f6fb23a10ff198a differ diff --git a/fuzz/gnutls_client_fuzzer.in/3c9be15a7213621de5291c894f503c607e660fa9 b/fuzz/gnutls_client_fuzzer.in/3c9be15a7213621de5291c894f503c607e660fa9 new file mode 100644 index 0000000000..e744918366 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3c9be15a7213621de5291c894f503c607e660fa9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3cae5ba0bb03f96371564f78e43c6a0d7479a963 b/fuzz/gnutls_client_fuzzer.in/3cae5ba0bb03f96371564f78e43c6a0d7479a963 new file mode 100644 index 0000000000..b7ee1f4692 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3cae5ba0bb03f96371564f78e43c6a0d7479a963 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3cedab355338cee2ee3375bb875a3218c6831a7f b/fuzz/gnutls_client_fuzzer.in/3cedab355338cee2ee3375bb875a3218c6831a7f new file mode 100644 index 0000000000..7e6f737555 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3cedab355338cee2ee3375bb875a3218c6831a7f differ diff --git a/fuzz/gnutls_client_fuzzer.in/3d001432b7f3e5ebf2bc65199fa02760ec127430 b/fuzz/gnutls_client_fuzzer.in/3d001432b7f3e5ebf2bc65199fa02760ec127430 new file mode 100644 index 0000000000..d8f74c0a6d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3d001432b7f3e5ebf2bc65199fa02760ec127430 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3d0bf6d0a4aeebe5fa522d9cf47bef8b8553b69b b/fuzz/gnutls_client_fuzzer.in/3d0bf6d0a4aeebe5fa522d9cf47bef8b8553b69b new file mode 100644 index 0000000000..3e639a3928 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3d0bf6d0a4aeebe5fa522d9cf47bef8b8553b69b differ diff --git a/fuzz/gnutls_client_fuzzer.in/3d94c37220dc128cfd9307b79540c43095537fb9 b/fuzz/gnutls_client_fuzzer.in/3d94c37220dc128cfd9307b79540c43095537fb9 new file mode 100644 index 0000000000..3d17354591 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3d94c37220dc128cfd9307b79540c43095537fb9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3db1eacde509497013bb509c22eb1f72d6a84093 b/fuzz/gnutls_client_fuzzer.in/3db1eacde509497013bb509c22eb1f72d6a84093 new file mode 100644 index 0000000000..5132faa77b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3db1eacde509497013bb509c22eb1f72d6a84093 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3e1c61a29aa427f8eee01df38ac40e7d555d2cd9 b/fuzz/gnutls_client_fuzzer.in/3e1c61a29aa427f8eee01df38ac40e7d555d2cd9 new file mode 100644 index 0000000000..14b039e02d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3e1c61a29aa427f8eee01df38ac40e7d555d2cd9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3eda459377c426f68ac1081bf68534814b8a0713 b/fuzz/gnutls_client_fuzzer.in/3eda459377c426f68ac1081bf68534814b8a0713 new file mode 100644 index 0000000000..422d739c35 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3eda459377c426f68ac1081bf68534814b8a0713 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3f13aa84e86cafece64aa7aabf5aba56967529c0 b/fuzz/gnutls_client_fuzzer.in/3f13aa84e86cafece64aa7aabf5aba56967529c0 new file mode 100644 index 0000000000..169a96a6e0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3f13aa84e86cafece64aa7aabf5aba56967529c0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/3ff16496f33d5c12aba0a56496015ac5c6d95b7f b/fuzz/gnutls_client_fuzzer.in/3ff16496f33d5c12aba0a56496015ac5c6d95b7f new file mode 100644 index 0000000000..802f3a11a5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3ff16496f33d5c12aba0a56496015ac5c6d95b7f differ diff --git a/fuzz/gnutls_client_fuzzer.in/3ff4a7536ebcd75032798768c6f1e5067ac67182 b/fuzz/gnutls_client_fuzzer.in/3ff4a7536ebcd75032798768c6f1e5067ac67182 new file mode 100644 index 0000000000..9efa0115f4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/3ff4a7536ebcd75032798768c6f1e5067ac67182 differ diff --git a/fuzz/gnutls_client_fuzzer.in/4025d2b21171433fe7afee741de09b29f2a59d0d b/fuzz/gnutls_client_fuzzer.in/4025d2b21171433fe7afee741de09b29f2a59d0d new file mode 100644 index 0000000000..079a5337d4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4025d2b21171433fe7afee741de09b29f2a59d0d differ diff --git a/fuzz/gnutls_client_fuzzer.in/404caed32ce127791ce571bfaab9932f6f49e65a b/fuzz/gnutls_client_fuzzer.in/404caed32ce127791ce571bfaab9932f6f49e65a new file mode 100644 index 0000000000..d342fc261d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/404caed32ce127791ce571bfaab9932f6f49e65a differ diff --git a/fuzz/gnutls_client_fuzzer.in/406c79fbea35b6dff902b056737914fefd61bb90 b/fuzz/gnutls_client_fuzzer.in/406c79fbea35b6dff902b056737914fefd61bb90 new file mode 100644 index 0000000000..d34560f4a5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/406c79fbea35b6dff902b056737914fefd61bb90 differ diff --git a/fuzz/gnutls_client_fuzzer.in/40f4174caf0ef46b8fddd39a09148f389ec61494 b/fuzz/gnutls_client_fuzzer.in/40f4174caf0ef46b8fddd39a09148f389ec61494 new file mode 100644 index 0000000000..ec6e465f07 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/40f4174caf0ef46b8fddd39a09148f389ec61494 differ diff --git a/fuzz/gnutls_client_fuzzer.in/418d28f2d197803d84e74040dc75b98e5e75b1b5 b/fuzz/gnutls_client_fuzzer.in/418d28f2d197803d84e74040dc75b98e5e75b1b5 new file mode 100644 index 0000000000..10001df937 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/418d28f2d197803d84e74040dc75b98e5e75b1b5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/41a48739c80674442162e6174f24381f3149f3e7 b/fuzz/gnutls_client_fuzzer.in/41a48739c80674442162e6174f24381f3149f3e7 new file mode 100644 index 0000000000..2acbd96ca1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/41a48739c80674442162e6174f24381f3149f3e7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/41e3154ddc2776ffa95cec907f436bf8986c121a b/fuzz/gnutls_client_fuzzer.in/41e3154ddc2776ffa95cec907f436bf8986c121a new file mode 100644 index 0000000000..bdf0199143 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/41e3154ddc2776ffa95cec907f436bf8986c121a differ diff --git a/fuzz/gnutls_client_fuzzer.in/422bfa206f7186fa3b4699f4c62a41e972c655db b/fuzz/gnutls_client_fuzzer.in/422bfa206f7186fa3b4699f4c62a41e972c655db new file mode 100644 index 0000000000..c7c39cc3b8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/422bfa206f7186fa3b4699f4c62a41e972c655db differ diff --git a/fuzz/gnutls_client_fuzzer.in/42560a1ae89fac5107a55880be32bfc35a48fe64 b/fuzz/gnutls_client_fuzzer.in/42560a1ae89fac5107a55880be32bfc35a48fe64 new file mode 100644 index 0000000000..b21432331d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/42560a1ae89fac5107a55880be32bfc35a48fe64 differ diff --git a/fuzz/gnutls_client_fuzzer.in/4277f9f074603e0e0d5a46d3f88e2f45a56bf6d0 b/fuzz/gnutls_client_fuzzer.in/4277f9f074603e0e0d5a46d3f88e2f45a56bf6d0 new file mode 100644 index 0000000000..f950a1b9f4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4277f9f074603e0e0d5a46d3f88e2f45a56bf6d0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/42b7bb64896d9a6296fe59740bf4a08f2479b583 b/fuzz/gnutls_client_fuzzer.in/42b7bb64896d9a6296fe59740bf4a08f2479b583 new file mode 100644 index 0000000000..cfef6085e1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/42b7bb64896d9a6296fe59740bf4a08f2479b583 differ diff --git a/fuzz/gnutls_client_fuzzer.in/430f13c0ebd30a3a532ca941fec8c7c0a51dc270 b/fuzz/gnutls_client_fuzzer.in/430f13c0ebd30a3a532ca941fec8c7c0a51dc270 new file mode 100644 index 0000000000..1b3b19bac6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/430f13c0ebd30a3a532ca941fec8c7c0a51dc270 differ diff --git a/fuzz/gnutls_client_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f b/fuzz/gnutls_client_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f new file mode 100644 index 0000000000..5cf1a797d5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f differ diff --git a/fuzz/gnutls_client_fuzzer.in/44f569676c313da4bd721a869d7a4a4567ed3645 b/fuzz/gnutls_client_fuzzer.in/44f569676c313da4bd721a869d7a4a4567ed3645 new file mode 100644 index 0000000000..61cb84bb7f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/44f569676c313da4bd721a869d7a4a4567ed3645 differ diff --git a/fuzz/gnutls_client_fuzzer.in/4520450321539eee9eab48ddc83026d011e9a62b b/fuzz/gnutls_client_fuzzer.in/4520450321539eee9eab48ddc83026d011e9a62b new file mode 100644 index 0000000000..3e86fcfdca Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4520450321539eee9eab48ddc83026d011e9a62b differ diff --git a/fuzz/gnutls_client_fuzzer.in/45259a677528199643bd0a51e002817039cbd109 b/fuzz/gnutls_client_fuzzer.in/45259a677528199643bd0a51e002817039cbd109 new file mode 100644 index 0000000000..70b8fe6951 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/45259a677528199643bd0a51e002817039cbd109 differ diff --git a/fuzz/gnutls_client_fuzzer.in/4538f154a662ab6305c73795de9bbca32ff5ae9a b/fuzz/gnutls_client_fuzzer.in/4538f154a662ab6305c73795de9bbca32ff5ae9a new file mode 100644 index 0000000000..2abe6b0bbd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4538f154a662ab6305c73795de9bbca32ff5ae9a differ diff --git a/fuzz/gnutls_client_fuzzer.in/4546734af2f81c02e7b6417e7da5399d233dc384 b/fuzz/gnutls_client_fuzzer.in/4546734af2f81c02e7b6417e7da5399d233dc384 new file mode 100644 index 0000000000..9f5ed24127 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4546734af2f81c02e7b6417e7da5399d233dc384 differ diff --git a/fuzz/gnutls_client_fuzzer.in/456bfd5ba42da815262381fb149e1769fe9afccd b/fuzz/gnutls_client_fuzzer.in/456bfd5ba42da815262381fb149e1769fe9afccd new file mode 100644 index 0000000000..1d771688b8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/456bfd5ba42da815262381fb149e1769fe9afccd differ diff --git a/fuzz/gnutls_client_fuzzer.in/457c3055d7d7c3f544499ee92de586f1cd1950bb b/fuzz/gnutls_client_fuzzer.in/457c3055d7d7c3f544499ee92de586f1cd1950bb new file mode 100644 index 0000000000..e027156bdf Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/457c3055d7d7c3f544499ee92de586f1cd1950bb differ diff --git a/fuzz/gnutls_client_fuzzer.in/45982768f4e6d3555ca5ff1a9fefb62e60a0096c b/fuzz/gnutls_client_fuzzer.in/45982768f4e6d3555ca5ff1a9fefb62e60a0096c new file mode 100644 index 0000000000..adb02158ee Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/45982768f4e6d3555ca5ff1a9fefb62e60a0096c differ diff --git a/fuzz/gnutls_client_fuzzer.in/45b19ade83094ab71c3a06fb512326a44dbda8a7 b/fuzz/gnutls_client_fuzzer.in/45b19ade83094ab71c3a06fb512326a44dbda8a7 new file mode 100644 index 0000000000..6387540a03 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/45b19ade83094ab71c3a06fb512326a44dbda8a7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/45c31558e62cd8b47b8ba140fafe89e23c739608 b/fuzz/gnutls_client_fuzzer.in/45c31558e62cd8b47b8ba140fafe89e23c739608 new file mode 100644 index 0000000000..03e09ead11 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/45c31558e62cd8b47b8ba140fafe89e23c739608 differ diff --git a/fuzz/gnutls_client_fuzzer.in/468cf966faaf7408e1a576b867f4a9b1bedf6d91 b/fuzz/gnutls_client_fuzzer.in/468cf966faaf7408e1a576b867f4a9b1bedf6d91 new file mode 100644 index 0000000000..8e1fc5a93f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/468cf966faaf7408e1a576b867f4a9b1bedf6d91 differ diff --git a/fuzz/gnutls_client_fuzzer.in/47142a542e92bd0b9f7843df2a2fd1706111483a b/fuzz/gnutls_client_fuzzer.in/47142a542e92bd0b9f7843df2a2fd1706111483a new file mode 100644 index 0000000000..86d4f9b2f6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/47142a542e92bd0b9f7843df2a2fd1706111483a differ diff --git a/fuzz/gnutls_client_fuzzer.in/476d331b2164899718b97900c03c0fc330ad03cb b/fuzz/gnutls_client_fuzzer.in/476d331b2164899718b97900c03c0fc330ad03cb new file mode 100644 index 0000000000..129f626ec6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/476d331b2164899718b97900c03c0fc330ad03cb differ diff --git a/fuzz/gnutls_client_fuzzer.in/477088c2db053b4297715e104b5352d97521d89e b/fuzz/gnutls_client_fuzzer.in/477088c2db053b4297715e104b5352d97521d89e new file mode 100644 index 0000000000..9c0af36c2e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/477088c2db053b4297715e104b5352d97521d89e differ diff --git a/fuzz/gnutls_client_fuzzer.in/4868ece29ab876ad05493debe94249d6e2635e88 b/fuzz/gnutls_client_fuzzer.in/4868ece29ab876ad05493debe94249d6e2635e88 new file mode 100644 index 0000000000..42b4f074e3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4868ece29ab876ad05493debe94249d6e2635e88 differ diff --git a/fuzz/gnutls_client_fuzzer.in/48e1f1654fa2433c3c06c3da69df5b77a7e670de b/fuzz/gnutls_client_fuzzer.in/48e1f1654fa2433c3c06c3da69df5b77a7e670de new file mode 100644 index 0000000000..727141fd2a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/48e1f1654fa2433c3c06c3da69df5b77a7e670de differ diff --git a/fuzz/gnutls_client_fuzzer.in/49020ec86ea84b8653b65a2218639db03a18cf33 b/fuzz/gnutls_client_fuzzer.in/49020ec86ea84b8653b65a2218639db03a18cf33 new file mode 100644 index 0000000000..5df426d36b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/49020ec86ea84b8653b65a2218639db03a18cf33 differ diff --git a/fuzz/gnutls_client_fuzzer.in/497051016280d9adde7b4522522727316f306cae b/fuzz/gnutls_client_fuzzer.in/497051016280d9adde7b4522522727316f306cae new file mode 100644 index 0000000000..1da9d5591f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/497051016280d9adde7b4522522727316f306cae differ diff --git a/fuzz/gnutls_client_fuzzer.in/499e5fca9c0ceeca8ad1b4107a5d738388ff79a7 b/fuzz/gnutls_client_fuzzer.in/499e5fca9c0ceeca8ad1b4107a5d738388ff79a7 new file mode 100644 index 0000000000..f8f9957eac Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/499e5fca9c0ceeca8ad1b4107a5d738388ff79a7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/4a55cd8a04cc22930164683192f760cad82bc0e9 b/fuzz/gnutls_client_fuzzer.in/4a55cd8a04cc22930164683192f760cad82bc0e9 new file mode 100644 index 0000000000..47f256accd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4a55cd8a04cc22930164683192f760cad82bc0e9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/4ac0f196483b36b797ed08b27203d4fe7aef1f4b b/fuzz/gnutls_client_fuzzer.in/4ac0f196483b36b797ed08b27203d4fe7aef1f4b new file mode 100644 index 0000000000..16c97b9b2d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4ac0f196483b36b797ed08b27203d4fe7aef1f4b differ diff --git a/fuzz/gnutls_client_fuzzer.in/4b9668ddc9ad75d16d2cfd7fa065f13fb1305c94 b/fuzz/gnutls_client_fuzzer.in/4b9668ddc9ad75d16d2cfd7fa065f13fb1305c94 new file mode 100644 index 0000000000..79d95a0c28 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4b9668ddc9ad75d16d2cfd7fa065f13fb1305c94 differ diff --git a/fuzz/gnutls_client_fuzzer.in/4bb289b070e39c3efcf2a94be6edeca216cbd41b b/fuzz/gnutls_client_fuzzer.in/4bb289b070e39c3efcf2a94be6edeca216cbd41b new file mode 100644 index 0000000000..08b8944108 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4bb289b070e39c3efcf2a94be6edeca216cbd41b differ diff --git a/fuzz/gnutls_client_fuzzer.in/4be09a6aef29668f9558cca48cfdab5cbf6640bc b/fuzz/gnutls_client_fuzzer.in/4be09a6aef29668f9558cca48cfdab5cbf6640bc new file mode 100644 index 0000000000..c1fe9bdc9e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4be09a6aef29668f9558cca48cfdab5cbf6640bc differ diff --git a/fuzz/gnutls_client_fuzzer.in/4c2369673f89a69bd79ebef71b5775f9fb317e81 b/fuzz/gnutls_client_fuzzer.in/4c2369673f89a69bd79ebef71b5775f9fb317e81 new file mode 100644 index 0000000000..0d2bbe7d48 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4c2369673f89a69bd79ebef71b5775f9fb317e81 differ diff --git a/fuzz/gnutls_client_fuzzer.in/4cd3aeb73c3c120fa1e24f16c00bb752eff9eca8 b/fuzz/gnutls_client_fuzzer.in/4cd3aeb73c3c120fa1e24f16c00bb752eff9eca8 new file mode 100644 index 0000000000..3f0f78eea5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4cd3aeb73c3c120fa1e24f16c00bb752eff9eca8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/4d838d99ddda44217bbcc497987a2b9a4d2eef6c b/fuzz/gnutls_client_fuzzer.in/4d838d99ddda44217bbcc497987a2b9a4d2eef6c new file mode 100644 index 0000000000..65c76b5a98 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4d838d99ddda44217bbcc497987a2b9a4d2eef6c differ diff --git a/fuzz/gnutls_client_fuzzer.in/4dafd0c57c8243a0faafc6da88e2d2be06bf3076 b/fuzz/gnutls_client_fuzzer.in/4dafd0c57c8243a0faafc6da88e2d2be06bf3076 new file mode 100644 index 0000000000..c9917159be Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4dafd0c57c8243a0faafc6da88e2d2be06bf3076 differ diff --git a/fuzz/gnutls_client_fuzzer.in/4e0b8af73ed40ddf678e51f0c00940d8f62aedba b/fuzz/gnutls_client_fuzzer.in/4e0b8af73ed40ddf678e51f0c00940d8f62aedba new file mode 100644 index 0000000000..f2c1a16578 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4e0b8af73ed40ddf678e51f0c00940d8f62aedba differ diff --git a/fuzz/gnutls_client_fuzzer.in/4ec06511c58171ce7cd09bac6599cfcd1ca1119b b/fuzz/gnutls_client_fuzzer.in/4ec06511c58171ce7cd09bac6599cfcd1ca1119b new file mode 100644 index 0000000000..c7f522f241 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4ec06511c58171ce7cd09bac6599cfcd1ca1119b differ diff --git a/fuzz/gnutls_client_fuzzer.in/4eec0f5723e77b3ea80eab32c30f20da2efac29f b/fuzz/gnutls_client_fuzzer.in/4eec0f5723e77b3ea80eab32c30f20da2efac29f new file mode 100644 index 0000000000..381ba15abf Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4eec0f5723e77b3ea80eab32c30f20da2efac29f differ diff --git a/fuzz/gnutls_client_fuzzer.in/4f46ee4654b4e64c7e7069fec4986396f8fd606d b/fuzz/gnutls_client_fuzzer.in/4f46ee4654b4e64c7e7069fec4986396f8fd606d new file mode 100644 index 0000000000..529349f85c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4f46ee4654b4e64c7e7069fec4986396f8fd606d differ diff --git a/fuzz/gnutls_client_fuzzer.in/4fbeb45971e0563d9cf31313e7e8100b36597406 b/fuzz/gnutls_client_fuzzer.in/4fbeb45971e0563d9cf31313e7e8100b36597406 new file mode 100644 index 0000000000..0bfde884c0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/4fbeb45971e0563d9cf31313e7e8100b36597406 differ diff --git a/fuzz/gnutls_client_fuzzer.in/50910b45374b99822713ffbec109a82ebc49c225 b/fuzz/gnutls_client_fuzzer.in/50910b45374b99822713ffbec109a82ebc49c225 new file mode 100644 index 0000000000..cc4458243d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/50910b45374b99822713ffbec109a82ebc49c225 differ diff --git a/fuzz/gnutls_client_fuzzer.in/50cd3d015f6b7f7b5e1d82d456925bec6c23c9b3 b/fuzz/gnutls_client_fuzzer.in/50cd3d015f6b7f7b5e1d82d456925bec6c23c9b3 new file mode 100644 index 0000000000..745cfc8100 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/50cd3d015f6b7f7b5e1d82d456925bec6c23c9b3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/519115910ffff8c03e4bc990b53501c722d8e59b b/fuzz/gnutls_client_fuzzer.in/519115910ffff8c03e4bc990b53501c722d8e59b new file mode 100644 index 0000000000..bcc3f4c1cd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/519115910ffff8c03e4bc990b53501c722d8e59b differ diff --git a/fuzz/gnutls_client_fuzzer.in/51bf90d9e31ff39fca34a5e508b0ad6f35a6f339 b/fuzz/gnutls_client_fuzzer.in/51bf90d9e31ff39fca34a5e508b0ad6f35a6f339 new file mode 100644 index 0000000000..8435cb058d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/51bf90d9e31ff39fca34a5e508b0ad6f35a6f339 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5267bc50b4b40a2b6534413b75d24837a619add6 b/fuzz/gnutls_client_fuzzer.in/5267bc50b4b40a2b6534413b75d24837a619add6 new file mode 100644 index 0000000000..386d018383 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5267bc50b4b40a2b6534413b75d24837a619add6 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5273934a048d36b5658eeb378f1998bb187f74c7 b/fuzz/gnutls_client_fuzzer.in/5273934a048d36b5658eeb378f1998bb187f74c7 new file mode 100644 index 0000000000..e717804c27 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5273934a048d36b5658eeb378f1998bb187f74c7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/52a4a908684553c648cecb1bc85476f72aec44e9 b/fuzz/gnutls_client_fuzzer.in/52a4a908684553c648cecb1bc85476f72aec44e9 new file mode 100644 index 0000000000..7bd322132a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/52a4a908684553c648cecb1bc85476f72aec44e9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/52bb5262df3cc3a2b678ce5b2a28f63f3ddd1c2b b/fuzz/gnutls_client_fuzzer.in/52bb5262df3cc3a2b678ce5b2a28f63f3ddd1c2b new file mode 100644 index 0000000000..02a5b0d947 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/52bb5262df3cc3a2b678ce5b2a28f63f3ddd1c2b differ diff --git a/fuzz/gnutls_client_fuzzer.in/52e62e29fd72adf95dc69fe5ff19903baaf29330 b/fuzz/gnutls_client_fuzzer.in/52e62e29fd72adf95dc69fe5ff19903baaf29330 new file mode 100644 index 0000000000..0b5c9bdd47 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/52e62e29fd72adf95dc69fe5ff19903baaf29330 differ diff --git a/fuzz/gnutls_client_fuzzer.in/531ed85fd059e1edc4ec49b5283b85e4f8cefc7d b/fuzz/gnutls_client_fuzzer.in/531ed85fd059e1edc4ec49b5283b85e4f8cefc7d new file mode 100644 index 0000000000..81faa25506 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/531ed85fd059e1edc4ec49b5283b85e4f8cefc7d differ diff --git a/fuzz/gnutls_client_fuzzer.in/533bc741889fcab1e238e59fa3b27392e6a8df0d b/fuzz/gnutls_client_fuzzer.in/533bc741889fcab1e238e59fa3b27392e6a8df0d new file mode 100644 index 0000000000..2ab27e3066 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/533bc741889fcab1e238e59fa3b27392e6a8df0d differ diff --git a/fuzz/gnutls_client_fuzzer.in/5354fca58329a03f0ccba7e3e0acb82d92535a72 b/fuzz/gnutls_client_fuzzer.in/5354fca58329a03f0ccba7e3e0acb82d92535a72 new file mode 100644 index 0000000000..6ee7c63d45 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5354fca58329a03f0ccba7e3e0acb82d92535a72 differ diff --git a/fuzz/gnutls_client_fuzzer.in/53ad80d7b46a8036be194cdb78ef8036a0ce0b50 b/fuzz/gnutls_client_fuzzer.in/53ad80d7b46a8036be194cdb78ef8036a0ce0b50 new file mode 100644 index 0000000000..751334f57a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/53ad80d7b46a8036be194cdb78ef8036a0ce0b50 differ diff --git a/fuzz/gnutls_client_fuzzer.in/53dfd80476e29d5974e3ab8b42a85a3b87868c0f b/fuzz/gnutls_client_fuzzer.in/53dfd80476e29d5974e3ab8b42a85a3b87868c0f new file mode 100644 index 0000000000..10611774a7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/53dfd80476e29d5974e3ab8b42a85a3b87868c0f differ diff --git a/fuzz/gnutls_client_fuzzer.in/54e62966452d510ca14eaee7ee21beef04538632 b/fuzz/gnutls_client_fuzzer.in/54e62966452d510ca14eaee7ee21beef04538632 new file mode 100644 index 0000000000..31052e90bb Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/54e62966452d510ca14eaee7ee21beef04538632 differ diff --git a/fuzz/gnutls_client_fuzzer.in/551b3d3bb5272059e7b9fab37b9e9cf4b44a2d5e b/fuzz/gnutls_client_fuzzer.in/551b3d3bb5272059e7b9fab37b9e9cf4b44a2d5e new file mode 100644 index 0000000000..1625488d8d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/551b3d3bb5272059e7b9fab37b9e9cf4b44a2d5e differ diff --git a/fuzz/gnutls_client_fuzzer.in/557159b1afb78038e4bf25a2f6e5f90693ccc0f4 b/fuzz/gnutls_client_fuzzer.in/557159b1afb78038e4bf25a2f6e5f90693ccc0f4 new file mode 100644 index 0000000000..486830cbf0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/557159b1afb78038e4bf25a2f6e5f90693ccc0f4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/558f848b541659a33f656e4f4e19da32be04dd3c b/fuzz/gnutls_client_fuzzer.in/558f848b541659a33f656e4f4e19da32be04dd3c new file mode 100644 index 0000000000..45a4cf8323 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/558f848b541659a33f656e4f4e19da32be04dd3c differ diff --git a/fuzz/gnutls_client_fuzzer.in/55ed6daa2fdcc99bf32a3259d7b390aa0fbee07d b/fuzz/gnutls_client_fuzzer.in/55ed6daa2fdcc99bf32a3259d7b390aa0fbee07d new file mode 100644 index 0000000000..e46ef89693 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/55ed6daa2fdcc99bf32a3259d7b390aa0fbee07d differ diff --git a/fuzz/gnutls_client_fuzzer.in/568e49aceec407cc95710700f6a5891d48e1ca53 b/fuzz/gnutls_client_fuzzer.in/568e49aceec407cc95710700f6a5891d48e1ca53 new file mode 100644 index 0000000000..883cd68e33 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/568e49aceec407cc95710700f6a5891d48e1ca53 differ diff --git a/fuzz/gnutls_client_fuzzer.in/569a8dc30bc910cfddefc85abb7dab06d84f1b87 b/fuzz/gnutls_client_fuzzer.in/569a8dc30bc910cfddefc85abb7dab06d84f1b87 new file mode 100644 index 0000000000..af4cd6d2a1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/569a8dc30bc910cfddefc85abb7dab06d84f1b87 differ diff --git a/fuzz/gnutls_client_fuzzer.in/56facd99e146eb73a01481c2c4cec096d916adbd b/fuzz/gnutls_client_fuzzer.in/56facd99e146eb73a01481c2c4cec096d916adbd new file mode 100644 index 0000000000..71cfa56d05 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/56facd99e146eb73a01481c2c4cec096d916adbd differ diff --git a/fuzz/gnutls_client_fuzzer.in/5774df57908a8efc5c511725ad6c94a26c0ec58d b/fuzz/gnutls_client_fuzzer.in/5774df57908a8efc5c511725ad6c94a26c0ec58d new file mode 100644 index 0000000000..c5a8f67462 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5774df57908a8efc5c511725ad6c94a26c0ec58d differ diff --git a/fuzz/gnutls_client_fuzzer.in/57ba124fd4be478cda5ea9cb609e38137912d2ed b/fuzz/gnutls_client_fuzzer.in/57ba124fd4be478cda5ea9cb609e38137912d2ed new file mode 100644 index 0000000000..8f875b6565 --- /dev/null +++ b/fuzz/gnutls_client_fuzzer.in/57ba124fd4be478cda5ea9cb609e38137912d2ed @@ -0,0 +1 @@ +00AA \ No newline at end of file diff --git a/fuzz/gnutls_client_fuzzer.in/5870bf9c26f7387fff85edecc9059e2a9a20d7de b/fuzz/gnutls_client_fuzzer.in/5870bf9c26f7387fff85edecc9059e2a9a20d7de new file mode 100644 index 0000000000..56fd25802d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5870bf9c26f7387fff85edecc9059e2a9a20d7de differ diff --git a/fuzz/gnutls_client_fuzzer.in/589a7ce1e120d9bdb4d021a386a34f61e6aac38c b/fuzz/gnutls_client_fuzzer.in/589a7ce1e120d9bdb4d021a386a34f61e6aac38c new file mode 100644 index 0000000000..7729265e54 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/589a7ce1e120d9bdb4d021a386a34f61e6aac38c differ diff --git a/fuzz/gnutls_client_fuzzer.in/595b97c2190e98814175ae4f6034e712566391fc b/fuzz/gnutls_client_fuzzer.in/595b97c2190e98814175ae4f6034e712566391fc new file mode 100644 index 0000000000..d0edc725b3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/595b97c2190e98814175ae4f6034e712566391fc differ diff --git a/fuzz/gnutls_client_fuzzer.in/59bf6b22aede2a1c77a199db6b490c036bf26c19 b/fuzz/gnutls_client_fuzzer.in/59bf6b22aede2a1c77a199db6b490c036bf26c19 new file mode 100644 index 0000000000..110ba49610 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/59bf6b22aede2a1c77a199db6b490c036bf26c19 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5a5737490e4ed95848e374d11819a436b4b2735a b/fuzz/gnutls_client_fuzzer.in/5a5737490e4ed95848e374d11819a436b4b2735a new file mode 100644 index 0000000000..d6b7a0de6b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5a5737490e4ed95848e374d11819a436b4b2735a differ diff --git a/fuzz/gnutls_client_fuzzer.in/5a72f3bea1362201a54a0a9d272094f66757cd49 b/fuzz/gnutls_client_fuzzer.in/5a72f3bea1362201a54a0a9d272094f66757cd49 new file mode 100644 index 0000000000..74a13bbf0e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5a72f3bea1362201a54a0a9d272094f66757cd49 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5aa7629bee20ac339dc33e5ba1f0475796d18345 b/fuzz/gnutls_client_fuzzer.in/5aa7629bee20ac339dc33e5ba1f0475796d18345 new file mode 100644 index 0000000000..76613217a2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5aa7629bee20ac339dc33e5ba1f0475796d18345 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5ab4e98db7751437132bbda976fde3c5841200d3 b/fuzz/gnutls_client_fuzzer.in/5ab4e98db7751437132bbda976fde3c5841200d3 new file mode 100644 index 0000000000..2771be8baf Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5ab4e98db7751437132bbda976fde3c5841200d3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5ad8dc0ab851015a2600fc62d79d3b66fe8f66a8 b/fuzz/gnutls_client_fuzzer.in/5ad8dc0ab851015a2600fc62d79d3b66fe8f66a8 new file mode 100644 index 0000000000..b2e53e8144 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5ad8dc0ab851015a2600fc62d79d3b66fe8f66a8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5afa37e4cbd67137a8024f17b3ef4b024c5759ca b/fuzz/gnutls_client_fuzzer.in/5afa37e4cbd67137a8024f17b3ef4b024c5759ca new file mode 100644 index 0000000000..7e4c42a198 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5afa37e4cbd67137a8024f17b3ef4b024c5759ca differ diff --git a/fuzz/gnutls_client_fuzzer.in/5bd8c54a7e5005c3651a5a8eaa4bcf57a8ebb225 b/fuzz/gnutls_client_fuzzer.in/5bd8c54a7e5005c3651a5a8eaa4bcf57a8ebb225 new file mode 100644 index 0000000000..65bd80525f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5bd8c54a7e5005c3651a5a8eaa4bcf57a8ebb225 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5c213fa268b79209cc00f64e0e0aa38275c62e21 b/fuzz/gnutls_client_fuzzer.in/5c213fa268b79209cc00f64e0e0aa38275c62e21 new file mode 100644 index 0000000000..ac5d9366b7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5c213fa268b79209cc00f64e0e0aa38275c62e21 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5c413f9a7f95910ccb494a3802218e307c71a63e b/fuzz/gnutls_client_fuzzer.in/5c413f9a7f95910ccb494a3802218e307c71a63e new file mode 100644 index 0000000000..6d0055634c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5c413f9a7f95910ccb494a3802218e307c71a63e differ diff --git a/fuzz/gnutls_client_fuzzer.in/5c5f66a6105ab906eb453c46141f1bf0eed50a50 b/fuzz/gnutls_client_fuzzer.in/5c5f66a6105ab906eb453c46141f1bf0eed50a50 new file mode 100644 index 0000000000..9f08417aac Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5c5f66a6105ab906eb453c46141f1bf0eed50a50 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5c7992ecf560bf124d95d360b3c3a012fd94ceba b/fuzz/gnutls_client_fuzzer.in/5c7992ecf560bf124d95d360b3c3a012fd94ceba new file mode 100644 index 0000000000..9f74bbe371 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5c7992ecf560bf124d95d360b3c3a012fd94ceba differ diff --git a/fuzz/gnutls_client_fuzzer.in/5c7f18db63c4c801e3a007c8365f7d448a0ae4f1 b/fuzz/gnutls_client_fuzzer.in/5c7f18db63c4c801e3a007c8365f7d448a0ae4f1 new file mode 100644 index 0000000000..990e98c1e3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5c7f18db63c4c801e3a007c8365f7d448a0ae4f1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5cc8c7122b16bebf76388449fad83ecfcdc5a6d2 b/fuzz/gnutls_client_fuzzer.in/5cc8c7122b16bebf76388449fad83ecfcdc5a6d2 new file mode 100644 index 0000000000..7104108cee Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5cc8c7122b16bebf76388449fad83ecfcdc5a6d2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5cda9a1a271fc926c1efea78a3a19827c06786f0 b/fuzz/gnutls_client_fuzzer.in/5cda9a1a271fc926c1efea78a3a19827c06786f0 new file mode 100644 index 0000000000..2d54018475 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5cda9a1a271fc926c1efea78a3a19827c06786f0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5d142c5c53c8807f157306f09caaa2787786283f b/fuzz/gnutls_client_fuzzer.in/5d142c5c53c8807f157306f09caaa2787786283f new file mode 100644 index 0000000000..212d1ec346 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5d142c5c53c8807f157306f09caaa2787786283f differ diff --git a/fuzz/gnutls_client_fuzzer.in/5d51673fcd018c52ba721df9519d9007eb506bfb b/fuzz/gnutls_client_fuzzer.in/5d51673fcd018c52ba721df9519d9007eb506bfb new file mode 100644 index 0000000000..ba40b2191a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5d51673fcd018c52ba721df9519d9007eb506bfb differ diff --git a/fuzz/gnutls_client_fuzzer.in/5dd27ea8b597bf4c963013fa5e820cb0baac4167 b/fuzz/gnutls_client_fuzzer.in/5dd27ea8b597bf4c963013fa5e820cb0baac4167 new file mode 100644 index 0000000000..8abbddf924 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5dd27ea8b597bf4c963013fa5e820cb0baac4167 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5ddb587edbdf1b1bb5fd54eed60ea3d7f910a3b3 b/fuzz/gnutls_client_fuzzer.in/5ddb587edbdf1b1bb5fd54eed60ea3d7f910a3b3 new file mode 100644 index 0000000000..bd6c007e3a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5ddb587edbdf1b1bb5fd54eed60ea3d7f910a3b3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5e01781e6a39e51c34319256be1907baaacc4a09 b/fuzz/gnutls_client_fuzzer.in/5e01781e6a39e51c34319256be1907baaacc4a09 new file mode 100644 index 0000000000..eef0f8d271 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5e01781e6a39e51c34319256be1907baaacc4a09 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5e702858f464f2290b81bcd73924c95c21f1ba38 b/fuzz/gnutls_client_fuzzer.in/5e702858f464f2290b81bcd73924c95c21f1ba38 new file mode 100644 index 0000000000..f6dcdf51e8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5e702858f464f2290b81bcd73924c95c21f1ba38 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5eae85dea028bb7ca41fb0ee28c68de5088759f2 b/fuzz/gnutls_client_fuzzer.in/5eae85dea028bb7ca41fb0ee28c68de5088759f2 new file mode 100644 index 0000000000..51b5cc8d35 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5eae85dea028bb7ca41fb0ee28c68de5088759f2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5fa0e5eff82440f711a43d7dd1b3a51cfc947dab b/fuzz/gnutls_client_fuzzer.in/5fa0e5eff82440f711a43d7dd1b3a51cfc947dab new file mode 100644 index 0000000000..61a3113a76 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5fa0e5eff82440f711a43d7dd1b3a51cfc947dab differ diff --git a/fuzz/gnutls_client_fuzzer.in/5fb7e4286ba80b2e19be28bff61ac09e7a598cbc b/fuzz/gnutls_client_fuzzer.in/5fb7e4286ba80b2e19be28bff61ac09e7a598cbc new file mode 100644 index 0000000000..c2188a7b63 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5fb7e4286ba80b2e19be28bff61ac09e7a598cbc differ diff --git a/fuzz/gnutls_client_fuzzer.in/5fd9f63b787a92d9f6dc1ef6076b5bb840f284a1 b/fuzz/gnutls_client_fuzzer.in/5fd9f63b787a92d9f6dc1ef6076b5bb840f284a1 new file mode 100644 index 0000000000..3d2f58e85b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5fd9f63b787a92d9f6dc1ef6076b5bb840f284a1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/5fe5aaa4c58d8962a29440c7ffbd19d38c8924b1 b/fuzz/gnutls_client_fuzzer.in/5fe5aaa4c58d8962a29440c7ffbd19d38c8924b1 new file mode 100644 index 0000000000..458c9f025a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/5fe5aaa4c58d8962a29440c7ffbd19d38c8924b1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/60ff1e23d42ab3ce4521ebdd1e65a87e463ee1f7 b/fuzz/gnutls_client_fuzzer.in/60ff1e23d42ab3ce4521ebdd1e65a87e463ee1f7 new file mode 100644 index 0000000000..d440c970e8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/60ff1e23d42ab3ce4521ebdd1e65a87e463ee1f7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/6170c5e7cee013f3203e7c6041bbc1276fd03618 b/fuzz/gnutls_client_fuzzer.in/6170c5e7cee013f3203e7c6041bbc1276fd03618 new file mode 100644 index 0000000000..59dc46fbcd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6170c5e7cee013f3203e7c6041bbc1276fd03618 differ diff --git a/fuzz/gnutls_client_fuzzer.in/617219a8441b074f565f16591ea443b1e5cda994 b/fuzz/gnutls_client_fuzzer.in/617219a8441b074f565f16591ea443b1e5cda994 new file mode 100644 index 0000000000..d1fb158ed6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/617219a8441b074f565f16591ea443b1e5cda994 differ diff --git a/fuzz/gnutls_client_fuzzer.in/61a84a8103295fc4b674de125d940755f2f6282d b/fuzz/gnutls_client_fuzzer.in/61a84a8103295fc4b674de125d940755f2f6282d new file mode 100644 index 0000000000..3c5f0ab6f7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/61a84a8103295fc4b674de125d940755f2f6282d differ diff --git a/fuzz/gnutls_client_fuzzer.in/61ed24bbe3c1a89fd412e61e0b06535e43b84c21 b/fuzz/gnutls_client_fuzzer.in/61ed24bbe3c1a89fd412e61e0b06535e43b84c21 new file mode 100644 index 0000000000..a540c1ff49 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/61ed24bbe3c1a89fd412e61e0b06535e43b84c21 differ diff --git a/fuzz/gnutls_client_fuzzer.in/6211748adfcb4ce80de7a27c268648d9feefa98d b/fuzz/gnutls_client_fuzzer.in/6211748adfcb4ce80de7a27c268648d9feefa98d new file mode 100644 index 0000000000..ed2bd6e10b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6211748adfcb4ce80de7a27c268648d9feefa98d differ diff --git a/fuzz/gnutls_client_fuzzer.in/62343e475171a453e39b34ac3f9a69a4c34d7874 b/fuzz/gnutls_client_fuzzer.in/62343e475171a453e39b34ac3f9a69a4c34d7874 new file mode 100644 index 0000000000..d02eed0c93 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/62343e475171a453e39b34ac3f9a69a4c34d7874 differ diff --git a/fuzz/gnutls_client_fuzzer.in/62a1676e5b756ea55fd6aceb50e2ea35015b0f7e b/fuzz/gnutls_client_fuzzer.in/62a1676e5b756ea55fd6aceb50e2ea35015b0f7e new file mode 100644 index 0000000000..3d830e99fd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/62a1676e5b756ea55fd6aceb50e2ea35015b0f7e differ diff --git a/fuzz/gnutls_client_fuzzer.in/62a9522f93c616586e25e83de9ec5622ab02f9a6 b/fuzz/gnutls_client_fuzzer.in/62a9522f93c616586e25e83de9ec5622ab02f9a6 new file mode 100644 index 0000000000..7df0e7a59b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/62a9522f93c616586e25e83de9ec5622ab02f9a6 differ diff --git a/fuzz/gnutls_client_fuzzer.in/62c905912d6aff106d05b771a9fc122dd1650910 b/fuzz/gnutls_client_fuzzer.in/62c905912d6aff106d05b771a9fc122dd1650910 new file mode 100644 index 0000000000..a47eb1bd3b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/62c905912d6aff106d05b771a9fc122dd1650910 differ diff --git a/fuzz/gnutls_client_fuzzer.in/63085abd506514b8fd7f4734d268fabb76721041 b/fuzz/gnutls_client_fuzzer.in/63085abd506514b8fd7f4734d268fabb76721041 new file mode 100644 index 0000000000..ef456db441 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/63085abd506514b8fd7f4734d268fabb76721041 differ diff --git a/fuzz/gnutls_client_fuzzer.in/630901d80424aa20e0b7ae0f6d379818263a9a0c b/fuzz/gnutls_client_fuzzer.in/630901d80424aa20e0b7ae0f6d379818263a9a0c new file mode 100644 index 0000000000..7047da5ea1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/630901d80424aa20e0b7ae0f6d379818263a9a0c differ diff --git a/fuzz/gnutls_client_fuzzer.in/63453f6b9fd90ba3d87eb1d6d97cc5666f8dbe3b b/fuzz/gnutls_client_fuzzer.in/63453f6b9fd90ba3d87eb1d6d97cc5666f8dbe3b new file mode 100644 index 0000000000..44db5ded5b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/63453f6b9fd90ba3d87eb1d6d97cc5666f8dbe3b differ diff --git a/fuzz/gnutls_client_fuzzer.in/6383a58e526e341ff4480bf5c35d7b8fa916b32e b/fuzz/gnutls_client_fuzzer.in/6383a58e526e341ff4480bf5c35d7b8fa916b32e new file mode 100644 index 0000000000..44e0d4d2b5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6383a58e526e341ff4480bf5c35d7b8fa916b32e differ diff --git a/fuzz/gnutls_client_fuzzer.in/63bf2131c3daa3d6b9d67e5416e258a44777023a b/fuzz/gnutls_client_fuzzer.in/63bf2131c3daa3d6b9d67e5416e258a44777023a new file mode 100644 index 0000000000..d854ed1ce0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/63bf2131c3daa3d6b9d67e5416e258a44777023a differ diff --git a/fuzz/gnutls_client_fuzzer.in/64a3b138905f1189a502ef7a2a3813f1d8e44179 b/fuzz/gnutls_client_fuzzer.in/64a3b138905f1189a502ef7a2a3813f1d8e44179 new file mode 100644 index 0000000000..e6c05a52fa Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/64a3b138905f1189a502ef7a2a3813f1d8e44179 differ diff --git a/fuzz/gnutls_client_fuzzer.in/64c4c70baa4fdfc37a68592527e4e6177c80ddeb b/fuzz/gnutls_client_fuzzer.in/64c4c70baa4fdfc37a68592527e4e6177c80ddeb new file mode 100644 index 0000000000..fa324608ae Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/64c4c70baa4fdfc37a68592527e4e6177c80ddeb differ diff --git a/fuzz/gnutls_client_fuzzer.in/64e573fa3ec9b04780c5d804f8a285ef40a2cce9 b/fuzz/gnutls_client_fuzzer.in/64e573fa3ec9b04780c5d804f8a285ef40a2cce9 new file mode 100644 index 0000000000..7e83b238f9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/64e573fa3ec9b04780c5d804f8a285ef40a2cce9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/65cdee2cc2b4b11c6359bdf11c82b93fb29b7ecf b/fuzz/gnutls_client_fuzzer.in/65cdee2cc2b4b11c6359bdf11c82b93fb29b7ecf new file mode 100644 index 0000000000..9ca1dda785 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/65cdee2cc2b4b11c6359bdf11c82b93fb29b7ecf differ diff --git a/fuzz/gnutls_client_fuzzer.in/6761c9834549cb7edd1079e963efcb0dcd4fde15 b/fuzz/gnutls_client_fuzzer.in/6761c9834549cb7edd1079e963efcb0dcd4fde15 new file mode 100644 index 0000000000..141ebbab55 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6761c9834549cb7edd1079e963efcb0dcd4fde15 differ diff --git a/fuzz/gnutls_client_fuzzer.in/6801ebd22e598822cf9db488e58ce1962db5b9de b/fuzz/gnutls_client_fuzzer.in/6801ebd22e598822cf9db488e58ce1962db5b9de new file mode 100644 index 0000000000..8380ebd5c5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6801ebd22e598822cf9db488e58ce1962db5b9de differ diff --git a/fuzz/gnutls_client_fuzzer.in/6850b4195ff812a0631d03109113472ac2dfe3c4 b/fuzz/gnutls_client_fuzzer.in/6850b4195ff812a0631d03109113472ac2dfe3c4 new file mode 100644 index 0000000000..00cc19a9d1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6850b4195ff812a0631d03109113472ac2dfe3c4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/68688e1970e513800fc4726711b790dab230a13a b/fuzz/gnutls_client_fuzzer.in/68688e1970e513800fc4726711b790dab230a13a new file mode 100644 index 0000000000..7134db86af Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/68688e1970e513800fc4726711b790dab230a13a differ diff --git a/fuzz/gnutls_client_fuzzer.in/6868d6f42096423a3fabab99eaf797cd8bd43412 b/fuzz/gnutls_client_fuzzer.in/6868d6f42096423a3fabab99eaf797cd8bd43412 new file mode 100644 index 0000000000..4162dfc61f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6868d6f42096423a3fabab99eaf797cd8bd43412 differ diff --git a/fuzz/gnutls_client_fuzzer.in/68d685d8564a5a6b9ce2516fd033d64dff063e7e b/fuzz/gnutls_client_fuzzer.in/68d685d8564a5a6b9ce2516fd033d64dff063e7e new file mode 100644 index 0000000000..0c418d84e8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/68d685d8564a5a6b9ce2516fd033d64dff063e7e differ diff --git a/fuzz/gnutls_client_fuzzer.in/6900b30c031b74ac026cf1002482848ca2ef57ee b/fuzz/gnutls_client_fuzzer.in/6900b30c031b74ac026cf1002482848ca2ef57ee new file mode 100644 index 0000000000..688f642917 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6900b30c031b74ac026cf1002482848ca2ef57ee differ diff --git a/fuzz/gnutls_client_fuzzer.in/690bb110b27a2910abc65b163869b7ca3e339f8c b/fuzz/gnutls_client_fuzzer.in/690bb110b27a2910abc65b163869b7ca3e339f8c new file mode 100644 index 0000000000..d3ea6f30c8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/690bb110b27a2910abc65b163869b7ca3e339f8c differ diff --git a/fuzz/gnutls_client_fuzzer.in/693e5f09c45bdf085c3bcf70c4dfd7cc04311f83 b/fuzz/gnutls_client_fuzzer.in/693e5f09c45bdf085c3bcf70c4dfd7cc04311f83 new file mode 100644 index 0000000000..a57a87c5dd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/693e5f09c45bdf085c3bcf70c4dfd7cc04311f83 differ diff --git a/fuzz/gnutls_client_fuzzer.in/69b74b91f96a12e0576b57a742764f9129be9e3b b/fuzz/gnutls_client_fuzzer.in/69b74b91f96a12e0576b57a742764f9129be9e3b new file mode 100644 index 0000000000..65447ece6d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/69b74b91f96a12e0576b57a742764f9129be9e3b differ diff --git a/fuzz/gnutls_client_fuzzer.in/6a3f35fb8cc2a6bf99aff1d0b4b17cf3ce5330ed b/fuzz/gnutls_client_fuzzer.in/6a3f35fb8cc2a6bf99aff1d0b4b17cf3ce5330ed new file mode 100644 index 0000000000..4e5ec9ecc4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6a3f35fb8cc2a6bf99aff1d0b4b17cf3ce5330ed differ diff --git a/fuzz/gnutls_client_fuzzer.in/6ab2c10cb3d85f8cbe95e84eee27da9fb1427ccf b/fuzz/gnutls_client_fuzzer.in/6ab2c10cb3d85f8cbe95e84eee27da9fb1427ccf new file mode 100644 index 0000000000..1b8d6a5058 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6ab2c10cb3d85f8cbe95e84eee27da9fb1427ccf differ diff --git a/fuzz/gnutls_client_fuzzer.in/6abcfc39ebfce0e4bf9380193fca7f7ac9fe438d b/fuzz/gnutls_client_fuzzer.in/6abcfc39ebfce0e4bf9380193fca7f7ac9fe438d new file mode 100644 index 0000000000..2707f20230 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6abcfc39ebfce0e4bf9380193fca7f7ac9fe438d differ diff --git a/fuzz/gnutls_client_fuzzer.in/6b5fee997fe146ff2d480ef00d497660e8e2664d b/fuzz/gnutls_client_fuzzer.in/6b5fee997fe146ff2d480ef00d497660e8e2664d new file mode 100644 index 0000000000..c1a478e335 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6b5fee997fe146ff2d480ef00d497660e8e2664d differ diff --git a/fuzz/gnutls_client_fuzzer.in/6bdde7df0416a17826c9f13999b0e1c09ba537f1 b/fuzz/gnutls_client_fuzzer.in/6bdde7df0416a17826c9f13999b0e1c09ba537f1 new file mode 100644 index 0000000000..8cc44c232f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6bdde7df0416a17826c9f13999b0e1c09ba537f1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/6c1c19efda3110a0ff7aade83623907bc7323ef5 b/fuzz/gnutls_client_fuzzer.in/6c1c19efda3110a0ff7aade83623907bc7323ef5 new file mode 100644 index 0000000000..7f52a63aff Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6c1c19efda3110a0ff7aade83623907bc7323ef5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/6cf78e3d94b375d4299621d3c6bcdefbc2e305c7 b/fuzz/gnutls_client_fuzzer.in/6cf78e3d94b375d4299621d3c6bcdefbc2e305c7 new file mode 100644 index 0000000000..1fc253b757 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6cf78e3d94b375d4299621d3c6bcdefbc2e305c7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/6d70620e798ee5d6d92b43e16b55f0449300a6bd b/fuzz/gnutls_client_fuzzer.in/6d70620e798ee5d6d92b43e16b55f0449300a6bd new file mode 100644 index 0000000000..389cce8760 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6d70620e798ee5d6d92b43e16b55f0449300a6bd differ diff --git a/fuzz/gnutls_client_fuzzer.in/6e0ff7376b5f441be74254c2e888c1fd9376b7a4 b/fuzz/gnutls_client_fuzzer.in/6e0ff7376b5f441be74254c2e888c1fd9376b7a4 new file mode 100644 index 0000000000..2f5dfc7977 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6e0ff7376b5f441be74254c2e888c1fd9376b7a4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/6e8eb840b7f6ed90702f248b5d07a5d66984f9c0 b/fuzz/gnutls_client_fuzzer.in/6e8eb840b7f6ed90702f248b5d07a5d66984f9c0 new file mode 100644 index 0000000000..11918e8d55 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6e8eb840b7f6ed90702f248b5d07a5d66984f9c0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/6eebdb85c85eeaab9dd9c412d7e6b4e28976e790 b/fuzz/gnutls_client_fuzzer.in/6eebdb85c85eeaab9dd9c412d7e6b4e28976e790 new file mode 100644 index 0000000000..203402ae91 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6eebdb85c85eeaab9dd9c412d7e6b4e28976e790 differ diff --git a/fuzz/gnutls_client_fuzzer.in/6f08fcc09d030fb92d22d2f7b5c10c0aa1ec7e49 b/fuzz/gnutls_client_fuzzer.in/6f08fcc09d030fb92d22d2f7b5c10c0aa1ec7e49 new file mode 100644 index 0000000000..cb6f504dd1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6f08fcc09d030fb92d22d2f7b5c10c0aa1ec7e49 differ diff --git a/fuzz/gnutls_client_fuzzer.in/6f1a9af0d4b6c64157cf99003f0382e3ef65469e b/fuzz/gnutls_client_fuzzer.in/6f1a9af0d4b6c64157cf99003f0382e3ef65469e new file mode 100644 index 0000000000..a9e696a71e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6f1a9af0d4b6c64157cf99003f0382e3ef65469e differ diff --git a/fuzz/gnutls_client_fuzzer.in/6f2b76b36d5324f78ce0cd61a7635441bacd0ff1 b/fuzz/gnutls_client_fuzzer.in/6f2b76b36d5324f78ce0cd61a7635441bacd0ff1 new file mode 100644 index 0000000000..4ebb5472ef Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/6f2b76b36d5324f78ce0cd61a7635441bacd0ff1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/7019eb78193b72bcf303bb063b80c9074b4ea375 b/fuzz/gnutls_client_fuzzer.in/7019eb78193b72bcf303bb063b80c9074b4ea375 new file mode 100644 index 0000000000..904e390ead Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7019eb78193b72bcf303bb063b80c9074b4ea375 differ diff --git a/fuzz/gnutls_client_fuzzer.in/70215731bbd0de189174e6f5d35b52b8bcb87760 b/fuzz/gnutls_client_fuzzer.in/70215731bbd0de189174e6f5d35b52b8bcb87760 new file mode 100644 index 0000000000..435978fe61 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/70215731bbd0de189174e6f5d35b52b8bcb87760 differ diff --git a/fuzz/gnutls_client_fuzzer.in/7070d07d9a0c8e3dc7fa906b6e2f6896791975e5 b/fuzz/gnutls_client_fuzzer.in/7070d07d9a0c8e3dc7fa906b6e2f6896791975e5 new file mode 100644 index 0000000000..512a3c962b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7070d07d9a0c8e3dc7fa906b6e2f6896791975e5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/707622567a4170d08c6ea370f55fc7c8a4416b6f b/fuzz/gnutls_client_fuzzer.in/707622567a4170d08c6ea370f55fc7c8a4416b6f new file mode 100644 index 0000000000..71d7cc5c0a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/707622567a4170d08c6ea370f55fc7c8a4416b6f differ diff --git a/fuzz/gnutls_client_fuzzer.in/7083ed671cae3b52fd530fd149eb9b5c6b8d9454 b/fuzz/gnutls_client_fuzzer.in/7083ed671cae3b52fd530fd149eb9b5c6b8d9454 new file mode 100644 index 0000000000..134fd6868d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7083ed671cae3b52fd530fd149eb9b5c6b8d9454 differ diff --git a/fuzz/gnutls_client_fuzzer.in/708f71677855acd003755e1a2cc941c2d34f5199 b/fuzz/gnutls_client_fuzzer.in/708f71677855acd003755e1a2cc941c2d34f5199 new file mode 100644 index 0000000000..fab17fa06c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/708f71677855acd003755e1a2cc941c2d34f5199 differ diff --git a/fuzz/gnutls_client_fuzzer.in/70cc066771e42e19642414b5cf4c6d126b4b38fa b/fuzz/gnutls_client_fuzzer.in/70cc066771e42e19642414b5cf4c6d126b4b38fa new file mode 100644 index 0000000000..0d4a2403a0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/70cc066771e42e19642414b5cf4c6d126b4b38fa differ diff --git a/fuzz/gnutls_client_fuzzer.in/71d110c0c486fb23382e8969c3fcfd91e566f592 b/fuzz/gnutls_client_fuzzer.in/71d110c0c486fb23382e8969c3fcfd91e566f592 new file mode 100644 index 0000000000..87e092928e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/71d110c0c486fb23382e8969c3fcfd91e566f592 differ diff --git a/fuzz/gnutls_client_fuzzer.in/724e93c4410ca53462058569d17753a115e4dc99 b/fuzz/gnutls_client_fuzzer.in/724e93c4410ca53462058569d17753a115e4dc99 new file mode 100644 index 0000000000..30804df81d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/724e93c4410ca53462058569d17753a115e4dc99 differ diff --git a/fuzz/gnutls_client_fuzzer.in/73a186242b4539d1c42a4be1fea3e7ba7bf1ae5d b/fuzz/gnutls_client_fuzzer.in/73a186242b4539d1c42a4be1fea3e7ba7bf1ae5d new file mode 100644 index 0000000000..12168fad63 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/73a186242b4539d1c42a4be1fea3e7ba7bf1ae5d differ diff --git a/fuzz/gnutls_client_fuzzer.in/7484a7e41dbe0ea279f242b3c32dea61c144ff79 b/fuzz/gnutls_client_fuzzer.in/7484a7e41dbe0ea279f242b3c32dea61c144ff79 new file mode 100644 index 0000000000..71b4675c7b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7484a7e41dbe0ea279f242b3c32dea61c144ff79 differ diff --git a/fuzz/gnutls_client_fuzzer.in/749e9594d408196d118a9654b02ebbdb93b18c9e b/fuzz/gnutls_client_fuzzer.in/749e9594d408196d118a9654b02ebbdb93b18c9e new file mode 100644 index 0000000000..e8ba4e1283 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/749e9594d408196d118a9654b02ebbdb93b18c9e differ diff --git a/fuzz/gnutls_client_fuzzer.in/75756acfd88f697fedcd9c2508dc602a550f585f b/fuzz/gnutls_client_fuzzer.in/75756acfd88f697fedcd9c2508dc602a550f585f new file mode 100644 index 0000000000..435247eff6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/75756acfd88f697fedcd9c2508dc602a550f585f differ diff --git a/fuzz/gnutls_client_fuzzer.in/7601b37df827ff699239b7bcfbd78503889336b2 b/fuzz/gnutls_client_fuzzer.in/7601b37df827ff699239b7bcfbd78503889336b2 new file mode 100644 index 0000000000..387ca17599 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7601b37df827ff699239b7bcfbd78503889336b2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/7660abfde3a6cf0770cbc6d22acad480b5b8eef9 b/fuzz/gnutls_client_fuzzer.in/7660abfde3a6cf0770cbc6d22acad480b5b8eef9 new file mode 100644 index 0000000000..6bb1e5462d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7660abfde3a6cf0770cbc6d22acad480b5b8eef9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/76a54e7f7c56bd56bb8e3a2c93eaafd33397b61b b/fuzz/gnutls_client_fuzzer.in/76a54e7f7c56bd56bb8e3a2c93eaafd33397b61b new file mode 100644 index 0000000000..2f761999e5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/76a54e7f7c56bd56bb8e3a2c93eaafd33397b61b differ diff --git a/fuzz/gnutls_client_fuzzer.in/76d7b2f7baeae04d9e1e5c02010ee2176d20323f b/fuzz/gnutls_client_fuzzer.in/76d7b2f7baeae04d9e1e5c02010ee2176d20323f new file mode 100644 index 0000000000..8e3e74d8d8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/76d7b2f7baeae04d9e1e5c02010ee2176d20323f differ diff --git a/fuzz/gnutls_client_fuzzer.in/76e60e0122d75b023f06c06383a45dbc5d6e39b8 b/fuzz/gnutls_client_fuzzer.in/76e60e0122d75b023f06c06383a45dbc5d6e39b8 new file mode 100644 index 0000000000..e716f3f205 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/76e60e0122d75b023f06c06383a45dbc5d6e39b8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/773c01bb78c9bc845c58bbe928bf4f5916cb92ad b/fuzz/gnutls_client_fuzzer.in/773c01bb78c9bc845c58bbe928bf4f5916cb92ad new file mode 100644 index 0000000000..785e6a4ef5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/773c01bb78c9bc845c58bbe928bf4f5916cb92ad differ diff --git a/fuzz/gnutls_client_fuzzer.in/775d5fd76d4b819a950f4dd461a2f23622b71d25 b/fuzz/gnutls_client_fuzzer.in/775d5fd76d4b819a950f4dd461a2f23622b71d25 new file mode 100644 index 0000000000..4092c54fd8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/775d5fd76d4b819a950f4dd461a2f23622b71d25 differ diff --git a/fuzz/gnutls_client_fuzzer.in/77905fcb55de37627b2f14a5cda9597cf8ee4d85 b/fuzz/gnutls_client_fuzzer.in/77905fcb55de37627b2f14a5cda9597cf8ee4d85 new file mode 100644 index 0000000000..7002affaa8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/77905fcb55de37627b2f14a5cda9597cf8ee4d85 differ diff --git a/fuzz/gnutls_client_fuzzer.in/78318559acef5f34950cc55a4f887534eb93967d b/fuzz/gnutls_client_fuzzer.in/78318559acef5f34950cc55a4f887534eb93967d new file mode 100644 index 0000000000..1a1c747f76 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/78318559acef5f34950cc55a4f887534eb93967d differ diff --git a/fuzz/gnutls_client_fuzzer.in/7845c0346028a9e4fcb7c6fe0daa9c63c3778008 b/fuzz/gnutls_client_fuzzer.in/7845c0346028a9e4fcb7c6fe0daa9c63c3778008 new file mode 100644 index 0000000000..74148f40fa Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7845c0346028a9e4fcb7c6fe0daa9c63c3778008 differ diff --git a/fuzz/gnutls_client_fuzzer.in/787547d313ac63abf408c2579a9f6d3c3b70d349 b/fuzz/gnutls_client_fuzzer.in/787547d313ac63abf408c2579a9f6d3c3b70d349 new file mode 100644 index 0000000000..35901ffd40 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/787547d313ac63abf408c2579a9f6d3c3b70d349 differ diff --git a/fuzz/gnutls_client_fuzzer.in/78d330c46e50c13cae9560065fa4cc7bcac8dcb3 b/fuzz/gnutls_client_fuzzer.in/78d330c46e50c13cae9560065fa4cc7bcac8dcb3 new file mode 100644 index 0000000000..81f1adc190 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/78d330c46e50c13cae9560065fa4cc7bcac8dcb3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/79641d4a41612fa4485f3d1a8cd6985799107839 b/fuzz/gnutls_client_fuzzer.in/79641d4a41612fa4485f3d1a8cd6985799107839 new file mode 100644 index 0000000000..4ac2a91007 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/79641d4a41612fa4485f3d1a8cd6985799107839 differ diff --git a/fuzz/gnutls_client_fuzzer.in/79f04f8bd441c10c53c017040d6d3ba0f54575fd b/fuzz/gnutls_client_fuzzer.in/79f04f8bd441c10c53c017040d6d3ba0f54575fd new file mode 100644 index 0000000000..7a59e82a36 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/79f04f8bd441c10c53c017040d6d3ba0f54575fd differ diff --git a/fuzz/gnutls_client_fuzzer.in/7a560184cfd0e6f09f97d5adcd4a161df8372b63 b/fuzz/gnutls_client_fuzzer.in/7a560184cfd0e6f09f97d5adcd4a161df8372b63 new file mode 100644 index 0000000000..4d2d1643db Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7a560184cfd0e6f09f97d5adcd4a161df8372b63 differ diff --git a/fuzz/gnutls_client_fuzzer.in/7a5bb76db1e6e3e163bac659ed46a2e4c9270ead b/fuzz/gnutls_client_fuzzer.in/7a5bb76db1e6e3e163bac659ed46a2e4c9270ead new file mode 100644 index 0000000000..7d941186d0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7a5bb76db1e6e3e163bac659ed46a2e4c9270ead differ diff --git a/fuzz/gnutls_client_fuzzer.in/7a93aaaab1a550f3111dda810b3f766c80513ad7 b/fuzz/gnutls_client_fuzzer.in/7a93aaaab1a550f3111dda810b3f766c80513ad7 new file mode 100644 index 0000000000..2740ce2eb8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7a93aaaab1a550f3111dda810b3f766c80513ad7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/7aa5a85cdfeafc0bb6f6f3a4dbe30f67dc6969db b/fuzz/gnutls_client_fuzzer.in/7aa5a85cdfeafc0bb6f6f3a4dbe30f67dc6969db new file mode 100644 index 0000000000..e49485594c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7aa5a85cdfeafc0bb6f6f3a4dbe30f67dc6969db differ diff --git a/fuzz/gnutls_client_fuzzer.in/7b5cb93a5ef97a8664c46ef31e4b6a9135ce4799 b/fuzz/gnutls_client_fuzzer.in/7b5cb93a5ef97a8664c46ef31e4b6a9135ce4799 new file mode 100644 index 0000000000..cc4a13c4fe Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7b5cb93a5ef97a8664c46ef31e4b6a9135ce4799 differ diff --git a/fuzz/gnutls_client_fuzzer.in/7bc9ebfaa7c11ea164ac824f44d26cdee287406e b/fuzz/gnutls_client_fuzzer.in/7bc9ebfaa7c11ea164ac824f44d26cdee287406e new file mode 100644 index 0000000000..b60b2bfba0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7bc9ebfaa7c11ea164ac824f44d26cdee287406e differ diff --git a/fuzz/gnutls_client_fuzzer.in/7cb948461d34f535c934a84d5bc451d7e704b244 b/fuzz/gnutls_client_fuzzer.in/7cb948461d34f535c934a84d5bc451d7e704b244 new file mode 100644 index 0000000000..a1d408695b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7cb948461d34f535c934a84d5bc451d7e704b244 differ diff --git a/fuzz/gnutls_client_fuzzer.in/7e30e0a4ccf896e24c4a650d68b44fb72f3bbb38 b/fuzz/gnutls_client_fuzzer.in/7e30e0a4ccf896e24c4a650d68b44fb72f3bbb38 new file mode 100644 index 0000000000..c2af46c891 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7e30e0a4ccf896e24c4a650d68b44fb72f3bbb38 differ diff --git a/fuzz/gnutls_client_fuzzer.in/7ebc08061e51a6fbfad100e67eb6b6677496274b b/fuzz/gnutls_client_fuzzer.in/7ebc08061e51a6fbfad100e67eb6b6677496274b new file mode 100644 index 0000000000..71701f606d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7ebc08061e51a6fbfad100e67eb6b6677496274b differ diff --git a/fuzz/gnutls_client_fuzzer.in/7efea891fa1d6445c06e3d4c9d13c63d951383d5 b/fuzz/gnutls_client_fuzzer.in/7efea891fa1d6445c06e3d4c9d13c63d951383d5 new file mode 100644 index 0000000000..0760312ee2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7efea891fa1d6445c06e3d4c9d13c63d951383d5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/7fb9e2ca3a1dc00ef444749fd714002e6f524cfc b/fuzz/gnutls_client_fuzzer.in/7fb9e2ca3a1dc00ef444749fd714002e6f524cfc new file mode 100644 index 0000000000..fcafa11dc8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/7fb9e2ca3a1dc00ef444749fd714002e6f524cfc differ diff --git a/fuzz/gnutls_client_fuzzer.in/808f0cdcb5d345a7c61b17a9e236b4d2c6e1ebb0 b/fuzz/gnutls_client_fuzzer.in/808f0cdcb5d345a7c61b17a9e236b4d2c6e1ebb0 new file mode 100644 index 0000000000..8143947ca6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/808f0cdcb5d345a7c61b17a9e236b4d2c6e1ebb0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8099110ceaf7dcc513aa6dccdd68467dfefa4d92 b/fuzz/gnutls_client_fuzzer.in/8099110ceaf7dcc513aa6dccdd68467dfefa4d92 new file mode 100644 index 0000000000..bd0f3bdc77 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8099110ceaf7dcc513aa6dccdd68467dfefa4d92 differ diff --git a/fuzz/gnutls_client_fuzzer.in/80bcb9231f1525a5ad92c81f78ef99c65a9b9a75 b/fuzz/gnutls_client_fuzzer.in/80bcb9231f1525a5ad92c81f78ef99c65a9b9a75 new file mode 100644 index 0000000000..2d886cf707 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/80bcb9231f1525a5ad92c81f78ef99c65a9b9a75 differ diff --git a/fuzz/gnutls_client_fuzzer.in/80c668ece8b4b505f0f7a2aa319f3b2f4e015084 b/fuzz/gnutls_client_fuzzer.in/80c668ece8b4b505f0f7a2aa319f3b2f4e015084 new file mode 100644 index 0000000000..a6aebafd97 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/80c668ece8b4b505f0f7a2aa319f3b2f4e015084 differ diff --git a/fuzz/gnutls_client_fuzzer.in/80d7f0229c4659bfade98fc81d60fc01ac7c033b b/fuzz/gnutls_client_fuzzer.in/80d7f0229c4659bfade98fc81d60fc01ac7c033b new file mode 100644 index 0000000000..c61bce5196 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/80d7f0229c4659bfade98fc81d60fc01ac7c033b differ diff --git a/fuzz/gnutls_client_fuzzer.in/81bf92815e401c53d6ecc50767dfe7adcd069f1b b/fuzz/gnutls_client_fuzzer.in/81bf92815e401c53d6ecc50767dfe7adcd069f1b new file mode 100644 index 0000000000..7f4ae5ada2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/81bf92815e401c53d6ecc50767dfe7adcd069f1b differ diff --git a/fuzz/gnutls_client_fuzzer.in/824922992f6ecc7716251903839bb0207aa07b81 b/fuzz/gnutls_client_fuzzer.in/824922992f6ecc7716251903839bb0207aa07b81 new file mode 100644 index 0000000000..07abe7c47d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/824922992f6ecc7716251903839bb0207aa07b81 differ diff --git a/fuzz/gnutls_client_fuzzer.in/82f6d8f577367ebae4ea359a31da25d8a40e3be0 b/fuzz/gnutls_client_fuzzer.in/82f6d8f577367ebae4ea359a31da25d8a40e3be0 new file mode 100644 index 0000000000..79498fc879 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/82f6d8f577367ebae4ea359a31da25d8a40e3be0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8372f0250e6a039b12c61e5c6423c19c03580a1e b/fuzz/gnutls_client_fuzzer.in/8372f0250e6a039b12c61e5c6423c19c03580a1e new file mode 100644 index 0000000000..8fdcbc5aa7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8372f0250e6a039b12c61e5c6423c19c03580a1e differ diff --git a/fuzz/gnutls_client_fuzzer.in/83bc0473e4b8728fbb5a6e4a290919a544848f15 b/fuzz/gnutls_client_fuzzer.in/83bc0473e4b8728fbb5a6e4a290919a544848f15 new file mode 100644 index 0000000000..173123282a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/83bc0473e4b8728fbb5a6e4a290919a544848f15 differ diff --git a/fuzz/gnutls_client_fuzzer.in/83ea2cc4be8a51dc374261d7cbc8dd8b646ab9ba b/fuzz/gnutls_client_fuzzer.in/83ea2cc4be8a51dc374261d7cbc8dd8b646ab9ba new file mode 100644 index 0000000000..bb24a748f7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/83ea2cc4be8a51dc374261d7cbc8dd8b646ab9ba differ diff --git a/fuzz/gnutls_client_fuzzer.in/846d7e8e966389b62560a11ca054143d605e3d9d b/fuzz/gnutls_client_fuzzer.in/846d7e8e966389b62560a11ca054143d605e3d9d new file mode 100644 index 0000000000..bee9057d77 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/846d7e8e966389b62560a11ca054143d605e3d9d differ diff --git a/fuzz/gnutls_client_fuzzer.in/85111d231a7e1ffcebc71fad2dfd5647bd82aca4 b/fuzz/gnutls_client_fuzzer.in/85111d231a7e1ffcebc71fad2dfd5647bd82aca4 new file mode 100644 index 0000000000..36f4e4b25b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/85111d231a7e1ffcebc71fad2dfd5647bd82aca4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/85216adb798f78cb40b1da51ceb0c9bdec6feec6 b/fuzz/gnutls_client_fuzzer.in/85216adb798f78cb40b1da51ceb0c9bdec6feec6 new file mode 100644 index 0000000000..df25c98320 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/85216adb798f78cb40b1da51ceb0c9bdec6feec6 differ diff --git a/fuzz/gnutls_client_fuzzer.in/85370c3eee32c31b36bcc8c5b9ba31605d8d471a b/fuzz/gnutls_client_fuzzer.in/85370c3eee32c31b36bcc8c5b9ba31605d8d471a new file mode 100644 index 0000000000..53432c5f42 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/85370c3eee32c31b36bcc8c5b9ba31605d8d471a differ diff --git a/fuzz/gnutls_client_fuzzer.in/8546c4f548d865ec891a75e3e4cf07d9f4b453e6 b/fuzz/gnutls_client_fuzzer.in/8546c4f548d865ec891a75e3e4cf07d9f4b453e6 new file mode 100644 index 0000000000..3e46399253 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8546c4f548d865ec891a75e3e4cf07d9f4b453e6 differ diff --git a/fuzz/gnutls_client_fuzzer.in/85a57205dfebaa5038bd3a45e9080e1cb7a6f373 b/fuzz/gnutls_client_fuzzer.in/85a57205dfebaa5038bd3a45e9080e1cb7a6f373 new file mode 100644 index 0000000000..318621942d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/85a57205dfebaa5038bd3a45e9080e1cb7a6f373 differ diff --git a/fuzz/gnutls_client_fuzzer.in/85ae725f276868e0da3ac4b882c1392323fd6d78 b/fuzz/gnutls_client_fuzzer.in/85ae725f276868e0da3ac4b882c1392323fd6d78 new file mode 100644 index 0000000000..f45af67120 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/85ae725f276868e0da3ac4b882c1392323fd6d78 differ diff --git a/fuzz/gnutls_client_fuzzer.in/85d74230ef6b8001d8c0a75d4c7093c9c3fba256 b/fuzz/gnutls_client_fuzzer.in/85d74230ef6b8001d8c0a75d4c7093c9c3fba256 new file mode 100644 index 0000000000..7da0ea4b8d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/85d74230ef6b8001d8c0a75d4c7093c9c3fba256 differ diff --git a/fuzz/gnutls_client_fuzzer.in/863511e34f9dbb709165919fd803cb302dd08699 b/fuzz/gnutls_client_fuzzer.in/863511e34f9dbb709165919fd803cb302dd08699 new file mode 100644 index 0000000000..5c0f6e6989 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/863511e34f9dbb709165919fd803cb302dd08699 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8675224b4056bfea2a9b06b33b5b8db3aa80c71d b/fuzz/gnutls_client_fuzzer.in/8675224b4056bfea2a9b06b33b5b8db3aa80c71d new file mode 100644 index 0000000000..a3d61e025c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8675224b4056bfea2a9b06b33b5b8db3aa80c71d differ diff --git a/fuzz/gnutls_client_fuzzer.in/87003f02d7e7d271d01a7ff4157eecf9b328f427 b/fuzz/gnutls_client_fuzzer.in/87003f02d7e7d271d01a7ff4157eecf9b328f427 new file mode 100644 index 0000000000..a116b4abe7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/87003f02d7e7d271d01a7ff4157eecf9b328f427 differ diff --git a/fuzz/gnutls_client_fuzzer.in/872340e19bc24f261cf78c7f64de7df0ba253e5a b/fuzz/gnutls_client_fuzzer.in/872340e19bc24f261cf78c7f64de7df0ba253e5a new file mode 100644 index 0000000000..4a46eca9c1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/872340e19bc24f261cf78c7f64de7df0ba253e5a differ diff --git a/fuzz/gnutls_client_fuzzer.in/8752a1cbd7f6540f78c5cb2cf572e1d013101045 b/fuzz/gnutls_client_fuzzer.in/8752a1cbd7f6540f78c5cb2cf572e1d013101045 new file mode 100644 index 0000000000..fa66320a22 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8752a1cbd7f6540f78c5cb2cf572e1d013101045 differ diff --git a/fuzz/gnutls_client_fuzzer.in/87e12e9fa03bf83d1d94afb0e2f4ea63dad0067a b/fuzz/gnutls_client_fuzzer.in/87e12e9fa03bf83d1d94afb0e2f4ea63dad0067a new file mode 100644 index 0000000000..4295610ca4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/87e12e9fa03bf83d1d94afb0e2f4ea63dad0067a differ diff --git a/fuzz/gnutls_client_fuzzer.in/88511b3f316058ed50a31a29320941366993960c b/fuzz/gnutls_client_fuzzer.in/88511b3f316058ed50a31a29320941366993960c new file mode 100644 index 0000000000..f8987749e4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/88511b3f316058ed50a31a29320941366993960c differ diff --git a/fuzz/gnutls_client_fuzzer.in/8851d76d133d1966ad34493d9720bdf951a6967c b/fuzz/gnutls_client_fuzzer.in/8851d76d133d1966ad34493d9720bdf951a6967c new file mode 100644 index 0000000000..3bf23bb5de Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8851d76d133d1966ad34493d9720bdf951a6967c differ diff --git a/fuzz/gnutls_client_fuzzer.in/8855866fb96c949b1482835a2176da0dd231c4dc b/fuzz/gnutls_client_fuzzer.in/8855866fb96c949b1482835a2176da0dd231c4dc new file mode 100644 index 0000000000..0ef0d21c37 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8855866fb96c949b1482835a2176da0dd231c4dc differ diff --git a/fuzz/gnutls_client_fuzzer.in/8884b5b4c9bd27485299c830246cf44d512a0991 b/fuzz/gnutls_client_fuzzer.in/8884b5b4c9bd27485299c830246cf44d512a0991 new file mode 100644 index 0000000000..bd3c0c77ec Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8884b5b4c9bd27485299c830246cf44d512a0991 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8908b15a12c0c0ad12867f0c1c1a982b374b56c7 b/fuzz/gnutls_client_fuzzer.in/8908b15a12c0c0ad12867f0c1c1a982b374b56c7 new file mode 100644 index 0000000000..d00d70f01e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8908b15a12c0c0ad12867f0c1c1a982b374b56c7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/891f8365e7b6211f67adcd514c3416bc4b2837c3 b/fuzz/gnutls_client_fuzzer.in/891f8365e7b6211f67adcd514c3416bc4b2837c3 new file mode 100644 index 0000000000..0a5921f483 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/891f8365e7b6211f67adcd514c3416bc4b2837c3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/893b8becaab22da6bf7a1391e977699bf31ddb35 b/fuzz/gnutls_client_fuzzer.in/893b8becaab22da6bf7a1391e977699bf31ddb35 new file mode 100644 index 0000000000..f4665f644e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/893b8becaab22da6bf7a1391e977699bf31ddb35 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8a0336adc8fa224f28dda9199ee57d44bd752d2f b/fuzz/gnutls_client_fuzzer.in/8a0336adc8fa224f28dda9199ee57d44bd752d2f new file mode 100644 index 0000000000..020d044bd2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8a0336adc8fa224f28dda9199ee57d44bd752d2f differ diff --git a/fuzz/gnutls_client_fuzzer.in/8a0a1acb4555bb71d629e16539f6d42236f8e784 b/fuzz/gnutls_client_fuzzer.in/8a0a1acb4555bb71d629e16539f6d42236f8e784 new file mode 100644 index 0000000000..ed5b593e40 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8a0a1acb4555bb71d629e16539f6d42236f8e784 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8a55592cdfdf1fb697534397e97b77d603fe5031 b/fuzz/gnutls_client_fuzzer.in/8a55592cdfdf1fb697534397e97b77d603fe5031 new file mode 100644 index 0000000000..75b30fdd0c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8a55592cdfdf1fb697534397e97b77d603fe5031 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8a9916b999ac70d6c6b32f1f2676f729a8b4f058 b/fuzz/gnutls_client_fuzzer.in/8a9916b999ac70d6c6b32f1f2676f729a8b4f058 new file mode 100644 index 0000000000..435c89b39f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8a9916b999ac70d6c6b32f1f2676f729a8b4f058 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8ad96c51ae9eba1576553b48f273aa1c8c309202 b/fuzz/gnutls_client_fuzzer.in/8ad96c51ae9eba1576553b48f273aa1c8c309202 new file mode 100644 index 0000000000..d1179cfd7c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8ad96c51ae9eba1576553b48f273aa1c8c309202 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8b65361079a1b66ebf4529a7c9aa203f838ec941 b/fuzz/gnutls_client_fuzzer.in/8b65361079a1b66ebf4529a7c9aa203f838ec941 new file mode 100644 index 0000000000..d2e4a7bbd0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8b65361079a1b66ebf4529a7c9aa203f838ec941 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8bc24f2d318fd8a23e521f92dd699b7bc0130155 b/fuzz/gnutls_client_fuzzer.in/8bc24f2d318fd8a23e521f92dd699b7bc0130155 new file mode 100644 index 0000000000..d19de2868d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8bc24f2d318fd8a23e521f92dd699b7bc0130155 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8bc60f90aea4d97d3ad268217a510423259d1906 b/fuzz/gnutls_client_fuzzer.in/8bc60f90aea4d97d3ad268217a510423259d1906 new file mode 100644 index 0000000000..738deea395 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8bc60f90aea4d97d3ad268217a510423259d1906 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8beeb46b3ddb2d407ddd9ce3a74765c0352047bf b/fuzz/gnutls_client_fuzzer.in/8beeb46b3ddb2d407ddd9ce3a74765c0352047bf new file mode 100644 index 0000000000..af64238641 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8beeb46b3ddb2d407ddd9ce3a74765c0352047bf differ diff --git a/fuzz/gnutls_client_fuzzer.in/8c1ebb1aa713954ca5e91e00c4770fbab6f157e4 b/fuzz/gnutls_client_fuzzer.in/8c1ebb1aa713954ca5e91e00c4770fbab6f157e4 new file mode 100644 index 0000000000..d90f89496c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8c1ebb1aa713954ca5e91e00c4770fbab6f157e4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8c2e5bf7cf55ce7e6706a8a10a1b41674288c2b9 b/fuzz/gnutls_client_fuzzer.in/8c2e5bf7cf55ce7e6706a8a10a1b41674288c2b9 new file mode 100644 index 0000000000..81946f1f94 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8c2e5bf7cf55ce7e6706a8a10a1b41674288c2b9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8c80bd1a091e6d4b349a84dbe63177260dbd9607 b/fuzz/gnutls_client_fuzzer.in/8c80bd1a091e6d4b349a84dbe63177260dbd9607 new file mode 100644 index 0000000000..3d03c967b8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8c80bd1a091e6d4b349a84dbe63177260dbd9607 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8cbc9c35398e9e4adf5d9ddb623dae7a03abcee0 b/fuzz/gnutls_client_fuzzer.in/8cbc9c35398e9e4adf5d9ddb623dae7a03abcee0 new file mode 100644 index 0000000000..6d430137bb Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8cbc9c35398e9e4adf5d9ddb623dae7a03abcee0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8cbdf59203690d9e060101ce37ffaa31e6eecdc4 b/fuzz/gnutls_client_fuzzer.in/8cbdf59203690d9e060101ce37ffaa31e6eecdc4 new file mode 100644 index 0000000000..0e16b917d3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8cbdf59203690d9e060101ce37ffaa31e6eecdc4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8cf4543fcafd8d1f4c927296b984176c80483aa5 b/fuzz/gnutls_client_fuzzer.in/8cf4543fcafd8d1f4c927296b984176c80483aa5 new file mode 100644 index 0000000000..07a48abff3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8cf4543fcafd8d1f4c927296b984176c80483aa5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8d4ef6dff2143cc4d4fa6ae5cabdd0e6aaa98536 b/fuzz/gnutls_client_fuzzer.in/8d4ef6dff2143cc4d4fa6ae5cabdd0e6aaa98536 new file mode 100644 index 0000000000..8aa525f0d8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8d4ef6dff2143cc4d4fa6ae5cabdd0e6aaa98536 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8dd69735ff68a6f654fb37deb8f48c4fc42a4f73 b/fuzz/gnutls_client_fuzzer.in/8dd69735ff68a6f654fb37deb8f48c4fc42a4f73 new file mode 100644 index 0000000000..b0e81a59f5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8dd69735ff68a6f654fb37deb8f48c4fc42a4f73 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8df34aba444e5ae4b19138ae8bb06e7838e45965 b/fuzz/gnutls_client_fuzzer.in/8df34aba444e5ae4b19138ae8bb06e7838e45965 new file mode 100644 index 0000000000..17c77c6963 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8df34aba444e5ae4b19138ae8bb06e7838e45965 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8e2cd300408928f1889b1de4e2b8d2e2b20b82c8 b/fuzz/gnutls_client_fuzzer.in/8e2cd300408928f1889b1de4e2b8d2e2b20b82c8 new file mode 100644 index 0000000000..0682fa1bcf Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8e2cd300408928f1889b1de4e2b8d2e2b20b82c8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8eeba5a371d851296f327cc3158b3f2aecc7cfec b/fuzz/gnutls_client_fuzzer.in/8eeba5a371d851296f327cc3158b3f2aecc7cfec new file mode 100644 index 0000000000..80c37bba8e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8eeba5a371d851296f327cc3158b3f2aecc7cfec differ diff --git a/fuzz/gnutls_client_fuzzer.in/8f3b7a78616c2163295f3b28eb43e9885650da0e b/fuzz/gnutls_client_fuzzer.in/8f3b7a78616c2163295f3b28eb43e9885650da0e new file mode 100644 index 0000000000..96c06677d8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8f3b7a78616c2163295f3b28eb43e9885650da0e differ diff --git a/fuzz/gnutls_client_fuzzer.in/8f626070ad82966a8b0d1cf5ddb3481d7764cbb7 b/fuzz/gnutls_client_fuzzer.in/8f626070ad82966a8b0d1cf5ddb3481d7764cbb7 new file mode 100644 index 0000000000..724331379e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8f626070ad82966a8b0d1cf5ddb3481d7764cbb7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/8fed3a0c8628590d2126f4d6057813cec305bbdd b/fuzz/gnutls_client_fuzzer.in/8fed3a0c8628590d2126f4d6057813cec305bbdd new file mode 100644 index 0000000000..367484c86f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/8fed3a0c8628590d2126f4d6057813cec305bbdd differ diff --git a/fuzz/gnutls_client_fuzzer.in/905c175ed2e0d33224fd540521c9c69b69a1493e b/fuzz/gnutls_client_fuzzer.in/905c175ed2e0d33224fd540521c9c69b69a1493e new file mode 100644 index 0000000000..ea24f39bd7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/905c175ed2e0d33224fd540521c9c69b69a1493e differ diff --git a/fuzz/gnutls_client_fuzzer.in/916f78a8ec904b30e25abb2d890e5f62a7cf38ce b/fuzz/gnutls_client_fuzzer.in/916f78a8ec904b30e25abb2d890e5f62a7cf38ce new file mode 100644 index 0000000000..0f5aa07b6c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/916f78a8ec904b30e25abb2d890e5f62a7cf38ce differ diff --git a/fuzz/gnutls_client_fuzzer.in/916ffbfc426123007c7e23b7f1cff28aeda8a3cb b/fuzz/gnutls_client_fuzzer.in/916ffbfc426123007c7e23b7f1cff28aeda8a3cb new file mode 100644 index 0000000000..a5b75936cf Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/916ffbfc426123007c7e23b7f1cff28aeda8a3cb differ diff --git a/fuzz/gnutls_client_fuzzer.in/91a3672535495bc09a41671c78afd52b893e1213 b/fuzz/gnutls_client_fuzzer.in/91a3672535495bc09a41671c78afd52b893e1213 new file mode 100644 index 0000000000..39b66d08ad Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/91a3672535495bc09a41671c78afd52b893e1213 differ diff --git a/fuzz/gnutls_client_fuzzer.in/91b944f5e404de820f700d2bb5478c07acd41349 b/fuzz/gnutls_client_fuzzer.in/91b944f5e404de820f700d2bb5478c07acd41349 new file mode 100644 index 0000000000..f96fa747d4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/91b944f5e404de820f700d2bb5478c07acd41349 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9270ee0c3bcbd95810d636af1a24ad986a7b4ef2 b/fuzz/gnutls_client_fuzzer.in/9270ee0c3bcbd95810d636af1a24ad986a7b4ef2 new file mode 100644 index 0000000000..04638ed92d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9270ee0c3bcbd95810d636af1a24ad986a7b4ef2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/92fb2774c1361fb084180642b07d030b5fc543b4 b/fuzz/gnutls_client_fuzzer.in/92fb2774c1361fb084180642b07d030b5fc543b4 new file mode 100644 index 0000000000..4e28b56b70 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/92fb2774c1361fb084180642b07d030b5fc543b4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/93adcd37f1241adbc23c3886de99d34371623502 b/fuzz/gnutls_client_fuzzer.in/93adcd37f1241adbc23c3886de99d34371623502 new file mode 100644 index 0000000000..cd0b0e5ba8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/93adcd37f1241adbc23c3886de99d34371623502 differ diff --git a/fuzz/gnutls_client_fuzzer.in/93e6ec52e0c57414bb90ed48a42a82d8cd3e0e3d b/fuzz/gnutls_client_fuzzer.in/93e6ec52e0c57414bb90ed48a42a82d8cd3e0e3d new file mode 100644 index 0000000000..5aec7cceff Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/93e6ec52e0c57414bb90ed48a42a82d8cd3e0e3d differ diff --git a/fuzz/gnutls_client_fuzzer.in/9432499389ee047ecd2a49ef31d35a68d8514819 b/fuzz/gnutls_client_fuzzer.in/9432499389ee047ecd2a49ef31d35a68d8514819 new file mode 100644 index 0000000000..0080d6fbab Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9432499389ee047ecd2a49ef31d35a68d8514819 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9482192e5a194d4ce8ba42b6bbf57d8cdff937d2 b/fuzz/gnutls_client_fuzzer.in/9482192e5a194d4ce8ba42b6bbf57d8cdff937d2 new file mode 100644 index 0000000000..4e8a430850 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9482192e5a194d4ce8ba42b6bbf57d8cdff937d2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9491170eb19023207430868054c0849675a5a6b5 b/fuzz/gnutls_client_fuzzer.in/9491170eb19023207430868054c0849675a5a6b5 new file mode 100644 index 0000000000..ac297a564a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9491170eb19023207430868054c0849675a5a6b5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/94d308e19a7df3c00a21051792a64422c7795ae4 b/fuzz/gnutls_client_fuzzer.in/94d308e19a7df3c00a21051792a64422c7795ae4 new file mode 100644 index 0000000000..284da63d40 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/94d308e19a7df3c00a21051792a64422c7795ae4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/94da7efb56164605aaeef64dec787ab683cb9a1b b/fuzz/gnutls_client_fuzzer.in/94da7efb56164605aaeef64dec787ab683cb9a1b new file mode 100644 index 0000000000..89d3126a2d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/94da7efb56164605aaeef64dec787ab683cb9a1b differ diff --git a/fuzz/gnutls_client_fuzzer.in/94ebffe2425a547db1f803412e47846b8ee52227 b/fuzz/gnutls_client_fuzzer.in/94ebffe2425a547db1f803412e47846b8ee52227 new file mode 100644 index 0000000000..0c63a1186a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/94ebffe2425a547db1f803412e47846b8ee52227 differ diff --git a/fuzz/gnutls_client_fuzzer.in/953fcd9fb85ad6915e674c615916dc53214c1de0 b/fuzz/gnutls_client_fuzzer.in/953fcd9fb85ad6915e674c615916dc53214c1de0 new file mode 100644 index 0000000000..9f9fd0497d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/953fcd9fb85ad6915e674c615916dc53214c1de0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9557e659c7a7a0604d13aad7e29410a372a70632 b/fuzz/gnutls_client_fuzzer.in/9557e659c7a7a0604d13aad7e29410a372a70632 new file mode 100644 index 0000000000..1315c39739 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9557e659c7a7a0604d13aad7e29410a372a70632 differ diff --git a/fuzz/gnutls_client_fuzzer.in/95ec9e68a2135e9560a835933a2f679920bc76d9 b/fuzz/gnutls_client_fuzzer.in/95ec9e68a2135e9560a835933a2f679920bc76d9 new file mode 100644 index 0000000000..35ae18a216 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/95ec9e68a2135e9560a835933a2f679920bc76d9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/96117345f1e5dd90ccabdcdd93a03b8cd9f8a1fa b/fuzz/gnutls_client_fuzzer.in/96117345f1e5dd90ccabdcdd93a03b8cd9f8a1fa new file mode 100644 index 0000000000..d3c0e4757f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/96117345f1e5dd90ccabdcdd93a03b8cd9f8a1fa differ diff --git a/fuzz/gnutls_client_fuzzer.in/96578aeb04011123b758f2b7007c4d219d50be0c b/fuzz/gnutls_client_fuzzer.in/96578aeb04011123b758f2b7007c4d219d50be0c new file mode 100644 index 0000000000..dfb8a8a251 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/96578aeb04011123b758f2b7007c4d219d50be0c differ diff --git a/fuzz/gnutls_client_fuzzer.in/96bc078ea9678fdd27952d5c07f84f85c37d56fc b/fuzz/gnutls_client_fuzzer.in/96bc078ea9678fdd27952d5c07f84f85c37d56fc new file mode 100644 index 0000000000..dd44f62ef4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/96bc078ea9678fdd27952d5c07f84f85c37d56fc differ diff --git a/fuzz/gnutls_client_fuzzer.in/96c552adcacf4108c319533ea61c33f4240ad0fd b/fuzz/gnutls_client_fuzzer.in/96c552adcacf4108c319533ea61c33f4240ad0fd new file mode 100644 index 0000000000..feceb0a220 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/96c552adcacf4108c319533ea61c33f4240ad0fd differ diff --git a/fuzz/gnutls_client_fuzzer.in/9723e836b44e4c425f6f9c65323df29ad5856b45 b/fuzz/gnutls_client_fuzzer.in/9723e836b44e4c425f6f9c65323df29ad5856b45 new file mode 100644 index 0000000000..4f25daebc1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9723e836b44e4c425f6f9c65323df29ad5856b45 differ diff --git a/fuzz/gnutls_client_fuzzer.in/97a9f0b6d1383e9b0fbad2779ef55008436b4013 b/fuzz/gnutls_client_fuzzer.in/97a9f0b6d1383e9b0fbad2779ef55008436b4013 new file mode 100644 index 0000000000..586db3e9bc Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/97a9f0b6d1383e9b0fbad2779ef55008436b4013 differ diff --git a/fuzz/gnutls_client_fuzzer.in/97ccef5b05112897d66e1649779a35f3f89d7b3f b/fuzz/gnutls_client_fuzzer.in/97ccef5b05112897d66e1649779a35f3f89d7b3f new file mode 100644 index 0000000000..3d2584b95a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/97ccef5b05112897d66e1649779a35f3f89d7b3f differ diff --git a/fuzz/gnutls_client_fuzzer.in/985969c9cf0b9257916025154334418130ed0977 b/fuzz/gnutls_client_fuzzer.in/985969c9cf0b9257916025154334418130ed0977 new file mode 100644 index 0000000000..0dfa125bb7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/985969c9cf0b9257916025154334418130ed0977 differ diff --git a/fuzz/gnutls_client_fuzzer.in/986045a1761c17084fd770644b0b5391d6481f3f b/fuzz/gnutls_client_fuzzer.in/986045a1761c17084fd770644b0b5391d6481f3f new file mode 100644 index 0000000000..fecbaaa6ec Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/986045a1761c17084fd770644b0b5391d6481f3f differ diff --git a/fuzz/gnutls_client_fuzzer.in/98b1673e7ea6db4c55348efd7285a75ebb730bcd b/fuzz/gnutls_client_fuzzer.in/98b1673e7ea6db4c55348efd7285a75ebb730bcd new file mode 100644 index 0000000000..3c4e11d261 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/98b1673e7ea6db4c55348efd7285a75ebb730bcd differ diff --git a/fuzz/gnutls_client_fuzzer.in/98f65866a3ff2162b3884532c7ec7fe5b841087c b/fuzz/gnutls_client_fuzzer.in/98f65866a3ff2162b3884532c7ec7fe5b841087c new file mode 100644 index 0000000000..d261bad8d8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/98f65866a3ff2162b3884532c7ec7fe5b841087c differ diff --git a/fuzz/gnutls_client_fuzzer.in/9af41272612bf46f56040e118f6d641725053909 b/fuzz/gnutls_client_fuzzer.in/9af41272612bf46f56040e118f6d641725053909 new file mode 100644 index 0000000000..166f137c25 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9af41272612bf46f56040e118f6d641725053909 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9b19b9b71cb11f4fb01c8c185727057d1ae3dfc5 b/fuzz/gnutls_client_fuzzer.in/9b19b9b71cb11f4fb01c8c185727057d1ae3dfc5 new file mode 100644 index 0000000000..3a656a267e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9b19b9b71cb11f4fb01c8c185727057d1ae3dfc5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9b6d539f6eb0ab75be6ac5451be7accd833dfc4d b/fuzz/gnutls_client_fuzzer.in/9b6d539f6eb0ab75be6ac5451be7accd833dfc4d new file mode 100644 index 0000000000..b8b17db396 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9b6d539f6eb0ab75be6ac5451be7accd833dfc4d differ diff --git a/fuzz/gnutls_client_fuzzer.in/9b7738312ea660cf60d9febb8f1c5aacabc41bf8 b/fuzz/gnutls_client_fuzzer.in/9b7738312ea660cf60d9febb8f1c5aacabc41bf8 new file mode 100644 index 0000000000..738df32fdf Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9b7738312ea660cf60d9febb8f1c5aacabc41bf8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9b7b66c5ff9a47683bd0cd2ebb102107c9aec341 b/fuzz/gnutls_client_fuzzer.in/9b7b66c5ff9a47683bd0cd2ebb102107c9aec341 new file mode 100644 index 0000000000..bab3857229 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9b7b66c5ff9a47683bd0cd2ebb102107c9aec341 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9b9e8389769b7e81e71f7e47ae64d04eeec688bf b/fuzz/gnutls_client_fuzzer.in/9b9e8389769b7e81e71f7e47ae64d04eeec688bf new file mode 100644 index 0000000000..72d5d7dda3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9b9e8389769b7e81e71f7e47ae64d04eeec688bf differ diff --git a/fuzz/gnutls_client_fuzzer.in/9bfac538c232f09ab603fa84c6037129c89669c6 b/fuzz/gnutls_client_fuzzer.in/9bfac538c232f09ab603fa84c6037129c89669c6 new file mode 100644 index 0000000000..41d5926395 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9bfac538c232f09ab603fa84c6037129c89669c6 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9cb26a0112d228a8ddebc46ae26e6b7856db4354 b/fuzz/gnutls_client_fuzzer.in/9cb26a0112d228a8ddebc46ae26e6b7856db4354 new file mode 100644 index 0000000000..0bc259a237 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9cb26a0112d228a8ddebc46ae26e6b7856db4354 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9cb7cff3984368ee9ed9c3207139d71445a7246e b/fuzz/gnutls_client_fuzzer.in/9cb7cff3984368ee9ed9c3207139d71445a7246e new file mode 100644 index 0000000000..5a5d137f0b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9cb7cff3984368ee9ed9c3207139d71445a7246e differ diff --git a/fuzz/gnutls_client_fuzzer.in/9cdb4c7edfdf052fc88cd6520502640a9c7fc132 b/fuzz/gnutls_client_fuzzer.in/9cdb4c7edfdf052fc88cd6520502640a9c7fc132 new file mode 100644 index 0000000000..754547632e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9cdb4c7edfdf052fc88cd6520502640a9c7fc132 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9d7269361817a32751f59dcbdc3cac7f75376717 b/fuzz/gnutls_client_fuzzer.in/9d7269361817a32751f59dcbdc3cac7f75376717 new file mode 100644 index 0000000000..bfd0f9277e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9d7269361817a32751f59dcbdc3cac7f75376717 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9dbdc6e2160380448b43f36a4b91260a05894c9f b/fuzz/gnutls_client_fuzzer.in/9dbdc6e2160380448b43f36a4b91260a05894c9f new file mode 100644 index 0000000000..4c9eedec36 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9dbdc6e2160380448b43f36a4b91260a05894c9f differ diff --git a/fuzz/gnutls_client_fuzzer.in/9f15d3003548797e77b5b78d9ef4ebd282310144 b/fuzz/gnutls_client_fuzzer.in/9f15d3003548797e77b5b78d9ef4ebd282310144 new file mode 100644 index 0000000000..177656571a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9f15d3003548797e77b5b78d9ef4ebd282310144 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9f1d05f04bd4190fb702a9971105969459ced897 b/fuzz/gnutls_client_fuzzer.in/9f1d05f04bd4190fb702a9971105969459ced897 new file mode 100644 index 0000000000..7d318631e9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9f1d05f04bd4190fb702a9971105969459ced897 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9f1e3847f1802cbeec14b1dcc845917a43cf983b b/fuzz/gnutls_client_fuzzer.in/9f1e3847f1802cbeec14b1dcc845917a43cf983b new file mode 100644 index 0000000000..1566aa4433 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9f1e3847f1802cbeec14b1dcc845917a43cf983b differ diff --git a/fuzz/gnutls_client_fuzzer.in/9f25e4687be9699ca3d0cdc2dcbf96395d3a06e8 b/fuzz/gnutls_client_fuzzer.in/9f25e4687be9699ca3d0cdc2dcbf96395d3a06e8 new file mode 100644 index 0000000000..c60abbc848 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9f25e4687be9699ca3d0cdc2dcbf96395d3a06e8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/9f4af224a65e613cd9a25df390b8395d89389be8 b/fuzz/gnutls_client_fuzzer.in/9f4af224a65e613cd9a25df390b8395d89389be8 new file mode 100644 index 0000000000..c684b6757c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/9f4af224a65e613cd9a25df390b8395d89389be8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a02e74023f273964643be2308aacc770e18c17b7 b/fuzz/gnutls_client_fuzzer.in/a02e74023f273964643be2308aacc770e18c17b7 new file mode 100644 index 0000000000..d7b7aebd4d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a02e74023f273964643be2308aacc770e18c17b7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a0b0139a6d748db514b7c7381ff3bf1957586161 b/fuzz/gnutls_client_fuzzer.in/a0b0139a6d748db514b7c7381ff3bf1957586161 new file mode 100644 index 0000000000..b76fd6808a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a0b0139a6d748db514b7c7381ff3bf1957586161 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a0f805058459e3f3193f36d75b270858a499a5d7 b/fuzz/gnutls_client_fuzzer.in/a0f805058459e3f3193f36d75b270858a499a5d7 new file mode 100644 index 0000000000..68294e7a27 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a0f805058459e3f3193f36d75b270858a499a5d7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a11fd67ce7958aee038eef44b316da246fd556e8 b/fuzz/gnutls_client_fuzzer.in/a11fd67ce7958aee038eef44b316da246fd556e8 new file mode 100644 index 0000000000..19a0ba315f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a11fd67ce7958aee038eef44b316da246fd556e8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a16eb0db9e0ed1ed879e7080d1026bbfbf0c5346 b/fuzz/gnutls_client_fuzzer.in/a16eb0db9e0ed1ed879e7080d1026bbfbf0c5346 new file mode 100644 index 0000000000..0d831edb49 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a16eb0db9e0ed1ed879e7080d1026bbfbf0c5346 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a18751c36cbb007c1c9dd9b4e3afe281f11ecdd8 b/fuzz/gnutls_client_fuzzer.in/a18751c36cbb007c1c9dd9b4e3afe281f11ecdd8 new file mode 100644 index 0000000000..c84f0d158e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a18751c36cbb007c1c9dd9b4e3afe281f11ecdd8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a2388f0b03dfefd3d6bc497b7caa947bccda10a2 b/fuzz/gnutls_client_fuzzer.in/a2388f0b03dfefd3d6bc497b7caa947bccda10a2 new file mode 100644 index 0000000000..66fbbe039d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a2388f0b03dfefd3d6bc497b7caa947bccda10a2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a23b374bb8ca056733cf66fb5e75e3ce9629c2c1 b/fuzz/gnutls_client_fuzzer.in/a23b374bb8ca056733cf66fb5e75e3ce9629c2c1 new file mode 100644 index 0000000000..8a6e192e9e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a23b374bb8ca056733cf66fb5e75e3ce9629c2c1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a2473f695f3cdb4468cd932ca7a4e3267214d573 b/fuzz/gnutls_client_fuzzer.in/a2473f695f3cdb4468cd932ca7a4e3267214d573 new file mode 100644 index 0000000000..129da1dc32 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a2473f695f3cdb4468cd932ca7a4e3267214d573 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a2a22ffa6d1624b4c81335c871effeac03df5bb8 b/fuzz/gnutls_client_fuzzer.in/a2a22ffa6d1624b4c81335c871effeac03df5bb8 new file mode 100644 index 0000000000..3e320350db Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a2a22ffa6d1624b4c81335c871effeac03df5bb8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a2b6691e26f8ac81dac1573c9f8230f20bb748cb b/fuzz/gnutls_client_fuzzer.in/a2b6691e26f8ac81dac1573c9f8230f20bb748cb new file mode 100644 index 0000000000..7fd7bd922c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a2b6691e26f8ac81dac1573c9f8230f20bb748cb differ diff --git a/fuzz/gnutls_client_fuzzer.in/a321d1528f3ba698f5612e3f88f1bd296983dd47 b/fuzz/gnutls_client_fuzzer.in/a321d1528f3ba698f5612e3f88f1bd296983dd47 new file mode 100644 index 0000000000..90789ab4d2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a321d1528f3ba698f5612e3f88f1bd296983dd47 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a34f4ae45b32595aaeecc8dde0c765f057ec48f7 b/fuzz/gnutls_client_fuzzer.in/a34f4ae45b32595aaeecc8dde0c765f057ec48f7 new file mode 100644 index 0000000000..5bf3e5eb3b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a34f4ae45b32595aaeecc8dde0c765f057ec48f7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a4e705b04936da52a6e8e9c46b26d6dad74164de b/fuzz/gnutls_client_fuzzer.in/a4e705b04936da52a6e8e9c46b26d6dad74164de new file mode 100644 index 0000000000..02e0ec58da Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a4e705b04936da52a6e8e9c46b26d6dad74164de differ diff --git a/fuzz/gnutls_client_fuzzer.in/a50ce809d4954175e6a6849b99c6bc596112ee8c b/fuzz/gnutls_client_fuzzer.in/a50ce809d4954175e6a6849b99c6bc596112ee8c new file mode 100644 index 0000000000..1526205714 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a50ce809d4954175e6a6849b99c6bc596112ee8c differ diff --git a/fuzz/gnutls_client_fuzzer.in/a53eca1a6d7950a189d27523b77c84e82833ced8 b/fuzz/gnutls_client_fuzzer.in/a53eca1a6d7950a189d27523b77c84e82833ced8 new file mode 100644 index 0000000000..f03c81c3e6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a53eca1a6d7950a189d27523b77c84e82833ced8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a5c4803fa8648b3b3f3dc7835740d99d797a5ed2 b/fuzz/gnutls_client_fuzzer.in/a5c4803fa8648b3b3f3dc7835740d99d797a5ed2 new file mode 100644 index 0000000000..a3fd44e14f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a5c4803fa8648b3b3f3dc7835740d99d797a5ed2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a630e52bdb8247314fee773b685235458ddbe9cf b/fuzz/gnutls_client_fuzzer.in/a630e52bdb8247314fee773b685235458ddbe9cf new file mode 100644 index 0000000000..dcd23f3748 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a630e52bdb8247314fee773b685235458ddbe9cf differ diff --git a/fuzz/gnutls_client_fuzzer.in/a63e5f405c0cb225177b52cb75d6052eb0e84a69 b/fuzz/gnutls_client_fuzzer.in/a63e5f405c0cb225177b52cb75d6052eb0e84a69 new file mode 100644 index 0000000000..c29f17da9b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a63e5f405c0cb225177b52cb75d6052eb0e84a69 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a64e8d85162f7fad2cdf250841615d5907181952 b/fuzz/gnutls_client_fuzzer.in/a64e8d85162f7fad2cdf250841615d5907181952 new file mode 100644 index 0000000000..dff7fd3ddf Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a64e8d85162f7fad2cdf250841615d5907181952 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a6ae47f4f1410dde2bd48a6813fb879cd7c01027 b/fuzz/gnutls_client_fuzzer.in/a6ae47f4f1410dde2bd48a6813fb879cd7c01027 new file mode 100644 index 0000000000..6985b6ef46 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a6ae47f4f1410dde2bd48a6813fb879cd7c01027 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a700752f04200963c8212444075458894b2b79c0 b/fuzz/gnutls_client_fuzzer.in/a700752f04200963c8212444075458894b2b79c0 new file mode 100644 index 0000000000..583c123d3a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a700752f04200963c8212444075458894b2b79c0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a71ecaebaf7d6a5bdb3f256a9bd7eec28cbe8b96 b/fuzz/gnutls_client_fuzzer.in/a71ecaebaf7d6a5bdb3f256a9bd7eec28cbe8b96 new file mode 100644 index 0000000000..21732b2253 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a71ecaebaf7d6a5bdb3f256a9bd7eec28cbe8b96 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a731632d4535e0c533a1dea05cb94dd5c052bb66 b/fuzz/gnutls_client_fuzzer.in/a731632d4535e0c533a1dea05cb94dd5c052bb66 new file mode 100644 index 0000000000..1d60a17d8c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a731632d4535e0c533a1dea05cb94dd5c052bb66 differ diff --git a/fuzz/gnutls_client_fuzzer.in/a767843cf75f95db1a48c928b14f162d6cd5384f b/fuzz/gnutls_client_fuzzer.in/a767843cf75f95db1a48c928b14f162d6cd5384f new file mode 100644 index 0000000000..a5e8c7c2e8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a767843cf75f95db1a48c928b14f162d6cd5384f differ diff --git a/fuzz/gnutls_client_fuzzer.in/a8c51c73d73943f940aa2da56236e0ded87daa20 b/fuzz/gnutls_client_fuzzer.in/a8c51c73d73943f940aa2da56236e0ded87daa20 new file mode 100644 index 0000000000..caeb67713d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/a8c51c73d73943f940aa2da56236e0ded87daa20 differ diff --git a/fuzz/gnutls_client_fuzzer.in/aa0b71049251330832eb9fa387c314021ce1b225 b/fuzz/gnutls_client_fuzzer.in/aa0b71049251330832eb9fa387c314021ce1b225 new file mode 100644 index 0000000000..bd72b74253 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/aa0b71049251330832eb9fa387c314021ce1b225 differ diff --git a/fuzz/gnutls_client_fuzzer.in/aa2832fe05063ed6ede2caae80447cd3578678b3 b/fuzz/gnutls_client_fuzzer.in/aa2832fe05063ed6ede2caae80447cd3578678b3 new file mode 100644 index 0000000000..663243312b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/aa2832fe05063ed6ede2caae80447cd3578678b3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/aa97f0b65273783e08ad6e2c8bf45874e1b8021a b/fuzz/gnutls_client_fuzzer.in/aa97f0b65273783e08ad6e2c8bf45874e1b8021a new file mode 100644 index 0000000000..875700fe9a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/aa97f0b65273783e08ad6e2c8bf45874e1b8021a differ diff --git a/fuzz/gnutls_client_fuzzer.in/aad2c250aba1e8f9972b3c8e2fe145bfbd6da3ec b/fuzz/gnutls_client_fuzzer.in/aad2c250aba1e8f9972b3c8e2fe145bfbd6da3ec new file mode 100644 index 0000000000..f5486121df Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/aad2c250aba1e8f9972b3c8e2fe145bfbd6da3ec differ diff --git a/fuzz/gnutls_client_fuzzer.in/aafdf45499389f9da8767110a2056f59bf6edbff b/fuzz/gnutls_client_fuzzer.in/aafdf45499389f9da8767110a2056f59bf6edbff new file mode 100644 index 0000000000..e7548e96ba Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/aafdf45499389f9da8767110a2056f59bf6edbff differ diff --git a/fuzz/gnutls_client_fuzzer.in/ab0f351352015c6d128d8b1787994433911eefd4 b/fuzz/gnutls_client_fuzzer.in/ab0f351352015c6d128d8b1787994433911eefd4 new file mode 100644 index 0000000000..d15c0717fb Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ab0f351352015c6d128d8b1787994433911eefd4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ab70a2948bd688f83349837d23028c387b73b2af b/fuzz/gnutls_client_fuzzer.in/ab70a2948bd688f83349837d23028c387b73b2af new file mode 100644 index 0000000000..f1232573ea Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ab70a2948bd688f83349837d23028c387b73b2af differ diff --git a/fuzz/gnutls_client_fuzzer.in/abb3ce6b012468c2a746578fcdbba32b88759c03 b/fuzz/gnutls_client_fuzzer.in/abb3ce6b012468c2a746578fcdbba32b88759c03 new file mode 100644 index 0000000000..ed14a647bf Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/abb3ce6b012468c2a746578fcdbba32b88759c03 differ diff --git a/fuzz/gnutls_client_fuzzer.in/abecb1c18cdd7cc60d8b904e3daaadb36fd7eb91 b/fuzz/gnutls_client_fuzzer.in/abecb1c18cdd7cc60d8b904e3daaadb36fd7eb91 new file mode 100644 index 0000000000..8bf6d2135e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/abecb1c18cdd7cc60d8b904e3daaadb36fd7eb91 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ac276bab84c75e6aee384cad78015e83dffabf67 b/fuzz/gnutls_client_fuzzer.in/ac276bab84c75e6aee384cad78015e83dffabf67 new file mode 100644 index 0000000000..cfd53006f3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ac276bab84c75e6aee384cad78015e83dffabf67 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ac620fba5f6f3ce0b3dcb9360b0fc866e4445839 b/fuzz/gnutls_client_fuzzer.in/ac620fba5f6f3ce0b3dcb9360b0fc866e4445839 new file mode 100644 index 0000000000..5b0ec5b280 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ac620fba5f6f3ce0b3dcb9360b0fc866e4445839 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ac95698ff4c424c94f99de2685612f610b5d6003 b/fuzz/gnutls_client_fuzzer.in/ac95698ff4c424c94f99de2685612f610b5d6003 new file mode 100644 index 0000000000..86ac82cd3d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ac95698ff4c424c94f99de2685612f610b5d6003 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ac99d37c80c5267b7a8ad48bd43de7172b03fcb3 b/fuzz/gnutls_client_fuzzer.in/ac99d37c80c5267b7a8ad48bd43de7172b03fcb3 new file mode 100644 index 0000000000..8c20f4247c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ac99d37c80c5267b7a8ad48bd43de7172b03fcb3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ad10722e49a51165fb43aeaf0e140aa400ac2f6a b/fuzz/gnutls_client_fuzzer.in/ad10722e49a51165fb43aeaf0e140aa400ac2f6a new file mode 100644 index 0000000000..da588d75b5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ad10722e49a51165fb43aeaf0e140aa400ac2f6a differ diff --git a/fuzz/gnutls_client_fuzzer.in/adbe5e5b96a4f19ec8b1701efc92f0a036a60712 b/fuzz/gnutls_client_fuzzer.in/adbe5e5b96a4f19ec8b1701efc92f0a036a60712 new file mode 100644 index 0000000000..96fa11c869 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/adbe5e5b96a4f19ec8b1701efc92f0a036a60712 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ae771e33af970309909d7f343ad63ac50bc22e7c b/fuzz/gnutls_client_fuzzer.in/ae771e33af970309909d7f343ad63ac50bc22e7c new file mode 100644 index 0000000000..f75ca0fb35 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ae771e33af970309909d7f343ad63ac50bc22e7c differ diff --git a/fuzz/gnutls_client_fuzzer.in/aefb63c75f8b6dff678fed85713b9d2c6b611dda b/fuzz/gnutls_client_fuzzer.in/aefb63c75f8b6dff678fed85713b9d2c6b611dda new file mode 100644 index 0000000000..ad4d50546c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/aefb63c75f8b6dff678fed85713b9d2c6b611dda differ diff --git a/fuzz/gnutls_client_fuzzer.in/aeffeac04eeb2c4c6c16aa16696b4a8728149423 b/fuzz/gnutls_client_fuzzer.in/aeffeac04eeb2c4c6c16aa16696b4a8728149423 new file mode 100644 index 0000000000..2500dc4d9a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/aeffeac04eeb2c4c6c16aa16696b4a8728149423 differ diff --git a/fuzz/gnutls_client_fuzzer.in/af192dc513447069569ae7876e98b9b1eca37ec5 b/fuzz/gnutls_client_fuzzer.in/af192dc513447069569ae7876e98b9b1eca37ec5 new file mode 100644 index 0000000000..fa31de095d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/af192dc513447069569ae7876e98b9b1eca37ec5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/af2942e97cc28b868704328b11e2a023640f2258 b/fuzz/gnutls_client_fuzzer.in/af2942e97cc28b868704328b11e2a023640f2258 new file mode 100644 index 0000000000..6748ffb92c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/af2942e97cc28b868704328b11e2a023640f2258 differ diff --git a/fuzz/gnutls_client_fuzzer.in/af48d0e498509822ec49e25ac4470b1dc77924cd b/fuzz/gnutls_client_fuzzer.in/af48d0e498509822ec49e25ac4470b1dc77924cd new file mode 100644 index 0000000000..5a65aef451 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/af48d0e498509822ec49e25ac4470b1dc77924cd differ diff --git a/fuzz/gnutls_client_fuzzer.in/af5f925933be5150e165b9b3ec4eeaaf1ef3c4a6 b/fuzz/gnutls_client_fuzzer.in/af5f925933be5150e165b9b3ec4eeaaf1ef3c4a6 new file mode 100644 index 0000000000..2f1228db01 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/af5f925933be5150e165b9b3ec4eeaaf1ef3c4a6 differ diff --git a/fuzz/gnutls_client_fuzzer.in/afda73dde0f609445d821fef6e6431f961fe5d49 b/fuzz/gnutls_client_fuzzer.in/afda73dde0f609445d821fef6e6431f961fe5d49 new file mode 100644 index 0000000000..71d12e1de3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/afda73dde0f609445d821fef6e6431f961fe5d49 differ diff --git a/fuzz/gnutls_client_fuzzer.in/aff90dfc9d3bcde57c409cae928e17eddd7299dd b/fuzz/gnutls_client_fuzzer.in/aff90dfc9d3bcde57c409cae928e17eddd7299dd new file mode 100644 index 0000000000..a20edf737b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/aff90dfc9d3bcde57c409cae928e17eddd7299dd differ diff --git a/fuzz/gnutls_client_fuzzer.in/b06a26736029b55f436f584ecfbf284fd96dac2f b/fuzz/gnutls_client_fuzzer.in/b06a26736029b55f436f584ecfbf284fd96dac2f new file mode 100644 index 0000000000..efb91c7fb3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b06a26736029b55f436f584ecfbf284fd96dac2f differ diff --git a/fuzz/gnutls_client_fuzzer.in/b08d64b8eb8901d2dc525c0eba27032d39dfac48 b/fuzz/gnutls_client_fuzzer.in/b08d64b8eb8901d2dc525c0eba27032d39dfac48 new file mode 100644 index 0000000000..ce037eff8c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b08d64b8eb8901d2dc525c0eba27032d39dfac48 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b0c91ccda31036383a13d3d82f7f2214435c0426 b/fuzz/gnutls_client_fuzzer.in/b0c91ccda31036383a13d3d82f7f2214435c0426 new file mode 100644 index 0000000000..df8ce7579b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b0c91ccda31036383a13d3d82f7f2214435c0426 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b0ddb6fd7f102fbcfed35dc14addbbd41927e1fe b/fuzz/gnutls_client_fuzzer.in/b0ddb6fd7f102fbcfed35dc14addbbd41927e1fe new file mode 100644 index 0000000000..1b90c78614 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b0ddb6fd7f102fbcfed35dc14addbbd41927e1fe differ diff --git a/fuzz/gnutls_client_fuzzer.in/b166991e981957a3fb1fad6b3fbaa71fbc322221 b/fuzz/gnutls_client_fuzzer.in/b166991e981957a3fb1fad6b3fbaa71fbc322221 new file mode 100644 index 0000000000..e6a8b0d8db Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b166991e981957a3fb1fad6b3fbaa71fbc322221 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b18885446562ef2ffc5145ec31296ab717af53ad b/fuzz/gnutls_client_fuzzer.in/b18885446562ef2ffc5145ec31296ab717af53ad new file mode 100644 index 0000000000..e101b11c74 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b18885446562ef2ffc5145ec31296ab717af53ad differ diff --git a/fuzz/gnutls_client_fuzzer.in/b1b0b0d94c2c28f5ce3075e23752963af86639c1 b/fuzz/gnutls_client_fuzzer.in/b1b0b0d94c2c28f5ce3075e23752963af86639c1 new file mode 100644 index 0000000000..cdfd629503 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b1b0b0d94c2c28f5ce3075e23752963af86639c1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b1b5b9ee95155732d1ea32fead7644b2fd053fca b/fuzz/gnutls_client_fuzzer.in/b1b5b9ee95155732d1ea32fead7644b2fd053fca new file mode 100644 index 0000000000..2780267d18 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b1b5b9ee95155732d1ea32fead7644b2fd053fca differ diff --git a/fuzz/gnutls_client_fuzzer.in/b21399c7465cc2762d47ade6d49ee281b8767c46 b/fuzz/gnutls_client_fuzzer.in/b21399c7465cc2762d47ade6d49ee281b8767c46 new file mode 100644 index 0000000000..e22fcbc69e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b21399c7465cc2762d47ade6d49ee281b8767c46 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b2bc0c5a90c94bd8d9431a603599fc9fe668ec14 b/fuzz/gnutls_client_fuzzer.in/b2bc0c5a90c94bd8d9431a603599fc9fe668ec14 new file mode 100644 index 0000000000..cff4e18065 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b2bc0c5a90c94bd8d9431a603599fc9fe668ec14 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b2d5f32911249e68395f649780335a7e18af0da4 b/fuzz/gnutls_client_fuzzer.in/b2d5f32911249e68395f649780335a7e18af0da4 new file mode 100644 index 0000000000..04b495a2f1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b2d5f32911249e68395f649780335a7e18af0da4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b2f5cc84cc7cdd8c888bebdd6ffad84bca534e9c b/fuzz/gnutls_client_fuzzer.in/b2f5cc84cc7cdd8c888bebdd6ffad84bca534e9c new file mode 100644 index 0000000000..24b9a1767a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b2f5cc84cc7cdd8c888bebdd6ffad84bca534e9c differ diff --git a/fuzz/gnutls_client_fuzzer.in/b418a899bdbd56321eabf0d7a45db0eadd9470f3 b/fuzz/gnutls_client_fuzzer.in/b418a899bdbd56321eabf0d7a45db0eadd9470f3 new file mode 100644 index 0000000000..dfe1bb05da Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b418a899bdbd56321eabf0d7a45db0eadd9470f3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b44888189a440fe8531183687b98e8b093a14686 b/fuzz/gnutls_client_fuzzer.in/b44888189a440fe8531183687b98e8b093a14686 new file mode 100644 index 0000000000..3a4e5342c4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b44888189a440fe8531183687b98e8b093a14686 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b4b5aae90e06da8b614a8758dd43979cce6e888e b/fuzz/gnutls_client_fuzzer.in/b4b5aae90e06da8b614a8758dd43979cce6e888e new file mode 100644 index 0000000000..ce694940a9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b4b5aae90e06da8b614a8758dd43979cce6e888e differ diff --git a/fuzz/gnutls_client_fuzzer.in/b4d11620cbd84d8f68d387969c7e1b6db5b437f9 b/fuzz/gnutls_client_fuzzer.in/b4d11620cbd84d8f68d387969c7e1b6db5b437f9 new file mode 100644 index 0000000000..165be2f3ed --- /dev/null +++ b/fuzz/gnutls_client_fuzzer.in/b4d11620cbd84d8f68d387969c7e1b6db5b437f9 @@ -0,0 +1 @@ +6 \ No newline at end of file diff --git a/fuzz/gnutls_client_fuzzer.in/b5501ab1d09f33f115741611116e0c9e2d42aa29 b/fuzz/gnutls_client_fuzzer.in/b5501ab1d09f33f115741611116e0c9e2d42aa29 new file mode 100644 index 0000000000..1f5063c491 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b5501ab1d09f33f115741611116e0c9e2d42aa29 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b59790a96da3c77846cc66278aea97fdc8a8b79c b/fuzz/gnutls_client_fuzzer.in/b59790a96da3c77846cc66278aea97fdc8a8b79c new file mode 100644 index 0000000000..ca5a6ec22b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b59790a96da3c77846cc66278aea97fdc8a8b79c differ diff --git a/fuzz/gnutls_client_fuzzer.in/b5b780cf80d46fac1c824bdc97acf7f8a0d4a665 b/fuzz/gnutls_client_fuzzer.in/b5b780cf80d46fac1c824bdc97acf7f8a0d4a665 new file mode 100644 index 0000000000..647fd4ac73 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b5b780cf80d46fac1c824bdc97acf7f8a0d4a665 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b5f0a0ed4afb8db0be1385bbb58df0e39637941a b/fuzz/gnutls_client_fuzzer.in/b5f0a0ed4afb8db0be1385bbb58df0e39637941a new file mode 100644 index 0000000000..2beb7922e8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b5f0a0ed4afb8db0be1385bbb58df0e39637941a differ diff --git a/fuzz/gnutls_client_fuzzer.in/b601dcb412a63b13ef14d9ae6c041acf7a7716a1 b/fuzz/gnutls_client_fuzzer.in/b601dcb412a63b13ef14d9ae6c041acf7a7716a1 new file mode 100644 index 0000000000..f3a5df370e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b601dcb412a63b13ef14d9ae6c041acf7a7716a1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b62c8db59c32a91cd8527d67318e79cf5575b9cb b/fuzz/gnutls_client_fuzzer.in/b62c8db59c32a91cd8527d67318e79cf5575b9cb new file mode 100644 index 0000000000..0490b21fb2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b62c8db59c32a91cd8527d67318e79cf5575b9cb differ diff --git a/fuzz/gnutls_client_fuzzer.in/b75e3eda9f5f8ecb5696286878c5e2796206679f b/fuzz/gnutls_client_fuzzer.in/b75e3eda9f5f8ecb5696286878c5e2796206679f new file mode 100644 index 0000000000..a0be8c1de9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b75e3eda9f5f8ecb5696286878c5e2796206679f differ diff --git a/fuzz/gnutls_client_fuzzer.in/b776f2b9bf9a3676f578bbc9d4ee65693dca62b8 b/fuzz/gnutls_client_fuzzer.in/b776f2b9bf9a3676f578bbc9d4ee65693dca62b8 new file mode 100644 index 0000000000..1e82411c54 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b776f2b9bf9a3676f578bbc9d4ee65693dca62b8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b7890e01bd2449161a171ad1e7682441434802c9 b/fuzz/gnutls_client_fuzzer.in/b7890e01bd2449161a171ad1e7682441434802c9 new file mode 100644 index 0000000000..400f7a225d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b7890e01bd2449161a171ad1e7682441434802c9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b8063d5750942bcc471e6ee7f4563b232ecea4c8 b/fuzz/gnutls_client_fuzzer.in/b8063d5750942bcc471e6ee7f4563b232ecea4c8 new file mode 100644 index 0000000000..52bc9ebcbe Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b8063d5750942bcc471e6ee7f4563b232ecea4c8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b85ae18d9de0e3efa5df5427801b6894f8250950 b/fuzz/gnutls_client_fuzzer.in/b85ae18d9de0e3efa5df5427801b6894f8250950 new file mode 100644 index 0000000000..630b3617c7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b85ae18d9de0e3efa5df5427801b6894f8250950 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b8645ddad89d3b292fdcbf1baf9a41788e62dbe1 b/fuzz/gnutls_client_fuzzer.in/b8645ddad89d3b292fdcbf1baf9a41788e62dbe1 new file mode 100644 index 0000000000..edb56ffd6a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b8645ddad89d3b292fdcbf1baf9a41788e62dbe1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b8a24263f9300e61c21a6c1df0da85f2c7ca2039 b/fuzz/gnutls_client_fuzzer.in/b8a24263f9300e61c21a6c1df0da85f2c7ca2039 new file mode 100644 index 0000000000..3835b117e5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b8a24263f9300e61c21a6c1df0da85f2c7ca2039 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b8ba213f7c12784d2070ba472eb0bf326c6ef472 b/fuzz/gnutls_client_fuzzer.in/b8ba213f7c12784d2070ba472eb0bf326c6ef472 new file mode 100644 index 0000000000..2b43d32590 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b8ba213f7c12784d2070ba472eb0bf326c6ef472 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b94f1ad7106b5e60e9f2c13bda6ce56230b5b840 b/fuzz/gnutls_client_fuzzer.in/b94f1ad7106b5e60e9f2c13bda6ce56230b5b840 new file mode 100644 index 0000000000..dd7e7c8913 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b94f1ad7106b5e60e9f2c13bda6ce56230b5b840 differ diff --git a/fuzz/gnutls_client_fuzzer.in/b9d077fa48613f88966d13bc8100f49488d755a8 b/fuzz/gnutls_client_fuzzer.in/b9d077fa48613f88966d13bc8100f49488d755a8 new file mode 100644 index 0000000000..11b749ba94 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/b9d077fa48613f88966d13bc8100f49488d755a8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ba0a3fc6af7ec581f0e6c0118f0202aa61583874 b/fuzz/gnutls_client_fuzzer.in/ba0a3fc6af7ec581f0e6c0118f0202aa61583874 new file mode 100644 index 0000000000..36e8d1ea35 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ba0a3fc6af7ec581f0e6c0118f0202aa61583874 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ba17cd063f3629bf211ea6f99fd113aaeab3cbea b/fuzz/gnutls_client_fuzzer.in/ba17cd063f3629bf211ea6f99fd113aaeab3cbea new file mode 100644 index 0000000000..0b7c0121cd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ba17cd063f3629bf211ea6f99fd113aaeab3cbea differ diff --git a/fuzz/gnutls_client_fuzzer.in/ba3ea837af272299e0937fe7a25c3b57683a9844 b/fuzz/gnutls_client_fuzzer.in/ba3ea837af272299e0937fe7a25c3b57683a9844 new file mode 100644 index 0000000000..def09f8087 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ba3ea837af272299e0937fe7a25c3b57683a9844 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ba42dbd2ef20dfde2d954f314da45534c3c8d33c b/fuzz/gnutls_client_fuzzer.in/ba42dbd2ef20dfde2d954f314da45534c3c8d33c new file mode 100644 index 0000000000..fe3f3dffd7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ba42dbd2ef20dfde2d954f314da45534c3c8d33c differ diff --git a/fuzz/gnutls_client_fuzzer.in/bb39f0e715f6b94a7edbdd2809de870162dc6b77 b/fuzz/gnutls_client_fuzzer.in/bb39f0e715f6b94a7edbdd2809de870162dc6b77 new file mode 100644 index 0000000000..207d1fc128 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bb39f0e715f6b94a7edbdd2809de870162dc6b77 differ diff --git a/fuzz/gnutls_client_fuzzer.in/bb3f9b2d21e48194f121f19d6f9fd2e1e0c6850c b/fuzz/gnutls_client_fuzzer.in/bb3f9b2d21e48194f121f19d6f9fd2e1e0c6850c new file mode 100644 index 0000000000..bd457edb1f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bb3f9b2d21e48194f121f19d6f9fd2e1e0c6850c differ diff --git a/fuzz/gnutls_client_fuzzer.in/bbfaa60d41e267b90e72cc4aedef31ac563e43a5 b/fuzz/gnutls_client_fuzzer.in/bbfaa60d41e267b90e72cc4aedef31ac563e43a5 new file mode 100644 index 0000000000..6bf41b8f7a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bbfaa60d41e267b90e72cc4aedef31ac563e43a5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/bc1a0935164add06e019663ff03a7fdcef85bc76 b/fuzz/gnutls_client_fuzzer.in/bc1a0935164add06e019663ff03a7fdcef85bc76 new file mode 100644 index 0000000000..668d6e3ed4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bc1a0935164add06e019663ff03a7fdcef85bc76 differ diff --git a/fuzz/gnutls_client_fuzzer.in/bdc20dce457766a2676e6ddc95efb231fb8a2466 b/fuzz/gnutls_client_fuzzer.in/bdc20dce457766a2676e6ddc95efb231fb8a2466 new file mode 100644 index 0000000000..7d54cea1a5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bdc20dce457766a2676e6ddc95efb231fb8a2466 differ diff --git a/fuzz/gnutls_client_fuzzer.in/bdc5a15a046746e4e2ba78899c529dfd1c61a454 b/fuzz/gnutls_client_fuzzer.in/bdc5a15a046746e4e2ba78899c529dfd1c61a454 new file mode 100644 index 0000000000..a95dcd6190 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bdc5a15a046746e4e2ba78899c529dfd1c61a454 differ diff --git a/fuzz/gnutls_client_fuzzer.in/bdee71a3809f45f91a29946e62cd7b893fd5496e b/fuzz/gnutls_client_fuzzer.in/bdee71a3809f45f91a29946e62cd7b893fd5496e new file mode 100644 index 0000000000..be396e61c1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bdee71a3809f45f91a29946e62cd7b893fd5496e differ diff --git a/fuzz/gnutls_client_fuzzer.in/be1215d942b540257262568d05e4e6e619e52112 b/fuzz/gnutls_client_fuzzer.in/be1215d942b540257262568d05e4e6e619e52112 new file mode 100644 index 0000000000..60a7c5ab19 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/be1215d942b540257262568d05e4e6e619e52112 differ diff --git a/fuzz/gnutls_client_fuzzer.in/bedd67fec9dec25cbaaf9ffe2ccf28a326b44b9a b/fuzz/gnutls_client_fuzzer.in/bedd67fec9dec25cbaaf9ffe2ccf28a326b44b9a new file mode 100644 index 0000000000..6cd8648ecc Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bedd67fec9dec25cbaaf9ffe2ccf28a326b44b9a differ diff --git a/fuzz/gnutls_client_fuzzer.in/bf30723ef71f42785da9ff0c54c138581911d27a b/fuzz/gnutls_client_fuzzer.in/bf30723ef71f42785da9ff0c54c138581911d27a new file mode 100644 index 0000000000..595b0b68a5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bf30723ef71f42785da9ff0c54c138581911d27a differ diff --git a/fuzz/gnutls_client_fuzzer.in/bfb7db52eb8f31274c6c9457bd8c31b9c6cfa281 b/fuzz/gnutls_client_fuzzer.in/bfb7db52eb8f31274c6c9457bd8c31b9c6cfa281 new file mode 100644 index 0000000000..0c55ae7e64 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bfb7db52eb8f31274c6c9457bd8c31b9c6cfa281 differ diff --git a/fuzz/gnutls_client_fuzzer.in/bfb7ea611a871a9b9cc87c29d643799133c1b921 b/fuzz/gnutls_client_fuzzer.in/bfb7ea611a871a9b9cc87c29d643799133c1b921 new file mode 100644 index 0000000000..fa94c62042 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bfb7ea611a871a9b9cc87c29d643799133c1b921 differ diff --git a/fuzz/gnutls_client_fuzzer.in/bfc7d93e01c645ff62cbc12af4c08cd97f344902 b/fuzz/gnutls_client_fuzzer.in/bfc7d93e01c645ff62cbc12af4c08cd97f344902 new file mode 100644 index 0000000000..9bcfc1cd3a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/bfc7d93e01c645ff62cbc12af4c08cd97f344902 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c054100db11b35df754b019066cafef38c36706d b/fuzz/gnutls_client_fuzzer.in/c054100db11b35df754b019066cafef38c36706d new file mode 100644 index 0000000000..b1e1aafb31 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c054100db11b35df754b019066cafef38c36706d differ diff --git a/fuzz/gnutls_client_fuzzer.in/c05bd3ac6ba0585bb4b2cbebec77ee71001b7996 b/fuzz/gnutls_client_fuzzer.in/c05bd3ac6ba0585bb4b2cbebec77ee71001b7996 new file mode 100644 index 0000000000..b3ab97ecc2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c05bd3ac6ba0585bb4b2cbebec77ee71001b7996 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c0886ff1156b2b5d2bf50da96d62255b53e4bd84 b/fuzz/gnutls_client_fuzzer.in/c0886ff1156b2b5d2bf50da96d62255b53e4bd84 new file mode 100644 index 0000000000..5be12dfc19 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c0886ff1156b2b5d2bf50da96d62255b53e4bd84 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c0fb4c6057fcd6192471246c9673b3d10b2558eb b/fuzz/gnutls_client_fuzzer.in/c0fb4c6057fcd6192471246c9673b3d10b2558eb new file mode 100644 index 0000000000..c4619313d3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c0fb4c6057fcd6192471246c9673b3d10b2558eb differ diff --git a/fuzz/gnutls_client_fuzzer.in/c24470d6719206a825d1df95728db6f4c520f6dd b/fuzz/gnutls_client_fuzzer.in/c24470d6719206a825d1df95728db6f4c520f6dd new file mode 100644 index 0000000000..11aac2bb3e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c24470d6719206a825d1df95728db6f4c520f6dd differ diff --git a/fuzz/gnutls_client_fuzzer.in/c299d86970a23608a5dbb03a931852e97bfed81c b/fuzz/gnutls_client_fuzzer.in/c299d86970a23608a5dbb03a931852e97bfed81c new file mode 100644 index 0000000000..1d3c262390 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c299d86970a23608a5dbb03a931852e97bfed81c differ diff --git a/fuzz/gnutls_client_fuzzer.in/c2a4a1ba9f1001c7bb3b3f46a30fd9d0342f6def b/fuzz/gnutls_client_fuzzer.in/c2a4a1ba9f1001c7bb3b3f46a30fd9d0342f6def new file mode 100644 index 0000000000..20f4ce4f0e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c2a4a1ba9f1001c7bb3b3f46a30fd9d0342f6def differ diff --git a/fuzz/gnutls_client_fuzzer.in/c2ae7801ce091a080951e480c7df1e46815bdfae b/fuzz/gnutls_client_fuzzer.in/c2ae7801ce091a080951e480c7df1e46815bdfae new file mode 100644 index 0000000000..35179fa145 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c2ae7801ce091a080951e480c7df1e46815bdfae differ diff --git a/fuzz/gnutls_client_fuzzer.in/c2d43537bcc76c9f27bc6b4dc2b67edf1e3b07fb b/fuzz/gnutls_client_fuzzer.in/c2d43537bcc76c9f27bc6b4dc2b67edf1e3b07fb new file mode 100644 index 0000000000..e0ddb262e0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c2d43537bcc76c9f27bc6b4dc2b67edf1e3b07fb differ diff --git a/fuzz/gnutls_client_fuzzer.in/c34f652459228ba60bdcc5e2b40c29c0d0644b7c b/fuzz/gnutls_client_fuzzer.in/c34f652459228ba60bdcc5e2b40c29c0d0644b7c new file mode 100644 index 0000000000..a6ffde07d5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c34f652459228ba60bdcc5e2b40c29c0d0644b7c differ diff --git a/fuzz/gnutls_client_fuzzer.in/c350f2cb3e598ff339df6a51843f5580cd1bce78 b/fuzz/gnutls_client_fuzzer.in/c350f2cb3e598ff339df6a51843f5580cd1bce78 new file mode 100644 index 0000000000..0e854d773f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c350f2cb3e598ff339df6a51843f5580cd1bce78 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c35260935713a8f4dbeef5c24677b845afd80c8b b/fuzz/gnutls_client_fuzzer.in/c35260935713a8f4dbeef5c24677b845afd80c8b new file mode 100644 index 0000000000..c98078d056 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c35260935713a8f4dbeef5c24677b845afd80c8b differ diff --git a/fuzz/gnutls_client_fuzzer.in/c37a78fbf60fae00ef6e766b5e20659a6b7c9ac1 b/fuzz/gnutls_client_fuzzer.in/c37a78fbf60fae00ef6e766b5e20659a6b7c9ac1 new file mode 100644 index 0000000000..2ecce22850 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c37a78fbf60fae00ef6e766b5e20659a6b7c9ac1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c3e96c8ceecf74b78df54f76133da521ea59367d b/fuzz/gnutls_client_fuzzer.in/c3e96c8ceecf74b78df54f76133da521ea59367d new file mode 100644 index 0000000000..535235b167 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c3e96c8ceecf74b78df54f76133da521ea59367d differ diff --git a/fuzz/gnutls_client_fuzzer.in/c4357de6fbc744d3cfde54516cc26e2bceb05f15 b/fuzz/gnutls_client_fuzzer.in/c4357de6fbc744d3cfde54516cc26e2bceb05f15 new file mode 100644 index 0000000000..af9039f045 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c4357de6fbc744d3cfde54516cc26e2bceb05f15 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c480b455d0a03c863554670590aea402926b9cbb b/fuzz/gnutls_client_fuzzer.in/c480b455d0a03c863554670590aea402926b9cbb new file mode 100644 index 0000000000..f8bb2a7f40 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c480b455d0a03c863554670590aea402926b9cbb differ diff --git a/fuzz/gnutls_client_fuzzer.in/c4f7113417fc927fe0a9b64afc1765eadb52d2d2 b/fuzz/gnutls_client_fuzzer.in/c4f7113417fc927fe0a9b64afc1765eadb52d2d2 new file mode 100644 index 0000000000..f571269a5f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c4f7113417fc927fe0a9b64afc1765eadb52d2d2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c52cc5a45d2b1ae3a42d5631565a8db6628aa3aa b/fuzz/gnutls_client_fuzzer.in/c52cc5a45d2b1ae3a42d5631565a8db6628aa3aa new file mode 100644 index 0000000000..d013eb5275 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c52cc5a45d2b1ae3a42d5631565a8db6628aa3aa differ diff --git a/fuzz/gnutls_client_fuzzer.in/c535db5e2fe45c7318e37245ee9303937cc6108d b/fuzz/gnutls_client_fuzzer.in/c535db5e2fe45c7318e37245ee9303937cc6108d new file mode 100644 index 0000000000..0acb714eb1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c535db5e2fe45c7318e37245ee9303937cc6108d differ diff --git a/fuzz/gnutls_client_fuzzer.in/c59125ce1615dd1c9c59d3ff86c8d9260494e9b0 b/fuzz/gnutls_client_fuzzer.in/c59125ce1615dd1c9c59d3ff86c8d9260494e9b0 new file mode 100644 index 0000000000..d0b2a1a82f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c59125ce1615dd1c9c59d3ff86c8d9260494e9b0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c6db9f7d30b431925ba4b7c0474632be1634446b b/fuzz/gnutls_client_fuzzer.in/c6db9f7d30b431925ba4b7c0474632be1634446b new file mode 100644 index 0000000000..6110dc64df Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c6db9f7d30b431925ba4b7c0474632be1634446b differ diff --git a/fuzz/gnutls_client_fuzzer.in/c80fe19e143b47b4222397badf0950ebf1412b9b b/fuzz/gnutls_client_fuzzer.in/c80fe19e143b47b4222397badf0950ebf1412b9b new file mode 100644 index 0000000000..383e7bbb74 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c80fe19e143b47b4222397badf0950ebf1412b9b differ diff --git a/fuzz/gnutls_client_fuzzer.in/c812e5f6367a67596d445531162ded9b3dc939fe b/fuzz/gnutls_client_fuzzer.in/c812e5f6367a67596d445531162ded9b3dc939fe new file mode 100644 index 0000000000..7025f9f852 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c812e5f6367a67596d445531162ded9b3dc939fe differ diff --git a/fuzz/gnutls_client_fuzzer.in/c81b1d5060a5302674ba77fcfc4de22299fbd667 b/fuzz/gnutls_client_fuzzer.in/c81b1d5060a5302674ba77fcfc4de22299fbd667 new file mode 100644 index 0000000000..7746179ac7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c81b1d5060a5302674ba77fcfc4de22299fbd667 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c83dbb1ae34d9a818fb2f12e5c980fdc99a47214 b/fuzz/gnutls_client_fuzzer.in/c83dbb1ae34d9a818fb2f12e5c980fdc99a47214 new file mode 100644 index 0000000000..2149bf856f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c83dbb1ae34d9a818fb2f12e5c980fdc99a47214 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c8664ec4a19b06e1d468cb8ba5d87447f1e4aa89 b/fuzz/gnutls_client_fuzzer.in/c8664ec4a19b06e1d468cb8ba5d87447f1e4aa89 new file mode 100644 index 0000000000..dfc62bcc47 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c8664ec4a19b06e1d468cb8ba5d87447f1e4aa89 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c873a4aa616cb352760334ff36d04f03b4c9f170 b/fuzz/gnutls_client_fuzzer.in/c873a4aa616cb352760334ff36d04f03b4c9f170 new file mode 100644 index 0000000000..79e72431dc Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c873a4aa616cb352760334ff36d04f03b4c9f170 differ diff --git a/fuzz/gnutls_client_fuzzer.in/c8d4b93cc3cc8d0ea7a60159c94a24112cc05bbc b/fuzz/gnutls_client_fuzzer.in/c8d4b93cc3cc8d0ea7a60159c94a24112cc05bbc new file mode 100644 index 0000000000..10320c5c54 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c8d4b93cc3cc8d0ea7a60159c94a24112cc05bbc differ diff --git a/fuzz/gnutls_client_fuzzer.in/c971523674bc7b305a33f234e39a50ab025f3756 b/fuzz/gnutls_client_fuzzer.in/c971523674bc7b305a33f234e39a50ab025f3756 new file mode 100644 index 0000000000..8467b1b1a2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/c971523674bc7b305a33f234e39a50ab025f3756 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ca4f941b1417af039e1b0e93b99a4583172c30f1 b/fuzz/gnutls_client_fuzzer.in/ca4f941b1417af039e1b0e93b99a4583172c30f1 new file mode 100644 index 0000000000..30ab15fc6a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ca4f941b1417af039e1b0e93b99a4583172c30f1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/cb283f6ee32e55e1cee4c66c2d96db0daecc63bc b/fuzz/gnutls_client_fuzzer.in/cb283f6ee32e55e1cee4c66c2d96db0daecc63bc new file mode 100644 index 0000000000..d999936252 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/cb283f6ee32e55e1cee4c66c2d96db0daecc63bc differ diff --git a/fuzz/gnutls_client_fuzzer.in/cb5b7139867e5659093545c5b76f29d66d0b6873 b/fuzz/gnutls_client_fuzzer.in/cb5b7139867e5659093545c5b76f29d66d0b6873 new file mode 100644 index 0000000000..321a6416ad Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/cb5b7139867e5659093545c5b76f29d66d0b6873 differ diff --git a/fuzz/gnutls_client_fuzzer.in/cb6bc88a0d7af7fd4b25473d31c556fb290d1e2e b/fuzz/gnutls_client_fuzzer.in/cb6bc88a0d7af7fd4b25473d31c556fb290d1e2e new file mode 100644 index 0000000000..8196a6eef5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/cb6bc88a0d7af7fd4b25473d31c556fb290d1e2e differ diff --git a/fuzz/gnutls_client_fuzzer.in/cb7d5b65e69199050869a8fdd13bdc1c3f98f263 b/fuzz/gnutls_client_fuzzer.in/cb7d5b65e69199050869a8fdd13bdc1c3f98f263 new file mode 100644 index 0000000000..a4a9989c29 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/cb7d5b65e69199050869a8fdd13bdc1c3f98f263 differ diff --git a/fuzz/gnutls_client_fuzzer.in/cba89b499e48b65defe4874458f7f474d600402f b/fuzz/gnutls_client_fuzzer.in/cba89b499e48b65defe4874458f7f474d600402f new file mode 100644 index 0000000000..c489503c4e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/cba89b499e48b65defe4874458f7f474d600402f differ diff --git a/fuzz/gnutls_client_fuzzer.in/cc53835f42fc2b81f03c70d450b7c524a85fd761 b/fuzz/gnutls_client_fuzzer.in/cc53835f42fc2b81f03c70d450b7c524a85fd761 new file mode 100644 index 0000000000..632897eda3 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/cc53835f42fc2b81f03c70d450b7c524a85fd761 differ diff --git a/fuzz/gnutls_client_fuzzer.in/cc6ca7f5eeb4553359e5c16a56252ecbd5de9c5a b/fuzz/gnutls_client_fuzzer.in/cc6ca7f5eeb4553359e5c16a56252ecbd5de9c5a new file mode 100644 index 0000000000..73db636f65 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/cc6ca7f5eeb4553359e5c16a56252ecbd5de9c5a differ diff --git a/fuzz/gnutls_client_fuzzer.in/ccd8edc368b7bfee977140dd614b1c033ae53575 b/fuzz/gnutls_client_fuzzer.in/ccd8edc368b7bfee977140dd614b1c033ae53575 new file mode 100644 index 0000000000..5e412307c7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ccd8edc368b7bfee977140dd614b1c033ae53575 differ diff --git a/fuzz/gnutls_client_fuzzer.in/cd22327d412e7dd50ad181de6dad3a2303474861 b/fuzz/gnutls_client_fuzzer.in/cd22327d412e7dd50ad181de6dad3a2303474861 new file mode 100644 index 0000000000..ef6c6cecbf Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/cd22327d412e7dd50ad181de6dad3a2303474861 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ce05dcf053d12f5170a85f0f0a9f7cb8b3cecfc1 b/fuzz/gnutls_client_fuzzer.in/ce05dcf053d12f5170a85f0f0a9f7cb8b3cecfc1 new file mode 100644 index 0000000000..50747d6e08 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ce05dcf053d12f5170a85f0f0a9f7cb8b3cecfc1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ce536efa5b5b9a61f8d6dc19d4bee42f7ae836ec b/fuzz/gnutls_client_fuzzer.in/ce536efa5b5b9a61f8d6dc19d4bee42f7ae836ec new file mode 100644 index 0000000000..764a1f58de Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ce536efa5b5b9a61f8d6dc19d4bee42f7ae836ec differ diff --git a/fuzz/gnutls_client_fuzzer.in/ce6baa4ec7c053ab5d62a160525f6cb618bbc927 b/fuzz/gnutls_client_fuzzer.in/ce6baa4ec7c053ab5d62a160525f6cb618bbc927 new file mode 100644 index 0000000000..893b11220d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ce6baa4ec7c053ab5d62a160525f6cb618bbc927 differ diff --git a/fuzz/gnutls_client_fuzzer.in/cefe9c96838a2e188f41d090df0cdd925e3ccd7b b/fuzz/gnutls_client_fuzzer.in/cefe9c96838a2e188f41d090df0cdd925e3ccd7b new file mode 100644 index 0000000000..55f8e6c088 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/cefe9c96838a2e188f41d090df0cdd925e3ccd7b differ diff --git a/fuzz/gnutls_client_fuzzer.in/cffe1518134b80e4b5fd1be18a38d1ed9538ff4b b/fuzz/gnutls_client_fuzzer.in/cffe1518134b80e4b5fd1be18a38d1ed9538ff4b new file mode 100644 index 0000000000..d0f34f2527 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/cffe1518134b80e4b5fd1be18a38d1ed9538ff4b differ diff --git a/fuzz/gnutls_client_fuzzer.in/d02bb27d13636ab2d2fd805d1c953db57eddd790 b/fuzz/gnutls_client_fuzzer.in/d02bb27d13636ab2d2fd805d1c953db57eddd790 new file mode 100644 index 0000000000..df72325f25 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d02bb27d13636ab2d2fd805d1c953db57eddd790 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d06a6be2544ac7aaad79239fe6147ca00fa2c6b3 b/fuzz/gnutls_client_fuzzer.in/d06a6be2544ac7aaad79239fe6147ca00fa2c6b3 new file mode 100644 index 0000000000..f234324dd8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d06a6be2544ac7aaad79239fe6147ca00fa2c6b3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d1aea8caf1de5d45af798ea45f074a0793922e88 b/fuzz/gnutls_client_fuzzer.in/d1aea8caf1de5d45af798ea45f074a0793922e88 new file mode 100644 index 0000000000..3bba696f81 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d1aea8caf1de5d45af798ea45f074a0793922e88 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d1fbfcfb01a621fa7ea6b831d50f3be71a2f2bcc b/fuzz/gnutls_client_fuzzer.in/d1fbfcfb01a621fa7ea6b831d50f3be71a2f2bcc new file mode 100644 index 0000000000..e22c0d9afa Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d1fbfcfb01a621fa7ea6b831d50f3be71a2f2bcc differ diff --git a/fuzz/gnutls_client_fuzzer.in/d2682c82e349cf3feb39fb09db6bd00461e8f2c5 b/fuzz/gnutls_client_fuzzer.in/d2682c82e349cf3feb39fb09db6bd00461e8f2c5 new file mode 100644 index 0000000000..2fb6027ee5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d2682c82e349cf3feb39fb09db6bd00461e8f2c5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d2f1bc1577de5f19a1057ae9c8ba7c0c6bc43913 b/fuzz/gnutls_client_fuzzer.in/d2f1bc1577de5f19a1057ae9c8ba7c0c6bc43913 new file mode 100644 index 0000000000..f2d054a2d8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d2f1bc1577de5f19a1057ae9c8ba7c0c6bc43913 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d30bbfafd1b950e772df00aa29eb86f51921a7f2 b/fuzz/gnutls_client_fuzzer.in/d30bbfafd1b950e772df00aa29eb86f51921a7f2 new file mode 100644 index 0000000000..145dc237b5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d30bbfafd1b950e772df00aa29eb86f51921a7f2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d399dabdf9555d8434d4ae24d30d5cb5743af954 b/fuzz/gnutls_client_fuzzer.in/d399dabdf9555d8434d4ae24d30d5cb5743af954 new file mode 100644 index 0000000000..4b9a769ce9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d399dabdf9555d8434d4ae24d30d5cb5743af954 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d3a6e8adfa7e02c06648e213e799f8d6745ded27 b/fuzz/gnutls_client_fuzzer.in/d3a6e8adfa7e02c06648e213e799f8d6745ded27 new file mode 100644 index 0000000000..3b4e5b75c4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d3a6e8adfa7e02c06648e213e799f8d6745ded27 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d4e07516e7dc00352b5a3f403795dd967e4bbcb2 b/fuzz/gnutls_client_fuzzer.in/d4e07516e7dc00352b5a3f403795dd967e4bbcb2 new file mode 100644 index 0000000000..af1fcea792 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d4e07516e7dc00352b5a3f403795dd967e4bbcb2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d57314744eb986118f0dc0ed0bfa2db01fa0fb0d b/fuzz/gnutls_client_fuzzer.in/d57314744eb986118f0dc0ed0bfa2db01fa0fb0d new file mode 100644 index 0000000000..849e098d92 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d57314744eb986118f0dc0ed0bfa2db01fa0fb0d differ diff --git a/fuzz/gnutls_client_fuzzer.in/d7076e6e1213e627a99e12754deafb37a461f225 b/fuzz/gnutls_client_fuzzer.in/d7076e6e1213e627a99e12754deafb37a461f225 new file mode 100644 index 0000000000..3e78db619d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d7076e6e1213e627a99e12754deafb37a461f225 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d7632626771eaa2428ca9626b6abf76d260038fb b/fuzz/gnutls_client_fuzzer.in/d7632626771eaa2428ca9626b6abf76d260038fb new file mode 100644 index 0000000000..024a7cb97d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d7632626771eaa2428ca9626b6abf76d260038fb differ diff --git a/fuzz/gnutls_client_fuzzer.in/d7acab9c2cac2b77aeff0535a41e69df1d1fe285 b/fuzz/gnutls_client_fuzzer.in/d7acab9c2cac2b77aeff0535a41e69df1d1fe285 new file mode 100644 index 0000000000..7c55bcc1d6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d7acab9c2cac2b77aeff0535a41e69df1d1fe285 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d7b49428ad8ba32ff3ed0de60bb2454517ad4318 b/fuzz/gnutls_client_fuzzer.in/d7b49428ad8ba32ff3ed0de60bb2454517ad4318 new file mode 100644 index 0000000000..1017355663 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d7b49428ad8ba32ff3ed0de60bb2454517ad4318 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d8064b2781f0a211486f014dff78fa0dcd7ee9cc b/fuzz/gnutls_client_fuzzer.in/d8064b2781f0a211486f014dff78fa0dcd7ee9cc new file mode 100644 index 0000000000..f9bb5e86a9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d8064b2781f0a211486f014dff78fa0dcd7ee9cc differ diff --git a/fuzz/gnutls_client_fuzzer.in/d8723186f5d81e084a60e15b2a8d88dcef31c64b b/fuzz/gnutls_client_fuzzer.in/d8723186f5d81e084a60e15b2a8d88dcef31c64b new file mode 100644 index 0000000000..e06bd3f24c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d8723186f5d81e084a60e15b2a8d88dcef31c64b differ diff --git a/fuzz/gnutls_client_fuzzer.in/d8a31e43ee5976196150e891657c7296a07fa6fb b/fuzz/gnutls_client_fuzzer.in/d8a31e43ee5976196150e891657c7296a07fa6fb new file mode 100644 index 0000000000..265bc14105 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d8a31e43ee5976196150e891657c7296a07fa6fb differ diff --git a/fuzz/gnutls_client_fuzzer.in/d8aba5665aeb04e365d2c79a1fd7d4016a36621b b/fuzz/gnutls_client_fuzzer.in/d8aba5665aeb04e365d2c79a1fd7d4016a36621b new file mode 100644 index 0000000000..098a16e137 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d8aba5665aeb04e365d2c79a1fd7d4016a36621b differ diff --git a/fuzz/gnutls_client_fuzzer.in/d8e375f8f05582a209d5ed8c7620b0912554004b b/fuzz/gnutls_client_fuzzer.in/d8e375f8f05582a209d5ed8c7620b0912554004b new file mode 100644 index 0000000000..ec48b25bfc Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d8e375f8f05582a209d5ed8c7620b0912554004b differ diff --git a/fuzz/gnutls_client_fuzzer.in/d8f9b6d1f49a03e116bcc1b0e13b4e3992d42e56 b/fuzz/gnutls_client_fuzzer.in/d8f9b6d1f49a03e116bcc1b0e13b4e3992d42e56 new file mode 100644 index 0000000000..88fa2d05b1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d8f9b6d1f49a03e116bcc1b0e13b4e3992d42e56 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d90b741bc221f93a4603d08be192a3c60c3d78cc b/fuzz/gnutls_client_fuzzer.in/d90b741bc221f93a4603d08be192a3c60c3d78cc new file mode 100644 index 0000000000..70f1bc716b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d90b741bc221f93a4603d08be192a3c60c3d78cc differ diff --git a/fuzz/gnutls_client_fuzzer.in/d950702aa3d1be3fc62626d9b915cba016a70b66 b/fuzz/gnutls_client_fuzzer.in/d950702aa3d1be3fc62626d9b915cba016a70b66 new file mode 100644 index 0000000000..b0248b5323 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d950702aa3d1be3fc62626d9b915cba016a70b66 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d99eee84fabc42f71c6ea1e58848820bd5f64f36 b/fuzz/gnutls_client_fuzzer.in/d99eee84fabc42f71c6ea1e58848820bd5f64f36 new file mode 100644 index 0000000000..c1aa8a70cd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d99eee84fabc42f71c6ea1e58848820bd5f64f36 differ diff --git a/fuzz/gnutls_client_fuzzer.in/d9df741800c68b22af65e408e8dc9f0f7b78060f b/fuzz/gnutls_client_fuzzer.in/d9df741800c68b22af65e408e8dc9f0f7b78060f new file mode 100644 index 0000000000..0f7bed352b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/d9df741800c68b22af65e408e8dc9f0f7b78060f differ diff --git a/fuzz/gnutls_client_fuzzer.in/da3dc8bb7818e8a712d04903821a952473a1cc29 b/fuzz/gnutls_client_fuzzer.in/da3dc8bb7818e8a712d04903821a952473a1cc29 new file mode 100644 index 0000000000..0d0462b192 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/da3dc8bb7818e8a712d04903821a952473a1cc29 differ diff --git a/fuzz/gnutls_client_fuzzer.in/daba7fc16644a480dbe66672fd2941d79fe302fb b/fuzz/gnutls_client_fuzzer.in/daba7fc16644a480dbe66672fd2941d79fe302fb new file mode 100644 index 0000000000..d6f9146f3e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/daba7fc16644a480dbe66672fd2941d79fe302fb differ diff --git a/fuzz/gnutls_client_fuzzer.in/db6ce9254fdca7f8155c1ec538f787cc3bc06a8b b/fuzz/gnutls_client_fuzzer.in/db6ce9254fdca7f8155c1ec538f787cc3bc06a8b new file mode 100644 index 0000000000..9fb8375dbe Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/db6ce9254fdca7f8155c1ec538f787cc3bc06a8b differ diff --git a/fuzz/gnutls_client_fuzzer.in/dba603fe7efdc64601d375233fc561d9c623b679 b/fuzz/gnutls_client_fuzzer.in/dba603fe7efdc64601d375233fc561d9c623b679 new file mode 100644 index 0000000000..d61a10b00e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/dba603fe7efdc64601d375233fc561d9c623b679 differ diff --git a/fuzz/gnutls_client_fuzzer.in/dbc860c695c385229f2d7b885feef4ba037319d3 b/fuzz/gnutls_client_fuzzer.in/dbc860c695c385229f2d7b885feef4ba037319d3 new file mode 100644 index 0000000000..554ab287c5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/dbc860c695c385229f2d7b885feef4ba037319d3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/dbcb3f2a3771004cb8ec87392c2949c3f2523b8b b/fuzz/gnutls_client_fuzzer.in/dbcb3f2a3771004cb8ec87392c2949c3f2523b8b new file mode 100644 index 0000000000..84a6fe1f61 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/dbcb3f2a3771004cb8ec87392c2949c3f2523b8b differ diff --git a/fuzz/gnutls_client_fuzzer.in/dc436b847acdef2311740cc8098690c6dac79b72 b/fuzz/gnutls_client_fuzzer.in/dc436b847acdef2311740cc8098690c6dac79b72 new file mode 100644 index 0000000000..d3b809b4e1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/dc436b847acdef2311740cc8098690c6dac79b72 differ diff --git a/fuzz/gnutls_client_fuzzer.in/dc6166cb9bb95d8267be0fe508b17249c0d806e1 b/fuzz/gnutls_client_fuzzer.in/dc6166cb9bb95d8267be0fe508b17249c0d806e1 new file mode 100644 index 0000000000..308bd8c01f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/dc6166cb9bb95d8267be0fe508b17249c0d806e1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/dc833f32957ed4b12673626730bfb84acd49c302 b/fuzz/gnutls_client_fuzzer.in/dc833f32957ed4b12673626730bfb84acd49c302 new file mode 100644 index 0000000000..b7b73f5557 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/dc833f32957ed4b12673626730bfb84acd49c302 differ diff --git a/fuzz/gnutls_client_fuzzer.in/dc958d44a77caba78634e87873792ef0bbb7b367 b/fuzz/gnutls_client_fuzzer.in/dc958d44a77caba78634e87873792ef0bbb7b367 new file mode 100644 index 0000000000..571a9f1ed5 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/dc958d44a77caba78634e87873792ef0bbb7b367 differ diff --git a/fuzz/gnutls_client_fuzzer.in/dd5d958425e540c4a086f77b20da2d14c74dd26f b/fuzz/gnutls_client_fuzzer.in/dd5d958425e540c4a086f77b20da2d14c74dd26f new file mode 100644 index 0000000000..fd90f4c9ba Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/dd5d958425e540c4a086f77b20da2d14c74dd26f differ diff --git a/fuzz/gnutls_client_fuzzer.in/ddad14f413ff0b3e7a8ba5e5edad375a39cd6941 b/fuzz/gnutls_client_fuzzer.in/ddad14f413ff0b3e7a8ba5e5edad375a39cd6941 new file mode 100644 index 0000000000..ebaaaa9b85 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ddad14f413ff0b3e7a8ba5e5edad375a39cd6941 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ddfb97c470d1c7793c2f8c303b0934cada51b0a6 b/fuzz/gnutls_client_fuzzer.in/ddfb97c470d1c7793c2f8c303b0934cada51b0a6 new file mode 100644 index 0000000000..95ede27bd6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ddfb97c470d1c7793c2f8c303b0934cada51b0a6 differ diff --git a/fuzz/gnutls_client_fuzzer.in/de87a117dbf46d2aa16981ecd8959f45c7d64313 b/fuzz/gnutls_client_fuzzer.in/de87a117dbf46d2aa16981ecd8959f45c7d64313 new file mode 100644 index 0000000000..d92f5e01e0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/de87a117dbf46d2aa16981ecd8959f45c7d64313 differ diff --git a/fuzz/gnutls_client_fuzzer.in/de8b4bde49c42b33ba2d7ec32788c1d711f6af91 b/fuzz/gnutls_client_fuzzer.in/de8b4bde49c42b33ba2d7ec32788c1d711f6af91 new file mode 100644 index 0000000000..04dda5cc8f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/de8b4bde49c42b33ba2d7ec32788c1d711f6af91 differ diff --git a/fuzz/gnutls_client_fuzzer.in/df089d3efb7c2e1f140cc6df74abd6a423e2b0cb b/fuzz/gnutls_client_fuzzer.in/df089d3efb7c2e1f140cc6df74abd6a423e2b0cb new file mode 100644 index 0000000000..d4d87691b0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/df089d3efb7c2e1f140cc6df74abd6a423e2b0cb differ diff --git a/fuzz/gnutls_client_fuzzer.in/df4c5419cc98343d856e90e341837f8624998e4a b/fuzz/gnutls_client_fuzzer.in/df4c5419cc98343d856e90e341837f8624998e4a new file mode 100644 index 0000000000..54de642af6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/df4c5419cc98343d856e90e341837f8624998e4a differ diff --git a/fuzz/gnutls_client_fuzzer.in/df4c84dbe260d0cdf9dd6238616de4683b5a6dc4 b/fuzz/gnutls_client_fuzzer.in/df4c84dbe260d0cdf9dd6238616de4683b5a6dc4 new file mode 100644 index 0000000000..4613666ac6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/df4c84dbe260d0cdf9dd6238616de4683b5a6dc4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/dfe4cc06c05e43dbedb195bd5b3e5d2cc889ab1e b/fuzz/gnutls_client_fuzzer.in/dfe4cc06c05e43dbedb195bd5b3e5d2cc889ab1e new file mode 100644 index 0000000000..e3b6a5f13b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/dfe4cc06c05e43dbedb195bd5b3e5d2cc889ab1e differ diff --git a/fuzz/gnutls_client_fuzzer.in/e014ed7436a4ca6239290ec4fda4f477ebac948c b/fuzz/gnutls_client_fuzzer.in/e014ed7436a4ca6239290ec4fda4f477ebac948c new file mode 100644 index 0000000000..06c3ff6858 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e014ed7436a4ca6239290ec4fda4f477ebac948c differ diff --git a/fuzz/gnutls_client_fuzzer.in/e13386561332d930dfe8d7a230a259b2dcbba8cb b/fuzz/gnutls_client_fuzzer.in/e13386561332d930dfe8d7a230a259b2dcbba8cb new file mode 100644 index 0000000000..f5c2fae62d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e13386561332d930dfe8d7a230a259b2dcbba8cb differ diff --git a/fuzz/gnutls_client_fuzzer.in/e1faf14d9efc41cdbd60ecf2237dbc5bdead6201 b/fuzz/gnutls_client_fuzzer.in/e1faf14d9efc41cdbd60ecf2237dbc5bdead6201 new file mode 100644 index 0000000000..2af0f82696 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e1faf14d9efc41cdbd60ecf2237dbc5bdead6201 differ diff --git a/fuzz/gnutls_client_fuzzer.in/e1fc2e3105fc3a2a7be7d48d8edce0632572a88b b/fuzz/gnutls_client_fuzzer.in/e1fc2e3105fc3a2a7be7d48d8edce0632572a88b new file mode 100644 index 0000000000..c036498e51 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e1fc2e3105fc3a2a7be7d48d8edce0632572a88b differ diff --git a/fuzz/gnutls_client_fuzzer.in/e285794bc26a6791530a35dbb0973df7db5c63cd b/fuzz/gnutls_client_fuzzer.in/e285794bc26a6791530a35dbb0973df7db5c63cd new file mode 100644 index 0000000000..fb5973da17 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e285794bc26a6791530a35dbb0973df7db5c63cd differ diff --git a/fuzz/gnutls_client_fuzzer.in/e2d355965623baa530ed5c0c1d16f144707674a1 b/fuzz/gnutls_client_fuzzer.in/e2d355965623baa530ed5c0c1d16f144707674a1 new file mode 100644 index 0000000000..7d213fa081 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e2d355965623baa530ed5c0c1d16f144707674a1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/e32959be0f90847f60f033888bc252f54e9a15b3 b/fuzz/gnutls_client_fuzzer.in/e32959be0f90847f60f033888bc252f54e9a15b3 new file mode 100644 index 0000000000..c2d2fdc293 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e32959be0f90847f60f033888bc252f54e9a15b3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/e3a85f4aabeb242724c0e4a092ff90b34054bd6f b/fuzz/gnutls_client_fuzzer.in/e3a85f4aabeb242724c0e4a092ff90b34054bd6f new file mode 100644 index 0000000000..98c6a82c97 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e3a85f4aabeb242724c0e4a092ff90b34054bd6f differ diff --git a/fuzz/gnutls_client_fuzzer.in/e3b0e606dbcdc1d0ab00041dfd0c58921d3438f5 b/fuzz/gnutls_client_fuzzer.in/e3b0e606dbcdc1d0ab00041dfd0c58921d3438f5 new file mode 100644 index 0000000000..7ce7e3276e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e3b0e606dbcdc1d0ab00041dfd0c58921d3438f5 differ diff --git a/fuzz/gnutls_client_fuzzer.in/e401cf5a66ba83036ee3e75bf02d07ebf36ddac3 b/fuzz/gnutls_client_fuzzer.in/e401cf5a66ba83036ee3e75bf02d07ebf36ddac3 new file mode 100644 index 0000000000..362cb4ee01 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e401cf5a66ba83036ee3e75bf02d07ebf36ddac3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/e449213c4c069ff64b0b9be8efa55d4a61e39004 b/fuzz/gnutls_client_fuzzer.in/e449213c4c069ff64b0b9be8efa55d4a61e39004 new file mode 100644 index 0000000000..2371fba33e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e449213c4c069ff64b0b9be8efa55d4a61e39004 differ diff --git a/fuzz/gnutls_client_fuzzer.in/e49af97794315cdd5168125aa61040e3872f9bf6 b/fuzz/gnutls_client_fuzzer.in/e49af97794315cdd5168125aa61040e3872f9bf6 new file mode 100644 index 0000000000..980f272cee Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e49af97794315cdd5168125aa61040e3872f9bf6 differ diff --git a/fuzz/gnutls_client_fuzzer.in/e4ae40332bf05478150f5f5054afe8e3ba1ba326 b/fuzz/gnutls_client_fuzzer.in/e4ae40332bf05478150f5f5054afe8e3ba1ba326 new file mode 100644 index 0000000000..751626a923 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e4ae40332bf05478150f5f5054afe8e3ba1ba326 differ diff --git a/fuzz/gnutls_client_fuzzer.in/e507710943a0f6dc7af25f7e5eae923caee85a47 b/fuzz/gnutls_client_fuzzer.in/e507710943a0f6dc7af25f7e5eae923caee85a47 new file mode 100644 index 0000000000..8439c06c48 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e507710943a0f6dc7af25f7e5eae923caee85a47 differ diff --git a/fuzz/gnutls_client_fuzzer.in/e5cfbd847998d3e6302421f85129476e4caf925b b/fuzz/gnutls_client_fuzzer.in/e5cfbd847998d3e6302421f85129476e4caf925b new file mode 100644 index 0000000000..e277feab5e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e5cfbd847998d3e6302421f85129476e4caf925b differ diff --git a/fuzz/gnutls_client_fuzzer.in/e6534b8e95cb69f50e1259250317e08fe2da169c b/fuzz/gnutls_client_fuzzer.in/e6534b8e95cb69f50e1259250317e08fe2da169c new file mode 100644 index 0000000000..53f1668e09 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e6534b8e95cb69f50e1259250317e08fe2da169c differ diff --git a/fuzz/gnutls_client_fuzzer.in/e7d7e4ead9f92909847346e76a9160d64454473e b/fuzz/gnutls_client_fuzzer.in/e7d7e4ead9f92909847346e76a9160d64454473e new file mode 100644 index 0000000000..66c7f98069 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e7d7e4ead9f92909847346e76a9160d64454473e differ diff --git a/fuzz/gnutls_client_fuzzer.in/e7f1ff02c1f05744f41b4537c52eb028747cf72a b/fuzz/gnutls_client_fuzzer.in/e7f1ff02c1f05744f41b4537c52eb028747cf72a new file mode 100644 index 0000000000..a04a6eda21 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e7f1ff02c1f05744f41b4537c52eb028747cf72a differ diff --git a/fuzz/gnutls_client_fuzzer.in/e803ae43c41cfe90752099903ba30ad0bf562ded b/fuzz/gnutls_client_fuzzer.in/e803ae43c41cfe90752099903ba30ad0bf562ded new file mode 100644 index 0000000000..bc8e4f0d28 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e803ae43c41cfe90752099903ba30ad0bf562ded differ diff --git a/fuzz/gnutls_client_fuzzer.in/e816b9ddc8e07278fd889c78528e993d575f38de b/fuzz/gnutls_client_fuzzer.in/e816b9ddc8e07278fd889c78528e993d575f38de new file mode 100644 index 0000000000..d5d5c0f030 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e816b9ddc8e07278fd889c78528e993d575f38de differ diff --git a/fuzz/gnutls_client_fuzzer.in/e8a4dbfe9f51fe9046a934934886329e409431bd b/fuzz/gnutls_client_fuzzer.in/e8a4dbfe9f51fe9046a934934886329e409431bd new file mode 100644 index 0000000000..16c0458afd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e8a4dbfe9f51fe9046a934934886329e409431bd differ diff --git a/fuzz/gnutls_client_fuzzer.in/e9088c772db66aaa08a496a52c8e759332df25dd b/fuzz/gnutls_client_fuzzer.in/e9088c772db66aaa08a496a52c8e759332df25dd new file mode 100644 index 0000000000..1ab53756fb Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e9088c772db66aaa08a496a52c8e759332df25dd differ diff --git a/fuzz/gnutls_client_fuzzer.in/e967bf1cc8c3ebd0adf9837e8b72359a48c611c2 b/fuzz/gnutls_client_fuzzer.in/e967bf1cc8c3ebd0adf9837e8b72359a48c611c2 new file mode 100644 index 0000000000..cce13f8440 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e967bf1cc8c3ebd0adf9837e8b72359a48c611c2 differ diff --git a/fuzz/gnutls_client_fuzzer.in/e9a16859b6fce584131f4c50f77e99f6186798a7 b/fuzz/gnutls_client_fuzzer.in/e9a16859b6fce584131f4c50f77e99f6186798a7 new file mode 100644 index 0000000000..e49d2cd9ac Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e9a16859b6fce584131f4c50f77e99f6186798a7 differ diff --git a/fuzz/gnutls_client_fuzzer.in/e9b333213381e6d2ffca27cba3a7640fbc69cbda b/fuzz/gnutls_client_fuzzer.in/e9b333213381e6d2ffca27cba3a7640fbc69cbda new file mode 100644 index 0000000000..bfc7200c13 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e9b333213381e6d2ffca27cba3a7640fbc69cbda differ diff --git a/fuzz/gnutls_client_fuzzer.in/e9c545e6d6e59e27601f62f65ada929cd7abcfbe b/fuzz/gnutls_client_fuzzer.in/e9c545e6d6e59e27601f62f65ada929cd7abcfbe new file mode 100644 index 0000000000..2b16f2ee07 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e9c545e6d6e59e27601f62f65ada929cd7abcfbe differ diff --git a/fuzz/gnutls_client_fuzzer.in/e9d601bec0c8cfe9d5ca32bad26440bff1cb18e8 b/fuzz/gnutls_client_fuzzer.in/e9d601bec0c8cfe9d5ca32bad26440bff1cb18e8 new file mode 100644 index 0000000000..eeb1ed3b69 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/e9d601bec0c8cfe9d5ca32bad26440bff1cb18e8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ea217a9eb97eaa5d3ca850f0185841b0ad0bce20 b/fuzz/gnutls_client_fuzzer.in/ea217a9eb97eaa5d3ca850f0185841b0ad0bce20 new file mode 100644 index 0000000000..326a75e80d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ea217a9eb97eaa5d3ca850f0185841b0ad0bce20 differ diff --git a/fuzz/gnutls_client_fuzzer.in/eac3471325184b407218efb4fbf9ed18502b90ad b/fuzz/gnutls_client_fuzzer.in/eac3471325184b407218efb4fbf9ed18502b90ad new file mode 100644 index 0000000000..3d6c6ebec8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/eac3471325184b407218efb4fbf9ed18502b90ad differ diff --git a/fuzz/gnutls_client_fuzzer.in/eadbb193c74bbff61b61d6de5fa418c18409f8ac b/fuzz/gnutls_client_fuzzer.in/eadbb193c74bbff61b61d6de5fa418c18409f8ac new file mode 100644 index 0000000000..a97b954c46 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/eadbb193c74bbff61b61d6de5fa418c18409f8ac differ diff --git a/fuzz/gnutls_client_fuzzer.in/eb1441ab87aee7ec53cadfc6ad30194c1064852f b/fuzz/gnutls_client_fuzzer.in/eb1441ab87aee7ec53cadfc6ad30194c1064852f new file mode 100644 index 0000000000..c9e853a87a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/eb1441ab87aee7ec53cadfc6ad30194c1064852f differ diff --git a/fuzz/gnutls_client_fuzzer.in/ec4184ecaf94491dd7d3b0cdc97856eacb848979 b/fuzz/gnutls_client_fuzzer.in/ec4184ecaf94491dd7d3b0cdc97856eacb848979 new file mode 100644 index 0000000000..c48e95fcec Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ec4184ecaf94491dd7d3b0cdc97856eacb848979 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ec9cc5dbbae2ee9eab613aa88831f7fa412d7563 b/fuzz/gnutls_client_fuzzer.in/ec9cc5dbbae2ee9eab613aa88831f7fa412d7563 new file mode 100644 index 0000000000..63ab66e0f9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ec9cc5dbbae2ee9eab613aa88831f7fa412d7563 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ecabbc59408c4afe426de33062782a9a18431372 b/fuzz/gnutls_client_fuzzer.in/ecabbc59408c4afe426de33062782a9a18431372 new file mode 100644 index 0000000000..274e74a441 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ecabbc59408c4afe426de33062782a9a18431372 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ed5a436d424673093824a351ad7859a72d01a06c b/fuzz/gnutls_client_fuzzer.in/ed5a436d424673093824a351ad7859a72d01a06c new file mode 100644 index 0000000000..3e543b890a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ed5a436d424673093824a351ad7859a72d01a06c differ diff --git a/fuzz/gnutls_client_fuzzer.in/ed604be006301db06efe0eadf6ca86e0e7bc13d0 b/fuzz/gnutls_client_fuzzer.in/ed604be006301db06efe0eadf6ca86e0e7bc13d0 new file mode 100644 index 0000000000..70d2f17644 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ed604be006301db06efe0eadf6ca86e0e7bc13d0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ee8b7e441ef1fc2a1e9316a939d88ba8040a792e b/fuzz/gnutls_client_fuzzer.in/ee8b7e441ef1fc2a1e9316a939d88ba8040a792e new file mode 100644 index 0000000000..afdea8e069 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ee8b7e441ef1fc2a1e9316a939d88ba8040a792e differ diff --git a/fuzz/gnutls_client_fuzzer.in/eec5b9c746726dda8a72ddbb044aeda5aa7b9a87 b/fuzz/gnutls_client_fuzzer.in/eec5b9c746726dda8a72ddbb044aeda5aa7b9a87 new file mode 100644 index 0000000000..5559415917 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/eec5b9c746726dda8a72ddbb044aeda5aa7b9a87 differ diff --git a/fuzz/gnutls_client_fuzzer.in/eef8185fb225c54cddae33075991be002f65ea4c b/fuzz/gnutls_client_fuzzer.in/eef8185fb225c54cddae33075991be002f65ea4c new file mode 100644 index 0000000000..b2e0c141e2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/eef8185fb225c54cddae33075991be002f65ea4c differ diff --git a/fuzz/gnutls_client_fuzzer.in/ef168a7399bd68f0bc15b73a25ce28bef24f3cb1 b/fuzz/gnutls_client_fuzzer.in/ef168a7399bd68f0bc15b73a25ce28bef24f3cb1 new file mode 100644 index 0000000000..80a957baab Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ef168a7399bd68f0bc15b73a25ce28bef24f3cb1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ef2ef63b63794989a2d6cc50ed73ee2f4c28a785 b/fuzz/gnutls_client_fuzzer.in/ef2ef63b63794989a2d6cc50ed73ee2f4c28a785 new file mode 100644 index 0000000000..179a4fa285 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ef2ef63b63794989a2d6cc50ed73ee2f4c28a785 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ef713ae84eb35841da5add070668957ca1eab184 b/fuzz/gnutls_client_fuzzer.in/ef713ae84eb35841da5add070668957ca1eab184 new file mode 100644 index 0000000000..ac7121fe01 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ef713ae84eb35841da5add070668957ca1eab184 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f07fda688824cb0332fcf8d2d8c96de45dc8c3a0 b/fuzz/gnutls_client_fuzzer.in/f07fda688824cb0332fcf8d2d8c96de45dc8c3a0 new file mode 100644 index 0000000000..7a9b276560 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f07fda688824cb0332fcf8d2d8c96de45dc8c3a0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f0a88154fc975593cbb6ff45c24d016545da8420 b/fuzz/gnutls_client_fuzzer.in/f0a88154fc975593cbb6ff45c24d016545da8420 new file mode 100644 index 0000000000..61995d8f70 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f0a88154fc975593cbb6ff45c24d016545da8420 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f0b651a301ce0e0f1459d11cb6ca14c22411a538 b/fuzz/gnutls_client_fuzzer.in/f0b651a301ce0e0f1459d11cb6ca14c22411a538 new file mode 100644 index 0000000000..e72fe1b866 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f0b651a301ce0e0f1459d11cb6ca14c22411a538 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f0fb5c801c1f50173b6856be965d11d2c28a281e b/fuzz/gnutls_client_fuzzer.in/f0fb5c801c1f50173b6856be965d11d2c28a281e new file mode 100644 index 0000000000..b4b0628a21 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f0fb5c801c1f50173b6856be965d11d2c28a281e differ diff --git a/fuzz/gnutls_client_fuzzer.in/f129aa24b846a28e239d745ee64292989f4e9a1a b/fuzz/gnutls_client_fuzzer.in/f129aa24b846a28e239d745ee64292989f4e9a1a new file mode 100644 index 0000000000..15d798ef18 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f129aa24b846a28e239d745ee64292989f4e9a1a differ diff --git a/fuzz/gnutls_client_fuzzer.in/f13e163f4eb5710d4e4e18640cd7d0c3a3903ffd b/fuzz/gnutls_client_fuzzer.in/f13e163f4eb5710d4e4e18640cd7d0c3a3903ffd new file mode 100644 index 0000000000..0f05fa48b1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f13e163f4eb5710d4e4e18640cd7d0c3a3903ffd differ diff --git a/fuzz/gnutls_client_fuzzer.in/f18ee9a8082b8eb6b7b5f7e2cdb48d3c13bfe0e9 b/fuzz/gnutls_client_fuzzer.in/f18ee9a8082b8eb6b7b5f7e2cdb48d3c13bfe0e9 new file mode 100644 index 0000000000..9b9106fe3e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f18ee9a8082b8eb6b7b5f7e2cdb48d3c13bfe0e9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f1b57b7d0b380eadc605607bcf14789ea168891b b/fuzz/gnutls_client_fuzzer.in/f1b57b7d0b380eadc605607bcf14789ea168891b new file mode 100644 index 0000000000..6e05c02bde Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f1b57b7d0b380eadc605607bcf14789ea168891b differ diff --git a/fuzz/gnutls_client_fuzzer.in/f21ff7736827c58ae765164a01b9ec25c66a2d47 b/fuzz/gnutls_client_fuzzer.in/f21ff7736827c58ae765164a01b9ec25c66a2d47 new file mode 100644 index 0000000000..cf4aaf579d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f21ff7736827c58ae765164a01b9ec25c66a2d47 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f23d2b3b6f439472eef97cfffed962abfda34472 b/fuzz/gnutls_client_fuzzer.in/f23d2b3b6f439472eef97cfffed962abfda34472 new file mode 100644 index 0000000000..d1cad6cc21 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f23d2b3b6f439472eef97cfffed962abfda34472 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f279591cee3d393edab74b64f5bff2783f7896e1 b/fuzz/gnutls_client_fuzzer.in/f279591cee3d393edab74b64f5bff2783f7896e1 new file mode 100644 index 0000000000..5babb58174 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f279591cee3d393edab74b64f5bff2783f7896e1 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f2805d9f6b06a3bc42b2595a8954ded463e99e97 b/fuzz/gnutls_client_fuzzer.in/f2805d9f6b06a3bc42b2595a8954ded463e99e97 new file mode 100644 index 0000000000..18ff9c1a6d Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f2805d9f6b06a3bc42b2595a8954ded463e99e97 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f2ef8145cfb5b8f740a05ed4329e2037961175e9 b/fuzz/gnutls_client_fuzzer.in/f2ef8145cfb5b8f740a05ed4329e2037961175e9 new file mode 100644 index 0000000000..8a58792887 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f2ef8145cfb5b8f740a05ed4329e2037961175e9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f317875735a4aa639e6ed8801378c0a3ec6e8436 b/fuzz/gnutls_client_fuzzer.in/f317875735a4aa639e6ed8801378c0a3ec6e8436 new file mode 100644 index 0000000000..11af5dd0e2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f317875735a4aa639e6ed8801378c0a3ec6e8436 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f37c71d27717be5a2b3042f69e3edb2753bc5a0e b/fuzz/gnutls_client_fuzzer.in/f37c71d27717be5a2b3042f69e3edb2753bc5a0e new file mode 100644 index 0000000000..6a491c0dc0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f37c71d27717be5a2b3042f69e3edb2753bc5a0e differ diff --git a/fuzz/gnutls_client_fuzzer.in/f3a083dfc6ee6cf62e32ad146d5b1df3c4aec17d b/fuzz/gnutls_client_fuzzer.in/f3a083dfc6ee6cf62e32ad146d5b1df3c4aec17d new file mode 100644 index 0000000000..824d57ec03 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f3a083dfc6ee6cf62e32ad146d5b1df3c4aec17d differ diff --git a/fuzz/gnutls_client_fuzzer.in/f3c0491be1e88bc6d4b7eb9e98ea49dffc6925d9 b/fuzz/gnutls_client_fuzzer.in/f3c0491be1e88bc6d4b7eb9e98ea49dffc6925d9 new file mode 100644 index 0000000000..fbaff13ced Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f3c0491be1e88bc6d4b7eb9e98ea49dffc6925d9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f3f8705f8710da74c17cccb3ffef2431e2cb7789 b/fuzz/gnutls_client_fuzzer.in/f3f8705f8710da74c17cccb3ffef2431e2cb7789 new file mode 100644 index 0000000000..e7d3871607 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f3f8705f8710da74c17cccb3ffef2431e2cb7789 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f45c5268333bc7bb0b7cca415d591d825e42ceb0 b/fuzz/gnutls_client_fuzzer.in/f45c5268333bc7bb0b7cca415d591d825e42ceb0 new file mode 100644 index 0000000000..819e6d8ff0 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f45c5268333bc7bb0b7cca415d591d825e42ceb0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f466a7d9f620a57d16919eb1b0ac5dfd22c8c6c8 b/fuzz/gnutls_client_fuzzer.in/f466a7d9f620a57d16919eb1b0ac5dfd22c8c6c8 new file mode 100644 index 0000000000..7277419e22 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f466a7d9f620a57d16919eb1b0ac5dfd22c8c6c8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f46c909f402c6c9388a03588a3259caa870ab286 b/fuzz/gnutls_client_fuzzer.in/f46c909f402c6c9388a03588a3259caa870ab286 new file mode 100644 index 0000000000..ef2d230263 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f46c909f402c6c9388a03588a3259caa870ab286 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f478ce14ba0f0286f51430c1e4bdc10c76ff94cd b/fuzz/gnutls_client_fuzzer.in/f478ce14ba0f0286f51430c1e4bdc10c76ff94cd new file mode 100644 index 0000000000..c7adad5997 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f478ce14ba0f0286f51430c1e4bdc10c76ff94cd differ diff --git a/fuzz/gnutls_client_fuzzer.in/f49cba29c59dfae2cfa2285c0a230a81c043c8ff b/fuzz/gnutls_client_fuzzer.in/f49cba29c59dfae2cfa2285c0a230a81c043c8ff new file mode 100644 index 0000000000..b25c0aab62 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f49cba29c59dfae2cfa2285c0a230a81c043c8ff differ diff --git a/fuzz/gnutls_client_fuzzer.in/f4e30e1a4ca2aa16a151abe5303733fc08d7a5dc b/fuzz/gnutls_client_fuzzer.in/f4e30e1a4ca2aa16a151abe5303733fc08d7a5dc new file mode 100644 index 0000000000..7a9768981e Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f4e30e1a4ca2aa16a151abe5303733fc08d7a5dc differ diff --git a/fuzz/gnutls_client_fuzzer.in/f5017e9f85f126e48048fd8d6ae466235e30ee16 b/fuzz/gnutls_client_fuzzer.in/f5017e9f85f126e48048fd8d6ae466235e30ee16 new file mode 100644 index 0000000000..a5d8d5fe22 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f5017e9f85f126e48048fd8d6ae466235e30ee16 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f515b348da3ed082f8c4fad37517a781561c2486 b/fuzz/gnutls_client_fuzzer.in/f515b348da3ed082f8c4fad37517a781561c2486 new file mode 100644 index 0000000000..e3782c8b21 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f515b348da3ed082f8c4fad37517a781561c2486 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f55e82b4d50d793e1e1d45fc70cf5b855d28c401 b/fuzz/gnutls_client_fuzzer.in/f55e82b4d50d793e1e1d45fc70cf5b855d28c401 new file mode 100644 index 0000000000..39051b02f7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f55e82b4d50d793e1e1d45fc70cf5b855d28c401 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f56de480524c14251edf1a8419d70e89a5ba73d3 b/fuzz/gnutls_client_fuzzer.in/f56de480524c14251edf1a8419d70e89a5ba73d3 new file mode 100644 index 0000000000..bbf67e9ad7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f56de480524c14251edf1a8419d70e89a5ba73d3 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f69ccac14a565708a2b8a4e656447838e0b41e88 b/fuzz/gnutls_client_fuzzer.in/f69ccac14a565708a2b8a4e656447838e0b41e88 new file mode 100644 index 0000000000..e9e66161c1 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f69ccac14a565708a2b8a4e656447838e0b41e88 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f6b8ab7b2790ea44216417ce36ba824c19dd9e43 b/fuzz/gnutls_client_fuzzer.in/f6b8ab7b2790ea44216417ce36ba824c19dd9e43 new file mode 100644 index 0000000000..93940f9c47 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f6b8ab7b2790ea44216417ce36ba824c19dd9e43 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f6d90342015bdfd4292023f22cc276eae35da86a b/fuzz/gnutls_client_fuzzer.in/f6d90342015bdfd4292023f22cc276eae35da86a new file mode 100644 index 0000000000..c6f5b678b7 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f6d90342015bdfd4292023f22cc276eae35da86a differ diff --git a/fuzz/gnutls_client_fuzzer.in/f6ebfbdac9aada7cab908f3511c64eccdec6ae93 b/fuzz/gnutls_client_fuzzer.in/f6ebfbdac9aada7cab908f3511c64eccdec6ae93 new file mode 100644 index 0000000000..9bb24ace83 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f6ebfbdac9aada7cab908f3511c64eccdec6ae93 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f7003a9172c7120d02cef55142850b6e3c7d170f b/fuzz/gnutls_client_fuzzer.in/f7003a9172c7120d02cef55142850b6e3c7d170f new file mode 100644 index 0000000000..66095ee6f2 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f7003a9172c7120d02cef55142850b6e3c7d170f differ diff --git a/fuzz/gnutls_client_fuzzer.in/f75a7901a6f3a2b906143700b01566751d56a794 b/fuzz/gnutls_client_fuzzer.in/f75a7901a6f3a2b906143700b01566751d56a794 new file mode 100644 index 0000000000..a90381d6dd Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f75a7901a6f3a2b906143700b01566751d56a794 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f77df3aecc01c6cc9feda0a17effbe26ac527c04 b/fuzz/gnutls_client_fuzzer.in/f77df3aecc01c6cc9feda0a17effbe26ac527c04 new file mode 100644 index 0000000000..bacb554c98 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f77df3aecc01c6cc9feda0a17effbe26ac527c04 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f782c251acab784580e9e44d61c5cfec41dfff5a b/fuzz/gnutls_client_fuzzer.in/f782c251acab784580e9e44d61c5cfec41dfff5a new file mode 100644 index 0000000000..44842c965f Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f782c251acab784580e9e44d61c5cfec41dfff5a differ diff --git a/fuzz/gnutls_client_fuzzer.in/f80f22681f7b704600825c22916c6950d6d4b7d8 b/fuzz/gnutls_client_fuzzer.in/f80f22681f7b704600825c22916c6950d6d4b7d8 new file mode 100644 index 0000000000..764a0036cb Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f80f22681f7b704600825c22916c6950d6d4b7d8 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f8241a6aa4ff80b50b7e6a9dfe28c0f242a96e48 b/fuzz/gnutls_client_fuzzer.in/f8241a6aa4ff80b50b7e6a9dfe28c0f242a96e48 new file mode 100644 index 0000000000..19eed26db6 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f8241a6aa4ff80b50b7e6a9dfe28c0f242a96e48 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f869f9a8a68b278b10f3a6b3cd69c7e606e501b9 b/fuzz/gnutls_client_fuzzer.in/f869f9a8a68b278b10f3a6b3cd69c7e606e501b9 new file mode 100644 index 0000000000..cc4ba77908 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f869f9a8a68b278b10f3a6b3cd69c7e606e501b9 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f884e3c5ddcd1f88c2aee8eae783021616dd7b34 b/fuzz/gnutls_client_fuzzer.in/f884e3c5ddcd1f88c2aee8eae783021616dd7b34 new file mode 100644 index 0000000000..7254d4d4a8 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f884e3c5ddcd1f88c2aee8eae783021616dd7b34 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f90cc5570b0b9c288a466e61e103d015fdb99996 b/fuzz/gnutls_client_fuzzer.in/f90cc5570b0b9c288a466e61e103d015fdb99996 new file mode 100644 index 0000000000..87748b4e2c Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f90cc5570b0b9c288a466e61e103d015fdb99996 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f9115aa51e9e2b88e987f19361d78529a43cc0b6 b/fuzz/gnutls_client_fuzzer.in/f9115aa51e9e2b88e987f19361d78529a43cc0b6 new file mode 100644 index 0000000000..f27c02e339 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f9115aa51e9e2b88e987f19361d78529a43cc0b6 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f9c4a2c4b28570c4600d19781d69799963a96442 b/fuzz/gnutls_client_fuzzer.in/f9c4a2c4b28570c4600d19781d69799963a96442 new file mode 100644 index 0000000000..df02996e83 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f9c4a2c4b28570c4600d19781d69799963a96442 differ diff --git a/fuzz/gnutls_client_fuzzer.in/f9d6bf9ef599bbbe83044b4a53cae5fc56272929 b/fuzz/gnutls_client_fuzzer.in/f9d6bf9ef599bbbe83044b4a53cae5fc56272929 new file mode 100644 index 0000000000..07031d0d12 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/f9d6bf9ef599bbbe83044b4a53cae5fc56272929 differ diff --git a/fuzz/gnutls_client_fuzzer.in/fa2340368784418ae975ed7a2c9b9ed9500f6170 b/fuzz/gnutls_client_fuzzer.in/fa2340368784418ae975ed7a2c9b9ed9500f6170 new file mode 100644 index 0000000000..62b3fce919 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fa2340368784418ae975ed7a2c9b9ed9500f6170 differ diff --git a/fuzz/gnutls_client_fuzzer.in/fa3a1b5f04942ab0eccd31075514dc93e542e090 b/fuzz/gnutls_client_fuzzer.in/fa3a1b5f04942ab0eccd31075514dc93e542e090 new file mode 100644 index 0000000000..1f6077cf1a Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fa3a1b5f04942ab0eccd31075514dc93e542e090 differ diff --git a/fuzz/gnutls_client_fuzzer.in/faa6231fb9ba169e1be99cb8e6c31d1208392bbd b/fuzz/gnutls_client_fuzzer.in/faa6231fb9ba169e1be99cb8e6c31d1208392bbd new file mode 100644 index 0000000000..3eca318010 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/faa6231fb9ba169e1be99cb8e6c31d1208392bbd differ diff --git a/fuzz/gnutls_client_fuzzer.in/fafb47d7ce79abd4c78f9a72a71349ec6bc9303f b/fuzz/gnutls_client_fuzzer.in/fafb47d7ce79abd4c78f9a72a71349ec6bc9303f new file mode 100644 index 0000000000..fdff13a39b Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fafb47d7ce79abd4c78f9a72a71349ec6bc9303f differ diff --git a/fuzz/gnutls_client_fuzzer.in/fb0b7e5ccde6782d747196a9ca8283428111d8c0 b/fuzz/gnutls_client_fuzzer.in/fb0b7e5ccde6782d747196a9ca8283428111d8c0 new file mode 100644 index 0000000000..5960c6fb66 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fb0b7e5ccde6782d747196a9ca8283428111d8c0 differ diff --git a/fuzz/gnutls_client_fuzzer.in/fb99ad4d6f7a231d56480050b364e0e37e91f80b b/fuzz/gnutls_client_fuzzer.in/fb99ad4d6f7a231d56480050b364e0e37e91f80b new file mode 100644 index 0000000000..bd74d9bb82 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fb99ad4d6f7a231d56480050b364e0e37e91f80b differ diff --git a/fuzz/gnutls_client_fuzzer.in/fbd2484e6b15f743171f7e389cee8686f7bb4a86 b/fuzz/gnutls_client_fuzzer.in/fbd2484e6b15f743171f7e389cee8686f7bb4a86 new file mode 100644 index 0000000000..fa08e8a895 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fbd2484e6b15f743171f7e389cee8686f7bb4a86 differ diff --git a/fuzz/gnutls_client_fuzzer.in/fc159d23fc74b0bbbf9536f5858c7bb636fff1e4 b/fuzz/gnutls_client_fuzzer.in/fc159d23fc74b0bbbf9536f5858c7bb636fff1e4 new file mode 100644 index 0000000000..2f49f0d494 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fc159d23fc74b0bbbf9536f5858c7bb636fff1e4 differ diff --git a/fuzz/gnutls_client_fuzzer.in/fc3a8fcd8b4ee536c0a7022bcbb3720f2a761c7c b/fuzz/gnutls_client_fuzzer.in/fc3a8fcd8b4ee536c0a7022bcbb3720f2a761c7c new file mode 100644 index 0000000000..bcb234b5d9 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fc3a8fcd8b4ee536c0a7022bcbb3720f2a761c7c differ diff --git a/fuzz/gnutls_client_fuzzer.in/fd127d15467450a5380d5e0817ffffe58338feba b/fuzz/gnutls_client_fuzzer.in/fd127d15467450a5380d5e0817ffffe58338feba new file mode 100644 index 0000000000..f5f34fac27 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fd127d15467450a5380d5e0817ffffe58338feba differ diff --git a/fuzz/gnutls_client_fuzzer.in/fd21a70839f075d293d42fc4bdd5cdca05456513 b/fuzz/gnutls_client_fuzzer.in/fd21a70839f075d293d42fc4bdd5cdca05456513 new file mode 100644 index 0000000000..1380e715ff Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fd21a70839f075d293d42fc4bdd5cdca05456513 differ diff --git a/fuzz/gnutls_client_fuzzer.in/fd96936fac6700345832b0cf97ef70103c91a0bf b/fuzz/gnutls_client_fuzzer.in/fd96936fac6700345832b0cf97ef70103c91a0bf new file mode 100644 index 0000000000..de11cf9531 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fd96936fac6700345832b0cf97ef70103c91a0bf differ diff --git a/fuzz/gnutls_client_fuzzer.in/fda1761173677e646c515ef24b6625b48384fa54 b/fuzz/gnutls_client_fuzzer.in/fda1761173677e646c515ef24b6625b48384fa54 new file mode 100644 index 0000000000..2325870920 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/fda1761173677e646c515ef24b6625b48384fa54 differ diff --git a/fuzz/gnutls_client_fuzzer.in/ffd1d00c45076fb96b308b4205c1b6a72adae69a b/fuzz/gnutls_client_fuzzer.in/ffd1d00c45076fb96b308b4205c1b6a72adae69a new file mode 100644 index 0000000000..26509db108 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ffd1d00c45076fb96b308b4205c1b6a72adae69a differ diff --git a/fuzz/gnutls_client_fuzzer.in/ffd643597971347ea91ec972f271dc45013ae554 b/fuzz/gnutls_client_fuzzer.in/ffd643597971347ea91ec972f271dc45013ae554 new file mode 100644 index 0000000000..6a78ba19d4 Binary files /dev/null and b/fuzz/gnutls_client_fuzzer.in/ffd643597971347ea91ec972f271dc45013ae554 differ diff --git a/fuzz/gnutls_client_rawpk_fuzzer.c b/fuzz/gnutls_client_rawpk_fuzzer.c new file mode 100644 index 0000000000..c20b885538 --- /dev/null +++ b/fuzz/gnutls_client_rawpk_fuzzer.c @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * Copyright (C) 2019 Tom Vrancken (dev@tomvrancken.nl) + * + * 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 fuzzer tests the behavior of the GnuTLS library in client mode, + * specifically dealing with raw public keys during the handshake. + * + * The fuzzer corpus generated as first input was generated with the + * following parameters for gnutls-serv and gnutls-cli: + * + * gnutls-serv --priority NORMAL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK + * gnutls-cli localhost:5556 --priority NORMAL:-CTYPE-ALL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK --no-ca-verification + * + * The above yields a handshake where both the client and server present + * a raw public-key to eachother. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "certs.h" +#include "mem.h" +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size) +{ + IGNORE_CERTS; + int res; + gnutls_session_t session; + gnutls_certificate_credentials_t rawpk_cred; + struct mem_st memdata; + + res = gnutls_init(&session, GNUTLS_CLIENT | GNUTLS_ENABLE_RAWPK); + assert(res >= 0); + + res = gnutls_certificate_allocate_credentials(&rawpk_cred); + assert(res >= 0); + + res = + gnutls_certificate_set_rawpk_key_mem(rawpk_cred, + &rawpk_public_key1, + &rawpk_private_key1, + GNUTLS_X509_FMT_PEM, + NULL, 0, NULL, 0, 0); + assert(res >= 0); + + gnutls_certificate_set_known_dh_params(rawpk_cred, GNUTLS_SEC_PARAM_MEDIUM); + + res = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, rawpk_cred); + assert(res >= 0); + + res = gnutls_priority_set_direct(session, "NORMAL:"VERS_STR":-CTYPE-ALL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK", NULL); + assert(res >= 0); + + memdata.data = data; + memdata.size = size; + + gnutls_transport_set_push_function(session, mem_push); + gnutls_transport_set_pull_function(session, mem_pull); + gnutls_transport_set_pull_timeout_function(session, mem_pull_timeout); + gnutls_transport_set_ptr(session, &memdata); + + do { + res = gnutls_handshake(session); + } while (res < 0 && gnutls_error_is_fatal(res) == 0); + if (res >= 0) { + while (true) { + char buf[16384]; + res = gnutls_record_recv(session, buf, sizeof(buf)); + if (res <= 0) { + break; + } + } + } + + gnutls_deinit(session); + gnutls_certificate_free_credentials(rawpk_cred); + return 0; +} diff --git a/fuzz/gnutls_client_rawpk_fuzzer.in/a26c0fd6e07ba9b19b2a38ddfbe64cf2d69cac2c b/fuzz/gnutls_client_rawpk_fuzzer.in/a26c0fd6e07ba9b19b2a38ddfbe64cf2d69cac2c new file mode 100644 index 0000000000..5ff0d5d532 Binary files /dev/null and b/fuzz/gnutls_client_rawpk_fuzzer.in/a26c0fd6e07ba9b19b2a38ddfbe64cf2d69cac2c differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.c b/fuzz/gnutls_dn_parser_fuzzer.c new file mode 100644 index 0000000000..ccaa722990 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.c @@ -0,0 +1,54 @@ +/* +# Copyright 2016 Nikos Mavrogiannopoulos +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include + +#include +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t out, raw; + gnutls_x509_dn_t dn; + int ret; + + raw.data = (unsigned char *)data; + raw.size = size; + + ret = gnutls_x509_dn_init(&dn); + assert(ret >= 0); + + ret = gnutls_x509_dn_import(dn, &raw); + if (ret < 0) + goto cleanup; + + /* If properly loaded, try to re-export in string */ + ret = gnutls_x509_dn_get_str(dn, &out); + if (ret < 0) { + goto cleanup; + } + + gnutls_free(out.data); + +cleanup: + gnutls_x509_dn_deinit(dn); + return 0; +} diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/010b850777e9975f59114f0364de6ec10d979b63 b/fuzz/gnutls_dn_parser_fuzzer.in/010b850777e9975f59114f0364de6ec10d979b63 new file mode 100644 index 0000000000..44adea1529 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/010b850777e9975f59114f0364de6ec10d979b63 @@ -0,0 +1 @@ +010 U ,<++,< \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/018c690a425e1f4b7ba4fb73aeb68d6f4a9d4f82 b/fuzz/gnutls_dn_parser_fuzzer.in/018c690a425e1f4b7ba4fb73aeb68d6f4a9d4f82 new file mode 100644 index 0000000000..f7773a0c65 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/018c690a425e1f4b7ba4fb73aeb68d6f4a9d4f82 @@ -0,0 +1,2 @@ +0&1$0"U +Yyy""``````"""````````""""" \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/03095df07316bbdee006c453b9ac1cc6cfc251f7 b/fuzz/gnutls_dn_parser_fuzzer.in/03095df07316bbdee006c453b9ac1cc6cfc251f7 new file mode 100644 index 0000000000..e882e64fcb Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/03095df07316bbdee006c453b9ac1cc6cfc251f7 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/03408d8aa4bc76c81b39b2f8fd1d8c0a67ec01f9 b/fuzz/gnutls_dn_parser_fuzzer.in/03408d8aa4bc76c81b39b2f8fd1d8c0a67ec01f9 new file mode 100644 index 0000000000..287b753523 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/03408d8aa4bc76c81b39b2f8fd1d8c0a67ec01f9 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/034d8de31e623570afe06463ff68ef9c1399be94 b/fuzz/gnutls_dn_parser_fuzzer.in/034d8de31e623570afe06463ff68ef9c1399be94 new file mode 100644 index 0000000000..b7c2a9b7a6 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/034d8de31e623570afe06463ff68ef9c1399be94 @@ -0,0 +1 @@ +010 U)MMM+++ \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/04d4f3e6c18ac05cbbd721bcfd249bf520cdb55d b/fuzz/gnutls_dn_parser_fuzzer.in/04d4f3e6c18ac05cbbd721bcfd249bf520cdb55d new file mode 100644 index 0000000000..498b9870cf Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/04d4f3e6c18ac05cbbd721bcfd249bf520cdb55d differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/051f2b72d284aec82650ebd32ba5d660200b390c b/fuzz/gnutls_dn_parser_fuzzer.in/051f2b72d284aec82650ebd32ba5d660200b390c new file mode 100644 index 0000000000..2549a8cb0e Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/051f2b72d284aec82650ebd32ba5d660200b390c differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/0b08d86cb9c1646f30d166c59859e0b6090362ce b/fuzz/gnutls_dn_parser_fuzzer.in/0b08d86cb9c1646f30d166c59859e0b6090362ce new file mode 100644 index 0000000000..99e38f473f --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/0b08d86cb9c1646f30d166c59859e0b6090362ce @@ -0,0 +1 @@ +010 U ,1+,,+ \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/0bfd3413334108a11ef5ed39dbb9efea286f2522 b/fuzz/gnutls_dn_parser_fuzzer.in/0bfd3413334108a11ef5ed39dbb9efea286f2522 new file mode 100644 index 0000000000..ee1103dd6c Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/0bfd3413334108a11ef5ed39dbb9efea286f2522 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/0c32eaea779d5098da4d4ee6d5844d3aa867b205 b/fuzz/gnutls_dn_parser_fuzzer.in/0c32eaea779d5098da4d4ee6d5844d3aa867b205 new file mode 100644 index 0000000000..b513b1491e Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/0c32eaea779d5098da4d4ee6d5844d3aa867b205 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/0d6457f4277daa73d4aede300b1b1f6848ca0d98 b/fuzz/gnutls_dn_parser_fuzzer.in/0d6457f4277daa73d4aede300b1b1f6848ca0d98 new file mode 100644 index 0000000000..b5b5cb29f4 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/0d6457f4277daa73d4aede300b1b1f6848ca0d98 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/11ce74e470dd7cf23442e913a36682fbaa74557e b/fuzz/gnutls_dn_parser_fuzzer.in/11ce74e470dd7cf23442e913a36682fbaa74557e new file mode 100644 index 0000000000..616edfe89c --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/11ce74e470dd7cf23442e913a36682fbaa74557e @@ -0,0 +1 @@ +0 1 0U \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/1335989548ec91ab7720c6008665c05c0f2efb28 b/fuzz/gnutls_dn_parser_fuzzer.in/1335989548ec91ab7720c6008665c05c0f2efb28 new file mode 100644 index 0000000000..3704628a06 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/1335989548ec91ab7720c6008665c05c0f2efb28 @@ -0,0 +1 @@ +0 1 0 U  \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/160ecbbdcabf5fcc99d8b41a0ed52c5635905d07 b/fuzz/gnutls_dn_parser_fuzzer.in/160ecbbdcabf5fcc99d8b41a0ed52c5635905d07 new file mode 100644 index 0000000000..d804b8ee0d Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/160ecbbdcabf5fcc99d8b41a0ed52c5635905d07 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/186bd91ea76fa41179028c5cf264b5ca216a76dd b/fuzz/gnutls_dn_parser_fuzzer.in/186bd91ea76fa41179028c5cf264b5ca216a76dd new file mode 100644 index 0000000000..61b1030293 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/186bd91ea76fa41179028c5cf264b5ca216a76dd @@ -0,0 +1 @@ +0 1 0 U)"" \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/19dc10568109d9c8807639ec536a3bc18930cee9 b/fuzz/gnutls_dn_parser_fuzzer.in/19dc10568109d9c8807639ec536a3bc18930cee9 new file mode 100644 index 0000000000..11dea570a7 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/19dc10568109d9c8807639ec536a3bc18930cee9 @@ -0,0 +1 @@ +0 1 0 US \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/1af08fff65ef67a1327adba76cb0baebb9d287cb b/fuzz/gnutls_dn_parser_fuzzer.in/1af08fff65ef67a1327adba76cb0baebb9d287cb new file mode 100644 index 0000000000..4d4d519a6b --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/1af08fff65ef67a1327adba76cb0baebb9d287cb @@ -0,0 +1 @@ +010 U,+;<>\ \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/1bf800ea5e82c0806e4e6e30e6b7577b7b0d057f b/fuzz/gnutls_dn_parser_fuzzer.in/1bf800ea5e82c0806e4e6e30e6b7577b7b0d057f new file mode 100644 index 0000000000..ad15c80765 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/1bf800ea5e82c0806e4e6e30e6b7577b7b0d057f differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/1cdadd4d54532b459737605bb4296d7212d33717 b/fuzz/gnutls_dn_parser_fuzzer.in/1cdadd4d54532b459737605bb4296d7212d33717 new file mode 100644 index 0000000000..442b434f50 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/1cdadd4d54532b459737605bb4296d7212d33717 @@ -0,0 +1,2 @@ +0&1$0"U +Yyy"""""""";""""""""""""""" \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/1d05c0605487eb15d134e66e4a404643038879a8 b/fuzz/gnutls_dn_parser_fuzzer.in/1d05c0605487eb15d134e66e4a404643038879a8 new file mode 100644 index 0000000000..06b796f2dc Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/1d05c0605487eb15d134e66e4a404643038879a8 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/1d2b7db82eb0a246db195b9b65639cfa464983bd b/fuzz/gnutls_dn_parser_fuzzer.in/1d2b7db82eb0a246db195b9b65639cfa464983bd new file mode 100644 index 0000000000..55fd4dc112 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/1d2b7db82eb0a246db195b9b65639cfa464983bd differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/1f5ed631c1565f80f262294c775b7e5756bea13f b/fuzz/gnutls_dn_parser_fuzzer.in/1f5ed631c1565f80f262294c775b7e5756bea13f new file mode 100644 index 0000000000..009d19807f Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/1f5ed631c1565f80f262294c775b7e5756bea13f differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/202779f854d45e4c7730061dce038624c77c50f9 b/fuzz/gnutls_dn_parser_fuzzer.in/202779f854d45e4c7730061dce038624c77c50f9 new file mode 100644 index 0000000000..7fe7745c70 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/202779f854d45e4c7730061dce038624c77c50f9 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/254ffa066d805c699843822d4eaa4ad51be91196 b/fuzz/gnutls_dn_parser_fuzzer.in/254ffa066d805c699843822d4eaa4ad51be91196 new file mode 100644 index 0000000000..41851a4ec2 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/254ffa066d805c699843822d4eaa4ad51be91196 @@ -0,0 +1 @@ +010 \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/278f8eb49a5067921bcfc4cb5477ba335ded1f63 b/fuzz/gnutls_dn_parser_fuzzer.in/278f8eb49a5067921bcfc4cb5477ba335ded1f63 new file mode 100644 index 0000000000..d2a9bb8624 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/278f8eb49a5067921bcfc4cb5477ba335ded1f63 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/2813bbaf8874e07e761ac66b82f5637fc5940bae b/fuzz/gnutls_dn_parser_fuzzer.in/2813bbaf8874e07e761ac66b82f5637fc5940bae new file mode 100644 index 0000000000..28595dbf13 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/2813bbaf8874e07e761ac66b82f5637fc5940bae differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/2816aa17a3c747763c8f8e78b4e7806b59a8672d b/fuzz/gnutls_dn_parser_fuzzer.in/2816aa17a3c747763c8f8e78b4e7806b59a8672d new file mode 100644 index 0000000000..30a262c263 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/2816aa17a3c747763c8f8e78b4e7806b59a8672d @@ -0,0 +1 @@ +010 U\>\>\\ \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/288f1b9a2b04a3e218be7a1288517bff1cdd4cb6 b/fuzz/gnutls_dn_parser_fuzzer.in/288f1b9a2b04a3e218be7a1288517bff1cdd4cb6 new file mode 100644 index 0000000000..335293c072 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/288f1b9a2b04a3e218be7a1288517bff1cdd4cb6 @@ -0,0 +1 @@ +0'1 0 U)0 1 0 U 01 0 U 0 \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/28b817244b3303888b7cad5e0dde34f25cdd7acf b/fuzz/gnutls_dn_parser_fuzzer.in/28b817244b3303888b7cad5e0dde34f25cdd7acf new file mode 100644 index 0000000000..c4e89d1b24 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/28b817244b3303888b7cad5e0dde34f25cdd7acf differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/295d29545f9aeb1fee94578f8721b5b4b7f5f12b b/fuzz/gnutls_dn_parser_fuzzer.in/295d29545f9aeb1fee94578f8721b5b4b7f5f12b new file mode 100644 index 0000000000..8565ab429e --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/295d29545f9aeb1fee94578f8721b5b4b7f5f12b @@ -0,0 +1 @@ +0 1 0 U  \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/2b024772e3b1bbf8654bb201f48722ac30c1fb81 b/fuzz/gnutls_dn_parser_fuzzer.in/2b024772e3b1bbf8654bb201f48722ac30c1fb81 new file mode 100644 index 0000000000..c68e17b77f --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/2b024772e3b1bbf8654bb201f48722ac30c1fb81 @@ -0,0 +1 @@ +0 1 0 U);[ \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/2b15a7c9b34925835de52a58eb442c89083df099 b/fuzz/gnutls_dn_parser_fuzzer.in/2b15a7c9b34925835de52a58eb442c89083df099 new file mode 100644 index 0000000000..2ea60b7d26 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/2b15a7c9b34925835de52a58eb442c89083df099 @@ -0,0 +1,2 @@ +0&1$0"U +7ccccccccc77;;;;;;;;;;;;;p) \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/2d96a50eebdd07641e65de9c2636188f4aa2dced b/fuzz/gnutls_dn_parser_fuzzer.in/2d96a50eebdd07641e65de9c2636188f4aa2dced new file mode 100644 index 0000000000..8296f8b7ec --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/2d96a50eebdd07641e65de9c2636188f4aa2dced @@ -0,0 +1,3 @@ +01 0 U !1$0"U +hh,,,8,,,,,,,',),,,,,,ία10U Αττιή1 0 U1$0"U + hh,6,8,,,,,,,',),,,,,,GR \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/2e1830c8c91c1824984419f33f9467a7d856a7f8 b/fuzz/gnutls_dn_parser_fuzzer.in/2e1830c8c91c1824984419f33f9467a7d856a7f8 new file mode 100644 index 0000000000..844e5e3827 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/2e1830c8c91c1824984419f33f9467a7d856a7f8 @@ -0,0 +1,2 @@ +0&1$0"U +:sBBB8888\\\\\\\\8888\\\\88 \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/2e7e3cec541ef266124085222d87e5b65eeb0caf b/fuzz/gnutls_dn_parser_fuzzer.in/2e7e3cec541ef266124085222d87e5b65eeb0caf new file mode 100644 index 0000000000..47b74a0415 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/2e7e3cec541ef266124085222d87e5b65eeb0caf differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/313fa38665a8c7179f8b5bd72e6a7c3137d7f265 b/fuzz/gnutls_dn_parser_fuzzer.in/313fa38665a8c7179f8b5bd72e6a7c3137d7f265 new file mode 100644 index 0000000000..c901e3efac Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/313fa38665a8c7179f8b5bd72e6a7c3137d7f265 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/3208f63c10c889c794f055f4bf1b96536695cba3 b/fuzz/gnutls_dn_parser_fuzzer.in/3208f63c10c889c794f055f4bf1b96536695cba3 new file mode 100644 index 0000000000..54d4befb67 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/3208f63c10c889c794f055f4bf1b96536695cba3 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/323cd8cfbed17a9a8a23aaf752fa7e36ba3877bf b/fuzz/gnutls_dn_parser_fuzzer.in/323cd8cfbed17a9a8a23aaf752fa7e36ba3877bf new file mode 100644 index 0000000000..87d885b12e --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/323cd8cfbed17a9a8a23aaf752fa7e36ba3877bf @@ -0,0 +1,2 @@ +0&1$0"U +w,,vOw,,vOvOB,OvOw,,vOvOB,O \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/34955286ad5d2357d1510e8ea582aa945e5004f7 b/fuzz/gnutls_dn_parser_fuzzer.in/34955286ad5d2357d1510e8ea582aa945e5004f7 new file mode 100644 index 0000000000..b8a7781a44 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/34955286ad5d2357d1510e8ea582aa945e5004f7 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/3642b192c52600266744dba799bb92aef9ff762e b/fuzz/gnutls_dn_parser_fuzzer.in/3642b192c52600266744dba799bb92aef9ff762e new file mode 100644 index 0000000000..c2947242dd Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/3642b192c52600266744dba799bb92aef9ff762e differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/388016901ee84c54c9dc871530d42940d34d73e9 b/fuzz/gnutls_dn_parser_fuzzer.in/388016901ee84c54c9dc871530d42940d34d73e9 new file mode 100644 index 0000000000..668896880b --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/388016901ee84c54c9dc871530d42940d34d73e9 @@ -0,0 +1 @@ +041 0 U)11 0 U)^1 0 U)!1 0 U)1 \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/38ad4ba60f601d8cb1ec986154f419aaf0cee8fa b/fuzz/gnutls_dn_parser_fuzzer.in/38ad4ba60f601d8cb1ec986154f419aaf0cee8fa new file mode 100644 index 0000000000..ee3a2efbf0 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/38ad4ba60f601d8cb1ec986154f419aaf0cee8fa differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/38ad547f545378244727154e4a51daf6ea4b3665 b/fuzz/gnutls_dn_parser_fuzzer.in/38ad547f545378244727154e4a51daf6ea4b3665 new file mode 100644 index 0000000000..d703f8fc16 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/38ad547f545378244727154e4a51daf6ea4b3665 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/39e1301ac40f32c028c4562146b370ee7fd99271 b/fuzz/gnutls_dn_parser_fuzzer.in/39e1301ac40f32c028c4562146b370ee7fd99271 new file mode 100644 index 0000000000..238f2d4f2f Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/39e1301ac40f32c028c4562146b370ee7fd99271 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/3d15de3d6764ee59fba690c50022465c5b11ec52 b/fuzz/gnutls_dn_parser_fuzzer.in/3d15de3d6764ee59fba690c50022465c5b11ec52 new file mode 100644 index 0000000000..1d0818fd21 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/3d15de3d6764ee59fba690c50022465c5b11ec52 @@ -0,0 +1 @@ +041 0 U.641 0 U.041 0 U.641 0 U.11 \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/3da08a77c320db8f0c86d83fa634257800023373 b/fuzz/gnutls_dn_parser_fuzzer.in/3da08a77c320db8f0c86d83fa634257800023373 new file mode 100644 index 0000000000..d8fb596ee3 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/3da08a77c320db8f0c86d83fa634257800023373 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/3da8775c88e6f93563448bfe4234e6fb7beeddb5 b/fuzz/gnutls_dn_parser_fuzzer.in/3da8775c88e6f93563448bfe4234e6fb7beeddb5 new file mode 100644 index 0000000000..cfe9f89054 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/3da8775c88e6f93563448bfe4234e6fb7beeddb5 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/3e6e843940a4bc94a4e3e4337772cfbce1d6eb80 b/fuzz/gnutls_dn_parser_fuzzer.in/3e6e843940a4bc94a4e3e4337772cfbce1d6eb80 new file mode 100644 index 0000000000..6e75342f83 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/3e6e843940a4bc94a4e3e4337772cfbce1d6eb80 @@ -0,0 +1,2 @@ +0&1$0"U +wovRR<<<<><<<<<<<<<<>+>> \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/42d49d02f2c1bf758b9c6767ba5fa263a4df7857 b/fuzz/gnutls_dn_parser_fuzzer.in/42d49d02f2c1bf758b9c6767ba5fa263a4df7857 new file mode 100644 index 0000000000..414014fa10 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/42d49d02f2c1bf758b9c6767ba5fa263a4df7857 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/4422fb529180c446e5c7716a32293884764c2b9b b/fuzz/gnutls_dn_parser_fuzzer.in/4422fb529180c446e5c7716a32293884764c2b9b new file mode 100644 index 0000000000..c257183528 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/4422fb529180c446e5c7716a32293884764c2b9b differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/4451713732a771995cff3d3f948fb870e93a586f b/fuzz/gnutls_dn_parser_fuzzer.in/4451713732a771995cff3d3f948fb870e93a586f new file mode 100644 index 0000000000..18166b4ce4 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/4451713732a771995cff3d3f948fb870e93a586f @@ -0,0 +1 @@ +0+1 0 U31 0 U/ X 1 0 U #XX) \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/45dc2c73fe07b6f71f56d8097a7fdd504509350f b/fuzz/gnutls_dn_parser_fuzzer.in/45dc2c73fe07b6f71f56d8097a7fdd504509350f new file mode 100644 index 0000000000..18d557740e Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/45dc2c73fe07b6f71f56d8097a7fdd504509350f differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/472e20e0cbc1a273d43e74addd05f768eb19daa9 b/fuzz/gnutls_dn_parser_fuzzer.in/472e20e0cbc1a273d43e74addd05f768eb19daa9 new file mode 100644 index 0000000000..a745667933 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/472e20e0cbc1a273d43e74addd05f768eb19daa9 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/475f261bc235e7eb8f14da5d702b7affb0b963aa b/fuzz/gnutls_dn_parser_fuzzer.in/475f261bc235e7eb8f14da5d702b7affb0b963aa new file mode 100644 index 0000000000..4add8c0478 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/475f261bc235e7eb8f14da5d702b7affb0b963aa differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/48616511d73b47d7dee463eba6f56c4a11dd5709 b/fuzz/gnutls_dn_parser_fuzzer.in/48616511d73b47d7dee463eba6f56c4a11dd5709 new file mode 100644 index 0000000000..189e8543a7 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/48616511d73b47d7dee463eba6f56c4a11dd5709 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/49c29c8862885677f86b458087b64623f8e73f1c b/fuzz/gnutls_dn_parser_fuzzer.in/49c29c8862885677f86b458087b64623f8e73f1c new file mode 100644 index 0000000000..b1b9fed872 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/49c29c8862885677f86b458087b64623f8e73f1c differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/4bb400005e4d5d3778bf9c0e93023dfd9b663aef b/fuzz/gnutls_dn_parser_fuzzer.in/4bb400005e4d5d3778bf9c0e93023dfd9b663aef new file mode 100644 index 0000000000..70f5286e5d Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/4bb400005e4d5d3778bf9c0e93023dfd9b663aef differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/4e5880b4e535b414925956a8af706d902c6bdaa0 b/fuzz/gnutls_dn_parser_fuzzer.in/4e5880b4e535b414925956a8af706d902c6bdaa0 new file mode 100644 index 0000000000..7ce8a876bc Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/4e5880b4e535b414925956a8af706d902c6bdaa0 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/516bb50281fe19963196d261c1c7c3f108d6a6de b/fuzz/gnutls_dn_parser_fuzzer.in/516bb50281fe19963196d261c1c7c3f108d6a6de new file mode 100644 index 0000000000..5cb22cdd0f --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/516bb50281fe19963196d261c1c7c3f108d6a6de @@ -0,0 +1 @@ +0 1 0 U)E \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/528a6d64140947cc2240d01db4dc16bd0041b5ab b/fuzz/gnutls_dn_parser_fuzzer.in/528a6d64140947cc2240d01db4dc16bd0041b5ab new file mode 100644 index 0000000000..5615b5ed9d --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/528a6d64140947cc2240d01db4dc16bd0041b5ab @@ -0,0 +1,2 @@ +0&1$0"U +sO(N>>>:>>>>>>M>>(NsO(N>>>> \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/52aa9eb135d4ba88d6bd3abf3d9f33b51057aad1 b/fuzz/gnutls_dn_parser_fuzzer.in/52aa9eb135d4ba88d6bd3abf3d9f33b51057aad1 new file mode 100644 index 0000000000..2723eb6dae --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/52aa9eb135d4ba88d6bd3abf3d9f33b51057aad1 @@ -0,0 +1 @@ +0 1 0 ,] \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/53d4924fe9e3cce0993bb64d2e3fd89cb13c303d b/fuzz/gnutls_dn_parser_fuzzer.in/53d4924fe9e3cce0993bb64d2e3fd89cb13c303d new file mode 100644 index 0000000000..a194133e32 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/53d4924fe9e3cce0993bb64d2e3fd89cb13c303d differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/53e217f08054bbc7928288756b06af243bd5859e b/fuzz/gnutls_dn_parser_fuzzer.in/53e217f08054bbc7928288756b06af243bd5859e new file mode 100644 index 0000000000..b50dbf5633 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/53e217f08054bbc7928288756b06af243bd5859e differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/541a0f4bbed2e2163bebb514a52ae48c06bdc40e b/fuzz/gnutls_dn_parser_fuzzer.in/541a0f4bbed2e2163bebb514a52ae48c06bdc40e new file mode 100644 index 0000000000..efba1a0a53 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/541a0f4bbed2e2163bebb514a52ae48c06bdc40e @@ -0,0 +1 @@ +0 1 0 U)E< \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/54700e145337ce227933fb7458a9d3c6a62ea0bd b/fuzz/gnutls_dn_parser_fuzzer.in/54700e145337ce227933fb7458a9d3c6a62ea0bd new file mode 100644 index 0000000000..88d157ae43 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/54700e145337ce227933fb7458a9d3c6a62ea0bd @@ -0,0 +1 @@ +0V1 0 U,1 0 U, l0+1 0 U,1 0 U, l 1 0 U, l h1 0 U, l h \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/55198bc999d1bdeeda53f2279dfc700f5be33668 b/fuzz/gnutls_dn_parser_fuzzer.in/55198bc999d1bdeeda53f2279dfc700f5be33668 new file mode 100644 index 0000000000..45af8401f0 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/55198bc999d1bdeeda53f2279dfc700f5be33668 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/574a19917559bdb553ed141ff80db13c027b1c8e b/fuzz/gnutls_dn_parser_fuzzer.in/574a19917559bdb553ed141ff80db13c027b1c8e new file mode 100644 index 0000000000..5b10ea1b13 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/574a19917559bdb553ed141ff80db13c027b1c8e @@ -0,0 +1 @@ +0+1 0 U1 0 U X 1 0 U #XX) \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/59ac3f21a96a581fc05f630ef2104bc30ccfb49a b/fuzz/gnutls_dn_parser_fuzzer.in/59ac3f21a96a581fc05f630ef2104bc30ccfb49a new file mode 100644 index 0000000000..762df0a0f8 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/59ac3f21a96a581fc05f630ef2104bc30ccfb49a @@ -0,0 +1 @@ +0'1 0 U)Z1 0 U)Z'1 0 U)ZZ \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/59c3682bd05d385f6fd85e0ed2617d66268b9336 b/fuzz/gnutls_dn_parser_fuzzer.in/59c3682bd05d385f6fd85e0ed2617d66268b9336 new file mode 100644 index 0000000000..788025df1b --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/59c3682bd05d385f6fd85e0ed2617d66268b9336 @@ -0,0 +1 @@ +010 U n+>: \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/5a398c984cb8c1ff0c0f60f854b253975bd6e9e6 b/fuzz/gnutls_dn_parser_fuzzer.in/5a398c984cb8c1ff0c0f60f854b253975bd6e9e6 new file mode 100644 index 0000000000..43cc24deae Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/5a398c984cb8c1ff0c0f60f854b253975bd6e9e6 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/5ac100fcb2c74d807ba59fde648e40e450b7bf52 b/fuzz/gnutls_dn_parser_fuzzer.in/5ac100fcb2c74d807ba59fde648e40e450b7bf52 new file mode 100644 index 0000000000..3625a14fb5 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/5ac100fcb2c74d807ba59fde648e40e450b7bf52 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/5b1a7f26e0337ae32a36aae53a73e283eb9c47ef b/fuzz/gnutls_dn_parser_fuzzer.in/5b1a7f26e0337ae32a36aae53a73e283eb9c47ef new file mode 100644 index 0000000000..5b46dee450 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/5b1a7f26e0337ae32a36aae53a73e283eb9c47ef differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/5cfbddb19f18e48d3dee70a74da24e75203bdfdd b/fuzz/gnutls_dn_parser_fuzzer.in/5cfbddb19f18e48d3dee70a74da24e75203bdfdd new file mode 100644 index 0000000000..086268b89e Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/5cfbddb19f18e48d3dee70a74da24e75203bdfdd differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/5d5998bdb42f1b567b081ce1df4e165c6b8179d9 b/fuzz/gnutls_dn_parser_fuzzer.in/5d5998bdb42f1b567b081ce1df4e165c6b8179d9 new file mode 100644 index 0000000000..9f7be8675d --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/5d5998bdb42f1b567b081ce1df4e165c6b8179d9 @@ -0,0 +1 @@ +0 1 0 U)E\ \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/5e5b1d4b1088398ed6df08ebb4f49f63d2488652 b/fuzz/gnutls_dn_parser_fuzzer.in/5e5b1d4b1088398ed6df08ebb4f49f63d2488652 new file mode 100644 index 0000000000..bded277b00 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/5e5b1d4b1088398ed6df08ebb4f49f63d2488652 @@ -0,0 +1 @@ +0h1 0 U.1 0 U.1 0 U.)1 0 U1 0 U.1 0 U.1 0 U.)1 0 U0 \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/5e63ecea347c3d97f0cd6873959cc5dca82fbdd9 b/fuzz/gnutls_dn_parser_fuzzer.in/5e63ecea347c3d97f0cd6873959cc5dca82fbdd9 new file mode 100644 index 0000000000..0b7a2d4cc4 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/5e63ecea347c3d97f0cd6873959cc5dca82fbdd9 @@ -0,0 +1 @@ +0 1 0 U)K" \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/60ecf0fef1bab6a81381cb6e5944ccc2f5be65a7 b/fuzz/gnutls_dn_parser_fuzzer.in/60ecf0fef1bab6a81381cb6e5944ccc2f5be65a7 new file mode 100644 index 0000000000..1a44a7a1b9 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/60ecf0fef1bab6a81381cb6e5944ccc2f5be65a7 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/634e73b784113cabac2167da8e8f67fe97bd015a b/fuzz/gnutls_dn_parser_fuzzer.in/634e73b784113cabac2167da8e8f67fe97bd015a new file mode 100644 index 0000000000..e1405c0647 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/634e73b784113cabac2167da8e8f67fe97bd015a differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/647ba6fc94fafb51177696f18b80f2deb3528e71 b/fuzz/gnutls_dn_parser_fuzzer.in/647ba6fc94fafb51177696f18b80f2deb3528e71 new file mode 100644 index 0000000000..76d3cc462f --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/647ba6fc94fafb51177696f18b80f2deb3528e71 @@ -0,0 +1 @@ +010 U -&">""] \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/76a445d241d5815857243b46cb7f4048c34942ed b/fuzz/gnutls_dn_parser_fuzzer.in/76a445d241d5815857243b46cb7f4048c34942ed new file mode 100644 index 0000000000..9ffa818e61 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/76a445d241d5815857243b46cb7f4048c34942ed @@ -0,0 +1 @@ +0+1 0 U1 0 U#XX)1 0 U #XX) \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/76b51e5ff9079ff7d641a50c1d66a5a74c017235 b/fuzz/gnutls_dn_parser_fuzzer.in/76b51e5ff9079ff7d641a50c1d66a5a74c017235 new file mode 100644 index 0000000000..f28af7fc53 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/76b51e5ff9079ff7d641a50c1d66a5a74c017235 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/76d060fb6c764d572555aef1ab4f29ec3ab54a14 b/fuzz/gnutls_dn_parser_fuzzer.in/76d060fb6c764d572555aef1ab4f29ec3ab54a14 new file mode 100644 index 0000000000..59946a98c1 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/76d060fb6c764d572555aef1ab4f29ec3ab54a14 @@ -0,0 +1 @@ +0+1 0 UXX1 0 U#XXX1 0 U#XXX \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/782cad6cd95b6deb65d4aa75a64c3f063dc1d584 b/fuzz/gnutls_dn_parser_fuzzer.in/782cad6cd95b6deb65d4aa75a64c3f063dc1d584 new file mode 100644 index 0000000000..694df8b239 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/782cad6cd95b6deb65d4aa75a64c3f063dc1d584 @@ -0,0 +1,2 @@ +0&1$0"U +w,,,,,,,,,,,,,,,vOvBO,vOvRI \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/789ebdaddb24d2ccb240de76b96c9a5d6666ea20 b/fuzz/gnutls_dn_parser_fuzzer.in/789ebdaddb24d2ccb240de76b96c9a5d6666ea20 new file mode 100644 index 0000000000..b8aefb26f8 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/789ebdaddb24d2ccb240de76b96c9a5d6666ea20 @@ -0,0 +1 @@ +041 0 U)9 1 0 U)9 1 0 U)9 1 0 U)9 \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/7c985a37a1d28fcec37680999f47ab8e88bf5952 b/fuzz/gnutls_dn_parser_fuzzer.in/7c985a37a1d28fcec37680999f47ab8e88bf5952 new file mode 100644 index 0000000000..e6c3cd796b --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/7c985a37a1d28fcec37680999f47ab8e88bf5952 @@ -0,0 +1 @@ +0h1 0 U, 1 0 U, 1 0 U, 1 0 U, 1 0 U, 1 0 U, 1 0 U, 1 0 U, \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/7cedc9cf671e93bdd9b9b5a23975a5ec592d63dc b/fuzz/gnutls_dn_parser_fuzzer.in/7cedc9cf671e93bdd9b9b5a23975a5ec592d63dc new file mode 100644 index 0000000000..923bbf3c26 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/7cedc9cf671e93bdd9b9b5a23975a5ec592d63dc differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/7e15e976de861b3396c9107fc16f9185f7bda3ff b/fuzz/gnutls_dn_parser_fuzzer.in/7e15e976de861b3396c9107fc16f9185f7bda3ff new file mode 100644 index 0000000000..4163174923 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/7e15e976de861b3396c9107fc16f9185f7bda3ff @@ -0,0 +1 @@ +0j1 0 U;;🐥1 0 U{;71$0"U;i0 p0ppppppppppppppp109094:1$0"Ui)))p0ppppppppppppppp109094 \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/7f2d0610d543e5ea65b4fa18e051c40f5ad4e00a b/fuzz/gnutls_dn_parser_fuzzer.in/7f2d0610d543e5ea65b4fa18e051c40f5ad4e00a new file mode 100644 index 0000000000..a02ce49be9 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/7f2d0610d543e5ea65b4fa18e051c40f5ad4e00a @@ -0,0 +1,2 @@ +0&1$0"U +wovRR<<<<<<<<<<<<<<<>>>>><>>>>%I"7>>>>>>hhh1 0 pW1$0"U +*"7>>>>>><>>>>%I"7>>>>>>\>] \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/8a956977d328e3f1d796c456ba7fbf98edc119fa b/fuzz/gnutls_dn_parser_fuzzer.in/8a956977d328e3f1d796c456ba7fbf98edc119fa new file mode 100644 index 0000000000..a41dd3af16 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/8a956977d328e3f1d796c456ba7fbf98edc119fa @@ -0,0 +1,2 @@ +0Y1 0 U 🐨1$0"U +Μεγάλη εταιρία10U Αττική1 0 U&GR \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/8ae8556585d6cd57dca275567096a252675270bf b/fuzz/gnutls_dn_parser_fuzzer.in/8ae8556585d6cd57dca275567096a252675270bf new file mode 100644 index 0000000000..75bd960706 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/8ae8556585d6cd57dca275567096a252675270bf differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/8e0547e2921304e8ccb717b10015673173a098a3 b/fuzz/gnutls_dn_parser_fuzzer.in/8e0547e2921304e8ccb717b10015673173a098a3 new file mode 100644 index 0000000000..14bb75633d Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/8e0547e2921304e8ccb717b10015673173a098a3 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/8e42977f9d494e46a9f3e29f3e51867e9d1e9b92 b/fuzz/gnutls_dn_parser_fuzzer.in/8e42977f9d494e46a9f3e29f3e51867e9d1e9b92 new file mode 100644 index 0000000000..366dc0cdc9 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/8e42977f9d494e46a9f3e29f3e51867e9d1e9b92 @@ -0,0 +1,2 @@ +0&1$0"U ++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/9080df49cc671d4acca69ff68b49fa27543ffbaf b/fuzz/gnutls_dn_parser_fuzzer.in/9080df49cc671d4acca69ff68b49fa27543ffbaf new file mode 100644 index 0000000000..e657b281a5 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/9080df49cc671d4acca69ff68b49fa27543ffbaf differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/914a12eedae81ecce91cf6d46450116d52a35681 b/fuzz/gnutls_dn_parser_fuzzer.in/914a12eedae81ecce91cf6d46450116d52a35681 new file mode 100644 index 0000000000..6f071b03b4 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/914a12eedae81ecce91cf6d46450116d52a35681 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/91805a7a6b961e5a9aaa3ad3cda11c799cfc2d88 b/fuzz/gnutls_dn_parser_fuzzer.in/91805a7a6b961e5a9aaa3ad3cda11c799cfc2d88 new file mode 100644 index 0000000000..e351614626 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/91805a7a6b961e5a9aaa3ad3cda11c799cfc2d88 @@ -0,0 +1 @@ +010 U ,,x,,x \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/92f69736258f315964154624c8a93505c601f999 b/fuzz/gnutls_dn_parser_fuzzer.in/92f69736258f315964154624c8a93505c601f999 new file mode 100644 index 0000000000..10d7267354 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/92f69736258f315964154624c8a93505c601f999 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/93e71bc237cdec3f813cae906a9e840bd6d8cc21 b/fuzz/gnutls_dn_parser_fuzzer.in/93e71bc237cdec3f813cae906a9e840bd6d8cc21 new file mode 100644 index 0000000000..d966530eec Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/93e71bc237cdec3f813cae906a9e840bd6d8cc21 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/940d4af4ee4ed959863f71439660d5553c7d2590 b/fuzz/gnutls_dn_parser_fuzzer.in/940d4af4ee4ed959863f71439660d5553c7d2590 new file mode 100644 index 0000000000..23febd8e21 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/940d4af4ee4ed959863f71439660d5553c7d2590 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/9430dbaf658ca5e9c2753d53244afd3e522da8a1 b/fuzz/gnutls_dn_parser_fuzzer.in/9430dbaf658ca5e9c2753d53244afd3e522da8a1 new file mode 100644 index 0000000000..4b26021860 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/9430dbaf658ca5e9c2753d53244afd3e522da8a1 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/971057504f341b9079a11187bb6039c268104418 b/fuzz/gnutls_dn_parser_fuzzer.in/971057504f341b9079a11187bb6039c268104418 new file mode 100644 index 0000000000..598de65001 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/971057504f341b9079a11187bb6039c268104418 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/977050aafba850f50d2f27ec61c682c81e49d25d b/fuzz/gnutls_dn_parser_fuzzer.in/977050aafba850f50d2f27ec61c682c81e49d25d new file mode 100644 index 0000000000..c7eb97bec3 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/977050aafba850f50d2f27ec61c682c81e49d25d differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/999a6471c1e652ebe69d2bff4ad094b8f19bf52e b/fuzz/gnutls_dn_parser_fuzzer.in/999a6471c1e652ebe69d2bff4ad094b8f19bf52e new file mode 100644 index 0000000000..0c218d1fee --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/999a6471c1e652ebe69d2bff4ad094b8f19bf52e @@ -0,0 +1,2 @@ +0Y1 0 U 1$0"U +++++++++++++++++++++++BBBBB10U BB++++++++++1 0 UGR \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/9a5da3e1f45b46810d2e69a6216f3969fb8b5a0e b/fuzz/gnutls_dn_parser_fuzzer.in/9a5da3e1f45b46810d2e69a6216f3969fb8b5a0e new file mode 100644 index 0000000000..b81675c7fc Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/9a5da3e1f45b46810d2e69a6216f3969fb8b5a0e differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/9a6e529720d9b42987104712b5f55d8b2afac16f b/fuzz/gnutls_dn_parser_fuzzer.in/9a6e529720d9b42987104712b5f55d8b2afac16f new file mode 100644 index 0000000000..3366484233 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/9a6e529720d9b42987104712b5f55d8b2afac16f @@ -0,0 +1 @@ +010 U -&<<<< \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/9bf95dfffa2a936e6f0668726e538f5181843cec b/fuzz/gnutls_dn_parser_fuzzer.in/9bf95dfffa2a936e6f0668726e538f5181843cec new file mode 100644 index 0000000000..e46f3ff129 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/9bf95dfffa2a936e6f0668726e538f5181843cec @@ -0,0 +1 @@ +0+1 0 U, 1 0 U  X 1 0 U$ #XXX \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/9d0ec6fb67254ec791ed6fbf9c191a2402e7c939 b/fuzz/gnutls_dn_parser_fuzzer.in/9d0ec6fb67254ec791ed6fbf9c191a2402e7c939 new file mode 100644 index 0000000000..4d71255207 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/9d0ec6fb67254ec791ed6fbf9c191a2402e7c939 @@ -0,0 +1,2 @@ +0&1$0"U +7cccc77;;;;7;;;;;;;;;;;;;p) \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/9d5772e2495e88a3deb3dd0a53e38538606a347b b/fuzz/gnutls_dn_parser_fuzzer.in/9d5772e2495e88a3deb3dd0a53e38538606a347b new file mode 100644 index 0000000000..2f6e0464be Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/9d5772e2495e88a3deb3dd0a53e38538606a347b differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/9db8a9c1806f3ffae74c8395a72c2254fd4a4b8b b/fuzz/gnutls_dn_parser_fuzzer.in/9db8a9c1806f3ffae74c8395a72c2254fd4a4b8b new file mode 100644 index 0000000000..78a7e6cb2f Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/9db8a9c1806f3ffae74c8395a72c2254fd4a4b8b differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/9e299f58ecd71cfb38f25d8b770e7f9c86d91f6c b/fuzz/gnutls_dn_parser_fuzzer.in/9e299f58ecd71cfb38f25d8b770e7f9c86d91f6c new file mode 100644 index 0000000000..7573a90f87 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/9e299f58ecd71cfb38f25d8b770e7f9c86d91f6c differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/9eaddecd144098df104d4508fbd572077c7acce4 b/fuzz/gnutls_dn_parser_fuzzer.in/9eaddecd144098df104d4508fbd572077c7acce4 new file mode 100644 index 0000000000..b7b8fe9693 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/9eaddecd144098df104d4508fbd572077c7acce4 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/a0b7c12d3d552754166573fec1a14bfebe8931fe b/fuzz/gnutls_dn_parser_fuzzer.in/a0b7c12d3d552754166573fec1a14bfebe8931fe new file mode 100644 index 0000000000..104cc53238 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/a0b7c12d3d552754166573fec1a14bfebe8931fe @@ -0,0 +1 @@ +0 1 0 U)ES \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/a202f898139cb54b3319b7dade1c4ac0a0cc4f1f b/fuzz/gnutls_dn_parser_fuzzer.in/a202f898139cb54b3319b7dade1c4ac0a0cc4f1f new file mode 100644 index 0000000000..93121d76ea --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/a202f898139cb54b3319b7dade1c4ac0a0cc4f1f @@ -0,0 +1 @@ +01 0 U);;{; \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/a308d0abdd67286bee76217224b6d85784042f0c b/fuzz/gnutls_dn_parser_fuzzer.in/a308d0abdd67286bee76217224b6d85784042f0c new file mode 100644 index 0000000000..4ad4c6db07 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/a308d0abdd67286bee76217224b6d85784042f0c @@ -0,0 +1 @@ +0 1 0 U) S \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/a3a5c7939ea4841f952cd665fed9799c9fb1b6fa b/fuzz/gnutls_dn_parser_fuzzer.in/a3a5c7939ea4841f952cd665fed9799c9fb1b6fa new file mode 100644 index 0000000000..b7a62bfd01 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/a3a5c7939ea4841f952cd665fed9799c9fb1b6fa differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/aa07da6178b7f82ef8e2aaa1c55c62c43934bb70 b/fuzz/gnutls_dn_parser_fuzzer.in/aa07da6178b7f82ef8e2aaa1c55c62c43934bb70 new file mode 100644 index 0000000000..b3ca3c3dc0 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/aa07da6178b7f82ef8e2aaa1c55c62c43934bb70 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/aa714d2f0abe8f590f28b25716e56120f952b8c7 b/fuzz/gnutls_dn_parser_fuzzer.in/aa714d2f0abe8f590f28b25716e56120f952b8c7 new file mode 100644 index 0000000000..6e3f36cec3 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/aa714d2f0abe8f590f28b25716e56120f952b8c7 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/af63d81647ec7ebcf94181c77b7f0786a39765c6 b/fuzz/gnutls_dn_parser_fuzzer.in/af63d81647ec7ebcf94181c77b7f0786a39765c6 new file mode 100644 index 0000000000..b8fc3aba77 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/af63d81647ec7ebcf94181c77b7f0786a39765c6 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/afb518318c9bfed5b07870dfc0dec5b0fe6d5e29 b/fuzz/gnutls_dn_parser_fuzzer.in/afb518318c9bfed5b07870dfc0dec5b0fe6d5e29 new file mode 100644 index 0000000000..ece1772406 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/afb518318c9bfed5b07870dfc0dec5b0fe6d5e29 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/aff41c79fd106429f26b3bb9c3aaeec3c1ba5bcd b/fuzz/gnutls_dn_parser_fuzzer.in/aff41c79fd106429f26b3bb9c3aaeec3c1ba5bcd new file mode 100644 index 0000000000..33deb786a9 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/aff41c79fd106429f26b3bb9c3aaeec3c1ba5bcd differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/b14b100cd71ddf972df942e873d5146354065c19 b/fuzz/gnutls_dn_parser_fuzzer.in/b14b100cd71ddf972df942e873d5146354065c19 new file mode 100644 index 0000000000..4a5ca89aa3 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/b14b100cd71ddf972df942e873d5146354065c19 @@ -0,0 +1 @@ +0+1 0 U1 0 U X 1 0 U#XX) \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/b180e1d3b16c24cd42890cae676e570822829344 b/fuzz/gnutls_dn_parser_fuzzer.in/b180e1d3b16c24cd42890cae676e570822829344 new file mode 100644 index 0000000000..83fca8406f Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/b180e1d3b16c24cd42890cae676e570822829344 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/b65f2a445e6103c20e838848ad4fc0c56dd053f7 b/fuzz/gnutls_dn_parser_fuzzer.in/b65f2a445e6103c20e838848ad4fc0c56dd053f7 new file mode 100644 index 0000000000..2229c98ce2 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/b65f2a445e6103c20e838848ad4fc0c56dd053f7 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/b7d7589b3dfc7df077674df776ed9ddbec3c5093 b/fuzz/gnutls_dn_parser_fuzzer.in/b7d7589b3dfc7df077674df776ed9ddbec3c5093 new file mode 100644 index 0000000000..2e8838af6d --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/b7d7589b3dfc7df077674df776ed9ddbec3c5093 @@ -0,0 +1,2 @@ +0&1$0"U ++++++++++++++++ \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/b88e1608c177956fec350f1d22c7ef0c6fc38666 b/fuzz/gnutls_dn_parser_fuzzer.in/b88e1608c177956fec350f1d22c7ef0c6fc38666 new file mode 100644 index 0000000000..c72efba4cd Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/b88e1608c177956fec350f1d22c7ef0c6fc38666 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/b93418259ad2b44330179025a74aa5bcbac63927 b/fuzz/gnutls_dn_parser_fuzzer.in/b93418259ad2b44330179025a74aa5bcbac63927 new file mode 100644 index 0000000000..5ed84e7dea Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/b93418259ad2b44330179025a74aa5bcbac63927 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/bb096f7ea004313746967ad22fe0881a6c50b6d9 b/fuzz/gnutls_dn_parser_fuzzer.in/bb096f7ea004313746967ad22fe0881a6c50b6d9 new file mode 100644 index 0000000000..5d67489517 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/bb096f7ea004313746967ad22fe0881a6c50b6d9 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/be7e9a78e67188df4b5d0b1c27148d5abbfe9c66 b/fuzz/gnutls_dn_parser_fuzzer.in/be7e9a78e67188df4b5d0b1c27148d5abbfe9c66 new file mode 100644 index 0000000000..a4fcd47413 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/be7e9a78e67188df4b5d0b1c27148d5abbfe9c66 @@ -0,0 +1,2 @@ +0Y1 0 U !(1$0"U +4\\\\\\\\\\\\\\\\\\\\\\111110U  \\\\\\\\\\\\1 0 U)GR \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/c1b7ec184d2c1046a6243be62820f2b531338814 b/fuzz/gnutls_dn_parser_fuzzer.in/c1b7ec184d2c1046a6243be62820f2b531338814 new file mode 100644 index 0000000000..7e0751c180 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/c1b7ec184d2c1046a6243be62820f2b531338814 @@ -0,0 +1 @@ +0+1 0 U) ,1 0 U  X 1 0 U  X \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/c29005f7ce105fae869c524757c034ea18ea0592 b/fuzz/gnutls_dn_parser_fuzzer.in/c29005f7ce105fae869c524757c034ea18ea0592 new file mode 100644 index 0000000000..c1f59e83a6 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/c29005f7ce105fae869c524757c034ea18ea0592 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/c327181f7bc2e29fd3c61f2af9ecfc23bcb99243 b/fuzz/gnutls_dn_parser_fuzzer.in/c327181f7bc2e29fd3c61f2af9ecfc23bcb99243 new file mode 100644 index 0000000000..672e1648fc Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/c327181f7bc2e29fd3c61f2af9ecfc23bcb99243 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/c37e181ad64a48cb0e4b38aa5e7da5fd627b0925 b/fuzz/gnutls_dn_parser_fuzzer.in/c37e181ad64a48cb0e4b38aa5e7da5fd627b0925 new file mode 100644 index 0000000000..02e83c022a --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/c37e181ad64a48cb0e4b38aa5e7da5fd627b0925 @@ -0,0 +1 @@ +0 1 0 U);; \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/c429ad6e595435afd68b7510c26ad5b497df01ec b/fuzz/gnutls_dn_parser_fuzzer.in/c429ad6e595435afd68b7510c26ad5b497df01ec new file mode 100644 index 0000000000..c88d11e687 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/c429ad6e595435afd68b7510c26ad5b497df01ec @@ -0,0 +1 @@ +0Y1 0 U 🐨1$0"U Μεγάλη εταιρία10U Αττική1 0 UGR \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/c4f9d884444f75d75934607ebd0b2cf7282b3405 b/fuzz/gnutls_dn_parser_fuzzer.in/c4f9d884444f75d75934607ebd0b2cf7282b3405 new file mode 100644 index 0000000000..6e1eb31f66 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/c4f9d884444f75d75934607ebd0b2cf7282b3405 @@ -0,0 +1 @@ +0h1 0 U,1 0 U,1 0 U,1 0 U,1 0 U,1 0 U,1 0 U,1 0 U, \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/c521e7f0357f8def89c1fe061afafb77f25b7aff b/fuzz/gnutls_dn_parser_fuzzer.in/c521e7f0357f8def89c1fe061afafb77f25b7aff new file mode 100644 index 0000000000..86d9f5ca48 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/c521e7f0357f8def89c1fe061afafb77f25b7aff differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/c5e35962edc6e080e83bc9b568d507d80a0856ac b/fuzz/gnutls_dn_parser_fuzzer.in/c5e35962edc6e080e83bc9b568d507d80a0856ac new file mode 100644 index 0000000000..2cf9ac1766 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/c5e35962edc6e080e83bc9b568d507d80a0856ac differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/c6c2b1027fc6a51b782eec4fae607126b4c7e330 b/fuzz/gnutls_dn_parser_fuzzer.in/c6c2b1027fc6a51b782eec4fae607126b4c7e330 new file mode 100644 index 0000000000..84876b3a46 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/c6c2b1027fc6a51b782eec4fae607126b4c7e330 @@ -0,0 +1 @@ +0 1 0 U)>S \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/ca6b3f8363abd02d99d6fc1302cec31f08c20a05 b/fuzz/gnutls_dn_parser_fuzzer.in/ca6b3f8363abd02d99d6fc1302cec31f08c20a05 new file mode 100644 index 0000000000..8fe2a96df3 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/ca6b3f8363abd02d99d6fc1302cec31f08c20a05 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/ccea0195a0d53f7fb6d457e3d688666c7a872c98 b/fuzz/gnutls_dn_parser_fuzzer.in/ccea0195a0d53f7fb6d457e3d688666c7a872c98 new file mode 100644 index 0000000000..aec87a6c31 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/ccea0195a0d53f7fb6d457e3d688666c7a872c98 @@ -0,0 +1 @@ +0 1 0 U)ES \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/ce0c6f731f8bb37634ce9b66339c382bd09990ab b/fuzz/gnutls_dn_parser_fuzzer.in/ce0c6f731f8bb37634ce9b66339c382bd09990ab new file mode 100644 index 0000000000..065d38726b --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/ce0c6f731f8bb37634ce9b66339c382bd09990ab @@ -0,0 +1 @@ +010 U -&>: \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/ce444f46ee7a1eae47fa8767cc05d51975714599 b/fuzz/gnutls_dn_parser_fuzzer.in/ce444f46ee7a1eae47fa8767cc05d51975714599 new file mode 100644 index 0000000000..82078d0ef6 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/ce444f46ee7a1eae47fa8767cc05d51975714599 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d13d06494aa958ec67e3f5dedbbbbdc1f7024b9d b/fuzz/gnutls_dn_parser_fuzzer.in/d13d06494aa958ec67e3f5dedbbbbdc1f7024b9d new file mode 100644 index 0000000000..db6248bc20 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/d13d06494aa958ec67e3f5dedbbbbdc1f7024b9d @@ -0,0 +1 @@ +010 U ,A>+,A \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d141b228c06a564e3c464ef3b81e56117966f16d b/fuzz/gnutls_dn_parser_fuzzer.in/d141b228c06a564e3c464ef3b81e56117966f16d new file mode 100644 index 0000000000..64116d079a Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/d141b228c06a564e3c464ef3b81e56117966f16d differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d18c435f3a4b412812067d42c2136e6a804b04f1 b/fuzz/gnutls_dn_parser_fuzzer.in/d18c435f3a4b412812067d42c2136e6a804b04f1 new file mode 100644 index 0000000000..870257364a --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/d18c435f3a4b412812067d42c2136e6a804b04f1 @@ -0,0 +1 @@ +010 U\<>\>\ \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d409ebd1849738ca706e88180be1a2fb55c5f52a b/fuzz/gnutls_dn_parser_fuzzer.in/d409ebd1849738ca706e88180be1a2fb55c5f52a new file mode 100644 index 0000000000..ed7a4e42fd Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/d409ebd1849738ca706e88180be1a2fb55c5f52a differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d41dc1e381fdd20b1675d12a7bf2c1645e9f09cc b/fuzz/gnutls_dn_parser_fuzzer.in/d41dc1e381fdd20b1675d12a7bf2c1645e9f09cc new file mode 100644 index 0000000000..d6025dcab7 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/d41dc1e381fdd20b1675d12a7bf2c1645e9f09cc @@ -0,0 +1 @@ +010 U -=-==- \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d44032301ef094e0337421962837924d9cbff0df b/fuzz/gnutls_dn_parser_fuzzer.in/d44032301ef094e0337421962837924d9cbff0df new file mode 100644 index 0000000000..967a7bc573 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/d44032301ef094e0337421962837924d9cbff0df differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d474d237887c610a62945febbe18c675e01d3995 b/fuzz/gnutls_dn_parser_fuzzer.in/d474d237887c610a62945febbe18c675e01d3995 new file mode 100644 index 0000000000..2f71ef4ca9 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/d474d237887c610a62945febbe18c675e01d3995 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d563eab3423f1c83d067c497682bf83de2bb544d b/fuzz/gnutls_dn_parser_fuzzer.in/d563eab3423f1c83d067c497682bf83de2bb544d new file mode 100644 index 0000000000..dbd58b5c57 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/d563eab3423f1c83d067c497682bf83de2bb544d @@ -0,0 +1,2 @@ +0&1$0"U +sO(N>>>>>>>>>>>>>(N>>>>>>>> \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d609125300a3bf8c4638c1ee21293106c4155bd7 b/fuzz/gnutls_dn_parser_fuzzer.in/d609125300a3bf8c4638c1ee21293106c4155bd7 new file mode 100644 index 0000000000..8b55c2e405 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/d609125300a3bf8c4638c1ee21293106c4155bd7 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d64bed0b1112f5e11035959ae2313e98ae5e126c b/fuzz/gnutls_dn_parser_fuzzer.in/d64bed0b1112f5e11035959ae2313e98ae5e126c new file mode 100644 index 0000000000..a112f3503d Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/d64bed0b1112f5e11035959ae2313e98ae5e126c differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d6b2f8e76e6efaaa78e00bf8073b02e51c2e6960 b/fuzz/gnutls_dn_parser_fuzzer.in/d6b2f8e76e6efaaa78e00bf8073b02e51c2e6960 new file mode 100644 index 0000000000..6e1de48d0e --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/d6b2f8e76e6efaaa78e00bf8073b02e51c2e6960 @@ -0,0 +1 @@ +0h1 0 U b1 0 U b1 0 U )1 0 U )1 0 U b1 0 U )1 0 U b1 0 U b \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d7f3f566c43178da8cf87a201d5393e6a5ff021e b/fuzz/gnutls_dn_parser_fuzzer.in/d7f3f566c43178da8cf87a201d5393e6a5ff021e new file mode 100644 index 0000000000..b0d1a77708 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/d7f3f566c43178da8cf87a201d5393e6a5ff021e @@ -0,0 +1 @@ +010 U\<>]]] \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/d9882d369980d1377e84bb7d1299df61c382bd93 b/fuzz/gnutls_dn_parser_fuzzer.in/d9882d369980d1377e84bb7d1299df61c382bd93 new file mode 100644 index 0000000000..d321015854 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/d9882d369980d1377e84bb7d1299df61c382bd93 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/da3323028517d04a54c9ce1f36c7d48241e36173 b/fuzz/gnutls_dn_parser_fuzzer.in/da3323028517d04a54c9ce1f36c7d48241e36173 new file mode 100644 index 0000000000..1229898a1d Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/da3323028517d04a54c9ce1f36c7d48241e36173 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/db07e292d6a6141ce70a4448647dc3dbf23d608d b/fuzz/gnutls_dn_parser_fuzzer.in/db07e292d6a6141ce70a4448647dc3dbf23d608d new file mode 100644 index 0000000000..4bd7d98bca Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/db07e292d6a6141ce70a4448647dc3dbf23d608d differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/dd3f00c294d54d48a385956e7906a050437e3b9d b/fuzz/gnutls_dn_parser_fuzzer.in/dd3f00c294d54d48a385956e7906a050437e3b9d new file mode 100644 index 0000000000..82c4226c3a Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/dd3f00c294d54d48a385956e7906a050437e3b9d differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/ddda2995bd6b3ea261028da59df1d4054a030da3 b/fuzz/gnutls_dn_parser_fuzzer.in/ddda2995bd6b3ea261028da59df1d4054a030da3 new file mode 100644 index 0000000000..3157c89e6d --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/ddda2995bd6b3ea261028da59df1d4054a030da3 @@ -0,0 +1 @@ +0'1 0 U)1 0 U)'1 0 U)* \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/e024479d407dea23e1c509a35caad5d3d004ac3a b/fuzz/gnutls_dn_parser_fuzzer.in/e024479d407dea23e1c509a35caad5d3d004ac3a new file mode 100644 index 0000000000..46656de853 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/e024479d407dea23e1c509a35caad5d3d004ac3a differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/e1d0431e9bdae13eb55b94b5469cd533319233d9 b/fuzz/gnutls_dn_parser_fuzzer.in/e1d0431e9bdae13eb55b94b5469cd533319233d9 new file mode 100644 index 0000000000..58f6bd49f5 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/e1d0431e9bdae13eb55b94b5469cd533319233d9 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/e3c82b2b65230f280544cc1756a787f357aa4632 b/fuzz/gnutls_dn_parser_fuzzer.in/e3c82b2b65230f280544cc1756a787f357aa4632 new file mode 100644 index 0000000000..4e1dabeae4 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/e3c82b2b65230f280544cc1756a787f357aa4632 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/e7753d1897cc8fc32805385c445beeb5fd354a54 b/fuzz/gnutls_dn_parser_fuzzer.in/e7753d1897cc8fc32805385c445beeb5fd354a54 new file mode 100644 index 0000000000..40819f22f7 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/e7753d1897cc8fc32805385c445beeb5fd354a54 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/e8473e1ca2a102e8287bbb483878845142380fd5 b/fuzz/gnutls_dn_parser_fuzzer.in/e8473e1ca2a102e8287bbb483878845142380fd5 new file mode 100644 index 0000000000..0c6d70e248 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/e8473e1ca2a102e8287bbb483878845142380fd5 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/e9292a9736ab79e7dc43961406c708a8384d9a14 b/fuzz/gnutls_dn_parser_fuzzer.in/e9292a9736ab79e7dc43961406c708a8384d9a14 new file mode 100644 index 0000000000..f1f1e8cc48 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/e9292a9736ab79e7dc43961406c708a8384d9a14 @@ -0,0 +1 @@ +010 U>">""" \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/ea0695107bc61adc0cc9eefd57ea25c316abf729 b/fuzz/gnutls_dn_parser_fuzzer.in/ea0695107bc61adc0cc9eefd57ea25c316abf729 new file mode 100644 index 0000000000..a2d70023e3 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/ea0695107bc61adc0cc9eefd57ea25c316abf729 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/eab95a09c358822a477393b6155c3acdbd0fe297 b/fuzz/gnutls_dn_parser_fuzzer.in/eab95a09c358822a477393b6155c3acdbd0fe297 new file mode 100644 index 0000000000..3bdf31355a Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/eab95a09c358822a477393b6155c3acdbd0fe297 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/ede4ea0b038b252c58fb104993c8436847a87b70 b/fuzz/gnutls_dn_parser_fuzzer.in/ede4ea0b038b252c58fb104993c8436847a87b70 new file mode 100644 index 0000000000..e063086a69 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/ede4ea0b038b252c58fb104993c8436847a87b70 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/f21ff6d2865cf6330d6989298e7358c9326ac834 b/fuzz/gnutls_dn_parser_fuzzer.in/f21ff6d2865cf6330d6989298e7358c9326ac834 new file mode 100644 index 0000000000..409e021a64 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/f21ff6d2865cf6330d6989298e7358c9326ac834 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/f3733a3651c8ed287c0ce106c8399bcba75dd432 b/fuzz/gnutls_dn_parser_fuzzer.in/f3733a3651c8ed287c0ce106c8399bcba75dd432 new file mode 100644 index 0000000000..50e3f274bc --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/f3733a3651c8ed287c0ce106c8399bcba75dd432 @@ -0,0 +1 @@ +010 U ,,++++ \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/f40297c91981e508825e27da4b3ef7beb2dcf39f b/fuzz/gnutls_dn_parser_fuzzer.in/f40297c91981e508825e27da4b3ef7beb2dcf39f new file mode 100644 index 0000000000..f8d066c106 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/f40297c91981e508825e27da4b3ef7beb2dcf39f @@ -0,0 +1,2 @@ +0&1$0"U +:sB\\\\88\\\\\\\\8888\\\\88 \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/f7bbfaa13640e4f292365912ce4c344ffe309cad b/fuzz/gnutls_dn_parser_fuzzer.in/f7bbfaa13640e4f292365912ce4c344ffe309cad new file mode 100644 index 0000000000..db46ff6f16 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/f7bbfaa13640e4f292365912ce4c344ffe309cad differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/f7dfd1ff1b41ed360178950fd81a30241b2bf830 b/fuzz/gnutls_dn_parser_fuzzer.in/f7dfd1ff1b41ed360178950fd81a30241b2bf830 new file mode 100644 index 0000000000..8964114e5f Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/f7dfd1ff1b41ed360178950fd81a30241b2bf830 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/f99d53742da024999a18b70a3ea43ccd0c199ba8 b/fuzz/gnutls_dn_parser_fuzzer.in/f99d53742da024999a18b70a3ea43ccd0c199ba8 new file mode 100644 index 0000000000..1ae34e4d03 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/f99d53742da024999a18b70a3ea43ccd0c199ba8 @@ -0,0 +1 @@ +01 0 U);;;; \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/fa6a53a99b3714ab4cf0a6efabe6a6542c821332 b/fuzz/gnutls_dn_parser_fuzzer.in/fa6a53a99b3714ab4cf0a6efabe6a6542c821332 new file mode 100644 index 0000000000..5513a31af8 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/fa6a53a99b3714ab4cf0a6efabe6a6542c821332 @@ -0,0 +1 @@ +0h1 0 U 0!1 0 U 0!1 0 U 0!1 0 U 0V1 0 U 0!1 0 U 0!1 0 U 0!1 0 U 0' \ No newline at end of file diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/fb1c3f7abe563a400e7e933096c303137c667722 b/fuzz/gnutls_dn_parser_fuzzer.in/fb1c3f7abe563a400e7e933096c303137c667722 new file mode 100644 index 0000000000..8b1e4caf6b Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/fb1c3f7abe563a400e7e933096c303137c667722 differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/fb2a917a0173e507e73e3844a3e401eac1db9bae b/fuzz/gnutls_dn_parser_fuzzer.in/fb2a917a0173e507e73e3844a3e401eac1db9bae new file mode 100644 index 0000000000..f7bff76a33 Binary files /dev/null and b/fuzz/gnutls_dn_parser_fuzzer.in/fb2a917a0173e507e73e3844a3e401eac1db9bae differ diff --git a/fuzz/gnutls_dn_parser_fuzzer.in/fc8ce301cf4b04035d886dce2228c2b156c666a6 b/fuzz/gnutls_dn_parser_fuzzer.in/fc8ce301cf4b04035d886dce2228c2b156c666a6 new file mode 100644 index 0000000000..e2597236b5 --- /dev/null +++ b/fuzz/gnutls_dn_parser_fuzzer.in/fc8ce301cf4b04035d886dce2228c2b156c666a6 @@ -0,0 +1 @@ +010 U ,>+S>> \ No newline at end of file diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.c b/fuzz/gnutls_ext_raw_parse_fuzzer.c new file mode 100644 index 0000000000..f9c6becef1 --- /dev/null +++ b/fuzz/gnutls_ext_raw_parse_fuzzer.c @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include + +#include + +#include "fuzzer.h" + +static +int cb(void *ctx, unsigned tls_id, const unsigned char *data, unsigned data_size) +{ + return 0; +} + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw; + + raw.data = (unsigned char *)data; + raw.size = size; + + gnutls_ext_raw_parse(NULL, cb, &raw, 0); + + gnutls_ext_raw_parse(NULL, cb, &raw, GNUTLS_EXT_RAW_FLAG_TLS_CLIENT_HELLO); + + gnutls_ext_raw_parse(NULL, cb, &raw, GNUTLS_EXT_RAW_FLAG_DTLS_CLIENT_HELLO); + + return 0; +} diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/079fcf4ccbfa444296055ae667ca53a4b2820761 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/079fcf4ccbfa444296055ae667ca53a4b2820761 new file mode 100644 index 0000000000..0b118c1b24 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/079fcf4ccbfa444296055ae667ca53a4b2820761 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/09a580388b6044acf7fa45fe1efd28cc1d66af5c b/fuzz/gnutls_ext_raw_parse_fuzzer.in/09a580388b6044acf7fa45fe1efd28cc1d66af5c new file mode 100644 index 0000000000..0ea9433efc Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/09a580388b6044acf7fa45fe1efd28cc1d66af5c differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/0b27b34d8f51ee34781a0ef21958275417324800 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/0b27b34d8f51ee34781a0ef21958275417324800 new file mode 100644 index 0000000000..4816a2408a Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/0b27b34d8f51ee34781a0ef21958275417324800 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/0f9d7d280950fed6d4bf8f60d8da01e615e6eb31 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/0f9d7d280950fed6d4bf8f60d8da01e615e6eb31 new file mode 100644 index 0000000000..9f3ebf65b4 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/0f9d7d280950fed6d4bf8f60d8da01e615e6eb31 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/1349113d6125a640c4781c9e01ca06fb70adffc8 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/1349113d6125a640c4781c9e01ca06fb70adffc8 new file mode 100644 index 0000000000..5be8ac55f8 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/1349113d6125a640c4781c9e01ca06fb70adffc8 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/1489f923c4dca729178b3e3233458550d8dddf29 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/1489f923c4dca729178b3e3233458550d8dddf29 new file mode 100644 index 0000000000..09f370e38f Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/1489f923c4dca729178b3e3233458550d8dddf29 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/194b3a1b127bf188a0e72a72cb07d94afa968d11 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/194b3a1b127bf188a0e72a72cb07d94afa968d11 new file mode 100644 index 0000000000..b08c2aaf15 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/194b3a1b127bf188a0e72a72cb07d94afa968d11 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/409e8394b4771935fcd87e231d16d947be8e9fc7 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/409e8394b4771935fcd87e231d16d947be8e9fc7 new file mode 100644 index 0000000000..03c8f48e0e Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/409e8394b4771935fcd87e231d16d947be8e9fc7 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/51acf39a1dd8d1005c1b90b039ca204e7ede7a46 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/51acf39a1dd8d1005c1b90b039ca204e7ede7a46 new file mode 100644 index 0000000000..f63f4afff4 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/51acf39a1dd8d1005c1b90b039ca204e7ede7a46 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/55cc256849841bee7b1b47b23fa6e51a05d92788 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/55cc256849841bee7b1b47b23fa6e51a05d92788 new file mode 100644 index 0000000000..68b9aa9a62 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/55cc256849841bee7b1b47b23fa6e51a05d92788 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/58664dc14ddec3bd49e7136b4b6f6e338bc7d4d6 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/58664dc14ddec3bd49e7136b4b6f6e338bc7d4d6 new file mode 100644 index 0000000000..14066e69f9 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/58664dc14ddec3bd49e7136b4b6f6e338bc7d4d6 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/6225dfb8e27d753c87feb751e974b36f7da9172a b/fuzz/gnutls_ext_raw_parse_fuzzer.in/6225dfb8e27d753c87feb751e974b36f7da9172a new file mode 100644 index 0000000000..2286fc742d Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/6225dfb8e27d753c87feb751e974b36f7da9172a differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/62571891215b4efc1ceab744ce59dd0b66ea6f73 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/62571891215b4efc1ceab744ce59dd0b66ea6f73 new file mode 100644 index 0000000000..180cf4bf96 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/62571891215b4efc1ceab744ce59dd0b66ea6f73 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/6997fad603da245c0a4f645a4f86eb20d459c868 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/6997fad603da245c0a4f645a4f86eb20d459c868 new file mode 100644 index 0000000000..b47fe5e272 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/6997fad603da245c0a4f645a4f86eb20d459c868 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/71a3feeea029d82bba604f5bf87844d042471200 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/71a3feeea029d82bba604f5bf87844d042471200 new file mode 100644 index 0000000000..ccbd5b4a62 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/71a3feeea029d82bba604f5bf87844d042471200 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/83ba81df90715055a39c8a2cb5a1115cf3e420cb b/fuzz/gnutls_ext_raw_parse_fuzzer.in/83ba81df90715055a39c8a2cb5a1115cf3e420cb new file mode 100644 index 0000000000..7fb30082e8 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/83ba81df90715055a39c8a2cb5a1115cf3e420cb differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/9c2ae6fa818cf0067ef0317db68e438af094a333 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/9c2ae6fa818cf0067ef0317db68e438af094a333 new file mode 100644 index 0000000000..5ed9be5747 --- /dev/null +++ b/fuzz/gnutls_ext_raw_parse_fuzzer.in/9c2ae6fa818cf0067ef0317db68e438af094a333 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/9d517270135133ecc7a1928101281dc0ad7b9fc5 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/9d517270135133ecc7a1928101281dc0ad7b9fc5 new file mode 100644 index 0000000000..a73a72aaec Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/9d517270135133ecc7a1928101281dc0ad7b9fc5 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/a5f38305c74f7fc47b4fb38524f5bbfce5c0af2a b/fuzz/gnutls_ext_raw_parse_fuzzer.in/a5f38305c74f7fc47b4fb38524f5bbfce5c0af2a new file mode 100644 index 0000000000..8543f44c3d Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/a5f38305c74f7fc47b4fb38524f5bbfce5c0af2a differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/a979ef10cc6f6a36df6b8a323307ee3bb2e2db9c b/fuzz/gnutls_ext_raw_parse_fuzzer.in/a979ef10cc6f6a36df6b8a323307ee3bb2e2db9c new file mode 100644 index 0000000000..9b26e9b102 --- /dev/null +++ b/fuzz/gnutls_ext_raw_parse_fuzzer.in/a979ef10cc6f6a36df6b8a323307ee3bb2e2db9c @@ -0,0 +1 @@ ++ \ No newline at end of file diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/ab7f3f493dda3a9b38ecbe714b23a5362bf93b14 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/ab7f3f493dda3a9b38ecbe714b23a5362bf93b14 new file mode 100644 index 0000000000..378e98ff1f Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/ab7f3f493dda3a9b38ecbe714b23a5362bf93b14 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/aef769458e4333dfdd8122717ffb23fe8d40ce86 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/aef769458e4333dfdd8122717ffb23fe8d40ce86 new file mode 100644 index 0000000000..12702557f5 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/aef769458e4333dfdd8122717ffb23fe8d40ce86 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/b74607c2fadb9577ca3d93c4e21faa6473bf396c b/fuzz/gnutls_ext_raw_parse_fuzzer.in/b74607c2fadb9577ca3d93c4e21faa6473bf396c new file mode 100644 index 0000000000..93d677ab09 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/b74607c2fadb9577ca3d93c4e21faa6473bf396c differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/c34caab0c582dfbd4847146a2fe71f27f20fb3d6 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/c34caab0c582dfbd4847146a2fe71f27f20fb3d6 new file mode 100644 index 0000000000..cf4dc1c0dd Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/c34caab0c582dfbd4847146a2fe71f27f20fb3d6 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/cdaa02eadf49f0727d207079bbb6ca95c6fc5784 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/cdaa02eadf49f0727d207079bbb6ca95c6fc5784 new file mode 100644 index 0000000000..f3a6fe4d55 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/cdaa02eadf49f0727d207079bbb6ca95c6fc5784 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/d55e00a7fb24bad53d9302111440e4044fadaab8 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/d55e00a7fb24bad53d9302111440e4044fadaab8 new file mode 100644 index 0000000000..558c966bab Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/d55e00a7fb24bad53d9302111440e4044fadaab8 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/dcd1e97f17884d4f2cf9db0f218bc83d656db0d4 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/dcd1e97f17884d4f2cf9db0f218bc83d656db0d4 new file mode 100644 index 0000000000..503288d888 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/dcd1e97f17884d4f2cf9db0f218bc83d656db0d4 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/e14d9e2f03124c9897a7f7a6ebd0eebf25f47961 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/e14d9e2f03124c9897a7f7a6ebd0eebf25f47961 new file mode 100644 index 0000000000..3715f06a72 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/e14d9e2f03124c9897a7f7a6ebd0eebf25f47961 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/e3757ea4b9a79d4213e4869ae193cd2736869b6c b/fuzz/gnutls_ext_raw_parse_fuzzer.in/e3757ea4b9a79d4213e4869ae193cd2736869b6c new file mode 100644 index 0000000000..13636967f1 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/e3757ea4b9a79d4213e4869ae193cd2736869b6c differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/ebddaf7a8cacade3efebf287d9230dfb6d071dce b/fuzz/gnutls_ext_raw_parse_fuzzer.in/ebddaf7a8cacade3efebf287d9230dfb6d071dce new file mode 100644 index 0000000000..de53b4dad5 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/ebddaf7a8cacade3efebf287d9230dfb6d071dce differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/f23b1af75a46269b07b07c6e2dd223f06455e275 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/f23b1af75a46269b07b07c6e2dd223f06455e275 new file mode 100644 index 0000000000..7aabd89b85 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/f23b1af75a46269b07b07c6e2dd223f06455e275 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/f37baa21d797a87ff7613d349cb3c71008439015 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/f37baa21d797a87ff7613d349cb3c71008439015 new file mode 100644 index 0000000000..1917781052 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/f37baa21d797a87ff7613d349cb3c71008439015 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/f84bb2e1414c011fd0fc2cd08503f709c7d90d77 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/f84bb2e1414c011fd0fc2cd08503f709c7d90d77 new file mode 100644 index 0000000000..80b0bb118a Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/f84bb2e1414c011fd0fc2cd08503f709c7d90d77 differ diff --git a/fuzz/gnutls_ext_raw_parse_fuzzer.in/fbe878c191d8a650783d99a24a0e993fabbc6b57 b/fuzz/gnutls_ext_raw_parse_fuzzer.in/fbe878c191d8a650783d99a24a0e993fabbc6b57 new file mode 100644 index 0000000000..bcc4e83145 Binary files /dev/null and b/fuzz/gnutls_ext_raw_parse_fuzzer.in/fbe878c191d8a650783d99a24a0e993fabbc6b57 differ diff --git a/fuzz/gnutls_idna_parser_fuzzer.c b/fuzz/gnutls_idna_parser_fuzzer.c new file mode 100644 index 0000000000..ca8dfdc639 --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.c @@ -0,0 +1,38 @@ +/* +# Copyright 2016 Nikos Mavrogiannopoulos +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include +#include +#include + +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t out; + + if (gnutls_idna_map((const char *) data, size, &out, 0) >= 0) { + assert(out.size == strlen((char *) out.data)); + gnutls_free(out.data); + } + + return 0; +} diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/2a7b49f1574a7d3a658569e38665009503fd4075 b/fuzz/gnutls_idna_parser_fuzzer.in/2a7b49f1574a7d3a658569e38665009503fd4075 new file mode 100644 index 0000000000..9f767c4632 --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/2a7b49f1574a7d3a658569e38665009503fd4075 @@ -0,0 +1 @@ +R*+ \ No newline at end of file diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/30d35b34efc06971550f25a5cb170edcc83e95d6 b/fuzz/gnutls_idna_parser_fuzzer.in/30d35b34efc06971550f25a5cb170edcc83e95d6 new file mode 100644 index 0000000000..da35eb0e84 --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/30d35b34efc06971550f25a5cb170edcc83e95d6 @@ -0,0 +1 @@ +LSZtLSt5ctyp5ctypEIcT5%TST T􆏷EIcT TSTTST T ypEI \ No newline at end of file diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/3feac0ff721993aae72a2f34efbbc2e6bb9b4d42 b/fuzz/gnutls_idna_parser_fuzzer.in/3feac0ff721993aae72a2f34efbbc2e6bb9b4d42 new file mode 100644 index 0000000000..5699063aab --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/3feac0ff721993aae72a2f34efbbc2e6bb9b4d42 @@ -0,0 +1 @@ +LOCVVVVVVVVVVVVVVVVVVVVALHO(IT1 diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/41331f8d93c54c97667b91d08fdb5b5a8058bfb0 b/fuzz/gnutls_idna_parser_fuzzer.in/41331f8d93c54c97667b91d08fdb5b5a8058bfb0 new file mode 100644 index 0000000000..fceaabcd7a --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/41331f8d93c54c97667b91d08fdb5b5a8058bfb0 @@ -0,0 +1 @@ +J` \ No newline at end of file diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/5ba93c9db0cff93f52b521d7420e43f6eda2784f b/fuzz/gnutls_idna_parser_fuzzer.in/5ba93c9db0cff93f52b521d7420e43f6eda2784f new file mode 100644 index 0000000000..f76dd238ad Binary files /dev/null and b/fuzz/gnutls_idna_parser_fuzzer.in/5ba93c9db0cff93f52b521d7420e43f6eda2784f differ diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/5f0a3e8f105892ca794b155846d55eac61692737 b/fuzz/gnutls_idna_parser_fuzzer.in/5f0a3e8f105892ca794b155846d55eac61692737 new file mode 100644 index 0000000000..fcd26ce35c --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/5f0a3e8f105892ca794b155846d55eac61692737 @@ -0,0 +1 @@ +a))aa \ No newline at end of file diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/7cc4d67180c0f1f5bf00f4737d2811db258c37fd b/fuzz/gnutls_idna_parser_fuzzer.in/7cc4d67180c0f1f5bf00f4737d2811db258c37fd new file mode 100644 index 0000000000..30df1293da --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/7cc4d67180c0f1f5bf00f4737d2811db258c37fd @@ -0,0 +1 @@ +COMALHOjjjjjjjSD diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/8d5332adaf4fe14d81e85624de2b018c261c83ae b/fuzz/gnutls_idna_parser_fuzzer.in/8d5332adaf4fe14d81e85624de2b018c261c83ae new file mode 100644 index 0000000000..13b9c194a5 --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/8d5332adaf4fe14d81e85624de2b018c261c83ae @@ -0,0 +1 @@ +?]%'?]%T diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/a396ad54a301ad8ceae07031f51a260c823f3daf b/fuzz/gnutls_idna_parser_fuzzer.in/a396ad54a301ad8ceae07031f51a260c823f3daf new file mode 100644 index 0000000000..f4127cc6c6 Binary files /dev/null and b/fuzz/gnutls_idna_parser_fuzzer.in/a396ad54a301ad8ceae07031f51a260c823f3daf differ diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/bb7519e36a5abd1baef609abb95db1b0e42e03dc b/fuzz/gnutls_idna_parser_fuzzer.in/bb7519e36a5abd1baef609abb95db1b0e42e03dc new file mode 100644 index 0000000000..d89b27636d --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/bb7519e36a5abd1baef609abb95db1b0e42e03dc @@ -0,0 +1 @@ +LOOCLVOCCLVOCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/d1cd3d5d399f3549ef5cd10d0bb8405e0f41eb0f b/fuzz/gnutls_idna_parser_fuzzer.in/d1cd3d5d399f3549ef5cd10d0bb8405e0f41eb0f new file mode 100644 index 0000000000..b23c133629 --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/d1cd3d5d399f3549ef5cd10d0bb8405e0f41eb0f @@ -0,0 +1 @@ +RT diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/ee659943acfb1a3987af79040c7dd55b5c51b6b7 b/fuzz/gnutls_idna_parser_fuzzer.in/ee659943acfb1a3987af79040c7dd55b5c51b6b7 new file mode 100644 index 0000000000..e5411b0f91 --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/ee659943acfb1a3987af79040c7dd55b5c51b6b7 @@ -0,0 +1 @@ +VVVVVVVVTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTtTTTTTTTTTTTTTTTTTTTVT diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/ee6973261fac12bcf2f09b513438641d479ef9d3 b/fuzz/gnutls_idna_parser_fuzzer.in/ee6973261fac12bcf2f09b513438641d479ef9d3 new file mode 100644 index 0000000000..0daf52bd28 --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/ee6973261fac12bcf2f09b513438641d479ef9d3 @@ -0,0 +1 @@ +b!er.dede)er.de diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/f44217a81173869e08671753c52553646ff5d95b b/fuzz/gnutls_idna_parser_fuzzer.in/f44217a81173869e08671753c52553646ff5d95b new file mode 100644 index 0000000000..3e6056dece --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/f44217a81173869e08671753c52553646ff5d95b @@ -0,0 +1 @@ +**** \ No newline at end of file diff --git a/fuzz/gnutls_idna_parser_fuzzer.in/fc7d0618ee6f0a1dc0eb22ce0dd7bee0e328698d b/fuzz/gnutls_idna_parser_fuzzer.in/fc7d0618ee6f0a1dc0eb22ce0dd7bee0e328698d new file mode 100644 index 0000000000..c3cf71f59a --- /dev/null +++ b/fuzz/gnutls_idna_parser_fuzzer.in/fc7d0618ee6f0a1dc0eb22ce0dd7bee0e328698d @@ -0,0 +1 @@ +CTQQO)G diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.c b/fuzz/gnutls_ocsp_req_parser_fuzzer.c new file mode 100644 index 0000000000..17c945d807 --- /dev/null +++ b/fuzz/gnutls_ocsp_req_parser_fuzzer.c @@ -0,0 +1,49 @@ +/* +# Copyright 2017 Red Hat, Inc. +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include + +#include +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw; + gnutls_datum_t out; + gnutls_ocsp_req_t req; + int ret; + + raw.data = (unsigned char *)data; + raw.size = size; + + ret = gnutls_ocsp_req_init(&req); + assert(ret >= 0); + + ret = gnutls_ocsp_req_import(req, &raw); + if (ret >= 0) { + ret = gnutls_ocsp_req_print(req, GNUTLS_OCSP_PRINT_FULL, &out); + assert(ret >= 0); + gnutls_free(out.data); + } + + gnutls_ocsp_req_deinit(req); + return 0; +} diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/236266860e67b3305b8d5d06b62e72073671c338 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/236266860e67b3305b8d5d06b62e72073671c338 new file mode 100644 index 0000000000..37d13c3520 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/236266860e67b3305b8d5d06b62e72073671c338 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/24341f44324e377ed3503234a678a9cbbe172fe7 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/24341f44324e377ed3503234a678a9cbbe172fe7 new file mode 100644 index 0000000000..5d5a315a2c Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/24341f44324e377ed3503234a678a9cbbe172fe7 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/2a6cf95b242dc7077fa9aa8d897ffb04c035e115 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/2a6cf95b242dc7077fa9aa8d897ffb04c035e115 new file mode 100644 index 0000000000..e6163b6622 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/2a6cf95b242dc7077fa9aa8d897ffb04c035e115 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/3daba351bd2b37869b89be23174ed7879e43fc5e b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/3daba351bd2b37869b89be23174ed7879e43fc5e new file mode 100644 index 0000000000..499fa16915 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/3daba351bd2b37869b89be23174ed7879e43fc5e differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/3eee1fde0ce1321a27dc340528594913ecb2dd3d b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/3eee1fde0ce1321a27dc340528594913ecb2dd3d new file mode 100644 index 0000000000..7b9d780d6d Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/3eee1fde0ce1321a27dc340528594913ecb2dd3d differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/446412fbe5b7c1fc09f143b244f3cce2a50f97e3 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/446412fbe5b7c1fc09f143b244f3cce2a50f97e3 new file mode 100644 index 0000000000..ba9a1aaf0b Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/446412fbe5b7c1fc09f143b244f3cce2a50f97e3 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/47c39b7cb8316d1fd3ecb00bb3809aa5863618a1 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/47c39b7cb8316d1fd3ecb00bb3809aa5863618a1 new file mode 100644 index 0000000000..de489669c2 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/47c39b7cb8316d1fd3ecb00bb3809aa5863618a1 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/59e9de770d4394c3047c76ab0550077a34b0a6bc b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/59e9de770d4394c3047c76ab0550077a34b0a6bc new file mode 100644 index 0000000000..183f47acbb Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/59e9de770d4394c3047c76ab0550077a34b0a6bc differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/60c5245a53e450c1d230fe53c5bb5cb302d0ca3b b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/60c5245a53e450c1d230fe53c5bb5cb302d0ca3b new file mode 100644 index 0000000000..d82d0c4087 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/60c5245a53e450c1d230fe53c5bb5cb302d0ca3b differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/75e512b8ad34d563614c7d6ca9bbd1ae697a0afa b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/75e512b8ad34d563614c7d6ca9bbd1ae697a0afa new file mode 100644 index 0000000000..c48729843c Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/75e512b8ad34d563614c7d6ca9bbd1ae697a0afa differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/7e04ba2f1106fd02a3be5f8cee8c50fb21e8f087 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/7e04ba2f1106fd02a3be5f8cee8c50fb21e8f087 new file mode 100644 index 0000000000..4c79922dc8 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/7e04ba2f1106fd02a3be5f8cee8c50fb21e8f087 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/97673f67a515a406fb7b82a382be24e02b01b7d7 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/97673f67a515a406fb7b82a382be24e02b01b7d7 new file mode 100644 index 0000000000..94167e7ef3 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/97673f67a515a406fb7b82a382be24e02b01b7d7 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b01c5f6f40a9cc6f818a5b9e96bcc5b079c9e8bb b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b01c5f6f40a9cc6f818a5b9e96bcc5b079c9e8bb new file mode 100644 index 0000000000..6a506122ec Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b01c5f6f40a9cc6f818a5b9e96bcc5b079c9e8bb differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b370016f4d24b419caa769e0cf702a3dedbb3dde b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b370016f4d24b419caa769e0cf702a3dedbb3dde new file mode 100644 index 0000000000..2579462be3 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b370016f4d24b419caa769e0cf702a3dedbb3dde differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b5afe5ebb506276b154ff573fe14d77d1536d3a9 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b5afe5ebb506276b154ff573fe14d77d1536d3a9 new file mode 100644 index 0000000000..d4e856b1b5 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b5afe5ebb506276b154ff573fe14d77d1536d3a9 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b8f8e441f10d3d76846bdda33bba6cada4c24722 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b8f8e441f10d3d76846bdda33bba6cada4c24722 new file mode 100644 index 0000000000..5a05551334 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b8f8e441f10d3d76846bdda33bba6cada4c24722 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b9accd6be3ebbf0f0af20e9e84da4bb3906a2b3d b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b9accd6be3ebbf0f0af20e9e84da4bb3906a2b3d new file mode 100644 index 0000000000..e6dcba809e Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/b9accd6be3ebbf0f0af20e9e84da4bb3906a2b3d differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/c802c281f75529ad86cf75063c0a4518f0695f63 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/c802c281f75529ad86cf75063c0a4518f0695f63 new file mode 100644 index 0000000000..4ca0a5491c Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/c802c281f75529ad86cf75063c0a4518f0695f63 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/cb896a405fae5aeb71641128f2bff9071e3e13a5 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/cb896a405fae5aeb71641128f2bff9071e3e13a5 new file mode 100644 index 0000000000..1026481064 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/cb896a405fae5aeb71641128f2bff9071e3e13a5 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/d754cd5e537e3cebfb64f135f0f5e7deae3d158b b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/d754cd5e537e3cebfb64f135f0f5e7deae3d158b new file mode 100644 index 0000000000..b8444167e5 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/d754cd5e537e3cebfb64f135f0f5e7deae3d158b differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/da01bf15b37198f6ca50c2ce3eb82e29393eec73 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/da01bf15b37198f6ca50c2ce3eb82e29393eec73 new file mode 100644 index 0000000000..c767121912 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/da01bf15b37198f6ca50c2ce3eb82e29393eec73 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/e04a7d330c51bc92accc86b2542d38c4049b79e4 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/e04a7d330c51bc92accc86b2542d38c4049b79e4 new file mode 100644 index 0000000000..ed9a9bfab8 --- /dev/null +++ b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/e04a7d330c51bc92accc86b2542d38c4049b79e4 @@ -0,0 +1 @@ +00 \ No newline at end of file diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/e2d81fd9d85cd5e46fa75530116d31b9d12c5123 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/e2d81fd9d85cd5e46fa75530116d31b9d12c5123 new file mode 100644 index 0000000000..19c2085694 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/e2d81fd9d85cd5e46fa75530116d31b9d12c5123 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/e2f2e7bcedfb47b31101c9fb07da03f9f1abcecd b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/e2f2e7bcedfb47b31101c9fb07da03f9f1abcecd new file mode 100644 index 0000000000..fef7d8a0ba Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/e2f2e7bcedfb47b31101c9fb07da03f9f1abcecd differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/ee21b9fd3134d15a6403d245355d7e5c8546de16 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/ee21b9fd3134d15a6403d245355d7e5c8546de16 new file mode 100644 index 0000000000..73aeb371a4 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/ee21b9fd3134d15a6403d245355d7e5c8546de16 differ diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/f1fbfd11bd1080934a4a40a381423c83d98296a9 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/f1fbfd11bd1080934a4a40a381423c83d98296a9 new file mode 100644 index 0000000000..9e94b37993 --- /dev/null +++ b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/f1fbfd11bd1080934a4a40a381423c83d98296a9 @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/fuzz/gnutls_ocsp_req_parser_fuzzer.in/f933b39ab440a42cdc17dbc0187a321c4962a101 b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/f933b39ab440a42cdc17dbc0187a321c4962a101 new file mode 100644 index 0000000000..d47aa33209 Binary files /dev/null and b/fuzz/gnutls_ocsp_req_parser_fuzzer.in/f933b39ab440a42cdc17dbc0187a321c4962a101 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.c new file mode 100644 index 0000000000..598d9eeb86 --- /dev/null +++ b/fuzz/gnutls_ocsp_resp_parser_fuzzer.c @@ -0,0 +1,49 @@ +/* +# Copyright 2017 Red Hat, Inc. +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include + +#include +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw; + gnutls_datum_t out; + gnutls_ocsp_resp_t resp; + int ret; + + raw.data = (unsigned char *)data; + raw.size = size; + + ret = gnutls_ocsp_resp_init(&resp); + assert(ret >= 0); + + ret = gnutls_ocsp_resp_import(resp, &raw); + if (ret >= 0) { + ret = gnutls_ocsp_resp_print(resp, GNUTLS_OCSP_PRINT_FULL, &out); + assert(ret >= 0); + gnutls_free(out.data); + } + + gnutls_ocsp_resp_deinit(resp); + return 0; +} diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/02eea2d23e32baafc9dee473e45dae4bd023915f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/02eea2d23e32baafc9dee473e45dae4bd023915f new file mode 100644 index 0000000000..543be06ca6 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/02eea2d23e32baafc9dee473e45dae4bd023915f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/03bdb641d5a00bc4e6a513d466e46ed3372a3807 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/03bdb641d5a00bc4e6a513d466e46ed3372a3807 new file mode 100644 index 0000000000..f429122f7c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/03bdb641d5a00bc4e6a513d466e46ed3372a3807 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/041a7123c6e3d349390100998d121953789ad041 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/041a7123c6e3d349390100998d121953789ad041 new file mode 100644 index 0000000000..544cd90bee Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/041a7123c6e3d349390100998d121953789ad041 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0583ac639ef79d3e01f9dab57f028a14c02e7778 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0583ac639ef79d3e01f9dab57f028a14c02e7778 new file mode 100644 index 0000000000..1b84201eb7 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0583ac639ef79d3e01f9dab57f028a14c02e7778 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/05a399bc529b2bd5a44923cae514df2dde4b5d99 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/05a399bc529b2bd5a44923cae514df2dde4b5d99 new file mode 100644 index 0000000000..3b2cc46b00 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/05a399bc529b2bd5a44923cae514df2dde4b5d99 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/06e4d9d8657b06b92dd0a9dd3b9398922b4beecf b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/06e4d9d8657b06b92dd0a9dd3b9398922b4beecf new file mode 100644 index 0000000000..693bcf5080 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/06e4d9d8657b06b92dd0a9dd3b9398922b4beecf differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/06e58512037748d6d5b77a10265b089517c4c0cb b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/06e58512037748d6d5b77a10265b089517c4c0cb new file mode 100644 index 0000000000..743b7d98d4 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/06e58512037748d6d5b77a10265b089517c4c0cb differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/073159683e0c1cecde5cb6373e396343a315f280 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/073159683e0c1cecde5cb6373e396343a315f280 new file mode 100644 index 0000000000..56e475c0bb Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/073159683e0c1cecde5cb6373e396343a315f280 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/07928dfa4835fa6c617933884c139b503375c5ab b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/07928dfa4835fa6c617933884c139b503375c5ab new file mode 100644 index 0000000000..6822ce8231 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/07928dfa4835fa6c617933884c139b503375c5ab differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/07a8a0692062798eb3d786a9f9409c8b94ec802e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/07a8a0692062798eb3d786a9f9409c8b94ec802e new file mode 100644 index 0000000000..c9653fc140 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/07a8a0692062798eb3d786a9f9409c8b94ec802e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/08ddc3a05c45b937ee9c24f3dd80f4e2185c2358 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/08ddc3a05c45b937ee9c24f3dd80f4e2185c2358 new file mode 100644 index 0000000000..058b02e248 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/08ddc3a05c45b937ee9c24f3dd80f4e2185c2358 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0946921220061ac2d06e66b66f4010f7f50d1193 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0946921220061ac2d06e66b66f4010f7f50d1193 new file mode 100644 index 0000000000..b8a314ae3b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0946921220061ac2d06e66b66f4010f7f50d1193 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0b1cabfe0ded2bf924a46e6e6d40a04d654ce12c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0b1cabfe0ded2bf924a46e6e6d40a04d654ce12c new file mode 100644 index 0000000000..aee68f5da3 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0b1cabfe0ded2bf924a46e6e6d40a04d654ce12c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0b35bf7d3432689d8d1e59fc4d545b25a02e957e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0b35bf7d3432689d8d1e59fc4d545b25a02e957e new file mode 100644 index 0000000000..da18d28e40 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0b35bf7d3432689d8d1e59fc4d545b25a02e957e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0b799a6b0035dc8580631cde6465ac5f1ec736bd b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0b799a6b0035dc8580631cde6465ac5f1ec736bd new file mode 100644 index 0000000000..b209aa1588 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0b799a6b0035dc8580631cde6465ac5f1ec736bd differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0e173d55420fea9fc87c478bb86010b75d82c617 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0e173d55420fea9fc87c478bb86010b75d82c617 new file mode 100644 index 0000000000..3fa77adeea Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/0e173d55420fea9fc87c478bb86010b75d82c617 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/104345f48c94ee3c5457463ef58e73c8a7418375 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/104345f48c94ee3c5457463ef58e73c8a7418375 new file mode 100644 index 0000000000..235faee227 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/104345f48c94ee3c5457463ef58e73c8a7418375 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/10fa9dc886795d9dc674c99b4a873cd2abac0368 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/10fa9dc886795d9dc674c99b4a873cd2abac0368 new file mode 100644 index 0000000000..1342f87d63 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/10fa9dc886795d9dc674c99b4a873cd2abac0368 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/125b910760c2d8c3ff93249b6d8eb37c276127e1 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/125b910760c2d8c3ff93249b6d8eb37c276127e1 new file mode 100644 index 0000000000..85d0b4a7be Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/125b910760c2d8c3ff93249b6d8eb37c276127e1 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/13d0fab9a184526fec79231c51fd4cfef34c88bf b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/13d0fab9a184526fec79231c51fd4cfef34c88bf new file mode 100644 index 0000000000..50dd1b467b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/13d0fab9a184526fec79231c51fd4cfef34c88bf differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/13ef8b8b09dd8e647f94d44bddfe9129f5363d75 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/13ef8b8b09dd8e647f94d44bddfe9129f5363d75 new file mode 100644 index 0000000000..a72ab3ba6b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/13ef8b8b09dd8e647f94d44bddfe9129f5363d75 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1755b549897cf5f5a86e1d5fa166141468b8966d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1755b549897cf5f5a86e1d5fa166141468b8966d new file mode 100644 index 0000000000..a80ed19652 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1755b549897cf5f5a86e1d5fa166141468b8966d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1770235339b25f676341eefbfd64b52a7c44814b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1770235339b25f676341eefbfd64b52a7c44814b new file mode 100644 index 0000000000..e93a94f1a0 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1770235339b25f676341eefbfd64b52a7c44814b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/17850a2b31251b570fb3b5eba536bfbadc4264c0 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/17850a2b31251b570fb3b5eba536bfbadc4264c0 new file mode 100644 index 0000000000..cf84706656 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/17850a2b31251b570fb3b5eba536bfbadc4264c0 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/183aaaf77a6d6b912c6ee6d460062b38706f0b2c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/183aaaf77a6d6b912c6ee6d460062b38706f0b2c new file mode 100644 index 0000000000..f7adaafa44 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/183aaaf77a6d6b912c6ee6d460062b38706f0b2c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/185ffffaa6ac674323c12524067d9adaf337cf08 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/185ffffaa6ac674323c12524067d9adaf337cf08 new file mode 100644 index 0000000000..04a5fae02a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/185ffffaa6ac674323c12524067d9adaf337cf08 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/19970ed6b06ea2e795bc6d4b99bbc69014848ca7 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/19970ed6b06ea2e795bc6d4b99bbc69014848ca7 new file mode 100644 index 0000000000..4909517848 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/19970ed6b06ea2e795bc6d4b99bbc69014848ca7 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1a10cddfb5f095099affc7373eba09ccdc2f4e67 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1a10cddfb5f095099affc7373eba09ccdc2f4e67 new file mode 100644 index 0000000000..ff31a28c0b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1a10cddfb5f095099affc7373eba09ccdc2f4e67 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1a750d96ef500d5e4ecbccb8a79f55e8883834c1 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1a750d96ef500d5e4ecbccb8a79f55e8883834c1 new file mode 100644 index 0000000000..42a1a50987 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1a750d96ef500d5e4ecbccb8a79f55e8883834c1 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1a8759f61368cc38f4a3392f4364baaabd8f0dba b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1a8759f61368cc38f4a3392f4364baaabd8f0dba new file mode 100644 index 0000000000..05a5f6bccb Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1a8759f61368cc38f4a3392f4364baaabd8f0dba differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1b771e48200bc9936671c5726f650f7294ee0c0a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1b771e48200bc9936671c5726f650f7294ee0c0a new file mode 100644 index 0000000000..a95060c444 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1b771e48200bc9936671c5726f650f7294ee0c0a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1ba8b773759beb6705ff3ef084b893a9f8235c31 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1ba8b773759beb6705ff3ef084b893a9f8235c31 new file mode 100644 index 0000000000..649c20f54f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1ba8b773759beb6705ff3ef084b893a9f8235c31 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1c4051269992ee3d4e609b8e7de63ec2cada4020 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1c4051269992ee3d4e609b8e7de63ec2cada4020 new file mode 100644 index 0000000000..a8635cbc1f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1c4051269992ee3d4e609b8e7de63ec2cada4020 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1d18ffcc7e97c62b2fae472a2a2f4f3cd2c700e3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1d18ffcc7e97c62b2fae472a2a2f4f3cd2c700e3 new file mode 100644 index 0000000000..7391352f94 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1d18ffcc7e97c62b2fae472a2a2f4f3cd2c700e3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1d1f173e184b53b39f0226214cdbb0ce4bdef15e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1d1f173e184b53b39f0226214cdbb0ce4bdef15e new file mode 100644 index 0000000000..7cbd9f6790 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1d1f173e184b53b39f0226214cdbb0ce4bdef15e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1d985841dd701e67d2a6378e1365f27a24001655 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1d985841dd701e67d2a6378e1365f27a24001655 new file mode 100644 index 0000000000..94e1db5ef1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1d985841dd701e67d2a6378e1365f27a24001655 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1dbec7fa6e6ab0368a114b1f394353f5c6254ba0 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1dbec7fa6e6ab0368a114b1f394353f5c6254ba0 new file mode 100644 index 0000000000..89116f94ad Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1dbec7fa6e6ab0368a114b1f394353f5c6254ba0 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1f6d6ea645ecfe5363a52e87c83020463409a8e9 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1f6d6ea645ecfe5363a52e87c83020463409a8e9 new file mode 100644 index 0000000000..6228f4f515 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1f6d6ea645ecfe5363a52e87c83020463409a8e9 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1fe3c7858482c1dcaf5242b0f7cadbbff62965e6 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1fe3c7858482c1dcaf5242b0f7cadbbff62965e6 new file mode 100644 index 0000000000..306ef4fe93 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/1fe3c7858482c1dcaf5242b0f7cadbbff62965e6 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/22d10cf2a81526bd550b8b1ac0be13a8c4f3b775 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/22d10cf2a81526bd550b8b1ac0be13a8c4f3b775 new file mode 100644 index 0000000000..66c7371103 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/22d10cf2a81526bd550b8b1ac0be13a8c4f3b775 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/230042b3a7355e8bf5dee1681e1bc169957cb30f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/230042b3a7355e8bf5dee1681e1bc169957cb30f new file mode 100644 index 0000000000..eb28af66cc Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/230042b3a7355e8bf5dee1681e1bc169957cb30f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2439fcd5b65980bad342ce44ecc2898e27ab53ae b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2439fcd5b65980bad342ce44ecc2898e27ab53ae new file mode 100644 index 0000000000..1b8cc50dac Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2439fcd5b65980bad342ce44ecc2898e27ab53ae differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/24f37acd336c3f3b9acc5710cf123d26fbe9cb11 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/24f37acd336c3f3b9acc5710cf123d26fbe9cb11 new file mode 100644 index 0000000000..26d3cc2e6e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/24f37acd336c3f3b9acc5710cf123d26fbe9cb11 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2504b7ee8ad0c15352a8260af3d9b2678a6f6370 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2504b7ee8ad0c15352a8260af3d9b2678a6f6370 new file mode 100644 index 0000000000..9a1f96cb48 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2504b7ee8ad0c15352a8260af3d9b2678a6f6370 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/25ce6c34c051df14cb3271e15e8953e45ab80f9e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/25ce6c34c051df14cb3271e15e8953e45ab80f9e new file mode 100644 index 0000000000..c5fb90777d Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/25ce6c34c051df14cb3271e15e8953e45ab80f9e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/25d40291ae84c1b187a656d2d32e3d5e4173d840 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/25d40291ae84c1b187a656d2d32e3d5e4173d840 new file mode 100644 index 0000000000..d0a93630e0 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/25d40291ae84c1b187a656d2d32e3d5e4173d840 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2741262413e11ac428565867ebd640f25afe697d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2741262413e11ac428565867ebd640f25afe697d new file mode 100644 index 0000000000..e3aadfbf74 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2741262413e11ac428565867ebd640f25afe697d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/278b65a277490113ef13fb6040f837bb74a78d91 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/278b65a277490113ef13fb6040f837bb74a78d91 new file mode 100644 index 0000000000..e3522f996f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/278b65a277490113ef13fb6040f837bb74a78d91 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/27bfab58e960ce4501ee8212d39906fbf3d5c968 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/27bfab58e960ce4501ee8212d39906fbf3d5c968 new file mode 100644 index 0000000000..c108ea637b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/27bfab58e960ce4501ee8212d39906fbf3d5c968 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/27c4c7923dca9900a174850d570a7e28700c9933 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/27c4c7923dca9900a174850d570a7e28700c9933 new file mode 100644 index 0000000000..6174ae4b00 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/27c4c7923dca9900a174850d570a7e28700c9933 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2892579441f370ae0a892f74005a367d310e2e92 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2892579441f370ae0a892f74005a367d310e2e92 new file mode 100644 index 0000000000..308b184bbf Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2892579441f370ae0a892f74005a367d310e2e92 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/297df57be0dd5fca493a6107e6dddbe7b0790860 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/297df57be0dd5fca493a6107e6dddbe7b0790860 new file mode 100644 index 0000000000..2256ad9863 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/297df57be0dd5fca493a6107e6dddbe7b0790860 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2af87ff51b8e63209381a3e696238e0459c5228e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2af87ff51b8e63209381a3e696238e0459c5228e new file mode 100644 index 0000000000..440f49bd4c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2af87ff51b8e63209381a3e696238e0459c5228e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2b2274fe161a15ee5a025ff359e206ccd4e0c607 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2b2274fe161a15ee5a025ff359e206ccd4e0c607 new file mode 100644 index 0000000000..4ae21989ef Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2b2274fe161a15ee5a025ff359e206ccd4e0c607 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2d1270fe213d4c82c82f8e5d42429409cb6bec12 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2d1270fe213d4c82c82f8e5d42429409cb6bec12 new file mode 100644 index 0000000000..29a911a019 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2d1270fe213d4c82c82f8e5d42429409cb6bec12 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2d1af3f1a183be4fcc2c11ddd89ac8e85f16d6ea b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2d1af3f1a183be4fcc2c11ddd89ac8e85f16d6ea new file mode 100644 index 0000000000..94721f8542 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2d1af3f1a183be4fcc2c11ddd89ac8e85f16d6ea differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2dd9eb84eb63cdd38404611bfa8e90255d80cf32 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2dd9eb84eb63cdd38404611bfa8e90255d80cf32 new file mode 100644 index 0000000000..7843eb9a36 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/2dd9eb84eb63cdd38404611bfa8e90255d80cf32 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3081ca5f1ff5aebf48cd86885f99b91ace24c9ee b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3081ca5f1ff5aebf48cd86885f99b91ace24c9ee new file mode 100644 index 0000000000..efa83fdc42 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3081ca5f1ff5aebf48cd86885f99b91ace24c9ee differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/30c02b094910a651c262c1750349d055a350fa75 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/30c02b094910a651c262c1750349d055a350fa75 new file mode 100644 index 0000000000..609fba1e14 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/30c02b094910a651c262c1750349d055a350fa75 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3164b128eae000d2d6a7f74525417d19013e22cc b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3164b128eae000d2d6a7f74525417d19013e22cc new file mode 100644 index 0000000000..74d770d40b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3164b128eae000d2d6a7f74525417d19013e22cc differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/320451074a9b145c1449ab8d72258854a658b607 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/320451074a9b145c1449ab8d72258854a658b607 new file mode 100644 index 0000000000..6043bb9d0c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/320451074a9b145c1449ab8d72258854a658b607 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3241907a8d54102f7e32ba5e815331c4fff38cb3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3241907a8d54102f7e32ba5e815331c4fff38cb3 new file mode 100644 index 0000000000..4b8032d2e6 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3241907a8d54102f7e32ba5e815331c4fff38cb3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/325a1d03a33795a9fc5e55b1d64848ef1eafe0e3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/325a1d03a33795a9fc5e55b1d64848ef1eafe0e3 new file mode 100644 index 0000000000..bdaf637e33 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/325a1d03a33795a9fc5e55b1d64848ef1eafe0e3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/329aca065f7bb24bac2feabd560d34f00c44376a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/329aca065f7bb24bac2feabd560d34f00c44376a new file mode 100644 index 0000000000..1c83ba5b73 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/329aca065f7bb24bac2feabd560d34f00c44376a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/343e1d8dc1d2c4983005b8fd26a6463b37f99db2 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/343e1d8dc1d2c4983005b8fd26a6463b37f99db2 new file mode 100644 index 0000000000..f6acf7c404 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/343e1d8dc1d2c4983005b8fd26a6463b37f99db2 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/346e2103e28a4930bad95639ab29e592c08cefa6 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/346e2103e28a4930bad95639ab29e592c08cefa6 new file mode 100644 index 0000000000..f8843dbbca Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/346e2103e28a4930bad95639ab29e592c08cefa6 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/34fc9866e5d186fbf9d5de5f3fab412c56334e99 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/34fc9866e5d186fbf9d5de5f3fab412c56334e99 new file mode 100644 index 0000000000..7a58023c48 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/34fc9866e5d186fbf9d5de5f3fab412c56334e99 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3507b8354533528a23ab4315d4c885728d4517f7 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3507b8354533528a23ab4315d4c885728d4517f7 new file mode 100644 index 0000000000..034c5f64ba Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3507b8354533528a23ab4315d4c885728d4517f7 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/35155bd9d42b3efc9fe082aaa8bc797460e9f755 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/35155bd9d42b3efc9fe082aaa8bc797460e9f755 new file mode 100644 index 0000000000..69e1240bd5 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/35155bd9d42b3efc9fe082aaa8bc797460e9f755 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/35fee2a8977ed3d1ffe28af62a77dce7117cd452 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/35fee2a8977ed3d1ffe28af62a77dce7117cd452 new file mode 100644 index 0000000000..b036fa7174 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/35fee2a8977ed3d1ffe28af62a77dce7117cd452 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37a5fb8fbe8ccff326e9e9910569111646747751 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37a5fb8fbe8ccff326e9e9910569111646747751 new file mode 100644 index 0000000000..a7d614b63f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37a5fb8fbe8ccff326e9e9910569111646747751 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37b8b7efc0109a3c636298dda2aa46420195a962 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37b8b7efc0109a3c636298dda2aa46420195a962 new file mode 100644 index 0000000000..8fadc880de Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37b8b7efc0109a3c636298dda2aa46420195a962 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37cbafc727a8da9c84ae83c3df969b55a5c4e41e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37cbafc727a8da9c84ae83c3df969b55a5c4e41e new file mode 100644 index 0000000000..aef6287d75 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37cbafc727a8da9c84ae83c3df969b55a5c4e41e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37e5668f9bb3fc5988733998c05abc94283d428f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37e5668f9bb3fc5988733998c05abc94283d428f new file mode 100644 index 0000000000..0c7aa59d6d Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/37e5668f9bb3fc5988733998c05abc94283d428f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/381c658f843db2f5d43ccb4a43cb04682e1f2bf4 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/381c658f843db2f5d43ccb4a43cb04682e1f2bf4 new file mode 100644 index 0000000000..cf035865ce Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/381c658f843db2f5d43ccb4a43cb04682e1f2bf4 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/394de55583a0048f5c66fe7000bdca33fafe6119 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/394de55583a0048f5c66fe7000bdca33fafe6119 new file mode 100644 index 0000000000..deffa2fc95 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/394de55583a0048f5c66fe7000bdca33fafe6119 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/394ffb858cc3abc3b91c70bde51b06b7ee2fbcf5 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/394ffb858cc3abc3b91c70bde51b06b7ee2fbcf5 new file mode 100644 index 0000000000..036723a9df Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/394ffb858cc3abc3b91c70bde51b06b7ee2fbcf5 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3a06f6e1b6125cc3b3172ffeb8ed62dfe00c2341 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3a06f6e1b6125cc3b3172ffeb8ed62dfe00c2341 new file mode 100644 index 0000000000..025607c106 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3a06f6e1b6125cc3b3172ffeb8ed62dfe00c2341 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3ce8c279df4cbe2c4ea31123a0d3e9b4c951914c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3ce8c279df4cbe2c4ea31123a0d3e9b4c951914c new file mode 100644 index 0000000000..1e69fa8601 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3ce8c279df4cbe2c4ea31123a0d3e9b4c951914c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3ea9002c31e63b87205bb738acf7fc81b49272e7 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3ea9002c31e63b87205bb738acf7fc81b49272e7 new file mode 100644 index 0000000000..960f418637 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3ea9002c31e63b87205bb738acf7fc81b49272e7 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3ed1c161615ff3e938c758a88a9f65ff8f0dd339 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3ed1c161615ff3e938c758a88a9f65ff8f0dd339 new file mode 100644 index 0000000000..77d6302124 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3ed1c161615ff3e938c758a88a9f65ff8f0dd339 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3f4291ca219f240c04e6d3e5aa96dacb6e799080 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3f4291ca219f240c04e6d3e5aa96dacb6e799080 new file mode 100644 index 0000000000..1ca8e9c450 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/3f4291ca219f240c04e6d3e5aa96dacb6e799080 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/401b675ac5e37dfa04204ce140b9303ba32b5b6e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/401b675ac5e37dfa04204ce140b9303ba32b5b6e new file mode 100644 index 0000000000..f1d601d53d Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/401b675ac5e37dfa04204ce140b9303ba32b5b6e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/404e87f63722081e798c590e2e7c2f40e56dbe30 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/404e87f63722081e798c590e2e7c2f40e56dbe30 new file mode 100644 index 0000000000..1536de8ef0 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/404e87f63722081e798c590e2e7c2f40e56dbe30 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/415ed953d36e3183979077b60c0d7e5cad047684 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/415ed953d36e3183979077b60c0d7e5cad047684 new file mode 100644 index 0000000000..ef7525da29 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/415ed953d36e3183979077b60c0d7e5cad047684 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/41a85fdfac68a99d4ce01e99001e735f831158fb b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/41a85fdfac68a99d4ce01e99001e735f831158fb new file mode 100644 index 0000000000..e2cbecd6ba Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/41a85fdfac68a99d4ce01e99001e735f831158fb differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/41f0f72c8d5bfcf4c8dcf389cfc81b48e8f442af b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/41f0f72c8d5bfcf4c8dcf389cfc81b48e8f442af new file mode 100644 index 0000000000..0304f9b196 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/41f0f72c8d5bfcf4c8dcf389cfc81b48e8f442af differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/44ea7930ff7b492d5af4ee670cce4480063b2151 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/44ea7930ff7b492d5af4ee670cce4480063b2151 new file mode 100644 index 0000000000..5d503e93fc Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/44ea7930ff7b492d5af4ee670cce4480063b2151 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4513ac6688f0ee25424148b34daf709d611224d4 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4513ac6688f0ee25424148b34daf709d611224d4 new file mode 100644 index 0000000000..d854c3f0e5 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4513ac6688f0ee25424148b34daf709d611224d4 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/455959785378d18fc2e3edf67e8a1c788ed8abe4 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/455959785378d18fc2e3edf67e8a1c788ed8abe4 new file mode 100644 index 0000000000..fd77320f8a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/455959785378d18fc2e3edf67e8a1c788ed8abe4 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/45d4bb696603560aedbab3931f92061fdecada67 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/45d4bb696603560aedbab3931f92061fdecada67 new file mode 100644 index 0000000000..8e8e1fa82c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/45d4bb696603560aedbab3931f92061fdecada67 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/45f1b0d5dcaa3131571748f33263330d53c5e1d9 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/45f1b0d5dcaa3131571748f33263330d53c5e1d9 new file mode 100644 index 0000000000..034b097b6e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/45f1b0d5dcaa3131571748f33263330d53c5e1d9 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46a5f1d1312924abce3dccfdde8a0cde929b27e1 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46a5f1d1312924abce3dccfdde8a0cde929b27e1 new file mode 100644 index 0000000000..0dd381360c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46a5f1d1312924abce3dccfdde8a0cde929b27e1 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46b109bd4d536e78f3490c56e1fb154074f33090 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46b109bd4d536e78f3490c56e1fb154074f33090 new file mode 100644 index 0000000000..5c0b57f4a6 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46b109bd4d536e78f3490c56e1fb154074f33090 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46d8eb0390144707541a5975d274cdf15dcbb313 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46d8eb0390144707541a5975d274cdf15dcbb313 new file mode 100644 index 0000000000..ea3ff40638 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46d8eb0390144707541a5975d274cdf15dcbb313 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46eb6575f0a502b62b4e65d3bd5d3404240d4f94 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46eb6575f0a502b62b4e65d3bd5d3404240d4f94 new file mode 100644 index 0000000000..0aed50533c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/46eb6575f0a502b62b4e65d3bd5d3404240d4f94 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/47893ae353e371706a6058aadeb7ca4f6184f8ac b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/47893ae353e371706a6058aadeb7ca4f6184f8ac new file mode 100644 index 0000000000..cccafb3200 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/47893ae353e371706a6058aadeb7ca4f6184f8ac differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/47a79c1c31d44ea77760d5e1296e5662c70a49f3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/47a79c1c31d44ea77760d5e1296e5662c70a49f3 new file mode 100644 index 0000000000..87bbcf9bff Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/47a79c1c31d44ea77760d5e1296e5662c70a49f3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/484b88501d4ffa48ed5029c74676ecc489cc9378 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/484b88501d4ffa48ed5029c74676ecc489cc9378 new file mode 100644 index 0000000000..26c85620df Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/484b88501d4ffa48ed5029c74676ecc489cc9378 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4859c552f7b35cd52ba095b5bf1f81af3aca8ded b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4859c552f7b35cd52ba095b5bf1f81af3aca8ded new file mode 100644 index 0000000000..a613d4a133 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4859c552f7b35cd52ba095b5bf1f81af3aca8ded differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4a8298f0e1001883547ad51571aae6475920fdbd b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4a8298f0e1001883547ad51571aae6475920fdbd new file mode 100644 index 0000000000..cc62f18cc6 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4a8298f0e1001883547ad51571aae6475920fdbd differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4a8917b9d77abc022b6607a667f827d5b24ec578 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4a8917b9d77abc022b6607a667f827d5b24ec578 new file mode 100644 index 0000000000..41d8327bcd Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4a8917b9d77abc022b6607a667f827d5b24ec578 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4ad004ce95d172ff9853b8c235dad5b3d0a0a9f1 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4ad004ce95d172ff9853b8c235dad5b3d0a0a9f1 new file mode 100644 index 0000000000..a9266e674e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4ad004ce95d172ff9853b8c235dad5b3d0a0a9f1 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4b1a2b34f41c3a77b07a945f7502171b4b25275a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4b1a2b34f41c3a77b07a945f7502171b4b25275a new file mode 100644 index 0000000000..bfe80d5a8d Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4b1a2b34f41c3a77b07a945f7502171b4b25275a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4cb675a2832ea35f71d6b96cd0b50e949107c33f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4cb675a2832ea35f71d6b96cd0b50e949107c33f new file mode 100644 index 0000000000..618de2d6bd Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4cb675a2832ea35f71d6b96cd0b50e949107c33f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4d32c941752dd84aa24d932a62794a875ebf52c7 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4d32c941752dd84aa24d932a62794a875ebf52c7 new file mode 100644 index 0000000000..cf5d702092 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4d32c941752dd84aa24d932a62794a875ebf52c7 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4dba7517df9555afb0acd7d6525c75809db292d0 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4dba7517df9555afb0acd7d6525c75809db292d0 new file mode 100644 index 0000000000..60ac1f7685 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4dba7517df9555afb0acd7d6525c75809db292d0 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4df1562da15d34ba269cf9f24dfcc8a9b19a222a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4df1562da15d34ba269cf9f24dfcc8a9b19a222a new file mode 100644 index 0000000000..471bccd70f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4df1562da15d34ba269cf9f24dfcc8a9b19a222a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4e5e2746ec1049c86ffc4edecb1778cd1c6fc504 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4e5e2746ec1049c86ffc4edecb1778cd1c6fc504 new file mode 100644 index 0000000000..a27a85643d Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4e5e2746ec1049c86ffc4edecb1778cd1c6fc504 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4efb90be149d557d5cc88b81c481b5ac53a92f5a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4efb90be149d557d5cc88b81c481b5ac53a92f5a new file mode 100644 index 0000000000..d93b94db12 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4efb90be149d557d5cc88b81c481b5ac53a92f5a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4f327f2c160ed1fb0782c0c11b5daaaf3d7f7c3d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4f327f2c160ed1fb0782c0c11b5daaaf3d7f7c3d new file mode 100644 index 0000000000..c22f9698e0 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4f327f2c160ed1fb0782c0c11b5daaaf3d7f7c3d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4fbbc619e96fddfc793ae1fb0372b433b0d993f7 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4fbbc619e96fddfc793ae1fb0372b433b0d993f7 new file mode 100644 index 0000000000..ed6ed93265 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/4fbbc619e96fddfc793ae1fb0372b433b0d993f7 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5004e50d15681eba33f6f53503a9d5f90f8dd70d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5004e50d15681eba33f6f53503a9d5f90f8dd70d new file mode 100644 index 0000000000..72ca29be2c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5004e50d15681eba33f6f53503a9d5f90f8dd70d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/504d91199108e95fe9d8231069365d25590aefe8 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/504d91199108e95fe9d8231069365d25590aefe8 new file mode 100644 index 0000000000..926d7c6406 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/504d91199108e95fe9d8231069365d25590aefe8 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/524357263309b10b2ce4f7386ff3d2f6bd4e3ad6 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/524357263309b10b2ce4f7386ff3d2f6bd4e3ad6 new file mode 100644 index 0000000000..84c7a0564a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/524357263309b10b2ce4f7386ff3d2f6bd4e3ad6 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/52f8af343365b28116339c561463380c2e96bac6 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/52f8af343365b28116339c561463380c2e96bac6 new file mode 100644 index 0000000000..f356b42d16 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/52f8af343365b28116339c561463380c2e96bac6 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/530b733cf01ec927faefdd6b8152df8e72b6e4a2 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/530b733cf01ec927faefdd6b8152df8e72b6e4a2 new file mode 100644 index 0000000000..62d614644a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/530b733cf01ec927faefdd6b8152df8e72b6e4a2 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/536cee50a52397ce3b2d6a13afc208fbf906787e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/536cee50a52397ce3b2d6a13afc208fbf906787e new file mode 100644 index 0000000000..89073d7e36 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/536cee50a52397ce3b2d6a13afc208fbf906787e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/53a566d9825b1995770b6a74d80e6d81102fe60c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/53a566d9825b1995770b6a74d80e6d81102fe60c new file mode 100644 index 0000000000..9c663051f9 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/53a566d9825b1995770b6a74d80e6d81102fe60c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/53a750a14aa1909962f7153c041c9403d9c4deb5 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/53a750a14aa1909962f7153c041c9403d9c4deb5 new file mode 100644 index 0000000000..38383937f9 --- /dev/null +++ b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/53a750a14aa1909962f7153c041c9403d9c4deb5 @@ -0,0 +1,2 @@ +0 + \ No newline at end of file diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/53db217815def61ac7e1ee9cdac444d11ccb2d00 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/53db217815def61ac7e1ee9cdac444d11ccb2d00 new file mode 100644 index 0000000000..800c6ff9db Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/53db217815def61ac7e1ee9cdac444d11ccb2d00 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/540c900c05822b68b5e0f3a8692781e2a1cb666d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/540c900c05822b68b5e0f3a8692781e2a1cb666d new file mode 100644 index 0000000000..01ed5721e5 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/540c900c05822b68b5e0f3a8692781e2a1cb666d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5451e479e0bc6e683c11c8958f6a02f567db2f60 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5451e479e0bc6e683c11c8958f6a02f567db2f60 new file mode 100644 index 0000000000..7b77953d5e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5451e479e0bc6e683c11c8958f6a02f567db2f60 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/548b857a703d84a945c86279bf831e165f0f2efe b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/548b857a703d84a945c86279bf831e165f0f2efe new file mode 100644 index 0000000000..13e81e93d7 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/548b857a703d84a945c86279bf831e165f0f2efe differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/54fd7e8bcce8f6face5cd650159dfabcbe1c1ffd b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/54fd7e8bcce8f6face5cd650159dfabcbe1c1ffd new file mode 100644 index 0000000000..68b5fd7be7 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/54fd7e8bcce8f6face5cd650159dfabcbe1c1ffd differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/55e1fe3b23a5166ec6ea28ff37b469055eb16c19 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/55e1fe3b23a5166ec6ea28ff37b469055eb16c19 new file mode 100644 index 0000000000..3f731c8c35 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/55e1fe3b23a5166ec6ea28ff37b469055eb16c19 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5641870527cb47edeeed8b85c03417815368ec7d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5641870527cb47edeeed8b85c03417815368ec7d new file mode 100644 index 0000000000..b7b056acb8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5641870527cb47edeeed8b85c03417815368ec7d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/56462d3da671108c2f1da1563f2170650556d26e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/56462d3da671108c2f1da1563f2170650556d26e new file mode 100644 index 0000000000..48b2d832fc Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/56462d3da671108c2f1da1563f2170650556d26e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5686f395a03f1d62cd9493c88c53d80c084e7221 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5686f395a03f1d62cd9493c88c53d80c084e7221 new file mode 100644 index 0000000000..a433f13a04 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5686f395a03f1d62cd9493c88c53d80c084e7221 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb new file mode 100644 index 0000000000..d1a537e229 --- /dev/null +++ b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/59ac9705fed3c7a17f53a8501b9ed953e2a6dca6 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/59ac9705fed3c7a17f53a8501b9ed953e2a6dca6 new file mode 100644 index 0000000000..689dbd8947 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/59ac9705fed3c7a17f53a8501b9ed953e2a6dca6 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5a7fa8a9ab7b544c910c46424404c16d0b673519 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5a7fa8a9ab7b544c910c46424404c16d0b673519 new file mode 100644 index 0000000000..eec8255b28 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5a7fa8a9ab7b544c910c46424404c16d0b673519 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5b37b2dd30ce3bd843b8e5802a071167269ec999 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5b37b2dd30ce3bd843b8e5802a071167269ec999 new file mode 100644 index 0000000000..0deb447e44 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5b37b2dd30ce3bd843b8e5802a071167269ec999 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5c87ce2edfcdc2baab9eca65523e78e10c9fb9c9 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5c87ce2edfcdc2baab9eca65523e78e10c9fb9c9 new file mode 100644 index 0000000000..7cd5593029 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5c87ce2edfcdc2baab9eca65523e78e10c9fb9c9 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5dd14dccba0d9748832e8a864cde258e42f86297 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5dd14dccba0d9748832e8a864cde258e42f86297 new file mode 100644 index 0000000000..011bcf013f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5dd14dccba0d9748832e8a864cde258e42f86297 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5ddaa1fbe85f406e64a43f275dd95ff2894cd64a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5ddaa1fbe85f406e64a43f275dd95ff2894cd64a new file mode 100644 index 0000000000..9010e2f2f1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/5ddaa1fbe85f406e64a43f275dd95ff2894cd64a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/60628e6afcdd234f793ec2b424f72efb3109ab08 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/60628e6afcdd234f793ec2b424f72efb3109ab08 new file mode 100644 index 0000000000..9927234dca Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/60628e6afcdd234f793ec2b424f72efb3109ab08 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/61698709085b84b0e8d8697a88a00db8b00ac07a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/61698709085b84b0e8d8697a88a00db8b00ac07a new file mode 100644 index 0000000000..f80bb1d9b1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/61698709085b84b0e8d8697a88a00db8b00ac07a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/61873b0274152a7f2c33848ca3e9bb9b79dad6b3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/61873b0274152a7f2c33848ca3e9bb9b79dad6b3 new file mode 100644 index 0000000000..cc0e7a2d18 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/61873b0274152a7f2c33848ca3e9bb9b79dad6b3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/61a4fe120bd9971fc1f5ae9732d5ca12358df961 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/61a4fe120bd9971fc1f5ae9732d5ca12358df961 new file mode 100644 index 0000000000..3e7e307cc1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/61a4fe120bd9971fc1f5ae9732d5ca12358df961 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6265d48a2e60c824b32336c2708f090059db6fe3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6265d48a2e60c824b32336c2708f090059db6fe3 new file mode 100644 index 0000000000..010622bd0e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6265d48a2e60c824b32336c2708f090059db6fe3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/632c28ba8779b15c161e30b1bfccb230b5952dcd b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/632c28ba8779b15c161e30b1bfccb230b5952dcd new file mode 100644 index 0000000000..c169c09f06 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/632c28ba8779b15c161e30b1bfccb230b5952dcd differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/640a8cb582c76ecf3282c7175f83cde27d09cb1f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/640a8cb582c76ecf3282c7175f83cde27d09cb1f new file mode 100644 index 0000000000..a047671e26 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/640a8cb582c76ecf3282c7175f83cde27d09cb1f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6435347dad861efcd24027e9201be19fa5eeed09 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6435347dad861efcd24027e9201be19fa5eeed09 new file mode 100644 index 0000000000..883e15113c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6435347dad861efcd24027e9201be19fa5eeed09 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/64538fedb70601efa22f55ffd1a34b0d4b7726f8 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/64538fedb70601efa22f55ffd1a34b0d4b7726f8 new file mode 100644 index 0000000000..07fb8d7efa Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/64538fedb70601efa22f55ffd1a34b0d4b7726f8 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/648ac3a8409625c7b0e313f83c14a47ad5430eef b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/648ac3a8409625c7b0e313f83c14a47ad5430eef new file mode 100644 index 0000000000..aa40a8057d Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/648ac3a8409625c7b0e313f83c14a47ad5430eef differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/656a80edfa182e065c92569c4d03a9d20a3a730e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/656a80edfa182e065c92569c4d03a9d20a3a730e new file mode 100644 index 0000000000..e6ba93d378 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/656a80edfa182e065c92569c4d03a9d20a3a730e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6614270c00cd9c110aa444a28fbb9b8a9dc8abda b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6614270c00cd9c110aa444a28fbb9b8a9dc8abda new file mode 100644 index 0000000000..d7b1985052 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6614270c00cd9c110aa444a28fbb9b8a9dc8abda differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/662df7524228608f3af2f603ee147ad55cb7973c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/662df7524228608f3af2f603ee147ad55cb7973c new file mode 100644 index 0000000000..0ae32dcc8d Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/662df7524228608f3af2f603ee147ad55cb7973c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/66f6facc7bf7219b9efa313199e88c71a645f288 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/66f6facc7bf7219b9efa313199e88c71a645f288 new file mode 100644 index 0000000000..6b5deafaed Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/66f6facc7bf7219b9efa313199e88c71a645f288 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/68ab9ca40775754dc9dc5cacc1b61f420efff969 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/68ab9ca40775754dc9dc5cacc1b61f420efff969 new file mode 100644 index 0000000000..c27488e1cb Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/68ab9ca40775754dc9dc5cacc1b61f420efff969 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6a2666d17d04eedf1f7163021be6a4f87fe8c94b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6a2666d17d04eedf1f7163021be6a4f87fe8c94b new file mode 100644 index 0000000000..f5a8ab7695 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6a2666d17d04eedf1f7163021be6a4f87fe8c94b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6c3c3b9c8d03001c711975f08962293fa7180d17 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6c3c3b9c8d03001c711975f08962293fa7180d17 new file mode 100644 index 0000000000..bb71a92eca Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6c3c3b9c8d03001c711975f08962293fa7180d17 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6c5c667d2a67111f6af408a6efc9e64fde0ceedf b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6c5c667d2a67111f6af408a6efc9e64fde0ceedf new file mode 100644 index 0000000000..91b9c113f4 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6c5c667d2a67111f6af408a6efc9e64fde0ceedf differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6cc20006d0be6beb2f7885132650ca19fa137cc8 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6cc20006d0be6beb2f7885132650ca19fa137cc8 new file mode 100644 index 0000000000..3c434ffc0e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6cc20006d0be6beb2f7885132650ca19fa137cc8 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6ce0616776f0945f13744f584e7c00cb5de00352 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6ce0616776f0945f13744f584e7c00cb5de00352 new file mode 100644 index 0000000000..fdffffe6f5 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6ce0616776f0945f13744f584e7c00cb5de00352 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6cec916f8c7ec4022f80ea78d431bc7aed4f26a5 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6cec916f8c7ec4022f80ea78d431bc7aed4f26a5 new file mode 100644 index 0000000000..62ec3d24de Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6cec916f8c7ec4022f80ea78d431bc7aed4f26a5 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6de2601db8b54fd59a963c16958891a373a4db28 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6de2601db8b54fd59a963c16958891a373a4db28 new file mode 100644 index 0000000000..e97ba4b8f1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6de2601db8b54fd59a963c16958891a373a4db28 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6de414e85c0140082b76d5aec9b62d074288a64b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6de414e85c0140082b76d5aec9b62d074288a64b new file mode 100644 index 0000000000..3a4cc6d463 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6de414e85c0140082b76d5aec9b62d074288a64b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6f276a9c83873f20f6d86ad78d415160d7feaffa b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6f276a9c83873f20f6d86ad78d415160d7feaffa new file mode 100644 index 0000000000..f2928a6d3c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6f276a9c83873f20f6d86ad78d415160d7feaffa differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6f47905c85dca58b032b80a586e39a8850e61dc8 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6f47905c85dca58b032b80a586e39a8850e61dc8 new file mode 100644 index 0000000000..e4c51492e8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/6f47905c85dca58b032b80a586e39a8850e61dc8 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/70a470e76e6f05182c5a1c157ccd53e31721cefe b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/70a470e76e6f05182c5a1c157ccd53e31721cefe new file mode 100644 index 0000000000..2797b13155 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/70a470e76e6f05182c5a1c157ccd53e31721cefe differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/70c1e21db7d3e8e1fb075851f42adcf9de75e687 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/70c1e21db7d3e8e1fb075851f42adcf9de75e687 new file mode 100644 index 0000000000..8d5ddb786a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/70c1e21db7d3e8e1fb075851f42adcf9de75e687 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/71087993534c29e805d3c013f10ae8f7978fc8b3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/71087993534c29e805d3c013f10ae8f7978fc8b3 new file mode 100644 index 0000000000..2306982ad5 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/71087993534c29e805d3c013f10ae8f7978fc8b3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7155b3180d8d1492c62fa3ce8fd1ed7abbfe232b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7155b3180d8d1492c62fa3ce8fd1ed7abbfe232b new file mode 100644 index 0000000000..ff08fbab53 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7155b3180d8d1492c62fa3ce8fd1ed7abbfe232b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/72bd35571c16de6b16f0f72c7f68de656bad3e69 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/72bd35571c16de6b16f0f72c7f68de656bad3e69 new file mode 100644 index 0000000000..2b6e211cb6 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/72bd35571c16de6b16f0f72c7f68de656bad3e69 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/72de50993cabe5d62293f7d91b6e44a7bf48e733 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/72de50993cabe5d62293f7d91b6e44a7bf48e733 new file mode 100644 index 0000000000..b38153b8b4 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/72de50993cabe5d62293f7d91b6e44a7bf48e733 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7321714387a121d4fb929ae2a90963cf4ad31f96 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7321714387a121d4fb929ae2a90963cf4ad31f96 new file mode 100644 index 0000000000..d05ce37b69 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7321714387a121d4fb929ae2a90963cf4ad31f96 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/732e446aa783174459b4d955b5b41c65d643dfd5 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/732e446aa783174459b4d955b5b41c65d643dfd5 new file mode 100644 index 0000000000..2dc14b201e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/732e446aa783174459b4d955b5b41c65d643dfd5 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/73dc393e48e5a652ba4497f81e07f022658dc63d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/73dc393e48e5a652ba4497f81e07f022658dc63d new file mode 100644 index 0000000000..972030f0b1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/73dc393e48e5a652ba4497f81e07f022658dc63d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/742bdba9fe1b7f20d0cadf72bb2fdd83ebad3484 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/742bdba9fe1b7f20d0cadf72bb2fdd83ebad3484 new file mode 100644 index 0000000000..2dffc82b59 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/742bdba9fe1b7f20d0cadf72bb2fdd83ebad3484 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7435f6f04acb0eb5e89768d795ae3bec28b51089 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7435f6f04acb0eb5e89768d795ae3bec28b51089 new file mode 100644 index 0000000000..5a161b9554 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7435f6f04acb0eb5e89768d795ae3bec28b51089 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/74449edbf04657e36714c014ca4c30c456f781e0 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/74449edbf04657e36714c014ca4c30c456f781e0 new file mode 100644 index 0000000000..601d46b95e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/74449edbf04657e36714c014ca4c30c456f781e0 differ diff --git a/devel/fuzz/gnutls_ocsp_resp_parser.in/response3.der b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/770112631a2cb04eac3f1aea84bb77472b6d6a0b similarity index 100% rename from devel/fuzz/gnutls_ocsp_resp_parser.in/response3.der rename to fuzz/gnutls_ocsp_resp_parser_fuzzer.in/770112631a2cb04eac3f1aea84bb77472b6d6a0b diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7747e0c5cb480d68cdd2bd54eba52c011c936870 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7747e0c5cb480d68cdd2bd54eba52c011c936870 new file mode 100644 index 0000000000..3c90817ae3 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7747e0c5cb480d68cdd2bd54eba52c011c936870 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/77f1a05f72bc6e12514795c3756522b960c3b2c0 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/77f1a05f72bc6e12514795c3756522b960c3b2c0 new file mode 100644 index 0000000000..0fda2ff969 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/77f1a05f72bc6e12514795c3756522b960c3b2c0 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7856699e5d93fb1462507374a02a1cbbae21b7df b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7856699e5d93fb1462507374a02a1cbbae21b7df new file mode 100644 index 0000000000..daae75e620 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7856699e5d93fb1462507374a02a1cbbae21b7df differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/78d5b7d877a6294aeed7f3f2f691daebae81be94 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/78d5b7d877a6294aeed7f3f2f691daebae81be94 new file mode 100644 index 0000000000..76329cbab7 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/78d5b7d877a6294aeed7f3f2f691daebae81be94 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7b61bb3ef4ae8e4aee2d064f1adce9e6ed85532b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7b61bb3ef4ae8e4aee2d064f1adce9e6ed85532b new file mode 100644 index 0000000000..718d683d26 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7b61bb3ef4ae8e4aee2d064f1adce9e6ed85532b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7c0c131adfe87c1b0b6b7fe49a8b803a7e9c03d2 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7c0c131adfe87c1b0b6b7fe49a8b803a7e9c03d2 new file mode 100644 index 0000000000..547712ee0a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7c0c131adfe87c1b0b6b7fe49a8b803a7e9c03d2 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7c99ca3a1dc909affd39d44060cd573da4b810e2 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7c99ca3a1dc909affd39d44060cd573da4b810e2 new file mode 100644 index 0000000000..5f179c236a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7c99ca3a1dc909affd39d44060cd573da4b810e2 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7d647c65baa53925771354ddcfa8ae4ecbab786f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7d647c65baa53925771354ddcfa8ae4ecbab786f new file mode 100644 index 0000000000..808a9fae83 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7d647c65baa53925771354ddcfa8ae4ecbab786f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7e20786ea48bafeb27a1e2acc2b67d8ade5dfbd3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7e20786ea48bafeb27a1e2acc2b67d8ade5dfbd3 new file mode 100644 index 0000000000..a8b300f916 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7e20786ea48bafeb27a1e2acc2b67d8ade5dfbd3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7e55ded2c85849751a716dc30e16233f23dc859e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7e55ded2c85849751a716dc30e16233f23dc859e new file mode 100644 index 0000000000..800a69cb4b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7e55ded2c85849751a716dc30e16233f23dc859e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7f0694d007d56eabf8cd58d0d3c6b8d6811ba698 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7f0694d007d56eabf8cd58d0d3c6b8d6811ba698 new file mode 100644 index 0000000000..2ad556d918 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7f0694d007d56eabf8cd58d0d3c6b8d6811ba698 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7f84262be1de18a41c290012fd126483de683dab b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7f84262be1de18a41c290012fd126483de683dab new file mode 100644 index 0000000000..b5b8e16fa1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/7f84262be1de18a41c290012fd126483de683dab differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8074c496722dc6aa3baff923fac7c601b511b9b2 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8074c496722dc6aa3baff923fac7c601b511b9b2 new file mode 100644 index 0000000000..4dff67c501 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8074c496722dc6aa3baff923fac7c601b511b9b2 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/818ec1608ead6ab951c7b5e1c1900585811e5b7c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/818ec1608ead6ab951c7b5e1c1900585811e5b7c new file mode 100644 index 0000000000..edfe7423e5 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/818ec1608ead6ab951c7b5e1c1900585811e5b7c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/824612d5f11cbbcda43b14f609a4a39318b11227 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/824612d5f11cbbcda43b14f609a4a39318b11227 new file mode 100644 index 0000000000..a94795ecd3 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/824612d5f11cbbcda43b14f609a4a39318b11227 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/83d7127835e846010362c627da85b0e1dac8fab8 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/83d7127835e846010362c627da85b0e1dac8fab8 new file mode 100644 index 0000000000..098664033c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/83d7127835e846010362c627da85b0e1dac8fab8 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8440cd50e780a8836d62ced57c99aa9262964f8f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8440cd50e780a8836d62ced57c99aa9262964f8f new file mode 100644 index 0000000000..25c199334b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8440cd50e780a8836d62ced57c99aa9262964f8f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/84f6b05f5153e62f60143ab47e994b41ee2e5666 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/84f6b05f5153e62f60143ab47e994b41ee2e5666 new file mode 100644 index 0000000000..4c037d33fc Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/84f6b05f5153e62f60143ab47e994b41ee2e5666 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8604dd3817e3e72e2c72c7e7b1e70275842d68db b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8604dd3817e3e72e2c72c7e7b1e70275842d68db new file mode 100644 index 0000000000..39ba4cc74f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8604dd3817e3e72e2c72c7e7b1e70275842d68db differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/861313e7dec5625f8cff541849761ef9d513511a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/861313e7dec5625f8cff541849761ef9d513511a new file mode 100644 index 0000000000..932bb563e2 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/861313e7dec5625f8cff541849761ef9d513511a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/866c4e15461f6131f2f538990ee49fbcfc75c6a2 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/866c4e15461f6131f2f538990ee49fbcfc75c6a2 new file mode 100644 index 0000000000..b376f16025 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/866c4e15461f6131f2f538990ee49fbcfc75c6a2 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/899e00ac2c89cb3806fadd36798284f16182ce8b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/899e00ac2c89cb3806fadd36798284f16182ce8b new file mode 100644 index 0000000000..a7f52d1499 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/899e00ac2c89cb3806fadd36798284f16182ce8b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8b93f296f933bed1e0d4c7b6a9a20f8aca87a9d7 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8b93f296f933bed1e0d4c7b6a9a20f8aca87a9d7 new file mode 100644 index 0000000000..1e9fe142d0 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8b93f296f933bed1e0d4c7b6a9a20f8aca87a9d7 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8d404cd57182e82196bf7afdf8ede9d5fff16718 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8d404cd57182e82196bf7afdf8ede9d5fff16718 new file mode 100644 index 0000000000..fb616fea90 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8d404cd57182e82196bf7afdf8ede9d5fff16718 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8d96fa1ada72f649379e00a06cec884c7635bcbf b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8d96fa1ada72f649379e00a06cec884c7635bcbf new file mode 100644 index 0000000000..9986f6063f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8d96fa1ada72f649379e00a06cec884c7635bcbf differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8e6c195c8651b3efc77d618ff88d97c2a491dd93 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8e6c195c8651b3efc77d618ff88d97c2a491dd93 new file mode 100644 index 0000000000..7efd8725af Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8e6c195c8651b3efc77d618ff88d97c2a491dd93 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8f09ff4d1ff1274273e7c2b1999afff207e27283 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8f09ff4d1ff1274273e7c2b1999afff207e27283 new file mode 100644 index 0000000000..a4bf77c3a6 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8f09ff4d1ff1274273e7c2b1999afff207e27283 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8fb8909cdde1fdf5d1710f4be2fdb305d4bf2a02 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8fb8909cdde1fdf5d1710f4be2fdb305d4bf2a02 new file mode 100644 index 0000000000..f3dbce5346 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/8fb8909cdde1fdf5d1710f4be2fdb305d4bf2a02 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/90a14206b7d15c09b6d106dbc7f8ea72c4f2ac5a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/90a14206b7d15c09b6d106dbc7f8ea72c4f2ac5a new file mode 100644 index 0000000000..60f1d88003 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/90a14206b7d15c09b6d106dbc7f8ea72c4f2ac5a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/90a6e614d88815789bda4b34a2bc4c8606ceb9dc b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/90a6e614d88815789bda4b34a2bc4c8606ceb9dc new file mode 100644 index 0000000000..d81ec71a65 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/90a6e614d88815789bda4b34a2bc4c8606ceb9dc differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/90dca9419440873724d8ec2a51d776e6380ba35d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/90dca9419440873724d8ec2a51d776e6380ba35d new file mode 100644 index 0000000000..dd409f4941 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/90dca9419440873724d8ec2a51d776e6380ba35d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/919b37b86c8759032dbd5cd5c7f1b52a3ba5afca b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/919b37b86c8759032dbd5cd5c7f1b52a3ba5afca new file mode 100644 index 0000000000..5fb9169382 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/919b37b86c8759032dbd5cd5c7f1b52a3ba5afca differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/925313b18b1e23c9d83231bc251fb8a57de69382 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/925313b18b1e23c9d83231bc251fb8a57de69382 new file mode 100644 index 0000000000..3f47404502 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/925313b18b1e23c9d83231bc251fb8a57de69382 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9275a3ddc809ab4ed61cb615c517fb5f2a5fad24 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9275a3ddc809ab4ed61cb615c517fb5f2a5fad24 new file mode 100644 index 0000000000..74c439bc2f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9275a3ddc809ab4ed61cb615c517fb5f2a5fad24 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9392f69f62b39f2f92f3ab579630051787a77b19 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9392f69f62b39f2f92f3ab579630051787a77b19 new file mode 100644 index 0000000000..414d1b4ebd Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9392f69f62b39f2f92f3ab579630051787a77b19 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/939d187ed9172fe58da53f045b90d44b5a9e104c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/939d187ed9172fe58da53f045b90d44b5a9e104c new file mode 100644 index 0000000000..e49dcbed9b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/939d187ed9172fe58da53f045b90d44b5a9e104c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/93b0bb62fbd4a141ab5b4e45b07e7befc6f3c77c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/93b0bb62fbd4a141ab5b4e45b07e7befc6f3c77c new file mode 100644 index 0000000000..4a2a569ef2 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/93b0bb62fbd4a141ab5b4e45b07e7befc6f3c77c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/944ac4f4f1638073beee19ae0831cb38cbe3cb70 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/944ac4f4f1638073beee19ae0831cb38cbe3cb70 new file mode 100644 index 0000000000..2a0a502090 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/944ac4f4f1638073beee19ae0831cb38cbe3cb70 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/94a0c499ed5a61db10912a62be45fae1d19db73f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/94a0c499ed5a61db10912a62be45fae1d19db73f new file mode 100644 index 0000000000..2bf87cfeb2 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/94a0c499ed5a61db10912a62be45fae1d19db73f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/94b5649ee4e7df4e633c46cfb7f8f5df7e601a7c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/94b5649ee4e7df4e633c46cfb7f8f5df7e601a7c new file mode 100644 index 0000000000..e71b35001a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/94b5649ee4e7df4e633c46cfb7f8f5df7e601a7c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/94c662bdc5056f0b320f3fe6f94e56934b5e6076 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/94c662bdc5056f0b320f3fe6f94e56934b5e6076 new file mode 100644 index 0000000000..f6e50da0f5 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/94c662bdc5056f0b320f3fe6f94e56934b5e6076 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9549bc01c6d17e44b2e63f0d40bc20b725abf1ef b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9549bc01c6d17e44b2e63f0d40bc20b725abf1ef new file mode 100644 index 0000000000..70a7175ce9 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9549bc01c6d17e44b2e63f0d40bc20b725abf1ef differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9568004c8c522e8f12e21396d96236d76890b2dd b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9568004c8c522e8f12e21396d96236d76890b2dd new file mode 100644 index 0000000000..ab92ec57e2 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9568004c8c522e8f12e21396d96236d76890b2dd differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/961c9c9405aac31ab6c587a0533fc30ee50619fb b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/961c9c9405aac31ab6c587a0533fc30ee50619fb new file mode 100644 index 0000000000..5e5b4ed22c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/961c9c9405aac31ab6c587a0533fc30ee50619fb differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9627040a0bc71c5ef053fbc0d397bd399bad3c57 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9627040a0bc71c5ef053fbc0d397bd399bad3c57 new file mode 100644 index 0000000000..aaa856891e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9627040a0bc71c5ef053fbc0d397bd399bad3c57 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/967aecbb71b1d986c83cab1c110c7328eabcf93b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/967aecbb71b1d986c83cab1c110c7328eabcf93b new file mode 100644 index 0000000000..8390a72caa Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/967aecbb71b1d986c83cab1c110c7328eabcf93b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9699017a4ef7ca30b901c914469ad713249b8cac b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9699017a4ef7ca30b901c914469ad713249b8cac new file mode 100644 index 0000000000..66c6d0f4b8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9699017a4ef7ca30b901c914469ad713249b8cac differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/97de7aab804486e89633fa41393021d804fb2aaa b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/97de7aab804486e89633fa41393021d804fb2aaa new file mode 100644 index 0000000000..14995ee6b7 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/97de7aab804486e89633fa41393021d804fb2aaa differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/984e6b613a862940c5068f5e68622235c3ee3fb3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/984e6b613a862940c5068f5e68622235c3ee3fb3 new file mode 100644 index 0000000000..a2d5d24715 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/984e6b613a862940c5068f5e68622235c3ee3fb3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/98f1228c8e198c01945d0d9a667d41ff57bcfa3d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/98f1228c8e198c01945d0d9a667d41ff57bcfa3d new file mode 100644 index 0000000000..54f0474b56 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/98f1228c8e198c01945d0d9a667d41ff57bcfa3d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/991989a2f1fb26f4622b9514a424c1f8cdd40ab5 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/991989a2f1fb26f4622b9514a424c1f8cdd40ab5 new file mode 100644 index 0000000000..1ba755f25d Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/991989a2f1fb26f4622b9514a424c1f8cdd40ab5 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/99834a21f010b31b58c7b432afea8717a3eafdbf b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/99834a21f010b31b58c7b432afea8717a3eafdbf new file mode 100644 index 0000000000..678ac549d9 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/99834a21f010b31b58c7b432afea8717a3eafdbf differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/99e772af1a5f54caa2995e479e9f17413b4461f3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/99e772af1a5f54caa2995e479e9f17413b4461f3 new file mode 100644 index 0000000000..cf931c8d83 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/99e772af1a5f54caa2995e479e9f17413b4461f3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9a2e3237b8762a077a46c730a0e6a43e8b6821ff b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9a2e3237b8762a077a46c730a0e6a43e8b6821ff new file mode 100644 index 0000000000..11d8aa3826 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9a2e3237b8762a077a46c730a0e6a43e8b6821ff differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9a5cb0777f25d2433a0fedb53190cba119bfbe6e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9a5cb0777f25d2433a0fedb53190cba119bfbe6e new file mode 100644 index 0000000000..5ff5c167e0 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9a5cb0777f25d2433a0fedb53190cba119bfbe6e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9ab586d3f403bfefb364a3150c16faac556f9045 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9ab586d3f403bfefb364a3150c16faac556f9045 new file mode 100644 index 0000000000..28693aaa29 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9ab586d3f403bfefb364a3150c16faac556f9045 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9b1f577c134dcc42396772352b543a6617ad06ed b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9b1f577c134dcc42396772352b543a6617ad06ed new file mode 100644 index 0000000000..9a0b819ce4 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9b1f577c134dcc42396772352b543a6617ad06ed differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9b37bce1e711633af22680b9a282dedf2ad2c234 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9b37bce1e711633af22680b9a282dedf2ad2c234 new file mode 100644 index 0000000000..851d1f7ccc Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9b37bce1e711633af22680b9a282dedf2ad2c234 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9ca90b0a68839582836a5c1e871c1cc4153405a5 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9ca90b0a68839582836a5c1e871c1cc4153405a5 new file mode 100644 index 0000000000..e27c3e7ebf Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9ca90b0a68839582836a5c1e871c1cc4153405a5 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9d8fd36c716e5bed2572a9b2cb163d7f10fc65b7 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9d8fd36c716e5bed2572a9b2cb163d7f10fc65b7 new file mode 100644 index 0000000000..84779eef7f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9d8fd36c716e5bed2572a9b2cb163d7f10fc65b7 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9db5648f3a88bd4c3bb98ddfa016e4899a9da689 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9db5648f3a88bd4c3bb98ddfa016e4899a9da689 new file mode 100644 index 0000000000..9cf942a4cf Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9db5648f3a88bd4c3bb98ddfa016e4899a9da689 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9dff4737f8e797fc7b6f777abefe9144d5482b8d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9dff4737f8e797fc7b6f777abefe9144d5482b8d new file mode 100644 index 0000000000..5bfb128b5a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9dff4737f8e797fc7b6f777abefe9144d5482b8d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9e5ab5834c97ef0e9c8d4372a0769647a806104a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9e5ab5834c97ef0e9c8d4372a0769647a806104a new file mode 100644 index 0000000000..25bc880f2c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9e5ab5834c97ef0e9c8d4372a0769647a806104a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9e890471a412705309fb8ee9791c433fa5371f0b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9e890471a412705309fb8ee9791c433fa5371f0b new file mode 100644 index 0000000000..ca5f216e82 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9e890471a412705309fb8ee9791c433fa5371f0b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9fa36734c4519204fb6aea5165edd7f48079ec05 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9fa36734c4519204fb6aea5165edd7f48079ec05 new file mode 100644 index 0000000000..5805ac50f4 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/9fa36734c4519204fb6aea5165edd7f48079ec05 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a14f7618e7f841f5328b0fb41d2924d491af9d34 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a14f7618e7f841f5328b0fb41d2924d491af9d34 new file mode 100644 index 0000000000..2c84c727cd Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a14f7618e7f841f5328b0fb41d2924d491af9d34 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a1587891f687df69df79b92087ec899e57a6addb b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a1587891f687df69df79b92087ec899e57a6addb new file mode 100644 index 0000000000..5df7bf4705 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a1587891f687df69df79b92087ec899e57a6addb differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a1992bde00779c8cdad625c93e45bafb83c50dd3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a1992bde00779c8cdad625c93e45bafb83c50dd3 new file mode 100644 index 0000000000..5933286c55 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a1992bde00779c8cdad625c93e45bafb83c50dd3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a1dcd3466d73511dd38f978e8fda20a75a74268e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a1dcd3466d73511dd38f978e8fda20a75a74268e new file mode 100644 index 0000000000..373853d97c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a1dcd3466d73511dd38f978e8fda20a75a74268e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a4b2f09e386724816c5b263a21da374533a2640c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a4b2f09e386724816c5b263a21da374533a2640c new file mode 100644 index 0000000000..699db70189 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a4b2f09e386724816c5b263a21da374533a2640c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a4d5675b01e56402b3781ccb57c41a07182d7055 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a4d5675b01e56402b3781ccb57c41a07182d7055 new file mode 100644 index 0000000000..0914060d41 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a4d5675b01e56402b3781ccb57c41a07182d7055 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a5e5690ca7d4f847075f56e269398de37285a770 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a5e5690ca7d4f847075f56e269398de37285a770 new file mode 100644 index 0000000000..4462d2f47f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a5e5690ca7d4f847075f56e269398de37285a770 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a68da25336716d4ce80b37b9e83a908dbd240943 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a68da25336716d4ce80b37b9e83a908dbd240943 new file mode 100644 index 0000000000..a011db8df6 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a68da25336716d4ce80b37b9e83a908dbd240943 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a72d729878ea4812258d4f85c89e5991481bbc12 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a72d729878ea4812258d4f85c89e5991481bbc12 new file mode 100644 index 0000000000..a4c539ab68 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a72d729878ea4812258d4f85c89e5991481bbc12 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a742cc351060d2be03d92f8c9b4fd50e148dacfc b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a742cc351060d2be03d92f8c9b4fd50e148dacfc new file mode 100644 index 0000000000..ac0885afa7 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a742cc351060d2be03d92f8c9b4fd50e148dacfc differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a758129cae5314ce2e3bc2356c016bded5b84f3a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a758129cae5314ce2e3bc2356c016bded5b84f3a new file mode 100644 index 0000000000..f06aea6303 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a758129cae5314ce2e3bc2356c016bded5b84f3a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a7ab4d81f00f9fb8eb2d79b668dc447e84494527 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a7ab4d81f00f9fb8eb2d79b668dc447e84494527 new file mode 100644 index 0000000000..c626038416 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a7ab4d81f00f9fb8eb2d79b668dc447e84494527 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a881833a44efa4a9246023b3ff40577465c41dbd b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a881833a44efa4a9246023b3ff40577465c41dbd new file mode 100644 index 0000000000..1ae95e004c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a881833a44efa4a9246023b3ff40577465c41dbd differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a8e2046fdcd64d3f32e2bf6eb6ce6563a7d9f30c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a8e2046fdcd64d3f32e2bf6eb6ce6563a7d9f30c new file mode 100644 index 0000000000..0b454b25bd Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a8e2046fdcd64d3f32e2bf6eb6ce6563a7d9f30c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a91a2b74a04872e0beb06e112c48852f3763dd8b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a91a2b74a04872e0beb06e112c48852f3763dd8b new file mode 100644 index 0000000000..d80914a3c6 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/a91a2b74a04872e0beb06e112c48852f3763dd8b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/aa54e6bbc39e5c4f3dfa2b6169e1f72945a3df19 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/aa54e6bbc39e5c4f3dfa2b6169e1f72945a3df19 new file mode 100644 index 0000000000..7021fa646c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/aa54e6bbc39e5c4f3dfa2b6169e1f72945a3df19 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/aa649bea1833d51f127bac5f73ee1b72a418f90f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/aa649bea1833d51f127bac5f73ee1b72a418f90f new file mode 100644 index 0000000000..54c049bfa1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/aa649bea1833d51f127bac5f73ee1b72a418f90f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/abc5dae199ce73565f1cd931aba83680f140dfce b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/abc5dae199ce73565f1cd931aba83680f140dfce new file mode 100644 index 0000000000..50374c8d82 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/abc5dae199ce73565f1cd931aba83680f140dfce differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/adaf1c5190bf4e5310fc3e731e902cdba97b8eee b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/adaf1c5190bf4e5310fc3e731e902cdba97b8eee new file mode 100644 index 0000000000..ad6ac5aee3 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/adaf1c5190bf4e5310fc3e731e902cdba97b8eee differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/af70d159d06b9e1b2f41b400e9ef696050109c9b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/af70d159d06b9e1b2f41b400e9ef696050109c9b new file mode 100644 index 0000000000..57b0ba2bcb Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/af70d159d06b9e1b2f41b400e9ef696050109c9b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b16b1618070384ba27d5386af8fd3fd932856f87 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b16b1618070384ba27d5386af8fd3fd932856f87 new file mode 100644 index 0000000000..e955ba5e23 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b16b1618070384ba27d5386af8fd3fd932856f87 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b1b6fdd8712e3487c7133d0dce9ece03d2517055 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b1b6fdd8712e3487c7133d0dce9ece03d2517055 new file mode 100644 index 0000000000..acef504196 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b1b6fdd8712e3487c7133d0dce9ece03d2517055 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b2a217d6fda6653fcf084ea22ff8c9c24addc802 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b2a217d6fda6653fcf084ea22ff8c9c24addc802 new file mode 100644 index 0000000000..32b4ae5c5b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b2a217d6fda6653fcf084ea22ff8c9c24addc802 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b2d9e2215a9eebe7506fbbcd117fc3331b1aceac b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b2d9e2215a9eebe7506fbbcd117fc3331b1aceac new file mode 100644 index 0000000000..7992b919b5 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b2d9e2215a9eebe7506fbbcd117fc3331b1aceac differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b376b5e90801a0e7945b487b87a3edd5523ef800 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b376b5e90801a0e7945b487b87a3edd5523ef800 new file mode 100644 index 0000000000..92a2a4ddb7 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b376b5e90801a0e7945b487b87a3edd5523ef800 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b55074beffd908158ddbe5c378d9700234d51dd2 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b55074beffd908158ddbe5c378d9700234d51dd2 new file mode 100644 index 0000000000..2bcd30b14f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b55074beffd908158ddbe5c378d9700234d51dd2 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b6dd30d4e2bd758030ac8dc14889091f390123bc b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b6dd30d4e2bd758030ac8dc14889091f390123bc new file mode 100644 index 0000000000..fc14beed69 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b6dd30d4e2bd758030ac8dc14889091f390123bc differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b8593b4fdd28aa138b090d3cd20f7e743dd5bbae b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b8593b4fdd28aa138b090d3cd20f7e743dd5bbae new file mode 100644 index 0000000000..252f01a1ee Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b8593b4fdd28aa138b090d3cd20f7e743dd5bbae differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b868b0a83de9452f1d8438f00bbac61ec9eda97f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b868b0a83de9452f1d8438f00bbac61ec9eda97f new file mode 100644 index 0000000000..aa24373abf Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/b868b0a83de9452f1d8438f00bbac61ec9eda97f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ba36e1c7940769f4eab3c3a09244487bf45d6872 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ba36e1c7940769f4eab3c3a09244487bf45d6872 new file mode 100644 index 0000000000..286aa0c9bb Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ba36e1c7940769f4eab3c3a09244487bf45d6872 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bc30d72fd5df5d466f275445b927b2336fbb18a1 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bc30d72fd5df5d466f275445b927b2336fbb18a1 new file mode 100644 index 0000000000..a62a556e17 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bc30d72fd5df5d466f275445b927b2336fbb18a1 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bc3d21beb9b14f919bdde45f5b1eeab8dbcbe56f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bc3d21beb9b14f919bdde45f5b1eeab8dbcbe56f new file mode 100644 index 0000000000..14aebf36d4 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bc3d21beb9b14f919bdde45f5b1eeab8dbcbe56f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bc5a8b6231e3a71cce95aaa9f69b0f55e467f341 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bc5a8b6231e3a71cce95aaa9f69b0f55e467f341 new file mode 100644 index 0000000000..fd858efcae Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bc5a8b6231e3a71cce95aaa9f69b0f55e467f341 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/be6ea2ec82b7a3f3f0b00878fa235a2291383459 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/be6ea2ec82b7a3f3f0b00878fa235a2291383459 new file mode 100644 index 0000000000..20fefd2c79 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/be6ea2ec82b7a3f3f0b00878fa235a2291383459 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/be9d66797c102b44dc288ef80167096285f09c75 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/be9d66797c102b44dc288ef80167096285f09c75 new file mode 100644 index 0000000000..b6edf8d8c3 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/be9d66797c102b44dc288ef80167096285f09c75 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/beaba6ceb0d7c01e9a69d2cf601b433549de986e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/beaba6ceb0d7c01e9a69d2cf601b433549de986e new file mode 100644 index 0000000000..84a3c01cca Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/beaba6ceb0d7c01e9a69d2cf601b433549de986e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bf112f5c73788531fb1a79ad59dd8fcc247d232c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bf112f5c73788531fb1a79ad59dd8fcc247d232c new file mode 100644 index 0000000000..9f8b00f135 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/bf112f5c73788531fb1a79ad59dd8fcc247d232c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c1ce7a89b88930bd1e023157f9438496d4ac5e4a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c1ce7a89b88930bd1e023157f9438496d4ac5e4a new file mode 100644 index 0000000000..3c4cd0e24a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c1ce7a89b88930bd1e023157f9438496d4ac5e4a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2247b1ee04a3bab47c2040bde29d5ffa1190b07 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2247b1ee04a3bab47c2040bde29d5ffa1190b07 new file mode 100644 index 0000000000..99a6eccd36 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2247b1ee04a3bab47c2040bde29d5ffa1190b07 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2a92360c8a63abe2b90e71f4919837b1b59eb54 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2a92360c8a63abe2b90e71f4919837b1b59eb54 new file mode 100644 index 0000000000..3c3b7a3846 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2a92360c8a63abe2b90e71f4919837b1b59eb54 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2b5fff7918d7df8dc7e3a0d94b72e837f0ce298 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2b5fff7918d7df8dc7e3a0d94b72e837f0ce298 new file mode 100644 index 0000000000..1129d44318 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2b5fff7918d7df8dc7e3a0d94b72e837f0ce298 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2bcb408673de6549b823009ddb152290345bdd3 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2bcb408673de6549b823009ddb152290345bdd3 new file mode 100644 index 0000000000..19987ad91c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c2bcb408673de6549b823009ddb152290345bdd3 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c3a7db978b0077dea1ba3e3f36fec5a77937e0ac b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c3a7db978b0077dea1ba3e3f36fec5a77937e0ac new file mode 100644 index 0000000000..1b6b98a765 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c3a7db978b0077dea1ba3e3f36fec5a77937e0ac differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c46fffb2d097b0fdf14b78b9797a59e6bb61ab52 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c46fffb2d097b0fdf14b78b9797a59e6bb61ab52 new file mode 100644 index 0000000000..c9ae45d536 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c46fffb2d097b0fdf14b78b9797a59e6bb61ab52 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4a80026d30904eb01a7f3143add1430704f7ed8 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4a80026d30904eb01a7f3143add1430704f7ed8 new file mode 100644 index 0000000000..e955eb4e98 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4a80026d30904eb01a7f3143add1430704f7ed8 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4c4f42b796951cf851dcb8fabbefc1571afb015 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4c4f42b796951cf851dcb8fabbefc1571afb015 new file mode 100644 index 0000000000..0528bf86da Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4c4f42b796951cf851dcb8fabbefc1571afb015 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4cacde7370894edbeaf0bd63684cef4a76e15a8 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4cacde7370894edbeaf0bd63684cef4a76e15a8 new file mode 100644 index 0000000000..b0facc95c9 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4cacde7370894edbeaf0bd63684cef4a76e15a8 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4e1782fc77b9d29a028e60b307a00c74b4edad7 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4e1782fc77b9d29a028e60b307a00c74b4edad7 new file mode 100644 index 0000000000..49912ef7ee Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c4e1782fc77b9d29a028e60b307a00c74b4edad7 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c5cc6bca8b817bcb0e21494a7c1c099ed89911e1 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c5cc6bca8b817bcb0e21494a7c1c099ed89911e1 new file mode 100644 index 0000000000..65cea817a8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c5cc6bca8b817bcb0e21494a7c1c099ed89911e1 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c5dac0a8e989b40b3539d60861b6360f565c0d92 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c5dac0a8e989b40b3539d60861b6360f565c0d92 new file mode 100644 index 0000000000..26cda532a9 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c5dac0a8e989b40b3539d60861b6360f565c0d92 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c5eb01d07ca7f2d0e64eb533153ec0fc8b8b57e6 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c5eb01d07ca7f2d0e64eb533153ec0fc8b8b57e6 new file mode 100644 index 0000000000..f16df44f70 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c5eb01d07ca7f2d0e64eb533153ec0fc8b8b57e6 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c64a1377c5a5b3c250b6481cab7ba8b723d83c48 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c64a1377c5a5b3c250b6481cab7ba8b723d83c48 new file mode 100644 index 0000000000..718300f1a9 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c64a1377c5a5b3c250b6481cab7ba8b723d83c48 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c6ae931b17cc16c41bf53d5cced815e54cc9886b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c6ae931b17cc16c41bf53d5cced815e54cc9886b new file mode 100644 index 0000000000..76f1965976 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c6ae931b17cc16c41bf53d5cced815e54cc9886b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c7737ce75822fb23d0fade6e5b31ce705fa3e21d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c7737ce75822fb23d0fade6e5b31ce705fa3e21d new file mode 100644 index 0000000000..56ed68ac72 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c7737ce75822fb23d0fade6e5b31ce705fa3e21d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c7e8f7bd234ab3c66479ee22a775ada1d29545a1 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c7e8f7bd234ab3c66479ee22a775ada1d29545a1 new file mode 100644 index 0000000000..bac3e6a050 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c7e8f7bd234ab3c66479ee22a775ada1d29545a1 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c8b0cd6986ced8ff6121e9b7d4fa4f43ae230c4f b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c8b0cd6986ced8ff6121e9b7d4fa4f43ae230c4f new file mode 100644 index 0000000000..e4b1a2efe8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c8b0cd6986ced8ff6121e9b7d4fa4f43ae230c4f differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c93a597455a13cf29c8cdc7b778a202c2345f50a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c93a597455a13cf29c8cdc7b778a202c2345f50a new file mode 100644 index 0000000000..eda89e62e8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c93a597455a13cf29c8cdc7b778a202c2345f50a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c9716817212b96c5cac020decb088c4df232774a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c9716817212b96c5cac020decb088c4df232774a new file mode 100644 index 0000000000..bfa08b6f5f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/c9716817212b96c5cac020decb088c4df232774a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ca3404eb331276786aab791945c33eb2a4528d91 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ca3404eb331276786aab791945c33eb2a4528d91 new file mode 100644 index 0000000000..f8e63e793b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ca3404eb331276786aab791945c33eb2a4528d91 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/caa8dc1d8f107c8774df670ddc91a86e90029bb9 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/caa8dc1d8f107c8774df670ddc91a86e90029bb9 new file mode 100644 index 0000000000..8564a79db1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/caa8dc1d8f107c8774df670ddc91a86e90029bb9 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cab28c87bc4a65693e9b26737b2126dbeb999811 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cab28c87bc4a65693e9b26737b2126dbeb999811 new file mode 100644 index 0000000000..9b09118dbf Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cab28c87bc4a65693e9b26737b2126dbeb999811 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cc899171e0b228e360bd9366c709f1eeeb685f1e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cc899171e0b228e360bd9366c709f1eeeb685f1e new file mode 100644 index 0000000000..0e94240842 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cc899171e0b228e360bd9366c709f1eeeb685f1e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cd987bbf330ae15a5891db3c52fabd41e0ff0429 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cd987bbf330ae15a5891db3c52fabd41e0ff0429 new file mode 100644 index 0000000000..7377536b9e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cd987bbf330ae15a5891db3c52fabd41e0ff0429 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cf6704d68ab044a8abd0ae734bbb9d12ae6b5995 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cf6704d68ab044a8abd0ae734bbb9d12ae6b5995 new file mode 100644 index 0000000000..4bf318a262 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/cf6704d68ab044a8abd0ae734bbb9d12ae6b5995 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d0a881dd69b4503b399a0b6497d6571cfd9a50dc b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d0a881dd69b4503b399a0b6497d6571cfd9a50dc new file mode 100644 index 0000000000..e474d36fa2 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d0a881dd69b4503b399a0b6497d6571cfd9a50dc differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d2cfc72b7b10156d31a430b0ebb3926e28d90c38 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d2cfc72b7b10156d31a430b0ebb3926e28d90c38 new file mode 100644 index 0000000000..c0ede81338 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d2cfc72b7b10156d31a430b0ebb3926e28d90c38 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d334482b23715a79e45ddc6810446bc8fb6dbfaa b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d334482b23715a79e45ddc6810446bc8fb6dbfaa new file mode 100644 index 0000000000..f1a30c6558 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d334482b23715a79e45ddc6810446bc8fb6dbfaa differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d42ecdc9050ea76b9bffb49c31330a07c96ce8bb b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d42ecdc9050ea76b9bffb49c31330a07c96ce8bb new file mode 100644 index 0000000000..f6aec57c33 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d42ecdc9050ea76b9bffb49c31330a07c96ce8bb differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d52c170d40a5b2f5eb6866d1da7f998f6dd64778 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d52c170d40a5b2f5eb6866d1da7f998f6dd64778 new file mode 100644 index 0000000000..574324fdf2 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d52c170d40a5b2f5eb6866d1da7f998f6dd64778 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d5a563f4872951d50ac72258636547d0c8e90bb5 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d5a563f4872951d50ac72258636547d0c8e90bb5 new file mode 100644 index 0000000000..972594815a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d5a563f4872951d50ac72258636547d0c8e90bb5 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d5bf2053bcdff45bb2d054bd5117506dc9d6fb19 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d5bf2053bcdff45bb2d054bd5117506dc9d6fb19 new file mode 100644 index 0000000000..2ae0006e71 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d5bf2053bcdff45bb2d054bd5117506dc9d6fb19 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d5d0ac153fdc1d2fc7dc37ebfca84d9a24fa4d9c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d5d0ac153fdc1d2fc7dc37ebfca84d9a24fa4d9c new file mode 100644 index 0000000000..e8601a7c4a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d5d0ac153fdc1d2fc7dc37ebfca84d9a24fa4d9c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d6379e61cd0a3128777fe34548bbff8687a011eb b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d6379e61cd0a3128777fe34548bbff8687a011eb new file mode 100644 index 0000000000..0008a5e909 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d6379e61cd0a3128777fe34548bbff8687a011eb differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d6e4ae14d0183e85c6762628e079afa1cae2b4d8 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d6e4ae14d0183e85c6762628e079afa1cae2b4d8 new file mode 100644 index 0000000000..38bcfe3b12 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d6e4ae14d0183e85c6762628e079afa1cae2b4d8 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d702188c6b078f3445e59107adb01a5a2d7cac09 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d702188c6b078f3445e59107adb01a5a2d7cac09 new file mode 100644 index 0000000000..53bf8195f5 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d702188c6b078f3445e59107adb01a5a2d7cac09 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d85d48ce3ab667a79487dfbe5a62adceeffaed60 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d85d48ce3ab667a79487dfbe5a62adceeffaed60 new file mode 100644 index 0000000000..010373f7b0 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d85d48ce3ab667a79487dfbe5a62adceeffaed60 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d9cddfddba8e264930947dfb3650686c32bb7ce0 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d9cddfddba8e264930947dfb3650686c32bb7ce0 new file mode 100644 index 0000000000..f54a808aed Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d9cddfddba8e264930947dfb3650686c32bb7ce0 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d9ce4fd068f94af4ef59b0db85a87f120b22f581 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d9ce4fd068f94af4ef59b0db85a87f120b22f581 new file mode 100644 index 0000000000..f8703da770 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d9ce4fd068f94af4ef59b0db85a87f120b22f581 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d9e2e77dca44444590d21586296e94391e378cd5 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d9e2e77dca44444590d21586296e94391e378cd5 new file mode 100644 index 0000000000..1ac8f01047 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/d9e2e77dca44444590d21586296e94391e378cd5 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dafd65f8a4a8ed1aa71c18e91c0f82348904771c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dafd65f8a4a8ed1aa71c18e91c0f82348904771c new file mode 100644 index 0000000000..e0e3ff3696 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dafd65f8a4a8ed1aa71c18e91c0f82348904771c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/db16f3ea7bb0d7c4bb53a46ef14973f818b5a701 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/db16f3ea7bb0d7c4bb53a46ef14973f818b5a701 new file mode 100644 index 0000000000..17eb0f3c9c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/db16f3ea7bb0d7c4bb53a46ef14973f818b5a701 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/db3778bc6ebe87cb346338aab080f268cee4909e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/db3778bc6ebe87cb346338aab080f268cee4909e new file mode 100644 index 0000000000..4ce59580a2 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/db3778bc6ebe87cb346338aab080f268cee4909e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dd350e89b4b095f13b6298c6c5623f9fd9258921 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dd350e89b4b095f13b6298c6c5623f9fd9258921 new file mode 100644 index 0000000000..8d02329ea4 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dd350e89b4b095f13b6298c6c5623f9fd9258921 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dd76575f337eb085c10f6caf1612a640f3d625d7 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dd76575f337eb085c10f6caf1612a640f3d625d7 new file mode 100644 index 0000000000..9aa85086d1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dd76575f337eb085c10f6caf1612a640f3d625d7 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/de2c8143b5e069d14771e24eba51765389d038f8 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/de2c8143b5e069d14771e24eba51765389d038f8 new file mode 100644 index 0000000000..046a6d2d5b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/de2c8143b5e069d14771e24eba51765389d038f8 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ded74397b060b7f04c17575b159c5b466c597b67 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ded74397b060b7f04c17575b159c5b466c597b67 new file mode 100644 index 0000000000..d18565ca4c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ded74397b060b7f04c17575b159c5b466c597b67 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dedcc8b47b46ed027a778ee2795dd2930fa5e32d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dedcc8b47b46ed027a778ee2795dd2930fa5e32d new file mode 100644 index 0000000000..3af9e3e6bf Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/dedcc8b47b46ed027a778ee2795dd2930fa5e32d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/df4a3427eb4b53bff8e1798614e17f74af8083da b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/df4a3427eb4b53bff8e1798614e17f74af8083da new file mode 100644 index 0000000000..07aed37dc6 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/df4a3427eb4b53bff8e1798614e17f74af8083da differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e1cfbdd034417312fa1c94dc4adb0b518842ac47 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e1cfbdd034417312fa1c94dc4adb0b518842ac47 new file mode 100644 index 0000000000..5b2278515d Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e1cfbdd034417312fa1c94dc4adb0b518842ac47 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e2a4a50c7b9a4de48224e93dd8d9b6a58e5687f9 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e2a4a50c7b9a4de48224e93dd8d9b6a58e5687f9 new file mode 100644 index 0000000000..a6e2ee8e4f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e2a4a50c7b9a4de48224e93dd8d9b6a58e5687f9 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e407fed888b9f5d53a2f46851867c3a25dc07641 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e407fed888b9f5d53a2f46851867c3a25dc07641 new file mode 100644 index 0000000000..6dab7d31fa Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e407fed888b9f5d53a2f46851867c3a25dc07641 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e605204f41df95efe64632b2f4fbee3e95c99973 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e605204f41df95efe64632b2f4fbee3e95c99973 new file mode 100644 index 0000000000..e19b11f170 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e605204f41df95efe64632b2f4fbee3e95c99973 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e60e9ae6b41a8047ebaa5d255c08a5e6c25bfffd b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e60e9ae6b41a8047ebaa5d255c08a5e6c25bfffd new file mode 100644 index 0000000000..07e914679b Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e60e9ae6b41a8047ebaa5d255c08a5e6c25bfffd differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e64d4a5ce1a596436402a506c00bcf690ea28013 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e64d4a5ce1a596436402a506c00bcf690ea28013 new file mode 100644 index 0000000000..fe568991c0 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e64d4a5ce1a596436402a506c00bcf690ea28013 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e65f43d6b9d345010417b538c5ff058ad1806a49 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e65f43d6b9d345010417b538c5ff058ad1806a49 new file mode 100644 index 0000000000..50c0dc47e4 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e65f43d6b9d345010417b538c5ff058ad1806a49 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e68e4729b8b8b2b3ad4aa927a8a415b60c06b6de b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e68e4729b8b8b2b3ad4aa927a8a415b60c06b6de new file mode 100644 index 0000000000..71cd76d9b8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e68e4729b8b8b2b3ad4aa927a8a415b60c06b6de differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e6c108d6cb43a48320dbd0e05d8322fff5b07455 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e6c108d6cb43a48320dbd0e05d8322fff5b07455 new file mode 100644 index 0000000000..3f077303c1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e6c108d6cb43a48320dbd0e05d8322fff5b07455 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e76dad9645f3d917391ff7b14601b6d30a17297a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e76dad9645f3d917391ff7b14601b6d30a17297a new file mode 100644 index 0000000000..b0269bf59e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e76dad9645f3d917391ff7b14601b6d30a17297a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e7b4b4ea07a3b520abaed667728f3c3f1094a0ef b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e7b4b4ea07a3b520abaed667728f3c3f1094a0ef new file mode 100644 index 0000000000..192e586056 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e7b4b4ea07a3b520abaed667728f3c3f1094a0ef differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e7f35ae5eb7c72ab79c186168842fefd7d9d7e64 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e7f35ae5eb7c72ab79c186168842fefd7d9d7e64 new file mode 100644 index 0000000000..b61984ae11 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e7f35ae5eb7c72ab79c186168842fefd7d9d7e64 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e82ed0823e2cdf303c34d10cc50b1b11bc444cc6 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e82ed0823e2cdf303c34d10cc50b1b11bc444cc6 new file mode 100644 index 0000000000..893a7d69ae Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e82ed0823e2cdf303c34d10cc50b1b11bc444cc6 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e86da808db60cf3ce559e6ed83ae7db80a673a9c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e86da808db60cf3ce559e6ed83ae7db80a673a9c new file mode 100644 index 0000000000..1f43859ab5 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e86da808db60cf3ce559e6ed83ae7db80a673a9c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e8b567a61833503404894267b548de5269f942ee b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e8b567a61833503404894267b548de5269f942ee new file mode 100644 index 0000000000..819b7d0ea8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e8b567a61833503404894267b548de5269f942ee differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e8f05a3abcce582878673d312e06a8ac9540716a b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e8f05a3abcce582878673d312e06a8ac9540716a new file mode 100644 index 0000000000..aca37f6475 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/e8f05a3abcce582878673d312e06a8ac9540716a differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ebf3937dd4befb058f1bd1fe903077c54f65648e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ebf3937dd4befb058f1bd1fe903077c54f65648e new file mode 100644 index 0000000000..99825d906a Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ebf3937dd4befb058f1bd1fe903077c54f65648e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ec47a04aee82946c9e45faff35c45c1e25248ba6 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ec47a04aee82946c9e45faff35c45c1e25248ba6 new file mode 100644 index 0000000000..55ae01a5ab Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ec47a04aee82946c9e45faff35c45c1e25248ba6 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed2d6ae47ab3a4a6450e567cff2dc28d91e1871e b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed2d6ae47ab3a4a6450e567cff2dc28d91e1871e new file mode 100644 index 0000000000..a9b3e9cf77 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed2d6ae47ab3a4a6450e567cff2dc28d91e1871e differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed4f2496bfd6d6cdbbccfee376025977bbf7a3ed b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed4f2496bfd6d6cdbbccfee376025977bbf7a3ed new file mode 100644 index 0000000000..ee56aafe09 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed4f2496bfd6d6cdbbccfee376025977bbf7a3ed differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed716eb75f71cf50292873575ff3fb2e404d2e49 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed716eb75f71cf50292873575ff3fb2e404d2e49 new file mode 100644 index 0000000000..f1bf3f694c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed716eb75f71cf50292873575ff3fb2e404d2e49 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed8821170058c2a4f29a304352fa10e4c8c2bdbc b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed8821170058c2a4f29a304352fa10e4c8c2bdbc new file mode 100644 index 0000000000..04286aa011 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ed8821170058c2a4f29a304352fa10e4c8c2bdbc differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/edf3ce2cd69640d840b305314ae32aa5b7ca9428 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/edf3ce2cd69640d840b305314ae32aa5b7ca9428 new file mode 100644 index 0000000000..ea9ae080f0 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/edf3ce2cd69640d840b305314ae32aa5b7ca9428 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/edfeafe0cb45a2f58d13a1e600f924a2cd4ae26d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/edfeafe0cb45a2f58d13a1e600f924a2cd4ae26d new file mode 100644 index 0000000000..6d8de33304 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/edfeafe0cb45a2f58d13a1e600f924a2cd4ae26d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ee137e61a7dad85e75c7d168d17a4da771f4b394 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ee137e61a7dad85e75c7d168d17a4da771f4b394 new file mode 100644 index 0000000000..9350607db1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ee137e61a7dad85e75c7d168d17a4da771f4b394 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ee66eea8c67d433da1d358e3dcc9b0d0fa9cf424 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ee66eea8c67d433da1d358e3dcc9b0d0fa9cf424 new file mode 100644 index 0000000000..52325c8aab Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ee66eea8c67d433da1d358e3dcc9b0d0fa9cf424 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ee7562ad7231e891abcbdf60535542ad4121fd76 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ee7562ad7231e891abcbdf60535542ad4121fd76 new file mode 100644 index 0000000000..77c30eb01c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ee7562ad7231e891abcbdf60535542ad4121fd76 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/eee6dd6f3836c5efe98ffca84b072903aee559b2 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/eee6dd6f3836c5efe98ffca84b072903aee559b2 new file mode 100644 index 0000000000..9163192ab8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/eee6dd6f3836c5efe98ffca84b072903aee559b2 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ef1e42126bcc458218c7c437c0a8328a9f56a8dc b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ef1e42126bcc458218c7c437c0a8328a9f56a8dc new file mode 100644 index 0000000000..4023e530a6 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ef1e42126bcc458218c7c437c0a8328a9f56a8dc differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/efadc991fc286255d185adf041f725450e3b33b7 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/efadc991fc286255d185adf041f725450e3b33b7 new file mode 100644 index 0000000000..c4e2b5d57f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/efadc991fc286255d185adf041f725450e3b33b7 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/efc94e652a0f1d0a1d878c520ea48dcf57575b1d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/efc94e652a0f1d0a1d878c520ea48dcf57575b1d new file mode 100644 index 0000000000..d67169f840 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/efc94e652a0f1d0a1d878c520ea48dcf57575b1d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f0078cce5c750e2cb3348af458e064ec72451f0c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f0078cce5c750e2cb3348af458e064ec72451f0c new file mode 100644 index 0000000000..5d0d74c51f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f0078cce5c750e2cb3348af458e064ec72451f0c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f051e58b6eeaa37eb3c33bc5baa724b153fafb53 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f051e58b6eeaa37eb3c33bc5baa724b153fafb53 new file mode 100644 index 0000000000..cc4107b9dd Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f051e58b6eeaa37eb3c33bc5baa724b153fafb53 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f1bc61e4e41aa4ef4cd5161f488982feaa86acae b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f1bc61e4e41aa4ef4cd5161f488982feaa86acae new file mode 100644 index 0000000000..11cd1efcf5 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f1bc61e4e41aa4ef4cd5161f488982feaa86acae differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f38776ce3c9a0d251eab2af7a3674dc4c611fabb b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f38776ce3c9a0d251eab2af7a3674dc4c611fabb new file mode 100644 index 0000000000..c1c085d115 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f38776ce3c9a0d251eab2af7a3674dc4c611fabb differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f3a63e4823e94ee5c9a1321b573a0ba310b44881 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f3a63e4823e94ee5c9a1321b573a0ba310b44881 new file mode 100644 index 0000000000..49e5172c4c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f3a63e4823e94ee5c9a1321b573a0ba310b44881 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f4865af8abc968d57a5a2613d0de1a8aa73ad028 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f4865af8abc968d57a5a2613d0de1a8aa73ad028 new file mode 100644 index 0000000000..f05c8d72b0 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f4865af8abc968d57a5a2613d0de1a8aa73ad028 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f49b60e1fe90a9d0894f392643f4c0f56849f130 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f49b60e1fe90a9d0894f392643f4c0f56849f130 new file mode 100644 index 0000000000..c7d3c96a13 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f49b60e1fe90a9d0894f392643f4c0f56849f130 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f4dc35b5a7a5baa423767126fdbdb8406abdd045 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f4dc35b5a7a5baa423767126fdbdb8406abdd045 new file mode 100644 index 0000000000..730e843c8d Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f4dc35b5a7a5baa423767126fdbdb8406abdd045 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f57474482fd6ef3c73c7aa332a9808c29f8943d6 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f57474482fd6ef3c73c7aa332a9808c29f8943d6 new file mode 100644 index 0000000000..a25e8ad26e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f57474482fd6ef3c73c7aa332a9808c29f8943d6 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f59846f6eda0ccba9279e7050ce9cf41509dd794 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f59846f6eda0ccba9279e7050ce9cf41509dd794 new file mode 100644 index 0000000000..e5f29c2add Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f59846f6eda0ccba9279e7050ce9cf41509dd794 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f5af497556c7aa6e52eec22d9e9a1136b99640e8 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f5af497556c7aa6e52eec22d9e9a1136b99640e8 new file mode 100644 index 0000000000..d1fbcaa575 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f5af497556c7aa6e52eec22d9e9a1136b99640e8 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f5b0db5a7e820490c9c320e614cd6135e6da5361 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f5b0db5a7e820490c9c320e614cd6135e6da5361 new file mode 100644 index 0000000000..1942f7c0ee Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f5b0db5a7e820490c9c320e614cd6135e6da5361 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f6139c3a78052f8f46562b29fa9a5f4eb4abe235 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f6139c3a78052f8f46562b29fa9a5f4eb4abe235 new file mode 100644 index 0000000000..5638765ba1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f6139c3a78052f8f46562b29fa9a5f4eb4abe235 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f61fdf132b2cd774d42524b5ca87b075a715d46c b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f61fdf132b2cd774d42524b5ca87b075a715d46c new file mode 100644 index 0000000000..8af057d9ce Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f61fdf132b2cd774d42524b5ca87b075a715d46c differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f7abb2987dfbfbbe041b0e1a1c149920cca6197d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f7abb2987dfbfbbe041b0e1a1c149920cca6197d new file mode 100644 index 0000000000..e4d1b10cfa Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f7abb2987dfbfbbe041b0e1a1c149920cca6197d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f7e028315e11b3671d6c755b9e51ee8b5dfb18b0 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f7e028315e11b3671d6c755b9e51ee8b5dfb18b0 new file mode 100644 index 0000000000..02c77027ef Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f7e028315e11b3671d6c755b9e51ee8b5dfb18b0 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f830ba87a91d6028711947c1ad0bb01b92fd02f5 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f830ba87a91d6028711947c1ad0bb01b92fd02f5 new file mode 100644 index 0000000000..9c81bb8c70 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f830ba87a91d6028711947c1ad0bb01b92fd02f5 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f8d8242cfc6ebc10551cbba6a32ede3e5f5f7e30 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f8d8242cfc6ebc10551cbba6a32ede3e5f5f7e30 new file mode 100644 index 0000000000..a3ae7a033e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f8d8242cfc6ebc10551cbba6a32ede3e5f5f7e30 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f992953783429ff7fddbb9d53720fb7a070f5646 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f992953783429ff7fddbb9d53720fb7a070f5646 new file mode 100644 index 0000000000..38078fe30c Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/f992953783429ff7fddbb9d53720fb7a070f5646 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fa5c2a01d179f72a0235ecec763bb23d9d1ce494 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fa5c2a01d179f72a0235ecec763bb23d9d1ce494 new file mode 100644 index 0000000000..69cf687777 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fa5c2a01d179f72a0235ecec763bb23d9d1ce494 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fa71568d18df89f28f1acc5bb9903c1c4f4fe8e5 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fa71568d18df89f28f1acc5bb9903c1c4f4fe8e5 new file mode 100644 index 0000000000..d04d568d0f Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fa71568d18df89f28f1acc5bb9903c1c4f4fe8e5 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/faf1a931cab9cc675ad3d11651a0e9cf5fe9b256 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/faf1a931cab9cc675ad3d11651a0e9cf5fe9b256 new file mode 100644 index 0000000000..8edd3267f9 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/faf1a931cab9cc675ad3d11651a0e9cf5fe9b256 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fb991429d367271e4b2ab168592cbbc84d02974b b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fb991429d367271e4b2ab168592cbbc84d02974b new file mode 100644 index 0000000000..70052a6c6e Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fb991429d367271e4b2ab168592cbbc84d02974b differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fbd99734d33efb9d846eb18b8946e15472c5925d b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fbd99734d33efb9d846eb18b8946e15472c5925d new file mode 100644 index 0000000000..b7b7b558f7 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fbd99734d33efb9d846eb18b8946e15472c5925d differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fce8fc2ccf6ad1e5cfef016cb60e9989e2b59b29 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fce8fc2ccf6ad1e5cfef016cb60e9989e2b59b29 new file mode 100644 index 0000000000..830d178c57 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fce8fc2ccf6ad1e5cfef016cb60e9989e2b59b29 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fd6272fca4cf554a4e3cb1fc431fc6a2a7ae5ea7 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fd6272fca4cf554a4e3cb1fc431fc6a2a7ae5ea7 new file mode 100644 index 0000000000..056cb914e1 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/fd6272fca4cf554a4e3cb1fc431fc6a2a7ae5ea7 differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ff71f95e001705ac427e2037e63e7309c4d511eb b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ff71f95e001705ac427e2037e63e7309c4d511eb new file mode 100644 index 0000000000..34a70d2cc8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ff71f95e001705ac427e2037e63e7309c4d511eb differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ffa5e4bc64518aac9cb8f9ec1da783cd2c848def b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ffa5e4bc64518aac9cb8f9ec1da783cd2c848def new file mode 100644 index 0000000000..d390797107 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.in/ffa5e4bc64518aac9cb8f9ec1da783cd2c848def differ diff --git a/fuzz/gnutls_ocsp_resp_parser_fuzzer.repro/0b1ff2feb11e82901e7ba196270fa134e5169364 b/fuzz/gnutls_ocsp_resp_parser_fuzzer.repro/0b1ff2feb11e82901e7ba196270fa134e5169364 new file mode 100644 index 0000000000..f454bf40c8 Binary files /dev/null and b/fuzz/gnutls_ocsp_resp_parser_fuzzer.repro/0b1ff2feb11e82901e7ba196270fa134e5169364 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.c b/fuzz/gnutls_pkcs12_key_parser_fuzzer.c new file mode 100644 index 0000000000..9aaf92ff48 --- /dev/null +++ b/fuzz/gnutls_pkcs12_key_parser_fuzzer.c @@ -0,0 +1,72 @@ +/* +# Copyright 2016 Nikos Mavrogiannopoulos +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include + +#include +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw = {(unsigned char*)data, (unsigned int)size}; + gnutls_pkcs12_t p12; + gnutls_x509_privkey_t key; + gnutls_x509_crt_t *chain; + gnutls_x509_crt_t *extras; + gnutls_x509_crl_t crl; + unsigned int chain_len = 0, extras_len = 0; + int ret; + + raw.data = (unsigned char *)data; + raw.size = size; + + ret = gnutls_pkcs12_init(&p12); + assert(ret >= 0); + + ret = gnutls_pkcs12_import(p12, &raw, GNUTLS_X509_FMT_DER, 0); + if (ret < 0) { + goto cleanup; + } + + /* catch crashes */ + gnutls_pkcs12_verify_mac(p12, "1234"); + + ret = gnutls_pkcs12_simple_parse(p12, "1234", &key, &chain, &chain_len, &extras, &extras_len, &crl, 0); + if (ret >= 0) { + gnutls_x509_privkey_deinit(key); + if (crl) + gnutls_x509_crl_deinit(crl); + if (extras_len > 0) { + for (unsigned i = 0; i < extras_len; i++) + gnutls_x509_crt_deinit(extras[i]); + gnutls_free(extras); + } + if (chain_len > 0) { + for (unsigned i = 0; i < chain_len; i++) + gnutls_x509_crt_deinit(chain[i]); + gnutls_free(chain); + } + } + +cleanup: + gnutls_pkcs12_deinit(p12); + return 0; +} diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0069b6594ce245dbaf056b5c4bea173506f2467e b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0069b6594ce245dbaf056b5c4bea173506f2467e new file mode 100644 index 0000000000..8527064a0f Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0069b6594ce245dbaf056b5c4bea173506f2467e differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0100a49f58035dec9a5d6b3a57ff70555c62a946 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0100a49f58035dec9a5d6b3a57ff70555c62a946 new file mode 100644 index 0000000000..6cc9f4af02 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0100a49f58035dec9a5d6b3a57ff70555c62a946 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/01267c36b07108a375136abeef5937c8eb05b9af b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/01267c36b07108a375136abeef5937c8eb05b9af new file mode 100644 index 0000000000..5d23e90e46 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/01267c36b07108a375136abeef5937c8eb05b9af differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/04883d606887ca28227c0bb2e461d5dcd0fdff6d b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/04883d606887ca28227c0bb2e461d5dcd0fdff6d new file mode 100644 index 0000000000..3c534b7214 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/04883d606887ca28227c0bb2e461d5dcd0fdff6d differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0506408f2301d6096167c79dee376c12ae3159a2 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0506408f2301d6096167c79dee376c12ae3159a2 new file mode 100644 index 0000000000..4e8f25664b Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0506408f2301d6096167c79dee376c12ae3159a2 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/065f5c4bbeee417dbfc86f6901c2e2d8d5c22fb2 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/065f5c4bbeee417dbfc86f6901c2e2d8d5c22fb2 new file mode 100644 index 0000000000..600f5a5306 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/065f5c4bbeee417dbfc86f6901c2e2d8d5c22fb2 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/083f28db1f86aca12db00b68da89819f7efb0b47 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/083f28db1f86aca12db00b68da89819f7efb0b47 new file mode 100644 index 0000000000..d1950e8477 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/083f28db1f86aca12db00b68da89819f7efb0b47 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0b41786ebd93eb912ebff1da77ce7b790e110a48 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0b41786ebd93eb912ebff1da77ce7b790e110a48 new file mode 100644 index 0000000000..bc8f09d3d7 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0b41786ebd93eb912ebff1da77ce7b790e110a48 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0bf322771d0e1b7598ae6aa144cd82bd2c7182fd b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0bf322771d0e1b7598ae6aa144cd82bd2c7182fd new file mode 100644 index 0000000000..7d3fa2c3da Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/0bf322771d0e1b7598ae6aa144cd82bd2c7182fd differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1095f275b170caf6265411768056d60d0b642189 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1095f275b170caf6265411768056d60d0b642189 new file mode 100644 index 0000000000..7df3794ae2 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1095f275b170caf6265411768056d60d0b642189 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/10f5f0caca8def469ac51c90edf15d9fd4ed4b05 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/10f5f0caca8def469ac51c90edf15d9fd4ed4b05 new file mode 100644 index 0000000000..ddb20bfedb Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/10f5f0caca8def469ac51c90edf15d9fd4ed4b05 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/13adc681003d741371a986e23cbbcfec636c0bd6 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/13adc681003d741371a986e23cbbcfec636c0bd6 new file mode 100644 index 0000000000..f6dd429b5b Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/13adc681003d741371a986e23cbbcfec636c0bd6 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/14067d44ba12fb75c2dd2bade685695b2f956bbc b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/14067d44ba12fb75c2dd2bade685695b2f956bbc new file mode 100644 index 0000000000..22bcfd71fb Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/14067d44ba12fb75c2dd2bade685695b2f956bbc differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/14cf1ed53465476fb77756269da29459450212a6 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/14cf1ed53465476fb77756269da29459450212a6 new file mode 100644 index 0000000000..b1aba09374 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/14cf1ed53465476fb77756269da29459450212a6 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/17282341dc8a9fec12bf0f6303cd8de352d08015 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/17282341dc8a9fec12bf0f6303cd8de352d08015 new file mode 100644 index 0000000000..75fda669ef Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/17282341dc8a9fec12bf0f6303cd8de352d08015 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/18fcd28358c102a389ae6ec4cec8a3d69ef21158 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/18fcd28358c102a389ae6ec4cec8a3d69ef21158 new file mode 100644 index 0000000000..0fa27209ab Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/18fcd28358c102a389ae6ec4cec8a3d69ef21158 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1b7aa3df2ff93a851c77d0585bef787eadbfafd1 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1b7aa3df2ff93a851c77d0585bef787eadbfafd1 new file mode 100644 index 0000000000..20a2cc3d4c Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1b7aa3df2ff93a851c77d0585bef787eadbfafd1 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1f2bd141b102ab7dc90e3e69e861cf6662840b98 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1f2bd141b102ab7dc90e3e69e861cf6662840b98 new file mode 100644 index 0000000000..f0bc7a1509 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1f2bd141b102ab7dc90e3e69e861cf6662840b98 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1fccacb7687c44b5a2a8436fea367e7d778926ff b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1fccacb7687c44b5a2a8436fea367e7d778926ff new file mode 100644 index 0000000000..7a9fa1883d Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/1fccacb7687c44b5a2a8436fea367e7d778926ff differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/217acc299298ca90b606abb637ad8748f5f22c97 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/217acc299298ca90b606abb637ad8748f5f22c97 new file mode 100644 index 0000000000..a41930c256 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/217acc299298ca90b606abb637ad8748f5f22c97 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/217e296f45ada85e7e5e4e53a95d2bddd7bbcae2 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/217e296f45ada85e7e5e4e53a95d2bddd7bbcae2 new file mode 100644 index 0000000000..6b5994521f Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/217e296f45ada85e7e5e4e53a95d2bddd7bbcae2 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2418c0ac4315308758e08758a22ba7f099bcd8f3 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2418c0ac4315308758e08758a22ba7f099bcd8f3 new file mode 100644 index 0000000000..a5bf3211e0 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2418c0ac4315308758e08758a22ba7f099bcd8f3 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/24930c834798213e5e62e26b258a7e7964df87a3 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/24930c834798213e5e62e26b258a7e7964df87a3 new file mode 100644 index 0000000000..7616f0b34f Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/24930c834798213e5e62e26b258a7e7964df87a3 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/24e3cb41e5907080cdc8a26dcf6a2139ce2cd8e8 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/24e3cb41e5907080cdc8a26dcf6a2139ce2cd8e8 new file mode 100644 index 0000000000..bcf9079c03 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/24e3cb41e5907080cdc8a26dcf6a2139ce2cd8e8 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/275a737164982dc5401bec3133b4c66ac54b0962 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/275a737164982dc5401bec3133b4c66ac54b0962 new file mode 100644 index 0000000000..90d28e4c44 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/275a737164982dc5401bec3133b4c66ac54b0962 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/27da2cbd391b523bcd8fdf2a73699eb17c626d40 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/27da2cbd391b523bcd8fdf2a73699eb17c626d40 new file mode 100644 index 0000000000..cb20315e60 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/27da2cbd391b523bcd8fdf2a73699eb17c626d40 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/29f1bcaa8dde9c38aac193db8ce277a36f46565d b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/29f1bcaa8dde9c38aac193db8ce277a36f46565d new file mode 100644 index 0000000000..b241a8b8cb Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/29f1bcaa8dde9c38aac193db8ce277a36f46565d differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2a97d339b283f490f61f81f00f6c98e2a2f9c8b7 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2a97d339b283f490f61f81f00f6c98e2a2f9c8b7 new file mode 100644 index 0000000000..e196a22a70 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2a97d339b283f490f61f81f00f6c98e2a2f9c8b7 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2ad1a64e370f180ac6320a90ed1f228fbfde99a4 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2ad1a64e370f180ac6320a90ed1f228fbfde99a4 new file mode 100644 index 0000000000..95eadb92ca Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2ad1a64e370f180ac6320a90ed1f228fbfde99a4 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2af8ea4fc8fe1dec95d781e04c4dd00c0d7b1aad b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2af8ea4fc8fe1dec95d781e04c4dd00c0d7b1aad new file mode 100644 index 0000000000..0837923267 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2af8ea4fc8fe1dec95d781e04c4dd00c0d7b1aad differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2c550319bbef6c2c703045ce0be2e9c7a405baf9 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2c550319bbef6c2c703045ce0be2e9c7a405baf9 new file mode 100644 index 0000000000..3cd8fe05b2 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2c550319bbef6c2c703045ce0be2e9c7a405baf9 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2cde2362517d27cdc257db83322cf1765d1f06d8 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2cde2362517d27cdc257db83322cf1765d1f06d8 new file mode 100644 index 0000000000..d2c4f840f9 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2cde2362517d27cdc257db83322cf1765d1f06d8 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2e825aeb23ee50ca14fa64bd8802b16af1f8cebc b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2e825aeb23ee50ca14fa64bd8802b16af1f8cebc new file mode 100644 index 0000000000..3ef77bd7eb Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/2e825aeb23ee50ca14fa64bd8802b16af1f8cebc differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/313db32d5ad7cc2080777b66a9008dcbbd36cf44 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/313db32d5ad7cc2080777b66a9008dcbbd36cf44 new file mode 100644 index 0000000000..ab2493aa93 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/313db32d5ad7cc2080777b66a9008dcbbd36cf44 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/319e3aa5a5c0765bc33c9b8fb3056c62a3d73982 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/319e3aa5a5c0765bc33c9b8fb3056c62a3d73982 new file mode 100644 index 0000000000..29f9d1f21e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/319e3aa5a5c0765bc33c9b8fb3056c62a3d73982 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/31e37eccde137cf2b8e02c9d665419fb86aebb44 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/31e37eccde137cf2b8e02c9d665419fb86aebb44 new file mode 100644 index 0000000000..269ea79a7e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/31e37eccde137cf2b8e02c9d665419fb86aebb44 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/33c08b336e81945310271a7e35a876978bf8db6c b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/33c08b336e81945310271a7e35a876978bf8db6c new file mode 100644 index 0000000000..0212567e20 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/33c08b336e81945310271a7e35a876978bf8db6c differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/369ba35edf050d92fa31572bb3e98651112ea67e b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/369ba35edf050d92fa31572bb3e98651112ea67e new file mode 100644 index 0000000000..7d3c0b3e6d Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/369ba35edf050d92fa31572bb3e98651112ea67e differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/37e75f673bcc1937303467063bf499482345311a b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/37e75f673bcc1937303467063bf499482345311a new file mode 100644 index 0000000000..ff23c438ad Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/37e75f673bcc1937303467063bf499482345311a differ diff --git a/devel/fuzz/gnutls_pkcs12_key_parser.in/key-aes.p12 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/386cd1db2f66e65b7e82a7312eaf249dae62e24e similarity index 100% rename from devel/fuzz/gnutls_pkcs12_key_parser.in/key-aes.p12 rename to fuzz/gnutls_pkcs12_key_parser_fuzzer.in/386cd1db2f66e65b7e82a7312eaf249dae62e24e diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/3a4d5020fb9ceb6849bd4b67d2cf8e7bebae5373 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/3a4d5020fb9ceb6849bd4b67d2cf8e7bebae5373 new file mode 100644 index 0000000000..5c6f378658 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/3a4d5020fb9ceb6849bd4b67d2cf8e7bebae5373 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/3b0d5cfb93eb989d9e68122ff289c1fe28cb2aac b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/3b0d5cfb93eb989d9e68122ff289c1fe28cb2aac new file mode 100644 index 0000000000..87007f7e1b Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/3b0d5cfb93eb989d9e68122ff289c1fe28cb2aac differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/3f6684a72bcd2cd85f459e8befbca31178c00f51 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/3f6684a72bcd2cd85f459e8befbca31178c00f51 new file mode 100644 index 0000000000..88ff2c914e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/3f6684a72bcd2cd85f459e8befbca31178c00f51 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4108d51e95f64886cd10c6f6d99c65139fb5a2f1 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4108d51e95f64886cd10c6f6d99c65139fb5a2f1 new file mode 100644 index 0000000000..aad6335589 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4108d51e95f64886cd10c6f6d99c65139fb5a2f1 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/425d19087204fe8594491f4d0b4d66833a78d207 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/425d19087204fe8594491f4d0b4d66833a78d207 new file mode 100644 index 0000000000..ada424c5d0 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/425d19087204fe8594491f4d0b4d66833a78d207 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4294b5fb7cad787478d427f5aa365ba9cd5fe24e b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4294b5fb7cad787478d427f5aa365ba9cd5fe24e new file mode 100644 index 0000000000..7c156ffd8a Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4294b5fb7cad787478d427f5aa365ba9cd5fe24e differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/42b9ea0c0638639fb74a2bc1f2adb1c891b6cc90 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/42b9ea0c0638639fb74a2bc1f2adb1c891b6cc90 new file mode 100644 index 0000000000..57ae6f72f4 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/42b9ea0c0638639fb74a2bc1f2adb1c891b6cc90 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4617df37364c5ebbe34294f17c3f3eb138331717 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4617df37364c5ebbe34294f17c3f3eb138331717 new file mode 100644 index 0000000000..38e41a9f45 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4617df37364c5ebbe34294f17c3f3eb138331717 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4626d97c14fe3b63fbdd6532ac56038fe2d825d2 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4626d97c14fe3b63fbdd6532ac56038fe2d825d2 new file mode 100644 index 0000000000..0915eec14e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4626d97c14fe3b63fbdd6532ac56038fe2d825d2 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/46a049830924cdd1fec8ef9d29897178905a91e5 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/46a049830924cdd1fec8ef9d29897178905a91e5 new file mode 100644 index 0000000000..8e1211382e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/46a049830924cdd1fec8ef9d29897178905a91e5 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/46d03dbb2b8982c3bbf928ca0a62cc6f59fe5268 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/46d03dbb2b8982c3bbf928ca0a62cc6f59fe5268 new file mode 100644 index 0000000000..f2e81cdc3c Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/46d03dbb2b8982c3bbf928ca0a62cc6f59fe5268 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4789e1439fe4dbb651dd17d538e140325a1b9603 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4789e1439fe4dbb651dd17d538e140325a1b9603 new file mode 100644 index 0000000000..aeb99f796e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4789e1439fe4dbb651dd17d538e140325a1b9603 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4d77fe2e5139f7cde9e4ade4a94c82e6bd52a170 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4d77fe2e5139f7cde9e4ade4a94c82e6bd52a170 new file mode 100644 index 0000000000..3027044293 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4d77fe2e5139f7cde9e4ade4a94c82e6bd52a170 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4dadaae04dffb6d272484cfd3d035fb8d8363440 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4dadaae04dffb6d272484cfd3d035fb8d8363440 new file mode 100644 index 0000000000..0b1c9ce7f4 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4dadaae04dffb6d272484cfd3d035fb8d8363440 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4e60230d541fd734ccc0cb087676f5daefeb6185 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4e60230d541fd734ccc0cb087676f5daefeb6185 new file mode 100644 index 0000000000..cc18095abf Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4e60230d541fd734ccc0cb087676f5daefeb6185 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4e80e8aa147e19cd3205f781fc02e18eb97c132a b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4e80e8aa147e19cd3205f781fc02e18eb97c132a new file mode 100644 index 0000000000..ad2a8393c5 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/4e80e8aa147e19cd3205f781fc02e18eb97c132a differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5022a925bdaee07addcd2cfbf81de1a5ffaaabc5 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5022a925bdaee07addcd2cfbf81de1a5ffaaabc5 new file mode 100644 index 0000000000..d272c67213 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5022a925bdaee07addcd2cfbf81de1a5ffaaabc5 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/50a91165b2c67e9894421d895d9e1897f25bdb70 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/50a91165b2c67e9894421d895d9e1897f25bdb70 new file mode 100644 index 0000000000..50c570770f Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/50a91165b2c67e9894421d895d9e1897f25bdb70 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/50d6f17bb0300164999356e2b5e8bb30cf3e4e4e b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/50d6f17bb0300164999356e2b5e8bb30cf3e4e4e new file mode 100644 index 0000000000..18f5e870d4 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/50d6f17bb0300164999356e2b5e8bb30cf3e4e4e differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5222a27cdc9b7897d037fcf5a4fb23f944e14d69 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5222a27cdc9b7897d037fcf5a4fb23f944e14d69 new file mode 100644 index 0000000000..b0f486a3e0 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5222a27cdc9b7897d037fcf5a4fb23f944e14d69 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/534695e28e3161e69153ab2c04a9917f6a1f27c1 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/534695e28e3161e69153ab2c04a9917f6a1f27c1 new file mode 100644 index 0000000000..91583f79e7 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/534695e28e3161e69153ab2c04a9917f6a1f27c1 differ diff --git a/devel/fuzz/gnutls_pkcs12_key_parser.in/key-3des-p12.p12 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/539ee18bf7a16aa9f84e2703ca3f53a52547d258 similarity index 100% rename from devel/fuzz/gnutls_pkcs12_key_parser.in/key-3des-p12.p12 rename to fuzz/gnutls_pkcs12_key_parser_fuzzer.in/539ee18bf7a16aa9f84e2703ca3f53a52547d258 diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/54cba20a033aeb3ecf53d7557da2b0b7d23bc003 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/54cba20a033aeb3ecf53d7557da2b0b7d23bc003 new file mode 100644 index 0000000000..0c4dc30067 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/54cba20a033aeb3ecf53d7557da2b0b7d23bc003 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/55ec2319b1e9d5018ecdd9d98af2bfc55f862908 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/55ec2319b1e9d5018ecdd9d98af2bfc55f862908 new file mode 100644 index 0000000000..9e596b34eb Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/55ec2319b1e9d5018ecdd9d98af2bfc55f862908 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb new file mode 100644 index 0000000000..d1a537e229 --- /dev/null +++ b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5a2aa8dc3cd32eeb2ff6c031e3501edf71166ad3 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5a2aa8dc3cd32eeb2ff6c031e3501edf71166ad3 new file mode 100644 index 0000000000..d28543db50 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5a2aa8dc3cd32eeb2ff6c031e3501edf71166ad3 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5aa4722a11957f5e31be0248d7b9cffd92729f86 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5aa4722a11957f5e31be0248d7b9cffd92729f86 new file mode 100644 index 0000000000..cbc52686bd Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5aa4722a11957f5e31be0248d7b9cffd92729f86 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5c1e054b963ad537be30e13fdff7551f02589aec b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5c1e054b963ad537be30e13fdff7551f02589aec new file mode 100644 index 0000000000..a8c1c35f74 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5c1e054b963ad537be30e13fdff7551f02589aec differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5f1447622a77a34ee02e6f6153e671b095ec662a b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5f1447622a77a34ee02e6f6153e671b095ec662a new file mode 100644 index 0000000000..b2f3cc3395 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5f1447622a77a34ee02e6f6153e671b095ec662a differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5fc474c284fd8595b23e3c54aae703362be69264 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5fc474c284fd8595b23e3c54aae703362be69264 new file mode 100644 index 0000000000..60dd8a70b1 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/5fc474c284fd8595b23e3c54aae703362be69264 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/6221ea0d86baf26c07573cb0ad42a97574927f1f b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/6221ea0d86baf26c07573cb0ad42a97574927f1f new file mode 100644 index 0000000000..03b8a25553 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/6221ea0d86baf26c07573cb0ad42a97574927f1f differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/624b2c19c806790184ab2aa72c8a9f11feb1a149 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/624b2c19c806790184ab2aa72c8a9f11feb1a149 new file mode 100644 index 0000000000..73293f52be Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/624b2c19c806790184ab2aa72c8a9f11feb1a149 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/651e60d038eb38a0c7c0c6868a479285fcad145e b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/651e60d038eb38a0c7c0c6868a479285fcad145e new file mode 100644 index 0000000000..51b10ba2c1 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/651e60d038eb38a0c7c0c6868a479285fcad145e differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/653b6166ec295b1cbd31c95fa5be7163051cb388 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/653b6166ec295b1cbd31c95fa5be7163051cb388 new file mode 100644 index 0000000000..669d5e5ec5 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/653b6166ec295b1cbd31c95fa5be7163051cb388 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/65a105a328e9ba180c2443d427068812e414f627 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/65a105a328e9ba180c2443d427068812e414f627 new file mode 100644 index 0000000000..5a5ebd8e68 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/65a105a328e9ba180c2443d427068812e414f627 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/68d536e1beb32c24bbc5d08f2b51f7693a4333c0 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/68d536e1beb32c24bbc5d08f2b51f7693a4333c0 new file mode 100644 index 0000000000..f13c2ef9b6 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/68d536e1beb32c24bbc5d08f2b51f7693a4333c0 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/69e6ebb4fcbf6adb721efcfff6aaeb806256406a b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/69e6ebb4fcbf6adb721efcfff6aaeb806256406a new file mode 100644 index 0000000000..e1435c9734 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/69e6ebb4fcbf6adb721efcfff6aaeb806256406a differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/6d11a94502e8e0cc8fa378ef3a0c1bbe00dc858e b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/6d11a94502e8e0cc8fa378ef3a0c1bbe00dc858e new file mode 100644 index 0000000000..2e85b0bafd Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/6d11a94502e8e0cc8fa378ef3a0c1bbe00dc858e differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/6e2af40d5498dc0aa391e45d664a997d31975e76 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/6e2af40d5498dc0aa391e45d664a997d31975e76 new file mode 100644 index 0000000000..9b90829b30 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/6e2af40d5498dc0aa391e45d664a997d31975e76 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/70d52fd48afebc1596c2500b026b8f2ec4bfcfbf b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/70d52fd48afebc1596c2500b026b8f2ec4bfcfbf new file mode 100644 index 0000000000..3687000ecc Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/70d52fd48afebc1596c2500b026b8f2ec4bfcfbf differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/70fb3040108928469996d7fd89d422bfc3f5aae3 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/70fb3040108928469996d7fd89d422bfc3f5aae3 new file mode 100644 index 0000000000..8fc6771339 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/70fb3040108928469996d7fd89d422bfc3f5aae3 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7167a8caa13ec5fbc6a5cd2b32220798433654ad b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7167a8caa13ec5fbc6a5cd2b32220798433654ad new file mode 100644 index 0000000000..9898efac86 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7167a8caa13ec5fbc6a5cd2b32220798433654ad differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/72c574f0cd4405053850ca7290015ca7e72d3b22 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/72c574f0cd4405053850ca7290015ca7e72d3b22 new file mode 100644 index 0000000000..2dbef5a63b Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/72c574f0cd4405053850ca7290015ca7e72d3b22 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/72c72a2aa365da5bf17cef7f7a0d53874eaceefc b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/72c72a2aa365da5bf17cef7f7a0d53874eaceefc new file mode 100644 index 0000000000..0d9e444e82 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/72c72a2aa365da5bf17cef7f7a0d53874eaceefc differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/73518d405cdcd59c6cac19f85d602af322d1347f b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/73518d405cdcd59c6cac19f85d602af322d1347f new file mode 100644 index 0000000000..5b2f43c28c Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/73518d405cdcd59c6cac19f85d602af322d1347f differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/73baa9693cb5e14a8497b7807eb0a1995ce68197 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/73baa9693cb5e14a8497b7807eb0a1995ce68197 new file mode 100644 index 0000000000..36973a0a37 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/73baa9693cb5e14a8497b7807eb0a1995ce68197 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7540e05e8697300f60d7c09b0e0b40a233bc9950 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7540e05e8697300f60d7c09b0e0b40a233bc9950 new file mode 100644 index 0000000000..3ac232690b Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7540e05e8697300f60d7c09b0e0b40a233bc9950 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7676822ba848b14a48baefe260228afe50ebf490 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7676822ba848b14a48baefe260228afe50ebf490 new file mode 100644 index 0000000000..df5ed4b18a Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7676822ba848b14a48baefe260228afe50ebf490 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/76dd4f545a510ee63ec104d0e2e75023c64afbef b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/76dd4f545a510ee63ec104d0e2e75023c64afbef new file mode 100644 index 0000000000..e50b6f519e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/76dd4f545a510ee63ec104d0e2e75023c64afbef differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/77347b7b34085730efa2c7be47d813771a0aff89 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/77347b7b34085730efa2c7be47d813771a0aff89 new file mode 100644 index 0000000000..c3203b090e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/77347b7b34085730efa2c7be47d813771a0aff89 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7775aaab90436e66237d26994e6ceed05619ea91 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7775aaab90436e66237d26994e6ceed05619ea91 new file mode 100644 index 0000000000..e1b02d172f Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7775aaab90436e66237d26994e6ceed05619ea91 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/77fe345e34ade23ed9856596738f082497400072 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/77fe345e34ade23ed9856596738f082497400072 new file mode 100644 index 0000000000..275e2a7e11 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/77fe345e34ade23ed9856596738f082497400072 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7be33d3cc1dca1a96da26d652359c622e8063298 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7be33d3cc1dca1a96da26d652359c622e8063298 new file mode 100644 index 0000000000..bd0db2f240 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7be33d3cc1dca1a96da26d652359c622e8063298 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7c3e2da876535c67f96d4caad31c7c1ebc3351a3 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7c3e2da876535c67f96d4caad31c7c1ebc3351a3 new file mode 100644 index 0000000000..3a60fd9eb8 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7c3e2da876535c67f96d4caad31c7c1ebc3351a3 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7cf0b240b2c8d0c3cd753241e815971a3b2c85c0 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7cf0b240b2c8d0c3cd753241e815971a3b2c85c0 new file mode 100644 index 0000000000..f8d37b7ccc Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7cf0b240b2c8d0c3cd753241e815971a3b2c85c0 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7d9cd8fc6759b3a2686adfa4c7070482aa8f605b b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7d9cd8fc6759b3a2686adfa4c7070482aa8f605b new file mode 100644 index 0000000000..4bd84ff4cd Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7d9cd8fc6759b3a2686adfa4c7070482aa8f605b differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7e1b19488e7a295915bcdb1a74f38ce4a7fb3d82 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7e1b19488e7a295915bcdb1a74f38ce4a7fb3d82 new file mode 100644 index 0000000000..79d91b7075 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7e1b19488e7a295915bcdb1a74f38ce4a7fb3d82 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7e719b890375d7f2783df96fed1a0aa56306af36 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7e719b890375d7f2783df96fed1a0aa56306af36 new file mode 100644 index 0000000000..06c3cee98a Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/7e719b890375d7f2783df96fed1a0aa56306af36 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8025fdb70efc2f6d35e373c176dee846efd6be33 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8025fdb70efc2f6d35e373c176dee846efd6be33 new file mode 100644 index 0000000000..d3108edfc2 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8025fdb70efc2f6d35e373c176dee846efd6be33 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/80eec58026bb6bb933f23650986533f4f11fefd5 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/80eec58026bb6bb933f23650986533f4f11fefd5 new file mode 100644 index 0000000000..3654ceaeb5 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/80eec58026bb6bb933f23650986533f4f11fefd5 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/817923804279f03fdc5a84a9360c690d16d60ecc b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/817923804279f03fdc5a84a9360c690d16d60ecc new file mode 100644 index 0000000000..e80ca2a3e8 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/817923804279f03fdc5a84a9360c690d16d60ecc differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/831d6b1419e5760fc86bb8bd5ff1c7630bc063c8 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/831d6b1419e5760fc86bb8bd5ff1c7630bc063c8 new file mode 100644 index 0000000000..f6d4305970 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/831d6b1419e5760fc86bb8bd5ff1c7630bc063c8 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/83a45e7d7e0e9c08c2bbb12292224b9ca196d51f b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/83a45e7d7e0e9c08c2bbb12292224b9ca196d51f new file mode 100644 index 0000000000..9d041d9ae9 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/83a45e7d7e0e9c08c2bbb12292224b9ca196d51f differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8457bf005502c860027e8bcc2181a96e92bbe74f b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8457bf005502c860027e8bcc2181a96e92bbe74f new file mode 100644 index 0000000000..57fcf97e51 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8457bf005502c860027e8bcc2181a96e92bbe74f differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/864d2498348e85fc597d604b2dbfd97d64deda8c b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/864d2498348e85fc597d604b2dbfd97d64deda8c new file mode 100644 index 0000000000..26a39c4c0d Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/864d2498348e85fc597d604b2dbfd97d64deda8c differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8a1320975e683bfe2c82ceb4c34a15d95cff03a0 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8a1320975e683bfe2c82ceb4c34a15d95cff03a0 new file mode 100644 index 0000000000..63f660be21 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8a1320975e683bfe2c82ceb4c34a15d95cff03a0 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8a326ff7e78e01262942fc408ebbb5db8f30ad26 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8a326ff7e78e01262942fc408ebbb5db8f30ad26 new file mode 100644 index 0000000000..7d7df6cb58 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8a326ff7e78e01262942fc408ebbb5db8f30ad26 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8c6b029fd04ca67eb56af5ecf0530ed47b772b31 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8c6b029fd04ca67eb56af5ecf0530ed47b772b31 new file mode 100644 index 0000000000..cb4975f440 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8c6b029fd04ca67eb56af5ecf0530ed47b772b31 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8caa32479903dcb56c8b80b836f77fb961c02562 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8caa32479903dcb56c8b80b836f77fb961c02562 new file mode 100644 index 0000000000..d860804360 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8caa32479903dcb56c8b80b836f77fb961c02562 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8e204ce8e0a557e353f3abcec4d16080464a8257 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8e204ce8e0a557e353f3abcec4d16080464a8257 new file mode 100644 index 0000000000..afa2f396cf Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/8e204ce8e0a557e353f3abcec4d16080464a8257 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/900859e77c57f14f12fa91f97a2a840a267dccf3 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/900859e77c57f14f12fa91f97a2a840a267dccf3 new file mode 100644 index 0000000000..35ac0c9fcb Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/900859e77c57f14f12fa91f97a2a840a267dccf3 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/913cebd5cc134c6401923a79a3237607ebbec3d4 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/913cebd5cc134c6401923a79a3237607ebbec3d4 new file mode 100644 index 0000000000..aee27c836d Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/913cebd5cc134c6401923a79a3237607ebbec3d4 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/91c488cb8c5a2b9ab640d1c5ae8a317a08f254ee b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/91c488cb8c5a2b9ab640d1c5ae8a317a08f254ee new file mode 100644 index 0000000000..580505502e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/91c488cb8c5a2b9ab640d1c5ae8a317a08f254ee differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/92664a867e6f13f20c1e27079ec789c95f8f43c0 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/92664a867e6f13f20c1e27079ec789c95f8f43c0 new file mode 100644 index 0000000000..d82f359f30 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/92664a867e6f13f20c1e27079ec789c95f8f43c0 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/937330e53484599642648609d12c4e9626f3c5ea b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/937330e53484599642648609d12c4e9626f3c5ea new file mode 100644 index 0000000000..ec8d46121b Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/937330e53484599642648609d12c4e9626f3c5ea differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/945378003889f4e560c5ef42b206b613a2085737 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/945378003889f4e560c5ef42b206b613a2085737 new file mode 100644 index 0000000000..d9d2c73deb Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/945378003889f4e560c5ef42b206b613a2085737 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/94ada37347e7b22563e5a592ba7790e9ed445852 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/94ada37347e7b22563e5a592ba7790e9ed445852 new file mode 100644 index 0000000000..39cb3bd32e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/94ada37347e7b22563e5a592ba7790e9ed445852 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/96548d631d4b3c3c02067857fd495d35e10586ec b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/96548d631d4b3c3c02067857fd495d35e10586ec new file mode 100644 index 0000000000..71d52d18b7 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/96548d631d4b3c3c02067857fd495d35e10586ec differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/96f8fce2e728af938b1d025d7f4c24c255a11a4e b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/96f8fce2e728af938b1d025d7f4c24c255a11a4e new file mode 100644 index 0000000000..eabf7ee792 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/96f8fce2e728af938b1d025d7f4c24c255a11a4e differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9835fb8b46b04d3b232104edb4107d18ba3e5626 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9835fb8b46b04d3b232104edb4107d18ba3e5626 new file mode 100644 index 0000000000..c9fa089be1 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9835fb8b46b04d3b232104edb4107d18ba3e5626 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/98b69fc1be8e74ecf6008238327ee7ec22d1607b b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/98b69fc1be8e74ecf6008238327ee7ec22d1607b new file mode 100644 index 0000000000..1fedd2bd79 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/98b69fc1be8e74ecf6008238327ee7ec22d1607b differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/99f118c534b8d4aac5629d32d507ce42c7e2bb32 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/99f118c534b8d4aac5629d32d507ce42c7e2bb32 new file mode 100644 index 0000000000..3ae24220b7 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/99f118c534b8d4aac5629d32d507ce42c7e2bb32 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9ae154bd4512de654b3daf9d04cf687e10db89ce b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9ae154bd4512de654b3daf9d04cf687e10db89ce new file mode 100644 index 0000000000..068ed5f6ed Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9ae154bd4512de654b3daf9d04cf687e10db89ce differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9aecc8f69dadffe4e8ac07adadf8ef1161e7e82e b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9aecc8f69dadffe4e8ac07adadf8ef1161e7e82e new file mode 100644 index 0000000000..df6fcd6c2a Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9aecc8f69dadffe4e8ac07adadf8ef1161e7e82e differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9d647850ccccf6bd5a19aee8c5d54857d68b4392 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9d647850ccccf6bd5a19aee8c5d54857d68b4392 new file mode 100644 index 0000000000..2b69325cfa Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9d647850ccccf6bd5a19aee8c5d54857d68b4392 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9da8607b77cd544d441aba34eaf1defae1e6a5e0 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9da8607b77cd544d441aba34eaf1defae1e6a5e0 new file mode 100644 index 0000000000..ad4e6126a9 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9da8607b77cd544d441aba34eaf1defae1e6a5e0 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9e55dca776eec915b7bd7bd2548247609c17da8c b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9e55dca776eec915b7bd7bd2548247609c17da8c new file mode 100644 index 0000000000..277849d735 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/9e55dca776eec915b7bd7bd2548247609c17da8c differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a03a684015985409a37c9c1c514581bc94f987c0 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a03a684015985409a37c9c1c514581bc94f987c0 new file mode 100644 index 0000000000..d5a7a145b1 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a03a684015985409a37c9c1c514581bc94f987c0 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a053ea131743114e0637cf09f2da2153d33eda6d b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a053ea131743114e0637cf09f2da2153d33eda6d new file mode 100644 index 0000000000..5fee4bfa73 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a053ea131743114e0637cf09f2da2153d33eda6d differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a11d94062e3a9393a735cbf3589a17516072c358 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a11d94062e3a9393a735cbf3589a17516072c358 new file mode 100644 index 0000000000..8aeaee6c8e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a11d94062e3a9393a735cbf3589a17516072c358 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a1553ac4b842122d8cb765064dce0834f56bd681 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a1553ac4b842122d8cb765064dce0834f56bd681 new file mode 100644 index 0000000000..ef37b7d7b1 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a1553ac4b842122d8cb765064dce0834f56bd681 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a1f497a68c5d34b1f58f86cbd18971f17e0afb96 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a1f497a68c5d34b1f58f86cbd18971f17e0afb96 new file mode 100644 index 0000000000..02534aca6c Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a1f497a68c5d34b1f58f86cbd18971f17e0afb96 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a2c2e3ea798120d3b3c413ac20a4be214ba0052d b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a2c2e3ea798120d3b3c413ac20a4be214ba0052d new file mode 100644 index 0000000000..5736ad013d Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a2c2e3ea798120d3b3c413ac20a4be214ba0052d differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a56a3a618a6504f2669969a1716486f5f1e3c16d b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a56a3a618a6504f2669969a1716486f5f1e3c16d new file mode 100644 index 0000000000..124bcdc662 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a56a3a618a6504f2669969a1716486f5f1e3c16d differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a8aae3d777beab137ab6b48fb5c7140dca34fe43 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a8aae3d777beab137ab6b48fb5c7140dca34fe43 new file mode 100644 index 0000000000..895b6f063b Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/a8aae3d777beab137ab6b48fb5c7140dca34fe43 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/aab2c028ad116e436d74656fbe31704e142d3b09 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/aab2c028ad116e436d74656fbe31704e142d3b09 new file mode 100644 index 0000000000..ceda870ade Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/aab2c028ad116e436d74656fbe31704e142d3b09 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ad2b8ee76439e0de70772c8e52b5fbfb29070825 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ad2b8ee76439e0de70772c8e52b5fbfb29070825 new file mode 100644 index 0000000000..00d9f45657 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ad2b8ee76439e0de70772c8e52b5fbfb29070825 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/adfd42d5e068f43dd3939c1808cbdbe8a9572757 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/adfd42d5e068f43dd3939c1808cbdbe8a9572757 new file mode 100644 index 0000000000..2c4513c6a7 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/adfd42d5e068f43dd3939c1808cbdbe8a9572757 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ae4121fa77516b0ce34db60f34aae6df95c78303 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ae4121fa77516b0ce34db60f34aae6df95c78303 new file mode 100644 index 0000000000..104da3cade Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ae4121fa77516b0ce34db60f34aae6df95c78303 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/b52a6b44525e7c8eade435880cd78038e0ad1762 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/b52a6b44525e7c8eade435880cd78038e0ad1762 new file mode 100644 index 0000000000..406315f89c Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/b52a6b44525e7c8eade435880cd78038e0ad1762 differ diff --git a/devel/fuzz/gnutls_pkcs12_key_parser.in/key-3des.p12 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/b583101030e5cb44dea978a89026fdbf868ef64e similarity index 100% rename from devel/fuzz/gnutls_pkcs12_key_parser.in/key-3des.p12 rename to fuzz/gnutls_pkcs12_key_parser_fuzzer.in/b583101030e5cb44dea978a89026fdbf868ef64e diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/bc3dbb118bd07f3f595c37d17740a832815e34e9 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/bc3dbb118bd07f3f595c37d17740a832815e34e9 new file mode 100644 index 0000000000..e04d3d5c89 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/bc3dbb118bd07f3f595c37d17740a832815e34e9 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/bcbe2ddf47bf2b0a75285f9e69ecc8c2c0a69877 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/bcbe2ddf47bf2b0a75285f9e69ecc8c2c0a69877 new file mode 100644 index 0000000000..9d4e69bf40 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/bcbe2ddf47bf2b0a75285f9e69ecc8c2c0a69877 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/bf76cb8c8d4487c601f1021fce4c50aea9bf8e8d b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/bf76cb8c8d4487c601f1021fce4c50aea9bf8e8d new file mode 100644 index 0000000000..6ce2358735 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/bf76cb8c8d4487c601f1021fce4c50aea9bf8e8d differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c07a72355575a8432e942946e493ed67f8aa14e4 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c07a72355575a8432e942946e493ed67f8aa14e4 new file mode 100644 index 0000000000..9437e0b6bf Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c07a72355575a8432e942946e493ed67f8aa14e4 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c0e7f2f2802a0e37ff770e0e65c1ac5bed7fda76 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c0e7f2f2802a0e37ff770e0e65c1ac5bed7fda76 new file mode 100644 index 0000000000..20de17bf01 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c0e7f2f2802a0e37ff770e0e65c1ac5bed7fda76 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c1accaaf5bb212cdeb33497ecdec2d4d3eaf2456 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c1accaaf5bb212cdeb33497ecdec2d4d3eaf2456 new file mode 100644 index 0000000000..3cdc896f5c Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c1accaaf5bb212cdeb33497ecdec2d4d3eaf2456 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c43018f968202630e03560b9a0d513affff12e18 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c43018f968202630e03560b9a0d513affff12e18 new file mode 100644 index 0000000000..e8703805b0 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c43018f968202630e03560b9a0d513affff12e18 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c8c55dba44a9247af5cf3dd2d025c82ab07fe511 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c8c55dba44a9247af5cf3dd2d025c82ab07fe511 new file mode 100644 index 0000000000..03842e4a73 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c8c55dba44a9247af5cf3dd2d025c82ab07fe511 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c8c80314d263d7b69e37c460b838ee39ff2434e5 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c8c80314d263d7b69e37c460b838ee39ff2434e5 new file mode 100644 index 0000000000..88c1c2774a Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c8c80314d263d7b69e37c460b838ee39ff2434e5 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c9b426e10cf27cdd6c346187483265a3f8b2e3cb b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c9b426e10cf27cdd6c346187483265a3f8b2e3cb new file mode 100644 index 0000000000..ab3c151ca9 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/c9b426e10cf27cdd6c346187483265a3f8b2e3cb differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ca4dca4a6e88fccd54cac533e720d816ceef1b27 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ca4dca4a6e88fccd54cac533e720d816ceef1b27 new file mode 100644 index 0000000000..0dbed44a68 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ca4dca4a6e88fccd54cac533e720d816ceef1b27 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ca79b55453c1ef8617ea5a6d82150c18ef703cf5 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ca79b55453c1ef8617ea5a6d82150c18ef703cf5 new file mode 100644 index 0000000000..c4e37bb947 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ca79b55453c1ef8617ea5a6d82150c18ef703cf5 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cb15cca33b84c72b53be5bc86714e62e2527246d b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cb15cca33b84c72b53be5bc86714e62e2527246d new file mode 100644 index 0000000000..674e9a48d9 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cb15cca33b84c72b53be5bc86714e62e2527246d differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cbdcad75447b0c7c31dbf2e81017fd1d134eb784 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cbdcad75447b0c7c31dbf2e81017fd1d134eb784 new file mode 100644 index 0000000000..4b16a26510 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cbdcad75447b0c7c31dbf2e81017fd1d134eb784 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cd3395f9549fff69dc682a5ba0541a9b5e4d24d0 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cd3395f9549fff69dc682a5ba0541a9b5e4d24d0 new file mode 100644 index 0000000000..532fa44bed Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cd3395f9549fff69dc682a5ba0541a9b5e4d24d0 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cd74a3e40e973e2f1a214fba2f0959f46d06478c b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cd74a3e40e973e2f1a214fba2f0959f46d06478c new file mode 100644 index 0000000000..ec7b1c2824 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cd74a3e40e973e2f1a214fba2f0959f46d06478c differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cda2b48fd547f6f6883771322deb700e6e56f923 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cda2b48fd547f6f6883771322deb700e6e56f923 new file mode 100644 index 0000000000..d1b5717c79 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cda2b48fd547f6f6883771322deb700e6e56f923 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cdd45d5d6d985f47271f2781dc1ba555afeb084c b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cdd45d5d6d985f47271f2781dc1ba555afeb084c new file mode 100644 index 0000000000..40c7c4c69e Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/cdd45d5d6d985f47271f2781dc1ba555afeb084c differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d197590f6766dad9fae050ddfc22c7448901bf6a b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d197590f6766dad9fae050ddfc22c7448901bf6a new file mode 100644 index 0000000000..b67da35578 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d197590f6766dad9fae050ddfc22c7448901bf6a differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d1bfa05b3c459723638f8c447a5b75ce871bb279 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d1bfa05b3c459723638f8c447a5b75ce871bb279 new file mode 100644 index 0000000000..baaaaf64c7 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d1bfa05b3c459723638f8c447a5b75ce871bb279 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d2cc89c17b2c0c0cec4c20d05fbb05766a36b431 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d2cc89c17b2c0c0cec4c20d05fbb05766a36b431 new file mode 100644 index 0000000000..dd05dc51fa Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d2cc89c17b2c0c0cec4c20d05fbb05766a36b431 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d49d5587d5a1c047833cf3f7aa7329d902ff5488 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d49d5587d5a1c047833cf3f7aa7329d902ff5488 new file mode 100644 index 0000000000..4409d46541 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d49d5587d5a1c047833cf3f7aa7329d902ff5488 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d619528b7b7aca92176179ea2eee0ffeb48d315b b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d619528b7b7aca92176179ea2eee0ffeb48d315b new file mode 100644 index 0000000000..7c0937f164 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d619528b7b7aca92176179ea2eee0ffeb48d315b differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d74951b9eb987e68dffe78abba3b73a3c4886b16 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d74951b9eb987e68dffe78abba3b73a3c4886b16 new file mode 100644 index 0000000000..cdf7314bd4 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d74951b9eb987e68dffe78abba3b73a3c4886b16 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d7bad9de01bf98a97dbaf6db7bf986bac01a8e14 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d7bad9de01bf98a97dbaf6db7bf986bac01a8e14 new file mode 100644 index 0000000000..60c9aaf9f3 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d7bad9de01bf98a97dbaf6db7bf986bac01a8e14 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d91ce66cfe62f0ed73424b9b89e90280f35b138a b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d91ce66cfe62f0ed73424b9b89e90280f35b138a new file mode 100644 index 0000000000..90d8a45b11 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/d91ce66cfe62f0ed73424b9b89e90280f35b138a differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dacfdc1118b6ed2aab068b97c7d22c3fd6f8bf61 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dacfdc1118b6ed2aab068b97c7d22c3fd6f8bf61 new file mode 100644 index 0000000000..5a208154e6 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dacfdc1118b6ed2aab068b97c7d22c3fd6f8bf61 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dad0f45080b9f3d56a06d9f8d633dc5e52d3bdc8 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dad0f45080b9f3d56a06d9f8d633dc5e52d3bdc8 new file mode 100644 index 0000000000..48d6bed812 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dad0f45080b9f3d56a06d9f8d633dc5e52d3bdc8 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/db55c028bfbe2ebb6f286e04bde0898caee57e8a b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/db55c028bfbe2ebb6f286e04bde0898caee57e8a new file mode 100644 index 0000000000..4db4abcefa Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/db55c028bfbe2ebb6f286e04bde0898caee57e8a differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dd075f5684abace3c5bdc697a11f9d0075a1f578 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dd075f5684abace3c5bdc697a11f9d0075a1f578 new file mode 100644 index 0000000000..ced2fbd4cd Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dd075f5684abace3c5bdc697a11f9d0075a1f578 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dfba70371d744c1cd13811bae59d09fd6ae8585a b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dfba70371d744c1cd13811bae59d09fd6ae8585a new file mode 100644 index 0000000000..03714c2516 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dfba70371d744c1cd13811bae59d09fd6ae8585a differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dfbda19b02cfd362ec9611a593bb7f400ab0f38f b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dfbda19b02cfd362ec9611a593bb7f400ab0f38f new file mode 100644 index 0000000000..bd01ce9477 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/dfbda19b02cfd362ec9611a593bb7f400ab0f38f differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/e3d694818c0594286d1ffa362523c525742bfa34 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/e3d694818c0594286d1ffa362523c525742bfa34 new file mode 100644 index 0000000000..c0adf716de Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/e3d694818c0594286d1ffa362523c525742bfa34 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/e63e931f436bfa4d324fa799fce9dbe857903cdf b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/e63e931f436bfa4d324fa799fce9dbe857903cdf new file mode 100644 index 0000000000..701d5d0127 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/e63e931f436bfa4d324fa799fce9dbe857903cdf differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/eb2d340e401619746677c50fb9d6624383e080fa b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/eb2d340e401619746677c50fb9d6624383e080fa new file mode 100644 index 0000000000..3bd1fd1562 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/eb2d340e401619746677c50fb9d6624383e080fa differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ed1a2da5ccdbcd7fb1ab363817085481596e663f b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ed1a2da5ccdbcd7fb1ab363817085481596e663f new file mode 100644 index 0000000000..e944d3feb9 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ed1a2da5ccdbcd7fb1ab363817085481596e663f differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ee404dc1ff8cad2e323c71a625ac112898076c53 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ee404dc1ff8cad2e323c71a625ac112898076c53 new file mode 100644 index 0000000000..9fc5bf77a1 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/ee404dc1ff8cad2e323c71a625ac112898076c53 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/efd3e3e9e571bca09c70c4d24d647cabec4fa6a8 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/efd3e3e9e571bca09c70c4d24d647cabec4fa6a8 new file mode 100644 index 0000000000..d281cbacad Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/efd3e3e9e571bca09c70c4d24d647cabec4fa6a8 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f00922d25ce025185749de0366354054fbe046b6 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f00922d25ce025185749de0366354054fbe046b6 new file mode 100644 index 0000000000..878e588ecc Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f00922d25ce025185749de0366354054fbe046b6 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f1ca63293a5070f025f9dcab2a7ede7ce40f33e1 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f1ca63293a5070f025f9dcab2a7ede7ce40f33e1 new file mode 100644 index 0000000000..10dd01d0ba Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f1ca63293a5070f025f9dcab2a7ede7ce40f33e1 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f289d5348c2ca8fa11fab310dfa0749d81f23539 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f289d5348c2ca8fa11fab310dfa0749d81f23539 new file mode 100644 index 0000000000..5baeae8b65 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f289d5348c2ca8fa11fab310dfa0749d81f23539 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f7c7ddc436e3a97bcef57fcb7ae0f2d4702dc7a2 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f7c7ddc436e3a97bcef57fcb7ae0f2d4702dc7a2 new file mode 100644 index 0000000000..4947667df4 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/f7c7ddc436e3a97bcef57fcb7ae0f2d4702dc7a2 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fa8d659bec4f30de9a3aff44aad5561322497692 b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fa8d659bec4f30de9a3aff44aad5561322497692 new file mode 100644 index 0000000000..b5de4b50ad Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fa8d659bec4f30de9a3aff44aad5561322497692 differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fd3d242c7fe37a30e6013dd33f197cccefcb793b b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fd3d242c7fe37a30e6013dd33f197cccefcb793b new file mode 100644 index 0000000000..ce46e2f254 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fd3d242c7fe37a30e6013dd33f197cccefcb793b differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fd7497a011668c1dd703f6418f71a24ea2fc93bf b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fd7497a011668c1dd703f6418f71a24ea2fc93bf new file mode 100644 index 0000000000..79944bbad9 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fd7497a011668c1dd703f6418f71a24ea2fc93bf differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fe3357f1eb940c2631076fbc0883ad22dc1d89ef b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fe3357f1eb940c2631076fbc0883ad22dc1d89ef new file mode 100644 index 0000000000..1e6793e627 Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.in/fe3357f1eb940c2631076fbc0883ad22dc1d89ef differ diff --git a/fuzz/gnutls_pkcs12_key_parser_fuzzer.repro/dcbb6c7d385ddf87823849890768b022dc9e1eff b/fuzz/gnutls_pkcs12_key_parser_fuzzer.repro/dcbb6c7d385ddf87823849890768b022dc9e1eff new file mode 100644 index 0000000000..ebc03d30dc Binary files /dev/null and b/fuzz/gnutls_pkcs12_key_parser_fuzzer.repro/dcbb6c7d385ddf87823849890768b022dc9e1eff differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.c b/fuzz/gnutls_pkcs7_parser_fuzzer.c new file mode 100644 index 0000000000..92f1f33d3f --- /dev/null +++ b/fuzz/gnutls_pkcs7_parser_fuzzer.c @@ -0,0 +1,49 @@ +/* +# Copyright 2016 Google Inc. +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include + +#include +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw; + gnutls_datum_t out; + gnutls_pkcs7_t pkcs7; + int ret; + + raw.data = (unsigned char *)data; + raw.size = size; + + ret = gnutls_pkcs7_init(&pkcs7); + assert(ret >= 0); + + ret = gnutls_pkcs7_import(pkcs7, &raw, GNUTLS_X509_FMT_DER); + if (ret >= 0) { + ret = gnutls_pkcs7_print(pkcs7, GNUTLS_CRT_PRINT_FULL, &out); + assert(ret >= 0); + gnutls_free(out.data); + } + + gnutls_pkcs7_deinit(pkcs7); + return 0; +} diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/00cc5297825dbc3b283426a114f327c1bf13a8f9 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/00cc5297825dbc3b283426a114f327c1bf13a8f9 new file mode 100644 index 0000000000..d640408592 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/00cc5297825dbc3b283426a114f327c1bf13a8f9 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/01d9b2d133d59e14f8608938064e0727805d2949 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/01d9b2d133d59e14f8608938064e0727805d2949 new file mode 100644 index 0000000000..e7e0c28450 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/01d9b2d133d59e14f8608938064e0727805d2949 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/030e4f658ec4ed7393ec3f41f27ab4d644948e13 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/030e4f658ec4ed7393ec3f41f27ab4d644948e13 new file mode 100644 index 0000000000..04a6171c1a Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/030e4f658ec4ed7393ec3f41f27ab4d644948e13 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/0625a72e9140b5985510bb3499fb407637f82cf1 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/0625a72e9140b5985510bb3499fb407637f82cf1 new file mode 100644 index 0000000000..6217815dd1 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/0625a72e9140b5985510bb3499fb407637f82cf1 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/096bc72dea98b3aa51c607cb90ab64ded4decca8 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/096bc72dea98b3aa51c607cb90ab64ded4decca8 new file mode 100644 index 0000000000..1409eeb319 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/096bc72dea98b3aa51c607cb90ab64ded4decca8 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/09d844fe63ca873c7348138833e04f1f160651aa b/fuzz/gnutls_pkcs7_parser_fuzzer.in/09d844fe63ca873c7348138833e04f1f160651aa new file mode 100644 index 0000000000..72e791e786 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/09d844fe63ca873c7348138833e04f1f160651aa differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/09f357044a8ad65a369a245e703066d17c275b60 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/09f357044a8ad65a369a245e703066d17c275b60 new file mode 100644 index 0000000000..0f2b64e81f Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/09f357044a8ad65a369a245e703066d17c275b60 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/0c8a502444f6d1c190d5db45cc59f0e9638a5362 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/0c8a502444f6d1c190d5db45cc59f0e9638a5362 new file mode 100644 index 0000000000..1f2cc33888 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/0c8a502444f6d1c190d5db45cc59f0e9638a5362 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/12ff7b1de1db683139dd6acd7351cbf78a4a2071 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/12ff7b1de1db683139dd6acd7351cbf78a4a2071 new file mode 100644 index 0000000000..2f54eef049 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/12ff7b1de1db683139dd6acd7351cbf78a4a2071 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/142110fa52daf4019da49fe1a5c6174cc2f5a613 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/142110fa52daf4019da49fe1a5c6174cc2f5a613 new file mode 100644 index 0000000000..5f114cc754 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/142110fa52daf4019da49fe1a5c6174cc2f5a613 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/16eab262550ea4a553c31cf8b705dd82fbb420dd b/fuzz/gnutls_pkcs7_parser_fuzzer.in/16eab262550ea4a553c31cf8b705dd82fbb420dd new file mode 100644 index 0000000000..bde80ba844 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/16eab262550ea4a553c31cf8b705dd82fbb420dd differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/1757d44283041ae0830a78959dce13be127624df b/fuzz/gnutls_pkcs7_parser_fuzzer.in/1757d44283041ae0830a78959dce13be127624df new file mode 100644 index 0000000000..eceebaff1c Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/1757d44283041ae0830a78959dce13be127624df differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/18903b94cab314fd8c502529b58fa0502fdea087 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/18903b94cab314fd8c502529b58fa0502fdea087 new file mode 100644 index 0000000000..07375e1ef8 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/18903b94cab314fd8c502529b58fa0502fdea087 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/198337d10286b07fc87e469ef43ed1a47a144351 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/198337d10286b07fc87e469ef43ed1a47a144351 new file mode 100644 index 0000000000..f7465c650a Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/198337d10286b07fc87e469ef43ed1a47a144351 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/1c9af21e2b948c52fa18108d9f75f4b38dd1788d b/fuzz/gnutls_pkcs7_parser_fuzzer.in/1c9af21e2b948c52fa18108d9f75f4b38dd1788d new file mode 100644 index 0000000000..bc1b56a29c Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/1c9af21e2b948c52fa18108d9f75f4b38dd1788d differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/22afeded2b8e689e483129381d05d30ba5eaac7f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/22afeded2b8e689e483129381d05d30ba5eaac7f new file mode 100644 index 0000000000..332e084158 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/22afeded2b8e689e483129381d05d30ba5eaac7f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/22cc23413577e1b88e3b3a857f951e93a52636a9 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/22cc23413577e1b88e3b3a857f951e93a52636a9 new file mode 100644 index 0000000000..8de6f8f6ea Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/22cc23413577e1b88e3b3a857f951e93a52636a9 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/26c2403717eb4d17fe93653f0225bfd1a07c139e b/fuzz/gnutls_pkcs7_parser_fuzzer.in/26c2403717eb4d17fe93653f0225bfd1a07c139e new file mode 100644 index 0000000000..47f649928f Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/26c2403717eb4d17fe93653f0225bfd1a07c139e differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/279d1aba7408daaae851a4decdbad29149a1e18f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/279d1aba7408daaae851a4decdbad29149a1e18f new file mode 100644 index 0000000000..a7102fd2f1 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/279d1aba7408daaae851a4decdbad29149a1e18f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/286d819451984e6122e7b7edcea3ee878e8d548f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/286d819451984e6122e7b7edcea3ee878e8d548f new file mode 100644 index 0000000000..db1497370c Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/286d819451984e6122e7b7edcea3ee878e8d548f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/2932fad0500cb6e400c1ae122a50b7ee2d130a45 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/2932fad0500cb6e400c1ae122a50b7ee2d130a45 new file mode 100644 index 0000000000..c63240a439 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/2932fad0500cb6e400c1ae122a50b7ee2d130a45 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/2bdc96b34eb13982c67025bb1074bb9baff857fc b/fuzz/gnutls_pkcs7_parser_fuzzer.in/2bdc96b34eb13982c67025bb1074bb9baff857fc new file mode 100644 index 0000000000..65f92c1862 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/2bdc96b34eb13982c67025bb1074bb9baff857fc differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/2d847a5ee0d02e9ce72be0847246d36307805f5f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/2d847a5ee0d02e9ce72be0847246d36307805f5f new file mode 100644 index 0000000000..4944d5068b Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/2d847a5ee0d02e9ce72be0847246d36307805f5f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/2ea706c403726bf86094113ed0bee33320fbfb6c b/fuzz/gnutls_pkcs7_parser_fuzzer.in/2ea706c403726bf86094113ed0bee33320fbfb6c new file mode 100644 index 0000000000..a7fbbd9b2f Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/2ea706c403726bf86094113ed0bee33320fbfb6c differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/30db3dab55a65588b49f8169d0cae316d5cdb477 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/30db3dab55a65588b49f8169d0cae316d5cdb477 new file mode 100644 index 0000000000..e85a2a37dc Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/30db3dab55a65588b49f8169d0cae316d5cdb477 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/31133ee7f2b0868bd5b458d9dba00bb26a0a1a32 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/31133ee7f2b0868bd5b458d9dba00bb26a0a1a32 new file mode 100644 index 0000000000..51cb0e300d Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/31133ee7f2b0868bd5b458d9dba00bb26a0a1a32 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/31372a884175fdeb22a96069512d453202bc132f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/31372a884175fdeb22a96069512d453202bc132f new file mode 100644 index 0000000000..3030fcc19f Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/31372a884175fdeb22a96069512d453202bc132f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/32db93f0fd32bc572cf04f42fd522006f5f225d1 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/32db93f0fd32bc572cf04f42fd522006f5f225d1 new file mode 100644 index 0000000000..442bf02534 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/32db93f0fd32bc572cf04f42fd522006f5f225d1 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/37419e1d303f1b86d2cf86d7755d9d324d04abf9 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/37419e1d303f1b86d2cf86d7755d9d324d04abf9 new file mode 100644 index 0000000000..be2c5e57ab Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/37419e1d303f1b86d2cf86d7755d9d324d04abf9 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/3774405799495bb0e3be6564c3eaae01e455c450 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/3774405799495bb0e3be6564c3eaae01e455c450 new file mode 100644 index 0000000000..87624fe79a Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/3774405799495bb0e3be6564c3eaae01e455c450 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/3f90edfe1212b4b1e267e59ac8f9ee8deffc9498 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/3f90edfe1212b4b1e267e59ac8f9ee8deffc9498 new file mode 100644 index 0000000000..2ac9f65424 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/3f90edfe1212b4b1e267e59ac8f9ee8deffc9498 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/40353ab994da13795984c04c8c380d7b339ace4b b/fuzz/gnutls_pkcs7_parser_fuzzer.in/40353ab994da13795984c04c8c380d7b339ace4b new file mode 100644 index 0000000000..14a896c3ac Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/40353ab994da13795984c04c8c380d7b339ace4b differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/42989dc22a0c14423b5b295f18d5bc549c5dea03 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/42989dc22a0c14423b5b295f18d5bc549c5dea03 new file mode 100644 index 0000000000..176c37c269 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/42989dc22a0c14423b5b295f18d5bc549c5dea03 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/446b5d2fd9c31356582540e8c0e5fd978afb4ee3 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/446b5d2fd9c31356582540e8c0e5fd978afb4ee3 new file mode 100644 index 0000000000..de898846ce Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/446b5d2fd9c31356582540e8c0e5fd978afb4ee3 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/44a4c4da513eea5d1546bc7561e7d5ca6fb2c9b7 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/44a4c4da513eea5d1546bc7561e7d5ca6fb2c9b7 new file mode 100644 index 0000000000..fdf1b68cc5 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/44a4c4da513eea5d1546bc7561e7d5ca6fb2c9b7 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/48ab8435233d793dbc8c96e77e569028a7a6d600 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/48ab8435233d793dbc8c96e77e569028a7a6d600 new file mode 100644 index 0000000000..74ad20f83d Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/48ab8435233d793dbc8c96e77e569028a7a6d600 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/4b7cd61b74296119670e86b37c4f2119cc540f8f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/4b7cd61b74296119670e86b37c4f2119cc540f8f new file mode 100644 index 0000000000..850ed8ede9 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/4b7cd61b74296119670e86b37c4f2119cc540f8f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/4d1ac74cf61692264b0f335eccd88643a824b250 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/4d1ac74cf61692264b0f335eccd88643a824b250 new file mode 100644 index 0000000000..f650eae88a Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/4d1ac74cf61692264b0f335eccd88643a824b250 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/501e4ab27c6810fc52c568ce1e62a2afdf1f0b73 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/501e4ab27c6810fc52c568ce1e62a2afdf1f0b73 new file mode 100644 index 0000000000..e1770e1ab3 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/501e4ab27c6810fc52c568ce1e62a2afdf1f0b73 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/511d71aab330b5a08d270601febd40995e8e23c7 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/511d71aab330b5a08d270601febd40995e8e23c7 new file mode 100644 index 0000000000..dbe490bfa4 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/511d71aab330b5a08d270601febd40995e8e23c7 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/516a419fab465593d859be6fed68be30b6e7e842 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/516a419fab465593d859be6fed68be30b6e7e842 new file mode 100644 index 0000000000..13b5b26e2e Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/516a419fab465593d859be6fed68be30b6e7e842 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/53a3cb4daa2d23a306c6cb3adcc40dd48de68324 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/53a3cb4daa2d23a306c6cb3adcc40dd48de68324 new file mode 100644 index 0000000000..9f48d3dabc Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/53a3cb4daa2d23a306c6cb3adcc40dd48de68324 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/587f1eb31bff66a6caabce639485e77d920b172d b/fuzz/gnutls_pkcs7_parser_fuzzer.in/587f1eb31bff66a6caabce639485e77d920b172d new file mode 100644 index 0000000000..920b767cf8 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/587f1eb31bff66a6caabce639485e77d920b172d differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/5a7e7e85e0487685609741eef373bba653c04492 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/5a7e7e85e0487685609741eef373bba653c04492 new file mode 100644 index 0000000000..c56d781acc Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/5a7e7e85e0487685609741eef373bba653c04492 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/5bc499ba2ae964d3003639662ec4337c92d02f8e b/fuzz/gnutls_pkcs7_parser_fuzzer.in/5bc499ba2ae964d3003639662ec4337c92d02f8e new file mode 100644 index 0000000000..1c8196618f Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/5bc499ba2ae964d3003639662ec4337c92d02f8e differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/5c0135339bbba69530394d7057b919891c0ccfa0 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/5c0135339bbba69530394d7057b919891c0ccfa0 new file mode 100644 index 0000000000..f017025d54 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/5c0135339bbba69530394d7057b919891c0ccfa0 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/6065d2472cb2f87b8234ba5e0019836f9cce7868 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/6065d2472cb2f87b8234ba5e0019836f9cce7868 new file mode 100644 index 0000000000..cb9d58b18c Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/6065d2472cb2f87b8234ba5e0019836f9cce7868 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/60fce575fae1c4db9fbfd921db2b850707fcb07e b/fuzz/gnutls_pkcs7_parser_fuzzer.in/60fce575fae1c4db9fbfd921db2b850707fcb07e new file mode 100644 index 0000000000..9f8dc7d51c Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/60fce575fae1c4db9fbfd921db2b850707fcb07e differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/62de1fd9b7dbe68937d52f2097e795c7ad93630a b/fuzz/gnutls_pkcs7_parser_fuzzer.in/62de1fd9b7dbe68937d52f2097e795c7ad93630a new file mode 100644 index 0000000000..72b9437925 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/62de1fd9b7dbe68937d52f2097e795c7ad93630a differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/6458401ae23a0b0f5ef4644e8634ac7bd110b245 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/6458401ae23a0b0f5ef4644e8634ac7bd110b245 new file mode 100644 index 0000000000..8f50bb3976 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/6458401ae23a0b0f5ef4644e8634ac7bd110b245 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/69ec4160f65840ea1e25c4adf03a145fe1088a02 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/69ec4160f65840ea1e25c4adf03a145fe1088a02 new file mode 100644 index 0000000000..3cfd9fbea1 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/69ec4160f65840ea1e25c4adf03a145fe1088a02 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/6ad3e59e8cf01081611a9a223bff3323af5ab152 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/6ad3e59e8cf01081611a9a223bff3323af5ab152 new file mode 100644 index 0000000000..9d02772f75 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/6ad3e59e8cf01081611a9a223bff3323af5ab152 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/6afe52baa491acad4c476066bd71dde5bbc50f91 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/6afe52baa491acad4c476066bd71dde5bbc50f91 new file mode 100644 index 0000000000..a1f61e00d8 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/6afe52baa491acad4c476066bd71dde5bbc50f91 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/6b43ce019983f745f509366ee919ab8eead581e1 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/6b43ce019983f745f509366ee919ab8eead581e1 new file mode 100644 index 0000000000..59f02299a6 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/6b43ce019983f745f509366ee919ab8eead581e1 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/736736c47477316482d5b53a892484c4c6a08e6d b/fuzz/gnutls_pkcs7_parser_fuzzer.in/736736c47477316482d5b53a892484c4c6a08e6d new file mode 100644 index 0000000000..cf28325636 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/736736c47477316482d5b53a892484c4c6a08e6d differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/73e30982d888df489447885dacc03c7ce5a932d4 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/73e30982d888df489447885dacc03c7ce5a932d4 new file mode 100644 index 0000000000..b7ef006d6c Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/73e30982d888df489447885dacc03c7ce5a932d4 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/78c8289220423940722eeb2dd49be3bf9420602b b/fuzz/gnutls_pkcs7_parser_fuzzer.in/78c8289220423940722eeb2dd49be3bf9420602b new file mode 100644 index 0000000000..21f783b9ab Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/78c8289220423940722eeb2dd49be3bf9420602b differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/79c96c55ccf8d51e717220302b658e561ae4abc7 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/79c96c55ccf8d51e717220302b658e561ae4abc7 new file mode 100644 index 0000000000..0452912187 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/79c96c55ccf8d51e717220302b658e561ae4abc7 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/79ccd9b63d4eaaaa29f1cc19abbc1969bdeb69b9 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/79ccd9b63d4eaaaa29f1cc19abbc1969bdeb69b9 new file mode 100644 index 0000000000..3c38880e6a Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/79ccd9b63d4eaaaa29f1cc19abbc1969bdeb69b9 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/7a69ea9497770ec5d965b569ae7d7b70dce2a57a b/fuzz/gnutls_pkcs7_parser_fuzzer.in/7a69ea9497770ec5d965b569ae7d7b70dce2a57a new file mode 100644 index 0000000000..4ab415fd2e Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/7a69ea9497770ec5d965b569ae7d7b70dce2a57a differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/7e3c18c69fbd848aace45d911aa122f49bd9600a b/fuzz/gnutls_pkcs7_parser_fuzzer.in/7e3c18c69fbd848aace45d911aa122f49bd9600a new file mode 100644 index 0000000000..570121b9dd Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/7e3c18c69fbd848aace45d911aa122f49bd9600a differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/7ebeb4c91cfcef3a0a562b3acea42e4470047ab5 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/7ebeb4c91cfcef3a0a562b3acea42e4470047ab5 new file mode 100644 index 0000000000..71363daa12 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/7ebeb4c91cfcef3a0a562b3acea42e4470047ab5 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/80741d6beb99bdb61fc5bf2bf02eca7642890077 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/80741d6beb99bdb61fc5bf2bf02eca7642890077 new file mode 100644 index 0000000000..456cc1005c Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/80741d6beb99bdb61fc5bf2bf02eca7642890077 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/80b02484e2ff722bedc42a24013681ae09e7feed b/fuzz/gnutls_pkcs7_parser_fuzzer.in/80b02484e2ff722bedc42a24013681ae09e7feed new file mode 100644 index 0000000000..4a4111494c Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/80b02484e2ff722bedc42a24013681ae09e7feed differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/84a438153661be87f7009ee9eaae40fe8adfd324 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/84a438153661be87f7009ee9eaae40fe8adfd324 new file mode 100644 index 0000000000..965d0925c7 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/84a438153661be87f7009ee9eaae40fe8adfd324 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/8528c4628d398b7369ba977a0cf15383b31aff53 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/8528c4628d398b7369ba977a0cf15383b31aff53 new file mode 100644 index 0000000000..3969787d14 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/8528c4628d398b7369ba977a0cf15383b31aff53 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/8741d116615a51c2e7d5660889d08ce3a391b8e4 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/8741d116615a51c2e7d5660889d08ce3a391b8e4 new file mode 100644 index 0000000000..d2ef03cf09 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/8741d116615a51c2e7d5660889d08ce3a391b8e4 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/8edc320a4e2530577ed357174bec680c9a7f17e1 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/8edc320a4e2530577ed357174bec680c9a7f17e1 new file mode 100644 index 0000000000..f5044a9453 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/8edc320a4e2530577ed357174bec680c9a7f17e1 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/8fee466a52678fdcfd8614e76f50febdd8295904 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/8fee466a52678fdcfd8614e76f50febdd8295904 new file mode 100644 index 0000000000..1120da6374 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/8fee466a52678fdcfd8614e76f50febdd8295904 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/9294dd95c75dc31083c4320e981c70d741cc0e55 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9294dd95c75dc31083c4320e981c70d741cc0e55 new file mode 100644 index 0000000000..4cc2337c78 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9294dd95c75dc31083c4320e981c70d741cc0e55 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/92f16c7ee36fe50e602257d595034ef18710f266 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/92f16c7ee36fe50e602257d595034ef18710f266 new file mode 100644 index 0000000000..a3b159d742 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/92f16c7ee36fe50e602257d595034ef18710f266 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/962a31be872b2903e5951abc926c44232e580dc4 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/962a31be872b2903e5951abc926c44232e580dc4 new file mode 100644 index 0000000000..9fa40e6867 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/962a31be872b2903e5951abc926c44232e580dc4 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/991742d4aec2eb380380641c9a74aaaaffdf8b85 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/991742d4aec2eb380380641c9a74aaaaffdf8b85 new file mode 100644 index 0000000000..278bf072fd Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/991742d4aec2eb380380641c9a74aaaaffdf8b85 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/9a47ed4cb79564955a805eb8c38d8060a2633fa9 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9a47ed4cb79564955a805eb8c38d8060a2633fa9 new file mode 100644 index 0000000000..2bbefa1691 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9a47ed4cb79564955a805eb8c38d8060a2633fa9 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/9b1f89d1b1fcac2cb202e45803645a9e6a27004a b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9b1f89d1b1fcac2cb202e45803645a9e6a27004a new file mode 100644 index 0000000000..2a529a4b48 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9b1f89d1b1fcac2cb202e45803645a9e6a27004a differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/9b9fe1b61d4af53b0551f15667a9998d1dbb2831 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9b9fe1b61d4af53b0551f15667a9998d1dbb2831 new file mode 100644 index 0000000000..148785816a Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9b9fe1b61d4af53b0551f15667a9998d1dbb2831 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/9ca0925da9b8237234c4e03e99c3b55398184c02 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9ca0925da9b8237234c4e03e99c3b55398184c02 new file mode 100644 index 0000000000..ecbc1af8c5 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9ca0925da9b8237234c4e03e99c3b55398184c02 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/9d7ad5e440f7935b1f3cd33de8ffaa411cb4f64f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9d7ad5e440f7935b1f3cd33de8ffaa411cb4f64f new file mode 100644 index 0000000000..b6fcd64da9 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9d7ad5e440f7935b1f3cd33de8ffaa411cb4f64f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/9db83b413d806e7fc09da30c16f903467691384f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9db83b413d806e7fc09da30c16f903467691384f new file mode 100644 index 0000000000..d33fafd00c Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9db83b413d806e7fc09da30c16f903467691384f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/9f755ad63fb6e3600a031ccfc470a468e2d399d4 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9f755ad63fb6e3600a031ccfc470a468e2d399d4 new file mode 100644 index 0000000000..b89d85bb38 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9f755ad63fb6e3600a031ccfc470a468e2d399d4 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/9fe6b0dcd0453dc043909ac104ea87503a5b966b b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9fe6b0dcd0453dc043909ac104ea87503a5b966b new file mode 100644 index 0000000000..1f429538b3 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/9fe6b0dcd0453dc043909ac104ea87503a5b966b differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/a2ca3f96b67f806e9e8d68aff2d05eab6fec11db b/fuzz/gnutls_pkcs7_parser_fuzzer.in/a2ca3f96b67f806e9e8d68aff2d05eab6fec11db new file mode 100644 index 0000000000..1e3e20e509 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/a2ca3f96b67f806e9e8d68aff2d05eab6fec11db differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/a5fb65eb2bb5513ff0b6eb7c18397fdf5fb60da3 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/a5fb65eb2bb5513ff0b6eb7c18397fdf5fb60da3 new file mode 100644 index 0000000000..36e14e7835 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/a5fb65eb2bb5513ff0b6eb7c18397fdf5fb60da3 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/a6450db53ad9b51040110d4ed89c51890bbc12f0 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/a6450db53ad9b51040110d4ed89c51890bbc12f0 new file mode 100644 index 0000000000..a7209f5259 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/a6450db53ad9b51040110d4ed89c51890bbc12f0 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/a6a122062544e1e3880ee755c58fde4b99c5dba3 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/a6a122062544e1e3880ee755c58fde4b99c5dba3 new file mode 100644 index 0000000000..ed0d149ac5 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/a6a122062544e1e3880ee755c58fde4b99c5dba3 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/aba68c903b41ee2cf63bc9dd51a1fa16d0d19220 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/aba68c903b41ee2cf63bc9dd51a1fa16d0d19220 new file mode 100644 index 0000000000..d88bea11f7 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/aba68c903b41ee2cf63bc9dd51a1fa16d0d19220 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/ace195b78c2efe6b0c90809befe32bbb050d1677 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/ace195b78c2efe6b0c90809befe32bbb050d1677 new file mode 100644 index 0000000000..3e77a069a4 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/ace195b78c2efe6b0c90809befe32bbb050d1677 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/ae4fda57a54e5eef7f578b73d579b20ef371deaa b/fuzz/gnutls_pkcs7_parser_fuzzer.in/ae4fda57a54e5eef7f578b73d579b20ef371deaa new file mode 100644 index 0000000000..5a4dce973a Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/ae4fda57a54e5eef7f578b73d579b20ef371deaa differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/b0f0bc9182ae1c71a0c83ba418eda1af19277eaa b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b0f0bc9182ae1c71a0c83ba418eda1af19277eaa new file mode 100644 index 0000000000..ea3b89c0b3 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b0f0bc9182ae1c71a0c83ba418eda1af19277eaa differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/b13437ea6d13c29642913ae62544979605e8f532 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b13437ea6d13c29642913ae62544979605e8f532 new file mode 100644 index 0000000000..23f26bf83b Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b13437ea6d13c29642913ae62544979605e8f532 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/b19b983fa095e63af16b26963633713b5a3cbfaa b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b19b983fa095e63af16b26963633713b5a3cbfaa new file mode 100644 index 0000000000..83e300663e --- /dev/null +++ b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b19b983fa095e63af16b26963633713b5a3cbfaa @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/b5d932a0fef3464404b7f16d5b8e7a68f6366b3b b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b5d932a0fef3464404b7f16d5b8e7a68f6366b3b new file mode 100644 index 0000000000..5244e55f7d Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b5d932a0fef3464404b7f16d5b8e7a68f6366b3b differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/b629054b1a97333a2fe8bb8034b93348198b3f3f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b629054b1a97333a2fe8bb8034b93348198b3f3f new file mode 100644 index 0000000000..61054c1806 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b629054b1a97333a2fe8bb8034b93348198b3f3f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/b78fbb191d94f4f5ebc4ca59f189381a7c2cde41 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b78fbb191d94f4f5ebc4ca59f189381a7c2cde41 new file mode 100644 index 0000000000..139340ce41 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b78fbb191d94f4f5ebc4ca59f189381a7c2cde41 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/b858cb282617fb0956d960215c8e84d1ccf909c6 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b858cb282617fb0956d960215c8e84d1ccf909c6 new file mode 100644 index 0000000000..0519ecba6e --- /dev/null +++ b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b858cb282617fb0956d960215c8e84d1ccf909c6 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/b8f5130c26fbbeca056a7d16eccc537bb778ae27 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b8f5130c26fbbeca056a7d16eccc537bb778ae27 new file mode 100644 index 0000000000..5d6eefb4db Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b8f5130c26fbbeca056a7d16eccc537bb778ae27 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/b9b44fdd7010114bf9d470ee74764f29c30e899b b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b9b44fdd7010114bf9d470ee74764f29c30e899b new file mode 100644 index 0000000000..754cc3136a Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b9b44fdd7010114bf9d470ee74764f29c30e899b differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/b9bf71fd56b6805ae87d12bec38b6a5774e3d6ee b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b9bf71fd56b6805ae87d12bec38b6a5774e3d6ee new file mode 100644 index 0000000000..54fcee7c0f Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/b9bf71fd56b6805ae87d12bec38b6a5774e3d6ee differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/bd383251a4f658f1734b2e9a49b4d7e8e98cdf0f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/bd383251a4f658f1734b2e9a49b4d7e8e98cdf0f new file mode 100644 index 0000000000..b5cdb705c7 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/bd383251a4f658f1734b2e9a49b4d7e8e98cdf0f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/c0b6cd402992896a40947b3100c59ae8b8f3d662 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c0b6cd402992896a40947b3100c59ae8b8f3d662 new file mode 100644 index 0000000000..956f0bcf21 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c0b6cd402992896a40947b3100c59ae8b8f3d662 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/c1b45af4593ef9ac9f82585ebfe551b7c538b153 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c1b45af4593ef9ac9f82585ebfe551b7c538b153 new file mode 100644 index 0000000000..203f734607 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c1b45af4593ef9ac9f82585ebfe551b7c538b153 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/c2aca547951760417c5fca2a33be0185d730f278 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c2aca547951760417c5fca2a33be0185d730f278 new file mode 100644 index 0000000000..36806cc816 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c2aca547951760417c5fca2a33be0185d730f278 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/c33c152fd575ad5ae7d32aac7e342d3008718341 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c33c152fd575ad5ae7d32aac7e342d3008718341 new file mode 100644 index 0000000000..4b6406b4b2 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c33c152fd575ad5ae7d32aac7e342d3008718341 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/c5938dfb856727691baf7a1fcc9fb92876b1fcdb b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c5938dfb856727691baf7a1fcc9fb92876b1fcdb new file mode 100644 index 0000000000..3f54c64e30 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c5938dfb856727691baf7a1fcc9fb92876b1fcdb differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/c8f58d999f1436ee1e3940cfd7297cafa65dee7f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c8f58d999f1436ee1e3940cfd7297cafa65dee7f new file mode 100644 index 0000000000..686383b532 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c8f58d999f1436ee1e3940cfd7297cafa65dee7f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/c9b8406eaf47d44638aa87e22ae4b82fcce911e0 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c9b8406eaf47d44638aa87e22ae4b82fcce911e0 new file mode 100644 index 0000000000..6e0b09f60f Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/c9b8406eaf47d44638aa87e22ae4b82fcce911e0 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/caaab6826405bc39a74a34452e1c64120af96da4 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/caaab6826405bc39a74a34452e1c64120af96da4 new file mode 100644 index 0000000000..98d6d0a882 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/caaab6826405bc39a74a34452e1c64120af96da4 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/cb4ecdc576fef6380924c0b08eee7ff8a758e0e6 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/cb4ecdc576fef6380924c0b08eee7ff8a758e0e6 new file mode 100644 index 0000000000..4dc0e93576 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/cb4ecdc576fef6380924c0b08eee7ff8a758e0e6 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/cf18e9c71af803d27f19dc57a73a4c8e298e5b38 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/cf18e9c71af803d27f19dc57a73a4c8e298e5b38 new file mode 100644 index 0000000000..c8fd995ba3 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/cf18e9c71af803d27f19dc57a73a4c8e298e5b38 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/d133267e430ab0b952e03e6fa37197fcaef77e53 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/d133267e430ab0b952e03e6fa37197fcaef77e53 new file mode 100644 index 0000000000..4926f7d874 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/d133267e430ab0b952e03e6fa37197fcaef77e53 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/d2deaa6c7f0d024340fceee592f171f3552e9e42 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/d2deaa6c7f0d024340fceee592f171f3552e9e42 new file mode 100644 index 0000000000..c02ffed177 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/d2deaa6c7f0d024340fceee592f171f3552e9e42 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/d3cbef15b5594dbc62c76362c6a26640b5834e73 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/d3cbef15b5594dbc62c76362c6a26640b5834e73 new file mode 100644 index 0000000000..1c6d9829d3 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/d3cbef15b5594dbc62c76362c6a26640b5834e73 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/d670e02f3786a005ca4571ede1d62ffe5b328362 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/d670e02f3786a005ca4571ede1d62ffe5b328362 new file mode 100644 index 0000000000..2a9e0a8c92 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/d670e02f3786a005ca4571ede1d62ffe5b328362 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/d7a9a18eec89d0984cbb44554a4211c16802810d b/fuzz/gnutls_pkcs7_parser_fuzzer.in/d7a9a18eec89d0984cbb44554a4211c16802810d new file mode 100644 index 0000000000..7f0933671d Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/d7a9a18eec89d0984cbb44554a4211c16802810d differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/daeb480a11a80d0402a9e9ce5c69a7c809fdc568 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/daeb480a11a80d0402a9e9ce5c69a7c809fdc568 new file mode 100644 index 0000000000..63b46bad3b Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/daeb480a11a80d0402a9e9ce5c69a7c809fdc568 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/de04d0a8f5571d6848d17075eac3864ed595123a b/fuzz/gnutls_pkcs7_parser_fuzzer.in/de04d0a8f5571d6848d17075eac3864ed595123a new file mode 100644 index 0000000000..03303043df Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/de04d0a8f5571d6848d17075eac3864ed595123a differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/de2a036841537afce466f2d67e460d23b95b42c3 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/de2a036841537afce466f2d67e460d23b95b42c3 new file mode 100644 index 0000000000..be4d54e965 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/de2a036841537afce466f2d67e460d23b95b42c3 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/de6b0ac17082ebb5d0eaa13ee47af809274dca21 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/de6b0ac17082ebb5d0eaa13ee47af809274dca21 new file mode 100644 index 0000000000..518ac44d8d Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/de6b0ac17082ebb5d0eaa13ee47af809274dca21 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/df166f43544f6ac00b875345193fbadab565e61e b/fuzz/gnutls_pkcs7_parser_fuzzer.in/df166f43544f6ac00b875345193fbadab565e61e new file mode 100644 index 0000000000..33447984ef Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/df166f43544f6ac00b875345193fbadab565e61e differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/df93fe9b7e6d3a55b74206c815c6d73ccf8c6e55 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/df93fe9b7e6d3a55b74206c815c6d73ccf8c6e55 new file mode 100644 index 0000000000..dae556d57a Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/df93fe9b7e6d3a55b74206c815c6d73ccf8c6e55 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/e2f4547b95439fa67cf68f6b66954b73dfb3a472 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e2f4547b95439fa67cf68f6b66954b73dfb3a472 new file mode 100644 index 0000000000..80c2fb65db Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e2f4547b95439fa67cf68f6b66954b73dfb3a472 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/e3657bdbea427918258ee1d5d6258b7e2b6df21e b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e3657bdbea427918258ee1d5d6258b7e2b6df21e new file mode 100644 index 0000000000..f681a131ad Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e3657bdbea427918258ee1d5d6258b7e2b6df21e differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/e40e9b2059700d539b280f9a4d54567f507dc97f b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e40e9b2059700d539b280f9a4d54567f507dc97f new file mode 100644 index 0000000000..0e3c1bfb6b Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e40e9b2059700d539b280f9a4d54567f507dc97f differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/e7a67bc2556af3589392bd60c74761d566003866 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e7a67bc2556af3589392bd60c74761d566003866 new file mode 100644 index 0000000000..e92af8dc95 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e7a67bc2556af3589392bd60c74761d566003866 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/e87dcad472f028647865ff6c7f36bdf4c0ac0abb b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e87dcad472f028647865ff6c7f36bdf4c0ac0abb new file mode 100644 index 0000000000..3568b1a20d Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e87dcad472f028647865ff6c7f36bdf4c0ac0abb differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/e959ca89fb57b3d83b2341d31cd8c9cd0ad28c08 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e959ca89fb57b3d83b2341d31cd8c9cd0ad28c08 new file mode 100644 index 0000000000..2f805575d5 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e959ca89fb57b3d83b2341d31cd8c9cd0ad28c08 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/e9b6b7f030a41cb2acb0e3c3bb398281d425e609 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e9b6b7f030a41cb2acb0e3c3bb398281d425e609 new file mode 100644 index 0000000000..d635ce2cc3 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/e9b6b7f030a41cb2acb0e3c3bb398281d425e609 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/eaa0a88e67d2b587a58f94ccb2f964363ff6a44b b/fuzz/gnutls_pkcs7_parser_fuzzer.in/eaa0a88e67d2b587a58f94ccb2f964363ff6a44b new file mode 100644 index 0000000000..c19e884d49 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/eaa0a88e67d2b587a58f94ccb2f964363ff6a44b differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/edbb1a12c806c4c1b6de987a588d8d7478bd5d00 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/edbb1a12c806c4c1b6de987a588d8d7478bd5d00 new file mode 100644 index 0000000000..f46f25d7cc Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/edbb1a12c806c4c1b6de987a588d8d7478bd5d00 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/ee02610674f89a4fd3a538f25ee027de0d2456d1 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/ee02610674f89a4fd3a538f25ee027de0d2456d1 new file mode 100644 index 0000000000..bfa4b7e506 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/ee02610674f89a4fd3a538f25ee027de0d2456d1 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/f043d2cfc1d543df3904c1cd820cc0312b8fec2e b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f043d2cfc1d543df3904c1cd820cc0312b8fec2e new file mode 100644 index 0000000000..1414a654c9 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f043d2cfc1d543df3904c1cd820cc0312b8fec2e differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/f058fe4edf5e22833b3570cbfd8fea4889a94a28 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f058fe4edf5e22833b3570cbfd8fea4889a94a28 new file mode 100644 index 0000000000..370520953b Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f058fe4edf5e22833b3570cbfd8fea4889a94a28 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/f59b221feeaabf27c49e5b546cb1cf99e8a35171 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f59b221feeaabf27c49e5b546cb1cf99e8a35171 new file mode 100644 index 0000000000..b89dedf874 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f59b221feeaabf27c49e5b546cb1cf99e8a35171 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/f62a8c5e536f3963e40df78f268ab3b405973a09 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f62a8c5e536f3963e40df78f268ab3b405973a09 new file mode 100644 index 0000000000..b7da47f335 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f62a8c5e536f3963e40df78f268ab3b405973a09 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/f6549ce71764f5d807969fadf5ec962e8569ee2b b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f6549ce71764f5d807969fadf5ec962e8569ee2b new file mode 100644 index 0000000000..864d84f8c2 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f6549ce71764f5d807969fadf5ec962e8569ee2b differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/f6ea8d387da2965b7acfeb3c72ba231f7b5c2ca8 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f6ea8d387da2965b7acfeb3c72ba231f7b5c2ca8 new file mode 100644 index 0000000000..43d0da5070 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/f6ea8d387da2965b7acfeb3c72ba231f7b5c2ca8 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/fab60f5057842621075b73e22b2f0dbd0caedebf b/fuzz/gnutls_pkcs7_parser_fuzzer.in/fab60f5057842621075b73e22b2f0dbd0caedebf new file mode 100644 index 0000000000..2558f1aaf4 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/fab60f5057842621075b73e22b2f0dbd0caedebf differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/fc73012b77774ad8f1c54fc721195dff1571a190 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/fc73012b77774ad8f1c54fc721195dff1571a190 new file mode 100644 index 0000000000..8eba9e6472 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/fc73012b77774ad8f1c54fc721195dff1571a190 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/fed888903b0e9af3d95b1904dbddf6cc88fdcea2 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/fed888903b0e9af3d95b1904dbddf6cc88fdcea2 new file mode 100644 index 0000000000..c6979804b8 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/fed888903b0e9af3d95b1904dbddf6cc88fdcea2 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/ff88eff557c3a77d123f2d839c7bb5894d549c38 b/fuzz/gnutls_pkcs7_parser_fuzzer.in/ff88eff557c3a77d123f2d839c7bb5894d549c38 new file mode 100644 index 0000000000..edd171c219 Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/ff88eff557c3a77d123f2d839c7bb5894d549c38 differ diff --git a/fuzz/gnutls_pkcs7_parser_fuzzer.in/ffbe3d975b3dc72740c629d71c4fde8e6765957a b/fuzz/gnutls_pkcs7_parser_fuzzer.in/ffbe3d975b3dc72740c629d71c4fde8e6765957a new file mode 100644 index 0000000000..cbccad6fcd Binary files /dev/null and b/fuzz/gnutls_pkcs7_parser_fuzzer.in/ffbe3d975b3dc72740c629d71c4fde8e6765957a differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.c b/fuzz/gnutls_pkcs8_key_parser_fuzzer.c new file mode 100644 index 0000000000..982b485c76 --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.c @@ -0,0 +1,56 @@ +/* +# Copyright 2016 Nikos Mavrogiannopoulos +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include + +#include +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw; + gnutls_x509_privkey_t key; + gnutls_datum_t out; + int ret; + + raw.data = (unsigned char *)data; + raw.size = size; + + ret = gnutls_x509_privkey_init(&key); + assert(ret >= 0); + + ret = gnutls_x509_privkey_import_pkcs8(key, &raw, GNUTLS_X509_FMT_DER, "password", 0); + if (ret < 0) { + goto cleanup; + } + + /* If properly loaded, try to re-export */ + ret = gnutls_x509_privkey_export2(key, GNUTLS_X509_FMT_DER, &out); + if (ret < 0) { + goto cleanup; + } + + gnutls_free(out.data); + +cleanup: + gnutls_x509_privkey_deinit(key); + return 0; +} diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/01767aef212c7e5eb0fa4d89eaa77433ab3fd77b b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/01767aef212c7e5eb0fa4d89eaa77433ab3fd77b new file mode 100644 index 0000000000..992134ee59 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/01767aef212c7e5eb0fa4d89eaa77433ab3fd77b differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/0f60f429bb410fd9eb6fe229ef66b5c707d343d3 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/0f60f429bb410fd9eb6fe229ef66b5c707d343d3 new file mode 100644 index 0000000000..700f37813d Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/0f60f429bb410fd9eb6fe229ef66b5c707d343d3 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/12636d41aac0e164ebdafe649853db11af2163b7 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/12636d41aac0e164ebdafe649853db11af2163b7 new file mode 100644 index 0000000000..cf695a57b7 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/12636d41aac0e164ebdafe649853db11af2163b7 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/145d4b2b12a920a68263b25e7d5d59d0a8bbf28f b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/145d4b2b12a920a68263b25e7d5d59d0a8bbf28f new file mode 100644 index 0000000000..7c0d0c48ba Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/145d4b2b12a920a68263b25e7d5d59d0a8bbf28f differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/14968f6a86b62c0a556b62d4b3f1ec9ee152495e b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/14968f6a86b62c0a556b62d4b3f1ec9ee152495e new file mode 100644 index 0000000000..24b953cca4 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/14968f6a86b62c0a556b62d4b3f1ec9ee152495e differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/169b8637f31d927e64c540bb7ac73b0a184deb3b b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/169b8637f31d927e64c540bb7ac73b0a184deb3b new file mode 100644 index 0000000000..8160edafc0 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/169b8637f31d927e64c540bb7ac73b0a184deb3b differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/20369b3ada89ef467d14c012c8e55b560f24bfcc b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/20369b3ada89ef467d14c012c8e55b560f24bfcc new file mode 100644 index 0000000000..e3dbe5d3ef Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/20369b3ada89ef467d14c012c8e55b560f24bfcc differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/23b8efa10aa2b7e0880e1a32a6cdf072ce06507f b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/23b8efa10aa2b7e0880e1a32a6cdf072ce06507f new file mode 100644 index 0000000000..132259cc2b Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/23b8efa10aa2b7e0880e1a32a6cdf072ce06507f differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/23fafe009f44e958fb2834e255c4fcc30137ec5b b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/23fafe009f44e958fb2834e255c4fcc30137ec5b new file mode 100644 index 0000000000..4edc646565 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/23fafe009f44e958fb2834e255c4fcc30137ec5b differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/252b902c44d810cdf4d7ff55512528c27a53720b b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/252b902c44d810cdf4d7ff55512528c27a53720b new file mode 100644 index 0000000000..57f1fa0e24 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/252b902c44d810cdf4d7ff55512528c27a53720b differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/26bd4e777a49aea07808783d4bd6d6875cae067d b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/26bd4e777a49aea07808783d4bd6d6875cae067d new file mode 100644 index 0000000000..0766ca48d0 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/26bd4e777a49aea07808783d4bd6d6875cae067d differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2962ce95986e161c60be2d296bbddefa0075ad14 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2962ce95986e161c60be2d296bbddefa0075ad14 new file mode 100644 index 0000000000..256b26bee4 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2962ce95986e161c60be2d296bbddefa0075ad14 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2a871e01cba97eb425f6b42440821e75ad61f069 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2a871e01cba97eb425f6b42440821e75ad61f069 new file mode 100644 index 0000000000..83d8c594ee Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2a871e01cba97eb425f6b42440821e75ad61f069 differ diff --git a/devel/fuzz/gnutls_pkcs8_key_parser.in/key-dsa.p8 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2ad7ddba409ad6c92e18b049b9da5e438512c180 similarity index 100% rename from devel/fuzz/gnutls_pkcs8_key_parser.in/key-dsa.p8 rename to fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2ad7ddba409ad6c92e18b049b9da5e438512c180 diff --git a/devel/fuzz/gnutls_pkcs8_key_parser.in/key-ecc.p8 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2ca044e6b9c6b5c68a0e159216d502c0fd5188d4 similarity index 100% rename from devel/fuzz/gnutls_pkcs8_key_parser.in/key-ecc.p8 rename to fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2ca044e6b9c6b5c68a0e159216d502c0fd5188d4 diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2f6de9f12b6e7a05466784068c1f3b8f1f03a769 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2f6de9f12b6e7a05466784068c1f3b8f1f03a769 new file mode 100644 index 0000000000..d8573c3d1c Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/2f6de9f12b6e7a05466784068c1f3b8f1f03a769 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/30753812d4ba520bad25a0cb8b11bf72b8c33adc b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/30753812d4ba520bad25a0cb8b11bf72b8c33adc new file mode 100644 index 0000000000..7bbce231ea Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/30753812d4ba520bad25a0cb8b11bf72b8c33adc differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/30ada575f67cc648d1fcfb9c142c3ab3490a7db7 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/30ada575f67cc648d1fcfb9c142c3ab3490a7db7 new file mode 100644 index 0000000000..f75a91ab48 --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/30ada575f67cc648d1fcfb9c142c3ab3490a7db7 @@ -0,0 +1,2 @@ +0'0 +*H 0  x$$0!0 \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/341c2c665a2d1e71797496713a7b40289ee5a707 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/341c2c665a2d1e71797496713a7b40289ee5a707 new file mode 100644 index 0000000000..873f1ff535 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/341c2c665a2d1e71797496713a7b40289ee5a707 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/35edef122a6cacc3796989b07d2b20ef1ff08164 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/35edef122a6cacc3796989b07d2b20ef1ff08164 new file mode 100644 index 0000000000..fe7e4c6e5e Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/35edef122a6cacc3796989b07d2b20ef1ff08164 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/48762d30a7e905cec11a1989f204a2b4ebc3e005 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/48762d30a7e905cec11a1989f204a2b4ebc3e005 new file mode 100644 index 0000000000..83db5d2edb Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/48762d30a7e905cec11a1989f204a2b4ebc3e005 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/4b33790b8f739639aa8867f55245a5152889738a b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/4b33790b8f739639aa8867f55245a5152889738a new file mode 100644 index 0000000000..4389c9cc4a Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/4b33790b8f739639aa8867f55245a5152889738a differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/4b3a734760892f5f5e0d843c04b0bc068974c405 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/4b3a734760892f5f5e0d843c04b0bc068974c405 new file mode 100644 index 0000000000..1503c76ac2 --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/4b3a734760892f5f5e0d843c04b0bc068974c405 @@ -0,0 +1,2 @@ +00 +*H  0 $ x ? \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/4f2bd9017ef5a6dd60f9eb83d8a45eb46d738320 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/4f2bd9017ef5a6dd60f9eb83d8a45eb46d738320 new file mode 100644 index 0000000000..c9e8cb84f7 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/4f2bd9017ef5a6dd60f9eb83d8a45eb46d738320 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/502e897dd464ccc44b6d02d0826ac38a9f942f7f b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/502e897dd464ccc44b6d02d0826ac38a9f942f7f new file mode 100644 index 0000000000..c9c6f72133 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/502e897dd464ccc44b6d02d0826ac38a9f942f7f differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/514e4d503c26e7583ff6ddecda121b39bd6afd86 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/514e4d503c26e7583ff6ddecda121b39bd6afd86 new file mode 100644 index 0000000000..1358674298 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/514e4d503c26e7583ff6ddecda121b39bd6afd86 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/51ee29bf7c6e84a59db1762a9083501964fa9d04 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/51ee29bf7c6e84a59db1762a9083501964fa9d04 new file mode 100644 index 0000000000..c327471b30 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/51ee29bf7c6e84a59db1762a9083501964fa9d04 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/5952e649bd664ebe1a7142f645ab6a9007103ef3 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/5952e649bd664ebe1a7142f645ab6a9007103ef3 new file mode 100644 index 0000000000..cc1ca473c6 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/5952e649bd664ebe1a7142f645ab6a9007103ef3 differ diff --git a/devel/fuzz/gnutls_pkcs8_key_parser.in/key-rsa.p8 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/5e56e574afbd5206b3f06dbfd94c5a1e6af93de1 similarity index 100% rename from devel/fuzz/gnutls_pkcs8_key_parser.in/key-rsa.p8 rename to fuzz/gnutls_pkcs8_key_parser_fuzzer.in/5e56e574afbd5206b3f06dbfd94c5a1e6af93de1 diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/60e170cfe684a7933bd0ba06059f0bef953a4f19 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/60e170cfe684a7933bd0ba06059f0bef953a4f19 new file mode 100644 index 0000000000..628077b323 --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/60e170cfe684a7933bd0ba06059f0bef953a4f19 @@ -0,0 +1,2 @@ +00J *H  0=0% *H  0{7"mQ*]0*H oY:|l9qn'r٨+2 155 "y%*bSBrri~9/s +)VY:|l9qn'E٨+1 155 "y<@?ㄎ.r r&6- \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/676fd4e6c294ac33bd9a24bf0f775d64f6c38238 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/676fd4e6c294ac33bd9a24bf0f775d64f6c38238 new file mode 100644 index 0000000000..c81c59cd6d Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/676fd4e6c294ac33bd9a24bf0f775d64f6c38238 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/6b27464674c9db8da586e3b62962817403f303fd b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/6b27464674c9db8da586e3b62962817403f303fd new file mode 100644 index 0000000000..ed14d78610 --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/6b27464674c9db8da586e3b62962817403f303fd @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/7163d5b213dc54336c81a1c94b484c586bcafaaf b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/7163d5b213dc54336c81a1c94b484c586bcafaaf new file mode 100644 index 0000000000..954d2b4bcc Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/7163d5b213dc54336c81a1c94b484c586bcafaaf differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/735d24eb8742f88d4174a79949f63dc970cec057 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/735d24eb8742f88d4174a79949f63dc970cec057 new file mode 100644 index 0000000000..71984d43ba Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/735d24eb8742f88d4174a79949f63dc970cec057 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/74cecfaafb5c0e8824a466d86646aa2d5c1dea2b b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/74cecfaafb5c0e8824a466d86646aa2d5c1dea2b new file mode 100644 index 0000000000..5a553b1d41 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/74cecfaafb5c0e8824a466d86646aa2d5c1dea2b differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/77069a06018f180f044aae55c67398d8ba369976 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/77069a06018f180f044aae55c67398d8ba369976 new file mode 100644 index 0000000000..c1207f9625 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/77069a06018f180f044aae55c67398d8ba369976 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/793b3f75c35a9db3d038f4bfecb9909b5749c16c b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/793b3f75c35a9db3d038f4bfecb9909b5749c16c new file mode 100644 index 0000000000..b801969bc6 --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/793b3f75c35a9db3d038f4bfecb9909b5749c16c @@ -0,0 +1,3 @@ +0!0 +*H 0  x + \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/83433abf2a6f9680f2d5a998872645d1f00bdad7 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/83433abf2a6f9680f2d5a998872645d1f00bdad7 new file mode 100644 index 0000000000..1600651293 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/83433abf2a6f9680f2d5a998872645d1f00bdad7 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/83abfdeb1c7c9ec5c675b7195bd5cc84f5ffd7e6 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/83abfdeb1c7c9ec5c675b7195bd5cc84f5ffd7e6 new file mode 100644 index 0000000000..a586003d15 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/83abfdeb1c7c9ec5c675b7195bd5cc84f5ffd7e6 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/867efd16288bdf0c805594455c6c8ca3f6cdf984 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/867efd16288bdf0c805594455c6c8ca3f6cdf984 new file mode 100644 index 0000000000..c771e9423a --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/867efd16288bdf0c805594455c6c8ca3f6cdf984 @@ -0,0 +1,3 @@ +00J *H  0=0% *H  0{7"mQ*]0*H oY:|l9qn'E٨+1 155 "y%*bSBrri~9/s +)W'mi!*_]< P +;mX%?HU <@?ㄎ.r r&6- \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/87e260e33c325abce3611c8a03a67dc8bd8279fa b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/87e260e33c325abce3611c8a03a67dc8bd8279fa new file mode 100644 index 0000000000..4390fb9eed Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/87e260e33c325abce3611c8a03a67dc8bd8279fa differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/8884806aadafa1c12aa49956c3e67937a945d207 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/8884806aadafa1c12aa49956c3e67937a945d207 new file mode 100644 index 0000000000..9dd6ee62e9 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/8884806aadafa1c12aa49956c3e67937a945d207 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/88d4acdaa7cfc9d986e92acc8ed9eacece464fbe b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/88d4acdaa7cfc9d986e92acc8ed9eacece464fbe new file mode 100644 index 0000000000..d8f67af793 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/88d4acdaa7cfc9d986e92acc8ed9eacece464fbe differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/8c6784bfdbad69913ca5e378fda9a6431f3373bb b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/8c6784bfdbad69913ca5e378fda9a6431f3373bb new file mode 100644 index 0000000000..4f5caebb4b --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/8c6784bfdbad69913ca5e378fda9a6431f3373bb @@ -0,0 +1,2 @@ +00  +*H  $ \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/91d38c7f8b6fee2ca741d0c78022d210593c4996 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/91d38c7f8b6fee2ca741d0c78022d210593c4996 new file mode 100644 index 0000000000..a417f7e90c Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/91d38c7f8b6fee2ca741d0c78022d210593c4996 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/91d3e4913cc4e3c81e3c2276fa92168a39e75055 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/91d3e4913cc4e3c81e3c2276fa92168a39e75055 new file mode 100644 index 0000000000..9a1cdcbb4e --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/91d3e4913cc4e3c81e3c2276fa92168a39e75055 @@ -0,0 +1,2 @@ +0'0 +*H 0  | x  \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/91ec5cd6967820d1680f7f6b4aa1048b34fc53c5 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/91ec5cd6967820d1680f7f6b4aa1048b34fc53c5 new file mode 100644 index 0000000000..c43e284f72 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/91ec5cd6967820d1680f7f6b4aa1048b34fc53c5 differ diff --git a/devel/fuzz/gnutls_pkcs8_key_parser.in/key-ecc-3des.p8 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/932018d39238ebd685a8f3e97ddaa2e9fad19141 similarity index 100% rename from devel/fuzz/gnutls_pkcs8_key_parser.in/key-ecc-3des.p8 rename to fuzz/gnutls_pkcs8_key_parser_fuzzer.in/932018d39238ebd685a8f3e97ddaa2e9fad19141 diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/93ccaf2d995717c6ba4028d1c16566a736a01d4d b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/93ccaf2d995717c6ba4028d1c16566a736a01d4d new file mode 100644 index 0000000000..8b44318fe2 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/93ccaf2d995717c6ba4028d1c16566a736a01d4d differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/947c0abe46ef7c0d7ebb1272b72ff7f2bb83dde1 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/947c0abe46ef7c0d7ebb1272b72ff7f2bb83dde1 new file mode 100644 index 0000000000..333174dd5e Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/947c0abe46ef7c0d7ebb1272b72ff7f2bb83dde1 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/96acc81b802a3211e97a7cde47a8092bc41aaa02 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/96acc81b802a3211e97a7cde47a8092bc41aaa02 new file mode 100644 index 0000000000..987a1e3f8f --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/96acc81b802a3211e97a7cde47a8092bc41aaa02 @@ -0,0 +1 @@ +00 \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/99b8db005c9c36c75029d14e39791c5b74ea7bd0 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/99b8db005c9c36c75029d14e39791c5b74ea7bd0 new file mode 100644 index 0000000000..25dc5ef8be Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/99b8db005c9c36c75029d14e39791c5b74ea7bd0 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/99f8cdde23a21b959b04dbcff190bce3c2743649 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/99f8cdde23a21b959b04dbcff190bce3c2743649 new file mode 100644 index 0000000000..0abbabc09d Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/99f8cdde23a21b959b04dbcff190bce3c2743649 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9a6a4e53b0a0f2387b0c3216612713e40137e337 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9a6a4e53b0a0f2387b0c3216612713e40137e337 new file mode 100644 index 0000000000..0eab8890d4 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9a6a4e53b0a0f2387b0c3216612713e40137e337 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9dfa459bb069fd719900aaa7c2674efedf10f9a6 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9dfa459bb069fd719900aaa7c2674efedf10f9a6 new file mode 100644 index 0000000000..85df9214a5 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9dfa459bb069fd719900aaa7c2674efedf10f9a6 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9e1f0c4aa420412611e7516b091e4aa0366b42ea b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9e1f0c4aa420412611e7516b091e4aa0366b42ea new file mode 100644 index 0000000000..f69d62dc9f Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9e1f0c4aa420412611e7516b091e4aa0366b42ea differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9f3917bb8d320f848e3bc9ed1c88f6aa23cb9926 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9f3917bb8d320f848e3bc9ed1c88f6aa23cb9926 new file mode 100644 index 0000000000..6d020f1678 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/9f3917bb8d320f848e3bc9ed1c88f6aa23cb9926 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/a2f6338e484ad1007a36dae9eb5d62b3ba85e261 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/a2f6338e484ad1007a36dae9eb5d62b3ba85e261 new file mode 100644 index 0000000000..d2e12b0fdb Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/a2f6338e484ad1007a36dae9eb5d62b3ba85e261 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/a8c97f1c13d3567562b1896960115166b701a593 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/a8c97f1c13d3567562b1896960115166b701a593 new file mode 100644 index 0000000000..812ea98263 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/a8c97f1c13d3567562b1896960115166b701a593 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/aa30264dda3bce4357df898afb2a99f3badb82c3 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/aa30264dda3bce4357df898afb2a99f3badb82c3 new file mode 100644 index 0000000000..8a50867b1a Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/aa30264dda3bce4357df898afb2a99f3badb82c3 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b01a3b9bea66a9689071f9bf63fb47071bcb0aa7 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b01a3b9bea66a9689071f9bf63fb47071bcb0aa7 new file mode 100644 index 0000000000..6505bd14e7 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b01a3b9bea66a9689071f9bf63fb47071bcb0aa7 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b1998fc16b8b288a572ec2b161be73682fd99729 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b1998fc16b8b288a572ec2b161be73682fd99729 new file mode 100644 index 0000000000..ec7429636c Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b1998fc16b8b288a572ec2b161be73682fd99729 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b24d5d4a8193bdd98307a4963a05f6e0634909ec b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b24d5d4a8193bdd98307a4963a05f6e0634909ec new file mode 100644 index 0000000000..bade4aaa45 --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b24d5d4a8193bdd98307a4963a05f6e0634909ec @@ -0,0 +1,3 @@ +00J *H  0=0% *H  0{7"mQ*]0*H +oY:|l9qn'E٨+1 155 "y%*bSBrri~9/s +)W'mi!*_]< P +;mX%?HU <@?ㄎ.r r&6- \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b3ce5e21b98eb6c21b23b21040302ba11102fdf5 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b3ce5e21b98eb6c21b23b21040302ba11102fdf5 new file mode 100644 index 0000000000..41ab98bebf Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b3ce5e21b98eb6c21b23b21040302ba11102fdf5 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b7794cf538c2e34e75dd6b17cb84d72e0ba0993d b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b7794cf538c2e34e75dd6b17cb84d72e0ba0993d new file mode 100644 index 0000000000..48c3f92fd5 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b7794cf538c2e34e75dd6b17cb84d72e0ba0993d differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b7eae3320831d71d88c58c5f695cecf67412d02c b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b7eae3320831d71d88c58c5f695cecf67412d02c new file mode 100644 index 0000000000..b524ab46ea Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/b7eae3320831d71d88c58c5f695cecf67412d02c differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/bc1d0c3c056c7c40d21a2558bad94bd673a2f1d8 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/bc1d0c3c056c7c40d21a2558bad94bd673a2f1d8 new file mode 100644 index 0000000000..928d3ff940 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/bc1d0c3c056c7c40d21a2558bad94bd673a2f1d8 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c150b1ee8402c6a3f1aa8b957b298ed8220decc9 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c150b1ee8402c6a3f1aa8b957b298ed8220decc9 new file mode 100644 index 0000000000..12ce5dcbc6 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c150b1ee8402c6a3f1aa8b957b298ed8220decc9 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c17320b85939580c99fee2d78617ae45fe9037a0 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c17320b85939580c99fee2d78617ae45fe9037a0 new file mode 100644 index 0000000000..0b9bb532d3 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c17320b85939580c99fee2d78617ae45fe9037a0 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c1eb093789afd8d65c333b0dd10e47cdb6466c37 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c1eb093789afd8d65c333b0dd10e47cdb6466c37 new file mode 100644 index 0000000000..7d6af2c51e Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c1eb093789afd8d65c333b0dd10e47cdb6466c37 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c26b4d6ae940452b5a022731e30d8c14e83408be b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c26b4d6ae940452b5a022731e30d8c14e83408be new file mode 100644 index 0000000000..4ed9235cdf Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c26b4d6ae940452b5a022731e30d8c14e83408be differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c2cf384dff485c778b0d4bf480cde56f22b0c278 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c2cf384dff485c778b0d4bf480cde56f22b0c278 new file mode 100644 index 0000000000..c798950ad2 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c2cf384dff485c778b0d4bf480cde56f22b0c278 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c4bf6f95417fa701474f75756312b06e6eaa89ab b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c4bf6f95417fa701474f75756312b06e6eaa89ab new file mode 100644 index 0000000000..232432735b Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c4bf6f95417fa701474f75756312b06e6eaa89ab differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c4c7bf33d8158eb62abbdc5fe68ce529c82a0fdb b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c4c7bf33d8158eb62abbdc5fe68ce529c82a0fdb new file mode 100644 index 0000000000..1ea8b10db8 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c4c7bf33d8158eb62abbdc5fe68ce529c82a0fdb differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c81a771896c988dae82c47e0a60f0cb750742914 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c81a771896c988dae82c47e0a60f0cb750742914 new file mode 100644 index 0000000000..f07b810d38 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/c81a771896c988dae82c47e0a60f0cb750742914 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/cd39456de3dfba9c20878500c671c5b0328cfe25 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/cd39456de3dfba9c20878500c671c5b0328cfe25 new file mode 100644 index 0000000000..491c348cb6 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/cd39456de3dfba9c20878500c671c5b0328cfe25 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/cd3aba0fdcd2689ef4e03c0b5c367bcd3ea0310b b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/cd3aba0fdcd2689ef4e03c0b5c367bcd3ea0310b new file mode 100644 index 0000000000..9d9fea3d56 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/cd3aba0fdcd2689ef4e03c0b5c367bcd3ea0310b differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d1b4a5bc35e96fab2d8798e742a476d70db9f597 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d1b4a5bc35e96fab2d8798e742a476d70db9f597 new file mode 100644 index 0000000000..5ffac56408 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d1b4a5bc35e96fab2d8798e742a476d70db9f597 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d331bb5ac066fe1867d9a09a2c78d4dccbcd601c b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d331bb5ac066fe1867d9a09a2c78d4dccbcd601c new file mode 100644 index 0000000000..61cac9dac2 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d331bb5ac066fe1867d9a09a2c78d4dccbcd601c differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d42f86a87ebf0654d74a758caf8ab52469ada8c5 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d42f86a87ebf0654d74a758caf8ab52469ada8c5 new file mode 100644 index 0000000000..fd1d22e9c2 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d42f86a87ebf0654d74a758caf8ab52469ada8c5 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d5fb7b1a0a72cf0c2ec63e890e8b783ee0c6d1e2 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d5fb7b1a0a72cf0c2ec63e890e8b783ee0c6d1e2 new file mode 100644 index 0000000000..996f961a2e Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/d5fb7b1a0a72cf0c2ec63e890e8b783ee0c6d1e2 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/da59d34eacdf50a0019a457fb7c4916be48c99a5 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/da59d34eacdf50a0019a457fb7c4916be48c99a5 new file mode 100644 index 0000000000..63cd41b04e Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/da59d34eacdf50a0019a457fb7c4916be48c99a5 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/db4abbcf75dd55f4162034298d963c73b82f18d4 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/db4abbcf75dd55f4162034298d963c73b82f18d4 new file mode 100644 index 0000000000..03b1759ef5 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/db4abbcf75dd55f4162034298d963c73b82f18d4 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/dbd0ef5257d76869ab26424a42a18a7dc24a7db8 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/dbd0ef5257d76869ab26424a42a18a7dc24a7db8 new file mode 100644 index 0000000000..d7e29cf4e8 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/dbd0ef5257d76869ab26424a42a18a7dc24a7db8 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/dc93b57de6a13d4e54f3b2770a8b2eef148abc18 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/dc93b57de6a13d4e54f3b2770a8b2eef148abc18 new file mode 100644 index 0000000000..e2d996f4c4 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/dc93b57de6a13d4e54f3b2770a8b2eef148abc18 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e2184a7e3ea2947e384379ed1ddb6dccaa75573e b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e2184a7e3ea2947e384379ed1ddb6dccaa75573e new file mode 100644 index 0000000000..acbb207ba9 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e2184a7e3ea2947e384379ed1ddb6dccaa75573e differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e443a44ae266049bc4e61d08e3212b34a1ce8ea5 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e443a44ae266049bc4e61d08e3212b34a1ce8ea5 new file mode 100644 index 0000000000..9f720b235a Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e443a44ae266049bc4e61d08e3212b34a1ce8ea5 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e52b8ca1ab0376631427a5373f869e7747658819 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e52b8ca1ab0376631427a5373f869e7747658819 new file mode 100644 index 0000000000..b56d3ec258 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e52b8ca1ab0376631427a5373f869e7747658819 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e577c8fd2f259c9bb1fbef31b5035b780e442a90 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e577c8fd2f259c9bb1fbef31b5035b780e442a90 new file mode 100644 index 0000000000..4d7b0a0f5d Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e577c8fd2f259c9bb1fbef31b5035b780e442a90 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e57ab863c812d404540edadb273a6c93784b8464 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e57ab863c812d404540edadb273a6c93784b8464 new file mode 100644 index 0000000000..9b19020bce Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e57ab863c812d404540edadb273a6c93784b8464 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e5f40ce601b441ed4509d7e5090d479084bda667 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e5f40ce601b441ed4509d7e5090d479084bda667 new file mode 100644 index 0000000000..306999736c --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e5f40ce601b441ed4509d7e5090d479084bda667 @@ -0,0 +1,3 @@ +00J *H  0=0% *H  0{7"mQ*]0*H oY:|l9qn'E٨+1 155 "y%*bSBrri~9/s +)W'mi!*_]< P +;mX%?HU <@?ㄎ.r r&6- \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e62e5a99a863f9f89e37a1ff9d76246400ddbe43 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e62e5a99a863f9f89e37a1ff9d76246400ddbe43 new file mode 100644 index 0000000000..8216a732fc Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/e62e5a99a863f9f89e37a1ff9d76246400ddbe43 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/ed4e40344a8e53ea347f563a676dfdc6ea824101 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/ed4e40344a8e53ea347f563a676dfdc6ea824101 new file mode 100644 index 0000000000..821b1fa8c7 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/ed4e40344a8e53ea347f563a676dfdc6ea824101 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f08a2beb03439ebb854ec3264c84c2c2fad0d0ef b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f08a2beb03439ebb854ec3264c84c2c2fad0d0ef new file mode 100644 index 0000000000..6f1f51f37b Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f08a2beb03439ebb854ec3264c84c2c2fad0d0ef differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f571251e3265bd460b61f94c27a9e6c66836f38c b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f571251e3265bd460b61f94c27a9e6c66836f38c new file mode 100644 index 0000000000..b13760353d Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f571251e3265bd460b61f94c27a9e6c66836f38c differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f7063dee93c9fc4f8619ccf7ef06f75c0675be75 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f7063dee93c9fc4f8619ccf7ef06f75c0675be75 new file mode 100644 index 0000000000..111490bba9 --- /dev/null +++ b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f7063dee93c9fc4f8619ccf7ef06f75c0675be75 @@ -0,0 +1,3 @@ +00J *H  0=0% *H  5{7"mQ*]0*H oY:|l9qn'E٨+1 155 "y%*bSBrri~9/s +)W'mi!*_]< P +;mX%?HU <@?ㄎ.r r&6- \ No newline at end of file diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f7e1377832d630e51268716b90d30839f3fc7759 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f7e1377832d630e51268716b90d30839f3fc7759 new file mode 100644 index 0000000000..6cc408d8bc Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f7e1377832d630e51268716b90d30839f3fc7759 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f897e74b2035a1cce4615bbcc662c4153772ff31 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f897e74b2035a1cce4615bbcc662c4153772ff31 new file mode 100644 index 0000000000..4dd924be35 Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/f897e74b2035a1cce4615bbcc662c4153772ff31 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/fafa19522b9b6d652e5fbf2a8c40fec16e1e5f1e b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/fafa19522b9b6d652e5fbf2a8c40fec16e1e5f1e new file mode 100644 index 0000000000..1cf43b587a Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/fafa19522b9b6d652e5fbf2a8c40fec16e1e5f1e differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/fbafa6f3d47416fa939a6122cc555089c7a28b72 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/fbafa6f3d47416fa939a6122cc555089c7a28b72 new file mode 100644 index 0000000000..9cf38543af Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/fbafa6f3d47416fa939a6122cc555089c7a28b72 differ diff --git a/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/fbda36af19a698494d1b714f556f8ecfdaeb2d93 b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/fbda36af19a698494d1b714f556f8ecfdaeb2d93 new file mode 100644 index 0000000000..29c4b4a6ac Binary files /dev/null and b/fuzz/gnutls_pkcs8_key_parser_fuzzer.in/fbda36af19a698494d1b714f556f8ecfdaeb2d93 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.c b/fuzz/gnutls_private_key_parser_fuzzer.c new file mode 100644 index 0000000000..c7d4a7b526 --- /dev/null +++ b/fuzz/gnutls_private_key_parser_fuzzer.c @@ -0,0 +1,43 @@ +/* +# Copyright 2016 Google Inc. +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include + +#include +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw; + gnutls_x509_privkey_t key; + int ret; + + raw.data = (unsigned char *)data; + raw.size = size; + + ret = gnutls_x509_privkey_init(&key); + assert(ret >= 0); + + ret = gnutls_x509_privkey_import(key, &raw, GNUTLS_X509_FMT_DER); + + gnutls_x509_privkey_deinit(key); + return 0; +} diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/040bcd0473a93154fa0bbd7c4f2afb2e85e220b7 b/fuzz/gnutls_private_key_parser_fuzzer.in/040bcd0473a93154fa0bbd7c4f2afb2e85e220b7 new file mode 100644 index 0000000000..8ff4de8e9c Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/040bcd0473a93154fa0bbd7c4f2afb2e85e220b7 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/066bdf357e451e5d505fd0d9d23e4c10aaf7a201 b/fuzz/gnutls_private_key_parser_fuzzer.in/066bdf357e451e5d505fd0d9d23e4c10aaf7a201 new file mode 100644 index 0000000000..d090d096a3 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/066bdf357e451e5d505fd0d9d23e4c10aaf7a201 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/06cf8bee48a8408801dac5e71b9bc0ba867f29cb b/fuzz/gnutls_private_key_parser_fuzzer.in/06cf8bee48a8408801dac5e71b9bc0ba867f29cb new file mode 100644 index 0000000000..32ff27d14d Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/06cf8bee48a8408801dac5e71b9bc0ba867f29cb differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/0956556101a9a877d2e37d934f45f18904d70294 b/fuzz/gnutls_private_key_parser_fuzzer.in/0956556101a9a877d2e37d934f45f18904d70294 new file mode 100644 index 0000000000..12a1b5ea0d Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/0956556101a9a877d2e37d934f45f18904d70294 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/0e1dad7d02de6d79a023eb6bbe267de37f42174d b/fuzz/gnutls_private_key_parser_fuzzer.in/0e1dad7d02de6d79a023eb6bbe267de37f42174d new file mode 100644 index 0000000000..098e87677e Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/0e1dad7d02de6d79a023eb6bbe267de37f42174d differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/0f502f1d97fc38f122be697e09847bb021bec7bb b/fuzz/gnutls_private_key_parser_fuzzer.in/0f502f1d97fc38f122be697e09847bb021bec7bb new file mode 100644 index 0000000000..bca85e358c Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/0f502f1d97fc38f122be697e09847bb021bec7bb differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/10a5c92fa30ddb6cbb4286d7699b2b7a7e032b17 b/fuzz/gnutls_private_key_parser_fuzzer.in/10a5c92fa30ddb6cbb4286d7699b2b7a7e032b17 new file mode 100644 index 0000000000..f550304ed3 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/10a5c92fa30ddb6cbb4286d7699b2b7a7e032b17 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/14d0e2c9c64ba4c9c25ffafda88fa3f51c202897 b/fuzz/gnutls_private_key_parser_fuzzer.in/14d0e2c9c64ba4c9c25ffafda88fa3f51c202897 new file mode 100644 index 0000000000..e458dab0fa Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/14d0e2c9c64ba4c9c25ffafda88fa3f51c202897 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/1718bae5cf52eb67055b76c7ad0efbcbcba2b2d2 b/fuzz/gnutls_private_key_parser_fuzzer.in/1718bae5cf52eb67055b76c7ad0efbcbcba2b2d2 new file mode 100644 index 0000000000..5cf5e3f9eb Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/1718bae5cf52eb67055b76c7ad0efbcbcba2b2d2 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/17cb6a1e91adc3959d05aaaff053226221502b40 b/fuzz/gnutls_private_key_parser_fuzzer.in/17cb6a1e91adc3959d05aaaff053226221502b40 new file mode 100644 index 0000000000..3299c287c0 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/17cb6a1e91adc3959d05aaaff053226221502b40 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/209e46284da91f64b69d3c66f646ba7020323582 b/fuzz/gnutls_private_key_parser_fuzzer.in/209e46284da91f64b69d3c66f646ba7020323582 new file mode 100644 index 0000000000..c692e206b1 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/209e46284da91f64b69d3c66f646ba7020323582 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/20b08cbed9eed930ea39fbad0d80647958184d54 b/fuzz/gnutls_private_key_parser_fuzzer.in/20b08cbed9eed930ea39fbad0d80647958184d54 new file mode 100644 index 0000000000..3050f141ea Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/20b08cbed9eed930ea39fbad0d80647958184d54 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/2119af7c39441cbfcdafe178e50b8b3f882c5a86 b/fuzz/gnutls_private_key_parser_fuzzer.in/2119af7c39441cbfcdafe178e50b8b3f882c5a86 new file mode 100644 index 0000000000..d1804f4880 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/2119af7c39441cbfcdafe178e50b8b3f882c5a86 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/2264827721fc568392434d2f21e4b874ee5d9eb7 b/fuzz/gnutls_private_key_parser_fuzzer.in/2264827721fc568392434d2f21e4b874ee5d9eb7 new file mode 100644 index 0000000000..929bf098a0 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/2264827721fc568392434d2f21e4b874ee5d9eb7 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/25b31a5286fa568605f07a5f6dfea1d572445d60 b/fuzz/gnutls_private_key_parser_fuzzer.in/25b31a5286fa568605f07a5f6dfea1d572445d60 new file mode 100644 index 0000000000..e694e0d470 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/25b31a5286fa568605f07a5f6dfea1d572445d60 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/2cb49a0f7d4ada676674995c0ad7fabdb732e602 b/fuzz/gnutls_private_key_parser_fuzzer.in/2cb49a0f7d4ada676674995c0ad7fabdb732e602 new file mode 100644 index 0000000000..35d7f37fd9 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/2cb49a0f7d4ada676674995c0ad7fabdb732e602 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/316927fbb04ea67b904bcae5e8186aafa699d33e b/fuzz/gnutls_private_key_parser_fuzzer.in/316927fbb04ea67b904bcae5e8186aafa699d33e new file mode 100644 index 0000000000..8209ae4956 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/316927fbb04ea67b904bcae5e8186aafa699d33e differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/333bf65824e9cf3e1999a1f8121e5217d38983be b/fuzz/gnutls_private_key_parser_fuzzer.in/333bf65824e9cf3e1999a1f8121e5217d38983be new file mode 100644 index 0000000000..a0e5644cb8 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/333bf65824e9cf3e1999a1f8121e5217d38983be differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/35c2b1ff6b9aa70a986b85f3c28654535df4e885 b/fuzz/gnutls_private_key_parser_fuzzer.in/35c2b1ff6b9aa70a986b85f3c28654535df4e885 new file mode 100644 index 0000000000..196749faf7 --- /dev/null +++ b/fuzz/gnutls_private_key_parser_fuzzer.in/35c2b1ff6b9aa70a986b85f3c28654535df4e885 @@ -0,0 +1,2 @@ +00 + \ No newline at end of file diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/40ab9b6de4e0965ddd11ccf3e05d2f7224fa6874 b/fuzz/gnutls_private_key_parser_fuzzer.in/40ab9b6de4e0965ddd11ccf3e05d2f7224fa6874 new file mode 100644 index 0000000000..b502ced488 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/40ab9b6de4e0965ddd11ccf3e05d2f7224fa6874 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/4ad8acdc7d317bace5a721f8568239232861e83a b/fuzz/gnutls_private_key_parser_fuzzer.in/4ad8acdc7d317bace5a721f8568239232861e83a new file mode 100644 index 0000000000..613fe4cd13 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/4ad8acdc7d317bace5a721f8568239232861e83a differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb b/fuzz/gnutls_private_key_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb new file mode 100644 index 0000000000..d1a537e229 --- /dev/null +++ b/fuzz/gnutls_private_key_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/56ac65e7813ed0078113d7ef8c6465246d714404 b/fuzz/gnutls_private_key_parser_fuzzer.in/56ac65e7813ed0078113d7ef8c6465246d714404 new file mode 100644 index 0000000000..81f2c21562 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/56ac65e7813ed0078113d7ef8c6465246d714404 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/5997e28f39dec8accd72123999805fe70853ab31 b/fuzz/gnutls_private_key_parser_fuzzer.in/5997e28f39dec8accd72123999805fe70853ab31 new file mode 100644 index 0000000000..f43c1091b8 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/5997e28f39dec8accd72123999805fe70853ab31 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/6973a0fd9233bf9398f665ec2e3fda32ec995aa8 b/fuzz/gnutls_private_key_parser_fuzzer.in/6973a0fd9233bf9398f665ec2e3fda32ec995aa8 new file mode 100644 index 0000000000..9ebb216138 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/6973a0fd9233bf9398f665ec2e3fda32ec995aa8 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/6b6d69627878b26d178edb35404a3b07cd97e11c b/fuzz/gnutls_private_key_parser_fuzzer.in/6b6d69627878b26d178edb35404a3b07cd97e11c new file mode 100644 index 0000000000..64b7feb097 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/6b6d69627878b26d178edb35404a3b07cd97e11c differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/70aeb24f3f1394122705ef96254b3baec3ccb668 b/fuzz/gnutls_private_key_parser_fuzzer.in/70aeb24f3f1394122705ef96254b3baec3ccb668 new file mode 100644 index 0000000000..53180d73b9 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/70aeb24f3f1394122705ef96254b3baec3ccb668 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/70b46238d21419c93bce99662119f3e896e67b98 b/fuzz/gnutls_private_key_parser_fuzzer.in/70b46238d21419c93bce99662119f3e896e67b98 new file mode 100644 index 0000000000..8ae38dc2e7 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/70b46238d21419c93bce99662119f3e896e67b98 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/730fa19321cef3c144c7bc2e695540e45f39b38d b/fuzz/gnutls_private_key_parser_fuzzer.in/730fa19321cef3c144c7bc2e695540e45f39b38d new file mode 100644 index 0000000000..7e20105ded Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/730fa19321cef3c144c7bc2e695540e45f39b38d differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/738d531fa27b4fcd4dc241f084e9651ff8ad7628 b/fuzz/gnutls_private_key_parser_fuzzer.in/738d531fa27b4fcd4dc241f084e9651ff8ad7628 new file mode 100644 index 0000000000..7809365ccb Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/738d531fa27b4fcd4dc241f084e9651ff8ad7628 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/7487eb4764f6805444c04912f6227ec14d6dff42 b/fuzz/gnutls_private_key_parser_fuzzer.in/7487eb4764f6805444c04912f6227ec14d6dff42 new file mode 100644 index 0000000000..cea69b40c4 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/7487eb4764f6805444c04912f6227ec14d6dff42 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/7f7fe3f809f9f44b2e466cac670161b7f0cd5c56 b/fuzz/gnutls_private_key_parser_fuzzer.in/7f7fe3f809f9f44b2e466cac670161b7f0cd5c56 new file mode 100644 index 0000000000..a8a7db1eaf --- /dev/null +++ b/fuzz/gnutls_private_key_parser_fuzzer.in/7f7fe3f809f9f44b2e466cac670161b7f0cd5c56 @@ -0,0 +1 @@ +00+ep$ \ No newline at end of file diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/8300e529e5f1802f523ead248dc5ac834ae64d61 b/fuzz/gnutls_private_key_parser_fuzzer.in/8300e529e5f1802f523ead248dc5ac834ae64d61 new file mode 100644 index 0000000000..1863f359e2 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/8300e529e5f1802f523ead248dc5ac834ae64d61 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/85968a60c37e02633bb048524aa34ca03f49552e b/fuzz/gnutls_private_key_parser_fuzzer.in/85968a60c37e02633bb048524aa34ca03f49552e new file mode 100644 index 0000000000..ab6b3d1561 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/85968a60c37e02633bb048524aa34ca03f49552e differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/94ec7b56d6456c0c4a15f88162b42fcecff51bb4 b/fuzz/gnutls_private_key_parser_fuzzer.in/94ec7b56d6456c0c4a15f88162b42fcecff51bb4 new file mode 100644 index 0000000000..c8191f654d Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/94ec7b56d6456c0c4a15f88162b42fcecff51bb4 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/98dad1345b5577932bc9e2368b613c76f4cdd421 b/fuzz/gnutls_private_key_parser_fuzzer.in/98dad1345b5577932bc9e2368b613c76f4cdd421 new file mode 100644 index 0000000000..4a8d130f50 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/98dad1345b5577932bc9e2368b613c76f4cdd421 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/9ad2be8ae8b20a761987086bc417cb8bf0eab03e b/fuzz/gnutls_private_key_parser_fuzzer.in/9ad2be8ae8b20a761987086bc417cb8bf0eab03e new file mode 100644 index 0000000000..6104523665 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/9ad2be8ae8b20a761987086bc417cb8bf0eab03e differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/9adbb966c939d7bcdb66c288ff0803d85a68e7cf b/fuzz/gnutls_private_key_parser_fuzzer.in/9adbb966c939d7bcdb66c288ff0803d85a68e7cf new file mode 100644 index 0000000000..fdcfdc2440 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/9adbb966c939d7bcdb66c288ff0803d85a68e7cf differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/9aee5242084ac98f0e4da6e92945fce79ad09d25 b/fuzz/gnutls_private_key_parser_fuzzer.in/9aee5242084ac98f0e4da6e92945fce79ad09d25 new file mode 100644 index 0000000000..2a5325b5eb Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/9aee5242084ac98f0e4da6e92945fce79ad09d25 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/9ea328b3a652c7f397deaef0c3d46fb1b6ccbcdf b/fuzz/gnutls_private_key_parser_fuzzer.in/9ea328b3a652c7f397deaef0c3d46fb1b6ccbcdf new file mode 100644 index 0000000000..b3f507d1c7 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/9ea328b3a652c7f397deaef0c3d46fb1b6ccbcdf differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/aac08c99b26c3b886da6c18dfb597e69f52f6a96 b/fuzz/gnutls_private_key_parser_fuzzer.in/aac08c99b26c3b886da6c18dfb597e69f52f6a96 new file mode 100644 index 0000000000..8016bcebc1 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/aac08c99b26c3b886da6c18dfb597e69f52f6a96 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/b142a702a8789d531ceaae23548f2f0f876ccb67 b/fuzz/gnutls_private_key_parser_fuzzer.in/b142a702a8789d531ceaae23548f2f0f876ccb67 new file mode 100644 index 0000000000..fd01d63ddf Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/b142a702a8789d531ceaae23548f2f0f876ccb67 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/b15dc1503b9628465cdeebe44fe6d6dc3873dc5e b/fuzz/gnutls_private_key_parser_fuzzer.in/b15dc1503b9628465cdeebe44fe6d6dc3873dc5e new file mode 100644 index 0000000000..02482eafb1 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/b15dc1503b9628465cdeebe44fe6d6dc3873dc5e differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/b86faa49341f9454b1930589d1fb472e24b8c74e b/fuzz/gnutls_private_key_parser_fuzzer.in/b86faa49341f9454b1930589d1fb472e24b8c74e new file mode 100644 index 0000000000..e2fc2dfa36 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/b86faa49341f9454b1930589d1fb472e24b8c74e differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/b888bb6f2c4de1a3147c6c198fa73d7612a177a9 b/fuzz/gnutls_private_key_parser_fuzzer.in/b888bb6f2c4de1a3147c6c198fa73d7612a177a9 new file mode 100644 index 0000000000..af5e9521cd Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/b888bb6f2c4de1a3147c6c198fa73d7612a177a9 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/c1c063b9151ea8aea4867702c7e57ebbb93180e6 b/fuzz/gnutls_private_key_parser_fuzzer.in/c1c063b9151ea8aea4867702c7e57ebbb93180e6 new file mode 100644 index 0000000000..fe0c4bbc49 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/c1c063b9151ea8aea4867702c7e57ebbb93180e6 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/ca298d5f1943e58fe0427f5a2c316dbb74f30fe9 b/fuzz/gnutls_private_key_parser_fuzzer.in/ca298d5f1943e58fe0427f5a2c316dbb74f30fe9 new file mode 100644 index 0000000000..c6087240dc Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/ca298d5f1943e58fe0427f5a2c316dbb74f30fe9 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/d02847d90c1647f5151a7641aa17640280561625 b/fuzz/gnutls_private_key_parser_fuzzer.in/d02847d90c1647f5151a7641aa17640280561625 new file mode 100644 index 0000000000..f02a935131 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/d02847d90c1647f5151a7641aa17640280561625 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/d08c295d5340c2d5797f59b6e0fcf897c0d73a2a b/fuzz/gnutls_private_key_parser_fuzzer.in/d08c295d5340c2d5797f59b6e0fcf897c0d73a2a new file mode 100644 index 0000000000..03f80ce0b3 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/d08c295d5340c2d5797f59b6e0fcf897c0d73a2a differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/d11a7fad27e245ef5e60128dd5b00ebcc9f33112 b/fuzz/gnutls_private_key_parser_fuzzer.in/d11a7fad27e245ef5e60128dd5b00ebcc9f33112 new file mode 100644 index 0000000000..49c0114b66 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/d11a7fad27e245ef5e60128dd5b00ebcc9f33112 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/d3fe818ab3b45ee40a894489612120398de20435 b/fuzz/gnutls_private_key_parser_fuzzer.in/d3fe818ab3b45ee40a894489612120398de20435 new file mode 100644 index 0000000000..4d63f81c7b --- /dev/null +++ b/fuzz/gnutls_private_key_parser_fuzzer.in/d3fe818ab3b45ee40a894489612120398de20435 @@ -0,0 +1,2 @@ +0w B ظ.`%X}W|o +*H=DB,_ B ظ.a%X}WB ظ.a%X}ٜ3kG \ No newline at end of file diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/d5b60dde7886003e848c36b565ac19fc65598060 b/fuzz/gnutls_private_key_parser_fuzzer.in/d5b60dde7886003e848c36b565ac19fc65598060 new file mode 100644 index 0000000000..b83276d38c Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/d5b60dde7886003e848c36b565ac19fc65598060 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/db8ebabcbc64c82135c11eecb4f2db2974161176 b/fuzz/gnutls_private_key_parser_fuzzer.in/db8ebabcbc64c82135c11eecb4f2db2974161176 new file mode 100644 index 0000000000..8d2d8efb52 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/db8ebabcbc64c82135c11eecb4f2db2974161176 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/dd3e018f7f2fffe433f14c6346a46ab292acf81c b/fuzz/gnutls_private_key_parser_fuzzer.in/dd3e018f7f2fffe433f14c6346a46ab292acf81c new file mode 100644 index 0000000000..234592da2f Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/dd3e018f7f2fffe433f14c6346a46ab292acf81c differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/e4ee299cfdcd37bb36f88e08e34927dba37efb8a b/fuzz/gnutls_private_key_parser_fuzzer.in/e4ee299cfdcd37bb36f88e08e34927dba37efb8a new file mode 100644 index 0000000000..52508b99b8 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/e4ee299cfdcd37bb36f88e08e34927dba37efb8a differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/e8b92c3da3aae723a2c3cb76b059c5e4ff3f2278 b/fuzz/gnutls_private_key_parser_fuzzer.in/e8b92c3da3aae723a2c3cb76b059c5e4ff3f2278 new file mode 100644 index 0000000000..200f122036 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/e8b92c3da3aae723a2c3cb76b059c5e4ff3f2278 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/ea7c9ecd746f9aa3ac0f5977c319dfb990784d95 b/fuzz/gnutls_private_key_parser_fuzzer.in/ea7c9ecd746f9aa3ac0f5977c319dfb990784d95 new file mode 100644 index 0000000000..3befb2243d Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/ea7c9ecd746f9aa3ac0f5977c319dfb990784d95 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/edd1af081ad3750992be1121241935bd1ce87330 b/fuzz/gnutls_private_key_parser_fuzzer.in/edd1af081ad3750992be1121241935bd1ce87330 new file mode 100644 index 0000000000..a550b66bb2 --- /dev/null +++ b/fuzz/gnutls_private_key_parser_fuzzer.in/edd1af081ad3750992be1121241935bd1ce87330 @@ -0,0 +1 @@ +0: \ No newline at end of file diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/ef5337b334d7c205fe86bb6e8d126aa472768e75 b/fuzz/gnutls_private_key_parser_fuzzer.in/ef5337b334d7c205fe86bb6e8d126aa472768e75 new file mode 100644 index 0000000000..c71cb8654f Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/ef5337b334d7c205fe86bb6e8d126aa472768e75 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/f0a8f354188825eefa96b635c805b7b853b33b09 b/fuzz/gnutls_private_key_parser_fuzzer.in/f0a8f354188825eefa96b635c805b7b853b33b09 new file mode 100644 index 0000000000..9dc85397c6 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/f0a8f354188825eefa96b635c805b7b853b33b09 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/f1038f0135db54a404eac8058db14643713e47ff b/fuzz/gnutls_private_key_parser_fuzzer.in/f1038f0135db54a404eac8058db14643713e47ff new file mode 100644 index 0000000000..f8707fbb79 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/f1038f0135db54a404eac8058db14643713e47ff differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/f1708dc1dd6cc44a811535185f531fb06aa84067 b/fuzz/gnutls_private_key_parser_fuzzer.in/f1708dc1dd6cc44a811535185f531fb06aa84067 new file mode 100644 index 0000000000..91e7c24c56 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/f1708dc1dd6cc44a811535185f531fb06aa84067 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/f3fed4f89de53185ae5ea13731fd8d890e2d8e47 b/fuzz/gnutls_private_key_parser_fuzzer.in/f3fed4f89de53185ae5ea13731fd8d890e2d8e47 new file mode 100644 index 0000000000..483196b8cc Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/f3fed4f89de53185ae5ea13731fd8d890e2d8e47 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/f6b47191453a4aa5b0154f8beecc3012f188e00d b/fuzz/gnutls_private_key_parser_fuzzer.in/f6b47191453a4aa5b0154f8beecc3012f188e00d new file mode 100644 index 0000000000..e7fc55569b Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/f6b47191453a4aa5b0154f8beecc3012f188e00d differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/f7bc9fcabcfcc5afb1a7c3337a8fe30dcb3e7f49 b/fuzz/gnutls_private_key_parser_fuzzer.in/f7bc9fcabcfcc5afb1a7c3337a8fe30dcb3e7f49 new file mode 100644 index 0000000000..ac9982b7f2 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/f7bc9fcabcfcc5afb1a7c3337a8fe30dcb3e7f49 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/f837ed5a4320d9b4346c1828bfc351b733298101 b/fuzz/gnutls_private_key_parser_fuzzer.in/f837ed5a4320d9b4346c1828bfc351b733298101 new file mode 100644 index 0000000000..3f10e92811 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/f837ed5a4320d9b4346c1828bfc351b733298101 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/fd1bcd41cc4490458e62e91da404d2a104327152 b/fuzz/gnutls_private_key_parser_fuzzer.in/fd1bcd41cc4490458e62e91da404d2a104327152 new file mode 100644 index 0000000000..0877050153 Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/fd1bcd41cc4490458e62e91da404d2a104327152 differ diff --git a/fuzz/gnutls_private_key_parser_fuzzer.in/fd2e8b5da95ca9421fe1648d834e836732e34e7b b/fuzz/gnutls_private_key_parser_fuzzer.in/fd2e8b5da95ca9421fe1648d834e836732e34e7b new file mode 100644 index 0000000000..896e84e93e Binary files /dev/null and b/fuzz/gnutls_private_key_parser_fuzzer.in/fd2e8b5da95ca9421fe1648d834e836732e34e7b differ diff --git a/fuzz/gnutls_psk_client_fuzzer.c b/fuzz/gnutls_psk_client_fuzzer.c new file mode 100644 index 0000000000..6133c99988 --- /dev/null +++ b/fuzz/gnutls_psk_client_fuzzer.c @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * 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. + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "psk.h" +#include "mem.h" +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size) +{ + int res; + gnutls_session_t session; + gnutls_psk_client_credentials_t pcred; + struct mem_st memdata; + gnutls_datum_t psk_key; + + psk_key.data = (unsigned char*)psk_key16; + psk_key.size = 16; + + res = gnutls_init(&session, GNUTLS_CLIENT); + assert(res >= 0); + + res = gnutls_psk_allocate_client_credentials(&pcred); + assert(res >= 0); + + res = gnutls_psk_set_client_credentials(pcred, "test", &psk_key, GNUTLS_PSK_KEY_RAW); + assert(res >= 0); + + res = gnutls_credentials_set(session, GNUTLS_CRD_PSK, pcred); + assert(res >= 0); + + res = gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-PSK:+DHE-PSK:+PSK:"VERS_STR, NULL); + assert(res >= 0); + + memdata.data = data; + memdata.size = size; + + gnutls_transport_set_push_function(session, mem_push); + gnutls_transport_set_pull_function(session, mem_pull); + gnutls_transport_set_pull_timeout_function(session, + mem_pull_timeout); + gnutls_transport_set_ptr(session, &memdata); + + do { + res = gnutls_handshake(session); + } while (res < 0 && gnutls_error_is_fatal(res) == 0); + if (res >= 0) { + for (;;) { + char buf[16384]; + res = gnutls_record_recv(session, buf, sizeof(buf)); + if (res <= 0) { + break; + } + } + } + + gnutls_deinit(session); + gnutls_psk_free_client_credentials(pcred); + return 0; +} diff --git a/fuzz/gnutls_psk_client_fuzzer.in/01eda6f0d23832e4b05b57f96588118daa699e39 b/fuzz/gnutls_psk_client_fuzzer.in/01eda6f0d23832e4b05b57f96588118daa699e39 new file mode 100644 index 0000000000..e1c023f717 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/01eda6f0d23832e4b05b57f96588118daa699e39 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/043c23641d228b49f8109724b604335e02c537d8 b/fuzz/gnutls_psk_client_fuzzer.in/043c23641d228b49f8109724b604335e02c537d8 new file mode 100644 index 0000000000..67479f08f5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/043c23641d228b49f8109724b604335e02c537d8 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/04765d237fc65da80b71ab4673725cb08930690e b/fuzz/gnutls_psk_client_fuzzer.in/04765d237fc65da80b71ab4673725cb08930690e new file mode 100644 index 0000000000..690578ce4c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/04765d237fc65da80b71ab4673725cb08930690e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/05a5be48ac67f261144fd56bff656ca8ecc07348 b/fuzz/gnutls_psk_client_fuzzer.in/05a5be48ac67f261144fd56bff656ca8ecc07348 new file mode 100644 index 0000000000..cf247700dd Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/05a5be48ac67f261144fd56bff656ca8ecc07348 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/05d90b78d4340f120c5e1a91ed53edd62af0a7a2 b/fuzz/gnutls_psk_client_fuzzer.in/05d90b78d4340f120c5e1a91ed53edd62af0a7a2 new file mode 100644 index 0000000000..9bf69a1e45 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/05d90b78d4340f120c5e1a91ed53edd62af0a7a2 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/06d3ff34b72b452cb5d1527f31079b3ec9973c23 b/fuzz/gnutls_psk_client_fuzzer.in/06d3ff34b72b452cb5d1527f31079b3ec9973c23 new file mode 100644 index 0000000000..9d78e60cf2 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/06d3ff34b72b452cb5d1527f31079b3ec9973c23 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/08948ded5f3b217af53127b3e7c6afb3ae39c9ec b/fuzz/gnutls_psk_client_fuzzer.in/08948ded5f3b217af53127b3e7c6afb3ae39c9ec new file mode 100644 index 0000000000..cee69dc147 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/08948ded5f3b217af53127b3e7c6afb3ae39c9ec differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/090d5df0e595411cfb6138aeb067933e8302fae7 b/fuzz/gnutls_psk_client_fuzzer.in/090d5df0e595411cfb6138aeb067933e8302fae7 new file mode 100644 index 0000000000..f80d6081b8 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/090d5df0e595411cfb6138aeb067933e8302fae7 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/09976819ddc2bd3088367a1246f35f96a6682109 b/fuzz/gnutls_psk_client_fuzzer.in/09976819ddc2bd3088367a1246f35f96a6682109 new file mode 100644 index 0000000000..dedb07a273 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/09976819ddc2bd3088367a1246f35f96a6682109 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/09b281f20eaa6300dc82adc279863e4c61f5931a b/fuzz/gnutls_psk_client_fuzzer.in/09b281f20eaa6300dc82adc279863e4c61f5931a new file mode 100644 index 0000000000..7b8626fc8c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/09b281f20eaa6300dc82adc279863e4c61f5931a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/0a19518b0935c7f370f60a9b94a74753be17e767 b/fuzz/gnutls_psk_client_fuzzer.in/0a19518b0935c7f370f60a9b94a74753be17e767 new file mode 100644 index 0000000000..358d9808fa Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/0a19518b0935c7f370f60a9b94a74753be17e767 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/0a368991dd291c94bc04c22d055a39538e398354 b/fuzz/gnutls_psk_client_fuzzer.in/0a368991dd291c94bc04c22d055a39538e398354 new file mode 100644 index 0000000000..65a9824f13 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/0a368991dd291c94bc04c22d055a39538e398354 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/0b234dd8941a4e6e291c87c2a4d67e5e60cc70be b/fuzz/gnutls_psk_client_fuzzer.in/0b234dd8941a4e6e291c87c2a4d67e5e60cc70be new file mode 100644 index 0000000000..3f8e39ea42 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/0b234dd8941a4e6e291c87c2a4d67e5e60cc70be differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/0c97bb613565a6c26b0f6833f176167d7c440086 b/fuzz/gnutls_psk_client_fuzzer.in/0c97bb613565a6c26b0f6833f176167d7c440086 new file mode 100644 index 0000000000..a2891ea8c9 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/0c97bb613565a6c26b0f6833f176167d7c440086 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/0cf1db466820dc2fcd687f604b625cc8e950a7cd b/fuzz/gnutls_psk_client_fuzzer.in/0cf1db466820dc2fcd687f604b625cc8e950a7cd new file mode 100644 index 0000000000..6b5f1af727 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/0cf1db466820dc2fcd687f604b625cc8e950a7cd differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/0d586bc05f590768995933b70608c23ca79d6b30 b/fuzz/gnutls_psk_client_fuzzer.in/0d586bc05f590768995933b70608c23ca79d6b30 new file mode 100644 index 0000000000..026ca577b5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/0d586bc05f590768995933b70608c23ca79d6b30 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/0da2bde85aae7394c2dbf987c1cfa7ed3bd46581 b/fuzz/gnutls_psk_client_fuzzer.in/0da2bde85aae7394c2dbf987c1cfa7ed3bd46581 new file mode 100644 index 0000000000..248aa3568d Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/0da2bde85aae7394c2dbf987c1cfa7ed3bd46581 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/0debc9f7ad5cbfeba916a06d586362154cd9a25c b/fuzz/gnutls_psk_client_fuzzer.in/0debc9f7ad5cbfeba916a06d586362154cd9a25c new file mode 100644 index 0000000000..b53cd7b478 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/0debc9f7ad5cbfeba916a06d586362154cd9a25c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/100946518b77f3f39647fcd73e743856a6a38e96 b/fuzz/gnutls_psk_client_fuzzer.in/100946518b77f3f39647fcd73e743856a6a38e96 new file mode 100644 index 0000000000..8ff956408c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/100946518b77f3f39647fcd73e743856a6a38e96 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/104a21bdd5da995dbd0f6e0768206bca6a104354 b/fuzz/gnutls_psk_client_fuzzer.in/104a21bdd5da995dbd0f6e0768206bca6a104354 new file mode 100644 index 0000000000..770b304866 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/104a21bdd5da995dbd0f6e0768206bca6a104354 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/108fee7a30dca74357f99aede1cccb188e02b91c b/fuzz/gnutls_psk_client_fuzzer.in/108fee7a30dca74357f99aede1cccb188e02b91c new file mode 100644 index 0000000000..08bda361c4 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/108fee7a30dca74357f99aede1cccb188e02b91c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/10b515eca9fedeb1daa218807408af9ea424778d b/fuzz/gnutls_psk_client_fuzzer.in/10b515eca9fedeb1daa218807408af9ea424778d new file mode 100644 index 0000000000..0693bf666c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/10b515eca9fedeb1daa218807408af9ea424778d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/10c983a702e6dcbd52f52d9a8c848045a0ca323d b/fuzz/gnutls_psk_client_fuzzer.in/10c983a702e6dcbd52f52d9a8c848045a0ca323d new file mode 100644 index 0000000000..295f96a2c1 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/10c983a702e6dcbd52f52d9a8c848045a0ca323d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/10f668d98525569b3ca1adfd6688cb4c3c1c51d3 b/fuzz/gnutls_psk_client_fuzzer.in/10f668d98525569b3ca1adfd6688cb4c3c1c51d3 new file mode 100644 index 0000000000..4f8b51d041 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/10f668d98525569b3ca1adfd6688cb4c3c1c51d3 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/10f6998ca493840cd3ba6f16589181a21f918af3 b/fuzz/gnutls_psk_client_fuzzer.in/10f6998ca493840cd3ba6f16589181a21f918af3 new file mode 100644 index 0000000000..5f2c5d9425 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/10f6998ca493840cd3ba6f16589181a21f918af3 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/110646c8e63d2c8ddb844ff62b85e3448b334973 b/fuzz/gnutls_psk_client_fuzzer.in/110646c8e63d2c8ddb844ff62b85e3448b334973 new file mode 100644 index 0000000000..789394ec81 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/110646c8e63d2c8ddb844ff62b85e3448b334973 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/1108cd533a4362768d585050721c5dd6768bbe3c b/fuzz/gnutls_psk_client_fuzzer.in/1108cd533a4362768d585050721c5dd6768bbe3c new file mode 100644 index 0000000000..fa89719f15 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/1108cd533a4362768d585050721c5dd6768bbe3c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/1110f7a4c1cc5f3597aa320e218d2156426dd8ed b/fuzz/gnutls_psk_client_fuzzer.in/1110f7a4c1cc5f3597aa320e218d2156426dd8ed new file mode 100644 index 0000000000..d604e39a14 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/1110f7a4c1cc5f3597aa320e218d2156426dd8ed differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/11ff8d8f4cd702dd1bfa96c7dffe1eb95abd2d4d b/fuzz/gnutls_psk_client_fuzzer.in/11ff8d8f4cd702dd1bfa96c7dffe1eb95abd2d4d new file mode 100644 index 0000000000..20dd38180c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/11ff8d8f4cd702dd1bfa96c7dffe1eb95abd2d4d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/127d9197140f932204b86292ab7c58d9129c682c b/fuzz/gnutls_psk_client_fuzzer.in/127d9197140f932204b86292ab7c58d9129c682c new file mode 100644 index 0000000000..88b357594d Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/127d9197140f932204b86292ab7c58d9129c682c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/13b80b80d97a2bf78b4635af5c19263835f0d8a2 b/fuzz/gnutls_psk_client_fuzzer.in/13b80b80d97a2bf78b4635af5c19263835f0d8a2 new file mode 100644 index 0000000000..d9a749259e Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/13b80b80d97a2bf78b4635af5c19263835f0d8a2 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/14aecf2c745992c413767b97967b23d914ca6a54 b/fuzz/gnutls_psk_client_fuzzer.in/14aecf2c745992c413767b97967b23d914ca6a54 new file mode 100644 index 0000000000..a47b5ebd94 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/14aecf2c745992c413767b97967b23d914ca6a54 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/155035cc6644f2e5ab2c2182a8d0339c83ad571f b/fuzz/gnutls_psk_client_fuzzer.in/155035cc6644f2e5ab2c2182a8d0339c83ad571f new file mode 100644 index 0000000000..b46674768f Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/155035cc6644f2e5ab2c2182a8d0339c83ad571f differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/155261fd2aa49cc1a155c4b5379e5a6c84ed1490 b/fuzz/gnutls_psk_client_fuzzer.in/155261fd2aa49cc1a155c4b5379e5a6c84ed1490 new file mode 100644 index 0000000000..629790c3bb Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/155261fd2aa49cc1a155c4b5379e5a6c84ed1490 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/15b783e2a18eb7d01a1c2dca45f19df305d5b41d b/fuzz/gnutls_psk_client_fuzzer.in/15b783e2a18eb7d01a1c2dca45f19df305d5b41d new file mode 100644 index 0000000000..08917738d0 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/15b783e2a18eb7d01a1c2dca45f19df305d5b41d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/16740e44d0e05f6f1fc0dd7b6751d1fbf19b2dcb b/fuzz/gnutls_psk_client_fuzzer.in/16740e44d0e05f6f1fc0dd7b6751d1fbf19b2dcb new file mode 100644 index 0000000000..9204d75115 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/16740e44d0e05f6f1fc0dd7b6751d1fbf19b2dcb differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/16d3547a319bd710bb58202956152bf4151a68a8 b/fuzz/gnutls_psk_client_fuzzer.in/16d3547a319bd710bb58202956152bf4151a68a8 new file mode 100644 index 0000000000..440176d766 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/16d3547a319bd710bb58202956152bf4151a68a8 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/1805c62794d62b883fe6c1175a3868e4a1f9b149 b/fuzz/gnutls_psk_client_fuzzer.in/1805c62794d62b883fe6c1175a3868e4a1f9b149 new file mode 100644 index 0000000000..60b9f3d135 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/1805c62794d62b883fe6c1175a3868e4a1f9b149 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/18292f1963d7e5e7a5c1126762f5771106b67374 b/fuzz/gnutls_psk_client_fuzzer.in/18292f1963d7e5e7a5c1126762f5771106b67374 new file mode 100644 index 0000000000..bc3a277e2d Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/18292f1963d7e5e7a5c1126762f5771106b67374 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/188c1c2360eff8d739f75e0802ebbf1d5998cdbd b/fuzz/gnutls_psk_client_fuzzer.in/188c1c2360eff8d739f75e0802ebbf1d5998cdbd new file mode 100644 index 0000000000..0ce4021da0 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/188c1c2360eff8d739f75e0802ebbf1d5998cdbd differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/19f9474dade672c13eca8e4093c5e2348658d8eb b/fuzz/gnutls_psk_client_fuzzer.in/19f9474dade672c13eca8e4093c5e2348658d8eb new file mode 100644 index 0000000000..7065e9e517 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/19f9474dade672c13eca8e4093c5e2348658d8eb differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/1b0aa69fc1e0a011bf860fd4b59778eac4d3e245 b/fuzz/gnutls_psk_client_fuzzer.in/1b0aa69fc1e0a011bf860fd4b59778eac4d3e245 new file mode 100644 index 0000000000..ca6129fa72 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/1b0aa69fc1e0a011bf860fd4b59778eac4d3e245 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/1cdf084ab2d5455ac0b8f4c07704caf80f08505c b/fuzz/gnutls_psk_client_fuzzer.in/1cdf084ab2d5455ac0b8f4c07704caf80f08505c new file mode 100644 index 0000000000..330ac6a322 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/1cdf084ab2d5455ac0b8f4c07704caf80f08505c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/1ce36800b1e5f3dd354f9808d3f8e681c6f4ce25 b/fuzz/gnutls_psk_client_fuzzer.in/1ce36800b1e5f3dd354f9808d3f8e681c6f4ce25 new file mode 100644 index 0000000000..8b6424377e Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/1ce36800b1e5f3dd354f9808d3f8e681c6f4ce25 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/1f660d7e34268885677552ac6156a1e8044a4028 b/fuzz/gnutls_psk_client_fuzzer.in/1f660d7e34268885677552ac6156a1e8044a4028 new file mode 100644 index 0000000000..9f5a50b30b Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/1f660d7e34268885677552ac6156a1e8044a4028 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/1faeff7d627f81ec1b7c21b1a28a4bb3aeb2d1b9 b/fuzz/gnutls_psk_client_fuzzer.in/1faeff7d627f81ec1b7c21b1a28a4bb3aeb2d1b9 new file mode 100644 index 0000000000..025b44f582 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/1faeff7d627f81ec1b7c21b1a28a4bb3aeb2d1b9 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/20add2680730e5bc0ffa7b522fb586c366f2916a b/fuzz/gnutls_psk_client_fuzzer.in/20add2680730e5bc0ffa7b522fb586c366f2916a new file mode 100644 index 0000000000..1e2d3077e5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/20add2680730e5bc0ffa7b522fb586c366f2916a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/21a6c1c57e1970324e7ea486bcf9e0e7891b45d4 b/fuzz/gnutls_psk_client_fuzzer.in/21a6c1c57e1970324e7ea486bcf9e0e7891b45d4 new file mode 100644 index 0000000000..ddcca1b18f Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/21a6c1c57e1970324e7ea486bcf9e0e7891b45d4 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/21d76c0f995ccb517454c76322971b5e685fc93c b/fuzz/gnutls_psk_client_fuzzer.in/21d76c0f995ccb517454c76322971b5e685fc93c new file mode 100644 index 0000000000..ca1992b9b6 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/21d76c0f995ccb517454c76322971b5e685fc93c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/22b58094d46d7d0455881a939528263b584c0101 b/fuzz/gnutls_psk_client_fuzzer.in/22b58094d46d7d0455881a939528263b584c0101 new file mode 100644 index 0000000000..7eb772badc Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/22b58094d46d7d0455881a939528263b584c0101 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/245323b00d3fd8497452db78c218d62f697ba9af b/fuzz/gnutls_psk_client_fuzzer.in/245323b00d3fd8497452db78c218d62f697ba9af new file mode 100644 index 0000000000..f36f455114 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/245323b00d3fd8497452db78c218d62f697ba9af differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/247e15a99918b6d2ee5ab7688c5222ada41c75fa b/fuzz/gnutls_psk_client_fuzzer.in/247e15a99918b6d2ee5ab7688c5222ada41c75fa new file mode 100644 index 0000000000..e26b7d3e3f Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/247e15a99918b6d2ee5ab7688c5222ada41c75fa differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/265a98ea630ecbf0b25c593c1e7807a7fd06615e b/fuzz/gnutls_psk_client_fuzzer.in/265a98ea630ecbf0b25c593c1e7807a7fd06615e new file mode 100644 index 0000000000..75fad44fa8 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/265a98ea630ecbf0b25c593c1e7807a7fd06615e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/26660da01567f74cfaf18f9e89a5b0766d48460b b/fuzz/gnutls_psk_client_fuzzer.in/26660da01567f74cfaf18f9e89a5b0766d48460b new file mode 100644 index 0000000000..3664d2a50c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/26660da01567f74cfaf18f9e89a5b0766d48460b differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/2751893270bee08f758d1f49a71dafceac2298db b/fuzz/gnutls_psk_client_fuzzer.in/2751893270bee08f758d1f49a71dafceac2298db new file mode 100644 index 0000000000..4845434031 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/2751893270bee08f758d1f49a71dafceac2298db differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/28d33b4d5e7ad312901c9f51023d2f7ab605f9fa b/fuzz/gnutls_psk_client_fuzzer.in/28d33b4d5e7ad312901c9f51023d2f7ab605f9fa new file mode 100644 index 0000000000..4d3ba239fc Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/28d33b4d5e7ad312901c9f51023d2f7ab605f9fa differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/299aefd014187633d364aa42facf4c8191211c37 b/fuzz/gnutls_psk_client_fuzzer.in/299aefd014187633d364aa42facf4c8191211c37 new file mode 100644 index 0000000000..2ee205418e Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/299aefd014187633d364aa42facf4c8191211c37 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/2a5449d0c939ee735d7b13234ae54b344a05cd98 b/fuzz/gnutls_psk_client_fuzzer.in/2a5449d0c939ee735d7b13234ae54b344a05cd98 new file mode 100644 index 0000000000..f738574fa8 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/2a5449d0c939ee735d7b13234ae54b344a05cd98 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/2a58745d215f150503ff8cca478d84379704d745 b/fuzz/gnutls_psk_client_fuzzer.in/2a58745d215f150503ff8cca478d84379704d745 new file mode 100644 index 0000000000..b915be1fe6 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/2a58745d215f150503ff8cca478d84379704d745 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/2c558f3fecf4e8d56135ed0ad15389586253760f b/fuzz/gnutls_psk_client_fuzzer.in/2c558f3fecf4e8d56135ed0ad15389586253760f new file mode 100644 index 0000000000..0258ce62ec Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/2c558f3fecf4e8d56135ed0ad15389586253760f differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/2c712725fe80e07044f6dfdd1ef6bd273dafb8fa b/fuzz/gnutls_psk_client_fuzzer.in/2c712725fe80e07044f6dfdd1ef6bd273dafb8fa new file mode 100644 index 0000000000..ac42f1688d Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/2c712725fe80e07044f6dfdd1ef6bd273dafb8fa differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/2d7aad7024acba1633f984c8960bd25269e0127f b/fuzz/gnutls_psk_client_fuzzer.in/2d7aad7024acba1633f984c8960bd25269e0127f new file mode 100644 index 0000000000..511cbc3f70 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/2d7aad7024acba1633f984c8960bd25269e0127f differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/2e0afa7f7c2ac85a4a8b48b177d5e87c3e18b7a9 b/fuzz/gnutls_psk_client_fuzzer.in/2e0afa7f7c2ac85a4a8b48b177d5e87c3e18b7a9 new file mode 100644 index 0000000000..ad396908a1 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/2e0afa7f7c2ac85a4a8b48b177d5e87c3e18b7a9 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/2f1b0fe0c65dec6561789b1a80912b03f0fdfab6 b/fuzz/gnutls_psk_client_fuzzer.in/2f1b0fe0c65dec6561789b1a80912b03f0fdfab6 new file mode 100644 index 0000000000..a3ddcdc473 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/2f1b0fe0c65dec6561789b1a80912b03f0fdfab6 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3251f1355c59f0a115788235d2c00c69e98c94fa b/fuzz/gnutls_psk_client_fuzzer.in/3251f1355c59f0a115788235d2c00c69e98c94fa new file mode 100644 index 0000000000..2c20e8987c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3251f1355c59f0a115788235d2c00c69e98c94fa differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3290ab0e92de696516cc57a0cc1799aba9df4077 b/fuzz/gnutls_psk_client_fuzzer.in/3290ab0e92de696516cc57a0cc1799aba9df4077 new file mode 100644 index 0000000000..96f7103329 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3290ab0e92de696516cc57a0cc1799aba9df4077 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/32ba496e9b29dbf1b18e4eb49fce1683f9bb233d b/fuzz/gnutls_psk_client_fuzzer.in/32ba496e9b29dbf1b18e4eb49fce1683f9bb233d new file mode 100644 index 0000000000..fe8c6febd0 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/32ba496e9b29dbf1b18e4eb49fce1683f9bb233d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/33e4b5381783e2b74bc5117a1f63086968c643cd b/fuzz/gnutls_psk_client_fuzzer.in/33e4b5381783e2b74bc5117a1f63086968c643cd new file mode 100644 index 0000000000..3ae9996501 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/33e4b5381783e2b74bc5117a1f63086968c643cd differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/345d97a8e8584ef87bfa03c1a1f7ba2d59c72a4e b/fuzz/gnutls_psk_client_fuzzer.in/345d97a8e8584ef87bfa03c1a1f7ba2d59c72a4e new file mode 100644 index 0000000000..90fad10bc7 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/345d97a8e8584ef87bfa03c1a1f7ba2d59c72a4e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/35a90f363a687cf7f73cdd41009e3450234427e3 b/fuzz/gnutls_psk_client_fuzzer.in/35a90f363a687cf7f73cdd41009e3450234427e3 new file mode 100644 index 0000000000..3f9ff5bef8 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/35a90f363a687cf7f73cdd41009e3450234427e3 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/370addea8a4b21cd137de1203f2474822962d538 b/fuzz/gnutls_psk_client_fuzzer.in/370addea8a4b21cd137de1203f2474822962d538 new file mode 100644 index 0000000000..78634b5019 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/370addea8a4b21cd137de1203f2474822962d538 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3881c3e83ad6b3f34ffccc01ca44eb6b0bc4656a b/fuzz/gnutls_psk_client_fuzzer.in/3881c3e83ad6b3f34ffccc01ca44eb6b0bc4656a new file mode 100644 index 0000000000..86e88fb5fa Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3881c3e83ad6b3f34ffccc01ca44eb6b0bc4656a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3897273a6b056315f53911aac3bb294b02795f74 b/fuzz/gnutls_psk_client_fuzzer.in/3897273a6b056315f53911aac3bb294b02795f74 new file mode 100644 index 0000000000..d5c2f2b5ae Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3897273a6b056315f53911aac3bb294b02795f74 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3a2f8b7c1ed7b5feedd5e75e5fda47c3f84474ff b/fuzz/gnutls_psk_client_fuzzer.in/3a2f8b7c1ed7b5feedd5e75e5fda47c3f84474ff new file mode 100644 index 0000000000..22b8abad47 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3a2f8b7c1ed7b5feedd5e75e5fda47c3f84474ff differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3b6d9131ff71c3834db0e771f05588802e6d455d b/fuzz/gnutls_psk_client_fuzzer.in/3b6d9131ff71c3834db0e771f05588802e6d455d new file mode 100644 index 0000000000..0501b5436b Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3b6d9131ff71c3834db0e771f05588802e6d455d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3c8ecc66334c1df6d093df793316cab90c25badd b/fuzz/gnutls_psk_client_fuzzer.in/3c8ecc66334c1df6d093df793316cab90c25badd new file mode 100644 index 0000000000..403412aa29 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3c8ecc66334c1df6d093df793316cab90c25badd differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3cc0cb370df3d9fb5ad55f1f2763ac1e54e9eaf5 b/fuzz/gnutls_psk_client_fuzzer.in/3cc0cb370df3d9fb5ad55f1f2763ac1e54e9eaf5 new file mode 100644 index 0000000000..c0ebf690e9 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3cc0cb370df3d9fb5ad55f1f2763ac1e54e9eaf5 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3d4de497c970ca05e9da1c02e583e7ce4468ca3d b/fuzz/gnutls_psk_client_fuzzer.in/3d4de497c970ca05e9da1c02e583e7ce4468ca3d new file mode 100644 index 0000000000..a51202aa88 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3d4de497c970ca05e9da1c02e583e7ce4468ca3d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3ed080198912e5f4a83e245cf0e34873ee7335cd b/fuzz/gnutls_psk_client_fuzzer.in/3ed080198912e5f4a83e245cf0e34873ee7335cd new file mode 100644 index 0000000000..281220b128 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3ed080198912e5f4a83e245cf0e34873ee7335cd differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3f8372525bfebace3557dfa56f19937c18220e55 b/fuzz/gnutls_psk_client_fuzzer.in/3f8372525bfebace3557dfa56f19937c18220e55 new file mode 100644 index 0000000000..7478797fb4 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3f8372525bfebace3557dfa56f19937c18220e55 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/3fb518002cc55679ca7ae6e0e540ecc9db4b1558 b/fuzz/gnutls_psk_client_fuzzer.in/3fb518002cc55679ca7ae6e0e540ecc9db4b1558 new file mode 100644 index 0000000000..52a0b5a711 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/3fb518002cc55679ca7ae6e0e540ecc9db4b1558 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/4052d54fbc65cdb6ea6b4560deb9597a84a51652 b/fuzz/gnutls_psk_client_fuzzer.in/4052d54fbc65cdb6ea6b4560deb9597a84a51652 new file mode 100644 index 0000000000..081e46c70e Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/4052d54fbc65cdb6ea6b4560deb9597a84a51652 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/414e49360c24422a6aa3fa5a2d03f4e28ca52a8a b/fuzz/gnutls_psk_client_fuzzer.in/414e49360c24422a6aa3fa5a2d03f4e28ca52a8a new file mode 100644 index 0000000000..10d5f2d642 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/414e49360c24422a6aa3fa5a2d03f4e28ca52a8a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/4348e0c03a30b9ac7dcd7236ce3fc2793c9e7d4e b/fuzz/gnutls_psk_client_fuzzer.in/4348e0c03a30b9ac7dcd7236ce3fc2793c9e7d4e new file mode 100644 index 0000000000..8b2828ce32 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/4348e0c03a30b9ac7dcd7236ce3fc2793c9e7d4e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f b/fuzz/gnutls_psk_client_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f new file mode 100644 index 0000000000..5cf1a797d5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/43b09acee035991e16c04ef7d87d1c3e05d00d92 b/fuzz/gnutls_psk_client_fuzzer.in/43b09acee035991e16c04ef7d87d1c3e05d00d92 new file mode 100644 index 0000000000..7304bfbbdd Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/43b09acee035991e16c04ef7d87d1c3e05d00d92 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/441ff4bf0cd3553b008cd373190387786d5d0e37 b/fuzz/gnutls_psk_client_fuzzer.in/441ff4bf0cd3553b008cd373190387786d5d0e37 new file mode 100644 index 0000000000..bee6e2b50c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/441ff4bf0cd3553b008cd373190387786d5d0e37 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/449f5922c1776ee33981f39ef55ffe6caf2561a9 b/fuzz/gnutls_psk_client_fuzzer.in/449f5922c1776ee33981f39ef55ffe6caf2561a9 new file mode 100644 index 0000000000..33512165b3 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/449f5922c1776ee33981f39ef55ffe6caf2561a9 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/456c42f6139c6af9bceeb8d19e06d93d1159608f b/fuzz/gnutls_psk_client_fuzzer.in/456c42f6139c6af9bceeb8d19e06d93d1159608f new file mode 100644 index 0000000000..d53b7ac49f Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/456c42f6139c6af9bceeb8d19e06d93d1159608f differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/470a7d6e41fb4507a93d35902496ce0a8832cd98 b/fuzz/gnutls_psk_client_fuzzer.in/470a7d6e41fb4507a93d35902496ce0a8832cd98 new file mode 100644 index 0000000000..e175350976 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/470a7d6e41fb4507a93d35902496ce0a8832cd98 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/48a854525d8528d3e44c648178180edac60506bc b/fuzz/gnutls_psk_client_fuzzer.in/48a854525d8528d3e44c648178180edac60506bc new file mode 100644 index 0000000000..499dd87c62 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/48a854525d8528d3e44c648178180edac60506bc differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/49711f362e73d887e65f943e26bba836b1b3e13e b/fuzz/gnutls_psk_client_fuzzer.in/49711f362e73d887e65f943e26bba836b1b3e13e new file mode 100644 index 0000000000..88865069dd Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/49711f362e73d887e65f943e26bba836b1b3e13e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/4b4612278c14bdc173442dcb4ecf681521e53676 b/fuzz/gnutls_psk_client_fuzzer.in/4b4612278c14bdc173442dcb4ecf681521e53676 new file mode 100644 index 0000000000..80f801b845 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/4b4612278c14bdc173442dcb4ecf681521e53676 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/4bc75e0ef3bd4841549874108886ff5a78cdb588 b/fuzz/gnutls_psk_client_fuzzer.in/4bc75e0ef3bd4841549874108886ff5a78cdb588 new file mode 100644 index 0000000000..743970b518 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/4bc75e0ef3bd4841549874108886ff5a78cdb588 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/4c584e6aa373f9d3bdc570e4d72312f813fe3415 b/fuzz/gnutls_psk_client_fuzzer.in/4c584e6aa373f9d3bdc570e4d72312f813fe3415 new file mode 100644 index 0000000000..88c30ea26d Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/4c584e6aa373f9d3bdc570e4d72312f813fe3415 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/4c8fe96a6586b979c6402c7036d6ded9f0aab72f b/fuzz/gnutls_psk_client_fuzzer.in/4c8fe96a6586b979c6402c7036d6ded9f0aab72f new file mode 100644 index 0000000000..965758e938 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/4c8fe96a6586b979c6402c7036d6ded9f0aab72f differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/4d81e4ee7d9fcb549a46c748610365e8ffebe199 b/fuzz/gnutls_psk_client_fuzzer.in/4d81e4ee7d9fcb549a46c748610365e8ffebe199 new file mode 100644 index 0000000000..473050ac2c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/4d81e4ee7d9fcb549a46c748610365e8ffebe199 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/4dc71f2e074c6e9329520b0909cf3bcb2a25a600 b/fuzz/gnutls_psk_client_fuzzer.in/4dc71f2e074c6e9329520b0909cf3bcb2a25a600 new file mode 100644 index 0000000000..944e07f1dc Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/4dc71f2e074c6e9329520b0909cf3bcb2a25a600 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/4dd412f729e7c6a364cb774094926eae93fc11a7 b/fuzz/gnutls_psk_client_fuzzer.in/4dd412f729e7c6a364cb774094926eae93fc11a7 new file mode 100644 index 0000000000..99af77f12c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/4dd412f729e7c6a364cb774094926eae93fc11a7 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/4e173c2ee22f8864517ca5dd43a89b41b194629b b/fuzz/gnutls_psk_client_fuzzer.in/4e173c2ee22f8864517ca5dd43a89b41b194629b new file mode 100644 index 0000000000..08a470394f Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/4e173c2ee22f8864517ca5dd43a89b41b194629b differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/4f9ee81d257a9be1d173a58ac87ccd6f69f4e514 b/fuzz/gnutls_psk_client_fuzzer.in/4f9ee81d257a9be1d173a58ac87ccd6f69f4e514 new file mode 100644 index 0000000000..1f907b0eb7 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/4f9ee81d257a9be1d173a58ac87ccd6f69f4e514 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/50df469a4fd7278ec2c2feb6d5024b1492e5db4f b/fuzz/gnutls_psk_client_fuzzer.in/50df469a4fd7278ec2c2feb6d5024b1492e5db4f new file mode 100644 index 0000000000..d2bbc1eb6e Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/50df469a4fd7278ec2c2feb6d5024b1492e5db4f differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/52d2fdb26c5256f264ed8a975e3327153d71a8f7 b/fuzz/gnutls_psk_client_fuzzer.in/52d2fdb26c5256f264ed8a975e3327153d71a8f7 new file mode 100644 index 0000000000..e24f39c946 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/52d2fdb26c5256f264ed8a975e3327153d71a8f7 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/52df17b0f2d5b4a14391e30f4ccd80829b15f1cd b/fuzz/gnutls_psk_client_fuzzer.in/52df17b0f2d5b4a14391e30f4ccd80829b15f1cd new file mode 100644 index 0000000000..205fd5f702 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/52df17b0f2d5b4a14391e30f4ccd80829b15f1cd differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/5479101bfe77caecb743cb4ce0cb49c7167bf8ce b/fuzz/gnutls_psk_client_fuzzer.in/5479101bfe77caecb743cb4ce0cb49c7167bf8ce new file mode 100644 index 0000000000..ae4a4f4416 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/5479101bfe77caecb743cb4ce0cb49c7167bf8ce differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/549dea2d27216727b838b7bea7d9e826af447781 b/fuzz/gnutls_psk_client_fuzzer.in/549dea2d27216727b838b7bea7d9e826af447781 new file mode 100644 index 0000000000..f35aa7ef86 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/549dea2d27216727b838b7bea7d9e826af447781 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/5563923ebe7b6c7c72b5e48a70407ec11fc005cf b/fuzz/gnutls_psk_client_fuzzer.in/5563923ebe7b6c7c72b5e48a70407ec11fc005cf new file mode 100644 index 0000000000..3e181a68cd Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/5563923ebe7b6c7c72b5e48a70407ec11fc005cf differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/55669582ca03de9ec0ddf5bda801b5b447dfd475 b/fuzz/gnutls_psk_client_fuzzer.in/55669582ca03de9ec0ddf5bda801b5b447dfd475 new file mode 100644 index 0000000000..bb72bdd498 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/55669582ca03de9ec0ddf5bda801b5b447dfd475 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/55f731bcfb631138719acd8c03c9b9791a59ac15 b/fuzz/gnutls_psk_client_fuzzer.in/55f731bcfb631138719acd8c03c9b9791a59ac15 new file mode 100644 index 0000000000..b67c0f5ee0 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/55f731bcfb631138719acd8c03c9b9791a59ac15 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/56484a0119be181852259b1a4a01d3299f830152 b/fuzz/gnutls_psk_client_fuzzer.in/56484a0119be181852259b1a4a01d3299f830152 new file mode 100644 index 0000000000..6027fb9495 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/56484a0119be181852259b1a4a01d3299f830152 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/56d7e2b701abb349eee0ec0ef5eb48320ba55190 b/fuzz/gnutls_psk_client_fuzzer.in/56d7e2b701abb349eee0ec0ef5eb48320ba55190 new file mode 100644 index 0000000000..4a68bdb108 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/56d7e2b701abb349eee0ec0ef5eb48320ba55190 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/56f951162730e19706775b404c67a5a0a29cd4e4 b/fuzz/gnutls_psk_client_fuzzer.in/56f951162730e19706775b404c67a5a0a29cd4e4 new file mode 100644 index 0000000000..a17c02c859 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/56f951162730e19706775b404c67a5a0a29cd4e4 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/58addd5fca1e609d6b8ffbfa773a5395aa95e1d0 b/fuzz/gnutls_psk_client_fuzzer.in/58addd5fca1e609d6b8ffbfa773a5395aa95e1d0 new file mode 100644 index 0000000000..9bc51abb2c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/58addd5fca1e609d6b8ffbfa773a5395aa95e1d0 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/5a0a1a0c531beff9a90bdad1a8f107db4be3d8c9 b/fuzz/gnutls_psk_client_fuzzer.in/5a0a1a0c531beff9a90bdad1a8f107db4be3d8c9 new file mode 100644 index 0000000000..d20af17798 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/5a0a1a0c531beff9a90bdad1a8f107db4be3d8c9 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/5a2f263dedb768d558d27276852264b0c1443886 b/fuzz/gnutls_psk_client_fuzzer.in/5a2f263dedb768d558d27276852264b0c1443886 new file mode 100644 index 0000000000..08fcee8736 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/5a2f263dedb768d558d27276852264b0c1443886 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/5a3c77ceff3d2de35120b6ea2ff24d1cc3d3a971 b/fuzz/gnutls_psk_client_fuzzer.in/5a3c77ceff3d2de35120b6ea2ff24d1cc3d3a971 new file mode 100644 index 0000000000..57fd0fbd0f Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/5a3c77ceff3d2de35120b6ea2ff24d1cc3d3a971 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/5ad83bade3ef011db7ad5d5a8dc342fe591b62d5 b/fuzz/gnutls_psk_client_fuzzer.in/5ad83bade3ef011db7ad5d5a8dc342fe591b62d5 new file mode 100644 index 0000000000..673d35a7a3 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/5ad83bade3ef011db7ad5d5a8dc342fe591b62d5 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/5ca5dcc33326edcb33318ff076349a2adeb50078 b/fuzz/gnutls_psk_client_fuzzer.in/5ca5dcc33326edcb33318ff076349a2adeb50078 new file mode 100644 index 0000000000..5c2d4a9855 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/5ca5dcc33326edcb33318ff076349a2adeb50078 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/5dbc527f7ce79c3907f665ee3351794a5b0a134c b/fuzz/gnutls_psk_client_fuzzer.in/5dbc527f7ce79c3907f665ee3351794a5b0a134c new file mode 100644 index 0000000000..27b961d760 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/5dbc527f7ce79c3907f665ee3351794a5b0a134c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/5deeb7f67eab41cb89163344531236071df7d196 b/fuzz/gnutls_psk_client_fuzzer.in/5deeb7f67eab41cb89163344531236071df7d196 new file mode 100644 index 0000000000..5901f236e1 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/5deeb7f67eab41cb89163344531236071df7d196 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/5f55307032623c30c271830e2415d873edec3b9e b/fuzz/gnutls_psk_client_fuzzer.in/5f55307032623c30c271830e2415d873edec3b9e new file mode 100644 index 0000000000..fc66a8c642 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/5f55307032623c30c271830e2415d873edec3b9e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/601385b3a216078baad9f9772943ff38628c9dc2 b/fuzz/gnutls_psk_client_fuzzer.in/601385b3a216078baad9f9772943ff38628c9dc2 new file mode 100644 index 0000000000..36b70faee5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/601385b3a216078baad9f9772943ff38628c9dc2 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/60ac57376152e433d7241f3844cc5c01a024fbfb b/fuzz/gnutls_psk_client_fuzzer.in/60ac57376152e433d7241f3844cc5c01a024fbfb new file mode 100644 index 0000000000..11747869a5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/60ac57376152e433d7241f3844cc5c01a024fbfb differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/61d037c00b2981de2717b091b5c976f394034dfb b/fuzz/gnutls_psk_client_fuzzer.in/61d037c00b2981de2717b091b5c976f394034dfb new file mode 100644 index 0000000000..288e046ae0 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/61d037c00b2981de2717b091b5c976f394034dfb differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/626f8a98cbe46257342747a91d207b55a0c0ae9d b/fuzz/gnutls_psk_client_fuzzer.in/626f8a98cbe46257342747a91d207b55a0c0ae9d new file mode 100644 index 0000000000..fe18ac6d99 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/626f8a98cbe46257342747a91d207b55a0c0ae9d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/63cfdce3ea85000872cf418949aacb3c8c282a9e b/fuzz/gnutls_psk_client_fuzzer.in/63cfdce3ea85000872cf418949aacb3c8c282a9e new file mode 100644 index 0000000000..929587bd86 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/63cfdce3ea85000872cf418949aacb3c8c282a9e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/63f07d7afb53ca6a22331aa2f3c29c275cd2b331 b/fuzz/gnutls_psk_client_fuzzer.in/63f07d7afb53ca6a22331aa2f3c29c275cd2b331 new file mode 100644 index 0000000000..82ce9c1929 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/63f07d7afb53ca6a22331aa2f3c29c275cd2b331 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/63f1cbd3218a9ab60526b825b46ac31b2ab31484 b/fuzz/gnutls_psk_client_fuzzer.in/63f1cbd3218a9ab60526b825b46ac31b2ab31484 new file mode 100644 index 0000000000..d1f2cd19f4 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/63f1cbd3218a9ab60526b825b46ac31b2ab31484 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/64db11ab07e2f5940a54e60815309538eeeb97bf b/fuzz/gnutls_psk_client_fuzzer.in/64db11ab07e2f5940a54e60815309538eeeb97bf new file mode 100644 index 0000000000..d1675e9eef Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/64db11ab07e2f5940a54e60815309538eeeb97bf differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/64e1061924c94e238ce9e957a3877496babff208 b/fuzz/gnutls_psk_client_fuzzer.in/64e1061924c94e238ce9e957a3877496babff208 new file mode 100644 index 0000000000..122d4d8f34 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/64e1061924c94e238ce9e957a3877496babff208 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/650fb1efc0a9c296fb4b47783fcddcc43aab07f2 b/fuzz/gnutls_psk_client_fuzzer.in/650fb1efc0a9c296fb4b47783fcddcc43aab07f2 new file mode 100644 index 0000000000..d1486fbc54 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/650fb1efc0a9c296fb4b47783fcddcc43aab07f2 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/65446655979915ddfc1762f08b71e96f581f6363 b/fuzz/gnutls_psk_client_fuzzer.in/65446655979915ddfc1762f08b71e96f581f6363 new file mode 100644 index 0000000000..3aa278cbbd Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/65446655979915ddfc1762f08b71e96f581f6363 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/665cf6527e0f50e91fde11ea076245b8a53a42df b/fuzz/gnutls_psk_client_fuzzer.in/665cf6527e0f50e91fde11ea076245b8a53a42df new file mode 100644 index 0000000000..26bb2cbd7a Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/665cf6527e0f50e91fde11ea076245b8a53a42df differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/697026ccb48fc6f41f0a4c69379eaf846cad49c6 b/fuzz/gnutls_psk_client_fuzzer.in/697026ccb48fc6f41f0a4c69379eaf846cad49c6 new file mode 100644 index 0000000000..f7a235d858 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/697026ccb48fc6f41f0a4c69379eaf846cad49c6 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/69ae0b43c3a3408e3b945eb18e3f99d2ec9da5cd b/fuzz/gnutls_psk_client_fuzzer.in/69ae0b43c3a3408e3b945eb18e3f99d2ec9da5cd new file mode 100644 index 0000000000..dbfe039107 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/69ae0b43c3a3408e3b945eb18e3f99d2ec9da5cd differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/69deb07ea147de3ffd21e13b962a2ea0c0206df4 b/fuzz/gnutls_psk_client_fuzzer.in/69deb07ea147de3ffd21e13b962a2ea0c0206df4 new file mode 100644 index 0000000000..e03ef9aef2 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/69deb07ea147de3ffd21e13b962a2ea0c0206df4 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/6a174eeb0e93df9562f36b7070f016336a0b366c b/fuzz/gnutls_psk_client_fuzzer.in/6a174eeb0e93df9562f36b7070f016336a0b366c new file mode 100644 index 0000000000..4ab52d9b05 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/6a174eeb0e93df9562f36b7070f016336a0b366c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/6a274af11da2dd118f4d7cb1bdf33208b88971b8 b/fuzz/gnutls_psk_client_fuzzer.in/6a274af11da2dd118f4d7cb1bdf33208b88971b8 new file mode 100644 index 0000000000..75a61a63c5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/6a274af11da2dd118f4d7cb1bdf33208b88971b8 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/6a610fe0443df9d8213d0d68fe0a5627e3086c59 b/fuzz/gnutls_psk_client_fuzzer.in/6a610fe0443df9d8213d0d68fe0a5627e3086c59 new file mode 100644 index 0000000000..20f2c0bd64 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/6a610fe0443df9d8213d0d68fe0a5627e3086c59 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/6a9ea5d8744126c3b028dae55d7b300e535fcdad b/fuzz/gnutls_psk_client_fuzzer.in/6a9ea5d8744126c3b028dae55d7b300e535fcdad new file mode 100644 index 0000000000..9ed9060cd1 --- /dev/null +++ b/fuzz/gnutls_psk_client_fuzzer.in/6a9ea5d8744126c3b028dae55d7b300e535fcdad @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/gnutls_psk_client_fuzzer.in/6c0952f1baa9e71cb6f65dd3a2f6b045b120521d b/fuzz/gnutls_psk_client_fuzzer.in/6c0952f1baa9e71cb6f65dd3a2f6b045b120521d new file mode 100644 index 0000000000..db31e662a8 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/6c0952f1baa9e71cb6f65dd3a2f6b045b120521d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/6d1407fd431d37667b1b99cdd6ec52c0bec79692 b/fuzz/gnutls_psk_client_fuzzer.in/6d1407fd431d37667b1b99cdd6ec52c0bec79692 new file mode 100644 index 0000000000..bf6b0f4ca3 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/6d1407fd431d37667b1b99cdd6ec52c0bec79692 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/6dfab0ca2585d0ac9e8f9e430197ecc8e57d2423 b/fuzz/gnutls_psk_client_fuzzer.in/6dfab0ca2585d0ac9e8f9e430197ecc8e57d2423 new file mode 100644 index 0000000000..9d9c99d3fd Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/6dfab0ca2585d0ac9e8f9e430197ecc8e57d2423 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/6ff0f0cdb45c4efdfd9143085e00c09f9ec8e6d9 b/fuzz/gnutls_psk_client_fuzzer.in/6ff0f0cdb45c4efdfd9143085e00c09f9ec8e6d9 new file mode 100644 index 0000000000..931299f066 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/6ff0f0cdb45c4efdfd9143085e00c09f9ec8e6d9 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/723ebfd69fc8afaa20c15c43134265c6a2c2d4c7 b/fuzz/gnutls_psk_client_fuzzer.in/723ebfd69fc8afaa20c15c43134265c6a2c2d4c7 new file mode 100644 index 0000000000..2d79fbd384 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/723ebfd69fc8afaa20c15c43134265c6a2c2d4c7 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/7373e11ad82ce388bc5569e6192e9fb04700ca6b b/fuzz/gnutls_psk_client_fuzzer.in/7373e11ad82ce388bc5569e6192e9fb04700ca6b new file mode 100644 index 0000000000..29720b21ae Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/7373e11ad82ce388bc5569e6192e9fb04700ca6b differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/73781c1021caf4a13535de6279f01a8ac5ae3094 b/fuzz/gnutls_psk_client_fuzzer.in/73781c1021caf4a13535de6279f01a8ac5ae3094 new file mode 100644 index 0000000000..2377d80945 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/73781c1021caf4a13535de6279f01a8ac5ae3094 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/758ef90ab421d622788b5dc08393b6c1ae55ce83 b/fuzz/gnutls_psk_client_fuzzer.in/758ef90ab421d622788b5dc08393b6c1ae55ce83 new file mode 100644 index 0000000000..c209cd6f6d Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/758ef90ab421d622788b5dc08393b6c1ae55ce83 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/759fbed724b60082941f4f4a4c2d6d94326dae53 b/fuzz/gnutls_psk_client_fuzzer.in/759fbed724b60082941f4f4a4c2d6d94326dae53 new file mode 100644 index 0000000000..c2075a8d0b Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/759fbed724b60082941f4f4a4c2d6d94326dae53 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/77262eb93ec754a94018b95ad058f1a152032787 b/fuzz/gnutls_psk_client_fuzzer.in/77262eb93ec754a94018b95ad058f1a152032787 new file mode 100644 index 0000000000..981b9d3dcf Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/77262eb93ec754a94018b95ad058f1a152032787 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/780529fc9d134becd1a66aede0b01e302a3023a5 b/fuzz/gnutls_psk_client_fuzzer.in/780529fc9d134becd1a66aede0b01e302a3023a5 new file mode 100644 index 0000000000..2918512605 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/780529fc9d134becd1a66aede0b01e302a3023a5 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/78a84cc48170715d84b45b8ca6ea1c19805f4a67 b/fuzz/gnutls_psk_client_fuzzer.in/78a84cc48170715d84b45b8ca6ea1c19805f4a67 new file mode 100644 index 0000000000..eb57615183 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/78a84cc48170715d84b45b8ca6ea1c19805f4a67 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/791d63a36330e22d3903e5ed7be20da7df814185 b/fuzz/gnutls_psk_client_fuzzer.in/791d63a36330e22d3903e5ed7be20da7df814185 new file mode 100644 index 0000000000..433e0276ab Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/791d63a36330e22d3903e5ed7be20da7df814185 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/7a1c4725834cf71af6bff9c6370272fa4cf3b07e b/fuzz/gnutls_psk_client_fuzzer.in/7a1c4725834cf71af6bff9c6370272fa4cf3b07e new file mode 100644 index 0000000000..91b77cd5d4 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/7a1c4725834cf71af6bff9c6370272fa4cf3b07e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/7a560184cfd0e6f09f97d5adcd4a161df8372b63 b/fuzz/gnutls_psk_client_fuzzer.in/7a560184cfd0e6f09f97d5adcd4a161df8372b63 new file mode 100644 index 0000000000..4d2d1643db Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/7a560184cfd0e6f09f97d5adcd4a161df8372b63 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/7a663a3591532090e5f49a5eb2e3afe8ed3added b/fuzz/gnutls_psk_client_fuzzer.in/7a663a3591532090e5f49a5eb2e3afe8ed3added new file mode 100644 index 0000000000..422785cfbd Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/7a663a3591532090e5f49a5eb2e3afe8ed3added differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/7b07f323fe0e0fcc97f9b3fcb7abbfdbda19a007 b/fuzz/gnutls_psk_client_fuzzer.in/7b07f323fe0e0fcc97f9b3fcb7abbfdbda19a007 new file mode 100644 index 0000000000..acdb932c65 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/7b07f323fe0e0fcc97f9b3fcb7abbfdbda19a007 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/7c3592efb9deec741654ae23cacceb92b133e61e b/fuzz/gnutls_psk_client_fuzzer.in/7c3592efb9deec741654ae23cacceb92b133e61e new file mode 100644 index 0000000000..51740e6c11 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/7c3592efb9deec741654ae23cacceb92b133e61e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/7c75dcd004f11d55c424e88df7944a6398b24b4c b/fuzz/gnutls_psk_client_fuzzer.in/7c75dcd004f11d55c424e88df7944a6398b24b4c new file mode 100644 index 0000000000..72a4a00d4a Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/7c75dcd004f11d55c424e88df7944a6398b24b4c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/7d1cf3a5e6bbbb4d7cfd714c9db0d5739d10647e b/fuzz/gnutls_psk_client_fuzzer.in/7d1cf3a5e6bbbb4d7cfd714c9db0d5739d10647e new file mode 100644 index 0000000000..54da694fef Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/7d1cf3a5e6bbbb4d7cfd714c9db0d5739d10647e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/7e073401f523a25ba93413a1c581a2c4cb65cabf b/fuzz/gnutls_psk_client_fuzzer.in/7e073401f523a25ba93413a1c581a2c4cb65cabf new file mode 100644 index 0000000000..57041d4bf1 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/7e073401f523a25ba93413a1c581a2c4cb65cabf differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/7eae6f0bdacbc0f885fa700df056a469f69eddd2 b/fuzz/gnutls_psk_client_fuzzer.in/7eae6f0bdacbc0f885fa700df056a469f69eddd2 new file mode 100644 index 0000000000..1205f6bfec Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/7eae6f0bdacbc0f885fa700df056a469f69eddd2 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/807454cff4a68be32cc62592a2ac4dfae67f2eb7 b/fuzz/gnutls_psk_client_fuzzer.in/807454cff4a68be32cc62592a2ac4dfae67f2eb7 new file mode 100644 index 0000000000..2fd08b8455 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/807454cff4a68be32cc62592a2ac4dfae67f2eb7 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/808abde786b4d8e4a3b928675bff9cab7d787dd4 b/fuzz/gnutls_psk_client_fuzzer.in/808abde786b4d8e4a3b928675bff9cab7d787dd4 new file mode 100644 index 0000000000..652f8ae031 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/808abde786b4d8e4a3b928675bff9cab7d787dd4 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/809fb0cea7a549a3ffaf057ff0f98ccadf284843 b/fuzz/gnutls_psk_client_fuzzer.in/809fb0cea7a549a3ffaf057ff0f98ccadf284843 new file mode 100644 index 0000000000..b852e98ea4 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/809fb0cea7a549a3ffaf057ff0f98ccadf284843 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/80fc2a9bf4ac34b2f9f0b9b18eccd1afb088ded5 b/fuzz/gnutls_psk_client_fuzzer.in/80fc2a9bf4ac34b2f9f0b9b18eccd1afb088ded5 new file mode 100644 index 0000000000..fb6fb5811e Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/80fc2a9bf4ac34b2f9f0b9b18eccd1afb088ded5 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/81c5cd995df44ce01d1b5138ae9ab9fd988c900a b/fuzz/gnutls_psk_client_fuzzer.in/81c5cd995df44ce01d1b5138ae9ab9fd988c900a new file mode 100644 index 0000000000..a1bffce7ce Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/81c5cd995df44ce01d1b5138ae9ab9fd988c900a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/822554b1e805f47d55db5a6700405e02f332fb8c b/fuzz/gnutls_psk_client_fuzzer.in/822554b1e805f47d55db5a6700405e02f332fb8c new file mode 100644 index 0000000000..a3ecfbad0b Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/822554b1e805f47d55db5a6700405e02f332fb8c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/82eee9036143e9c38ec0c29ab24ec7333986f19c b/fuzz/gnutls_psk_client_fuzzer.in/82eee9036143e9c38ec0c29ab24ec7333986f19c new file mode 100644 index 0000000000..b477ae15ad Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/82eee9036143e9c38ec0c29ab24ec7333986f19c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/8321e37223e09882ea6ae836e037c775c26e1e7d b/fuzz/gnutls_psk_client_fuzzer.in/8321e37223e09882ea6ae836e037c775c26e1e7d new file mode 100644 index 0000000000..ed377b15da Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/8321e37223e09882ea6ae836e037c775c26e1e7d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/8356b900c426d511b9bf09647fbd8430a75488ee b/fuzz/gnutls_psk_client_fuzzer.in/8356b900c426d511b9bf09647fbd8430a75488ee new file mode 100644 index 0000000000..b49d410ada Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/8356b900c426d511b9bf09647fbd8430a75488ee differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/85d4906a76d6dcf3468cc62b513501d6200e1147 b/fuzz/gnutls_psk_client_fuzzer.in/85d4906a76d6dcf3468cc62b513501d6200e1147 new file mode 100644 index 0000000000..e05e7705e7 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/85d4906a76d6dcf3468cc62b513501d6200e1147 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/86e963d1073ae60365f7ad762c28f176d639c3da b/fuzz/gnutls_psk_client_fuzzer.in/86e963d1073ae60365f7ad762c28f176d639c3da new file mode 100644 index 0000000000..49a55bc185 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/86e963d1073ae60365f7ad762c28f176d639c3da differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/873f07a05c9fd7cdd39c499961088172aa1961a6 b/fuzz/gnutls_psk_client_fuzzer.in/873f07a05c9fd7cdd39c499961088172aa1961a6 new file mode 100644 index 0000000000..2a251a9c73 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/873f07a05c9fd7cdd39c499961088172aa1961a6 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/87ca6a91a443b1b07cf75de621a58853cbe34786 b/fuzz/gnutls_psk_client_fuzzer.in/87ca6a91a443b1b07cf75de621a58853cbe34786 new file mode 100644 index 0000000000..890dda63e5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/87ca6a91a443b1b07cf75de621a58853cbe34786 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/8855d26c8ad9ecfdbdcbabeb7b200429e345b5a4 b/fuzz/gnutls_psk_client_fuzzer.in/8855d26c8ad9ecfdbdcbabeb7b200429e345b5a4 new file mode 100644 index 0000000000..0feebb66aa Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/8855d26c8ad9ecfdbdcbabeb7b200429e345b5a4 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/88e924351de76700cf4b590c0e3f84d59694702a b/fuzz/gnutls_psk_client_fuzzer.in/88e924351de76700cf4b590c0e3f84d59694702a new file mode 100644 index 0000000000..5eed18c0c8 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/88e924351de76700cf4b590c0e3f84d59694702a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/89484878c0365192d38da15e92f55f9caa109900 b/fuzz/gnutls_psk_client_fuzzer.in/89484878c0365192d38da15e92f55f9caa109900 new file mode 100644 index 0000000000..86cdf714de Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/89484878c0365192d38da15e92f55f9caa109900 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/8a0336adc8fa224f28dda9199ee57d44bd752d2f b/fuzz/gnutls_psk_client_fuzzer.in/8a0336adc8fa224f28dda9199ee57d44bd752d2f new file mode 100644 index 0000000000..020d044bd2 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/8a0336adc8fa224f28dda9199ee57d44bd752d2f differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/8b5900b5d41d8ad9cb331a469d9b46befc660d24 b/fuzz/gnutls_psk_client_fuzzer.in/8b5900b5d41d8ad9cb331a469d9b46befc660d24 new file mode 100644 index 0000000000..17ef803cd1 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/8b5900b5d41d8ad9cb331a469d9b46befc660d24 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/8bec2b4906fb4ec71bcd54b6fc201f8b52e4a77c b/fuzz/gnutls_psk_client_fuzzer.in/8bec2b4906fb4ec71bcd54b6fc201f8b52e4a77c new file mode 100644 index 0000000000..70979975a5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/8bec2b4906fb4ec71bcd54b6fc201f8b52e4a77c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/8cf68675f4d4d846067799ecb5543dfb0d3c2ea8 b/fuzz/gnutls_psk_client_fuzzer.in/8cf68675f4d4d846067799ecb5543dfb0d3c2ea8 new file mode 100644 index 0000000000..1178192810 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/8cf68675f4d4d846067799ecb5543dfb0d3c2ea8 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/8d74bca36dd7f55bab5dec1bc05d43043857f85e b/fuzz/gnutls_psk_client_fuzzer.in/8d74bca36dd7f55bab5dec1bc05d43043857f85e new file mode 100644 index 0000000000..59689c5415 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/8d74bca36dd7f55bab5dec1bc05d43043857f85e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/8d80e95e8d1e743988f4ad76acea796f5d89e458 b/fuzz/gnutls_psk_client_fuzzer.in/8d80e95e8d1e743988f4ad76acea796f5d89e458 new file mode 100644 index 0000000000..cba7686a87 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/8d80e95e8d1e743988f4ad76acea796f5d89e458 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/8eeba5a371d851296f327cc3158b3f2aecc7cfec b/fuzz/gnutls_psk_client_fuzzer.in/8eeba5a371d851296f327cc3158b3f2aecc7cfec new file mode 100644 index 0000000000..80c37bba8e Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/8eeba5a371d851296f327cc3158b3f2aecc7cfec differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/8fe3840a246a4fbc4ea44011583669df44e7c047 b/fuzz/gnutls_psk_client_fuzzer.in/8fe3840a246a4fbc4ea44011583669df44e7c047 new file mode 100644 index 0000000000..33b9e8cd66 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/8fe3840a246a4fbc4ea44011583669df44e7c047 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/91af8087a89d794c3db1145b66f7d6e4e6ef7e66 b/fuzz/gnutls_psk_client_fuzzer.in/91af8087a89d794c3db1145b66f7d6e4e6ef7e66 new file mode 100644 index 0000000000..74f10af883 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/91af8087a89d794c3db1145b66f7d6e4e6ef7e66 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/91bb84e2b2fe27b8bd73a0cc0f92d669c38f2545 b/fuzz/gnutls_psk_client_fuzzer.in/91bb84e2b2fe27b8bd73a0cc0f92d669c38f2545 new file mode 100644 index 0000000000..088d367dd5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/91bb84e2b2fe27b8bd73a0cc0f92d669c38f2545 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/91dcccbd8606b8f2a2b4533f0b043a7ed5945bae b/fuzz/gnutls_psk_client_fuzzer.in/91dcccbd8606b8f2a2b4533f0b043a7ed5945bae new file mode 100644 index 0000000000..f41f78d033 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/91dcccbd8606b8f2a2b4533f0b043a7ed5945bae differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/93433701016f99905d9982eb22b84057a96d79bc b/fuzz/gnutls_psk_client_fuzzer.in/93433701016f99905d9982eb22b84057a96d79bc new file mode 100644 index 0000000000..a3542fdd31 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/93433701016f99905d9982eb22b84057a96d79bc differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/941d13b155fc7a551b8e6f7cc04f8b64f556a219 b/fuzz/gnutls_psk_client_fuzzer.in/941d13b155fc7a551b8e6f7cc04f8b64f556a219 new file mode 100644 index 0000000000..2c5839a3a5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/941d13b155fc7a551b8e6f7cc04f8b64f556a219 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9524d9eb4559711ae4b0d23e58ad9792cf5c76f5 b/fuzz/gnutls_psk_client_fuzzer.in/9524d9eb4559711ae4b0d23e58ad9792cf5c76f5 new file mode 100644 index 0000000000..f4f6aa7401 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9524d9eb4559711ae4b0d23e58ad9792cf5c76f5 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9604c0d342d4d51cc4c204daab78b79ecce9719b b/fuzz/gnutls_psk_client_fuzzer.in/9604c0d342d4d51cc4c204daab78b79ecce9719b new file mode 100644 index 0000000000..33b944c945 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9604c0d342d4d51cc4c204daab78b79ecce9719b differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9629c05a476729028478e3a6b9921483ba3148fb b/fuzz/gnutls_psk_client_fuzzer.in/9629c05a476729028478e3a6b9921483ba3148fb new file mode 100644 index 0000000000..33f3d717e8 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9629c05a476729028478e3a6b9921483ba3148fb differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/96695e9f311638ce2716db792252e8c4ded9c744 b/fuzz/gnutls_psk_client_fuzzer.in/96695e9f311638ce2716db792252e8c4ded9c744 new file mode 100644 index 0000000000..4185684543 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/96695e9f311638ce2716db792252e8c4ded9c744 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9878d98582f86168c73feb039e2331b7800a70a2 b/fuzz/gnutls_psk_client_fuzzer.in/9878d98582f86168c73feb039e2331b7800a70a2 new file mode 100644 index 0000000000..1691cd0c16 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9878d98582f86168c73feb039e2331b7800a70a2 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9884c0bbc6cdc53e6327ed15f5960d26f728c97d b/fuzz/gnutls_psk_client_fuzzer.in/9884c0bbc6cdc53e6327ed15f5960d26f728c97d new file mode 100644 index 0000000000..f0dbf452d6 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9884c0bbc6cdc53e6327ed15f5960d26f728c97d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9897884a90fede8564cc352034b67e7a61e77286 b/fuzz/gnutls_psk_client_fuzzer.in/9897884a90fede8564cc352034b67e7a61e77286 new file mode 100644 index 0000000000..fc0aa1ff79 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9897884a90fede8564cc352034b67e7a61e77286 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9943b4fd962cdacf6f3bd50c25bef8d5b296549e b/fuzz/gnutls_psk_client_fuzzer.in/9943b4fd962cdacf6f3bd50c25bef8d5b296549e new file mode 100644 index 0000000000..0cd3a318ee Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9943b4fd962cdacf6f3bd50c25bef8d5b296549e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/994c18ec9d59fabe10a8cdcdb666df6a01eec275 b/fuzz/gnutls_psk_client_fuzzer.in/994c18ec9d59fabe10a8cdcdb666df6a01eec275 new file mode 100644 index 0000000000..ea80508f76 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/994c18ec9d59fabe10a8cdcdb666df6a01eec275 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/99b18233d1a6fd99f5e3c1cfaf2d8bb475fa9872 b/fuzz/gnutls_psk_client_fuzzer.in/99b18233d1a6fd99f5e3c1cfaf2d8bb475fa9872 new file mode 100644 index 0000000000..33c99bfbf9 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/99b18233d1a6fd99f5e3c1cfaf2d8bb475fa9872 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/99fc0754341debb294749c58b43764e887da40eb b/fuzz/gnutls_psk_client_fuzzer.in/99fc0754341debb294749c58b43764e887da40eb new file mode 100644 index 0000000000..59e7919dd3 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/99fc0754341debb294749c58b43764e887da40eb differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9a6f5627183e64b944986c69963efffb5964ebf1 b/fuzz/gnutls_psk_client_fuzzer.in/9a6f5627183e64b944986c69963efffb5964ebf1 new file mode 100644 index 0000000000..e515c5d349 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9a6f5627183e64b944986c69963efffb5964ebf1 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9a79ef1f4a6c3192b7df7a48ea0c43e3127789ee b/fuzz/gnutls_psk_client_fuzzer.in/9a79ef1f4a6c3192b7df7a48ea0c43e3127789ee new file mode 100644 index 0000000000..84875afa4f Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9a79ef1f4a6c3192b7df7a48ea0c43e3127789ee differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9b882b08b80684ed7e9c4b33f83fdd263a3653cf b/fuzz/gnutls_psk_client_fuzzer.in/9b882b08b80684ed7e9c4b33f83fdd263a3653cf new file mode 100644 index 0000000000..d9cd3574ae Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9b882b08b80684ed7e9c4b33f83fdd263a3653cf differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9ba78b3fbb5a26875cb71730e38a327693b512d6 b/fuzz/gnutls_psk_client_fuzzer.in/9ba78b3fbb5a26875cb71730e38a327693b512d6 new file mode 100644 index 0000000000..3212604027 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9ba78b3fbb5a26875cb71730e38a327693b512d6 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9c74cc06cb28ea62f7e41fde017b97dde3a4ef97 b/fuzz/gnutls_psk_client_fuzzer.in/9c74cc06cb28ea62f7e41fde017b97dde3a4ef97 new file mode 100644 index 0000000000..f26144055c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9c74cc06cb28ea62f7e41fde017b97dde3a4ef97 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9cff7913e8a5839dae2a730a65dfdb3b60355bc2 b/fuzz/gnutls_psk_client_fuzzer.in/9cff7913e8a5839dae2a730a65dfdb3b60355bc2 new file mode 100644 index 0000000000..df9d40ae8c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9cff7913e8a5839dae2a730a65dfdb3b60355bc2 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9d0f420c2984732d99121bd960b58385f81b6b26 b/fuzz/gnutls_psk_client_fuzzer.in/9d0f420c2984732d99121bd960b58385f81b6b26 new file mode 100644 index 0000000000..a71483491a Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9d0f420c2984732d99121bd960b58385f81b6b26 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9d9cb3a4f282d3e9d0e9cac066df875b7408653c b/fuzz/gnutls_psk_client_fuzzer.in/9d9cb3a4f282d3e9d0e9cac066df875b7408653c new file mode 100644 index 0000000000..5a53d9a67e Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9d9cb3a4f282d3e9d0e9cac066df875b7408653c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9d9dd04ba0150073d7d2608cb0def0b4ba4623d3 b/fuzz/gnutls_psk_client_fuzzer.in/9d9dd04ba0150073d7d2608cb0def0b4ba4623d3 new file mode 100644 index 0000000000..6274d26015 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9d9dd04ba0150073d7d2608cb0def0b4ba4623d3 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9db755831c0aea25910b54cdf3e16b9b431db070 b/fuzz/gnutls_psk_client_fuzzer.in/9db755831c0aea25910b54cdf3e16b9b431db070 new file mode 100644 index 0000000000..b578d484a7 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9db755831c0aea25910b54cdf3e16b9b431db070 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9e1b75f74cb5e4f76eac623b5f07b797db6d3243 b/fuzz/gnutls_psk_client_fuzzer.in/9e1b75f74cb5e4f76eac623b5f07b797db6d3243 new file mode 100644 index 0000000000..3f3998d196 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9e1b75f74cb5e4f76eac623b5f07b797db6d3243 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/9f2aa5994126107e22c84f279671be1d69d6b5a9 b/fuzz/gnutls_psk_client_fuzzer.in/9f2aa5994126107e22c84f279671be1d69d6b5a9 new file mode 100644 index 0000000000..acc89a1de9 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/9f2aa5994126107e22c84f279671be1d69d6b5a9 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a0725b6eae74549524c0a05b067114e298402b11 b/fuzz/gnutls_psk_client_fuzzer.in/a0725b6eae74549524c0a05b067114e298402b11 new file mode 100644 index 0000000000..0b13170055 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a0725b6eae74549524c0a05b067114e298402b11 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a1d343f4cd84fa335686c3b4913fddc576379098 b/fuzz/gnutls_psk_client_fuzzer.in/a1d343f4cd84fa335686c3b4913fddc576379098 new file mode 100644 index 0000000000..251a5f8b39 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a1d343f4cd84fa335686c3b4913fddc576379098 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a1d382ccd304e6f8f7ddea3c616f6ca5de791ec3 b/fuzz/gnutls_psk_client_fuzzer.in/a1d382ccd304e6f8f7ddea3c616f6ca5de791ec3 new file mode 100644 index 0000000000..831d5c60e9 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a1d382ccd304e6f8f7ddea3c616f6ca5de791ec3 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a311a658dcdad3d7e948da2086e283a781677ae2 b/fuzz/gnutls_psk_client_fuzzer.in/a311a658dcdad3d7e948da2086e283a781677ae2 new file mode 100644 index 0000000000..97ed5f2d05 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a311a658dcdad3d7e948da2086e283a781677ae2 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a32d993c79536fe7097fe2164102c4a841bcfb1b b/fuzz/gnutls_psk_client_fuzzer.in/a32d993c79536fe7097fe2164102c4a841bcfb1b new file mode 100644 index 0000000000..1359e9d61e Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a32d993c79536fe7097fe2164102c4a841bcfb1b differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a40bffd9fd477e06119f55e8faa6c024fae9d048 b/fuzz/gnutls_psk_client_fuzzer.in/a40bffd9fd477e06119f55e8faa6c024fae9d048 new file mode 100644 index 0000000000..6655d73061 --- /dev/null +++ b/fuzz/gnutls_psk_client_fuzzer.in/a40bffd9fd477e06119f55e8faa6c024fae9d048 @@ -0,0 +1 @@ +??????????????????????????????????????????????????????????????????????? \ No newline at end of file diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a44bf2781db41a88e77a53eb6e049fc46c012ddd b/fuzz/gnutls_psk_client_fuzzer.in/a44bf2781db41a88e77a53eb6e049fc46c012ddd new file mode 100644 index 0000000000..c81ccb9f56 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a44bf2781db41a88e77a53eb6e049fc46c012ddd differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a63ec22fd6403c184642a55bfe2183a0c385e345 b/fuzz/gnutls_psk_client_fuzzer.in/a63ec22fd6403c184642a55bfe2183a0c385e345 new file mode 100644 index 0000000000..2b8e141ee5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a63ec22fd6403c184642a55bfe2183a0c385e345 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a681c00aef8cfc4998b8b684526177f8584d7ce5 b/fuzz/gnutls_psk_client_fuzzer.in/a681c00aef8cfc4998b8b684526177f8584d7ce5 new file mode 100644 index 0000000000..847c81a0d2 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a681c00aef8cfc4998b8b684526177f8584d7ce5 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a796cbe62ade0a74234c764cd8cb8e598721bc4a b/fuzz/gnutls_psk_client_fuzzer.in/a796cbe62ade0a74234c764cd8cb8e598721bc4a new file mode 100644 index 0000000000..45cf91b895 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a796cbe62ade0a74234c764cd8cb8e598721bc4a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a8a4af3536e86700a45872b298d16e47636659f5 b/fuzz/gnutls_psk_client_fuzzer.in/a8a4af3536e86700a45872b298d16e47636659f5 new file mode 100644 index 0000000000..602164885b Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a8a4af3536e86700a45872b298d16e47636659f5 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a9e2c118167dcf9b7b8295fe9bb42ae5d866671a b/fuzz/gnutls_psk_client_fuzzer.in/a9e2c118167dcf9b7b8295fe9bb42ae5d866671a new file mode 100644 index 0000000000..1b317ea5e0 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a9e2c118167dcf9b7b8295fe9bb42ae5d866671a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/a9f12f20ce1e998a673eaaa284ca8735a9753d56 b/fuzz/gnutls_psk_client_fuzzer.in/a9f12f20ce1e998a673eaaa284ca8735a9753d56 new file mode 100644 index 0000000000..4e3d546fb0 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/a9f12f20ce1e998a673eaaa284ca8735a9753d56 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/aacb97fbaedde005d430c0978df99e710272680e b/fuzz/gnutls_psk_client_fuzzer.in/aacb97fbaedde005d430c0978df99e710272680e new file mode 100644 index 0000000000..a9fff3d993 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/aacb97fbaedde005d430c0978df99e710272680e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/ab9ae9c8f184e1465c6b26016225f7a24b517610 b/fuzz/gnutls_psk_client_fuzzer.in/ab9ae9c8f184e1465c6b26016225f7a24b517610 new file mode 100644 index 0000000000..ed6e11d465 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/ab9ae9c8f184e1465c6b26016225f7a24b517610 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/b0511e5968f7cbb04d78047f3d20fa98fef14b6e b/fuzz/gnutls_psk_client_fuzzer.in/b0511e5968f7cbb04d78047f3d20fa98fef14b6e new file mode 100644 index 0000000000..7087fe1811 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/b0511e5968f7cbb04d78047f3d20fa98fef14b6e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/b19058e59dabd0f3d1135eb36574fe1873461ff0 b/fuzz/gnutls_psk_client_fuzzer.in/b19058e59dabd0f3d1135eb36574fe1873461ff0 new file mode 100644 index 0000000000..06801fc1fe Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/b19058e59dabd0f3d1135eb36574fe1873461ff0 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/b1cf2ec99132684ff93944af34dbb85b0ad24147 b/fuzz/gnutls_psk_client_fuzzer.in/b1cf2ec99132684ff93944af34dbb85b0ad24147 new file mode 100644 index 0000000000..eeaa5d9a8b Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/b1cf2ec99132684ff93944af34dbb85b0ad24147 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/b24041563c3810b033ad56d13252786a2ebe1802 b/fuzz/gnutls_psk_client_fuzzer.in/b24041563c3810b033ad56d13252786a2ebe1802 new file mode 100644 index 0000000000..520cc1d838 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/b24041563c3810b033ad56d13252786a2ebe1802 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/b29d3063ab4974051305123fc10214751ea7190e b/fuzz/gnutls_psk_client_fuzzer.in/b29d3063ab4974051305123fc10214751ea7190e new file mode 100644 index 0000000000..9fdccb32d1 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/b29d3063ab4974051305123fc10214751ea7190e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/b2deb0ff10b8a5704c2e386791d12d2f5b50944a b/fuzz/gnutls_psk_client_fuzzer.in/b2deb0ff10b8a5704c2e386791d12d2f5b50944a new file mode 100644 index 0000000000..a9c2f05011 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/b2deb0ff10b8a5704c2e386791d12d2f5b50944a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/b2f59d7c10613186dbe9a607d265b7b38b7e7931 b/fuzz/gnutls_psk_client_fuzzer.in/b2f59d7c10613186dbe9a607d265b7b38b7e7931 new file mode 100644 index 0000000000..a22b034e53 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/b2f59d7c10613186dbe9a607d265b7b38b7e7931 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/b5be3935f14cae8b951c038eb46b323b156629e8 b/fuzz/gnutls_psk_client_fuzzer.in/b5be3935f14cae8b951c038eb46b323b156629e8 new file mode 100644 index 0000000000..2786b8e5dc Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/b5be3935f14cae8b951c038eb46b323b156629e8 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/b5fdd3a45d55478b11616ddebc6093152565936e b/fuzz/gnutls_psk_client_fuzzer.in/b5fdd3a45d55478b11616ddebc6093152565936e new file mode 100644 index 0000000000..e53ef7a8ee Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/b5fdd3a45d55478b11616ddebc6093152565936e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/b9385654b9bf022a583ef3903c945714d82f9d16 b/fuzz/gnutls_psk_client_fuzzer.in/b9385654b9bf022a583ef3903c945714d82f9d16 new file mode 100644 index 0000000000..870710525b Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/b9385654b9bf022a583ef3903c945714d82f9d16 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/bb0a76b2d80ab8fd458263813aa58cdc6cc6f62f b/fuzz/gnutls_psk_client_fuzzer.in/bb0a76b2d80ab8fd458263813aa58cdc6cc6f62f new file mode 100644 index 0000000000..c001d152f9 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/bb0a76b2d80ab8fd458263813aa58cdc6cc6f62f differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/bb5234e17e42598f82095d6cc84856fcf06e5ceb b/fuzz/gnutls_psk_client_fuzzer.in/bb5234e17e42598f82095d6cc84856fcf06e5ceb new file mode 100644 index 0000000000..cb2e042357 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/bb5234e17e42598f82095d6cc84856fcf06e5ceb differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/bbae413b92dc349b0d2baa30261bce4cb0cb91eb b/fuzz/gnutls_psk_client_fuzzer.in/bbae413b92dc349b0d2baa30261bce4cb0cb91eb new file mode 100644 index 0000000000..348903722b Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/bbae413b92dc349b0d2baa30261bce4cb0cb91eb differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/bc9e11403cc59964c8d9b138eb5369f90afa24aa b/fuzz/gnutls_psk_client_fuzzer.in/bc9e11403cc59964c8d9b138eb5369f90afa24aa new file mode 100644 index 0000000000..e2224f84ba Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/bc9e11403cc59964c8d9b138eb5369f90afa24aa differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/bcf65ecb4da5c8ab5c7380689b7f49928717d409 b/fuzz/gnutls_psk_client_fuzzer.in/bcf65ecb4da5c8ab5c7380689b7f49928717d409 new file mode 100644 index 0000000000..930f531c3d Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/bcf65ecb4da5c8ab5c7380689b7f49928717d409 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/bdb847506e64994a4c2e3c070f0047368daecd44 b/fuzz/gnutls_psk_client_fuzzer.in/bdb847506e64994a4c2e3c070f0047368daecd44 new file mode 100644 index 0000000000..07b52fe5f8 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/bdb847506e64994a4c2e3c070f0047368daecd44 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/be0865c5b9b20102049eb2490c20264ed98bebb3 b/fuzz/gnutls_psk_client_fuzzer.in/be0865c5b9b20102049eb2490c20264ed98bebb3 new file mode 100644 index 0000000000..2d332c7557 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/be0865c5b9b20102049eb2490c20264ed98bebb3 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/be22f0b985328fe9eb1184e417777b63b016fe73 b/fuzz/gnutls_psk_client_fuzzer.in/be22f0b985328fe9eb1184e417777b63b016fe73 new file mode 100644 index 0000000000..80b051cce4 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/be22f0b985328fe9eb1184e417777b63b016fe73 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/befe836adf8e96d54527367956d334d818917201 b/fuzz/gnutls_psk_client_fuzzer.in/befe836adf8e96d54527367956d334d818917201 new file mode 100644 index 0000000000..a68cada083 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/befe836adf8e96d54527367956d334d818917201 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/bfa0d20263a526480f13e4ee5df2b2fddfacb770 b/fuzz/gnutls_psk_client_fuzzer.in/bfa0d20263a526480f13e4ee5df2b2fddfacb770 new file mode 100644 index 0000000000..2a01cca651 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/bfa0d20263a526480f13e4ee5df2b2fddfacb770 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/bfc2593f568d1f3561cd20132e2ff36fc9cfef2a b/fuzz/gnutls_psk_client_fuzzer.in/bfc2593f568d1f3561cd20132e2ff36fc9cfef2a new file mode 100644 index 0000000000..1bb6d978d5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/bfc2593f568d1f3561cd20132e2ff36fc9cfef2a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c01eed8c43b78fc9161f63ac18384e1685a2ee73 b/fuzz/gnutls_psk_client_fuzzer.in/c01eed8c43b78fc9161f63ac18384e1685a2ee73 new file mode 100644 index 0000000000..0c87338e8f Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c01eed8c43b78fc9161f63ac18384e1685a2ee73 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c02807260cf0c068d6e6477b29f60db0ab212103 b/fuzz/gnutls_psk_client_fuzzer.in/c02807260cf0c068d6e6477b29f60db0ab212103 new file mode 100644 index 0000000000..7695dd2e25 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c02807260cf0c068d6e6477b29f60db0ab212103 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c0b868665557641bf4619ce4f7b030ce8e594c26 b/fuzz/gnutls_psk_client_fuzzer.in/c0b868665557641bf4619ce4f7b030ce8e594c26 new file mode 100644 index 0000000000..85e6346e31 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c0b868665557641bf4619ce4f7b030ce8e594c26 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c1867090c061dc719acd7cf90b33fa9b4b4effce b/fuzz/gnutls_psk_client_fuzzer.in/c1867090c061dc719acd7cf90b33fa9b4b4effce new file mode 100644 index 0000000000..8103a77100 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c1867090c061dc719acd7cf90b33fa9b4b4effce differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c194ae90d1d32e3d8c9b5a3a3b9ce5856fe48e61 b/fuzz/gnutls_psk_client_fuzzer.in/c194ae90d1d32e3d8c9b5a3a3b9ce5856fe48e61 new file mode 100644 index 0000000000..b334eb94a2 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c194ae90d1d32e3d8c9b5a3a3b9ce5856fe48e61 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c1cbf712ceb33241ecb10de9d141362ba13c40f3 b/fuzz/gnutls_psk_client_fuzzer.in/c1cbf712ceb33241ecb10de9d141362ba13c40f3 new file mode 100644 index 0000000000..3844bb9194 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c1cbf712ceb33241ecb10de9d141362ba13c40f3 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c27c421d8dff291db1211defd75806ac17a5b6eb b/fuzz/gnutls_psk_client_fuzzer.in/c27c421d8dff291db1211defd75806ac17a5b6eb new file mode 100644 index 0000000000..3bfb44e565 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c27c421d8dff291db1211defd75806ac17a5b6eb differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c38c24350f6095e9faad704d5c0fdbdc6e3d8df3 b/fuzz/gnutls_psk_client_fuzzer.in/c38c24350f6095e9faad704d5c0fdbdc6e3d8df3 new file mode 100644 index 0000000000..497cc1e5c3 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c38c24350f6095e9faad704d5c0fdbdc6e3d8df3 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c50f037dce0ba21e524458137b6a512872cb5c37 b/fuzz/gnutls_psk_client_fuzzer.in/c50f037dce0ba21e524458137b6a512872cb5c37 new file mode 100644 index 0000000000..e3e4eab9d3 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c50f037dce0ba21e524458137b6a512872cb5c37 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c51243bfda48a95bee9db8d66e45aa1499c6cc0b b/fuzz/gnutls_psk_client_fuzzer.in/c51243bfda48a95bee9db8d66e45aa1499c6cc0b new file mode 100644 index 0000000000..b901afd059 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c51243bfda48a95bee9db8d66e45aa1499c6cc0b differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c64e03d9f74f1605018fe193bcb5f8749f09b6ee b/fuzz/gnutls_psk_client_fuzzer.in/c64e03d9f74f1605018fe193bcb5f8749f09b6ee new file mode 100644 index 0000000000..ae0c9434ef Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c64e03d9f74f1605018fe193bcb5f8749f09b6ee differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c85fe9aeec10342734ceab8a96242e40c74ed12a b/fuzz/gnutls_psk_client_fuzzer.in/c85fe9aeec10342734ceab8a96242e40c74ed12a new file mode 100644 index 0000000000..012beb9792 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c85fe9aeec10342734ceab8a96242e40c74ed12a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/c93e7dcfae347ab48bc8ee353f6e7f18468e9798 b/fuzz/gnutls_psk_client_fuzzer.in/c93e7dcfae347ab48bc8ee353f6e7f18468e9798 new file mode 100644 index 0000000000..ba4264afeb Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/c93e7dcfae347ab48bc8ee353f6e7f18468e9798 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/caa700f1d7a8b074d14be465a7e3aa291df87f74 b/fuzz/gnutls_psk_client_fuzzer.in/caa700f1d7a8b074d14be465a7e3aa291df87f74 new file mode 100644 index 0000000000..9492459d63 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/caa700f1d7a8b074d14be465a7e3aa291df87f74 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/cb16eef8790354a3b19bce3137c4d7a95d79fe90 b/fuzz/gnutls_psk_client_fuzzer.in/cb16eef8790354a3b19bce3137c4d7a95d79fe90 new file mode 100644 index 0000000000..b6ef3f7272 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/cb16eef8790354a3b19bce3137c4d7a95d79fe90 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/cb36b7e29d75f8d30e844866d25e50657e1ae8b0 b/fuzz/gnutls_psk_client_fuzzer.in/cb36b7e29d75f8d30e844866d25e50657e1ae8b0 new file mode 100644 index 0000000000..82daa7745c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/cb36b7e29d75f8d30e844866d25e50657e1ae8b0 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/cbf530d16caec9ce93a5ed8f29cb3b629445cf5c b/fuzz/gnutls_psk_client_fuzzer.in/cbf530d16caec9ce93a5ed8f29cb3b629445cf5c new file mode 100644 index 0000000000..f543d9b0be Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/cbf530d16caec9ce93a5ed8f29cb3b629445cf5c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/cd0e94fc732348807f5fe0c60d93e9c0cb1d4dd4 b/fuzz/gnutls_psk_client_fuzzer.in/cd0e94fc732348807f5fe0c60d93e9c0cb1d4dd4 new file mode 100644 index 0000000000..3274d72048 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/cd0e94fc732348807f5fe0c60d93e9c0cb1d4dd4 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/cde315e62291eddb43af3d682cb7f26f1b10767a b/fuzz/gnutls_psk_client_fuzzer.in/cde315e62291eddb43af3d682cb7f26f1b10767a new file mode 100644 index 0000000000..23422bd4e5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/cde315e62291eddb43af3d682cb7f26f1b10767a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/ceba1e5c0b8c832c25aa750635c62dbfd6a2d4d9 b/fuzz/gnutls_psk_client_fuzzer.in/ceba1e5c0b8c832c25aa750635c62dbfd6a2d4d9 new file mode 100644 index 0000000000..dd89344a6a Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/ceba1e5c0b8c832c25aa750635c62dbfd6a2d4d9 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/cfd98907ae7ef0dfc2ece182f510de7d735607d0 b/fuzz/gnutls_psk_client_fuzzer.in/cfd98907ae7ef0dfc2ece182f510de7d735607d0 new file mode 100644 index 0000000000..621fa0002a Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/cfd98907ae7ef0dfc2ece182f510de7d735607d0 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d07f7c0e2a4425b42f382f9482b430b7675390f8 b/fuzz/gnutls_psk_client_fuzzer.in/d07f7c0e2a4425b42f382f9482b430b7675390f8 new file mode 100644 index 0000000000..43e5607318 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d07f7c0e2a4425b42f382f9482b430b7675390f8 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d0afde634b3c89dcd758f431bcb7c0f14c9c06b6 b/fuzz/gnutls_psk_client_fuzzer.in/d0afde634b3c89dcd758f431bcb7c0f14c9c06b6 new file mode 100644 index 0000000000..35f10d3d9a Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d0afde634b3c89dcd758f431bcb7c0f14c9c06b6 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d12cbcdb850d28f891410f839b6418c405f10893 b/fuzz/gnutls_psk_client_fuzzer.in/d12cbcdb850d28f891410f839b6418c405f10893 new file mode 100644 index 0000000000..cc35cab065 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d12cbcdb850d28f891410f839b6418c405f10893 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d211e7450d4a6beda37425c2fef6f60975b71932 b/fuzz/gnutls_psk_client_fuzzer.in/d211e7450d4a6beda37425c2fef6f60975b71932 new file mode 100644 index 0000000000..d30bf19d04 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d211e7450d4a6beda37425c2fef6f60975b71932 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d23fd78ca4353093ffe661a7d93b14efe2b8127b b/fuzz/gnutls_psk_client_fuzzer.in/d23fd78ca4353093ffe661a7d93b14efe2b8127b new file mode 100644 index 0000000000..914db13576 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d23fd78ca4353093ffe661a7d93b14efe2b8127b differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d24c4bac5d503ed6dedd009195645577fed3fe08 b/fuzz/gnutls_psk_client_fuzzer.in/d24c4bac5d503ed6dedd009195645577fed3fe08 new file mode 100644 index 0000000000..25957ee83c Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d24c4bac5d503ed6dedd009195645577fed3fe08 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d38339ac1d41a2302a958cd96d3e69f406727809 b/fuzz/gnutls_psk_client_fuzzer.in/d38339ac1d41a2302a958cd96d3e69f406727809 new file mode 100644 index 0000000000..33d389a0b9 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d38339ac1d41a2302a958cd96d3e69f406727809 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d39c428889b4fa5464c59a771578e17cddd4dcfe b/fuzz/gnutls_psk_client_fuzzer.in/d39c428889b4fa5464c59a771578e17cddd4dcfe new file mode 100644 index 0000000000..bc3bd4bc5f Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d39c428889b4fa5464c59a771578e17cddd4dcfe differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d3e339e0ad624bf96fa08f4d710e2f468eaa717a b/fuzz/gnutls_psk_client_fuzzer.in/d3e339e0ad624bf96fa08f4d710e2f468eaa717a new file mode 100644 index 0000000000..69669efcfd Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d3e339e0ad624bf96fa08f4d710e2f468eaa717a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d4056d37ab7bec271567d75fe8f6efc923c9cddd b/fuzz/gnutls_psk_client_fuzzer.in/d4056d37ab7bec271567d75fe8f6efc923c9cddd new file mode 100644 index 0000000000..1327c3c866 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d4056d37ab7bec271567d75fe8f6efc923c9cddd differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d4e73e12c984268015175c467a945d942b218a6c b/fuzz/gnutls_psk_client_fuzzer.in/d4e73e12c984268015175c467a945d942b218a6c new file mode 100644 index 0000000000..ddf3ec70b5 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d4e73e12c984268015175c467a945d942b218a6c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d554814126fb2561aa78eddba2f99b78d6ddf6e2 b/fuzz/gnutls_psk_client_fuzzer.in/d554814126fb2561aa78eddba2f99b78d6ddf6e2 new file mode 100644 index 0000000000..e587d12da7 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d554814126fb2561aa78eddba2f99b78d6ddf6e2 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d5bb0c6e0452f3c783bf4707bf8bea05ec056231 b/fuzz/gnutls_psk_client_fuzzer.in/d5bb0c6e0452f3c783bf4707bf8bea05ec056231 new file mode 100644 index 0000000000..bd0f03ddfa Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d5bb0c6e0452f3c783bf4707bf8bea05ec056231 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d610c845d872874475fa722b52cadf27c59a35e3 b/fuzz/gnutls_psk_client_fuzzer.in/d610c845d872874475fa722b52cadf27c59a35e3 new file mode 100644 index 0000000000..9e1ee87a38 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d610c845d872874475fa722b52cadf27c59a35e3 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d6eb4883a0675d74d38afab80a31005ce7d713b8 b/fuzz/gnutls_psk_client_fuzzer.in/d6eb4883a0675d74d38afab80a31005ce7d713b8 new file mode 100644 index 0000000000..c42792023d Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d6eb4883a0675d74d38afab80a31005ce7d713b8 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/d8670bd2ae5ea2f8b57ce779262b02a69e1dec14 b/fuzz/gnutls_psk_client_fuzzer.in/d8670bd2ae5ea2f8b57ce779262b02a69e1dec14 new file mode 100644 index 0000000000..46ed7f79dc Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/d8670bd2ae5ea2f8b57ce779262b02a69e1dec14 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/daa4657e8c354f1fafc74029eb6e201163fb4299 b/fuzz/gnutls_psk_client_fuzzer.in/daa4657e8c354f1fafc74029eb6e201163fb4299 new file mode 100644 index 0000000000..2dcb9590db Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/daa4657e8c354f1fafc74029eb6e201163fb4299 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/db6c857ee08749e4495ce03bba7e2bb92ca007c2 b/fuzz/gnutls_psk_client_fuzzer.in/db6c857ee08749e4495ce03bba7e2bb92ca007c2 new file mode 100644 index 0000000000..0ff947efee Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/db6c857ee08749e4495ce03bba7e2bb92ca007c2 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/db7210583a381ac89a56bad9e048f6fddec86c19 b/fuzz/gnutls_psk_client_fuzzer.in/db7210583a381ac89a56bad9e048f6fddec86c19 new file mode 100644 index 0000000000..0ac11ff27b Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/db7210583a381ac89a56bad9e048f6fddec86c19 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/dbc4b8a14f0aeaeeb34fd630c6667176cb7d4eed b/fuzz/gnutls_psk_client_fuzzer.in/dbc4b8a14f0aeaeeb34fd630c6667176cb7d4eed new file mode 100644 index 0000000000..452565f1bd Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/dbc4b8a14f0aeaeeb34fd630c6667176cb7d4eed differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/dc5335e8f23f36de55342166a2661a69ad800b10 b/fuzz/gnutls_psk_client_fuzzer.in/dc5335e8f23f36de55342166a2661a69ad800b10 new file mode 100644 index 0000000000..6be7990d7b Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/dc5335e8f23f36de55342166a2661a69ad800b10 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/dc790b58c6ef9f8950e442077c3c00e6819b2645 b/fuzz/gnutls_psk_client_fuzzer.in/dc790b58c6ef9f8950e442077c3c00e6819b2645 new file mode 100644 index 0000000000..9d13a41d46 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/dc790b58c6ef9f8950e442077c3c00e6819b2645 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/dd58c39125ad0f244a35577fec662801d3f8f54e b/fuzz/gnutls_psk_client_fuzzer.in/dd58c39125ad0f244a35577fec662801d3f8f54e new file mode 100644 index 0000000000..07d2189570 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/dd58c39125ad0f244a35577fec662801d3f8f54e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/de0ae7176f0cf37ba1f37a9c4dfabfc3c7d09057 b/fuzz/gnutls_psk_client_fuzzer.in/de0ae7176f0cf37ba1f37a9c4dfabfc3c7d09057 new file mode 100644 index 0000000000..279f17af4a Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/de0ae7176f0cf37ba1f37a9c4dfabfc3c7d09057 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/df9c9979a9e6f99a9022f2209c9094fa7f4cf88c b/fuzz/gnutls_psk_client_fuzzer.in/df9c9979a9e6f99a9022f2209c9094fa7f4cf88c new file mode 100644 index 0000000000..17499c5e77 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/df9c9979a9e6f99a9022f2209c9094fa7f4cf88c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/dfbed5ada5dca0cf3c1a7040d938a5c122241b29 b/fuzz/gnutls_psk_client_fuzzer.in/dfbed5ada5dca0cf3c1a7040d938a5c122241b29 new file mode 100644 index 0000000000..f38c54f523 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/dfbed5ada5dca0cf3c1a7040d938a5c122241b29 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e08437cc114c81e7e3e383f60d8db99ff2686494 b/fuzz/gnutls_psk_client_fuzzer.in/e08437cc114c81e7e3e383f60d8db99ff2686494 new file mode 100644 index 0000000000..ee3bb3d633 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e08437cc114c81e7e3e383f60d8db99ff2686494 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e0a068de5c61cefac76e9f015207eef7efa8b26f b/fuzz/gnutls_psk_client_fuzzer.in/e0a068de5c61cefac76e9f015207eef7efa8b26f new file mode 100644 index 0000000000..7020191657 --- /dev/null +++ b/fuzz/gnutls_psk_client_fuzzer.in/e0a068de5c61cefac76e9f015207eef7efa8b26f @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e17d3edf7bb77b2cf57baa95cc560db10794515e b/fuzz/gnutls_psk_client_fuzzer.in/e17d3edf7bb77b2cf57baa95cc560db10794515e new file mode 100644 index 0000000000..172e0ebea6 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e17d3edf7bb77b2cf57baa95cc560db10794515e differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e1f906e1dea7c93c08467ac235e3b80d3df8a884 b/fuzz/gnutls_psk_client_fuzzer.in/e1f906e1dea7c93c08467ac235e3b80d3df8a884 new file mode 100644 index 0000000000..5359de7601 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e1f906e1dea7c93c08467ac235e3b80d3df8a884 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e2345662edcd2d7bf15c3b9724de82c683d1edcf b/fuzz/gnutls_psk_client_fuzzer.in/e2345662edcd2d7bf15c3b9724de82c683d1edcf new file mode 100644 index 0000000000..7bb5923197 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e2345662edcd2d7bf15c3b9724de82c683d1edcf differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e37c5186640a589aea528a9f7b2d4996c25f247d b/fuzz/gnutls_psk_client_fuzzer.in/e37c5186640a589aea528a9f7b2d4996c25f247d new file mode 100644 index 0000000000..411b0e49fc Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e37c5186640a589aea528a9f7b2d4996c25f247d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e58d0043600398b7d8c7bf7c8eb8457758df3f95 b/fuzz/gnutls_psk_client_fuzzer.in/e58d0043600398b7d8c7bf7c8eb8457758df3f95 new file mode 100644 index 0000000000..9f866e03b3 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e58d0043600398b7d8c7bf7c8eb8457758df3f95 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e5c3c6dd535e4b8d4569bcc37b56db5d2c9666ac b/fuzz/gnutls_psk_client_fuzzer.in/e5c3c6dd535e4b8d4569bcc37b56db5d2c9666ac new file mode 100644 index 0000000000..f0efaf5720 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e5c3c6dd535e4b8d4569bcc37b56db5d2c9666ac differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e60e85dcce66ef2ccf90f3aa03a422869b33affe b/fuzz/gnutls_psk_client_fuzzer.in/e60e85dcce66ef2ccf90f3aa03a422869b33affe new file mode 100644 index 0000000000..1aafe32a97 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e60e85dcce66ef2ccf90f3aa03a422869b33affe differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e6acf32ce7add6e667ba91f102a1a98dec595d51 b/fuzz/gnutls_psk_client_fuzzer.in/e6acf32ce7add6e667ba91f102a1a98dec595d51 new file mode 100644 index 0000000000..4529da70ec Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e6acf32ce7add6e667ba91f102a1a98dec595d51 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e6cb0a42c927f2cb9fb13490bc31b580ce6afa1d b/fuzz/gnutls_psk_client_fuzzer.in/e6cb0a42c927f2cb9fb13490bc31b580ce6afa1d new file mode 100644 index 0000000000..538251c611 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e6cb0a42c927f2cb9fb13490bc31b580ce6afa1d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e7d4eb9f2d6d1b78cf89c85db3b228915314c5f4 b/fuzz/gnutls_psk_client_fuzzer.in/e7d4eb9f2d6d1b78cf89c85db3b228915314c5f4 new file mode 100644 index 0000000000..0e7c494806 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e7d4eb9f2d6d1b78cf89c85db3b228915314c5f4 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e7dc45e25ddc7f7d4f6a8a172ceeb585f5297434 b/fuzz/gnutls_psk_client_fuzzer.in/e7dc45e25ddc7f7d4f6a8a172ceeb585f5297434 new file mode 100644 index 0000000000..5ae4e36469 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e7dc45e25ddc7f7d4f6a8a172ceeb585f5297434 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e8caf122ffc2459e3f4d738d1028caee3619d731 b/fuzz/gnutls_psk_client_fuzzer.in/e8caf122ffc2459e3f4d738d1028caee3619d731 new file mode 100644 index 0000000000..85c7069922 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e8caf122ffc2459e3f4d738d1028caee3619d731 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/e9e9a22f52c52a4e25c807c534b141d29424696a b/fuzz/gnutls_psk_client_fuzzer.in/e9e9a22f52c52a4e25c807c534b141d29424696a new file mode 100644 index 0000000000..adda0b8fef Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/e9e9a22f52c52a4e25c807c534b141d29424696a differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/ea92325b0db1217efd94daabfca941ed2c79d1cf b/fuzz/gnutls_psk_client_fuzzer.in/ea92325b0db1217efd94daabfca941ed2c79d1cf new file mode 100644 index 0000000000..5ed31f61fa Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/ea92325b0db1217efd94daabfca941ed2c79d1cf differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/ebdc854ab152a1867ee753a48bfe50c94c00fa8d b/fuzz/gnutls_psk_client_fuzzer.in/ebdc854ab152a1867ee753a48bfe50c94c00fa8d new file mode 100644 index 0000000000..a994272ff3 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/ebdc854ab152a1867ee753a48bfe50c94c00fa8d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/ecf0beed16c967fa674f73065291d320127d14de b/fuzz/gnutls_psk_client_fuzzer.in/ecf0beed16c967fa674f73065291d320127d14de new file mode 100644 index 0000000000..bb0c8db884 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/ecf0beed16c967fa674f73065291d320127d14de differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/ed02800f4f985f31c5850bc401a99e6fabc3cacd b/fuzz/gnutls_psk_client_fuzzer.in/ed02800f4f985f31c5850bc401a99e6fabc3cacd new file mode 100644 index 0000000000..c6362e3888 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/ed02800f4f985f31c5850bc401a99e6fabc3cacd differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/ed16fc3b5e9b962e3e422688a6a1ef82625c8586 b/fuzz/gnutls_psk_client_fuzzer.in/ed16fc3b5e9b962e3e422688a6a1ef82625c8586 new file mode 100644 index 0000000000..09586a2d2d Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/ed16fc3b5e9b962e3e422688a6a1ef82625c8586 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/ed80808c8f1b49486509d0194b00a67e3e4e9d5d b/fuzz/gnutls_psk_client_fuzzer.in/ed80808c8f1b49486509d0194b00a67e3e4e9d5d new file mode 100644 index 0000000000..c65d933217 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/ed80808c8f1b49486509d0194b00a67e3e4e9d5d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/ee675bb8467ecbaac562f43fa1fa10f3f9fe3e0d b/fuzz/gnutls_psk_client_fuzzer.in/ee675bb8467ecbaac562f43fa1fa10f3f9fe3e0d new file mode 100644 index 0000000000..a8aba7bbe6 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/ee675bb8467ecbaac562f43fa1fa10f3f9fe3e0d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/f1c785da790f68e74191ba016326842e755bd62c b/fuzz/gnutls_psk_client_fuzzer.in/f1c785da790f68e74191ba016326842e755bd62c new file mode 100644 index 0000000000..cf46c6acbb Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/f1c785da790f68e74191ba016326842e755bd62c differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/f2387ddc5dd169ef2e3b5bd3a4b0044e9e549289 b/fuzz/gnutls_psk_client_fuzzer.in/f2387ddc5dd169ef2e3b5bd3a4b0044e9e549289 new file mode 100644 index 0000000000..8995bf2ab4 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/f2387ddc5dd169ef2e3b5bd3a4b0044e9e549289 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/f2766023edfc0da22330425f62a266d6cf488e98 b/fuzz/gnutls_psk_client_fuzzer.in/f2766023edfc0da22330425f62a266d6cf488e98 new file mode 100644 index 0000000000..e9c3855c51 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/f2766023edfc0da22330425f62a266d6cf488e98 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/f67b58bf8fa8537c6e5b3788714608cf6d525083 b/fuzz/gnutls_psk_client_fuzzer.in/f67b58bf8fa8537c6e5b3788714608cf6d525083 new file mode 100644 index 0000000000..09f88c3630 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/f67b58bf8fa8537c6e5b3788714608cf6d525083 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/f68a180647b79cef746b0d382048d2a7ca73f7f3 b/fuzz/gnutls_psk_client_fuzzer.in/f68a180647b79cef746b0d382048d2a7ca73f7f3 new file mode 100644 index 0000000000..dce668f8f2 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/f68a180647b79cef746b0d382048d2a7ca73f7f3 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/f6a38000d221adc2b00ce979c099f6e87e254344 b/fuzz/gnutls_psk_client_fuzzer.in/f6a38000d221adc2b00ce979c099f6e87e254344 new file mode 100644 index 0000000000..e01f0bcc35 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/f6a38000d221adc2b00ce979c099f6e87e254344 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/f734c6264d3ed8336471fce64ccd9bae5f895132 b/fuzz/gnutls_psk_client_fuzzer.in/f734c6264d3ed8336471fce64ccd9bae5f895132 new file mode 100644 index 0000000000..206d29e110 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/f734c6264d3ed8336471fce64ccd9bae5f895132 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/f8abead1cb57286b8fc8bca5b8d8c9243df06952 b/fuzz/gnutls_psk_client_fuzzer.in/f8abead1cb57286b8fc8bca5b8d8c9243df06952 new file mode 100644 index 0000000000..ffff1b9776 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/f8abead1cb57286b8fc8bca5b8d8c9243df06952 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/f9f8e660200eb7872152a21f74b9eace33447fe1 b/fuzz/gnutls_psk_client_fuzzer.in/f9f8e660200eb7872152a21f74b9eace33447fe1 new file mode 100644 index 0000000000..93ea148a69 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/f9f8e660200eb7872152a21f74b9eace33447fe1 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/fa3710d2a6fc82f1521db40220479aa8c5865dea b/fuzz/gnutls_psk_client_fuzzer.in/fa3710d2a6fc82f1521db40220479aa8c5865dea new file mode 100644 index 0000000000..111d8c5894 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/fa3710d2a6fc82f1521db40220479aa8c5865dea differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/faa148f375aec2397ca98304ca09eceac5d46f31 b/fuzz/gnutls_psk_client_fuzzer.in/faa148f375aec2397ca98304ca09eceac5d46f31 new file mode 100644 index 0000000000..aedc90fc65 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/faa148f375aec2397ca98304ca09eceac5d46f31 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/fb426ef1f6296e2d98b2f1f512d758cdb8da6c71 b/fuzz/gnutls_psk_client_fuzzer.in/fb426ef1f6296e2d98b2f1f512d758cdb8da6c71 new file mode 100644 index 0000000000..30dfbe2355 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/fb426ef1f6296e2d98b2f1f512d758cdb8da6c71 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/fc48f4299ea67807af7acc70663c1ba34ffd254d b/fuzz/gnutls_psk_client_fuzzer.in/fc48f4299ea67807af7acc70663c1ba34ffd254d new file mode 100644 index 0000000000..1af660277b Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/fc48f4299ea67807af7acc70663c1ba34ffd254d differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/fc7c616476c60a1d9a85171280d26548644b3b90 b/fuzz/gnutls_psk_client_fuzzer.in/fc7c616476c60a1d9a85171280d26548644b3b90 new file mode 100644 index 0000000000..45fdc2b58f Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/fc7c616476c60a1d9a85171280d26548644b3b90 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/fd3376261feb744dd9a416e77f113dcf6ea24891 b/fuzz/gnutls_psk_client_fuzzer.in/fd3376261feb744dd9a416e77f113dcf6ea24891 new file mode 100644 index 0000000000..ff663650b4 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/fd3376261feb744dd9a416e77f113dcf6ea24891 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/fe3e92ed47b709d4238fc59a9d2762aea2c13710 b/fuzz/gnutls_psk_client_fuzzer.in/fe3e92ed47b709d4238fc59a9d2762aea2c13710 new file mode 100644 index 0000000000..bf1176bb40 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/fe3e92ed47b709d4238fc59a9d2762aea2c13710 differ diff --git a/fuzz/gnutls_psk_client_fuzzer.in/fedcd82ea2c3fc1dc7ef6b9bbdf076b89ca0a42a b/fuzz/gnutls_psk_client_fuzzer.in/fedcd82ea2c3fc1dc7ef6b9bbdf076b89ca0a42a new file mode 100644 index 0000000000..0899f08840 Binary files /dev/null and b/fuzz/gnutls_psk_client_fuzzer.in/fedcd82ea2c3fc1dc7ef6b9bbdf076b89ca0a42a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.c b/fuzz/gnutls_psk_server_fuzzer.c new file mode 100644 index 0000000000..d07e2eef60 --- /dev/null +++ b/fuzz/gnutls_psk_server_fuzzer.c @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * 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. + * + */ + +#include +#include +#include +#include +#include + +#include + +#include "certs.h" +#include "psk.h" +#include "mem.h" +#include "fuzzer.h" + +static int psk_cb(gnutls_session_t session, const char *username, gnutls_datum_t * key) +{ + key->data = (unsigned char*)gnutls_malloc(16); + assert(key->data != NULL); + + memcpy(key->data, psk_key16, 16); + key->size = 16; + + return 0; +} + +int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size) +{ + int res; + gnutls_datum_t rsa_cert, rsa_key; + gnutls_datum_t ecdsa_cert, ecdsa_key; + gnutls_datum_t ed25519_cert, ed25519_key; + gnutls_datum_t ed448_cert, ed448_key; + gnutls_session_t session; + gnutls_certificate_credentials_t xcred; + gnutls_psk_server_credentials_t pcred; + struct mem_st memdata; + + res = gnutls_init(&session, GNUTLS_SERVER); + assert(res >= 0); + + res = gnutls_certificate_allocate_credentials(&xcred); + assert(res >= 0); + + res = gnutls_psk_allocate_server_credentials(&pcred); + assert(res >= 0); + + gnutls_psk_set_server_credentials_function(pcred, psk_cb); + gnutls_psk_set_server_known_dh_params(pcred, GNUTLS_SEC_PARAM_MEDIUM); + + rsa_cert.data = (unsigned char *)kRSACertificateDER; + rsa_cert.size = sizeof(kRSACertificateDER); + rsa_key.data = (unsigned char *)kRSAPrivateKeyDER; + rsa_key.size = sizeof(kRSAPrivateKeyDER); + + ecdsa_cert.data = (unsigned char *)kECDSACertificateDER; + ecdsa_cert.size = sizeof(kECDSACertificateDER); + ecdsa_key.data = (unsigned char *)kECDSAPrivateKeyDER; + ecdsa_key.size = sizeof(kECDSAPrivateKeyDER); + + ed25519_cert.data = (unsigned char *)kEd25519CertificateDER; + ed25519_cert.size = sizeof(kEd25519CertificateDER); + ed25519_key.data = (unsigned char *)kEd25519PrivateKeyDER; + ed25519_key.size = sizeof(kEd25519PrivateKeyDER); + + ed448_cert.data = (unsigned char *)kEd448CertificateDER; + ed448_cert.size = sizeof(kEd448CertificateDER); + ed448_key.data = (unsigned char *)kEd448PrivateKeyDER; + ed448_key.size = sizeof(kEd448PrivateKeyDER); + + res = + gnutls_certificate_set_x509_key_mem(xcred, &rsa_cert, &rsa_key, + GNUTLS_X509_FMT_DER); + assert(res >= 0); + + res = + gnutls_certificate_set_x509_key_mem(xcred, &ecdsa_cert, &ecdsa_key, + GNUTLS_X509_FMT_DER); + assert(res >= 0); + + res = + gnutls_certificate_set_x509_key_mem(xcred, &ed25519_cert, &ed25519_key, + GNUTLS_X509_FMT_DER); + assert(res >= 0); + + res = + gnutls_certificate_set_x509_key_mem(xcred, &ed448_cert, &ed448_key, + GNUTLS_X509_FMT_DER); + assert(res >= 0); + + gnutls_certificate_set_known_dh_params(xcred, GNUTLS_SEC_PARAM_MEDIUM); + + res = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + assert(res >= 0); + + res = gnutls_credentials_set(session, GNUTLS_CRD_PSK, pcred); + assert(res >= 0); + + res = gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-PSK:+DHE-PSK:+PSK:+RSA-PSK:"VERS_STR, NULL); + assert(res >= 0); + + memdata.data = data; + memdata.size = size; + + gnutls_transport_set_push_function(session, mem_push); + gnutls_transport_set_pull_function(session, mem_pull); + gnutls_transport_set_pull_timeout_function(session, mem_pull_timeout); + gnutls_transport_set_ptr(session, &memdata); + + do { + res = gnutls_handshake(session); + } while (res < 0 && gnutls_error_is_fatal(res) == 0); + if (res >= 0) { + for (;;) { + char buf[16384]; + res = gnutls_record_recv(session, buf, sizeof(buf)); + if (res <= 0) { + break; + } + } + } + + gnutls_deinit(session); + gnutls_certificate_free_credentials(xcred); + gnutls_psk_free_server_credentials(pcred); + return 0; +} diff --git a/fuzz/gnutls_psk_server_fuzzer.in/002f49475e703160459fafbbb38a3cc81848dad3 b/fuzz/gnutls_psk_server_fuzzer.in/002f49475e703160459fafbbb38a3cc81848dad3 new file mode 100644 index 0000000000..e5c30d4548 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/002f49475e703160459fafbbb38a3cc81848dad3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/007e68e1e4ba632954f33015ea1715d878b87fe6 b/fuzz/gnutls_psk_server_fuzzer.in/007e68e1e4ba632954f33015ea1715d878b87fe6 new file mode 100644 index 0000000000..20cf62c817 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/007e68e1e4ba632954f33015ea1715d878b87fe6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/00e6dc8e9ca363c4fba4fc134c997f41b714e99f b/fuzz/gnutls_psk_server_fuzzer.in/00e6dc8e9ca363c4fba4fc134c997f41b714e99f new file mode 100644 index 0000000000..2bc7e364ae Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/00e6dc8e9ca363c4fba4fc134c997f41b714e99f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0330c136f68ff7b9a32edcc4149c3378b41474d4 b/fuzz/gnutls_psk_server_fuzzer.in/0330c136f68ff7b9a32edcc4149c3378b41474d4 new file mode 100644 index 0000000000..b83f96bbaf Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0330c136f68ff7b9a32edcc4149c3378b41474d4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/04985118428b11a33ab1bab5c79527e7c09ccfb4 b/fuzz/gnutls_psk_server_fuzzer.in/04985118428b11a33ab1bab5c79527e7c09ccfb4 new file mode 100644 index 0000000000..0c8424cbd6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/04985118428b11a33ab1bab5c79527e7c09ccfb4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/051b71cf0186fef98b2ccb01b63c778b0269a81a b/fuzz/gnutls_psk_server_fuzzer.in/051b71cf0186fef98b2ccb01b63c778b0269a81a new file mode 100644 index 0000000000..56b415e30f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/051b71cf0186fef98b2ccb01b63c778b0269a81a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/064af8cfc6c1e3be6f872321a671e6fcd21dc438 b/fuzz/gnutls_psk_server_fuzzer.in/064af8cfc6c1e3be6f872321a671e6fcd21dc438 new file mode 100644 index 0000000000..3d6d1c4a1a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/064af8cfc6c1e3be6f872321a671e6fcd21dc438 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/066a37ab094434dc5eb59ea675735a53a78d893b b/fuzz/gnutls_psk_server_fuzzer.in/066a37ab094434dc5eb59ea675735a53a78d893b new file mode 100644 index 0000000000..4a01e7270b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/066a37ab094434dc5eb59ea675735a53a78d893b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/06b370a3d6fd5030769061da3b556c1d063e6d3f b/fuzz/gnutls_psk_server_fuzzer.in/06b370a3d6fd5030769061da3b556c1d063e6d3f new file mode 100644 index 0000000000..e2ca29a38a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/06b370a3d6fd5030769061da3b556c1d063e6d3f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/07920896defcbe63b1c3eb717752c8cbff6883c6 b/fuzz/gnutls_psk_server_fuzzer.in/07920896defcbe63b1c3eb717752c8cbff6883c6 new file mode 100644 index 0000000000..0e2f4f7074 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/07920896defcbe63b1c3eb717752c8cbff6883c6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/07bc6755bf79819fc2b3299fb574cf2c3b472a31 b/fuzz/gnutls_psk_server_fuzzer.in/07bc6755bf79819fc2b3299fb574cf2c3b472a31 new file mode 100644 index 0000000000..109c42b3ca Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/07bc6755bf79819fc2b3299fb574cf2c3b472a31 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/083faeee9c0b14e9f9196a80b1871502dd1473e3 b/fuzz/gnutls_psk_server_fuzzer.in/083faeee9c0b14e9f9196a80b1871502dd1473e3 new file mode 100644 index 0000000000..2bcf267545 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/083faeee9c0b14e9f9196a80b1871502dd1473e3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/085a80ebbc1951f91df24ceefc2c322b08c62d21 b/fuzz/gnutls_psk_server_fuzzer.in/085a80ebbc1951f91df24ceefc2c322b08c62d21 new file mode 100644 index 0000000000..16c4198673 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/085a80ebbc1951f91df24ceefc2c322b08c62d21 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/08c4873212303eefb97c4cdbdb12e57081e09057 b/fuzz/gnutls_psk_server_fuzzer.in/08c4873212303eefb97c4cdbdb12e57081e09057 new file mode 100644 index 0000000000..84eac4a333 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/08c4873212303eefb97c4cdbdb12e57081e09057 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/08f22ffec5dac7f9001ce36c2ae530504cdc5db2 b/fuzz/gnutls_psk_server_fuzzer.in/08f22ffec5dac7f9001ce36c2ae530504cdc5db2 new file mode 100644 index 0000000000..03cc3aafb5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/08f22ffec5dac7f9001ce36c2ae530504cdc5db2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/097c119154a51de09f68a8b6ae35c6bf479a6243 b/fuzz/gnutls_psk_server_fuzzer.in/097c119154a51de09f68a8b6ae35c6bf479a6243 new file mode 100644 index 0000000000..f9b9878541 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/097c119154a51de09f68a8b6ae35c6bf479a6243 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0a41d4020e25dc36a70f5f8737ca6ee1e162f617 b/fuzz/gnutls_psk_server_fuzzer.in/0a41d4020e25dc36a70f5f8737ca6ee1e162f617 new file mode 100644 index 0000000000..0632e57595 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0a41d4020e25dc36a70f5f8737ca6ee1e162f617 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0ab980f0f6ecd30f7864688213ceb9dd6fd7509f b/fuzz/gnutls_psk_server_fuzzer.in/0ab980f0f6ecd30f7864688213ceb9dd6fd7509f new file mode 100644 index 0000000000..4790a48c77 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0ab980f0f6ecd30f7864688213ceb9dd6fd7509f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0b30843d7536a840b97cfaf8e6acf67197d32770 b/fuzz/gnutls_psk_server_fuzzer.in/0b30843d7536a840b97cfaf8e6acf67197d32770 new file mode 100644 index 0000000000..3293f6151d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0b30843d7536a840b97cfaf8e6acf67197d32770 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0c64b5405ce3cbc02f7c0c69f4b04bbf93e62ece b/fuzz/gnutls_psk_server_fuzzer.in/0c64b5405ce3cbc02f7c0c69f4b04bbf93e62ece new file mode 100644 index 0000000000..8de71128d2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0c64b5405ce3cbc02f7c0c69f4b04bbf93e62ece differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0c64c8c1a0752f76987a040dfe0ce7d44985e3ff b/fuzz/gnutls_psk_server_fuzzer.in/0c64c8c1a0752f76987a040dfe0ce7d44985e3ff new file mode 100644 index 0000000000..5848307724 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0c64c8c1a0752f76987a040dfe0ce7d44985e3ff differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0d0042fe95ced846f88a718d44cec757632d6c46 b/fuzz/gnutls_psk_server_fuzzer.in/0d0042fe95ced846f88a718d44cec757632d6c46 new file mode 100644 index 0000000000..43477bf100 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0d0042fe95ced846f88a718d44cec757632d6c46 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0d15db7fc2be67bd1c2ac188c66be624ea1430aa b/fuzz/gnutls_psk_server_fuzzer.in/0d15db7fc2be67bd1c2ac188c66be624ea1430aa new file mode 100644 index 0000000000..fd4a6a3d80 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0d15db7fc2be67bd1c2ac188c66be624ea1430aa differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0d2d62a8283817a6bc4a4f7d639cfbbc60749a0c b/fuzz/gnutls_psk_server_fuzzer.in/0d2d62a8283817a6bc4a4f7d639cfbbc60749a0c new file mode 100644 index 0000000000..92adf69e5a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0d2d62a8283817a6bc4a4f7d639cfbbc60749a0c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0d5b991ee7f240fca8e96c44ecf5faa1e175ac97 b/fuzz/gnutls_psk_server_fuzzer.in/0d5b991ee7f240fca8e96c44ecf5faa1e175ac97 new file mode 100644 index 0000000000..788b15b5c6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0d5b991ee7f240fca8e96c44ecf5faa1e175ac97 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0db67e905c5526b516af6f2357b60ba7c626c038 b/fuzz/gnutls_psk_server_fuzzer.in/0db67e905c5526b516af6f2357b60ba7c626c038 new file mode 100644 index 0000000000..1ca3d9f3ee Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0db67e905c5526b516af6f2357b60ba7c626c038 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0deaea45cc3272c92b61057dd0196e1da35d235b b/fuzz/gnutls_psk_server_fuzzer.in/0deaea45cc3272c92b61057dd0196e1da35d235b new file mode 100644 index 0000000000..27327d8531 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0deaea45cc3272c92b61057dd0196e1da35d235b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0e30cf730b904549974aca76884e79d258de77e9 b/fuzz/gnutls_psk_server_fuzzer.in/0e30cf730b904549974aca76884e79d258de77e9 new file mode 100644 index 0000000000..10ead3b765 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0e30cf730b904549974aca76884e79d258de77e9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/0f80a4c9cd21d50b2bf1b04150f811ba14b2457d b/fuzz/gnutls_psk_server_fuzzer.in/0f80a4c9cd21d50b2bf1b04150f811ba14b2457d new file mode 100644 index 0000000000..0a0f0ff8fa Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/0f80a4c9cd21d50b2bf1b04150f811ba14b2457d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/101e0395a362fefbb6f2b7a3762d4d1c778fb704 b/fuzz/gnutls_psk_server_fuzzer.in/101e0395a362fefbb6f2b7a3762d4d1c778fb704 new file mode 100644 index 0000000000..6db730e6ef Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/101e0395a362fefbb6f2b7a3762d4d1c778fb704 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1028c8c4bbdfefccf92fc593e1adda3bbfd01d3e b/fuzz/gnutls_psk_server_fuzzer.in/1028c8c4bbdfefccf92fc593e1adda3bbfd01d3e new file mode 100644 index 0000000000..20ce7c69ea Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1028c8c4bbdfefccf92fc593e1adda3bbfd01d3e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/116514d8644b661f54ba129e0fd94534ef0037e7 b/fuzz/gnutls_psk_server_fuzzer.in/116514d8644b661f54ba129e0fd94534ef0037e7 new file mode 100644 index 0000000000..fb5fd98a5c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/116514d8644b661f54ba129e0fd94534ef0037e7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1254cf0a48560ac394765930398044386e61eee7 b/fuzz/gnutls_psk_server_fuzzer.in/1254cf0a48560ac394765930398044386e61eee7 new file mode 100644 index 0000000000..9f760ff857 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1254cf0a48560ac394765930398044386e61eee7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/12cff076ea1c6f7549b633a2f271a42d177e3229 b/fuzz/gnutls_psk_server_fuzzer.in/12cff076ea1c6f7549b633a2f271a42d177e3229 new file mode 100644 index 0000000000..74b917e950 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/12cff076ea1c6f7549b633a2f271a42d177e3229 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1356b2e46de3688c5e34c1ea2950ca590d1c3659 b/fuzz/gnutls_psk_server_fuzzer.in/1356b2e46de3688c5e34c1ea2950ca590d1c3659 new file mode 100644 index 0000000000..45b19ff1f7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1356b2e46de3688c5e34c1ea2950ca590d1c3659 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/13ae5375d063529ee905369934785b7f5498ac8f b/fuzz/gnutls_psk_server_fuzzer.in/13ae5375d063529ee905369934785b7f5498ac8f new file mode 100644 index 0000000000..069888ba68 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/13ae5375d063529ee905369934785b7f5498ac8f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/13bcfb984179f2e93064482c985e8f5d63a0ea1c b/fuzz/gnutls_psk_server_fuzzer.in/13bcfb984179f2e93064482c985e8f5d63a0ea1c new file mode 100644 index 0000000000..4dc04a1a07 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/13bcfb984179f2e93064482c985e8f5d63a0ea1c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/13e1c2d7951d85b77b0622eafab77bd8f60dde3c b/fuzz/gnutls_psk_server_fuzzer.in/13e1c2d7951d85b77b0622eafab77bd8f60dde3c new file mode 100644 index 0000000000..5d2e5c82a1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/13e1c2d7951d85b77b0622eafab77bd8f60dde3c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1465bb78e297f515ad09011d53c483889d8d2013 b/fuzz/gnutls_psk_server_fuzzer.in/1465bb78e297f515ad09011d53c483889d8d2013 new file mode 100644 index 0000000000..e6d05ee3bb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1465bb78e297f515ad09011d53c483889d8d2013 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/14a6363596964d41c6dd2cb548aafe4763fd1288 b/fuzz/gnutls_psk_server_fuzzer.in/14a6363596964d41c6dd2cb548aafe4763fd1288 new file mode 100644 index 0000000000..b6a1debcc1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/14a6363596964d41c6dd2cb548aafe4763fd1288 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1644e18e3aed7ce6a972eec8e151c51ff977e7f5 b/fuzz/gnutls_psk_server_fuzzer.in/1644e18e3aed7ce6a972eec8e151c51ff977e7f5 new file mode 100644 index 0000000000..db69db90b5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1644e18e3aed7ce6a972eec8e151c51ff977e7f5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1645df22b26ce2c013460d4780b54dcb13221644 b/fuzz/gnutls_psk_server_fuzzer.in/1645df22b26ce2c013460d4780b54dcb13221644 new file mode 100644 index 0000000000..07126b1c5e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1645df22b26ce2c013460d4780b54dcb13221644 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/168dc7c811a37b0b938be66578e474a12d94c9bb b/fuzz/gnutls_psk_server_fuzzer.in/168dc7c811a37b0b938be66578e474a12d94c9bb new file mode 100644 index 0000000000..0caf1c81ca Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/168dc7c811a37b0b938be66578e474a12d94c9bb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/16ceef9fa234005dcb803dcc38dbb6e9489ebe5d b/fuzz/gnutls_psk_server_fuzzer.in/16ceef9fa234005dcb803dcc38dbb6e9489ebe5d new file mode 100644 index 0000000000..4dd08c9404 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/16ceef9fa234005dcb803dcc38dbb6e9489ebe5d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/16d12466da83351d7ec26375a8caf7aaf364206f b/fuzz/gnutls_psk_server_fuzzer.in/16d12466da83351d7ec26375a8caf7aaf364206f new file mode 100644 index 0000000000..8387f53a19 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/16d12466da83351d7ec26375a8caf7aaf364206f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/174b524091c33e96e7478ec601822933100bf14d b/fuzz/gnutls_psk_server_fuzzer.in/174b524091c33e96e7478ec601822933100bf14d new file mode 100644 index 0000000000..44a4fe071f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/174b524091c33e96e7478ec601822933100bf14d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/176d41039fe54b14fe8234f9db3e6369a8f52e5d b/fuzz/gnutls_psk_server_fuzzer.in/176d41039fe54b14fe8234f9db3e6369a8f52e5d new file mode 100644 index 0000000000..226b1e673e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/176d41039fe54b14fe8234f9db3e6369a8f52e5d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1805e90e39b6527e91a614edd8d9a542a60f4d42 b/fuzz/gnutls_psk_server_fuzzer.in/1805e90e39b6527e91a614edd8d9a542a60f4d42 new file mode 100644 index 0000000000..78ef5ed3d6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1805e90e39b6527e91a614edd8d9a542a60f4d42 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/18662fde269a89420c9dbdbda1ff4f39f5bd13e4 b/fuzz/gnutls_psk_server_fuzzer.in/18662fde269a89420c9dbdbda1ff4f39f5bd13e4 new file mode 100644 index 0000000000..10cc57bbed --- /dev/null +++ b/fuzz/gnutls_psk_server_fuzzer.in/18662fde269a89420c9dbdbda1ff4f39f5bd13e4 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1915e5f8d4084880216f8f5e6dd086ab14770a47 b/fuzz/gnutls_psk_server_fuzzer.in/1915e5f8d4084880216f8f5e6dd086ab14770a47 new file mode 100644 index 0000000000..3fde6b2cf7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1915e5f8d4084880216f8f5e6dd086ab14770a47 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/19168be61b1a82af2e7b0577666482e077c4f805 b/fuzz/gnutls_psk_server_fuzzer.in/19168be61b1a82af2e7b0577666482e077c4f805 new file mode 100644 index 0000000000..cf5f3ae3e4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/19168be61b1a82af2e7b0577666482e077c4f805 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/192aaf510c98264729973b371471a3ed0c183d1e b/fuzz/gnutls_psk_server_fuzzer.in/192aaf510c98264729973b371471a3ed0c183d1e new file mode 100644 index 0000000000..5f73da3522 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/192aaf510c98264729973b371471a3ed0c183d1e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/194b8ce9880cf998f17e978f12c8df48889ce824 b/fuzz/gnutls_psk_server_fuzzer.in/194b8ce9880cf998f17e978f12c8df48889ce824 new file mode 100644 index 0000000000..776ead4dd7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/194b8ce9880cf998f17e978f12c8df48889ce824 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1abcf21d8df06d7297656decad9867cc37fb3521 b/fuzz/gnutls_psk_server_fuzzer.in/1abcf21d8df06d7297656decad9867cc37fb3521 new file mode 100644 index 0000000000..7867e25df7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1abcf21d8df06d7297656decad9867cc37fb3521 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1cadbd472a6bc23f4040033f6c5e457d9bf0b67c b/fuzz/gnutls_psk_server_fuzzer.in/1cadbd472a6bc23f4040033f6c5e457d9bf0b67c new file mode 100644 index 0000000000..7ba04a9b10 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1cadbd472a6bc23f4040033f6c5e457d9bf0b67c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1d02779e8400a62f9e8f95d9625bb543f3217e91 b/fuzz/gnutls_psk_server_fuzzer.in/1d02779e8400a62f9e8f95d9625bb543f3217e91 new file mode 100644 index 0000000000..cd47e43462 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1d02779e8400a62f9e8f95d9625bb543f3217e91 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1d15b802dca0b92cb4cf4340904a869d8581db0f b/fuzz/gnutls_psk_server_fuzzer.in/1d15b802dca0b92cb4cf4340904a869d8581db0f new file mode 100644 index 0000000000..119fd59c87 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1d15b802dca0b92cb4cf4340904a869d8581db0f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1d1846cd3d9b103ae0e230ac25fa712777b6f5a3 b/fuzz/gnutls_psk_server_fuzzer.in/1d1846cd3d9b103ae0e230ac25fa712777b6f5a3 new file mode 100644 index 0000000000..6cd819427b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1d1846cd3d9b103ae0e230ac25fa712777b6f5a3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1d19546ad0d4f9174267bfcc942e7f9893f4634a b/fuzz/gnutls_psk_server_fuzzer.in/1d19546ad0d4f9174267bfcc942e7f9893f4634a new file mode 100644 index 0000000000..5f9b05b7cb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1d19546ad0d4f9174267bfcc942e7f9893f4634a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1d1cb4e79cb8e6a91dfbd1c65337e4e2591463d5 b/fuzz/gnutls_psk_server_fuzzer.in/1d1cb4e79cb8e6a91dfbd1c65337e4e2591463d5 new file mode 100644 index 0000000000..3d97596a43 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1d1cb4e79cb8e6a91dfbd1c65337e4e2591463d5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1d606dcc57f3c89ccde6b9fe65dba7c1c01f87e0 b/fuzz/gnutls_psk_server_fuzzer.in/1d606dcc57f3c89ccde6b9fe65dba7c1c01f87e0 new file mode 100644 index 0000000000..6c7b245bcd Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1d606dcc57f3c89ccde6b9fe65dba7c1c01f87e0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1de81aeb14da2b79efa8f559d434c3ea90c2116f b/fuzz/gnutls_psk_server_fuzzer.in/1de81aeb14da2b79efa8f559d434c3ea90c2116f new file mode 100644 index 0000000000..b0a887fad0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1de81aeb14da2b79efa8f559d434c3ea90c2116f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1de9bea72978e0ed9bb2ce6dba6c81d47518e59e b/fuzz/gnutls_psk_server_fuzzer.in/1de9bea72978e0ed9bb2ce6dba6c81d47518e59e new file mode 100644 index 0000000000..ed091286d9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1de9bea72978e0ed9bb2ce6dba6c81d47518e59e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1e36fd52e4baab7685c72934c0b4e9e2acf54b93 b/fuzz/gnutls_psk_server_fuzzer.in/1e36fd52e4baab7685c72934c0b4e9e2acf54b93 new file mode 100644 index 0000000000..9ce9fbdb76 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1e36fd52e4baab7685c72934c0b4e9e2acf54b93 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1e85416892020dede08c847cd74c04ae96dbbcf0 b/fuzz/gnutls_psk_server_fuzzer.in/1e85416892020dede08c847cd74c04ae96dbbcf0 new file mode 100644 index 0000000000..c526ce4201 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1e85416892020dede08c847cd74c04ae96dbbcf0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1eee1d97fc3a3b76b3931405ef1fffe33a156de5 b/fuzz/gnutls_psk_server_fuzzer.in/1eee1d97fc3a3b76b3931405ef1fffe33a156de5 new file mode 100644 index 0000000000..527e0d5e48 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1eee1d97fc3a3b76b3931405ef1fffe33a156de5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1f1573c1146135c21a2c1ccc7744673816b37b2b b/fuzz/gnutls_psk_server_fuzzer.in/1f1573c1146135c21a2c1ccc7744673816b37b2b new file mode 100644 index 0000000000..a401a72763 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1f1573c1146135c21a2c1ccc7744673816b37b2b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1f553dc944614a53ad651b032b9830ed84642946 b/fuzz/gnutls_psk_server_fuzzer.in/1f553dc944614a53ad651b032b9830ed84642946 new file mode 100644 index 0000000000..109add73e1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1f553dc944614a53ad651b032b9830ed84642946 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1f6e3c66ff45990f9717196c49e3b258f1834deb b/fuzz/gnutls_psk_server_fuzzer.in/1f6e3c66ff45990f9717196c49e3b258f1834deb new file mode 100644 index 0000000000..52b32fcd1f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1f6e3c66ff45990f9717196c49e3b258f1834deb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/1ffa402d8ecdf0280f4d1baba8aa515cb392c244 b/fuzz/gnutls_psk_server_fuzzer.in/1ffa402d8ecdf0280f4d1baba8aa515cb392c244 new file mode 100644 index 0000000000..27887000e6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/1ffa402d8ecdf0280f4d1baba8aa515cb392c244 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/201e1b0559993f0976827fd683e2c72841335f0b b/fuzz/gnutls_psk_server_fuzzer.in/201e1b0559993f0976827fd683e2c72841335f0b new file mode 100644 index 0000000000..50d517ed81 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/201e1b0559993f0976827fd683e2c72841335f0b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/206e4c8d0b4ee042870cb4ab3a8c0d7c7de8670e b/fuzz/gnutls_psk_server_fuzzer.in/206e4c8d0b4ee042870cb4ab3a8c0d7c7de8670e new file mode 100644 index 0000000000..8ff96cb363 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/206e4c8d0b4ee042870cb4ab3a8c0d7c7de8670e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/20e1fce13f9f965eea52a118b4884db9db9831cb b/fuzz/gnutls_psk_server_fuzzer.in/20e1fce13f9f965eea52a118b4884db9db9831cb new file mode 100644 index 0000000000..687b54a0a7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/20e1fce13f9f965eea52a118b4884db9db9831cb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/211bc4dee2b0f18c1b499f69718e19825d389a5a b/fuzz/gnutls_psk_server_fuzzer.in/211bc4dee2b0f18c1b499f69718e19825d389a5a new file mode 100644 index 0000000000..4589f7f679 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/211bc4dee2b0f18c1b499f69718e19825d389a5a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2158c1c2defe5124aaa8ed1e744e66cd00c91a85 b/fuzz/gnutls_psk_server_fuzzer.in/2158c1c2defe5124aaa8ed1e744e66cd00c91a85 new file mode 100644 index 0000000000..9f4795e82e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2158c1c2defe5124aaa8ed1e744e66cd00c91a85 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/21a1571d60953b74de06f9862954ab2631aa59f9 b/fuzz/gnutls_psk_server_fuzzer.in/21a1571d60953b74de06f9862954ab2631aa59f9 new file mode 100644 index 0000000000..b2e1e10dd5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/21a1571d60953b74de06f9862954ab2631aa59f9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2245eaede25711b008f85bae58bd30ca4035f78a b/fuzz/gnutls_psk_server_fuzzer.in/2245eaede25711b008f85bae58bd30ca4035f78a new file mode 100644 index 0000000000..2c8239498f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2245eaede25711b008f85bae58bd30ca4035f78a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/22813ea4fd8d86463d9cea522ce286c380833594 b/fuzz/gnutls_psk_server_fuzzer.in/22813ea4fd8d86463d9cea522ce286c380833594 new file mode 100644 index 0000000000..c5277d1cad Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/22813ea4fd8d86463d9cea522ce286c380833594 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/229c337127e90e6ca9349a27fbe1da2c6ffcba83 b/fuzz/gnutls_psk_server_fuzzer.in/229c337127e90e6ca9349a27fbe1da2c6ffcba83 new file mode 100644 index 0000000000..2f857ffe84 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/229c337127e90e6ca9349a27fbe1da2c6ffcba83 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/22a68433579f4edfb2223940839fe05c8f0673e1 b/fuzz/gnutls_psk_server_fuzzer.in/22a68433579f4edfb2223940839fe05c8f0673e1 new file mode 100644 index 0000000000..4bedffdc70 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/22a68433579f4edfb2223940839fe05c8f0673e1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/230f8ddcdb9cd0b185ae8e043df4e342c2ff3d97 b/fuzz/gnutls_psk_server_fuzzer.in/230f8ddcdb9cd0b185ae8e043df4e342c2ff3d97 new file mode 100644 index 0000000000..b17cc608c9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/230f8ddcdb9cd0b185ae8e043df4e342c2ff3d97 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2329f181f3043a75aaa0c12bf811f6a2eccf25de b/fuzz/gnutls_psk_server_fuzzer.in/2329f181f3043a75aaa0c12bf811f6a2eccf25de new file mode 100644 index 0000000000..441b51d1cf Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2329f181f3043a75aaa0c12bf811f6a2eccf25de differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/23a4408e571d4bc941bc9a1d153149717d97d12a b/fuzz/gnutls_psk_server_fuzzer.in/23a4408e571d4bc941bc9a1d153149717d97d12a new file mode 100644 index 0000000000..6b8274803e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/23a4408e571d4bc941bc9a1d153149717d97d12a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/23dba2755af97aceaf5bddba8d0f2de87f89ac78 b/fuzz/gnutls_psk_server_fuzzer.in/23dba2755af97aceaf5bddba8d0f2de87f89ac78 new file mode 100644 index 0000000000..9d79c1aca8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/23dba2755af97aceaf5bddba8d0f2de87f89ac78 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/23e0a3ea08e518cc73d6fd115cc04ca76a2d69e3 b/fuzz/gnutls_psk_server_fuzzer.in/23e0a3ea08e518cc73d6fd115cc04ca76a2d69e3 new file mode 100644 index 0000000000..88a3930b78 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/23e0a3ea08e518cc73d6fd115cc04ca76a2d69e3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/240bc37e220208eeaabedbcc11569127b593581b b/fuzz/gnutls_psk_server_fuzzer.in/240bc37e220208eeaabedbcc11569127b593581b new file mode 100644 index 0000000000..c691e3c77e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/240bc37e220208eeaabedbcc11569127b593581b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/249706cbd7ce44aeb0f95e4dfc24c2d8507f7207 b/fuzz/gnutls_psk_server_fuzzer.in/249706cbd7ce44aeb0f95e4dfc24c2d8507f7207 new file mode 100644 index 0000000000..954afb42ea Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/249706cbd7ce44aeb0f95e4dfc24c2d8507f7207 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/251db8224865f9743fd63d544d2ef89acbd08058 b/fuzz/gnutls_psk_server_fuzzer.in/251db8224865f9743fd63d544d2ef89acbd08058 new file mode 100644 index 0000000000..13dab797b1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/251db8224865f9743fd63d544d2ef89acbd08058 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/25292a98baf3a74c9d4c2fc14f16cf4414c79e47 b/fuzz/gnutls_psk_server_fuzzer.in/25292a98baf3a74c9d4c2fc14f16cf4414c79e47 new file mode 100644 index 0000000000..ae08dd1c82 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/25292a98baf3a74c9d4c2fc14f16cf4414c79e47 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2601e0376668723e8037495007957b0fbc844292 b/fuzz/gnutls_psk_server_fuzzer.in/2601e0376668723e8037495007957b0fbc844292 new file mode 100644 index 0000000000..46cfb37df9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2601e0376668723e8037495007957b0fbc844292 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2611414685b98830ed177e97baeb5f96996a0627 b/fuzz/gnutls_psk_server_fuzzer.in/2611414685b98830ed177e97baeb5f96996a0627 new file mode 100644 index 0000000000..75a46e5757 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2611414685b98830ed177e97baeb5f96996a0627 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2640bf6306531257cf2db51489fbfcc68c5f5e65 b/fuzz/gnutls_psk_server_fuzzer.in/2640bf6306531257cf2db51489fbfcc68c5f5e65 new file mode 100644 index 0000000000..50aaa72b72 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2640bf6306531257cf2db51489fbfcc68c5f5e65 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/267442a27ab5d4d7f1a18c5874924be369272fa5 b/fuzz/gnutls_psk_server_fuzzer.in/267442a27ab5d4d7f1a18c5874924be369272fa5 new file mode 100644 index 0000000000..fdaeabeaed Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/267442a27ab5d4d7f1a18c5874924be369272fa5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/26b1da4f7f5930005eaca5bb76cb98c93c7cb6ac b/fuzz/gnutls_psk_server_fuzzer.in/26b1da4f7f5930005eaca5bb76cb98c93c7cb6ac new file mode 100644 index 0000000000..df0a8c5729 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/26b1da4f7f5930005eaca5bb76cb98c93c7cb6ac differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2713a17c710b3873f30968bed24255b745966edf b/fuzz/gnutls_psk_server_fuzzer.in/2713a17c710b3873f30968bed24255b745966edf new file mode 100644 index 0000000000..fbcf4788d7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2713a17c710b3873f30968bed24255b745966edf differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2714f47998c4c04fb86ec4257f31454f957649a0 b/fuzz/gnutls_psk_server_fuzzer.in/2714f47998c4c04fb86ec4257f31454f957649a0 new file mode 100644 index 0000000000..309cd232eb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2714f47998c4c04fb86ec4257f31454f957649a0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/275a891b0bcfbc234b3576af13367082ce52f405 b/fuzz/gnutls_psk_server_fuzzer.in/275a891b0bcfbc234b3576af13367082ce52f405 new file mode 100644 index 0000000000..b63b7a225c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/275a891b0bcfbc234b3576af13367082ce52f405 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/27be3386fcb1325d7198060146e7682dc47664d9 b/fuzz/gnutls_psk_server_fuzzer.in/27be3386fcb1325d7198060146e7682dc47664d9 new file mode 100644 index 0000000000..94404f1e54 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/27be3386fcb1325d7198060146e7682dc47664d9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/27e5e6d8c903dc5fd1fde1d24b3cfeceb992b907 b/fuzz/gnutls_psk_server_fuzzer.in/27e5e6d8c903dc5fd1fde1d24b3cfeceb992b907 new file mode 100644 index 0000000000..aada601e4c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/27e5e6d8c903dc5fd1fde1d24b3cfeceb992b907 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/281eb87d23f7403241a4f581a2ad3db8dd25b855 b/fuzz/gnutls_psk_server_fuzzer.in/281eb87d23f7403241a4f581a2ad3db8dd25b855 new file mode 100644 index 0000000000..9980a7401f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/281eb87d23f7403241a4f581a2ad3db8dd25b855 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/283c91ccba290fdcd79062739622ce074ad433dc b/fuzz/gnutls_psk_server_fuzzer.in/283c91ccba290fdcd79062739622ce074ad433dc new file mode 100644 index 0000000000..daffe107d2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/283c91ccba290fdcd79062739622ce074ad433dc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2917f6160e3548246efd6a8a41fb231638cd94b6 b/fuzz/gnutls_psk_server_fuzzer.in/2917f6160e3548246efd6a8a41fb231638cd94b6 new file mode 100644 index 0000000000..9ceafc23d2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2917f6160e3548246efd6a8a41fb231638cd94b6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/294b776cda362d0ce7034bbc91056570848b7fbc b/fuzz/gnutls_psk_server_fuzzer.in/294b776cda362d0ce7034bbc91056570848b7fbc new file mode 100644 index 0000000000..b22e5f2914 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/294b776cda362d0ce7034bbc91056570848b7fbc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2952166738ea3eb1732dc60268a3cac1ad6dcb57 b/fuzz/gnutls_psk_server_fuzzer.in/2952166738ea3eb1732dc60268a3cac1ad6dcb57 new file mode 100644 index 0000000000..0ab9be2d86 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2952166738ea3eb1732dc60268a3cac1ad6dcb57 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/29aaa16c6144199390f42cef60f33abb0a525781 b/fuzz/gnutls_psk_server_fuzzer.in/29aaa16c6144199390f42cef60f33abb0a525781 new file mode 100644 index 0000000000..99960e7253 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/29aaa16c6144199390f42cef60f33abb0a525781 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/29cab86971fbc7ab15fad5a5fd6964d600ef422e b/fuzz/gnutls_psk_server_fuzzer.in/29cab86971fbc7ab15fad5a5fd6964d600ef422e new file mode 100644 index 0000000000..64ff4ab343 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/29cab86971fbc7ab15fad5a5fd6964d600ef422e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/29d7233220be876ee3b30094d0e1b5b24385937f b/fuzz/gnutls_psk_server_fuzzer.in/29d7233220be876ee3b30094d0e1b5b24385937f new file mode 100644 index 0000000000..c727e2e4bb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/29d7233220be876ee3b30094d0e1b5b24385937f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2a35544e29a1f2f71351678b1b2dd1c1c8653298 b/fuzz/gnutls_psk_server_fuzzer.in/2a35544e29a1f2f71351678b1b2dd1c1c8653298 new file mode 100644 index 0000000000..aaed5a6b1a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2a35544e29a1f2f71351678b1b2dd1c1c8653298 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2ab0553f18da00c14f996746b66ae35255d2627a b/fuzz/gnutls_psk_server_fuzzer.in/2ab0553f18da00c14f996746b66ae35255d2627a new file mode 100644 index 0000000000..789c9ac115 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2ab0553f18da00c14f996746b66ae35255d2627a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2afd23cd91700803efc377badfa55dfb6a4b7c37 b/fuzz/gnutls_psk_server_fuzzer.in/2afd23cd91700803efc377badfa55dfb6a4b7c37 new file mode 100644 index 0000000000..95a343cc44 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2afd23cd91700803efc377badfa55dfb6a4b7c37 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2b49affd017c45506532650315f7366777652daa b/fuzz/gnutls_psk_server_fuzzer.in/2b49affd017c45506532650315f7366777652daa new file mode 100644 index 0000000000..754eb48595 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2b49affd017c45506532650315f7366777652daa differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2b9a157c7065144ce5221d0a5725545900052196 b/fuzz/gnutls_psk_server_fuzzer.in/2b9a157c7065144ce5221d0a5725545900052196 new file mode 100644 index 0000000000..8617299da4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2b9a157c7065144ce5221d0a5725545900052196 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2c0572d8e1708ae25ae2c2c0ff2938f064119b23 b/fuzz/gnutls_psk_server_fuzzer.in/2c0572d8e1708ae25ae2c2c0ff2938f064119b23 new file mode 100644 index 0000000000..fdc91e62f2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2c0572d8e1708ae25ae2c2c0ff2938f064119b23 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2c24553a0ab7094f95d0af2a70cd86ae6e08842b b/fuzz/gnutls_psk_server_fuzzer.in/2c24553a0ab7094f95d0af2a70cd86ae6e08842b new file mode 100644 index 0000000000..137b1ce14d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2c24553a0ab7094f95d0af2a70cd86ae6e08842b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2c5afa9d0e6677d1688222b44b3e22557f260007 b/fuzz/gnutls_psk_server_fuzzer.in/2c5afa9d0e6677d1688222b44b3e22557f260007 new file mode 100644 index 0000000000..5b87bb42af Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2c5afa9d0e6677d1688222b44b3e22557f260007 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2cbbd4cda870e8340932304add5371a3ac54d4d8 b/fuzz/gnutls_psk_server_fuzzer.in/2cbbd4cda870e8340932304add5371a3ac54d4d8 new file mode 100644 index 0000000000..850b5de6a0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2cbbd4cda870e8340932304add5371a3ac54d4d8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2d203f7ed8a9c30ce5d51f863ec0049fa4204dfb b/fuzz/gnutls_psk_server_fuzzer.in/2d203f7ed8a9c30ce5d51f863ec0049fa4204dfb new file mode 100644 index 0000000000..3d48bdb2b9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2d203f7ed8a9c30ce5d51f863ec0049fa4204dfb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2d41b52788302d4b89291441ee71de8542bad271 b/fuzz/gnutls_psk_server_fuzzer.in/2d41b52788302d4b89291441ee71de8542bad271 new file mode 100644 index 0000000000..2b299fe080 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2d41b52788302d4b89291441ee71de8542bad271 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2d58735d40fb4894aaec238bfc1554649966e450 b/fuzz/gnutls_psk_server_fuzzer.in/2d58735d40fb4894aaec238bfc1554649966e450 new file mode 100644 index 0000000000..d95501e537 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2d58735d40fb4894aaec238bfc1554649966e450 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2e2982eae6cb892e2340386c354b000431f283fd b/fuzz/gnutls_psk_server_fuzzer.in/2e2982eae6cb892e2340386c354b000431f283fd new file mode 100644 index 0000000000..d4cfd0dabd Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2e2982eae6cb892e2340386c354b000431f283fd differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2e4651dfda80200643ad8ea05791bd769ba321e2 b/fuzz/gnutls_psk_server_fuzzer.in/2e4651dfda80200643ad8ea05791bd769ba321e2 new file mode 100644 index 0000000000..d2d16a2a38 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2e4651dfda80200643ad8ea05791bd769ba321e2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2e4d8f4a9ab0633b217927774cbbd244711e22e9 b/fuzz/gnutls_psk_server_fuzzer.in/2e4d8f4a9ab0633b217927774cbbd244711e22e9 new file mode 100644 index 0000000000..7bb8a40f71 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2e4d8f4a9ab0633b217927774cbbd244711e22e9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2e771a571171480ceafe2642e94c34d3c5c5fa94 b/fuzz/gnutls_psk_server_fuzzer.in/2e771a571171480ceafe2642e94c34d3c5c5fa94 new file mode 100644 index 0000000000..671fccd10c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2e771a571171480ceafe2642e94c34d3c5c5fa94 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2ec23407e3d1dceef8f706d22a42864a5a5c89f3 b/fuzz/gnutls_psk_server_fuzzer.in/2ec23407e3d1dceef8f706d22a42864a5a5c89f3 new file mode 100644 index 0000000000..5c9ebe7775 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2ec23407e3d1dceef8f706d22a42864a5a5c89f3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2ee1f8da0fd9dd799032bc7b23670627e1740231 b/fuzz/gnutls_psk_server_fuzzer.in/2ee1f8da0fd9dd799032bc7b23670627e1740231 new file mode 100644 index 0000000000..a1a4e4722e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2ee1f8da0fd9dd799032bc7b23670627e1740231 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2ef035698fe6de277d738e572514b6b1a44b5f8f b/fuzz/gnutls_psk_server_fuzzer.in/2ef035698fe6de277d738e572514b6b1a44b5f8f new file mode 100644 index 0000000000..0e0aa1fccd Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2ef035698fe6de277d738e572514b6b1a44b5f8f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2ef9863142ef49270b7197f715838c767947a69c b/fuzz/gnutls_psk_server_fuzzer.in/2ef9863142ef49270b7197f715838c767947a69c new file mode 100644 index 0000000000..c932505ac2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2ef9863142ef49270b7197f715838c767947a69c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2efda1c86492dc49da076f7292e87294ccdc5bb1 b/fuzz/gnutls_psk_server_fuzzer.in/2efda1c86492dc49da076f7292e87294ccdc5bb1 new file mode 100644 index 0000000000..491df2f58b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2efda1c86492dc49da076f7292e87294ccdc5bb1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2f0d9e27afe04c0e473777dc497f1d3b87f5dc6f b/fuzz/gnutls_psk_server_fuzzer.in/2f0d9e27afe04c0e473777dc497f1d3b87f5dc6f new file mode 100644 index 0000000000..28bd8a206b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2f0d9e27afe04c0e473777dc497f1d3b87f5dc6f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2f47bece903479fac36f2f60b5e88a6f69766a52 b/fuzz/gnutls_psk_server_fuzzer.in/2f47bece903479fac36f2f60b5e88a6f69766a52 new file mode 100644 index 0000000000..c714bcdd94 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2f47bece903479fac36f2f60b5e88a6f69766a52 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2f5d85e3589178f65a1853f11cc36a552fa762e0 b/fuzz/gnutls_psk_server_fuzzer.in/2f5d85e3589178f65a1853f11cc36a552fa762e0 new file mode 100644 index 0000000000..baa2083055 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2f5d85e3589178f65a1853f11cc36a552fa762e0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/2f656c4c665b40985837c1dab5a44be781704451 b/fuzz/gnutls_psk_server_fuzzer.in/2f656c4c665b40985837c1dab5a44be781704451 new file mode 100644 index 0000000000..5bc32c8f72 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/2f656c4c665b40985837c1dab5a44be781704451 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3081f550b11083b565e3312e70516b31dbe51444 b/fuzz/gnutls_psk_server_fuzzer.in/3081f550b11083b565e3312e70516b31dbe51444 new file mode 100644 index 0000000000..89480494e0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3081f550b11083b565e3312e70516b31dbe51444 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3089558829ca5e7a7f08e1254b82dfff7f29cf9d b/fuzz/gnutls_psk_server_fuzzer.in/3089558829ca5e7a7f08e1254b82dfff7f29cf9d new file mode 100644 index 0000000000..eef3863c97 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3089558829ca5e7a7f08e1254b82dfff7f29cf9d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/30c35967ff13456c04adf717f4e576134fa0fb90 b/fuzz/gnutls_psk_server_fuzzer.in/30c35967ff13456c04adf717f4e576134fa0fb90 new file mode 100644 index 0000000000..117e70669d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/30c35967ff13456c04adf717f4e576134fa0fb90 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/312b1e2cadd51d0871cb6600b90c078d80e9d90c b/fuzz/gnutls_psk_server_fuzzer.in/312b1e2cadd51d0871cb6600b90c078d80e9d90c new file mode 100644 index 0000000000..9bc357fd70 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/312b1e2cadd51d0871cb6600b90c078d80e9d90c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3150ea51c245fd8eb19ab5561be9f621455855b8 b/fuzz/gnutls_psk_server_fuzzer.in/3150ea51c245fd8eb19ab5561be9f621455855b8 new file mode 100644 index 0000000000..386e1bb061 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3150ea51c245fd8eb19ab5561be9f621455855b8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3208548e04b0d8676a1766ab82a484f6743b4095 b/fuzz/gnutls_psk_server_fuzzer.in/3208548e04b0d8676a1766ab82a484f6743b4095 new file mode 100644 index 0000000000..0a583af1d5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3208548e04b0d8676a1766ab82a484f6743b4095 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/32198d665704a4a4f4b64544377e2c8bd21d2476 b/fuzz/gnutls_psk_server_fuzzer.in/32198d665704a4a4f4b64544377e2c8bd21d2476 new file mode 100644 index 0000000000..ff80896d0c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/32198d665704a4a4f4b64544377e2c8bd21d2476 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3261102d5a2626605b01105710f3c7329c84b211 b/fuzz/gnutls_psk_server_fuzzer.in/3261102d5a2626605b01105710f3c7329c84b211 new file mode 100644 index 0000000000..94b951b3a2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3261102d5a2626605b01105710f3c7329c84b211 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/326dbd74c630e50581a221d285df295a1ed0db84 b/fuzz/gnutls_psk_server_fuzzer.in/326dbd74c630e50581a221d285df295a1ed0db84 new file mode 100644 index 0000000000..afca6d2aeb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/326dbd74c630e50581a221d285df295a1ed0db84 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/328554c47c23e43da89f5462b5895f2fcb5ddf24 b/fuzz/gnutls_psk_server_fuzzer.in/328554c47c23e43da89f5462b5895f2fcb5ddf24 new file mode 100644 index 0000000000..e6bb762489 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/328554c47c23e43da89f5462b5895f2fcb5ddf24 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/32b4dfc588432e53cf1bf59945c31c6e859cf6ed b/fuzz/gnutls_psk_server_fuzzer.in/32b4dfc588432e53cf1bf59945c31c6e859cf6ed new file mode 100644 index 0000000000..efa0afedae Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/32b4dfc588432e53cf1bf59945c31c6e859cf6ed differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/32d3928b59aea8358559f9639524d8e053072633 b/fuzz/gnutls_psk_server_fuzzer.in/32d3928b59aea8358559f9639524d8e053072633 new file mode 100644 index 0000000000..3285598a58 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/32d3928b59aea8358559f9639524d8e053072633 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3346cbf29df1b982ee76f0bf36150d03feae6868 b/fuzz/gnutls_psk_server_fuzzer.in/3346cbf29df1b982ee76f0bf36150d03feae6868 new file mode 100644 index 0000000000..4efb7b9ccf Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3346cbf29df1b982ee76f0bf36150d03feae6868 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3394274cb75f7b429764bb710528ee5d465b6855 b/fuzz/gnutls_psk_server_fuzzer.in/3394274cb75f7b429764bb710528ee5d465b6855 new file mode 100644 index 0000000000..72b85c9cd1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3394274cb75f7b429764bb710528ee5d465b6855 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/33bef85c2ddd17db1eaedc6ae8acfb44ed76f7fb b/fuzz/gnutls_psk_server_fuzzer.in/33bef85c2ddd17db1eaedc6ae8acfb44ed76f7fb new file mode 100644 index 0000000000..553c066101 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/33bef85c2ddd17db1eaedc6ae8acfb44ed76f7fb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/33c4ff2c2046e6e93b9fab133a409c6c4a6c3823 b/fuzz/gnutls_psk_server_fuzzer.in/33c4ff2c2046e6e93b9fab133a409c6c4a6c3823 new file mode 100644 index 0000000000..0cc904faf3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/33c4ff2c2046e6e93b9fab133a409c6c4a6c3823 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/33d39b7a55b4ef71fed9ccd7d1c614e513280c40 b/fuzz/gnutls_psk_server_fuzzer.in/33d39b7a55b4ef71fed9ccd7d1c614e513280c40 new file mode 100644 index 0000000000..5e49913400 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/33d39b7a55b4ef71fed9ccd7d1c614e513280c40 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/33e41b157f8af6d113c177bfcef0200bacccdfa4 b/fuzz/gnutls_psk_server_fuzzer.in/33e41b157f8af6d113c177bfcef0200bacccdfa4 new file mode 100644 index 0000000000..00925027df Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/33e41b157f8af6d113c177bfcef0200bacccdfa4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/341dbd0d40b483f52000934814ac943019893d60 b/fuzz/gnutls_psk_server_fuzzer.in/341dbd0d40b483f52000934814ac943019893d60 new file mode 100644 index 0000000000..c9ba2ffd20 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/341dbd0d40b483f52000934814ac943019893d60 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/35ba7e1b9716338a25acd102252cf7d6fa6625da b/fuzz/gnutls_psk_server_fuzzer.in/35ba7e1b9716338a25acd102252cf7d6fa6625da new file mode 100644 index 0000000000..6a116661cb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/35ba7e1b9716338a25acd102252cf7d6fa6625da differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3632210a5d5e55267660bf62bcd3b48986e41eae b/fuzz/gnutls_psk_server_fuzzer.in/3632210a5d5e55267660bf62bcd3b48986e41eae new file mode 100644 index 0000000000..91a2f8e8b3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3632210a5d5e55267660bf62bcd3b48986e41eae differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3712c428bbf6781611f0ce06d92c06325d4303cb b/fuzz/gnutls_psk_server_fuzzer.in/3712c428bbf6781611f0ce06d92c06325d4303cb new file mode 100644 index 0000000000..145bf3d08d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3712c428bbf6781611f0ce06d92c06325d4303cb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/374b12774e9d7721bd47d638ba46dbd1d9234e8e b/fuzz/gnutls_psk_server_fuzzer.in/374b12774e9d7721bd47d638ba46dbd1d9234e8e new file mode 100644 index 0000000000..c2b65e4535 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/374b12774e9d7721bd47d638ba46dbd1d9234e8e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/376f2d048d3bae588427483579215d1b5230a3b5 b/fuzz/gnutls_psk_server_fuzzer.in/376f2d048d3bae588427483579215d1b5230a3b5 new file mode 100644 index 0000000000..191ad5cb92 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/376f2d048d3bae588427483579215d1b5230a3b5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3798767970e59f471d50269223fac04947c45100 b/fuzz/gnutls_psk_server_fuzzer.in/3798767970e59f471d50269223fac04947c45100 new file mode 100644 index 0000000000..a9e3043927 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3798767970e59f471d50269223fac04947c45100 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/379c91a05f26c74e37c71196d02fbe61ed2c49e3 b/fuzz/gnutls_psk_server_fuzzer.in/379c91a05f26c74e37c71196d02fbe61ed2c49e3 new file mode 100644 index 0000000000..e7a1ab9a72 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/379c91a05f26c74e37c71196d02fbe61ed2c49e3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/37a9fce812c24486e2fc333a2f1c9cfd5474b5c0 b/fuzz/gnutls_psk_server_fuzzer.in/37a9fce812c24486e2fc333a2f1c9cfd5474b5c0 new file mode 100644 index 0000000000..12e2bdc9d4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/37a9fce812c24486e2fc333a2f1c9cfd5474b5c0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/37b119eba51d03f0298b239bdb362e8acc83858d b/fuzz/gnutls_psk_server_fuzzer.in/37b119eba51d03f0298b239bdb362e8acc83858d new file mode 100644 index 0000000000..8ca700e7c5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/37b119eba51d03f0298b239bdb362e8acc83858d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/39118bb2dbc5f2374cb5bf886afa729c482a3f40 b/fuzz/gnutls_psk_server_fuzzer.in/39118bb2dbc5f2374cb5bf886afa729c482a3f40 new file mode 100644 index 0000000000..bf8930140f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/39118bb2dbc5f2374cb5bf886afa729c482a3f40 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/39202e72ae8cece1e8242ca5527be6d2b9979bf6 b/fuzz/gnutls_psk_server_fuzzer.in/39202e72ae8cece1e8242ca5527be6d2b9979bf6 new file mode 100644 index 0000000000..edc0f558e3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/39202e72ae8cece1e8242ca5527be6d2b9979bf6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/39802b2fcdbfa057030c0aad8f414e13dee7dc39 b/fuzz/gnutls_psk_server_fuzzer.in/39802b2fcdbfa057030c0aad8f414e13dee7dc39 new file mode 100644 index 0000000000..6d1753a25a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/39802b2fcdbfa057030c0aad8f414e13dee7dc39 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/398040a129e04cc10b411e06b1881bd055b7ee36 b/fuzz/gnutls_psk_server_fuzzer.in/398040a129e04cc10b411e06b1881bd055b7ee36 new file mode 100644 index 0000000000..19dca16f4c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/398040a129e04cc10b411e06b1881bd055b7ee36 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3a78dba5a41bb0c17d5aef3c652e5c45c5764e63 b/fuzz/gnutls_psk_server_fuzzer.in/3a78dba5a41bb0c17d5aef3c652e5c45c5764e63 new file mode 100644 index 0000000000..0447b7b28c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3a78dba5a41bb0c17d5aef3c652e5c45c5764e63 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3b4d1fa2fff475bc752cdc765f307afe30e06df3 b/fuzz/gnutls_psk_server_fuzzer.in/3b4d1fa2fff475bc752cdc765f307afe30e06df3 new file mode 100644 index 0000000000..122ac24738 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3b4d1fa2fff475bc752cdc765f307afe30e06df3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3b8065748b48e949bd09ddbd1dbc0488634b667e b/fuzz/gnutls_psk_server_fuzzer.in/3b8065748b48e949bd09ddbd1dbc0488634b667e new file mode 100644 index 0000000000..162ca9c98b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3b8065748b48e949bd09ddbd1dbc0488634b667e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3b8e1610a628704028f0867db5adea87123caadc b/fuzz/gnutls_psk_server_fuzzer.in/3b8e1610a628704028f0867db5adea87123caadc new file mode 100644 index 0000000000..80e8b5716c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3b8e1610a628704028f0867db5adea87123caadc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3bbf12fbfb5f8b1efad7d30ff4ce6662ad2852d6 b/fuzz/gnutls_psk_server_fuzzer.in/3bbf12fbfb5f8b1efad7d30ff4ce6662ad2852d6 new file mode 100644 index 0000000000..41b324cc48 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3bbf12fbfb5f8b1efad7d30ff4ce6662ad2852d6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3c4059957a1d7cdb266a886222d2c114905552ec b/fuzz/gnutls_psk_server_fuzzer.in/3c4059957a1d7cdb266a886222d2c114905552ec new file mode 100644 index 0000000000..6fbea6f9e1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3c4059957a1d7cdb266a886222d2c114905552ec differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3c80fbb718ed9de76bca7939741edf30331a9112 b/fuzz/gnutls_psk_server_fuzzer.in/3c80fbb718ed9de76bca7939741edf30331a9112 new file mode 100644 index 0000000000..708dc78345 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3c80fbb718ed9de76bca7939741edf30331a9112 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3cb4dd7ed6287688590a004957dd7c59e3348b5f b/fuzz/gnutls_psk_server_fuzzer.in/3cb4dd7ed6287688590a004957dd7c59e3348b5f new file mode 100644 index 0000000000..b5dde74a4a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3cb4dd7ed6287688590a004957dd7c59e3348b5f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3d6334a292286f36cd1f27555a885cfc615a6d9f b/fuzz/gnutls_psk_server_fuzzer.in/3d6334a292286f36cd1f27555a885cfc615a6d9f new file mode 100644 index 0000000000..534b15bfc6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3d6334a292286f36cd1f27555a885cfc615a6d9f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3d6bf88644328402f8e2c7bcc9bb0c0cda93c30b b/fuzz/gnutls_psk_server_fuzzer.in/3d6bf88644328402f8e2c7bcc9bb0c0cda93c30b new file mode 100644 index 0000000000..b14cfa0447 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3d6bf88644328402f8e2c7bcc9bb0c0cda93c30b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3dee9631b76c1401f4c6faae07c7cf3b13e63be9 b/fuzz/gnutls_psk_server_fuzzer.in/3dee9631b76c1401f4c6faae07c7cf3b13e63be9 new file mode 100644 index 0000000000..ea81c07b26 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3dee9631b76c1401f4c6faae07c7cf3b13e63be9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3df1c1557e5e63cc3b771063b6890b7fb6c549be b/fuzz/gnutls_psk_server_fuzzer.in/3df1c1557e5e63cc3b771063b6890b7fb6c549be new file mode 100644 index 0000000000..2eb7f7f80e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3df1c1557e5e63cc3b771063b6890b7fb6c549be differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3e4de6aae612c649447b81ef1c88f0f28a50fa8a b/fuzz/gnutls_psk_server_fuzzer.in/3e4de6aae612c649447b81ef1c88f0f28a50fa8a new file mode 100644 index 0000000000..114ed211be Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3e4de6aae612c649447b81ef1c88f0f28a50fa8a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3e60f4a86851c8cceaa279c5a61de845b5748483 b/fuzz/gnutls_psk_server_fuzzer.in/3e60f4a86851c8cceaa279c5a61de845b5748483 new file mode 100644 index 0000000000..5a9252fa82 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3e60f4a86851c8cceaa279c5a61de845b5748483 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3e82ee5fc1c56d189071fed5960f0a2a7d07e837 b/fuzz/gnutls_psk_server_fuzzer.in/3e82ee5fc1c56d189071fed5960f0a2a7d07e837 new file mode 100644 index 0000000000..a14133764b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3e82ee5fc1c56d189071fed5960f0a2a7d07e837 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3f3cdb1378114700553414610fa45a78683949fc b/fuzz/gnutls_psk_server_fuzzer.in/3f3cdb1378114700553414610fa45a78683949fc new file mode 100644 index 0000000000..29861d57e2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3f3cdb1378114700553414610fa45a78683949fc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3f8b3d0d0861ce76c57355d4e11eec2004e53c79 b/fuzz/gnutls_psk_server_fuzzer.in/3f8b3d0d0861ce76c57355d4e11eec2004e53c79 new file mode 100644 index 0000000000..f1064d9c77 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3f8b3d0d0861ce76c57355d4e11eec2004e53c79 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/3fcfee8b9e3861b6e2f1b4645d5e518e982db46f b/fuzz/gnutls_psk_server_fuzzer.in/3fcfee8b9e3861b6e2f1b4645d5e518e982db46f new file mode 100644 index 0000000000..6448814b3b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/3fcfee8b9e3861b6e2f1b4645d5e518e982db46f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/40b555260ba125369628cfacf1b1d7b6b251ec08 b/fuzz/gnutls_psk_server_fuzzer.in/40b555260ba125369628cfacf1b1d7b6b251ec08 new file mode 100644 index 0000000000..556b50e71b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/40b555260ba125369628cfacf1b1d7b6b251ec08 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/418514dc11026bef4470a833cf744a927ab482c9 b/fuzz/gnutls_psk_server_fuzzer.in/418514dc11026bef4470a833cf744a927ab482c9 new file mode 100644 index 0000000000..d7dd519997 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/418514dc11026bef4470a833cf744a927ab482c9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/419b5b71d80b3050cbb9ea06ad9a771d5235b436 b/fuzz/gnutls_psk_server_fuzzer.in/419b5b71d80b3050cbb9ea06ad9a771d5235b436 new file mode 100644 index 0000000000..c2c53b701e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/419b5b71d80b3050cbb9ea06ad9a771d5235b436 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/422cd09ccfb03559ac1fcee53d9b2df6cd9af4ea b/fuzz/gnutls_psk_server_fuzzer.in/422cd09ccfb03559ac1fcee53d9b2df6cd9af4ea new file mode 100644 index 0000000000..1e0fec5624 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/422cd09ccfb03559ac1fcee53d9b2df6cd9af4ea differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/42833e0e21d0e1b63d0341efe835aabfc450aef7 b/fuzz/gnutls_psk_server_fuzzer.in/42833e0e21d0e1b63d0341efe835aabfc450aef7 new file mode 100644 index 0000000000..6fcd54751f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/42833e0e21d0e1b63d0341efe835aabfc450aef7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4290eec6cfe33828a42dff2e48ed3f62e4497409 b/fuzz/gnutls_psk_server_fuzzer.in/4290eec6cfe33828a42dff2e48ed3f62e4497409 new file mode 100644 index 0000000000..707c26536d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4290eec6cfe33828a42dff2e48ed3f62e4497409 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/42ec10b5891c9f4630e6db9863e93e9d23346419 b/fuzz/gnutls_psk_server_fuzzer.in/42ec10b5891c9f4630e6db9863e93e9d23346419 new file mode 100644 index 0000000000..6fc7b0136b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/42ec10b5891c9f4630e6db9863e93e9d23346419 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/430cb0aaaf2e057673eea7f356b294553056d733 b/fuzz/gnutls_psk_server_fuzzer.in/430cb0aaaf2e057673eea7f356b294553056d733 new file mode 100644 index 0000000000..9a3cfc2746 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/430cb0aaaf2e057673eea7f356b294553056d733 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/43108ab4acbc36ab14e591cac7127b668816e7ca b/fuzz/gnutls_psk_server_fuzzer.in/43108ab4acbc36ab14e591cac7127b668816e7ca new file mode 100644 index 0000000000..72b3b7c108 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/43108ab4acbc36ab14e591cac7127b668816e7ca differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4311e64936c02dfb57495432fee047f1d190430e b/fuzz/gnutls_psk_server_fuzzer.in/4311e64936c02dfb57495432fee047f1d190430e new file mode 100644 index 0000000000..106890b7e6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4311e64936c02dfb57495432fee047f1d190430e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/434b19e039eb5e60e9b46773e51cf3eae3bc4e4f b/fuzz/gnutls_psk_server_fuzzer.in/434b19e039eb5e60e9b46773e51cf3eae3bc4e4f new file mode 100644 index 0000000000..72b925bbe8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/434b19e039eb5e60e9b46773e51cf3eae3bc4e4f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/434fca73aa7a78192ff6df82ffcce3664bb50427 b/fuzz/gnutls_psk_server_fuzzer.in/434fca73aa7a78192ff6df82ffcce3664bb50427 new file mode 100644 index 0000000000..7369940604 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/434fca73aa7a78192ff6df82ffcce3664bb50427 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f b/fuzz/gnutls_psk_server_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f new file mode 100644 index 0000000000..5cf1a797d5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/440bb1e7fc77f38328e1e3db5aa51259709a31d0 b/fuzz/gnutls_psk_server_fuzzer.in/440bb1e7fc77f38328e1e3db5aa51259709a31d0 new file mode 100644 index 0000000000..7b2800e3c3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/440bb1e7fc77f38328e1e3db5aa51259709a31d0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/443e9ce5cdca7aca9b2ba855460d6aad7571d476 b/fuzz/gnutls_psk_server_fuzzer.in/443e9ce5cdca7aca9b2ba855460d6aad7571d476 new file mode 100644 index 0000000000..2085892a6e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/443e9ce5cdca7aca9b2ba855460d6aad7571d476 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/447cfe9705d24ed5583fbe06cc2eb036f5ca057c b/fuzz/gnutls_psk_server_fuzzer.in/447cfe9705d24ed5583fbe06cc2eb036f5ca057c new file mode 100644 index 0000000000..a2f2bbe804 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/447cfe9705d24ed5583fbe06cc2eb036f5ca057c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4502c9f96d48809fca0e6c892addd9c89800cc9e b/fuzz/gnutls_psk_server_fuzzer.in/4502c9f96d48809fca0e6c892addd9c89800cc9e new file mode 100644 index 0000000000..06626a60b5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4502c9f96d48809fca0e6c892addd9c89800cc9e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/45451861b6ac2dd8f420ce445769c9291c6fd61f b/fuzz/gnutls_psk_server_fuzzer.in/45451861b6ac2dd8f420ce445769c9291c6fd61f new file mode 100644 index 0000000000..1b19570271 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/45451861b6ac2dd8f420ce445769c9291c6fd61f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/456ed3549cfad7190103fd690f0380e8d5caffe3 b/fuzz/gnutls_psk_server_fuzzer.in/456ed3549cfad7190103fd690f0380e8d5caffe3 new file mode 100644 index 0000000000..f4123c1d1f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/456ed3549cfad7190103fd690f0380e8d5caffe3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/458f32864a8a788c60ef6cc7e1cf0d07a9322398 b/fuzz/gnutls_psk_server_fuzzer.in/458f32864a8a788c60ef6cc7e1cf0d07a9322398 new file mode 100644 index 0000000000..bc72b03471 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/458f32864a8a788c60ef6cc7e1cf0d07a9322398 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4605cb576ba34f491d7777698c812a295100cb51 b/fuzz/gnutls_psk_server_fuzzer.in/4605cb576ba34f491d7777698c812a295100cb51 new file mode 100644 index 0000000000..89363df24f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4605cb576ba34f491d7777698c812a295100cb51 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/46258cc40fe8162850c300a5b89aa69d50fdc74c b/fuzz/gnutls_psk_server_fuzzer.in/46258cc40fe8162850c300a5b89aa69d50fdc74c new file mode 100644 index 0000000000..c93ff4fefa Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/46258cc40fe8162850c300a5b89aa69d50fdc74c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/474318f71a5d24a229e5743fe071192e0e01dd13 b/fuzz/gnutls_psk_server_fuzzer.in/474318f71a5d24a229e5743fe071192e0e01dd13 new file mode 100644 index 0000000000..c3e0b4b1d4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/474318f71a5d24a229e5743fe071192e0e01dd13 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/474c52493322f2142aa955e23101df9978e94e65 b/fuzz/gnutls_psk_server_fuzzer.in/474c52493322f2142aa955e23101df9978e94e65 new file mode 100644 index 0000000000..708cb265f0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/474c52493322f2142aa955e23101df9978e94e65 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/47c09cf7166e782125d2a112fd87332a6e7f5f2c b/fuzz/gnutls_psk_server_fuzzer.in/47c09cf7166e782125d2a112fd87332a6e7f5f2c new file mode 100644 index 0000000000..a9a9b2d389 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/47c09cf7166e782125d2a112fd87332a6e7f5f2c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/490f3d1a84c33def36d15f30092bf7e98eb3eb60 b/fuzz/gnutls_psk_server_fuzzer.in/490f3d1a84c33def36d15f30092bf7e98eb3eb60 new file mode 100644 index 0000000000..51cafb216f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/490f3d1a84c33def36d15f30092bf7e98eb3eb60 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/49e1fb679138bdceeca4f172302d9adbbe0084fd b/fuzz/gnutls_psk_server_fuzzer.in/49e1fb679138bdceeca4f172302d9adbbe0084fd new file mode 100644 index 0000000000..3d38645977 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/49e1fb679138bdceeca4f172302d9adbbe0084fd differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/49ebcea4747cb5745f96969938011f716c6749de b/fuzz/gnutls_psk_server_fuzzer.in/49ebcea4747cb5745f96969938011f716c6749de new file mode 100644 index 0000000000..f2a96fc66d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/49ebcea4747cb5745f96969938011f716c6749de differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4a3e018767935be5d38b63ad051f64afe31d047c b/fuzz/gnutls_psk_server_fuzzer.in/4a3e018767935be5d38b63ad051f64afe31d047c new file mode 100644 index 0000000000..72e8642e67 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4a3e018767935be5d38b63ad051f64afe31d047c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4acf3cd91a9ffb79381f5a08ff4505b0f1bcd75a b/fuzz/gnutls_psk_server_fuzzer.in/4acf3cd91a9ffb79381f5a08ff4505b0f1bcd75a new file mode 100644 index 0000000000..499d6ebbaf Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4acf3cd91a9ffb79381f5a08ff4505b0f1bcd75a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4af428655a80261722c553924abbfa992a463052 b/fuzz/gnutls_psk_server_fuzzer.in/4af428655a80261722c553924abbfa992a463052 new file mode 100644 index 0000000000..6e4456b706 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4af428655a80261722c553924abbfa992a463052 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4b4c68791d5dab4a5b873009f345b79cbc3f5a86 b/fuzz/gnutls_psk_server_fuzzer.in/4b4c68791d5dab4a5b873009f345b79cbc3f5a86 new file mode 100644 index 0000000000..c2fef250d3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4b4c68791d5dab4a5b873009f345b79cbc3f5a86 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4b81d7722468a45bbc4782d80794a1188bfdc01f b/fuzz/gnutls_psk_server_fuzzer.in/4b81d7722468a45bbc4782d80794a1188bfdc01f new file mode 100644 index 0000000000..f17f8cfc97 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4b81d7722468a45bbc4782d80794a1188bfdc01f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4c114d78819d7b45fb42d833394b9bc8167ffb0a b/fuzz/gnutls_psk_server_fuzzer.in/4c114d78819d7b45fb42d833394b9bc8167ffb0a new file mode 100644 index 0000000000..21b4a0c0c1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4c114d78819d7b45fb42d833394b9bc8167ffb0a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4c3621e620c03fb7c4287ee515c0fc6dc4631fc1 b/fuzz/gnutls_psk_server_fuzzer.in/4c3621e620c03fb7c4287ee515c0fc6dc4631fc1 new file mode 100644 index 0000000000..bb9ce8d8cb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4c3621e620c03fb7c4287ee515c0fc6dc4631fc1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4c9db7b5dceb8783d574b22ae429aa1d0bf22ea4 b/fuzz/gnutls_psk_server_fuzzer.in/4c9db7b5dceb8783d574b22ae429aa1d0bf22ea4 new file mode 100644 index 0000000000..b1b741e302 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4c9db7b5dceb8783d574b22ae429aa1d0bf22ea4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4cbc50f4012cd36bf54a9844ef495bef7b111328 b/fuzz/gnutls_psk_server_fuzzer.in/4cbc50f4012cd36bf54a9844ef495bef7b111328 new file mode 100644 index 0000000000..89e1419875 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4cbc50f4012cd36bf54a9844ef495bef7b111328 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4ccda4c820e1f4aab7bfa58666305d172dec3e05 b/fuzz/gnutls_psk_server_fuzzer.in/4ccda4c820e1f4aab7bfa58666305d172dec3e05 new file mode 100644 index 0000000000..2ebc797d6e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4ccda4c820e1f4aab7bfa58666305d172dec3e05 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4d09230c82e15786214792b2e17fadbc4e987d57 b/fuzz/gnutls_psk_server_fuzzer.in/4d09230c82e15786214792b2e17fadbc4e987d57 new file mode 100644 index 0000000000..cfd2d2e9a8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4d09230c82e15786214792b2e17fadbc4e987d57 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4d41b58a1084ca1ef87c7480308f41d524546cab b/fuzz/gnutls_psk_server_fuzzer.in/4d41b58a1084ca1ef87c7480308f41d524546cab new file mode 100644 index 0000000000..51cc2c9fc1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4d41b58a1084ca1ef87c7480308f41d524546cab differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4d6deb98397c17b0aae1e5f0c9742136257e999d b/fuzz/gnutls_psk_server_fuzzer.in/4d6deb98397c17b0aae1e5f0c9742136257e999d new file mode 100644 index 0000000000..f92260c7ea Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4d6deb98397c17b0aae1e5f0c9742136257e999d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4df11bb8cf0c8b742ddafdab31a5b9fff5e1c40a b/fuzz/gnutls_psk_server_fuzzer.in/4df11bb8cf0c8b742ddafdab31a5b9fff5e1c40a new file mode 100644 index 0000000000..cb126ca931 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4df11bb8cf0c8b742ddafdab31a5b9fff5e1c40a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4e0067a816f48303d0bf254ece910de00f5c81a8 b/fuzz/gnutls_psk_server_fuzzer.in/4e0067a816f48303d0bf254ece910de00f5c81a8 new file mode 100644 index 0000000000..434336225c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4e0067a816f48303d0bf254ece910de00f5c81a8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4e0a81a7ca680b397926b34e7b67cc21a59064f5 b/fuzz/gnutls_psk_server_fuzzer.in/4e0a81a7ca680b397926b34e7b67cc21a59064f5 new file mode 100644 index 0000000000..2ef10bc9c4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4e0a81a7ca680b397926b34e7b67cc21a59064f5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4ea2d89303be796278fdf96468ff55eaa8b217b7 b/fuzz/gnutls_psk_server_fuzzer.in/4ea2d89303be796278fdf96468ff55eaa8b217b7 new file mode 100644 index 0000000000..8fb0a6a67a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4ea2d89303be796278fdf96468ff55eaa8b217b7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4f10bea6100f90da9fe6959f5b12b7a694e59648 b/fuzz/gnutls_psk_server_fuzzer.in/4f10bea6100f90da9fe6959f5b12b7a694e59648 new file mode 100644 index 0000000000..356d3bb04a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4f10bea6100f90da9fe6959f5b12b7a694e59648 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4fd76de50257d0b344e2f16e49a55599f81ff536 b/fuzz/gnutls_psk_server_fuzzer.in/4fd76de50257d0b344e2f16e49a55599f81ff536 new file mode 100644 index 0000000000..b39623e8c7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4fd76de50257d0b344e2f16e49a55599f81ff536 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/4ffa9e70a35ac4498895e2affffb737de15ef719 b/fuzz/gnutls_psk_server_fuzzer.in/4ffa9e70a35ac4498895e2affffb737de15ef719 new file mode 100644 index 0000000000..445775b2e4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/4ffa9e70a35ac4498895e2affffb737de15ef719 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/50c2b735cac2d6eb10b967255971fe37a0e0ab3a b/fuzz/gnutls_psk_server_fuzzer.in/50c2b735cac2d6eb10b967255971fe37a0e0ab3a new file mode 100644 index 0000000000..06ff7293b1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/50c2b735cac2d6eb10b967255971fe37a0e0ab3a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/50fb58f79ed8657aa9733c4a77d73d7b51531dc4 b/fuzz/gnutls_psk_server_fuzzer.in/50fb58f79ed8657aa9733c4a77d73d7b51531dc4 new file mode 100644 index 0000000000..01a863f821 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/50fb58f79ed8657aa9733c4a77d73d7b51531dc4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/516b1d568946a15a50027f4c87acb6c4e92c539e b/fuzz/gnutls_psk_server_fuzzer.in/516b1d568946a15a50027f4c87acb6c4e92c539e new file mode 100644 index 0000000000..b3e52ca9d6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/516b1d568946a15a50027f4c87acb6c4e92c539e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/516d5fb5ac0878cb9913e8b90cf27d19670d0954 b/fuzz/gnutls_psk_server_fuzzer.in/516d5fb5ac0878cb9913e8b90cf27d19670d0954 new file mode 100644 index 0000000000..51cfe3f166 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/516d5fb5ac0878cb9913e8b90cf27d19670d0954 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/51be809ad8d27b2fdd62934f00f8467b1a1cb5be b/fuzz/gnutls_psk_server_fuzzer.in/51be809ad8d27b2fdd62934f00f8467b1a1cb5be new file mode 100644 index 0000000000..2fdff04932 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/51be809ad8d27b2fdd62934f00f8467b1a1cb5be differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/51c33fbdf901f3e1fbfa49055baba369c687169f b/fuzz/gnutls_psk_server_fuzzer.in/51c33fbdf901f3e1fbfa49055baba369c687169f new file mode 100644 index 0000000000..6c0b0b1397 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/51c33fbdf901f3e1fbfa49055baba369c687169f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/51fba8782abf0bab923ae66576981f000443a845 b/fuzz/gnutls_psk_server_fuzzer.in/51fba8782abf0bab923ae66576981f000443a845 new file mode 100644 index 0000000000..dec17f2fb8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/51fba8782abf0bab923ae66576981f000443a845 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/534b7d49bf6ad62a55bd1253d38fccdf4d1c843f b/fuzz/gnutls_psk_server_fuzzer.in/534b7d49bf6ad62a55bd1253d38fccdf4d1c843f new file mode 100644 index 0000000000..2b13905859 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/534b7d49bf6ad62a55bd1253d38fccdf4d1c843f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/53e5d9e895350908feea07222ded8c0b5c82438b b/fuzz/gnutls_psk_server_fuzzer.in/53e5d9e895350908feea07222ded8c0b5c82438b new file mode 100644 index 0000000000..063c69b398 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/53e5d9e895350908feea07222ded8c0b5c82438b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/546873ee88ff3bbf1c442a084ced3d5cd092c623 b/fuzz/gnutls_psk_server_fuzzer.in/546873ee88ff3bbf1c442a084ced3d5cd092c623 new file mode 100644 index 0000000000..99e0b558df Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/546873ee88ff3bbf1c442a084ced3d5cd092c623 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/547bc10140602a4470f8beb8bf76911b1f5fb415 b/fuzz/gnutls_psk_server_fuzzer.in/547bc10140602a4470f8beb8bf76911b1f5fb415 new file mode 100644 index 0000000000..0e9f15481a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/547bc10140602a4470f8beb8bf76911b1f5fb415 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5489a3d5781e16dcfc1ddfea1e91b43a55b6831b b/fuzz/gnutls_psk_server_fuzzer.in/5489a3d5781e16dcfc1ddfea1e91b43a55b6831b new file mode 100644 index 0000000000..0734a0ff21 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5489a3d5781e16dcfc1ddfea1e91b43a55b6831b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/54ede67ce3d699a3fe103e37964b217e50b8b36a b/fuzz/gnutls_psk_server_fuzzer.in/54ede67ce3d699a3fe103e37964b217e50b8b36a new file mode 100644 index 0000000000..3116a90980 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/54ede67ce3d699a3fe103e37964b217e50b8b36a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5668958be4dd0c8d8cdf60f07167ac9150ab51fb b/fuzz/gnutls_psk_server_fuzzer.in/5668958be4dd0c8d8cdf60f07167ac9150ab51fb new file mode 100644 index 0000000000..a0a8ab619a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5668958be4dd0c8d8cdf60f07167ac9150ab51fb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5694716ee7bb47b630b52e054a1b6b9e4942eaea b/fuzz/gnutls_psk_server_fuzzer.in/5694716ee7bb47b630b52e054a1b6b9e4942eaea new file mode 100644 index 0000000000..bb7fc232ac Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5694716ee7bb47b630b52e054a1b6b9e4942eaea differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/57120ffe67d2eb746b7c299ffa345b37a9579adb b/fuzz/gnutls_psk_server_fuzzer.in/57120ffe67d2eb746b7c299ffa345b37a9579adb new file mode 100644 index 0000000000..7330368b04 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/57120ffe67d2eb746b7c299ffa345b37a9579adb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/577cf4c461f9137eb5339bc04401753c01d0dbca b/fuzz/gnutls_psk_server_fuzzer.in/577cf4c461f9137eb5339bc04401753c01d0dbca new file mode 100644 index 0000000000..a1fc39488c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/577cf4c461f9137eb5339bc04401753c01d0dbca differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/58abfe6c2b0b3ef8ff98223e782f65029b60e90e b/fuzz/gnutls_psk_server_fuzzer.in/58abfe6c2b0b3ef8ff98223e782f65029b60e90e new file mode 100644 index 0000000000..48366abdf0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/58abfe6c2b0b3ef8ff98223e782f65029b60e90e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/591112e8eb9b92b800699152f2605c95803d582c b/fuzz/gnutls_psk_server_fuzzer.in/591112e8eb9b92b800699152f2605c95803d582c new file mode 100644 index 0000000000..3b87702b02 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/591112e8eb9b92b800699152f2605c95803d582c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5916ddef88653bf290bd6f04dbb50874878f2049 b/fuzz/gnutls_psk_server_fuzzer.in/5916ddef88653bf290bd6f04dbb50874878f2049 new file mode 100644 index 0000000000..d268e4d1c7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5916ddef88653bf290bd6f04dbb50874878f2049 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/59c67e19434f8f621a7e781ebbdceca0a1bdd22d b/fuzz/gnutls_psk_server_fuzzer.in/59c67e19434f8f621a7e781ebbdceca0a1bdd22d new file mode 100644 index 0000000000..ecda6e2214 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/59c67e19434f8f621a7e781ebbdceca0a1bdd22d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/59e6bb0d8dd416aeb0a3b66cd96102e3ed3b048f b/fuzz/gnutls_psk_server_fuzzer.in/59e6bb0d8dd416aeb0a3b66cd96102e3ed3b048f new file mode 100644 index 0000000000..dd6bb8effa Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/59e6bb0d8dd416aeb0a3b66cd96102e3ed3b048f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5a7d7e349a314aeda7f137e5ccf8efeb18736181 b/fuzz/gnutls_psk_server_fuzzer.in/5a7d7e349a314aeda7f137e5ccf8efeb18736181 new file mode 100644 index 0000000000..42d7aba55d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5a7d7e349a314aeda7f137e5ccf8efeb18736181 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5ad572cf1287547ddd935e13f3946661dfd17216 b/fuzz/gnutls_psk_server_fuzzer.in/5ad572cf1287547ddd935e13f3946661dfd17216 new file mode 100644 index 0000000000..4f4805a907 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5ad572cf1287547ddd935e13f3946661dfd17216 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5af2e1833fa9c529efbf4099782b405317871578 b/fuzz/gnutls_psk_server_fuzzer.in/5af2e1833fa9c529efbf4099782b405317871578 new file mode 100644 index 0000000000..09b998af9e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5af2e1833fa9c529efbf4099782b405317871578 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5af9087514a94b3c6c6acbf1eb2c6da95a980a56 b/fuzz/gnutls_psk_server_fuzzer.in/5af9087514a94b3c6c6acbf1eb2c6da95a980a56 new file mode 100644 index 0000000000..3c9ab5bda9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5af9087514a94b3c6c6acbf1eb2c6da95a980a56 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5b657417cd22029ad24d289df3069dd2f2e5d96a b/fuzz/gnutls_psk_server_fuzzer.in/5b657417cd22029ad24d289df3069dd2f2e5d96a new file mode 100644 index 0000000000..c42403f709 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5b657417cd22029ad24d289df3069dd2f2e5d96a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5b762764f35624217ebee51db1a38f2985e5aeef b/fuzz/gnutls_psk_server_fuzzer.in/5b762764f35624217ebee51db1a38f2985e5aeef new file mode 100644 index 0000000000..1b1d6c8890 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5b762764f35624217ebee51db1a38f2985e5aeef differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5baccd38a58e7c2a7a327c9fbac082a65249ee16 b/fuzz/gnutls_psk_server_fuzzer.in/5baccd38a58e7c2a7a327c9fbac082a65249ee16 new file mode 100644 index 0000000000..a6dfaf8a57 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5baccd38a58e7c2a7a327c9fbac082a65249ee16 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5bee615df09cdbd162ee65c3acfec745e4c3f9f5 b/fuzz/gnutls_psk_server_fuzzer.in/5bee615df09cdbd162ee65c3acfec745e4c3f9f5 new file mode 100644 index 0000000000..57a0b6164e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5bee615df09cdbd162ee65c3acfec745e4c3f9f5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5c22c9458ebc60717f1196c4bf47cbfbfa117740 b/fuzz/gnutls_psk_server_fuzzer.in/5c22c9458ebc60717f1196c4bf47cbfbfa117740 new file mode 100644 index 0000000000..ca96a727fb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5c22c9458ebc60717f1196c4bf47cbfbfa117740 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5c3fa3dd861f28647c087d365e26290c09748547 b/fuzz/gnutls_psk_server_fuzzer.in/5c3fa3dd861f28647c087d365e26290c09748547 new file mode 100644 index 0000000000..5a6290a7f6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5c3fa3dd861f28647c087d365e26290c09748547 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5c58c38748fbe10ebc0218cc51f7288f747c54d3 b/fuzz/gnutls_psk_server_fuzzer.in/5c58c38748fbe10ebc0218cc51f7288f747c54d3 new file mode 100644 index 0000000000..7113ffbaaa Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5c58c38748fbe10ebc0218cc51f7288f747c54d3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5ca805da6fd9587da185f19bdc3c02d0a38a376e b/fuzz/gnutls_psk_server_fuzzer.in/5ca805da6fd9587da185f19bdc3c02d0a38a376e new file mode 100644 index 0000000000..5b20b871cf Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5ca805da6fd9587da185f19bdc3c02d0a38a376e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5ce9aba1944b5990279309e4a8813b25d49dd654 b/fuzz/gnutls_psk_server_fuzzer.in/5ce9aba1944b5990279309e4a8813b25d49dd654 new file mode 100644 index 0000000000..ad130dc2a4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5ce9aba1944b5990279309e4a8813b25d49dd654 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5cfdd0d2e6563f91e9c958d30f83e47f455d850b b/fuzz/gnutls_psk_server_fuzzer.in/5cfdd0d2e6563f91e9c958d30f83e47f455d850b new file mode 100644 index 0000000000..7f3274b62d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5cfdd0d2e6563f91e9c958d30f83e47f455d850b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5d93b9df199505e962ad0807d382669e8d1e00a7 b/fuzz/gnutls_psk_server_fuzzer.in/5d93b9df199505e962ad0807d382669e8d1e00a7 new file mode 100644 index 0000000000..3ba972bfe0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5d93b9df199505e962ad0807d382669e8d1e00a7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5da3c807d393967b358f9474d2129fb02589a64e b/fuzz/gnutls_psk_server_fuzzer.in/5da3c807d393967b358f9474d2129fb02589a64e new file mode 100644 index 0000000000..e44fdf3353 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5da3c807d393967b358f9474d2129fb02589a64e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5da8daa9e00605702ef3f51055f081b10a3a6a7a b/fuzz/gnutls_psk_server_fuzzer.in/5da8daa9e00605702ef3f51055f081b10a3a6a7a new file mode 100644 index 0000000000..bd99b49908 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5da8daa9e00605702ef3f51055f081b10a3a6a7a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5dad55170adf30a46e11eec1e7241666e10fe7e3 b/fuzz/gnutls_psk_server_fuzzer.in/5dad55170adf30a46e11eec1e7241666e10fe7e3 new file mode 100644 index 0000000000..7b8b3a5c9c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5dad55170adf30a46e11eec1e7241666e10fe7e3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5e1e37f867f46ba3b34692a91a585f250de2718a b/fuzz/gnutls_psk_server_fuzzer.in/5e1e37f867f46ba3b34692a91a585f250de2718a new file mode 100644 index 0000000000..420c22653f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5e1e37f867f46ba3b34692a91a585f250de2718a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5e32bf7109d7790290d43bf2253a1f4550c19664 b/fuzz/gnutls_psk_server_fuzzer.in/5e32bf7109d7790290d43bf2253a1f4550c19664 new file mode 100644 index 0000000000..123b5ff01b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5e32bf7109d7790290d43bf2253a1f4550c19664 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5e3a03f2708897c6274bbd021a00604a25295b1f b/fuzz/gnutls_psk_server_fuzzer.in/5e3a03f2708897c6274bbd021a00604a25295b1f new file mode 100644 index 0000000000..41dce90ab0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5e3a03f2708897c6274bbd021a00604a25295b1f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5ec43457284cabe4598f114357aae15d8f0031f3 b/fuzz/gnutls_psk_server_fuzzer.in/5ec43457284cabe4598f114357aae15d8f0031f3 new file mode 100644 index 0000000000..627e3fbc80 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5ec43457284cabe4598f114357aae15d8f0031f3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5f367cdb5e9fedc498a532b99400cf490c0077c6 b/fuzz/gnutls_psk_server_fuzzer.in/5f367cdb5e9fedc498a532b99400cf490c0077c6 new file mode 100644 index 0000000000..e37a815d40 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5f367cdb5e9fedc498a532b99400cf490c0077c6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5f6337f68cef83eb25e95d5d51929d4081841b1d b/fuzz/gnutls_psk_server_fuzzer.in/5f6337f68cef83eb25e95d5d51929d4081841b1d new file mode 100644 index 0000000000..06ab6e988e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5f6337f68cef83eb25e95d5d51929d4081841b1d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5f64eecef5da42a40d9933a9346d0c67abd933fc b/fuzz/gnutls_psk_server_fuzzer.in/5f64eecef5da42a40d9933a9346d0c67abd933fc new file mode 100644 index 0000000000..8ab7155450 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5f64eecef5da42a40d9933a9346d0c67abd933fc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/5fdc95198c5ade44344ad04b5f0e6bb1e94fb924 b/fuzz/gnutls_psk_server_fuzzer.in/5fdc95198c5ade44344ad04b5f0e6bb1e94fb924 new file mode 100644 index 0000000000..443856cc2c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/5fdc95198c5ade44344ad04b5f0e6bb1e94fb924 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6004d983e0885feceb731046282630dae5ebb45c b/fuzz/gnutls_psk_server_fuzzer.in/6004d983e0885feceb731046282630dae5ebb45c new file mode 100644 index 0000000000..fbca5b154e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6004d983e0885feceb731046282630dae5ebb45c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/605be9be0b474f834de89603a08ce717959916bb b/fuzz/gnutls_psk_server_fuzzer.in/605be9be0b474f834de89603a08ce717959916bb new file mode 100644 index 0000000000..dbb7aa5e07 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/605be9be0b474f834de89603a08ce717959916bb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/60c898abe5e3b338e2948236904a497405fad6c3 b/fuzz/gnutls_psk_server_fuzzer.in/60c898abe5e3b338e2948236904a497405fad6c3 new file mode 100644 index 0000000000..ffbc738209 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/60c898abe5e3b338e2948236904a497405fad6c3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/60f8145416b05aa4789c6fdb2ba7b367d179d796 b/fuzz/gnutls_psk_server_fuzzer.in/60f8145416b05aa4789c6fdb2ba7b367d179d796 new file mode 100644 index 0000000000..b79459be25 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/60f8145416b05aa4789c6fdb2ba7b367d179d796 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/60fd031de5ec103b2276b915a2ad5c607e9c073e b/fuzz/gnutls_psk_server_fuzzer.in/60fd031de5ec103b2276b915a2ad5c607e9c073e new file mode 100644 index 0000000000..8315ccb854 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/60fd031de5ec103b2276b915a2ad5c607e9c073e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/614911b6293aa4709f82b15aacd45664d9455216 b/fuzz/gnutls_psk_server_fuzzer.in/614911b6293aa4709f82b15aacd45664d9455216 new file mode 100644 index 0000000000..198f703cd7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/614911b6293aa4709f82b15aacd45664d9455216 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/61b3d6ae0f42df31c9cc57dd7839993a58f4b344 b/fuzz/gnutls_psk_server_fuzzer.in/61b3d6ae0f42df31c9cc57dd7839993a58f4b344 new file mode 100644 index 0000000000..c1020f239b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/61b3d6ae0f42df31c9cc57dd7839993a58f4b344 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/61cb52b0c50de8266a9c2d8b80367d1c8cf87a7b b/fuzz/gnutls_psk_server_fuzzer.in/61cb52b0c50de8266a9c2d8b80367d1c8cf87a7b new file mode 100644 index 0000000000..66bfeb6282 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/61cb52b0c50de8266a9c2d8b80367d1c8cf87a7b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6211f3f29914cd6bf3a3f38e495265eab85494bf b/fuzz/gnutls_psk_server_fuzzer.in/6211f3f29914cd6bf3a3f38e495265eab85494bf new file mode 100644 index 0000000000..41bbba7d35 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6211f3f29914cd6bf3a3f38e495265eab85494bf differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/626119311e64ed958604f96fbc417069bdaf4924 b/fuzz/gnutls_psk_server_fuzzer.in/626119311e64ed958604f96fbc417069bdaf4924 new file mode 100644 index 0000000000..a920cf4856 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/626119311e64ed958604f96fbc417069bdaf4924 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6279c8be83cedb95a73c73bce9f1fd3f0ce009f5 b/fuzz/gnutls_psk_server_fuzzer.in/6279c8be83cedb95a73c73bce9f1fd3f0ce009f5 new file mode 100644 index 0000000000..3e8ceced5e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6279c8be83cedb95a73c73bce9f1fd3f0ce009f5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/62a22f75e1e73d49b099c709e5f62870a930ccac b/fuzz/gnutls_psk_server_fuzzer.in/62a22f75e1e73d49b099c709e5f62870a930ccac new file mode 100644 index 0000000000..375c981315 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/62a22f75e1e73d49b099c709e5f62870a930ccac differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/62df67040426ed151c6f4f37921700cff22255b4 b/fuzz/gnutls_psk_server_fuzzer.in/62df67040426ed151c6f4f37921700cff22255b4 new file mode 100644 index 0000000000..ef9bf64d2d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/62df67040426ed151c6f4f37921700cff22255b4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6307eedf3b5904bf2eab07f7a695b5f475fe415a b/fuzz/gnutls_psk_server_fuzzer.in/6307eedf3b5904bf2eab07f7a695b5f475fe415a new file mode 100644 index 0000000000..e7cb909162 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6307eedf3b5904bf2eab07f7a695b5f475fe415a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6368991cc98cd4ab8029e547833cf56f08c1a740 b/fuzz/gnutls_psk_server_fuzzer.in/6368991cc98cd4ab8029e547833cf56f08c1a740 new file mode 100644 index 0000000000..f69c520a8e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6368991cc98cd4ab8029e547833cf56f08c1a740 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/63d4c95a359b74b5164f2deb77c12e4d14e53c3a b/fuzz/gnutls_psk_server_fuzzer.in/63d4c95a359b74b5164f2deb77c12e4d14e53c3a new file mode 100644 index 0000000000..04e07c8484 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/63d4c95a359b74b5164f2deb77c12e4d14e53c3a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/63ed510f47cc8877c38cc7f98f08fb68f630b759 b/fuzz/gnutls_psk_server_fuzzer.in/63ed510f47cc8877c38cc7f98f08fb68f630b759 new file mode 100644 index 0000000000..a0db46d36e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/63ed510f47cc8877c38cc7f98f08fb68f630b759 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/64304033a0aa471065f4a7a3fd679aae2abc97b4 b/fuzz/gnutls_psk_server_fuzzer.in/64304033a0aa471065f4a7a3fd679aae2abc97b4 new file mode 100644 index 0000000000..fca5f113d2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/64304033a0aa471065f4a7a3fd679aae2abc97b4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/64c45f5746bc642fe072f0cd153bb1d72053e6d3 b/fuzz/gnutls_psk_server_fuzzer.in/64c45f5746bc642fe072f0cd153bb1d72053e6d3 new file mode 100644 index 0000000000..d772937656 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/64c45f5746bc642fe072f0cd153bb1d72053e6d3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/64f42d60c443667ec1a9fbc88d8047e195b82a84 b/fuzz/gnutls_psk_server_fuzzer.in/64f42d60c443667ec1a9fbc88d8047e195b82a84 new file mode 100644 index 0000000000..573d167d6c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/64f42d60c443667ec1a9fbc88d8047e195b82a84 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/651ecdc2f3d27b04ebe593faf2dd19d8b1445811 b/fuzz/gnutls_psk_server_fuzzer.in/651ecdc2f3d27b04ebe593faf2dd19d8b1445811 new file mode 100644 index 0000000000..02724a477c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/651ecdc2f3d27b04ebe593faf2dd19d8b1445811 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/653272e0864465d4ab2e017964ef1a374a38fc2d b/fuzz/gnutls_psk_server_fuzzer.in/653272e0864465d4ab2e017964ef1a374a38fc2d new file mode 100644 index 0000000000..f7022b634c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/653272e0864465d4ab2e017964ef1a374a38fc2d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/666cfc2f35b0941cc7ca2c5abf874c363472808d b/fuzz/gnutls_psk_server_fuzzer.in/666cfc2f35b0941cc7ca2c5abf874c363472808d new file mode 100644 index 0000000000..ec07c2be19 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/666cfc2f35b0941cc7ca2c5abf874c363472808d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/66857c67639978120a566dfbd45fd60838bdcc36 b/fuzz/gnutls_psk_server_fuzzer.in/66857c67639978120a566dfbd45fd60838bdcc36 new file mode 100644 index 0000000000..3069ba63d0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/66857c67639978120a566dfbd45fd60838bdcc36 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/669969629ab361f5fad9115d865173350c9506ee b/fuzz/gnutls_psk_server_fuzzer.in/669969629ab361f5fad9115d865173350c9506ee new file mode 100644 index 0000000000..c5f9897856 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/669969629ab361f5fad9115d865173350c9506ee differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/66a1342ec2c34088ce9c1295eb0c558e5d297a33 b/fuzz/gnutls_psk_server_fuzzer.in/66a1342ec2c34088ce9c1295eb0c558e5d297a33 new file mode 100644 index 0000000000..fb61d6e844 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/66a1342ec2c34088ce9c1295eb0c558e5d297a33 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/66b8fe5b92da19a4f11cfbcc67ea57dd21499eff b/fuzz/gnutls_psk_server_fuzzer.in/66b8fe5b92da19a4f11cfbcc67ea57dd21499eff new file mode 100644 index 0000000000..3e893f4edc Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/66b8fe5b92da19a4f11cfbcc67ea57dd21499eff differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/66d7ecd76a315842dcad6cd233dd2391daaee390 b/fuzz/gnutls_psk_server_fuzzer.in/66d7ecd76a315842dcad6cd233dd2391daaee390 new file mode 100644 index 0000000000..39c469b5f9 --- /dev/null +++ b/fuzz/gnutls_psk_server_fuzzer.in/66d7ecd76a315842dcad6cd233dd2391daaee390 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/gnutls_psk_server_fuzzer.in/673e05639f1c6ab51c7505e8ee81bae2cd4550a8 b/fuzz/gnutls_psk_server_fuzzer.in/673e05639f1c6ab51c7505e8ee81bae2cd4550a8 new file mode 100644 index 0000000000..fded8f11c4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/673e05639f1c6ab51c7505e8ee81bae2cd4550a8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/68203943df9aa9239bfb63cbdab8207396823589 b/fuzz/gnutls_psk_server_fuzzer.in/68203943df9aa9239bfb63cbdab8207396823589 new file mode 100644 index 0000000000..64f897927e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/68203943df9aa9239bfb63cbdab8207396823589 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/683845a173776e018483218e7fa6355c5437aca1 b/fuzz/gnutls_psk_server_fuzzer.in/683845a173776e018483218e7fa6355c5437aca1 new file mode 100644 index 0000000000..8374dc64bd Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/683845a173776e018483218e7fa6355c5437aca1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/68a32c26c9a380a15641752d2ccc1c92e50dd973 b/fuzz/gnutls_psk_server_fuzzer.in/68a32c26c9a380a15641752d2ccc1c92e50dd973 new file mode 100644 index 0000000000..712674c0ce Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/68a32c26c9a380a15641752d2ccc1c92e50dd973 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/68c6e2d63c2301e3f8bc9aee4f108dc86de927b2 b/fuzz/gnutls_psk_server_fuzzer.in/68c6e2d63c2301e3f8bc9aee4f108dc86de927b2 new file mode 100644 index 0000000000..e234c20870 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/68c6e2d63c2301e3f8bc9aee4f108dc86de927b2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/68d48196bc8fa2933c20a19de0d78d7359a9f358 b/fuzz/gnutls_psk_server_fuzzer.in/68d48196bc8fa2933c20a19de0d78d7359a9f358 new file mode 100644 index 0000000000..f711901dc6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/68d48196bc8fa2933c20a19de0d78d7359a9f358 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/68e3627946e5576ec05ea8e87b5856b6bb8854ce b/fuzz/gnutls_psk_server_fuzzer.in/68e3627946e5576ec05ea8e87b5856b6bb8854ce new file mode 100644 index 0000000000..92240222a1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/68e3627946e5576ec05ea8e87b5856b6bb8854ce differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/691203496af4e698ac3aaa10a94f6dd07498a646 b/fuzz/gnutls_psk_server_fuzzer.in/691203496af4e698ac3aaa10a94f6dd07498a646 new file mode 100644 index 0000000000..b9b3d952fb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/691203496af4e698ac3aaa10a94f6dd07498a646 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/692fa70a511d3f8ec813dbdaf3d4a5acc74d5d87 b/fuzz/gnutls_psk_server_fuzzer.in/692fa70a511d3f8ec813dbdaf3d4a5acc74d5d87 new file mode 100644 index 0000000000..6f65048920 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/692fa70a511d3f8ec813dbdaf3d4a5acc74d5d87 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/695f3f1145883d0b9bdc5a7368ceb12b3de0733f b/fuzz/gnutls_psk_server_fuzzer.in/695f3f1145883d0b9bdc5a7368ceb12b3de0733f new file mode 100644 index 0000000000..e9a7e1ec65 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/695f3f1145883d0b9bdc5a7368ceb12b3de0733f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/69c037e99fd2bbca003d165a6e5bbceda8883813 b/fuzz/gnutls_psk_server_fuzzer.in/69c037e99fd2bbca003d165a6e5bbceda8883813 new file mode 100644 index 0000000000..688f03fea9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/69c037e99fd2bbca003d165a6e5bbceda8883813 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/69c3fab4a9ea9073b3bc3a1505b90124567f073a b/fuzz/gnutls_psk_server_fuzzer.in/69c3fab4a9ea9073b3bc3a1505b90124567f073a new file mode 100644 index 0000000000..1719deaa78 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/69c3fab4a9ea9073b3bc3a1505b90124567f073a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/69cc094a84cd5985e2a65db0833d6b30a5bf1804 b/fuzz/gnutls_psk_server_fuzzer.in/69cc094a84cd5985e2a65db0833d6b30a5bf1804 new file mode 100644 index 0000000000..670418bd0a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/69cc094a84cd5985e2a65db0833d6b30a5bf1804 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/69ed410d92d464e7805a460f3c32b0e751313d52 b/fuzz/gnutls_psk_server_fuzzer.in/69ed410d92d464e7805a460f3c32b0e751313d52 new file mode 100644 index 0000000000..574cee87a4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/69ed410d92d464e7805a460f3c32b0e751313d52 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6a39fc4ba6f2ec1573f21bf5b9ba98734f00d667 b/fuzz/gnutls_psk_server_fuzzer.in/6a39fc4ba6f2ec1573f21bf5b9ba98734f00d667 new file mode 100644 index 0000000000..67ffe3536e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6a39fc4ba6f2ec1573f21bf5b9ba98734f00d667 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6ab3d7315ec2f18c0d5f2c9398ff738c3f59b6db b/fuzz/gnutls_psk_server_fuzzer.in/6ab3d7315ec2f18c0d5f2c9398ff738c3f59b6db new file mode 100644 index 0000000000..c83427a15d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6ab3d7315ec2f18c0d5f2c9398ff738c3f59b6db differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6af1cc9d541dd0ec4e88a9e05518b7907a663536 b/fuzz/gnutls_psk_server_fuzzer.in/6af1cc9d541dd0ec4e88a9e05518b7907a663536 new file mode 100644 index 0000000000..7d7378cbbc Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6af1cc9d541dd0ec4e88a9e05518b7907a663536 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6b0b93db73cbc9f57b523468a0485c8661f370c7 b/fuzz/gnutls_psk_server_fuzzer.in/6b0b93db73cbc9f57b523468a0485c8661f370c7 new file mode 100644 index 0000000000..88d5b8a5fd Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6b0b93db73cbc9f57b523468a0485c8661f370c7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6b15406844c43ddad83f347aba2edaf41d14e37d b/fuzz/gnutls_psk_server_fuzzer.in/6b15406844c43ddad83f347aba2edaf41d14e37d new file mode 100644 index 0000000000..5ba45bb917 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6b15406844c43ddad83f347aba2edaf41d14e37d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6b3f17513b932b817eb84c2b57617398d006a129 b/fuzz/gnutls_psk_server_fuzzer.in/6b3f17513b932b817eb84c2b57617398d006a129 new file mode 100644 index 0000000000..f833da5beb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6b3f17513b932b817eb84c2b57617398d006a129 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6bcf2b7a4d318bf559470e0376ec31c824614499 b/fuzz/gnutls_psk_server_fuzzer.in/6bcf2b7a4d318bf559470e0376ec31c824614499 new file mode 100644 index 0000000000..fdfa79adbe Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6bcf2b7a4d318bf559470e0376ec31c824614499 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6c995be60be32d9a8a8669cb674f72fdee06e5e4 b/fuzz/gnutls_psk_server_fuzzer.in/6c995be60be32d9a8a8669cb674f72fdee06e5e4 new file mode 100644 index 0000000000..b45882534a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6c995be60be32d9a8a8669cb674f72fdee06e5e4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6ca8f22918fdf5630ae49939226cc5abebd12eac b/fuzz/gnutls_psk_server_fuzzer.in/6ca8f22918fdf5630ae49939226cc5abebd12eac new file mode 100644 index 0000000000..161add3192 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6ca8f22918fdf5630ae49939226cc5abebd12eac differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6d0c8fbc2ca5c5ba7eee8093beccacd5a42f11a0 b/fuzz/gnutls_psk_server_fuzzer.in/6d0c8fbc2ca5c5ba7eee8093beccacd5a42f11a0 new file mode 100644 index 0000000000..a310273a24 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6d0c8fbc2ca5c5ba7eee8093beccacd5a42f11a0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6d7240bff61a26f072a7f087273d42d3df61299d b/fuzz/gnutls_psk_server_fuzzer.in/6d7240bff61a26f072a7f087273d42d3df61299d new file mode 100644 index 0000000000..a37ab99e17 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6d7240bff61a26f072a7f087273d42d3df61299d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6d9da8dd897f4b2f4b7355426ec013627a984866 b/fuzz/gnutls_psk_server_fuzzer.in/6d9da8dd897f4b2f4b7355426ec013627a984866 new file mode 100644 index 0000000000..c22b3f498b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6d9da8dd897f4b2f4b7355426ec013627a984866 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6df279708d31760865fab0417581c9c0c016407d b/fuzz/gnutls_psk_server_fuzzer.in/6df279708d31760865fab0417581c9c0c016407d new file mode 100644 index 0000000000..51ba34207a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6df279708d31760865fab0417581c9c0c016407d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6e9ad81d62038de17a7fb8f9bc328bde9331e5d7 b/fuzz/gnutls_psk_server_fuzzer.in/6e9ad81d62038de17a7fb8f9bc328bde9331e5d7 new file mode 100644 index 0000000000..dfeb808e04 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6e9ad81d62038de17a7fb8f9bc328bde9331e5d7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6ea2c9676d4976b454a276824ebf2bb412410d9e b/fuzz/gnutls_psk_server_fuzzer.in/6ea2c9676d4976b454a276824ebf2bb412410d9e new file mode 100644 index 0000000000..22de543390 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6ea2c9676d4976b454a276824ebf2bb412410d9e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6ee1fea574257721235288ea9039b1425826b832 b/fuzz/gnutls_psk_server_fuzzer.in/6ee1fea574257721235288ea9039b1425826b832 new file mode 100644 index 0000000000..ec0e18ca60 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6ee1fea574257721235288ea9039b1425826b832 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6f2ed6585654c0f6369a81886d4c7cb3c963028f b/fuzz/gnutls_psk_server_fuzzer.in/6f2ed6585654c0f6369a81886d4c7cb3c963028f new file mode 100644 index 0000000000..c1dfff9ed1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6f2ed6585654c0f6369a81886d4c7cb3c963028f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6f5b8c541859ebda4215774f36dab79f397fd059 b/fuzz/gnutls_psk_server_fuzzer.in/6f5b8c541859ebda4215774f36dab79f397fd059 new file mode 100644 index 0000000000..ab658a74b8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6f5b8c541859ebda4215774f36dab79f397fd059 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/6f87aa12fa5376581f3881cc9a0df3d4630e2790 b/fuzz/gnutls_psk_server_fuzzer.in/6f87aa12fa5376581f3881cc9a0df3d4630e2790 new file mode 100644 index 0000000000..1963b885de Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/6f87aa12fa5376581f3881cc9a0df3d4630e2790 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/706755d11d5886b5b2593fa244935ac5d0539ba7 b/fuzz/gnutls_psk_server_fuzzer.in/706755d11d5886b5b2593fa244935ac5d0539ba7 new file mode 100644 index 0000000000..284c091944 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/706755d11d5886b5b2593fa244935ac5d0539ba7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/70d6e587dd9d3285fa5ea65183a7d0cb9b34f868 b/fuzz/gnutls_psk_server_fuzzer.in/70d6e587dd9d3285fa5ea65183a7d0cb9b34f868 new file mode 100644 index 0000000000..75159d08f9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/70d6e587dd9d3285fa5ea65183a7d0cb9b34f868 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/713a551ece9fa70e74a14e5d868607e2dcfddc03 b/fuzz/gnutls_psk_server_fuzzer.in/713a551ece9fa70e74a14e5d868607e2dcfddc03 new file mode 100644 index 0000000000..b9858f588f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/713a551ece9fa70e74a14e5d868607e2dcfddc03 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7141ae812d3ab71adfa65dcf5699e865ad86aefc b/fuzz/gnutls_psk_server_fuzzer.in/7141ae812d3ab71adfa65dcf5699e865ad86aefc new file mode 100644 index 0000000000..df58010146 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7141ae812d3ab71adfa65dcf5699e865ad86aefc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/720ea404cdc7f6f095202f6659a7345db278d929 b/fuzz/gnutls_psk_server_fuzzer.in/720ea404cdc7f6f095202f6659a7345db278d929 new file mode 100644 index 0000000000..78b9bfcff8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/720ea404cdc7f6f095202f6659a7345db278d929 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7225a554c6299c46faf101edec5b8036b3909057 b/fuzz/gnutls_psk_server_fuzzer.in/7225a554c6299c46faf101edec5b8036b3909057 new file mode 100644 index 0000000000..90acb3f162 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7225a554c6299c46faf101edec5b8036b3909057 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/723c82c8a62d79b9873d96b424636815ffeba5dd b/fuzz/gnutls_psk_server_fuzzer.in/723c82c8a62d79b9873d96b424636815ffeba5dd new file mode 100644 index 0000000000..4e2d11e73f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/723c82c8a62d79b9873d96b424636815ffeba5dd differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7287ffc6c5f0d1f6793eb7f50773aa82a4efb286 b/fuzz/gnutls_psk_server_fuzzer.in/7287ffc6c5f0d1f6793eb7f50773aa82a4efb286 new file mode 100644 index 0000000000..63b0bc2d8e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7287ffc6c5f0d1f6793eb7f50773aa82a4efb286 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/738e429269ad5826ea8d6da32aee8671754b4fd7 b/fuzz/gnutls_psk_server_fuzzer.in/738e429269ad5826ea8d6da32aee8671754b4fd7 new file mode 100644 index 0000000000..39552af778 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/738e429269ad5826ea8d6da32aee8671754b4fd7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/740ff720a09686c258e9a77bf7973adba90fdddf b/fuzz/gnutls_psk_server_fuzzer.in/740ff720a09686c258e9a77bf7973adba90fdddf new file mode 100644 index 0000000000..e0914264ba Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/740ff720a09686c258e9a77bf7973adba90fdddf differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/741dfd651e57e9410ed8a93df6ca3ce0f602bf10 b/fuzz/gnutls_psk_server_fuzzer.in/741dfd651e57e9410ed8a93df6ca3ce0f602bf10 new file mode 100644 index 0000000000..c8fb6e05d9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/741dfd651e57e9410ed8a93df6ca3ce0f602bf10 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7459d46e9d2e0dd4ede29783fcdd4d85c5bd2ef7 b/fuzz/gnutls_psk_server_fuzzer.in/7459d46e9d2e0dd4ede29783fcdd4d85c5bd2ef7 new file mode 100644 index 0000000000..1696838ad8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7459d46e9d2e0dd4ede29783fcdd4d85c5bd2ef7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7460fbb9842a1b83650635f4682286385e5fc011 b/fuzz/gnutls_psk_server_fuzzer.in/7460fbb9842a1b83650635f4682286385e5fc011 new file mode 100644 index 0000000000..e09c0dbc42 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7460fbb9842a1b83650635f4682286385e5fc011 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/748b029098e8c8a6871c8d5e5c57f111852866a9 b/fuzz/gnutls_psk_server_fuzzer.in/748b029098e8c8a6871c8d5e5c57f111852866a9 new file mode 100644 index 0000000000..da44198659 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/748b029098e8c8a6871c8d5e5c57f111852866a9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/74c7c97cc1695a7676c2483a869b01dcf44e09f0 b/fuzz/gnutls_psk_server_fuzzer.in/74c7c97cc1695a7676c2483a869b01dcf44e09f0 new file mode 100644 index 0000000000..855389787d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/74c7c97cc1695a7676c2483a869b01dcf44e09f0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/74f07431a72bddc58ec75a409adce435d49f2227 b/fuzz/gnutls_psk_server_fuzzer.in/74f07431a72bddc58ec75a409adce435d49f2227 new file mode 100644 index 0000000000..5d8f2fce9a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/74f07431a72bddc58ec75a409adce435d49f2227 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7549a9bb7ee1d9dde6ace1b413fae4eb104b4d4f b/fuzz/gnutls_psk_server_fuzzer.in/7549a9bb7ee1d9dde6ace1b413fae4eb104b4d4f new file mode 100644 index 0000000000..d0cdd5fe18 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7549a9bb7ee1d9dde6ace1b413fae4eb104b4d4f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/76f0d6beecef925e7566ddc5b6a98be0d48e564f b/fuzz/gnutls_psk_server_fuzzer.in/76f0d6beecef925e7566ddc5b6a98be0d48e564f new file mode 100644 index 0000000000..037dab257e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/76f0d6beecef925e7566ddc5b6a98be0d48e564f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/771988f491bdc79f0cef7d33df6db87149cf3dcd b/fuzz/gnutls_psk_server_fuzzer.in/771988f491bdc79f0cef7d33df6db87149cf3dcd new file mode 100644 index 0000000000..e29f3e8539 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/771988f491bdc79f0cef7d33df6db87149cf3dcd differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/77274d5336ed12694190c96e1523e4188a986d02 b/fuzz/gnutls_psk_server_fuzzer.in/77274d5336ed12694190c96e1523e4188a986d02 new file mode 100644 index 0000000000..27e41a38b6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/77274d5336ed12694190c96e1523e4188a986d02 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/773acc4f6b97c73739c7118f9864662530a00dc9 b/fuzz/gnutls_psk_server_fuzzer.in/773acc4f6b97c73739c7118f9864662530a00dc9 new file mode 100644 index 0000000000..c998168a87 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/773acc4f6b97c73739c7118f9864662530a00dc9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/77506693fc5c59ab0fc853208b448cfc5de05393 b/fuzz/gnutls_psk_server_fuzzer.in/77506693fc5c59ab0fc853208b448cfc5de05393 new file mode 100644 index 0000000000..673e3a1815 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/77506693fc5c59ab0fc853208b448cfc5de05393 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/77c038879fde99e1acc4c3d5609483abe67127fd b/fuzz/gnutls_psk_server_fuzzer.in/77c038879fde99e1acc4c3d5609483abe67127fd new file mode 100644 index 0000000000..822b747b6d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/77c038879fde99e1acc4c3d5609483abe67127fd differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/77d88ffd69122f38f9703a1f297eb90a6fe7b474 b/fuzz/gnutls_psk_server_fuzzer.in/77d88ffd69122f38f9703a1f297eb90a6fe7b474 new file mode 100644 index 0000000000..9b4caeb52e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/77d88ffd69122f38f9703a1f297eb90a6fe7b474 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/78ef76a54ba48ea0d30126b33e76b16e008265cb b/fuzz/gnutls_psk_server_fuzzer.in/78ef76a54ba48ea0d30126b33e76b16e008265cb new file mode 100644 index 0000000000..e9e40e24cb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/78ef76a54ba48ea0d30126b33e76b16e008265cb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/79d4fdb39a96a495c35bdcf9f1611e77e7e530b3 b/fuzz/gnutls_psk_server_fuzzer.in/79d4fdb39a96a495c35bdcf9f1611e77e7e530b3 new file mode 100644 index 0000000000..cb6a139018 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/79d4fdb39a96a495c35bdcf9f1611e77e7e530b3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/79dabb6633a5b1d7a4a8cd1c31b048b5a8479614 b/fuzz/gnutls_psk_server_fuzzer.in/79dabb6633a5b1d7a4a8cd1c31b048b5a8479614 new file mode 100644 index 0000000000..3ca86c4de6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/79dabb6633a5b1d7a4a8cd1c31b048b5a8479614 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7ac1ba1f2718e484b0956b198532c04d906f0c72 b/fuzz/gnutls_psk_server_fuzzer.in/7ac1ba1f2718e484b0956b198532c04d906f0c72 new file mode 100644 index 0000000000..2a6f6ae968 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7ac1ba1f2718e484b0956b198532c04d906f0c72 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7ac8224cb6de49228ba18dac7a2280b8a9d3d4bf b/fuzz/gnutls_psk_server_fuzzer.in/7ac8224cb6de49228ba18dac7a2280b8a9d3d4bf new file mode 100644 index 0000000000..a80221e9e0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7ac8224cb6de49228ba18dac7a2280b8a9d3d4bf differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7ae87833d006e4c87b65a4e79e1cafe3295724b3 b/fuzz/gnutls_psk_server_fuzzer.in/7ae87833d006e4c87b65a4e79e1cafe3295724b3 new file mode 100644 index 0000000000..839f26668b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7ae87833d006e4c87b65a4e79e1cafe3295724b3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7b92f4cf9cdc02d9b1002bcee46d374e89fdece6 b/fuzz/gnutls_psk_server_fuzzer.in/7b92f4cf9cdc02d9b1002bcee46d374e89fdece6 new file mode 100644 index 0000000000..663a15a58b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7b92f4cf9cdc02d9b1002bcee46d374e89fdece6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7c13cf899c404da3f79132b9983b443bc5673b20 b/fuzz/gnutls_psk_server_fuzzer.in/7c13cf899c404da3f79132b9983b443bc5673b20 new file mode 100644 index 0000000000..eccc4a18fd Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7c13cf899c404da3f79132b9983b443bc5673b20 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7c5fd7f8ff0d501b04f9b6fdaaa73f373ba4ef73 b/fuzz/gnutls_psk_server_fuzzer.in/7c5fd7f8ff0d501b04f9b6fdaaa73f373ba4ef73 new file mode 100644 index 0000000000..e79d144ca8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7c5fd7f8ff0d501b04f9b6fdaaa73f373ba4ef73 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7cf0d411c064ddd1da8ac0c93d1582adc4dd5071 b/fuzz/gnutls_psk_server_fuzzer.in/7cf0d411c064ddd1da8ac0c93d1582adc4dd5071 new file mode 100644 index 0000000000..8ec45de802 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7cf0d411c064ddd1da8ac0c93d1582adc4dd5071 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7cfe3528ad6fcc549151d15b92ee0d271184170a b/fuzz/gnutls_psk_server_fuzzer.in/7cfe3528ad6fcc549151d15b92ee0d271184170a new file mode 100644 index 0000000000..3d8da8db4e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7cfe3528ad6fcc549151d15b92ee0d271184170a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7d814e02f0e39dea223948e19404fddb034d58d0 b/fuzz/gnutls_psk_server_fuzzer.in/7d814e02f0e39dea223948e19404fddb034d58d0 new file mode 100644 index 0000000000..1441dcf43a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7d814e02f0e39dea223948e19404fddb034d58d0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7d8650a84245a52fe7cbc0e8dc653d0704b47c69 b/fuzz/gnutls_psk_server_fuzzer.in/7d8650a84245a52fe7cbc0e8dc653d0704b47c69 new file mode 100644 index 0000000000..0e67ba07c8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7d8650a84245a52fe7cbc0e8dc653d0704b47c69 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7d9c72365a30ea2349dbc9759066cb4ea1fbc436 b/fuzz/gnutls_psk_server_fuzzer.in/7d9c72365a30ea2349dbc9759066cb4ea1fbc436 new file mode 100644 index 0000000000..761d06ef57 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7d9c72365a30ea2349dbc9759066cb4ea1fbc436 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7eb70b6bd57f80bbd114718cfc5baa0ce30c8fb2 b/fuzz/gnutls_psk_server_fuzzer.in/7eb70b6bd57f80bbd114718cfc5baa0ce30c8fb2 new file mode 100644 index 0000000000..1e762521c9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7eb70b6bd57f80bbd114718cfc5baa0ce30c8fb2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7ef8a8861d891d2dccf11261f695d1f5f7bf58a8 b/fuzz/gnutls_psk_server_fuzzer.in/7ef8a8861d891d2dccf11261f695d1f5f7bf58a8 new file mode 100644 index 0000000000..27837911a5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7ef8a8861d891d2dccf11261f695d1f5f7bf58a8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7f02b41ec56b3ab1986cf254a0d6a4e3d7a28ca3 b/fuzz/gnutls_psk_server_fuzzer.in/7f02b41ec56b3ab1986cf254a0d6a4e3d7a28ca3 new file mode 100644 index 0000000000..5c8beecad5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7f02b41ec56b3ab1986cf254a0d6a4e3d7a28ca3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7fb377207d2cde9e251573e26617adcf2e2b2a98 b/fuzz/gnutls_psk_server_fuzzer.in/7fb377207d2cde9e251573e26617adcf2e2b2a98 new file mode 100644 index 0000000000..bc0bd61869 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7fb377207d2cde9e251573e26617adcf2e2b2a98 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7fc7524f7801a7873465b01b950a2bb1450ba7c4 b/fuzz/gnutls_psk_server_fuzzer.in/7fc7524f7801a7873465b01b950a2bb1450ba7c4 new file mode 100644 index 0000000000..6077d953fe Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7fc7524f7801a7873465b01b950a2bb1450ba7c4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7fdedfb053c3707617ddf4b2669806fe1339b281 b/fuzz/gnutls_psk_server_fuzzer.in/7fdedfb053c3707617ddf4b2669806fe1339b281 new file mode 100644 index 0000000000..b7498f3760 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7fdedfb053c3707617ddf4b2669806fe1339b281 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/7ff2859cf1e8b96e8cfb339f2cfbbbedcec81e92 b/fuzz/gnutls_psk_server_fuzzer.in/7ff2859cf1e8b96e8cfb339f2cfbbbedcec81e92 new file mode 100644 index 0000000000..d3964c1e08 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/7ff2859cf1e8b96e8cfb339f2cfbbbedcec81e92 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/80231404fa3295dc1fa3f7140302260f1f6c4c90 b/fuzz/gnutls_psk_server_fuzzer.in/80231404fa3295dc1fa3f7140302260f1f6c4c90 new file mode 100644 index 0000000000..e8ea13f2fb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/80231404fa3295dc1fa3f7140302260f1f6c4c90 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/805ea9692cf9d0c8eacbc537d32777ec45da5b46 b/fuzz/gnutls_psk_server_fuzzer.in/805ea9692cf9d0c8eacbc537d32777ec45da5b46 new file mode 100644 index 0000000000..ccb45c7d95 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/805ea9692cf9d0c8eacbc537d32777ec45da5b46 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/80807d2ea40950eba2714b32180655119388f6ce b/fuzz/gnutls_psk_server_fuzzer.in/80807d2ea40950eba2714b32180655119388f6ce new file mode 100644 index 0000000000..0154235bee Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/80807d2ea40950eba2714b32180655119388f6ce differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/808fa14f26c94e178318db9c2297f8110a6d2dc8 b/fuzz/gnutls_psk_server_fuzzer.in/808fa14f26c94e178318db9c2297f8110a6d2dc8 new file mode 100644 index 0000000000..fecda2726c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/808fa14f26c94e178318db9c2297f8110a6d2dc8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/80f44edbb4cf9de27a2aed3860fceeee0a0d6096 b/fuzz/gnutls_psk_server_fuzzer.in/80f44edbb4cf9de27a2aed3860fceeee0a0d6096 new file mode 100644 index 0000000000..708ab4c2c8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/80f44edbb4cf9de27a2aed3860fceeee0a0d6096 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/812fddce50794c968f507703c12c6af7327c2693 b/fuzz/gnutls_psk_server_fuzzer.in/812fddce50794c968f507703c12c6af7327c2693 new file mode 100644 index 0000000000..4e8a8f5ce2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/812fddce50794c968f507703c12c6af7327c2693 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8130c31dbab5da34c446f184d1e449752e84fae3 b/fuzz/gnutls_psk_server_fuzzer.in/8130c31dbab5da34c446f184d1e449752e84fae3 new file mode 100644 index 0000000000..16b8957196 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8130c31dbab5da34c446f184d1e449752e84fae3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/813232e56a99a19e6734b405891f2733e64ab3d2 b/fuzz/gnutls_psk_server_fuzzer.in/813232e56a99a19e6734b405891f2733e64ab3d2 new file mode 100644 index 0000000000..4d62a869b9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/813232e56a99a19e6734b405891f2733e64ab3d2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/814cfd4065e5259f35744310963a1c0cb74672ec b/fuzz/gnutls_psk_server_fuzzer.in/814cfd4065e5259f35744310963a1c0cb74672ec new file mode 100644 index 0000000000..d46a6b3006 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/814cfd4065e5259f35744310963a1c0cb74672ec differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8189567254c32ad0851a4f5e157733d94ff7f09c b/fuzz/gnutls_psk_server_fuzzer.in/8189567254c32ad0851a4f5e157733d94ff7f09c new file mode 100644 index 0000000000..28e47769f7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8189567254c32ad0851a4f5e157733d94ff7f09c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/81db9bb7267a714725bae177f4bff27c3197a81c b/fuzz/gnutls_psk_server_fuzzer.in/81db9bb7267a714725bae177f4bff27c3197a81c new file mode 100644 index 0000000000..59878154b0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/81db9bb7267a714725bae177f4bff27c3197a81c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/827b47620e83a74e22304496c5f1b34e1e7abf52 b/fuzz/gnutls_psk_server_fuzzer.in/827b47620e83a74e22304496c5f1b34e1e7abf52 new file mode 100644 index 0000000000..f905d81221 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/827b47620e83a74e22304496c5f1b34e1e7abf52 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/827cd1940f69777b5033967de84ce3190cee70e3 b/fuzz/gnutls_psk_server_fuzzer.in/827cd1940f69777b5033967de84ce3190cee70e3 new file mode 100644 index 0000000000..8b9e150366 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/827cd1940f69777b5033967de84ce3190cee70e3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/827d92b55cb617351a2efeac65ac6a2b8d2f52de b/fuzz/gnutls_psk_server_fuzzer.in/827d92b55cb617351a2efeac65ac6a2b8d2f52de new file mode 100644 index 0000000000..b1366cc8f4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/827d92b55cb617351a2efeac65ac6a2b8d2f52de differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/831b4553e40acfddc702b94669b5b02d397baf15 b/fuzz/gnutls_psk_server_fuzzer.in/831b4553e40acfddc702b94669b5b02d397baf15 new file mode 100644 index 0000000000..f4be6813d6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/831b4553e40acfddc702b94669b5b02d397baf15 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8375719cf43860f7c8cea90df86a30109c217172 b/fuzz/gnutls_psk_server_fuzzer.in/8375719cf43860f7c8cea90df86a30109c217172 new file mode 100644 index 0000000000..ad6653ddc9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8375719cf43860f7c8cea90df86a30109c217172 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/837e6c71439c904ea0bcf88e3bf49a800515e9f7 b/fuzz/gnutls_psk_server_fuzzer.in/837e6c71439c904ea0bcf88e3bf49a800515e9f7 new file mode 100644 index 0000000000..9abf94b11c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/837e6c71439c904ea0bcf88e3bf49a800515e9f7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8384d6719508fbee5e2459c7761ec194f381cc54 b/fuzz/gnutls_psk_server_fuzzer.in/8384d6719508fbee5e2459c7761ec194f381cc54 new file mode 100644 index 0000000000..4f521f03d1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8384d6719508fbee5e2459c7761ec194f381cc54 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/839348ed7d11058f636f4cf18fe5fad829a096da b/fuzz/gnutls_psk_server_fuzzer.in/839348ed7d11058f636f4cf18fe5fad829a096da new file mode 100644 index 0000000000..2ca6957c22 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/839348ed7d11058f636f4cf18fe5fad829a096da differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/83dd787bac5b8b8634d3340dfc3537c62375e995 b/fuzz/gnutls_psk_server_fuzzer.in/83dd787bac5b8b8634d3340dfc3537c62375e995 new file mode 100644 index 0000000000..c09d677fa4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/83dd787bac5b8b8634d3340dfc3537c62375e995 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/83ebd709946a48ac503346f3ffb3ee2101526de2 b/fuzz/gnutls_psk_server_fuzzer.in/83ebd709946a48ac503346f3ffb3ee2101526de2 new file mode 100644 index 0000000000..86a4bc43ec Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/83ebd709946a48ac503346f3ffb3ee2101526de2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8464b801a2adb3841b55a15798f0d57f0688e512 b/fuzz/gnutls_psk_server_fuzzer.in/8464b801a2adb3841b55a15798f0d57f0688e512 new file mode 100644 index 0000000000..6299bd0c03 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8464b801a2adb3841b55a15798f0d57f0688e512 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/847de93c98496047d2d88f948dd3a3192df9f7b6 b/fuzz/gnutls_psk_server_fuzzer.in/847de93c98496047d2d88f948dd3a3192df9f7b6 new file mode 100644 index 0000000000..8fa9d8ca05 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/847de93c98496047d2d88f948dd3a3192df9f7b6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8520fd58c493ab028db6456780b2ebaffb10b1d8 b/fuzz/gnutls_psk_server_fuzzer.in/8520fd58c493ab028db6456780b2ebaffb10b1d8 new file mode 100644 index 0000000000..cb8fa3576b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8520fd58c493ab028db6456780b2ebaffb10b1d8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/853598da3e129d0c46e2515b8ccf66cd0f1de687 b/fuzz/gnutls_psk_server_fuzzer.in/853598da3e129d0c46e2515b8ccf66cd0f1de687 new file mode 100644 index 0000000000..3909fea5a6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/853598da3e129d0c46e2515b8ccf66cd0f1de687 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/85c1bb8499aa5583d55ef046f545c29bdcb66cb0 b/fuzz/gnutls_psk_server_fuzzer.in/85c1bb8499aa5583d55ef046f545c29bdcb66cb0 new file mode 100644 index 0000000000..62a7ebff88 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/85c1bb8499aa5583d55ef046f545c29bdcb66cb0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/864626e2d651d0c115467a1aa9b83e90002bacf4 b/fuzz/gnutls_psk_server_fuzzer.in/864626e2d651d0c115467a1aa9b83e90002bacf4 new file mode 100644 index 0000000000..ab3ab4a4fe Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/864626e2d651d0c115467a1aa9b83e90002bacf4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/86523b650aba4576759952f2f708d3c58fb9410a b/fuzz/gnutls_psk_server_fuzzer.in/86523b650aba4576759952f2f708d3c58fb9410a new file mode 100644 index 0000000000..5a6345aeda Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/86523b650aba4576759952f2f708d3c58fb9410a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8652920430f757054831a2237bed4beec3611ba2 b/fuzz/gnutls_psk_server_fuzzer.in/8652920430f757054831a2237bed4beec3611ba2 new file mode 100644 index 0000000000..cca5b01123 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8652920430f757054831a2237bed4beec3611ba2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/86c469b93a1afef0a603ac2858058b058af2b27d b/fuzz/gnutls_psk_server_fuzzer.in/86c469b93a1afef0a603ac2858058b058af2b27d new file mode 100644 index 0000000000..0a6527a5c5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/86c469b93a1afef0a603ac2858058b058af2b27d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/874a2ca98067aa02d9348ecf4bffd20c1810fdb5 b/fuzz/gnutls_psk_server_fuzzer.in/874a2ca98067aa02d9348ecf4bffd20c1810fdb5 new file mode 100644 index 0000000000..650e55ed91 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/874a2ca98067aa02d9348ecf4bffd20c1810fdb5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/875f8accb290595cebbe324299216ffc8e2a37f2 b/fuzz/gnutls_psk_server_fuzzer.in/875f8accb290595cebbe324299216ffc8e2a37f2 new file mode 100644 index 0000000000..13bb726853 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/875f8accb290595cebbe324299216ffc8e2a37f2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8784a8cda0d77d902ea6f3cde0438605d6d4d24d b/fuzz/gnutls_psk_server_fuzzer.in/8784a8cda0d77d902ea6f3cde0438605d6d4d24d new file mode 100644 index 0000000000..ab9879a16e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8784a8cda0d77d902ea6f3cde0438605d6d4d24d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/87f9333ea9933914bbddc725ca8fb823b3fe1beb b/fuzz/gnutls_psk_server_fuzzer.in/87f9333ea9933914bbddc725ca8fb823b3fe1beb new file mode 100644 index 0000000000..4ddc6d7029 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/87f9333ea9933914bbddc725ca8fb823b3fe1beb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/885863640179ea5b9dc9faa94296bdfe59a8e1af b/fuzz/gnutls_psk_server_fuzzer.in/885863640179ea5b9dc9faa94296bdfe59a8e1af new file mode 100644 index 0000000000..3192807377 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/885863640179ea5b9dc9faa94296bdfe59a8e1af differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8945ae4d30f664adbb5f6da5443898c0b9e42a41 b/fuzz/gnutls_psk_server_fuzzer.in/8945ae4d30f664adbb5f6da5443898c0b9e42a41 new file mode 100644 index 0000000000..ff9f5cf440 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8945ae4d30f664adbb5f6da5443898c0b9e42a41 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/89d568457ad637feaa3edda6b0987f36aeadcdcf b/fuzz/gnutls_psk_server_fuzzer.in/89d568457ad637feaa3edda6b0987f36aeadcdcf new file mode 100644 index 0000000000..660623eef6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/89d568457ad637feaa3edda6b0987f36aeadcdcf differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/89e026f0113a659dd8d40df35e1e2c060f83e333 b/fuzz/gnutls_psk_server_fuzzer.in/89e026f0113a659dd8d40df35e1e2c060f83e333 new file mode 100644 index 0000000000..eaca3de2d3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/89e026f0113a659dd8d40df35e1e2c060f83e333 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/89e4c644f842873a66ef6599a00e2d1b7783622d b/fuzz/gnutls_psk_server_fuzzer.in/89e4c644f842873a66ef6599a00e2d1b7783622d new file mode 100644 index 0000000000..43b2c9844b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/89e4c644f842873a66ef6599a00e2d1b7783622d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8a5a522383953c3263db9ddc7c6fba590158a37d b/fuzz/gnutls_psk_server_fuzzer.in/8a5a522383953c3263db9ddc7c6fba590158a37d new file mode 100644 index 0000000000..82fa0b7a04 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8a5a522383953c3263db9ddc7c6fba590158a37d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8a75ff576ea9d90aa807ce8b06e306283abb6266 b/fuzz/gnutls_psk_server_fuzzer.in/8a75ff576ea9d90aa807ce8b06e306283abb6266 new file mode 100644 index 0000000000..d4e809a560 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8a75ff576ea9d90aa807ce8b06e306283abb6266 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8ace89bdefc79ec79316144fe1d7aa1d23c93a74 b/fuzz/gnutls_psk_server_fuzzer.in/8ace89bdefc79ec79316144fe1d7aa1d23c93a74 new file mode 100644 index 0000000000..d11f6e94fb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8ace89bdefc79ec79316144fe1d7aa1d23c93a74 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8b8302e4b62f0fed72e8158a96c0f048effed8b1 b/fuzz/gnutls_psk_server_fuzzer.in/8b8302e4b62f0fed72e8158a96c0f048effed8b1 new file mode 100644 index 0000000000..472c91635d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8b8302e4b62f0fed72e8158a96c0f048effed8b1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8cc2d3b34331f444a32c19adc1638bf7761c6b2a b/fuzz/gnutls_psk_server_fuzzer.in/8cc2d3b34331f444a32c19adc1638bf7761c6b2a new file mode 100644 index 0000000000..e1e5d783b9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8cc2d3b34331f444a32c19adc1638bf7761c6b2a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8d0f9208fc274997acfe0626d2b1ccab2b718df5 b/fuzz/gnutls_psk_server_fuzzer.in/8d0f9208fc274997acfe0626d2b1ccab2b718df5 new file mode 100644 index 0000000000..2907526ca8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8d0f9208fc274997acfe0626d2b1ccab2b718df5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8e301840e80cc852274de8d1e652c126605c63b7 b/fuzz/gnutls_psk_server_fuzzer.in/8e301840e80cc852274de8d1e652c126605c63b7 new file mode 100644 index 0000000000..48572299e1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8e301840e80cc852274de8d1e652c126605c63b7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8e3df0556be54cfda0c27453520f1a5114e7f632 b/fuzz/gnutls_psk_server_fuzzer.in/8e3df0556be54cfda0c27453520f1a5114e7f632 new file mode 100644 index 0000000000..4cc1900ffe Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8e3df0556be54cfda0c27453520f1a5114e7f632 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8e876502cd1037d28417f37a72439094ac82ff63 b/fuzz/gnutls_psk_server_fuzzer.in/8e876502cd1037d28417f37a72439094ac82ff63 new file mode 100644 index 0000000000..473f945eab Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8e876502cd1037d28417f37a72439094ac82ff63 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8ead774419da9f317faef72cf66c90ed415903d1 b/fuzz/gnutls_psk_server_fuzzer.in/8ead774419da9f317faef72cf66c90ed415903d1 new file mode 100644 index 0000000000..6455bb6a0c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8ead774419da9f317faef72cf66c90ed415903d1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8efb5269606348b657c5bfac9b07676b7d62b06e b/fuzz/gnutls_psk_server_fuzzer.in/8efb5269606348b657c5bfac9b07676b7d62b06e new file mode 100644 index 0000000000..1f7591557b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8efb5269606348b657c5bfac9b07676b7d62b06e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/8fb97f6b9bbef2f2769188e3ff50bf483093ddbd b/fuzz/gnutls_psk_server_fuzzer.in/8fb97f6b9bbef2f2769188e3ff50bf483093ddbd new file mode 100644 index 0000000000..44a085c0bf Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/8fb97f6b9bbef2f2769188e3ff50bf483093ddbd differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9022f47c8c2b4f9018716c3665c8b993a4e01f42 b/fuzz/gnutls_psk_server_fuzzer.in/9022f47c8c2b4f9018716c3665c8b993a4e01f42 new file mode 100644 index 0000000000..0f3189af93 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9022f47c8c2b4f9018716c3665c8b993a4e01f42 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9031fbca0fb9da65aca5e2423604341682d9d82a b/fuzz/gnutls_psk_server_fuzzer.in/9031fbca0fb9da65aca5e2423604341682d9d82a new file mode 100644 index 0000000000..4b45a72551 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9031fbca0fb9da65aca5e2423604341682d9d82a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/903937e412986cc4b4fefeda3eef1890ad5d3a88 b/fuzz/gnutls_psk_server_fuzzer.in/903937e412986cc4b4fefeda3eef1890ad5d3a88 new file mode 100644 index 0000000000..5930bce27d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/903937e412986cc4b4fefeda3eef1890ad5d3a88 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/90714d4d1ef61ad73787896b4e09fa64778e385f b/fuzz/gnutls_psk_server_fuzzer.in/90714d4d1ef61ad73787896b4e09fa64778e385f new file mode 100644 index 0000000000..b0b285bfc9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/90714d4d1ef61ad73787896b4e09fa64778e385f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/907c60ffc97a307a41fc703f1f74a716094e1f1d b/fuzz/gnutls_psk_server_fuzzer.in/907c60ffc97a307a41fc703f1f74a716094e1f1d new file mode 100644 index 0000000000..dd422b85c8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/907c60ffc97a307a41fc703f1f74a716094e1f1d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/91309ecd933f81b4ea588f4ee7f134b263368479 b/fuzz/gnutls_psk_server_fuzzer.in/91309ecd933f81b4ea588f4ee7f134b263368479 new file mode 100644 index 0000000000..58705c4e9a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/91309ecd933f81b4ea588f4ee7f134b263368479 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/91bf65eb9bc7f87d6ef6a5641fa333fc34878fb0 b/fuzz/gnutls_psk_server_fuzzer.in/91bf65eb9bc7f87d6ef6a5641fa333fc34878fb0 new file mode 100644 index 0000000000..a6b66fec01 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/91bf65eb9bc7f87d6ef6a5641fa333fc34878fb0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/91e6dcf7e22c00fe98b637a7f0453e0ff9cf6d6c b/fuzz/gnutls_psk_server_fuzzer.in/91e6dcf7e22c00fe98b637a7f0453e0ff9cf6d6c new file mode 100644 index 0000000000..78c861dd21 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/91e6dcf7e22c00fe98b637a7f0453e0ff9cf6d6c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/92d84fdafdd17eed9a9637792c15546ba974a6ad b/fuzz/gnutls_psk_server_fuzzer.in/92d84fdafdd17eed9a9637792c15546ba974a6ad new file mode 100644 index 0000000000..e12b27955d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/92d84fdafdd17eed9a9637792c15546ba974a6ad differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9316c85669235a765e305da0e0d757191b270a26 b/fuzz/gnutls_psk_server_fuzzer.in/9316c85669235a765e305da0e0d757191b270a26 new file mode 100644 index 0000000000..2a626f6075 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9316c85669235a765e305da0e0d757191b270a26 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/937555916573158c5b2b7ea404ed7cad9f14009b b/fuzz/gnutls_psk_server_fuzzer.in/937555916573158c5b2b7ea404ed7cad9f14009b new file mode 100644 index 0000000000..b32cc63a49 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/937555916573158c5b2b7ea404ed7cad9f14009b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9492799adf8e3330e09eda3c568d7b48d814aac0 b/fuzz/gnutls_psk_server_fuzzer.in/9492799adf8e3330e09eda3c568d7b48d814aac0 new file mode 100644 index 0000000000..dc2c8b7f22 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9492799adf8e3330e09eda3c568d7b48d814aac0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/94f1c350ecc63de5c503d5a98784d048758cfcaa b/fuzz/gnutls_psk_server_fuzzer.in/94f1c350ecc63de5c503d5a98784d048758cfcaa new file mode 100644 index 0000000000..f9a6b94767 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/94f1c350ecc63de5c503d5a98784d048758cfcaa differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9513e49690d219a45e1e5462fb84a00c541587fd b/fuzz/gnutls_psk_server_fuzzer.in/9513e49690d219a45e1e5462fb84a00c541587fd new file mode 100644 index 0000000000..bb4e9b51b8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9513e49690d219a45e1e5462fb84a00c541587fd differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/95b9a63bfa180d6ce532738abd000dcdda0c6ef4 b/fuzz/gnutls_psk_server_fuzzer.in/95b9a63bfa180d6ce532738abd000dcdda0c6ef4 new file mode 100644 index 0000000000..27864f6de4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/95b9a63bfa180d6ce532738abd000dcdda0c6ef4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/95f881f28b48b0af09b7506ef3b84389ed16df89 b/fuzz/gnutls_psk_server_fuzzer.in/95f881f28b48b0af09b7506ef3b84389ed16df89 new file mode 100644 index 0000000000..2a516ef053 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/95f881f28b48b0af09b7506ef3b84389ed16df89 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9679829b125e3d1481bd3bd287fbdc5ad04b101d b/fuzz/gnutls_psk_server_fuzzer.in/9679829b125e3d1481bd3bd287fbdc5ad04b101d new file mode 100644 index 0000000000..fa671837a5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9679829b125e3d1481bd3bd287fbdc5ad04b101d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9697e6f119b3c2f2ac54a0281126b3481b9663b1 b/fuzz/gnutls_psk_server_fuzzer.in/9697e6f119b3c2f2ac54a0281126b3481b9663b1 new file mode 100644 index 0000000000..5c7b9311ac Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9697e6f119b3c2f2ac54a0281126b3481b9663b1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9723c50ab9836c27356722b0f58e9fe02bf89856 b/fuzz/gnutls_psk_server_fuzzer.in/9723c50ab9836c27356722b0f58e9fe02bf89856 new file mode 100644 index 0000000000..df74ffe557 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9723c50ab9836c27356722b0f58e9fe02bf89856 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/97485dc803fd73fd9af5b4c6bb68a3f34b898a47 b/fuzz/gnutls_psk_server_fuzzer.in/97485dc803fd73fd9af5b4c6bb68a3f34b898a47 new file mode 100644 index 0000000000..7a66be2477 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/97485dc803fd73fd9af5b4c6bb68a3f34b898a47 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/975a2c5fedfe9816bc261e03371653af5262b42e b/fuzz/gnutls_psk_server_fuzzer.in/975a2c5fedfe9816bc261e03371653af5262b42e new file mode 100644 index 0000000000..bd1ad27636 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/975a2c5fedfe9816bc261e03371653af5262b42e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/98f0feed12b7bbc433b9b12e90fc2a1ec168869e b/fuzz/gnutls_psk_server_fuzzer.in/98f0feed12b7bbc433b9b12e90fc2a1ec168869e new file mode 100644 index 0000000000..93f5d53d5f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/98f0feed12b7bbc433b9b12e90fc2a1ec168869e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/990a80d09840dbf147fba04b7f287d9cc7b897cf b/fuzz/gnutls_psk_server_fuzzer.in/990a80d09840dbf147fba04b7f287d9cc7b897cf new file mode 100644 index 0000000000..7102f0c8b6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/990a80d09840dbf147fba04b7f287d9cc7b897cf differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/993dfca786e9fba1ce835a9fe1b6bfcab2dc14f2 b/fuzz/gnutls_psk_server_fuzzer.in/993dfca786e9fba1ce835a9fe1b6bfcab2dc14f2 new file mode 100644 index 0000000000..2d74530583 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/993dfca786e9fba1ce835a9fe1b6bfcab2dc14f2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/994e3782810e315910c86688181bf1bcbe964ae6 b/fuzz/gnutls_psk_server_fuzzer.in/994e3782810e315910c86688181bf1bcbe964ae6 new file mode 100644 index 0000000000..eb3c2f23d8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/994e3782810e315910c86688181bf1bcbe964ae6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/99a0a501db0674810eec892a4bd6855f826b5076 b/fuzz/gnutls_psk_server_fuzzer.in/99a0a501db0674810eec892a4bd6855f826b5076 new file mode 100644 index 0000000000..8d3d9edd19 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/99a0a501db0674810eec892a4bd6855f826b5076 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/99a778d49f1de222ad0032824d83c68c364198e5 b/fuzz/gnutls_psk_server_fuzzer.in/99a778d49f1de222ad0032824d83c68c364198e5 new file mode 100644 index 0000000000..920636e6e9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/99a778d49f1de222ad0032824d83c68c364198e5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/99bdfee27a6d559214a635cf0d0e8d1afd381239 b/fuzz/gnutls_psk_server_fuzzer.in/99bdfee27a6d559214a635cf0d0e8d1afd381239 new file mode 100644 index 0000000000..2449bdb8b4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/99bdfee27a6d559214a635cf0d0e8d1afd381239 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9a0cc3caa86f0a8d338c03cbbb7bf4648957057e b/fuzz/gnutls_psk_server_fuzzer.in/9a0cc3caa86f0a8d338c03cbbb7bf4648957057e new file mode 100644 index 0000000000..d5b9cfcc80 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9a0cc3caa86f0a8d338c03cbbb7bf4648957057e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9a745f4bdd8d0b58cfe2cb1d37573fa1deff9704 b/fuzz/gnutls_psk_server_fuzzer.in/9a745f4bdd8d0b58cfe2cb1d37573fa1deff9704 new file mode 100644 index 0000000000..410f06e1cf Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9a745f4bdd8d0b58cfe2cb1d37573fa1deff9704 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9a7fbd1c7749723fa51f947b706ec2d7c6c79a21 b/fuzz/gnutls_psk_server_fuzzer.in/9a7fbd1c7749723fa51f947b706ec2d7c6c79a21 new file mode 100644 index 0000000000..7aab6a3c62 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9a7fbd1c7749723fa51f947b706ec2d7c6c79a21 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9a9a1a30d9465403ff3100ff7a9388a0e67544ff b/fuzz/gnutls_psk_server_fuzzer.in/9a9a1a30d9465403ff3100ff7a9388a0e67544ff new file mode 100644 index 0000000000..cca2820924 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9a9a1a30d9465403ff3100ff7a9388a0e67544ff differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9aa4a72c7c9ca40e171200e4399041746cc0ddca b/fuzz/gnutls_psk_server_fuzzer.in/9aa4a72c7c9ca40e171200e4399041746cc0ddca new file mode 100644 index 0000000000..7e42058a54 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9aa4a72c7c9ca40e171200e4399041746cc0ddca differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9aa9971cb8313a7cb338a88097832d6bf7acc184 b/fuzz/gnutls_psk_server_fuzzer.in/9aa9971cb8313a7cb338a88097832d6bf7acc184 new file mode 100644 index 0000000000..d904469531 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9aa9971cb8313a7cb338a88097832d6bf7acc184 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9b0da10a7da5048b685a29827e0f02ca7d584467 b/fuzz/gnutls_psk_server_fuzzer.in/9b0da10a7da5048b685a29827e0f02ca7d584467 new file mode 100644 index 0000000000..6df1abb7ca Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9b0da10a7da5048b685a29827e0f02ca7d584467 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9b2076ef04c780418ec34c74c7a2a95bc2ae09a8 b/fuzz/gnutls_psk_server_fuzzer.in/9b2076ef04c780418ec34c74c7a2a95bc2ae09a8 new file mode 100644 index 0000000000..a2f1fb36c3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9b2076ef04c780418ec34c74c7a2a95bc2ae09a8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9bb6ac2501a3f74a74a6fe95b814149c1b56e033 b/fuzz/gnutls_psk_server_fuzzer.in/9bb6ac2501a3f74a74a6fe95b814149c1b56e033 new file mode 100644 index 0000000000..de1ef1d549 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9bb6ac2501a3f74a74a6fe95b814149c1b56e033 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9bb8c788516a6cdcd313dcba0ac955dd04d374cc b/fuzz/gnutls_psk_server_fuzzer.in/9bb8c788516a6cdcd313dcba0ac955dd04d374cc new file mode 100644 index 0000000000..51e460bd69 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9bb8c788516a6cdcd313dcba0ac955dd04d374cc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9bbbb29d3822fdd38698892d3d1c11c7240de377 b/fuzz/gnutls_psk_server_fuzzer.in/9bbbb29d3822fdd38698892d3d1c11c7240de377 new file mode 100644 index 0000000000..fc05a4e172 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9bbbb29d3822fdd38698892d3d1c11c7240de377 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9c6b3e79f2bea4319677d128889ea8f48bd771bd b/fuzz/gnutls_psk_server_fuzzer.in/9c6b3e79f2bea4319677d128889ea8f48bd771bd new file mode 100644 index 0000000000..f94b9ac577 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9c6b3e79f2bea4319677d128889ea8f48bd771bd differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9cd027194caf9237a8426e83913e4d0597f6aa3a b/fuzz/gnutls_psk_server_fuzzer.in/9cd027194caf9237a8426e83913e4d0597f6aa3a new file mode 100644 index 0000000000..94a41578ae Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9cd027194caf9237a8426e83913e4d0597f6aa3a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9e1df91939cb018176b1ee50012b6d0731da27b1 b/fuzz/gnutls_psk_server_fuzzer.in/9e1df91939cb018176b1ee50012b6d0731da27b1 new file mode 100644 index 0000000000..6e3d4b95e6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9e1df91939cb018176b1ee50012b6d0731da27b1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9e8e54c8fdd14bc17eeb2f93730dbe155af374a4 b/fuzz/gnutls_psk_server_fuzzer.in/9e8e54c8fdd14bc17eeb2f93730dbe155af374a4 new file mode 100644 index 0000000000..a8bdc0a4de Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9e8e54c8fdd14bc17eeb2f93730dbe155af374a4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9f3972d3c4840cf59b94e4547b70f0cbb57ccf09 b/fuzz/gnutls_psk_server_fuzzer.in/9f3972d3c4840cf59b94e4547b70f0cbb57ccf09 new file mode 100644 index 0000000000..86dcea7c4b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9f3972d3c4840cf59b94e4547b70f0cbb57ccf09 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9f4ce5c575829c7702d1028718c60ce844b3f333 b/fuzz/gnutls_psk_server_fuzzer.in/9f4ce5c575829c7702d1028718c60ce844b3f333 new file mode 100644 index 0000000000..9d167a309a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9f4ce5c575829c7702d1028718c60ce844b3f333 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/9fb1999e186969d7c5bf810664e64bcf971b5102 b/fuzz/gnutls_psk_server_fuzzer.in/9fb1999e186969d7c5bf810664e64bcf971b5102 new file mode 100644 index 0000000000..b38fd5b4f6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/9fb1999e186969d7c5bf810664e64bcf971b5102 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a019c771741a78b0f4c2926d932d03b87cf6dc17 b/fuzz/gnutls_psk_server_fuzzer.in/a019c771741a78b0f4c2926d932d03b87cf6dc17 new file mode 100644 index 0000000000..df314c8854 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a019c771741a78b0f4c2926d932d03b87cf6dc17 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a06888d16eed492f3029cca24313282fc7b84bb8 b/fuzz/gnutls_psk_server_fuzzer.in/a06888d16eed492f3029cca24313282fc7b84bb8 new file mode 100644 index 0000000000..6ffb65c87c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a06888d16eed492f3029cca24313282fc7b84bb8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a07e45f2242c696a5570a53c6905fc6677e9786e b/fuzz/gnutls_psk_server_fuzzer.in/a07e45f2242c696a5570a53c6905fc6677e9786e new file mode 100644 index 0000000000..57c43a55a5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a07e45f2242c696a5570a53c6905fc6677e9786e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a08fcd1d1084b566a5dee09af09e47515760f37d b/fuzz/gnutls_psk_server_fuzzer.in/a08fcd1d1084b566a5dee09af09e47515760f37d new file mode 100644 index 0000000000..5453f8f99a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a08fcd1d1084b566a5dee09af09e47515760f37d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a16b21e2a285851a29420a3c15f1997a5e70cc4c b/fuzz/gnutls_psk_server_fuzzer.in/a16b21e2a285851a29420a3c15f1997a5e70cc4c new file mode 100644 index 0000000000..4438e742b1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a16b21e2a285851a29420a3c15f1997a5e70cc4c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a1a6fbd7d7940ad43632bff5478f39b94de97ce2 b/fuzz/gnutls_psk_server_fuzzer.in/a1a6fbd7d7940ad43632bff5478f39b94de97ce2 new file mode 100644 index 0000000000..25dd93da94 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a1a6fbd7d7940ad43632bff5478f39b94de97ce2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a1d05bea85d6d04cdd98aadf40acae742a1a5d81 b/fuzz/gnutls_psk_server_fuzzer.in/a1d05bea85d6d04cdd98aadf40acae742a1a5d81 new file mode 100644 index 0000000000..2894006e1e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a1d05bea85d6d04cdd98aadf40acae742a1a5d81 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a229fccfeffc1b2fde0dc187a4d23e584b838dc5 b/fuzz/gnutls_psk_server_fuzzer.in/a229fccfeffc1b2fde0dc187a4d23e584b838dc5 new file mode 100644 index 0000000000..9fefea1f88 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a229fccfeffc1b2fde0dc187a4d23e584b838dc5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a254bb77d28783e8a10c51b8be08745ad3819a3d b/fuzz/gnutls_psk_server_fuzzer.in/a254bb77d28783e8a10c51b8be08745ad3819a3d new file mode 100644 index 0000000000..69708fea95 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a254bb77d28783e8a10c51b8be08745ad3819a3d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a28b39c24e8382ddc4b7393aea1c8974a46f3007 b/fuzz/gnutls_psk_server_fuzzer.in/a28b39c24e8382ddc4b7393aea1c8974a46f3007 new file mode 100644 index 0000000000..412a4f7abc Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a28b39c24e8382ddc4b7393aea1c8974a46f3007 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a2a436b36aa9232cc5f93610fcab077276a5c377 b/fuzz/gnutls_psk_server_fuzzer.in/a2a436b36aa9232cc5f93610fcab077276a5c377 new file mode 100644 index 0000000000..c47fa1a1b1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a2a436b36aa9232cc5f93610fcab077276a5c377 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a2ac20acc7fc977ce894f9d8b96f86ca98d62a2a b/fuzz/gnutls_psk_server_fuzzer.in/a2ac20acc7fc977ce894f9d8b96f86ca98d62a2a new file mode 100644 index 0000000000..bc032de848 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a2ac20acc7fc977ce894f9d8b96f86ca98d62a2a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a374a42d2705980090374275d9bbe6c58ad195a0 b/fuzz/gnutls_psk_server_fuzzer.in/a374a42d2705980090374275d9bbe6c58ad195a0 new file mode 100644 index 0000000000..86d8c142e2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a374a42d2705980090374275d9bbe6c58ad195a0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a37844aa9b178cb21ecbe824ba995d4794d227a6 b/fuzz/gnutls_psk_server_fuzzer.in/a37844aa9b178cb21ecbe824ba995d4794d227a6 new file mode 100644 index 0000000000..ed1bd49c1f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a37844aa9b178cb21ecbe824ba995d4794d227a6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a3d3fdf1d2312edc426dc348d5395681007a2401 b/fuzz/gnutls_psk_server_fuzzer.in/a3d3fdf1d2312edc426dc348d5395681007a2401 new file mode 100644 index 0000000000..f159e42d32 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a3d3fdf1d2312edc426dc348d5395681007a2401 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a404cd424ed79c5cc4f0f95d3d659e5962e0f878 b/fuzz/gnutls_psk_server_fuzzer.in/a404cd424ed79c5cc4f0f95d3d659e5962e0f878 new file mode 100644 index 0000000000..a2545ec829 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a404cd424ed79c5cc4f0f95d3d659e5962e0f878 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a4280486d0831cabb7bd4c2a84c81594c29316ec b/fuzz/gnutls_psk_server_fuzzer.in/a4280486d0831cabb7bd4c2a84c81594c29316ec new file mode 100644 index 0000000000..5a81228a1c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a4280486d0831cabb7bd4c2a84c81594c29316ec differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a4b1467f700417aab81a98e8c236bb6c27e8f7e6 b/fuzz/gnutls_psk_server_fuzzer.in/a4b1467f700417aab81a98e8c236bb6c27e8f7e6 new file mode 100644 index 0000000000..3481a96c30 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a4b1467f700417aab81a98e8c236bb6c27e8f7e6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a606d2572f9efb1e195e36975a881ef371344cf5 b/fuzz/gnutls_psk_server_fuzzer.in/a606d2572f9efb1e195e36975a881ef371344cf5 new file mode 100644 index 0000000000..ec9f957c7b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a606d2572f9efb1e195e36975a881ef371344cf5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a61f96f4a94fb831f1c3667737161d8901d8b5fe b/fuzz/gnutls_psk_server_fuzzer.in/a61f96f4a94fb831f1c3667737161d8901d8b5fe new file mode 100644 index 0000000000..1158eb5744 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a61f96f4a94fb831f1c3667737161d8901d8b5fe differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a6525c605960a1d146e4ad705228c32df54f0ec2 b/fuzz/gnutls_psk_server_fuzzer.in/a6525c605960a1d146e4ad705228c32df54f0ec2 new file mode 100644 index 0000000000..6788be3b7d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a6525c605960a1d146e4ad705228c32df54f0ec2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a70a7faff4e862fbcb7e56fda555d341306ff510 b/fuzz/gnutls_psk_server_fuzzer.in/a70a7faff4e862fbcb7e56fda555d341306ff510 new file mode 100644 index 0000000000..c244fb49d2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a70a7faff4e862fbcb7e56fda555d341306ff510 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a70f73949c7ce1bdd33895ba4e03379ff473bc36 b/fuzz/gnutls_psk_server_fuzzer.in/a70f73949c7ce1bdd33895ba4e03379ff473bc36 new file mode 100644 index 0000000000..5473697d77 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a70f73949c7ce1bdd33895ba4e03379ff473bc36 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a774de6e5e25a62a3064a521d73ca0d81c0b2210 b/fuzz/gnutls_psk_server_fuzzer.in/a774de6e5e25a62a3064a521d73ca0d81c0b2210 new file mode 100644 index 0000000000..5a61b1bde0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a774de6e5e25a62a3064a521d73ca0d81c0b2210 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a78403ce37531b309159cee32af375843dcf442d b/fuzz/gnutls_psk_server_fuzzer.in/a78403ce37531b309159cee32af375843dcf442d new file mode 100644 index 0000000000..3b717c28e5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a78403ce37531b309159cee32af375843dcf442d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a7d7e9b95508fa8fabfc12f0b9a745f6805f3209 b/fuzz/gnutls_psk_server_fuzzer.in/a7d7e9b95508fa8fabfc12f0b9a745f6805f3209 new file mode 100644 index 0000000000..cfbacf9426 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a7d7e9b95508fa8fabfc12f0b9a745f6805f3209 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a825d28dd1f97bad9b4bece4171b49783ca6cf18 b/fuzz/gnutls_psk_server_fuzzer.in/a825d28dd1f97bad9b4bece4171b49783ca6cf18 new file mode 100644 index 0000000000..9148dbb97f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a825d28dd1f97bad9b4bece4171b49783ca6cf18 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a841e36bbcfae5394f360b494472d24206c18128 b/fuzz/gnutls_psk_server_fuzzer.in/a841e36bbcfae5394f360b494472d24206c18128 new file mode 100644 index 0000000000..c630c4c31a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a841e36bbcfae5394f360b494472d24206c18128 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a8eea57b58c43d7ef31279e2b2092134fb889f61 b/fuzz/gnutls_psk_server_fuzzer.in/a8eea57b58c43d7ef31279e2b2092134fb889f61 new file mode 100644 index 0000000000..7f0d6c25d7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a8eea57b58c43d7ef31279e2b2092134fb889f61 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a9b73e49e2a509d19e79cb3a9f1914c72625ce96 b/fuzz/gnutls_psk_server_fuzzer.in/a9b73e49e2a509d19e79cb3a9f1914c72625ce96 new file mode 100644 index 0000000000..b25a684567 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a9b73e49e2a509d19e79cb3a9f1914c72625ce96 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a9bca4443a25ca7bac6e4f8e09d89f1005cbbcdf b/fuzz/gnutls_psk_server_fuzzer.in/a9bca4443a25ca7bac6e4f8e09d89f1005cbbcdf new file mode 100644 index 0000000000..dbc8b6bcc6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a9bca4443a25ca7bac6e4f8e09d89f1005cbbcdf differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/a9da8edaa04c84686df57c96a801f3162fe4de6f b/fuzz/gnutls_psk_server_fuzzer.in/a9da8edaa04c84686df57c96a801f3162fe4de6f new file mode 100644 index 0000000000..f13c3190f0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/a9da8edaa04c84686df57c96a801f3162fe4de6f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/aa156f1b94a438a39f078c4b12b6b126a3f5f891 b/fuzz/gnutls_psk_server_fuzzer.in/aa156f1b94a438a39f078c4b12b6b126a3f5f891 new file mode 100644 index 0000000000..e15299c2f5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/aa156f1b94a438a39f078c4b12b6b126a3f5f891 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/aa807010327ce18a22858adef3a307486bcba751 b/fuzz/gnutls_psk_server_fuzzer.in/aa807010327ce18a22858adef3a307486bcba751 new file mode 100644 index 0000000000..25ec367172 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/aa807010327ce18a22858adef3a307486bcba751 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/aaf663765e33e26e5e361c2ce96cf60304285b93 b/fuzz/gnutls_psk_server_fuzzer.in/aaf663765e33e26e5e361c2ce96cf60304285b93 new file mode 100644 index 0000000000..25f29a8cad Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/aaf663765e33e26e5e361c2ce96cf60304285b93 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/aafffd9c3ba344ea064aca2bef53a6b26649c4ff b/fuzz/gnutls_psk_server_fuzzer.in/aafffd9c3ba344ea064aca2bef53a6b26649c4ff new file mode 100644 index 0000000000..3dc12cc574 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/aafffd9c3ba344ea064aca2bef53a6b26649c4ff differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ab1c2830de3bfcc93e47116bba5d4ec594128803 b/fuzz/gnutls_psk_server_fuzzer.in/ab1c2830de3bfcc93e47116bba5d4ec594128803 new file mode 100644 index 0000000000..1535da372e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ab1c2830de3bfcc93e47116bba5d4ec594128803 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ab3b8999e0a365331503171f78f02efe1fa5c88f b/fuzz/gnutls_psk_server_fuzzer.in/ab3b8999e0a365331503171f78f02efe1fa5c88f new file mode 100644 index 0000000000..b638708202 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ab3b8999e0a365331503171f78f02efe1fa5c88f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ab4f092e1291dc46ebffaaa2d9ef57cd33ed33a0 b/fuzz/gnutls_psk_server_fuzzer.in/ab4f092e1291dc46ebffaaa2d9ef57cd33ed33a0 new file mode 100644 index 0000000000..e4657ff187 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ab4f092e1291dc46ebffaaa2d9ef57cd33ed33a0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/abcae796a6e3c679d26273c93a9b7f9bdb7947ee b/fuzz/gnutls_psk_server_fuzzer.in/abcae796a6e3c679d26273c93a9b7f9bdb7947ee new file mode 100644 index 0000000000..75b3aa36d7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/abcae796a6e3c679d26273c93a9b7f9bdb7947ee differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ac7b00e7ba07eea77fd1da662cf5ce44e5c96164 b/fuzz/gnutls_psk_server_fuzzer.in/ac7b00e7ba07eea77fd1da662cf5ce44e5c96164 new file mode 100644 index 0000000000..fa234b10ca Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ac7b00e7ba07eea77fd1da662cf5ce44e5c96164 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/acac93bf8ced37b3e08a28c68a464a7273c1f816 b/fuzz/gnutls_psk_server_fuzzer.in/acac93bf8ced37b3e08a28c68a464a7273c1f816 new file mode 100644 index 0000000000..3cb8d966dc Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/acac93bf8ced37b3e08a28c68a464a7273c1f816 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ad2fc40296a0dc7636dcfc3b0beb5c3e0daf0249 b/fuzz/gnutls_psk_server_fuzzer.in/ad2fc40296a0dc7636dcfc3b0beb5c3e0daf0249 new file mode 100644 index 0000000000..2ceeddba0c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ad2fc40296a0dc7636dcfc3b0beb5c3e0daf0249 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ad5d6d0f689469348847a4c3788694e11b63d550 b/fuzz/gnutls_psk_server_fuzzer.in/ad5d6d0f689469348847a4c3788694e11b63d550 new file mode 100644 index 0000000000..627424e346 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ad5d6d0f689469348847a4c3788694e11b63d550 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ae09eee7c432a63d4e4169212f6e0e9e4924c767 b/fuzz/gnutls_psk_server_fuzzer.in/ae09eee7c432a63d4e4169212f6e0e9e4924c767 new file mode 100644 index 0000000000..05bbf8a381 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ae09eee7c432a63d4e4169212f6e0e9e4924c767 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ae2b2ce0d6ff4d4744d55342010bacb7de04b145 b/fuzz/gnutls_psk_server_fuzzer.in/ae2b2ce0d6ff4d4744d55342010bacb7de04b145 new file mode 100644 index 0000000000..ea87c39705 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ae2b2ce0d6ff4d4744d55342010bacb7de04b145 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ae4a2b5ce4c34ca829b84a705bf0d07f625907d8 b/fuzz/gnutls_psk_server_fuzzer.in/ae4a2b5ce4c34ca829b84a705bf0d07f625907d8 new file mode 100644 index 0000000000..cd417a1883 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ae4a2b5ce4c34ca829b84a705bf0d07f625907d8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/aeabc370e1677ead61f9d2ecca67362da3f06150 b/fuzz/gnutls_psk_server_fuzzer.in/aeabc370e1677ead61f9d2ecca67362da3f06150 new file mode 100644 index 0000000000..f684abf902 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/aeabc370e1677ead61f9d2ecca67362da3f06150 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b0db9f718b2d43249f3007ec8e176319aabfe900 b/fuzz/gnutls_psk_server_fuzzer.in/b0db9f718b2d43249f3007ec8e176319aabfe900 new file mode 100644 index 0000000000..979cdb0546 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b0db9f718b2d43249f3007ec8e176319aabfe900 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b0e06be42d99253a91692593f7b3c656c2998a1e b/fuzz/gnutls_psk_server_fuzzer.in/b0e06be42d99253a91692593f7b3c656c2998a1e new file mode 100644 index 0000000000..dc31490f28 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b0e06be42d99253a91692593f7b3c656c2998a1e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b0f1dd42bcf88c76009a4e42a955fd9c5f57e5e7 b/fuzz/gnutls_psk_server_fuzzer.in/b0f1dd42bcf88c76009a4e42a955fd9c5f57e5e7 new file mode 100644 index 0000000000..e11a3c4803 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b0f1dd42bcf88c76009a4e42a955fd9c5f57e5e7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b15dbe865b47acf7eaadb235ce9ec2560e8946a3 b/fuzz/gnutls_psk_server_fuzzer.in/b15dbe865b47acf7eaadb235ce9ec2560e8946a3 new file mode 100644 index 0000000000..2cbf03c4a3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b15dbe865b47acf7eaadb235ce9ec2560e8946a3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b2a5e774f13350096d0078806bd9e8668a72bd3f b/fuzz/gnutls_psk_server_fuzzer.in/b2a5e774f13350096d0078806bd9e8668a72bd3f new file mode 100644 index 0000000000..b5695000f7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b2a5e774f13350096d0078806bd9e8668a72bd3f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b2ac2684dcdcc2ce411bd7f6ec5f45176b6a4298 b/fuzz/gnutls_psk_server_fuzzer.in/b2ac2684dcdcc2ce411bd7f6ec5f45176b6a4298 new file mode 100644 index 0000000000..3bee4b9ebd Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b2ac2684dcdcc2ce411bd7f6ec5f45176b6a4298 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b2c3c6a0bc70604a69d0819b3bbef98e9305a5f6 b/fuzz/gnutls_psk_server_fuzzer.in/b2c3c6a0bc70604a69d0819b3bbef98e9305a5f6 new file mode 100644 index 0000000000..7c95c3cbc2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b2c3c6a0bc70604a69d0819b3bbef98e9305a5f6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b2d7d6e6d8bad248c5a7f9b443f9e0626788b6fa b/fuzz/gnutls_psk_server_fuzzer.in/b2d7d6e6d8bad248c5a7f9b443f9e0626788b6fa new file mode 100644 index 0000000000..a6fec4333c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b2d7d6e6d8bad248c5a7f9b443f9e0626788b6fa differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b3bbf24d6112184e2a7b01348783369777c2ef0b b/fuzz/gnutls_psk_server_fuzzer.in/b3bbf24d6112184e2a7b01348783369777c2ef0b new file mode 100644 index 0000000000..f1ff6bc4f7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b3bbf24d6112184e2a7b01348783369777c2ef0b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b3f74b2cd6a6ff7a730fea72801addc212c0d12a b/fuzz/gnutls_psk_server_fuzzer.in/b3f74b2cd6a6ff7a730fea72801addc212c0d12a new file mode 100644 index 0000000000..7a36884b98 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b3f74b2cd6a6ff7a730fea72801addc212c0d12a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b40abbd7842aa5d07579a6a7496495231548c40e b/fuzz/gnutls_psk_server_fuzzer.in/b40abbd7842aa5d07579a6a7496495231548c40e new file mode 100644 index 0000000000..3df0e0a3e5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b40abbd7842aa5d07579a6a7496495231548c40e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b423e2e02de2131d6a8a3dda3dbebd45a81010b9 b/fuzz/gnutls_psk_server_fuzzer.in/b423e2e02de2131d6a8a3dda3dbebd45a81010b9 new file mode 100644 index 0000000000..a36234fd39 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b423e2e02de2131d6a8a3dda3dbebd45a81010b9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b4322592ee9c2a59a7b7d9ac5fc7ddf8dce72456 b/fuzz/gnutls_psk_server_fuzzer.in/b4322592ee9c2a59a7b7d9ac5fc7ddf8dce72456 new file mode 100644 index 0000000000..230f6f39d5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b4322592ee9c2a59a7b7d9ac5fc7ddf8dce72456 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b47eb6efb06daa15bacdaf7601edcece667cabc8 b/fuzz/gnutls_psk_server_fuzzer.in/b47eb6efb06daa15bacdaf7601edcece667cabc8 new file mode 100644 index 0000000000..28497fd44a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b47eb6efb06daa15bacdaf7601edcece667cabc8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b491d4a75a7c20e16bf7a9f41ed2c9881d2e78ef b/fuzz/gnutls_psk_server_fuzzer.in/b491d4a75a7c20e16bf7a9f41ed2c9881d2e78ef new file mode 100644 index 0000000000..976fb671e6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b491d4a75a7c20e16bf7a9f41ed2c9881d2e78ef differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b4c3c0605b3efe8f082e154d730f590df6bd05a8 b/fuzz/gnutls_psk_server_fuzzer.in/b4c3c0605b3efe8f082e154d730f590df6bd05a8 new file mode 100644 index 0000000000..cf9d0908ef Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b4c3c0605b3efe8f082e154d730f590df6bd05a8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b4ea0653fee00e91e434d8b327f4d3eae2ec1e0f b/fuzz/gnutls_psk_server_fuzzer.in/b4ea0653fee00e91e434d8b327f4d3eae2ec1e0f new file mode 100644 index 0000000000..0f7a8fcb19 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b4ea0653fee00e91e434d8b327f4d3eae2ec1e0f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b57f0da3495d6564b12cecd8d2021a3091df8029 b/fuzz/gnutls_psk_server_fuzzer.in/b57f0da3495d6564b12cecd8d2021a3091df8029 new file mode 100644 index 0000000000..d2b0e404d9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b57f0da3495d6564b12cecd8d2021a3091df8029 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b600d57ec7a4f9a1c19ae6931bfb7ed67229af96 b/fuzz/gnutls_psk_server_fuzzer.in/b600d57ec7a4f9a1c19ae6931bfb7ed67229af96 new file mode 100644 index 0000000000..c7cd0c6f1d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b600d57ec7a4f9a1c19ae6931bfb7ed67229af96 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b64cf243fadc62e4d6348e4d14c0d60c27570e05 b/fuzz/gnutls_psk_server_fuzzer.in/b64cf243fadc62e4d6348e4d14c0d60c27570e05 new file mode 100644 index 0000000000..4827785d36 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b64cf243fadc62e4d6348e4d14c0d60c27570e05 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b68f5e642b8e08b139250bb75961043efbdf3b65 b/fuzz/gnutls_psk_server_fuzzer.in/b68f5e642b8e08b139250bb75961043efbdf3b65 new file mode 100644 index 0000000000..b8af07198b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b68f5e642b8e08b139250bb75961043efbdf3b65 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b6cda6b0bdc4f8ab6061736eec9c6fad26bf93a5 b/fuzz/gnutls_psk_server_fuzzer.in/b6cda6b0bdc4f8ab6061736eec9c6fad26bf93a5 new file mode 100644 index 0000000000..b3885585e2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b6cda6b0bdc4f8ab6061736eec9c6fad26bf93a5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b749f6a565612dbf4cc7d6aa667612b11e5dc10f b/fuzz/gnutls_psk_server_fuzzer.in/b749f6a565612dbf4cc7d6aa667612b11e5dc10f new file mode 100644 index 0000000000..93dba89365 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b749f6a565612dbf4cc7d6aa667612b11e5dc10f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b75c88717b8d0cdfa13cc5db962ef8a33dd9fd1f b/fuzz/gnutls_psk_server_fuzzer.in/b75c88717b8d0cdfa13cc5db962ef8a33dd9fd1f new file mode 100644 index 0000000000..7e39121548 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b75c88717b8d0cdfa13cc5db962ef8a33dd9fd1f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b77682ddc5ad03f2ab059d97736b5d70fb6fb61d b/fuzz/gnutls_psk_server_fuzzer.in/b77682ddc5ad03f2ab059d97736b5d70fb6fb61d new file mode 100644 index 0000000000..0ee285e374 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b77682ddc5ad03f2ab059d97736b5d70fb6fb61d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b790b982ac97dca837d9b56ae27902027942b9a9 b/fuzz/gnutls_psk_server_fuzzer.in/b790b982ac97dca837d9b56ae27902027942b9a9 new file mode 100644 index 0000000000..1915a2590c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b790b982ac97dca837d9b56ae27902027942b9a9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b7f2203068a9d7609555125f279e45717a82c3c3 b/fuzz/gnutls_psk_server_fuzzer.in/b7f2203068a9d7609555125f279e45717a82c3c3 new file mode 100644 index 0000000000..241a61a49e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b7f2203068a9d7609555125f279e45717a82c3c3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b8853fe2ee5d45b76cadcaac629b21aa62547324 b/fuzz/gnutls_psk_server_fuzzer.in/b8853fe2ee5d45b76cadcaac629b21aa62547324 new file mode 100644 index 0000000000..1b73122fb0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b8853fe2ee5d45b76cadcaac629b21aa62547324 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b8cf264dc7f4c79949ffa93553884bc2d613aae8 b/fuzz/gnutls_psk_server_fuzzer.in/b8cf264dc7f4c79949ffa93553884bc2d613aae8 new file mode 100644 index 0000000000..673c6ec671 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b8cf264dc7f4c79949ffa93553884bc2d613aae8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/b90f64a023fe2a7f78aba85833b8e4ddd786de8f b/fuzz/gnutls_psk_server_fuzzer.in/b90f64a023fe2a7f78aba85833b8e4ddd786de8f new file mode 100644 index 0000000000..dfbc6ecbdb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/b90f64a023fe2a7f78aba85833b8e4ddd786de8f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ba30fd4836b55dce501e93f588909631788a9e88 b/fuzz/gnutls_psk_server_fuzzer.in/ba30fd4836b55dce501e93f588909631788a9e88 new file mode 100644 index 0000000000..5e632b2234 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ba30fd4836b55dce501e93f588909631788a9e88 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bade68bdf12a9c24035fa1f8126e39b0aba4bbc9 b/fuzz/gnutls_psk_server_fuzzer.in/bade68bdf12a9c24035fa1f8126e39b0aba4bbc9 new file mode 100644 index 0000000000..00d43558c3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bade68bdf12a9c24035fa1f8126e39b0aba4bbc9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bbc13f4d7cf8964bcde2cacd50d62ce415a02689 b/fuzz/gnutls_psk_server_fuzzer.in/bbc13f4d7cf8964bcde2cacd50d62ce415a02689 new file mode 100644 index 0000000000..eb8c06d467 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bbc13f4d7cf8964bcde2cacd50d62ce415a02689 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bc750f0da3d2d1e4bf7bb22026d251d89c3082c0 b/fuzz/gnutls_psk_server_fuzzer.in/bc750f0da3d2d1e4bf7bb22026d251d89c3082c0 new file mode 100644 index 0000000000..895730b2fd Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bc750f0da3d2d1e4bf7bb22026d251d89c3082c0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bca5044353128cdbd4186a39acc1db1c8eb66943 b/fuzz/gnutls_psk_server_fuzzer.in/bca5044353128cdbd4186a39acc1db1c8eb66943 new file mode 100644 index 0000000000..ad93b619d0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bca5044353128cdbd4186a39acc1db1c8eb66943 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bcb4a4d9647bc5918b58125cbadea565c3ac2428 b/fuzz/gnutls_psk_server_fuzzer.in/bcb4a4d9647bc5918b58125cbadea565c3ac2428 new file mode 100644 index 0000000000..2759b75508 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bcb4a4d9647bc5918b58125cbadea565c3ac2428 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bcb95e984543a655c0935565c9a02ade65fffbe6 b/fuzz/gnutls_psk_server_fuzzer.in/bcb95e984543a655c0935565c9a02ade65fffbe6 new file mode 100644 index 0000000000..d5aee40cd6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bcb95e984543a655c0935565c9a02ade65fffbe6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bcc67966dd8cef03f92ddbf35dd45825f071bf34 b/fuzz/gnutls_psk_server_fuzzer.in/bcc67966dd8cef03f92ddbf35dd45825f071bf34 new file mode 100644 index 0000000000..49523e9ac4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bcc67966dd8cef03f92ddbf35dd45825f071bf34 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bcf33efee8763c19abf78f0177f6dbf1d0eaa0c2 b/fuzz/gnutls_psk_server_fuzzer.in/bcf33efee8763c19abf78f0177f6dbf1d0eaa0c2 new file mode 100644 index 0000000000..c776abafd4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bcf33efee8763c19abf78f0177f6dbf1d0eaa0c2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bd2becf29b675eda1a5868e88d51949d10989145 b/fuzz/gnutls_psk_server_fuzzer.in/bd2becf29b675eda1a5868e88d51949d10989145 new file mode 100644 index 0000000000..b5dd453bce Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bd2becf29b675eda1a5868e88d51949d10989145 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bd6b2669e16a11fe9121c81af5258e72fdaf76ce b/fuzz/gnutls_psk_server_fuzzer.in/bd6b2669e16a11fe9121c81af5258e72fdaf76ce new file mode 100644 index 0000000000..c6569510c1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bd6b2669e16a11fe9121c81af5258e72fdaf76ce differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bd91431820eb106b9fd22112c8c60037fefe9e62 b/fuzz/gnutls_psk_server_fuzzer.in/bd91431820eb106b9fd22112c8c60037fefe9e62 new file mode 100644 index 0000000000..2032ccb75d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bd91431820eb106b9fd22112c8c60037fefe9e62 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bdb1ec43d0c10f186a8213446d27d2af649b4b0c b/fuzz/gnutls_psk_server_fuzzer.in/bdb1ec43d0c10f186a8213446d27d2af649b4b0c new file mode 100644 index 0000000000..dea8689f63 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bdb1ec43d0c10f186a8213446d27d2af649b4b0c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/be8484bea0ea02cf7bcdf722471e59d48473b2dd b/fuzz/gnutls_psk_server_fuzzer.in/be8484bea0ea02cf7bcdf722471e59d48473b2dd new file mode 100644 index 0000000000..9bcfbdc73d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/be8484bea0ea02cf7bcdf722471e59d48473b2dd differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/beaa93ff3adca6cf81bf31b12c4ba3ce6f49d157 b/fuzz/gnutls_psk_server_fuzzer.in/beaa93ff3adca6cf81bf31b12c4ba3ce6f49d157 new file mode 100644 index 0000000000..b360cc0971 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/beaa93ff3adca6cf81bf31b12c4ba3ce6f49d157 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/beb1bf90f5102fce21903c4a6d6ba917c50a7f1c b/fuzz/gnutls_psk_server_fuzzer.in/beb1bf90f5102fce21903c4a6d6ba917c50a7f1c new file mode 100644 index 0000000000..b9c2a4f795 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/beb1bf90f5102fce21903c4a6d6ba917c50a7f1c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/beb2c06ef381e687852e97007a9a97be86c5d73d b/fuzz/gnutls_psk_server_fuzzer.in/beb2c06ef381e687852e97007a9a97be86c5d73d new file mode 100644 index 0000000000..3c7475a619 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/beb2c06ef381e687852e97007a9a97be86c5d73d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bef705ac44e0e52c35ba56c3ece11123846f129d b/fuzz/gnutls_psk_server_fuzzer.in/bef705ac44e0e52c35ba56c3ece11123846f129d new file mode 100644 index 0000000000..ccd25b87f7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bef705ac44e0e52c35ba56c3ece11123846f129d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/bf8db5a11864b0a7561e8ce5dfa29cbdc772e271 b/fuzz/gnutls_psk_server_fuzzer.in/bf8db5a11864b0a7561e8ce5dfa29cbdc772e271 new file mode 100644 index 0000000000..23445c2103 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/bf8db5a11864b0a7561e8ce5dfa29cbdc772e271 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c03484195b8e187245fc12487e18503bd9987f0b b/fuzz/gnutls_psk_server_fuzzer.in/c03484195b8e187245fc12487e18503bd9987f0b new file mode 100644 index 0000000000..2f447b04f1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c03484195b8e187245fc12487e18503bd9987f0b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c081b974e153d0105a7cda6ca7719bad09a13a5f b/fuzz/gnutls_psk_server_fuzzer.in/c081b974e153d0105a7cda6ca7719bad09a13a5f new file mode 100644 index 0000000000..6de32abd3d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c081b974e153d0105a7cda6ca7719bad09a13a5f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c10589641339687775fe3000207fcae8ff608337 b/fuzz/gnutls_psk_server_fuzzer.in/c10589641339687775fe3000207fcae8ff608337 new file mode 100644 index 0000000000..5972a3f445 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c10589641339687775fe3000207fcae8ff608337 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c1848d0b822cccb2d1b5febaa7cb1a876463d454 b/fuzz/gnutls_psk_server_fuzzer.in/c1848d0b822cccb2d1b5febaa7cb1a876463d454 new file mode 100644 index 0000000000..7d72d3179c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c1848d0b822cccb2d1b5febaa7cb1a876463d454 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c20885c932ab26eff0a48d177b4cf6882dd1f185 b/fuzz/gnutls_psk_server_fuzzer.in/c20885c932ab26eff0a48d177b4cf6882dd1f185 new file mode 100644 index 0000000000..1e892c628c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c20885c932ab26eff0a48d177b4cf6882dd1f185 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c21d08824e64122ce58d3ab45dd7e5ea589e8ece b/fuzz/gnutls_psk_server_fuzzer.in/c21d08824e64122ce58d3ab45dd7e5ea589e8ece new file mode 100644 index 0000000000..255bb39747 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c21d08824e64122ce58d3ab45dd7e5ea589e8ece differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c24065d57cb7bab28ae40875718c908b5b2a9cc4 b/fuzz/gnutls_psk_server_fuzzer.in/c24065d57cb7bab28ae40875718c908b5b2a9cc4 new file mode 100644 index 0000000000..40512487bf Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c24065d57cb7bab28ae40875718c908b5b2a9cc4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c251b9f90a771b2a53270633600bb6b7a3cd8134 b/fuzz/gnutls_psk_server_fuzzer.in/c251b9f90a771b2a53270633600bb6b7a3cd8134 new file mode 100644 index 0000000000..d1e1aea9c4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c251b9f90a771b2a53270633600bb6b7a3cd8134 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c28050b4da1fa2655f58deec2462364fd41341fa b/fuzz/gnutls_psk_server_fuzzer.in/c28050b4da1fa2655f58deec2462364fd41341fa new file mode 100644 index 0000000000..2479e78d3d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c28050b4da1fa2655f58deec2462364fd41341fa differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c295a79951241edbee6b76936fb51f3d614fbff9 b/fuzz/gnutls_psk_server_fuzzer.in/c295a79951241edbee6b76936fb51f3d614fbff9 new file mode 100644 index 0000000000..d19eee8dc6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c295a79951241edbee6b76936fb51f3d614fbff9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c34607b2e9001319a0e810e1d677d875fd7023b2 b/fuzz/gnutls_psk_server_fuzzer.in/c34607b2e9001319a0e810e1d677d875fd7023b2 new file mode 100644 index 0000000000..60d91285c0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c34607b2e9001319a0e810e1d677d875fd7023b2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c35521f5ca0f64b155208f9988428efb4fb87930 b/fuzz/gnutls_psk_server_fuzzer.in/c35521f5ca0f64b155208f9988428efb4fb87930 new file mode 100644 index 0000000000..dcb43f223b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c35521f5ca0f64b155208f9988428efb4fb87930 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c37c6d7df23ae170eb101f98116fe9fecc6e98cb b/fuzz/gnutls_psk_server_fuzzer.in/c37c6d7df23ae170eb101f98116fe9fecc6e98cb new file mode 100644 index 0000000000..ceacf2086e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c37c6d7df23ae170eb101f98116fe9fecc6e98cb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c3c09808edee1a6d316b1802bfc235a3139b24e5 b/fuzz/gnutls_psk_server_fuzzer.in/c3c09808edee1a6d316b1802bfc235a3139b24e5 new file mode 100644 index 0000000000..7c57a751ba Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c3c09808edee1a6d316b1802bfc235a3139b24e5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c3cf3ef820566bc9eca5a06d4944cbb525cd34b5 b/fuzz/gnutls_psk_server_fuzzer.in/c3cf3ef820566bc9eca5a06d4944cbb525cd34b5 new file mode 100644 index 0000000000..a38f1a8c52 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c3cf3ef820566bc9eca5a06d4944cbb525cd34b5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c3d6b97487667e0818964915a766713a0a54051b b/fuzz/gnutls_psk_server_fuzzer.in/c3d6b97487667e0818964915a766713a0a54051b new file mode 100644 index 0000000000..c1f02dce9d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c3d6b97487667e0818964915a766713a0a54051b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c47196268023fd7079bf327a787d25e1fa40c1c8 b/fuzz/gnutls_psk_server_fuzzer.in/c47196268023fd7079bf327a787d25e1fa40c1c8 new file mode 100644 index 0000000000..c3e3495ce7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c47196268023fd7079bf327a787d25e1fa40c1c8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c4ec2c7ae889de79ee085b891bf75aceeff3fa8e b/fuzz/gnutls_psk_server_fuzzer.in/c4ec2c7ae889de79ee085b891bf75aceeff3fa8e new file mode 100644 index 0000000000..35cff5652f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c4ec2c7ae889de79ee085b891bf75aceeff3fa8e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c4ed11bd63fe3fb72daa4c03577d890e3a948524 b/fuzz/gnutls_psk_server_fuzzer.in/c4ed11bd63fe3fb72daa4c03577d890e3a948524 new file mode 100644 index 0000000000..4676f1360f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c4ed11bd63fe3fb72daa4c03577d890e3a948524 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c505a7742f38c084bb8940f4b8589ebb1197438a b/fuzz/gnutls_psk_server_fuzzer.in/c505a7742f38c084bb8940f4b8589ebb1197438a new file mode 100644 index 0000000000..68b3b36cf4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c505a7742f38c084bb8940f4b8589ebb1197438a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c5c4f478f61e6d3f6fee433409b7620b725c4ff6 b/fuzz/gnutls_psk_server_fuzzer.in/c5c4f478f61e6d3f6fee433409b7620b725c4ff6 new file mode 100644 index 0000000000..de4976f37e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c5c4f478f61e6d3f6fee433409b7620b725c4ff6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c5c60306f2b6255b46b66bc418f294eb2a8c7cdb b/fuzz/gnutls_psk_server_fuzzer.in/c5c60306f2b6255b46b66bc418f294eb2a8c7cdb new file mode 100644 index 0000000000..94a6516acb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c5c60306f2b6255b46b66bc418f294eb2a8c7cdb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c5f034cc70c1198d3ff9bf8a5a3f66fe949f605b b/fuzz/gnutls_psk_server_fuzzer.in/c5f034cc70c1198d3ff9bf8a5a3f66fe949f605b new file mode 100644 index 0000000000..3d13e77753 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c5f034cc70c1198d3ff9bf8a5a3f66fe949f605b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c6087103d6d1e0be3dc5f6ea8cdd6670f536ed7d b/fuzz/gnutls_psk_server_fuzzer.in/c6087103d6d1e0be3dc5f6ea8cdd6670f536ed7d new file mode 100644 index 0000000000..a5557237e3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c6087103d6d1e0be3dc5f6ea8cdd6670f536ed7d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c64739ebba11df464353dd454b19165062a018f1 b/fuzz/gnutls_psk_server_fuzzer.in/c64739ebba11df464353dd454b19165062a018f1 new file mode 100644 index 0000000000..9418af3230 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c64739ebba11df464353dd454b19165062a018f1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c6eb055124bec2084504a8733c526ce8ae3c2684 b/fuzz/gnutls_psk_server_fuzzer.in/c6eb055124bec2084504a8733c526ce8ae3c2684 new file mode 100644 index 0000000000..1a4fcbc87b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c6eb055124bec2084504a8733c526ce8ae3c2684 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c73fd320cffbac45c3944390c747825fb9932ea4 b/fuzz/gnutls_psk_server_fuzzer.in/c73fd320cffbac45c3944390c747825fb9932ea4 new file mode 100644 index 0000000000..71e140adf3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c73fd320cffbac45c3944390c747825fb9932ea4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c78ed9e539290b16a482c41744a90f960dbb62c1 b/fuzz/gnutls_psk_server_fuzzer.in/c78ed9e539290b16a482c41744a90f960dbb62c1 new file mode 100644 index 0000000000..e3799041ed Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c78ed9e539290b16a482c41744a90f960dbb62c1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c7f5591871ab0614452870949e6eccf62b8b1c06 b/fuzz/gnutls_psk_server_fuzzer.in/c7f5591871ab0614452870949e6eccf62b8b1c06 new file mode 100644 index 0000000000..e1fdc9c6fb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c7f5591871ab0614452870949e6eccf62b8b1c06 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c7fff1b5638fa1e2926c0e8851636ad561e929b7 b/fuzz/gnutls_psk_server_fuzzer.in/c7fff1b5638fa1e2926c0e8851636ad561e929b7 new file mode 100644 index 0000000000..6d6229955b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c7fff1b5638fa1e2926c0e8851636ad561e929b7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c81263fb0871569ac73bb1bc6ce36da4369e6050 b/fuzz/gnutls_psk_server_fuzzer.in/c81263fb0871569ac73bb1bc6ce36da4369e6050 new file mode 100644 index 0000000000..bce7d45523 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c81263fb0871569ac73bb1bc6ce36da4369e6050 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c89a3810e693eca7565ca94b04b2703eb8b01629 b/fuzz/gnutls_psk_server_fuzzer.in/c89a3810e693eca7565ca94b04b2703eb8b01629 new file mode 100644 index 0000000000..27b7e7217b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c89a3810e693eca7565ca94b04b2703eb8b01629 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c8cafbb8cbfcdd7f96a2f47317570d4faf3f4fe9 b/fuzz/gnutls_psk_server_fuzzer.in/c8cafbb8cbfcdd7f96a2f47317570d4faf3f4fe9 new file mode 100644 index 0000000000..f95b290396 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c8cafbb8cbfcdd7f96a2f47317570d4faf3f4fe9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c920ed2cd456f5ddd477957d87e58457ed2adddc b/fuzz/gnutls_psk_server_fuzzer.in/c920ed2cd456f5ddd477957d87e58457ed2adddc new file mode 100644 index 0000000000..8f666f2a90 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c920ed2cd456f5ddd477957d87e58457ed2adddc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c937d7055661c373cdd757eae96cc942674b7ba9 b/fuzz/gnutls_psk_server_fuzzer.in/c937d7055661c373cdd757eae96cc942674b7ba9 new file mode 100644 index 0000000000..ac80328d8e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c937d7055661c373cdd757eae96cc942674b7ba9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c949ca05ad28214011486b2c0c1d926946d742a4 b/fuzz/gnutls_psk_server_fuzzer.in/c949ca05ad28214011486b2c0c1d926946d742a4 new file mode 100644 index 0000000000..ab87aeafcc Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c949ca05ad28214011486b2c0c1d926946d742a4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c9b1498c31e19393d7dfa775f741ed5ba17a84b0 b/fuzz/gnutls_psk_server_fuzzer.in/c9b1498c31e19393d7dfa775f741ed5ba17a84b0 new file mode 100644 index 0000000000..2f472710fa Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c9b1498c31e19393d7dfa775f741ed5ba17a84b0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/c9caa0b29fa8ad714b42d105dd1ef84e425b278b b/fuzz/gnutls_psk_server_fuzzer.in/c9caa0b29fa8ad714b42d105dd1ef84e425b278b new file mode 100644 index 0000000000..9854c3ad20 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/c9caa0b29fa8ad714b42d105dd1ef84e425b278b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ca3a0ce05de718763786274ee71e61ce87723d89 b/fuzz/gnutls_psk_server_fuzzer.in/ca3a0ce05de718763786274ee71e61ce87723d89 new file mode 100644 index 0000000000..d5d912b3d1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ca3a0ce05de718763786274ee71e61ce87723d89 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ca51fb50d2dc381417619ab6bb738ed86bffd03c b/fuzz/gnutls_psk_server_fuzzer.in/ca51fb50d2dc381417619ab6bb738ed86bffd03c new file mode 100644 index 0000000000..9df796dd46 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ca51fb50d2dc381417619ab6bb738ed86bffd03c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cade79dad6f13d5e909e3f8b41eee8dae3024c85 b/fuzz/gnutls_psk_server_fuzzer.in/cade79dad6f13d5e909e3f8b41eee8dae3024c85 new file mode 100644 index 0000000000..387a6d009d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cade79dad6f13d5e909e3f8b41eee8dae3024c85 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cb162aff8aa38aed0ed33a43472671f19614619d b/fuzz/gnutls_psk_server_fuzzer.in/cb162aff8aa38aed0ed33a43472671f19614619d new file mode 100644 index 0000000000..820f2878f5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cb162aff8aa38aed0ed33a43472671f19614619d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cb3e5193e9363e59136e1b8f5dac082656463f9c b/fuzz/gnutls_psk_server_fuzzer.in/cb3e5193e9363e59136e1b8f5dac082656463f9c new file mode 100644 index 0000000000..fd003ad0c1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cb3e5193e9363e59136e1b8f5dac082656463f9c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cb534728159f575fe4fe5da871a6d1177b2990ab b/fuzz/gnutls_psk_server_fuzzer.in/cb534728159f575fe4fe5da871a6d1177b2990ab new file mode 100644 index 0000000000..faa438efb3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cb534728159f575fe4fe5da871a6d1177b2990ab differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cb9aa67d82611378702cf43f37d72d81cb92313f b/fuzz/gnutls_psk_server_fuzzer.in/cb9aa67d82611378702cf43f37d72d81cb92313f new file mode 100644 index 0000000000..c214a3ec72 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cb9aa67d82611378702cf43f37d72d81cb92313f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cbf135a1fc2a146407dffa62f034fcb88e12d747 b/fuzz/gnutls_psk_server_fuzzer.in/cbf135a1fc2a146407dffa62f034fcb88e12d747 new file mode 100644 index 0000000000..f2f01a6766 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cbf135a1fc2a146407dffa62f034fcb88e12d747 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ccddd6dfa2abe0303265b096c18d2b94bc0b0884 b/fuzz/gnutls_psk_server_fuzzer.in/ccddd6dfa2abe0303265b096c18d2b94bc0b0884 new file mode 100644 index 0000000000..8a8a4f9c80 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ccddd6dfa2abe0303265b096c18d2b94bc0b0884 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cd36a85ac8dcb8adf3739c64ddf03aa9c5d2542e b/fuzz/gnutls_psk_server_fuzzer.in/cd36a85ac8dcb8adf3739c64ddf03aa9c5d2542e new file mode 100644 index 0000000000..377c3e99d5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cd36a85ac8dcb8adf3739c64ddf03aa9c5d2542e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cd6ca8614c5ceba16416d85b9e10733c3c6199d6 b/fuzz/gnutls_psk_server_fuzzer.in/cd6ca8614c5ceba16416d85b9e10733c3c6199d6 new file mode 100644 index 0000000000..fefee8f9a2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cd6ca8614c5ceba16416d85b9e10733c3c6199d6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cdad0fba9a904659c08b6079aa042f439adcb782 b/fuzz/gnutls_psk_server_fuzzer.in/cdad0fba9a904659c08b6079aa042f439adcb782 new file mode 100644 index 0000000000..19ce8be771 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cdad0fba9a904659c08b6079aa042f439adcb782 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cde71547aca4e365f35a61741b097dee32853373 b/fuzz/gnutls_psk_server_fuzzer.in/cde71547aca4e365f35a61741b097dee32853373 new file mode 100644 index 0000000000..0dc2a5bfd9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cde71547aca4e365f35a61741b097dee32853373 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cde916cd93c7fa8b1cb72363806e688e60c4ede7 b/fuzz/gnutls_psk_server_fuzzer.in/cde916cd93c7fa8b1cb72363806e688e60c4ede7 new file mode 100644 index 0000000000..7d54b4ca2f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cde916cd93c7fa8b1cb72363806e688e60c4ede7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ce304479ee923fc4ddaf9fdad13835fde8566979 b/fuzz/gnutls_psk_server_fuzzer.in/ce304479ee923fc4ddaf9fdad13835fde8566979 new file mode 100644 index 0000000000..2af37c7246 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ce304479ee923fc4ddaf9fdad13835fde8566979 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ce4b1c96e34bdba6609710bd3742e90499467031 b/fuzz/gnutls_psk_server_fuzzer.in/ce4b1c96e34bdba6609710bd3742e90499467031 new file mode 100644 index 0000000000..705630e3a8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ce4b1c96e34bdba6609710bd3742e90499467031 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ce52c3645292a08415f05a5706d3aeb650280487 b/fuzz/gnutls_psk_server_fuzzer.in/ce52c3645292a08415f05a5706d3aeb650280487 new file mode 100644 index 0000000000..242c0b3d07 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ce52c3645292a08415f05a5706d3aeb650280487 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ce7d1ad1a0999b843f90a652e5be18c6314f9744 b/fuzz/gnutls_psk_server_fuzzer.in/ce7d1ad1a0999b843f90a652e5be18c6314f9744 new file mode 100644 index 0000000000..1c53b0834d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ce7d1ad1a0999b843f90a652e5be18c6314f9744 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cecc33de9b8b45a6ffc05a75a8b745f5aa8b5892 b/fuzz/gnutls_psk_server_fuzzer.in/cecc33de9b8b45a6ffc05a75a8b745f5aa8b5892 new file mode 100644 index 0000000000..c380cc5b96 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cecc33de9b8b45a6ffc05a75a8b745f5aa8b5892 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cee1af1456490706a76560bca0ffe4a1dbcc6168 b/fuzz/gnutls_psk_server_fuzzer.in/cee1af1456490706a76560bca0ffe4a1dbcc6168 new file mode 100644 index 0000000000..991fb517e6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cee1af1456490706a76560bca0ffe4a1dbcc6168 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cee95e6bf9010f6236eb1ce140926c33ce6e8219 b/fuzz/gnutls_psk_server_fuzzer.in/cee95e6bf9010f6236eb1ce140926c33ce6e8219 new file mode 100644 index 0000000000..3cebd9dbd1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cee95e6bf9010f6236eb1ce140926c33ce6e8219 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cef5da28caff04388167fe880f01ac39149e9dff b/fuzz/gnutls_psk_server_fuzzer.in/cef5da28caff04388167fe880f01ac39149e9dff new file mode 100644 index 0000000000..240ba67350 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cef5da28caff04388167fe880f01ac39149e9dff differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cefd6014d462e763258639ad3b92a58e22b017e2 b/fuzz/gnutls_psk_server_fuzzer.in/cefd6014d462e763258639ad3b92a58e22b017e2 new file mode 100644 index 0000000000..cd800a72e0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cefd6014d462e763258639ad3b92a58e22b017e2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cf3241dba28939401a924c9ce709b25e5f9e5497 b/fuzz/gnutls_psk_server_fuzzer.in/cf3241dba28939401a924c9ce709b25e5f9e5497 new file mode 100644 index 0000000000..37d5c95867 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cf3241dba28939401a924c9ce709b25e5f9e5497 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cf793e33ccef630a55b8175af8f12c4fa8ab34e7 b/fuzz/gnutls_psk_server_fuzzer.in/cf793e33ccef630a55b8175af8f12c4fa8ab34e7 new file mode 100644 index 0000000000..885434e510 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cf793e33ccef630a55b8175af8f12c4fa8ab34e7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cf83c75cfe651c5cb437e636f70b56feed80cf37 b/fuzz/gnutls_psk_server_fuzzer.in/cf83c75cfe651c5cb437e636f70b56feed80cf37 new file mode 100644 index 0000000000..05d80e2abe Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cf83c75cfe651c5cb437e636f70b56feed80cf37 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cfa545c4812e7de63789354d85084509a457b638 b/fuzz/gnutls_psk_server_fuzzer.in/cfa545c4812e7de63789354d85084509a457b638 new file mode 100644 index 0000000000..ab2e39560a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cfa545c4812e7de63789354d85084509a457b638 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/cfef55ef9e411f088ed38709beedd4f7cf31ef61 b/fuzz/gnutls_psk_server_fuzzer.in/cfef55ef9e411f088ed38709beedd4f7cf31ef61 new file mode 100644 index 0000000000..ce219b177d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/cfef55ef9e411f088ed38709beedd4f7cf31ef61 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d076bc8993d531f4d03005a1b460b564b61d210d b/fuzz/gnutls_psk_server_fuzzer.in/d076bc8993d531f4d03005a1b460b564b61d210d new file mode 100644 index 0000000000..3179b8eeca Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d076bc8993d531f4d03005a1b460b564b61d210d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d1d6e2f5e0c343deb8db55c7aa05a6d25b4586fb b/fuzz/gnutls_psk_server_fuzzer.in/d1d6e2f5e0c343deb8db55c7aa05a6d25b4586fb new file mode 100644 index 0000000000..d672b7e741 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d1d6e2f5e0c343deb8db55c7aa05a6d25b4586fb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d1f7c377c5b4963acf29d2cb6e7fe28629f8ef2d b/fuzz/gnutls_psk_server_fuzzer.in/d1f7c377c5b4963acf29d2cb6e7fe28629f8ef2d new file mode 100644 index 0000000000..82757c9806 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d1f7c377c5b4963acf29d2cb6e7fe28629f8ef2d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d2460eb2e7b39e14025d11143834049fbbdcd837 b/fuzz/gnutls_psk_server_fuzzer.in/d2460eb2e7b39e14025d11143834049fbbdcd837 new file mode 100644 index 0000000000..44e401ef4e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d2460eb2e7b39e14025d11143834049fbbdcd837 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d272385f2a0f7a7ce4686c8539a55902fff926e5 b/fuzz/gnutls_psk_server_fuzzer.in/d272385f2a0f7a7ce4686c8539a55902fff926e5 new file mode 100644 index 0000000000..6633572ef1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d272385f2a0f7a7ce4686c8539a55902fff926e5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d282156f2450d16c28356161257a32ae1f1491dc b/fuzz/gnutls_psk_server_fuzzer.in/d282156f2450d16c28356161257a32ae1f1491dc new file mode 100644 index 0000000000..959fd237cb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d282156f2450d16c28356161257a32ae1f1491dc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d28c00c739c99c9a8c9c47c664244393f26a9fbc b/fuzz/gnutls_psk_server_fuzzer.in/d28c00c739c99c9a8c9c47c664244393f26a9fbc new file mode 100644 index 0000000000..6ffee65ec9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d28c00c739c99c9a8c9c47c664244393f26a9fbc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d2b8cebe7379abc2f5452b54b0834623ceea503e b/fuzz/gnutls_psk_server_fuzzer.in/d2b8cebe7379abc2f5452b54b0834623ceea503e new file mode 100644 index 0000000000..ffc7eb5b6e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d2b8cebe7379abc2f5452b54b0834623ceea503e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d3100b690d835e66eb1ccedaa694f3d1a4686867 b/fuzz/gnutls_psk_server_fuzzer.in/d3100b690d835e66eb1ccedaa694f3d1a4686867 new file mode 100644 index 0000000000..1a85ee3f07 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d3100b690d835e66eb1ccedaa694f3d1a4686867 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d328c8dad6010b3e5cabc072976e1927f6271320 b/fuzz/gnutls_psk_server_fuzzer.in/d328c8dad6010b3e5cabc072976e1927f6271320 new file mode 100644 index 0000000000..d62990320f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d328c8dad6010b3e5cabc072976e1927f6271320 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d3358182630aaf8cc748edb28865f6704690ed62 b/fuzz/gnutls_psk_server_fuzzer.in/d3358182630aaf8cc748edb28865f6704690ed62 new file mode 100644 index 0000000000..d1236c46b6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d3358182630aaf8cc748edb28865f6704690ed62 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d3699390917ebbe403cd83bf8d5b40af986a832b b/fuzz/gnutls_psk_server_fuzzer.in/d3699390917ebbe403cd83bf8d5b40af986a832b new file mode 100644 index 0000000000..0bc9a7719a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d3699390917ebbe403cd83bf8d5b40af986a832b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d43426f0a3e0ce8533df24e8052cc0a2bee731b5 b/fuzz/gnutls_psk_server_fuzzer.in/d43426f0a3e0ce8533df24e8052cc0a2bee731b5 new file mode 100644 index 0000000000..b3010eb45b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d43426f0a3e0ce8533df24e8052cc0a2bee731b5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d445197cbfdcbdedc994378dd1756a1c9db889d9 b/fuzz/gnutls_psk_server_fuzzer.in/d445197cbfdcbdedc994378dd1756a1c9db889d9 new file mode 100644 index 0000000000..2afa1455e8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d445197cbfdcbdedc994378dd1756a1c9db889d9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d472a2c39a0cd5b5a095662daea694772960015b b/fuzz/gnutls_psk_server_fuzzer.in/d472a2c39a0cd5b5a095662daea694772960015b new file mode 100644 index 0000000000..c8f47d7078 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d472a2c39a0cd5b5a095662daea694772960015b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d47e8aefd62918feef42b476ef725612190e66d7 b/fuzz/gnutls_psk_server_fuzzer.in/d47e8aefd62918feef42b476ef725612190e66d7 new file mode 100644 index 0000000000..644086a100 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d47e8aefd62918feef42b476ef725612190e66d7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d4cc1bf54470ebfd03e560de56b41f117cceeac0 b/fuzz/gnutls_psk_server_fuzzer.in/d4cc1bf54470ebfd03e560de56b41f117cceeac0 new file mode 100644 index 0000000000..9b36727c08 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d4cc1bf54470ebfd03e560de56b41f117cceeac0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d4d6db1d6827a6455ad485f8339c41381de0abe2 b/fuzz/gnutls_psk_server_fuzzer.in/d4d6db1d6827a6455ad485f8339c41381de0abe2 new file mode 100644 index 0000000000..ed78eb7e0c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d4d6db1d6827a6455ad485f8339c41381de0abe2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d4e08416fd5b5e6ae29d40855a214af09d50b176 b/fuzz/gnutls_psk_server_fuzzer.in/d4e08416fd5b5e6ae29d40855a214af09d50b176 new file mode 100644 index 0000000000..f98fb14502 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d4e08416fd5b5e6ae29d40855a214af09d50b176 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d5227aad558e5e672a43cf989d4b76ef650f2452 b/fuzz/gnutls_psk_server_fuzzer.in/d5227aad558e5e672a43cf989d4b76ef650f2452 new file mode 100644 index 0000000000..81b8b6de55 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d5227aad558e5e672a43cf989d4b76ef650f2452 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d53c6ce7bc14ee51379d20f51d093dbf248b11a9 b/fuzz/gnutls_psk_server_fuzzer.in/d53c6ce7bc14ee51379d20f51d093dbf248b11a9 new file mode 100644 index 0000000000..6d22b13075 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d53c6ce7bc14ee51379d20f51d093dbf248b11a9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d570a1e9e04ab871a850f5c609525eeaf6ed0f8b b/fuzz/gnutls_psk_server_fuzzer.in/d570a1e9e04ab871a850f5c609525eeaf6ed0f8b new file mode 100644 index 0000000000..6fd7abf8f3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d570a1e9e04ab871a850f5c609525eeaf6ed0f8b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d6321dff04b41c37b5ddfeceb675b291c6c6283a b/fuzz/gnutls_psk_server_fuzzer.in/d6321dff04b41c37b5ddfeceb675b291c6c6283a new file mode 100644 index 0000000000..e4a4f6ac65 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d6321dff04b41c37b5ddfeceb675b291c6c6283a differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d63d6ae290138a501e4f45d53047e693a155c313 b/fuzz/gnutls_psk_server_fuzzer.in/d63d6ae290138a501e4f45d53047e693a155c313 new file mode 100644 index 0000000000..b87fbb3f6f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d63d6ae290138a501e4f45d53047e693a155c313 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d6c5ddbe023ffa9181f9b0016e56f1e2dc8b3ea7 b/fuzz/gnutls_psk_server_fuzzer.in/d6c5ddbe023ffa9181f9b0016e56f1e2dc8b3ea7 new file mode 100644 index 0000000000..6603ce509e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d6c5ddbe023ffa9181f9b0016e56f1e2dc8b3ea7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d74e6c70d2cc4dc7f0fc63f7722782402ba32b7f b/fuzz/gnutls_psk_server_fuzzer.in/d74e6c70d2cc4dc7f0fc63f7722782402ba32b7f new file mode 100644 index 0000000000..3a003a5fbb Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d74e6c70d2cc4dc7f0fc63f7722782402ba32b7f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d7907e794ebab9f7cadcb942506512096db0d48d b/fuzz/gnutls_psk_server_fuzzer.in/d7907e794ebab9f7cadcb942506512096db0d48d new file mode 100644 index 0000000000..17860b5697 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d7907e794ebab9f7cadcb942506512096db0d48d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d852bfbd0439fdfeefb72553bb75e289c751393f b/fuzz/gnutls_psk_server_fuzzer.in/d852bfbd0439fdfeefb72553bb75e289c751393f new file mode 100644 index 0000000000..07ba14d8ae Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d852bfbd0439fdfeefb72553bb75e289c751393f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d9247f6e0d7e8452f21c17a080bfdc8f676b1e31 b/fuzz/gnutls_psk_server_fuzzer.in/d9247f6e0d7e8452f21c17a080bfdc8f676b1e31 new file mode 100644 index 0000000000..73fc87857f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d9247f6e0d7e8452f21c17a080bfdc8f676b1e31 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d9969f0e1509dcc7f44925d29cff3e4c4eb14524 b/fuzz/gnutls_psk_server_fuzzer.in/d9969f0e1509dcc7f44925d29cff3e4c4eb14524 new file mode 100644 index 0000000000..fdb03cdd5b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d9969f0e1509dcc7f44925d29cff3e4c4eb14524 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/d9b8fb668b1f4bce9de3a5eea391c706b5717f68 b/fuzz/gnutls_psk_server_fuzzer.in/d9b8fb668b1f4bce9de3a5eea391c706b5717f68 new file mode 100644 index 0000000000..a3c962db5d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/d9b8fb668b1f4bce9de3a5eea391c706b5717f68 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/da1a475be2b8b6539a87fce3497d332e9e7d62bc b/fuzz/gnutls_psk_server_fuzzer.in/da1a475be2b8b6539a87fce3497d332e9e7d62bc new file mode 100644 index 0000000000..e6eadda22f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/da1a475be2b8b6539a87fce3497d332e9e7d62bc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/da8ebab5ab9f6a5dd9a1cd4bbe2834472f504a48 b/fuzz/gnutls_psk_server_fuzzer.in/da8ebab5ab9f6a5dd9a1cd4bbe2834472f504a48 new file mode 100644 index 0000000000..53addce40e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/da8ebab5ab9f6a5dd9a1cd4bbe2834472f504a48 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dbdaed15857abbf07c0ecae50070f59f17618d80 b/fuzz/gnutls_psk_server_fuzzer.in/dbdaed15857abbf07c0ecae50070f59f17618d80 new file mode 100644 index 0000000000..f017e498c1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dbdaed15857abbf07c0ecae50070f59f17618d80 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dbe0e1a655e23f6ae32df93140f17dfc1b1e08dc b/fuzz/gnutls_psk_server_fuzzer.in/dbe0e1a655e23f6ae32df93140f17dfc1b1e08dc new file mode 100644 index 0000000000..9cc00198a4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dbe0e1a655e23f6ae32df93140f17dfc1b1e08dc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dbe9648eb0b5b0dc935c67dead1a05882ad5f423 b/fuzz/gnutls_psk_server_fuzzer.in/dbe9648eb0b5b0dc935c67dead1a05882ad5f423 new file mode 100644 index 0000000000..255b517aae Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dbe9648eb0b5b0dc935c67dead1a05882ad5f423 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dc1906e1c4d396a5c7dc7fa94024ea0c92d109f1 b/fuzz/gnutls_psk_server_fuzzer.in/dc1906e1c4d396a5c7dc7fa94024ea0c92d109f1 new file mode 100644 index 0000000000..c7209bc61c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dc1906e1c4d396a5c7dc7fa94024ea0c92d109f1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dc783446c9fd5eadc5edcdef318bc00dc4629b59 b/fuzz/gnutls_psk_server_fuzzer.in/dc783446c9fd5eadc5edcdef318bc00dc4629b59 new file mode 100644 index 0000000000..e32ea68c5b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dc783446c9fd5eadc5edcdef318bc00dc4629b59 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dce27dd2984a668b02ce9bea01aff53f0daf407d b/fuzz/gnutls_psk_server_fuzzer.in/dce27dd2984a668b02ce9bea01aff53f0daf407d new file mode 100644 index 0000000000..f4bcb0918e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dce27dd2984a668b02ce9bea01aff53f0daf407d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dd07d41e118aa0752c4f4f065a9a2802efb04ae9 b/fuzz/gnutls_psk_server_fuzzer.in/dd07d41e118aa0752c4f4f065a9a2802efb04ae9 new file mode 100644 index 0000000000..60207888f6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dd07d41e118aa0752c4f4f065a9a2802efb04ae9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dd4f60208b2b4568c2c4dc455d99dc983df58f1d b/fuzz/gnutls_psk_server_fuzzer.in/dd4f60208b2b4568c2c4dc455d99dc983df58f1d new file mode 100644 index 0000000000..b19bbfc7ac Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dd4f60208b2b4568c2c4dc455d99dc983df58f1d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ddd7fc8903e83959eda568c55525b8ac8ffaac7f b/fuzz/gnutls_psk_server_fuzzer.in/ddd7fc8903e83959eda568c55525b8ac8ffaac7f new file mode 100644 index 0000000000..ee9ef2b45b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ddd7fc8903e83959eda568c55525b8ac8ffaac7f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dddfc6eb10c42c5d1c90a8be1da3a60e66ad3855 b/fuzz/gnutls_psk_server_fuzzer.in/dddfc6eb10c42c5d1c90a8be1da3a60e66ad3855 new file mode 100644 index 0000000000..1217a7756f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dddfc6eb10c42c5d1c90a8be1da3a60e66ad3855 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ddfdec492524b74efa6a7385e3d3ddc7b2afe666 b/fuzz/gnutls_psk_server_fuzzer.in/ddfdec492524b74efa6a7385e3d3ddc7b2afe666 new file mode 100644 index 0000000000..7f48be5c53 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ddfdec492524b74efa6a7385e3d3ddc7b2afe666 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/de44ed9b6f34eec3a0c9ed96c1421d1049b386cc b/fuzz/gnutls_psk_server_fuzzer.in/de44ed9b6f34eec3a0c9ed96c1421d1049b386cc new file mode 100644 index 0000000000..5687030eef Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/de44ed9b6f34eec3a0c9ed96c1421d1049b386cc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/de8ff36acfbebdd60d81876434987703ac3585e6 b/fuzz/gnutls_psk_server_fuzzer.in/de8ff36acfbebdd60d81876434987703ac3585e6 new file mode 100644 index 0000000000..32a9451271 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/de8ff36acfbebdd60d81876434987703ac3585e6 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/deef5206cc748ce4f021e4612cd8bcc39c00c7e8 b/fuzz/gnutls_psk_server_fuzzer.in/deef5206cc748ce4f021e4612cd8bcc39c00c7e8 new file mode 100644 index 0000000000..f51f90288e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/deef5206cc748ce4f021e4612cd8bcc39c00c7e8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dfb0a5ccdc797f071b57f6c3320844fc0b51ef45 b/fuzz/gnutls_psk_server_fuzzer.in/dfb0a5ccdc797f071b57f6c3320844fc0b51ef45 new file mode 100644 index 0000000000..0d4f2f11b2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dfb0a5ccdc797f071b57f6c3320844fc0b51ef45 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dfc71d786bcc962a525680ae6b6c1384a44f8eeb b/fuzz/gnutls_psk_server_fuzzer.in/dfc71d786bcc962a525680ae6b6c1384a44f8eeb new file mode 100644 index 0000000000..963d671d2e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dfc71d786bcc962a525680ae6b6c1384a44f8eeb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/dfeba356d0b68cf1f9d1662c3f168ab06154f402 b/fuzz/gnutls_psk_server_fuzzer.in/dfeba356d0b68cf1f9d1662c3f168ab06154f402 new file mode 100644 index 0000000000..6b36bb1cb1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/dfeba356d0b68cf1f9d1662c3f168ab06154f402 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e04944532953ddb079d84fcdbfe720fd53f6e8e2 b/fuzz/gnutls_psk_server_fuzzer.in/e04944532953ddb079d84fcdbfe720fd53f6e8e2 new file mode 100644 index 0000000000..4526989d3c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e04944532953ddb079d84fcdbfe720fd53f6e8e2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e06560be3e56af4433d5891bf808a4edc9cb929d b/fuzz/gnutls_psk_server_fuzzer.in/e06560be3e56af4433d5891bf808a4edc9cb929d new file mode 100644 index 0000000000..a95b5a129b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e06560be3e56af4433d5891bf808a4edc9cb929d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e0bae415e8cf9d9983d5c7aad8effd93f5143f71 b/fuzz/gnutls_psk_server_fuzzer.in/e0bae415e8cf9d9983d5c7aad8effd93f5143f71 new file mode 100644 index 0000000000..a249ed978b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e0bae415e8cf9d9983d5c7aad8effd93f5143f71 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e147f73b99e57efe6b8d063e8cf1e9ab8db0ee2e b/fuzz/gnutls_psk_server_fuzzer.in/e147f73b99e57efe6b8d063e8cf1e9ab8db0ee2e new file mode 100644 index 0000000000..4feadade8a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e147f73b99e57efe6b8d063e8cf1e9ab8db0ee2e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e1a8a2fa63456b6c0b25dadd7557cabd7f5ffab4 b/fuzz/gnutls_psk_server_fuzzer.in/e1a8a2fa63456b6c0b25dadd7557cabd7f5ffab4 new file mode 100644 index 0000000000..6dfe0f305a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e1a8a2fa63456b6c0b25dadd7557cabd7f5ffab4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e2200fe1a916b15adf14872cdb1b897c726bfcac b/fuzz/gnutls_psk_server_fuzzer.in/e2200fe1a916b15adf14872cdb1b897c726bfcac new file mode 100644 index 0000000000..2dd7c03703 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e2200fe1a916b15adf14872cdb1b897c726bfcac differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e24bdb4073fc49adb135653dbaf0a971b040cd4d b/fuzz/gnutls_psk_server_fuzzer.in/e24bdb4073fc49adb135653dbaf0a971b040cd4d new file mode 100644 index 0000000000..ed8c2d1741 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e24bdb4073fc49adb135653dbaf0a971b040cd4d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e2adfce56f1a6be43360778403e02a5bffbc8cfc b/fuzz/gnutls_psk_server_fuzzer.in/e2adfce56f1a6be43360778403e02a5bffbc8cfc new file mode 100644 index 0000000000..422781c6f0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e2adfce56f1a6be43360778403e02a5bffbc8cfc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e2d2952c7230b2c8429c723b8c972059b9e96ac8 b/fuzz/gnutls_psk_server_fuzzer.in/e2d2952c7230b2c8429c723b8c972059b9e96ac8 new file mode 100644 index 0000000000..3e2dea86c1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e2d2952c7230b2c8429c723b8c972059b9e96ac8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e2f7440798aafdc375e9c852fb50f87e81c69423 b/fuzz/gnutls_psk_server_fuzzer.in/e2f7440798aafdc375e9c852fb50f87e81c69423 new file mode 100644 index 0000000000..03259c04cf Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e2f7440798aafdc375e9c852fb50f87e81c69423 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e3ea8f1ba8dcfc5aa2334c921dc13a89df25562e b/fuzz/gnutls_psk_server_fuzzer.in/e3ea8f1ba8dcfc5aa2334c921dc13a89df25562e new file mode 100644 index 0000000000..078bce56b4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e3ea8f1ba8dcfc5aa2334c921dc13a89df25562e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e3fffa77099f462c699a678692034fa1459158ec b/fuzz/gnutls_psk_server_fuzzer.in/e3fffa77099f462c699a678692034fa1459158ec new file mode 100644 index 0000000000..e94150e567 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e3fffa77099f462c699a678692034fa1459158ec differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e523efad9b7ab8ff9d2299ab628b403d3b09fd22 b/fuzz/gnutls_psk_server_fuzzer.in/e523efad9b7ab8ff9d2299ab628b403d3b09fd22 new file mode 100644 index 0000000000..1b4d7de9a0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e523efad9b7ab8ff9d2299ab628b403d3b09fd22 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e52a0b477923b0b78ec21f020274201876202a7b b/fuzz/gnutls_psk_server_fuzzer.in/e52a0b477923b0b78ec21f020274201876202a7b new file mode 100644 index 0000000000..03171a52e4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e52a0b477923b0b78ec21f020274201876202a7b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e5a9867d30d7f7b54dcf2a180e15816c561e767e b/fuzz/gnutls_psk_server_fuzzer.in/e5a9867d30d7f7b54dcf2a180e15816c561e767e new file mode 100644 index 0000000000..efe23967f9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e5a9867d30d7f7b54dcf2a180e15816c561e767e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e5c5c15f9520ad59e8091138950fb7e3670d023c b/fuzz/gnutls_psk_server_fuzzer.in/e5c5c15f9520ad59e8091138950fb7e3670d023c new file mode 100644 index 0000000000..0d0896a0f4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e5c5c15f9520ad59e8091138950fb7e3670d023c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e630510c776ad47c212882991655c1700f1a7089 b/fuzz/gnutls_psk_server_fuzzer.in/e630510c776ad47c212882991655c1700f1a7089 new file mode 100644 index 0000000000..8d3d72e9e9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e630510c776ad47c212882991655c1700f1a7089 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e830b56c6df46547d47f8ae252de8dd7ef321fd7 b/fuzz/gnutls_psk_server_fuzzer.in/e830b56c6df46547d47f8ae252de8dd7ef321fd7 new file mode 100644 index 0000000000..c06b818b0a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e830b56c6df46547d47f8ae252de8dd7ef321fd7 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e84b3a996d8c501709f15d62911765a891142b0e b/fuzz/gnutls_psk_server_fuzzer.in/e84b3a996d8c501709f15d62911765a891142b0e new file mode 100644 index 0000000000..d1a3f7f2a8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e84b3a996d8c501709f15d62911765a891142b0e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e8786e15d25246c272809490624caff82acc2591 b/fuzz/gnutls_psk_server_fuzzer.in/e8786e15d25246c272809490624caff82acc2591 new file mode 100644 index 0000000000..9a4c1d39f7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e8786e15d25246c272809490624caff82acc2591 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e87adb654450fcd5a2008d03fd3f402eb14734ef b/fuzz/gnutls_psk_server_fuzzer.in/e87adb654450fcd5a2008d03fd3f402eb14734ef new file mode 100644 index 0000000000..bda790e0b5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e87adb654450fcd5a2008d03fd3f402eb14734ef differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e9597d6bf1e80fee64f4b64f90e0601b07f8f1a2 b/fuzz/gnutls_psk_server_fuzzer.in/e9597d6bf1e80fee64f4b64f90e0601b07f8f1a2 new file mode 100644 index 0000000000..0715a8df8b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e9597d6bf1e80fee64f4b64f90e0601b07f8f1a2 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e971df0807e5f1d8363013e92eba804db0472e75 b/fuzz/gnutls_psk_server_fuzzer.in/e971df0807e5f1d8363013e92eba804db0472e75 new file mode 100644 index 0000000000..36919af4cf Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e971df0807e5f1d8363013e92eba804db0472e75 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e979600433449646b00ab1fdcd4554c20be5c47f b/fuzz/gnutls_psk_server_fuzzer.in/e979600433449646b00ab1fdcd4554c20be5c47f new file mode 100644 index 0000000000..e97670e14c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e979600433449646b00ab1fdcd4554c20be5c47f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e987ca9e880234d9383e27c79ff47899d10f8209 b/fuzz/gnutls_psk_server_fuzzer.in/e987ca9e880234d9383e27c79ff47899d10f8209 new file mode 100644 index 0000000000..84b3f2cad6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e987ca9e880234d9383e27c79ff47899d10f8209 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/e99698c4bc5a55730997c4e67bd3f63c87c88b45 b/fuzz/gnutls_psk_server_fuzzer.in/e99698c4bc5a55730997c4e67bd3f63c87c88b45 new file mode 100644 index 0000000000..a14390efcd Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/e99698c4bc5a55730997c4e67bd3f63c87c88b45 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ea2b72679920f1628dc72064c0a1e38edec925dc b/fuzz/gnutls_psk_server_fuzzer.in/ea2b72679920f1628dc72064c0a1e38edec925dc new file mode 100644 index 0000000000..db16a77479 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ea2b72679920f1628dc72064c0a1e38edec925dc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ea30985398533f7bd13b5052cd9a21b2516a3a9e b/fuzz/gnutls_psk_server_fuzzer.in/ea30985398533f7bd13b5052cd9a21b2516a3a9e new file mode 100644 index 0000000000..fe6abe4a38 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ea30985398533f7bd13b5052cd9a21b2516a3a9e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ea42a05c7ab5f2e47bc232fa54382f3778d83a87 b/fuzz/gnutls_psk_server_fuzzer.in/ea42a05c7ab5f2e47bc232fa54382f3778d83a87 new file mode 100644 index 0000000000..df55f124fc Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ea42a05c7ab5f2e47bc232fa54382f3778d83a87 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ead5b6feef7175e77202a1bb72c284d2082bd0ce b/fuzz/gnutls_psk_server_fuzzer.in/ead5b6feef7175e77202a1bb72c284d2082bd0ce new file mode 100644 index 0000000000..54b7433be1 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ead5b6feef7175e77202a1bb72c284d2082bd0ce differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ead9d2b7d0ca7006140b5facf67774365c6eacb1 b/fuzz/gnutls_psk_server_fuzzer.in/ead9d2b7d0ca7006140b5facf67774365c6eacb1 new file mode 100644 index 0000000000..dfb15097b8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ead9d2b7d0ca7006140b5facf67774365c6eacb1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/eb0343722a0853d356a9641aa4ae912a20acea6d b/fuzz/gnutls_psk_server_fuzzer.in/eb0343722a0853d356a9641aa4ae912a20acea6d new file mode 100644 index 0000000000..75004b3bf8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/eb0343722a0853d356a9641aa4ae912a20acea6d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ebae4779b03816d7ad279e970c5f9fbe0e212528 b/fuzz/gnutls_psk_server_fuzzer.in/ebae4779b03816d7ad279e970c5f9fbe0e212528 new file mode 100644 index 0000000000..93a3152304 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ebae4779b03816d7ad279e970c5f9fbe0e212528 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ebf7d174754ab3ee5660ba007c371a8f48b57b19 b/fuzz/gnutls_psk_server_fuzzer.in/ebf7d174754ab3ee5660ba007c371a8f48b57b19 new file mode 100644 index 0000000000..394c9248c4 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ebf7d174754ab3ee5660ba007c371a8f48b57b19 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ec3db3780080df112d7d5ccd17edb0be5a77099f b/fuzz/gnutls_psk_server_fuzzer.in/ec3db3780080df112d7d5ccd17edb0be5a77099f new file mode 100644 index 0000000000..942cfbde5b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ec3db3780080df112d7d5ccd17edb0be5a77099f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ed3b53dd58cfcb54f3d06d22badedda1988d2a8d b/fuzz/gnutls_psk_server_fuzzer.in/ed3b53dd58cfcb54f3d06d22badedda1988d2a8d new file mode 100644 index 0000000000..389a095016 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ed3b53dd58cfcb54f3d06d22badedda1988d2a8d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ed965c3b66f5efd82bfd6622b7ea5103068bf42e b/fuzz/gnutls_psk_server_fuzzer.in/ed965c3b66f5efd82bfd6622b7ea5103068bf42e new file mode 100644 index 0000000000..db3955117c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ed965c3b66f5efd82bfd6622b7ea5103068bf42e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ede47ec1703e9a4b7d493f2d8d0fd02b385b7b20 b/fuzz/gnutls_psk_server_fuzzer.in/ede47ec1703e9a4b7d493f2d8d0fd02b385b7b20 new file mode 100644 index 0000000000..fdf6d83a36 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ede47ec1703e9a4b7d493f2d8d0fd02b385b7b20 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ee1788300b644e3ce49e50f7b63e4263fe9e06f9 b/fuzz/gnutls_psk_server_fuzzer.in/ee1788300b644e3ce49e50f7b63e4263fe9e06f9 new file mode 100644 index 0000000000..a5a2980b00 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ee1788300b644e3ce49e50f7b63e4263fe9e06f9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ee1d433bf43b2c8a0f5f607158fcd294377e107e b/fuzz/gnutls_psk_server_fuzzer.in/ee1d433bf43b2c8a0f5f607158fcd294377e107e new file mode 100644 index 0000000000..a20331620f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ee1d433bf43b2c8a0f5f607158fcd294377e107e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ee6397c52a5359be218f18522ea0fa3cb3b387f0 b/fuzz/gnutls_psk_server_fuzzer.in/ee6397c52a5359be218f18522ea0fa3cb3b387f0 new file mode 100644 index 0000000000..9ea30c1bd0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ee6397c52a5359be218f18522ea0fa3cb3b387f0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ef8306250d9bd57da52db6f5b26cf72f8c2ca290 b/fuzz/gnutls_psk_server_fuzzer.in/ef8306250d9bd57da52db6f5b26cf72f8c2ca290 new file mode 100644 index 0000000000..07c9b5b161 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ef8306250d9bd57da52db6f5b26cf72f8c2ca290 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/efb24fc5e86feefbc86b9987a4b08c4797d026d5 b/fuzz/gnutls_psk_server_fuzzer.in/efb24fc5e86feefbc86b9987a4b08c4797d026d5 new file mode 100644 index 0000000000..efe470064b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/efb24fc5e86feefbc86b9987a4b08c4797d026d5 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/efe4818e850d6fffdea671185d8ba820cbd79e20 b/fuzz/gnutls_psk_server_fuzzer.in/efe4818e850d6fffdea671185d8ba820cbd79e20 new file mode 100644 index 0000000000..f974bb679a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/efe4818e850d6fffdea671185d8ba820cbd79e20 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f06581b3fe222c8b6b70892e4850bbd5b1d0e002 b/fuzz/gnutls_psk_server_fuzzer.in/f06581b3fe222c8b6b70892e4850bbd5b1d0e002 new file mode 100644 index 0000000000..2b81e78d0e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f06581b3fe222c8b6b70892e4850bbd5b1d0e002 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f09a63de040a3894db728a39bca49b784b100b5f b/fuzz/gnutls_psk_server_fuzzer.in/f09a63de040a3894db728a39bca49b784b100b5f new file mode 100644 index 0000000000..3342d26668 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f09a63de040a3894db728a39bca49b784b100b5f differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f14d8fc0eab1c4ddff730ad04dc6bbc98f40fbb4 b/fuzz/gnutls_psk_server_fuzzer.in/f14d8fc0eab1c4ddff730ad04dc6bbc98f40fbb4 new file mode 100644 index 0000000000..cf53e30d23 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f14d8fc0eab1c4ddff730ad04dc6bbc98f40fbb4 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f1ab6f7d7b01c90fe3c891a702669684a1f82546 b/fuzz/gnutls_psk_server_fuzzer.in/f1ab6f7d7b01c90fe3c891a702669684a1f82546 new file mode 100644 index 0000000000..ae1f3ecc32 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f1ab6f7d7b01c90fe3c891a702669684a1f82546 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f2464a5b36cb60f0ba5a5fa5e523acd682d54b9d b/fuzz/gnutls_psk_server_fuzzer.in/f2464a5b36cb60f0ba5a5fa5e523acd682d54b9d new file mode 100644 index 0000000000..59a3c65c15 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f2464a5b36cb60f0ba5a5fa5e523acd682d54b9d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f2b365ea6068d71453bc571493eca8cf467e60da b/fuzz/gnutls_psk_server_fuzzer.in/f2b365ea6068d71453bc571493eca8cf467e60da new file mode 100644 index 0000000000..480ff2f5c0 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f2b365ea6068d71453bc571493eca8cf467e60da differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f34053ef177b6755a2b2355bc89fcf6739d5be4b b/fuzz/gnutls_psk_server_fuzzer.in/f34053ef177b6755a2b2355bc89fcf6739d5be4b new file mode 100644 index 0000000000..b14b70a33d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f34053ef177b6755a2b2355bc89fcf6739d5be4b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f3cad6314bacbfc120d441226371f9788b939bef b/fuzz/gnutls_psk_server_fuzzer.in/f3cad6314bacbfc120d441226371f9788b939bef new file mode 100644 index 0000000000..d79462e2b5 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f3cad6314bacbfc120d441226371f9788b939bef differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f48fae53da669453843cfa8810f773860969c2ed b/fuzz/gnutls_psk_server_fuzzer.in/f48fae53da669453843cfa8810f773860969c2ed new file mode 100644 index 0000000000..defd84cb55 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f48fae53da669453843cfa8810f773860969c2ed differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f5519060d4c369feb75c975317138f8dc595346e b/fuzz/gnutls_psk_server_fuzzer.in/f5519060d4c369feb75c975317138f8dc595346e new file mode 100644 index 0000000000..ab8301ae7f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f5519060d4c369feb75c975317138f8dc595346e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f555a4588286ad593621b98bded129902df07a74 b/fuzz/gnutls_psk_server_fuzzer.in/f555a4588286ad593621b98bded129902df07a74 new file mode 100644 index 0000000000..f32cc7c32f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f555a4588286ad593621b98bded129902df07a74 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f5d899fad4b9cea1c8d7c17a09906d9a438dbc34 b/fuzz/gnutls_psk_server_fuzzer.in/f5d899fad4b9cea1c8d7c17a09906d9a438dbc34 new file mode 100644 index 0000000000..f0544645fd Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f5d899fad4b9cea1c8d7c17a09906d9a438dbc34 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f5ea0b03cfdf5393b1df205fb8ce4dac05c5bc79 b/fuzz/gnutls_psk_server_fuzzer.in/f5ea0b03cfdf5393b1df205fb8ce4dac05c5bc79 new file mode 100644 index 0000000000..5cf8df7596 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f5ea0b03cfdf5393b1df205fb8ce4dac05c5bc79 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f6a884d41a63f57126893bc6f247f99ac08d0351 b/fuzz/gnutls_psk_server_fuzzer.in/f6a884d41a63f57126893bc6f247f99ac08d0351 new file mode 100644 index 0000000000..d1994bd394 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f6a884d41a63f57126893bc6f247f99ac08d0351 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f6e3075111c159f791e07975ece5997902ec23d0 b/fuzz/gnutls_psk_server_fuzzer.in/f6e3075111c159f791e07975ece5997902ec23d0 new file mode 100644 index 0000000000..faccf33a81 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f6e3075111c159f791e07975ece5997902ec23d0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f6efd42b23d532b3e6c2c9559b575f30c7e9eade b/fuzz/gnutls_psk_server_fuzzer.in/f6efd42b23d532b3e6c2c9559b575f30c7e9eade new file mode 100644 index 0000000000..1859138e11 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f6efd42b23d532b3e6c2c9559b575f30c7e9eade differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f70f5285e477f6b1bc9e9331d91c432018e6de92 b/fuzz/gnutls_psk_server_fuzzer.in/f70f5285e477f6b1bc9e9331d91c432018e6de92 new file mode 100644 index 0000000000..2834051a15 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f70f5285e477f6b1bc9e9331d91c432018e6de92 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f77a1bc0a277486a52c9ee7ee8c4f3fa94021f15 b/fuzz/gnutls_psk_server_fuzzer.in/f77a1bc0a277486a52c9ee7ee8c4f3fa94021f15 new file mode 100644 index 0000000000..ad47b5326f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f77a1bc0a277486a52c9ee7ee8c4f3fa94021f15 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f794183381c7d45ad2eeb34e2c948c151385e2e9 b/fuzz/gnutls_psk_server_fuzzer.in/f794183381c7d45ad2eeb34e2c948c151385e2e9 new file mode 100644 index 0000000000..de030da540 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f794183381c7d45ad2eeb34e2c948c151385e2e9 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f7e4b6bae3169ff02b8b486691d2faf09ba62e97 b/fuzz/gnutls_psk_server_fuzzer.in/f7e4b6bae3169ff02b8b486691d2faf09ba62e97 new file mode 100644 index 0000000000..dc030c2c4a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f7e4b6bae3169ff02b8b486691d2faf09ba62e97 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f81024bc097aa32f30235318c8931775b8c57ccc b/fuzz/gnutls_psk_server_fuzzer.in/f81024bc097aa32f30235318c8931775b8c57ccc new file mode 100644 index 0000000000..711d640f56 --- /dev/null +++ b/fuzz/gnutls_psk_server_fuzzer.in/f81024bc097aa32f30235318c8931775b8c57ccc @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f81d5e699c288cbb07987cb8ed6cd2610cc8bdd1 b/fuzz/gnutls_psk_server_fuzzer.in/f81d5e699c288cbb07987cb8ed6cd2610cc8bdd1 new file mode 100644 index 0000000000..34bd74739e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f81d5e699c288cbb07987cb8ed6cd2610cc8bdd1 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f8b7e129d3c0af3b9512b8db67642f49798fef70 b/fuzz/gnutls_psk_server_fuzzer.in/f8b7e129d3c0af3b9512b8db67642f49798fef70 new file mode 100644 index 0000000000..a8a829b4d8 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f8b7e129d3c0af3b9512b8db67642f49798fef70 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f936afa7f8b020b2bb5f42881c65bbdcea114876 b/fuzz/gnutls_psk_server_fuzzer.in/f936afa7f8b020b2bb5f42881c65bbdcea114876 new file mode 100644 index 0000000000..339f50d533 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f936afa7f8b020b2bb5f42881c65bbdcea114876 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f93fdf23134b5aeb157e52e5fc0401bec2bd3fbc b/fuzz/gnutls_psk_server_fuzzer.in/f93fdf23134b5aeb157e52e5fc0401bec2bd3fbc new file mode 100644 index 0000000000..c0fe45352a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f93fdf23134b5aeb157e52e5fc0401bec2bd3fbc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/f9e42a5cbb3eb00287e4a097203da5292de54afb b/fuzz/gnutls_psk_server_fuzzer.in/f9e42a5cbb3eb00287e4a097203da5292de54afb new file mode 100644 index 0000000000..080a78e2d9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/f9e42a5cbb3eb00287e4a097203da5292de54afb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fa1eda45b9fbc5dff41287f2f6e0671823c310cc b/fuzz/gnutls_psk_server_fuzzer.in/fa1eda45b9fbc5dff41287f2f6e0671823c310cc new file mode 100644 index 0000000000..0cf1f58864 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fa1eda45b9fbc5dff41287f2f6e0671823c310cc differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fa5daac47f0ec59465493ef2d629b8a50a9d0ef8 b/fuzz/gnutls_psk_server_fuzzer.in/fa5daac47f0ec59465493ef2d629b8a50a9d0ef8 new file mode 100644 index 0000000000..b1f5238e8f Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fa5daac47f0ec59465493ef2d629b8a50a9d0ef8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fb6806dcdbaa828f3d5d5591f7f34d13834fa784 b/fuzz/gnutls_psk_server_fuzzer.in/fb6806dcdbaa828f3d5d5591f7f34d13834fa784 new file mode 100644 index 0000000000..8daa810948 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fb6806dcdbaa828f3d5d5591f7f34d13834fa784 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fb92eb35a26eebf143ccf4abc872ec9dd76b232e b/fuzz/gnutls_psk_server_fuzzer.in/fb92eb35a26eebf143ccf4abc872ec9dd76b232e new file mode 100644 index 0000000000..56b054a868 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fb92eb35a26eebf143ccf4abc872ec9dd76b232e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fb95a4a1808e2123a389755c34aa8133a52b5a2d b/fuzz/gnutls_psk_server_fuzzer.in/fb95a4a1808e2123a389755c34aa8133a52b5a2d new file mode 100644 index 0000000000..bde2f590b6 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fb95a4a1808e2123a389755c34aa8133a52b5a2d differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fbb5502788607cb86d3fb694fac564fc50d74491 b/fuzz/gnutls_psk_server_fuzzer.in/fbb5502788607cb86d3fb694fac564fc50d74491 new file mode 100644 index 0000000000..8b5421daae Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fbb5502788607cb86d3fb694fac564fc50d74491 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fbe6e5467db0e4ca19578b7f6efd1878fdf0e4c0 b/fuzz/gnutls_psk_server_fuzzer.in/fbe6e5467db0e4ca19578b7f6efd1878fdf0e4c0 new file mode 100644 index 0000000000..d15d5ebc5a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fbe6e5467db0e4ca19578b7f6efd1878fdf0e4c0 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fc0751811916228c5ffff85eaf6c31e5f033b671 b/fuzz/gnutls_psk_server_fuzzer.in/fc0751811916228c5ffff85eaf6c31e5f033b671 new file mode 100644 index 0000000000..435cfe150c Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fc0751811916228c5ffff85eaf6c31e5f033b671 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fc7c0b45173c2a10d5e04eba54629a0d3e6ce2ca b/fuzz/gnutls_psk_server_fuzzer.in/fc7c0b45173c2a10d5e04eba54629a0d3e6ce2ca new file mode 100644 index 0000000000..1882119d39 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fc7c0b45173c2a10d5e04eba54629a0d3e6ce2ca differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fca8587fe299fae9f8aaa645887b6a92427415a8 b/fuzz/gnutls_psk_server_fuzzer.in/fca8587fe299fae9f8aaa645887b6a92427415a8 new file mode 100644 index 0000000000..0d509536a2 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fca8587fe299fae9f8aaa645887b6a92427415a8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fcbde523337a0e68573d2963b59ec6500219d68e b/fuzz/gnutls_psk_server_fuzzer.in/fcbde523337a0e68573d2963b59ec6500219d68e new file mode 100644 index 0000000000..731d60ae0a Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fcbde523337a0e68573d2963b59ec6500219d68e differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fcee2012a29610d93d02909b23129edde05abb31 b/fuzz/gnutls_psk_server_fuzzer.in/fcee2012a29610d93d02909b23129edde05abb31 new file mode 100644 index 0000000000..fd4b2508f3 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fcee2012a29610d93d02909b23129edde05abb31 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fcf46f6b290ee939f79d600048ee7496d1ca5704 b/fuzz/gnutls_psk_server_fuzzer.in/fcf46f6b290ee939f79d600048ee7496d1ca5704 new file mode 100644 index 0000000000..49a169b626 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fcf46f6b290ee939f79d600048ee7496d1ca5704 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fd18ee7f1ca0436095d723df6d6d6b90a478c889 b/fuzz/gnutls_psk_server_fuzzer.in/fd18ee7f1ca0436095d723df6d6d6b90a478c889 new file mode 100644 index 0000000000..7b45cffd22 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fd18ee7f1ca0436095d723df6d6d6b90a478c889 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fd34dc20b58dea9ab80391a3ad3fc16b7f9c7f44 b/fuzz/gnutls_psk_server_fuzzer.in/fd34dc20b58dea9ab80391a3ad3fc16b7f9c7f44 new file mode 100644 index 0000000000..17cdd0e381 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fd34dc20b58dea9ab80391a3ad3fc16b7f9c7f44 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fd36ea6fb95dbc95d5ede6396c0b2634cbc0ce32 b/fuzz/gnutls_psk_server_fuzzer.in/fd36ea6fb95dbc95d5ede6396c0b2634cbc0ce32 new file mode 100644 index 0000000000..e7b79a3a33 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fd36ea6fb95dbc95d5ede6396c0b2634cbc0ce32 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fd43e0cc6f2fa716f083131bf46b3818080f164c b/fuzz/gnutls_psk_server_fuzzer.in/fd43e0cc6f2fa716f083131bf46b3818080f164c new file mode 100644 index 0000000000..9ad78f2f63 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fd43e0cc6f2fa716f083131bf46b3818080f164c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fd6aeba8bd195a5d0610915638fdadfd8987c321 b/fuzz/gnutls_psk_server_fuzzer.in/fd6aeba8bd195a5d0610915638fdadfd8987c321 new file mode 100644 index 0000000000..603f7f23a9 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fd6aeba8bd195a5d0610915638fdadfd8987c321 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fd8eed89f313f43f87d4a1e83ab70019ba86fd91 b/fuzz/gnutls_psk_server_fuzzer.in/fd8eed89f313f43f87d4a1e83ab70019ba86fd91 new file mode 100644 index 0000000000..00ccf5ae50 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fd8eed89f313f43f87d4a1e83ab70019ba86fd91 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fddd4a42b764c85c9ec222dc8a0fb05ee410868b b/fuzz/gnutls_psk_server_fuzzer.in/fddd4a42b764c85c9ec222dc8a0fb05ee410868b new file mode 100644 index 0000000000..cc11028efa Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fddd4a42b764c85c9ec222dc8a0fb05ee410868b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fe2681d2f547cfbd520511e4facd387af76df6fb b/fuzz/gnutls_psk_server_fuzzer.in/fe2681d2f547cfbd520511e4facd387af76df6fb new file mode 100644 index 0000000000..8a3c998a34 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fe2681d2f547cfbd520511e4facd387af76df6fb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fed11bcb5db651296b62e315bdf00518a357db1b b/fuzz/gnutls_psk_server_fuzzer.in/fed11bcb5db651296b62e315bdf00518a357db1b new file mode 100644 index 0000000000..9828a1771e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fed11bcb5db651296b62e315bdf00518a357db1b differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fef42b3f647d0a64fce21764a943e469256b39f8 b/fuzz/gnutls_psk_server_fuzzer.in/fef42b3f647d0a64fce21764a943e469256b39f8 new file mode 100644 index 0000000000..1b877e4839 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fef42b3f647d0a64fce21764a943e469256b39f8 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/feff24b6f43c72176f86f7e1e706fd9274be177c b/fuzz/gnutls_psk_server_fuzzer.in/feff24b6f43c72176f86f7e1e706fd9274be177c new file mode 100644 index 0000000000..ca866a9ba7 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/feff24b6f43c72176f86f7e1e706fd9274be177c differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ff06855a81f6157ddf5d7a486f1afbe64c22c1bf b/fuzz/gnutls_psk_server_fuzzer.in/ff06855a81f6157ddf5d7a486f1afbe64c22c1bf new file mode 100644 index 0000000000..b63264f386 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ff06855a81f6157ddf5d7a486f1afbe64c22c1bf differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ff757de12cc88a7505b9396acf1ef6f995c14045 b/fuzz/gnutls_psk_server_fuzzer.in/ff757de12cc88a7505b9396acf1ef6f995c14045 new file mode 100644 index 0000000000..5dba9f1467 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ff757de12cc88a7505b9396acf1ef6f995c14045 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/ffd254f8c28b353fa17bd04ae1fed9eb86f216eb b/fuzz/gnutls_psk_server_fuzzer.in/ffd254f8c28b353fa17bd04ae1fed9eb86f216eb new file mode 100644 index 0000000000..83818a863d Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/ffd254f8c28b353fa17bd04ae1fed9eb86f216eb differ diff --git a/fuzz/gnutls_psk_server_fuzzer.in/fff79ab3eaa1c013103214fe1adc102895131555 b/fuzz/gnutls_psk_server_fuzzer.in/fff79ab3eaa1c013103214fe1adc102895131555 new file mode 100644 index 0000000000..b337689e93 Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.in/fff79ab3eaa1c013103214fe1adc102895131555 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.repro/d757b818210bcaec5e297cdb5e30cee9059f9bc3 b/fuzz/gnutls_psk_server_fuzzer.repro/d757b818210bcaec5e297cdb5e30cee9059f9bc3 new file mode 100644 index 0000000000..8cc62c101e Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.repro/d757b818210bcaec5e297cdb5e30cee9059f9bc3 differ diff --git a/fuzz/gnutls_psk_server_fuzzer.repro/e40a8cc4e868b450a442d905d914aee402b57a15 b/fuzz/gnutls_psk_server_fuzzer.repro/e40a8cc4e868b450a442d905d914aee402b57a15 new file mode 100644 index 0000000000..2efe90c63b Binary files /dev/null and b/fuzz/gnutls_psk_server_fuzzer.repro/e40a8cc4e868b450a442d905d914aee402b57a15 differ diff --git a/fuzz/gnutls_reverse_idna_parser_fuzzer.c b/fuzz/gnutls_reverse_idna_parser_fuzzer.c new file mode 100644 index 0000000000..b67e5ca252 --- /dev/null +++ b/fuzz/gnutls_reverse_idna_parser_fuzzer.c @@ -0,0 +1,42 @@ +/* +# Copyright 2016 Nikos Mavrogiannopoulos +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include +#include +#include + +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t out; + int ret; + + ret = gnutls_idna_reverse_map((char*)data, size, &out, 0); + if (ret < 0) + goto cleanup; + + assert(out.size == strlen((char*)out.data)); + gnutls_free(out.data); + +cleanup: + return 0; +} diff --git a/fuzz/gnutls_reverse_idna_parser_fuzzer.in/606200b851971f3b79ce92dde6b426895a048fc3 b/fuzz/gnutls_reverse_idna_parser_fuzzer.in/606200b851971f3b79ce92dde6b426895a048fc3 new file mode 100644 index 0000000000..bc520b8f16 --- /dev/null +++ b/fuzz/gnutls_reverse_idna_parser_fuzzer.in/606200b851971f3b79ce92dde6b426895a048fc3 @@ -0,0 +1 @@ +LOCLHOST \ No newline at end of file diff --git a/devel/fuzz/gnutls_idna_parser.in/dns1 b/fuzz/gnutls_reverse_idna_parser_fuzzer.in/9dbb6183728990e2fabe3b315f8f5f30c35618b3 similarity index 100% rename from devel/fuzz/gnutls_idna_parser.in/dns1 rename to fuzz/gnutls_reverse_idna_parser_fuzzer.in/9dbb6183728990e2fabe3b315f8f5f30c35618b3 diff --git a/fuzz/gnutls_server_fuzzer.c b/fuzz/gnutls_server_fuzzer.c new file mode 100644 index 0000000000..c42ff21efa --- /dev/null +++ b/fuzz/gnutls_server_fuzzer.c @@ -0,0 +1,121 @@ +/* +# Copyright 2017 Red Hat, Inc. +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include +#include +#include +#include + +#include + +#include "certs.h" +#include "mem.h" +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size) +{ + int res; + gnutls_datum_t rsa_cert, rsa_key; + gnutls_datum_t ecdsa_cert, ecdsa_key; + gnutls_datum_t ed25519_cert, ed25519_key; + gnutls_datum_t ed448_cert, ed448_key; + gnutls_session_t session; + gnutls_certificate_credentials_t xcred; + struct mem_st memdata; + + res = gnutls_init(&session, GNUTLS_SERVER); + assert(res >= 0); + + res = gnutls_certificate_allocate_credentials(&xcred); + assert(res >= 0); + + rsa_cert.data = (unsigned char *)kRSACertificateDER; + rsa_cert.size = sizeof(kRSACertificateDER); + rsa_key.data = (unsigned char *)kRSAPrivateKeyDER; + rsa_key.size = sizeof(kRSAPrivateKeyDER); + + ecdsa_cert.data = (unsigned char *)kECDSACertificateDER; + ecdsa_cert.size = sizeof(kECDSACertificateDER); + ecdsa_key.data = (unsigned char *)kECDSAPrivateKeyDER; + ecdsa_key.size = sizeof(kECDSAPrivateKeyDER); + + ed25519_cert.data = (unsigned char *)kEd25519CertificateDER; + ed25519_cert.size = sizeof(kEd25519CertificateDER); + ed25519_key.data = (unsigned char *)kEd25519PrivateKeyDER; + ed25519_key.size = sizeof(kEd25519PrivateKeyDER); + + ed448_cert.data = (unsigned char *)kEd448CertificateDER; + ed448_cert.size = sizeof(kEd448CertificateDER); + ed448_key.data = (unsigned char *)kEd448PrivateKeyDER; + ed448_key.size = sizeof(kEd448PrivateKeyDER); + + res = + gnutls_certificate_set_x509_key_mem(xcred, &rsa_cert, &rsa_key, + GNUTLS_X509_FMT_DER); + assert(res >= 0); + + res = + gnutls_certificate_set_x509_key_mem(xcred, &ecdsa_cert, &ecdsa_key, + GNUTLS_X509_FMT_DER); + assert(res >= 0); + + res = + gnutls_certificate_set_x509_key_mem(xcred, &ed25519_cert, &ed25519_key, + GNUTLS_X509_FMT_DER); + assert(res >= 0); + + res = + gnutls_certificate_set_x509_key_mem(xcred, &ed448_cert, &ed448_key, + GNUTLS_X509_FMT_DER); + assert(res >= 0); + + gnutls_certificate_set_known_dh_params(xcred, GNUTLS_SEC_PARAM_MEDIUM); + + res = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + assert(res >= 0); + + /*res = gnutls_set_default_priority(session);*/ + res = gnutls_priority_set_direct(session, "NORMAL:+SIGN-EDDSA-ED448:"VERS_STR, NULL); + assert(res >= 0); + + memdata.data = data; + memdata.size = size; + + gnutls_transport_set_push_function(session, mem_push); + gnutls_transport_set_pull_function(session, mem_pull); + gnutls_transport_set_pull_timeout_function(session, mem_pull_timeout); + gnutls_transport_set_ptr(session, &memdata); + + do { + res = gnutls_handshake(session); + } while (res < 0 && gnutls_error_is_fatal(res) == 0); + if (res >= 0) { + for (;;) { + char buf[16384]; + res = gnutls_record_recv(session, buf, sizeof(buf)); + if (res <= 0) { + break; + } + } + } + + gnutls_deinit(session); + gnutls_certificate_free_credentials(xcred); + return 0; +} diff --git a/fuzz/gnutls_server_fuzzer.in/003db86c11587a375830a6833260a0dffb415a19 b/fuzz/gnutls_server_fuzzer.in/003db86c11587a375830a6833260a0dffb415a19 new file mode 100644 index 0000000000..b67b48f2f1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/003db86c11587a375830a6833260a0dffb415a19 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0072b91805cb940c7374a074345a7b4456f10d3f b/fuzz/gnutls_server_fuzzer.in/0072b91805cb940c7374a074345a7b4456f10d3f new file mode 100644 index 0000000000..003e127147 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0072b91805cb940c7374a074345a7b4456f10d3f differ diff --git a/fuzz/gnutls_server_fuzzer.in/009baa11e6cfa1713bc175dbf069d3bdf0c5b49c b/fuzz/gnutls_server_fuzzer.in/009baa11e6cfa1713bc175dbf069d3bdf0c5b49c new file mode 100644 index 0000000000..1a881d4b30 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/009baa11e6cfa1713bc175dbf069d3bdf0c5b49c differ diff --git a/fuzz/gnutls_server_fuzzer.in/00eb0e6c7ac4a1070b87495f6973eba906641253 b/fuzz/gnutls_server_fuzzer.in/00eb0e6c7ac4a1070b87495f6973eba906641253 new file mode 100644 index 0000000000..cedb0e1765 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/00eb0e6c7ac4a1070b87495f6973eba906641253 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0225ecda423f74d74bd0e67cdc52bc882349d8e3 b/fuzz/gnutls_server_fuzzer.in/0225ecda423f74d74bd0e67cdc52bc882349d8e3 new file mode 100644 index 0000000000..f72e3d25e9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0225ecda423f74d74bd0e67cdc52bc882349d8e3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/022b9c11c0c6d68fb5bbf41a73133d144dbf7bf6 b/fuzz/gnutls_server_fuzzer.in/022b9c11c0c6d68fb5bbf41a73133d144dbf7bf6 new file mode 100644 index 0000000000..45993c9ea6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/022b9c11c0c6d68fb5bbf41a73133d144dbf7bf6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/02602d41acadef2273a3136d87894d02bc2ece98 b/fuzz/gnutls_server_fuzzer.in/02602d41acadef2273a3136d87894d02bc2ece98 new file mode 100644 index 0000000000..8d71cfece4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/02602d41acadef2273a3136d87894d02bc2ece98 differ diff --git a/fuzz/gnutls_server_fuzzer.in/03b800844b062c76ea428403a4223f2059104b81 b/fuzz/gnutls_server_fuzzer.in/03b800844b062c76ea428403a4223f2059104b81 new file mode 100644 index 0000000000..b1676d94c2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/03b800844b062c76ea428403a4223f2059104b81 differ diff --git a/fuzz/gnutls_server_fuzzer.in/042a404d5be1bf59daf82923f7d822944b6c86cc b/fuzz/gnutls_server_fuzzer.in/042a404d5be1bf59daf82923f7d822944b6c86cc new file mode 100644 index 0000000000..dd682365e5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/042a404d5be1bf59daf82923f7d822944b6c86cc differ diff --git a/fuzz/gnutls_server_fuzzer.in/04c5ec4c0cdaf6a9c4e546e05847d08e969df490 b/fuzz/gnutls_server_fuzzer.in/04c5ec4c0cdaf6a9c4e546e05847d08e969df490 new file mode 100644 index 0000000000..c070edef8a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/04c5ec4c0cdaf6a9c4e546e05847d08e969df490 differ diff --git a/fuzz/gnutls_server_fuzzer.in/051b71cf0186fef98b2ccb01b63c778b0269a81a b/fuzz/gnutls_server_fuzzer.in/051b71cf0186fef98b2ccb01b63c778b0269a81a new file mode 100644 index 0000000000..56b415e30f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/051b71cf0186fef98b2ccb01b63c778b0269a81a differ diff --git a/fuzz/gnutls_server_fuzzer.in/05ad2a8a13a394d216999a8e4dc4bbc05d2941b8 b/fuzz/gnutls_server_fuzzer.in/05ad2a8a13a394d216999a8e4dc4bbc05d2941b8 new file mode 100644 index 0000000000..2b03f91934 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/05ad2a8a13a394d216999a8e4dc4bbc05d2941b8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/060107eb589d77320bdda833ddd06fd2f61e53e3 b/fuzz/gnutls_server_fuzzer.in/060107eb589d77320bdda833ddd06fd2f61e53e3 new file mode 100644 index 0000000000..f7f3c54c09 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/060107eb589d77320bdda833ddd06fd2f61e53e3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0615eb023cfb79d5e9c12c9306005d289bc0fd9f b/fuzz/gnutls_server_fuzzer.in/0615eb023cfb79d5e9c12c9306005d289bc0fd9f new file mode 100644 index 0000000000..29e16b1111 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0615eb023cfb79d5e9c12c9306005d289bc0fd9f differ diff --git a/fuzz/gnutls_server_fuzzer.in/06c1ed43bcfca07621165d6f64d46e2e49d952eb b/fuzz/gnutls_server_fuzzer.in/06c1ed43bcfca07621165d6f64d46e2e49d952eb new file mode 100644 index 0000000000..e12567d8cd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/06c1ed43bcfca07621165d6f64d46e2e49d952eb differ diff --git a/fuzz/gnutls_server_fuzzer.in/0729cde85be33f7f78ed90db14fc05924f755fc0 b/fuzz/gnutls_server_fuzzer.in/0729cde85be33f7f78ed90db14fc05924f755fc0 new file mode 100644 index 0000000000..a0f6576bc2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0729cde85be33f7f78ed90db14fc05924f755fc0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/07614bdef904774211e927692a296946ad3aa041 b/fuzz/gnutls_server_fuzzer.in/07614bdef904774211e927692a296946ad3aa041 new file mode 100644 index 0000000000..158eae1453 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/07614bdef904774211e927692a296946ad3aa041 differ diff --git a/fuzz/gnutls_server_fuzzer.in/07920896defcbe63b1c3eb717752c8cbff6883c6 b/fuzz/gnutls_server_fuzzer.in/07920896defcbe63b1c3eb717752c8cbff6883c6 new file mode 100644 index 0000000000..0e2f4f7074 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/07920896defcbe63b1c3eb717752c8cbff6883c6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0811b8f972519b3759979fc3b258dc9f8a93b2d2 b/fuzz/gnutls_server_fuzzer.in/0811b8f972519b3759979fc3b258dc9f8a93b2d2 new file mode 100644 index 0000000000..9fd6d4de20 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0811b8f972519b3759979fc3b258dc9f8a93b2d2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/083faeee9c0b14e9f9196a80b1871502dd1473e3 b/fuzz/gnutls_server_fuzzer.in/083faeee9c0b14e9f9196a80b1871502dd1473e3 new file mode 100644 index 0000000000..2bcf267545 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/083faeee9c0b14e9f9196a80b1871502dd1473e3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0a2910a8472e0893b45e3d123d7939814dd5933d b/fuzz/gnutls_server_fuzzer.in/0a2910a8472e0893b45e3d123d7939814dd5933d new file mode 100644 index 0000000000..59d5d393d0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0a2910a8472e0893b45e3d123d7939814dd5933d differ diff --git a/fuzz/gnutls_server_fuzzer.in/0a830459863b151ebdf37ca8b68d2c4df97850a6 b/fuzz/gnutls_server_fuzzer.in/0a830459863b151ebdf37ca8b68d2c4df97850a6 new file mode 100644 index 0000000000..40d10de212 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0a830459863b151ebdf37ca8b68d2c4df97850a6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0a84e504894eb72797e2cb8075cf76aa48f18045 b/fuzz/gnutls_server_fuzzer.in/0a84e504894eb72797e2cb8075cf76aa48f18045 new file mode 100644 index 0000000000..ba07bb9521 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0a84e504894eb72797e2cb8075cf76aa48f18045 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0abf6cea5f952c2f226c3753ac4d4743a3746461 b/fuzz/gnutls_server_fuzzer.in/0abf6cea5f952c2f226c3753ac4d4743a3746461 new file mode 100644 index 0000000000..24b924283a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0abf6cea5f952c2f226c3753ac4d4743a3746461 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0b66925d81b3b6976c4f6880087bbb6f38308669 b/fuzz/gnutls_server_fuzzer.in/0b66925d81b3b6976c4f6880087bbb6f38308669 new file mode 100644 index 0000000000..61ab748329 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0b66925d81b3b6976c4f6880087bbb6f38308669 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0c294ef9c3faeeb6bcd595d4c8ceed7c14661baf b/fuzz/gnutls_server_fuzzer.in/0c294ef9c3faeeb6bcd595d4c8ceed7c14661baf new file mode 100644 index 0000000000..f84f4d77cf Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0c294ef9c3faeeb6bcd595d4c8ceed7c14661baf differ diff --git a/fuzz/gnutls_server_fuzzer.in/0c64b5405ce3cbc02f7c0c69f4b04bbf93e62ece b/fuzz/gnutls_server_fuzzer.in/0c64b5405ce3cbc02f7c0c69f4b04bbf93e62ece new file mode 100644 index 0000000000..8de71128d2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0c64b5405ce3cbc02f7c0c69f4b04bbf93e62ece differ diff --git a/fuzz/gnutls_server_fuzzer.in/0ca4698ccc18ceb380563aefa6d02bf7a3a401e7 b/fuzz/gnutls_server_fuzzer.in/0ca4698ccc18ceb380563aefa6d02bf7a3a401e7 new file mode 100644 index 0000000000..adbb01dd7e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0ca4698ccc18ceb380563aefa6d02bf7a3a401e7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0cdbff7e342851c25b849a012b7ac4f9235c18a6 b/fuzz/gnutls_server_fuzzer.in/0cdbff7e342851c25b849a012b7ac4f9235c18a6 new file mode 100644 index 0000000000..da01d72857 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0cdbff7e342851c25b849a012b7ac4f9235c18a6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0cecf043638810fa52a2491cfbcd348613753822 b/fuzz/gnutls_server_fuzzer.in/0cecf043638810fa52a2491cfbcd348613753822 new file mode 100644 index 0000000000..3ce76341fa Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0cecf043638810fa52a2491cfbcd348613753822 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0d0368c69fe73036407ab6cd13374fa9bd110c6c b/fuzz/gnutls_server_fuzzer.in/0d0368c69fe73036407ab6cd13374fa9bd110c6c new file mode 100644 index 0000000000..0e978aa41f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0d0368c69fe73036407ab6cd13374fa9bd110c6c differ diff --git a/fuzz/gnutls_server_fuzzer.in/0d15db7fc2be67bd1c2ac188c66be624ea1430aa b/fuzz/gnutls_server_fuzzer.in/0d15db7fc2be67bd1c2ac188c66be624ea1430aa new file mode 100644 index 0000000000..fd4a6a3d80 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0d15db7fc2be67bd1c2ac188c66be624ea1430aa differ diff --git a/fuzz/gnutls_server_fuzzer.in/0d2d62a8283817a6bc4a4f7d639cfbbc60749a0c b/fuzz/gnutls_server_fuzzer.in/0d2d62a8283817a6bc4a4f7d639cfbbc60749a0c new file mode 100644 index 0000000000..92adf69e5a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0d2d62a8283817a6bc4a4f7d639cfbbc60749a0c differ diff --git a/fuzz/gnutls_server_fuzzer.in/0d9311f1b319e40757b4e57c9305410a4e4329d9 b/fuzz/gnutls_server_fuzzer.in/0d9311f1b319e40757b4e57c9305410a4e4329d9 new file mode 100644 index 0000000000..5269d9f66d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0d9311f1b319e40757b4e57c9305410a4e4329d9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/0e385d1ee4b622d8c3ca1367879e087b30ae085f b/fuzz/gnutls_server_fuzzer.in/0e385d1ee4b622d8c3ca1367879e087b30ae085f new file mode 100644 index 0000000000..8f4e822a89 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0e385d1ee4b622d8c3ca1367879e087b30ae085f differ diff --git a/fuzz/gnutls_server_fuzzer.in/0e3dcd01f3937989454fb3f892583515c5ca0ccd b/fuzz/gnutls_server_fuzzer.in/0e3dcd01f3937989454fb3f892583515c5ca0ccd new file mode 100644 index 0000000000..e7ebc7e617 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0e3dcd01f3937989454fb3f892583515c5ca0ccd differ diff --git a/fuzz/gnutls_server_fuzzer.in/0eea83c69b0138b609d5be2c5d82569c3f4acfff b/fuzz/gnutls_server_fuzzer.in/0eea83c69b0138b609d5be2c5d82569c3f4acfff new file mode 100644 index 0000000000..e52fb24145 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0eea83c69b0138b609d5be2c5d82569c3f4acfff differ diff --git a/fuzz/gnutls_server_fuzzer.in/0fffcad22cfc9e4eb00b7b2649fdce9b21193a07 b/fuzz/gnutls_server_fuzzer.in/0fffcad22cfc9e4eb00b7b2649fdce9b21193a07 new file mode 100644 index 0000000000..8643dbf6c3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/0fffcad22cfc9e4eb00b7b2649fdce9b21193a07 differ diff --git a/fuzz/gnutls_server_fuzzer.in/10b4cf47c26cce410ebfbcb14f5d72a881b596e8 b/fuzz/gnutls_server_fuzzer.in/10b4cf47c26cce410ebfbcb14f5d72a881b596e8 new file mode 100644 index 0000000000..9ae3485e71 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/10b4cf47c26cce410ebfbcb14f5d72a881b596e8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/10b8daa2cd94138d2233825748a3940b34d6449d b/fuzz/gnutls_server_fuzzer.in/10b8daa2cd94138d2233825748a3940b34d6449d new file mode 100644 index 0000000000..199e108d95 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/10b8daa2cd94138d2233825748a3940b34d6449d differ diff --git a/fuzz/gnutls_server_fuzzer.in/10fbb0b671bcaa15702201016882a6eb04552d65 b/fuzz/gnutls_server_fuzzer.in/10fbb0b671bcaa15702201016882a6eb04552d65 new file mode 100644 index 0000000000..ae11c7dbd8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/10fbb0b671bcaa15702201016882a6eb04552d65 differ diff --git a/fuzz/gnutls_server_fuzzer.in/115e526d435f7f15fe78dac3f9803ea525463d84 b/fuzz/gnutls_server_fuzzer.in/115e526d435f7f15fe78dac3f9803ea525463d84 new file mode 100644 index 0000000000..fd13f625f4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/115e526d435f7f15fe78dac3f9803ea525463d84 differ diff --git a/fuzz/gnutls_server_fuzzer.in/116514d8644b661f54ba129e0fd94534ef0037e7 b/fuzz/gnutls_server_fuzzer.in/116514d8644b661f54ba129e0fd94534ef0037e7 new file mode 100644 index 0000000000..fb5fd98a5c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/116514d8644b661f54ba129e0fd94534ef0037e7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/118e245f2b4b9759b32c1fc1fdd908e3e3052639 b/fuzz/gnutls_server_fuzzer.in/118e245f2b4b9759b32c1fc1fdd908e3e3052639 new file mode 100644 index 0000000000..0d675b73b7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/118e245f2b4b9759b32c1fc1fdd908e3e3052639 differ diff --git a/fuzz/gnutls_server_fuzzer.in/122d85818b76b7deb1bd9398a507eae90d67d25f b/fuzz/gnutls_server_fuzzer.in/122d85818b76b7deb1bd9398a507eae90d67d25f new file mode 100644 index 0000000000..5075e7c75c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/122d85818b76b7deb1bd9398a507eae90d67d25f differ diff --git a/fuzz/gnutls_server_fuzzer.in/1250e910717e84d58f38ea8e758aa11964f8758f b/fuzz/gnutls_server_fuzzer.in/1250e910717e84d58f38ea8e758aa11964f8758f new file mode 100644 index 0000000000..1cc0da80b9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1250e910717e84d58f38ea8e758aa11964f8758f differ diff --git a/fuzz/gnutls_server_fuzzer.in/126559bacc95bac78d953dfbe7e31ba87a4d236f b/fuzz/gnutls_server_fuzzer.in/126559bacc95bac78d953dfbe7e31ba87a4d236f new file mode 100644 index 0000000000..25b5d4b59a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/126559bacc95bac78d953dfbe7e31ba87a4d236f differ diff --git a/fuzz/gnutls_server_fuzzer.in/126831fcfa8ce410469ef098280e5606afdf4139 b/fuzz/gnutls_server_fuzzer.in/126831fcfa8ce410469ef098280e5606afdf4139 new file mode 100644 index 0000000000..afa2f952d1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/126831fcfa8ce410469ef098280e5606afdf4139 differ diff --git a/fuzz/gnutls_server_fuzzer.in/127e3fff225d2cfef873a42167ae874ca9c05b54 b/fuzz/gnutls_server_fuzzer.in/127e3fff225d2cfef873a42167ae874ca9c05b54 new file mode 100644 index 0000000000..6a223c2e00 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/127e3fff225d2cfef873a42167ae874ca9c05b54 differ diff --git a/fuzz/gnutls_server_fuzzer.in/12cff076ea1c6f7549b633a2f271a42d177e3229 b/fuzz/gnutls_server_fuzzer.in/12cff076ea1c6f7549b633a2f271a42d177e3229 new file mode 100644 index 0000000000..74b917e950 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/12cff076ea1c6f7549b633a2f271a42d177e3229 differ diff --git a/fuzz/gnutls_server_fuzzer.in/12e8f171f0a1595dc9ac1e25c782fbd306ef85f7 b/fuzz/gnutls_server_fuzzer.in/12e8f171f0a1595dc9ac1e25c782fbd306ef85f7 new file mode 100644 index 0000000000..a9cf556e18 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/12e8f171f0a1595dc9ac1e25c782fbd306ef85f7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/132105b24c551fdf962f12797127dd3d596a507c b/fuzz/gnutls_server_fuzzer.in/132105b24c551fdf962f12797127dd3d596a507c new file mode 100644 index 0000000000..b07b0663c4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/132105b24c551fdf962f12797127dd3d596a507c differ diff --git a/fuzz/gnutls_server_fuzzer.in/13687d599480b0d0e3c60425c812734299c7e890 b/fuzz/gnutls_server_fuzzer.in/13687d599480b0d0e3c60425c812734299c7e890 new file mode 100644 index 0000000000..538b907c80 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/13687d599480b0d0e3c60425c812734299c7e890 differ diff --git a/fuzz/gnutls_server_fuzzer.in/137045ca43ab2a5975450b7e6980c58824187480 b/fuzz/gnutls_server_fuzzer.in/137045ca43ab2a5975450b7e6980c58824187480 new file mode 100644 index 0000000000..b94a978e27 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/137045ca43ab2a5975450b7e6980c58824187480 differ diff --git a/fuzz/gnutls_server_fuzzer.in/13ae5375d063529ee905369934785b7f5498ac8f b/fuzz/gnutls_server_fuzzer.in/13ae5375d063529ee905369934785b7f5498ac8f new file mode 100644 index 0000000000..069888ba68 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/13ae5375d063529ee905369934785b7f5498ac8f differ diff --git a/fuzz/gnutls_server_fuzzer.in/142ce1d30196629a095b1f5fea0c759860fb267c b/fuzz/gnutls_server_fuzzer.in/142ce1d30196629a095b1f5fea0c759860fb267c new file mode 100644 index 0000000000..fd7f2a5734 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/142ce1d30196629a095b1f5fea0c759860fb267c differ diff --git a/fuzz/gnutls_server_fuzzer.in/1465bb78e297f515ad09011d53c483889d8d2013 b/fuzz/gnutls_server_fuzzer.in/1465bb78e297f515ad09011d53c483889d8d2013 new file mode 100644 index 0000000000..e6d05ee3bb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1465bb78e297f515ad09011d53c483889d8d2013 differ diff --git a/fuzz/gnutls_server_fuzzer.in/155ca56291212a3c1af9422cc71679dee1d7d1ae b/fuzz/gnutls_server_fuzzer.in/155ca56291212a3c1af9422cc71679dee1d7d1ae new file mode 100644 index 0000000000..a852e8f766 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/155ca56291212a3c1af9422cc71679dee1d7d1ae differ diff --git a/fuzz/gnutls_server_fuzzer.in/156308c60454458026d2297e9cd804f102d06bf2 b/fuzz/gnutls_server_fuzzer.in/156308c60454458026d2297e9cd804f102d06bf2 new file mode 100644 index 0000000000..03c9825f97 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/156308c60454458026d2297e9cd804f102d06bf2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/16101de71362437b84fbd09e2899a62f2bb82146 b/fuzz/gnutls_server_fuzzer.in/16101de71362437b84fbd09e2899a62f2bb82146 new file mode 100644 index 0000000000..b0cbdd1c3c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/16101de71362437b84fbd09e2899a62f2bb82146 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1628a21f25c13314963df386da6473389771a56d b/fuzz/gnutls_server_fuzzer.in/1628a21f25c13314963df386da6473389771a56d new file mode 100644 index 0000000000..a34ae40b8f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1628a21f25c13314963df386da6473389771a56d differ diff --git a/fuzz/gnutls_server_fuzzer.in/1644e18e3aed7ce6a972eec8e151c51ff977e7f5 b/fuzz/gnutls_server_fuzzer.in/1644e18e3aed7ce6a972eec8e151c51ff977e7f5 new file mode 100644 index 0000000000..db69db90b5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1644e18e3aed7ce6a972eec8e151c51ff977e7f5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/165b1e27508e2ca2d7c50752e73c63d3a2c345a8 b/fuzz/gnutls_server_fuzzer.in/165b1e27508e2ca2d7c50752e73c63d3a2c345a8 new file mode 100644 index 0000000000..1bbbc61877 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/165b1e27508e2ca2d7c50752e73c63d3a2c345a8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1672d9c1813785b4a87a02c0e9407ebbacc762a2 b/fuzz/gnutls_server_fuzzer.in/1672d9c1813785b4a87a02c0e9407ebbacc762a2 new file mode 100644 index 0000000000..8c7cdd9fd4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1672d9c1813785b4a87a02c0e9407ebbacc762a2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1675def9b1ad11b8256bee5e90ee07b06cfbe4e5 b/fuzz/gnutls_server_fuzzer.in/1675def9b1ad11b8256bee5e90ee07b06cfbe4e5 new file mode 100644 index 0000000000..a7bc8acc93 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1675def9b1ad11b8256bee5e90ee07b06cfbe4e5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/16766829e530fb80027d015a3c6c485cd0a6df70 b/fuzz/gnutls_server_fuzzer.in/16766829e530fb80027d015a3c6c485cd0a6df70 new file mode 100644 index 0000000000..ac13119d35 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/16766829e530fb80027d015a3c6c485cd0a6df70 differ diff --git a/fuzz/gnutls_server_fuzzer.in/167e33ce0ed7f6b765ca8c74abaa2b6a2d6a71e2 b/fuzz/gnutls_server_fuzzer.in/167e33ce0ed7f6b765ca8c74abaa2b6a2d6a71e2 new file mode 100644 index 0000000000..4368b09b49 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/167e33ce0ed7f6b765ca8c74abaa2b6a2d6a71e2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/168dc7c811a37b0b938be66578e474a12d94c9bb b/fuzz/gnutls_server_fuzzer.in/168dc7c811a37b0b938be66578e474a12d94c9bb new file mode 100644 index 0000000000..0caf1c81ca Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/168dc7c811a37b0b938be66578e474a12d94c9bb differ diff --git a/fuzz/gnutls_server_fuzzer.in/16f86a3ecc41d8817a5cab5407179af7d4c3da3a b/fuzz/gnutls_server_fuzzer.in/16f86a3ecc41d8817a5cab5407179af7d4c3da3a new file mode 100644 index 0000000000..d975c14dca Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/16f86a3ecc41d8817a5cab5407179af7d4c3da3a differ diff --git a/fuzz/gnutls_server_fuzzer.in/174b524091c33e96e7478ec601822933100bf14d b/fuzz/gnutls_server_fuzzer.in/174b524091c33e96e7478ec601822933100bf14d new file mode 100644 index 0000000000..44a4fe071f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/174b524091c33e96e7478ec601822933100bf14d differ diff --git a/fuzz/gnutls_server_fuzzer.in/176d41039fe54b14fe8234f9db3e6369a8f52e5d b/fuzz/gnutls_server_fuzzer.in/176d41039fe54b14fe8234f9db3e6369a8f52e5d new file mode 100644 index 0000000000..226b1e673e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/176d41039fe54b14fe8234f9db3e6369a8f52e5d differ diff --git a/fuzz/gnutls_server_fuzzer.in/177e8a815a637043fd8bee259aa924adc3706b1d b/fuzz/gnutls_server_fuzzer.in/177e8a815a637043fd8bee259aa924adc3706b1d new file mode 100644 index 0000000000..89567aa7cb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/177e8a815a637043fd8bee259aa924adc3706b1d differ diff --git a/fuzz/gnutls_server_fuzzer.in/178d18a3d1acd594cf2c78f45ddff88d7971354b b/fuzz/gnutls_server_fuzzer.in/178d18a3d1acd594cf2c78f45ddff88d7971354b new file mode 100644 index 0000000000..f3fbc9585d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/178d18a3d1acd594cf2c78f45ddff88d7971354b differ diff --git a/fuzz/gnutls_server_fuzzer.in/17b3b06811c483fe73271fd2e4bb458cb3584717 b/fuzz/gnutls_server_fuzzer.in/17b3b06811c483fe73271fd2e4bb458cb3584717 new file mode 100644 index 0000000000..44e4de71a4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/17b3b06811c483fe73271fd2e4bb458cb3584717 differ diff --git a/fuzz/gnutls_server_fuzzer.in/17e16cb20cc7ea4dfdf78edca36e1a24da27213c b/fuzz/gnutls_server_fuzzer.in/17e16cb20cc7ea4dfdf78edca36e1a24da27213c new file mode 100644 index 0000000000..f6abf951fb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/17e16cb20cc7ea4dfdf78edca36e1a24da27213c differ diff --git a/fuzz/gnutls_server_fuzzer.in/181e3503fe0000fffe224d19ed36a9d948a5621a b/fuzz/gnutls_server_fuzzer.in/181e3503fe0000fffe224d19ed36a9d948a5621a new file mode 100644 index 0000000000..dbd3ed09e0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/181e3503fe0000fffe224d19ed36a9d948a5621a differ diff --git a/fuzz/gnutls_server_fuzzer.in/188676986b4ac9b1e9229cbad88a0481dedeb407 b/fuzz/gnutls_server_fuzzer.in/188676986b4ac9b1e9229cbad88a0481dedeb407 new file mode 100644 index 0000000000..41c0c86b96 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/188676986b4ac9b1e9229cbad88a0481dedeb407 differ diff --git a/fuzz/gnutls_server_fuzzer.in/18a7986b681f24620614071500a0858cefa144ad b/fuzz/gnutls_server_fuzzer.in/18a7986b681f24620614071500a0858cefa144ad new file mode 100644 index 0000000000..0a83b5e056 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/18a7986b681f24620614071500a0858cefa144ad differ diff --git a/fuzz/gnutls_server_fuzzer.in/18d8e706fc6974ed92aafaaf111601317e2af212 b/fuzz/gnutls_server_fuzzer.in/18d8e706fc6974ed92aafaaf111601317e2af212 new file mode 100644 index 0000000000..b3d323f70d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/18d8e706fc6974ed92aafaaf111601317e2af212 differ diff --git a/fuzz/gnutls_server_fuzzer.in/18e8933693e94daf8585668cc75183b26bf085e9 b/fuzz/gnutls_server_fuzzer.in/18e8933693e94daf8585668cc75183b26bf085e9 new file mode 100644 index 0000000000..34e23550ef Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/18e8933693e94daf8585668cc75183b26bf085e9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1915e5f8d4084880216f8f5e6dd086ab14770a47 b/fuzz/gnutls_server_fuzzer.in/1915e5f8d4084880216f8f5e6dd086ab14770a47 new file mode 100644 index 0000000000..3fde6b2cf7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1915e5f8d4084880216f8f5e6dd086ab14770a47 differ diff --git a/fuzz/gnutls_server_fuzzer.in/19168be61b1a82af2e7b0577666482e077c4f805 b/fuzz/gnutls_server_fuzzer.in/19168be61b1a82af2e7b0577666482e077c4f805 new file mode 100644 index 0000000000..cf5f3ae3e4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/19168be61b1a82af2e7b0577666482e077c4f805 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1940f94dda1c1b484acef335d9c99a8423dad407 b/fuzz/gnutls_server_fuzzer.in/1940f94dda1c1b484acef335d9c99a8423dad407 new file mode 100644 index 0000000000..2b1a15d321 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1940f94dda1c1b484acef335d9c99a8423dad407 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1a08d75ae47cdf8ec5fd78554cd5b62ce0bd93e3 b/fuzz/gnutls_server_fuzzer.in/1a08d75ae47cdf8ec5fd78554cd5b62ce0bd93e3 new file mode 100644 index 0000000000..e27e541f3c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1a08d75ae47cdf8ec5fd78554cd5b62ce0bd93e3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1a3450123feef8c3205178298bbe6e03e6b59f89 b/fuzz/gnutls_server_fuzzer.in/1a3450123feef8c3205178298bbe6e03e6b59f89 new file mode 100644 index 0000000000..0fa676043f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1a3450123feef8c3205178298bbe6e03e6b59f89 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1a4fbb8c5cee47e6ad39b0d2057ce94e2087cc72 b/fuzz/gnutls_server_fuzzer.in/1a4fbb8c5cee47e6ad39b0d2057ce94e2087cc72 new file mode 100644 index 0000000000..97a69dbd66 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1a4fbb8c5cee47e6ad39b0d2057ce94e2087cc72 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1abcf21d8df06d7297656decad9867cc37fb3521 b/fuzz/gnutls_server_fuzzer.in/1abcf21d8df06d7297656decad9867cc37fb3521 new file mode 100644 index 0000000000..7867e25df7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1abcf21d8df06d7297656decad9867cc37fb3521 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1b12bbf8c54550a9ec71ad07276aaa8a09944a5b b/fuzz/gnutls_server_fuzzer.in/1b12bbf8c54550a9ec71ad07276aaa8a09944a5b new file mode 100644 index 0000000000..28cd521230 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1b12bbf8c54550a9ec71ad07276aaa8a09944a5b differ diff --git a/fuzz/gnutls_server_fuzzer.in/1bc153ede959b2ce9dc1e9009ae2b16b614d7031 b/fuzz/gnutls_server_fuzzer.in/1bc153ede959b2ce9dc1e9009ae2b16b614d7031 new file mode 100644 index 0000000000..2ff6589d46 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1bc153ede959b2ce9dc1e9009ae2b16b614d7031 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1c5caadc724aa4621c8449b0c77cf2297ae09f15 b/fuzz/gnutls_server_fuzzer.in/1c5caadc724aa4621c8449b0c77cf2297ae09f15 new file mode 100644 index 0000000000..709b675564 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1c5caadc724aa4621c8449b0c77cf2297ae09f15 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1c8295b485b6d7f6d58c679c3880321f4b2fa964 b/fuzz/gnutls_server_fuzzer.in/1c8295b485b6d7f6d58c679c3880321f4b2fa964 new file mode 100644 index 0000000000..3451eb7bbe Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1c8295b485b6d7f6d58c679c3880321f4b2fa964 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1c90c7515926408e501d47b45955c07b60b3f222 b/fuzz/gnutls_server_fuzzer.in/1c90c7515926408e501d47b45955c07b60b3f222 new file mode 100644 index 0000000000..985f0ce0c3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1c90c7515926408e501d47b45955c07b60b3f222 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1d1846cd3d9b103ae0e230ac25fa712777b6f5a3 b/fuzz/gnutls_server_fuzzer.in/1d1846cd3d9b103ae0e230ac25fa712777b6f5a3 new file mode 100644 index 0000000000..6cd819427b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1d1846cd3d9b103ae0e230ac25fa712777b6f5a3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1d19546ad0d4f9174267bfcc942e7f9893f4634a b/fuzz/gnutls_server_fuzzer.in/1d19546ad0d4f9174267bfcc942e7f9893f4634a new file mode 100644 index 0000000000..5f9b05b7cb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1d19546ad0d4f9174267bfcc942e7f9893f4634a differ diff --git a/fuzz/gnutls_server_fuzzer.in/1de81aeb14da2b79efa8f559d434c3ea90c2116f b/fuzz/gnutls_server_fuzzer.in/1de81aeb14da2b79efa8f559d434c3ea90c2116f new file mode 100644 index 0000000000..b0a887fad0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1de81aeb14da2b79efa8f559d434c3ea90c2116f differ diff --git a/fuzz/gnutls_server_fuzzer.in/1e85416892020dede08c847cd74c04ae96dbbcf0 b/fuzz/gnutls_server_fuzzer.in/1e85416892020dede08c847cd74c04ae96dbbcf0 new file mode 100644 index 0000000000..c526ce4201 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1e85416892020dede08c847cd74c04ae96dbbcf0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1eee1d97fc3a3b76b3931405ef1fffe33a156de5 b/fuzz/gnutls_server_fuzzer.in/1eee1d97fc3a3b76b3931405ef1fffe33a156de5 new file mode 100644 index 0000000000..527e0d5e48 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1eee1d97fc3a3b76b3931405ef1fffe33a156de5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/1f575c489fb52d5795ec0ffcb6e4f09a2664e8bb b/fuzz/gnutls_server_fuzzer.in/1f575c489fb52d5795ec0ffcb6e4f09a2664e8bb new file mode 100644 index 0000000000..11b475fb8f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1f575c489fb52d5795ec0ffcb6e4f09a2664e8bb differ diff --git a/fuzz/gnutls_server_fuzzer.in/1f5f5b2a210964c500beaa3e680e3d0f4c482e6d b/fuzz/gnutls_server_fuzzer.in/1f5f5b2a210964c500beaa3e680e3d0f4c482e6d new file mode 100644 index 0000000000..ee0709b54b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1f5f5b2a210964c500beaa3e680e3d0f4c482e6d differ diff --git a/fuzz/gnutls_server_fuzzer.in/1f696470734db8148febfba089802bd737a8cffa b/fuzz/gnutls_server_fuzzer.in/1f696470734db8148febfba089802bd737a8cffa new file mode 100644 index 0000000000..9f28c30824 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1f696470734db8148febfba089802bd737a8cffa differ diff --git a/fuzz/gnutls_server_fuzzer.in/1f7685aded3ea6585e08b28feb21580760671baa b/fuzz/gnutls_server_fuzzer.in/1f7685aded3ea6585e08b28feb21580760671baa new file mode 100644 index 0000000000..b37ab1a93f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/1f7685aded3ea6585e08b28feb21580760671baa differ diff --git a/fuzz/gnutls_server_fuzzer.in/201687e4c482f834c1fa9a39e2594f2c0a84acb4 b/fuzz/gnutls_server_fuzzer.in/201687e4c482f834c1fa9a39e2594f2c0a84acb4 new file mode 100644 index 0000000000..4e22ccaed4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/201687e4c482f834c1fa9a39e2594f2c0a84acb4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2050aeb374a2e528c1abafdb5d6dc589e2e5bd96 b/fuzz/gnutls_server_fuzzer.in/2050aeb374a2e528c1abafdb5d6dc589e2e5bd96 new file mode 100644 index 0000000000..a073a9be6a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2050aeb374a2e528c1abafdb5d6dc589e2e5bd96 differ diff --git a/fuzz/gnutls_server_fuzzer.in/20765c08c48a9f8cdfab5a8f3bdc467f93556c30 b/fuzz/gnutls_server_fuzzer.in/20765c08c48a9f8cdfab5a8f3bdc467f93556c30 new file mode 100644 index 0000000000..c69a05afb4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/20765c08c48a9f8cdfab5a8f3bdc467f93556c30 differ diff --git a/fuzz/gnutls_server_fuzzer.in/208e0e48a30bd2bb1d6e74bc196e3fb57ce97c85 b/fuzz/gnutls_server_fuzzer.in/208e0e48a30bd2bb1d6e74bc196e3fb57ce97c85 new file mode 100644 index 0000000000..d66762dd99 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/208e0e48a30bd2bb1d6e74bc196e3fb57ce97c85 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2090009a94ff11208b54e34832aac9e360f3de56 b/fuzz/gnutls_server_fuzzer.in/2090009a94ff11208b54e34832aac9e360f3de56 new file mode 100644 index 0000000000..8215e4f842 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2090009a94ff11208b54e34832aac9e360f3de56 differ diff --git a/fuzz/gnutls_server_fuzzer.in/20f3791f53e2ae4eb138b135e49ca2ec3e3b1f3c b/fuzz/gnutls_server_fuzzer.in/20f3791f53e2ae4eb138b135e49ca2ec3e3b1f3c new file mode 100644 index 0000000000..d1a4a304b2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/20f3791f53e2ae4eb138b135e49ca2ec3e3b1f3c differ diff --git a/fuzz/gnutls_server_fuzzer.in/215037b6dade1a60aa9715376a2b628a65f7e03f b/fuzz/gnutls_server_fuzzer.in/215037b6dade1a60aa9715376a2b628a65f7e03f new file mode 100644 index 0000000000..615115c5fb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/215037b6dade1a60aa9715376a2b628a65f7e03f differ diff --git a/fuzz/gnutls_server_fuzzer.in/219f9892cf25abb4acb3bec8cd8e26fd67a571d4 b/fuzz/gnutls_server_fuzzer.in/219f9892cf25abb4acb3bec8cd8e26fd67a571d4 new file mode 100644 index 0000000000..1085f421e4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/219f9892cf25abb4acb3bec8cd8e26fd67a571d4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/21a1571d60953b74de06f9862954ab2631aa59f9 b/fuzz/gnutls_server_fuzzer.in/21a1571d60953b74de06f9862954ab2631aa59f9 new file mode 100644 index 0000000000..b2e1e10dd5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/21a1571d60953b74de06f9862954ab2631aa59f9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/21d20e1509962fef4ac1b4cab2b35cce6bc4d53b b/fuzz/gnutls_server_fuzzer.in/21d20e1509962fef4ac1b4cab2b35cce6bc4d53b new file mode 100644 index 0000000000..09034e0aec Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/21d20e1509962fef4ac1b4cab2b35cce6bc4d53b differ diff --git a/fuzz/gnutls_server_fuzzer.in/222f6b98dd5c7d53e750940982588e405bd9ed6d b/fuzz/gnutls_server_fuzzer.in/222f6b98dd5c7d53e750940982588e405bd9ed6d new file mode 100644 index 0000000000..1cb9e79bd3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/222f6b98dd5c7d53e750940982588e405bd9ed6d differ diff --git a/fuzz/gnutls_server_fuzzer.in/22519dc5b050b4be425c394c1ae5d2c8037d5c0a b/fuzz/gnutls_server_fuzzer.in/22519dc5b050b4be425c394c1ae5d2c8037d5c0a new file mode 100644 index 0000000000..0eac353031 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/22519dc5b050b4be425c394c1ae5d2c8037d5c0a differ diff --git a/fuzz/gnutls_server_fuzzer.in/225c40560497294be8a6cb32182cbdb190f96104 b/fuzz/gnutls_server_fuzzer.in/225c40560497294be8a6cb32182cbdb190f96104 new file mode 100644 index 0000000000..2c22175cf8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/225c40560497294be8a6cb32182cbdb190f96104 differ diff --git a/fuzz/gnutls_server_fuzzer.in/22cddbce108c9ca5e71f3bca4e7cfab920fff166 b/fuzz/gnutls_server_fuzzer.in/22cddbce108c9ca5e71f3bca4e7cfab920fff166 new file mode 100644 index 0000000000..bbeaafcb27 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/22cddbce108c9ca5e71f3bca4e7cfab920fff166 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2348c8ce863ff3171df0a316b0da12cc7f8c3efc b/fuzz/gnutls_server_fuzzer.in/2348c8ce863ff3171df0a316b0da12cc7f8c3efc new file mode 100644 index 0000000000..8e97d6f56b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2348c8ce863ff3171df0a316b0da12cc7f8c3efc differ diff --git a/fuzz/gnutls_server_fuzzer.in/239a40d5695cc3cecf65c4e44d9b32b8b275e86c b/fuzz/gnutls_server_fuzzer.in/239a40d5695cc3cecf65c4e44d9b32b8b275e86c new file mode 100644 index 0000000000..a446a25ef4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/239a40d5695cc3cecf65c4e44d9b32b8b275e86c differ diff --git a/fuzz/gnutls_server_fuzzer.in/23a4408e571d4bc941bc9a1d153149717d97d12a b/fuzz/gnutls_server_fuzzer.in/23a4408e571d4bc941bc9a1d153149717d97d12a new file mode 100644 index 0000000000..6b8274803e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/23a4408e571d4bc941bc9a1d153149717d97d12a differ diff --git a/fuzz/gnutls_server_fuzzer.in/23a736309194b13e41cc25255e69c99c2a51175c b/fuzz/gnutls_server_fuzzer.in/23a736309194b13e41cc25255e69c99c2a51175c new file mode 100644 index 0000000000..c12411361b --- /dev/null +++ b/fuzz/gnutls_server_fuzzer.in/23a736309194b13e41cc25255e69c99c2a51175c @@ -0,0 +1 @@ +00 \ No newline at end of file diff --git a/fuzz/gnutls_server_fuzzer.in/23ba5446bc93831d6075bc0ae50510747580162c b/fuzz/gnutls_server_fuzzer.in/23ba5446bc93831d6075bc0ae50510747580162c new file mode 100644 index 0000000000..4cab8280b8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/23ba5446bc93831d6075bc0ae50510747580162c differ diff --git a/fuzz/gnutls_server_fuzzer.in/23dba2755af97aceaf5bddba8d0f2de87f89ac78 b/fuzz/gnutls_server_fuzzer.in/23dba2755af97aceaf5bddba8d0f2de87f89ac78 new file mode 100644 index 0000000000..9d79c1aca8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/23dba2755af97aceaf5bddba8d0f2de87f89ac78 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2449d65da7a477f07db9ad8a57c984f11771ff44 b/fuzz/gnutls_server_fuzzer.in/2449d65da7a477f07db9ad8a57c984f11771ff44 new file mode 100644 index 0000000000..14398cc43c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2449d65da7a477f07db9ad8a57c984f11771ff44 differ diff --git a/fuzz/gnutls_server_fuzzer.in/24a28b361774ee633c7759a7a09d182283b3b8ca b/fuzz/gnutls_server_fuzzer.in/24a28b361774ee633c7759a7a09d182283b3b8ca new file mode 100644 index 0000000000..b03b658413 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/24a28b361774ee633c7759a7a09d182283b3b8ca differ diff --git a/fuzz/gnutls_server_fuzzer.in/2503ca6fc329d560a493666f1f80d9d0cbaab5fb b/fuzz/gnutls_server_fuzzer.in/2503ca6fc329d560a493666f1f80d9d0cbaab5fb new file mode 100644 index 0000000000..57aaae606c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2503ca6fc329d560a493666f1f80d9d0cbaab5fb differ diff --git a/fuzz/gnutls_server_fuzzer.in/25292a98baf3a74c9d4c2fc14f16cf4414c79e47 b/fuzz/gnutls_server_fuzzer.in/25292a98baf3a74c9d4c2fc14f16cf4414c79e47 new file mode 100644 index 0000000000..ae08dd1c82 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/25292a98baf3a74c9d4c2fc14f16cf4414c79e47 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2611414685b98830ed177e97baeb5f96996a0627 b/fuzz/gnutls_server_fuzzer.in/2611414685b98830ed177e97baeb5f96996a0627 new file mode 100644 index 0000000000..75a46e5757 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2611414685b98830ed177e97baeb5f96996a0627 differ diff --git a/fuzz/gnutls_server_fuzzer.in/269a0416629f8a68a28805a67b58b0468fdad9fe b/fuzz/gnutls_server_fuzzer.in/269a0416629f8a68a28805a67b58b0468fdad9fe new file mode 100644 index 0000000000..5700e4dd72 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/269a0416629f8a68a28805a67b58b0468fdad9fe differ diff --git a/fuzz/gnutls_server_fuzzer.in/26b1da4f7f5930005eaca5bb76cb98c93c7cb6ac b/fuzz/gnutls_server_fuzzer.in/26b1da4f7f5930005eaca5bb76cb98c93c7cb6ac new file mode 100644 index 0000000000..df0a8c5729 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/26b1da4f7f5930005eaca5bb76cb98c93c7cb6ac differ diff --git a/fuzz/gnutls_server_fuzzer.in/2704684cd4299080239a663f25d309311356940b b/fuzz/gnutls_server_fuzzer.in/2704684cd4299080239a663f25d309311356940b new file mode 100644 index 0000000000..e41e4fe2d1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2704684cd4299080239a663f25d309311356940b differ diff --git a/fuzz/gnutls_server_fuzzer.in/2713a17c710b3873f30968bed24255b745966edf b/fuzz/gnutls_server_fuzzer.in/2713a17c710b3873f30968bed24255b745966edf new file mode 100644 index 0000000000..fbcf4788d7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2713a17c710b3873f30968bed24255b745966edf differ diff --git a/fuzz/gnutls_server_fuzzer.in/27424206ce45def1a425ac4296ee1a9d2f9fa01e b/fuzz/gnutls_server_fuzzer.in/27424206ce45def1a425ac4296ee1a9d2f9fa01e new file mode 100644 index 0000000000..513ca56e6f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/27424206ce45def1a425ac4296ee1a9d2f9fa01e differ diff --git a/fuzz/gnutls_server_fuzzer.in/276438c4db4917bc54f930646e3742f2ae164654 b/fuzz/gnutls_server_fuzzer.in/276438c4db4917bc54f930646e3742f2ae164654 new file mode 100644 index 0000000000..2b6b1adb5a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/276438c4db4917bc54f930646e3742f2ae164654 differ diff --git a/fuzz/gnutls_server_fuzzer.in/276b02f47b0020717af059007350f9495061b7a4 b/fuzz/gnutls_server_fuzzer.in/276b02f47b0020717af059007350f9495061b7a4 new file mode 100644 index 0000000000..d924bfe9ba Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/276b02f47b0020717af059007350f9495061b7a4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/27e5e6d8c903dc5fd1fde1d24b3cfeceb992b907 b/fuzz/gnutls_server_fuzzer.in/27e5e6d8c903dc5fd1fde1d24b3cfeceb992b907 new file mode 100644 index 0000000000..aada601e4c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/27e5e6d8c903dc5fd1fde1d24b3cfeceb992b907 differ diff --git a/fuzz/gnutls_server_fuzzer.in/27f0807b0c7459a788022d12017a38ee66d8b190 b/fuzz/gnutls_server_fuzzer.in/27f0807b0c7459a788022d12017a38ee66d8b190 new file mode 100644 index 0000000000..8544b5641d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/27f0807b0c7459a788022d12017a38ee66d8b190 differ diff --git a/fuzz/gnutls_server_fuzzer.in/281eb87d23f7403241a4f581a2ad3db8dd25b855 b/fuzz/gnutls_server_fuzzer.in/281eb87d23f7403241a4f581a2ad3db8dd25b855 new file mode 100644 index 0000000000..9980a7401f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/281eb87d23f7403241a4f581a2ad3db8dd25b855 differ diff --git a/fuzz/gnutls_server_fuzzer.in/283c91ccba290fdcd79062739622ce074ad433dc b/fuzz/gnutls_server_fuzzer.in/283c91ccba290fdcd79062739622ce074ad433dc new file mode 100644 index 0000000000..daffe107d2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/283c91ccba290fdcd79062739622ce074ad433dc differ diff --git a/fuzz/gnutls_server_fuzzer.in/285dc4af7c78589f410e8dd9e498798afe630371 b/fuzz/gnutls_server_fuzzer.in/285dc4af7c78589f410e8dd9e498798afe630371 new file mode 100644 index 0000000000..51df50c42c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/285dc4af7c78589f410e8dd9e498798afe630371 differ diff --git a/fuzz/gnutls_server_fuzzer.in/29471e1848cda8e748399674279960c98143f31c b/fuzz/gnutls_server_fuzzer.in/29471e1848cda8e748399674279960c98143f31c new file mode 100644 index 0000000000..7fd69536ad Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/29471e1848cda8e748399674279960c98143f31c differ diff --git a/fuzz/gnutls_server_fuzzer.in/297fc7d462152f3d1b7dd94105658fbe048b4b65 b/fuzz/gnutls_server_fuzzer.in/297fc7d462152f3d1b7dd94105658fbe048b4b65 new file mode 100644 index 0000000000..f2046272aa Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/297fc7d462152f3d1b7dd94105658fbe048b4b65 differ diff --git a/fuzz/gnutls_server_fuzzer.in/29f7a2c6f5c7ee3b9a3b36dc2eab2a723f3c1090 b/fuzz/gnutls_server_fuzzer.in/29f7a2c6f5c7ee3b9a3b36dc2eab2a723f3c1090 new file mode 100644 index 0000000000..382b3cd4b2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/29f7a2c6f5c7ee3b9a3b36dc2eab2a723f3c1090 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2a35544e29a1f2f71351678b1b2dd1c1c8653298 b/fuzz/gnutls_server_fuzzer.in/2a35544e29a1f2f71351678b1b2dd1c1c8653298 new file mode 100644 index 0000000000..aaed5a6b1a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2a35544e29a1f2f71351678b1b2dd1c1c8653298 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2a452f7e6534a6393893e8ff5831d99297b6603d b/fuzz/gnutls_server_fuzzer.in/2a452f7e6534a6393893e8ff5831d99297b6603d new file mode 100644 index 0000000000..f2e410e112 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2a452f7e6534a6393893e8ff5831d99297b6603d differ diff --git a/fuzz/gnutls_server_fuzzer.in/2ac61adf3380e1e608ec834418e480a25a5e72d5 b/fuzz/gnutls_server_fuzzer.in/2ac61adf3380e1e608ec834418e480a25a5e72d5 new file mode 100644 index 0000000000..2ccfe73ab2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2ac61adf3380e1e608ec834418e480a25a5e72d5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2b2ee3dd2ffabe041e2c9cf0053d3facfcdd11df b/fuzz/gnutls_server_fuzzer.in/2b2ee3dd2ffabe041e2c9cf0053d3facfcdd11df new file mode 100644 index 0000000000..afac5a1db1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2b2ee3dd2ffabe041e2c9cf0053d3facfcdd11df differ diff --git a/fuzz/gnutls_server_fuzzer.in/2b4437dc73126b9f7a6e959cd3ff841b4606bdd7 b/fuzz/gnutls_server_fuzzer.in/2b4437dc73126b9f7a6e959cd3ff841b4606bdd7 new file mode 100644 index 0000000000..a17ab4dc07 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2b4437dc73126b9f7a6e959cd3ff841b4606bdd7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2b49affd017c45506532650315f7366777652daa b/fuzz/gnutls_server_fuzzer.in/2b49affd017c45506532650315f7366777652daa new file mode 100644 index 0000000000..754eb48595 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2b49affd017c45506532650315f7366777652daa differ diff --git a/fuzz/gnutls_server_fuzzer.in/2bbc32a5d36e1a22ec930d530b3e586a3d98a634 b/fuzz/gnutls_server_fuzzer.in/2bbc32a5d36e1a22ec930d530b3e586a3d98a634 new file mode 100644 index 0000000000..4989aa27b0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2bbc32a5d36e1a22ec930d530b3e586a3d98a634 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2c76e803694a2a9c18a57b0667009dc1da13a0a9 b/fuzz/gnutls_server_fuzzer.in/2c76e803694a2a9c18a57b0667009dc1da13a0a9 new file mode 100644 index 0000000000..eab7498299 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2c76e803694a2a9c18a57b0667009dc1da13a0a9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2d4dd84245e7feff6e7ed96d3d0bb01a627fcce2 b/fuzz/gnutls_server_fuzzer.in/2d4dd84245e7feff6e7ed96d3d0bb01a627fcce2 new file mode 100644 index 0000000000..e6472dbd0c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2d4dd84245e7feff6e7ed96d3d0bb01a627fcce2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2d914e796e36330f20fbff7ede6f906fde1dc179 b/fuzz/gnutls_server_fuzzer.in/2d914e796e36330f20fbff7ede6f906fde1dc179 new file mode 100644 index 0000000000..0ad9deb564 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2d914e796e36330f20fbff7ede6f906fde1dc179 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2de7602d7f0b5994abf8e62e5d9211a2ec1895b4 b/fuzz/gnutls_server_fuzzer.in/2de7602d7f0b5994abf8e62e5d9211a2ec1895b4 new file mode 100644 index 0000000000..356137563b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2de7602d7f0b5994abf8e62e5d9211a2ec1895b4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2e4d8f4a9ab0633b217927774cbbd244711e22e9 b/fuzz/gnutls_server_fuzzer.in/2e4d8f4a9ab0633b217927774cbbd244711e22e9 new file mode 100644 index 0000000000..7bb8a40f71 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2e4d8f4a9ab0633b217927774cbbd244711e22e9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2e9caaefe2a8d00ac771a0deae0e9bf2f6a2259a b/fuzz/gnutls_server_fuzzer.in/2e9caaefe2a8d00ac771a0deae0e9bf2f6a2259a new file mode 100644 index 0000000000..5bba70e910 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2e9caaefe2a8d00ac771a0deae0e9bf2f6a2259a differ diff --git a/fuzz/gnutls_server_fuzzer.in/2eb50ddda020b58fc3c1d99e3d3a55205f98e005 b/fuzz/gnutls_server_fuzzer.in/2eb50ddda020b58fc3c1d99e3d3a55205f98e005 new file mode 100644 index 0000000000..d61056ec98 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2eb50ddda020b58fc3c1d99e3d3a55205f98e005 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2ebf05cbc094edcb498897907aac89671c2744d4 b/fuzz/gnutls_server_fuzzer.in/2ebf05cbc094edcb498897907aac89671c2744d4 new file mode 100644 index 0000000000..c0903b6c47 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2ebf05cbc094edcb498897907aac89671c2744d4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2f6f9ebb4eab38364b71ef42235a16ad99e77d00 b/fuzz/gnutls_server_fuzzer.in/2f6f9ebb4eab38364b71ef42235a16ad99e77d00 new file mode 100644 index 0000000000..ca2ed3524f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2f6f9ebb4eab38364b71ef42235a16ad99e77d00 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2f765876b13175151be2b1c571a511a1d530132f b/fuzz/gnutls_server_fuzzer.in/2f765876b13175151be2b1c571a511a1d530132f new file mode 100644 index 0000000000..c73ddf2b6c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2f765876b13175151be2b1c571a511a1d530132f differ diff --git a/fuzz/gnutls_server_fuzzer.in/2f8e61d9f4e6893880bf16f614b1623146612706 b/fuzz/gnutls_server_fuzzer.in/2f8e61d9f4e6893880bf16f614b1623146612706 new file mode 100644 index 0000000000..ae36968636 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2f8e61d9f4e6893880bf16f614b1623146612706 differ diff --git a/fuzz/gnutls_server_fuzzer.in/2feb494fe6bde750079e08cc1d9adb9bb5826603 b/fuzz/gnutls_server_fuzzer.in/2feb494fe6bde750079e08cc1d9adb9bb5826603 new file mode 100644 index 0000000000..2f1edaf846 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/2feb494fe6bde750079e08cc1d9adb9bb5826603 differ diff --git a/fuzz/gnutls_server_fuzzer.in/300f89f1a69f01995b72f63f238b6b2c30f99734 b/fuzz/gnutls_server_fuzzer.in/300f89f1a69f01995b72f63f238b6b2c30f99734 new file mode 100644 index 0000000000..bd5fc93d6f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/300f89f1a69f01995b72f63f238b6b2c30f99734 differ diff --git a/fuzz/gnutls_server_fuzzer.in/304f60f13fdc2c464bc089cb3a0b9c598c0a4d03 b/fuzz/gnutls_server_fuzzer.in/304f60f13fdc2c464bc089cb3a0b9c598c0a4d03 new file mode 100644 index 0000000000..49e20825bf Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/304f60f13fdc2c464bc089cb3a0b9c598c0a4d03 differ diff --git a/fuzz/gnutls_server_fuzzer.in/30c35967ff13456c04adf717f4e576134fa0fb90 b/fuzz/gnutls_server_fuzzer.in/30c35967ff13456c04adf717f4e576134fa0fb90 new file mode 100644 index 0000000000..117e70669d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/30c35967ff13456c04adf717f4e576134fa0fb90 differ diff --git a/fuzz/gnutls_server_fuzzer.in/30f1ae3b7942334d7cc3e4030de172b698b26a86 b/fuzz/gnutls_server_fuzzer.in/30f1ae3b7942334d7cc3e4030de172b698b26a86 new file mode 100644 index 0000000000..0d9b13cf29 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/30f1ae3b7942334d7cc3e4030de172b698b26a86 differ diff --git a/fuzz/gnutls_server_fuzzer.in/311f9a81f23f5a627fd262f6a308b93943bda87c b/fuzz/gnutls_server_fuzzer.in/311f9a81f23f5a627fd262f6a308b93943bda87c new file mode 100644 index 0000000000..a3b55c096b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/311f9a81f23f5a627fd262f6a308b93943bda87c differ diff --git a/fuzz/gnutls_server_fuzzer.in/312b1e2cadd51d0871cb6600b90c078d80e9d90c b/fuzz/gnutls_server_fuzzer.in/312b1e2cadd51d0871cb6600b90c078d80e9d90c new file mode 100644 index 0000000000..9bc357fd70 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/312b1e2cadd51d0871cb6600b90c078d80e9d90c differ diff --git a/fuzz/gnutls_server_fuzzer.in/3149dc017f5334e12766aa01b51666edabd6d842 b/fuzz/gnutls_server_fuzzer.in/3149dc017f5334e12766aa01b51666edabd6d842 new file mode 100644 index 0000000000..0bac4a308d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3149dc017f5334e12766aa01b51666edabd6d842 differ diff --git a/fuzz/gnutls_server_fuzzer.in/314a5f76678c61eb745790276497cbf9e4e726b7 b/fuzz/gnutls_server_fuzzer.in/314a5f76678c61eb745790276497cbf9e4e726b7 new file mode 100644 index 0000000000..bd19aa6317 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/314a5f76678c61eb745790276497cbf9e4e726b7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/315508a1b00510bb5f9e2252ee742bec6f16619d b/fuzz/gnutls_server_fuzzer.in/315508a1b00510bb5f9e2252ee742bec6f16619d new file mode 100644 index 0000000000..36c10bc2d1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/315508a1b00510bb5f9e2252ee742bec6f16619d differ diff --git a/fuzz/gnutls_server_fuzzer.in/320ec86a49129b404c4ec4f42a748b07df63be91 b/fuzz/gnutls_server_fuzzer.in/320ec86a49129b404c4ec4f42a748b07df63be91 new file mode 100644 index 0000000000..1ef596cd68 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/320ec86a49129b404c4ec4f42a748b07df63be91 differ diff --git a/fuzz/gnutls_server_fuzzer.in/322c7930a22bc87b92ce7fde3b95eb760e56fdbf b/fuzz/gnutls_server_fuzzer.in/322c7930a22bc87b92ce7fde3b95eb760e56fdbf new file mode 100644 index 0000000000..2fbb0a288e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/322c7930a22bc87b92ce7fde3b95eb760e56fdbf differ diff --git a/fuzz/gnutls_server_fuzzer.in/325a7d33fea6cbc63551d0777fb82d5e2239c20e b/fuzz/gnutls_server_fuzzer.in/325a7d33fea6cbc63551d0777fb82d5e2239c20e new file mode 100644 index 0000000000..f412756859 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/325a7d33fea6cbc63551d0777fb82d5e2239c20e differ diff --git a/fuzz/gnutls_server_fuzzer.in/33260ed998f8db9c5364df5704902328af6ef43e b/fuzz/gnutls_server_fuzzer.in/33260ed998f8db9c5364df5704902328af6ef43e new file mode 100644 index 0000000000..d672086ff9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/33260ed998f8db9c5364df5704902328af6ef43e differ diff --git a/fuzz/gnutls_server_fuzzer.in/337b445ab3ab77995777b5c630898bcc046100dc b/fuzz/gnutls_server_fuzzer.in/337b445ab3ab77995777b5c630898bcc046100dc new file mode 100644 index 0000000000..213df06b68 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/337b445ab3ab77995777b5c630898bcc046100dc differ diff --git a/fuzz/gnutls_server_fuzzer.in/33b89be7843844353d1b9e1c5681d980717dc4ed b/fuzz/gnutls_server_fuzzer.in/33b89be7843844353d1b9e1c5681d980717dc4ed new file mode 100644 index 0000000000..61b981c9d3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/33b89be7843844353d1b9e1c5681d980717dc4ed differ diff --git a/fuzz/gnutls_server_fuzzer.in/33e41b157f8af6d113c177bfcef0200bacccdfa4 b/fuzz/gnutls_server_fuzzer.in/33e41b157f8af6d113c177bfcef0200bacccdfa4 new file mode 100644 index 0000000000..00925027df Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/33e41b157f8af6d113c177bfcef0200bacccdfa4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/33e57029e26c6d4ad618197bc4756310a87edf68 b/fuzz/gnutls_server_fuzzer.in/33e57029e26c6d4ad618197bc4756310a87edf68 new file mode 100644 index 0000000000..1dc7dc644e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/33e57029e26c6d4ad618197bc4756310a87edf68 differ diff --git a/fuzz/gnutls_server_fuzzer.in/33ff7a4d9e656556aa510a2ef02d4dcb241a6f06 b/fuzz/gnutls_server_fuzzer.in/33ff7a4d9e656556aa510a2ef02d4dcb241a6f06 new file mode 100644 index 0000000000..6e172ec780 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/33ff7a4d9e656556aa510a2ef02d4dcb241a6f06 differ diff --git a/fuzz/gnutls_server_fuzzer.in/34486ba65aaf03e3576580d866320921301d952e b/fuzz/gnutls_server_fuzzer.in/34486ba65aaf03e3576580d866320921301d952e new file mode 100644 index 0000000000..05011c1583 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/34486ba65aaf03e3576580d866320921301d952e differ diff --git a/fuzz/gnutls_server_fuzzer.in/34b0c402e25001c2503a937f19a8d7df82870c30 b/fuzz/gnutls_server_fuzzer.in/34b0c402e25001c2503a937f19a8d7df82870c30 new file mode 100644 index 0000000000..007d5a85e7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/34b0c402e25001c2503a937f19a8d7df82870c30 differ diff --git a/fuzz/gnutls_server_fuzzer.in/34f24af17d4c11e289daa39bb5f6f8573f915c71 b/fuzz/gnutls_server_fuzzer.in/34f24af17d4c11e289daa39bb5f6f8573f915c71 new file mode 100644 index 0000000000..c25b9ab249 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/34f24af17d4c11e289daa39bb5f6f8573f915c71 differ diff --git a/fuzz/gnutls_server_fuzzer.in/355580ebb129630a1890736f64dd81a49c72a51c b/fuzz/gnutls_server_fuzzer.in/355580ebb129630a1890736f64dd81a49c72a51c new file mode 100644 index 0000000000..2d37f4e29a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/355580ebb129630a1890736f64dd81a49c72a51c differ diff --git a/fuzz/gnutls_server_fuzzer.in/3584e46c1bafc76eca84aec3088f02420e9a023d b/fuzz/gnutls_server_fuzzer.in/3584e46c1bafc76eca84aec3088f02420e9a023d new file mode 100644 index 0000000000..9a9adccf53 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3584e46c1bafc76eca84aec3088f02420e9a023d differ diff --git a/fuzz/gnutls_server_fuzzer.in/3687ffa7b4bd666c580bf6b0ee4f3b783e845ed6 b/fuzz/gnutls_server_fuzzer.in/3687ffa7b4bd666c580bf6b0ee4f3b783e845ed6 new file mode 100644 index 0000000000..a0760ee86a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3687ffa7b4bd666c580bf6b0ee4f3b783e845ed6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/36e2ffd05a640c192fcc042bbc8a10a6e2e96554 b/fuzz/gnutls_server_fuzzer.in/36e2ffd05a640c192fcc042bbc8a10a6e2e96554 new file mode 100644 index 0000000000..08b9687dd2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/36e2ffd05a640c192fcc042bbc8a10a6e2e96554 differ diff --git a/fuzz/gnutls_server_fuzzer.in/36ed12571d9b559b8832399ee7d21e56b3a6c9ed b/fuzz/gnutls_server_fuzzer.in/36ed12571d9b559b8832399ee7d21e56b3a6c9ed new file mode 100644 index 0000000000..88eb623888 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/36ed12571d9b559b8832399ee7d21e56b3a6c9ed differ diff --git a/fuzz/gnutls_server_fuzzer.in/36ffe41547b8a11e9062e63af3c5f76273430e7b b/fuzz/gnutls_server_fuzzer.in/36ffe41547b8a11e9062e63af3c5f76273430e7b new file mode 100644 index 0000000000..573589750b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/36ffe41547b8a11e9062e63af3c5f76273430e7b differ diff --git a/fuzz/gnutls_server_fuzzer.in/3700d278364d26db7ea0f86e29dc408f7513b6eb b/fuzz/gnutls_server_fuzzer.in/3700d278364d26db7ea0f86e29dc408f7513b6eb new file mode 100644 index 0000000000..8c41c6b7f8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3700d278364d26db7ea0f86e29dc408f7513b6eb differ diff --git a/fuzz/gnutls_server_fuzzer.in/3767c786ebd33d96424c139edb35301fd159556c b/fuzz/gnutls_server_fuzzer.in/3767c786ebd33d96424c139edb35301fd159556c new file mode 100644 index 0000000000..cb67d341f7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3767c786ebd33d96424c139edb35301fd159556c differ diff --git a/fuzz/gnutls_server_fuzzer.in/376f2d048d3bae588427483579215d1b5230a3b5 b/fuzz/gnutls_server_fuzzer.in/376f2d048d3bae588427483579215d1b5230a3b5 new file mode 100644 index 0000000000..191ad5cb92 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/376f2d048d3bae588427483579215d1b5230a3b5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/379c91a05f26c74e37c71196d02fbe61ed2c49e3 b/fuzz/gnutls_server_fuzzer.in/379c91a05f26c74e37c71196d02fbe61ed2c49e3 new file mode 100644 index 0000000000..e7a1ab9a72 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/379c91a05f26c74e37c71196d02fbe61ed2c49e3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/381eba52617d6bf64faf74a6cdca1027d066fb17 b/fuzz/gnutls_server_fuzzer.in/381eba52617d6bf64faf74a6cdca1027d066fb17 new file mode 100644 index 0000000000..72d06a0eb0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/381eba52617d6bf64faf74a6cdca1027d066fb17 differ diff --git a/fuzz/gnutls_server_fuzzer.in/386c507b5f4418bc939734c9424d0627691c74fa b/fuzz/gnutls_server_fuzzer.in/386c507b5f4418bc939734c9424d0627691c74fa new file mode 100644 index 0000000000..1eae164287 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/386c507b5f4418bc939734c9424d0627691c74fa differ diff --git a/fuzz/gnutls_server_fuzzer.in/39118bb2dbc5f2374cb5bf886afa729c482a3f40 b/fuzz/gnutls_server_fuzzer.in/39118bb2dbc5f2374cb5bf886afa729c482a3f40 new file mode 100644 index 0000000000..bf8930140f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/39118bb2dbc5f2374cb5bf886afa729c482a3f40 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3938df41615316e262a4252fba224265852a5c9e b/fuzz/gnutls_server_fuzzer.in/3938df41615316e262a4252fba224265852a5c9e new file mode 100644 index 0000000000..7512da4474 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3938df41615316e262a4252fba224265852a5c9e differ diff --git a/fuzz/gnutls_server_fuzzer.in/3988e013b1c60d78a3d2835f170512519b9652bd b/fuzz/gnutls_server_fuzzer.in/3988e013b1c60d78a3d2835f170512519b9652bd new file mode 100644 index 0000000000..36084e1685 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3988e013b1c60d78a3d2835f170512519b9652bd differ diff --git a/fuzz/gnutls_server_fuzzer.in/39b5a97e650642e9e0bd11a0d57721c75743fa3b b/fuzz/gnutls_server_fuzzer.in/39b5a97e650642e9e0bd11a0d57721c75743fa3b new file mode 100644 index 0000000000..2ac340ab28 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/39b5a97e650642e9e0bd11a0d57721c75743fa3b differ diff --git a/fuzz/gnutls_server_fuzzer.in/39c96743029f3543788dd5e1a2dbf18af377dafa b/fuzz/gnutls_server_fuzzer.in/39c96743029f3543788dd5e1a2dbf18af377dafa new file mode 100644 index 0000000000..e557f08e54 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/39c96743029f3543788dd5e1a2dbf18af377dafa differ diff --git a/fuzz/gnutls_server_fuzzer.in/39cb3d558d24b92b284ba11d1e7abe951bfee942 b/fuzz/gnutls_server_fuzzer.in/39cb3d558d24b92b284ba11d1e7abe951bfee942 new file mode 100644 index 0000000000..82dcf44ba9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/39cb3d558d24b92b284ba11d1e7abe951bfee942 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3a19f66b2f11ecc011b189beda54053652f83209 b/fuzz/gnutls_server_fuzzer.in/3a19f66b2f11ecc011b189beda54053652f83209 new file mode 100644 index 0000000000..3370d42d4e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3a19f66b2f11ecc011b189beda54053652f83209 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3a39e68f6e56c7abe5a54c1ba22d1c67d254ceeb b/fuzz/gnutls_server_fuzzer.in/3a39e68f6e56c7abe5a54c1ba22d1c67d254ceeb new file mode 100644 index 0000000000..b5c8ee61d8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3a39e68f6e56c7abe5a54c1ba22d1c67d254ceeb differ diff --git a/fuzz/gnutls_server_fuzzer.in/3a569f8e20f0a19ef850f0b0f87d081b74a1ed05 b/fuzz/gnutls_server_fuzzer.in/3a569f8e20f0a19ef850f0b0f87d081b74a1ed05 new file mode 100644 index 0000000000..4ab4a5e976 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3a569f8e20f0a19ef850f0b0f87d081b74a1ed05 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3a78dba5a41bb0c17d5aef3c652e5c45c5764e63 b/fuzz/gnutls_server_fuzzer.in/3a78dba5a41bb0c17d5aef3c652e5c45c5764e63 new file mode 100644 index 0000000000..0447b7b28c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3a78dba5a41bb0c17d5aef3c652e5c45c5764e63 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3b1d52b5f94b21f9c254317fdfc2f3d294843e2e b/fuzz/gnutls_server_fuzzer.in/3b1d52b5f94b21f9c254317fdfc2f3d294843e2e new file mode 100644 index 0000000000..b2358c3835 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3b1d52b5f94b21f9c254317fdfc2f3d294843e2e differ diff --git a/fuzz/gnutls_server_fuzzer.in/3b1f932c60473c1d7ef55c0bc6601e1c990e6dc5 b/fuzz/gnutls_server_fuzzer.in/3b1f932c60473c1d7ef55c0bc6601e1c990e6dc5 new file mode 100644 index 0000000000..1d782b6a86 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3b1f932c60473c1d7ef55c0bc6601e1c990e6dc5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3b545e759817e2ed58923e8c1bbbdb03b4dba287 b/fuzz/gnutls_server_fuzzer.in/3b545e759817e2ed58923e8c1bbbdb03b4dba287 new file mode 100644 index 0000000000..a0a40121bb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3b545e759817e2ed58923e8c1bbbdb03b4dba287 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3b85a09fc6b574ec83afb9dae6b6078ff2bec442 b/fuzz/gnutls_server_fuzzer.in/3b85a09fc6b574ec83afb9dae6b6078ff2bec442 new file mode 100644 index 0000000000..f5af2fa00b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3b85a09fc6b574ec83afb9dae6b6078ff2bec442 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3c00df7346ebe9094e45e7dd50963a659530fee4 b/fuzz/gnutls_server_fuzzer.in/3c00df7346ebe9094e45e7dd50963a659530fee4 new file mode 100644 index 0000000000..02e2babc28 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3c00df7346ebe9094e45e7dd50963a659530fee4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3c69b03dc0f43fa6d42b165547516050efd1e077 b/fuzz/gnutls_server_fuzzer.in/3c69b03dc0f43fa6d42b165547516050efd1e077 new file mode 100644 index 0000000000..ffd89fb63a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3c69b03dc0f43fa6d42b165547516050efd1e077 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3c700e0a169cd8af1ca765534290df5d6af57b2c b/fuzz/gnutls_server_fuzzer.in/3c700e0a169cd8af1ca765534290df5d6af57b2c new file mode 100644 index 0000000000..8ca9f3e84e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3c700e0a169cd8af1ca765534290df5d6af57b2c differ diff --git a/fuzz/gnutls_server_fuzzer.in/3c82b520661351f755de297717ecf8c8c6513316 b/fuzz/gnutls_server_fuzzer.in/3c82b520661351f755de297717ecf8c8c6513316 new file mode 100644 index 0000000000..23acdeb41b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3c82b520661351f755de297717ecf8c8c6513316 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3d43ba4aef94a5d4dd30f86ff83ffc61212f1f0e b/fuzz/gnutls_server_fuzzer.in/3d43ba4aef94a5d4dd30f86ff83ffc61212f1f0e new file mode 100644 index 0000000000..d7feb25a37 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3d43ba4aef94a5d4dd30f86ff83ffc61212f1f0e differ diff --git a/fuzz/gnutls_server_fuzzer.in/3d7e7ef7f9de9f1ca6558824877e103afa9fa547 b/fuzz/gnutls_server_fuzzer.in/3d7e7ef7f9de9f1ca6558824877e103afa9fa547 new file mode 100644 index 0000000000..339a45d9f4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3d7e7ef7f9de9f1ca6558824877e103afa9fa547 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3df018b781377bca1b1df10f50285e887871c884 b/fuzz/gnutls_server_fuzzer.in/3df018b781377bca1b1df10f50285e887871c884 new file mode 100644 index 0000000000..7a0b9f498a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3df018b781377bca1b1df10f50285e887871c884 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3df1c1557e5e63cc3b771063b6890b7fb6c549be b/fuzz/gnutls_server_fuzzer.in/3df1c1557e5e63cc3b771063b6890b7fb6c549be new file mode 100644 index 0000000000..2eb7f7f80e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3df1c1557e5e63cc3b771063b6890b7fb6c549be differ diff --git a/fuzz/gnutls_server_fuzzer.in/3e4de6aae612c649447b81ef1c88f0f28a50fa8a b/fuzz/gnutls_server_fuzzer.in/3e4de6aae612c649447b81ef1c88f0f28a50fa8a new file mode 100644 index 0000000000..114ed211be Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3e4de6aae612c649447b81ef1c88f0f28a50fa8a differ diff --git a/fuzz/gnutls_server_fuzzer.in/3e92f24a3b65e0f996f7e7be9feb970de59ef2a2 b/fuzz/gnutls_server_fuzzer.in/3e92f24a3b65e0f996f7e7be9feb970de59ef2a2 new file mode 100644 index 0000000000..6a84ba2dd2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3e92f24a3b65e0f996f7e7be9feb970de59ef2a2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3eedb57c23bf3c23aeb616930df2800becf5e096 b/fuzz/gnutls_server_fuzzer.in/3eedb57c23bf3c23aeb616930df2800becf5e096 new file mode 100644 index 0000000000..13f46a5dbe Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3eedb57c23bf3c23aeb616930df2800becf5e096 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3f8b3d0d0861ce76c57355d4e11eec2004e53c79 b/fuzz/gnutls_server_fuzzer.in/3f8b3d0d0861ce76c57355d4e11eec2004e53c79 new file mode 100644 index 0000000000..f1064d9c77 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3f8b3d0d0861ce76c57355d4e11eec2004e53c79 differ diff --git a/fuzz/gnutls_server_fuzzer.in/3fd0860bb0d7e67ec361f8ecff8bc36ffb1265bf b/fuzz/gnutls_server_fuzzer.in/3fd0860bb0d7e67ec361f8ecff8bc36ffb1265bf new file mode 100644 index 0000000000..3b3c2fab33 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/3fd0860bb0d7e67ec361f8ecff8bc36ffb1265bf differ diff --git a/fuzz/gnutls_server_fuzzer.in/406ca1d8db17dfcb28462a20f0e01b9221ad7dfd b/fuzz/gnutls_server_fuzzer.in/406ca1d8db17dfcb28462a20f0e01b9221ad7dfd new file mode 100644 index 0000000000..d4656bc804 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/406ca1d8db17dfcb28462a20f0e01b9221ad7dfd differ diff --git a/fuzz/gnutls_server_fuzzer.in/422cd09ccfb03559ac1fcee53d9b2df6cd9af4ea b/fuzz/gnutls_server_fuzzer.in/422cd09ccfb03559ac1fcee53d9b2df6cd9af4ea new file mode 100644 index 0000000000..1e0fec5624 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/422cd09ccfb03559ac1fcee53d9b2df6cd9af4ea differ diff --git a/fuzz/gnutls_server_fuzzer.in/42342a91fe3470e22ba9d3b064728536aca83f48 b/fuzz/gnutls_server_fuzzer.in/42342a91fe3470e22ba9d3b064728536aca83f48 new file mode 100644 index 0000000000..ed8e3e0f25 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/42342a91fe3470e22ba9d3b064728536aca83f48 differ diff --git a/fuzz/gnutls_server_fuzzer.in/42dd966cc4efa081eeecef9706978b472f19676a b/fuzz/gnutls_server_fuzzer.in/42dd966cc4efa081eeecef9706978b472f19676a new file mode 100644 index 0000000000..a749d77703 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/42dd966cc4efa081eeecef9706978b472f19676a differ diff --git a/fuzz/gnutls_server_fuzzer.in/43216bd2fb3084e45897e7cb1748bd1f515dd338 b/fuzz/gnutls_server_fuzzer.in/43216bd2fb3084e45897e7cb1748bd1f515dd338 new file mode 100644 index 0000000000..5829c5ba4e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/43216bd2fb3084e45897e7cb1748bd1f515dd338 differ diff --git a/fuzz/gnutls_server_fuzzer.in/434a3d52b89947768c48955a1237ee37b8433489 b/fuzz/gnutls_server_fuzzer.in/434a3d52b89947768c48955a1237ee37b8433489 new file mode 100644 index 0000000000..9bdc0ae29e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/434a3d52b89947768c48955a1237ee37b8433489 differ diff --git a/fuzz/gnutls_server_fuzzer.in/43c0f63b7a4fa791e24f3139d108b61c461120e7 b/fuzz/gnutls_server_fuzzer.in/43c0f63b7a4fa791e24f3139d108b61c461120e7 new file mode 100644 index 0000000000..d0fde27600 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/43c0f63b7a4fa791e24f3139d108b61c461120e7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/440bb1e7fc77f38328e1e3db5aa51259709a31d0 b/fuzz/gnutls_server_fuzzer.in/440bb1e7fc77f38328e1e3db5aa51259709a31d0 new file mode 100644 index 0000000000..7b2800e3c3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/440bb1e7fc77f38328e1e3db5aa51259709a31d0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/445cee61f1f7416268030e4e33e6939babb1feb1 b/fuzz/gnutls_server_fuzzer.in/445cee61f1f7416268030e4e33e6939babb1feb1 new file mode 100644 index 0000000000..a4e8997d01 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/445cee61f1f7416268030e4e33e6939babb1feb1 differ diff --git a/fuzz/gnutls_server_fuzzer.in/446e0794e7158745cc4da8cf47ecd2dbfadbd343 b/fuzz/gnutls_server_fuzzer.in/446e0794e7158745cc4da8cf47ecd2dbfadbd343 new file mode 100644 index 0000000000..8423d51596 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/446e0794e7158745cc4da8cf47ecd2dbfadbd343 differ diff --git a/fuzz/gnutls_server_fuzzer.in/447cfe9705d24ed5583fbe06cc2eb036f5ca057c b/fuzz/gnutls_server_fuzzer.in/447cfe9705d24ed5583fbe06cc2eb036f5ca057c new file mode 100644 index 0000000000..a2f2bbe804 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/447cfe9705d24ed5583fbe06cc2eb036f5ca057c differ diff --git a/fuzz/gnutls_server_fuzzer.in/44b8dfaef6dcf68adfe8a6170bb16e2b2fb9fc22 b/fuzz/gnutls_server_fuzzer.in/44b8dfaef6dcf68adfe8a6170bb16e2b2fb9fc22 new file mode 100644 index 0000000000..639de21e15 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/44b8dfaef6dcf68adfe8a6170bb16e2b2fb9fc22 differ diff --git a/fuzz/gnutls_server_fuzzer.in/44c9bcec23d42e820489d742172c641b925ec5a9 b/fuzz/gnutls_server_fuzzer.in/44c9bcec23d42e820489d742172c641b925ec5a9 new file mode 100644 index 0000000000..9fc755bbbe Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/44c9bcec23d42e820489d742172c641b925ec5a9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/45c68a4bf9e51f0d86d55ecd9c23018e7a9581f9 b/fuzz/gnutls_server_fuzzer.in/45c68a4bf9e51f0d86d55ecd9c23018e7a9581f9 new file mode 100644 index 0000000000..64a760c3fc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/45c68a4bf9e51f0d86d55ecd9c23018e7a9581f9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/45e3f14118eefdbf4c8ccd81b3f6d1d149c19e99 b/fuzz/gnutls_server_fuzzer.in/45e3f14118eefdbf4c8ccd81b3f6d1d149c19e99 new file mode 100644 index 0000000000..9fcdb0f003 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/45e3f14118eefdbf4c8ccd81b3f6d1d149c19e99 differ diff --git a/fuzz/gnutls_server_fuzzer.in/474ac784c6d5e28429fe00b208e5176a96716e7f b/fuzz/gnutls_server_fuzzer.in/474ac784c6d5e28429fe00b208e5176a96716e7f new file mode 100644 index 0000000000..3eceec463e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/474ac784c6d5e28429fe00b208e5176a96716e7f differ diff --git a/fuzz/gnutls_server_fuzzer.in/474c52493322f2142aa955e23101df9978e94e65 b/fuzz/gnutls_server_fuzzer.in/474c52493322f2142aa955e23101df9978e94e65 new file mode 100644 index 0000000000..708cb265f0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/474c52493322f2142aa955e23101df9978e94e65 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4786a7ae7b738511b56a8c144363d9a501f7a43c b/fuzz/gnutls_server_fuzzer.in/4786a7ae7b738511b56a8c144363d9a501f7a43c new file mode 100644 index 0000000000..c50032698b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4786a7ae7b738511b56a8c144363d9a501f7a43c differ diff --git a/fuzz/gnutls_server_fuzzer.in/47ccc3f9fc11fef66d87d54cdf2f30cd701f1b55 b/fuzz/gnutls_server_fuzzer.in/47ccc3f9fc11fef66d87d54cdf2f30cd701f1b55 new file mode 100644 index 0000000000..0cf83b8e52 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/47ccc3f9fc11fef66d87d54cdf2f30cd701f1b55 differ diff --git a/fuzz/gnutls_server_fuzzer.in/480fdad19f48ccb66c79e4daad4bf4c189334d76 b/fuzz/gnutls_server_fuzzer.in/480fdad19f48ccb66c79e4daad4bf4c189334d76 new file mode 100644 index 0000000000..49318771db Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/480fdad19f48ccb66c79e4daad4bf4c189334d76 differ diff --git a/fuzz/gnutls_server_fuzzer.in/48370691792b8afe709c260dfd5cd401e45bb882 b/fuzz/gnutls_server_fuzzer.in/48370691792b8afe709c260dfd5cd401e45bb882 new file mode 100644 index 0000000000..c582b01da0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/48370691792b8afe709c260dfd5cd401e45bb882 differ diff --git a/fuzz/gnutls_server_fuzzer.in/483c2b99ffcd9f5de8fee9d5caf59440b6a4e387 b/fuzz/gnutls_server_fuzzer.in/483c2b99ffcd9f5de8fee9d5caf59440b6a4e387 new file mode 100644 index 0000000000..a9ba41846a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/483c2b99ffcd9f5de8fee9d5caf59440b6a4e387 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4855a61566c4cb00deaf54c09ce20289e8bbe9fa b/fuzz/gnutls_server_fuzzer.in/4855a61566c4cb00deaf54c09ce20289e8bbe9fa new file mode 100644 index 0000000000..b793a41951 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4855a61566c4cb00deaf54c09ce20289e8bbe9fa differ diff --git a/fuzz/gnutls_server_fuzzer.in/48bf6c2760b5624768fbfa6d621af12ab591bee3 b/fuzz/gnutls_server_fuzzer.in/48bf6c2760b5624768fbfa6d621af12ab591bee3 new file mode 100644 index 0000000000..07d84c8b92 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/48bf6c2760b5624768fbfa6d621af12ab591bee3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4939928c633253b9d8804fa36ebf26da733cb4b9 b/fuzz/gnutls_server_fuzzer.in/4939928c633253b9d8804fa36ebf26da733cb4b9 new file mode 100644 index 0000000000..6d5d7a9688 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4939928c633253b9d8804fa36ebf26da733cb4b9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/49a557dabc04c45ca8c9641ef9d7daaaf3eeeaa9 b/fuzz/gnutls_server_fuzzer.in/49a557dabc04c45ca8c9641ef9d7daaaf3eeeaa9 new file mode 100644 index 0000000000..81ad63487b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/49a557dabc04c45ca8c9641ef9d7daaaf3eeeaa9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/49d29ccb610e8fe7dfbbe3a635be06c692fe96f4 b/fuzz/gnutls_server_fuzzer.in/49d29ccb610e8fe7dfbbe3a635be06c692fe96f4 new file mode 100644 index 0000000000..12b7b7786c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/49d29ccb610e8fe7dfbbe3a635be06c692fe96f4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4a42476bd0ce418fcac499a0691829f77362752e b/fuzz/gnutls_server_fuzzer.in/4a42476bd0ce418fcac499a0691829f77362752e new file mode 100644 index 0000000000..4685513166 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4a42476bd0ce418fcac499a0691829f77362752e differ diff --git a/fuzz/gnutls_server_fuzzer.in/4aa83e25b9ba9728483f11c260f1d2d5624f2177 b/fuzz/gnutls_server_fuzzer.in/4aa83e25b9ba9728483f11c260f1d2d5624f2177 new file mode 100644 index 0000000000..a1ce49458f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4aa83e25b9ba9728483f11c260f1d2d5624f2177 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4acf3cd91a9ffb79381f5a08ff4505b0f1bcd75a b/fuzz/gnutls_server_fuzzer.in/4acf3cd91a9ffb79381f5a08ff4505b0f1bcd75a new file mode 100644 index 0000000000..499d6ebbaf Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4acf3cd91a9ffb79381f5a08ff4505b0f1bcd75a differ diff --git a/fuzz/gnutls_server_fuzzer.in/4ade857ff894a4cc4bb8ba93e68ce1c36cbb2f18 b/fuzz/gnutls_server_fuzzer.in/4ade857ff894a4cc4bb8ba93e68ce1c36cbb2f18 new file mode 100644 index 0000000000..7a112d8cf1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4ade857ff894a4cc4bb8ba93e68ce1c36cbb2f18 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4ae9e218a8867645971a6037b69564f1a764c2a0 b/fuzz/gnutls_server_fuzzer.in/4ae9e218a8867645971a6037b69564f1a764c2a0 new file mode 100644 index 0000000000..5ab175e9b6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4ae9e218a8867645971a6037b69564f1a764c2a0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4b1bc068c5a155659bc6c7abe2004f14e9656b5d b/fuzz/gnutls_server_fuzzer.in/4b1bc068c5a155659bc6c7abe2004f14e9656b5d new file mode 100644 index 0000000000..eb363639ea Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4b1bc068c5a155659bc6c7abe2004f14e9656b5d differ diff --git a/fuzz/gnutls_server_fuzzer.in/4b31ca5a1d3b5e166d4a4825f34975a64fabd471 b/fuzz/gnutls_server_fuzzer.in/4b31ca5a1d3b5e166d4a4825f34975a64fabd471 new file mode 100644 index 0000000000..0288eca991 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4b31ca5a1d3b5e166d4a4825f34975a64fabd471 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4b4c68791d5dab4a5b873009f345b79cbc3f5a86 b/fuzz/gnutls_server_fuzzer.in/4b4c68791d5dab4a5b873009f345b79cbc3f5a86 new file mode 100644 index 0000000000..c2fef250d3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4b4c68791d5dab4a5b873009f345b79cbc3f5a86 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4bb947b7ff468922e18e7ac7828358d75feab64f b/fuzz/gnutls_server_fuzzer.in/4bb947b7ff468922e18e7ac7828358d75feab64f new file mode 100644 index 0000000000..ab3c365b07 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4bb947b7ff468922e18e7ac7828358d75feab64f differ diff --git a/fuzz/gnutls_server_fuzzer.in/4c114d78819d7b45fb42d833394b9bc8167ffb0a b/fuzz/gnutls_server_fuzzer.in/4c114d78819d7b45fb42d833394b9bc8167ffb0a new file mode 100644 index 0000000000..21b4a0c0c1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4c114d78819d7b45fb42d833394b9bc8167ffb0a differ diff --git a/fuzz/gnutls_server_fuzzer.in/4c7b67cbac7ace9f0131572b6c0c0d1d954cf149 b/fuzz/gnutls_server_fuzzer.in/4c7b67cbac7ace9f0131572b6c0c0d1d954cf149 new file mode 100644 index 0000000000..3714fb790b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4c7b67cbac7ace9f0131572b6c0c0d1d954cf149 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4cbc50f4012cd36bf54a9844ef495bef7b111328 b/fuzz/gnutls_server_fuzzer.in/4cbc50f4012cd36bf54a9844ef495bef7b111328 new file mode 100644 index 0000000000..89e1419875 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4cbc50f4012cd36bf54a9844ef495bef7b111328 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4cf58c6312d8fb764f48aed6eb48fe3adcde63f0 b/fuzz/gnutls_server_fuzzer.in/4cf58c6312d8fb764f48aed6eb48fe3adcde63f0 new file mode 100644 index 0000000000..9a40e5c548 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4cf58c6312d8fb764f48aed6eb48fe3adcde63f0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4d1c399bc4c6ef5d8f3ddc03c0905e2f4ee9f129 b/fuzz/gnutls_server_fuzzer.in/4d1c399bc4c6ef5d8f3ddc03c0905e2f4ee9f129 new file mode 100644 index 0000000000..91133bd2a1 --- /dev/null +++ b/fuzz/gnutls_server_fuzzer.in/4d1c399bc4c6ef5d8f3ddc03c0905e2f4ee9f129 @@ -0,0 +1 @@ +00000 \ No newline at end of file diff --git a/fuzz/gnutls_server_fuzzer.in/4d5947279ac0e0a9e840f28c2a1174b618d54dbb b/fuzz/gnutls_server_fuzzer.in/4d5947279ac0e0a9e840f28c2a1174b618d54dbb new file mode 100644 index 0000000000..6bea875d99 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4d5947279ac0e0a9e840f28c2a1174b618d54dbb differ diff --git a/fuzz/gnutls_server_fuzzer.in/4dae3491f71d9c5d5ab3dbdba0da0b35d8089f53 b/fuzz/gnutls_server_fuzzer.in/4dae3491f71d9c5d5ab3dbdba0da0b35d8089f53 new file mode 100644 index 0000000000..4cfe8544c7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4dae3491f71d9c5d5ab3dbdba0da0b35d8089f53 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4e0a81a7ca680b397926b34e7b67cc21a59064f5 b/fuzz/gnutls_server_fuzzer.in/4e0a81a7ca680b397926b34e7b67cc21a59064f5 new file mode 100644 index 0000000000..2ef10bc9c4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4e0a81a7ca680b397926b34e7b67cc21a59064f5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4ea2d89303be796278fdf96468ff55eaa8b217b7 b/fuzz/gnutls_server_fuzzer.in/4ea2d89303be796278fdf96468ff55eaa8b217b7 new file mode 100644 index 0000000000..8fb0a6a67a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4ea2d89303be796278fdf96468ff55eaa8b217b7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4eee90b12191da531a99490ccbf4be517ba0917b b/fuzz/gnutls_server_fuzzer.in/4eee90b12191da531a99490ccbf4be517ba0917b new file mode 100644 index 0000000000..83f8aab915 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4eee90b12191da531a99490ccbf4be517ba0917b differ diff --git a/fuzz/gnutls_server_fuzzer.in/4f10bea6100f90da9fe6959f5b12b7a694e59648 b/fuzz/gnutls_server_fuzzer.in/4f10bea6100f90da9fe6959f5b12b7a694e59648 new file mode 100644 index 0000000000..356d3bb04a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4f10bea6100f90da9fe6959f5b12b7a694e59648 differ diff --git a/fuzz/gnutls_server_fuzzer.in/4ff10dbe69f69dfee128e2741ca9f8190a908f33 b/fuzz/gnutls_server_fuzzer.in/4ff10dbe69f69dfee128e2741ca9f8190a908f33 new file mode 100644 index 0000000000..0c158bde5c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/4ff10dbe69f69dfee128e2741ca9f8190a908f33 differ diff --git a/fuzz/gnutls_server_fuzzer.in/50bb213c61033f9305b0bd3828c72505ec6a1caa b/fuzz/gnutls_server_fuzzer.in/50bb213c61033f9305b0bd3828c72505ec6a1caa new file mode 100644 index 0000000000..43326c51aa Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/50bb213c61033f9305b0bd3828c72505ec6a1caa differ diff --git a/fuzz/gnutls_server_fuzzer.in/50f16354f20d36f18d9098614acd18a06b5f0473 b/fuzz/gnutls_server_fuzzer.in/50f16354f20d36f18d9098614acd18a06b5f0473 new file mode 100644 index 0000000000..ef871fe163 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/50f16354f20d36f18d9098614acd18a06b5f0473 differ diff --git a/fuzz/gnutls_server_fuzzer.in/518068ab04bfd681537ed0c4de0716aa93bcaa4d b/fuzz/gnutls_server_fuzzer.in/518068ab04bfd681537ed0c4de0716aa93bcaa4d new file mode 100644 index 0000000000..e4ee45c873 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/518068ab04bfd681537ed0c4de0716aa93bcaa4d differ diff --git a/fuzz/gnutls_server_fuzzer.in/51be809ad8d27b2fdd62934f00f8467b1a1cb5be b/fuzz/gnutls_server_fuzzer.in/51be809ad8d27b2fdd62934f00f8467b1a1cb5be new file mode 100644 index 0000000000..2fdff04932 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/51be809ad8d27b2fdd62934f00f8467b1a1cb5be differ diff --git a/fuzz/gnutls_server_fuzzer.in/52a2bd8a303924ac9a655c2c01712b003d7c433d b/fuzz/gnutls_server_fuzzer.in/52a2bd8a303924ac9a655c2c01712b003d7c433d new file mode 100644 index 0000000000..d1f2c59cc7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/52a2bd8a303924ac9a655c2c01712b003d7c433d differ diff --git a/fuzz/gnutls_server_fuzzer.in/52c0094c0fd6bab50612d3d69ab13187e317f4b6 b/fuzz/gnutls_server_fuzzer.in/52c0094c0fd6bab50612d3d69ab13187e317f4b6 new file mode 100644 index 0000000000..c9591bd7cc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/52c0094c0fd6bab50612d3d69ab13187e317f4b6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/53c1510266b5fbafb867391ebc4893dc18b6f799 b/fuzz/gnutls_server_fuzzer.in/53c1510266b5fbafb867391ebc4893dc18b6f799 new file mode 100644 index 0000000000..3605e42c4e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/53c1510266b5fbafb867391ebc4893dc18b6f799 differ diff --git a/fuzz/gnutls_server_fuzzer.in/54446aaac986871bbf7dd66a36cda42bc22e178c b/fuzz/gnutls_server_fuzzer.in/54446aaac986871bbf7dd66a36cda42bc22e178c new file mode 100644 index 0000000000..2231f244d4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/54446aaac986871bbf7dd66a36cda42bc22e178c differ diff --git a/fuzz/gnutls_server_fuzzer.in/5454ebd36b06126072cdd126f880f0014bf93614 b/fuzz/gnutls_server_fuzzer.in/5454ebd36b06126072cdd126f880f0014bf93614 new file mode 100644 index 0000000000..64ad83e35d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5454ebd36b06126072cdd126f880f0014bf93614 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5489a3d5781e16dcfc1ddfea1e91b43a55b6831b b/fuzz/gnutls_server_fuzzer.in/5489a3d5781e16dcfc1ddfea1e91b43a55b6831b new file mode 100644 index 0000000000..0734a0ff21 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5489a3d5781e16dcfc1ddfea1e91b43a55b6831b differ diff --git a/fuzz/gnutls_server_fuzzer.in/54afa102d118bc626a448eed333c81718e6b52a8 b/fuzz/gnutls_server_fuzzer.in/54afa102d118bc626a448eed333c81718e6b52a8 new file mode 100644 index 0000000000..836b549471 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/54afa102d118bc626a448eed333c81718e6b52a8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/54fe2207503b0c0eb522aa2647e763959ac22b4d b/fuzz/gnutls_server_fuzzer.in/54fe2207503b0c0eb522aa2647e763959ac22b4d new file mode 100644 index 0000000000..ac544c62fb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/54fe2207503b0c0eb522aa2647e763959ac22b4d differ diff --git a/fuzz/gnutls_server_fuzzer.in/553459daf99a755204b9d60e9f286a3511446446 b/fuzz/gnutls_server_fuzzer.in/553459daf99a755204b9d60e9f286a3511446446 new file mode 100644 index 0000000000..bbcf870108 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/553459daf99a755204b9d60e9f286a3511446446 differ diff --git a/fuzz/gnutls_server_fuzzer.in/55458788a58053e365d9e42a07cdef29c45d9e63 b/fuzz/gnutls_server_fuzzer.in/55458788a58053e365d9e42a07cdef29c45d9e63 new file mode 100644 index 0000000000..8ff3485ce9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/55458788a58053e365d9e42a07cdef29c45d9e63 differ diff --git a/fuzz/gnutls_server_fuzzer.in/562088aeea5ed48439166a4d20a06c643e695437 b/fuzz/gnutls_server_fuzzer.in/562088aeea5ed48439166a4d20a06c643e695437 new file mode 100644 index 0000000000..31a2f46b51 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/562088aeea5ed48439166a4d20a06c643e695437 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5668958be4dd0c8d8cdf60f07167ac9150ab51fb b/fuzz/gnutls_server_fuzzer.in/5668958be4dd0c8d8cdf60f07167ac9150ab51fb new file mode 100644 index 0000000000..a0a8ab619a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5668958be4dd0c8d8cdf60f07167ac9150ab51fb differ diff --git a/fuzz/gnutls_server_fuzzer.in/57a86b40737c434146f790ba0561ad4407a3a5a7 b/fuzz/gnutls_server_fuzzer.in/57a86b40737c434146f790ba0561ad4407a3a5a7 new file mode 100644 index 0000000000..12d71d75c5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/57a86b40737c434146f790ba0561ad4407a3a5a7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/57bff54649e7b0645bcc7f9e833d3e62047f149f b/fuzz/gnutls_server_fuzzer.in/57bff54649e7b0645bcc7f9e833d3e62047f149f new file mode 100644 index 0000000000..7976b7e0ce Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/57bff54649e7b0645bcc7f9e833d3e62047f149f differ diff --git a/fuzz/gnutls_server_fuzzer.in/57c581dfc8c0cd4edd7a8cc99a6dc361f93558f0 b/fuzz/gnutls_server_fuzzer.in/57c581dfc8c0cd4edd7a8cc99a6dc361f93558f0 new file mode 100644 index 0000000000..7113a47d8d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/57c581dfc8c0cd4edd7a8cc99a6dc361f93558f0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/57d3d6563cddd4af359ecb5ed9f06ce56e1057c7 b/fuzz/gnutls_server_fuzzer.in/57d3d6563cddd4af359ecb5ed9f06ce56e1057c7 new file mode 100644 index 0000000000..bac07f57e4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/57d3d6563cddd4af359ecb5ed9f06ce56e1057c7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5905df4afa9da0e5bc305a1307976249f671b5b5 b/fuzz/gnutls_server_fuzzer.in/5905df4afa9da0e5bc305a1307976249f671b5b5 new file mode 100644 index 0000000000..a9b3fa392d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5905df4afa9da0e5bc305a1307976249f671b5b5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/593f5e22c70404375626f34af7df3a591005425c b/fuzz/gnutls_server_fuzzer.in/593f5e22c70404375626f34af7df3a591005425c new file mode 100644 index 0000000000..8a97f99620 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/593f5e22c70404375626f34af7df3a591005425c differ diff --git a/fuzz/gnutls_server_fuzzer.in/5977aaa11c33a77c1249171a955ec131091b8a5c b/fuzz/gnutls_server_fuzzer.in/5977aaa11c33a77c1249171a955ec131091b8a5c new file mode 100644 index 0000000000..5fe4e68bdd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5977aaa11c33a77c1249171a955ec131091b8a5c differ diff --git a/fuzz/gnutls_server_fuzzer.in/5983b5c7fb368103e07e0068fdb4978831b819f5 b/fuzz/gnutls_server_fuzzer.in/5983b5c7fb368103e07e0068fdb4978831b819f5 new file mode 100644 index 0000000000..daf4b5bf6d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5983b5c7fb368103e07e0068fdb4978831b819f5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/59870b6cb956865ff45031e73bbba04b0bf15757 b/fuzz/gnutls_server_fuzzer.in/59870b6cb956865ff45031e73bbba04b0bf15757 new file mode 100644 index 0000000000..8ae62bcfa2 --- /dev/null +++ b/fuzz/gnutls_server_fuzzer.in/59870b6cb956865ff45031e73bbba04b0bf15757 @@ -0,0 +1 @@ +CONNE0 \ No newline at end of file diff --git a/fuzz/gnutls_server_fuzzer.in/59bceaa632b168af48bf5353e0ba4220db4021b1 b/fuzz/gnutls_server_fuzzer.in/59bceaa632b168af48bf5353e0ba4220db4021b1 new file mode 100644 index 0000000000..76edbc0bc4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/59bceaa632b168af48bf5353e0ba4220db4021b1 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5a15ac5dae2cd47aabca5dc40310d8b5fce2840f b/fuzz/gnutls_server_fuzzer.in/5a15ac5dae2cd47aabca5dc40310d8b5fce2840f new file mode 100644 index 0000000000..b677a51a35 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5a15ac5dae2cd47aabca5dc40310d8b5fce2840f differ diff --git a/fuzz/gnutls_server_fuzzer.in/5a372ded9ef0f89b5d2f62cc0cb7a7c8675a2701 b/fuzz/gnutls_server_fuzzer.in/5a372ded9ef0f89b5d2f62cc0cb7a7c8675a2701 new file mode 100644 index 0000000000..29f218a81d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5a372ded9ef0f89b5d2f62cc0cb7a7c8675a2701 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5a5977ce9d03092bb7547ca57be5112709cbacbe b/fuzz/gnutls_server_fuzzer.in/5a5977ce9d03092bb7547ca57be5112709cbacbe new file mode 100644 index 0000000000..7afbce024b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5a5977ce9d03092bb7547ca57be5112709cbacbe differ diff --git a/fuzz/gnutls_server_fuzzer.in/5aa832d4396903dbda93500d1ae2afd998deea8c b/fuzz/gnutls_server_fuzzer.in/5aa832d4396903dbda93500d1ae2afd998deea8c new file mode 100644 index 0000000000..dcf15f2ea4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5aa832d4396903dbda93500d1ae2afd998deea8c differ diff --git a/fuzz/gnutls_server_fuzzer.in/5ab6bf920a18c2f721a235afb123926ab1b1c7f1 b/fuzz/gnutls_server_fuzzer.in/5ab6bf920a18c2f721a235afb123926ab1b1c7f1 new file mode 100644 index 0000000000..adf14f3a6c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5ab6bf920a18c2f721a235afb123926ab1b1c7f1 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5b1c57a19bbd7f23c807d38e289ea118a0c50f33 b/fuzz/gnutls_server_fuzzer.in/5b1c57a19bbd7f23c807d38e289ea118a0c50f33 new file mode 100644 index 0000000000..0dcc19b02c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5b1c57a19bbd7f23c807d38e289ea118a0c50f33 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5b657417cd22029ad24d289df3069dd2f2e5d96a b/fuzz/gnutls_server_fuzzer.in/5b657417cd22029ad24d289df3069dd2f2e5d96a new file mode 100644 index 0000000000..c42403f709 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5b657417cd22029ad24d289df3069dd2f2e5d96a differ diff --git a/fuzz/gnutls_server_fuzzer.in/5c229fc60214842c21018cfd1bb2b3fd55a3ef5a b/fuzz/gnutls_server_fuzzer.in/5c229fc60214842c21018cfd1bb2b3fd55a3ef5a new file mode 100644 index 0000000000..46156fac06 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5c229fc60214842c21018cfd1bb2b3fd55a3ef5a differ diff --git a/fuzz/gnutls_server_fuzzer.in/5c82945da8372f474854f797cf1795e224caf994 b/fuzz/gnutls_server_fuzzer.in/5c82945da8372f474854f797cf1795e224caf994 new file mode 100644 index 0000000000..d19b6de610 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5c82945da8372f474854f797cf1795e224caf994 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5cc1b5577dc79e9d950454f8b2c8a48f44cee531 b/fuzz/gnutls_server_fuzzer.in/5cc1b5577dc79e9d950454f8b2c8a48f44cee531 new file mode 100644 index 0000000000..5005743486 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5cc1b5577dc79e9d950454f8b2c8a48f44cee531 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5d93b9df199505e962ad0807d382669e8d1e00a7 b/fuzz/gnutls_server_fuzzer.in/5d93b9df199505e962ad0807d382669e8d1e00a7 new file mode 100644 index 0000000000..3ba972bfe0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5d93b9df199505e962ad0807d382669e8d1e00a7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5dc56d177f00a264fc58506e082425e6e3e7811d b/fuzz/gnutls_server_fuzzer.in/5dc56d177f00a264fc58506e082425e6e3e7811d new file mode 100644 index 0000000000..fc650fad62 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5dc56d177f00a264fc58506e082425e6e3e7811d differ diff --git a/fuzz/gnutls_server_fuzzer.in/5e165532ca6fbcea484578f9254b14a2e1900f98 b/fuzz/gnutls_server_fuzzer.in/5e165532ca6fbcea484578f9254b14a2e1900f98 new file mode 100644 index 0000000000..ac075b836d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5e165532ca6fbcea484578f9254b14a2e1900f98 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5e3a03f2708897c6274bbd021a00604a25295b1f b/fuzz/gnutls_server_fuzzer.in/5e3a03f2708897c6274bbd021a00604a25295b1f new file mode 100644 index 0000000000..41dce90ab0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5e3a03f2708897c6274bbd021a00604a25295b1f differ diff --git a/fuzz/gnutls_server_fuzzer.in/5e4df9cc8bcb9c9496cfb8fe339d7ff4c0262b9f b/fuzz/gnutls_server_fuzzer.in/5e4df9cc8bcb9c9496cfb8fe339d7ff4c0262b9f new file mode 100644 index 0000000000..4bb25221b7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5e4df9cc8bcb9c9496cfb8fe339d7ff4c0262b9f differ diff --git a/fuzz/gnutls_server_fuzzer.in/5e515722301cd039918d885de6be8754dbc64c47 b/fuzz/gnutls_server_fuzzer.in/5e515722301cd039918d885de6be8754dbc64c47 new file mode 100644 index 0000000000..940c2a88c5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5e515722301cd039918d885de6be8754dbc64c47 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5e968477f28cd382f2baf594744e767e58d67ca5 b/fuzz/gnutls_server_fuzzer.in/5e968477f28cd382f2baf594744e767e58d67ca5 new file mode 100644 index 0000000000..34285dac3e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5e968477f28cd382f2baf594744e767e58d67ca5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5e9c0a7787a838a64a577980d20dea8f168a0236 b/fuzz/gnutls_server_fuzzer.in/5e9c0a7787a838a64a577980d20dea8f168a0236 new file mode 100644 index 0000000000..b2efe8be1b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5e9c0a7787a838a64a577980d20dea8f168a0236 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5ea18142474e69db302955477c2b4d707c79cb52 b/fuzz/gnutls_server_fuzzer.in/5ea18142474e69db302955477c2b4d707c79cb52 new file mode 100644 index 0000000000..5e99e9b784 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5ea18142474e69db302955477c2b4d707c79cb52 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5ef0df17445fb4098d15536a1195a47cb55b6845 b/fuzz/gnutls_server_fuzzer.in/5ef0df17445fb4098d15536a1195a47cb55b6845 new file mode 100644 index 0000000000..45eede51d0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5ef0df17445fb4098d15536a1195a47cb55b6845 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5ef8836c44daad1c0900d641c021e9b2e5c0a9ac b/fuzz/gnutls_server_fuzzer.in/5ef8836c44daad1c0900d641c021e9b2e5c0a9ac new file mode 100644 index 0000000000..0e80b0e974 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5ef8836c44daad1c0900d641c021e9b2e5c0a9ac differ diff --git a/fuzz/gnutls_server_fuzzer.in/5f486372e7f0146ebe332d34a30368a94f6aadc6 b/fuzz/gnutls_server_fuzzer.in/5f486372e7f0146ebe332d34a30368a94f6aadc6 new file mode 100644 index 0000000000..0f507abb99 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5f486372e7f0146ebe332d34a30368a94f6aadc6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/5fe1f63062ff676b4602ed91b41d2908a1dc6bcb b/fuzz/gnutls_server_fuzzer.in/5fe1f63062ff676b4602ed91b41d2908a1dc6bcb new file mode 100644 index 0000000000..48d5e24cd2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5fe1f63062ff676b4602ed91b41d2908a1dc6bcb differ diff --git a/fuzz/gnutls_server_fuzzer.in/5fecaab1536d2d7bf8aa28ba4c1bf8497fee4b14 b/fuzz/gnutls_server_fuzzer.in/5fecaab1536d2d7bf8aa28ba4c1bf8497fee4b14 new file mode 100644 index 0000000000..02226d4c46 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/5fecaab1536d2d7bf8aa28ba4c1bf8497fee4b14 differ diff --git a/fuzz/gnutls_server_fuzzer.in/60fd031de5ec103b2276b915a2ad5c607e9c073e b/fuzz/gnutls_server_fuzzer.in/60fd031de5ec103b2276b915a2ad5c607e9c073e new file mode 100644 index 0000000000..8315ccb854 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/60fd031de5ec103b2276b915a2ad5c607e9c073e differ diff --git a/fuzz/gnutls_server_fuzzer.in/611c52f157e83b04839802b4a7910f32926d60d7 b/fuzz/gnutls_server_fuzzer.in/611c52f157e83b04839802b4a7910f32926d60d7 new file mode 100644 index 0000000000..1cc7821530 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/611c52f157e83b04839802b4a7910f32926d60d7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/61b3d6ae0f42df31c9cc57dd7839993a58f4b344 b/fuzz/gnutls_server_fuzzer.in/61b3d6ae0f42df31c9cc57dd7839993a58f4b344 new file mode 100644 index 0000000000..c1020f239b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/61b3d6ae0f42df31c9cc57dd7839993a58f4b344 differ diff --git a/fuzz/gnutls_server_fuzzer.in/61e2d1a8b8cc4f3f0d59dc38be6e26032a9ab86a b/fuzz/gnutls_server_fuzzer.in/61e2d1a8b8cc4f3f0d59dc38be6e26032a9ab86a new file mode 100644 index 0000000000..c87bd19bdb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/61e2d1a8b8cc4f3f0d59dc38be6e26032a9ab86a differ diff --git a/fuzz/gnutls_server_fuzzer.in/627bd6a19f85a8a989c244e64d4b1ac1131b7f65 b/fuzz/gnutls_server_fuzzer.in/627bd6a19f85a8a989c244e64d4b1ac1131b7f65 new file mode 100644 index 0000000000..fb1008d933 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/627bd6a19f85a8a989c244e64d4b1ac1131b7f65 differ diff --git a/fuzz/gnutls_server_fuzzer.in/63ac0406ecae1137ce984c0f3f94f7f72f5be946 b/fuzz/gnutls_server_fuzzer.in/63ac0406ecae1137ce984c0f3f94f7f72f5be946 new file mode 100644 index 0000000000..7000ceebe2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/63ac0406ecae1137ce984c0f3f94f7f72f5be946 differ diff --git a/fuzz/gnutls_server_fuzzer.in/63ed510f47cc8877c38cc7f98f08fb68f630b759 b/fuzz/gnutls_server_fuzzer.in/63ed510f47cc8877c38cc7f98f08fb68f630b759 new file mode 100644 index 0000000000..a0db46d36e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/63ed510f47cc8877c38cc7f98f08fb68f630b759 differ diff --git a/fuzz/gnutls_server_fuzzer.in/643ce0f1de534097de5de3a68d56434a94fb5329 b/fuzz/gnutls_server_fuzzer.in/643ce0f1de534097de5de3a68d56434a94fb5329 new file mode 100644 index 0000000000..e6f56275ea Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/643ce0f1de534097de5de3a68d56434a94fb5329 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6488ec31beffa3004fa758172476b76b9659168c b/fuzz/gnutls_server_fuzzer.in/6488ec31beffa3004fa758172476b76b9659168c new file mode 100644 index 0000000000..7b3dd9f6c2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6488ec31beffa3004fa758172476b76b9659168c differ diff --git a/fuzz/gnutls_server_fuzzer.in/64c45f5746bc642fe072f0cd153bb1d72053e6d3 b/fuzz/gnutls_server_fuzzer.in/64c45f5746bc642fe072f0cd153bb1d72053e6d3 new file mode 100644 index 0000000000..d772937656 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/64c45f5746bc642fe072f0cd153bb1d72053e6d3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/651ecdc2f3d27b04ebe593faf2dd19d8b1445811 b/fuzz/gnutls_server_fuzzer.in/651ecdc2f3d27b04ebe593faf2dd19d8b1445811 new file mode 100644 index 0000000000..02724a477c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/651ecdc2f3d27b04ebe593faf2dd19d8b1445811 differ diff --git a/fuzz/gnutls_server_fuzzer.in/65a518d979ccf2594619bc44e130ab25f421654f b/fuzz/gnutls_server_fuzzer.in/65a518d979ccf2594619bc44e130ab25f421654f new file mode 100644 index 0000000000..6aa59ebeb2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/65a518d979ccf2594619bc44e130ab25f421654f differ diff --git a/fuzz/gnutls_server_fuzzer.in/66959e507c167df372289fb6a4d822d1f6f71477 b/fuzz/gnutls_server_fuzzer.in/66959e507c167df372289fb6a4d822d1f6f71477 new file mode 100644 index 0000000000..853b598f01 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/66959e507c167df372289fb6a4d822d1f6f71477 differ diff --git a/fuzz/gnutls_server_fuzzer.in/673e05639f1c6ab51c7505e8ee81bae2cd4550a8 b/fuzz/gnutls_server_fuzzer.in/673e05639f1c6ab51c7505e8ee81bae2cd4550a8 new file mode 100644 index 0000000000..fded8f11c4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/673e05639f1c6ab51c7505e8ee81bae2cd4550a8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/674f51225e05789328a46cf55894c4092560be90 b/fuzz/gnutls_server_fuzzer.in/674f51225e05789328a46cf55894c4092560be90 new file mode 100644 index 0000000000..b3c3b7434b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/674f51225e05789328a46cf55894c4092560be90 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6772811b5e15e65f0ac549ac281e0cbcaef71d0c b/fuzz/gnutls_server_fuzzer.in/6772811b5e15e65f0ac549ac281e0cbcaef71d0c new file mode 100644 index 0000000000..8a46b9f24d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6772811b5e15e65f0ac549ac281e0cbcaef71d0c differ diff --git a/fuzz/gnutls_server_fuzzer.in/677ac8d2630e2f30822607e9565235036dabc622 b/fuzz/gnutls_server_fuzzer.in/677ac8d2630e2f30822607e9565235036dabc622 new file mode 100644 index 0000000000..27b584b9fa Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/677ac8d2630e2f30822607e9565235036dabc622 differ diff --git a/fuzz/gnutls_server_fuzzer.in/67a8fc9490bd834455a9fa942becfc6c25a6d206 b/fuzz/gnutls_server_fuzzer.in/67a8fc9490bd834455a9fa942becfc6c25a6d206 new file mode 100644 index 0000000000..4bc9b262b3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/67a8fc9490bd834455a9fa942becfc6c25a6d206 differ diff --git a/fuzz/gnutls_server_fuzzer.in/689a43228d22785c117fc9616aacff268eac980b b/fuzz/gnutls_server_fuzzer.in/689a43228d22785c117fc9616aacff268eac980b new file mode 100644 index 0000000000..f3d784862d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/689a43228d22785c117fc9616aacff268eac980b differ diff --git a/fuzz/gnutls_server_fuzzer.in/68e3627946e5576ec05ea8e87b5856b6bb8854ce b/fuzz/gnutls_server_fuzzer.in/68e3627946e5576ec05ea8e87b5856b6bb8854ce new file mode 100644 index 0000000000..92240222a1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/68e3627946e5576ec05ea8e87b5856b6bb8854ce differ diff --git a/fuzz/gnutls_server_fuzzer.in/68e5738892cae727072ead2a3423bbe4c1afae66 b/fuzz/gnutls_server_fuzzer.in/68e5738892cae727072ead2a3423bbe4c1afae66 new file mode 100644 index 0000000000..747fa7af8b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/68e5738892cae727072ead2a3423bbe4c1afae66 differ diff --git a/fuzz/gnutls_server_fuzzer.in/69c6fab00d932b1773a2b49aac8f4e6fc688b6ba b/fuzz/gnutls_server_fuzzer.in/69c6fab00d932b1773a2b49aac8f4e6fc688b6ba new file mode 100644 index 0000000000..2a564b44b3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/69c6fab00d932b1773a2b49aac8f4e6fc688b6ba differ diff --git a/fuzz/gnutls_server_fuzzer.in/69ed410d92d464e7805a460f3c32b0e751313d52 b/fuzz/gnutls_server_fuzzer.in/69ed410d92d464e7805a460f3c32b0e751313d52 new file mode 100644 index 0000000000..574cee87a4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/69ed410d92d464e7805a460f3c32b0e751313d52 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6a1598c300c67f249cad349f6de64b4c59fe78e2 b/fuzz/gnutls_server_fuzzer.in/6a1598c300c67f249cad349f6de64b4c59fe78e2 new file mode 100644 index 0000000000..6ac2b54602 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6a1598c300c67f249cad349f6de64b4c59fe78e2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6a2db567b872b738604a3ee7123d96a1c9d6e08c b/fuzz/gnutls_server_fuzzer.in/6a2db567b872b738604a3ee7123d96a1c9d6e08c new file mode 100644 index 0000000000..4442d62223 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6a2db567b872b738604a3ee7123d96a1c9d6e08c differ diff --git a/fuzz/gnutls_server_fuzzer.in/6ab00c030cd8eb999815a966209affa7c547438a b/fuzz/gnutls_server_fuzzer.in/6ab00c030cd8eb999815a966209affa7c547438a new file mode 100644 index 0000000000..e132969ded Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6ab00c030cd8eb999815a966209affa7c547438a differ diff --git a/fuzz/gnutls_server_fuzzer.in/6b713dc88b78cdfa5f1ea50635ef0df1a6046f7c b/fuzz/gnutls_server_fuzzer.in/6b713dc88b78cdfa5f1ea50635ef0df1a6046f7c new file mode 100644 index 0000000000..3207ba1414 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6b713dc88b78cdfa5f1ea50635ef0df1a6046f7c differ diff --git a/fuzz/gnutls_server_fuzzer.in/6ba5d092fa9270605091e20721da0c12ce871fd3 b/fuzz/gnutls_server_fuzzer.in/6ba5d092fa9270605091e20721da0c12ce871fd3 new file mode 100644 index 0000000000..118cf974c7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6ba5d092fa9270605091e20721da0c12ce871fd3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6ba60c067d4b186b390c58ff6c9f5895ed4d0c79 b/fuzz/gnutls_server_fuzzer.in/6ba60c067d4b186b390c58ff6c9f5895ed4d0c79 new file mode 100644 index 0000000000..4eba2758f7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6ba60c067d4b186b390c58ff6c9f5895ed4d0c79 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6c247c5a7fb4d97353fb12b9a75dcaae2d2e3200 b/fuzz/gnutls_server_fuzzer.in/6c247c5a7fb4d97353fb12b9a75dcaae2d2e3200 new file mode 100644 index 0000000000..981a8897a9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6c247c5a7fb4d97353fb12b9a75dcaae2d2e3200 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6c5f41f3f06fb251be0129f9a9fcf5331fa5a41e b/fuzz/gnutls_server_fuzzer.in/6c5f41f3f06fb251be0129f9a9fcf5331fa5a41e new file mode 100644 index 0000000000..422bb8b0b1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6c5f41f3f06fb251be0129f9a9fcf5331fa5a41e differ diff --git a/fuzz/gnutls_server_fuzzer.in/6cc8a15fbedddb3ee2193bbabd60bed90b3f2874 b/fuzz/gnutls_server_fuzzer.in/6cc8a15fbedddb3ee2193bbabd60bed90b3f2874 new file mode 100644 index 0000000000..8ec2fa7e1e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6cc8a15fbedddb3ee2193bbabd60bed90b3f2874 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6ce244807af352baf4da0af910cf2555c089afad b/fuzz/gnutls_server_fuzzer.in/6ce244807af352baf4da0af910cf2555c089afad new file mode 100644 index 0000000000..945c94e8d2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6ce244807af352baf4da0af910cf2555c089afad differ diff --git a/fuzz/gnutls_server_fuzzer.in/6da9021736ba3698b2831db6bd2794c203acaae8 b/fuzz/gnutls_server_fuzzer.in/6da9021736ba3698b2831db6bd2794c203acaae8 new file mode 100644 index 0000000000..99126c69a1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6da9021736ba3698b2831db6bd2794c203acaae8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6e06d1762c819dc3614d07f704bb81de3577d784 b/fuzz/gnutls_server_fuzzer.in/6e06d1762c819dc3614d07f704bb81de3577d784 new file mode 100644 index 0000000000..303837484b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6e06d1762c819dc3614d07f704bb81de3577d784 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6e15f927a33df344e62ac66b4e82760587137597 b/fuzz/gnutls_server_fuzzer.in/6e15f927a33df344e62ac66b4e82760587137597 new file mode 100644 index 0000000000..3a563d0d52 --- /dev/null +++ b/fuzz/gnutls_server_fuzzer.in/6e15f927a33df344e62ac66b4e82760587137597 @@ -0,0 +1 @@ +0000 \ No newline at end of file diff --git a/fuzz/gnutls_server_fuzzer.in/6f2af1f82aeeda0189d52141072ab1e5556c9ba2 b/fuzz/gnutls_server_fuzzer.in/6f2af1f82aeeda0189d52141072ab1e5556c9ba2 new file mode 100644 index 0000000000..47cf22ac17 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6f2af1f82aeeda0189d52141072ab1e5556c9ba2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6f2ed6585654c0f6369a81886d4c7cb3c963028f b/fuzz/gnutls_server_fuzzer.in/6f2ed6585654c0f6369a81886d4c7cb3c963028f new file mode 100644 index 0000000000..c1dfff9ed1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6f2ed6585654c0f6369a81886d4c7cb3c963028f differ diff --git a/fuzz/gnutls_server_fuzzer.in/6f5e4c8c655a517d576a345024322687b5ba5777 b/fuzz/gnutls_server_fuzzer.in/6f5e4c8c655a517d576a345024322687b5ba5777 new file mode 100644 index 0000000000..d6abbcf2d8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6f5e4c8c655a517d576a345024322687b5ba5777 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6f72cef5b6970d3c58ef2d9463fcef0e0ebc82d2 b/fuzz/gnutls_server_fuzzer.in/6f72cef5b6970d3c58ef2d9463fcef0e0ebc82d2 new file mode 100644 index 0000000000..9aca37a462 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6f72cef5b6970d3c58ef2d9463fcef0e0ebc82d2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/6fb30f797e1cb0a2b1466049a39c9f44b5ba418e b/fuzz/gnutls_server_fuzzer.in/6fb30f797e1cb0a2b1466049a39c9f44b5ba418e new file mode 100644 index 0000000000..8817d907ca Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/6fb30f797e1cb0a2b1466049a39c9f44b5ba418e differ diff --git a/fuzz/gnutls_server_fuzzer.in/706755d11d5886b5b2593fa244935ac5d0539ba7 b/fuzz/gnutls_server_fuzzer.in/706755d11d5886b5b2593fa244935ac5d0539ba7 new file mode 100644 index 0000000000..284c091944 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/706755d11d5886b5b2593fa244935ac5d0539ba7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/706f54bf24538976566b61e852b1c4d9ae1119f4 b/fuzz/gnutls_server_fuzzer.in/706f54bf24538976566b61e852b1c4d9ae1119f4 new file mode 100644 index 0000000000..c0ad820cbe Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/706f54bf24538976566b61e852b1c4d9ae1119f4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/713a551ece9fa70e74a14e5d868607e2dcfddc03 b/fuzz/gnutls_server_fuzzer.in/713a551ece9fa70e74a14e5d868607e2dcfddc03 new file mode 100644 index 0000000000..b9858f588f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/713a551ece9fa70e74a14e5d868607e2dcfddc03 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7176897b0ff6326dc0cc20de847975d6114da293 b/fuzz/gnutls_server_fuzzer.in/7176897b0ff6326dc0cc20de847975d6114da293 new file mode 100644 index 0000000000..50f73a2895 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7176897b0ff6326dc0cc20de847975d6114da293 differ diff --git a/fuzz/gnutls_server_fuzzer.in/71a47c06ffcdeb9917f606cf9aa2c5fd51cb8626 b/fuzz/gnutls_server_fuzzer.in/71a47c06ffcdeb9917f606cf9aa2c5fd51cb8626 new file mode 100644 index 0000000000..aaf60560f1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/71a47c06ffcdeb9917f606cf9aa2c5fd51cb8626 differ diff --git a/fuzz/gnutls_server_fuzzer.in/71e94aab008b8145d6cd38b477a628a768b1adaf b/fuzz/gnutls_server_fuzzer.in/71e94aab008b8145d6cd38b477a628a768b1adaf new file mode 100644 index 0000000000..f45bfb9d67 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/71e94aab008b8145d6cd38b477a628a768b1adaf differ diff --git a/fuzz/gnutls_server_fuzzer.in/722970dca8c8b461f58c51343e86492e5285dd29 b/fuzz/gnutls_server_fuzzer.in/722970dca8c8b461f58c51343e86492e5285dd29 new file mode 100644 index 0000000000..001ed202d3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/722970dca8c8b461f58c51343e86492e5285dd29 differ diff --git a/fuzz/gnutls_server_fuzzer.in/723c82c8a62d79b9873d96b424636815ffeba5dd b/fuzz/gnutls_server_fuzzer.in/723c82c8a62d79b9873d96b424636815ffeba5dd new file mode 100644 index 0000000000..4e2d11e73f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/723c82c8a62d79b9873d96b424636815ffeba5dd differ diff --git a/fuzz/gnutls_server_fuzzer.in/728307082cb52a64e52ce7181f22ff9ec4b30c6e b/fuzz/gnutls_server_fuzzer.in/728307082cb52a64e52ce7181f22ff9ec4b30c6e new file mode 100644 index 0000000000..20966b5375 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/728307082cb52a64e52ce7181f22ff9ec4b30c6e differ diff --git a/fuzz/gnutls_server_fuzzer.in/7287ffc6c5f0d1f6793eb7f50773aa82a4efb286 b/fuzz/gnutls_server_fuzzer.in/7287ffc6c5f0d1f6793eb7f50773aa82a4efb286 new file mode 100644 index 0000000000..63b0bc2d8e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7287ffc6c5f0d1f6793eb7f50773aa82a4efb286 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7299ca5e73a601b6f6c93c87f44c7b60d132ab78 b/fuzz/gnutls_server_fuzzer.in/7299ca5e73a601b6f6c93c87f44c7b60d132ab78 new file mode 100644 index 0000000000..bd44e54ddb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7299ca5e73a601b6f6c93c87f44c7b60d132ab78 differ diff --git a/fuzz/gnutls_server_fuzzer.in/72ec63d5624354fdfa9d7f65d79501cf92ec83a7 b/fuzz/gnutls_server_fuzzer.in/72ec63d5624354fdfa9d7f65d79501cf92ec83a7 new file mode 100644 index 0000000000..2918e20782 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/72ec63d5624354fdfa9d7f65d79501cf92ec83a7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/732dd412f9421be99d1bb7b955cb011fe889dcc5 b/fuzz/gnutls_server_fuzzer.in/732dd412f9421be99d1bb7b955cb011fe889dcc5 new file mode 100644 index 0000000000..78d7268ea2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/732dd412f9421be99d1bb7b955cb011fe889dcc5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/738cbebc0a489434f9f000bb656fc5b6573d85dc b/fuzz/gnutls_server_fuzzer.in/738cbebc0a489434f9f000bb656fc5b6573d85dc new file mode 100644 index 0000000000..559113d888 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/738cbebc0a489434f9f000bb656fc5b6573d85dc differ diff --git a/fuzz/gnutls_server_fuzzer.in/74f07431a72bddc58ec75a409adce435d49f2227 b/fuzz/gnutls_server_fuzzer.in/74f07431a72bddc58ec75a409adce435d49f2227 new file mode 100644 index 0000000000..5d8f2fce9a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/74f07431a72bddc58ec75a409adce435d49f2227 differ diff --git a/fuzz/gnutls_server_fuzzer.in/74f58f40747d4ea94b4f2a3cf019ed2d1831fd06 b/fuzz/gnutls_server_fuzzer.in/74f58f40747d4ea94b4f2a3cf019ed2d1831fd06 new file mode 100644 index 0000000000..61b97d2750 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/74f58f40747d4ea94b4f2a3cf019ed2d1831fd06 differ diff --git a/fuzz/gnutls_server_fuzzer.in/74f932b80ecc717fb362577288724b55132de9b5 b/fuzz/gnutls_server_fuzzer.in/74f932b80ecc717fb362577288724b55132de9b5 new file mode 100644 index 0000000000..fe99ecfaf4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/74f932b80ecc717fb362577288724b55132de9b5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/750b021ea9b3d47efe4f897f0dbc62181f88ec03 b/fuzz/gnutls_server_fuzzer.in/750b021ea9b3d47efe4f897f0dbc62181f88ec03 new file mode 100644 index 0000000000..d7298309cc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/750b021ea9b3d47efe4f897f0dbc62181f88ec03 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7558501bdaa488ab1a6f96621dde0f70aa9d7dc0 b/fuzz/gnutls_server_fuzzer.in/7558501bdaa488ab1a6f96621dde0f70aa9d7dc0 new file mode 100644 index 0000000000..48f31ce81e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7558501bdaa488ab1a6f96621dde0f70aa9d7dc0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/75e0017fbd884e77cfcf2ef7a9699813aa89e983 b/fuzz/gnutls_server_fuzzer.in/75e0017fbd884e77cfcf2ef7a9699813aa89e983 new file mode 100644 index 0000000000..4233d3b9dd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/75e0017fbd884e77cfcf2ef7a9699813aa89e983 differ diff --git a/fuzz/gnutls_server_fuzzer.in/760450436c3f5d89e884549ebb66b833909f44b2 b/fuzz/gnutls_server_fuzzer.in/760450436c3f5d89e884549ebb66b833909f44b2 new file mode 100644 index 0000000000..cfadf911b2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/760450436c3f5d89e884549ebb66b833909f44b2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/762bf7f030f7cf5f98b593a4dc2a298715dcce67 b/fuzz/gnutls_server_fuzzer.in/762bf7f030f7cf5f98b593a4dc2a298715dcce67 new file mode 100644 index 0000000000..9428a3c553 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/762bf7f030f7cf5f98b593a4dc2a298715dcce67 differ diff --git a/fuzz/gnutls_server_fuzzer.in/76371950d3f559c613d2404b749b88253680793a b/fuzz/gnutls_server_fuzzer.in/76371950d3f559c613d2404b749b88253680793a new file mode 100644 index 0000000000..28a7cf3ce7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/76371950d3f559c613d2404b749b88253680793a differ diff --git a/fuzz/gnutls_server_fuzzer.in/765cc6c2da9107a9441858e561fff15bfc9603a3 b/fuzz/gnutls_server_fuzzer.in/765cc6c2da9107a9441858e561fff15bfc9603a3 new file mode 100644 index 0000000000..df8a09e766 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/765cc6c2da9107a9441858e561fff15bfc9603a3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/767d85ad919ae730ca0f014e8866d681f2bb774d b/fuzz/gnutls_server_fuzzer.in/767d85ad919ae730ca0f014e8866d681f2bb774d new file mode 100644 index 0000000000..3e6e285a46 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/767d85ad919ae730ca0f014e8866d681f2bb774d differ diff --git a/fuzz/gnutls_server_fuzzer.in/770981a6fe072d99314f1bcd6ef460436f7638e8 b/fuzz/gnutls_server_fuzzer.in/770981a6fe072d99314f1bcd6ef460436f7638e8 new file mode 100644 index 0000000000..17647025d5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/770981a6fe072d99314f1bcd6ef460436f7638e8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/77274d5336ed12694190c96e1523e4188a986d02 b/fuzz/gnutls_server_fuzzer.in/77274d5336ed12694190c96e1523e4188a986d02 new file mode 100644 index 0000000000..27e41a38b6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/77274d5336ed12694190c96e1523e4188a986d02 differ diff --git a/fuzz/gnutls_server_fuzzer.in/77c038879fde99e1acc4c3d5609483abe67127fd b/fuzz/gnutls_server_fuzzer.in/77c038879fde99e1acc4c3d5609483abe67127fd new file mode 100644 index 0000000000..822b747b6d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/77c038879fde99e1acc4c3d5609483abe67127fd differ diff --git a/fuzz/gnutls_server_fuzzer.in/78089a26c62ef9f739dd93d68d9a5bebdbfe81bc b/fuzz/gnutls_server_fuzzer.in/78089a26c62ef9f739dd93d68d9a5bebdbfe81bc new file mode 100644 index 0000000000..fb9f63b30f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/78089a26c62ef9f739dd93d68d9a5bebdbfe81bc differ diff --git a/fuzz/gnutls_server_fuzzer.in/7882bfc08c687d6f2d26cfc8b0e77e90de73125f b/fuzz/gnutls_server_fuzzer.in/7882bfc08c687d6f2d26cfc8b0e77e90de73125f new file mode 100644 index 0000000000..c74b097d42 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7882bfc08c687d6f2d26cfc8b0e77e90de73125f differ diff --git a/fuzz/gnutls_server_fuzzer.in/78fb488be7c26dfa4805c7808c7f0ae01dfbbf4e b/fuzz/gnutls_server_fuzzer.in/78fb488be7c26dfa4805c7808c7f0ae01dfbbf4e new file mode 100644 index 0000000000..6813c6f0ca Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/78fb488be7c26dfa4805c7808c7f0ae01dfbbf4e differ diff --git a/fuzz/gnutls_server_fuzzer.in/7905f3d07bc661c1dfdf6b45fe06364857eed785 b/fuzz/gnutls_server_fuzzer.in/7905f3d07bc661c1dfdf6b45fe06364857eed785 new file mode 100644 index 0000000000..e44588ad79 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7905f3d07bc661c1dfdf6b45fe06364857eed785 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7978dd086cfa46925c815a421baae43b6f5d748c b/fuzz/gnutls_server_fuzzer.in/7978dd086cfa46925c815a421baae43b6f5d748c new file mode 100644 index 0000000000..f30015b42f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7978dd086cfa46925c815a421baae43b6f5d748c differ diff --git a/fuzz/gnutls_server_fuzzer.in/7a05059e2bd6fa193bd7b3812e4a5b85e0471664 b/fuzz/gnutls_server_fuzzer.in/7a05059e2bd6fa193bd7b3812e4a5b85e0471664 new file mode 100644 index 0000000000..a763cdb932 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7a05059e2bd6fa193bd7b3812e4a5b85e0471664 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7a4e18a76dac771e55d8afd4d100c232b1536ae8 b/fuzz/gnutls_server_fuzzer.in/7a4e18a76dac771e55d8afd4d100c232b1536ae8 new file mode 100644 index 0000000000..c321ac621e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7a4e18a76dac771e55d8afd4d100c232b1536ae8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7b5006ca8e30881ab3325202638601e221078d64 b/fuzz/gnutls_server_fuzzer.in/7b5006ca8e30881ab3325202638601e221078d64 new file mode 100644 index 0000000000..00d7d1cd87 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7b5006ca8e30881ab3325202638601e221078d64 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7b82943cb0968a2f7d392414f10e68c59b7fdd71 b/fuzz/gnutls_server_fuzzer.in/7b82943cb0968a2f7d392414f10e68c59b7fdd71 new file mode 100644 index 0000000000..fc52693233 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7b82943cb0968a2f7d392414f10e68c59b7fdd71 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7b87ec81be3e73b4285b3383e2f7da8c6586cc75 b/fuzz/gnutls_server_fuzzer.in/7b87ec81be3e73b4285b3383e2f7da8c6586cc75 new file mode 100644 index 0000000000..0a92ca45ab Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7b87ec81be3e73b4285b3383e2f7da8c6586cc75 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7b8e3c0de51b1d8099d43b741cfa1066184181a8 b/fuzz/gnutls_server_fuzzer.in/7b8e3c0de51b1d8099d43b741cfa1066184181a8 new file mode 100644 index 0000000000..f3dab99ebd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7b8e3c0de51b1d8099d43b741cfa1066184181a8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7b92f4cf9cdc02d9b1002bcee46d374e89fdece6 b/fuzz/gnutls_server_fuzzer.in/7b92f4cf9cdc02d9b1002bcee46d374e89fdece6 new file mode 100644 index 0000000000..663a15a58b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7b92f4cf9cdc02d9b1002bcee46d374e89fdece6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7bfe05e0f95d4a1c2d9566b583a314ba3fb4334d b/fuzz/gnutls_server_fuzzer.in/7bfe05e0f95d4a1c2d9566b583a314ba3fb4334d new file mode 100644 index 0000000000..c4104d9845 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7bfe05e0f95d4a1c2d9566b583a314ba3fb4334d differ diff --git a/fuzz/gnutls_server_fuzzer.in/7c035d09a5108a39b3445b5dd4c9af69ea6cf6f4 b/fuzz/gnutls_server_fuzzer.in/7c035d09a5108a39b3445b5dd4c9af69ea6cf6f4 new file mode 100644 index 0000000000..98b5b70114 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7c035d09a5108a39b3445b5dd4c9af69ea6cf6f4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7c1af2c7aa9a8e688a7a1801637e7c667efd14e9 b/fuzz/gnutls_server_fuzzer.in/7c1af2c7aa9a8e688a7a1801637e7c667efd14e9 new file mode 100644 index 0000000000..f67fb6a80b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7c1af2c7aa9a8e688a7a1801637e7c667efd14e9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7c4de20f9194fb5dc148fb8b85eac23ce38dfb82 b/fuzz/gnutls_server_fuzzer.in/7c4de20f9194fb5dc148fb8b85eac23ce38dfb82 new file mode 100644 index 0000000000..628361b95f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7c4de20f9194fb5dc148fb8b85eac23ce38dfb82 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7c5d8f81191508b05f3de39e7ac98df2167d7b46 b/fuzz/gnutls_server_fuzzer.in/7c5d8f81191508b05f3de39e7ac98df2167d7b46 new file mode 100644 index 0000000000..7c7a8b9af7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7c5d8f81191508b05f3de39e7ac98df2167d7b46 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7c63dc34e692440428cff99443064d85ee59833d b/fuzz/gnutls_server_fuzzer.in/7c63dc34e692440428cff99443064d85ee59833d new file mode 100644 index 0000000000..71e9179a27 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7c63dc34e692440428cff99443064d85ee59833d differ diff --git a/fuzz/gnutls_server_fuzzer.in/7cc961a18fb437387c4c17caa44a56a08cc8fc49 b/fuzz/gnutls_server_fuzzer.in/7cc961a18fb437387c4c17caa44a56a08cc8fc49 new file mode 100644 index 0000000000..b5fbfaeb44 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7cc961a18fb437387c4c17caa44a56a08cc8fc49 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7cfe3528ad6fcc549151d15b92ee0d271184170a b/fuzz/gnutls_server_fuzzer.in/7cfe3528ad6fcc549151d15b92ee0d271184170a new file mode 100644 index 0000000000..3d8da8db4e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7cfe3528ad6fcc549151d15b92ee0d271184170a differ diff --git a/fuzz/gnutls_server_fuzzer.in/7d814e02f0e39dea223948e19404fddb034d58d0 b/fuzz/gnutls_server_fuzzer.in/7d814e02f0e39dea223948e19404fddb034d58d0 new file mode 100644 index 0000000000..1441dcf43a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7d814e02f0e39dea223948e19404fddb034d58d0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7d8650a84245a52fe7cbc0e8dc653d0704b47c69 b/fuzz/gnutls_server_fuzzer.in/7d8650a84245a52fe7cbc0e8dc653d0704b47c69 new file mode 100644 index 0000000000..0e67ba07c8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7d8650a84245a52fe7cbc0e8dc653d0704b47c69 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7dfbb4a8a2cfb5d48fd3657907f79e21569aa7a1 b/fuzz/gnutls_server_fuzzer.in/7dfbb4a8a2cfb5d48fd3657907f79e21569aa7a1 new file mode 100644 index 0000000000..97173e7e78 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7dfbb4a8a2cfb5d48fd3657907f79e21569aa7a1 differ diff --git a/fuzz/gnutls_server_fuzzer.in/7ec281b33e62489eadfc3c4d7e830a3616a7b70b b/fuzz/gnutls_server_fuzzer.in/7ec281b33e62489eadfc3c4d7e830a3616a7b70b new file mode 100644 index 0000000000..7cce92a304 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7ec281b33e62489eadfc3c4d7e830a3616a7b70b differ diff --git a/fuzz/gnutls_server_fuzzer.in/7ed7c9d9a4c4871c31a2ea14efcfcfac82ba95a6 b/fuzz/gnutls_server_fuzzer.in/7ed7c9d9a4c4871c31a2ea14efcfcfac82ba95a6 new file mode 100644 index 0000000000..bc1bc75be2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/7ed7c9d9a4c4871c31a2ea14efcfcfac82ba95a6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8053f06b32efb2146000c42428cd4bef2c8f99c7 b/fuzz/gnutls_server_fuzzer.in/8053f06b32efb2146000c42428cd4bef2c8f99c7 new file mode 100644 index 0000000000..3321b3f2fe Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8053f06b32efb2146000c42428cd4bef2c8f99c7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/806ae3df44e61962131404b5383ada823511f23f b/fuzz/gnutls_server_fuzzer.in/806ae3df44e61962131404b5383ada823511f23f new file mode 100644 index 0000000000..6998334659 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/806ae3df44e61962131404b5383ada823511f23f differ diff --git a/fuzz/gnutls_server_fuzzer.in/80807d2ea40950eba2714b32180655119388f6ce b/fuzz/gnutls_server_fuzzer.in/80807d2ea40950eba2714b32180655119388f6ce new file mode 100644 index 0000000000..0154235bee Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/80807d2ea40950eba2714b32180655119388f6ce differ diff --git a/fuzz/gnutls_server_fuzzer.in/812fddce50794c968f507703c12c6af7327c2693 b/fuzz/gnutls_server_fuzzer.in/812fddce50794c968f507703c12c6af7327c2693 new file mode 100644 index 0000000000..4e8a8f5ce2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/812fddce50794c968f507703c12c6af7327c2693 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8138796724189385667e6334943ad6eee336ef5e b/fuzz/gnutls_server_fuzzer.in/8138796724189385667e6334943ad6eee336ef5e new file mode 100644 index 0000000000..a6488a9181 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8138796724189385667e6334943ad6eee336ef5e differ diff --git a/fuzz/gnutls_server_fuzzer.in/8159237fd41a78015d398a25dcceb55d31386cb6 b/fuzz/gnutls_server_fuzzer.in/8159237fd41a78015d398a25dcceb55d31386cb6 new file mode 100644 index 0000000000..a52caeccf6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8159237fd41a78015d398a25dcceb55d31386cb6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8180036b50ed008f254db251f60fba01f67814bf b/fuzz/gnutls_server_fuzzer.in/8180036b50ed008f254db251f60fba01f67814bf new file mode 100644 index 0000000000..c7a130733d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8180036b50ed008f254db251f60fba01f67814bf differ diff --git a/fuzz/gnutls_server_fuzzer.in/81a39fb2d28c035b41744a97f78447a733319382 b/fuzz/gnutls_server_fuzzer.in/81a39fb2d28c035b41744a97f78447a733319382 new file mode 100644 index 0000000000..5ad60e481e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/81a39fb2d28c035b41744a97f78447a733319382 differ diff --git a/fuzz/gnutls_server_fuzzer.in/81b45acecdf44e78ff346d4a6c905db0f654f4cf b/fuzz/gnutls_server_fuzzer.in/81b45acecdf44e78ff346d4a6c905db0f654f4cf new file mode 100644 index 0000000000..5aae03878e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/81b45acecdf44e78ff346d4a6c905db0f654f4cf differ diff --git a/fuzz/gnutls_server_fuzzer.in/8207efef999986b238086a81102467bd69bc8e79 b/fuzz/gnutls_server_fuzzer.in/8207efef999986b238086a81102467bd69bc8e79 new file mode 100644 index 0000000000..cae0755d63 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8207efef999986b238086a81102467bd69bc8e79 differ diff --git a/fuzz/gnutls_server_fuzzer.in/82b9e00642827fff53db5a22932077ea74c06b0a b/fuzz/gnutls_server_fuzzer.in/82b9e00642827fff53db5a22932077ea74c06b0a new file mode 100644 index 0000000000..9af2d63951 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/82b9e00642827fff53db5a22932077ea74c06b0a differ diff --git a/fuzz/gnutls_server_fuzzer.in/830e293007d61fd197ff33ddb858bd81a9c76a24 b/fuzz/gnutls_server_fuzzer.in/830e293007d61fd197ff33ddb858bd81a9c76a24 new file mode 100644 index 0000000000..2e364b3ea3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/830e293007d61fd197ff33ddb858bd81a9c76a24 differ diff --git a/fuzz/gnutls_server_fuzzer.in/831b4553e40acfddc702b94669b5b02d397baf15 b/fuzz/gnutls_server_fuzzer.in/831b4553e40acfddc702b94669b5b02d397baf15 new file mode 100644 index 0000000000..f4be6813d6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/831b4553e40acfddc702b94669b5b02d397baf15 differ diff --git a/fuzz/gnutls_server_fuzzer.in/833b1521dba190bd087865accc8d5649f0981158 b/fuzz/gnutls_server_fuzzer.in/833b1521dba190bd087865accc8d5649f0981158 new file mode 100644 index 0000000000..5302b38e84 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/833b1521dba190bd087865accc8d5649f0981158 differ diff --git a/fuzz/gnutls_server_fuzzer.in/834b6a226f75d0a13d260b0a05b56c35932b17f8 b/fuzz/gnutls_server_fuzzer.in/834b6a226f75d0a13d260b0a05b56c35932b17f8 new file mode 100644 index 0000000000..4d50b50a36 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/834b6a226f75d0a13d260b0a05b56c35932b17f8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8375719cf43860f7c8cea90df86a30109c217172 b/fuzz/gnutls_server_fuzzer.in/8375719cf43860f7c8cea90df86a30109c217172 new file mode 100644 index 0000000000..ad6653ddc9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8375719cf43860f7c8cea90df86a30109c217172 differ diff --git a/fuzz/gnutls_server_fuzzer.in/837e6c71439c904ea0bcf88e3bf49a800515e9f7 b/fuzz/gnutls_server_fuzzer.in/837e6c71439c904ea0bcf88e3bf49a800515e9f7 new file mode 100644 index 0000000000..9abf94b11c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/837e6c71439c904ea0bcf88e3bf49a800515e9f7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8384d6719508fbee5e2459c7761ec194f381cc54 b/fuzz/gnutls_server_fuzzer.in/8384d6719508fbee5e2459c7761ec194f381cc54 new file mode 100644 index 0000000000..4f521f03d1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8384d6719508fbee5e2459c7761ec194f381cc54 differ diff --git a/fuzz/gnutls_server_fuzzer.in/839348ed7d11058f636f4cf18fe5fad829a096da b/fuzz/gnutls_server_fuzzer.in/839348ed7d11058f636f4cf18fe5fad829a096da new file mode 100644 index 0000000000..2ca6957c22 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/839348ed7d11058f636f4cf18fe5fad829a096da differ diff --git a/fuzz/gnutls_server_fuzzer.in/83bfd9171936047c017d0e06a586eaa10188e7cf b/fuzz/gnutls_server_fuzzer.in/83bfd9171936047c017d0e06a586eaa10188e7cf new file mode 100644 index 0000000000..14919d8bbc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/83bfd9171936047c017d0e06a586eaa10188e7cf differ diff --git a/fuzz/gnutls_server_fuzzer.in/83dd787bac5b8b8634d3340dfc3537c62375e995 b/fuzz/gnutls_server_fuzzer.in/83dd787bac5b8b8634d3340dfc3537c62375e995 new file mode 100644 index 0000000000..c09d677fa4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/83dd787bac5b8b8634d3340dfc3537c62375e995 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8464b801a2adb3841b55a15798f0d57f0688e512 b/fuzz/gnutls_server_fuzzer.in/8464b801a2adb3841b55a15798f0d57f0688e512 new file mode 100644 index 0000000000..6299bd0c03 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8464b801a2adb3841b55a15798f0d57f0688e512 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8575d5b798211828c6b0fa37770d1de2a1a6125d b/fuzz/gnutls_server_fuzzer.in/8575d5b798211828c6b0fa37770d1de2a1a6125d new file mode 100644 index 0000000000..29b6733981 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8575d5b798211828c6b0fa37770d1de2a1a6125d differ diff --git a/fuzz/gnutls_server_fuzzer.in/8597cb0685c75ef03719d80b0b1ba5b5732e2e58 b/fuzz/gnutls_server_fuzzer.in/8597cb0685c75ef03719d80b0b1ba5b5732e2e58 new file mode 100644 index 0000000000..3e048a7404 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8597cb0685c75ef03719d80b0b1ba5b5732e2e58 differ diff --git a/fuzz/gnutls_server_fuzzer.in/85c51fd61a324e67646c200e6e50b276286e24fc b/fuzz/gnutls_server_fuzzer.in/85c51fd61a324e67646c200e6e50b276286e24fc new file mode 100644 index 0000000000..27c7ba7cfd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/85c51fd61a324e67646c200e6e50b276286e24fc differ diff --git a/fuzz/gnutls_server_fuzzer.in/85d586fc375b17e29cf66f9d324ef694d483d81e b/fuzz/gnutls_server_fuzzer.in/85d586fc375b17e29cf66f9d324ef694d483d81e new file mode 100644 index 0000000000..c35af4e575 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/85d586fc375b17e29cf66f9d324ef694d483d81e differ diff --git a/fuzz/gnutls_server_fuzzer.in/85e6a51e06198576e69a9a2b712538253a5c7ece b/fuzz/gnutls_server_fuzzer.in/85e6a51e06198576e69a9a2b712538253a5c7ece new file mode 100644 index 0000000000..dafddb0b2b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/85e6a51e06198576e69a9a2b712538253a5c7ece differ diff --git a/fuzz/gnutls_server_fuzzer.in/865424250f3372fd80022ecbd3030371eb7484bb b/fuzz/gnutls_server_fuzzer.in/865424250f3372fd80022ecbd3030371eb7484bb new file mode 100644 index 0000000000..5490d4b990 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/865424250f3372fd80022ecbd3030371eb7484bb differ diff --git a/fuzz/gnutls_server_fuzzer.in/87d8c8a382cf24cd6b6ae2e8c7d0404272fb30c5 b/fuzz/gnutls_server_fuzzer.in/87d8c8a382cf24cd6b6ae2e8c7d0404272fb30c5 new file mode 100644 index 0000000000..bf69713425 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/87d8c8a382cf24cd6b6ae2e8c7d0404272fb30c5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8805275b3bad0cbc721d7d075b7aec4e5020a4d8 b/fuzz/gnutls_server_fuzzer.in/8805275b3bad0cbc721d7d075b7aec4e5020a4d8 new file mode 100644 index 0000000000..78a3971051 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8805275b3bad0cbc721d7d075b7aec4e5020a4d8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/88d1f619c2134113545bb9e5209d60429942847f b/fuzz/gnutls_server_fuzzer.in/88d1f619c2134113545bb9e5209d60429942847f new file mode 100644 index 0000000000..401caf027d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/88d1f619c2134113545bb9e5209d60429942847f differ diff --git a/fuzz/gnutls_server_fuzzer.in/88dc25c5c74c7921cc67a204684235d2b33a2c39 b/fuzz/gnutls_server_fuzzer.in/88dc25c5c74c7921cc67a204684235d2b33a2c39 new file mode 100644 index 0000000000..1a1c4718fd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/88dc25c5c74c7921cc67a204684235d2b33a2c39 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8939ebf1b7f776de9a90db6a72da4394f9be17d2 b/fuzz/gnutls_server_fuzzer.in/8939ebf1b7f776de9a90db6a72da4394f9be17d2 new file mode 100644 index 0000000000..3adae6f377 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8939ebf1b7f776de9a90db6a72da4394f9be17d2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8945ae4d30f664adbb5f6da5443898c0b9e42a41 b/fuzz/gnutls_server_fuzzer.in/8945ae4d30f664adbb5f6da5443898c0b9e42a41 new file mode 100644 index 0000000000..ff9f5cf440 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8945ae4d30f664adbb5f6da5443898c0b9e42a41 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8953a3c7ba525148fc13e392e9d7b1b3027ea37b b/fuzz/gnutls_server_fuzzer.in/8953a3c7ba525148fc13e392e9d7b1b3027ea37b new file mode 100644 index 0000000000..2bedfb90ba Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8953a3c7ba525148fc13e392e9d7b1b3027ea37b differ diff --git a/fuzz/gnutls_server_fuzzer.in/895c39498e704e7782d60c79adb639b603287de5 b/fuzz/gnutls_server_fuzzer.in/895c39498e704e7782d60c79adb639b603287de5 new file mode 100644 index 0000000000..8b83a75d5a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/895c39498e704e7782d60c79adb639b603287de5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/897b8f491b29f12349efb37682add3b513e9476d b/fuzz/gnutls_server_fuzzer.in/897b8f491b29f12349efb37682add3b513e9476d new file mode 100644 index 0000000000..53cd924914 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/897b8f491b29f12349efb37682add3b513e9476d differ diff --git a/fuzz/gnutls_server_fuzzer.in/89e026f0113a659dd8d40df35e1e2c060f83e333 b/fuzz/gnutls_server_fuzzer.in/89e026f0113a659dd8d40df35e1e2c060f83e333 new file mode 100644 index 0000000000..eaca3de2d3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/89e026f0113a659dd8d40df35e1e2c060f83e333 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8b8302e4b62f0fed72e8158a96c0f048effed8b1 b/fuzz/gnutls_server_fuzzer.in/8b8302e4b62f0fed72e8158a96c0f048effed8b1 new file mode 100644 index 0000000000..472c91635d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8b8302e4b62f0fed72e8158a96c0f048effed8b1 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8beeb46b3ddb2d407ddd9ce3a74765c0352047bf b/fuzz/gnutls_server_fuzzer.in/8beeb46b3ddb2d407ddd9ce3a74765c0352047bf new file mode 100644 index 0000000000..af64238641 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8beeb46b3ddb2d407ddd9ce3a74765c0352047bf differ diff --git a/fuzz/gnutls_server_fuzzer.in/8cc2d3b34331f444a32c19adc1638bf7761c6b2a b/fuzz/gnutls_server_fuzzer.in/8cc2d3b34331f444a32c19adc1638bf7761c6b2a new file mode 100644 index 0000000000..e1e5d783b9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8cc2d3b34331f444a32c19adc1638bf7761c6b2a differ diff --git a/fuzz/gnutls_server_fuzzer.in/8d98d283d8889c62afe0bdc5488f3914dbcb1cbe b/fuzz/gnutls_server_fuzzer.in/8d98d283d8889c62afe0bdc5488f3914dbcb1cbe new file mode 100644 index 0000000000..3a3ff21f10 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8d98d283d8889c62afe0bdc5488f3914dbcb1cbe differ diff --git a/fuzz/gnutls_server_fuzzer.in/8dc9927297dc363f7858864279aba3d2e7f1abea b/fuzz/gnutls_server_fuzzer.in/8dc9927297dc363f7858864279aba3d2e7f1abea new file mode 100644 index 0000000000..16d2735680 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8dc9927297dc363f7858864279aba3d2e7f1abea differ diff --git a/fuzz/gnutls_server_fuzzer.in/8dd2a6407311bacdacf8308101845603e2b1ed50 b/fuzz/gnutls_server_fuzzer.in/8dd2a6407311bacdacf8308101845603e2b1ed50 new file mode 100644 index 0000000000..193e27add4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8dd2a6407311bacdacf8308101845603e2b1ed50 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8e06b88277e9681f4021e1aeec53da1508453382 b/fuzz/gnutls_server_fuzzer.in/8e06b88277e9681f4021e1aeec53da1508453382 new file mode 100644 index 0000000000..3ed98f5e55 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8e06b88277e9681f4021e1aeec53da1508453382 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8e301840e80cc852274de8d1e652c126605c63b7 b/fuzz/gnutls_server_fuzzer.in/8e301840e80cc852274de8d1e652c126605c63b7 new file mode 100644 index 0000000000..48572299e1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8e301840e80cc852274de8d1e652c126605c63b7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8e3df0556be54cfda0c27453520f1a5114e7f632 b/fuzz/gnutls_server_fuzzer.in/8e3df0556be54cfda0c27453520f1a5114e7f632 new file mode 100644 index 0000000000..4cc1900ffe Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8e3df0556be54cfda0c27453520f1a5114e7f632 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8e570bbd1786cd57807cca862f97dd21684e00b4 b/fuzz/gnutls_server_fuzzer.in/8e570bbd1786cd57807cca862f97dd21684e00b4 new file mode 100644 index 0000000000..5af40caa40 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8e570bbd1786cd57807cca862f97dd21684e00b4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8e5c90a515bc4269c8ae67b71210992cc513401a b/fuzz/gnutls_server_fuzzer.in/8e5c90a515bc4269c8ae67b71210992cc513401a new file mode 100644 index 0000000000..0f61e7b4b2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8e5c90a515bc4269c8ae67b71210992cc513401a differ diff --git a/fuzz/gnutls_server_fuzzer.in/8e8c1860e46e759dbfd748e8b5c6d9f1fc9f9b43 b/fuzz/gnutls_server_fuzzer.in/8e8c1860e46e759dbfd748e8b5c6d9f1fc9f9b43 new file mode 100644 index 0000000000..89bcbfea1f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8e8c1860e46e759dbfd748e8b5c6d9f1fc9f9b43 differ diff --git a/fuzz/gnutls_server_fuzzer.in/8efb5269606348b657c5bfac9b07676b7d62b06e b/fuzz/gnutls_server_fuzzer.in/8efb5269606348b657c5bfac9b07676b7d62b06e new file mode 100644 index 0000000000..1f7591557b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8efb5269606348b657c5bfac9b07676b7d62b06e differ diff --git a/fuzz/gnutls_server_fuzzer.in/8f24644c89124a1bab4504b929e08c9cc74af967 b/fuzz/gnutls_server_fuzzer.in/8f24644c89124a1bab4504b929e08c9cc74af967 new file mode 100644 index 0000000000..55013365c3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/8f24644c89124a1bab4504b929e08c9cc74af967 differ diff --git a/fuzz/gnutls_server_fuzzer.in/90091ac8639f91ed2e041cc7d658e0a0589c0324 b/fuzz/gnutls_server_fuzzer.in/90091ac8639f91ed2e041cc7d658e0a0589c0324 new file mode 100644 index 0000000000..45fa497dd7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/90091ac8639f91ed2e041cc7d658e0a0589c0324 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9031fbca0fb9da65aca5e2423604341682d9d82a b/fuzz/gnutls_server_fuzzer.in/9031fbca0fb9da65aca5e2423604341682d9d82a new file mode 100644 index 0000000000..4b45a72551 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9031fbca0fb9da65aca5e2423604341682d9d82a differ diff --git a/fuzz/gnutls_server_fuzzer.in/91309ecd933f81b4ea588f4ee7f134b263368479 b/fuzz/gnutls_server_fuzzer.in/91309ecd933f81b4ea588f4ee7f134b263368479 new file mode 100644 index 0000000000..58705c4e9a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/91309ecd933f81b4ea588f4ee7f134b263368479 differ diff --git a/fuzz/gnutls_server_fuzzer.in/91bb3e74fa4244947b37a60dab7bae553b215dce b/fuzz/gnutls_server_fuzzer.in/91bb3e74fa4244947b37a60dab7bae553b215dce new file mode 100644 index 0000000000..283b7b33ab Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/91bb3e74fa4244947b37a60dab7bae553b215dce differ diff --git a/fuzz/gnutls_server_fuzzer.in/91cf1d7baddcde29f323fb536d89137370fcb6e7 b/fuzz/gnutls_server_fuzzer.in/91cf1d7baddcde29f323fb536d89137370fcb6e7 new file mode 100644 index 0000000000..969a358bee Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/91cf1d7baddcde29f323fb536d89137370fcb6e7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/924cfe3a71abc702e7d011420acf71dc87ea8b92 b/fuzz/gnutls_server_fuzzer.in/924cfe3a71abc702e7d011420acf71dc87ea8b92 new file mode 100644 index 0000000000..22848858c5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/924cfe3a71abc702e7d011420acf71dc87ea8b92 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9250d30444c488e0c23cc891f9a8c7385ff1d704 b/fuzz/gnutls_server_fuzzer.in/9250d30444c488e0c23cc891f9a8c7385ff1d704 new file mode 100644 index 0000000000..99fe1c1a01 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9250d30444c488e0c23cc891f9a8c7385ff1d704 differ diff --git a/fuzz/gnutls_server_fuzzer.in/93529a81e1913736e10debb6a9fcb6fc38fdb8c3 b/fuzz/gnutls_server_fuzzer.in/93529a81e1913736e10debb6a9fcb6fc38fdb8c3 new file mode 100644 index 0000000000..2e59c95071 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/93529a81e1913736e10debb6a9fcb6fc38fdb8c3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/937555916573158c5b2b7ea404ed7cad9f14009b b/fuzz/gnutls_server_fuzzer.in/937555916573158c5b2b7ea404ed7cad9f14009b new file mode 100644 index 0000000000..b32cc63a49 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/937555916573158c5b2b7ea404ed7cad9f14009b differ diff --git a/fuzz/gnutls_server_fuzzer.in/937c18f2c626f0bed4206ce9cc27228649d9d612 b/fuzz/gnutls_server_fuzzer.in/937c18f2c626f0bed4206ce9cc27228649d9d612 new file mode 100644 index 0000000000..4aa8f4ed25 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/937c18f2c626f0bed4206ce9cc27228649d9d612 differ diff --git a/fuzz/gnutls_server_fuzzer.in/937ec088d6b27daae595b8225b817ae15eec2a47 b/fuzz/gnutls_server_fuzzer.in/937ec088d6b27daae595b8225b817ae15eec2a47 new file mode 100644 index 0000000000..c8c73067d6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/937ec088d6b27daae595b8225b817ae15eec2a47 differ diff --git a/fuzz/gnutls_server_fuzzer.in/938ccebf021b20d1d5c68d93a7e9d72a74b24a6a b/fuzz/gnutls_server_fuzzer.in/938ccebf021b20d1d5c68d93a7e9d72a74b24a6a new file mode 100644 index 0000000000..aff2952489 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/938ccebf021b20d1d5c68d93a7e9d72a74b24a6a differ diff --git a/fuzz/gnutls_server_fuzzer.in/9420dd91fd6d61504d7839a38bfe3f05de0d5d89 b/fuzz/gnutls_server_fuzzer.in/9420dd91fd6d61504d7839a38bfe3f05de0d5d89 new file mode 100644 index 0000000000..20cf8144ec Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9420dd91fd6d61504d7839a38bfe3f05de0d5d89 differ diff --git a/fuzz/gnutls_server_fuzzer.in/94e23e423645b853d5d204067b4e93ea6f6ef766 b/fuzz/gnutls_server_fuzzer.in/94e23e423645b853d5d204067b4e93ea6f6ef766 new file mode 100644 index 0000000000..ce90b0319c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/94e23e423645b853d5d204067b4e93ea6f6ef766 differ diff --git a/fuzz/gnutls_server_fuzzer.in/95446c493db65751768499c7a4866e42e5f4932f b/fuzz/gnutls_server_fuzzer.in/95446c493db65751768499c7a4866e42e5f4932f new file mode 100644 index 0000000000..fa2eec6218 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/95446c493db65751768499c7a4866e42e5f4932f differ diff --git a/fuzz/gnutls_server_fuzzer.in/9569f77d860f078d8161ba11901b936486b2d283 b/fuzz/gnutls_server_fuzzer.in/9569f77d860f078d8161ba11901b936486b2d283 new file mode 100644 index 0000000000..de48c44af5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9569f77d860f078d8161ba11901b936486b2d283 differ diff --git a/fuzz/gnutls_server_fuzzer.in/963d3f0750297024822b13a6952ebd3b1b03195b b/fuzz/gnutls_server_fuzzer.in/963d3f0750297024822b13a6952ebd3b1b03195b new file mode 100644 index 0000000000..2c7486f90b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/963d3f0750297024822b13a6952ebd3b1b03195b differ diff --git a/fuzz/gnutls_server_fuzzer.in/9679829b125e3d1481bd3bd287fbdc5ad04b101d b/fuzz/gnutls_server_fuzzer.in/9679829b125e3d1481bd3bd287fbdc5ad04b101d new file mode 100644 index 0000000000..fa671837a5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9679829b125e3d1481bd3bd287fbdc5ad04b101d differ diff --git a/fuzz/gnutls_server_fuzzer.in/968d9f7d5bf7e11e205dedf844a771f185c777a0 b/fuzz/gnutls_server_fuzzer.in/968d9f7d5bf7e11e205dedf844a771f185c777a0 new file mode 100644 index 0000000000..f9bc4f61dc --- /dev/null +++ b/fuzz/gnutls_server_fuzzer.in/968d9f7d5bf7e11e205dedf844a771f185c777a0 @@ -0,0 +1 @@ +* ;)(D \ No newline at end of file diff --git a/fuzz/gnutls_server_fuzzer.in/96a8544d9070e94a7b5a52b0f7799c22661d4575 b/fuzz/gnutls_server_fuzzer.in/96a8544d9070e94a7b5a52b0f7799c22661d4575 new file mode 100644 index 0000000000..fe1860c872 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/96a8544d9070e94a7b5a52b0f7799c22661d4575 differ diff --git a/fuzz/gnutls_server_fuzzer.in/96c740cb445cb8e310d379fc5534899d33d911ee b/fuzz/gnutls_server_fuzzer.in/96c740cb445cb8e310d379fc5534899d33d911ee new file mode 100644 index 0000000000..63baffb186 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/96c740cb445cb8e310d379fc5534899d33d911ee differ diff --git a/fuzz/gnutls_server_fuzzer.in/96e88c6539e937f868152998ba46a8decab25bf6 b/fuzz/gnutls_server_fuzzer.in/96e88c6539e937f868152998ba46a8decab25bf6 new file mode 100644 index 0000000000..68d0d1cd64 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/96e88c6539e937f868152998ba46a8decab25bf6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/973b3ff541825e5cd80c2f36009d5ddfed8ddefa b/fuzz/gnutls_server_fuzzer.in/973b3ff541825e5cd80c2f36009d5ddfed8ddefa new file mode 100644 index 0000000000..e31b9dac04 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/973b3ff541825e5cd80c2f36009d5ddfed8ddefa differ diff --git a/fuzz/gnutls_server_fuzzer.in/97bcb80165965cbe5b4ed036bf26be309c83e9d8 b/fuzz/gnutls_server_fuzzer.in/97bcb80165965cbe5b4ed036bf26be309c83e9d8 new file mode 100644 index 0000000000..e4c8aa2932 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/97bcb80165965cbe5b4ed036bf26be309c83e9d8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9829e6ac7dc8461e054ae8dbecf0f5f83655b1e4 b/fuzz/gnutls_server_fuzzer.in/9829e6ac7dc8461e054ae8dbecf0f5f83655b1e4 new file mode 100644 index 0000000000..5edf81274c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9829e6ac7dc8461e054ae8dbecf0f5f83655b1e4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/98b43a1f7204c89944c8012325ddd286c500d48c b/fuzz/gnutls_server_fuzzer.in/98b43a1f7204c89944c8012325ddd286c500d48c new file mode 100644 index 0000000000..21cbea79f1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/98b43a1f7204c89944c8012325ddd286c500d48c differ diff --git a/fuzz/gnutls_server_fuzzer.in/99a0a501db0674810eec892a4bd6855f826b5076 b/fuzz/gnutls_server_fuzzer.in/99a0a501db0674810eec892a4bd6855f826b5076 new file mode 100644 index 0000000000..8d3d9edd19 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/99a0a501db0674810eec892a4bd6855f826b5076 differ diff --git a/fuzz/gnutls_server_fuzzer.in/99ae03d785473cfc9ebb3fe5c562b1e0495a48ec b/fuzz/gnutls_server_fuzzer.in/99ae03d785473cfc9ebb3fe5c562b1e0495a48ec new file mode 100644 index 0000000000..cbe52a5daf Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/99ae03d785473cfc9ebb3fe5c562b1e0495a48ec differ diff --git a/fuzz/gnutls_server_fuzzer.in/99c2afa56328878e9168298f8504bf5307e103aa b/fuzz/gnutls_server_fuzzer.in/99c2afa56328878e9168298f8504bf5307e103aa new file mode 100644 index 0000000000..bcaa8cb4d0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/99c2afa56328878e9168298f8504bf5307e103aa differ diff --git a/fuzz/gnutls_server_fuzzer.in/9a093e7ab7920e905aa08b7499d7ae826fb4ea81 b/fuzz/gnutls_server_fuzzer.in/9a093e7ab7920e905aa08b7499d7ae826fb4ea81 new file mode 100644 index 0000000000..12bcccadfa Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9a093e7ab7920e905aa08b7499d7ae826fb4ea81 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9a127d06a80b9c9568ce1a76f0b3ca5ad386e435 b/fuzz/gnutls_server_fuzzer.in/9a127d06a80b9c9568ce1a76f0b3ca5ad386e435 new file mode 100644 index 0000000000..6be319cb4f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9a127d06a80b9c9568ce1a76f0b3ca5ad386e435 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9a1c0b889505e0223b13e5f4ad972fc00c166df7 b/fuzz/gnutls_server_fuzzer.in/9a1c0b889505e0223b13e5f4ad972fc00c166df7 new file mode 100644 index 0000000000..78d902fafc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9a1c0b889505e0223b13e5f4ad972fc00c166df7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9a396fd0ce7e948e49041313441f82c99d54e369 b/fuzz/gnutls_server_fuzzer.in/9a396fd0ce7e948e49041313441f82c99d54e369 new file mode 100644 index 0000000000..4ae7dc84b6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9a396fd0ce7e948e49041313441f82c99d54e369 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9a785aa2e18f8a3cb4be5b12d445b2a9ea2977d5 b/fuzz/gnutls_server_fuzzer.in/9a785aa2e18f8a3cb4be5b12d445b2a9ea2977d5 new file mode 100644 index 0000000000..77d3860f1c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9a785aa2e18f8a3cb4be5b12d445b2a9ea2977d5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9b10fa1240bd8c8bc1f2062b3438c37b9158a736 b/fuzz/gnutls_server_fuzzer.in/9b10fa1240bd8c8bc1f2062b3438c37b9158a736 new file mode 100644 index 0000000000..6b50883554 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9b10fa1240bd8c8bc1f2062b3438c37b9158a736 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9b89788e47befb73d63e9713e05efbc44a7ade66 b/fuzz/gnutls_server_fuzzer.in/9b89788e47befb73d63e9713e05efbc44a7ade66 new file mode 100644 index 0000000000..c0138d9f41 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9b89788e47befb73d63e9713e05efbc44a7ade66 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9c12cf78c8fd0a2d9bfb4f3f87131b0d4330228f b/fuzz/gnutls_server_fuzzer.in/9c12cf78c8fd0a2d9bfb4f3f87131b0d4330228f new file mode 100644 index 0000000000..bb9af7ec3c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9c12cf78c8fd0a2d9bfb4f3f87131b0d4330228f differ diff --git a/fuzz/gnutls_server_fuzzer.in/9c40244a92af2353c35a8cd467000c52d0d02b40 b/fuzz/gnutls_server_fuzzer.in/9c40244a92af2353c35a8cd467000c52d0d02b40 new file mode 100644 index 0000000000..3718d29750 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9c40244a92af2353c35a8cd467000c52d0d02b40 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9cba91c4df72386f402a201fea660f95b1f9b9e1 b/fuzz/gnutls_server_fuzzer.in/9cba91c4df72386f402a201fea660f95b1f9b9e1 new file mode 100644 index 0000000000..b8728b1f03 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9cba91c4df72386f402a201fea660f95b1f9b9e1 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9dac9bd5c3e392445ec3f330285745e9d7451bb8 b/fuzz/gnutls_server_fuzzer.in/9dac9bd5c3e392445ec3f330285745e9d7451bb8 new file mode 100644 index 0000000000..e264e428c4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9dac9bd5c3e392445ec3f330285745e9d7451bb8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9f3972d3c4840cf59b94e4547b70f0cbb57ccf09 b/fuzz/gnutls_server_fuzzer.in/9f3972d3c4840cf59b94e4547b70f0cbb57ccf09 new file mode 100644 index 0000000000..86dcea7c4b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9f3972d3c4840cf59b94e4547b70f0cbb57ccf09 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9fb1999e186969d7c5bf810664e64bcf971b5102 b/fuzz/gnutls_server_fuzzer.in/9fb1999e186969d7c5bf810664e64bcf971b5102 new file mode 100644 index 0000000000..b38fd5b4f6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9fb1999e186969d7c5bf810664e64bcf971b5102 differ diff --git a/fuzz/gnutls_server_fuzzer.in/9fbad2794cac43a526e771577f5bd84614892440 b/fuzz/gnutls_server_fuzzer.in/9fbad2794cac43a526e771577f5bd84614892440 new file mode 100644 index 0000000000..1ef5edbf43 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/9fbad2794cac43a526e771577f5bd84614892440 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a012d49749b3203bbaae64744bd318814b9526ec b/fuzz/gnutls_server_fuzzer.in/a012d49749b3203bbaae64744bd318814b9526ec new file mode 100644 index 0000000000..a4782e17a8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a012d49749b3203bbaae64744bd318814b9526ec differ diff --git a/fuzz/gnutls_server_fuzzer.in/a06888d16eed492f3029cca24313282fc7b84bb8 b/fuzz/gnutls_server_fuzzer.in/a06888d16eed492f3029cca24313282fc7b84bb8 new file mode 100644 index 0000000000..6ffb65c87c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a06888d16eed492f3029cca24313282fc7b84bb8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a0c78112deb49cc5b8fad9ba59e7023aa6cbf8de b/fuzz/gnutls_server_fuzzer.in/a0c78112deb49cc5b8fad9ba59e7023aa6cbf8de new file mode 100644 index 0000000000..9e3a5bdbd1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a0c78112deb49cc5b8fad9ba59e7023aa6cbf8de differ diff --git a/fuzz/gnutls_server_fuzzer.in/a0d9e783d46acfd7452db7d870ac902f5b40d0c4 b/fuzz/gnutls_server_fuzzer.in/a0d9e783d46acfd7452db7d870ac902f5b40d0c4 new file mode 100644 index 0000000000..6412283849 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a0d9e783d46acfd7452db7d870ac902f5b40d0c4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a10c1dbc29000e36c89c34b7cf271e9608c31183 b/fuzz/gnutls_server_fuzzer.in/a10c1dbc29000e36c89c34b7cf271e9608c31183 new file mode 100644 index 0000000000..2ea0d2a58b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a10c1dbc29000e36c89c34b7cf271e9608c31183 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a1a37ff5020144604673648d65a6cab375add2dc b/fuzz/gnutls_server_fuzzer.in/a1a37ff5020144604673648d65a6cab375add2dc new file mode 100644 index 0000000000..60f209050b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a1a37ff5020144604673648d65a6cab375add2dc differ diff --git a/fuzz/gnutls_server_fuzzer.in/a1a5c69770c6f2b91a5e78a5865e592c0c82a3be b/fuzz/gnutls_server_fuzzer.in/a1a5c69770c6f2b91a5e78a5865e592c0c82a3be new file mode 100644 index 0000000000..94b242a4ed Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a1a5c69770c6f2b91a5e78a5865e592c0c82a3be differ diff --git a/fuzz/gnutls_server_fuzzer.in/a1a6fbd7d7940ad43632bff5478f39b94de97ce2 b/fuzz/gnutls_server_fuzzer.in/a1a6fbd7d7940ad43632bff5478f39b94de97ce2 new file mode 100644 index 0000000000..25dd93da94 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a1a6fbd7d7940ad43632bff5478f39b94de97ce2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a1b79ef879d9eacce6d08d82e6a058580a44cd9f b/fuzz/gnutls_server_fuzzer.in/a1b79ef879d9eacce6d08d82e6a058580a44cd9f new file mode 100644 index 0000000000..fcc6b12fd6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a1b79ef879d9eacce6d08d82e6a058580a44cd9f differ diff --git a/fuzz/gnutls_server_fuzzer.in/a1e12a6767b59623e0510e770eca9defb497b2ea b/fuzz/gnutls_server_fuzzer.in/a1e12a6767b59623e0510e770eca9defb497b2ea new file mode 100644 index 0000000000..6fd1fa2099 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a1e12a6767b59623e0510e770eca9defb497b2ea differ diff --git a/fuzz/gnutls_server_fuzzer.in/a1ef28472d3dbf5f5104ecb2fde52b2e35fe8d38 b/fuzz/gnutls_server_fuzzer.in/a1ef28472d3dbf5f5104ecb2fde52b2e35fe8d38 new file mode 100644 index 0000000000..4b3ba23a2a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a1ef28472d3dbf5f5104ecb2fde52b2e35fe8d38 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a21a59c2acb8af99b02e6b036a69bba367f7b654 b/fuzz/gnutls_server_fuzzer.in/a21a59c2acb8af99b02e6b036a69bba367f7b654 new file mode 100644 index 0000000000..6dabe6270c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a21a59c2acb8af99b02e6b036a69bba367f7b654 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a2a436b36aa9232cc5f93610fcab077276a5c377 b/fuzz/gnutls_server_fuzzer.in/a2a436b36aa9232cc5f93610fcab077276a5c377 new file mode 100644 index 0000000000..c47fa1a1b1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a2a436b36aa9232cc5f93610fcab077276a5c377 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a316e32c44b703e56b6d88ce3471d81c6334a0ab b/fuzz/gnutls_server_fuzzer.in/a316e32c44b703e56b6d88ce3471d81c6334a0ab new file mode 100644 index 0000000000..ce758c07ef Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a316e32c44b703e56b6d88ce3471d81c6334a0ab differ diff --git a/fuzz/gnutls_server_fuzzer.in/a33bde27de361a1d7a1e81fd372c6c36213686de b/fuzz/gnutls_server_fuzzer.in/a33bde27de361a1d7a1e81fd372c6c36213686de new file mode 100644 index 0000000000..e6f60bf651 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a33bde27de361a1d7a1e81fd372c6c36213686de differ diff --git a/fuzz/gnutls_server_fuzzer.in/a35841b58a668bdbb3d82855c0da5b6a20ec6325 b/fuzz/gnutls_server_fuzzer.in/a35841b58a668bdbb3d82855c0da5b6a20ec6325 new file mode 100644 index 0000000000..c6b55ffe2c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a35841b58a668bdbb3d82855c0da5b6a20ec6325 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a3d3fdf1d2312edc426dc348d5395681007a2401 b/fuzz/gnutls_server_fuzzer.in/a3d3fdf1d2312edc426dc348d5395681007a2401 new file mode 100644 index 0000000000..f159e42d32 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a3d3fdf1d2312edc426dc348d5395681007a2401 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a3d4d3dcc7e20c5825625c6e62457046190c66db b/fuzz/gnutls_server_fuzzer.in/a3d4d3dcc7e20c5825625c6e62457046190c66db new file mode 100644 index 0000000000..be6be3ef5d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a3d4d3dcc7e20c5825625c6e62457046190c66db differ diff --git a/fuzz/gnutls_server_fuzzer.in/a3e81c4b0ed0485e718cbbeb9858ffad73329e6b b/fuzz/gnutls_server_fuzzer.in/a3e81c4b0ed0485e718cbbeb9858ffad73329e6b new file mode 100644 index 0000000000..0253aab8ac Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a3e81c4b0ed0485e718cbbeb9858ffad73329e6b differ diff --git a/fuzz/gnutls_server_fuzzer.in/a4280486d0831cabb7bd4c2a84c81594c29316ec b/fuzz/gnutls_server_fuzzer.in/a4280486d0831cabb7bd4c2a84c81594c29316ec new file mode 100644 index 0000000000..5a81228a1c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a4280486d0831cabb7bd4c2a84c81594c29316ec differ diff --git a/fuzz/gnutls_server_fuzzer.in/a43c15bec43163064d7c6fd22959e65a6135f16b b/fuzz/gnutls_server_fuzzer.in/a43c15bec43163064d7c6fd22959e65a6135f16b new file mode 100644 index 0000000000..6956f349a4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a43c15bec43163064d7c6fd22959e65a6135f16b differ diff --git a/fuzz/gnutls_server_fuzzer.in/a4572ec25a37e02be6d58311ae6e5c09ff0cbc91 b/fuzz/gnutls_server_fuzzer.in/a4572ec25a37e02be6d58311ae6e5c09ff0cbc91 new file mode 100644 index 0000000000..0288047954 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a4572ec25a37e02be6d58311ae6e5c09ff0cbc91 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a45ff4b39ac104d6df198befd54fb3fa3a977838 b/fuzz/gnutls_server_fuzzer.in/a45ff4b39ac104d6df198befd54fb3fa3a977838 new file mode 100644 index 0000000000..60a2c00b3b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a45ff4b39ac104d6df198befd54fb3fa3a977838 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a4f931fe547a27e62d08f8c754495e63e036f644 b/fuzz/gnutls_server_fuzzer.in/a4f931fe547a27e62d08f8c754495e63e036f644 new file mode 100644 index 0000000000..149d84c9a9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a4f931fe547a27e62d08f8c754495e63e036f644 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a51268f09cc83a4e02836206d836f79f111d0134 b/fuzz/gnutls_server_fuzzer.in/a51268f09cc83a4e02836206d836f79f111d0134 new file mode 100644 index 0000000000..3cb1038528 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a51268f09cc83a4e02836206d836f79f111d0134 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a51c687f387c60d8a455f29a264640c6f082ff32 b/fuzz/gnutls_server_fuzzer.in/a51c687f387c60d8a455f29a264640c6f082ff32 new file mode 100644 index 0000000000..43b25f24a6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a51c687f387c60d8a455f29a264640c6f082ff32 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a5ab87e0eb008a04aa43bed74cf201ac0eb00e27 b/fuzz/gnutls_server_fuzzer.in/a5ab87e0eb008a04aa43bed74cf201ac0eb00e27 new file mode 100644 index 0000000000..c6892a51d1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a5ab87e0eb008a04aa43bed74cf201ac0eb00e27 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a61f96f4a94fb831f1c3667737161d8901d8b5fe b/fuzz/gnutls_server_fuzzer.in/a61f96f4a94fb831f1c3667737161d8901d8b5fe new file mode 100644 index 0000000000..1158eb5744 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a61f96f4a94fb831f1c3667737161d8901d8b5fe differ diff --git a/fuzz/gnutls_server_fuzzer.in/a66fd8177442ae960cee14e0ae064b92ceb65c2a b/fuzz/gnutls_server_fuzzer.in/a66fd8177442ae960cee14e0ae064b92ceb65c2a new file mode 100644 index 0000000000..2351679bfb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a66fd8177442ae960cee14e0ae064b92ceb65c2a differ diff --git a/fuzz/gnutls_server_fuzzer.in/a69a8fb7eab2213297c7d1fcf857ee63d1e2da67 b/fuzz/gnutls_server_fuzzer.in/a69a8fb7eab2213297c7d1fcf857ee63d1e2da67 new file mode 100644 index 0000000000..d8cb6e0624 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a69a8fb7eab2213297c7d1fcf857ee63d1e2da67 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a6b78e07e416104c9ff4af64cdfbfc0482739d0d b/fuzz/gnutls_server_fuzzer.in/a6b78e07e416104c9ff4af64cdfbfc0482739d0d new file mode 100644 index 0000000000..02df4ba468 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a6b78e07e416104c9ff4af64cdfbfc0482739d0d differ diff --git a/fuzz/gnutls_server_fuzzer.in/a6f78b2657fdc06c0dd573eb3d41253e99dcafea b/fuzz/gnutls_server_fuzzer.in/a6f78b2657fdc06c0dd573eb3d41253e99dcafea new file mode 100644 index 0000000000..1456310fb3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a6f78b2657fdc06c0dd573eb3d41253e99dcafea differ diff --git a/fuzz/gnutls_server_fuzzer.in/a72d674d8fed5df613b830b5f088a745a3464350 b/fuzz/gnutls_server_fuzzer.in/a72d674d8fed5df613b830b5f088a745a3464350 new file mode 100644 index 0000000000..a772939e22 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a72d674d8fed5df613b830b5f088a745a3464350 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a762e5700c3d9aa3c819fbf4835bdfa5523d94d9 b/fuzz/gnutls_server_fuzzer.in/a762e5700c3d9aa3c819fbf4835bdfa5523d94d9 new file mode 100644 index 0000000000..0e395653f4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a762e5700c3d9aa3c819fbf4835bdfa5523d94d9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a774de6e5e25a62a3064a521d73ca0d81c0b2210 b/fuzz/gnutls_server_fuzzer.in/a774de6e5e25a62a3064a521d73ca0d81c0b2210 new file mode 100644 index 0000000000..5a61b1bde0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a774de6e5e25a62a3064a521d73ca0d81c0b2210 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a78403ce37531b309159cee32af375843dcf442d b/fuzz/gnutls_server_fuzzer.in/a78403ce37531b309159cee32af375843dcf442d new file mode 100644 index 0000000000..3b717c28e5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a78403ce37531b309159cee32af375843dcf442d differ diff --git a/fuzz/gnutls_server_fuzzer.in/a792d3ecfa028c20db3032c5135c4d503c661866 b/fuzz/gnutls_server_fuzzer.in/a792d3ecfa028c20db3032c5135c4d503c661866 new file mode 100644 index 0000000000..ece863d8f8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a792d3ecfa028c20db3032c5135c4d503c661866 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a8ad93cd9a02bd1c66e3f2b80156e22e8315ccd7 b/fuzz/gnutls_server_fuzzer.in/a8ad93cd9a02bd1c66e3f2b80156e22e8315ccd7 new file mode 100644 index 0000000000..4f128f8298 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a8ad93cd9a02bd1c66e3f2b80156e22e8315ccd7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a8ff9a092272b8d3bbb630c5d1a412e4b481b501 b/fuzz/gnutls_server_fuzzer.in/a8ff9a092272b8d3bbb630c5d1a412e4b481b501 new file mode 100644 index 0000000000..33aef41b43 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a8ff9a092272b8d3bbb630c5d1a412e4b481b501 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a98f80454ff4aa31588f4d719d326c4068f7149a b/fuzz/gnutls_server_fuzzer.in/a98f80454ff4aa31588f4d719d326c4068f7149a new file mode 100644 index 0000000000..c6e5bca9d8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a98f80454ff4aa31588f4d719d326c4068f7149a differ diff --git a/fuzz/gnutls_server_fuzzer.in/a99ec6e68d563c331b33a5294f32c49a7c2656b0 b/fuzz/gnutls_server_fuzzer.in/a99ec6e68d563c331b33a5294f32c49a7c2656b0 new file mode 100644 index 0000000000..af4e65c5b4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a99ec6e68d563c331b33a5294f32c49a7c2656b0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a9aee8944d8e988d817c5b28de30a6c49e6b4818 b/fuzz/gnutls_server_fuzzer.in/a9aee8944d8e988d817c5b28de30a6c49e6b4818 new file mode 100644 index 0000000000..bbb4729567 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a9aee8944d8e988d817c5b28de30a6c49e6b4818 differ diff --git a/fuzz/gnutls_server_fuzzer.in/a9da8edaa04c84686df57c96a801f3162fe4de6f b/fuzz/gnutls_server_fuzzer.in/a9da8edaa04c84686df57c96a801f3162fe4de6f new file mode 100644 index 0000000000..f13c3190f0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/a9da8edaa04c84686df57c96a801f3162fe4de6f differ diff --git a/fuzz/gnutls_server_fuzzer.in/aa0052f03175fafc6ec6dfc23fbb9b2e5c31dfb2 b/fuzz/gnutls_server_fuzzer.in/aa0052f03175fafc6ec6dfc23fbb9b2e5c31dfb2 new file mode 100644 index 0000000000..25c95f7c45 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/aa0052f03175fafc6ec6dfc23fbb9b2e5c31dfb2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/aa0592cdda0dcc321e8065fbb0bd07cf9a331c73 b/fuzz/gnutls_server_fuzzer.in/aa0592cdda0dcc321e8065fbb0bd07cf9a331c73 new file mode 100644 index 0000000000..cd6ed545fd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/aa0592cdda0dcc321e8065fbb0bd07cf9a331c73 differ diff --git a/fuzz/gnutls_server_fuzzer.in/aa66ec91725fb2725e1fd93f51509fe701f62519 b/fuzz/gnutls_server_fuzzer.in/aa66ec91725fb2725e1fd93f51509fe701f62519 new file mode 100644 index 0000000000..77324af457 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/aa66ec91725fb2725e1fd93f51509fe701f62519 differ diff --git a/fuzz/gnutls_server_fuzzer.in/aa9aaa6a29f1b4708146e848abbd3d6fe3470204 b/fuzz/gnutls_server_fuzzer.in/aa9aaa6a29f1b4708146e848abbd3d6fe3470204 new file mode 100644 index 0000000000..e8f4a58bfa Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/aa9aaa6a29f1b4708146e848abbd3d6fe3470204 differ diff --git a/fuzz/gnutls_server_fuzzer.in/aaf663765e33e26e5e361c2ce96cf60304285b93 b/fuzz/gnutls_server_fuzzer.in/aaf663765e33e26e5e361c2ce96cf60304285b93 new file mode 100644 index 0000000000..25f29a8cad Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/aaf663765e33e26e5e361c2ce96cf60304285b93 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ab1c2830de3bfcc93e47116bba5d4ec594128803 b/fuzz/gnutls_server_fuzzer.in/ab1c2830de3bfcc93e47116bba5d4ec594128803 new file mode 100644 index 0000000000..1535da372e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ab1c2830de3bfcc93e47116bba5d4ec594128803 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ab24061c98de7903d76bd4d12b0b0568ef223a29 b/fuzz/gnutls_server_fuzzer.in/ab24061c98de7903d76bd4d12b0b0568ef223a29 new file mode 100644 index 0000000000..d7ee5b09fb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ab24061c98de7903d76bd4d12b0b0568ef223a29 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ab872d0752b5568e2f72069bea438ecf770d5db0 b/fuzz/gnutls_server_fuzzer.in/ab872d0752b5568e2f72069bea438ecf770d5db0 new file mode 100644 index 0000000000..1015fe27c3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ab872d0752b5568e2f72069bea438ecf770d5db0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ac09ef5e60227a840ef98d6abf46d7be089f58d6 b/fuzz/gnutls_server_fuzzer.in/ac09ef5e60227a840ef98d6abf46d7be089f58d6 new file mode 100644 index 0000000000..58ecb48ae2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ac09ef5e60227a840ef98d6abf46d7be089f58d6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ac3c99e10957074fbe6d988115ccb94f3372579b b/fuzz/gnutls_server_fuzzer.in/ac3c99e10957074fbe6d988115ccb94f3372579b new file mode 100644 index 0000000000..889649598e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ac3c99e10957074fbe6d988115ccb94f3372579b differ diff --git a/fuzz/gnutls_server_fuzzer.in/ac779be195785f1e3ef5e76f45eb9da5b3429816 b/fuzz/gnutls_server_fuzzer.in/ac779be195785f1e3ef5e76f45eb9da5b3429816 new file mode 100644 index 0000000000..70d3c279cd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ac779be195785f1e3ef5e76f45eb9da5b3429816 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ac7b00e7ba07eea77fd1da662cf5ce44e5c96164 b/fuzz/gnutls_server_fuzzer.in/ac7b00e7ba07eea77fd1da662cf5ce44e5c96164 new file mode 100644 index 0000000000..fa234b10ca Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ac7b00e7ba07eea77fd1da662cf5ce44e5c96164 differ diff --git a/fuzz/gnutls_server_fuzzer.in/acac93bf8ced37b3e08a28c68a464a7273c1f816 b/fuzz/gnutls_server_fuzzer.in/acac93bf8ced37b3e08a28c68a464a7273c1f816 new file mode 100644 index 0000000000..3cb8d966dc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/acac93bf8ced37b3e08a28c68a464a7273c1f816 differ diff --git a/fuzz/gnutls_server_fuzzer.in/acb602d6425a9712d8e339bbc4f36356608b4ee9 b/fuzz/gnutls_server_fuzzer.in/acb602d6425a9712d8e339bbc4f36356608b4ee9 new file mode 100644 index 0000000000..5dae40ca6f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/acb602d6425a9712d8e339bbc4f36356608b4ee9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ad55fb1270b7a51e61f79e7a59568649b3349600 b/fuzz/gnutls_server_fuzzer.in/ad55fb1270b7a51e61f79e7a59568649b3349600 new file mode 100644 index 0000000000..53d475b410 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ad55fb1270b7a51e61f79e7a59568649b3349600 differ diff --git a/fuzz/gnutls_server_fuzzer.in/add1646e66bfcbbc636c86ce7d3ca3b6e39466e3 b/fuzz/gnutls_server_fuzzer.in/add1646e66bfcbbc636c86ce7d3ca3b6e39466e3 new file mode 100644 index 0000000000..80014751b8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/add1646e66bfcbbc636c86ce7d3ca3b6e39466e3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ae03dce7a9e49b23bae2ba9adbe93ed91f8e7184 b/fuzz/gnutls_server_fuzzer.in/ae03dce7a9e49b23bae2ba9adbe93ed91f8e7184 new file mode 100644 index 0000000000..4b488a443e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ae03dce7a9e49b23bae2ba9adbe93ed91f8e7184 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ae09eee7c432a63d4e4169212f6e0e9e4924c767 b/fuzz/gnutls_server_fuzzer.in/ae09eee7c432a63d4e4169212f6e0e9e4924c767 new file mode 100644 index 0000000000..05bbf8a381 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ae09eee7c432a63d4e4169212f6e0e9e4924c767 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ae7a80d0a6837fff7ed49b5c911a5a07901ae665 b/fuzz/gnutls_server_fuzzer.in/ae7a80d0a6837fff7ed49b5c911a5a07901ae665 new file mode 100644 index 0000000000..cfa62be6ad Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ae7a80d0a6837fff7ed49b5c911a5a07901ae665 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ae84fd80cbf543a37341ce03c900b040033362f5 b/fuzz/gnutls_server_fuzzer.in/ae84fd80cbf543a37341ce03c900b040033362f5 new file mode 100644 index 0000000000..2349a4995d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ae84fd80cbf543a37341ce03c900b040033362f5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/aea040caf5b6b45de55dcec3d1f840084d6ddee9 b/fuzz/gnutls_server_fuzzer.in/aea040caf5b6b45de55dcec3d1f840084d6ddee9 new file mode 100644 index 0000000000..81cd977494 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/aea040caf5b6b45de55dcec3d1f840084d6ddee9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/aeabc370e1677ead61f9d2ecca67362da3f06150 b/fuzz/gnutls_server_fuzzer.in/aeabc370e1677ead61f9d2ecca67362da3f06150 new file mode 100644 index 0000000000..f684abf902 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/aeabc370e1677ead61f9d2ecca67362da3f06150 differ diff --git a/fuzz/gnutls_server_fuzzer.in/aeec060965e6098e2c7861e204a3b59547302318 b/fuzz/gnutls_server_fuzzer.in/aeec060965e6098e2c7861e204a3b59547302318 new file mode 100644 index 0000000000..6c75ecb651 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/aeec060965e6098e2c7861e204a3b59547302318 differ diff --git a/fuzz/gnutls_server_fuzzer.in/af23a9eebe825d351e777d51c2cb7b3f2740e237 b/fuzz/gnutls_server_fuzzer.in/af23a9eebe825d351e777d51c2cb7b3f2740e237 new file mode 100644 index 0000000000..75cc90130e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/af23a9eebe825d351e777d51c2cb7b3f2740e237 differ diff --git a/fuzz/gnutls_server_fuzzer.in/afee3fdea3a479e5d4d430c6ad4ea150a105294d b/fuzz/gnutls_server_fuzzer.in/afee3fdea3a479e5d4d430c6ad4ea150a105294d new file mode 100644 index 0000000000..5e84a980f7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/afee3fdea3a479e5d4d430c6ad4ea150a105294d differ diff --git a/fuzz/gnutls_server_fuzzer.in/b01b0e2a4571391965093fda76cecc7d56adefa9 b/fuzz/gnutls_server_fuzzer.in/b01b0e2a4571391965093fda76cecc7d56adefa9 new file mode 100644 index 0000000000..7858f20075 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b01b0e2a4571391965093fda76cecc7d56adefa9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b02ddbef0cb04a94c1c46d5c324ed5006fe3a594 b/fuzz/gnutls_server_fuzzer.in/b02ddbef0cb04a94c1c46d5c324ed5006fe3a594 new file mode 100644 index 0000000000..a8b338d5b1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b02ddbef0cb04a94c1c46d5c324ed5006fe3a594 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b0883e5a81ef4c79f156ddbb24019fac8e764934 b/fuzz/gnutls_server_fuzzer.in/b0883e5a81ef4c79f156ddbb24019fac8e764934 new file mode 100644 index 0000000000..30bf48cfde Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b0883e5a81ef4c79f156ddbb24019fac8e764934 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b14240235348817e64932293fa160b7ad6ee2490 b/fuzz/gnutls_server_fuzzer.in/b14240235348817e64932293fa160b7ad6ee2490 new file mode 100644 index 0000000000..6a40eb9e71 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b14240235348817e64932293fa160b7ad6ee2490 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b1750486c7bb105cc2fc1bbb5389f6ed62217ae0 b/fuzz/gnutls_server_fuzzer.in/b1750486c7bb105cc2fc1bbb5389f6ed62217ae0 new file mode 100644 index 0000000000..24a036c487 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b1750486c7bb105cc2fc1bbb5389f6ed62217ae0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b18030a5d3a17ffcbf7a1c88fe574f9810452ff2 b/fuzz/gnutls_server_fuzzer.in/b18030a5d3a17ffcbf7a1c88fe574f9810452ff2 new file mode 100644 index 0000000000..9c51d11676 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b18030a5d3a17ffcbf7a1c88fe574f9810452ff2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b19c45eb47ecdb5613c56dee221fb68ba4f419b0 b/fuzz/gnutls_server_fuzzer.in/b19c45eb47ecdb5613c56dee221fb68ba4f419b0 new file mode 100644 index 0000000000..4847b2abae Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b19c45eb47ecdb5613c56dee221fb68ba4f419b0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b1d2331a4094fb6d9051c24151f90760c62f0d1c b/fuzz/gnutls_server_fuzzer.in/b1d2331a4094fb6d9051c24151f90760c62f0d1c new file mode 100644 index 0000000000..e0746932ab Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b1d2331a4094fb6d9051c24151f90760c62f0d1c differ diff --git a/fuzz/gnutls_server_fuzzer.in/b1dc2bffaecfd24d3a41c40b20d58ecc363035cc b/fuzz/gnutls_server_fuzzer.in/b1dc2bffaecfd24d3a41c40b20d58ecc363035cc new file mode 100644 index 0000000000..690ae27072 --- /dev/null +++ b/fuzz/gnutls_server_fuzzer.in/b1dc2bffaecfd24d3a41c40b20d58ecc363035cc @@ -0,0 +1 @@ +000 \ No newline at end of file diff --git a/fuzz/gnutls_server_fuzzer.in/b204b1b95a6d19ad178f385a1fd04a7467ed8956 b/fuzz/gnutls_server_fuzzer.in/b204b1b95a6d19ad178f385a1fd04a7467ed8956 new file mode 100644 index 0000000000..7a98e282d3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b204b1b95a6d19ad178f385a1fd04a7467ed8956 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b208e903431e86f0134b1712675ec17f28b3399c b/fuzz/gnutls_server_fuzzer.in/b208e903431e86f0134b1712675ec17f28b3399c new file mode 100644 index 0000000000..fa95db69b9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b208e903431e86f0134b1712675ec17f28b3399c differ diff --git a/fuzz/gnutls_server_fuzzer.in/b23aeedb87861ac0584da34ad3b34e01f6e66944 b/fuzz/gnutls_server_fuzzer.in/b23aeedb87861ac0584da34ad3b34e01f6e66944 new file mode 100644 index 0000000000..9c9b79912a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b23aeedb87861ac0584da34ad3b34e01f6e66944 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b23c137c97c8bbfa30cac7e904f400700fda4d2d b/fuzz/gnutls_server_fuzzer.in/b23c137c97c8bbfa30cac7e904f400700fda4d2d new file mode 100644 index 0000000000..9c539e9335 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b23c137c97c8bbfa30cac7e904f400700fda4d2d differ diff --git a/fuzz/gnutls_server_fuzzer.in/b26ac2880dc4b4b73d78351ef9b52bd34060e262 b/fuzz/gnutls_server_fuzzer.in/b26ac2880dc4b4b73d78351ef9b52bd34060e262 new file mode 100644 index 0000000000..1ad1f113d0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b26ac2880dc4b4b73d78351ef9b52bd34060e262 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b2a5e774f13350096d0078806bd9e8668a72bd3f b/fuzz/gnutls_server_fuzzer.in/b2a5e774f13350096d0078806bd9e8668a72bd3f new file mode 100644 index 0000000000..b5695000f7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b2a5e774f13350096d0078806bd9e8668a72bd3f differ diff --git a/fuzz/gnutls_server_fuzzer.in/b323539785331a32c9d3b6676a01304ffb0fb83c b/fuzz/gnutls_server_fuzzer.in/b323539785331a32c9d3b6676a01304ffb0fb83c new file mode 100644 index 0000000000..38e4b2538f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b323539785331a32c9d3b6676a01304ffb0fb83c differ diff --git a/fuzz/gnutls_server_fuzzer.in/b3943b42e82360fcd539913ee10659b242f49384 b/fuzz/gnutls_server_fuzzer.in/b3943b42e82360fcd539913ee10659b242f49384 new file mode 100644 index 0000000000..e11ce2d929 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b3943b42e82360fcd539913ee10659b242f49384 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b39bb3f6ea8cba54306614406a9f707d5b7f0829 b/fuzz/gnutls_server_fuzzer.in/b39bb3f6ea8cba54306614406a9f707d5b7f0829 new file mode 100644 index 0000000000..188d0fba02 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b39bb3f6ea8cba54306614406a9f707d5b7f0829 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b3bbf24d6112184e2a7b01348783369777c2ef0b b/fuzz/gnutls_server_fuzzer.in/b3bbf24d6112184e2a7b01348783369777c2ef0b new file mode 100644 index 0000000000..f1ff6bc4f7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b3bbf24d6112184e2a7b01348783369777c2ef0b differ diff --git a/fuzz/gnutls_server_fuzzer.in/b47eb6efb06daa15bacdaf7601edcece667cabc8 b/fuzz/gnutls_server_fuzzer.in/b47eb6efb06daa15bacdaf7601edcece667cabc8 new file mode 100644 index 0000000000..28497fd44a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b47eb6efb06daa15bacdaf7601edcece667cabc8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b499e81023c6900c5ac0f2cb95ff31e984541498 b/fuzz/gnutls_server_fuzzer.in/b499e81023c6900c5ac0f2cb95ff31e984541498 new file mode 100644 index 0000000000..6def6a71b7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b499e81023c6900c5ac0f2cb95ff31e984541498 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b587abf1cac2c4b21756eea0101fc4087336deea b/fuzz/gnutls_server_fuzzer.in/b587abf1cac2c4b21756eea0101fc4087336deea new file mode 100644 index 0000000000..4e18da3d5b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b587abf1cac2c4b21756eea0101fc4087336deea differ diff --git a/fuzz/gnutls_server_fuzzer.in/b587e847cb63474c6d7925edd1b1f5f69d6373e2 b/fuzz/gnutls_server_fuzzer.in/b587e847cb63474c6d7925edd1b1f5f69d6373e2 new file mode 100644 index 0000000000..25a4564765 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b587e847cb63474c6d7925edd1b1f5f69d6373e2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b62aba4d7d6dbfdd0b996ed77bcc31d7c391b4d4 b/fuzz/gnutls_server_fuzzer.in/b62aba4d7d6dbfdd0b996ed77bcc31d7c391b4d4 new file mode 100644 index 0000000000..f038a8fec4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b62aba4d7d6dbfdd0b996ed77bcc31d7c391b4d4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b697d1dfd493f59111a443b0b0f2af84fe18c583 b/fuzz/gnutls_server_fuzzer.in/b697d1dfd493f59111a443b0b0f2af84fe18c583 new file mode 100644 index 0000000000..210abda02a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b697d1dfd493f59111a443b0b0f2af84fe18c583 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b69ce08dba531f5dec2d6d80002be179abd7187f b/fuzz/gnutls_server_fuzzer.in/b69ce08dba531f5dec2d6d80002be179abd7187f new file mode 100644 index 0000000000..9fbff422f6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b69ce08dba531f5dec2d6d80002be179abd7187f differ diff --git a/fuzz/gnutls_server_fuzzer.in/b6cda6b0bdc4f8ab6061736eec9c6fad26bf93a5 b/fuzz/gnutls_server_fuzzer.in/b6cda6b0bdc4f8ab6061736eec9c6fad26bf93a5 new file mode 100644 index 0000000000..b3885585e2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b6cda6b0bdc4f8ab6061736eec9c6fad26bf93a5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b736b8e9aeb2565e6966e7cffdec7b96c52e5f12 b/fuzz/gnutls_server_fuzzer.in/b736b8e9aeb2565e6966e7cffdec7b96c52e5f12 new file mode 100644 index 0000000000..870492d9e3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b736b8e9aeb2565e6966e7cffdec7b96c52e5f12 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b7dcbba77174c4a08c659a593ec3f5ebe5094343 b/fuzz/gnutls_server_fuzzer.in/b7dcbba77174c4a08c659a593ec3f5ebe5094343 new file mode 100644 index 0000000000..81f58bf104 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b7dcbba77174c4a08c659a593ec3f5ebe5094343 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b7f234ff058a718a2ee63a2234912c3398025d1d b/fuzz/gnutls_server_fuzzer.in/b7f234ff058a718a2ee63a2234912c3398025d1d new file mode 100644 index 0000000000..fdbb03fc22 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b7f234ff058a718a2ee63a2234912c3398025d1d differ diff --git a/fuzz/gnutls_server_fuzzer.in/b8768a9166a8c56444d954e1126efe6fe7ab0134 b/fuzz/gnutls_server_fuzzer.in/b8768a9166a8c56444d954e1126efe6fe7ab0134 new file mode 100644 index 0000000000..5dd7ba33f9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b8768a9166a8c56444d954e1126efe6fe7ab0134 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b8853fe2ee5d45b76cadcaac629b21aa62547324 b/fuzz/gnutls_server_fuzzer.in/b8853fe2ee5d45b76cadcaac629b21aa62547324 new file mode 100644 index 0000000000..1b73122fb0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b8853fe2ee5d45b76cadcaac629b21aa62547324 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b8c0f03cf0e51d644fe16c798632e14606292eae b/fuzz/gnutls_server_fuzzer.in/b8c0f03cf0e51d644fe16c798632e14606292eae new file mode 100644 index 0000000000..811d56fbc4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b8c0f03cf0e51d644fe16c798632e14606292eae differ diff --git a/fuzz/gnutls_server_fuzzer.in/b93ae9fd8502dc40c2d735879ca464c5f6302b38 b/fuzz/gnutls_server_fuzzer.in/b93ae9fd8502dc40c2d735879ca464c5f6302b38 new file mode 100644 index 0000000000..6739f15e83 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b93ae9fd8502dc40c2d735879ca464c5f6302b38 differ diff --git a/fuzz/gnutls_server_fuzzer.in/b9d864da50444ac6d57e21a1a35b92a79b325777 b/fuzz/gnutls_server_fuzzer.in/b9d864da50444ac6d57e21a1a35b92a79b325777 new file mode 100644 index 0000000000..3132b88a70 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/b9d864da50444ac6d57e21a1a35b92a79b325777 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ba1d6ee2c6b1028471323659658f3bedc43b0445 b/fuzz/gnutls_server_fuzzer.in/ba1d6ee2c6b1028471323659658f3bedc43b0445 new file mode 100644 index 0000000000..c99d4f65ba Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ba1d6ee2c6b1028471323659658f3bedc43b0445 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ba69cd473e3682ae727e86bc8b42cd837ce525f6 b/fuzz/gnutls_server_fuzzer.in/ba69cd473e3682ae727e86bc8b42cd837ce525f6 new file mode 100644 index 0000000000..f366a4a7e3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ba69cd473e3682ae727e86bc8b42cd837ce525f6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/babd84335bd619c57ff6013114842be79f63f1ad b/fuzz/gnutls_server_fuzzer.in/babd84335bd619c57ff6013114842be79f63f1ad new file mode 100644 index 0000000000..b8439f877d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/babd84335bd619c57ff6013114842be79f63f1ad differ diff --git a/fuzz/gnutls_server_fuzzer.in/baf0d60e7255a4317e9907695f2ad0a0e50f4019 b/fuzz/gnutls_server_fuzzer.in/baf0d60e7255a4317e9907695f2ad0a0e50f4019 new file mode 100644 index 0000000000..8256134236 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/baf0d60e7255a4317e9907695f2ad0a0e50f4019 differ diff --git a/fuzz/gnutls_server_fuzzer.in/bbc13f4d7cf8964bcde2cacd50d62ce415a02689 b/fuzz/gnutls_server_fuzzer.in/bbc13f4d7cf8964bcde2cacd50d62ce415a02689 new file mode 100644 index 0000000000..eb8c06d467 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bbc13f4d7cf8964bcde2cacd50d62ce415a02689 differ diff --git a/fuzz/gnutls_server_fuzzer.in/bbea215f19d30bf34c8801492d6967bf7aaf58c5 b/fuzz/gnutls_server_fuzzer.in/bbea215f19d30bf34c8801492d6967bf7aaf58c5 new file mode 100644 index 0000000000..ac18e6402b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bbea215f19d30bf34c8801492d6967bf7aaf58c5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/bc1e273ebe35a91e327182e2fb93566bd4516221 b/fuzz/gnutls_server_fuzzer.in/bc1e273ebe35a91e327182e2fb93566bd4516221 new file mode 100644 index 0000000000..c4e8b5290c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bc1e273ebe35a91e327182e2fb93566bd4516221 differ diff --git a/fuzz/gnutls_server_fuzzer.in/bc31ef1d5eeaf9563a9ba2c4cf62cfd05a2b467e b/fuzz/gnutls_server_fuzzer.in/bc31ef1d5eeaf9563a9ba2c4cf62cfd05a2b467e new file mode 100644 index 0000000000..a90625caa5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bc31ef1d5eeaf9563a9ba2c4cf62cfd05a2b467e differ diff --git a/fuzz/gnutls_server_fuzzer.in/bc633603554d92a83f3d0b6d9e0ef0d6c42de4c8 b/fuzz/gnutls_server_fuzzer.in/bc633603554d92a83f3d0b6d9e0ef0d6c42de4c8 new file mode 100644 index 0000000000..905a129cd8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bc633603554d92a83f3d0b6d9e0ef0d6c42de4c8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/bc750f0da3d2d1e4bf7bb22026d251d89c3082c0 b/fuzz/gnutls_server_fuzzer.in/bc750f0da3d2d1e4bf7bb22026d251d89c3082c0 new file mode 100644 index 0000000000..895730b2fd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bc750f0da3d2d1e4bf7bb22026d251d89c3082c0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/bcb4a4d9647bc5918b58125cbadea565c3ac2428 b/fuzz/gnutls_server_fuzzer.in/bcb4a4d9647bc5918b58125cbadea565c3ac2428 new file mode 100644 index 0000000000..2759b75508 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bcb4a4d9647bc5918b58125cbadea565c3ac2428 differ diff --git a/fuzz/gnutls_server_fuzzer.in/bd0eb595abc176bb4daf833b69efa38730b7983a b/fuzz/gnutls_server_fuzzer.in/bd0eb595abc176bb4daf833b69efa38730b7983a new file mode 100644 index 0000000000..ed8e7fd7a9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bd0eb595abc176bb4daf833b69efa38730b7983a differ diff --git a/fuzz/gnutls_server_fuzzer.in/bd1b76ca01a6c8006fb8235d97f3ac67d8b2fd42 b/fuzz/gnutls_server_fuzzer.in/bd1b76ca01a6c8006fb8235d97f3ac67d8b2fd42 new file mode 100644 index 0000000000..350bf874f6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bd1b76ca01a6c8006fb8235d97f3ac67d8b2fd42 differ diff --git a/fuzz/gnutls_server_fuzzer.in/bd6b2669e16a11fe9121c81af5258e72fdaf76ce b/fuzz/gnutls_server_fuzzer.in/bd6b2669e16a11fe9121c81af5258e72fdaf76ce new file mode 100644 index 0000000000..c6569510c1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bd6b2669e16a11fe9121c81af5258e72fdaf76ce differ diff --git a/fuzz/gnutls_server_fuzzer.in/bd91431820eb106b9fd22112c8c60037fefe9e62 b/fuzz/gnutls_server_fuzzer.in/bd91431820eb106b9fd22112c8c60037fefe9e62 new file mode 100644 index 0000000000..2032ccb75d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bd91431820eb106b9fd22112c8c60037fefe9e62 differ diff --git a/fuzz/gnutls_server_fuzzer.in/bda6da9b0ac99a8a0bffe8a05bf281a268ce6efb b/fuzz/gnutls_server_fuzzer.in/bda6da9b0ac99a8a0bffe8a05bf281a268ce6efb new file mode 100644 index 0000000000..ef5790222f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bda6da9b0ac99a8a0bffe8a05bf281a268ce6efb differ diff --git a/fuzz/gnutls_server_fuzzer.in/bdb1ec43d0c10f186a8213446d27d2af649b4b0c b/fuzz/gnutls_server_fuzzer.in/bdb1ec43d0c10f186a8213446d27d2af649b4b0c new file mode 100644 index 0000000000..dea8689f63 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bdb1ec43d0c10f186a8213446d27d2af649b4b0c differ diff --git a/fuzz/gnutls_server_fuzzer.in/bdd29d7314ec392b9b50dcbe0f7d3fc02fb67c36 b/fuzz/gnutls_server_fuzzer.in/bdd29d7314ec392b9b50dcbe0f7d3fc02fb67c36 new file mode 100644 index 0000000000..db7d777b37 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bdd29d7314ec392b9b50dcbe0f7d3fc02fb67c36 differ diff --git a/fuzz/gnutls_server_fuzzer.in/be568d8693906fa5198a0749594300644403496e b/fuzz/gnutls_server_fuzzer.in/be568d8693906fa5198a0749594300644403496e new file mode 100644 index 0000000000..618a34e836 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/be568d8693906fa5198a0749594300644403496e differ diff --git a/fuzz/gnutls_server_fuzzer.in/be73c9759f40f840907ba622da13a00c5d0d3682 b/fuzz/gnutls_server_fuzzer.in/be73c9759f40f840907ba622da13a00c5d0d3682 new file mode 100644 index 0000000000..35e827b949 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/be73c9759f40f840907ba622da13a00c5d0d3682 differ diff --git a/fuzz/gnutls_server_fuzzer.in/beb2c06ef381e687852e97007a9a97be86c5d73d b/fuzz/gnutls_server_fuzzer.in/beb2c06ef381e687852e97007a9a97be86c5d73d new file mode 100644 index 0000000000..3c7475a619 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/beb2c06ef381e687852e97007a9a97be86c5d73d differ diff --git a/fuzz/gnutls_server_fuzzer.in/bf43194e408f0244253ca4721ae92eb0f9bb2fc8 b/fuzz/gnutls_server_fuzzer.in/bf43194e408f0244253ca4721ae92eb0f9bb2fc8 new file mode 100644 index 0000000000..84229147aa Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bf43194e408f0244253ca4721ae92eb0f9bb2fc8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/bf6e7b706c7885584071035165506bdfb6e2f4f6 b/fuzz/gnutls_server_fuzzer.in/bf6e7b706c7885584071035165506bdfb6e2f4f6 new file mode 100644 index 0000000000..b80731e0cc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bf6e7b706c7885584071035165506bdfb6e2f4f6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/bfbe738f814337d2ffaa0bef10c7d6a687cd352e b/fuzz/gnutls_server_fuzzer.in/bfbe738f814337d2ffaa0bef10c7d6a687cd352e new file mode 100644 index 0000000000..cc9653d214 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bfbe738f814337d2ffaa0bef10c7d6a687cd352e differ diff --git a/fuzz/gnutls_server_fuzzer.in/bfc2cfcd32cb2394a21cd1dcfbfe544757d74b59 b/fuzz/gnutls_server_fuzzer.in/bfc2cfcd32cb2394a21cd1dcfbfe544757d74b59 new file mode 100644 index 0000000000..9147dd6b9c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/bfc2cfcd32cb2394a21cd1dcfbfe544757d74b59 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c0727a1f1d99aef71e352c828061cf27c936ab50 b/fuzz/gnutls_server_fuzzer.in/c0727a1f1d99aef71e352c828061cf27c936ab50 new file mode 100644 index 0000000000..e4cc0f8d8b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c0727a1f1d99aef71e352c828061cf27c936ab50 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c0c2f7b3c357beb8738e65b9cae2286076877d90 b/fuzz/gnutls_server_fuzzer.in/c0c2f7b3c357beb8738e65b9cae2286076877d90 new file mode 100644 index 0000000000..4fe9d7e1eb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c0c2f7b3c357beb8738e65b9cae2286076877d90 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c0d16891b161411e726ce3bead5b8e3e85d9c5ef b/fuzz/gnutls_server_fuzzer.in/c0d16891b161411e726ce3bead5b8e3e85d9c5ef new file mode 100644 index 0000000000..4b601b10b5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c0d16891b161411e726ce3bead5b8e3e85d9c5ef differ diff --git a/fuzz/gnutls_server_fuzzer.in/c10589641339687775fe3000207fcae8ff608337 b/fuzz/gnutls_server_fuzzer.in/c10589641339687775fe3000207fcae8ff608337 new file mode 100644 index 0000000000..5972a3f445 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c10589641339687775fe3000207fcae8ff608337 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c11e8c8c0a4b7fd0458c55b1fc4d7f86982c2fe3 b/fuzz/gnutls_server_fuzzer.in/c11e8c8c0a4b7fd0458c55b1fc4d7f86982c2fe3 new file mode 100644 index 0000000000..4170fca7bc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c11e8c8c0a4b7fd0458c55b1fc4d7f86982c2fe3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c289ff59f6074ccb9b98d3a6529329b400351aba b/fuzz/gnutls_server_fuzzer.in/c289ff59f6074ccb9b98d3a6529329b400351aba new file mode 100644 index 0000000000..7aa6d219a6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c289ff59f6074ccb9b98d3a6529329b400351aba differ diff --git a/fuzz/gnutls_server_fuzzer.in/c2ce46a956401e08bbc5d61269556ebc1cc71dbe b/fuzz/gnutls_server_fuzzer.in/c2ce46a956401e08bbc5d61269556ebc1cc71dbe new file mode 100644 index 0000000000..36bcaaa173 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c2ce46a956401e08bbc5d61269556ebc1cc71dbe differ diff --git a/fuzz/gnutls_server_fuzzer.in/c30440e5440a68a2712bd2e07ba7ef36ede1d9c2 b/fuzz/gnutls_server_fuzzer.in/c30440e5440a68a2712bd2e07ba7ef36ede1d9c2 new file mode 100644 index 0000000000..0890c90d24 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c30440e5440a68a2712bd2e07ba7ef36ede1d9c2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c329bea76e8b1f819599982e3c856104c2c7c198 b/fuzz/gnutls_server_fuzzer.in/c329bea76e8b1f819599982e3c856104c2c7c198 new file mode 100644 index 0000000000..7748579d4d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c329bea76e8b1f819599982e3c856104c2c7c198 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c37bec119104fb7459615c3374c74764942d77d4 b/fuzz/gnutls_server_fuzzer.in/c37bec119104fb7459615c3374c74764942d77d4 new file mode 100644 index 0000000000..8d45984828 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c37bec119104fb7459615c3374c74764942d77d4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c3cf3ef820566bc9eca5a06d4944cbb525cd34b5 b/fuzz/gnutls_server_fuzzer.in/c3cf3ef820566bc9eca5a06d4944cbb525cd34b5 new file mode 100644 index 0000000000..a38f1a8c52 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c3cf3ef820566bc9eca5a06d4944cbb525cd34b5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c42443d287c128107355a32d4608b634c4d4f76c b/fuzz/gnutls_server_fuzzer.in/c42443d287c128107355a32d4608b634c4d4f76c new file mode 100644 index 0000000000..18abf34f24 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c42443d287c128107355a32d4608b634c4d4f76c differ diff --git a/fuzz/gnutls_server_fuzzer.in/c493e33e5a06cfec3b42f5cf5c130cab170a62cf b/fuzz/gnutls_server_fuzzer.in/c493e33e5a06cfec3b42f5cf5c130cab170a62cf new file mode 100644 index 0000000000..f835928ad9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c493e33e5a06cfec3b42f5cf5c130cab170a62cf differ diff --git a/fuzz/gnutls_server_fuzzer.in/c4dd3c8cdd8d7c95603dd67f1cd873d5f9148b29 b/fuzz/gnutls_server_fuzzer.in/c4dd3c8cdd8d7c95603dd67f1cd873d5f9148b29 new file mode 100644 index 0000000000..c5fa78456d --- /dev/null +++ b/fuzz/gnutls_server_fuzzer.in/c4dd3c8cdd8d7c95603dd67f1cd873d5f9148b29 @@ -0,0 +1 @@ +< \ No newline at end of file diff --git a/fuzz/gnutls_server_fuzzer.in/c4e06b3c54bb3e76e52a612576f60d69469c01ce b/fuzz/gnutls_server_fuzzer.in/c4e06b3c54bb3e76e52a612576f60d69469c01ce new file mode 100644 index 0000000000..1f4ae2777c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c4e06b3c54bb3e76e52a612576f60d69469c01ce differ diff --git a/fuzz/gnutls_server_fuzzer.in/c4ec2c7ae889de79ee085b891bf75aceeff3fa8e b/fuzz/gnutls_server_fuzzer.in/c4ec2c7ae889de79ee085b891bf75aceeff3fa8e new file mode 100644 index 0000000000..35cff5652f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c4ec2c7ae889de79ee085b891bf75aceeff3fa8e differ diff --git a/fuzz/gnutls_server_fuzzer.in/c4ed11bd63fe3fb72daa4c03577d890e3a948524 b/fuzz/gnutls_server_fuzzer.in/c4ed11bd63fe3fb72daa4c03577d890e3a948524 new file mode 100644 index 0000000000..4676f1360f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c4ed11bd63fe3fb72daa4c03577d890e3a948524 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c505a7742f38c084bb8940f4b8589ebb1197438a b/fuzz/gnutls_server_fuzzer.in/c505a7742f38c084bb8940f4b8589ebb1197438a new file mode 100644 index 0000000000..68b3b36cf4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c505a7742f38c084bb8940f4b8589ebb1197438a differ diff --git a/fuzz/gnutls_server_fuzzer.in/c544dd52d5795a74e73fc60ce582d6b18a336185 b/fuzz/gnutls_server_fuzzer.in/c544dd52d5795a74e73fc60ce582d6b18a336185 new file mode 100644 index 0000000000..9ab7cf375d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c544dd52d5795a74e73fc60ce582d6b18a336185 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c59ad24110746015d5dbc3a90b35c450a854d4ea b/fuzz/gnutls_server_fuzzer.in/c59ad24110746015d5dbc3a90b35c450a854d4ea new file mode 100644 index 0000000000..852160a2a5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c59ad24110746015d5dbc3a90b35c450a854d4ea differ diff --git a/fuzz/gnutls_server_fuzzer.in/c5eade46886d4cf6d868bc9178c6eb327c4ad648 b/fuzz/gnutls_server_fuzzer.in/c5eade46886d4cf6d868bc9178c6eb327c4ad648 new file mode 100644 index 0000000000..7242a69c51 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c5eade46886d4cf6d868bc9178c6eb327c4ad648 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c5f5d2ead72d4b82a083b00f305a835cc3685385 b/fuzz/gnutls_server_fuzzer.in/c5f5d2ead72d4b82a083b00f305a835cc3685385 new file mode 100644 index 0000000000..959c6e5054 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c5f5d2ead72d4b82a083b00f305a835cc3685385 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c5f6f1b677205bee04c463a5f64d030f66146041 b/fuzz/gnutls_server_fuzzer.in/c5f6f1b677205bee04c463a5f64d030f66146041 new file mode 100644 index 0000000000..c1ccd87a22 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c5f6f1b677205bee04c463a5f64d030f66146041 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c679b7c2e633212ff1c68a0db86c38b5938fbcc1 b/fuzz/gnutls_server_fuzzer.in/c679b7c2e633212ff1c68a0db86c38b5938fbcc1 new file mode 100644 index 0000000000..e78f9e2f1d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c679b7c2e633212ff1c68a0db86c38b5938fbcc1 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c718a66ab5ab140a52436c57442240b686a58ecc b/fuzz/gnutls_server_fuzzer.in/c718a66ab5ab140a52436c57442240b686a58ecc new file mode 100644 index 0000000000..598db7333e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c718a66ab5ab140a52436c57442240b686a58ecc differ diff --git a/fuzz/gnutls_server_fuzzer.in/c7a6f519ada7a051073b1da7fc6dcbb06e7e5436 b/fuzz/gnutls_server_fuzzer.in/c7a6f519ada7a051073b1da7fc6dcbb06e7e5436 new file mode 100644 index 0000000000..e2e3151ebc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c7a6f519ada7a051073b1da7fc6dcbb06e7e5436 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c80dea7eba6c505d191d1ff90a8dab253cd55bdc b/fuzz/gnutls_server_fuzzer.in/c80dea7eba6c505d191d1ff90a8dab253cd55bdc new file mode 100644 index 0000000000..f3a8ca1d9c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c80dea7eba6c505d191d1ff90a8dab253cd55bdc differ diff --git a/fuzz/gnutls_server_fuzzer.in/c86964208562d3924ae5fa543258409cb99e090e b/fuzz/gnutls_server_fuzzer.in/c86964208562d3924ae5fa543258409cb99e090e new file mode 100644 index 0000000000..d86a95584e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c86964208562d3924ae5fa543258409cb99e090e differ diff --git a/fuzz/gnutls_server_fuzzer.in/c89c62cc69ae5bd954eb4afea1afdfbc8018271a b/fuzz/gnutls_server_fuzzer.in/c89c62cc69ae5bd954eb4afea1afdfbc8018271a new file mode 100644 index 0000000000..53f24322ca Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c89c62cc69ae5bd954eb4afea1afdfbc8018271a differ diff --git a/fuzz/gnutls_server_fuzzer.in/c8bd35ff31d61e8957c437c9ed773cbb8bb19b2a b/fuzz/gnutls_server_fuzzer.in/c8bd35ff31d61e8957c437c9ed773cbb8bb19b2a new file mode 100644 index 0000000000..c5ff18402b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c8bd35ff31d61e8957c437c9ed773cbb8bb19b2a differ diff --git a/fuzz/gnutls_server_fuzzer.in/c92f485a63cb84c168a117b5ed77ac0cec96614e b/fuzz/gnutls_server_fuzzer.in/c92f485a63cb84c168a117b5ed77ac0cec96614e new file mode 100644 index 0000000000..2c3c0bfe95 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c92f485a63cb84c168a117b5ed77ac0cec96614e differ diff --git a/fuzz/gnutls_server_fuzzer.in/c949ca05ad28214011486b2c0c1d926946d742a4 b/fuzz/gnutls_server_fuzzer.in/c949ca05ad28214011486b2c0c1d926946d742a4 new file mode 100644 index 0000000000..ab87aeafcc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c949ca05ad28214011486b2c0c1d926946d742a4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/c9988708c952934f796733f8b8d504b86feae74d b/fuzz/gnutls_server_fuzzer.in/c9988708c952934f796733f8b8d504b86feae74d new file mode 100644 index 0000000000..1051ad07e9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/c9988708c952934f796733f8b8d504b86feae74d differ diff --git a/fuzz/gnutls_server_fuzzer.in/ca07c0808eff3b8b8c6171bf2162994ca85e9d34 b/fuzz/gnutls_server_fuzzer.in/ca07c0808eff3b8b8c6171bf2162994ca85e9d34 new file mode 100644 index 0000000000..0013c371cf Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ca07c0808eff3b8b8c6171bf2162994ca85e9d34 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ca0a186fc2cca32d26613caae358344a924babad b/fuzz/gnutls_server_fuzzer.in/ca0a186fc2cca32d26613caae358344a924babad new file mode 100644 index 0000000000..724d18994c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ca0a186fc2cca32d26613caae358344a924babad differ diff --git a/fuzz/gnutls_server_fuzzer.in/ca0ebfff748d31d337b0da03972e104aaf1b27cc b/fuzz/gnutls_server_fuzzer.in/ca0ebfff748d31d337b0da03972e104aaf1b27cc new file mode 100644 index 0000000000..2dd7b776ee Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ca0ebfff748d31d337b0da03972e104aaf1b27cc differ diff --git a/fuzz/gnutls_server_fuzzer.in/ca3a0ce05de718763786274ee71e61ce87723d89 b/fuzz/gnutls_server_fuzzer.in/ca3a0ce05de718763786274ee71e61ce87723d89 new file mode 100644 index 0000000000..d5d912b3d1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ca3a0ce05de718763786274ee71e61ce87723d89 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ca51fb50d2dc381417619ab6bb738ed86bffd03c b/fuzz/gnutls_server_fuzzer.in/ca51fb50d2dc381417619ab6bb738ed86bffd03c new file mode 100644 index 0000000000..9df796dd46 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ca51fb50d2dc381417619ab6bb738ed86bffd03c differ diff --git a/fuzz/gnutls_server_fuzzer.in/cae440e33810512e115c925f16daafd73d900da3 b/fuzz/gnutls_server_fuzzer.in/cae440e33810512e115c925f16daafd73d900da3 new file mode 100644 index 0000000000..06c8d6a811 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cae440e33810512e115c925f16daafd73d900da3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/caff9642fba9434dcb14ecc6a40118922e283886 b/fuzz/gnutls_server_fuzzer.in/caff9642fba9434dcb14ecc6a40118922e283886 new file mode 100644 index 0000000000..8e7a317594 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/caff9642fba9434dcb14ecc6a40118922e283886 differ diff --git a/fuzz/gnutls_server_fuzzer.in/cb1aafbd6215e45ce26b235c49900f9edf3025d6 b/fuzz/gnutls_server_fuzzer.in/cb1aafbd6215e45ce26b235c49900f9edf3025d6 new file mode 100644 index 0000000000..b0c84abc60 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cb1aafbd6215e45ce26b235c49900f9edf3025d6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/cc27c75bf2af49a19c793a6fed7d8b15c329f50a b/fuzz/gnutls_server_fuzzer.in/cc27c75bf2af49a19c793a6fed7d8b15c329f50a new file mode 100644 index 0000000000..004372836d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cc27c75bf2af49a19c793a6fed7d8b15c329f50a differ diff --git a/fuzz/gnutls_server_fuzzer.in/cc922e24d58b12c3c43a86a56b6f06ce2f603b54 b/fuzz/gnutls_server_fuzzer.in/cc922e24d58b12c3c43a86a56b6f06ce2f603b54 new file mode 100644 index 0000000000..3784b8928a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cc922e24d58b12c3c43a86a56b6f06ce2f603b54 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ccca80d949ba2ada62320007763f30c3264b9aec b/fuzz/gnutls_server_fuzzer.in/ccca80d949ba2ada62320007763f30c3264b9aec new file mode 100644 index 0000000000..3ecdee46be Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ccca80d949ba2ada62320007763f30c3264b9aec differ diff --git a/fuzz/gnutls_server_fuzzer.in/cd12967330652fc4855c4d18a1b45ec2c7dd8b2f b/fuzz/gnutls_server_fuzzer.in/cd12967330652fc4855c4d18a1b45ec2c7dd8b2f new file mode 100644 index 0000000000..27d9349dd8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cd12967330652fc4855c4d18a1b45ec2c7dd8b2f differ diff --git a/fuzz/gnutls_server_fuzzer.in/cd1f1e226086e05e378a3488a49e5f381035a2c3 b/fuzz/gnutls_server_fuzzer.in/cd1f1e226086e05e378a3488a49e5f381035a2c3 new file mode 100644 index 0000000000..173c1cfdf1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cd1f1e226086e05e378a3488a49e5f381035a2c3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/cd6ca8614c5ceba16416d85b9e10733c3c6199d6 b/fuzz/gnutls_server_fuzzer.in/cd6ca8614c5ceba16416d85b9e10733c3c6199d6 new file mode 100644 index 0000000000..fefee8f9a2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cd6ca8614c5ceba16416d85b9e10733c3c6199d6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/cdad0fba9a904659c08b6079aa042f439adcb782 b/fuzz/gnutls_server_fuzzer.in/cdad0fba9a904659c08b6079aa042f439adcb782 new file mode 100644 index 0000000000..19ce8be771 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cdad0fba9a904659c08b6079aa042f439adcb782 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ce3e0b7bd52f1407e6c4143a52eb23562a4da72f b/fuzz/gnutls_server_fuzzer.in/ce3e0b7bd52f1407e6c4143a52eb23562a4da72f new file mode 100644 index 0000000000..fbc036bd9b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ce3e0b7bd52f1407e6c4143a52eb23562a4da72f differ diff --git a/fuzz/gnutls_server_fuzzer.in/ce52c3645292a08415f05a5706d3aeb650280487 b/fuzz/gnutls_server_fuzzer.in/ce52c3645292a08415f05a5706d3aeb650280487 new file mode 100644 index 0000000000..242c0b3d07 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ce52c3645292a08415f05a5706d3aeb650280487 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ce8040d059048c03e4c3649151666c6e5e5e428a b/fuzz/gnutls_server_fuzzer.in/ce8040d059048c03e4c3649151666c6e5e5e428a new file mode 100644 index 0000000000..05ac43e0eb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ce8040d059048c03e4c3649151666c6e5e5e428a differ diff --git a/fuzz/gnutls_server_fuzzer.in/cef9da3480218f4a353a1d4b10d5095b2273be49 b/fuzz/gnutls_server_fuzzer.in/cef9da3480218f4a353a1d4b10d5095b2273be49 new file mode 100644 index 0000000000..68372e9473 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cef9da3480218f4a353a1d4b10d5095b2273be49 differ diff --git a/fuzz/gnutls_server_fuzzer.in/cefaee56105eb4c68d81a33702c3b0b310d34929 b/fuzz/gnutls_server_fuzzer.in/cefaee56105eb4c68d81a33702c3b0b310d34929 new file mode 100644 index 0000000000..ec864bdd1f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cefaee56105eb4c68d81a33702c3b0b310d34929 differ diff --git a/fuzz/gnutls_server_fuzzer.in/cefd6014d462e763258639ad3b92a58e22b017e2 b/fuzz/gnutls_server_fuzzer.in/cefd6014d462e763258639ad3b92a58e22b017e2 new file mode 100644 index 0000000000..cd800a72e0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cefd6014d462e763258639ad3b92a58e22b017e2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/cf79d058479afa765554efb93122b89e1a0458fc b/fuzz/gnutls_server_fuzzer.in/cf79d058479afa765554efb93122b89e1a0458fc new file mode 100644 index 0000000000..293ea58a29 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cf79d058479afa765554efb93122b89e1a0458fc differ diff --git a/fuzz/gnutls_server_fuzzer.in/cff19b4380b7e623acbaf884183511f7b5b41034 b/fuzz/gnutls_server_fuzzer.in/cff19b4380b7e623acbaf884183511f7b5b41034 new file mode 100644 index 0000000000..88225ae545 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/cff19b4380b7e623acbaf884183511f7b5b41034 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d06a4a84cb46b3b6e05f1aa682522beebcbeb5ca b/fuzz/gnutls_server_fuzzer.in/d06a4a84cb46b3b6e05f1aa682522beebcbeb5ca new file mode 100644 index 0000000000..0cfa2ed5fa Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d06a4a84cb46b3b6e05f1aa682522beebcbeb5ca differ diff --git a/fuzz/gnutls_server_fuzzer.in/d0d93aaa30baca07cf5be17217e14070a8e19592 b/fuzz/gnutls_server_fuzzer.in/d0d93aaa30baca07cf5be17217e14070a8e19592 new file mode 100644 index 0000000000..2f705b5735 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d0d93aaa30baca07cf5be17217e14070a8e19592 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d151914a439d6548c31e1737d6c67d934e8f7319 b/fuzz/gnutls_server_fuzzer.in/d151914a439d6548c31e1737d6c67d934e8f7319 new file mode 100644 index 0000000000..7caa41385c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d151914a439d6548c31e1737d6c67d934e8f7319 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d15bc143df4121c9f419420485308447b55ecaba b/fuzz/gnutls_server_fuzzer.in/d15bc143df4121c9f419420485308447b55ecaba new file mode 100644 index 0000000000..c324acd13d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d15bc143df4121c9f419420485308447b55ecaba differ diff --git a/fuzz/gnutls_server_fuzzer.in/d17b8f6929310ee43eff3f82d1946b3c3e2b2358 b/fuzz/gnutls_server_fuzzer.in/d17b8f6929310ee43eff3f82d1946b3c3e2b2358 new file mode 100644 index 0000000000..1627e9df62 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d17b8f6929310ee43eff3f82d1946b3c3e2b2358 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d18c33ea3110c9ac95c0295a907d0f9060cd931e b/fuzz/gnutls_server_fuzzer.in/d18c33ea3110c9ac95c0295a907d0f9060cd931e new file mode 100644 index 0000000000..11c5734abb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d18c33ea3110c9ac95c0295a907d0f9060cd931e differ diff --git a/fuzz/gnutls_server_fuzzer.in/d1cc24682cc643bd02c412d175540e204c65b4cc b/fuzz/gnutls_server_fuzzer.in/d1cc24682cc643bd02c412d175540e204c65b4cc new file mode 100644 index 0000000000..ef5a8a6cff Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d1cc24682cc643bd02c412d175540e204c65b4cc differ diff --git a/fuzz/gnutls_server_fuzzer.in/d1f51d3c52d56c2e45cac622703d20a398dbc51d b/fuzz/gnutls_server_fuzzer.in/d1f51d3c52d56c2e45cac622703d20a398dbc51d new file mode 100644 index 0000000000..59e446bd53 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d1f51d3c52d56c2e45cac622703d20a398dbc51d differ diff --git a/fuzz/gnutls_server_fuzzer.in/d224c4e2c56ca633811b08f285911c6c458d328a b/fuzz/gnutls_server_fuzzer.in/d224c4e2c56ca633811b08f285911c6c458d328a new file mode 100644 index 0000000000..66c5c90bbf Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d224c4e2c56ca633811b08f285911c6c458d328a differ diff --git a/fuzz/gnutls_server_fuzzer.in/d23ea7854a9f5a6017948d43f7aaef8f235e5103 b/fuzz/gnutls_server_fuzzer.in/d23ea7854a9f5a6017948d43f7aaef8f235e5103 new file mode 100644 index 0000000000..47e24363be Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d23ea7854a9f5a6017948d43f7aaef8f235e5103 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d2460eb2e7b39e14025d11143834049fbbdcd837 b/fuzz/gnutls_server_fuzzer.in/d2460eb2e7b39e14025d11143834049fbbdcd837 new file mode 100644 index 0000000000..44e401ef4e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d2460eb2e7b39e14025d11143834049fbbdcd837 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d270cd315462277dd1c154b5939f45f6829acab1 b/fuzz/gnutls_server_fuzzer.in/d270cd315462277dd1c154b5939f45f6829acab1 new file mode 100644 index 0000000000..3d8ed1f507 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d270cd315462277dd1c154b5939f45f6829acab1 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d28bf75110950ce2252e50a3f5e1b5253d0339c9 b/fuzz/gnutls_server_fuzzer.in/d28bf75110950ce2252e50a3f5e1b5253d0339c9 new file mode 100644 index 0000000000..95edd44c46 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d28bf75110950ce2252e50a3f5e1b5253d0339c9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d2edd4213e723122c3b3c1d16af4f90925cb8725 b/fuzz/gnutls_server_fuzzer.in/d2edd4213e723122c3b3c1d16af4f90925cb8725 new file mode 100644 index 0000000000..25ce38cf9a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d2edd4213e723122c3b3c1d16af4f90925cb8725 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d3116c32195d80944656115163c3cfa624e42df9 b/fuzz/gnutls_server_fuzzer.in/d3116c32195d80944656115163c3cfa624e42df9 new file mode 100644 index 0000000000..3c600517e3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d3116c32195d80944656115163c3cfa624e42df9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d39a3cb24a149b894222ded164a9056d0a3417ec b/fuzz/gnutls_server_fuzzer.in/d39a3cb24a149b894222ded164a9056d0a3417ec new file mode 100644 index 0000000000..0969777f9a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d39a3cb24a149b894222ded164a9056d0a3417ec differ diff --git a/fuzz/gnutls_server_fuzzer.in/d3f052054456e38441e43d88e7fbebb107e68f65 b/fuzz/gnutls_server_fuzzer.in/d3f052054456e38441e43d88e7fbebb107e68f65 new file mode 100644 index 0000000000..925ff66a61 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d3f052054456e38441e43d88e7fbebb107e68f65 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d459534681da8be142aad144c3ff91a2016e936a b/fuzz/gnutls_server_fuzzer.in/d459534681da8be142aad144c3ff91a2016e936a new file mode 100644 index 0000000000..adc9bb966a --- /dev/null +++ b/fuzz/gnutls_server_fuzzer.in/d459534681da8be142aad144c3ff91a2016e936a @@ -0,0 +1 @@ +0000000 \ No newline at end of file diff --git a/fuzz/gnutls_server_fuzzer.in/d45f7aae17c38f4883297fcfd16fd774b8ee059c b/fuzz/gnutls_server_fuzzer.in/d45f7aae17c38f4883297fcfd16fd774b8ee059c new file mode 100644 index 0000000000..e5355ad92b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d45f7aae17c38f4883297fcfd16fd774b8ee059c differ diff --git a/fuzz/gnutls_server_fuzzer.in/d46ca917bf517e41eb683d568f2efed82973e791 b/fuzz/gnutls_server_fuzzer.in/d46ca917bf517e41eb683d568f2efed82973e791 new file mode 100644 index 0000000000..370d79a614 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d46ca917bf517e41eb683d568f2efed82973e791 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d4b84ee2ee1cb567bb870c04c065e876987501b4 b/fuzz/gnutls_server_fuzzer.in/d4b84ee2ee1cb567bb870c04c065e876987501b4 new file mode 100644 index 0000000000..095355c0ef Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d4b84ee2ee1cb567bb870c04c065e876987501b4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d4b8e74efda8afb76fcb57ba0b3c7b63803dba42 b/fuzz/gnutls_server_fuzzer.in/d4b8e74efda8afb76fcb57ba0b3c7b63803dba42 new file mode 100644 index 0000000000..3d4f6bf046 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d4b8e74efda8afb76fcb57ba0b3c7b63803dba42 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d4cc1bf54470ebfd03e560de56b41f117cceeac0 b/fuzz/gnutls_server_fuzzer.in/d4cc1bf54470ebfd03e560de56b41f117cceeac0 new file mode 100644 index 0000000000..9b36727c08 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d4cc1bf54470ebfd03e560de56b41f117cceeac0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d53c6ce7bc14ee51379d20f51d093dbf248b11a9 b/fuzz/gnutls_server_fuzzer.in/d53c6ce7bc14ee51379d20f51d093dbf248b11a9 new file mode 100644 index 0000000000..6d22b13075 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d53c6ce7bc14ee51379d20f51d093dbf248b11a9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d54456e6ccc19ba4ed8a263b9b754c1540a79ac5 b/fuzz/gnutls_server_fuzzer.in/d54456e6ccc19ba4ed8a263b9b754c1540a79ac5 new file mode 100644 index 0000000000..dc77fa3b4e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d54456e6ccc19ba4ed8a263b9b754c1540a79ac5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d570a1e9e04ab871a850f5c609525eeaf6ed0f8b b/fuzz/gnutls_server_fuzzer.in/d570a1e9e04ab871a850f5c609525eeaf6ed0f8b new file mode 100644 index 0000000000..6fd7abf8f3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d570a1e9e04ab871a850f5c609525eeaf6ed0f8b differ diff --git a/fuzz/gnutls_server_fuzzer.in/d5e08df844286a0ca0353e74433e156cd9e45885 b/fuzz/gnutls_server_fuzzer.in/d5e08df844286a0ca0353e74433e156cd9e45885 new file mode 100644 index 0000000000..21e0660e50 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d5e08df844286a0ca0353e74433e156cd9e45885 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d5faebb3e7a177247671b0059166e31906984208 b/fuzz/gnutls_server_fuzzer.in/d5faebb3e7a177247671b0059166e31906984208 new file mode 100644 index 0000000000..edec8d9ad9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d5faebb3e7a177247671b0059166e31906984208 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d640a9bfb4e2dccb70742faf20d024f966704a1a b/fuzz/gnutls_server_fuzzer.in/d640a9bfb4e2dccb70742faf20d024f966704a1a new file mode 100644 index 0000000000..a64da766d3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d640a9bfb4e2dccb70742faf20d024f966704a1a differ diff --git a/fuzz/gnutls_server_fuzzer.in/d6db07d084e27216e1b96057bf82fffb205a8ac1 b/fuzz/gnutls_server_fuzzer.in/d6db07d084e27216e1b96057bf82fffb205a8ac1 new file mode 100644 index 0000000000..0ca529d803 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d6db07d084e27216e1b96057bf82fffb205a8ac1 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d707467775ca53a9c22fd497b155bbd61432247c b/fuzz/gnutls_server_fuzzer.in/d707467775ca53a9c22fd497b155bbd61432247c new file mode 100644 index 0000000000..e8549fc90a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d707467775ca53a9c22fd497b155bbd61432247c differ diff --git a/fuzz/gnutls_server_fuzzer.in/d74990c2e6cff8630a9ab2789eb631a71eace12e b/fuzz/gnutls_server_fuzzer.in/d74990c2e6cff8630a9ab2789eb631a71eace12e new file mode 100644 index 0000000000..9289cd8137 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d74990c2e6cff8630a9ab2789eb631a71eace12e differ diff --git a/fuzz/gnutls_server_fuzzer.in/d74e6c70d2cc4dc7f0fc63f7722782402ba32b7f b/fuzz/gnutls_server_fuzzer.in/d74e6c70d2cc4dc7f0fc63f7722782402ba32b7f new file mode 100644 index 0000000000..3a003a5fbb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d74e6c70d2cc4dc7f0fc63f7722782402ba32b7f differ diff --git a/fuzz/gnutls_server_fuzzer.in/d7d5af15d7e87a5e552bbb544c4e8bc1ef3594d5 b/fuzz/gnutls_server_fuzzer.in/d7d5af15d7e87a5e552bbb544c4e8bc1ef3594d5 new file mode 100644 index 0000000000..c798052613 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d7d5af15d7e87a5e552bbb544c4e8bc1ef3594d5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d80bd319055a8ef2bd277776581edac8f2d27e6c b/fuzz/gnutls_server_fuzzer.in/d80bd319055a8ef2bd277776581edac8f2d27e6c new file mode 100644 index 0000000000..7393206d29 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d80bd319055a8ef2bd277776581edac8f2d27e6c differ diff --git a/fuzz/gnutls_server_fuzzer.in/d8c5ef4843a54ac5008486e16b1b8eb3bf3e6d6c b/fuzz/gnutls_server_fuzzer.in/d8c5ef4843a54ac5008486e16b1b8eb3bf3e6d6c new file mode 100644 index 0000000000..42ac46c7c7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d8c5ef4843a54ac5008486e16b1b8eb3bf3e6d6c differ diff --git a/fuzz/gnutls_server_fuzzer.in/d902538528d44ba252c2e4de20f914e5c74e57ce b/fuzz/gnutls_server_fuzzer.in/d902538528d44ba252c2e4de20f914e5c74e57ce new file mode 100644 index 0000000000..4403a29209 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d902538528d44ba252c2e4de20f914e5c74e57ce differ diff --git a/fuzz/gnutls_server_fuzzer.in/d9247f6e0d7e8452f21c17a080bfdc8f676b1e31 b/fuzz/gnutls_server_fuzzer.in/d9247f6e0d7e8452f21c17a080bfdc8f676b1e31 new file mode 100644 index 0000000000..73fc87857f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d9247f6e0d7e8452f21c17a080bfdc8f676b1e31 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d92504a74020c3a3785d7a0b9347147e755f4c17 b/fuzz/gnutls_server_fuzzer.in/d92504a74020c3a3785d7a0b9347147e755f4c17 new file mode 100644 index 0000000000..7dc14335bd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d92504a74020c3a3785d7a0b9347147e755f4c17 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d92a7736f748c8a0e27689689067fb19a8341c71 b/fuzz/gnutls_server_fuzzer.in/d92a7736f748c8a0e27689689067fb19a8341c71 new file mode 100644 index 0000000000..4ab2613ffe Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d92a7736f748c8a0e27689689067fb19a8341c71 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d9969f0e1509dcc7f44925d29cff3e4c4eb14524 b/fuzz/gnutls_server_fuzzer.in/d9969f0e1509dcc7f44925d29cff3e4c4eb14524 new file mode 100644 index 0000000000..fdb03cdd5b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d9969f0e1509dcc7f44925d29cff3e4c4eb14524 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d9d3479ddbab848b04d3d3917a8f5cede54c7d17 b/fuzz/gnutls_server_fuzzer.in/d9d3479ddbab848b04d3d3917a8f5cede54c7d17 new file mode 100644 index 0000000000..a0ff313d94 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d9d3479ddbab848b04d3d3917a8f5cede54c7d17 differ diff --git a/fuzz/gnutls_server_fuzzer.in/d9d976ff00aa21cac2568b059c0e41e9ee37178c b/fuzz/gnutls_server_fuzzer.in/d9d976ff00aa21cac2568b059c0e41e9ee37178c new file mode 100644 index 0000000000..fbd39866cc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/d9d976ff00aa21cac2568b059c0e41e9ee37178c differ diff --git a/fuzz/gnutls_server_fuzzer.in/dab0b3079fa57058e568706334d72bb9afe9bbe7 b/fuzz/gnutls_server_fuzzer.in/dab0b3079fa57058e568706334d72bb9afe9bbe7 new file mode 100644 index 0000000000..bff1fa9e2c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/dab0b3079fa57058e568706334d72bb9afe9bbe7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/db2d86cc982e5d1e549b7ae81ac9926dc347c178 b/fuzz/gnutls_server_fuzzer.in/db2d86cc982e5d1e549b7ae81ac9926dc347c178 new file mode 100644 index 0000000000..d7b847742b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/db2d86cc982e5d1e549b7ae81ac9926dc347c178 differ diff --git a/fuzz/gnutls_server_fuzzer.in/dbb2832a1465bf1af72166f00b28e2a6434d1781 b/fuzz/gnutls_server_fuzzer.in/dbb2832a1465bf1af72166f00b28e2a6434d1781 new file mode 100644 index 0000000000..02dc90eeed Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/dbb2832a1465bf1af72166f00b28e2a6434d1781 differ diff --git a/fuzz/gnutls_server_fuzzer.in/dbe0e1a655e23f6ae32df93140f17dfc1b1e08dc b/fuzz/gnutls_server_fuzzer.in/dbe0e1a655e23f6ae32df93140f17dfc1b1e08dc new file mode 100644 index 0000000000..9cc00198a4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/dbe0e1a655e23f6ae32df93140f17dfc1b1e08dc differ diff --git a/fuzz/gnutls_server_fuzzer.in/dc73f9f063a546bcbe7a825e9eda48fbfc6c9d51 b/fuzz/gnutls_server_fuzzer.in/dc73f9f063a546bcbe7a825e9eda48fbfc6c9d51 new file mode 100644 index 0000000000..f9a20dd105 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/dc73f9f063a546bcbe7a825e9eda48fbfc6c9d51 differ diff --git a/fuzz/gnutls_server_fuzzer.in/dc783446c9fd5eadc5edcdef318bc00dc4629b59 b/fuzz/gnutls_server_fuzzer.in/dc783446c9fd5eadc5edcdef318bc00dc4629b59 new file mode 100644 index 0000000000..e32ea68c5b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/dc783446c9fd5eadc5edcdef318bc00dc4629b59 differ diff --git a/fuzz/gnutls_server_fuzzer.in/dcbdaf7e1205844b478f8525c7af8667d7ea1e62 b/fuzz/gnutls_server_fuzzer.in/dcbdaf7e1205844b478f8525c7af8667d7ea1e62 new file mode 100644 index 0000000000..1bc1d74709 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/dcbdaf7e1205844b478f8525c7af8667d7ea1e62 differ diff --git a/fuzz/gnutls_server_fuzzer.in/dd7d8d8b1fcc692b6b033a1b0515c2684a987af4 b/fuzz/gnutls_server_fuzzer.in/dd7d8d8b1fcc692b6b033a1b0515c2684a987af4 new file mode 100644 index 0000000000..8eeb07249a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/dd7d8d8b1fcc692b6b033a1b0515c2684a987af4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/dd916d983af92b78d8fdf3476b3adeb8f3b5007a b/fuzz/gnutls_server_fuzzer.in/dd916d983af92b78d8fdf3476b3adeb8f3b5007a new file mode 100644 index 0000000000..2b21af3ab6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/dd916d983af92b78d8fdf3476b3adeb8f3b5007a differ diff --git a/fuzz/gnutls_server_fuzzer.in/de44ed9b6f34eec3a0c9ed96c1421d1049b386cc b/fuzz/gnutls_server_fuzzer.in/de44ed9b6f34eec3a0c9ed96c1421d1049b386cc new file mode 100644 index 0000000000..5687030eef Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/de44ed9b6f34eec3a0c9ed96c1421d1049b386cc differ diff --git a/fuzz/gnutls_server_fuzzer.in/de5dd0b8adc1a524187b65ef9b8d65747262ef6c b/fuzz/gnutls_server_fuzzer.in/de5dd0b8adc1a524187b65ef9b8d65747262ef6c new file mode 100644 index 0000000000..e4731c6561 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/de5dd0b8adc1a524187b65ef9b8d65747262ef6c differ diff --git a/fuzz/gnutls_server_fuzzer.in/decec2c5526d40c89be16d4cafb0c8faebed8503 b/fuzz/gnutls_server_fuzzer.in/decec2c5526d40c89be16d4cafb0c8faebed8503 new file mode 100644 index 0000000000..49ecb5c9fc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/decec2c5526d40c89be16d4cafb0c8faebed8503 differ diff --git a/fuzz/gnutls_server_fuzzer.in/df0c69339b2d0625f2114cc0665bf85726fd7737 b/fuzz/gnutls_server_fuzzer.in/df0c69339b2d0625f2114cc0665bf85726fd7737 new file mode 100644 index 0000000000..45947e520d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/df0c69339b2d0625f2114cc0665bf85726fd7737 differ diff --git a/fuzz/gnutls_server_fuzzer.in/df838260b1770d33c7491f4a5d00346a8f974488 b/fuzz/gnutls_server_fuzzer.in/df838260b1770d33c7491f4a5d00346a8f974488 new file mode 100644 index 0000000000..e3d2f65d10 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/df838260b1770d33c7491f4a5d00346a8f974488 differ diff --git a/fuzz/gnutls_server_fuzzer.in/df9dcd3a092bc39ea800a9c8b3ea53ea1e9c36a6 b/fuzz/gnutls_server_fuzzer.in/df9dcd3a092bc39ea800a9c8b3ea53ea1e9c36a6 new file mode 100644 index 0000000000..6971de79b2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/df9dcd3a092bc39ea800a9c8b3ea53ea1e9c36a6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/df9e3a515fecac1f607053065b02980ff5bcf3e6 b/fuzz/gnutls_server_fuzzer.in/df9e3a515fecac1f607053065b02980ff5bcf3e6 new file mode 100644 index 0000000000..c9ccc3e457 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/df9e3a515fecac1f607053065b02980ff5bcf3e6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/dfbf7f539a9eaa492f159b936c5de83f604a4090 b/fuzz/gnutls_server_fuzzer.in/dfbf7f539a9eaa492f159b936c5de83f604a4090 new file mode 100644 index 0000000000..bddcdd84cd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/dfbf7f539a9eaa492f159b936c5de83f604a4090 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e05f301df040a4d44ccda6d29e059bc8d819676d b/fuzz/gnutls_server_fuzzer.in/e05f301df040a4d44ccda6d29e059bc8d819676d new file mode 100644 index 0000000000..bfe49b54ef Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e05f301df040a4d44ccda6d29e059bc8d819676d differ diff --git a/fuzz/gnutls_server_fuzzer.in/e0a4d75755768ef05fea1cce28e16a375260fc56 b/fuzz/gnutls_server_fuzzer.in/e0a4d75755768ef05fea1cce28e16a375260fc56 new file mode 100644 index 0000000000..6fef041811 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e0a4d75755768ef05fea1cce28e16a375260fc56 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e0e2f1f77e430684039c2a0cc5bfcd9e7c359e33 b/fuzz/gnutls_server_fuzzer.in/e0e2f1f77e430684039c2a0cc5bfcd9e7c359e33 new file mode 100644 index 0000000000..d4535c3f97 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e0e2f1f77e430684039c2a0cc5bfcd9e7c359e33 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e148ba25849161828438c58439cb361b3d35462b b/fuzz/gnutls_server_fuzzer.in/e148ba25849161828438c58439cb361b3d35462b new file mode 100644 index 0000000000..5c65700d0c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e148ba25849161828438c58439cb361b3d35462b differ diff --git a/fuzz/gnutls_server_fuzzer.in/e19becc409437d4dfc6a03cf50b5537a550f690c b/fuzz/gnutls_server_fuzzer.in/e19becc409437d4dfc6a03cf50b5537a550f690c new file mode 100644 index 0000000000..3a80b85dbc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e19becc409437d4dfc6a03cf50b5537a550f690c differ diff --git a/fuzz/gnutls_server_fuzzer.in/e1f4bdad908c415fd7501cbbf6a40ae5a6ccc7d6 b/fuzz/gnutls_server_fuzzer.in/e1f4bdad908c415fd7501cbbf6a40ae5a6ccc7d6 new file mode 100644 index 0000000000..6625ba7956 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e1f4bdad908c415fd7501cbbf6a40ae5a6ccc7d6 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e24669c4ce3d19930011df030c01a2bcde77be98 b/fuzz/gnutls_server_fuzzer.in/e24669c4ce3d19930011df030c01a2bcde77be98 new file mode 100644 index 0000000000..81dc8cfaef Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e24669c4ce3d19930011df030c01a2bcde77be98 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e24bdb4073fc49adb135653dbaf0a971b040cd4d b/fuzz/gnutls_server_fuzzer.in/e24bdb4073fc49adb135653dbaf0a971b040cd4d new file mode 100644 index 0000000000..ed8c2d1741 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e24bdb4073fc49adb135653dbaf0a971b040cd4d differ diff --git a/fuzz/gnutls_server_fuzzer.in/e277c4d28db77f9a3d15cd76c31d983475118df8 b/fuzz/gnutls_server_fuzzer.in/e277c4d28db77f9a3d15cd76c31d983475118df8 new file mode 100644 index 0000000000..898495ca6f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e277c4d28db77f9a3d15cd76c31d983475118df8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e2831274aeec3ec99578ab4ef21add3ac9dc25e5 b/fuzz/gnutls_server_fuzzer.in/e2831274aeec3ec99578ab4ef21add3ac9dc25e5 new file mode 100644 index 0000000000..aef489b7dd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e2831274aeec3ec99578ab4ef21add3ac9dc25e5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e2f0fc67be726337b70a3ab3aa1d675e641732f5 b/fuzz/gnutls_server_fuzzer.in/e2f0fc67be726337b70a3ab3aa1d675e641732f5 new file mode 100644 index 0000000000..27c5a325c1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e2f0fc67be726337b70a3ab3aa1d675e641732f5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e388f46332cb2ea63aad8bc4476d9b0d2d4ce0be b/fuzz/gnutls_server_fuzzer.in/e388f46332cb2ea63aad8bc4476d9b0d2d4ce0be new file mode 100644 index 0000000000..d0df9d2d37 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e388f46332cb2ea63aad8bc4476d9b0d2d4ce0be differ diff --git a/fuzz/gnutls_server_fuzzer.in/e3f6299562d661a4af47679cd37db7ef1377d160 b/fuzz/gnutls_server_fuzzer.in/e3f6299562d661a4af47679cd37db7ef1377d160 new file mode 100644 index 0000000000..380024d940 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e3f6299562d661a4af47679cd37db7ef1377d160 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e3fffa77099f462c699a678692034fa1459158ec b/fuzz/gnutls_server_fuzzer.in/e3fffa77099f462c699a678692034fa1459158ec new file mode 100644 index 0000000000..e94150e567 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e3fffa77099f462c699a678692034fa1459158ec differ diff --git a/fuzz/gnutls_server_fuzzer.in/e42ca4d1e06734deebe54372fb7112be810cb640 b/fuzz/gnutls_server_fuzzer.in/e42ca4d1e06734deebe54372fb7112be810cb640 new file mode 100644 index 0000000000..61597a86fc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e42ca4d1e06734deebe54372fb7112be810cb640 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e473d0794a013adb049547707aa8cf93247bc8b9 b/fuzz/gnutls_server_fuzzer.in/e473d0794a013adb049547707aa8cf93247bc8b9 new file mode 100644 index 0000000000..54445272d8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e473d0794a013adb049547707aa8cf93247bc8b9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e499209f9fc121056027189783f25751d76e83cd b/fuzz/gnutls_server_fuzzer.in/e499209f9fc121056027189783f25751d76e83cd new file mode 100644 index 0000000000..1ed55518d4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e499209f9fc121056027189783f25751d76e83cd differ diff --git a/fuzz/gnutls_server_fuzzer.in/e4d3559d1f520c68c66abff97da9e42dbb298cdb b/fuzz/gnutls_server_fuzzer.in/e4d3559d1f520c68c66abff97da9e42dbb298cdb new file mode 100644 index 0000000000..8102a35b21 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e4d3559d1f520c68c66abff97da9e42dbb298cdb differ diff --git a/fuzz/gnutls_server_fuzzer.in/e523efad9b7ab8ff9d2299ab628b403d3b09fd22 b/fuzz/gnutls_server_fuzzer.in/e523efad9b7ab8ff9d2299ab628b403d3b09fd22 new file mode 100644 index 0000000000..1b4d7de9a0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e523efad9b7ab8ff9d2299ab628b403d3b09fd22 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e58adba6163313efd56a3f9467a38cb733b8990a b/fuzz/gnutls_server_fuzzer.in/e58adba6163313efd56a3f9467a38cb733b8990a new file mode 100644 index 0000000000..97b5f79be0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e58adba6163313efd56a3f9467a38cb733b8990a differ diff --git a/fuzz/gnutls_server_fuzzer.in/e593b8284ccc6e44188ca5d32970cfa9cc580070 b/fuzz/gnutls_server_fuzzer.in/e593b8284ccc6e44188ca5d32970cfa9cc580070 new file mode 100644 index 0000000000..18cfd220d8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e593b8284ccc6e44188ca5d32970cfa9cc580070 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e5a9867d30d7f7b54dcf2a180e15816c561e767e b/fuzz/gnutls_server_fuzzer.in/e5a9867d30d7f7b54dcf2a180e15816c561e767e new file mode 100644 index 0000000000..efe23967f9 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e5a9867d30d7f7b54dcf2a180e15816c561e767e differ diff --git a/fuzz/gnutls_server_fuzzer.in/e61499704078464a614e3b656df0d0003872742f b/fuzz/gnutls_server_fuzzer.in/e61499704078464a614e3b656df0d0003872742f new file mode 100644 index 0000000000..18651b73e0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e61499704078464a614e3b656df0d0003872742f differ diff --git a/fuzz/gnutls_server_fuzzer.in/e63070495bbc4694f29566b467926a68b31fa9f3 b/fuzz/gnutls_server_fuzzer.in/e63070495bbc4694f29566b467926a68b31fa9f3 new file mode 100644 index 0000000000..bd30cf428e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e63070495bbc4694f29566b467926a68b31fa9f3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e667a22ed480cce687f54da44fff49fe2b9041d2 b/fuzz/gnutls_server_fuzzer.in/e667a22ed480cce687f54da44fff49fe2b9041d2 new file mode 100644 index 0000000000..4ba532aa7e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e667a22ed480cce687f54da44fff49fe2b9041d2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e67660e6088b71ee68b39da7b100012b43d833ef b/fuzz/gnutls_server_fuzzer.in/e67660e6088b71ee68b39da7b100012b43d833ef new file mode 100644 index 0000000000..58501afe5e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e67660e6088b71ee68b39da7b100012b43d833ef differ diff --git a/fuzz/gnutls_server_fuzzer.in/e71eb94ad3ec1a8848d915ca9793978308643ca7 b/fuzz/gnutls_server_fuzzer.in/e71eb94ad3ec1a8848d915ca9793978308643ca7 new file mode 100644 index 0000000000..652e8ceed6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e71eb94ad3ec1a8848d915ca9793978308643ca7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e72c04e9b3da59d29fb738847a7765729fdb620e b/fuzz/gnutls_server_fuzzer.in/e72c04e9b3da59d29fb738847a7765729fdb620e new file mode 100644 index 0000000000..ddf19d6ee6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e72c04e9b3da59d29fb738847a7765729fdb620e differ diff --git a/fuzz/gnutls_server_fuzzer.in/e75751553d6b1b234cea791d1bb68167fab57868 b/fuzz/gnutls_server_fuzzer.in/e75751553d6b1b234cea791d1bb68167fab57868 new file mode 100644 index 0000000000..90b191bb76 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e75751553d6b1b234cea791d1bb68167fab57868 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e7ab89dfc588af743f7501253d3de171d8ff1ead b/fuzz/gnutls_server_fuzzer.in/e7ab89dfc588af743f7501253d3de171d8ff1ead new file mode 100644 index 0000000000..3ff2dd85a5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e7ab89dfc588af743f7501253d3de171d8ff1ead differ diff --git a/fuzz/gnutls_server_fuzzer.in/e8cfbc482842f276879c0a3a8942dea334ab4ef3 b/fuzz/gnutls_server_fuzzer.in/e8cfbc482842f276879c0a3a8942dea334ab4ef3 new file mode 100644 index 0000000000..0b0c01371a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e8cfbc482842f276879c0a3a8942dea334ab4ef3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e971df0807e5f1d8363013e92eba804db0472e75 b/fuzz/gnutls_server_fuzzer.in/e971df0807e5f1d8363013e92eba804db0472e75 new file mode 100644 index 0000000000..36919af4cf Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e971df0807e5f1d8363013e92eba804db0472e75 differ diff --git a/fuzz/gnutls_server_fuzzer.in/e987ca9e880234d9383e27c79ff47899d10f8209 b/fuzz/gnutls_server_fuzzer.in/e987ca9e880234d9383e27c79ff47899d10f8209 new file mode 100644 index 0000000000..84b3f2cad6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/e987ca9e880234d9383e27c79ff47899d10f8209 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ea12feea3c329d01ffd18ae386a9ba2604f40150 b/fuzz/gnutls_server_fuzzer.in/ea12feea3c329d01ffd18ae386a9ba2604f40150 new file mode 100644 index 0000000000..42d1357835 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ea12feea3c329d01ffd18ae386a9ba2604f40150 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ea1cf92226075282e4144f0ceee3c606c93a1ce7 b/fuzz/gnutls_server_fuzzer.in/ea1cf92226075282e4144f0ceee3c606c93a1ce7 new file mode 100644 index 0000000000..1b4d9ed43f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ea1cf92226075282e4144f0ceee3c606c93a1ce7 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ea2b72679920f1628dc72064c0a1e38edec925dc b/fuzz/gnutls_server_fuzzer.in/ea2b72679920f1628dc72064c0a1e38edec925dc new file mode 100644 index 0000000000..db16a77479 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ea2b72679920f1628dc72064c0a1e38edec925dc differ diff --git a/fuzz/gnutls_server_fuzzer.in/ea39f3f6c7561cfc84bfb194c0d3b828892c38c2 b/fuzz/gnutls_server_fuzzer.in/ea39f3f6c7561cfc84bfb194c0d3b828892c38c2 new file mode 100644 index 0000000000..1f789f06eb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ea39f3f6c7561cfc84bfb194c0d3b828892c38c2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ea3e4a66d8f0d2302a2dc13abb7524c3415d079d b/fuzz/gnutls_server_fuzzer.in/ea3e4a66d8f0d2302a2dc13abb7524c3415d079d new file mode 100644 index 0000000000..8e8080acf5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ea3e4a66d8f0d2302a2dc13abb7524c3415d079d differ diff --git a/fuzz/gnutls_server_fuzzer.in/ea4e5231f1409dbc46b2e4c3f86fcc80b2c6f66a b/fuzz/gnutls_server_fuzzer.in/ea4e5231f1409dbc46b2e4c3f86fcc80b2c6f66a new file mode 100644 index 0000000000..992737910d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ea4e5231f1409dbc46b2e4c3f86fcc80b2c6f66a differ diff --git a/fuzz/gnutls_server_fuzzer.in/ead9d2b7d0ca7006140b5facf67774365c6eacb1 b/fuzz/gnutls_server_fuzzer.in/ead9d2b7d0ca7006140b5facf67774365c6eacb1 new file mode 100644 index 0000000000..dfb15097b8 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ead9d2b7d0ca7006140b5facf67774365c6eacb1 differ diff --git a/fuzz/gnutls_server_fuzzer.in/eb5d48ef1ae86d09338bf32db0e060e450803273 b/fuzz/gnutls_server_fuzzer.in/eb5d48ef1ae86d09338bf32db0e060e450803273 new file mode 100644 index 0000000000..5d9bea9b07 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/eb5d48ef1ae86d09338bf32db0e060e450803273 differ diff --git a/fuzz/gnutls_server_fuzzer.in/eb69f090d74f086c0edd0ec45d558be842cf3f23 b/fuzz/gnutls_server_fuzzer.in/eb69f090d74f086c0edd0ec45d558be842cf3f23 new file mode 100644 index 0000000000..35e1e09f0e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/eb69f090d74f086c0edd0ec45d558be842cf3f23 differ diff --git a/fuzz/gnutls_server_fuzzer.in/eb81aada52aaafcd884fe91d75567670386e728e b/fuzz/gnutls_server_fuzzer.in/eb81aada52aaafcd884fe91d75567670386e728e new file mode 100644 index 0000000000..a112d802b2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/eb81aada52aaafcd884fe91d75567670386e728e differ diff --git a/fuzz/gnutls_server_fuzzer.in/ec0b8860674b079b64ec34f40439c3cfad2cd4ea b/fuzz/gnutls_server_fuzzer.in/ec0b8860674b079b64ec34f40439c3cfad2cd4ea new file mode 100644 index 0000000000..76ebe50504 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ec0b8860674b079b64ec34f40439c3cfad2cd4ea differ diff --git a/fuzz/gnutls_server_fuzzer.in/ec3db3780080df112d7d5ccd17edb0be5a77099f b/fuzz/gnutls_server_fuzzer.in/ec3db3780080df112d7d5ccd17edb0be5a77099f new file mode 100644 index 0000000000..942cfbde5b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ec3db3780080df112d7d5ccd17edb0be5a77099f differ diff --git a/fuzz/gnutls_server_fuzzer.in/ec9ec44625388e3eac3064cf70da1adfad07bd39 b/fuzz/gnutls_server_fuzzer.in/ec9ec44625388e3eac3064cf70da1adfad07bd39 new file mode 100644 index 0000000000..e1c526abfd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ec9ec44625388e3eac3064cf70da1adfad07bd39 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ed28b249f5b8b6e623a1706cc535727a3cc9cee4 b/fuzz/gnutls_server_fuzzer.in/ed28b249f5b8b6e623a1706cc535727a3cc9cee4 new file mode 100644 index 0000000000..5071ae2fbb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ed28b249f5b8b6e623a1706cc535727a3cc9cee4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ed7ae8082c2ace5cb5d00ca9c0b592e35651fa5d b/fuzz/gnutls_server_fuzzer.in/ed7ae8082c2ace5cb5d00ca9c0b592e35651fa5d new file mode 100644 index 0000000000..a733d9f2ca Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ed7ae8082c2ace5cb5d00ca9c0b592e35651fa5d differ diff --git a/fuzz/gnutls_server_fuzzer.in/edb53f20d6360e3bebc28c7316f62261792b9422 b/fuzz/gnutls_server_fuzzer.in/edb53f20d6360e3bebc28c7316f62261792b9422 new file mode 100644 index 0000000000..443fe5ba63 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/edb53f20d6360e3bebc28c7316f62261792b9422 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ee4e09dc9dfa2463b71f38011fabda0d188dcf36 b/fuzz/gnutls_server_fuzzer.in/ee4e09dc9dfa2463b71f38011fabda0d188dcf36 new file mode 100644 index 0000000000..1979119d54 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ee4e09dc9dfa2463b71f38011fabda0d188dcf36 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ee5f306d9381e6819f071488365ade9d928bfceb b/fuzz/gnutls_server_fuzzer.in/ee5f306d9381e6819f071488365ade9d928bfceb new file mode 100644 index 0000000000..0e45c2f29a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ee5f306d9381e6819f071488365ade9d928bfceb differ diff --git a/fuzz/gnutls_server_fuzzer.in/ee642e5c4f58bd56895ff22ce1a1b97e28685d31 b/fuzz/gnutls_server_fuzzer.in/ee642e5c4f58bd56895ff22ce1a1b97e28685d31 new file mode 100644 index 0000000000..1e3f328d01 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ee642e5c4f58bd56895ff22ce1a1b97e28685d31 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ee7b6ffe824ab7bb2c8fca198f27c73956ecfd5c b/fuzz/gnutls_server_fuzzer.in/ee7b6ffe824ab7bb2c8fca198f27c73956ecfd5c new file mode 100644 index 0000000000..51bcc4d548 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ee7b6ffe824ab7bb2c8fca198f27c73956ecfd5c differ diff --git a/fuzz/gnutls_server_fuzzer.in/ef6da4527ce5052e6bdd3aa94030f19199b21a51 b/fuzz/gnutls_server_fuzzer.in/ef6da4527ce5052e6bdd3aa94030f19199b21a51 new file mode 100644 index 0000000000..3743dcef06 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ef6da4527ce5052e6bdd3aa94030f19199b21a51 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ef7460e1d7f49bdec855b39573f1e7633f1a39be b/fuzz/gnutls_server_fuzzer.in/ef7460e1d7f49bdec855b39573f1e7633f1a39be new file mode 100644 index 0000000000..40ebb271fc Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ef7460e1d7f49bdec855b39573f1e7633f1a39be differ diff --git a/fuzz/gnutls_server_fuzzer.in/efb24fc5e86feefbc86b9987a4b08c4797d026d5 b/fuzz/gnutls_server_fuzzer.in/efb24fc5e86feefbc86b9987a4b08c4797d026d5 new file mode 100644 index 0000000000..efe470064b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/efb24fc5e86feefbc86b9987a4b08c4797d026d5 differ diff --git a/fuzz/gnutls_server_fuzzer.in/eff92d44b8952f719d2682a55f8c336ec49214a8 b/fuzz/gnutls_server_fuzzer.in/eff92d44b8952f719d2682a55f8c336ec49214a8 new file mode 100644 index 0000000000..bf2417886e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/eff92d44b8952f719d2682a55f8c336ec49214a8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/effb3fa81528b5c395b9f682f3a4bc7ad6d853f3 b/fuzz/gnutls_server_fuzzer.in/effb3fa81528b5c395b9f682f3a4bc7ad6d853f3 new file mode 100644 index 0000000000..b0a10f810d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/effb3fa81528b5c395b9f682f3a4bc7ad6d853f3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f092a0e8c97999b10d12402c70b32e02b77d49de b/fuzz/gnutls_server_fuzzer.in/f092a0e8c97999b10d12402c70b32e02b77d49de new file mode 100644 index 0000000000..f6cacb11a6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f092a0e8c97999b10d12402c70b32e02b77d49de differ diff --git a/fuzz/gnutls_server_fuzzer.in/f0981c556032ed9db2c3bf134bf45bd00b157968 b/fuzz/gnutls_server_fuzzer.in/f0981c556032ed9db2c3bf134bf45bd00b157968 new file mode 100644 index 0000000000..f727a13410 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f0981c556032ed9db2c3bf134bf45bd00b157968 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f0de52651405eafb801658187bca8e2b70857fec b/fuzz/gnutls_server_fuzzer.in/f0de52651405eafb801658187bca8e2b70857fec new file mode 100644 index 0000000000..3342cdcc11 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f0de52651405eafb801658187bca8e2b70857fec differ diff --git a/fuzz/gnutls_server_fuzzer.in/f11d0a2c1b7916a1dbadc0d0135f99485b1132fd b/fuzz/gnutls_server_fuzzer.in/f11d0a2c1b7916a1dbadc0d0135f99485b1132fd new file mode 100644 index 0000000000..b6e31d438a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f11d0a2c1b7916a1dbadc0d0135f99485b1132fd differ diff --git a/fuzz/gnutls_server_fuzzer.in/f16073fcf2a7ea4c6bd81a66fd0eaacd324c1b10 b/fuzz/gnutls_server_fuzzer.in/f16073fcf2a7ea4c6bd81a66fd0eaacd324c1b10 new file mode 100644 index 0000000000..3b16ce6075 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f16073fcf2a7ea4c6bd81a66fd0eaacd324c1b10 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f1ab6f7d7b01c90fe3c891a702669684a1f82546 b/fuzz/gnutls_server_fuzzer.in/f1ab6f7d7b01c90fe3c891a702669684a1f82546 new file mode 100644 index 0000000000..ae1f3ecc32 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f1ab6f7d7b01c90fe3c891a702669684a1f82546 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f1bb951045941da4c97d2b0783917ffd7c734915 b/fuzz/gnutls_server_fuzzer.in/f1bb951045941da4c97d2b0783917ffd7c734915 new file mode 100644 index 0000000000..33ae3e7d9d Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f1bb951045941da4c97d2b0783917ffd7c734915 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f1e0bd6db39a6540db998c0a81ffaa2a6e0dd3ef b/fuzz/gnutls_server_fuzzer.in/f1e0bd6db39a6540db998c0a81ffaa2a6e0dd3ef new file mode 100644 index 0000000000..ee3c9080b7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f1e0bd6db39a6540db998c0a81ffaa2a6e0dd3ef differ diff --git a/fuzz/gnutls_server_fuzzer.in/f253e31d1532ac69225f8bff4a0e871b4b1f47e9 b/fuzz/gnutls_server_fuzzer.in/f253e31d1532ac69225f8bff4a0e871b4b1f47e9 new file mode 100644 index 0000000000..fc3b0015d4 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f253e31d1532ac69225f8bff4a0e871b4b1f47e9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f272e8461f17ff8763fab3a8dc20722459d6815a b/fuzz/gnutls_server_fuzzer.in/f272e8461f17ff8763fab3a8dc20722459d6815a new file mode 100644 index 0000000000..8e7e6bc0cb Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f272e8461f17ff8763fab3a8dc20722459d6815a differ diff --git a/fuzz/gnutls_server_fuzzer.in/f396507cee7658eb29fb5bf1ae1927486a1827cf b/fuzz/gnutls_server_fuzzer.in/f396507cee7658eb29fb5bf1ae1927486a1827cf new file mode 100644 index 0000000000..af04024984 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f396507cee7658eb29fb5bf1ae1927486a1827cf differ diff --git a/fuzz/gnutls_server_fuzzer.in/f397375053f42c90a0a9305eaf8d2d9c2bb880bb b/fuzz/gnutls_server_fuzzer.in/f397375053f42c90a0a9305eaf8d2d9c2bb880bb new file mode 100644 index 0000000000..7c22683c73 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f397375053f42c90a0a9305eaf8d2d9c2bb880bb differ diff --git a/fuzz/gnutls_server_fuzzer.in/f40b0d4d6c700ff2186b23307c5defca8d061490 b/fuzz/gnutls_server_fuzzer.in/f40b0d4d6c700ff2186b23307c5defca8d061490 new file mode 100644 index 0000000000..4fc1ae81ff Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f40b0d4d6c700ff2186b23307c5defca8d061490 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f42d7a0c67194f3c10764be3c8c2f631e7504f58 b/fuzz/gnutls_server_fuzzer.in/f42d7a0c67194f3c10764be3c8c2f631e7504f58 new file mode 100644 index 0000000000..96add870b2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f42d7a0c67194f3c10764be3c8c2f631e7504f58 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f42f18eb114d11a1fb087f9b9294b959a6d31361 b/fuzz/gnutls_server_fuzzer.in/f42f18eb114d11a1fb087f9b9294b959a6d31361 new file mode 100644 index 0000000000..02739161f7 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f42f18eb114d11a1fb087f9b9294b959a6d31361 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f44c97a0c6d0127c9b952a328cbbea9cc4b51a8f b/fuzz/gnutls_server_fuzzer.in/f44c97a0c6d0127c9b952a328cbbea9cc4b51a8f new file mode 100644 index 0000000000..b3d0e9196a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f44c97a0c6d0127c9b952a328cbbea9cc4b51a8f differ diff --git a/fuzz/gnutls_server_fuzzer.in/f4a4858700c8f40b82e674cc7e5b3a94b0f474c1 b/fuzz/gnutls_server_fuzzer.in/f4a4858700c8f40b82e674cc7e5b3a94b0f474c1 new file mode 100644 index 0000000000..2212d40ab1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f4a4858700c8f40b82e674cc7e5b3a94b0f474c1 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f5007cfd1c3b846c4a820f13ddc60e3ebe7275e9 b/fuzz/gnutls_server_fuzzer.in/f5007cfd1c3b846c4a820f13ddc60e3ebe7275e9 new file mode 100644 index 0000000000..6c16137e15 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f5007cfd1c3b846c4a820f13ddc60e3ebe7275e9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f5a66670e59ade1d804da2dd8220424053f55acc b/fuzz/gnutls_server_fuzzer.in/f5a66670e59ade1d804da2dd8220424053f55acc new file mode 100644 index 0000000000..eaf04d59cf Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f5a66670e59ade1d804da2dd8220424053f55acc differ diff --git a/fuzz/gnutls_server_fuzzer.in/f5b4c59fd733b02301e2bcf892b8f50f2ed1be84 b/fuzz/gnutls_server_fuzzer.in/f5b4c59fd733b02301e2bcf892b8f50f2ed1be84 new file mode 100644 index 0000000000..6e7e43b235 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f5b4c59fd733b02301e2bcf892b8f50f2ed1be84 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f5b69a7ad167a1590f45ad9177c0ee51509ef46b b/fuzz/gnutls_server_fuzzer.in/f5b69a7ad167a1590f45ad9177c0ee51509ef46b new file mode 100644 index 0000000000..97af2fa798 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f5b69a7ad167a1590f45ad9177c0ee51509ef46b differ diff --git a/fuzz/gnutls_server_fuzzer.in/f5d1ef201bb28e59ec06a9c902010c90b862ae2b b/fuzz/gnutls_server_fuzzer.in/f5d1ef201bb28e59ec06a9c902010c90b862ae2b new file mode 100644 index 0000000000..bb77ee4d0b Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f5d1ef201bb28e59ec06a9c902010c90b862ae2b differ diff --git a/fuzz/gnutls_server_fuzzer.in/f5d7c2629c27282eea6f6510a29671b5b4fef9c9 b/fuzz/gnutls_server_fuzzer.in/f5d7c2629c27282eea6f6510a29671b5b4fef9c9 new file mode 100644 index 0000000000..569d822f8c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f5d7c2629c27282eea6f6510a29671b5b4fef9c9 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f5d899fad4b9cea1c8d7c17a09906d9a438dbc34 b/fuzz/gnutls_server_fuzzer.in/f5d899fad4b9cea1c8d7c17a09906d9a438dbc34 new file mode 100644 index 0000000000..f0544645fd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f5d899fad4b9cea1c8d7c17a09906d9a438dbc34 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f69f13edd6b8e82f7b85e48f68f139f2e879d1db b/fuzz/gnutls_server_fuzzer.in/f69f13edd6b8e82f7b85e48f68f139f2e879d1db new file mode 100644 index 0000000000..2befb90b08 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f69f13edd6b8e82f7b85e48f68f139f2e879d1db differ diff --git a/fuzz/gnutls_server_fuzzer.in/f6a884d41a63f57126893bc6f247f99ac08d0351 b/fuzz/gnutls_server_fuzzer.in/f6a884d41a63f57126893bc6f247f99ac08d0351 new file mode 100644 index 0000000000..d1994bd394 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f6a884d41a63f57126893bc6f247f99ac08d0351 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f6ab3059e6608d2fad636daf22465e68d1bfe9f3 b/fuzz/gnutls_server_fuzzer.in/f6ab3059e6608d2fad636daf22465e68d1bfe9f3 new file mode 100644 index 0000000000..6302387323 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f6ab3059e6608d2fad636daf22465e68d1bfe9f3 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f6c23dc27de2265b5e8df20ebe4642e7fcdb62ac b/fuzz/gnutls_server_fuzzer.in/f6c23dc27de2265b5e8df20ebe4642e7fcdb62ac new file mode 100644 index 0000000000..0397042357 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f6c23dc27de2265b5e8df20ebe4642e7fcdb62ac differ diff --git a/fuzz/gnutls_server_fuzzer.in/f70f5285e477f6b1bc9e9331d91c432018e6de92 b/fuzz/gnutls_server_fuzzer.in/f70f5285e477f6b1bc9e9331d91c432018e6de92 new file mode 100644 index 0000000000..2834051a15 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f70f5285e477f6b1bc9e9331d91c432018e6de92 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f745267620e7f79eaccd8b47cebc2c3efbada834 b/fuzz/gnutls_server_fuzzer.in/f745267620e7f79eaccd8b47cebc2c3efbada834 new file mode 100644 index 0000000000..c1f36832a6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f745267620e7f79eaccd8b47cebc2c3efbada834 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f79d9aba630123e0bd48e9eb5f560357e794993a b/fuzz/gnutls_server_fuzzer.in/f79d9aba630123e0bd48e9eb5f560357e794993a new file mode 100644 index 0000000000..9b1b0ea2e1 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f79d9aba630123e0bd48e9eb5f560357e794993a differ diff --git a/fuzz/gnutls_server_fuzzer.in/f7e4b6bae3169ff02b8b486691d2faf09ba62e97 b/fuzz/gnutls_server_fuzzer.in/f7e4b6bae3169ff02b8b486691d2faf09ba62e97 new file mode 100644 index 0000000000..dc030c2c4a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f7e4b6bae3169ff02b8b486691d2faf09ba62e97 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f7ef213841d7b052e5fc555769836f609d4392d2 b/fuzz/gnutls_server_fuzzer.in/f7ef213841d7b052e5fc555769836f609d4392d2 new file mode 100644 index 0000000000..dd979b4f8f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f7ef213841d7b052e5fc555769836f609d4392d2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f8599372c86bf5fa8751f9cd7299bc4df14dfe3b b/fuzz/gnutls_server_fuzzer.in/f8599372c86bf5fa8751f9cd7299bc4df14dfe3b new file mode 100644 index 0000000000..d9e4cc0782 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f8599372c86bf5fa8751f9cd7299bc4df14dfe3b differ diff --git a/fuzz/gnutls_server_fuzzer.in/f8a620a5a3d4aff49c4d4516ab566a7eb3996776 b/fuzz/gnutls_server_fuzzer.in/f8a620a5a3d4aff49c4d4516ab566a7eb3996776 new file mode 100644 index 0000000000..6b8ef322d3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f8a620a5a3d4aff49c4d4516ab566a7eb3996776 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f8af2b3d15ea016a0a7450915aa515399d6fa182 b/fuzz/gnutls_server_fuzzer.in/f8af2b3d15ea016a0a7450915aa515399d6fa182 new file mode 100644 index 0000000000..cd51ca1cae Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f8af2b3d15ea016a0a7450915aa515399d6fa182 differ diff --git a/fuzz/gnutls_server_fuzzer.in/f8d2abf148b80edd1741d54e395034d8815ff04b b/fuzz/gnutls_server_fuzzer.in/f8d2abf148b80edd1741d54e395034d8815ff04b new file mode 100644 index 0000000000..70ea202d28 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f8d2abf148b80edd1741d54e395034d8815ff04b differ diff --git a/fuzz/gnutls_server_fuzzer.in/f9185b7af4e67fd6f955d376726dc9602ae14f9d b/fuzz/gnutls_server_fuzzer.in/f9185b7af4e67fd6f955d376726dc9602ae14f9d new file mode 100644 index 0000000000..a1a431a4ce Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f9185b7af4e67fd6f955d376726dc9602ae14f9d differ diff --git a/fuzz/gnutls_server_fuzzer.in/f948c8bc5a8fdb604b0019109c75abbbfbdd43e2 b/fuzz/gnutls_server_fuzzer.in/f948c8bc5a8fdb604b0019109c75abbbfbdd43e2 new file mode 100644 index 0000000000..81006a8383 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/f948c8bc5a8fdb604b0019109c75abbbfbdd43e2 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fa063e862fde789e2ad537a42bff0d3d0e31961f b/fuzz/gnutls_server_fuzzer.in/fa063e862fde789e2ad537a42bff0d3d0e31961f new file mode 100644 index 0000000000..b02eece3f6 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fa063e862fde789e2ad537a42bff0d3d0e31961f differ diff --git a/fuzz/gnutls_server_fuzzer.in/fa23efa74db104b84b8c25734821e2ca2a82044a b/fuzz/gnutls_server_fuzzer.in/fa23efa74db104b84b8c25734821e2ca2a82044a new file mode 100644 index 0000000000..4b0f8d4b74 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fa23efa74db104b84b8c25734821e2ca2a82044a differ diff --git a/fuzz/gnutls_server_fuzzer.in/fa25a7b12ef132ab2c5f1fa6e519ac83724c842e b/fuzz/gnutls_server_fuzzer.in/fa25a7b12ef132ab2c5f1fa6e519ac83724c842e new file mode 100644 index 0000000000..b3a0c18681 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fa25a7b12ef132ab2c5f1fa6e519ac83724c842e differ diff --git a/fuzz/gnutls_server_fuzzer.in/faba627bc892ea07a165aadac8c440ea9df7f356 b/fuzz/gnutls_server_fuzzer.in/faba627bc892ea07a165aadac8c440ea9df7f356 new file mode 100644 index 0000000000..89b28a4aca Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/faba627bc892ea07a165aadac8c440ea9df7f356 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fae4c7d3dbb08b0b22ac12f46a0a42930ad34e26 b/fuzz/gnutls_server_fuzzer.in/fae4c7d3dbb08b0b22ac12f46a0a42930ad34e26 new file mode 100644 index 0000000000..29e7c55288 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fae4c7d3dbb08b0b22ac12f46a0a42930ad34e26 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fb2d7d892e9bcae2a612abd510f3a0ae8b716576 b/fuzz/gnutls_server_fuzzer.in/fb2d7d892e9bcae2a612abd510f3a0ae8b716576 new file mode 100644 index 0000000000..c77a7fc2cd Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fb2d7d892e9bcae2a612abd510f3a0ae8b716576 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fb5dd9110bca8bdf986d56db4027e1dc186cac79 b/fuzz/gnutls_server_fuzzer.in/fb5dd9110bca8bdf986d56db4027e1dc186cac79 new file mode 100644 index 0000000000..34e94c2460 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fb5dd9110bca8bdf986d56db4027e1dc186cac79 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fc0751811916228c5ffff85eaf6c31e5f033b671 b/fuzz/gnutls_server_fuzzer.in/fc0751811916228c5ffff85eaf6c31e5f033b671 new file mode 100644 index 0000000000..435cfe150c Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fc0751811916228c5ffff85eaf6c31e5f033b671 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fc7c0b45173c2a10d5e04eba54629a0d3e6ce2ca b/fuzz/gnutls_server_fuzzer.in/fc7c0b45173c2a10d5e04eba54629a0d3e6ce2ca new file mode 100644 index 0000000000..1882119d39 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fc7c0b45173c2a10d5e04eba54629a0d3e6ce2ca differ diff --git a/fuzz/gnutls_server_fuzzer.in/fc8baf883ff11561bee96f6aec69ed74f0eee2e0 b/fuzz/gnutls_server_fuzzer.in/fc8baf883ff11561bee96f6aec69ed74f0eee2e0 new file mode 100644 index 0000000000..7634fff64f Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fc8baf883ff11561bee96f6aec69ed74f0eee2e0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fca8587fe299fae9f8aaa645887b6a92427415a8 b/fuzz/gnutls_server_fuzzer.in/fca8587fe299fae9f8aaa645887b6a92427415a8 new file mode 100644 index 0000000000..0d509536a2 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fca8587fe299fae9f8aaa645887b6a92427415a8 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fcbde523337a0e68573d2963b59ec6500219d68e b/fuzz/gnutls_server_fuzzer.in/fcbde523337a0e68573d2963b59ec6500219d68e new file mode 100644 index 0000000000..731d60ae0a Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fcbde523337a0e68573d2963b59ec6500219d68e differ diff --git a/fuzz/gnutls_server_fuzzer.in/fcee2012a29610d93d02909b23129edde05abb31 b/fuzz/gnutls_server_fuzzer.in/fcee2012a29610d93d02909b23129edde05abb31 new file mode 100644 index 0000000000..fd4b2508f3 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fcee2012a29610d93d02909b23129edde05abb31 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fcf55237a608cb39b22047e0f45751fa16404eeb b/fuzz/gnutls_server_fuzzer.in/fcf55237a608cb39b22047e0f45751fa16404eeb new file mode 100644 index 0000000000..d2e7019a8e Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fcf55237a608cb39b22047e0f45751fa16404eeb differ diff --git a/fuzz/gnutls_server_fuzzer.in/fd01d16bd9a17439c8f9cfa8799ada587cf837a4 b/fuzz/gnutls_server_fuzzer.in/fd01d16bd9a17439c8f9cfa8799ada587cf837a4 new file mode 100644 index 0000000000..fd8bac5327 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fd01d16bd9a17439c8f9cfa8799ada587cf837a4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fd36ea6fb95dbc95d5ede6396c0b2634cbc0ce32 b/fuzz/gnutls_server_fuzzer.in/fd36ea6fb95dbc95d5ede6396c0b2634cbc0ce32 new file mode 100644 index 0000000000..e7b79a3a33 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fd36ea6fb95dbc95d5ede6396c0b2634cbc0ce32 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fda02916c09f32415baa9551493ccd9e8586756f b/fuzz/gnutls_server_fuzzer.in/fda02916c09f32415baa9551493ccd9e8586756f new file mode 100644 index 0000000000..75484f4a79 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fda02916c09f32415baa9551493ccd9e8586756f differ diff --git a/fuzz/gnutls_server_fuzzer.in/fe2681d2f547cfbd520511e4facd387af76df6fb b/fuzz/gnutls_server_fuzzer.in/fe2681d2f547cfbd520511e4facd387af76df6fb new file mode 100644 index 0000000000..8a3c998a34 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fe2681d2f547cfbd520511e4facd387af76df6fb differ diff --git a/fuzz/gnutls_server_fuzzer.in/fe284f96cca855a65f8f4ea0d22d82ee807ab0c4 b/fuzz/gnutls_server_fuzzer.in/fe284f96cca855a65f8f4ea0d22d82ee807ab0c4 new file mode 100644 index 0000000000..dd3e5e3c95 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fe284f96cca855a65f8f4ea0d22d82ee807ab0c4 differ diff --git a/fuzz/gnutls_server_fuzzer.in/fe33096ae56665411964977d40af964468327978 b/fuzz/gnutls_server_fuzzer.in/fe33096ae56665411964977d40af964468327978 new file mode 100644 index 0000000000..5e29ac09f5 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/fe33096ae56665411964977d40af964468327978 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ff06855a81f6157ddf5d7a486f1afbe64c22c1bf b/fuzz/gnutls_server_fuzzer.in/ff06855a81f6157ddf5d7a486f1afbe64c22c1bf new file mode 100644 index 0000000000..b63264f386 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ff06855a81f6157ddf5d7a486f1afbe64c22c1bf differ diff --git a/fuzz/gnutls_server_fuzzer.in/ff489238d67d1de1b57b5ec9fc4f1c35c38b3b03 b/fuzz/gnutls_server_fuzzer.in/ff489238d67d1de1b57b5ec9fc4f1c35c38b3b03 new file mode 100644 index 0000000000..032c904632 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ff489238d67d1de1b57b5ec9fc4f1c35c38b3b03 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ff666915f4b3ef176dc6e192464150cf5a09f5e0 b/fuzz/gnutls_server_fuzzer.in/ff666915f4b3ef176dc6e192464150cf5a09f5e0 new file mode 100644 index 0000000000..ac0d285985 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ff666915f4b3ef176dc6e192464150cf5a09f5e0 differ diff --git a/fuzz/gnutls_server_fuzzer.in/ffcf3ed49f07fad1216b9632c20612fdca08d09f b/fuzz/gnutls_server_fuzzer.in/ffcf3ed49f07fad1216b9632c20612fdca08d09f new file mode 100644 index 0000000000..389d50f236 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ffcf3ed49f07fad1216b9632c20612fdca08d09f differ diff --git a/fuzz/gnutls_server_fuzzer.in/ffd67155f707e11c86047504beefca0889153c2a b/fuzz/gnutls_server_fuzzer.in/ffd67155f707e11c86047504beefca0889153c2a new file mode 100644 index 0000000000..ca0e5e25b0 Binary files /dev/null and b/fuzz/gnutls_server_fuzzer.in/ffd67155f707e11c86047504beefca0889153c2a differ diff --git a/fuzz/gnutls_server_rawpk_fuzzer.c b/fuzz/gnutls_server_rawpk_fuzzer.c new file mode 100644 index 0000000000..a1a6713869 --- /dev/null +++ b/fuzz/gnutls_server_rawpk_fuzzer.c @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * Copyright (C) 2019 Tom Vrancken (dev@tomvrancken.nl) + * + * 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 fuzzer tests the behavior of the GnuTLS library in server mode, + * specifically dealing with raw public keys during the handshake. + * + * The fuzzer corpus generated as first input was generated with the + * following parameters for gnutls-serv and gnutls-cli: + * + * gnutls-serv --priority NORMAL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK + * gnutls-cli localhost:5556 --priority NORMAL:-CTYPE-ALL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK --no-ca-verification + * + * The above yields a handshake where both the client and server present + * a raw public-key to eachother. + */ + +#include +#include +#include +#include +#include + +#include + +#include "certs.h" +#include "mem.h" +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size) +{ + IGNORE_CERTS; + int res; + gnutls_session_t session; + gnutls_certificate_credentials_t rawpk_cred; + struct mem_st memdata; + + res = gnutls_init(&session, GNUTLS_SERVER | GNUTLS_ENABLE_RAWPK); + assert(res >= 0); + + res = gnutls_certificate_allocate_credentials(&rawpk_cred); + assert(res >= 0); + + res = + gnutls_certificate_set_rawpk_key_mem(rawpk_cred, + &rawpk_public_key1, + &rawpk_private_key1, + GNUTLS_X509_FMT_PEM, + NULL, 0, NULL, 0, 0); + assert(res >= 0); + + gnutls_certificate_set_known_dh_params(rawpk_cred, GNUTLS_SEC_PARAM_MEDIUM); + + res = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, rawpk_cred); + assert(res >= 0); + + res = gnutls_priority_set_direct(session, "NORMAL:"VERS_STR":-CTYPE-ALL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK", NULL); + assert(res >= 0); + + memdata.data = data; + memdata.size = size; + + gnutls_transport_set_push_function(session, mem_push); + gnutls_transport_set_pull_function(session, mem_pull); + gnutls_transport_set_pull_timeout_function(session, mem_pull_timeout); + gnutls_transport_set_ptr(session, &memdata); + + do { + res = gnutls_handshake(session); + } while (res < 0 && gnutls_error_is_fatal(res) == 0); + if (res >= 0) { + for (;;) { + char buf[16384]; + res = gnutls_record_recv(session, buf, sizeof(buf)); + if (res <= 0) { + break; + } + } + } + + gnutls_deinit(session); + gnutls_certificate_free_credentials(rawpk_cred); + return 0; +} diff --git a/fuzz/gnutls_server_rawpk_fuzzer.in/997a15aa064990ba1aaa79fab59b1f344abdef03 b/fuzz/gnutls_server_rawpk_fuzzer.in/997a15aa064990ba1aaa79fab59b1f344abdef03 new file mode 100644 index 0000000000..7f7f249060 Binary files /dev/null and b/fuzz/gnutls_server_rawpk_fuzzer.in/997a15aa064990ba1aaa79fab59b1f344abdef03 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.c b/fuzz/gnutls_set_trust_file_fuzzer.c new file mode 100644 index 0000000000..60982ff1a1 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.c @@ -0,0 +1,57 @@ +/* +# Copyright 2017 Red Hat, Inc. +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include + +#include + +#include +#include "fuzzer.h" + +static const uint8_t *g_data; +static size_t g_size; + +#if ! defined _WIN32 && defined HAVE_FMEMOPEN +#include +#include +#include +FILE *fopen(const char *pathname, const char *mode) +{ + FILE *(*libc_fopen)(const char *, const char *) = + (FILE *(*)(const char *, const char *)) dlsym (RTLD_NEXT, "fopen"); + + if (!strcmp(pathname, "ca_or_crl")) + return fmemopen((void *) g_data, g_size, mode); + + return libc_fopen(pathname, mode); +} +#endif + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + g_data = data; + g_size = size; + + gnutls_certificate_credentials_t creds; + gnutls_certificate_allocate_credentials(&creds); + gnutls_certificate_set_x509_trust_file(creds, "ca_or_crl", GNUTLS_X509_FMT_PEM); + gnutls_certificate_set_x509_crl_file(creds, "ca_or_crl", GNUTLS_X509_FMT_PEM); + gnutls_certificate_free_credentials(creds); + + return 0; +} diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/00109d85aa404aac499510d6b08c8eec6bb1d074 b/fuzz/gnutls_set_trust_file_fuzzer.in/00109d85aa404aac499510d6b08c8eec6bb1d074 new file mode 100644 index 0000000000..549a5d5c98 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/00109d85aa404aac499510d6b08c8eec6bb1d074 @@ -0,0 +1,6 @@ +------BEGIN CERTIFICATE-Z4L/---E/-------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE8TIFICATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0015bf943cf168682593c54cb4bad8550e9a144a b/fuzz/gnutls_set_trust_file_fuzzer.in/0015bf943cf168682593c54cb4bad8550e9a144a new file mode 100644 index 0000000000..9b0f366407 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/0015bf943cf168682593c54cb4bad8550e9a144a differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0053d76b6073abede39a335370a5b5543374341d b/fuzz/gnutls_set_trust_file_fuzzer.in/0053d76b6073abede39a335370a5b5543374341d new file mode 100644 index 0000000000..1fef07e0df --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/0053d76b6073abede39a335370a5b5543374341d @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIlPUFksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/00ec9f3efbf5b638d3f1d1987850b470a2b18b74 b/fuzz/gnutls_set_trust_file_fuzzer.in/00ec9f3efbf5b638d3f1d1987850b470a2b18b74 new file mode 100644 index 0000000000..c3fb48be5f --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/00ec9f3efbf5b638d3f1d1987850b470a2b18b74 @@ -0,0 +1,12 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE---BEVGIN CERTIFICATE-------BEGIN CERTIFICATCERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BIFIR'-----BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGN1N X509-----BEGIN CERTIFICATE-----MIEMMAMChMMMMMMM CRC-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDF2MzAxODUyMTdaFw0xMzFzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PHZ2CH/9aI0QtA4n8bdO23mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END 8KCECRoZCYWWWUZgY5b0M5DHw7 fst0YtIro4eHdxOZeVzLmNvbTCBnzANBgkqhkiBEGI-G9w0BAQ \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/011199d1d18bd19fba21b3d113f5c01e805f46ec b/fuzz/gnutls_set_trust_file_fuzzer.in/011199d1d18bd19fba21b3d113f5c01e805f46ec new file mode 100644 index 0000000000..3ab22f3bae Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/011199d1d18bd19fba21b3d113f5c01e805f46ec differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/01172396229ed82ab5f7ad246c16c3cc5678cf1e b/fuzz/gnutls_set_trust_file_fuzzer.in/01172396229ed82ab5f7ad246c16c3cc5678cf1e new file mode 100644 index 0000000000..303180c8a0 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/01172396229ed82ab5f7ad246c16c3cc5678cf1e @@ -0,0 +1 @@ +CCXN X509A-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvWJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCDAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGIN X509 CRAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvWJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCDAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMB9 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/012286e9b567a1efeec0221c411a34374e46f344 b/fuzz/gnutls_set_trust_file_fuzzer.in/012286e9b567a1efeec0221c411a34374e46f344 new file mode 100644 index 0000000000..01e587e4c7 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/012286e9b567a1efeec0221c411a34374e46f344 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UECh4MBXN0ZWUgFGTZ1GVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CEITE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/014dff408bdf6c88863f78113a8170490556fa6d b/fuzz/gnutls_set_trust_file_fuzzer.in/014dff408bdf6c88863f78113a8170490556fa6d new file mode 100644 index 0000000000..b209db4495 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/014dff408bdf6c88863f78113a8170490556fa6d differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/025b57f7521e922ff9441d6aa74e8a7dd3b290fe b/fuzz/gnutls_set_trust_file_fuzzer.in/025b57f7521e922ff9441d6aa74e8a7dd3b290fe new file mode 100644 index 0000000000..edfcad8ebf --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/025b57f7521e922ff9441d6aa74e8a7dd3b290fe @@ -0,0 +1 @@ +IRNC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTMVvTJAV-----BEGIN X509 CRL-----MIIAQTAkMIEAMIEAGIEMMIEAMCMCCIFTCEIAGIEMMIEAMCMAwwugCTAkMBEGCEIRNTCJMVvTJAVvvvBAvAMGTVvTJAVL-AVvT-----END 0C \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/037b071c3f824d65eb6d02e92b775b60f29b87e6 b/fuzz/gnutls_set_trust_file_fuzzer.in/037b071c3f824d65eb6d02e92b775b60f29b87e6 new file mode 100644 index 0000000000..f747da9d1f --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/037b071c3f824d65eb6d02e92b775b60f29b87e6 @@ -0,0 +1,8 @@ +GKMQswCQYDVQQGEwJVUzEQMA0G +CSqGSIb3DQEBAQUAA0sAMEgCQQTicEBO1u+ysy7iE-----MIEMMCMCCIFTCEIRMIEPMIEAMIEAMIEAMIEAMIEAMHVTCEIRAMIAMEIdqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LBLWrQETMBEGA1UB-----BEGIN CERTIFICATECATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKdOj9BQYkZqEi8LBLWrQETMBEGA1UB-----BEGIN CERTIFICATECATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERTTL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE8TIFICATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQoZIhvcNAQEBBQADSwAwSAJBAMZ7wECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERTTL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE8TIFICATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG8w0BCQEWDmluZm9AeWFhvcNAQkBhBpbmZvQHdvbGZzc2wuY29tl-----MAwwKAICwAwwCAY4444444V8--- +MI-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEHk------BEGIN X509 CERTIFICATEGIRTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA2UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAXTAlVTMREwDwYDVBQHEwhOZXcgWW9yazEVMBMGA1UUChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQYEwtBUkFNSVMgSU5DLjERMA8GA1BMCUEITkVXIFlPUksxGDAWBgNWBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM0DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9B2aFtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/miff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTRjYZf5zv9VZjN5bztRdLUyI2NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd6B4M44CruXNOM2DsE4uhUKxbuCJdFYmxcjHcmluZy5zb2ZkiG9w0BAQUFV \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0476e635fb1ff980bc356490263ec1be59c50203 b/fuzz/gnutls_set_trust_file_fuzzer.in/0476e635fb1ff980bc356490263ec1be59c50203 new file mode 100644 index 0000000000..0460044e20 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/0476e635fb1ff980bc356490263ec1be59c50203 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/053fe43c828432b9e3a0309924b8b268ca766b62 b/fuzz/gnutls_set_trust_file_fuzzer.in/053fe43c828432b9e3a0309924b8b268ca766b62 new file mode 100644 index 0000000000..8445185813 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/053fe43c828432b9e3a0309924b8b268ca766b62 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIE9DCCA9ygAwIBAgIRAITKtn6Z0+6CddlGsL4WY90wDQYJKoZIhvcNAQEFBQAwNjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5BIFNTTCBDQTAeFw0xMTExMDIwMDAwMDBaFw0xNDExMDEyMzU5NTlaMIGEMQswCQYDVQQGEwJESzEKMAgGA1UECB4BLjEKMAgGA1UEBx4BLjEjMCEGA1UEChMad3d3LmZvcmJlcmVkZWxzZXNza29sZW4uZGsxEzARBgNVBAsTClVkZGFubmVsc2UxIzAhBgNVBAMTGnd3dy5mb3JiZXJlZGVsc2Vzc2tvbGVuLmRrMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwya8irGVWPgg1aNL3gjvofIGpMgbLdEJ+sF8r2u3b6Rix2dI0bCAhc1cIVG/oYMu2gDhlhqHnp+ncN5RbFl8pYVShAqrb2x02W0HYP8XKg9ywtyr8eb50TfkbcddyivIjKX4B00aOa0PNFXTl6D7l/a5VuqDV2+ygPM1Bwef+Ozo+0S4hpghHQReGySUbRUahEE0dUnzy2lXghG+m7c3UZopJYjv6lTTvKsh6BDX03FrK7tULRHlx0t/UTGGMD4qGXMRJVVnbP1ZcJxr337UWKZpl7PODUZ9ZL/7OznRkp3jf82uuKJOH47VIahD+Ct/URclRkA38DKMvyI3lp5CQIDAQABo4IBrDCCAagwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFDcL1kOcIwkE+BQwEDc/rHauF7/DMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnSlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMGQGA1UdEQRdMFuCGnd3dy5mb3JiZXJlZGVsc2Vzc2tvbGVuLmRrghZmb3JiZXJlZGVsc2Vzc2tvbGVuLmRrgiV3d3cuZm9yYmVyZWRlbHNlc3Nrb2xlbi5za29sZWludHJhLmRrMA0GCSqGSIb3DQEBBQUAA4IBAQCTpB3RBMwAOmYPEwGZiWsryXyH3MT6O8yy5RE8NpLhtLNGQjw265/8z4d+fTbtLcnaj/J4mY510CIsvVGU+TOxldH5sD57IOMZY39dCWUxUv6j3+0qsTlygMTosjRM7aWXhNYaTyq53fyHzCgDp5dm8Laegd/+vmIncUyRoZRPWHcwD3YP08pXpTTu25+iKdhRu0nN+0fNzfeIaE4h7mpCBG0z81infrhPXfrQ9pm3PUrAcO9tUB9KfxfpcsyjpRdFu0yw8Tdr/ZZ+3JOKwkKxZgy6yyDtMhgV0WBakWKf7lMb/HswoEJSAhhlyc3teytJ5DoFuOuagG8y5tsHQro1 +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/05887368cd24899548a89e19a5c4307dab570ebd b/fuzz/gnutls_set_trust_file_fuzzer.in/05887368cd24899548a89e19a5c4307dab570ebd new file mode 100644 index 0000000000..2e6e60ffa2 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/05887368cd24899548a89e19a5c4307dab570ebd @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIDFzCCAf+gAwIBAgIQULLJCQBVaQHy/mPxuTLMbzANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJLUjEcMBoGA1UEChMTR292ZXJubWVudCBvZiBLb3JlYTENMAsGA1UECxMER1BLSTEUMBIGA1UEAxMLQ0ExMzEwMDAwMDEwHhcNMTIxMTI2MDE0MjMzWhcNMTQxMjIzMTExMDM4WjBaMQswCQYDVQQGEwJLUjEcMBoGA1UECHMTR292ZXJubWVudCBvZiBLb3JlYTEYMBYGA1UECx4PR3JvdXAgb2YdUVgm2yVyMRMwEQYDVQQDFAoqLmdiLmdvLmtyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDESZPlI6qK96ZjS3/WcaioRVGMEyLNZqUC/MZYDDMsYYGh9xMwlLZxwO+ILvlj5+aqFYY+VNX6cnDW1/oh1a8/18gWuiib81E2JHNYN4j98B+c0wamFzjziTjdpK2IE3UUhmLm9/vdDdLZQOIth3WemjL7ci7nE1oLVZ0sEwFfeQIDAQABo2cwZTAfBgNVHSMEGDAWgBQBzxeuBI2HzLdVC3Fsa0ic5rGylTAdBgNVHQ4EFgQUcNeoh26T6q9+7aDkxAEwXdJsyP0wDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBBQUAA4IBAQAnEYMG65umpZQuSDqUP2VcKvTfPIK4n0D2fak9eNlRfAst75v6JsMqWokIg1b1aZsgljiQysENSMdxRWNywU9rl8rwLoeNzdaj2/AQhy24GPdOM/R3/aQDFWbmTE0FrAruMUc3QAfPCfhusdyLQkBsX4r5t4S9QX1CwQtSwW63f+Oi8VxbEXf5zSSozllHeA7dElIf8m1s9ZyqfQ4VLGmPXZyKbns5K16Qgkh7MThTMl1HnsUYf7zGxoRNfCm0M7C7UXWNWM8RGaZVRmT1w0GZgV7TnkcbB/0YT8GUljVHpyQxHb8n1JxjHgSliTcD6Q7Uo0Ol/XGInY7oyS9fRp2S +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/05a5330b0cce8d3a9934c9fcde1baf6aab522e21 b/fuzz/gnutls_set_trust_file_fuzzer.in/05a5330b0cce8d3a9934c9fcde1baf6aab522e21 new file mode 100644 index 0000000000..088ad27ac6 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/05a5330b0cce8d3a9934c9fcde1baf6aab522e21 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/06f865e2b6abf085a2eb3dc80c06de58f0ed5adb b/fuzz/gnutls_set_trust_file_fuzzer.in/06f865e2b6abf085a2eb3dc80c06de58f0ed5adb new file mode 100644 index 0000000000..cdb2351841 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/06f865e2b6abf085a2eb3dc80c06de58f0ed5adb @@ -0,0 +1 @@ +CJ-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw16MzA5DTE1MTEiwATkMBEGCIIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw16MzA5DTE0MTEiwATkMBEGCIIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw16MzA5DTE0MTEiwATkMBEGCIIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-JAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/07a06a3d0a67bcd0a37c2597af0df74350640797 b/fuzz/gnutls_set_trust_file_fuzzer.in/07a06a3d0a67bcd0a37c2597af0df74350640797 new file mode 100644 index 0000000000..447b8aa69a --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/07a06a3d0a67bcd0a37c2597af0df74350640797 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/07c63f24b19f46a0e4b61415fa9e94808380d987 b/fuzz/gnutls_set_trust_file_fuzzer.in/07c63f24b19f46a0e4b61415fa9e94808380d987 new file mode 100644 index 0000000000..45ce5a8f1c --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/07c63f24b19f46a0e4b61415fa9e94808380d987 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE09 :ER-----BEGIN X500 CRLTIFICAT -----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/092de110d5a08eaea08a5bdb413ab24d14757b09 b/fuzz/gnutls_set_trust_file_fuzzer.in/092de110d5a08eaea08a5bdb413ab24d14757b09 new file mode 100644 index 0000000000..f993080d5a --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/092de110d5a08eaea08a5bdb413ab24d14757b09 @@ -0,0 +1 @@ +RNTCIMBAvAMGTVvTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CRLoE----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE! \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0959caef06a0a66670096f7a862483b5195072e4 b/fuzz/gnutls_set_trust_file_fuzzer.in/0959caef06a0a66670096f7a862483b5195072e4 new file mode 100644 index 0000000000..6c3f48edd4 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/0959caef06a0a66670096f7a862483b5195072e4 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0994b79e2cd317c8d0cbccc34e0b4c25985e29d4 b/fuzz/gnutls_set_trust_file_fuzzer.in/0994b79e2cd317c8d0cbccc34e0b4c25985e29d4 new file mode 100644 index 0000000000..51b14d70e3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/0994b79e2cd317c8d0cbccc34e0b4c25985e29d4 @@ -0,0 +1,19 @@ +Cert +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA0UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5EDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZPcmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaP6cbt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZYdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYEJpOyId +p4THRdcMAwGA2UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQon/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0a7983a16ef49a54c17d496cec007ec881f4622a b/fuzz/gnutls_set_trust_file_fuzzer.in/0a7983a16ef49a54c17d496cec007ec881f4622a new file mode 100644 index 0000000000..0fbc1fba54 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/0a7983a16ef49a54c17d496cec007ec881f4622a @@ -0,0 +1 @@ +6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRLEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50QTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRLEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BMIIAL-----END - \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0afd2a7f75e8bff6b6b8edf2f50c4146421dd206 b/fuzz/gnutls_set_trust_file_fuzzer.in/0afd2a7f75e8bff6b6b8edf2f50c4146421dd206 new file mode 100644 index 0000000000..dfe12b14b9 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/0afd2a7f75e8bff6b6b8edf2f50c4146421dd206 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0c387e181ca8f3fe24ee3b3743236290dfa8aff4 b/fuzz/gnutls_set_trust_file_fuzzer.in/0c387e181ca8f3fe24ee3b3743236290dfa8aff4 new file mode 100644 index 0000000000..72ef2816a3 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/0c387e181ca8f3fe24ee3b3743236290dfa8aff4 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0cb5d8fafa5a69cbce6afeced7819047e15b0618 b/fuzz/gnutls_set_trust_file_fuzzer.in/0cb5d8fafa5a69cbce6afeced7819047e15b0618 new file mode 100644 index 0000000000..23befdb560 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/0cb5d8fafa5a69cbce6afeced7819047e15b0618 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0cd32404738aa6e84a387e2d0eba548d3c6f05a2 b/fuzz/gnutls_set_trust_file_fuzzer.in/0cd32404738aa6e84a387e2d0eba548d3c6f05a2 new file mode 100644 index 0000000000..f53e246cf3 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/0cd32404738aa6e84a387e2d0eba548d3c6f05a2 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0d09cc4dfed9642fa5c3b9c27173dc02d14e931d b/fuzz/gnutls_set_trust_file_fuzzer.in/0d09cc4dfed9642fa5c3b9c27173dc02d14e931d new file mode 100644 index 0000000000..96593d5250 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/0d09cc4dfed9642fa5c3b9c27173dc02d14e931d @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATEIDEY444-----BEGIN CERTIFICATE4444V88aVd038-----BEGIN CERTIFICATEIEdgIQ-----BEGIN CERTIFICATED-----BEGIN CERTIFICATERTIFICATE----- +MI-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEHk------BEGIN X509 CERTIFICATE----- +MIIC7DCCApagAwIBAgIJAKBIQJVDXWL5MA0GCSqGSIb3DQEBBAUAMIHHMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEm +MCQGA1UECgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsM +C0VuZ2luZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1i +aW5nLmJpejEoMCYGCSqGSIb3DQEJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJp +ejAeFw0xNDAzMTMxNjUyMzRaFw0xNjEyMDcxNjUyMzRaMIHHMQswCQYDVQQGDwJV +UzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBswHU2VhdHRsZTEmMCQGA1UE +BgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsMC0VuZ2lu +ZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1iaW5nLmJp +ejEoMCYGCSqGSIb3DQEJARQZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJpejBcMA0G +CSqGSIb3DQEBAQUAA0sAMEgCQQTicEBO1u+ysy7iakUAewKMYPKwzY6Oaq+FUopr +SIjgrX8JIV5gnnvT0HrV/Ju2t4sBy41rZc50cqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LBLWrQZjw5usbSedJdAzAfBgNVHSMEGDAWgBQYkZqEi8LD +LWrQZjw5usbSedJdAzAPBgNVHrMBAf8EBTADAQH/MA4GA1UdEwEB/wQEAwIF4DAN +BgkqhkiG9w0BAQQFAANBAEU0nmhsV0h59xJIHESZPqGj8LYEoSnyZ8/vs+KBJmhm +A8XaCALu1m2CWCrW5wjqSGbbqQfy9vFqsnNX+Qt9KiU= +-----END CERT87 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0de800a5f61588596ef654ce1f913502b2066d62 b/fuzz/gnutls_set_trust_file_fuzzer.in/0de800a5f61588596ef654ce1f913502b2066d62 new file mode 100644 index 0000000000..9cea3fd923 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/0de800a5f61588596ef654ce1f913502b2066d62 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0f789dcb05218640a79284e3617001a38b9c22b0 b/fuzz/gnutls_set_trust_file_fuzzer.in/0f789dcb05218640a79284e3617001a38b9c22b0 new file mode 100644 index 0000000000..62154aeac3 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/0f789dcb05218640a79284e3617001a38b9c22b0 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/0fc727d266eec9dcfb96cfa6c198937a67ad1e77 b/fuzz/gnutls_set_trust_file_fuzzer.in/0fc727d266eec9dcfb96cfa6c198937a67ad1e77 new file mode 100644 index 0000000000..022599a536 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/0fc727d266eec9dcfb96cfa6c198937a67ad1e77 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/103b324054114ff723c39e979fcfbc0548e2c407 b/fuzz/gnutls_set_trust_file_fuzzer.in/103b324054114ff723c39e979fcfbc0548e2c407 new file mode 100644 index 0000000000..61df7db577 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/103b324054114ff723c39e979fcfbc0548e2c407 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1121988859983f7329ab0c6189593281eb5d7fa2 b/fuzz/gnutls_set_trust_file_fuzzer.in/1121988859983f7329ab0c6189593281eb5d7fa2 new file mode 100644 index 0000000000..d1c5efbecd Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/1121988859983f7329ab0c6189593281eb5d7fa2 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1168394b9c4adbcd3ad3b21a66701c061398552f b/fuzz/gnutls_set_trust_file_fuzzer.in/1168394b9c4adbcd3ad3b21a66701c061398552f new file mode 100644 index 0000000000..6355c85248 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/1168394b9c4adbcd3ad3b21a66701c061398552f differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/12a23c054d8af0557c2fd3d409274177e1e712c5 b/fuzz/gnutls_set_trust_file_fuzzer.in/12a23c054d8af0557c2fd3d409274177e1e712c5 new file mode 100644 index 0000000000..e23a6563c0 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/12a23c054d8af0557c2fd3d409274177e1e712c5 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1350dcae06a49a39d6731d86c1a15ff642492d2a b/fuzz/gnutls_set_trust_file_fuzzer.in/1350dcae06a49a39d6731d86c1a15ff642492d2a new file mode 100644 index 0000000000..0ab830d109 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/1350dcae06a49a39d6731d86c1a15ff642492d2a @@ -0,0 +1,3 @@ +Q-----BEGIN CERTIFICATETIFICATE-----BEGIN X509 CERTIFICATEEE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA2UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBQZWNobm8sb2dpZXjMS5gWMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNXBAQeAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UECh4MNBZXE0MF2AG1ZGVyMRQwEgYDVHQLEwtBnNrbI4RTE/5DLjERMIEAMIEAMIEAMIEAMIEAMAAxGDAWBgNVBQMeD0ourGFic2VyaWVzLNmvbTCBnzANBgkqhkiG0w0BAQEFAAOBjQAwgYkCgYEA6LVYL0kSxId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4xdHeOZek0SztRdLUyI7NotSRocfK7eJ9HAnkCG1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAoyCugKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm3ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw4moUXvcwDgYDVR0TAQH/BAQwAgLgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI0NPvGbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7jamsrFdFRj0IbJz5Qa1sknhnTA1H2shazhzDFdRPhQenNrbI4RTE/ +-----END 1UECh \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/14084b8eab1d7492ef9cb59381ff0135a22d173a b/fuzz/gnutls_set_trust_file_fuzzer.in/14084b8eab1d7492ef9cb59381ff0135a22d173a new file mode 100644 index 0000000000..09aa6d131c --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/14084b8eab1d7492ef9cb59381ff0135a22d173a @@ -0,0 +1,10 @@ +-----BEGIN X509 ERTIFICATE----- +Ab4CAQEwDQYJKoZIhvcNAAwDVQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BE IN CERTIFICATE-----B-----BEGINCERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFCATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGINCERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIBICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN ----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERBEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE---/-FEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B---------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE----------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE----CERTIN C@TIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGINCERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN ERTIFI-----BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BTIFICATE-----BEGIN X509 CERTIFICTE-Z CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z--BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICGTE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509E-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----TIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFITE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BCERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN OERTI`ICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFIC-BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----TIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluQzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw02Mx +ADMzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNMBAsTB5N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +----00= +-----END CeATlbbb \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/14e8657148e2e691b34578e67cb54cb1da9d208d b/fuzz/gnutls_set_trust_file_fuzzer.in/14e8657148e2e691b34578e67cb54cb1da9d208d new file mode 100644 index 0000000000..fac49421d8 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/14e8657148e2e691b34578e67cb54cb1da9d208d differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1566f3bcd349adbe658fcfe692fdbbe6db9386ad b/fuzz/gnutls_set_trust_file_fuzzer.in/1566f3bcd349adbe658fcfe692fdbbe6db9386ad new file mode 100644 index 0000000000..1e086f0f41 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/1566f3bcd349adbe658fcfe692fdbbe6db9386ad @@ -0,0 +1 @@ +~-----BEGIN CERTIFICATE09 CER-----BEGIN X 509 CRLTIFICATE 509 CRLTI-----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/15b19ab19c264d2723ccad974a6fa946d1606347 b/fuzz/gnutls_set_trust_file_fuzzer.in/15b19ab19c264d2723ccad974a6fa946d1606347 new file mode 100644 index 0000000000..bf49ba04e9 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/15b19ab19c264d2723ccad974a6fa946d1606347 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE-----BEGIN X509 CRL-----MAGI-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/162e402436de52302e09e36d52f3f2a3ad6ae58c b/fuzz/gnutls_set_trust_file_fuzzer.in/162e402436de52302e09e36d52f3f2a3ad6ae58c new file mode 100644 index 0000000000..75127498ff --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/162e402436de52302e09e36d52f3f2a3ad6ae58c @@ -0,0 +1,19 @@ +Cer +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA0UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZPcmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaP6cbt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZYdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYEJpOyId +p4THRdcMAwGA1UdEwQFMAMCAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQon/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/17747955b65d0782af0707a420698c26304f50ae b/fuzz/gnutls_set_trust_file_fuzzer.in/17747955b65d0782af0707a420698c26304f50ae new file mode 100644 index 0000000000..86fadcecdb Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/17747955b65d0782af0707a420698c26304f50ae differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/17ab056fa5dea5a7734cf27e6d7dac6ee15baead b/fuzz/gnutls_set_trust_file_fuzzer.in/17ab056fa5dea5a7734cf27e6d7dac6ee15baead new file mode 100644 index 0000000000..76360e278f Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/17ab056fa5dea5a7734cf27e6d7dac6ee15baead differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/17ee01a02d578ed543b2bc7a1cdea12880f74784 b/fuzz/gnutls_set_trust_file_fuzzer.in/17ee01a02d578ed543b2bc7a1cdea12880f74784 new file mode 100644 index 0000000000..827d5aa51b --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/17ee01a02d578ed543b2bc7a1cdea12880f74784 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNBVAYTAlVTMREwDwYDVQQHDwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQEQLwtBUkFNSVMgSU5DLjERMA8GA1UECB4I2frcT8k2NksxGDAWBgNVBAMUDyoubGFic4VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk0q/pdAaYe/xd8B4M44MNXuOCr2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba1FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0TAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1836ab981496bcf3bf36ac6693e5bd2d30924824 b/fuzz/gnutls_set_trust_file_fuzzer.in/1836ab981496bcf3bf36ac6693e5bd2d30924824 new file mode 100644 index 0000000000..d1cc047da5 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/1836ab981496bcf3bf36ac6693e5bd2d30924824 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1846fba9c4cd58a58e8ed9f6989befe8c2c2e02e b/fuzz/gnutls_set_trust_file_fuzzer.in/1846fba9c4cd58a58e8ed9f6989befe8c2c2e02e new file mode 100644 index 0000000000..9b6276ff7c --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/1846fba9c4cd58a58e8ed9f6989befe8c2c2e02e @@ -0,0 +1,15 @@ +Cert4d +-----BEGIN CERTIFICATE----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNv +bnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MdA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/18b51648e7762e127f7bb4c0444f8b363af5835c b/fuzz/gnutls_set_trust_file_fuzzer.in/18b51648e7762e127f7bb4c0444f8b363af5835c new file mode 100644 index 0000000000..e50a5a9ed4 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/18b51648e7762e127f7bb4c0444f8b363af5835c differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/18cf27ea17ac2382036fce9e5ca1422ed77c6331 b/fuzz/gnutls_set_trust_file_fuzzer.in/18cf27ea17ac2382036fce9e5ca1422ed77c6331 new file mode 100644 index 0000000000..d6e1f8de76 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/18cf27ea17ac2382036fce9e5ca1422ed77c6331 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEghOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLMwtBUkFNSVMgSU5DLjERMA8GA1UEC8MITkVXIFlPUksxGDAWBgNVBAMoDyVubGFic4VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRjJzI50bQa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/18d73de47b9532d4158c7faa1ce75a3d775fd6f2 b/fuzz/gnutls_set_trust_file_fuzzer.in/18d73de47b9532d4158c7faa1ce75a3d775fd6f2 new file mode 100644 index 0000000000..8b784c9541 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/18d73de47b9532d4158c7faa1ce75a3d775fd6f2 @@ -0,0 +1,19 @@ +Cert +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA0UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZPcmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaP6cbt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdEgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZYdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYEJpOyId +p4THRdcMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQon/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/18dc5b8cdf3882f212e256e9f8c58c54349c6d0d b/fuzz/gnutls_set_trust_file_fuzzer.in/18dc5b8cdf3882f212e256e9f8c58c54349c6d0d new file mode 100644 index 0000000000..7ca593496e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/18dc5b8cdf3882f212e256e9f8c58c54349c6d0d @@ -0,0 +1,3 @@ +MRMwEQYDVQQDFAoqLmdiLmdvLmtyMCATE-G4SI- -----END -----BEGIN CERTIFICATE---------%BEGIN CERTIFICATE-MDMxNlAUbWRxVXB-----BEGIN X509 CERTIFICATEDLEReMH+eHLuqfM18VVyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIdERTIFICATE----- +MIIDZzCCAtCgAwIBAQIDCwsxMA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMS0wKwYDVQQDEyRFcXVpZmF4IFNlY3VyZSBHbG9iYWwgZUJ1c2luZXNzIENBLTEwHhcNMDkwMzE4MTMwMzE1WhcNMTQwMzE4MTMwMzE1WjCB1jELMAkGA1UEBhMCTkwxJjAkBgNVBAoTHXBvcnRhYWwuZ291ZHNtaXQtbWFnbmV0aWNzLm5sMRMwEQYDVQQLEwpHVDM0MDMyNzQzMTEwLwYDVQQLMyhTZWUgd3d3LnJhcGlkc3NsLmNvbS9yZXNvdXJjZXMvY3BzIChjKTA5MS8wLQYDVQQLEyZEb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgLSBSYXBpZFNTTChSKTEmMCQGA0UEExMdcG9ydGFhbC5nb3Vkc21pdC1tYWduZXRpY3MubmwwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALcK0VV2IgUNrIItBa/UBIX4A/r14br2Povw4J3/yQjI+MueFR8N9IRoCQgktJ+nHiVSUwFXHmuil0I+JXsXgrHjlBWFFUSXHH8/5WTBDzNIfyY1Ymky7kpCzeZa7R9XLF+C2ENXg+Jf0zBy4gf3i941JpIdOhxyajnlQbcFIFNDAgMjAAGCgb0wgbowDgYDVR0PAQH/BAQDAgTwMB0GA1UdDgQWBBRnqhBS9VfvsC+vmJut5XgoCb6spTA7BgNVHR8ENDAyMDCgLqAshipodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL2dsb2JhbGNhMS5jcmwwHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCSAAwDQYJKoZIhvcNAQEFBQADgYEAHZlYx8nIB/+NXKR+gsH5QaGyxJLD46UabPiwFZh0nOAUTXpR9K8ZiYBWMtMh8WUM81qV3becix1P75mLCqqkt1Lvhg0pGWW4BQinHr06hGfk7bZmWWsjNM8ts32eZquU5qssVXyYBw9WHIa+rQLdLhEjTjPmSKe1gRMJtzQSDZk= +-----END CERTIFICATE-----BFhBpbmwJLUjEcMBoGA1UECh4TR292ZXJubWVudCBvZiBLb3JlYTEYMBYGAdDEYMFI \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/18e7381c4e192420c75b8412eebb9bad4dcf833c b/fuzz/gnutls_set_trust_file_fuzzer.in/18e7381c4e192420c75b8412eebb9bad4dcf833c new file mode 100644 index 0000000000..24e783fbed --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/18e7381c4e192420c75b8412eebb9bad4dcf833c @@ -0,0 +1,3 @@ +-A + +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQVTAAGIEMAMGTvQvTAAugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL-----END A- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/19c1fbe34286fbdeb692bbc095ace7081635d296 b/fuzz/gnutls_set_trust_file_fuzzer.in/19c1fbe34286fbdeb692bbc095ace7081635d296 new file mode 100644 index 0000000000..65b37135bb --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/19c1fbe34286fbdeb692bbc095ace7081635d296 @@ -0,0 +1,15 @@ +Certificate50:1 +-----BEGIN CERTIFICATE----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQHEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNv +bnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END C40:e7:e1:47:11:c5:01:7 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1b23933309ca675dcbca70ad042344897ab5aacf b/fuzz/gnutls_set_trust_file_fuzzer.in/1b23933309ca675dcbca70ad042344897ab5aacf new file mode 100644 index 0000000000..c834cfdc2b --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/1b23933309ca675dcbca70ad042344897ab5aacf @@ -0,0 +1,13 @@ +C-----BEGIN X509 CERTIFICATEF----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END C40:e7e:7:11-----BEGIN X509 CERTIFICATE::01:7 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1b2cdea73d82e0cbabe09fb9462a7f1420708c2c b/fuzz/gnutls_set_trust_file_fuzzer.in/1b2cdea73d82e0cbabe09fb9462a7f1420708c2c new file mode 100644 index 0000000000..236664a771 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/1b2cdea73d82e0cbabe09fb9462a7f1420708c2c @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMcDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CEITE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1b803eb872e997b45fbe44753d2983d4eb693a45 b/fuzz/gnutls_set_trust_file_fuzzer.in/1b803eb872e997b45fbe44753d2983d4eb693a45 new file mode 100644 index 0000000000..1ee3da2d2b --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/1b803eb872e997b45fbe44753d2983d4eb693a45 @@ -0,0 +1,6 @@ +------BEGIN CERTIFICATE-Z4L/---E/-------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE8TIFICATERTL-----B-----BEGIN CERTIFICATE-----BEGIN------BEGIN CERTIFICATE-----R------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1c144961ae0e7e780aa5c87a004175eaad296bcd b/fuzz/gnutls_set_trust_file_fuzzer.in/1c144961ae0e7e780aa5c87a004175eaad296bcd new file mode 100644 index 0000000000..5b93f4935c Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/1c144961ae0e7e780aa5c87a004175eaad296bcd differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1db08a45b33568e471ef7e528239bb96cd69ac2d b/fuzz/gnutls_set_trust_file_fuzzer.in/1db08a45b33568e471ef7e528239bb96cd69ac2d new file mode 100644 index 0000000000..9f4ae237e6 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/1db08a45b33568e471ef7e528239bb96cd69ac2d @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UECh4MN0WZRgXZT1UFGgVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMWDyyubGc2ViyFaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CEITE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1ddb448aaef9253f7c772135342dbcdffa2b9b00 b/fuzz/gnutls_set_trust_file_fuzzer.in/1ddb448aaef9253f7c772135342dbcdffa2b9b00 new file mode 100644 index 0000000000..3301a435ec --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/1ddb448aaef9253f7c772135342dbcdffa2b9b00 @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvbw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyTUMxOADdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END FICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/1eaab26d676c38e8f37f089f524d575f95dff1c4 b/fuzz/gnutls_set_trust_file_fuzzer.in/1eaab26d676c38e8f37f089f524d575f95dff1c4 new file mode 100644 index 0000000000..d76bdd9568 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/1eaab26d676c38e8f37f089f524d575f95dff1c4 @@ -0,0 +1 @@ +CCXN X509A-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGINTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-vTwwwugCTAkMB9 CRL-----MIIAwwwugCTAkMBEGCEIRNTCGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/204640c10dd6795d716ade5669097b2a6068f731 b/fuzz/gnutls_set_trust_file_fuzzer.in/204640c10dd6795d716ade5669097b2a6068f731 new file mode 100644 index 0000000000..a077fcef3d Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/204640c10dd6795d716ade5669097b2a6068f731 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/20692ca6ff8e65107175f5cbcbbc8899134b3080 b/fuzz/gnutls_set_trust_file_fuzzer.in/20692ca6ff8e65107175f5cbcbbc8899134b3080 new file mode 100644 index 0000000000..db3effd448 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/20692ca6ff8e65107175f5cbcbbc8899134b3080 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/207778b5ae6e952acc48997ad00654f190f12e2e b/fuzz/gnutls_set_trust_file_fuzzer.in/207778b5ae6e952acc48997ad00654f190f12e2e new file mode 100644 index 0000000000..0869ca73a0 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/207778b5ae6e952acc48997ad00654f190f12e2e @@ -0,0 +1 @@ +C--TJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/2078fb4d4838f04dcab5ed29de260f0dd7ae2051 b/fuzz/gnutls_set_trust_file_fuzzer.in/2078fb4d4838f04dcab5ed29de260f0dd7ae2051 new file mode 100644 index 0000000000..4fc3e91957 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/2078fb4d4838f04dcab5ed29de260f0dd7ae2051 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/20cfc5b99930b946c10d468ac63f2709621ce3e9 b/fuzz/gnutls_set_trust_file_fuzzer.in/20cfc5b99930b946c10d468ac63f2709621ce3e9 new file mode 100644 index 0000000000..aadfe4095d Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/20cfc5b99930b946c10d468ac63f2709621ce3e9 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/2122881cefd89dc5dc3171f773a902329a732d11 b/fuzz/gnutls_set_trust_file_fuzzer.in/2122881cefd89dc5dc3171f773a902329a732d11 new file mode 100644 index 0000000000..c226ec4821 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/2122881cefd89dc5dc3171f773a902329a732d11 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/217c525d390d1ecd8ff44944a4216e3c81ecd20b b/fuzz/gnutls_set_trust_file_fuzzer.in/217c525d390d1ecd8ff44944a4216e3c81ecd20b new file mode 100644 index 0000000000..d9cef8e899 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/217c525d390d1ecd8ff44944a4216e3c81ecd20b differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/21aed14ae41f6bb541e1a3ecdabc98c656a6640a b/fuzz/gnutls_set_trust_file_fuzzer.in/21aed14ae41f6bb541e1a3ecdabc98c656a6640a new file mode 100644 index 0000000000..207a2a3595 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/21aed14ae41f6bb541e1a3ecdabc98c656a6640a @@ -0,0 +1,4 @@ + +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL + +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL-----END A- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/22a9483bdad55ad2a53c02f204c30d20fa22b757 b/fuzz/gnutls_set_trust_file_fuzzer.in/22a9483bdad55ad2a53c02f204c30d20fa22b757 new file mode 100644 index 0000000000..5da57a5ab7 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/22a9483bdad55ad2a53c02f204c30d20fa22b757 @@ -0,0 +1,4 @@ +b-:3d +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATEY-----BEGIN CERTIFICATE29sdG-----BEGIN CERTIFICATEZW-----BEGIN X509 CERTIFICATEEE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA2UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBQZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAQTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UECh4M2XZMRN0EAGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyourGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ9HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0TAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH12shazhzDFdRPhQenNrbI4RTE/ +-----END ByCATE--M \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/2387317377bfd8465f6a93186096135dff4db8f6 b/fuzz/gnutls_set_trust_file_fuzzer.in/2387317377bfd8465f6a93186096135dff4db8f6 new file mode 100644 index 0000000000..d588248cdd --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/2387317377bfd8465f6a93186096135dff4db8f6 @@ -0,0 +1,19 @@ +Cert +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA0UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZPcmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0F +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaP6cbt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3hhdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZYdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYEJpOyId +p4THRdcMAwGA2UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQon/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/26bc54dba1d3169a5ad0e283fa7c474cb511aa21 b/fuzz/gnutls_set_trust_file_fuzzer.in/26bc54dba1d3169a5ad0e283fa7c474cb511aa21 new file mode 100644 index 0000000000..2ddd42639f Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/26bc54dba1d3169a5ad0e283fa7c474cb511aa21 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/27212da0bb0d6ce71e043ba02577f663ad17e790 b/fuzz/gnutls_set_trust_file_fuzzer.in/27212da0bb0d6ce71e043ba02577f663ad17e790 new file mode 100644 index 0000000000..5862d8ea3d Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/27212da0bb0d6ce71e043ba02577f663ad17e790 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/274c0759ade7869c93d4f61761276fda1a1c5186 b/fuzz/gnutls_set_trust_file_fuzzer.in/274c0759ade7869c93d4f61761276fda1a1c5186 new file mode 100644 index 0000000000..4ce4da5427 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/274c0759ade7869c93d4f61761276fda1a1c5186 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgABAANAA7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEBhMMRXN0ZWUgAGF1ZGVyMRQwEgYDVQQFEwtBUkFNSVMgSU5DLjERMA8GA1UEFBMITkVXIFlPUksxGDAWBgNVBAMUD9oubGFic3VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm0ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END R----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/277396d9747ae3eaa01cc15793a021aeff4498a3 b/fuzz/gnutls_set_trust_file_fuzzer.in/277396d9747ae3eaa01cc15793a021aeff4498a3 new file mode 100644 index 0000000000..316105ab75 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/277396d9747ae3eaa01cc15793a021aeff4498a3 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE-----R-----BEGIN X509 CRL-----B--L-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/27d354096ae30ab7f6842d83f3780e1d7ee973b5 b/fuzz/gnutls_set_trust_file_fuzzer.in/27d354096ae30ab7f6842d83f3780e1d7ee973b5 new file mode 100644 index 0000000000..0ad5c0b1cf --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/27d354096ae30ab7f6842d83f3780e1d7ee973b5 @@ -0,0 +1,15 @@ + +-----BEGIN CERTIFICATE----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b245 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNv +bnN1bHRpbmcuY30tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAyODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ8wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2105dY2OTyPjLp48d35VQ29I1QjQe0d0XqnaQzNp3L +4HRYEcUBe00= +-----END CVvBkXN0-----5YERT 1 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/29cf5f97f686ffaa0c280e1606f9ff56ad658b3c b/fuzz/gnutls_set_trust_file_fuzzer.in/29cf5f97f686ffaa0c280e1606f9ff56ad658b3c new file mode 100644 index 0000000000..a437ee7032 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/29cf5f97f686ffaa0c280e1606f9ff56ad658b3c differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/2a7c767bc73122a6f836ff75f6c99bd26752ed88 b/fuzz/gnutls_set_trust_file_fuzzer.in/2a7c767bc73122a6f836ff75f6c99bd26752ed88 new file mode 100644 index 0000000000..82f5144059 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/2a7c767bc73122a6f836ff75f6c99bd26752ed88 @@ -0,0 +1 @@ +----BEGIN -----BEGIN CERTIFICATE-----BEGIN CERTI-----END FICATE;; diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/2b275e0bb6afd01b38b95c5b415fa6fa0e3d80d2 b/fuzz/gnutls_set_trust_file_fuzzer.in/2b275e0bb6afd01b38b95c5b415fa6fa0e3d80d2 new file mode 100644 index 0000000000..a96ae5c3de --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/2b275e0bb6afd01b38b95c5b415fa6fa0e3d80d2 @@ -0,0 +1,13 @@ +C-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNv +bnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDn2MzAxODUyMTDaFw0xMzExMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq1+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END C40zADBEGIwwx \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/2bab02926467db4f99dff56c986c5393e3552dd5 b/fuzz/gnutls_set_trust_file_fuzzer.in/2bab02926467db4f99dff56c986c5393e3552dd5 new file mode 100644 index 0000000000..d0f9a74ad0 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/2bab02926467db4f99dff56c986c5393e3552dd5 @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/2bc52243fb843be0a842ae20e9a694e9065e3744 b/fuzz/gnutls_set_trust_file_fuzzer.in/2bc52243fb843be0a842ae20e9a694e9065e3744 new file mode 100644 index 0000000000..f35663baf3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/2bc52243fb843be0a842ae20e9a694e9065e3744 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DIjERMA8GA1UECBMITkVXImlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/2c21af9397685cb7762cc4ab01660534b33dba11 b/fuzz/gnutls_set_trust_file_fuzzer.in/2c21af9397685cb7762cc4ab01660534b33dba11 new file mode 100644 index 0000000000..0813c53c7e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/2c21af9397685cb7762cc4ab01660534b33dba11 @@ -0,0 +1 @@ +CC-------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTZAVvvvBAvAMGTVvTJAVL--TAkvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------iC9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/2e8d25a4b7e29d084149e60372baccb4e528e4c5 b/fuzz/gnutls_set_trust_file_fuzzer.in/2e8d25a4b7e29d084149e60372baccb4e528e4c5 new file mode 100644 index 0000000000..13835ad96f --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/2e8d25a4b7e29d084149e60372baccb4e528e4c5 @@ -0,0 +1,13 @@ +EAMYEG-- CERTIFICATE-Z4-----BEGIN CERTIFICATE/-------BEGIN CERTIFICATE/----BEGIN X509 CRL/----E/-------BEGIN CERTIFICATE/-------BEGIN CERTIFICATE-Z4-----BEGIN CERTIFICATE/-------BEGIN CERTIFICATE/-------BEGIN CERTIFICATE-Z4-----BEGIN X509 CERTIFICATEF----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzAxMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/2aI0QtA4n8bdO23mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END CEIDAMCmCCI \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/2f853aa0eaf2a23b427607bf1fb3bfe87c53f31f b/fuzz/gnutls_set_trust_file_fuzzer.in/2f853aa0eaf2a23b427607bf1fb3bfe87c53f31f new file mode 100644 index 0000000000..cdc2536917 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/2f853aa0eaf2a23b427607bf1fb3bfe87c53f31f @@ -0,0 +1 @@ +-----BEGIN X-----509 CERTIFICATE-----BEGIN CERTIFICATE diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/2fe4f9190f6fa829d6fed370222a2e4e90a193c0 b/fuzz/gnutls_set_trust_file_fuzzer.in/2fe4f9190f6fa829d6fed370222a2e4e90a193c0 new file mode 100644 index 0000000000..fc69e056b4 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/2fe4f9190f6fa829d6fed370222a2e4e90a193c0 @@ -0,0 +1,2 @@ +----BEGIN CERTIFICATE09 CER-------BEGIN CERTIFICATE09 CER-----BEGIN X -----END  +-----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/308780d9ded4cdb48bece4f4bb1cf25e9906d0aa b/fuzz/gnutls_set_trust_file_fuzzer.in/308780d9ded4cdb48bece4f4bb1cf25e9906d0aa new file mode 100644 index 0000000000..0e8d99966c Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/308780d9ded4cdb48bece4f4bb1cf25e9906d0aa differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/30a75ea599d61360fafbb84ac2151bcba33078c5 b/fuzz/gnutls_set_trust_file_fuzzer.in/30a75ea599d61360fafbb84ac2151bcba33078c5 new file mode 100644 index 0000000000..5f0dc365cd --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/30a75ea599d61360fafbb84ac2151bcba33078c5 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJ7VL-----END @f \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/31382c11c587c05362ed4bfbddf35fc246eb3bd9 b/fuzz/gnutls_set_trust_file_fuzzer.in/31382c11c587c05362ed4bfbddf35fc246eb3bd9 new file mode 100644 index 0000000000..10e80ea859 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/31382c11c587c05362ed4bfbddf35fc246eb3bd9 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAXTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UUChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQYEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAUMDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM0DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/314717c0ad6771b89cc543796a1e55c43b3c5631 b/fuzz/gnutls_set_trust_file_fuzzer.in/314717c0ad6771b89cc543796a1e55c43b3c5631 new file mode 100644 index 0000000000..c87280c04e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/314717c0ad6771b89cc543796a1e55c43b3c5631 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMIEAMIEAGIEbMIEAMCMCCIFTCEIAGIEMMIEAMwCMAwugCTAkMBEGCEIRNTCCMVvTJAVvvvBAvAMGqVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/31c8d22ff2eaaac27850237b65e29c595f6b0552 b/fuzz/gnutls_set_trust_file_fuzzer.in/31c8d22ff2eaaac27850237b65e29c595f6b0552 new file mode 100644 index 0000000000..da30e1c501 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/31c8d22ff2eaaac27850237b65e29c595f6b0552 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/332d59ff03ce5b0628bce953522ab3445928c90b b/fuzz/gnutls_set_trust_file_fuzzer.in/332d59ff03ce5b0628bce953522ab3445928c90b new file mode 100644 index 0000000000..19f81cca1e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/332d59ff03ce5b0628bce953522ab3445928c90b @@ -0,0 +1 @@ +Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3333e5475724242468a712339e84f9978053ebc7 b/fuzz/gnutls_set_trust_file_fuzzer.in/3333e5475724242468a712339e84f9978053ebc7 new file mode 100644 index 0000000000..f66bc02390 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/3333e5475724242468a712339e84f9978053ebc7 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3377d980d315a49e6b0d6ce540ad1946a334ce81 b/fuzz/gnutls_set_trust_file_fuzzer.in/3377d980d315a49e6b0d6ce540ad1946a334ce81 new file mode 100644 index 0000000000..290b0b3b89 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/3377d980d315a49e6b0d6ce540ad1946a334ce81 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/33effd5a56b2d005db048efbc7008ce20126770f b/fuzz/gnutls_set_trust_file_fuzzer.in/33effd5a56b2d005db048efbc7008ce20126770f new file mode 100644 index 0000000000..29e66dda88 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/33effd5a56b2d005db048efbc7008ce20126770f @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVv5FAVwvvvQvTAAFw2xMzA0LTEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/345c329f42802af8db672a28eb315b5c47da8b4a b/fuzz/gnutls_set_trust_file_fuzzer.in/345c329f42802af8db672a28eb315b5c47da8b4a new file mode 100644 index 0000000000..12b6ed4140 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/345c329f42802af8db672a28eb315b5c47da8b4a differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/35915423817bc7f4e7820f478610bca318b7ece5 b/fuzz/gnutls_set_trust_file_fuzzer.in/35915423817bc7f4e7820f478610bca318b7ece5 new file mode 100644 index 0000000000..1b56f69953 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/35915423817bc7f4e7820f478610bca318b7ece5 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCNIRCEITIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MMg=-----BEGIN CERTIFICATE-----MMg=-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/36927ab563571d5bdd53d71d9a1fe07106c877c6 b/fuzz/gnutls_set_trust_file_fuzzer.in/36927ab563571d5bdd53d71d9a1fe07106c877c6 new file mode 100644 index 0000000000..5715f183f9 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/36927ab563571d5bdd53d71d9a1fe07106c877c6 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3802dcb5a5dbd4dc54a15a906f6fcf6d12b7d291 b/fuzz/gnutls_set_trust_file_fuzzer.in/3802dcb5a5dbd4dc54a15a906f6fcf6d12b7d291 new file mode 100644 index 0000000000..f874e927f6 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/3802dcb5a5dbd4dc54a15a906f6fcf6d12b7d291 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/38fc93acaf0e56a4fe30a8963276430df93145c5 b/fuzz/gnutls_set_trust_file_fuzzer.in/38fc93acaf0e56a4fe30a8963276430df93145c5 new file mode 100644 index 0000000000..34ec2ccfce Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/38fc93acaf0e56a4fe30a8963276430df93145c5 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/395ad8f5841aba1e0b7f3090952ceec25ce49418 b/fuzz/gnutls_set_trust_file_fuzzer.in/395ad8f5841aba1e0b7f3090952ceec25ce49418 new file mode 100644 index 0000000000..f3ba6d6248 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/395ad8f5841aba1e0b7f3090952ceec25ce49418 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/39986161769ace29a218b977f68f8ea84e88d461 b/fuzz/gnutls_set_trust_file_fuzzer.in/39986161769ace29a218b977f68f8ea84e88d461 new file mode 100644 index 0000000000..ac3e2acb32 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/39986161769ace29a218b977f68f8ea84e88d461 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/39df2b7177111a2526e12b1513b749586678a428 b/fuzz/gnutls_set_trust_file_fuzzer.in/39df2b7177111a2526e12b1513b749586678a428 new file mode 100644 index 0000000000..619d58605b --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/39df2b7177111a2526e12b1513b749586678a428 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3a367ab6100886f9bcb5750b3937cffc61497e89 b/fuzz/gnutls_set_trust_file_fuzzer.in/3a367ab6100886f9bcb5750b3937cffc61497e89 new file mode 100644 index 0000000000..e6d5038bed --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/3a367ab6100886f9bcb5750b3937cffc61497e89 @@ -0,0 +1,14 @@ +C-----BEGIN X509 CRLerd +-----BEGIN CERTIFICATE----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MdA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3adfcc57f1c2dcb61aea9e7fc2d2f52cbbc7c7b3 b/fuzz/gnutls_set_trust_file_fuzzer.in/3adfcc57f1c2dcb61aea9e7fc2d2f52cbbc7c7b3 new file mode 100644 index 0000000000..41ec48508f --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/3adfcc57f1c2dcb61aea9e7fc2d2f52cbbc7c7b3 @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-MRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3af97c8592805f05c5c924caadbcd8720744d41a b/fuzz/gnutls_set_trust_file_fuzzer.in/3af97c8592805f05c5c924caadbcd8720744d41a new file mode 100644 index 0000000000..9b3a3ed26a --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/3af97c8592805f05c5c924caadbcd8720744d41a @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3bf5167ca7401b2ce62cbc22795eae7b9bd7105b b/fuzz/gnutls_set_trust_file_fuzzer.in/3bf5167ca7401b2ce62cbc22795eae7b9bd7105b new file mode 100644 index 0000000000..09b1aa49a1 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/3bf5167ca7401b2ce62cbc22795eae7b9bd7105b @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwKBAAIOggAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA0UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3c5d1ab990c64ac841773ec7fdff03fc85fbbb38 b/fuzz/gnutls_set_trust_file_fuzzer.in/3c5d1ab990c64ac841773ec7fdff03fc85fbbb38 new file mode 100644 index 0000000000..e9d2e3b8b2 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/3c5d1ab990c64ac841773ec7fdff03fc85fbbb38 @@ -0,0 +1 @@ +~-----BEGIN CERTIFICATE09 CER-----BEGIN X 509 CRLTIFICATE 509 CRLTI-----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3d9f81392c427c4ae3593ae7fa2b1385b48fe309 b/fuzz/gnutls_set_trust_file_fuzzer.in/3d9f81392c427c4ae3593ae7fa2b1385b48fe309 new file mode 100644 index 0000000000..9b05cff53d Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/3d9f81392c427c4ae3593ae7fa2b1385b48fe309 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3e57797ff722bc116ef787db7262a7b1c7837dbb b/fuzz/gnutls_set_trust_file_fuzzer.in/3e57797ff722bc116ef787db7262a7b1c7837dbb new file mode 100644 index 0000000000..36f31b5577 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/3e57797ff722bc116ef787db7262a7b1c7837dbb differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3e85231f6191755b9023c7aaf45a3872b2f80b7a b/fuzz/gnutls_set_trust_file_fuzzer.in/3e85231f6191755b9023c7aaf45a3872b2f80b7a new file mode 100644 index 0000000000..fe800ec642 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/3e85231f6191755b9023c7aaf45a3872b2f80b7a @@ -0,0 +1,234 @@ +IaFICATE--------BEGIN CERTIFICATE-----------BEGIN CERTIFICATEDEY444-----BEGIN CERTIFICATE4444V88aVd038-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEHk------BEjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBTZXJ2ZXIgQ0EwHhcNMTIxMTEzMDI0ODQ2WhcNMTMxMTEzMjEzNjAyWjBnMRkwFwYDVQQNExAwOE5RV09FVGZuZWFScDAzMQswCQYDVQQGEwJERTEXMBUGA1UEAxMOd3d3LnNreWNvcmUuZGUxJDAiBgkqhkiG9w0BCQQEFXBvc3RtYXN0ZXMAc2t5Y29yZS5kZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVWMs5y7sWg0io8lXtyl2MJGLSIKJIzAHx6eLam7nQHpdnD2I7Y3Gg3njUXfgFLsNlpvWm3pCx6O0yataNdZCBGg5YZ4oWHEYwg0+cm2bxYeuTr6TS5TlQ9F7CDliqiA/Lx1cpJGKHB9Azm5Ul2NV3FqOGEr2+P9737my5l7KeSHp/KQFEfVrx46ZRbrJopYdG9q7Kr53rLoZXzs30CFO7lGCKSnFfbrE2o9qX2Z4/HkYoZQs9rYSBjomUGBwPOTBDUXcoIwuysZ3DM49/Vj8wNdkGBGPkY1c9CHULe7HTbe+l5cgY3snoKvJnqMHOxAFFqRGvFG7oQP1QlyIGQR8MCAwEAAaOCAt8wggLbMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1UdDgQWBBQXB3asVLXN6xKGqUNu5a3lWDCmbTAfBgNVHSMEGDAWgBTrQjTQmLCrn/Qbawj3zGQu7w4sRTAlBgNVHREEHjAcgg53d3cuc2t5Y29yZS5kZYIKc2t5Y29yZS5kZTCCAVYGA1UdIASCAU0wggFJMAgGBmeBDAECATCCATsGCysGAQQBgbU3AQIDMIIBKjAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9saWN5LnBkZjCB9wYIKwYBBQUHAgIwgeowJxYgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwAwIBARqBvlRoaXMgY2VydGlmaWNhdGUgd2FzIGlzc3VlZCBhY2NvcmRpbmcgdG8gdGhlIENsYXNzIDEgVmFsaWRhdGlvbVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8OOGQol/JduZUGoECIQDWi3y6UxIFBvqxPcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----EN---END CERTD CERTI3dy55-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-TE------F-FICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- ------END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATdNSNameE----- +-----END CERTIFI--BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW5---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----B---END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW6---D CERTIFICATE----En- -----END -----BEGIN CERTIFICA-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En-+Qf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasBt9KiU= +--+/pOOGQol/JduZUGoECIQDWi3y6UxIFBvqxPcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----EN---END CERTD CERTI3dy55-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-TE------F-FICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- ------END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIJICATdNSNameE----- +-----END CERTIFI--BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW5---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CEAIRFICTTE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----B---END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW6---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFI--BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW5---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICA--BEGINtYWiByZXF1aXJlbWVudHMgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeSwgcmVsaWFuY2Ugb25seSBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UgaW4gY29tcGxpYW5jZSBvZiB0aGUgcmVseWluZyBwYXJ0eSBvYmxpZ2F0aW9ucy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5zdGFydHNzbC5jb20vY3J0MS1jcmwuY3JsMIGOBggrBgEFBQcBAQSBgTB/MDkGCCsGAQUFBzABhi1odHRwOi8vb2NzcC5zdGFydHNzbC5jb20vc3ViL2NsYXNzMS9zZXJ2ZXIvY2EwQgYIKwYBBQUHMAKGNmh0dHA6Ly9haWEuc3RhcnRzc2wuY29tL2NlcnRzL3N1Yi5jbGFzczEuc2VydmVyLmNhLmNydDAjBgNVHRIEHDAahhhodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS8wDQYJKoZIhvcNAQEFBQADggEBAE32LbFBvve/XLsd4nuqOUVMlmZoEWIa6Gq28TjTqRH4BK0kFixiOEWZJlvvkpWT2NUlGmgtkv1M1DBJ4mdaiTa6hatmLFzD9SgCVRXywT4C4wzJGBFFdQDAwyj89R6e/0Oew6xYeSTIsmpEGRuLxFuXw9ayJ3zxhtGoiXtj9Ptj1Yd/Xbjawj9AToSRztNEM8OLbiwzKcxP2qWcbhZINpy6Cn/3C9ug4CVCZjyj2OECYlioIliTnJU6KKkMzhOLUxIf+/E8AdLnSwkctLSzv90S/T00daoPCSVHo++r1xJ02yYfS9LKvllTAdBgNVHQ4crk2y214I5QHKIOqUeAVv7seHAQxWzKqKTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8OOGQol/JduZUGoECIQDWi3y6UxIFBvqxPcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----EN---END CERTD CERTI3dy55-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-TE------F-FICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- ------END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATdNSNameE----- +-----END CERTIFI--BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW5---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----B---END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW6---D CERTIFICATE----En- -----END -----BEGIN CERTIFICA-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En-+Qf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasBt9KiU= +--+/pOOGQol/JduZUGoECIQDWi3y6UxIFBvqxPcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----EN---END CERTD CERTI3dy55-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-TE------F-FICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- ------END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIJICATdNSNameE----- +-----END CERTIFI--BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW5---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CEAIRFICTTE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----B---END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW6---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFI--BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW5---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICA--BEGINtYWkgU3ViUgQ0EgMzABWPAwgZ4xCzAJG9iLzAwYBBQUHAQEEPDA+MDwGCCsGAQCERTIFICATE-MDMxNlowgesxKTAniBgNVBAUTIER4SndCbWRxVXB-----BEGIN X509 CERTIFICATEDD--TEyMT`xNTAwMDgNVBAoTF0FrYW1haSBUZWNobmrGEyk2xF1uLuhV+auud2mWjMIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN8o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQEHQwhOZXcgWW9yazEVMBMGA2UEChMMRXN0ZaUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFPklsUxGDAWBgNVBAMUDzAJBgNVBAYTAlVTMRNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyNo7ItSRocfK7eJ7HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDNo9Bd/mafYDb4xfAnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenrNIT4RbE/ +-----END CERTIFI----EAMIEAMIEAMIEAJ7qFCSwmUkXwMCUEITkVXIFlPUksxGDAWBgNxBAMUDyoubGFSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM0DsE4uhUPxbuCJdFYmocjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw0moUXvcwDgYDVR0TAQH/BAQDAgUgMA0GCSqGSIb3D-----BEGIN CERTIFICATE----- +MIIGUjCCBTqgAwIBAgIDCAvFMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBTZXJ2ZXIgQ0EwHhcNMTIxMTEzMDI0ODQ2WhcNMTMxMTEzMjEzNjAyWjBnMRkwFwYDVQQNExAwOE5RV09FVGZuZWFScDAzMQswCQYDVQQGEwJERTEXMBUGA1UEAxMOd3d3LnNreWNvcmUuZGUxJDAiBgkqhkiG9w0BCQQEFXBvc3RtYXN0ZXMAc2t5Y29yZS5kZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVWMs5y7sWg0io8lXtyl2MJGLSIKJIzAHx6eLam7nQHpdnD2I7Y3Gg3njUXfgFLsNlpvWm3pCx6O0yataNdZCBGg5YZ4oWHEYwg0+cm2bxYeuTr6TS5TlQ9F7CDliqiA/Lx1cpJGKHB9Azm5Ul2NV3FqOGEr2+P9737my5l7KeSHp/KQFEfVrx46ZRbrJopYdG9q7Kr53rLoZXzs30CFO7lGCKSnFfbrE2o9qX2Z4/HkYoZQs9rYSBjomUGBwPOTBDUXcoIwuysZ3DM49/Vj8wNdkGBGPkY1c9CHULe7HTbe+l5cgY3snoKvJnqMHOxAFFqRGvFG7oQP1QlyIGQR8MCAwEAAaOCAt8wggLbMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1UdDgQWBBQXB3asVLXN6xKGqUNu5a3lWDCmbTAfBgNVHSMEGDAWgBTrQjTQmLCrn/Qbawj3zGQu7w4sRTAlBgNVHREEHjAcgg53d3cuc2t5Y29yZS5kZYIKc2t5Y29yZS5kZTCCAVYGA1UdIASCAU0wggFJMAgGBmeBDAECATCCATsGCysGAQQBgbU3AQIDMIIBKjAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9saWN5LnBkZjCB9wYIKwYBBQUHAgIwgeowJxYgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwAwIBARqBvlRoaXMgY2VydGlmaWNhdGUgd2FzIGlzc3VlZCBhY2NvcmRpbmcgdG8gdGhlIENsYXNzIDEgVmFsaWRhdGlvbiByZXF1aXJlbWVudHMgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeSwgcmVsaWFuY2Ugb25seSBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UgaW4gY29tcGxpYW5jZSBvZiB0aGUgcmVseWluZyBwYXJ0eSBvYmxpZ2F0aW9ucy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5zdGFydNzbC5jb20vY3J0MS1jcmwuY3JsMIGOBggrBgEFBQcBAQSBgTB/MDkGCCsGAQUFBzABhi1odHRwOi8vb2NzcC5zdGFydHNzbC5jb20vc3ViL2NsYXNzMS9zZXJ2ZXIvY2EwQgYIKwYBBQUHMAKGNmh0dHA6Ly9haWEuc3RhcnRzc2wuY29tL2NlcnRzL3N1Yi5jbGFzczEuc2VydmVyLmNhLmNydDAjBgNVHRhodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS8wDQYJKoZIhvcNAQEFBQADggEBAE32LbFBvve/XLsd4nuqOUVMlmZoEWIa6Gq28TjTqRH4BK0kFixiOEWZJlvvkpWT2NUlGmgtkv1M1DBJ4mdaiTa6hatmLFzD9SgCVRXywT4C4wzJGBFFdQDAwyj89R6e/0Oew6xYeSTIsmpEGRuLxFuXw9ayJ3zxhtGoiXtj9Ptj1Yd/Xbjawj9AToSRztNEM8OLbiwzKcxP2qWcbhZINpy6Cn/3C9ug4CVCZjyj2OECYlioIliTnJU6KKkMzhOLUxIf+/E8AdLnSwkctLSzvEXrS2OSprg1uRVI8NPvGbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7jamsrFdFRj0IbJz5Qa1sknhnTAH12shazhzDFdRPhQenNrbI4RTE/ +-----END --BEGIN XEGDAWgBQYkZqEi8LD +LWrQZjw5usbSedJdAzAPBgNVHRMBAf8EBTADAQE/MA4GA1UdEwEB/wQEAwIF4DAN +BgkqhkiG9w0BAQQFAAN4AEU0nmhsV0h59xJIHESZPqGj8LYEoSnyZ8/vs+KBJmhm +A5XaCALu1m2CWCrW5wjqSiUGIRFyr8qGBk6SBkDCB +EzBVNAgBRAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZvdWbjEOMAwGA1UEBwwFU2FsZW0x +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbGbbqQfy9vFqsnNXYIJ +AOdypp4THRdcMAwGA1UdEwQFMAICB+Qf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasBt9KiU= +--+/pOOGQol/JduZUGoECIQDWi3y6UxIFBvqxPcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----EN---END CERTD CERTI3dy55-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-TE------F-FICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- ------END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATdNSNameE----- +-----END CERTIFI--BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW5---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CEAIRFICTTE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----B---END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW6---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END %----BEGIN CERTIFHCATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFI--BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW5---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICA--BEGINtYWkgU3ViUgQ0EgMzABWPAwgZ4xCzAJG9iLzAwYBBQUHAQEEPDA+MDwGCCsGAQCERTIFICATE-MDMxNlowgesxKTAniBgNVBAUTIER4SndCbWRxVXB-----BEGIN X509 CERTIFICATEDD--TEyMT`xNTAwMDgNVBAoTF0FrYW1haSBUZWNobmrGEyk2xF1uLuhV+auud2mWjMIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN8o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQEHQwhOZXcgWW9yazEVMBMGA2UEChMMRXN0ZaUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFPklsUxGDAWBgNVBAMUDzAJBgNVBAYTAlVTMRNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyNo7ItSRocfK7eJ7HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDNo9Bd/mafYDb4xfAnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenrNIT4RbE/ +-----END CERTIFI----EAMIEAMIEAMIEAJ7qFCSwmUkXwMCUEITkVXIFlPUksxGDAWBgNxBAMUDyoubGFSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM0DsE4uhUPxbuCJdFYmocjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw0moUXvcwDgYDVR0TAQH/BAQDAgUgMA0GCSqGSIb3D-----BEGIN CERTIFICATE----- +MIIGUjCCBTqgAwIBAgIDCAvFMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBTZXJ2ZXIgQ0EwHhcNMTIxMTEzMDI0ODQ2WhcNMTMxMTEzMjEzNjAyWjBnMRkwFwYDVQQNExAwOE5RV09FVGZuZWFScDAzMQswCQYDVQQGEwJERTEXMBUGA1UEAxMOd3d3LnNreWNvcmUuZGUxJDAiBgkqhkiG9w0BCQQEFXBvc3RtYXN0ZXMAc2t5Y29yZS5kZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVWMs5y7sWg0io8lXtyl2MJGLSIKJIzAHx6eLam7nQHpdnD2I7Y3Gg3njUXfgFLsNlpvWm3pCx6O0yataNdZCBGg5YZ4oWHEYwg0+cm2bxYeuTr6TS5TlQ9F7CDliqiA/Lx1cpJGKHB9Azm5Ul2NV3FqOGEr2+P9737my5l7KeSHp/KQFEfVrx46ZRbrJopYdG9q7Kr53rLoZXzs30CFO7lGCKSnFfbrE2o9qX2Z4/HkYoZQs9rYSBjomUGBwPOTBDUXcoIwuysZ3DM49/Vj8wNdkGBGPkY1c9CHULe7HTbe+l5cgY3snoKvJnqMHOxAFFqRGvFG7oQP1QlyIGQR8MCAwEAAaOCAt8wggLbMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1UdDgQWBBQXB3asVLXN6xKGqUNu5a3lWDCmbTAfBgNVHSMEGDAWgBTrQjTQmLCrn/Qbawj3zGQu7w4sRTAlBgNVHREEHjAcgg53d3cuc2t5Y29yZS5kZYIKc2t5Y29yZS5kZTCCAVYGA1UdIASCAU0wggFJMAgGBmeBDAECATCCATsGCysGAQQBgbU3AQIDMIIBKjAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9saWN5LnBkZjCB9wYIKwYBBQUHAgIwgeowJxYgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwAwIBARqBvlRoaXMgY2VydGlmaWNhdGUgd2FzIGlzc3VlZCBhY2NvcmRpbmcgdG8gdGhlIENsYXNzIDEgVmFsaWRhdGlvbiByZXF1aXJlbWVudHMgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeSwgcmVsaWFuY2Ugb25seSBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UgaW4gY29tcGxpYW5jZSBvZiB0aGUgcmVseWluZyBwYXJ0eSBvYmxpZ2F0aW9ucy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5zdGFydHNzbC5jb20vY3J0MS1jcmwuY3JsMIGOBggrBgEFBQcBAQSBgTB/MDkGCCsGAQUFBzABhi1odHRwOi8vb2NzcC5zdGFydHNzbC5jb20vc3ViL2NsYXNzMS9zZXJ2ZXIvY2EwQgYIKwYBBQUHMAKGNmh0dHA6Ly9haWEuc3RhcnRzc2wuY29tL2NlcnRzL3N1Yi5jbGFzczEuc2VydmVyLmNhLmNydDAjBgNVHRIEHDAahhhodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS8wDQYJKoZIhvcNAQEFBQADggEBAE32LbFBvve/XLsd4nuqOUVMlmZoEWIa6Gq28TjTqRH4BK0kFixiOEWZJlvvkpWT2NUlGmgtkv1M1DBJ4mdaiTa6hatmLFzD9SgCVRXywT4C4wzJGBFFdQDAwyj89R6e/0Oew6xYeSTIsmpEGRuLxFuXw9ayJ3zxhtGoiXtj9Ptj1Yd/Xbjawj9AToSRztNEM8OLbiwzKcxP2qWcbhZINpy6Cn/3C9ug4CVCZjyj2OECYlioIliTnJU6KKkMzhOLUxIf+/E8AdLnSwkctLSzv90S/T00daoPCSVHo++r1xJ02yYfS9LKvlpm/dnPp7rZkOvomt1FjhG1fgXNKf5WP2k= +-----END CE-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXAFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCIRETIINCVvTFAVvvvvQvTAAGIEMAMD CERTIFI--BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW5---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----B---END -----BEGIJ CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW6---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFI--BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +MIZXMgNaN\n$(xcalc)\r;xcalc;xcalc$!!"xcalc%pSW6---D CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----:n- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----EN; -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICATE----- +-----END CERTIFICATE----En- -----END -----BEGIN CERTIFICA--BEGINtYWkgU3ViUgQ0EgMzABWPAwgZ4xCzAJG9iLzAwYBBQUHAQEEPDA+MDwGCCsGAQCERTIFICATE-MDMxNlowgesxKTAniBgNVBAUTIER4SndCbWRxVXB-----BEGIN X509 CERTIFICATEDD--TEyMT`xNTAwMDgNVBAoTF0FrYW1haSBUZWNobmrGEyk2xF1uLuhV+auud2mWjMIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN8o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwdNSNameHQwhOZXcgWW9yazEVMBMGA2UEChMMRXN0ZaUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFPklsUxGDAWBgNVBAMUDzAJBgNVBAYTAlVTMRNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyNo7ItSRocfK7eJ7HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDNo9Bd/mafYDb4xfAnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenrNIT4RbE/ +-----END CERTIFI----EAMIEAMIEAMIEAJ7qFCSwmUkXwMCUEITkVXIFlPUksxGDAWBgNxBAMUDyoubGFSSpHOPgMA0GCqGSIb3D------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END AMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE----------ICATE1dad7IQD-----BEGIN CERTIFICATEHk------BEGIN X509 CERTIFICATE----- +MIIC7DCCApagAwIBAgIJAKBIQJVDXWL5MA0GCSqGSIb3DQEBBAUAMIHHMQswCQYD +VQQGEwJVUzECIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCIRETIINCVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJTMBEGA2UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwsHU2VhdHRAVL-------ENsDZ \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3e8fb20054047c20a0161d1b67f4ff374e969e1d b/fuzz/gnutls_set_trust_file_fuzzer.in/3e8fb20054047c20a0161d1b67f4ff374e969e1d new file mode 100644 index 0000000000..af6a54cbee --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/3e8fb20054047c20a0161d1b67f4ff374e969e1d @@ -0,0 +1 @@ +C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEVCITRIINvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--------BEGIN X509 CRL-----MIIAQTAk--!-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3f3ef881d24e63345544802c56bda68e73a55370 b/fuzz/gnutls_set_trust_file_fuzzer.in/3f3ef881d24e63345544802c56bda68e73a55370 new file mode 100644 index 0000000000..f6dc1283d0 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/3f3ef881d24e63345544802c56bda68e73a55370 @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNv +bnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDn2MzAxODUyMTdaFw0xMzExMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END C-----BEGIN CERTIFICATE4 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3fa9d7cc7f5a5b651e17d9963dc339b1edace98b b/fuzz/gnutls_set_trust_file_fuzzer.in/3fa9d7cc7f5a5b651e17d9963dc339b1edace98b new file mode 100644 index 0000000000..4fb7f403d2 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/3fa9d7cc7f5a5b651e17d9963dc339b1edace98b differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/3fb1626723a427f833711e5c9dc68a76198e8125 b/fuzz/gnutls_set_trust_file_fuzzer.in/3fb1626723a427f833711e5c9dc68a76198e8125 new file mode 100644 index 0000000000..fce390276f Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/3fb1626723a427f833711e5c9dc68a76198e8125 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/401c0e4f0808815a241285186f30420c7e0e04ce b/fuzz/gnutls_set_trust_file_fuzzer.in/401c0e4f0808815a241285186f30420c7e0e04ce new file mode 100644 index 0000000000..8d92d5a273 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/401c0e4f0808815a241285186f30420c7e0e04ce differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/403dd96f73cb16559aebc87fbd0712e508901ab1 b/fuzz/gnutls_set_trust_file_fuzzer.in/403dd96f73cb16559aebc87fbd0712e508901ab1 new file mode 100644 index 0000000000..815eae937e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/403dd96f73cb16559aebc87fbd0712e508901ab1 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----M-----BEGIN CERTIFICATE-----R-----BEGIN X509 CERTIFICATEg'-----R-------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/41484a1ecd9314f1b44c549ce6cd1872a9cfd7ab b/fuzz/gnutls_set_trust_file_fuzzer.in/41484a1ecd9314f1b44c549ce6cd1872a9cfd7ab new file mode 100644 index 0000000000..5860cf7c6e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/41484a1ecd9314f1b44c549ce6cd1872a9cfd7ab @@ -0,0 +1,20 @@ +H/BAQDAgUgMA0GCSTIFICATE--ATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN-----BEGIN X509 CRL-BERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--ATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGITEbB-----BEGIN X509 CERTIFICATEE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3hhdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAMoCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DWEJARYQaW5mb0B3b2xmc3NsLmNvbKcJ +AOdypp5THRdcMAwGA1UdEwQFMAMCAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQol/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-T4RbE/ +-----END CANobm9sb2dpAGIEB \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/41b7d90e43593238bc928b9502caccd60704465c b/fuzz/gnutls_set_trust_file_fuzzer.in/41b7d90e43593238bc928b9502caccd60704465c new file mode 100644 index 0000000000..acb34befbe Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/41b7d90e43593238bc928b9502caccd60704465c differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4286fbc427f138b12ed33d726a223c0357c7efa3 b/fuzz/gnutls_set_trust_file_fuzzer.in/4286fbc427f138b12ed33d726a223c0357c7efa3 new file mode 100644 index 0000000000..34efd8fbad Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/4286fbc427f138b12ed33d726a223c0357c7efa3 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4332d7742a0f3890ec295c932623c8f6c045dd9c b/fuzz/gnutls_set_trust_file_fuzzer.in/4332d7742a0f3890ec295c932623c8f6c045dd9c new file mode 100644 index 0000000000..546ab3c184 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4332d7742a0f3890ec295c932623c8f6c045dd9c @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCIERNTCIIVvTFAVvvvvAvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCCMVvTJAVvvvBAvAMGTVvTJAND -----BEGIN CERTIFICATE-----BEGIN X509 CRL-----BEGIN X509 CERTIFICATE-----MAI------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4577651f8f2d95c5ac3c8622e647dfddbec117d2 b/fuzz/gnutls_set_trust_file_fuzzer.in/4577651f8f2d95c5ac3c8622e647dfddbec117d2 new file mode 100644 index 0000000000..9585d50c81 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4577651f8f2d95c5ac3c8622e647dfddbec117d2 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIE9DCCA9ygAwIBAgIRAITKtn6Z0+6CddlGsL4WY90wDQYJKoZIhvcNAQEFBQAwNjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5BIFNTTCBDQTAeFw0xMTExMDIwMDAwMDBaFw0xNDExMDEyMzU5NTlaMIGEMQswCQYDVQQGEwJESzEKMAgGA1UECB4BLjEKMAgGA1UEBxMBLjEjMCEGA1UEChMad3d3LmZvcmJlcmVkZWxzZXNza29sZW4uZGsxEzARBgNVBAsTClVkZGFubmVsc2UxIzAhBgNVBAMTGnd3dy5mb3JiZXJlZGVsc2Vzc2tvbGVuLmRrMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwya8irGVWPgg1aNL3gjvofIGpMgbLdEJ+sF8r2u3b6Rix2dI0bCAhc1cIVG/oYMu2gDhlhqHnp+ncN5RbFl8pYVShAqrb2x02W0HYP8XKg9ywtyr8eb50TfkbcddyivIjKX4B00aOa0PNFXTl6D7l/a5VuqDV2+ygPM1Bwef+Ozo+0S4hpghHQReGySUbRUahEE0dUnzy2lXghG+m7c3UZopJYjv6lTTvKsh6BDX03FrK7tULRHlx0t/UTGGMD4qGXMRJVVnbP1ZcJxr337UWKZpl7PODUZ9ZL/7OznRkp3jf82uuKJOH47VIahD+Ct/URclRkA38DKMvyI3lp5CQIDAQABo4IBrDCCAagwHwYDVR0jBBgwFoAUDL2TaAzz3qujSWsrN1dH6pDjue0wHQYDVR0OBBYEFDcL1kOcIwkE+BQwEDc/rHauF7/DMA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAYBgNVHSAEETAPMA0GCysGAQQBsjEBAgIdMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwudGNzLnSlcmVuYS5vcmcvVEVSRU5BU1NMQ0EuY3JsMG0GCCsGAQUFBwEBBGEwXzA1BggrBgEFBQcwAoYpaHR0cDovL2NydC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcnQwJgYIKwYBBQUHMAGGGmh0dHA6Ly9vY3NwLnRjcy50ZXJlbmEub3JnMGQGA1UdEQRdMFuCGnd3dy5mb3JiZXJlZGVsc2Vzc2tvbGVuLmRrghZmb3JiZXJlZGVsc2Vzc2tvbGVuLmRrgiV3d3cuZm9yYmVyZWRlbHNlc3Nrb2xlbi5za29sZWludHJhLmRrMA0GCSqGSIb3DQEBBQUAA4IBAQCTpB3RBMwAOmYPEwGZiWsryXyH3MT6O8yy5RE8NpLhtLNGQjw265/8z4d+fTbtLcnaj/J4mY510CIsvVGU+TOxldH5sD57IOMZY39dCWUxUv6j3+0qsTlygMTosjRM7aWXhNYaTyq53fyHzCgDp5dm8Laegd/+vmIncUyRoZRPWHcwD3YP08pXpTTu25+iKdhRu0nN+0fNzfeIaE4h7mpCBG0z81infrhPXfrQ9pm3PUrAcO9tUB9KfxfpcsyjpRdFu0yw8Tdr/ZZ+3JOKwkKxZgy6yyDtMhgV0WBakWKf7lMb/HswoEJSAhhlyc3teytJ5DoFuOuagG8y5tsHQro1 +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/45c99e9c25d7822699485d62af11038c57c364a0 b/fuzz/gnutls_set_trust_file_fuzzer.in/45c99e9c25d7822699485d62af11038c57c364a0 new file mode 100644 index 0000000000..5b12ceedb3 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/45c99e9c25d7822699485d62af11038c57c364a0 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/46676ba2d6a4a2df1bcfc27c37d5dc834f95a074 b/fuzz/gnutls_set_trust_file_fuzzer.in/46676ba2d6a4a2df1bcfc27c37d5dc834f95a074 new file mode 100644 index 0000000000..826830e4a2 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/46676ba2d6a4a2df1bcfc27c37d5dc834f95a074 @@ -0,0 +1 @@ +CJ-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw16MzA5DTE1MTEiwATkMBEGCIIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw16MzA5DTE1MTEiwATkMBEGCIIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END , \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/474d2a678c626ba176d95af6227b4af368fed6f4 b/fuzz/gnutls_set_trust_file_fuzzer.in/474d2a678c626ba176d95af6227b4af368fed6f4 new file mode 100644 index 0000000000..ad2b98278c Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/474d2a678c626ba176d95af6227b4af368fed6f4 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/47f20d3cb5b6023596f4f86b82d238668b1b8634 b/fuzz/gnutls_set_trust_file_fuzzer.in/47f20d3cb5b6023596f4f86b82d238668b1b8634 new file mode 100644 index 0000000000..f142805fde Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/47f20d3cb5b6023596f4f86b82d238668b1b8634 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4815653e267f0ee0a8a298b9875112e5d41b0e24 b/fuzz/gnutls_set_trust_file_fuzzer.in/4815653e267f0ee0a8a298b9875112e5d41b0e24 new file mode 100644 index 0000000000..8430a80c8e Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/4815653e267f0ee0a8a298b9875112e5d41b0e24 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/481dd77744aed55874aabb96a7f46746a973b9c2 b/fuzz/gnutls_set_trust_file_fuzzer.in/481dd77744aed55874aabb96a7f46746a973b9c2 new file mode 100644 index 0000000000..bda5cdf2af --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/481dd77744aed55874aabb96a7f46746a973b9c2 @@ -0,0 +1,3 @@ +-C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL- + +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL-----END A--- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/48689d86e7d92f14dc58bbe6b336ed053a4cb1d5 b/fuzz/gnutls_set_trust_file_fuzzer.in/48689d86e7d92f14dc58bbe6b336ed053a4cb1d5 new file mode 100644 index 0000000000..7e9576eeb1 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/48689d86e7d92f14dc58bbe6b336ed053a4cb1d5 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE09 CER-----BEGIN X 509 CRLTIFICATE-----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/489887b3d98e63de435a9404092adc3c6052d696 b/fuzz/gnutls_set_trust_file_fuzzer.in/489887b3d98e63de435a9404092adc3c6052d696 new file mode 100644 index 0000000000..e76a58695f Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/489887b3d98e63de435a9404092adc3c6052d696 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4b299369e99cbb349da185e92ec97630f6e9a46b b/fuzz/gnutls_set_trust_file_fuzzer.in/4b299369e99cbb349da185e92ec97630f6e9a46b new file mode 100644 index 0000000000..ee2d23d436 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4b299369e99cbb349da185e92ec97630f6e9a46b @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----BEGIN CERTIFICATE diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4b36edd9f329a3e5e87b12c0c02ae2b039e47a22 b/fuzz/gnutls_set_trust_file_fuzzer.in/4b36edd9f329a3e5e87b12c0c02ae2b039e47a22 new file mode 100644 index 0000000000..6c4117da11 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/4b36edd9f329a3e5e87b12c0c02ae2b039e47a22 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4b470f410d953f33bf36578d6d4215252d8ae8db b/fuzz/gnutls_set_trust_file_fuzzer.in/4b470f410d953f33bf36578d6d4215252d8ae8db new file mode 100644 index 0000000000..ad618a3ac3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4b470f410d953f33bf36578d6d4215252d8ae8db @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNBVAYTAlVTMREwDwYDVQQGEwhOZXcgWW9yazEVMBMGA2UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQEQLwtBUkFNSVMgSU5DLjERMA8GA1UECB4ITkVXAFlPUksxGDAWBgNVBAQMDyoubGFic4VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4DAbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4c680d825549446fb6af5ddfd93c0ef60ac7b5f8 b/fuzz/gnutls_set_trust_file_fuzzer.in/4c680d825549446fb6af5ddfd93c0ef60ac7b5f8 new file mode 100644 index 0000000000..3de0a2bf77 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4c680d825549446fb6af5ddfd93c0ef60ac7b5f8 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIFijCCBHKgAwIBAgIETCCCTjANBgkqhkiG9w0BAQUFADCBsTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9ycGEgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDkgRW50cnVzdCwgSW5jLjEuMCwGA1UEAxMlRW50cnVzdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEwxRTAeFw0xMjA1MjExMzU4MzJaFw0xNDA1MjYyMzMzNDdaMIHVMQswCQYDVQQGEwJVUzEOMAwGA1UECBMFVGV4YXMxEDAOBgNVBAcTB0hvdXN0b24xEzARBgsrBgEEAYI3PAIBAxMCVVMxFjAUBgsrBgEEAYI3PAIBAhMFVGV4YXMxIDAeBgNVBAoTF0NlbnRlclBvaW50IEVuZXJneSBJbmMuMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXphdGlvbjE2MBAGA1UEBRMJODAwMDA3NDYyMCIGA1UEAx4baXRzMDEuY2VudGVycG9pbnRlbmVyZ3kuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/+3i9eFkaHKJu6M0U5aB5BThvJNV6S2SjU6FBHNTebGdmb9o43RJl9vo6aqviFdCTexKoFLV8MVfRR/bWb9/JWeW4EBhMERde2xcww3ciD6+KkgGGHebqGMTlE4e7eCT1DlYysOKOA1Ek5X1vR1MCAAKz1dv6y7ZghLZj9e7QmiB3RVsOqJ6CCmiv4AI76eXqioWCpUnMX1+/oUXlMaZ7Xqhp5CzSjDD7qWge+hiPSDCiBD0aO/rUPaJCF5DSsqBpcTy5QP5WUYnn1CF0fvxk8/9QTP9MH3FtwRJLAsrJiGrt+KPiDSQdR3lqvJu63NuzN7Cmd77wnjcVV71+ZHNMQIDAQABo4IBgjCCAX4wCwYDVR0PBAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBlBggrBgEFBQcBAQRZMFcwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDAGCCsGAQUFBzAChiRodHRwOi8vYWlhLmVudHJ1c3QubmV0L2wxZS1jaGFpbi5jZXIwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9sZXZlbDFlLmNybDBBBgNVHSAEOjA4MDYGCmCGSAGG+mwKAQIwKDAmBggrBgEFBQcCARYaaHR0cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwJgYDVR0RBB8wHYIbaXRzMDEuY2VudGVycG9pbnRlbmVyZ3kuY29tMB8GA1UdIwQYMBaAFFtBirLEQ8G9v8hUQVWd4Jat/7mhMB0GA1UdDgQWBBR7LZSC+3O8vaYyO2rS3NRq45l+LjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBBQUAA4IBAQBAw6/+AyIrN6CFs12HvLKlY/pOMnXk17pB+i4Ce3sNbyixvftXKjm0RtE1WfO2HyP8ZspSGmrR70RxeJ13Rx0Rs3eTob7WqT+a2xtg2M4f9IYimfyApbgWqwb1pTEAbAVM8v+u9MMjVt9gwGlY2u9IiVHAcL4A/zLLBcMlgPnQnnrZAPtnuThu1LcOuuQcw0iWl6gpD4jLl7RnzZ3EjOcyogWE1k3A9a2x4sNxevh9dHtMQ7gU4mISyy1WkMzZEBqwSeJ8AdgBhqgOIqkJCUXA33e2kPAgf6wHgFfF9MDcOM8I3lVjPgy80ooBvREEIKWkPsPm61r4YY8GkL5yzwG0 +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4c772147a5106a8b5ce112e23634b90c84e06728 b/fuzz/gnutls_set_trust_file_fuzzer.in/4c772147a5106a8b5ce112e23634b90c84e06728 new file mode 100644 index 0000000000..33dd46ddb0 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/4c772147a5106a8b5ce112e23634b90c84e06728 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4dbba15deb541ecb32bbcfa52be36970f7e554da b/fuzz/gnutls_set_trust_file_fuzzer.in/4dbba15deb541ecb32bbcfa52be36970f7e554da new file mode 100644 index 0000000000..0e3cb796d3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4dbba15deb541ecb32bbcfa52be36970f7e554da @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UECh4MBXN0G9w0BGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4dce8191b6cfa9634a3419ca92ebb75b365aa7c2 b/fuzz/gnutls_set_trust_file_fuzzer.in/4dce8191b6cfa9634a3419ca92ebb75b365aa7c2 new file mode 100644 index 0000000000..89fae67201 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/4dce8191b6cfa9634a3419ca92ebb75b365aa7c2 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4ddd983c12396a525b703319f6f7d11fda0533ce b/fuzz/gnutls_set_trust_file_fuzzer.in/4ddd983c12396a525b703319f6f7d11fda0533ce new file mode 100644 index 0000000000..59f0118739 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4ddd983c12396a525b703319f6f7d11fda0533ce @@ -0,0 +1,15 @@ +V@kUbGM/W4d +-----BEGIN CERTIFICATE----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b245 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNv +bnN1bHRpbmcuY30tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0s +MDA2MzAxODUyMTdaFw1xMzdzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPjLp48d35VQ29I1QjQe0d0XqnaQzNp3L +4HRYEcUBe00= +-----END CVvx---bBG \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4de1ed33640f7a0268826e59fcbeb7a0bdb32553 b/fuzz/gnutls_set_trust_file_fuzzer.in/4de1ed33640f7a0268826e59fcbeb7a0bdb32553 new file mode 100644 index 0000000000..51ef8fe689 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4de1ed33640f7a0268826e59fcbeb7a0bdb32553 @@ -0,0 +1,7 @@ +BEGIN X509 CERTIFIC;1.29.4.6-----BEGIN CERTIFICATE----DGBEIRNTCIIIAef57dc-----BECC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVTvJJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----vQTMGTVvTJAVL--AV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----vQTMGTVvTJAVL-----BIMVvTJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END LN XDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cIDFzCCAf+gAwIBAgIQULLJCQBVaQH-BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVTvJJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----vQTMGTVvTJ AVL--AV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----vQTMGTVvTJAVL-----BIMVvTJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END LN XDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cIDFzCCAf+gAwIBAgIQULLJCQBVaQH-BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVTvJJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----vQTMGTVvTJ AVL--AV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----vQTMGTVvTJAVL-----BIMVvTJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END LN XDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cwYD +VQQLDARGYXN0wwCAY4444MRgwFgYDVQQDDA93d3cud29sZnNzbC5j444Vb20xH-BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVTvJJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----vQTMGTVvTJ AVL--AV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----vQTMGTVvTJAVL-----BIMVvTJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END LN XDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cwYD +VQQLDARGYXN0wwCAY4444MRgwFgYDVQQDDA93d3cud29sZnNzbC5j444Vb20xHzAdBgkq88hkiaVd038G9w \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4e056850ba65b2787cd001678060f60990cbf745 b/fuzz/gnutls_set_trust_file_fuzzer.in/4e056850ba65b2787cd001678060f60990cbf745 new file mode 100644 index 0000000000..a471ab694d --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4e056850ba65b2787cd001678060f60990cbf745 @@ -0,0 +1 @@ +CCXN X509A-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMB9 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4e751e745a5b050ff0cc16c611d223d8e99db99c b/fuzz/gnutls_set_trust_file_fuzzer.in/4e751e745a5b050ff0cc16c611d223d8e99db99c new file mode 100644 index 0000000000..b09dccf094 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4e751e745a5b050ff0cc16c611d223d8e99db99c @@ -0,0 +1,23 @@ +ICATE4444V88aVd038-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICAD-----BEGI-----BEGIN CERTIFICATEIDEY444-----BEGIN CERTIFICATE4444V88aVd038-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATERTIFICATE----- +MI-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEHk-------BEGIN CERTIFICATE----BEGIN X509 CERTIFICATE----- +MIIC7DCCApagAwIBAgIJAKBIQJVDXWL5MA0GCSqGSIb3DQEBBAUAMIHHMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEm +MCQGA1DECgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsM +C0VuZ2luZWTyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1i +aW5nLmJpejEoMCYGCSqGSIb3DQEJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJp +ejAeFw0xNDAzMTMxNjUyMzRaFw0xNjEyMDcxNjUyMzRaMIHHMQswCQYDVQQGEwJV +UzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEmMCQGA1UE +CgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsMC0VuZ2lu +ZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1iaW5nLmJp +ejEoMCYGCSqGSIb3DQDJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJpejBcMA0G +CSqGSIb3DQEBAQUAA0sAMEgCQQTicEBO1u+ysy7iakUAewKMYPKwzY6Oaq+FUopr +SIjgrX8JIV5gnnvT0HrV/Ju2t4sBy41rZc50cqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LBLWrQZjw5usbSedJdAzAfBgNVHSMEGDAWgBQYkZqEi8LD +LWrQZjw5usbSedJdAzAPBgNVHrMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIF4DAN +BgkqhkiG9w0BAQQFAANBAEU0nmhsV0h59xJIHESZPqGj8LYEoSnyZ8/vs+KBJmhm +A8XaCALu1m2CWCrW5wjqSGbbqQfy9vFqsnNX+Qt9KiU= +-----END CERT8778M-ManbG9iYWxzaWduEHk------BEG5Oi3GjiUKZFBEJv4EXr4 CR*S2Omrg1uRVI8NGPvbr7IlvZqLQYDVR0fBIN CERTIFICATE4444V44-----BEGIN CERTIFICATEIDEY445-----BEGIN CERTIFICATE4444V88aVd038-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEHk------BEGIN X509 CERTber: 17b-----BEGIN CERTIFICATE----- +MI8DaExJMe2nS-----BEGIN CERTIFICATE---- +-M-----BE-----BEGIN X509 CERTIFICATEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1BWNhUZaSobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzF1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMIPkVXAFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VphDzyxmI8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTI X509 CRL-----MIE///;-----BEGIN X509 CRLE-----MAwD0+CF21CG9HcKX2dRUcZ8RB1w7JWC4Y71CE2nE6+GbsIuhk/tpdAaYe/xd8B4M \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4ea00742e1f65921e742372dfa148f381829c757 b/fuzz/gnutls_set_trust_file_fuzzer.in/4ea00742e1f65921e742372dfa148f381829c757 new file mode 100644 index 0000000000..f8aa44d7d8 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4ea00742e1f65921e742372dfa148f381829c757 @@ -0,0 +1,4 @@ +b-:3d +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATEY14sdG-Y14sdG-----BEGIN CERTIFICATEZ---------BEGIN CERTIFICATE-----BEGIN CERTIFICATEY4sdG-----BEGIN CERTIFICATEZ-----BEGIN CERTIFICATEW1MR: b:0:-----BEGIN X509 CERTIFICATEEGINI----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA2UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBQZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUfQ1EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBASKAlVTMREwDwYDVQQHEwhcXOZgWW9yazEVMBMGA1UECh4MBXZMNF10AREGZGVyMRQwEgYDVQALEwtBUkFNSVMgSU5DLjERMA8GA1UECBMIKkVXIFlPUksxGDAWBgNVBAUMDyourGFic2VyaWVzLmNvbTCBnzANBgkqhkiG4w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ9HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre3wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaLduWm5ldC9Ba2FtYWmTdWIzLmNybDAdBgNVHQ8EFgQUza1YjgmEUrPJ+5nPIUmw1moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnPAH13shazhzDFdRPhQenNrbI4RTE/ +-----END - \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/4f6daaf64e1372357a752cf8ca2d5c308dadef26 b/fuzz/gnutls_set_trust_file_fuzzer.in/4f6daaf64e1372357a752cf8ca2d5c308dadef26 new file mode 100644 index 0000000000..084c31c9ed --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/4f6daaf64e1372357a752cf8ca2d5c308dadef26 @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVv5FAVwvvvQvTAAFw2xMzA0LTEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVv5FAVwvvvQvTAAFw2xMzA0LTEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVv5FAVwvvvQvTAAFw2xMzA0LTEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVv5FAVwvvvQvTAAFw2xMzA0LTEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVv5FAVwvvvQvTAAFw2xMzA0LTEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END Ct------BEG \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/50842292f6ff9db4086ee36a6c3ea7a789918157 b/fuzz/gnutls_set_trust_file_fuzzer.in/50842292f6ff9db4086ee36a6c3ea7a789918157 new file mode 100644 index 0000000000..1661dc2596 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/50842292f6ff9db4086ee36a6c3ea7a789918157 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE09 CER-----BEGIN X500 CRLTIFICATE -----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/50bf8647bd9055f428eb2c56dc3266b8b8ec4cb6 b/fuzz/gnutls_set_trust_file_fuzzer.in/50bf8647bd9055f428eb2c56dc3266b8b8ec4cb6 new file mode 100644 index 0000000000..6ca18997f4 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/50bf8647bd9055f428eb2c56dc3266b8b8ec4cb6 @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEAkMBEVvvvvQTAkMBEGCIRNBvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --L- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/513df7049b6632a368c9ff2a366bac8d6e57bffe b/fuzz/gnutls_set_trust_file_fuzzer.in/513df7049b6632a368c9ff2a366bac8d6e57bffe new file mode 100644 index 0000000000..024f789041 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/513df7049b6632a368c9ff2a366bac8d6e57bffe @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU6DLjERMA8GA1UECBMIPkVXIFlUPksxGDAWBgNVBAMUD9oubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LGmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm0ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5168f888f2a5cd0bfac020d73daab2202ad72e98 b/fuzz/gnutls_set_trust_file_fuzzer.in/5168f888f2a5cd0bfac020d73daab2202ad72e98 new file mode 100644 index 0000000000..da739167bc Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/5168f888f2a5cd0bfac020d73daab2202ad72e98 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/51f3ecd126cbdd9c2fac77367aac91c88b5ea9d6 b/fuzz/gnutls_set_trust_file_fuzzer.in/51f3ecd126cbdd9c2fac77367aac91c88b5ea9d6 new file mode 100644 index 0000000000..c3f218581e Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/51f3ecd126cbdd9c2fac77367aac91c88b5ea9d6 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/527dcb7e0ff56a6630d11d51f7cce35f322046dc b/fuzz/gnutls_set_trust_file_fuzzer.in/527dcb7e0ff56a6630d11d51f7cce35f322046dc new file mode 100644 index 0000000000..d79dd920b3 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/527dcb7e0ff56a6630d11d51f7cce35f322046dc differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5717a363787b48a36d96ba9ddcab1dde571850c7 b/fuzz/gnutls_set_trust_file_fuzzer.in/5717a363787b48a36d96ba9ddcab1dde571850c7 new file mode 100644 index 0000000000..4cddb3c057 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/5717a363787b48a36d96ba9ddcab1dde571850c7 @@ -0,0 +1,4 @@ +s-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOANACgAAAA7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xmzA1MTEyMzU5MDBaMHoxCzAJBgNVBIYTAlVTMREwDwYDTQQXEwhOZXcgWW9yazEVMBMGA0UEChMMRXN0ZWUgTGF2ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECbMITkVXIFlPUksxGDAWBgNVBMAUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6L0VxLYSkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLXyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk3ZJIcCAwEAAaNsMGowOQYDVR5fBDIwMDAuoEygKpYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUJrP+5nPUmIw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFFdRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE------ +MAIwCA \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/571cd049a4c7e502891ad0359758e10e273cf6d2 b/fuzz/gnutls_set_trust_file_fuzzer.in/571cd049a4c7e502891ad0359758e10e273cf6d2 new file mode 100644 index 0000000000..e0a9f1ec55 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/571cd049a4c7e502891ad0359758e10e273cf6d2 @@ -0,0 +1,17 @@ +Cer-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwKQ2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA0UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQDIAZPcmVnb24xDjAMBgNVBAceBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaP6cbt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiU +GIRFyr8jCBwgYDVR0SBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhICVVMxDzANBgNVBAgMBk9yZYdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsHBEZhc3QxGDAWBgNVBAdMD33 +Mdy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmcvsNN3LmbYEJpOyId +p4THRdcMAwGA1UdEwQFMMAABf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQon/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5768e3703dcfa90b352a0a54bf8f85ee4b003d3c b/fuzz/gnutls_set_trust_file_fuzzer.in/5768e3703dcfa90b352a0a54bf8f85ee4b003d3c new file mode 100644 index 0000000000..125126ae57 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/5768e3703dcfa90b352a0a54bf8f85ee4b003d3c differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/57ed9d7b9f10ed6f2f37a44ce367850ba4fe6c55 b/fuzz/gnutls_set_trust_file_fuzzer.in/57ed9d7b9f10ed6f2f37a44ce367850ba4fe6c55 new file mode 100644 index 0000000000..be9e3d88d4 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/57ed9d7b9f10ed6f2f37a44ce367850ba4fe6c55 @@ -0,0 +1 @@ +CCXN X509A-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BERNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMB9 CRL-----MIIAwwwugCTAkMBEGCEIRNTCGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGCCXN X509A-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGINTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMB9 CRL-----MIIAwwwugCTAkMBEGCEIRNTCGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END IN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/57f902cc89cf071439d7d20a3be5745e9c18194e b/fuzz/gnutls_set_trust_file_fuzzer.in/57f902cc89cf071439d7d20a3be5745e9c18194e new file mode 100644 index 0000000000..8ad20cdfa8 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/57f902cc89cf071439d7d20a3be5745e9c18194e differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5878dbe82702bb3ddc473e059d6650e091ac68f9 b/fuzz/gnutls_set_trust_file_fuzzer.in/5878dbe82702bb3ddc473e059d6650e091ac68f9 new file mode 100644 index 0000000000..aed0057f69 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/5878dbe82702bb3ddc473e059d6650e091ac68f9 @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvbw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyTUMxOADdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/58c40434119464c3b6b159bfe78d5d0113803942 b/fuzz/gnutls_set_trust_file_fuzzer.in/58c40434119464c3b6b159bfe78d5d0113803942 new file mode 100644 index 0000000000..d6bb78dce5 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/58c40434119464c3b6b159bfe78d5d0113803942 @@ -0,0 +1,4 @@ +s-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAACN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xmzA1MTEyMzU5MDBaMHoxCzAJBgNVBIYTAlVTMREwDwYDVQQHEwhcOXZgWW9yazEVMBMGA0UEChMMRXN0ZWUgTGF2ZGVyMRQwEgYDTQQLEwtBUkFNSVMgSU5DLjERMA8GA0UECbMITkVXIFlPUksxGDAWBgNVBMAUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6L0VxLYSkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7f3t0YtIro4eHdxOZek0SztRdLXyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk3ZJIcCAwEAAaNsMGowOQYDVR5fBDIwMDAuoEygKpYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUJrP+5nPUmIw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFFdRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE------ +MAIwCA \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/593e775bff4926608266cd470ad4efa539441c15 b/fuzz/gnutls_set_trust_file_fuzzer.in/593e775bff4926608266cd470ad4efa539441c15 new file mode 100644 index 0000000000..ca80294f0d Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/593e775bff4926608266cd470ad4efa539441c15 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/59a19331ff73aa3031f7b7bcc98e899ce7442387 b/fuzz/gnutls_set_trust_file_fuzzer.in/59a19331ff73aa3031f7b7bcc98e899ce7442387 new file mode 100644 index 0000000000..5babd54e67 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/59a19331ff73aa3031f7b7bcc98e899ce7442387 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/59b9be51c46418844ffc5832bff067a1c248d51b b/fuzz/gnutls_set_trust_file_fuzzer.in/59b9be51c46418844ffc5832bff067a1c248d51b new file mode 100644 index 0000000000..32b0ae5eaf --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/59b9be51c46418844ffc5832bff067a1c248d51b @@ -0,0 +1 @@ +------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5a02daadcbe6de4efc0fb910bfe44e6b9c227a2f b/fuzz/gnutls_set_trust_file_fuzzer.in/5a02daadcbe6de4efc0fb910bfe44e6b9c227a2f new file mode 100644 index 0000000000..94c836b116 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/5a02daadcbe6de4efc0fb910bfe44e6b9c227a2f differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5a8da935e275bf831b8c36a3bed3eee054833a11 b/fuzz/gnutls_set_trust_file_fuzzer.in/5a8da935e275bf831b8c36a3bed3eee054833a11 new file mode 100644 index 0000000000..68006bc655 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/5a8da935e275bf831b8c36a3bed3eee054833a11 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEghOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLMwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5a8dd0050c5344c99b171ae03b999d4ea40f25cd b/fuzz/gnutls_set_trust_file_fuzzer.in/5a8dd0050c5344c99b171ae03b999d4ea40f25cd new file mode 100644 index 0000000000..81ec4eb589 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/5a8dd0050c5344c99b171ae03b999d4ea40f25cd @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw0Azx2MLUEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw0Azx2MLUEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuASkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5a95d17af053e9b64a4e8c617751d86ba5541f45 b/fuzz/gnutls_set_trust_file_fuzzer.in/5a95d17af053e9b64a4e8c617751d86ba5541f45 new file mode 100644 index 0000000000..a94ab35d46 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/5a95d17af053e9b64a4e8c617751d86ba5541f45 @@ -0,0 +1,6 @@ +------BEGIN X509 CRLATE-----B-----BEGIN CERTIFICATE-----BEGIN------BEGIN CERTIFICATE-TTL-----B-----BEGIN CERTIFICATE--------BEGIN CERTIFICAE/---E/-------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--TL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE8TIFICATERTL-----B-----BEGIN CERTIFICATE-----BEGIN------BEGIN CERTIFICATE-TTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA5+FHkhkbOo+gNVBAMTDXd1dyX5Y5NzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5bda193ad8fc8d9c25a0f107872579b776b4daeb b/fuzz/gnutls_set_trust_file_fuzzer.in/5bda193ad8fc8d9c25a0f107872579b776b4daeb new file mode 100644 index 0000000000..d591462197 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/5bda193ad8fc8d9c25a0f107872579b776b4daeb @@ -0,0 +1,7 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5be869f225e6bc6d13e9a7f3ade6d797aeabdc71 b/fuzz/gnutls_set_trust_file_fuzzer.in/5be869f225e6bc6d13e9a7f3ade6d797aeabdc71 new file mode 100644 index 0000000000..7dd5e7659e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/5be869f225e6bc6d13e9a7f3ade6d797aeabdc71 @@ -0,0 +1 @@ +-----BEGIN X509 CERTIFICATE-----BEGI---BEGIN X509 CERTIFI-----END CATE diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5daf63ded09a197458241007382da5076d7a4378 b/fuzz/gnutls_set_trust_file_fuzzer.in/5daf63ded09a197458241007382da5076d7a4378 new file mode 100644 index 0000000000..5bfd226723 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/5daf63ded09a197458241007382da5076d7a4378 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5e3c379fd8b37e4f38610cc5aa77352c56bdc197 b/fuzz/gnutls_set_trust_file_fuzzer.in/5e3c379fd8b37e4f38610cc5aa77352c56bdc197 new file mode 100644 index 0000000000..82c512abfc --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/5e3c379fd8b37e4f38610cc5aa77352c56bdc197 @@ -0,0 +1,13 @@ +C-----BL-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bIRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw01 +MDA2MzAxODUyMTdaFw03MzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG0w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END C40:e \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/5e8fe64c656f337d774942aaabdc0c9f84f065f7 b/fuzz/gnutls_set_trust_file_fuzzer.in/5e8fe64c656f337d774942aaabdc0c9f84f065f7 new file mode 100644 index 0000000000..6c5ad9fd26 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/5e8fe64c656f337d774942aaabdc0c9f84f065f7 @@ -0,0 +1 @@ +------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwuATgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNUCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwuwCgwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/606beeaf8dcfad82c71d97ec62f3ce44a44c87db b/fuzz/gnutls_set_trust_file_fuzzer.in/606beeaf8dcfad82c71d97ec62f3ce44a44c87db new file mode 100644 index 0000000000..e41eda8382 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/606beeaf8dcfad82c71d97ec62f3ce44a44c87db @@ -0,0 +1,7 @@ +------BEGIN CERTIFICATE-Z*-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/60bfa5f0a0882df844c91165c54eacaf0db99578 b/fuzz/gnutls_set_trust_file_fuzzer.in/60bfa5f0a0882df844c91165c54eacaf0db99578 new file mode 100644 index 0000000000..70d27b98d3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/60bfa5f0a0882df844c91165c54eacaf0db99578 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0SBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6194a544e86e8c3b9497bfd717db0321b2ec7943 b/fuzz/gnutls_set_trust_file_fuzzer.in/6194a544e86e8c3b9497bfd717db0321b2ec7943 new file mode 100644 index 0000000000..e2837d83a2 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/6194a544e86e8c3b9497bfd717db0321b2ec7943 @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X510 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVL-----BEGIN X7900671627073978690677 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN XAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIARNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/61b3ea76e45509c70028d2d35ac302f9e9170604 b/fuzz/gnutls_set_trust_file_fuzzer.in/61b3ea76e45509c70028d2d35ac302f9e9170604 new file mode 100644 index 0000000000..211b69c480 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/61b3ea76e45509c70028d2d35ac302f9e9170604 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/630b14adef6233ba9045e1348e8c1c757f0061ef b/fuzz/gnutls_set_trust_file_fuzzer.in/630b14adef6233ba9045e1348e8c1c757f0061ef new file mode 100644 index 0000000000..6491828595 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/630b14adef6233ba9045e1348e8c1c757f0061ef @@ -0,0 +1,22 @@ +-~*---BEGIN CEZTIFICATEIDEY444-----BEGIN CERTIFICATE444-----BEGIN CERTIFICATEIEdgIQ-----BEGIN CERTIFICATED-----BEGIN CERTIFICATERTIIN CERTIFICATEIDEY444-----BEGIN CERTIFICATE444-----BEGIN CERTIFICATEIEdgIQ-----BEGIN CERTIFICATED-----BEGIN CERTIFICATEZctRAgMBAAGjYzAPBgNVHRMBAf8EB-----BEGIN CERTIFICATEIDEY444-----BEGIN CERTIFICATE444-----BEGIN CERTIFICATEIEdgIQ-----BEGIN CERTIFICATED---IFIC----- +MI-----BEGIN CERTIFICATEIEg@EIFICATED-----BEGIN CERTIFICATEZctRAgMBAAGjYzAPBgNVHRMBAf8EB-----BEGIN CERTIFICATEIDEY444-----BEGIN CERTIFICATE444-----BEGIN CERTIFICATEIEdgIQ-----BEGIN CERTIFICATED---(-BEGIN CERTIFICATIFIC-----BEGIN CERTIFICATEIEdgIQD-hAddJBgNVHRMBAf8EB-----BEGIN CERTIFICATEIDEY444-----BEGIN CERTIFICATE444-----BEGIN CERTIFICATEIEdgIQ-----BEGIN CERTIFICATED-----BEGIN CERTIFICATERTIFI-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEHk-----BEGIN CERTIFICATED-----BEGIN CERTIFICATEZctRAgMBAAGjYzAPBgNVHRMBAf8EB-----BEGIN CERTIFICATEIDEY444-----BEGIN CERTIFICATE444-----BEGIN CERTIFICATEIEdgIQ-----BEGIN CERTIFICATED---(-BEGIN F(C----- +MI-----BEGIN CEdgI-----BEGIN X509 CERTIFICATE----- +MIIC7DCCApagAwIBAgIJAKBIQJVDXWL5MA0GCSqGSIb3DQEBBAUAMIHHMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEm +MCQGA1UECgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsM +C0VuZ2luZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1i +aW5nLmJpejEoMCYGCSqGSIb3DQEJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJp +ejAeFw1xNDAzMTMxNjUyMzRaFw0xNjEyMDcxNjUyMzRaMIHHMQswCQYDVQQGDwJV +UzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBswHU2VhdHRsZTEmMCQGA1UE +CgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLSBMTEMxFDASBgNVBAsMC0VuZ2lu +ZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy0zb2Z0d2FyZXBsdW1iaW5nLmJp +ejEoMCYGCSqGSIb3DQEJARYZac9obkBzb2Z0d2FyZBsWiX1daW5nLmJpejBcMA0G +CSqGSIb3DQEBAQUAA0sAMEgCQQTicEBO1u+ysy7iakUAewKMYPKwzY6Oaq+FUopr +SIjgrX8JIV5gnnvT0HrV/Ju2t4sBy41rZc50cqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LBLWrQZjw5usbSedJdAzAfBgNVHSMEGDAWgBQYkZqEi8LD +LWrQZjw5usbSedJdAzAPBgNVHRMBAf8EBTDAAQH/MA4GA1UdEwEB/wQEAwIF4DAN +BgkqhkiG9w0BAQQFAANBAEU0nmhsV0h59xJIHESZPqGj8LYEoSnyZ8/vs+KBJmhm +AACaLX8u1m2CWCrW5wjqSGbbqQfy9vFqsnNX+Qt9KiU= +-----END IHHMQswCQYDVQQGDwJV +UzETMBVuZ2lu +ZWVyaW5nMSkwJwYDVQQDDetB2hqeFE9TIFICATE- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/63403e04ef0ed4d23ff23e751ce8369f94934f4c b/fuzz/gnutls_set_trust_file_fuzzer.in/63403e04ef0ed4d23ff23e751ce8369f94934f4c new file mode 100644 index 0000000000..f43a7e2ff9 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/63403e04ef0ed4d23ff23e751ce8369f94934f4c @@ -0,0 +1 @@ +C--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRQTCIMVvTJAVvvvBAvAMGTVvTJAVL-JAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END )-----BEGIN X509 CRL--------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATERLC----- I- X-----END AMIFICA-----BEGIN \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/63ad352786bd98c74798e25cb6cfa5c462e32504 b/fuzz/gnutls_set_trust_file_fuzzer.in/63ad352786bd98c74798e25cb6cfa5c462e32504 new file mode 100644 index 0000000000..dfec6f4002 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/63ad352786bd98c74798e25cb6cfa5c462e32504 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0EyADMz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw08MzAT5DEiTuwAwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJ7VL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/63c074ec24d7524d9b3eab1fd2a582c238957569 b/fuzz/gnutls_set_trust_file_fuzzer.in/63c074ec24d7524d9b3eab1fd2a582c238957569 new file mode 100644 index 0000000000..2e1e494fe7 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/63c074ec24d7524d9b3eab1fd2a582c238957569 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/64e552f86964a9ab40124970bf594947d575142a b/fuzz/gnutls_set_trust_file_fuzzer.in/64e552f86964a9ab40124970bf594947d575142a new file mode 100644 index 0000000000..8724ead4cb --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/64e552f86964a9ab40124970bf594947d575142a @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-------BEGIN X509 CRL-----BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTRFICATE-----BEGIN X509 CERTIFICATE -----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +---R--------END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6511b7e23cc3448ff9698b92df84027b25d7b0bc b/fuzz/gnutls_set_trust_file_fuzzer.in/6511b7e23cc3448ff9698b92df84027b25d7b0bc new file mode 100644 index 0000000000..7199ae7206 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/6511b7e23cc3448ff9698b92df84027b25d7b0bc @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyouBGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/65a079dc971af7678336e07cfbba783eed85ea36 b/fuzz/gnutls_set_trust_file_fuzzer.in/65a079dc971af7678336e07cfbba783eed85ea36 new file mode 100644 index 0000000000..9f80436fa3 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/65a079dc971af7678336e07cfbba783eed85ea36 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/65b22798a3815a32fa6fc0402339dd0e36facc7d b/fuzz/gnutls_set_trust_file_fuzzer.in/65b22798a3815a32fa6fc0402339dd0e36facc7d new file mode 100644 index 0000000000..1edf2a6e9e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/65b22798a3815a32fa6fc0402339dd0e36facc7d @@ -0,0 +1,3 @@ +s-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAACN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xmzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhcOWZXgW9yazEVMBMGA1UEChMMXN0UZRgWTGF2ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVUXPlIFksxGDAWBgNVBMAUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6L0VxLYSkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLXyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk3ZJIcCAwEAAaNsMGowOQYDVR5fBDIwMDAuoEygKpYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUJrP+5nPUmIw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFFdRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CTE-----BMGIN CERTIFICATE-----BEGIN X50 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6609e19edea66818a5c8d713d2a8977c232b5fe9 b/fuzz/gnutls_set_trust_file_fuzzer.in/6609e19edea66818a5c8d713d2a8977c232b5fe9 new file mode 100644 index 0000000000..04fd67d8df --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/6609e19edea66818a5c8d713d2a8977c232b5fe9 @@ -0,0 +1,12 @@ +C-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +ODA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END 4 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/665ac26118b3f4d42e267642bd4e0440a52f36f2 b/fuzz/gnutls_set_trust_file_fuzzer.in/665ac26118b3f4d42e267642bd4e0440a52f36f2 new file mode 100644 index 0000000000..e369eff691 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/665ac26118b3f4d42e267642bd4e0440a52f36f2 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE-----MIIAFzAAMBEGCEIRNIvCuIvTFAVvvvvTIAPE-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/66e210bf1932bcf7f7a7c46b5f068fa9c03c61f2 b/fuzz/gnutls_set_trust_file_fuzzer.in/66e210bf1932bcf7f7a7c46b5f068fa9c03c61f2 new file mode 100644 index 0000000000..832d3239fb Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/66e210bf1932bcf7f7a7c46b5f068fa9c03c61f2 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/67c2a6b84efe6527afa26105fa8a22ba2f8af99b b/fuzz/gnutls_set_trust_file_fuzzer.in/67c2a6b84efe6527afa26105fa8a22ba2f8af99b new file mode 100644 index 0000000000..84aa71bcb8 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/67c2a6b84efe6527afa26105fa8a22ba2f8af99b @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --X509L- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/67d220be126eaae068b88bb12e067a11bf68584a b/fuzz/gnutls_set_trust_file_fuzzer.in/67d220be126eaae068b88bb12e067a11bf68584a new file mode 100644 index 0000000000..cace37a623 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/67d220be126eaae068b88bb12e067a11bf68584a differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/682dd6240c9376c2154e377be9c6608dbeb6a40e b/fuzz/gnutls_set_trust_file_fuzzer.in/682dd6240c9376c2154e377be9c6608dbeb6a40e new file mode 100644 index 0000000000..d52591e7f1 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/682dd6240c9376c2154e377be9c6608dbeb6a40e @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/68419140112cf0dd1dc334fa85ed22e1feae53eb b/fuzz/gnutls_set_trust_file_fuzzer.in/68419140112cf0dd1dc334fa85ed22e1feae53eb new file mode 100644 index 0000000000..13af0239ad --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/68419140112cf0dd1dc334fa85ed22e1feae53eb @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVE-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEIIvuwwwwwwwugCTAAMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/689eeca9c6a3d203fff50ef2838954a4168c78c5 b/fuzz/gnutls_set_trust_file_fuzzer.in/689eeca9c6a3d203fff50ef2838954a4168c78c5 new file mode 100644 index 0000000000..256441d0b3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/689eeca9c6a3d203fff50ef2838954a4168c78c5 @@ -0,0 +1,3 @@ +g65fFi-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIQL1SwxCQ+cBR7oSy1AMGE2jANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMVGhhd3RlLCBJbmMuMRYwFAYDVQQDEw1UaGF3dGUgU1NMIENBMB4YDTEyMDYxNDAwMDAwMFoXDTEzMDYyMjIzNTk1OVowcTELMAkGA0UEBhMCQ1oxDzANBgNVBAgeBlByYWd1ZTEPMA0GA1UEBxQGUHJhZ3VlMSQwIgYDVQQKFBtVbmllbnQgQ14tbXVuaWNhdGlvbnMsIgEucy4xGjAYBgNVBAMUEXBvcnRhbC52aXBob25lLmN6MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCRHmLnhIK/gJfPxPjbejpLCY0cAMVNl7LhW87bLwsKDEczTcFiu7NxaTeZLX2nYOnDWOQkISott8CR70qr74v+AcX0pW47SL9pt9fdU95bDLSgfykja7t9bwVU3VcgbQt0tR3Bm8D0sZuGmPeDmqH6EC2pi6KoMEcW31m/4IVHQIDAQABo4GgMIGdMAwGA1UdEgEB/wQCMAAwOgYDVR0fBDMwMTAvnMTAvoCpaHR0cDovL3N2ci1vdi1jcmwudGhhd3RlLmNvbS9UaGF3dGVPVi5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMJMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAYYWaHR0cDovL29jc3AudGhhd3RlLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAUhYOVI5Y0Hs5VVyH2Cva213c4a3c98fdd98d670f134fadd1b2340b5aa31KVgLEaWiRvX3WoPqzwz19iRXLpW23y4h2dN0B1AXWCxmC9HzYQebzojDkw1PIocj4clYVJ3l16Dh0r/JzzRtP4+msKGaDYD/E1f5lytvuX7uuchnGZ+DU5OnjBY/rnPR5jiq6repy+JiXZg24SrD0+CF21CG9HcKX2dRUcZ8RB1wXv7f+66WhlU10TNY2ICg7/CARDjLwv/RBp6tc/ObfaCb6IljON4UhEVS1wu/dJDsuuw7lAIudWuGL0gvVR/d6j16t4doAy2iDiXXyFre3/Gk0tQ== +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/68b07b111c5d90addd36f8cf9f421f3bbe861e35 b/fuzz/gnutls_set_trust_file_fuzzer.in/68b07b111c5d90addd36f8cf9f421f3bbe861e35 new file mode 100644 index 0000000000..19cebb0388 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/68b07b111c5d90addd36f8cf9f421f3bbe861e35 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MSA1DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/694968c65188a1a917327ef220c747383fc48bff b/fuzz/gnutls_set_trust_file_fuzzer.in/694968c65188a1a917327ef220c747383fc48bff new file mode 100644 index 0000000000..1fe6177367 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/694968c65188a1a917327ef220c747383fc48bff @@ -0,0 +1,19 @@ +-universalS----BEGIN CERTIFICATE-----END ------BEGIN CERTIFICATEb-----BEGIN X509 CERTIFICATEFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q3xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVvb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CRSVEGluZm9Ad29CZzsnbN5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam3 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0jBIG6MIG3gBTr1EtZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYIJ +AOdypp4THRdcMAwGA1UdEwQFMEMABf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pOOGPol/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/697ff1281a7567d04717e754b37967711cedc74d b/fuzz/gnutls_set_trust_file_fuzzer.in/697ff1281a7567d04717e754b37967711cedc74d new file mode 100644 index 0000000000..020abb7832 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/697ff1281a7567d04717e754b37967711cedc74d @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIGrTCCBZWgAwIBAgIUEMLJqMq3SxAebeCpQdLfRPb3Y9MwDQYJKoZIhvcNAQEFBQAwgbAxCzAJBgNVBAYTAkVTMQ8wDQYDVQQIEwZNQURSSUQxDzANBgNVBAcTBk1BRFJJRDEkMCIGA1UEChMbaXBzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRgwFgYDVQQLEw9DZXJ0aWZpY2FjaW9uZXMxGTAXBgNVBAMTEGlwc0NBIExldmVsIDEgQ0ExJDAiBgkqhkiG9w0BCQEWFWlwc2NhbGV2ZWwxQGlwc2NhLmNvbTAeFw0xMDA1MDcwNzM2MjZaFw0xMzA1MTIwNzM2MjZaMH4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTERMA8GA1UEBxMITGEgSm9sbGExDTALBgNVBAoeBFVDU0QxHzAdBgNVBAsTFlN0dWRlbnQgSGVhbHRoIFNlcnZpY2UxHzAdBgNVBAMTFnN0dWRlbnRoZWFsdGgudWNzZC5lZHUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCyZdO76fPhlvFwJuml3qc9aoWwCpE6saH8jBzzH9tfK6pxKSQjSMaFp7OfGrSl7aXdmaRCA45nA81HFGoNpabASELusy4Na1tDiCs4RI/vFjleLkWWb8IHGurcDkF7HIgoyqq4v3FPpCq+H3hf2E8bVWG2lz5Zd+HLAhhR9+g+/nW1o8RgPji2aO7YG6UOvbvvhzXwZbBvUT+fatp7Y9uVnXMfnG/enEt729qrICjfIzwCHHhaUxotOvlprhLUltjimLBxfYA9cgETAYi3RCvrKtufRzNF8ot4Oz/6a1YLnGmbJeU3PyX5V4s1rTkXFrAltEgURpZHlrc1Q0IzVkJxAgMBAAGjggLuMIIC6jAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIGQDALBgNVHQ8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0OBBYEFDMTl+ghHHX6MbGGUJB9Kem708jyMB8GA1UdIwQYMBaAFH2eaw78E+HEi6d/Ya5gIc/NoNMGMAkGA1UdEQQCMAAwCQYDVR0SBAIwADBxBglghkgBhvhCAQ0EZBZiT3JnYW5pemF0aW9uIEluZm9ybWF0aW9uIE5PVCBWQUxJREFURUQuIExFVkVMMSBTZXJ2ZXIgQ2VydGlmaWNhdGUgaXNzdWVkIGJ5IGh0dHBzOi8vd3d3Lmlwc2NhLmNvbS8wKQYJYIZIAYb4QgECBBwWGmh0dHA6Ly9sZXZlbDEwMS5pcHNjYS5jb20vMDwGCWCGSAGG+EIBBAQvFi1odHRwOi8vbGV2ZWwxMDEuaXBzY2EuY29tL2NybC9pcHNjYWxldmVsMS5jcmwwQwYJYIZIAYb4QgEDBDYWNGh0dHA6Ly9sZXZlbDEwMS5pcHNjYS5jb20vY3JsL3Jldm9jYXRpb25MRVZFTDEuaHRtbD8wQAYJYIZIAYb4QgEHBDMWMWh0dHA6Ly9sZXZlbDEwMS5pcHNjYS5jb20vY3JsL3JlbmV3YWxMRVZFTDEuaHRtbD8wPgYJYIZIAYb4QgEIBDEWL2h0dHA6Ly9sZXZlbDEwMS5pcHNjYS5jb20vY3JsL3BvbGljeUxFVkVMMS5odG1sMHMGA1UdHwRsMGowM6AxoC+GLWh0dHA6Ly9sZXZlbDEwMS5pcHNjYS5jb20vY3JsL2lwc2NhbGV2ZWwxLmNybDAzoDGgL4YtaHR0cDovL2xldmVsMTAyLmlwc2NhLmNvbS9jcmwvaXBzY2FsZXZlbDEuY3JsMDoGCCsGAQUFBwEBBC4wLDAqBggrBgEFBQcwAYYeaHR0cDovL29jc3BsZXZlbDEwMS5pcHNjYS5jb20vMA0GCSqGSIb3DQEBBQUAA4IBAQAScibhx/hTbsBCdfZBLasZy0/X8Pd6ssBnf67t8Csiy9wobOOha8tE0Gf8APMSZ9AGiboyyn6iv79yiah8vlYB9Y78azxWKFkedHgofksc2djSUlj/TzRuj9JQLgwz4edg+3HfN9O9RBYB3s4m7IIm/NsU4vJY+9mz+N24SR9FbnO3owajbvrx5Y/ExFHSAZFr8ZP45563s/QHozd8927vmPCgE+K9pgajDhM3swDEfuk8Lw80xpuWSo+kob/Oee76jGqhCby+PZXjlY3tjiMJQ1PEWhD6vLRAfxnIPw4FvItUsUGPsmxjlKUG/zoTzku7VLV0Y9vv1ysGqbY5U4Yl +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/69a4a04525c371f90bdcf4a59b168e80a5871ff0 b/fuzz/gnutls_set_trust_file_fuzzer.in/69a4a04525c371f90bdcf4a59b168e80a5871ff0 new file mode 100644 index 0000000000..abb4486c07 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/69a4a04525c371f90bdcf4a59b168e80a5871ff0 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6a21e7047ae01fd23be53afa7ffce1dd5bf71eaf b/fuzz/gnutls_set_trust_file_fuzzer.in/6a21e7047ae01fd23be53afa7ffce1dd5bf71eaf new file mode 100644 index 0000000000..095f92edec --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/6a21e7047ae01fd23be53afa7ffce1dd5bf71eaf @@ -0,0 +1,3 @@ +------BEGIN X509 CRLAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-RTIFICATE-------BEGIN CTE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEG-----BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERFTIICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE--GIN CATE-IFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEG-----BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERCATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATEERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGI6eN-----BEGIN X509 CRL-----MIEMMIEYMIEAMIEAGIEOe3014a90ca8ee2d5eb0f2e0N CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEG-----BEGIN CERTIFICATE------BEGIN CERTIFICATER--)---BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN d------CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER--------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE---E-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------B----E-GRTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BE------B--ATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE------FICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATEl-------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE----------BEGIN CERTb------BEGIN CERTIFICATE-----BEGIN CERTIFICATEY29sdG-----BEGIN CERTIFICATEZW-----BEGIN X509 CERTIFICATEEE----ATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNBVAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECB4ITkVXPlFUIksxGDAWBgNVBAMeDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIbdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CBzCAGFuYTEQMA4GA1UEBxMHQm96M18VpBWAwF \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6b2aa4cbaf9968e0b65bed5e43650e468b3b8caf b/fuzz/gnutls_set_trust_file_fuzzer.in/6b2aa4cbaf9968e0b65bed5e43650e468b3b8caf new file mode 100644 index 0000000000..6125680bb2 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/6b2aa4cbaf9968e0b65bed5e43650e468b3b8caf @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChQMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECB4ITXIFVdlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNMO2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END ICATE- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6b33d2214763b2d0dddd4b14763257356a3368ef b/fuzz/gnutls_set_trust_file_fuzzer.in/6b33d2214763b2d0dddd4b14763257356a3368ef new file mode 100644 index 0000000000..9297d04df4 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/6b33d2214763b2d0dddd4b14763257356a3368ef differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6b4f45d9e53cb5c13ffd20504197eb646d535666 b/fuzz/gnutls_set_trust_file_fuzzer.in/6b4f45d9e53cb5c13ffd20504197eb646d535666 new file mode 100644 index 0000000000..81e66288d0 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/6b4f45d9e53cb5c13ffd20504197eb646d535666 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6b9f231cc9117b389edf1bdd31f9ad9aa125a6d5 b/fuzz/gnutls_set_trust_file_fuzzer.in/6b9f231cc9117b389edf1bdd31f9ad9aa125a6d5 new file mode 100644 index 0000000000..f203e9c091 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/6b9f231cc9117b389edf1bdd31f9ad9aa125a6d5 @@ -0,0 +1,2 @@ +-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE -----END ------END -----BEGIN X509 CEDENR + \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6bb3dbe397561f26fdc398e0b9c426c63f9c9aa3 b/fuzz/gnutls_set_trust_file_fuzzer.in/6bb3dbe397561f26fdc398e0b9c426c63f9c9aa3 new file mode 100644 index 0000000000..06b25f931d --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/6bb3dbe397561f26fdc398e0b9c426c63f9c9aa3 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-Z---MRMwEQYDVQQDFAoqLmdiLmdvLmtyMCATE-G4SI- -----END -----BEGIN CERTIFICATE---------%BEGIN CERTIFICATE-MDMxNlAUbWRxVXB-----BEGIN X509 CERTIFICATEDLEReMH+eHLuqfM18VVyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIdERTIFICATE----- +MIIDZzCCAtCgAwIBAQIDCwsxMA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMS0wKwYDVQQDEyRFcXVpZmF4IFNlY3VyZSBHbG9iYWwgZUJ1c2luZXNzIENBLTEwHhcNMDkwMzE4MTMwMzE1WhcNMTQwMzE4MTMwMzE1WjCB1jELMAkGA1UEBhMCTkwxJjAkBgNVBAoTHXBvcnRhYWwuZ291ZHNtaXQtbWFnbmV0aWNzLm5sMRMwEQYDVQQLEwpHVDM0MDMyNzQzMTEwLwYDVQQLMyhTZWUgd3d3LnJhcGlkc3NsLmNvbS9yZXNvdXJjZXMvY3BzIChjKTA5MS8wLQYDVQQLEyZEb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgLSBSYXBpZFNTTChSKTEmMCQGA0UEExMdcG9ydGFhbC5nb3Vkc21pdC1tYWduZXRpY3MubmwwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALcK0VV2IgUNrIItBa/UBIX4A/r14br2Povw4J3/yQjI+MueFR8N9IRoCQgktJ+nHiVSUwFXHmuil0I+JXsXgrHjlBWFFUSXHH8/5WTBDzNIfyY1Ymky7kpCzeZa7R9XLF+C2ENXg+Jf0zBy4gf3i941JpIdOhxyajnlQbcFIFNDAgMjAAGCgb0wgbowDgYDVR0PAQH/BAQDAgTwMB0GA1UdDgQWBBRnqhBS9VfvsC+vmJut5XgoCb6spTA7BgNVHR8ENDAyMDCgLqAshipodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL2dsb2JhbGNhMS5jcmwwHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCSAAwDQYJKoZIhvcNAQEFBQADgYEAHZlYx8nIB/+NXKR+gsH5QaGyxJLD46UabPiwFZh0nOAUTXpR9K8ZiYBWMtMh8WUM81qV3becix1P75mLCqqkt1Lvhg0pGWW4BQinHr06hGfk7bZmWWsjNM8ts32eZquU5qssVXyYBw9WHIa+rQLdLhEjTjPmSKe1gRMJtzQSDZk= +-----END CERTIFICATE-----BFhBpbmwJLUjEcMGA1UECh4TR292ZX---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CERTIFICE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYJubWVuTdCA \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6c750ab37fdc9a2d892efe55059a10f7e1f608b3 b/fuzz/gnutls_set_trust_file_fuzzer.in/6c750ab37fdc9a2d892efe55059a10f7e1f608b3 new file mode 100644 index 0000000000..33a97a5aca --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/6c750ab37fdc9a2d892efe55059a10f7e1f608b3 @@ -0,0 +1,13 @@ +C-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bIRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzAxMYzjODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END C4-----BEG0:e7e:7 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6ebab7b96bce14b9b74e34335561f14ed3356d45 b/fuzz/gnutls_set_trust_file_fuzzer.in/6ebab7b96bce14b9b74e34335561f14ed3356d45 new file mode 100644 index 0000000000..4065a3ab43 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/6ebab7b96bce14b9b74e34335561f14ed3356d45 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/6ee9a3fb07021f5050ad3c679d9c455b5bec2ad0 b/fuzz/gnutls_set_trust_file_fuzzer.in/6ee9a3fb07021f5050ad3c679d9c455b5bec2ad0 new file mode 100644 index 0000000000..a479de2856 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/6ee9a3fb07021f5050ad3c679d9c455b5bec2ad0 @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBBYTAlVTMRAwDgYD +VQQIEwdNb250ZW5hMRAwDgYDVQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvbw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0y +MDA2MzyTUMxOEDdaFw0xMzAxMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL2HRYEcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/70041f442c38cb8da60328fdab01b85c3ad2720f b/fuzz/gnutls_set_trust_file_fuzzer.in/70041f442c38cb8da60328fdab01b85c3ad2720f new file mode 100644 index 0000000000..23b0b6d5ae --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/70041f442c38cb8da60328fdab01b85c3ad2720f @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVv5FAVwvvvQvTAAFw2xMzA0LTEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/70252ed61113a98aab285aa306002e48e7de276c b/fuzz/gnutls_set_trust_file_fuzzer.in/70252ed61113a98aab285aa306002e48e7de276c new file mode 100644 index 0000000000..01e3b08f95 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/70252ed61113a98aab285aa306002e48e7de276c @@ -0,0 +1,18 @@ +ViEVQQDDA93d3ICATEbB-----BEGIN X509 CERTIFICATEE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc6wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVbAQTAlVTMQ8wDQYDVQQIDAZP +cmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnDURNQgMQ0wCwYD +WQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQeWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0SBIG6MIG3hhdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBxMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVB8MMD3d3 +dyu3b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJFQQQaW5mb0B3b2xmc3NsLmNv +AIYJbOdypp4THRdcMAwGA9UdEwQFMAMCAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQol/JduZUGoECIQDWi6y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w==-----END UKZM3DQE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/704f4e3e26c567788989a8df0d615cd44702d6a8 b/fuzz/gnutls_set_trust_file_fuzzer.in/704f4e3e26c567788989a8df0d615cd44702d6a8 new file mode 100644 index 0000000000..1751810c7b --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/704f4e3e26c567788989a8df0d615cd44702d6a8 @@ -0,0 +1,12 @@ +C-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb251YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bIRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzjzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm97ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOokXbHu3sMsgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END 711-----BEGIN X509 CERTIFICATE:-: \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/71172579160ec93f47a941026853df54ced00090 b/fuzz/gnutls_set_trust_file_fuzzer.in/71172579160ec93f47a941026853df54ced00090 new file mode 100644 index 0000000000..bddbafde47 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/71172579160ec93f47a941026853df54ced00090 @@ -0,0 +1 @@ +Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct--VvTJAVL-- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/71dbf269cafa10a012ef847c2ac500a9eea71cd8 b/fuzz/gnutls_set_trust_file_fuzzer.in/71dbf269cafa10a012ef847c2ac500a9eea71cd8 new file mode 100644 index 0000000000..05bb7191d6 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/71dbf269cafa10a012ef847c2ac500a9eea71cd8 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/71e721e166f7109e50126741cea0b76100b05d4b b/fuzz/gnutls_set_trust_file_fuzzer.in/71e721e166f7109e50126741cea0b76100b05d4b new file mode 100644 index 0000000000..17bca63b2e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/71e721e166f7109e50126741cea0b76100b05d4b @@ -0,0 +1,8 @@ +-- + + + + + + +C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGVvQvTAAL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRLC-----MIEIMAAwAAMCAmM=------END ----EN0 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/72622d9e312e7da9328889d3ef201b2752104d87 b/fuzz/gnutls_set_trust_file_fuzzer.in/72622d9e312e7da9328889d3ef201b2752104d87 new file mode 100644 index 0000000000..9fd3dab222 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/72622d9e312e7da9328889d3ef201b2752104d87 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/72d416aa52a46790f38479111776d630e49ab5d2 b/fuzz/gnutls_set_trust_file_fuzzer.in/72d416aa52a46790f38479111776d630e49ab5d2 new file mode 100644 index 0000000000..630a1aaa12 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/72d416aa52a46790f38479111776d630e49ab5d2 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAyTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgGTyGFZ1VMRQwEgYDVQQLEwtBUkF/new/7148LjERMA8GA1UECB4ITkVXAFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoY0RocDHaovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN/javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/73fa842ca6735dd4fab2744a8d38b18c628d049e b/fuzz/gnutls_set_trust_file_fuzzer.in/73fa842ca6735dd4fab2744a8d38b18c628d049e new file mode 100644 index 0000000000..3d6a4e7512 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/73fa842ca6735dd4fab2744a8d38b18c628d049e @@ -0,0 +1,7 @@ +------BEGIN CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw03 +MDA2MzTyhbjMAOEwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluwuY29tMFwwDQYJKtMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQAAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/741719df2de5ccb8e8f404b9d1c9886ffff594c1 b/fuzz/gnutls_set_trust_file_fuzzer.in/741719df2de5ccb8e8f404b9d1c9886ffff594c1 new file mode 100644 index 0000000000..08993dd69c --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/741719df2de5ccb8e8f404b9d1c9886ffff594c1 @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw0Azx2MLUEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuASkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/74776b1bc69d0a6f3e47aced919f01e6857167b0 b/fuzz/gnutls_set_trust_file_fuzzer.in/74776b1bc69d0a6f3e47aced919f01e6857167b0 new file mode 100644 index 0000000000..bb57263779 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/74776b1bc69d0a6f3e47aced919f01e6857167b0 @@ -0,0 +1,2 @@ +-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----END -----END -----BE + \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/74e7b0089afd0e8f4c8b59da60e23ccf9f1d6e29 b/fuzz/gnutls_set_trust_file_fuzzer.in/74e7b0089afd0e8f4c8b59da60e23ccf9f1d6e29 new file mode 100644 index 0000000000..530acedf2c Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/74e7b0089afd0e8f4c8b59da60e23ccf9f1d6e29 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/74faa7efa0cb133d697ae3e57966b04b5668e8d6 b/fuzz/gnutls_set_trust_file_fuzzer.in/74faa7efa0cb133d697ae3e57966b04b5668e8d6 new file mode 100644 index 0000000000..c845fac835 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/74faa7efa0cb133d697ae3e57966b04b5668e8d6 @@ -0,0 +1,2 @@ +-----BEGIN CERTIFICATE------END X09 CERTIFICATE-----END -----BE-----END + \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/75249892afc49da496faeb20cf226955a1f02f2d b/fuzz/gnutls_set_trust_file_fuzzer.in/75249892afc49da496faeb20cf226955a1f02f2d new file mode 100644 index 0000000000..a1eaa57749 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/75249892afc49da496faeb20cf226955a1f02f2d @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIEdTCCA12gAwIBAgIQDHkdOkE2Ylule4toQ95UsjANBgkqhkiG9w0BAQUFADA2MQswCQYDVQQGEwJOTDEPMA0GA1UEChMGVEVSRU5BMRYwFAYDVQQDEw1URVJFTkEgU1NMIENBMB4XDTEwMTExNzAwMDAwMFoXDTEzMTExNjIzNTk1OVowTDELMAkGA1UEBhMCSVQxHjAcBgNVBAoTFVBvbGl0ZWNuaWNvIGRpIFRvcmlubzEdMBsGA1UEaxMUd3d3LmFyZWFpdC5wb2xpdG8uaXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHqf+3OPz6838CqdaK4YehAuQvIUCDNZv5eg9R9TY/mqOkP7ArtG98A9oV6BzEjPRnMutEabu6F+/yACiB3zFWuQv46p4nXFYO4CbT2ORPghYPh4vWX2bEuuSufuKj3uNzJMVky8EvndhoVNiokQqmw8ca24gECLDr0/T2hq8nqYDCk+1IUFf2t0/1vAnonhYv7zuSfxTGhhFsWSanaePhVHFZummeH+mvH7PnR9k8Axxj8azzJ2E2dVmqMe5TTLUQGqwnWLxnH0ErCYRhi83FD8Kw/hFZQdHLoeh6toVROwNXk5e6R8CsITEbVS5koAHireB/GkZzqxOIEIcCkx8RAgMBAAGjggFnMIIBYzAfBgNVHSMEGDAWgBQMvZNoDPPeq6NJays3V0fqkOO57TAdBgNVHQ4EFgQUTHK64nHsW6abxErHdpcYzQRrL/8wDgYDVR0PAQH/BAQDAgWgMAwGA1UdEwEB/wQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGyMQECAh0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwHwYDVR0RBBgwFoIUd3d3LmFyZWFpdC5wb2xpdG8uaXQwDQYJKoZIhvcNAQEFBQADggEBAAEoAOuLhmyqo9pQSbfUgkHGyeQtoIDHPZjf8ZuxLIsziMYs1T2zgzJgntAEomDJ+31Xa63+zsM8zd3h//iIJC2C2/LrHxwwllq2JHRpCPMksj3qpDXNbPfM1JACjnO0e9rqfhQa3HPzrKaiQx0dBWkA2Vm4RFgkSqsEedI6YqD//wc6J9q+rSp+CBcs+Ay/vshER3tZLqzFAim+9gmM+oG9ylubD9fIml8eGuXIO9uZXdr+ePWxEsJiNk6Fb+tGK6PSYpUDMJnNhUhiJprY2X8Mi8xvpe51NdPZzs589iZadMmj2/+GAghDyMxlJHj8GnGhrtT5uvkXi1XfcrIjHxQ= +-----END CERTIFICA----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/755f7d086ba81c563ae8a5fe66ec21fd799fc17b b/fuzz/gnutls_set_trust_file_fuzzer.in/755f7d086ba81c563ae8a5fe66ec21fd799fc17b new file mode 100644 index 0000000000..2e13e3e8ed --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/755f7d086ba81c563ae8a5fe66ec21fd799fc17b @@ -0,0 +1,12 @@ +BAICATECRLT-E-----BEGIN X509 CERTIFICATEF----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +M2AMzADxODUyMTdaFw03MjAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUlt3Se+s2oq5+ +Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END -i \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/775382e3e3d2c7760323093fd1c98b7148b0a883 b/fuzz/gnutls_set_trust_file_fuzzer.in/775382e3e3d2c7760323093fd1c98b7148b0a883 new file mode 100644 index 0000000000..137162681f --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/775382e3e3d2c7760323093fd1c98b7148b0a883 @@ -0,0 +1,7 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-------BEGIN X509 CRL-BEGTE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN -----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/780bddfb8be4fa2c48ab7ac4c389023130688b99 b/fuzz/gnutls_set_trust_file_fuzzer.in/780bddfb8be4fa2c48ab7ac4c389023130688b99 new file mode 100644 index 0000000000..be84638fb0 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/780bddfb8be4fa2c48ab7ac4c389023130688b99 @@ -0,0 +1,8 @@ +-- + + + + + + +C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCiIVvTFAVvvvvQvTAAGIEMWvwwgwwuwwwwCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGVvQvTAAL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwgwwuwwwwCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RLCE------END ----EN0 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/7831c0877d53b559eaf1739cfaf0bced96874247 b/fuzz/gnutls_set_trust_file_fuzzer.in/7831c0877d53b559eaf1739cfaf0bced96874247 new file mode 100644 index 0000000000..1c4398c054 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/7831c0877d53b559eaf1739cfaf0bced96874247 @@ -0,0 +1,5 @@ +------BEGIN X509 CRLAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-RTIFICATE-------BEGIN CTE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEG-----BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERFTIICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE--GIN CATE-IFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEG-----BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATEERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEG-----BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER--------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE---E-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------B----E-GRTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFIMATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATEIN CERTIFICATERT----B----E-GRTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN C-----BEGIN CERTIFICATE-----b------BEGIN CERTIFICATE-----BEGIN CERTIFICATEY29sdG-----BE-----END FICATEZW-----BEGIN X509 CERTIFICATEEE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA2UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBQZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UECh4MBXZMRN0EAGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBwITkVXpFlPUksxGDAWBgNVBAMUDyourGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5Mbf7H5w0st0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ9HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG8iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH12shazhzDFdRPhQenNrbI4RTE/ +-----END TzMjYxOOcWUkxA +5+FHkhkbOoDVQQGEwJVUzEQMA4G +A1UECIBEJv4EXrS2KSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/miff4ADbxYnN7javsrFdFRj0IbyMzU5MDBaMHoxCzAJE-Z---YTAlVICATEluHA \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/78f39e81ef7a72a4874bae1c2662d2989d1737b3 b/fuzz/gnutls_set_trust_file_fuzzer.in/78f39e81ef7a72a4874bae1c2662d2989d1737b3 new file mode 100644 index 0000000000..c2a09ec28f --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/78f39e81ef7a72a4874bae1c2662d2989d1737b3 @@ -0,0 +1,4 @@ +b-:2d +sdG-----BEGIN CERTIFICATEZW------BEGIN CERTIFICATE-----BEGIN CERTIFICATEY29sdG-----BEGIN CERTIFICATEZW-----BEGIN X509 CERTIFICATEEE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA2UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBQZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0zMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW0yazEVMBMGA2UECh4MBXZMRN0EAGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECGMITkVXIFlPUksxGDAWBgNTBAMUDyourGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK4eJ9HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff2ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH12shazhzDFdRPhQenNrbI4RTE/ +-----END TAIGBy \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/791e81975b47718075397af9e7a94d5cf29bfd91 b/fuzz/gnutls_set_trust_file_fuzzer.in/791e81975b47718075397af9e7a94d5cf29bfd91 new file mode 100644 index 0000000000..7efdc7c5ca --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/791e81975b47718075397af9e7a94d5cf29bfd91 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIDZzCCAtCgAwIBAAIDCwsxMA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMS0wKwYDVQQDEyRFcXVpZmF4IFNlY3VyZSBHbG9iYWwgZUJ1c2luZXNzIENBLTEwHhcNMDkwMzE4MTMwMzE1WhcNMTQwMzE4MTMwMzE1WjCB1jELMAkGA1UEBhMCTkwxJjAkBgNVBAoTHXBvcnRhYWwuZ291ZHNtaXQtbWFnbmV0aWNzLm5sMRMwEQYDVQQLEwpHVDM0MDMyNzQzMTEwLwYDVQQLMyhTZWUgd3d3LnJhcGlkc3NsLmNvbS9yZXNvdXJjZXMvY3BzIChjKTA5MS8wLQYDVQQLEyZEb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgLSBSYXBpZFNTTChSKTEmMCQGA0UEExMdcG9ydGFhbC5nb3Vkc21pdC1tYWduZXRpY3MubmwwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALcK0VV2IgUNrIItBa/UBIX4A/r14br2Povw4J3/yQjI+MueFR8N9IRoCQgktJ+nHiVSUwFXHmuil0I+JXsXgrHjlBWFFUSXHH8/5WTBDzNIfyY1Ymky7kpCzeZa7R9XLF+C2ENXg+Jf0zBy4gf3i941JpIdOhxyajnlQbcFIFNDAgMjAAGCgb0wgbowDgYDVR0PAQH/BAQDAgTwMB0GA1UdDgQWBBRnqhBS9VfvsC+vmJut5XgoCb6spTA7BgNVHR8ENDAyMDCgLqAshipodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL2dsb2JhbGNhMS5jcmwwHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCSAAwDQYJKoZIhvcNAQEFBQADgYEAHZlYx8nIB/+NXKR+gsH5QaGyxJLD46UabPiwFZh0nOAUTXpR9K8ZiYBWMtMh8WUM81qV3becix1P75mLCqqkt1Lvhg0pGWW4BQinHr06hGfk7bZmWWsjNM8ts32eZquU5qssVXyYBw9WHIa+rQLdLhEjTjPmSKe1gRMJtzQSDZk= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/79dc3ce158cea467eb47928cdfe511e37642c036 b/fuzz/gnutls_set_trust_file_fuzzer.in/79dc3ce158cea467eb47928cdfe511e37642c036 new file mode 100644 index 0000000000..642452474b Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/79dc3ce158cea467eb47928cdfe511e37642c036 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/7a518d59adca24521135eaf9138438a5ad448d65 b/fuzz/gnutls_set_trust_file_fuzzer.in/7a518d59adca24521135eaf9138438a5ad448d65 new file mode 100644 index 0000000000..58ac9ecaef --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/7a518d59adca24521135eaf9138438a5ad448d65 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgABAANAA7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEBhMMRXN0ZWUgAGF1ZGVyMRQwEgYDVQQFEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUD9oubGFic3VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm0ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/7bac20fe9bb74af217ad5ce0303bb932f30f06e2 b/fuzz/gnutls_set_trust_file_fuzzer.in/7bac20fe9bb74af217ad5ce0303bb932f30f06e2 new file mode 100644 index 0000000000..442997384d Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/7bac20fe9bb74af217ad5ce0303bb932f30f06e2 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/7e9ed3e3e5081d78b86738d26556ac48c8a9b7f4 b/fuzz/gnutls_set_trust_file_fuzzer.in/7e9ed3e3e5081d78b86738d26556ac48c8a9b7f4 new file mode 100644 index 0000000000..371a2fd419 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/7e9ed3e3e5081d78b86738d26556ac48c8a9b7f4 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/7f201148dbe5d669feafdb7ed4009bc257acb9eb b/fuzz/gnutls_set_trust_file_fuzzer.in/7f201148dbe5d669feafdb7ed4009bc257acb9eb new file mode 100644 index 0000000000..2f00c82043 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/7f201148dbe5d669feafdb7ed4009bc257acb9eb @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUjsxGDAWBgNVBAMUDyoujGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/7fcfdd456863f4e28438c7c6f814967fcd072aee b/fuzz/gnutls_set_trust_file_fuzzer.in/7fcfdd456863f4e28438c7c6f814967fcd072aee new file mode 100644 index 0000000000..e2f85cd80e Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/7fcfdd456863f4e28438c7c6f814967fcd072aee differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8034869b5f6d3fb828ce69922200e1fe065d8cab b/fuzz/gnutls_set_trust_file_fuzzer.in/8034869b5f6d3fb828ce69922200e1fe065d8cab new file mode 100644 index 0000000000..643d622342 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/8034869b5f6d3fb828ce69922200e1fe065d8cab differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8094c0b408febca135efc2c752aa453b9b279c4b b/fuzz/gnutls_set_trust_file_fuzzer.in/8094c0b408febca135efc2c752aa453b9b279c4b new file mode 100644 index 0000000000..c1cc2c84eb --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/8094c0b408febca135efc2c752aa453b9b279c4b @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE------BEGIN X509 CRL-----MIIAQTAkMBEGCEVCITRIINvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTJVTvAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEVCITRIINvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTJVTvAVL-------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/818b6f877a57802bdcbe279b11d7ea6440ad6aa3 b/fuzz/gnutls_set_trust_file_fuzzer.in/818b6f877a57802bdcbe279b11d7ea6440ad6aa3 new file mode 100644 index 0000000000..85637382a0 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/818b6f877a57802bdcbe279b11d7ea6440ad6aa3 @@ -0,0 +1,19 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGICEN RTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE----------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER--ҽN CEPTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFIIFICATEGZ3.7-----BEGIN CERTIFICATEGZndC-----EGIN 7-----BEGIN CERTIFICATEGZC-----BEGIN CERTIFICATEbB-----BEGIN X509 CERTIFICATEE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3hhdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbIYJ +AOdypp5THRdcMAwGA1UdEwQFMAMCAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQol/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-TAFzAAMBEGCEIRnIvCuIvTFAVvvvvTIAPE-----END IFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGl-AICACEI =N1----jnlQbcFIFNDAgCAT \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/81b23f453ed06f36fc90c8b101c777af55061862 b/fuzz/gnutls_set_trust_file_fuzzer.in/81b23f453ed06f36fc90c8b101c777af55061862 new file mode 100644 index 0000000000..971406bcb9 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/81b23f453ed06f36fc90c8b101c777af55061862 @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvGIN X5--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --X509L- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/81bfae91097806694624f19cb330b1d8b2329995 b/fuzz/gnutls_set_trust_file_fuzzer.in/81bfae91097806694624f19cb330b1d8b2329995 new file mode 100644 index 0000000000..82db22a380 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/81bfae91097806694624f19cb330b1d8b2329995 @@ -0,0 +1 @@ +CC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/824491528021130919359cb1cd983c03644dc3f1 b/fuzz/gnutls_set_trust_file_fuzzer.in/824491528021130919359cb1cd983c03644dc3f1 new file mode 100644 index 0000000000..decefcc381 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/824491528021130919359cb1cd983c03644dc3f1 @@ -0,0 +1,11 @@ +GKMQswCQYDVQQGEwJVUzEQMA0G +CSqGSIb3DQEBAQUAA0sAMEgCQQTicEBO1u+ysy7iE-----MIEMMCMCCIFTCEIRMIEPMIEAMIEAMIEAMIEAMIEAMHVTCEIRAMIAMEIdqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LBLWrQETMBEGA1UB-----BEGIN CERTIFICATECATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKdOj9BQYkZqEi8LBLWrQETMBEGA1UB-----BEGIN CERTIFICATECATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQxFjAUBgNVBAM-MIEMMCMCCIFTCEIRMIEPMIEAMIEAMIEAMIEAMIEAMHVTCEIRAMIAMEIdqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LBLWrQETMBEGA1UB-----BEGIN CERTIFICATECATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKdOj9BQYkZqEi8LBLWrQETMBEGA1UB-----BEGIN CERTIFICATECATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERTTL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE8TIFICATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQoZIhvcNAQEBBQADSwAwSAJBAMZ7wECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERTTL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE8TIFICATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG8w0BTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERTTL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE8TIFICATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQoZIhvcNAQEBBQADSwAwSAJBAMZ7wECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERTTL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE8TIFICATERTL-----B-----BEGIN CERTIFICATE-----BEGIN----------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R-----cnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG8w0BCQEWDmluZm9AeWFhvcNAQkBhBpbmZvQHdvbGZzc2wuY29tl-----MAwwKAICwAwwCAY4444444V8--- +MI-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEHk------BEGIN X509 CERTIFICATEGIRTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA2UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAXTAlVTMREwDwYDVBQHEwhOZXcgWW9yazEVMBMGA1UUChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQYEwtBUkFNSVMgSU5DLjERMA8GA1BMCUEITkVXIFlPUksxGDAWBgNWBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM0DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9B2aFtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/miff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTRjYZf5zv9VZjN5bztRdLUyI2NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd6B4M44CruXNOM2DsE4uhUKxbuCJdFYmxcjHcmluZy5zb2ZkiG9w0BAQUFV \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/828bea888d726c096c87cd79e106c3cfc4b3880a b/fuzz/gnutls_set_trust_file_fuzzer.in/828bea888d726c096c87cd79e106c3cfc4b3880a new file mode 100644 index 0000000000..dbf24e6118 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/828bea888d726c096c87cd79e106c3cfc4b3880a @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgABAANAA7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEBhMMRXN0ZWUgAWF1ZGVyMRQwEgYDVQQFEwtBUkFNSVMgSU5DLjERMA8GA1UEFBMITkVXIFlPUksxGDAWBgNVBAMUD9oubGFic3VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm0ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8361e04b1fea0578dfa021b494a6ec52d05f9eff b/fuzz/gnutls_set_trust_file_fuzzer.in/8361e04b1fea0578dfa021b494a6ec52d05f9eff new file mode 100644 index 0000000000..53bd0076e1 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/8361e04b1fea0578dfa021b494a6ec52d05f9eff differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/83ba1c6be70a1bf83b63de83a77500cceefd057d b/fuzz/gnutls_set_trust_file_fuzzer.in/83ba1c6be70a1bf83b63de83a77500cceefd057d new file mode 100644 index 0000000000..640e354798 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/83ba1c6be70a1bf83b63de83a77500cceefd057d @@ -0,0 +1,18 @@ +------BEGIN CERTIFICATEDEY444--------BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEHk------BEGIN X509 CERTIFICATE----- +MIIC7DCCApagAwIBAgIJAKBIQJVDXWL5MA0GCSqGSIb3DQEBBAUAMIHHMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEm +MCQGA1UECgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsM +C0VuZ2luZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1i +aW5nLmJpejEoMCYGCSqGSIb3DQEJARYZam9obkBzb1Z0d2FyZXBsdW1iaW5nLmJp +ejAeFw0xNDAzMTMxNjUyMzRaFw0xNjEyMDcxNjUyMzRaMIHHMQswCQYDVQQGEwJV +UzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEmMCQGA1UE +CgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsMC0VuZ2lu +ZWVyaW5nMSkwJwYDVQQDDCBlrfc822NuniverSsatlringFyZXBsdW1iaW5nLmJp +ejEoMCYGCSqGSIb3DQEJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJpejBcMA0G +CSqGSIb3DQEBAQUAA0sAMEgCQQTicEBO1u+ysy7iakUAewKMYPKwzY6Oaq+FUopr +SIjgrX8JIV5gnnvT0HrV/Ju2t4sBy41rZc50cqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LBLWrQZjw5usbSedJdAzAfBgNVHSMEGDAWgBQYkZqEi8LD +LWrQZjw5usbSedJdAzAPBgNVHrMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIF4DAN +BgkqhkiG9w0BAQQFAANBAEU0nmhsV0h59xJIHESZPqGj8LYEoSnyZ8/vs+KBJmhm +A8XaCALu1m2CWCrW5wjqSGbbqQfy9vFqsnNX+Qt9KiU= +-----END CERT8778--AMI---EAKo \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/84234ac1feb0bee5cb0de68580a2aaa3d27bc637 b/fuzz/gnutls_set_trust_file_fuzzer.in/84234ac1feb0bee5cb0de68580a2aaa3d27bc637 new file mode 100644 index 0000000000..2f233a2d94 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/84234ac1feb0bee5cb0de68580a2aaa3d27bc637 @@ -0,0 +1,2 @@ +-----BEGIN CERTIFICATE-----BEGIN X509 CERTIF -----END ------END -----BEGIN X509 CEDENR + \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/842aa2e2aae2b93ee072a6cd471a29b2f54b07d1 b/fuzz/gnutls_set_trust_file_fuzzer.in/842aa2e2aae2b93ee072a6cd471a29b2f54b07d1 new file mode 100644 index 0000000000..98526277f3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/842aa2e2aae2b93ee072a6cd471a29b2f54b07d1 @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATER-----FICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvbw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0p +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc3wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/847736f6cdae80cf060486d097488da85e6427b2 b/fuzz/gnutls_set_trust_file_fuzzer.in/847736f6cdae80cf060486d097488da85e6427b2 new file mode 100644 index 0000000000..29190261ce --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/847736f6cdae80cf060486d097488da85e6427b2 @@ -0,0 +1,7 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE------BEGIN CERTIFICATE--BEGTE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN -----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/84fc50946746b26f509a59f84b4dcd326f818ada b/fuzz/gnutls_set_trust_file_fuzzer.in/84fc50946746b26f509a59f84b4dcd326f818ada new file mode 100644 index 0000000000..baa714497d --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/84fc50946746b26f509a59f84b4dcd326f818ada @@ -0,0 +1,3 @@ +s-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAACN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xmzA1MTEyMzU5MDBaMHoxCzAJBgNVBIYTAlVTMREwDwYDVQQJEwhOZXcgWW9yazEVMBMGA0UEChMMRXN0ZWUgTGF2ZGVyMRQwEgYDTQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECbMITkVXIFlPUksxGDAWBgNVBMAUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6L0VxLYSkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7f3t0YtIro4eHdxOZek0SztRdLXyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk3ZJIcCAwEAAaNsMGowOQYDVR5fBDIwMDAuoEygKpYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUJrP+5nPUmIw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFFdRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CA \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8571e076e15a06577efe25c3f3b230025446e24b b/fuzz/gnutls_set_trust_file_fuzzer.in/8571e076e15a06577efe25c3f3b230025446e24b new file mode 100644 index 0000000000..bd7be393f6 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/8571e076e15a06577efe25c3f3b230025446e24b differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8743cf0b539707398ca1e8e93ecc5fd207e369c3 b/fuzz/gnutls_set_trust_file_fuzzer.in/8743cf0b539707398ca1e8e93ecc5fd207e369c3 new file mode 100644 index 0000000000..a8b1735a31 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/8743cf0b539707398ca1e8e93ecc5fd207e369c3 @@ -0,0 +1,2 @@ +-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE----------END -----BE-----END + \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/87d172d39590c2609f6eec1fc1c5d4893f66812a b/fuzz/gnutls_set_trust_file_fuzzer.in/87d172d39590c2609f6eec1fc1c5d4893f66812a new file mode 100644 index 0000000000..411af397b7 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/87d172d39590c2609f6eec1fc1c5d4893f66812a @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAQUAoVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UECh4MN0WZRgXZT1UAGgVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CEITE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/891306f4ab323ebae41b1061a34e8662aaa7d44b b/fuzz/gnutls_set_trust_file_fuzzer.in/891306f4ab323ebae41b1061a34e8662aaa7d44b new file mode 100644 index 0000000000..4c5ee87761 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/891306f4ab323ebae41b1061a34e8662aaa7d44b @@ -0,0 +1,15 @@ +Certificate50:1 +-----BEGIN CERTIFICATE----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNv +bnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw1x +MDA2MzAxODUyMTdaFw1xMzAzMjYxODLyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiBw0G9AQSFAANBAFipmOcWUkxA +5+FHkhkbOo3+XHubsMsgba2100dY2OTyPjLp75d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END C40:e7: \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8a4f3b6ab4323b10ace8fe5adf93e78ad8c88df9 b/fuzz/gnutls_set_trust_file_fuzzer.in/8a4f3b6ab4323b10ace8fe5adf93e78ad8c88df9 new file mode 100644 index 0000000000..61b90c3a6e Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/8a4f3b6ab4323b10ace8fe5adf93e78ad8c88df9 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8c652171eeca525ecea8ce1e76d80ccc0a10c3ad b/fuzz/gnutls_set_trust_file_fuzzer.in/8c652171eeca525ecea8ce1e76d80ccc0a10c3ad new file mode 100644 index 0000000000..330d8bfc5e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/8c652171eeca525ecea8ce1e76d80ccc0a10c3ad @@ -0,0 +1,70 @@ +-C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL- +-C-----BEGIN X-458 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL- + +-----BEGIN X1246027 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X262 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X9223372036854775809 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL--- +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwCgwwTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL-------END A-- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8cbe2a67ee3284b9bdd416acf6034c38bc5e12cb b/fuzz/gnutls_set_trust_file_fuzzer.in/8cbe2a67ee3284b9bdd416acf6034c38bc5e12cb new file mode 100644 index 0000000000..ffda7f1f93 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/8cbe2a67ee3284b9bdd416acf6034c38bc5e12cb @@ -0,0 +1,2 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAAIOggABAANAA7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEiMzU5MDBaMHoxCzAJBgNVBACTAlVTMREwDwYDVHQEQwhOZXcgWW9yazEVMBMGA0UEBhwMRXN5ZWUgAWF1ZGVyMRQwEgYDVQQFEwtBUkFNSVMgST5DPjERMA8GA1UEFAMIPkVXPlFIUksxGDAWBgNVFAUTD9oubGFic3VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId1OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK5eJ8HAnGCk1q/pdAaYe/xd8B4M44CrNXuOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre3wXCGgiTfIjdRd3LAmTk2ZJIcCAwEaAoJsAMwNOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm0ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YgjmEUrPJ+5nPIUmw8moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6hvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1hshazhzDFdRPhQenNrbI4RTE/-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8cdfee5102219a3969d8ae9c7f1a2b9fc51983d8 b/fuzz/gnutls_set_trust_file_fuzzer.in/8cdfee5102219a3969d8ae9c7f1a2b9fc51983d8 new file mode 100644 index 0000000000..ade085a1fc --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/8cdfee5102219a3969d8ae9c7f1a2b9fc51983d8 @@ -0,0 +1,13 @@ +------BEGIN CERTIFICATED4-----BEi-----BEGIN X509 CRL-----MIEMMIEYMIEAMIEAGIEMMIEAMCIOCCFTCEIRMIG+MIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIfAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMCMCCIEIIDEAMIEvGIEMMIEAMCIOCCFTCEIRMIG+MIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEA----BEGIN QADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqA +5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPj0d0XqnaQzNpsL +4HRYEcUBe00= +-----END B-----BEGIN X509 CEFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE------B-----BEGINCERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGI CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIBEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BYGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEB[GIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BE IN CERTIFICATE-----B-----BEGINCERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----B{UN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X5-9 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGINCERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIBICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICA---BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICAT>-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN ----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERBEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----FEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B---------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE----------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B--TE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGMN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z- ----BEGIN CERTIFICATE-----B-----BEGIN CERTIFGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICAT>-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN ----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERBEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----FEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFI5ATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B---------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE----------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----#-BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGINCERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFI-----BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATEV------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 BERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BTIFICATE-----BEGIN X509 CERTIFICTE-Z CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z--BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICGTE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509E-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----TIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFITE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BCERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFIC-BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----TIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluQzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw02Mx +ADMzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB5N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +----00= +-----END CeATlbbb \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8cee0657601ea32482229df349c1e025693127e8 b/fuzz/gnutls_set_trust_file_fuzzer.in/8cee0657601ea32482229df349c1e025693127e8 new file mode 100644 index 0000000000..4fa18b3460 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/8cee0657601ea32482229df349c1e025693127e8 @@ -0,0 +1,3 @@ +M-----BEGIN CERTIFICATERMwEQYDVQQDFAoqLmdiLmdvLmtyMCATE-G4SI- -----END -----BEGIN CERTIFICATE---------%BEGIN CERTIFICATE-MDMxNlAUbWRxV-----BEGIN CERTIFICATE---------%BEGIN CERTIFICATE-MDMxNlAUbWRxVXB-----BEGIN X509 CERTIFICATEDLEReMH+eHLuqfM18VVyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHYtIdERTIFICATE----- +MIIDZzCCAtCgAwIBAQIDCwsxMA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMS0wKwYDVQQDEyRFcXVpZmF4IFNlY3VyZSBHbG9iYWwgZUJ1c2luZXNzIENBLTEwHhcNMDkwMzE4MTMwMzE1WhcNMTQwMzE4MTMwMzE1WjCB1jELMAkGA1UEBhMCTkwxJjAkBgNVBAoTHXBvcnRhYWwuZ291ZHNtaXQtbWFnbmV0aWNzLm5sMRMwEQYDVQQLEwpHVDM0MDMyNzQzMTEwLwYDVQQLMyhTZWUgd3d3LnJhcGlkc3NsLmNvbS9yZXNvdXJjZXMvY3BzIChjKTA5MS8wLQYDVQQLEyZEb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgLSBSYXBpZFNTTChSKTEmMCQGA0UEExMdcG9ydGFhbC5nb3Vkc21pdC1tYWduZXRpY3MubmwwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALcK0VV2IgUNrIItBa/UBIX4A/r14br2Povw4J3/yQjI+MueFR8N9IRoCQgktJ+nHiVSUwFXHmuil0I+JXsXgrHjlBWFFUSXHH8/5WTBDzNIfyY1Ymky7kpCzeZa7R9XLF+C2ENXg+Jf0zBy4gf3i941JpIdOhxyajnlQbcFIFNDAgMjAAGCgb0wgbowDgYDVR0PAQH/BAQDAgTwMB0GA1UdDgQWBBRnqhBS9VfvsC+vmJut5XgoCb6spTA7BgNVHR8ENDAyMDCgLqAshipodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL2dsb2JhbGNhMS5jcmwwHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCSAAwDQYJKoZIhvcNAQEFBQADgYEAHZlYx8nIB/+NXKR+gsH5QaGyxJLD46UabPiwFZh0nOAUTXpR9K8ZiYBWMtMh8WUM81qV3becix1P75mLCqqkt1Lvhg0pGWW4BQinHr06hGfk7bZmWWsjNM8ts32eZquU5qssVXyYBw9WHIa+rQLdLhEjTjPmSKe1gRMJtzQSDZk= +-----END CERTIFICATEAdDEY!FI \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8cf2aedd7a189b2d6ea7d5c2b2166ab36c802d49 b/fuzz/gnutls_set_trust_file_fuzzer.in/8cf2aedd7a189b2d6ea7d5c2b2166ab36c802d49 new file mode 100644 index 0000000000..e5b9c506b0 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/8cf2aedd7a189b2d6ea7d5c2b2166ab36c802d49 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8d24a5deab69170d55364702a0181fccff3e022a b/fuzz/gnutls_set_trust_file_fuzzer.in/8d24a5deab69170d55364702a0181fccff3e022a new file mode 100644 index 0000000000..7133b54c02 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/8d24a5deab69170d55364702a0181fccff3e022a @@ -0,0 +1,7 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/8e953204b4defa25661d0b32e16268e6ed5f7f4c b/fuzz/gnutls_set_trust_file_fuzzer.in/8e953204b4defa25661d0b32e16268e6ed5f7f4c new file mode 100644 index 0000000000..fcb3879c97 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/8e953204b4defa25661d0b32e16268e6ed5f7f4c differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/90047e57bc31ec1a8f437e0d24e470e1d2b6b308 b/fuzz/gnutls_set_trust_file_fuzzer.in/90047e57bc31ec1a8f437e0d24e470e1d2b6b308 new file mode 100644 index 0000000000..1727838ecc --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/90047e57bc31ec1a8f437e0d24e470e1d2b6b308 @@ -0,0 +1,4 @@ +s-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAACN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xmzA1MTEyMzU5MDBaMHoxCzAJBgNVBIYTAlVTMREwDwYDVPQHEwhOZXcgWW9yazEVMBMGA0UEChMMRXN0ZWUgTGF2ZGVyMRQwEgYDTQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECbMITkVXIFlPUksxGDAWBgNVBMAUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6L0VxLYSkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7f3t0YtIro4eHdxOZek0SztRdLXyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd4B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk3ZJIcCAwEAAaNsMGowOQYDVR5fBDIwMDAuoEygKpYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUJrP+5nPUmIw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFFdRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE------ +MAIwCA \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9056ff335dd584d2495084acd628a085a4bbfed8 b/fuzz/gnutls_set_trust_file_fuzzer.in/9056ff335dd584d2495084acd628a085a4bbfed8 new file mode 100644 index 0000000000..c47c05375a --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9056ff335dd584d2495084acd628a085a4bbfed8 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVAXBTAlVTMREwDwYDzQQHEwhOZXcgWW9yazEVMBMGA1UUChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQYEwtBUkFNSVMgSU5DLjERMA8GA1BMCUEITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic1VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM0DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9093d07023bebd03633b8b1f6c03b5857e51a257 b/fuzz/gnutls_set_trust_file_fuzzer.in/9093d07023bebd03633b8b1f6c03b5857e51a257 new file mode 100644 index 0000000000..60b12fc36b --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9093d07023bebd03633b8b1f6c03b5857e51a257 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE------BEGIN X509 CERTIFICATE------BEGIN X509 CRL------B-----END ! \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9234b8c5b0b77ea6cbaad77827ea9092f96e852b b/fuzz/gnutls_set_trust_file_fuzzer.in/9234b8c5b0b77ea6cbaad77827ea9092f96e852b new file mode 100644 index 0000000000..f764ced976 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9234b8c5b0b77ea6cbaad77827ea9092f96e852b @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTRAVvvvBAvAMGTvEGIVvL-----END o \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/92ed621fd99dce7f7868bdd651665fcee57b4bf8 b/fuzz/gnutls_set_trust_file_fuzzer.in/92ed621fd99dce7f7868bdd651665fcee57b4bf8 new file mode 100644 index 0000000000..6d461ad27d Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/92ed621fd99dce7f7868bdd651665fcee57b4bf8 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/93464b5d190273df522767a59f48d9f85b071de5 b/fuzz/gnutls_set_trust_file_fuzzer.in/93464b5d190273df522767a59f48d9f85b071de5 new file mode 100644 index 0000000000..11c546af67 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/93464b5d190273df522767a59f48d9f85b071de5 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/939c34ec77d09e293e3ad12f77d4778f6ee7f15c b/fuzz/gnutls_set_trust_file_fuzzer.in/939c34ec77d09e293e3ad12f77d4778f6ee7f15c new file mode 100644 index 0000000000..477e841cc2 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/939c34ec77d09e293e3ad12f77d4778f6ee7f15c differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/941b00f8d8944306b6b5a50bfcdc231c7f2ccab4 b/fuzz/gnutls_set_trust_file_fuzzer.in/941b00f8d8944306b6b5a50bfcdc231c7f2ccab4 new file mode 100644 index 0000000000..7ab65b83e5 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/941b00f8d8944306b6b5a50bfcdc231c7f2ccab4 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIJOTCCCCGgAwIBAgIQJLKw4khy2PBPIUz4a/KA2zANBgkqhkiG9w0BAQUFADCCARgxCzAJBgNVBAYTAkVTMTswOQYDVQQKEzJBZ2VuY2lhIENhdGFsYW5hIGRlIENlcnRpZmljYWNpbyAoTklGIFEtMDgwMTE3Ni1JKTE0MDIGA1UEBxMrUGFzc2F0Z2UgZGUgbGEgQ29uY2VwY2lvIDExIDA4MDA4IEJhcmNlbG9uYTEuMCwGA1UECxMlU2VydmVpcyBQdWJsaWNzIGRlIENlcnRpZmljYWNpbyBFQ1YtMjE1MDMGA1UECxMsVmVnZXUgaHR0cHM6Ly93d3cuY2F0Y2VydC5uZXQvdmVyQ0lDLTIgKGMpMDMxHzAdBgNVBAsTFlVuaXZlcnNpdGF0cyBpIFJlY2VyY2ExDjAMBgNVBAMTBUVDLVVSMB4XDTEyMDEyNjEyNTQxNVoXDTE0MDEyNjEyNTQwOFowggHlMQswCQYDVQQGEwJFUzEhMB8GA1UEChMYVW5pdmVyc2l0YXQgZGUgQmFyY2Vsb25hMT4wPAYDVQQLEzVBcmVhIGRlIFRlY25vbG9naWVzIGRlIGxhIEluZm9ybWFjaW8gaSBsYSBDb211bmljYWNpbzFAMD4GA1UECxQ3U2VydmVpcyBQ+mJsaWNzIGRlIENlcnRpZmljYWNp8yBDRFMtMSBTZXUgZGUgbml2ZWxsIG1pZzE4MDYGA1UECxMvVmVnZXUgaHR0cHM6Ly93d3cuY2F0Y2VydC5jYXQvdmVyQ0RTLTFTZXUgKGMpMDgxEzARBgNVBAMTCnNldS51Yi5lZHUxGzAZBgNVBA8TElYxLjAsIENsYXVzZSA1LihjKTEaMBgGCysGAQQBgjc8AgEBEwlCYXJjZWxvbmExGjAYBgsrBgEEAYI3PAIBAhMJQmFyY2Vsb25hMRMwEQYLKwYBBAGCNzwCAQMTAkVTMRIwEAYDVQQFEwlRMDgxODAwMUoxLDAqBgNVBAkTI0dyYW4gdmlhIGRlIGxlcyBjb3J0cyBjYXRsYW5lcywgNTg1MRIwEAYDVQQHEwlCYXJjZWxvbmExEjAQBgNVBAgTCUJhcmNlbG9uYTEOMAwGA1UEERMFMDgwMDcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC63zx5yvRfttWV4O0aHnvASHmcVXL+aO2MsXI9bNbmwEIZVTIdru+ZyOfZc/+Esh9xki5vpfFzCXFJawYHUPdzTwaViZIO9TQSYc93esqtAEY0Rf7B+TD0jfUWpFZiK1X+KbsnlZeN+h2qxpdzUcc/H10xf8mcZe6ZQv3Wv5Zw/VbfsQNar5swHfqZoJN3P0a4rwFgGMqxBknXLcUa4GEaJK254ohma619RGfKj8VuTD52HD6NdnSIt6arqwPZV7AMUSjVWr5Eev/1NN2nPPSQnx9oSNF6yqU95NqFc1I2sT6B+06ocfLnAuuRCNmqTtgrRTFr0XIg87rwPZhqSdIxAgMBAAGjggOsMIIDqDAcBgNVHRIEFTATgRFlY191ckBjYXRjZXJ0Lm5ldDCCARwGA1UdEQSCARMwggEPgRVzZXVlbGVjdHJvbmljYUB1Yi5lZHWCCnNldS51Yi5lZHWgAKSB5zCB5DEZMBcGCWCFVAEDBQECBRMKc2V1LnViLmVkdTE9MDsGCWCFVAEDBQECBBMuU2V1IGVsZWN0cvJuaWNhIGRlIGxhIFVuaXZlcnNpdGF0IGRlIEJhcmNlbG9uYTEYMBYGCWCFVAEDBQECAxMJUTA4MTgwMDFKMScwJQYJYIVUAQMFAQICExhVbml2ZXJzaXRhdCBkZSBCYXJjZWxvbmExRTBDBglghVQBAwUBAgETNkNlcnRpZmljYXQgZGUgc2V1IGVsZWN0cvJuaWNhLCBkZSBjbGFzc2UgMSwgbml2ZWxsIG1pZzAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwEQYJYIZIAYb4QgEBBAQDAgZAMB0GA1UdDgQWBBRMJNHsp2eWzlZX8h1cA0pgyqLkhDAfBgNVHSMEGDAWgBRIn42G0cvx1opSe38VogpR+Jf+CzCB9gYDVR0gBIHuMIHrMIHoBgwrBgEEAfV4AQMBMwIwgdcwLwYIKwYBBQUHAgEWI2h0dHBzOi8vd3d3LmNhdGNlcnQuY2F0L3ZlckNEUy0xU2V1MIGjBggrBgEFBQcCAjCBlhqBk0FxdWVzdCDpcyB1biBjZXJ0aWZpY2F0IGRlIHNldSBlbGVjdHLybmljYSBhbWIgY29uZm9ybWl0YXQgYW1iIGxhIGxsZWkgMTEvMjAwNywgZGUgY2xhc3NlIDEgaSBuaXZlbGwgbWlnLiBWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0LmNhdC92ZXJDRFMtMVNldTBuBggrBgEFBQcBAQRiMGAwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmNhdGNlcnQuY2F0MDkGCCsGAQUFBzAChi1odHRwOi8vd3d3LmNhdGNlcnQuY2F0L2Rlc2NhcnJlZ2EvdXJfY3Nycy5jcnQwJQYIKwYBBQUHAQMEGTAXMAgGBgQAjkYBATALBgYEAI5GAQMCAQ8wYAYDVR0fBFkwVzBVoFOgUYYmaHR0cDovL2Vwc2NkLmNhdGNlcnQubmV0L2NybC9lYy11ci5jcmyGJ2h0dHA6Ly9lcHNjZDIuY2F0Y2VydC5uZXQvY3JsL2VjLXVyLmNybDANBgkqhkiG9w0BAQUFAAOCAQEACEqkyn4qyUKVDcVE6gg8tsY6SHocvE9xtgEm5A0fe3R+Ibk6SCAsOBcxMkzSl/Qa+sYSRAYFySaYQSVKowLKoz/RnOkmXECpAHyOiDkggaYqcSgcNsBRrqfENHAQrEqaINB22YFf4nBGa0rIA9fM8vGBMrOrH9jjXQAaCuq2rcaW3ydKSw3fU82fiei/N3lZrpxXbRZ4ocqU+EmObE3h27xmb1r0aZIoa4FOjgqdKAaXFN6M1sP4vFh+R6ElGJG58HUQe4nz0yjDU2LIykVIvH3GfxJqyDykAa+MKDLhxL9n/83tDwmeWvhGUpfv/evSpXtIRccUJSjoHCOUSEx9Jg== +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/94bb689980a8dd1f0bbcba7e59342c9f3b04b7ca b/fuzz/gnutls_set_trust_file_fuzzer.in/94bb689980a8dd1f0bbcba7e59342c9f3b04b7ca new file mode 100644 index 0000000000..ec6304ba65 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/94bb689980a8dd1f0bbcba7e59342c9f3b04b7ca differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/94ef5c6362a39ee7f3c597ac125cb3cbbcc429dc b/fuzz/gnutls_set_trust_file_fuzzer.in/94ef5c6362a39ee7f3c597ac125cb3cbbcc429dc new file mode 100644 index 0000000000..ecade69b55 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/94ef5c6362a39ee7f3c597ac125cb3cbbcc429dc differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/95db4c8a8762c653682d1911c7d4cad53646eaac b/fuzz/gnutls_set_trust_file_fuzzer.in/95db4c8a8762c653682d1911c7d4cad53646eaac new file mode 100644 index 0000000000..ae8ed61a38 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/95db4c8a8762c653682d1911c7d4cad53646eaac @@ -0,0 +1,10 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-------BEGIN CERTIFICATE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CERTIFICATE----------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-----BE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CERTIFICATE----------BECATE-Z------BEGIN 9ERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CERTIFICATE----------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-----BE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CERTIFICATE----------BEGIN CERTIFICATE-----BREG NICETIFICATER-----BE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CERTIFICATE--RTIFICATE-----BEGIN CERTIFICATER-----BE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CGIN CERICATE-----BEGIN CERTIFICATER-----BE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CERTIFICATE----------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-----BE------BEGIN CERTIFICATE-Z------BECERTIFICATE----------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-----BEGIN X509 CRLT-E-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-----BEGIN X509 CERTIFICATEF----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHGwdCb3plbWFuMREwDwYDVQQKIwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/0aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+ +Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +------END -R0fBCKw9 NI-EN X509 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/96340fae1f30b88cc8cc3372093d4321b89adb22 b/fuzz/gnutls_set_trust_file_fuzzer.in/96340fae1f30b88cc8cc3372093d4321b89adb22 new file mode 100644 index 0000000000..6ccefbe5a5 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/96340fae1f30b88cc8cc3372093d4321b89adb22 @@ -0,0 +1,12 @@ +b CRLa: + +-----BEGIN CERTIFICATE----- +GFub:4d +-----BEGIN CERTIFICATE----- +9d:a4d +-----BEGIN CERTIFICATE-----b4CAQEwD24d +-----BEGIN CERTIFICATE----- +-----BEGIN CERTIFICATE--- +-----BEGIN CERTIFICATEY29sdG-----BEGIN CERTIFICATEluZR: b:0:-----BEGIN X509 CERTIFICATEEAaYe/xd8B4M44CruXNATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA0UECh4MBXN0GWUZgTF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UEFBMIPkVXPklIUFsxGDAWBgNVBAMTDyunaisrvleniStrgmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0iBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG8iYWxzaWduLm5ldC9Ba2FtYWlTdWizLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH17shazhzDFdRPhQenNrbI4RTE/ +-----END CD \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/963be85eea65eee78ee3b448a9c436cc36111233 b/fuzz/gnutls_set_trust_file_fuzzer.in/963be85eea65eee78ee3b448a9c436cc36111233 new file mode 100644 index 0000000000..99c56ed0c9 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/963be85eea65eee78ee3b448a9c436cc36111233 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/971bbdd65c438c29d5425d3be6a1b69dc725b67e b/fuzz/gnutls_set_trust_file_fuzzer.in/971bbdd65c438c29d5425d3be6a1b69dc725b67e new file mode 100644 index 0000000000..81e5f2d373 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/971bbdd65c438c29d5425d3be6a1b69dc725b67e @@ -0,0 +1 @@ +TCIMVvTJAVvvvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END NC------B--MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE----JAVvvvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C---vvvBAvAMGTVvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE----JAVvvvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C---vvvBAvAMGTVvTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRLEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE----JAVvvvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C---vvvBAvAMGTVvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE----JAVvvvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C---vvvBAvAMGTVvTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE! \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/971d3a13c0364ee409d3e68f18fdde91349206b0 b/fuzz/gnutls_set_trust_file_fuzzer.in/971d3a13c0364ee409d3e68f18fdde91349206b0 new file mode 100644 index 0000000000..8de0e2a74c --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/971d3a13c0364ee409d3e68f18fdde91349206b0 @@ -0,0 +1 @@ +TCIMVvTJAVvvvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE----JAVvvvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C---vvvBAvAMGTVvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE----JAVvvvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C---vvvBAvAMGTVvTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE! \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9739c0bb69e96f3d0956fea49d72f1bd7353540a b/fuzz/gnutls_set_trust_file_fuzzer.in/9739c0bb69e96f3d0956fea49d72f1bd7353540a new file mode 100644 index 0000000000..3f77edcd2a --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9739c0bb69e96f3d0956fea49d72f1bd7353540a @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoucbGF2iVyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/97a7bc9759e8f9199e1764e17ec5273f9dc20634 b/fuzz/gnutls_set_trust_file_fuzzer.in/97a7bc9759e8f9199e1764e17ec5273f9dc20634 new file mode 100644 index 0000000000..10b50fc6e7 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/97a7bc9759e8f9199e1764e17ec5273f9dc20634 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE CERTIFICATE----------END -----BE-----END +-----BEGIN X509 CERTIFICATE----------END -----BE-----END + \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/98bb08b11a66e9301e0ba3fd1151b8562f9baf1d b/fuzz/gnutls_set_trust_file_fuzzer.in/98bb08b11a66e9301e0ba3fd1151b8562f9baf1d new file mode 100644 index 0000000000..5d66fc9abd --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/98bb08b11a66e9301e0ba3fd1151b8562f9baf1d @@ -0,0 +1,13 @@ +b CRLa: + +-----BEGIN CERTIFICATE----- +GFub:4d +-----BEGIN CERTIFICATE----- +9d:a4d +-----BEGIN CERTIFICATE-----b4CAQEwD24d +-----BEGIN CERTIFICATE----- +MII:3d +-----BEGIN CERTIFICATE--- +-----BEGIN CERTIFICATEY29sdG-----BEGIN CERTIFICATEluZR: b:0:-----BEGIN X509 CERTIFICATEEAaYe/xd8B4M44CruXNATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA0UECh4MBXN0GWUZgTF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UEFBMIPkVXPklIUFsxGDAWBgNVBAMTDyunaisrvleStringmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0iBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG8iYWxzaWduLm5ldC9Ba2FtYWlTdWizLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH17shazhzDFdRPhQenNrbI4RTE/ +-----END CD \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/98f07684a577e110da68dd8799860327cf5457bf b/fuzz/gnutls_set_trust_file_fuzzer.in/98f07684a577e110da68dd8799860327cf5457bf new file mode 100644 index 0000000000..23f35f7684 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/98f07684a577e110da68dd8799860327cf5457bf @@ -0,0 +1,6 @@ +------BEGIN CERTIFICATEL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE8TIFICATE-----B-----BEGIN CERTIFICATE-----BEGIN------BEGIN CERTIFICATE-TTL-----B-----BEGIN CERTIFICATE--ERTT-----BEGIN CERTIFICATERTIFIC------BEGIN CERTIFICATE-ZTTL-----B-----BEGIN CERTIFICATE--TL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE8TIFICATERTL-----B-----BEGIN CERTIFICATE-----BEGIN------BEGIN CERTIFICATE-TTL-----B-----BEGIN CERTIFICATE--ERTTL-----B------BEGIN CERTIFICATE-----R------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmNcWUkxA5+FHkhkbOo+gNVBAMTDXd1dyX5Y5NzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/99672e11dc542ace0abd385f638bc823a91d0c86 b/fuzz/gnutls_set_trust_file_fuzzer.in/99672e11dc542ace0abd385f638bc823a91d0c86 new file mode 100644 index 0000000000..90275c2e35 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/99672e11dc542ace0abd385f638bc823a91d0c86 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE09 CER-----BEGIN X500 CRLTIFICATE -----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/996fc18109c771a5c15904c1e93f4a7e9067d11a b/fuzz/gnutls_set_trust_file_fuzzer.in/996fc18109c771a5c15904c1e93f4a7e9067d11a new file mode 100644 index 0000000000..b60151f555 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/996fc18109c771a5c15904c1e93f4a7e9067d11a @@ -0,0 +1,2 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAAIOggABAANAA7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEiMzU5MDBaMHoxCzAJBgNVBACTAlVTMREwDwYDVHQEQwhOZXcgWW9yazEVMBMGA0UEBhwMRXN5ZWUgAWF1ZGVyMRQwEgYDVQQFEwtBUkFNSVMgST5DPjERMA8GA1UEFAMIPkVXPlFIUksxGDAWBgNVFAUTD9oubGFic3VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId1OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK4eJ8HAnGCk1q/pdAaYe/xd8B4M44CrNXuOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre3wXCGgiTfIjdRd3LAmTk2ZJIcCAwEaAoFsBACTAlYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm0ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YgjmEUrPJ+5nPIUmw8moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6hvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1hshazhzDFdRPhQenNrbI4RTE/-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/99c1b64f2ba4f53ab5dcf6e2f7921ed89a1fe5d4 b/fuzz/gnutls_set_trust_file_fuzzer.in/99c1b64f2ba4f53ab5dcf6e2f7921ed89a1fe5d4 new file mode 100644 index 0000000000..bdbebc621a Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/99c1b64f2ba4f53ab5dcf6e2f7921ed89a1fe5d4 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9a39155173511cd7d614959cabf5c2f25301bb63 b/fuzz/gnutls_set_trust_file_fuzzer.in/9a39155173511cd7d614959cabf5c2f25301bb63 new file mode 100644 index 0000000000..ec8a74deee Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/9a39155173511cd7d614959cabf5c2f25301bb63 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9aa8eeae3c8b75e75628aba4beaf479e51a0c888 b/fuzz/gnutls_set_trust_file_fuzzer.in/9aa8eeae3c8b75e75628aba4beaf479e51a0c888 new file mode 100644 index 0000000000..51e1e2e834 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9aa8eeae3c8b75e75628aba4beaf479e51a0c888 @@ -0,0 +1 @@ +-----BEGIN X509 CERTIFI-----BEGIN CERTIFICATE09 CER-----BEGIN X509 CRLTI CATE-----END -- ----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9ad1b9e0b178eb913057633ca81e7a2d242d2b19 b/fuzz/gnutls_set_trust_file_fuzzer.in/9ad1b9e0b178eb913057633ca81e7a2d242d2b19 new file mode 100644 index 0000000000..ab82e4d5a7 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/9ad1b9e0b178eb913057633ca81e7a2d242d2b19 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9b8c4783b7a1097084a0c8184657a27e618e7010 b/fuzz/gnutls_set_trust_file_fuzzer.in/9b8c4783b7a1097084a0c8184657a27e618e7010 new file mode 100644 index 0000000000..0ebee31991 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9b8c4783b7a1097084a0c8184657a27e618e7010 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1WEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdB2aFtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYOAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END - \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9ba993f34420d1b65cf953272c78c129b602cab7 b/fuzz/gnutls_set_trust_file_fuzzer.in/9ba993f34420d1b65cf953272c78c129b602cab7 new file mode 100644 index 0000000000..14df885cb0 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9ba993f34420d1b65cf953272c78c129b602cab7 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIDZzCCAtCgAwIBAAIDCwsxMA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMS0wKwYDVQQDEyRFcXVpZmF4IFNlY3VyZSBHbG9iYWwgZUJ1c2luZXNzIENBLTEwHhcNMDkwMzE4MTMwMzE1WhcNMTQwMzE4MTMwMzE1WjCB1jELMAkGA1UEBhMCTkwxJjAkBgNVBAoTHXBvcnRhYWwuZ291ZHNtaXQtbWFnbmV0aWNzLm5sMRMwEQYDVQQLEwpHVDM0MDMyNzQzMTEwLwYDVQQLMyhTZWUgd3d3LnJhcGlkc3NsLmNvbS9yZXNvdXJjZXMvY3BzIChjKTA5MS8wLQYDVQQLEyZEb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgLSBSYXBpZFNTTChSKTEmMCQGA0UEExMdcG9ydGFhbC5nb3Vkc21pdC1tYWduZXRpY3MubmwwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALcK0VV2IgUNrIItBa/UBIX4A/r14br2Povw4J3/yQjI+MueFR8N9IRoCQgktJ+nHiVSUwFXHmuil0I+JXsXgrHjlBWFFUSXHH8/5WTBDzNIfyY1Ymky7kpCzeZa7R9XLF+C2ENXg+Jf0zBy4gf3i941JpIdOhxyajnlQbcFIFNDAgMjAAGBgb0DogwbwgYDVR0PAQH/BAQDAgTwMB0GA1UdDgQWBBRnqhBS9VfvsC+vmJut5XgoCb6spTA7BgNVHR8ENDAyMDCgLqAshipodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL2dsb2JhbGNhMS5jcmwwHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCSAAwDQYJKoZIhvcNAQEFBQADgYEAHZlYx8nIB/+NXKR+gsH5QaGyxJLD46UabPiwFZh0nOAUTXpR9K8ZiYBWMtMh8WUM81qV3becix1P75mLCqqkt1Lvhg0pGWW4BQinHr06hGfk7bZmWWsjNM4ts32eZquU5qssVXyYBw9WHIa+rQLdLhEjTjPmSKe1gRMJtzQSDZk= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9bad993c3cf916cbb7f965bccfa20a91efe346bd b/fuzz/gnutls_set_trust_file_fuzzer.in/9bad993c3cf916cbb7f965bccfa20a91efe346bd new file mode 100644 index 0000000000..7f642fb3de --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9bad993c3cf916cbb7f965bccfa20a91efe346bd @@ -0,0 +1,14 @@ +Certificate50:1 +-----BEGIN CERTIFICATE----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNv +bnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzAzMjxUODYyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2115dY2OTyPjLp74d35VQ29I1QjQe0d2XqnaQzNpsL +4HRYEcUBe00= +-----END C40:e7e:57:11::01:7 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9baf58bba8dcdd98bb99444c82943e85b15c468f b/fuzz/gnutls_set_trust_file_fuzzer.in/9baf58bba8dcdd98bb99444c82943e85b15c468f new file mode 100644 index 0000000000..a0c05595e3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9baf58bba8dcdd98bb99444c82943e85b15c468f @@ -0,0 +1,7 @@ +------BEGIN X509 CRLATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGINZ------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-RTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------B CERTIFICATE-----BEGIN CERTIFICATER-RTIIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGINZ------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-RTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE--GIN CATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9bfe0f4b9be96135fc172c75e0c26154e8395ab8 b/fuzz/gnutls_set_trust_file_fuzzer.in/9bfe0f4b9be96135fc172c75e0c26154e8395ab8 new file mode 100644 index 0000000000..d2bacff926 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/9bfe0f4b9be96135fc172c75e0c26154e8395ab8 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9dfa793c4da7824cf87ee6671c969d78c9dead5d b/fuzz/gnutls_set_trust_file_fuzzer.in/9dfa793c4da7824cf87ee6671c969d78c9dead5d new file mode 100644 index 0000000000..b2370eab90 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9dfa793c4da7824cf87ee6671c969d78c9dead5d @@ -0,0 +1 @@ +6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9dfc6eb0e7154e37717c0a8e42d001040039897d b/fuzz/gnutls_set_trust_file_fuzzer.in/9dfc6eb0e7154e37717c0a8e42d001040039897d new file mode 100644 index 0000000000..47e4d931a5 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9dfc6eb0e7154e37717c0a8e42d001040039897d @@ -0,0 +1,4 @@ +s-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAACN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xmzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYtAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF2ZGVyMRQwEgYDVQQFOwtBUkFNSVMgSU5DLjERMA8GA1UEBbMITkVXIFlPUksxGDAWBgNVBMAUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6L0VxLYSkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLXyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk3ZJIcCAwEAAaNsMGowOQYDVR5fBDIwMDAuoEygKpYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUJrP+5nPUmIw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFFdRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTI---- +MAIwCAGAEBh \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9e03d14f3b5b16cb7017c27aa6f7449ca73cd570 b/fuzz/gnutls_set_trust_file_fuzzer.in/9e03d14f3b5b16cb7017c27aa6f7449ca73cd570 new file mode 100644 index 0000000000..af90b5198e Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/9e03d14f3b5b16cb7017c27aa6f7449ca73cd570 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9e047fbd15ce1d8f05182e0b29d6c6d26dd69d76 b/fuzz/gnutls_set_trust_file_fuzzer.in/9e047fbd15ce1d8f05182e0b29d6c6d26dd69d76 new file mode 100644 index 0000000000..7de3e6de6e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9e047fbd15ce1d8f05182e0b29d6c6d26dd69d76 @@ -0,0 +1 @@ +CIM-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA5DTE4MwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-EGIvT(v-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA5DTE4MwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MzA5DTTEwM4uAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END - \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9e1c81195cba29121554f171fbcdcc768adf2d4d b/fuzz/gnutls_set_trust_file_fuzzer.in/9e1c81195cba29121554f171fbcdcc768adf2d4d new file mode 100644 index 0000000000..46e608f75f --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9e1c81195cba29121554f171fbcdcc768adf2d4d @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGINMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvnvQvTAAGIEMIvwwswwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C-----BEGIN ---BEGIN X509 CRL-----M---BEGI ---BEGIN X509 CRL-----M---BEGITVvTJAVL-AMGTVvTJAVL-----END C \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9e22f9f6ccd68d451101752ec5b3163cd8a42171 b/fuzz/gnutls_set_trust_file_fuzzer.in/9e22f9f6ccd68d451101752ec5b3163cd8a42171 new file mode 100644 index 0000000000..cdeadd27ef --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9e22f9f6ccd68d451101752ec5b3163cd8a42171 @@ -0,0 +1,18 @@ +Cert-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA0UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MdUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDZQQIDAZPcmVnb24xDjAMBgNBMAVcBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDyQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG4w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaP5cbt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6AARV +v/QPRFCaP5cbt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qVBAoMCkNsaWVudCBFQ0MxDTALBgNVBFsMBEZhc3QxGDAWBgNVBQMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb6DQEJARYQaW5mb0B3b2xmc3NsLmNvbYEJpOyId +p4THVdcMAwGA1TdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQon/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIDqWTi0t4V6szzz3w== +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9ed4a0e143abfa86edfae1b6cf302617df7d5fa3 b/fuzz/gnutls_set_trust_file_fuzzer.in/9ed4a0e143abfa86edfae1b6cf302617df7d5fa3 new file mode 100644 index 0000000000..7fd915335d --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9ed4a0e143abfa86edfae1b6cf302617df7d5fa3 @@ -0,0 +1,3 @@ +s-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAACN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xmzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhcWWZgXO9yazEVMBMGA1UEChMMXN0UZRgWTGF2ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVUXPlIFksxGDAWBgNVBMAUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6L0VxLYSkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLXyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk3ZJIcCAwEAAaNsMGowOQYDVR5fBDIwMDAuoEygKpYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUJrP+5nPUmIw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFFdRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CTE-----BMGIN CERATE-----BEGIN X50 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9ef769fac2a5576eb3afdf6d0604d5d6b9d9dd12 b/fuzz/gnutls_set_trust_file_fuzzer.in/9ef769fac2a5576eb3afdf6d0604d5d6b9d9dd12 new file mode 100644 index 0000000000..d98a6a6f2b Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/9ef769fac2a5576eb3afdf6d0604d5d6b9d9dd12 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9f1946221d7772ddc1652aa1aefd4bf6110284d8 b/fuzz/gnutls_set_trust_file_fuzzer.in/9f1946221d7772ddc1652aa1aefd4bf6110284d8 new file mode 100644 index 0000000000..e4f7bce907 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9f1946221d7772ddc1652aa1aefd4bf6110284d8 @@ -0,0 +1 @@ +CC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9f45bcb4330bc3561c766faeea78f84522f18a12 b/fuzz/gnutls_set_trust_file_fuzzer.in/9f45bcb4330bc3561c766faeea78f84522f18a12 new file mode 100644 index 0000000000..d3b537ea75 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/9f45bcb4330bc3561c766faeea78f84522f18a12 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9f9a56ef91acd652636ceaac6e46c9d0536464e3 b/fuzz/gnutls_set_trust_file_fuzzer.in/9f9a56ef91acd652636ceaac6e46c9d0536464e3 new file mode 100644 index 0000000000..e171c2b420 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9f9a56ef91acd652636ceaac6e46c9d0536464e3 @@ -0,0 +1,28 @@ +X509 +-----BEGIN CERTIFICATE----- +GFub:4d +-----BEGIN CERTIFICATE----- +9d:a4d +-----BEGIN CERTIFICATE--------BEGIN CERTIFICATE----- +MIIb:4d +-----BEGIN CERTIFICATE---- +--------BEGIN CERTIFICATE-TIFI------BEGIN CERTIFICATE-bWRxVXB-----BEGIN X509 CERTIFICATEDD--TEyMTV+auud2mWjMIFIC*ATICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYEJ +AOdypp4THRdcMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQol/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +--Jz5Qa1sknhnTAH13shazhzDFdRPhQenrNIT4RbE/ +-----END CERTIFI----EAIICFDCRYAM \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/9fdff01ea22f2a379fb39409a7ce71d12c8c08f5 b/fuzz/gnutls_set_trust_file_fuzzer.in/9fdff01ea22f2a379fb39409a7ce71d12c8c08f5 new file mode 100644 index 0000000000..a1c2bddde8 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/9fdff01ea22f2a379fb39409a7ce71d12c8c08f5 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNBVAYTAlVTMREwDwYDVQQHEwhOZXcgSU5DLjERMA8GA1UECB4ITkVXPlFUAksxGDAWBgNVBAMeDyoubGFic2VySVMgSU5DLjERMA8GA1UECB4ITkVXPlFUAksxGDAWBgNVBAMeDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIbdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenN2bI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a01f02de4416b6ea94a25957bb3e9f68e004498d b/fuzz/gnutls_set_trust_file_fuzzer.in/a01f02de4416b6ea94a25957bb3e9f68e004498d new file mode 100644 index 0000000000..8a9cdb39a2 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a01f02de4416b6ea94a25957bb3e9f68e004498d @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEghOZXcgWW9yazEVMBMGA0UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLMwtBUkFNSVMgSU5DLjERMA8GA1UEC8MITkVXIFlPUksxGDAWBgNVBAMVDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a065ff0951d4cc09d26b6a4a1ec778e6d99cd908 b/fuzz/gnutls_set_trust_file_fuzzer.in/a065ff0951d4cc09d26b6a4a1ec778e6d99cd908 new file mode 100644 index 0000000000..ddabf87abd Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/a065ff0951d4cc09d26b6a4a1ec778e6d99cd908 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a082d33dcaa75af1babaefeaf465cbf2e41741ec b/fuzz/gnutls_set_trust_file_fuzzer.in/a082d33dcaa75af1babaefeaf465cbf2e41741ec new file mode 100644 index 0000000000..223fef2ade Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/a082d33dcaa75af1babaefeaf465cbf2e41741ec differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a1913e7ed2b7a8801cedef0622869d202cd28a8b b/fuzz/gnutls_set_trust_file_fuzzer.in/a1913e7ed2b7a8801cedef0622869d202cd28a8b new file mode 100644 index 0000000000..8c8b481b1e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a1913e7ed2b7a8801cedef0622869d202cd28a8b @@ -0,0 +1,20 @@ +C-----BEGIN X509 CRLert +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZISvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0VBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA5UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNbvIYJ +AOdypp4THRdcMAwGA1UdEgQFMAOfB8AwCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQol/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END C \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a1b352ec904785c6b6cfb9208ac6a1159378efff b/fuzz/gnutls_set_trust_file_fuzzer.in/a1b352ec904785c6b6cfb9208ac6a1159378efff new file mode 100644 index 0000000000..50667813a5 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a1b352ec904785c6b6cfb9208ac6a1159378efff @@ -0,0 +1,6 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE -----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00=------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a1cf32a71a0f2b7af67e1a6a9ce3818ba7feff1b b/fuzz/gnutls_set_trust_file_fuzzer.in/a1cf32a71a0f2b7af67e1a6a9ce3818ba7feff1b new file mode 100644 index 0000000000..e4f6721c37 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/a1cf32a71a0f2b7af67e1a6a9ce3818ba7feff1b differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a1f466c7315556fda9f69a8ffd31924a9cb03dc7 b/fuzz/gnutls_set_trust_file_fuzzer.in/a1f466c7315556fda9f69a8ffd31924a9cb03dc7 new file mode 100644 index 0000000000..7e148a0577 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a1f466c7315556fda9f69a8ffd31924a9cb03dc7 @@ -0,0 +1,4 @@ +s-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAACN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xmzA1MTEyMzU5MDBaMHoxCzAJBgNVBIYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA0UEChMMRXN0ZWUgTGF2ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5jLDERMA8GA1UECbMITkVXIFlPUksxGDAWBgNVBMAUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6L0VxLYSkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLXyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk3ZJIcCAwEAAaNsMGowOQYDVR5fBDIwMDAuoEygKpYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUJrP+5nPUmIw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFFdRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE------ +MAIwCA \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a2dad769d3b1f154a2d25d0824607f056350a484 b/fuzz/gnutls_set_trust_file_fuzzer.in/a2dad769d3b1f154a2d25d0824607f056350a484 new file mode 100644 index 0000000000..ca53ccc466 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a2dad769d3b1f154a2d25d0824607f056350a484 @@ -0,0 +1,18 @@ +Cer: +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA0UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZPcmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllQDnbRNUgMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaP6cbt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZYdvbjEOMAwGA1UEBwwFU2FsZW0xEzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYEJpOyId +p4THRdcMAwGA2UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQon/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a2e13e6276ac74989515e53018ad6b686d44633f b/fuzz/gnutls_set_trust_file_fuzzer.in/a2e13e6276ac74989515e53018ad6b686d44633f new file mode 100644 index 0000000000..231e92f259 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a2e13e6276ac74989515e53018ad6b686d44633f @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVv5FAVwvvvQvTAAFw2xMzA0LTEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----RNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----w2xMzIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a3dbeb34cb6497697d688c261c950abe272dfc8f b/fuzz/gnutls_set_trust_file_fuzzer.in/a3dbeb34cb6497697d688c261c950abe272dfc8f new file mode 100644 index 0000000000..a1debf5779 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/a3dbeb34cb6497697d688c261c950abe272dfc8f differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a491deaddeaa9ab4c3a4c998470402a85936bc11 b/fuzz/gnutls_set_trust_file_fuzzer.in/a491deaddeaa9ab4c3a4c998470402a85936bc11 new file mode 100644 index 0000000000..9f78b416ab --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a491deaddeaa9ab4c3a4c998470402a85936bc11 @@ -0,0 +1,3 @@ +MRMwEQYDVQQDFAoqLmdiLmdvLmtyMCATE-G4SI- -----END -----BEGIN CERTIFICATE---------%BEGIN CERTIFICATE-MDMxNlAUbWRxV-----BEGIN CERTIFICATE---------%BEGIN CERTIFICATE-MDMxNlAUbWRxVXB-----BEGIN X509 CERTIFICATEDLEReMH+eHLuqfM18VVyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHYtIdERTIFICATE----- +MIIDZzCCAtCgAwIBAQIDCwsxMA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMS0wKwYDVQQDEyRFcXVpZmF4IFNlY3VyZSBHbG9iYWwgZUJ1c2luZXNzIENBLTEwHhcNMDkwMzE4MTMwMzE1WhcNMTQwMzE4MTMwMzE1WjCB1jELMAkGA1UEBhMCTkwxJjAkBgNVBAoTHXBvcnRhYWwuZ291ZHNtaXQtbWFnbmV0aWNzLm5sMRMwEQYDVQQLEwpHVDM0MDMyNzQzMTEwLwYDVQQLMyhTZWUgd3d3LnJhcGlkc3NsLmNvbS9yZXNvdXJjZXMvY3BzIChjKTA5MS8wLQYDVQQLEyZEb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgLSBSYXBpZFNTTChSKTEmMCQGA0UEExMdcG9ydGFhbC5nb3Vkc21pdC1tYWduZXRpY3MubmwwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALcK0VV2IgUNrIItBa/UBIX4A/r14br2Povw4J3/yQjI+MueFR8N9IRoCQgktJ+nHiVSUwFXHmuil0I+JXsXgrHjlBWFFUSXHH8/5WTBDzNIfyY1Ymky7kpCzeZa7R9XLF+C2ENXg+Jf0zBy4gf3i941JpIdOhxyajnlQbcFIFNDAgMjAAGCgb0wgbowDgYDVR0PAQH/BAQDAgTwMB0GA1UdDgQWBBRnqhBS9VfvsC+vmJut5XgoCb6spTA7BgNVHR8ENDAyMDCgLqAshipodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL2dsb2JhbGNhMS5jcmwwHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCSAAwDQYJKoZIhvcNAQEFBQADgYEAHZlYx8nIB/+NXKR+gsH5QaGyxJLD46UabPiwFZh0nOAUTXpR9K8ZiYBWMtMh8WUM81qV3becix1P75mLCqqkt1Lvhg0pGWW4BQinHr06hGfk7bZmWWsjNM8ts32eZquU5qssVXyYBw9WHIa+rQLdLhEjTjPmSKe1gRMJtzQSDZk= +-----END CERTIFICATEAdDEYMFI \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a4d0339d5f1e1b67274a5e1a7bd090acee51e179 b/fuzz/gnutls_set_trust_file_fuzzer.in/a4d0339d5f1e1b67274a5e1a7bd090acee51e179 new file mode 100644 index 0000000000..7eefd1339d Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/a4d0339d5f1e1b67274a5e1a7bd090acee51e179 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a58701d590b80ad9f0430fdc5070b404e0685cf9 b/fuzz/gnutls_set_trust_file_fuzzer.in/a58701d590b80ad9f0430fdc5070b404e0685cf9 new file mode 100644 index 0000000000..0a906f883e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a58701d590b80ad9f0430fdc5070b404e0685cf9 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE09 CER-----BEGIN X FICATE-----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a5d6c9c0c5cab7271a04aec0bc6b71f273e9b1d7 b/fuzz/gnutls_set_trust_file_fuzzer.in/a5d6c9c0c5cab7271a04aec0bc6b71f273e9b1d7 new file mode 100644 index 0000000000..bd67d9de44 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a5d6c9c0c5cab7271a04aec0bc6b71f273e9b1d7 @@ -0,0 +1 @@ +-----BEGIN X509 CRLC----------END DDDD-----BEGIN CERTIFICATED----------END D-----BEGIN X509 CERTIFICATEDD----------END D \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a684798708c7b84f8a5581be36c5ccd32a43aa77 b/fuzz/gnutls_set_trust_file_fuzzer.in/a684798708c7b84f8a5581be36c5ccd32a43aa77 new file mode 100644 index 0000000000..d2c3a67f48 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/a684798708c7b84f8a5581be36c5ccd32a43aa77 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a68e452a668da9a98d2eaa5ed46470d8b6b47f12 b/fuzz/gnutls_set_trust_file_fuzzer.in/a68e452a668da9a98d2eaa5ed46470d8b6b47f12 new file mode 100644 index 0000000000..1c5425b5fc Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/a68e452a668da9a98d2eaa5ed46470d8b6b47f12 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a6ae0066ba8a27ddfaade1d57b9f8e309c20a57e b/fuzz/gnutls_set_trust_file_fuzzer.in/a6ae0066ba8a27ddfaade1d57b9f8e309c20a57e new file mode 100644 index 0000000000..df670727b7 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/a6ae0066ba8a27ddfaade1d57b9f8e309c20a57e differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a89dbb1ad1aa6c1369d4fd26c4012406cb1c550f b/fuzz/gnutls_set_trust_file_fuzzer.in/a89dbb1ad1aa6c1369d4fd26c4012406cb1c550f new file mode 100644 index 0000000000..bf50b6c72f --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a89dbb1ad1aa6c1369d4fd26c4012406cb1c550f @@ -0,0 +1,7 @@ +------BEGIN X509 CRLTE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvbw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw02MAx +DMzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU1wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a9027d32a91fe58041c6e5715b555b173a4427a1 b/fuzz/gnutls_set_trust_file_fuzzer.in/a9027d32a91fe58041c6e5715b555b173a4427a1 new file mode 100644 index 0000000000..1c33df2d88 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/a9027d32a91fe58041c6e5715b555b173a4427a1 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a9186c7047a020e9f452791892b70c6008aadf33 b/fuzz/gnutls_set_trust_file_fuzzer.in/a9186c7047a020e9f452791892b70c6008aadf33 new file mode 100644 index 0000000000..ece53bd158 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a9186c7047a020e9f452791892b70c6008aadf33 @@ -0,0 +1,2320 @@ +CCXN X509A-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMB9 CRL-----MIIAwwwugCTAkMBCC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIEGCEIRNTCGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BERNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMB9 CRL-----MIIAwwwugCTAkMBEGCEIRNTCGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCMVvTJAVvvvBAvAMGTVvTJAVL-----END ----7 RL-EIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGCCXN X509A-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGINTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMB9 CRL-----MIIAwwwugCTAkMBEGCEIRNTCGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END IN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END vvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGINTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--!--BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMB9 CRL-----MIIAwwwugCTAkMBEGCEIRNTCGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END IN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvCAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X127 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END IN X50VvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvCAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X127 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END E4MDYGA1UEAxMU3RhcnRDb20gQ2x5IEludGVybWVkaWF0ZSBTZXJ2ZXIgQ0EwHhcNMTIxMTEzMDI0ODQ2WhcNMTMxMTEzMjEzNjAyWjBnMRkwFwYDVQQNExAwOE5RV09FVGZuZWFScDAxVXB-----BEGIN X509 CERTIFICATEmTE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN4o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBgx4v00JViOi3GjiUKZFBEMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwLTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAQTAlVTMREwDwYDVQQHEwhOZXcgWW9cazEVMBMGA1UEChMMRXN0ZaUgTGF1ZGVyMRQwEgYDVQALEwtBUkFNSVMgSU5DLjERMA8GA1UECBAIAiOgAswBIgAxGDAWBgNVBAMeDzAJBgNVATVBYATdRNlvbTCBnzANBgkqhkiG4w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdOx0keZSztRdLUyI2NotSRocfK4eJ8HAnGCk2q/pdAaYe/xd6B4M44CruXNOM2DsE4uhUKxbuCJdFYmcxjHAUFbTre2wXCGgiITdjfRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWdyLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUr4J+6nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG1vEgkgA0LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGQvbr7IlMgSU5DLjEAdMGFR8AYmxcjHAxfAnN7javsrFdFRj0IbJz5Qa1sknhnTAD13shazhzDFdRPhQenrNIT4RbE/ +-----END CE++hd3Rvb3RoLWNv +bnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END CER4d +-----BEGIN CERTIFICATE----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---vAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNUEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRY-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1hMzA1MTEyMzU5MDBaMHoxCzAJBgNRBAyTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA0UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVSQLEwtBUkFNSVMgSU5DLjERMA8GA0UECBMITkVXIFlPUksxGDAWBgNVRAMNDyoubGFic2VzVNLyWamvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOE2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2XJIcCAwEAAaNsMGowOQYDVR0SBDIwMKcuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ8EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0TAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj5IbJz5Qa1sknhnTAH13shazhzDFdRnhNrPQebI4RTE/-----BE! N CERTIFICATE +-----END CIN CERTIF---RTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFI6ATEATE----GI CERTIFICATE----------BEGIN CERTIFICATE-NE---E-------BEGIN CERTIFICATE-----BEGN C@RTIFICATEV------BEGIN CERTIFCATE-----BEGIN CERTIICATER------BEGIN CERTIFICATE-CATE-------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGI CERTIFICATETE----------BEGIN CERTIFICATE-----( +MI|IFICATE--ASk-E-----*BEGINCERRTIFIC1TE------BEGIN CERTIFICATE--TIFICATEU---7--BEGIN CERTIFICATE----#-BEGIN CERTIFICATEATE------BEGIN CERTIFICATE---------BEGIN CERTIFICATE-NE--- -------BEGIN CERTIFICATE-----BEGN CERTIFICATEV-----BEGIN CERTIFICATE-----BEGIN CdRTIFICATER------BEGIN CERTIFICAT------BEGIN CERTIFICATE------BEG-ATE----BEGIN CERT--BE-------------BEGIN CERTIFICATE-----( +MI|IFICETE--ASk-----BEGIN CERTIFICATEIEGIN CERTIFICATE:b----- MIIDCTCCAq+g-MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwww \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/a96976783562ee52e7c66656ed2ee77b6ff05419 b/fuzz/gnutls_set_trust_file_fuzzer.in/a96976783562ee52e7c66656ed2ee77b6ff05419 new file mode 100644 index 0000000000..ab8acf3657 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/a96976783562ee52e7c66656ed2ee77b6ff05419 @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --X509L- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ab02f1f014d109135eeacaea6463c915812d0488 b/fuzz/gnutls_set_trust_file_fuzzer.in/ab02f1f014d109135eeacaea6463c915812d0488 new file mode 100644 index 0000000000..ceeefa3409 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/ab02f1f014d109135eeacaea6463c915812d0488 @@ -0,0 +1,12 @@ +C-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0r +MDA2MzAxODUyMTdaFw1xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ab0d213a81c23f2d1cff66fdb1577d11fad640b1 b/fuzz/gnutls_set_trust_file_fuzzer.in/ab0d213a81c23f2d1cff66fdb1577d11fad640b1 new file mode 100644 index 0000000000..3b730bea62 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ab0d213a81c23f2d1cff66fdb1577d11fad640b1 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ab64e3c3445b2f59a811bbe1c543b563d993b969 b/fuzz/gnutls_set_trust_file_fuzzer.in/ab64e3c3445b2f59a811bbe1c543b563d993b969 new file mode 100644 index 0000000000..e535e72d35 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ab64e3c3445b2f59a811bbe1c543b563d993b969 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ac0efc9894b8c835155b38f45951fb93db423302 b/fuzz/gnutls_set_trust_file_fuzzer.in/ac0efc9894b8c835155b38f45951fb93db423302 new file mode 100644 index 0000000000..6ee026823d Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ac0efc9894b8c835155b38f45951fb93db423302 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ad5da6a4878f6092a380a9884755d54b3ffbf167 b/fuzz/gnutls_set_trust_file_fuzzer.in/ad5da6a4878f6092a380a9884755d54b3ffbf167 new file mode 100644 index 0000000000..e2c370f541 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/ad5da6a4878f6092a380a9884755d54b3ffbf167 @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC7DCCApagAwIBAgIJAKBIQJVDXWL5MA0GCSqGSIb3DQEBBAUAMIHHMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEm +MCQGA1UECgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsM +C0VuZ2luZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1i +aW5nLmJpejEoMCYGCSqGSIb3DQEJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJp +ejAeFw0xNDAzMTMxNjUyMzRaFw0xNjEyMDcxNjUyMzRaMIHHMQswCQYDVQQGEwJV +UzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEmMCQGA1UE +CgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsMC0VuZ2lu +ZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1iaW5nLmJp +ejEoMCYGCSqGSIb3DQEJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJpejBcMA0G +CSqGSIb3DQEBAQUAA0sAMEgCQQDicEBO1u+ysy7iakWAewKMYPKwzY6Oaq+FUopr +SIjgrX8JIV5gnnvT0HrV/Ju2t4sBy41rZc50cqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LDLWrQZjw5usbSedJdAzAfBgNVHSMEGDAWgBQYkZqEi8LD +LWrQZjw5usbSedJdAzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIF4DAN +BgkqhkiG9w0BAQQFAANBAEU0nmhsV0h59xJIHESZPqGj7LYEoSnyZ8/vs+KBJmhm +A8XaCALu1m2CWCrW5wjqSGbbqQfy9vFqsnNX+Qt9KiU= +-----END CERTIFICATE----- diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ad634bffbf15562c4bcb8d54f241af8217365e53 b/fuzz/gnutls_set_trust_file_fuzzer.in/ad634bffbf15562c4bcb8d54f241af8217365e53 new file mode 100644 index 0000000000..335b28b50d Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ad634bffbf15562c4bcb8d54f241af8217365e53 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ae32de7c1724e3ba01a7cb4503e0463d0f60ad25 b/fuzz/gnutls_set_trust_file_fuzzer.in/ae32de7c1724e3ba01a7cb4503e0463d0f60ad25 new file mode 100644 index 0000000000..18999b7f92 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/ae32de7c1724e3ba01a7cb4503e0463d0f60ad25 @@ -0,0 +1 @@ +6----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xM-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-MGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCOIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X170141183460469231731687303715884105727 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL---------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEG \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ae3e6f6b27a0f6026b4e86cff5bf128d0cee0307 b/fuzz/gnutls_set_trust_file_fuzzer.in/ae3e6f6b27a0f6026b4e86cff5bf128d0cee0307 new file mode 100644 index 0000000000..36f3441e46 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/ae3e6f6b27a0f6026b4e86cff5bf128d0cee0307 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIDFzCCAf+gAwIBAgIQULLJCQBVaQHy/mPxuTLMbzANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJLUjEcMBoGA1UEChMTR292ZXJubWVudCBvZiBLb3JlYTENMAsGA1UECxMER1BLSTEUMBIGA1UEAxMLQ0ExMzEwMDAwMDEwHhcNMTIxMTI2MDE0MjMzWhcNMTQxMjIzMTExMDM4WjBaMQswCQYDVQQGEwJLUjEcMBoGA1UECnMTR292ZXJubWVudCBvZiBLb 3JlYTEYMBYGA0UECxMPR3JvdXAgb2YgU2VydmVyMRMwEQYDQVQFDAoqLmdiLmdvLmtyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDESZPlI6qK96ZjS3/WcaioRVGMEyLNZqUC/MZYDDMsYYGh9xMwlLZxwO+ILvlj5+aqFYY+VNX6cnDW1/oh1a8/18gWuiib81E2JHNYN4j98B+c0wamFzjziTjdpK2IE3UUhmLm9/vdDdLZQOIth3WemjL7ci7nE1oLVZ0sEwFfeQIDAQABo2cwZTAfBgNVHSMEGDAWgBQBzxeuBI2HzLdVC3Fsa0ic5rGylTAdBgNVHQ4EFgQUcNeoh26T6q2+7aDkxAEwXdJsyP0wDgYDVR0PAQH/BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBBQUAA4IBAQAnEYMG65umpZQuSDqUP2VcKvTfPIK4n0D2fak9eNlRfAst75v6JsMqWokIg1b1aZsgljiQysENSMdxRWNywU9rl8rwLoeNzdaj2/AQhy24GPdOM/R3/aQDFWbmTE0FrAruMUc3QAfPCfhusdyLQkBsX4r5t4S9QX1CwQtSwW63f+Oi8VxbEXf5zSSozllHeA7dElIf8m1s9ZyqfQ4VLGmPXZyKbns5K16Qgkh7MThTMl1HnsUYf7zGxoRNfCm0M7C7UXWNWM8RGaZVRmT1w0GZgV7TnkcbB/0YT8GUljVHpyQxHb8n1JxjHgSliTcD6Q7Uo0Ol/XGInY7oyS9fRp2S +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/aeb1bf68ce35d49c22916c1302c2d240bdc96fc5 b/fuzz/gnutls_set_trust_file_fuzzer.in/aeb1bf68ce35d49c22916c1302c2d240bdc96fc5 new file mode 100644 index 0000000000..fcabb5c935 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/aeb1bf68ce35d49c22916c1302c2d240bdc96fc5 @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END ------BEGIN X509 CRL- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b19642e658cc51725256a4ec6bf5bab32b3b7653 b/fuzz/gnutls_set_trust_file_fuzzer.in/b19642e658cc51725256a4ec6bf5bab32b3b7653 new file mode 100644 index 0000000000..3524290dd1 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b19642e658cc51725256a4ec6bf5bab32b3b7653 @@ -0,0 +1,5 @@ +------BEGIN CERTI----B-----BEGIN CERTIFICATE------FICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATEl-------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE----------BEGIN CERTb------BEGIN CERTIFICATE-----BEGIN CEFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATER------BEGIN CERTIFICATE------BN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B--ATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE------FICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN-BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATEl-------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE----------BEGIN CERTb------BEGIN CERTIFICATE-----BEGIN CERTIFICATEY30sdG-----BEGIN CERTIFICATEZW-----BEGIN X509 CERTIFICATEEE----ATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNBVAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECB4ITkVXPlFUIksxGDAWBgNVBAMeDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIbdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CBzCAGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWAQUFBwEBBwSAJCYwJBD +MIEAGIEazgMwwwwwwwAAOC \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b1a17008e5649023fc1fa7d94914e4683945f125 b/fuzz/gnutls_set_trust_file_fuzzer.in/b1a17008e5649023fc1fa7d94914e4683945f125 new file mode 100644 index 0000000000..02e31832ba --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b1a17008e5649023fc1fa7d94914e4683945f125 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b23a89a19a6a7f015f6a5d88b9ddba3c6652b706 b/fuzz/gnutls_set_trust_file_fuzzer.in/b23a89a19a6a7f015f6a5d88b9ddba3c6652b706 new file mode 100644 index 0000000000..f8c75968f0 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b23a89a19a6a7f015f6a5d88b9ddba3c6652b706 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIDZzCCAtCgAwIBAAIDCwsxMA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMS0wKwYDVQQDEyRFcXVpZmF4IFNlY3VyZSBHbG9iYWwgZUJ1c2luZXNzIENBLTEwHhcNMDkwMzE4MTMwMzE1WhcNMTQwMzE4MTMwMzE1WjCB1jELMAkGA1UEBhMCTkwxJjAkBgNVBAoTHXBvcnRhYWwuZ291ZHNtaXQtbWFnbmV0aWNzLm5sMRMwEQYDVQQLEwpHVDM0MDMyNzQzMTEwLwYDVQQLMyhTZWUgd3d3LnJhcGlkc3NsLmNvbS9yZXNvdXJjZXMvY3BzIChjKTA5MS8wLQYDVQQLEyZEb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgLSBSYXBpZFNTTChSKTEmMCQGA0UEExMdcG9ydGFhbC5nb3Vkc21pdC1tYWduZXRpY3MubmwwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALcK0VV2IgUNrIItBa/UBIX4A/r14br2Povw4J3/yQjI+MueFR8N9IRoCQgktJ+nHiVSUwFXHmuil0I+JXsXgrHjlBWFFUSXHH8/5WTBDzNIfyY1Ymky7kpCzeZa7R9XLF+C2ENXg+Jf0zBy4gf3i941JpIdOhxyajnlQbcFIFNDAgMjAAGCgb0GgbowDgYDVR0PAQH/BAQDAgTwMB0GA1UdDgQWBBRnqhBS9VfvsC+vmJut5XgoCb6spTA7BgNVHR8ENDAyMDCgLqAshipodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL2dsb2JhbGNhMS5jcmwwHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCSAAwDQYJKoZIhvcNAQEFBQADgYEAHZlYx8nIB/+NXKR+gsH5QaGyxJLD46UabPiwFZh0nOAUTXpR9K8ZiYBWMtMh8WUM81qV3becix1P75mLCqqkt1Lvhg0pGWW4BQinHr06hGfk7bZmWWsjNM8ts32eZquU5qssVXyYBw9WHIa+rQLdLhEjTjPmSKe1gRMJtzQSDZk= +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b243e4ab78b4fa1e98199154c5c2cd21438795e4 b/fuzz/gnutls_set_trust_file_fuzzer.in/b243e4ab78b4fa1e98199154c5c2cd21438795e4 new file mode 100644 index 0000000000..63749e7b39 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b243e4ab78b4fa1e98199154c5c2cd21438795e4 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE0-----BEGIN X509 CERTIFICATE-----BEGIN X509 CRL----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b2c23faf0e97246608c28955ea421b478957120a b/fuzz/gnutls_set_trust_file_fuzzer.in/b2c23faf0e97246608c28955ea421b478957120a new file mode 100644 index 0000000000..6a0dafafd9 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b2c23faf0e97246608c28955ea421b478957120a @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIE6jCCBFOgAwIBAgIDEIGKMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwNDAxMjMwMDE0WhcNMTUwNzAzMDQ1MDAwWjCBjzEpMCcGA1UEBRMgMmc4YU81d0kxYktKMlpENTg4VXNMdkRlM2dUYmc4RFUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm0ybmlhMRIwEAYDVQQHEwlTdW5ueXZhbGUxFDASBgNVBAoTC1lhaG9vICBJbmMuMRYwFAYDVQQDEw13d3cueWFob28uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6ZM1jHCkL8rlEKse1riTTxyC3WvYQ5m34TlFK7dK4QFI/HPttKGqQm3aVB1Fqi0aiTxe4YQMbd++jnKtdjxcpi7sJlFxjMZs4umr1eGo2KgTgSBAJyhxo23k+VpK1SprdPyM3yEfQVdV7JWC4Y71CE2nE6+GbsIuhk/to+jJMO7jXx/430jvo8vhNPL6GvWe/D6ObbnxS72ynLSdmLtaltykOvZEZiXbbFKgIaYYmCgh89FGVvBkUbGM/Wb5Voiz7ttQLLxKOYRj8MdkTZtzPkM9scIFG1naECPvCxw0NyMyxY3nFOdjUKJ79twanmfCclX2ZO/rk1CpiOuwlrrr/QIDAQABo4ICDjCCAgowDgYDVR0PAQH/BAQDAgTwMB0GA1UdDgQWBBSmrfKs68m+dDUSf+S7xJrQ/FXAlzA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDCCAVsGA1UdEQSCAVIwggFOgg13d3cueWFob28uY29tggl5YWhvby5jb22CDHVzLnlhaG9vLmNvbYYMa3IueWFob28uY29tgxg1ay55YWhvby5jb22IDGllLnlhaG9vLmNvbYIMZnIueWFob28uY29tggxpbi55YWhvby5jb22CDGNhLnlhaG9vLmNvbYIMYnIueWFob28uY29tggxkZS55YWhvby5jb22CDGVzLnlhaG9vLmNvbYIMbXgueWFob28uY29tggxpdC55YWhvby5jb22CDHNnLnlhaG9vLmNvbYIMaWQueWFob28uY29tggxwaC55YWhvby5jb22CDHFjLnlhaG9vLmNvbYIMdHcueWFob28uY29tggxoay55YWhvby5jb22CDGNuLnlhaG9vLmNvbYIMYXUueWFob28uY29tggxhci55YWhvby5jb22CDHZuLnlhaG9vLmNvbTAfBgNVHSMEGDAWgBRI5mj5K9KylddH2CMgEE8zmJCf1DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEAp9WOMtcDMM5T0yfPecGv5QhHRJZRzgeMPZitLksr1JxxicJrdgv82NWq1bw8aMuRj47ijrtaTEWXaCQCy00yXodDzoRJVNoYIvY1arYZf5zv9VZjN5I0HqUc39mNMe9XdZtbkWE+K6yVh6OimKLbiznainu9YTrN/4P/w6KzHho= +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b3c4d7a18581731e95a78710f7525f233c06f451 b/fuzz/gnutls_set_trust_file_fuzzer.in/b3c4d7a18581731e95a78710f7525f233c06f451 new file mode 100644 index 0000000000..6eeb767c5c --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b3c4d7a18581731e95a78710f7525f233c06f451 @@ -0,0 +1,20 @@ +rt +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZISvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDRR0RBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA5UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEMGOwAA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudFBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNbvIYJ +AOdypp4THRdcMAwGA1UdEgQFMAOBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQol/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END C \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b410388a7e19829e770bec1379064700c7d511ff b/fuzz/gnutls_set_trust_file_fuzzer.in/b410388a7e19829e770bec1379064700c7d511ff new file mode 100644 index 0000000000..88918a6944 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b410388a7e19829e770bec1379064700c7d511ff @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVTvJJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----vQTMGTVvTJAVL--AV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----vQTMGTVvTJAVL-----BIMVvTJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END LN X \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b41cc8efb8143cf60959597fe9d32ed5c95d9d41 b/fuzz/gnutls_set_trust_file_fuzzer.in/b41cc8efb8143cf60959597fe9d32ed5c95d9d41 new file mode 100644 index 0000000000..9da1b700ef --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b41cc8efb8143cf60959597fe9d32ed5c95d9d41 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQFEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b4553b56060b62f9dd0d4b9ea67526993d4d9024 b/fuzz/gnutls_set_trust_file_fuzzer.in/b4553b56060b62f9dd0d4b9ea67526993d4d9024 new file mode 100644 index 0000000000..dc404ee80c Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/b4553b56060b62f9dd0d4b9ea67526993d4d9024 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b54ae9a6ec28a39f2fc70740036f4c3a7c042c73 b/fuzz/gnutls_set_trust_file_fuzzer.in/b54ae9a6ec28a39f2fc70740036f4c3a7c042c73 new file mode 100644 index 0000000000..155ee124bc --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b54ae9a6ec28a39f2fc70740036f4c3a7c042c73 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----E-----BEGIN CERTIFICATER-----BEGIN CERTIFICATET------BEGIN X509 CERTIFICATEEE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA2UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBQZWNobm8sb2dpZXjMS5gWMSAwHgYDVQQDExdBa1FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNXBAQeAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UECh4MNBZXE0MF2AG1ZGVyMRQwEgYDVHQLEwtBnNrbI4RTE/5DLjERMIEAMIEAMIEAMIEAMIEAMAAxGDAWBgNVBQMeD9ourGFic2VyaWVzLNmvbTCBnzANBgkqhkiG0w0BAQEFAAOBjQAwgYkCgYEA6LVYL0kSxId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4xdHeOZek0SztRdLUyI7NotSRocfK7eJ9HAnkCG1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAoyCugKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm3ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw4moUXvcwDgYDVR0TAQH/BAQwAgLgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI0NPvGbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7jamsrFdFRj0IbJz5Qa1sknhnTA1H2shazhzDFdRPhQenNrbI4RTE/ +-----END 1UECh4MBXZMR \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b6944be82deebed2c2b62a478f5f403b2089645e b/fuzz/gnutls_set_trust_file_fuzzer.in/b6944be82deebed2c2b62a478f5f403b2089645e new file mode 100644 index 0000000000..b5312e2d3c Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/b6944be82deebed2c2b62a478f5f403b2089645e differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b8860fa1179e8d27bbfcc9eb9f09a2af7b839ffb b/fuzz/gnutls_set_trust_file_fuzzer.in/b8860fa1179e8d27bbfcc9eb9f09a2af7b839ffb new file mode 100644 index 0000000000..398fad08bd Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/b8860fa1179e8d27bbfcc9eb9f09a2af7b839ffb differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b8ae7178a3f6ee5decf0eefe0dedc05c1a5352c4 b/fuzz/gnutls_set_trust_file_fuzzer.in/b8ae7178a3f6ee5decf0eefe0dedc05c1a5352c4 new file mode 100644 index 0000000000..3c4aaa7579 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/b8ae7178a3f6ee5decf0eefe0dedc05c1a5352c4 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b8bc992fb9a527a1d5ff61b6cec8129673b5a67d b/fuzz/gnutls_set_trust_file_fuzzer.in/b8bc992fb9a527a1d5ff61b6cec8129673b5a67d new file mode 100644 index 0000000000..b144515784 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b8bc992fb9a527a1d5ff61b6cec8129673b5a67d @@ -0,0 +1,20 @@ +C--Lert +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZISvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAQTAlVTMQ8wDQYDVQQIDAZP +cmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9AdZ2nNz9sbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA5UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNbvIYJ +AOdypp4THRdcMAwGA1UdEgQFMAOBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQol/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END C \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b8eb2960e1b97ff9ae2c9718e8bccaba2a495687 b/fuzz/gnutls_set_trust_file_fuzzer.in/b8eb2960e1b97ff9ae2c9718e8bccaba2a495687 new file mode 100644 index 0000000000..d096a077c1 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b8eb2960e1b97ff9ae2c9718e8bccaba2a495687 @@ -0,0 +1,19 @@ +Cert +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA0UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZPcmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaP6cbt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZYdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYIJpOyId +p4THRdcMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQon/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b9214fa24413af15838b8a0a32c71927a6448a17 b/fuzz/gnutls_set_trust_file_fuzzer.in/b9214fa24413af15838b8a0a32c71927a6448a17 new file mode 100644 index 0000000000..9a9b653812 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b9214fa24413af15838b8a0a32c71927a6448a17 @@ -0,0 +1 @@ +NjIIVvTFAVv-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------B-EGEIRNTCIMVvTCC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----IMVvTJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-AMGTVvTJ------END L-----BEGIN EMIA-BEGIN X42eBBEA \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/b99713a1985466eea4c605c845a3bf04ed23ea2d b/fuzz/gnutls_set_trust_file_fuzzer.in/b99713a1985466eea4c605c845a3bf04ed23ea2d new file mode 100644 index 0000000000..3a451fabbf --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/b99713a1985466eea4c605c845a3bf04ed23ea2d @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE09 CER-----BEGIN X509 CRLTI FICATE-----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ba8098b2752f8eb9c59bbda3cd22e221caa7d775 b/fuzz/gnutls_set_trust_file_fuzzer.in/ba8098b2752f8eb9c59bbda3cd22e221caa7d775 new file mode 100644 index 0000000000..b80b706d52 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ba8098b2752f8eb9c59bbda3cd22e221caa7d775 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/bb14f99a1bb2e43cf8bb00af3a5acfc267a71b29 b/fuzz/gnutls_set_trust_file_fuzzer.in/bb14f99a1bb2e43cf8bb00af3a5acfc267a71b29 new file mode 100644 index 0000000000..007a53960f --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/bb14f99a1bb2e43cf8bb00af3a5acfc267a71b29 @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiwTgwuACkMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/bc21afe3ebe16eebf9654f2d9acfbe1d22b8b724 b/fuzz/gnutls_set_trust_file_fuzzer.in/bc21afe3ebe16eebf9654f2d9acfbe1d22b8b724 new file mode 100644 index 0000000000..2d791ada46 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/bc21afe3ebe16eebf9654f2d9acfbe1d22b8b724 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIQL1SwxCQ+cBR7oSy1AMGE2jANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMVGhhd3RlLCBJbmMuMRYwFAYDVQQDEw1UaGF3dGUgU1NMIENBMB4XDTEyMDYxNDAwMDAwMFoXDTEzMDYyMjIzNTk1OVowcTELMAkGA1UEBhMCQ1oxDzANBgNVBAeTBlByYWd1ZTEPMA0GA1UEBxYGUHJhZ3VlMSQwIgYDVQQKFBtVbmllbnQgQ29tbXVuaWNhdGlvbnMsIGEucy4xGjAYBgNVBAMUEXBvcnRhbC52aXBob25lLmN6MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCRHmLnhIK/gJfPxPjbejpLCY0cAMVNl7LhW87bLwsKDEczTcFiu7NxaTeZLX2nYOnDWOQkISott8CR70qr74v+AcX0pW47SL9pt9fdU95bDLSgfykja7t9bwVU3VcgbQt0tR3Bm8D0sZuGmPeDmqH6EC2pi6KoMEcW31m/4IVHQIDAQABo4GgMIGdMAwGA1UdEwEB/wQCMAAwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL3N2ci1vdi1jcmwudGhhd3RlLmNvbS9UaGF3dGVPVi5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMJMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAYYWaHR0cDovL29jc3AudGhhd3RlLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAUhYOVI5Y0Hs5VVyH2CvJBXmXYADAqu8JcW/vE5YH+jD3HaGS7wgPSNyaxALKVgLEaWiRvX3WoPqzwz19iRXLpW23y4h2dN0B1AXWCxmC9HzYQebzojDkw1PIocj4clYVJ3l16Dh0r/JzzRtP4+msKGaDYD/E1f5lytvuX7uuchnGZ+DU5OnjBY/rnPR5jiq6repy+JiXZg24SrD0+CF21CG9HcKX1dRUcZ8RB1wXv7f+66WhlU10TNY2ICg7/CARDjLwv/RBp6tc/ObfaCb6IljON4UhEVS1wu/dJDsuuw7lAIudWuGL0gvVR/d6j16t4doAy2iDiXXyFre3/Gk0tQ== +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/bcaf9bcf91b1e56ef7a3e6107083a3039efadfd1 b/fuzz/gnutls_set_trust_file_fuzzer.in/bcaf9bcf91b1e56ef7a3e6107083a3039efadfd1 new file mode 100644 index 0000000000..d1204885d3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/bcaf9bcf91b1e56ef7a3e6107083a3039efadfd1 @@ -0,0 +1 @@ +--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVqrvvQvTAAFw0Az3EDM5T4MwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0Az3EDM0T4MwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVqrvvQvTAAFw0Az3EDM5T4MwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0Az3EDM0T4MwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0Az3EDM5T4MwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVv14 CRL-----END MG-MIIAIA \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/bce22734e19ed8e6d927bb575db89360e7d29505 b/fuzz/gnutls_set_trust_file_fuzzer.in/bce22734e19ed8e6d927bb575db89360e7d29505 new file mode 100644 index 0000000000..eec8c29e70 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/bce22734e19ed8e6d927bb575db89360e7d29505 @@ -0,0 +1 @@ +TCIMVvTJAVvvvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE! \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/bd25bcc54623b9e303f99d4b290befea272af408 b/fuzz/gnutls_set_trust_file_fuzzer.in/bd25bcc54623b9e303f99d4b290befea272af408 new file mode 100644 index 0000000000..6657f7b63d --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/bd25bcc54623b9e303f99d4b290befea272af408 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhcXOZgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/be5636112febb49d236b640de4249a75f537afcc b/fuzz/gnutls_set_trust_file_fuzzer.in/be5636112febb49d236b640de4249a75f537afcc new file mode 100644 index 0000000000..b1a4deb4ff --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/be5636112febb49d236b640de4249a75f537afcc @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIDZzCCAtCgAwIBAQIDCwsxMA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNVBAYTAlVTMRwwGgYDVQQKExNFcXVpZmF4IFNlY3VyZSBJbmMuMS0wKwYDVQQDEyRFcXVpZmF4IFNlY3VyZSBHbG9iYWwgZUJ1c2luZXNzIENBLTEwHhcNMDkwMzE4MTMwMzE1WhcNMTQwMzE4MTMwMzE1WjCB1jELMAkGA1UEBhMCTkwxJjAkBgNVBAoTHXBvcnRhYWwuZ291ZHNtaXQtbWFnbmV0aWNzLm5sMRMwEQYDVQQLEwpHVDM0MDMyNzQzMTEwLwYDVQQLMyhTZWUgd3d3LnJhcGlkc3NsLmNvbS9yZXNvdXJjZXMvY3BzIChjKTA5MS8wLQYDVQQLEyZEb21haW4gQ29udHJvbCBWYWxpZGF0ZWQgLSBSYXBpZFNTTChSKTEmMCQGA0UEExMdcG9ydGFhbC5nb3Vkc21pdC1tYWduZXRpY3MubmwwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALcK0VV2IgUNrIItBa/UBIX4A/r14br2Povw4J3/yQjI+MueFR8N9IRoCQgktJ+nHiVSUwFXHmuil0I+JXsXgrHjlBWFFUSXHH8/5WTBDzNIfyY1Ymky7kpCzeZa7R9XLF+C2ENXg+Jf0zBy4gf3i941JpIdOhxyajnlQbcFIFNDAgMjAAGCgb0wgbowDgYDVR0PAQH/BAQDAgTwMB0GA1UdDgQWBBRnqhBS9VfvsC+vmJut5XgoCb6spTA7BgNVHR8ENDAyMDCgLqAshipodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL2dsb2JhbGNhMS5jcmwwHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCSAAwDQYJKoZIhvcNAQEFBQADgYEAHZlYx8nIB/+NXKR+gsH5QaGyxJLD46UabPiwFZh0nOAUTXpR9K8ZiYBWMtMh8WUM81qV3becix1P75mLCqqkt1Lvhg0pGWW4BQinHr06hGfk7bZmWWsjNM8ts32eZquU5qssVXyYBw9WHIa+rQLdLhEjTjPmSKe1gRMJtzQSDZk= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/be9e7ba31c660a07670f9156b0de282c6f4518d8 b/fuzz/gnutls_set_trust_file_fuzzer.in/be9e7ba31c660a07670f9156b0de282c6f4518d8 new file mode 100644 index 0000000000..5c3968d59a --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/be9e7ba31c660a07670f9156b0de282c6f4518d8 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UECXMMRhN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXAFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzNmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYD0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/bf538c5abb93416480e0c774c834ed3d2eebaeed b/fuzz/gnutls_set_trust_file_fuzzer.in/bf538c5abb93416480e0c774c834ed3d2eebaeed new file mode 100644 index 0000000000..8dfbda39df --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/bf538c5abb93416480e0c774c834ed3d2eebaeed @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATER-----1.2.281.113IN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-----BEGIN X509 CERTIFICATEF'----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHGwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+ +Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END - \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c062e3f74cca13277583a5250cdd05dffe3e255d b/fuzz/gnutls_set_trust_file_fuzzer.in/c062e3f74cca13277583a5250cdd05dffe3e255d new file mode 100644 index 0000000000..4c2f487010 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/c062e3f74cca13277583a5250cdd05dffe3e255d differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c1f1af8d1adc9b3bf0fd85fb60291742c2562030 b/fuzz/gnutls_set_trust_file_fuzzer.in/c1f1af8d1adc9b3bf0fd85fb60291742c2562030 new file mode 100644 index 0000000000..cd45a03d9d --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c1f1af8d1adc9b3bf0fd85fb60291742c2562030 @@ -0,0 +1,20 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-------BEGIN CERTIFICATEIDEY444-----BEGIN CERTIFICATEQ-----BEGIN CERTIFICATED-----BEGIN CERTIFICATERTIFIC----- +MI-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATE;-------BEGIN CERTIFICATE(hkPQ, CN=www.w7:b-----BEGIN X509 CERTIFICATEFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp8THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdbvGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIFAZP +cmVnb48xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQTDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG3w0B +CQeWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMEam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhM1FXtgRNiUGI +RFyr8jCBwgYDVR0jBIG6MIG3gBTr1EtZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZvdWbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYIJ +AOdypp4THRdcMAwGA1UdEwQFMAIfAR8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pOOGQol/JduZUGoECIQDWi3y6UxIFBvqxPcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END CERTIFIFCEIEAMIEW5mb0B3b2hD8gx \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c24c045d3302dce790863e4efa96a2114d6a0eaa b/fuzz/gnutls_set_trust_file_fuzzer.in/c24c045d3302dce790863e4efa96a2114d6a0eaa new file mode 100644 index 0000000000..95ecb89a6a Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/c24c045d3302dce790863e4efa96a2114d6a0eaa differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c2e2c79b7cbb2f8adebc484a4aa000a1a8282b2c b/fuzz/gnutls_set_trust_file_fuzzer.in/c2e2c79b7cbb2f8adebc484a4aa000a1a8282b2c new file mode 100644 index 0000000000..47d3efe745 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/c2e2c79b7cbb2f8adebc484a4aa000a1a8282b2c differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c34e35eab445eeb95af01d84029dc10337e3f773 b/fuzz/gnutls_set_trust_file_fuzzer.in/c34e35eab445eeb95af01d84029dc10337e3f773 new file mode 100644 index 0000000000..746738e8e2 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c34e35eab445eeb95af01d84029dc10337e3f773 @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c406f224f1e053b150b076eb54c4a02ae65bc9b6 b/fuzz/gnutls_set_trust_file_fuzzer.in/c406f224f1e053b150b076eb54c4a02ae65bc9b6 new file mode 100644 index 0000000000..ac583c1e69 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/c406f224f1e053b150b076eb54c4a02ae65bc9b6 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c413c246983ddd010d1370ad6b0b823978037ea0 b/fuzz/gnutls_set_trust_file_fuzzer.in/c413c246983ddd010d1370ad6b0b823978037ea0 new file mode 100644 index 0000000000..65153778c0 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c413c246983ddd010d1370ad6b0b823978037ea0 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIGUjCCBTqgAwIBAgIDCAvFMA0GCSqGSIb3DQEBBQUAMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBTZXJ2ZXIgQ0EwHhcNMTIxMTEzMDI0ODQ2WhcNMTMxMTEzMjEzNjAyWjBnMRkwFwYDVQQNExAwOE5RV09FVGZuZWFScDAzMQswCQYDVQQGEwJERTEXMBUGA1UEAxMOd3d3LnNreWNvcmUuZGUxJDAiBgkqhkiG9w0BCQQEFXBvc3RtYXN0ZXMAc2t5Y29yZS5kZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVWMs5y7sWg0io8lXtyl2MJGLSIKJIzAHx6eLam7nQHpdnD2I7Y3Gg3njUXfgFLsNlpvWm3pCx6O0yataNdZCBGg5YZ4oWHEYwg0+cm2bxYeuTr6TS5TlQ9F7CDliqiA/Lx1cpJGKHB9Azm5Ul2NV3FqOGEr2+P9737my5l7KeSHp/KQFEfVrx46ZRbrJopYdG9q7Kr53rLoZXzs30CFO7lGCKSnFfbrE2o9qX2Z4/HkYoZQs9rYSBjomUGBwPOTBDUXcoIwuysZ3DM49/Vj8wNdkGBGPkY1c9CHULe7HTbe+l5cgY3snoKvJnqMHOxAFFqRGvFG7oQP1QlyIGQR8MCAwEAAaOCAt8wggLbMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1UdDgQWBBQXB3asVLXN6xKGqUNu5a3lWDCmbTAfBgNVHSMEGDAWgBTrQjTQmLCrn/Qbawj3zGQu7w4sRTAlBgNVHREEHjAcgg53d3cuc2t5Y29yZS5kZYIKc2t5Y29yZS5kZTCCAVYGA1UdIASCAU0wggFJMAgGBmeBDAECATCCATsGCysGAQQBgbU3AQIDMIIBKjAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9saWN5LnBkZjCB9wYIKwYBBQUHAgIwgeowJxYgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwAwIBARqBvlRoaXMgY2VydGlmaWNhdGUgd2FzIGlzc3VlZCBhY2NvcmRpbmcgdG8gdGhlIENsYXNzIDEgVmFsaWRhdGlvbiByZXF1aXJlbWVudHMgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeSwgcmVsaWFuY2Ugb25seSBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UgaW4gY29tcGxpYW5jZSBvZiB0aGUgcmVseWluZyBwYXJ0eSBvYmxpZ2F0aW9ucy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5zdGFydHNzbC5jb20vY3J0MS1jcmwuY3JsMIGOBggrBgEFBQcBAQSBgTB/MDkGCCsGAQUFBzABhi1odHRwOi8vb2NzcC5zdGFydHNzbC5jb20vc3ViL2NsYXNzMS9zZXJ2ZXIvY2EwQgYIKwYBBQUHMAKGNmh0dHA6Ly9haWEuc3RhcnRzc2wuY29tL2NlcnRzL3N1Yi5jbGFzczEuc2VydmVyLmNhLmNydDAjBgNVHRIEHDAahhhodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS8wDQYJKoZIhvcNAQEFBQADggEBAE32LbFBvve/XLsd4nuqOUVMlmZoEWIa6Gq28TjTqRH4BK0kFixiOEWZJlvvkpWT2NUlGmgtkv1M1DBJ4mdaiTa6hatmLFzD9SgCVRXywT4C4wzJGBFFdQDAwyj89R6e/0Oew6xYeSTIsmpEGRuLxFuXw9ayJ3zxhtGoiXtj9Ptj1Yd/Xbjawj9AToSRztNEM8OLbiwzKcxP2qWcbhZINpy6Cn/3C9ug4CVCZjyj2OECYlioIliTnJU6KKkMzhOLUxIf+/E8AdLnSwkctLSzv90S/T00daoPCSVHo++r1xJ02yYfS9LKvlpm/dnPp7rZkOvomt1FjhG1fgXNKf5WP2k= +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c433ed0f876827cdd383cba3e3e4d91431171c22 b/fuzz/gnutls_set_trust_file_fuzzer.in/c433ed0f876827cdd383cba3e3e4d91431171c22 new file mode 100644 index 0000000000..98da00e2d4 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c433ed0f876827cdd383cba3e3e4d91431171c22 @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c48c736deb677d29a2c09e9ac992e2a2873f1e15 b/fuzz/gnutls_set_trust_file_fuzzer.in/c48c736deb677d29a2c09e9ac992e2a2873f1e15 new file mode 100644 index 0000000000..9b421e90ca --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c48c736deb677d29a2c09e9ac992e2a2873f1e15 @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQdCHwQGb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvbw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0y MDA2MzyTUMxOEDdaFw1xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c518cac09c05421b18a3f0a85fd8108767a8fa8b b/fuzz/gnutls_set_trust_file_fuzzer.in/c518cac09c05421b18a3f0a85fd8108767a8fa8b new file mode 100644 index 0000000000..ef7a5c89d0 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c518cac09c05421b18a3f0a85fd8108767a8fa8b @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDy/ubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c52e19b242b7a255062846860a78fbb36b745e8e b/fuzz/gnutls_set_trust_file_fuzzer.in/c52e19b242b7a255062846860a78fbb36b745e8e new file mode 100644 index 0000000000..e3898a6343 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/c52e19b242b7a255062846860a78fbb36b745e8e differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c6da517cbbf683a6d9604ac5c72d28631f39d7f3 b/fuzz/gnutls_set_trust_file_fuzzer.in/c6da517cbbf683a6d9604ac5c72d28631f39d7f3 new file mode 100644 index 0000000000..44f398ea0c --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c6da517cbbf683a6d9604ac5c72d28631f39d7f3 @@ -0,0 +1,7 @@ +------BEGIN CERTIFICATE-Z4:/----E/-------BEGIN CERTIFICATE-ZL--------BEGIN CERTIFICATE--ERTTL-----B-----BEGIN CERTIFICATE-----BEGIN CERTIFICATER-------BEGIN CERTIFICATER------BEGIN CERTIFICATE-----ER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuI29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c754e9513eeddc5f31e9c43c9168acd4b2da0311 b/fuzz/gnutls_set_trust_file_fuzzer.in/c754e9513eeddc5f31e9c43c9168acd4b2da0311 new file mode 100644 index 0000000000..babaaff474 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/c754e9513eeddc5f31e9c43c9168acd4b2da0311 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c7867d68876779ee6c1f4da2489d47c4f0958726 b/fuzz/gnutls_set_trust_file_fuzzer.in/c7867d68876779ee6c1f4da2489d47c4f0958726 new file mode 100644 index 0000000000..758999b32c --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c7867d68876779ee6c1f4da2489d47c4f0958726 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBgAIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c7b25025f399a0e9e37c907ef07c8a66fff75bcd b/fuzz/gnutls_set_trust_file_fuzzer.in/c7b25025f399a0e9e37c907ef07c8a66fff75bcd new file mode 100644 index 0000000000..a9d886c033 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c7b25025f399a0e9e37c907ef07c8a66fff75bcd @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw00MzA1TTEiwTUCAkgwMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvhJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw00MzA1DPEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c80ff9447e64c229a6964402dadaaec99ab8fb13 b/fuzz/gnutls_set_trust_file_fuzzer.in/c80ff9447e64c229a6964402dadaaec99ab8fb13 new file mode 100644 index 0000000000..6195086d23 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c80ff9447e64c229a6964402dadaaec99ab8fb13 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE------BEGIN X509 CRL-----MIIAQTAkMBEGCEVCITRIINvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTJVTvAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--------BEGIN X509 CRL-----MIIAQTAk--!-----END A \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c8eb90e332d630d8082d62d5643f20282e48bb4d b/fuzz/gnutls_set_trust_file_fuzzer.in/c8eb90e332d630d8082d62d5643f20282e48bb4d new file mode 100644 index 0000000000..40c12a4110 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c8eb90e332d630d8082d62d5643f20282e48bb4d @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATER-----FICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvbw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc3wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c94c3a611c6fada034ec8c2809e5df9730176832 b/fuzz/gnutls_set_trust_file_fuzzer.in/c94c3a611c6fada034ec8c2809e5df9730176832 new file mode 100644 index 0000000000..642bc63224 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/c94c3a611c6fada034ec8c2809e5df9730176832 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c99e7ea480f785667fac4c122eed395cfafbcc3a b/fuzz/gnutls_set_trust_file_fuzzer.in/c99e7ea480f785667fac4c122eed395cfafbcc3a new file mode 100644 index 0000000000..ebf150cccd --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c99e7ea480f785667fac4c122eed395cfafbcc3a @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE-----R-----BEGIN X509 CRLTIFICATE-----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/c9d7fb00d468e4618e43f9b2e51f5a916940c3a3 b/fuzz/gnutls_set_trust_file_fuzzer.in/c9d7fb00d468e4618e43f9b2e51f5a916940c3a3 new file mode 100644 index 0000000000..df0f0aa039 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/c9d7fb00d468e4618e43f9b2e51f5a916940c3a3 @@ -0,0 +1 @@ +CC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-EOIN X509 CRL-----MIIAQTAvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL509 CRL-----MIIAQTAkMBEGCEIRNTCIIkMBEGCEIRNTCIIVvTGTVvTJAVL-----END CRLoE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ca45ac76d3ca79785f97d0aa0ad6e7b700a2fbca b/fuzz/gnutls_set_trust_file_fuzzer.in/ca45ac76d3ca79785f97d0aa0ad6e7b700a2fbca new file mode 100644 index 0000000000..dbbcf5497f Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ca45ac76d3ca79785f97d0aa0ad6e7b700a2fbca differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/cb11532ac4f618740bba8123f37cc6d1afae3f89 b/fuzz/gnutls_set_trust_file_fuzzer.in/cb11532ac4f618740bba8123f37cc6d1afae3f89 new file mode 100644 index 0000000000..cbd31dab0a --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/cb11532ac4f618740bba8123f37cc6d1afae3f89 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END oooo-C------BEGIN X509 CRL-----MBoE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/cb2c086890e43b366ce6f15422b447a69e7e504e b/fuzz/gnutls_set_trust_file_fuzzer.in/cb2c086890e43b366ce6f15422b447a69e7e504e new file mode 100644 index 0000000000..d782a90632 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/cb2c086890e43b366ce6f15422b447a69e7e504e differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/cbc456146cb03dc83af027eba9a733769e2045ac b/fuzz/gnutls_set_trust_file_fuzzer.in/cbc456146cb03dc83af027eba9a733769e2045ac new file mode 100644 index 0000000000..90e731f186 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/cbc456146cb03dc83af027eba9a733769e2045ac @@ -0,0 +1,19 @@ +------BEGIN CERTIFICATE-----BEGIN CERTIFICATERTIFICATE-----END ------BEGIN CERTIFICATEb-----BEGIN X509 CERTIFICATEFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q3xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVvb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CRSVEGluZm9Ad29CZzsnbN5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam3 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0jBIG6MIG3gBTr1EtZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYIJ +AOdypp4THRdcMAwGA1LdEwQFMEMABf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pOOGPol/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/cbe7de7c75194c7a8d06eaea7a7b52d991e4892e b/fuzz/gnutls_set_trust_file_fuzzer.in/cbe7de7c75194c7a8d06eaea7a7b52d991e4892e new file mode 100644 index 0000000000..b3285442b6 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/cbe7de7c75194c7a8d06eaea7a7b52d991e4892e differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/cf36f23256b85f3aa6fb9077cf39da06b870c26f b/fuzz/gnutls_set_trust_file_fuzzer.in/cf36f23256b85f3aa6fb9077cf39da06b870c26f new file mode 100644 index 0000000000..8a58bf57b5 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/cf36f23256b85f3aa6fb9077cf39da06b870c26f @@ -0,0 +1,133 @@ +--%--BEGIN CERTIFICATEGIN ERTIFICATE-----BEGIN X509 CERTIFICATE +-----BEGIN X509 CERTIFICATE -----BE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +-----BGEGIN X509 CERTIFICATE-----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d073c7e8101876e8d87275396272061c156b8fa6 b/fuzz/gnutls_set_trust_file_fuzzer.in/d073c7e8101876e8d87275396272061c156b8fa6 new file mode 100644 index 0000000000..5c02348c8b --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d073c7e8101876e8d87275396272061c156b8fa6 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEghOZXcgWW0yazEVMBMGA1UEChEMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLMwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d12e71eea444cc2dba39b2395d41c61552528ba2 b/fuzz/gnutls_set_trust_file_fuzzer.in/d12e71eea444cc2dba39b2395d41c61552528ba2 new file mode 100644 index 0000000000..0db17458c8 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d12e71eea444cc2dba39b2395d41c61552528ba2 @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVTvJJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----vQTMGTVvTJAVL-----BIMVvTJAV-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwuwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-TVvTJAVL-----END LN X \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d14bf96dc635dd7371e725f974c55a3a6a5d8943 b/fuzz/gnutls_set_trust_file_fuzzer.in/d14bf96dc635dd7371e725f974c55a3a6a5d8943 new file mode 100644 index 0000000000..6f1e176b78 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d14bf96dc635dd7371e725f974c55a3a6a5d8943 @@ -0,0 +1,20 @@ +-------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE------FICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATEl-------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE----------BEGIN CERTIFICATE----- +MIICujCBa2Ft;-----BEGIN CERTIFICATE-----MIIAef57dc-----BEGIN CERTIFICATE(hkPQ, CN=-----BEGIN CERTCATEw:b-----BEGIN X509 CERTIFICATEFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp8THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQPLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQeWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0jBIG6MIG3gBTr1EtZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZvdWbjEOMAwGA1UEBwwFU2FsZW0x +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYIJ +AOdypp4THRdcMAwGA1UdEwQFMAIBAF8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pOOGQol/JduZUGoECIQDWi3y6UxIFBvqxPcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END CERTI3dy55-- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d1715c81ae898863bade1536b93862e6828054a3 b/fuzz/gnutls_set_trust_file_fuzzer.in/d1715c81ae898863bade1536b93862e6828054a3 new file mode 100644 index 0000000000..660938bc83 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/d1715c81ae898863bade1536b93862e6828054a3 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d26e2e9a04aca48151e67cefcc7cc7964c8de207 b/fuzz/gnutls_set_trust_file_fuzzer.in/d26e2e9a04aca48151e67cefcc7cc7964c8de207 new file mode 100644 index 0000000000..6dfe6c8ff0 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/d26e2e9a04aca48151e67cefcc7cc7964c8de207 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d2e6dee8e22b779569fbbac5f9aad8b8c44f2c87 b/fuzz/gnutls_set_trust_file_fuzzer.in/d2e6dee8e22b779569fbbac5f9aad8b8c44f2c87 new file mode 100644 index 0000000000..25f7d4b3d1 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d2e6dee8e22b779569fbbac5f9aad8b8c44f2c87 @@ -0,0 +1,7 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjMAOEwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d3dbec7d0ea32206fd8088b5563c80bca3f8e35b b/fuzz/gnutls_set_trust_file_fuzzer.in/d3dbec7d0ea32206fd8088b5563c80bca3f8e35b new file mode 100644 index 0000000000..3bacd50e1e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d3dbec7d0ea32206fd8088b5563c80bca3f8e35b @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw1AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw08MzAT5DEiwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJ7VL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d3e13a1cea81d6ca67312f11ae81c54c529fa874 b/fuzz/gnutls_set_trust_file_fuzzer.in/d3e13a1cea81d6ca67312f11ae81c54c529fa874 new file mode 100644 index 0000000000..15747d18d9 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d3e13a1cea81d6ca67312f11ae81c54c529fa874 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNBVAYTAlVTMREwDwYDVQQHDwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQEQLwtBUkFNSVMgSU5DLjERMA8GA1UECB4I2f8Tck2rNksxGDAWBgNVBAMUDyoubGFic4VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba1FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0TAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d3faa9479bfa02165f77bdf4f1ce0232cd400701 b/fuzz/gnutls_set_trust_file_fuzzer.in/d3faa9479bfa02165f77bdf4f1ce0232cd400701 new file mode 100644 index 0000000000..54df63c47a --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d3faa9479bfa02165f77bdf4f1ce0232cd400701 @@ -0,0 +1 @@ +C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d509ca5a416ed52e160ed8dbf170662fe7008285 b/fuzz/gnutls_set_trust_file_fuzzer.in/d509ca5a416ed52e160ed8dbf170662fe7008285 new file mode 100644 index 0000000000..633a6aeced --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d509ca5a416ed52e160ed8dbf170662fe7008285 @@ -0,0 +1 @@ +-----BEGIN X509 CRLC-----BEGIN CERTIFICATEA-----BEGIN X509 CERTIFICATERLC----- IEA-- X-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d52a09c31012bbff73fa23ce27095db4ae304f0d b/fuzz/gnutls_set_trust_file_fuzzer.in/d52a09c31012bbff73fa23ce27095db4ae304f0d new file mode 100644 index 0000000000..3b4d91927e Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/d52a09c31012bbff73fa23ce27095db4ae304f0d differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d52dbc17085f84f45097d7c10496b6a103cee81b b/fuzz/gnutls_set_trust_file_fuzzer.in/d52dbc17085f84f45097d7c10496b6a103cee81b new file mode 100644 index 0000000000..e82431a9f8 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d52dbc17085f84f45097d7c10496b6a103cee81b @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNBVAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECB4ITkVXPlFUAksxGDAWBgNVBAMeDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIbdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d579a26ae928bcce50329b90351792c15323050e b/fuzz/gnutls_set_trust_file_fuzzer.in/d579a26ae928bcce50329b90351792c15323050e new file mode 100644 index 0000000000..03e76f36e4 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d579a26ae928bcce50329b90351792c15323050e @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE-----MKA=-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d799f7b1171a495feb14dee61c82a0b98fce36dc b/fuzz/gnutls_set_trust_file_fuzzer.in/d799f7b1171a495feb14dee61c82a0b98fce36dc new file mode 100644 index 0000000000..db8f4b6257 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d799f7b1171a495feb14dee61c82a0b98fce36dc @@ -0,0 +1 @@ +TCIMVvTJAVvvvBAGTvvMAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-MAVTJAVL--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE-----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END C------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END NC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-oE--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE!BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvZJAVvvvBAvAMGTVvTJAVL-oE--------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwguCTwAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END CRLoE! \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d7a0c6fb71fc761a94e285378c9122859978b212 b/fuzz/gnutls_set_trust_file_fuzzer.in/d7a0c6fb71fc761a94e285378c9122859978b212 new file mode 100644 index 0000000000..d8e900699b --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/d7a0c6fb71fc761a94e285378c9122859978b212 @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMWvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTvQvTAAL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END ----8 RL- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d8f2bae8ccddebf2da0a00449504dc810d5d06d5 b/fuzz/gnutls_set_trust_file_fuzzer.in/d8f2bae8ccddebf2da0a00449504dc810d5d06d5 new file mode 100644 index 0000000000..f240ea6855 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/d8f2bae8ccddebf2da0a00449504dc810d5d06d5 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d93b78d061bce626182dba4336650b723e2ca9ce b/fuzz/gnutls_set_trust_file_fuzzer.in/d93b78d061bce626182dba4336650b723e2ca9ce new file mode 100644 index 0000000000..76e9d15b56 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/d93b78d061bce626182dba4336650b723e2ca9ce differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/d9975c4dad33a390cb2998e3f7546f8c562f66e2 b/fuzz/gnutls_set_trust_file_fuzzer.in/d9975c4dad33a390cb2998e3f7546f8c562f66e2 new file mode 100644 index 0000000000..2e7e0f486f Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/d9975c4dad33a390cb2998e3f7546f8c562f66e2 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/da86206b317e6154b7ab0c9903ed8e0f51082bca b/fuzz/gnutls_set_trust_file_fuzzer.in/da86206b317e6154b7ab0c9903ed8e0f51082bca new file mode 100644 index 0000000000..118cfc9fe5 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/da86206b317e6154b7ab0c9903ed8e0f51082bca differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/daa2b9bbcdca546f2fbc823051ea3732e94d321e b/fuzz/gnutls_set_trust_file_fuzzer.in/daa2b9bbcdca546f2fbc823051ea3732e94d321e new file mode 100644 index 0000000000..b1e8b132c3 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/daa2b9bbcdca546f2fbc823051ea3732e94d321e differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/daaae736ff3e20c2f4d5bfcb2da70f4ee595f168 b/fuzz/gnutls_set_trust_file_fuzzer.in/daaae736ff3e20c2f4d5bfcb2da70f4ee595f168 new file mode 100644 index 0000000000..17aae6d472 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/daaae736ff3e20c2f4d5bfcb2da70f4ee595f168 @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATEEY444-----BEGIN CERTIFICATE444Vd038-----BEGIN CERTIFICATEIEdgIQ-----BEGIN CERTIFICATED-----BEGIN CERTIFICATERT---------BEGIN CERTIFICATEMI-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEHk------BEGIN X509 CERTIFICATE----- +MIIC7DCCApagAwIBAgIJAKBIQJVDXWL5MA0GCSqGSIb3DQEBBAUAMIHHMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UECwwHU2VhdHRsZTEm +MCQGA1UECgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsM +C0VuZ2luZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1i +aW5nLmJpejEoMCYGCSqGSIb3DQEJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJp +ejAeFw0xNDezMTMxNjUyMzRaFw0xNjEyMDcxNjUyMzRaMIHHMQswCQYDVQQGDwJV +UzETMBEGA1UECBwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEmMCQGA2UE +CgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsMC0VuZ2lu +ZWVyaW5nMSkwJwYDVQQDHCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1iaW5nLmJp +ejEoMCYGCSqGSIb3DQEJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJpejBcMA0G +CSqGSIb3DQEBAQUAA0sAMEgCQQTicEBO1u+ysy7iakUAewKMYPKwzY6Oaq+FUopr +SIjgrX8JIV5gnnvT0HrV/Ju2t4sBy41rZc50cqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LBLWrQZjw5usbSedJdAzAfBgNVHSMEGDAWgBQYkZqEi8LD +LWrQZjw5usbSedJdAzAPBgNVHrMBAf8EBTADAQH/MA4GA1UdEwEB/wQEAwIF4DAN +BgkqhkiG9w0BAQQFAANBAEU0nmhsV0h59xJIHESZPqGj8LYEoSnyZ8/vs+KBJmhm +A8XaCALu1m2CWCrW5wjqSGbbqQfy9vFqsnNX+Qt9KiU= +-----END C \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/db515f2f5f8a6079708cfada1b10c1e04f41284f b/fuzz/gnutls_set_trust_file_fuzzer.in/db515f2f5f8a6079708cfada1b10c1e04f41284f new file mode 100644 index 0000000000..cc4d129cd4 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/db515f2f5f8a6079708cfada1b10c1e04f41284f @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATERIATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdN2b50YW5hMRAwDgYDVQQHGwdCb3plbSFuMREwDwYBVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvbw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDH2MzyTjhbEAMOwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc3wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ3wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/db54f670450b90b0bbadda81b709af3fe15c0459 b/fuzz/gnutls_set_trust_file_fuzzer.in/db54f670450b90b0bbadda81b709af3fe15c0459 new file mode 100644 index 0000000000..e0dd94a951 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/db54f670450b90b0bbadda81b709af3fe15c0459 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVAXBTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UUChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQYEwtBUkFNSVMgSU6DLjERMA8GA1BMCUEITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic1VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM0DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS3OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CETE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/db9b8edba8b1b24b32c8cd16f6e78f1954d8d3b1 b/fuzz/gnutls_set_trust_file_fuzzer.in/db9b8edba8b1b24b32c8cd16f6e78f1954d8d3b1 new file mode 100644 index 0000000000..edfda75508 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/db9b8edba8b1b24b32c8cd16f6e78f1954d8d3b1 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/dbe9104dcf233e0c5187954e875e1bd479f6c1f3 b/fuzz/gnutls_set_trust_file_fuzzer.in/dbe9104dcf233e0c5187954e875e1bd479f6c1f3 new file mode 100644 index 0000000000..c9e6c49e57 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/dbe9104dcf233e0c5187954e875e1bd479f6c1f3 @@ -0,0 +1,28 @@ +CN X50eBd +-----BEGIN CERTIFICATE----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNv +bnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +----------BEGIN CERTIFICATE----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNv +bnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw1x +MDA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXddY55yX3NzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/0aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+ +Kp6+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END Cw0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJEGIN X509 CRL-----MMGI-----BEGIN CERTIFICATE-----MMMM-----END BIE2xmc3NsLmN4GIN CE-- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/dc3126dc144630166b46f9a4d5a28c480ee36316 b/fuzz/gnutls_set_trust_file_fuzzer.in/dc3126dc144630166b46f9a4d5a28c480ee36316 new file mode 100644 index 0000000000..e72606259c --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/dc3126dc144630166b46f9a4d5a28c480ee36316 @@ -0,0 +1,22 @@ +C-----BEGIN CERTIFICATE-----BE-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQFEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CERTIFICATE-----BEGIN CERTIFICATED-----BEGIN CERTIFICATERTIFI-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEHk-----BEGIN CERTIFICATED-----BEGIN CERTIFICATEZctRAgMBAAGjYzAPBgNVHRMBAf8EB-----BEGIN CERTIFICATEIDEY444-----BEGIN CERTIFICATE444-----BEGIN CERTIFICATEIEdgIQ-----BEGIN CERTIFICATED---(-BEGIN F(C----- +MI-----BEGIN CEdgI-----BEGIN X509 CERTIFICATE----- +MIIC7DCCApagAwIBAgIJAKBIQJVDXWL5MA0GCSqGSIb3DQEBBAUAMIHHMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEm +MCQGA1UECgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsM +C0VuZ2luZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1i +aW5nLmJpejEoMCYGCSqGSIb3DQEJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJp +ejAeFw1xNDAzMTMxNjUyMzRaFw0xNjEyMDcxNjUyMzRaMIHHMQswCQYDVQQGDwJV +UzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBswHU2VhdHRsZTEmMCQGA1UE +CgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLSBMTEMxFDASBgNVBAsMC0VuZ2lu +ZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy0zb2Z0d2FyZXBsdW1iaW5nLmJp +ejEoMCYGCSqGSIb3DQEJARYZac9obkBzb2Z0d2FyZBsWiX1daW5nLmJpejBcMA0G +CSqGSIb3DQEBAQUAA0sAMEgCQQTicEBO1u+ysy7iakUAewKMYPKwzY6Oaq+FUopr +SIjgrX8JIV5gnnvT0HrV/Ju2t4sBy41rZc50cqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LBLWrQZjw5usbSedJdAzAfBgNVHSMEGDAWgBQYkZqEi8LD +LWrQZjw5usbSedJdAzAPBgNVHRMBAf8EBTDAAQH/MA4GA1UdEwEB/wQEAwIF4DAN +BgkqhkiG9w0BAQQFAANBAEU0nmhsV0h59xJIHESZPqGj8LYEoSnyZ8/vs+KBJmhm +AACaLX8u1m2CWCrW5wjqSGbbqQfy9vFqsnNX+Qt9KiU= +-----END IHHMQswCQYDVQQGDwJV +UzETMmaWNhdGVzLmdvZGFkZHm9/vdDdLZysy7iakUBi \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/dc42a07d0924dd5ffb9dd2114e3f0b69a71b9c7b b/fuzz/gnutls_set_trust_file_fuzzer.in/dc42a07d0924dd5ffb9dd2114e3f0b69a71b9c7b new file mode 100644 index 0000000000..4035e39fb5 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/dc42a07d0924dd5ffb9dd2114e3f0b69a71b9c7b @@ -0,0 +1,7 @@ +------BEGIN X509 CRLATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE--R------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE---------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE----------BEGIN CERTIFICATE------BEGIN CATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQHGQwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/dc4853fb8f394dca873cbe85e75e58bbff791f09 b/fuzz/gnutls_set_trust_file_fuzzer.in/dc4853fb8f394dca873cbe85e75e58bbff791f09 new file mode 100644 index 0000000000..630bc6fe87 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/dc4853fb8f394dca873cbe85e75e58bbff791f09 @@ -0,0 +1,7 @@ +------BEGIN X509 CRLTE-Z------BEGIN CERTIFICATE-----B-----BEGKN CERTIFICATE-------BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFI--BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFI--BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-RTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIBEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-RTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----IN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE--GIN CATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/dc51fc6ed8480feee086dcc9246bf24bd3b3c6ec b/fuzz/gnutls_set_trust_file_fuzzer.in/dc51fc6ed8480feee086dcc9246bf24bd3b3c6ec new file mode 100644 index 0000000000..7220c0f2f6 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/dc51fc6ed8480feee086dcc9246bf24bd3b3c6ec @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MMAA-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/dcb9f7628ce9008f9b2ae06ccb77eea90d3d05a0 b/fuzz/gnutls_set_trust_file_fuzzer.in/dcb9f7628ce9008f9b2ae06ccb77eea90d3d05a0 new file mode 100644 index 0000000000..73906df0b3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/dcb9f7628ce9008f9b2ae06ccb77eea90d3d05a0 @@ -0,0 +1,19 @@ +Cert +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA0UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MdUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQHDAZPcmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQJDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaP6cbt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNYBAgMBk9yZYdvbjEOMAwGA2UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBFsMBEZhc3QxGDAWBgNVBQMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYEJpOyId +p4THVdcMAwGA1TdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQon/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIDqWTi0t4V6szzz3w== +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/dd27bf94c8670d83ab91809e05055b71684f1f8f b/fuzz/gnutls_set_trust_file_fuzzer.in/dd27bf94c8670d83ab91809e05055b71684f1f8f new file mode 100644 index 0000000000..f086ac6001 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/dd27bf94c8670d83ab91809e05055b71684f1f8f @@ -0,0 +1 @@ +Ct-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzT0iLEAKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMigAzw0YuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/de4bb004b094f4d17663a5acf6e273ff9430c8cc b/fuzz/gnutls_set_trust_file_fuzzer.in/de4bb004b094f4d17663a5acf6e273ff9430c8cc new file mode 100644 index 0000000000..5d533b7e51 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/de4bb004b094f4d17663a5acf6e273ff9430c8cc differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/de9ffd3f17ebdb7d6228a487d8e193aa477eef3b b/fuzz/gnutls_set_trust_file_fuzzer.in/de9ffd3f17ebdb7d6228a487d8e193aa477eef3b new file mode 100644 index 0000000000..10b22d5b6d --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/de9ffd3f17ebdb7d6228a487d8e193aa477eef3b @@ -0,0 +1 @@ +CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X510 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVL-----BEGIN X7900671627073978690677 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL---MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L-CC-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN󠀴 X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X5-----MvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X508 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END --XAGIJAVL-----END --X509L- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/dec88cdd4c0f18707d04c16846028675134f9cd3 b/fuzz/gnutls_set_trust_file_fuzzer.in/dec88cdd4c0f18707d04c16846028675134f9cd3 new file mode 100644 index 0000000000..04b1a9856b --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/dec88cdd4c0f18707d04c16846028675134f9cd3 @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATEIDEY445-----BEGIN CERTIFICATE444-----BEGIN CERTIFICATEIEdgIQ-----BEGIN CERTIFICATED-----BEGIN CERTIFICATERTIFIC----- +MI-----BEGIN CERTIFICATEIEIQD-----BEGIN CERTIFICATEHkgIQ-----BEGIN CERTIFICATED-----BEGIN CERTIFICATERTIFIC----- +MI-----BEGIN CERTIFICATEIEdgIQD-----------BEGIN X509 CERTIFICATE----- +MIIC7DCCApagAwIBAgIJAKBIQJVDXWL5MA0GCSqGSIb3DQEBBAUAMIHHMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEm +MCQGA1UECgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsM +C0VuZ2luZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1i +aW5nLmJpejEoMCYGCSqGSIb3DQEJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJp +ejAeFw0xNDAzMTMxNjUyMzRaFw0xNjEyMDcxNjUyMzBaMIHHMQswCQYDVQQGDwJV +UzETMBEGA2UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBswHU2VhdHRsZTEmMCQGA1UE +CgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsMC0VuZ2lu +ZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZyzb52Z0d2FyZXBsdW1iaW5nLMJp +ejEoMCYGCSqGSIb3DQEJARYZam9obkBzb2Z0d2FyZXBsdW1iaW5nLmJpejBcMA0G +CSqGSIb3DQEBAQUAA0sAMEgCQQTicEBO1u+ysy7iakUAewKMYPKwzY6Oaq+FUopr +SIjgrX8JIV5gnnvT0HrV/Ju2t4sBy41rZc50cqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LBLWrQZjw5usbSedJdAzAfBgNVHSMEGDAWgBQYkZqEi8LD +LWrQZjw5usbSedJdAzAPBgNVHRMBAf8EBTADA/QHMA4GA1UdEwEB/wQEAwIF4DAN +BgkqhkiG9w0BAQQFAANBAEU0nmhsV0h59xJIHESZPqGj8LYEoSnyZ8/vs+KBJmhm +A8XaCALu1m2CWCrW5wjqSGbbqQfy9vFqsnNX+Qt9KiU= +-----END CERT87 \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/df54f8a2563bf1107d4e4c736f0ddbb2b2dcb8e4 b/fuzz/gnutls_set_trust_file_fuzzer.in/df54f8a2563bf1107d4e4c736f0ddbb2b2dcb8e4 new file mode 100644 index 0000000000..2f858b0620 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/df54f8a2563bf1107d4e4c736f0ddbb2b2dcb8e4 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgABAANAA7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEBhMMRXN0ZWUgAGF1ZGVyMRQwEgYDVQQFEwtBUkFNSVMgSU5DLjERMA8GA1UEFBMITkVXAFlPUksxGDAWBgNVBAMUD9oubGFic3VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm0ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH6BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END R----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/dfbf6afa801a121f085e473636ae7caaa615caaf b/fuzz/gnutls_set_trust_file_fuzzer.in/dfbf6afa801a121f085e473636ae7caaa615caaf new file mode 100644 index 0000000000..9194b64119 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/dfbf6afa801a121f085e473636ae7caaa615caaf @@ -0,0 +1,7 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATEE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGINE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYLKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/dfef0a387d4eaf07da59270631f920635b53353c b/fuzz/gnutls_set_trust_file_fuzzer.in/dfef0a387d4eaf07da59270631f920635b53353c new file mode 100644 index 0000000000..4c08b621c0 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/dfef0a387d4eaf07da59270631f920635b53353c differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/dff952e3b90ccaf16126fde23a0951fce61038f5 b/fuzz/gnutls_set_trust_file_fuzzer.in/dff952e3b90ccaf16126fde23a0951fce61038f5 new file mode 100644 index 0000000000..1508b4db0d --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/dff952e3b90ccaf16126fde23a0951fce61038f5 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIIEajCCA1KgAwIBAgISESFFDyRNAVT/+15pJaeLBdRLMA0GCSqGSIb3DQEBBQUAMC4xETAPBgNVBAoTCEFscGhhU1NMMRkwFwYDVQQDExBBbHBoYVNTTCBDQSAtIEcyMB4XDTEyMDcxNDE0MDIzMFoXDTEzMDcxNTE0MDIzMFowODEhMB8GA1UECXMYRG9tYWluIENvbnRyb2wgVmFsaWRhdGVkMRMwEQYDVQQDEwp3d3cuYWdwLnBoMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm3Bypudk4UYfJucuiS95m2IKHWrE1jgf63eXNWULdfsohcjxYAwbVxs/88X9xyIlXiJRRruDRTdeY9ZhifZ4g4012bTDAhtsK7zA/IrBiDDagnpZO/a3bk7aqyOjDk5Qv8IezvoHA1jcojO3cIc8sumccDv6BoAyu1wZusoGggnmhriqGGQgWAlcSYPrEelufFkk+vUwqD4icMv+ejHqkc0aTME2SgIky8XRb924SXHI8Ze9igPWsOOdMQIB33Q+6Vmag9oQEk3hcXUJRj0Qg+f1Vk4zVLdp/ZDZmtca1CkBokLy4DzLRHvOJYiuuv+2ZzZm5JwiuEP7OjMc0IOa1QIDAQABo4IBdjCCAXIwDgYDVR0PAQH/BAQDAgWgME0GA1UdIARGMEQwQgYKKwYBBAGgMgEKCjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWduLmNvbS9yZXBvc2l0b3J5LzAdBgNVHREEFjAUggp3d3cuYWdwLnBoggZhZ3AucGgwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybDIuYWxwaGFzc2wuY29tL2dzL2dzYWxwaGFnMi5jcmwwTAYIKwYBBQUHAQEEQDA+MDwGCCsGAQUFBzAChjBodHRwOi8vc2VjdXJlMi5hbHBoYXNzbC5jb20vY2FjZXJ0L2dzYWxwaGFnMi5jcnQwHQYDVR0OBBYEFLbJD1y8yt7l8TwXBeD/EGt//pfLMB8GA1UdIwQYMBaAFBTqGVXwDg0yxh90M7eOZhpMEjEeMA0GCSqGSIb3DQEBBQUAA4IBAQBdyPavXToLqQ33fvBqMRWWNpG4GX7dyTQXdwj97ZNBinna1jOKM9yCRQt7o6ghSa3nLZCMzAEbM0u1oJd0ZLQOX2sIicuTbMsNsqkyvDw0hDBh8fq/KHFzRnRq9aYUMnD6COfb7BnIgclyqmf07TlvN4ENmR5qH98NL+MTcj26BgGvhQsXiddtbZYJk0AzIGnyqD8VB5/NtuUtwUj2eScNKku6JfGTv1Weo4wJgmp4D1IOUTSJ6CaFozQRnlzngWuUu8ByTFiK/a8RCVE/qIGLv8LVUNz+NdcIOMNmUziW05DnO1gOm/+qjK1LikqYuRWUXJxLQdCkwOAKYMcwtxgl +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e02474c26b9b039f9812885737ff6afe28c0b3b9 b/fuzz/gnutls_set_trust_file_fuzzer.in/e02474c26b9b039f9812885737ff6afe28c0b3b9 new file mode 100644 index 0000000000..b7d9844b9c --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e02474c26b9b039f9812885737ff6afe28c0b3b9 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0RBDIwMKfuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e10f025ac91d78d62d15bb363c346ffaa64fd48d b/fuzz/gnutls_set_trust_file_fuzzer.in/e10f025ac91d78d62d15bb363c346ffaa64fd48d new file mode 100644 index 0000000000..bf245d846b --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e10f025ac91d78d62d15bb363c346ffaa64fd48d @@ -0,0 +1,18 @@ +zAJBgYIFt4sB------BEGIN X509 CERTIFICATE----- +MIIC7DCCApagAwIBAgIJAKBIQJVDXWL2MA0GCSqGSIb3DQEBBAUAMIHHMQswCQYD +VQQGEwJVUzETMBEGA2UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwsHU2VhdHRsZTEm +MCQGA1UECgwdSm9obidzIFNvZnR3YXJlIFBsdW1iaW5nLCBMTEMxFDASBgNVBAsM +C0VuZ2luZWVyaW5nMSkwJwYDVQQDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1i +aW5nLmJpejEoMCYGCSGqSIb3DQEJARYZam9obkBzb2Z0dFXZ2yBsdW1iaW5nLmJp +ejAeFw0xNDAzMTMxNjUyMzRaFw0xNjEyMDcxNjUyMzRaMIHHMQswCQYDVQQGDwJV +UzETMBEGA5URCAwKV2FzaGluZ3RvbjEQMA4GA1UEBswHU2VhdHRsZTEmMCQGA2UE +CgwdSm9obidzIFNvZnR+YXJlIFJsdW1iaW5nLCBMTEMxFDASBgNBVAsMC0V2Pluu +ZWVyaW5nMSkwJwYDVQSDDCBlbmdpbmVlcmluZy5zb2Z0d2FyZXBsdW1iaW5nLmJp +ejEoMCYGCSqGSIb3DQEJFB4Zkydm6oa9bbBF0zZXW1sLvZBiW5vaemJpejBcMA0G +CSqGSIb3DQEBAQUAA0sAMEgCQQTicHBO1u+ysy7iakUAewKMYPKwzY6Oaq+FUopr +SIjgrX8JIV5gnnvT0HrV/Ju2t4sBu41rZc50cqOdOj9yZctRAgMBAAGjYzBhMB0G +A1UdDgQWBBQYkZqEi8LBLWrQZjw5usbSedJdAzAfBgNVHSMEGDAWgBQYkZqEi8LD +LWrQZjw5usbSedJdAzAPBgNVHRMBAf8EBTADAQA/MA4GA1UdEwEB/wQEAwIF4DAN +BgkqhkiG9w0BAQQFAANBAEU0nmhsV0h59xJIHESZPqGj8LYEoSnyZ8/vs+KBJmhm +A4XaCALu1m2CWCrW5wjqSGbbqQfy9vFqsnNX+Qt9KiU= +-----END CERTMBMIEA \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e16631fff3affeb30e9a7766a4c73630b84cea67 b/fuzz/gnutls_set_trust_file_fuzzer.in/e16631fff3affeb30e9a7766a4c73630b84cea67 new file mode 100644 index 0000000000..b9b7bd3cad --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e16631fff3affeb30e9a7766a4c73630b84cea67 @@ -0,0 +1 @@ +C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END -----BEGIN X509 CRL- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e174e2d31b1e4a1fb2d4525359c475d88503250b b/fuzz/gnutls_set_trust_file_fuzzer.in/e174e2d31b1e4a1fb2d4525359c475d88503250b new file mode 100644 index 0000000000..d03361c0f5 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/e174e2d31b1e4a1fb2d4525359c475d88503250b differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e202ea3461476802e1500efbc836f3ecd6afb7fc b/fuzz/gnutls_set_trust_file_fuzzer.in/e202ea3461476802e1500efbc836f3ecd6afb7fc new file mode 100644 index 0000000000..b6863686b5 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e202ea3461476802e1500efbc836f3ecd6afb7fc @@ -0,0 +1,3 @@ +--@-----BEGIN X509 CERTIFICATEEE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA2UEBhMCVVMxIDAeBgNVBAoTF0FrYW1hcSBQZWNobm9sb2dpZXjMS5gWMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0x4jA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAQeAlVTMREwDwYDVQQHDwhOZXcgWW9yazEVMBMGA1UECJ4M0MXZRN0EAGF1ZGVyMRQwEgYDVQQLGwtBnNrbI4RTE/5DLjERMA8GA1UECBAITkVBIFlPUksxGDAWBgNIBAMeDyourGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWTZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ9HAnkCG1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFUTre2wXCGgiTfIjdRd3LEmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuWCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nCIUmw9moUXvcwDgYDVR0tAQH/BAQwAgGgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG6vEgkEAgR5LeMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NPvGbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7jamsYFdFRT0IbJz5Qa1sknhnTAH12shazhzDFdRPhQenNrbI4RTE/ +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e259288a7c77d8e6a59d70ef1697e1b1e8c16b41 b/fuzz/gnutls_set_trust_file_fuzzer.in/e259288a7c77d8e6a59d70ef1697e1b1e8c16b41 new file mode 100644 index 0000000000..435740b201 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e259288a7c77d8e6a59d70ef1697e1b1e8c16b41 @@ -0,0 +1 @@ +C-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwAMGTVvTJCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e423774b9e6196b73304c0c5be76b3e69844ddc1 b/fuzz/gnutls_set_trust_file_fuzzer.in/e423774b9e6196b73304c0c5be76b3e69844ddc1 new file mode 100644 index 0000000000..5f5994f742 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/e423774b9e6196b73304c0c5be76b3e69844ddc1 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e505bcb5dbfe2d1fe3a30222b2abd33267166497 b/fuzz/gnutls_set_trust_file_fuzzer.in/e505bcb5dbfe2d1fe3a30222b2abd33267166497 new file mode 100644 index 0000000000..0537007ac8 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e505bcb5dbfe2d1fe3a30222b2abd33267166497 @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzT0iLEAKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMigAzw0YuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigALTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e603661f8b3dcbb9baa5231cad65f129e5c544d7 b/fuzz/gnutls_set_trust_file_fuzzer.in/e603661f8b3dcbb9baa5231cad65f129e5c544d7 new file mode 100644 index 0000000000..0019ab434b Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/e603661f8b3dcbb9baa5231cad65f129e5c544d7 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e62c071f1ebca1b40c98af7461b790e15ccaa537 b/fuzz/gnutls_set_trust_file_fuzzer.in/e62c071f1ebca1b40c98af7461b790e15ccaa537 new file mode 100644 index 0000000000..160edd4197 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/e62c071f1ebca1b40c98af7461b790e15ccaa537 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e65acb1129f99a9cef5963f3fc8063190b7a2813 b/fuzz/gnutls_set_trust_file_fuzzer.in/e65acb1129f99a9cef5963f3fc8063190b7a2813 new file mode 100644 index 0000000000..bc2e1f44af --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e65acb1129f99a9cef5963f3fc8063190b7a2813 @@ -0,0 +1,9 @@ +----EGIN-B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATEl-------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATEl-------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-TECATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATEGIN CEE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATEl-------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATEl------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATEl-------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE----------BEGIN CERTIFICATE----- +MIICujCBa3Ft;------BEGIN CERTIFICATE------BEGIN CERTIFICATE-TECATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------B------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATEl-------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CC----BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BE IN CERTIFICATE-----B-----BEGINCERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGINCERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIBICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE--E-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIa CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFIE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN ----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERBEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE---/-FEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B---------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE----------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTZ------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE----CERTIN C@TIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGINCERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERCATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN ERTIFI-----BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEBEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEICATEl------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATEl-------BEGIN CERTIFICATE------BECATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CE2TIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BTIFICATE-----BEGIN X509 CERTIFICTE-Z CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-EGIN CERTIFICATE-----BE1U;N1-----BEGIN CERTIFICATE-----BEGI=-----BEGIN CERTIFICATE-----0MEkMA1UN1-----BEGIN CERTIFICATE-----fo@y-----BEGIN CERTIFICATE-----BEGIN X529uc3VsdGluZzEkMCIMA1UN1-----BEGIN CERTIFICATE-----BlUN1-----BEGIN CERTIFICATE-----00=--nwDwYDA1U-----BEGIN CERTIFICATE-----B=-.---=1-----BEGIN CERTICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-/---BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------B----BEGIN CERTIFICAB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICGTE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEB-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509E-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----TIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFITE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BCERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFITATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTI`ICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFIC-BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIICATER------B----BEGIN CERTIFICATE-----0CATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CEBEGIN CERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER----TIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICAT^E-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B----BEGIN CERTIFICATE-------BERTIFICATE-----BEGIN CERTIFICAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICTE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluQzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw02Mx +ADMzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNMBAsTB5N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +----00= +-----END CeATlbbb \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e6c7fa5e70f57ace601ad0a2f3c4f81b94387e77 b/fuzz/gnutls_set_trust_file_fuzzer.in/e6c7fa5e70f57ace601ad0a2f3c4f81b94387e77 new file mode 100644 index 0000000000..975c4089fc --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e6c7fa5e70f57ace601ad0a2f3c4f81b94387e77 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgPGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e721f5daa37932cc339c50280cad2a4f4f6f6ed1 b/fuzz/gnutls_set_trust_file_fuzzer.in/e721f5daa37932cc339c50280cad2a4f4f6f6ed1 new file mode 100644 index 0000000000..78bb50a65a --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e721f5daa37932cc339c50280cad2a4f4f6f6ed1 @@ -0,0 +1,16 @@ +Cer-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwKQ2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA0UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQDIAZPcmVnb24xDjAMBgNVBAceBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaP6cbt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiU +GIRFyr8jCBwgYDVR0SBIG6MIG3ghdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCBjTELMAkGA1UEBhICVVMxDzANBgNVBAgMBk9yZYdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsHBEZhc3QxGDAWBgNVBAdMD33 +Mdy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xRMwEQYDVQQKDApDbGd +p4THRdcMAwGA1UdEwQFMMAABf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQon/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e734e4ae0dbc4d02a59123e29bfd707fbe5b9c28 b/fuzz/gnutls_set_trust_file_fuzzer.in/e734e4ae0dbc4d02a59123e29bfd707fbe5b9c28 new file mode 100644 index 0000000000..03ae8f6423 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e734e4ae0dbc4d02a59123e29bfd707fbe5b9c28 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUD9oubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e73b00ad7a51310eed0c53f7d5ade526965b3ed5 b/fuzz/gnutls_set_trust_file_fuzzer.in/e73b00ad7a51310eed0c53f7d5ade526965b3ed5 new file mode 100644 index 0000000000..d7373e7806 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e73b00ad7a51310eed0c53f7d5ade526965b3ed5 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----  -----END / \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e789bdde9166d27b79b91d84ab11002ef8a90064 b/fuzz/gnutls_set_trust_file_fuzzer.in/e789bdde9166d27b79b91d84ab11002ef8a90064 new file mode 100644 index 0000000000..d158b69644 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e789bdde9166d27b79b91d84ab11002ef8a90064 @@ -0,0 +1,20 @@ +H/BAQDAgUgMA0GCSTIFICATE--ATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN-----BEGIN X509 CRL-BERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--ATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGITEbB-----BEGIN X509 CERTIFICATEE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +QQVLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3hhdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAMoCkNsaWVudCBFQ0MxDTALBgNVKAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DWEJARYQaW5mb0B3b2xmc3NsLmNvbKcJ +AOdypp5THRdcMAwGA1UdEwQFMAMCAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQol/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-T4RbE/ +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e8d305162ba866f20bb623bc77e87abd1db84dd3 b/fuzz/gnutls_set_trust_file_fuzzer.in/e8d305162ba866f20bb623bc77e87abd1db84dd3 new file mode 100644 index 0000000000..74d65cf4fa --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e8d305162ba866f20bb623bc77e87abd1db84dd3 @@ -0,0 +1 @@ +------BEGIN CERTIFICATE----BEGIN Cwwwwwwwug-----BEGIN CERTIFIT-----END -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END ------BEGIN X509 CRL--EBEGIN-----BEGIN X509 CERTIFICATE-----END -----END AMMMMFIM \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e916533a9e1a71b406f4d5a64719047a0a242c98 b/fuzz/gnutls_set_trust_file_fuzzer.in/e916533a9e1a71b406f4d5a64719047a0a242c98 new file mode 100644 index 0000000000..547c256425 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/e916533a9e1a71b406f4d5a64719047a0a242c98 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e91917e8469ca4b33b1f99e0f113ef3b4615681f b/fuzz/gnutls_set_trust_file_fuzzer.in/e91917e8469ca4b33b1f99e0f113ef3b4615681f new file mode 100644 index 0000000000..760bff1632 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e91917e8469ca4b33b1f99e0f113ef3b4615681f @@ -0,0 +1,13 @@ +EAMYEG-- CERTZ4-----BEGIN CERTIFICATE/-------BEGIN CERTIFICATE/----BEGIN09 CRL/----E/-------BEGIN CERTIFICATE/-------BEGIN CERTIFICATE-Z4-----BEGIN CERTIFICATE/-------BEGIN CERTIFICATE/-------BEGIN CERTIFICATE-Z4-----BEGIN X509 CERTIFICATEF----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wx +EDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/2aI0QtA4n8bdO23mZWpUlt3Se+s2oq5+ +Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+XbHu3sMsgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL +4HRYEcUBe00= +-----END CEIDAMCmCCI \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e9873342decd8ceebb7440f7b2463a0929d85e26 b/fuzz/gnutls_set_trust_file_fuzzer.in/e9873342decd8ceebb7440f7b2463a0929d85e26 new file mode 100644 index 0000000000..4a9020c52e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/e9873342decd8ceebb7440f7b2463a0929d85e26 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVcMREwDwYDVQQHEghOZXcgWW9yazEVMBMGA0UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVAQLMwtBUkFNSVMgSU5DLjERMA8GA1UEC8MITkVXIFlPUksxGDAWBgNVBAMVDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/e9bc8080ea8bfaa0f6f8214e223e8a6b8e4277b9 b/fuzz/gnutls_set_trust_file_fuzzer.in/e9bc8080ea8bfaa0f6f8214e223e8a6b8e4277b9 new file mode 100644 index 0000000000..5946b0baf5 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/e9bc8080ea8bfaa0f6f8214e223e8a6b8e4277b9 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ebab4b6132617b8e7d7e229cd0219071ed470112 b/fuzz/gnutls_set_trust_file_fuzzer.in/ebab4b6132617b8e7d7e229cd0219071ed470112 new file mode 100644 index 0000000000..ed7ae4fd38 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ebab4b6132617b8e7d7e229cd0219071ed470112 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ec0a1e15ea0950f6c0c7bfdb55aea759633b7f7b b/fuzz/gnutls_set_trust_file_fuzzer.in/ec0a1e15ea0950f6c0c7bfdb55aea759633b7f7b new file mode 100644 index 0000000000..2d220d41b7 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ec0a1e15ea0950f6c0c7bfdb55aea759633b7f7b differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ec80dfab5a3a28c26fe94374f71b7ba0ee8c4ce8 b/fuzz/gnutls_set_trust_file_fuzzer.in/ec80dfab5a3a28c26fe94374f71b7ba0ee8c4ce8 new file mode 100644 index 0000000000..25027bb628 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/ec80dfab5a3a28c26fe94374f71b7ba0ee8c4ce8 @@ -0,0 +1 @@ +6LVL-----BVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRLEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTYuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTEIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xzTEi0LMAwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw2xMzA0LTwAiTEuwgCkMBEGCEIRTNCIMVvTJAVvvvBAvAMGTVvTJAVL-----BMIIAL-----END - \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ecd9935fcf834804bffe3f191c5f642f33774b76 b/fuzz/gnutls_set_trust_file_fuzzer.in/ecd9935fcf834804bffe3f191c5f642f33774b76 new file mode 100644 index 0000000000..7a067ffe85 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/ecd9935fcf834804bffe3f191c5f642f33774b76 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUisxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CRTIFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ed7a88d47d3640702fd43d98aa5c0798bf3fe7e2 b/fuzz/gnutls_set_trust_file_fuzzer.in/ed7a88d47d3640702fd43d98aa5c0798bf3fe7e2 new file mode 100644 index 0000000000..9a5f1b7e62 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/ed7a88d47d3640702fd43d98aa5c0798bf3fe7e2 @@ -0,0 +1,3 @@ +------BEGIN CERTIFICATE----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UECh4MBA4GBAJQBGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0RAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4AFbxYnN7javsrFdFRj0IbJz4Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ed9c550d5e5d21716f2dfabbdbc453949f59a974 b/fuzz/gnutls_set_trust_file_fuzzer.in/ed9c550d5e5d21716f2dfabbdbc453949f59a974 new file mode 100644 index 0000000000..6d384911d4 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ed9c550d5e5d21716f2dfabbdbc453949f59a974 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ee0de8aa33116ccbd8e439361c8018222e61889d b/fuzz/gnutls_set_trust_file_fuzzer.in/ee0de8aa33116ccbd8e439361c8018222e61889d new file mode 100644 index 0000000000..6f51c6e6d8 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ee0de8aa33116ccbd8e439361c8018222e61889d differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ee9e3939437ca1cfec280f71986108e601d66210 b/fuzz/gnutls_set_trust_file_fuzzer.in/ee9e3939437ca1cfec280f71986108e601d66210 new file mode 100644 index 0000000000..3050be1d0b --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/ee9e3939437ca1cfec280f71986108e601d66210 @@ -0,0 +1,7 @@ +------BEGIN X509 CRLATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-RTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEG-----BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE--GIN CATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ef235cee82422dc2892158a2cda475b217b111f2 b/fuzz/gnutls_set_trust_file_fuzzer.in/ef235cee82422dc2892158a2cda475b217b111f2 new file mode 100644 index 0000000000..62681f9e1b Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ef235cee82422dc2892158a2cda475b217b111f2 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ef2e565e5ba2653f7c8dda8fef3ec37cafbfc1c9 b/fuzz/gnutls_set_trust_file_fuzzer.in/ef2e565e5ba2653f7c8dda8fef3ec37cafbfc1c9 new file mode 100644 index 0000000000..953dd8d0d2 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ef2e565e5ba2653f7c8dda8fef3ec37cafbfc1c9 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/efccf8d6ef6a7da291b2525974db06e6ce36238b b/fuzz/gnutls_set_trust_file_fuzzer.in/efccf8d6ef6a7da291b2525974db06e6ce36238b new file mode 100644 index 0000000000..d69088b574 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/efccf8d6ef6a7da291b2525974db06e6ce36238b @@ -0,0 +1,4 @@ +------BEGIN X509 CRLAE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-RTIFICATE-------BEGIN CTE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEG-----BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERFTIICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE--GIN CATE-IFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------B-----BEGIN CERTIFICATE-----MIEMMCMCCIFTECIRMIEPMIEAMIEAMIEAMIEAMIEAg74p16e92AMACIEGIN CERTIFICATE------BEGIN CERTIFICATE--------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEG-----BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE----54-----END ---BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATEERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEG-----BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFI CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER--------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE---E-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------B----E-GRTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIF-----BEGIN CERTIFICATEIDEY444-----BEGIN CERTIFICATE444Vd038-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEG54 CRL-----X509$CRL-----BEGIN CERTIFICATE-----iaW5 i-----BEGIN CERTIFICATE--MIECw4-----BEGIN CERTIFICATE448aVd0Y382CATEײ-----BEGIN CERTIFICATEIEdgIQD-----BEGIN CERTIFICATEHk------BEG44-----BEGIN CERTIFICATE-----BEGIN CERTIFICATE4444V44-----BEGIN CERTIFICATEIDEY44T--IFICATE444Vd038-----BEGIN CERTIFICATEIEdgIQD--EG54 CRL-----X509 CRL-----BEGIN CERTIFICATE-----iaW5 i-----BEGINCATE--MIECwAY4GIN CERTIFICATE-----Ew4kEriTUCSGU4zMFgz4Y24ft8Q-----BEGIN CERTIFICATE---Ig65fczcFi-----BEG CER----END CERTIF-----BEGIN X509 CERTIFICATE-BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIQL1SwxCQ+cBR7oSy1AMGE2jANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMVGhhd3RlLCBJbmMuMRYwFAYDVQQDEw1UaGF3dGUgU1NMIENBMB4XDTEyMDYxNDAwMDAwMFoXDTEzMDYyMjIzNkOT1VowcTELMAkGA1UEBhMCQ1oxDzANBgNVBAgTBlByYWd1ZTEPMA0GA1UEBx4GUHJhZ3VlMSQwIgYDVQQKFBtVbmllbnQgQ14tbXVuaWNhdGlvbnMsIgEucy8xGjAYBgNVBAMUEXBvcnRhbC52aXBob25lLmN6MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCRHmLnhIK/PJfPxPjbejpLCY0cAMVNl7LhW87bLwsKDEczTcFiu6NxaTeZLX2nYOnDWOQkISott8CR70qr74v+AcX0pW47SL9pt9fdU95bDLSgfykja7t9bwVU3VcgbQt0tR3Bm8D0sZuGmPeDmqH6EC2pi6KoMEcW31m/4IVHQIDAQABo4GgMIGdMAwGA1UdEgEB/wQCMAAwOgYDVR0fBDMwMTAvnMTAvoCpaHR0cDovL3N2ci1vdi1jcmwudGhhd3RlLmNvbS9UaGF3dGVPVi5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMJMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAYXWaHR0cDovL28jc3AudGhhd3RlLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAUhYOVI5Y0Hs5VVyH2Cva213c4a3c98fddxNDAwMDAwMFoXDTEzMDYyMjIzNkVgLEaWiRvX3WoPqzwz19iRXLpW23y4h2dN0B1AXWCxmC9HzYQebzojDkw1PIocj4clYVJ3l16Dh0r/JzzRtP3+msKGaDYD/E1f5lyt6uX7uuchnGZ+DU5OnjBY/rnPR5jiq6repy+JiXZg24SrD0+CF21CG9HcKX2dRUcZ8RB1wXv7f+66WhlU10TNY2I7/gCCARDjLwv/RBp6tc+ObfaCb6IljON4UhEVS1wu/dJDsuuw7lAIudWuGL0gvVR/d6j16t4doAy2iDiXXyFre3/Gk0tQ== +-----END CERTIFICArFdFRDovL3N2ci1vdhd3RlLmNvbS9UaGF3dGVlb3buMsHgba2115dY2FeWFTU0wx +EVTMREwD \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f08830f7cd8ed8652d0b7575866948577a8286c3 b/fuzz/gnutls_set_trust_file_fuzzer.in/f08830f7cd8ed8652d0b7575866948577a8286c3 new file mode 100644 index 0000000000..41a146a065 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f08830f7cd8ed8652d0b7575866948577a8286c3 @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X50CTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END Ct- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f096e8c61a34684e06efd89c47b77f24bd6c5ce5 b/fuzz/gnutls_set_trust_file_fuzzer.in/f096e8c61a34684e06efd89c47b77f24bd6c5ce5 new file mode 100644 index 0000000000..f8e484421c --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f096e8c61a34684e06efd89c47b77f24bd6c5ce5 @@ -0,0 +1 @@ +Ct------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVv5FAVwvvvQvTAAFw2xMzA0LTEiwTgwuACKMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw3xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL--RVvTJL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTYwuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigELTY5uACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f0c8f56cca97c669255b3ba4046c5abbe1b0aeb4 b/fuzz/gnutls_set_trust_file_fuzzer.in/f0c8f56cca97c669255b3ba4046c5abbe1b0aeb4 new file mode 100644 index 0000000000..d14532f299 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/f0c8f56cca97c669255b3ba4046c5abbe1b0aeb4 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f109730a091bb219c40b0613830cf0beea2e9255 b/fuzz/gnutls_set_trust_file_fuzzer.in/f109730a091bb219c40b0613830cf0beea2e9255 new file mode 100644 index 0000000000..4a301cc93f --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f109730a091bb219c40b0613830cf0beea2e9255 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE09 CER-----BEGIN X FICATE-----END diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f12b9e099e80f75a8131851288b400ceda1edcf9 b/fuzz/gnutls_set_trust_file_fuzzer.in/f12b9e099e80f75a8131851288b400ceda1edcf9 new file mode 100644 index 0000000000..770aa7f8c3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f12b9e099e80f75a8131851288b400ceda1edcf9 @@ -0,0 +1,12 @@ +BAwGA1509* CRLTERTIC1-----BEGIN CERTIFICATE-g-E-----BEGIN CERTIFICATEMR-----BEGIN X509 CRLT-E-----BEGIN CERTIFICATEo-----BEGIN X509 CERTIFICATEF----- +MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNDQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0x +MDA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4G +A1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkq +hkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJB +AMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUlt3Se+s2oq5+ +Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END Ce-i \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f252deccfa0ac8aea46cd4b303c2eb579f0be5d0 b/fuzz/gnutls_set_trust_file_fuzzer.in/f252deccfa0ac8aea46cd4b303c2eb579f0be5d0 new file mode 100644 index 0000000000..e27b268978 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f252deccfa0ac8aea46cd4b303c2eb579f0be5d0 @@ -0,0 +1,7 @@ +-----BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-------BEGIN CERTIFICE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f4bac256dff9f287c998eb3f04c2fb1728385ca7 b/fuzz/gnutls_set_trust_file_fuzzer.in/f4bac256dff9f287c998eb3f04c2fb1728385ca7 new file mode 100644 index 0000000000..fa3f8470a0 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f4bac256dff9f287c998eb3f04c2fb1728385ca7 @@ -0,0 +1 @@ +-----BEGIN CERTIFICATE-----MIEwMCICAmMMMAgGBEGmAaEAADAAMAAwADAMMAgGBEGwAcAEAAMAMAgGBEGmAcEFAAMA-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f4f77be95febff54e1be64770c0b018200efcfac b/fuzz/gnutls_set_trust_file_fuzzer.in/f4f77be95febff54e1be64770c0b018200efcfac new file mode 100644 index 0000000000..195955f800 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/f4f77be95febff54e1be64770c0b018200efcfac differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f522892e722b21d8ecec39ca269c54f6a24cd0f3 b/fuzz/gnutls_set_trust_file_fuzzer.in/f522892e722b21d8ecec39ca269c54f6a24cd0f3 new file mode 100644 index 0000000000..584291edb3 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f522892e722b21d8ecec39ca269c54f6a24cd0f3 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChQMRXN0ZWUgTGF1ZG6yMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECB4ITXIFVdlPUksxGDAWBgNVBAMUDyoujGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNMO2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END ICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f529f4c498eb91b1d73622ccbf10639831c8ad48 b/fuzz/gnutls_set_trust_file_fuzzer.in/f529f4c498eb91b1d73622ccbf10639831c8ad48 new file mode 100644 index 0000000000..9f0507a359 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f529f4c498eb91b1d73622ccbf10639831c8ad48 @@ -0,0 +1,7 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw02Mx +ADMzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f6f770198b06cdc87d44ce6cec2225dbb3856c18 b/fuzz/gnutls_set_trust_file_fuzzer.in/f6f770198b06cdc87d44ce6cec2225dbb3856c18 new file mode 100644 index 0000000000..2283997ca9 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/f6f770198b06cdc87d44ce6cec2225dbb3856c18 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f72adac0240fd8e011b3f0e0546655b3818affa7 b/fuzz/gnutls_set_trust_file_fuzzer.in/f72adac0240fd8e011b3f0e0546655b3818affa7 new file mode 100644 index 0000000000..0a41a841f1 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f72adac0240fd8e011b3f0e0546655b3818affa7 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAXTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UUChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQYEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM0DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END -- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f749b063aae29215a0d005e4c50f8125f79437f6 b/fuzz/gnutls_set_trust_file_fuzzer.in/f749b063aae29215a0d005e4c50f8125f79437f6 new file mode 100644 index 0000000000..312910ac40 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/f749b063aae29215a0d005e4c50f8125f79437f6 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f781c783ab03ab938d95ba194d67f11e7261f871 b/fuzz/gnutls_set_trust_file_fuzzer.in/f781c783ab03ab938d95ba194d67f11e7261f871 new file mode 100644 index 0000000000..21363b7175 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/f781c783ab03ab938d95ba194d67f11e7261f871 differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f7c832ff2d3b2da8cda41a256e50a952829d2a9b b/fuzz/gnutls_set_trust_file_fuzzer.in/f7c832ff2d3b2da8cda41a256e50a952829d2a9b new file mode 100644 index 0000000000..622a4196fb --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f7c832ff2d3b2da8cda41a256e50a952829d2a9b @@ -0,0 +1 @@ +------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVqrvvQvTAAFw0Az3EDM5T4MwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0Az3EDM0T4MwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0Az3EDM5T4MwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVv14 CRL-----END MG-MIIAIA \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f81850975c7c9027e3a8893dbd692c4046cc5cc9 b/fuzz/gnutls_set_trust_file_fuzzer.in/f81850975c7c9027e3a8893dbd692c4046cc5cc9 new file mode 100644 index 0000000000..fada90d067 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f81850975c7c9027e3a8893dbd692c4046cc5cc9 @@ -0,0 +1,20 @@ +Cert +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0RBIG6MIG3hhdGlvbZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYYJ +AOdypp4THRdcMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQol/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END C \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f84799a14c0f8ac3d95a0551d706a8f57cb0a62d b/fuzz/gnutls_set_trust_file_fuzzer.in/f84799a14c0f8ac3d95a0551d706a8f57cb0a62d new file mode 100644 index 0000000000..195187d6b9 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f84799a14c0f8ac3d95a0551d706a8f57cb0a62d @@ -0,0 +1,7 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATER------BEGIN CERTIFICATE------BN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFIEGIN CERTIFICATEATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END B \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f91d4c9d84577edaeae6182bcc27a8931cec06ff b/fuzz/gnutls_set_trust_file_fuzzer.in/f91d4c9d84577edaeae6182bcc27a8931cec06ff new file mode 100644 index 0000000000..7f1da4b96a Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/f91d4c9d84577edaeae6182bcc27a8931cec06ff differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/f9cc1d9de781836c60467188df2b1b6abc657e09 b/fuzz/gnutls_set_trust_file_fuzzer.in/f9cc1d9de781836c60467188df2b1b6abc657e09 new file mode 100644 index 0000000000..f165dbdbba --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/f9cc1d9de781836c60467188df2b1b6abc657e09 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw04MzH0DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ1VL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/fa26e7837c87583d944722887f61b81877526f85 b/fuzz/gnutls_set_trust_file_fuzzer.in/fa26e7837c87583d944722887f61b81877526f85 new file mode 100644 index 0000000000..21f539f976 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/fa26e7837c87583d944722887f61b81877526f85 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAAIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/faf3eb8d916d2e902bbec214a6fb54f7ec4de973 b/fuzz/gnutls_set_trust_file_fuzzer.in/faf3eb8d916d2e902bbec214a6fb54f7ec4de973 new file mode 100644 index 0000000000..b927515bbd --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/faf3eb8d916d2e902bbec214a6fb54f7ec4de973 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw0xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBPkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMUDyoubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL+SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CEFICATE----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/fb5286241f24716e2e4031b1b6cdaa02df6f13b0 b/fuzz/gnutls_set_trust_file_fuzzer.in/fb5286241f24716e2e4031b1b6cdaa02df6f13b0 new file mode 100644 index 0000000000..9044d67728 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/fb5286241f24716e2e4031b1b6cdaa02df6f13b0 @@ -0,0 +1,20 @@ +Cert +-----BEGIN CERTIFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q2xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4YDTE2MDgxMTIw +MDczOFoXDTc0MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVnb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CQEWEGluZm9Ad29sZnNzbC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam9 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0jBIG6MIG3gBTr1EtZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYIJ +AOdypp4THRdcMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pYOGQol/JduZUGoECIQDWi3y6uxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END C \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/fc10a65143810e47603f7a6687a826234c855daa b/fuzz/gnutls_set_trust_file_fuzzer.in/fc10a65143810e47603f7a6687a826234c855daa new file mode 100644 index 0000000000..05f45251be --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/fc10a65143810e47603f7a6687a826234c855daa @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----X42I-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/fc712ec893de61cd4648d3a41387f5b077b6a809 b/fuzz/gnutls_set_trust_file_fuzzer.in/fc712ec893de61cd4648d3a41387f5b077b6a809 new file mode 100644 index 0000000000..684315c94d --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/fc712ec893de61cd4648d3a41387f5b077b6a809 @@ -0,0 +1 @@ +C------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMzA0LTEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMzA0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/fcc357c058615126a27dabcfd4531873f9008c62 b/fuzz/gnutls_set_trust_file_fuzzer.in/fcc357c058615126a27dabcfd4531873f9008c62 new file mode 100644 index 0000000000..1798d1ff0a --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/fcc357c058615126a27dabcfd4531873f9008c62 @@ -0,0 +1,19 @@ +------BEGIN CERTIFICATERTIFICATE-----END ------BEGIN CERTIFICATEb-----BEGIN X509 CERTIFICATEFICATE----- +MIIDCTCCAq+gAwIBAgIJAOdypp4THRdcMAoGCCqGSM49BAMCMIGNMQswCQYDVQQG +EwJVUzEPMA0GA1UECAwGT3JlZ29uMQ4wDAYDVQQHDAVTYWxlbTETMBEGA1UECgwK +Q3xpZW50IEVDQzENMAsGA1UECwwERmFzdDEYMBYGA1UEAwwPd3d3LndvbGZzc2wu +Y29tMR8wHQYJKoZIhvcNAQkBFhBpbmZvQHdvbGZzc2wuY29tMB4XDTE2MDgxMTIw +MDczOFoXDTE5MDUwODIwMDczOFowgY0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQIDAZP +cmVvb24xDjAMBgNVBAcMBVNhbGVtMRMwEQYDVQQKDApDbGllbnQgRUNDMQ0wCwYD +VQQLDARGYXN0MRgwFgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0B +CRSVEGluZm9Ad29CZzsnbN5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARV +v/QPRFCaPc6bt/DFTfVwe9TsJI4ZgOxaTKIkA2Ism9rvojUSQ4R2FsZWlQbMAam3 +9nUaQve9qbI2Il/HXX+0o4H1MIHyMB0GA1UdDgQWBBTr1EtZa5VhP1FXtgRNiUGI +RFyr8jCBwgYDVR0jBIG6MIG3gBTr1EtZa5VhP1FXtgRNiUGIRFyr8qGBk6SBkDCB +jTELMAkGA1UEBhMCVVMxDzANBgNVBAgMBk9yZWdvbjEOMAwGA1UEBwwFU2FsZW0x +EzARBgNVBAoMCkNsaWVudCBFQ0MxDTALBgNVBAsMBEZhc3QxGDAWBgNVBAMMD3d3 +dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3b2xmc3NsLmNvbYIJ +AOdypp4THRdcMAwGA1UdEwQFMEMABf8wCgYIKoZIzj0EAwIDSAAwRQIgQ5q2foeO +jNcW8Q3SUBGkrLasB+/pOOGPol/JduZUGoECIQDWi3y6UxIFBvqPxcdYw5qfoYSM +tIiDTWq0t4V6szzz3w== +-----END CE \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/fcca257ef1148badfd6665ce9eccf8e740f6d462 b/fuzz/gnutls_set_trust_file_fuzzer.in/fcca257ef1148badfd6665ce9eccf8e740f6d462 new file mode 100644 index 0000000000..7b2ddcc962 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/fcca257ef1148badfd6665ce9eccf8e740f6d462 @@ -0,0 +1 @@ +Ct-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVwvvvQvTAAFw2xMLAz0TEiKTCguwwAMBEGCEIRNCTIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2MzAx0wigYuEwLTAkCMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTBAVvvvvQvTAAFw2xMg0iEAwzLTYuuACkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/fdc355db4d57caaadd2e8b79848e8765228bfa12 b/fuzz/gnutls_set_trust_file_fuzzer.in/fdc355db4d57caaadd2e8b79848e8765228bfa12 new file mode 100644 index 0000000000..b78443f584 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/fdc355db4d57caaadd2e8b79848e8765228bfa12 @@ -0,0 +1,4 @@ +------BEGIN CERTIFICATE-Z------BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 -----BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE----ERTIFICATE------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-E------BEGIN CERTIFICATE--------B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X48 CERTIFICAT8-----BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN0o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDMxdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xLjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW4yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVSQLEwtBUkFNSVMgSU5DLjERMA8GA1UECBMITkVXIFlPUksxGDAWBgNVBAMeDyou2VbcFiGyAWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTr2ewXCGgiTfIjdRd3LAmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUpPJ+5nPIUmw9moUXrcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gxv04JV0iOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +--BwMJMBggrBgEFBQcwAR0cDovLEAAAA- +-----END ! cIZIAYb4QZrfs1PH2ZCH/9aI0QtA4n8bdOMIMEAM-----ENLATEEMt \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/fdc9973e3c690d89a9830f637601498c7b92bedb b/fuzz/gnutls_set_trust_file_fuzzer.in/fdc9973e3c690d89a9830f637601498c7b92bedb new file mode 100644 index 0000000000..18697bef17 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/fdc9973e3c690d89a9830f637601498c7b92bedb @@ -0,0 +1,7 @@ +------BEGIN X509 CRL-----BEGIN CERTIFICATE)Z*-----BEGIN CERTIFICATE-----B-----BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER-------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE------ER------BEGIN CERTIFICATE------BEGIN CERTIFICATE------BEGIN CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATE-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDWQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd4d3LnNhd3Rvbw0xMzBzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyThbjEOMAwGA1UECgMFeWFODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wx +EDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+gNVBAMTDXd1dy55YXNzbC9jb20xHTAbBgkqhkiG9w0BCQEaQzNpsHRLY4EcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/fe908361d57d0337912b93372573959579d4f412 b/fuzz/gnutls_set_trust_file_fuzzer.in/fe908361d57d0337912b93372573959579d4f412 new file mode 100644 index 0000000000..a0b2550665 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/fe908361d57d0337912b93372573959579d4f412 @@ -0,0 +1 @@ +-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AyMEDz28TwwuTAgCkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw03MCA1DTEiwwuTAgCkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/fe930b3eb3ab27399ff2741ffbfdeb8b381cf8c2 b/fuzz/gnutls_set_trust_file_fuzzer.in/fe930b3eb3ab27399ff2741ffbfdeb8b381cf8c2 new file mode 100644 index 0000000000..b604d04a7e --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/fe930b3eb3ab27399ff2741ffbfdeb8b381cf8c2 @@ -0,0 +1,3 @@ +-----BEGIN CERTIFICATE----- +MIICujCCAiOgAwIBAgIOAgAAAAABN7o2b+oRaOIwDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF0FrYW1haSBUZWNobm9sb2dpZXMgSW5jMSAwHgYDVQQDExdBa2FtYWkgU3Vib3JkaW5hdGUgQ0EgMzAeFw0xMjA2MDUwMTMwNTRaFw1xMzA1MTEyMzU5MDBaMHoxCzAJBgNVBAYTAlVTMREwDwYDVQQHEwhOZXcgWW9yazEVMBMGA1UEChMMRXN0ZWUgTGF1ZGVyMRQwEgYDVQQLEwtBUkFNSVMgSD6ULjERMA8GA1UECBMIPkVXIFlUPksxGDAWBgNVBAMUD9oubGFic2VyaWVzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6LVYL0SxkId2OcGlRSSpHOPgVXjaYWWWUZgY5b0M5Hw7fst0YtIro4eHdxOZek0SztRdLUyI7NotSRocfK7eJ8HAnGCk1q/pdAaYe/xd8B4M44CruXNOM2DsE4uhUPxbuCJdFYmxcjHAUFbTre2wXCGgiTfIjdRd3LGmTk2ZJIcCAwEAAaNsMGowOQYDVR0fBDIwMDAuoCygKoYoaHR0cDovL2NybC5nbG9iYWxzaWduLm0ldC9Ba2FtYWlTdWIzLmNybDAdBgNVHQ4EFgQUza1YjgmEUrPJ+5nPIUmw9moUXvcwDgYDVR0PAQH/BAQDAgUgMA0GCSqGSIb3DQEBBQUAA4GBAJQUhG3vEgkgA5LEReMH+eHLuqfM18VpxmIyzhD8gx4v00JViOi3GjiUKZFBEJv4EXrS2OSprg1uRVI8NGPvbr7IlvZq1sx6NSGDLo9Bd/maff4ADbxYnN7javsrFdFRj0IbJz5Qa1sknhnTAH13shazhzDFdRPhQenNrbI4RTE/ +-----END CER----- \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ff0100b68690f1bd56011c74cbe2e0ea721f2d12 b/fuzz/gnutls_set_trust_file_fuzzer.in/ff0100b68690f1bd56011c74cbe2e0ea721f2d12 new file mode 100644 index 0000000000..b3ee6c94f2 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/ff0100b68690f1bd56011c74cbe2e0ea721f2d12 @@ -0,0 +1 @@ +CCXN X509A-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-9AVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMAMGTVvTwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-------END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ff9e8d561f01206f07a2b29b82429da93f01f41b b/fuzz/gnutls_set_trust_file_fuzzer.in/ff9e8d561f01206f07a2b29b82429da93f01f41b new file mode 100644 index 0000000000..a1e9b29060 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.in/ff9e8d561f01206f07a2b29b82429da93f01f41b differ diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/ffb7296ee3fea97ffa4887c614f40da3b5fd68e3 b/fuzz/gnutls_set_trust_file_fuzzer.in/ffb7296ee3fea97ffa4887c614f40da3b5fd68e3 new file mode 100644 index 0000000000..f88d13afbf --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/ffb7296ee3fea97ffa4887c614f40da3b5fd68e3 @@ -0,0 +1 @@ +CC------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----TJAVvvvBAvAMGTVvTJAVL------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL----------BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.in/fffe508a71cd953e749637a2a1ced677ede8aa42 b/fuzz/gnutls_set_trust_file_fuzzer.in/fffe508a71cd953e749637a2a1ced677ede8aa42 new file mode 100644 index 0000000000..efd39b6ce6 --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.in/fffe508a71cd953e749637a2a1ced677ede8aa42 @@ -0,0 +1,6 @@ +-----BEGIN CERTIFICATE-----BEGIN CERTIFICATERGI CERTIFICATE-----BEGIN CERTIFICATER------BEGIN CERTIFICATE----------BEGIN CERTIFICATE-----BEGIN X509 CERTIFICATEF-----MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdNb250YW5hMRAwDgYDVQQHGwdCb3plbSFuMREwDwYDVQQKEwhzYXd0b290 +aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvbw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFubTAeFw0x +MDA2MzyTUMxOADdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UECgMFeWFTU0wxEDAOBgNVBAsTB3N1cBBvcnQxFjAUBgNVBAMTDXd1dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYLKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/Msw4ZKZrfs1PH2ZCH/8aI0QtA4n8bdO23mZWpUtl3Se+s2oq5+Kp5+VyW2h58VxxhmfhZ34qcCKwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA +5+FHkhkbOo+Xs3buMsHgba2115dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00= +-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.repro/ef118c4e773fc81ad3311dae0405b42f2b6ccbe8 b/fuzz/gnutls_set_trust_file_fuzzer.repro/ef118c4e773fc81ad3311dae0405b42f2b6ccbe8 new file mode 100644 index 0000000000..0eef0258ec --- /dev/null +++ b/fuzz/gnutls_set_trust_file_fuzzer.repro/ef118c4e773fc81ad3311dae0405b42f2b6ccbe8 @@ -0,0 +1 @@ + -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL - -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL - -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL - -----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CR---BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----ENiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----ETAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509CIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN 09 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-CIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVBIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END GTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X59 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGINMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEzA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END FNSVB-/-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKkMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJ7VL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvQvTAAFw0AczA1DTEiwwUTAgKbMBEGCEIRNTCIMVvTCAVvvvBAvAMGTVvTJAVL-----BEGIN X509 CRL-----MIIAQTAkMBEGCEIRNTCIIVvTFAVvvvvWvTAAGIEMIvwwwwwwwwugCTAkMBEGCEIRNTCIMVvTJAVvvvBAvAMGTVvTJAVL-----END \ No newline at end of file diff --git a/fuzz/gnutls_set_trust_file_fuzzer.repro/leak-45c99e9c25d7822699485d62af11038c57c364a0 b/fuzz/gnutls_set_trust_file_fuzzer.repro/leak-45c99e9c25d7822699485d62af11038c57c364a0 new file mode 100644 index 0000000000..5b12ceedb3 Binary files /dev/null and b/fuzz/gnutls_set_trust_file_fuzzer.repro/leak-45c99e9c25d7822699485d62af11038c57c364a0 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.c b/fuzz/gnutls_srp_client_fuzzer.c new file mode 100644 index 0000000000..eb3f7f9994 --- /dev/null +++ b/fuzz/gnutls_srp_client_fuzzer.c @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * 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. + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "srp.h" +#include "mem.h" +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size) +{ + int res; + gnutls_session_t session; + gnutls_srp_client_credentials_t pcred; + struct mem_st memdata; + + res = gnutls_init(&session, GNUTLS_CLIENT); + assert(res >= 0); + + res = gnutls_srp_allocate_client_credentials(&pcred); + assert(res >= 0); + + res = gnutls_srp_set_client_credentials(pcred, USERNAME, PASSWORD); + assert(res >= 0); + + res = gnutls_credentials_set(session, GNUTLS_CRD_SRP, pcred); + assert(res >= 0); + + res = gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+SRP:+SRP-RSA:+SRP-DSS", NULL); + assert(res >= 0); + + memdata.data = data; + memdata.size = size; + + gnutls_transport_set_push_function(session, mem_push); + gnutls_transport_set_pull_function(session, mem_pull); + gnutls_transport_set_pull_timeout_function(session, + mem_pull_timeout); + gnutls_transport_set_ptr(session, &memdata); + gnutls_srp_set_prime_bits(session, 1024); + + do { + res = gnutls_handshake(session); + } while (res < 0 && gnutls_error_is_fatal(res) == 0); + if (res >= 0) { + for (;;) { + char buf[16384]; + res = gnutls_record_recv(session, buf, sizeof(buf)); + if (res <= 0) { + break; + } + } + } + + gnutls_deinit(session); + gnutls_srp_free_client_credentials(pcred); + return 0; +} diff --git a/fuzz/gnutls_srp_client_fuzzer.in/008f27dda83b42ecc0c9beac18f1b624df581d00 b/fuzz/gnutls_srp_client_fuzzer.in/008f27dda83b42ecc0c9beac18f1b624df581d00 new file mode 100644 index 0000000000..e45fd08d77 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/008f27dda83b42ecc0c9beac18f1b624df581d00 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/00d92ad7191133bedade6b46ede3ace4d5230c8b b/fuzz/gnutls_srp_client_fuzzer.in/00d92ad7191133bedade6b46ede3ace4d5230c8b new file mode 100644 index 0000000000..ae324628cf Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/00d92ad7191133bedade6b46ede3ace4d5230c8b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/01f777253b481f4c64661101316f923368d5899e b/fuzz/gnutls_srp_client_fuzzer.in/01f777253b481f4c64661101316f923368d5899e new file mode 100644 index 0000000000..537f451400 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/01f777253b481f4c64661101316f923368d5899e differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/02316b6e8c6cadb23602a36f8954a84b4560929f b/fuzz/gnutls_srp_client_fuzzer.in/02316b6e8c6cadb23602a36f8954a84b4560929f new file mode 100644 index 0000000000..206db962ac Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/02316b6e8c6cadb23602a36f8954a84b4560929f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/02378f485aae1857a5356c935d390ce290731206 b/fuzz/gnutls_srp_client_fuzzer.in/02378f485aae1857a5356c935d390ce290731206 new file mode 100644 index 0000000000..2e87450a84 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/02378f485aae1857a5356c935d390ce290731206 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/02f3111bcdfcb49f5ed7b1c117edbb7506b72508 b/fuzz/gnutls_srp_client_fuzzer.in/02f3111bcdfcb49f5ed7b1c117edbb7506b72508 new file mode 100644 index 0000000000..ac16322849 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/02f3111bcdfcb49f5ed7b1c117edbb7506b72508 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/0415a254e82978a3d3b3ba9d3eaf700006aff375 b/fuzz/gnutls_srp_client_fuzzer.in/0415a254e82978a3d3b3ba9d3eaf700006aff375 new file mode 100644 index 0000000000..054ee5ca82 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/0415a254e82978a3d3b3ba9d3eaf700006aff375 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/05f1bee219ec97cb4bd4faab3bc4f5694f966ef4 b/fuzz/gnutls_srp_client_fuzzer.in/05f1bee219ec97cb4bd4faab3bc4f5694f966ef4 new file mode 100644 index 0000000000..61844dfc9e Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/05f1bee219ec97cb4bd4faab3bc4f5694f966ef4 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/061eab56359d98f5a2927666d8bf5b2ae849d94b b/fuzz/gnutls_srp_client_fuzzer.in/061eab56359d98f5a2927666d8bf5b2ae849d94b new file mode 100644 index 0000000000..8114723d1c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/061eab56359d98f5a2927666d8bf5b2ae849d94b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/081e9b695bf7ee8482ac211d3fe018916b4bf0f4 b/fuzz/gnutls_srp_client_fuzzer.in/081e9b695bf7ee8482ac211d3fe018916b4bf0f4 new file mode 100644 index 0000000000..50ebe0b43d Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/081e9b695bf7ee8482ac211d3fe018916b4bf0f4 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/0a413c74127e8f4bced227a9e7c69711be2dcc55 b/fuzz/gnutls_srp_client_fuzzer.in/0a413c74127e8f4bced227a9e7c69711be2dcc55 new file mode 100644 index 0000000000..573c04ddda Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/0a413c74127e8f4bced227a9e7c69711be2dcc55 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/0a462b0bb312e0a4e3aef0c11bf0e89958982b97 b/fuzz/gnutls_srp_client_fuzzer.in/0a462b0bb312e0a4e3aef0c11bf0e89958982b97 new file mode 100644 index 0000000000..bdbaff78da Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/0a462b0bb312e0a4e3aef0c11bf0e89958982b97 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/0b46591a353bf4dfb079f4603a6ff74980de2067 b/fuzz/gnutls_srp_client_fuzzer.in/0b46591a353bf4dfb079f4603a6ff74980de2067 new file mode 100644 index 0000000000..179037546c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/0b46591a353bf4dfb079f4603a6ff74980de2067 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/0e3562a631b9eace738d3f4c346cbe9473aac0dd b/fuzz/gnutls_srp_client_fuzzer.in/0e3562a631b9eace738d3f4c346cbe9473aac0dd new file mode 100644 index 0000000000..388a8569c0 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/0e3562a631b9eace738d3f4c346cbe9473aac0dd differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/0ebce05c1077f4fbfcfb8e4c317cd4e190e4a108 b/fuzz/gnutls_srp_client_fuzzer.in/0ebce05c1077f4fbfcfb8e4c317cd4e190e4a108 new file mode 100644 index 0000000000..dd393e608b Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/0ebce05c1077f4fbfcfb8e4c317cd4e190e4a108 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/10a9bd558f452dd0cb2be4e856d9f4f74c0792a3 b/fuzz/gnutls_srp_client_fuzzer.in/10a9bd558f452dd0cb2be4e856d9f4f74c0792a3 new file mode 100644 index 0000000000..1d57f278bf Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/10a9bd558f452dd0cb2be4e856d9f4f74c0792a3 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/11cb7fadaaaf75f473a9f9d357d96c446fa3408a b/fuzz/gnutls_srp_client_fuzzer.in/11cb7fadaaaf75f473a9f9d357d96c446fa3408a new file mode 100644 index 0000000000..ccc2830ab3 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/11cb7fadaaaf75f473a9f9d357d96c446fa3408a differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/11d937da6bd2c6c4032479b198ab52495eb1dd23 b/fuzz/gnutls_srp_client_fuzzer.in/11d937da6bd2c6c4032479b198ab52495eb1dd23 new file mode 100644 index 0000000000..9f20f98767 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/11d937da6bd2c6c4032479b198ab52495eb1dd23 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/1410b0284f34e435d843a68761c766308a84785c b/fuzz/gnutls_srp_client_fuzzer.in/1410b0284f34e435d843a68761c766308a84785c new file mode 100644 index 0000000000..6ea2834551 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/1410b0284f34e435d843a68761c766308a84785c differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/1569f3fe14ef1af8f881235e77f1725b033a63ba b/fuzz/gnutls_srp_client_fuzzer.in/1569f3fe14ef1af8f881235e77f1725b033a63ba new file mode 100644 index 0000000000..b878900b5c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/1569f3fe14ef1af8f881235e77f1725b033a63ba differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/15bae6ae0ba4417f950f2f670a5359e0496f7caa b/fuzz/gnutls_srp_client_fuzzer.in/15bae6ae0ba4417f950f2f670a5359e0496f7caa new file mode 100644 index 0000000000..09c679d354 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/15bae6ae0ba4417f950f2f670a5359e0496f7caa differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/19434bf16c22cc4386d1c517bb40f4bbc89c315d b/fuzz/gnutls_srp_client_fuzzer.in/19434bf16c22cc4386d1c517bb40f4bbc89c315d new file mode 100644 index 0000000000..0f818dcd9a Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/19434bf16c22cc4386d1c517bb40f4bbc89c315d differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/199ea22af05f0209f65997bdc2729af13f7ac4d3 b/fuzz/gnutls_srp_client_fuzzer.in/199ea22af05f0209f65997bdc2729af13f7ac4d3 new file mode 100644 index 0000000000..c3767b9816 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/199ea22af05f0209f65997bdc2729af13f7ac4d3 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/19ba1ba4632ab21fc937757fccb6b6953c9e3f8d b/fuzz/gnutls_srp_client_fuzzer.in/19ba1ba4632ab21fc937757fccb6b6953c9e3f8d new file mode 100644 index 0000000000..875d5d45c2 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/19ba1ba4632ab21fc937757fccb6b6953c9e3f8d differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/19edad94762633ddb4c23009509e42068b5511e0 b/fuzz/gnutls_srp_client_fuzzer.in/19edad94762633ddb4c23009509e42068b5511e0 new file mode 100644 index 0000000000..2036fb12aa Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/19edad94762633ddb4c23009509e42068b5511e0 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/1a677bb7c408b19c293e8bec8f4f88579ba03ae6 b/fuzz/gnutls_srp_client_fuzzer.in/1a677bb7c408b19c293e8bec8f4f88579ba03ae6 new file mode 100644 index 0000000000..28e50ba091 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/1a677bb7c408b19c293e8bec8f4f88579ba03ae6 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/1ae0fbc9ca2fdfcb7d70df9852415f5b81cb6750 b/fuzz/gnutls_srp_client_fuzzer.in/1ae0fbc9ca2fdfcb7d70df9852415f5b81cb6750 new file mode 100644 index 0000000000..2537d20da2 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/1ae0fbc9ca2fdfcb7d70df9852415f5b81cb6750 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/1c5f363d0852e7fccf6d777041ea932aac87bd2b b/fuzz/gnutls_srp_client_fuzzer.in/1c5f363d0852e7fccf6d777041ea932aac87bd2b new file mode 100644 index 0000000000..2f19017f60 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/1c5f363d0852e7fccf6d777041ea932aac87bd2b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/1c9413972d0f6b7e92668f9d992d0ea21fb897fb b/fuzz/gnutls_srp_client_fuzzer.in/1c9413972d0f6b7e92668f9d992d0ea21fb897fb new file mode 100644 index 0000000000..365f3b0b4c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/1c9413972d0f6b7e92668f9d992d0ea21fb897fb differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/1f786e09591f42c8d2f8f53dd52b97eebae94a22 b/fuzz/gnutls_srp_client_fuzzer.in/1f786e09591f42c8d2f8f53dd52b97eebae94a22 new file mode 100644 index 0000000000..283784332f Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/1f786e09591f42c8d2f8f53dd52b97eebae94a22 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/247dedfb607ec32f1b8e2454e14baf099cd16787 b/fuzz/gnutls_srp_client_fuzzer.in/247dedfb607ec32f1b8e2454e14baf099cd16787 new file mode 100644 index 0000000000..99d7829295 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/247dedfb607ec32f1b8e2454e14baf099cd16787 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/251c2370c724aaa34cd36fcd3576bc46d00bc522 b/fuzz/gnutls_srp_client_fuzzer.in/251c2370c724aaa34cd36fcd3576bc46d00bc522 new file mode 100644 index 0000000000..2e4ed62c19 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/251c2370c724aaa34cd36fcd3576bc46d00bc522 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/27a48b07f6f26f7cba5c4a021994f579eb61de5a b/fuzz/gnutls_srp_client_fuzzer.in/27a48b07f6f26f7cba5c4a021994f579eb61de5a new file mode 100644 index 0000000000..659d203df1 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/27a48b07f6f26f7cba5c4a021994f579eb61de5a differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/28353c4c3538dfe7aee608a4910029a495290d24 b/fuzz/gnutls_srp_client_fuzzer.in/28353c4c3538dfe7aee608a4910029a495290d24 new file mode 100644 index 0000000000..a8b83a914d Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/28353c4c3538dfe7aee608a4910029a495290d24 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/292144d18b481d1a17f495a4639ea05a3aac7220 b/fuzz/gnutls_srp_client_fuzzer.in/292144d18b481d1a17f495a4639ea05a3aac7220 new file mode 100644 index 0000000000..729852f49e Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/292144d18b481d1a17f495a4639ea05a3aac7220 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/2a61d855e27bb016e4963992c1307b51a96228d4 b/fuzz/gnutls_srp_client_fuzzer.in/2a61d855e27bb016e4963992c1307b51a96228d4 new file mode 100644 index 0000000000..a8e4146977 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/2a61d855e27bb016e4963992c1307b51a96228d4 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/2b0c8dccb0b9ce9c66e7fb5d985fe07c66aabac7 b/fuzz/gnutls_srp_client_fuzzer.in/2b0c8dccb0b9ce9c66e7fb5d985fe07c66aabac7 new file mode 100644 index 0000000000..fe8f90ca26 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/2b0c8dccb0b9ce9c66e7fb5d985fe07c66aabac7 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/2ccdf36c9542d465f82d79f5c779a14f33097de5 b/fuzz/gnutls_srp_client_fuzzer.in/2ccdf36c9542d465f82d79f5c779a14f33097de5 new file mode 100644 index 0000000000..058f82265f Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/2ccdf36c9542d465f82d79f5c779a14f33097de5 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/2db1b9726d1a4abb4b10f2a8523f892ee3916618 b/fuzz/gnutls_srp_client_fuzzer.in/2db1b9726d1a4abb4b10f2a8523f892ee3916618 new file mode 100644 index 0000000000..1e2fb93161 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/2db1b9726d1a4abb4b10f2a8523f892ee3916618 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/2e4a6c0ced1bc6c0f1053f22b73a0c511b463cda b/fuzz/gnutls_srp_client_fuzzer.in/2e4a6c0ced1bc6c0f1053f22b73a0c511b463cda new file mode 100644 index 0000000000..93b7abbc13 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/2e4a6c0ced1bc6c0f1053f22b73a0c511b463cda differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/2f79841bee6aeee60652532a9bedf163202af719 b/fuzz/gnutls_srp_client_fuzzer.in/2f79841bee6aeee60652532a9bedf163202af719 new file mode 100644 index 0000000000..cd0c8f67f0 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/2f79841bee6aeee60652532a9bedf163202af719 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/2f7b8f9bbf5cc1c6023c6d3d233e65ccad9048c0 b/fuzz/gnutls_srp_client_fuzzer.in/2f7b8f9bbf5cc1c6023c6d3d233e65ccad9048c0 new file mode 100644 index 0000000000..dff459f7db Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/2f7b8f9bbf5cc1c6023c6d3d233e65ccad9048c0 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/331ea011febe4f5fd50efc2131d4d5f02d6714d5 b/fuzz/gnutls_srp_client_fuzzer.in/331ea011febe4f5fd50efc2131d4d5f02d6714d5 new file mode 100644 index 0000000000..2ba7a36b63 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/331ea011febe4f5fd50efc2131d4d5f02d6714d5 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/33c957b6cc67c3e060b504671bba4f24241de4a1 b/fuzz/gnutls_srp_client_fuzzer.in/33c957b6cc67c3e060b504671bba4f24241de4a1 new file mode 100644 index 0000000000..f1a7dddd16 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/33c957b6cc67c3e060b504671bba4f24241de4a1 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/359f227b2ba95b68be09fe6e36616792db3e3a2b b/fuzz/gnutls_srp_client_fuzzer.in/359f227b2ba95b68be09fe6e36616792db3e3a2b new file mode 100644 index 0000000000..e93ff8cf46 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/359f227b2ba95b68be09fe6e36616792db3e3a2b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/362ee3ae85a50cef1451f6be73bbc4657a800501 b/fuzz/gnutls_srp_client_fuzzer.in/362ee3ae85a50cef1451f6be73bbc4657a800501 new file mode 100644 index 0000000000..7ff399ce99 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/362ee3ae85a50cef1451f6be73bbc4657a800501 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/374e97c834d3c7225ee185ce6950f6b4230cfe10 b/fuzz/gnutls_srp_client_fuzzer.in/374e97c834d3c7225ee185ce6950f6b4230cfe10 new file mode 100644 index 0000000000..db1949ce28 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/374e97c834d3c7225ee185ce6950f6b4230cfe10 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/39095813a41aba9b61c8e19ab9c581d7dc3ea11b b/fuzz/gnutls_srp_client_fuzzer.in/39095813a41aba9b61c8e19ab9c581d7dc3ea11b new file mode 100644 index 0000000000..144f0d62a7 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/39095813a41aba9b61c8e19ab9c581d7dc3ea11b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/3a1bf480939fe7c384bb27ac1ef8d7f9e577971a b/fuzz/gnutls_srp_client_fuzzer.in/3a1bf480939fe7c384bb27ac1ef8d7f9e577971a new file mode 100644 index 0000000000..ee8738dd74 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/3a1bf480939fe7c384bb27ac1ef8d7f9e577971a differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/3a4a75d55a2fd075359575b8c1980c048d3376ad b/fuzz/gnutls_srp_client_fuzzer.in/3a4a75d55a2fd075359575b8c1980c048d3376ad new file mode 100644 index 0000000000..ed393a98de Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/3a4a75d55a2fd075359575b8c1980c048d3376ad differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/3a7b08860a6ae6a1526422699bbbb80af0e62ed0 b/fuzz/gnutls_srp_client_fuzzer.in/3a7b08860a6ae6a1526422699bbbb80af0e62ed0 new file mode 100644 index 0000000000..50649742b8 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/3a7b08860a6ae6a1526422699bbbb80af0e62ed0 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/3c5f77660e467f9e07fba1b69f0eb3e44b50f874 b/fuzz/gnutls_srp_client_fuzzer.in/3c5f77660e467f9e07fba1b69f0eb3e44b50f874 new file mode 100644 index 0000000000..a99a06f679 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/3c5f77660e467f9e07fba1b69f0eb3e44b50f874 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/3decb968dceb4d94e46b3ba607d39706f670a194 b/fuzz/gnutls_srp_client_fuzzer.in/3decb968dceb4d94e46b3ba607d39706f670a194 new file mode 100644 index 0000000000..bd331d524c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/3decb968dceb4d94e46b3ba607d39706f670a194 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/3e411d6f363a54d8fef83a79d23d77537ba03301 b/fuzz/gnutls_srp_client_fuzzer.in/3e411d6f363a54d8fef83a79d23d77537ba03301 new file mode 100644 index 0000000000..333f8c7b0b Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/3e411d6f363a54d8fef83a79d23d77537ba03301 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/3f73c7bc1e47e1287d3d36d2d95a87165966f50f b/fuzz/gnutls_srp_client_fuzzer.in/3f73c7bc1e47e1287d3d36d2d95a87165966f50f new file mode 100644 index 0000000000..6aad3b5387 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/3f73c7bc1e47e1287d3d36d2d95a87165966f50f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/42253e3d8b39f5b7d1fe4c2543c5694eafbc4cf7 b/fuzz/gnutls_srp_client_fuzzer.in/42253e3d8b39f5b7d1fe4c2543c5694eafbc4cf7 new file mode 100644 index 0000000000..0912fc68cf Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/42253e3d8b39f5b7d1fe4c2543c5694eafbc4cf7 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/42bacba3f1bd9f154669b198c2fae51213eb1705 b/fuzz/gnutls_srp_client_fuzzer.in/42bacba3f1bd9f154669b198c2fae51213eb1705 new file mode 100644 index 0000000000..35360492f5 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/42bacba3f1bd9f154669b198c2fae51213eb1705 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f b/fuzz/gnutls_srp_client_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f new file mode 100644 index 0000000000..5cf1a797d5 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/43c8fd66c9e445cc0431c2e3838de7f934702124 b/fuzz/gnutls_srp_client_fuzzer.in/43c8fd66c9e445cc0431c2e3838de7f934702124 new file mode 100644 index 0000000000..2c75a0d5e9 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/43c8fd66c9e445cc0431c2e3838de7f934702124 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/444c04c03364fccd12a5b2fb624a5c3d240ca62e b/fuzz/gnutls_srp_client_fuzzer.in/444c04c03364fccd12a5b2fb624a5c3d240ca62e new file mode 100644 index 0000000000..e94810c75d Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/444c04c03364fccd12a5b2fb624a5c3d240ca62e differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/4471e8ded6c6764fe5377bff6151710120c53f81 b/fuzz/gnutls_srp_client_fuzzer.in/4471e8ded6c6764fe5377bff6151710120c53f81 new file mode 100644 index 0000000000..f4190231cc Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/4471e8ded6c6764fe5377bff6151710120c53f81 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/44f5f6a34fe9d135ba3f9fe8784c34bf03fa85d7 b/fuzz/gnutls_srp_client_fuzzer.in/44f5f6a34fe9d135ba3f9fe8784c34bf03fa85d7 new file mode 100644 index 0000000000..6eed0ba8af Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/44f5f6a34fe9d135ba3f9fe8784c34bf03fa85d7 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/454210ef21febf56032f14185d2d76fce9895415 b/fuzz/gnutls_srp_client_fuzzer.in/454210ef21febf56032f14185d2d76fce9895415 new file mode 100644 index 0000000000..6fe117e435 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/454210ef21febf56032f14185d2d76fce9895415 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/454de1303e131cc9a81b30904257cef1d790c67d b/fuzz/gnutls_srp_client_fuzzer.in/454de1303e131cc9a81b30904257cef1d790c67d new file mode 100644 index 0000000000..dd6082b5c9 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/454de1303e131cc9a81b30904257cef1d790c67d differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/4a02f8df17b685e010a898f8a2f7e3299a8e87e6 b/fuzz/gnutls_srp_client_fuzzer.in/4a02f8df17b685e010a898f8a2f7e3299a8e87e6 new file mode 100644 index 0000000000..2d4af50ffd Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/4a02f8df17b685e010a898f8a2f7e3299a8e87e6 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/4ba67a6e16fe6c0d23303c2d73fd64b362c6f519 b/fuzz/gnutls_srp_client_fuzzer.in/4ba67a6e16fe6c0d23303c2d73fd64b362c6f519 new file mode 100644 index 0000000000..ee3e3e5ce7 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/4ba67a6e16fe6c0d23303c2d73fd64b362c6f519 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/4c337c3f6889e6ef4a6bb0472dc21eecfcdb4eea b/fuzz/gnutls_srp_client_fuzzer.in/4c337c3f6889e6ef4a6bb0472dc21eecfcdb4eea new file mode 100644 index 0000000000..0019febb4d Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/4c337c3f6889e6ef4a6bb0472dc21eecfcdb4eea differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/4d1e95a705e3a169c52f69d8a0d8609ab2c3a265 b/fuzz/gnutls_srp_client_fuzzer.in/4d1e95a705e3a169c52f69d8a0d8609ab2c3a265 new file mode 100644 index 0000000000..8e7ea35e2c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/4d1e95a705e3a169c52f69d8a0d8609ab2c3a265 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/4db66cc5fa9621746ce394601d04c3462537ed8f b/fuzz/gnutls_srp_client_fuzzer.in/4db66cc5fa9621746ce394601d04c3462537ed8f new file mode 100644 index 0000000000..1df2fa8605 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/4db66cc5fa9621746ce394601d04c3462537ed8f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/4f5eead9acc579856f695f44af5b1b64c344a247 b/fuzz/gnutls_srp_client_fuzzer.in/4f5eead9acc579856f695f44af5b1b64c344a247 new file mode 100644 index 0000000000..7e5688ded5 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/4f5eead9acc579856f695f44af5b1b64c344a247 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/4fe500cc4bc453c7f38ed7b06cd57396cb58f279 b/fuzz/gnutls_srp_client_fuzzer.in/4fe500cc4bc453c7f38ed7b06cd57396cb58f279 new file mode 100644 index 0000000000..581bb2c102 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/4fe500cc4bc453c7f38ed7b06cd57396cb58f279 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/502e097cfa7245648678c410b0570948de3c2cc6 b/fuzz/gnutls_srp_client_fuzzer.in/502e097cfa7245648678c410b0570948de3c2cc6 new file mode 100644 index 0000000000..a679faf37b Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/502e097cfa7245648678c410b0570948de3c2cc6 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/529b9373e0a20c82381d208f5b8ebc75e1d7289c b/fuzz/gnutls_srp_client_fuzzer.in/529b9373e0a20c82381d208f5b8ebc75e1d7289c new file mode 100644 index 0000000000..1bb14d5a1b Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/529b9373e0a20c82381d208f5b8ebc75e1d7289c differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/5332746b2cf62eca48eccbcd8376da7bbbe780f5 b/fuzz/gnutls_srp_client_fuzzer.in/5332746b2cf62eca48eccbcd8376da7bbbe780f5 new file mode 100644 index 0000000000..1e14b073f9 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/5332746b2cf62eca48eccbcd8376da7bbbe780f5 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/5339d13839a2891295087935cf7f7724c0e368c8 b/fuzz/gnutls_srp_client_fuzzer.in/5339d13839a2891295087935cf7f7724c0e368c8 new file mode 100644 index 0000000000..7a505a8039 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/5339d13839a2891295087935cf7f7724c0e368c8 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/55020a5f8241b3caca1206cb619fcd89925ccf29 b/fuzz/gnutls_srp_client_fuzzer.in/55020a5f8241b3caca1206cb619fcd89925ccf29 new file mode 100644 index 0000000000..57c4722bd8 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/55020a5f8241b3caca1206cb619fcd89925ccf29 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/563edf2fd6f6846d6147bbbda8dedb7da174f5d7 b/fuzz/gnutls_srp_client_fuzzer.in/563edf2fd6f6846d6147bbbda8dedb7da174f5d7 new file mode 100644 index 0000000000..504cca294e Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/563edf2fd6f6846d6147bbbda8dedb7da174f5d7 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/57fda97bea3df3d8db8c74a69afe499047f18b07 b/fuzz/gnutls_srp_client_fuzzer.in/57fda97bea3df3d8db8c74a69afe499047f18b07 new file mode 100644 index 0000000000..93a83de081 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/57fda97bea3df3d8db8c74a69afe499047f18b07 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/5d0edcbe4d17d5f6b29bb35ca87b9c691a4287ec b/fuzz/gnutls_srp_client_fuzzer.in/5d0edcbe4d17d5f6b29bb35ca87b9c691a4287ec new file mode 100644 index 0000000000..22accf7ee4 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/5d0edcbe4d17d5f6b29bb35ca87b9c691a4287ec differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/5f4c350b7da3e77a6443c3e3051197f0003a7279 b/fuzz/gnutls_srp_client_fuzzer.in/5f4c350b7da3e77a6443c3e3051197f0003a7279 new file mode 100644 index 0000000000..02e2d3219f Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/5f4c350b7da3e77a6443c3e3051197f0003a7279 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/626a43a8438a69579ab6d3a3cbe404025fcd5193 b/fuzz/gnutls_srp_client_fuzzer.in/626a43a8438a69579ab6d3a3cbe404025fcd5193 new file mode 100644 index 0000000000..c1486cbc7b Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/626a43a8438a69579ab6d3a3cbe404025fcd5193 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/62ddd655f6c6578074b14e95b70c4362def6d0b0 b/fuzz/gnutls_srp_client_fuzzer.in/62ddd655f6c6578074b14e95b70c4362def6d0b0 new file mode 100644 index 0000000000..ce72ce1ad3 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/62ddd655f6c6578074b14e95b70c4362def6d0b0 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/634480085d63b57bc2a4b80e52324bf070fbda8e b/fuzz/gnutls_srp_client_fuzzer.in/634480085d63b57bc2a4b80e52324bf070fbda8e new file mode 100644 index 0000000000..59eeddac18 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/634480085d63b57bc2a4b80e52324bf070fbda8e differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/642c4bedb13cdde6f650ade25910ef9ec5057802 b/fuzz/gnutls_srp_client_fuzzer.in/642c4bedb13cdde6f650ade25910ef9ec5057802 new file mode 100644 index 0000000000..198f4a8ecd Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/642c4bedb13cdde6f650ade25910ef9ec5057802 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/647ad57a4c23ef5bc285a3c38e0b1f2ba97bed89 b/fuzz/gnutls_srp_client_fuzzer.in/647ad57a4c23ef5bc285a3c38e0b1f2ba97bed89 new file mode 100644 index 0000000000..691325104a Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/647ad57a4c23ef5bc285a3c38e0b1f2ba97bed89 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/64be6318ec5ae395a0f8f0ec64026b8499eab121 b/fuzz/gnutls_srp_client_fuzzer.in/64be6318ec5ae395a0f8f0ec64026b8499eab121 new file mode 100644 index 0000000000..94fe0b6121 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/64be6318ec5ae395a0f8f0ec64026b8499eab121 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/64d9e22534097455b774b6b93d9c635717c2b820 b/fuzz/gnutls_srp_client_fuzzer.in/64d9e22534097455b774b6b93d9c635717c2b820 new file mode 100644 index 0000000000..178d79dc79 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/64d9e22534097455b774b6b93d9c635717c2b820 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/667f69ae5f17b4f38ca5de3963d93ec0c0d9585b b/fuzz/gnutls_srp_client_fuzzer.in/667f69ae5f17b4f38ca5de3963d93ec0c0d9585b new file mode 100644 index 0000000000..7156a455d9 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/667f69ae5f17b4f38ca5de3963d93ec0c0d9585b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/675126b1d654daf8e5dceb7b22a9cabe7ced7a6a b/fuzz/gnutls_srp_client_fuzzer.in/675126b1d654daf8e5dceb7b22a9cabe7ced7a6a new file mode 100644 index 0000000000..772f872daf Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/675126b1d654daf8e5dceb7b22a9cabe7ced7a6a differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/6922d1e329c33c291b927a0ef3b338775a2d8d92 b/fuzz/gnutls_srp_client_fuzzer.in/6922d1e329c33c291b927a0ef3b338775a2d8d92 new file mode 100644 index 0000000000..992b166d2b Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/6922d1e329c33c291b927a0ef3b338775a2d8d92 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/6ab488d5b3abac1d66052f2780ac94a674c0f73c b/fuzz/gnutls_srp_client_fuzzer.in/6ab488d5b3abac1d66052f2780ac94a674c0f73c new file mode 100644 index 0000000000..782fdcfea6 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/6ab488d5b3abac1d66052f2780ac94a674c0f73c differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/6f231526771c3c702856acd763ea24f556978dfa b/fuzz/gnutls_srp_client_fuzzer.in/6f231526771c3c702856acd763ea24f556978dfa new file mode 100644 index 0000000000..713ce00d01 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/6f231526771c3c702856acd763ea24f556978dfa differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/7035b3d77c102e1895124ce462411d66d515045e b/fuzz/gnutls_srp_client_fuzzer.in/7035b3d77c102e1895124ce462411d66d515045e new file mode 100644 index 0000000000..0054949d0b Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/7035b3d77c102e1895124ce462411d66d515045e differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/718a8549e44bee6e9f6eed75ef8a2efb0ae7e927 b/fuzz/gnutls_srp_client_fuzzer.in/718a8549e44bee6e9f6eed75ef8a2efb0ae7e927 new file mode 100644 index 0000000000..96e9d677a2 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/718a8549e44bee6e9f6eed75ef8a2efb0ae7e927 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/7507aa860da2e3f602feff6791c1c53a6efa1769 b/fuzz/gnutls_srp_client_fuzzer.in/7507aa860da2e3f602feff6791c1c53a6efa1769 new file mode 100644 index 0000000000..388e1a9398 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/7507aa860da2e3f602feff6791c1c53a6efa1769 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/75c17bf8e13128afcf3cbba9ce242aba1590d07d b/fuzz/gnutls_srp_client_fuzzer.in/75c17bf8e13128afcf3cbba9ce242aba1590d07d new file mode 100644 index 0000000000..3b33fd0b33 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/75c17bf8e13128afcf3cbba9ce242aba1590d07d differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/7681db5ad2678fb6c4bcfa13ff2f786f1b8d48c7 b/fuzz/gnutls_srp_client_fuzzer.in/7681db5ad2678fb6c4bcfa13ff2f786f1b8d48c7 new file mode 100644 index 0000000000..da137d04f9 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/7681db5ad2678fb6c4bcfa13ff2f786f1b8d48c7 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/76d24aa92cab7458a495a7ec0d9f5b72ac3f798f b/fuzz/gnutls_srp_client_fuzzer.in/76d24aa92cab7458a495a7ec0d9f5b72ac3f798f new file mode 100644 index 0000000000..d69d2372e2 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/76d24aa92cab7458a495a7ec0d9f5b72ac3f798f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/76e93e31b1006cd67c445fa119982736da91a84b b/fuzz/gnutls_srp_client_fuzzer.in/76e93e31b1006cd67c445fa119982736da91a84b new file mode 100644 index 0000000000..33b9b120d7 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/76e93e31b1006cd67c445fa119982736da91a84b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/77389dd6eadc4cde9280a9c12443d3b754800ae0 b/fuzz/gnutls_srp_client_fuzzer.in/77389dd6eadc4cde9280a9c12443d3b754800ae0 new file mode 100644 index 0000000000..222366c954 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/77389dd6eadc4cde9280a9c12443d3b754800ae0 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/777ccf05c016d0ce365a8a248c8dce0b8b8a2732 b/fuzz/gnutls_srp_client_fuzzer.in/777ccf05c016d0ce365a8a248c8dce0b8b8a2732 new file mode 100644 index 0000000000..7a355058fe Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/777ccf05c016d0ce365a8a248c8dce0b8b8a2732 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/789b2eb9628673d66ee5029dc5b7e31b478e2b71 b/fuzz/gnutls_srp_client_fuzzer.in/789b2eb9628673d66ee5029dc5b7e31b478e2b71 new file mode 100644 index 0000000000..6e712b16a3 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/789b2eb9628673d66ee5029dc5b7e31b478e2b71 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/79f558e2bee6d214c85a8e0f97831e2047b5c4e1 b/fuzz/gnutls_srp_client_fuzzer.in/79f558e2bee6d214c85a8e0f97831e2047b5c4e1 new file mode 100644 index 0000000000..b4f581550a Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/79f558e2bee6d214c85a8e0f97831e2047b5c4e1 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/7a5f9b2339a600e9d93fd4f6b47aa16f98b8f0ef b/fuzz/gnutls_srp_client_fuzzer.in/7a5f9b2339a600e9d93fd4f6b47aa16f98b8f0ef new file mode 100644 index 0000000000..880c9ee026 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/7a5f9b2339a600e9d93fd4f6b47aa16f98b8f0ef differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/7a737683c46a14ca8dd305fa16de168315a1752c b/fuzz/gnutls_srp_client_fuzzer.in/7a737683c46a14ca8dd305fa16de168315a1752c new file mode 100644 index 0000000000..d122e5069f Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/7a737683c46a14ca8dd305fa16de168315a1752c differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/7b55ca54d4de64c9d80db3295b66ff9b30496f2f b/fuzz/gnutls_srp_client_fuzzer.in/7b55ca54d4de64c9d80db3295b66ff9b30496f2f new file mode 100644 index 0000000000..97f749d84b Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/7b55ca54d4de64c9d80db3295b66ff9b30496f2f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/7d32c86d4bce3aef80b38d5b80fd40620f1747c1 b/fuzz/gnutls_srp_client_fuzzer.in/7d32c86d4bce3aef80b38d5b80fd40620f1747c1 new file mode 100644 index 0000000000..f4c243aa13 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/7d32c86d4bce3aef80b38d5b80fd40620f1747c1 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/7e51a8b2d8af683ef9e2fffeabe50efd3f6de776 b/fuzz/gnutls_srp_client_fuzzer.in/7e51a8b2d8af683ef9e2fffeabe50efd3f6de776 new file mode 100644 index 0000000000..26bdf55463 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/7e51a8b2d8af683ef9e2fffeabe50efd3f6de776 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/7ef684e6544a9b75b1caa33ff5cb5733ad523b0d b/fuzz/gnutls_srp_client_fuzzer.in/7ef684e6544a9b75b1caa33ff5cb5733ad523b0d new file mode 100644 index 0000000000..335f4a0cdd Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/7ef684e6544a9b75b1caa33ff5cb5733ad523b0d differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/7f3fa2b369c457ead781f392f72553f72da3b7dc b/fuzz/gnutls_srp_client_fuzzer.in/7f3fa2b369c457ead781f392f72553f72da3b7dc new file mode 100644 index 0000000000..74141a539c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/7f3fa2b369c457ead781f392f72553f72da3b7dc differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/8061705cb7b18013dda4485e4da07f9aa9695741 b/fuzz/gnutls_srp_client_fuzzer.in/8061705cb7b18013dda4485e4da07f9aa9695741 new file mode 100644 index 0000000000..304bbf24df Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/8061705cb7b18013dda4485e4da07f9aa9695741 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/80ae66ca63128a5f3682a81e86bc01e52d25f3a6 b/fuzz/gnutls_srp_client_fuzzer.in/80ae66ca63128a5f3682a81e86bc01e52d25f3a6 new file mode 100644 index 0000000000..b6e5b9da3c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/80ae66ca63128a5f3682a81e86bc01e52d25f3a6 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/82bbd562e2079aa9b58c5150b28f2938cc629b3e b/fuzz/gnutls_srp_client_fuzzer.in/82bbd562e2079aa9b58c5150b28f2938cc629b3e new file mode 100644 index 0000000000..6e5497cca9 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/82bbd562e2079aa9b58c5150b28f2938cc629b3e differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/830dbd99c3d040628f514c1edaee564e832eb099 b/fuzz/gnutls_srp_client_fuzzer.in/830dbd99c3d040628f514c1edaee564e832eb099 new file mode 100644 index 0000000000..6860db86ac Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/830dbd99c3d040628f514c1edaee564e832eb099 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/832381a9beaee52a52bc3f74c366ac96f9a3ce64 b/fuzz/gnutls_srp_client_fuzzer.in/832381a9beaee52a52bc3f74c366ac96f9a3ce64 new file mode 100644 index 0000000000..bda627f717 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/832381a9beaee52a52bc3f74c366ac96f9a3ce64 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/8403a3283754b68ba134aef0742bdece86e9472f b/fuzz/gnutls_srp_client_fuzzer.in/8403a3283754b68ba134aef0742bdece86e9472f new file mode 100644 index 0000000000..d683663b80 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/8403a3283754b68ba134aef0742bdece86e9472f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/846b0c05d35729444726522bbf2a3d2a8b9ea90f b/fuzz/gnutls_srp_client_fuzzer.in/846b0c05d35729444726522bbf2a3d2a8b9ea90f new file mode 100644 index 0000000000..ec9dccdd9b Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/846b0c05d35729444726522bbf2a3d2a8b9ea90f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/85fdadbf4da9a7a403e7f4f189873e6ce5bc6cd6 b/fuzz/gnutls_srp_client_fuzzer.in/85fdadbf4da9a7a403e7f4f189873e6ce5bc6cd6 new file mode 100644 index 0000000000..3fc8dfc178 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/85fdadbf4da9a7a403e7f4f189873e6ce5bc6cd6 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/890d50e1c13f17a9cf6722c7260bff770df869e6 b/fuzz/gnutls_srp_client_fuzzer.in/890d50e1c13f17a9cf6722c7260bff770df869e6 new file mode 100644 index 0000000000..024dcd8d4d Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/890d50e1c13f17a9cf6722c7260bff770df869e6 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/895552ea43cc4c5d60ab4cb8a764e1cbf217db04 b/fuzz/gnutls_srp_client_fuzzer.in/895552ea43cc4c5d60ab4cb8a764e1cbf217db04 new file mode 100644 index 0000000000..9f78c40d70 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/895552ea43cc4c5d60ab4cb8a764e1cbf217db04 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/8a822a1d757edbb043efa413a99a30b37488f021 b/fuzz/gnutls_srp_client_fuzzer.in/8a822a1d757edbb043efa413a99a30b37488f021 new file mode 100644 index 0000000000..08a82b46cd Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/8a822a1d757edbb043efa413a99a30b37488f021 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/8b81123f1dce78c3a459d7df339a5d824dba3688 b/fuzz/gnutls_srp_client_fuzzer.in/8b81123f1dce78c3a459d7df339a5d824dba3688 new file mode 100644 index 0000000000..8a864f3f36 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/8b81123f1dce78c3a459d7df339a5d824dba3688 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/8f9e164a91f5832eb8748fb7be2cd66571362387 b/fuzz/gnutls_srp_client_fuzzer.in/8f9e164a91f5832eb8748fb7be2cd66571362387 new file mode 100644 index 0000000000..20d923d543 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/8f9e164a91f5832eb8748fb7be2cd66571362387 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/916b707366f5dad3da3d501ab3eef6abb1f580fd b/fuzz/gnutls_srp_client_fuzzer.in/916b707366f5dad3da3d501ab3eef6abb1f580fd new file mode 100644 index 0000000000..875bd3dd3a Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/916b707366f5dad3da3d501ab3eef6abb1f580fd differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/937fcf31a54a1789c5617177ab302e90bf606a58 b/fuzz/gnutls_srp_client_fuzzer.in/937fcf31a54a1789c5617177ab302e90bf606a58 new file mode 100644 index 0000000000..fa5e69c9a8 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/937fcf31a54a1789c5617177ab302e90bf606a58 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/9718e8ff346d1e260dd3d55d7c38df4ae4e83500 b/fuzz/gnutls_srp_client_fuzzer.in/9718e8ff346d1e260dd3d55d7c38df4ae4e83500 new file mode 100644 index 0000000000..1e9536556d Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/9718e8ff346d1e260dd3d55d7c38df4ae4e83500 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/9718fb3a289dc909abfddc5ad0f079f4d08f9b1b b/fuzz/gnutls_srp_client_fuzzer.in/9718fb3a289dc909abfddc5ad0f079f4d08f9b1b new file mode 100644 index 0000000000..29b5cbb202 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/9718fb3a289dc909abfddc5ad0f079f4d08f9b1b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/9732d0bc9a25981d714d7478a5ad8fbd510c8afc b/fuzz/gnutls_srp_client_fuzzer.in/9732d0bc9a25981d714d7478a5ad8fbd510c8afc new file mode 100644 index 0000000000..94547545f3 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/9732d0bc9a25981d714d7478a5ad8fbd510c8afc differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/988adae93793511214633c9e7592f56688f7c845 b/fuzz/gnutls_srp_client_fuzzer.in/988adae93793511214633c9e7592f56688f7c845 new file mode 100644 index 0000000000..64f8d22935 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/988adae93793511214633c9e7592f56688f7c845 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/99e7e9578302154ebbcce0f5a31b70cff9e7cdec b/fuzz/gnutls_srp_client_fuzzer.in/99e7e9578302154ebbcce0f5a31b70cff9e7cdec new file mode 100644 index 0000000000..f6ae47daeb Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/99e7e9578302154ebbcce0f5a31b70cff9e7cdec differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/9b5d4d369cf1a3c7e05bec28ce17c0c7168faf8c b/fuzz/gnutls_srp_client_fuzzer.in/9b5d4d369cf1a3c7e05bec28ce17c0c7168faf8c new file mode 100644 index 0000000000..cb9fa2936b Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/9b5d4d369cf1a3c7e05bec28ce17c0c7168faf8c differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/9b9ebf860e1000cc11232fe6e8a9022c0aeb91cf b/fuzz/gnutls_srp_client_fuzzer.in/9b9ebf860e1000cc11232fe6e8a9022c0aeb91cf new file mode 100644 index 0000000000..6ddc9c9a60 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/9b9ebf860e1000cc11232fe6e8a9022c0aeb91cf differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/9d766d63ab262149c5e75b3988adb2272181d1a0 b/fuzz/gnutls_srp_client_fuzzer.in/9d766d63ab262149c5e75b3988adb2272181d1a0 new file mode 100644 index 0000000000..b71c38c57a Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/9d766d63ab262149c5e75b3988adb2272181d1a0 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/9e482f97cbbc8ce79b604aa76468e63803a76ed9 b/fuzz/gnutls_srp_client_fuzzer.in/9e482f97cbbc8ce79b604aa76468e63803a76ed9 new file mode 100644 index 0000000000..bd056ea4eb Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/9e482f97cbbc8ce79b604aa76468e63803a76ed9 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/9f454572c0d2a022c2636778ed5027c897230741 b/fuzz/gnutls_srp_client_fuzzer.in/9f454572c0d2a022c2636778ed5027c897230741 new file mode 100644 index 0000000000..f860804f8a Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/9f454572c0d2a022c2636778ed5027c897230741 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/9f62b3243b1b911355f6e110057df8a5ea531ac6 b/fuzz/gnutls_srp_client_fuzzer.in/9f62b3243b1b911355f6e110057df8a5ea531ac6 new file mode 100644 index 0000000000..3189fdc973 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/9f62b3243b1b911355f6e110057df8a5ea531ac6 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/9fe3ee9a5c72a1b186206bbb768b839b16fc46c0 b/fuzz/gnutls_srp_client_fuzzer.in/9fe3ee9a5c72a1b186206bbb768b839b16fc46c0 new file mode 100644 index 0000000000..fda014335c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/9fe3ee9a5c72a1b186206bbb768b839b16fc46c0 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/a1890084e398c6070d1f2e125d394796eb479c6b b/fuzz/gnutls_srp_client_fuzzer.in/a1890084e398c6070d1f2e125d394796eb479c6b new file mode 100644 index 0000000000..3e49f81085 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/a1890084e398c6070d1f2e125d394796eb479c6b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/a38d89094d5dc853383105bddf669e1c7b80d2c6 b/fuzz/gnutls_srp_client_fuzzer.in/a38d89094d5dc853383105bddf669e1c7b80d2c6 new file mode 100644 index 0000000000..844bd4108e Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/a38d89094d5dc853383105bddf669e1c7b80d2c6 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/a5b45e40ee7b69b8678e3d313ecd8f22702044c7 b/fuzz/gnutls_srp_client_fuzzer.in/a5b45e40ee7b69b8678e3d313ecd8f22702044c7 new file mode 100644 index 0000000000..6abfa6b67e Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/a5b45e40ee7b69b8678e3d313ecd8f22702044c7 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/a6e4780daeff9887e11782e21978c7f356cbbd88 b/fuzz/gnutls_srp_client_fuzzer.in/a6e4780daeff9887e11782e21978c7f356cbbd88 new file mode 100644 index 0000000000..0c4072e029 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/a6e4780daeff9887e11782e21978c7f356cbbd88 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/a770f975d5bab9e5eb9f348e30dc9c794cecf0f7 b/fuzz/gnutls_srp_client_fuzzer.in/a770f975d5bab9e5eb9f348e30dc9c794cecf0f7 new file mode 100644 index 0000000000..bca2e250cd Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/a770f975d5bab9e5eb9f348e30dc9c794cecf0f7 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/a8216de0d3e6c57b2f54313a2bf498b066231a99 b/fuzz/gnutls_srp_client_fuzzer.in/a8216de0d3e6c57b2f54313a2bf498b066231a99 new file mode 100644 index 0000000000..2023b530a2 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/a8216de0d3e6c57b2f54313a2bf498b066231a99 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/a9357507be693bcd83195c76110eca9b1137a12d b/fuzz/gnutls_srp_client_fuzzer.in/a9357507be693bcd83195c76110eca9b1137a12d new file mode 100644 index 0000000000..6e45b0124c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/a9357507be693bcd83195c76110eca9b1137a12d differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/aaf56ec18d621278f7dc39f7460cf7bafdb9adef b/fuzz/gnutls_srp_client_fuzzer.in/aaf56ec18d621278f7dc39f7460cf7bafdb9adef new file mode 100644 index 0000000000..d0eae7b4a1 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/aaf56ec18d621278f7dc39f7460cf7bafdb9adef differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ab217a0cfd8235dbfc37a6d615c2eadef409bcb1 b/fuzz/gnutls_srp_client_fuzzer.in/ab217a0cfd8235dbfc37a6d615c2eadef409bcb1 new file mode 100644 index 0000000000..8554cf2f11 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ab217a0cfd8235dbfc37a6d615c2eadef409bcb1 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ab59ed35da516add88a20c683ccb425ad69f3ca0 b/fuzz/gnutls_srp_client_fuzzer.in/ab59ed35da516add88a20c683ccb425ad69f3ca0 new file mode 100644 index 0000000000..bd7bfe4e70 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ab59ed35da516add88a20c683ccb425ad69f3ca0 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ad2784dc118b7830edee649c69f7b705941bf92d b/fuzz/gnutls_srp_client_fuzzer.in/ad2784dc118b7830edee649c69f7b705941bf92d new file mode 100644 index 0000000000..8f47b213a0 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ad2784dc118b7830edee649c69f7b705941bf92d differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ad6495c64e82e3bac101171ac5088182e5ff3be7 b/fuzz/gnutls_srp_client_fuzzer.in/ad6495c64e82e3bac101171ac5088182e5ff3be7 new file mode 100644 index 0000000000..9bff70105e Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ad6495c64e82e3bac101171ac5088182e5ff3be7 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ae41c346136a5ae8d53cec0b18498f3547c91c29 b/fuzz/gnutls_srp_client_fuzzer.in/ae41c346136a5ae8d53cec0b18498f3547c91c29 new file mode 100644 index 0000000000..eb412e076c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ae41c346136a5ae8d53cec0b18498f3547c91c29 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/aef35c718762e9a9200ce3d67e4073fa6b89dd2a b/fuzz/gnutls_srp_client_fuzzer.in/aef35c718762e9a9200ce3d67e4073fa6b89dd2a new file mode 100644 index 0000000000..e3d45de096 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/aef35c718762e9a9200ce3d67e4073fa6b89dd2a differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/b05c8829e51bdba076e1ce18e1fdb97a786ee631 b/fuzz/gnutls_srp_client_fuzzer.in/b05c8829e51bdba076e1ce18e1fdb97a786ee631 new file mode 100644 index 0000000000..3c3583db62 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/b05c8829e51bdba076e1ce18e1fdb97a786ee631 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/b38d78df805be4da550829de511e982e061a080f b/fuzz/gnutls_srp_client_fuzzer.in/b38d78df805be4da550829de511e982e061a080f new file mode 100644 index 0000000000..ceb041cb08 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/b38d78df805be4da550829de511e982e061a080f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/b3b9e5355ad1c593b84f475dff62f6dec125dfe4 b/fuzz/gnutls_srp_client_fuzzer.in/b3b9e5355ad1c593b84f475dff62f6dec125dfe4 new file mode 100644 index 0000000000..401c719c09 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/b3b9e5355ad1c593b84f475dff62f6dec125dfe4 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/b3d0a711c7f25a8b52ac8239aa1d74a465bd15f0 b/fuzz/gnutls_srp_client_fuzzer.in/b3d0a711c7f25a8b52ac8239aa1d74a465bd15f0 new file mode 100644 index 0000000000..cb21cf079a Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/b3d0a711c7f25a8b52ac8239aa1d74a465bd15f0 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/b419c5164692a883788703916b28db5250f21f9b b/fuzz/gnutls_srp_client_fuzzer.in/b419c5164692a883788703916b28db5250f21f9b new file mode 100644 index 0000000000..f0ed5c04f5 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/b419c5164692a883788703916b28db5250f21f9b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/b679048a571aaf8dee4f43c349071e0551e5cef8 b/fuzz/gnutls_srp_client_fuzzer.in/b679048a571aaf8dee4f43c349071e0551e5cef8 new file mode 100644 index 0000000000..d644efa81d Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/b679048a571aaf8dee4f43c349071e0551e5cef8 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/b88d0e684a38f0ad974b8d7d6ff4fc96766b3330 b/fuzz/gnutls_srp_client_fuzzer.in/b88d0e684a38f0ad974b8d7d6ff4fc96766b3330 new file mode 100644 index 0000000000..4cc8ea2291 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/b88d0e684a38f0ad974b8d7d6ff4fc96766b3330 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/b95eed73114fe3478fefa9a14f8e4955a5b96a4c b/fuzz/gnutls_srp_client_fuzzer.in/b95eed73114fe3478fefa9a14f8e4955a5b96a4c new file mode 100644 index 0000000000..eafa34cbbf Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/b95eed73114fe3478fefa9a14f8e4955a5b96a4c differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ba6dedadb836666a15dbf7b57ad825627574a317 b/fuzz/gnutls_srp_client_fuzzer.in/ba6dedadb836666a15dbf7b57ad825627574a317 new file mode 100644 index 0000000000..4322f94b30 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ba6dedadb836666a15dbf7b57ad825627574a317 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/bb04a41f4877529f9c8d8961033a94b295c4045b b/fuzz/gnutls_srp_client_fuzzer.in/bb04a41f4877529f9c8d8961033a94b295c4045b new file mode 100644 index 0000000000..f5af1cdd55 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/bb04a41f4877529f9c8d8961033a94b295c4045b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/bb22cfd4acee02a97bf0cf5102d8e9ca8f3dfbd1 b/fuzz/gnutls_srp_client_fuzzer.in/bb22cfd4acee02a97bf0cf5102d8e9ca8f3dfbd1 new file mode 100644 index 0000000000..e40da514cf --- /dev/null +++ b/fuzz/gnutls_srp_client_fuzzer.in/bb22cfd4acee02a97bf0cf5102d8e9ca8f3dfbd1 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/gnutls_srp_client_fuzzer.in/bb6530c10071193191114100f76ebdd1e245846f b/fuzz/gnutls_srp_client_fuzzer.in/bb6530c10071193191114100f76ebdd1e245846f new file mode 100644 index 0000000000..45846e319e Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/bb6530c10071193191114100f76ebdd1e245846f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/bc975092832f9ab87edf40af956c66c813c0082b b/fuzz/gnutls_srp_client_fuzzer.in/bc975092832f9ab87edf40af956c66c813c0082b new file mode 100644 index 0000000000..ecfbe55751 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/bc975092832f9ab87edf40af956c66c813c0082b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/bce22482e91ef51d69c818204d00776a13749a32 b/fuzz/gnutls_srp_client_fuzzer.in/bce22482e91ef51d69c818204d00776a13749a32 new file mode 100644 index 0000000000..ad0fbb78bb Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/bce22482e91ef51d69c818204d00776a13749a32 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/bd5369907463df276ac48d23bb327c56c9d98278 b/fuzz/gnutls_srp_client_fuzzer.in/bd5369907463df276ac48d23bb327c56c9d98278 new file mode 100644 index 0000000000..f07b7a20ec Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/bd5369907463df276ac48d23bb327c56c9d98278 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/c02807260cf0c068d6e6477b29f60db0ab212103 b/fuzz/gnutls_srp_client_fuzzer.in/c02807260cf0c068d6e6477b29f60db0ab212103 new file mode 100644 index 0000000000..7695dd2e25 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/c02807260cf0c068d6e6477b29f60db0ab212103 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/c09af72191cfe405e6d868e1a5aa731a6379caf4 b/fuzz/gnutls_srp_client_fuzzer.in/c09af72191cfe405e6d868e1a5aa731a6379caf4 new file mode 100644 index 0000000000..bb5e02b49d --- /dev/null +++ b/fuzz/gnutls_srp_client_fuzzer.in/c09af72191cfe405e6d868e1a5aa731a6379caf4 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/gnutls_srp_client_fuzzer.in/c2f945507239449dccc8cde64cf415086362b847 b/fuzz/gnutls_srp_client_fuzzer.in/c2f945507239449dccc8cde64cf415086362b847 new file mode 100644 index 0000000000..46e7096c43 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/c2f945507239449dccc8cde64cf415086362b847 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/c3b2a58973323f3de5942101f5ed6282906fdf7c b/fuzz/gnutls_srp_client_fuzzer.in/c3b2a58973323f3de5942101f5ed6282906fdf7c new file mode 100644 index 0000000000..890053d36f Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/c3b2a58973323f3de5942101f5ed6282906fdf7c differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/c5e6a6b27fa156e5d5e6056506c3fadf4832545d b/fuzz/gnutls_srp_client_fuzzer.in/c5e6a6b27fa156e5d5e6056506c3fadf4832545d new file mode 100644 index 0000000000..3eb65c83a3 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/c5e6a6b27fa156e5d5e6056506c3fadf4832545d differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/c708a591a8637994b3f17b2fec86b3a74d6a5bd5 b/fuzz/gnutls_srp_client_fuzzer.in/c708a591a8637994b3f17b2fec86b3a74d6a5bd5 new file mode 100644 index 0000000000..5fe4312962 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/c708a591a8637994b3f17b2fec86b3a74d6a5bd5 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/c7c8794c8f593aff47d60fa6c0e8fc68d8d10807 b/fuzz/gnutls_srp_client_fuzzer.in/c7c8794c8f593aff47d60fa6c0e8fc68d8d10807 new file mode 100644 index 0000000000..0e3286eb3a Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/c7c8794c8f593aff47d60fa6c0e8fc68d8d10807 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/c81650b47b6ea38c3f45aad77552de271b23e48a b/fuzz/gnutls_srp_client_fuzzer.in/c81650b47b6ea38c3f45aad77552de271b23e48a new file mode 100644 index 0000000000..767f2739fa Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/c81650b47b6ea38c3f45aad77552de271b23e48a differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/c865acd2df196f4c7f9302d920734406ea6a45ba b/fuzz/gnutls_srp_client_fuzzer.in/c865acd2df196f4c7f9302d920734406ea6a45ba new file mode 100644 index 0000000000..b6632de772 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/c865acd2df196f4c7f9302d920734406ea6a45ba differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/c936beb3d516c3688843745f7698ff1cd403620f b/fuzz/gnutls_srp_client_fuzzer.in/c936beb3d516c3688843745f7698ff1cd403620f new file mode 100644 index 0000000000..e08869417d Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/c936beb3d516c3688843745f7698ff1cd403620f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/c96f79c701548d22fe569fa757bad908e59c5e11 b/fuzz/gnutls_srp_client_fuzzer.in/c96f79c701548d22fe569fa757bad908e59c5e11 new file mode 100644 index 0000000000..e922c6051d Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/c96f79c701548d22fe569fa757bad908e59c5e11 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ca30312762ad01e32ad7dd97471a159a8efc4d72 b/fuzz/gnutls_srp_client_fuzzer.in/ca30312762ad01e32ad7dd97471a159a8efc4d72 new file mode 100644 index 0000000000..101a4fb4ce Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ca30312762ad01e32ad7dd97471a159a8efc4d72 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/cba71d850a85b38ea809cd424ed4000d4827bbd6 b/fuzz/gnutls_srp_client_fuzzer.in/cba71d850a85b38ea809cd424ed4000d4827bbd6 new file mode 100644 index 0000000000..c2ba1300f5 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/cba71d850a85b38ea809cd424ed4000d4827bbd6 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/cbe641d0b6804f054e904ad3fb503a54fd84582e b/fuzz/gnutls_srp_client_fuzzer.in/cbe641d0b6804f054e904ad3fb503a54fd84582e new file mode 100644 index 0000000000..bbfe2862f0 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/cbe641d0b6804f054e904ad3fb503a54fd84582e differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/cc7cb53bbeccbe714f710d885f039086cc6d0436 b/fuzz/gnutls_srp_client_fuzzer.in/cc7cb53bbeccbe714f710d885f039086cc6d0436 new file mode 100644 index 0000000000..531a725508 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/cc7cb53bbeccbe714f710d885f039086cc6d0436 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ccafa5944eb5e09080455c556c994caa60b5f20a b/fuzz/gnutls_srp_client_fuzzer.in/ccafa5944eb5e09080455c556c994caa60b5f20a new file mode 100644 index 0000000000..5ad3ba792d Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ccafa5944eb5e09080455c556c994caa60b5f20a differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ce9228bc791811503dddabf2131f00a44ef0b17b b/fuzz/gnutls_srp_client_fuzzer.in/ce9228bc791811503dddabf2131f00a44ef0b17b new file mode 100644 index 0000000000..d136aaa04e Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ce9228bc791811503dddabf2131f00a44ef0b17b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/cf17892fcecad24a840a2b1490f7d44236c52b01 b/fuzz/gnutls_srp_client_fuzzer.in/cf17892fcecad24a840a2b1490f7d44236c52b01 new file mode 100644 index 0000000000..426de081c6 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/cf17892fcecad24a840a2b1490f7d44236c52b01 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/d06babbb3723f3568033d8cbd348facbc39094fd b/fuzz/gnutls_srp_client_fuzzer.in/d06babbb3723f3568033d8cbd348facbc39094fd new file mode 100644 index 0000000000..6a29aa8ce2 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/d06babbb3723f3568033d8cbd348facbc39094fd differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/d0786412e5eaacc33599c5894eeb971b649eabd9 b/fuzz/gnutls_srp_client_fuzzer.in/d0786412e5eaacc33599c5894eeb971b649eabd9 new file mode 100644 index 0000000000..e9e412eb55 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/d0786412e5eaacc33599c5894eeb971b649eabd9 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/d2d3ad89ca94e4906ccb33105a96b3dac1e74dfe b/fuzz/gnutls_srp_client_fuzzer.in/d2d3ad89ca94e4906ccb33105a96b3dac1e74dfe new file mode 100644 index 0000000000..0583e99e75 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/d2d3ad89ca94e4906ccb33105a96b3dac1e74dfe differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/d4434c6aaa1bb44586a770207af2dd3a0549b1cd b/fuzz/gnutls_srp_client_fuzzer.in/d4434c6aaa1bb44586a770207af2dd3a0549b1cd new file mode 100644 index 0000000000..5cf110141f Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/d4434c6aaa1bb44586a770207af2dd3a0549b1cd differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/d500479090c17795e4bce9785a400371b76b8f99 b/fuzz/gnutls_srp_client_fuzzer.in/d500479090c17795e4bce9785a400371b76b8f99 new file mode 100644 index 0000000000..d5a9e009bc Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/d500479090c17795e4bce9785a400371b76b8f99 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/d54e60a8bb256d7e4a1b2a1c091e4ebe6c2ae6e2 b/fuzz/gnutls_srp_client_fuzzer.in/d54e60a8bb256d7e4a1b2a1c091e4ebe6c2ae6e2 new file mode 100644 index 0000000000..8d58c97ccc Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/d54e60a8bb256d7e4a1b2a1c091e4ebe6c2ae6e2 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/dca627aad79516ee0be333349dcc6033695edd51 b/fuzz/gnutls_srp_client_fuzzer.in/dca627aad79516ee0be333349dcc6033695edd51 new file mode 100644 index 0000000000..578552a3e0 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/dca627aad79516ee0be333349dcc6033695edd51 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/dd6c7e1f7796b2021910ee3049bb13d412ce3b79 b/fuzz/gnutls_srp_client_fuzzer.in/dd6c7e1f7796b2021910ee3049bb13d412ce3b79 new file mode 100644 index 0000000000..b3518bece8 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/dd6c7e1f7796b2021910ee3049bb13d412ce3b79 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/de18c12f8617869dd65c0e275e5c080ffa98a531 b/fuzz/gnutls_srp_client_fuzzer.in/de18c12f8617869dd65c0e275e5c080ffa98a531 new file mode 100644 index 0000000000..2928b6f320 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/de18c12f8617869dd65c0e275e5c080ffa98a531 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/e04799594c216c5781523ef9128197ba2714b59a b/fuzz/gnutls_srp_client_fuzzer.in/e04799594c216c5781523ef9128197ba2714b59a new file mode 100644 index 0000000000..16865eda29 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/e04799594c216c5781523ef9128197ba2714b59a differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/e35009acf925f8e129370417638fc7fc16728ace b/fuzz/gnutls_srp_client_fuzzer.in/e35009acf925f8e129370417638fc7fc16728ace new file mode 100644 index 0000000000..2898e9819c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/e35009acf925f8e129370417638fc7fc16728ace differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/e38d8c5a340ed0f5c6ee1639168648c1c152dee3 b/fuzz/gnutls_srp_client_fuzzer.in/e38d8c5a340ed0f5c6ee1639168648c1c152dee3 new file mode 100644 index 0000000000..6579661cb8 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/e38d8c5a340ed0f5c6ee1639168648c1c152dee3 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/e585e0a9db40295e88e5e1892edd305084194b70 b/fuzz/gnutls_srp_client_fuzzer.in/e585e0a9db40295e88e5e1892edd305084194b70 new file mode 100644 index 0000000000..aebb911792 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/e585e0a9db40295e88e5e1892edd305084194b70 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/e617748823524679fdc6cdff720ba4b79ed344c4 b/fuzz/gnutls_srp_client_fuzzer.in/e617748823524679fdc6cdff720ba4b79ed344c4 new file mode 100644 index 0000000000..9fcf77db82 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/e617748823524679fdc6cdff720ba4b79ed344c4 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/e8a56f5f93f0a1979bedfa14e671d0f096a76b17 b/fuzz/gnutls_srp_client_fuzzer.in/e8a56f5f93f0a1979bedfa14e671d0f096a76b17 new file mode 100644 index 0000000000..e01fc110a9 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/e8a56f5f93f0a1979bedfa14e671d0f096a76b17 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ea1f9eebe5200febefa9866ca5371c3f76fe92b2 b/fuzz/gnutls_srp_client_fuzzer.in/ea1f9eebe5200febefa9866ca5371c3f76fe92b2 new file mode 100644 index 0000000000..e41aebacd1 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ea1f9eebe5200febefa9866ca5371c3f76fe92b2 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/eace9f7648f7d4d8bb0871cadf448c374e9dd19f b/fuzz/gnutls_srp_client_fuzzer.in/eace9f7648f7d4d8bb0871cadf448c374e9dd19f new file mode 100644 index 0000000000..ab95e5c76f Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/eace9f7648f7d4d8bb0871cadf448c374e9dd19f differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/eb87e3378ef5243a1013a0cb8eea08f7c5dc536e b/fuzz/gnutls_srp_client_fuzzer.in/eb87e3378ef5243a1013a0cb8eea08f7c5dc536e new file mode 100644 index 0000000000..73db50b908 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/eb87e3378ef5243a1013a0cb8eea08f7c5dc536e differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ef6b8408004faa3c28d785239c4a10ccd9c95252 b/fuzz/gnutls_srp_client_fuzzer.in/ef6b8408004faa3c28d785239c4a10ccd9c95252 new file mode 100644 index 0000000000..3fd28c3628 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ef6b8408004faa3c28d785239c4a10ccd9c95252 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ef93a42968fd4f84ff87e1478712a1e8f19ec499 b/fuzz/gnutls_srp_client_fuzzer.in/ef93a42968fd4f84ff87e1478712a1e8f19ec499 new file mode 100644 index 0000000000..3cd2b6ad52 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ef93a42968fd4f84ff87e1478712a1e8f19ec499 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/f0462c84b36dcd780f933b05c80fd47b84131475 b/fuzz/gnutls_srp_client_fuzzer.in/f0462c84b36dcd780f933b05c80fd47b84131475 new file mode 100644 index 0000000000..b7665f26aa Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/f0462c84b36dcd780f933b05c80fd47b84131475 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/f0da315db9485bb7734e1b38d88a2d470b301212 b/fuzz/gnutls_srp_client_fuzzer.in/f0da315db9485bb7734e1b38d88a2d470b301212 new file mode 100644 index 0000000000..d674fdbc9f Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/f0da315db9485bb7734e1b38d88a2d470b301212 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/f22ddd0eef89a381a8f7ab2d4e48ba915aa9e4b7 b/fuzz/gnutls_srp_client_fuzzer.in/f22ddd0eef89a381a8f7ab2d4e48ba915aa9e4b7 new file mode 100644 index 0000000000..821b73e933 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/f22ddd0eef89a381a8f7ab2d4e48ba915aa9e4b7 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/f40d72317af98670a4468a5b8fced4245260c62b b/fuzz/gnutls_srp_client_fuzzer.in/f40d72317af98670a4468a5b8fced4245260c62b new file mode 100644 index 0000000000..aadad0b887 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/f40d72317af98670a4468a5b8fced4245260c62b differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/f4919713f29616c52d07cd3bf53ca486c36e1df0 b/fuzz/gnutls_srp_client_fuzzer.in/f4919713f29616c52d07cd3bf53ca486c36e1df0 new file mode 100644 index 0000000000..1182e6fb2c Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/f4919713f29616c52d07cd3bf53ca486c36e1df0 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/f94228871802a3d8059cb8edb3717e0e24f88276 b/fuzz/gnutls_srp_client_fuzzer.in/f94228871802a3d8059cb8edb3717e0e24f88276 new file mode 100644 index 0000000000..cc9aebd063 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/f94228871802a3d8059cb8edb3717e0e24f88276 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/fea5071991e42e4f3ab6f5ebccae520885e946ae b/fuzz/gnutls_srp_client_fuzzer.in/fea5071991e42e4f3ab6f5ebccae520885e946ae new file mode 100644 index 0000000000..692f091d27 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/fea5071991e42e4f3ab6f5ebccae520885e946ae differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/fee62e1d73b7e00aea45f60385329c639ec4862e b/fuzz/gnutls_srp_client_fuzzer.in/fee62e1d73b7e00aea45f60385329c639ec4862e new file mode 100644 index 0000000000..2ce4d79a56 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/fee62e1d73b7e00aea45f60385329c639ec4862e differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ff26e09318d4da015cbfcd6c9bdb8fe7970df4e2 b/fuzz/gnutls_srp_client_fuzzer.in/ff26e09318d4da015cbfcd6c9bdb8fe7970df4e2 new file mode 100644 index 0000000000..8065014809 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ff26e09318d4da015cbfcd6c9bdb8fe7970df4e2 differ diff --git a/fuzz/gnutls_srp_client_fuzzer.in/ffaab171bf1ebfc90bf950ea84e7564a92ce428e b/fuzz/gnutls_srp_client_fuzzer.in/ffaab171bf1ebfc90bf950ea84e7564a92ce428e new file mode 100644 index 0000000000..51599815e3 Binary files /dev/null and b/fuzz/gnutls_srp_client_fuzzer.in/ffaab171bf1ebfc90bf950ea84e7564a92ce428e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.c b/fuzz/gnutls_srp_server_fuzzer.c new file mode 100644 index 0000000000..04301638e4 --- /dev/null +++ b/fuzz/gnutls_srp_server_fuzzer.c @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * 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. + * + */ + +#include +#include +#include +#include +#include + +#include + +#include "certs.h" +#include "srp.h" +#include "mem.h" +#include "fuzzer.h" + +static int +srp_cb(gnutls_session_t session, const char *username, + gnutls_datum_t *salt, gnutls_datum_t *verifier, gnutls_datum_t *generator, gnutls_datum_t *prime) +{ + int ret; + + salt->data = (unsigned char*)gnutls_malloc(SALT_SIZE); + memcpy(salt->data, (unsigned char*)SALT, SALT_SIZE); + salt->size = SALT_SIZE; + + generator->data = (unsigned char*)gnutls_malloc(gnutls_srp_1024_group_generator.size); + memcpy(generator->data, gnutls_srp_1024_group_generator.data, gnutls_srp_1024_group_generator.size); + generator->size = gnutls_srp_1024_group_generator.size; + + prime->data = (unsigned char*)gnutls_malloc(gnutls_srp_1024_group_prime.size); + memcpy(prime->data, gnutls_srp_1024_group_prime.data, gnutls_srp_1024_group_prime.size); + prime->size = gnutls_srp_1024_group_prime.size; + + ret = gnutls_srp_verifier(USERNAME, PASSWORD, salt, generator, prime, verifier); + if (ret < 0) + return -1; + + return 0; +} + +int LLVMFuzzerTestOneInput(const uint8_t * data, size_t size) +{ + IGNORE_CERTS; + int res; + gnutls_datum_t rsa_cert, rsa_key; + gnutls_datum_t ecdsa_cert, ecdsa_key; + gnutls_datum_t ed25519_cert, ed25519_key; + gnutls_session_t session; + gnutls_certificate_credentials_t xcred; + gnutls_srp_server_credentials_t pcred; + struct mem_st memdata; + + res = gnutls_init(&session, GNUTLS_SERVER); + assert(res >= 0); + + res = gnutls_certificate_allocate_credentials(&xcred); + assert(res >= 0); + + res = gnutls_srp_allocate_server_credentials(&pcred); + assert(res >= 0); + + gnutls_srp_set_server_credentials_function(pcred, srp_cb); + + rsa_cert.data = (unsigned char *)kRSACertificateDER; + rsa_cert.size = sizeof(kRSACertificateDER); + rsa_key.data = (unsigned char *)kRSAPrivateKeyDER; + rsa_key.size = sizeof(kRSAPrivateKeyDER); + + ecdsa_cert.data = (unsigned char *)kECDSACertificateDER; + ecdsa_cert.size = sizeof(kECDSACertificateDER); + ecdsa_key.data = (unsigned char *)kECDSAPrivateKeyDER; + ecdsa_key.size = sizeof(kECDSAPrivateKeyDER); + + ed25519_cert.data = (unsigned char *)kEd25519CertificateDER; + ed25519_cert.size = sizeof(kEd25519CertificateDER); + ed25519_key.data = (unsigned char *)kEd25519PrivateKeyDER; + ed25519_key.size = sizeof(kEd25519PrivateKeyDER); + + res = + gnutls_certificate_set_x509_key_mem(xcred, &rsa_cert, &rsa_key, + GNUTLS_X509_FMT_DER); + assert(res >= 0); + + res = + gnutls_certificate_set_x509_key_mem(xcred, &ecdsa_cert, &ecdsa_key, + GNUTLS_X509_FMT_DER); + assert(res >= 0); + + res = + gnutls_certificate_set_x509_key_mem(xcred, &ed25519_cert, &ed25519_key, + GNUTLS_X509_FMT_DER); + assert(res >= 0); + + gnutls_certificate_set_known_dh_params(xcred, GNUTLS_SEC_PARAM_MEDIUM); + + res = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + assert(res >= 0); + + res = gnutls_credentials_set(session, GNUTLS_CRD_SRP, pcred); + assert(res >= 0); + + res = gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+SRP:+SRP-RSA:+SRP-DSS", NULL); + assert(res >= 0); + + memdata.data = data; + memdata.size = size; + + gnutls_transport_set_push_function(session, mem_push); + gnutls_transport_set_pull_function(session, mem_pull); + gnutls_transport_set_pull_timeout_function(session, mem_pull_timeout); + gnutls_transport_set_ptr(session, &memdata); + + do { + res = gnutls_handshake(session); + } while (res < 0 && gnutls_error_is_fatal(res) == 0); + if (res >= 0) { + for (;;) { + char buf[16384]; + res = gnutls_record_recv(session, buf, sizeof(buf)); + if (res <= 0) { + break; + } + } + } + + gnutls_deinit(session); + gnutls_certificate_free_credentials(xcred); + gnutls_srp_free_server_credentials(pcred); + return 0; +} diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0001f94cf252408c7479fa329ba66b2bf5032b82 b/fuzz/gnutls_srp_server_fuzzer.in/0001f94cf252408c7479fa329ba66b2bf5032b82 new file mode 100644 index 0000000000..63b41b5fd7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0001f94cf252408c7479fa329ba66b2bf5032b82 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/003db86c11587a375830a6833260a0dffb415a19 b/fuzz/gnutls_srp_server_fuzzer.in/003db86c11587a375830a6833260a0dffb415a19 new file mode 100644 index 0000000000..b67b48f2f1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/003db86c11587a375830a6833260a0dffb415a19 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/00e6dc8e9ca363c4fba4fc134c997f41b714e99f b/fuzz/gnutls_srp_server_fuzzer.in/00e6dc8e9ca363c4fba4fc134c997f41b714e99f new file mode 100644 index 0000000000..2bc7e364ae Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/00e6dc8e9ca363c4fba4fc134c997f41b714e99f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/01ee0cd6e22136abf324357cb86cad67b8ed1d17 b/fuzz/gnutls_srp_server_fuzzer.in/01ee0cd6e22136abf324357cb86cad67b8ed1d17 new file mode 100644 index 0000000000..dd651ec370 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/01ee0cd6e22136abf324357cb86cad67b8ed1d17 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0269fd1ceca559d4463075c3ab4b27508e84a2e0 b/fuzz/gnutls_srp_server_fuzzer.in/0269fd1ceca559d4463075c3ab4b27508e84a2e0 new file mode 100644 index 0000000000..ecaf516561 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0269fd1ceca559d4463075c3ab4b27508e84a2e0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/027251904eb74ae234d27c52465e649cdbe0cc2a b/fuzz/gnutls_srp_server_fuzzer.in/027251904eb74ae234d27c52465e649cdbe0cc2a new file mode 100644 index 0000000000..73b067aa8d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/027251904eb74ae234d27c52465e649cdbe0cc2a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/028e1d2047fcd6d7b190dd275fe39b44fc712402 b/fuzz/gnutls_srp_server_fuzzer.in/028e1d2047fcd6d7b190dd275fe39b44fc712402 new file mode 100644 index 0000000000..613330bea2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/028e1d2047fcd6d7b190dd275fe39b44fc712402 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/048b913e8d24f2d9e0892789e79984f4c22d15f0 b/fuzz/gnutls_srp_server_fuzzer.in/048b913e8d24f2d9e0892789e79984f4c22d15f0 new file mode 100644 index 0000000000..bbcf4b9c7a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/048b913e8d24f2d9e0892789e79984f4c22d15f0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/051b71cf0186fef98b2ccb01b63c778b0269a81a b/fuzz/gnutls_srp_server_fuzzer.in/051b71cf0186fef98b2ccb01b63c778b0269a81a new file mode 100644 index 0000000000..56b415e30f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/051b71cf0186fef98b2ccb01b63c778b0269a81a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/05c06eb7f4da2bd8fc707b111fe5917869f95fa1 b/fuzz/gnutls_srp_server_fuzzer.in/05c06eb7f4da2bd8fc707b111fe5917869f95fa1 new file mode 100644 index 0000000000..126fb5f94a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/05c06eb7f4da2bd8fc707b111fe5917869f95fa1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/060d02cda8d1bf915fb93fd468d6bc0976b01427 b/fuzz/gnutls_srp_server_fuzzer.in/060d02cda8d1bf915fb93fd468d6bc0976b01427 new file mode 100644 index 0000000000..f513171827 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/060d02cda8d1bf915fb93fd468d6bc0976b01427 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0615eb023cfb79d5e9c12c9306005d289bc0fd9f b/fuzz/gnutls_srp_server_fuzzer.in/0615eb023cfb79d5e9c12c9306005d289bc0fd9f new file mode 100644 index 0000000000..29e16b1111 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0615eb023cfb79d5e9c12c9306005d289bc0fd9f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0639c07d0fe85353cbafe749fec91d810d33701c b/fuzz/gnutls_srp_server_fuzzer.in/0639c07d0fe85353cbafe749fec91d810d33701c new file mode 100644 index 0000000000..d63afebedc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0639c07d0fe85353cbafe749fec91d810d33701c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/06492828d06434f0e7e242f38676e28b2e70a1ae b/fuzz/gnutls_srp_server_fuzzer.in/06492828d06434f0e7e242f38676e28b2e70a1ae new file mode 100644 index 0000000000..d16ae1bf13 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/06492828d06434f0e7e242f38676e28b2e70a1ae differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/067775f1e6327e5fc4b2469e17ded5ec1895e6fe b/fuzz/gnutls_srp_server_fuzzer.in/067775f1e6327e5fc4b2469e17ded5ec1895e6fe new file mode 100644 index 0000000000..8f1b807559 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/067775f1e6327e5fc4b2469e17ded5ec1895e6fe differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/06c1ed43bcfca07621165d6f64d46e2e49d952eb b/fuzz/gnutls_srp_server_fuzzer.in/06c1ed43bcfca07621165d6f64d46e2e49d952eb new file mode 100644 index 0000000000..e12567d8cd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/06c1ed43bcfca07621165d6f64d46e2e49d952eb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/06cb3e62deb25e75db22b0c4686ed3acebb0cff7 b/fuzz/gnutls_srp_server_fuzzer.in/06cb3e62deb25e75db22b0c4686ed3acebb0cff7 new file mode 100644 index 0000000000..cb4912049c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/06cb3e62deb25e75db22b0c4686ed3acebb0cff7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/07920896defcbe63b1c3eb717752c8cbff6883c6 b/fuzz/gnutls_srp_server_fuzzer.in/07920896defcbe63b1c3eb717752c8cbff6883c6 new file mode 100644 index 0000000000..0e2f4f7074 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/07920896defcbe63b1c3eb717752c8cbff6883c6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0813d8b2e49967c4dfa2335c00933c7970c9a058 b/fuzz/gnutls_srp_server_fuzzer.in/0813d8b2e49967c4dfa2335c00933c7970c9a058 new file mode 100644 index 0000000000..1eaaca52c5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0813d8b2e49967c4dfa2335c00933c7970c9a058 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/092127e5406b5fc50551f9dda6837cccc8b5f785 b/fuzz/gnutls_srp_server_fuzzer.in/092127e5406b5fc50551f9dda6837cccc8b5f785 new file mode 100644 index 0000000000..e6e6a46ffd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/092127e5406b5fc50551f9dda6837cccc8b5f785 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0a41d4020e25dc36a70f5f8737ca6ee1e162f617 b/fuzz/gnutls_srp_server_fuzzer.in/0a41d4020e25dc36a70f5f8737ca6ee1e162f617 new file mode 100644 index 0000000000..0632e57595 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0a41d4020e25dc36a70f5f8737ca6ee1e162f617 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0b69bc6800f3b1312c226cdb3b8ecc8f4c945d08 b/fuzz/gnutls_srp_server_fuzzer.in/0b69bc6800f3b1312c226cdb3b8ecc8f4c945d08 new file mode 100644 index 0000000000..9412d39d0e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0b69bc6800f3b1312c226cdb3b8ecc8f4c945d08 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0c64b5405ce3cbc02f7c0c69f4b04bbf93e62ece b/fuzz/gnutls_srp_server_fuzzer.in/0c64b5405ce3cbc02f7c0c69f4b04bbf93e62ece new file mode 100644 index 0000000000..8de71128d2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0c64b5405ce3cbc02f7c0c69f4b04bbf93e62ece differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0c95f64d12f4e4e792c8b7fc82735245c3606560 b/fuzz/gnutls_srp_server_fuzzer.in/0c95f64d12f4e4e792c8b7fc82735245c3606560 new file mode 100644 index 0000000000..cf6d756cfc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0c95f64d12f4e4e792c8b7fc82735245c3606560 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0ccf601ef3f7ec1973bd5cfc934a64d931a0bd6c b/fuzz/gnutls_srp_server_fuzzer.in/0ccf601ef3f7ec1973bd5cfc934a64d931a0bd6c new file mode 100644 index 0000000000..1b1731190f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0ccf601ef3f7ec1973bd5cfc934a64d931a0bd6c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0d3ec681548103db4e5c77d4b8aa557ebefb232f b/fuzz/gnutls_srp_server_fuzzer.in/0d3ec681548103db4e5c77d4b8aa557ebefb232f new file mode 100644 index 0000000000..00f80f8428 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0d3ec681548103db4e5c77d4b8aa557ebefb232f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0e2aed30f14dd9a2dadb8dc33e97d8b55e219423 b/fuzz/gnutls_srp_server_fuzzer.in/0e2aed30f14dd9a2dadb8dc33e97d8b55e219423 new file mode 100644 index 0000000000..1cb1ef89a9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0e2aed30f14dd9a2dadb8dc33e97d8b55e219423 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0e3dcd01f3937989454fb3f892583515c5ca0ccd b/fuzz/gnutls_srp_server_fuzzer.in/0e3dcd01f3937989454fb3f892583515c5ca0ccd new file mode 100644 index 0000000000..e7ebc7e617 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0e3dcd01f3937989454fb3f892583515c5ca0ccd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0e461aea635c562c7e58516ce35c35569e41e695 b/fuzz/gnutls_srp_server_fuzzer.in/0e461aea635c562c7e58516ce35c35569e41e695 new file mode 100644 index 0000000000..9d3b522070 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0e461aea635c562c7e58516ce35c35569e41e695 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0e7e2c260f2a8c0a4de4fc6e4aa24448f813d74b b/fuzz/gnutls_srp_server_fuzzer.in/0e7e2c260f2a8c0a4de4fc6e4aa24448f813d74b new file mode 100644 index 0000000000..9557fde695 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0e7e2c260f2a8c0a4de4fc6e4aa24448f813d74b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0ea3d65915dc13c24f0f302b5bb4dfe6d1000b5f b/fuzz/gnutls_srp_server_fuzzer.in/0ea3d65915dc13c24f0f302b5bb4dfe6d1000b5f new file mode 100644 index 0000000000..1249410a7b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0ea3d65915dc13c24f0f302b5bb4dfe6d1000b5f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0eb4e59059ba95ecfdb4e6437a4b2b16b0556c65 b/fuzz/gnutls_srp_server_fuzzer.in/0eb4e59059ba95ecfdb4e6437a4b2b16b0556c65 new file mode 100644 index 0000000000..f31c907288 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0eb4e59059ba95ecfdb4e6437a4b2b16b0556c65 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0f375ea7593bbf2d319e87324abedc3442759aec b/fuzz/gnutls_srp_server_fuzzer.in/0f375ea7593bbf2d319e87324abedc3442759aec new file mode 100644 index 0000000000..4f96281fc4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0f375ea7593bbf2d319e87324abedc3442759aec differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/0ff3101110dd1532a6648e535968e1bcd7bf5f75 b/fuzz/gnutls_srp_server_fuzzer.in/0ff3101110dd1532a6648e535968e1bcd7bf5f75 new file mode 100644 index 0000000000..2b0f0e1104 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/0ff3101110dd1532a6648e535968e1bcd7bf5f75 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/10f545b5a2b12a26e4eda26a085989689766599d b/fuzz/gnutls_srp_server_fuzzer.in/10f545b5a2b12a26e4eda26a085989689766599d new file mode 100644 index 0000000000..964463cc80 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/10f545b5a2b12a26e4eda26a085989689766599d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/11241a649bb9d82f066ee5dd5cdc0dd04b6c9a65 b/fuzz/gnutls_srp_server_fuzzer.in/11241a649bb9d82f066ee5dd5cdc0dd04b6c9a65 new file mode 100644 index 0000000000..18c309954b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/11241a649bb9d82f066ee5dd5cdc0dd04b6c9a65 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/116514d8644b661f54ba129e0fd94534ef0037e7 b/fuzz/gnutls_srp_server_fuzzer.in/116514d8644b661f54ba129e0fd94534ef0037e7 new file mode 100644 index 0000000000..fb5fd98a5c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/116514d8644b661f54ba129e0fd94534ef0037e7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1169db3c4222c89f9b0f287bae4c10ff63a79f64 b/fuzz/gnutls_srp_server_fuzzer.in/1169db3c4222c89f9b0f287bae4c10ff63a79f64 new file mode 100644 index 0000000000..fbc0078111 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1169db3c4222c89f9b0f287bae4c10ff63a79f64 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/127e3fff225d2cfef873a42167ae874ca9c05b54 b/fuzz/gnutls_srp_server_fuzzer.in/127e3fff225d2cfef873a42167ae874ca9c05b54 new file mode 100644 index 0000000000..6a223c2e00 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/127e3fff225d2cfef873a42167ae874ca9c05b54 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1351795db0b296f2d8cdb9b5093801cb9d150c71 b/fuzz/gnutls_srp_server_fuzzer.in/1351795db0b296f2d8cdb9b5093801cb9d150c71 new file mode 100644 index 0000000000..3f8ce78dbd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1351795db0b296f2d8cdb9b5093801cb9d150c71 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/137045ca43ab2a5975450b7e6980c58824187480 b/fuzz/gnutls_srp_server_fuzzer.in/137045ca43ab2a5975450b7e6980c58824187480 new file mode 100644 index 0000000000..b94a978e27 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/137045ca43ab2a5975450b7e6980c58824187480 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/13ae5375d063529ee905369934785b7f5498ac8f b/fuzz/gnutls_srp_server_fuzzer.in/13ae5375d063529ee905369934785b7f5498ac8f new file mode 100644 index 0000000000..069888ba68 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/13ae5375d063529ee905369934785b7f5498ac8f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/14020c0f6b4a49bccdbdb4589fb179c7e64adbf9 b/fuzz/gnutls_srp_server_fuzzer.in/14020c0f6b4a49bccdbdb4589fb179c7e64adbf9 new file mode 100644 index 0000000000..401da43367 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/14020c0f6b4a49bccdbdb4589fb179c7e64adbf9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/142a3812b70222e662916911576aa176c117585a b/fuzz/gnutls_srp_server_fuzzer.in/142a3812b70222e662916911576aa176c117585a new file mode 100644 index 0000000000..2b944d3a7b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/142a3812b70222e662916911576aa176c117585a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1465bb78e297f515ad09011d53c483889d8d2013 b/fuzz/gnutls_srp_server_fuzzer.in/1465bb78e297f515ad09011d53c483889d8d2013 new file mode 100644 index 0000000000..e6d05ee3bb Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1465bb78e297f515ad09011d53c483889d8d2013 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/155e056b22293078bc9e66259398fe69d7f28953 b/fuzz/gnutls_srp_server_fuzzer.in/155e056b22293078bc9e66259398fe69d7f28953 new file mode 100644 index 0000000000..f5e68bfbe4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/155e056b22293078bc9e66259398fe69d7f28953 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1569bd256487a61cdae80fa65134a8d5cd2381c6 b/fuzz/gnutls_srp_server_fuzzer.in/1569bd256487a61cdae80fa65134a8d5cd2381c6 new file mode 100644 index 0000000000..7a7930ce20 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1569bd256487a61cdae80fa65134a8d5cd2381c6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/15b637af7d8d8083d4c96cfa98ba333d713ab0dd b/fuzz/gnutls_srp_server_fuzzer.in/15b637af7d8d8083d4c96cfa98ba333d713ab0dd new file mode 100644 index 0000000000..d79ed7fb6d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/15b637af7d8d8083d4c96cfa98ba333d713ab0dd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/15e2258af9c4c1f945e2ba2f579743697875fa3f b/fuzz/gnutls_srp_server_fuzzer.in/15e2258af9c4c1f945e2ba2f579743697875fa3f new file mode 100644 index 0000000000..f991012819 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/15e2258af9c4c1f945e2ba2f579743697875fa3f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/16101de71362437b84fbd09e2899a62f2bb82146 b/fuzz/gnutls_srp_server_fuzzer.in/16101de71362437b84fbd09e2899a62f2bb82146 new file mode 100644 index 0000000000..b0cbdd1c3c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/16101de71362437b84fbd09e2899a62f2bb82146 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/162b46e67b34f9a1c0c274529e791deaebcf1f88 b/fuzz/gnutls_srp_server_fuzzer.in/162b46e67b34f9a1c0c274529e791deaebcf1f88 new file mode 100644 index 0000000000..e2cbd078c3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/162b46e67b34f9a1c0c274529e791deaebcf1f88 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1644e18e3aed7ce6a972eec8e151c51ff977e7f5 b/fuzz/gnutls_srp_server_fuzzer.in/1644e18e3aed7ce6a972eec8e151c51ff977e7f5 new file mode 100644 index 0000000000..db69db90b5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1644e18e3aed7ce6a972eec8e151c51ff977e7f5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1674876e28e38aa3e7d1f0c5dfec1fbafcebcb6b b/fuzz/gnutls_srp_server_fuzzer.in/1674876e28e38aa3e7d1f0c5dfec1fbafcebcb6b new file mode 100644 index 0000000000..60d9af6c6c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1674876e28e38aa3e7d1f0c5dfec1fbafcebcb6b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/168dc7c811a37b0b938be66578e474a12d94c9bb b/fuzz/gnutls_srp_server_fuzzer.in/168dc7c811a37b0b938be66578e474a12d94c9bb new file mode 100644 index 0000000000..0caf1c81ca Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/168dc7c811a37b0b938be66578e474a12d94c9bb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/176d41039fe54b14fe8234f9db3e6369a8f52e5d b/fuzz/gnutls_srp_server_fuzzer.in/176d41039fe54b14fe8234f9db3e6369a8f52e5d new file mode 100644 index 0000000000..226b1e673e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/176d41039fe54b14fe8234f9db3e6369a8f52e5d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/178b4d2df5e398dd4a274bddec4b35638462017a b/fuzz/gnutls_srp_server_fuzzer.in/178b4d2df5e398dd4a274bddec4b35638462017a new file mode 100644 index 0000000000..198dd5dad2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/178b4d2df5e398dd4a274bddec4b35638462017a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/17f17579a064aa6f232baf61fbeedb61d3847b82 b/fuzz/gnutls_srp_server_fuzzer.in/17f17579a064aa6f232baf61fbeedb61d3847b82 new file mode 100644 index 0000000000..fccd24c51d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/17f17579a064aa6f232baf61fbeedb61d3847b82 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/181e3503fe0000fffe224d19ed36a9d948a5621a b/fuzz/gnutls_srp_server_fuzzer.in/181e3503fe0000fffe224d19ed36a9d948a5621a new file mode 100644 index 0000000000..dbd3ed09e0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/181e3503fe0000fffe224d19ed36a9d948a5621a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/18307ca2f7eb7fc28a234b213f47f7f1c99c626c b/fuzz/gnutls_srp_server_fuzzer.in/18307ca2f7eb7fc28a234b213f47f7f1c99c626c new file mode 100644 index 0000000000..16221eb4dc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/18307ca2f7eb7fc28a234b213f47f7f1c99c626c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/18d8e706fc6974ed92aafaaf111601317e2af212 b/fuzz/gnutls_srp_server_fuzzer.in/18d8e706fc6974ed92aafaaf111601317e2af212 new file mode 100644 index 0000000000..b3d323f70d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/18d8e706fc6974ed92aafaaf111601317e2af212 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/18d91f0e91819b116559ee7b45857bf7c68862e9 b/fuzz/gnutls_srp_server_fuzzer.in/18d91f0e91819b116559ee7b45857bf7c68862e9 new file mode 100644 index 0000000000..972ffff6dc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/18d91f0e91819b116559ee7b45857bf7c68862e9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/18f62eb4b174a970eb59ca5b4ec4d3a4d128d5cd b/fuzz/gnutls_srp_server_fuzzer.in/18f62eb4b174a970eb59ca5b4ec4d3a4d128d5cd new file mode 100644 index 0000000000..e99034b47f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/18f62eb4b174a970eb59ca5b4ec4d3a4d128d5cd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/18f645aa2d69d1e7f8935451ddacfa8c178e293a b/fuzz/gnutls_srp_server_fuzzer.in/18f645aa2d69d1e7f8935451ddacfa8c178e293a new file mode 100644 index 0000000000..5966d567c8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/18f645aa2d69d1e7f8935451ddacfa8c178e293a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/190954a6f1abe15388be38a1539fa61114e77b41 b/fuzz/gnutls_srp_server_fuzzer.in/190954a6f1abe15388be38a1539fa61114e77b41 new file mode 100644 index 0000000000..dfb2eab5ef Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/190954a6f1abe15388be38a1539fa61114e77b41 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1915e5f8d4084880216f8f5e6dd086ab14770a47 b/fuzz/gnutls_srp_server_fuzzer.in/1915e5f8d4084880216f8f5e6dd086ab14770a47 new file mode 100644 index 0000000000..3fde6b2cf7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1915e5f8d4084880216f8f5e6dd086ab14770a47 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/19168be61b1a82af2e7b0577666482e077c4f805 b/fuzz/gnutls_srp_server_fuzzer.in/19168be61b1a82af2e7b0577666482e077c4f805 new file mode 100644 index 0000000000..cf5f3ae3e4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/19168be61b1a82af2e7b0577666482e077c4f805 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/19912f070f92b6597112b95c433a933df8a95a6b b/fuzz/gnutls_srp_server_fuzzer.in/19912f070f92b6597112b95c433a933df8a95a6b new file mode 100644 index 0000000000..103f69ac51 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/19912f070f92b6597112b95c433a933df8a95a6b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/19d0f17f73eb77fbce30da182ac2ee5c1623ae36 b/fuzz/gnutls_srp_server_fuzzer.in/19d0f17f73eb77fbce30da182ac2ee5c1623ae36 new file mode 100644 index 0000000000..d22fd80cce Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/19d0f17f73eb77fbce30da182ac2ee5c1623ae36 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1a36d897d862309183dd77d988fca1d261ae3870 b/fuzz/gnutls_srp_server_fuzzer.in/1a36d897d862309183dd77d988fca1d261ae3870 new file mode 100644 index 0000000000..3ecd6b6577 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1a36d897d862309183dd77d988fca1d261ae3870 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1abcf21d8df06d7297656decad9867cc37fb3521 b/fuzz/gnutls_srp_server_fuzzer.in/1abcf21d8df06d7297656decad9867cc37fb3521 new file mode 100644 index 0000000000..7867e25df7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1abcf21d8df06d7297656decad9867cc37fb3521 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1b6bd139c5de17ffbdb0508b4d11493b979fd94a b/fuzz/gnutls_srp_server_fuzzer.in/1b6bd139c5de17ffbdb0508b4d11493b979fd94a new file mode 100644 index 0000000000..f61d0fb199 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1b6bd139c5de17ffbdb0508b4d11493b979fd94a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1b7e5062fdbd0385346282910aa5d03c7f96cea6 b/fuzz/gnutls_srp_server_fuzzer.in/1b7e5062fdbd0385346282910aa5d03c7f96cea6 new file mode 100644 index 0000000000..c3e8fe3fac Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1b7e5062fdbd0385346282910aa5d03c7f96cea6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1b82b4866bb52fec1c82251c5870a844d4e8bdf9 b/fuzz/gnutls_srp_server_fuzzer.in/1b82b4866bb52fec1c82251c5870a844d4e8bdf9 new file mode 100644 index 0000000000..2782af320c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1b82b4866bb52fec1c82251c5870a844d4e8bdf9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1b9cfee034dc06cf1c5705775bc0fcb7fe34fe39 b/fuzz/gnutls_srp_server_fuzzer.in/1b9cfee034dc06cf1c5705775bc0fcb7fe34fe39 new file mode 100644 index 0000000000..6374baec50 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1b9cfee034dc06cf1c5705775bc0fcb7fe34fe39 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1bf4460aedb67f84d6358a69acd2de5ea5eb16ff b/fuzz/gnutls_srp_server_fuzzer.in/1bf4460aedb67f84d6358a69acd2de5ea5eb16ff new file mode 100644 index 0000000000..f62bb8827f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1bf4460aedb67f84d6358a69acd2de5ea5eb16ff differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1d1846cd3d9b103ae0e230ac25fa712777b6f5a3 b/fuzz/gnutls_srp_server_fuzzer.in/1d1846cd3d9b103ae0e230ac25fa712777b6f5a3 new file mode 100644 index 0000000000..6cd819427b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1d1846cd3d9b103ae0e230ac25fa712777b6f5a3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1d19546ad0d4f9174267bfcc942e7f9893f4634a b/fuzz/gnutls_srp_server_fuzzer.in/1d19546ad0d4f9174267bfcc942e7f9893f4634a new file mode 100644 index 0000000000..5f9b05b7cb Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1d19546ad0d4f9174267bfcc942e7f9893f4634a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1da9310b04d0a8dd6e477a42a2df19c9669ec67e b/fuzz/gnutls_srp_server_fuzzer.in/1da9310b04d0a8dd6e477a42a2df19c9669ec67e new file mode 100644 index 0000000000..e2bb006b1f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1da9310b04d0a8dd6e477a42a2df19c9669ec67e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1de81aeb14da2b79efa8f559d434c3ea90c2116f b/fuzz/gnutls_srp_server_fuzzer.in/1de81aeb14da2b79efa8f559d434c3ea90c2116f new file mode 100644 index 0000000000..b0a887fad0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1de81aeb14da2b79efa8f559d434c3ea90c2116f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1e4abec247a151a80b623f9f21ae2d79881e7440 b/fuzz/gnutls_srp_server_fuzzer.in/1e4abec247a151a80b623f9f21ae2d79881e7440 new file mode 100644 index 0000000000..5a8e53e915 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1e4abec247a151a80b623f9f21ae2d79881e7440 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1e75bdc98f020ed9416e6e417bf3a5e9c0872093 b/fuzz/gnutls_srp_server_fuzzer.in/1e75bdc98f020ed9416e6e417bf3a5e9c0872093 new file mode 100644 index 0000000000..fc6eac84d1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1e75bdc98f020ed9416e6e417bf3a5e9c0872093 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1e85416892020dede08c847cd74c04ae96dbbcf0 b/fuzz/gnutls_srp_server_fuzzer.in/1e85416892020dede08c847cd74c04ae96dbbcf0 new file mode 100644 index 0000000000..c526ce4201 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1e85416892020dede08c847cd74c04ae96dbbcf0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1ed50a97820dfd639fc0d27fbf62661cb65f25e6 b/fuzz/gnutls_srp_server_fuzzer.in/1ed50a97820dfd639fc0d27fbf62661cb65f25e6 new file mode 100644 index 0000000000..9a4a8675f2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1ed50a97820dfd639fc0d27fbf62661cb65f25e6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1eee1d97fc3a3b76b3931405ef1fffe33a156de5 b/fuzz/gnutls_srp_server_fuzzer.in/1eee1d97fc3a3b76b3931405ef1fffe33a156de5 new file mode 100644 index 0000000000..527e0d5e48 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1eee1d97fc3a3b76b3931405ef1fffe33a156de5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/1f59c49e1326984f43b65a255b4fbedd71ceda09 b/fuzz/gnutls_srp_server_fuzzer.in/1f59c49e1326984f43b65a255b4fbedd71ceda09 new file mode 100644 index 0000000000..37021f1719 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/1f59c49e1326984f43b65a255b4fbedd71ceda09 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/202a4488cc0e220974e7eca147c33f4844751b20 b/fuzz/gnutls_srp_server_fuzzer.in/202a4488cc0e220974e7eca147c33f4844751b20 new file mode 100644 index 0000000000..1777d56f1f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/202a4488cc0e220974e7eca147c33f4844751b20 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/203855674b78da545bfbe27f12bee0f2ccf50491 b/fuzz/gnutls_srp_server_fuzzer.in/203855674b78da545bfbe27f12bee0f2ccf50491 new file mode 100644 index 0000000000..48ccc813f4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/203855674b78da545bfbe27f12bee0f2ccf50491 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/21226748b162b4cf2808dbb8b56a0b13f2b0e766 b/fuzz/gnutls_srp_server_fuzzer.in/21226748b162b4cf2808dbb8b56a0b13f2b0e766 new file mode 100644 index 0000000000..5f4c6bef9c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/21226748b162b4cf2808dbb8b56a0b13f2b0e766 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/21a1571d60953b74de06f9862954ab2631aa59f9 b/fuzz/gnutls_srp_server_fuzzer.in/21a1571d60953b74de06f9862954ab2631aa59f9 new file mode 100644 index 0000000000..b2e1e10dd5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/21a1571d60953b74de06f9862954ab2631aa59f9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/222f6b98dd5c7d53e750940982588e405bd9ed6d b/fuzz/gnutls_srp_server_fuzzer.in/222f6b98dd5c7d53e750940982588e405bd9ed6d new file mode 100644 index 0000000000..1cb9e79bd3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/222f6b98dd5c7d53e750940982588e405bd9ed6d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/225f164368ba04280de1ddc481feb0036e07d18a b/fuzz/gnutls_srp_server_fuzzer.in/225f164368ba04280de1ddc481feb0036e07d18a new file mode 100644 index 0000000000..2981ce3fbb Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/225f164368ba04280de1ddc481feb0036e07d18a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/22634364e81950327f511e3955ff1ce65178e3ae b/fuzz/gnutls_srp_server_fuzzer.in/22634364e81950327f511e3955ff1ce65178e3ae new file mode 100644 index 0000000000..96a79c0fac Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/22634364e81950327f511e3955ff1ce65178e3ae differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/22f3c5364d139f31312c2789c5cb4a42de4a9cac b/fuzz/gnutls_srp_server_fuzzer.in/22f3c5364d139f31312c2789c5cb4a42de4a9cac new file mode 100644 index 0000000000..1734d32c3e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/22f3c5364d139f31312c2789c5cb4a42de4a9cac differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/22ff2f059acfe354e627c24e62aef40441d3e2a9 b/fuzz/gnutls_srp_server_fuzzer.in/22ff2f059acfe354e627c24e62aef40441d3e2a9 new file mode 100644 index 0000000000..be69d23793 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/22ff2f059acfe354e627c24e62aef40441d3e2a9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/237b5a0bd47573b2f0e6d678aceba440e88565a9 b/fuzz/gnutls_srp_server_fuzzer.in/237b5a0bd47573b2f0e6d678aceba440e88565a9 new file mode 100644 index 0000000000..567052a809 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/237b5a0bd47573b2f0e6d678aceba440e88565a9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/23a4408e571d4bc941bc9a1d153149717d97d12a b/fuzz/gnutls_srp_server_fuzzer.in/23a4408e571d4bc941bc9a1d153149717d97d12a new file mode 100644 index 0000000000..6b8274803e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/23a4408e571d4bc941bc9a1d153149717d97d12a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/23ae02b34877cabbab5db864fe9e8ec139d2f385 b/fuzz/gnutls_srp_server_fuzzer.in/23ae02b34877cabbab5db864fe9e8ec139d2f385 new file mode 100644 index 0000000000..6e90855ba9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/23ae02b34877cabbab5db864fe9e8ec139d2f385 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/23f202b04d27fe833abf575a129442f44d89898a b/fuzz/gnutls_srp_server_fuzzer.in/23f202b04d27fe833abf575a129442f44d89898a new file mode 100644 index 0000000000..3112969381 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/23f202b04d27fe833abf575a129442f44d89898a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/240d62eb992fb3ad558ffc98e93bfe2b4d4637dd b/fuzz/gnutls_srp_server_fuzzer.in/240d62eb992fb3ad558ffc98e93bfe2b4d4637dd new file mode 100644 index 0000000000..dd57b96975 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/240d62eb992fb3ad558ffc98e93bfe2b4d4637dd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/24101d2d03adbc3bf78379b257b63291ce8ef3f1 b/fuzz/gnutls_srp_server_fuzzer.in/24101d2d03adbc3bf78379b257b63291ce8ef3f1 new file mode 100644 index 0000000000..524fa1bfa3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/24101d2d03adbc3bf78379b257b63291ce8ef3f1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/241291b3a191f3bd52a492f6572b9dc4b228a46a b/fuzz/gnutls_srp_server_fuzzer.in/241291b3a191f3bd52a492f6572b9dc4b228a46a new file mode 100644 index 0000000000..b5edce9178 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/241291b3a191f3bd52a492f6572b9dc4b228a46a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/24a28b361774ee633c7759a7a09d182283b3b8ca b/fuzz/gnutls_srp_server_fuzzer.in/24a28b361774ee633c7759a7a09d182283b3b8ca new file mode 100644 index 0000000000..b03b658413 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/24a28b361774ee633c7759a7a09d182283b3b8ca differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/24a999caf1b02dc732f891b77344a65377d06b12 b/fuzz/gnutls_srp_server_fuzzer.in/24a999caf1b02dc732f891b77344a65377d06b12 new file mode 100644 index 0000000000..ad3d31acb6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/24a999caf1b02dc732f891b77344a65377d06b12 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/24c3505a39db45fa5c8439a2c11e4c4e46ad7e57 b/fuzz/gnutls_srp_server_fuzzer.in/24c3505a39db45fa5c8439a2c11e4c4e46ad7e57 new file mode 100644 index 0000000000..c2c5cfd33d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/24c3505a39db45fa5c8439a2c11e4c4e46ad7e57 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/25292a98baf3a74c9d4c2fc14f16cf4414c79e47 b/fuzz/gnutls_srp_server_fuzzer.in/25292a98baf3a74c9d4c2fc14f16cf4414c79e47 new file mode 100644 index 0000000000..ae08dd1c82 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/25292a98baf3a74c9d4c2fc14f16cf4414c79e47 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2548853e20a7028c0064b8d2b6813a380bcbbc6b b/fuzz/gnutls_srp_server_fuzzer.in/2548853e20a7028c0064b8d2b6813a380bcbbc6b new file mode 100644 index 0000000000..85461943c9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2548853e20a7028c0064b8d2b6813a380bcbbc6b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/260c7fd152e169c8bb4eb5ea7984781eae0063c8 b/fuzz/gnutls_srp_server_fuzzer.in/260c7fd152e169c8bb4eb5ea7984781eae0063c8 new file mode 100644 index 0000000000..a9b9f2e912 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/260c7fd152e169c8bb4eb5ea7984781eae0063c8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/26751abc63bbd09e27e2a4f600b6dbbad0b0081c b/fuzz/gnutls_srp_server_fuzzer.in/26751abc63bbd09e27e2a4f600b6dbbad0b0081c new file mode 100644 index 0000000000..47cc9e85c4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/26751abc63bbd09e27e2a4f600b6dbbad0b0081c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/268a57a4f5fc1eb6cc027b93ac539481423c71d0 b/fuzz/gnutls_srp_server_fuzzer.in/268a57a4f5fc1eb6cc027b93ac539481423c71d0 new file mode 100644 index 0000000000..f4a85f4d6e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/268a57a4f5fc1eb6cc027b93ac539481423c71d0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/26b1da4f7f5930005eaca5bb76cb98c93c7cb6ac b/fuzz/gnutls_srp_server_fuzzer.in/26b1da4f7f5930005eaca5bb76cb98c93c7cb6ac new file mode 100644 index 0000000000..df0a8c5729 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/26b1da4f7f5930005eaca5bb76cb98c93c7cb6ac differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/271fd5c219c76a776e60e4aae76adcb775c919e4 b/fuzz/gnutls_srp_server_fuzzer.in/271fd5c219c76a776e60e4aae76adcb775c919e4 new file mode 100644 index 0000000000..e6febed112 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/271fd5c219c76a776e60e4aae76adcb775c919e4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2745656c59e28e14257c27e14a0ea5f457169f5c b/fuzz/gnutls_srp_server_fuzzer.in/2745656c59e28e14257c27e14a0ea5f457169f5c new file mode 100644 index 0000000000..45136abf30 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2745656c59e28e14257c27e14a0ea5f457169f5c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/281eb87d23f7403241a4f581a2ad3db8dd25b855 b/fuzz/gnutls_srp_server_fuzzer.in/281eb87d23f7403241a4f581a2ad3db8dd25b855 new file mode 100644 index 0000000000..9980a7401f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/281eb87d23f7403241a4f581a2ad3db8dd25b855 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/283c91ccba290fdcd79062739622ce074ad433dc b/fuzz/gnutls_srp_server_fuzzer.in/283c91ccba290fdcd79062739622ce074ad433dc new file mode 100644 index 0000000000..daffe107d2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/283c91ccba290fdcd79062739622ce074ad433dc differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/285e489f77ba2d91c1711374e201a17c7abfd83f b/fuzz/gnutls_srp_server_fuzzer.in/285e489f77ba2d91c1711374e201a17c7abfd83f new file mode 100644 index 0000000000..c03cbc9e69 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/285e489f77ba2d91c1711374e201a17c7abfd83f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/28a274e3e67a3757d5f9073fffa09328ac00c2ba b/fuzz/gnutls_srp_server_fuzzer.in/28a274e3e67a3757d5f9073fffa09328ac00c2ba new file mode 100644 index 0000000000..3a0c99ea2a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/28a274e3e67a3757d5f9073fffa09328ac00c2ba differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/28da7046c60547b0403e63cee4ec375ee8c3e24f b/fuzz/gnutls_srp_server_fuzzer.in/28da7046c60547b0403e63cee4ec375ee8c3e24f new file mode 100644 index 0000000000..1ab0dce8a6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/28da7046c60547b0403e63cee4ec375ee8c3e24f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/29319cc08ff3fef3757fb33f1bf715329e5b4ae0 b/fuzz/gnutls_srp_server_fuzzer.in/29319cc08ff3fef3757fb33f1bf715329e5b4ae0 new file mode 100644 index 0000000000..937014cd04 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/29319cc08ff3fef3757fb33f1bf715329e5b4ae0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/29b07c0b653b27dd16221219fd23ce36ede967e7 b/fuzz/gnutls_srp_server_fuzzer.in/29b07c0b653b27dd16221219fd23ce36ede967e7 new file mode 100644 index 0000000000..93f5407ffc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/29b07c0b653b27dd16221219fd23ce36ede967e7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/29ed40f767aac7ce22bd45c31875adfb361fb2ba b/fuzz/gnutls_srp_server_fuzzer.in/29ed40f767aac7ce22bd45c31875adfb361fb2ba new file mode 100644 index 0000000000..a0b4a51d4a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/29ed40f767aac7ce22bd45c31875adfb361fb2ba differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2a33ce8eeb7e63f9184fcdebb53527e347a85619 b/fuzz/gnutls_srp_server_fuzzer.in/2a33ce8eeb7e63f9184fcdebb53527e347a85619 new file mode 100644 index 0000000000..478df3462a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2a33ce8eeb7e63f9184fcdebb53527e347a85619 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2a35544e29a1f2f71351678b1b2dd1c1c8653298 b/fuzz/gnutls_srp_server_fuzzer.in/2a35544e29a1f2f71351678b1b2dd1c1c8653298 new file mode 100644 index 0000000000..aaed5a6b1a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2a35544e29a1f2f71351678b1b2dd1c1c8653298 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2b49affd017c45506532650315f7366777652daa b/fuzz/gnutls_srp_server_fuzzer.in/2b49affd017c45506532650315f7366777652daa new file mode 100644 index 0000000000..754eb48595 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2b49affd017c45506532650315f7366777652daa differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2b823a4747d61a846825d0f3546fc4740feb895b b/fuzz/gnutls_srp_server_fuzzer.in/2b823a4747d61a846825d0f3546fc4740feb895b new file mode 100644 index 0000000000..9049f58719 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2b823a4747d61a846825d0f3546fc4740feb895b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2bc31557eb32f7075e0aabe0dd151fbc694212a1 b/fuzz/gnutls_srp_server_fuzzer.in/2bc31557eb32f7075e0aabe0dd151fbc694212a1 new file mode 100644 index 0000000000..938214aa17 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2bc31557eb32f7075e0aabe0dd151fbc694212a1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2bca65d949c508064da864d05cd171ea1ead64f2 b/fuzz/gnutls_srp_server_fuzzer.in/2bca65d949c508064da864d05cd171ea1ead64f2 new file mode 100644 index 0000000000..daa6e9bce2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2bca65d949c508064da864d05cd171ea1ead64f2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2bde27645de054b45a4f6be8890db878c9c17489 b/fuzz/gnutls_srp_server_fuzzer.in/2bde27645de054b45a4f6be8890db878c9c17489 new file mode 100644 index 0000000000..a6ec302916 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2bde27645de054b45a4f6be8890db878c9c17489 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2ec346d17efb0c379b1627bd8976ea83cae042b6 b/fuzz/gnutls_srp_server_fuzzer.in/2ec346d17efb0c379b1627bd8976ea83cae042b6 new file mode 100644 index 0000000000..55ddd537a6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2ec346d17efb0c379b1627bd8976ea83cae042b6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2f6a58fa47186d1ba6d057ede720f6c58a533b93 b/fuzz/gnutls_srp_server_fuzzer.in/2f6a58fa47186d1ba6d057ede720f6c58a533b93 new file mode 100644 index 0000000000..31b18e627a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2f6a58fa47186d1ba6d057ede720f6c58a533b93 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/2f7a9db8867fcd2f604e0c46854e91fd6dfd2d87 b/fuzz/gnutls_srp_server_fuzzer.in/2f7a9db8867fcd2f604e0c46854e91fd6dfd2d87 new file mode 100644 index 0000000000..d89a818a1a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/2f7a9db8867fcd2f604e0c46854e91fd6dfd2d87 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3004cd89c9445b7e66ed4633a984c477a098fe22 b/fuzz/gnutls_srp_server_fuzzer.in/3004cd89c9445b7e66ed4633a984c477a098fe22 new file mode 100644 index 0000000000..7e9c2c0e3e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3004cd89c9445b7e66ed4633a984c477a098fe22 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/30c35967ff13456c04adf717f4e576134fa0fb90 b/fuzz/gnutls_srp_server_fuzzer.in/30c35967ff13456c04adf717f4e576134fa0fb90 new file mode 100644 index 0000000000..117e70669d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/30c35967ff13456c04adf717f4e576134fa0fb90 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/312b1e2cadd51d0871cb6600b90c078d80e9d90c b/fuzz/gnutls_srp_server_fuzzer.in/312b1e2cadd51d0871cb6600b90c078d80e9d90c new file mode 100644 index 0000000000..9bc357fd70 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/312b1e2cadd51d0871cb6600b90c078d80e9d90c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3225bb205e7af60e6255033bbe9f84026abf458e b/fuzz/gnutls_srp_server_fuzzer.in/3225bb205e7af60e6255033bbe9f84026abf458e new file mode 100644 index 0000000000..0982dc39bc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3225bb205e7af60e6255033bbe9f84026abf458e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/32a90b0f52275dffdfaa3536b6af0b1a11e0219d b/fuzz/gnutls_srp_server_fuzzer.in/32a90b0f52275dffdfaa3536b6af0b1a11e0219d new file mode 100644 index 0000000000..c67d582adb Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/32a90b0f52275dffdfaa3536b6af0b1a11e0219d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/32fa03f783c702c4191c23cfdc51005891e21c1e b/fuzz/gnutls_srp_server_fuzzer.in/32fa03f783c702c4191c23cfdc51005891e21c1e new file mode 100644 index 0000000000..9086e4f13d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/32fa03f783c702c4191c23cfdc51005891e21c1e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/334fb0e5cbe83cf2756e1973552dffb32ee93e84 b/fuzz/gnutls_srp_server_fuzzer.in/334fb0e5cbe83cf2756e1973552dffb32ee93e84 new file mode 100644 index 0000000000..32d605d6cc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/334fb0e5cbe83cf2756e1973552dffb32ee93e84 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3389f44eb75f6d83d91dca8a6f7da91aefc7fd55 b/fuzz/gnutls_srp_server_fuzzer.in/3389f44eb75f6d83d91dca8a6f7da91aefc7fd55 new file mode 100644 index 0000000000..c3626996c6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3389f44eb75f6d83d91dca8a6f7da91aefc7fd55 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/33e41b157f8af6d113c177bfcef0200bacccdfa4 b/fuzz/gnutls_srp_server_fuzzer.in/33e41b157f8af6d113c177bfcef0200bacccdfa4 new file mode 100644 index 0000000000..00925027df Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/33e41b157f8af6d113c177bfcef0200bacccdfa4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/33e5f82bb73a01c3b9df5e089d026affaa8d7db3 b/fuzz/gnutls_srp_server_fuzzer.in/33e5f82bb73a01c3b9df5e089d026affaa8d7db3 new file mode 100644 index 0000000000..06e11adae7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/33e5f82bb73a01c3b9df5e089d026affaa8d7db3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/33ff7a4d9e656556aa510a2ef02d4dcb241a6f06 b/fuzz/gnutls_srp_server_fuzzer.in/33ff7a4d9e656556aa510a2ef02d4dcb241a6f06 new file mode 100644 index 0000000000..6e172ec780 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/33ff7a4d9e656556aa510a2ef02d4dcb241a6f06 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3448aaa4a3390e17608b5bedfa8208020baf1528 b/fuzz/gnutls_srp_server_fuzzer.in/3448aaa4a3390e17608b5bedfa8208020baf1528 new file mode 100644 index 0000000000..0197e8897b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3448aaa4a3390e17608b5bedfa8208020baf1528 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/34cc2bfcc548db1948be9d311eefba5606b87de3 b/fuzz/gnutls_srp_server_fuzzer.in/34cc2bfcc548db1948be9d311eefba5606b87de3 new file mode 100644 index 0000000000..c5fb7081e9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/34cc2bfcc548db1948be9d311eefba5606b87de3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/34d0078c500aea5f8ae8c7c25692033ba25e7bc6 b/fuzz/gnutls_srp_server_fuzzer.in/34d0078c500aea5f8ae8c7c25692033ba25e7bc6 new file mode 100644 index 0000000000..3a99e07e26 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/34d0078c500aea5f8ae8c7c25692033ba25e7bc6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3507b32f326d338f34078de125f8b94972e30050 b/fuzz/gnutls_srp_server_fuzzer.in/3507b32f326d338f34078de125f8b94972e30050 new file mode 100644 index 0000000000..580f777401 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3507b32f326d338f34078de125f8b94972e30050 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/358428f430d679ddcc1ec2e2f93b754ffad06deb b/fuzz/gnutls_srp_server_fuzzer.in/358428f430d679ddcc1ec2e2f93b754ffad06deb new file mode 100644 index 0000000000..927cbb63ec Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/358428f430d679ddcc1ec2e2f93b754ffad06deb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/359d8741c4bd0b6dfab573ba00f936b1b0eb6956 b/fuzz/gnutls_srp_server_fuzzer.in/359d8741c4bd0b6dfab573ba00f936b1b0eb6956 new file mode 100644 index 0000000000..33dde4c7b1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/359d8741c4bd0b6dfab573ba00f936b1b0eb6956 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/35ad58592c38b294a960d0b05ce4fb544d762803 b/fuzz/gnutls_srp_server_fuzzer.in/35ad58592c38b294a960d0b05ce4fb544d762803 new file mode 100644 index 0000000000..305922440e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/35ad58592c38b294a960d0b05ce4fb544d762803 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/360f52599cb13ddc9e0ed5b75fa77b4413a071a0 b/fuzz/gnutls_srp_server_fuzzer.in/360f52599cb13ddc9e0ed5b75fa77b4413a071a0 new file mode 100644 index 0000000000..40fef6793c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/360f52599cb13ddc9e0ed5b75fa77b4413a071a0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/363f276910747a42d5616aa8b38b5647ebf44da2 b/fuzz/gnutls_srp_server_fuzzer.in/363f276910747a42d5616aa8b38b5647ebf44da2 new file mode 100644 index 0000000000..2ced773c01 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/363f276910747a42d5616aa8b38b5647ebf44da2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/36cfe108a4771caf066b052cfdadc5bba5ae6741 b/fuzz/gnutls_srp_server_fuzzer.in/36cfe108a4771caf066b052cfdadc5bba5ae6741 new file mode 100644 index 0000000000..6a95a0ba1e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/36cfe108a4771caf066b052cfdadc5bba5ae6741 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/36ee57fb860b8cc29e3e5f9649be578927020b29 b/fuzz/gnutls_srp_server_fuzzer.in/36ee57fb860b8cc29e3e5f9649be578927020b29 new file mode 100644 index 0000000000..c44e324cb6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/36ee57fb860b8cc29e3e5f9649be578927020b29 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3700d278364d26db7ea0f86e29dc408f7513b6eb b/fuzz/gnutls_srp_server_fuzzer.in/3700d278364d26db7ea0f86e29dc408f7513b6eb new file mode 100644 index 0000000000..8c41c6b7f8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3700d278364d26db7ea0f86e29dc408f7513b6eb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3737134469ff94d06bba510dc08705b391e18ac0 b/fuzz/gnutls_srp_server_fuzzer.in/3737134469ff94d06bba510dc08705b391e18ac0 new file mode 100644 index 0000000000..710741c236 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3737134469ff94d06bba510dc08705b391e18ac0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/379c3d836555149116ecfeef85cb93a19a061522 b/fuzz/gnutls_srp_server_fuzzer.in/379c3d836555149116ecfeef85cb93a19a061522 new file mode 100644 index 0000000000..9e47301c76 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/379c3d836555149116ecfeef85cb93a19a061522 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/37a09a9a5d74160ea0b47b74a72245f9d3eaa0a5 b/fuzz/gnutls_srp_server_fuzzer.in/37a09a9a5d74160ea0b47b74a72245f9d3eaa0a5 new file mode 100644 index 0000000000..acd9f5b5a1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/37a09a9a5d74160ea0b47b74a72245f9d3eaa0a5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/37ba70d6f3bd85f9394281091a547a6e2f68274c b/fuzz/gnutls_srp_server_fuzzer.in/37ba70d6f3bd85f9394281091a547a6e2f68274c new file mode 100644 index 0000000000..814713085f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/37ba70d6f3bd85f9394281091a547a6e2f68274c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/37d47c089c075fda60dd2cecc1464cca3cac1323 b/fuzz/gnutls_srp_server_fuzzer.in/37d47c089c075fda60dd2cecc1464cca3cac1323 new file mode 100644 index 0000000000..7688120a33 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/37d47c089c075fda60dd2cecc1464cca3cac1323 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/37d4b1eaff36bd5d77fe217198c6c92d7bcbe63e b/fuzz/gnutls_srp_server_fuzzer.in/37d4b1eaff36bd5d77fe217198c6c92d7bcbe63e new file mode 100644 index 0000000000..a2ca00d793 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/37d4b1eaff36bd5d77fe217198c6c92d7bcbe63e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/381eba52617d6bf64faf74a6cdca1027d066fb17 b/fuzz/gnutls_srp_server_fuzzer.in/381eba52617d6bf64faf74a6cdca1027d066fb17 new file mode 100644 index 0000000000..72d06a0eb0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/381eba52617d6bf64faf74a6cdca1027d066fb17 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/39118bb2dbc5f2374cb5bf886afa729c482a3f40 b/fuzz/gnutls_srp_server_fuzzer.in/39118bb2dbc5f2374cb5bf886afa729c482a3f40 new file mode 100644 index 0000000000..bf8930140f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/39118bb2dbc5f2374cb5bf886afa729c482a3f40 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/39adc28691c8f7bc88b32005c4f5a707b686e773 b/fuzz/gnutls_srp_server_fuzzer.in/39adc28691c8f7bc88b32005c4f5a707b686e773 new file mode 100644 index 0000000000..d56f617497 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/39adc28691c8f7bc88b32005c4f5a707b686e773 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/39dd011c7e78c1f560536903fdc28e7a215a519a b/fuzz/gnutls_srp_server_fuzzer.in/39dd011c7e78c1f560536903fdc28e7a215a519a new file mode 100644 index 0000000000..506ba0f804 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/39dd011c7e78c1f560536903fdc28e7a215a519a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3b0a18579c4c33ef7e064604faa98a2d5224be94 b/fuzz/gnutls_srp_server_fuzzer.in/3b0a18579c4c33ef7e064604faa98a2d5224be94 new file mode 100644 index 0000000000..9b3b183c8e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3b0a18579c4c33ef7e064604faa98a2d5224be94 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3b0e1f4a961cffcb9ef2a0617eb3c899dfa15acd b/fuzz/gnutls_srp_server_fuzzer.in/3b0e1f4a961cffcb9ef2a0617eb3c899dfa15acd new file mode 100644 index 0000000000..4da1931567 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3b0e1f4a961cffcb9ef2a0617eb3c899dfa15acd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3b970de42b59e6d4e1a0dd370745a77f4f6e2cd0 b/fuzz/gnutls_srp_server_fuzzer.in/3b970de42b59e6d4e1a0dd370745a77f4f6e2cd0 new file mode 100644 index 0000000000..506439ef82 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3b970de42b59e6d4e1a0dd370745a77f4f6e2cd0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3bda86f71b93eb4e068aec0389538d2b94a89887 b/fuzz/gnutls_srp_server_fuzzer.in/3bda86f71b93eb4e068aec0389538d2b94a89887 new file mode 100644 index 0000000000..219fa3822c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3bda86f71b93eb4e068aec0389538d2b94a89887 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3cc54c0ae2f0ed3f0f7505b3625b226409148fc3 b/fuzz/gnutls_srp_server_fuzzer.in/3cc54c0ae2f0ed3f0f7505b3625b226409148fc3 new file mode 100644 index 0000000000..e6f1bcb903 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3cc54c0ae2f0ed3f0f7505b3625b226409148fc3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3d04eb231cc41161c226b6e35ec39e0970005797 b/fuzz/gnutls_srp_server_fuzzer.in/3d04eb231cc41161c226b6e35ec39e0970005797 new file mode 100644 index 0000000000..0a371ca5ef Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3d04eb231cc41161c226b6e35ec39e0970005797 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3da8917feb96e675df47cb3539a65afbcbfb36ef b/fuzz/gnutls_srp_server_fuzzer.in/3da8917feb96e675df47cb3539a65afbcbfb36ef new file mode 100644 index 0000000000..2fc2b70af4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3da8917feb96e675df47cb3539a65afbcbfb36ef differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3df1c1557e5e63cc3b771063b6890b7fb6c549be b/fuzz/gnutls_srp_server_fuzzer.in/3df1c1557e5e63cc3b771063b6890b7fb6c549be new file mode 100644 index 0000000000..2eb7f7f80e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3df1c1557e5e63cc3b771063b6890b7fb6c549be differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3e4a37e4ad1d0323d2978efb1fe287abc7108fcf b/fuzz/gnutls_srp_server_fuzzer.in/3e4a37e4ad1d0323d2978efb1fe287abc7108fcf new file mode 100644 index 0000000000..40ecb12bcc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3e4a37e4ad1d0323d2978efb1fe287abc7108fcf differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3e4de6aae612c649447b81ef1c88f0f28a50fa8a b/fuzz/gnutls_srp_server_fuzzer.in/3e4de6aae612c649447b81ef1c88f0f28a50fa8a new file mode 100644 index 0000000000..114ed211be Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3e4de6aae612c649447b81ef1c88f0f28a50fa8a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3e5146a5eee8d2b8afde08d14d994149b89d9dd1 b/fuzz/gnutls_srp_server_fuzzer.in/3e5146a5eee8d2b8afde08d14d994149b89d9dd1 new file mode 100644 index 0000000000..dd2159f9c0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3e5146a5eee8d2b8afde08d14d994149b89d9dd1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3ea6e88bb7af09951ff1ad6d2ff3b6bdb09b8b57 b/fuzz/gnutls_srp_server_fuzzer.in/3ea6e88bb7af09951ff1ad6d2ff3b6bdb09b8b57 new file mode 100644 index 0000000000..4003ac8977 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3ea6e88bb7af09951ff1ad6d2ff3b6bdb09b8b57 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/3f8b3d0d0861ce76c57355d4e11eec2004e53c79 b/fuzz/gnutls_srp_server_fuzzer.in/3f8b3d0d0861ce76c57355d4e11eec2004e53c79 new file mode 100644 index 0000000000..f1064d9c77 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/3f8b3d0d0861ce76c57355d4e11eec2004e53c79 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/40236113b408c652c1f4599e83e1a995ea8a4d7c b/fuzz/gnutls_srp_server_fuzzer.in/40236113b408c652c1f4599e83e1a995ea8a4d7c new file mode 100644 index 0000000000..3cffe305b2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/40236113b408c652c1f4599e83e1a995ea8a4d7c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/40da02cd142d8d48ad42494f4c845886fff31831 b/fuzz/gnutls_srp_server_fuzzer.in/40da02cd142d8d48ad42494f4c845886fff31831 new file mode 100644 index 0000000000..cf0a3b2fff Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/40da02cd142d8d48ad42494f4c845886fff31831 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/41a526dfaff39cee9c3de4db3e9748af5f3ccdba b/fuzz/gnutls_srp_server_fuzzer.in/41a526dfaff39cee9c3de4db3e9748af5f3ccdba new file mode 100644 index 0000000000..7cef2542c0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/41a526dfaff39cee9c3de4db3e9748af5f3ccdba differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/42c1030109c565c1bd797d9ff7948bb9e684330f b/fuzz/gnutls_srp_server_fuzzer.in/42c1030109c565c1bd797d9ff7948bb9e684330f new file mode 100644 index 0000000000..b6874f6757 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/42c1030109c565c1bd797d9ff7948bb9e684330f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4364d017f25489e1fcf53ad8baf20800ff36b661 b/fuzz/gnutls_srp_server_fuzzer.in/4364d017f25489e1fcf53ad8baf20800ff36b661 new file mode 100644 index 0000000000..5cf2d1284a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4364d017f25489e1fcf53ad8baf20800ff36b661 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f b/fuzz/gnutls_srp_server_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f new file mode 100644 index 0000000000..5cf1a797d5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/43775dbb5d6232899c90c58436e6dfbd386e890f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4402acae24c79535966c6c17b50f82e447566e82 b/fuzz/gnutls_srp_server_fuzzer.in/4402acae24c79535966c6c17b50f82e447566e82 new file mode 100644 index 0000000000..df7ad9796e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4402acae24c79535966c6c17b50f82e447566e82 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/440bb1e7fc77f38328e1e3db5aa51259709a31d0 b/fuzz/gnutls_srp_server_fuzzer.in/440bb1e7fc77f38328e1e3db5aa51259709a31d0 new file mode 100644 index 0000000000..7b2800e3c3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/440bb1e7fc77f38328e1e3db5aa51259709a31d0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/447cfe9705d24ed5583fbe06cc2eb036f5ca057c b/fuzz/gnutls_srp_server_fuzzer.in/447cfe9705d24ed5583fbe06cc2eb036f5ca057c new file mode 100644 index 0000000000..a2f2bbe804 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/447cfe9705d24ed5583fbe06cc2eb036f5ca057c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/44c595443c6ada3dcb4be6e95579f0cb8cc500ef b/fuzz/gnutls_srp_server_fuzzer.in/44c595443c6ada3dcb4be6e95579f0cb8cc500ef new file mode 100644 index 0000000000..7e43c84f78 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/44c595443c6ada3dcb4be6e95579f0cb8cc500ef differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/44ecca821912c43ee64847a2c95f73596ca1e7a2 b/fuzz/gnutls_srp_server_fuzzer.in/44ecca821912c43ee64847a2c95f73596ca1e7a2 new file mode 100644 index 0000000000..e10e82e1e9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/44ecca821912c43ee64847a2c95f73596ca1e7a2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4504221ea5762f43a08a7fb178883468d51a8b0f b/fuzz/gnutls_srp_server_fuzzer.in/4504221ea5762f43a08a7fb178883468d51a8b0f new file mode 100644 index 0000000000..d38ffd5aa8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4504221ea5762f43a08a7fb178883468d51a8b0f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/45321d5877e4894f8e2842124293a64b8542cb5a b/fuzz/gnutls_srp_server_fuzzer.in/45321d5877e4894f8e2842124293a64b8542cb5a new file mode 100644 index 0000000000..8092dc1cc8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/45321d5877e4894f8e2842124293a64b8542cb5a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/45a41caf7c25cd39d95443de576f45f9b833cac6 b/fuzz/gnutls_srp_server_fuzzer.in/45a41caf7c25cd39d95443de576f45f9b833cac6 new file mode 100644 index 0000000000..e935010394 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/45a41caf7c25cd39d95443de576f45f9b833cac6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4610ec9e129b4406258c78f19abe18f9fc26fd19 b/fuzz/gnutls_srp_server_fuzzer.in/4610ec9e129b4406258c78f19abe18f9fc26fd19 new file mode 100644 index 0000000000..eed26f1bca Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4610ec9e129b4406258c78f19abe18f9fc26fd19 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/465236a5db2b2c3c93aa8180b4aed49f477b870f b/fuzz/gnutls_srp_server_fuzzer.in/465236a5db2b2c3c93aa8180b4aed49f477b870f new file mode 100644 index 0000000000..d195babf35 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/465236a5db2b2c3c93aa8180b4aed49f477b870f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/46a88b34828aa399c278730944cfc1a5dd93ab3a b/fuzz/gnutls_srp_server_fuzzer.in/46a88b34828aa399c278730944cfc1a5dd93ab3a new file mode 100644 index 0000000000..bcd7a0d828 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/46a88b34828aa399c278730944cfc1a5dd93ab3a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/46e715dfc742188b9950610852ea24f856a4dcbb b/fuzz/gnutls_srp_server_fuzzer.in/46e715dfc742188b9950610852ea24f856a4dcbb new file mode 100644 index 0000000000..d164a6a77a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/46e715dfc742188b9950610852ea24f856a4dcbb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/470b0c22ee1b12bede24f4f0d4d5e927fecce03a b/fuzz/gnutls_srp_server_fuzzer.in/470b0c22ee1b12bede24f4f0d4d5e927fecce03a new file mode 100644 index 0000000000..9c2bc4c65a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/470b0c22ee1b12bede24f4f0d4d5e927fecce03a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/471bdf4e32e33d0d85a2e7091a57bbb44a94bc8e b/fuzz/gnutls_srp_server_fuzzer.in/471bdf4e32e33d0d85a2e7091a57bbb44a94bc8e new file mode 100644 index 0000000000..445314c58a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/471bdf4e32e33d0d85a2e7091a57bbb44a94bc8e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/471c5330ef00d477265d4f79425dbb7e4a81e27d b/fuzz/gnutls_srp_server_fuzzer.in/471c5330ef00d477265d4f79425dbb7e4a81e27d new file mode 100644 index 0000000000..34d9dd782d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/471c5330ef00d477265d4f79425dbb7e4a81e27d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/476c711ae268f46f23594045f28a756879107672 b/fuzz/gnutls_srp_server_fuzzer.in/476c711ae268f46f23594045f28a756879107672 new file mode 100644 index 0000000000..80fad0c18f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/476c711ae268f46f23594045f28a756879107672 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4868c259bd62f4127e985a25e8f7b151d2d599fc b/fuzz/gnutls_srp_server_fuzzer.in/4868c259bd62f4127e985a25e8f7b151d2d599fc new file mode 100644 index 0000000000..775fa6f7e8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4868c259bd62f4127e985a25e8f7b151d2d599fc differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/49a6da2330bfdf53f42e07d27cc1d2a78d63ee95 b/fuzz/gnutls_srp_server_fuzzer.in/49a6da2330bfdf53f42e07d27cc1d2a78d63ee95 new file mode 100644 index 0000000000..c66f511bfa Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/49a6da2330bfdf53f42e07d27cc1d2a78d63ee95 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/49a7f02b4bd38fa57296ab5f0a98b85868535dbf b/fuzz/gnutls_srp_server_fuzzer.in/49a7f02b4bd38fa57296ab5f0a98b85868535dbf new file mode 100644 index 0000000000..0091c3fc01 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/49a7f02b4bd38fa57296ab5f0a98b85868535dbf differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/49e972e0c25ebd4822b516acb4967f66e55a5e10 b/fuzz/gnutls_srp_server_fuzzer.in/49e972e0c25ebd4822b516acb4967f66e55a5e10 new file mode 100644 index 0000000000..013499b3ce Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/49e972e0c25ebd4822b516acb4967f66e55a5e10 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4acf3cd91a9ffb79381f5a08ff4505b0f1bcd75a b/fuzz/gnutls_srp_server_fuzzer.in/4acf3cd91a9ffb79381f5a08ff4505b0f1bcd75a new file mode 100644 index 0000000000..499d6ebbaf Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4acf3cd91a9ffb79381f5a08ff4505b0f1bcd75a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4b4c68791d5dab4a5b873009f345b79cbc3f5a86 b/fuzz/gnutls_srp_server_fuzzer.in/4b4c68791d5dab4a5b873009f345b79cbc3f5a86 new file mode 100644 index 0000000000..c2fef250d3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4b4c68791d5dab4a5b873009f345b79cbc3f5a86 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4bc1036748c3fe1e1ef23440d63ec0c6a7c00fd9 b/fuzz/gnutls_srp_server_fuzzer.in/4bc1036748c3fe1e1ef23440d63ec0c6a7c00fd9 new file mode 100644 index 0000000000..6846b614cd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4bc1036748c3fe1e1ef23440d63ec0c6a7c00fd9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4c114d78819d7b45fb42d833394b9bc8167ffb0a b/fuzz/gnutls_srp_server_fuzzer.in/4c114d78819d7b45fb42d833394b9bc8167ffb0a new file mode 100644 index 0000000000..21b4a0c0c1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4c114d78819d7b45fb42d833394b9bc8167ffb0a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4c9727c460feed58a6f1eb375bf607eb8bfcf04b b/fuzz/gnutls_srp_server_fuzzer.in/4c9727c460feed58a6f1eb375bf607eb8bfcf04b new file mode 100644 index 0000000000..3450d4909e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4c9727c460feed58a6f1eb375bf607eb8bfcf04b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4cbc50f4012cd36bf54a9844ef495bef7b111328 b/fuzz/gnutls_srp_server_fuzzer.in/4cbc50f4012cd36bf54a9844ef495bef7b111328 new file mode 100644 index 0000000000..89e1419875 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4cbc50f4012cd36bf54a9844ef495bef7b111328 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4cf58c6312d8fb764f48aed6eb48fe3adcde63f0 b/fuzz/gnutls_srp_server_fuzzer.in/4cf58c6312d8fb764f48aed6eb48fe3adcde63f0 new file mode 100644 index 0000000000..9a40e5c548 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4cf58c6312d8fb764f48aed6eb48fe3adcde63f0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4d09230c82e15786214792b2e17fadbc4e987d57 b/fuzz/gnutls_srp_server_fuzzer.in/4d09230c82e15786214792b2e17fadbc4e987d57 new file mode 100644 index 0000000000..cfd2d2e9a8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4d09230c82e15786214792b2e17fadbc4e987d57 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4db5ac9ed9bd045f50b602210f2a82c2c2b55bff b/fuzz/gnutls_srp_server_fuzzer.in/4db5ac9ed9bd045f50b602210f2a82c2c2b55bff new file mode 100644 index 0000000000..0ccf0b0c2b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4db5ac9ed9bd045f50b602210f2a82c2c2b55bff differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4dbcb672ffd77c17daf9afa20f9327a4488617ab b/fuzz/gnutls_srp_server_fuzzer.in/4dbcb672ffd77c17daf9afa20f9327a4488617ab new file mode 100644 index 0000000000..5b1223171f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4dbcb672ffd77c17daf9afa20f9327a4488617ab differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4dbd3b8e07686c79d5ecefded59cdb20aeeed23e b/fuzz/gnutls_srp_server_fuzzer.in/4dbd3b8e07686c79d5ecefded59cdb20aeeed23e new file mode 100644 index 0000000000..4cbb839f03 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4dbd3b8e07686c79d5ecefded59cdb20aeeed23e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4dcfc366077a2b68126789ed37d3804943ec44fe b/fuzz/gnutls_srp_server_fuzzer.in/4dcfc366077a2b68126789ed37d3804943ec44fe new file mode 100644 index 0000000000..a301e22251 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4dcfc366077a2b68126789ed37d3804943ec44fe differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4de4e75cbbec19fe081450df794ce4a6547eff17 b/fuzz/gnutls_srp_server_fuzzer.in/4de4e75cbbec19fe081450df794ce4a6547eff17 new file mode 100644 index 0000000000..750644c95c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4de4e75cbbec19fe081450df794ce4a6547eff17 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4e0a81a7ca680b397926b34e7b67cc21a59064f5 b/fuzz/gnutls_srp_server_fuzzer.in/4e0a81a7ca680b397926b34e7b67cc21a59064f5 new file mode 100644 index 0000000000..2ef10bc9c4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4e0a81a7ca680b397926b34e7b67cc21a59064f5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4ea2d89303be796278fdf96468ff55eaa8b217b7 b/fuzz/gnutls_srp_server_fuzzer.in/4ea2d89303be796278fdf96468ff55eaa8b217b7 new file mode 100644 index 0000000000..8fb0a6a67a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4ea2d89303be796278fdf96468ff55eaa8b217b7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4f10bea6100f90da9fe6959f5b12b7a694e59648 b/fuzz/gnutls_srp_server_fuzzer.in/4f10bea6100f90da9fe6959f5b12b7a694e59648 new file mode 100644 index 0000000000..356d3bb04a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4f10bea6100f90da9fe6959f5b12b7a694e59648 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4f1b6663bc200c8b5172c1448d05eaeb9986106a b/fuzz/gnutls_srp_server_fuzzer.in/4f1b6663bc200c8b5172c1448d05eaeb9986106a new file mode 100644 index 0000000000..1c89a80cb7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4f1b6663bc200c8b5172c1448d05eaeb9986106a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4faecbc17ecd03ae4cc4db6b89b453013246f206 b/fuzz/gnutls_srp_server_fuzzer.in/4faecbc17ecd03ae4cc4db6b89b453013246f206 new file mode 100644 index 0000000000..1bda090071 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4faecbc17ecd03ae4cc4db6b89b453013246f206 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/4fd315932647247f2ba3fea90b22ba48fe95984f b/fuzz/gnutls_srp_server_fuzzer.in/4fd315932647247f2ba3fea90b22ba48fe95984f new file mode 100644 index 0000000000..d4253c8186 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/4fd315932647247f2ba3fea90b22ba48fe95984f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/506097ea7b24801057ef59947d3958b183008b91 b/fuzz/gnutls_srp_server_fuzzer.in/506097ea7b24801057ef59947d3958b183008b91 new file mode 100644 index 0000000000..0af2e304de Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/506097ea7b24801057ef59947d3958b183008b91 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/51be809ad8d27b2fdd62934f00f8467b1a1cb5be b/fuzz/gnutls_srp_server_fuzzer.in/51be809ad8d27b2fdd62934f00f8467b1a1cb5be new file mode 100644 index 0000000000..2fdff04932 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/51be809ad8d27b2fdd62934f00f8467b1a1cb5be differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/51c9dfd61311dc86a85226d9ffb9ec0b31c132fc b/fuzz/gnutls_srp_server_fuzzer.in/51c9dfd61311dc86a85226d9ffb9ec0b31c132fc new file mode 100644 index 0000000000..40c5003f5f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/51c9dfd61311dc86a85226d9ffb9ec0b31c132fc differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/537aebbc900962f7a3fab44c909a7f4605e5379c b/fuzz/gnutls_srp_server_fuzzer.in/537aebbc900962f7a3fab44c909a7f4605e5379c new file mode 100644 index 0000000000..902d40cd6a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/537aebbc900962f7a3fab44c909a7f4605e5379c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/54287f9153b7f2b7ec05c42c8d21f010e5d0ddf5 b/fuzz/gnutls_srp_server_fuzzer.in/54287f9153b7f2b7ec05c42c8d21f010e5d0ddf5 new file mode 100644 index 0000000000..c3eb3f49f1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/54287f9153b7f2b7ec05c42c8d21f010e5d0ddf5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5441b17c7aefe85a0108906d023afdfc2123e24c b/fuzz/gnutls_srp_server_fuzzer.in/5441b17c7aefe85a0108906d023afdfc2123e24c new file mode 100644 index 0000000000..68cfb570a3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5441b17c7aefe85a0108906d023afdfc2123e24c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5489a3d5781e16dcfc1ddfea1e91b43a55b6831b b/fuzz/gnutls_srp_server_fuzzer.in/5489a3d5781e16dcfc1ddfea1e91b43a55b6831b new file mode 100644 index 0000000000..0734a0ff21 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5489a3d5781e16dcfc1ddfea1e91b43a55b6831b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/54ad09171bb66f85c0597e4edc638773d9ff8154 b/fuzz/gnutls_srp_server_fuzzer.in/54ad09171bb66f85c0597e4edc638773d9ff8154 new file mode 100644 index 0000000000..78b3a2281a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/54ad09171bb66f85c0597e4edc638773d9ff8154 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/55a710223fd304c0c920e1f78808497d06f2ed96 b/fuzz/gnutls_srp_server_fuzzer.in/55a710223fd304c0c920e1f78808497d06f2ed96 new file mode 100644 index 0000000000..9edf83482b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/55a710223fd304c0c920e1f78808497d06f2ed96 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5654e6764601aa240716f1e6a74ac8ca370b63e7 b/fuzz/gnutls_srp_server_fuzzer.in/5654e6764601aa240716f1e6a74ac8ca370b63e7 new file mode 100644 index 0000000000..5ef0df72bc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5654e6764601aa240716f1e6a74ac8ca370b63e7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5668958be4dd0c8d8cdf60f07167ac9150ab51fb b/fuzz/gnutls_srp_server_fuzzer.in/5668958be4dd0c8d8cdf60f07167ac9150ab51fb new file mode 100644 index 0000000000..a0a8ab619a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5668958be4dd0c8d8cdf60f07167ac9150ab51fb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/56a032582f5dfb8bf57323ac57132b3a702b5b79 b/fuzz/gnutls_srp_server_fuzzer.in/56a032582f5dfb8bf57323ac57132b3a702b5b79 new file mode 100644 index 0000000000..97f72a171d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/56a032582f5dfb8bf57323ac57132b3a702b5b79 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/575ad487b3bf1fd0630a07fe04fe4199dc2e6d52 b/fuzz/gnutls_srp_server_fuzzer.in/575ad487b3bf1fd0630a07fe04fe4199dc2e6d52 new file mode 100644 index 0000000000..8568a7a564 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/575ad487b3bf1fd0630a07fe04fe4199dc2e6d52 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/58945d3429136017edef5bf24bbaa9630a17f4e3 b/fuzz/gnutls_srp_server_fuzzer.in/58945d3429136017edef5bf24bbaa9630a17f4e3 new file mode 100644 index 0000000000..4ac909ed34 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/58945d3429136017edef5bf24bbaa9630a17f4e3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/58f0aff0a898576840f5f02f9acd36d8c6428eed b/fuzz/gnutls_srp_server_fuzzer.in/58f0aff0a898576840f5f02f9acd36d8c6428eed new file mode 100644 index 0000000000..a91021800d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/58f0aff0a898576840f5f02f9acd36d8c6428eed differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/59841ecb9a33923b166c99b48e6d37f3856e6f34 b/fuzz/gnutls_srp_server_fuzzer.in/59841ecb9a33923b166c99b48e6d37f3856e6f34 new file mode 100644 index 0000000000..a1150469db Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/59841ecb9a33923b166c99b48e6d37f3856e6f34 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/59f81b93a8dfdcfc448f9e7c51439f7bde103fdd b/fuzz/gnutls_srp_server_fuzzer.in/59f81b93a8dfdcfc448f9e7c51439f7bde103fdd new file mode 100644 index 0000000000..a420edb71f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/59f81b93a8dfdcfc448f9e7c51439f7bde103fdd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5b657417cd22029ad24d289df3069dd2f2e5d96a b/fuzz/gnutls_srp_server_fuzzer.in/5b657417cd22029ad24d289df3069dd2f2e5d96a new file mode 100644 index 0000000000..c42403f709 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5b657417cd22029ad24d289df3069dd2f2e5d96a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5b7cc246a7d8982c93db38737bde4b68a6170e76 b/fuzz/gnutls_srp_server_fuzzer.in/5b7cc246a7d8982c93db38737bde4b68a6170e76 new file mode 100644 index 0000000000..87e06f8f8b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5b7cc246a7d8982c93db38737bde4b68a6170e76 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5bbf78a99278cab64e0c4cf3e0131538b07614f5 b/fuzz/gnutls_srp_server_fuzzer.in/5bbf78a99278cab64e0c4cf3e0131538b07614f5 new file mode 100644 index 0000000000..c3d9f76528 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5bbf78a99278cab64e0c4cf3e0131538b07614f5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5bff3d29a639317391c094f8fb2766ee08690887 b/fuzz/gnutls_srp_server_fuzzer.in/5bff3d29a639317391c094f8fb2766ee08690887 new file mode 100644 index 0000000000..b57cb69d63 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5bff3d29a639317391c094f8fb2766ee08690887 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5c171f429eb8f554c8d6a3565f885e536d870df5 b/fuzz/gnutls_srp_server_fuzzer.in/5c171f429eb8f554c8d6a3565f885e536d870df5 new file mode 100644 index 0000000000..67587f8478 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5c171f429eb8f554c8d6a3565f885e536d870df5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5c2934215514ce7bdcbc315d036dded5d461eac6 b/fuzz/gnutls_srp_server_fuzzer.in/5c2934215514ce7bdcbc315d036dded5d461eac6 new file mode 100644 index 0000000000..8b1010c641 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5c2934215514ce7bdcbc315d036dded5d461eac6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5c2d02789138d55441db73e694f00c0990f4d323 b/fuzz/gnutls_srp_server_fuzzer.in/5c2d02789138d55441db73e694f00c0990f4d323 new file mode 100644 index 0000000000..665bd1f05c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5c2d02789138d55441db73e694f00c0990f4d323 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5cd2ea506532a3b40f7ab352d3c9bf96e1b6a9da b/fuzz/gnutls_srp_server_fuzzer.in/5cd2ea506532a3b40f7ab352d3c9bf96e1b6a9da new file mode 100644 index 0000000000..8d2567b61f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5cd2ea506532a3b40f7ab352d3c9bf96e1b6a9da differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5cec73abbc04ccd0e29848b2112320f186c56bc6 b/fuzz/gnutls_srp_server_fuzzer.in/5cec73abbc04ccd0e29848b2112320f186c56bc6 new file mode 100644 index 0000000000..80826c1c10 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5cec73abbc04ccd0e29848b2112320f186c56bc6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5d104ebf143f03100035506b65ce8b9372cf4ff8 b/fuzz/gnutls_srp_server_fuzzer.in/5d104ebf143f03100035506b65ce8b9372cf4ff8 new file mode 100644 index 0000000000..dfa8b56eee Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5d104ebf143f03100035506b65ce8b9372cf4ff8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5d12ae7831772a8847622dd816358cd4d5e37223 b/fuzz/gnutls_srp_server_fuzzer.in/5d12ae7831772a8847622dd816358cd4d5e37223 new file mode 100644 index 0000000000..4e887e164c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5d12ae7831772a8847622dd816358cd4d5e37223 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5d93b9df199505e962ad0807d382669e8d1e00a7 b/fuzz/gnutls_srp_server_fuzzer.in/5d93b9df199505e962ad0807d382669e8d1e00a7 new file mode 100644 index 0000000000..3ba972bfe0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5d93b9df199505e962ad0807d382669e8d1e00a7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5e0b90b24785bbdd0991e545f0c067b63274e17f b/fuzz/gnutls_srp_server_fuzzer.in/5e0b90b24785bbdd0991e545f0c067b63274e17f new file mode 100644 index 0000000000..89315ee7cd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5e0b90b24785bbdd0991e545f0c067b63274e17f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5e3a03f2708897c6274bbd021a00604a25295b1f b/fuzz/gnutls_srp_server_fuzzer.in/5e3a03f2708897c6274bbd021a00604a25295b1f new file mode 100644 index 0000000000..41dce90ab0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5e3a03f2708897c6274bbd021a00604a25295b1f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5e45d17c85beca7209427c64971ecb11a386c55f b/fuzz/gnutls_srp_server_fuzzer.in/5e45d17c85beca7209427c64971ecb11a386c55f new file mode 100644 index 0000000000..36f75c4c63 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5e45d17c85beca7209427c64971ecb11a386c55f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5e63ccffb8a0873e6644af91c5de3f462e1f1860 b/fuzz/gnutls_srp_server_fuzzer.in/5e63ccffb8a0873e6644af91c5de3f462e1f1860 new file mode 100644 index 0000000000..8dab07bcc8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5e63ccffb8a0873e6644af91c5de3f462e1f1860 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5ed1b2c83f8287403e8bbbdb8bc98fed47a4e179 b/fuzz/gnutls_srp_server_fuzzer.in/5ed1b2c83f8287403e8bbbdb8bc98fed47a4e179 new file mode 100644 index 0000000000..f5a315a432 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5ed1b2c83f8287403e8bbbdb8bc98fed47a4e179 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5f1fe7d2c785f52edf6e988d5e7a19450aa52fba b/fuzz/gnutls_srp_server_fuzzer.in/5f1fe7d2c785f52edf6e988d5e7a19450aa52fba new file mode 100644 index 0000000000..e4a76e955b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5f1fe7d2c785f52edf6e988d5e7a19450aa52fba differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/5fd221945e2c8446781490697d7658fc900d5c03 b/fuzz/gnutls_srp_server_fuzzer.in/5fd221945e2c8446781490697d7658fc900d5c03 new file mode 100644 index 0000000000..5969ab345b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/5fd221945e2c8446781490697d7658fc900d5c03 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/603e03fc9d223717d87bf06141423ee31201791d b/fuzz/gnutls_srp_server_fuzzer.in/603e03fc9d223717d87bf06141423ee31201791d new file mode 100644 index 0000000000..0bcc205691 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/603e03fc9d223717d87bf06141423ee31201791d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/606b30609bd2a63ccf49a449ae8a643f6ac28140 b/fuzz/gnutls_srp_server_fuzzer.in/606b30609bd2a63ccf49a449ae8a643f6ac28140 new file mode 100644 index 0000000000..b4a01b84ca Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/606b30609bd2a63ccf49a449ae8a643f6ac28140 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/609813b6a6078b047b782c8f8bc7fe5107dd39e3 b/fuzz/gnutls_srp_server_fuzzer.in/609813b6a6078b047b782c8f8bc7fe5107dd39e3 new file mode 100644 index 0000000000..877b25a606 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/609813b6a6078b047b782c8f8bc7fe5107dd39e3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/60eb649e5d700ac53f5997984ee7f441fbba47a5 b/fuzz/gnutls_srp_server_fuzzer.in/60eb649e5d700ac53f5997984ee7f441fbba47a5 new file mode 100644 index 0000000000..7abbba8206 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/60eb649e5d700ac53f5997984ee7f441fbba47a5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/60fd031de5ec103b2276b915a2ad5c607e9c073e b/fuzz/gnutls_srp_server_fuzzer.in/60fd031de5ec103b2276b915a2ad5c607e9c073e new file mode 100644 index 0000000000..8315ccb854 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/60fd031de5ec103b2276b915a2ad5c607e9c073e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6125408297f621ee73564421f57f424bc0d87750 b/fuzz/gnutls_srp_server_fuzzer.in/6125408297f621ee73564421f57f424bc0d87750 new file mode 100644 index 0000000000..1ba803d4d9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6125408297f621ee73564421f57f424bc0d87750 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/617bd203dd89ad9b754169f7d0e9c78d05559d96 b/fuzz/gnutls_srp_server_fuzzer.in/617bd203dd89ad9b754169f7d0e9c78d05559d96 new file mode 100644 index 0000000000..925757398e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/617bd203dd89ad9b754169f7d0e9c78d05559d96 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/61b3d6ae0f42df31c9cc57dd7839993a58f4b344 b/fuzz/gnutls_srp_server_fuzzer.in/61b3d6ae0f42df31c9cc57dd7839993a58f4b344 new file mode 100644 index 0000000000..c1020f239b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/61b3d6ae0f42df31c9cc57dd7839993a58f4b344 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/62153edf2f36681fef321a73ec28fb1f7e6b2966 b/fuzz/gnutls_srp_server_fuzzer.in/62153edf2f36681fef321a73ec28fb1f7e6b2966 new file mode 100644 index 0000000000..0a6793ec0f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/62153edf2f36681fef321a73ec28fb1f7e6b2966 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/63ed510f47cc8877c38cc7f98f08fb68f630b759 b/fuzz/gnutls_srp_server_fuzzer.in/63ed510f47cc8877c38cc7f98f08fb68f630b759 new file mode 100644 index 0000000000..a0db46d36e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/63ed510f47cc8877c38cc7f98f08fb68f630b759 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6455b8b64c02ebc34b6167c096a660088fc1ec24 b/fuzz/gnutls_srp_server_fuzzer.in/6455b8b64c02ebc34b6167c096a660088fc1ec24 new file mode 100644 index 0000000000..4e7454bab8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6455b8b64c02ebc34b6167c096a660088fc1ec24 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6482b863e2759174d5d07f079722113447951433 b/fuzz/gnutls_srp_server_fuzzer.in/6482b863e2759174d5d07f079722113447951433 new file mode 100644 index 0000000000..a5bcdeb259 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6482b863e2759174d5d07f079722113447951433 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/64c45f5746bc642fe072f0cd153bb1d72053e6d3 b/fuzz/gnutls_srp_server_fuzzer.in/64c45f5746bc642fe072f0cd153bb1d72053e6d3 new file mode 100644 index 0000000000..d772937656 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/64c45f5746bc642fe072f0cd153bb1d72053e6d3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/651ecdc2f3d27b04ebe593faf2dd19d8b1445811 b/fuzz/gnutls_srp_server_fuzzer.in/651ecdc2f3d27b04ebe593faf2dd19d8b1445811 new file mode 100644 index 0000000000..02724a477c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/651ecdc2f3d27b04ebe593faf2dd19d8b1445811 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/657485f4317feb2f5e2c454652090c312c3f2a63 b/fuzz/gnutls_srp_server_fuzzer.in/657485f4317feb2f5e2c454652090c312c3f2a63 new file mode 100644 index 0000000000..ce958df923 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/657485f4317feb2f5e2c454652090c312c3f2a63 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/65871c455eeaa47881532356c77def9e52ea7666 b/fuzz/gnutls_srp_server_fuzzer.in/65871c455eeaa47881532356c77def9e52ea7666 new file mode 100644 index 0000000000..4649d48ec3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/65871c455eeaa47881532356c77def9e52ea7666 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6594d5b8c5d3e9991815fe8faadcc96db876e77a b/fuzz/gnutls_srp_server_fuzzer.in/6594d5b8c5d3e9991815fe8faadcc96db876e77a new file mode 100644 index 0000000000..2b7ba77cf3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6594d5b8c5d3e9991815fe8faadcc96db876e77a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/66500fbd5d4bf2df510af2df4a336e0fb05424fe b/fuzz/gnutls_srp_server_fuzzer.in/66500fbd5d4bf2df510af2df4a336e0fb05424fe new file mode 100644 index 0000000000..a72fcab2b1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/66500fbd5d4bf2df510af2df4a336e0fb05424fe differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/66dc4b2b4b416a3457ca7c4c50a5c26f747a3543 b/fuzz/gnutls_srp_server_fuzzer.in/66dc4b2b4b416a3457ca7c4c50a5c26f747a3543 new file mode 100644 index 0000000000..72ea1a7d0b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/66dc4b2b4b416a3457ca7c4c50a5c26f747a3543 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/673e05639f1c6ab51c7505e8ee81bae2cd4550a8 b/fuzz/gnutls_srp_server_fuzzer.in/673e05639f1c6ab51c7505e8ee81bae2cd4550a8 new file mode 100644 index 0000000000..fded8f11c4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/673e05639f1c6ab51c7505e8ee81bae2cd4550a8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/67584032086890aa0502d9c818954a26b34c2f98 b/fuzz/gnutls_srp_server_fuzzer.in/67584032086890aa0502d9c818954a26b34c2f98 new file mode 100644 index 0000000000..5d03d2261f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/67584032086890aa0502d9c818954a26b34c2f98 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/67adc480a3fd8a90a039c396ec74ca5867c4ab84 b/fuzz/gnutls_srp_server_fuzzer.in/67adc480a3fd8a90a039c396ec74ca5867c4ab84 new file mode 100644 index 0000000000..f009b9a902 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/67adc480a3fd8a90a039c396ec74ca5867c4ab84 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6807797176ffef6a1208d87882e2d5a07240f2bc b/fuzz/gnutls_srp_server_fuzzer.in/6807797176ffef6a1208d87882e2d5a07240f2bc new file mode 100644 index 0000000000..efa99685e5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6807797176ffef6a1208d87882e2d5a07240f2bc differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/681c1936cb53da39c922499f37c17f732dcc803a b/fuzz/gnutls_srp_server_fuzzer.in/681c1936cb53da39c922499f37c17f732dcc803a new file mode 100644 index 0000000000..7e76b6cf0c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/681c1936cb53da39c922499f37c17f732dcc803a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/683845a173776e018483218e7fa6355c5437aca1 b/fuzz/gnutls_srp_server_fuzzer.in/683845a173776e018483218e7fa6355c5437aca1 new file mode 100644 index 0000000000..8374dc64bd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/683845a173776e018483218e7fa6355c5437aca1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/68e3627946e5576ec05ea8e87b5856b6bb8854ce b/fuzz/gnutls_srp_server_fuzzer.in/68e3627946e5576ec05ea8e87b5856b6bb8854ce new file mode 100644 index 0000000000..92240222a1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/68e3627946e5576ec05ea8e87b5856b6bb8854ce differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6924bb0ce3de27ad6cff90b5fabfd5ab6be48c63 b/fuzz/gnutls_srp_server_fuzzer.in/6924bb0ce3de27ad6cff90b5fabfd5ab6be48c63 new file mode 100644 index 0000000000..e518b7b2ca Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6924bb0ce3de27ad6cff90b5fabfd5ab6be48c63 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/69ed410d92d464e7805a460f3c32b0e751313d52 b/fuzz/gnutls_srp_server_fuzzer.in/69ed410d92d464e7805a460f3c32b0e751313d52 new file mode 100644 index 0000000000..574cee87a4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/69ed410d92d464e7805a460f3c32b0e751313d52 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6a10b296fa1027039812661bc5d5c009b855fe99 b/fuzz/gnutls_srp_server_fuzzer.in/6a10b296fa1027039812661bc5d5c009b855fe99 new file mode 100644 index 0000000000..5fc8bfacc4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6a10b296fa1027039812661bc5d5c009b855fe99 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6ab7cbe5c1071a8da1bf519f19c7bd60457cf22a b/fuzz/gnutls_srp_server_fuzzer.in/6ab7cbe5c1071a8da1bf519f19c7bd60457cf22a new file mode 100644 index 0000000000..995a774002 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6ab7cbe5c1071a8da1bf519f19c7bd60457cf22a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6abd102e2ae07b399f176a3eb5b8026e1673dcd0 b/fuzz/gnutls_srp_server_fuzzer.in/6abd102e2ae07b399f176a3eb5b8026e1673dcd0 new file mode 100644 index 0000000000..7bf006c32d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6abd102e2ae07b399f176a3eb5b8026e1673dcd0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6b125ff4287a45b41cd133f5553a811def9d9ead b/fuzz/gnutls_srp_server_fuzzer.in/6b125ff4287a45b41cd133f5553a811def9d9ead new file mode 100644 index 0000000000..1ef833207d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6b125ff4287a45b41cd133f5553a811def9d9ead differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6b15406844c43ddad83f347aba2edaf41d14e37d b/fuzz/gnutls_srp_server_fuzzer.in/6b15406844c43ddad83f347aba2edaf41d14e37d new file mode 100644 index 0000000000..5ba45bb917 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6b15406844c43ddad83f347aba2edaf41d14e37d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6bb248be39d3bec7a6dada656e640b71bbdb9f3c b/fuzz/gnutls_srp_server_fuzzer.in/6bb248be39d3bec7a6dada656e640b71bbdb9f3c new file mode 100644 index 0000000000..175696b843 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6bb248be39d3bec7a6dada656e640b71bbdb9f3c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6d15bc520174e69044deff444e6b02722f1a7ba5 b/fuzz/gnutls_srp_server_fuzzer.in/6d15bc520174e69044deff444e6b02722f1a7ba5 new file mode 100644 index 0000000000..a74d6caa46 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6d15bc520174e69044deff444e6b02722f1a7ba5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6db57a95acb0c6891b581504d0eb822fef3f8c60 b/fuzz/gnutls_srp_server_fuzzer.in/6db57a95acb0c6891b581504d0eb822fef3f8c60 new file mode 100644 index 0000000000..b3f9bf4b6e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6db57a95acb0c6891b581504d0eb822fef3f8c60 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6e2dfe2d2ae8b320fb815a888482ce7441ca9846 b/fuzz/gnutls_srp_server_fuzzer.in/6e2dfe2d2ae8b320fb815a888482ce7441ca9846 new file mode 100644 index 0000000000..53400cc169 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6e2dfe2d2ae8b320fb815a888482ce7441ca9846 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6e5fff66361547461fe0a71b805eefb1f763a3c7 b/fuzz/gnutls_srp_server_fuzzer.in/6e5fff66361547461fe0a71b805eefb1f763a3c7 new file mode 100644 index 0000000000..031f3fb35e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6e5fff66361547461fe0a71b805eefb1f763a3c7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6f108168939060b022c8d991986170d0a259d016 b/fuzz/gnutls_srp_server_fuzzer.in/6f108168939060b022c8d991986170d0a259d016 new file mode 100644 index 0000000000..c2c058e7e5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6f108168939060b022c8d991986170d0a259d016 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6f5b8c541859ebda4215774f36dab79f397fd059 b/fuzz/gnutls_srp_server_fuzzer.in/6f5b8c541859ebda4215774f36dab79f397fd059 new file mode 100644 index 0000000000..ab658a74b8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6f5b8c541859ebda4215774f36dab79f397fd059 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6f72cef5b6970d3c58ef2d9463fcef0e0ebc82d2 b/fuzz/gnutls_srp_server_fuzzer.in/6f72cef5b6970d3c58ef2d9463fcef0e0ebc82d2 new file mode 100644 index 0000000000..9aca37a462 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6f72cef5b6970d3c58ef2d9463fcef0e0ebc82d2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6fb36cb78087abccf2524e1d99559b08486a19bf b/fuzz/gnutls_srp_server_fuzzer.in/6fb36cb78087abccf2524e1d99559b08486a19bf new file mode 100644 index 0000000000..22f4ebf086 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6fb36cb78087abccf2524e1d99559b08486a19bf differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6fbe21533c34d660cb117f093d2b268baadcffef b/fuzz/gnutls_srp_server_fuzzer.in/6fbe21533c34d660cb117f093d2b268baadcffef new file mode 100644 index 0000000000..d1d1f70d9f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6fbe21533c34d660cb117f093d2b268baadcffef differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/6fe3e4fb1d0e4fc38037f718ee871201522237cf b/fuzz/gnutls_srp_server_fuzzer.in/6fe3e4fb1d0e4fc38037f718ee871201522237cf new file mode 100644 index 0000000000..9f9e0da687 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/6fe3e4fb1d0e4fc38037f718ee871201522237cf differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/701d3b598b92f1043c2733a04f54ef83cb86175b b/fuzz/gnutls_srp_server_fuzzer.in/701d3b598b92f1043c2733a04f54ef83cb86175b new file mode 100644 index 0000000000..f58b8e96c2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/701d3b598b92f1043c2733a04f54ef83cb86175b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7040123efffa074d5096cafd010b7a601453d850 b/fuzz/gnutls_srp_server_fuzzer.in/7040123efffa074d5096cafd010b7a601453d850 new file mode 100644 index 0000000000..c03b893371 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7040123efffa074d5096cafd010b7a601453d850 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/704080df27310f8757c1461d2b8a845d43e54433 b/fuzz/gnutls_srp_server_fuzzer.in/704080df27310f8757c1461d2b8a845d43e54433 new file mode 100644 index 0000000000..77564d3a54 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/704080df27310f8757c1461d2b8a845d43e54433 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/706755d11d5886b5b2593fa244935ac5d0539ba7 b/fuzz/gnutls_srp_server_fuzzer.in/706755d11d5886b5b2593fa244935ac5d0539ba7 new file mode 100644 index 0000000000..284c091944 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/706755d11d5886b5b2593fa244935ac5d0539ba7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/70ac8f531ec4211485aacf014ad167e86b418d40 b/fuzz/gnutls_srp_server_fuzzer.in/70ac8f531ec4211485aacf014ad167e86b418d40 new file mode 100644 index 0000000000..e142a97069 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/70ac8f531ec4211485aacf014ad167e86b418d40 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/70dd650bf466e5e55ae5d49f5a2593c70b16ae33 b/fuzz/gnutls_srp_server_fuzzer.in/70dd650bf466e5e55ae5d49f5a2593c70b16ae33 new file mode 100644 index 0000000000..a5e5709752 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/70dd650bf466e5e55ae5d49f5a2593c70b16ae33 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/713a551ece9fa70e74a14e5d868607e2dcfddc03 b/fuzz/gnutls_srp_server_fuzzer.in/713a551ece9fa70e74a14e5d868607e2dcfddc03 new file mode 100644 index 0000000000..b9858f588f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/713a551ece9fa70e74a14e5d868607e2dcfddc03 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7140ee14df5fdefbd6ad5d4a8cad2922390fbc4e b/fuzz/gnutls_srp_server_fuzzer.in/7140ee14df5fdefbd6ad5d4a8cad2922390fbc4e new file mode 100644 index 0000000000..7422bbe324 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7140ee14df5fdefbd6ad5d4a8cad2922390fbc4e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/71b1d5fe3be220a8e3cb0d280b5353025a31e02c b/fuzz/gnutls_srp_server_fuzzer.in/71b1d5fe3be220a8e3cb0d280b5353025a31e02c new file mode 100644 index 0000000000..86d69d509d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/71b1d5fe3be220a8e3cb0d280b5353025a31e02c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/723c82c8a62d79b9873d96b424636815ffeba5dd b/fuzz/gnutls_srp_server_fuzzer.in/723c82c8a62d79b9873d96b424636815ffeba5dd new file mode 100644 index 0000000000..4e2d11e73f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/723c82c8a62d79b9873d96b424636815ffeba5dd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/72448b03b57f5682351c7eaeec62e3533e0b57cf b/fuzz/gnutls_srp_server_fuzzer.in/72448b03b57f5682351c7eaeec62e3533e0b57cf new file mode 100644 index 0000000000..a5093c4808 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/72448b03b57f5682351c7eaeec62e3533e0b57cf differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/725448e4d357395706f4c23eb2361605f45228d0 b/fuzz/gnutls_srp_server_fuzzer.in/725448e4d357395706f4c23eb2361605f45228d0 new file mode 100644 index 0000000000..0ebbb38b03 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/725448e4d357395706f4c23eb2361605f45228d0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/727c6877a2fd0735dcf94bf95e7701ce9d10a0f4 b/fuzz/gnutls_srp_server_fuzzer.in/727c6877a2fd0735dcf94bf95e7701ce9d10a0f4 new file mode 100644 index 0000000000..2ba26b3f92 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/727c6877a2fd0735dcf94bf95e7701ce9d10a0f4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7287ffc6c5f0d1f6793eb7f50773aa82a4efb286 b/fuzz/gnutls_srp_server_fuzzer.in/7287ffc6c5f0d1f6793eb7f50773aa82a4efb286 new file mode 100644 index 0000000000..63b0bc2d8e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7287ffc6c5f0d1f6793eb7f50773aa82a4efb286 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/73063b5adc5f4d9c791bba25f4b051d37c3175b8 b/fuzz/gnutls_srp_server_fuzzer.in/73063b5adc5f4d9c791bba25f4b051d37c3175b8 new file mode 100644 index 0000000000..8117381708 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/73063b5adc5f4d9c791bba25f4b051d37c3175b8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/73f6a5393b993753138d4d416936948eeaa04f1e b/fuzz/gnutls_srp_server_fuzzer.in/73f6a5393b993753138d4d416936948eeaa04f1e new file mode 100644 index 0000000000..cb757a9f5a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/73f6a5393b993753138d4d416936948eeaa04f1e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7447d38d17104e5d5fa93aa74f6a55d9a4885307 b/fuzz/gnutls_srp_server_fuzzer.in/7447d38d17104e5d5fa93aa74f6a55d9a4885307 new file mode 100644 index 0000000000..24ed625093 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7447d38d17104e5d5fa93aa74f6a55d9a4885307 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/74538ff8738003e584362dbc0eb3aea8cb69a3bc b/fuzz/gnutls_srp_server_fuzzer.in/74538ff8738003e584362dbc0eb3aea8cb69a3bc new file mode 100644 index 0000000000..45d33ac8d7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/74538ff8738003e584362dbc0eb3aea8cb69a3bc differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7557a89bb8903e78e6b3a053b835fdbcea6d9fb7 b/fuzz/gnutls_srp_server_fuzzer.in/7557a89bb8903e78e6b3a053b835fdbcea6d9fb7 new file mode 100644 index 0000000000..dc5c9a49f1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7557a89bb8903e78e6b3a053b835fdbcea6d9fb7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/755a516982e8e822d98a06157a0350cfdb3c4eb4 b/fuzz/gnutls_srp_server_fuzzer.in/755a516982e8e822d98a06157a0350cfdb3c4eb4 new file mode 100644 index 0000000000..5dc4061b12 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/755a516982e8e822d98a06157a0350cfdb3c4eb4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/75830cf93ff80dc04d5d009732a527d4c3c6eec0 b/fuzz/gnutls_srp_server_fuzzer.in/75830cf93ff80dc04d5d009732a527d4c3c6eec0 new file mode 100644 index 0000000000..951197cbb4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/75830cf93ff80dc04d5d009732a527d4c3c6eec0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/75a8be26c095538a8b38ca87e65b594e04a81136 b/fuzz/gnutls_srp_server_fuzzer.in/75a8be26c095538a8b38ca87e65b594e04a81136 new file mode 100644 index 0000000000..b89ca5ac5f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/75a8be26c095538a8b38ca87e65b594e04a81136 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/75c04e535883ad4765e0468fc895e86060e7b74a b/fuzz/gnutls_srp_server_fuzzer.in/75c04e535883ad4765e0468fc895e86060e7b74a new file mode 100644 index 0000000000..076785587e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/75c04e535883ad4765e0468fc895e86060e7b74a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/771988f491bdc79f0cef7d33df6db87149cf3dcd b/fuzz/gnutls_srp_server_fuzzer.in/771988f491bdc79f0cef7d33df6db87149cf3dcd new file mode 100644 index 0000000000..e29f3e8539 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/771988f491bdc79f0cef7d33df6db87149cf3dcd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/77274d5336ed12694190c96e1523e4188a986d02 b/fuzz/gnutls_srp_server_fuzzer.in/77274d5336ed12694190c96e1523e4188a986d02 new file mode 100644 index 0000000000..27e41a38b6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/77274d5336ed12694190c96e1523e4188a986d02 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/776a735a11e8749ae69b5322aa0d30fd6612d4a3 b/fuzz/gnutls_srp_server_fuzzer.in/776a735a11e8749ae69b5322aa0d30fd6612d4a3 new file mode 100644 index 0000000000..47db6a4b59 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/776a735a11e8749ae69b5322aa0d30fd6612d4a3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/77c038879fde99e1acc4c3d5609483abe67127fd b/fuzz/gnutls_srp_server_fuzzer.in/77c038879fde99e1acc4c3d5609483abe67127fd new file mode 100644 index 0000000000..822b747b6d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/77c038879fde99e1acc4c3d5609483abe67127fd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7870915fc5c65ca2628912bb8d1b24a86023d692 b/fuzz/gnutls_srp_server_fuzzer.in/7870915fc5c65ca2628912bb8d1b24a86023d692 new file mode 100644 index 0000000000..5f483b142b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7870915fc5c65ca2628912bb8d1b24a86023d692 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/787a1b0073148ac7df358c149560ec71e2353cc8 b/fuzz/gnutls_srp_server_fuzzer.in/787a1b0073148ac7df358c149560ec71e2353cc8 new file mode 100644 index 0000000000..4bd4328c66 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/787a1b0073148ac7df358c149560ec71e2353cc8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/78c6dd913b30c1c176661368a6dc0ee228d33eb6 b/fuzz/gnutls_srp_server_fuzzer.in/78c6dd913b30c1c176661368a6dc0ee228d33eb6 new file mode 100644 index 0000000000..2d9b195494 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/78c6dd913b30c1c176661368a6dc0ee228d33eb6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7ad329d46719e4cb1436d9cec096676c7992a423 b/fuzz/gnutls_srp_server_fuzzer.in/7ad329d46719e4cb1436d9cec096676c7992a423 new file mode 100644 index 0000000000..5073222753 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7ad329d46719e4cb1436d9cec096676c7992a423 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7b18d505a60b71d4aca7c5bb8a53ebac52c08bd1 b/fuzz/gnutls_srp_server_fuzzer.in/7b18d505a60b71d4aca7c5bb8a53ebac52c08bd1 new file mode 100644 index 0000000000..bb13174a76 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7b18d505a60b71d4aca7c5bb8a53ebac52c08bd1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7b92f4cf9cdc02d9b1002bcee46d374e89fdece6 b/fuzz/gnutls_srp_server_fuzzer.in/7b92f4cf9cdc02d9b1002bcee46d374e89fdece6 new file mode 100644 index 0000000000..663a15a58b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7b92f4cf9cdc02d9b1002bcee46d374e89fdece6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7b9e2322a884a9cba2be8ec79d4b967d5baf7c8e b/fuzz/gnutls_srp_server_fuzzer.in/7b9e2322a884a9cba2be8ec79d4b967d5baf7c8e new file mode 100644 index 0000000000..99c2316e0f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7b9e2322a884a9cba2be8ec79d4b967d5baf7c8e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7bf592179971a9ec0a3570b33dcff7aea7707285 b/fuzz/gnutls_srp_server_fuzzer.in/7bf592179971a9ec0a3570b33dcff7aea7707285 new file mode 100644 index 0000000000..7e43224c94 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7bf592179971a9ec0a3570b33dcff7aea7707285 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7c2b985182ccb51e359f8ed67505d6c9b80da1bb b/fuzz/gnutls_srp_server_fuzzer.in/7c2b985182ccb51e359f8ed67505d6c9b80da1bb new file mode 100644 index 0000000000..37c6805760 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7c2b985182ccb51e359f8ed67505d6c9b80da1bb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7c5d8f81191508b05f3de39e7ac98df2167d7b46 b/fuzz/gnutls_srp_server_fuzzer.in/7c5d8f81191508b05f3de39e7ac98df2167d7b46 new file mode 100644 index 0000000000..7c7a8b9af7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7c5d8f81191508b05f3de39e7ac98df2167d7b46 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7c6d5b9a261f67fd72a14c0dddeee4ae4b00814f b/fuzz/gnutls_srp_server_fuzzer.in/7c6d5b9a261f67fd72a14c0dddeee4ae4b00814f new file mode 100644 index 0000000000..2e2e7ec903 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7c6d5b9a261f67fd72a14c0dddeee4ae4b00814f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7c6edbeb9adc6678f6861ad73b9998a0d9274e8b b/fuzz/gnutls_srp_server_fuzzer.in/7c6edbeb9adc6678f6861ad73b9998a0d9274e8b new file mode 100644 index 0000000000..9f20314be2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7c6edbeb9adc6678f6861ad73b9998a0d9274e8b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7cc5b4a9d6f6c3296798cde4a3629d137d65a3dc b/fuzz/gnutls_srp_server_fuzzer.in/7cc5b4a9d6f6c3296798cde4a3629d137d65a3dc new file mode 100644 index 0000000000..cd034d0c9e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7cc5b4a9d6f6c3296798cde4a3629d137d65a3dc differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7cd8ccbcd50616d53f46396549abc36b04a7b7d7 b/fuzz/gnutls_srp_server_fuzzer.in/7cd8ccbcd50616d53f46396549abc36b04a7b7d7 new file mode 100644 index 0000000000..634e538d0b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7cd8ccbcd50616d53f46396549abc36b04a7b7d7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7cfe3528ad6fcc549151d15b92ee0d271184170a b/fuzz/gnutls_srp_server_fuzzer.in/7cfe3528ad6fcc549151d15b92ee0d271184170a new file mode 100644 index 0000000000..3d8da8db4e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7cfe3528ad6fcc549151d15b92ee0d271184170a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7d1054f4966ec8d81390a785167e5167f260f97a b/fuzz/gnutls_srp_server_fuzzer.in/7d1054f4966ec8d81390a785167e5167f260f97a new file mode 100644 index 0000000000..5e6aa8576a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7d1054f4966ec8d81390a785167e5167f260f97a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7d24c21b661a1f91d3275fd069ab3b0300c0bf7c b/fuzz/gnutls_srp_server_fuzzer.in/7d24c21b661a1f91d3275fd069ab3b0300c0bf7c new file mode 100644 index 0000000000..6a35b2e0da Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7d24c21b661a1f91d3275fd069ab3b0300c0bf7c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7d6692b68e36a5e66d1cdbad01a6b8b9eba516a1 b/fuzz/gnutls_srp_server_fuzzer.in/7d6692b68e36a5e66d1cdbad01a6b8b9eba516a1 new file mode 100644 index 0000000000..61ae9a1e81 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7d6692b68e36a5e66d1cdbad01a6b8b9eba516a1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7d814e02f0e39dea223948e19404fddb034d58d0 b/fuzz/gnutls_srp_server_fuzzer.in/7d814e02f0e39dea223948e19404fddb034d58d0 new file mode 100644 index 0000000000..1441dcf43a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7d814e02f0e39dea223948e19404fddb034d58d0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7d8650a84245a52fe7cbc0e8dc653d0704b47c69 b/fuzz/gnutls_srp_server_fuzzer.in/7d8650a84245a52fe7cbc0e8dc653d0704b47c69 new file mode 100644 index 0000000000..0e67ba07c8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7d8650a84245a52fe7cbc0e8dc653d0704b47c69 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7de9b4e0a362ea5dcc6bd773ad9008aab5de9061 b/fuzz/gnutls_srp_server_fuzzer.in/7de9b4e0a362ea5dcc6bd773ad9008aab5de9061 new file mode 100644 index 0000000000..50e864e8e3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7de9b4e0a362ea5dcc6bd773ad9008aab5de9061 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7e03b800b424da98039de401f7345ce385ba88d6 b/fuzz/gnutls_srp_server_fuzzer.in/7e03b800b424da98039de401f7345ce385ba88d6 new file mode 100644 index 0000000000..56f447d50c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7e03b800b424da98039de401f7345ce385ba88d6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7e61856ee575ba7262aea01cf2f7a27d3e52dae5 b/fuzz/gnutls_srp_server_fuzzer.in/7e61856ee575ba7262aea01cf2f7a27d3e52dae5 new file mode 100644 index 0000000000..aa0d63a139 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7e61856ee575ba7262aea01cf2f7a27d3e52dae5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7e628c3379ea9378cb88c0a860518aaffb806202 b/fuzz/gnutls_srp_server_fuzzer.in/7e628c3379ea9378cb88c0a860518aaffb806202 new file mode 100644 index 0000000000..4d72d8c0f8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7e628c3379ea9378cb88c0a860518aaffb806202 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7ed7c9d9a4c4871c31a2ea14efcfcfac82ba95a6 b/fuzz/gnutls_srp_server_fuzzer.in/7ed7c9d9a4c4871c31a2ea14efcfcfac82ba95a6 new file mode 100644 index 0000000000..bc1bc75be2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7ed7c9d9a4c4871c31a2ea14efcfcfac82ba95a6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7ede553ba4b49e1b0175e0aec341552615996789 b/fuzz/gnutls_srp_server_fuzzer.in/7ede553ba4b49e1b0175e0aec341552615996789 new file mode 100644 index 0000000000..d780c44f8a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7ede553ba4b49e1b0175e0aec341552615996789 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7f57f17b5d0cf90e00b952e484b02ef0d64cfae4 b/fuzz/gnutls_srp_server_fuzzer.in/7f57f17b5d0cf90e00b952e484b02ef0d64cfae4 new file mode 100644 index 0000000000..ad0688968b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7f57f17b5d0cf90e00b952e484b02ef0d64cfae4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/7fbfed705a66c35db708a0f62ec03dec8d876e01 b/fuzz/gnutls_srp_server_fuzzer.in/7fbfed705a66c35db708a0f62ec03dec8d876e01 new file mode 100644 index 0000000000..58cc931a68 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/7fbfed705a66c35db708a0f62ec03dec8d876e01 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/80807d2ea40950eba2714b32180655119388f6ce b/fuzz/gnutls_srp_server_fuzzer.in/80807d2ea40950eba2714b32180655119388f6ce new file mode 100644 index 0000000000..0154235bee Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/80807d2ea40950eba2714b32180655119388f6ce differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/81235b019913ec6af5f5351c086bdebd7bab2029 b/fuzz/gnutls_srp_server_fuzzer.in/81235b019913ec6af5f5351c086bdebd7bab2029 new file mode 100644 index 0000000000..885e15850f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/81235b019913ec6af5f5351c086bdebd7bab2029 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/812fddce50794c968f507703c12c6af7327c2693 b/fuzz/gnutls_srp_server_fuzzer.in/812fddce50794c968f507703c12c6af7327c2693 new file mode 100644 index 0000000000..4e8a8f5ce2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/812fddce50794c968f507703c12c6af7327c2693 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8180036b50ed008f254db251f60fba01f67814bf b/fuzz/gnutls_srp_server_fuzzer.in/8180036b50ed008f254db251f60fba01f67814bf new file mode 100644 index 0000000000..c7a130733d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8180036b50ed008f254db251f60fba01f67814bf differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8223229ccd403494f9346163c0778d8dacbca8e2 b/fuzz/gnutls_srp_server_fuzzer.in/8223229ccd403494f9346163c0778d8dacbca8e2 new file mode 100644 index 0000000000..8ea927e28d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8223229ccd403494f9346163c0778d8dacbca8e2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/826b382c936cd69b1dba3a9e15efbaa9b0b59c78 b/fuzz/gnutls_srp_server_fuzzer.in/826b382c936cd69b1dba3a9e15efbaa9b0b59c78 new file mode 100644 index 0000000000..e458c4b53f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/826b382c936cd69b1dba3a9e15efbaa9b0b59c78 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8375719cf43860f7c8cea90df86a30109c217172 b/fuzz/gnutls_srp_server_fuzzer.in/8375719cf43860f7c8cea90df86a30109c217172 new file mode 100644 index 0000000000..ad6653ddc9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8375719cf43860f7c8cea90df86a30109c217172 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/837e6c71439c904ea0bcf88e3bf49a800515e9f7 b/fuzz/gnutls_srp_server_fuzzer.in/837e6c71439c904ea0bcf88e3bf49a800515e9f7 new file mode 100644 index 0000000000..9abf94b11c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/837e6c71439c904ea0bcf88e3bf49a800515e9f7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8384d6719508fbee5e2459c7761ec194f381cc54 b/fuzz/gnutls_srp_server_fuzzer.in/8384d6719508fbee5e2459c7761ec194f381cc54 new file mode 100644 index 0000000000..4f521f03d1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8384d6719508fbee5e2459c7761ec194f381cc54 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/838c84a6709118a874b924d300797a11088ff7a6 b/fuzz/gnutls_srp_server_fuzzer.in/838c84a6709118a874b924d300797a11088ff7a6 new file mode 100644 index 0000000000..1ce50dced9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/838c84a6709118a874b924d300797a11088ff7a6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/83a2b2cd04e44d85cefcab55d0819d97c5ba678e b/fuzz/gnutls_srp_server_fuzzer.in/83a2b2cd04e44d85cefcab55d0819d97c5ba678e new file mode 100644 index 0000000000..a305461b6c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/83a2b2cd04e44d85cefcab55d0819d97c5ba678e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/83bfd9171936047c017d0e06a586eaa10188e7cf b/fuzz/gnutls_srp_server_fuzzer.in/83bfd9171936047c017d0e06a586eaa10188e7cf new file mode 100644 index 0000000000..14919d8bbc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/83bfd9171936047c017d0e06a586eaa10188e7cf differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/83cb70809e41695cc481a2ef068839cfe1a680e8 b/fuzz/gnutls_srp_server_fuzzer.in/83cb70809e41695cc481a2ef068839cfe1a680e8 new file mode 100644 index 0000000000..d6bacd1ecd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/83cb70809e41695cc481a2ef068839cfe1a680e8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/83dd787bac5b8b8634d3340dfc3537c62375e995 b/fuzz/gnutls_srp_server_fuzzer.in/83dd787bac5b8b8634d3340dfc3537c62375e995 new file mode 100644 index 0000000000..c09d677fa4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/83dd787bac5b8b8634d3340dfc3537c62375e995 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8464b801a2adb3841b55a15798f0d57f0688e512 b/fuzz/gnutls_srp_server_fuzzer.in/8464b801a2adb3841b55a15798f0d57f0688e512 new file mode 100644 index 0000000000..6299bd0c03 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8464b801a2adb3841b55a15798f0d57f0688e512 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/84a6b6217950b505a4426c6a73a65bd132675cad b/fuzz/gnutls_srp_server_fuzzer.in/84a6b6217950b505a4426c6a73a65bd132675cad new file mode 100644 index 0000000000..2fa4eb4813 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/84a6b6217950b505a4426c6a73a65bd132675cad differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8504608ec8cf999b35c961de32c110c207d6a43a b/fuzz/gnutls_srp_server_fuzzer.in/8504608ec8cf999b35c961de32c110c207d6a43a new file mode 100644 index 0000000000..0a72037d5d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8504608ec8cf999b35c961de32c110c207d6a43a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/853af65e4d2f06c7970bba9806836b0ddaaea848 b/fuzz/gnutls_srp_server_fuzzer.in/853af65e4d2f06c7970bba9806836b0ddaaea848 new file mode 100644 index 0000000000..008edb3be3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/853af65e4d2f06c7970bba9806836b0ddaaea848 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8560c2d899f26b3b729e7c2cc9901ca9d9cd43e8 b/fuzz/gnutls_srp_server_fuzzer.in/8560c2d899f26b3b729e7c2cc9901ca9d9cd43e8 new file mode 100644 index 0000000000..97a00a0ca7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8560c2d899f26b3b729e7c2cc9901ca9d9cd43e8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/85785611c1a7b18082ce90dfe7eb421a5dcf0e85 b/fuzz/gnutls_srp_server_fuzzer.in/85785611c1a7b18082ce90dfe7eb421a5dcf0e85 new file mode 100644 index 0000000000..c6369b2358 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/85785611c1a7b18082ce90dfe7eb421a5dcf0e85 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/857f9d03f9442a80d6f069b465cc3c7212d13f19 b/fuzz/gnutls_srp_server_fuzzer.in/857f9d03f9442a80d6f069b465cc3c7212d13f19 new file mode 100644 index 0000000000..ebc07ec6e7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/857f9d03f9442a80d6f069b465cc3c7212d13f19 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/87024eb5ea06454a4d78e5a20f6a52b26443670b b/fuzz/gnutls_srp_server_fuzzer.in/87024eb5ea06454a4d78e5a20f6a52b26443670b new file mode 100644 index 0000000000..a765efc4ed Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/87024eb5ea06454a4d78e5a20f6a52b26443670b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/874a2ca98067aa02d9348ecf4bffd20c1810fdb5 b/fuzz/gnutls_srp_server_fuzzer.in/874a2ca98067aa02d9348ecf4bffd20c1810fdb5 new file mode 100644 index 0000000000..650e55ed91 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/874a2ca98067aa02d9348ecf4bffd20c1810fdb5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/88ac8268354df668216e5bcfd63e02ac49848022 b/fuzz/gnutls_srp_server_fuzzer.in/88ac8268354df668216e5bcfd63e02ac49848022 new file mode 100644 index 0000000000..df8e6d24f7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/88ac8268354df668216e5bcfd63e02ac49848022 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/890ab40b253124c5f1bb4da8dfefbbb004536fb6 b/fuzz/gnutls_srp_server_fuzzer.in/890ab40b253124c5f1bb4da8dfefbbb004536fb6 new file mode 100644 index 0000000000..cc7518b8a2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/890ab40b253124c5f1bb4da8dfefbbb004536fb6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/890e1123b7c65c368c54a93127636fa47e2a6037 b/fuzz/gnutls_srp_server_fuzzer.in/890e1123b7c65c368c54a93127636fa47e2a6037 new file mode 100644 index 0000000000..c1dfa068e9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/890e1123b7c65c368c54a93127636fa47e2a6037 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8945ae4d30f664adbb5f6da5443898c0b9e42a41 b/fuzz/gnutls_srp_server_fuzzer.in/8945ae4d30f664adbb5f6da5443898c0b9e42a41 new file mode 100644 index 0000000000..ff9f5cf440 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8945ae4d30f664adbb5f6da5443898c0b9e42a41 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/897bffac360236cd1d778a109d0dd6ae92414810 b/fuzz/gnutls_srp_server_fuzzer.in/897bffac360236cd1d778a109d0dd6ae92414810 new file mode 100644 index 0000000000..349e1b00e9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/897bffac360236cd1d778a109d0dd6ae92414810 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/89c21d1e8b41ba5a74f9a05b8266115a55e2082a b/fuzz/gnutls_srp_server_fuzzer.in/89c21d1e8b41ba5a74f9a05b8266115a55e2082a new file mode 100644 index 0000000000..520944fb36 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/89c21d1e8b41ba5a74f9a05b8266115a55e2082a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/89d2f7902e10744e7187e818c4987b98990210ad b/fuzz/gnutls_srp_server_fuzzer.in/89d2f7902e10744e7187e818c4987b98990210ad new file mode 100644 index 0000000000..cf7cc6bbdd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/89d2f7902e10744e7187e818c4987b98990210ad differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/89e026f0113a659dd8d40df35e1e2c060f83e333 b/fuzz/gnutls_srp_server_fuzzer.in/89e026f0113a659dd8d40df35e1e2c060f83e333 new file mode 100644 index 0000000000..eaca3de2d3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/89e026f0113a659dd8d40df35e1e2c060f83e333 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8a75ff576ea9d90aa807ce8b06e306283abb6266 b/fuzz/gnutls_srp_server_fuzzer.in/8a75ff576ea9d90aa807ce8b06e306283abb6266 new file mode 100644 index 0000000000..d4e809a560 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8a75ff576ea9d90aa807ce8b06e306283abb6266 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8b12514ad59a3257bcde37963a87507291c5bd89 b/fuzz/gnutls_srp_server_fuzzer.in/8b12514ad59a3257bcde37963a87507291c5bd89 new file mode 100644 index 0000000000..5b6240dcd1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8b12514ad59a3257bcde37963a87507291c5bd89 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8b2cfe0ed15bdf8ced89f5f2f34d42a42080d8d3 b/fuzz/gnutls_srp_server_fuzzer.in/8b2cfe0ed15bdf8ced89f5f2f34d42a42080d8d3 new file mode 100644 index 0000000000..96b55ea85e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8b2cfe0ed15bdf8ced89f5f2f34d42a42080d8d3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8b8a7faac6cef0a42b947a5fc97c86b001c1c75e b/fuzz/gnutls_srp_server_fuzzer.in/8b8a7faac6cef0a42b947a5fc97c86b001c1c75e new file mode 100644 index 0000000000..7b2b694c68 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8b8a7faac6cef0a42b947a5fc97c86b001c1c75e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8c4c11e7e226416473b23821492cd13e2e129d14 b/fuzz/gnutls_srp_server_fuzzer.in/8c4c11e7e226416473b23821492cd13e2e129d14 new file mode 100644 index 0000000000..e4a984d390 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8c4c11e7e226416473b23821492cd13e2e129d14 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8c8927a65fd181212b053140ac5e80c8e97530a7 b/fuzz/gnutls_srp_server_fuzzer.in/8c8927a65fd181212b053140ac5e80c8e97530a7 new file mode 100644 index 0000000000..11fe135cc8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8c8927a65fd181212b053140ac5e80c8e97530a7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8cc2d3b34331f444a32c19adc1638bf7761c6b2a b/fuzz/gnutls_srp_server_fuzzer.in/8cc2d3b34331f444a32c19adc1638bf7761c6b2a new file mode 100644 index 0000000000..e1e5d783b9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8cc2d3b34331f444a32c19adc1638bf7761c6b2a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8d6a5ee234370e98db7c140c5f859bfca66f5883 b/fuzz/gnutls_srp_server_fuzzer.in/8d6a5ee234370e98db7c140c5f859bfca66f5883 new file mode 100644 index 0000000000..7f85e13e3f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8d6a5ee234370e98db7c140c5f859bfca66f5883 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8db23400acc3a94e58c35b58f3582225ee24d060 b/fuzz/gnutls_srp_server_fuzzer.in/8db23400acc3a94e58c35b58f3582225ee24d060 new file mode 100644 index 0000000000..ce1d45dab7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8db23400acc3a94e58c35b58f3582225ee24d060 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8dcab9c83f0b54762cd9c852b1479270bf27c382 b/fuzz/gnutls_srp_server_fuzzer.in/8dcab9c83f0b54762cd9c852b1479270bf27c382 new file mode 100644 index 0000000000..b04829fd7a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8dcab9c83f0b54762cd9c852b1479270bf27c382 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8e301840e80cc852274de8d1e652c126605c63b7 b/fuzz/gnutls_srp_server_fuzzer.in/8e301840e80cc852274de8d1e652c126605c63b7 new file mode 100644 index 0000000000..48572299e1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8e301840e80cc852274de8d1e652c126605c63b7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8e3df0556be54cfda0c27453520f1a5114e7f632 b/fuzz/gnutls_srp_server_fuzzer.in/8e3df0556be54cfda0c27453520f1a5114e7f632 new file mode 100644 index 0000000000..4cc1900ffe Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8e3df0556be54cfda0c27453520f1a5114e7f632 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8e929b2d640e6018efd5f1da602278423e3fae93 b/fuzz/gnutls_srp_server_fuzzer.in/8e929b2d640e6018efd5f1da602278423e3fae93 new file mode 100644 index 0000000000..392f957830 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8e929b2d640e6018efd5f1da602278423e3fae93 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8efb5269606348b657c5bfac9b07676b7d62b06e b/fuzz/gnutls_srp_server_fuzzer.in/8efb5269606348b657c5bfac9b07676b7d62b06e new file mode 100644 index 0000000000..1f7591557b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8efb5269606348b657c5bfac9b07676b7d62b06e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8f8b915d847f6d21ec1b2d66223cc9da68b52654 b/fuzz/gnutls_srp_server_fuzzer.in/8f8b915d847f6d21ec1b2d66223cc9da68b52654 new file mode 100644 index 0000000000..7325ab1c8d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8f8b915d847f6d21ec1b2d66223cc9da68b52654 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8f9f3f376df7efb7b1ae10cd63cd9a234c423577 b/fuzz/gnutls_srp_server_fuzzer.in/8f9f3f376df7efb7b1ae10cd63cd9a234c423577 new file mode 100644 index 0000000000..0ff7850823 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8f9f3f376df7efb7b1ae10cd63cd9a234c423577 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8faa2ec188f7a68ece8ccb2df7ba920b9b37b666 b/fuzz/gnutls_srp_server_fuzzer.in/8faa2ec188f7a68ece8ccb2df7ba920b9b37b666 new file mode 100644 index 0000000000..85d59f9c3d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8faa2ec188f7a68ece8ccb2df7ba920b9b37b666 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/8feb6df12d981b0bdd13e763efe66526a222d2e3 b/fuzz/gnutls_srp_server_fuzzer.in/8feb6df12d981b0bdd13e763efe66526a222d2e3 new file mode 100644 index 0000000000..1ddd644e0e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/8feb6df12d981b0bdd13e763efe66526a222d2e3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9027a823db8b73285f653ef5455a550d94be156e b/fuzz/gnutls_srp_server_fuzzer.in/9027a823db8b73285f653ef5455a550d94be156e new file mode 100644 index 0000000000..265cd6ac2f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9027a823db8b73285f653ef5455a550d94be156e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9031fbca0fb9da65aca5e2423604341682d9d82a b/fuzz/gnutls_srp_server_fuzzer.in/9031fbca0fb9da65aca5e2423604341682d9d82a new file mode 100644 index 0000000000..4b45a72551 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9031fbca0fb9da65aca5e2423604341682d9d82a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/904bcf77b0adf3f4b35f67c754f64ddee1a2aab0 b/fuzz/gnutls_srp_server_fuzzer.in/904bcf77b0adf3f4b35f67c754f64ddee1a2aab0 new file mode 100644 index 0000000000..3163f08664 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/904bcf77b0adf3f4b35f67c754f64ddee1a2aab0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/905f79337eabe55fbefba70dec8cea2070d01515 b/fuzz/gnutls_srp_server_fuzzer.in/905f79337eabe55fbefba70dec8cea2070d01515 new file mode 100644 index 0000000000..451cd9f0b2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/905f79337eabe55fbefba70dec8cea2070d01515 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/90b7989260054427accf80db14957800db65f3cb b/fuzz/gnutls_srp_server_fuzzer.in/90b7989260054427accf80db14957800db65f3cb new file mode 100644 index 0000000000..1994a03966 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/90b7989260054427accf80db14957800db65f3cb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/90da469215640bd81cc23d5021990b013a110203 b/fuzz/gnutls_srp_server_fuzzer.in/90da469215640bd81cc23d5021990b013a110203 new file mode 100644 index 0000000000..b8be563456 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/90da469215640bd81cc23d5021990b013a110203 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/91309ecd933f81b4ea588f4ee7f134b263368479 b/fuzz/gnutls_srp_server_fuzzer.in/91309ecd933f81b4ea588f4ee7f134b263368479 new file mode 100644 index 0000000000..58705c4e9a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/91309ecd933f81b4ea588f4ee7f134b263368479 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/92318d1ab60ddeb16e53f09fe0226c855b6ed6b3 b/fuzz/gnutls_srp_server_fuzzer.in/92318d1ab60ddeb16e53f09fe0226c855b6ed6b3 new file mode 100644 index 0000000000..bd5b939d01 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/92318d1ab60ddeb16e53f09fe0226c855b6ed6b3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9271e11fee87a30b5bf4a57fc22b007f66a43b45 b/fuzz/gnutls_srp_server_fuzzer.in/9271e11fee87a30b5bf4a57fc22b007f66a43b45 new file mode 100644 index 0000000000..21a49e3f2c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9271e11fee87a30b5bf4a57fc22b007f66a43b45 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/92e67d48ab906dc6481280a4a6b359e079e29dec b/fuzz/gnutls_srp_server_fuzzer.in/92e67d48ab906dc6481280a4a6b359e079e29dec new file mode 100644 index 0000000000..a9961d0804 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/92e67d48ab906dc6481280a4a6b359e079e29dec differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/93529a81e1913736e10debb6a9fcb6fc38fdb8c3 b/fuzz/gnutls_srp_server_fuzzer.in/93529a81e1913736e10debb6a9fcb6fc38fdb8c3 new file mode 100644 index 0000000000..2e59c95071 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/93529a81e1913736e10debb6a9fcb6fc38fdb8c3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/936012b458d965d53b727b42ea3b5cb1d5fa385f b/fuzz/gnutls_srp_server_fuzzer.in/936012b458d965d53b727b42ea3b5cb1d5fa385f new file mode 100644 index 0000000000..420a4b92cc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/936012b458d965d53b727b42ea3b5cb1d5fa385f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/937555916573158c5b2b7ea404ed7cad9f14009b b/fuzz/gnutls_srp_server_fuzzer.in/937555916573158c5b2b7ea404ed7cad9f14009b new file mode 100644 index 0000000000..b32cc63a49 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/937555916573158c5b2b7ea404ed7cad9f14009b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/93f469a0c3dc8fcc81aae1b1352b742b74765749 b/fuzz/gnutls_srp_server_fuzzer.in/93f469a0c3dc8fcc81aae1b1352b742b74765749 new file mode 100644 index 0000000000..23262f3ab0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/93f469a0c3dc8fcc81aae1b1352b742b74765749 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/94af6711e762fd53650910914038ebab8ceb9eb9 b/fuzz/gnutls_srp_server_fuzzer.in/94af6711e762fd53650910914038ebab8ceb9eb9 new file mode 100644 index 0000000000..40790eba5b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/94af6711e762fd53650910914038ebab8ceb9eb9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/94e4973ebbe269ed29c413876193e4c7b4e740c2 b/fuzz/gnutls_srp_server_fuzzer.in/94e4973ebbe269ed29c413876193e4c7b4e740c2 new file mode 100644 index 0000000000..d188c2deaa Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/94e4973ebbe269ed29c413876193e4c7b4e740c2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/95b7c7cd3e4ec4ad10bd58d711b4e9eb3d1fb160 b/fuzz/gnutls_srp_server_fuzzer.in/95b7c7cd3e4ec4ad10bd58d711b4e9eb3d1fb160 new file mode 100644 index 0000000000..5e47d00366 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/95b7c7cd3e4ec4ad10bd58d711b4e9eb3d1fb160 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/95dd55fa59013ecaacc4cd1b0fe63728ba20bfe2 b/fuzz/gnutls_srp_server_fuzzer.in/95dd55fa59013ecaacc4cd1b0fe63728ba20bfe2 new file mode 100644 index 0000000000..911c8ef457 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/95dd55fa59013ecaacc4cd1b0fe63728ba20bfe2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/962c3eb4d71549569105f3fea66dca58f73b5ca1 b/fuzz/gnutls_srp_server_fuzzer.in/962c3eb4d71549569105f3fea66dca58f73b5ca1 new file mode 100644 index 0000000000..ab70aaebfa Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/962c3eb4d71549569105f3fea66dca58f73b5ca1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/96695e9f311638ce2716db792252e8c4ded9c744 b/fuzz/gnutls_srp_server_fuzzer.in/96695e9f311638ce2716db792252e8c4ded9c744 new file mode 100644 index 0000000000..4185684543 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/96695e9f311638ce2716db792252e8c4ded9c744 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9679829b125e3d1481bd3bd287fbdc5ad04b101d b/fuzz/gnutls_srp_server_fuzzer.in/9679829b125e3d1481bd3bd287fbdc5ad04b101d new file mode 100644 index 0000000000..fa671837a5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9679829b125e3d1481bd3bd287fbdc5ad04b101d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/97431bf3c63e42f07ac26f89b96902aedb014956 b/fuzz/gnutls_srp_server_fuzzer.in/97431bf3c63e42f07ac26f89b96902aedb014956 new file mode 100644 index 0000000000..1c2b35a816 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/97431bf3c63e42f07ac26f89b96902aedb014956 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/97976bafb3b71ae0ef6c4517932be7e5aa2794b2 b/fuzz/gnutls_srp_server_fuzzer.in/97976bafb3b71ae0ef6c4517932be7e5aa2794b2 new file mode 100644 index 0000000000..29a96131ae Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/97976bafb3b71ae0ef6c4517932be7e5aa2794b2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/97d7f651a1b84ee537971ed057c056bd11fab3f6 b/fuzz/gnutls_srp_server_fuzzer.in/97d7f651a1b84ee537971ed057c056bd11fab3f6 new file mode 100644 index 0000000000..f34657d3e5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/97d7f651a1b84ee537971ed057c056bd11fab3f6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/982e06aef3ac471d10dc626597ae8daffd9b6a79 b/fuzz/gnutls_srp_server_fuzzer.in/982e06aef3ac471d10dc626597ae8daffd9b6a79 new file mode 100644 index 0000000000..ee4504592b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/982e06aef3ac471d10dc626597ae8daffd9b6a79 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/986236fe833ddfa2621626b8d552bce58919e39e b/fuzz/gnutls_srp_server_fuzzer.in/986236fe833ddfa2621626b8d552bce58919e39e new file mode 100644 index 0000000000..932ae12565 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/986236fe833ddfa2621626b8d552bce58919e39e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/986f6cece08753135e3762e1af8a07d4a88182ba b/fuzz/gnutls_srp_server_fuzzer.in/986f6cece08753135e3762e1af8a07d4a88182ba new file mode 100644 index 0000000000..956a871cdc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/986f6cece08753135e3762e1af8a07d4a88182ba differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/98cb877e185fcaad8f4534898b60d605ba2b3a24 b/fuzz/gnutls_srp_server_fuzzer.in/98cb877e185fcaad8f4534898b60d605ba2b3a24 new file mode 100644 index 0000000000..ef0ca9e2d3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/98cb877e185fcaad8f4534898b60d605ba2b3a24 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/98ecc82928ec6ca2be1d2f65aa8e12c7a55ef528 b/fuzz/gnutls_srp_server_fuzzer.in/98ecc82928ec6ca2be1d2f65aa8e12c7a55ef528 new file mode 100644 index 0000000000..9d311de392 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/98ecc82928ec6ca2be1d2f65aa8e12c7a55ef528 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/99a0a501db0674810eec892a4bd6855f826b5076 b/fuzz/gnutls_srp_server_fuzzer.in/99a0a501db0674810eec892a4bd6855f826b5076 new file mode 100644 index 0000000000..8d3d9edd19 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/99a0a501db0674810eec892a4bd6855f826b5076 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/99d90b9b434395bd7c6e0949402579ca63b43c17 b/fuzz/gnutls_srp_server_fuzzer.in/99d90b9b434395bd7c6e0949402579ca63b43c17 new file mode 100644 index 0000000000..3b381ac5ac Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/99d90b9b434395bd7c6e0949402579ca63b43c17 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9a23d91106243dcbc55b272b7944918cd2f36849 b/fuzz/gnutls_srp_server_fuzzer.in/9a23d91106243dcbc55b272b7944918cd2f36849 new file mode 100644 index 0000000000..7896721845 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9a23d91106243dcbc55b272b7944918cd2f36849 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9b9e3b6343af53810acee452421561cbae05d211 b/fuzz/gnutls_srp_server_fuzzer.in/9b9e3b6343af53810acee452421561cbae05d211 new file mode 100644 index 0000000000..9f990fe254 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9b9e3b6343af53810acee452421561cbae05d211 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9bea23f4dbb3feeeb7bb6fb698915063c9fa553c b/fuzz/gnutls_srp_server_fuzzer.in/9bea23f4dbb3feeeb7bb6fb698915063c9fa553c new file mode 100644 index 0000000000..e5954f13a4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9bea23f4dbb3feeeb7bb6fb698915063c9fa553c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9c12cf78c8fd0a2d9bfb4f3f87131b0d4330228f b/fuzz/gnutls_srp_server_fuzzer.in/9c12cf78c8fd0a2d9bfb4f3f87131b0d4330228f new file mode 100644 index 0000000000..bb9af7ec3c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9c12cf78c8fd0a2d9bfb4f3f87131b0d4330228f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9c49d532ebc839c2b4469ac2b5e4c742b67a7876 b/fuzz/gnutls_srp_server_fuzzer.in/9c49d532ebc839c2b4469ac2b5e4c742b67a7876 new file mode 100644 index 0000000000..73a0cbfdb5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9c49d532ebc839c2b4469ac2b5e4c742b67a7876 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9cd9ccb1ba0054ed946d6d4fe7c60f5e6224b2b0 b/fuzz/gnutls_srp_server_fuzzer.in/9cd9ccb1ba0054ed946d6d4fe7c60f5e6224b2b0 new file mode 100644 index 0000000000..a45fb1c6ce Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9cd9ccb1ba0054ed946d6d4fe7c60f5e6224b2b0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9cdf463176e56a19e695305c691f931e552d6831 b/fuzz/gnutls_srp_server_fuzzer.in/9cdf463176e56a19e695305c691f931e552d6831 new file mode 100644 index 0000000000..f6a5e11819 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9cdf463176e56a19e695305c691f931e552d6831 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9e14c100b540bc4218fe6e99494d44b0bcb7f6f8 b/fuzz/gnutls_srp_server_fuzzer.in/9e14c100b540bc4218fe6e99494d44b0bcb7f6f8 new file mode 100644 index 0000000000..f064147d16 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9e14c100b540bc4218fe6e99494d44b0bcb7f6f8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9e605349bf8dcd3f0cb917284f000c5927568c1b b/fuzz/gnutls_srp_server_fuzzer.in/9e605349bf8dcd3f0cb917284f000c5927568c1b new file mode 100644 index 0000000000..e94d1ca558 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9e605349bf8dcd3f0cb917284f000c5927568c1b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9f3972d3c4840cf59b94e4547b70f0cbb57ccf09 b/fuzz/gnutls_srp_server_fuzzer.in/9f3972d3c4840cf59b94e4547b70f0cbb57ccf09 new file mode 100644 index 0000000000..86dcea7c4b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9f3972d3c4840cf59b94e4547b70f0cbb57ccf09 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9fab29b70f6df9256aa6b9622bcd19240077cd38 b/fuzz/gnutls_srp_server_fuzzer.in/9fab29b70f6df9256aa6b9622bcd19240077cd38 new file mode 100644 index 0000000000..c31cd049d0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9fab29b70f6df9256aa6b9622bcd19240077cd38 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9fb1999e186969d7c5bf810664e64bcf971b5102 b/fuzz/gnutls_srp_server_fuzzer.in/9fb1999e186969d7c5bf810664e64bcf971b5102 new file mode 100644 index 0000000000..b38fd5b4f6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9fb1999e186969d7c5bf810664e64bcf971b5102 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9fbe71734bcb4eaf6e330cec5b840b8a395a9dbb b/fuzz/gnutls_srp_server_fuzzer.in/9fbe71734bcb4eaf6e330cec5b840b8a395a9dbb new file mode 100644 index 0000000000..c02f7bb9ee Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9fbe71734bcb4eaf6e330cec5b840b8a395a9dbb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/9fe8313be8cdbddca83f7b0e63bfd7ff1f302db4 b/fuzz/gnutls_srp_server_fuzzer.in/9fe8313be8cdbddca83f7b0e63bfd7ff1f302db4 new file mode 100644 index 0000000000..8932453642 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/9fe8313be8cdbddca83f7b0e63bfd7ff1f302db4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a0678d12a7601af90807d3483e38de6eab8847cd b/fuzz/gnutls_srp_server_fuzzer.in/a0678d12a7601af90807d3483e38de6eab8847cd new file mode 100644 index 0000000000..0c9b682e1b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a0678d12a7601af90807d3483e38de6eab8847cd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a06888d16eed492f3029cca24313282fc7b84bb8 b/fuzz/gnutls_srp_server_fuzzer.in/a06888d16eed492f3029cca24313282fc7b84bb8 new file mode 100644 index 0000000000..6ffb65c87c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a06888d16eed492f3029cca24313282fc7b84bb8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a08357f7d6e8fb9e63a851a486dc47affae8c938 b/fuzz/gnutls_srp_server_fuzzer.in/a08357f7d6e8fb9e63a851a486dc47affae8c938 new file mode 100644 index 0000000000..6bfeda6f23 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a08357f7d6e8fb9e63a851a486dc47affae8c938 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a0e517a4a99ec280a95f63983a4049d84852407c b/fuzz/gnutls_srp_server_fuzzer.in/a0e517a4a99ec280a95f63983a4049d84852407c new file mode 100644 index 0000000000..7de3655a8a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a0e517a4a99ec280a95f63983a4049d84852407c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a1a6fbd7d7940ad43632bff5478f39b94de97ce2 b/fuzz/gnutls_srp_server_fuzzer.in/a1a6fbd7d7940ad43632bff5478f39b94de97ce2 new file mode 100644 index 0000000000..25dd93da94 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a1a6fbd7d7940ad43632bff5478f39b94de97ce2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a2effe6cad838d0f6dbae21b12897694f6769cf7 b/fuzz/gnutls_srp_server_fuzzer.in/a2effe6cad838d0f6dbae21b12897694f6769cf7 new file mode 100644 index 0000000000..1ecb5ce7ac Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a2effe6cad838d0f6dbae21b12897694f6769cf7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a2f19eb4dc085ffe1f79c62ec313adc3e396c5e2 b/fuzz/gnutls_srp_server_fuzzer.in/a2f19eb4dc085ffe1f79c62ec313adc3e396c5e2 new file mode 100644 index 0000000000..304e8d8d03 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a2f19eb4dc085ffe1f79c62ec313adc3e396c5e2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a2f4d7346a3daa6058bf6f3959e34573c94ac3b1 b/fuzz/gnutls_srp_server_fuzzer.in/a2f4d7346a3daa6058bf6f3959e34573c94ac3b1 new file mode 100644 index 0000000000..ffad417cc5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a2f4d7346a3daa6058bf6f3959e34573c94ac3b1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a4b3fb2fc2d72fc92dd803dcd5e3e7fd0e98527e b/fuzz/gnutls_srp_server_fuzzer.in/a4b3fb2fc2d72fc92dd803dcd5e3e7fd0e98527e new file mode 100644 index 0000000000..74963a0f14 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a4b3fb2fc2d72fc92dd803dcd5e3e7fd0e98527e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a51268f09cc83a4e02836206d836f79f111d0134 b/fuzz/gnutls_srp_server_fuzzer.in/a51268f09cc83a4e02836206d836f79f111d0134 new file mode 100644 index 0000000000..3cb1038528 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a51268f09cc83a4e02836206d836f79f111d0134 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a52a5950749290023f42b8ba2d20151cda1372c0 b/fuzz/gnutls_srp_server_fuzzer.in/a52a5950749290023f42b8ba2d20151cda1372c0 new file mode 100644 index 0000000000..4d91b77eb4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a52a5950749290023f42b8ba2d20151cda1372c0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a5387a02b3de6121eff8299c2ca56e64e1b2d603 b/fuzz/gnutls_srp_server_fuzzer.in/a5387a02b3de6121eff8299c2ca56e64e1b2d603 new file mode 100644 index 0000000000..7ba46271c5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a5387a02b3de6121eff8299c2ca56e64e1b2d603 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a5d23d9f67e1d57595e2cefb58b44e37b1f82104 b/fuzz/gnutls_srp_server_fuzzer.in/a5d23d9f67e1d57595e2cefb58b44e37b1f82104 new file mode 100644 index 0000000000..1cfd92023f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a5d23d9f67e1d57595e2cefb58b44e37b1f82104 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a63476dc377084ab6dd481fbf83a7868663d8647 b/fuzz/gnutls_srp_server_fuzzer.in/a63476dc377084ab6dd481fbf83a7868663d8647 new file mode 100644 index 0000000000..44c666957a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a63476dc377084ab6dd481fbf83a7868663d8647 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a6ab3010266545eb3f67bbd3d04d339f1e280230 b/fuzz/gnutls_srp_server_fuzzer.in/a6ab3010266545eb3f67bbd3d04d339f1e280230 new file mode 100644 index 0000000000..b75701fc31 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a6ab3010266545eb3f67bbd3d04d339f1e280230 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a744c4a6013917513b412c4249a8d6bf5bbf07f7 b/fuzz/gnutls_srp_server_fuzzer.in/a744c4a6013917513b412c4249a8d6bf5bbf07f7 new file mode 100644 index 0000000000..ee1f9ad1e7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a744c4a6013917513b412c4249a8d6bf5bbf07f7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a7d01322f2de5aac82295fc504f4f14112b72830 b/fuzz/gnutls_srp_server_fuzzer.in/a7d01322f2de5aac82295fc504f4f14112b72830 new file mode 100644 index 0000000000..00cf9f27c7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a7d01322f2de5aac82295fc504f4f14112b72830 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a9bd30f71753d8857ba7738034b8e3f0e3061c11 b/fuzz/gnutls_srp_server_fuzzer.in/a9bd30f71753d8857ba7738034b8e3f0e3061c11 new file mode 100644 index 0000000000..3a714ffa58 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a9bd30f71753d8857ba7738034b8e3f0e3061c11 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/a9da8edaa04c84686df57c96a801f3162fe4de6f b/fuzz/gnutls_srp_server_fuzzer.in/a9da8edaa04c84686df57c96a801f3162fe4de6f new file mode 100644 index 0000000000..f13c3190f0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/a9da8edaa04c84686df57c96a801f3162fe4de6f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/aa125d34585d320bfc597ffa29ccf844474141e4 b/fuzz/gnutls_srp_server_fuzzer.in/aa125d34585d320bfc597ffa29ccf844474141e4 new file mode 100644 index 0000000000..3738127e1a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/aa125d34585d320bfc597ffa29ccf844474141e4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/aa1dee419596f27512c499cb880f2db904bce112 b/fuzz/gnutls_srp_server_fuzzer.in/aa1dee419596f27512c499cb880f2db904bce112 new file mode 100644 index 0000000000..3158f1ca5d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/aa1dee419596f27512c499cb880f2db904bce112 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/aa57aadeae119800e555855493bfc40190907cc7 b/fuzz/gnutls_srp_server_fuzzer.in/aa57aadeae119800e555855493bfc40190907cc7 new file mode 100644 index 0000000000..0b9be6d694 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/aa57aadeae119800e555855493bfc40190907cc7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/aafc1c5cbd5e9eec942709cae935eaafe5e7659b b/fuzz/gnutls_srp_server_fuzzer.in/aafc1c5cbd5e9eec942709cae935eaafe5e7659b new file mode 100644 index 0000000000..cc80d7b15c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/aafc1c5cbd5e9eec942709cae935eaafe5e7659b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ab1c2830de3bfcc93e47116bba5d4ec594128803 b/fuzz/gnutls_srp_server_fuzzer.in/ab1c2830de3bfcc93e47116bba5d4ec594128803 new file mode 100644 index 0000000000..1535da372e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ab1c2830de3bfcc93e47116bba5d4ec594128803 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ab3545b71f3bc0fd748d454cdc00f0c67a41c55c b/fuzz/gnutls_srp_server_fuzzer.in/ab3545b71f3bc0fd748d454cdc00f0c67a41c55c new file mode 100644 index 0000000000..149cd1ad68 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ab3545b71f3bc0fd748d454cdc00f0c67a41c55c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ac7b00e7ba07eea77fd1da662cf5ce44e5c96164 b/fuzz/gnutls_srp_server_fuzzer.in/ac7b00e7ba07eea77fd1da662cf5ce44e5c96164 new file mode 100644 index 0000000000..fa234b10ca Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ac7b00e7ba07eea77fd1da662cf5ce44e5c96164 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ac88f3ad95b0b4b64dcb71fd7340f494facdc781 b/fuzz/gnutls_srp_server_fuzzer.in/ac88f3ad95b0b4b64dcb71fd7340f494facdc781 new file mode 100644 index 0000000000..36769a17e4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ac88f3ad95b0b4b64dcb71fd7340f494facdc781 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ac96fa26e54c56a3bc9105feb0dbd0a96b464ecf b/fuzz/gnutls_srp_server_fuzzer.in/ac96fa26e54c56a3bc9105feb0dbd0a96b464ecf new file mode 100644 index 0000000000..b62d44e530 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ac96fa26e54c56a3bc9105feb0dbd0a96b464ecf differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/acac93bf8ced37b3e08a28c68a464a7273c1f816 b/fuzz/gnutls_srp_server_fuzzer.in/acac93bf8ced37b3e08a28c68a464a7273c1f816 new file mode 100644 index 0000000000..3cb8d966dc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/acac93bf8ced37b3e08a28c68a464a7273c1f816 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ad880bc06078514b249f64f90c04e91879590c33 b/fuzz/gnutls_srp_server_fuzzer.in/ad880bc06078514b249f64f90c04e91879590c33 new file mode 100644 index 0000000000..7ed80221ab Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ad880bc06078514b249f64f90c04e91879590c33 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/aeabc370e1677ead61f9d2ecca67362da3f06150 b/fuzz/gnutls_srp_server_fuzzer.in/aeabc370e1677ead61f9d2ecca67362da3f06150 new file mode 100644 index 0000000000..f684abf902 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/aeabc370e1677ead61f9d2ecca67362da3f06150 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/aef7a083e351467a3bb49f13638ebf44310e72a8 b/fuzz/gnutls_srp_server_fuzzer.in/aef7a083e351467a3bb49f13638ebf44310e72a8 new file mode 100644 index 0000000000..e8fe826fe4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/aef7a083e351467a3bb49f13638ebf44310e72a8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/af71b6888ea7cd469eab0dc618cc2c51a2317c69 b/fuzz/gnutls_srp_server_fuzzer.in/af71b6888ea7cd469eab0dc618cc2c51a2317c69 new file mode 100644 index 0000000000..386dea1aee Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/af71b6888ea7cd469eab0dc618cc2c51a2317c69 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/afe3a010693ce84ae1dae2168ed9f4e6129a31eb b/fuzz/gnutls_srp_server_fuzzer.in/afe3a010693ce84ae1dae2168ed9f4e6129a31eb new file mode 100644 index 0000000000..92edf1e2a9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/afe3a010693ce84ae1dae2168ed9f4e6129a31eb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b03ca87834ce3ec344e28a37b92a1eb9b7d7dac2 b/fuzz/gnutls_srp_server_fuzzer.in/b03ca87834ce3ec344e28a37b92a1eb9b7d7dac2 new file mode 100644 index 0000000000..1e63a9f54c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b03ca87834ce3ec344e28a37b92a1eb9b7d7dac2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b074fe18c695e4116104ae48f981dea499518047 b/fuzz/gnutls_srp_server_fuzzer.in/b074fe18c695e4116104ae48f981dea499518047 new file mode 100644 index 0000000000..f098c95561 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b074fe18c695e4116104ae48f981dea499518047 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b14240235348817e64932293fa160b7ad6ee2490 b/fuzz/gnutls_srp_server_fuzzer.in/b14240235348817e64932293fa160b7ad6ee2490 new file mode 100644 index 0000000000..6a40eb9e71 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b14240235348817e64932293fa160b7ad6ee2490 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b1992bf7d6a321354adaa25d3c429043c3b6450f b/fuzz/gnutls_srp_server_fuzzer.in/b1992bf7d6a321354adaa25d3c429043c3b6450f new file mode 100644 index 0000000000..d0c4c7f82f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b1992bf7d6a321354adaa25d3c429043c3b6450f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b26ac2880dc4b4b73d78351ef9b52bd34060e262 b/fuzz/gnutls_srp_server_fuzzer.in/b26ac2880dc4b4b73d78351ef9b52bd34060e262 new file mode 100644 index 0000000000..1ad1f113d0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b26ac2880dc4b4b73d78351ef9b52bd34060e262 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b2d7d6e6d8bad248c5a7f9b443f9e0626788b6fa b/fuzz/gnutls_srp_server_fuzzer.in/b2d7d6e6d8bad248c5a7f9b443f9e0626788b6fa new file mode 100644 index 0000000000..a6fec4333c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b2d7d6e6d8bad248c5a7f9b443f9e0626788b6fa differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b2df3e60dda835105d624e7a232830533a48cf7c b/fuzz/gnutls_srp_server_fuzzer.in/b2df3e60dda835105d624e7a232830533a48cf7c new file mode 100644 index 0000000000..ac48bcbe85 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b2df3e60dda835105d624e7a232830533a48cf7c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b327c69c383b39953075b12cac96dfd520f61085 b/fuzz/gnutls_srp_server_fuzzer.in/b327c69c383b39953075b12cac96dfd520f61085 new file mode 100644 index 0000000000..125e35aa63 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b327c69c383b39953075b12cac96dfd520f61085 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b35d977f4b65029422bef232ddb2bffd451a32e0 b/fuzz/gnutls_srp_server_fuzzer.in/b35d977f4b65029422bef232ddb2bffd451a32e0 new file mode 100644 index 0000000000..f2f8eae77d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b35d977f4b65029422bef232ddb2bffd451a32e0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b37dc3213f3e79cd36be894716be8bef37a572b6 b/fuzz/gnutls_srp_server_fuzzer.in/b37dc3213f3e79cd36be894716be8bef37a572b6 new file mode 100644 index 0000000000..cd69353a13 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b37dc3213f3e79cd36be894716be8bef37a572b6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b38576de55b01a3f037919c2da05d88c8876c8ac b/fuzz/gnutls_srp_server_fuzzer.in/b38576de55b01a3f037919c2da05d88c8876c8ac new file mode 100644 index 0000000000..9b17231065 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b38576de55b01a3f037919c2da05d88c8876c8ac differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b3bbf24d6112184e2a7b01348783369777c2ef0b b/fuzz/gnutls_srp_server_fuzzer.in/b3bbf24d6112184e2a7b01348783369777c2ef0b new file mode 100644 index 0000000000..f1ff6bc4f7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b3bbf24d6112184e2a7b01348783369777c2ef0b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b40e4f3da9df1682275455381e2375f07be2f20a b/fuzz/gnutls_srp_server_fuzzer.in/b40e4f3da9df1682275455381e2375f07be2f20a new file mode 100644 index 0000000000..0a7c15b367 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b40e4f3da9df1682275455381e2375f07be2f20a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b47eb6efb06daa15bacdaf7601edcece667cabc8 b/fuzz/gnutls_srp_server_fuzzer.in/b47eb6efb06daa15bacdaf7601edcece667cabc8 new file mode 100644 index 0000000000..28497fd44a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b47eb6efb06daa15bacdaf7601edcece667cabc8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b571d99f8d5a1ed6b176aacfc93b6241b79ca4d0 b/fuzz/gnutls_srp_server_fuzzer.in/b571d99f8d5a1ed6b176aacfc93b6241b79ca4d0 new file mode 100644 index 0000000000..2fb9c59a67 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b571d99f8d5a1ed6b176aacfc93b6241b79ca4d0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b58b305e25c2a24ec0bc763c235f0496b0c975a0 b/fuzz/gnutls_srp_server_fuzzer.in/b58b305e25c2a24ec0bc763c235f0496b0c975a0 new file mode 100644 index 0000000000..5381e0a4e6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b58b305e25c2a24ec0bc763c235f0496b0c975a0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b648f9a4eeebffb39a38903c7f056898955c7b7a b/fuzz/gnutls_srp_server_fuzzer.in/b648f9a4eeebffb39a38903c7f056898955c7b7a new file mode 100644 index 0000000000..a7939998a8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b648f9a4eeebffb39a38903c7f056898955c7b7a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b75c88717b8d0cdfa13cc5db962ef8a33dd9fd1f b/fuzz/gnutls_srp_server_fuzzer.in/b75c88717b8d0cdfa13cc5db962ef8a33dd9fd1f new file mode 100644 index 0000000000..7e39121548 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b75c88717b8d0cdfa13cc5db962ef8a33dd9fd1f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b78e876ed02b01ec3b7637b670c1933b5bf89469 b/fuzz/gnutls_srp_server_fuzzer.in/b78e876ed02b01ec3b7637b670c1933b5bf89469 new file mode 100644 index 0000000000..9ae67a1be7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b78e876ed02b01ec3b7637b670c1933b5bf89469 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b86b99c057002a43ab3b3affe90cde950fdba48f b/fuzz/gnutls_srp_server_fuzzer.in/b86b99c057002a43ab3b3affe90cde950fdba48f new file mode 100644 index 0000000000..33b4283941 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b86b99c057002a43ab3b3affe90cde950fdba48f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b8853fe2ee5d45b76cadcaac629b21aa62547324 b/fuzz/gnutls_srp_server_fuzzer.in/b8853fe2ee5d45b76cadcaac629b21aa62547324 new file mode 100644 index 0000000000..1b73122fb0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b8853fe2ee5d45b76cadcaac629b21aa62547324 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b921be18e2a3d4e454d2b40f544c3ae95b93ec94 b/fuzz/gnutls_srp_server_fuzzer.in/b921be18e2a3d4e454d2b40f544c3ae95b93ec94 new file mode 100644 index 0000000000..a750c823f7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b921be18e2a3d4e454d2b40f544c3ae95b93ec94 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/b9a93447d6f67b4dae87f34fdbb5e0848843d43f b/fuzz/gnutls_srp_server_fuzzer.in/b9a93447d6f67b4dae87f34fdbb5e0848843d43f new file mode 100644 index 0000000000..8de90f6cdd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/b9a93447d6f67b4dae87f34fdbb5e0848843d43f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ba6280e239fa1cdfa7381e9ec1e41a7413a73389 b/fuzz/gnutls_srp_server_fuzzer.in/ba6280e239fa1cdfa7381e9ec1e41a7413a73389 new file mode 100644 index 0000000000..4602408bbd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ba6280e239fa1cdfa7381e9ec1e41a7413a73389 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/bb03e4fe6e5fd77ce7b2bb52ff696b1f6df4ff27 b/fuzz/gnutls_srp_server_fuzzer.in/bb03e4fe6e5fd77ce7b2bb52ff696b1f6df4ff27 new file mode 100644 index 0000000000..bc1c8a9698 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/bb03e4fe6e5fd77ce7b2bb52ff696b1f6df4ff27 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/bb228ddf90b348d967b1c700fd9117ca8b62de1d b/fuzz/gnutls_srp_server_fuzzer.in/bb228ddf90b348d967b1c700fd9117ca8b62de1d new file mode 100644 index 0000000000..888ae92976 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/bb228ddf90b348d967b1c700fd9117ca8b62de1d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/bbc13f4d7cf8964bcde2cacd50d62ce415a02689 b/fuzz/gnutls_srp_server_fuzzer.in/bbc13f4d7cf8964bcde2cacd50d62ce415a02689 new file mode 100644 index 0000000000..eb8c06d467 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/bbc13f4d7cf8964bcde2cacd50d62ce415a02689 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/bc1a35ccd68ceb984391b0c4aaa74516fd78e08e b/fuzz/gnutls_srp_server_fuzzer.in/bc1a35ccd68ceb984391b0c4aaa74516fd78e08e new file mode 100644 index 0000000000..f7c9169fc7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/bc1a35ccd68ceb984391b0c4aaa74516fd78e08e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/bc4bce29e638238c8195208e8013442f7f2bf21c b/fuzz/gnutls_srp_server_fuzzer.in/bc4bce29e638238c8195208e8013442f7f2bf21c new file mode 100644 index 0000000000..0dd9c314c5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/bc4bce29e638238c8195208e8013442f7f2bf21c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/bc750f0da3d2d1e4bf7bb22026d251d89c3082c0 b/fuzz/gnutls_srp_server_fuzzer.in/bc750f0da3d2d1e4bf7bb22026d251d89c3082c0 new file mode 100644 index 0000000000..895730b2fd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/bc750f0da3d2d1e4bf7bb22026d251d89c3082c0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/bcb4a4d9647bc5918b58125cbadea565c3ac2428 b/fuzz/gnutls_srp_server_fuzzer.in/bcb4a4d9647bc5918b58125cbadea565c3ac2428 new file mode 100644 index 0000000000..2759b75508 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/bcb4a4d9647bc5918b58125cbadea565c3ac2428 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/bcb5989c2a4da411b53f112279364427ee917a25 b/fuzz/gnutls_srp_server_fuzzer.in/bcb5989c2a4da411b53f112279364427ee917a25 new file mode 100644 index 0000000000..4f62c743e7 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/bcb5989c2a4da411b53f112279364427ee917a25 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/bd2716e5868fcf017a550898f6f125dbef02f67b b/fuzz/gnutls_srp_server_fuzzer.in/bd2716e5868fcf017a550898f6f125dbef02f67b new file mode 100644 index 0000000000..89f5c7da34 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/bd2716e5868fcf017a550898f6f125dbef02f67b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/bd91431820eb106b9fd22112c8c60037fefe9e62 b/fuzz/gnutls_srp_server_fuzzer.in/bd91431820eb106b9fd22112c8c60037fefe9e62 new file mode 100644 index 0000000000..2032ccb75d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/bd91431820eb106b9fd22112c8c60037fefe9e62 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/beb2c06ef381e687852e97007a9a97be86c5d73d b/fuzz/gnutls_srp_server_fuzzer.in/beb2c06ef381e687852e97007a9a97be86c5d73d new file mode 100644 index 0000000000..3c7475a619 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/beb2c06ef381e687852e97007a9a97be86c5d73d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/bf8c6f405aaa97e4a4a6bf5acdd409bd2472d5c3 b/fuzz/gnutls_srp_server_fuzzer.in/bf8c6f405aaa97e4a4a6bf5acdd409bd2472d5c3 new file mode 100644 index 0000000000..24a71f5801 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/bf8c6f405aaa97e4a4a6bf5acdd409bd2472d5c3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c0e503ea00f474b33e1ff7fb1675bd8c3a817b90 b/fuzz/gnutls_srp_server_fuzzer.in/c0e503ea00f474b33e1ff7fb1675bd8c3a817b90 new file mode 100644 index 0000000000..9217446ad8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c0e503ea00f474b33e1ff7fb1675bd8c3a817b90 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c1d3b6bcd4680b59e190a1558e1522f32cf47812 b/fuzz/gnutls_srp_server_fuzzer.in/c1d3b6bcd4680b59e190a1558e1522f32cf47812 new file mode 100644 index 0000000000..5b55918b6a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c1d3b6bcd4680b59e190a1558e1522f32cf47812 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c2281b1a6afbcf13086b156d6ed587c66afc4c34 b/fuzz/gnutls_srp_server_fuzzer.in/c2281b1a6afbcf13086b156d6ed587c66afc4c34 new file mode 100644 index 0000000000..490b9822b6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c2281b1a6afbcf13086b156d6ed587c66afc4c34 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c3c18d0d8b44aaf52db32723a733ad9b5d5878a0 b/fuzz/gnutls_srp_server_fuzzer.in/c3c18d0d8b44aaf52db32723a733ad9b5d5878a0 new file mode 100644 index 0000000000..27ee03ff1a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c3c18d0d8b44aaf52db32723a733ad9b5d5878a0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c3cf3ef820566bc9eca5a06d4944cbb525cd34b5 b/fuzz/gnutls_srp_server_fuzzer.in/c3cf3ef820566bc9eca5a06d4944cbb525cd34b5 new file mode 100644 index 0000000000..a38f1a8c52 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c3cf3ef820566bc9eca5a06d4944cbb525cd34b5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c44c388868ccff6bf626e7c14de90c1479d5c686 b/fuzz/gnutls_srp_server_fuzzer.in/c44c388868ccff6bf626e7c14de90c1479d5c686 new file mode 100644 index 0000000000..0303581ba2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c44c388868ccff6bf626e7c14de90c1479d5c686 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c4515714dc5d48f9fbac71a50477e4772029aad7 b/fuzz/gnutls_srp_server_fuzzer.in/c4515714dc5d48f9fbac71a50477e4772029aad7 new file mode 100644 index 0000000000..9686ca6587 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c4515714dc5d48f9fbac71a50477e4772029aad7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c4ec2c7ae889de79ee085b891bf75aceeff3fa8e b/fuzz/gnutls_srp_server_fuzzer.in/c4ec2c7ae889de79ee085b891bf75aceeff3fa8e new file mode 100644 index 0000000000..35cff5652f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c4ec2c7ae889de79ee085b891bf75aceeff3fa8e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c505a7742f38c084bb8940f4b8589ebb1197438a b/fuzz/gnutls_srp_server_fuzzer.in/c505a7742f38c084bb8940f4b8589ebb1197438a new file mode 100644 index 0000000000..68b3b36cf4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c505a7742f38c084bb8940f4b8589ebb1197438a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c52a1bcd7b9a15170ed3b60524a33601bf7c7c1e b/fuzz/gnutls_srp_server_fuzzer.in/c52a1bcd7b9a15170ed3b60524a33601bf7c7c1e new file mode 100644 index 0000000000..9aa54ed7fc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c52a1bcd7b9a15170ed3b60524a33601bf7c7c1e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c5f881dfd53fab72a88f36f412742b187057d855 b/fuzz/gnutls_srp_server_fuzzer.in/c5f881dfd53fab72a88f36f412742b187057d855 new file mode 100644 index 0000000000..dd4f7dfd1a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c5f881dfd53fab72a88f36f412742b187057d855 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c6281cdf1d4ecb9306a045f54e392e29fd9cfff9 b/fuzz/gnutls_srp_server_fuzzer.in/c6281cdf1d4ecb9306a045f54e392e29fd9cfff9 new file mode 100644 index 0000000000..46c796a7af Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c6281cdf1d4ecb9306a045f54e392e29fd9cfff9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c629fe2bcbbf3c476a651172cca769841a7e0cdd b/fuzz/gnutls_srp_server_fuzzer.in/c629fe2bcbbf3c476a651172cca769841a7e0cdd new file mode 100644 index 0000000000..ca3fedfae3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c629fe2bcbbf3c476a651172cca769841a7e0cdd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c665b62a271697f3129532cc4cc5f3992f9e2bb3 b/fuzz/gnutls_srp_server_fuzzer.in/c665b62a271697f3129532cc4cc5f3992f9e2bb3 new file mode 100644 index 0000000000..a2b106c11b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c665b62a271697f3129532cc4cc5f3992f9e2bb3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c679b7c2e633212ff1c68a0db86c38b5938fbcc1 b/fuzz/gnutls_srp_server_fuzzer.in/c679b7c2e633212ff1c68a0db86c38b5938fbcc1 new file mode 100644 index 0000000000..e78f9e2f1d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c679b7c2e633212ff1c68a0db86c38b5938fbcc1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c6b50df34574a1230a25c67cdf95eb2e6b34b9e9 b/fuzz/gnutls_srp_server_fuzzer.in/c6b50df34574a1230a25c67cdf95eb2e6b34b9e9 new file mode 100644 index 0000000000..8f2f274d76 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c6b50df34574a1230a25c67cdf95eb2e6b34b9e9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c6babd502a159a20f5731e8a95f93bd00d938ab5 b/fuzz/gnutls_srp_server_fuzzer.in/c6babd502a159a20f5731e8a95f93bd00d938ab5 new file mode 100644 index 0000000000..9c7f453a9a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c6babd502a159a20f5731e8a95f93bd00d938ab5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c716c82293385891d9a541d213dd2095088f7f58 b/fuzz/gnutls_srp_server_fuzzer.in/c716c82293385891d9a541d213dd2095088f7f58 new file mode 100644 index 0000000000..5e03ca0b1b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c716c82293385891d9a541d213dd2095088f7f58 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c718a66ab5ab140a52436c57442240b686a58ecc b/fuzz/gnutls_srp_server_fuzzer.in/c718a66ab5ab140a52436c57442240b686a58ecc new file mode 100644 index 0000000000..598db7333e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c718a66ab5ab140a52436c57442240b686a58ecc differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c73fd320cffbac45c3944390c747825fb9932ea4 b/fuzz/gnutls_srp_server_fuzzer.in/c73fd320cffbac45c3944390c747825fb9932ea4 new file mode 100644 index 0000000000..71e140adf3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c73fd320cffbac45c3944390c747825fb9932ea4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c7db883a36408e6fd358b52f8423caaabf174dc0 b/fuzz/gnutls_srp_server_fuzzer.in/c7db883a36408e6fd358b52f8423caaabf174dc0 new file mode 100644 index 0000000000..34662c149f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c7db883a36408e6fd358b52f8423caaabf174dc0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c7fa19159553e9d3c7c7ca651f7fc86bb7fe2baa b/fuzz/gnutls_srp_server_fuzzer.in/c7fa19159553e9d3c7c7ca651f7fc86bb7fe2baa new file mode 100644 index 0000000000..1759479a91 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c7fa19159553e9d3c7c7ca651f7fc86bb7fe2baa differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c86592e2449ce5640fef0cbfd5e552dd6d41b296 b/fuzz/gnutls_srp_server_fuzzer.in/c86592e2449ce5640fef0cbfd5e552dd6d41b296 new file mode 100644 index 0000000000..e6a9aa51e5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c86592e2449ce5640fef0cbfd5e552dd6d41b296 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c8a2c308abbc238b0ef773d5e9c2a536a06b4d9b b/fuzz/gnutls_srp_server_fuzzer.in/c8a2c308abbc238b0ef773d5e9c2a536a06b4d9b new file mode 100644 index 0000000000..53b1b3fad9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c8a2c308abbc238b0ef773d5e9c2a536a06b4d9b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c91dc7c00cb8d3942fa1934b57b0f71cd6c920b7 b/fuzz/gnutls_srp_server_fuzzer.in/c91dc7c00cb8d3942fa1934b57b0f71cd6c920b7 new file mode 100644 index 0000000000..2cba3bc42a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c91dc7c00cb8d3942fa1934b57b0f71cd6c920b7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c923cd8fd74c9e78479dcf046c2be69882653385 b/fuzz/gnutls_srp_server_fuzzer.in/c923cd8fd74c9e78479dcf046c2be69882653385 new file mode 100644 index 0000000000..4a330c71e2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c923cd8fd74c9e78479dcf046c2be69882653385 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/c949ca05ad28214011486b2c0c1d926946d742a4 b/fuzz/gnutls_srp_server_fuzzer.in/c949ca05ad28214011486b2c0c1d926946d742a4 new file mode 100644 index 0000000000..ab87aeafcc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/c949ca05ad28214011486b2c0c1d926946d742a4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ca51fb50d2dc381417619ab6bb738ed86bffd03c b/fuzz/gnutls_srp_server_fuzzer.in/ca51fb50d2dc381417619ab6bb738ed86bffd03c new file mode 100644 index 0000000000..9df796dd46 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ca51fb50d2dc381417619ab6bb738ed86bffd03c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ca5d06db4425b043f74ebdbb1c8670409c38c527 b/fuzz/gnutls_srp_server_fuzzer.in/ca5d06db4425b043f74ebdbb1c8670409c38c527 new file mode 100644 index 0000000000..f287ff3783 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ca5d06db4425b043f74ebdbb1c8670409c38c527 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ca805aab489e7ab3814a0c20f8a7a850eb35ba60 b/fuzz/gnutls_srp_server_fuzzer.in/ca805aab489e7ab3814a0c20f8a7a850eb35ba60 new file mode 100644 index 0000000000..81129d020b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ca805aab489e7ab3814a0c20f8a7a850eb35ba60 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cae440e33810512e115c925f16daafd73d900da3 b/fuzz/gnutls_srp_server_fuzzer.in/cae440e33810512e115c925f16daafd73d900da3 new file mode 100644 index 0000000000..06c8d6a811 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cae440e33810512e115c925f16daafd73d900da3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cb9cc48f4df6f3c36b4d7fb848e455ce06cfcd08 b/fuzz/gnutls_srp_server_fuzzer.in/cb9cc48f4df6f3c36b4d7fb848e455ce06cfcd08 new file mode 100644 index 0000000000..9129e6f81c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cb9cc48f4df6f3c36b4d7fb848e455ce06cfcd08 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cbad9d4b7b72b6f6abebffe01c7265144a3d46b3 b/fuzz/gnutls_srp_server_fuzzer.in/cbad9d4b7b72b6f6abebffe01c7265144a3d46b3 new file mode 100644 index 0000000000..311a9bf9a5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cbad9d4b7b72b6f6abebffe01c7265144a3d46b3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cc6d466d36918dc1211dce2f79d53fbaad9d8302 b/fuzz/gnutls_srp_server_fuzzer.in/cc6d466d36918dc1211dce2f79d53fbaad9d8302 new file mode 100644 index 0000000000..7ca3cf917c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cc6d466d36918dc1211dce2f79d53fbaad9d8302 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cc92d50d0d561006d8233d7142dce939aaa67fe4 b/fuzz/gnutls_srp_server_fuzzer.in/cc92d50d0d561006d8233d7142dce939aaa67fe4 new file mode 100644 index 0000000000..4550c60d24 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cc92d50d0d561006d8233d7142dce939aaa67fe4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cc9dd26ec4429015638beeb9e96d02162d320cc4 b/fuzz/gnutls_srp_server_fuzzer.in/cc9dd26ec4429015638beeb9e96d02162d320cc4 new file mode 100644 index 0000000000..0db5f636f1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cc9dd26ec4429015638beeb9e96d02162d320cc4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cce6563d86db5375f4356512deac7aa84b9f0498 b/fuzz/gnutls_srp_server_fuzzer.in/cce6563d86db5375f4356512deac7aa84b9f0498 new file mode 100644 index 0000000000..83084f59cf Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cce6563d86db5375f4356512deac7aa84b9f0498 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cd3e560b9e040c892b1396c1b4b4e18a9518032d b/fuzz/gnutls_srp_server_fuzzer.in/cd3e560b9e040c892b1396c1b4b4e18a9518032d new file mode 100644 index 0000000000..e32062abbc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cd3e560b9e040c892b1396c1b4b4e18a9518032d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cd6ca8614c5ceba16416d85b9e10733c3c6199d6 b/fuzz/gnutls_srp_server_fuzzer.in/cd6ca8614c5ceba16416d85b9e10733c3c6199d6 new file mode 100644 index 0000000000..fefee8f9a2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cd6ca8614c5ceba16416d85b9e10733c3c6199d6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cdad0fba9a904659c08b6079aa042f439adcb782 b/fuzz/gnutls_srp_server_fuzzer.in/cdad0fba9a904659c08b6079aa042f439adcb782 new file mode 100644 index 0000000000..19ce8be771 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cdad0fba9a904659c08b6079aa042f439adcb782 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ce2f85395cedefd9d75bd36bfb07bad9a3b0cd73 b/fuzz/gnutls_srp_server_fuzzer.in/ce2f85395cedefd9d75bd36bfb07bad9a3b0cd73 new file mode 100644 index 0000000000..aeeb7587c6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ce2f85395cedefd9d75bd36bfb07bad9a3b0cd73 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ce40cb52326387ff71d87243c388ecf13bf43250 b/fuzz/gnutls_srp_server_fuzzer.in/ce40cb52326387ff71d87243c388ecf13bf43250 new file mode 100644 index 0000000000..7c567c12cb Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ce40cb52326387ff71d87243c388ecf13bf43250 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ce52c3645292a08415f05a5706d3aeb650280487 b/fuzz/gnutls_srp_server_fuzzer.in/ce52c3645292a08415f05a5706d3aeb650280487 new file mode 100644 index 0000000000..242c0b3d07 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ce52c3645292a08415f05a5706d3aeb650280487 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cef06c423e5548a4298996c47be5782007bcc5ed b/fuzz/gnutls_srp_server_fuzzer.in/cef06c423e5548a4298996c47be5782007bcc5ed new file mode 100644 index 0000000000..db2881fb29 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cef06c423e5548a4298996c47be5782007bcc5ed differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cefd6014d462e763258639ad3b92a58e22b017e2 b/fuzz/gnutls_srp_server_fuzzer.in/cefd6014d462e763258639ad3b92a58e22b017e2 new file mode 100644 index 0000000000..cd800a72e0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cefd6014d462e763258639ad3b92a58e22b017e2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cf5f7263bbe5da35d07b96a1dbcdbdb571d98f30 b/fuzz/gnutls_srp_server_fuzzer.in/cf5f7263bbe5da35d07b96a1dbcdbdb571d98f30 new file mode 100644 index 0000000000..113bcca0ac Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cf5f7263bbe5da35d07b96a1dbcdbdb571d98f30 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/cf727767d1826f96640b045bddbec0fc80f03067 b/fuzz/gnutls_srp_server_fuzzer.in/cf727767d1826f96640b045bddbec0fc80f03067 new file mode 100644 index 0000000000..543e0f107c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/cf727767d1826f96640b045bddbec0fc80f03067 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d02caf882bd9c34f7a92ccdcf00f81706f87c6b7 b/fuzz/gnutls_srp_server_fuzzer.in/d02caf882bd9c34f7a92ccdcf00f81706f87c6b7 new file mode 100644 index 0000000000..3b64df5ea4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d02caf882bd9c34f7a92ccdcf00f81706f87c6b7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d076bc8993d531f4d03005a1b460b564b61d210d b/fuzz/gnutls_srp_server_fuzzer.in/d076bc8993d531f4d03005a1b460b564b61d210d new file mode 100644 index 0000000000..3179b8eeca Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d076bc8993d531f4d03005a1b460b564b61d210d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d13beb68a30ac0cc0d36cb1523fcafb538a52cdb b/fuzz/gnutls_srp_server_fuzzer.in/d13beb68a30ac0cc0d36cb1523fcafb538a52cdb new file mode 100644 index 0000000000..9307344315 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d13beb68a30ac0cc0d36cb1523fcafb538a52cdb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d1e94ab3efdb5aa0ab57c3a55a8c87f6d06e5e9d b/fuzz/gnutls_srp_server_fuzzer.in/d1e94ab3efdb5aa0ab57c3a55a8c87f6d06e5e9d new file mode 100644 index 0000000000..fe4bb745a8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d1e94ab3efdb5aa0ab57c3a55a8c87f6d06e5e9d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d2460eb2e7b39e14025d11143834049fbbdcd837 b/fuzz/gnutls_srp_server_fuzzer.in/d2460eb2e7b39e14025d11143834049fbbdcd837 new file mode 100644 index 0000000000..44e401ef4e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d2460eb2e7b39e14025d11143834049fbbdcd837 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d3e482f2c8fa6fdb0de2b3135f89065fd135cfda b/fuzz/gnutls_srp_server_fuzzer.in/d3e482f2c8fa6fdb0de2b3135f89065fd135cfda new file mode 100644 index 0000000000..a37b084a8b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d3e482f2c8fa6fdb0de2b3135f89065fd135cfda differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d46d08114260f9dbb2db9757cb17d6bd58840400 b/fuzz/gnutls_srp_server_fuzzer.in/d46d08114260f9dbb2db9757cb17d6bd58840400 new file mode 100644 index 0000000000..32e20bd0a6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d46d08114260f9dbb2db9757cb17d6bd58840400 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d48be2cd770880076dcacddf404474fa42188426 b/fuzz/gnutls_srp_server_fuzzer.in/d48be2cd770880076dcacddf404474fa42188426 new file mode 100644 index 0000000000..194a630c1c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d48be2cd770880076dcacddf404474fa42188426 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d49845632bf6e1398065b9d5cf6cd250bc2f4108 b/fuzz/gnutls_srp_server_fuzzer.in/d49845632bf6e1398065b9d5cf6cd250bc2f4108 new file mode 100644 index 0000000000..96e36ed54e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d49845632bf6e1398065b9d5cf6cd250bc2f4108 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d4cc1bf54470ebfd03e560de56b41f117cceeac0 b/fuzz/gnutls_srp_server_fuzzer.in/d4cc1bf54470ebfd03e560de56b41f117cceeac0 new file mode 100644 index 0000000000..9b36727c08 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d4cc1bf54470ebfd03e560de56b41f117cceeac0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d53c6ce7bc14ee51379d20f51d093dbf248b11a9 b/fuzz/gnutls_srp_server_fuzzer.in/d53c6ce7bc14ee51379d20f51d093dbf248b11a9 new file mode 100644 index 0000000000..6d22b13075 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d53c6ce7bc14ee51379d20f51d093dbf248b11a9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d570a1e9e04ab871a850f5c609525eeaf6ed0f8b b/fuzz/gnutls_srp_server_fuzzer.in/d570a1e9e04ab871a850f5c609525eeaf6ed0f8b new file mode 100644 index 0000000000..6fd7abf8f3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d570a1e9e04ab871a850f5c609525eeaf6ed0f8b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d6cf27c313055346f40de087e9992e0165701c1f b/fuzz/gnutls_srp_server_fuzzer.in/d6cf27c313055346f40de087e9992e0165701c1f new file mode 100644 index 0000000000..d596a41051 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d6cf27c313055346f40de087e9992e0165701c1f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d74e6c70d2cc4dc7f0fc63f7722782402ba32b7f b/fuzz/gnutls_srp_server_fuzzer.in/d74e6c70d2cc4dc7f0fc63f7722782402ba32b7f new file mode 100644 index 0000000000..3a003a5fbb Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d74e6c70d2cc4dc7f0fc63f7722782402ba32b7f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d77584a87b79dc61f269063a5e3723568321ebb4 b/fuzz/gnutls_srp_server_fuzzer.in/d77584a87b79dc61f269063a5e3723568321ebb4 new file mode 100644 index 0000000000..832caf7ced Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d77584a87b79dc61f269063a5e3723568321ebb4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d878a4afec370c35bdd2a6f02869f2a5228c3584 b/fuzz/gnutls_srp_server_fuzzer.in/d878a4afec370c35bdd2a6f02869f2a5228c3584 new file mode 100644 index 0000000000..0bbff71ad1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d878a4afec370c35bdd2a6f02869f2a5228c3584 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d8a7e0b4ebb94e4451e30970a30df51950b6e16e b/fuzz/gnutls_srp_server_fuzzer.in/d8a7e0b4ebb94e4451e30970a30df51950b6e16e new file mode 100644 index 0000000000..204e56d64b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d8a7e0b4ebb94e4451e30970a30df51950b6e16e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d8ff33fe1c6ac2f09f15aecf085d1238ca76033c b/fuzz/gnutls_srp_server_fuzzer.in/d8ff33fe1c6ac2f09f15aecf085d1238ca76033c new file mode 100644 index 0000000000..eae17dd00f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d8ff33fe1c6ac2f09f15aecf085d1238ca76033c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d913726f0963c1918e5be10a0f1d19aa53b741a0 b/fuzz/gnutls_srp_server_fuzzer.in/d913726f0963c1918e5be10a0f1d19aa53b741a0 new file mode 100644 index 0000000000..54e85289f5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d913726f0963c1918e5be10a0f1d19aa53b741a0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d915c010cd30e0a4de372b6245f21df7af863e04 b/fuzz/gnutls_srp_server_fuzzer.in/d915c010cd30e0a4de372b6245f21df7af863e04 new file mode 100644 index 0000000000..31ae8aa2b1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d915c010cd30e0a4de372b6245f21df7af863e04 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d9247f6e0d7e8452f21c17a080bfdc8f676b1e31 b/fuzz/gnutls_srp_server_fuzzer.in/d9247f6e0d7e8452f21c17a080bfdc8f676b1e31 new file mode 100644 index 0000000000..73fc87857f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d9247f6e0d7e8452f21c17a080bfdc8f676b1e31 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d95368f956bdcd390df61b716e28f74776964c6b b/fuzz/gnutls_srp_server_fuzzer.in/d95368f956bdcd390df61b716e28f74776964c6b new file mode 100644 index 0000000000..fce1366139 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d95368f956bdcd390df61b716e28f74776964c6b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/d9b216d5530104b4d17547fbcadde9b017043a35 b/fuzz/gnutls_srp_server_fuzzer.in/d9b216d5530104b4d17547fbcadde9b017043a35 new file mode 100644 index 0000000000..59e0911cd1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/d9b216d5530104b4d17547fbcadde9b017043a35 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/daeeed012ddb79a3a2516f57002abdf89858b47e b/fuzz/gnutls_srp_server_fuzzer.in/daeeed012ddb79a3a2516f57002abdf89858b47e new file mode 100644 index 0000000000..0cbd3d171d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/daeeed012ddb79a3a2516f57002abdf89858b47e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/db194cb49e5b7b063a01a39d7148f4fcedf16cd4 b/fuzz/gnutls_srp_server_fuzzer.in/db194cb49e5b7b063a01a39d7148f4fcedf16cd4 new file mode 100644 index 0000000000..5885c93c7c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/db194cb49e5b7b063a01a39d7148f4fcedf16cd4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/db6a4e93297a6b52c5595eab81a1ad929903da28 b/fuzz/gnutls_srp_server_fuzzer.in/db6a4e93297a6b52c5595eab81a1ad929903da28 new file mode 100644 index 0000000000..be6822af65 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/db6a4e93297a6b52c5595eab81a1ad929903da28 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/dbc0e86aa4053e60c848a5b837d565a9e346609d b/fuzz/gnutls_srp_server_fuzzer.in/dbc0e86aa4053e60c848a5b837d565a9e346609d new file mode 100644 index 0000000000..85985a9b63 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/dbc0e86aa4053e60c848a5b837d565a9e346609d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/dbe0e1a655e23f6ae32df93140f17dfc1b1e08dc b/fuzz/gnutls_srp_server_fuzzer.in/dbe0e1a655e23f6ae32df93140f17dfc1b1e08dc new file mode 100644 index 0000000000..9cc00198a4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/dbe0e1a655e23f6ae32df93140f17dfc1b1e08dc differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/dc31d24b1f1cb4854b22aff2f5c4dc19ecafbed0 b/fuzz/gnutls_srp_server_fuzzer.in/dc31d24b1f1cb4854b22aff2f5c4dc19ecafbed0 new file mode 100644 index 0000000000..803afba9bc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/dc31d24b1f1cb4854b22aff2f5c4dc19ecafbed0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/dc783446c9fd5eadc5edcdef318bc00dc4629b59 b/fuzz/gnutls_srp_server_fuzzer.in/dc783446c9fd5eadc5edcdef318bc00dc4629b59 new file mode 100644 index 0000000000..e32ea68c5b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/dc783446c9fd5eadc5edcdef318bc00dc4629b59 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/dd226bd577c43ef2a083bf469f9c2164fe0e239b b/fuzz/gnutls_srp_server_fuzzer.in/dd226bd577c43ef2a083bf469f9c2164fe0e239b new file mode 100644 index 0000000000..f7c4cb389f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/dd226bd577c43ef2a083bf469f9c2164fe0e239b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/dd4f60208b2b4568c2c4dc455d99dc983df58f1d b/fuzz/gnutls_srp_server_fuzzer.in/dd4f60208b2b4568c2c4dc455d99dc983df58f1d new file mode 100644 index 0000000000..b19bbfc7ac Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/dd4f60208b2b4568c2c4dc455d99dc983df58f1d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/dda021160d9a53a78ffad49bee9280d9a8834cd7 b/fuzz/gnutls_srp_server_fuzzer.in/dda021160d9a53a78ffad49bee9280d9a8834cd7 new file mode 100644 index 0000000000..b9bf7ed543 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/dda021160d9a53a78ffad49bee9280d9a8834cd7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/dda7e64b2ae8c8a59379a456e36bb960b9ed1ae9 b/fuzz/gnutls_srp_server_fuzzer.in/dda7e64b2ae8c8a59379a456e36bb960b9ed1ae9 new file mode 100644 index 0000000000..039833e665 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/dda7e64b2ae8c8a59379a456e36bb960b9ed1ae9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/de392fc875ff897ff082cbc317f190da9b1278d1 b/fuzz/gnutls_srp_server_fuzzer.in/de392fc875ff897ff082cbc317f190da9b1278d1 new file mode 100644 index 0000000000..18da6f159e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/de392fc875ff897ff082cbc317f190da9b1278d1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/de44ed9b6f34eec3a0c9ed96c1421d1049b386cc b/fuzz/gnutls_srp_server_fuzzer.in/de44ed9b6f34eec3a0c9ed96c1421d1049b386cc new file mode 100644 index 0000000000..5687030eef Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/de44ed9b6f34eec3a0c9ed96c1421d1049b386cc differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/dea99d7e52be8bbc1b3e3e43fad7c27a206c71d4 b/fuzz/gnutls_srp_server_fuzzer.in/dea99d7e52be8bbc1b3e3e43fad7c27a206c71d4 new file mode 100644 index 0000000000..aaf7d66a76 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/dea99d7e52be8bbc1b3e3e43fad7c27a206c71d4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/df17600e44bbb427ed1f90ca7ee29162e19bc2d1 b/fuzz/gnutls_srp_server_fuzzer.in/df17600e44bbb427ed1f90ca7ee29162e19bc2d1 new file mode 100644 index 0000000000..bde34ef914 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/df17600e44bbb427ed1f90ca7ee29162e19bc2d1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/df2aa418ebcb466c64370ccf2a6b1cfeddb18a6c b/fuzz/gnutls_srp_server_fuzzer.in/df2aa418ebcb466c64370ccf2a6b1cfeddb18a6c new file mode 100644 index 0000000000..bc22b055b3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/df2aa418ebcb466c64370ccf2a6b1cfeddb18a6c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/df2f18e9b5e94770d41e837669ba51ed41417afd b/fuzz/gnutls_srp_server_fuzzer.in/df2f18e9b5e94770d41e837669ba51ed41417afd new file mode 100644 index 0000000000..76b9b8a378 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/df2f18e9b5e94770d41e837669ba51ed41417afd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/df4a8463358b927319119051b46aaf84ea9bc1d7 b/fuzz/gnutls_srp_server_fuzzer.in/df4a8463358b927319119051b46aaf84ea9bc1d7 new file mode 100644 index 0000000000..4c4cfcb54b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/df4a8463358b927319119051b46aaf84ea9bc1d7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/df501aa2838bc9d96eee38fbe14b21bdf35c38aa b/fuzz/gnutls_srp_server_fuzzer.in/df501aa2838bc9d96eee38fbe14b21bdf35c38aa new file mode 100644 index 0000000000..4f53ecbc8e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/df501aa2838bc9d96eee38fbe14b21bdf35c38aa differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/df82f71b42a580c450fa574173a439e5b681ceaf b/fuzz/gnutls_srp_server_fuzzer.in/df82f71b42a580c450fa574173a439e5b681ceaf new file mode 100644 index 0000000000..49f4e05162 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/df82f71b42a580c450fa574173a439e5b681ceaf differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/df838260b1770d33c7491f4a5d00346a8f974488 b/fuzz/gnutls_srp_server_fuzzer.in/df838260b1770d33c7491f4a5d00346a8f974488 new file mode 100644 index 0000000000..e3d2f65d10 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/df838260b1770d33c7491f4a5d00346a8f974488 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e00d55d0c1ea6bc8df7d44ed8c0879390b920c46 b/fuzz/gnutls_srp_server_fuzzer.in/e00d55d0c1ea6bc8df7d44ed8c0879390b920c46 new file mode 100644 index 0000000000..d936c2efa0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e00d55d0c1ea6bc8df7d44ed8c0879390b920c46 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e011cf005aa0d4f9bb13fea7d7231560db0399b9 b/fuzz/gnutls_srp_server_fuzzer.in/e011cf005aa0d4f9bb13fea7d7231560db0399b9 new file mode 100644 index 0000000000..ba80086f70 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e011cf005aa0d4f9bb13fea7d7231560db0399b9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e0c06fbfc253bcae9bf5ec81b15a8af23f16da07 b/fuzz/gnutls_srp_server_fuzzer.in/e0c06fbfc253bcae9bf5ec81b15a8af23f16da07 new file mode 100644 index 0000000000..179e213b5c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e0c06fbfc253bcae9bf5ec81b15a8af23f16da07 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e144e99cd047770bfcff99758116491346e06a38 b/fuzz/gnutls_srp_server_fuzzer.in/e144e99cd047770bfcff99758116491346e06a38 new file mode 100644 index 0000000000..4cd5f614d5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e144e99cd047770bfcff99758116491346e06a38 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e153b8fe6df23c0fcef62d2d186129a4a00a8998 b/fuzz/gnutls_srp_server_fuzzer.in/e153b8fe6df23c0fcef62d2d186129a4a00a8998 new file mode 100644 index 0000000000..14adea61a5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e153b8fe6df23c0fcef62d2d186129a4a00a8998 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e15c6e87ba824cee434e14030c70442093eeeb70 b/fuzz/gnutls_srp_server_fuzzer.in/e15c6e87ba824cee434e14030c70442093eeeb70 new file mode 100644 index 0000000000..1c4f777904 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e15c6e87ba824cee434e14030c70442093eeeb70 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e176111e575707206ee9a6862107c5a77d308779 b/fuzz/gnutls_srp_server_fuzzer.in/e176111e575707206ee9a6862107c5a77d308779 new file mode 100644 index 0000000000..5e24cdab0b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e176111e575707206ee9a6862107c5a77d308779 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e18c94cfc2e9938ce444de9044504d35e2cc8068 b/fuzz/gnutls_srp_server_fuzzer.in/e18c94cfc2e9938ce444de9044504d35e2cc8068 new file mode 100644 index 0000000000..20bb6555a1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e18c94cfc2e9938ce444de9044504d35e2cc8068 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e1aec54f8b5251f901caee0c94df5ea8876f8554 b/fuzz/gnutls_srp_server_fuzzer.in/e1aec54f8b5251f901caee0c94df5ea8876f8554 new file mode 100644 index 0000000000..0815538933 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e1aec54f8b5251f901caee0c94df5ea8876f8554 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e1d2c7016e7210db4bd56ce590c9db23301ae6db b/fuzz/gnutls_srp_server_fuzzer.in/e1d2c7016e7210db4bd56ce590c9db23301ae6db new file mode 100644 index 0000000000..b2485019b0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e1d2c7016e7210db4bd56ce590c9db23301ae6db differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e25058a3e21d2b6a85a5d2ca5f0be314ef01ba52 b/fuzz/gnutls_srp_server_fuzzer.in/e25058a3e21d2b6a85a5d2ca5f0be314ef01ba52 new file mode 100644 index 0000000000..7ba8308647 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e25058a3e21d2b6a85a5d2ca5f0be314ef01ba52 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e27f052fc80efb7b4e82cffe780a57085023819f b/fuzz/gnutls_srp_server_fuzzer.in/e27f052fc80efb7b4e82cffe780a57085023819f new file mode 100644 index 0000000000..33c2ab7157 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e27f052fc80efb7b4e82cffe780a57085023819f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e2bd4c09e969f5da76177c76435c1f5147fedee6 b/fuzz/gnutls_srp_server_fuzzer.in/e2bd4c09e969f5da76177c76435c1f5147fedee6 new file mode 100644 index 0000000000..91ea6bb6d4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e2bd4c09e969f5da76177c76435c1f5147fedee6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e2ec8d7267ad245b516d6520dbdc5a018ba260c6 b/fuzz/gnutls_srp_server_fuzzer.in/e2ec8d7267ad245b516d6520dbdc5a018ba260c6 new file mode 100644 index 0000000000..e9d07abe2f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e2ec8d7267ad245b516d6520dbdc5a018ba260c6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e311a81434a8c9c2b5bea17074d297850ee2fff7 b/fuzz/gnutls_srp_server_fuzzer.in/e311a81434a8c9c2b5bea17074d297850ee2fff7 new file mode 100644 index 0000000000..5cfa381d39 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e311a81434a8c9c2b5bea17074d297850ee2fff7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e381e92484583b8b6382db229a7a42b4c6718e84 b/fuzz/gnutls_srp_server_fuzzer.in/e381e92484583b8b6382db229a7a42b4c6718e84 new file mode 100644 index 0000000000..e59d9706e5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e381e92484583b8b6382db229a7a42b4c6718e84 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e3d77981cfc84108d296121590fceaf920124f43 b/fuzz/gnutls_srp_server_fuzzer.in/e3d77981cfc84108d296121590fceaf920124f43 new file mode 100644 index 0000000000..842715ab6f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e3d77981cfc84108d296121590fceaf920124f43 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e3fb9a9adb25ab449742ffb4681934be07786f53 b/fuzz/gnutls_srp_server_fuzzer.in/e3fb9a9adb25ab449742ffb4681934be07786f53 new file mode 100644 index 0000000000..c10cabb1a5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e3fb9a9adb25ab449742ffb4681934be07786f53 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e3fffa77099f462c699a678692034fa1459158ec b/fuzz/gnutls_srp_server_fuzzer.in/e3fffa77099f462c699a678692034fa1459158ec new file mode 100644 index 0000000000..e94150e567 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e3fffa77099f462c699a678692034fa1459158ec differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e4869c4d3f387b39057400f28de3c11f08a114e8 b/fuzz/gnutls_srp_server_fuzzer.in/e4869c4d3f387b39057400f28de3c11f08a114e8 new file mode 100644 index 0000000000..6765ef8f33 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e4869c4d3f387b39057400f28de3c11f08a114e8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e4be511976ae7f9af6607d29c29adb15eaf22566 b/fuzz/gnutls_srp_server_fuzzer.in/e4be511976ae7f9af6607d29c29adb15eaf22566 new file mode 100644 index 0000000000..66af026968 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e4be511976ae7f9af6607d29c29adb15eaf22566 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e5367918c09a666b7299888f3f799aa499c8fcd1 b/fuzz/gnutls_srp_server_fuzzer.in/e5367918c09a666b7299888f3f799aa499c8fcd1 new file mode 100644 index 0000000000..623d52022f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e5367918c09a666b7299888f3f799aa499c8fcd1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e54cc609fcbbaf9578d1113341bcbd94c6401493 b/fuzz/gnutls_srp_server_fuzzer.in/e54cc609fcbbaf9578d1113341bcbd94c6401493 new file mode 100644 index 0000000000..0bf6c1b85e Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e54cc609fcbbaf9578d1113341bcbd94c6401493 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e6295fb30734a8e215327016eeecb642fe92fbf7 b/fuzz/gnutls_srp_server_fuzzer.in/e6295fb30734a8e215327016eeecb642fe92fbf7 new file mode 100644 index 0000000000..270430f1e9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e6295fb30734a8e215327016eeecb642fe92fbf7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e6496b42c26610043d21c4b53fc1c9fc5690e4e9 b/fuzz/gnutls_srp_server_fuzzer.in/e6496b42c26610043d21c4b53fc1c9fc5690e4e9 new file mode 100644 index 0000000000..420616f043 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e6496b42c26610043d21c4b53fc1c9fc5690e4e9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e72f0e0eab9be9abc221a0ede3d4d2369dbca75e b/fuzz/gnutls_srp_server_fuzzer.in/e72f0e0eab9be9abc221a0ede3d4d2369dbca75e new file mode 100644 index 0000000000..9bcdeb746b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e72f0e0eab9be9abc221a0ede3d4d2369dbca75e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e75751553d6b1b234cea791d1bb68167fab57868 b/fuzz/gnutls_srp_server_fuzzer.in/e75751553d6b1b234cea791d1bb68167fab57868 new file mode 100644 index 0000000000..90b191bb76 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e75751553d6b1b234cea791d1bb68167fab57868 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e764056ac6abc80b190d0cb1f1c3ac2f85dc6f48 b/fuzz/gnutls_srp_server_fuzzer.in/e764056ac6abc80b190d0cb1f1c3ac2f85dc6f48 new file mode 100644 index 0000000000..763005db2f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e764056ac6abc80b190d0cb1f1c3ac2f85dc6f48 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e7a5fe7c38205a862dff134418871ed3a7628534 b/fuzz/gnutls_srp_server_fuzzer.in/e7a5fe7c38205a862dff134418871ed3a7628534 new file mode 100644 index 0000000000..90028a0ef1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e7a5fe7c38205a862dff134418871ed3a7628534 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e7be3720809f2c2216be8995bb83a45ddac5eb67 b/fuzz/gnutls_srp_server_fuzzer.in/e7be3720809f2c2216be8995bb83a45ddac5eb67 new file mode 100644 index 0000000000..0dd947e15c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e7be3720809f2c2216be8995bb83a45ddac5eb67 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e832cfb81d6e284d57d49237481eb07807aef81e b/fuzz/gnutls_srp_server_fuzzer.in/e832cfb81d6e284d57d49237481eb07807aef81e new file mode 100644 index 0000000000..5ce97967c5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e832cfb81d6e284d57d49237481eb07807aef81e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e83da82ac78b9fb26739392f7af3f5d0110581c2 b/fuzz/gnutls_srp_server_fuzzer.in/e83da82ac78b9fb26739392f7af3f5d0110581c2 new file mode 100644 index 0000000000..ea20be60ac Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e83da82ac78b9fb26739392f7af3f5d0110581c2 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e88227f55f93ef4d0578066d8e4e25579553ba55 b/fuzz/gnutls_srp_server_fuzzer.in/e88227f55f93ef4d0578066d8e4e25579553ba55 new file mode 100644 index 0000000000..1eb0290b88 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e88227f55f93ef4d0578066d8e4e25579553ba55 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e93fe5523dd9869f66492204599c0fdce18dbc5d b/fuzz/gnutls_srp_server_fuzzer.in/e93fe5523dd9869f66492204599c0fdce18dbc5d new file mode 100644 index 0000000000..618e0cfcb8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e93fe5523dd9869f66492204599c0fdce18dbc5d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e965568dc2e10f0c3c218401c623fb875044c062 b/fuzz/gnutls_srp_server_fuzzer.in/e965568dc2e10f0c3c218401c623fb875044c062 new file mode 100644 index 0000000000..b512cc83ae Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e965568dc2e10f0c3c218401c623fb875044c062 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e965c6cb669a1ab4b08b6e5bad983f74133daf97 b/fuzz/gnutls_srp_server_fuzzer.in/e965c6cb669a1ab4b08b6e5bad983f74133daf97 new file mode 100644 index 0000000000..18720af528 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e965c6cb669a1ab4b08b6e5bad983f74133daf97 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e971df0807e5f1d8363013e92eba804db0472e75 b/fuzz/gnutls_srp_server_fuzzer.in/e971df0807e5f1d8363013e92eba804db0472e75 new file mode 100644 index 0000000000..36919af4cf Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e971df0807e5f1d8363013e92eba804db0472e75 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e987ca9e880234d9383e27c79ff47899d10f8209 b/fuzz/gnutls_srp_server_fuzzer.in/e987ca9e880234d9383e27c79ff47899d10f8209 new file mode 100644 index 0000000000..84b3f2cad6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e987ca9e880234d9383e27c79ff47899d10f8209 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/e9dbd5bb196486326ff26424404d33eb214dbc1b b/fuzz/gnutls_srp_server_fuzzer.in/e9dbd5bb196486326ff26424404d33eb214dbc1b new file mode 100644 index 0000000000..550ab22193 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/e9dbd5bb196486326ff26424404d33eb214dbc1b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ea0e6eaf0af1430c51964f46f0e9d5cd71fb30ac b/fuzz/gnutls_srp_server_fuzzer.in/ea0e6eaf0af1430c51964f46f0e9d5cd71fb30ac new file mode 100644 index 0000000000..52dcf43399 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ea0e6eaf0af1430c51964f46f0e9d5cd71fb30ac differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ea2b72679920f1628dc72064c0a1e38edec925dc b/fuzz/gnutls_srp_server_fuzzer.in/ea2b72679920f1628dc72064c0a1e38edec925dc new file mode 100644 index 0000000000..db16a77479 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ea2b72679920f1628dc72064c0a1e38edec925dc differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/eac061123a2dd651967328b8ddcb48f9f7b7d635 b/fuzz/gnutls_srp_server_fuzzer.in/eac061123a2dd651967328b8ddcb48f9f7b7d635 new file mode 100644 index 0000000000..304c466a30 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/eac061123a2dd651967328b8ddcb48f9f7b7d635 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ead9d2b7d0ca7006140b5facf67774365c6eacb1 b/fuzz/gnutls_srp_server_fuzzer.in/ead9d2b7d0ca7006140b5facf67774365c6eacb1 new file mode 100644 index 0000000000..dfb15097b8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ead9d2b7d0ca7006140b5facf67774365c6eacb1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/eb0c3cc506a4ccb35a2f7a7b95d83142d3c159f0 b/fuzz/gnutls_srp_server_fuzzer.in/eb0c3cc506a4ccb35a2f7a7b95d83142d3c159f0 new file mode 100644 index 0000000000..c26987bf22 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/eb0c3cc506a4ccb35a2f7a7b95d83142d3c159f0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/eb1bd6fe3c638da713aa7dd2e9305c4925b381d7 b/fuzz/gnutls_srp_server_fuzzer.in/eb1bd6fe3c638da713aa7dd2e9305c4925b381d7 new file mode 100644 index 0000000000..0a3f50b3cc Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/eb1bd6fe3c638da713aa7dd2e9305c4925b381d7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/eb2afbd68c4e5832d60ea9c206d15c0ecbb7d923 b/fuzz/gnutls_srp_server_fuzzer.in/eb2afbd68c4e5832d60ea9c206d15c0ecbb7d923 new file mode 100644 index 0000000000..50cdad8393 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/eb2afbd68c4e5832d60ea9c206d15c0ecbb7d923 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/eb500d06415a2be38e9581ff31beb8a6dfbe9620 b/fuzz/gnutls_srp_server_fuzzer.in/eb500d06415a2be38e9581ff31beb8a6dfbe9620 new file mode 100644 index 0000000000..adcc71acb3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/eb500d06415a2be38e9581ff31beb8a6dfbe9620 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ebb1c8d2b6c45d17ce8e677367063cc9c36a912d b/fuzz/gnutls_srp_server_fuzzer.in/ebb1c8d2b6c45d17ce8e677367063cc9c36a912d new file mode 100644 index 0000000000..3b6e68b599 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ebb1c8d2b6c45d17ce8e677367063cc9c36a912d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ec114cb639e8c885db6a899f71013698eb29c3f9 b/fuzz/gnutls_srp_server_fuzzer.in/ec114cb639e8c885db6a899f71013698eb29c3f9 new file mode 100644 index 0000000000..64a562706a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ec114cb639e8c885db6a899f71013698eb29c3f9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ec3db3780080df112d7d5ccd17edb0be5a77099f b/fuzz/gnutls_srp_server_fuzzer.in/ec3db3780080df112d7d5ccd17edb0be5a77099f new file mode 100644 index 0000000000..942cfbde5b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ec3db3780080df112d7d5ccd17edb0be5a77099f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ec65a51ea223c3435c2f0a0eebc3d6888cd53cd7 b/fuzz/gnutls_srp_server_fuzzer.in/ec65a51ea223c3435c2f0a0eebc3d6888cd53cd7 new file mode 100644 index 0000000000..4b2a46ad52 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ec65a51ea223c3435c2f0a0eebc3d6888cd53cd7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ed28a0fce2532b149662de749ec18dc9fffd7adb b/fuzz/gnutls_srp_server_fuzzer.in/ed28a0fce2532b149662de749ec18dc9fffd7adb new file mode 100644 index 0000000000..f12076ff9a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ed28a0fce2532b149662de749ec18dc9fffd7adb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ee40effd20993229499f6e7afc1e3f2280867f9c b/fuzz/gnutls_srp_server_fuzzer.in/ee40effd20993229499f6e7afc1e3f2280867f9c new file mode 100644 index 0000000000..ca49b4641f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ee40effd20993229499f6e7afc1e3f2280867f9c differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ee53fc08006d97be7516adf1858f5dc1e4a53d1b b/fuzz/gnutls_srp_server_fuzzer.in/ee53fc08006d97be7516adf1858f5dc1e4a53d1b new file mode 100644 index 0000000000..33682cde6c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ee53fc08006d97be7516adf1858f5dc1e4a53d1b differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ef1d3b66e0190a0daf7d7fc8cfaf78aec3dc583a b/fuzz/gnutls_srp_server_fuzzer.in/ef1d3b66e0190a0daf7d7fc8cfaf78aec3dc583a new file mode 100644 index 0000000000..6107cfcd55 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ef1d3b66e0190a0daf7d7fc8cfaf78aec3dc583a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ef4fc8bcbae6296525c880e94d1bc8fb138db4a1 b/fuzz/gnutls_srp_server_fuzzer.in/ef4fc8bcbae6296525c880e94d1bc8fb138db4a1 new file mode 100644 index 0000000000..f63e2ea10c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ef4fc8bcbae6296525c880e94d1bc8fb138db4a1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/efb24fc5e86feefbc86b9987a4b08c4797d026d5 b/fuzz/gnutls_srp_server_fuzzer.in/efb24fc5e86feefbc86b9987a4b08c4797d026d5 new file mode 100644 index 0000000000..efe470064b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/efb24fc5e86feefbc86b9987a4b08c4797d026d5 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/efc8b1a6cc3b6bd8fa87a1afbf6b4f10779934bd b/fuzz/gnutls_srp_server_fuzzer.in/efc8b1a6cc3b6bd8fa87a1afbf6b4f10779934bd new file mode 100644 index 0000000000..a509f307a5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/efc8b1a6cc3b6bd8fa87a1afbf6b4f10779934bd differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f0add59ea9186c1ec2a493e80fe33195ecccedc8 b/fuzz/gnutls_srp_server_fuzzer.in/f0add59ea9186c1ec2a493e80fe33195ecccedc8 new file mode 100644 index 0000000000..d3500cfa96 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f0add59ea9186c1ec2a493e80fe33195ecccedc8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f190f89a9ef3a252e93daf73e597c3ec8ae8c621 b/fuzz/gnutls_srp_server_fuzzer.in/f190f89a9ef3a252e93daf73e597c3ec8ae8c621 new file mode 100644 index 0000000000..b4106f7ec9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f190f89a9ef3a252e93daf73e597c3ec8ae8c621 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f1ab6f7d7b01c90fe3c891a702669684a1f82546 b/fuzz/gnutls_srp_server_fuzzer.in/f1ab6f7d7b01c90fe3c891a702669684a1f82546 new file mode 100644 index 0000000000..ae1f3ecc32 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f1ab6f7d7b01c90fe3c891a702669684a1f82546 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f1b1f28556ee0267970f1fcc60d7b214ffadb723 b/fuzz/gnutls_srp_server_fuzzer.in/f1b1f28556ee0267970f1fcc60d7b214ffadb723 new file mode 100644 index 0000000000..78b2e60c93 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f1b1f28556ee0267970f1fcc60d7b214ffadb723 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f1cd36043ed8ff81b85b6c441668d308639985e1 b/fuzz/gnutls_srp_server_fuzzer.in/f1cd36043ed8ff81b85b6c441668d308639985e1 new file mode 100644 index 0000000000..a74387cd2b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f1cd36043ed8ff81b85b6c441668d308639985e1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f1e8d87e178b853389b7c9fa9c014232636dfd06 b/fuzz/gnutls_srp_server_fuzzer.in/f1e8d87e178b853389b7c9fa9c014232636dfd06 new file mode 100644 index 0000000000..4b3f0ecd02 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f1e8d87e178b853389b7c9fa9c014232636dfd06 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f2e6b4292dab0fe6fb18751aeda6ddf0e1dd2977 b/fuzz/gnutls_srp_server_fuzzer.in/f2e6b4292dab0fe6fb18751aeda6ddf0e1dd2977 new file mode 100644 index 0000000000..62beaafd1c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f2e6b4292dab0fe6fb18751aeda6ddf0e1dd2977 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f35b32ed5382b95dd0e319ff7537aa8aaa72b9ba b/fuzz/gnutls_srp_server_fuzzer.in/f35b32ed5382b95dd0e319ff7537aa8aaa72b9ba new file mode 100644 index 0000000000..5a9144bc2f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f35b32ed5382b95dd0e319ff7537aa8aaa72b9ba differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f375969a666be6eb8b095f486bfed36c56354f71 b/fuzz/gnutls_srp_server_fuzzer.in/f375969a666be6eb8b095f486bfed36c56354f71 new file mode 100644 index 0000000000..da1c54ee55 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f375969a666be6eb8b095f486bfed36c56354f71 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f3cccb9ef81d718640cc1a505f7d7fafcb2cecae b/fuzz/gnutls_srp_server_fuzzer.in/f3cccb9ef81d718640cc1a505f7d7fafcb2cecae new file mode 100644 index 0000000000..24bd79110b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f3cccb9ef81d718640cc1a505f7d7fafcb2cecae differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f42ba36b71459a722b0c3be2bc1b56dcfbc213e8 b/fuzz/gnutls_srp_server_fuzzer.in/f42ba36b71459a722b0c3be2bc1b56dcfbc213e8 new file mode 100644 index 0000000000..4c6c30ab7b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f42ba36b71459a722b0c3be2bc1b56dcfbc213e8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f4c63231522758fb8c0a9179fca57a35706bae65 b/fuzz/gnutls_srp_server_fuzzer.in/f4c63231522758fb8c0a9179fca57a35706bae65 new file mode 100644 index 0000000000..cf7d7d6eae Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f4c63231522758fb8c0a9179fca57a35706bae65 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f54e9deba11dc941c20c00aa22202ca9f4c8ce2a b/fuzz/gnutls_srp_server_fuzzer.in/f54e9deba11dc941c20c00aa22202ca9f4c8ce2a new file mode 100644 index 0000000000..a34b1c5649 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f54e9deba11dc941c20c00aa22202ca9f4c8ce2a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f5a66670e59ade1d804da2dd8220424053f55acc b/fuzz/gnutls_srp_server_fuzzer.in/f5a66670e59ade1d804da2dd8220424053f55acc new file mode 100644 index 0000000000..eaf04d59cf Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f5a66670e59ade1d804da2dd8220424053f55acc differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f5d899fad4b9cea1c8d7c17a09906d9a438dbc34 b/fuzz/gnutls_srp_server_fuzzer.in/f5d899fad4b9cea1c8d7c17a09906d9a438dbc34 new file mode 100644 index 0000000000..f0544645fd Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f5d899fad4b9cea1c8d7c17a09906d9a438dbc34 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f64087dbd830ba498028d7142c20fb2436b625d9 b/fuzz/gnutls_srp_server_fuzzer.in/f64087dbd830ba498028d7142c20fb2436b625d9 new file mode 100644 index 0000000000..84df44d633 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f64087dbd830ba498028d7142c20fb2436b625d9 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f653fa7935560f285a35fec17a624fcadf8c679d b/fuzz/gnutls_srp_server_fuzzer.in/f653fa7935560f285a35fec17a624fcadf8c679d new file mode 100644 index 0000000000..4f79bc8ed8 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f653fa7935560f285a35fec17a624fcadf8c679d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f6bbf22694237a6c96dbbc9708b8debf1ad0d1c0 b/fuzz/gnutls_srp_server_fuzzer.in/f6bbf22694237a6c96dbbc9708b8debf1ad0d1c0 new file mode 100644 index 0000000000..bbb16092c9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f6bbf22694237a6c96dbbc9708b8debf1ad0d1c0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f6e3075111c159f791e07975ece5997902ec23d0 b/fuzz/gnutls_srp_server_fuzzer.in/f6e3075111c159f791e07975ece5997902ec23d0 new file mode 100644 index 0000000000..faccf33a81 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f6e3075111c159f791e07975ece5997902ec23d0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f75eb93c44eb078fff63a1393f568e655700665a b/fuzz/gnutls_srp_server_fuzzer.in/f75eb93c44eb078fff63a1393f568e655700665a new file mode 100644 index 0000000000..1890757152 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f75eb93c44eb078fff63a1393f568e655700665a differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f79bb544d3b8629b32211b652973caad2756cfd3 b/fuzz/gnutls_srp_server_fuzzer.in/f79bb544d3b8629b32211b652973caad2756cfd3 new file mode 100644 index 0000000000..99a0bc5501 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f79bb544d3b8629b32211b652973caad2756cfd3 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f7a9b8903145391e8214b1197cf8907680e4ff7f b/fuzz/gnutls_srp_server_fuzzer.in/f7a9b8903145391e8214b1197cf8907680e4ff7f new file mode 100644 index 0000000000..e7d8979063 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f7a9b8903145391e8214b1197cf8907680e4ff7f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f7e4b6bae3169ff02b8b486691d2faf09ba62e97 b/fuzz/gnutls_srp_server_fuzzer.in/f7e4b6bae3169ff02b8b486691d2faf09ba62e97 new file mode 100644 index 0000000000..dc030c2c4a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f7e4b6bae3169ff02b8b486691d2faf09ba62e97 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f7f4f06e0634521dbcb99a72c3c90b6339d6e433 b/fuzz/gnutls_srp_server_fuzzer.in/f7f4f06e0634521dbcb99a72c3c90b6339d6e433 new file mode 100644 index 0000000000..09bc238199 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f7f4f06e0634521dbcb99a72c3c90b6339d6e433 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f868d008cf630c7444db3493acd36a6883cb4d23 b/fuzz/gnutls_srp_server_fuzzer.in/f868d008cf630c7444db3493acd36a6883cb4d23 new file mode 100644 index 0000000000..3ebaf23137 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f868d008cf630c7444db3493acd36a6883cb4d23 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f87d450baf59f36b20cc572a1c6288e96d15e17f b/fuzz/gnutls_srp_server_fuzzer.in/f87d450baf59f36b20cc572a1c6288e96d15e17f new file mode 100644 index 0000000000..8c65eb2df0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f87d450baf59f36b20cc572a1c6288e96d15e17f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/f8b430ca7751940107ce83eb40e59c732e791d33 b/fuzz/gnutls_srp_server_fuzzer.in/f8b430ca7751940107ce83eb40e59c732e791d33 new file mode 100644 index 0000000000..4ae2651569 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/f8b430ca7751940107ce83eb40e59c732e791d33 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fa6e16e7a3c9a99cc1d47c5ac9de0096472148ea b/fuzz/gnutls_srp_server_fuzzer.in/fa6e16e7a3c9a99cc1d47c5ac9de0096472148ea new file mode 100644 index 0000000000..98ccbec360 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fa6e16e7a3c9a99cc1d47c5ac9de0096472148ea differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fb7791c2c825f6c08212b75c66606f8313da138f b/fuzz/gnutls_srp_server_fuzzer.in/fb7791c2c825f6c08212b75c66606f8313da138f new file mode 100644 index 0000000000..6411a7e3e4 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fb7791c2c825f6c08212b75c66606f8313da138f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fc0751811916228c5ffff85eaf6c31e5f033b671 b/fuzz/gnutls_srp_server_fuzzer.in/fc0751811916228c5ffff85eaf6c31e5f033b671 new file mode 100644 index 0000000000..435cfe150c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fc0751811916228c5ffff85eaf6c31e5f033b671 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fc8baf883ff11561bee96f6aec69ed74f0eee2e0 b/fuzz/gnutls_srp_server_fuzzer.in/fc8baf883ff11561bee96f6aec69ed74f0eee2e0 new file mode 100644 index 0000000000..7634fff64f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fc8baf883ff11561bee96f6aec69ed74f0eee2e0 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fca8587fe299fae9f8aaa645887b6a92427415a8 b/fuzz/gnutls_srp_server_fuzzer.in/fca8587fe299fae9f8aaa645887b6a92427415a8 new file mode 100644 index 0000000000..0d509536a2 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fca8587fe299fae9f8aaa645887b6a92427415a8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fcba43c583d400a9a781bc70df811ce47de5eeb4 b/fuzz/gnutls_srp_server_fuzzer.in/fcba43c583d400a9a781bc70df811ce47de5eeb4 new file mode 100644 index 0000000000..b584279405 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fcba43c583d400a9a781bc70df811ce47de5eeb4 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fcbde523337a0e68573d2963b59ec6500219d68e b/fuzz/gnutls_srp_server_fuzzer.in/fcbde523337a0e68573d2963b59ec6500219d68e new file mode 100644 index 0000000000..731d60ae0a Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fcbde523337a0e68573d2963b59ec6500219d68e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fccfd54e877615b523ef9cbc841abc7ce70d8bb8 b/fuzz/gnutls_srp_server_fuzzer.in/fccfd54e877615b523ef9cbc841abc7ce70d8bb8 new file mode 100644 index 0000000000..076ae2d04b Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fccfd54e877615b523ef9cbc841abc7ce70d8bb8 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fcd57a4e2fd92809deab98f32f694ac1a3e3caa7 b/fuzz/gnutls_srp_server_fuzzer.in/fcd57a4e2fd92809deab98f32f694ac1a3e3caa7 new file mode 100644 index 0000000000..b5a875505c Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fcd57a4e2fd92809deab98f32f694ac1a3e3caa7 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fcee2012a29610d93d02909b23129edde05abb31 b/fuzz/gnutls_srp_server_fuzzer.in/fcee2012a29610d93d02909b23129edde05abb31 new file mode 100644 index 0000000000..fd4b2508f3 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fcee2012a29610d93d02909b23129edde05abb31 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fcf46f6b290ee939f79d600048ee7496d1ca5704 b/fuzz/gnutls_srp_server_fuzzer.in/fcf46f6b290ee939f79d600048ee7496d1ca5704 new file mode 100644 index 0000000000..49a169b626 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fcf46f6b290ee939f79d600048ee7496d1ca5704 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fd0bef3d9102f9fa38224cec2d32a5d681d2b1fb b/fuzz/gnutls_srp_server_fuzzer.in/fd0bef3d9102f9fa38224cec2d32a5d681d2b1fb new file mode 100644 index 0000000000..5a3f367371 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fd0bef3d9102f9fa38224cec2d32a5d681d2b1fb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fd18ee7f1ca0436095d723df6d6d6b90a478c889 b/fuzz/gnutls_srp_server_fuzzer.in/fd18ee7f1ca0436095d723df6d6d6b90a478c889 new file mode 100644 index 0000000000..7b45cffd22 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fd18ee7f1ca0436095d723df6d6d6b90a478c889 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fd46c01f0f509476b6c6f73442eb5d6a6639df7f b/fuzz/gnutls_srp_server_fuzzer.in/fd46c01f0f509476b6c6f73442eb5d6a6639df7f new file mode 100644 index 0000000000..3d1b4ce73f Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fd46c01f0f509476b6c6f73442eb5d6a6639df7f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fd78857f1d0b769cc8183a9f4e6c6d996904bc0d b/fuzz/gnutls_srp_server_fuzzer.in/fd78857f1d0b769cc8183a9f4e6c6d996904bc0d new file mode 100644 index 0000000000..07628e1b2d Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fd78857f1d0b769cc8183a9f4e6c6d996904bc0d differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fe2681d2f547cfbd520511e4facd387af76df6fb b/fuzz/gnutls_srp_server_fuzzer.in/fe2681d2f547cfbd520511e4facd387af76df6fb new file mode 100644 index 0000000000..8a3c998a34 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fe2681d2f547cfbd520511e4facd387af76df6fb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fe33498bf8e3bb9dae668fc54f823fb5bb0346d1 b/fuzz/gnutls_srp_server_fuzzer.in/fe33498bf8e3bb9dae668fc54f823fb5bb0346d1 new file mode 100644 index 0000000000..4b4dd9bcb9 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fe33498bf8e3bb9dae668fc54f823fb5bb0346d1 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fe5ff2a8d95597350827369a7f80bc0c75d93abb b/fuzz/gnutls_srp_server_fuzzer.in/fe5ff2a8d95597350827369a7f80bc0c75d93abb new file mode 100644 index 0000000000..0520b410ec Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fe5ff2a8d95597350827369a7f80bc0c75d93abb differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fe6d12eef6cb4acddca563140f2202531b0b7e2e b/fuzz/gnutls_srp_server_fuzzer.in/fe6d12eef6cb4acddca563140f2202531b0b7e2e new file mode 100644 index 0000000000..98266723c1 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fe6d12eef6cb4acddca563140f2202531b0b7e2e differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/fe8a0097f142877cc22b302dcd4cfc106954b10f b/fuzz/gnutls_srp_server_fuzzer.in/fe8a0097f142877cc22b302dcd4cfc106954b10f new file mode 100644 index 0000000000..1e8ab9f9d5 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/fe8a0097f142877cc22b302dcd4cfc106954b10f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ff06855a81f6157ddf5d7a486f1afbe64c22c1bf b/fuzz/gnutls_srp_server_fuzzer.in/ff06855a81f6157ddf5d7a486f1afbe64c22c1bf new file mode 100644 index 0000000000..b63264f386 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ff06855a81f6157ddf5d7a486f1afbe64c22c1bf differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ff2f5d8e81e26e342477a230ea99a5ea879630f6 b/fuzz/gnutls_srp_server_fuzzer.in/ff2f5d8e81e26e342477a230ea99a5ea879630f6 new file mode 100644 index 0000000000..a7a519ac14 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ff2f5d8e81e26e342477a230ea99a5ea879630f6 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ff5999efe7037343664d110e62ef18679d1d9452 b/fuzz/gnutls_srp_server_fuzzer.in/ff5999efe7037343664d110e62ef18679d1d9452 new file mode 100644 index 0000000000..ea4ee957d6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ff5999efe7037343664d110e62ef18679d1d9452 differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ff885fc576c2aeeb7a3e3df28ce2ae6f5d8430af b/fuzz/gnutls_srp_server_fuzzer.in/ff885fc576c2aeeb7a3e3df28ce2ae6f5d8430af new file mode 100644 index 0000000000..230aa40cc6 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ff885fc576c2aeeb7a3e3df28ce2ae6f5d8430af differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ffd545dd5b7b940431db32bba3040462a56e3c6f b/fuzz/gnutls_srp_server_fuzzer.in/ffd545dd5b7b940431db32bba3040462a56e3c6f new file mode 100644 index 0000000000..d10f8bf790 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ffd545dd5b7b940431db32bba3040462a56e3c6f differ diff --git a/fuzz/gnutls_srp_server_fuzzer.in/ffd67155f707e11c86047504beefca0889153c2a b/fuzz/gnutls_srp_server_fuzzer.in/ffd67155f707e11c86047504beefca0889153c2a new file mode 100644 index 0000000000..ca0e5e25b0 Binary files /dev/null and b/fuzz/gnutls_srp_server_fuzzer.in/ffd67155f707e11c86047504beefca0889153c2a differ diff --git a/fuzz/gnutls_x509_crl_parser_fuzzer.c b/fuzz/gnutls_x509_crl_parser_fuzzer.c new file mode 100644 index 0000000000..b306501df2 --- /dev/null +++ b/fuzz/gnutls_x509_crl_parser_fuzzer.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2020 Dmitry Baryshkov + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include +#include + +#include +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw; + gnutls_datum_t out; + gnutls_x509_crl_t crl; + int ret; + + raw.data = (unsigned char *)data; + raw.size = size; + + ret = gnutls_x509_crl_init(&crl); + assert(ret >= 0); + + ret = gnutls_x509_crl_import(crl, &raw, GNUTLS_X509_FMT_DER); + if (ret >= 0) { + ret = gnutls_x509_crl_print(crl, GNUTLS_CRT_PRINT_FULL, &out); + assert(ret >= 0); + gnutls_free(out.data); + } + gnutls_x509_crl_deinit(crl); + + return 0; +} diff --git a/fuzz/gnutls_x509_crl_parser_fuzzer.in/027756c2bcbe9c7e40d84f1d95a1096869d2b88a b/fuzz/gnutls_x509_crl_parser_fuzzer.in/027756c2bcbe9c7e40d84f1d95a1096869d2b88a new file mode 100644 index 0000000000..ceb8b555c6 Binary files /dev/null and b/fuzz/gnutls_x509_crl_parser_fuzzer.in/027756c2bcbe9c7e40d84f1d95a1096869d2b88a differ diff --git a/tests/suite/crl/long.crl b/fuzz/gnutls_x509_crl_parser_fuzzer.in/29ad4c879cc2d31eaf145c7a9dc8e1dfb2510b14 similarity index 100% rename from tests/suite/crl/long.crl rename to fuzz/gnutls_x509_crl_parser_fuzzer.in/29ad4c879cc2d31eaf145c7a9dc8e1dfb2510b14 diff --git a/fuzz/gnutls_x509_crl_parser_fuzzer.in/444a5c0edcfed360801be0cb99e1898e12c218d7 b/fuzz/gnutls_x509_crl_parser_fuzzer.in/444a5c0edcfed360801be0cb99e1898e12c218d7 new file mode 100644 index 0000000000..56c880f737 Binary files /dev/null and b/fuzz/gnutls_x509_crl_parser_fuzzer.in/444a5c0edcfed360801be0cb99e1898e12c218d7 differ diff --git a/fuzz/gnutls_x509_crl_parser_fuzzer.in/48e9607eb3f073f7845690be49b6acd2547d7362 b/fuzz/gnutls_x509_crl_parser_fuzzer.in/48e9607eb3f073f7845690be49b6acd2547d7362 new file mode 100644 index 0000000000..287019cbbd Binary files /dev/null and b/fuzz/gnutls_x509_crl_parser_fuzzer.in/48e9607eb3f073f7845690be49b6acd2547d7362 differ diff --git a/fuzz/gnutls_x509_crl_parser_fuzzer.in/4903c7d58c4077490c7c63d884b9993087298594 b/fuzz/gnutls_x509_crl_parser_fuzzer.in/4903c7d58c4077490c7c63d884b9993087298594 new file mode 100644 index 0000000000..cd46aa1d73 Binary files /dev/null and b/fuzz/gnutls_x509_crl_parser_fuzzer.in/4903c7d58c4077490c7c63d884b9993087298594 differ diff --git a/fuzz/gnutls_x509_crl_parser_fuzzer.in/4f58aabf04b92b0a91c643a80fccf42a22beec50 b/fuzz/gnutls_x509_crl_parser_fuzzer.in/4f58aabf04b92b0a91c643a80fccf42a22beec50 new file mode 100644 index 0000000000..7ab7752000 Binary files /dev/null and b/fuzz/gnutls_x509_crl_parser_fuzzer.in/4f58aabf04b92b0a91c643a80fccf42a22beec50 differ diff --git a/fuzz/gnutls_x509_crl_parser_fuzzer.in/50dca39ea79c6e5d3911d8b44d7328c8bfcfad08 b/fuzz/gnutls_x509_crl_parser_fuzzer.in/50dca39ea79c6e5d3911d8b44d7328c8bfcfad08 new file mode 100644 index 0000000000..2aa75adcb8 Binary files /dev/null and b/fuzz/gnutls_x509_crl_parser_fuzzer.in/50dca39ea79c6e5d3911d8b44d7328c8bfcfad08 differ diff --git a/fuzz/gnutls_x509_crl_parser_fuzzer.in/606fe2f10c22d77172998298d331155c5841fab6 b/fuzz/gnutls_x509_crl_parser_fuzzer.in/606fe2f10c22d77172998298d331155c5841fab6 new file mode 100644 index 0000000000..148b47815d Binary files /dev/null and b/fuzz/gnutls_x509_crl_parser_fuzzer.in/606fe2f10c22d77172998298d331155c5841fab6 differ diff --git a/fuzz/gnutls_x509_crl_parser_fuzzer.in/7ebae215244b160658517bde057f4a3653cbb32c b/fuzz/gnutls_x509_crl_parser_fuzzer.in/7ebae215244b160658517bde057f4a3653cbb32c new file mode 100644 index 0000000000..92ae4584dd Binary files /dev/null and b/fuzz/gnutls_x509_crl_parser_fuzzer.in/7ebae215244b160658517bde057f4a3653cbb32c differ diff --git a/fuzz/gnutls_x509_crl_parser_fuzzer.in/c780cb0ee96a448f5af0e1bb09224674546c723a b/fuzz/gnutls_x509_crl_parser_fuzzer.in/c780cb0ee96a448f5af0e1bb09224674546c723a new file mode 100644 index 0000000000..3823a45aea Binary files /dev/null and b/fuzz/gnutls_x509_crl_parser_fuzzer.in/c780cb0ee96a448f5af0e1bb09224674546c723a differ diff --git a/fuzz/gnutls_x509_crl_parser_fuzzer.repro/698e01fdc3f9a4c402424302768da75f2464a63f b/fuzz/gnutls_x509_crl_parser_fuzzer.repro/698e01fdc3f9a4c402424302768da75f2464a63f new file mode 100644 index 0000000000..9cc53a3e7d Binary files /dev/null and b/fuzz/gnutls_x509_crl_parser_fuzzer.repro/698e01fdc3f9a4c402424302768da75f2464a63f differ diff --git a/fuzz/gnutls_x509_crq_parser_fuzzer.c b/fuzz/gnutls_x509_crq_parser_fuzzer.c new file mode 100644 index 0000000000..4f7ebee78d --- /dev/null +++ b/fuzz/gnutls_x509_crq_parser_fuzzer.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2020 Dmitry Baryshkov + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include +#include + +#include +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw; + gnutls_datum_t out; + gnutls_x509_crq_t crq; + int ret; + + raw.data = (unsigned char *)data; + raw.size = size; + + ret = gnutls_x509_crq_init(&crq); + assert(ret >= 0); + + ret = gnutls_x509_crq_import(crq, &raw, GNUTLS_X509_FMT_DER); + if (ret >= 0) { + ret = gnutls_x509_crq_print(crq, GNUTLS_CRT_PRINT_FULL, &out); + assert(ret >= 0); + gnutls_free(out.data); + } + gnutls_x509_crq_deinit(crq); + + return 0; +} diff --git a/fuzz/gnutls_x509_crq_parser_fuzzer.in/00da5667fcf94c6753aff43d0e8cf7a2c0e28233 b/fuzz/gnutls_x509_crq_parser_fuzzer.in/00da5667fcf94c6753aff43d0e8cf7a2c0e28233 new file mode 100644 index 0000000000..7631bd7e56 Binary files /dev/null and b/fuzz/gnutls_x509_crq_parser_fuzzer.in/00da5667fcf94c6753aff43d0e8cf7a2c0e28233 differ diff --git a/fuzz/gnutls_x509_crq_parser_fuzzer.in/2ac00bb62cce4c5a85ba7d59d167e8cecbfb468d b/fuzz/gnutls_x509_crq_parser_fuzzer.in/2ac00bb62cce4c5a85ba7d59d167e8cecbfb468d new file mode 100644 index 0000000000..b728d2c5ed Binary files /dev/null and b/fuzz/gnutls_x509_crq_parser_fuzzer.in/2ac00bb62cce4c5a85ba7d59d167e8cecbfb468d differ diff --git a/fuzz/gnutls_x509_crq_parser_fuzzer.in/2e7defbf265715d2c2d5ea8bc464071ce19e667a b/fuzz/gnutls_x509_crq_parser_fuzzer.in/2e7defbf265715d2c2d5ea8bc464071ce19e667a new file mode 100644 index 0000000000..2e9e772027 Binary files /dev/null and b/fuzz/gnutls_x509_crq_parser_fuzzer.in/2e7defbf265715d2c2d5ea8bc464071ce19e667a differ diff --git a/fuzz/gnutls_x509_crq_parser_fuzzer.in/9a926fe3e62b45ba45705ef482a04289a942804f b/fuzz/gnutls_x509_crq_parser_fuzzer.in/9a926fe3e62b45ba45705ef482a04289a942804f new file mode 100644 index 0000000000..c15f868bab Binary files /dev/null and b/fuzz/gnutls_x509_crq_parser_fuzzer.in/9a926fe3e62b45ba45705ef482a04289a942804f differ diff --git a/fuzz/gnutls_x509_crq_parser_fuzzer.in/b63e395f3b22408f4c03a9ef249afedb48b64609 b/fuzz/gnutls_x509_crq_parser_fuzzer.in/b63e395f3b22408f4c03a9ef249afedb48b64609 new file mode 100644 index 0000000000..59694b83c4 Binary files /dev/null and b/fuzz/gnutls_x509_crq_parser_fuzzer.in/b63e395f3b22408f4c03a9ef249afedb48b64609 differ diff --git a/fuzz/gnutls_x509_crq_parser_fuzzer.in/d1e497073008aa907e2c79e236234eff7a21e43e b/fuzz/gnutls_x509_crq_parser_fuzzer.in/d1e497073008aa907e2c79e236234eff7a21e43e new file mode 100644 index 0000000000..1bbee926a8 Binary files /dev/null and b/fuzz/gnutls_x509_crq_parser_fuzzer.in/d1e497073008aa907e2c79e236234eff7a21e43e differ diff --git a/fuzz/gnutls_x509_crq_parser_fuzzer.in/d6cb1c75c08f4c6b76d4e37fefca392f403c7c4e b/fuzz/gnutls_x509_crq_parser_fuzzer.in/d6cb1c75c08f4c6b76d4e37fefca392f403c7c4e new file mode 100644 index 0000000000..b5fc84abe7 Binary files /dev/null and b/fuzz/gnutls_x509_crq_parser_fuzzer.in/d6cb1c75c08f4c6b76d4e37fefca392f403c7c4e differ diff --git a/fuzz/gnutls_x509_crq_parser_fuzzer.repro/609921afff38ec5b52feb7e17aa3035bdce0e0d3 b/fuzz/gnutls_x509_crq_parser_fuzzer.repro/609921afff38ec5b52feb7e17aa3035bdce0e0d3 new file mode 100644 index 0000000000..4fe047d3c3 Binary files /dev/null and b/fuzz/gnutls_x509_crq_parser_fuzzer.repro/609921afff38ec5b52feb7e17aa3035bdce0e0d3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.c b/fuzz/gnutls_x509_parser_fuzzer.c new file mode 100644 index 0000000000..87b09c4f71 --- /dev/null +++ b/fuzz/gnutls_x509_parser_fuzzer.c @@ -0,0 +1,56 @@ +/* +# Copyright 2016 Google Inc. +# +# 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 +# +# https://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. +# +################################################################################ +*/ + +#include +#include + +#include +#include + +#include "fuzzer.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw; + gnutls_datum_t out; + gnutls_x509_crt_t crt; + int ret; + + raw.data = (unsigned char *)data; + raw.size = size; + + ret = gnutls_x509_crt_init(&crt); + assert(ret >= 0); + + ret = gnutls_x509_crt_import(crt, &raw, GNUTLS_X509_FMT_DER); + if (ret >= 0) { + ret = gnutls_x509_crt_print(crt, GNUTLS_CRT_PRINT_FULL, &out); + assert(ret >= 0); + gnutls_free(out.data); + } + gnutls_x509_crt_deinit(crt); + + ret = gnutls_x509_crt_init(&crt); + assert(ret >= 0); + + gnutls_x509_crt_set_flags(crt, GNUTLS_X509_CRT_FLAG_IGNORE_SANITY); + gnutls_x509_crt_import(crt, &raw, GNUTLS_X509_FMT_DER); + + gnutls_x509_crt_deinit(crt); + return 0; +} diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/00071be65949a34b7b8d9d1099148da2e3d527e4 b/fuzz/gnutls_x509_parser_fuzzer.in/00071be65949a34b7b8d9d1099148da2e3d527e4 new file mode 100644 index 0000000000..1c19570d00 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/00071be65949a34b7b8d9d1099148da2e3d527e4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/000dc4d67116e50cd1b37fca1cb178bb1e94313a b/fuzz/gnutls_x509_parser_fuzzer.in/000dc4d67116e50cd1b37fca1cb178bb1e94313a new file mode 100644 index 0000000000..bda4aad71b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/000dc4d67116e50cd1b37fca1cb178bb1e94313a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/007f9fdc9d0eab442071106bb5d1db3928fb21f1 b/fuzz/gnutls_x509_parser_fuzzer.in/007f9fdc9d0eab442071106bb5d1db3928fb21f1 new file mode 100644 index 0000000000..d202c1429a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/007f9fdc9d0eab442071106bb5d1db3928fb21f1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/009ee42787b56df76c4d23aa3f1f368a0f16e9e2 b/fuzz/gnutls_x509_parser_fuzzer.in/009ee42787b56df76c4d23aa3f1f368a0f16e9e2 new file mode 100644 index 0000000000..3b7033866d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/009ee42787b56df76c4d23aa3f1f368a0f16e9e2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/00a49426118660052adf9312ca5f0f86ff9d39e8 b/fuzz/gnutls_x509_parser_fuzzer.in/00a49426118660052adf9312ca5f0f86ff9d39e8 new file mode 100644 index 0000000000..27c031fa39 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/00a49426118660052adf9312ca5f0f86ff9d39e8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/00c8d49af8b515db69bcf19411b31533908c35d2 b/fuzz/gnutls_x509_parser_fuzzer.in/00c8d49af8b515db69bcf19411b31533908c35d2 new file mode 100644 index 0000000000..ee952cb490 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/00c8d49af8b515db69bcf19411b31533908c35d2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/00cee7fa7919a4d23e3cb580eb2bd391efb31602 b/fuzz/gnutls_x509_parser_fuzzer.in/00cee7fa7919a4d23e3cb580eb2bd391efb31602 new file mode 100644 index 0000000000..75af3f873c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/00cee7fa7919a4d23e3cb580eb2bd391efb31602 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0154ba711d4cefaf87e61a6943ebdf9b08f044d7 b/fuzz/gnutls_x509_parser_fuzzer.in/0154ba711d4cefaf87e61a6943ebdf9b08f044d7 new file mode 100644 index 0000000000..d6c427bc98 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0154ba711d4cefaf87e61a6943ebdf9b08f044d7 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/01865dcfe78cf1e2da38b79b4731b87c590492e1 b/fuzz/gnutls_x509_parser_fuzzer.in/01865dcfe78cf1e2da38b79b4731b87c590492e1 new file mode 100644 index 0000000000..b0a1e6e776 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/01865dcfe78cf1e2da38b79b4731b87c590492e1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/01f84c1301021280a6d43476f0503287e66395f3 b/fuzz/gnutls_x509_parser_fuzzer.in/01f84c1301021280a6d43476f0503287e66395f3 new file mode 100644 index 0000000000..aa34a3a0e8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/01f84c1301021280a6d43476f0503287e66395f3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/03a9fe8b2547c8e0f6f31b970497e0aba0bc85ee b/fuzz/gnutls_x509_parser_fuzzer.in/03a9fe8b2547c8e0f6f31b970497e0aba0bc85ee new file mode 100644 index 0000000000..242afba189 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/03a9fe8b2547c8e0f6f31b970497e0aba0bc85ee differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/03dd175ab69deaa477df7b3fe83aac0c8fab3a3b b/fuzz/gnutls_x509_parser_fuzzer.in/03dd175ab69deaa477df7b3fe83aac0c8fab3a3b new file mode 100644 index 0000000000..3749cb8a6a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/03dd175ab69deaa477df7b3fe83aac0c8fab3a3b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/03f0ec45e094a841fb3fa0ab794aefcd6cd9a6bb b/fuzz/gnutls_x509_parser_fuzzer.in/03f0ec45e094a841fb3fa0ab794aefcd6cd9a6bb new file mode 100644 index 0000000000..ba3029caa9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/03f0ec45e094a841fb3fa0ab794aefcd6cd9a6bb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/04def7e1286fe74ac71e911496def075d4973792 b/fuzz/gnutls_x509_parser_fuzzer.in/04def7e1286fe74ac71e911496def075d4973792 new file mode 100644 index 0000000000..2396885f81 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/04def7e1286fe74ac71e911496def075d4973792 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/04f77a6cb75e8d519788815696763b56e449aa8f b/fuzz/gnutls_x509_parser_fuzzer.in/04f77a6cb75e8d519788815696763b56e449aa8f new file mode 100644 index 0000000000..fb556d5ffc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/04f77a6cb75e8d519788815696763b56e449aa8f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/05075a448cc1c60fdc5765ed4193cc9503d832dd b/fuzz/gnutls_x509_parser_fuzzer.in/05075a448cc1c60fdc5765ed4193cc9503d832dd new file mode 100644 index 0000000000..a82a0735e6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/05075a448cc1c60fdc5765ed4193cc9503d832dd differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/05a490f2881307d1cbb37c971fd57f602b1aae80 b/fuzz/gnutls_x509_parser_fuzzer.in/05a490f2881307d1cbb37c971fd57f602b1aae80 new file mode 100644 index 0000000000..1c4cafdbaf Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/05a490f2881307d1cbb37c971fd57f602b1aae80 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0619153bcf6095f2bb40feda82ff2274fea1e0ed b/fuzz/gnutls_x509_parser_fuzzer.in/0619153bcf6095f2bb40feda82ff2274fea1e0ed new file mode 100644 index 0000000000..82423251d1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0619153bcf6095f2bb40feda82ff2274fea1e0ed differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/070aa50a52dcb423d719da18b1e92a254ac8f2c3 b/fuzz/gnutls_x509_parser_fuzzer.in/070aa50a52dcb423d719da18b1e92a254ac8f2c3 new file mode 100644 index 0000000000..e79df37b4c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/070aa50a52dcb423d719da18b1e92a254ac8f2c3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/07e5c1fc71bb4de9da670208452b4a11aac0f000 b/fuzz/gnutls_x509_parser_fuzzer.in/07e5c1fc71bb4de9da670208452b4a11aac0f000 new file mode 100644 index 0000000000..cab4bce61a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/07e5c1fc71bb4de9da670208452b4a11aac0f000 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0860aff223355cd701bb07e2e7213e464cbbd3be b/fuzz/gnutls_x509_parser_fuzzer.in/0860aff223355cd701bb07e2e7213e464cbbd3be new file mode 100644 index 0000000000..d6fbc144f1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0860aff223355cd701bb07e2e7213e464cbbd3be differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/08da259bc801bcb59c63019b69b8314d09f5e15d b/fuzz/gnutls_x509_parser_fuzzer.in/08da259bc801bcb59c63019b69b8314d09f5e15d new file mode 100644 index 0000000000..a77c5a2e6f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/08da259bc801bcb59c63019b69b8314d09f5e15d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0953fdd45bb46478f2cbf7df2764d2c2b9433387 b/fuzz/gnutls_x509_parser_fuzzer.in/0953fdd45bb46478f2cbf7df2764d2c2b9433387 new file mode 100644 index 0000000000..1ad16d47bc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0953fdd45bb46478f2cbf7df2764d2c2b9433387 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0995938435bb2d60b7442f8d11bf26a0f7963ffa b/fuzz/gnutls_x509_parser_fuzzer.in/0995938435bb2d60b7442f8d11bf26a0f7963ffa new file mode 100644 index 0000000000..2296a10646 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0995938435bb2d60b7442f8d11bf26a0f7963ffa differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/09bf4b87193aa5ee83a57d0b265baf4ca46e2654 b/fuzz/gnutls_x509_parser_fuzzer.in/09bf4b87193aa5ee83a57d0b265baf4ca46e2654 new file mode 100644 index 0000000000..45dd33d1b6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/09bf4b87193aa5ee83a57d0b265baf4ca46e2654 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/09c76eaa42b7049985d230c3716f0cc1ac06207d b/fuzz/gnutls_x509_parser_fuzzer.in/09c76eaa42b7049985d230c3716f0cc1ac06207d new file mode 100644 index 0000000000..fe510e663c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/09c76eaa42b7049985d230c3716f0cc1ac06207d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0ae42e41c35bfcfdc54541f37e98a18c45558d3c b/fuzz/gnutls_x509_parser_fuzzer.in/0ae42e41c35bfcfdc54541f37e98a18c45558d3c new file mode 100644 index 0000000000..3f964e64bc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0ae42e41c35bfcfdc54541f37e98a18c45558d3c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0b8aa205a8c180b049163ac0aba02e2d51c00a6b b/fuzz/gnutls_x509_parser_fuzzer.in/0b8aa205a8c180b049163ac0aba02e2d51c00a6b new file mode 100644 index 0000000000..fa707cf4d7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0b8aa205a8c180b049163ac0aba02e2d51c00a6b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0bede6a3c3e8fb86405be09551bd23851e62bc2f b/fuzz/gnutls_x509_parser_fuzzer.in/0bede6a3c3e8fb86405be09551bd23851e62bc2f new file mode 100644 index 0000000000..225734dac2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0bede6a3c3e8fb86405be09551bd23851e62bc2f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0ccad410530099a9f214e8ddceabb1a3298166d0 b/fuzz/gnutls_x509_parser_fuzzer.in/0ccad410530099a9f214e8ddceabb1a3298166d0 new file mode 100644 index 0000000000..8e82f91f57 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0ccad410530099a9f214e8ddceabb1a3298166d0 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0d599dd25fab3cdaf2512548b46d7655cb056f3d b/fuzz/gnutls_x509_parser_fuzzer.in/0d599dd25fab3cdaf2512548b46d7655cb056f3d new file mode 100644 index 0000000000..9489e8536c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0d599dd25fab3cdaf2512548b46d7655cb056f3d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0dd153a4e452c4cbb6b9836ceef372a6ea9addb4 b/fuzz/gnutls_x509_parser_fuzzer.in/0dd153a4e452c4cbb6b9836ceef372a6ea9addb4 new file mode 100644 index 0000000000..be82098863 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0dd153a4e452c4cbb6b9836ceef372a6ea9addb4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0dedb1933abf8df5f168f7706da19c7009332f50 b/fuzz/gnutls_x509_parser_fuzzer.in/0dedb1933abf8df5f168f7706da19c7009332f50 new file mode 100644 index 0000000000..5ec23c5605 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0dedb1933abf8df5f168f7706da19c7009332f50 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0ed020c00521eac46e4898f54c5a917623b42b4f b/fuzz/gnutls_x509_parser_fuzzer.in/0ed020c00521eac46e4898f54c5a917623b42b4f new file mode 100644 index 0000000000..eb91290036 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0ed020c00521eac46e4898f54c5a917623b42b4f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0ef560a49562e3276ac0c10fb19e493ad518e6b4 b/fuzz/gnutls_x509_parser_fuzzer.in/0ef560a49562e3276ac0c10fb19e493ad518e6b4 new file mode 100644 index 0000000000..47fa41e233 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0ef560a49562e3276ac0c10fb19e493ad518e6b4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0f1a289397aaf361f2e5e7facef3ec44a041cceb b/fuzz/gnutls_x509_parser_fuzzer.in/0f1a289397aaf361f2e5e7facef3ec44a041cceb new file mode 100644 index 0000000000..b2debadb50 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0f1a289397aaf361f2e5e7facef3ec44a041cceb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/0f1e5c916904e24866155dda3923cccca817644f b/fuzz/gnutls_x509_parser_fuzzer.in/0f1e5c916904e24866155dda3923cccca817644f new file mode 100644 index 0000000000..d743a6dec5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/0f1e5c916904e24866155dda3923cccca817644f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1003b5c0071cbb72adc4dc506ffcdc8bb1af5c91 b/fuzz/gnutls_x509_parser_fuzzer.in/1003b5c0071cbb72adc4dc506ffcdc8bb1af5c91 new file mode 100644 index 0000000000..a03e676132 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1003b5c0071cbb72adc4dc506ffcdc8bb1af5c91 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1037a890fae80779ebd452d04da42eaecab083f9 b/fuzz/gnutls_x509_parser_fuzzer.in/1037a890fae80779ebd452d04da42eaecab083f9 new file mode 100644 index 0000000000..c0b78d7edb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1037a890fae80779ebd452d04da42eaecab083f9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1185bb0f3aed7dfc21aeb8b951c2bc5344bc73e0 b/fuzz/gnutls_x509_parser_fuzzer.in/1185bb0f3aed7dfc21aeb8b951c2bc5344bc73e0 new file mode 100644 index 0000000000..1bd161aa04 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1185bb0f3aed7dfc21aeb8b951c2bc5344bc73e0 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1195ae10aa57ff6893482551ec5201369d1aac45 b/fuzz/gnutls_x509_parser_fuzzer.in/1195ae10aa57ff6893482551ec5201369d1aac45 new file mode 100644 index 0000000000..02cc350e72 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1195ae10aa57ff6893482551ec5201369d1aac45 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/11cd83ce14870f70075d3e83871a93c9ab05b17d b/fuzz/gnutls_x509_parser_fuzzer.in/11cd83ce14870f70075d3e83871a93c9ab05b17d new file mode 100644 index 0000000000..37c6a7cf75 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/11cd83ce14870f70075d3e83871a93c9ab05b17d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/11d7056af92fb99c931673269078dd88ff5f6a7f b/fuzz/gnutls_x509_parser_fuzzer.in/11d7056af92fb99c931673269078dd88ff5f6a7f new file mode 100644 index 0000000000..ed4b6ead99 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/11d7056af92fb99c931673269078dd88ff5f6a7f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/11d71882ffd964ec4ebe880661330650bffacec9 b/fuzz/gnutls_x509_parser_fuzzer.in/11d71882ffd964ec4ebe880661330650bffacec9 new file mode 100644 index 0000000000..6b7dcf356d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/11d71882ffd964ec4ebe880661330650bffacec9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/126987a4764320a165d5c31137b0c864657e2b20 b/fuzz/gnutls_x509_parser_fuzzer.in/126987a4764320a165d5c31137b0c864657e2b20 new file mode 100644 index 0000000000..5f82092606 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/126987a4764320a165d5c31137b0c864657e2b20 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/127112d4e50ff726d6709a03f60da34c2f51f219 b/fuzz/gnutls_x509_parser_fuzzer.in/127112d4e50ff726d6709a03f60da34c2f51f219 new file mode 100644 index 0000000000..a8b264b5d5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/127112d4e50ff726d6709a03f60da34c2f51f219 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1326f4848e6f962fd429393eb5d7253371f637d2 b/fuzz/gnutls_x509_parser_fuzzer.in/1326f4848e6f962fd429393eb5d7253371f637d2 new file mode 100644 index 0000000000..1b08490e8d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1326f4848e6f962fd429393eb5d7253371f637d2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/148d8cc93a58784d00d9da18352780c136731cca b/fuzz/gnutls_x509_parser_fuzzer.in/148d8cc93a58784d00d9da18352780c136731cca new file mode 100644 index 0000000000..52d9e4e00d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/148d8cc93a58784d00d9da18352780c136731cca differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/152f4d903dc51d79cb864b56a037d631e9277deb b/fuzz/gnutls_x509_parser_fuzzer.in/152f4d903dc51d79cb864b56a037d631e9277deb new file mode 100644 index 0000000000..d9fdea2c8a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/152f4d903dc51d79cb864b56a037d631e9277deb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1543551b33f2ad5c75fc59abed42e14871b67e61 b/fuzz/gnutls_x509_parser_fuzzer.in/1543551b33f2ad5c75fc59abed42e14871b67e61 new file mode 100644 index 0000000000..8ec370ec9a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1543551b33f2ad5c75fc59abed42e14871b67e61 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1563f6e7b987b63264d89b041ee94305ee2975e5 b/fuzz/gnutls_x509_parser_fuzzer.in/1563f6e7b987b63264d89b041ee94305ee2975e5 new file mode 100644 index 0000000000..939ee46ebc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1563f6e7b987b63264d89b041ee94305ee2975e5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1644c4bbcbd78b899d62d6de77a62215fa51b590 b/fuzz/gnutls_x509_parser_fuzzer.in/1644c4bbcbd78b899d62d6de77a62215fa51b590 new file mode 100644 index 0000000000..0b0b6634b2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1644c4bbcbd78b899d62d6de77a62215fa51b590 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/16904a61b72681039ecae6fcf2e42a882101f005 b/fuzz/gnutls_x509_parser_fuzzer.in/16904a61b72681039ecae6fcf2e42a882101f005 new file mode 100644 index 0000000000..68ae4974b6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/16904a61b72681039ecae6fcf2e42a882101f005 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/16c5e160286c63d2bc752d39449f7aa8e4eed592 b/fuzz/gnutls_x509_parser_fuzzer.in/16c5e160286c63d2bc752d39449f7aa8e4eed592 new file mode 100644 index 0000000000..1a49da65d9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/16c5e160286c63d2bc752d39449f7aa8e4eed592 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/16c905f8c5b74ce30fda12bcdcfcc14fb556fcd2 b/fuzz/gnutls_x509_parser_fuzzer.in/16c905f8c5b74ce30fda12bcdcfcc14fb556fcd2 new file mode 100644 index 0000000000..8501f23c8a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/16c905f8c5b74ce30fda12bcdcfcc14fb556fcd2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/18009605940de7760ba605d540905985562b15a1 b/fuzz/gnutls_x509_parser_fuzzer.in/18009605940de7760ba605d540905985562b15a1 new file mode 100644 index 0000000000..f30305e49e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/18009605940de7760ba605d540905985562b15a1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/180b8e3fb048d794d83d324fc262cd7d3e4d2bc9 b/fuzz/gnutls_x509_parser_fuzzer.in/180b8e3fb048d794d83d324fc262cd7d3e4d2bc9 new file mode 100644 index 0000000000..82b68c91ac Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/180b8e3fb048d794d83d324fc262cd7d3e4d2bc9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/18c62dd6e2c188f17f9c07ae9f43dc911f9f1367 b/fuzz/gnutls_x509_parser_fuzzer.in/18c62dd6e2c188f17f9c07ae9f43dc911f9f1367 new file mode 100644 index 0000000000..89b96c89aa Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/18c62dd6e2c188f17f9c07ae9f43dc911f9f1367 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/19c4ff5b7bd2756ef6aa3f7333cb54b427bdfb5b b/fuzz/gnutls_x509_parser_fuzzer.in/19c4ff5b7bd2756ef6aa3f7333cb54b427bdfb5b new file mode 100644 index 0000000000..8d3e820bcc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/19c4ff5b7bd2756ef6aa3f7333cb54b427bdfb5b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1a3fa2bb07dc2d7ccaf440a483645732a5e6b110 b/fuzz/gnutls_x509_parser_fuzzer.in/1a3fa2bb07dc2d7ccaf440a483645732a5e6b110 new file mode 100644 index 0000000000..566d5d84b2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1a3fa2bb07dc2d7ccaf440a483645732a5e6b110 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1b073618f52592e3262e70a59f1c4bd063a275b6 b/fuzz/gnutls_x509_parser_fuzzer.in/1b073618f52592e3262e70a59f1c4bd063a275b6 new file mode 100644 index 0000000000..bd083ac83b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1b073618f52592e3262e70a59f1c4bd063a275b6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1b17ccad27de4d2fd9b0522f2be1ad6bfd8d19a9 b/fuzz/gnutls_x509_parser_fuzzer.in/1b17ccad27de4d2fd9b0522f2be1ad6bfd8d19a9 new file mode 100644 index 0000000000..8b07c93cd7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1b17ccad27de4d2fd9b0522f2be1ad6bfd8d19a9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1bb850dae4200cd5ddca2cb65113d1aacb672414 b/fuzz/gnutls_x509_parser_fuzzer.in/1bb850dae4200cd5ddca2cb65113d1aacb672414 new file mode 100644 index 0000000000..f3b10b81e3 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1bb850dae4200cd5ddca2cb65113d1aacb672414 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1cbb5aee2af39ee824e19724b2c686d9ded3e446 b/fuzz/gnutls_x509_parser_fuzzer.in/1cbb5aee2af39ee824e19724b2c686d9ded3e446 new file mode 100644 index 0000000000..a5ef79cfcf Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1cbb5aee2af39ee824e19724b2c686d9ded3e446 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1cf038009e16bb97ca7a975d1a23d71de313eb34 b/fuzz/gnutls_x509_parser_fuzzer.in/1cf038009e16bb97ca7a975d1a23d71de313eb34 new file mode 100644 index 0000000000..fc93f7df15 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1cf038009e16bb97ca7a975d1a23d71de313eb34 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1d6b8ddc0500a7666f8f67c339b0b874d028e104 b/fuzz/gnutls_x509_parser_fuzzer.in/1d6b8ddc0500a7666f8f67c339b0b874d028e104 new file mode 100644 index 0000000000..5bbf6c9066 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1d6b8ddc0500a7666f8f67c339b0b874d028e104 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1e0268b30d3fec32757f04efc6637c9b8d406f16 b/fuzz/gnutls_x509_parser_fuzzer.in/1e0268b30d3fec32757f04efc6637c9b8d406f16 new file mode 100644 index 0000000000..6bfe2643b7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1e0268b30d3fec32757f04efc6637c9b8d406f16 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1e13f5abec9e0ecf1aebab088b0c00bc8ef061cc b/fuzz/gnutls_x509_parser_fuzzer.in/1e13f5abec9e0ecf1aebab088b0c00bc8ef061cc new file mode 100644 index 0000000000..d0a6e8ece3 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1e13f5abec9e0ecf1aebab088b0c00bc8ef061cc differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1f19858338999954f4c60f518e357fb9b36ec77d b/fuzz/gnutls_x509_parser_fuzzer.in/1f19858338999954f4c60f518e357fb9b36ec77d new file mode 100644 index 0000000000..c0c1c34bec Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1f19858338999954f4c60f518e357fb9b36ec77d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1f1e60c67f60d7ed8a39ae34d326818e33fb688c b/fuzz/gnutls_x509_parser_fuzzer.in/1f1e60c67f60d7ed8a39ae34d326818e33fb688c new file mode 100644 index 0000000000..a1aa1483bd Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1f1e60c67f60d7ed8a39ae34d326818e33fb688c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1f589e904d9e5fcff87e831aa0ee3df4830cedde b/fuzz/gnutls_x509_parser_fuzzer.in/1f589e904d9e5fcff87e831aa0ee3df4830cedde new file mode 100644 index 0000000000..077337ab46 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1f589e904d9e5fcff87e831aa0ee3df4830cedde differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/1ff0958c59e4a17c1d596f97bd642d2195eda6ee b/fuzz/gnutls_x509_parser_fuzzer.in/1ff0958c59e4a17c1d596f97bd642d2195eda6ee new file mode 100644 index 0000000000..0a902e30f4 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/1ff0958c59e4a17c1d596f97bd642d2195eda6ee differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/228a7e20450769ba0368c322163ff18dbc1c86d6 b/fuzz/gnutls_x509_parser_fuzzer.in/228a7e20450769ba0368c322163ff18dbc1c86d6 new file mode 100644 index 0000000000..b1320e532e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/228a7e20450769ba0368c322163ff18dbc1c86d6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2329cfe2f88103173aabf437dc5083a2336b7632 b/fuzz/gnutls_x509_parser_fuzzer.in/2329cfe2f88103173aabf437dc5083a2336b7632 new file mode 100644 index 0000000000..95e98bd99f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2329cfe2f88103173aabf437dc5083a2336b7632 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/236a3b0af4499b6e4bdff8619128fbc73272ada1 b/fuzz/gnutls_x509_parser_fuzzer.in/236a3b0af4499b6e4bdff8619128fbc73272ada1 new file mode 100644 index 0000000000..4cc96583eb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/236a3b0af4499b6e4bdff8619128fbc73272ada1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/23b81d2865783fbd72dc5f467ab85c02ad6e7674 b/fuzz/gnutls_x509_parser_fuzzer.in/23b81d2865783fbd72dc5f467ab85c02ad6e7674 new file mode 100644 index 0000000000..9dfb8c0353 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/23b81d2865783fbd72dc5f467ab85c02ad6e7674 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/23d9737fb3952e37199e1d03cd930f455459a562 b/fuzz/gnutls_x509_parser_fuzzer.in/23d9737fb3952e37199e1d03cd930f455459a562 new file mode 100644 index 0000000000..6cd7cbd7ae Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/23d9737fb3952e37199e1d03cd930f455459a562 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/240d38d6b27427b56d2bf6fbb96a831e115041b3 b/fuzz/gnutls_x509_parser_fuzzer.in/240d38d6b27427b56d2bf6fbb96a831e115041b3 new file mode 100644 index 0000000000..6840fa8370 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/240d38d6b27427b56d2bf6fbb96a831e115041b3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/254f82a11ecab2703ae7ef8813866baec32ff002 b/fuzz/gnutls_x509_parser_fuzzer.in/254f82a11ecab2703ae7ef8813866baec32ff002 new file mode 100644 index 0000000000..9893a38990 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/254f82a11ecab2703ae7ef8813866baec32ff002 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/25a0e033d0d2dfb29155fcdcde9dfd8a7116af90 b/fuzz/gnutls_x509_parser_fuzzer.in/25a0e033d0d2dfb29155fcdcde9dfd8a7116af90 new file mode 100644 index 0000000000..e2ff96987f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/25a0e033d0d2dfb29155fcdcde9dfd8a7116af90 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/26eb06b56f6bedbebdac3d5f4901dcae7b62b4b5 b/fuzz/gnutls_x509_parser_fuzzer.in/26eb06b56f6bedbebdac3d5f4901dcae7b62b4b5 new file mode 100644 index 0000000000..fbc43847d1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/26eb06b56f6bedbebdac3d5f4901dcae7b62b4b5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2763ab6710c3acdf371bbc1a51e5469631a74054 b/fuzz/gnutls_x509_parser_fuzzer.in/2763ab6710c3acdf371bbc1a51e5469631a74054 new file mode 100644 index 0000000000..fbea6aec35 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2763ab6710c3acdf371bbc1a51e5469631a74054 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/277b6a60532a1b7b7dab751aa4b19a556a4ed045 b/fuzz/gnutls_x509_parser_fuzzer.in/277b6a60532a1b7b7dab751aa4b19a556a4ed045 new file mode 100644 index 0000000000..a8ecd6283a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/277b6a60532a1b7b7dab751aa4b19a556a4ed045 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/27ac4884e8201347a2ccc84bd66856fbf6e538f2 b/fuzz/gnutls_x509_parser_fuzzer.in/27ac4884e8201347a2ccc84bd66856fbf6e538f2 new file mode 100644 index 0000000000..6092466b32 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/27ac4884e8201347a2ccc84bd66856fbf6e538f2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/27e18e280c5974ec75b85b5f9ebc5392f7e481e4 b/fuzz/gnutls_x509_parser_fuzzer.in/27e18e280c5974ec75b85b5f9ebc5392f7e481e4 new file mode 100644 index 0000000000..3dae0655a9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/27e18e280c5974ec75b85b5f9ebc5392f7e481e4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/28e2d10ea0ba23270afc68f0fd8162225eb9ac4a b/fuzz/gnutls_x509_parser_fuzzer.in/28e2d10ea0ba23270afc68f0fd8162225eb9ac4a new file mode 100644 index 0000000000..8daf4959af Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/28e2d10ea0ba23270afc68f0fd8162225eb9ac4a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2909cb7b562b158701329e5e4d69795f3d5062ac b/fuzz/gnutls_x509_parser_fuzzer.in/2909cb7b562b158701329e5e4d69795f3d5062ac new file mode 100644 index 0000000000..032c94a61f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2909cb7b562b158701329e5e4d69795f3d5062ac differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2a9574ad5c33afc06a40c1380df900e87c7bcc2b b/fuzz/gnutls_x509_parser_fuzzer.in/2a9574ad5c33afc06a40c1380df900e87c7bcc2b new file mode 100644 index 0000000000..16adbc458f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2a9574ad5c33afc06a40c1380df900e87c7bcc2b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2ad9c9d411a96cd5091d906847d81f2f2487c16d b/fuzz/gnutls_x509_parser_fuzzer.in/2ad9c9d411a96cd5091d906847d81f2f2487c16d new file mode 100644 index 0000000000..641c079fd2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2ad9c9d411a96cd5091d906847d81f2f2487c16d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2b0139a2af6091afebacc1296a1ce2bd8d47435d b/fuzz/gnutls_x509_parser_fuzzer.in/2b0139a2af6091afebacc1296a1ce2bd8d47435d new file mode 100644 index 0000000000..e5079094d7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2b0139a2af6091afebacc1296a1ce2bd8d47435d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2b14b7c95925c2cd89dc5a6d676ca7739c5f5a83 b/fuzz/gnutls_x509_parser_fuzzer.in/2b14b7c95925c2cd89dc5a6d676ca7739c5f5a83 new file mode 100644 index 0000000000..a00222b670 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2b14b7c95925c2cd89dc5a6d676ca7739c5f5a83 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2bdc88c3da124301ca44a9ec1ca4b20265b7681a b/fuzz/gnutls_x509_parser_fuzzer.in/2bdc88c3da124301ca44a9ec1ca4b20265b7681a new file mode 100644 index 0000000000..373bea79ed Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2bdc88c3da124301ca44a9ec1ca4b20265b7681a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2c1b613de6e78dd076563f0d88ac81061ec9b490 b/fuzz/gnutls_x509_parser_fuzzer.in/2c1b613de6e78dd076563f0d88ac81061ec9b490 new file mode 100644 index 0000000000..60477e0b8c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2c1b613de6e78dd076563f0d88ac81061ec9b490 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2c2ca3ffe7f4ba21c89a5549b65510431729ec9f b/fuzz/gnutls_x509_parser_fuzzer.in/2c2ca3ffe7f4ba21c89a5549b65510431729ec9f new file mode 100644 index 0000000000..a6058e707f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2c2ca3ffe7f4ba21c89a5549b65510431729ec9f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2c3b59bf016f53f98e111cd7ef80d500f1b91cd9 b/fuzz/gnutls_x509_parser_fuzzer.in/2c3b59bf016f53f98e111cd7ef80d500f1b91cd9 new file mode 100644 index 0000000000..10b1fe7ee2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2c3b59bf016f53f98e111cd7ef80d500f1b91cd9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2d44109b9b5327bf57d3ec5a5001365a6ae6cee4 b/fuzz/gnutls_x509_parser_fuzzer.in/2d44109b9b5327bf57d3ec5a5001365a6ae6cee4 new file mode 100644 index 0000000000..d8cdfdc266 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2d44109b9b5327bf57d3ec5a5001365a6ae6cee4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2dbade24efe0628badea22fee3f30c898dddcf54 b/fuzz/gnutls_x509_parser_fuzzer.in/2dbade24efe0628badea22fee3f30c898dddcf54 new file mode 100644 index 0000000000..a3340d645c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2dbade24efe0628badea22fee3f30c898dddcf54 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2dfc718dd4a7b7dda3b363c529eb8fa2e60c7192 b/fuzz/gnutls_x509_parser_fuzzer.in/2dfc718dd4a7b7dda3b363c529eb8fa2e60c7192 new file mode 100644 index 0000000000..5228f5927d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2dfc718dd4a7b7dda3b363c529eb8fa2e60c7192 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2e7f64272570ecd01d749af546e83ca79fc335c6 b/fuzz/gnutls_x509_parser_fuzzer.in/2e7f64272570ecd01d749af546e83ca79fc335c6 new file mode 100644 index 0000000000..b3f5fbffb2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2e7f64272570ecd01d749af546e83ca79fc335c6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/2fd5025acc8274dccc92e9d5c19f9e9758bd1ec6 b/fuzz/gnutls_x509_parser_fuzzer.in/2fd5025acc8274dccc92e9d5c19f9e9758bd1ec6 new file mode 100644 index 0000000000..789686ac72 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/2fd5025acc8274dccc92e9d5c19f9e9758bd1ec6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3097ecdad570f65b19bbe47de37ca2339376867a b/fuzz/gnutls_x509_parser_fuzzer.in/3097ecdad570f65b19bbe47de37ca2339376867a new file mode 100644 index 0000000000..baf3f321a8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3097ecdad570f65b19bbe47de37ca2339376867a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/314677083d2c22c27614c3df64b12d2d56f00cbe b/fuzz/gnutls_x509_parser_fuzzer.in/314677083d2c22c27614c3df64b12d2d56f00cbe new file mode 100644 index 0000000000..2742b026aa Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/314677083d2c22c27614c3df64b12d2d56f00cbe differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/31591534ffb06e2874ba834197a47fd0bd620d72 b/fuzz/gnutls_x509_parser_fuzzer.in/31591534ffb06e2874ba834197a47fd0bd620d72 new file mode 100644 index 0000000000..ec50f9138a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/31591534ffb06e2874ba834197a47fd0bd620d72 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/31872de2b833892a43684a07f9759d1658889b16 b/fuzz/gnutls_x509_parser_fuzzer.in/31872de2b833892a43684a07f9759d1658889b16 new file mode 100644 index 0000000000..fc3587e366 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/31872de2b833892a43684a07f9759d1658889b16 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/319a3ca3c7bba4776227f2c0450e04f23eb089dd b/fuzz/gnutls_x509_parser_fuzzer.in/319a3ca3c7bba4776227f2c0450e04f23eb089dd new file mode 100644 index 0000000000..485455c9bd Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/319a3ca3c7bba4776227f2c0450e04f23eb089dd differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/32e515790ffbc7706499a6751f17745d61071fe8 b/fuzz/gnutls_x509_parser_fuzzer.in/32e515790ffbc7706499a6751f17745d61071fe8 new file mode 100644 index 0000000000..c88ca50b81 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/32e515790ffbc7706499a6751f17745d61071fe8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/32f877acb23f33a2cd476682727374824a312a49 b/fuzz/gnutls_x509_parser_fuzzer.in/32f877acb23f33a2cd476682727374824a312a49 new file mode 100644 index 0000000000..ce8b6be23a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/32f877acb23f33a2cd476682727374824a312a49 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/338b51a41f6314b5e79a0343ebe2b20fa5878f76 b/fuzz/gnutls_x509_parser_fuzzer.in/338b51a41f6314b5e79a0343ebe2b20fa5878f76 new file mode 100644 index 0000000000..25089d8be4 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/338b51a41f6314b5e79a0343ebe2b20fa5878f76 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3399de0770467a07b3a2bdd0cdd6874d5d9391be b/fuzz/gnutls_x509_parser_fuzzer.in/3399de0770467a07b3a2bdd0cdd6874d5d9391be new file mode 100644 index 0000000000..71564dad0c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3399de0770467a07b3a2bdd0cdd6874d5d9391be differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3468bd815ee73f18afe27e7b66cf59629895d000 b/fuzz/gnutls_x509_parser_fuzzer.in/3468bd815ee73f18afe27e7b66cf59629895d000 new file mode 100644 index 0000000000..e8416f25c9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3468bd815ee73f18afe27e7b66cf59629895d000 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/352ddb934f494b4c0b20630709ed985547e97435 b/fuzz/gnutls_x509_parser_fuzzer.in/352ddb934f494b4c0b20630709ed985547e97435 new file mode 100644 index 0000000000..463581c9db Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/352ddb934f494b4c0b20630709ed985547e97435 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/354914b350bc31ab1a7575ced33ddc050b774baf b/fuzz/gnutls_x509_parser_fuzzer.in/354914b350bc31ab1a7575ced33ddc050b774baf new file mode 100644 index 0000000000..db7839452a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/354914b350bc31ab1a7575ced33ddc050b774baf differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/354ad535f3e1989636660154a3fdf5b03c22e3fa b/fuzz/gnutls_x509_parser_fuzzer.in/354ad535f3e1989636660154a3fdf5b03c22e3fa new file mode 100644 index 0000000000..ccdf88c1f2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/354ad535f3e1989636660154a3fdf5b03c22e3fa differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/354f3b17468786196e27b4fc2f11b21f929632f3 b/fuzz/gnutls_x509_parser_fuzzer.in/354f3b17468786196e27b4fc2f11b21f929632f3 new file mode 100644 index 0000000000..37b3b960f2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/354f3b17468786196e27b4fc2f11b21f929632f3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3594e4a17dbe05024407d8819f96e07e0891d6c3 b/fuzz/gnutls_x509_parser_fuzzer.in/3594e4a17dbe05024407d8819f96e07e0891d6c3 new file mode 100644 index 0000000000..3893bfcb05 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3594e4a17dbe05024407d8819f96e07e0891d6c3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/369041a1dc45bbf8486ed4e4f464669a507670e1 b/fuzz/gnutls_x509_parser_fuzzer.in/369041a1dc45bbf8486ed4e4f464669a507670e1 new file mode 100644 index 0000000000..2c4582b115 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/369041a1dc45bbf8486ed4e4f464669a507670e1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3714f94dd8dd1150e075742f67726fa39a5e3be0 b/fuzz/gnutls_x509_parser_fuzzer.in/3714f94dd8dd1150e075742f67726fa39a5e3be0 new file mode 100644 index 0000000000..868235016d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3714f94dd8dd1150e075742f67726fa39a5e3be0 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/37bbbf656aaf196e8ab0237555acdf70bab9f22b b/fuzz/gnutls_x509_parser_fuzzer.in/37bbbf656aaf196e8ab0237555acdf70bab9f22b new file mode 100644 index 0000000000..ed7655ff0e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/37bbbf656aaf196e8ab0237555acdf70bab9f22b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3824a9b632006af31f5919b3e475e418dbba3400 b/fuzz/gnutls_x509_parser_fuzzer.in/3824a9b632006af31f5919b3e475e418dbba3400 new file mode 100644 index 0000000000..3c432532ed Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3824a9b632006af31f5919b3e475e418dbba3400 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3839d02ff685800c458c760a74f54b023b2364fa b/fuzz/gnutls_x509_parser_fuzzer.in/3839d02ff685800c458c760a74f54b023b2364fa new file mode 100644 index 0000000000..e2235d3a3c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3839d02ff685800c458c760a74f54b023b2364fa differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/383cf0e265736f7c30b825826ea27c4e474294eb b/fuzz/gnutls_x509_parser_fuzzer.in/383cf0e265736f7c30b825826ea27c4e474294eb new file mode 100644 index 0000000000..607a905f51 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/383cf0e265736f7c30b825826ea27c4e474294eb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/38c9942391b90719a7e6c798fb06e5fc495e9b60 b/fuzz/gnutls_x509_parser_fuzzer.in/38c9942391b90719a7e6c798fb06e5fc495e9b60 new file mode 100644 index 0000000000..0ce0aa9e37 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/38c9942391b90719a7e6c798fb06e5fc495e9b60 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/39b8cb3d5bc8a19bb366aadd418658e2f0d75cc1 b/fuzz/gnutls_x509_parser_fuzzer.in/39b8cb3d5bc8a19bb366aadd418658e2f0d75cc1 new file mode 100644 index 0000000000..439776f9e3 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/39b8cb3d5bc8a19bb366aadd418658e2f0d75cc1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3a1db466fe76e00f4e96732c1e244bb10fca1e47 b/fuzz/gnutls_x509_parser_fuzzer.in/3a1db466fe76e00f4e96732c1e244bb10fca1e47 new file mode 100644 index 0000000000..be8e1a15ab Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3a1db466fe76e00f4e96732c1e244bb10fca1e47 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3a851b45b82a566d4025eee7ab6ecba228eae30c b/fuzz/gnutls_x509_parser_fuzzer.in/3a851b45b82a566d4025eee7ab6ecba228eae30c new file mode 100644 index 0000000000..7bf7ccf002 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3a851b45b82a566d4025eee7ab6ecba228eae30c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3ae75e258f611848e9c22169b8887c4bef8672e1 b/fuzz/gnutls_x509_parser_fuzzer.in/3ae75e258f611848e9c22169b8887c4bef8672e1 new file mode 100644 index 0000000000..b50c3c1065 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3ae75e258f611848e9c22169b8887c4bef8672e1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3ba71f031616b68da8c9d67414148fcd62120649 b/fuzz/gnutls_x509_parser_fuzzer.in/3ba71f031616b68da8c9d67414148fcd62120649 new file mode 100644 index 0000000000..b7e9b60cce Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3ba71f031616b68da8c9d67414148fcd62120649 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3c043551b240dfadc85403fcab582f3c8cb506a7 b/fuzz/gnutls_x509_parser_fuzzer.in/3c043551b240dfadc85403fcab582f3c8cb506a7 new file mode 100644 index 0000000000..071b6c0d95 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3c043551b240dfadc85403fcab582f3c8cb506a7 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3c1103a88b63a2c8bdf939a398a38c9c7218dc66 b/fuzz/gnutls_x509_parser_fuzzer.in/3c1103a88b63a2c8bdf939a398a38c9c7218dc66 new file mode 100644 index 0000000000..9a9f79743b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3c1103a88b63a2c8bdf939a398a38c9c7218dc66 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3c20650a1ee681b6d48da2ec6bc9459d0975e5ed b/fuzz/gnutls_x509_parser_fuzzer.in/3c20650a1ee681b6d48da2ec6bc9459d0975e5ed new file mode 100644 index 0000000000..c9e557bd1c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3c20650a1ee681b6d48da2ec6bc9459d0975e5ed differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3cf366b1bd17fc45524f198bc9046558a4b1f672 b/fuzz/gnutls_x509_parser_fuzzer.in/3cf366b1bd17fc45524f198bc9046558a4b1f672 new file mode 100644 index 0000000000..471cf04d98 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3cf366b1bd17fc45524f198bc9046558a4b1f672 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3daedebb27c033775945d7e1f344012d63fe05d9 b/fuzz/gnutls_x509_parser_fuzzer.in/3daedebb27c033775945d7e1f344012d63fe05d9 new file mode 100644 index 0000000000..3667730a8f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3daedebb27c033775945d7e1f344012d63fe05d9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3db5f1d0bbb02a7b700c3522e8398ae7bd161a92 b/fuzz/gnutls_x509_parser_fuzzer.in/3db5f1d0bbb02a7b700c3522e8398ae7bd161a92 new file mode 100644 index 0000000000..bd8811a255 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3db5f1d0bbb02a7b700c3522e8398ae7bd161a92 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3e6b7d1d08d59fede54140ce40ad7c87b267e765 b/fuzz/gnutls_x509_parser_fuzzer.in/3e6b7d1d08d59fede54140ce40ad7c87b267e765 new file mode 100644 index 0000000000..bc7795a158 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3e6b7d1d08d59fede54140ce40ad7c87b267e765 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3fbeb98e3b02afcb71c0592a5f3ba70951720936 b/fuzz/gnutls_x509_parser_fuzzer.in/3fbeb98e3b02afcb71c0592a5f3ba70951720936 new file mode 100644 index 0000000000..1427226668 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3fbeb98e3b02afcb71c0592a5f3ba70951720936 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3fcf359cfa267171feacc97f0e62451ddb04ec97 b/fuzz/gnutls_x509_parser_fuzzer.in/3fcf359cfa267171feacc97f0e62451ddb04ec97 new file mode 100644 index 0000000000..0ee587247b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3fcf359cfa267171feacc97f0e62451ddb04ec97 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/3fd2132dfa9bd8b9d61160eb2234e3c26d65c111 b/fuzz/gnutls_x509_parser_fuzzer.in/3fd2132dfa9bd8b9d61160eb2234e3c26d65c111 new file mode 100644 index 0000000000..f883228451 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/3fd2132dfa9bd8b9d61160eb2234e3c26d65c111 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/400ea291958ee9263af508544d0df93def72cb34 b/fuzz/gnutls_x509_parser_fuzzer.in/400ea291958ee9263af508544d0df93def72cb34 new file mode 100644 index 0000000000..da03e2c52b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/400ea291958ee9263af508544d0df93def72cb34 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/401908071b31cb72c5c0ff6ae17be8b7522acf67 b/fuzz/gnutls_x509_parser_fuzzer.in/401908071b31cb72c5c0ff6ae17be8b7522acf67 new file mode 100644 index 0000000000..7ad2210864 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/401908071b31cb72c5c0ff6ae17be8b7522acf67 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/4082a53d831e53bf5fc9a113919a1e1b83d26923 b/fuzz/gnutls_x509_parser_fuzzer.in/4082a53d831e53bf5fc9a113919a1e1b83d26923 new file mode 100644 index 0000000000..a6fcad1d7c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/4082a53d831e53bf5fc9a113919a1e1b83d26923 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/40c2b9db082be129b5d8f491780c1c44e06a67cf b/fuzz/gnutls_x509_parser_fuzzer.in/40c2b9db082be129b5d8f491780c1c44e06a67cf new file mode 100644 index 0000000000..8f805370c0 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/40c2b9db082be129b5d8f491780c1c44e06a67cf differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/4127e55f1d1c8b2da70daaf800e57b7bc982332e b/fuzz/gnutls_x509_parser_fuzzer.in/4127e55f1d1c8b2da70daaf800e57b7bc982332e new file mode 100644 index 0000000000..fb3aec4d62 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/4127e55f1d1c8b2da70daaf800e57b7bc982332e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/416492972006b8806f9564fb8bbfca5c88b97c94 b/fuzz/gnutls_x509_parser_fuzzer.in/416492972006b8806f9564fb8bbfca5c88b97c94 new file mode 100644 index 0000000000..084ccf9325 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/416492972006b8806f9564fb8bbfca5c88b97c94 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/41b5fb659a1f381b2218a00726db1d320f7fc076 b/fuzz/gnutls_x509_parser_fuzzer.in/41b5fb659a1f381b2218a00726db1d320f7fc076 new file mode 100644 index 0000000000..7748018dae Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/41b5fb659a1f381b2218a00726db1d320f7fc076 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/427d6fe58a35f2803eeb594ed681dd0630cf94f9 b/fuzz/gnutls_x509_parser_fuzzer.in/427d6fe58a35f2803eeb594ed681dd0630cf94f9 new file mode 100644 index 0000000000..fbaf675bc1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/427d6fe58a35f2803eeb594ed681dd0630cf94f9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/428e6e5042f8a04e74e1affb8dabd676563b0979 b/fuzz/gnutls_x509_parser_fuzzer.in/428e6e5042f8a04e74e1affb8dabd676563b0979 new file mode 100644 index 0000000000..33328140a8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/428e6e5042f8a04e74e1affb8dabd676563b0979 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/442e31d1f9532a4e6f0d4a7a49c99eac1a59dc8b b/fuzz/gnutls_x509_parser_fuzzer.in/442e31d1f9532a4e6f0d4a7a49c99eac1a59dc8b new file mode 100644 index 0000000000..79968e7bb1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/442e31d1f9532a4e6f0d4a7a49c99eac1a59dc8b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/4478f06b54f1b1fdbf894d12968f793a86a37e4b b/fuzz/gnutls_x509_parser_fuzzer.in/4478f06b54f1b1fdbf894d12968f793a86a37e4b new file mode 100644 index 0000000000..1b40e5bcc8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/4478f06b54f1b1fdbf894d12968f793a86a37e4b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/44ce7d110bc83c65d368e0ee17022c16eff518bc b/fuzz/gnutls_x509_parser_fuzzer.in/44ce7d110bc83c65d368e0ee17022c16eff518bc new file mode 100644 index 0000000000..3516c8f98b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/44ce7d110bc83c65d368e0ee17022c16eff518bc differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/44f11c6d89d0698a74cb2375780b5dfe889e45b3 b/fuzz/gnutls_x509_parser_fuzzer.in/44f11c6d89d0698a74cb2375780b5dfe889e45b3 new file mode 100644 index 0000000000..2d4e65de8a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/44f11c6d89d0698a74cb2375780b5dfe889e45b3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/4516fd70c14343d5bce08be330bd5379db608eaf b/fuzz/gnutls_x509_parser_fuzzer.in/4516fd70c14343d5bce08be330bd5379db608eaf new file mode 100644 index 0000000000..54af048674 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/4516fd70c14343d5bce08be330bd5379db608eaf differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/453ff47910e47be007f59565b47644c9728864dc b/fuzz/gnutls_x509_parser_fuzzer.in/453ff47910e47be007f59565b47644c9728864dc new file mode 100644 index 0000000000..3d2bcea849 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/453ff47910e47be007f59565b47644c9728864dc differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/46651ee159d826074cae52d9ec04badc184072c3 b/fuzz/gnutls_x509_parser_fuzzer.in/46651ee159d826074cae52d9ec04badc184072c3 new file mode 100644 index 0000000000..3f22501c08 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/46651ee159d826074cae52d9ec04badc184072c3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/46a7cc35e47121aa3c71638b9c926277a6d35510 b/fuzz/gnutls_x509_parser_fuzzer.in/46a7cc35e47121aa3c71638b9c926277a6d35510 new file mode 100644 index 0000000000..d129f95749 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/46a7cc35e47121aa3c71638b9c926277a6d35510 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/46d0f5a24084cb3cf5454df1ef1a93084eaca12c b/fuzz/gnutls_x509_parser_fuzzer.in/46d0f5a24084cb3cf5454df1ef1a93084eaca12c new file mode 100644 index 0000000000..7fead3864f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/46d0f5a24084cb3cf5454df1ef1a93084eaca12c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/46e563c2b0c65443b8054b32fed1d924b6c7640f b/fuzz/gnutls_x509_parser_fuzzer.in/46e563c2b0c65443b8054b32fed1d924b6c7640f new file mode 100644 index 0000000000..609b1b68fc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/46e563c2b0c65443b8054b32fed1d924b6c7640f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/470473f7bf059c5c2b5b5d5ace66378872899a61 b/fuzz/gnutls_x509_parser_fuzzer.in/470473f7bf059c5c2b5b5d5ace66378872899a61 new file mode 100644 index 0000000000..8ff83dc549 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/470473f7bf059c5c2b5b5d5ace66378872899a61 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/47189b7760b8639c433a6135fb6f37f4c8ed99d6 b/fuzz/gnutls_x509_parser_fuzzer.in/47189b7760b8639c433a6135fb6f37f4c8ed99d6 new file mode 100644 index 0000000000..5aa228a0b2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/47189b7760b8639c433a6135fb6f37f4c8ed99d6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/472b9388239e4788d2b497bea3d756a1a795b144 b/fuzz/gnutls_x509_parser_fuzzer.in/472b9388239e4788d2b497bea3d756a1a795b144 new file mode 100644 index 0000000000..2d949f4b5b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/472b9388239e4788d2b497bea3d756a1a795b144 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/474ab9dc2d79c4d1c80e511cfc8dacf22c3a7f8d b/fuzz/gnutls_x509_parser_fuzzer.in/474ab9dc2d79c4d1c80e511cfc8dacf22c3a7f8d new file mode 100644 index 0000000000..a6bf56711e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/474ab9dc2d79c4d1c80e511cfc8dacf22c3a7f8d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/47a4849f57acfa69ec9279f04ada28bb5c7fe86d b/fuzz/gnutls_x509_parser_fuzzer.in/47a4849f57acfa69ec9279f04ada28bb5c7fe86d new file mode 100644 index 0000000000..a3012eaa62 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/47a4849f57acfa69ec9279f04ada28bb5c7fe86d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/47f3929a0856273a183624be179e7b382d0855c8 b/fuzz/gnutls_x509_parser_fuzzer.in/47f3929a0856273a183624be179e7b382d0855c8 new file mode 100644 index 0000000000..aeac617227 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/47f3929a0856273a183624be179e7b382d0855c8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/482e86a1b3367ce1e31149de8a7891b6eb7a7112 b/fuzz/gnutls_x509_parser_fuzzer.in/482e86a1b3367ce1e31149de8a7891b6eb7a7112 new file mode 100644 index 0000000000..18e291ea0e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/482e86a1b3367ce1e31149de8a7891b6eb7a7112 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/484f1b53114006d581e58e7ed2124f1dcedb64ae b/fuzz/gnutls_x509_parser_fuzzer.in/484f1b53114006d581e58e7ed2124f1dcedb64ae new file mode 100644 index 0000000000..04b9cd7e68 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/484f1b53114006d581e58e7ed2124f1dcedb64ae differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/487cf2ace7ecd0d19bc82e2c046be92d1d2f3e3e b/fuzz/gnutls_x509_parser_fuzzer.in/487cf2ace7ecd0d19bc82e2c046be92d1d2f3e3e new file mode 100644 index 0000000000..35401182ec Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/487cf2ace7ecd0d19bc82e2c046be92d1d2f3e3e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/49930350b19c72fa6138e3751f47d7c45ec84bbd b/fuzz/gnutls_x509_parser_fuzzer.in/49930350b19c72fa6138e3751f47d7c45ec84bbd new file mode 100644 index 0000000000..6c1742817f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/49930350b19c72fa6138e3751f47d7c45ec84bbd differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/4a3cdc0e9ef4db124353664830baaf641142944b b/fuzz/gnutls_x509_parser_fuzzer.in/4a3cdc0e9ef4db124353664830baaf641142944b new file mode 100644 index 0000000000..3ca079f5f0 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/4a3cdc0e9ef4db124353664830baaf641142944b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/4a3f6e08e7294028d9711047955fca268b4fb989 b/fuzz/gnutls_x509_parser_fuzzer.in/4a3f6e08e7294028d9711047955fca268b4fb989 new file mode 100644 index 0000000000..91a41d9a52 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/4a3f6e08e7294028d9711047955fca268b4fb989 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/4bc5e9f1ccbbcbc0c2621cad2ac67723d968f45c b/fuzz/gnutls_x509_parser_fuzzer.in/4bc5e9f1ccbbcbc0c2621cad2ac67723d968f45c new file mode 100644 index 0000000000..77a380a75d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/4bc5e9f1ccbbcbc0c2621cad2ac67723d968f45c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/4cab4c263ef3ef8d78eceba2d79fee175c20044f b/fuzz/gnutls_x509_parser_fuzzer.in/4cab4c263ef3ef8d78eceba2d79fee175c20044f new file mode 100644 index 0000000000..039052b643 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/4cab4c263ef3ef8d78eceba2d79fee175c20044f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/4decf9cfcad926f9f3cf71da7a4e891d86e86288 b/fuzz/gnutls_x509_parser_fuzzer.in/4decf9cfcad926f9f3cf71da7a4e891d86e86288 new file mode 100644 index 0000000000..82fe1f4ec7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/4decf9cfcad926f9f3cf71da7a4e891d86e86288 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/4e00787f96bb46ed85aab861cb1a293cfaa56ba3 b/fuzz/gnutls_x509_parser_fuzzer.in/4e00787f96bb46ed85aab861cb1a293cfaa56ba3 new file mode 100644 index 0000000000..8e8cd2366f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/4e00787f96bb46ed85aab861cb1a293cfaa56ba3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5060ee9ad941fdd9b412783d9bde0b1b35aa4091 b/fuzz/gnutls_x509_parser_fuzzer.in/5060ee9ad941fdd9b412783d9bde0b1b35aa4091 new file mode 100644 index 0000000000..92fb14ed5d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5060ee9ad941fdd9b412783d9bde0b1b35aa4091 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/510a0c7165a6792d765c1a2dd8217b5bfebeb55d b/fuzz/gnutls_x509_parser_fuzzer.in/510a0c7165a6792d765c1a2dd8217b5bfebeb55d new file mode 100644 index 0000000000..10e97b3bc5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/510a0c7165a6792d765c1a2dd8217b5bfebeb55d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/514400ba18950a787e4e777edf3d088c8cc08a91 b/fuzz/gnutls_x509_parser_fuzzer.in/514400ba18950a787e4e777edf3d088c8cc08a91 new file mode 100644 index 0000000000..472ccc285a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/514400ba18950a787e4e777edf3d088c8cc08a91 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/515cb1fff290cdbc7c440bbb6712776ee999ff55 b/fuzz/gnutls_x509_parser_fuzzer.in/515cb1fff290cdbc7c440bbb6712776ee999ff55 new file mode 100644 index 0000000000..8b66b34225 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/515cb1fff290cdbc7c440bbb6712776ee999ff55 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5170f95d0af1e2475b11c4f9c9fa833b5013a672 b/fuzz/gnutls_x509_parser_fuzzer.in/5170f95d0af1e2475b11c4f9c9fa833b5013a672 new file mode 100644 index 0000000000..63ce24d960 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5170f95d0af1e2475b11c4f9c9fa833b5013a672 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/524242191166095202482c46460ccf87e47a1014 b/fuzz/gnutls_x509_parser_fuzzer.in/524242191166095202482c46460ccf87e47a1014 new file mode 100644 index 0000000000..c4ccea6137 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/524242191166095202482c46460ccf87e47a1014 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/52d31f39741f0c60e93accd4d1c0e7a9945c6d17 b/fuzz/gnutls_x509_parser_fuzzer.in/52d31f39741f0c60e93accd4d1c0e7a9945c6d17 new file mode 100644 index 0000000000..1b997ad2c6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/52d31f39741f0c60e93accd4d1c0e7a9945c6d17 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5339cf0eea307937de606fc1873090a56f2ba246 b/fuzz/gnutls_x509_parser_fuzzer.in/5339cf0eea307937de606fc1873090a56f2ba246 new file mode 100644 index 0000000000..5899d008bb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5339cf0eea307937de606fc1873090a56f2ba246 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5358f49af342dd693d690d4c58703c950e411c75 b/fuzz/gnutls_x509_parser_fuzzer.in/5358f49af342dd693d690d4c58703c950e411c75 new file mode 100644 index 0000000000..6d27b0151d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5358f49af342dd693d690d4c58703c950e411c75 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/53769fc6d0e5cbb1d614cd7a82fecff7631965e3 b/fuzz/gnutls_x509_parser_fuzzer.in/53769fc6d0e5cbb1d614cd7a82fecff7631965e3 new file mode 100644 index 0000000000..1e9723709e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/53769fc6d0e5cbb1d614cd7a82fecff7631965e3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5412e58ef8afd0997d376ff772443c94f450f3ca b/fuzz/gnutls_x509_parser_fuzzer.in/5412e58ef8afd0997d376ff772443c94f450f3ca new file mode 100644 index 0000000000..a6277880a0 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5412e58ef8afd0997d376ff772443c94f450f3ca differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/542940d8c9ac22975afe8e4cf05c44946408d1a5 b/fuzz/gnutls_x509_parser_fuzzer.in/542940d8c9ac22975afe8e4cf05c44946408d1a5 new file mode 100644 index 0000000000..e41de2411f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/542940d8c9ac22975afe8e4cf05c44946408d1a5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/547f94b9939c06d567e438796c9e48cf67961174 b/fuzz/gnutls_x509_parser_fuzzer.in/547f94b9939c06d567e438796c9e48cf67961174 new file mode 100644 index 0000000000..abd3df70e4 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/547f94b9939c06d567e438796c9e48cf67961174 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/548a9bdb41e76c96ae26af700cca1d5afefc1caa b/fuzz/gnutls_x509_parser_fuzzer.in/548a9bdb41e76c96ae26af700cca1d5afefc1caa new file mode 100644 index 0000000000..7a4157db06 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/548a9bdb41e76c96ae26af700cca1d5afefc1caa differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/54cb5cad9bf6567a185d7e79c831b97b9c735400 b/fuzz/gnutls_x509_parser_fuzzer.in/54cb5cad9bf6567a185d7e79c831b97b9c735400 new file mode 100644 index 0000000000..c547b4ae34 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/54cb5cad9bf6567a185d7e79c831b97b9c735400 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/54cd93447b2ce99a674e18039e1a67389152ba3e b/fuzz/gnutls_x509_parser_fuzzer.in/54cd93447b2ce99a674e18039e1a67389152ba3e new file mode 100644 index 0000000000..9661980f31 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/54cd93447b2ce99a674e18039e1a67389152ba3e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/54e3690d10932512b3d657230939d822466a1ddd b/fuzz/gnutls_x509_parser_fuzzer.in/54e3690d10932512b3d657230939d822466a1ddd new file mode 100644 index 0000000000..e3b36ec307 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/54e3690d10932512b3d657230939d822466a1ddd differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/54e5357f28b5e2872d4cb602a228f2e2cf5c30b4 b/fuzz/gnutls_x509_parser_fuzzer.in/54e5357f28b5e2872d4cb602a228f2e2cf5c30b4 new file mode 100644 index 0000000000..6a7e906af5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/54e5357f28b5e2872d4cb602a228f2e2cf5c30b4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5544919302159cb74b17f4a9f3dd1312cd2f0b0d b/fuzz/gnutls_x509_parser_fuzzer.in/5544919302159cb74b17f4a9f3dd1312cd2f0b0d new file mode 100644 index 0000000000..69f99ae310 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5544919302159cb74b17f4a9f3dd1312cd2f0b0d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb b/fuzz/gnutls_x509_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb new file mode 100644 index 0000000000..d1a537e229 --- /dev/null +++ b/fuzz/gnutls_x509_parser_fuzzer.in/569493294998a3a5f470f112fc44d3ba4c1e62cb @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/574f95baad15be66b29733aa5fe65cef8b740c44 b/fuzz/gnutls_x509_parser_fuzzer.in/574f95baad15be66b29733aa5fe65cef8b740c44 new file mode 100644 index 0000000000..8dd11093dc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/574f95baad15be66b29733aa5fe65cef8b740c44 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/575c800aa1a640007c65d786469378ae5056e91a b/fuzz/gnutls_x509_parser_fuzzer.in/575c800aa1a640007c65d786469378ae5056e91a new file mode 100644 index 0000000000..cd38192801 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/575c800aa1a640007c65d786469378ae5056e91a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/577cca435b8ae19facf3feb4947862052460cafb b/fuzz/gnutls_x509_parser_fuzzer.in/577cca435b8ae19facf3feb4947862052460cafb new file mode 100644 index 0000000000..f6038d75d5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/577cca435b8ae19facf3feb4947862052460cafb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/57d2659a712caeab1b8b525203ce7a2c66b05e22 b/fuzz/gnutls_x509_parser_fuzzer.in/57d2659a712caeab1b8b525203ce7a2c66b05e22 new file mode 100644 index 0000000000..5e0db42266 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/57d2659a712caeab1b8b525203ce7a2c66b05e22 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/58579c5dd08cc94e28d0afc0ffa267bb9bd92b03 b/fuzz/gnutls_x509_parser_fuzzer.in/58579c5dd08cc94e28d0afc0ffa267bb9bd92b03 new file mode 100644 index 0000000000..3d92afa8d2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/58579c5dd08cc94e28d0afc0ffa267bb9bd92b03 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/58c03903b68a371fa321f0102ebe563d5bcd6b79 b/fuzz/gnutls_x509_parser_fuzzer.in/58c03903b68a371fa321f0102ebe563d5bcd6b79 new file mode 100644 index 0000000000..fa482059ac Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/58c03903b68a371fa321f0102ebe563d5bcd6b79 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/58cd277e5d53a463fd838692a61947f53f040bdb b/fuzz/gnutls_x509_parser_fuzzer.in/58cd277e5d53a463fd838692a61947f53f040bdb new file mode 100644 index 0000000000..3f14b0fb3e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/58cd277e5d53a463fd838692a61947f53f040bdb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/58fb953ce8f894d4f58d9000145214e6c1e119de b/fuzz/gnutls_x509_parser_fuzzer.in/58fb953ce8f894d4f58d9000145214e6c1e119de new file mode 100644 index 0000000000..d08770c32d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/58fb953ce8f894d4f58d9000145214e6c1e119de differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/58fbc4438d78bf96972f7a1d99b91abe65dd459e b/fuzz/gnutls_x509_parser_fuzzer.in/58fbc4438d78bf96972f7a1d99b91abe65dd459e new file mode 100644 index 0000000000..26453d0911 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/58fbc4438d78bf96972f7a1d99b91abe65dd459e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/58ffa9a6222ea0c78bbe466e70895e8b652722ea b/fuzz/gnutls_x509_parser_fuzzer.in/58ffa9a6222ea0c78bbe466e70895e8b652722ea new file mode 100644 index 0000000000..ba862204eb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/58ffa9a6222ea0c78bbe466e70895e8b652722ea differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/595c5e54f662c538635dd5b6e5bbdd068865db4e b/fuzz/gnutls_x509_parser_fuzzer.in/595c5e54f662c538635dd5b6e5bbdd068865db4e new file mode 100644 index 0000000000..48f65324a0 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/595c5e54f662c538635dd5b6e5bbdd068865db4e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/597b1e86c87acd88e0f852be9db249996d6189b6 b/fuzz/gnutls_x509_parser_fuzzer.in/597b1e86c87acd88e0f852be9db249996d6189b6 new file mode 100644 index 0000000000..20fe1664ae Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/597b1e86c87acd88e0f852be9db249996d6189b6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5a316b6a30bb34c603ec4efc56cec3e022ab738f b/fuzz/gnutls_x509_parser_fuzzer.in/5a316b6a30bb34c603ec4efc56cec3e022ab738f new file mode 100644 index 0000000000..607517de41 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5a316b6a30bb34c603ec4efc56cec3e022ab738f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5a6f5fb5f107cd1f6678fff342ad4a3e4001c970 b/fuzz/gnutls_x509_parser_fuzzer.in/5a6f5fb5f107cd1f6678fff342ad4a3e4001c970 new file mode 100644 index 0000000000..a9ec77f78a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5a6f5fb5f107cd1f6678fff342ad4a3e4001c970 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5aa3c8afa0c89038c509026d2a48d790521f92a5 b/fuzz/gnutls_x509_parser_fuzzer.in/5aa3c8afa0c89038c509026d2a48d790521f92a5 new file mode 100644 index 0000000000..dd27b81f92 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5aa3c8afa0c89038c509026d2a48d790521f92a5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5ac6cb24af48b9a3900b5bb1fd04b2dd16c16102 b/fuzz/gnutls_x509_parser_fuzzer.in/5ac6cb24af48b9a3900b5bb1fd04b2dd16c16102 new file mode 100644 index 0000000000..0df096c141 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5ac6cb24af48b9a3900b5bb1fd04b2dd16c16102 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5ada2df88c66e03bf63373be32f27ac1dea50dab b/fuzz/gnutls_x509_parser_fuzzer.in/5ada2df88c66e03bf63373be32f27ac1dea50dab new file mode 100644 index 0000000000..4ec16dd176 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5ada2df88c66e03bf63373be32f27ac1dea50dab differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5b25dc27de3ea7b99ddaf0920549fe2f535d1b09 b/fuzz/gnutls_x509_parser_fuzzer.in/5b25dc27de3ea7b99ddaf0920549fe2f535d1b09 new file mode 100644 index 0000000000..bd66b8acdb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5b25dc27de3ea7b99ddaf0920549fe2f535d1b09 differ diff --git a/devel/fuzz/gnutls_x509_parser.in/cert3.der b/fuzz/gnutls_x509_parser_fuzzer.in/5bf859ec9395b73f5ed5adfdfaa9c1add2ec23ff similarity index 100% rename from devel/fuzz/gnutls_x509_parser.in/cert3.der rename to fuzz/gnutls_x509_parser_fuzzer.in/5bf859ec9395b73f5ed5adfdfaa9c1add2ec23ff diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5c47408aff8d62813ec87a31cd55dab95d67ccb4 b/fuzz/gnutls_x509_parser_fuzzer.in/5c47408aff8d62813ec87a31cd55dab95d67ccb4 new file mode 100644 index 0000000000..455a421885 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5c47408aff8d62813ec87a31cd55dab95d67ccb4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5d852ffb5cd4e69970da869570238fbdfe5ff29e b/fuzz/gnutls_x509_parser_fuzzer.in/5d852ffb5cd4e69970da869570238fbdfe5ff29e new file mode 100644 index 0000000000..254dadd1dc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5d852ffb5cd4e69970da869570238fbdfe5ff29e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5d8f855c49e64b34b8af9f809f49b3559a12bfba b/fuzz/gnutls_x509_parser_fuzzer.in/5d8f855c49e64b34b8af9f809f49b3559a12bfba new file mode 100644 index 0000000000..a613fa28ba Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5d8f855c49e64b34b8af9f809f49b3559a12bfba differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5dda94adb6fd794a87e9837f5f52dc9608d364e6 b/fuzz/gnutls_x509_parser_fuzzer.in/5dda94adb6fd794a87e9837f5f52dc9608d364e6 new file mode 100644 index 0000000000..d3073dedc2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5dda94adb6fd794a87e9837f5f52dc9608d364e6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5de8f9db720d083b1e319ec8bb9223520ecc4bba b/fuzz/gnutls_x509_parser_fuzzer.in/5de8f9db720d083b1e319ec8bb9223520ecc4bba new file mode 100644 index 0000000000..554c114cbc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5de8f9db720d083b1e319ec8bb9223520ecc4bba differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5e471c896ec63ccd08633b4ed7236a248b5d1d86 b/fuzz/gnutls_x509_parser_fuzzer.in/5e471c896ec63ccd08633b4ed7236a248b5d1d86 new file mode 100644 index 0000000000..d41173c891 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5e471c896ec63ccd08633b4ed7236a248b5d1d86 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5e7b431ca1d7e97d03b187685acde6a9d5f49393 b/fuzz/gnutls_x509_parser_fuzzer.in/5e7b431ca1d7e97d03b187685acde6a9d5f49393 new file mode 100644 index 0000000000..14467e59e7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5e7b431ca1d7e97d03b187685acde6a9d5f49393 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5f28f532f7d888c623367657d41ded7dc3f77384 b/fuzz/gnutls_x509_parser_fuzzer.in/5f28f532f7d888c623367657d41ded7dc3f77384 new file mode 100644 index 0000000000..eb172753ee Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5f28f532f7d888c623367657d41ded7dc3f77384 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5f3db6dc31c51633bdad9934bbd455c0b57e4307 b/fuzz/gnutls_x509_parser_fuzzer.in/5f3db6dc31c51633bdad9934bbd455c0b57e4307 new file mode 100644 index 0000000000..d8cbb1430d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5f3db6dc31c51633bdad9934bbd455c0b57e4307 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/5ff7e337a34279a799120b6cb49c793bffb612b4 b/fuzz/gnutls_x509_parser_fuzzer.in/5ff7e337a34279a799120b6cb49c793bffb612b4 new file mode 100644 index 0000000000..08aa8e3734 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/5ff7e337a34279a799120b6cb49c793bffb612b4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/607ff28d208bb557eda67ae13b410030b6bbf2e4 b/fuzz/gnutls_x509_parser_fuzzer.in/607ff28d208bb557eda67ae13b410030b6bbf2e4 new file mode 100644 index 0000000000..34ab253622 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/607ff28d208bb557eda67ae13b410030b6bbf2e4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/610e4385af6cab1fc24610bcc211b98673d4cf34 b/fuzz/gnutls_x509_parser_fuzzer.in/610e4385af6cab1fc24610bcc211b98673d4cf34 new file mode 100644 index 0000000000..35212ad54e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/610e4385af6cab1fc24610bcc211b98673d4cf34 differ diff --git a/devel/fuzz/gnutls_x509_parser.in/cert2.der b/fuzz/gnutls_x509_parser_fuzzer.in/621f34c4fdd7e93f9b8f18224ba0bcd1c63a4771 similarity index 100% rename from devel/fuzz/gnutls_x509_parser.in/cert2.der rename to fuzz/gnutls_x509_parser_fuzzer.in/621f34c4fdd7e93f9b8f18224ba0bcd1c63a4771 diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6247a4ddf4cb63c407a6590a9a067a6a6a73212b b/fuzz/gnutls_x509_parser_fuzzer.in/6247a4ddf4cb63c407a6590a9a067a6a6a73212b new file mode 100644 index 0000000000..56c5c5d021 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6247a4ddf4cb63c407a6590a9a067a6a6a73212b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/62ead2a13760d495cf2eb39e06c62caccd98c721 b/fuzz/gnutls_x509_parser_fuzzer.in/62ead2a13760d495cf2eb39e06c62caccd98c721 new file mode 100644 index 0000000000..9eccc5fe0d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/62ead2a13760d495cf2eb39e06c62caccd98c721 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6350514d50ffa22435a5da4292a03877d5ad04d6 b/fuzz/gnutls_x509_parser_fuzzer.in/6350514d50ffa22435a5da4292a03877d5ad04d6 new file mode 100644 index 0000000000..8d8534b4fc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6350514d50ffa22435a5da4292a03877d5ad04d6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/635ff6d863c8cb5389368779e348ed8072d1713b b/fuzz/gnutls_x509_parser_fuzzer.in/635ff6d863c8cb5389368779e348ed8072d1713b new file mode 100644 index 0000000000..4a9006041b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/635ff6d863c8cb5389368779e348ed8072d1713b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/636093db3fb3c99bdf800f0235483df541abd099 b/fuzz/gnutls_x509_parser_fuzzer.in/636093db3fb3c99bdf800f0235483df541abd099 new file mode 100644 index 0000000000..59811a5b08 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/636093db3fb3c99bdf800f0235483df541abd099 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6363f1fb1b133edb52ce27f36e03022a869b5130 b/fuzz/gnutls_x509_parser_fuzzer.in/6363f1fb1b133edb52ce27f36e03022a869b5130 new file mode 100644 index 0000000000..5c249d680f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6363f1fb1b133edb52ce27f36e03022a869b5130 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6410bf8973c8c3a425be91d1c093ffcab87c21df b/fuzz/gnutls_x509_parser_fuzzer.in/6410bf8973c8c3a425be91d1c093ffcab87c21df new file mode 100644 index 0000000000..ec825eaccf Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6410bf8973c8c3a425be91d1c093ffcab87c21df differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6480227bfeb91067b425ede8c0ebc9e52d5d6e4a b/fuzz/gnutls_x509_parser_fuzzer.in/6480227bfeb91067b425ede8c0ebc9e52d5d6e4a new file mode 100644 index 0000000000..390e545389 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6480227bfeb91067b425ede8c0ebc9e52d5d6e4a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/649bff6650435bbcf64f34435a4addb142fb4036 b/fuzz/gnutls_x509_parser_fuzzer.in/649bff6650435bbcf64f34435a4addb142fb4036 new file mode 100644 index 0000000000..7f8330c4fb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/649bff6650435bbcf64f34435a4addb142fb4036 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/650831fb7da187ef0464be68a07cecbece459244 b/fuzz/gnutls_x509_parser_fuzzer.in/650831fb7da187ef0464be68a07cecbece459244 new file mode 100644 index 0000000000..b0b345eb91 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/650831fb7da187ef0464be68a07cecbece459244 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6516d6f92a993a9a6c2752df1b6c4cf739d4c7c9 b/fuzz/gnutls_x509_parser_fuzzer.in/6516d6f92a993a9a6c2752df1b6c4cf739d4c7c9 new file mode 100644 index 0000000000..2308bc1b34 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6516d6f92a993a9a6c2752df1b6c4cf739d4c7c9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/655d50379e1854166164cb6de57eebeb58b5b73a b/fuzz/gnutls_x509_parser_fuzzer.in/655d50379e1854166164cb6de57eebeb58b5b73a new file mode 100644 index 0000000000..c6791563ca Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/655d50379e1854166164cb6de57eebeb58b5b73a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/65e703b05136d9a7af06431a5e06ba0013fe6b72 b/fuzz/gnutls_x509_parser_fuzzer.in/65e703b05136d9a7af06431a5e06ba0013fe6b72 new file mode 100644 index 0000000000..deb642c28f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/65e703b05136d9a7af06431a5e06ba0013fe6b72 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/65f889956a56091d12cb09d806c272b5998a0c4e b/fuzz/gnutls_x509_parser_fuzzer.in/65f889956a56091d12cb09d806c272b5998a0c4e new file mode 100644 index 0000000000..c79f3df6c0 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/65f889956a56091d12cb09d806c272b5998a0c4e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/66189961e3f0cd54235d02b9f09afca71cab9c80 b/fuzz/gnutls_x509_parser_fuzzer.in/66189961e3f0cd54235d02b9f09afca71cab9c80 new file mode 100644 index 0000000000..92103c053b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/66189961e3f0cd54235d02b9f09afca71cab9c80 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/669b0c1c25add39bdbf14b9b7d564fd3e1d118a3 b/fuzz/gnutls_x509_parser_fuzzer.in/669b0c1c25add39bdbf14b9b7d564fd3e1d118a3 new file mode 100644 index 0000000000..53b7360e99 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/669b0c1c25add39bdbf14b9b7d564fd3e1d118a3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/670b4cc67c8ef563188e9f74d4bd8e5427c9d708 b/fuzz/gnutls_x509_parser_fuzzer.in/670b4cc67c8ef563188e9f74d4bd8e5427c9d708 new file mode 100644 index 0000000000..57de6e4d94 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/670b4cc67c8ef563188e9f74d4bd8e5427c9d708 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/671f8dcf2c6d3955dbc6df268ceac53d6464dd7d b/fuzz/gnutls_x509_parser_fuzzer.in/671f8dcf2c6d3955dbc6df268ceac53d6464dd7d new file mode 100644 index 0000000000..c2eb21b614 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/671f8dcf2c6d3955dbc6df268ceac53d6464dd7d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/67d5d500ab62a19aa26ec447748953be6d1fc914 b/fuzz/gnutls_x509_parser_fuzzer.in/67d5d500ab62a19aa26ec447748953be6d1fc914 new file mode 100644 index 0000000000..c1b2f05621 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/67d5d500ab62a19aa26ec447748953be6d1fc914 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/67db357c506aa551a49ed5523b29ff70b34bbb8a b/fuzz/gnutls_x509_parser_fuzzer.in/67db357c506aa551a49ed5523b29ff70b34bbb8a new file mode 100644 index 0000000000..9a86843a60 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/67db357c506aa551a49ed5523b29ff70b34bbb8a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/67e03b8d20bac31906798b5756d7bad3f6d02c16 b/fuzz/gnutls_x509_parser_fuzzer.in/67e03b8d20bac31906798b5756d7bad3f6d02c16 new file mode 100644 index 0000000000..6949c51ce9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/67e03b8d20bac31906798b5756d7bad3f6d02c16 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/68a06d22fcd02410e1afa763645155d7d7239a27 b/fuzz/gnutls_x509_parser_fuzzer.in/68a06d22fcd02410e1afa763645155d7d7239a27 new file mode 100644 index 0000000000..933b842b94 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/68a06d22fcd02410e1afa763645155d7d7239a27 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/68bf4f8afd848fe12794b6831d80d7935e8abb8f b/fuzz/gnutls_x509_parser_fuzzer.in/68bf4f8afd848fe12794b6831d80d7935e8abb8f new file mode 100644 index 0000000000..7a9658d9ed Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/68bf4f8afd848fe12794b6831d80d7935e8abb8f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/69c649502950061786ed66384924f339e4d8e444 b/fuzz/gnutls_x509_parser_fuzzer.in/69c649502950061786ed66384924f339e4d8e444 new file mode 100644 index 0000000000..506524c281 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/69c649502950061786ed66384924f339e4d8e444 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/69d815bd7fb9c11bb68963588509066bd36df61c b/fuzz/gnutls_x509_parser_fuzzer.in/69d815bd7fb9c11bb68963588509066bd36df61c new file mode 100644 index 0000000000..5e39f15d38 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/69d815bd7fb9c11bb68963588509066bd36df61c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6a22faf6b5f7a3fda27f34f8e8d1f915c766a9c0 b/fuzz/gnutls_x509_parser_fuzzer.in/6a22faf6b5f7a3fda27f34f8e8d1f915c766a9c0 new file mode 100644 index 0000000000..c96c6d7d3b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6a22faf6b5f7a3fda27f34f8e8d1f915c766a9c0 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6a89ec6f84c1e9475fdd7959e4b6db41b6c61fce b/fuzz/gnutls_x509_parser_fuzzer.in/6a89ec6f84c1e9475fdd7959e4b6db41b6c61fce new file mode 100644 index 0000000000..2f877272ae Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6a89ec6f84c1e9475fdd7959e4b6db41b6c61fce differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6aa6d938b1acf4aca049dd8256c28e695e431ba8 b/fuzz/gnutls_x509_parser_fuzzer.in/6aa6d938b1acf4aca049dd8256c28e695e431ba8 new file mode 100644 index 0000000000..0307c76c85 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6aa6d938b1acf4aca049dd8256c28e695e431ba8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6b4646693e1b850152de0a02875e6491e7a2d986 b/fuzz/gnutls_x509_parser_fuzzer.in/6b4646693e1b850152de0a02875e6491e7a2d986 new file mode 100644 index 0000000000..989ce21de4 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6b4646693e1b850152de0a02875e6491e7a2d986 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6bb1bc92d0efba1668e5bc5efb0f47edc6dc2148 b/fuzz/gnutls_x509_parser_fuzzer.in/6bb1bc92d0efba1668e5bc5efb0f47edc6dc2148 new file mode 100644 index 0000000000..4d5da73a3b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6bb1bc92d0efba1668e5bc5efb0f47edc6dc2148 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6bb4ec4ef6ac590a792cdf4d9a3b3765e456a812 b/fuzz/gnutls_x509_parser_fuzzer.in/6bb4ec4ef6ac590a792cdf4d9a3b3765e456a812 new file mode 100644 index 0000000000..86fa4ae92d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6bb4ec4ef6ac590a792cdf4d9a3b3765e456a812 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6cc6cbf7f98993eade5f90cc83be9f82c3e8d232 b/fuzz/gnutls_x509_parser_fuzzer.in/6cc6cbf7f98993eade5f90cc83be9f82c3e8d232 new file mode 100644 index 0000000000..8562c65da5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6cc6cbf7f98993eade5f90cc83be9f82c3e8d232 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6d7d71fcfed2bd77104ba64d816fa80d2b6d3075 b/fuzz/gnutls_x509_parser_fuzzer.in/6d7d71fcfed2bd77104ba64d816fa80d2b6d3075 new file mode 100644 index 0000000000..564ca336ea Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6d7d71fcfed2bd77104ba64d816fa80d2b6d3075 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6da910398ae968e4c4498504b4bfa67e43da0e68 b/fuzz/gnutls_x509_parser_fuzzer.in/6da910398ae968e4c4498504b4bfa67e43da0e68 new file mode 100644 index 0000000000..e8817a9980 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6da910398ae968e4c4498504b4bfa67e43da0e68 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6e5d49d2db59472c23cfcb9e74155dd874319c0c b/fuzz/gnutls_x509_parser_fuzzer.in/6e5d49d2db59472c23cfcb9e74155dd874319c0c new file mode 100644 index 0000000000..24fccd6d1e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6e5d49d2db59472c23cfcb9e74155dd874319c0c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6e95dc65c247fb8f5155bdc0b956b12f035464b9 b/fuzz/gnutls_x509_parser_fuzzer.in/6e95dc65c247fb8f5155bdc0b956b12f035464b9 new file mode 100644 index 0000000000..d95cd95ecb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6e95dc65c247fb8f5155bdc0b956b12f035464b9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6eb3d20d159e55cc138689c67a0f0047eaae4e69 b/fuzz/gnutls_x509_parser_fuzzer.in/6eb3d20d159e55cc138689c67a0f0047eaae4e69 new file mode 100644 index 0000000000..b7a01e84e5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6eb3d20d159e55cc138689c67a0f0047eaae4e69 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6eed8afdb90bf15554b8dc08317944a8326bc735 b/fuzz/gnutls_x509_parser_fuzzer.in/6eed8afdb90bf15554b8dc08317944a8326bc735 new file mode 100644 index 0000000000..0fc28a443c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6eed8afdb90bf15554b8dc08317944a8326bc735 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/6f6e898bfd4b6b1201b5cd59745d0a14d3f6a20c b/fuzz/gnutls_x509_parser_fuzzer.in/6f6e898bfd4b6b1201b5cd59745d0a14d3f6a20c new file mode 100644 index 0000000000..7e6d7b6dc6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/6f6e898bfd4b6b1201b5cd59745d0a14d3f6a20c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7003549a5635566f8edbb811218188906a50a83b b/fuzz/gnutls_x509_parser_fuzzer.in/7003549a5635566f8edbb811218188906a50a83b new file mode 100644 index 0000000000..d3159f317f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7003549a5635566f8edbb811218188906a50a83b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7047cf86738ca0d6b4c66546ddb56dd9d061da0a b/fuzz/gnutls_x509_parser_fuzzer.in/7047cf86738ca0d6b4c66546ddb56dd9d061da0a new file mode 100644 index 0000000000..bc080d27c5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7047cf86738ca0d6b4c66546ddb56dd9d061da0a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/704c8df73d02bac63501f8b2aea288c10a7acee1 b/fuzz/gnutls_x509_parser_fuzzer.in/704c8df73d02bac63501f8b2aea288c10a7acee1 new file mode 100644 index 0000000000..541ddbbce6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/704c8df73d02bac63501f8b2aea288c10a7acee1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/71111fb6a1919a1bc4a641badea68e54c17f2acb b/fuzz/gnutls_x509_parser_fuzzer.in/71111fb6a1919a1bc4a641badea68e54c17f2acb new file mode 100644 index 0000000000..f6000f3300 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/71111fb6a1919a1bc4a641badea68e54c17f2acb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7161adb78c2057bd7a77a25b1c5c6e46796591ab b/fuzz/gnutls_x509_parser_fuzzer.in/7161adb78c2057bd7a77a25b1c5c6e46796591ab new file mode 100644 index 0000000000..4172a827c2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7161adb78c2057bd7a77a25b1c5c6e46796591ab differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/73549ba0d089f2e3c2cdf8dafbf670b4cfb4b819 b/fuzz/gnutls_x509_parser_fuzzer.in/73549ba0d089f2e3c2cdf8dafbf670b4cfb4b819 new file mode 100644 index 0000000000..4dcaf90c78 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/73549ba0d089f2e3c2cdf8dafbf670b4cfb4b819 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/735a92cd63b1c9c2b7be3b7afa00e6c8ae6e59fc b/fuzz/gnutls_x509_parser_fuzzer.in/735a92cd63b1c9c2b7be3b7afa00e6c8ae6e59fc new file mode 100644 index 0000000000..17242b53f2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/735a92cd63b1c9c2b7be3b7afa00e6c8ae6e59fc differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7361a75691903c1b83eaff178199769657e06577 b/fuzz/gnutls_x509_parser_fuzzer.in/7361a75691903c1b83eaff178199769657e06577 new file mode 100644 index 0000000000..0068cceed9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7361a75691903c1b83eaff178199769657e06577 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/736d70b460b63e89a0e9eb3a7978f1eb84f59935 b/fuzz/gnutls_x509_parser_fuzzer.in/736d70b460b63e89a0e9eb3a7978f1eb84f59935 new file mode 100644 index 0000000000..4efce2fce5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/736d70b460b63e89a0e9eb3a7978f1eb84f59935 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/749ad6aa70a0e2509581dc0fdc8b9471b3932cb7 b/fuzz/gnutls_x509_parser_fuzzer.in/749ad6aa70a0e2509581dc0fdc8b9471b3932cb7 new file mode 100644 index 0000000000..f6a8684c80 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/749ad6aa70a0e2509581dc0fdc8b9471b3932cb7 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/752d1dad45e5768274bc56f2ec34dda13df86ca5 b/fuzz/gnutls_x509_parser_fuzzer.in/752d1dad45e5768274bc56f2ec34dda13df86ca5 new file mode 100644 index 0000000000..9ce4223b04 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/752d1dad45e5768274bc56f2ec34dda13df86ca5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/755a2ba616e4a2f7a25afc6134880a8a0fe79022 b/fuzz/gnutls_x509_parser_fuzzer.in/755a2ba616e4a2f7a25afc6134880a8a0fe79022 new file mode 100644 index 0000000000..4401d3aa3d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/755a2ba616e4a2f7a25afc6134880a8a0fe79022 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7578e4c21dec163b15e144047bf23514e869f227 b/fuzz/gnutls_x509_parser_fuzzer.in/7578e4c21dec163b15e144047bf23514e869f227 new file mode 100644 index 0000000000..1a24d83df1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7578e4c21dec163b15e144047bf23514e869f227 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7618a8a25d4ff3549cea1399f1743cd8fbdd2e46 b/fuzz/gnutls_x509_parser_fuzzer.in/7618a8a25d4ff3549cea1399f1743cd8fbdd2e46 new file mode 100644 index 0000000000..cc2952469a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7618a8a25d4ff3549cea1399f1743cd8fbdd2e46 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/762f0f5712ec1201a8ddcb307a4ac0d6f73e5251 b/fuzz/gnutls_x509_parser_fuzzer.in/762f0f5712ec1201a8ddcb307a4ac0d6f73e5251 new file mode 100644 index 0000000000..dbe3b85ef7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/762f0f5712ec1201a8ddcb307a4ac0d6f73e5251 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7669361ef6b2c0085bad629ee3e7a7ad3dc0a9d2 b/fuzz/gnutls_x509_parser_fuzzer.in/7669361ef6b2c0085bad629ee3e7a7ad3dc0a9d2 new file mode 100644 index 0000000000..b0498bab44 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7669361ef6b2c0085bad629ee3e7a7ad3dc0a9d2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/76d5fc8e6fa0363d8c81ef366d3111f5f73a3169 b/fuzz/gnutls_x509_parser_fuzzer.in/76d5fc8e6fa0363d8c81ef366d3111f5f73a3169 new file mode 100644 index 0000000000..98c69f177e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/76d5fc8e6fa0363d8c81ef366d3111f5f73a3169 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/771876052a3cccefee8cb7490fb3df021c5aa040 b/fuzz/gnutls_x509_parser_fuzzer.in/771876052a3cccefee8cb7490fb3df021c5aa040 new file mode 100644 index 0000000000..1725220278 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/771876052a3cccefee8cb7490fb3df021c5aa040 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/771dded734a1c8cd64e3d787537f111240904a0b b/fuzz/gnutls_x509_parser_fuzzer.in/771dded734a1c8cd64e3d787537f111240904a0b new file mode 100644 index 0000000000..f3c6d4111e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/771dded734a1c8cd64e3d787537f111240904a0b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7747e9487e4483bc0c4963481e366a682308ba0d b/fuzz/gnutls_x509_parser_fuzzer.in/7747e9487e4483bc0c4963481e366a682308ba0d new file mode 100644 index 0000000000..e473b53ceb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7747e9487e4483bc0c4963481e366a682308ba0d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/774d969257c0dfeb240f1281bcdb84f2acf3682a b/fuzz/gnutls_x509_parser_fuzzer.in/774d969257c0dfeb240f1281bcdb84f2acf3682a new file mode 100644 index 0000000000..37bc913ea5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/774d969257c0dfeb240f1281bcdb84f2acf3682a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/77722f7b21fc3b50987927c8301c1a72642b8dbf b/fuzz/gnutls_x509_parser_fuzzer.in/77722f7b21fc3b50987927c8301c1a72642b8dbf new file mode 100644 index 0000000000..4d22156f5e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/77722f7b21fc3b50987927c8301c1a72642b8dbf differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7794ce170616b96f39a96471a9f076e6dc69043b b/fuzz/gnutls_x509_parser_fuzzer.in/7794ce170616b96f39a96471a9f076e6dc69043b new file mode 100644 index 0000000000..757c858db7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7794ce170616b96f39a96471a9f076e6dc69043b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/77d24e02b2555f44057c8b613149597acd12557c b/fuzz/gnutls_x509_parser_fuzzer.in/77d24e02b2555f44057c8b613149597acd12557c new file mode 100644 index 0000000000..5ef7721129 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/77d24e02b2555f44057c8b613149597acd12557c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/787223393e7a0db5d82cbfa0965b7d493da32540 b/fuzz/gnutls_x509_parser_fuzzer.in/787223393e7a0db5d82cbfa0965b7d493da32540 new file mode 100644 index 0000000000..8d46dfa807 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/787223393e7a0db5d82cbfa0965b7d493da32540 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/78ec93746721604da861c4233684c8e45205c7eb b/fuzz/gnutls_x509_parser_fuzzer.in/78ec93746721604da861c4233684c8e45205c7eb new file mode 100644 index 0000000000..d1aa53757e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/78ec93746721604da861c4233684c8e45205c7eb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/79427323a1cd959dc859eba924cf8d6b6e944381 b/fuzz/gnutls_x509_parser_fuzzer.in/79427323a1cd959dc859eba924cf8d6b6e944381 new file mode 100644 index 0000000000..e765bd120e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/79427323a1cd959dc859eba924cf8d6b6e944381 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/79982662ec05a53ca5d1a0956b2e30cf5434d072 b/fuzz/gnutls_x509_parser_fuzzer.in/79982662ec05a53ca5d1a0956b2e30cf5434d072 new file mode 100644 index 0000000000..71e735603c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/79982662ec05a53ca5d1a0956b2e30cf5434d072 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7a3a30cb3d1be9242caf3b2f1a57299ad90d3fdd b/fuzz/gnutls_x509_parser_fuzzer.in/7a3a30cb3d1be9242caf3b2f1a57299ad90d3fdd new file mode 100644 index 0000000000..bd06677055 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7a3a30cb3d1be9242caf3b2f1a57299ad90d3fdd differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7c95b2a64bce64b48f99746fcf19867284d68334 b/fuzz/gnutls_x509_parser_fuzzer.in/7c95b2a64bce64b48f99746fcf19867284d68334 new file mode 100644 index 0000000000..ff10d4b653 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7c95b2a64bce64b48f99746fcf19867284d68334 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7ca8a9368f0e92d937c356eac7a8882998347201 b/fuzz/gnutls_x509_parser_fuzzer.in/7ca8a9368f0e92d937c356eac7a8882998347201 new file mode 100644 index 0000000000..5df7331f0e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7ca8a9368f0e92d937c356eac7a8882998347201 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7cc3b46674df9cccc7546a7d11c8790d8000c187 b/fuzz/gnutls_x509_parser_fuzzer.in/7cc3b46674df9cccc7546a7d11c8790d8000c187 new file mode 100644 index 0000000000..cb1ad25132 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7cc3b46674df9cccc7546a7d11c8790d8000c187 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7d07f15822d49d2934e7db31dcf83295304248bf b/fuzz/gnutls_x509_parser_fuzzer.in/7d07f15822d49d2934e7db31dcf83295304248bf new file mode 100644 index 0000000000..b17227af46 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7d07f15822d49d2934e7db31dcf83295304248bf differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7d2f024bb6c78eb83f9e4eb766b88e04e49bc7e6 b/fuzz/gnutls_x509_parser_fuzzer.in/7d2f024bb6c78eb83f9e4eb766b88e04e49bc7e6 new file mode 100644 index 0000000000..e7d20f7a0d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7d2f024bb6c78eb83f9e4eb766b88e04e49bc7e6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7eb0c8255d0a6263142fcaa7b07636da70a1fc6c b/fuzz/gnutls_x509_parser_fuzzer.in/7eb0c8255d0a6263142fcaa7b07636da70a1fc6c new file mode 100644 index 0000000000..bf64333a65 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7eb0c8255d0a6263142fcaa7b07636da70a1fc6c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7ebfa2fe8a0cefa830241d47963a5f80168fe15e b/fuzz/gnutls_x509_parser_fuzzer.in/7ebfa2fe8a0cefa830241d47963a5f80168fe15e new file mode 100644 index 0000000000..f78a2b2c28 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7ebfa2fe8a0cefa830241d47963a5f80168fe15e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7f09b41a3af753a99e4098ded9a086c78d4c94a8 b/fuzz/gnutls_x509_parser_fuzzer.in/7f09b41a3af753a99e4098ded9a086c78d4c94a8 new file mode 100644 index 0000000000..2e0c28bb7f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7f09b41a3af753a99e4098ded9a086c78d4c94a8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/7f2d1e01bc4700acfe1cbdc5d2e8e7cf30dc9e37 b/fuzz/gnutls_x509_parser_fuzzer.in/7f2d1e01bc4700acfe1cbdc5d2e8e7cf30dc9e37 new file mode 100644 index 0000000000..7dd34c49cc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/7f2d1e01bc4700acfe1cbdc5d2e8e7cf30dc9e37 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/808e2bf5236c2bbb7c16fc43d0e123a324c5b800 b/fuzz/gnutls_x509_parser_fuzzer.in/808e2bf5236c2bbb7c16fc43d0e123a324c5b800 new file mode 100644 index 0000000000..d3048306e1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/808e2bf5236c2bbb7c16fc43d0e123a324c5b800 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/80ac501fd70d5a26b4f00069e47c781f222ec5bc b/fuzz/gnutls_x509_parser_fuzzer.in/80ac501fd70d5a26b4f00069e47c781f222ec5bc new file mode 100644 index 0000000000..1da2cc7a14 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/80ac501fd70d5a26b4f00069e47c781f222ec5bc differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/80c6fb54516dde8e438793a79675840c909927e8 b/fuzz/gnutls_x509_parser_fuzzer.in/80c6fb54516dde8e438793a79675840c909927e8 new file mode 100644 index 0000000000..0b88f2d823 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/80c6fb54516dde8e438793a79675840c909927e8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/80cbc6eaf27c7d36c6b65ca506afaf3663ccb952 b/fuzz/gnutls_x509_parser_fuzzer.in/80cbc6eaf27c7d36c6b65ca506afaf3663ccb952 new file mode 100644 index 0000000000..e49206fc06 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/80cbc6eaf27c7d36c6b65ca506afaf3663ccb952 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/80ffb210e8102988e36ffbd3082197912e27aeec b/fuzz/gnutls_x509_parser_fuzzer.in/80ffb210e8102988e36ffbd3082197912e27aeec new file mode 100644 index 0000000000..edfe93db14 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/80ffb210e8102988e36ffbd3082197912e27aeec differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/81091edd780da37695e467add0f2507f605f11c8 b/fuzz/gnutls_x509_parser_fuzzer.in/81091edd780da37695e467add0f2507f605f11c8 new file mode 100644 index 0000000000..8f5d2783b9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/81091edd780da37695e467add0f2507f605f11c8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8169327006c2e0ed0abc897176a5b2c5c412d791 b/fuzz/gnutls_x509_parser_fuzzer.in/8169327006c2e0ed0abc897176a5b2c5c412d791 new file mode 100644 index 0000000000..320b7dd155 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8169327006c2e0ed0abc897176a5b2c5c412d791 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/818ff6b334455f106d25e90e8823fba76e5d3576 b/fuzz/gnutls_x509_parser_fuzzer.in/818ff6b334455f106d25e90e8823fba76e5d3576 new file mode 100644 index 0000000000..bd2128cc11 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/818ff6b334455f106d25e90e8823fba76e5d3576 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/820179721ec5dea4be1e249b0d4e850aed73526d b/fuzz/gnutls_x509_parser_fuzzer.in/820179721ec5dea4be1e249b0d4e850aed73526d new file mode 100644 index 0000000000..5cb8b70a62 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/820179721ec5dea4be1e249b0d4e850aed73526d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/82a8a568b1dc74d4dc46fdadde93524fc52eb7f1 b/fuzz/gnutls_x509_parser_fuzzer.in/82a8a568b1dc74d4dc46fdadde93524fc52eb7f1 new file mode 100644 index 0000000000..7e421911e6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/82a8a568b1dc74d4dc46fdadde93524fc52eb7f1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/82d6ea6332267d4eec56706cb8cf7c4ddeab3dc0 b/fuzz/gnutls_x509_parser_fuzzer.in/82d6ea6332267d4eec56706cb8cf7c4ddeab3dc0 new file mode 100644 index 0000000000..1994ae7616 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/82d6ea6332267d4eec56706cb8cf7c4ddeab3dc0 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/831d2f575f2a013df519ae491dbf675d1d3b9735 b/fuzz/gnutls_x509_parser_fuzzer.in/831d2f575f2a013df519ae491dbf675d1d3b9735 new file mode 100644 index 0000000000..b988f54fb8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/831d2f575f2a013df519ae491dbf675d1d3b9735 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8361563c9fecb372ac18634d0d14d7c3a9ee157d b/fuzz/gnutls_x509_parser_fuzzer.in/8361563c9fecb372ac18634d0d14d7c3a9ee157d new file mode 100644 index 0000000000..597679d597 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8361563c9fecb372ac18634d0d14d7c3a9ee157d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/838b69e4adb85d619f1d0631450be95c5e7a24a7 b/fuzz/gnutls_x509_parser_fuzzer.in/838b69e4adb85d619f1d0631450be95c5e7a24a7 new file mode 100644 index 0000000000..844e66baf2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/838b69e4adb85d619f1d0631450be95c5e7a24a7 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/83c14b9f91368059d3cfc03120bbae7073f014ee b/fuzz/gnutls_x509_parser_fuzzer.in/83c14b9f91368059d3cfc03120bbae7073f014ee new file mode 100644 index 0000000000..5f3424076b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/83c14b9f91368059d3cfc03120bbae7073f014ee differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8414e6cb941d052019703b4e97a5c0d78351b81d b/fuzz/gnutls_x509_parser_fuzzer.in/8414e6cb941d052019703b4e97a5c0d78351b81d new file mode 100644 index 0000000000..bd84219104 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8414e6cb941d052019703b4e97a5c0d78351b81d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/841fb9aa7134da61a938e4e9f18057c73c8924ab b/fuzz/gnutls_x509_parser_fuzzer.in/841fb9aa7134da61a938e4e9f18057c73c8924ab new file mode 100644 index 0000000000..54d0979ff7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/841fb9aa7134da61a938e4e9f18057c73c8924ab differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/848bebc84858ce770b1c7ffd0d0e370ebbc16498 b/fuzz/gnutls_x509_parser_fuzzer.in/848bebc84858ce770b1c7ffd0d0e370ebbc16498 new file mode 100644 index 0000000000..2dfd4b39f7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/848bebc84858ce770b1c7ffd0d0e370ebbc16498 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/85d4f0ca9ffb8ad14574b2fe0288ba9f5618ebbd b/fuzz/gnutls_x509_parser_fuzzer.in/85d4f0ca9ffb8ad14574b2fe0288ba9f5618ebbd new file mode 100644 index 0000000000..50ee63ae1d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/85d4f0ca9ffb8ad14574b2fe0288ba9f5618ebbd differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/85fd41e0f864940414481f397a32b5a8b9020ed9 b/fuzz/gnutls_x509_parser_fuzzer.in/85fd41e0f864940414481f397a32b5a8b9020ed9 new file mode 100644 index 0000000000..35298886f5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/85fd41e0f864940414481f397a32b5a8b9020ed9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8821883e77a5d982dc7be7373435c25d144e8716 b/fuzz/gnutls_x509_parser_fuzzer.in/8821883e77a5d982dc7be7373435c25d144e8716 new file mode 100644 index 0000000000..2489a6b428 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8821883e77a5d982dc7be7373435c25d144e8716 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/88d012a53f66c3563a10d703fa7c10fd3e0b57dd b/fuzz/gnutls_x509_parser_fuzzer.in/88d012a53f66c3563a10d703fa7c10fd3e0b57dd new file mode 100644 index 0000000000..a84cbe314a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/88d012a53f66c3563a10d703fa7c10fd3e0b57dd differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/88d967198cc75041beb9f010ff4884f6b96af9e0 b/fuzz/gnutls_x509_parser_fuzzer.in/88d967198cc75041beb9f010ff4884f6b96af9e0 new file mode 100644 index 0000000000..a449301d3d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/88d967198cc75041beb9f010ff4884f6b96af9e0 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/897179e1baeb8e92176c1d1f84590dd9922325ba b/fuzz/gnutls_x509_parser_fuzzer.in/897179e1baeb8e92176c1d1f84590dd9922325ba new file mode 100644 index 0000000000..898ee7bcd5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/897179e1baeb8e92176c1d1f84590dd9922325ba differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/89b4c9ee46448b3b7882dfd4af0bc742b20ab4c2 b/fuzz/gnutls_x509_parser_fuzzer.in/89b4c9ee46448b3b7882dfd4af0bc742b20ab4c2 new file mode 100644 index 0000000000..1f853df1c2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/89b4c9ee46448b3b7882dfd4af0bc742b20ab4c2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/89e4f6c2496de7d7af7520aa0c2a7854a38b1752 b/fuzz/gnutls_x509_parser_fuzzer.in/89e4f6c2496de7d7af7520aa0c2a7854a38b1752 new file mode 100644 index 0000000000..2dd924c03b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/89e4f6c2496de7d7af7520aa0c2a7854a38b1752 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8a1f5a6d20f5f5a9a593b13e5df236157fc472d5 b/fuzz/gnutls_x509_parser_fuzzer.in/8a1f5a6d20f5f5a9a593b13e5df236157fc472d5 new file mode 100644 index 0000000000..9e0af1fc28 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8a1f5a6d20f5f5a9a593b13e5df236157fc472d5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8a231ab2409bf02192ee5ac7b7eea87487f1b643 b/fuzz/gnutls_x509_parser_fuzzer.in/8a231ab2409bf02192ee5ac7b7eea87487f1b643 new file mode 100644 index 0000000000..f390ddf6a6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8a231ab2409bf02192ee5ac7b7eea87487f1b643 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8a3a87d88cd6585a12de91758ec16525120560d2 b/fuzz/gnutls_x509_parser_fuzzer.in/8a3a87d88cd6585a12de91758ec16525120560d2 new file mode 100644 index 0000000000..8c30036048 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8a3a87d88cd6585a12de91758ec16525120560d2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8a42603e6530b0720244fae5e1fda12c2adb3085 b/fuzz/gnutls_x509_parser_fuzzer.in/8a42603e6530b0720244fae5e1fda12c2adb3085 new file mode 100644 index 0000000000..d2302aceb7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8a42603e6530b0720244fae5e1fda12c2adb3085 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8a844bb9c48eb9bca1870f214369a55f104bc9b2 b/fuzz/gnutls_x509_parser_fuzzer.in/8a844bb9c48eb9bca1870f214369a55f104bc9b2 new file mode 100644 index 0000000000..05104b7a9d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8a844bb9c48eb9bca1870f214369a55f104bc9b2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8abfd5bb4726b3ad1823ae9cd7012e3d618be2c6 b/fuzz/gnutls_x509_parser_fuzzer.in/8abfd5bb4726b3ad1823ae9cd7012e3d618be2c6 new file mode 100644 index 0000000000..6faa765115 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8abfd5bb4726b3ad1823ae9cd7012e3d618be2c6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8b0db642abd739d7e618f474dd8dc9efb05012d4 b/fuzz/gnutls_x509_parser_fuzzer.in/8b0db642abd739d7e618f474dd8dc9efb05012d4 new file mode 100644 index 0000000000..615ee46945 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8b0db642abd739d7e618f474dd8dc9efb05012d4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8b6d32776f9232512ea72856f89e8dc7deef4d81 b/fuzz/gnutls_x509_parser_fuzzer.in/8b6d32776f9232512ea72856f89e8dc7deef4d81 new file mode 100644 index 0000000000..e536023409 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8b6d32776f9232512ea72856f89e8dc7deef4d81 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8b8c7d4138f86c030f4731f5d4aa9dcfae873260 b/fuzz/gnutls_x509_parser_fuzzer.in/8b8c7d4138f86c030f4731f5d4aa9dcfae873260 new file mode 100644 index 0000000000..7ad1bcc104 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8b8c7d4138f86c030f4731f5d4aa9dcfae873260 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8c8d013c4aadcb4031c688fc24de1108c71aaecf b/fuzz/gnutls_x509_parser_fuzzer.in/8c8d013c4aadcb4031c688fc24de1108c71aaecf new file mode 100644 index 0000000000..09c68470d8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8c8d013c4aadcb4031c688fc24de1108c71aaecf differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8c93e6c0897d6165e0137e09678196b586b38110 b/fuzz/gnutls_x509_parser_fuzzer.in/8c93e6c0897d6165e0137e09678196b586b38110 new file mode 100644 index 0000000000..a35a78ca5b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8c93e6c0897d6165e0137e09678196b586b38110 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8cebd45449b3797fa0161b4e9c508a7eb85fe7e7 b/fuzz/gnutls_x509_parser_fuzzer.in/8cebd45449b3797fa0161b4e9c508a7eb85fe7e7 new file mode 100644 index 0000000000..b371598bd3 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8cebd45449b3797fa0161b4e9c508a7eb85fe7e7 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8e477949d14585031206998b41cc2e05a0d89b68 b/fuzz/gnutls_x509_parser_fuzzer.in/8e477949d14585031206998b41cc2e05a0d89b68 new file mode 100644 index 0000000000..39a7df0704 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8e477949d14585031206998b41cc2e05a0d89b68 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8e4c392b33c3a938c85855da3345ba796d710b09 b/fuzz/gnutls_x509_parser_fuzzer.in/8e4c392b33c3a938c85855da3345ba796d710b09 new file mode 100644 index 0000000000..7a7ae22b9e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8e4c392b33c3a938c85855da3345ba796d710b09 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8ec70904b9aa52a53d4979a2610c958b7841f51c b/fuzz/gnutls_x509_parser_fuzzer.in/8ec70904b9aa52a53d4979a2610c958b7841f51c new file mode 100644 index 0000000000..87f9f2db15 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8ec70904b9aa52a53d4979a2610c958b7841f51c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8f621387dd97bf0c2cacb0401e22609917480609 b/fuzz/gnutls_x509_parser_fuzzer.in/8f621387dd97bf0c2cacb0401e22609917480609 new file mode 100644 index 0000000000..46ae94c3c9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8f621387dd97bf0c2cacb0401e22609917480609 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/8f65124132ce9782dd4684bbdfe06033e5159f46 b/fuzz/gnutls_x509_parser_fuzzer.in/8f65124132ce9782dd4684bbdfe06033e5159f46 new file mode 100644 index 0000000000..42f886b2ce Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/8f65124132ce9782dd4684bbdfe06033e5159f46 differ diff --git a/devel/fuzz/gnutls_x509_parser.in/cert8.der b/fuzz/gnutls_x509_parser_fuzzer.in/903150932f6379b412f514ef7f932c43543a74b8 similarity index 100% rename from devel/fuzz/gnutls_x509_parser.in/cert8.der rename to fuzz/gnutls_x509_parser_fuzzer.in/903150932f6379b412f514ef7f932c43543a74b8 diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/90820e82bd6bac36940c49f05acf59182d5bc91f b/fuzz/gnutls_x509_parser_fuzzer.in/90820e82bd6bac36940c49f05acf59182d5bc91f new file mode 100644 index 0000000000..3d07e936a5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/90820e82bd6bac36940c49f05acf59182d5bc91f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/90be30e2a73cf0cd592513fa16beb7d4bf7b1fce b/fuzz/gnutls_x509_parser_fuzzer.in/90be30e2a73cf0cd592513fa16beb7d4bf7b1fce new file mode 100644 index 0000000000..bc469dbe14 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/90be30e2a73cf0cd592513fa16beb7d4bf7b1fce differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/915177e5507d91a2e54853e66ac5d6c45f4410a1 b/fuzz/gnutls_x509_parser_fuzzer.in/915177e5507d91a2e54853e66ac5d6c45f4410a1 new file mode 100644 index 0000000000..aa40bcaa84 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/915177e5507d91a2e54853e66ac5d6c45f4410a1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/91f26717ef4d520f6b16eab723bdc3a0a79d2030 b/fuzz/gnutls_x509_parser_fuzzer.in/91f26717ef4d520f6b16eab723bdc3a0a79d2030 new file mode 100644 index 0000000000..e6c6630770 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/91f26717ef4d520f6b16eab723bdc3a0a79d2030 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/924d22a259c89a1e9858e3004f2f057cda48bbbb b/fuzz/gnutls_x509_parser_fuzzer.in/924d22a259c89a1e9858e3004f2f057cda48bbbb new file mode 100644 index 0000000000..350cc93020 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/924d22a259c89a1e9858e3004f2f057cda48bbbb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/927ff1ec0a86502f31c6d111fcf39e9f2e6a4b49 b/fuzz/gnutls_x509_parser_fuzzer.in/927ff1ec0a86502f31c6d111fcf39e9f2e6a4b49 new file mode 100644 index 0000000000..0e1f6d1e29 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/927ff1ec0a86502f31c6d111fcf39e9f2e6a4b49 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9289d096519556b8c8d4c943066119d8eff021f9 b/fuzz/gnutls_x509_parser_fuzzer.in/9289d096519556b8c8d4c943066119d8eff021f9 new file mode 100644 index 0000000000..090dce37b9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9289d096519556b8c8d4c943066119d8eff021f9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/92ac0f4f6d3d3b826d7ba543f99d922deb18f6e4 b/fuzz/gnutls_x509_parser_fuzzer.in/92ac0f4f6d3d3b826d7ba543f99d922deb18f6e4 new file mode 100644 index 0000000000..416c570234 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/92ac0f4f6d3d3b826d7ba543f99d922deb18f6e4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/92b7f955e1842ef4fd4f71af6136de3b4a79bb87 b/fuzz/gnutls_x509_parser_fuzzer.in/92b7f955e1842ef4fd4f71af6136de3b4a79bb87 new file mode 100644 index 0000000000..9b8f3a97a4 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/92b7f955e1842ef4fd4f71af6136de3b4a79bb87 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/93627a6c953f446d75fd9e02e2c42c0450d4b16e b/fuzz/gnutls_x509_parser_fuzzer.in/93627a6c953f446d75fd9e02e2c42c0450d4b16e new file mode 100644 index 0000000000..0f39c395d5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/93627a6c953f446d75fd9e02e2c42c0450d4b16e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/936d126e29dabbe0c733ca27556857927074e307 b/fuzz/gnutls_x509_parser_fuzzer.in/936d126e29dabbe0c733ca27556857927074e307 new file mode 100644 index 0000000000..e09a711ab7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/936d126e29dabbe0c733ca27556857927074e307 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9390cee72a0eab955dba949e8707ab67bba19213 b/fuzz/gnutls_x509_parser_fuzzer.in/9390cee72a0eab955dba949e8707ab67bba19213 new file mode 100644 index 0000000000..17132cdffc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9390cee72a0eab955dba949e8707ab67bba19213 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/93a53213bbe4d07316bf440aa03da2acc40cb87f b/fuzz/gnutls_x509_parser_fuzzer.in/93a53213bbe4d07316bf440aa03da2acc40cb87f new file mode 100644 index 0000000000..dc139c6ecf Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/93a53213bbe4d07316bf440aa03da2acc40cb87f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/945dcd3c8dce540eb044b3ba5d48604294ef8f05 b/fuzz/gnutls_x509_parser_fuzzer.in/945dcd3c8dce540eb044b3ba5d48604294ef8f05 new file mode 100644 index 0000000000..822c9be88b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/945dcd3c8dce540eb044b3ba5d48604294ef8f05 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9481a6eab329dd4ebd9a84998cbd7bb2a2ff87de b/fuzz/gnutls_x509_parser_fuzzer.in/9481a6eab329dd4ebd9a84998cbd7bb2a2ff87de new file mode 100644 index 0000000000..862e60a08f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9481a6eab329dd4ebd9a84998cbd7bb2a2ff87de differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9500ff3b51f7b41a31fc55147d79d747d9adfec5 b/fuzz/gnutls_x509_parser_fuzzer.in/9500ff3b51f7b41a31fc55147d79d747d9adfec5 new file mode 100644 index 0000000000..a40ccad6d6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9500ff3b51f7b41a31fc55147d79d747d9adfec5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9642af889966278319f27e6736aa1d1f2e49db20 b/fuzz/gnutls_x509_parser_fuzzer.in/9642af889966278319f27e6736aa1d1f2e49db20 new file mode 100644 index 0000000000..db6f5eea63 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9642af889966278319f27e6736aa1d1f2e49db20 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/96dc103a4b5e0708851b91c11db9a8e4632b4376 b/fuzz/gnutls_x509_parser_fuzzer.in/96dc103a4b5e0708851b91c11db9a8e4632b4376 new file mode 100644 index 0000000000..2050593741 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/96dc103a4b5e0708851b91c11db9a8e4632b4376 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/96e0b710725862e8b4a108343c906bbe68ed8be6 b/fuzz/gnutls_x509_parser_fuzzer.in/96e0b710725862e8b4a108343c906bbe68ed8be6 new file mode 100644 index 0000000000..61a32b53e4 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/96e0b710725862e8b4a108343c906bbe68ed8be6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/97335aacabe616a3b92c25187ef3ccc58dc09fad b/fuzz/gnutls_x509_parser_fuzzer.in/97335aacabe616a3b92c25187ef3ccc58dc09fad new file mode 100644 index 0000000000..d8d6fc10c9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/97335aacabe616a3b92c25187ef3ccc58dc09fad differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9757660a25fad5b998505fe7708c168471207b7f b/fuzz/gnutls_x509_parser_fuzzer.in/9757660a25fad5b998505fe7708c168471207b7f new file mode 100644 index 0000000000..e14ba22828 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9757660a25fad5b998505fe7708c168471207b7f differ diff --git a/devel/fuzz/gnutls_x509_parser.in/cert5.der b/fuzz/gnutls_x509_parser_fuzzer.in/975eb7d50ac48733b877b5376324f68ef8d98027 similarity index 100% rename from devel/fuzz/gnutls_x509_parser.in/cert5.der rename to fuzz/gnutls_x509_parser_fuzzer.in/975eb7d50ac48733b877b5376324f68ef8d98027 diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9898e38b22e7838a90952d384bfc9146e2cff2d5 b/fuzz/gnutls_x509_parser_fuzzer.in/9898e38b22e7838a90952d384bfc9146e2cff2d5 new file mode 100644 index 0000000000..4b63553d79 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9898e38b22e7838a90952d384bfc9146e2cff2d5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/996f8a637ccdde204856521559f6498942d277ec b/fuzz/gnutls_x509_parser_fuzzer.in/996f8a637ccdde204856521559f6498942d277ec new file mode 100644 index 0000000000..4e78d592c7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/996f8a637ccdde204856521559f6498942d277ec differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/99a8e7797f11ae21b1aff35168c4e557166b0e63 b/fuzz/gnutls_x509_parser_fuzzer.in/99a8e7797f11ae21b1aff35168c4e557166b0e63 new file mode 100644 index 0000000000..c530d7b23a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/99a8e7797f11ae21b1aff35168c4e557166b0e63 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9a4f731adcf737af31f594f9037078916907b348 b/fuzz/gnutls_x509_parser_fuzzer.in/9a4f731adcf737af31f594f9037078916907b348 new file mode 100644 index 0000000000..e4d8715ca7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9a4f731adcf737af31f594f9037078916907b348 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9afde387fd42579ebd855cefc986e8ec1b786670 b/fuzz/gnutls_x509_parser_fuzzer.in/9afde387fd42579ebd855cefc986e8ec1b786670 new file mode 100644 index 0000000000..5e084aabaf Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9afde387fd42579ebd855cefc986e8ec1b786670 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9b02119273ce83f4a27396e74f5c31a8eabab9cf b/fuzz/gnutls_x509_parser_fuzzer.in/9b02119273ce83f4a27396e74f5c31a8eabab9cf new file mode 100644 index 0000000000..a0c42b5f7e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9b02119273ce83f4a27396e74f5c31a8eabab9cf differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9b2b18f1bc1d7b871caacb51a864937f2840457b b/fuzz/gnutls_x509_parser_fuzzer.in/9b2b18f1bc1d7b871caacb51a864937f2840457b new file mode 100644 index 0000000000..b63d4977a4 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9b2b18f1bc1d7b871caacb51a864937f2840457b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9b7b34a76f596d7e4fc133ff09f531fda1734ee4 b/fuzz/gnutls_x509_parser_fuzzer.in/9b7b34a76f596d7e4fc133ff09f531fda1734ee4 new file mode 100644 index 0000000000..8e402ab21d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9b7b34a76f596d7e4fc133ff09f531fda1734ee4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9ba6cdf7d22800cef2f3adcb52253406d3ef4a83 b/fuzz/gnutls_x509_parser_fuzzer.in/9ba6cdf7d22800cef2f3adcb52253406d3ef4a83 new file mode 100644 index 0000000000..16801459f3 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9ba6cdf7d22800cef2f3adcb52253406d3ef4a83 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9c39f1b567b6b292db61683f3407934a98acf8b5 b/fuzz/gnutls_x509_parser_fuzzer.in/9c39f1b567b6b292db61683f3407934a98acf8b5 new file mode 100644 index 0000000000..ab2f7d1838 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9c39f1b567b6b292db61683f3407934a98acf8b5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9c5c3a027e8a01215eb9d20324b53e4ed7a6bce6 b/fuzz/gnutls_x509_parser_fuzzer.in/9c5c3a027e8a01215eb9d20324b53e4ed7a6bce6 new file mode 100644 index 0000000000..791015c16d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9c5c3a027e8a01215eb9d20324b53e4ed7a6bce6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9c6162f35a4833f55f0013c854a3943a222dc64c b/fuzz/gnutls_x509_parser_fuzzer.in/9c6162f35a4833f55f0013c854a3943a222dc64c new file mode 100644 index 0000000000..0bf752b36d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9c6162f35a4833f55f0013c854a3943a222dc64c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9c738fc7a494aaeb9ec626dda217bec0df5d040e b/fuzz/gnutls_x509_parser_fuzzer.in/9c738fc7a494aaeb9ec626dda217bec0df5d040e new file mode 100644 index 0000000000..8daa2c9d6e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9c738fc7a494aaeb9ec626dda217bec0df5d040e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9d3ab5179d0965f0e1787765c29aaf1a26ced321 b/fuzz/gnutls_x509_parser_fuzzer.in/9d3ab5179d0965f0e1787765c29aaf1a26ced321 new file mode 100644 index 0000000000..fe9dfb7a9c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9d3ab5179d0965f0e1787765c29aaf1a26ced321 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9d79689449784fc09a70efbec00fae7f5f91b47d b/fuzz/gnutls_x509_parser_fuzzer.in/9d79689449784fc09a70efbec00fae7f5f91b47d new file mode 100644 index 0000000000..80b4a3129d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9d79689449784fc09a70efbec00fae7f5f91b47d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9df7aa3812abf4b3fb45fc1bd71ddf5a3f2fac13 b/fuzz/gnutls_x509_parser_fuzzer.in/9df7aa3812abf4b3fb45fc1bd71ddf5a3f2fac13 new file mode 100644 index 0000000000..e3a88813b1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9df7aa3812abf4b3fb45fc1bd71ddf5a3f2fac13 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9e942a7d6582d6d2df34646daab0e21d71671e07 b/fuzz/gnutls_x509_parser_fuzzer.in/9e942a7d6582d6d2df34646daab0e21d71671e07 new file mode 100644 index 0000000000..e17b859358 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9e942a7d6582d6d2df34646daab0e21d71671e07 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9f054bf04308357c6dde1e3b8e5a070649dd694f b/fuzz/gnutls_x509_parser_fuzzer.in/9f054bf04308357c6dde1e3b8e5a070649dd694f new file mode 100644 index 0000000000..0de1cc9a3a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9f054bf04308357c6dde1e3b8e5a070649dd694f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9f1ad90938f59d0e81b02043e01a9593e3c4ea2b b/fuzz/gnutls_x509_parser_fuzzer.in/9f1ad90938f59d0e81b02043e01a9593e3c4ea2b new file mode 100644 index 0000000000..fb472a23a7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9f1ad90938f59d0e81b02043e01a9593e3c4ea2b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9f522a24187262b2454cabc95cfd54c1a736870c b/fuzz/gnutls_x509_parser_fuzzer.in/9f522a24187262b2454cabc95cfd54c1a736870c new file mode 100644 index 0000000000..12c4badb10 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9f522a24187262b2454cabc95cfd54c1a736870c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9f9dd7ee9543c7928baeb57c310f13838054e55b b/fuzz/gnutls_x509_parser_fuzzer.in/9f9dd7ee9543c7928baeb57c310f13838054e55b new file mode 100644 index 0000000000..1868c74313 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9f9dd7ee9543c7928baeb57c310f13838054e55b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9fb59a8c6630a2feda712a8822357f0d88e0d6d4 b/fuzz/gnutls_x509_parser_fuzzer.in/9fb59a8c6630a2feda712a8822357f0d88e0d6d4 new file mode 100644 index 0000000000..4bf62c8176 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9fb59a8c6630a2feda712a8822357f0d88e0d6d4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/9fd52c76d98ac6b4b2828d01cae684a3b7e2dee4 b/fuzz/gnutls_x509_parser_fuzzer.in/9fd52c76d98ac6b4b2828d01cae684a3b7e2dee4 new file mode 100644 index 0000000000..ad23243fff Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/9fd52c76d98ac6b4b2828d01cae684a3b7e2dee4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a00ec90855803329cfebd080468a0bf879de5232 b/fuzz/gnutls_x509_parser_fuzzer.in/a00ec90855803329cfebd080468a0bf879de5232 new file mode 100644 index 0000000000..8d74f8163f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a00ec90855803329cfebd080468a0bf879de5232 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a0897fe5bcac93ea76c1eb6dcacef5126c3fec2e b/fuzz/gnutls_x509_parser_fuzzer.in/a0897fe5bcac93ea76c1eb6dcacef5126c3fec2e new file mode 100644 index 0000000000..f6fb761c06 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a0897fe5bcac93ea76c1eb6dcacef5126c3fec2e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a0f7fbdd4422cf692d4c5ceb43a3544789234c96 b/fuzz/gnutls_x509_parser_fuzzer.in/a0f7fbdd4422cf692d4c5ceb43a3544789234c96 new file mode 100644 index 0000000000..1768643fef Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a0f7fbdd4422cf692d4c5ceb43a3544789234c96 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a124315a5db3b611f7440e3933dcff594ad76db7 b/fuzz/gnutls_x509_parser_fuzzer.in/a124315a5db3b611f7440e3933dcff594ad76db7 new file mode 100644 index 0000000000..edb24399e6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a124315a5db3b611f7440e3933dcff594ad76db7 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a1c7cbed851feff7657bd3faab9880a10ec8e0b8 b/fuzz/gnutls_x509_parser_fuzzer.in/a1c7cbed851feff7657bd3faab9880a10ec8e0b8 new file mode 100644 index 0000000000..aee562bf5c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a1c7cbed851feff7657bd3faab9880a10ec8e0b8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a2289b7b7e4107ead249f83cb2cee73847e1f12b b/fuzz/gnutls_x509_parser_fuzzer.in/a2289b7b7e4107ead249f83cb2cee73847e1f12b new file mode 100644 index 0000000000..777a66228a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a2289b7b7e4107ead249f83cb2cee73847e1f12b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a2762600ca77130edf61f8603ddad933c86fe035 b/fuzz/gnutls_x509_parser_fuzzer.in/a2762600ca77130edf61f8603ddad933c86fe035 new file mode 100644 index 0000000000..43b705750b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a2762600ca77130edf61f8603ddad933c86fe035 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a2f16f4b9f4464d4f72e4c8f4db6611cdeba54cf b/fuzz/gnutls_x509_parser_fuzzer.in/a2f16f4b9f4464d4f72e4c8f4db6611cdeba54cf new file mode 100644 index 0000000000..b410cdb917 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a2f16f4b9f4464d4f72e4c8f4db6611cdeba54cf differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a3e8a5a8b0cb1e441b9d1a9baf572c1e3f122b5f b/fuzz/gnutls_x509_parser_fuzzer.in/a3e8a5a8b0cb1e441b9d1a9baf572c1e3f122b5f new file mode 100644 index 0000000000..9ff90dafdf Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a3e8a5a8b0cb1e441b9d1a9baf572c1e3f122b5f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a402afaec9c9769cfed7ae0dc95c4638901ccf51 b/fuzz/gnutls_x509_parser_fuzzer.in/a402afaec9c9769cfed7ae0dc95c4638901ccf51 new file mode 100644 index 0000000000..d1f5ae2d5a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a402afaec9c9769cfed7ae0dc95c4638901ccf51 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a46b1367746cab66984fd5e215fc0a4a9f2acd7f b/fuzz/gnutls_x509_parser_fuzzer.in/a46b1367746cab66984fd5e215fc0a4a9f2acd7f new file mode 100644 index 0000000000..45a681efba Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a46b1367746cab66984fd5e215fc0a4a9f2acd7f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a46c3f5d33f228faeb6235104c0b1d642a7f40db b/fuzz/gnutls_x509_parser_fuzzer.in/a46c3f5d33f228faeb6235104c0b1d642a7f40db new file mode 100644 index 0000000000..c48c2fd3f6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a46c3f5d33f228faeb6235104c0b1d642a7f40db differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a47c73e0fb27246ab0ab4f116582f93aa19816b3 b/fuzz/gnutls_x509_parser_fuzzer.in/a47c73e0fb27246ab0ab4f116582f93aa19816b3 new file mode 100644 index 0000000000..6cf56cfdd0 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a47c73e0fb27246ab0ab4f116582f93aa19816b3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a4d69d553e138a6c8360d8213149347352566e25 b/fuzz/gnutls_x509_parser_fuzzer.in/a4d69d553e138a6c8360d8213149347352566e25 new file mode 100644 index 0000000000..0a262e42e1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a4d69d553e138a6c8360d8213149347352566e25 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a50d78e14c0e210c7bd14a87012a85f854f4049b b/fuzz/gnutls_x509_parser_fuzzer.in/a50d78e14c0e210c7bd14a87012a85f854f4049b new file mode 100644 index 0000000000..26e3ab5434 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a50d78e14c0e210c7bd14a87012a85f854f4049b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a521da7b565dd245b303adca1c6eb928835ab7f6 b/fuzz/gnutls_x509_parser_fuzzer.in/a521da7b565dd245b303adca1c6eb928835ab7f6 new file mode 100644 index 0000000000..43f1a2060b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a521da7b565dd245b303adca1c6eb928835ab7f6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a6744be3b00ba86be92bbb9d334774762d394bd6 b/fuzz/gnutls_x509_parser_fuzzer.in/a6744be3b00ba86be92bbb9d334774762d394bd6 new file mode 100644 index 0000000000..cef5642875 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a6744be3b00ba86be92bbb9d334774762d394bd6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a770e012944905fd5112785f630a1cacb90c8632 b/fuzz/gnutls_x509_parser_fuzzer.in/a770e012944905fd5112785f630a1cacb90c8632 new file mode 100644 index 0000000000..a5aba8fae8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a770e012944905fd5112785f630a1cacb90c8632 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a7b59d1a3b0089ed8b4e4a1eaa75c143eb5a89e4 b/fuzz/gnutls_x509_parser_fuzzer.in/a7b59d1a3b0089ed8b4e4a1eaa75c143eb5a89e4 new file mode 100644 index 0000000000..6ca128cfb0 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a7b59d1a3b0089ed8b4e4a1eaa75c143eb5a89e4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a7bb24793fc5d5e4db72311f9daccd5c3809840a b/fuzz/gnutls_x509_parser_fuzzer.in/a7bb24793fc5d5e4db72311f9daccd5c3809840a new file mode 100644 index 0000000000..69b7572dee Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a7bb24793fc5d5e4db72311f9daccd5c3809840a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a8d9bc68d43d4b2d11586e935a605bccbd9f69ba b/fuzz/gnutls_x509_parser_fuzzer.in/a8d9bc68d43d4b2d11586e935a605bccbd9f69ba new file mode 100644 index 0000000000..2a227985b2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a8d9bc68d43d4b2d11586e935a605bccbd9f69ba differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/a8e97ec3a98a6dd0b9f3086495f8de4bf3db60b3 b/fuzz/gnutls_x509_parser_fuzzer.in/a8e97ec3a98a6dd0b9f3086495f8de4bf3db60b3 new file mode 100644 index 0000000000..a678390734 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/a8e97ec3a98a6dd0b9f3086495f8de4bf3db60b3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/aab5513d1068e6477d7f674bb52639ffc08cf616 b/fuzz/gnutls_x509_parser_fuzzer.in/aab5513d1068e6477d7f674bb52639ffc08cf616 new file mode 100644 index 0000000000..0d1eadc8b0 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/aab5513d1068e6477d7f674bb52639ffc08cf616 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/aaba5fc534a8ef2ad5eee91a1a8d7e48bfde9b03 b/fuzz/gnutls_x509_parser_fuzzer.in/aaba5fc534a8ef2ad5eee91a1a8d7e48bfde9b03 new file mode 100644 index 0000000000..8ca2e94f89 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/aaba5fc534a8ef2ad5eee91a1a8d7e48bfde9b03 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/aad444143b6d72624646b430cb6d40b1d39a5b24 b/fuzz/gnutls_x509_parser_fuzzer.in/aad444143b6d72624646b430cb6d40b1d39a5b24 new file mode 100644 index 0000000000..c10bd123ca Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/aad444143b6d72624646b430cb6d40b1d39a5b24 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ab8dceb7ff22e96a784422b7b18239d67189eac2 b/fuzz/gnutls_x509_parser_fuzzer.in/ab8dceb7ff22e96a784422b7b18239d67189eac2 new file mode 100644 index 0000000000..eb0cc54970 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ab8dceb7ff22e96a784422b7b18239d67189eac2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/abb39dc50fcbd53226e56df763c04dc16239ac1d b/fuzz/gnutls_x509_parser_fuzzer.in/abb39dc50fcbd53226e56df763c04dc16239ac1d new file mode 100644 index 0000000000..13bab04c46 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/abb39dc50fcbd53226e56df763c04dc16239ac1d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ac45f01a965f6491b08701dfe977fa020b3b73ea b/fuzz/gnutls_x509_parser_fuzzer.in/ac45f01a965f6491b08701dfe977fa020b3b73ea new file mode 100644 index 0000000000..671bd7fb20 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ac45f01a965f6491b08701dfe977fa020b3b73ea differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/aca6209b2d99294d8961b620afe64cf27ec6f455 b/fuzz/gnutls_x509_parser_fuzzer.in/aca6209b2d99294d8961b620afe64cf27ec6f455 new file mode 100644 index 0000000000..2fa3125820 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/aca6209b2d99294d8961b620afe64cf27ec6f455 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/acbdec97a62ded9d203066b697051e81dc1f3375 b/fuzz/gnutls_x509_parser_fuzzer.in/acbdec97a62ded9d203066b697051e81dc1f3375 new file mode 100644 index 0000000000..cf872ca9e7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/acbdec97a62ded9d203066b697051e81dc1f3375 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ad026a5da1080c55fad546ca2002d491c312bca4 b/fuzz/gnutls_x509_parser_fuzzer.in/ad026a5da1080c55fad546ca2002d491c312bca4 new file mode 100644 index 0000000000..37baf6c12d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ad026a5da1080c55fad546ca2002d491c312bca4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ad1c8e7fa8e5209e9d03b2de2260a8bff451a5c6 b/fuzz/gnutls_x509_parser_fuzzer.in/ad1c8e7fa8e5209e9d03b2de2260a8bff451a5c6 new file mode 100644 index 0000000000..999be41fc5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ad1c8e7fa8e5209e9d03b2de2260a8bff451a5c6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/aed60e51fe0fec808b105dd674fd3db1e21bdc68 b/fuzz/gnutls_x509_parser_fuzzer.in/aed60e51fe0fec808b105dd674fd3db1e21bdc68 new file mode 100644 index 0000000000..c4da981fc2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/aed60e51fe0fec808b105dd674fd3db1e21bdc68 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/aeed23dbbe92be0f13fc284a4e77aaf30cb04a41 b/fuzz/gnutls_x509_parser_fuzzer.in/aeed23dbbe92be0f13fc284a4e77aaf30cb04a41 new file mode 100644 index 0000000000..2a0be7ba96 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/aeed23dbbe92be0f13fc284a4e77aaf30cb04a41 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b0518b71bd76ba7fc5a8c9f7a4446c67b05d6004 b/fuzz/gnutls_x509_parser_fuzzer.in/b0518b71bd76ba7fc5a8c9f7a4446c67b05d6004 new file mode 100644 index 0000000000..20911cfa61 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b0518b71bd76ba7fc5a8c9f7a4446c67b05d6004 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b111e55194ef8eb5250a9176a96476b9ccb737e4 b/fuzz/gnutls_x509_parser_fuzzer.in/b111e55194ef8eb5250a9176a96476b9ccb737e4 new file mode 100644 index 0000000000..af6080258d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b111e55194ef8eb5250a9176a96476b9ccb737e4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b1dce3c85c32ea6f8ca05ac9bb27c3073c8f857a b/fuzz/gnutls_x509_parser_fuzzer.in/b1dce3c85c32ea6f8ca05ac9bb27c3073c8f857a new file mode 100644 index 0000000000..7a8fccdc7d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b1dce3c85c32ea6f8ca05ac9bb27c3073c8f857a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b1ee301fbac734a2cdea938cb6c36ec19cadc533 b/fuzz/gnutls_x509_parser_fuzzer.in/b1ee301fbac734a2cdea938cb6c36ec19cadc533 new file mode 100644 index 0000000000..91b00f65fd Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b1ee301fbac734a2cdea938cb6c36ec19cadc533 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b218c7de688a46c0a70ec3245a9176df4f25287a b/fuzz/gnutls_x509_parser_fuzzer.in/b218c7de688a46c0a70ec3245a9176df4f25287a new file mode 100644 index 0000000000..df26b58e27 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b218c7de688a46c0a70ec3245a9176df4f25287a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b2653717c5aa32df47d8fbe0f2c88713d5871272 b/fuzz/gnutls_x509_parser_fuzzer.in/b2653717c5aa32df47d8fbe0f2c88713d5871272 new file mode 100644 index 0000000000..f8a739f7a9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b2653717c5aa32df47d8fbe0f2c88713d5871272 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b2a917cbc231ab919feffdd164523a6b0baa1553 b/fuzz/gnutls_x509_parser_fuzzer.in/b2a917cbc231ab919feffdd164523a6b0baa1553 new file mode 100644 index 0000000000..e5ba2015cf Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b2a917cbc231ab919feffdd164523a6b0baa1553 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b2bed13a6a5da6fc81ee86839fd7bcba778a653c b/fuzz/gnutls_x509_parser_fuzzer.in/b2bed13a6a5da6fc81ee86839fd7bcba778a653c new file mode 100644 index 0000000000..f00c063bc7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b2bed13a6a5da6fc81ee86839fd7bcba778a653c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b2cee9c30da5379b00653bee7e4d5f266dfdbdcc b/fuzz/gnutls_x509_parser_fuzzer.in/b2cee9c30da5379b00653bee7e4d5f266dfdbdcc new file mode 100644 index 0000000000..ced83f6f4c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b2cee9c30da5379b00653bee7e4d5f266dfdbdcc differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b2d78cd491f549042f608d1e728b0a962eeae5c1 b/fuzz/gnutls_x509_parser_fuzzer.in/b2d78cd491f549042f608d1e728b0a962eeae5c1 new file mode 100644 index 0000000000..aa463f7493 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b2d78cd491f549042f608d1e728b0a962eeae5c1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b383c0dac573f1e4067e0ec4f802687fa611f417 b/fuzz/gnutls_x509_parser_fuzzer.in/b383c0dac573f1e4067e0ec4f802687fa611f417 new file mode 100644 index 0000000000..bfc1bfb5f9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b383c0dac573f1e4067e0ec4f802687fa611f417 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b39976acda7e1451d23c14b3f88827ff6340c8bd b/fuzz/gnutls_x509_parser_fuzzer.in/b39976acda7e1451d23c14b3f88827ff6340c8bd new file mode 100644 index 0000000000..7f1f4b1d92 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b39976acda7e1451d23c14b3f88827ff6340c8bd differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b3d4ffc3d5fb4c30a82be4fe690d34ed6746123a b/fuzz/gnutls_x509_parser_fuzzer.in/b3d4ffc3d5fb4c30a82be4fe690d34ed6746123a new file mode 100644 index 0000000000..8b870b75ec Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b3d4ffc3d5fb4c30a82be4fe690d34ed6746123a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b3e169e24944112d2387e7726e90f9b70d4fb9db b/fuzz/gnutls_x509_parser_fuzzer.in/b3e169e24944112d2387e7726e90f9b70d4fb9db new file mode 100644 index 0000000000..6c98634f59 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b3e169e24944112d2387e7726e90f9b70d4fb9db differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b42f401bb7bcd3a8e8496cb02ee2039d28911752 b/fuzz/gnutls_x509_parser_fuzzer.in/b42f401bb7bcd3a8e8496cb02ee2039d28911752 new file mode 100644 index 0000000000..529c99cd79 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b42f401bb7bcd3a8e8496cb02ee2039d28911752 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b4f64c1f074d158f7990a5ef74b9f0966cb5a7bb b/fuzz/gnutls_x509_parser_fuzzer.in/b4f64c1f074d158f7990a5ef74b9f0966cb5a7bb new file mode 100644 index 0000000000..0df74a62af Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b4f64c1f074d158f7990a5ef74b9f0966cb5a7bb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b533e41117c5471ee251e34c83b4e7fbff758308 b/fuzz/gnutls_x509_parser_fuzzer.in/b533e41117c5471ee251e34c83b4e7fbff758308 new file mode 100644 index 0000000000..39db0f4d92 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b533e41117c5471ee251e34c83b4e7fbff758308 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b64e9b0ea22ae1ec44527422a6ca209998496e3c b/fuzz/gnutls_x509_parser_fuzzer.in/b64e9b0ea22ae1ec44527422a6ca209998496e3c new file mode 100644 index 0000000000..4be7617df9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b64e9b0ea22ae1ec44527422a6ca209998496e3c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b769cad670c0e487c90b1d930ab8d5783f725145 b/fuzz/gnutls_x509_parser_fuzzer.in/b769cad670c0e487c90b1d930ab8d5783f725145 new file mode 100644 index 0000000000..67a39559d1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b769cad670c0e487c90b1d930ab8d5783f725145 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b78d281465fda6072f2da3ceb92583bb11076b99 b/fuzz/gnutls_x509_parser_fuzzer.in/b78d281465fda6072f2da3ceb92583bb11076b99 new file mode 100644 index 0000000000..26b83fe7a3 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b78d281465fda6072f2da3ceb92583bb11076b99 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b7f3be064e08e2e87a27eb82780a13282617b9e1 b/fuzz/gnutls_x509_parser_fuzzer.in/b7f3be064e08e2e87a27eb82780a13282617b9e1 new file mode 100644 index 0000000000..ce02f47528 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b7f3be064e08e2e87a27eb82780a13282617b9e1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b7f3cdbd637cb12753f7e5fcb32c6183652b3bef b/fuzz/gnutls_x509_parser_fuzzer.in/b7f3cdbd637cb12753f7e5fcb32c6183652b3bef new file mode 100644 index 0000000000..0454bd2f02 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b7f3cdbd637cb12753f7e5fcb32c6183652b3bef differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b8a7b411110e77061e31ebc724762d324a4e8690 b/fuzz/gnutls_x509_parser_fuzzer.in/b8a7b411110e77061e31ebc724762d324a4e8690 new file mode 100644 index 0000000000..06ae209461 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b8a7b411110e77061e31ebc724762d324a4e8690 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b8ac8bf052ff3767a1681b00d7d60da77d578588 b/fuzz/gnutls_x509_parser_fuzzer.in/b8ac8bf052ff3767a1681b00d7d60da77d578588 new file mode 100644 index 0000000000..b674ece388 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b8ac8bf052ff3767a1681b00d7d60da77d578588 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b8f152730e56e0dd5a515c9ad4b1fd19ec3f662a b/fuzz/gnutls_x509_parser_fuzzer.in/b8f152730e56e0dd5a515c9ad4b1fd19ec3f662a new file mode 100644 index 0000000000..85ef475452 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b8f152730e56e0dd5a515c9ad4b1fd19ec3f662a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b918bcd293a8afa0ab9933ea751e3413e8020cc8 b/fuzz/gnutls_x509_parser_fuzzer.in/b918bcd293a8afa0ab9933ea751e3413e8020cc8 new file mode 100644 index 0000000000..381b8b5ec9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b918bcd293a8afa0ab9933ea751e3413e8020cc8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b92eed0a6fe8f09fa72e1c40b246d43195e21393 b/fuzz/gnutls_x509_parser_fuzzer.in/b92eed0a6fe8f09fa72e1c40b246d43195e21393 new file mode 100644 index 0000000000..fad8e1c946 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b92eed0a6fe8f09fa72e1c40b246d43195e21393 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b9872e073d8279224ec8ad98640000f292cd57d3 b/fuzz/gnutls_x509_parser_fuzzer.in/b9872e073d8279224ec8ad98640000f292cd57d3 new file mode 100644 index 0000000000..c46247f007 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b9872e073d8279224ec8ad98640000f292cd57d3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/b9d95d7d60831f9f681d404af41b6faac8ccb6c6 b/fuzz/gnutls_x509_parser_fuzzer.in/b9d95d7d60831f9f681d404af41b6faac8ccb6c6 new file mode 100644 index 0000000000..ef773825ca Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/b9d95d7d60831f9f681d404af41b6faac8ccb6c6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ba57bb7784e63f86f38c4b0530a4bbd7bf998fae b/fuzz/gnutls_x509_parser_fuzzer.in/ba57bb7784e63f86f38c4b0530a4bbd7bf998fae new file mode 100644 index 0000000000..9929d3e983 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ba57bb7784e63f86f38c4b0530a4bbd7bf998fae differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/bad8fe8b4be04399cd60e26f0149aa320062fd0c b/fuzz/gnutls_x509_parser_fuzzer.in/bad8fe8b4be04399cd60e26f0149aa320062fd0c new file mode 100644 index 0000000000..090ea3cc8b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/bad8fe8b4be04399cd60e26f0149aa320062fd0c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/bb14de409834c04c827422622452b8e28053d8cc b/fuzz/gnutls_x509_parser_fuzzer.in/bb14de409834c04c827422622452b8e28053d8cc new file mode 100644 index 0000000000..8350192920 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/bb14de409834c04c827422622452b8e28053d8cc differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/bb1d82bc717ac75bde628414cd29a67d4cbb9241 b/fuzz/gnutls_x509_parser_fuzzer.in/bb1d82bc717ac75bde628414cd29a67d4cbb9241 new file mode 100644 index 0000000000..7c5e47d757 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/bb1d82bc717ac75bde628414cd29a67d4cbb9241 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/bb28131a4092a84fd31e1c163e182316ac0342a4 b/fuzz/gnutls_x509_parser_fuzzer.in/bb28131a4092a84fd31e1c163e182316ac0342a4 new file mode 100644 index 0000000000..94f88bdbb1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/bb28131a4092a84fd31e1c163e182316ac0342a4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/bc2d9f2f9472880afcb6de6860bcd2e36381c672 b/fuzz/gnutls_x509_parser_fuzzer.in/bc2d9f2f9472880afcb6de6860bcd2e36381c672 new file mode 100644 index 0000000000..4e82a439c8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/bc2d9f2f9472880afcb6de6860bcd2e36381c672 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/bd0de57f12f300209fc3d63057adc7c87b63b9b5 b/fuzz/gnutls_x509_parser_fuzzer.in/bd0de57f12f300209fc3d63057adc7c87b63b9b5 new file mode 100644 index 0000000000..c8552edfa8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/bd0de57f12f300209fc3d63057adc7c87b63b9b5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/bde9293e15df401c09a2895210e527715fcadd94 b/fuzz/gnutls_x509_parser_fuzzer.in/bde9293e15df401c09a2895210e527715fcadd94 new file mode 100644 index 0000000000..8e3f2c0c1b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/bde9293e15df401c09a2895210e527715fcadd94 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/be181b9d9d9f37065ae3730beb23d79ade87bb52 b/fuzz/gnutls_x509_parser_fuzzer.in/be181b9d9d9f37065ae3730beb23d79ade87bb52 new file mode 100644 index 0000000000..62ce36fd7a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/be181b9d9d9f37065ae3730beb23d79ade87bb52 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/bf267bee488401231319b7d5bfd11cf91ac18fa3 b/fuzz/gnutls_x509_parser_fuzzer.in/bf267bee488401231319b7d5bfd11cf91ac18fa3 new file mode 100644 index 0000000000..f95ddf773a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/bf267bee488401231319b7d5bfd11cf91ac18fa3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c095bc8f20ef651adc01e2b381e760338af4448d b/fuzz/gnutls_x509_parser_fuzzer.in/c095bc8f20ef651adc01e2b381e760338af4448d new file mode 100644 index 0000000000..5da55c6bbe Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c095bc8f20ef651adc01e2b381e760338af4448d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c098f7a831401ef4eec55f2e23ec14dab6e3b165 b/fuzz/gnutls_x509_parser_fuzzer.in/c098f7a831401ef4eec55f2e23ec14dab6e3b165 new file mode 100644 index 0000000000..686a5caa8b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c098f7a831401ef4eec55f2e23ec14dab6e3b165 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c0a472f06a73f18123dacbf888700d426bd75683 b/fuzz/gnutls_x509_parser_fuzzer.in/c0a472f06a73f18123dacbf888700d426bd75683 new file mode 100644 index 0000000000..df2aa0a624 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c0a472f06a73f18123dacbf888700d426bd75683 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c0eb8b33a7a3b077536a9ae6a07ef00fe44650e9 b/fuzz/gnutls_x509_parser_fuzzer.in/c0eb8b33a7a3b077536a9ae6a07ef00fe44650e9 new file mode 100644 index 0000000000..d2aa40c869 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c0eb8b33a7a3b077536a9ae6a07ef00fe44650e9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c103f6289f9448589bc11be3ede0a0d4719acdc7 b/fuzz/gnutls_x509_parser_fuzzer.in/c103f6289f9448589bc11be3ede0a0d4719acdc7 new file mode 100644 index 0000000000..cf10627e45 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c103f6289f9448589bc11be3ede0a0d4719acdc7 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c110fb7f02a2f5352fd2cfc838740c34c97a8376 b/fuzz/gnutls_x509_parser_fuzzer.in/c110fb7f02a2f5352fd2cfc838740c34c97a8376 new file mode 100644 index 0000000000..845f959a8c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c110fb7f02a2f5352fd2cfc838740c34c97a8376 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c15a760b22810ac4425db9c7885e3b0b1e3f9877 b/fuzz/gnutls_x509_parser_fuzzer.in/c15a760b22810ac4425db9c7885e3b0b1e3f9877 new file mode 100644 index 0000000000..eb64e7fac3 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c15a760b22810ac4425db9c7885e3b0b1e3f9877 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c18146010d43fddf2a8a3765811331f528f1e750 b/fuzz/gnutls_x509_parser_fuzzer.in/c18146010d43fddf2a8a3765811331f528f1e750 new file mode 100644 index 0000000000..b03c85a97b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c18146010d43fddf2a8a3765811331f528f1e750 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c19f80946117b994b6a0f430ce39ab4a535ce38b b/fuzz/gnutls_x509_parser_fuzzer.in/c19f80946117b994b6a0f430ce39ab4a535ce38b new file mode 100644 index 0000000000..30bb732154 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c19f80946117b994b6a0f430ce39ab4a535ce38b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c22272c2d4c91df88373acb5b086623689f38ddc b/fuzz/gnutls_x509_parser_fuzzer.in/c22272c2d4c91df88373acb5b086623689f38ddc new file mode 100644 index 0000000000..810caf3c3c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c22272c2d4c91df88373acb5b086623689f38ddc differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c2e84dbccc11c6f1de7332fff740c93ecdd37769 b/fuzz/gnutls_x509_parser_fuzzer.in/c2e84dbccc11c6f1de7332fff740c93ecdd37769 new file mode 100644 index 0000000000..92aa6f36b7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c2e84dbccc11c6f1de7332fff740c93ecdd37769 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c37363369912e624a9b79d70e199fea8764e8b8e b/fuzz/gnutls_x509_parser_fuzzer.in/c37363369912e624a9b79d70e199fea8764e8b8e new file mode 100644 index 0000000000..42e6e1f772 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c37363369912e624a9b79d70e199fea8764e8b8e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c3b2e971779088bae0372b1f0a93cd078b9ca743 b/fuzz/gnutls_x509_parser_fuzzer.in/c3b2e971779088bae0372b1f0a93cd078b9ca743 new file mode 100644 index 0000000000..5eea7f3909 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c3b2e971779088bae0372b1f0a93cd078b9ca743 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c3d6efdf327c7c8b90cde5caab1486ae8a762f31 b/fuzz/gnutls_x509_parser_fuzzer.in/c3d6efdf327c7c8b90cde5caab1486ae8a762f31 new file mode 100644 index 0000000000..cb2ef052fb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c3d6efdf327c7c8b90cde5caab1486ae8a762f31 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c3f3d7a0726808a579f7f9050db2cc23ed0513f6 b/fuzz/gnutls_x509_parser_fuzzer.in/c3f3d7a0726808a579f7f9050db2cc23ed0513f6 new file mode 100644 index 0000000000..d1c4155169 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c3f3d7a0726808a579f7f9050db2cc23ed0513f6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c4441aca86863eda1e11d23ace251099ab187fda b/fuzz/gnutls_x509_parser_fuzzer.in/c4441aca86863eda1e11d23ace251099ab187fda new file mode 100644 index 0000000000..c0f87a7fec Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c4441aca86863eda1e11d23ace251099ab187fda differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c5725124e4ea9b0e780fcb8fe3bd6602b8d140d4 b/fuzz/gnutls_x509_parser_fuzzer.in/c5725124e4ea9b0e780fcb8fe3bd6602b8d140d4 new file mode 100644 index 0000000000..a1f51c7735 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c5725124e4ea9b0e780fcb8fe3bd6602b8d140d4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c5e960cc8b4d7a848a7a36ea28aa1150f0b627ae b/fuzz/gnutls_x509_parser_fuzzer.in/c5e960cc8b4d7a848a7a36ea28aa1150f0b627ae new file mode 100644 index 0000000000..41e8fb6d13 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c5e960cc8b4d7a848a7a36ea28aa1150f0b627ae differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c60546ce85868332cfb7941923586b29762e25d2 b/fuzz/gnutls_x509_parser_fuzzer.in/c60546ce85868332cfb7941923586b29762e25d2 new file mode 100644 index 0000000000..42af04439e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c60546ce85868332cfb7941923586b29762e25d2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c6959d4689fa4a5715a49adb51e7a616839cdcde b/fuzz/gnutls_x509_parser_fuzzer.in/c6959d4689fa4a5715a49adb51e7a616839cdcde new file mode 100644 index 0000000000..d585f19504 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c6959d4689fa4a5715a49adb51e7a616839cdcde differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c704f9e9aa50b6564ffd71ad54e0abadad2debbe b/fuzz/gnutls_x509_parser_fuzzer.in/c704f9e9aa50b6564ffd71ad54e0abadad2debbe new file mode 100644 index 0000000000..ae498dbd77 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c704f9e9aa50b6564ffd71ad54e0abadad2debbe differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c70e164a34d1d06d8434b8e6964f1ce504abef1b b/fuzz/gnutls_x509_parser_fuzzer.in/c70e164a34d1d06d8434b8e6964f1ce504abef1b new file mode 100644 index 0000000000..8f53a5e2cf Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c70e164a34d1d06d8434b8e6964f1ce504abef1b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c74f1686d924e7960462d2f592a891c6be7fa50e b/fuzz/gnutls_x509_parser_fuzzer.in/c74f1686d924e7960462d2f592a891c6be7fa50e new file mode 100644 index 0000000000..93511a2caa Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c74f1686d924e7960462d2f592a891c6be7fa50e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c76d2400dac9fc60b1720bd0d7851395beb91a46 b/fuzz/gnutls_x509_parser_fuzzer.in/c76d2400dac9fc60b1720bd0d7851395beb91a46 new file mode 100644 index 0000000000..3348f023fa Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c76d2400dac9fc60b1720bd0d7851395beb91a46 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c7c9355798c758c6f82e59f43c3aa2aac40a1806 b/fuzz/gnutls_x509_parser_fuzzer.in/c7c9355798c758c6f82e59f43c3aa2aac40a1806 new file mode 100644 index 0000000000..675b633e6b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c7c9355798c758c6f82e59f43c3aa2aac40a1806 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c836a1094f95527ab48894b30b93bcb409f31c81 b/fuzz/gnutls_x509_parser_fuzzer.in/c836a1094f95527ab48894b30b93bcb409f31c81 new file mode 100644 index 0000000000..9632d64fe8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c836a1094f95527ab48894b30b93bcb409f31c81 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c854b2814bc9512541c8cce2e95747d9cd65817f b/fuzz/gnutls_x509_parser_fuzzer.in/c854b2814bc9512541c8cce2e95747d9cd65817f new file mode 100644 index 0000000000..e1a3e59063 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c854b2814bc9512541c8cce2e95747d9cd65817f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c8ef056996ddb66fe1ec85184a1017969d5795a6 b/fuzz/gnutls_x509_parser_fuzzer.in/c8ef056996ddb66fe1ec85184a1017969d5795a6 new file mode 100644 index 0000000000..cc7990a297 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c8ef056996ddb66fe1ec85184a1017969d5795a6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/c9b804091359936ecb1d47e042244fdc8fddbc73 b/fuzz/gnutls_x509_parser_fuzzer.in/c9b804091359936ecb1d47e042244fdc8fddbc73 new file mode 100644 index 0000000000..dc54dd7f9b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/c9b804091359936ecb1d47e042244fdc8fddbc73 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ca0e06356a252cd8ec1efd59b255b7d036ea9f93 b/fuzz/gnutls_x509_parser_fuzzer.in/ca0e06356a252cd8ec1efd59b255b7d036ea9f93 new file mode 100644 index 0000000000..c5b6fed78f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ca0e06356a252cd8ec1efd59b255b7d036ea9f93 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ca8cf9da88ab3582629199b9dfb8baebf5d23b28 b/fuzz/gnutls_x509_parser_fuzzer.in/ca8cf9da88ab3582629199b9dfb8baebf5d23b28 new file mode 100644 index 0000000000..e8c97ab504 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ca8cf9da88ab3582629199b9dfb8baebf5d23b28 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/cb0c61f009223ff660b702d7fe2a72d2c70d67e8 b/fuzz/gnutls_x509_parser_fuzzer.in/cb0c61f009223ff660b702d7fe2a72d2c70d67e8 new file mode 100644 index 0000000000..611d01acf0 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/cb0c61f009223ff660b702d7fe2a72d2c70d67e8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/cba0e4e585f5dc40d93a32ccefe2ccd1937122c5 b/fuzz/gnutls_x509_parser_fuzzer.in/cba0e4e585f5dc40d93a32ccefe2ccd1937122c5 new file mode 100644 index 0000000000..80c5abebcb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/cba0e4e585f5dc40d93a32ccefe2ccd1937122c5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/cbca7527f779fb87d29b814a49f2599e10c699f0 b/fuzz/gnutls_x509_parser_fuzzer.in/cbca7527f779fb87d29b814a49f2599e10c699f0 new file mode 100644 index 0000000000..46fb704b8d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/cbca7527f779fb87d29b814a49f2599e10c699f0 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/cbfe70cefa11b747061d4e937c6f90cf00a3383a b/fuzz/gnutls_x509_parser_fuzzer.in/cbfe70cefa11b747061d4e937c6f90cf00a3383a new file mode 100644 index 0000000000..dac94712c9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/cbfe70cefa11b747061d4e937c6f90cf00a3383a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ccbd85e7740696799371dfb12ba7dba3e20c193f b/fuzz/gnutls_x509_parser_fuzzer.in/ccbd85e7740696799371dfb12ba7dba3e20c193f new file mode 100644 index 0000000000..a81ca63090 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ccbd85e7740696799371dfb12ba7dba3e20c193f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/cddda9519a46e64ca98ee83385eeb748b4b25e97 b/fuzz/gnutls_x509_parser_fuzzer.in/cddda9519a46e64ca98ee83385eeb748b4b25e97 new file mode 100644 index 0000000000..388dd43679 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/cddda9519a46e64ca98ee83385eeb748b4b25e97 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ceb49f2d4720aa01d98fa552de4fb99e49b046c8 b/fuzz/gnutls_x509_parser_fuzzer.in/ceb49f2d4720aa01d98fa552de4fb99e49b046c8 new file mode 100644 index 0000000000..8b50e05810 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ceb49f2d4720aa01d98fa552de4fb99e49b046c8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/cfa852368be8b28f5674fa267a0109d13fd9a883 b/fuzz/gnutls_x509_parser_fuzzer.in/cfa852368be8b28f5674fa267a0109d13fd9a883 new file mode 100644 index 0000000000..9325ef8a63 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/cfa852368be8b28f5674fa267a0109d13fd9a883 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d038a314154a51fc40e93a694a2bbf90d7e7d671 b/fuzz/gnutls_x509_parser_fuzzer.in/d038a314154a51fc40e93a694a2bbf90d7e7d671 new file mode 100644 index 0000000000..693145efaa Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d038a314154a51fc40e93a694a2bbf90d7e7d671 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d04816e27fd2d1d66a10b96e464c2bb51675820d b/fuzz/gnutls_x509_parser_fuzzer.in/d04816e27fd2d1d66a10b96e464c2bb51675820d new file mode 100644 index 0000000000..e7030e359c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d04816e27fd2d1d66a10b96e464c2bb51675820d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d04a0c34e3462feaf91ecd45925b869c02fd1c1f b/fuzz/gnutls_x509_parser_fuzzer.in/d04a0c34e3462feaf91ecd45925b869c02fd1c1f new file mode 100644 index 0000000000..c5de49bdf5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d04a0c34e3462feaf91ecd45925b869c02fd1c1f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d04b1acd0cf310c9f9f64dc585bbed20d3de8520 b/fuzz/gnutls_x509_parser_fuzzer.in/d04b1acd0cf310c9f9f64dc585bbed20d3de8520 new file mode 100644 index 0000000000..ddfaaf3cb6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d04b1acd0cf310c9f9f64dc585bbed20d3de8520 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d054c9adb3b6202a17cfd055b00cc176d3bc2d06 b/fuzz/gnutls_x509_parser_fuzzer.in/d054c9adb3b6202a17cfd055b00cc176d3bc2d06 new file mode 100644 index 0000000000..b7bc997931 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d054c9adb3b6202a17cfd055b00cc176d3bc2d06 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d0d6ff22e7ed56bb87bd2329277329cfd4fff183 b/fuzz/gnutls_x509_parser_fuzzer.in/d0d6ff22e7ed56bb87bd2329277329cfd4fff183 new file mode 100644 index 0000000000..9f3f228b86 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d0d6ff22e7ed56bb87bd2329277329cfd4fff183 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d17f92fcc792864d189219c3e3379cd7abefd1c0 b/fuzz/gnutls_x509_parser_fuzzer.in/d17f92fcc792864d189219c3e3379cd7abefd1c0 new file mode 100644 index 0000000000..ee190acb6a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d17f92fcc792864d189219c3e3379cd7abefd1c0 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d219f57ddd13fe63c2c9394f000f3ae97556bfef b/fuzz/gnutls_x509_parser_fuzzer.in/d219f57ddd13fe63c2c9394f000f3ae97556bfef new file mode 100644 index 0000000000..0484951c32 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d219f57ddd13fe63c2c9394f000f3ae97556bfef differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d24c9f8a402004880ab640158ad7b751774ff1cc b/fuzz/gnutls_x509_parser_fuzzer.in/d24c9f8a402004880ab640158ad7b751774ff1cc new file mode 100644 index 0000000000..c92ae3e7cd Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d24c9f8a402004880ab640158ad7b751774ff1cc differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d264d06827e269688bb4cda1aa0747eaf0c05d7b b/fuzz/gnutls_x509_parser_fuzzer.in/d264d06827e269688bb4cda1aa0747eaf0c05d7b new file mode 100644 index 0000000000..2b96c3956a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d264d06827e269688bb4cda1aa0747eaf0c05d7b differ diff --git a/devel/fuzz/gnutls_x509_parser.in/cert6.der b/fuzz/gnutls_x509_parser_fuzzer.in/d2f829fe69f21775704dbb912fe5011dc62d1203 similarity index 100% rename from devel/fuzz/gnutls_x509_parser.in/cert6.der rename to fuzz/gnutls_x509_parser_fuzzer.in/d2f829fe69f21775704dbb912fe5011dc62d1203 diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d2fec9aecc84ad32e8fbc7b55f5dfa4703b25ad3 b/fuzz/gnutls_x509_parser_fuzzer.in/d2fec9aecc84ad32e8fbc7b55f5dfa4703b25ad3 new file mode 100644 index 0000000000..924f74f883 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d2fec9aecc84ad32e8fbc7b55f5dfa4703b25ad3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d351a86ea894812b98a402f7f47d61e713befb3c b/fuzz/gnutls_x509_parser_fuzzer.in/d351a86ea894812b98a402f7f47d61e713befb3c new file mode 100644 index 0000000000..deb82517c8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d351a86ea894812b98a402f7f47d61e713befb3c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d35daebd55d77f3b6c43e634195dc9a419af9195 b/fuzz/gnutls_x509_parser_fuzzer.in/d35daebd55d77f3b6c43e634195dc9a419af9195 new file mode 100644 index 0000000000..772fda370d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d35daebd55d77f3b6c43e634195dc9a419af9195 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d3fe83b8d87ccda2bbca5e81ce3ab1a1400bfbe8 b/fuzz/gnutls_x509_parser_fuzzer.in/d3fe83b8d87ccda2bbca5e81ce3ab1a1400bfbe8 new file mode 100644 index 0000000000..08e5b85ed7 --- /dev/null +++ b/fuzz/gnutls_x509_parser_fuzzer.in/d3fe83b8d87ccda2bbca5e81ce3ab1a1400bfbe8 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d43782a1f943a966f4ea1ac96bd048fe68d4d951 b/fuzz/gnutls_x509_parser_fuzzer.in/d43782a1f943a966f4ea1ac96bd048fe68d4d951 new file mode 100644 index 0000000000..fe152851f6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d43782a1f943a966f4ea1ac96bd048fe68d4d951 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d454df7c4c4a4cf366016af032581456353a7b22 b/fuzz/gnutls_x509_parser_fuzzer.in/d454df7c4c4a4cf366016af032581456353a7b22 new file mode 100644 index 0000000000..e70bb2f8f2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d454df7c4c4a4cf366016af032581456353a7b22 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d47ce2543e4ee9da211123c50bb6a9505adb758f b/fuzz/gnutls_x509_parser_fuzzer.in/d47ce2543e4ee9da211123c50bb6a9505adb758f new file mode 100644 index 0000000000..42108cc352 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d47ce2543e4ee9da211123c50bb6a9505adb758f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d6605c546ca2db48b0498009b3325d2ecf2b939c b/fuzz/gnutls_x509_parser_fuzzer.in/d6605c546ca2db48b0498009b3325d2ecf2b939c new file mode 100644 index 0000000000..a672f130b6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d6605c546ca2db48b0498009b3325d2ecf2b939c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d66782c27fe66a5f7d4a0d007b35884ab57151e7 b/fuzz/gnutls_x509_parser_fuzzer.in/d66782c27fe66a5f7d4a0d007b35884ab57151e7 new file mode 100644 index 0000000000..f0a3758631 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d66782c27fe66a5f7d4a0d007b35884ab57151e7 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d6884a03bef7e4c1f003da34e7fdfaa03243160b b/fuzz/gnutls_x509_parser_fuzzer.in/d6884a03bef7e4c1f003da34e7fdfaa03243160b new file mode 100644 index 0000000000..c7b09ed90b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d6884a03bef7e4c1f003da34e7fdfaa03243160b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d6af87d0abd977fcb1523086b860faa6c6345bc5 b/fuzz/gnutls_x509_parser_fuzzer.in/d6af87d0abd977fcb1523086b860faa6c6345bc5 new file mode 100644 index 0000000000..8b53674ca3 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d6af87d0abd977fcb1523086b860faa6c6345bc5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d71cec9ccfa683ebf053d0372a2b79368c2ffff9 b/fuzz/gnutls_x509_parser_fuzzer.in/d71cec9ccfa683ebf053d0372a2b79368c2ffff9 new file mode 100644 index 0000000000..d8d9308910 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d71cec9ccfa683ebf053d0372a2b79368c2ffff9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d73823145cf9944e048c7cf4f1677c6f5d4842d6 b/fuzz/gnutls_x509_parser_fuzzer.in/d73823145cf9944e048c7cf4f1677c6f5d4842d6 new file mode 100644 index 0000000000..0b3c925cc4 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d73823145cf9944e048c7cf4f1677c6f5d4842d6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d762b3e5f05987f1b903ea5203816c861c8eb921 b/fuzz/gnutls_x509_parser_fuzzer.in/d762b3e5f05987f1b903ea5203816c861c8eb921 new file mode 100644 index 0000000000..0f1546c284 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d762b3e5f05987f1b903ea5203816c861c8eb921 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d830b62b81d4b6612a6c0d2ba1f596ebba021371 b/fuzz/gnutls_x509_parser_fuzzer.in/d830b62b81d4b6612a6c0d2ba1f596ebba021371 new file mode 100644 index 0000000000..38ce23c9a5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d830b62b81d4b6612a6c0d2ba1f596ebba021371 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d8c989aba0f45b8e2610f5c4bad1cb61cf25f465 b/fuzz/gnutls_x509_parser_fuzzer.in/d8c989aba0f45b8e2610f5c4bad1cb61cf25f465 new file mode 100644 index 0000000000..e0a9b4c7fe Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d8c989aba0f45b8e2610f5c4bad1cb61cf25f465 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d91019710da8cbf2466b021fd1cd45fddf0afefb b/fuzz/gnutls_x509_parser_fuzzer.in/d91019710da8cbf2466b021fd1cd45fddf0afefb new file mode 100644 index 0000000000..6156f2b348 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d91019710da8cbf2466b021fd1cd45fddf0afefb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d9658f8a95f423df24d7ba47a3bc33abea643fa8 b/fuzz/gnutls_x509_parser_fuzzer.in/d9658f8a95f423df24d7ba47a3bc33abea643fa8 new file mode 100644 index 0000000000..d040c1bc4e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d9658f8a95f423df24d7ba47a3bc33abea643fa8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/d9eda4c148afa43f6f93dd222960b110a1608707 b/fuzz/gnutls_x509_parser_fuzzer.in/d9eda4c148afa43f6f93dd222960b110a1608707 new file mode 100644 index 0000000000..1d72119f49 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/d9eda4c148afa43f6f93dd222960b110a1608707 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/da1909560eeaffe5235afacb593ac7b40d13eea4 b/fuzz/gnutls_x509_parser_fuzzer.in/da1909560eeaffe5235afacb593ac7b40d13eea4 new file mode 100644 index 0000000000..e158671e9e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/da1909560eeaffe5235afacb593ac7b40d13eea4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/da646fdf61f7a9069ae87373a74f8e22a4b96d72 b/fuzz/gnutls_x509_parser_fuzzer.in/da646fdf61f7a9069ae87373a74f8e22a4b96d72 new file mode 100644 index 0000000000..1d2dfa677f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/da646fdf61f7a9069ae87373a74f8e22a4b96d72 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/daa12cac0dc933f8d6b5c394612633d02925d5be b/fuzz/gnutls_x509_parser_fuzzer.in/daa12cac0dc933f8d6b5c394612633d02925d5be new file mode 100644 index 0000000000..c4225b16ee Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/daa12cac0dc933f8d6b5c394612633d02925d5be differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/db83a5af5244ddb18bb26bb187e0b5ca1ea627a8 b/fuzz/gnutls_x509_parser_fuzzer.in/db83a5af5244ddb18bb26bb187e0b5ca1ea627a8 new file mode 100644 index 0000000000..f64390741d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/db83a5af5244ddb18bb26bb187e0b5ca1ea627a8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/dbf2566921bd722eee70782c8fc1c49a2d6935b6 b/fuzz/gnutls_x509_parser_fuzzer.in/dbf2566921bd722eee70782c8fc1c49a2d6935b6 new file mode 100644 index 0000000000..b23992b29c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/dbf2566921bd722eee70782c8fc1c49a2d6935b6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/dc1c802621723b5522352e0ac5b8ed9dd89930f9 b/fuzz/gnutls_x509_parser_fuzzer.in/dc1c802621723b5522352e0ac5b8ed9dd89930f9 new file mode 100644 index 0000000000..29b7b6a642 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/dc1c802621723b5522352e0ac5b8ed9dd89930f9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/dc300318b73c293695983154f3e65a13ff18617f b/fuzz/gnutls_x509_parser_fuzzer.in/dc300318b73c293695983154f3e65a13ff18617f new file mode 100644 index 0000000000..15726e0e16 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/dc300318b73c293695983154f3e65a13ff18617f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/dc37d68a9ed909efde01acce0c05a4f920f2bd66 b/fuzz/gnutls_x509_parser_fuzzer.in/dc37d68a9ed909efde01acce0c05a4f920f2bd66 new file mode 100644 index 0000000000..faa9bff4c6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/dc37d68a9ed909efde01acce0c05a4f920f2bd66 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/dcc26b8f2782d0a9ff03ae618d5035b895542092 b/fuzz/gnutls_x509_parser_fuzzer.in/dcc26b8f2782d0a9ff03ae618d5035b895542092 new file mode 100644 index 0000000000..d59594b5e9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/dcc26b8f2782d0a9ff03ae618d5035b895542092 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/dd307e8d31231ae79540eab011c06582935afd12 b/fuzz/gnutls_x509_parser_fuzzer.in/dd307e8d31231ae79540eab011c06582935afd12 new file mode 100644 index 0000000000..2a8617af59 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/dd307e8d31231ae79540eab011c06582935afd12 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/dd607cf6e78306e288850138149d8dda5f10a75a b/fuzz/gnutls_x509_parser_fuzzer.in/dd607cf6e78306e288850138149d8dda5f10a75a new file mode 100644 index 0000000000..1122eca281 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/dd607cf6e78306e288850138149d8dda5f10a75a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/dd65f247969858259052a75f8560a7b0d909e7c3 b/fuzz/gnutls_x509_parser_fuzzer.in/dd65f247969858259052a75f8560a7b0d909e7c3 new file mode 100644 index 0000000000..f3bb3a5bf1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/dd65f247969858259052a75f8560a7b0d909e7c3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/dd6cc94ba904633b2de45e41bc17e3007c4fa146 b/fuzz/gnutls_x509_parser_fuzzer.in/dd6cc94ba904633b2de45e41bc17e3007c4fa146 new file mode 100644 index 0000000000..338a277cae Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/dd6cc94ba904633b2de45e41bc17e3007c4fa146 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/dd7f720306b47176ea9b89f4a27dca2bd5cbb0e2 b/fuzz/gnutls_x509_parser_fuzzer.in/dd7f720306b47176ea9b89f4a27dca2bd5cbb0e2 new file mode 100644 index 0000000000..372ea3a7ca Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/dd7f720306b47176ea9b89f4a27dca2bd5cbb0e2 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/de50a21b62173f1075565ae6aa4e93922844bd49 b/fuzz/gnutls_x509_parser_fuzzer.in/de50a21b62173f1075565ae6aa4e93922844bd49 new file mode 100644 index 0000000000..a72e97aa26 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/de50a21b62173f1075565ae6aa4e93922844bd49 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/df1aeb620bdc67a19d4a9c50a6ff64267809aa35 b/fuzz/gnutls_x509_parser_fuzzer.in/df1aeb620bdc67a19d4a9c50a6ff64267809aa35 new file mode 100644 index 0000000000..12f42876ad Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/df1aeb620bdc67a19d4a9c50a6ff64267809aa35 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/df1e4e59fbeced0336bcb740e22ddd03f94d3fbe b/fuzz/gnutls_x509_parser_fuzzer.in/df1e4e59fbeced0336bcb740e22ddd03f94d3fbe new file mode 100644 index 0000000000..1343ff8fc2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/df1e4e59fbeced0336bcb740e22ddd03f94d3fbe differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/df6592e39425d57bb8cb7bfe5f46a58ca2af0f68 b/fuzz/gnutls_x509_parser_fuzzer.in/df6592e39425d57bb8cb7bfe5f46a58ca2af0f68 new file mode 100644 index 0000000000..212994b130 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/df6592e39425d57bb8cb7bfe5f46a58ca2af0f68 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e04f6898f8b0e044e3156af2f4dce5aedb016654 b/fuzz/gnutls_x509_parser_fuzzer.in/e04f6898f8b0e044e3156af2f4dce5aedb016654 new file mode 100644 index 0000000000..10c6b64f22 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e04f6898f8b0e044e3156af2f4dce5aedb016654 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e07741b11626ee239319e2557bfc292075e6571a b/fuzz/gnutls_x509_parser_fuzzer.in/e07741b11626ee239319e2557bfc292075e6571a new file mode 100644 index 0000000000..e6fa26f35b Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e07741b11626ee239319e2557bfc292075e6571a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e08f9ad71e189211955572cf3f853a25c9e9545d b/fuzz/gnutls_x509_parser_fuzzer.in/e08f9ad71e189211955572cf3f853a25c9e9545d new file mode 100644 index 0000000000..6eb472fc68 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e08f9ad71e189211955572cf3f853a25c9e9545d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e0b2f79edd6a1aa194ea434a929743bb68d3f1aa b/fuzz/gnutls_x509_parser_fuzzer.in/e0b2f79edd6a1aa194ea434a929743bb68d3f1aa new file mode 100644 index 0000000000..8397d86def Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e0b2f79edd6a1aa194ea434a929743bb68d3f1aa differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e0eee177ff457e80e5445d2d5cd2a9fbf25feac3 b/fuzz/gnutls_x509_parser_fuzzer.in/e0eee177ff457e80e5445d2d5cd2a9fbf25feac3 new file mode 100644 index 0000000000..b3e34b0adc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e0eee177ff457e80e5445d2d5cd2a9fbf25feac3 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e12d230e41da0d5448b1898534329a5a99f2954b b/fuzz/gnutls_x509_parser_fuzzer.in/e12d230e41da0d5448b1898534329a5a99f2954b new file mode 100644 index 0000000000..bd358918bc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e12d230e41da0d5448b1898534329a5a99f2954b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e16282531cf74831b081ea709e7a72babe6d79e0 b/fuzz/gnutls_x509_parser_fuzzer.in/e16282531cf74831b081ea709e7a72babe6d79e0 new file mode 100644 index 0000000000..eab4ad0f8c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e16282531cf74831b081ea709e7a72babe6d79e0 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e17f814eaac23fd6df88902e80bd7f6c674f7849 b/fuzz/gnutls_x509_parser_fuzzer.in/e17f814eaac23fd6df88902e80bd7f6c674f7849 new file mode 100644 index 0000000000..01f0e85fd6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e17f814eaac23fd6df88902e80bd7f6c674f7849 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e1e06c8f480b78b192b000f2e8d80da1f65ed40b b/fuzz/gnutls_x509_parser_fuzzer.in/e1e06c8f480b78b192b000f2e8d80da1f65ed40b new file mode 100644 index 0000000000..f0f0fd50bb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e1e06c8f480b78b192b000f2e8d80da1f65ed40b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e1ea9e24d98c45caaa8a2384802e150944f9ef26 b/fuzz/gnutls_x509_parser_fuzzer.in/e1ea9e24d98c45caaa8a2384802e150944f9ef26 new file mode 100644 index 0000000000..2f792ea4dd Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e1ea9e24d98c45caaa8a2384802e150944f9ef26 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e2e99a6beb3d5094b201ce803ddbb83014f90a34 b/fuzz/gnutls_x509_parser_fuzzer.in/e2e99a6beb3d5094b201ce803ddbb83014f90a34 new file mode 100644 index 0000000000..45f4c44253 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e2e99a6beb3d5094b201ce803ddbb83014f90a34 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e3a21bd063a954f6a2adf8d631f7cb82caca4ad9 b/fuzz/gnutls_x509_parser_fuzzer.in/e3a21bd063a954f6a2adf8d631f7cb82caca4ad9 new file mode 100644 index 0000000000..30fc9c5a81 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e3a21bd063a954f6a2adf8d631f7cb82caca4ad9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e3d55927e1e6ea2ab30042675e9a03014b0a1f1c b/fuzz/gnutls_x509_parser_fuzzer.in/e3d55927e1e6ea2ab30042675e9a03014b0a1f1c new file mode 100644 index 0000000000..0936f95ebb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e3d55927e1e6ea2ab30042675e9a03014b0a1f1c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e45a6c7cbf38ffee08605de07bb8715797a5a4d1 b/fuzz/gnutls_x509_parser_fuzzer.in/e45a6c7cbf38ffee08605de07bb8715797a5a4d1 new file mode 100644 index 0000000000..766803eba5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e45a6c7cbf38ffee08605de07bb8715797a5a4d1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e491f98324f4500498a837acae0f6c792077ddae b/fuzz/gnutls_x509_parser_fuzzer.in/e491f98324f4500498a837acae0f6c792077ddae new file mode 100644 index 0000000000..8ae04efd39 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e491f98324f4500498a837acae0f6c792077ddae differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e51740818c2e18b32a98a93094ba0e91f800e635 b/fuzz/gnutls_x509_parser_fuzzer.in/e51740818c2e18b32a98a93094ba0e91f800e635 new file mode 100644 index 0000000000..e83974e929 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e51740818c2e18b32a98a93094ba0e91f800e635 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e55b98342ab8c4fb28832712419b5db6e29e8ff6 b/fuzz/gnutls_x509_parser_fuzzer.in/e55b98342ab8c4fb28832712419b5db6e29e8ff6 new file mode 100644 index 0000000000..8e5635748f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e55b98342ab8c4fb28832712419b5db6e29e8ff6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e5829d8583e8beca2d759560d5b8f1cc7c4c3c74 b/fuzz/gnutls_x509_parser_fuzzer.in/e5829d8583e8beca2d759560d5b8f1cc7c4c3c74 new file mode 100644 index 0000000000..381f243b26 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e5829d8583e8beca2d759560d5b8f1cc7c4c3c74 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e701d3b40215f2b7f10c0dd2d60c24415819a6c4 b/fuzz/gnutls_x509_parser_fuzzer.in/e701d3b40215f2b7f10c0dd2d60c24415819a6c4 new file mode 100644 index 0000000000..2bd926daa2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e701d3b40215f2b7f10c0dd2d60c24415819a6c4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e7a1c2e64773ab2457728b2236a62fa5dab66647 b/fuzz/gnutls_x509_parser_fuzzer.in/e7a1c2e64773ab2457728b2236a62fa5dab66647 new file mode 100644 index 0000000000..62ef74a799 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e7a1c2e64773ab2457728b2236a62fa5dab66647 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e8dfc777dcd4636bc8be2ff7c4f02640bd0a0925 b/fuzz/gnutls_x509_parser_fuzzer.in/e8dfc777dcd4636bc8be2ff7c4f02640bd0a0925 new file mode 100644 index 0000000000..b407213fa1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e8dfc777dcd4636bc8be2ff7c4f02640bd0a0925 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e8e22d36d158553a7d7e7d7e7b203095e14d05af b/fuzz/gnutls_x509_parser_fuzzer.in/e8e22d36d158553a7d7e7d7e7b203095e14d05af new file mode 100644 index 0000000000..d9672e7644 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e8e22d36d158553a7d7e7d7e7b203095e14d05af differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e9244bc3f7fac75903d36a0441fc3488f0f38c22 b/fuzz/gnutls_x509_parser_fuzzer.in/e9244bc3f7fac75903d36a0441fc3488f0f38c22 new file mode 100644 index 0000000000..5c6a9a25a4 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e9244bc3f7fac75903d36a0441fc3488f0f38c22 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/e9fed9b3c21d4e0192f9809298e65b6ccb7c81ab b/fuzz/gnutls_x509_parser_fuzzer.in/e9fed9b3c21d4e0192f9809298e65b6ccb7c81ab new file mode 100644 index 0000000000..3f76b402e7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/e9fed9b3c21d4e0192f9809298e65b6ccb7c81ab differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/eabdcc4cadd5c8bbd6aaffc64c39d09f7f8877f1 b/fuzz/gnutls_x509_parser_fuzzer.in/eabdcc4cadd5c8bbd6aaffc64c39d09f7f8877f1 new file mode 100644 index 0000000000..210c5aa43e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/eabdcc4cadd5c8bbd6aaffc64c39d09f7f8877f1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/eacf1713c152ac762a1c81a5831be5ca573abd16 b/fuzz/gnutls_x509_parser_fuzzer.in/eacf1713c152ac762a1c81a5831be5ca573abd16 new file mode 100644 index 0000000000..a3f625f8f0 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/eacf1713c152ac762a1c81a5831be5ca573abd16 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/eadfbd21ec99abebc06e7aac31d60a845a6cb57c b/fuzz/gnutls_x509_parser_fuzzer.in/eadfbd21ec99abebc06e7aac31d60a845a6cb57c new file mode 100644 index 0000000000..41a19d7416 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/eadfbd21ec99abebc06e7aac31d60a845a6cb57c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/eb0352b35ad79f2237ef00b05c56981d3179e2c8 b/fuzz/gnutls_x509_parser_fuzzer.in/eb0352b35ad79f2237ef00b05c56981d3179e2c8 new file mode 100644 index 0000000000..6968367b35 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/eb0352b35ad79f2237ef00b05c56981d3179e2c8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/eb60464b3e88b52c12068230ef7ed13ab9a1ce52 b/fuzz/gnutls_x509_parser_fuzzer.in/eb60464b3e88b52c12068230ef7ed13ab9a1ce52 new file mode 100644 index 0000000000..bb1a713bc3 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/eb60464b3e88b52c12068230ef7ed13ab9a1ce52 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/eb7100f31cd1529dcae4e2666d09da01191a4699 b/fuzz/gnutls_x509_parser_fuzzer.in/eb7100f31cd1529dcae4e2666d09da01191a4699 new file mode 100644 index 0000000000..c1760db7d6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/eb7100f31cd1529dcae4e2666d09da01191a4699 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/eb78747257142468a6497087b273aca6c19e36be b/fuzz/gnutls_x509_parser_fuzzer.in/eb78747257142468a6497087b273aca6c19e36be new file mode 100644 index 0000000000..be08aa36e5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/eb78747257142468a6497087b273aca6c19e36be differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ebe7d1e889d9f0e618a47024cd7a74772ede30cc b/fuzz/gnutls_x509_parser_fuzzer.in/ebe7d1e889d9f0e618a47024cd7a74772ede30cc new file mode 100644 index 0000000000..bb1f7f1398 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ebe7d1e889d9f0e618a47024cd7a74772ede30cc differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ec5e3dabd95ab0a9b6b82eb4de6b500331374ce6 b/fuzz/gnutls_x509_parser_fuzzer.in/ec5e3dabd95ab0a9b6b82eb4de6b500331374ce6 new file mode 100644 index 0000000000..72ad5b90b8 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ec5e3dabd95ab0a9b6b82eb4de6b500331374ce6 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ec8650150daff1651a6156d9ca24e0c40aa17c67 b/fuzz/gnutls_x509_parser_fuzzer.in/ec8650150daff1651a6156d9ca24e0c40aa17c67 new file mode 100644 index 0000000000..0e7bf29be5 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ec8650150daff1651a6156d9ca24e0c40aa17c67 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ed3b8fa92d1064e6c337e3926059c018e1525bcd b/fuzz/gnutls_x509_parser_fuzzer.in/ed3b8fa92d1064e6c337e3926059c018e1525bcd new file mode 100644 index 0000000000..fa99e2ce1c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ed3b8fa92d1064e6c337e3926059c018e1525bcd differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/edf5f162ed77bdad93474dad0e71a1260a3cd510 b/fuzz/gnutls_x509_parser_fuzzer.in/edf5f162ed77bdad93474dad0e71a1260a3cd510 new file mode 100644 index 0000000000..730b43be1a Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/edf5f162ed77bdad93474dad0e71a1260a3cd510 differ diff --git a/devel/fuzz/gnutls_x509_parser.in/cert4.der b/fuzz/gnutls_x509_parser_fuzzer.in/edfbcffbd1b4b56797ce51152661789038b0cf74 similarity index 100% rename from devel/fuzz/gnutls_x509_parser.in/cert4.der rename to fuzz/gnutls_x509_parser_fuzzer.in/edfbcffbd1b4b56797ce51152661789038b0cf74 diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ee0d8bee90c3bfb7b287a6adac4ceb310ced151a b/fuzz/gnutls_x509_parser_fuzzer.in/ee0d8bee90c3bfb7b287a6adac4ceb310ced151a new file mode 100644 index 0000000000..a3d92b2895 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ee0d8bee90c3bfb7b287a6adac4ceb310ced151a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ef00ffb49e2e54e97eb649d719ba409fa0927b7a b/fuzz/gnutls_x509_parser_fuzzer.in/ef00ffb49e2e54e97eb649d719ba409fa0927b7a new file mode 100644 index 0000000000..c19c6008e1 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ef00ffb49e2e54e97eb649d719ba409fa0927b7a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ef6aa1850f2a5fb03020cd6c05936687e660ebdb b/fuzz/gnutls_x509_parser_fuzzer.in/ef6aa1850f2a5fb03020cd6c05936687e660ebdb new file mode 100644 index 0000000000..c59a19985e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ef6aa1850f2a5fb03020cd6c05936687e660ebdb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ef6d40e61a8294230c3bd4bad76773fc72c25a84 b/fuzz/gnutls_x509_parser_fuzzer.in/ef6d40e61a8294230c3bd4bad76773fc72c25a84 new file mode 100644 index 0000000000..7e3f3e9913 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ef6d40e61a8294230c3bd4bad76773fc72c25a84 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ef8d019e6676ab20713ac88bcb9a5aac9aeaa78e b/fuzz/gnutls_x509_parser_fuzzer.in/ef8d019e6676ab20713ac88bcb9a5aac9aeaa78e new file mode 100644 index 0000000000..5e5b76f02e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ef8d019e6676ab20713ac88bcb9a5aac9aeaa78e differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/eff647a5e0745501cc302b4ac42bff642cd1818d b/fuzz/gnutls_x509_parser_fuzzer.in/eff647a5e0745501cc302b4ac42bff642cd1818d new file mode 100644 index 0000000000..5b7dbd1c60 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/eff647a5e0745501cc302b4ac42bff642cd1818d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/effb37e3d9158ec746c18a04fdcedd41fcd5c349 b/fuzz/gnutls_x509_parser_fuzzer.in/effb37e3d9158ec746c18a04fdcedd41fcd5c349 new file mode 100644 index 0000000000..ef9c945c19 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/effb37e3d9158ec746c18a04fdcedd41fcd5c349 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f0a2688b5bcfa215469c43489acb35d50cf7c625 b/fuzz/gnutls_x509_parser_fuzzer.in/f0a2688b5bcfa215469c43489acb35d50cf7c625 new file mode 100644 index 0000000000..9740f2a44e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f0a2688b5bcfa215469c43489acb35d50cf7c625 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f0ccb4c4969707ccec27b603300626e211fa0b17 b/fuzz/gnutls_x509_parser_fuzzer.in/f0ccb4c4969707ccec27b603300626e211fa0b17 new file mode 100644 index 0000000000..c7225b23cf Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f0ccb4c4969707ccec27b603300626e211fa0b17 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f230dd8176ee4636857bfcf3f29a5e5b2f14c46a b/fuzz/gnutls_x509_parser_fuzzer.in/f230dd8176ee4636857bfcf3f29a5e5b2f14c46a new file mode 100644 index 0000000000..f5ac05a8f7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f230dd8176ee4636857bfcf3f29a5e5b2f14c46a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f27fa707e9600580efb49a3e72510e438917a572 b/fuzz/gnutls_x509_parser_fuzzer.in/f27fa707e9600580efb49a3e72510e438917a572 new file mode 100644 index 0000000000..01dd32d11e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f27fa707e9600580efb49a3e72510e438917a572 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f2d4d563d90b1e2ba89bad955ff3e344c3374dc1 b/fuzz/gnutls_x509_parser_fuzzer.in/f2d4d563d90b1e2ba89bad955ff3e344c3374dc1 new file mode 100644 index 0000000000..d85dc32a69 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f2d4d563d90b1e2ba89bad955ff3e344c3374dc1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f2eee30fe75d4d1de6a24f7426b9eed30ba19cb5 b/fuzz/gnutls_x509_parser_fuzzer.in/f2eee30fe75d4d1de6a24f7426b9eed30ba19cb5 new file mode 100644 index 0000000000..4fba83feb6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f2eee30fe75d4d1de6a24f7426b9eed30ba19cb5 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f35882a879ec62d1f8b77934f3955dfc2faf0f86 b/fuzz/gnutls_x509_parser_fuzzer.in/f35882a879ec62d1f8b77934f3955dfc2faf0f86 new file mode 100644 index 0000000000..353bb3cf81 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f35882a879ec62d1f8b77934f3955dfc2faf0f86 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f3faee77126782a4f0591c9fd3f7021699646a90 b/fuzz/gnutls_x509_parser_fuzzer.in/f3faee77126782a4f0591c9fd3f7021699646a90 new file mode 100644 index 0000000000..22b6db68c9 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f3faee77126782a4f0591c9fd3f7021699646a90 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f40fc5a80a670a436454a28709a916cec23aa92d b/fuzz/gnutls_x509_parser_fuzzer.in/f40fc5a80a670a436454a28709a916cec23aa92d new file mode 100644 index 0000000000..4e02a6cadc Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f40fc5a80a670a436454a28709a916cec23aa92d differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f44a496be21e10b091470072936ef4ebfa421811 b/fuzz/gnutls_x509_parser_fuzzer.in/f44a496be21e10b091470072936ef4ebfa421811 new file mode 100644 index 0000000000..ed4d68b60c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f44a496be21e10b091470072936ef4ebfa421811 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f4c85a9c1952c51e5e880cab188f872b250b9541 b/fuzz/gnutls_x509_parser_fuzzer.in/f4c85a9c1952c51e5e880cab188f872b250b9541 new file mode 100644 index 0000000000..13fd40144c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f4c85a9c1952c51e5e880cab188f872b250b9541 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f534d8defa3e0f01d54356db573413a71d600f75 b/fuzz/gnutls_x509_parser_fuzzer.in/f534d8defa3e0f01d54356db573413a71d600f75 new file mode 100644 index 0000000000..a4050a4648 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f534d8defa3e0f01d54356db573413a71d600f75 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f5a4b68e7c1ffd1a677b2ec013b66253e74ac37a b/fuzz/gnutls_x509_parser_fuzzer.in/f5a4b68e7c1ffd1a677b2ec013b66253e74ac37a new file mode 100644 index 0000000000..bb3fdbe58f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f5a4b68e7c1ffd1a677b2ec013b66253e74ac37a differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f61f40bdab4acea9ddfcce608880ee0ff9227683 b/fuzz/gnutls_x509_parser_fuzzer.in/f61f40bdab4acea9ddfcce608880ee0ff9227683 new file mode 100644 index 0000000000..5e9d504e17 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f61f40bdab4acea9ddfcce608880ee0ff9227683 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f6e4f7cb85f28db80723354e40ff567db262957c b/fuzz/gnutls_x509_parser_fuzzer.in/f6e4f7cb85f28db80723354e40ff567db262957c new file mode 100644 index 0000000000..6e901e86b0 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f6e4f7cb85f28db80723354e40ff567db262957c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f6fce7f1cad2e19b8d0f6e4403c2282856f50604 b/fuzz/gnutls_x509_parser_fuzzer.in/f6fce7f1cad2e19b8d0f6e4403c2282856f50604 new file mode 100644 index 0000000000..75d5e7db3d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f6fce7f1cad2e19b8d0f6e4403c2282856f50604 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f759d004b43db028079b7074b89bb9b96957b802 b/fuzz/gnutls_x509_parser_fuzzer.in/f759d004b43db028079b7074b89bb9b96957b802 new file mode 100644 index 0000000000..7040d9bec2 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f759d004b43db028079b7074b89bb9b96957b802 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f76cb7863d3cccdc033459dd61923691d769c82c b/fuzz/gnutls_x509_parser_fuzzer.in/f76cb7863d3cccdc033459dd61923691d769c82c new file mode 100644 index 0000000000..7a61bb32a7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f76cb7863d3cccdc033459dd61923691d769c82c differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f7ca74d67d8b91f889c17a72e30120fa7905db31 b/fuzz/gnutls_x509_parser_fuzzer.in/f7ca74d67d8b91f889c17a72e30120fa7905db31 new file mode 100644 index 0000000000..c84c302e34 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f7ca74d67d8b91f889c17a72e30120fa7905db31 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f7f91bf692394d8339d442828de21cae2c29dcb8 b/fuzz/gnutls_x509_parser_fuzzer.in/f7f91bf692394d8339d442828de21cae2c29dcb8 new file mode 100644 index 0000000000..9487021280 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f7f91bf692394d8339d442828de21cae2c29dcb8 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f8215e0b7b2636502715be31de0bfdd178311497 b/fuzz/gnutls_x509_parser_fuzzer.in/f8215e0b7b2636502715be31de0bfdd178311497 new file mode 100644 index 0000000000..985d621d71 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f8215e0b7b2636502715be31de0bfdd178311497 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f82270fa639e80a4b11f152d9ed62d497257093b b/fuzz/gnutls_x509_parser_fuzzer.in/f82270fa639e80a4b11f152d9ed62d497257093b new file mode 100644 index 0000000000..8b2c7b168d Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f82270fa639e80a4b11f152d9ed62d497257093b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f85c066406db69b6231184e30b613babbe88fe49 b/fuzz/gnutls_x509_parser_fuzzer.in/f85c066406db69b6231184e30b613babbe88fe49 new file mode 100644 index 0000000000..232a735147 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f85c066406db69b6231184e30b613babbe88fe49 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f872da89ceb85206927a249526caa21c38cc6ceb b/fuzz/gnutls_x509_parser_fuzzer.in/f872da89ceb85206927a249526caa21c38cc6ceb new file mode 100644 index 0000000000..dede5684fb Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f872da89ceb85206927a249526caa21c38cc6ceb differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f8d06f486c023f0c8de24fd621a57e3a4c64a737 b/fuzz/gnutls_x509_parser_fuzzer.in/f8d06f486c023f0c8de24fd621a57e3a4c64a737 new file mode 100644 index 0000000000..c0991cec9e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f8d06f486c023f0c8de24fd621a57e3a4c64a737 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f927b42759bc4e99cbc2d379c8f73c117eae8c8b b/fuzz/gnutls_x509_parser_fuzzer.in/f927b42759bc4e99cbc2d379c8f73c117eae8c8b new file mode 100644 index 0000000000..ab5c87693e Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f927b42759bc4e99cbc2d379c8f73c117eae8c8b differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f9559156e1f509e2840ad88877be99ff5ae57af4 b/fuzz/gnutls_x509_parser_fuzzer.in/f9559156e1f509e2840ad88877be99ff5ae57af4 new file mode 100644 index 0000000000..87f4dbda93 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f9559156e1f509e2840ad88877be99ff5ae57af4 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/f97a18aa269a11d5d2a7aa6096b3bec6e41b7fe1 b/fuzz/gnutls_x509_parser_fuzzer.in/f97a18aa269a11d5d2a7aa6096b3bec6e41b7fe1 new file mode 100644 index 0000000000..66492120ac Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/f97a18aa269a11d5d2a7aa6096b3bec6e41b7fe1 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/fb88d3ca80ac25b65cd4ea01fe96fc26663d7571 b/fuzz/gnutls_x509_parser_fuzzer.in/fb88d3ca80ac25b65cd4ea01fe96fc26663d7571 new file mode 100644 index 0000000000..0efec5001f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/fb88d3ca80ac25b65cd4ea01fe96fc26663d7571 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/fb94e0c971211490d05d4b6020e7a85c7f9a03d9 b/fuzz/gnutls_x509_parser_fuzzer.in/fb94e0c971211490d05d4b6020e7a85c7f9a03d9 new file mode 100644 index 0000000000..fa086b691c Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/fb94e0c971211490d05d4b6020e7a85c7f9a03d9 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/fc273899484f32b8a9e9a1b1edb9227e69ca4a0f b/fuzz/gnutls_x509_parser_fuzzer.in/fc273899484f32b8a9e9a1b1edb9227e69ca4a0f new file mode 100644 index 0000000000..ca55e7d1df Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/fc273899484f32b8a9e9a1b1edb9227e69ca4a0f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/fc5ae3dfd0b6657d32dcc30285b035c8f6238784 b/fuzz/gnutls_x509_parser_fuzzer.in/fc5ae3dfd0b6657d32dcc30285b035c8f6238784 new file mode 100644 index 0000000000..3890357cf7 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/fc5ae3dfd0b6657d32dcc30285b035c8f6238784 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/fcbf7bcbaa09f01334c39a2361468738ceb76106 b/fuzz/gnutls_x509_parser_fuzzer.in/fcbf7bcbaa09f01334c39a2361468738ceb76106 new file mode 100644 index 0000000000..322cc2848f Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/fcbf7bcbaa09f01334c39a2361468738ceb76106 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/fe6d002ac5119df773b72cbf4876025652fe1a67 b/fuzz/gnutls_x509_parser_fuzzer.in/fe6d002ac5119df773b72cbf4876025652fe1a67 new file mode 100644 index 0000000000..36e1868bbf Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/fe6d002ac5119df773b72cbf4876025652fe1a67 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/feaf656fe1e369792da6ccb0cf1b0e114986ba1f b/fuzz/gnutls_x509_parser_fuzzer.in/feaf656fe1e369792da6ccb0cf1b0e114986ba1f new file mode 100644 index 0000000000..9386771b14 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/feaf656fe1e369792da6ccb0cf1b0e114986ba1f differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ff1ea2db34c9e25f96fd698bdb839c4944ea7c07 b/fuzz/gnutls_x509_parser_fuzzer.in/ff1ea2db34c9e25f96fd698bdb839c4944ea7c07 new file mode 100644 index 0000000000..f9edf7cccd Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ff1ea2db34c9e25f96fd698bdb839c4944ea7c07 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ff80bd6b9ec647c65e0487497a7338109af6a371 b/fuzz/gnutls_x509_parser_fuzzer.in/ff80bd6b9ec647c65e0487497a7338109af6a371 new file mode 100644 index 0000000000..90c088b6ce Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ff80bd6b9ec647c65e0487497a7338109af6a371 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ff9496a433ae29e06848d4c27b124ed944762a17 b/fuzz/gnutls_x509_parser_fuzzer.in/ff9496a433ae29e06848d4c27b124ed944762a17 new file mode 100644 index 0000000000..9ee27763e6 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ff9496a433ae29e06848d4c27b124ed944762a17 differ diff --git a/fuzz/gnutls_x509_parser_fuzzer.in/ff9cebbabff0bf398abcbc93ef3f558f5feee82c b/fuzz/gnutls_x509_parser_fuzzer.in/ff9cebbabff0bf398abcbc93ef3f558f5feee82c new file mode 100644 index 0000000000..3975fbab60 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.in/ff9cebbabff0bf398abcbc93ef3f558f5feee82c differ diff --git a/tests/suite/invalid-cert.der b/fuzz/gnutls_x509_parser_fuzzer.repro/crash-c6a115727da400db85941e32cbaa1b65316744a9 similarity index 100% rename from tests/suite/invalid-cert.der rename to fuzz/gnutls_x509_parser_fuzzer.repro/crash-c6a115727da400db85941e32cbaa1b65316744a9 diff --git a/fuzz/gnutls_x509_parser_fuzzer.repro/leak-45ceff5162bae741d1048cede0d5dfe6b677761d b/fuzz/gnutls_x509_parser_fuzzer.repro/leak-45ceff5162bae741d1048cede0d5dfe6b677761d new file mode 100644 index 0000000000..ded50c8ab4 Binary files /dev/null and b/fuzz/gnutls_x509_parser_fuzzer.repro/leak-45ceff5162bae741d1048cede0d5dfe6b677761d differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.c b/fuzz/gnutls_x509_verify_fuzzer.c new file mode 100644 index 0000000000..3f945d5f39 --- /dev/null +++ b/fuzz/gnutls_x509_verify_fuzzer.c @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include +#include + +#include +#include +#include +#include + +#include "fuzzer.h" + +unsigned char _ca_der[] = { + 0x30, 0x82, 0x05, 0xe2, 0x30, 0x82, 0x04, 0xca, 0xa0, 0x03, 0x02, 0x01, + 0x02, 0x02, 0x10, 0x27, 0x53, 0xf8, 0x06, 0xfe, 0x91, 0x37, 0x32, 0x2f, + 0x5b, 0x40, 0x9f, 0x1c, 0x31, 0x87, 0x5c, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30, 0x81, + 0xca, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, + 0x55, 0x53, 0x31, 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, + 0x0e, 0x56, 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x49, + 0x6e, 0x63, 0x2e, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x0b, + 0x13, 0x16, 0x56, 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x54, + 0x72, 0x75, 0x73, 0x74, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x31, 0x3a, 0x30, 0x38, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x31, 0x28, + 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x36, 0x20, 0x56, 0x65, 0x72, 0x69, + 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x20, 0x2d, + 0x20, 0x46, 0x6f, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x65, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, + 0x31, 0x45, 0x30, 0x43, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x3c, 0x56, + 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x6c, 0x61, 0x73, + 0x73, 0x20, 0x33, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x50, + 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x2d, 0x20, 0x47, 0x35, 0x30, + 0x1e, 0x17, 0x0d, 0x31, 0x30, 0x30, 0x32, 0x30, 0x38, 0x30, 0x30, 0x30, + 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x32, 0x30, 0x37, + 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x81, 0xb4, 0x31, 0x0b, + 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, + 0x17, 0x30, 0x15, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x0e, 0x56, 0x65, + 0x72, 0x69, 0x53, 0x69, 0x67, 0x6e, 0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, + 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x16, 0x56, + 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x54, 0x72, 0x75, 0x73, + 0x74, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x31, 0x3b, 0x30, + 0x39, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x13, 0x32, 0x54, 0x65, 0x72, 0x6d, + 0x73, 0x20, 0x6f, 0x66, 0x20, 0x75, 0x73, 0x65, 0x20, 0x61, 0x74, 0x20, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, + 0x76, 0x65, 0x72, 0x69, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x72, 0x70, 0x61, 0x20, 0x28, 0x63, 0x29, 0x31, 0x30, 0x31, 0x2e, + 0x30, 0x2c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x25, 0x56, 0x65, 0x72, + 0x69, 0x53, 0x69, 0x67, 0x6e, 0x20, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, + 0x33, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x53, 0x69, 0x67, 0x6e, 0x69, + 0x6e, 0x67, 0x20, 0x32, 0x30, 0x31, 0x30, 0x20, 0x43, 0x41, 0x30, 0x82, + 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, + 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, + 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xf5, 0x23, 0x4b, 0x5e, 0xa5, + 0xd7, 0x8a, 0xbb, 0x32, 0xe9, 0xd4, 0x57, 0xf7, 0xef, 0xe4, 0xc7, 0x26, + 0x7e, 0xad, 0x19, 0x98, 0xfe, 0xa8, 0x9d, 0x7d, 0x94, 0xf6, 0x36, 0x6b, + 0x10, 0xd7, 0x75, 0x81, 0x30, 0x7f, 0x04, 0x68, 0x7f, 0xcb, 0x2b, 0x75, + 0x1e, 0xcd, 0x1d, 0x08, 0x8c, 0xdf, 0x69, 0x94, 0xa7, 0x37, 0xa3, 0x9c, + 0x7b, 0x80, 0xe0, 0x99, 0xe1, 0xee, 0x37, 0x4d, 0x5f, 0xce, 0x3b, 0x14, + 0xee, 0x86, 0xd4, 0xd0, 0xf5, 0x27, 0x35, 0xbc, 0x25, 0x0b, 0x38, 0xa7, + 0x8c, 0x63, 0x9d, 0x17, 0xa3, 0x08, 0xa5, 0xab, 0xb0, 0xfb, 0xcd, 0x6a, + 0x62, 0x82, 0x4c, 0xd5, 0x21, 0xda, 0x1b, 0xd9, 0xf1, 0xe3, 0x84, 0x3b, + 0x8a, 0x2a, 0x4f, 0x85, 0x5b, 0x90, 0x01, 0x4f, 0xc9, 0xa7, 0x76, 0x10, + 0x7f, 0x27, 0x03, 0x7c, 0xbe, 0xae, 0x7e, 0x7d, 0xc1, 0xdd, 0xf9, 0x05, + 0xbc, 0x1b, 0x48, 0x9c, 0x69, 0xe7, 0xc0, 0xa4, 0x3c, 0x3c, 0x41, 0x00, + 0x3e, 0xdf, 0x96, 0xe5, 0xc5, 0xe4, 0x94, 0x71, 0xd6, 0x55, 0x01, 0xc7, + 0x00, 0x26, 0x4a, 0x40, 0x3c, 0xb5, 0xa1, 0x26, 0xa9, 0x0c, 0xa7, 0x6d, + 0x80, 0x8e, 0x90, 0x25, 0x7b, 0xcf, 0xbf, 0x3f, 0x1c, 0xeb, 0x2f, 0x96, + 0xfa, 0xe5, 0x87, 0x77, 0xc6, 0xb5, 0x56, 0xb2, 0x7a, 0x3b, 0x54, 0x30, + 0x53, 0x1b, 0xdf, 0x62, 0x34, 0xff, 0x1e, 0xd1, 0xf4, 0x5a, 0x93, 0x28, + 0x85, 0xe5, 0x4c, 0x17, 0x4e, 0x7e, 0x5b, 0xfd, 0xa4, 0x93, 0x99, 0x7f, + 0xdf, 0xcd, 0xef, 0xa4, 0x75, 0xef, 0xef, 0x15, 0xf6, 0x47, 0xe7, 0xf8, + 0x19, 0x72, 0xd8, 0x2e, 0x34, 0x1a, 0xa6, 0xb4, 0xa7, 0x4c, 0x7e, 0xbd, + 0xbb, 0x4f, 0x0c, 0x3d, 0x57, 0xf1, 0x30, 0xd6, 0xa6, 0x36, 0x8e, 0xd6, + 0x80, 0x76, 0xd7, 0x19, 0x2e, 0xa5, 0xcd, 0x7e, 0x34, 0x2d, 0x89, 0x02, + 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0xd6, 0x30, 0x82, 0x01, 0xd2, + 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x08, + 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x00, 0x30, 0x70, 0x06, 0x03, + 0x55, 0x1d, 0x20, 0x04, 0x69, 0x30, 0x67, 0x30, 0x65, 0x06, 0x0b, 0x60, + 0x86, 0x48, 0x01, 0x86, 0xf8, 0x45, 0x01, 0x07, 0x17, 0x03, 0x30, 0x56, + 0x30, 0x28, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, + 0x16, 0x1c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, + 0x77, 0x2e, 0x76, 0x65, 0x72, 0x69, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x70, 0x73, 0x30, 0x2a, 0x06, 0x08, 0x2b, 0x06, + 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, 0x30, 0x1e, 0x1a, 0x1c, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x76, 0x65, + 0x72, 0x69, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, + 0x70, 0x61, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, + 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x6d, 0x06, 0x08, 0x2b, 0x06, + 0x01, 0x05, 0x05, 0x07, 0x01, 0x0c, 0x04, 0x61, 0x30, 0x5f, 0xa1, 0x5d, + 0xa0, 0x5b, 0x30, 0x59, 0x30, 0x57, 0x30, 0x55, 0x16, 0x09, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0x30, 0x21, 0x30, 0x1f, 0x30, + 0x07, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x04, 0x14, 0x8f, 0xe5, + 0xd3, 0x1a, 0x86, 0xac, 0x8d, 0x8e, 0x6b, 0xc3, 0xcf, 0x80, 0x6a, 0xd4, + 0x48, 0x18, 0x2c, 0x7b, 0x19, 0x2e, 0x30, 0x25, 0x16, 0x23, 0x68, 0x74, + 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x76, 0x65, + 0x72, 0x69, 0x73, 0x69, 0x67, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x76, + 0x73, 0x6c, 0x6f, 0x67, 0x6f, 0x2e, 0x67, 0x69, 0x66, 0x30, 0x34, 0x06, + 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x2d, 0x30, 0x2b, 0x30, 0x29, 0xa0, 0x27, + 0xa0, 0x25, 0x86, 0x23, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, + 0x72, 0x6c, 0x2e, 0x76, 0x65, 0x72, 0x69, 0x73, 0x69, 0x67, 0x6e, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x63, 0x61, 0x33, 0x2d, 0x67, 0x35, 0x2e, + 0x63, 0x72, 0x6c, 0x30, 0x28, 0x06, 0x03, 0x55, 0x1d, 0x11, 0x04, 0x21, + 0x30, 0x1f, 0xa4, 0x1d, 0x30, 0x1b, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x13, 0x10, 0x56, 0x65, 0x72, 0x69, 0x53, 0x69, 0x67, + 0x6e, 0x4d, 0x50, 0x4b, 0x49, 0x2d, 0x32, 0x2d, 0x38, 0x30, 0x1d, 0x06, + 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xcf, 0x99, 0xa9, 0xea, + 0x7b, 0x26, 0xf4, 0x4b, 0xc9, 0x8e, 0x8f, 0xd7, 0xf0, 0x05, 0x26, 0xef, + 0xe3, 0xd2, 0xa7, 0x9d, 0x30, 0x2b, 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, + 0x24, 0x30, 0x22, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, + 0x02, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03, 0x06, + 0x0c, 0x2a, 0x86, 0x3a, 0x00, 0x01, 0x83, 0x8f, 0x89, 0x0d, 0x01, 0x01, + 0x01, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, + 0x80, 0x14, 0x7f, 0xd3, 0x65, 0xa7, 0xc2, 0xdd, 0xec, 0xbb, 0xf0, 0x30, + 0x09, 0xf3, 0x43, 0x39, 0xfa, 0x02, 0xaf, 0x33, 0x31, 0x33, 0x30, 0x0d, + 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, + 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x5b, 0x8e, 0x9f, 0xd3, 0xba, 0xbe, + 0xa9, 0xaf, 0x1a, 0x3e, 0x65, 0x81, 0xb7, 0xc1, 0x64, 0xf6, 0xa2, 0x78, + 0xeb, 0x4c, 0x80, 0x06, 0x3a, 0xac, 0x22, 0x6e, 0x8c, 0x2b, 0xbc, 0x5d, + 0x85, 0x7f, 0xc0, 0x8f, 0x10, 0x2a, 0xca, 0xc4, 0xad, 0x96, 0x24, 0x01, + 0x68, 0xff, 0x65, 0xb5, 0xd1, 0x14, 0x2c, 0x2a, 0xa5, 0xda, 0x49, 0x96, + 0xaf, 0xe9, 0xd4, 0xff, 0x71, 0x9c, 0x93, 0x09, 0x4a, 0x6a, 0x61, 0xf4, + 0x4b, 0xd1, 0xcb, 0xb6, 0x5f, 0x29, 0xfc, 0x68, 0x11, 0xe5, 0x72, 0xff, + 0x46, 0x0f, 0x36, 0x29, 0x99, 0x43, 0x9e, 0xb3, 0xd9, 0xac, 0x47, 0x93, + 0x7b, 0xef, 0xc4, 0xeb, 0x66, 0x86, 0xa7, 0xd6, 0x89, 0x54, 0x3e, 0x94, + 0x9b, 0x0d, 0x91, 0xf0, 0xd2, 0x23, 0x6a, 0xc0, 0x0d, 0x37, 0xce, 0x46, + 0xdf, 0x95, 0xae, 0xa4, 0x65, 0xc6, 0x18, 0xbf, 0xa4, 0x69, 0x73, 0x3f, + 0xe8, 0x85, 0xd0, 0x48, 0x7d, 0x28, 0xef, 0xf3, 0x5f, 0xb0, 0x01, 0xb4, + 0x75, 0xb4, 0xd1, 0x53, 0x4b, 0xf4, 0x6f, 0xf6, 0xa4, 0x8b, 0x66, 0xb6, + 0xef, 0x78, 0x39, 0xc5, 0x88, 0x2b, 0x67, 0x32, 0x1a, 0xef, 0x40, 0xc0, + 0x94, 0xf6, 0xb7, 0xd2, 0x8b, 0x84, 0xa0, 0x26, 0x6f, 0x8a, 0x4b, 0xc5, + 0xd8, 0xdc, 0x54, 0xee, 0xe2, 0x4a, 0x56, 0xaa, 0xbc, 0x72, 0xe5, 0x93, + 0xe6, 0x3f, 0xb6, 0xde, 0x6d, 0x6c, 0x7b, 0x25, 0x5b, 0x01, 0xec, 0x6f, + 0x29, 0x64, 0xb7, 0xf3, 0x2e, 0x23, 0xf6, 0x1f, 0xae, 0x11, 0x2d, 0xc6, + 0xba, 0xb9, 0xeb, 0x08, 0x60, 0xb1, 0x2d, 0x1b, 0x2b, 0x9e, 0xbe, 0x85, + 0x74, 0x0a, 0x1d, 0x2e, 0x2a, 0x52, 0x91, 0x18, 0x20, 0xd7, 0xc9, 0xb2, + 0x97, 0x84, 0x8f, 0x16, 0x2c, 0x32, 0xca, 0x18, 0x12, 0xaa, 0xc5, 0x20, + 0x59, 0xca, 0xfb, 0x6d, 0x37, 0x32, 0xe3, 0xc5, 0xa3, 0x84 +}; +unsigned int _ca_der_len = 1510; + +static time_t mytime(time_t * t) +{ + time_t then = 1553835274; + if (t) + *t = then; + + return then; +} + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + gnutls_datum_t raw; + gnutls_datum_t ca; + gnutls_x509_crt_t crt, ca_crt; + int ret; + unsigned status = 0; + + gnutls_global_set_time_function(mytime); + + raw.data = (unsigned char *)data; + raw.size = size; + + ca.data = _ca_der; + ca.size = _ca_der_len; + + ret = gnutls_x509_crt_init(&ca_crt); + assert(ret >= 0); + + ret = gnutls_x509_crt_init(&crt); + assert(ret >= 0); + + ret = gnutls_x509_crt_import(ca_crt, &ca, GNUTLS_X509_FMT_DER); + if (ret < 0) + goto fail; + + ret = gnutls_x509_crt_import(crt, &raw, GNUTLS_X509_FMT_DER); + if (ret < 0) + goto fail; + + ret = gnutls_x509_crt_list_verify(&crt, 1, &ca_crt, 1, NULL, 0, + GNUTLS_VERIFY_ALLOW_UNSORTED_CHAIN|GNUTLS_VERIFY_ALLOW_BROKEN| + GNUTLS_VERIFY_DISABLE_TRUSTED_TIME_CHECKS, + &status); + assert(ret < 0 || status != 0); + + fail: + gnutls_x509_crt_deinit(crt); + gnutls_x509_crt_deinit(ca_crt); + return 0; +} diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/002b3b1e1bfc104b693b6ab3e1d6390324025b16 b/fuzz/gnutls_x509_verify_fuzzer.in/002b3b1e1bfc104b693b6ab3e1d6390324025b16 new file mode 100644 index 0000000000..6209507039 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/002b3b1e1bfc104b693b6ab3e1d6390324025b16 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/01700d8f6c5f7694d9c1052a19d0abbb28c5568a b/fuzz/gnutls_x509_verify_fuzzer.in/01700d8f6c5f7694d9c1052a19d0abbb28c5568a new file mode 100644 index 0000000000..d699fe716b Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/01700d8f6c5f7694d9c1052a19d0abbb28c5568a differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/01ac9ff96373a8dbc44b0e878431b4582e7c0575 b/fuzz/gnutls_x509_verify_fuzzer.in/01ac9ff96373a8dbc44b0e878431b4582e7c0575 new file mode 100644 index 0000000000..f0f28f8f1c Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/01ac9ff96373a8dbc44b0e878431b4582e7c0575 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/04167f00711babfa1e72192813feb0c5b6349476 b/fuzz/gnutls_x509_verify_fuzzer.in/04167f00711babfa1e72192813feb0c5b6349476 new file mode 100644 index 0000000000..9bad3c245b Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/04167f00711babfa1e72192813feb0c5b6349476 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/1a08e8e144269ffea8256737e26c532975335445 b/fuzz/gnutls_x509_verify_fuzzer.in/1a08e8e144269ffea8256737e26c532975335445 new file mode 100644 index 0000000000..8f627a9823 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/1a08e8e144269ffea8256737e26c532975335445 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/1d453d0c955b2dfe90eb500e03460da6d1821aa0 b/fuzz/gnutls_x509_verify_fuzzer.in/1d453d0c955b2dfe90eb500e03460da6d1821aa0 new file mode 100644 index 0000000000..fb1d8668aa Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/1d453d0c955b2dfe90eb500e03460da6d1821aa0 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/22fcc4095bcbdd4372530dc57a33da08093b6f7b b/fuzz/gnutls_x509_verify_fuzzer.in/22fcc4095bcbdd4372530dc57a33da08093b6f7b new file mode 100644 index 0000000000..a6222830ee Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/22fcc4095bcbdd4372530dc57a33da08093b6f7b differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/2cebf12e8123267adf86cffd4a1c967867038728 b/fuzz/gnutls_x509_verify_fuzzer.in/2cebf12e8123267adf86cffd4a1c967867038728 new file mode 100644 index 0000000000..42e4521da9 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/2cebf12e8123267adf86cffd4a1c967867038728 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/2f52fa98aee1519d88a09e5019f4186aa4ba767a b/fuzz/gnutls_x509_verify_fuzzer.in/2f52fa98aee1519d88a09e5019f4186aa4ba767a new file mode 100644 index 0000000000..ae452e2585 --- /dev/null +++ b/fuzz/gnutls_x509_verify_fuzzer.in/2f52fa98aee1519d88a09e5019f4186aa4ba767a @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/330df9a1b7378e13a922dfabf93a7b031607e162 b/fuzz/gnutls_x509_verify_fuzzer.in/330df9a1b7378e13a922dfabf93a7b031607e162 new file mode 100644 index 0000000000..7cb0b8f362 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/330df9a1b7378e13a922dfabf93a7b031607e162 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/3e5df53ca7ba1dd885174a751051034fd68a9936 b/fuzz/gnutls_x509_verify_fuzzer.in/3e5df53ca7ba1dd885174a751051034fd68a9936 new file mode 100644 index 0000000000..7464434e81 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/3e5df53ca7ba1dd885174a751051034fd68a9936 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/41cb7a409819966c0963aa1754d59e732bffdec1 b/fuzz/gnutls_x509_verify_fuzzer.in/41cb7a409819966c0963aa1754d59e732bffdec1 new file mode 100644 index 0000000000..1fa32d4ece Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/41cb7a409819966c0963aa1754d59e732bffdec1 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/42aad44cd368a7a733f4cc443be1573a603522dc b/fuzz/gnutls_x509_verify_fuzzer.in/42aad44cd368a7a733f4cc443be1573a603522dc new file mode 100644 index 0000000000..7957a240fa Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/42aad44cd368a7a733f4cc443be1573a603522dc differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/4b7f40b27f7253b528d9f0f395effe76501a1b57 b/fuzz/gnutls_x509_verify_fuzzer.in/4b7f40b27f7253b528d9f0f395effe76501a1b57 new file mode 100644 index 0000000000..9834e2a05a Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/4b7f40b27f7253b528d9f0f395effe76501a1b57 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/4c40470491752b7a7e8222ffe09bdbb6f8b17b8e b/fuzz/gnutls_x509_verify_fuzzer.in/4c40470491752b7a7e8222ffe09bdbb6f8b17b8e new file mode 100644 index 0000000000..fa9fbb9153 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/4c40470491752b7a7e8222ffe09bdbb6f8b17b8e differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/50762fbd1e7b1b728d47ada8b275df356e515a9f b/fuzz/gnutls_x509_verify_fuzzer.in/50762fbd1e7b1b728d47ada8b275df356e515a9f new file mode 100644 index 0000000000..1fd9dc768f Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/50762fbd1e7b1b728d47ada8b275df356e515a9f differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/5adcfd99a2adde75e428c9b7949a451d30ea9db0 b/fuzz/gnutls_x509_verify_fuzzer.in/5adcfd99a2adde75e428c9b7949a451d30ea9db0 new file mode 100644 index 0000000000..e972650b85 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/5adcfd99a2adde75e428c9b7949a451d30ea9db0 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/5d7df9320caea230b7b2fd98857c20951642e0cc b/fuzz/gnutls_x509_verify_fuzzer.in/5d7df9320caea230b7b2fd98857c20951642e0cc new file mode 100644 index 0000000000..148c424b23 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/5d7df9320caea230b7b2fd98857c20951642e0cc differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/65b620082dc82a0c200068733b40429e517774bf b/fuzz/gnutls_x509_verify_fuzzer.in/65b620082dc82a0c200068733b40429e517774bf new file mode 100644 index 0000000000..a00b3d184e Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/65b620082dc82a0c200068733b40429e517774bf differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/66316317064f1244c7b54bdafa4357985e96d197 b/fuzz/gnutls_x509_verify_fuzzer.in/66316317064f1244c7b54bdafa4357985e96d197 new file mode 100644 index 0000000000..af14fa612a Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/66316317064f1244c7b54bdafa4357985e96d197 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/6ea3c6d569e11c225d76a0e29f0b342f866fd921 b/fuzz/gnutls_x509_verify_fuzzer.in/6ea3c6d569e11c225d76a0e29f0b342f866fd921 new file mode 100644 index 0000000000..f4c1575647 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/6ea3c6d569e11c225d76a0e29f0b342f866fd921 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/73c7732264ffc00590a8f419c1c35c7cbb3cd09e b/fuzz/gnutls_x509_verify_fuzzer.in/73c7732264ffc00590a8f419c1c35c7cbb3cd09e new file mode 100644 index 0000000000..9963361a2a Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/73c7732264ffc00590a8f419c1c35c7cbb3cd09e differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/73dc537f0b2bf197011a120af2203b440947dc4d b/fuzz/gnutls_x509_verify_fuzzer.in/73dc537f0b2bf197011a120af2203b440947dc4d new file mode 100644 index 0000000000..bf1223fd1a Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/73dc537f0b2bf197011a120af2203b440947dc4d differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/77dfa0b784d684c8d4c3070ac391b1a4a9b61923 b/fuzz/gnutls_x509_verify_fuzzer.in/77dfa0b784d684c8d4c3070ac391b1a4a9b61923 new file mode 100644 index 0000000000..3825ae66b5 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/77dfa0b784d684c8d4c3070ac391b1a4a9b61923 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/78ac7cc51d212fd06a603a22aafb177958df0e8c b/fuzz/gnutls_x509_verify_fuzzer.in/78ac7cc51d212fd06a603a22aafb177958df0e8c new file mode 100644 index 0000000000..28927324e1 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/78ac7cc51d212fd06a603a22aafb177958df0e8c differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/7b2eac7f462d34571080387364c857d62e8eb2b6 b/fuzz/gnutls_x509_verify_fuzzer.in/7b2eac7f462d34571080387364c857d62e8eb2b6 new file mode 100644 index 0000000000..3b903ed9e4 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/7b2eac7f462d34571080387364c857d62e8eb2b6 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/7bc2b59a120a051e2db21de7dc7a01dc6381df7a b/fuzz/gnutls_x509_verify_fuzzer.in/7bc2b59a120a051e2db21de7dc7a01dc6381df7a new file mode 100644 index 0000000000..0874f0358d Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/7bc2b59a120a051e2db21de7dc7a01dc6381df7a differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/7beb4f6612593d006bc768833c53617b29aa2df3 b/fuzz/gnutls_x509_verify_fuzzer.in/7beb4f6612593d006bc768833c53617b29aa2df3 new file mode 100644 index 0000000000..54b2418b66 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/7beb4f6612593d006bc768833c53617b29aa2df3 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/7ea19b702d681a755b674ad9fb38536f8191eee5 b/fuzz/gnutls_x509_verify_fuzzer.in/7ea19b702d681a755b674ad9fb38536f8191eee5 new file mode 100644 index 0000000000..2597c3e00a Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/7ea19b702d681a755b674ad9fb38536f8191eee5 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/82040fdd2ec0720f75cde35e819d376ae7d101fa b/fuzz/gnutls_x509_verify_fuzzer.in/82040fdd2ec0720f75cde35e819d376ae7d101fa new file mode 100644 index 0000000000..ac88941315 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/82040fdd2ec0720f75cde35e819d376ae7d101fa differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/8393577d3e89753b351d54487be0841afe52cd5c b/fuzz/gnutls_x509_verify_fuzzer.in/8393577d3e89753b351d54487be0841afe52cd5c new file mode 100644 index 0000000000..2913cea865 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/8393577d3e89753b351d54487be0841afe52cd5c differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/843e0516dea8dbea98a86b45081be58b9536d368 b/fuzz/gnutls_x509_verify_fuzzer.in/843e0516dea8dbea98a86b45081be58b9536d368 new file mode 100644 index 0000000000..0577df3ea2 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/843e0516dea8dbea98a86b45081be58b9536d368 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/86165b65f2c236492435fb8c200efdebbf5046af b/fuzz/gnutls_x509_verify_fuzzer.in/86165b65f2c236492435fb8c200efdebbf5046af new file mode 100644 index 0000000000..ac2a7d3a87 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/86165b65f2c236492435fb8c200efdebbf5046af differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/9359f75110fe36b945a7ba83119387b9e6f3b1f5 b/fuzz/gnutls_x509_verify_fuzzer.in/9359f75110fe36b945a7ba83119387b9e6f3b1f5 new file mode 100644 index 0000000000..1f72df4177 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/9359f75110fe36b945a7ba83119387b9e6f3b1f5 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/98522341a911adea38b17c5dd6dc9cedb274398a b/fuzz/gnutls_x509_verify_fuzzer.in/98522341a911adea38b17c5dd6dc9cedb274398a new file mode 100644 index 0000000000..2083e38ad5 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/98522341a911adea38b17c5dd6dc9cedb274398a differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/9ae8450fd99d2588bbbdb8b01c654e89bc326767 b/fuzz/gnutls_x509_verify_fuzzer.in/9ae8450fd99d2588bbbdb8b01c654e89bc326767 new file mode 100644 index 0000000000..b3e0329faa Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/9ae8450fd99d2588bbbdb8b01c654e89bc326767 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/a1267c89005582c50d0dcb6d81354ffc2c2a5975 b/fuzz/gnutls_x509_verify_fuzzer.in/a1267c89005582c50d0dcb6d81354ffc2c2a5975 new file mode 100644 index 0000000000..8a43c2256c Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/a1267c89005582c50d0dcb6d81354ffc2c2a5975 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/a8c9a1b00ca7d7b7aa00461f4f22f20ab2c3183a b/fuzz/gnutls_x509_verify_fuzzer.in/a8c9a1b00ca7d7b7aa00461f4f22f20ab2c3183a new file mode 100644 index 0000000000..8d977f0f4d Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/a8c9a1b00ca7d7b7aa00461f4f22f20ab2c3183a differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/a9d60d7fdba0e041efd285a2dcc685672ae1002d b/fuzz/gnutls_x509_verify_fuzzer.in/a9d60d7fdba0e041efd285a2dcc685672ae1002d new file mode 100644 index 0000000000..afc5120d97 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/a9d60d7fdba0e041efd285a2dcc685672ae1002d differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/aaa0ce947bcb6f16375000a9e0375b54e9946952 b/fuzz/gnutls_x509_verify_fuzzer.in/aaa0ce947bcb6f16375000a9e0375b54e9946952 new file mode 100644 index 0000000000..f0da3f215c Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/aaa0ce947bcb6f16375000a9e0375b54e9946952 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/adfa17bc842b4a97ba47924ca38844c7661c5aae b/fuzz/gnutls_x509_verify_fuzzer.in/adfa17bc842b4a97ba47924ca38844c7661c5aae new file mode 100644 index 0000000000..3131067b3c Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/adfa17bc842b4a97ba47924ca38844c7661c5aae differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/ae6e042b9def7f234fed8b7ca13a2d8ddc3cd3f2 b/fuzz/gnutls_x509_verify_fuzzer.in/ae6e042b9def7f234fed8b7ca13a2d8ddc3cd3f2 new file mode 100644 index 0000000000..f547669875 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/ae6e042b9def7f234fed8b7ca13a2d8ddc3cd3f2 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/b535476e67f1e451f2d6a1f4addffd621b48289d b/fuzz/gnutls_x509_verify_fuzzer.in/b535476e67f1e451f2d6a1f4addffd621b48289d new file mode 100644 index 0000000000..02ce220c77 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/b535476e67f1e451f2d6a1f4addffd621b48289d differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/c0d7f0b3d36c6f4acb7566b77d14bb091eae72c9 b/fuzz/gnutls_x509_verify_fuzzer.in/c0d7f0b3d36c6f4acb7566b77d14bb091eae72c9 new file mode 100644 index 0000000000..e8fcd2d5b2 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/c0d7f0b3d36c6f4acb7566b77d14bb091eae72c9 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/c13e50b79b616b8f78493dbff3f278c2f9bfad36 b/fuzz/gnutls_x509_verify_fuzzer.in/c13e50b79b616b8f78493dbff3f278c2f9bfad36 new file mode 100644 index 0000000000..f3148f0f1c Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/c13e50b79b616b8f78493dbff3f278c2f9bfad36 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/c25643067b5401ba3dd8b01ed8c27bbd51a39c56 b/fuzz/gnutls_x509_verify_fuzzer.in/c25643067b5401ba3dd8b01ed8c27bbd51a39c56 new file mode 100644 index 0000000000..1872621ad3 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/c25643067b5401ba3dd8b01ed8c27bbd51a39c56 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/c4f51dff8d73a640fc7e735e3111739ea5f8ae14 b/fuzz/gnutls_x509_verify_fuzzer.in/c4f51dff8d73a640fc7e735e3111739ea5f8ae14 new file mode 100644 index 0000000000..bc0cd24797 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/c4f51dff8d73a640fc7e735e3111739ea5f8ae14 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/cacfee70b450f1a347465b7d5fb4f752a29891bf b/fuzz/gnutls_x509_verify_fuzzer.in/cacfee70b450f1a347465b7d5fb4f752a29891bf new file mode 100644 index 0000000000..cf1a1ed6b0 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/cacfee70b450f1a347465b7d5fb4f752a29891bf differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/cf3fc6a015aab0938c51f01cc91878ae45119722 b/fuzz/gnutls_x509_verify_fuzzer.in/cf3fc6a015aab0938c51f01cc91878ae45119722 new file mode 100644 index 0000000000..024da7dc51 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/cf3fc6a015aab0938c51f01cc91878ae45119722 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/d1d519c41c054bc73869daebb91057b300108248 b/fuzz/gnutls_x509_verify_fuzzer.in/d1d519c41c054bc73869daebb91057b300108248 new file mode 100644 index 0000000000..8061744ae0 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/d1d519c41c054bc73869daebb91057b300108248 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/d2d17e4d21a8c2109b6b29d962095bbe41654a31 b/fuzz/gnutls_x509_verify_fuzzer.in/d2d17e4d21a8c2109b6b29d962095bbe41654a31 new file mode 100644 index 0000000000..1309dd278a Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/d2d17e4d21a8c2109b6b29d962095bbe41654a31 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/d5458b819e0fa97c64859b395e8d6f9517230a01 b/fuzz/gnutls_x509_verify_fuzzer.in/d5458b819e0fa97c64859b395e8d6f9517230a01 new file mode 100644 index 0000000000..2ea696c333 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/d5458b819e0fa97c64859b395e8d6f9517230a01 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/d55131f3f8ce28146286f04b047e8b9483309a88 b/fuzz/gnutls_x509_verify_fuzzer.in/d55131f3f8ce28146286f04b047e8b9483309a88 new file mode 100644 index 0000000000..7ced14e06b Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/d55131f3f8ce28146286f04b047e8b9483309a88 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/d59264de662c46eec16d4e2a62eb53c301fdaeed b/fuzz/gnutls_x509_verify_fuzzer.in/d59264de662c46eec16d4e2a62eb53c301fdaeed new file mode 100644 index 0000000000..df0ac951bb Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/d59264de662c46eec16d4e2a62eb53c301fdaeed differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/dc57f64019ae695837e6cf18397629446ad75713 b/fuzz/gnutls_x509_verify_fuzzer.in/dc57f64019ae695837e6cf18397629446ad75713 new file mode 100644 index 0000000000..ec73b3c0a5 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/dc57f64019ae695837e6cf18397629446ad75713 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/dd3abf671a98c2b1489b6ab260712b9b3938063e b/fuzz/gnutls_x509_verify_fuzzer.in/dd3abf671a98c2b1489b6ab260712b9b3938063e new file mode 100644 index 0000000000..f3c417aa2d Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/dd3abf671a98c2b1489b6ab260712b9b3938063e differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/e6043acb60cfa31e021cfd15b2328aa00a1e9cd7 b/fuzz/gnutls_x509_verify_fuzzer.in/e6043acb60cfa31e021cfd15b2328aa00a1e9cd7 new file mode 100644 index 0000000000..1188d2a716 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/e6043acb60cfa31e021cfd15b2328aa00a1e9cd7 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/e92f1c7ac38755c08dd27129289a4762bbad29fb b/fuzz/gnutls_x509_verify_fuzzer.in/e92f1c7ac38755c08dd27129289a4762bbad29fb new file mode 100644 index 0000000000..8d9619ac2b Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/e92f1c7ac38755c08dd27129289a4762bbad29fb differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/edb47e279c64f73ecf38138ce2ae1fd02fda825d b/fuzz/gnutls_x509_verify_fuzzer.in/edb47e279c64f73ecf38138ce2ae1fd02fda825d new file mode 100644 index 0000000000..099009c438 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/edb47e279c64f73ecf38138ce2ae1fd02fda825d differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/eeac080b4ad77da7ea572477bb2bc91b2928b263 b/fuzz/gnutls_x509_verify_fuzzer.in/eeac080b4ad77da7ea572477bb2bc91b2928b263 new file mode 100644 index 0000000000..2d90d7057f Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/eeac080b4ad77da7ea572477bb2bc91b2928b263 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/ef4c958d340cecdf138740829885b4f89c0c2802 b/fuzz/gnutls_x509_verify_fuzzer.in/ef4c958d340cecdf138740829885b4f89c0c2802 new file mode 100644 index 0000000000..9d5449fb2c Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/ef4c958d340cecdf138740829885b4f89c0c2802 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/f0f2ae1dbb73e427cbcfcdac5723bb9e8708849c b/fuzz/gnutls_x509_verify_fuzzer.in/f0f2ae1dbb73e427cbcfcdac5723bb9e8708849c new file mode 100644 index 0000000000..0a7d3d3ed0 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/f0f2ae1dbb73e427cbcfcdac5723bb9e8708849c differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/f5ccf6482d7e8eb465f238ec3040e6c5de777b25 b/fuzz/gnutls_x509_verify_fuzzer.in/f5ccf6482d7e8eb465f238ec3040e6c5de777b25 new file mode 100644 index 0000000000..9b559eb0cf Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/f5ccf6482d7e8eb465f238ec3040e6c5de777b25 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/f893c650106622ebc7abd910392728f69f356acd b/fuzz/gnutls_x509_verify_fuzzer.in/f893c650106622ebc7abd910392728f69f356acd new file mode 100644 index 0000000000..a24ef98a05 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/f893c650106622ebc7abd910392728f69f356acd differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.in/fa198a13c3c96245be8598a6bc2c021d0500e576 b/fuzz/gnutls_x509_verify_fuzzer.in/fa198a13c3c96245be8598a6bc2c021d0500e576 new file mode 100644 index 0000000000..a9d4d6c0e9 Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.in/fa198a13c3c96245be8598a6bc2c021d0500e576 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.repro/5b24d9a0bdb049a203a1fac98d2854bbc6062195 b/fuzz/gnutls_x509_verify_fuzzer.repro/5b24d9a0bdb049a203a1fac98d2854bbc6062195 new file mode 100644 index 0000000000..86b66c022c Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.repro/5b24d9a0bdb049a203a1fac98d2854bbc6062195 differ diff --git a/fuzz/gnutls_x509_verify_fuzzer.repro/cacdb69aaf394120d761291f43983336d15c7be3 b/fuzz/gnutls_x509_verify_fuzzer.repro/cacdb69aaf394120d761291f43983336d15c7be3 new file mode 100644 index 0000000000..bad7160bae Binary files /dev/null and b/fuzz/gnutls_x509_verify_fuzzer.repro/cacdb69aaf394120d761291f43983336d15c7be3 differ diff --git a/fuzz/main.c b/fuzz/main.c new file mode 100644 index 0000000000..b2223d0fc7 --- /dev/null +++ b/fuzz/main.c @@ -0,0 +1,175 @@ +/* + * Copyright(c) 2017 Tim Ruehsen + * + * 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. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "fuzzer.h" + +#ifdef TEST_RUN + +#include + +#ifdef _WIN32 +# define SLASH '\\' +#else +# define SLASH '/' +#endif + +static int test_single_file(const char *fname) +{ + int fd, ret; + struct stat st; + uint8_t *data; + ssize_t n; + + if ((fd = open(fname, O_RDONLY)) == -1) { + fprintf(stderr, "Failed to open %s (%d)\n", fname, errno); + return -1; + } + + if (fstat(fd, &st) != 0) { + fprintf(stderr, "Failed to stat %d (%d)\n", fd, errno); + close(fd); + return -1; + } + + data = malloc(st.st_size); + if ((n = read(fd, data, st.st_size)) == st.st_size) { + printf("testing %llu bytes from '%s'\n", (unsigned long long) st.st_size, fname); + fflush(stdout); + LLVMFuzzerTestOneInput(data, st.st_size); + fflush(stderr); + ret = 0; + } else { + fprintf(stderr, "Failed to read %llu bytes from %s (%d), got %zd\n", (unsigned long long) st.st_size, fname, errno, n); + ret = -1; + } + + free(data); + close(fd); + return ret; +} + +static int test_all_from(const char *dirname) +{ + DIR *dirp; + struct dirent *dp; + + if ((dirp = opendir(dirname))) { + while ((dp = readdir(dirp))) { + if (*dp->d_name == '.') continue; + + char fname[strlen(dirname) + strlen(dp->d_name) + 2]; + snprintf(fname, sizeof(fname), "%s/%s", dirname, dp->d_name); + + if (test_single_file(fname) < 0) + continue; + } + closedir(dirp); + return 0; + } + + return 1; +} + +int main(int argc, char **argv) +{ + const char *target; + size_t target_len; + + if ((target = strrchr(argv[0], SLASH))) + target = strrchr(target, '/'); + else + target = strrchr(argv[0], '/'); + target = target ? target + 1 : argv[0]; + + if (strncmp(target, "lt-", 3) == 0) + target += 3; + + target_len = strlen(target); + +#ifdef _WIN32 + target_len -= 4; // ignore .exe +#endif + + if (argc > 1) { /* test a single file */ + test_single_file(argv[1]); + } else { /* test the target directory */ + int rc; + char corporadir[sizeof(SRCDIR) + 1 + target_len + 8]; + snprintf(corporadir, sizeof(corporadir), SRCDIR "/%.*s.in", (int) target_len, target); + + rc = test_all_from(corporadir); + if (rc) + fprintf(stderr, "Failed to find %s\n", corporadir); + + snprintf(corporadir, sizeof(corporadir), SRCDIR "/%.*s.repro", (int) target_len, target); + + if (test_all_from(corporadir) && rc) + return 77; + } + + return 0; +} + +#else + +#ifndef __AFL_LOOP +static int __AFL_LOOP(int n) +{ + static int first = 1; + + if (first) { + first = 0; + return 1; + } + + return 0; +} +#endif + +int main(int argc, char **argv) +{ + int ret; + unsigned char buf[64 * 1024]; + + while (__AFL_LOOP(10000)) { // only works with afl-clang-fast + ret = fread(buf, 1, sizeof(buf), stdin); + if (ret < 0) + return 0; + + LLVMFuzzerTestOneInput(buf, ret); + } + + return 0; +} + +#endif /* TEST_RUN */ diff --git a/fuzz/mem.h b/fuzz/mem.h new file mode 100644 index 0000000000..5a49b56971 --- /dev/null +++ b/fuzz/mem.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * 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. + * + */ + +#ifndef MEM_H +# define MEM_H + +typedef struct mem_st { + const uint8_t *data; + size_t size; +} mem_st; + +#define MIN(x,y) ((x)<(y)?(x):(y)) +static ssize_t +mem_push(gnutls_transport_ptr_t tr, const void *data, size_t len) +{ + return len; +} + +static ssize_t mem_pull(gnutls_transport_ptr_t tr, void *data, size_t len) +{ + struct mem_st *p = (struct mem_st *)tr; + + if (p->size == 0) { + return 0; + } + + len = MIN(len, p->size); + memcpy(data, p->data, len); + + p->size -= len; + p->data += len; + + return len; +} + +static +int mem_pull_timeout(gnutls_transport_ptr_t tr, unsigned int ms) +{ + struct mem_st *p = (struct mem_st *)tr; + + if (p->size > 0) + return 1; /* available data */ + else + return 0; /* timeout */ +} + +#endif diff --git a/fuzz/psk.h b/fuzz/psk.h new file mode 100644 index 0000000000..fe4a8af743 --- /dev/null +++ b/fuzz/psk.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * 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. + * + */ + +#ifndef PSK_H +# define PSK_H + +static const uint8_t psk_key16[] = { + 0x8a, 0x77, 0x59, 0xb3, 0xf2, 0x69, 0x83, 0xc4, + 0x53, 0xe4, 0x48, 0x06, 0x0b, 0xde, 0x89, 0x81 +}; + +#endif diff --git a/fuzz/run-afl.sh b/fuzz/run-afl.sh new file mode 100755 index 0000000000..68f77f8ce1 --- /dev/null +++ b/fuzz/run-afl.sh @@ -0,0 +1,64 @@ +#!/bin/sh +# Copyright (C) 2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +srcdir="${srcdir:-.}" +export LD_LIBRARY_PATH=${srcdir}/../lib/.libs/ + +cat ${srcdir}/../config.log|grep afl-gcc >/dev/null 2>&1 +if test $? != 0;then + echo "compile first library as:" + echo "CC=afl-gcc ./configure" + exit 1 +else + fuzz=afl-gcc +fi + +if test -z "$1";then + echo "Usage: $0 test-case" + echo "Example: $0 gnutls_x509_parser_fuzzer" + exit 1 +fi + +TEST=$1 +rm -f ${TEST} +export LD_LIBRARY_PATH=$(pwd)/../lib/.libs/ +export CFLAGS="-g -O2 -I/usr/local/include -I../lib/includes -I.." +${fuzz} ${CFLAGS} -o ${TEST} main.c ${TEST}.c -L../lib/.libs/ -lgnutls || exit 1 + +TMPOUT=${TEST}.$$.out +mkdir -p ${TMPOUT} +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -M fuzzer01 -- ./${TEST} & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer02 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer03 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer04 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer05 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer06 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer07 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer08 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer09 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer10 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer11 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer12 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer13 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer14 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer15 -- ./${TEST} >/dev/null 2>&1 & +afl-fuzz -i ${TEST}.in -o ${TMPOUT} -S fuzzer16 -- ./${TEST} >/dev/null 2>&1 & + +echo "output was stored in $TMPOUT" + +exit 0 diff --git a/fuzz/run-clang.sh b/fuzz/run-clang.sh new file mode 100755 index 0000000000..6d7da40210 --- /dev/null +++ b/fuzz/run-clang.sh @@ -0,0 +1,62 @@ +#!/bin/bash -e +# +# Copyright(c) 2017 Tim Rühsen +# +# This file is part of GnuTLS +# +# GnuTLS is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with gnutls. If not, see . + +trap ctrl_c INT + +ctrl_c() { + ./${fuzzer} -merge=1 ${fuzzer}.in ${fuzzer}.new + rm -rf ${fuzzer}.new +} + +if test -z "$1"; then + echo "Usage: $0 " + echo "Example: $0 gnutls_base64_decode_fuzzer" + exit 1 +fi + +if ! grep -q FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION Makefile; then + echo "The fuzzers haven't been built for fuzzing (maybe for regression testing !?)" + echo "Please built regarding README.md and try again." + exit 1 +fi + +fuzzer=$1 +workers=$(($(nproc) - 0)) +jobs=$workers + +clang \ + $CFLAGS -I/usr/local/include -I../lib/includes -I.. \ + ${fuzzer}.c -o ${fuzzer} \ + -Wl,-Bstatic ../lib/.libs/libgnutls.a -lFuzzer \ + -Wl,-Bdynamic -lnettle -lhogweed -lgmp -lp11-kit -ltasn1 -lidn2 -lunistring -lstdc++ + +if test -n "$BUILD_ONLY"; then + exit 0 +fi + +# create directory for NEW test corpora (covering new areas of code) +mkdir -p ${fuzzer}.new + +if test -f ${fuzzer}.dict; then + $sudo ./${fuzzer} -dict=${fuzzer}.dict ${fuzzer}.new ${fuzzer}.in -jobs=$jobs -workers=$workers +else + $sudo ./${fuzzer} ${fuzzer}.new ${fuzzer}.in -jobs=$jobs -workers=$workers +fi + +exit 0 diff --git a/fuzz/srp.h b/fuzz/srp.h new file mode 100644 index 0000000000..90bc283c2f --- /dev/null +++ b/fuzz/srp.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * 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. + * + */ + +#ifndef SRP_H +# define SRP_H + +#define USERNAME "test" +#define PASSWORD "test" + +#define SALT "\xeb\x0e\x6a\x5c\x02\x0d\x4b\xa9\x97\xb6\xbe\x73\x4a\x71\xc5\x00" +#define SALT_SIZE 16 + +#endif diff --git a/fuzz/view-coverage.sh b/fuzz/view-coverage.sh new file mode 100755 index 0000000000..7d50960541 --- /dev/null +++ b/fuzz/view-coverage.sh @@ -0,0 +1,30 @@ +#!/bin/bash -e +# +# (C)2017-2018 Tim Ruehsen tim.ruehsen@gmx.de +# +# View the coverage report for one or more fuzzers. + +# 1. execute 'make coverage-prepare' in the fuzz/ directory +# 2. execute './view-coverage.sh + +# Example with single fuzzer: +# ./view-coverage.sh gnutls_client_fuzzer + +# Example with two fuzzers: +# ./view-coverage.sh gnutls_base64_decoder_fuzzer gnutls_base64_encoder_fuzzer + +if test -z "$1"; then + echo "Usage: $0 " + echo "Example: $0 gnutls_client_fuzzer" + exit 1 +fi + +LCOV_INFO=coverage.info + +lcov --zerocounters --directory ../lib/ +#lcov --capture --initial --directory ../lib/ --directory . --output-file $LCOV_INFO +make check TESTS="$*" CFLAGS="$CFLAGS --coverage" LDFLAGS="$LDFLAGS --coverage" +lcov --capture --directory ../lib/ --output-file $LCOV_INFO +lcov --remove $LCOV_INFO '/usr/include*' '*/gl/*' -o $LCOV_INFO +genhtml --prefix . --ignore-errors source $LCOV_INFO --legend --title "$*" --output-directory=lcov +xdg-open lcov/index.html diff --git a/gl/Makefile.am b/gl/Makefile.am deleted file mode 100644 index 70708d5b80..0000000000 --- a/gl/Makefile.am +++ /dev/null @@ -1,1708 +0,0 @@ -## DO NOT EDIT! GENERATED AUTOMATICALLY! -## Process this file with automake to produce Makefile.in. -# Copyright (C) 2002-2016 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file. If not, see . -# -# As a special exception to the GNU General Public License, -# this file may be distributed as part of a program that -# contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=gl/tests --aux-dir=build-aux --with-tests --avoid=alignof-tests --avoid=lock-tests --avoid=lseek-tests --lgpl=2 --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files alloca byteswap c-ctype extensions func gendocs getline gettext-h gettimeofday hash-pjw-bare havelib intprops lib-msvc-compat lib-symbol-versions maintainer-makefile manywarnings memmem-simple minmax netdb netinet_in pmccabe2html read-file secure_getenv snprintf stdint strcase strndup strtok_r strverscmp sys_socket sys_stat time_r unistd valgrind-tests vasprintf vsnprintf warnings - -AUTOMAKE_OPTIONS = 1.9.6 gnits - -SUBDIRS = -noinst_HEADERS = -noinst_LIBRARIES = -noinst_LTLIBRARIES = -EXTRA_DIST = -BUILT_SOURCES = -SUFFIXES = -MOSTLYCLEANFILES = core *.stackdump -MOSTLYCLEANDIRS = -CLEANFILES = -DISTCLEANFILES = -MAINTAINERCLEANFILES = -SUBDIRS += tests -EXTRA_DIST += m4/gnulib-cache.m4 - -AM_CPPFLAGS = -AM_CFLAGS = - -noinst_LTLIBRARIES += libgnu.la - -libgnu_la_SOURCES = -libgnu_la_LIBADD = $(gl_LTLIBOBJS) -libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) -EXTRA_libgnu_la_SOURCES = -libgnu_la_LDFLAGS = $(AM_LDFLAGS) -libgnu_la_LDFLAGS += -no-undefined -libgnu_la_LDFLAGS += $(LTLIBINTL) - -## begin gnulib module absolute-header - -# Use this preprocessor expression to decide whether #include_next works. -# Do not rely on a 'configure'-time test for this, since the expression -# might appear in an installed header, which is used by some other compiler. -HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) - -## end gnulib module absolute-header - -## begin gnulib module alloca - - -libgnu_la_LIBADD += @LTALLOCA@ -libgnu_la_DEPENDENCIES += @LTALLOCA@ -EXTRA_DIST += alloca.c - -EXTRA_libgnu_la_SOURCES += alloca.c - -## end gnulib module alloca - -## begin gnulib module alloca-opt - -BUILT_SOURCES += $(ALLOCA_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -if GL_GENERATE_ALLOCA_H -alloca.h: alloca.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/alloca.in.h; \ - } > $@-t && \ - mv -f $@-t $@ -else -alloca.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += alloca.h alloca.h-t - -EXTRA_DIST += alloca.in.h - -## end gnulib module alloca-opt - -## begin gnulib module byteswap - -BUILT_SOURCES += $(BYTESWAP_H) - -# We need the following in order to create when the system -# doesn't have one. -if GL_GENERATE_BYTESWAP_H -byteswap.h: byteswap.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/byteswap.in.h; \ - } > $@-t && \ - mv -f $@-t $@ -else -byteswap.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += byteswap.h byteswap.h-t - -EXTRA_DIST += byteswap.in.h - -## end gnulib module byteswap - -## begin gnulib module c-ctype - -libgnu_la_SOURCES += c-ctype.h c-ctype.c - -## end gnulib module c-ctype - -## begin gnulib module errno - -BUILT_SOURCES += $(ERRNO_H) - -# We need the following in order to create when the system -# doesn't have one that is POSIX compliant. -if GL_GENERATE_ERRNO_H -errno.h: errno.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ - -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ - -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ - -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ - -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ - -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ - -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ - < $(srcdir)/errno.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -errno.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += errno.h errno.h-t - -EXTRA_DIST += errno.in.h - -## end gnulib module errno - -## begin gnulib module float - -BUILT_SOURCES += $(FLOAT_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -if GL_GENERATE_FLOAT_H -float.h: float.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ - -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ - < $(srcdir)/float.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -float.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += float.h float.h-t - -EXTRA_DIST += float.c float.in.h itold.c - -EXTRA_libgnu_la_SOURCES += float.c itold.c - -## end gnulib module float - -## begin gnulib module fstat - - -EXTRA_DIST += fstat.c - -EXTRA_libgnu_la_SOURCES += fstat.c - -## end gnulib module fstat - -## begin gnulib module ftell - - -EXTRA_DIST += ftell.c - -EXTRA_libgnu_la_SOURCES += ftell.c - -## end gnulib module ftell - -## begin gnulib module ftello - - -EXTRA_DIST += ftello.c stdio-impl.h - -EXTRA_libgnu_la_SOURCES += ftello.c - -## end gnulib module ftello - -## begin gnulib module gendocs - - -EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh - -## end gnulib module gendocs - -## begin gnulib module getdelim - - -EXTRA_DIST += getdelim.c - -EXTRA_libgnu_la_SOURCES += getdelim.c - -## end gnulib module getdelim - -## begin gnulib module getline - - -EXTRA_DIST += getline.c - -EXTRA_libgnu_la_SOURCES += getline.c - -## end gnulib module getline - -## begin gnulib module gettext-h - -libgnu_la_SOURCES += gettext.h - -## end gnulib module gettext-h - -## begin gnulib module gettimeofday - - -EXTRA_DIST += gettimeofday.c - -EXTRA_libgnu_la_SOURCES += gettimeofday.c - -## end gnulib module gettimeofday - -## begin gnulib module gnumakefile - -distclean-local: clean-GNUmakefile -clean-GNUmakefile: - test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile - -EXTRA_DIST += $(top_srcdir)/GNUmakefile - -## end gnulib module gnumakefile - -## begin gnulib module hash-pjw-bare - -libgnu_la_SOURCES += hash-pjw-bare.h hash-pjw-bare.c - -## end gnulib module hash-pjw-bare - -## begin gnulib module havelib - - -EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath - -## end gnulib module havelib - -## begin gnulib module intprops - - -EXTRA_DIST += intprops.h - -## end gnulib module intprops - -## begin gnulib module limits-h - -BUILT_SOURCES += $(LIMITS_H) - -# We need the following in order to create when the system -# doesn't have one that is compatible with GNU. -if GL_GENERATE_LIMITS_H -limits.h: limits.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ - < $(srcdir)/limits.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -limits.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += limits.h limits.h-t - -EXTRA_DIST += limits.in.h - -## end gnulib module limits-h - -## begin gnulib module lseek - - -EXTRA_DIST += lseek.c - -EXTRA_libgnu_la_SOURCES += lseek.c - -## end gnulib module lseek - -## begin gnulib module maintainer-makefile - -EXTRA_DIST += $(top_srcdir)/maint.mk - -## end gnulib module maintainer-makefile - -## begin gnulib module malloc-posix - - -EXTRA_DIST += malloc.c - -EXTRA_libgnu_la_SOURCES += malloc.c - -## end gnulib module malloc-posix - -## begin gnulib module memchr - - -EXTRA_DIST += memchr.c memchr.valgrind - -EXTRA_libgnu_la_SOURCES += memchr.c - -## end gnulib module memchr - -## begin gnulib module memmem-simple - - -EXTRA_DIST += memmem.c str-two-way.h - -EXTRA_libgnu_la_SOURCES += memmem.c - -## end gnulib module memmem-simple - -## begin gnulib module minmax - -libgnu_la_SOURCES += minmax.h - -## end gnulib module minmax - -## begin gnulib module msvc-inval - - -EXTRA_DIST += msvc-inval.c msvc-inval.h - -EXTRA_libgnu_la_SOURCES += msvc-inval.c - -## end gnulib module msvc-inval - -## begin gnulib module msvc-nothrow - - -EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h - -EXTRA_libgnu_la_SOURCES += msvc-nothrow.c - -## end gnulib module msvc-nothrow - -## begin gnulib module netdb - -BUILT_SOURCES += netdb.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -netdb.h: netdb.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_NETDB_H''@|$(NEXT_NETDB_H)|g' \ - -e 's|@''HAVE_NETDB_H''@|$(HAVE_NETDB_H)|g' \ - -e 's/@''GNULIB_GETADDRINFO''@/$(GNULIB_GETADDRINFO)/g' \ - -e 's|@''HAVE_STRUCT_ADDRINFO''@|$(HAVE_STRUCT_ADDRINFO)|g' \ - -e 's|@''HAVE_DECL_FREEADDRINFO''@|$(HAVE_DECL_FREEADDRINFO)|g' \ - -e 's|@''HAVE_DECL_GAI_STRERROR''@|$(HAVE_DECL_GAI_STRERROR)|g' \ - -e 's|@''HAVE_DECL_GETADDRINFO''@|$(HAVE_DECL_GETADDRINFO)|g' \ - -e 's|@''HAVE_DECL_GETNAMEINFO''@|$(HAVE_DECL_GETNAMEINFO)|g' \ - -e 's|@''REPLACE_GAI_STRERROR''@|$(REPLACE_GAI_STRERROR)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/netdb.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += netdb.h netdb.h-t - -EXTRA_DIST += netdb.in.h - -## end gnulib module netdb - -## begin gnulib module netinet_in - -BUILT_SOURCES += $(NETINET_IN_H) - -# We need the following in order to create when the system -# doesn't have one. -if GL_GENERATE_NETINET_IN_H -netinet/in.h: netinet_in.in.h $(top_builddir)/config.status - $(AM_V_at)$(MKDIR_P) netinet - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \ - -e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \ - < $(srcdir)/netinet_in.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -netinet/in.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t -MOSTLYCLEANDIRS += netinet - -EXTRA_DIST += netinet_in.in.h - -## end gnulib module netinet_in - -## begin gnulib module pmccabe2html - - -EXTRA_DIST += $(top_srcdir)/build-aux/pmccabe2html $(top_srcdir)/build-aux/pmccabe.css - -## end gnulib module pmccabe2html - -## begin gnulib module read-file - -libgnu_la_SOURCES += read-file.c - -EXTRA_DIST += read-file.h - -## end gnulib module read-file - -## begin gnulib module realloc-posix - - -EXTRA_DIST += realloc.c - -EXTRA_libgnu_la_SOURCES += realloc.c - -## end gnulib module realloc-posix - -## begin gnulib module secure_getenv - - -EXTRA_DIST += secure_getenv.c - -EXTRA_libgnu_la_SOURCES += secure_getenv.c - -## end gnulib module secure_getenv - -## begin gnulib module size_max - -libgnu_la_SOURCES += size_max.h - -## end gnulib module size_max - -## begin gnulib module snippet/_Noreturn - -# Because this Makefile snippet defines a variable used by other -# gnulib Makefile snippets, it must be present in all Makefile.am that -# need it. This is ensured by the applicability 'all' defined above. - -_NORETURN_H=$(top_srcdir)/build-aux/snippet/_Noreturn.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/_Noreturn.h - -## end gnulib module snippet/_Noreturn - -## begin gnulib module snippet/arg-nonnull - -# The BUILT_SOURCES created by this Makefile snippet are not used via #include -# statements but through direct file reference. Therefore this snippet must be -# present in all Makefile.am that need it. This is ensured by the applicability -# 'all' defined above. - -BUILT_SOURCES += arg-nonnull.h -# The arg-nonnull.h that gets inserted into generated .h files is the same as -# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut -# off. -arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/GL_ARG_NONNULL/,$$p' \ - < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t - -ARG_NONNULL_H=arg-nonnull.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h - -## end gnulib module snippet/arg-nonnull - -## begin gnulib module snippet/c++defs - -# The BUILT_SOURCES created by this Makefile snippet are not used via #include -# statements but through direct file reference. Therefore this snippet must be -# present in all Makefile.am that need it. This is ensured by the applicability -# 'all' defined above. - -BUILT_SOURCES += c++defs.h -# The c++defs.h that gets inserted into generated .h files is the same as -# build-aux/snippet/c++defs.h, except that it has the copyright header cut off. -c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/_GL_CXXDEFS/,$$p' \ - < $(top_srcdir)/build-aux/snippet/c++defs.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += c++defs.h c++defs.h-t - -CXXDEFS_H=c++defs.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h - -## end gnulib module snippet/c++defs - -## begin gnulib module snippet/warn-on-use - -BUILT_SOURCES += warn-on-use.h -# The warn-on-use.h that gets inserted into generated .h files is the same as -# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut -# off. -warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/^.ifndef/,$$p' \ - < $(top_srcdir)/build-aux/snippet/warn-on-use.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t - -WARN_ON_USE_H=warn-on-use.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h - -## end gnulib module snippet/warn-on-use - -## begin gnulib module snprintf - - -EXTRA_DIST += snprintf.c - -EXTRA_libgnu_la_SOURCES += snprintf.c - -## end gnulib module snprintf - -## begin gnulib module stdalign - -BUILT_SOURCES += $(STDALIGN_H) - -# We need the following in order to create when the system -# doesn't have one that works. -if GL_GENERATE_STDALIGN_H -stdalign.h: stdalign.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/stdalign.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -stdalign.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stdalign.h stdalign.h-t - -EXTRA_DIST += stdalign.in.h - -## end gnulib module stdalign - -## begin gnulib module stdbool - -BUILT_SOURCES += $(STDBOOL_H) - -# We need the following in order to create when the system -# doesn't have one that works. -if GL_GENERATE_STDBOOL_H -stdbool.h: stdbool.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -stdbool.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stdbool.h stdbool.h-t - -EXTRA_DIST += stdbool.in.h - -## end gnulib module stdbool - -## begin gnulib module stddef - -BUILT_SOURCES += $(STDDEF_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -if GL_GENERATE_STDDEF_H -stddef.h: stddef.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ - -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ - -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ - -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ - < $(srcdir)/stddef.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -stddef.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stddef.h stddef.h-t - -EXTRA_DIST += stddef.in.h - -## end gnulib module stddef - -## begin gnulib module stdint - -BUILT_SOURCES += $(STDINT_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -if GL_GENERATE_STDINT_H -stdint.h: stdint.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ - -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ - -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ - -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ - -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ - -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ - -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ - -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ - -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ - -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ - -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ - -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ - -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ - -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ - -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ - -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ - -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ - -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ - -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ - < $(srcdir)/stdint.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -stdint.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stdint.h stdint.h-t - -EXTRA_DIST += stdint.in.h - -## end gnulib module stdint - -## begin gnulib module stdio - -BUILT_SOURCES += stdio.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ - -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ - -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ - -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ - -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ - -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ - -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ - -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ - -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ - -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ - -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ - -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ - -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ - -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ - -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ - -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ - -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ - -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ - -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ - -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ - -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ - -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ - -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ - -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ - -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ - -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ - -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ - -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ - -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ - -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ - -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ - -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ - -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ - -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ - -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ - -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ - -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ - -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ - -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ - -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ - -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ - -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ - -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ - -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ - -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ - -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ - -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ - -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ - -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ - -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ - -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ - -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ - -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ - -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ - < $(srcdir)/stdio.in.h | \ - sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ - -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ - -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ - -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ - -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ - -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ - -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ - -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ - -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ - -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ - -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ - -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ - -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ - -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ - -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ - -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ - -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ - -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ - -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ - -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ - -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ - -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ - -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ - -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ - -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ - -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ - -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ - -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ - -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ - -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ - -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ - -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ - -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ - -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ - -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ - -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ - -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ - -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ - -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ - -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ - -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ - -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ - -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ - -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ - -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ - -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ - -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ - -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ - -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += stdio.h stdio.h-t - -EXTRA_DIST += stdio.in.h - -## end gnulib module stdio - -## begin gnulib module stdlib - -BUILT_SOURCES += stdlib.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ - $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ - -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ - -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ - -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ - -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ - -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ - -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ - -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ - -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ - -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ - -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ - -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ - -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ - -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ - -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ - -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ - -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ - -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ - -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ - -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ - -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ - -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ - -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ - -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ - -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ - -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ - -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ - -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ - -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ - -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ - -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ - -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ - -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ - -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ - < $(srcdir)/stdlib.in.h | \ - sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ - -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ - -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ - -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ - -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ - -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ - -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ - -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ - -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ - -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ - -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ - -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ - -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ - -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ - -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ - -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ - -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ - -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ - -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ - -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ - -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ - -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ - -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ - -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ - -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ - -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ - -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ - -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ - -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ - -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ - -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ - -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ - -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ - -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ - -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ - -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ - -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ - -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ - -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ - -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ - -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ - -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ - -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ - -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ - -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _Noreturn/r $(_NORETURN_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += stdlib.h stdlib.h-t - -EXTRA_DIST += stdlib.in.h - -## end gnulib module stdlib - -## begin gnulib module strcase - - -EXTRA_DIST += strcasecmp.c strncasecmp.c - -EXTRA_libgnu_la_SOURCES += strcasecmp.c strncasecmp.c - -## end gnulib module strcase - -## begin gnulib module string - -BUILT_SOURCES += string.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ - -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ - -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ - -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ - -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ - -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ - -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ - -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ - -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ - -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ - -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ - -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ - -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ - -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ - -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ - -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ - -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ - -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ - -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ - -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ - -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ - -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ - -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ - -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ - -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ - -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ - -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ - -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ - -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ - -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ - -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ - -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ - -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ - -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ - -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ - -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ - -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ - -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ - < $(srcdir)/string.in.h | \ - sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ - -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ - -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ - -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ - -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ - -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ - -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ - -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ - -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ - -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ - -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ - -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ - -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ - -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ - -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ - -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ - -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ - -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ - -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ - -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ - -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ - -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ - -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ - -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ - -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ - -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ - -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ - -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ - -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ - -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ - -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ - -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ - -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ - -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ - -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ - -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ - < $(srcdir)/string.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += string.h string.h-t - -EXTRA_DIST += string.in.h - -## end gnulib module string - -## begin gnulib module strings - -BUILT_SOURCES += strings.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ - -e 's|@''GNULIB_FFS''@|$(GNULIB_FFS)|g' \ - -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ - -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ - -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/strings.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += strings.h strings.h-t - -EXTRA_DIST += strings.in.h - -## end gnulib module strings - -## begin gnulib module strndup - - -EXTRA_DIST += strndup.c - -EXTRA_libgnu_la_SOURCES += strndup.c - -## end gnulib module strndup - -## begin gnulib module strnlen - - -EXTRA_DIST += strnlen.c - -EXTRA_libgnu_la_SOURCES += strnlen.c - -## end gnulib module strnlen - -## begin gnulib module strtok_r - - -EXTRA_DIST += strtok_r.c - -EXTRA_libgnu_la_SOURCES += strtok_r.c - -## end gnulib module strtok_r - -## begin gnulib module strverscmp - - -EXTRA_DIST += strverscmp.c - -EXTRA_libgnu_la_SOURCES += strverscmp.c - -## end gnulib module strverscmp - -## begin gnulib module sys_socket - -BUILT_SOURCES += sys/socket.h -libgnu_la_SOURCES += sys_socket.c - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \ - -e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \ - -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ - -e 's/@''GNULIB_SOCKET''@/$(GNULIB_SOCKET)/g' \ - -e 's/@''GNULIB_CONNECT''@/$(GNULIB_CONNECT)/g' \ - -e 's/@''GNULIB_ACCEPT''@/$(GNULIB_ACCEPT)/g' \ - -e 's/@''GNULIB_BIND''@/$(GNULIB_BIND)/g' \ - -e 's/@''GNULIB_GETPEERNAME''@/$(GNULIB_GETPEERNAME)/g' \ - -e 's/@''GNULIB_GETSOCKNAME''@/$(GNULIB_GETSOCKNAME)/g' \ - -e 's/@''GNULIB_GETSOCKOPT''@/$(GNULIB_GETSOCKOPT)/g' \ - -e 's/@''GNULIB_LISTEN''@/$(GNULIB_LISTEN)/g' \ - -e 's/@''GNULIB_RECV''@/$(GNULIB_RECV)/g' \ - -e 's/@''GNULIB_SEND''@/$(GNULIB_SEND)/g' \ - -e 's/@''GNULIB_RECVFROM''@/$(GNULIB_RECVFROM)/g' \ - -e 's/@''GNULIB_SENDTO''@/$(GNULIB_SENDTO)/g' \ - -e 's/@''GNULIB_SETSOCKOPT''@/$(GNULIB_SETSOCKOPT)/g' \ - -e 's/@''GNULIB_SHUTDOWN''@/$(GNULIB_SHUTDOWN)/g' \ - -e 's/@''GNULIB_ACCEPT4''@/$(GNULIB_ACCEPT4)/g' \ - -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ - -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ - -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \ - -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY''@|$(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)|g' \ - -e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \ - -e 's|@''HAVE_ACCEPT4''@|$(HAVE_ACCEPT4)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/sys_socket.in.h; \ - } > $@-t && \ - mv -f $@-t $@ -MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t -MOSTLYCLEANDIRS += sys - -EXTRA_DIST += sys_socket.in.h - -## end gnulib module sys_socket - -## begin gnulib module sys_stat - -BUILT_SOURCES += sys/stat.h - -# We need the following in order to create when the system -# has one that is incomplete. -sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ - -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ - -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \ - -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \ - -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \ - -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \ - -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \ - -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \ - -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \ - -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \ - -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \ - -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \ - -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \ - -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \ - -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \ - -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ - -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ - -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ - -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ - -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ - -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ - -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ - -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ - -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ - -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ - -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ - -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ - -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ - -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ - -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ - -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ - -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ - -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ - -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ - -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/sys_stat.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t -MOSTLYCLEANDIRS += sys - -EXTRA_DIST += sys_stat.in.h - -## end gnulib module sys_stat - -## begin gnulib module sys_time - -BUILT_SOURCES += sys/time.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ - -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ - -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ - -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ - -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ - -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ - -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/sys_time.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += sys/time.h sys/time.h-t - -EXTRA_DIST += sys_time.in.h - -## end gnulib module sys_time - -## begin gnulib module sys_types - -BUILT_SOURCES += sys/types.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -sys/types.h: sys_types.in.h $(top_builddir)/config.status - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ - -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ - < $(srcdir)/sys_types.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += sys/types.h sys/types.h-t - -EXTRA_DIST += sys_types.in.h - -## end gnulib module sys_types - -## begin gnulib module sys_uio - -BUILT_SOURCES += sys/uio.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -sys/uio.h: sys_uio.in.h $(top_builddir)/config.status - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_UIO_H''@|$(NEXT_SYS_UIO_H)|g' \ - -e 's|@''HAVE_SYS_UIO_H''@|$(HAVE_SYS_UIO_H)|g' \ - < $(srcdir)/sys_uio.in.h; \ - } > $@-t && \ - mv -f $@-t $@ -MOSTLYCLEANFILES += sys/uio.h sys/uio.h-t -MOSTLYCLEANDIRS += sys - -EXTRA_DIST += sys_uio.in.h - -## end gnulib module sys_uio - -## begin gnulib module time - -BUILT_SOURCES += time.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ - -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ - -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ - -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ - -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ - -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ - -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ - -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ - -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ - -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ - -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ - -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ - -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ - -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ - -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ - -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ - -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ - -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ - -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ - -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ - -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ - -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ - -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/time.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += time.h time.h-t - -EXTRA_DIST += time.in.h - -## end gnulib module time - -## begin gnulib module time_r - - -EXTRA_DIST += time_r.c - -EXTRA_libgnu_la_SOURCES += time_r.c - -## end gnulib module time_r - -## begin gnulib module unistd - -BUILT_SOURCES += unistd.h -libgnu_la_SOURCES += unistd.c - -# We need the following in order to create an empty placeholder for -# when the system doesn't have one. -unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ - -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ - -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ - -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ - -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ - -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ - -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ - -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ - -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ - -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ - -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ - -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ - -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ - -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ - -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ - -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ - -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ - -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ - -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ - -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ - -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ - -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ - -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ - -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ - -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ - -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ - -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ - -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ - -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ - -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ - -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ - -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ - -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ - -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ - -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ - -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ - -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ - -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ - -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ - -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ - -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ - -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ - -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ - -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ - -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ - -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ - -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ - -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ - -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ - -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ - -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ - < $(srcdir)/unistd.in.h | \ - sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ - -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ - -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ - -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ - -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ - -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ - -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ - -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ - -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ - -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ - -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ - -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ - -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ - -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ - -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ - -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ - -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ - -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ - -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ - -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ - -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ - -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ - -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ - -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ - -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ - -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ - -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ - -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ - -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ - -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ - -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ - -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ - -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ - -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ - -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ - -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ - -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ - -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ - -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ - -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ - -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ - -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ - | \ - sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ - -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ - -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ - -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ - -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ - -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ - -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ - -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ - -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ - -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ - -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ - -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ - -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ - -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ - -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ - -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ - -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ - -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ - -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ - -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ - -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ - -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ - -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ - -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ - -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ - -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ - -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ - -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ - -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ - -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ - -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ - -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ - -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += unistd.h unistd.h-t - -EXTRA_DIST += unistd.in.h - -## end gnulib module unistd - -## begin gnulib module useless-if-before-free - - -EXTRA_DIST += $(top_srcdir)/build-aux/useless-if-before-free - -## end gnulib module useless-if-before-free - -## begin gnulib module vasnprintf - - -EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h - -EXTRA_libgnu_la_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c - -## end gnulib module vasnprintf - -## begin gnulib module vasprintf - - -EXTRA_DIST += asprintf.c vasprintf.c - -EXTRA_libgnu_la_SOURCES += asprintf.c vasprintf.c - -## end gnulib module vasprintf - -## begin gnulib module vc-list-files - - -EXTRA_DIST += $(top_srcdir)/build-aux/vc-list-files - -## end gnulib module vc-list-files - -## begin gnulib module verify - - -EXTRA_DIST += verify.h - -## end gnulib module verify - -## begin gnulib module vsnprintf - - -EXTRA_DIST += vsnprintf.c - -EXTRA_libgnu_la_SOURCES += vsnprintf.c - -## end gnulib module vsnprintf - -## begin gnulib module wchar - -BUILT_SOURCES += wchar.h - -# We need the following in order to create when the system -# version does not work standalone. -wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ - -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ - -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ - -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ - -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ - -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ - -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ - -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ - -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ - -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ - -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ - -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ - -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ - -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ - -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ - -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ - -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ - -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ - -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ - -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ - -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ - -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ - -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ - -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ - -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ - -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ - -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ - -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ - -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ - -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ - -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ - -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ - -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ - -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ - -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ - -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ - -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ - -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ - -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ - -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ - -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ - -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ - < $(srcdir)/wchar.in.h | \ - sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ - -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ - -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ - -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ - -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ - -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ - -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ - -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ - -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ - -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ - -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ - -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ - -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ - -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ - -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ - -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ - -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ - -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ - -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ - -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ - -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ - -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ - -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ - -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ - -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ - -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ - -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ - -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ - -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ - -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ - -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ - -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ - -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ - -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ - -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ - -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ - -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ - -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ - -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ - -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ - | \ - sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ - -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ - -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ - -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ - -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ - -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ - -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ - -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ - -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ - -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ - -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ - -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ - -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += wchar.h wchar.h-t - -EXTRA_DIST += wchar.in.h - -## end gnulib module wchar - -## begin gnulib module xsize - -libgnu_la_SOURCES += xsize.h xsize.c - -## end gnulib module xsize - - -mostlyclean-local: mostlyclean-generic - @for dir in '' $(MOSTLYCLEANDIRS); do \ - if test -n "$$dir" && test -d $$dir; then \ - echo "rmdir $$dir"; rmdir $$dir; \ - fi; \ - done; \ - : diff --git a/gl/alloca.c b/gl/alloca.c deleted file mode 100644 index ee0f018868..0000000000 --- a/gl/alloca.c +++ /dev/null @@ -1,478 +0,0 @@ -/* alloca.c -- allocate automatically reclaimed memory - (Mostly) portable public-domain implementation -- D A Gwyn - - This implementation of the PWB library alloca function, - which is used to allocate space off the run-time stack so - that it is automatically reclaimed upon procedure exit, - was inspired by discussions with J. Q. Johnson of Cornell. - J.Otto Tennant contributed the Cray support. - - There are some preprocessor constants that can - be defined when compiling for your specific system, for - improved efficiency; however, the defaults should be okay. - - The general concept of this implementation is to keep - track of all alloca-allocated blocks, and reclaim any - that are found to be deeper in the stack than the current - invocation. This heuristic does not reclaim storage as - soon as it becomes invalid, but it will do so eventually. - - As a special case, alloca(0) reclaims storage without - allocating any. It is a good idea to use alloca(0) in - your main control loop, etc. to force garbage collection. */ - -#include - -#include - -#include -#include - -#ifdef emacs -# include "lisp.h" -# include "blockinput.h" -# ifdef EMACS_FREE -# undef free -# define free EMACS_FREE -# endif -#else -# define memory_full() abort () -#endif - -/* If compiling with GCC 2, this file's not needed. */ -#if !defined (__GNUC__) || __GNUC__ < 2 - -/* If someone has defined alloca as a macro, - there must be some other way alloca is supposed to work. */ -# ifndef alloca - -# ifdef emacs -# ifdef static -/* actually, only want this if static is defined as "" - -- this is for usg, in which emacs must undefine static - in order to make unexec workable - */ -# ifndef STACK_DIRECTION -you -lose --- must know STACK_DIRECTION at compile-time -/* Using #error here is not wise since this file should work for - old and obscure compilers. */ -# endif /* STACK_DIRECTION undefined */ -# endif /* static */ -# endif /* emacs */ - -/* If your stack is a linked list of frames, you have to - provide an "address metric" ADDRESS_FUNCTION macro. */ - -# if defined (CRAY) && defined (CRAY_STACKSEG_END) -long i00afunc (); -# define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) -# else -# define ADDRESS_FUNCTION(arg) &(arg) -# endif - -/* Define STACK_DIRECTION if you know the direction of stack - growth for your system; otherwise it will be automatically - deduced at run-time. - - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ - -# ifndef STACK_DIRECTION -# define STACK_DIRECTION 0 /* Direction unknown. */ -# endif - -# if STACK_DIRECTION != 0 - -# define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ - -# else /* STACK_DIRECTION == 0; need run-time code. */ - -static int stack_dir; /* 1 or -1 once known. */ -# define STACK_DIR stack_dir - -static int -find_stack_direction (int *addr, int depth) -{ - int dir, dummy = 0; - if (! addr) - addr = &dummy; - *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; - dir = depth ? find_stack_direction (addr, depth - 1) : 0; - return dir + dummy; -} - -# endif /* STACK_DIRECTION == 0 */ - -/* An "alloca header" is used to: - (a) chain together all alloca'ed blocks; - (b) keep track of stack depth. - - It is very important that sizeof(header) agree with malloc - alignment chunk size. The following default should work okay. */ - -# ifndef ALIGN_SIZE -# define ALIGN_SIZE sizeof(double) -# endif - -typedef union hdr -{ - char align[ALIGN_SIZE]; /* To force sizeof(header). */ - struct - { - union hdr *next; /* For chaining headers. */ - char *deep; /* For stack depth measure. */ - } h; -} header; - -static header *last_alloca_header = NULL; /* -> last alloca header. */ - -/* Return a pointer to at least SIZE bytes of storage, - which will be automatically reclaimed upon exit from - the procedure that called alloca. Originally, this space - was supposed to be taken from the current stack frame of the - caller, but that method cannot be made to work for some - implementations of C, for example under Gould's UTX/32. */ - -void * -alloca (size_t size) -{ - auto char probe; /* Probes stack depth: */ - register char *depth = ADDRESS_FUNCTION (probe); - -# if STACK_DIRECTION == 0 - if (STACK_DIR == 0) /* Unknown growth direction. */ - STACK_DIR = find_stack_direction (NULL, (size & 1) + 20); -# endif - - /* Reclaim garbage, defined as all alloca'd storage that - was allocated from deeper in the stack than currently. */ - - { - register header *hp; /* Traverses linked list. */ - -# ifdef emacs - BLOCK_INPUT; -# endif - - for (hp = last_alloca_header; hp != NULL;) - if ((STACK_DIR > 0 && hp->h.deep > depth) - || (STACK_DIR < 0 && hp->h.deep < depth)) - { - register header *np = hp->h.next; - - free (hp); /* Collect garbage. */ - - hp = np; /* -> next header. */ - } - else - break; /* Rest are not deeper. */ - - last_alloca_header = hp; /* -> last valid storage. */ - -# ifdef emacs - UNBLOCK_INPUT; -# endif - } - - if (size == 0) - return NULL; /* No allocation required. */ - - /* Allocate combined header + user data storage. */ - - { - /* Address of header. */ - register header *new; - - size_t combined_size = sizeof (header) + size; - if (combined_size < sizeof (header)) - memory_full (); - - new = malloc (combined_size); - - if (! new) - memory_full (); - - new->h.next = last_alloca_header; - new->h.deep = depth; - - last_alloca_header = new; - - /* User storage begins just after header. */ - - return (void *) (new + 1); - } -} - -# if defined (CRAY) && defined (CRAY_STACKSEG_END) - -# ifdef DEBUG_I00AFUNC -# include -# endif - -# ifndef CRAY_STACK -# define CRAY_STACK -# ifndef CRAY2 -/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ -struct stack_control_header - { - long shgrow:32; /* Number of times stack has grown. */ - long shaseg:32; /* Size of increments to stack. */ - long shhwm:32; /* High water mark of stack. */ - long shsize:32; /* Current size of stack (all segments). */ - }; - -/* The stack segment linkage control information occurs at - the high-address end of a stack segment. (The stack - grows from low addresses to high addresses.) The initial - part of the stack segment linkage control information is - 0200 (octal) words. This provides for register storage - for the routine which overflows the stack. */ - -struct stack_segment_linkage - { - long ss[0200]; /* 0200 overflow words. */ - long sssize:32; /* Number of words in this segment. */ - long ssbase:32; /* Offset to stack base. */ - long:32; - long sspseg:32; /* Offset to linkage control of previous - segment of stack. */ - long:32; - long sstcpt:32; /* Pointer to task common address block. */ - long sscsnm; /* Private control structure number for - microtasking. */ - long ssusr1; /* Reserved for user. */ - long ssusr2; /* Reserved for user. */ - long sstpid; /* Process ID for pid based multi-tasking. */ - long ssgvup; /* Pointer to multitasking thread giveup. */ - long sscray[7]; /* Reserved for Cray Research. */ - long ssa0; - long ssa1; - long ssa2; - long ssa3; - long ssa4; - long ssa5; - long ssa6; - long ssa7; - long sss0; - long sss1; - long sss2; - long sss3; - long sss4; - long sss5; - long sss6; - long sss7; - }; - -# else /* CRAY2 */ -/* The following structure defines the vector of words - returned by the STKSTAT library routine. */ -struct stk_stat - { - long now; /* Current total stack size. */ - long maxc; /* Amount of contiguous space which would - be required to satisfy the maximum - stack demand to date. */ - long high_water; /* Stack high-water mark. */ - long overflows; /* Number of stack overflow ($STKOFEN) calls. */ - long hits; /* Number of internal buffer hits. */ - long extends; /* Number of block extensions. */ - long stko_mallocs; /* Block allocations by $STKOFEN. */ - long underflows; /* Number of stack underflow calls ($STKRETN). */ - long stko_free; /* Number of deallocations by $STKRETN. */ - long stkm_free; /* Number of deallocations by $STKMRET. */ - long segments; /* Current number of stack segments. */ - long maxs; /* Maximum number of stack segments so far. */ - long pad_size; /* Stack pad size. */ - long current_address; /* Current stack segment address. */ - long current_size; /* Current stack segment size. This - number is actually corrupted by STKSTAT to - include the fifteen word trailer area. */ - long initial_address; /* Address of initial segment. */ - long initial_size; /* Size of initial segment. */ - }; - -/* The following structure describes the data structure which trails - any stack segment. I think that the description in 'asdef' is - out of date. I only describe the parts that I am sure about. */ - -struct stk_trailer - { - long this_address; /* Address of this block. */ - long this_size; /* Size of this block (does not include - this trailer). */ - long unknown2; - long unknown3; - long link; /* Address of trailer block of previous - segment. */ - long unknown5; - long unknown6; - long unknown7; - long unknown8; - long unknown9; - long unknown10; - long unknown11; - long unknown12; - long unknown13; - long unknown14; - }; - -# endif /* CRAY2 */ -# endif /* not CRAY_STACK */ - -# ifdef CRAY2 -/* Determine a "stack measure" for an arbitrary ADDRESS. - I doubt that "lint" will like this much. */ - -static long -i00afunc (long *address) -{ - struct stk_stat status; - struct stk_trailer *trailer; - long *block, size; - long result = 0; - - /* We want to iterate through all of the segments. The first - step is to get the stack status structure. We could do this - more quickly and more directly, perhaps, by referencing the - $LM00 common block, but I know that this works. */ - - STKSTAT (&status); - - /* Set up the iteration. */ - - trailer = (struct stk_trailer *) (status.current_address - + status.current_size - - 15); - - /* There must be at least one stack segment. Therefore it is - a fatal error if "trailer" is null. */ - - if (trailer == 0) - abort (); - - /* Discard segments that do not contain our argument address. */ - - while (trailer != 0) - { - block = (long *) trailer->this_address; - size = trailer->this_size; - if (block == 0 || size == 0) - abort (); - trailer = (struct stk_trailer *) trailer->link; - if ((block <= address) && (address < (block + size))) - break; - } - - /* Set the result to the offset in this segment and add the sizes - of all predecessor segments. */ - - result = address - block; - - if (trailer == 0) - { - return result; - } - - do - { - if (trailer->this_size <= 0) - abort (); - result += trailer->this_size; - trailer = (struct stk_trailer *) trailer->link; - } - while (trailer != 0); - - /* We are done. Note that if you present a bogus address (one - not in any segment), you will get a different number back, formed - from subtracting the address of the first block. This is probably - not what you want. */ - - return (result); -} - -# else /* not CRAY2 */ -/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. - Determine the number of the cell within the stack, - given the address of the cell. The purpose of this - routine is to linearize, in some sense, stack addresses - for alloca. */ - -static long -i00afunc (long address) -{ - long stkl = 0; - - long size, pseg, this_segment, stack; - long result = 0; - - struct stack_segment_linkage *ssptr; - - /* Register B67 contains the address of the end of the - current stack segment. If you (as a subprogram) store - your registers on the stack and find that you are past - the contents of B67, you have overflowed the segment. - - B67 also points to the stack segment linkage control - area, which is what we are really interested in. */ - - stkl = CRAY_STACKSEG_END (); - ssptr = (struct stack_segment_linkage *) stkl; - - /* If one subtracts 'size' from the end of the segment, - one has the address of the first word of the segment. - - If this is not the first segment, 'pseg' will be - nonzero. */ - - pseg = ssptr->sspseg; - size = ssptr->sssize; - - this_segment = stkl - size; - - /* It is possible that calling this routine itself caused - a stack overflow. Discard stack segments which do not - contain the target address. */ - - while (!(this_segment <= address && address <= stkl)) - { -# ifdef DEBUG_I00AFUNC - fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); -# endif - if (pseg == 0) - break; - stkl = stkl - pseg; - ssptr = (struct stack_segment_linkage *) stkl; - size = ssptr->sssize; - pseg = ssptr->sspseg; - this_segment = stkl - size; - } - - result = address - this_segment; - - /* If you subtract pseg from the current end of the stack, - you get the address of the previous stack segment's end. - This seems a little convoluted to me, but I'll bet you save - a cycle somewhere. */ - - while (pseg != 0) - { -# ifdef DEBUG_I00AFUNC - fprintf (stderr, "%011o %011o\n", pseg, size); -# endif - stkl = stkl - pseg; - ssptr = (struct stack_segment_linkage *) stkl; - size = ssptr->sssize; - pseg = ssptr->sspseg; - result += size; - } - return (result); -} - -# endif /* not CRAY2 */ -# endif /* CRAY */ - -# endif /* no alloca */ -#endif /* not GCC 2 */ diff --git a/gl/alloca.in.h b/gl/alloca.in.h deleted file mode 100644 index aa45ff06e4..0000000000 --- a/gl/alloca.in.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Memory allocation on the stack. - - Copyright (C) 1995, 1999, 2001-2004, 2006-2016 Free Software Foundation, - Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published - by the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this program; if not, see - . - */ - -/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H - means there is a real alloca function. */ -#ifndef _GL_ALLOCA_H -#define _GL_ALLOCA_H - -/* alloca (N) returns a pointer to N bytes of memory - allocated on the stack, which will last until the function returns. - Use of alloca should be avoided: - - inside arguments of function calls - undefined behaviour, - - in inline functions - the allocation may actually last until the - calling function returns, - - for huge N (say, N >= 65536) - you never know how large (or small) - the stack is, and when the stack cannot fulfill the memory allocation - request, the program just crashes. - */ - -#ifndef alloca -# ifdef __GNUC__ -# define alloca __builtin_alloca -# elif defined _AIX -# define alloca __alloca -# elif defined _MSC_VER -# include -# define alloca _alloca -# elif defined __DECC && defined __VMS -# define alloca __ALLOCA -# elif defined __TANDEM && defined _TNS_E_TARGET -# ifdef __cplusplus -extern "C" -# endif -void *_alloca (unsigned short); -# pragma intrinsic (_alloca) -# define alloca _alloca -# elif defined __MVS__ -# include -# else -# include -# ifdef __cplusplus -extern "C" -# endif -void *alloca (size_t); -# endif -#endif - -#endif /* _GL_ALLOCA_H */ diff --git a/gl/asnprintf.c b/gl/asnprintf.c deleted file mode 100644 index d89877cd8e..0000000000 --- a/gl/asnprintf.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 1999, 2002, 2006, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#include "vasnprintf.h" - -#include - -char * -asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) -{ - va_list args; - char *result; - - va_start (args, format); - result = vasnprintf (resultbuf, lengthp, format, args); - va_end (args); - return result; -} diff --git a/gl/asprintf.c b/gl/asprintf.c deleted file mode 100644 index ee2b58f2d8..0000000000 --- a/gl/asprintf.c +++ /dev/null @@ -1,39 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 1999, 2002, 2006-2007, 2009-2016 Free Software Foundation, - Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#ifdef IN_LIBASPRINTF -# include "vasprintf.h" -#else -# include -#endif - -#include - -int -asprintf (char **resultp, const char *format, ...) -{ - va_list args; - int result; - - va_start (args, format); - result = vasprintf (resultp, format, args); - va_end (args); - return result; -} diff --git a/gl/byteswap.in.h b/gl/byteswap.in.h deleted file mode 100644 index 31c1c6ea8f..0000000000 --- a/gl/byteswap.in.h +++ /dev/null @@ -1,44 +0,0 @@ -/* byteswap.h - Byte swapping - Copyright (C) 2005, 2007, 2009-2016 Free Software Foundation, Inc. - Written by Oskar Liljeblad , 2005. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _GL_BYTESWAP_H -#define _GL_BYTESWAP_H - -/* Given an unsigned 16-bit argument X, return the value corresponding to - X with reversed byte order. */ -#define bswap_16(x) ((((x) & 0x00FF) << 8) | \ - (((x) & 0xFF00) >> 8)) - -/* Given an unsigned 32-bit argument X, return the value corresponding to - X with reversed byte order. */ -#define bswap_32(x) ((((x) & 0x000000FF) << 24) | \ - (((x) & 0x0000FF00) << 8) | \ - (((x) & 0x00FF0000) >> 8) | \ - (((x) & 0xFF000000) >> 24)) - -/* Given an unsigned 64-bit argument X, return the value corresponding to - X with reversed byte order. */ -#define bswap_64(x) ((((x) & 0x00000000000000FFULL) << 56) | \ - (((x) & 0x000000000000FF00ULL) << 40) | \ - (((x) & 0x0000000000FF0000ULL) << 24) | \ - (((x) & 0x00000000FF000000ULL) << 8) | \ - (((x) & 0x000000FF00000000ULL) >> 8) | \ - (((x) & 0x0000FF0000000000ULL) >> 24) | \ - (((x) & 0x00FF000000000000ULL) >> 40) | \ - (((x) & 0xFF00000000000000ULL) >> 56)) - -#endif /* _GL_BYTESWAP_H */ diff --git a/gl/c-ctype.c b/gl/c-ctype.c deleted file mode 100644 index 5d9d4d87a6..0000000000 --- a/gl/c-ctype.c +++ /dev/null @@ -1,3 +0,0 @@ -#include -#define C_CTYPE_INLINE _GL_EXTERN_INLINE -#include "c-ctype.h" diff --git a/gl/c-ctype.h b/gl/c-ctype.h deleted file mode 100644 index 80d704135d..0000000000 --- a/gl/c-ctype.h +++ /dev/null @@ -1,366 +0,0 @@ -/* Character handling in C locale. - - These functions work like the corresponding functions in , - except that they have the C (POSIX) locale hardwired, whereas the - functions' behaviour depends on the current locale set via - setlocale. - - Copyright (C) 2000-2003, 2006, 2008-2016 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this program; if not, see . */ - -#ifndef C_CTYPE_H -#define C_CTYPE_H - -#include - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif -_GL_INLINE_HEADER_BEGIN -#ifndef C_CTYPE_INLINE -# define C_CTYPE_INLINE _GL_INLINE -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -/* The functions defined in this file assume the "C" locale and a character - set without diacritics (ASCII-US or EBCDIC-US or something like that). - Even if the "C" locale on a particular system is an extension of the ASCII - character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it - is ISO-8859-1), the functions in this file recognize only the ASCII - characters. */ - - -#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ - && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ - && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ - && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ - && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ - && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ - && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ - && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ - && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ - && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ - && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ - && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ - && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ - && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ - && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ - && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ - && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ - && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ - && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ - && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ - && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ - && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ - && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) -/* The character set is ASCII or one of its variants or extensions, not EBCDIC. - Testing the value of '\n' and '\r' is not relevant. */ -# define C_CTYPE_ASCII 1 -#elif ! (' ' == '\x40' && '0' == '\xf0' \ - && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ - && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') -# error "Only ASCII and EBCDIC are supported" -#endif - -#if 'A' < 0 -# error "EBCDIC and char is signed -- not supported" -#endif - -/* Cases for control characters. */ - -#define _C_CTYPE_CNTRL \ - case '\a': case '\b': case '\f': case '\n': \ - case '\r': case '\t': case '\v': \ - _C_CTYPE_OTHER_CNTRL - -/* ASCII control characters other than those with \-letter escapes. */ - -#if C_CTYPE_ASCII -# define _C_CTYPE_OTHER_CNTRL \ - case '\x00': case '\x01': case '\x02': case '\x03': \ - case '\x04': case '\x05': case '\x06': case '\x0e': \ - case '\x0f': case '\x10': case '\x11': case '\x12': \ - case '\x13': case '\x14': case '\x15': case '\x16': \ - case '\x17': case '\x18': case '\x19': case '\x1a': \ - case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ - case '\x1f': case '\x7f' -#else - /* Use EBCDIC code page 1047's assignments for ASCII control chars; - assume all EBCDIC code pages agree about these assignments. */ -# define _C_CTYPE_OTHER_CNTRL \ - case '\x00': case '\x01': case '\x02': case '\x03': \ - case '\x07': case '\x0e': case '\x0f': case '\x10': \ - case '\x11': case '\x12': case '\x13': case '\x18': \ - case '\x19': case '\x1c': case '\x1d': case '\x1e': \ - case '\x1f': case '\x26': case '\x27': case '\x2d': \ - case '\x2e': case '\x32': case '\x37': case '\x3c': \ - case '\x3d': case '\x3f' -#endif - -/* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ - -#define _C_CTYPE_LOWER_A_THRU_F_N(n) \ - case 'a' + (n): case 'b' + (n): case 'c' + (n): case 'd' + (n): \ - case 'e' + (n): case 'f' + (n) -#define _C_CTYPE_LOWER_N(n) \ - _C_CTYPE_LOWER_A_THRU_F_N(n): \ - case 'g' + (n): case 'h' + (n): case 'i' + (n): case 'j' + (n): \ - case 'k' + (n): case 'l' + (n): case 'm' + (n): case 'n' + (n): \ - case 'o' + (n): case 'p' + (n): case 'q' + (n): case 'r' + (n): \ - case 's' + (n): case 't' + (n): case 'u' + (n): case 'v' + (n): \ - case 'w' + (n): case 'x' + (n): case 'y' + (n): case 'z' + (n) - -/* Cases for hex letters, digits, lower, punct, and upper. */ - -#define _C_CTYPE_A_THRU_F \ - _C_CTYPE_LOWER_A_THRU_F_N (0): \ - _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') -#define _C_CTYPE_DIGIT \ - case '0': case '1': case '2': case '3': \ - case '4': case '5': case '6': case '7': \ - case '8': case '9' -#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) -#define _C_CTYPE_PUNCT \ - case '!': case '"': case '#': case '$': \ - case '%': case '&': case '\'': case '(': \ - case ')': case '*': case '+': case ',': \ - case '-': case '.': case '/': case ':': \ - case ';': case '<': case '=': case '>': \ - case '?': case '@': case '[': case '\\': \ - case ']': case '^': case '_': case '`': \ - case '{': case '|': case '}': case '~' -#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') - - -/* Function definitions. */ - -/* Unlike the functions in , which require an argument in the range - of the 'unsigned char' type, the functions here operate on values that are - in the 'unsigned char' range or in the 'char' range. In other words, - when you have a 'char' value, you need to cast it before using it as - argument to a function: - - const char *s = ...; - if (isalpha ((unsigned char) *s)) ... - - but you don't need to cast it for the functions defined in this file: - - const char *s = ...; - if (c_isalpha (*s)) ... - */ - -C_CTYPE_INLINE bool -c_isalnum (int c) -{ - switch (c) - { - _C_CTYPE_DIGIT: - _C_CTYPE_LOWER: - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isalpha (int c) -{ - switch (c) - { - _C_CTYPE_LOWER: - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -/* The function isascii is not locale dependent. - Its use in EBCDIC is questionable. */ -C_CTYPE_INLINE bool -c_isascii (int c) -{ - switch (c) - { - case ' ': - _C_CTYPE_CNTRL: - _C_CTYPE_DIGIT: - _C_CTYPE_LOWER: - _C_CTYPE_PUNCT: - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isblank (int c) -{ - return c == ' ' || c == '\t'; -} - -C_CTYPE_INLINE bool -c_iscntrl (int c) -{ - switch (c) - { - _C_CTYPE_CNTRL: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isdigit (int c) -{ - switch (c) - { - _C_CTYPE_DIGIT: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isgraph (int c) -{ - switch (c) - { - _C_CTYPE_DIGIT: - _C_CTYPE_LOWER: - _C_CTYPE_PUNCT: - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_islower (int c) -{ - switch (c) - { - _C_CTYPE_LOWER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isprint (int c) -{ - switch (c) - { - case ' ': - _C_CTYPE_DIGIT: - _C_CTYPE_LOWER: - _C_CTYPE_PUNCT: - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_ispunct (int c) -{ - switch (c) - { - _C_CTYPE_PUNCT: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isspace (int c) -{ - switch (c) - { - case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isupper (int c) -{ - switch (c) - { - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isxdigit (int c) -{ - switch (c) - { - _C_CTYPE_DIGIT: - _C_CTYPE_A_THRU_F: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE int -c_tolower (int c) -{ - switch (c) - { - _C_CTYPE_UPPER: - return c - 'A' + 'a'; - default: - return c; - } -} - -C_CTYPE_INLINE int -c_toupper (int c) -{ - switch (c) - { - _C_CTYPE_LOWER: - return c - 'a' + 'A'; - default: - return c; - } -} - -#ifdef __cplusplus -} -#endif - -_GL_INLINE_HEADER_END - -#endif /* C_CTYPE_H */ diff --git a/gl/errno.in.h b/gl/errno.in.h deleted file mode 100644 index f1fcf1fb3e..0000000000 --- a/gl/errno.in.h +++ /dev/null @@ -1,279 +0,0 @@ -/* A POSIX-like . - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_ERRNO_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_ERRNO_H@ - -#ifndef _@GUARD_PREFIX@_ERRNO_H -#define _@GUARD_PREFIX@_ERRNO_H - - -/* On native Windows platforms, many macros are not defined. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - -/* These are the same values as defined by MSVC 10, for interoperability. */ - -# ifndef ENOMSG -# define ENOMSG 122 -# define GNULIB_defined_ENOMSG 1 -# endif - -# ifndef EIDRM -# define EIDRM 111 -# define GNULIB_defined_EIDRM 1 -# endif - -# ifndef ENOLINK -# define ENOLINK 121 -# define GNULIB_defined_ENOLINK 1 -# endif - -# ifndef EPROTO -# define EPROTO 134 -# define GNULIB_defined_EPROTO 1 -# endif - -# ifndef EBADMSG -# define EBADMSG 104 -# define GNULIB_defined_EBADMSG 1 -# endif - -# ifndef EOVERFLOW -# define EOVERFLOW 132 -# define GNULIB_defined_EOVERFLOW 1 -# endif - -# ifndef ENOTSUP -# define ENOTSUP 129 -# define GNULIB_defined_ENOTSUP 1 -# endif - -# ifndef ENETRESET -# define ENETRESET 117 -# define GNULIB_defined_ENETRESET 1 -# endif - -# ifndef ECONNABORTED -# define ECONNABORTED 106 -# define GNULIB_defined_ECONNABORTED 1 -# endif - -# ifndef ECANCELED -# define ECANCELED 105 -# define GNULIB_defined_ECANCELED 1 -# endif - -# ifndef EOWNERDEAD -# define EOWNERDEAD 133 -# define GNULIB_defined_EOWNERDEAD 1 -# endif - -# ifndef ENOTRECOVERABLE -# define ENOTRECOVERABLE 127 -# define GNULIB_defined_ENOTRECOVERABLE 1 -# endif - -# ifndef EINPROGRESS -# define EINPROGRESS 112 -# define EALREADY 103 -# define ENOTSOCK 128 -# define EDESTADDRREQ 109 -# define EMSGSIZE 115 -# define EPROTOTYPE 136 -# define ENOPROTOOPT 123 -# define EPROTONOSUPPORT 135 -# define EOPNOTSUPP 130 -# define EAFNOSUPPORT 102 -# define EADDRINUSE 100 -# define EADDRNOTAVAIL 101 -# define ENETDOWN 116 -# define ENETUNREACH 118 -# define ECONNRESET 108 -# define ENOBUFS 119 -# define EISCONN 113 -# define ENOTCONN 126 -# define ETIMEDOUT 138 -# define ECONNREFUSED 107 -# define ELOOP 114 -# define EHOSTUNREACH 110 -# define EWOULDBLOCK 140 -# define GNULIB_defined_ESOCK 1 -# endif - -# ifndef ETXTBSY -# define ETXTBSY 139 -# define ENODATA 120 /* not required by POSIX */ -# define ENOSR 124 /* not required by POSIX */ -# define ENOSTR 125 /* not required by POSIX */ -# define ETIME 137 /* not required by POSIX */ -# define EOTHER 131 /* not required by POSIX */ -# define GNULIB_defined_ESTREAMS 1 -# endif - -/* These are intentionally the same values as the WSA* error numbers, defined - in . */ -# define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ -# define EPFNOSUPPORT 10046 /* not required by POSIX */ -# define ESHUTDOWN 10058 /* not required by POSIX */ -# define ETOOMANYREFS 10059 /* not required by POSIX */ -# define EHOSTDOWN 10064 /* not required by POSIX */ -# define EPROCLIM 10067 /* not required by POSIX */ -# define EUSERS 10068 /* not required by POSIX */ -# define EDQUOT 10069 -# define ESTALE 10070 -# define EREMOTE 10071 /* not required by POSIX */ -# define GNULIB_defined_EWINSOCK 1 - -# endif - - -/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros - EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ -# if @EMULTIHOP_HIDDEN@ -# define EMULTIHOP @EMULTIHOP_VALUE@ -# define GNULIB_defined_EMULTIHOP 1 -# endif -# if @ENOLINK_HIDDEN@ -# define ENOLINK @ENOLINK_VALUE@ -# define GNULIB_defined_ENOLINK 1 -# endif -# if @EOVERFLOW_HIDDEN@ -# define EOVERFLOW @EOVERFLOW_VALUE@ -# define GNULIB_defined_EOVERFLOW 1 -# endif - - -/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, - EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. - Likewise, on NonStop Kernel, EDQUOT is not defined. - Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, - HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. - - Note: When one of these systems defines some of these macros some day, - binaries will have to be recompiled so that they recognizes the new - errno values from the system. */ - -# ifndef ENOMSG -# define ENOMSG 2000 -# define GNULIB_defined_ENOMSG 1 -# endif - -# ifndef EIDRM -# define EIDRM 2001 -# define GNULIB_defined_EIDRM 1 -# endif - -# ifndef ENOLINK -# define ENOLINK 2002 -# define GNULIB_defined_ENOLINK 1 -# endif - -# ifndef EPROTO -# define EPROTO 2003 -# define GNULIB_defined_EPROTO 1 -# endif - -# ifndef EMULTIHOP -# define EMULTIHOP 2004 -# define GNULIB_defined_EMULTIHOP 1 -# endif - -# ifndef EBADMSG -# define EBADMSG 2005 -# define GNULIB_defined_EBADMSG 1 -# endif - -# ifndef EOVERFLOW -# define EOVERFLOW 2006 -# define GNULIB_defined_EOVERFLOW 1 -# endif - -# ifndef ENOTSUP -# define ENOTSUP 2007 -# define GNULIB_defined_ENOTSUP 1 -# endif - -# ifndef ENETRESET -# define ENETRESET 2011 -# define GNULIB_defined_ENETRESET 1 -# endif - -# ifndef ECONNABORTED -# define ECONNABORTED 2012 -# define GNULIB_defined_ECONNABORTED 1 -# endif - -# ifndef ESTALE -# define ESTALE 2009 -# define GNULIB_defined_ESTALE 1 -# endif - -# ifndef EDQUOT -# define EDQUOT 2010 -# define GNULIB_defined_EDQUOT 1 -# endif - -# ifndef ECANCELED -# define ECANCELED 2008 -# define GNULIB_defined_ECANCELED 1 -# endif - -/* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not - defined. */ - -# ifndef EOWNERDEAD -# if defined __sun - /* Use the same values as defined for Solaris >= 8, for - interoperability. */ -# define EOWNERDEAD 58 -# define ENOTRECOVERABLE 59 -# elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - /* We have a conflict here: pthreads-win32 defines these values - differently than MSVC 10. It's hairy to decide which one to use. */ -# if defined __MINGW32__ && !defined USE_WINDOWS_THREADS - /* Use the same values as defined by pthreads-win32, for - interoperability. */ -# define EOWNERDEAD 43 -# define ENOTRECOVERABLE 44 -# else - /* Use the same values as defined by MSVC 10, for - interoperability. */ -# define EOWNERDEAD 133 -# define ENOTRECOVERABLE 127 -# endif -# else -# define EOWNERDEAD 2013 -# define ENOTRECOVERABLE 2014 -# endif -# define GNULIB_defined_EOWNERDEAD 1 -# define GNULIB_defined_ENOTRECOVERABLE 1 -# endif - -# ifndef EILSEQ -# define EILSEQ 2015 -# define GNULIB_defined_EILSEQ 1 -# endif - -#endif /* _@GUARD_PREFIX@_ERRNO_H */ -#endif /* _@GUARD_PREFIX@_ERRNO_H */ diff --git a/gl/float+.h b/gl/float+.h deleted file mode 100644 index 49a9dfc0f6..0000000000 --- a/gl/float+.h +++ /dev/null @@ -1,147 +0,0 @@ -/* Supplemental information about the floating-point formats. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2007. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef _FLOATPLUS_H -#define _FLOATPLUS_H - -#include -#include - -/* Number of bits in the mantissa of a floating-point number, including the - "hidden bit". */ -#if FLT_RADIX == 2 -# define FLT_MANT_BIT FLT_MANT_DIG -# define DBL_MANT_BIT DBL_MANT_DIG -# define LDBL_MANT_BIT LDBL_MANT_DIG -#elif FLT_RADIX == 4 -# define FLT_MANT_BIT (FLT_MANT_DIG * 2) -# define DBL_MANT_BIT (DBL_MANT_DIG * 2) -# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) -#elif FLT_RADIX == 16 -# define FLT_MANT_BIT (FLT_MANT_DIG * 4) -# define DBL_MANT_BIT (DBL_MANT_DIG * 4) -# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) -#endif - -/* Bit mask that can be used to mask the exponent, as an unsigned number. */ -#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) -#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) -#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) - -/* Number of bits used for the exponent of a floating-point number, including - the exponent's sign. */ -#define FLT_EXP_BIT \ - (FLT_EXP_MASK < 0x100 ? 8 : \ - FLT_EXP_MASK < 0x200 ? 9 : \ - FLT_EXP_MASK < 0x400 ? 10 : \ - FLT_EXP_MASK < 0x800 ? 11 : \ - FLT_EXP_MASK < 0x1000 ? 12 : \ - FLT_EXP_MASK < 0x2000 ? 13 : \ - FLT_EXP_MASK < 0x4000 ? 14 : \ - FLT_EXP_MASK < 0x8000 ? 15 : \ - FLT_EXP_MASK < 0x10000 ? 16 : \ - FLT_EXP_MASK < 0x20000 ? 17 : \ - FLT_EXP_MASK < 0x40000 ? 18 : \ - FLT_EXP_MASK < 0x80000 ? 19 : \ - FLT_EXP_MASK < 0x100000 ? 20 : \ - FLT_EXP_MASK < 0x200000 ? 21 : \ - FLT_EXP_MASK < 0x400000 ? 22 : \ - FLT_EXP_MASK < 0x800000 ? 23 : \ - FLT_EXP_MASK < 0x1000000 ? 24 : \ - FLT_EXP_MASK < 0x2000000 ? 25 : \ - FLT_EXP_MASK < 0x4000000 ? 26 : \ - FLT_EXP_MASK < 0x8000000 ? 27 : \ - FLT_EXP_MASK < 0x10000000 ? 28 : \ - FLT_EXP_MASK < 0x20000000 ? 29 : \ - FLT_EXP_MASK < 0x40000000 ? 30 : \ - FLT_EXP_MASK <= 0x7fffffff ? 31 : \ - 32) -#define DBL_EXP_BIT \ - (DBL_EXP_MASK < 0x100 ? 8 : \ - DBL_EXP_MASK < 0x200 ? 9 : \ - DBL_EXP_MASK < 0x400 ? 10 : \ - DBL_EXP_MASK < 0x800 ? 11 : \ - DBL_EXP_MASK < 0x1000 ? 12 : \ - DBL_EXP_MASK < 0x2000 ? 13 : \ - DBL_EXP_MASK < 0x4000 ? 14 : \ - DBL_EXP_MASK < 0x8000 ? 15 : \ - DBL_EXP_MASK < 0x10000 ? 16 : \ - DBL_EXP_MASK < 0x20000 ? 17 : \ - DBL_EXP_MASK < 0x40000 ? 18 : \ - DBL_EXP_MASK < 0x80000 ? 19 : \ - DBL_EXP_MASK < 0x100000 ? 20 : \ - DBL_EXP_MASK < 0x200000 ? 21 : \ - DBL_EXP_MASK < 0x400000 ? 22 : \ - DBL_EXP_MASK < 0x800000 ? 23 : \ - DBL_EXP_MASK < 0x1000000 ? 24 : \ - DBL_EXP_MASK < 0x2000000 ? 25 : \ - DBL_EXP_MASK < 0x4000000 ? 26 : \ - DBL_EXP_MASK < 0x8000000 ? 27 : \ - DBL_EXP_MASK < 0x10000000 ? 28 : \ - DBL_EXP_MASK < 0x20000000 ? 29 : \ - DBL_EXP_MASK < 0x40000000 ? 30 : \ - DBL_EXP_MASK <= 0x7fffffff ? 31 : \ - 32) -#define LDBL_EXP_BIT \ - (LDBL_EXP_MASK < 0x100 ? 8 : \ - LDBL_EXP_MASK < 0x200 ? 9 : \ - LDBL_EXP_MASK < 0x400 ? 10 : \ - LDBL_EXP_MASK < 0x800 ? 11 : \ - LDBL_EXP_MASK < 0x1000 ? 12 : \ - LDBL_EXP_MASK < 0x2000 ? 13 : \ - LDBL_EXP_MASK < 0x4000 ? 14 : \ - LDBL_EXP_MASK < 0x8000 ? 15 : \ - LDBL_EXP_MASK < 0x10000 ? 16 : \ - LDBL_EXP_MASK < 0x20000 ? 17 : \ - LDBL_EXP_MASK < 0x40000 ? 18 : \ - LDBL_EXP_MASK < 0x80000 ? 19 : \ - LDBL_EXP_MASK < 0x100000 ? 20 : \ - LDBL_EXP_MASK < 0x200000 ? 21 : \ - LDBL_EXP_MASK < 0x400000 ? 22 : \ - LDBL_EXP_MASK < 0x800000 ? 23 : \ - LDBL_EXP_MASK < 0x1000000 ? 24 : \ - LDBL_EXP_MASK < 0x2000000 ? 25 : \ - LDBL_EXP_MASK < 0x4000000 ? 26 : \ - LDBL_EXP_MASK < 0x8000000 ? 27 : \ - LDBL_EXP_MASK < 0x10000000 ? 28 : \ - LDBL_EXP_MASK < 0x20000000 ? 29 : \ - LDBL_EXP_MASK < 0x40000000 ? 30 : \ - LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ - 32) - -/* Number of bits used for a floating-point number: the mantissa (not - counting the "hidden bit", since it may or may not be explicit), the - exponent, and the sign. */ -#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) -#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) -#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) - -/* Number of bytes used for a floating-point number. - This can be smaller than the 'sizeof'. For example, on i386 systems, - 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence - LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but - sizeof (long double) = 12 or = 16. */ -#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) -#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) -#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) - -/* Verify that SIZEOF_FLT <= sizeof (float) etc. */ -typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; -typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; -typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; - -#endif /* _FLOATPLUS_H */ diff --git a/gl/float.c b/gl/float.c deleted file mode 100644 index a2c7fe6af0..0000000000 --- a/gl/float.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Auxiliary definitions for . - Copyright (C) 2011-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2011. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ -const union gl_long_double_union gl_LDBL_MAX = - { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; -#elif defined __i386__ -const union gl_long_double_union gl_LDBL_MAX = - { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } }; -#else -/* This declaration is solely to ensure that after preprocessing - this file is never empty. */ -typedef int dummy; -#endif diff --git a/gl/float.in.h b/gl/float.in.h deleted file mode 100644 index c80126116b..0000000000 --- a/gl/float.in.h +++ /dev/null @@ -1,188 +0,0 @@ -/* A correct . - - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _@GUARD_PREFIX@_FLOAT_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_FLOAT_H@ - -#ifndef _@GUARD_PREFIX@_FLOAT_H -#define _@GUARD_PREFIX@_FLOAT_H - -/* 'long double' properties. */ - -#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) -/* Number of mantissa units, in base FLT_RADIX. */ -# undef LDBL_MANT_DIG -# define LDBL_MANT_DIG 64 -/* Number of decimal digits that is sufficient for representing a number. */ -# undef LDBL_DIG -# define LDBL_DIG 18 -/* x-1 where x is the smallest representable number > 1. */ -# undef LDBL_EPSILON -# define LDBL_EPSILON 1.0842021724855044340E-19L -/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP (-16381) -/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ -# undef LDBL_MAX_EXP -# define LDBL_MAX_EXP 16384 -/* Minimum positive normalized number. */ -# undef LDBL_MIN -# define LDBL_MIN 3.3621031431120935063E-4932L -/* Maximum representable finite number. */ -# undef LDBL_MAX -# define LDBL_MAX 1.1897314953572317650E+4932L -/* Minimum e such that 10^e is in the range of normalized numbers. */ -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP (-4931) -/* Maximum e such that 10^e is in the range of representable finite numbers. */ -# undef LDBL_MAX_10_EXP -# define LDBL_MAX_10_EXP 4932 -#endif - -/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of - precision in the compiler but 64 bits of precision at runtime. See - . */ -#if defined __i386__ && defined __FreeBSD__ -/* Number of mantissa units, in base FLT_RADIX. */ -# undef LDBL_MANT_DIG -# define LDBL_MANT_DIG 64 -/* Number of decimal digits that is sufficient for representing a number. */ -# undef LDBL_DIG -# define LDBL_DIG 18 -/* x-1 where x is the smallest representable number > 1. */ -# undef LDBL_EPSILON -# define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */ -/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP (-16381) -/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ -# undef LDBL_MAX_EXP -# define LDBL_MAX_EXP 16384 -/* Minimum positive normalized number. */ -# undef LDBL_MIN -# define LDBL_MIN 3.3621031431120935E-4932L /* = 0x1p-16382L */ -/* Maximum representable finite number. */ -# undef LDBL_MAX -/* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. - But the largest literal that GCC allows us to write is - 0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }. - So, define it like this through a reference to an external variable - - const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }; - extern const long double LDBL_MAX; - - Unfortunately, this is not a constant expression. */ -union gl_long_double_union - { - struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; - long double ld; - }; -extern const union gl_long_double_union gl_LDBL_MAX; -# define LDBL_MAX (gl_LDBL_MAX.ld) -/* Minimum e such that 10^e is in the range of normalized numbers. */ -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP (-4931) -/* Maximum e such that 10^e is in the range of representable finite numbers. */ -# undef LDBL_MAX_10_EXP -# define LDBL_MAX_10_EXP 4932 -#endif - -/* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are - wrong. - On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong. */ -#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP DBL_MIN_EXP -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP DBL_MIN_10_EXP -# undef LDBL_MIN -# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ -#endif -#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ -# undef LDBL_MAX -/* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }. - It is not easy to define: - #define LDBL_MAX 1.79769313486231580793728971405302307166e308L - is too small, whereas - #define LDBL_MAX 1.79769313486231580793728971405302307167e308L - is too large. Apparently a bug in GCC decimal-to-binary conversion. - Also, I can't get values larger than - #define LDBL63 ((long double) (1ULL << 63)) - #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) - #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) - #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) - #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL) - which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }. - So, define it like this through a reference to an external variable - - const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }; - extern const long double LDBL_MAX; - - or through a pointer cast - - #define LDBL_MAX \ - (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }) - - Unfortunately, this is not a constant expression, and the latter expression - does not work well when GCC is optimizing.. */ -union gl_long_double_union - { - struct { double hi; double lo; } dd; - long double ld; - }; -extern const union gl_long_double_union gl_LDBL_MAX; -# define LDBL_MAX (gl_LDBL_MAX.ld) -#endif - -/* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong. - On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON - are wrong. */ -#if defined __sgi && (LDBL_MANT_DIG >= 106) -# undef LDBL_MANT_DIG -# define LDBL_MANT_DIG 106 -# if defined __GNUC__ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP DBL_MIN_EXP -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP DBL_MIN_10_EXP -# undef LDBL_MIN -# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ -# undef LDBL_EPSILON -# define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */ -# endif -#endif - -#if @REPLACE_ITOLD@ -/* Pull in a function that fixes the 'int' to 'long double' conversion - of glibc 2.7. */ -extern -# ifdef __cplusplus -"C" -# endif -void _Qp_itoq (long double *, int); -static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq; -#endif - -#endif /* _@GUARD_PREFIX@_FLOAT_H */ -#endif /* _@GUARD_PREFIX@_FLOAT_H */ diff --git a/gl/fstat.c b/gl/fstat.c deleted file mode 100644 index b2104d3bdd..0000000000 --- a/gl/fstat.c +++ /dev/null @@ -1,88 +0,0 @@ -/* fstat() replacement. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* If the user's config.h happens to include , let it include only - the system's here, so that orig_fstat doesn't recurse to - rpl_fstat. */ -#define __need_system_sys_stat_h -#include - -/* Get the original definition of fstat. It might be defined as a macro. */ -#include -#include -#if _GL_WINDOWS_64_BIT_ST_SIZE -# undef stat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */ -# define stat _stati64 -# undef fstat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */ -# define fstat _fstati64 -#endif -#undef __need_system_sys_stat_h - -static int -orig_fstat (int fd, struct stat *buf) -{ - return fstat (fd, buf); -} - -/* Specification. */ -/* Write "sys/stat.h" here, not , otherwise OSF/1 5.1 DTK cc - eliminates this include because of the preliminary #include - above. */ -#include "sys/stat.h" - -#include -#include - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER -# include "msvc-inval.h" -#endif - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER -static int -fstat_nothrow (int fd, struct stat *buf) -{ - int result; - - TRY_MSVC_INVAL - { - result = orig_fstat (fd, buf); - } - CATCH_MSVC_INVAL - { - result = -1; - errno = EBADF; - } - DONE_MSVC_INVAL; - - return result; -} -#else -# define fstat_nothrow orig_fstat -#endif - -int -rpl_fstat (int fd, struct stat *buf) -{ -#if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY - /* Handle the case when rpl_open() used a dummy file descriptor to work - around an open() that can't normally visit directories. */ - const char *name = _gl_directory_name (fd); - if (name != NULL) - return stat (name, buf); -#endif - - return fstat_nothrow (fd, buf); -} diff --git a/gl/ftell.c b/gl/ftell.c deleted file mode 100644 index 0c77bd2ac3..0000000000 --- a/gl/ftell.c +++ /dev/null @@ -1,37 +0,0 @@ -/* An ftell() function that works around platform bugs. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -#include -#include - -long -ftell (FILE *fp) -{ - /* Use the replacement ftello function with all its workarounds. */ - off_t offset = ftello (fp); - if (LONG_MIN <= offset && offset <= LONG_MAX) - return /* (long) */ offset; - else - { - errno = EOVERFLOW; - return -1; - } -} diff --git a/gl/ftello.c b/gl/ftello.c deleted file mode 100644 index d1b00d1247..0000000000 --- a/gl/ftello.c +++ /dev/null @@ -1,85 +0,0 @@ -/* An ftello() function that works around platform bugs. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -/* Get lseek. */ -#include - -#include "stdio-impl.h" - -off_t -ftello (FILE *fp) -#undef ftello -#if !HAVE_FTELLO -# undef ftell -# define ftello ftell -#endif -#if _GL_WINDOWS_64_BIT_OFF_T -# undef ftello -# if HAVE__FTELLI64 /* msvc, mingw64 */ -# define ftello _ftelli64 -# else /* mingw */ -# define ftello ftello64 -# endif -#endif -{ -#if LSEEK_PIPE_BROKEN - /* mingw gives bogus answers rather than failure on non-seekable files. */ - if (lseek (fileno (fp), 0, SEEK_CUR) == -1) - return -1; -#endif - -#if FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE /* Solaris */ - /* The Solaris stdio leaves the _IOREAD flag set after reading from a file - reaches EOF and the program then starts writing to the file. ftello - gets confused by this. */ - if (fp_->_flag & _IOWRT) - { - off_t pos; - - /* Call ftello nevertheless, for the side effects that it does on fp. */ - ftello (fp); - - /* Compute the file position ourselves. */ - pos = lseek (fileno (fp), (off_t) 0, SEEK_CUR); - if (pos >= 0) - { - if ((fp_->_flag & _IONBF) == 0 && fp_->_base != NULL) - pos += fp_->_ptr - fp_->_base; - } - return pos; - } -#endif - -#if defined __SL64 && defined __SCLE /* Cygwin */ - if ((fp->_flags & __SL64) == 0) - { - /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit - mode; but has an ftello that requires 64-bit mode. */ - FILE *tmp = fopen ("/dev/null", "r"); - if (!tmp) - return -1; - fp->_flags |= __SL64; - fp->_seek64 = tmp->_seek64; - fclose (tmp); - } -#endif - return ftello (fp); -} diff --git a/gl/getdelim.c b/gl/getdelim.c deleted file mode 100644 index 18167cb772..0000000000 --- a/gl/getdelim.c +++ /dev/null @@ -1,147 +0,0 @@ -/* getdelim.c --- Implementation of replacement getdelim function. - Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1, or (at - your option) any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* Ported from glibc by Simon Josefsson. */ - -/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc - optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below. */ -#define _GL_ARG_NONNULL(params) - -#include - -#include - -#include -#include -#include -#include - -#ifndef SSIZE_MAX -# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) -#endif - -#if USE_UNLOCKED_IO -# include "unlocked-io.h" -# define getc_maybe_unlocked(fp) getc(fp) -#elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED -# undef flockfile -# undef funlockfile -# define flockfile(x) ((void) 0) -# define funlockfile(x) ((void) 0) -# define getc_maybe_unlocked(fp) getc(fp) -#else -# define getc_maybe_unlocked(fp) getc_unlocked(fp) -#endif - -static void -alloc_failed (void) -{ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - /* Avoid errno problem without using the realloc module; see: - http://lists.gnu.org/archive/html/bug-gnulib/2016-08/msg00025.html */ - errno = ENOMEM; -#endif -} - -/* Read up to (and including) a DELIMITER from FP into *LINEPTR (and - NUL-terminate it). *LINEPTR is a pointer returned from malloc (or - NULL), pointing to *N characters of space. It is realloc'ed as - necessary. Returns the number of characters read (not including - the null terminator), or -1 on error or EOF. */ - -ssize_t -getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) -{ - ssize_t result; - size_t cur_len = 0; - - if (lineptr == NULL || n == NULL || fp == NULL) - { - errno = EINVAL; - return -1; - } - - flockfile (fp); - - if (*lineptr == NULL || *n == 0) - { - char *new_lineptr; - *n = 120; - new_lineptr = (char *) realloc (*lineptr, *n); - if (new_lineptr == NULL) - { - alloc_failed (); - result = -1; - goto unlock_return; - } - *lineptr = new_lineptr; - } - - for (;;) - { - int i; - - i = getc_maybe_unlocked (fp); - if (i == EOF) - { - result = -1; - break; - } - - /* Make enough space for len+1 (for final NUL) bytes. */ - if (cur_len + 1 >= *n) - { - size_t needed_max = - SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; - size_t needed = 2 * *n + 1; /* Be generous. */ - char *new_lineptr; - - if (needed_max < needed) - needed = needed_max; - if (cur_len + 1 >= needed) - { - result = -1; - errno = EOVERFLOW; - goto unlock_return; - } - - new_lineptr = (char *) realloc (*lineptr, needed); - if (new_lineptr == NULL) - { - alloc_failed (); - result = -1; - goto unlock_return; - } - - *lineptr = new_lineptr; - *n = needed; - } - - (*lineptr)[cur_len] = i; - cur_len++; - - if (i == delimiter) - break; - } - (*lineptr)[cur_len] = '\0'; - result = cur_len ? cur_len : result; - - unlock_return: - funlockfile (fp); /* doesn't set errno */ - - return result; -} diff --git a/gl/getline.c b/gl/getline.c deleted file mode 100644 index 08b8f0796a..0000000000 --- a/gl/getline.c +++ /dev/null @@ -1,27 +0,0 @@ -/* getline.c --- Implementation of replacement getline function. - Copyright (C) 2005-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1, or (at - your option) any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* Written by Simon Josefsson. */ - -#include - -#include - -ssize_t -getline (char **lineptr, size_t *n, FILE *stream) -{ - return getdelim (lineptr, n, '\n', stream); -} diff --git a/gl/gettext.h b/gl/gettext.h deleted file mode 100644 index 4aa138ea13..0000000000 --- a/gl/gettext.h +++ /dev/null @@ -1,292 +0,0 @@ -/* Convenience header for conditional use of GNU . - Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#ifndef _LIBGETTEXT_H -#define _LIBGETTEXT_H 1 - -/* NLS can be disabled through the configure --disable-nls option. */ -#if ENABLE_NLS - -/* Get declarations of GNU message catalog functions. */ -# include - -/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by - the gettext() and ngettext() macros. This is an alternative to calling - textdomain(), and is useful for libraries. */ -# ifdef DEFAULT_TEXT_DOMAIN -# undef gettext -# define gettext(Msgid) \ - dgettext (DEFAULT_TEXT_DOMAIN, Msgid) -# undef ngettext -# define ngettext(Msgid1, Msgid2, N) \ - dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) -# endif - -#else - -/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which - chokes if dcgettext is defined as a macro. So include it now, to make - later inclusions of a NOP. We don't include - as well because people using "gettext.h" will not include , - and also including would fail on SunOS 4, whereas - is OK. */ -#if defined(__sun) -# include -#endif - -/* Many header files from the libstdc++ coming with g++ 3.3 or newer include - , which chokes if dcgettext is defined as a macro. So include - it now, to make later inclusions of a NOP. */ -#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) -# include -# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H -# include -# endif -#endif - -/* Disabled NLS. - The casts to 'const char *' serve the purpose of producing warnings - for invalid uses of the value returned from these functions. - On pre-ANSI systems without 'const', the config.h file is supposed to - contain "#define const". */ -# undef gettext -# define gettext(Msgid) ((const char *) (Msgid)) -# undef dgettext -# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) -# undef dcgettext -# define dcgettext(Domainname, Msgid, Category) \ - ((void) (Category), dgettext (Domainname, Msgid)) -# undef ngettext -# define ngettext(Msgid1, Msgid2, N) \ - ((N) == 1 \ - ? ((void) (Msgid2), (const char *) (Msgid1)) \ - : ((void) (Msgid1), (const char *) (Msgid2))) -# undef dngettext -# define dngettext(Domainname, Msgid1, Msgid2, N) \ - ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) -# undef dcngettext -# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ - ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) -# undef textdomain -# define textdomain(Domainname) ((const char *) (Domainname)) -# undef bindtextdomain -# define bindtextdomain(Domainname, Dirname) \ - ((void) (Domainname), (const char *) (Dirname)) -# undef bind_textdomain_codeset -# define bind_textdomain_codeset(Domainname, Codeset) \ - ((void) (Domainname), (const char *) (Codeset)) - -#endif - -/* Prefer gnulib's setlocale override over libintl's setlocale override. */ -#ifdef GNULIB_defined_setlocale -# undef setlocale -# define setlocale rpl_setlocale -#endif - -/* A pseudo function call that serves as a marker for the automated - extraction of messages, but does not call gettext(). The run-time - translation is done at a different place in the code. - The argument, String, should be a literal string. Concatenated strings - and other string expressions won't work. - The macro's expansion is not parenthesized, so that it is suitable as - initializer for static 'char[]' or 'const char[]' variables. */ -#define gettext_noop(String) String - -/* The separator between msgctxt and msgid in a .mo file. */ -#define GETTEXT_CONTEXT_GLUE "\004" - -/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a - MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be - short and rarely need to change. - The letter 'p' stands for 'particular' or 'special'. */ -#ifdef DEFAULT_TEXT_DOMAIN -# define pgettext(Msgctxt, Msgid) \ - pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) -#else -# define pgettext(Msgctxt, Msgid) \ - pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) -#endif -#define dpgettext(Domainname, Msgctxt, Msgid) \ - pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) -#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ - pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) -#ifdef DEFAULT_TEXT_DOMAIN -# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ - npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) -#else -# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ - npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) -#endif -#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ - npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) -#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ - npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static const char * -pgettext_aux (const char *domain, - const char *msg_ctxt_id, const char *msgid, - int category) -{ - const char *translation = dcgettext (domain, msg_ctxt_id, category); - if (translation == msg_ctxt_id) - return msgid; - else - return translation; -} - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static const char * -npgettext_aux (const char *domain, - const char *msg_ctxt_id, const char *msgid, - const char *msgid_plural, unsigned long int n, - int category) -{ - const char *translation = - dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); - if (translation == msg_ctxt_id || translation == msgid_plural) - return (n == 1 ? msgid : msgid_plural); - else - return translation; -} - -/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID - can be arbitrary expressions. But for string literals these macros are - less efficient than those above. */ - -#include - -#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ - /* || __STDC_VERSION__ >= 199901L */ ) -# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 -#else -# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 -#endif - -#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS -#include -#endif - -#define pgettext_expr(Msgctxt, Msgid) \ - dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) -#define dpgettext_expr(Domainname, Msgctxt, Msgid) \ - dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static const char * -dcpgettext_expr (const char *domain, - const char *msgctxt, const char *msgid, - int category) -{ - size_t msgctxt_len = strlen (msgctxt) + 1; - size_t msgid_len = strlen (msgid) + 1; - const char *translation; -#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS - char msg_ctxt_id[msgctxt_len + msgid_len]; -#else - char buf[1024]; - char *msg_ctxt_id = - (msgctxt_len + msgid_len <= sizeof (buf) - ? buf - : (char *) malloc (msgctxt_len + msgid_len)); - if (msg_ctxt_id != NULL) -#endif - { - int found_translation; - memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); - msg_ctxt_id[msgctxt_len - 1] = '\004'; - memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); - translation = dcgettext (domain, msg_ctxt_id, category); - found_translation = (translation != msg_ctxt_id); -#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS - if (msg_ctxt_id != buf) - free (msg_ctxt_id); -#endif - if (found_translation) - return translation; - } - return msgid; -} - -#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ - dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) -#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ - dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static const char * -dcnpgettext_expr (const char *domain, - const char *msgctxt, const char *msgid, - const char *msgid_plural, unsigned long int n, - int category) -{ - size_t msgctxt_len = strlen (msgctxt) + 1; - size_t msgid_len = strlen (msgid) + 1; - const char *translation; -#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS - char msg_ctxt_id[msgctxt_len + msgid_len]; -#else - char buf[1024]; - char *msg_ctxt_id = - (msgctxt_len + msgid_len <= sizeof (buf) - ? buf - : (char *) malloc (msgctxt_len + msgid_len)); - if (msg_ctxt_id != NULL) -#endif - { - int found_translation; - memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); - msg_ctxt_id[msgctxt_len - 1] = '\004'; - memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); - translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); - found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); -#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS - if (msg_ctxt_id != buf) - free (msg_ctxt_id); -#endif - if (found_translation) - return translation; - } - return (n == 1 ? msgid : msgid_plural); -} - -#endif /* _LIBGETTEXT_H */ diff --git a/gl/gettimeofday.c b/gl/gettimeofday.c deleted file mode 100644 index df01908d50..0000000000 --- a/gl/gettimeofday.c +++ /dev/null @@ -1,154 +0,0 @@ -/* Provide gettimeofday for systems that don't have it or for which it's broken. - - Copyright (C) 2001-2003, 2005-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* written by Jim Meyering */ - -#include - -/* Specification. */ -#include - -#include - -#if HAVE_SYS_TIMEB_H -# include -#endif - -#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME - -/* Work around the bug in some systems whereby gettimeofday clobbers - the static buffer that localtime uses for its return value. The - gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has - this problem. The tzset replacement is necessary for at least - Solaris 2.5, 2.5.1, and 2.6. */ - -static struct tm tm_zero_buffer; -static struct tm *localtime_buffer_addr = &tm_zero_buffer; - -# undef localtime -extern struct tm *localtime (time_t const *); - -# undef gmtime -extern struct tm *gmtime (time_t const *); - -/* This is a wrapper for localtime. It is used only on systems for which - gettimeofday clobbers the static buffer used for localtime's result. - - On the first call, record the address of the static buffer that - localtime uses for its result. */ - -struct tm * -rpl_localtime (time_t const *timep) -{ - struct tm *tm = localtime (timep); - - if (localtime_buffer_addr == &tm_zero_buffer) - localtime_buffer_addr = tm; - - return tm; -} - -/* Same as above, since gmtime and localtime use the same buffer. */ -struct tm * -rpl_gmtime (time_t const *timep) -{ - struct tm *tm = gmtime (timep); - - if (localtime_buffer_addr == &tm_zero_buffer) - localtime_buffer_addr = tm; - - return tm; -} - -#endif /* GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME */ - -#if TZSET_CLOBBERS_LOCALTIME - -# undef tzset -extern void tzset (void); - -/* This is a wrapper for tzset, for systems on which tzset may clobber - the static buffer used for localtime's result. */ -void -rpl_tzset (void) -{ - /* Save and restore the contents of the buffer used for localtime's - result around the call to tzset. */ - struct tm save = *localtime_buffer_addr; - tzset (); - *localtime_buffer_addr = save; -} -#endif - -/* This is a wrapper for gettimeofday. It is used only on systems - that lack this function, or whose implementation of this function - causes problems. */ - -int -gettimeofday (struct timeval *restrict tv, void *restrict tz) -{ -#undef gettimeofday -#if HAVE_GETTIMEOFDAY -# if GETTIMEOFDAY_CLOBBERS_LOCALTIME - /* Save and restore the contents of the buffer used for localtime's - result around the call to gettimeofday. */ - struct tm save = *localtime_buffer_addr; -# endif - -# if defined timeval /* 'struct timeval' overridden by gnulib? */ -# undef timeval - struct timeval otv; - int result = gettimeofday (&otv, (struct timezone *) tz); - if (result == 0) - { - tv->tv_sec = otv.tv_sec; - tv->tv_usec = otv.tv_usec; - } -# else - int result = gettimeofday (tv, (struct timezone *) tz); -# endif - -# if GETTIMEOFDAY_CLOBBERS_LOCALTIME - *localtime_buffer_addr = save; -# endif - - return result; - -#else - -# if HAVE__FTIME - - struct _timeb timebuf; - _ftime (&timebuf); - tv->tv_sec = timebuf.time; - tv->tv_usec = timebuf.millitm * 1000; - -# else - -# if !defined OK_TO_USE_1S_CLOCK -# error "Only 1-second nominal clock resolution found. Is that intended?" \ - "If so, compile with the -DOK_TO_USE_1S_CLOCK option." -# endif - tv->tv_sec = time (NULL); - tv->tv_usec = 0; - -# endif - - return 0; - -#endif -} diff --git a/gl/gnulib.mk b/gl/gnulib.mk deleted file mode 100644 index b823ff503e..0000000000 --- a/gl/gnulib.mk +++ /dev/null @@ -1,287 +0,0 @@ -## DO NOT EDIT! GENERATED AUTOMATICALLY! -## Process this file with automake to produce Makefile.in. -# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 Free -# Software Foundation, Inc. -# -# This file is free software, distributed under the terms of the GNU -# General Public License. As a special exception to the GNU General -# Public License, this file may be distributed as part of a program -# that contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=gl/tests --aux-dir=build-aux --with-tests --avoid=errno --avoid=fseeko --avoid=gettext-h --avoid=malloc-posix --avoid=realloc-posix --avoid=snprintf --avoid=stdbool --avoid=stdio --avoid=string --avoid=sys_socket --avoid=unistd --avoid=vasnprintf --makefile-name=gnulib.mk --libtool --macro-prefix=gl --no-vc-files arpa_inet autobuild error fdl gendocs getaddrinfo getline getpass-gnu gnupload gpl-3.0 inet_ntop inet_pton lgpl-2.1 maintainer-makefile progname readline version-etc-fsf - - -MOSTLYCLEANFILES += core *.stackdump - -noinst_LTLIBRARIES += libgnu.la - -libgnu_la_SOURCES = -libgnu_la_LIBADD = $(gl_LTLIBOBJS) -libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) -EXTRA_libgnu_la_SOURCES = -libgnu_la_LDFLAGS = $(AM_LDFLAGS) - -## begin gnulib module arpa_inet - -BUILT_SOURCES += $(ARPA_INET_H) - -# We need the following in order to create when the system -# doesn't have one. -arpa/inet.h: - @MKDIR_P@ arpa - rm -f $@-t $@ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''NEXT_ARPA_INET_H''@|$(NEXT_ARPA_INET_H)|g' \ - -e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \ - -e 's|@''GNULIB_INET_NTOP''@|$(GNULIB_INET_NTOP)|g' \ - -e 's|@''GNULIB_INET_PTON''@|$(GNULIB_INET_PTON)|g' \ - -e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \ - -e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \ - -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ - < $(srcdir)/arpa_inet.in.h; \ - } > $@-t - mv $@-t $@ -MOSTLYCLEANFILES += arpa/inet.h arpa/inet.h-t -MOSTLYCLEANDIRS += arpa - -EXTRA_DIST += arpa_inet.in.h - -## end gnulib module arpa_inet - -## begin gnulib module c-ctype - -libgnu_la_SOURCES += c-ctype.h c-ctype.c - -## end gnulib module c-ctype - -## begin gnulib module error - - -EXTRA_DIST += error.c error.h - -EXTRA_libgnu_la_SOURCES += error.c - -## end gnulib module error - -## begin gnulib module gendocs - - -EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh - -## end gnulib module gendocs - -## begin gnulib module getaddrinfo - - -EXTRA_DIST += gai_strerror.c getaddrinfo.c - -EXTRA_libgnu_la_SOURCES += gai_strerror.c getaddrinfo.c - -## end gnulib module getaddrinfo - -## begin gnulib module getdelim - - -EXTRA_DIST += getdelim.c - -EXTRA_libgnu_la_SOURCES += getdelim.c - -## end gnulib module getdelim - -## begin gnulib module getline - - -EXTRA_DIST += getline.c - -EXTRA_libgnu_la_SOURCES += getline.c - -## end gnulib module getline - -## begin gnulib module getpass-gnu - - -EXTRA_DIST += getpass.c getpass.h - -EXTRA_libgnu_la_SOURCES += getpass.c - -## end gnulib module getpass-gnu - -## begin gnulib module gnumakefile - -distclean-local: clean-GNUmakefile -clean-GNUmakefile: - test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || : - -EXTRA_DIST += $(top_srcdir)/GNUmakefile - -## end gnulib module gnumakefile - -## begin gnulib module gnupload - - -EXTRA_DIST += $(top_srcdir)/build-aux/gnupload - -## end gnulib module gnupload - -## begin gnulib module havelib - - -EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath - -## end gnulib module havelib - -## begin gnulib module inet_ntop - - -EXTRA_DIST += inet_ntop.c - -EXTRA_libgnu_la_SOURCES += inet_ntop.c - -## end gnulib module inet_ntop - -## begin gnulib module inet_pton - - -EXTRA_DIST += inet_pton.c - -EXTRA_libgnu_la_SOURCES += inet_pton.c - -## end gnulib module inet_pton - -## begin gnulib module intprops - - -EXTRA_DIST += intprops.h - -## end gnulib module intprops - -## begin gnulib module link-warning - -LINK_WARNING_H=$(top_srcdir)/build-aux/link-warning.h - -EXTRA_DIST += $(top_srcdir)/build-aux/link-warning.h - -## end gnulib module link-warning - -## begin gnulib module maintainer-makefile - -EXTRA_DIST += $(top_srcdir)/maint.mk - -## end gnulib module maintainer-makefile - -## begin gnulib module netdb - -BUILT_SOURCES += $(NETDB_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -netdb.h: netdb.in.h - rm -f $@-t $@ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''NEXT_NETDB_H''@|$(NEXT_NETDB_H)|g' \ - -e 's|@''HAVE_NETDB_H''@|$(HAVE_NETDB_H)|g' \ - -e 's|@''GNULIB_GETADDRINFO''@|$(GNULIB_GETADDRINFO)|g' \ - < $(srcdir)/netdb.in.h; \ - } > $@-t - mv $@-t $@ -MOSTLYCLEANFILES += netdb.h netdb.h-t - -EXTRA_DIST += netdb.in.h - -## end gnulib module netdb - -## begin gnulib module netinet_in - -BUILT_SOURCES += $(NETINET_IN_H) - -# We need the following in order to create when the system -# doesn't have one. -netinet/in.h: netinet_in.in.h - @MKDIR_P@ netinet - rm -f $@-t $@ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \ - -e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \ - < $(srcdir)/netinet_in.in.h; \ - } > $@-t - mv $@-t $@ -MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t -MOSTLYCLEANDIRS += netinet - -EXTRA_DIST += netinet_in.in.h - -## end gnulib module netinet_in - -## begin gnulib module progname - -libgnu_la_SOURCES += progname.h progname.c - -## end gnulib module progname - -## begin gnulib module readline - - -EXTRA_DIST += readline.c readline.h - -EXTRA_libgnu_la_SOURCES += readline.c - -## end gnulib module readline - -## begin gnulib module stdarg - -BUILT_SOURCES += $(STDARG_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -stdarg.h: stdarg.in.h - rm -f $@-t $@ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ - < $(srcdir)/stdarg.in.h; \ - } > $@-t - mv $@-t $@ -MOSTLYCLEANFILES += stdarg.h stdarg.h-t - -EXTRA_DIST += stdarg.in.h - -## end gnulib module stdarg - -## begin gnulib module strerror - - -EXTRA_DIST += strerror.c - -EXTRA_libgnu_la_SOURCES += strerror.c - -## end gnulib module strerror - -## begin gnulib module version-etc - -libgnu_la_SOURCES += version-etc.h version-etc.c - -## end gnulib module version-etc - -## begin gnulib module version-etc-fsf - -libgnu_la_SOURCES += version-etc-fsf.c - -## end gnulib module version-etc-fsf - - -mostlyclean-local: mostlyclean-generic - @for dir in '' $(MOSTLYCLEANDIRS); do \ - if test -n "$$dir" && test -d $$dir; then \ - echo "rmdir $$dir"; rmdir $$dir; \ - fi; \ - done; \ - : diff --git a/gl/hash-pjw-bare.c b/gl/hash-pjw-bare.c deleted file mode 100644 index 3e25cae878..0000000000 --- a/gl/hash-pjw-bare.c +++ /dev/null @@ -1,42 +0,0 @@ -/* hash-pjw-bare.c -- compute a hash value from a provided buffer. - - Copyright (C) 2012-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published - by the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#include "hash-pjw-bare.h" - -#include - -#define SIZE_BITS (sizeof (size_t) * CHAR_BIT) - -/* Return a hash of the N bytes of X using the method described by - Bruno Haible in http://www.haible.de/bruno/hashfunc.html. - Note that while many hash functions reduce their result via modulo - to a 0..table_size-1 range, this function does not do that. */ - -size_t -hash_pjw_bare (const void *x, size_t n) -{ - const unsigned char *s = x; - size_t h = 0; - unsigned i; - - for (i = 0; i < n; i++) - h = s[i] + ((h << 9) | (h >> (SIZE_BITS - 9))); - - return h; -} diff --git a/gl/hash-pjw-bare.h b/gl/hash-pjw-bare.h deleted file mode 100644 index af4892af92..0000000000 --- a/gl/hash-pjw-bare.h +++ /dev/null @@ -1,24 +0,0 @@ -/* hash-pjw-bare.h -- declaration for a simple hash function - Copyright (C) 2012-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published - by the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Compute a hash code for a buffer starting at X and of size N, - and return the hash code. Note that unlike hash_pjw(), it does not - return it modulo a table size. - The result is platform dependent: it depends on the size of the 'size_t' - type. */ -extern size_t hash_pjw_bare (const void *x, size_t n) _GL_ATTRIBUTE_PURE; diff --git a/gl/intprops.h b/gl/intprops.h deleted file mode 100644 index 716741adc5..0000000000 --- a/gl/intprops.h +++ /dev/null @@ -1,464 +0,0 @@ -/* intprops.h -- properties of integer types - - Copyright (C) 2001-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published - by the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* Written by Paul Eggert. */ - -#ifndef _GL_INTPROPS_H -#define _GL_INTPROPS_H - -#include -#include - -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif - -/* Return a value with the common real type of E and V and the value of V. */ -#define _GL_INT_CONVERT(e, v) (0 * (e) + (v)) - -/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see - . */ -#define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v)) - -/* The extra casts in the following macros work around compiler bugs, - e.g., in Cray C 5.0.3.0. */ - -/* True if the arithmetic type T is an integer type. bool counts as - an integer. */ -#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) - -/* True if the real type T is signed. */ -#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) - -/* Return 1 if the real expression E, after promotion, has a - signed or floating type. */ -#define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) - - -/* Minimum and maximum values for integer types and expressions. */ - -/* The width in bits of the integer type or expression T. - Padding bits are not supported; this is checked at compile-time below. */ -#define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) - -/* The maximum and minimum values for the integer type T. */ -#define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) -#define TYPE_MAXIMUM(t) \ - ((t) (! TYPE_SIGNED (t) \ - ? (t) -1 \ - : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) - -/* The maximum and minimum values for the type of the expression E, - after integer promotion. E should not have side effects. */ -#define _GL_INT_MINIMUM(e) \ - (EXPR_SIGNED (e) \ - ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ - : _GL_INT_CONVERT (e, 0)) -#define _GL_INT_MAXIMUM(e) \ - (EXPR_SIGNED (e) \ - ? _GL_SIGNED_INT_MAXIMUM (e) \ - : _GL_INT_NEGATE_CONVERT (e, 1)) -#define _GL_SIGNED_INT_MAXIMUM(e) \ - (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1) - -/* Work around OpenVMS incompatibility with C99. */ -#if !defined LLONG_MAX && defined __INT64_MAX -# define LLONG_MAX __INT64_MAX -# define LLONG_MIN __INT64_MIN -#endif - -/* This include file assumes that signed types are two's complement without - padding bits; the above macros have undefined behavior otherwise. - If this is a problem for you, please let us know how to fix it for your host. - As a sanity check, test the assumption for some signed types that - bounds. */ -verify (TYPE_MINIMUM (signed char) == SCHAR_MIN); -verify (TYPE_MAXIMUM (signed char) == SCHAR_MAX); -verify (TYPE_MINIMUM (short int) == SHRT_MIN); -verify (TYPE_MAXIMUM (short int) == SHRT_MAX); -verify (TYPE_MINIMUM (int) == INT_MIN); -verify (TYPE_MAXIMUM (int) == INT_MAX); -verify (TYPE_MINIMUM (long int) == LONG_MIN); -verify (TYPE_MAXIMUM (long int) == LONG_MAX); -#ifdef LLONG_MAX -verify (TYPE_MINIMUM (long long int) == LLONG_MIN); -verify (TYPE_MAXIMUM (long long int) == LLONG_MAX); -#endif -/* Similarly, sanity-check one ISO/IEC TS 18661-1:2014 macro if defined. */ -#ifdef UINT_WIDTH -verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH); -#endif - -/* Does the __typeof__ keyword work? This could be done by - 'configure', but for now it's easier to do it by hand. */ -#if (2 <= __GNUC__ \ - || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ - || (0x5110 <= __SUNPRO_C && !__STDC__)) -# define _GL_HAVE___TYPEOF__ 1 -#else -# define _GL_HAVE___TYPEOF__ 0 -#endif - -/* Return 1 if the integer type or expression T might be signed. Return 0 - if it is definitely unsigned. This macro does not evaluate its argument, - and expands to an integer constant expression. */ -#if _GL_HAVE___TYPEOF__ -# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) -#else -# define _GL_SIGNED_TYPE_OR_EXPR(t) 1 -#endif - -/* Bound on length of the string representing an unsigned integer - value representable in B bits. log10 (2.0) < 146/485. The - smallest value of B where this bound is not tight is 2621. */ -#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) - -/* Bound on length of the string representing an integer type or expression T. - Subtract 1 for the sign bit if T is signed, and then add 1 more for - a minus sign if needed. - - Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is - signed, this macro may overestimate the true bound by one byte when - applied to unsigned types of size 2, 4, 16, ... bytes. */ -#define INT_STRLEN_BOUND(t) \ - (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ - + _GL_SIGNED_TYPE_OR_EXPR (t)) - -/* Bound on buffer size needed to represent an integer type or expression T, - including the terminating null. */ -#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) - - -/* Range overflow checks. - - The INT__RANGE_OVERFLOW macros return 1 if the corresponding C - operators might not yield numerically correct answers due to - arithmetic overflow. They do not rely on undefined or - implementation-defined behavior. Their implementations are simple - and straightforward, but they are a bit harder to use than the - INT__OVERFLOW macros described below. - - Example usage: - - long int i = ...; - long int j = ...; - if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) - printf ("multiply would overflow"); - else - printf ("product is %ld", i * j); - - Restrictions on *_RANGE_OVERFLOW macros: - - These macros do not check for all possible numerical problems or - undefined or unspecified behavior: they do not check for division - by zero, for bad shift counts, or for shifting negative numbers. - - These macros may evaluate their arguments zero or multiple times, - so the arguments should not have side effects. The arithmetic - arguments (including the MIN and MAX arguments) must be of the same - integer type after the usual arithmetic conversions, and the type - must have minimum value MIN and maximum MAX. Unsigned types should - use a zero MIN of the proper type. - - These macros are tuned for constant MIN and MAX. For commutative - operations such as A + B, they are also tuned for constant B. */ - -/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. */ -#define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ - ((b) < 0 \ - ? (a) < (min) - (b) \ - : (max) - (b) < (a)) - -/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. */ -#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ - ((b) < 0 \ - ? (max) + (b) < (a) \ - : (a) < (min) + (b)) - -/* Return 1 if - A would overflow in [MIN,MAX] arithmetic. - See above for restrictions. */ -#define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ - ((min) < 0 \ - ? (a) < - (max) \ - : 0 < (a)) - -/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. Avoid && and || as they tickle - bugs in Sun C 5.11 2010/08/13 and other compilers; see - . */ -#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ - ((b) < 0 \ - ? ((a) < 0 \ - ? (a) < (max) / (b) \ - : (b) == -1 \ - ? 0 \ - : (min) / (b) < (a)) \ - : (b) == 0 \ - ? 0 \ - : ((a) < 0 \ - ? (a) < (min) / (b) \ - : (max) / (b) < (a))) - -/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. Do not check for division by zero. */ -#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ - ((min) < 0 && (b) == -1 && (a) < - (max)) - -/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. Do not check for division by zero. - Mathematically, % should never overflow, but on x86-like hosts - INT_MIN % -1 traps, and the C standard permits this, so treat this - as an overflow too. */ -#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ - INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) - -/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. Here, MIN and MAX are for A only, and B need - not be of the same type as the other arguments. The C standard says that - behavior is undefined for shifts unless 0 <= B < wordwidth, and that when - A is negative then A << B has undefined behavior and A >> B has - implementation-defined behavior, but do not check these other - restrictions. */ -#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ - ((a) < 0 \ - ? (a) < (min) >> (b) \ - : (max) >> (b) < (a)) - -/* True if __builtin_add_overflow (A, B, P) works when P is non-null. */ -#define _GL_HAS_BUILTIN_OVERFLOW \ - (5 <= __GNUC__ || __has_builtin (__builtin_add_overflow)) - -/* True if __builtin_add_overflow_p (A, B, C) works. */ -#define _GL_HAS_BUILTIN_OVERFLOW_P \ - (7 <= __GNUC__ || __has_builtin (__builtin_add_overflow_p)) - -/* The _GL*_OVERFLOW macros have the same restrictions as the - *_RANGE_OVERFLOW macros, except that they do not assume that operands - (e.g., A and B) have the same type as MIN and MAX. Instead, they assume - that the result (e.g., A + B) has that type. */ -#if _GL_HAS_BUILTIN_OVERFLOW_P -# define _GL_ADD_OVERFLOW(a, b, min, max) \ - __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) -# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ - __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) -# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ - __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) -#else -# define _GL_ADD_OVERFLOW(a, b, min, max) \ - ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ - : (a) < 0 ? (b) <= (a) + (b) \ - : (b) < 0 ? (a) <= (a) + (b) \ - : (a) + (b) < (b)) -# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ - ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ - : (a) < 0 ? 1 \ - : (b) < 0 ? (a) - (b) <= (a) \ - : (a) < (b)) -# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ - (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ - || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) -#endif -#define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ - ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ - : (a) < 0 ? (b) <= (a) + (b) - 1 \ - : (b) < 0 && (a) + (b) <= (a)) -#define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ - ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ - : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ - : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) - -/* Return a nonzero value if A is a mathematical multiple of B, where - A is unsigned, B is negative, and MAX is the maximum value of A's - type. A's type must be the same as (A % B)'s type. Normally (A % - -B == 0) suffices, but things get tricky if -B would overflow. */ -#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ - (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ - ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ - ? (a) \ - : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ - : (a) % - (b)) \ - == 0) - -/* Check for integer overflow, and report low order bits of answer. - - The INT__OVERFLOW macros return 1 if the corresponding C operators - might not yield numerically correct answers due to arithmetic overflow. - The INT__WRAPV macros also store the low-order bits of the answer. - These macros work correctly on all known practical hosts, and do not rely - on undefined behavior due to signed arithmetic overflow. - - Example usage, assuming A and B are long int: - - if (INT_MULTIPLY_OVERFLOW (a, b)) - printf ("result would overflow\n"); - else - printf ("result is %ld (no overflow)\n", a * b); - - Example usage with WRAPV flavor: - - long int result; - bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); - printf ("result is %ld (%s)\n", result, - overflow ? "after overflow" : "no overflow"); - - Restrictions on these macros: - - These macros do not check for all possible numerical problems or - undefined or unspecified behavior: they do not check for division - by zero, for bad shift counts, or for shifting negative numbers. - - These macros may evaluate their arguments zero or multiple times, so the - arguments should not have side effects. - - The WRAPV macros are not constant expressions. They support only - +, binary -, and *. The result type must be signed. - - These macros are tuned for their last argument being a constant. - - Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, - A % B, and A << B would overflow, respectively. */ - -#define INT_ADD_OVERFLOW(a, b) \ - _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) -#define INT_SUBTRACT_OVERFLOW(a, b) \ - _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) -#if _GL_HAS_BUILTIN_OVERFLOW_P -# define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a) -#else -# define INT_NEGATE_OVERFLOW(a) \ - INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) -#endif -#define INT_MULTIPLY_OVERFLOW(a, b) \ - _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) -#define INT_DIVIDE_OVERFLOW(a, b) \ - _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) -#define INT_REMAINDER_OVERFLOW(a, b) \ - _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) -#define INT_LEFT_SHIFT_OVERFLOW(a, b) \ - INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ - _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) - -/* Return 1 if the expression A B would overflow, - where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, - assuming MIN and MAX are the minimum and maximum for the result type. - Arguments should be free of side effects. */ -#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ - op_result_overflow (a, b, \ - _GL_INT_MINIMUM (0 * (b) + (a)), \ - _GL_INT_MAXIMUM (0 * (b) + (a))) - -/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. - Return 1 if the result overflows. See above for restrictions. */ -#define INT_ADD_WRAPV(a, b, r) \ - _GL_INT_OP_WRAPV (a, b, r, +, __builtin_add_overflow, INT_ADD_OVERFLOW) -#define INT_SUBTRACT_WRAPV(a, b, r) \ - _GL_INT_OP_WRAPV (a, b, r, -, __builtin_sub_overflow, INT_SUBTRACT_OVERFLOW) -#define INT_MULTIPLY_WRAPV(a, b, r) \ - _GL_INT_OP_WRAPV (a, b, r, *, __builtin_mul_overflow, INT_MULTIPLY_OVERFLOW) - -/* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 - https://llvm.org/bugs/show_bug.cgi?id=25390 - For now, assume all versions of GCC-like compilers generate bogus - warnings for _Generic. This matters only for older compilers that - lack __builtin_add_overflow. */ -#if __GNUC__ -# define _GL__GENERIC_BOGUS 1 -#else -# define _GL__GENERIC_BOGUS 0 -#endif - -/* Store the low-order bits of A B into *R, where OP specifies - the operation. BUILTIN is the builtin operation, and OVERFLOW the - overflow predicate. Return 1 if the result overflows. See above - for restrictions. */ -#if _GL_HAS_BUILTIN_OVERFLOW -# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r) -#elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS -# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ - (_Generic \ - (*(r), \ - signed char: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \ - signed char, SCHAR_MIN, SCHAR_MAX), \ - short int: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \ - short int, SHRT_MIN, SHRT_MAX), \ - int: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ - int, INT_MIN, INT_MAX), \ - long int: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ - long int, LONG_MIN, LONG_MAX), \ - long long int: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ - long long int, LLONG_MIN, LLONG_MAX))) -#else -# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ - (sizeof *(r) == sizeof (signed char) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \ - signed char, SCHAR_MIN, SCHAR_MAX) \ - : sizeof *(r) == sizeof (short int) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \ - short int, SHRT_MIN, SHRT_MAX) \ - : sizeof *(r) == sizeof (int) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ - int, INT_MIN, INT_MAX) \ - : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) -# ifdef LLONG_MAX -# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ - (sizeof *(r) == sizeof (long int) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ - long int, LONG_MIN, LONG_MAX) \ - : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ - long long int, LLONG_MIN, LLONG_MAX)) -# else -# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ - long int, LONG_MIN, LONG_MAX) -# endif -#endif - -/* Store the low-order bits of A B into *R, where the operation - is given by OP. Use the unsigned type UT for calculation to avoid - overflow problems. *R's type is T, with extremal values TMIN and - TMAX. T must be a signed integer type. Return 1 if the result - overflows. */ -#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ - (sizeof ((a) op (b)) < sizeof (t) \ - ? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \ - : _GL_INT_OP_CALC1 (a, b, r, op, overflow, ut, t, tmin, tmax)) -#define _GL_INT_OP_CALC1(a, b, r, op, overflow, ut, t, tmin, tmax) \ - ((overflow (a, b) \ - || (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \ - || (tmax) < ((a) op (b))) \ - ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 1) \ - : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 0)) - -/* Return A B, where the operation is given by OP. Use the - unsigned type UT for calculation to avoid overflow problems. - Convert the result to type T without overflow by subtracting TMIN - from large values before converting, and adding it afterwards. - Compilers can optimize all the operations except OP. */ -#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t, tmin, tmax) \ - (((ut) (a) op (ut) (b)) <= (tmax) \ - ? (t) ((ut) (a) op (ut) (b)) \ - : ((t) (((ut) (a) op (ut) (b)) - (tmin)) + (tmin))) - -#endif /* _GL_INTPROPS_H */ diff --git a/gl/itold.c b/gl/itold.c deleted file mode 100644 index fde7619fc4..0000000000 --- a/gl/itold.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Replacement for 'int' to 'long double' conversion routine. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2011. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -void -_Qp_itoq (long double *result, int a) -{ - /* Convert from 'int' to 'double', then from 'double' to 'long double'. */ - *result = (double) a; -} diff --git a/gl/limits.in.h b/gl/limits.in.h deleted file mode 100644 index 353084a133..0000000000 --- a/gl/limits.in.h +++ /dev/null @@ -1,63 +0,0 @@ -/* A GNU-like . - - Copyright 2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public License - as published by the Free Software Foundation; either version 2.1, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_LIMITS_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_LIMITS_H@ - -#ifndef _@GUARD_PREFIX@_LIMITS_H -#define _@GUARD_PREFIX@_LIMITS_H - -/* The number of usable bits in an unsigned or signed integer type - with minimum value MIN and maximum value MAX, as an int expression - suitable in #if. Cover all known practical hosts. This - implementation exploits the fact that MAX is 1 less than a power of - 2, and merely counts the number of 1 bits in MAX; "COBn" means - "count the number of 1 bits in the low-order n bits"). */ -#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) -#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) -#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) -#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) -#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) -#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) -#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) - -/* Macros specified by ISO/IEC TS 18661-1:2014. */ - -#if (! defined ULLONG_WIDTH \ - && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) -# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) -# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) -# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) -# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) -# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) -# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) -# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) -# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) -# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) -# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) -# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) -#endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ - -#endif /* _@GUARD_PREFIX@_LIMITS_H */ -#endif /* _@GUARD_PREFIX@_LIMITS_H */ diff --git a/gl/lseek.c b/gl/lseek.c deleted file mode 100644 index 071742b131..0000000000 --- a/gl/lseek.c +++ /dev/null @@ -1,67 +0,0 @@ -/* An lseek() function that detects pipes. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#include - -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -/* Windows platforms. */ -/* Get GetFileType. */ -# include -/* Get _get_osfhandle. */ -# include "msvc-nothrow.h" -#else -# include -#endif -#include - -#undef lseek - -off_t -rpl_lseek (int fd, off_t offset, int whence) -{ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - /* mingw lseek mistakenly succeeds on pipes, sockets, and terminals. */ - HANDLE h = (HANDLE) _get_osfhandle (fd); - if (h == INVALID_HANDLE_VALUE) - { - errno = EBADF; - return -1; - } - if (GetFileType (h) != FILE_TYPE_DISK) - { - errno = ESPIPE; - return -1; - } -#else - /* BeOS lseek mistakenly succeeds on pipes... */ - struct stat statbuf; - if (fstat (fd, &statbuf) < 0) - return -1; - if (!S_ISREG (statbuf.st_mode)) - { - errno = ESPIPE; - return -1; - } -#endif -#if _GL_WINDOWS_64_BIT_OFF_T - return _lseeki64 (fd, offset, whence); -#else - return lseek (fd, offset, whence); -#endif -} diff --git a/gl/m4/00gnulib.m4 b/gl/m4/00gnulib.m4 deleted file mode 100644 index bb37e32aa3..0000000000 --- a/gl/m4/00gnulib.m4 +++ /dev/null @@ -1,46 +0,0 @@ -# 00gnulib.m4 serial 3 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl This file must be named something that sorts before all other -dnl gnulib-provided .m4 files. It is needed until such time as we can -dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and -dnl m4_divert semantics. - -# Until autoconf 2.63, handling of the diversion stack required m4_init -# to be called first; but this does not happen with aclocal. Wrapping -# the entire execution in another layer of the diversion stack fixes this. -# Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4 -# for whether it was FIFO or LIFO; in order to properly balance with -# m4_init, we need to undo our push just before anything wrapped within -# the m4_init body. The way to ensure this is to wrap both sides of -# m4_init with a one-shot macro that does the pop at the right time. -m4_ifndef([_m4_divert_diversion], -[m4_divert_push([KILL]) -m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])]) -m4_define([m4_init], - [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])]) - - -# AC_DEFUN_ONCE([NAME], VALUE) -# ---------------------------- -# Define NAME to expand to VALUE on the first use (whether by direct -# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. -# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This -# definition is slower than the version in Autoconf 2.64, because it -# can only use interfaces that existed since 2.59; but it achieves the -# same effect. Quoting is necessary to avoid confusing Automake. -m4_version_prereq([2.63.263], [], -[m4_define([AC][_DEFUN_ONCE], - [AC][_DEFUN([$1], - [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], - [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl -[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) - -# gl_00GNULIB -# ----------- -# Witness macro that this file has been included. Needed to force -# Automake to include this file prior to all other gnulib .m4 files. -AC_DEFUN([gl_00GNULIB]) diff --git a/gl/m4/absolute-header.m4 b/gl/m4/absolute-header.m4 deleted file mode 100644 index 7ffc38d7a2..0000000000 --- a/gl/m4/absolute-header.m4 +++ /dev/null @@ -1,102 +0,0 @@ -# absolute-header.m4 serial 16 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Derek Price. - -# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) -# --------------------------------------- -# Find the absolute name of a header file, testing first if the header exists. -# If the header were sys/inttypes.h, this macro would define -# ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h -# in config.h -# (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). -# The three "///" are to pacify Sun C 5.8, which otherwise would say -# "warning: #include of /usr/include/... may be non-portable". -# Use '""', not '<>', so that the /// cannot be confused with a C99 comment. -# Note: This macro assumes that the header file is not empty after -# preprocessing, i.e. it does not only define preprocessor macros but also -# provides some type/enum definitions or function/variable declarations. -AC_DEFUN([gl_ABSOLUTE_HEADER], -[AC_REQUIRE([AC_CANONICAL_HOST]) -AC_LANG_PREPROC_REQUIRE()dnl -dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted -dnl until we can assume autoconf 2.64 or newer. -m4_foreach_w([gl_HEADER_NAME], [$1], - [AS_VAR_PUSHDEF([gl_absolute_header], - [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl - AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], - m4_defn([gl_absolute_header]), - [AS_VAR_PUSHDEF([ac_header_exists], - [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl - AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl - if test AS_VAR_GET(ac_header_exists) = yes; then - gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) - fi - AS_VAR_POPDEF([ac_header_exists])dnl - ])dnl - AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), - ["AS_VAR_GET(gl_absolute_header)"], - [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) - AS_VAR_POPDEF([gl_absolute_header])dnl -])dnl -])# gl_ABSOLUTE_HEADER - -# gl_ABSOLUTE_HEADER_ONE(HEADER) -# ------------------------------ -# Like gl_ABSOLUTE_HEADER, except that: -# - it assumes that the header exists, -# - it uses the current CPPFLAGS, -# - it does not cache the result, -# - it is silent. -AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], -[ - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) - dnl AIX "xlc -E" and "cc -E" omit #line directives for header files - dnl that contain only a #include of other header files and no - dnl non-comment tokens of their own. This leads to a failure to - dnl detect the absolute name of , , - dnl and others. The workaround is to force preservation of comments - dnl through option -C. This ensures all necessary #line directives - dnl are present. GCC supports option -C as well. - case "$host_os" in - aix*) gl_absname_cpp="$ac_cpp -C" ;; - *) gl_absname_cpp="$ac_cpp" ;; - esac -changequote(,) - case "$host_os" in - mingw*) - dnl For the sake of native Windows compilers (excluding gcc), - dnl treat backslash as a directory separator, like /. - dnl Actually, these compilers use a double-backslash as - dnl directory separator, inside the - dnl # line "filename" - dnl directives. - gl_dirsep_regex='[/\\]' - ;; - *) - gl_dirsep_regex='\/' - ;; - esac - dnl A sed expression that turns a string into a basic regular - dnl expression, for use within "/.../". - gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo '$1' \ - | sed -e "$gl_make_literal_regex_sed"` - gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ - s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ - s|^/[^/]|//&| - p - q - }' -changequote([,]) - dnl eval is necessary to expand gl_absname_cpp. - dnl Ultrix and Pyramid sh refuse to redirect output of eval, - dnl so use subshell. - AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), -[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | - sed -n "$gl_absolute_header_sed"`]) -]) diff --git a/gl/m4/alloca.m4 b/gl/m4/alloca.m4 deleted file mode 100644 index 2382ff1eee..0000000000 --- a/gl/m4/alloca.m4 +++ /dev/null @@ -1,121 +0,0 @@ -# alloca.m4 serial 14 -dnl Copyright (C) 2002-2004, 2006-2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_ALLOCA], -[ - AC_REQUIRE([AC_FUNC_ALLOCA]) - if test $ac_cv_func_alloca_works = no; then - gl_PREREQ_ALLOCA - fi - - # Define an additional variable used in the Makefile substitution. - if test $ac_cv_working_alloca_h = yes; then - AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ - AC_EGREP_CPP([Need own alloca], [ -#if defined __GNUC__ || defined _AIX || defined _MSC_VER - Need own alloca -#endif - ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) - ]) - if test $gl_cv_rpl_alloca = yes; then - dnl OK, alloca can be implemented through a compiler built-in. - AC_DEFINE([HAVE_ALLOCA], [1], - [Define to 1 if you have 'alloca' after including , - a header that may be supplied by this distribution.]) - ALLOCA_H=alloca.h - else - dnl alloca exists as a library function, i.e. it is slow and probably - dnl a memory leak. Don't define HAVE_ALLOCA in this case. - ALLOCA_H= - fi - else - ALLOCA_H=alloca.h - fi - AC_SUBST([ALLOCA_H]) - AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"]) -]) - -# Prerequisites of lib/alloca.c. -# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. -AC_DEFUN([gl_PREREQ_ALLOCA], [:]) - -# This works around a bug in autoconf <= 2.68. -# See . - -m4_version_prereq([2.69], [] ,[ - -# This is taken from the following Autoconf patch: -# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497 - -# _AC_LIBOBJ_ALLOCA -# ----------------- -# Set up the LIBOBJ replacement of 'alloca'. Well, not exactly -# AC_LIBOBJ since we actually set the output variable 'ALLOCA'. -# Nevertheless, for Automake, AC_LIBSOURCES it. -m4_define([_AC_LIBOBJ_ALLOCA], -[# The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. -AC_LIBSOURCES(alloca.c) -AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl -AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.]) - -AC_CACHE_CHECK(whether 'alloca.c' needs Cray hooks, ac_cv_os_cray, -[AC_EGREP_CPP(webecray, -[#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif -], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - AC_CHECK_FUNC($ac_func, - [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, - [Define to one of '_getb67', 'GETB67', - 'getb67' for Cray-2 and Cray-YMP - systems. This function is required for - 'alloca.c' support on those systems.]) - break]) - done -fi - -AC_CACHE_CHECK([stack direction for C alloca], - [ac_cv_c_stack_direction], -[AC_RUN_IFELSE([AC_LANG_SOURCE( -[AC_INCLUDES_DEFAULT -int -find_stack_direction (int *addr, int depth) -{ - int dir, dummy = 0; - if (! addr) - addr = &dummy; - *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; - dir = depth ? find_stack_direction (addr, depth - 1) : 0; - return dir + dummy; -} - -int -main (int argc, char **argv) -{ - return find_stack_direction (0, argc + !argv + 20) < 0; -}])], - [ac_cv_c_stack_direction=1], - [ac_cv_c_stack_direction=-1], - [ac_cv_c_stack_direction=0])]) -AH_VERBATIM([STACK_DIRECTION], -[/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -@%:@undef STACK_DIRECTION])dnl -AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) -])# _AC_LIBOBJ_ALLOCA -]) diff --git a/gl/m4/byteswap.m4 b/gl/m4/byteswap.m4 deleted file mode 100644 index 27f0fd69d2..0000000000 --- a/gl/m4/byteswap.m4 +++ /dev/null @@ -1,19 +0,0 @@ -# byteswap.m4 serial 4 -dnl Copyright (C) 2005, 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Written by Oskar Liljeblad. - -AC_DEFUN([gl_BYTESWAP], -[ - dnl Prerequisites of lib/byteswap.in.h. - AC_CHECK_HEADERS([byteswap.h], [ - BYTESWAP_H='' - ], [ - BYTESWAP_H='byteswap.h' - ]) - AC_SUBST([BYTESWAP_H]) - AM_CONDITIONAL([GL_GENERATE_BYTESWAP_H], [test -n "$BYTESWAP_H"]) -]) diff --git a/gl/m4/ctype.m4 b/gl/m4/ctype.m4 deleted file mode 100644 index a2165aaac4..0000000000 --- a/gl/m4/ctype.m4 +++ /dev/null @@ -1,32 +0,0 @@ -# ctype_h.m4 serial 6 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_CTYPE_H], -[ - AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) - - dnl is always overridden, because of GNULIB_POSIXCHECK. - gl_NEXT_HEADERS([ctype.h]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[#include - ]], [isblank]) -]) - -AC_DEFUN([gl_CTYPE_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) -]) - -AC_DEFUN([gl_CTYPE_H_DEFAULTS], -[ - GNULIB_ISBLANK=0; AC_SUBST([GNULIB_ISBLANK]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_ISBLANK=1; AC_SUBST([HAVE_ISBLANK]) -]) diff --git a/gl/m4/errno_h.m4 b/gl/m4/errno_h.m4 deleted file mode 100644 index b111fce053..0000000000 --- a/gl/m4/errno_h.m4 +++ /dev/null @@ -1,137 +0,0 @@ -# errno_h.m4 serial 12 -dnl Copyright (C) 2004, 2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ - AC_EGREP_CPP([booboo],[ -#include -#if !defined ETXTBSY -booboo -#endif -#if !defined ENOMSG -booboo -#endif -#if !defined EIDRM -booboo -#endif -#if !defined ENOLINK -booboo -#endif -#if !defined EPROTO -booboo -#endif -#if !defined EMULTIHOP -booboo -#endif -#if !defined EBADMSG -booboo -#endif -#if !defined EOVERFLOW -booboo -#endif -#if !defined ENOTSUP -booboo -#endif -#if !defined ENETRESET -booboo -#endif -#if !defined ECONNABORTED -booboo -#endif -#if !defined ESTALE -booboo -#endif -#if !defined EDQUOT -booboo -#endif -#if !defined ECANCELED -booboo -#endif -#if !defined EOWNERDEAD -booboo -#endif -#if !defined ENOTRECOVERABLE -booboo -#endif -#if !defined EILSEQ -booboo -#endif - ], - [gl_cv_header_errno_h_complete=no], - [gl_cv_header_errno_h_complete=yes]) - ]) - if test $gl_cv_header_errno_h_complete = yes; then - ERRNO_H='' - else - gl_NEXT_HEADERS([errno.h]) - ERRNO_H='errno.h' - fi - AC_SUBST([ERRNO_H]) - AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"]) - gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) - gl_REPLACE_ERRNO_VALUE([ENOLINK]) - gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) -]) - -# Assuming $1 = EOVERFLOW. -# The EOVERFLOW errno value ought to be defined in , according to -# POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and -# some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. -# Check for the value of EOVERFLOW. -# Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. -AC_DEFUN([gl_REPLACE_ERRNO_VALUE], -[ - if test -n "$ERRNO_H"; then - AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ - AC_EGREP_CPP([yes],[ -#include -#ifdef ]$1[ -yes -#endif - ], - [gl_cv_header_errno_h_]$1[=yes], - [gl_cv_header_errno_h_]$1[=no]) - if test $gl_cv_header_errno_h_]$1[ = no; then - AC_EGREP_CPP([yes],[ -#define _XOPEN_SOURCE_EXTENDED 1 -#include -#ifdef ]$1[ -yes -#endif - ], [gl_cv_header_errno_h_]$1[=hidden]) - if test $gl_cv_header_errno_h_]$1[ = hidden; then - dnl The macro exists but is hidden. - dnl Define it to the same value. - AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ -#define _XOPEN_SOURCE_EXTENDED 1 -#include -/* The following two lines are a workaround against an autoconf-2.52 bug. */ -#include -#include -]) - fi - fi - ]) - case $gl_cv_header_errno_h_]$1[ in - yes | no) - ]$1[_HIDDEN=0; ]$1[_VALUE= - ;; - *) - ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" - ;; - esac - AC_SUBST($1[_HIDDEN]) - AC_SUBST($1[_VALUE]) - fi -]) - -dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. -dnl Remove this when we can assume autoconf >= 2.61. -m4_ifdef([AC_COMPUTE_INT], [], [ - AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) -]) diff --git a/gl/m4/exponentd.m4 b/gl/m4/exponentd.m4 deleted file mode 100644 index 7869a7d6cb..0000000000 --- a/gl/m4/exponentd.m4 +++ /dev/null @@ -1,116 +0,0 @@ -# exponentd.m4 serial 3 -dnl Copyright (C) 2007-2008, 2010-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION], -[ - AC_CACHE_CHECK([where to find the exponent in a 'double'], - [gl_cv_cc_double_expbit0], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#include -#define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -typedef union { double value; unsigned int word[NWORDS]; } memory_double; -static unsigned int ored_words[NWORDS]; -static unsigned int anded_words[NWORDS]; -static void add_to_ored_words (double x) -{ - memory_double m; - size_t i; - /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ - memset (&m, 0, sizeof (memory_double)); - m.value = x; - for (i = 0; i < NWORDS; i++) - { - ored_words[i] |= m.word[i]; - anded_words[i] &= m.word[i]; - } -} -int main () -{ - size_t j; - FILE *fp = fopen ("conftest.out", "w"); - if (fp == NULL) - return 1; - for (j = 0; j < NWORDS; j++) - anded_words[j] = ~ (unsigned int) 0; - add_to_ored_words (0.25); - add_to_ored_words (0.5); - add_to_ored_words (1.0); - add_to_ored_words (2.0); - add_to_ored_words (4.0); - /* Remove bits that are common (e.g. if representation of the first mantissa - bit is explicit). */ - for (j = 0; j < NWORDS; j++) - ored_words[j] &= ~anded_words[j]; - /* Now find the nonzero word. */ - for (j = 0; j < NWORDS; j++) - if (ored_words[j] != 0) - break; - if (j < NWORDS) - { - size_t i; - for (i = j + 1; i < NWORDS; i++) - if (ored_words[i] != 0) - { - fprintf (fp, "unknown"); - return (fclose (fp) != 0); - } - for (i = 0; ; i++) - if ((ored_words[j] >> i) & 1) - { - fprintf (fp, "word %d bit %d", (int) j, (int) i); - return (fclose (fp) != 0); - } - } - fprintf (fp, "unknown"); - return (fclose (fp) != 0); -} - ]])], - [gl_cv_cc_double_expbit0=`cat conftest.out`], - [gl_cv_cc_double_expbit0="unknown"], - [ - dnl On ARM, there are two 'double' floating-point formats, used by - dnl different sets of instructions: The older FPA instructions assume - dnl that they are stored in big-endian word order, while the words - dnl (like integer types) are stored in little-endian byte order. - dnl The newer VFP instructions assume little-endian order - dnl consistently. - AC_EGREP_CPP([mixed_endianness], [ -#if defined arm || defined __arm || defined __arm__ - mixed_endianness -#endif - ], - [gl_cv_cc_double_expbit0="unknown"], - [ - pushdef([AC_MSG_CHECKING],[:])dnl - pushdef([AC_MSG_RESULT],[:])dnl - pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl - AC_C_BIGENDIAN( - [gl_cv_cc_double_expbit0="word 0 bit 20"], - [gl_cv_cc_double_expbit0="word 1 bit 20"], - [gl_cv_cc_double_expbit0="unknown"]) - popdef([AC_MSG_RESULT_UNQUOTED])dnl - popdef([AC_MSG_RESULT])dnl - popdef([AC_MSG_CHECKING])dnl - ]) - ]) - rm -f conftest.out - ]) - case "$gl_cv_cc_double_expbit0" in - word*bit*) - word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` - bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` - AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], - [Define as the word index where to find the exponent of 'double'.]) - AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], - [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) - ;; - esac -]) diff --git a/gl/m4/extensions.m4 b/gl/m4/extensions.m4 deleted file mode 100644 index e114a6f729..0000000000 --- a/gl/m4/extensions.m4 +++ /dev/null @@ -1,173 +0,0 @@ -# serial 15 -*- Autoconf -*- -# Enable extensions on systems that normally disable them. - -# Copyright (C) 2003, 2006-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git -# Autoconf. Perhaps we can remove this once we can assume Autoconf -# 2.70 or later everywhere, but since Autoconf mutates rapidly -# enough in this area it's likely we'll need to redefine -# AC_USE_SYSTEM_EXTENSIONS for quite some time. - -# If autoconf reports a warning -# warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS -# or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS -# the fix is -# 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked -# but always AC_REQUIREd, -# 2) to ensure that for each occurrence of -# AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) -# or -# AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) -# the corresponding gnulib module description has 'extensions' among -# its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS -# invocation occurs in gl_EARLY, not in gl_INIT. - -# AC_USE_SYSTEM_EXTENSIONS -# ------------------------ -# Enable extensions on systems that normally disable them, -# typically due to standards-conformance issues. -# -# Remember that #undef in AH_VERBATIM gets replaced with #define by -# AC_DEFINE. The goal here is to define all known feature-enabling -# macros, then, if reports of conflicts are made, disable macros that -# cause problems on some platforms (such as __EXTENSIONS__). -AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], -[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl -AC_BEFORE([$0], [AC_RUN_IFELSE])dnl - - AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) - if test "$MINIX" = yes; then - AC_DEFINE([_POSIX_SOURCE], [1], - [Define to 1 if you need to in order for 'stat' and other - things to work.]) - AC_DEFINE([_POSIX_1_SOURCE], [2], - [Define to 2 if the system does not provide POSIX.1 features - except with this defined.]) - AC_DEFINE([_MINIX], [1], - [Define to 1 if on MINIX.]) - AC_DEFINE([_NETBSD_SOURCE], [1], - [Define to 1 to make NetBSD features available. MINIX 3 needs this.]) - fi - -dnl Use a different key than __EXTENSIONS__, as that name broke existing -dnl configure.ac when using autoheader 2.62. - AH_VERBATIM([USE_SYSTEM_EXTENSIONS], -[/* Enable extensions on AIX 3, Interix. */ -#ifndef _ALL_SOURCE -# undef _ALL_SOURCE -#endif -/* Enable general extensions on macOS. */ -#ifndef _DARWIN_C_SOURCE -# undef _DARWIN_C_SOURCE -#endif -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# undef _GNU_SOURCE -#endif -/* Enable threading extensions on Solaris. */ -#ifndef _POSIX_PTHREAD_SEMANTICS -# undef _POSIX_PTHREAD_SEMANTICS -#endif -/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ -#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ -# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ -#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ -# undef __STDC_WANT_IEC_60559_BFP_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ -#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ -# undef __STDC_WANT_IEC_60559_DFP_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ -#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ -# undef __STDC_WANT_IEC_60559_FUNCS_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ -#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ -# undef __STDC_WANT_IEC_60559_TYPES_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ -#ifndef __STDC_WANT_LIB_EXT2__ -# undef __STDC_WANT_LIB_EXT2__ -#endif -/* Enable extensions specified by ISO/IEC 24747:2009. */ -#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ -# undef __STDC_WANT_MATH_SPEC_FUNCS__ -#endif -/* Enable extensions on HP NonStop. */ -#ifndef _TANDEM_SOURCE -# undef _TANDEM_SOURCE -#endif -/* Enable X/Open extensions if necessary. HP-UX 11.11 defines - mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of - whether compiling with -Ae or -D_HPUX_SOURCE=1. */ -#ifndef _XOPEN_SOURCE -# undef _XOPEN_SOURCE -#endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ -#endif -]) - AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], - [ac_cv_safe_to_define___extensions__], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ -# define __EXTENSIONS__ 1 - ]AC_INCLUDES_DEFAULT])], - [ac_cv_safe_to_define___extensions__=yes], - [ac_cv_safe_to_define___extensions__=no])]) - test $ac_cv_safe_to_define___extensions__ = yes && - AC_DEFINE([__EXTENSIONS__]) - AC_DEFINE([_ALL_SOURCE]) - AC_DEFINE([_DARWIN_C_SOURCE]) - AC_DEFINE([_GNU_SOURCE]) - AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) - AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) - AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) - AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) - AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) - AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) - AC_DEFINE([__STDC_WANT_LIB_EXT2__]) - AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) - AC_DEFINE([_TANDEM_SOURCE]) - AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], - [ac_cv_should_define__xopen_source], - [ac_cv_should_define__xopen_source=no - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ - #include - mbstate_t x;]])], - [], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ - #define _XOPEN_SOURCE 500 - #include - mbstate_t x;]])], - [ac_cv_should_define__xopen_source=yes])])]) - test $ac_cv_should_define__xopen_source = yes && - AC_DEFINE([_XOPEN_SOURCE], [500]) -])# AC_USE_SYSTEM_EXTENSIONS - -# gl_USE_SYSTEM_EXTENSIONS -# ------------------------ -# Enable extensions on systems that normally disable them, -# typically due to standards-conformance issues. -AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], -[ - dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. - dnl gnulib does not need it. But if it gets required by third-party macros - dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a - dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". - dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, - dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. - AC_REQUIRE([AC_GNU_SOURCE]) - - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) -]) diff --git a/gl/m4/extern-inline.m4 b/gl/m4/extern-inline.m4 deleted file mode 100644 index 1e578f3deb..0000000000 --- a/gl/m4/extern-inline.m4 +++ /dev/null @@ -1,102 +0,0 @@ -dnl 'extern inline' a la ISO C99. - -dnl Copyright 2012-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_EXTERN_INLINE], -[ - AH_VERBATIM([extern_inline], -[/* Please see the Gnulib manual for how to use these macros. - - Suppress extern inline with HP-UX cc, as it appears to be broken; see - . - - Suppress extern inline with Sun C in standards-conformance mode, as it - mishandles inline functions that call each other. E.g., for 'inline void f - (void) { } inline void g (void) { f (); }', c99 incorrectly complains - 'reference to static identifier "f" in extern inline function'. - This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. - - Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) - on configurations that mistakenly use 'static inline' to implement - functions or macros in standard C headers like . For example, - if isdigit is mistakenly implemented via a static inline function, - a program containing an extern inline function that calls isdigit - may not work since the C standard prohibits extern inline functions - from calling static functions. This bug is known to occur on: - - OS X 10.8 and earlier; see: - http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html - - DragonFly; see - http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log - - FreeBSD; see: - http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html - - OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and - for clang but remains for g++; see . - Assume DragonFly and FreeBSD will be similar. */ -#if (((defined __APPLE__ && defined __MACH__) \ - || defined __DragonFly__ || defined __FreeBSD__) \ - && (defined __header_inline \ - ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ - && ! defined __clang__) \ - : ((! defined _DONT_USE_CTYPE_INLINE_ \ - && (defined __GNUC__ || defined __cplusplus)) \ - || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ - && defined __GNUC__ && ! defined __cplusplus)))) -# define _GL_EXTERN_INLINE_STDHEADER_BUG -#endif -#if ((__GNUC__ \ - ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ - : (199901L <= __STDC_VERSION__ \ - && !defined __HP_cc \ - && !defined __PGI \ - && !(defined __SUNPRO_C && __STDC__))) \ - && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) -# define _GL_INLINE inline -# define _GL_EXTERN_INLINE extern inline -# define _GL_EXTERN_INLINE_IN_USE -#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ - && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) -# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ - /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ -# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) -# else -# define _GL_INLINE extern inline -# endif -# define _GL_EXTERN_INLINE extern -# define _GL_EXTERN_INLINE_IN_USE -#else -# define _GL_INLINE static _GL_UNUSED -# define _GL_EXTERN_INLINE static _GL_UNUSED -#endif - -/* In GCC 4.6 (inclusive) to 5.1 (exclusive), - suppress bogus "no previous prototype for 'FOO'" - and "no previous declaration for 'FOO'" diagnostics, - when FOO is an inline function in the header; see - and - . */ -#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ -# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ -# define _GL_INLINE_HEADER_CONST_PRAGMA -# else -# define _GL_INLINE_HEADER_CONST_PRAGMA \ - _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") -# endif -# define _GL_INLINE_HEADER_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ - _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ - _GL_INLINE_HEADER_CONST_PRAGMA -# define _GL_INLINE_HEADER_END \ - _Pragma ("GCC diagnostic pop") -#else -# define _GL_INLINE_HEADER_BEGIN -# define _GL_INLINE_HEADER_END -#endif]) -]) diff --git a/gl/m4/fcntl-o.m4 b/gl/m4/fcntl-o.m4 deleted file mode 100644 index 24fcf88d09..0000000000 --- a/gl/m4/fcntl-o.m4 +++ /dev/null @@ -1,134 +0,0 @@ -# fcntl-o.m4 serial 4 -dnl Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Written by Paul Eggert. - -# Test whether the flags O_NOATIME and O_NOFOLLOW actually work. -# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. -# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. -AC_DEFUN([gl_FCNTL_O_FLAGS], -[ - dnl Persuade glibc to define O_NOATIME and O_NOFOLLOW. - dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes - dnl AC_GNU_SOURCE. - m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], - [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], - [AC_REQUIRE([AC_GNU_SOURCE])]) - - AC_CHECK_HEADERS_ONCE([unistd.h]) - AC_CHECK_FUNCS_ONCE([symlink]) - AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], - [AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include - #if HAVE_UNISTD_H - # include - #else /* on Windows with MSVC */ - # include - # include - # defined sleep(n) _sleep ((n) * 1000) - #endif - #include - #ifndef O_NOATIME - #define O_NOATIME 0 - #endif - #ifndef O_NOFOLLOW - #define O_NOFOLLOW 0 - #endif - static int const constants[] = - { - O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, - O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY - }; - ]], - [[ - int result = !constants; - #if HAVE_SYMLINK - { - static char const sym[] = "conftest.sym"; - if (symlink ("/dev/null", sym) != 0) - result |= 2; - else - { - int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); - if (fd >= 0) - { - close (fd); - result |= 4; - } - } - if (unlink (sym) != 0 || symlink (".", sym) != 0) - result |= 2; - else - { - int fd = open (sym, O_RDONLY | O_NOFOLLOW); - if (fd >= 0) - { - close (fd); - result |= 4; - } - } - unlink (sym); - } - #endif - { - static char const file[] = "confdefs.h"; - int fd = open (file, O_RDONLY | O_NOATIME); - if (fd < 0) - result |= 8; - else - { - struct stat st0; - if (fstat (fd, &st0) != 0) - result |= 16; - else - { - char c; - sleep (1); - if (read (fd, &c, 1) != 1) - result |= 24; - else - { - if (close (fd) != 0) - result |= 32; - else - { - struct stat st1; - if (stat (file, &st1) != 0) - result |= 40; - else - if (st0.st_atime != st1.st_atime) - result |= 64; - } - } - } - } - } - return result;]])], - [gl_cv_header_working_fcntl_h=yes], - [case $? in #( - 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( - 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( - 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( - *) gl_cv_header_working_fcntl_h='no';; - esac], - [gl_cv_header_working_fcntl_h=cross-compiling])]) - - case $gl_cv_header_working_fcntl_h in #( - *O_NOATIME* | no | cross-compiling) ac_val=0;; #( - *) ac_val=1;; - esac - AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], - [Define to 1 if O_NOATIME works.]) - - case $gl_cv_header_working_fcntl_h in #( - *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( - *) ac_val=1;; - esac - AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], - [Define to 1 if O_NOFOLLOW works.]) -]) diff --git a/gl/m4/fcntl_h.m4 b/gl/m4/fcntl_h.m4 deleted file mode 100644 index ef0d78dde1..0000000000 --- a/gl/m4/fcntl_h.m4 +++ /dev/null @@ -1,50 +0,0 @@ -# serial 15 -# Configure fcntl.h. -dnl Copyright (C) 2006-2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Written by Paul Eggert. - -AC_DEFUN([gl_FCNTL_H], -[ - AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) - AC_REQUIRE([gl_FCNTL_O_FLAGS]) - gl_NEXT_HEADERS([fcntl.h]) - - dnl Ensure the type pid_t gets defined. - AC_REQUIRE([AC_TYPE_PID_T]) - - dnl Ensure the type mode_t gets defined. - AC_REQUIRE([AC_TYPE_MODE_T]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use, if it is not common - dnl enough to be declared everywhere. - gl_WARN_ON_USE_PREPARE([[#include - ]], [fcntl openat]) -]) - -AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_FCNTL_H_DEFAULTS], -[ - GNULIB_FCNTL=0; AC_SUBST([GNULIB_FCNTL]) - GNULIB_NONBLOCKING=0; AC_SUBST([GNULIB_NONBLOCKING]) - GNULIB_OPEN=0; AC_SUBST([GNULIB_OPEN]) - GNULIB_OPENAT=0; AC_SUBST([GNULIB_OPENAT]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL]) - HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT]) - REPLACE_FCNTL=0; AC_SUBST([REPLACE_FCNTL]) - REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) - REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT]) -]) diff --git a/gl/m4/fdopen.m4 b/gl/m4/fdopen.m4 deleted file mode 100644 index 685a1bb9c9..0000000000 --- a/gl/m4/fdopen.m4 +++ /dev/null @@ -1,47 +0,0 @@ -# fdopen.m4 serial 3 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FDOPEN], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_MSVC_INVAL]) - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - REPLACE_FDOPEN=1 - else - dnl Test whether fdopen() sets errno when it fails due to a bad fd argument. - AC_CACHE_CHECK([whether fdopen sets errno], [gl_cv_func_fdopen_works], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -int -main (void) -{ - FILE *fp; - errno = 0; - fp = fdopen (-1, "r"); - if (fp == NULL && errno == 0) - return 1; - return 0; -}]])], - [gl_cv_func_fdopen_works=yes], - [gl_cv_func_fdopen_works=no], - [case "$host_os" in - mingw*) gl_cv_func_fdopen_works="guessing no" ;; - *) gl_cv_func_fdopen_works="guessing yes" ;; - esac - ]) - ]) - case "$gl_cv_func_fdopen_works" in - *no) REPLACE_FDOPEN=1 ;; - esac - fi -]) - -dnl Prerequisites of lib/fdopen.c. -AC_DEFUN([gl_PREREQ_FDOPEN], []) diff --git a/gl/m4/float_h.m4 b/gl/m4/float_h.m4 deleted file mode 100644 index e2887eb5c6..0000000000 --- a/gl/m4/float_h.m4 +++ /dev/null @@ -1,98 +0,0 @@ -# float_h.m4 serial 9 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FLOAT_H], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) - FLOAT_H= - REPLACE_FLOAT_LDBL=0 - case "$host_os" in - aix* | beos* | openbsd* | mirbsd* | irix*) - FLOAT_H=float.h - ;; - freebsd*) - case "$host_cpu" in -changequote(,)dnl - i[34567]86 ) -changequote([,])dnl - FLOAT_H=float.h - ;; - x86_64 ) - # On x86_64 systems, the C compiler may still be generating - # 32-bit code. - AC_EGREP_CPP([yes], - [#if defined __LP64__ || defined __x86_64__ || defined __amd64__ - yes - #endif], - [], - [FLOAT_H=float.h]) - ;; - esac - ;; - linux*) - case "$host_cpu" in - powerpc*) - FLOAT_H=float.h - ;; - esac - ;; - esac - case "$host_os" in - aix* | freebsd* | linux*) - if test -n "$FLOAT_H"; then - REPLACE_FLOAT_LDBL=1 - fi - ;; - esac - - dnl Test against glibc-2.7 Linux/SPARC64 bug. - REPLACE_ITOLD=0 - AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works], - [gl_cv_func_itold_works], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -int i = -1; -volatile long double ld; -int main () -{ - ld += i * 1.0L; - if (ld > 0) - return 1; - return 0; -}]])], - [gl_cv_func_itold_works=yes], - [gl_cv_func_itold_works=no], - [case "$host" in - sparc*-*-linux*) - AC_EGREP_CPP([yes], - [#if defined __LP64__ || defined __arch64__ - yes - #endif], - [gl_cv_func_itold_works="guessing no"], - [gl_cv_func_itold_works="guessing yes"]) - ;; - *) gl_cv_func_itold_works="guessing yes" ;; - esac - ]) - ]) - case "$gl_cv_func_itold_works" in - *no) - REPLACE_ITOLD=1 - dnl We add the workaround to but also to , - dnl to increase the chances that the fix function gets pulled in. - FLOAT_H=float.h - ;; - esac - - if test -n "$FLOAT_H"; then - gl_NEXT_HEADERS([float.h]) - fi - AC_SUBST([FLOAT_H]) - AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"]) - AC_SUBST([REPLACE_ITOLD]) -]) diff --git a/gl/m4/fpieee.m4 b/gl/m4/fpieee.m4 deleted file mode 100644 index e11ac9f09c..0000000000 --- a/gl/m4/fpieee.m4 +++ /dev/null @@ -1,54 +0,0 @@ -# fpieee.m4 serial 2 -*- coding: utf-8 -*- -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl IEEE 754 standardized three items: -dnl - The formats of single-float and double-float - nowadays commonly -dnl available as 'float' and 'double' in C and C++. -dnl No autoconf test needed. -dnl - The overflow and division by zero behaviour: The result are values -dnl '±Inf' and 'NaN', rather than exceptions as it was before. -dnl This file provides an autoconf macro for ensuring this behaviour of -dnl floating-point operations. -dnl - A set of conditions (overflow, underflow, inexact, etc.) which can -dnl be configured to trigger an exception. -dnl This cannot be done in a portable way: it depends on the compiler, -dnl libc, kernel, and CPU. No autoconf macro is provided for this. - -dnl Ensure non-trapping behaviour of floating-point overflow and -dnl floating-point division by zero. -dnl (For integer overflow, see gcc's -ftrapv option; for integer division by -dnl zero, see the autoconf macro in intdiv0.m4.) - -AC_DEFUN([gl_FP_IEEE], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) - # IEEE behaviour is the default on all CPUs except Alpha and SH - # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 - # and the GCC 4.1.2 manual). - case "$host_cpu" in - alpha*) - # On Alpha systems, a compiler option provides the behaviour. - # See the ieee(3) manual page, also available at - # - if test -n "$GCC"; then - # GCC has the option -mieee. - # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. - CPPFLAGS="$CPPFLAGS -mieee" - else - # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. - # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. - CPPFLAGS="$CPPFLAGS -ieee" - fi - ;; - sh*) - if test -n "$GCC"; then - # GCC has the option -mieee. - CPPFLAGS="$CPPFLAGS -mieee" - fi - ;; - esac -]) diff --git a/gl/m4/fseeko.m4 b/gl/m4/fseeko.m4 deleted file mode 100644 index 6c7f551bda..0000000000 --- a/gl/m4/fseeko.m4 +++ /dev/null @@ -1,73 +0,0 @@ -# fseeko.m4 serial 17 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FSEEKO], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) - AC_REQUIRE([gl_SYS_TYPES_H]) - AC_REQUIRE([AC_PROG_CC]) - - dnl Persuade glibc to declare fseeko(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_CACHE_CHECK([for fseeko], [gl_cv_func_fseeko], - [ - AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include -]], [fseeko (stdin, 0, 0);])], - [gl_cv_func_fseeko=yes], [gl_cv_func_fseeko=no]) - ]) - - AC_CHECK_DECLS_ONCE([fseeko]) - if test $ac_cv_have_decl_fseeko = no; then - HAVE_DECL_FSEEKO=0 - fi - - if test $gl_cv_func_fseeko = no; then - HAVE_FSEEKO=0 - else - if test $WINDOWS_64_BIT_OFF_T = 1; then - REPLACE_FSEEKO=1 - fi - if test $gl_cv_var_stdin_large_offset = no; then - REPLACE_FSEEKO=1 - fi - m4_ifdef([gl_FUNC_FFLUSH_STDIN], [ - gl_FUNC_FFLUSH_STDIN - if test $gl_cv_func_fflush_stdin != yes; then - REPLACE_FSEEKO=1 - fi - ]) - fi -]) - -dnl Code shared by fseeko and ftello. Determine if large files are supported, -dnl but stdin does not start as a large file by default. -AC_DEFUN([gl_STDIN_LARGE_OFFSET], - [ - AC_CACHE_CHECK([whether stdin defaults to large file offsets], - [gl_cv_var_stdin_large_offset], - [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], -[[#if defined __SL64 && defined __SCLE /* cygwin */ - /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making - fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and - it is easier to do a version check than building a runtime test. */ -# include -# if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25) - choke me -# endif -#endif]])], - [gl_cv_var_stdin_large_offset=yes], - [gl_cv_var_stdin_large_offset=no])]) -]) - -# Prerequisites of lib/fseeko.c. -AC_DEFUN([gl_PREREQ_FSEEKO], -[ - dnl Native Windows has the function _fseeki64. mingw hides it, but mingw64 - dnl makes it usable again. - AC_CHECK_FUNCS([_fseeki64]) -]) diff --git a/gl/m4/fstat.m4 b/gl/m4/fstat.m4 deleted file mode 100644 index 29f9b81654..0000000000 --- a/gl/m4/fstat.m4 +++ /dev/null @@ -1,36 +0,0 @@ -# fstat.m4 serial 4 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FSTAT], -[ - AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) - - AC_REQUIRE([gl_MSVC_INVAL]) - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - REPLACE_FSTAT=1 - fi - - AC_REQUIRE([gl_HEADER_SYS_STAT_H]) - if test $WINDOWS_64_BIT_ST_SIZE = 1; then - REPLACE_FSTAT=1 - fi - - dnl Replace fstat() for supporting the gnulib-defined open() on directories. - m4_ifdef([gl_FUNC_FCHDIR], [ - gl_TEST_FCHDIR - if test $HAVE_FCHDIR = 0; then - case "$gl_cv_func_open_directory_works" in - *yes) ;; - *) - REPLACE_FSTAT=1 - ;; - esac - fi - ]) -]) - -# Prerequisites of lib/fstat.c. -AC_DEFUN([gl_PREREQ_FSTAT], [:]) diff --git a/gl/m4/ftell.m4 b/gl/m4/ftell.m4 deleted file mode 100644 index 6701f0a76c..0000000000 --- a/gl/m4/ftell.m4 +++ /dev/null @@ -1,15 +0,0 @@ -# ftell.m4 serial 3 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FTELL], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_REQUIRE([gl_FUNC_FTELLO]) - dnl When ftello needs fixes, ftell needs them too. - if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then - REPLACE_FTELL=1 - fi -]) diff --git a/gl/m4/ftello.m4 b/gl/m4/ftello.m4 deleted file mode 100644 index 3f4808bf37..0000000000 --- a/gl/m4/ftello.m4 +++ /dev/null @@ -1,140 +0,0 @@ -# ftello.m4 serial 11 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FTELLO], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) - AC_REQUIRE([gl_SYS_TYPES_H]) - - dnl Persuade glibc to declare ftello(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_CHECK_DECLS_ONCE([ftello]) - if test $ac_cv_have_decl_ftello = no; then - HAVE_DECL_FTELLO=0 - fi - - AC_CACHE_CHECK([for ftello], [gl_cv_func_ftello], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[ftello (stdin);]])], - [gl_cv_func_ftello=yes], - [gl_cv_func_ftello=no]) - ]) - if test $gl_cv_func_ftello = no; then - HAVE_FTELLO=0 - else - if test $WINDOWS_64_BIT_OFF_T = 1; then - REPLACE_FTELLO=1 - fi - if test $gl_cv_var_stdin_large_offset = no; then - REPLACE_FTELLO=1 - fi - if test $REPLACE_FTELLO = 0; then - dnl Detect bug on Solaris. - dnl ftell and ftello produce incorrect results after putc that followed a - dnl getc call that reached EOF on Solaris. This is because the _IOREAD - dnl flag does not get cleared in this case, even though _IOWRT gets set, - dnl and ftell and ftello look whether the _IOREAD flag is set. - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_CACHE_CHECK([whether ftello works], - [gl_cv_func_ftello_works], - [ - dnl Initial guess, used when cross-compiling or when /dev/tty cannot - dnl be opened. -changequote(,)dnl - case "$host_os" in - # Guess no on Solaris. - solaris*) gl_cv_func_ftello_works="guessing no" ;; - # Guess yes otherwise. - *) gl_cv_func_ftello_works="guessing yes" ;; - esac -changequote([,])dnl - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#define TESTFILE "conftest.tmp" -int -main (void) -{ - FILE *fp; - - /* Create a file with some contents. */ - fp = fopen (TESTFILE, "w"); - if (fp == NULL) - return 70; - if (fwrite ("foogarsh", 1, 8, fp) < 8) - return 71; - if (fclose (fp)) - return 72; - - /* The file's contents is now "foogarsh". */ - - /* Try writing after reading to EOF. */ - fp = fopen (TESTFILE, "r+"); - if (fp == NULL) - return 73; - if (fseek (fp, -1, SEEK_END)) - return 74; - if (!(getc (fp) == 'h')) - return 1; - if (!(getc (fp) == EOF)) - return 2; - if (!(ftell (fp) == 8)) - return 3; - if (!(ftell (fp) == 8)) - return 4; - if (!(putc ('!', fp) == '!')) - return 5; - if (!(ftell (fp) == 9)) - return 6; - if (!(fclose (fp) == 0)) - return 7; - fp = fopen (TESTFILE, "r"); - if (fp == NULL) - return 75; - { - char buf[10]; - if (!(fread (buf, 1, 10, fp) == 9)) - return 10; - if (!(memcmp (buf, "foogarsh!", 9) == 0)) - return 11; - } - if (!(fclose (fp) == 0)) - return 12; - - /* The file's contents is now "foogarsh!". */ - - return 0; -}]])], - [gl_cv_func_ftello_works=yes], - [gl_cv_func_ftello_works=no], [:]) - ]) - case "$gl_cv_func_ftello_works" in - *yes) ;; - *) - REPLACE_FTELLO=1 - AC_DEFINE([FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE], [1], - [Define to 1 if the system's ftello function has the Solaris bug.]) - ;; - esac - fi - fi -]) - -# Prerequisites of lib/ftello.c. -AC_DEFUN([gl_PREREQ_FTELLO], -[ - dnl Native Windows has the function _ftelli64. mingw hides it, but mingw64 - dnl makes it usable again. - AC_CHECK_FUNCS([_ftelli64]) -]) diff --git a/gl/m4/func.m4 b/gl/m4/func.m4 deleted file mode 100644 index f537b157dd..0000000000 --- a/gl/m4/func.m4 +++ /dev/null @@ -1,20 +0,0 @@ -# func.m4 serial 2 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Written by Simon Josefsson - -AC_DEFUN([gl_FUNC], -[ - AC_CACHE_CHECK([whether __func__ is available], [gl_cv_var_func], - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[]], [[const char *str = __func__;]])], - [gl_cv_var_func=yes], - [gl_cv_var_func=no])) - if test "$gl_cv_var_func" != yes; then - AC_DEFINE([__func__], [""], - [Define as a replacement for the ISO C99 __func__ variable.]) - fi -]) diff --git a/gl/m4/getdelim.m4 b/gl/m4/getdelim.m4 deleted file mode 100644 index a1a7dcc526..0000000000 --- a/gl/m4/getdelim.m4 +++ /dev/null @@ -1,90 +0,0 @@ -# getdelim.m4 serial 11 - -dnl Copyright (C) 2005-2007, 2009-2016 Free Software Foundation, Inc. -dnl -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_PREREQ([2.59]) - -AC_DEFUN([gl_FUNC_GETDELIM], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - - dnl Persuade glibc to declare getdelim(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_CHECK_DECLS_ONCE([getdelim]) - - AC_CHECK_FUNCS_ONCE([getdelim]) - if test $ac_cv_func_getdelim = yes; then - HAVE_GETDELIM=1 - dnl Found it in some library. Verify that it works. - AC_CACHE_CHECK([for working getdelim function], [gl_cv_func_working_getdelim], - [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data - AC_RUN_IFELSE([AC_LANG_SOURCE([[ -# include -# include -# include - int main () - { - FILE *in = fopen ("./conftest.data", "r"); - if (!in) - return 1; - { - /* Test result for a NULL buffer and a zero size. - Based on a test program from Karl Heuer. */ - char *line = NULL; - size_t siz = 0; - int len = getdelim (&line, &siz, '\n', in); - if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) - return 2; - } - { - /* Test result for a NULL buffer and a non-zero size. - This crashes on FreeBSD 8.0. */ - char *line = NULL; - size_t siz = (size_t)(~0) / 4; - if (getdelim (&line, &siz, '\n', in) == -1) - return 3; - free (line); - } - fclose (in); - return 0; - } - ]])], [gl_cv_func_working_getdelim=yes] dnl The library version works. - , [gl_cv_func_working_getdelim=no] dnl The library version does NOT work. - , dnl We're cross compiling. Assume it works on glibc2 systems. - [AC_EGREP_CPP([Lucky GNU user], - [ -#include -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ >= 2) && !defined __UCLIBC__ - Lucky GNU user - #endif -#endif - ], - [gl_cv_func_working_getdelim="guessing yes"], - [gl_cv_func_working_getdelim="guessing no"])] - )]) - case "$gl_cv_func_working_getdelim" in - *no) - REPLACE_GETDELIM=1 - ;; - esac - else - HAVE_GETDELIM=0 - fi - - if test $ac_cv_have_decl_getdelim = no; then - HAVE_DECL_GETDELIM=0 - fi -]) - -# Prerequisites of lib/getdelim.c. -AC_DEFUN([gl_PREREQ_GETDELIM], -[ - AC_CHECK_FUNCS([flockfile funlockfile]) - AC_CHECK_DECLS([getc_unlocked]) -]) diff --git a/gl/m4/getline.m4 b/gl/m4/getline.m4 deleted file mode 100644 index f44751cd4b..0000000000 --- a/gl/m4/getline.m4 +++ /dev/null @@ -1,99 +0,0 @@ -# getline.m4 serial 27 - -dnl Copyright (C) 1998-2003, 2005-2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_PREREQ([2.59]) - -dnl See if there's a working, system-supplied version of the getline function. -dnl We can't just do AC_REPLACE_FUNCS([getline]) because some systems -dnl have a function by that name in -linet that doesn't have anything -dnl to do with the function we need. -AC_DEFUN([gl_FUNC_GETLINE], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - - dnl Persuade glibc to declare getline(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_CHECK_DECLS_ONCE([getline]) - - gl_getline_needs_run_time_check=no - AC_CHECK_FUNC([getline], - [dnl Found it in some library. Verify that it works. - gl_getline_needs_run_time_check=yes], - [am_cv_func_working_getline=no]) - if test $gl_getline_needs_run_time_check = yes; then - AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline], - [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data - AC_RUN_IFELSE([AC_LANG_SOURCE([[ -# include -# include -# include - int main () - { - FILE *in = fopen ("./conftest.data", "r"); - if (!in) - return 1; - { - /* Test result for a NULL buffer and a zero size. - Based on a test program from Karl Heuer. */ - char *line = NULL; - size_t siz = 0; - int len = getline (&line, &siz, in); - if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) - return 2; - free (line); - } - { - /* Test result for a NULL buffer and a non-zero size. - This crashes on FreeBSD 8.0. */ - char *line = NULL; - size_t siz = (size_t)(~0) / 4; - if (getline (&line, &siz, in) == -1) - return 3; - free (line); - } - fclose (in); - return 0; - } - ]])], [am_cv_func_working_getline=yes] dnl The library version works. - , [am_cv_func_working_getline=no] dnl The library version does NOT work. - , dnl We're cross compiling. Assume it works on glibc2 systems. - [AC_EGREP_CPP([Lucky GNU user], - [ -#include -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ >= 2) && !defined __UCLIBC__ - Lucky GNU user - #endif -#endif - ], - [am_cv_func_working_getline="guessing yes"], - [am_cv_func_working_getline="guessing no"])] - )]) - fi - - if test $ac_cv_have_decl_getline = no; then - HAVE_DECL_GETLINE=0 - fi - - case "$am_cv_func_working_getline" in - *no) - dnl Set REPLACE_GETLINE always: Even if we have not found the broken - dnl getline function among $LIBS, it may exist in libinet and the - dnl executable may be linked with -linet. - REPLACE_GETLINE=1 - ;; - esac -]) - -# Prerequisites of lib/getline.c. -AC_DEFUN([gl_PREREQ_GETLINE], -[ - : -]) diff --git a/gl/m4/getpagesize.m4 b/gl/m4/getpagesize.m4 deleted file mode 100644 index 8902b7b56b..0000000000 --- a/gl/m4/getpagesize.m4 +++ /dev/null @@ -1,32 +0,0 @@ -# getpagesize.m4 serial 9 -dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_GETPAGESIZE], -[ - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_CHECK_FUNCS([getpagesize]) - if test $ac_cv_func_getpagesize = no; then - HAVE_GETPAGESIZE=0 - AC_CHECK_HEADERS([OS.h]) - if test $ac_cv_header_OS_h = yes; then - HAVE_OS_H=1 - fi - AC_CHECK_HEADERS([sys/param.h]) - if test $ac_cv_header_sys_param_h = yes; then - HAVE_SYS_PARAM_H=1 - fi - fi - case "$host_os" in - mingw*) - REPLACE_GETPAGESIZE=1 - ;; - esac - dnl Also check whether it's declared. - dnl mingw has getpagesize() in libgcc.a but doesn't declare it. - AC_CHECK_DECL([getpagesize], , [HAVE_DECL_GETPAGESIZE=0]) -]) diff --git a/gl/m4/gettimeofday.m4 b/gl/m4/gettimeofday.m4 deleted file mode 100644 index 4ae5d63fe3..0000000000 --- a/gl/m4/gettimeofday.m4 +++ /dev/null @@ -1,138 +0,0 @@ -# serial 21 - -# Copyright (C) 2001-2003, 2005, 2007, 2009-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -dnl From Jim Meyering. - -AC_DEFUN([gl_FUNC_GETTIMEOFDAY], -[ - AC_REQUIRE([AC_C_RESTRICT]) - AC_REQUIRE([gl_HEADER_SYS_TIME_H]) - AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) - AC_CHECK_FUNCS_ONCE([gettimeofday]) - - gl_gettimeofday_timezone=void - if test $ac_cv_func_gettimeofday != yes; then - HAVE_GETTIMEOFDAY=0 - else - gl_FUNC_GETTIMEOFDAY_CLOBBER - AC_CACHE_CHECK([for gettimeofday with POSIX signature], - [gl_cv_func_gettimeofday_posix_signature], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - struct timeval c; - int gettimeofday (struct timeval *restrict, void *restrict); - ]], - [[/* glibc uses struct timezone * rather than the POSIX void * - if _GNU_SOURCE is defined. However, since the only portable - use of gettimeofday uses NULL as the second parameter, and - since the glibc definition is actually more typesafe, it is - not worth wrapping this to get a compliant signature. */ - int (*f) (struct timeval *restrict, void *restrict) - = gettimeofday; - int x = f (&c, 0); - return !(x | c.tv_sec | c.tv_usec); - ]])], - [gl_cv_func_gettimeofday_posix_signature=yes], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include -int gettimeofday (struct timeval *restrict, struct timezone *restrict); - ]])], - [gl_cv_func_gettimeofday_posix_signature=almost], - [gl_cv_func_gettimeofday_posix_signature=no])])]) - if test $gl_cv_func_gettimeofday_posix_signature = almost; then - gl_gettimeofday_timezone='struct timezone' - elif test $gl_cv_func_gettimeofday_posix_signature != yes; then - REPLACE_GETTIMEOFDAY=1 - fi - dnl If we override 'struct timeval', we also have to override gettimeofday. - if test $REPLACE_STRUCT_TIMEVAL = 1; then - REPLACE_GETTIMEOFDAY=1 - fi - m4_ifdef([gl_FUNC_TZSET_CLOBBER], [ - gl_FUNC_TZSET_CLOBBER - case "$gl_cv_func_tzset_clobber" in - *yes) - REPLACE_GETTIMEOFDAY=1 - gl_GETTIMEOFDAY_REPLACE_LOCALTIME - AC_DEFINE([tzset], [rpl_tzset], - [Define to rpl_tzset if the wrapper function should be used.]) - AC_DEFINE([TZSET_CLOBBERS_LOCALTIME], [1], - [Define if tzset clobbers localtime's static buffer.]) - ;; - esac - ]) - fi - AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone], - [Define this to 'void' or 'struct timezone' to match the system's - declaration of the second argument to gettimeofday.]) -]) - - -dnl See if gettimeofday clobbers the static buffer that localtime uses -dnl for its return value. The gettimeofday function from Mac OS X 10.0.4 -dnl (i.e., Darwin 1.3.7) has this problem. -dnl -dnl If it does, then arrange to use gettimeofday and localtime only via -dnl the wrapper functions that work around the problem. - -AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER], -[ - AC_REQUIRE([gl_HEADER_SYS_TIME_H]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - - AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer], - [gl_cv_func_gettimeofday_clobber], - [AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include - #include - #include - ]], - [[ - time_t t = 0; - struct tm *lt; - struct tm saved_lt; - struct timeval tv; - lt = localtime (&t); - saved_lt = *lt; - gettimeofday (&tv, NULL); - return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0; - ]])], - [gl_cv_func_gettimeofday_clobber=no], - [gl_cv_func_gettimeofday_clobber=yes], - [# When cross-compiling: - case "$host_os" in - # Guess all is fine on glibc systems. - *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; - # If we don't know, assume the worst. - *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; - esac - ])]) - - case "$gl_cv_func_gettimeofday_clobber" in - *yes) - REPLACE_GETTIMEOFDAY=1 - gl_GETTIMEOFDAY_REPLACE_LOCALTIME - AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1], - [Define if gettimeofday clobbers the localtime buffer.]) - ;; - esac -]) - -AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [ - REPLACE_GMTIME=1 - REPLACE_LOCALTIME=1 -]) - -# Prerequisites of lib/gettimeofday.c. -AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [ - AC_CHECK_HEADERS([sys/timeb.h]) - AC_CHECK_FUNCS([_ftime]) -]) diff --git a/gl/m4/gnulib-cache.m4 b/gl/m4/gnulib-cache.m4 deleted file mode 100644 index 74d8a1562e..0000000000 --- a/gl/m4/gnulib-cache.m4 +++ /dev/null @@ -1,87 +0,0 @@ -# Copyright (C) 2002-2016 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file. If not, see . -# -# As a special exception to the GNU General Public License, -# this file may be distributed as part of a program that -# contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. -# -# This file represents the specification of how gnulib-tool is used. -# It acts as a cache: It is written and read by gnulib-tool. -# In projects that use version control, this file is meant to be put under -# version control, like the configure.ac and various Makefile.am files. - - -# Specification in the form of a command-line invocation: -# gnulib-tool --import --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=gl/tests --aux-dir=build-aux --with-tests --avoid=alignof-tests --avoid=lock-tests --avoid=lseek-tests --lgpl=2 --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files alloca byteswap c-ctype extensions func gendocs getline gettext-h gettimeofday hash-pjw-bare havelib intprops lib-msvc-compat lib-symbol-versions maintainer-makefile manywarnings memmem-simple minmax netdb netinet_in pmccabe2html read-file secure_getenv snprintf stdint strcase strndup strtok_r strverscmp sys_socket sys_stat time_r unistd valgrind-tests vasprintf vsnprintf warnings - -# Specification in the form of a few gnulib-tool.m4 macro invocations: -gl_LOCAL_DIR([gl/override]) -gl_MODULES([ - alloca - byteswap - c-ctype - extensions - func - gendocs - getline - gettext-h - gettimeofday - hash-pjw-bare - havelib - intprops - lib-msvc-compat - lib-symbol-versions - maintainer-makefile - manywarnings - memmem-simple - minmax - netdb - netinet_in - pmccabe2html - read-file - secure_getenv - snprintf - stdint - strcase - strndup - strtok_r - strverscmp - sys_socket - sys_stat - time_r - unistd - valgrind-tests - vasprintf - vsnprintf - warnings -]) -gl_AVOID([alignof-tests lock-tests lseek-tests]) -gl_SOURCE_BASE([gl]) -gl_M4_BASE([gl/m4]) -gl_PO_BASE([]) -gl_DOC_BASE([doc]) -gl_TESTS_BASE([gl/tests]) -gl_WITH_TESTS -gl_LIB([libgnu]) -gl_LGPL([2]) -gl_MAKEFILE_NAME([]) -gl_LIBTOOL -gl_MACRO_PREFIX([gl]) -gl_PO_DOMAIN([]) -gl_WITNESS_C_MACRO([]) -gl_VC_FILES([false]) diff --git a/gl/m4/gnulib-common.m4 b/gl/m4/gnulib-common.m4 deleted file mode 100644 index f8454c8a01..0000000000 --- a/gl/m4/gnulib-common.m4 +++ /dev/null @@ -1,462 +0,0 @@ -# gnulib-common.m4 serial 36 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# gl_COMMON -# is expanded unconditionally through gnulib-tool magic. -AC_DEFUN([gl_COMMON], [ - dnl Use AC_REQUIRE here, so that the code is expanded once only. - AC_REQUIRE([gl_00GNULIB]) - AC_REQUIRE([gl_COMMON_BODY]) -]) -AC_DEFUN([gl_COMMON_BODY], [ - AH_VERBATIM([_Noreturn], -[/* The _Noreturn keyword of C11. */ -#if ! (defined _Noreturn \ - || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) -# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ - || 0x5110 <= __SUNPRO_C) -# define _Noreturn __attribute__ ((__noreturn__)) -# elif defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) -# else -# define _Noreturn -# endif -#endif -]) - AH_VERBATIM([isoc99_inline], -[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports - the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of - earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. - __APPLE__ && __MACH__ test for Mac OS X. - __APPLE_CC__ tests for the Apple compiler and its version. - __STDC_VERSION__ tests for the C99 mode. */ -#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ -# define __GNUC_STDC_INLINE__ 1 -#endif]) - AH_VERBATIM([unused_parameter], -[/* Define as a marker that can be attached to declarations that might not - be used. This helps to reduce warnings, such as from - GCC -Wunused-parameter. */ -#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_UNUSED __attribute__ ((__unused__)) -#else -# define _GL_UNUSED -#endif -/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name - is a misnomer outside of parameter lists. */ -#define _UNUSED_PARAMETER_ _GL_UNUSED - -/* gcc supports the "unused" attribute on possibly unused labels, and - g++ has since version 4.5. Note to support C++ as well as C, - _GL_UNUSED_LABEL should be used with a trailing ; */ -#if !defined __cplusplus || __GNUC__ > 4 \ - || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -# define _GL_UNUSED_LABEL _GL_UNUSED -#else -# define _GL_UNUSED_LABEL -#endif - -/* The __pure__ attribute was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ -#endif - -/* The __const__ attribute was added in gcc 2.95. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) -# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) -#else -# define _GL_ATTRIBUTE_CONST /* empty */ -#endif -]) - dnl Preparation for running test programs: - dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not - dnl to /dev/tty, so they can be redirected to log files. Such diagnostics - dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. - LIBC_FATAL_STDERR_=1 - export LIBC_FATAL_STDERR_ -]) - -# gl_MODULE_INDICATOR_CONDITION -# expands to a C preprocessor expression that evaluates to 1 or 0, depending -# whether a gnulib module that has been requested shall be considered present -# or not. -m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) - -# gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) -# sets the shell variable that indicates the presence of the given module to -# a C preprocessor expression that will evaluate to 1. -AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], -[ - gl_MODULE_INDICATOR_SET_VARIABLE_AUX( - [GNULIB_[]m4_translit([[$1]], - [abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], - [gl_MODULE_INDICATOR_CONDITION]) -]) - -# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) -# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. -# The shell variable's value is a C preprocessor expression that evaluates -# to 0 or 1. -AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], -[ - m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], - [ - dnl Simplify the expression VALUE || 1 to 1. - $1=1 - ], - [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], - [gl_MODULE_INDICATOR_CONDITION])]) -]) - -# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) -# modifies the shell variable to include the given condition. The shell -# variable's value is a C preprocessor expression that evaluates to 0 or 1. -AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], -[ - dnl Simplify the expression 1 || CONDITION to 1. - if test "$[]$1" != 1; then - dnl Simplify the expression 0 || CONDITION to CONDITION. - if test "$[]$1" = 0; then - $1=$2 - else - $1="($[]$1 || $2)" - fi - fi -]) - -# gl_MODULE_INDICATOR([modulename]) -# defines a C macro indicating the presence of the given module -# in a location where it can be used. -# | Value | Value | -# | in lib/ | in tests/ | -# --------------------------------------------+---------+-----------+ -# Module present among main modules: | 1 | 1 | -# --------------------------------------------+---------+-----------+ -# Module present among tests-related modules: | 0 | 1 | -# --------------------------------------------+---------+-----------+ -# Module not present at all: | 0 | 0 | -# --------------------------------------------+---------+-----------+ -AC_DEFUN([gl_MODULE_INDICATOR], -[ - AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], - [abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), - [gl_MODULE_INDICATOR_CONDITION], - [Define to a C preprocessor expression that evaluates to 1 or 0, - depending whether the gnulib module $1 shall be considered present.]) -]) - -# gl_MODULE_INDICATOR_FOR_TESTS([modulename]) -# defines a C macro indicating the presence of the given module -# in lib or tests. This is useful to determine whether the module -# should be tested. -# | Value | Value | -# | in lib/ | in tests/ | -# --------------------------------------------+---------+-----------+ -# Module present among main modules: | 1 | 1 | -# --------------------------------------------+---------+-----------+ -# Module present among tests-related modules: | 1 | 1 | -# --------------------------------------------+---------+-----------+ -# Module not present at all: | 0 | 0 | -# --------------------------------------------+---------+-----------+ -AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], -[ - AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], - [abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], - [Define to 1 when the gnulib module $1 should be tested.]) -]) - -# gl_ASSERT_NO_GNULIB_POSIXCHECK -# asserts that there will never be a need to #define GNULIB_POSIXCHECK. -# and thereby enables an optimization of configure and config.h. -# Used by Emacs. -AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], -[ - dnl Override gl_WARN_ON_USE_PREPARE. - dnl But hide this definition from 'aclocal'. - AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) -]) - -# gl_ASSERT_NO_GNULIB_TESTS -# asserts that there will be no gnulib tests in the scope of the configure.ac -# and thereby enables an optimization of config.h. -# Used by Emacs. -AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], -[ - dnl Override gl_MODULE_INDICATOR_FOR_TESTS. - AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) -]) - -# Test whether exists. -# Set HAVE_FEATURES_H. -AC_DEFUN([gl_FEATURES_H], -[ - AC_CHECK_HEADERS_ONCE([features.h]) - if test $ac_cv_header_features_h = yes; then - HAVE_FEATURES_H=1 - else - HAVE_FEATURES_H=0 - fi - AC_SUBST([HAVE_FEATURES_H]) -]) - -# m4_foreach_w -# is a backport of autoconf-2.59c's m4_foreach_w. -# Remove this macro when we can assume autoconf >= 2.60. -m4_ifndef([m4_foreach_w], - [m4_define([m4_foreach_w], - [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) - -# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) -# ---------------------------------------------------- -# Backport of autoconf-2.63b's macro. -# Remove this macro when we can assume autoconf >= 2.64. -m4_ifndef([AS_VAR_IF], -[m4_define([AS_VAR_IF], -[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])]) - -# gl_PROG_CC_C99 -# Modifies the value of the shell variable CC in an attempt to make $CC -# understand ISO C99 source code. -# This is like AC_PROG_CC_C99, except that -# - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60, -# - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC -# , -# but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 -# . -# Remaining problems: -# - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options -# to CC twice -# . -# - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard. -AC_DEFUN([gl_PROG_CC_C99], -[ - dnl Change that version number to the minimum Autoconf version that supports - dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. - m4_version_prereq([9.0], - [AC_REQUIRE([AC_PROG_CC_C99])], - [AC_REQUIRE([AC_PROG_CC_STDC])]) -]) - -# gl_PROG_AR_RANLIB -# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. -# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override -# the values. -AC_DEFUN([gl_PROG_AR_RANLIB], -[ - dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler - dnl as "cc", and GCC as "gcc". They have different object file formats and - dnl library formats. In particular, the GNU binutils programs ar and ranlib - dnl produce libraries that work only with gcc, not with cc. - AC_REQUIRE([AC_PROG_CC]) - AC_BEFORE([$0], [AM_PROG_AR]) - AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], - [ - AC_EGREP_CPP([Amsterdam], - [ -#ifdef __ACK__ -Amsterdam -#endif - ], - [gl_cv_c_amsterdam_compiler=yes], - [gl_cv_c_amsterdam_compiler=no]) - ]) - - dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not - dnl building with __ACK__. - if test $gl_cv_c_amsterdam_compiler = yes; then - if test -z "$AR"; then - AR='cc -c.a' - fi - if test -z "$ARFLAGS"; then - ARFLAGS='-o' - fi - else - dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST - dnl ARFLAGS variable (it is filed into Makefile.in directly by automake - dnl script on-demand, if not specified by ./configure of course). - dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above - dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block - dnl because AM_PROG_AR is written so it could re-set AR variable even for - dnl __ACK__. It may seem like its easier to avoid calling the macro here, - dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good - dnl default value and automake should usually know them). - m4_ifdef([AM_PROG_AR], [AM_PROG_AR], [:]) - fi - - dnl In case the code above has not helped with setting AR/ARFLAGS, use - dnl Automake-documented default values for AR and ARFLAGS, but prefer - dnl ${host}-ar over ar (useful for cross-compiling). - AC_CHECK_TOOL([AR], [ar], [ar]) - if test -z "$ARFLAGS"; then - ARFLAGS='cr' - fi - - AC_SUBST([AR]) - AC_SUBST([ARFLAGS]) - if test -z "$RANLIB"; then - if test $gl_cv_c_amsterdam_compiler = yes; then - RANLIB=':' - else - dnl Use the ranlib program if it is available. - AC_PROG_RANLIB - fi - fi - AC_SUBST([RANLIB]) -]) - -# AC_PROG_MKDIR_P -# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix -# for interoperability with automake-1.9.6 from autoconf-2.62. -# Remove this macro when we can assume autoconf >= 2.62 or -# autoconf >= 2.60 && automake >= 1.10. -# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness. -m4_ifndef([AC_AUTOCONF_VERSION],[ -m4_ifdef([AC_PROG_MKDIR_P], [ - dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed. - m4_define([AC_PROG_MKDIR_P], - m4_defn([AC_PROG_MKDIR_P])[ - AC_SUBST([MKDIR_P])])], [ - dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P. - AC_DEFUN_ONCE([AC_PROG_MKDIR_P], - [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake - MKDIR_P='$(mkdir_p)' - AC_SUBST([MKDIR_P])])]) -]) - -# AC_C_RESTRICT -# This definition is copied from post-2.69 Autoconf and overrides the -# AC_C_RESTRICT macro from autoconf 2.60..2.69. It can be removed -# once autoconf >= 2.70 can be assumed. It's painful to check version -# numbers, and in practice this macro is more up-to-date than Autoconf -# is, so override Autoconf unconditionally. -AC_DEFUN([AC_C_RESTRICT], -[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], - [ac_cv_c_restrict=no - # The order here caters to the fact that C++ does not require restrict. - for ac_kw in __restrict __restrict__ _Restrict restrict; do - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[typedef int *int_ptr; - int foo (int_ptr $ac_kw ip) { return ip[0]; } - int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ - int bar (int ip[$ac_kw]) { return ip[0]; } - ]], - [[int s[1]; - int *$ac_kw t = s; - t[0] = 0; - return foo (t) + bar (t); - ]])], - [ac_cv_c_restrict=$ac_kw]) - test "$ac_cv_c_restrict" != no && break - done - ]) - AH_VERBATIM([restrict], -[/* Define to the equivalent of the C99 'restrict' keyword, or to - nothing if this is not supported. Do not define if restrict is - supported directly. */ -#undef restrict -/* Work around a bug in Sun C++: it does not support _Restrict or - __restrict__, even though the corresponding Sun C compiler ends up with - "#define restrict _Restrict" or "#define restrict __restrict__" in the - previous line. Perhaps some future version of Sun C++ will work with - restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ -#if defined __SUNPRO_CC && !defined __RESTRICT -# define _Restrict -# define __restrict__ -#endif]) - case $ac_cv_c_restrict in - restrict) ;; - no) AC_DEFINE([restrict], []) ;; - *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; - esac -])# AC_C_RESTRICT - -# gl_BIGENDIAN -# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. -# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some -# macros invoke AC_C_BIGENDIAN with arguments. -AC_DEFUN([gl_BIGENDIAN], -[ - AC_C_BIGENDIAN -]) - -# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) -# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not -# output a spurious "(cached)" mark in the midst of other configure output. -# This macro should be used instead of AC_CACHE_VAL when it is not surrounded -# by an AC_MSG_CHECKING/AC_MSG_RESULT pair. -AC_DEFUN([gl_CACHE_VAL_SILENT], -[ - saved_as_echo_n="$as_echo_n" - as_echo_n=':' - AC_CACHE_VAL([$1], [$2]) - as_echo_n="$saved_as_echo_n" -]) - -# AS_VAR_COPY was added in autoconf 2.63b -m4_define_default([AS_VAR_COPY], -[AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])]) - -# AC_PROG_SED was added in autoconf 2.59b -m4_ifndef([AC_PROG_SED], -[AC_DEFUN([AC_PROG_SED], -[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED, - [dnl ac_script should not contain more than 99 commands (for HP-UX sed), - dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed. - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - AS_UNSET([ac_script]) - if test -z "$SED"; then - ac_path_SED_found=false - _AS_PATH_WALK([], [ - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - AS_EXECUTABLE_P(["$ac_path_SED"]) || continue - case `"$ac_path_SED" --version 2>&1` in - *GNU*) ac_cv_path_SED=$ac_path_SED ac_path_SED_found=:;; - *) - ac_count=0 - _AS_ECHO_N([0123456789]) >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >> conftest.nl - "$ac_path_SED" -f conftest.sed conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best so far, but keep looking for better - ac_cv_path_SED=$ac_path_SED - ac_path_SED_max=$ac_count - fi - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; - esac - $ac_path_SED_found && break 3 - done - done]) - if test -z "$ac_cv_path_SED"; then - AC_ERROR([no acceptable sed could be found in \$PATH]) - fi - else - ac_cv_path_SED=$SED - fi - SED="$ac_cv_path_SED" - AC_SUBST([SED])dnl - rm -f conftest.sed -])])]) diff --git a/gl/m4/gnulib-comp.m4 b/gl/m4/gnulib-comp.m4 deleted file mode 100644 index 27af5dfa68..0000000000 --- a/gl/m4/gnulib-comp.m4 +++ /dev/null @@ -1,831 +0,0 @@ -# DO NOT EDIT! GENERATED AUTOMATICALLY! -# Copyright (C) 2002-2016 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file. If not, see . -# -# As a special exception to the GNU General Public License, -# this file may be distributed as part of a program that -# contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. -# -# This file represents the compiled summary of the specification in -# gnulib-cache.m4. It lists the computed macro invocations that need -# to be invoked from configure.ac. -# In projects that use version control, this file can be treated like -# other built files. - - -# This macro should be invoked from ./configure.ac, in the section -# "Checks for programs", right after AC_PROG_CC, and certainly before -# any checks for libraries, header files, types and library functions. -AC_DEFUN([gl_EARLY], -[ - m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace - m4_pattern_allow([^gl_ES$])dnl a valid locale name - m4_pattern_allow([^gl_LIBOBJS$])dnl a variable - m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable - - # Pre-early section. - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - AC_REQUIRE([gl_PROG_AR_RANLIB]) - - # Code from module absolute-header: - # Code from module alloca: - # Code from module alloca-opt: - # Code from module alloca-opt-tests: - # Code from module binary-io: - # Code from module binary-io-tests: - # Code from module byteswap: - # Code from module byteswap-tests: - # Code from module c-ctype: - # Code from module c-ctype-tests: - # Code from module ctype: - # Code from module ctype-tests: - # Code from module errno: - # Code from module errno-tests: - # Code from module extensions: - # Code from module extern-inline: - # Code from module fcntl-h: - # Code from module fcntl-h-tests: - # Code from module fdopen: - # Code from module fdopen-tests: - # Code from module fgetc-tests: - # Code from module float: - # Code from module float-tests: - # Code from module fpieee: - AC_REQUIRE([gl_FP_IEEE]) - # Code from module fpucw: - # Code from module fputc-tests: - # Code from module fread-tests: - # Code from module fstat: - # Code from module fstat-tests: - # Code from module ftell: - # Code from module ftell-tests: - # Code from module ftello: - AC_REQUIRE([AC_FUNC_FSEEKO]) - # Code from module ftello-tests: - # Code from module func: - # Code from module func-tests: - # Code from module fwrite-tests: - # Code from module gendocs: - # Code from module getdelim: - # Code from module getdelim-tests: - # Code from module getline: - # Code from module getline-tests: - # Code from module getpagesize: - # Code from module gettext-h: - # Code from module gettimeofday: - # Code from module gettimeofday-tests: - # Code from module gnumakefile: - # Code from module hash-pjw-bare: - # Code from module havelib: - # Code from module include_next: - # Code from module intprops: - # Code from module intprops-tests: - # Code from module inttypes: - # Code from module inttypes-incomplete: - # Code from module inttypes-tests: - # Code from module largefile: - AC_REQUIRE([AC_SYS_LARGEFILE]) - # Code from module lib-msvc-compat: - # Code from module lib-symbol-versions: - # Code from module limits-h: - # Code from module limits-h-tests: - # Code from module lseek: - # Code from module maintainer-makefile: - # Code from module malloc-posix: - # Code from module manywarnings: - # Code from module memchr: - # Code from module memchr-tests: - # Code from module memmem-simple: - # Code from module minmax: - # Code from module msvc-inval: - # Code from module msvc-nothrow: - # Code from module multiarch: - # Code from module netdb: - # Code from module netdb-tests: - # Code from module netinet_in: - # Code from module netinet_in-tests: - # Code from module pmccabe2html: - # Code from module read-file: - # Code from module read-file-tests: - # Code from module realloc-posix: - # Code from module secure_getenv: - # Code from module size_max: - # Code from module snippet/_Noreturn: - # Code from module snippet/arg-nonnull: - # Code from module snippet/c++defs: - # Code from module snippet/warn-on-use: - # Code from module snprintf: - # Code from module snprintf-tests: - # Code from module socklen: - # Code from module ssize_t: - # Code from module stdalign: - # Code from module stdalign-tests: - # Code from module stdbool: - # Code from module stdbool-tests: - # Code from module stddef: - # Code from module stddef-tests: - # Code from module stdint: - # Code from module stdint-tests: - # Code from module stdio: - # Code from module stdio-tests: - # Code from module stdlib: - # Code from module stdlib-tests: - # Code from module strcase: - # Code from module string: - # Code from module string-tests: - # Code from module strings: - # Code from module strings-tests: - # Code from module strndup: - # Code from module strnlen: - # Code from module strnlen-tests: - # Code from module strtok_r: - # Code from module strverscmp: - # Code from module strverscmp-tests: - # Code from module sys_socket: - # Code from module sys_socket-tests: - # Code from module sys_stat: - # Code from module sys_stat-tests: - # Code from module sys_time: - # Code from module sys_time-tests: - # Code from module sys_types: - # Code from module sys_types-tests: - # Code from module sys_uio: - # Code from module sys_uio-tests: - # Code from module test-framework-sh: - # Code from module test-framework-sh-tests: - # Code from module time: - # Code from module time-tests: - # Code from module time_r: - # Code from module unistd: - # Code from module unistd-tests: - # Code from module useless-if-before-free: - # Code from module valgrind-tests: - # Code from module vasnprintf: - # Code from module vasnprintf-tests: - # Code from module vasprintf: - # Code from module vasprintf-tests: - # Code from module vc-list-files: - # Code from module vc-list-files-tests: - # Code from module verify: - # Code from module verify-tests: - # Code from module vsnprintf: - # Code from module vsnprintf-tests: - # Code from module warnings: - # Code from module wchar: - # Code from module wchar-tests: - # Code from module xsize: -]) - -# This macro should be invoked from ./configure.ac, in the section -# "Check for header files, types and library functions". -AC_DEFUN([gl_INIT], -[ - AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) - gl_cond_libtool=true - gl_m4_base='gl/m4' - m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) - m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) - m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) - m4_pushdef([gl_LIBSOURCES_LIST], []) - m4_pushdef([gl_LIBSOURCES_DIR], []) - gl_COMMON - gl_source_base='gl' -changequote(,)dnl -LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` -changequote([, ])dnl -AC_SUBST([LTALLOCA]) - gl_FUNC_ALLOCA - gl_BYTESWAP - gl_HEADER_ERRNO_H - AC_REQUIRE([gl_EXTERN_INLINE]) - gl_FLOAT_H - if test $REPLACE_FLOAT_LDBL = 1; then - AC_LIBOBJ([float]) - fi - if test $REPLACE_ITOLD = 1; then - AC_LIBOBJ([itold]) - fi - gl_FUNC_FSTAT - if test $REPLACE_FSTAT = 1; then - AC_LIBOBJ([fstat]) - gl_PREREQ_FSTAT - fi - gl_SYS_STAT_MODULE_INDICATOR([fstat]) - gl_FUNC_FTELL - if test $REPLACE_FTELL = 1; then - AC_LIBOBJ([ftell]) - fi - gl_STDIO_MODULE_INDICATOR([ftell]) - gl_FUNC_FTELLO - if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then - AC_LIBOBJ([ftello]) - gl_PREREQ_FTELLO - fi - gl_STDIO_MODULE_INDICATOR([ftello]) - gl_FUNC - gl_FUNC_GETDELIM - if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then - AC_LIBOBJ([getdelim]) - gl_PREREQ_GETDELIM - fi - gl_STDIO_MODULE_INDICATOR([getdelim]) - gl_FUNC_GETLINE - if test $REPLACE_GETLINE = 1; then - AC_LIBOBJ([getline]) - gl_PREREQ_GETLINE - fi - gl_STDIO_MODULE_INDICATOR([getline]) - AC_SUBST([LIBINTL]) - AC_SUBST([LTLIBINTL]) - gl_FUNC_GETTIMEOFDAY - if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then - AC_LIBOBJ([gettimeofday]) - gl_PREREQ_GETTIMEOFDAY - fi - gl_SYS_TIME_MODULE_INDICATOR([gettimeofday]) - # Autoconf 2.61a.99 and earlier don't support linking a file only - # in VPATH builds. But since GNUmakefile is for maintainer use - # only, it does not matter if we skip the link with older autoconf. - # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH - # builds, so use a shell variable to bypass this. - GNUmakefile=GNUmakefile - m4_if(m4_version_compare([2.61a.100], - m4_defn([m4_PACKAGE_VERSION])), [1], [], - [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [], - [GNUmakefile=$GNUmakefile])]) - AC_REQUIRE([gl_LARGEFILE]) - gl_LD_OUTPUT_DEF - gl_LD_VERSION_SCRIPT - gl_LIMITS_H - gl_FUNC_LSEEK - if test $REPLACE_LSEEK = 1; then - AC_LIBOBJ([lseek]) - fi - gl_UNISTD_MODULE_INDICATOR([lseek]) - AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER], - [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])]) - AC_REQUIRE([AC_PROG_SED]) - gl_FUNC_MALLOC_POSIX - if test $REPLACE_MALLOC = 1; then - AC_LIBOBJ([malloc]) - fi - gl_STDLIB_MODULE_INDICATOR([malloc-posix]) - gl_FUNC_MEMCHR - if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then - AC_LIBOBJ([memchr]) - gl_PREREQ_MEMCHR - fi - gl_STRING_MODULE_INDICATOR([memchr]) - gl_FUNC_MEMMEM_SIMPLE - if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then - AC_LIBOBJ([memmem]) - fi - gl_STRING_MODULE_INDICATOR([memmem]) - gl_MINMAX - AC_REQUIRE([gl_MSVC_INVAL]) - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - AC_LIBOBJ([msvc-inval]) - fi - AC_REQUIRE([gl_MSVC_NOTHROW]) - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - AC_LIBOBJ([msvc-nothrow]) - fi - gl_MULTIARCH - gl_HEADER_NETDB - gl_HEADER_NETINET_IN - AC_PROG_MKDIR_P - AC_PATH_PROG([PMCCABE], [pmccabe], [false]) - gl_PREREQ_READ_FILE - gl_FUNC_REALLOC_POSIX - if test $REPLACE_REALLOC = 1; then - AC_LIBOBJ([realloc]) - fi - gl_STDLIB_MODULE_INDICATOR([realloc-posix]) - gl_FUNC_SECURE_GETENV - if test $HAVE_SECURE_GETENV = 0; then - AC_LIBOBJ([secure_getenv]) - gl_PREREQ_SECURE_GETENV - fi - gl_STDLIB_MODULE_INDICATOR([secure_getenv]) - gl_SIZE_MAX - gl_FUNC_SNPRINTF - gl_STDIO_MODULE_INDICATOR([snprintf]) - gl_MODULE_INDICATOR([snprintf]) - gl_TYPE_SOCKLEN_T - gt_TYPE_SSIZE_T - gl_STDALIGN_H - AM_STDBOOL_H - gl_STDDEF_H - gl_STDINT_H - gl_STDIO_H - gl_STDLIB_H - gl_STRCASE - if test $HAVE_STRCASECMP = 0; then - AC_LIBOBJ([strcasecmp]) - gl_PREREQ_STRCASECMP - fi - if test $HAVE_STRNCASECMP = 0; then - AC_LIBOBJ([strncasecmp]) - gl_PREREQ_STRNCASECMP - fi - gl_HEADER_STRING_H - gl_HEADER_STRINGS_H - gl_FUNC_STRNDUP - if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then - AC_LIBOBJ([strndup]) - fi - gl_STRING_MODULE_INDICATOR([strndup]) - gl_FUNC_STRNLEN - if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then - AC_LIBOBJ([strnlen]) - gl_PREREQ_STRNLEN - fi - gl_STRING_MODULE_INDICATOR([strnlen]) - gl_FUNC_STRTOK_R - if test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1; then - AC_LIBOBJ([strtok_r]) - gl_PREREQ_STRTOK_R - fi - gl_STRING_MODULE_INDICATOR([strtok_r]) - gl_FUNC_STRVERSCMP - if test $HAVE_STRVERSCMP = 0; then - AC_LIBOBJ([strverscmp]) - gl_PREREQ_STRVERSCMP - fi - gl_STRING_MODULE_INDICATOR([strverscmp]) - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - AC_PROG_MKDIR_P - gl_HEADER_SYS_STAT_H - AC_PROG_MKDIR_P - gl_HEADER_SYS_TIME_H - AC_PROG_MKDIR_P - gl_SYS_TYPES_H - AC_PROG_MKDIR_P - gl_HEADER_SYS_UIO - AC_PROG_MKDIR_P - gl_HEADER_TIME_H - gl_TIME_R - if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then - AC_LIBOBJ([time_r]) - gl_PREREQ_TIME_R - fi - gl_TIME_MODULE_INDICATOR([time_r]) - gl_UNISTD_H - gl_VALGRIND_TESTS - gl_FUNC_VASNPRINTF - gl_FUNC_VASPRINTF - gl_STDIO_MODULE_INDICATOR([vasprintf]) - m4_ifdef([AM_XGETTEXT_OPTION], - [AM_][XGETTEXT_OPTION([--flag=asprintf:2:c-format]) - AM_][XGETTEXT_OPTION([--flag=vasprintf:2:c-format])]) - gl_FUNC_VSNPRINTF - gl_STDIO_MODULE_INDICATOR([vsnprintf]) - gl_WCHAR_H - gl_XSIZE - # End of code from modules - m4_ifval(gl_LIBSOURCES_LIST, [ - m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || - for gl_file in ]gl_LIBSOURCES_LIST[ ; do - if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then - echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 - exit 1 - fi - done])dnl - m4_if(m4_sysval, [0], [], - [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) - ]) - m4_popdef([gl_LIBSOURCES_DIR]) - m4_popdef([gl_LIBSOURCES_LIST]) - m4_popdef([AC_LIBSOURCES]) - m4_popdef([AC_REPLACE_FUNCS]) - m4_popdef([AC_LIBOBJ]) - AC_CONFIG_COMMANDS_PRE([ - gl_libobjs= - gl_ltlibobjs= - if test -n "$gl_LIBOBJS"; then - # Remove the extension. - sed_drop_objext='s/\.o$//;s/\.obj$//' - for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do - gl_libobjs="$gl_libobjs $i.$ac_objext" - gl_ltlibobjs="$gl_ltlibobjs $i.lo" - done - fi - AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) - AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) - ]) - gltests_libdeps= - gltests_ltlibdeps= - m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) - m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) - m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) - m4_pushdef([gltests_LIBSOURCES_LIST], []) - m4_pushdef([gltests_LIBSOURCES_DIR], []) - gl_COMMON - gl_source_base='gl/tests' -changequote(,)dnl - gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS -changequote([, ])dnl - AC_SUBST([gltests_WITNESS]) - gl_module_indicator_condition=$gltests_WITNESS - m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) - gl_CTYPE_H - gl_FCNTL_H - gl_FUNC_FDOPEN - if test $REPLACE_FDOPEN = 1; then - AC_LIBOBJ([fdopen]) - gl_PREREQ_FDOPEN - fi - gl_STDIO_MODULE_INDICATOR([fdopen]) - gl_FUNC_UNGETC_WORKS - gl_FUNC_UNGETC_WORKS - gl_FUNC_GETPAGESIZE - if test $REPLACE_GETPAGESIZE = 1; then - AC_LIBOBJ([getpagesize]) - fi - gl_UNISTD_MODULE_INDICATOR([getpagesize]) - gl_INTTYPES_H - gl_INTTYPES_INCOMPLETE - dnl Check for prerequisites for memory fence checks. - gl_FUNC_MMAP_ANON - AC_CHECK_HEADERS_ONCE([sys/mman.h]) - AC_CHECK_FUNCS_ONCE([mprotect]) - AC_REQUIRE([gt_TYPE_WCHAR_T]) - AC_REQUIRE([gt_TYPE_WINT_T]) - dnl Check for prerequisites for memory fence checks. - gl_FUNC_MMAP_ANON - AC_CHECK_HEADERS_ONCE([sys/mman.h]) - AC_CHECK_FUNCS_ONCE([mprotect]) - AC_CHECK_FUNCS_ONCE([shutdown]) - gl_VALGRIND_TESTS - abs_aux_dir=`cd "$ac_aux_dir"; pwd` - AC_SUBST([abs_aux_dir]) - m4_popdef([gl_MODULE_INDICATOR_CONDITION]) - m4_ifval(gltests_LIBSOURCES_LIST, [ - m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || - for gl_file in ]gltests_LIBSOURCES_LIST[ ; do - if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then - echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 - exit 1 - fi - done])dnl - m4_if(m4_sysval, [0], [], - [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) - ]) - m4_popdef([gltests_LIBSOURCES_DIR]) - m4_popdef([gltests_LIBSOURCES_LIST]) - m4_popdef([AC_LIBSOURCES]) - m4_popdef([AC_REPLACE_FUNCS]) - m4_popdef([AC_LIBOBJ]) - AC_CONFIG_COMMANDS_PRE([ - gltests_libobjs= - gltests_ltlibobjs= - if test -n "$gltests_LIBOBJS"; then - # Remove the extension. - sed_drop_objext='s/\.o$//;s/\.obj$//' - for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do - gltests_libobjs="$gltests_libobjs $i.$ac_objext" - gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" - done - fi - AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) - AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) - ]) - LIBTESTS_LIBDEPS="$gltests_libdeps" - AC_SUBST([LIBTESTS_LIBDEPS]) -]) - -# Like AC_LIBOBJ, except that the module name goes -# into gl_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([gl_LIBOBJ], [ - AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl - gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" -]) - -# Like AC_REPLACE_FUNCS, except that the module name goes -# into gl_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([gl_REPLACE_FUNCS], [ - m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl - AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) -]) - -# Like AC_LIBSOURCES, except the directory where the source file is -# expected is derived from the gnulib-tool parameterization, -# and alloca is special cased (for the alloca-opt module). -# We could also entirely rely on EXTRA_lib..._SOURCES. -AC_DEFUN([gl_LIBSOURCES], [ - m4_foreach([_gl_NAME], [$1], [ - m4_if(_gl_NAME, [alloca.c], [], [ - m4_define([gl_LIBSOURCES_DIR], [gl]) - m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) - ]) - ]) -]) - -# Like AC_LIBOBJ, except that the module name goes -# into gltests_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([gltests_LIBOBJ], [ - AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl - gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" -]) - -# Like AC_REPLACE_FUNCS, except that the module name goes -# into gltests_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([gltests_REPLACE_FUNCS], [ - m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl - AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) -]) - -# Like AC_LIBSOURCES, except the directory where the source file is -# expected is derived from the gnulib-tool parameterization, -# and alloca is special cased (for the alloca-opt module). -# We could also entirely rely on EXTRA_lib..._SOURCES. -AC_DEFUN([gltests_LIBSOURCES], [ - m4_foreach([_gl_NAME], [$1], [ - m4_if(_gl_NAME, [alloca.c], [], [ - m4_define([gltests_LIBSOURCES_DIR], [gl/tests]) - m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) - ]) - ]) -]) - -# This macro records the list of files which have been installed by -# gnulib-tool and may be removed by future gnulib-tool invocations. -AC_DEFUN([gl_FILE_LIST], [ - build-aux/config.rpath - build-aux/gendocs.sh - build-aux/pmccabe.css - build-aux/pmccabe2html - build-aux/snippet/_Noreturn.h - build-aux/snippet/arg-nonnull.h - build-aux/snippet/c++defs.h - build-aux/snippet/warn-on-use.h - build-aux/useless-if-before-free - build-aux/vc-list-files - doc/gendocs_template - doc/gendocs_template_min - lib/alloca.c - lib/alloca.in.h - lib/asnprintf.c - lib/asprintf.c - lib/byteswap.in.h - lib/c-ctype.c - lib/c-ctype.h - lib/errno.in.h - lib/float+.h - lib/float.c - lib/float.in.h - lib/fstat.c - lib/ftell.c - lib/ftello.c - lib/getdelim.c - lib/getline.c - lib/gettext.h - lib/gettimeofday.c - lib/hash-pjw-bare.c - lib/hash-pjw-bare.h - lib/intprops.h - lib/itold.c - lib/limits.in.h - lib/lseek.c - lib/malloc.c - lib/memchr.c - lib/memchr.valgrind - lib/memmem.c - lib/minmax.h - lib/msvc-inval.c - lib/msvc-inval.h - lib/msvc-nothrow.c - lib/msvc-nothrow.h - lib/netdb.in.h - lib/netinet_in.in.h - lib/printf-args.c - lib/printf-args.h - lib/printf-parse.c - lib/printf-parse.h - lib/read-file.c - lib/read-file.h - lib/realloc.c - lib/secure_getenv.c - lib/size_max.h - lib/snprintf.c - lib/stdalign.in.h - lib/stdbool.in.h - lib/stddef.in.h - lib/stdint.in.h - lib/stdio-impl.h - lib/stdio.in.h - lib/stdlib.in.h - lib/str-two-way.h - lib/strcasecmp.c - lib/string.in.h - lib/strings.in.h - lib/strncasecmp.c - lib/strndup.c - lib/strnlen.c - lib/strtok_r.c - lib/strverscmp.c - lib/sys_socket.c - lib/sys_socket.in.h - lib/sys_stat.in.h - lib/sys_time.in.h - lib/sys_types.in.h - lib/sys_uio.in.h - lib/time.in.h - lib/time_r.c - lib/unistd.c - lib/unistd.in.h - lib/vasnprintf.c - lib/vasnprintf.h - lib/vasprintf.c - lib/verify.h - lib/vsnprintf.c - lib/wchar.in.h - lib/xsize.c - lib/xsize.h - m4/00gnulib.m4 - m4/absolute-header.m4 - m4/alloca.m4 - m4/byteswap.m4 - m4/ctype.m4 - m4/errno_h.m4 - m4/exponentd.m4 - m4/extensions.m4 - m4/extern-inline.m4 - m4/fcntl-o.m4 - m4/fcntl_h.m4 - m4/fdopen.m4 - m4/float_h.m4 - m4/fpieee.m4 - m4/fseeko.m4 - m4/fstat.m4 - m4/ftell.m4 - m4/ftello.m4 - m4/func.m4 - m4/getdelim.m4 - m4/getline.m4 - m4/getpagesize.m4 - m4/gettimeofday.m4 - m4/gnulib-common.m4 - m4/include_next.m4 - m4/intmax_t.m4 - m4/inttypes-pri.m4 - m4/inttypes.m4 - m4/inttypes_h.m4 - m4/largefile.m4 - m4/ld-output-def.m4 - m4/ld-version-script.m4 - m4/lib-ld.m4 - m4/lib-link.m4 - m4/lib-prefix.m4 - m4/limits-h.m4 - m4/longlong.m4 - m4/lseek.m4 - m4/malloc.m4 - m4/manywarnings.m4 - m4/math_h.m4 - m4/memchr.m4 - m4/memmem.m4 - m4/minmax.m4 - m4/mmap-anon.m4 - m4/msvc-inval.m4 - m4/msvc-nothrow.m4 - m4/multiarch.m4 - m4/netdb_h.m4 - m4/netinet_in_h.m4 - m4/off_t.m4 - m4/printf.m4 - m4/read-file.m4 - m4/realloc.m4 - m4/secure_getenv.m4 - m4/size_max.m4 - m4/snprintf.m4 - m4/socklen.m4 - m4/sockpfaf.m4 - m4/ssize_t.m4 - m4/stdalign.m4 - m4/stdbool.m4 - m4/stddef_h.m4 - m4/stdint.m4 - m4/stdint_h.m4 - m4/stdio_h.m4 - m4/stdlib_h.m4 - m4/strcase.m4 - m4/string_h.m4 - m4/strings_h.m4 - m4/strndup.m4 - m4/strnlen.m4 - m4/strtok_r.m4 - m4/strverscmp.m4 - m4/sys_socket_h.m4 - m4/sys_stat_h.m4 - m4/sys_time_h.m4 - m4/sys_types_h.m4 - m4/sys_uio_h.m4 - m4/time_h.m4 - m4/time_r.m4 - m4/ungetc.m4 - m4/unistd_h.m4 - m4/valgrind-tests.m4 - m4/vasnprintf.m4 - m4/vasprintf.m4 - m4/vsnprintf.m4 - m4/warn-on-use.m4 - m4/warnings.m4 - m4/wchar_h.m4 - m4/wchar_t.m4 - m4/wint_t.m4 - m4/xsize.m4 - tests/init.sh - tests/macros.h - tests/signature.h - tests/test-alloca-opt.c - tests/test-binary-io.c - tests/test-binary-io.sh - tests/test-byteswap.c - tests/test-c-ctype.c - tests/test-ctype.c - tests/test-errno.c - tests/test-fcntl-h.c - tests/test-fdopen.c - tests/test-fgetc.c - tests/test-float.c - tests/test-fputc.c - tests/test-fread.c - tests/test-fstat.c - tests/test-ftell.c - tests/test-ftell.sh - tests/test-ftell2.sh - tests/test-ftell3.c - tests/test-ftello.c - tests/test-ftello.sh - tests/test-ftello2.sh - tests/test-ftello3.c - tests/test-ftello4.c - tests/test-ftello4.sh - tests/test-func.c - tests/test-fwrite.c - tests/test-getdelim.c - tests/test-getline.c - tests/test-gettimeofday.c - tests/test-init.sh - tests/test-intprops.c - tests/test-inttypes.c - tests/test-limits-h.c - tests/test-memchr.c - tests/test-netdb.c - tests/test-netinet_in.c - tests/test-read-file.c - tests/test-snprintf.c - tests/test-stdalign.c - tests/test-stdbool.c - tests/test-stddef.c - tests/test-stdint.c - tests/test-stdio.c - tests/test-stdlib.c - tests/test-string.c - tests/test-strings.c - tests/test-strnlen.c - tests/test-strverscmp.c - tests/test-sys_socket.c - tests/test-sys_stat.c - tests/test-sys_time.c - tests/test-sys_types.c - tests/test-sys_uio.c - tests/test-sys_wait.h - tests/test-time.c - tests/test-unistd.c - tests/test-vasnprintf.c - tests/test-vasprintf.c - tests/test-vc-list-files-cvs.sh - tests/test-vc-list-files-git.sh - tests/test-verify.c - tests/test-verify.sh - tests/test-vsnprintf.c - tests/test-wchar.c - tests/zerosize-ptr.h - tests=lib/binary-io.c - tests=lib/binary-io.h - tests=lib/ctype.in.h - tests=lib/fcntl.in.h - tests=lib/fdopen.c - tests=lib/fpucw.h - tests=lib/getpagesize.c - tests=lib/inttypes.in.h - top/GNUmakefile - top/maint.mk -]) diff --git a/gl/m4/gnulib-tool.m4 b/gl/m4/gnulib-tool.m4 deleted file mode 100644 index 0d2ee444b4..0000000000 --- a/gl/m4/gnulib-tool.m4 +++ /dev/null @@ -1,57 +0,0 @@ -# gnulib-tool.m4 serial 2 -dnl Copyright (C) 2004-2005, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl The following macros need not be invoked explicitly. -dnl Invoking them does nothing except to declare default arguments -dnl for "gnulib-tool --import". - -dnl Usage: gl_LOCAL_DIR([DIR]) -AC_DEFUN([gl_LOCAL_DIR], []) - -dnl Usage: gl_MODULES([module1 module2 ...]) -AC_DEFUN([gl_MODULES], []) - -dnl Usage: gl_AVOID([module1 module2 ...]) -AC_DEFUN([gl_AVOID], []) - -dnl Usage: gl_SOURCE_BASE([DIR]) -AC_DEFUN([gl_SOURCE_BASE], []) - -dnl Usage: gl_M4_BASE([DIR]) -AC_DEFUN([gl_M4_BASE], []) - -dnl Usage: gl_PO_BASE([DIR]) -AC_DEFUN([gl_PO_BASE], []) - -dnl Usage: gl_DOC_BASE([DIR]) -AC_DEFUN([gl_DOC_BASE], []) - -dnl Usage: gl_TESTS_BASE([DIR]) -AC_DEFUN([gl_TESTS_BASE], []) - -dnl Usage: gl_WITH_TESTS -AC_DEFUN([gl_WITH_TESTS], []) - -dnl Usage: gl_LIB([LIBNAME]) -AC_DEFUN([gl_LIB], []) - -dnl Usage: gl_LGPL or gl_LGPL([VERSION]) -AC_DEFUN([gl_LGPL], []) - -dnl Usage: gl_MAKEFILE_NAME([FILENAME]) -AC_DEFUN([gl_MAKEFILE_NAME], []) - -dnl Usage: gl_LIBTOOL -AC_DEFUN([gl_LIBTOOL], []) - -dnl Usage: gl_MACRO_PREFIX([PREFIX]) -AC_DEFUN([gl_MACRO_PREFIX], []) - -dnl Usage: gl_PO_DOMAIN([DOMAIN]) -AC_DEFUN([gl_PO_DOMAIN], []) - -dnl Usage: gl_VC_FILES([BOOLEAN]) -AC_DEFUN([gl_VC_FILES], []) diff --git a/gl/m4/include_next.m4 b/gl/m4/include_next.m4 deleted file mode 100644 index db0f2c0795..0000000000 --- a/gl/m4/include_next.m4 +++ /dev/null @@ -1,223 +0,0 @@ -# include_next.m4 serial 23 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert and Derek Price. - -dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER. -dnl -dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to -dnl 'include' otherwise. -dnl -dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler -dnl supports it in the special case that it is the first include directive in -dnl the given file, or to 'include' otherwise. -dnl -dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, -dnl so as to avoid GCC warnings when the gcc option -pedantic is used. -dnl '#pragma GCC system_header' has the same effect as if the file was found -dnl through the include search path specified with '-isystem' options (as -dnl opposed to the search path specified with '-I' options). Namely, gcc -dnl does not warn about some things, and on some systems (Solaris and Interix) -dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side -dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead -dnl of plain '__STDC__'. -dnl -dnl PRAGMA_COLUMNS can be used in files that override system header files, so -dnl as to avoid compilation errors on HP NonStop systems when the gnulib file -dnl is included by a system header file that does a "#pragma COLUMNS 80" (which -dnl has the effect of truncating the lines of that file and all files that it -dnl includes to 80 columns) and the gnulib file has lines longer than 80 -dnl columns. - -AC_DEFUN([gl_INCLUDE_NEXT], -[ - AC_LANG_PREPROC_REQUIRE() - AC_CACHE_CHECK([whether the preprocessor supports include_next], - [gl_cv_have_include_next], - [rm -rf conftestd1a conftestd1b conftestd2 - mkdir conftestd1a conftestd1b conftestd2 - dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on - dnl AIX 6.1 support include_next when used as first preprocessor directive - dnl in a file, but not when preceded by another include directive. Check - dnl for this bug by including . - dnl Additionally, with this same compiler, include_next is a no-op when - dnl used in a header file that was included by specifying its absolute - dnl file name. Despite these two bugs, include_next is used in the - dnl compiler's . By virtue of the second bug, we need to use - dnl include_next as well in this case. - cat < conftestd1a/conftest.h -#define DEFINED_IN_CONFTESTD1 -#include_next -#ifdef DEFINED_IN_CONFTESTD2 -int foo; -#else -#error "include_next doesn't work" -#endif -EOF - cat < conftestd1b/conftest.h -#define DEFINED_IN_CONFTESTD1 -#include -#include_next -#ifdef DEFINED_IN_CONFTESTD2 -int foo; -#else -#error "include_next doesn't work" -#endif -EOF - cat < conftestd2/conftest.h -#ifndef DEFINED_IN_CONFTESTD1 -#error "include_next test doesn't work" -#endif -#define DEFINED_IN_CONFTESTD2 -EOF - gl_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" -dnl We intentionally avoid using AC_LANG_SOURCE here. - AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], - [gl_cv_have_include_next=yes], - [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" - AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], - [gl_cv_have_include_next=buggy], - [gl_cv_have_include_next=no]) - ]) - CPPFLAGS="$gl_save_CPPFLAGS" - rm -rf conftestd1a conftestd1b conftestd2 - ]) - PRAGMA_SYSTEM_HEADER= - if test $gl_cv_have_include_next = yes; then - INCLUDE_NEXT=include_next - INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next - if test -n "$GCC"; then - PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' - fi - else - if test $gl_cv_have_include_next = buggy; then - INCLUDE_NEXT=include - INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next - else - INCLUDE_NEXT=include - INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include - fi - fi - AC_SUBST([INCLUDE_NEXT]) - AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) - AC_SUBST([PRAGMA_SYSTEM_HEADER]) - AC_CACHE_CHECK([whether system header files limit the line length], - [gl_cv_pragma_columns], - [dnl HP NonStop systems, which define __TANDEM, have this misfeature. - AC_EGREP_CPP([choke me], - [ -#ifdef __TANDEM -choke me -#endif - ], - [gl_cv_pragma_columns=yes], - [gl_cv_pragma_columns=no]) - ]) - if test $gl_cv_pragma_columns = yes; then - PRAGMA_COLUMNS="#pragma COLUMNS 10000" - else - PRAGMA_COLUMNS= - fi - AC_SUBST([PRAGMA_COLUMNS]) -]) - -# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) -# ------------------------------------------ -# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be -# ''; otherwise define it to be -# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. -# Also, if #include_next works as first preprocessing directive in a file, -# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be ''; otherwise define it to -# be -# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. -# That way, a header file with the following line: -# #@INCLUDE_NEXT@ @NEXT_FOO_H@ -# or -# #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ -# behaves (after sed substitution) as if it contained -# #include_next -# even if the compiler does not support include_next. -# The three "///" are to pacify Sun C 5.8, which otherwise would say -# "warning: #include of /usr/include/... may be non-portable". -# Use '""', not '<>', so that the /// cannot be confused with a C99 comment. -# Note: This macro assumes that the header file is not empty after -# preprocessing, i.e. it does not only define preprocessor macros but also -# provides some type/enum definitions or function/variable declarations. -# -# This macro also checks whether each header exists, by invoking -# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. -AC_DEFUN([gl_CHECK_NEXT_HEADERS], -[ - gl_NEXT_HEADERS_INTERNAL([$1], [check]) -]) - -# gl_NEXT_HEADERS(HEADER1 HEADER2 ...) -# ------------------------------------ -# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. -# This is suitable for headers like that are standardized by C89 -# and therefore can be assumed to exist. -AC_DEFUN([gl_NEXT_HEADERS], -[ - gl_NEXT_HEADERS_INTERNAL([$1], [assume]) -]) - -# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. -AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], -[ - AC_REQUIRE([gl_INCLUDE_NEXT]) - AC_REQUIRE([AC_CANONICAL_HOST]) - - m4_if([$2], [check], - [AC_CHECK_HEADERS_ONCE([$1]) - ]) - -dnl FIXME: gl_next_header and gl_header_exists must be used unquoted -dnl until we can assume autoconf 2.64 or newer. - m4_foreach_w([gl_HEADER_NAME], [$1], - [AS_VAR_PUSHDEF([gl_next_header], - [gl_cv_next_]m4_defn([gl_HEADER_NAME])) - if test $gl_cv_have_include_next = yes; then - AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) - else - AC_CACHE_CHECK( - [absolute name of <]m4_defn([gl_HEADER_NAME])[>], - m4_defn([gl_next_header]), - [m4_if([$2], [check], - [AS_VAR_PUSHDEF([gl_header_exists], - [ac_cv_header_]m4_defn([gl_HEADER_NAME])) - if test AS_VAR_GET(gl_header_exists) = yes; then - AS_VAR_POPDEF([gl_header_exists]) - ]) - gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) - AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) - AS_VAR_SET(gl_next_header, ['"'$gl_header'"']) - m4_if([$2], [check], - [else - AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) - fi - ]) - ]) - fi - AC_SUBST( - AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), - [AS_VAR_GET(gl_next_header)]) - if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'gl_HEADER_NAME'>' - else - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=AS_VAR_GET(gl_next_header) - fi - AC_SUBST( - AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), - [$gl_next_as_first_directive]) - AS_VAR_POPDEF([gl_next_header])]) -]) - -# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; -# this fallback is safe for all earlier autoconf versions. -m4_define_default([AC_LANG_DEFINES_PROVIDED]) diff --git a/gl/m4/intmax_t.m4 b/gl/m4/intmax_t.m4 deleted file mode 100644 index 9559accabf..0000000000 --- a/gl/m4/intmax_t.m4 +++ /dev/null @@ -1,67 +0,0 @@ -# intmax_t.m4 serial 8 -dnl Copyright (C) 1997-2004, 2006-2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -AC_PREREQ([2.53]) - -# Define intmax_t to 'long' or 'long long' -# if it is not already defined in or . - -AC_DEFUN([gl_AC_TYPE_INTMAX_T], -[ - dnl For simplicity, we assume that a header file defines 'intmax_t' if and - dnl only if it defines 'uintmax_t'. - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - test $ac_cv_type_long_long_int = yes \ - && ac_type='long long' \ - || ac_type='long' - AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], - [Define to long or long long if and don't define.]) - else - AC_DEFINE([HAVE_INTMAX_T], [1], - [Define if you have the 'intmax_t' type in or .]) - fi -]) - -dnl An alternative would be to explicitly test for 'intmax_t'. - -AC_DEFUN([gt_AC_TYPE_INTMAX_T], -[ - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#include -#if HAVE_STDINT_H_WITH_UINTMAX -#include -#endif -#if HAVE_INTTYPES_H_WITH_UINTMAX -#include -#endif - ]], - [[intmax_t x = -1; return !x;]])], - [gt_cv_c_intmax_t=yes], - [gt_cv_c_intmax_t=no])]) - if test $gt_cv_c_intmax_t = yes; then - AC_DEFINE([HAVE_INTMAX_T], [1], - [Define if you have the 'intmax_t' type in or .]) - else - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - test $ac_cv_type_long_long_int = yes \ - && ac_type='long long' \ - || ac_type='long' - AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], - [Define to long or long long if and don't define.]) - fi -]) diff --git a/gl/m4/inttypes-pri.m4 b/gl/m4/inttypes-pri.m4 deleted file mode 100644 index ae20183db4..0000000000 --- a/gl/m4/inttypes-pri.m4 +++ /dev/null @@ -1,42 +0,0 @@ -# inttypes-pri.m4 serial 7 (gettext-0.18.2) -dnl Copyright (C) 1997-2002, 2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_PREREQ([2.53]) - -# Define PRI_MACROS_BROKEN if exists and defines the PRI* -# macros to non-string values. This is the case on AIX 4.3.3. - -AC_DEFUN([gt_INTTYPES_PRI], -[ - AC_CHECK_HEADERS([inttypes.h]) - if test $ac_cv_header_inttypes_h = yes; then - AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], - [gt_cv_inttypes_pri_broken], - [ - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#ifdef PRId32 -char *p = PRId32; -#endif - ]], - [[]])], - [gt_cv_inttypes_pri_broken=no], - [gt_cv_inttypes_pri_broken=yes]) - ]) - fi - if test "$gt_cv_inttypes_pri_broken" = yes; then - AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1], - [Define if exists and defines unusable PRI* macros.]) - PRI_MACROS_BROKEN=1 - else - PRI_MACROS_BROKEN=0 - fi - AC_SUBST([PRI_MACROS_BROKEN]) -]) diff --git a/gl/m4/inttypes.m4 b/gl/m4/inttypes.m4 deleted file mode 100644 index 61cdb1a848..0000000000 --- a/gl/m4/inttypes.m4 +++ /dev/null @@ -1,158 +0,0 @@ -# inttypes.m4 serial 26 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Derek Price, Bruno Haible. -dnl Test whether is supported or must be substituted. - -AC_DEFUN([gl_INTTYPES_H], -[ - AC_REQUIRE([gl_INTTYPES_INCOMPLETE]) - gl_INTTYPES_PRI_SCN -]) - -AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE], -[ - AC_REQUIRE([gl_STDINT_H]) - AC_CHECK_HEADERS_ONCE([inttypes.h]) - - dnl Override always, so that the portability warnings work. - AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) - gl_CHECK_NEXT_HEADERS([inttypes.h]) - - AC_REQUIRE([gl_MULTIARCH]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[#include - ]], [imaxabs imaxdiv strtoimax strtoumax]) -]) - -# Ensure that the PRI* and SCN* macros are defined appropriately. -AC_DEFUN([gl_INTTYPES_PRI_SCN], -[ - AC_REQUIRE([gt_INTTYPES_PRI]) - - PRIPTR_PREFIX= - if test -n "$STDINT_H"; then - dnl Using the gnulib . It always defines intptr_t to 'long'. - PRIPTR_PREFIX='"l"' - else - dnl Using the system's . - for glpfx in '' l ll I64; do - case $glpfx in - '') gltype1='int';; - l) gltype1='long int';; - ll) gltype1='long long int';; - I64) gltype1='__int64';; - esac - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include - extern intptr_t foo; - extern $gltype1 foo;]])], - [PRIPTR_PREFIX='"'$glpfx'"']) - test -n "$PRIPTR_PREFIX" && break - done - fi - AC_SUBST([PRIPTR_PREFIX]) - - gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( - [INT32_MAX_LT_INTMAX_MAX], - [defined INT32_MAX && defined INTMAX_MAX], - [INT32_MAX < INTMAX_MAX], - [sizeof (int) < sizeof (long long int)]) - if test $APPLE_UNIVERSAL_BUILD = 0; then - gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( - [INT64_MAX_EQ_LONG_MAX], - [defined INT64_MAX], - [INT64_MAX == LONG_MAX], - [sizeof (long long int) == sizeof (long int)]) - else - INT64_MAX_EQ_LONG_MAX=-1 - fi - gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( - [UINT32_MAX_LT_UINTMAX_MAX], - [defined UINT32_MAX && defined UINTMAX_MAX], - [UINT32_MAX < UINTMAX_MAX], - [sizeof (unsigned int) < sizeof (unsigned long long int)]) - if test $APPLE_UNIVERSAL_BUILD = 0; then - gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( - [UINT64_MAX_EQ_ULONG_MAX], - [defined UINT64_MAX], - [UINT64_MAX == ULONG_MAX], - [sizeof (unsigned long long int) == sizeof (unsigned long int)]) - else - UINT64_MAX_EQ_ULONG_MAX=-1 - fi -]) - -# Define the symbol $1 to be 1 if the condition is true, 0 otherwise. -# If $2 is true, the condition is $3; otherwise if long long int is supported -# approximate the condition with $4; otherwise, assume the condition is false. -# The condition should work on all C99 platforms; the approximations should be -# good enough to work on all practical pre-C99 platforms. -# $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants. -AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION], -[ - AC_CACHE_CHECK([whether $3], - [gl_cv_test_$1], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[/* Work also in C++ mode. */ - #define __STDC_LIMIT_MACROS 1 - - /* Work if build is not clean. */ - #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H - - #include - #if HAVE_STDINT_H - #include - #endif - - #if $2 - #define CONDITION ($3) - #elif HAVE_LONG_LONG_INT - #define CONDITION ($4) - #else - #define CONDITION 0 - #endif - int test[CONDITION ? 1 : -1];]])], - [gl_cv_test_$1=yes], - [gl_cv_test_$1=no])]) - if test $gl_cv_test_$1 = yes; then - $1=1; - else - $1=0; - fi - AC_SUBST([$1]) -]) - -AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) -]) - -AC_DEFUN([gl_INTTYPES_H_DEFAULTS], -[ - GNULIB_IMAXABS=0; AC_SUBST([GNULIB_IMAXABS]) - GNULIB_IMAXDIV=0; AC_SUBST([GNULIB_IMAXDIV]) - GNULIB_STRTOIMAX=0; AC_SUBST([GNULIB_STRTOIMAX]) - GNULIB_STRTOUMAX=0; AC_SUBST([GNULIB_STRTOUMAX]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS]) - HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV]) - HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX]) - HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX]) - REPLACE_STRTOIMAX=0; AC_SUBST([REPLACE_STRTOIMAX]) - REPLACE_STRTOUMAX=0; AC_SUBST([REPLACE_STRTOUMAX]) - INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX]) - INT64_MAX_EQ_LONG_MAX='defined _LP64'; AC_SUBST([INT64_MAX_EQ_LONG_MAX]) - PRI_MACROS_BROKEN=0; AC_SUBST([PRI_MACROS_BROKEN]) - PRIPTR_PREFIX=__PRIPTR_PREFIX; AC_SUBST([PRIPTR_PREFIX]) - UINT32_MAX_LT_UINTMAX_MAX=1; AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX]) - UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; AC_SUBST([UINT64_MAX_EQ_ULONG_MAX]) -]) diff --git a/gl/m4/inttypes_h.m4 b/gl/m4/inttypes_h.m4 deleted file mode 100644 index 76571199f3..0000000000 --- a/gl/m4/inttypes_h.m4 +++ /dev/null @@ -1,29 +0,0 @@ -# inttypes_h.m4 serial 10 -dnl Copyright (C) 1997-2004, 2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, -# doesn't clash with , and declares uintmax_t. - -AC_DEFUN([gl_AC_HEADER_INTTYPES_H], -[ - AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#include - ]], - [[uintmax_t i = (uintmax_t) -1; return !i;]])], - [gl_cv_header_inttypes_h=yes], - [gl_cv_header_inttypes_h=no])]) - if test $gl_cv_header_inttypes_h = yes; then - AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], - [Define if exists, doesn't clash with , - and declares uintmax_t. ]) - fi -]) diff --git a/gl/m4/largefile.m4 b/gl/m4/largefile.m4 deleted file mode 100644 index 8bbdfaac1d..0000000000 --- a/gl/m4/largefile.m4 +++ /dev/null @@ -1,146 +0,0 @@ -# Enable large files on systems where this is not the default. - -# Copyright 1992-1996, 1998-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# The following implementation works around a problem in autoconf <= 2.69; -# AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5, -# or configures them incorrectly in some cases. -m4_version_prereq([2.70], [] ,[ - -# _AC_SYS_LARGEFILE_TEST_INCLUDES -# ------------------------------- -m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], -[@%:@include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]];[]dnl -]) - - -# _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, -# CACHE-VAR, -# DESCRIPTION, -# PROLOGUE, [FUNCTION-BODY]) -# -------------------------------------------------------- -m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE], -[AC_CACHE_CHECK([for $1 value needed for large files], [$3], -[while :; do - m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( - [AC_LANG_PROGRAM([$5], [$6])], - [$3=no; break]) - m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( - [AC_LANG_PROGRAM([@%:@define $1 $2 -$5], [$6])], - [$3=$2; break]) - $3=unknown - break -done]) -case $$3 in #( - no | unknown) ;; - *) AC_DEFINE_UNQUOTED([$1], [$$3], [$4]);; -esac -rm -rf conftest*[]dnl -])# _AC_SYS_LARGEFILE_MACRO_VALUE - - -# AC_SYS_LARGEFILE -# ---------------- -# By default, many hosts won't let programs access large files; -# one must use special compiler options to get large-file access to work. -# For more details about this brain damage please see: -# http://www.unix-systems.org/version2/whatsnew/lfs20mar.html -AC_DEFUN([AC_SYS_LARGEFILE], -[AC_ARG_ENABLE(largefile, - [ --disable-largefile omit support for large files]) -if test "$enable_largefile" != no; then - - AC_CACHE_CHECK([for special C compiler options needed for large files], - ac_cv_sys_largefile_CC, - [ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - AC_LANG_CONFTEST([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_INCLUDES])]) - AC_COMPILE_IFELSE([], [break]) - CC="$CC -n32" - AC_COMPILE_IFELSE([], [ac_cv_sys_largefile_CC=' -n32'; break]) - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi]) - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - _AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, - ac_cv_sys_file_offset_bits, - [Number of bits in a file offset, on hosts where this is settable.], - [_AC_SYS_LARGEFILE_TEST_INCLUDES]) - if test $ac_cv_sys_file_offset_bits = unknown; then - _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, - ac_cv_sys_large_files, - [Define for large files, on AIX-style hosts.], - [_AC_SYS_LARGEFILE_TEST_INCLUDES]) - fi - - AC_DEFINE([_DARWIN_USE_64_BIT_INODE], [1], - [Enable large inode numbers on Mac OS X 10.5.]) -fi -])# AC_SYS_LARGEFILE -])# m4_version_prereq 2.70 - -# Enable large files on systems where this is implemented by Gnulib, not by the -# system headers. -# Set the variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE if Gnulib -# overrides ensure that off_t or 'struct size.st_size' are 64-bit, respectively. -AC_DEFUN([gl_LARGEFILE], -[ - AC_REQUIRE([AC_CANONICAL_HOST]) - case "$host_os" in - mingw*) - dnl Native Windows. - dnl mingw64 defines off_t to a 64-bit type already, if - dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE. - AC_CACHE_CHECK([for 64-bit off_t], [gl_cv_type_off_t_64], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; - ]], - [[]])], - [gl_cv_type_off_t_64=yes], [gl_cv_type_off_t_64=no]) - ]) - if test $gl_cv_type_off_t_64 = no; then - WINDOWS_64_BIT_OFF_T=1 - else - WINDOWS_64_BIT_OFF_T=0 - fi - dnl But all native Windows platforms (including mingw64) have a 32-bit - dnl st_size member in 'struct stat'. - WINDOWS_64_BIT_ST_SIZE=1 - ;; - *) - dnl Nothing to do on gnulib's side. - dnl A 64-bit off_t is - dnl - already the default on Mac OS X, FreeBSD, NetBSD, OpenBSD, IRIX, - dnl OSF/1, Cygwin, - dnl - enabled by _FILE_OFFSET_BITS=64 (ensured by AC_SYS_LARGEFILE) on - dnl glibc, HP-UX, Solaris, - dnl - enabled by _LARGE_FILES=1 (ensured by AC_SYS_LARGEFILE) on AIX, - dnl - impossible to achieve on Minix 3.1.8. - WINDOWS_64_BIT_OFF_T=0 - WINDOWS_64_BIT_ST_SIZE=0 - ;; - esac -]) diff --git a/gl/m4/ld-output-def.m4 b/gl/m4/ld-output-def.m4 deleted file mode 100644 index 040a04fc02..0000000000 --- a/gl/m4/ld-output-def.m4 +++ /dev/null @@ -1,29 +0,0 @@ -# ld-output-def.m4 serial 2 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Simon Josefsson - -# gl_LD_OUTPUT_DEF() -# ------------- -# Check if linker supports -Wl,--output-def and define automake -# conditional HAVE_LD_OUTPUT_DEF if it is. -AC_DEFUN([gl_LD_OUTPUT_DEF], -[ - AC_CACHE_CHECK([if gcc/ld supports -Wl,--output-def], - [gl_cv_ld_output_def], - [if test "$enable_shared" = no; then - gl_cv_ld_output_def="not needed, shared libraries are disabled" - else - gl_ldflags_save=$LDFLAGS - LDFLAGS="-Wl,--output-def,conftest.def" - AC_LINK_IFELSE([AC_LANG_PROGRAM([])], - [gl_cv_ld_output_def=yes], - [gl_cv_ld_output_def=no]) - rm -f conftest.def - LDFLAGS="$gl_ldflags_save" - fi]) - AM_CONDITIONAL([HAVE_LD_OUTPUT_DEF], test "x$gl_cv_ld_output_def" = "xyes") -]) diff --git a/gl/m4/ld-version-script.m4 b/gl/m4/ld-version-script.m4 deleted file mode 100644 index 330c2ccf09..0000000000 --- a/gl/m4/ld-version-script.m4 +++ /dev/null @@ -1,48 +0,0 @@ -# ld-version-script.m4 serial 4 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Simon Josefsson - -# FIXME: The test below returns a false positive for mingw -# cross-compiles, 'local:' statements does not reduce number of -# exported symbols in a DLL. Use --disable-ld-version-script to work -# around the problem. - -# gl_LD_VERSION_SCRIPT -# -------------------- -# Check if LD supports linker scripts, and define automake conditional -# HAVE_LD_VERSION_SCRIPT if so. -AC_DEFUN([gl_LD_VERSION_SCRIPT], -[ - AC_ARG_ENABLE([ld-version-script], - [AS_HELP_STRING([--enable-ld-version-script], - [enable linker version script (default is enabled when possible)])], - [have_ld_version_script=$enableval], - [AC_CACHE_CHECK([if LD -Wl,--version-script works], - [gl_cv_sys_ld_version_script], - [gl_cv_sys_ld_version_script=no - save_LDFLAGS=$LDFLAGS - LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map" - echo foo >conftest.map - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], - [], - [cat > conftest.map <&1 /dev/null 2>&1 \ - && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ - || PATH_SEPARATOR=';' - } -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` - while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL([acl_cv_path_LD], -[if test -z "$LD"; then - acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$acl_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - acl_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$acl_cv_path_LD" -v 2>&1 = 1.10 to complain if config.rpath is missing. - m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) - AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS - AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld - AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host - AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir - AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ - CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ - ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh - . ./conftest.sh - rm -f ./conftest.sh - acl_cv_rpath=done - ]) - wl="$acl_cv_wl" - acl_libext="$acl_cv_libext" - acl_shlibext="$acl_cv_shlibext" - acl_libname_spec="$acl_cv_libname_spec" - acl_library_names_spec="$acl_cv_library_names_spec" - acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" - acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" - acl_hardcode_direct="$acl_cv_hardcode_direct" - acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" - dnl Determine whether the user wants rpath handling at all. - AC_ARG_ENABLE([rpath], - [ --disable-rpath do not hardcode runtime library paths], - :, enable_rpath=yes) -]) - -dnl AC_LIB_FROMPACKAGE(name, package) -dnl declares that libname comes from the given package. The configure file -dnl will then not have a --with-libname-prefix option but a -dnl --with-package-prefix option. Several libraries can come from the same -dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar -dnl macro call that searches for libname. -AC_DEFUN([AC_LIB_FROMPACKAGE], -[ - pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) - define([acl_frompackage_]NAME, [$2]) - popdef([NAME]) - pushdef([PACK],[$2]) - pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) - define([acl_libsinpackage_]PACKUP, - m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) - popdef([PACKUP]) - popdef([PACK]) -]) - -dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and -dnl the libraries corresponding to explicit and implicit dependencies. -dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. -dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found -dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. -AC_DEFUN([AC_LIB_LINKFLAGS_BODY], -[ - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) - pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) - pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) - pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) - dnl Autoconf >= 2.61 supports dots in --with options. - pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - AC_ARG_WITH(P_A_C_K[-prefix], -[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib - --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], -[ - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - if test "$acl_libdirstem2" != "$acl_libdirstem" \ - && ! test -d "$withval/$acl_libdirstem"; then - additional_libdir="$withval/$acl_libdirstem2" - fi - fi - fi -]) - dnl Search the library and its dependencies in $additional_libdir and - dnl $LDFLAGS. Using breadth-first-seach. - LIB[]NAME= - LTLIB[]NAME= - INC[]NAME= - LIB[]NAME[]_PREFIX= - dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been - dnl computed. So it has to be reset here. - HAVE_LIB[]NAME= - rpathdirs= - ltrpathdirs= - names_already_handled= - names_next_round='$1 $2' - while test -n "$names_next_round"; do - names_this_round="$names_next_round" - names_next_round= - for name in $names_this_round; do - already_handled= - for n in $names_already_handled; do - if test "$n" = "$name"; then - already_handled=yes - break - fi - done - if test -z "$already_handled"; then - names_already_handled="$names_already_handled $name" - dnl See if it was already located by an earlier AC_LIB_LINKFLAGS - dnl or AC_LIB_HAVE_LINKFLAGS call. - uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` - eval value=\"\$HAVE_LIB$uppername\" - if test -n "$value"; then - if test "$value" = yes; then - eval value=\"\$LIB$uppername\" - test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" - eval value=\"\$LTLIB$uppername\" - test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" - else - dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined - dnl that this library doesn't exist. So just drop it. - : - fi - else - dnl Search the library lib$name in $additional_libdir and $LDFLAGS - dnl and the already constructed $LIBNAME/$LTLIBNAME. - found_dir= - found_la= - found_so= - found_a= - eval libname=\"$acl_libname_spec\" # typically: libname=lib$name - if test -n "$acl_shlibext"; then - shrext=".$acl_shlibext" # typically: shrext=.so - else - shrext= - fi - if test $use_additional = yes; then - dir="$additional_libdir" - dnl The same code as in the loop below: - dnl First look for a shared library. - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - dnl Then look for a static library. - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` - dnl First look for a shared library. - if test -n "$acl_shlibext"; then - if test -f "$dir/$libname$shrext"; then - found_dir="$dir" - found_so="$dir/$libname$shrext" - else - if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then - ver=`(cd "$dir" && \ - for f in "$libname$shrext".*; do echo "$f"; done \ - | sed -e "s,^$libname$shrext\\\\.,," \ - | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ - | sed 1q ) 2>/dev/null` - if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then - found_dir="$dir" - found_so="$dir/$libname$shrext.$ver" - fi - else - eval library_names=\"$acl_library_names_spec\" - for f in $library_names; do - if test -f "$dir/$f"; then - found_dir="$dir" - found_so="$dir/$f" - break - fi - done - fi - fi - fi - dnl Then look for a static library. - if test "X$found_dir" = "X"; then - if test -f "$dir/$libname.$acl_libext"; then - found_dir="$dir" - found_a="$dir/$libname.$acl_libext" - fi - fi - if test "X$found_dir" != "X"; then - if test -f "$dir/$libname.la"; then - found_la="$dir/$libname.la" - fi - fi - ;; - esac - if test "X$found_dir" != "X"; then - break - fi - done - fi - if test "X$found_dir" != "X"; then - dnl Found the library. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" - if test "X$found_so" != "X"; then - dnl Linking with a shared library. We attempt to hardcode its - dnl directory into the executable's runpath, unless it's the - dnl standard /usr/lib. - if test "$enable_rpath" = no \ - || test "X$found_dir" = "X/usr/$acl_libdirstem" \ - || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then - dnl No hardcoding is needed. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - dnl Use an explicit option to hardcode DIR into the resulting - dnl binary. - dnl Potentially add DIR to ltrpathdirs. - dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $found_dir" - fi - dnl The hardcoding into $LIBNAME is system dependent. - if test "$acl_hardcode_direct" = yes; then - dnl Using DIR/libNAME.so during linking hardcodes DIR into the - dnl resulting binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then - dnl Use an explicit option to hardcode DIR into the resulting - dnl binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - dnl Potentially add DIR to rpathdirs. - dnl The rpathdirs will be appended to $LIBNAME at the end. - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $found_dir" - fi - else - dnl Rely on "-L$found_dir". - dnl But don't add it if it's already contained in the LDFLAGS - dnl or the already constructed $LIBNAME - haveit= - for x in $LDFLAGS $LIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$found_dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" - fi - if test "$acl_hardcode_minus_L" != no; then - dnl FIXME: Not sure whether we should use - dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" - dnl here. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else - dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH - dnl here, because this doesn't fit in flags passed to the - dnl compiler. So give up. No hardcoding. This affects only - dnl very old systems. - dnl FIXME: Not sure whether we should use - dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" - dnl here. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" - fi - fi - fi - fi - else - if test "X$found_a" != "X"; then - dnl Linking with a static library. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" - else - dnl We shouldn't come here, but anyway it's good to have a - dnl fallback. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" - fi - fi - dnl Assume the include files are nearby. - additional_includedir= - case "$found_dir" in - */$acl_libdirstem | */$acl_libdirstem/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` - if test "$name" = '$1'; then - LIB[]NAME[]_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - */$acl_libdirstem2 | */$acl_libdirstem2/) - basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` - if test "$name" = '$1'; then - LIB[]NAME[]_PREFIX="$basedir" - fi - additional_includedir="$basedir/include" - ;; - esac - if test "X$additional_includedir" != "X"; then - dnl Potentially add $additional_includedir to $INCNAME. - dnl But don't add it - dnl 1. if it's the standard /usr/include, - dnl 2. if it's /usr/local/include and we are using GCC on Linux, - dnl 3. if it's already present in $CPPFLAGS or the already - dnl constructed $INCNAME, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - for x in $CPPFLAGS $INC[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - dnl Really add $additional_includedir to $INCNAME. - INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" - fi - fi - fi - fi - fi - dnl Look for dependencies. - if test -n "$found_la"; then - dnl Read the .la file. It defines the variables - dnl dlname, library_names, old_library, dependency_libs, current, - dnl age, revision, installed, dlopen, dlpreopen, libdir. - save_libdir="$libdir" - case "$found_la" in - */* | *\\*) . "$found_la" ;; - *) . "./$found_la" ;; - esac - libdir="$save_libdir" - dnl We use only dependency_libs. - for dep in $dependency_libs; do - case "$dep" in - -L*) - additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` - dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. - dnl But don't add it - dnl 1. if it's the standard /usr/lib, - dnl 2. if it's /usr/local/lib and we are using GCC on Linux, - dnl 3. if it's already present in $LDFLAGS or the already - dnl constructed $LIBNAME, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ - && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then - haveit= - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ - || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - haveit= - for x in $LDFLAGS $LIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LIBNAME. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" - fi - fi - haveit= - for x in $LDFLAGS $LTLIB[]NAME; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LTLIBNAME. - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" - fi - fi - fi - fi - ;; - -R*) - dir=`echo "X$dep" | sed -e 's/^X-R//'` - if test "$enable_rpath" != no; then - dnl Potentially add DIR to rpathdirs. - dnl The rpathdirs will be appended to $LIBNAME at the end. - haveit= - for x in $rpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - rpathdirs="$rpathdirs $dir" - fi - dnl Potentially add DIR to ltrpathdirs. - dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. - haveit= - for x in $ltrpathdirs; do - if test "X$x" = "X$dir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - ltrpathdirs="$ltrpathdirs $dir" - fi - fi - ;; - -l*) - dnl Handle this in the next round. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` - ;; - *.la) - dnl Handle this in the next round. Throw away the .la's - dnl directory; it is already contained in a preceding -L - dnl option. - names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` - ;; - *) - dnl Most likely an immediate library name. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" - ;; - esac - done - fi - else - dnl Didn't find the library; assume it is in the system directories - dnl known to the linker and runtime loader. (All the system - dnl directories known to the linker should also be known to the - dnl runtime loader, otherwise the system is severely misconfigured.) - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" - fi - fi - fi - done - done - if test "X$rpathdirs" != "X"; then - if test -n "$acl_hardcode_libdir_separator"; then - dnl Weird platform: only the last -rpath option counts, the user must - dnl pass all path elements in one option. We can arrange that for a - dnl single library, but not when more than one $LIBNAMEs are used. - alldirs= - for found_dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" - done - dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - else - dnl The -rpath options are cumulative. - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - done - fi - fi - if test "X$ltrpathdirs" != "X"; then - dnl When using libtool, the option that works for both libraries and - dnl executables is -R. The -R options are cumulative. - for found_dir in $ltrpathdirs; do - LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" - done - fi - popdef([P_A_C_K]) - popdef([PACKLIBS]) - popdef([PACKUP]) - popdef([PACK]) - popdef([NAME]) -]) - -dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, -dnl unless already present in VAR. -dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes -dnl contains two or three consecutive elements that belong together. -AC_DEFUN([AC_LIB_APPENDTOVAR], -[ - for element in [$2]; do - haveit= - for x in $[$1]; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X$element"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - [$1]="${[$1]}${[$1]:+ }$element" - fi - done -]) - -dnl For those cases where a variable contains several -L and -l options -dnl referring to unknown libraries and directories, this macro determines the -dnl necessary additional linker options for the runtime path. -dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) -dnl sets LDADDVAR to linker options needed together with LIBSVALUE. -dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, -dnl otherwise linking without libtool is assumed. -AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], -[ - AC_REQUIRE([AC_LIB_RPATH]) - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - $1= - if test "$enable_rpath" != no; then - if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then - dnl Use an explicit option to hardcode directories into the resulting - dnl binary. - rpathdirs= - next= - for opt in $2; do - if test -n "$next"; then - dir="$next" - dnl No need to hardcode the standard /usr/lib. - if test "X$dir" != "X/usr/$acl_libdirstem" \ - && test "X$dir" != "X/usr/$acl_libdirstem2"; then - rpathdirs="$rpathdirs $dir" - fi - next= - else - case $opt in - -L) next=yes ;; - -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` - dnl No need to hardcode the standard /usr/lib. - if test "X$dir" != "X/usr/$acl_libdirstem" \ - && test "X$dir" != "X/usr/$acl_libdirstem2"; then - rpathdirs="$rpathdirs $dir" - fi - next= ;; - *) next= ;; - esac - fi - done - if test "X$rpathdirs" != "X"; then - if test -n ""$3""; then - dnl libtool is used for linking. Use -R options. - for dir in $rpathdirs; do - $1="${$1}${$1:+ }-R$dir" - done - else - dnl The linker is used for linking directly. - if test -n "$acl_hardcode_libdir_separator"; then - dnl Weird platform: only the last -rpath option counts, the user - dnl must pass all path elements in one option. - alldirs= - for dir in $rpathdirs; do - alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" - done - acl_save_libdir="$libdir" - libdir="$alldirs" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - $1="$flag" - else - dnl The -rpath options are cumulative. - for dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$dir" - eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - $1="${$1}${$1:+ }$flag" - done - fi - fi - fi - fi - fi - AC_SUBST([$1]) -]) diff --git a/gl/m4/lib-prefix.m4 b/gl/m4/lib-prefix.m4 deleted file mode 100644 index 6851031d39..0000000000 --- a/gl/m4/lib-prefix.m4 +++ /dev/null @@ -1,224 +0,0 @@ -# lib-prefix.m4 serial 7 (gettext-0.18) -dnl Copyright (C) 2001-2005, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and -dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't -dnl require excessive bracketing. -ifdef([AC_HELP_STRING], -[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], -[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) - -dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed -dnl to access previously installed libraries. The basic assumption is that -dnl a user will want packages to use other packages he previously installed -dnl with the same --prefix option. -dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate -dnl libraries, but is otherwise very convenient. -AC_DEFUN([AC_LIB_PREFIX], -[ - AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - AC_LIB_ARG_WITH([lib-prefix], -[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib - --without-lib-prefix don't search for libraries in includedir and libdir], -[ - if test "X$withval" = "Xno"; then - use_additional=no - else - if test "X$withval" = "X"; then - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) - else - additional_includedir="$withval/include" - additional_libdir="$withval/$acl_libdirstem" - fi - fi -]) - if test $use_additional = yes; then - dnl Potentially add $additional_includedir to $CPPFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/include, - dnl 2. if it's already present in $CPPFLAGS, - dnl 3. if it's /usr/local/include and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_includedir" != "X/usr/include"; then - haveit= - for x in $CPPFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-I$additional_includedir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_includedir" = "X/usr/local/include"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_includedir"; then - dnl Really add $additional_includedir to $CPPFLAGS. - CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" - fi - fi - fi - fi - dnl Potentially add $additional_libdir to $LDFLAGS. - dnl But don't add it - dnl 1. if it's the standard /usr/lib, - dnl 2. if it's already present in $LDFLAGS, - dnl 3. if it's /usr/local/lib and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. - if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then - haveit= - for x in $LDFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) - if test "X$x" = "X-L$additional_libdir"; then - haveit=yes - break - fi - done - if test -z "$haveit"; then - if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then - if test -n "$GCC"; then - case $host_os in - linux*) haveit=yes;; - esac - fi - fi - if test -z "$haveit"; then - if test -d "$additional_libdir"; then - dnl Really add $additional_libdir to $LDFLAGS. - LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" - fi - fi - fi - fi - fi -]) - -dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, -dnl acl_final_exec_prefix, containing the values to which $prefix and -dnl $exec_prefix will expand at the end of the configure script. -AC_DEFUN([AC_LIB_PREPARE_PREFIX], -[ - dnl Unfortunately, prefix and exec_prefix get only finally determined - dnl at the end of configure. - if test "X$prefix" = "XNONE"; then - acl_final_prefix="$ac_default_prefix" - else - acl_final_prefix="$prefix" - fi - if test "X$exec_prefix" = "XNONE"; then - acl_final_exec_prefix='${prefix}' - else - acl_final_exec_prefix="$exec_prefix" - fi - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" - prefix="$acl_save_prefix" -]) - -dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the -dnl variables prefix and exec_prefix bound to the values they will have -dnl at the end of the configure script. -AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], -[ - acl_save_prefix="$prefix" - prefix="$acl_final_prefix" - acl_save_exec_prefix="$exec_prefix" - exec_prefix="$acl_final_exec_prefix" - $1 - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" -]) - -dnl AC_LIB_PREPARE_MULTILIB creates -dnl - a variable acl_libdirstem, containing the basename of the libdir, either -dnl "lib" or "lib64" or "lib/64", -dnl - a variable acl_libdirstem2, as a secondary possible value for -dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or -dnl "lib/amd64". -AC_DEFUN([AC_LIB_PREPARE_MULTILIB], -[ - dnl There is no formal standard regarding lib and lib64. - dnl On glibc systems, the current practice is that on a system supporting - dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under - dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine - dnl the compiler's default mode by looking at the compiler's library search - dnl path. If at least one of its elements ends in /lib64 or points to a - dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. - dnl Otherwise we use the default, namely "lib". - dnl On Solaris systems, the current practice is that on a system supporting - dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under - dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or - dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. - AC_REQUIRE([AC_CANONICAL_HOST]) - acl_libdirstem=lib - acl_libdirstem2= - case "$host_os" in - solaris*) - dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment - dnl . - dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." - dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the - dnl symlink is missing, so we set acl_libdirstem2 too. - AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], - [AC_EGREP_CPP([sixtyfour bits], [ -#ifdef _LP64 -sixtyfour bits -#endif - ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) - ]) - if test $gl_cv_solaris_64bit = yes; then - acl_libdirstem=lib/64 - case "$host_cpu" in - sparc*) acl_libdirstem2=lib/sparcv9 ;; - i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; - esac - fi - ;; - *) - searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` - if test -n "$searchpath"; then - acl_save_IFS="${IFS= }"; IFS=":" - for searchdir in $searchpath; do - if test -d "$searchdir"; then - case "$searchdir" in - */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; - */../ | */.. ) - # Better ignore directories of this form. They are misleading. - ;; - *) searchdir=`cd "$searchdir" && pwd` - case "$searchdir" in - */lib64 ) acl_libdirstem=lib64 ;; - esac ;; - esac - fi - done - IFS="$acl_save_IFS" - fi - ;; - esac - test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" -]) diff --git a/gl/m4/limits-h.m4 b/gl/m4/limits-h.m4 deleted file mode 100644 index 31fdf0a779..0000000000 --- a/gl/m4/limits-h.m4 +++ /dev/null @@ -1,31 +0,0 @@ -dnl Check whether limits.h has needed features. - -dnl Copyright 2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -AC_DEFUN_ONCE([gl_LIMITS_H], -[ - gl_CHECK_NEXT_HEADERS([limits.h]) - - AC_CACHE_CHECK([whether limits.h has ULLONG_WIDTH etc.], - [gl_cv_header_limits_width], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ - #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 - #endif - #include - int ullw = ULLONG_WIDTH;]])], - [gl_cv_header_limits_width=yes], - [gl_cv_header_limits_width=no])]) - if test "$gl_cv_header_limits_width" = yes; then - LIMITS_H= - else - LIMITS_H=limits.h - fi - AC_SUBST([LIMITS_H]) - AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) -]) diff --git a/gl/m4/longlong.m4 b/gl/m4/longlong.m4 deleted file mode 100644 index 36d8b12421..0000000000 --- a/gl/m4/longlong.m4 +++ /dev/null @@ -1,113 +0,0 @@ -# longlong.m4 serial 17 -dnl Copyright (C) 1999-2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_LONG_LONG_INT if 'long long int' works. -# This fixes a bug in Autoconf 2.61, and can be faster -# than what's in Autoconf 2.62 through 2.68. - -# Note: If the type 'long long int' exists but is only 32 bits large -# (as on some very old compilers), HAVE_LONG_LONG_INT will not be -# defined. In this case you can treat 'long long int' like 'long int'. - -AC_DEFUN([AC_TYPE_LONG_LONG_INT], -[ - AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) - AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], - [ac_cv_type_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int - if test $ac_cv_type_long_long_int = yes; then - dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. - dnl If cross compiling, assume the bug is not important, since - dnl nobody cross compiles for this platform as far as we know. - AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[@%:@include - @%:@ifndef LLONG_MAX - @%:@ define HALF \ - (1LL << (sizeof (long long int) * CHAR_BIT - 2)) - @%:@ define LLONG_MAX (HALF - 1 + HALF) - @%:@endif]], - [[long long int n = 1; - int i; - for (i = 0; ; i++) - { - long long int m = n << i; - if (m >> i != n) - return 1; - if (LLONG_MAX / 2 < m) - break; - } - return 0;]])], - [], - [ac_cv_type_long_long_int=no], - [:]) - fi - fi]) - if test $ac_cv_type_long_long_int = yes; then - AC_DEFINE([HAVE_LONG_LONG_INT], [1], - [Define to 1 if the system has the type 'long long int'.]) - fi -]) - -# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. -# This fixes a bug in Autoconf 2.61, and can be faster -# than what's in Autoconf 2.62 through 2.68. - -# Note: If the type 'unsigned long long int' exists but is only 32 bits -# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT -# will not be defined. In this case you can treat 'unsigned long long int' -# like 'unsigned long int'. - -AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], -[ - AC_CACHE_CHECK([for unsigned long long int], - [ac_cv_type_unsigned_long_long_int], - [ac_cv_type_unsigned_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - AC_LINK_IFELSE( - [_AC_TYPE_LONG_LONG_SNIPPET], - [], - [ac_cv_type_unsigned_long_long_int=no]) - fi]) - if test $ac_cv_type_unsigned_long_long_int = yes; then - AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], - [Define to 1 if the system has the type 'unsigned long long int'.]) - fi -]) - -# Expands to a C program that can be used to test for simultaneous support -# of 'long long' and 'unsigned long long'. We don't want to say that -# 'long long' is available if 'unsigned long long' is not, or vice versa, -# because too many programs rely on the symmetry between signed and unsigned -# integer types (excluding 'bool'). -AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], -[ - AC_LANG_PROGRAM( - [[/* For now, do not test the preprocessor; as of 2007 there are too many - implementations with broken preprocessors. Perhaps this can - be revisited in 2012. In the meantime, code should not expect - #if to work with literals wider than 32 bits. */ - /* Test literals. */ - long long int ll = 9223372036854775807ll; - long long int nll = -9223372036854775807LL; - unsigned long long int ull = 18446744073709551615ULL; - /* Test constant expressions. */ - typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) - ? 1 : -1)]; - typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 - ? 1 : -1)]; - int i = 63;]], - [[/* Test availability of runtime routines for shift and division. */ - long long int llmax = 9223372036854775807ll; - unsigned long long int ullmax = 18446744073709551615ull; - return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) - | (llmax / ll) | (llmax % ll) - | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) - | (ullmax / ull) | (ullmax % ull));]]) -]) diff --git a/gl/m4/lseek.m4 b/gl/m4/lseek.m4 deleted file mode 100644 index 4a95440073..0000000000 --- a/gl/m4/lseek.m4 +++ /dev/null @@ -1,71 +0,0 @@ -# lseek.m4 serial 10 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_LSEEK], -[ - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_REQUIRE([AC_PROG_CC]) - AC_CHECK_HEADERS_ONCE([unistd.h]) - AC_CACHE_CHECK([whether lseek detects pipes], [gl_cv_func_lseek_pipe], - [case "$host_os" in - mingw*) - dnl Native Windows. - dnl The result of lseek (fd, (off_t)0, SEEK_CUR) or - dnl SetFilePointer(handle, 0, NULL, FILE_CURRENT) - dnl for a pipe depends on the environment: In a Cygwin 1.5 - dnl environment it succeeds (wrong); in a Cygwin 1.7 environment - dnl it fails with a wrong errno value. - gl_cv_func_lseek_pipe=no - ;; - *) - if test $cross_compiling = no; then - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ -#include /* for off_t */ -#include /* for SEEK_CUR */ -#if HAVE_UNISTD_H -# include -#else /* on Windows with MSVC */ -# include -#endif -]], [[ - /* Exit with success only if stdin is seekable. */ - return lseek (0, (off_t)0, SEEK_CUR) < 0; -]])], - [if test -s conftest$ac_exeext \ - && ./conftest$ac_exeext < conftest.$ac_ext \ - && test 1 = "`echo hi \ - | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then - gl_cv_func_lseek_pipe=yes - else - gl_cv_func_lseek_pipe=no - fi - ], - [gl_cv_func_lseek_pipe=no]) - else - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE([[ -#if defined __BEOS__ -/* BeOS mistakenly return 0 when trying to seek on pipes. */ - Choke me. -#endif]])], - [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no]) - fi - ;; - esac - ]) - if test $gl_cv_func_lseek_pipe = no; then - REPLACE_LSEEK=1 - AC_DEFINE([LSEEK_PIPE_BROKEN], [1], - [Define to 1 if lseek does not detect pipes.]) - fi - - AC_REQUIRE([gl_SYS_TYPES_H]) - if test $WINDOWS_64_BIT_OFF_T = 1; then - REPLACE_LSEEK=1 - fi -]) diff --git a/gl/m4/malloc.m4 b/gl/m4/malloc.m4 deleted file mode 100644 index c393690e27..0000000000 --- a/gl/m4/malloc.m4 +++ /dev/null @@ -1,101 +0,0 @@ -# malloc.m4 serial 15 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -m4_version_prereq([2.70], [] ,[ - -# This is adapted with modifications from upstream Autoconf here: -# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c -AC_DEFUN([_AC_FUNC_MALLOC_IF], -[ - AC_REQUIRE([AC_HEADER_STDC])dnl - AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles - AC_CHECK_HEADERS([stdlib.h]) - AC_CACHE_CHECK([for GNU libc compatible malloc], - [ac_cv_func_malloc_0_nonnull], - [AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H - # include - #else - char *malloc (); - #endif - ]], - [[char *p = malloc (0); - int result = !p; - free (p); - return result;]]) - ], - [ac_cv_func_malloc_0_nonnull=yes], - [ac_cv_func_malloc_0_nonnull=no], - [case "$host_os" in - # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* \ - | hpux* | solaris* | cygwin* | mingw*) - ac_cv_func_malloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_malloc_0_nonnull=no ;; - esac - ]) - ]) - AS_IF([test $ac_cv_func_malloc_0_nonnull = yes], [$1], [$2]) -])# _AC_FUNC_MALLOC_IF - -]) - -# gl_FUNC_MALLOC_GNU -# ------------------ -# Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if -# it is not. -AC_DEFUN([gl_FUNC_MALLOC_GNU], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - dnl _AC_FUNC_MALLOC_IF is defined in Autoconf. - _AC_FUNC_MALLOC_IF( - [AC_DEFINE([HAVE_MALLOC_GNU], [1], - [Define to 1 if your system has a GNU libc compatible 'malloc' - function, and to 0 otherwise.])], - [AC_DEFINE([HAVE_MALLOC_GNU], [0]) - REPLACE_MALLOC=1 - ]) -]) - -# gl_FUNC_MALLOC_POSIX -# -------------------- -# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it -# fails), and replace malloc if it is not. -AC_DEFUN([gl_FUNC_MALLOC_POSIX], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) - if test $gl_cv_func_malloc_posix = yes; then - AC_DEFINE([HAVE_MALLOC_POSIX], [1], - [Define if the 'malloc' function is POSIX compliant.]) - else - REPLACE_MALLOC=1 - fi -]) - -# Test whether malloc, realloc, calloc are POSIX compliant, -# Set gl_cv_func_malloc_posix to yes or no accordingly. -AC_DEFUN([gl_CHECK_MALLOC_POSIX], -[ - AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant], - [gl_cv_func_malloc_posix], - [ - dnl It is too dangerous to try to allocate a large amount of memory: - dnl some systems go to their knees when you do that. So assume that - dnl all Unix implementations of the function are POSIX compliant. - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[]], - [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - choke me - #endif - ]])], - [gl_cv_func_malloc_posix=yes], - [gl_cv_func_malloc_posix=no]) - ]) -]) diff --git a/gl/m4/manywarnings.m4 b/gl/m4/manywarnings.m4 deleted file mode 100644 index 4f701f4eac..0000000000 --- a/gl/m4/manywarnings.m4 +++ /dev/null @@ -1,276 +0,0 @@ -# manywarnings.m4 serial 8 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Simon Josefsson - -# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR) -# -------------------------------------------------- -# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR. -# Elements separated by whitespace. In set logic terms, the function -# does OUTVAR = LISTVAR \ REMOVEVAR. -AC_DEFUN([gl_MANYWARN_COMPLEMENT], -[ - gl_warn_set= - set x $2; shift - for gl_warn_item - do - case " $3 " in - *" $gl_warn_item "*) - ;; - *) - gl_warn_set="$gl_warn_set $gl_warn_item" - ;; - esac - done - $1=$gl_warn_set -]) - -# gl_MANYWARN_ALL_GCC(VARIABLE) -# ----------------------------- -# Add all documented GCC warning parameters to variable VARIABLE. -# Note that you need to test them using gl_WARN_ADD if you want to -# make sure your gcc understands it. -AC_DEFUN([gl_MANYWARN_ALL_GCC], -[ - dnl First, check for some issues that only occur when combining multiple - dnl gcc warning categories. - AC_REQUIRE([AC_PROG_CC]) - if test -n "$GCC"; then - - dnl Check if -W -Werror -Wno-missing-field-initializers is supported - dnl with the current $CC $CFLAGS $CPPFLAGS. - AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported]) - AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [ - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[]], [[]])], - [gl_cv_cc_nomfi_supported=yes], - [gl_cv_cc_nomfi_supported=no]) - CFLAGS="$gl_save_CFLAGS"]) - AC_MSG_RESULT([$gl_cv_cc_nomfi_supported]) - - if test "$gl_cv_cc_nomfi_supported" = yes; then - dnl Now check whether -Wno-missing-field-initializers is needed - dnl for the { 0, } construct. - AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed]) - AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [ - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -W -Werror" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[int f (void) - { - typedef struct { int a; int b; } s_t; - s_t s1 = { 0, }; - return s1.b; - } - ]], - [[]])], - [gl_cv_cc_nomfi_needed=no], - [gl_cv_cc_nomfi_needed=yes]) - CFLAGS="$gl_save_CFLAGS" - ]) - AC_MSG_RESULT([$gl_cv_cc_nomfi_needed]) - fi - - dnl Next, check if -Werror -Wuninitialized is useful with the - dnl user's choice of $CFLAGS; some versions of gcc warn that it - dnl has no effect if -O is not also used - AC_MSG_CHECKING([whether -Wuninitialized is supported]) - AC_CACHE_VAL([gl_cv_cc_uninitialized_supported], [ - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror -Wuninitialized" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[]], [[]])], - [gl_cv_cc_uninitialized_supported=yes], - [gl_cv_cc_uninitialized_supported=no]) - CFLAGS="$gl_save_CFLAGS"]) - AC_MSG_RESULT([$gl_cv_cc_uninitialized_supported]) - - fi - - # List all gcc warning categories. - # To compare this list to your installed GCC's, run this Bash command: - # - # comm -3 \ - # <(sed -n 's/^ *\(-[^ ]*\) .*/\1/p' manywarnings.m4 | sort) \ - # <(gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort | - # grep -v -x -f <( - # awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec)) - - gl_manywarn_set= - for gl_manywarn_item in \ - -fno-common \ - -W \ - -Wabi \ - -Waddress \ - -Waggressive-loop-optimizations \ - -Wall \ - -Wattributes \ - -Wbad-function-cast \ - -Wbool-compare \ - -Wbuiltin-macro-redefined \ - -Wcast-align \ - -Wchar-subscripts \ - -Wchkp \ - -Wclobbered \ - -Wcomment \ - -Wcomments \ - -Wcoverage-mismatch \ - -Wcpp \ - -Wdate-time \ - -Wdeprecated \ - -Wdeprecated-declarations \ - -Wdesignated-init \ - -Wdisabled-optimization \ - -Wdiscarded-array-qualifiers \ - -Wdiscarded-qualifiers \ - -Wdiv-by-zero \ - -Wdouble-promotion \ - -Wduplicated-cond \ - -Wempty-body \ - -Wendif-labels \ - -Wenum-compare \ - -Wextra \ - -Wformat-contains-nul \ - -Wformat-extra-args \ - -Wformat-nonliteral \ - -Wformat-security \ - -Wformat-signedness \ - -Wformat-y2k \ - -Wformat-zero-length \ - -Wframe-address \ - -Wfree-nonheap-object \ - -Whsa \ - -Wignored-attributes \ - -Wignored-qualifiers \ - -Wimplicit \ - -Wimplicit-function-declaration \ - -Wimplicit-int \ - -Wincompatible-pointer-types \ - -Winit-self \ - -Winline \ - -Wint-conversion \ - -Wint-to-pointer-cast \ - -Winvalid-memory-model \ - -Winvalid-pch \ - -Wjump-misses-init \ - -Wlogical-not-parentheses \ - -Wlogical-op \ - -Wmain \ - -Wmaybe-uninitialized \ - -Wmemset-transposed-args \ - -Wmisleading-indentation \ - -Wmissing-braces \ - -Wmissing-declarations \ - -Wmissing-field-initializers \ - -Wmissing-include-dirs \ - -Wmissing-parameter-type \ - -Wmissing-prototypes \ - -Wmultichar \ - -Wnarrowing \ - -Wnested-externs \ - -Wnonnull \ - -Wnonnull-compare \ - -Wnull-dereference \ - -Wodr \ - -Wold-style-declaration \ - -Wold-style-definition \ - -Wopenmp-simd \ - -Woverflow \ - -Woverlength-strings \ - -Woverride-init \ - -Wpacked \ - -Wpacked-bitfield-compat \ - -Wparentheses \ - -Wpointer-arith \ - -Wpointer-sign \ - -Wpointer-to-int-cast \ - -Wpragmas \ - -Wreturn-local-addr \ - -Wreturn-type \ - -Wscalar-storage-order \ - -Wsequence-point \ - -Wshadow \ - -Wshift-count-negative \ - -Wshift-count-overflow \ - -Wshift-negative-value \ - -Wsizeof-array-argument \ - -Wsizeof-pointer-memaccess \ - -Wstack-protector \ - -Wstrict-aliasing \ - -Wstrict-overflow \ - -Wstrict-prototypes \ - -Wsuggest-attribute=const \ - -Wsuggest-attribute=format \ - -Wsuggest-attribute=noreturn \ - -Wsuggest-attribute=pure \ - -Wsuggest-final-methods \ - -Wsuggest-final-types \ - -Wswitch \ - -Wswitch-bool \ - -Wswitch-default \ - -Wsync-nand \ - -Wsystem-headers \ - -Wtautological-compare \ - -Wtrampolines \ - -Wtrigraphs \ - -Wtype-limits \ - -Wuninitialized \ - -Wunknown-pragmas \ - -Wunsafe-loop-optimizations \ - -Wunused \ - -Wunused-but-set-parameter \ - -Wunused-but-set-variable \ - -Wunused-function \ - -Wunused-label \ - -Wunused-local-typedefs \ - -Wunused-macros \ - -Wunused-parameter \ - -Wunused-result \ - -Wunused-value \ - -Wunused-variable \ - -Wvarargs \ - -Wvariadic-macros \ - -Wvector-operation-performance \ - -Wvla \ - -Wvolatile-register-var \ - -Wwrite-strings \ - \ - ; do - gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" - done - - # gcc --help=warnings outputs an unusual form for these options; list - # them here so that the above 'comm' command doesn't report a false match. - gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2" - gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc" - gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2" - gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2" - - # These are needed for older GCC versions. - if test -n "$GCC"; then - case `($CC --version) 2>/dev/null` in - 'gcc (GCC) '[[0-3]].* | \ - 'gcc (GCC) '4.[[0-7]].*) - gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option" - gl_manywarn_set="$gl_manywarn_set -funit-at-a-time" - ;; - esac - fi - - # Disable specific options as needed. - if test "$gl_cv_cc_nomfi_needed" = yes; then - gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" - fi - - if test "$gl_cv_cc_uninitialized_supported" = no; then - gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized" - fi - - $1=$gl_manywarn_set -]) diff --git a/gl/m4/math_h.m4 b/gl/m4/math_h.m4 deleted file mode 100644 index 35d07ee5f5..0000000000 --- a/gl/m4/math_h.m4 +++ /dev/null @@ -1,353 +0,0 @@ -# math_h.m4 serial 114 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_MATH_H], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - gl_CHECK_NEXT_HEADERS([math.h]) - - AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], - [[/* Solaris 10 has a broken definition of NAN. Other platforms - fail to provide NAN, or provide it only in C99 mode; this - test only needs to fail when NAN is provided but wrong. */ - float f = 1.0f; -#ifdef NAN - f = NAN; -#endif - return f == 0;]])], - [gl_cv_header_math_nan_works=yes], - [gl_cv_header_math_nan_works=no])]) - if test $gl_cv_header_math_nan_works = no; then - REPLACE_NAN=1 - fi - AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], - [[/* Solaris 10 has a broken definition of HUGE_VAL. */ - double d = HUGE_VAL; - return d == 0;]])], - [gl_cv_header_math_huge_val_works=yes], - [gl_cv_header_math_huge_val_works=no])]) - if test $gl_cv_header_math_huge_val_works = no; then - REPLACE_HUGE_VAL=1 - fi - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[#include ]], - [acosf acosl asinf asinl atanf atanl - cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf - expf expl exp2 exp2f exp2l expm1 expm1f expm1l - fabsf fabsl floorf floorl fma fmaf fmal - fmod fmodf fmodl frexpf frexpl hypotf hypotl - ilogb ilogbf ilogbl - ldexpf ldexpl - log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l - logb logbf logbl - modf modff modfl powf - remainder remainderf remainderl - rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl - tanf tanl tanhf trunc truncf truncl]) -]) - -AC_DEFUN([gl_MATH_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_MATH_H_DEFAULTS], -[ - GNULIB_ACOSF=0; AC_SUBST([GNULIB_ACOSF]) - GNULIB_ACOSL=0; AC_SUBST([GNULIB_ACOSL]) - GNULIB_ASINF=0; AC_SUBST([GNULIB_ASINF]) - GNULIB_ASINL=0; AC_SUBST([GNULIB_ASINL]) - GNULIB_ATANF=0; AC_SUBST([GNULIB_ATANF]) - GNULIB_ATANL=0; AC_SUBST([GNULIB_ATANL]) - GNULIB_ATAN2F=0; AC_SUBST([GNULIB_ATAN2F]) - GNULIB_CBRT=0; AC_SUBST([GNULIB_CBRT]) - GNULIB_CBRTF=0; AC_SUBST([GNULIB_CBRTF]) - GNULIB_CBRTL=0; AC_SUBST([GNULIB_CBRTL]) - GNULIB_CEIL=0; AC_SUBST([GNULIB_CEIL]) - GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF]) - GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL]) - GNULIB_COPYSIGN=0; AC_SUBST([GNULIB_COPYSIGN]) - GNULIB_COPYSIGNF=0; AC_SUBST([GNULIB_COPYSIGNF]) - GNULIB_COPYSIGNL=0; AC_SUBST([GNULIB_COPYSIGNL]) - GNULIB_COSF=0; AC_SUBST([GNULIB_COSF]) - GNULIB_COSL=0; AC_SUBST([GNULIB_COSL]) - GNULIB_COSHF=0; AC_SUBST([GNULIB_COSHF]) - GNULIB_EXPF=0; AC_SUBST([GNULIB_EXPF]) - GNULIB_EXPL=0; AC_SUBST([GNULIB_EXPL]) - GNULIB_EXP2=0; AC_SUBST([GNULIB_EXP2]) - GNULIB_EXP2F=0; AC_SUBST([GNULIB_EXP2F]) - GNULIB_EXP2L=0; AC_SUBST([GNULIB_EXP2L]) - GNULIB_EXPM1=0; AC_SUBST([GNULIB_EXPM1]) - GNULIB_EXPM1F=0; AC_SUBST([GNULIB_EXPM1F]) - GNULIB_EXPM1L=0; AC_SUBST([GNULIB_EXPM1L]) - GNULIB_FABSF=0; AC_SUBST([GNULIB_FABSF]) - GNULIB_FABSL=0; AC_SUBST([GNULIB_FABSL]) - GNULIB_FLOOR=0; AC_SUBST([GNULIB_FLOOR]) - GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF]) - GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL]) - GNULIB_FMA=0; AC_SUBST([GNULIB_FMA]) - GNULIB_FMAF=0; AC_SUBST([GNULIB_FMAF]) - GNULIB_FMAL=0; AC_SUBST([GNULIB_FMAL]) - GNULIB_FMOD=0; AC_SUBST([GNULIB_FMOD]) - GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF]) - GNULIB_FMODL=0; AC_SUBST([GNULIB_FMODL]) - GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF]) - GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP]) - GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL]) - GNULIB_HYPOT=0; AC_SUBST([GNULIB_HYPOT]) - GNULIB_HYPOTF=0; AC_SUBST([GNULIB_HYPOTF]) - GNULIB_HYPOTL=0; AC_SUBST([GNULIB_HYPOTL]) - GNULIB_ILOGB=0; AC_SUBST([GNULIB_ILOGB]) - GNULIB_ILOGBF=0; AC_SUBST([GNULIB_ILOGBF]) - GNULIB_ILOGBL=0; AC_SUBST([GNULIB_ILOGBL]) - GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE]) - GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF]) - GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN]) - GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF]) - GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND]) - GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL]) - GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF]) - GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL]) - GNULIB_LOG=0; AC_SUBST([GNULIB_LOG]) - GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF]) - GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL]) - GNULIB_LOG10=0; AC_SUBST([GNULIB_LOG10]) - GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F]) - GNULIB_LOG10L=0; AC_SUBST([GNULIB_LOG10L]) - GNULIB_LOG1P=0; AC_SUBST([GNULIB_LOG1P]) - GNULIB_LOG1PF=0; AC_SUBST([GNULIB_LOG1PF]) - GNULIB_LOG1PL=0; AC_SUBST([GNULIB_LOG1PL]) - GNULIB_LOG2=0; AC_SUBST([GNULIB_LOG2]) - GNULIB_LOG2F=0; AC_SUBST([GNULIB_LOG2F]) - GNULIB_LOG2L=0; AC_SUBST([GNULIB_LOG2L]) - GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB]) - GNULIB_LOGBF=0; AC_SUBST([GNULIB_LOGBF]) - GNULIB_LOGBL=0; AC_SUBST([GNULIB_LOGBL]) - GNULIB_MODF=0; AC_SUBST([GNULIB_MODF]) - GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF]) - GNULIB_MODFL=0; AC_SUBST([GNULIB_MODFL]) - GNULIB_POWF=0; AC_SUBST([GNULIB_POWF]) - GNULIB_REMAINDER=0; AC_SUBST([GNULIB_REMAINDER]) - GNULIB_REMAINDERF=0; AC_SUBST([GNULIB_REMAINDERF]) - GNULIB_REMAINDERL=0; AC_SUBST([GNULIB_REMAINDERL]) - GNULIB_RINT=0; AC_SUBST([GNULIB_RINT]) - GNULIB_RINTF=0; AC_SUBST([GNULIB_RINTF]) - GNULIB_RINTL=0; AC_SUBST([GNULIB_RINTL]) - GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND]) - GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF]) - GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL]) - GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT]) - GNULIB_SINF=0; AC_SUBST([GNULIB_SINF]) - GNULIB_SINL=0; AC_SUBST([GNULIB_SINL]) - GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF]) - GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF]) - GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL]) - GNULIB_TANF=0; AC_SUBST([GNULIB_TANF]) - GNULIB_TANL=0; AC_SUBST([GNULIB_TANL]) - GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF]) - GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC]) - GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF]) - GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF]) - HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL]) - HAVE_ASINF=1; AC_SUBST([HAVE_ASINF]) - HAVE_ASINL=1; AC_SUBST([HAVE_ASINL]) - HAVE_ATANF=1; AC_SUBST([HAVE_ATANF]) - HAVE_ATANL=1; AC_SUBST([HAVE_ATANL]) - HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F]) - HAVE_CBRT=1; AC_SUBST([HAVE_CBRT]) - HAVE_CBRTF=1; AC_SUBST([HAVE_CBRTF]) - HAVE_CBRTL=1; AC_SUBST([HAVE_CBRTL]) - HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN]) - HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL]) - HAVE_COSF=1; AC_SUBST([HAVE_COSF]) - HAVE_COSL=1; AC_SUBST([HAVE_COSL]) - HAVE_COSHF=1; AC_SUBST([HAVE_COSHF]) - HAVE_EXPF=1; AC_SUBST([HAVE_EXPF]) - HAVE_EXPL=1; AC_SUBST([HAVE_EXPL]) - HAVE_EXPM1=1; AC_SUBST([HAVE_EXPM1]) - HAVE_EXPM1F=1; AC_SUBST([HAVE_EXPM1F]) - HAVE_FABSF=1; AC_SUBST([HAVE_FABSF]) - HAVE_FABSL=1; AC_SUBST([HAVE_FABSL]) - HAVE_FMA=1; AC_SUBST([HAVE_FMA]) - HAVE_FMAF=1; AC_SUBST([HAVE_FMAF]) - HAVE_FMAL=1; AC_SUBST([HAVE_FMAL]) - HAVE_FMODF=1; AC_SUBST([HAVE_FMODF]) - HAVE_FMODL=1; AC_SUBST([HAVE_FMODL]) - HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF]) - HAVE_HYPOTF=1; AC_SUBST([HAVE_HYPOTF]) - HAVE_HYPOTL=1; AC_SUBST([HAVE_HYPOTL]) - HAVE_ILOGB=1; AC_SUBST([HAVE_ILOGB]) - HAVE_ILOGBF=1; AC_SUBST([HAVE_ILOGBF]) - HAVE_ILOGBL=1; AC_SUBST([HAVE_ILOGBL]) - HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF]) - HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND]) - HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL]) - HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF]) - HAVE_LOGF=1; AC_SUBST([HAVE_LOGF]) - HAVE_LOGL=1; AC_SUBST([HAVE_LOGL]) - HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F]) - HAVE_LOG10L=1; AC_SUBST([HAVE_LOG10L]) - HAVE_LOG1P=1; AC_SUBST([HAVE_LOG1P]) - HAVE_LOG1PF=1; AC_SUBST([HAVE_LOG1PF]) - HAVE_LOG1PL=1; AC_SUBST([HAVE_LOG1PL]) - HAVE_LOGBF=1; AC_SUBST([HAVE_LOGBF]) - HAVE_LOGBL=1; AC_SUBST([HAVE_LOGBL]) - HAVE_MODFF=1; AC_SUBST([HAVE_MODFF]) - HAVE_MODFL=1; AC_SUBST([HAVE_MODFL]) - HAVE_POWF=1; AC_SUBST([HAVE_POWF]) - HAVE_REMAINDER=1; AC_SUBST([HAVE_REMAINDER]) - HAVE_REMAINDERF=1; AC_SUBST([HAVE_REMAINDERF]) - HAVE_RINT=1; AC_SUBST([HAVE_RINT]) - HAVE_RINTL=1; AC_SUBST([HAVE_RINTL]) - HAVE_SINF=1; AC_SUBST([HAVE_SINF]) - HAVE_SINL=1; AC_SUBST([HAVE_SINL]) - HAVE_SINHF=1; AC_SUBST([HAVE_SINHF]) - HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF]) - HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL]) - HAVE_TANF=1; AC_SUBST([HAVE_TANF]) - HAVE_TANL=1; AC_SUBST([HAVE_TANL]) - HAVE_TANHF=1; AC_SUBST([HAVE_TANHF]) - HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL]) - HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL]) - HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL]) - HAVE_DECL_CBRTF=1; AC_SUBST([HAVE_DECL_CBRTF]) - HAVE_DECL_CBRTL=1; AC_SUBST([HAVE_DECL_CBRTL]) - HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF]) - HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL]) - HAVE_DECL_COPYSIGNF=1; AC_SUBST([HAVE_DECL_COPYSIGNF]) - HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) - HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) - HAVE_DECL_EXP2=1; AC_SUBST([HAVE_DECL_EXP2]) - HAVE_DECL_EXP2F=1; AC_SUBST([HAVE_DECL_EXP2F]) - HAVE_DECL_EXP2L=1; AC_SUBST([HAVE_DECL_EXP2L]) - HAVE_DECL_EXPM1L=1; AC_SUBST([HAVE_DECL_EXPM1L]) - HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF]) - HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL]) - HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL]) - HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL]) - HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) - HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L]) - HAVE_DECL_LOG2=1; AC_SUBST([HAVE_DECL_LOG2]) - HAVE_DECL_LOG2F=1; AC_SUBST([HAVE_DECL_LOG2F]) - HAVE_DECL_LOG2L=1; AC_SUBST([HAVE_DECL_LOG2L]) - HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB]) - HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER]) - HAVE_DECL_REMAINDERL=1; AC_SUBST([HAVE_DECL_REMAINDERL]) - HAVE_DECL_RINTF=1; AC_SUBST([HAVE_DECL_RINTF]) - HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND]) - HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF]) - HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL]) - HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL]) - HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL]) - HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL]) - HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) - HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) - HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL]) - REPLACE_CBRTF=0; AC_SUBST([REPLACE_CBRTF]) - REPLACE_CBRTL=0; AC_SUBST([REPLACE_CBRTL]) - REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL]) - REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) - REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) - REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1]) - REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F]) - REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2]) - REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L]) - REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL]) - REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR]) - REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF]) - REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL]) - REPLACE_FMA=0; AC_SUBST([REPLACE_FMA]) - REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF]) - REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL]) - REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD]) - REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF]) - REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL]) - REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF]) - REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP]) - REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL]) - REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL]) - REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT]) - REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF]) - REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL]) - REPLACE_ILOGB=0; AC_SUBST([REPLACE_ILOGB]) - REPLACE_ILOGBF=0; AC_SUBST([REPLACE_ILOGBF]) - REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) - REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) - REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) - REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL]) - REPLACE_LOG=0; AC_SUBST([REPLACE_LOG]) - REPLACE_LOGF=0; AC_SUBST([REPLACE_LOGF]) - REPLACE_LOGL=0; AC_SUBST([REPLACE_LOGL]) - REPLACE_LOG10=0; AC_SUBST([REPLACE_LOG10]) - REPLACE_LOG10F=0; AC_SUBST([REPLACE_LOG10F]) - REPLACE_LOG10L=0; AC_SUBST([REPLACE_LOG10L]) - REPLACE_LOG1P=0; AC_SUBST([REPLACE_LOG1P]) - REPLACE_LOG1PF=0; AC_SUBST([REPLACE_LOG1PF]) - REPLACE_LOG1PL=0; AC_SUBST([REPLACE_LOG1PL]) - REPLACE_LOG2=0; AC_SUBST([REPLACE_LOG2]) - REPLACE_LOG2F=0; AC_SUBST([REPLACE_LOG2F]) - REPLACE_LOG2L=0; AC_SUBST([REPLACE_LOG2L]) - REPLACE_LOGB=0; AC_SUBST([REPLACE_LOGB]) - REPLACE_LOGBF=0; AC_SUBST([REPLACE_LOGBF]) - REPLACE_LOGBL=0; AC_SUBST([REPLACE_LOGBL]) - REPLACE_MODF=0; AC_SUBST([REPLACE_MODF]) - REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF]) - REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL]) - REPLACE_NAN=0; AC_SUBST([REPLACE_NAN]) - REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER]) - REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF]) - REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL]) - REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) - REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) - REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) - REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) - REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC]) - REPLACE_SQRTL=0; AC_SUBST([REPLACE_SQRTL]) - REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC]) - REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF]) - REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) -]) - -# gl_LONG_DOUBLE_VS_DOUBLE -# determines whether 'long double' and 'double' have the same representation. -# Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines -# HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly. -# The currently known platforms where this is the case are: -# Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9. -AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE], -[ - AC_CACHE_CHECK([whether long double and double are the same], - [gl_cv_long_double_equals_double], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include ]], - [[typedef int check[sizeof (long double) == sizeof (double) - && LDBL_MANT_DIG == DBL_MANT_DIG - && LDBL_MAX_EXP == DBL_MAX_EXP - && LDBL_MIN_EXP == DBL_MIN_EXP - ? 1 : -1]; - ]])], - [gl_cv_long_double_equals_double=yes], - [gl_cv_long_double_equals_double=no]) - ]) - if test $gl_cv_long_double_equals_double = yes; then - AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1], - [Define to 1 if 'long double' and 'double' have the same representation.]) - HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 - else - HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 - fi - AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]) -]) diff --git a/gl/m4/memchr.m4 b/gl/m4/memchr.m4 deleted file mode 100644 index 25d32f0ec9..0000000000 --- a/gl/m4/memchr.m4 +++ /dev/null @@ -1,88 +0,0 @@ -# memchr.m4 serial 12 -dnl Copyright (C) 2002-2004, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN_ONCE([gl_FUNC_MEMCHR], -[ - dnl Check for prerequisites for memory fence checks. - gl_FUNC_MMAP_ANON - AC_CHECK_HEADERS_ONCE([sys/mman.h]) - AC_CHECK_FUNCS_ONCE([mprotect]) - - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [ - dnl These days, we assume memchr is present. But if support for old - dnl platforms is desired: - AC_CHECK_FUNCS_ONCE([memchr]) - if test $ac_cv_func_memchr = no; then - HAVE_MEMCHR=0 - fi - ]) - if test $HAVE_MEMCHR = 1; then - # Detect platform-specific bugs in some versions of glibc: - # memchr should not dereference anything with length 0 - # http://bugzilla.redhat.com/499689 - # memchr should not dereference overestimated length after a match - # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 - # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 - # Assume that memchr works on platforms that lack mprotect. - AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], - [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -#include -#if HAVE_SYS_MMAN_H -# include -# include -# include -# include -# ifndef MAP_FILE -# define MAP_FILE 0 -# endif -#endif -]], [[ - int result = 0; - char *fence = NULL; -#if HAVE_SYS_MMAN_H && HAVE_MPROTECT -# if HAVE_MAP_ANONYMOUS - const int flags = MAP_ANONYMOUS | MAP_PRIVATE; - const int fd = -1; -# else /* !HAVE_MAP_ANONYMOUS */ - const int flags = MAP_FILE | MAP_PRIVATE; - int fd = open ("/dev/zero", O_RDONLY, 0666); - if (fd >= 0) -# endif - { - int pagesize = getpagesize (); - char *two_pages = - (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, - flags, fd, 0); - if (two_pages != (char *)(-1) - && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) - fence = two_pages + pagesize; - } -#endif - if (fence) - { - if (memchr (fence, 0, 0)) - result |= 1; - strcpy (fence - 9, "12345678"); - if (memchr (fence - 9, 0, 79) != fence - 1) - result |= 2; - if (memchr (fence - 1, 0, 3) != fence - 1) - result |= 4; - } - return result; -]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], - [dnl Be pessimistic for now. - gl_cv_func_memchr_works="guessing no"])]) - if test "$gl_cv_func_memchr_works" != yes; then - REPLACE_MEMCHR=1 - fi - fi -]) - -# Prerequisites of lib/memchr.c. -AC_DEFUN([gl_PREREQ_MEMCHR], [ - AC_CHECK_HEADERS([bp-sym.h]) -]) diff --git a/gl/m4/memmem.m4 b/gl/m4/memmem.m4 deleted file mode 100644 index 981ede76b4..0000000000 --- a/gl/m4/memmem.m4 +++ /dev/null @@ -1,151 +0,0 @@ -# memmem.m4 serial 24 -dnl Copyright (C) 2002-2004, 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Check that memmem is present and functional. -AC_DEFUN([gl_FUNC_MEMMEM_SIMPLE], -[ - dnl Persuade glibc to declare memmem(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - AC_CHECK_FUNCS([memmem]) - if test $ac_cv_func_memmem = yes; then - HAVE_MEMMEM=1 - else - HAVE_MEMMEM=0 - fi - AC_CHECK_DECLS_ONCE([memmem]) - if test $ac_cv_have_decl_memmem = no; then - HAVE_DECL_MEMMEM=0 - else - dnl Detect http://sourceware.org/bugzilla/show_bug.cgi?id=12092. - dnl Also check that we handle empty needles correctly. - AC_CACHE_CHECK([whether memmem works], - [gl_cv_func_memmem_works_always], - [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -#include /* for memmem */ -#define P "_EF_BF_BD" -#define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P -#define NEEDLE P P P P P -]], [[ - int result = 0; - if (memmem (HAYSTACK, strlen (HAYSTACK), NEEDLE, strlen (NEEDLE))) - result |= 1; - /* Check for empty needle behavior. */ - { - const char *haystack = "AAA"; - if (memmem (haystack, 3, NULL, 0) != haystack) - result |= 2; - } - return result; - ]])], - [gl_cv_func_memmem_works_always=yes], - [gl_cv_func_memmem_works_always=no], - [dnl glibc 2.9..2.12 and cygwin 1.7.7 have issue #12092 above. - dnl Also empty needles work on glibc >= 2.1 and cygwin >= 1.7.0. - dnl uClibc is not affected, since it uses different source code. - dnl Assume that it works on all other platforms (even if not linear). - AC_EGREP_CPP([Lucky user], - [ -#ifdef __GNU_LIBRARY__ - #include - #if ((__GLIBC__ == 2 && ((__GLIBC_MINOR > 0 && __GLIBC_MINOR__ < 9) \ - || __GLIBC_MINOR__ > 12)) \ - || (__GLIBC__ > 2)) \ - || defined __UCLIBC__ - Lucky user - #endif -#elif defined __CYGWIN__ - #include - #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) - Lucky user - #endif -#else - Lucky user -#endif - ], - [gl_cv_func_memmem_works_always="guessing yes"], - [gl_cv_func_memmem_works_always="guessing no"]) - ]) - ]) - case "$gl_cv_func_memmem_works_always" in - *yes) ;; - *) - REPLACE_MEMMEM=1 - ;; - esac - fi - gl_PREREQ_MEMMEM -]) # gl_FUNC_MEMMEM_SIMPLE - -dnl Additionally, check that memmem has linear performance characteristics -AC_DEFUN([gl_FUNC_MEMMEM], -[ - AC_REQUIRE([gl_FUNC_MEMMEM_SIMPLE]) - if test $HAVE_DECL_MEMMEM = 1 && test $REPLACE_MEMMEM = 0; then - AC_CACHE_CHECK([whether memmem works in linear time], - [gl_cv_func_memmem_works_fast], - [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -#include /* for signal */ -#include /* for memmem */ -#include /* for malloc */ -#include /* for alarm */ -static void quit (int sig) { _exit (sig + 128); } -]], [[ - int result = 0; - size_t m = 1000000; - char *haystack = (char *) malloc (2 * m + 1); - char *needle = (char *) malloc (m + 1); - /* Failure to compile this test due to missing alarm is okay, - since all such platforms (mingw) also lack memmem. */ - signal (SIGALRM, quit); - alarm (5); - /* Check for quadratic performance. */ - if (haystack && needle) - { - memset (haystack, 'A', 2 * m); - haystack[2 * m] = 'B'; - memset (needle, 'A', m); - needle[m] = 'B'; - if (!memmem (haystack, 2 * m + 1, needle, m + 1)) - result |= 1; - } - return result; - ]])], - [gl_cv_func_memmem_works_fast=yes], [gl_cv_func_memmem_works_fast=no], - [dnl Only glibc >= 2.9 and cygwin > 1.7.0 are known to have a - dnl memmem that works in linear time. - AC_EGREP_CPP([Lucky user], - [ -#include -#ifdef __GNU_LIBRARY__ - #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)) \ - && !defined __UCLIBC__ - Lucky user - #endif -#endif -#ifdef __CYGWIN__ - #include - #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 0) - Lucky user - #endif -#endif - ], - [gl_cv_func_memmem_works_fast="guessing yes"], - [gl_cv_func_memmem_works_fast="guessing no"]) - ]) - ]) - case "$gl_cv_func_memmem_works_fast" in - *yes) ;; - *) - REPLACE_MEMMEM=1 - ;; - esac - fi -]) # gl_FUNC_MEMMEM - -# Prerequisites of lib/memmem.c. -AC_DEFUN([gl_PREREQ_MEMMEM], [:]) diff --git a/gl/m4/minmax.m4 b/gl/m4/minmax.m4 deleted file mode 100644 index 9c43e6452c..0000000000 --- a/gl/m4/minmax.m4 +++ /dev/null @@ -1,44 +0,0 @@ -# minmax.m4 serial 4 -dnl Copyright (C) 2005, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_PREREQ([2.53]) - -AC_DEFUN([gl_MINMAX], -[ - AC_REQUIRE([gl_PREREQ_MINMAX]) -]) - -# Prerequisites of lib/minmax.h. -AC_DEFUN([gl_PREREQ_MINMAX], -[ - gl_MINMAX_IN_HEADER([limits.h]) - gl_MINMAX_IN_HEADER([sys/param.h]) -]) - -dnl gl_MINMAX_IN_HEADER(HEADER) -dnl The parameter has to be a literal header name; it cannot be macro, -dnl nor a shell variable. (Because autoheader collects only AC_DEFINE -dnl invocations with a literal macro name.) -AC_DEFUN([gl_MINMAX_IN_HEADER], -[ - m4_pushdef([header], AS_TR_SH([$1])) - m4_pushdef([HEADER], AS_TR_CPP([$1])) - AC_CACHE_CHECK([whether <$1> defines MIN and MAX], - [gl_cv_minmax_in_]header, - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include <$1> - int x = MIN (42, 17);]], - [[]])], - [gl_cv_minmax_in_]header[=yes], - [gl_cv_minmax_in_]header[=no])]) - if test $gl_cv_minmax_in_[]header = yes; then - AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, - [Define to 1 if <$1> defines the MIN and MAX macros.]) - fi - m4_popdef([HEADER]) - m4_popdef([header]) -]) diff --git a/gl/m4/mmap-anon.m4 b/gl/m4/mmap-anon.m4 deleted file mode 100644 index 853c89dc9b..0000000000 --- a/gl/m4/mmap-anon.m4 +++ /dev/null @@ -1,55 +0,0 @@ -# mmap-anon.m4 serial 10 -dnl Copyright (C) 2005, 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Detect how mmap can be used to create anonymous (not file-backed) memory -# mappings. -# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS -# and MAP_ANON exist and have the same value. -# - On HP-UX, only MAP_ANONYMOUS exists. -# - On Mac OS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists. -# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be -# used. - -AC_DEFUN([gl_FUNC_MMAP_ANON], -[ - dnl Persuade glibc to define MAP_ANONYMOUS. - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it - # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is - # irrelevant for anonymous mappings. - AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no]) - - # Try to allow MAP_ANONYMOUS. - gl_have_mmap_anonymous=no - if test $gl_have_mmap = yes; then - AC_MSG_CHECKING([for MAP_ANONYMOUS]) - AC_EGREP_CPP([I cannot identify this map], [ -#include -#ifdef MAP_ANONYMOUS - I cannot identify this map -#endif -], - [gl_have_mmap_anonymous=yes]) - if test $gl_have_mmap_anonymous != yes; then - AC_EGREP_CPP([I cannot identify this map], [ -#include -#ifdef MAP_ANON - I cannot identify this map -#endif -], - [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON], - [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.]) - gl_have_mmap_anonymous=yes]) - fi - AC_MSG_RESULT([$gl_have_mmap_anonymous]) - if test $gl_have_mmap_anonymous = yes; then - AC_DEFINE([HAVE_MAP_ANONYMOUS], [1], - [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including - config.h and .]) - fi - fi -]) diff --git a/gl/m4/msvc-inval.m4 b/gl/m4/msvc-inval.m4 deleted file mode 100644 index f5e4c89309..0000000000 --- a/gl/m4/msvc-inval.m4 +++ /dev/null @@ -1,19 +0,0 @@ -# msvc-inval.m4 serial 1 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_MSVC_INVAL], -[ - AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) - if test $ac_cv_func__set_invalid_parameter_handler = yes; then - HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 - AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], - [Define to 1 on MSVC platforms that have the "invalid parameter handler" - concept.]) - else - HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 - fi - AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) -]) diff --git a/gl/m4/msvc-nothrow.m4 b/gl/m4/msvc-nothrow.m4 deleted file mode 100644 index 58f5c0bc20..0000000000 --- a/gl/m4/msvc-nothrow.m4 +++ /dev/null @@ -1,10 +0,0 @@ -# msvc-nothrow.m4 serial 1 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_MSVC_NOTHROW], -[ - AC_REQUIRE([gl_MSVC_INVAL]) -]) diff --git a/gl/m4/multiarch.m4 b/gl/m4/multiarch.m4 deleted file mode 100644 index 43b5d05750..0000000000 --- a/gl/m4/multiarch.m4 +++ /dev/null @@ -1,62 +0,0 @@ -# multiarch.m4 serial 7 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Determine whether the compiler is or may be producing universal binaries. -# -# On Mac OS X 10.5 and later systems, the user can create libraries and -# executables that work on multiple system types--known as "fat" or -# "universal" binaries--by specifying multiple '-arch' options to the -# compiler but only a single '-arch' option to the preprocessor. Like -# this: -# -# ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ -# CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ -# CPP="gcc -E" CXXCPP="g++ -E" -# -# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. - -AC_DEFUN_ONCE([gl_MULTIARCH], -[ - dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. - gl_cv_c_multiarch=no - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - ]])], - [ - dnl Check for potential -arch flags. It is not universal unless - dnl there are at least two -arch flags with different values. - arch= - prev= - for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do - if test -n "$prev"; then - case $word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$arch" || test "$arch" = "$word"; then - arch="$word" - else - gl_cv_c_multiarch=yes - fi - ;; - esac - prev= - else - if test "x$word" = "x-arch"; then - prev=arch - fi - fi - done - ]) - if test $gl_cv_c_multiarch = yes; then - APPLE_UNIVERSAL_BUILD=1 - else - APPLE_UNIVERSAL_BUILD=0 - fi - AC_SUBST([APPLE_UNIVERSAL_BUILD]) -]) diff --git a/gl/m4/netdb_h.m4 b/gl/m4/netdb_h.m4 deleted file mode 100644 index 4e5206cebe..0000000000 --- a/gl/m4/netdb_h.m4 +++ /dev/null @@ -1,43 +0,0 @@ -# netdb_h.m4 serial 11 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_HEADER_NETDB], -[ - AC_REQUIRE([gl_NETDB_H_DEFAULTS]) - gl_CHECK_NEXT_HEADERS([netdb.h]) - if test $ac_cv_header_netdb_h = yes; then - HAVE_NETDB_H=1 - else - HAVE_NETDB_H=0 - fi - AC_SUBST([HAVE_NETDB_H]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[#include ]], - [getaddrinfo freeaddrinfo gai_strerror getnameinfo]) -]) - -AC_DEFUN([gl_NETDB_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_NETDB_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_NETDB_H_DEFAULTS], -[ - GNULIB_GETADDRINFO=0; AC_SUBST([GNULIB_GETADDRINFO]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_STRUCT_ADDRINFO=1; AC_SUBST([HAVE_STRUCT_ADDRINFO]) - HAVE_DECL_FREEADDRINFO=1; AC_SUBST([HAVE_DECL_FREEADDRINFO]) - HAVE_DECL_GAI_STRERROR=1; AC_SUBST([HAVE_DECL_GAI_STRERROR]) - HAVE_DECL_GETADDRINFO=1; AC_SUBST([HAVE_DECL_GETADDRINFO]) - HAVE_DECL_GETNAMEINFO=1; AC_SUBST([HAVE_DECL_GETNAMEINFO]) - REPLACE_GAI_STRERROR=0; AC_SUBST([REPLACE_GAI_STRERROR]) -]) diff --git a/gl/m4/netinet_in_h.m4 b/gl/m4/netinet_in_h.m4 deleted file mode 100644 index 93dcc68947..0000000000 --- a/gl/m4/netinet_in_h.m4 +++ /dev/null @@ -1,31 +0,0 @@ -# netinet_in_h.m4 serial 5 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_HEADER_NETINET_IN], -[ - AC_CACHE_CHECK([whether is self-contained], - [gl_cv_header_netinet_in_h_selfcontained], - [ - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])], - [gl_cv_header_netinet_in_h_selfcontained=yes], - [gl_cv_header_netinet_in_h_selfcontained=no]) - ]) - if test $gl_cv_header_netinet_in_h_selfcontained = yes; then - NETINET_IN_H='' - else - NETINET_IN_H='netinet/in.h' - AC_CHECK_HEADERS([netinet/in.h]) - gl_CHECK_NEXT_HEADERS([netinet/in.h]) - if test $ac_cv_header_netinet_in_h = yes; then - HAVE_NETINET_IN_H=1 - else - HAVE_NETINET_IN_H=0 - fi - AC_SUBST([HAVE_NETINET_IN_H]) - fi - AC_SUBST([NETINET_IN_H]) - AM_CONDITIONAL([GL_GENERATE_NETINET_IN_H], [test -n "$NETINET_IN_H"]) -]) diff --git a/gl/m4/off_t.m4 b/gl/m4/off_t.m4 deleted file mode 100644 index 282751b47b..0000000000 --- a/gl/m4/off_t.m4 +++ /dev/null @@ -1,18 +0,0 @@ -# off_t.m4 serial 1 -dnl Copyright (C) 2012-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Check whether to override the 'off_t' type. -dnl Set WINDOWS_64_BIT_OFF_T. - -AC_DEFUN([gl_TYPE_OFF_T], -[ - m4_ifdef([gl_LARGEFILE], [ - AC_REQUIRE([gl_LARGEFILE]) - ], [ - WINDOWS_64_BIT_OFF_T=0 - ]) - AC_SUBST([WINDOWS_64_BIT_OFF_T]) -]) diff --git a/gl/m4/onceonly_2_57.m4 b/gl/m4/onceonly_2_57.m4 deleted file mode 100644 index 9a24bc30ec..0000000000 --- a/gl/m4/onceonly_2_57.m4 +++ /dev/null @@ -1,87 +0,0 @@ -# onceonly_2_57.m4 serial 4 -dnl Copyright (C) 2002, 2003, 2005, 2006, 2010 Free Software Foundation, -dnl Inc. -dnl This file is free software, distributed under the terms of the GNU -dnl General Public License. As a special exception to the GNU General -dnl Public License, this file may be distributed as part of a program -dnl that contains a configuration script generated by Autoconf, under -dnl the same distribution terms as the rest of that program. - -dnl This file defines some "once only" variants of standard autoconf macros. -dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS -dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS -dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS -dnl AC_REQUIRE([AC_FUNC_STRCOLL]) like AC_FUNC_STRCOLL -dnl The advantage is that the check for each of the headers/functions/decls -dnl will be put only once into the 'configure' file. It keeps the size of -dnl the 'configure' file down, and avoids redundant output when 'configure' -dnl is run. -dnl The drawback is that the checks cannot be conditionalized. If you write -dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi -dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to -dnl empty, and the check will be inserted before the body of the AC_DEFUNed -dnl function. - -dnl This is like onceonly.m4, except that it uses diversions to named sections -dnl DEFAULTS and INIT_PREPARE in order to check all requested headers at once, -dnl thus reducing the size of 'configure'. Works with autoconf-2.57. The -dnl size reduction is ca. 9%. - -dnl Autoconf version 2.57 or newer is recommended. -AC_PREREQ(2.57) - -# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of -# AC_CHECK_HEADERS(HEADER1 HEADER2 ...). -AC_DEFUN([AC_CHECK_HEADERS_ONCE], [ - : - AC_FOREACH([gl_HEADER_NAME], [$1], [ - AC_DEFUN([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME, - [./-], [___])), [ - m4_divert_text([INIT_PREPARE], - [gl_header_list="$gl_header_list gl_HEADER_NAME"]) - gl_HEADERS_EXPANSION - AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])), - [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.]) - ]) - AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME, - [./-], [___]))) - ]) -]) -m4_define([gl_HEADERS_EXPANSION], [ - m4_divert_text([DEFAULTS], [gl_header_list=]) - AC_CHECK_HEADERS([$gl_header_list]) - m4_define([gl_HEADERS_EXPANSION], []) -]) - -# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of -# AC_CHECK_FUNCS(FUNC1 FUNC2 ...). -AC_DEFUN([AC_CHECK_FUNCS_ONCE], [ - : - AC_FOREACH([gl_FUNC_NAME], [$1], [ - AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [ - m4_divert_text([INIT_PREPARE], - [gl_func_list="$gl_func_list gl_FUNC_NAME"]) - gl_FUNCS_EXPANSION - AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])), - [Define to 1 if you have the `]m4_defn([gl_FUNC_NAME])[' function.]) - ]) - AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME])) - ]) -]) -m4_define([gl_FUNCS_EXPANSION], [ - m4_divert_text([DEFAULTS], [gl_func_list=]) - AC_CHECK_FUNCS([$gl_func_list]) - m4_define([gl_FUNCS_EXPANSION], []) -]) - -# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of -# AC_CHECK_DECLS(DECL1, DECL2, ...). -AC_DEFUN([AC_CHECK_DECLS_ONCE], [ - : - AC_FOREACH([gl_DECL_NAME], [$1], [ - AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [ - AC_CHECK_DECLS(m4_defn([gl_DECL_NAME])) - ]) - AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME])) - ]) -]) diff --git a/gl/m4/printf.m4 b/gl/m4/printf.m4 deleted file mode 100644 index c7a14b20e0..0000000000 --- a/gl/m4/printf.m4 +++ /dev/null @@ -1,1557 +0,0 @@ -# printf.m4 serial 52 -dnl Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Test whether the *printf family of functions supports the 'j', 'z', 't', -dnl 'L' size specifiers. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_sizes_c99. - -AC_DEFUN([gl_PRINTF_SIZES_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports size specifiers as in C99], - [gl_cv_func_printf_sizes_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#include -#if HAVE_STDINT_H_WITH_UINTMAX -# include -#endif -#if HAVE_INTTYPES_H_WITH_UINTMAX -# include -#endif -static char buf[100]; -int main () -{ - int result = 0; -#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX - buf[0] = '\0'; - if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 - || strcmp (buf, "12345671 33") != 0) - result |= 1; -#else - result |= 1; -#endif - buf[0] = '\0'; - if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 - || strcmp (buf, "12345672 33") != 0) - result |= 2; - buf[0] = '\0'; - if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 - || strcmp (buf, "12345673 33") != 0) - result |= 4; - buf[0] = '\0'; - if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 - || strcmp (buf, "1.5 33") != 0) - result |= 8; - return result; -}]])], - [gl_cv_func_printf_sizes_c99=yes], - [gl_cv_func_printf_sizes_c99=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_printf_sizes_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; - darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on OpenBSD >= 3.9. - openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) - gl_cv_func_printf_sizes_c99="guessing no";; - openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on Solaris >= 2.10. - solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; - solaris*) gl_cv_func_printf_sizes_c99="guessing no";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_printf_sizes_c99="guessing no";; - netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_sizes_c99="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports 'long double' -dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_long_double. - -AC_DEFUN([gl_PRINTF_LONG_DOUBLE], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports 'long double' arguments], - [gl_cv_func_printf_long_double], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[10000]; -int main () -{ - int result = 0; - buf[0] = '\0'; - if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 - || strcmp (buf, "1.750000 33") != 0) - result |= 1; - buf[0] = '\0'; - if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 - || strcmp (buf, "1.750000e+00 33") != 0) - result |= 2; - buf[0] = '\0'; - if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 - || strcmp (buf, "1.75 33") != 0) - result |= 4; - return result; -}]])], - [gl_cv_func_printf_long_double=yes], - [gl_cv_func_printf_long_double=no], - [ -changequote(,)dnl - case "$host_os" in - beos*) gl_cv_func_printf_long_double="guessing no";; - mingw* | pw*) gl_cv_func_printf_long_double="guessing no";; - *) gl_cv_func_printf_long_double="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports infinite and NaN -dnl 'double' arguments and negative zero arguments in the %f, %e, %g -dnl directives. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_infinite. - -AC_DEFUN([gl_PRINTF_INFINITE], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], - [gl_cv_func_printf_infinite], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static int -strisnan (const char *string, size_t start_index, size_t end_index) -{ - if (start_index < end_index) - { - if (string[start_index] == '-') - start_index++; - if (start_index + 3 <= end_index - && memcmp (string + start_index, "nan", 3) == 0) - { - start_index += 3; - if (start_index == end_index - || (string[start_index] == '(' && string[end_index - 1] == ')')) - return 1; - } - } - return 0; -} -static int -have_minus_zero () -{ - static double plus_zero = 0.0; - double minus_zero = - plus_zero; - return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; -} -static char buf[10000]; -static double zero = 0.0; -int main () -{ - int result = 0; - if (sprintf (buf, "%f", 1.0 / zero) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%f", -1.0 / zero) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%f", zero / zero) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%e", 1.0 / zero) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 4; - if (sprintf (buf, "%e", -1.0 / zero) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 4; - if (sprintf (buf, "%e", zero / zero) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 8; - if (sprintf (buf, "%g", 1.0 / zero) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 16; - if (sprintf (buf, "%g", -1.0 / zero) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 16; - if (sprintf (buf, "%g", zero / zero) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 32; - /* This test fails on HP-UX 10.20. */ - if (have_minus_zero ()) - if (sprintf (buf, "%g", - zero) < 0 - || strcmp (buf, "-0") != 0) - result |= 64; - return result; -}]])], - [gl_cv_func_printf_infinite=yes], - [gl_cv_func_printf_infinite=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on FreeBSD >= 6. - freebsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; - darwin*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on HP-UX >= 11. - hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; - hpux*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_printf_infinite="guessing no";; - netbsd*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_printf_infinite="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_infinite="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports infinite and NaN -dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_infinite_long_double. - -AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_BIGENDIAN]) - AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - dnl The user can set or unset the variable gl_printf_safe to indicate - dnl that he wishes a safe handling of non-IEEE-754 'long double' values. - if test -n "$gl_printf_safe"; then - AC_DEFINE([CHECK_PRINTF_SAFE], [1], - [Define if you wish *printf() functions that have a safe handling of - non-IEEE-754 'long double' values.]) - fi - case "$gl_cv_func_printf_long_double" in - *yes) - AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], - [gl_cv_func_printf_infinite_long_double], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -]GL_NOCRASH[ -#include -#include -#include -static int -strisnan (const char *string, size_t start_index, size_t end_index) -{ - if (start_index < end_index) - { - if (string[start_index] == '-') - start_index++; - if (start_index + 3 <= end_index - && memcmp (string + start_index, "nan", 3) == 0) - { - start_index += 3; - if (start_index == end_index - || (string[start_index] == '(' && string[end_index - 1] == ')')) - return 1; - } - } - return 0; -} -static char buf[10000]; -static long double zeroL = 0.0L; -int main () -{ - int result = 0; - nocrash_init(); - if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 1; - if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Le", zeroL / zeroL) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 1; - if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 1; -#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE -/* Representation of an 80-bit 'long double' as an initializer for a sequence - of 'unsigned int' words. */ -# ifdef WORDS_BIGENDIAN -# define LDBL80_WORDS(exponent,manthi,mantlo) \ - { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ - ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ - (unsigned int) (mantlo) << 16 \ - } -# else -# define LDBL80_WORDS(exponent,manthi,mantlo) \ - { mantlo, manthi, exponent } -# endif - { /* Quiet NaN. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Le", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Lg", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - } - { - /* Signalling NaN. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Le", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Lg", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - } - { /* Pseudo-NaN. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 4; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 4; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 4; - } - { /* Pseudo-Infinity. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 8; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 8; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 8; - } - { /* Pseudo-Zero. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 16; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 16; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 16; - } - { /* Unnormalized number. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 32; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 32; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 32; - } - { /* Pseudo-Denormal. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 64; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 64; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 64; - } -#endif - return result; -}]])], - [gl_cv_func_printf_infinite_long_double=yes], - [gl_cv_func_printf_infinite_long_double=no], - [ -changequote(,)dnl - case "$host_cpu" in - # Guess no on ia64, x86_64, i386. - ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; - *) - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; - # Guess yes on FreeBSD >= 6. - freebsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; - # Guess yes on HP-UX >= 11. - hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; - hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_infinite_long_double="guessing no";; - esac - ;; - esac -changequote([,])dnl - ]) - ]) - ;; - *) - gl_cv_func_printf_infinite_long_double="irrelevant" - ;; - esac -]) - -dnl Test whether the *printf family of functions supports the 'a' and 'A' -dnl conversion specifier for hexadecimal output of floating-point numbers. -dnl (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_directive_a. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_A], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], - [gl_cv_func_printf_directive_a], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -static double zero = 0.0; -int main () -{ - int result = 0; - if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 - || (strcmp (buf, "0x1.922p+1 33") != 0 - && strcmp (buf, "0x3.244p+0 33") != 0 - && strcmp (buf, "0x6.488p-1 33") != 0 - && strcmp (buf, "0xc.91p-2 33") != 0)) - result |= 1; - if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 - || (strcmp (buf, "-0X1.922P+1 33") != 0 - && strcmp (buf, "-0X3.244P+0 33") != 0 - && strcmp (buf, "-0X6.488P-1 33") != 0 - && strcmp (buf, "-0XC.91P-2 33") != 0)) - result |= 2; - /* This catches a FreeBSD 6.1 bug: it doesn't round. */ - if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 - || (strcmp (buf, "0x1.83p+0 33") != 0 - && strcmp (buf, "0x3.05p-1 33") != 0 - && strcmp (buf, "0x6.0ap-2 33") != 0 - && strcmp (buf, "0xc.14p-3 33") != 0)) - result |= 4; - /* This catches a FreeBSD 6.1 bug. See - */ - if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 - || buf[0] == '0') - result |= 8; - /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ - if (sprintf (buf, "%.1a", 1.999) < 0 - || (strcmp (buf, "0x1.0p+1") != 0 - && strcmp (buf, "0x2.0p+0") != 0 - && strcmp (buf, "0x4.0p-1") != 0 - && strcmp (buf, "0x8.0p-2") != 0)) - result |= 16; - /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a - glibc 2.4 bug . */ - if (sprintf (buf, "%.1La", 1.999L) < 0 - || (strcmp (buf, "0x1.0p+1") != 0 - && strcmp (buf, "0x2.0p+0") != 0 - && strcmp (buf, "0x4.0p-1") != 0 - && strcmp (buf, "0x8.0p-2") != 0)) - result |= 32; - return result; -}]])], - [gl_cv_func_printf_directive_a=yes], - [gl_cv_func_printf_directive_a=no], - [ - case "$host_os" in - # Guess yes on glibc >= 2.5 systems. - *-gnu*) - AC_EGREP_CPP([BZ2908], [ - #include - #ifdef __GNU_LIBRARY__ - #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ - BZ2908 - #endif - #endif - ], - [gl_cv_func_printf_directive_a="guessing yes"], - [gl_cv_func_printf_directive_a="guessing no"]) - ;; - # If we don't know, assume the worst. - *) gl_cv_func_printf_directive_a="guessing no";; - esac - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the %F format -dnl directive. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_directive_f. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_F], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'F' directive], - [gl_cv_func_printf_directive_f], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -static double zero = 0.0; -int main () -{ - int result = 0; - if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 - || strcmp (buf, "1234567.000000 33") != 0) - result |= 1; - if (sprintf (buf, "%F", 1.0 / zero) < 0 - || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) - result |= 2; - /* This catches a Cygwin 1.5.x bug. */ - if (sprintf (buf, "%.F", 1234.0) < 0 - || strcmp (buf, "1234") != 0) - result |= 4; - return result; -}]])], - [gl_cv_func_printf_directive_f=yes], - [gl_cv_func_printf_directive_f=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_directive_f="guessing yes";; - # Guess yes on FreeBSD >= 6. - freebsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; - darwin*) gl_cv_func_printf_directive_f="guessing yes";; - # Guess yes on Solaris >= 2.10. - solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; - solaris*) gl_cv_func_printf_sizes_c99="guessing no";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_directive_f="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the %n format -dnl directive. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_directive_n. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_N], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'n' directive], - [gl_cv_func_printf_directive_n], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#ifdef _MSC_VER -/* See page about "Parameter Validation" on msdn.microsoft.com. */ -static void cdecl -invalid_parameter_handler (const wchar_t *expression, - const wchar_t *function, - const wchar_t *file, unsigned int line, - uintptr_t dummy) -{ - exit (1); -} -#endif -static char fmtstring[10]; -static char buf[100]; -int main () -{ - int count = -1; -#ifdef _MSC_VER - _set_invalid_parameter_handler (invalid_parameter_handler); -#endif - /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) - support %n in format strings in read-only memory but not in writable - memory. */ - strcpy (fmtstring, "%d %n"); - if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 - || strcmp (buf, "123 ") != 0 - || count != 4) - return 1; - return 0; -}]])], - [gl_cv_func_printf_directive_n=yes], - [gl_cv_func_printf_directive_n=no], - [ -changequote(,)dnl - case "$host_os" in - mingw*) gl_cv_func_printf_directive_n="guessing no";; - *) gl_cv_func_printf_directive_n="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the %ls format -dnl directive and in particular, when a precision is specified, whether -dnl the functions stop converting the wide string argument when the number -dnl of bytes that have been produced by this conversion equals or exceeds -dnl the precision. -dnl Result is gl_cv_func_printf_directive_ls. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'ls' directive], - [gl_cv_func_printf_directive_ls], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be - included before . */ -#include -#include -#include -#include -#include -int main () -{ - int result = 0; - char buf[100]; - /* Test whether %ls works at all. - This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on - Cygwin 1.5. */ - { - static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; - buf[0] = '\0'; - if (sprintf (buf, "%ls", wstring) < 0 - || strcmp (buf, "abc") != 0) - result |= 1; - } - /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an - assertion failure inside libc), but not on OpenBSD 4.0. */ - { - static const wchar_t wstring[] = { 'a', 0 }; - buf[0] = '\0'; - if (sprintf (buf, "%ls", wstring) < 0 - || strcmp (buf, "a") != 0) - result |= 2; - } - /* Test whether precisions in %ls are supported as specified in ISO C 99 - section 7.19.6.1: - "If a precision is specified, no more than that many bytes are written - (including shift sequences, if any), and the array shall contain a - null wide character if, to equal the multibyte character sequence - length given by the precision, the function would need to access a - wide character one past the end of the array." - This test fails on Solaris 10. */ - { - static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; - buf[0] = '\0'; - if (sprintf (buf, "%.2ls", wstring) < 0 - || strcmp (buf, "ab") != 0) - result |= 8; - } - return result; -}]])], - [gl_cv_func_printf_directive_ls=yes], - [gl_cv_func_printf_directive_ls=no], - [ -changequote(,)dnl - case "$host_os" in - openbsd*) gl_cv_func_printf_directive_ls="guessing no";; - irix*) gl_cv_func_printf_directive_ls="guessing no";; - solaris*) gl_cv_func_printf_directive_ls="guessing no";; - cygwin*) gl_cv_func_printf_directive_ls="guessing no";; - beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; - *) gl_cv_func_printf_directive_ls="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports POSIX/XSI format -dnl strings with positions. (POSIX:2001) -dnl Result is gl_cv_func_printf_positions. - -AC_DEFUN([gl_PRINTF_POSITIONS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], - [gl_cv_func_printf_positions], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -/* The string "%2$d %1$d", with dollar characters protected from the shell's - dollar expansion (possibly an autoconf bug). */ -static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; -static char buf[100]; -int main () -{ - sprintf (buf, format, 33, 55); - return (strcmp (buf, "55 33") != 0); -}]])], - [gl_cv_func_printf_positions=yes], - [gl_cv_func_printf_positions=no], - [ -changequote(,)dnl - case "$host_os" in - netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) - gl_cv_func_printf_positions="guessing no";; - beos*) gl_cv_func_printf_positions="guessing no";; - mingw* | pw*) gl_cv_func_printf_positions="guessing no";; - *) gl_cv_func_printf_positions="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports POSIX/XSI format -dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) -dnl Result is gl_cv_func_printf_flag_grouping. - -AC_DEFUN([gl_PRINTF_FLAG_GROUPING], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the grouping flag], - [gl_cv_func_printf_flag_grouping], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -int main () -{ - if (sprintf (buf, "%'d %d", 1234567, 99) < 0 - || buf[strlen (buf) - 1] != '9') - return 1; - return 0; -}]])], - [gl_cv_func_printf_flag_grouping=yes], - [gl_cv_func_printf_flag_grouping=no], - [ -changequote(,)dnl - case "$host_os" in - cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; - netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; - mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; - *) gl_cv_func_printf_flag_grouping="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the - flag correctly. -dnl (ISO C99.) See -dnl -dnl Result is gl_cv_func_printf_flag_leftadjust. - -AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], - [gl_cv_func_printf_flag_leftadjust], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -int main () -{ - /* Check that a '-' flag is not annihilated by a negative width. */ - if (sprintf (buf, "a%-*sc", -3, "b") < 0 - || strcmp (buf, "ab c") != 0) - return 1; - return 0; -}]])], - [gl_cv_func_printf_flag_leftadjust=yes], - [gl_cv_func_printf_flag_leftadjust=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on HP-UX 11. - hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; - # Guess no on HP-UX 10 and older. - hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; - # Guess yes otherwise. - *) gl_cv_func_printf_flag_leftadjust="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports padding of non-finite -dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See -dnl -dnl Result is gl_cv_func_printf_flag_zero. - -AC_DEFUN([gl_PRINTF_FLAG_ZERO], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the zero flag correctly], - [gl_cv_func_printf_flag_zero], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -static double zero = 0.0; -int main () -{ - if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 - || (strcmp (buf, " inf") != 0 - && strcmp (buf, " infinity") != 0)) - return 1; - return 0; -}]])], - [gl_cv_func_printf_flag_zero=yes], - [gl_cv_func_printf_flag_zero=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_printf_flag_zero="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_flag_zero="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports large precisions. -dnl On mingw, precisions larger than 512 are treated like 512, in integer, -dnl floating-point or pointer output. On Solaris 10/x86, precisions larger -dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC, -dnl precisions larger than 510 in floating-point output yield wrong results. -dnl On AIX 7.1, precisions larger than 998 in floating-point output yield -dnl wrong results. On BeOS, precisions larger than 1044 crash the program. -dnl Result is gl_cv_func_printf_precision. - -AC_DEFUN([gl_PRINTF_PRECISION], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports large precisions], - [gl_cv_func_printf_precision], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[5000]; -int main () -{ - int result = 0; -#ifdef __BEOS__ - /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ - return 1; -#endif - if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) - result |= 1; - if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) - result |= 2; - if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 - || buf[0] != '1') - result |= 4; - if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 - || buf[0] != '1') - result |= 4; - return result; -}]])], - [gl_cv_func_printf_precision=yes], - [gl_cv_func_printf_precision=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess no only on Solaris, native Windows, and BeOS systems. - solaris*) gl_cv_func_printf_precision="guessing no" ;; - mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; - beos*) gl_cv_func_printf_precision="guessing no" ;; - *) gl_cv_func_printf_precision="guessing yes" ;; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions recovers gracefully in case -dnl of an out-of-memory condition, or whether it crashes the entire program. -dnl Result is gl_cv_func_printf_enomem. - -AC_DEFUN([gl_PRINTF_ENOMEM], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_MULTIARCH]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf survives out-of-memory conditions], - [gl_cv_func_printf_enomem], - [ - gl_cv_func_printf_enomem="guessing no" - if test "$cross_compiling" = no; then - if test $APPLE_UNIVERSAL_BUILD = 0; then - AC_LANG_CONFTEST([AC_LANG_SOURCE([ -]GL_NOCRASH[ -changequote(,)dnl -#include -#include -#include -#include -#include -int main() -{ - struct rlimit limit; - int ret; - nocrash_init (); - /* Some printf implementations allocate temporary space with malloc. */ - /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ -#ifdef RLIMIT_DATA - if (getrlimit (RLIMIT_DATA, &limit) < 0) - return 77; - if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) - limit.rlim_max = 5000000; - limit.rlim_cur = limit.rlim_max; - if (setrlimit (RLIMIT_DATA, &limit) < 0) - return 77; -#endif - /* On Linux systems, malloc() is limited by RLIMIT_AS. */ -#ifdef RLIMIT_AS - if (getrlimit (RLIMIT_AS, &limit) < 0) - return 77; - if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) - limit.rlim_max = 5000000; - limit.rlim_cur = limit.rlim_max; - if (setrlimit (RLIMIT_AS, &limit) < 0) - return 77; -#endif - /* Some printf implementations allocate temporary space on the stack. */ -#ifdef RLIMIT_STACK - if (getrlimit (RLIMIT_STACK, &limit) < 0) - return 77; - if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) - limit.rlim_max = 5000000; - limit.rlim_cur = limit.rlim_max; - if (setrlimit (RLIMIT_STACK, &limit) < 0) - return 77; -#endif - ret = printf ("%.5000000f", 1.0); - return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); -} -changequote([,])dnl - ])]) - if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then - (./conftest 2>&AS_MESSAGE_LOG_FD - result=$? - _AS_ECHO_LOG([\$? = $result]) - if test $result != 0 && test $result != 77; then result=1; fi - exit $result - ) >/dev/null 2>/dev/null - case $? in - 0) gl_cv_func_printf_enomem="yes" ;; - 77) gl_cv_func_printf_enomem="guessing no" ;; - *) gl_cv_func_printf_enomem="no" ;; - esac - else - gl_cv_func_printf_enomem="guessing no" - fi - rm -fr conftest* - else - dnl A universal build on Apple Mac OS X platforms. - dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. - dnl But we need a configuration result that is valid in both modes. - gl_cv_func_printf_enomem="guessing no" - fi - fi - if test "$gl_cv_func_printf_enomem" = "guessing no"; then -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on Solaris. - solaris*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on AIX. - aix*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on HP-UX/hppa. - hpux*) case "$host_cpu" in - hppa*) gl_cv_func_printf_enomem="guessing yes";; - *) gl_cv_func_printf_enomem="guessing no";; - esac - ;; - # Guess yes on IRIX. - irix*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on OSF/1. - osf*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on Haiku. - haiku*) gl_cv_func_printf_enomem="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_enomem="guessing no";; - esac -changequote([,])dnl - fi - ]) -]) - -dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) -dnl Result is ac_cv_func_snprintf. - -AC_DEFUN([gl_SNPRINTF_PRESENCE], -[ - AC_CHECK_FUNCS_ONCE([snprintf]) -]) - -dnl Test whether the string produced by the snprintf function is always NUL -dnl terminated. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_snprintf_truncation_c99. - -AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf truncates the result as in C99], - [gl_cv_func_snprintf_truncation_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -static char buf[100]; -int main () -{ - strcpy (buf, "ABCDEF"); - my_snprintf (buf, 3, "%d %d", 4567, 89); - if (memcmp (buf, "45\0DEF", 6) != 0) - return 1; - return 0; -}]])], - [gl_cv_func_snprintf_truncation_c99=yes], - [gl_cv_func_snprintf_truncation_c99=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_snprintf_truncation_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; - darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on OpenBSD >= 3.9. - openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) - gl_cv_func_snprintf_truncation_c99="guessing no";; - openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on Solaris >= 2.6. - solaris2.[0-5] | solaris2.[0-5].*) - gl_cv_func_snprintf_truncation_c99="guessing no";; - solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; - aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on HP-UX >= 11. - hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; - hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on IRIX >= 6.5. - irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on OSF/1 >= 5. - osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; - osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_snprintf_truncation_c99="guessing no";; - netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_snprintf_truncation_c99="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the return value of the snprintf function is the number -dnl of bytes (excluding the terminating NUL) that would have been produced -dnl if the buffer had been large enough. (ISO C99, POSIX:2001) -dnl For example, this test program fails on IRIX 6.5: -dnl --------------------------------------------------------------------- -dnl #include -dnl int main() -dnl { -dnl static char buf[8]; -dnl int retval = snprintf (buf, 3, "%d", 12345); -dnl return retval >= 0 && retval < 3; -dnl } -dnl --------------------------------------------------------------------- -dnl Result is gl_cv_func_snprintf_retval_c99. - -AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], - [gl_cv_func_snprintf_retval_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -static char buf[100]; -int main () -{ - strcpy (buf, "ABCDEF"); - if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) - return 1; - if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) - return 2; - if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) - return 3; - return 0; -}]])], - [gl_cv_func_snprintf_retval_c99=yes], - [gl_cv_func_snprintf_retval_c99=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; - darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on OpenBSD >= 3.9. - openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) - gl_cv_func_snprintf_retval_c99="guessing no";; - openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on Solaris >= 2.10. - solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; - solaris*) gl_cv_func_printf_sizes_c99="guessing no";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; - aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_snprintf_retval_c99="guessing no";; - netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_snprintf_retval_c99="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the snprintf function supports the %n format directive -dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_snprintf_directive_n. - -AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], - [gl_cv_func_snprintf_directive_n], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -static char fmtstring[10]; -static char buf[100]; -int main () -{ - int count = -1; - /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) - support %n in format strings in read-only memory but not in writable - memory. */ - strcpy (fmtstring, "%d %n"); - my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); - if (count != 6) - return 1; - return 0; -}]])], - [gl_cv_func_snprintf_directive_n=yes], - [gl_cv_func_snprintf_directive_n=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_snprintf_directive_n="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; - darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on Solaris >= 2.6. - solaris2.[0-5] | solaris2.[0-5].*) - gl_cv_func_snprintf_directive_n="guessing no";; - solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; - aix*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on IRIX >= 6.5. - irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on OSF/1 >= 5. - osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; - osf*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_snprintf_directive_n="guessing no";; - netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_snprintf_directive_n="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_snprintf_directive_n="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the snprintf function, when passed a size = 1, writes any -dnl output without bounds in this case, behaving like sprintf. This is the -dnl case on Linux libc5. -dnl Result is gl_cv_func_snprintf_size1. - -AC_DEFUN([gl_SNPRINTF_SIZE1], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf respects a size of 1], - [gl_cv_func_snprintf_size1], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -int main() -{ - static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; - my_snprintf (buf, 1, "%d", 12345); - return buf[1] != 'E'; -}]])], - [gl_cv_func_snprintf_size1=yes], - [gl_cv_func_snprintf_size1=no], - [gl_cv_func_snprintf_size1="guessing yes"]) - ]) -]) - -dnl Test whether the vsnprintf function, when passed a zero size, produces no -dnl output. (ISO C99, POSIX:2001) -dnl For example, snprintf nevertheless writes a NUL byte in this case -dnl on OSF/1 5.1: -dnl --------------------------------------------------------------------- -dnl #include -dnl int main() -dnl { -dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; -dnl snprintf (buf, 0, "%d", 12345); -dnl return buf[0] != 'D'; -dnl } -dnl --------------------------------------------------------------------- -dnl And vsnprintf writes any output without bounds in this case, behaving like -dnl vsprintf, on HP-UX 11 and OSF/1 5.1: -dnl --------------------------------------------------------------------- -dnl #include -dnl #include -dnl static int my_snprintf (char *buf, int size, const char *format, ...) -dnl { -dnl va_list args; -dnl int ret; -dnl va_start (args, format); -dnl ret = vsnprintf (buf, size, format, args); -dnl va_end (args); -dnl return ret; -dnl } -dnl int main() -dnl { -dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; -dnl my_snprintf (buf, 0, "%d", 12345); -dnl return buf[0] != 'D'; -dnl } -dnl --------------------------------------------------------------------- -dnl Result is gl_cv_func_vsnprintf_zerosize_c99. - -AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], - [gl_cv_func_vsnprintf_zerosize_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -int main() -{ - static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; - my_snprintf (buf, 0, "%d", 12345); - return buf[0] != 'D'; -}]])], - [gl_cv_func_vsnprintf_zerosize_c99=yes], - [gl_cv_func_vsnprintf_zerosize_c99=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on Cygwin. - cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on Solaris >= 2.6. - solaris2.[0-5] | solaris2.[0-5].*) - gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on IRIX >= 6.5. - irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on mingw. - mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl The results of these tests on various platforms are: -dnl -dnl 1 = gl_PRINTF_SIZES_C99 -dnl 2 = gl_PRINTF_LONG_DOUBLE -dnl 3 = gl_PRINTF_INFINITE -dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE -dnl 5 = gl_PRINTF_DIRECTIVE_A -dnl 6 = gl_PRINTF_DIRECTIVE_F -dnl 7 = gl_PRINTF_DIRECTIVE_N -dnl 8 = gl_PRINTF_DIRECTIVE_LS -dnl 9 = gl_PRINTF_POSITIONS -dnl 10 = gl_PRINTF_FLAG_GROUPING -dnl 11 = gl_PRINTF_FLAG_LEFTADJUST -dnl 12 = gl_PRINTF_FLAG_ZERO -dnl 13 = gl_PRINTF_PRECISION -dnl 14 = gl_PRINTF_ENOMEM -dnl 15 = gl_SNPRINTF_PRESENCE -dnl 16 = gl_SNPRINTF_TRUNCATION_C99 -dnl 17 = gl_SNPRINTF_RETVAL_C99 -dnl 18 = gl_SNPRINTF_DIRECTIVE_N -dnl 19 = gl_SNPRINTF_SIZE1 -dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99 -dnl -dnl 1 = checking whether printf supports size specifiers as in C99... -dnl 2 = checking whether printf supports 'long double' arguments... -dnl 3 = checking whether printf supports infinite 'double' arguments... -dnl 4 = checking whether printf supports infinite 'long double' arguments... -dnl 5 = checking whether printf supports the 'a' and 'A' directives... -dnl 6 = checking whether printf supports the 'F' directive... -dnl 7 = checking whether printf supports the 'n' directive... -dnl 8 = checking whether printf supports the 'ls' directive... -dnl 9 = checking whether printf supports POSIX/XSI format strings with positions... -dnl 10 = checking whether printf supports the grouping flag... -dnl 11 = checking whether printf supports the left-adjust flag correctly... -dnl 12 = checking whether printf supports the zero flag correctly... -dnl 13 = checking whether printf supports large precisions... -dnl 14 = checking whether printf survives out-of-memory conditions... -dnl 15 = checking for snprintf... -dnl 16 = checking whether snprintf truncates the result as in C99... -dnl 17 = checking whether snprintf returns a byte count as in C99... -dnl 18 = checking whether snprintf fully supports the 'n' directive... -dnl 19 = checking whether snprintf respects a size of 1... -dnl 20 = checking whether vsnprintf respects a zero size as in C99... -dnl -dnl . = yes, # = no. -dnl -dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -dnl glibc 2.5 . . . . . . . . . . . . . . . . . . . . -dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . . . -dnl FreeBSD 5.4, 6.1 . . . . # . . . . . . # . # . . . . . . -dnl Mac OS X 10.5.8 . . . # # . . . . . . # . . . . . . . . -dnl Mac OS X 10.3.9 . . . . # . . . . . . # . # . . . . . . -dnl OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . . -dnl Cygwin 1.7.0 (2009) . . . # . . . ? . . . . . ? . . . . . . -dnl Cygwin 1.5.25 (2008) . . . # # . . # . . . . . # . . . . . . -dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . . -dnl Solaris 11 2011-11 . . # # # . . # . . . # . . . . . . . . -dnl Solaris 10 . . # # # . . # . . . # # . . . . . . . -dnl Solaris 2.6 ... 9 # . # # # # . # . . . # # . . . # . . . -dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # # -dnl AIX 7.1 . . # # # . . . . . . # # . . . . . . . -dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . . -dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . # . . . -dnl HP-UX 11.31 . . . . # . . . . . . # . . . . # # . . -dnl HP-UX 11.{00,11,23} # . . . # # . . . . . # . . . . # # . # -dnl HP-UX 10.20 # . # . # # . ? . . # # . . . . # # ? # -dnl IRIX 6.5 # . # # # # . # . . . # . . . . # . . . -dnl OSF/1 5.1 # . # # # # . . . . . # . . . . # . . # -dnl OSF/1 4.0d # . # # # # . . . . . # . . # # # # # # -dnl NetBSD 5.0 . . . # # . . . . . . # . # . . . . . . -dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ? -dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . . -dnl Haiku . . . # # # . # . . . . . ? . . ? . . . -dnl BeOS # # . # # # . ? # . ? . # ? . . ? . . . -dnl old mingw / msvcrt # # # # # # . . # # . # # ? . # # # . . -dnl MSVC 9 # # # # # # # . # # . # # ? # # # # . . -dnl mingw 2009-2011 . # . # . . . . # # . . . ? . . . . . . -dnl mingw-w64 2011 # # # # # # . . # # . # # ? . # # # . . diff --git a/gl/m4/read-file.m4 b/gl/m4/read-file.m4 deleted file mode 100644 index aa23b5840c..0000000000 --- a/gl/m4/read-file.m4 +++ /dev/null @@ -1,8 +0,0 @@ -# read-file.m4 serial 3 -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Prerequisites of lib/read-file.c. -AC_DEFUN([gl_PREREQ_READ_FILE], [:]) diff --git a/gl/m4/realloc.m4 b/gl/m4/realloc.m4 deleted file mode 100644 index fc2282544d..0000000000 --- a/gl/m4/realloc.m4 +++ /dev/null @@ -1,79 +0,0 @@ -# realloc.m4 serial 14 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -m4_version_prereq([2.70], [] ,[ - -# This is adapted with modifications from upstream Autoconf here: -# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c -AC_DEFUN([_AC_FUNC_REALLOC_IF], -[ - AC_REQUIRE([AC_HEADER_STDC])dnl - AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles - AC_CHECK_HEADERS([stdlib.h]) - AC_CACHE_CHECK([for GNU libc compatible realloc], - [ac_cv_func_realloc_0_nonnull], - [AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H - # include - #else - char *realloc (); - #endif - ]], - [[char *p = realloc (0, 0); - int result = !p; - free (p); - return result;]]) - ], - [ac_cv_func_realloc_0_nonnull=yes], - [ac_cv_func_realloc_0_nonnull=no], - [case "$host_os" in - # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* \ - | hpux* | solaris* | cygwin* | mingw*) - ac_cv_func_realloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_realloc_0_nonnull=no ;; - esac - ]) - ]) - AS_IF([test $ac_cv_func_realloc_0_nonnull = yes], [$1], [$2]) -])# AC_FUNC_REALLOC - -]) - -# gl_FUNC_REALLOC_GNU -# ------------------- -# Test whether 'realloc (0, 0)' is handled like in GNU libc, and replace -# realloc if it is not. -AC_DEFUN([gl_FUNC_REALLOC_GNU], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - dnl _AC_FUNC_REALLOC_IF is defined in Autoconf. - _AC_FUNC_REALLOC_IF( - [AC_DEFINE([HAVE_REALLOC_GNU], [1], - [Define to 1 if your system has a GNU libc compatible 'realloc' - function, and to 0 otherwise.])], - [AC_DEFINE([HAVE_REALLOC_GNU], [0]) - REPLACE_REALLOC=1 - ]) -])# gl_FUNC_REALLOC_GNU - -# gl_FUNC_REALLOC_POSIX -# --------------------- -# Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it -# fails), and replace realloc if it is not. -AC_DEFUN([gl_FUNC_REALLOC_POSIX], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) - if test $gl_cv_func_malloc_posix = yes; then - AC_DEFINE([HAVE_REALLOC_POSIX], [1], - [Define if the 'realloc' function is POSIX compliant.]) - else - REPLACE_REALLOC=1 - fi -]) diff --git a/gl/m4/secure_getenv.m4 b/gl/m4/secure_getenv.m4 deleted file mode 100644 index 3983173603..0000000000 --- a/gl/m4/secure_getenv.m4 +++ /dev/null @@ -1,26 +0,0 @@ -# Look up an environment variable more securely. -dnl Copyright 2013-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_SECURE_GETENV], -[ - dnl Persuade glibc to declare secure_getenv(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - AC_CHECK_FUNCS_ONCE([secure_getenv]) - if test $ac_cv_func_secure_getenv = no; then - HAVE_SECURE_GETENV=0 - fi -]) - -# Prerequisites of lib/secure_getenv.c. -AC_DEFUN([gl_PREREQ_SECURE_GETENV], [ - AC_CHECK_FUNCS([__secure_getenv]) - if test $ac_cv_func___secure_getenv = no; then - AC_CHECK_FUNCS([issetugid]) - fi - AC_CHECK_FUNCS_ONCE([getuid geteuid getgid getegid]) -]) diff --git a/gl/m4/size_max.m4 b/gl/m4/size_max.m4 deleted file mode 100644 index de69025d62..0000000000 --- a/gl/m4/size_max.m4 +++ /dev/null @@ -1,79 +0,0 @@ -# size_max.m4 serial 10 -dnl Copyright (C) 2003, 2005-2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_DEFUN([gl_SIZE_MAX], -[ - AC_CHECK_HEADERS([stdint.h]) - dnl First test whether the system already has SIZE_MAX. - AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ - gl_cv_size_max= - AC_EGREP_CPP([Found it], [ -#include -#if HAVE_STDINT_H -#include -#endif -#ifdef SIZE_MAX -Found it -#endif -], [gl_cv_size_max=yes]) - if test -z "$gl_cv_size_max"; then - dnl Define it ourselves. Here we assume that the type 'size_t' is not wider - dnl than the type 'unsigned long'. Try hard to find a definition that can - dnl be used in a preprocessor #if, i.e. doesn't contain a cast. - AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], - [#include -#include ], [size_t_bits_minus_1=]) - AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], - [#include ], [fits_in_uint=]) - if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then - if test $fits_in_uint = 1; then - dnl Even though SIZE_MAX fits in an unsigned int, it must be of type - dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - extern size_t foo; - extern unsigned long foo; - ]], - [[]])], - [fits_in_uint=0]) - fi - dnl We cannot use 'expr' to simplify this expression, because 'expr' - dnl works only with 'long' integers in the host environment, while we - dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. - if test $fits_in_uint = 1; then - gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" - else - gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" - fi - else - dnl Shouldn't happen, but who knows... - gl_cv_size_max='((size_t)~(size_t)0)' - fi - fi - ]) - if test "$gl_cv_size_max" != yes; then - AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], - [Define as the maximum value of type 'size_t', if the system doesn't define it.]) - fi - dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after - dnl . Remember that the #undef in AH_VERBATIM gets replaced with - dnl #define by AC_DEFINE_UNQUOTED. - AH_VERBATIM([SIZE_MAX], -[/* Define as the maximum value of type 'size_t', if the system doesn't define - it. */ -#ifndef SIZE_MAX -# undef SIZE_MAX -#endif]) -]) - -dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. -dnl Remove this when we can assume autoconf >= 2.61. -m4_ifdef([AC_COMPUTE_INT], [], [ - AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) -]) diff --git a/gl/m4/snprintf.m4 b/gl/m4/snprintf.m4 deleted file mode 100644 index f876b55995..0000000000 --- a/gl/m4/snprintf.m4 +++ /dev/null @@ -1,54 +0,0 @@ -# snprintf.m4 serial 6 -dnl Copyright (C) 2002-2004, 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Libintl 0.17 will replace snprintf only if it does not support %1$s, -dnl but defers to any gnulib snprintf replacements. Therefore, gnulib -dnl must guarantee that the decision for replacing snprintf is a superset -dnl of the reasons checked by libintl. -AC_DEFUN([gl_FUNC_SNPRINTF], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - gl_cv_func_snprintf_usable=no - AC_CHECK_FUNCS([snprintf]) - if test $ac_cv_func_snprintf = yes; then - gl_SNPRINTF_SIZE1 - case "$gl_cv_func_snprintf_size1" in - *yes) - gl_SNPRINTF_RETVAL_C99 - case "$gl_cv_func_snprintf_retval_c99" in - *yes) - gl_PRINTF_POSITIONS - case "$gl_cv_func_printf_positions" in - *yes) - gl_cv_func_snprintf_usable=yes - ;; - esac - ;; - esac - ;; - esac - fi - if test $gl_cv_func_snprintf_usable = no; then - gl_REPLACE_SNPRINTF - fi - AC_CHECK_DECLS_ONCE([snprintf]) - if test $ac_cv_have_decl_snprintf = no; then - HAVE_DECL_SNPRINTF=0 - fi -]) - -AC_DEFUN([gl_REPLACE_SNPRINTF], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_LIBOBJ([snprintf]) - if test $ac_cv_func_snprintf = yes; then - REPLACE_SNPRINTF=1 - fi - gl_PREREQ_SNPRINTF -]) - -# Prerequisites of lib/snprintf.c. -AC_DEFUN([gl_PREREQ_SNPRINTF], [:]) diff --git a/gl/m4/socklen.m4 b/gl/m4/socklen.m4 deleted file mode 100644 index 634c43a35c..0000000000 --- a/gl/m4/socklen.m4 +++ /dev/null @@ -1,77 +0,0 @@ -# socklen.m4 serial 10 -dnl Copyright (C) 2005-2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Albert Chin, Windows fixes from Simon Josefsson. - -dnl Check for socklen_t: historically on BSD it is an int, and in -dnl POSIX 1g it is a type of its own, but some platforms use different -dnl types for the argument to getsockopt, getpeername, etc.: -dnl HP-UX 10.20, IRIX 6.5, OSF/1 4.0, Interix 3.5, BeOS. -dnl So we have to test to find something that will work. - -AC_DEFUN([gl_TYPE_SOCKLEN_T], - [AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])dnl - AC_CHECK_TYPE([socklen_t], , - [AC_MSG_CHECKING([for socklen_t equivalent]) - AC_CACHE_VAL([gl_cv_socklen_t_equiv], - [# Systems have either "struct sockaddr *" or - # "void *" as the second argument to getpeername - gl_cv_socklen_t_equiv= - for arg2 in "struct sockaddr" void; do - for t in int size_t "unsigned int" "long int" "unsigned long int"; do - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( - [[#include - #include - - int getpeername (int, $arg2 *, $t *);]], - [[$t len; - getpeername (0, 0, &len);]])], - [gl_cv_socklen_t_equiv="$t"]) - test "$gl_cv_socklen_t_equiv" != "" && break - done - test "$gl_cv_socklen_t_equiv" != "" && break - done - ]) - if test "$gl_cv_socklen_t_equiv" = ""; then - AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) - fi - AC_MSG_RESULT([$gl_cv_socklen_t_equiv]) - AC_DEFINE_UNQUOTED([socklen_t], [$gl_cv_socklen_t_equiv], - [type to use in place of socklen_t if not defined])], - [gl_SOCKET_HEADERS])]) - -dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find -dnl it there too. But on Cygwin, wc2tcpip.h must not be included. Users -dnl of this module should use the same include pattern as gl_SOCKET_HEADERS. -dnl When you change this macro, keep also in sync: -dnl - gl_CHECK_SOCKET_HEADERS, -dnl - the Include section of modules/socklen. -AC_DEFUN([gl_SOCKET_HEADERS], -[ -/* is not needed according to POSIX, but the - in i386-unknown-freebsd4.10 and - powerpc-apple-darwin5.5 required it. */ -#include -#if HAVE_SYS_SOCKET_H -# include -#elif HAVE_WS2TCPIP_H -# include -#endif -]) - -dnl Tests for the existence of the header for socket facilities. -dnl Defines the C macros HAVE_SYS_SOCKET_H, HAVE_WS2TCPIP_H. -dnl This macro must match gl_SOCKET_HEADERS. -AC_DEFUN([gl_CHECK_SOCKET_HEADERS], - [AC_CHECK_HEADERS_ONCE([sys/socket.h]) - if test $ac_cv_header_sys_socket_h = no; then - dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make - dnl the check for those headers unconditional; yet cygwin reports - dnl that the headers are present but cannot be compiled (since on - dnl cygwin, all socket information should come from sys/socket.h). - AC_CHECK_HEADERS([ws2tcpip.h]) - fi - ]) diff --git a/gl/m4/sockpfaf.m4 b/gl/m4/sockpfaf.m4 deleted file mode 100644 index dce8b8f01e..0000000000 --- a/gl/m4/sockpfaf.m4 +++ /dev/null @@ -1,87 +0,0 @@ -# sockpfaf.m4 serial 8 -dnl Copyright (C) 2004, 2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Test for some common socket protocol families (PF_INET, PF_INET6, ...) -dnl and some common address families (AF_INET, AF_INET6, ...). -dnl This test assumes that a system supports an address family if and only if -dnl it supports the corresponding protocol family. - -dnl From Bruno Haible. - -AC_DEFUN([gl_SOCKET_FAMILIES], -[ - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - AC_CHECK_HEADERS_ONCE([netinet/in.h]) - - AC_MSG_CHECKING([for IPv4 sockets]) - AC_CACHE_VAL([gl_cv_socket_ipv4], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_WINSOCK2_H -#include -#endif]], -[[int x = AF_INET; struct in_addr y; struct sockaddr_in z; - if (&x && &y && &z) return 0;]])], - gl_cv_socket_ipv4=yes, gl_cv_socket_ipv4=no)]) - AC_MSG_RESULT([$gl_cv_socket_ipv4]) - if test $gl_cv_socket_ipv4 = yes; then - AC_DEFINE([HAVE_IPV4], [1], [Define to 1 if defines AF_INET.]) - fi - - AC_MSG_CHECKING([for IPv6 sockets]) - AC_CACHE_VAL([gl_cv_socket_ipv6], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_WINSOCK2_H -#include -#endif -#ifdef HAVE_WS2TCPIP_H -#include -#endif]], -[[int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z; - if (&x && &y && &z) return 0;]])], - gl_cv_socket_ipv6=yes, gl_cv_socket_ipv6=no)]) - AC_MSG_RESULT([$gl_cv_socket_ipv6]) - if test $gl_cv_socket_ipv6 = yes; then - AC_DEFINE([HAVE_IPV6], [1], [Define to 1 if defines AF_INET6.]) - fi -]) - -AC_DEFUN([gl_SOCKET_FAMILY_UNIX], -[ - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - AC_CHECK_HEADERS_ONCE([sys/un.h]) - - AC_MSG_CHECKING([for UNIX domain sockets]) - AC_CACHE_VAL([gl_cv_socket_unix], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_SYS_UN_H -#include -#endif -#ifdef HAVE_WINSOCK2_H -#include -#endif]], -[[int x = AF_UNIX; struct sockaddr_un y; - if (&x && &y) return 0;]])], - gl_cv_socket_unix=yes, gl_cv_socket_unix=no)]) - AC_MSG_RESULT([$gl_cv_socket_unix]) - if test $gl_cv_socket_unix = yes; then - AC_DEFINE([HAVE_UNIXSOCKET], [1], [Define to 1 if defines AF_UNIX.]) - fi -]) diff --git a/gl/m4/ssize_t.m4 b/gl/m4/ssize_t.m4 deleted file mode 100644 index 3e7b9e6e02..0000000000 --- a/gl/m4/ssize_t.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ssize_t.m4 serial 5 (gettext-0.18.2) -dnl Copyright (C) 2001-2003, 2006, 2010-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Test whether ssize_t is defined. - -AC_DEFUN([gt_TYPE_SSIZE_T], -[ - AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[int x = sizeof (ssize_t *) + sizeof (ssize_t); - return !x;]])], - [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) - if test $gt_cv_ssize_t = no; then - AC_DEFINE([ssize_t], [int], - [Define as a signed type of the same size as size_t.]) - fi -]) diff --git a/gl/m4/stdalign.m4 b/gl/m4/stdalign.m4 deleted file mode 100644 index 49980cd636..0000000000 --- a/gl/m4/stdalign.m4 +++ /dev/null @@ -1,57 +0,0 @@ -# Check for stdalign.h that conforms to C11. - -dnl Copyright 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Prepare for substituting if it is not supported. - -AC_DEFUN([gl_STDALIGN_H], -[ - AC_CACHE_CHECK([for working stdalign.h], - [gl_cv_header_working_stdalign_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include - - /* Test that alignof yields a result consistent with offsetof. - This catches GCC bug 52023 - . */ - #ifdef __cplusplus - template struct alignof_helper { char a; t b; }; - # define ao(type) offsetof (alignof_helper, b) - #else - # define ao(type) offsetof (struct { char a; type b; }, b) - #endif - char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1]; - char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1]; - char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1]; - - /* Test _Alignas only on platforms where gnulib can help. */ - #if \ - ((defined __cplusplus && 201103 <= __cplusplus) \ - || (defined __APPLE__ && defined __MACH__ \ - ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ - : __GNUC__) \ - || __HP_cc || __HP_aCC || __IBMC__ || __IBMCPP__ \ - || __ICC || 0x5110 <= __SUNPRO_C \ - || 1300 <= _MSC_VER) - struct alignas_test { char c; char alignas (8) alignas_8; }; - char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 - ? 1 : -1]; - #endif - ]])], - [gl_cv_header_working_stdalign_h=yes], - [gl_cv_header_working_stdalign_h=no])]) - - if test $gl_cv_header_working_stdalign_h = yes; then - STDALIGN_H='' - else - STDALIGN_H='stdalign.h' - fi - - AC_SUBST([STDALIGN_H]) - AM_CONDITIONAL([GL_GENERATE_STDALIGN_H], [test -n "$STDALIGN_H"]) -]) diff --git a/gl/m4/stdbool.m4 b/gl/m4/stdbool.m4 deleted file mode 100644 index 2a9b1db86f..0000000000 --- a/gl/m4/stdbool.m4 +++ /dev/null @@ -1,108 +0,0 @@ -# Check for stdbool.h that conforms to C99. - -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -#serial 7 - -# Prepare for substituting if it is not supported. - -AC_DEFUN([AM_STDBOOL_H], -[ - AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) - - # Define two additional variables used in the Makefile substitution. - - if test "$ac_cv_header_stdbool_h" = yes; then - STDBOOL_H='' - else - STDBOOL_H='stdbool.h' - fi - AC_SUBST([STDBOOL_H]) - AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) - - if test "$ac_cv_type__Bool" = yes; then - HAVE__BOOL=1 - else - HAVE__BOOL=0 - fi - AC_SUBST([HAVE__BOOL]) -]) - -# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. -AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) - -# This version of the macro is needed in autoconf <= 2.68. - -AC_DEFUN([AC_CHECK_HEADER_STDBOOL], - [AC_CACHE_CHECK([for stdbool.h that conforms to C99], - [ac_cv_header_stdbool_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ - #include - - #ifdef __cplusplus - typedef bool Bool; - #else - typedef _Bool Bool; - #ifndef bool - "error: bool is not defined" - #endif - #ifndef false - "error: false is not defined" - #endif - #if false - "error: false is not 0" - #endif - #ifndef true - "error: true is not defined" - #endif - #if true != 1 - "error: true is not 1" - #endif - #endif - - #ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" - #endif - - struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; - - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; - /* The following fails for - HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; - /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - */ - Bool q = true; - Bool *pq = &q; - bool *qq = &q; - ]], - [[ - bool e = &s; - *pq |= q; *pq |= ! q; - *qq |= q; *qq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq + !qq); - ]])], - [ac_cv_header_stdbool_h=yes], - [ac_cv_header_stdbool_h=no])]) - AC_CHECK_TYPES([_Bool]) -]) diff --git a/gl/m4/stddef_h.m4 b/gl/m4/stddef_h.m4 deleted file mode 100644 index c045c65f9f..0000000000 --- a/gl/m4/stddef_h.m4 +++ /dev/null @@ -1,51 +0,0 @@ -dnl A placeholder for , for platforms that have issues. -# stddef_h.m4 serial 5 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_STDDEF_H], -[ - AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) - AC_REQUIRE([gt_TYPE_WCHAR_T]) - STDDEF_H= - AC_CHECK_TYPE([max_align_t], [], [HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h], - [[#include - ]]) - if test $gt_cv_c_wchar_t = no; then - HAVE_WCHAR_T=0 - STDDEF_H=stddef.h - fi - AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], - [gl_cv_decl_null_works], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include - int test[2 * (sizeof NULL == sizeof (void *)) -1]; -]])], - [gl_cv_decl_null_works=yes], - [gl_cv_decl_null_works=no])]) - if test $gl_cv_decl_null_works = no; then - REPLACE_NULL=1 - STDDEF_H=stddef.h - fi - AC_SUBST([STDDEF_H]) - AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) - if test -n "$STDDEF_H"; then - gl_NEXT_HEADERS([stddef.h]) - fi -]) - -AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) -]) - -AC_DEFUN([gl_STDDEF_H_DEFAULTS], -[ - dnl Assume proper GNU behavior unless another module says otherwise. - REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) - HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T]) - HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) -]) diff --git a/gl/m4/stdint.m4 b/gl/m4/stdint.m4 deleted file mode 100644 index 05b6ab7846..0000000000 --- a/gl/m4/stdint.m4 +++ /dev/null @@ -1,540 +0,0 @@ -# stdint.m4 serial 48 -dnl Copyright (C) 2001-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert and Bruno Haible. -dnl Test whether is supported or must be substituted. - -AC_DEFUN_ONCE([gl_STDINT_H], -[ - AC_PREREQ([2.59])dnl - - AC_REQUIRE([gl_LIMITS_H]) - - dnl Check for long long int and unsigned long long int. - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - if test $ac_cv_type_long_long_int = yes; then - HAVE_LONG_LONG_INT=1 - else - HAVE_LONG_LONG_INT=0 - fi - AC_SUBST([HAVE_LONG_LONG_INT]) - AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) - if test $ac_cv_type_unsigned_long_long_int = yes; then - HAVE_UNSIGNED_LONG_LONG_INT=1 - else - HAVE_UNSIGNED_LONG_LONG_INT=0 - fi - AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) - - dnl Check for , in the same way as gl_WCHAR_H does. - AC_CHECK_HEADERS_ONCE([wchar.h]) - if test $ac_cv_header_wchar_h = yes; then - HAVE_WCHAR_H=1 - else - HAVE_WCHAR_H=0 - fi - AC_SUBST([HAVE_WCHAR_H]) - - dnl Check for . - dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. - if test $ac_cv_header_inttypes_h = yes; then - HAVE_INTTYPES_H=1 - else - HAVE_INTTYPES_H=0 - fi - AC_SUBST([HAVE_INTTYPES_H]) - - dnl Check for . - dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. - if test $ac_cv_header_sys_types_h = yes; then - HAVE_SYS_TYPES_H=1 - else - HAVE_SYS_TYPES_H=0 - fi - AC_SUBST([HAVE_SYS_TYPES_H]) - - gl_CHECK_NEXT_HEADERS([stdint.h]) - if test $ac_cv_header_stdint_h = yes; then - HAVE_STDINT_H=1 - else - HAVE_STDINT_H=0 - fi - AC_SUBST([HAVE_STDINT_H]) - - dnl Now see whether we need a substitute . - if test $ac_cv_header_stdint_h = yes; then - AC_CACHE_CHECK([whether stdint.h conforms to C99], - [gl_cv_header_working_stdint_h], - [gl_cv_header_working_stdint_h=no - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#define __STDC_CONSTANT_MACROS 1 -#define __STDC_LIMIT_MACROS 1 -#include -/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ -#if !(defined WCHAR_MIN && defined WCHAR_MAX) -#error "WCHAR_MIN, WCHAR_MAX not defined in " -#endif -] -gl_STDINT_INCLUDES -[ -#ifdef INT8_MAX -int8_t a1 = INT8_MAX; -int8_t a1min = INT8_MIN; -#endif -#ifdef INT16_MAX -int16_t a2 = INT16_MAX; -int16_t a2min = INT16_MIN; -#endif -#ifdef INT32_MAX -int32_t a3 = INT32_MAX; -int32_t a3min = INT32_MIN; -#endif -#ifdef INT64_MAX -int64_t a4 = INT64_MAX; -int64_t a4min = INT64_MIN; -#endif -#ifdef UINT8_MAX -uint8_t b1 = UINT8_MAX; -#else -typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; -#endif -#ifdef UINT16_MAX -uint16_t b2 = UINT16_MAX; -#endif -#ifdef UINT32_MAX -uint32_t b3 = UINT32_MAX; -#endif -#ifdef UINT64_MAX -uint64_t b4 = UINT64_MAX; -#endif -int_least8_t c1 = INT8_C (0x7f); -int_least8_t c1max = INT_LEAST8_MAX; -int_least8_t c1min = INT_LEAST8_MIN; -int_least16_t c2 = INT16_C (0x7fff); -int_least16_t c2max = INT_LEAST16_MAX; -int_least16_t c2min = INT_LEAST16_MIN; -int_least32_t c3 = INT32_C (0x7fffffff); -int_least32_t c3max = INT_LEAST32_MAX; -int_least32_t c3min = INT_LEAST32_MIN; -int_least64_t c4 = INT64_C (0x7fffffffffffffff); -int_least64_t c4max = INT_LEAST64_MAX; -int_least64_t c4min = INT_LEAST64_MIN; -uint_least8_t d1 = UINT8_C (0xff); -uint_least8_t d1max = UINT_LEAST8_MAX; -uint_least16_t d2 = UINT16_C (0xffff); -uint_least16_t d2max = UINT_LEAST16_MAX; -uint_least32_t d3 = UINT32_C (0xffffffff); -uint_least32_t d3max = UINT_LEAST32_MAX; -uint_least64_t d4 = UINT64_C (0xffffffffffffffff); -uint_least64_t d4max = UINT_LEAST64_MAX; -int_fast8_t e1 = INT_FAST8_MAX; -int_fast8_t e1min = INT_FAST8_MIN; -int_fast16_t e2 = INT_FAST16_MAX; -int_fast16_t e2min = INT_FAST16_MIN; -int_fast32_t e3 = INT_FAST32_MAX; -int_fast32_t e3min = INT_FAST32_MIN; -int_fast64_t e4 = INT_FAST64_MAX; -int_fast64_t e4min = INT_FAST64_MIN; -uint_fast8_t f1 = UINT_FAST8_MAX; -uint_fast16_t f2 = UINT_FAST16_MAX; -uint_fast32_t f3 = UINT_FAST32_MAX; -uint_fast64_t f4 = UINT_FAST64_MAX; -#ifdef INTPTR_MAX -intptr_t g = INTPTR_MAX; -intptr_t gmin = INTPTR_MIN; -#endif -#ifdef UINTPTR_MAX -uintptr_t h = UINTPTR_MAX; -#endif -intmax_t i = INTMAX_MAX; -uintmax_t j = UINTMAX_MAX; - -/* Check that SIZE_MAX has the correct type, if possible. */ -#if 201112 <= __STDC_VERSION__ -int k = _Generic (SIZE_MAX, size_t: 0); -#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ - || (0x5110 <= __SUNPRO_C && !__STDC__)) -extern size_t k; -extern __typeof__ (SIZE_MAX) k; -#endif - -#include /* for CHAR_BIT */ -#define TYPE_MINIMUM(t) \ - ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) -#define TYPE_MAXIMUM(t) \ - ((t) ((t) 0 < (t) -1 \ - ? (t) -1 \ - : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) -struct s { - int check_PTRDIFF: - PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) - && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) - ? 1 : -1; - /* Detect bug in FreeBSD 6.0 / ia64. */ - int check_SIG_ATOMIC: - SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) - && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) - ? 1 : -1; - int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; - int check_WCHAR: - WCHAR_MIN == TYPE_MINIMUM (wchar_t) - && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) - ? 1 : -1; - /* Detect bug in mingw. */ - int check_WINT: - WINT_MIN == TYPE_MINIMUM (wint_t) - && WINT_MAX == TYPE_MAXIMUM (wint_t) - ? 1 : -1; - - /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ - int check_UINT8_C: - (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; - int check_UINT16_C: - (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; - - /* Detect bugs in OpenBSD 3.9 stdint.h. */ -#ifdef UINT8_MAX - int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; -#endif -#ifdef UINT16_MAX - int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; -#endif -#ifdef UINT32_MAX - int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; -#endif -#ifdef UINT64_MAX - int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; -#endif - int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; - int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; - int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; - int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; - int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; - int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; - int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; - int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; - int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; - int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; - int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; -}; - ]])], - [dnl Determine whether the various *_MIN, *_MAX macros are usable - dnl in preprocessor expression. We could do it by compiling a test - dnl program for each of these macros. It is faster to run a program - dnl that inspects the macro expansion. - dnl This detects a bug on HP-UX 11.23/ia64. - AC_RUN_IFELSE([ - AC_LANG_PROGRAM([[ -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#define __STDC_CONSTANT_MACROS 1 -#define __STDC_LIMIT_MACROS 1 -#include -] -gl_STDINT_INCLUDES -[ -#include -#include -#define MVAL(macro) MVAL1(macro) -#define MVAL1(expression) #expression -static const char *macro_values[] = - { -#ifdef INT8_MAX - MVAL (INT8_MAX), -#endif -#ifdef INT16_MAX - MVAL (INT16_MAX), -#endif -#ifdef INT32_MAX - MVAL (INT32_MAX), -#endif -#ifdef INT64_MAX - MVAL (INT64_MAX), -#endif -#ifdef UINT8_MAX - MVAL (UINT8_MAX), -#endif -#ifdef UINT16_MAX - MVAL (UINT16_MAX), -#endif -#ifdef UINT32_MAX - MVAL (UINT32_MAX), -#endif -#ifdef UINT64_MAX - MVAL (UINT64_MAX), -#endif - NULL - }; -]], [[ - const char **mv; - for (mv = macro_values; *mv != NULL; mv++) - { - const char *value = *mv; - /* Test whether it looks like a cast expression. */ - if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 - || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 - || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 - || strncmp (value, "((int)"/*)*/, 6) == 0 - || strncmp (value, "((signed short)"/*)*/, 15) == 0 - || strncmp (value, "((signed char)"/*)*/, 14) == 0) - return mv - macro_values + 1; - } - return 0; -]])], - [gl_cv_header_working_stdint_h=yes], - [], - [dnl When cross-compiling, assume it works. - gl_cv_header_working_stdint_h=yes - ]) - ]) - ]) - fi - - HAVE_C99_STDINT_H=0 - HAVE_SYS_BITYPES_H=0 - HAVE_SYS_INTTYPES_H=0 - STDINT_H=stdint.h - if test "$gl_cv_header_working_stdint_h" = yes; then - HAVE_C99_STDINT_H=1 - dnl Now see whether the system works without - dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. - AC_CACHE_CHECK([whether stdint.h predates C++11], - [gl_cv_header_stdint_predates_cxx11_h], - [gl_cv_header_stdint_predates_cxx11_h=yes - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#include -] -gl_STDINT_INCLUDES -[ -intmax_t im = INTMAX_MAX; -int32_t i32 = INT32_C (0x7fffffff); - ]])], - [gl_cv_header_stdint_predates_cxx11_h=no])]) - - if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then - AC_DEFINE([__STDC_CONSTANT_MACROS], [1], - [Define to 1 if the system predates C++11.]) - AC_DEFINE([__STDC_LIMIT_MACROS], [1], - [Define to 1 if the system predates C++11.]) - fi - AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], - [gl_cv_header_stdint_width], - [gl_cv_header_stdint_width=no - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ - /* Work if build is not clean. */ - #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 - #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ - #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 - #endif - #include - ]gl_STDINT_INCLUDES[ - int iw = UINTMAX_WIDTH; - ]])], - [gl_cv_header_stdint_width=yes])]) - if test "$gl_cv_header_stdint_width" = yes; then - STDINT_H= - fi - else - dnl Check for , and for - dnl (used in Linux libc4 >= 4.6.7 and libc5). - AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) - if test $ac_cv_header_sys_inttypes_h = yes; then - HAVE_SYS_INTTYPES_H=1 - fi - if test $ac_cv_header_sys_bitypes_h = yes; then - HAVE_SYS_BITYPES_H=1 - fi - gl_STDINT_TYPE_PROPERTIES - fi - - # The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. - LIMITS_H=limits.h - AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) - - AC_SUBST([HAVE_C99_STDINT_H]) - AC_SUBST([HAVE_SYS_BITYPES_H]) - AC_SUBST([HAVE_SYS_INTTYPES_H]) - AC_SUBST([STDINT_H]) - AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"]) -]) - -dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) -dnl Determine the size of each of the given types in bits. -AC_DEFUN([gl_STDINT_BITSIZEOF], -[ - dnl Use a shell loop, to avoid bloating configure, and - dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into - dnl config.h.in, - dnl - extra AC_SUBST calls, so that the right substitutions are made. - m4_foreach_w([gltype], [$1], - [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), - [Define to the number of bits in type ']gltype['.])]) - for gltype in $1 ; do - AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], - [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], - [$2 -#include ], [result=unknown]) - eval gl_cv_bitsizeof_${gltype}=\$result - ]) - eval result=\$gl_cv_bitsizeof_${gltype} - if test $result = unknown; then - dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, - dnl do a syntax check even on unused #if conditions and give an error - dnl on valid C code like this: - dnl #if 0 - dnl # if > 32 - dnl # endif - dnl #endif - result=0 - fi - GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) - eval BITSIZEOF_${GLTYPE}=\$result - done - m4_foreach_w([gltype], [$1], - [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) -]) - -dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) -dnl Determine the signedness of each of the given types. -dnl Define HAVE_SIGNED_TYPE if type is signed. -AC_DEFUN([gl_CHECK_TYPES_SIGNED], -[ - dnl Use a shell loop, to avoid bloating configure, and - dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into - dnl config.h.in, - dnl - extra AC_SUBST calls, so that the right substitutions are made. - m4_foreach_w([gltype], [$1], - [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), - [Define to 1 if ']gltype[' is a signed integer type.])]) - for gltype in $1 ; do - AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([$2[ - int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], - result=yes, result=no) - eval gl_cv_type_${gltype}_signed=\$result - ]) - eval result=\$gl_cv_type_${gltype}_signed - GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - if test "$result" = yes; then - AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) - eval HAVE_SIGNED_${GLTYPE}=1 - else - eval HAVE_SIGNED_${GLTYPE}=0 - fi - done - m4_foreach_w([gltype], [$1], - [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) -]) - -dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) -dnl Determine the suffix to use for integer constants of the given types. -dnl Define t_SUFFIX for each such type. -AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], -[ - dnl Use a shell loop, to avoid bloating configure, and - dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into - dnl config.h.in, - dnl - extra AC_SUBST calls, so that the right substitutions are made. - m4_foreach_w([gltype], [$1], - [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], - [Define to l, ll, u, ul, ull, etc., as suitable for - constants of type ']gltype['.])]) - for gltype in $1 ; do - AC_CACHE_CHECK([for $gltype integer literal suffix], - [gl_cv_type_${gltype}_suffix], - [eval gl_cv_type_${gltype}_suffix=no - eval result=\$gl_cv_type_${gltype}_signed - if test "$result" = yes; then - glsufu= - else - glsufu=u - fi - for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do - case $glsuf in - '') gltype1='int';; - l) gltype1='long int';; - ll) gltype1='long long int';; - i64) gltype1='__int64';; - u) gltype1='unsigned int';; - ul) gltype1='unsigned long int';; - ull) gltype1='unsigned long long int';; - ui64)gltype1='unsigned __int64';; - esac - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([$2[ - extern $gltype foo; - extern $gltype1 foo;]])], - [eval gl_cv_type_${gltype}_suffix=\$glsuf]) - eval result=\$gl_cv_type_${gltype}_suffix - test "$result" != no && break - done]) - GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - eval result=\$gl_cv_type_${gltype}_suffix - test "$result" = no && result= - eval ${GLTYPE}_SUFFIX=\$result - AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) - done - m4_foreach_w([gltype], [$1], - [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) -]) - -dnl gl_STDINT_INCLUDES -AC_DEFUN([gl_STDINT_INCLUDES], -[[ - /* BSD/OS 4.0.1 has a bug: , and must be - included before . */ - #include - #include - #if HAVE_WCHAR_H - # include - # include - # include - #endif -]]) - -dnl gl_STDINT_TYPE_PROPERTIES -dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t -dnl of interest to stdint.in.h. -AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], -[ - AC_REQUIRE([gl_MULTIARCH]) - if test $APPLE_UNIVERSAL_BUILD = 0; then - gl_STDINT_BITSIZEOF([ptrdiff_t size_t], - [gl_STDINT_INCLUDES]) - fi - gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], - [gl_STDINT_INCLUDES]) - gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], - [gl_STDINT_INCLUDES]) - gl_cv_type_ptrdiff_t_signed=yes - gl_cv_type_size_t_signed=no - if test $APPLE_UNIVERSAL_BUILD = 0; then - gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], - [gl_STDINT_INCLUDES]) - fi - gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], - [gl_STDINT_INCLUDES]) - - dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 - dnl requirement that wint_t is "unchanged by default argument promotions". - dnl In this case gnulib's and override wint_t. - dnl Set the variable BITSIZEOF_WINT_T accordingly. - if test $BITSIZEOF_WINT_T -lt 32; then - BITSIZEOF_WINT_T=32 - fi -]) - -dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. -dnl Remove this when we can assume autoconf >= 2.61. -m4_ifdef([AC_COMPUTE_INT], [], [ - AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) -]) diff --git a/gl/m4/stdint_h.m4 b/gl/m4/stdint_h.m4 deleted file mode 100644 index f823b94c33..0000000000 --- a/gl/m4/stdint_h.m4 +++ /dev/null @@ -1,27 +0,0 @@ -# stdint_h.m4 serial 9 -dnl Copyright (C) 1997-2004, 2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_STDINT_H_WITH_UINTMAX if exists, -# doesn't clash with , and declares uintmax_t. - -AC_DEFUN([gl_AC_HEADER_STDINT_H], -[ - AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include ]], - [[uintmax_t i = (uintmax_t) -1; return !i;]])], - [gl_cv_header_stdint_h=yes], - [gl_cv_header_stdint_h=no])]) - if test $gl_cv_header_stdint_h = yes; then - AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], - [Define if exists, doesn't clash with , - and declares uintmax_t. ]) - fi -]) diff --git a/gl/m4/stdio_h.m4 b/gl/m4/stdio_h.m4 deleted file mode 100644 index eaa25a01d4..0000000000 --- a/gl/m4/stdio_h.m4 +++ /dev/null @@ -1,225 +0,0 @@ -# stdio_h.m4 serial 48 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_STDIO_H], -[ - AH_VERBATIM([MINGW_ANSI_STDIO], -[/* Use GNU style printf and scanf. */ -#ifndef __USE_MINGW_ANSI_STDIO -# undef __USE_MINGW_ANSI_STDIO -#endif -]) - AC_DEFINE([__USE_MINGW_ANSI_STDIO]) - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - gl_NEXT_HEADERS([stdio.h]) - - dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and - dnl inttypes.h behave like gnu instead of system; we must give our - dnl printf wrapper the right attribute to match. - AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros], - [gl_cv_func_printf_attribute_flavor], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #define __STDC_FORMAT_MACROS 1 - #include - #include - /* For non-mingw systems, compilation will trivially succeed. - For mingw, compilation will succeed for older mingw (system - printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ - #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) && \ - (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) - extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; - #endif - ]])], [gl_cv_func_printf_attribute_flavor=system], - [gl_cv_func_printf_attribute_flavor=gnu])]) - if test "$gl_cv_func_printf_attribute_flavor" = gnu; then - AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1], - [Define to 1 if printf and friends should be labeled with - attribute "__gnu_printf__" instead of "__printf__"]) - fi - - dnl No need to create extra modules for these functions. Everyone who uses - dnl likely needs them. - GNULIB_FSCANF=1 - gl_MODULE_INDICATOR([fscanf]) - GNULIB_SCANF=1 - gl_MODULE_INDICATOR([scanf]) - GNULIB_FGETC=1 - GNULIB_GETC=1 - GNULIB_GETCHAR=1 - GNULIB_FGETS=1 - GNULIB_FREAD=1 - dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c" - dnl "expected source file, required through AC_LIBSOURCES, not found". It is - dnl also an optimization, to avoid performing a configure check whose result - dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING - dnl or GNULIB_NONBLOCKING redundant. - m4_ifdef([gl_NONBLOCKING_IO], [ - gl_NONBLOCKING_IO - if test $gl_cv_have_nonblocking != yes; then - REPLACE_STDIO_READ_FUNCS=1 - AC_LIBOBJ([stdio-read]) - fi - ]) - - dnl No need to create extra modules for these functions. Everyone who uses - dnl likely needs them. - GNULIB_FPRINTF=1 - GNULIB_PRINTF=1 - GNULIB_VFPRINTF=1 - GNULIB_VPRINTF=1 - GNULIB_FPUTC=1 - GNULIB_PUTC=1 - GNULIB_PUTCHAR=1 - GNULIB_FPUTS=1 - GNULIB_PUTS=1 - GNULIB_FWRITE=1 - dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" - dnl "expected source file, required through AC_LIBSOURCES, not found". It is - dnl also an optimization, to avoid performing a configure check whose result - dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or - dnl GNULIB_SIGPIPE redundant. - m4_ifdef([gl_SIGNAL_SIGPIPE], [ - gl_SIGNAL_SIGPIPE - if test $gl_cv_header_signal_h_SIGPIPE != yes; then - REPLACE_STDIO_WRITE_FUNCS=1 - AC_LIBOBJ([stdio-write]) - fi - ]) - dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" - dnl "expected source file, required through AC_LIBSOURCES, not found". It is - dnl also an optimization, to avoid performing a configure check whose result - dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING - dnl or GNULIB_NONBLOCKING redundant. - m4_ifdef([gl_NONBLOCKING_IO], [ - gl_NONBLOCKING_IO - if test $gl_cv_have_nonblocking != yes; then - REPLACE_STDIO_WRITE_FUNCS=1 - AC_LIBOBJ([stdio-write]) - fi - ]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use, and which is not - dnl guaranteed by both C89 and C11. - gl_WARN_ON_USE_PREPARE([[#include - ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen - renameat snprintf tmpfile vdprintf vsnprintf]) -]) - -AC_DEFUN([gl_STDIO_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_STDIO_H_DEFAULTS], -[ - GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF]) - GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE]) - GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN]) - GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) - GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC]) - GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS]) - GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN]) - GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF]) - GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX]) - GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE]) - GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC]) - GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS]) - GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD]) - GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) - GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF]) - GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK]) - GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO]) - GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL]) - GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO]) - GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE]) - GNULIB_GETC=0; AC_SUBST([GNULIB_GETC]) - GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR]) - GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM]) - GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE]) - GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF]) - GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX]) - GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE]) - GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR]) - GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN]) - GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF]) - GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX]) - GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC]) - GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR]) - GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS]) - GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE]) - GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME]) - GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT]) - GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF]) - GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) - GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) - GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING]) - GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE]) - GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE]) - GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) - GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF]) - GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF]) - GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF]) - GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF]) - GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX]) - GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF]) - GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX]) - GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF]) - GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) - HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) - HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) - HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) - HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) - HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) - HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) - HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) - HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) - HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) - HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) - HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) - HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) - HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) - HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) - HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) - REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) - REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) - REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) - REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) - REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) - REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) - REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) - REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) - REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) - REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) - REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) - REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) - REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) - REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) - REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) - REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) - REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) - REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) - REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) - REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) - REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) - REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) - REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) - REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) - REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) - REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) - REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) - REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) - REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) - REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) - REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) - REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) -]) diff --git a/gl/m4/stdlib_h.m4 b/gl/m4/stdlib_h.m4 deleted file mode 100644 index 3999068153..0000000000 --- a/gl/m4/stdlib_h.m4 +++ /dev/null @@ -1,120 +0,0 @@ -# stdlib_h.m4 serial 43 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_STDLIB_H], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - gl_NEXT_HEADERS([stdlib.h]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use, and which is not - dnl guaranteed by C89. - gl_WARN_ON_USE_PREPARE([[#include -#if HAVE_SYS_LOADAVG_H -# include -#endif -#if HAVE_RANDOM_H -# include -#endif - ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt - initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps - posix_openpt ptsname ptsname_r qsort_r random random_r realpath rpmatch - secure_getenv setenv setstate setstate_r srandom srandom_r - strtod strtoll strtoull unlockpt unsetenv]) -]) - -AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_STDLIB_H_DEFAULTS], -[ - GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT]) - GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL]) - GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX]) - GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME]) - GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG]) - GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT]) - GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT]) - GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX]) - GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC]) - GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP]) - GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP]) - GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS]) - GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP]) - GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS]) - GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT]) - GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME]) - GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R]) - GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) - GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R]) - GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM]) - GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) - GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) - GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH]) - GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) - GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV]) - GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) - GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) - GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) - GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL]) - GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX]) - GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT]) - GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) - GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) - HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) - HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) - HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) - HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) - HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) - HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) - HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) - HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) - HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP]) - HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS]) - HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) - HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) - HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) - HAVE_QSORT_R=1; AC_SUBST([HAVE_QSORT_R]) - HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) - HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) - HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) - HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) - HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) - HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV]) - HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) - HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) - HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) - HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) - HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) - HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) - HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) - HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT]) - HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) - REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC]) - REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) - REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC]) - REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) - REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) - REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME]) - REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) - REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) - REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R]) - REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) - REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC]) - REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) - REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) - REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) - REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) - REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) -]) diff --git a/gl/m4/strcase.m4 b/gl/m4/strcase.m4 deleted file mode 100644 index eefc047f7f..0000000000 --- a/gl/m4/strcase.m4 +++ /dev/null @@ -1,45 +0,0 @@ -# strcase.m4 serial 11 -dnl Copyright (C) 2002, 2005-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_STRCASE], -[ - gl_FUNC_STRCASECMP - gl_FUNC_STRNCASECMP -]) - -AC_DEFUN([gl_FUNC_STRCASECMP], -[ - AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) - AC_CHECK_FUNCS([strcasecmp]) - if test $ac_cv_func_strcasecmp = no; then - HAVE_STRCASECMP=0 - fi -]) - -AC_DEFUN([gl_FUNC_STRNCASECMP], -[ - AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) - AC_CHECK_FUNCS([strncasecmp]) - if test $ac_cv_func_strncasecmp = yes; then - HAVE_STRNCASECMP=1 - else - HAVE_STRNCASECMP=0 - fi - AC_CHECK_DECLS([strncasecmp]) - if test $ac_cv_have_decl_strncasecmp = no; then - HAVE_DECL_STRNCASECMP=0 - fi -]) - -# Prerequisites of lib/strcasecmp.c. -AC_DEFUN([gl_PREREQ_STRCASECMP], [ - : -]) - -# Prerequisites of lib/strncasecmp.c. -AC_DEFUN([gl_PREREQ_STRNCASECMP], [ - : -]) diff --git a/gl/m4/string_h.m4 b/gl/m4/string_h.m4 deleted file mode 100644 index 0c5ec6f9a0..0000000000 --- a/gl/m4/string_h.m4 +++ /dev/null @@ -1,120 +0,0 @@ -# Configure a GNU-like replacement for . - -# Copyright (C) 2007-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 21 - -# Written by Paul Eggert. - -AC_DEFUN([gl_HEADER_STRING_H], -[ - dnl Use AC_REQUIRE here, so that the default behavior below is expanded - dnl once only, before all statements that occur in other macros. - AC_REQUIRE([gl_HEADER_STRING_H_BODY]) -]) - -AC_DEFUN([gl_HEADER_STRING_H_BODY], -[ - AC_REQUIRE([AC_C_RESTRICT]) - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - gl_NEXT_HEADERS([string.h]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use, and which is not - dnl guaranteed by C89. - gl_WARN_ON_USE_PREPARE([[#include - ]], - [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul - strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r - strerror_r strsignal strverscmp]) -]) - -AC_DEFUN([gl_STRING_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], -[ - GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) - GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) - GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) - GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) - GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) - GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) - GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) - GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) - GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) - GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) - GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) - GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) - GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) - GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) - GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) - GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) - GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) - GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) - GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) - GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) - GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) - GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) - GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) - GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) - GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) - GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) - GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) - GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) - GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) - GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) - GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) - GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) - GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) - GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) - GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) - GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) - GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) - HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) - HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) - HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR]) - HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) - HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) - HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) - HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) - HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) - HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) - HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) - HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) - HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) - HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) - HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) - HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) - HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) - HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) - HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) - HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) - HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) - REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) - REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) - REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) - REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) - REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) - REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) - REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) - REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) - REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) - REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) - REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) - REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) - REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) - REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) - UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) -]) diff --git a/gl/m4/strings_h.m4 b/gl/m4/strings_h.m4 deleted file mode 100644 index 62a62e20b3..0000000000 --- a/gl/m4/strings_h.m4 +++ /dev/null @@ -1,52 +0,0 @@ -# Configure a replacement for . -# serial 6 - -# Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_HEADER_STRINGS_H], -[ - dnl Use AC_REQUIRE here, so that the default behavior below is expanded - dnl once only, before all statements that occur in other macros. - AC_REQUIRE([gl_HEADER_STRINGS_H_BODY]) -]) - -AC_DEFUN([gl_HEADER_STRINGS_H_BODY], -[ - AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) - - gl_CHECK_NEXT_HEADERS([strings.h]) - if test $ac_cv_header_strings_h = yes; then - HAVE_STRINGS_H=1 - else - HAVE_STRINGS_H=0 - fi - AC_SUBST([HAVE_STRINGS_H]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[ - /* Minix 3.1.8 has a bug: must be included before - . */ - #include - #include - ]], [ffs strcasecmp strncasecmp]) -]) - -AC_DEFUN([gl_STRINGS_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) -]) - -AC_DEFUN([gl_HEADER_STRINGS_H_DEFAULTS], -[ - GNULIB_FFS=0; AC_SUBST([GNULIB_FFS]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_FFS=1; AC_SUBST([HAVE_FFS]) - HAVE_STRCASECMP=1; AC_SUBST([HAVE_STRCASECMP]) - HAVE_DECL_STRNCASECMP=1; AC_SUBST([HAVE_DECL_STRNCASECMP]) -]) diff --git a/gl/m4/strndup.m4 b/gl/m4/strndup.m4 deleted file mode 100644 index ac48a228f4..0000000000 --- a/gl/m4/strndup.m4 +++ /dev/null @@ -1,58 +0,0 @@ -# strndup.m4 serial 22 -dnl Copyright (C) 2002-2003, 2005-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_STRNDUP], -[ - dnl Persuade glibc to declare strndup(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - AC_CHECK_DECLS_ONCE([strndup]) - AC_CHECK_FUNCS_ONCE([strndup]) - if test $ac_cv_have_decl_strndup = no; then - HAVE_DECL_STRNDUP=0 - fi - - if test $ac_cv_func_strndup = yes; then - HAVE_STRNDUP=1 - # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. - AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup_works], - [AC_RUN_IFELSE([ - AC_LANG_PROGRAM([[#include - #include ]], [[ -#if !HAVE_DECL_STRNDUP - extern - #ifdef __cplusplus - "C" - #endif - char *strndup (const char *, size_t); -#endif - int result; - char *s; - s = strndup ("some longer string", 15); - free (s); - s = strndup ("shorter string", 13); - result = s[13] != '\0'; - free (s); - return result;]])], - [gl_cv_func_strndup_works=yes], - [gl_cv_func_strndup_works=no], - [ -changequote(,)dnl - case $host_os in - aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";; - *) gl_cv_func_strndup_works="guessing yes";; - esac -changequote([,])dnl - ])]) - case $gl_cv_func_strndup_works in - *no) REPLACE_STRNDUP=1 ;; - esac - else - HAVE_STRNDUP=0 - fi -]) diff --git a/gl/m4/strnlen.m4 b/gl/m4/strnlen.m4 deleted file mode 100644 index 67b38597a8..0000000000 --- a/gl/m4/strnlen.m4 +++ /dev/null @@ -1,30 +0,0 @@ -# strnlen.m4 serial 13 -dnl Copyright (C) 2002-2003, 2005-2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_STRNLEN], -[ - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - - dnl Persuade glibc to declare strnlen(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_CHECK_DECLS_ONCE([strnlen]) - if test $ac_cv_have_decl_strnlen = no; then - HAVE_DECL_STRNLEN=0 - else - m4_pushdef([AC_LIBOBJ], [:]) - dnl Note: AC_FUNC_STRNLEN does AC_LIBOBJ([strnlen]). - AC_FUNC_STRNLEN - m4_popdef([AC_LIBOBJ]) - if test $ac_cv_func_strnlen_working = no; then - REPLACE_STRNLEN=1 - fi - fi -]) - -# Prerequisites of lib/strnlen.c. -AC_DEFUN([gl_PREREQ_STRNLEN], [:]) diff --git a/gl/m4/strtok_r.m4 b/gl/m4/strtok_r.m4 deleted file mode 100644 index d010307bbc..0000000000 --- a/gl/m4/strtok_r.m4 +++ /dev/null @@ -1,74 +0,0 @@ -# strtok_r.m4 serial 13 -dnl Copyright (C) 2002-2004, 2006-2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_STRTOK_R], -[ - dnl The strtok_r() declaration in lib/string.in.h uses 'restrict'. - AC_REQUIRE([AC_C_RESTRICT]) - - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CHECK_FUNCS([strtok_r]) - if test $ac_cv_func_strtok_r = yes; then - HAVE_STRTOK_R=1 - dnl glibc 2.7 has a bug in strtok_r that causes a segmentation fault - dnl when the second argument to strtok_r is a constant string that has - dnl exactly one byte and compiling with optimization. This bug is, for - dnl example, present in the glibc 2.7-18 package in Debian "lenny". - dnl See . - AC_CACHE_CHECK([whether strtok_r works], [gl_cv_func_strtok_r_works], - [AC_RUN_IFELSE( - [AC_LANG_PROGRAM([[ - #ifndef __OPTIMIZE__ - # define __OPTIMIZE__ 1 - #endif - #undef __OPTIMIZE_SIZE__ - #undef __NO_INLINE__ - #include - #include - ]], - [[static const char dummy[] = "\177\01a"; - char delimiters[] = "xxxxxxxx"; - char *save_ptr = (char *) dummy; - strtok_r (delimiters, "x", &save_ptr); - strtok_r (NULL, "x", &save_ptr); - return 0; - ]]) - ], - [gl_cv_func_strtok_r_works=yes], - [gl_cv_func_strtok_r_works=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess no on glibc systems. - *-gnu*) gl_cv_func_strtok_r_works="guessing no";; - *) gl_cv_func_strtok_r_works="guessing yes";; - esac -changequote([,])dnl - ]) - ]) - case "$gl_cv_func_strtok_r_works" in - *no) - dnl We could set REPLACE_STRTOK_R=1 here, but it's only the macro - dnl version in which is wrong. The code compiled - dnl into libc is fine. - UNDEFINE_STRTOK_R=1 - ;; - esac - else - HAVE_STRTOK_R=0 - fi - AC_CHECK_DECLS_ONCE([strtok_r]) - if test $ac_cv_have_decl_strtok_r = no; then - HAVE_DECL_STRTOK_R=0 - fi -]) - -# Prerequisites of lib/strtok_r.c. -AC_DEFUN([gl_PREREQ_STRTOK_R], [ - : -]) diff --git a/gl/m4/strverscmp.m4 b/gl/m4/strverscmp.m4 deleted file mode 100644 index 5524294c2e..0000000000 --- a/gl/m4/strverscmp.m4 +++ /dev/null @@ -1,22 +0,0 @@ -# strverscmp.m4 serial 8 -dnl Copyright (C) 2002, 2005-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_STRVERSCMP], -[ - dnl Persuade glibc to declare strverscmp(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - AC_CHECK_FUNCS([strverscmp]) - if test $ac_cv_func_strverscmp = no; then - HAVE_STRVERSCMP=0 - fi -]) - -# Prerequisites of lib/strverscmp.c. -AC_DEFUN([gl_PREREQ_STRVERSCMP], [ - : -]) diff --git a/gl/m4/sys_socket_h.m4 b/gl/m4/sys_socket_h.m4 deleted file mode 100644 index ae500c7605..0000000000 --- a/gl/m4/sys_socket_h.m4 +++ /dev/null @@ -1,176 +0,0 @@ -# sys_socket_h.m4 serial 23 -dnl Copyright (C) 2005-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Simon Josefsson. - -AC_DEFUN([gl_HEADER_SYS_SOCKET], -[ - AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) - AC_REQUIRE([AC_CANONICAL_HOST]) - - dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have - dnl old-style declarations (with return type 'int' instead of 'ssize_t') - dnl unless _POSIX_PII_SOCKET is defined. - case "$host_os" in - osf*) - AC_DEFINE([_POSIX_PII_SOCKET], [1], - [Define to 1 in order to get the POSIX compatible declarations - of socket functions.]) - ;; - esac - - AC_CACHE_CHECK([whether is self-contained], - [gl_cv_header_sys_socket_h_selfcontained], - [ - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])], - [gl_cv_header_sys_socket_h_selfcontained=yes], - [gl_cv_header_sys_socket_h_selfcontained=no]) - ]) - if test $gl_cv_header_sys_socket_h_selfcontained = yes; then - dnl If the shutdown function exists, should define - dnl SHUT_RD, SHUT_WR, SHUT_RDWR. - AC_CHECK_FUNCS([shutdown]) - if test $ac_cv_func_shutdown = yes; then - AC_CACHE_CHECK([whether defines the SHUT_* macros], - [gl_cv_header_sys_socket_h_shut], - [ - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include ]], - [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], - [gl_cv_header_sys_socket_h_shut=yes], - [gl_cv_header_sys_socket_h_shut=no]) - ]) - if test $gl_cv_header_sys_socket_h_shut = no; then - SYS_SOCKET_H='sys/socket.h' - fi - fi - fi - # We need to check for ws2tcpip.h now. - gl_PREREQ_SYS_H_SOCKET - AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ - /* sys/types.h is not needed according to POSIX, but the - sys/socket.h in i386-unknown-freebsd4.10 and - powerpc-apple-darwin5.5 required it. */ -#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_WS2TCPIP_H -#include -#endif -]) - if test $ac_cv_type_struct_sockaddr_storage = no; then - HAVE_STRUCT_SOCKADDR_STORAGE=0 - fi - if test $ac_cv_type_sa_family_t = no; then - HAVE_SA_FAMILY_T=0 - fi - if test $ac_cv_type_struct_sockaddr_storage != no; then - AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], - [], - [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], - [#include - #ifdef HAVE_SYS_SOCKET_H - #include - #endif - #ifdef HAVE_WS2TCPIP_H - #include - #endif - ]) - fi - if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ - || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then - SYS_SOCKET_H='sys/socket.h' - fi - gl_PREREQ_SYS_H_WINSOCK2 - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[ -/* Some systems require prerequisite headers. */ -#include -#include - ]], [socket connect accept bind getpeername getsockname getsockopt - listen recv send recvfrom sendto setsockopt shutdown accept4]) -]) - -AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], -[ - dnl Check prerequisites of the replacement. - AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) - gl_CHECK_NEXT_HEADERS([sys/socket.h]) - if test $ac_cv_header_sys_socket_h = yes; then - HAVE_SYS_SOCKET_H=1 - HAVE_WS2TCPIP_H=0 - else - HAVE_SYS_SOCKET_H=0 - if test $ac_cv_header_ws2tcpip_h = yes; then - HAVE_WS2TCPIP_H=1 - else - HAVE_WS2TCPIP_H=0 - fi - fi - AC_SUBST([HAVE_SYS_SOCKET_H]) - AC_SUBST([HAVE_WS2TCPIP_H]) -]) - -# Common prerequisites of the replacement and of the -# replacement. -# Sets and substitutes HAVE_WINSOCK2_H. -AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], -[ - m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) - m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) - AC_CHECK_HEADERS_ONCE([sys/socket.h]) - if test $ac_cv_header_sys_socket_h != yes; then - dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make - dnl the check for those headers unconditional; yet cygwin reports - dnl that the headers are present but cannot be compiled (since on - dnl cygwin, all socket information should come from sys/socket.h). - AC_CHECK_HEADERS([winsock2.h]) - fi - if test "$ac_cv_header_winsock2_h" = yes; then - HAVE_WINSOCK2_H=1 - UNISTD_H_HAVE_WINSOCK2_H=1 - SYS_IOCTL_H_HAVE_WINSOCK2_H=1 - else - HAVE_WINSOCK2_H=0 - fi - AC_SUBST([HAVE_WINSOCK2_H]) -]) - -AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], -[ - GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET]) - GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT]) - GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT]) - GNULIB_BIND=0; AC_SUBST([GNULIB_BIND]) - GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME]) - GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME]) - GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT]) - GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN]) - GNULIB_RECV=0; AC_SUBST([GNULIB_RECV]) - GNULIB_SEND=0; AC_SUBST([GNULIB_SEND]) - GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM]) - GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO]) - GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT]) - GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN]) - GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4]) - HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) - HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; - AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) - HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) - HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) -]) diff --git a/gl/m4/sys_stat_h.m4 b/gl/m4/sys_stat_h.m4 deleted file mode 100644 index 3d43b6f5ef..0000000000 --- a/gl/m4/sys_stat_h.m4 +++ /dev/null @@ -1,96 +0,0 @@ -# sys_stat_h.m4 serial 28 -*- Autoconf -*- -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Eric Blake. -dnl Provide a GNU-like . - -AC_DEFUN([gl_HEADER_SYS_STAT_H], -[ - AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) - - dnl Check for broken stat macros. - AC_REQUIRE([AC_HEADER_STAT]) - - gl_CHECK_NEXT_HEADERS([sys/stat.h]) - - dnl Ensure the type mode_t gets defined. - AC_REQUIRE([AC_TYPE_MODE_T]) - - dnl Whether to override 'struct stat'. - m4_ifdef([gl_LARGEFILE], [ - AC_REQUIRE([gl_LARGEFILE]) - ], [ - WINDOWS_64_BIT_ST_SIZE=0 - ]) - AC_SUBST([WINDOWS_64_BIT_ST_SIZE]) - if test $WINDOWS_64_BIT_ST_SIZE = 1; then - AC_DEFINE([_GL_WINDOWS_64_BIT_ST_SIZE], [1], - [Define to 1 if Gnulib overrides 'struct stat' on Windows so that - struct stat.st_size becomes 64-bit.]) - fi - - dnl Define types that are supposed to be defined in or - dnl . - AC_CHECK_TYPE([nlink_t], [], - [AC_DEFINE([nlink_t], [int], - [Define to the type of st_nlink in struct stat, or a supertype.])], - [#include - #include ]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[#include - ]], [fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat - mknod mknodat stat utimensat]) -]) # gl_HEADER_SYS_STAT_H - -AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_SYS_STAT_H_DEFAULTS], -[ - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR - GNULIB_FCHMODAT=0; AC_SUBST([GNULIB_FCHMODAT]) - GNULIB_FSTAT=0; AC_SUBST([GNULIB_FSTAT]) - GNULIB_FSTATAT=0; AC_SUBST([GNULIB_FSTATAT]) - GNULIB_FUTIMENS=0; AC_SUBST([GNULIB_FUTIMENS]) - GNULIB_LCHMOD=0; AC_SUBST([GNULIB_LCHMOD]) - GNULIB_LSTAT=0; AC_SUBST([GNULIB_LSTAT]) - GNULIB_MKDIRAT=0; AC_SUBST([GNULIB_MKDIRAT]) - GNULIB_MKFIFO=0; AC_SUBST([GNULIB_MKFIFO]) - GNULIB_MKFIFOAT=0; AC_SUBST([GNULIB_MKFIFOAT]) - GNULIB_MKNOD=0; AC_SUBST([GNULIB_MKNOD]) - GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT]) - GNULIB_STAT=0; AC_SUBST([GNULIB_STAT]) - GNULIB_UTIMENSAT=0; AC_SUBST([GNULIB_UTIMENSAT]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT]) - HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT]) - HAVE_FUTIMENS=1; AC_SUBST([HAVE_FUTIMENS]) - HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD]) - HAVE_LSTAT=1; AC_SUBST([HAVE_LSTAT]) - HAVE_MKDIRAT=1; AC_SUBST([HAVE_MKDIRAT]) - HAVE_MKFIFO=1; AC_SUBST([HAVE_MKFIFO]) - HAVE_MKFIFOAT=1; AC_SUBST([HAVE_MKFIFOAT]) - HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD]) - HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT]) - HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT]) - REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT]) - REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT]) - REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS]) - REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT]) - REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR]) - REPLACE_MKFIFO=0; AC_SUBST([REPLACE_MKFIFO]) - REPLACE_MKNOD=0; AC_SUBST([REPLACE_MKNOD]) - REPLACE_STAT=0; AC_SUBST([REPLACE_STAT]) - REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT]) -]) diff --git a/gl/m4/sys_time_h.m4 b/gl/m4/sys_time_h.m4 deleted file mode 100644 index 3061a9c185..0000000000 --- a/gl/m4/sys_time_h.m4 +++ /dev/null @@ -1,111 +0,0 @@ -# Configure a replacement for . -# serial 8 - -# Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# Written by Paul Eggert and Martin Lambers. - -AC_DEFUN([gl_HEADER_SYS_TIME_H], -[ - dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement - dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1 - dnl statements that occur in other macros. - AC_REQUIRE([gl_HEADER_SYS_TIME_H_BODY]) -]) - -AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY], -[ - AC_REQUIRE([AC_C_RESTRICT]) - AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) - AC_CHECK_HEADERS_ONCE([sys/time.h]) - gl_CHECK_NEXT_HEADERS([sys/time.h]) - - if test $ac_cv_header_sys_time_h != yes; then - HAVE_SYS_TIME_H=0 - fi - - dnl On native Windows with MSVC, 'struct timeval' is defined in - dnl only. So include that header in the list. - gl_PREREQ_SYS_H_WINSOCK2 - AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#if HAVE_SYS_TIME_H - #include - #endif - #include - #if HAVE_WINSOCK2_H - # include - #endif - ]], - [[static struct timeval x; x.tv_sec = x.tv_usec;]])], - [gl_cv_sys_struct_timeval=yes], - [gl_cv_sys_struct_timeval=no]) - ]) - if test $gl_cv_sys_struct_timeval != yes; then - HAVE_STRUCT_TIMEVAL=0 - else - dnl On native Windows with a 64-bit 'time_t', 'struct timeval' is defined - dnl (in and for mingw64, in only - dnl for MSVC) with a tv_sec field of type 'long' (32-bit!), which is - dnl smaller than the 'time_t' type mandated by POSIX. - dnl On OpenBSD 5.1 amd64, tv_sec is 64 bits and time_t 32 bits, but - dnl that is good enough. - AC_CACHE_CHECK([for wide-enough struct timeval.tv_sec member], - [gl_cv_sys_struct_timeval_tv_sec], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#if HAVE_SYS_TIME_H - #include - #endif - #include - #if HAVE_WINSOCK2_H - # include - #endif - ]], - [[static struct timeval x; - typedef int verify_tv_sec_type[ - sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 - ]; - ]])], - [gl_cv_sys_struct_timeval_tv_sec=yes], - [gl_cv_sys_struct_timeval_tv_sec=no]) - ]) - if test $gl_cv_sys_struct_timeval_tv_sec != yes; then - REPLACE_STRUCT_TIMEVAL=1 - fi - fi - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[ -#if HAVE_SYS_TIME_H -# include -#endif -#include - ]], [gettimeofday]) -]) - -AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_HEADER_SYS_TIME_H_DEFAULTS], -[ - GNULIB_GETTIMEOFDAY=0; AC_SUBST([GNULIB_GETTIMEOFDAY]) - dnl Assume POSIX behavior unless another module says otherwise. - HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY]) - HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL]) - HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H]) - HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T]) - REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY]) - REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL]) -]) diff --git a/gl/m4/sys_types_h.m4 b/gl/m4/sys_types_h.m4 deleted file mode 100644 index 159b005b3d..0000000000 --- a/gl/m4/sys_types_h.m4 +++ /dev/null @@ -1,49 +0,0 @@ -# sys_types_h.m4 serial 6 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN_ONCE([gl_SYS_TYPES_H], -[ - AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) - gl_NEXT_HEADERS([sys/types.h]) - - dnl Ensure the type pid_t gets defined. - AC_REQUIRE([AC_TYPE_PID_T]) - - dnl Ensure the type mode_t gets defined. - AC_REQUIRE([AC_TYPE_MODE_T]) - - dnl Whether to override the 'off_t' type. - AC_REQUIRE([gl_TYPE_OFF_T]) -]) - -AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], -[ -]) - -# This works around a buggy version in autoconf <= 2.69. -# See - -m4_version_prereq([2.70], [], [ - -# This is taken from the following Autoconf patch: -# http://git.sv.gnu.org/cgit/autoconf.git/commit/?id=e17a30e98 - -m4_undefine([AC_HEADER_MAJOR]) -AC_DEFUN([AC_HEADER_MAJOR], -[AC_CHECK_HEADERS_ONCE([sys/types.h]) -AC_CHECK_HEADER([sys/mkdev.h], - [AC_DEFINE([MAJOR_IN_MKDEV], [1], - [Define to 1 if `major', `minor', and `makedev' are declared in - .])]) -if test $ac_cv_header_sys_mkdev_h = no; then - AC_CHECK_HEADER([sys/sysmacros.h], - [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], - [Define to 1 if `major', `minor', and `makedev' are declared in - .])]) -fi -]) - -]) diff --git a/gl/m4/sys_uio_h.m4 b/gl/m4/sys_uio_h.m4 deleted file mode 100644 index d4d967fd57..0000000000 --- a/gl/m4/sys_uio_h.m4 +++ /dev/null @@ -1,31 +0,0 @@ -# sys_uio_h.m4 serial 1 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_HEADER_SYS_UIO], -[ - AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS]) - dnl is always overridden, because of GNULIB_POSIXCHECK. - gl_CHECK_NEXT_HEADERS([sys/uio.h]) - if test $ac_cv_header_sys_uio_h = yes; then - HAVE_SYS_UIO_H=1 - else - HAVE_SYS_UIO_H=0 - fi - AC_SUBST([HAVE_SYS_UIO_H]) -]) - -AC_DEFUN([gl_SYS_UIO_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_SYS_UIO_H_DEFAULTS], -[ -]) diff --git a/gl/m4/time_h.m4 b/gl/m4/time_h.m4 deleted file mode 100644 index eb2a631e2c..0000000000 --- a/gl/m4/time_h.m4 +++ /dev/null @@ -1,134 +0,0 @@ -# Configure a more-standard replacement for . - -# Copyright (C) 2000-2001, 2003-2007, 2009-2016 Free Software Foundation, Inc. - -# serial 9 - -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# Written by Paul Eggert and Jim Meyering. - -AC_DEFUN([gl_HEADER_TIME_H], -[ - dnl Use AC_REQUIRE here, so that the default behavior below is expanded - dnl once only, before all statements that occur in other macros. - AC_REQUIRE([gl_HEADER_TIME_H_BODY]) -]) - -AC_DEFUN([gl_HEADER_TIME_H_BODY], -[ - AC_REQUIRE([AC_C_RESTRICT]) - AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) - gl_NEXT_HEADERS([time.h]) - AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) -]) - -dnl Check whether 'struct timespec' is declared -dnl in time.h, sys/time.h, pthread.h, or unistd.h. - -AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], -[ - AC_CHECK_HEADERS_ONCE([sys/time.h]) - AC_CACHE_CHECK([for struct timespec in ], - [gl_cv_sys_struct_timespec_in_time_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], - [gl_cv_sys_struct_timespec_in_time_h=yes], - [gl_cv_sys_struct_timespec_in_time_h=no])]) - - TIME_H_DEFINES_STRUCT_TIMESPEC=0 - SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 - PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 - UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 - if test $gl_cv_sys_struct_timespec_in_time_h = yes; then - TIME_H_DEFINES_STRUCT_TIMESPEC=1 - else - AC_CACHE_CHECK([for struct timespec in ], - [gl_cv_sys_struct_timespec_in_sys_time_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], - [gl_cv_sys_struct_timespec_in_sys_time_h=yes], - [gl_cv_sys_struct_timespec_in_sys_time_h=no])]) - if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then - SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 - else - AC_CACHE_CHECK([for struct timespec in ], - [gl_cv_sys_struct_timespec_in_pthread_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], - [gl_cv_sys_struct_timespec_in_pthread_h=yes], - [gl_cv_sys_struct_timespec_in_pthread_h=no])]) - if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then - PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 - else - AC_CACHE_CHECK([for struct timespec in ], - [gl_cv_sys_struct_timespec_in_unistd_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], - [gl_cv_sys_struct_timespec_in_unistd_h=yes], - [gl_cv_sys_struct_timespec_in_unistd_h=no])]) - if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then - UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 - fi - fi - fi - fi - AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) - AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) - AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) - AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC]) -]) - -AC_DEFUN([gl_TIME_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS], -[ - GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME]) - GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP]) - GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME]) - GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM]) - GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R]) - GNULIB_TIME_RZ=0; AC_SUBST([GNULIB_TIME_RZ]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R]) - HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) - HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) - HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) - dnl If another module says to replace or to not replace, do that. - dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK; - dnl this lets maintainers check for portability. - REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R]) - REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME]) - REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP]) - REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) - - dnl Hack so that the time module doesn't depend on the sys_time module. - dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent. - : ${GNULIB_GETTIMEOFDAY=0}; AC_SUBST([GNULIB_GETTIMEOFDAY]) - dnl Second, it's OK to not use GNULIB_PORTCHECK for REPLACE_GMTIME - dnl and REPLACE_LOCALTIME, as portability to Solaris 2.6 and earlier - dnl is no longer a big deal. - REPLACE_GMTIME=0; AC_SUBST([REPLACE_GMTIME]) - REPLACE_LOCALTIME=0; AC_SUBST([REPLACE_LOCALTIME]) -]) diff --git a/gl/m4/time_r.m4 b/gl/m4/time_r.m4 deleted file mode 100644 index 21b4a2cc18..0000000000 --- a/gl/m4/time_r.m4 +++ /dev/null @@ -1,58 +0,0 @@ -dnl Reentrant time functions: localtime_r, gmtime_r. - -dnl Copyright (C) 2003, 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Written by Paul Eggert. - -AC_DEFUN([gl_TIME_R], -[ - dnl Persuade glibc and Solaris to declare localtime_r. - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) - AC_REQUIRE([AC_C_RESTRICT]) - - dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is - dnl not defined. - AC_CHECK_DECLS([localtime_r], [], [], [[#include ]]) - if test $ac_cv_have_decl_localtime_r = no; then - HAVE_DECL_LOCALTIME_R=0 - fi - - AC_CHECK_FUNCS_ONCE([localtime_r]) - if test $ac_cv_func_localtime_r = yes; then - HAVE_LOCALTIME_R=1 - AC_CACHE_CHECK([whether localtime_r is compatible with its POSIX signature], - [gl_cv_time_r_posix], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[/* We don't need to append 'restrict's to the argument types, - even though the POSIX signature has the 'restrict's, - since C99 says they can't affect type compatibility. */ - struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r; - if (ptr) return 0; - /* Check the return type is a pointer. - On HP-UX 10 it is 'int'. */ - *localtime_r (0, 0);]]) - ], - [gl_cv_time_r_posix=yes], - [gl_cv_time_r_posix=no]) - ]) - if test $gl_cv_time_r_posix = yes; then - REPLACE_LOCALTIME_R=0 - else - REPLACE_LOCALTIME_R=1 - fi - else - HAVE_LOCALTIME_R=0 - fi -]) - -# Prerequisites of lib/time_r.c. -AC_DEFUN([gl_PREREQ_TIME_R], [ - : -]) diff --git a/gl/m4/ungetc.m4 b/gl/m4/ungetc.m4 deleted file mode 100644 index e5d10eb9ff..0000000000 --- a/gl/m4/ungetc.m4 +++ /dev/null @@ -1,47 +0,0 @@ -# ungetc.m4 serial 3 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN_ONCE([gl_FUNC_UNGETC_WORKS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - - AC_CACHE_CHECK([whether ungetc works on arbitrary bytes], - [gl_cv_func_ungetc_works], - [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -#include - ]], [FILE *f; - if (!(f = fopen ("conftest.tmp", "w+"))) return 1; - if (fputs ("abc", f) < 0) return 2; - rewind (f); - if (fgetc (f) != 'a') return 3; - if (fgetc (f) != 'b') return 4; - if (ungetc ('d', f) != 'd') return 5; - if (ftell (f) != 1) return 6; - if (fgetc (f) != 'd') return 7; - if (ftell (f) != 2) return 8; - if (fseek (f, 0, SEEK_CUR) != 0) return 9; - if (ftell (f) != 2) return 10; - if (fgetc (f) != 'c') return 11; - fclose (f); remove ("conftest.tmp");])], - [gl_cv_func_ungetc_works=yes], [gl_cv_func_ungetc_works=no], - [case "$host_os" in - # Guess yes on glibc and bionic systems. - *-gnu*|*-android*) - gl_cv_func_ungetc_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_ungetc_works="guessing no" ;; - esac - ]) - ]) - case "$gl_cv_func_ungetc_works" in - *yes) ;; - *) - AC_DEFINE([FUNC_UNGETC_BROKEN], [1], - [Define to 1 if ungetc is broken when used on arbitrary bytes.]) - ;; - esac -]) diff --git a/gl/m4/unistd_h.m4 b/gl/m4/unistd_h.m4 deleted file mode 100644 index 544dadb412..0000000000 --- a/gl/m4/unistd_h.m4 +++ /dev/null @@ -1,189 +0,0 @@ -# unistd_h.m4 serial 68 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Written by Simon Josefsson, Bruno Haible. - -AC_DEFUN([gl_UNISTD_H], -[ - dnl Use AC_REQUIRE here, so that the default behavior below is expanded - dnl once only, before all statements that occur in other macros. - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - - gl_CHECK_NEXT_HEADERS([unistd.h]) - if test $ac_cv_header_unistd_h = yes; then - HAVE_UNISTD_H=1 - else - HAVE_UNISTD_H=0 - fi - AC_SUBST([HAVE_UNISTD_H]) - - dnl Ensure the type pid_t gets defined. - AC_REQUIRE([AC_TYPE_PID_T]) - - dnl Determine WINDOWS_64_BIT_OFF_T. - AC_REQUIRE([gl_TYPE_OFF_T]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[ -#if HAVE_UNISTD_H -# include -#endif -/* Some systems declare various items in the wrong headers. */ -#if !(defined __GLIBC__ && !defined __UCLIBC__) -# include -# include -# include -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -# include -# endif -#endif - ]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat - fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups - gethostname getlogin getlogin_r getpagesize - getusershell setusershell endusershell - group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite - readlink readlinkat rmdir sethostname sleep symlink symlinkat ttyname_r - unlink unlinkat usleep]) -]) - -AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_UNISTD_H_DEFAULTS], -[ - GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR]) - GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) - GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) - GNULIB_DUP=0; AC_SUBST([GNULIB_DUP]) - GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) - GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3]) - GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON]) - GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS]) - GNULIB_FACCESSAT=0; AC_SUBST([GNULIB_FACCESSAT]) - GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) - GNULIB_FCHOWNAT=0; AC_SUBST([GNULIB_FCHOWNAT]) - GNULIB_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC]) - GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) - GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) - GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) - GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) - GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) - GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS]) - GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) - GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN]) - GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) - GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) - GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) - GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER]) - GNULIB_ISATTY=0; AC_SUBST([GNULIB_ISATTY]) - GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) - GNULIB_LINK=0; AC_SUBST([GNULIB_LINK]) - GNULIB_LINKAT=0; AC_SUBST([GNULIB_LINKAT]) - GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) - GNULIB_PIPE=0; AC_SUBST([GNULIB_PIPE]) - GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2]) - GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD]) - GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE]) - GNULIB_READ=0; AC_SUBST([GNULIB_READ]) - GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) - GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT]) - GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR]) - GNULIB_SETHOSTNAME=0; AC_SUBST([GNULIB_SETHOSTNAME]) - GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) - GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK]) - GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT]) - GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R]) - GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING]) - GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) - GNULIB_UNLINK=0; AC_SUBST([GNULIB_UNLINK]) - GNULIB_UNLINKAT=0; AC_SUBST([GNULIB_UNLINKAT]) - GNULIB_USLEEP=0; AC_SUBST([GNULIB_USLEEP]) - GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) - HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) - HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) - HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) - HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) - HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) - HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) - HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) - HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) - HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) - HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) - HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) - HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) - HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) - HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) - HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) - HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) - HAVE_LINK=1; AC_SUBST([HAVE_LINK]) - HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) - HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) - HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) - HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) - HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) - HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) - HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) - HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) - HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) - HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) - HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) - HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) - HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) - HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) - HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) - HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) - HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) - HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) - HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) - HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) - HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) - HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) - HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) - HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) - REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) - REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) - REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) - REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) - REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) - REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) - REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) - REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) - REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) - REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) - REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) - REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) - REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) - REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) - REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) - REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) - REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) - REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) - REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) - REPLACE_READ=0; AC_SUBST([REPLACE_READ]) - REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) - REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT]) - REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) - REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) - REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) - REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT]) - REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) - REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) - REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) - REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) - REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) - UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) - UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; - AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) -]) diff --git a/gl/m4/valgrind-tests.m4 b/gl/m4/valgrind-tests.m4 deleted file mode 100644 index b43310b87a..0000000000 --- a/gl/m4/valgrind-tests.m4 +++ /dev/null @@ -1,37 +0,0 @@ -# valgrind-tests.m4 serial 3 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Simon Josefsson - -# gl_VALGRIND_TESTS() -# ------------------- -# Check if valgrind is available, and set VALGRIND to it if available. -AC_DEFUN([gl_VALGRIND_TESTS], -[ - AC_ARG_ENABLE(valgrind-tests, - AS_HELP_STRING([--disable-valgrind-tests], - [don't try to run self tests under valgrind]), - [opt_valgrind_tests=$enableval], [opt_valgrind_tests=no]) - - # Run self-tests under valgrind? - if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then - AC_CHECK_PROGS(VALGRIND, valgrind) - fi - - OPTS="-q --error-exitcode=6 --leak-check=full" - - if test -n "$VALGRIND" \ - && $VALGRIND $OPTS $SHELL -c 'exit 0' > /dev/null 2>&1; then - opt_valgrind_tests=yes - VALGRIND="$VALGRIND $OPTS --suppressions=\$(srcdir)/suppressions.valgrind" - else - opt_valgrind_tests=no - VALGRIND= - fi - - AC_MSG_CHECKING([whether self tests are run under valgrind]) - AC_MSG_RESULT($opt_valgrind_tests) -]) diff --git a/gl/m4/vasnprintf.m4 b/gl/m4/vasnprintf.m4 deleted file mode 100644 index 2d4b46310b..0000000000 --- a/gl/m4/vasnprintf.m4 +++ /dev/null @@ -1,291 +0,0 @@ -# vasnprintf.m4 serial 36 -dnl Copyright (C) 2002-2004, 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_VASNPRINTF], -[ - AC_CHECK_FUNCS_ONCE([vasnprintf]) - if test $ac_cv_func_vasnprintf = no; then - gl_REPLACE_VASNPRINTF - fi -]) - -AC_DEFUN([gl_REPLACE_VASNPRINTF], -[ - AC_CHECK_FUNCS_ONCE([vasnprintf]) - AC_LIBOBJ([vasnprintf]) - AC_LIBOBJ([printf-args]) - AC_LIBOBJ([printf-parse]) - AC_LIBOBJ([asnprintf]) - if test $ac_cv_func_vasnprintf = yes; then - AC_DEFINE([REPLACE_VASNPRINTF], [1], - [Define if vasnprintf exists but is overridden by gnulib.]) - fi - gl_PREREQ_PRINTF_ARGS - gl_PREREQ_PRINTF_PARSE - gl_PREREQ_VASNPRINTF - gl_PREREQ_ASNPRINTF -]) - -# Prerequisites of lib/printf-args.h, lib/printf-args.c. -AC_DEFUN([gl_PREREQ_PRINTF_ARGS], -[ - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - AC_REQUIRE([gt_TYPE_WCHAR_T]) - AC_REQUIRE([gt_TYPE_WINT_T]) -]) - -# Prerequisites of lib/printf-parse.h, lib/printf-parse.c. -AC_DEFUN([gl_PREREQ_PRINTF_PARSE], -[ - AC_REQUIRE([gl_FEATURES_H]) - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - AC_REQUIRE([gt_TYPE_WCHAR_T]) - AC_REQUIRE([gt_TYPE_WINT_T]) - AC_REQUIRE([AC_TYPE_SIZE_T]) - AC_CHECK_TYPE([ptrdiff_t], , - [AC_DEFINE([ptrdiff_t], [long], - [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) - ]) - AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) -]) - -# Prerequisites of lib/vasnprintf.c. -AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], -[ - AC_REQUIRE([AC_FUNC_ALLOCA]) - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - AC_REQUIRE([gt_TYPE_WCHAR_T]) - AC_REQUIRE([gt_TYPE_WINT_T]) - AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) - dnl Use the _snprintf function only if it is declared (because on NetBSD it - dnl is defined as a weak alias of snprintf; we prefer to use the latter). - AC_CHECK_DECLS([_snprintf], , , [[#include ]]) - dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization - dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE. - AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) - dnl We can avoid a lot of code by assuming that snprintf's return value - dnl conforms to ISO C99. So check that. - AC_REQUIRE([gl_SNPRINTF_RETVAL_C99]) - case "$gl_cv_func_snprintf_retval_c99" in - *yes) - AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1], - [Define if the return value of the snprintf function is the number of - of bytes (excluding the terminating NUL) that would have been produced - if the buffer had been large enough.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting 'long double' -# arguments. -AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) - case "$gl_cv_func_printf_long_double" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'long double' arguments.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' -# arguments. -AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_INFINITE]) - case "$gl_cv_func_printf_infinite" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - infinite 'double' arguments.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' -# arguments. -AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) - dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if - dnl NEED_PRINTF_LONG_DOUBLE is already set. - AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) - case "$gl_cv_func_printf_long_double" in - *yes) - case "$gl_cv_func_printf_infinite_long_double" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - infinite 'long double' arguments.]) - ;; - esac - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) - case "$gl_cv_func_printf_directive_a" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], - [Define if the vasnprintf implementation needs special code for - the 'a' and 'A' directives.]) - AC_CHECK_FUNCS([nl_langinfo]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) - case "$gl_cv_func_printf_directive_f" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], - [Define if the vasnprintf implementation needs special code for - the 'F' directive.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) - case "$gl_cv_func_printf_directive_ls" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], - [Define if the vasnprintf implementation needs special code for - the 'ls' directive.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. -AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], -[ - AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) - case "$gl_cv_func_printf_flag_grouping" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], - [Define if the vasnprintf implementation needs special code for the - ' flag.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. -AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], -[ - AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) - case "$gl_cv_func_printf_flag_leftadjust" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], - [Define if the vasnprintf implementation needs special code for the - '-' flag.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. -AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], -[ - AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) - case "$gl_cv_func_printf_flag_zero" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], - [Define if the vasnprintf implementation needs special code for the - 0 flag.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting large precisions. -AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], -[ - AC_REQUIRE([gl_PRINTF_PRECISION]) - case "$gl_cv_func_printf_precision" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], - [Define if the vasnprintf implementation needs special code for - supporting large precisions without arbitrary bounds.]) - AC_DEFINE([NEED_PRINTF_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'double' arguments.]) - AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'long double' arguments.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory -# conditions. -AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], -[ - AC_REQUIRE([gl_PRINTF_ENOMEM]) - case "$gl_cv_func_printf_enomem" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_ENOMEM], [1], - [Define if the vasnprintf implementation needs special code for - surviving out-of-memory conditions.]) - AC_DEFINE([NEED_PRINTF_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'double' arguments.]) - AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'long double' arguments.]) - ;; - esac -]) - -# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. -AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], -[ - AC_REQUIRE([gl_PREREQ_VASNPRINTF]) - gl_PREREQ_VASNPRINTF_LONG_DOUBLE - gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE - gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE - gl_PREREQ_VASNPRINTF_DIRECTIVE_A - gl_PREREQ_VASNPRINTF_DIRECTIVE_F - gl_PREREQ_VASNPRINTF_DIRECTIVE_LS - gl_PREREQ_VASNPRINTF_FLAG_GROUPING - gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST - gl_PREREQ_VASNPRINTF_FLAG_ZERO - gl_PREREQ_VASNPRINTF_PRECISION - gl_PREREQ_VASNPRINTF_ENOMEM -]) - -# Prerequisites of lib/asnprintf.c. -AC_DEFUN([gl_PREREQ_ASNPRINTF], -[ -]) diff --git a/gl/m4/vasprintf.m4 b/gl/m4/vasprintf.m4 deleted file mode 100644 index d7866b1929..0000000000 --- a/gl/m4/vasprintf.m4 +++ /dev/null @@ -1,46 +0,0 @@ -# vasprintf.m4 serial 6 -dnl Copyright (C) 2002-2003, 2006-2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_VASPRINTF], -[ - AC_CHECK_FUNCS([vasprintf]) - if test $ac_cv_func_vasprintf = no; then - gl_REPLACE_VASPRINTF - fi -]) - -AC_DEFUN([gl_REPLACE_VASPRINTF], -[ - AC_LIBOBJ([vasprintf]) - AC_LIBOBJ([asprintf]) - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - if test $ac_cv_func_vasprintf = yes; then - REPLACE_VASPRINTF=1 - else - HAVE_VASPRINTF=0 - fi - gl_PREREQ_VASPRINTF_H - gl_PREREQ_VASPRINTF - gl_PREREQ_ASPRINTF -]) - -# Prerequisites of the vasprintf portion of lib/stdio.h. -AC_DEFUN([gl_PREREQ_VASPRINTF_H], -[ - dnl Persuade glibc to declare asprintf() and vasprintf(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) -]) - -# Prerequisites of lib/vasprintf.c. -AC_DEFUN([gl_PREREQ_VASPRINTF], -[ -]) - -# Prerequisites of lib/asprintf.c. -AC_DEFUN([gl_PREREQ_ASPRINTF], -[ -]) diff --git a/gl/m4/vsnprintf.m4 b/gl/m4/vsnprintf.m4 deleted file mode 100644 index e056f05cd5..0000000000 --- a/gl/m4/vsnprintf.m4 +++ /dev/null @@ -1,54 +0,0 @@ -# vsnprintf.m4 serial 6 -dnl Copyright (C) 2002-2004, 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Libintl 0.17 will replace vsnprintf only if it does not support %1$s, -dnl but defers to any gnulib vsnprintf replacements. Therefore, gnulib -dnl must guarantee that the decision for replacing vsnprintf is a superset -dnl of the reasons checked by libintl. -AC_DEFUN([gl_FUNC_VSNPRINTF], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - gl_cv_func_vsnprintf_usable=no - AC_CHECK_FUNCS([vsnprintf]) - if test $ac_cv_func_vsnprintf = yes; then - gl_SNPRINTF_SIZE1 - case "$gl_cv_func_snprintf_size1" in - *yes) - gl_SNPRINTF_RETVAL_C99 - case "$gl_cv_func_snprintf_retval_c99" in - *yes) - gl_PRINTF_POSITIONS - case "$gl_cv_func_printf_positions" in - *yes) - gl_cv_func_vsnprintf_usable=yes - ;; - esac - ;; - esac - ;; - esac - fi - if test $gl_cv_func_vsnprintf_usable = no; then - gl_REPLACE_VSNPRINTF - fi - AC_CHECK_DECLS_ONCE([vsnprintf]) - if test $ac_cv_have_decl_vsnprintf = no; then - HAVE_DECL_VSNPRINTF=0 - fi -]) - -AC_DEFUN([gl_REPLACE_VSNPRINTF], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_LIBOBJ([vsnprintf]) - if test $ac_cv_func_vsnprintf = yes; then - REPLACE_VSNPRINTF=1 - fi - gl_PREREQ_VSNPRINTF -]) - -# Prerequisites of lib/vsnprintf.c. -AC_DEFUN([gl_PREREQ_VSNPRINTF], [:]) diff --git a/gl/m4/warn-on-use.m4 b/gl/m4/warn-on-use.m4 deleted file mode 100644 index 08440ec593..0000000000 --- a/gl/m4/warn-on-use.m4 +++ /dev/null @@ -1,47 +0,0 @@ -# warn-on-use.m4 serial 5 -dnl Copyright (C) 2010-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) -# --------------------------------------- -# For each whitespace-separated element in the list of NAMES, define -# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES -# even after being undefined as a macro. -# -# See warn-on-use.h for some hints on how to poison function names, as -# well as ideas on poisoning global variables and macros. NAMES may -# include global variables, but remember that only functions work with -# _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single -# header, but if the replacement header pulls in other headers because -# some systems declare functions in the wrong header, then INCLUDES -# should do likewise. -# -# It is generally safe to assume declarations for functions declared -# in the intersection of C89 and C11 (such as printf) without -# needing gl_WARN_ON_USE_PREPARE. -AC_DEFUN([gl_WARN_ON_USE_PREPARE], -[ - m4_foreach_w([gl_decl], [$2], - [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), - [Define to 1 if ]m4_defn([gl_decl])[ is declared even after - undefining macros.])])dnl -dnl FIXME: gl_Symbol must be used unquoted until we can assume -dnl autoconf 2.64 or newer. - for gl_func in m4_flatten([$2]); do - AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl - AC_CACHE_CHECK([whether $gl_func is declared without a macro], - gl_Symbol, - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], -[@%:@undef $gl_func - (void) $gl_func;])], - [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])]) - AS_VAR_IF(gl_Symbol, [yes], - [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) - dnl shortcut - if the raw declaration exists, then set a cache - dnl variable to allow skipping any later AC_CHECK_DECL efforts - eval ac_cv_have_decl_$gl_func=yes]) - AS_VAR_POPDEF([gl_Symbol])dnl - done -]) diff --git a/gl/m4/warnings.m4 b/gl/m4/warnings.m4 deleted file mode 100644 index 924e21d5e8..0000000000 --- a/gl/m4/warnings.m4 +++ /dev/null @@ -1,79 +0,0 @@ -# warnings.m4 serial 11 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Simon Josefsson - -# gl_AS_VAR_APPEND(VAR, VALUE) -# ---------------------------- -# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it. -m4_ifdef([AS_VAR_APPEND], -[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])], -[m4_define([gl_AS_VAR_APPEND], -[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])]) - - -# gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED], -# [PROGRAM = AC_LANG_PROGRAM()]) -# ----------------------------------------------------------------- -# Check if the compiler supports OPTION when compiling PROGRAM. -# -# FIXME: gl_Warn must be used unquoted until we can assume Autoconf -# 2.64 or newer. -AC_DEFUN([gl_COMPILER_OPTION_IF], -[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl -AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl -AS_LITERAL_IF([$1], - [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))], - [gl_positive="$1" -case $gl_positive in - -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;; -esac -m4_pushdef([gl_Positive], [$gl_positive])])dnl -AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [ - gl_save_compiler_FLAGS="$gl_Flags" - gl_AS_VAR_APPEND(m4_defn([gl_Flags]), - [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["]) - AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])], - [AS_VAR_SET(gl_Warn, [yes])], - [AS_VAR_SET(gl_Warn, [no])]) - gl_Flags="$gl_save_compiler_FLAGS" -]) -AS_VAR_IF(gl_Warn, [yes], [$2], [$3]) -m4_popdef([gl_Positive])dnl -AS_VAR_POPDEF([gl_Flags])dnl -AS_VAR_POPDEF([gl_Warn])dnl -]) - -# gl_UNKNOWN_WARNINGS_ARE_ERRORS -# ------------------------------ -# Clang doesn't complain about unknown warning options unless one also -# specifies -Wunknown-warning-option -Werror. Detect this. -AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS], -[gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option], - [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'], - [gl_unknown_warnings_are_errors=])]) - -# gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS], -# [PROGRAM = AC_LANG_PROGRAM()]) -# --------------------------------------------- -# Adds parameter to WARN_CFLAGS if the compiler supports it when -# compiling PROGRAM. For example, gl_WARN_ADD([-Wparentheses]). -# -# If VARIABLE is a variable name, AC_SUBST it. -AC_DEFUN([gl_WARN_ADD], -[AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS]) -gl_COMPILER_OPTION_IF([$1], - [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])], - [], - [$3]) -m4_ifval([$2], - [AS_LITERAL_IF([$2], [AC_SUBST([$2])])], - [AC_SUBST([WARN_CFLAGS])])dnl -]) - -# Local Variables: -# mode: autoconf -# End: diff --git a/gl/m4/wchar_h.m4 b/gl/m4/wchar_h.m4 deleted file mode 100644 index 16017a59fb..0000000000 --- a/gl/m4/wchar_h.m4 +++ /dev/null @@ -1,233 +0,0 @@ -dnl A placeholder for ISO C99 , for platforms that have issues. - -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Written by Eric Blake. - -# wchar_h.m4 serial 40 - -AC_DEFUN([gl_WCHAR_H], -[ - AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) - AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) - dnl Prepare for creating substitute . - dnl Check for (missing in Linux uClibc when built without wide - dnl character support). - dnl is always overridden, because of GNULIB_POSIXCHECK. - gl_CHECK_NEXT_HEADERS([wchar.h]) - if test $ac_cv_header_wchar_h = yes; then - HAVE_WCHAR_H=1 - else - HAVE_WCHAR_H=0 - fi - AC_SUBST([HAVE_WCHAR_H]) - - AC_REQUIRE([gl_FEATURES_H]) - - AC_REQUIRE([gt_TYPE_WINT_T]) - if test $gt_cv_c_wint_t = yes; then - HAVE_WINT_T=1 - else - HAVE_WINT_T=0 - fi - AC_SUBST([HAVE_WINT_T]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[ -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be - included before . */ -#if !(defined __GLIBC__ && !defined __UCLIBC__) -# include -# include -# include -#endif -#include - ]], - [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb - wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset - wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp - wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr - wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth - ]) -]) - -dnl Check whether is usable at all. -AC_DEFUN([gl_WCHAR_H_INLINE_OK], -[ - dnl Test whether suffers due to the transition from '__inline' to - dnl 'gnu_inline'. See - dnl and . In summary, - dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and - dnl the option -std=c99 or -std=gnu99, leads to a broken . - AC_CACHE_CHECK([whether uses 'inline' correctly], - [gl_cv_header_wchar_h_correct_inline], - [gl_cv_header_wchar_h_correct_inline=yes - AC_LANG_CONFTEST([ - AC_LANG_SOURCE([[#define wcstod renamed_wcstod -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be - included before . */ -#include -#include -#include -#include -extern int zero (void); -int main () { return zero(); } -]])]) - dnl Do not rename the object file from conftest.$ac_objext to - dnl conftest1.$ac_objext, as this will cause the link to fail on - dnl z/OS when using the XPLINK object format (due to duplicate - dnl CSECT names). Instead, temporarily redefine $ac_compile so - dnl that the object file has the latter name from the start. - save_ac_compile="$ac_compile" - ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` - if AC_TRY_EVAL([ac_compile]); then - AC_LANG_CONFTEST([ - AC_LANG_SOURCE([[#define wcstod renamed_wcstod -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be - included before . */ -#include -#include -#include -#include -int zero (void) { return 0; } -]])]) - dnl See note above about renaming object files. - ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` - if AC_TRY_EVAL([ac_compile]); then - if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then - : - else - gl_cv_header_wchar_h_correct_inline=no - fi - fi - fi - ac_compile="$save_ac_compile" - rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext - ]) - if test $gl_cv_header_wchar_h_correct_inline = no; then - AC_MSG_ERROR([ cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). -This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in -C99 mode. You have four options: - - Add the flag -fgnu89-inline to CC and reconfigure, or - - Fix your include files, using parts of - , or - - Use a gcc version older than 4.3, or - - Don't use the flags -std=c99 or -std=gnu99. -Configuration aborted.]) - fi -]) - -AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_WCHAR_H_DEFAULTS], -[ - GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC]) - GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB]) - GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT]) - GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC]) - GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN]) - GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS]) - GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS]) - GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB]) - GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS]) - GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS]) - GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH]) - GNULIB_WMEMCHR=0; AC_SUBST([GNULIB_WMEMCHR]) - GNULIB_WMEMCMP=0; AC_SUBST([GNULIB_WMEMCMP]) - GNULIB_WMEMCPY=0; AC_SUBST([GNULIB_WMEMCPY]) - GNULIB_WMEMMOVE=0; AC_SUBST([GNULIB_WMEMMOVE]) - GNULIB_WMEMSET=0; AC_SUBST([GNULIB_WMEMSET]) - GNULIB_WCSLEN=0; AC_SUBST([GNULIB_WCSLEN]) - GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN]) - GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY]) - GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY]) - GNULIB_WCSNCPY=0; AC_SUBST([GNULIB_WCSNCPY]) - GNULIB_WCPNCPY=0; AC_SUBST([GNULIB_WCPNCPY]) - GNULIB_WCSCAT=0; AC_SUBST([GNULIB_WCSCAT]) - GNULIB_WCSNCAT=0; AC_SUBST([GNULIB_WCSNCAT]) - GNULIB_WCSCMP=0; AC_SUBST([GNULIB_WCSCMP]) - GNULIB_WCSNCMP=0; AC_SUBST([GNULIB_WCSNCMP]) - GNULIB_WCSCASECMP=0; AC_SUBST([GNULIB_WCSCASECMP]) - GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP]) - GNULIB_WCSCOLL=0; AC_SUBST([GNULIB_WCSCOLL]) - GNULIB_WCSXFRM=0; AC_SUBST([GNULIB_WCSXFRM]) - GNULIB_WCSDUP=0; AC_SUBST([GNULIB_WCSDUP]) - GNULIB_WCSCHR=0; AC_SUBST([GNULIB_WCSCHR]) - GNULIB_WCSRCHR=0; AC_SUBST([GNULIB_WCSRCHR]) - GNULIB_WCSCSPN=0; AC_SUBST([GNULIB_WCSCSPN]) - GNULIB_WCSSPN=0; AC_SUBST([GNULIB_WCSSPN]) - GNULIB_WCSPBRK=0; AC_SUBST([GNULIB_WCSPBRK]) - GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR]) - GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK]) - GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) - HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) - HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) - HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) - HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) - HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) - HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) - HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) - HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) - HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR]) - HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP]) - HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY]) - HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE]) - HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET]) - HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN]) - HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) - HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY]) - HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY]) - HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY]) - HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY]) - HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT]) - HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT]) - HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP]) - HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP]) - HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP]) - HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP]) - HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL]) - HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM]) - HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP]) - HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR]) - HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR]) - HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN]) - HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN]) - HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK]) - HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR]) - HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK]) - HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH]) - HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) - HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) - REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) - REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) - REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) - REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) - REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) - REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) - REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) - REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS]) - REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) - REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) - REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) - REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) - REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH]) -]) diff --git a/gl/m4/wchar_t.m4 b/gl/m4/wchar_t.m4 deleted file mode 100644 index 2db8c3f2f6..0000000000 --- a/gl/m4/wchar_t.m4 +++ /dev/null @@ -1,24 +0,0 @@ -# wchar_t.m4 serial 4 (gettext-0.18.2) -dnl Copyright (C) 2002-2003, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Test whether has the 'wchar_t' type. -dnl Prerequisite: AC_PROG_CC - -AC_DEFUN([gt_TYPE_WCHAR_T], -[ - AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - wchar_t foo = (wchar_t)'\0';]], - [[]])], - [gt_cv_c_wchar_t=yes], - [gt_cv_c_wchar_t=no])]) - if test $gt_cv_c_wchar_t = yes; then - AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) - fi -]) diff --git a/gl/m4/wint_t.m4 b/gl/m4/wint_t.m4 deleted file mode 100644 index 8ff2a5b5a2..0000000000 --- a/gl/m4/wint_t.m4 +++ /dev/null @@ -1,32 +0,0 @@ -# wint_t.m4 serial 5 (gettext-0.18.2) -dnl Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Test whether has the 'wint_t' type. -dnl Prerequisite: AC_PROG_CC - -AC_DEFUN([gt_TYPE_WINT_T], -[ - AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be included - before . */ -#include -#include -#include -#include - wint_t foo = (wchar_t)'\0';]], - [[]])], - [gt_cv_c_wint_t=yes], - [gt_cv_c_wint_t=no])]) - if test $gt_cv_c_wint_t = yes; then - AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) - fi -]) diff --git a/gl/m4/xsize.m4 b/gl/m4/xsize.m4 deleted file mode 100644 index 16764e89dd..0000000000 --- a/gl/m4/xsize.m4 +++ /dev/null @@ -1,12 +0,0 @@ -# xsize.m4 serial 5 -dnl Copyright (C) 2003-2004, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_XSIZE], -[ - dnl Prerequisites of lib/xsize.h. - AC_REQUIRE([gl_SIZE_MAX]) - AC_CHECK_HEADERS([stdint.h]) -]) diff --git a/gl/malloc.c b/gl/malloc.c deleted file mode 100644 index ce1e6869d9..0000000000 --- a/gl/malloc.c +++ /dev/null @@ -1,56 +0,0 @@ -/* malloc() function that is glibc compatible. - - Copyright (C) 1997-1998, 2006-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* written by Jim Meyering and Bruno Haible */ - -#define _GL_USE_STDLIB_ALLOC 1 -#include -/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ -#ifdef malloc -# define NEED_MALLOC_GNU 1 -# undef malloc -/* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ -#elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU -# define NEED_MALLOC_GNU 1 -#endif - -#include - -#include - -/* Allocate an N-byte block of memory from the heap. - If N is zero, allocate a 1-byte block. */ - -void * -rpl_malloc (size_t n) -{ - void *result; - -#if NEED_MALLOC_GNU - if (n == 0) - n = 1; -#endif - - result = malloc (n); - -#if !HAVE_MALLOC_POSIX - if (result == NULL) - errno = ENOMEM; -#endif - - return result; -} diff --git a/gl/memchr.c b/gl/memchr.c deleted file mode 100644 index 4865cb8c77..0000000000 --- a/gl/memchr.c +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2016 - Free Software Foundation, Inc. - - Based on strlen implementation by Torbjorn Granlund (tege@sics.se), - with help from Dan Sahlin (dan@sics.se) and - commentary by Jim Blandy (jimb@ai.mit.edu); - adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), - and implemented by Roland McGrath (roland@ai.mit.edu). - -NOTE: The canonical source of this file is maintained with the GNU C Library. -Bugs can be reported to bug-glibc@prep.ai.mit.edu. - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU Lesser General Public License as published by the -Free Software Foundation; either version 2.1 of the License, or any -later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this program. If not, see . */ - -#ifndef _LIBC -# include -#endif - -#include - -#include - -#if defined _LIBC -# include -#else -# define reg_char char -#endif - -#include - -#if HAVE_BP_SYM_H || defined _LIBC -# include -#else -# define BP_SYM(sym) sym -#endif - -#undef __memchr -#ifdef _LIBC -# undef memchr -#endif - -#ifndef weak_alias -# define __memchr memchr -#endif - -/* Search no more than N bytes of S for C. */ -void * -__memchr (void const *s, int c_in, size_t n) -{ - /* On 32-bit hardware, choosing longword to be a 32-bit unsigned - long instead of a 64-bit uintmax_t tends to give better - performance. On 64-bit hardware, unsigned long is generally 64 - bits already. Change this typedef to experiment with - performance. */ - typedef unsigned long int longword; - - const unsigned char *char_ptr; - const longword *longword_ptr; - longword repeated_one; - longword repeated_c; - unsigned reg_char c; - - c = (unsigned char) c_in; - - /* Handle the first few bytes by reading one byte at a time. - Do this until CHAR_PTR is aligned on a longword boundary. */ - for (char_ptr = (const unsigned char *) s; - n > 0 && (size_t) char_ptr % sizeof (longword) != 0; - --n, ++char_ptr) - if (*char_ptr == c) - return (void *) char_ptr; - - longword_ptr = (const longword *) char_ptr; - - /* All these elucidatory comments refer to 4-byte longwords, - but the theory applies equally well to any size longwords. */ - - /* Compute auxiliary longword values: - repeated_one is a value which has a 1 in every byte. - repeated_c has c in every byte. */ - repeated_one = 0x01010101; - repeated_c = c | (c << 8); - repeated_c |= repeated_c << 16; - if (0xffffffffU < (longword) -1) - { - repeated_one |= repeated_one << 31 << 1; - repeated_c |= repeated_c << 31 << 1; - if (8 < sizeof (longword)) - { - size_t i; - - for (i = 64; i < sizeof (longword) * 8; i *= 2) - { - repeated_one |= repeated_one << i; - repeated_c |= repeated_c << i; - } - } - } - - /* Instead of the traditional loop which tests each byte, we will test a - longword at a time. The tricky part is testing if *any of the four* - bytes in the longword in question are equal to c. We first use an xor - with repeated_c. This reduces the task to testing whether *any of the - four* bytes in longword1 is zero. - - We compute tmp = - ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). - That is, we perform the following operations: - 1. Subtract repeated_one. - 2. & ~longword1. - 3. & a mask consisting of 0x80 in every byte. - Consider what happens in each byte: - - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, - and step 3 transforms it into 0x80. A carry can also be propagated - to more significant bytes. - - If a byte of longword1 is nonzero, let its lowest 1 bit be at - position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, - the byte ends in a single bit of value 0 and k bits of value 1. - After step 2, the result is just k bits of value 1: 2^k - 1. After - step 3, the result is 0. And no carry is produced. - So, if longword1 has only non-zero bytes, tmp is zero. - Whereas if longword1 has a zero byte, call j the position of the least - significant zero byte. Then the result has a zero at positions 0, ..., - j-1 and a 0x80 at position j. We cannot predict the result at the more - significant bytes (positions j+1..3), but it does not matter since we - already have a non-zero bit at position 8*j+7. - - So, the test whether any byte in longword1 is zero is equivalent to - testing whether tmp is nonzero. */ - - while (n >= sizeof (longword)) - { - longword longword1 = *longword_ptr ^ repeated_c; - - if ((((longword1 - repeated_one) & ~longword1) - & (repeated_one << 7)) != 0) - break; - longword_ptr++; - n -= sizeof (longword); - } - - char_ptr = (const unsigned char *) longword_ptr; - - /* At this point, we know that either n < sizeof (longword), or one of the - sizeof (longword) bytes starting at char_ptr is == c. On little-endian - machines, we could determine the first such byte without any further - memory accesses, just by looking at the tmp result from the last loop - iteration. But this does not work on big-endian machines. Choose code - that works in both cases. */ - - for (; n > 0; --n, ++char_ptr) - { - if (*char_ptr == c) - return (void *) char_ptr; - } - - return NULL; -} -#ifdef weak_alias -weak_alias (__memchr, BP_SYM (memchr)) -#endif diff --git a/gl/memchr.valgrind b/gl/memchr.valgrind deleted file mode 100644 index 60f247e10d..0000000000 --- a/gl/memchr.valgrind +++ /dev/null @@ -1,14 +0,0 @@ -# Suppress a valgrind message about use of uninitialized memory in memchr(). -# POSIX states that when the character is found, memchr must not read extra -# bytes in an overestimated length (for example, where memchr is used to -# implement strnlen). However, we use a safe word read to provide a speedup. -{ - memchr-value4 - Memcheck:Value4 - fun:rpl_memchr -} -{ - memchr-value8 - Memcheck:Value8 - fun:rpl_memchr -} diff --git a/gl/memmem.c b/gl/memmem.c deleted file mode 100644 index 407af7e317..0000000000 --- a/gl/memmem.c +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright (C) 1991-1994, 1996-1998, 2000, 2004, 2007-2016 Free Software - Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -/* This particular implementation was written by Eric Blake, 2008. */ - -#ifndef _LIBC -# include -#endif - -/* Specification of memmem. */ -#include - -#ifndef _LIBC -# define __builtin_expect(expr, val) (expr) -#endif - -#define RETURN_TYPE void * -#define AVAILABLE(h, h_l, j, n_l) ((j) <= (h_l) - (n_l)) -#include "str-two-way.h" - -/* Return the first occurrence of NEEDLE in HAYSTACK. Return HAYSTACK - if NEEDLE_LEN is 0, otherwise NULL if NEEDLE is not found in - HAYSTACK. */ -void * -memmem (const void *haystack_start, size_t haystack_len, - const void *needle_start, size_t needle_len) -{ - /* Abstract memory is considered to be an array of 'unsigned char' values, - not an array of 'char' values. See ISO C 99 section 6.2.6.1. */ - const unsigned char *haystack = (const unsigned char *) haystack_start; - const unsigned char *needle = (const unsigned char *) needle_start; - - if (needle_len == 0) - /* The first occurrence of the empty string is deemed to occur at - the beginning of the string. */ - return (void *) haystack; - - /* Sanity check, otherwise the loop might search through the whole - memory. */ - if (__builtin_expect (haystack_len < needle_len, 0)) - return NULL; - - /* Use optimizations in memchr when possible, to reduce the search - size of haystack using a linear algorithm with a smaller - coefficient. However, avoid memchr for long needles, since we - can often achieve sublinear performance. */ - if (needle_len < LONG_NEEDLE_THRESHOLD) - { - haystack = memchr (haystack, *needle, haystack_len); - if (!haystack || __builtin_expect (needle_len == 1, 0)) - return (void *) haystack; - haystack_len -= haystack - (const unsigned char *) haystack_start; - if (haystack_len < needle_len) - return NULL; - return two_way_short_needle (haystack, haystack_len, needle, needle_len); - } - else - return two_way_long_needle (haystack, haystack_len, needle, needle_len); -} - -#undef LONG_NEEDLE_THRESHOLD diff --git a/gl/minmax.h b/gl/minmax.h deleted file mode 100644 index 971bd38a34..0000000000 --- a/gl/minmax.h +++ /dev/null @@ -1,60 +0,0 @@ -/* MIN, MAX macros. - Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef _MINMAX_H -#define _MINMAX_H - -/* Note: MIN, MAX are also defined in on some systems - (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about - MIN, MAX macro redefinitions on some systems; the workaround is to - #include this file as the last one among the #include list. */ - -/* Before we define the following symbols we get the file - since otherwise we get redefinitions on some systems if is - included after this file. Likewise for . - If more than one of these system headers define MIN and MAX, pick just - one of the headers (because the definitions most likely are the same). */ -#if HAVE_MINMAX_IN_LIMITS_H -# include -#elif HAVE_MINMAX_IN_SYS_PARAM_H -# include -#endif - -/* Note: MIN and MAX should be used with two arguments of the - same type. They might not return the minimum and maximum of their two - arguments, if the arguments have different types or have unusual - floating-point values. For example, on a typical host with 32-bit 'int', - 64-bit 'long long', and 64-bit IEEE 754 'double' types: - - MAX (-1, 2147483648) returns 4294967295. - MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. - MAX (NaN, 0.0) returns 0.0. - MAX (+0.0, -0.0) returns -0.0. - - and in each case the answer is in some sense bogus. */ - -/* MAX(a,b) returns the maximum of A and B. */ -#ifndef MAX -# define MAX(a,b) ((a) > (b) ? (a) : (b)) -#endif - -/* MIN(a,b) returns the minimum of A and B. */ -#ifndef MIN -# define MIN(a,b) ((a) < (b) ? (a) : (b)) -#endif - -#endif /* _MINMAX_H */ diff --git a/gl/msvc-inval.c b/gl/msvc-inval.c deleted file mode 100644 index add72b0ca5..0000000000 --- a/gl/msvc-inval.c +++ /dev/null @@ -1,129 +0,0 @@ -/* Invalid parameter handler for MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#include "msvc-inval.h" - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ - && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) - -/* Get _invalid_parameter_handler type and _set_invalid_parameter_handler - declaration. */ -# include - -# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING - -static void __cdecl -gl_msvc_invalid_parameter_handler (const wchar_t *expression, - const wchar_t *function, - const wchar_t *file, - unsigned int line, - uintptr_t dummy) -{ -} - -# else - -/* Get declarations of the native Windows API functions. */ -# define WIN32_LEAN_AND_MEAN -# include - -# if defined _MSC_VER - -static void __cdecl -gl_msvc_invalid_parameter_handler (const wchar_t *expression, - const wchar_t *function, - const wchar_t *file, - unsigned int line, - uintptr_t dummy) -{ - RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); -} - -# else - -/* An index to thread-local storage. */ -static DWORD tls_index; -static int tls_initialized /* = 0 */; - -/* Used as a fallback only. */ -static struct gl_msvc_inval_per_thread not_per_thread; - -struct gl_msvc_inval_per_thread * -gl_msvc_inval_current (void) -{ - if (!tls_initialized) - { - tls_index = TlsAlloc (); - tls_initialized = 1; - } - if (tls_index == TLS_OUT_OF_INDEXES) - /* TlsAlloc had failed. */ - return ¬_per_thread; - else - { - struct gl_msvc_inval_per_thread *pointer = - (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); - if (pointer == NULL) - { - /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ - pointer = - (struct gl_msvc_inval_per_thread *) - malloc (sizeof (struct gl_msvc_inval_per_thread)); - if (pointer == NULL) - /* Could not allocate memory. Use the global storage. */ - pointer = ¬_per_thread; - TlsSetValue (tls_index, pointer); - } - return pointer; - } -} - -static void __cdecl -gl_msvc_invalid_parameter_handler (const wchar_t *expression, - const wchar_t *function, - const wchar_t *file, - unsigned int line, - uintptr_t dummy) -{ - struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); - if (current->restart_valid) - longjmp (current->restart, 1); - else - /* An invalid parameter notification from outside the gnulib code. - Give the caller a chance to intervene. */ - RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); -} - -# endif - -# endif - -static int gl_msvc_inval_initialized /* = 0 */; - -void -gl_msvc_inval_ensure_handler (void) -{ - if (gl_msvc_inval_initialized == 0) - { - _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); - gl_msvc_inval_initialized = 1; - } -} - -#endif diff --git a/gl/msvc-inval.h b/gl/msvc-inval.h deleted file mode 100644 index e2bc97787b..0000000000 --- a/gl/msvc-inval.h +++ /dev/null @@ -1,222 +0,0 @@ -/* Invalid parameter handler for MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#ifndef _MSVC_INVAL_H -#define _MSVC_INVAL_H - -/* With MSVC runtime libraries with the "invalid parameter handler" concept, - functions like fprintf(), dup2(), or close() crash when the caller passes - an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) - instead. - This file defines macros that turn such an invalid parameter notification - into a non-local exit. An error code can then be produced at the target - of this exit. You can thus write code like - - TRY_MSVC_INVAL - { - - } - CATCH_MSVC_INVAL - { - - } - DONE_MSVC_INVAL; - - This entire block expands to a single statement. - - The handling of invalid parameters can be done in three ways: - - * The default way, which is reasonable for programs (not libraries): - AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) - - * The way for libraries that make "hairy" calls (like close(-1), or - fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): - AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) - - * The way for libraries that make no "hairy" calls: - AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) - */ - -#define DEFAULT_HANDLING 0 -#define HAIRY_LIBRARY_HANDLING 1 -#define SANE_LIBRARY_HANDLING 2 - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ - && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) -/* A native Windows platform with the "invalid parameter handler" concept, - and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ - -# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING -/* Default handling. */ - -# ifdef __cplusplus -extern "C" { -# endif - -/* Ensure that the invalid parameter handler in installed that just returns. - Because we assume no other part of the program installs a different - invalid parameter handler, this solution is multithread-safe. */ -extern void gl_msvc_inval_ensure_handler (void); - -# ifdef __cplusplus -} -# endif - -# define TRY_MSVC_INVAL \ - do \ - { \ - gl_msvc_inval_ensure_handler (); \ - if (1) -# define CATCH_MSVC_INVAL \ - else -# define DONE_MSVC_INVAL \ - } \ - while (0) - -# else -/* Handling for hairy libraries. */ - -# include - -/* Gnulib can define its own status codes, as described in the page - "Raising Software Exceptions" on microsoft.com - . - Our status codes are composed of - - 0xE0000000, mandatory for all user-defined status codes, - - 0x474E550, a API identifier ("GNU"), - - 0, 1, 2, ..., used to distinguish different status codes from the - same API. */ -# define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) - -# if defined _MSC_VER -/* A compiler that supports __try/__except, as described in the page - "try-except statement" on microsoft.com - . - With __try/__except, we can use the multithread-safe exception handling. */ - -# ifdef __cplusplus -extern "C" { -# endif - -/* Ensure that the invalid parameter handler in installed that raises a - software exception with code STATUS_GNULIB_INVALID_PARAMETER. - Because we assume no other part of the program installs a different - invalid parameter handler, this solution is multithread-safe. */ -extern void gl_msvc_inval_ensure_handler (void); - -# ifdef __cplusplus -} -# endif - -# define TRY_MSVC_INVAL \ - do \ - { \ - gl_msvc_inval_ensure_handler (); \ - __try -# define CATCH_MSVC_INVAL \ - __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ - ? EXCEPTION_EXECUTE_HANDLER \ - : EXCEPTION_CONTINUE_SEARCH) -# define DONE_MSVC_INVAL \ - } \ - while (0) - -# else -/* Any compiler. - We can only use setjmp/longjmp. */ - -# include - -# ifdef __cplusplus -extern "C" { -# endif - -struct gl_msvc_inval_per_thread -{ - /* The restart that will resume execution at the code between - CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between - TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ - jmp_buf restart; - - /* Tells whether the contents of restart is valid. */ - int restart_valid; -}; - -/* Ensure that the invalid parameter handler in installed that passes - control to the gl_msvc_inval_restart if it is valid, or raises a - software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. - Because we assume no other part of the program installs a different - invalid parameter handler, this solution is multithread-safe. */ -extern void gl_msvc_inval_ensure_handler (void); - -/* Return a pointer to the per-thread data for the current thread. */ -extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); - -# ifdef __cplusplus -} -# endif - -# define TRY_MSVC_INVAL \ - do \ - { \ - struct gl_msvc_inval_per_thread *msvc_inval_current; \ - gl_msvc_inval_ensure_handler (); \ - msvc_inval_current = gl_msvc_inval_current (); \ - /* First, initialize gl_msvc_inval_restart. */ \ - if (setjmp (msvc_inval_current->restart) == 0) \ - { \ - /* Then, mark it as valid. */ \ - msvc_inval_current->restart_valid = 1; -# define CATCH_MSVC_INVAL \ - /* Execution completed. \ - Mark gl_msvc_inval_restart as invalid. */ \ - msvc_inval_current->restart_valid = 0; \ - } \ - else \ - { \ - /* Execution triggered an invalid parameter notification. \ - Mark gl_msvc_inval_restart as invalid. */ \ - msvc_inval_current->restart_valid = 0; -# define DONE_MSVC_INVAL \ - } \ - } \ - while (0) - -# endif - -# endif - -#else -/* A platform that does not need to the invalid parameter handler, - or when SANE_LIBRARY_HANDLING is desired. */ - -/* The braces here avoid GCC warnings like - "warning: suggest explicit braces to avoid ambiguous 'else'". */ -# define TRY_MSVC_INVAL \ - do \ - { \ - if (1) -# define CATCH_MSVC_INVAL \ - else -# define DONE_MSVC_INVAL \ - } \ - while (0) - -#endif - -#endif /* _MSVC_INVAL_H */ diff --git a/gl/msvc-nothrow.c b/gl/msvc-nothrow.c deleted file mode 100644 index d36b1e0b93..0000000000 --- a/gl/msvc-nothrow.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Wrappers that don't throw invalid parameter notifications - with MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#include "msvc-nothrow.h" - -/* Get declarations of the native Windows API functions. */ -#define WIN32_LEAN_AND_MEAN -#include - -#include "msvc-inval.h" - -#undef _get_osfhandle - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER -intptr_t -_gl_nothrow_get_osfhandle (int fd) -{ - intptr_t result; - - TRY_MSVC_INVAL - { - result = _get_osfhandle (fd); - } - CATCH_MSVC_INVAL - { - result = (intptr_t) INVALID_HANDLE_VALUE; - } - DONE_MSVC_INVAL; - - return result; -} -#endif diff --git a/gl/msvc-nothrow.h b/gl/msvc-nothrow.h deleted file mode 100644 index 7dc914b0c3..0000000000 --- a/gl/msvc-nothrow.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Wrappers that don't throw invalid parameter notifications - with MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#ifndef _MSVC_NOTHROW_H -#define _MSVC_NOTHROW_H - -/* With MSVC runtime libraries with the "invalid parameter handler" concept, - functions like fprintf(), dup2(), or close() crash when the caller passes - an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) - instead. - This file defines wrappers that turn such an invalid parameter notification - into an error code. */ - -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - -/* Get original declaration of _get_osfhandle. */ -# include - -# if HAVE_MSVC_INVALID_PARAMETER_HANDLER - -/* Override _get_osfhandle. */ -extern intptr_t _gl_nothrow_get_osfhandle (int fd); -# define _get_osfhandle _gl_nothrow_get_osfhandle - -# endif - -#endif - -#endif /* _MSVC_NOTHROW_H */ diff --git a/gl/netdb.in.h b/gl/netdb.in.h deleted file mode 100644 index 055925928e..0000000000 --- a/gl/netdb.in.h +++ /dev/null @@ -1,265 +0,0 @@ -/* Provide a netdb.h header file for systems lacking it (read: MinGW). - Copyright (C) 2008-2016 Free Software Foundation, Inc. - Written by Simon Josefsson. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* This file is supposed to be used on platforms that lack . - It is intended to provide definitions and prototypes needed by an - application. */ - -#ifndef _@GUARD_PREFIX@_NETDB_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if @HAVE_NETDB_H@ - -/* The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_NETDB_H@ - -#endif - -#ifndef _@GUARD_PREFIX@_NETDB_H -#define _@GUARD_PREFIX@_NETDB_H - -/* Get definitions such as 'socklen_t' on IRIX 6.5 and OSF/1 4.0 and - 'struct hostent' on MinGW. */ -#include - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -/* Declarations for a platform that lacks , or where it is - incomplete. */ - -#if @GNULIB_GETADDRINFO@ - -# if !@HAVE_STRUCT_ADDRINFO@ - -# ifdef __cplusplus -extern "C" { -# endif - -# if !GNULIB_defined_struct_addrinfo -/* Structure to contain information about address of a service provider. */ -struct addrinfo -{ - int ai_flags; /* Input flags. */ - int ai_family; /* Protocol family for socket. */ - int ai_socktype; /* Socket type. */ - int ai_protocol; /* Protocol for socket. */ - socklen_t ai_addrlen; /* Length of socket address. */ - struct sockaddr *ai_addr; /* Socket address for socket. */ - char *ai_canonname; /* Canonical name for service location. */ - struct addrinfo *ai_next; /* Pointer to next in list. */ -}; -# define GNULIB_defined_struct_addrinfo 1 -# endif - -# ifdef __cplusplus -} -# endif - -# endif - -/* Possible values for 'ai_flags' field in 'addrinfo' structure. */ -# ifndef AI_PASSIVE -# define AI_PASSIVE 0x0001 /* Socket address is intended for 'bind'. */ -# endif -# ifndef AI_CANONNAME -# define AI_CANONNAME 0x0002 /* Request for canonical name. */ -# endif -# ifndef AI_NUMERICSERV -# define AI_NUMERICSERV 0x0400 /* Don't use name resolution. */ -# endif - -# if 0 -# define AI_NUMERICHOST 0x0004 /* Don't use name resolution. */ -# endif - -/* These symbolic constants are required to be present by POSIX, but - our getaddrinfo replacement doesn't use them (yet). Setting them - to 0 on systems that doesn't have them avoids causing problems for - system getaddrinfo implementations that would be confused by - unknown values. */ -# ifndef AI_V4MAPPED -# define AI_V4MAPPED 0 /* 0x0008: IPv4 mapped addresses are acceptable. */ -# endif -# ifndef AI_ALL -# define AI_ALL 0 /* 0x0010: Return IPv4 mapped and IPv6 addresses. */ -# endif -# ifndef AI_ADDRCONFIG -# define AI_ADDRCONFIG 0 /* 0x0020: Use configuration of this host to choose - returned address type. */ -# endif - -/* Error values for 'getaddrinfo' function. */ -# ifndef EAI_BADFLAGS -# define EAI_BADFLAGS -1 /* Invalid value for 'ai_flags' field. */ -# define EAI_NONAME -2 /* NAME or SERVICE is unknown. */ -# define EAI_AGAIN -3 /* Temporary failure in name resolution. */ -# define EAI_FAIL -4 /* Non-recoverable failure in name res. */ -# define EAI_NODATA -5 /* No address associated with NAME. */ -# define EAI_FAMILY -6 /* 'ai_family' not supported. */ -# define EAI_SOCKTYPE -7 /* 'ai_socktype' not supported. */ -# define EAI_SERVICE -8 /* SERVICE not supported for 'ai_socktype'. */ -# define EAI_MEMORY -10 /* Memory allocation failure. */ -# endif - -/* Since EAI_NODATA is deprecated by RFC3493, some systems (at least - FreeBSD, which does define EAI_BADFLAGS) have removed the definition - in favor of EAI_NONAME. */ -# if !defined EAI_NODATA && defined EAI_NONAME -# define EAI_NODATA EAI_NONAME -# endif - -# ifndef EAI_OVERFLOW -/* Not defined on mingw32 and Haiku. */ -# define EAI_OVERFLOW -12 /* Argument buffer overflow. */ -# endif -# ifndef EAI_ADDRFAMILY -/* Not defined on mingw32. */ -# define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */ -# endif -# ifndef EAI_SYSTEM -/* Not defined on mingw32. */ -# define EAI_SYSTEM -11 /* System error returned in 'errno'. */ -# endif - -# if 0 -/* The commented out definitions below are not yet implemented in the - GNULIB getaddrinfo() replacement, so are not yet needed. - - If they are restored, be sure to protect the definitions with #ifndef. */ -# ifndef EAI_INPROGRESS -# define EAI_INPROGRESS -100 /* Processing request in progress. */ -# define EAI_CANCELED -101 /* Request canceled. */ -# define EAI_NOTCANCELED -102 /* Request not canceled. */ -# define EAI_ALLDONE -103 /* All requests done. */ -# define EAI_INTR -104 /* Interrupted by a signal. */ -# define EAI_IDN_ENCODE -105 /* IDN encoding failed. */ -# endif -# endif - -# if !@HAVE_DECL_GETADDRINFO@ -/* Translate name of a service location and/or a service name to set of - socket addresses. - For more details, see the POSIX:2001 specification - . */ -_GL_FUNCDECL_SYS (getaddrinfo, int, - (const char *restrict nodename, - const char *restrict servname, - const struct addrinfo *restrict hints, - struct addrinfo **restrict res) - _GL_ARG_NONNULL ((4))); -# endif -_GL_CXXALIAS_SYS (getaddrinfo, int, - (const char *restrict nodename, - const char *restrict servname, - const struct addrinfo *restrict hints, - struct addrinfo **restrict res)); -_GL_CXXALIASWARN (getaddrinfo); - -# if !@HAVE_DECL_FREEADDRINFO@ -/* Free 'addrinfo' structure AI including associated storage. - For more details, see the POSIX:2001 specification - . */ -_GL_FUNCDECL_SYS (freeaddrinfo, void, (struct addrinfo *ai) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (freeaddrinfo, void, (struct addrinfo *ai)); -_GL_CXXALIASWARN (freeaddrinfo); - -# if @REPLACE_GAI_STRERROR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gai_strerror -# define gai_strerror rpl_gai_strerror -# endif -_GL_FUNCDECL_RPL (gai_strerror, const char *, (int ecode)); -_GL_CXXALIAS_RPL (gai_strerror, const char *, (int ecode)); -# else -# if !@HAVE_DECL_GAI_STRERROR@ -/* Convert error return from getaddrinfo() to a string. - For more details, see the POSIX:2001 specification - . */ -_GL_FUNCDECL_SYS (gai_strerror, const char *, (int ecode)); -# endif -_GL_CXXALIAS_SYS (gai_strerror, const char *, (int ecode)); -# endif -_GL_CXXALIASWARN (gai_strerror); - -# if !@HAVE_DECL_GETNAMEINFO@ -/* Convert socket address to printable node and service names. - For more details, see the POSIX:2001 specification - . */ -_GL_FUNCDECL_SYS (getnameinfo, int, - (const struct sockaddr *restrict sa, socklen_t salen, - char *restrict node, socklen_t nodelen, - char *restrict service, socklen_t servicelen, - int flags) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on glibc systems, the seventh parameter is - unsigned int flags. */ -_GL_CXXALIAS_SYS_CAST (getnameinfo, int, - (const struct sockaddr *restrict sa, socklen_t salen, - char *restrict node, socklen_t nodelen, - char *restrict service, socklen_t servicelen, - int flags)); -_GL_CXXALIASWARN (getnameinfo); - -/* Possible flags for getnameinfo. */ -# ifndef NI_NUMERICHOST -# define NI_NUMERICHOST 1 -# endif -# ifndef NI_NUMERICSERV -# define NI_NUMERICSERV 2 -# endif - -#elif defined GNULIB_POSIXCHECK - -# undef getaddrinfo -# if HAVE_RAW_DECL_GETADDRINFO -_GL_WARN_ON_USE (getaddrinfo, "getaddrinfo is unportable - " - "use gnulib module getaddrinfo for portability"); -# endif - -# undef freeaddrinfo -# if HAVE_RAW_DECL_FREEADDRINFO -_GL_WARN_ON_USE (freeaddrinfo, "freeaddrinfo is unportable - " - "use gnulib module getaddrinfo for portability"); -# endif - -# undef gai_strerror -# if HAVE_RAW_DECL_GAI_STRERROR -_GL_WARN_ON_USE (gai_strerror, "gai_strerror is unportable - " - "use gnulib module getaddrinfo for portability"); -# endif - -# undef getnameinfo -# if HAVE_RAW_DECL_GETNAMEINFO -_GL_WARN_ON_USE (getnameinfo, "getnameinfo is unportable - " - "use gnulib module getaddrinfo for portability"); -# endif - -#endif - -#endif /* _@GUARD_PREFIX@_NETDB_H */ -#endif /* _@GUARD_PREFIX@_NETDB_H */ diff --git a/gl/netinet_in.in.h b/gl/netinet_in.in.h deleted file mode 100644 index 4411af3cf8..0000000000 --- a/gl/netinet_in.in.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Substitute for . - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_NETINET_IN_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if @HAVE_NETINET_IN_H@ - -/* On many platforms, assumes prior inclusion of - . */ -# include - -/* The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_NETINET_IN_H@ - -#endif - -#ifndef _@GUARD_PREFIX@_NETINET_IN_H -#define _@GUARD_PREFIX@_NETINET_IN_H - -#if !@HAVE_NETINET_IN_H@ - -/* A platform that lacks . */ - -# include - -#endif - -#endif /* _@GUARD_PREFIX@_NETINET_IN_H */ -#endif /* _@GUARD_PREFIX@_NETINET_IN_H */ diff --git a/gl/override/m4/valgrind-tests.m4.diff b/gl/override/m4/valgrind-tests.m4.diff index bfc912dc1e..4e31532e75 100644 --- a/gl/override/m4/valgrind-tests.m4.diff +++ b/gl/override/m4/valgrind-tests.m4.diff @@ -1,20 +1,24 @@ ---- valgrind-tests.m4.orig -+++ valgrind-tests.m4 -@@ -14,7 +14,7 @@ AC_DEFUN([gl_VALGRIND_TESTS], - AC_ARG_ENABLE(valgrind-tests, - AS_HELP_STRING([--disable-valgrind-tests], - [don't try to run self tests under valgrind]), +--- valgrind-tests.m4 2018-05-25 10:11:51.767309109 +0200 ++++ valgrind-tests.m4.gnutls 2018-05-25 10:20:02.999088040 +0200 +@@ -12,9 +12,9 @@ + AC_DEFUN([gl_VALGRIND_TESTS], + [ + AC_ARG_ENABLE([valgrind-tests], +- AS_HELP_STRING([--disable-valgrind-tests], +- [don't try to run self tests under valgrind]), - [opt_valgrind_tests=$enableval], [opt_valgrind_tests=yes]) ++ AS_HELP_STRING([--enable-valgrind-tests], ++ [try to run self tests under valgrind]), + [opt_valgrind_tests=$enableval], [opt_valgrind_tests=no]) # Run self-tests under valgrind? if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then -@@ -26,7 +26,7 @@ AC_DEFUN([gl_VALGRIND_TESTS], - if test -n "$VALGRIND" \ - && $VALGRIND $OPTS $SHELL -c 'exit 0' > /dev/null 2>&1; then - opt_valgrind_tests=yes -- VALGRIND="$VALGRIND $OPTS" -+ VALGRIND="$VALGRIND $OPTS --suppressions=\$(srcdir)/suppressions.valgrind" - else - opt_valgrind_tests=no - VALGRIND= +@@ -23,7 +23,7 @@ + if test "$VALGRIND"; then + AC_CACHE_CHECK([for valgrind options for tests], + [gl_cv_opt_valgrind_tests], +- [gl_cv_opt_valgrind_tests="-q --error-exitcode=1 --leak-check=full" ++ [gl_cv_opt_valgrind_tests="-q --error-exitcode=1 --leak-check=full --track-origins=yes --gen-suppressions=all --suppressions=\$(srcdir)/suppressions.valgrind" + $VALGRIND $gl_valgrind_opts ls > /dev/null 2>&1 || + gl_cv_opt_valgrind_tests=no]) + diff --git a/gl/override/tests/test-float.c.diff b/gl/override/tests/test-float.c.diff deleted file mode 100644 index c2e3d6ba1a..0000000000 --- a/gl/override/tests/test-float.c.diff +++ /dev/null @@ -1,24 +0,0 @@ ---- gl/tests/test-float.c.orig -+++ gl/tests/test-float.c -@@ -23,11 +23,11 @@ - #include "fpucw.h" - #include "macros.h" - -+#if 0 -+ - /* Check that FLT_RADIX is a constant expression. */ - int a[] = { FLT_RADIX }; - --#if FLT_RADIX == 2 -- - /* Return 2^n. */ - static float - pow2f (int n) -@@ -377,7 +377,6 @@ main () - int - main () - { -- fprintf (stderr, "Skipping test: FLT_RADIX is not 2.\n"); - return 77; - } - diff --git a/gl/override/tests/test-lseek.c.diff b/gl/override/tests/test-lseek.c.diff deleted file mode 100644 index 1531b1d170..0000000000 --- a/gl/override/tests/test-lseek.c.diff +++ /dev/null @@ -1,15 +0,0 @@ ---- gl/tests/test-lseek.c.orig 2008-12-10 16:49:14.000000000 +0100 -+++ gl/tests/test-lseek.c 2008-12-10 16:50:14.000000000 +0100 -@@ -85,9 +85,9 @@ - - case '2': /* closed */ - /* Explicitly close file descriptors 0 and 1. The <&- and >&- in the -- invoking shell are not enough on HP-UX. */ -- close (0); -- close (1); -+ invoking shell are not enough on HP-UX. -+ close (0); calling close fails on mingw -- simon@josefsson.org -+ close (1); */ - errno = 0; - ASSERT (lseek (0, (off_t)0, SEEK_CUR) == -1); - ASSERT (errno == EBADF); diff --git a/gl/override/tests/test-lseek.sh.diff b/gl/override/tests/test-lseek.sh.diff deleted file mode 100644 index 842518f631..0000000000 --- a/gl/override/tests/test-lseek.sh.diff +++ /dev/null @@ -1,12 +0,0 @@ ---- gl/tests/test-lseek.sh.orig 2008-12-10 16:55:34.000000000 +0100 -+++ gl/tests/test-lseek.sh 2008-12-10 16:55:36.000000000 +0100 -@@ -11,7 +11,8 @@ - echo hi | ./test-lseek${EXEEXT} 1 | cat || exit 1 - - # closed descriptors --./test-lseek${EXEEXT} 2 <&- >&- || exit 1 -+# Doesn't work under mingw -- simon@josefsson.org -+#./test-lseek${EXEEXT} 2 <&- >&- || exit 1 - - rm -rf $tmpfiles - exit 0 diff --git a/gl/override/tests/test-select-in.sh.diff b/gl/override/tests/test-select-in.sh.diff deleted file mode 100644 index 460e500222..0000000000 --- a/gl/override/tests/test-select-in.sh.diff +++ /dev/null @@ -1,16 +0,0 @@ ---- gl/tests/test-select-in.sh.orig 2008-12-10 16:47:26.000000000 +0100 -+++ gl/tests/test-select-in.sh 2008-12-10 16:48:52.000000000 +0100 -@@ -24,9 +24,10 @@ - - # Special files. - --rm -f t-select-in.tmp --./test-select-fd${EXEEXT} r 0 t-select-in.tmp < /dev/null --test `cat t-select-in.tmp` = "1" || exit 1 -+# Doesn't work under mingw -- simon@josefsson.org -+#rm -f t-select-in.tmp -+#./test-select-fd${EXEEXT} r 0 t-select-in.tmp < /dev/null -+#test `cat t-select-in.tmp` = "1" || exit 1 - - rm -fr $tmpfiles - diff --git a/gl/printf-args.c b/gl/printf-args.c deleted file mode 100644 index aabe48349c..0000000000 --- a/gl/printf-args.c +++ /dev/null @@ -1,187 +0,0 @@ -/* Decomposed printf argument list. - Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -/* This file can be parametrized with the following macros: - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. - PRINTF_FETCHARGS Name of the function to be defined. - STATIC Set to 'static' to declare the function static. */ - -#ifndef PRINTF_FETCHARGS -# include -#endif - -/* Specification. */ -#ifndef PRINTF_FETCHARGS -# include "printf-args.h" -#endif - -#ifdef STATIC -STATIC -#endif -int -PRINTF_FETCHARGS (va_list args, arguments *a) -{ - size_t i; - argument *ap; - - for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) - switch (ap->type) - { - case TYPE_SCHAR: - ap->a.a_schar = va_arg (args, /*signed char*/ int); - break; - case TYPE_UCHAR: - ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); - break; - case TYPE_SHORT: - ap->a.a_short = va_arg (args, /*short*/ int); - break; - case TYPE_USHORT: - ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); - break; - case TYPE_INT: - ap->a.a_int = va_arg (args, int); - break; - case TYPE_UINT: - ap->a.a_uint = va_arg (args, unsigned int); - break; - case TYPE_LONGINT: - ap->a.a_longint = va_arg (args, long int); - break; - case TYPE_ULONGINT: - ap->a.a_ulongint = va_arg (args, unsigned long int); - break; -#if HAVE_LONG_LONG_INT - case TYPE_LONGLONGINT: - ap->a.a_longlongint = va_arg (args, long long int); - break; - case TYPE_ULONGLONGINT: - ap->a.a_ulonglongint = va_arg (args, unsigned long long int); - break; -#endif - case TYPE_DOUBLE: - ap->a.a_double = va_arg (args, double); - break; - case TYPE_LONGDOUBLE: - ap->a.a_longdouble = va_arg (args, long double); - break; - case TYPE_CHAR: - ap->a.a_char = va_arg (args, int); - break; -#if HAVE_WINT_T - case TYPE_WIDE_CHAR: - /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by - default argument promotions", this is not the case in mingw32, - where wint_t is 'unsigned short'. */ - ap->a.a_wide_char = - (sizeof (wint_t) < sizeof (int) - ? (wint_t) va_arg (args, int) - : va_arg (args, wint_t)); - break; -#endif - case TYPE_STRING: - ap->a.a_string = va_arg (args, const char *); - /* A null pointer is an invalid argument for "%s", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_string == NULL) - ap->a.a_string = "(NULL)"; - break; -#if HAVE_WCHAR_T - case TYPE_WIDE_STRING: - ap->a.a_wide_string = va_arg (args, const wchar_t *); - /* A null pointer is an invalid argument for "%ls", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_wide_string == NULL) - { - static const wchar_t wide_null_string[] = - { - (wchar_t)'(', - (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', - (wchar_t)')', - (wchar_t)0 - }; - ap->a.a_wide_string = wide_null_string; - } - break; -#endif - case TYPE_POINTER: - ap->a.a_pointer = va_arg (args, void *); - break; - case TYPE_COUNT_SCHAR_POINTER: - ap->a.a_count_schar_pointer = va_arg (args, signed char *); - break; - case TYPE_COUNT_SHORT_POINTER: - ap->a.a_count_short_pointer = va_arg (args, short *); - break; - case TYPE_COUNT_INT_POINTER: - ap->a.a_count_int_pointer = va_arg (args, int *); - break; - case TYPE_COUNT_LONGINT_POINTER: - ap->a.a_count_longint_pointer = va_arg (args, long int *); - break; -#if HAVE_LONG_LONG_INT - case TYPE_COUNT_LONGLONGINT_POINTER: - ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); - break; -#endif -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - case TYPE_U8_STRING: - ap->a.a_u8_string = va_arg (args, const uint8_t *); - /* A null pointer is an invalid argument for "%U", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_u8_string == NULL) - { - static const uint8_t u8_null_string[] = - { '(', 'N', 'U', 'L', 'L', ')', 0 }; - ap->a.a_u8_string = u8_null_string; - } - break; - case TYPE_U16_STRING: - ap->a.a_u16_string = va_arg (args, const uint16_t *); - /* A null pointer is an invalid argument for "%lU", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_u16_string == NULL) - { - static const uint16_t u16_null_string[] = - { '(', 'N', 'U', 'L', 'L', ')', 0 }; - ap->a.a_u16_string = u16_null_string; - } - break; - case TYPE_U32_STRING: - ap->a.a_u32_string = va_arg (args, const uint32_t *); - /* A null pointer is an invalid argument for "%llU", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_u32_string == NULL) - { - static const uint32_t u32_null_string[] = - { '(', 'N', 'U', 'L', 'L', ')', 0 }; - ap->a.a_u32_string = u32_null_string; - } - break; -#endif - default: - /* Unknown type. */ - return -1; - } - return 0; -} diff --git a/gl/printf-args.h b/gl/printf-args.h deleted file mode 100644 index f58bf0864c..0000000000 --- a/gl/printf-args.h +++ /dev/null @@ -1,158 +0,0 @@ -/* Decomposed printf argument list. - Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#ifndef _PRINTF_ARGS_H -#define _PRINTF_ARGS_H - -/* This file can be parametrized with the following macros: - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. - PRINTF_FETCHARGS Name of the function to be declared. - STATIC Set to 'static' to declare the function static. */ - -/* Default parameters. */ -#ifndef PRINTF_FETCHARGS -# define PRINTF_FETCHARGS printf_fetchargs -#endif - -/* Get size_t. */ -#include - -/* Get wchar_t. */ -#if HAVE_WCHAR_T -# include -#endif - -/* Get wint_t. */ -#if HAVE_WINT_T -# include -#endif - -/* Get va_list. */ -#include - - -/* Argument types */ -typedef enum -{ - TYPE_NONE, - TYPE_SCHAR, - TYPE_UCHAR, - TYPE_SHORT, - TYPE_USHORT, - TYPE_INT, - TYPE_UINT, - TYPE_LONGINT, - TYPE_ULONGINT, -#if HAVE_LONG_LONG_INT - TYPE_LONGLONGINT, - TYPE_ULONGLONGINT, -#endif - TYPE_DOUBLE, - TYPE_LONGDOUBLE, - TYPE_CHAR, -#if HAVE_WINT_T - TYPE_WIDE_CHAR, -#endif - TYPE_STRING, -#if HAVE_WCHAR_T - TYPE_WIDE_STRING, -#endif - TYPE_POINTER, - TYPE_COUNT_SCHAR_POINTER, - TYPE_COUNT_SHORT_POINTER, - TYPE_COUNT_INT_POINTER, - TYPE_COUNT_LONGINT_POINTER -#if HAVE_LONG_LONG_INT -, TYPE_COUNT_LONGLONGINT_POINTER -#endif -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ -, TYPE_U8_STRING -, TYPE_U16_STRING -, TYPE_U32_STRING -#endif -} arg_type; - -/* Polymorphic argument */ -typedef struct -{ - arg_type type; - union - { - signed char a_schar; - unsigned char a_uchar; - short a_short; - unsigned short a_ushort; - int a_int; - unsigned int a_uint; - long int a_longint; - unsigned long int a_ulongint; -#if HAVE_LONG_LONG_INT - long long int a_longlongint; - unsigned long long int a_ulonglongint; -#endif - float a_float; - double a_double; - long double a_longdouble; - int a_char; -#if HAVE_WINT_T - wint_t a_wide_char; -#endif - const char* a_string; -#if HAVE_WCHAR_T - const wchar_t* a_wide_string; -#endif - void* a_pointer; - signed char * a_count_schar_pointer; - short * a_count_short_pointer; - int * a_count_int_pointer; - long int * a_count_longint_pointer; -#if HAVE_LONG_LONG_INT - long long int * a_count_longlongint_pointer; -#endif -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - const uint8_t * a_u8_string; - const uint16_t * a_u16_string; - const uint32_t * a_u32_string; -#endif - } - a; -} -argument; - -/* Number of directly allocated arguments (no malloc() needed). */ -#define N_DIRECT_ALLOC_ARGUMENTS 7 - -typedef struct -{ - size_t count; - argument *arg; - argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; -} -arguments; - - -/* Fetch the arguments, putting them into a. */ -#ifdef STATIC -STATIC -#else -extern -#endif -int PRINTF_FETCHARGS (va_list args, arguments *a); - -#endif /* _PRINTF_ARGS_H */ diff --git a/gl/printf-parse.c b/gl/printf-parse.c deleted file mode 100644 index 7c14a6ddc5..0000000000 --- a/gl/printf-parse.c +++ /dev/null @@ -1,638 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 1999-2000, 2002-2003, 2006-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -/* This file can be parametrized with the following macros: - CHAR_T The element type of the format string. - CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters - in the format string are ASCII. - DIRECTIVE Structure denoting a format directive. - Depends on CHAR_T. - DIRECTIVES Structure denoting the set of format directives of a - format string. Depends on CHAR_T. - PRINTF_PARSE Function that parses a format string. - Depends on CHAR_T. - STATIC Set to 'static' to declare the function static. - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ - -#ifndef PRINTF_PARSE -# include -#endif - -/* Specification. */ -#ifndef PRINTF_PARSE -# include "printf-parse.h" -#endif - -/* Default parameters. */ -#ifndef PRINTF_PARSE -# define PRINTF_PARSE printf_parse -# define CHAR_T char -# define DIRECTIVE char_directive -# define DIRECTIVES char_directives -#endif - -/* Get size_t, NULL. */ -#include - -/* Get intmax_t. */ -#if defined IN_LIBINTL || defined IN_LIBASPRINTF -# if HAVE_STDINT_H_WITH_UINTMAX -# include -# endif -# if HAVE_INTTYPES_H_WITH_UINTMAX -# include -# endif -#else -# include -#endif - -/* malloc(), realloc(), free(). */ -#include - -/* memcpy(). */ -#include - -/* errno. */ -#include - -/* Checked size_t computations. */ -#include "xsize.h" - -#if CHAR_T_ONLY_ASCII -/* c_isascii(). */ -# include "c-ctype.h" -#endif - -#ifdef STATIC -STATIC -#endif -int -PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) -{ - const CHAR_T *cp = format; /* pointer into format */ - size_t arg_posn = 0; /* number of regular arguments consumed */ - size_t d_allocated; /* allocated elements of d->dir */ - size_t a_allocated; /* allocated elements of a->arg */ - size_t max_width_length = 0; - size_t max_precision_length = 0; - - d->count = 0; - d_allocated = N_DIRECT_ALLOC_DIRECTIVES; - d->dir = d->direct_alloc_dir; - - a->count = 0; - a_allocated = N_DIRECT_ALLOC_ARGUMENTS; - a->arg = a->direct_alloc_arg; - -#define REGISTER_ARG(_index_,_type_) \ - { \ - size_t n = (_index_); \ - if (n >= a_allocated) \ - { \ - size_t memory_size; \ - argument *memory; \ - \ - a_allocated = xtimes (a_allocated, 2); \ - if (a_allocated <= n) \ - a_allocated = xsum (n, 1); \ - memory_size = xtimes (a_allocated, sizeof (argument)); \ - if (size_overflow_p (memory_size)) \ - /* Overflow, would lead to out of memory. */ \ - goto out_of_memory; \ - memory = (argument *) (a->arg != a->direct_alloc_arg \ - ? realloc (a->arg, memory_size) \ - : malloc (memory_size)); \ - if (memory == NULL) \ - /* Out of memory. */ \ - goto out_of_memory; \ - if (a->arg == a->direct_alloc_arg) \ - memcpy (memory, a->arg, a->count * sizeof (argument)); \ - a->arg = memory; \ - } \ - while (a->count <= n) \ - a->arg[a->count++].type = TYPE_NONE; \ - if (a->arg[n].type == TYPE_NONE) \ - a->arg[n].type = (_type_); \ - else if (a->arg[n].type != (_type_)) \ - /* Ambiguous type for positional argument. */ \ - goto error; \ - } - - while (*cp != '\0') - { - CHAR_T c = *cp++; - if (c == '%') - { - size_t arg_index = ARG_NONE; - DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ - - /* Initialize the next directive. */ - dp->dir_start = cp - 1; - dp->flags = 0; - dp->width_start = NULL; - dp->width_end = NULL; - dp->width_arg_index = ARG_NONE; - dp->precision_start = NULL; - dp->precision_end = NULL; - dp->precision_arg_index = ARG_NONE; - dp->arg_index = ARG_NONE; - - /* Test for positional argument. */ - if (*cp >= '0' && *cp <= '9') - { - const CHAR_T *np; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - ; - if (*np == '$') - { - size_t n = 0; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - n = xsum (xtimes (n, 10), *np - '0'); - if (n == 0) - /* Positional argument 0. */ - goto error; - if (size_overflow_p (n)) - /* n too large, would lead to out of memory later. */ - goto error; - arg_index = n - 1; - cp = np + 1; - } - } - - /* Read the flags. */ - for (;;) - { - if (*cp == '\'') - { - dp->flags |= FLAG_GROUP; - cp++; - } - else if (*cp == '-') - { - dp->flags |= FLAG_LEFT; - cp++; - } - else if (*cp == '+') - { - dp->flags |= FLAG_SHOWSIGN; - cp++; - } - else if (*cp == ' ') - { - dp->flags |= FLAG_SPACE; - cp++; - } - else if (*cp == '#') - { - dp->flags |= FLAG_ALT; - cp++; - } - else if (*cp == '0') - { - dp->flags |= FLAG_ZERO; - cp++; - } -#if __GLIBC__ >= 2 && !defined __UCLIBC__ - else if (*cp == 'I') - { - dp->flags |= FLAG_LOCALIZED; - cp++; - } -#endif - else - break; - } - - /* Parse the field width. */ - if (*cp == '*') - { - dp->width_start = cp; - cp++; - dp->width_end = cp; - if (max_width_length < 1) - max_width_length = 1; - - /* Test for positional argument. */ - if (*cp >= '0' && *cp <= '9') - { - const CHAR_T *np; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - ; - if (*np == '$') - { - size_t n = 0; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - n = xsum (xtimes (n, 10), *np - '0'); - if (n == 0) - /* Positional argument 0. */ - goto error; - if (size_overflow_p (n)) - /* n too large, would lead to out of memory later. */ - goto error; - dp->width_arg_index = n - 1; - cp = np + 1; - } - } - if (dp->width_arg_index == ARG_NONE) - { - dp->width_arg_index = arg_posn++; - if (dp->width_arg_index == ARG_NONE) - /* arg_posn wrapped around. */ - goto error; - } - REGISTER_ARG (dp->width_arg_index, TYPE_INT); - } - else if (*cp >= '0' && *cp <= '9') - { - size_t width_length; - - dp->width_start = cp; - for (; *cp >= '0' && *cp <= '9'; cp++) - ; - dp->width_end = cp; - width_length = dp->width_end - dp->width_start; - if (max_width_length < width_length) - max_width_length = width_length; - } - - /* Parse the precision. */ - if (*cp == '.') - { - cp++; - if (*cp == '*') - { - dp->precision_start = cp - 1; - cp++; - dp->precision_end = cp; - if (max_precision_length < 2) - max_precision_length = 2; - - /* Test for positional argument. */ - if (*cp >= '0' && *cp <= '9') - { - const CHAR_T *np; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - ; - if (*np == '$') - { - size_t n = 0; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - n = xsum (xtimes (n, 10), *np - '0'); - if (n == 0) - /* Positional argument 0. */ - goto error; - if (size_overflow_p (n)) - /* n too large, would lead to out of memory - later. */ - goto error; - dp->precision_arg_index = n - 1; - cp = np + 1; - } - } - if (dp->precision_arg_index == ARG_NONE) - { - dp->precision_arg_index = arg_posn++; - if (dp->precision_arg_index == ARG_NONE) - /* arg_posn wrapped around. */ - goto error; - } - REGISTER_ARG (dp->precision_arg_index, TYPE_INT); - } - else - { - size_t precision_length; - - dp->precision_start = cp - 1; - for (; *cp >= '0' && *cp <= '9'; cp++) - ; - dp->precision_end = cp; - precision_length = dp->precision_end - dp->precision_start; - if (max_precision_length < precision_length) - max_precision_length = precision_length; - } - } - - { - arg_type type; - - /* Parse argument type/size specifiers. */ - { - int flags = 0; - - for (;;) - { - if (*cp == 'h') - { - flags |= (1 << (flags & 1)); - cp++; - } - else if (*cp == 'L') - { - flags |= 4; - cp++; - } - else if (*cp == 'l') - { - flags += 8; - cp++; - } - else if (*cp == 'j') - { - if (sizeof (intmax_t) > sizeof (long)) - { - /* intmax_t = long long */ - flags += 16; - } - else if (sizeof (intmax_t) > sizeof (int)) - { - /* intmax_t = long */ - flags += 8; - } - cp++; - } - else if (*cp == 'z' || *cp == 'Z') - { - /* 'z' is standardized in ISO C 99, but glibc uses 'Z' - because the warning facility in gcc-2.95.2 understands - only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ - if (sizeof (size_t) > sizeof (long)) - { - /* size_t = long long */ - flags += 16; - } - else if (sizeof (size_t) > sizeof (int)) - { - /* size_t = long */ - flags += 8; - } - cp++; - } - else if (*cp == 't') - { - if (sizeof (ptrdiff_t) > sizeof (long)) - { - /* ptrdiff_t = long long */ - flags += 16; - } - else if (sizeof (ptrdiff_t) > sizeof (int)) - { - /* ptrdiff_t = long */ - flags += 8; - } - cp++; - } -#if defined __APPLE__ && defined __MACH__ - /* On Mac OS X 10.3, PRIdMAX is defined as "qd". - We cannot change it to "lld" because PRIdMAX must also - be understood by the system's printf routines. */ - else if (*cp == 'q') - { - if (64 / 8 > sizeof (long)) - { - /* int64_t = long long */ - flags += 16; - } - else - { - /* int64_t = long */ - flags += 8; - } - cp++; - } -#endif -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - /* On native Windows, PRIdMAX is defined as "I64d". - We cannot change it to "lld" because PRIdMAX must also - be understood by the system's printf routines. */ - else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') - { - if (64 / 8 > sizeof (long)) - { - /* __int64 = long long */ - flags += 16; - } - else - { - /* __int64 = long */ - flags += 8; - } - cp += 3; - } -#endif - else - break; - } - - /* Read the conversion character. */ - c = *cp++; - switch (c) - { - case 'd': case 'i': -#if HAVE_LONG_LONG_INT - /* If 'long long' exists and is larger than 'long': */ - if (flags >= 16 || (flags & 4)) - type = TYPE_LONGLONGINT; - else -#endif - /* If 'long long' exists and is the same as 'long', we parse - "lld" into TYPE_LONGINT. */ - if (flags >= 8) - type = TYPE_LONGINT; - else if (flags & 2) - type = TYPE_SCHAR; - else if (flags & 1) - type = TYPE_SHORT; - else - type = TYPE_INT; - break; - case 'o': case 'u': case 'x': case 'X': -#if HAVE_LONG_LONG_INT - /* If 'long long' exists and is larger than 'long': */ - if (flags >= 16 || (flags & 4)) - type = TYPE_ULONGLONGINT; - else -#endif - /* If 'unsigned long long' exists and is the same as - 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ - if (flags >= 8) - type = TYPE_ULONGINT; - else if (flags & 2) - type = TYPE_UCHAR; - else if (flags & 1) - type = TYPE_USHORT; - else - type = TYPE_UINT; - break; - case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': - case 'a': case 'A': - if (flags >= 16 || (flags & 4)) - type = TYPE_LONGDOUBLE; - else - type = TYPE_DOUBLE; - break; - case 'c': - if (flags >= 8) -#if HAVE_WINT_T - type = TYPE_WIDE_CHAR; -#else - goto error; -#endif - else - type = TYPE_CHAR; - break; -#if HAVE_WINT_T - case 'C': - type = TYPE_WIDE_CHAR; - c = 'c'; - break; -#endif - case 's': - if (flags >= 8) -#if HAVE_WCHAR_T - type = TYPE_WIDE_STRING; -#else - goto error; -#endif - else - type = TYPE_STRING; - break; -#if HAVE_WCHAR_T - case 'S': - type = TYPE_WIDE_STRING; - c = 's'; - break; -#endif - case 'p': - type = TYPE_POINTER; - break; - case 'n': -#if HAVE_LONG_LONG_INT - /* If 'long long' exists and is larger than 'long': */ - if (flags >= 16 || (flags & 4)) - type = TYPE_COUNT_LONGLONGINT_POINTER; - else -#endif - /* If 'long long' exists and is the same as 'long', we parse - "lln" into TYPE_COUNT_LONGINT_POINTER. */ - if (flags >= 8) - type = TYPE_COUNT_LONGINT_POINTER; - else if (flags & 2) - type = TYPE_COUNT_SCHAR_POINTER; - else if (flags & 1) - type = TYPE_COUNT_SHORT_POINTER; - else - type = TYPE_COUNT_INT_POINTER; - break; -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - case 'U': - if (flags >= 16) - type = TYPE_U32_STRING; - else if (flags >= 8) - type = TYPE_U16_STRING; - else - type = TYPE_U8_STRING; - break; -#endif - case '%': - type = TYPE_NONE; - break; - default: - /* Unknown conversion character. */ - goto error; - } - } - - if (type != TYPE_NONE) - { - dp->arg_index = arg_index; - if (dp->arg_index == ARG_NONE) - { - dp->arg_index = arg_posn++; - if (dp->arg_index == ARG_NONE) - /* arg_posn wrapped around. */ - goto error; - } - REGISTER_ARG (dp->arg_index, type); - } - dp->conversion = c; - dp->dir_end = cp; - } - - d->count++; - if (d->count >= d_allocated) - { - size_t memory_size; - DIRECTIVE *memory; - - d_allocated = xtimes (d_allocated, 2); - memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); - if (size_overflow_p (memory_size)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir - ? realloc (d->dir, memory_size) - : malloc (memory_size)); - if (memory == NULL) - /* Out of memory. */ - goto out_of_memory; - if (d->dir == d->direct_alloc_dir) - memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); - d->dir = memory; - } - } -#if CHAR_T_ONLY_ASCII - else if (!c_isascii (c)) - { - /* Non-ASCII character. Not supported. */ - goto error; - } -#endif - } - d->dir[d->count].dir_start = cp; - - d->max_width_length = max_width_length; - d->max_precision_length = max_precision_length; - return 0; - -error: - if (a->arg != a->direct_alloc_arg) - free (a->arg); - if (d->dir != d->direct_alloc_dir) - free (d->dir); - errno = EINVAL; - return -1; - -out_of_memory: - if (a->arg != a->direct_alloc_arg) - free (a->arg); - if (d->dir != d->direct_alloc_dir) - free (d->dir); - errno = ENOMEM; - return -1; -} - -#undef PRINTF_PARSE -#undef DIRECTIVES -#undef DIRECTIVE -#undef CHAR_T_ONLY_ASCII -#undef CHAR_T diff --git a/gl/printf-parse.h b/gl/printf-parse.h deleted file mode 100644 index 887cde4eb3..0000000000 --- a/gl/printf-parse.h +++ /dev/null @@ -1,193 +0,0 @@ -/* Parse printf format string. - Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#ifndef _PRINTF_PARSE_H -#define _PRINTF_PARSE_H - -/* This file can be parametrized with the following macros: - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. - STATIC Set to 'static' to declare the function static. */ - -#if HAVE_FEATURES_H -# include /* for __GLIBC__, __UCLIBC__ */ -#endif - -#include "printf-args.h" - - -/* Flags */ -#define FLAG_GROUP 1 /* ' flag */ -#define FLAG_LEFT 2 /* - flag */ -#define FLAG_SHOWSIGN 4 /* + flag */ -#define FLAG_SPACE 8 /* space flag */ -#define FLAG_ALT 16 /* # flag */ -#define FLAG_ZERO 32 -#if __GLIBC__ >= 2 && !defined __UCLIBC__ -# define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ -#endif - -/* arg_index value indicating that no argument is consumed. */ -#define ARG_NONE (~(size_t)0) - -/* xxx_directive: A parsed directive. - xxx_directives: A parsed format string. */ - -/* Number of directly allocated directives (no malloc() needed). */ -#define N_DIRECT_ALLOC_DIRECTIVES 7 - -/* A parsed directive. */ -typedef struct -{ - const char* dir_start; - const char* dir_end; - int flags; - const char* width_start; - const char* width_end; - size_t width_arg_index; - const char* precision_start; - const char* precision_end; - size_t precision_arg_index; - char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -char_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - char_directive *dir; - size_t max_width_length; - size_t max_precision_length; - char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -char_directives; - -#if ENABLE_UNISTDIO - -/* A parsed directive. */ -typedef struct -{ - const uint8_t* dir_start; - const uint8_t* dir_end; - int flags; - const uint8_t* width_start; - const uint8_t* width_end; - size_t width_arg_index; - const uint8_t* precision_start; - const uint8_t* precision_end; - size_t precision_arg_index; - uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -u8_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - u8_directive *dir; - size_t max_width_length; - size_t max_precision_length; - u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -u8_directives; - -/* A parsed directive. */ -typedef struct -{ - const uint16_t* dir_start; - const uint16_t* dir_end; - int flags; - const uint16_t* width_start; - const uint16_t* width_end; - size_t width_arg_index; - const uint16_t* precision_start; - const uint16_t* precision_end; - size_t precision_arg_index; - uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -u16_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - u16_directive *dir; - size_t max_width_length; - size_t max_precision_length; - u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -u16_directives; - -/* A parsed directive. */ -typedef struct -{ - const uint32_t* dir_start; - const uint32_t* dir_end; - int flags; - const uint32_t* width_start; - const uint32_t* width_end; - size_t width_arg_index; - const uint32_t* precision_start; - const uint32_t* precision_end; - size_t precision_arg_index; - uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -u32_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - u32_directive *dir; - size_t max_width_length; - size_t max_precision_length; - u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -u32_directives; - -#endif - - -/* Parses the format string. Fills in the number N of directives, and fills - in directives[0], ..., directives[N-1], and sets directives[N].dir_start - to the end of the format string. Also fills in the arg_type fields of the - arguments and the needed count of arguments. */ -#if ENABLE_UNISTDIO -extern int - ulc_printf_parse (const char *format, char_directives *d, arguments *a); -extern int - u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); -extern int - u16_printf_parse (const uint16_t *format, u16_directives *d, - arguments *a); -extern int - u32_printf_parse (const uint32_t *format, u32_directives *d, - arguments *a); -#else -# ifdef STATIC -STATIC -# else -extern -# endif -int printf_parse (const char *format, char_directives *d, arguments *a); -#endif - -#endif /* _PRINTF_PARSE_H */ diff --git a/gl/read-file.c b/gl/read-file.c deleted file mode 100644 index 56d6c72c0f..0000000000 --- a/gl/read-file.c +++ /dev/null @@ -1,188 +0,0 @@ -/* read-file.c -- read file contents into a string - Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. - Written by Simon Josefsson and Bruno Haible. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#include - -#include "read-file.h" - -/* Get fstat. */ -#include - -/* Get ftello. */ -#include - -/* Get SIZE_MAX. */ -#include - -/* Get malloc, realloc, free. */ -#include - -/* Get errno. */ -#include - -/* Read a STREAM and return a newly allocated string with the content, - and set *LENGTH to the length of the string. The string is - zero-terminated, but the terminating zero byte is not counted in - *LENGTH. On errors, *LENGTH is undefined, errno preserves the - values set by system functions (if any), and NULL is returned. */ -char * -fread_file (FILE *stream, size_t *length) -{ - char *buf = NULL; - size_t alloc = BUFSIZ; - - /* For a regular file, allocate a buffer that has exactly the right - size. This avoids the need to do dynamic reallocations later. */ - { - struct stat st; - - if (fstat (fileno (stream), &st) >= 0 && S_ISREG (st.st_mode)) - { - off_t pos = ftello (stream); - - if (pos >= 0 && pos < st.st_size) - { - off_t alloc_off = st.st_size - pos; - - /* '1' below, accounts for the trailing NUL. */ - if (SIZE_MAX - 1 < alloc_off) - { - errno = ENOMEM; - return NULL; - } - - alloc = alloc_off + 1; - } - } - } - - if (!(buf = malloc (alloc))) - return NULL; /* errno is ENOMEM. */ - - { - size_t size = 0; /* number of bytes read so far */ - int save_errno; - - for (;;) - { - /* This reads 1 more than the size of a regular file - so that we get eof immediately. */ - size_t requested = alloc - size; - size_t count = fread (buf + size, 1, requested, stream); - size += count; - - if (count != requested) - { - save_errno = errno; - if (ferror (stream)) - break; - - /* Shrink the allocated memory if possible. */ - if (size < alloc - 1) - { - char *smaller_buf = realloc (buf, size + 1); - if (smaller_buf != NULL) - buf = smaller_buf; - } - - buf[size] = '\0'; - *length = size; - return buf; - } - - { - char *new_buf; - - if (alloc == SIZE_MAX) - { - save_errno = ENOMEM; - break; - } - - if (alloc < SIZE_MAX - alloc / 2) - alloc = alloc + alloc / 2; - else - alloc = SIZE_MAX; - - if (!(new_buf = realloc (buf, alloc))) - { - save_errno = errno; - break; - } - - buf = new_buf; - } - } - - free (buf); - errno = save_errno; - return NULL; - } -} - -static char * -internal_read_file (const char *filename, size_t *length, const char *mode) -{ - FILE *stream = fopen (filename, mode); - char *out; - int save_errno; - - if (!stream) - return NULL; - - out = fread_file (stream, length); - - save_errno = errno; - - if (fclose (stream) != 0) - { - if (out) - { - save_errno = errno; - free (out); - } - errno = save_errno; - return NULL; - } - - return out; -} - -/* Open and read the contents of FILENAME, and return a newly - allocated string with the content, and set *LENGTH to the length of - the string. The string is zero-terminated, but the terminating - zero byte is not counted in *LENGTH. On errors, *LENGTH is - undefined, errno preserves the values set by system functions (if - any), and NULL is returned. */ -char * -read_file (const char *filename, size_t *length) -{ - return internal_read_file (filename, length, "r"); -} - -/* Open (on non-POSIX systems, in binary mode) and read the contents - of FILENAME, and return a newly allocated string with the content, - and set LENGTH to the length of the string. The string is - zero-terminated, but the terminating zero byte is not counted in - the LENGTH variable. On errors, *LENGTH is undefined, errno - preserves the values set by system functions (if any), and NULL is - returned. */ -char * -read_binary_file (const char *filename, size_t *length) -{ - return internal_read_file (filename, length, "rb"); -} diff --git a/gl/read-file.h b/gl/read-file.h deleted file mode 100644 index 078be42078..0000000000 --- a/gl/read-file.h +++ /dev/null @@ -1,33 +0,0 @@ -/* read-file.h -- read file contents into a string - Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. - Written by Simon Josefsson. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef READ_FILE_H -#define READ_FILE_H - -/* Get size_t. */ -#include - -/* Get FILE. */ -#include - -extern char *fread_file (FILE * stream, size_t * length); - -extern char *read_file (const char *filename, size_t * length); - -extern char *read_binary_file (const char *filename, size_t * length); - -#endif /* READ_FILE_H */ diff --git a/gl/realloc.c b/gl/realloc.c deleted file mode 100644 index 5653e7ae89..0000000000 --- a/gl/realloc.c +++ /dev/null @@ -1,79 +0,0 @@ -/* realloc() function that is glibc compatible. - - Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2016 Free Software - Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* written by Jim Meyering and Bruno Haible */ - -#define _GL_USE_STDLIB_ALLOC 1 -#include - -/* Only the AC_FUNC_REALLOC macro defines 'realloc' already in config.h. */ -#ifdef realloc -# define NEED_REALLOC_GNU 1 -/* Whereas the gnulib module 'realloc-gnu' defines HAVE_REALLOC_GNU. */ -#elif GNULIB_REALLOC_GNU && !HAVE_REALLOC_GNU -# define NEED_REALLOC_GNU 1 -#endif - -/* Infer the properties of the system's malloc function. - The gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ -#if GNULIB_MALLOC_GNU && HAVE_MALLOC_GNU -# define SYSTEM_MALLOC_GLIBC_COMPATIBLE 1 -#endif - -#include - -#include - -/* Change the size of an allocated block of memory P to N bytes, - with error checking. If N is zero, change it to 1. If P is NULL, - use malloc. */ - -void * -rpl_realloc (void *p, size_t n) -{ - void *result; - -#if NEED_REALLOC_GNU - if (n == 0) - { - n = 1; - - /* In theory realloc might fail, so don't rely on it to free. */ - free (p); - p = NULL; - } -#endif - - if (p == NULL) - { -#if GNULIB_REALLOC_GNU && !NEED_REALLOC_GNU && !SYSTEM_MALLOC_GLIBC_COMPATIBLE - if (n == 0) - n = 1; -#endif - result = malloc (n); - } - else - result = realloc (p, n); - -#if !HAVE_REALLOC_POSIX - if (result == NULL) - errno = ENOMEM; -#endif - - return result; -} diff --git a/gl/secure_getenv.c b/gl/secure_getenv.c deleted file mode 100644 index 167d50b807..0000000000 --- a/gl/secure_getenv.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Look up an environment variable, returning NULL in insecure situations. - - Copyright 2013-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published - by the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#include - -#if !HAVE___SECURE_GETENV -# if HAVE_ISSETUGID || (HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID) -# include -# endif -#endif - -char * -secure_getenv (char const *name) -{ -#if HAVE___SECURE_GETENV /* glibc */ - return __secure_getenv (name); -#elif HAVE_ISSETUGID /* OS X, FreeBSD, NetBSD, OpenBSD */ - if (issetugid ()) - return NULL; - return getenv (name); -#elif HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID /* other Unix */ - if (geteuid () != getuid () || getegid () != getgid ()) - return NULL; - return getenv (name); -#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* native Windows */ - /* On native Windows, there is no such concept as setuid or setgid binaries. - - Programs launched as system services have high privileges, but they don't - inherit environment variables from a user. - - Programs launched by a user with "Run as Administrator" have high - privileges and use the environment variables, but the user has been asked - whether he agrees. - - Programs launched by a user without "Run as Administrator" cannot gain - high privileges, therefore there is no risk. */ - return getenv (name); -#else - return NULL; -#endif -} diff --git a/gl/size_max.h b/gl/size_max.h deleted file mode 100644 index 5e89e69be4..0000000000 --- a/gl/size_max.h +++ /dev/null @@ -1,30 +0,0 @@ -/* size_max.h -- declare SIZE_MAX through system headers - Copyright (C) 2005-2006, 2009-2016 Free Software Foundation, Inc. - Written by Simon Josefsson. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef GNULIB_SIZE_MAX_H -#define GNULIB_SIZE_MAX_H - -/* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ -# include -/* Get SIZE_MAX declaration on systems like glibc 2. */ -# if HAVE_STDINT_H -# include -# endif -/* On systems where these include files don't define it, SIZE_MAX is defined - in config.h. */ - -#endif /* GNULIB_SIZE_MAX_H */ diff --git a/gl/snprintf.c b/gl/snprintf.c deleted file mode 100644 index 070485b0db..0000000000 --- a/gl/snprintf.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 2004, 2006-2016 Free Software Foundation, Inc. - Written by Simon Josefsson and Paul Eggert. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#include - -#include -#include -#include -#include -#include - -#include "vasnprintf.h" - -/* Print formatted output to string STR. Similar to sprintf, but - additional length SIZE limit how much is written into STR. Returns - string length of formatted string (which may be larger than SIZE). - STR may be NULL, in which case nothing will be written. On error, - return a negative value. */ -int -snprintf (char *str, size_t size, const char *format, ...) -{ - char *output; - size_t len; - size_t lenbuf = size; - va_list args; - - va_start (args, format); - output = vasnprintf (str, &lenbuf, format, args); - len = lenbuf; - va_end (args); - - if (!output) - return -1; - - if (output != str) - { - if (size) - { - size_t pruned_len = (len < size ? len : size - 1); - memcpy (str, output, pruned_len); - str[pruned_len] = '\0'; - } - - free (output); - } - - if (INT_MAX < len) - { - errno = EOVERFLOW; - return -1; - } - - return len; -} diff --git a/gl/stdalign.in.h b/gl/stdalign.in.h deleted file mode 100644 index 9aac795a9e..0000000000 --- a/gl/stdalign.in.h +++ /dev/null @@ -1,121 +0,0 @@ -/* A substitute for ISO C11 . - - Copyright 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* Written by Paul Eggert and Bruno Haible. */ - -#ifndef _GL_STDALIGN_H -#define _GL_STDALIGN_H - -/* ISO C11 for platforms that lack it. - - References: - ISO C11 (latest free draft - ) - sections 6.5.3.4, 6.7.5, 7.15. - C++11 (latest free draft - ) - section 18.10. */ - -/* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment - requirement of a structure member (i.e., slot or field) that is of - type TYPE, as an integer constant expression. - - This differs from GCC's __alignof__ operator, which can yield a - better-performing alignment for an object of that type. For - example, on x86 with GCC, __alignof__ (double) and __alignof__ - (long long) are 8, whereas alignof (double) and alignof (long long) - are 4 unless the option '-malign-double' is used. - - The result cannot be used as a value for an 'enum' constant, if you - want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. - - Include for offsetof. */ -#include - -/* FreeBSD 9.1 , included by and lots of other - standard headers, defines conflicting implementations of _Alignas - and _Alignof that are no better than ours; override them. */ -#undef _Alignas -#undef _Alignof - -/* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023 - . */ -#if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \ - || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9))) -# ifdef __cplusplus -# if 201103 <= __cplusplus -# define _Alignof(type) alignof (type) -# else - template struct __alignof_helper { char __a; __t __b; }; -# define _Alignof(type) offsetof (__alignof_helper, __b) -# endif -# else -# define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) -# endif -#endif -#if ! (defined __cplusplus && 201103 <= __cplusplus) -# define alignof _Alignof -#endif -#define __alignof_is_defined 1 - -/* alignas (A), also known as _Alignas (A), aligns a variable or type - to the alignment A, where A is an integer constant expression. For - example: - - int alignas (8) foo; - struct s { int a; int alignas (8) bar; }; - - aligns the address of FOO and the offset of BAR to be multiples of 8. - - A should be a power of two that is at least the type's alignment - and at most the implementation's alignment limit. This limit is - 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable - to MSVC through at least version 10.0, A should be an integer - constant, as MSVC does not support expressions such as 1 << 3. - To be portable to Sun C 5.11, do not align auto variables to - anything stricter than their default alignment. - - The following C11 requirements are not supported here: - - - If A is zero, alignas has no effect. - - alignas can be used multiple times; the strictest one wins. - - alignas (TYPE) is equivalent to alignas (alignof (TYPE)). - - */ - -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 -# if defined __cplusplus && 201103 <= __cplusplus -# define _Alignas(a) alignas (a) -# elif ((defined __APPLE__ && defined __MACH__ \ - ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ - : __GNUC__) \ - || 061200 <= __HP_cc || 061200 <= __HP_aCC \ - || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__) -# define _Alignas(a) __attribute__ ((__aligned__ (a))) -# elif 1300 <= _MSC_VER -# define _Alignas(a) __declspec (align (a)) -# endif -#endif -#if ((defined _Alignas && ! (defined __cplusplus && 201103 <= __cplusplus)) \ - || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) -# define alignas _Alignas -#endif -#if defined alignas || (defined __cplusplus && 201103 <= __cplusplus) -# define __alignas_is_defined 1 -#endif - -#endif /* _GL_STDALIGN_H */ diff --git a/gl/stdbool.in.h b/gl/stdbool.in.h deleted file mode 100644 index 25a76d37b9..0000000000 --- a/gl/stdbool.in.h +++ /dev/null @@ -1,132 +0,0 @@ -/* Copyright (C) 2001-2003, 2006-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef _GL_STDBOOL_H -#define _GL_STDBOOL_H - -/* ISO C 99 for platforms that lack it. */ - -/* Usage suggestions: - - Programs that use should be aware of some limitations - and standards compliance issues. - - Standards compliance: - - - must be #included before 'bool', 'false', 'true' - can be used. - - - You cannot assume that sizeof (bool) == 1. - - - Programs should not undefine the macros bool, true, and false, - as C99 lists that as an "obsolescent feature". - - Limitations of this substitute, when used in a C89 environment: - - - must be #included before the '_Bool' type can be used. - - - You cannot assume that _Bool is a typedef; it might be a macro. - - - Bit-fields of type 'bool' are not supported. Portable code - should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. - - - In C99, casts and automatic conversions to '_Bool' or 'bool' are - performed in such a way that every nonzero value gets converted - to 'true', and zero gets converted to 'false'. This doesn't work - with this substitute. With this substitute, only the values 0 and 1 - give the expected result when converted to _Bool' or 'bool'. - - - C99 allows the use of (_Bool)0.0 in constant expressions, but - this substitute cannot always provide this property. - - Also, it is suggested that programs use 'bool' rather than '_Bool'; - this isn't required, but 'bool' is more common. */ - - -/* 7.16. Boolean type and values */ - -/* BeOS already #defines false 0, true 1. We use the same - definitions below, but temporarily we have to #undef them. */ -#if defined __BEOS__ && !defined __HAIKU__ -# include /* defines bool but not _Bool */ -# undef false -# undef true -#endif - -#ifdef __cplusplus -# define _Bool bool -# define bool bool -#else -# if defined __BEOS__ && !defined __HAIKU__ - /* A compiler known to have 'bool'. */ - /* If the compiler already has both 'bool' and '_Bool', we can assume they - are the same types. */ -# if !@HAVE__BOOL@ -typedef bool _Bool; -# endif -# else -# if !defined __GNUC__ - /* If @HAVE__BOOL@: - Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when - the built-in _Bool type is used. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html - Similar bugs are likely with other compilers as well; this file - wouldn't be used if was working. - So we override the _Bool type. - If !@HAVE__BOOL@: - Need to define _Bool ourselves. As 'signed char' or as an enum type? - Use of a typedef, with SunPRO C, leads to a stupid - "warning: _Bool is a keyword in ISO C99". - Use of an enum type, with IRIX cc, leads to a stupid - "warning(1185): enumerated type mixed with another type". - Even the existence of an enum type, without a typedef, - "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. - The only benefit of the enum, debuggability, is not important - with these compilers. So use 'signed char' and no enum. */ -# define _Bool signed char -# else - /* With this compiler, trust the _Bool type if the compiler has it. */ -# if !@HAVE__BOOL@ - /* For the sake of symbolic names in gdb, define true and false as - enum constants, not only as macros. - It is tempting to write - typedef enum { false = 0, true = 1 } _Bool; - so that gdb prints values of type 'bool' symbolically. But then - values of type '_Bool' might promote to 'int' or 'unsigned int' - (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' - (see ISO C 99 6.3.1.1.(2)). So add a negative value to the - enum; this ensures that '_Bool' promotes to 'int'. */ -typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; -# endif -# endif -# endif -# define bool _Bool -#endif - -/* The other macros must be usable in preprocessor directives. */ -#ifdef __cplusplus -# define false false -# define true true -#else -# define false 0 -# define true 1 -#endif - -#define __bool_true_false_are_defined 1 - -#endif /* _GL_STDBOOL_H */ diff --git a/gl/stddef.in.h b/gl/stddef.in.h deleted file mode 100644 index a400474bd1..0000000000 --- a/gl/stddef.in.h +++ /dev/null @@ -1,110 +0,0 @@ -/* A substitute for POSIX 2008 , for platforms that have issues. - - Copyright (C) 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* Written by Eric Blake. */ - -/* - * POSIX 2008 for platforms that have issues. - * - */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined __need_wchar_t || defined __need_size_t \ - || defined __need_ptrdiff_t || defined __need_NULL \ - || defined __need_wint_t -/* Special invocation convention inside gcc header files. In - particular, gcc provides a version of that blindly - redefines NULL even when __need_wint_t was defined, even though - wint_t is not normally provided by . Hence, we must - remember if special invocation has ever been used to obtain wint_t, - in which case we need to clean up NULL yet again. */ - -# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) -# ifdef __need_wint_t -# define _GL_STDDEF_WINT_T -# endif -# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ -# endif - -#else -/* Normal invocation convention. */ - -# ifndef _@GUARD_PREFIX@_STDDEF_H - -/* The include_next requires a split double-inclusion guard. */ - -# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ - -/* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ -# if (@REPLACE_NULL@ \ - && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T)) -# undef NULL -# ifdef __cplusplus - /* ISO C++ says that the macro NULL must expand to an integer constant - expression, hence '((void *) 0)' is not allowed in C++. */ -# if __GNUG__ >= 3 - /* GNU C++ has a __null macro that behaves like an integer ('int' or - 'long') but has the same size as a pointer. Use that, to avoid - warnings. */ -# define NULL __null -# else -# define NULL 0L -# endif -# else -# define NULL ((void *) 0) -# endif -# endif - -# ifndef _@GUARD_PREFIX@_STDDEF_H -# define _@GUARD_PREFIX@_STDDEF_H - -/* Some platforms lack wchar_t. */ -#if !@HAVE_WCHAR_T@ -# define wchar_t int -#endif - -/* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is - a hack in case the configure-time test was done with g++ even though - we are currently compiling with gcc. */ -#if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T) -/* On the x86, the maximum storage alignment of double, long, etc. is 4, - but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, - and the C11 standard allows this. Work around this problem by - using __alignof__ (which returns 8 for double) rather than _Alignof - (which returns 4), and align each union member accordingly. */ -# ifdef __GNUC__ -# define _GL_STDDEF_ALIGNAS(type) \ - __attribute__ ((__aligned__ (__alignof__ (type)))) -# else -# define _GL_STDDEF_ALIGNAS(type) /* */ -# endif -typedef union -{ - char *__p _GL_STDDEF_ALIGNAS (char *); - double __d _GL_STDDEF_ALIGNAS (double); - long double __ld _GL_STDDEF_ALIGNAS (long double); - long int __i _GL_STDDEF_ALIGNAS (long int); -} max_align_t; -#endif - -# endif /* _@GUARD_PREFIX@_STDDEF_H */ -# endif /* _@GUARD_PREFIX@_STDDEF_H */ -#endif /* __need_XXX */ diff --git a/gl/stdint.in.h b/gl/stdint.in.h deleted file mode 100644 index 225970503f..0000000000 --- a/gl/stdint.in.h +++ /dev/null @@ -1,698 +0,0 @@ -/* Copyright (C) 2001-2002, 2004-2016 Free Software Foundation, Inc. - Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. - This file is part of gnulib. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* - * ISO C 99 for platforms that lack it. - * - */ - -#ifndef _@GUARD_PREFIX@_STDINT_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* When including a system file that in turn includes , - use the system , not our substitute. This avoids - problems with (for example) VMS, whose includes - . */ -#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H - -/* On Android (Bionic libc), includes this file before - having defined 'time_t'. Therefore in this case avoid including - other system header files; just include the system's . - Ideally we should test __BIONIC__ here, but it is only defined after - has been included; hence test __ANDROID__ instead. */ -#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H -# @INCLUDE_NEXT@ @NEXT_STDINT_H@ -#else - -/* Get those types that are already defined in other system include - files, so that we can "#define int8_t signed char" below without - worrying about a later system include file containing a "typedef - signed char int8_t;" that will get messed up by our macro. Our - macros should all be consistent with the system versions, except - for the "fast" types and macros, which we recommend against using - in public interfaces due to compiler differences. */ - -#if @HAVE_STDINT_H@ -# if defined __sgi && ! defined __c99 - /* Bypass IRIX's if in C89 mode, since it merely annoys users - with "This header file is to be used only for c99 mode compilations" - diagnostics. */ -# define __STDINT_H__ -# endif - - /* Some pre-C++11 implementations need this. */ -# ifdef __cplusplus -# ifndef __STDC_CONSTANT_MACROS -# define __STDC_CONSTANT_MACROS 1 -# endif -# ifndef __STDC_LIMIT_MACROS -# define __STDC_LIMIT_MACROS 1 -# endif -# endif - - /* Other systems may have an incomplete or buggy . - Include it before , since any "#include " - in would reinclude us, skipping our contents because - _@GUARD_PREFIX@_STDINT_H is defined. - The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_STDINT_H@ -#endif - -#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H -#define _@GUARD_PREFIX@_STDINT_H - -/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, - LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ -#include - -#if ! @HAVE_C99_STDINT_H@ - -/* defines some of the stdint.h types as well, on glibc, - IRIX 6.5, and OpenBSD 3.8 (via ). - AIX 5.2 isn't needed and causes troubles. - Mac OS X 10.4.6 includes (which is us), but - relies on the system definitions, so include - after @NEXT_STDINT_H@. */ -# if @HAVE_SYS_TYPES_H@ && ! defined _AIX -# include -# endif - -# if @HAVE_INTTYPES_H@ - /* In OpenBSD 3.8, includes , which defines - int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. - also defines intptr_t and uintptr_t. */ -# include -# elif @HAVE_SYS_INTTYPES_H@ - /* Solaris 7 has the types except the *_fast*_t types, and - the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ -# include -# endif - -# if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ - /* Linux libc4 >= 4.6.7 and libc5 have a that defines - int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is - included by . */ -# include -# endif - -# undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H - -/* Minimum and maximum values for an integer type under the usual assumption. - Return an unspecified value if BITS == 0, adding a check to pacify - picky compilers. */ - -# define _STDINT_MIN(signed, bits, zero) \ - ((signed) ? ~ _STDINT_MAX (signed, bits, zero) : (zero)) - -# define _STDINT_MAX(signed, bits, zero) \ - (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) - -#if !GNULIB_defined_stdint_types - -/* 7.18.1.1. Exact-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. */ - -# undef int8_t -# undef uint8_t -typedef signed char gl_int8_t; -typedef unsigned char gl_uint8_t; -# define int8_t gl_int8_t -# define uint8_t gl_uint8_t - -# undef int16_t -# undef uint16_t -typedef short int gl_int16_t; -typedef unsigned short int gl_uint16_t; -# define int16_t gl_int16_t -# define uint16_t gl_uint16_t - -# undef int32_t -# undef uint32_t -typedef int gl_int32_t; -typedef unsigned int gl_uint32_t; -# define int32_t gl_int32_t -# define uint32_t gl_uint32_t - -/* If the system defines INT64_MAX, assume int64_t works. That way, - if the underlying platform defines int64_t to be a 64-bit long long - int, the code below won't mistakenly define it to be a 64-bit long - int, which would mess up C++ name mangling. We must use #ifdef - rather than #if, to avoid an error with HP-UX 10.20 cc. */ - -# ifdef INT64_MAX -# define GL_INT64_T -# else -/* Do not undefine int64_t if gnulib is not being used with 64-bit - types, since otherwise it breaks platforms like Tandem/NSK. */ -# if LONG_MAX >> 31 >> 31 == 1 -# undef int64_t -typedef long int gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T -# elif defined _MSC_VER -# undef int64_t -typedef __int64 gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T -# elif @HAVE_LONG_LONG_INT@ -# undef int64_t -typedef long long int gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T -# endif -# endif - -# ifdef UINT64_MAX -# define GL_UINT64_T -# else -# if ULONG_MAX >> 31 >> 31 >> 1 == 1 -# undef uint64_t -typedef unsigned long int gl_uint64_t; -# define uint64_t gl_uint64_t -# define GL_UINT64_T -# elif defined _MSC_VER -# undef uint64_t -typedef unsigned __int64 gl_uint64_t; -# define uint64_t gl_uint64_t -# define GL_UINT64_T -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ -# undef uint64_t -typedef unsigned long long int gl_uint64_t; -# define uint64_t gl_uint64_t -# define GL_UINT64_T -# endif -# endif - -/* Avoid collision with Solaris 2.5.1 etc. */ -# define _UINT8_T -# define _UINT32_T -# define _UINT64_T - - -/* 7.18.1.2. Minimum-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types - are the same as the corresponding N_t types. */ - -# undef int_least8_t -# undef uint_least8_t -# undef int_least16_t -# undef uint_least16_t -# undef int_least32_t -# undef uint_least32_t -# undef int_least64_t -# undef uint_least64_t -# define int_least8_t int8_t -# define uint_least8_t uint8_t -# define int_least16_t int16_t -# define uint_least16_t uint16_t -# define int_least32_t int32_t -# define uint_least32_t uint32_t -# ifdef GL_INT64_T -# define int_least64_t int64_t -# endif -# ifdef GL_UINT64_T -# define uint_least64_t uint64_t -# endif - -/* 7.18.1.3. Fastest minimum-width integer types */ - -/* Note: Other substitutes may define these types differently. - It is not recommended to use these types in public header files. */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types - are taken from the same list of types. The following code normally - uses types consistent with glibc, as that lessens the chance of - incompatibility with older GNU hosts. */ - -# undef int_fast8_t -# undef uint_fast8_t -# undef int_fast16_t -# undef uint_fast16_t -# undef int_fast32_t -# undef uint_fast32_t -# undef int_fast64_t -# undef uint_fast64_t -typedef signed char gl_int_fast8_t; -typedef unsigned char gl_uint_fast8_t; - -# ifdef __sun -/* Define types compatible with SunOS 5.10, so that code compiled under - earlier SunOS versions works with code compiled under SunOS 5.10. */ -typedef int gl_int_fast32_t; -typedef unsigned int gl_uint_fast32_t; -# else -typedef long int gl_int_fast32_t; -typedef unsigned long int gl_uint_fast32_t; -# endif -typedef gl_int_fast32_t gl_int_fast16_t; -typedef gl_uint_fast32_t gl_uint_fast16_t; - -# define int_fast8_t gl_int_fast8_t -# define uint_fast8_t gl_uint_fast8_t -# define int_fast16_t gl_int_fast16_t -# define uint_fast16_t gl_uint_fast16_t -# define int_fast32_t gl_int_fast32_t -# define uint_fast32_t gl_uint_fast32_t -# ifdef GL_INT64_T -# define int_fast64_t int64_t -# endif -# ifdef GL_UINT64_T -# define uint_fast64_t uint64_t -# endif - -/* 7.18.1.4. Integer types capable of holding object pointers */ - -/* kLIBC's stdint.h defines _INTPTR_T_DECLARED and needs its own - definitions of intptr_t and uintptr_t (which use int and unsigned) - to avoid clashes with declarations of system functions like sbrk. */ -# ifndef _INTPTR_T_DECLARED -# undef intptr_t -# undef uintptr_t -typedef long int gl_intptr_t; -typedef unsigned long int gl_uintptr_t; -# define intptr_t gl_intptr_t -# define uintptr_t gl_uintptr_t -# endif - -/* 7.18.1.5. Greatest-width integer types */ - -/* Note: These types are compiler dependent. It may be unwise to use them in - public header files. */ - -/* If the system defines INTMAX_MAX, assume that intmax_t works, and - similarly for UINTMAX_MAX and uintmax_t. This avoids problems with - assuming one type where another is used by the system. */ - -# ifndef INTMAX_MAX -# undef INTMAX_C -# undef intmax_t -# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 -typedef long long int gl_intmax_t; -# define intmax_t gl_intmax_t -# elif defined GL_INT64_T -# define intmax_t int64_t -# else -typedef long int gl_intmax_t; -# define intmax_t gl_intmax_t -# endif -# endif - -# ifndef UINTMAX_MAX -# undef UINTMAX_C -# undef uintmax_t -# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 -typedef unsigned long long int gl_uintmax_t; -# define uintmax_t gl_uintmax_t -# elif defined GL_UINT64_T -# define uintmax_t uint64_t -# else -typedef unsigned long int gl_uintmax_t; -# define uintmax_t gl_uintmax_t -# endif -# endif - -/* Verify that intmax_t and uintmax_t have the same size. Too much code - breaks if this is not the case. If this check fails, the reason is likely - to be found in the autoconf macros. */ -typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) - ? 1 : -1]; - -# define GNULIB_defined_stdint_types 1 -# endif /* !GNULIB_defined_stdint_types */ - -/* 7.18.2. Limits of specified-width integer types */ - -/* 7.18.2.1. Limits of exact-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. */ - -# undef INT8_MIN -# undef INT8_MAX -# undef UINT8_MAX -# define INT8_MIN (~ INT8_MAX) -# define INT8_MAX 127 -# define UINT8_MAX 255 - -# undef INT16_MIN -# undef INT16_MAX -# undef UINT16_MAX -# define INT16_MIN (~ INT16_MAX) -# define INT16_MAX 32767 -# define UINT16_MAX 65535 - -# undef INT32_MIN -# undef INT32_MAX -# undef UINT32_MAX -# define INT32_MIN (~ INT32_MAX) -# define INT32_MAX 2147483647 -# define UINT32_MAX 4294967295U - -# if defined GL_INT64_T && ! defined INT64_MAX -/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 - evaluates the latter incorrectly in preprocessor expressions. */ -# define INT64_MIN (- INTMAX_C (1) << 63) -# define INT64_MAX INTMAX_C (9223372036854775807) -# endif - -# if defined GL_UINT64_T && ! defined UINT64_MAX -# define UINT64_MAX UINTMAX_C (18446744073709551615) -# endif - -/* 7.18.2.2. Limits of minimum-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types - are the same as the corresponding N_t types. */ - -# undef INT_LEAST8_MIN -# undef INT_LEAST8_MAX -# undef UINT_LEAST8_MAX -# define INT_LEAST8_MIN INT8_MIN -# define INT_LEAST8_MAX INT8_MAX -# define UINT_LEAST8_MAX UINT8_MAX - -# undef INT_LEAST16_MIN -# undef INT_LEAST16_MAX -# undef UINT_LEAST16_MAX -# define INT_LEAST16_MIN INT16_MIN -# define INT_LEAST16_MAX INT16_MAX -# define UINT_LEAST16_MAX UINT16_MAX - -# undef INT_LEAST32_MIN -# undef INT_LEAST32_MAX -# undef UINT_LEAST32_MAX -# define INT_LEAST32_MIN INT32_MIN -# define INT_LEAST32_MAX INT32_MAX -# define UINT_LEAST32_MAX UINT32_MAX - -# undef INT_LEAST64_MIN -# undef INT_LEAST64_MAX -# ifdef GL_INT64_T -# define INT_LEAST64_MIN INT64_MIN -# define INT_LEAST64_MAX INT64_MAX -# endif - -# undef UINT_LEAST64_MAX -# ifdef GL_UINT64_T -# define UINT_LEAST64_MAX UINT64_MAX -# endif - -/* 7.18.2.3. Limits of fastest minimum-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types - are taken from the same list of types. */ - -# undef INT_FAST8_MIN -# undef INT_FAST8_MAX -# undef UINT_FAST8_MAX -# define INT_FAST8_MIN SCHAR_MIN -# define INT_FAST8_MAX SCHAR_MAX -# define UINT_FAST8_MAX UCHAR_MAX - -# undef INT_FAST16_MIN -# undef INT_FAST16_MAX -# undef UINT_FAST16_MAX -# define INT_FAST16_MIN INT_FAST32_MIN -# define INT_FAST16_MAX INT_FAST32_MAX -# define UINT_FAST16_MAX UINT_FAST32_MAX - -# undef INT_FAST32_MIN -# undef INT_FAST32_MAX -# undef UINT_FAST32_MAX -# ifdef __sun -# define INT_FAST32_MIN INT_MIN -# define INT_FAST32_MAX INT_MAX -# define UINT_FAST32_MAX UINT_MAX -# else -# define INT_FAST32_MIN LONG_MIN -# define INT_FAST32_MAX LONG_MAX -# define UINT_FAST32_MAX ULONG_MAX -# endif - -# undef INT_FAST64_MIN -# undef INT_FAST64_MAX -# ifdef GL_INT64_T -# define INT_FAST64_MIN INT64_MIN -# define INT_FAST64_MAX INT64_MAX -# endif - -# undef UINT_FAST64_MAX -# ifdef GL_UINT64_T -# define UINT_FAST64_MAX UINT64_MAX -# endif - -/* 7.18.2.4. Limits of integer types capable of holding object pointers */ - -# undef INTPTR_MIN -# undef INTPTR_MAX -# undef UINTPTR_MAX -# define INTPTR_MIN LONG_MIN -# define INTPTR_MAX LONG_MAX -# define UINTPTR_MAX ULONG_MAX - -/* 7.18.2.5. Limits of greatest-width integer types */ - -# ifndef INTMAX_MAX -# undef INTMAX_MIN -# ifdef INT64_MAX -# define INTMAX_MIN INT64_MIN -# define INTMAX_MAX INT64_MAX -# else -# define INTMAX_MIN INT32_MIN -# define INTMAX_MAX INT32_MAX -# endif -# endif - -# ifndef UINTMAX_MAX -# ifdef UINT64_MAX -# define UINTMAX_MAX UINT64_MAX -# else -# define UINTMAX_MAX UINT32_MAX -# endif -# endif - -/* 7.18.3. Limits of other integer types */ - -/* ptrdiff_t limits */ -# undef PTRDIFF_MIN -# undef PTRDIFF_MAX -# if @APPLE_UNIVERSAL_BUILD@ -# ifdef _LP64 -# define PTRDIFF_MIN _STDINT_MIN (1, 64, 0l) -# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) -# else -# define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) -# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) -# endif -# else -# define PTRDIFF_MIN \ - _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) -# define PTRDIFF_MAX \ - _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) -# endif - -/* sig_atomic_t limits */ -# undef SIG_ATOMIC_MIN -# undef SIG_ATOMIC_MAX -# define SIG_ATOMIC_MIN \ - _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ - 0@SIG_ATOMIC_T_SUFFIX@) -# define SIG_ATOMIC_MAX \ - _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ - 0@SIG_ATOMIC_T_SUFFIX@) - - -/* size_t limit */ -# undef SIZE_MAX -# if @APPLE_UNIVERSAL_BUILD@ -# ifdef _LP64 -# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) -# else -# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) -# endif -# else -# define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) -# endif - -/* wchar_t limits */ -/* Get WCHAR_MIN, WCHAR_MAX. - This include is not on the top, above, because on OSF/1 4.0 we have a - sequence of nested includes - -> -> -> , and the latter includes - and assumes its types are already defined. */ -# if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) - /* BSD/OS 4.0.1 has a bug: , and must be - included before . */ -# include -# include -# include -# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H -# include -# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H -# endif -# undef WCHAR_MIN -# undef WCHAR_MAX -# define WCHAR_MIN \ - _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) -# define WCHAR_MAX \ - _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) - -/* wint_t limits */ -# undef WINT_MIN -# undef WINT_MAX -# define WINT_MIN \ - _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) -# define WINT_MAX \ - _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) - -/* 7.18.4. Macros for integer constants */ - -/* 7.18.4.1. Macros for minimum-width integer constants */ -/* According to ISO C 99 Technical Corrigendum 1 */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ - -# undef INT8_C -# undef UINT8_C -# define INT8_C(x) x -# define UINT8_C(x) x - -# undef INT16_C -# undef UINT16_C -# define INT16_C(x) x -# define UINT16_C(x) x - -# undef INT32_C -# undef UINT32_C -# define INT32_C(x) x -# define UINT32_C(x) x ## U - -# undef INT64_C -# undef UINT64_C -# if LONG_MAX >> 31 >> 31 == 1 -# define INT64_C(x) x##L -# elif defined _MSC_VER -# define INT64_C(x) x##i64 -# elif @HAVE_LONG_LONG_INT@ -# define INT64_C(x) x##LL -# endif -# if ULONG_MAX >> 31 >> 31 >> 1 == 1 -# define UINT64_C(x) x##UL -# elif defined _MSC_VER -# define UINT64_C(x) x##ui64 -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ -# define UINT64_C(x) x##ULL -# endif - -/* 7.18.4.2. Macros for greatest-width integer constants */ - -# ifndef INTMAX_C -# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 -# define INTMAX_C(x) x##LL -# elif defined GL_INT64_T -# define INTMAX_C(x) INT64_C(x) -# else -# define INTMAX_C(x) x##L -# endif -# endif - -# ifndef UINTMAX_C -# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 -# define UINTMAX_C(x) x##ULL -# elif defined GL_UINT64_T -# define UINTMAX_C(x) UINT64_C(x) -# else -# define UINTMAX_C(x) x##UL -# endif -# endif - -#endif /* !@HAVE_C99_STDINT_H@ */ - -/* Macros specified by ISO/IEC TS 18661-1:2014. */ - -#if (!defined UINTMAX_WIDTH \ - && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) -# ifdef INT8_MAX -# define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) -# endif -# ifdef UINT8_MAX -# define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) -# endif -# ifdef INT16_MAX -# define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) -# endif -# ifdef UINT16_MAX -# define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) -# endif -# ifdef INT32_MAX -# define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) -# endif -# ifdef UINT32_MAX -# define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) -# endif -# ifdef INT64_MAX -# define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) -# endif -# ifdef UINT64_MAX -# define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) -# endif -# define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) -# define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) -# define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) -# define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) -# define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) -# define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) -# define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) -# define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) -# define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) -# define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) -# define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) -# define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) -# define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) -# define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) -# define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) -# define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) -# define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) -# define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) -# define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) -# define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) -# define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) -# define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) -# define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) -# ifdef WINT_MAX -# define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) -# endif -# ifdef SIG_ATOMIC_MAX -# define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) -# endif -#endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ - -#endif /* _@GUARD_PREFIX@_STDINT_H */ -#endif /* !(defined __ANDROID__ && ...) */ -#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/gl/stdio-impl.h b/gl/stdio-impl.h deleted file mode 100644 index 4c02c9f614..0000000000 --- a/gl/stdio-impl.h +++ /dev/null @@ -1,113 +0,0 @@ -/* Implementation details of FILE streams. - Copyright (C) 2007-2008, 2010-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* Many stdio implementations have the same logic and therefore can share - the same implementation of stdio extension API, except that some fields - have different naming conventions, or their access requires some casts. */ - - -/* BSD stdio derived implementations. */ - -#if defined __NetBSD__ /* NetBSD */ -/* Get __NetBSD_Version__. */ -# include -#endif - -#include /* For detecting Plan9. */ - -#if defined __sferror || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ - -# if defined __DragonFly__ /* DragonFly */ - /* See . */ -# define fp_ ((struct { struct __FILE_public pub; \ - struct { unsigned char *_base; int _size; } _bf; \ - void *cookie; \ - void *_close; \ - void *_read; \ - void *_seek; \ - void *_write; \ - struct { unsigned char *_base; int _size; } _ub; \ - int _ur; \ - unsigned char _ubuf[3]; \ - unsigned char _nbuf[1]; \ - struct { unsigned char *_base; int _size; } _lb; \ - int _blksize; \ - fpos_t _offset; \ - /* More fields, not relevant here. */ \ - } *) fp) - /* See . */ -# define _p pub._p -# define _flags pub._flags -# define _r pub._r -# define _w pub._w -# else -# define fp_ fp -# endif - -# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __ANDROID__ /* NetBSD >= 1.5ZA, OpenBSD, Android */ - /* See - and */ - struct __sfileext - { - struct __sbuf _ub; /* ungetc buffer */ - /* More fields, not relevant here. */ - }; -# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub -# else /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin, Android */ -# define fp_ub fp_->_ub -# endif - -# define HASUB(fp) (fp_ub._base != NULL) - -#endif - - -/* SystemV derived implementations. */ - -#ifdef __TANDEM /* NonStop Kernel */ -# ifndef _IOERR -/* These values were determined by the program 'stdioext-flags' at - . */ -# define _IOERR 0x40 -# define _IOREAD 0x80 -# define _IOWRT 0x4 -# define _IORW 0x100 -# endif -#endif - -#if defined _IOERR - -# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ -# define fp_ ((struct { unsigned char *_ptr; \ - unsigned char *_base; \ - unsigned char *_end; \ - long _cnt; \ - int _file; \ - unsigned int _flag; \ - } *) fp) -# else -# define fp_ fp -# endif - -# if defined _SCO_DS /* OpenServer */ -# define _cnt __cnt -# define _ptr __ptr -# define _base __base -# define _flag __flag -# endif - -#endif diff --git a/gl/stdio.in.h b/gl/stdio.in.h deleted file mode 100644 index 8db24a8fc5..0000000000 --- a/gl/stdio.in.h +++ /dev/null @@ -1,1357 +0,0 @@ -/* A GNU-like . - - Copyright (C) 2004, 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H -/* Special invocation convention: - - Inside glibc header files. - - On OSF/1 5.1 we have a sequence of nested includes - -> -> -> -> - -> -> -> . - In this situation, the functions are not yet declared, therefore we cannot - provide the C++ aliases. */ - -#@INCLUDE_NEXT@ @NEXT_STDIO_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_STDIO_H - -#define _GL_ALREADY_INCLUDING_STDIO_H - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_STDIO_H@ - -#undef _GL_ALREADY_INCLUDING_STDIO_H - -#ifndef _@GUARD_PREFIX@_STDIO_H -#define _@GUARD_PREFIX@_STDIO_H - -/* Get va_list. Needed on many systems, including glibc 2.8. */ -#include - -#include - -/* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 - and eglibc 2.11.2. - May also define off_t to a 64-bit type on native Windows. */ -#include - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The __-protected variants of the attributes 'format' and 'printf' are - accepted by gcc versions 2.6.4 (effectively 2.7) and later. - We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because - gnulib and libintl do '#define printf __printf__' when they override - the 'printf' function. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) -#else -# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ -#endif - -/* _GL_ATTRIBUTE_FORMAT_PRINTF - indicates to GCC that the function takes a format string and arguments, - where the format string directives are the ones standardized by ISO C99 - and POSIX. */ -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) -# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) -#else -# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) -#endif - -/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, - except that it indicates to GCC that the supported format string directives - are the ones of the system printf(), rather than the ones standardized by - ISO C99 and POSIX. */ -#if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU -# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT_PRINTF (formatstring_parameter, first_argument) -#else -# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) -#endif - -/* _GL_ATTRIBUTE_FORMAT_SCANF - indicates to GCC that the function takes a format string and arguments, - where the format string directives are the ones standardized by ISO C99 - and POSIX. */ -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) -# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) -#else -# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) -#endif - -/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, - except that it indicates to GCC that the supported format string directives - are the ones of the system scanf(), rather than the ones standardized by - ISO C99 and POSIX. */ -#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) - -/* Solaris 10 declares renameat in , not in . */ -/* But in any case avoid namespace pollution on glibc systems. */ -#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __sun \ - && ! defined __GLIBC__ -# include -#endif - - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -/* Macros for stringification. */ -#define _GL_STDIO_STRINGIZE(token) #token -#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) - -/* When also using extern inline, suppress the use of static inline in - standard headers of problematic Apple configurations, as Libc at - least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., - . - Perhaps Apple will fix this some day. */ -#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ - && defined __GNUC__ && defined __STDC__) -# undef putc_unlocked -#endif - -#if @GNULIB_DPRINTF@ -# if @REPLACE_DPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define dprintf rpl_dprintf -# endif -_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); -# else -# if !@HAVE_DPRINTF@ -_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...)); -# endif -_GL_CXXALIASWARN (dprintf); -#elif defined GNULIB_POSIXCHECK -# undef dprintf -# if HAVE_RAW_DECL_DPRINTF -_GL_WARN_ON_USE (dprintf, "dprintf is unportable - " - "use gnulib module dprintf for portability"); -# endif -#endif - -#if @GNULIB_FCLOSE@ -/* Close STREAM and its underlying file descriptor. */ -# if @REPLACE_FCLOSE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define fclose rpl_fclose -# endif -_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); -# else -_GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); -# endif -_GL_CXXALIASWARN (fclose); -#elif defined GNULIB_POSIXCHECK -# undef fclose -/* Assume fclose is always declared. */ -_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " - "use gnulib module fclose for portable POSIX compliance"); -#endif - -#if @GNULIB_FDOPEN@ -# if @REPLACE_FDOPEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fdopen -# define fdopen rpl_fdopen -# endif -_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); -# else -_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); -# endif -_GL_CXXALIASWARN (fdopen); -#elif defined GNULIB_POSIXCHECK -# undef fdopen -/* Assume fdopen is always declared. */ -_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " - "use gnulib module fdopen for portability"); -#endif - -#if @GNULIB_FFLUSH@ -/* Flush all pending data on STREAM according to POSIX rules. Both - output and seekable input streams are supported. - Note! LOSS OF DATA can occur if fflush is applied on an input stream - that is _not_seekable_ or on an update stream that is _not_seekable_ - and in which the most recent operation was input. Seekability can - be tested with lseek(fileno(fp),0,SEEK_CUR). */ -# if @REPLACE_FFLUSH@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define fflush rpl_fflush -# endif -_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); -_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); -# else -_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); -# endif -_GL_CXXALIASWARN (fflush); -#elif defined GNULIB_POSIXCHECK -# undef fflush -/* Assume fflush is always declared. */ -_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " - "use gnulib module fflush for portable POSIX compliance"); -#endif - -#if @GNULIB_FGETC@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fgetc -# define fgetc rpl_fgetc -# endif -_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); -# else -_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); -# endif -_GL_CXXALIASWARN (fgetc); -#endif - -#if @GNULIB_FGETS@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fgets -# define fgets rpl_fgets -# endif -_GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream) - _GL_ARG_NONNULL ((1, 3))); -_GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); -# else -_GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); -# endif -_GL_CXXALIASWARN (fgets); -#endif - -#if @GNULIB_FOPEN@ -# if @REPLACE_FOPEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fopen -# define fopen rpl_fopen -# endif -_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); -# else -_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); -# endif -_GL_CXXALIASWARN (fopen); -#elif defined GNULIB_POSIXCHECK -# undef fopen -/* Assume fopen is always declared. */ -_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " - "use gnulib module fopen for portability"); -#endif - -#if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ -# if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ - || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define fprintf rpl_fprintf -# endif -# define GNULIB_overrides_fprintf 1 -# if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ -_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -# else -_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); -# else -_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); -# endif -_GL_CXXALIASWARN (fprintf); -#endif -#if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK -# if !GNULIB_overrides_fprintf -# undef fprintf -# endif -/* Assume fprintf is always declared. */ -_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " - "use gnulib module fprintf-posix for portable " - "POSIX compliance"); -#endif - -#if @GNULIB_FPURGE@ -/* Discard all pending buffered I/O data on STREAM. - STREAM must not be wide-character oriented. - When discarding pending output, the file position is set back to where it - was before the write calls. When discarding pending input, the file - position is advanced to match the end of the previously read input. - Return 0 if successful. Upon error, return -1 and set errno. */ -# if @REPLACE_FPURGE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define fpurge rpl_fpurge -# endif -_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); -# else -# if !@HAVE_DECL_FPURGE@ -_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); -# endif -_GL_CXXALIASWARN (fpurge); -#elif defined GNULIB_POSIXCHECK -# undef fpurge -# if HAVE_RAW_DECL_FPURGE -_GL_WARN_ON_USE (fpurge, "fpurge is not always present - " - "use gnulib module fpurge for portability"); -# endif -#endif - -#if @GNULIB_FPUTC@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fputc -# define fputc rpl_fputc -# endif -_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); -# else -_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); -# endif -_GL_CXXALIASWARN (fputc); -#endif - -#if @GNULIB_FPUTS@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fputs -# define fputs rpl_fputs -# endif -_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); -# else -_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); -# endif -_GL_CXXALIASWARN (fputs); -#endif - -#if @GNULIB_FREAD@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fread -# define fread rpl_fread -# endif -_GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream) - _GL_ARG_NONNULL ((4))); -_GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); -# else -_GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); -# endif -_GL_CXXALIASWARN (fread); -#endif - -#if @GNULIB_FREOPEN@ -# if @REPLACE_FREOPEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef freopen -# define freopen rpl_freopen -# endif -_GL_FUNCDECL_RPL (freopen, FILE *, - (const char *filename, const char *mode, FILE *stream) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (freopen, FILE *, - (const char *filename, const char *mode, FILE *stream)); -# else -_GL_CXXALIAS_SYS (freopen, FILE *, - (const char *filename, const char *mode, FILE *stream)); -# endif -_GL_CXXALIASWARN (freopen); -#elif defined GNULIB_POSIXCHECK -# undef freopen -/* Assume freopen is always declared. */ -_GL_WARN_ON_USE (freopen, - "freopen on native Windows platforms is not POSIX compliant - " - "use gnulib module freopen for portability"); -#endif - -#if @GNULIB_FSCANF@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fscanf -# define fscanf rpl_fscanf -# endif -_GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); -# else -_GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); -# endif -_GL_CXXALIASWARN (fscanf); -#endif - - -/* Set up the following warnings, based on which modules are in use. - GNU Coding Standards discourage the use of fseek, since it imposes - an arbitrary limitation on some 32-bit hosts. Remember that the - fseek module depends on the fseeko module, so we only have three - cases to consider: - - 1. The developer is not using either module. Issue a warning under - GNULIB_POSIXCHECK for both functions, to remind them that both - functions have bugs on some systems. _GL_NO_LARGE_FILES has no - impact on this warning. - - 2. The developer is using both modules. They may be unaware of the - arbitrary limitations of fseek, so issue a warning under - GNULIB_POSIXCHECK. On the other hand, they may be using both - modules intentionally, so the developer can define - _GL_NO_LARGE_FILES in the compilation units where the use of fseek - is safe, to silence the warning. - - 3. The developer is using the fseeko module, but not fseek. Gnulib - guarantees that fseek will still work around platform bugs in that - case, but we presume that the developer is aware of the pitfalls of - fseek and was trying to avoid it, so issue a warning even when - GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be - defined to silence the warning in particular compilation units. - In C++ compilations with GNULIB_NAMESPACE, in order to avoid that - fseek gets defined as a macro, it is recommended that the developer - uses the fseek module, even if he is not calling the fseek function. - - Most gnulib clients that perform stream operations should fall into - category 3. */ - -#if @GNULIB_FSEEK@ -# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES -# define _GL_FSEEK_WARN /* Category 2, above. */ -# undef fseek -# endif -# if @REPLACE_FSEEK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fseek -# define fseek rpl_fseek -# endif -_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); -# else -_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); -# endif -_GL_CXXALIASWARN (fseek); -#endif - -#if @GNULIB_FSEEKO@ -# if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES -# define _GL_FSEEK_WARN /* Category 3, above. */ -# undef fseek -# endif -# if @REPLACE_FSEEKO@ -/* Provide an fseeko function that is aware of a preceding fflush(), and which - detects pipes. */ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fseeko -# define fseeko rpl_fseeko -# endif -_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); -# else -# if ! @HAVE_DECL_FSEEKO@ -_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); -# endif -_GL_CXXALIASWARN (fseeko); -#elif defined GNULIB_POSIXCHECK -# define _GL_FSEEK_WARN /* Category 1, above. */ -# undef fseek -# undef fseeko -# if HAVE_RAW_DECL_FSEEKO -_GL_WARN_ON_USE (fseeko, "fseeko is unportable - " - "use gnulib module fseeko for portability"); -# endif -#endif - -#ifdef _GL_FSEEK_WARN -# undef _GL_FSEEK_WARN -/* Here, either fseek is undefined (but C89 guarantees that it is - declared), or it is defined as rpl_fseek (declared above). */ -_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " - "on 32-bit platforms - " - "use fseeko function for handling of large files"); -#endif - - -/* ftell, ftello. See the comments on fseek/fseeko. */ - -#if @GNULIB_FTELL@ -# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES -# define _GL_FTELL_WARN /* Category 2, above. */ -# undef ftell -# endif -# if @REPLACE_FTELL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ftell -# define ftell rpl_ftell -# endif -_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); -# else -_GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); -# endif -_GL_CXXALIASWARN (ftell); -#endif - -#if @GNULIB_FTELLO@ -# if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES -# define _GL_FTELL_WARN /* Category 3, above. */ -# undef ftell -# endif -# if @REPLACE_FTELLO@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ftello -# define ftello rpl_ftello -# endif -_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); -# else -# if ! @HAVE_DECL_FTELLO@ -_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); -# endif -_GL_CXXALIASWARN (ftello); -#elif defined GNULIB_POSIXCHECK -# define _GL_FTELL_WARN /* Category 1, above. */ -# undef ftell -# undef ftello -# if HAVE_RAW_DECL_FTELLO -_GL_WARN_ON_USE (ftello, "ftello is unportable - " - "use gnulib module ftello for portability"); -# endif -#endif - -#ifdef _GL_FTELL_WARN -# undef _GL_FTELL_WARN -/* Here, either ftell is undefined (but C89 guarantees that it is - declared), or it is defined as rpl_ftell (declared above). */ -_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " - "on 32-bit platforms - " - "use ftello function for handling of large files"); -#endif - - -#if @GNULIB_FWRITE@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fwrite -# define fwrite rpl_fwrite -# endif -_GL_FUNCDECL_RPL (fwrite, size_t, - (const void *ptr, size_t s, size_t n, FILE *stream) - _GL_ARG_NONNULL ((1, 4))); -_GL_CXXALIAS_RPL (fwrite, size_t, - (const void *ptr, size_t s, size_t n, FILE *stream)); -# else -_GL_CXXALIAS_SYS (fwrite, size_t, - (const void *ptr, size_t s, size_t n, FILE *stream)); - -/* Work around bug 11959 when fortifying glibc 2.4 through 2.15 - , - which sometimes causes an unwanted diagnostic for fwrite calls. - This affects only function declaration attributes under certain - versions of gcc and clang, and is not needed for C++. */ -# if (0 < __USE_FORTIFY_LEVEL \ - && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ - && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ - && !defined __cplusplus) -# undef fwrite -# undef fwrite_unlocked -extern size_t __REDIRECT (rpl_fwrite, - (const void *__restrict, size_t, size_t, - FILE *__restrict), - fwrite); -extern size_t __REDIRECT (rpl_fwrite_unlocked, - (const void *__restrict, size_t, size_t, - FILE *__restrict), - fwrite_unlocked); -# define fwrite rpl_fwrite -# define fwrite_unlocked rpl_fwrite_unlocked -# endif -# endif -_GL_CXXALIASWARN (fwrite); -#endif - -#if @GNULIB_GETC@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getc -# define getc rpl_fgetc -# endif -_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); -# else -_GL_CXXALIAS_SYS (getc, int, (FILE *stream)); -# endif -_GL_CXXALIASWARN (getc); -#endif - -#if @GNULIB_GETCHAR@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getchar -# define getchar rpl_getchar -# endif -_GL_FUNCDECL_RPL (getchar, int, (void)); -_GL_CXXALIAS_RPL (getchar, int, (void)); -# else -_GL_CXXALIAS_SYS (getchar, int, (void)); -# endif -_GL_CXXALIASWARN (getchar); -#endif - -#if @GNULIB_GETDELIM@ -/* Read input, up to (and including) the next occurrence of DELIMITER, from - STREAM, store it in *LINEPTR (and NUL-terminate it). - *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE - bytes of space. It is realloc'd as necessary. - Return the number of bytes read and stored at *LINEPTR (not including the - NUL terminator), or -1 on error or EOF. */ -# if @REPLACE_GETDELIM@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getdelim -# define getdelim rpl_getdelim -# endif -_GL_FUNCDECL_RPL (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream) - _GL_ARG_NONNULL ((1, 2, 4))); -_GL_CXXALIAS_RPL (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream)); -# else -# if !@HAVE_DECL_GETDELIM@ -_GL_FUNCDECL_SYS (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream) - _GL_ARG_NONNULL ((1, 2, 4))); -# endif -_GL_CXXALIAS_SYS (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream)); -# endif -_GL_CXXALIASWARN (getdelim); -#elif defined GNULIB_POSIXCHECK -# undef getdelim -# if HAVE_RAW_DECL_GETDELIM -_GL_WARN_ON_USE (getdelim, "getdelim is unportable - " - "use gnulib module getdelim for portability"); -# endif -#endif - -#if @GNULIB_GETLINE@ -/* Read a line, up to (and including) the next newline, from STREAM, store it - in *LINEPTR (and NUL-terminate it). - *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE - bytes of space. It is realloc'd as necessary. - Return the number of bytes read and stored at *LINEPTR (not including the - NUL terminator), or -1 on error or EOF. */ -# if @REPLACE_GETLINE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getline -# define getline rpl_getline -# endif -_GL_FUNCDECL_RPL (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream) - _GL_ARG_NONNULL ((1, 2, 3))); -_GL_CXXALIAS_RPL (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream)); -# else -# if !@HAVE_DECL_GETLINE@ -_GL_FUNCDECL_SYS (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream) - _GL_ARG_NONNULL ((1, 2, 3))); -# endif -_GL_CXXALIAS_SYS (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream)); -# endif -# if @HAVE_DECL_GETLINE@ -_GL_CXXALIASWARN (getline); -# endif -#elif defined GNULIB_POSIXCHECK -# undef getline -# if HAVE_RAW_DECL_GETLINE -_GL_WARN_ON_USE (getline, "getline is unportable - " - "use gnulib module getline for portability"); -# endif -#endif - -/* It is very rare that the developer ever has full control of stdin, - so any use of gets warrants an unconditional warning; besides, C11 - removed it. */ -#undef gets -#if HAVE_RAW_DECL_GETS && !defined __cplusplus -_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); -#endif - -#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ -struct obstack; -/* Grow an obstack with formatted output. Return the number of - bytes added to OBS. No trailing nul byte is added, and the - object should be closed with obstack_finish before use. Upon - memory allocation error, call obstack_alloc_failed_handler. Upon - other error, return -1. */ -# if @REPLACE_OBSTACK_PRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define obstack_printf rpl_obstack_printf -# endif -_GL_FUNCDECL_RPL (obstack_printf, int, - (struct obstack *obs, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (obstack_printf, int, - (struct obstack *obs, const char *format, ...)); -# else -# if !@HAVE_DECL_OBSTACK_PRINTF@ -_GL_FUNCDECL_SYS (obstack_printf, int, - (struct obstack *obs, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (obstack_printf, int, - (struct obstack *obs, const char *format, ...)); -# endif -_GL_CXXALIASWARN (obstack_printf); -# if @REPLACE_OBSTACK_PRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define obstack_vprintf rpl_obstack_vprintf -# endif -_GL_FUNCDECL_RPL (obstack_vprintf, int, - (struct obstack *obs, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (obstack_vprintf, int, - (struct obstack *obs, const char *format, va_list args)); -# else -# if !@HAVE_DECL_OBSTACK_PRINTF@ -_GL_FUNCDECL_SYS (obstack_vprintf, int, - (struct obstack *obs, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (obstack_vprintf, int, - (struct obstack *obs, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (obstack_vprintf); -#endif - -#if @GNULIB_PCLOSE@ -# if !@HAVE_PCLOSE@ -_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); -_GL_CXXALIASWARN (pclose); -#elif defined GNULIB_POSIXCHECK -# undef pclose -# if HAVE_RAW_DECL_PCLOSE -_GL_WARN_ON_USE (pclose, "pclose is unportable - " - "use gnulib module pclose for more portability"); -# endif -#endif - -#if @GNULIB_PERROR@ -/* Print a message to standard error, describing the value of ERRNO, - (if STRING is not NULL and not empty) prefixed with STRING and ": ", - and terminated with a newline. */ -# if @REPLACE_PERROR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define perror rpl_perror -# endif -_GL_FUNCDECL_RPL (perror, void, (const char *string)); -_GL_CXXALIAS_RPL (perror, void, (const char *string)); -# else -_GL_CXXALIAS_SYS (perror, void, (const char *string)); -# endif -_GL_CXXALIASWARN (perror); -#elif defined GNULIB_POSIXCHECK -# undef perror -/* Assume perror is always declared. */ -_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " - "use gnulib module perror for portability"); -#endif - -#if @GNULIB_POPEN@ -# if @REPLACE_POPEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef popen -# define popen rpl_popen -# endif -_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); -# else -# if !@HAVE_POPEN@ -_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); -# endif -_GL_CXXALIASWARN (popen); -#elif defined GNULIB_POSIXCHECK -# undef popen -# if HAVE_RAW_DECL_POPEN -_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " - "use gnulib module popen or pipe for more portability"); -# endif -#endif - -#if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ -# if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ - || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) -# if defined __GNUC__ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -/* Don't break __attribute__((format(printf,M,N))). */ -# define printf __printf__ -# endif -# if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ -_GL_FUNCDECL_RPL_1 (__printf__, int, - (const char *format, ...) - __asm__ (@ASM_SYMBOL_PREFIX@ - _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) - _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) - _GL_ARG_NONNULL ((1))); -# else -_GL_FUNCDECL_RPL_1 (__printf__, int, - (const char *format, ...) - __asm__ (@ASM_SYMBOL_PREFIX@ - _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) - _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); -# else -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define printf rpl_printf -# endif -_GL_FUNCDECL_RPL (printf, int, - (const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); -# endif -# define GNULIB_overrides_printf 1 -# else -_GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); -# endif -_GL_CXXALIASWARN (printf); -#endif -#if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK -# if !GNULIB_overrides_printf -# undef printf -# endif -/* Assume printf is always declared. */ -_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " - "use gnulib module printf-posix for portable " - "POSIX compliance"); -#endif - -#if @GNULIB_PUTC@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef putc -# define putc rpl_fputc -# endif -_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); -# else -_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); -# endif -_GL_CXXALIASWARN (putc); -#endif - -#if @GNULIB_PUTCHAR@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef putchar -# define putchar rpl_putchar -# endif -_GL_FUNCDECL_RPL (putchar, int, (int c)); -_GL_CXXALIAS_RPL (putchar, int, (int c)); -# else -_GL_CXXALIAS_SYS (putchar, int, (int c)); -# endif -_GL_CXXALIASWARN (putchar); -#endif - -#if @GNULIB_PUTS@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef puts -# define puts rpl_puts -# endif -_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (puts, int, (const char *string)); -# else -_GL_CXXALIAS_SYS (puts, int, (const char *string)); -# endif -_GL_CXXALIASWARN (puts); -#endif - -#if @GNULIB_REMOVE@ -# if @REPLACE_REMOVE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef remove -# define remove rpl_remove -# endif -_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (remove, int, (const char *name)); -# else -_GL_CXXALIAS_SYS (remove, int, (const char *name)); -# endif -_GL_CXXALIASWARN (remove); -#elif defined GNULIB_POSIXCHECK -# undef remove -/* Assume remove is always declared. */ -_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " - "use gnulib module remove for more portability"); -#endif - -#if @GNULIB_RENAME@ -# if @REPLACE_RENAME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef rename -# define rename rpl_rename -# endif -_GL_FUNCDECL_RPL (rename, int, - (const char *old_filename, const char *new_filename) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (rename, int, - (const char *old_filename, const char *new_filename)); -# else -_GL_CXXALIAS_SYS (rename, int, - (const char *old_filename, const char *new_filename)); -# endif -_GL_CXXALIASWARN (rename); -#elif defined GNULIB_POSIXCHECK -# undef rename -/* Assume rename is always declared. */ -_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " - "use gnulib module rename for more portability"); -#endif - -#if @GNULIB_RENAMEAT@ -# if @REPLACE_RENAMEAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef renameat -# define renameat rpl_renameat -# endif -_GL_FUNCDECL_RPL (renameat, int, - (int fd1, char const *file1, int fd2, char const *file2) - _GL_ARG_NONNULL ((2, 4))); -_GL_CXXALIAS_RPL (renameat, int, - (int fd1, char const *file1, int fd2, char const *file2)); -# else -# if !@HAVE_RENAMEAT@ -_GL_FUNCDECL_SYS (renameat, int, - (int fd1, char const *file1, int fd2, char const *file2) - _GL_ARG_NONNULL ((2, 4))); -# endif -_GL_CXXALIAS_SYS (renameat, int, - (int fd1, char const *file1, int fd2, char const *file2)); -# endif -_GL_CXXALIASWARN (renameat); -#elif defined GNULIB_POSIXCHECK -# undef renameat -# if HAVE_RAW_DECL_RENAMEAT -_GL_WARN_ON_USE (renameat, "renameat is not portable - " - "use gnulib module renameat for portability"); -# endif -#endif - -#if @GNULIB_SCANF@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if defined __GNUC__ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef scanf -/* Don't break __attribute__((format(scanf,M,N))). */ -# define scanf __scanf__ -# endif -_GL_FUNCDECL_RPL_1 (__scanf__, int, - (const char *format, ...) - __asm__ (@ASM_SYMBOL_PREFIX@ - _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) - _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...)); -# else -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef scanf -# define scanf rpl_scanf -# endif -_GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) - _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); -# endif -# else -_GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); -# endif -_GL_CXXALIASWARN (scanf); -#endif - -#if @GNULIB_SNPRINTF@ -# if @REPLACE_SNPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define snprintf rpl_snprintf -# endif -_GL_FUNCDECL_RPL (snprintf, int, - (char *str, size_t size, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) - _GL_ARG_NONNULL ((3))); -_GL_CXXALIAS_RPL (snprintf, int, - (char *str, size_t size, const char *format, ...)); -# else -# if !@HAVE_DECL_SNPRINTF@ -_GL_FUNCDECL_SYS (snprintf, int, - (char *str, size_t size, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) - _GL_ARG_NONNULL ((3))); -# endif -_GL_CXXALIAS_SYS (snprintf, int, - (char *str, size_t size, const char *format, ...)); -# endif -_GL_CXXALIASWARN (snprintf); -#elif defined GNULIB_POSIXCHECK -# undef snprintf -# if HAVE_RAW_DECL_SNPRINTF -_GL_WARN_ON_USE (snprintf, "snprintf is unportable - " - "use gnulib module snprintf for portability"); -# endif -#endif - -/* Some people would argue that all sprintf uses should be warned about - (for example, OpenBSD issues a link warning for it), - since it can cause security holes due to buffer overruns. - However, we believe that sprintf can be used safely, and is more - efficient than snprintf in those safe cases; and as proof of our - belief, we use sprintf in several gnulib modules. So this header - intentionally avoids adding a warning to sprintf except when - GNULIB_POSIXCHECK is defined. */ - -#if @GNULIB_SPRINTF_POSIX@ -# if @REPLACE_SPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define sprintf rpl_sprintf -# endif -_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); -# else -_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); -# endif -_GL_CXXALIASWARN (sprintf); -#elif defined GNULIB_POSIXCHECK -# undef sprintf -/* Assume sprintf is always declared. */ -_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " - "use gnulib module sprintf-posix for portable " - "POSIX compliance"); -#endif - -#if @GNULIB_TMPFILE@ -# if @REPLACE_TMPFILE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define tmpfile rpl_tmpfile -# endif -_GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); -_GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); -# else -_GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); -# endif -_GL_CXXALIASWARN (tmpfile); -#elif defined GNULIB_POSIXCHECK -# undef tmpfile -# if HAVE_RAW_DECL_TMPFILE -_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " - "use gnulib module tmpfile for portability"); -# endif -#endif - -#if @GNULIB_VASPRINTF@ -/* Write formatted output to a string dynamically allocated with malloc(). - If the memory allocation succeeds, store the address of the string in - *RESULT and return the number of resulting bytes, excluding the trailing - NUL. Upon memory allocation error, or some other error, return -1. */ -# if @REPLACE_VASPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define asprintf rpl_asprintf -# endif -_GL_FUNCDECL_RPL (asprintf, int, - (char **result, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (asprintf, int, - (char **result, const char *format, ...)); -# else -# if !@HAVE_VASPRINTF@ -_GL_FUNCDECL_SYS (asprintf, int, - (char **result, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (asprintf, int, - (char **result, const char *format, ...)); -# endif -_GL_CXXALIASWARN (asprintf); -# if @REPLACE_VASPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vasprintf rpl_vasprintf -# endif -_GL_FUNCDECL_RPL (vasprintf, int, - (char **result, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (vasprintf, int, - (char **result, const char *format, va_list args)); -# else -# if !@HAVE_VASPRINTF@ -_GL_FUNCDECL_SYS (vasprintf, int, - (char **result, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (vasprintf, int, - (char **result, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vasprintf); -#endif - -#if @GNULIB_VDPRINTF@ -# if @REPLACE_VDPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vdprintf rpl_vdprintf -# endif -_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); -# else -# if !@HAVE_VDPRINTF@ -_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((2))); -# endif -/* Need to cast, because on Solaris, the third parameter will likely be - __va_list args. */ -_GL_CXXALIAS_SYS_CAST (vdprintf, int, - (int fd, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vdprintf); -#elif defined GNULIB_POSIXCHECK -# undef vdprintf -# if HAVE_RAW_DECL_VDPRINTF -_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " - "use gnulib module vdprintf for portability"); -# endif -#endif - -#if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ -# if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ - || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vfprintf rpl_vfprintf -# endif -# define GNULIB_overrides_vfprintf 1 -# if @GNULIB_VFPRINTF_POSIX@ -_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -# else -_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)); -# else -/* Need to cast, because on Solaris, the third parameter is - __va_list args - and GCC's fixincludes did not change this to __gnuc_va_list. */ -_GL_CXXALIAS_SYS_CAST (vfprintf, int, - (FILE *fp, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vfprintf); -#endif -#if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK -# if !GNULIB_overrides_vfprintf -# undef vfprintf -# endif -/* Assume vfprintf is always declared. */ -_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " - "use gnulib module vfprintf-posix for portable " - "POSIX compliance"); -#endif - -#if @GNULIB_VFSCANF@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef vfscanf -# define vfscanf rpl_vfscanf -# endif -_GL_FUNCDECL_RPL (vfscanf, int, - (FILE *stream, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (vfscanf, int, - (FILE *stream, const char *format, va_list args)); -# else -_GL_CXXALIAS_SYS (vfscanf, int, - (FILE *stream, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vfscanf); -#endif - -#if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ -# if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ - || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vprintf rpl_vprintf -# endif -# define GNULIB_overrides_vprintf 1 -# if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ -_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) - _GL_ARG_NONNULL ((1))); -# else -_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args)); -# else -/* Need to cast, because on Solaris, the second parameter is - __va_list args - and GCC's fixincludes did not change this to __gnuc_va_list. */ -_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vprintf); -#endif -#if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK -# if !GNULIB_overrides_vprintf -# undef vprintf -# endif -/* Assume vprintf is always declared. */ -_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " - "use gnulib module vprintf-posix for portable " - "POSIX compliance"); -#endif - -#if @GNULIB_VSCANF@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef vscanf -# define vscanf rpl_vscanf -# endif -_GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); -# else -_GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vscanf); -#endif - -#if @GNULIB_VSNPRINTF@ -# if @REPLACE_VSNPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vsnprintf rpl_vsnprintf -# endif -_GL_FUNCDECL_RPL (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) - _GL_ARG_NONNULL ((3))); -_GL_CXXALIAS_RPL (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args)); -# else -# if !@HAVE_DECL_VSNPRINTF@ -_GL_FUNCDECL_SYS (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) - _GL_ARG_NONNULL ((3))); -# endif -_GL_CXXALIAS_SYS (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vsnprintf); -#elif defined GNULIB_POSIXCHECK -# undef vsnprintf -# if HAVE_RAW_DECL_VSNPRINTF -_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " - "use gnulib module vsnprintf for portability"); -# endif -#endif - -#if @GNULIB_VSPRINTF_POSIX@ -# if @REPLACE_VSPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vsprintf rpl_vsprintf -# endif -_GL_FUNCDECL_RPL (vsprintf, int, - (char *str, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (vsprintf, int, - (char *str, const char *format, va_list args)); -# else -/* Need to cast, because on Solaris, the third parameter is - __va_list args - and GCC's fixincludes did not change this to __gnuc_va_list. */ -_GL_CXXALIAS_SYS_CAST (vsprintf, int, - (char *str, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vsprintf); -#elif defined GNULIB_POSIXCHECK -# undef vsprintf -/* Assume vsprintf is always declared. */ -_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " - "use gnulib module vsprintf-posix for portable " - "POSIX compliance"); -#endif - -#endif /* _@GUARD_PREFIX@_STDIO_H */ -#endif /* _@GUARD_PREFIX@_STDIO_H */ -#endif diff --git a/gl/stdlib.in.h b/gl/stdlib.in.h deleted file mode 100644 index c275683906..0000000000 --- a/gl/stdlib.in.h +++ /dev/null @@ -1,992 +0,0 @@ -/* A GNU-like . - - Copyright (C) 1995, 2001-2004, 2006-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined __need_system_stdlib_h || defined __need_malloc_and_calloc -/* Special invocation conventions inside some gnulib header files, - and inside some glibc header files, respectively. */ - -#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_STDLIB_H - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ - -#ifndef _@GUARD_PREFIX@_STDLIB_H -#define _@GUARD_PREFIX@_STDLIB_H - -/* NetBSD 5.0 mis-defines NULL. */ -#include - -/* MirBSD 10 defines WEXITSTATUS in , not in . */ -#if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS -# include -#endif - -/* Solaris declares getloadavg() in . */ -#if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ -# include -#endif - -/* Native Windows platforms declare mktemp() in . */ -#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) -# include -#endif - -#if @GNULIB_RANDOM_R@ - -/* OSF/1 5.1 declares 'struct random_data' in , which is included - from if _REENTRANT is defined. Include it whenever we need - 'struct random_data'. */ -# if @HAVE_RANDOM_H@ -# include -# endif - -# if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@ -# include -# endif - -# if !@HAVE_STRUCT_RANDOM_DATA@ -/* Define 'struct random_data'. - But allow multiple gnulib generated replacements to coexist. */ -# if !GNULIB_defined_struct_random_data -struct random_data -{ - int32_t *fptr; /* Front pointer. */ - int32_t *rptr; /* Rear pointer. */ - int32_t *state; /* Array of state values. */ - int rand_type; /* Type of random number generator. */ - int rand_deg; /* Degree of random number generator. */ - int rand_sep; /* Distance between front and rear. */ - int32_t *end_ptr; /* Pointer behind state table. */ -}; -# define GNULIB_defined_struct_random_data 1 -# endif -# endif -#endif - -#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) -/* On Mac OS X 10.3, only declares mkstemp. */ -/* On Mac OS X 10.5, only declares mkstemps. */ -/* On Cygwin 1.7.1, only declares getsubopt. */ -/* But avoid namespace pollution on glibc systems and native Windows. */ -# include -#endif - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The attribute __pure__ was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ -#endif - -/* The definition of _Noreturn is copied here. */ - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - -/* Some systems do not define EXIT_*, despite otherwise supporting C89. */ -#ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -#endif -/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere - with proper operation of xargs. */ -#ifndef EXIT_FAILURE -# define EXIT_FAILURE 1 -#elif EXIT_FAILURE != 1 -# undef EXIT_FAILURE -# define EXIT_FAILURE 1 -#endif - - -#if @GNULIB__EXIT@ -/* Terminate the current process with the given return code, without running - the 'atexit' handlers. */ -# if !@HAVE__EXIT@ -_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); -# endif -_GL_CXXALIAS_SYS (_Exit, void, (int status)); -_GL_CXXALIASWARN (_Exit); -#elif defined GNULIB_POSIXCHECK -# undef _Exit -# if HAVE_RAW_DECL__EXIT -_GL_WARN_ON_USE (_Exit, "_Exit is unportable - " - "use gnulib module _Exit for portability"); -# endif -#endif - - -#if @GNULIB_ATOLL@ -/* Parse a signed decimal integer. - Returns the value of the integer. Errors are not detected. */ -# if !@HAVE_ATOLL@ -_GL_FUNCDECL_SYS (atoll, long long, (const char *string) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (atoll, long long, (const char *string)); -_GL_CXXALIASWARN (atoll); -#elif defined GNULIB_POSIXCHECK -# undef atoll -# if HAVE_RAW_DECL_ATOLL -_GL_WARN_ON_USE (atoll, "atoll is unportable - " - "use gnulib module atoll for portability"); -# endif -#endif - -#if @GNULIB_CALLOC_POSIX@ -# if @REPLACE_CALLOC@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef calloc -# define calloc rpl_calloc -# endif -_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size)); -_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); -# else -_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); -# endif -_GL_CXXALIASWARN (calloc); -#elif defined GNULIB_POSIXCHECK -# undef calloc -/* Assume calloc is always declared. */ -_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " - "use gnulib module calloc-posix for portability"); -#endif - -#if @GNULIB_CANONICALIZE_FILE_NAME@ -# if @REPLACE_CANONICALIZE_FILE_NAME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define canonicalize_file_name rpl_canonicalize_file_name -# endif -_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); -# else -# if !@HAVE_CANONICALIZE_FILE_NAME@ -_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); -# endif -_GL_CXXALIASWARN (canonicalize_file_name); -#elif defined GNULIB_POSIXCHECK -# undef canonicalize_file_name -# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME -_GL_WARN_ON_USE (canonicalize_file_name, - "canonicalize_file_name is unportable - " - "use gnulib module canonicalize-lgpl for portability"); -# endif -#endif - -#if @GNULIB_GETLOADAVG@ -/* Store max(NELEM,3) load average numbers in LOADAVG[]. - The three numbers are the load average of the last 1 minute, the last 5 - minutes, and the last 15 minutes, respectively. - LOADAVG is an array of NELEM numbers. */ -# if !@HAVE_DECL_GETLOADAVG@ -_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); -_GL_CXXALIASWARN (getloadavg); -#elif defined GNULIB_POSIXCHECK -# undef getloadavg -# if HAVE_RAW_DECL_GETLOADAVG -_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " - "use gnulib module getloadavg for portability"); -# endif -#endif - -#if @GNULIB_GETSUBOPT@ -/* Assuming *OPTIONP is a comma separated list of elements of the form - "token" or "token=value", getsubopt parses the first of these elements. - If the first element refers to a "token" that is member of the given - NULL-terminated array of tokens: - - It replaces the comma with a NUL byte, updates *OPTIONP to point past - the first option and the comma, sets *VALUEP to the value of the - element (or NULL if it doesn't contain an "=" sign), - - It returns the index of the "token" in the given array of tokens. - Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. - For more details see the POSIX:2001 specification. - http://www.opengroup.org/susv3xsh/getsubopt.html */ -# if !@HAVE_GETSUBOPT@ -_GL_FUNCDECL_SYS (getsubopt, int, - (char **optionp, char *const *tokens, char **valuep) - _GL_ARG_NONNULL ((1, 2, 3))); -# endif -_GL_CXXALIAS_SYS (getsubopt, int, - (char **optionp, char *const *tokens, char **valuep)); -_GL_CXXALIASWARN (getsubopt); -#elif defined GNULIB_POSIXCHECK -# undef getsubopt -# if HAVE_RAW_DECL_GETSUBOPT -_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " - "use gnulib module getsubopt for portability"); -# endif -#endif - -#if @GNULIB_GRANTPT@ -/* Change the ownership and access permission of the slave side of the - pseudo-terminal whose master side is specified by FD. */ -# if !@HAVE_GRANTPT@ -_GL_FUNCDECL_SYS (grantpt, int, (int fd)); -# endif -_GL_CXXALIAS_SYS (grantpt, int, (int fd)); -_GL_CXXALIASWARN (grantpt); -#elif defined GNULIB_POSIXCHECK -# undef grantpt -# if HAVE_RAW_DECL_GRANTPT -_GL_WARN_ON_USE (grantpt, "grantpt is not portable - " - "use gnulib module grantpt for portability"); -# endif -#endif - -/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not - rely on GNU or POSIX semantics for malloc and realloc (for example, - by never specifying a zero size), so it does not need malloc or - realloc to be redefined. */ -#if @GNULIB_MALLOC_POSIX@ -# if @REPLACE_MALLOC@ -# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ - || _GL_USE_STDLIB_ALLOC) -# undef malloc -# define malloc rpl_malloc -# endif -_GL_FUNCDECL_RPL (malloc, void *, (size_t size)); -_GL_CXXALIAS_RPL (malloc, void *, (size_t size)); -# else -_GL_CXXALIAS_SYS (malloc, void *, (size_t size)); -# endif -_GL_CXXALIASWARN (malloc); -#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC -# undef malloc -/* Assume malloc is always declared. */ -_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " - "use gnulib module malloc-posix for portability"); -#endif - -/* Convert a multibyte character to a wide character. */ -#if @GNULIB_MBTOWC@ -# if @REPLACE_MBTOWC@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbtowc -# define mbtowc rpl_mbtowc -# endif -_GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); -_GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); -# else -_GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); -# endif -_GL_CXXALIASWARN (mbtowc); -#endif - -#if @GNULIB_MKDTEMP@ -/* Create a unique temporary directory from TEMPLATE. - The last six characters of TEMPLATE must be "XXXXXX"; - they are replaced with a string that makes the directory name unique. - Returns TEMPLATE, or a null pointer if it cannot get a unique name. - The directory is created mode 700. */ -# if !@HAVE_MKDTEMP@ -_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); -_GL_CXXALIASWARN (mkdtemp); -#elif defined GNULIB_POSIXCHECK -# undef mkdtemp -# if HAVE_RAW_DECL_MKDTEMP -_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " - "use gnulib module mkdtemp for portability"); -# endif -#endif - -#if @GNULIB_MKOSTEMP@ -/* Create a unique temporary file from TEMPLATE. - The last six characters of TEMPLATE must be "XXXXXX"; - they are replaced with a string that makes the file name unique. - The flags are a bitmask, possibly including O_CLOEXEC (defined in ) - and O_TEXT, O_BINARY (defined in "binary-io.h"). - The file is then created, with the specified flags, ensuring it didn't exist - before. - The file is created read-write (mask at least 0600 & ~umask), but it may be - world-readable and world-writable (mask 0666 & ~umask), depending on the - implementation. - Returns the open file descriptor if successful, otherwise -1 and errno - set. */ -# if !@HAVE_MKOSTEMP@ -_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); -_GL_CXXALIASWARN (mkostemp); -#elif defined GNULIB_POSIXCHECK -# undef mkostemp -# if HAVE_RAW_DECL_MKOSTEMP -_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " - "use gnulib module mkostemp for portability"); -# endif -#endif - -#if @GNULIB_MKOSTEMPS@ -/* Create a unique temporary file from TEMPLATE. - The last six characters of TEMPLATE before a suffix of length - SUFFIXLEN must be "XXXXXX"; - they are replaced with a string that makes the file name unique. - The flags are a bitmask, possibly including O_CLOEXEC (defined in ) - and O_TEXT, O_BINARY (defined in "binary-io.h"). - The file is then created, with the specified flags, ensuring it didn't exist - before. - The file is created read-write (mask at least 0600 & ~umask), but it may be - world-readable and world-writable (mask 0666 & ~umask), depending on the - implementation. - Returns the open file descriptor if successful, otherwise -1 and errno - set. */ -# if !@HAVE_MKOSTEMPS@ -_GL_FUNCDECL_SYS (mkostemps, int, - (char * /*template*/, int /*suffixlen*/, int /*flags*/) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkostemps, int, - (char * /*template*/, int /*suffixlen*/, int /*flags*/)); -_GL_CXXALIASWARN (mkostemps); -#elif defined GNULIB_POSIXCHECK -# undef mkostemps -# if HAVE_RAW_DECL_MKOSTEMPS -_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " - "use gnulib module mkostemps for portability"); -# endif -#endif - -#if @GNULIB_MKSTEMP@ -/* Create a unique temporary file from TEMPLATE. - The last six characters of TEMPLATE must be "XXXXXX"; - they are replaced with a string that makes the file name unique. - The file is then created, ensuring it didn't exist before. - The file is created read-write (mask at least 0600 & ~umask), but it may be - world-readable and world-writable (mask 0666 & ~umask), depending on the - implementation. - Returns the open file descriptor if successful, otherwise -1 and errno - set. */ -# if @REPLACE_MKSTEMP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mkstemp rpl_mkstemp -# endif -_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); -# else -# if ! @HAVE_MKSTEMP@ -_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); -# endif -_GL_CXXALIASWARN (mkstemp); -#elif defined GNULIB_POSIXCHECK -# undef mkstemp -# if HAVE_RAW_DECL_MKSTEMP -_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " - "use gnulib module mkstemp for portability"); -# endif -#endif - -#if @GNULIB_MKSTEMPS@ -/* Create a unique temporary file from TEMPLATE. - The last six characters of TEMPLATE prior to a suffix of length - SUFFIXLEN must be "XXXXXX"; - they are replaced with a string that makes the file name unique. - The file is then created, ensuring it didn't exist before. - The file is created read-write (mask at least 0600 & ~umask), but it may be - world-readable and world-writable (mask 0666 & ~umask), depending on the - implementation. - Returns the open file descriptor if successful, otherwise -1 and errno - set. */ -# if !@HAVE_MKSTEMPS@ -_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); -_GL_CXXALIASWARN (mkstemps); -#elif defined GNULIB_POSIXCHECK -# undef mkstemps -# if HAVE_RAW_DECL_MKSTEMPS -_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " - "use gnulib module mkstemps for portability"); -# endif -#endif - -#if @GNULIB_POSIX_OPENPT@ -/* Return an FD open to the master side of a pseudo-terminal. Flags should - include O_RDWR, and may also include O_NOCTTY. */ -# if !@HAVE_POSIX_OPENPT@ -_GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); -# endif -_GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); -_GL_CXXALIASWARN (posix_openpt); -#elif defined GNULIB_POSIXCHECK -# undef posix_openpt -# if HAVE_RAW_DECL_POSIX_OPENPT -_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " - "use gnulib module posix_openpt for portability"); -# endif -#endif - -#if @GNULIB_PTSNAME@ -/* Return the pathname of the pseudo-terminal slave associated with - the master FD is open on, or NULL on errors. */ -# if @REPLACE_PTSNAME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ptsname -# define ptsname rpl_ptsname -# endif -_GL_FUNCDECL_RPL (ptsname, char *, (int fd)); -_GL_CXXALIAS_RPL (ptsname, char *, (int fd)); -# else -# if !@HAVE_PTSNAME@ -_GL_FUNCDECL_SYS (ptsname, char *, (int fd)); -# endif -_GL_CXXALIAS_SYS (ptsname, char *, (int fd)); -# endif -_GL_CXXALIASWARN (ptsname); -#elif defined GNULIB_POSIXCHECK -# undef ptsname -# if HAVE_RAW_DECL_PTSNAME -_GL_WARN_ON_USE (ptsname, "ptsname is not portable - " - "use gnulib module ptsname for portability"); -# endif -#endif - -#if @GNULIB_PTSNAME_R@ -/* Set the pathname of the pseudo-terminal slave associated with - the master FD is open on and return 0, or set errno and return - non-zero on errors. */ -# if @REPLACE_PTSNAME_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ptsname_r -# define ptsname_r rpl_ptsname_r -# endif -_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); -_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); -# else -# if !@HAVE_PTSNAME_R@ -_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); -# endif -_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); -# endif -_GL_CXXALIASWARN (ptsname_r); -#elif defined GNULIB_POSIXCHECK -# undef ptsname_r -# if HAVE_RAW_DECL_PTSNAME_R -_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " - "use gnulib module ptsname_r for portability"); -# endif -#endif - -#if @GNULIB_PUTENV@ -# if @REPLACE_PUTENV@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef putenv -# define putenv rpl_putenv -# endif -_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (putenv, int, (char *string)); -# else -_GL_CXXALIAS_SYS (putenv, int, (char *string)); -# endif -_GL_CXXALIASWARN (putenv); -#endif - -#if @GNULIB_QSORT_R@ -/* Sort an array of NMEMB elements, starting at address BASE, each element - occupying SIZE bytes, in ascending order according to the comparison - function COMPARE. */ -# if @REPLACE_QSORT_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef qsort_r -# define qsort_r rpl_qsort_r -# endif -_GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, - int (*compare) (void const *, void const *, - void *), - void *arg) _GL_ARG_NONNULL ((1, 4))); -_GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, - int (*compare) (void const *, void const *, - void *), - void *arg)); -# else -# if !@HAVE_QSORT_R@ -_GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, - int (*compare) (void const *, void const *, - void *), - void *arg) _GL_ARG_NONNULL ((1, 4))); -# endif -_GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, - int (*compare) (void const *, void const *, - void *), - void *arg)); -# endif -_GL_CXXALIASWARN (qsort_r); -#elif defined GNULIB_POSIXCHECK -# undef qsort_r -# if HAVE_RAW_DECL_QSORT_R -_GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " - "use gnulib module qsort_r for portability"); -# endif -#endif - - -#if @GNULIB_RANDOM_R@ -# if !@HAVE_RANDOM_R@ -# ifndef RAND_MAX -# define RAND_MAX 2147483647 -# endif -# endif -#endif - - -#if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ -_GL_FUNCDECL_SYS (random, long, (void)); -# endif -_GL_CXXALIAS_SYS (random, long, (void)); -_GL_CXXALIASWARN (random); -#elif defined GNULIB_POSIXCHECK -# undef random -# if HAVE_RAW_DECL_RANDOM -_GL_WARN_ON_USE (random, "random is unportable - " - "use gnulib module random for portability"); -# endif -#endif - -#if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ -_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); -# endif -_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed)); -_GL_CXXALIASWARN (srandom); -#elif defined GNULIB_POSIXCHECK -# undef srandom -# if HAVE_RAW_DECL_SRANDOM -_GL_WARN_ON_USE (srandom, "srandom is unportable - " - "use gnulib module random for portability"); -# endif -#endif - -#if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ -_GL_FUNCDECL_SYS (initstate, char *, - (unsigned int seed, char *buf, size_t buf_size) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (initstate, char *, - (unsigned int seed, char *buf, size_t buf_size)); -_GL_CXXALIASWARN (initstate); -#elif defined GNULIB_POSIXCHECK -# undef initstate -# if HAVE_RAW_DECL_INITSTATE_R -_GL_WARN_ON_USE (initstate, "initstate is unportable - " - "use gnulib module random for portability"); -# endif -#endif - -#if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ -_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state)); -_GL_CXXALIASWARN (setstate); -#elif defined GNULIB_POSIXCHECK -# undef setstate -# if HAVE_RAW_DECL_SETSTATE_R -_GL_WARN_ON_USE (setstate, "setstate is unportable - " - "use gnulib module random for portability"); -# endif -#endif - - -#if @GNULIB_RANDOM_R@ -# if @REPLACE_RANDOM_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef random_r -# define random_r rpl_random_r -# endif -_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); -# else -# if !@HAVE_RANDOM_R@ -_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); -# endif -_GL_CXXALIASWARN (random_r); -#elif defined GNULIB_POSIXCHECK -# undef random_r -# if HAVE_RAW_DECL_RANDOM_R -_GL_WARN_ON_USE (random_r, "random_r is unportable - " - "use gnulib module random_r for portability"); -# endif -#endif - -#if @GNULIB_RANDOM_R@ -# if @REPLACE_RANDOM_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef srandom_r -# define srandom_r rpl_srandom_r -# endif -_GL_FUNCDECL_RPL (srandom_r, int, - (unsigned int seed, struct random_data *rand_state) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (srandom_r, int, - (unsigned int seed, struct random_data *rand_state)); -# else -# if !@HAVE_RANDOM_R@ -_GL_FUNCDECL_SYS (srandom_r, int, - (unsigned int seed, struct random_data *rand_state) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (srandom_r, int, - (unsigned int seed, struct random_data *rand_state)); -# endif -_GL_CXXALIASWARN (srandom_r); -#elif defined GNULIB_POSIXCHECK -# undef srandom_r -# if HAVE_RAW_DECL_SRANDOM_R -_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " - "use gnulib module random_r for portability"); -# endif -#endif - -#if @GNULIB_RANDOM_R@ -# if @REPLACE_RANDOM_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef initstate_r -# define initstate_r rpl_initstate_r -# endif -_GL_FUNCDECL_RPL (initstate_r, int, - (unsigned int seed, char *buf, size_t buf_size, - struct random_data *rand_state) - _GL_ARG_NONNULL ((2, 4))); -_GL_CXXALIAS_RPL (initstate_r, int, - (unsigned int seed, char *buf, size_t buf_size, - struct random_data *rand_state)); -# else -# if !@HAVE_RANDOM_R@ -_GL_FUNCDECL_SYS (initstate_r, int, - (unsigned int seed, char *buf, size_t buf_size, - struct random_data *rand_state) - _GL_ARG_NONNULL ((2, 4))); -# endif -_GL_CXXALIAS_SYS (initstate_r, int, - (unsigned int seed, char *buf, size_t buf_size, - struct random_data *rand_state)); -# endif -_GL_CXXALIASWARN (initstate_r); -#elif defined GNULIB_POSIXCHECK -# undef initstate_r -# if HAVE_RAW_DECL_INITSTATE_R -_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " - "use gnulib module random_r for portability"); -# endif -#endif - -#if @GNULIB_RANDOM_R@ -# if @REPLACE_RANDOM_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef setstate_r -# define setstate_r rpl_setstate_r -# endif -_GL_FUNCDECL_RPL (setstate_r, int, - (char *arg_state, struct random_data *rand_state) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (setstate_r, int, - (char *arg_state, struct random_data *rand_state)); -# else -# if !@HAVE_RANDOM_R@ -_GL_FUNCDECL_SYS (setstate_r, int, - (char *arg_state, struct random_data *rand_state) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (setstate_r, int, - (char *arg_state, struct random_data *rand_state)); -# endif -_GL_CXXALIASWARN (setstate_r); -#elif defined GNULIB_POSIXCHECK -# undef setstate_r -# if HAVE_RAW_DECL_SETSTATE_R -_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " - "use gnulib module random_r for portability"); -# endif -#endif - - -#if @GNULIB_REALLOC_POSIX@ -# if @REPLACE_REALLOC@ -# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ - || _GL_USE_STDLIB_ALLOC) -# undef realloc -# define realloc rpl_realloc -# endif -_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)); -_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); -# else -_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); -# endif -_GL_CXXALIASWARN (realloc); -#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC -# undef realloc -/* Assume realloc is always declared. */ -_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " - "use gnulib module realloc-posix for portability"); -#endif - -#if @GNULIB_REALPATH@ -# if @REPLACE_REALPATH@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define realpath rpl_realpath -# endif -_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); -# else -# if !@HAVE_REALPATH@ -_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved)); -# endif -_GL_CXXALIASWARN (realpath); -#elif defined GNULIB_POSIXCHECK -# undef realpath -# if HAVE_RAW_DECL_REALPATH -_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " - "canonicalize or canonicalize-lgpl for portability"); -# endif -#endif - -#if @GNULIB_RPMATCH@ -/* Test a user response to a question. - Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ -# if !@HAVE_RPMATCH@ -_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); -_GL_CXXALIASWARN (rpmatch); -#elif defined GNULIB_POSIXCHECK -# undef rpmatch -# if HAVE_RAW_DECL_RPMATCH -_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " - "use gnulib module rpmatch for portability"); -# endif -#endif - -#if @GNULIB_SECURE_GETENV@ -/* Look up NAME in the environment, returning 0 in insecure situations. */ -# if !@HAVE_SECURE_GETENV@ -_GL_FUNCDECL_SYS (secure_getenv, char *, - (char const *name) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); -_GL_CXXALIASWARN (secure_getenv); -#elif defined GNULIB_POSIXCHECK -# undef secure_getenv -# if HAVE_RAW_DECL_SECURE_GETENV -_GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " - "use gnulib module secure_getenv for portability"); -# endif -#endif - -#if @GNULIB_SETENV@ -/* Set NAME to VALUE in the environment. - If REPLACE is nonzero, overwrite an existing value. */ -# if @REPLACE_SETENV@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef setenv -# define setenv rpl_setenv -# endif -_GL_FUNCDECL_RPL (setenv, int, - (const char *name, const char *value, int replace) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (setenv, int, - (const char *name, const char *value, int replace)); -# else -# if !@HAVE_DECL_SETENV@ -_GL_FUNCDECL_SYS (setenv, int, - (const char *name, const char *value, int replace) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (setenv, int, - (const char *name, const char *value, int replace)); -# endif -# if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) -_GL_CXXALIASWARN (setenv); -# endif -#elif defined GNULIB_POSIXCHECK -# undef setenv -# if HAVE_RAW_DECL_SETENV -_GL_WARN_ON_USE (setenv, "setenv is unportable - " - "use gnulib module setenv for portability"); -# endif -#endif - -#if @GNULIB_STRTOD@ - /* Parse a double from STRING, updating ENDP if appropriate. */ -# if @REPLACE_STRTOD@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define strtod rpl_strtod -# endif -_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); -# else -# if !@HAVE_STRTOD@ -_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); -# endif -_GL_CXXALIASWARN (strtod); -#elif defined GNULIB_POSIXCHECK -# undef strtod -# if HAVE_RAW_DECL_STRTOD -_GL_WARN_ON_USE (strtod, "strtod is unportable - " - "use gnulib module strtod for portability"); -# endif -#endif - -#if @GNULIB_STRTOLL@ -/* Parse a signed integer whose textual representation starts at STRING. - The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, - it may be decimal or octal (with prefix "0") or hexadecimal (with prefix - "0x"). - If ENDPTR is not NULL, the address of the first byte after the integer is - stored in *ENDPTR. - Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set - to ERANGE. */ -# if !@HAVE_STRTOLL@ -_GL_FUNCDECL_SYS (strtoll, long long, - (const char *string, char **endptr, int base) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strtoll, long long, - (const char *string, char **endptr, int base)); -_GL_CXXALIASWARN (strtoll); -#elif defined GNULIB_POSIXCHECK -# undef strtoll -# if HAVE_RAW_DECL_STRTOLL -_GL_WARN_ON_USE (strtoll, "strtoll is unportable - " - "use gnulib module strtoll for portability"); -# endif -#endif - -#if @GNULIB_STRTOULL@ -/* Parse an unsigned integer whose textual representation starts at STRING. - The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, - it may be decimal or octal (with prefix "0") or hexadecimal (with prefix - "0x"). - If ENDPTR is not NULL, the address of the first byte after the integer is - stored in *ENDPTR. - Upon overflow, the return value is ULLONG_MAX, and errno is set to - ERANGE. */ -# if !@HAVE_STRTOULL@ -_GL_FUNCDECL_SYS (strtoull, unsigned long long, - (const char *string, char **endptr, int base) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strtoull, unsigned long long, - (const char *string, char **endptr, int base)); -_GL_CXXALIASWARN (strtoull); -#elif defined GNULIB_POSIXCHECK -# undef strtoull -# if HAVE_RAW_DECL_STRTOULL -_GL_WARN_ON_USE (strtoull, "strtoull is unportable - " - "use gnulib module strtoull for portability"); -# endif -#endif - -#if @GNULIB_UNLOCKPT@ -/* Unlock the slave side of the pseudo-terminal whose master side is specified - by FD, so that it can be opened. */ -# if !@HAVE_UNLOCKPT@ -_GL_FUNCDECL_SYS (unlockpt, int, (int fd)); -# endif -_GL_CXXALIAS_SYS (unlockpt, int, (int fd)); -_GL_CXXALIASWARN (unlockpt); -#elif defined GNULIB_POSIXCHECK -# undef unlockpt -# if HAVE_RAW_DECL_UNLOCKPT -_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " - "use gnulib module unlockpt for portability"); -# endif -#endif - -#if @GNULIB_UNSETENV@ -/* Remove the variable NAME from the environment. */ -# if @REPLACE_UNSETENV@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef unsetenv -# define unsetenv rpl_unsetenv -# endif -_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); -# else -# if !@HAVE_DECL_UNSETENV@ -_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); -# endif -# if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) -_GL_CXXALIASWARN (unsetenv); -# endif -#elif defined GNULIB_POSIXCHECK -# undef unsetenv -# if HAVE_RAW_DECL_UNSETENV -_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " - "use gnulib module unsetenv for portability"); -# endif -#endif - -/* Convert a wide character to a multibyte character. */ -#if @GNULIB_WCTOMB@ -# if @REPLACE_WCTOMB@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wctomb -# define wctomb rpl_wctomb -# endif -_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); -_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); -# else -_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); -# endif -_GL_CXXALIASWARN (wctomb); -#endif - - -#endif /* _@GUARD_PREFIX@_STDLIB_H */ -#endif /* _@GUARD_PREFIX@_STDLIB_H */ -#endif diff --git a/gl/str-two-way.h b/gl/str-two-way.h deleted file mode 100644 index 43b5a7e2b6..0000000000 --- a/gl/str-two-way.h +++ /dev/null @@ -1,452 +0,0 @@ -/* Byte-wise substring search, using the Two-Way algorithm. - Copyright (C) 2008-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Written by Eric Blake , 2008. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -/* Before including this file, you need to include and - , and define: - RESULT_TYPE A macro that expands to the return type. - AVAILABLE(h, h_l, j, n_l) - A macro that returns nonzero if there are - at least N_L bytes left starting at H[J]. - H is 'unsigned char *', H_L, J, and N_L - are 'size_t'; H_L is an lvalue. For - NUL-terminated searches, H_L can be - modified each iteration to avoid having - to compute the end of H up front. - - For case-insensitivity, you may optionally define: - CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L - characters of P1 and P2 are equal. - CANON_ELEMENT(c) A macro that canonicalizes an element right after - it has been fetched from one of the two strings. - The argument is an 'unsigned char'; the result - must be an 'unsigned char' as well. - - This file undefines the macros documented above, and defines - LONG_NEEDLE_THRESHOLD. -*/ - -#include -#include - -/* We use the Two-Way string matching algorithm (also known as - Chrochemore-Perrin), which guarantees linear complexity with - constant space. Additionally, for long needles, we also use a bad - character shift table similar to the Boyer-Moore algorithm to - achieve improved (potentially sub-linear) performance. - - See http://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260, - http://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm, - http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.34.6641&rep=rep1&type=pdf -*/ - -/* Point at which computing a bad-byte shift table is likely to be - worthwhile. Small needles should not compute a table, since it - adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a - speedup no greater than a factor of NEEDLE_LEN. The larger the - needle, the better the potential performance gain. On the other - hand, on non-POSIX systems with CHAR_BIT larger than eight, the - memory required for the table is prohibitive. */ -#if CHAR_BIT < 10 -# define LONG_NEEDLE_THRESHOLD 32U -#else -# define LONG_NEEDLE_THRESHOLD SIZE_MAX -#endif - -#ifndef MAX -# define MAX(a, b) ((a < b) ? (b) : (a)) -#endif - -#ifndef CANON_ELEMENT -# define CANON_ELEMENT(c) c -#endif -#ifndef CMP_FUNC -# define CMP_FUNC memcmp -#endif - -/* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN. - Return the index of the first byte in the right half, and set - *PERIOD to the global period of the right half. - - The global period of a string is the smallest index (possibly its - length) at which all remaining bytes in the string are repetitions - of the prefix (the last repetition may be a subset of the prefix). - - When NEEDLE is factored into two halves, a local period is the - length of the smallest word that shares a suffix with the left half - and shares a prefix with the right half. All factorizations of a - non-empty NEEDLE have a local period of at least 1 and no greater - than NEEDLE_LEN. - - A critical factorization has the property that the local period - equals the global period. All strings have at least one critical - factorization with the left half smaller than the global period. - And while some strings have more than one critical factorization, - it is provable that with an ordered alphabet, at least one of the - critical factorizations corresponds to a maximal suffix. - - Given an ordered alphabet, a critical factorization can be computed - in linear time, with 2 * NEEDLE_LEN comparisons, by computing the - shorter of two ordered maximal suffixes. The ordered maximal - suffixes are determined by lexicographic comparison while tracking - periodicity. */ -static size_t -critical_factorization (const unsigned char *needle, size_t needle_len, - size_t *period) -{ - /* Index of last byte of left half, or SIZE_MAX. */ - size_t max_suffix, max_suffix_rev; - size_t j; /* Index into NEEDLE for current candidate suffix. */ - size_t k; /* Offset into current period. */ - size_t p; /* Intermediate period. */ - unsigned char a, b; /* Current comparison bytes. */ - - /* Special case NEEDLE_LEN of 1 or 2 (all callers already filtered - out 0-length needles. */ - if (needle_len < 3) - { - *period = 1; - return needle_len - 1; - } - - /* Invariants: - 0 <= j < NEEDLE_LEN - 1 - -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed) - min(max_suffix, max_suffix_rev) < global period of NEEDLE - 1 <= p <= global period of NEEDLE - p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j] - 1 <= k <= p - */ - - /* Perform lexicographic search. */ - max_suffix = SIZE_MAX; - j = 0; - k = p = 1; - while (j + k < needle_len) - { - a = CANON_ELEMENT (needle[j + k]); - b = CANON_ELEMENT (needle[max_suffix + k]); - if (a < b) - { - /* Suffix is smaller, period is entire prefix so far. */ - j += k; - k = 1; - p = j - max_suffix; - } - else if (a == b) - { - /* Advance through repetition of the current period. */ - if (k != p) - ++k; - else - { - j += p; - k = 1; - } - } - else /* b < a */ - { - /* Suffix is larger, start over from current location. */ - max_suffix = j++; - k = p = 1; - } - } - *period = p; - - /* Perform reverse lexicographic search. */ - max_suffix_rev = SIZE_MAX; - j = 0; - k = p = 1; - while (j + k < needle_len) - { - a = CANON_ELEMENT (needle[j + k]); - b = CANON_ELEMENT (needle[max_suffix_rev + k]); - if (b < a) - { - /* Suffix is smaller, period is entire prefix so far. */ - j += k; - k = 1; - p = j - max_suffix_rev; - } - else if (a == b) - { - /* Advance through repetition of the current period. */ - if (k != p) - ++k; - else - { - j += p; - k = 1; - } - } - else /* a < b */ - { - /* Suffix is larger, start over from current location. */ - max_suffix_rev = j++; - k = p = 1; - } - } - - /* Choose the shorter suffix. Return the index of the first byte of - the right half, rather than the last byte of the left half. - - For some examples, 'banana' has two critical factorizations, both - exposed by the two lexicographic extreme suffixes of 'anana' and - 'nana', where both suffixes have a period of 2. On the other - hand, with 'aab' and 'bba', both strings have a single critical - factorization of the last byte, with the suffix having a period - of 1. While the maximal lexicographic suffix of 'aab' is 'b', - the maximal lexicographic suffix of 'bba' is 'ba', which is not a - critical factorization. Conversely, the maximal reverse - lexicographic suffix of 'a' works for 'bba', but not 'ab' for - 'aab'. The shorter suffix of the two will always be a critical - factorization. */ - if (max_suffix_rev + 1 < max_suffix + 1) - return max_suffix + 1; - *period = p; - return max_suffix_rev + 1; -} - -/* Return the first location of non-empty NEEDLE within HAYSTACK, or - NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This - method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD. - Performance is guaranteed to be linear, with an initialization cost - of 2 * NEEDLE_LEN comparisons. - - If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at - most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. - If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * - HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */ -static RETURN_TYPE -two_way_short_needle (const unsigned char *haystack, size_t haystack_len, - const unsigned char *needle, size_t needle_len) -{ - size_t i; /* Index into current byte of NEEDLE. */ - size_t j; /* Index into current window of HAYSTACK. */ - size_t period; /* The period of the right half of needle. */ - size_t suffix; /* The index of the right half of needle. */ - - /* Factor the needle into two halves, such that the left half is - smaller than the global period, and the right half is - periodic (with a period as large as NEEDLE_LEN - suffix). */ - suffix = critical_factorization (needle, needle_len, &period); - - /* Perform the search. Each iteration compares the right half - first. */ - if (CMP_FUNC (needle, needle + period, suffix) == 0) - { - /* Entire needle is periodic; a mismatch in the left half can - only advance by the period, so use memory to avoid rescanning - known occurrences of the period in the right half. */ - size_t memory = 0; - j = 0; - while (AVAILABLE (haystack, haystack_len, j, needle_len)) - { - /* Scan for matches in right half. */ - i = MAX (suffix, memory); - while (i < needle_len && (CANON_ELEMENT (needle[i]) - == CANON_ELEMENT (haystack[i + j]))) - ++i; - if (needle_len <= i) - { - /* Scan for matches in left half. */ - i = suffix - 1; - while (memory < i + 1 && (CANON_ELEMENT (needle[i]) - == CANON_ELEMENT (haystack[i + j]))) - --i; - if (i + 1 < memory + 1) - return (RETURN_TYPE) (haystack + j); - /* No match, so remember how many repetitions of period - on the right half were scanned. */ - j += period; - memory = needle_len - period; - } - else - { - j += i - suffix + 1; - memory = 0; - } - } - } - else - { - /* The two halves of needle are distinct; no extra memory is - required, and any mismatch results in a maximal shift. */ - period = MAX (suffix, needle_len - suffix) + 1; - j = 0; - while (AVAILABLE (haystack, haystack_len, j, needle_len)) - { - /* Scan for matches in right half. */ - i = suffix; - while (i < needle_len && (CANON_ELEMENT (needle[i]) - == CANON_ELEMENT (haystack[i + j]))) - ++i; - if (needle_len <= i) - { - /* Scan for matches in left half. */ - i = suffix - 1; - while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) - == CANON_ELEMENT (haystack[i + j]))) - --i; - if (i == SIZE_MAX) - return (RETURN_TYPE) (haystack + j); - j += period; - } - else - j += i - suffix + 1; - } - } - return NULL; -} - -/* Return the first location of non-empty NEEDLE within HAYSTACK, or - NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This - method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN. - Performance is guaranteed to be linear, with an initialization cost - of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations. - - If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at - most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, - and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible. - If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * - HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and - sublinear performance is not possible. */ -static RETURN_TYPE -two_way_long_needle (const unsigned char *haystack, size_t haystack_len, - const unsigned char *needle, size_t needle_len) -{ - size_t i; /* Index into current byte of NEEDLE. */ - size_t j; /* Index into current window of HAYSTACK. */ - size_t period; /* The period of the right half of needle. */ - size_t suffix; /* The index of the right half of needle. */ - size_t shift_table[1U << CHAR_BIT]; /* See below. */ - - /* Factor the needle into two halves, such that the left half is - smaller than the global period, and the right half is - periodic (with a period as large as NEEDLE_LEN - suffix). */ - suffix = critical_factorization (needle, needle_len, &period); - - /* Populate shift_table. For each possible byte value c, - shift_table[c] is the distance from the last occurrence of c to - the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE. - shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0. */ - for (i = 0; i < 1U << CHAR_BIT; i++) - shift_table[i] = needle_len; - for (i = 0; i < needle_len; i++) - shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1; - - /* Perform the search. Each iteration compares the right half - first. */ - if (CMP_FUNC (needle, needle + period, suffix) == 0) - { - /* Entire needle is periodic; a mismatch in the left half can - only advance by the period, so use memory to avoid rescanning - known occurrences of the period in the right half. */ - size_t memory = 0; - size_t shift; - j = 0; - while (AVAILABLE (haystack, haystack_len, j, needle_len)) - { - /* Check the last byte first; if it does not match, then - shift to the next possible match location. */ - shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; - if (0 < shift) - { - if (memory && shift < period) - { - /* Since needle is periodic, but the last period has - a byte out of place, there can be no match until - after the mismatch. */ - shift = needle_len - period; - } - memory = 0; - j += shift; - continue; - } - /* Scan for matches in right half. The last byte has - already been matched, by virtue of the shift table. */ - i = MAX (suffix, memory); - while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) - == CANON_ELEMENT (haystack[i + j]))) - ++i; - if (needle_len - 1 <= i) - { - /* Scan for matches in left half. */ - i = suffix - 1; - while (memory < i + 1 && (CANON_ELEMENT (needle[i]) - == CANON_ELEMENT (haystack[i + j]))) - --i; - if (i + 1 < memory + 1) - return (RETURN_TYPE) (haystack + j); - /* No match, so remember how many repetitions of period - on the right half were scanned. */ - j += period; - memory = needle_len - period; - } - else - { - j += i - suffix + 1; - memory = 0; - } - } - } - else - { - /* The two halves of needle are distinct; no extra memory is - required, and any mismatch results in a maximal shift. */ - size_t shift; - period = MAX (suffix, needle_len - suffix) + 1; - j = 0; - while (AVAILABLE (haystack, haystack_len, j, needle_len)) - { - /* Check the last byte first; if it does not match, then - shift to the next possible match location. */ - shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; - if (0 < shift) - { - j += shift; - continue; - } - /* Scan for matches in right half. The last byte has - already been matched, by virtue of the shift table. */ - i = suffix; - while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) - == CANON_ELEMENT (haystack[i + j]))) - ++i; - if (needle_len - 1 <= i) - { - /* Scan for matches in left half. */ - i = suffix - 1; - while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) - == CANON_ELEMENT (haystack[i + j]))) - --i; - if (i == SIZE_MAX) - return (RETURN_TYPE) (haystack + j); - j += period; - } - else - j += i - suffix + 1; - } - } - return NULL; -} - -#undef AVAILABLE -#undef CANON_ELEMENT -#undef CMP_FUNC -#undef MAX -#undef RETURN_TYPE diff --git a/gl/strcasecmp.c b/gl/strcasecmp.c deleted file mode 100644 index 1c3fabc76d..0000000000 --- a/gl/strcasecmp.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Case-insensitive string comparison function. - Copyright (C) 1998-1999, 2005-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#include - -/* Specification. */ -#include - -#include -#include - -#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) - -/* Compare strings S1 and S2, ignoring case, returning less than, equal to or - greater than zero if S1 is lexicographically less than, equal to or greater - than S2. - Note: This function does not work with multibyte strings! */ - -int -strcasecmp (const char *s1, const char *s2) -{ - const unsigned char *p1 = (const unsigned char *) s1; - const unsigned char *p2 = (const unsigned char *) s2; - unsigned char c1, c2; - - if (p1 == p2) - return 0; - - do - { - c1 = TOLOWER (*p1); - c2 = TOLOWER (*p2); - - if (c1 == '\0') - break; - - ++p1; - ++p2; - } - while (c1 == c2); - - if (UCHAR_MAX <= INT_MAX) - return c1 - c2; - else - /* On machines where 'char' and 'int' are types of the same size, the - difference of two 'unsigned char' values - including the sign bit - - doesn't fit in an 'int'. */ - return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); -} diff --git a/gl/string.in.h b/gl/string.in.h deleted file mode 100644 index 21ecaf9f4c..0000000000 --- a/gl/string.in.h +++ /dev/null @@ -1,1046 +0,0 @@ -/* A GNU-like . - - Copyright (C) 1995-1996, 2001-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined _GL_ALREADY_INCLUDING_STRING_H -/* Special invocation convention: - - On OS X/NetBSD we have a sequence of nested includes - -> -> "string.h" - In this situation system _chk variants due to -D_FORTIFY_SOURCE - might be used after any replacements defined here. */ - -#@INCLUDE_NEXT@ @NEXT_STRING_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_STRING_H - -#define _GL_ALREADY_INCLUDING_STRING_H - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_STRING_H@ - -#undef _GL_ALREADY_INCLUDING_STRING_H - -#ifndef _@GUARD_PREFIX@_STRING_H -#define _@GUARD_PREFIX@_STRING_H - -/* NetBSD 5.0 mis-defines NULL. */ -#include - -/* MirBSD defines mbslen as a macro. */ -#if @GNULIB_MBSLEN@ && defined __MirBSD__ -# include -#endif - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The attribute __pure__ was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ -#endif - -/* NetBSD 5.0 declares strsignal in , not in . */ -/* But in any case avoid namespace pollution on glibc systems. */ -#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ - && ! defined __GLIBC__ -# include -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - -/* Find the index of the least-significant set bit. */ -#if @GNULIB_FFSL@ -# if !@HAVE_FFSL@ -_GL_FUNCDECL_SYS (ffsl, int, (long int i)); -# endif -_GL_CXXALIAS_SYS (ffsl, int, (long int i)); -_GL_CXXALIASWARN (ffsl); -#elif defined GNULIB_POSIXCHECK -# undef ffsl -# if HAVE_RAW_DECL_FFSL -_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); -# endif -#endif - - -/* Find the index of the least-significant set bit. */ -#if @GNULIB_FFSLL@ -# if !@HAVE_FFSLL@ -_GL_FUNCDECL_SYS (ffsll, int, (long long int i)); -# endif -_GL_CXXALIAS_SYS (ffsll, int, (long long int i)); -_GL_CXXALIASWARN (ffsll); -#elif defined GNULIB_POSIXCHECK -# undef ffsll -# if HAVE_RAW_DECL_FFSLL -_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); -# endif -#endif - - -/* Return the first instance of C within N bytes of S, or NULL. */ -#if @GNULIB_MEMCHR@ -# if @REPLACE_MEMCHR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define memchr rpl_memchr -# endif -_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); -# else -# if ! @HAVE_MEMCHR@ -_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C" { const void * std::memchr (const void *, int, size_t); } - extern "C++" { void * std::memchr (void *, int, size_t); } */ -_GL_CXXALIAS_SYS_CAST2 (memchr, - void *, (void const *__s, int __c, size_t __n), - void const *, (void const *__s, int __c, size_t __n)); -# endif -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); -_GL_CXXALIASWARN1 (memchr, void const *, - (void const *__s, int __c, size_t __n)); -# else -_GL_CXXALIASWARN (memchr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef memchr -/* Assume memchr is always declared. */ -_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " - "use gnulib module memchr for portability" ); -#endif - -/* Return the first occurrence of NEEDLE in HAYSTACK. */ -#if @GNULIB_MEMMEM@ -# if @REPLACE_MEMMEM@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define memmem rpl_memmem -# endif -_GL_FUNCDECL_RPL (memmem, void *, - (void const *__haystack, size_t __haystack_len, - void const *__needle, size_t __needle_len) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 3))); -_GL_CXXALIAS_RPL (memmem, void *, - (void const *__haystack, size_t __haystack_len, - void const *__needle, size_t __needle_len)); -# else -# if ! @HAVE_DECL_MEMMEM@ -_GL_FUNCDECL_SYS (memmem, void *, - (void const *__haystack, size_t __haystack_len, - void const *__needle, size_t __needle_len) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 3))); -# endif -_GL_CXXALIAS_SYS (memmem, void *, - (void const *__haystack, size_t __haystack_len, - void const *__needle, size_t __needle_len)); -# endif -_GL_CXXALIASWARN (memmem); -#elif defined GNULIB_POSIXCHECK -# undef memmem -# if HAVE_RAW_DECL_MEMMEM -_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " - "use gnulib module memmem-simple for portability, " - "and module memmem for speed" ); -# endif -#endif - -/* Copy N bytes of SRC to DEST, return pointer to bytes after the - last written byte. */ -#if @GNULIB_MEMPCPY@ -# if ! @HAVE_MEMPCPY@ -_GL_FUNCDECL_SYS (mempcpy, void *, - (void *restrict __dest, void const *restrict __src, - size_t __n) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (mempcpy, void *, - (void *restrict __dest, void const *restrict __src, - size_t __n)); -_GL_CXXALIASWARN (mempcpy); -#elif defined GNULIB_POSIXCHECK -# undef mempcpy -# if HAVE_RAW_DECL_MEMPCPY -_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " - "use gnulib module mempcpy for portability"); -# endif -#endif - -/* Search backwards through a block for a byte (specified as an int). */ -#if @GNULIB_MEMRCHR@ -# if ! @HAVE_DECL_MEMRCHR@ -_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { const void * std::memrchr (const void *, int, size_t); } - extern "C++" { void * std::memrchr (void *, int, size_t); } */ -_GL_CXXALIAS_SYS_CAST2 (memrchr, - void *, (void const *, int, size_t), - void const *, (void const *, int, size_t)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); -_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); -# else -_GL_CXXALIASWARN (memrchr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef memrchr -# if HAVE_RAW_DECL_MEMRCHR -_GL_WARN_ON_USE (memrchr, "memrchr is unportable - " - "use gnulib module memrchr for portability"); -# endif -#endif - -/* Find the first occurrence of C in S. More efficient than - memchr(S,C,N), at the expense of undefined behavior if C does not - occur within N bytes. */ -#if @GNULIB_RAWMEMCHR@ -# if ! @HAVE_RAWMEMCHR@ -_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { const void * std::rawmemchr (const void *, int); } - extern "C++" { void * std::rawmemchr (void *, int); } */ -_GL_CXXALIAS_SYS_CAST2 (rawmemchr, - void *, (void const *__s, int __c_in), - void const *, (void const *__s, int __c_in)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); -_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); -# else -_GL_CXXALIASWARN (rawmemchr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef rawmemchr -# if HAVE_RAW_DECL_RAWMEMCHR -_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " - "use gnulib module rawmemchr for portability"); -# endif -#endif - -/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ -#if @GNULIB_STPCPY@ -# if ! @HAVE_STPCPY@ -_GL_FUNCDECL_SYS (stpcpy, char *, - (char *restrict __dst, char const *restrict __src) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (stpcpy, char *, - (char *restrict __dst, char const *restrict __src)); -_GL_CXXALIASWARN (stpcpy); -#elif defined GNULIB_POSIXCHECK -# undef stpcpy -# if HAVE_RAW_DECL_STPCPY -_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " - "use gnulib module stpcpy for portability"); -# endif -#endif - -/* Copy no more than N bytes of SRC to DST, returning a pointer past the - last non-NUL byte written into DST. */ -#if @GNULIB_STPNCPY@ -# if @REPLACE_STPNCPY@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef stpncpy -# define stpncpy rpl_stpncpy -# endif -_GL_FUNCDECL_RPL (stpncpy, char *, - (char *restrict __dst, char const *restrict __src, - size_t __n) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (stpncpy, char *, - (char *restrict __dst, char const *restrict __src, - size_t __n)); -# else -# if ! @HAVE_STPNCPY@ -_GL_FUNCDECL_SYS (stpncpy, char *, - (char *restrict __dst, char const *restrict __src, - size_t __n) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (stpncpy, char *, - (char *restrict __dst, char const *restrict __src, - size_t __n)); -# endif -_GL_CXXALIASWARN (stpncpy); -#elif defined GNULIB_POSIXCHECK -# undef stpncpy -# if HAVE_RAW_DECL_STPNCPY -_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " - "use gnulib module stpncpy for portability"); -# endif -#endif - -#if defined GNULIB_POSIXCHECK -/* strchr() does not work with multibyte strings if the locale encoding is - GB18030 and the character to be searched is a digit. */ -# undef strchr -/* Assume strchr is always declared. */ -_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " - "in some multibyte locales - " - "use mbschr if you care about internationalization"); -#endif - -/* Find the first occurrence of C in S or the final NUL byte. */ -#if @GNULIB_STRCHRNUL@ -# if @REPLACE_STRCHRNUL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define strchrnul rpl_strchrnul -# endif -_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strchrnul, char *, - (const char *str, int ch)); -# else -# if ! @HAVE_STRCHRNUL@ -_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { const char * std::strchrnul (const char *, int); } - extern "C++" { char * std::strchrnul (char *, int); } */ -_GL_CXXALIAS_SYS_CAST2 (strchrnul, - char *, (char const *__s, int __c_in), - char const *, (char const *__s, int __c_in)); -# endif -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); -_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); -# else -_GL_CXXALIASWARN (strchrnul); -# endif -#elif defined GNULIB_POSIXCHECK -# undef strchrnul -# if HAVE_RAW_DECL_STRCHRNUL -_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " - "use gnulib module strchrnul for portability"); -# endif -#endif - -/* Duplicate S, returning an identical malloc'd string. */ -#if @GNULIB_STRDUP@ -# if @REPLACE_STRDUP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strdup -# define strdup rpl_strdup -# endif -_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); -# else -# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup - /* strdup exists as a function and as a macro. Get rid of the macro. */ -# undef strdup -# endif -# if !(@HAVE_DECL_STRDUP@ || defined strdup) -_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); -# endif -_GL_CXXALIASWARN (strdup); -#elif defined GNULIB_POSIXCHECK -# undef strdup -# if HAVE_RAW_DECL_STRDUP -_GL_WARN_ON_USE (strdup, "strdup is unportable - " - "use gnulib module strdup for portability"); -# endif -#endif - -/* Append no more than N characters from SRC onto DEST. */ -#if @GNULIB_STRNCAT@ -# if @REPLACE_STRNCAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strncat -# define strncat rpl_strncat -# endif -_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); -# else -_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); -# endif -_GL_CXXALIASWARN (strncat); -#elif defined GNULIB_POSIXCHECK -# undef strncat -# if HAVE_RAW_DECL_STRNCAT -_GL_WARN_ON_USE (strncat, "strncat is unportable - " - "use gnulib module strncat for portability"); -# endif -#endif - -/* Return a newly allocated copy of at most N bytes of STRING. */ -#if @GNULIB_STRNDUP@ -# if @REPLACE_STRNDUP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strndup -# define strndup rpl_strndup -# endif -_GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); -# else -# if ! @HAVE_DECL_STRNDUP@ -_GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); -# endif -_GL_CXXALIASWARN (strndup); -#elif defined GNULIB_POSIXCHECK -# undef strndup -# if HAVE_RAW_DECL_STRNDUP -_GL_WARN_ON_USE (strndup, "strndup is unportable - " - "use gnulib module strndup for portability"); -# endif -#endif - -/* Find the length (number of bytes) of STRING, but scan at most - MAXLEN bytes. If no '\0' terminator is found in that many bytes, - return MAXLEN. */ -#if @GNULIB_STRNLEN@ -# if @REPLACE_STRNLEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strnlen -# define strnlen rpl_strnlen -# endif -_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); -# else -# if ! @HAVE_DECL_STRNLEN@ -_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); -# endif -_GL_CXXALIASWARN (strnlen); -#elif defined GNULIB_POSIXCHECK -# undef strnlen -# if HAVE_RAW_DECL_STRNLEN -_GL_WARN_ON_USE (strnlen, "strnlen is unportable - " - "use gnulib module strnlen for portability"); -# endif -#endif - -#if defined GNULIB_POSIXCHECK -/* strcspn() assumes the second argument is a list of single-byte characters. - Even in this simple case, it does not work with multibyte strings if the - locale encoding is GB18030 and one of the characters to be searched is a - digit. */ -# undef strcspn -/* Assume strcspn is always declared. */ -_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " - "in multibyte locales - " - "use mbscspn if you care about internationalization"); -#endif - -/* Find the first occurrence in S of any character in ACCEPT. */ -#if @GNULIB_STRPBRK@ -# if ! @HAVE_STRPBRK@ -_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C" { const char * strpbrk (const char *, const char *); } - extern "C++" { char * strpbrk (char *, const char *); } */ -_GL_CXXALIAS_SYS_CAST2 (strpbrk, - char *, (char const *__s, char const *__accept), - const char *, (char const *__s, char const *__accept)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); -_GL_CXXALIASWARN1 (strpbrk, char const *, - (char const *__s, char const *__accept)); -# else -_GL_CXXALIASWARN (strpbrk); -# endif -# if defined GNULIB_POSIXCHECK -/* strpbrk() assumes the second argument is a list of single-byte characters. - Even in this simple case, it does not work with multibyte strings if the - locale encoding is GB18030 and one of the characters to be searched is a - digit. */ -# undef strpbrk -_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " - "in multibyte locales - " - "use mbspbrk if you care about internationalization"); -# endif -#elif defined GNULIB_POSIXCHECK -# undef strpbrk -# if HAVE_RAW_DECL_STRPBRK -_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " - "use gnulib module strpbrk for portability"); -# endif -#endif - -#if defined GNULIB_POSIXCHECK -/* strspn() assumes the second argument is a list of single-byte characters. - Even in this simple case, it cannot work with multibyte strings. */ -# undef strspn -/* Assume strspn is always declared. */ -_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " - "in multibyte locales - " - "use mbsspn if you care about internationalization"); -#endif - -#if defined GNULIB_POSIXCHECK -/* strrchr() does not work with multibyte strings if the locale encoding is - GB18030 and the character to be searched is a digit. */ -# undef strrchr -/* Assume strrchr is always declared. */ -_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " - "in some multibyte locales - " - "use mbsrchr if you care about internationalization"); -#endif - -/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. - If one is found, overwrite it with a NUL, and advance *STRINGP - to point to the next char after it. Otherwise, set *STRINGP to NULL. - If *STRINGP was already NULL, nothing happens. - Return the old value of *STRINGP. - - This is a variant of strtok() that is multithread-safe and supports - empty fields. - - Caveat: It modifies the original string. - Caveat: These functions cannot be used on constant strings. - Caveat: The identity of the delimiting character is lost. - Caveat: It doesn't work with multibyte strings unless all of the delimiter - characters are ASCII characters < 0x30. - - See also strtok_r(). */ -#if @GNULIB_STRSEP@ -# if ! @HAVE_STRSEP@ -_GL_FUNCDECL_SYS (strsep, char *, - (char **restrict __stringp, char const *restrict __delim) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (strsep, char *, - (char **restrict __stringp, char const *restrict __delim)); -_GL_CXXALIASWARN (strsep); -# if defined GNULIB_POSIXCHECK -# undef strsep -_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " - "in multibyte locales - " - "use mbssep if you care about internationalization"); -# endif -#elif defined GNULIB_POSIXCHECK -# undef strsep -# if HAVE_RAW_DECL_STRSEP -_GL_WARN_ON_USE (strsep, "strsep is unportable - " - "use gnulib module strsep for portability"); -# endif -#endif - -#if @GNULIB_STRSTR@ -# if @REPLACE_STRSTR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define strstr rpl_strstr -# endif -_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); -# else - /* On some systems, this function is defined as an overloaded function: - extern "C++" { const char * strstr (const char *, const char *); } - extern "C++" { char * strstr (char *, const char *); } */ -_GL_CXXALIAS_SYS_CAST2 (strstr, - char *, (const char *haystack, const char *needle), - const char *, (const char *haystack, const char *needle)); -# endif -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); -_GL_CXXALIASWARN1 (strstr, const char *, - (const char *haystack, const char *needle)); -# else -_GL_CXXALIASWARN (strstr); -# endif -#elif defined GNULIB_POSIXCHECK -/* strstr() does not work with multibyte strings if the locale encoding is - different from UTF-8: - POSIX says that it operates on "strings", and "string" in POSIX is defined - as a sequence of bytes, not of characters. */ -# undef strstr -/* Assume strstr is always declared. */ -_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " - "work correctly on character strings in most " - "multibyte locales - " - "use mbsstr if you care about internationalization, " - "or use strstr if you care about speed"); -#endif - -/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive - comparison. */ -#if @GNULIB_STRCASESTR@ -# if @REPLACE_STRCASESTR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define strcasestr rpl_strcasestr -# endif -_GL_FUNCDECL_RPL (strcasestr, char *, - (const char *haystack, const char *needle) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (strcasestr, char *, - (const char *haystack, const char *needle)); -# else -# if ! @HAVE_STRCASESTR@ -_GL_FUNCDECL_SYS (strcasestr, char *, - (const char *haystack, const char *needle) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { const char * strcasestr (const char *, const char *); } - extern "C++" { char * strcasestr (char *, const char *); } */ -_GL_CXXALIAS_SYS_CAST2 (strcasestr, - char *, (const char *haystack, const char *needle), - const char *, (const char *haystack, const char *needle)); -# endif -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); -_GL_CXXALIASWARN1 (strcasestr, const char *, - (const char *haystack, const char *needle)); -# else -_GL_CXXALIASWARN (strcasestr); -# endif -#elif defined GNULIB_POSIXCHECK -/* strcasestr() does not work with multibyte strings: - It is a glibc extension, and glibc implements it only for unibyte - locales. */ -# undef strcasestr -# if HAVE_RAW_DECL_STRCASESTR -_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " - "strings in multibyte locales - " - "use mbscasestr if you care about " - "internationalization, or use c-strcasestr if you want " - "a locale independent function"); -# endif -#endif - -/* Parse S into tokens separated by characters in DELIM. - If S is NULL, the saved pointer in SAVE_PTR is used as - the next starting point. For example: - char s[] = "-abc-=-def"; - char *sp; - x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" - x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL - x = strtok_r(NULL, "=", &sp); // x = NULL - // s = "abc\0-def\0" - - This is a variant of strtok() that is multithread-safe. - - For the POSIX documentation for this function, see: - http://www.opengroup.org/susv3xsh/strtok.html - - Caveat: It modifies the original string. - Caveat: These functions cannot be used on constant strings. - Caveat: The identity of the delimiting character is lost. - Caveat: It doesn't work with multibyte strings unless all of the delimiter - characters are ASCII characters < 0x30. - - See also strsep(). */ -#if @GNULIB_STRTOK_R@ -# if @REPLACE_STRTOK_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strtok_r -# define strtok_r rpl_strtok_r -# endif -_GL_FUNCDECL_RPL (strtok_r, char *, - (char *restrict s, char const *restrict delim, - char **restrict save_ptr) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (strtok_r, char *, - (char *restrict s, char const *restrict delim, - char **restrict save_ptr)); -# else -# if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK -# undef strtok_r -# endif -# if ! @HAVE_DECL_STRTOK_R@ -_GL_FUNCDECL_SYS (strtok_r, char *, - (char *restrict s, char const *restrict delim, - char **restrict save_ptr) - _GL_ARG_NONNULL ((2, 3))); -# endif -_GL_CXXALIAS_SYS (strtok_r, char *, - (char *restrict s, char const *restrict delim, - char **restrict save_ptr)); -# endif -_GL_CXXALIASWARN (strtok_r); -# if defined GNULIB_POSIXCHECK -_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " - "strings in multibyte locales - " - "use mbstok_r if you care about internationalization"); -# endif -#elif defined GNULIB_POSIXCHECK -# undef strtok_r -# if HAVE_RAW_DECL_STRTOK_R -_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " - "use gnulib module strtok_r for portability"); -# endif -#endif - - -/* The following functions are not specified by POSIX. They are gnulib - extensions. */ - -#if @GNULIB_MBSLEN@ -/* Return the number of multibyte characters in the character string STRING. - This considers multibyte characters, unlike strlen, which counts bytes. */ -# ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ -# undef mbslen -# endif -# if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mbslen rpl_mbslen -# endif -_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); -# else -_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); -# endif -_GL_CXXALIASWARN (mbslen); -#endif - -#if @GNULIB_MBSNLEN@ -/* Return the number of multibyte characters in the character string starting - at STRING and ending at STRING + LEN. */ -_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1)); -#endif - -#if @GNULIB_MBSCHR@ -/* Locate the first single-byte character C in the character string STRING, - and return a pointer to it. Return NULL if C is not found in STRING. - Unlike strchr(), this function works correctly in multibyte locales with - encodings such as GB18030. */ -# if defined __hpux -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ -# endif -_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); -# else -_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); -# endif -_GL_CXXALIASWARN (mbschr); -#endif - -#if @GNULIB_MBSRCHR@ -/* Locate the last single-byte character C in the character string STRING, - and return a pointer to it. Return NULL if C is not found in STRING. - Unlike strrchr(), this function works correctly in multibyte locales with - encodings such as GB18030. */ -# if defined __hpux || defined __INTERIX -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mbsrchr rpl_mbsrchr /* avoid collision with system function */ -# endif -_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); -# else -_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); -# endif -_GL_CXXALIASWARN (mbsrchr); -#endif - -#if @GNULIB_MBSSTR@ -/* Find the first occurrence of the character string NEEDLE in the character - string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. - Unlike strstr(), this function works correctly in multibyte locales with - encodings different from UTF-8. */ -_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSCASECMP@ -/* Compare the character strings S1 and S2, ignoring case, returning less than, - equal to or greater than zero if S1 is lexicographically less than, equal to - or greater than S2. - Note: This function may, in multibyte locales, return 0 for strings of - different lengths! - Unlike strcasecmp(), this function works correctly in multibyte locales. */ -_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSNCASECMP@ -/* Compare the initial segment of the character string S1 consisting of at most - N characters with the initial segment of the character string S2 consisting - of at most N characters, ignoring case, returning less than, equal to or - greater than zero if the initial segment of S1 is lexicographically less - than, equal to or greater than the initial segment of S2. - Note: This function may, in multibyte locales, return 0 for initial segments - of different lengths! - Unlike strncasecmp(), this function works correctly in multibyte locales. - But beware that N is not a byte count but a character count! */ -_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSPCASECMP@ -/* Compare the initial segment of the character string STRING consisting of - at most mbslen (PREFIX) characters with the character string PREFIX, - ignoring case. If the two match, return a pointer to the first byte - after this prefix in STRING. Otherwise, return NULL. - Note: This function may, in multibyte locales, return non-NULL if STRING - is of smaller length than PREFIX! - Unlike strncasecmp(), this function works correctly in multibyte - locales. */ -_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSCASESTR@ -/* Find the first occurrence of the character string NEEDLE in the character - string HAYSTACK, using case-insensitive comparison. - Note: This function may, in multibyte locales, return success even if - strlen (haystack) < strlen (needle) ! - Unlike strcasestr(), this function works correctly in multibyte locales. */ -_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSCSPN@ -/* Find the first occurrence in the character string STRING of any character - in the character string ACCEPT. Return the number of bytes from the - beginning of the string to this occurrence, or to the end of the string - if none exists. - Unlike strcspn(), this function works correctly in multibyte locales. */ -_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSPBRK@ -/* Find the first occurrence in the character string STRING of any character - in the character string ACCEPT. Return the pointer to it, or NULL if none - exists. - Unlike strpbrk(), this function works correctly in multibyte locales. */ -# if defined __hpux -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ -# endif -_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); -# else -_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); -# endif -_GL_CXXALIASWARN (mbspbrk); -#endif - -#if @GNULIB_MBSSPN@ -/* Find the first occurrence in the character string STRING of any character - not in the character string REJECT. Return the number of bytes from the - beginning of the string to this occurrence, or to the end of the string - if none exists. - Unlike strspn(), this function works correctly in multibyte locales. */ -_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSSEP@ -/* Search the next delimiter (multibyte character listed in the character - string DELIM) starting at the character string *STRINGP. - If one is found, overwrite it with a NUL, and advance *STRINGP to point - to the next multibyte character after it. Otherwise, set *STRINGP to NULL. - If *STRINGP was already NULL, nothing happens. - Return the old value of *STRINGP. - - This is a variant of mbstok_r() that supports empty fields. - - Caveat: It modifies the original string. - Caveat: These functions cannot be used on constant strings. - Caveat: The identity of the delimiting character is lost. - - See also mbstok_r(). */ -_GL_EXTERN_C char * mbssep (char **stringp, const char *delim) - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSTOK_R@ -/* Parse the character string STRING into tokens separated by characters in - the character string DELIM. - If STRING is NULL, the saved pointer in SAVE_PTR is used as - the next starting point. For example: - char s[] = "-abc-=-def"; - char *sp; - x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" - x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL - x = mbstok_r(NULL, "=", &sp); // x = NULL - // s = "abc\0-def\0" - - Caveat: It modifies the original string. - Caveat: These functions cannot be used on constant strings. - Caveat: The identity of the delimiting character is lost. - - See also mbssep(). */ -_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) - _GL_ARG_NONNULL ((2, 3)); -#endif - -/* Map any int, typically from errno, into an error message. */ -#if @GNULIB_STRERROR@ -# if @REPLACE_STRERROR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strerror -# define strerror rpl_strerror -# endif -_GL_FUNCDECL_RPL (strerror, char *, (int)); -_GL_CXXALIAS_RPL (strerror, char *, (int)); -# else -_GL_CXXALIAS_SYS (strerror, char *, (int)); -# endif -_GL_CXXALIASWARN (strerror); -#elif defined GNULIB_POSIXCHECK -# undef strerror -/* Assume strerror is always declared. */ -_GL_WARN_ON_USE (strerror, "strerror is unportable - " - "use gnulib module strerror to guarantee non-NULL result"); -#endif - -/* Map any int, typically from errno, into an error message. Multithread-safe. - Uses the POSIX declaration, not the glibc declaration. */ -#if @GNULIB_STRERROR_R@ -# if @REPLACE_STRERROR_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strerror_r -# define strerror_r rpl_strerror_r -# endif -_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); -# else -# if !@HAVE_DECL_STRERROR_R@ -_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); -# endif -# if @HAVE_DECL_STRERROR_R@ -_GL_CXXALIASWARN (strerror_r); -# endif -#elif defined GNULIB_POSIXCHECK -# undef strerror_r -# if HAVE_RAW_DECL_STRERROR_R -_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " - "use gnulib module strerror_r-posix for portability"); -# endif -#endif - -#if @GNULIB_STRSIGNAL@ -# if @REPLACE_STRSIGNAL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define strsignal rpl_strsignal -# endif -_GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); -_GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); -# else -# if ! @HAVE_DECL_STRSIGNAL@ -_GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); -# endif -/* Need to cast, because on Cygwin 1.5.x systems, the return type is - 'const char *'. */ -_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); -# endif -_GL_CXXALIASWARN (strsignal); -#elif defined GNULIB_POSIXCHECK -# undef strsignal -# if HAVE_RAW_DECL_STRSIGNAL -_GL_WARN_ON_USE (strsignal, "strsignal is unportable - " - "use gnulib module strsignal for portability"); -# endif -#endif - -#if @GNULIB_STRVERSCMP@ -# if !@HAVE_STRVERSCMP@ -_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); -_GL_CXXALIASWARN (strverscmp); -#elif defined GNULIB_POSIXCHECK -# undef strverscmp -# if HAVE_RAW_DECL_STRVERSCMP -_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " - "use gnulib module strverscmp for portability"); -# endif -#endif - - -#endif /* _@GUARD_PREFIX@_STRING_H */ -#endif /* _@GUARD_PREFIX@_STRING_H */ -#endif diff --git a/gl/strings.in.h b/gl/strings.in.h deleted file mode 100644 index 7d93355650..0000000000 --- a/gl/strings.in.h +++ /dev/null @@ -1,122 +0,0 @@ -/* A substitute . - - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_STRINGS_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* Minix 3.1.8 has a bug: must be included before . - But avoid namespace pollution on glibc systems. */ -#if defined __minix && !defined __GLIBC__ -# include -#endif - -/* The include_next requires a split double-inclusion guard. */ -#if @HAVE_STRINGS_H@ -# @INCLUDE_NEXT@ @NEXT_STRINGS_H@ -#endif - -#ifndef _@GUARD_PREFIX@_STRINGS_H -#define _@GUARD_PREFIX@_STRINGS_H - -#if ! @HAVE_DECL_STRNCASECMP@ -/* Get size_t. */ -# include -#endif - - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -#ifdef __cplusplus -extern "C" { -#endif - - - /* Find the index of the least-significant set bit. */ -#if @GNULIB_FFS@ -# if !@HAVE_FFS@ -_GL_FUNCDECL_SYS (ffs, int, (int i)); -# endif -_GL_CXXALIAS_SYS (ffs, int, (int i)); -_GL_CXXALIASWARN (ffs); -#elif defined GNULIB_POSIXCHECK -# undef ffs -# if HAVE_RAW_DECL_FFS -_GL_WARN_ON_USE (ffs, "ffs is not portable - use the ffs module"); -# endif -#endif - -/* Compare strings S1 and S2, ignoring case, returning less than, equal to or - greater than zero if S1 is lexicographically less than, equal to or greater - than S2. - Note: This function does not work in multibyte locales. */ -#if ! @HAVE_STRCASECMP@ -extern int strcasecmp (char const *s1, char const *s2) - _GL_ARG_NONNULL ((1, 2)); -#endif -#if defined GNULIB_POSIXCHECK -/* strcasecmp() does not work with multibyte strings: - POSIX says that it operates on "strings", and "string" in POSIX is defined - as a sequence of bytes, not of characters. */ -# undef strcasecmp -# if HAVE_RAW_DECL_STRCASECMP -_GL_WARN_ON_USE (strcasecmp, "strcasecmp cannot work correctly on character " - "strings in multibyte locales - " - "use mbscasecmp if you care about " - "internationalization, or use c_strcasecmp , " - "gnulib module c-strcase) if you want a locale " - "independent function"); -# endif -#endif - -/* Compare no more than N bytes of strings S1 and S2, ignoring case, - returning less than, equal to or greater than zero if S1 is - lexicographically less than, equal to or greater than S2. - Note: This function cannot work correctly in multibyte locales. */ -#if ! @HAVE_DECL_STRNCASECMP@ -extern int strncasecmp (char const *s1, char const *s2, size_t n) - _GL_ARG_NONNULL ((1, 2)); -#endif -#if defined GNULIB_POSIXCHECK -/* strncasecmp() does not work with multibyte strings: - POSIX says that it operates on "strings", and "string" in POSIX is defined - as a sequence of bytes, not of characters. */ -# undef strncasecmp -# if HAVE_RAW_DECL_STRNCASECMP -_GL_WARN_ON_USE (strncasecmp, "strncasecmp cannot work correctly on character " - "strings in multibyte locales - " - "use mbsncasecmp or mbspcasecmp if you care about " - "internationalization, or use c_strncasecmp , " - "gnulib module c-strcase) if you want a locale " - "independent function"); -# endif -#endif - - -#ifdef __cplusplus -} -#endif - -#endif /* _@GUARD_PREFIX@_STRING_H */ -#endif /* _@GUARD_PREFIX@_STRING_H */ diff --git a/gl/strncasecmp.c b/gl/strncasecmp.c deleted file mode 100644 index d9f22533ed..0000000000 --- a/gl/strncasecmp.c +++ /dev/null @@ -1,62 +0,0 @@ -/* strncasecmp.c -- case insensitive string comparator - Copyright (C) 1998-1999, 2005-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#include - -/* Specification. */ -#include - -#include -#include - -#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) - -/* Compare no more than N bytes of strings S1 and S2, ignoring case, - returning less than, equal to or greater than zero if S1 is - lexicographically less than, equal to or greater than S2. - Note: This function cannot work correctly in multibyte locales. */ - -int -strncasecmp (const char *s1, const char *s2, size_t n) -{ - register const unsigned char *p1 = (const unsigned char *) s1; - register const unsigned char *p2 = (const unsigned char *) s2; - unsigned char c1, c2; - - if (p1 == p2 || n == 0) - return 0; - - do - { - c1 = TOLOWER (*p1); - c2 = TOLOWER (*p2); - - if (--n == 0 || c1 == '\0') - break; - - ++p1; - ++p2; - } - while (c1 == c2); - - if (UCHAR_MAX <= INT_MAX) - return c1 - c2; - else - /* On machines where 'char' and 'int' are types of the same size, the - difference of two 'unsigned char' values - including the sign bit - - doesn't fit in an 'int'. */ - return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); -} diff --git a/gl/strndup.c b/gl/strndup.c deleted file mode 100644 index 2d7fd400a3..0000000000 --- a/gl/strndup.c +++ /dev/null @@ -1,36 +0,0 @@ -/* A replacement function, for systems that lack strndup. - - Copyright (C) 1996-1998, 2001-2003, 2005-2007, 2009-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as published by the - Free Software Foundation; either version 2.1, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#include - -#include - -#include - -char * -strndup (char const *s, size_t n) -{ - size_t len = strnlen (s, n); - char *new = malloc (len + 1); - - if (new == NULL) - return NULL; - - new[len] = '\0'; - return memcpy (new, s, len); -} diff --git a/gl/strnlen.c b/gl/strnlen.c deleted file mode 100644 index 3a7492e6e2..0000000000 --- a/gl/strnlen.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Find the length of STRING, but scan at most MAXLEN characters. - Copyright (C) 2005-2007, 2009-2016 Free Software Foundation, Inc. - Written by Simon Josefsson. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#include - -#include - -/* Find the length of STRING, but scan at most MAXLEN characters. - If no '\0' terminator is found in that many characters, return MAXLEN. */ - -size_t -strnlen (const char *string, size_t maxlen) -{ - const char *end = memchr (string, '\0', maxlen); - return end ? (size_t) (end - string) : maxlen; -} diff --git a/gl/strtok_r.c b/gl/strtok_r.c deleted file mode 100644 index 9cae5c61a6..0000000000 --- a/gl/strtok_r.c +++ /dev/null @@ -1,76 +0,0 @@ -/* Reentrant string tokenizer. Generic version. - Copyright (C) 1991, 1996-1999, 2001, 2004, 2007, 2009-2016 Free Software - Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include - -#ifdef _LIBC -# undef strtok_r -# undef __strtok_r -#else -# define __strtok_r strtok_r -# define __rawmemchr strchr -#endif - -/* Parse S into tokens separated by characters in DELIM. - If S is NULL, the saved pointer in SAVE_PTR is used as - the next starting point. For example: - char s[] = "-abc-=-def"; - char *sp; - x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" - x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL - x = strtok_r(NULL, "=", &sp); // x = NULL - // s = "abc\0-def\0" -*/ -char * -__strtok_r (char *s, const char *delim, char **save_ptr) -{ - char *token; - - if (s == NULL) - s = *save_ptr; - - /* Scan leading delimiters. */ - s += strspn (s, delim); - if (*s == '\0') - { - *save_ptr = s; - return NULL; - } - - /* Find the end of the token. */ - token = s; - s = strpbrk (token, delim); - if (s == NULL) - /* This token finishes the string. */ - *save_ptr = __rawmemchr (token, '\0'); - else - { - /* Terminate the token and make *SAVE_PTR point past it. */ - *s = '\0'; - *save_ptr = s + 1; - } - return token; -} -#ifdef weak_alias -libc_hidden_def (__strtok_r) -weak_alias (__strtok_r, strtok_r) -#endif diff --git a/gl/strverscmp.c b/gl/strverscmp.c deleted file mode 100644 index d0f9644773..0000000000 --- a/gl/strverscmp.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Compare strings while treating digits characters numerically. - Copyright (C) 1997-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jean-François Bignolles , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#if !_LIBC -# include -#endif - -#include -#include - -/* states: S_N: normal, S_I: comparing integral part, S_F: comparing - fractional parts, S_Z: idem but with leading Zeroes only */ -#define S_N 0x0 -#define S_I 0x3 -#define S_F 0x6 -#define S_Z 0x9 - -/* result_type: CMP: return diff; LEN: compare using len_diff/diff */ -#define CMP 2 -#define LEN 3 - -#ifndef weak_alias -# define __strverscmp strverscmp -#endif - -/* Compare S1 and S2 as strings holding indices/version numbers, - returning less than, equal to or greater than zero if S1 is less than, - equal to or greater than S2 (for more info, see the texinfo doc). -*/ - -int -__strverscmp (const char *s1, const char *s2) -{ - const unsigned char *p1 = (const unsigned char *) s1; - const unsigned char *p2 = (const unsigned char *) s2; - unsigned char c1, c2; - int state; - int diff; - - /* Symbol(s) 0 [1-9] others - Transition (10) 0 (01) d (00) x */ - static const unsigned char next_state[] = - { - /* state x d 0 */ - /* S_N */ S_N, S_I, S_Z, - /* S_I */ S_N, S_I, S_I, - /* S_F */ S_N, S_F, S_F, - /* S_Z */ S_N, S_F, S_Z - }; - - static const signed char result_type[] = - { - /* state x/x x/d x/0 d/x d/d d/0 0/x 0/d 0/0 */ - - /* S_N */ CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, - /* S_I */ CMP, -1, -1, +1, LEN, LEN, +1, LEN, LEN, - /* S_F */ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, - /* S_Z */ CMP, +1, +1, -1, CMP, CMP, -1, CMP, CMP - }; - - if (p1 == p2) - return 0; - - c1 = *p1++; - c2 = *p2++; - /* Hint: '0' is a digit too. */ - state = S_N + ((c1 == '0') + (isdigit (c1) != 0)); - - while ((diff = c1 - c2) == 0) - { - if (c1 == '\0') - return diff; - - state = next_state[state]; - c1 = *p1++; - c2 = *p2++; - state += (c1 == '0') + (isdigit (c1) != 0); - } - - state = result_type[state * 3 + (((c2 == '0') + (isdigit (c2) != 0)))]; - - switch (state) - { - case CMP: - return diff; - - case LEN: - while (isdigit (*p1++)) - if (!isdigit (*p2++)) - return 1; - - return isdigit (*p2) ? -1 : diff; - - default: - return state; - } -} -#ifdef weak_alias -libc_hidden_def (__strverscmp) -weak_alias (__strverscmp, strverscmp) -#endif diff --git a/gl/sys_socket.c b/gl/sys_socket.c deleted file mode 100644 index 3b261da039..0000000000 --- a/gl/sys_socket.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#define _GL_SYS_SOCKET_INLINE _GL_EXTERN_INLINE -#include "sys/socket.h" -typedef int dummy; diff --git a/gl/sys_socket.in.h b/gl/sys_socket.in.h deleted file mode 100644 index aae931ac57..0000000000 --- a/gl/sys_socket.in.h +++ /dev/null @@ -1,697 +0,0 @@ -/* Provide a sys/socket header file for systems lacking it (read: MinGW) - and for systems where it is incomplete. - Copyright (C) 2005-2016 Free Software Foundation, Inc. - Written by Simon Josefsson. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* This file is supposed to be used on platforms that lack , - on platforms where cannot be included standalone, and on - platforms where does not provide all necessary definitions. - It is intended to provide definitions and prototypes needed by an - application. */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined _GL_ALREADY_INCLUDING_SYS_SOCKET_H -/* Special invocation convention: - - On Cygwin 1.5.x we have a sequence of nested includes - -> -> -> , - and the latter includes . In this situation, the functions - are not yet declared, therefore we cannot provide the C++ aliases. */ - -#@INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_SYS_SOCKET_H - -#if @HAVE_SYS_SOCKET_H@ - -# define _GL_ALREADY_INCLUDING_SYS_SOCKET_H - -/* On many platforms, assumes prior inclusion of - . */ -# include - -/* On FreeBSD 6.4, defines some macros that assume that NULL - is defined. */ -# include - -/* The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ - -# undef _GL_ALREADY_INCLUDING_SYS_SOCKET_H - -#endif - -#ifndef _@GUARD_PREFIX@_SYS_SOCKET_H -#define _@GUARD_PREFIX@_SYS_SOCKET_H - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif -_GL_INLINE_HEADER_BEGIN -#ifndef _GL_SYS_SOCKET_INLINE -# define _GL_SYS_SOCKET_INLINE _GL_INLINE -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -#if !@HAVE_SA_FAMILY_T@ -# if !GNULIB_defined_sa_family_t -/* On OS/2 kLIBC, sa_family_t is unsigned char unless TCPV40HDRS is defined. */ -# if !defined __KLIBC__ || defined TCPV40HDRS -typedef unsigned short sa_family_t; -# else -typedef unsigned char sa_family_t; -# endif -# define GNULIB_defined_sa_family_t 1 -# endif -#endif - -#if @HAVE_STRUCT_SOCKADDR_STORAGE@ -/* Make the 'struct sockaddr_storage' field 'ss_family' visible on AIX 7.1. */ -# if !@HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ -# ifndef ss_family -# define ss_family __ss_family -# endif -# endif -#else -# include -/* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on - 2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */ -# define __ss_aligntype unsigned long int -# define _SS_SIZE 256 -# define _SS_PADSIZE \ - (_SS_SIZE - ((sizeof (sa_family_t) >= alignof (__ss_aligntype) \ - ? sizeof (sa_family_t) \ - : alignof (__ss_aligntype)) \ - + sizeof (__ss_aligntype))) - -# if !GNULIB_defined_struct_sockaddr_storage -struct sockaddr_storage -{ - sa_family_t ss_family; /* Address family, etc. */ - __ss_aligntype __ss_align; /* Force desired alignment. */ - char __ss_padding[_SS_PADSIZE]; -}; -# define GNULIB_defined_struct_sockaddr_storage 1 -# endif - -#endif - -/* Get struct iovec. */ -/* But avoid namespace pollution on glibc systems. */ -#if ! defined __GLIBC__ -# include -#endif - -#if @HAVE_SYS_SOCKET_H@ - -/* A platform that has . */ - -/* For shutdown(). */ -# if !defined SHUT_RD -# define SHUT_RD 0 -# endif -# if !defined SHUT_WR -# define SHUT_WR 1 -# endif -# if !defined SHUT_RDWR -# define SHUT_RDWR 2 -# endif - -#else - -# ifdef __CYGWIN__ -# error "Cygwin does have a sys/socket.h, doesn't it?!?" -# endif - -/* A platform that lacks . - - Currently only MinGW is supported. See the gnulib manual regarding - Windows sockets. MinGW has the header files winsock2.h and - ws2tcpip.h that declare the sys/socket.h definitions we need. Note - that you can influence which definitions you get by setting the - WINVER symbol before including these two files. For example, - getaddrinfo is only available if _WIN32_WINNT >= 0x0501 (that - symbol is set indirectly through WINVER). You can set this by - adding AC_DEFINE(WINVER, 0x0501) to configure.ac. Note that your - code may not run on older Windows releases then. My Windows 2000 - box was not able to run the code, for example. The situation is - slightly confusing because - - suggests that getaddrinfo should be available on all Windows - releases. */ - -# if @HAVE_WINSOCK2_H@ -# include -# endif -# if @HAVE_WS2TCPIP_H@ -# include -# endif - -/* For shutdown(). */ -# if !defined SHUT_RD && defined SD_RECEIVE -# define SHUT_RD SD_RECEIVE -# endif -# if !defined SHUT_WR && defined SD_SEND -# define SHUT_WR SD_SEND -# endif -# if !defined SHUT_RDWR && defined SD_BOTH -# define SHUT_RDWR SD_BOTH -# endif - -# if @HAVE_WINSOCK2_H@ -/* Include headers needed by the emulation code. */ -# include -# include - -# if !GNULIB_defined_socklen_t -typedef int socklen_t; -# define GNULIB_defined_socklen_t 1 -# endif - -# endif - -/* Rudimentary 'struct msghdr'; this works as long as you don't try to - access msg_control or msg_controllen. */ -struct msghdr { - void *msg_name; - socklen_t msg_namelen; - struct iovec *msg_iov; - int msg_iovlen; - int msg_flags; -}; - -#endif - -/* Fix some definitions from . */ - -#if @HAVE_WINSOCK2_H@ - -# if !GNULIB_defined_rpl_fd_isset - -/* Re-define FD_ISSET to avoid a WSA call while we are not using - network sockets. */ -_GL_SYS_SOCKET_INLINE int -rpl_fd_isset (SOCKET fd, fd_set * set) -{ - u_int i; - if (set == NULL) - return 0; - - for (i = 0; i < set->fd_count; i++) - if (set->fd_array[i] == fd) - return 1; - - return 0; -} - -# define GNULIB_defined_rpl_fd_isset 1 -# endif - -# undef FD_ISSET -# define FD_ISSET(fd, set) rpl_fd_isset(fd, set) - -#endif - -/* Hide some function declarations from . */ - -#if @HAVE_WINSOCK2_H@ -# if !defined _@GUARD_PREFIX@_UNISTD_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef close -# define close close_used_without_including_unistd_h -# else - _GL_WARN_ON_USE (close, - "close() used without including "); -# endif -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gethostname -# define gethostname gethostname_used_without_including_unistd_h -# else - _GL_WARN_ON_USE (gethostname, - "gethostname() used without including "); -# endif -# endif -# if !defined _@GUARD_PREFIX@_SYS_SELECT_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef select -# define select select_used_without_including_sys_select_h -# else - _GL_WARN_ON_USE (select, - "select() used without including "); -# endif -# endif -#endif - -/* Wrap everything else to use libc file descriptors for sockets. */ - -#if @GNULIB_SOCKET@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef socket -# define socket rpl_socket -# endif -_GL_FUNCDECL_RPL (socket, int, (int domain, int type, int protocol)); -_GL_CXXALIAS_RPL (socket, int, (int domain, int type, int protocol)); -# else -_GL_CXXALIAS_SYS (socket, int, (int domain, int type, int protocol)); -# endif -_GL_CXXALIASWARN (socket); -#elif @HAVE_WINSOCK2_H@ -# undef socket -# define socket socket_used_without_requesting_gnulib_module_socket -#elif defined GNULIB_POSIXCHECK -# undef socket -# if HAVE_RAW_DECL_SOCKET -_GL_WARN_ON_USE (socket, "socket is not always POSIX compliant - " - "use gnulib module socket for portability"); -# endif -#endif - -#if @GNULIB_CONNECT@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef connect -# define connect rpl_connect -# endif -_GL_FUNCDECL_RPL (connect, int, - (int fd, const struct sockaddr *addr, socklen_t addrlen) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (connect, int, - (int fd, const struct sockaddr *addr, socklen_t addrlen)); -# else -/* Need to cast, because on NonStop Kernel, the third parameter is - size_t addrlen. */ -_GL_CXXALIAS_SYS_CAST (connect, int, - (int fd, - const struct sockaddr *addr, socklen_t addrlen)); -# endif -_GL_CXXALIASWARN (connect); -#elif @HAVE_WINSOCK2_H@ -# undef connect -# define connect socket_used_without_requesting_gnulib_module_connect -#elif defined GNULIB_POSIXCHECK -# undef connect -# if HAVE_RAW_DECL_CONNECT -_GL_WARN_ON_USE (connect, "connect is not always POSIX compliant - " - "use gnulib module connect for portability"); -# endif -#endif - -#if @GNULIB_ACCEPT@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef accept -# define accept rpl_accept -# endif -_GL_FUNCDECL_RPL (accept, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -_GL_CXXALIAS_RPL (accept, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# else -/* Need to cast, because on Solaris 10 systems, the third parameter is - void *addrlen. */ -_GL_CXXALIAS_SYS_CAST (accept, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# endif -_GL_CXXALIASWARN (accept); -#elif @HAVE_WINSOCK2_H@ -# undef accept -# define accept accept_used_without_requesting_gnulib_module_accept -#elif defined GNULIB_POSIXCHECK -# undef accept -# if HAVE_RAW_DECL_ACCEPT -_GL_WARN_ON_USE (accept, "accept is not always POSIX compliant - " - "use gnulib module accept for portability"); -# endif -#endif - -#if @GNULIB_BIND@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef bind -# define bind rpl_bind -# endif -_GL_FUNCDECL_RPL (bind, int, - (int fd, const struct sockaddr *addr, socklen_t addrlen) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (bind, int, - (int fd, const struct sockaddr *addr, socklen_t addrlen)); -# else -/* Need to cast, because on NonStop Kernel, the third parameter is - size_t addrlen. */ -_GL_CXXALIAS_SYS_CAST (bind, int, - (int fd, - const struct sockaddr *addr, socklen_t addrlen)); -# endif -_GL_CXXALIASWARN (bind); -#elif @HAVE_WINSOCK2_H@ -# undef bind -# define bind bind_used_without_requesting_gnulib_module_bind -#elif defined GNULIB_POSIXCHECK -# undef bind -# if HAVE_RAW_DECL_BIND -_GL_WARN_ON_USE (bind, "bind is not always POSIX compliant - " - "use gnulib module bind for portability"); -# endif -#endif - -#if @GNULIB_GETPEERNAME@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getpeername -# define getpeername rpl_getpeername -# endif -_GL_FUNCDECL_RPL (getpeername, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (getpeername, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# else -/* Need to cast, because on Solaris 10 systems, the third parameter is - void *addrlen. */ -_GL_CXXALIAS_SYS_CAST (getpeername, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# endif -_GL_CXXALIASWARN (getpeername); -#elif @HAVE_WINSOCK2_H@ -# undef getpeername -# define getpeername getpeername_used_without_requesting_gnulib_module_getpeername -#elif defined GNULIB_POSIXCHECK -# undef getpeername -# if HAVE_RAW_DECL_GETPEERNAME -_GL_WARN_ON_USE (getpeername, "getpeername is not always POSIX compliant - " - "use gnulib module getpeername for portability"); -# endif -#endif - -#if @GNULIB_GETSOCKNAME@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getsockname -# define getsockname rpl_getsockname -# endif -_GL_FUNCDECL_RPL (getsockname, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (getsockname, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# else -/* Need to cast, because on Solaris 10 systems, the third parameter is - void *addrlen. */ -_GL_CXXALIAS_SYS_CAST (getsockname, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# endif -_GL_CXXALIASWARN (getsockname); -#elif @HAVE_WINSOCK2_H@ -# undef getsockname -# define getsockname getsockname_used_without_requesting_gnulib_module_getsockname -#elif defined GNULIB_POSIXCHECK -# undef getsockname -# if HAVE_RAW_DECL_GETSOCKNAME -_GL_WARN_ON_USE (getsockname, "getsockname is not always POSIX compliant - " - "use gnulib module getsockname for portability"); -# endif -#endif - -#if @GNULIB_GETSOCKOPT@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getsockopt -# define getsockopt rpl_getsockopt -# endif -_GL_FUNCDECL_RPL (getsockopt, int, (int fd, int level, int optname, - void *optval, socklen_t *optlen) - _GL_ARG_NONNULL ((4, 5))); -_GL_CXXALIAS_RPL (getsockopt, int, (int fd, int level, int optname, - void *optval, socklen_t *optlen)); -# else -/* Need to cast, because on Solaris 10 systems, the fifth parameter is - void *optlen. */ -_GL_CXXALIAS_SYS_CAST (getsockopt, int, (int fd, int level, int optname, - void *optval, socklen_t *optlen)); -# endif -_GL_CXXALIASWARN (getsockopt); -#elif @HAVE_WINSOCK2_H@ -# undef getsockopt -# define getsockopt getsockopt_used_without_requesting_gnulib_module_getsockopt -#elif defined GNULIB_POSIXCHECK -# undef getsockopt -# if HAVE_RAW_DECL_GETSOCKOPT -_GL_WARN_ON_USE (getsockopt, "getsockopt is not always POSIX compliant - " - "use gnulib module getsockopt for portability"); -# endif -#endif - -#if @GNULIB_LISTEN@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef listen -# define listen rpl_listen -# endif -_GL_FUNCDECL_RPL (listen, int, (int fd, int backlog)); -_GL_CXXALIAS_RPL (listen, int, (int fd, int backlog)); -# else -_GL_CXXALIAS_SYS (listen, int, (int fd, int backlog)); -# endif -_GL_CXXALIASWARN (listen); -#elif @HAVE_WINSOCK2_H@ -# undef listen -# define listen listen_used_without_requesting_gnulib_module_listen -#elif defined GNULIB_POSIXCHECK -# undef listen -# if HAVE_RAW_DECL_LISTEN -_GL_WARN_ON_USE (listen, "listen is not always POSIX compliant - " - "use gnulib module listen for portability"); -# endif -#endif - -#if @GNULIB_RECV@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef recv -# define recv rpl_recv -# endif -_GL_FUNCDECL_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); -# else -_GL_CXXALIAS_SYS (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); -# endif -_GL_CXXALIASWARN (recv); -#elif @HAVE_WINSOCK2_H@ -# undef recv -# define recv recv_used_without_requesting_gnulib_module_recv -#elif defined GNULIB_POSIXCHECK -# undef recv -# if HAVE_RAW_DECL_RECV -_GL_WARN_ON_USE (recv, "recv is not always POSIX compliant - " - "use gnulib module recv for portability"); -# endif -#endif - -#if @GNULIB_SEND@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef send -# define send rpl_send -# endif -_GL_FUNCDECL_RPL (send, ssize_t, - (int fd, const void *buf, size_t len, int flags) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (send, ssize_t, - (int fd, const void *buf, size_t len, int flags)); -# else -_GL_CXXALIAS_SYS (send, ssize_t, - (int fd, const void *buf, size_t len, int flags)); -# endif -_GL_CXXALIASWARN (send); -#elif @HAVE_WINSOCK2_H@ -# undef send -# define send send_used_without_requesting_gnulib_module_send -#elif defined GNULIB_POSIXCHECK -# undef send -# if HAVE_RAW_DECL_SEND -_GL_WARN_ON_USE (send, "send is not always POSIX compliant - " - "use gnulib module send for portability"); -# endif -#endif - -#if @GNULIB_RECVFROM@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef recvfrom -# define recvfrom rpl_recvfrom -# endif -_GL_FUNCDECL_RPL (recvfrom, ssize_t, - (int fd, void *buf, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (recvfrom, ssize_t, - (int fd, void *buf, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen)); -# else -/* Need to cast, because on Solaris 10 systems, the sixth parameter is - void *fromlen. */ -_GL_CXXALIAS_SYS_CAST (recvfrom, ssize_t, - (int fd, void *buf, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen)); -# endif -_GL_CXXALIASWARN (recvfrom); -#elif @HAVE_WINSOCK2_H@ -# undef recvfrom -# define recvfrom recvfrom_used_without_requesting_gnulib_module_recvfrom -#elif defined GNULIB_POSIXCHECK -# undef recvfrom -# if HAVE_RAW_DECL_RECVFROM -_GL_WARN_ON_USE (recvfrom, "recvfrom is not always POSIX compliant - " - "use gnulib module recvfrom for portability"); -# endif -#endif - -#if @GNULIB_SENDTO@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef sendto -# define sendto rpl_sendto -# endif -_GL_FUNCDECL_RPL (sendto, ssize_t, - (int fd, const void *buf, size_t len, int flags, - const struct sockaddr *to, socklen_t tolen) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (sendto, ssize_t, - (int fd, const void *buf, size_t len, int flags, - const struct sockaddr *to, socklen_t tolen)); -# else -/* Need to cast, because on NonStop Kernel, the sixth parameter is - size_t tolen. */ -_GL_CXXALIAS_SYS_CAST (sendto, ssize_t, - (int fd, const void *buf, size_t len, int flags, - const struct sockaddr *to, socklen_t tolen)); -# endif -_GL_CXXALIASWARN (sendto); -#elif @HAVE_WINSOCK2_H@ -# undef sendto -# define sendto sendto_used_without_requesting_gnulib_module_sendto -#elif defined GNULIB_POSIXCHECK -# undef sendto -# if HAVE_RAW_DECL_SENDTO -_GL_WARN_ON_USE (sendto, "sendto is not always POSIX compliant - " - "use gnulib module sendto for portability"); -# endif -#endif - -#if @GNULIB_SETSOCKOPT@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef setsockopt -# define setsockopt rpl_setsockopt -# endif -_GL_FUNCDECL_RPL (setsockopt, int, (int fd, int level, int optname, - const void * optval, socklen_t optlen) - _GL_ARG_NONNULL ((4))); -_GL_CXXALIAS_RPL (setsockopt, int, (int fd, int level, int optname, - const void * optval, socklen_t optlen)); -# else -/* Need to cast, because on NonStop Kernel, the fifth parameter is - size_t optlen. */ -_GL_CXXALIAS_SYS_CAST (setsockopt, int, - (int fd, int level, int optname, - const void * optval, socklen_t optlen)); -# endif -_GL_CXXALIASWARN (setsockopt); -#elif @HAVE_WINSOCK2_H@ -# undef setsockopt -# define setsockopt setsockopt_used_without_requesting_gnulib_module_setsockopt -#elif defined GNULIB_POSIXCHECK -# undef setsockopt -# if HAVE_RAW_DECL_SETSOCKOPT -_GL_WARN_ON_USE (setsockopt, "setsockopt is not always POSIX compliant - " - "use gnulib module setsockopt for portability"); -# endif -#endif - -#if @GNULIB_SHUTDOWN@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef shutdown -# define shutdown rpl_shutdown -# endif -_GL_FUNCDECL_RPL (shutdown, int, (int fd, int how)); -_GL_CXXALIAS_RPL (shutdown, int, (int fd, int how)); -# else -_GL_CXXALIAS_SYS (shutdown, int, (int fd, int how)); -# endif -_GL_CXXALIASWARN (shutdown); -#elif @HAVE_WINSOCK2_H@ -# undef shutdown -# define shutdown shutdown_used_without_requesting_gnulib_module_shutdown -#elif defined GNULIB_POSIXCHECK -# undef shutdown -# if HAVE_RAW_DECL_SHUTDOWN -_GL_WARN_ON_USE (shutdown, "shutdown is not always POSIX compliant - " - "use gnulib module shutdown for portability"); -# endif -#endif - -#if @GNULIB_ACCEPT4@ -/* Accept a connection on a socket, with specific opening flags. - The flags are a bitmask, possibly including O_CLOEXEC (defined in ) - and O_TEXT, O_BINARY (defined in "binary-io.h"). - See also the Linux man page at - . */ -# if @HAVE_ACCEPT4@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define accept4 rpl_accept4 -# endif -_GL_FUNCDECL_RPL (accept4, int, - (int sockfd, struct sockaddr *addr, socklen_t *addrlen, - int flags)); -_GL_CXXALIAS_RPL (accept4, int, - (int sockfd, struct sockaddr *addr, socklen_t *addrlen, - int flags)); -# else -_GL_FUNCDECL_SYS (accept4, int, - (int sockfd, struct sockaddr *addr, socklen_t *addrlen, - int flags)); -_GL_CXXALIAS_SYS (accept4, int, - (int sockfd, struct sockaddr *addr, socklen_t *addrlen, - int flags)); -# endif -_GL_CXXALIASWARN (accept4); -#elif defined GNULIB_POSIXCHECK -# undef accept4 -# if HAVE_RAW_DECL_ACCEPT4 -_GL_WARN_ON_USE (accept4, "accept4 is unportable - " - "use gnulib module accept4 for portability"); -# endif -#endif - -_GL_INLINE_HEADER_END - -#endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ -#endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ -#endif diff --git a/gl/sys_stat.in.h b/gl/sys_stat.in.h deleted file mode 100644 index 6a6f2e6d7c..0000000000 --- a/gl/sys_stat.in.h +++ /dev/null @@ -1,732 +0,0 @@ -/* Provide a more complete sys/stat header file. - Copyright (C) 2005-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ - -/* This file is supposed to be used on platforms where is - incomplete. It is intended to provide definitions and prototypes - needed by an application. Start with what the system provides. */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined __need_system_sys_stat_h -/* Special invocation convention. */ - -#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_SYS_STAT_H - -/* Get nlink_t. - May also define off_t to a 64-bit type on native Windows. */ -#include - -/* Get struct timespec. */ -#include - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ - -#ifndef _@GUARD_PREFIX@_SYS_STAT_H -#define _@GUARD_PREFIX@_SYS_STAT_H - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -/* Before doing "#define mkdir rpl_mkdir" below, we need to include all - headers that may declare mkdir(). Native Windows platforms declare mkdir - in and/or , not in . */ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -# include /* mingw32, mingw64 */ -# include /* mingw64, MSVC 9 */ -#endif - -/* Native Windows platforms declare umask() in . */ -#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) -# include -#endif - -/* Large File Support on native Windows. */ -#if @WINDOWS_64_BIT_ST_SIZE@ -# define stat _stati64 -#endif - -#ifndef S_IFIFO -# ifdef _S_IFIFO -# define S_IFIFO _S_IFIFO -# endif -#endif - -#ifndef S_IFMT -# define S_IFMT 0170000 -#endif - -#if STAT_MACROS_BROKEN -# undef S_ISBLK -# undef S_ISCHR -# undef S_ISDIR -# undef S_ISFIFO -# undef S_ISLNK -# undef S_ISNAM -# undef S_ISMPB -# undef S_ISMPC -# undef S_ISNWK -# undef S_ISREG -# undef S_ISSOCK -#endif - -#ifndef S_ISBLK -# ifdef S_IFBLK -# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) -# else -# define S_ISBLK(m) 0 -# endif -#endif - -#ifndef S_ISCHR -# ifdef S_IFCHR -# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) -# else -# define S_ISCHR(m) 0 -# endif -#endif - -#ifndef S_ISDIR -# ifdef S_IFDIR -# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) -# else -# define S_ISDIR(m) 0 -# endif -#endif - -#ifndef S_ISDOOR /* Solaris 2.5 and up */ -# define S_ISDOOR(m) 0 -#endif - -#ifndef S_ISFIFO -# ifdef S_IFIFO -# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) -# else -# define S_ISFIFO(m) 0 -# endif -#endif - -#ifndef S_ISLNK -# ifdef S_IFLNK -# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) -# else -# define S_ISLNK(m) 0 -# endif -#endif - -#ifndef S_ISMPB /* V7 */ -# ifdef S_IFMPB -# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) -# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) -# else -# define S_ISMPB(m) 0 -# define S_ISMPC(m) 0 -# endif -#endif - -#ifndef S_ISMPX /* AIX */ -# define S_ISMPX(m) 0 -#endif - -#ifndef S_ISNAM /* Xenix */ -# ifdef S_IFNAM -# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) -# else -# define S_ISNAM(m) 0 -# endif -#endif - -#ifndef S_ISNWK /* HP/UX */ -# ifdef S_IFNWK -# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) -# else -# define S_ISNWK(m) 0 -# endif -#endif - -#ifndef S_ISPORT /* Solaris 10 and up */ -# define S_ISPORT(m) 0 -#endif - -#ifndef S_ISREG -# ifdef S_IFREG -# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) -# else -# define S_ISREG(m) 0 -# endif -#endif - -#ifndef S_ISSOCK -# ifdef S_IFSOCK -# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) -# else -# define S_ISSOCK(m) 0 -# endif -#endif - - -#ifndef S_TYPEISMQ -# define S_TYPEISMQ(p) 0 -#endif - -#ifndef S_TYPEISTMO -# define S_TYPEISTMO(p) 0 -#endif - - -#ifndef S_TYPEISSEM -# ifdef S_INSEM -# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) -# else -# define S_TYPEISSEM(p) 0 -# endif -#endif - -#ifndef S_TYPEISSHM -# ifdef S_INSHD -# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) -# else -# define S_TYPEISSHM(p) 0 -# endif -#endif - -/* high performance ("contiguous data") */ -#ifndef S_ISCTG -# define S_ISCTG(p) 0 -#endif - -/* Cray DMF (data migration facility): off line, with data */ -#ifndef S_ISOFD -# define S_ISOFD(p) 0 -#endif - -/* Cray DMF (data migration facility): off line, with no data */ -#ifndef S_ISOFL -# define S_ISOFL(p) 0 -#endif - -/* 4.4BSD whiteout */ -#ifndef S_ISWHT -# define S_ISWHT(m) 0 -#endif - -/* If any of the following are undefined, - define them to their de facto standard values. */ -#if !S_ISUID -# define S_ISUID 04000 -#endif -#if !S_ISGID -# define S_ISGID 02000 -#endif - -/* S_ISVTX is a common extension to POSIX. */ -#ifndef S_ISVTX -# define S_ISVTX 01000 -#endif - -#if !S_IRUSR && S_IREAD -# define S_IRUSR S_IREAD -#endif -#if !S_IRUSR -# define S_IRUSR 00400 -#endif -#if !S_IRGRP -# define S_IRGRP (S_IRUSR >> 3) -#endif -#if !S_IROTH -# define S_IROTH (S_IRUSR >> 6) -#endif - -#if !S_IWUSR && S_IWRITE -# define S_IWUSR S_IWRITE -#endif -#if !S_IWUSR -# define S_IWUSR 00200 -#endif -#if !S_IWGRP -# define S_IWGRP (S_IWUSR >> 3) -#endif -#if !S_IWOTH -# define S_IWOTH (S_IWUSR >> 6) -#endif - -#if !S_IXUSR && S_IEXEC -# define S_IXUSR S_IEXEC -#endif -#if !S_IXUSR -# define S_IXUSR 00100 -#endif -#if !S_IXGRP -# define S_IXGRP (S_IXUSR >> 3) -#endif -#if !S_IXOTH -# define S_IXOTH (S_IXUSR >> 6) -#endif - -#if !S_IRWXU -# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) -#endif -#if !S_IRWXG -# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) -#endif -#if !S_IRWXO -# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) -#endif - -/* S_IXUGO is a common extension to POSIX. */ -#if !S_IXUGO -# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) -#endif - -#ifndef S_IRWXUGO -# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) -#endif - -/* Macros for futimens and utimensat. */ -#ifndef UTIME_NOW -# define UTIME_NOW (-1) -# define UTIME_OMIT (-2) -#endif - - -#if @GNULIB_FCHMODAT@ -# if !@HAVE_FCHMODAT@ -_GL_FUNCDECL_SYS (fchmodat, int, - (int fd, char const *file, mode_t mode, int flag) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (fchmodat, int, - (int fd, char const *file, mode_t mode, int flag)); -_GL_CXXALIASWARN (fchmodat); -#elif defined GNULIB_POSIXCHECK -# undef fchmodat -# if HAVE_RAW_DECL_FCHMODAT -_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " - "use gnulib module openat for portability"); -# endif -#endif - - -#if @GNULIB_FSTAT@ -# if @REPLACE_FSTAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fstat -# define fstat rpl_fstat -# endif -_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); -# else -_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); -# endif -_GL_CXXALIASWARN (fstat); -#elif @WINDOWS_64_BIT_ST_SIZE@ -/* Above, we define stat to _stati64. */ -# define fstat _fstati64 -#elif defined GNULIB_POSIXCHECK -# undef fstat -# if HAVE_RAW_DECL_FSTAT -_GL_WARN_ON_USE (fstat, "fstat has portability problems - " - "use gnulib module fstat for portability"); -# endif -#endif - - -#if @GNULIB_FSTATAT@ -# if @REPLACE_FSTATAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fstatat -# define fstatat rpl_fstatat -# endif -_GL_FUNCDECL_RPL (fstatat, int, - (int fd, char const *name, struct stat *st, int flags) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (fstatat, int, - (int fd, char const *name, struct stat *st, int flags)); -# else -# if !@HAVE_FSTATAT@ -_GL_FUNCDECL_SYS (fstatat, int, - (int fd, char const *name, struct stat *st, int flags) - _GL_ARG_NONNULL ((2, 3))); -# endif -_GL_CXXALIAS_SYS (fstatat, int, - (int fd, char const *name, struct stat *st, int flags)); -# endif -_GL_CXXALIASWARN (fstatat); -#elif defined GNULIB_POSIXCHECK -# undef fstatat -# if HAVE_RAW_DECL_FSTATAT -_GL_WARN_ON_USE (fstatat, "fstatat is not portable - " - "use gnulib module openat for portability"); -# endif -#endif - - -#if @GNULIB_FUTIMENS@ -/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens - implementation relies on futimesat, which on Solaris 10 makes an invocation - to futimens that is meant to invoke the libc's futimens(), not gnulib's - futimens(). */ -# if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef futimens -# define futimens rpl_futimens -# endif -_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); -_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); -# else -# if !@HAVE_FUTIMENS@ -_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); -# endif -_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); -# endif -# if @HAVE_FUTIMENS@ -_GL_CXXALIASWARN (futimens); -# endif -#elif defined GNULIB_POSIXCHECK -# undef futimens -# if HAVE_RAW_DECL_FUTIMENS -_GL_WARN_ON_USE (futimens, "futimens is not portable - " - "use gnulib module futimens for portability"); -# endif -#endif - - -#if @GNULIB_LCHMOD@ -/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME - denotes a symbolic link. */ -# if !@HAVE_LCHMOD@ -/* The lchmod replacement follows symbolic links. Callers should take - this into account; lchmod should be applied only to arguments that - are known to not be symbolic links. On hosts that lack lchmod, - this can lead to race conditions between the check and the - invocation of lchmod, but we know of no workarounds that are - reliable in general. You might try requesting support for lchmod - from your operating system supplier. */ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define lchmod chmod -# endif -/* Need to cast, because on mingw, the second parameter of chmod is - int mode. */ -_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int, - (const char *filename, mode_t mode)); -# else -# if 0 /* assume already declared */ -_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); -# endif -# if @HAVE_LCHMOD@ -_GL_CXXALIASWARN (lchmod); -# endif -#elif defined GNULIB_POSIXCHECK -# undef lchmod -# if HAVE_RAW_DECL_LCHMOD -_GL_WARN_ON_USE (lchmod, "lchmod is unportable - " - "use gnulib module lchmod for portability"); -# endif -#endif - - -#if @GNULIB_LSTAT@ -# if ! @HAVE_LSTAT@ -/* mingw does not support symlinks, therefore it does not have lstat. But - without links, stat does just fine. */ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define lstat stat -# endif -_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf)); -# elif @REPLACE_LSTAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef lstat -# define lstat rpl_lstat -# endif -_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf)); -# else -_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf)); -# endif -# if @HAVE_LSTAT@ -_GL_CXXALIASWARN (lstat); -# endif -#elif defined GNULIB_POSIXCHECK -# undef lstat -# if HAVE_RAW_DECL_LSTAT -_GL_WARN_ON_USE (lstat, "lstat is unportable - " - "use gnulib module lstat for portability"); -# endif -#endif - - -#if @REPLACE_MKDIR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mkdir -# define mkdir rpl_mkdir -# endif -_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); -#else -/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. - Additionally, it declares _mkdir (and depending on compile flags, an - alias mkdir), only in the nonstandard includes and , - which are included above. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - -# if !GNULIB_defined_rpl_mkdir -static int -rpl_mkdir (char const *name, mode_t mode) -{ - return _mkdir (name); -} -# define GNULIB_defined_rpl_mkdir 1 -# endif - -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mkdir rpl_mkdir -# endif -_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); -# else -_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); -# endif -#endif -_GL_CXXALIASWARN (mkdir); - - -#if @GNULIB_MKDIRAT@ -# if !@HAVE_MKDIRAT@ -_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); -_GL_CXXALIASWARN (mkdirat); -#elif defined GNULIB_POSIXCHECK -# undef mkdirat -# if HAVE_RAW_DECL_MKDIRAT -_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " - "use gnulib module openat for portability"); -# endif -#endif - - -#if @GNULIB_MKFIFO@ -# if @REPLACE_MKFIFO@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mkfifo -# define mkfifo rpl_mkfifo -# endif -_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); -# else -# if !@HAVE_MKFIFO@ -_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); -# endif -_GL_CXXALIASWARN (mkfifo); -#elif defined GNULIB_POSIXCHECK -# undef mkfifo -# if HAVE_RAW_DECL_MKFIFO -_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " - "use gnulib module mkfifo for portability"); -# endif -#endif - - -#if @GNULIB_MKFIFOAT@ -# if !@HAVE_MKFIFOAT@ -_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); -_GL_CXXALIASWARN (mkfifoat); -#elif defined GNULIB_POSIXCHECK -# undef mkfifoat -# if HAVE_RAW_DECL_MKFIFOAT -_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " - "use gnulib module mkfifoat for portability"); -# endif -#endif - - -#if @GNULIB_MKNOD@ -# if @REPLACE_MKNOD@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mknod -# define mknod rpl_mknod -# endif -_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); -# else -# if !@HAVE_MKNOD@ -_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ -_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); -# endif -_GL_CXXALIASWARN (mknod); -#elif defined GNULIB_POSIXCHECK -# undef mknod -# if HAVE_RAW_DECL_MKNOD -_GL_WARN_ON_USE (mknod, "mknod is not portable - " - "use gnulib module mknod for portability"); -# endif -#endif - - -#if @GNULIB_MKNODAT@ -# if !@HAVE_MKNODAT@ -_GL_FUNCDECL_SYS (mknodat, int, - (int fd, char const *file, mode_t mode, dev_t dev) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (mknodat, int, - (int fd, char const *file, mode_t mode, dev_t dev)); -_GL_CXXALIASWARN (mknodat); -#elif defined GNULIB_POSIXCHECK -# undef mknodat -# if HAVE_RAW_DECL_MKNODAT -_GL_WARN_ON_USE (mknodat, "mknodat is not portable - " - "use gnulib module mkfifoat for portability"); -# endif -#endif - - -#if @GNULIB_STAT@ -# if @REPLACE_STAT@ -/* We can't use the object-like #define stat rpl_stat, because of - struct stat. This means that rpl_stat will not be used if the user - does (stat)(a,b). Oh well. */ -# if defined _AIX && defined stat && defined _LARGE_FILES - /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, - so we have to replace stat64() instead of stat(). */ -# undef stat64 -# define stat64(name, st) rpl_stat (name, st) -# elif @WINDOWS_64_BIT_ST_SIZE@ - /* Above, we define stat to _stati64. */ -# if defined __MINGW32__ && defined _stati64 -# ifndef _USE_32BIT_TIME_T - /* The system headers define _stati64 to _stat64. */ -# undef _stat64 -# define _stat64(name, st) rpl_stat (name, st) -# endif -# elif defined _MSC_VER && defined _stati64 -# ifdef _USE_32BIT_TIME_T - /* The system headers define _stati64 to _stat32i64. */ -# undef _stat32i64 -# define _stat32i64(name, st) rpl_stat (name, st) -# else - /* The system headers define _stati64 to _stat64. */ -# undef _stat64 -# define _stat64(name, st) rpl_stat (name, st) -# endif -# else -# undef _stati64 -# define _stati64(name, st) rpl_stat (name, st) -# endif -# elif defined __MINGW32__ && defined stat -# ifdef _USE_32BIT_TIME_T - /* The system headers define stat to _stat32i64. */ -# undef _stat32i64 -# define _stat32i64(name, st) rpl_stat (name, st) -# else - /* The system headers define stat to _stat64. */ -# undef _stat64 -# define _stat64(name, st) rpl_stat (name, st) -# endif -# elif defined _MSC_VER && defined stat -# ifdef _USE_32BIT_TIME_T - /* The system headers define stat to _stat32. */ -# undef _stat32 -# define _stat32(name, st) rpl_stat (name, st) -# else - /* The system headers define stat to _stat64i32. */ -# undef _stat64i32 -# define _stat64i32(name, st) rpl_stat (name, st) -# endif -# else /* !(_AIX ||__MINGW32__ || _MSC_VER) */ -# undef stat -# define stat(name, st) rpl_stat (name, st) -# endif /* !_LARGE_FILES */ -_GL_EXTERN_C int stat (const char *name, struct stat *buf) - _GL_ARG_NONNULL ((1, 2)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef stat -# if HAVE_RAW_DECL_STAT -_GL_WARN_ON_USE (stat, "stat is unportable - " - "use gnulib module stat for portability"); -# endif -#endif - - -#if @GNULIB_UTIMENSAT@ -/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat - implementation relies on futimesat, which on Solaris 10 makes an invocation - to utimensat that is meant to invoke the libc's utimensat(), not gnulib's - utimensat(). */ -# if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef utimensat -# define utimensat rpl_utimensat -# endif -_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, - struct timespec const times[2], int flag) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, - struct timespec const times[2], int flag)); -# else -# if !@HAVE_UTIMENSAT@ -_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, - struct timespec const times[2], int flag) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, - struct timespec const times[2], int flag)); -# endif -# if @HAVE_UTIMENSAT@ -_GL_CXXALIASWARN (utimensat); -# endif -#elif defined GNULIB_POSIXCHECK -# undef utimensat -# if HAVE_RAW_DECL_UTIMENSAT -_GL_WARN_ON_USE (utimensat, "utimensat is not portable - " - "use gnulib module utimensat for portability"); -# endif -#endif - - -#endif /* _@GUARD_PREFIX@_SYS_STAT_H */ -#endif /* _@GUARD_PREFIX@_SYS_STAT_H */ -#endif diff --git a/gl/sys_time.in.h b/gl/sys_time.in.h deleted file mode 100644 index 5a8caf3c5e..0000000000 --- a/gl/sys_time.in.h +++ /dev/null @@ -1,220 +0,0 @@ -/* Provide a more complete sys/time.h. - - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* Written by Paul Eggert. */ - -#ifndef _@GUARD_PREFIX@_SYS_TIME_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* On Cygwin and on many BSDish systems, includes itself - recursively via . - Simply delegate to the system's header in this case; it is a no-op. - Without this extra ifdef, the C++ gettimeofday declaration below - would be a forward declaration in gnulib's nested . */ -#if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_ -# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ -#else - -/* The include_next requires a split double-inclusion guard. */ -#if @HAVE_SYS_TIME_H@ -# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ -#endif - -#ifndef _@GUARD_PREFIX@_SYS_TIME_H -#define _@GUARD_PREFIX@_SYS_TIME_H - -#if ! @HAVE_SYS_TIME_H@ -# include -#endif - -/* On native Windows with MSVC, get the 'struct timeval' type. - Also, on native Windows with a 64-bit time_t, where we are overriding the - 'struct timeval' type, get all declarations of system functions whose - signature contains 'struct timeval'. */ -#if (defined _MSC_VER || @REPLACE_STRUCT_TIMEVAL@) && @HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H -# define _GL_INCLUDING_WINSOCK2_H -# include -# undef _GL_INCLUDING_WINSOCK2_H -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !@HAVE_STRUCT_TIMEVAL@ || @REPLACE_STRUCT_TIMEVAL@ - -# if @REPLACE_STRUCT_TIMEVAL@ -# define timeval rpl_timeval -# endif - -# if !GNULIB_defined_struct_timeval -struct timeval -{ - time_t tv_sec; - long int tv_usec; -}; -# define GNULIB_defined_struct_timeval 1 -# endif - -#endif - -#ifdef __cplusplus -} -#endif - -#if @GNULIB_GETTIMEOFDAY@ -# if @REPLACE_GETTIMEOFDAY@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gettimeofday -# define gettimeofday rpl_gettimeofday -# endif -_GL_FUNCDECL_RPL (gettimeofday, int, - (struct timeval *restrict, void *restrict) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (gettimeofday, int, - (struct timeval *restrict, void *restrict)); -# else -# if !@HAVE_GETTIMEOFDAY@ -_GL_FUNCDECL_SYS (gettimeofday, int, - (struct timeval *restrict, void *restrict) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on glibc systems, by default, the second argument is - struct timezone *. */ -_GL_CXXALIAS_SYS_CAST (gettimeofday, int, - (struct timeval *restrict, void *restrict)); -# endif -_GL_CXXALIASWARN (gettimeofday); -# if defined __cplusplus && defined GNULIB_NAMESPACE -namespace GNULIB_NAMESPACE { - typedef ::timeval -#undef timeval - timeval; -} -# endif -#elif defined GNULIB_POSIXCHECK -# undef gettimeofday -# if HAVE_RAW_DECL_GETTIMEOFDAY -_GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - " - "use gnulib module gettimeofday for portability"); -# endif -#endif - -/* Hide some function declarations from . */ - -#if defined _MSC_VER && @HAVE_WINSOCK2_H@ -# if !defined _@GUARD_PREFIX@_UNISTD_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef close -# define close close_used_without_including_unistd_h -# else - _GL_WARN_ON_USE (close, - "close() used without including "); -# endif -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gethostname -# define gethostname gethostname_used_without_including_unistd_h -# else - _GL_WARN_ON_USE (gethostname, - "gethostname() used without including "); -# endif -# endif -# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef socket -# define socket socket_used_without_including_sys_socket_h -# undef connect -# define connect connect_used_without_including_sys_socket_h -# undef accept -# define accept accept_used_without_including_sys_socket_h -# undef bind -# define bind bind_used_without_including_sys_socket_h -# undef getpeername -# define getpeername getpeername_used_without_including_sys_socket_h -# undef getsockname -# define getsockname getsockname_used_without_including_sys_socket_h -# undef getsockopt -# define getsockopt getsockopt_used_without_including_sys_socket_h -# undef listen -# define listen listen_used_without_including_sys_socket_h -# undef recv -# define recv recv_used_without_including_sys_socket_h -# undef send -# define send send_used_without_including_sys_socket_h -# undef recvfrom -# define recvfrom recvfrom_used_without_including_sys_socket_h -# undef sendto -# define sendto sendto_used_without_including_sys_socket_h -# undef setsockopt -# define setsockopt setsockopt_used_without_including_sys_socket_h -# undef shutdown -# define shutdown shutdown_used_without_including_sys_socket_h -# else - _GL_WARN_ON_USE (socket, - "socket() used without including "); - _GL_WARN_ON_USE (connect, - "connect() used without including "); - _GL_WARN_ON_USE (accept, - "accept() used without including "); - _GL_WARN_ON_USE (bind, - "bind() used without including "); - _GL_WARN_ON_USE (getpeername, - "getpeername() used without including "); - _GL_WARN_ON_USE (getsockname, - "getsockname() used without including "); - _GL_WARN_ON_USE (getsockopt, - "getsockopt() used without including "); - _GL_WARN_ON_USE (listen, - "listen() used without including "); - _GL_WARN_ON_USE (recv, - "recv() used without including "); - _GL_WARN_ON_USE (send, - "send() used without including "); - _GL_WARN_ON_USE (recvfrom, - "recvfrom() used without including "); - _GL_WARN_ON_USE (sendto, - "sendto() used without including "); - _GL_WARN_ON_USE (setsockopt, - "setsockopt() used without including "); - _GL_WARN_ON_USE (shutdown, - "shutdown() used without including "); -# endif -# endif -# if !defined _@GUARD_PREFIX@_SYS_SELECT_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef select -# define select select_used_without_including_sys_select_h -# else - _GL_WARN_ON_USE (select, - "select() used without including "); -# endif -# endif -#endif - -#endif /* _@GUARD_PREFIX@_SYS_TIME_H */ -#endif /* _CYGWIN_SYS_TIME_H */ -#endif /* _@GUARD_PREFIX@_SYS_TIME_H */ diff --git a/gl/sys_types.in.h b/gl/sys_types.in.h deleted file mode 100644 index 8a795e56c5..0000000000 --- a/gl/sys_types.in.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Provide a more complete sys/types.h. - - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#ifndef _@GUARD_PREFIX@_SYS_TYPES_H - -/* The include_next requires a split double-inclusion guard. */ -# define _GL_INCLUDING_SYS_TYPES_H -#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ -# undef _GL_INCLUDING_SYS_TYPES_H - -#ifndef _@GUARD_PREFIX@_SYS_TYPES_H -#define _@GUARD_PREFIX@_SYS_TYPES_H - -/* Override off_t if Large File Support is requested on native Windows. */ -#if @WINDOWS_64_BIT_OFF_T@ -/* Same as int64_t in . */ -# if defined _MSC_VER -# define off_t __int64 -# else -# define off_t long long int -# endif -/* Indicator, for gnulib internal purposes. */ -# define _GL_WINDOWS_64_BIT_OFF_T 1 -#endif - -/* MSVC 9 defines size_t in , not in . */ -/* But avoid namespace pollution on glibc systems. */ -#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ - && ! defined __GLIBC__ -# include -#endif - -#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ -#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ diff --git a/gl/sys_uio.in.h b/gl/sys_uio.in.h deleted file mode 100644 index 479dc31dae..0000000000 --- a/gl/sys_uio.in.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Substitute for . - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -# if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -# endif -@PRAGMA_COLUMNS@ - -#ifndef _@GUARD_PREFIX@_SYS_UIO_H - -#if @HAVE_SYS_UIO_H@ - -/* On OpenBSD 4.4, assumes prior inclusion of . */ -# include - -/* The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_SYS_UIO_H@ - -#endif - -#ifndef _@GUARD_PREFIX@_SYS_UIO_H -#define _@GUARD_PREFIX@_SYS_UIO_H - -#if !@HAVE_SYS_UIO_H@ -/* A platform that lacks . */ -/* Get 'size_t' and 'ssize_t'. */ -# include - -# ifdef __cplusplus -extern "C" { -# endif - -# if !GNULIB_defined_struct_iovec -/* All known platforms that lack also lack any declaration - of struct iovec in any other header. */ -struct iovec { - void *iov_base; - size_t iov_len; -}; -# define GNULIB_defined_struct_iovec 1 -# endif - -# ifdef __cplusplus -} -# endif - -#endif - -#endif /* _@GUARD_PREFIX@_SYS_UIO_H */ -#endif /* _@GUARD_PREFIX@_SYS_UIO_H */ diff --git a/gl/tests/Makefile.am b/gl/tests/Makefile.am deleted file mode 100644 index 66a9eacb7e..0000000000 --- a/gl/tests/Makefile.am +++ /dev/null @@ -1,725 +0,0 @@ -## DO NOT EDIT! GENERATED AUTOMATICALLY! -## Process this file with automake to produce Makefile.in. -# Copyright (C) 2002-2016 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file. If not, see . -# -# As a special exception to the GNU General Public License, -# this file may be distributed as part of a program that -# contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. - -AUTOMAKE_OPTIONS = 1.9.6 foreign - -SUBDIRS = . -TESTS = -XFAIL_TESTS = -TESTS_ENVIRONMENT = -noinst_PROGRAMS = -check_PROGRAMS = -noinst_HEADERS = -noinst_LIBRARIES = -check_LIBRARIES = libtests.a -EXTRA_DIST = -BUILT_SOURCES = -SUFFIXES = -MOSTLYCLEANFILES = core *.stackdump -MOSTLYCLEANDIRS = -CLEANFILES = -DISTCLEANFILES = -MAINTAINERCLEANFILES = - -AM_CPPFLAGS = \ - -D@gltests_WITNESS@=1 \ - -I. -I$(srcdir) \ - -I../.. -I$(srcdir)/../.. \ - -I../../gl -I$(srcdir)/../../gl - -LDADD = libtests.a ../../gl/libgnu.la libtests.a $(LIBTESTS_LIBDEPS) - -libtests_a_SOURCES = -libtests_a_LIBADD = $(gltests_LIBOBJS) -libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) -EXTRA_libtests_a_SOURCES = -AM_LIBTOOLFLAGS = --preserve-dup-deps - -TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' - -## begin gnulib module alloca-opt-tests - -TESTS += test-alloca-opt -check_PROGRAMS += test-alloca-opt - -EXTRA_DIST += test-alloca-opt.c - -## end gnulib module alloca-opt-tests - -## begin gnulib module binary-io - -libtests_a_SOURCES += binary-io.h binary-io.c - -## end gnulib module binary-io - -## begin gnulib module binary-io-tests - -TESTS += test-binary-io.sh -check_PROGRAMS += test-binary-io - -EXTRA_DIST += test-binary-io.sh test-binary-io.c macros.h - -## end gnulib module binary-io-tests - -## begin gnulib module byteswap-tests - -TESTS += test-byteswap -check_PROGRAMS += test-byteswap -EXTRA_DIST += test-byteswap.c macros.h - -## end gnulib module byteswap-tests - -## begin gnulib module c-ctype-tests - -TESTS += test-c-ctype -check_PROGRAMS += test-c-ctype -EXTRA_DIST += test-c-ctype.c macros.h - -## end gnulib module c-ctype-tests - -## begin gnulib module ctype - -BUILT_SOURCES += ctype.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_CTYPE_H''@|$(NEXT_CTYPE_H)|g' \ - -e 's/@''GNULIB_ISBLANK''@/$(GNULIB_ISBLANK)/g' \ - -e 's/@''HAVE_ISBLANK''@/$(HAVE_ISBLANK)/g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/ctype.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += ctype.h ctype.h-t - -EXTRA_DIST += ctype.in.h - -## end gnulib module ctype - -## begin gnulib module ctype-tests - -TESTS += test-ctype -check_PROGRAMS += test-ctype -EXTRA_DIST += test-ctype.c - -## end gnulib module ctype-tests - -## begin gnulib module errno-tests - -TESTS += test-errno -check_PROGRAMS += test-errno - -EXTRA_DIST += test-errno.c - -## end gnulib module errno-tests - -## begin gnulib module fcntl-h - -BUILT_SOURCES += fcntl.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ - -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ - -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ - -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ - -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ - -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ - -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ - -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ - -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ - -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/fcntl.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += fcntl.h fcntl.h-t - -EXTRA_DIST += fcntl.in.h - -## end gnulib module fcntl-h - -## begin gnulib module fcntl-h-tests - -TESTS += test-fcntl-h -check_PROGRAMS += test-fcntl-h -EXTRA_DIST += test-fcntl-h.c - -## end gnulib module fcntl-h-tests - -## begin gnulib module fdopen - - -EXTRA_DIST += fdopen.c - -EXTRA_libtests_a_SOURCES += fdopen.c - -## end gnulib module fdopen - -## begin gnulib module fdopen-tests - -TESTS += test-fdopen -check_PROGRAMS += test-fdopen -EXTRA_DIST += test-fdopen.c signature.h macros.h - -## end gnulib module fdopen-tests - -## begin gnulib module fgetc-tests - -TESTS += test-fgetc -check_PROGRAMS += test-fgetc -EXTRA_DIST += test-fgetc.c signature.h macros.h - -## end gnulib module fgetc-tests - -## begin gnulib module float-tests - -TESTS += test-float -check_PROGRAMS += test-float -EXTRA_DIST += test-float.c macros.h - -## end gnulib module float-tests - -## begin gnulib module fpucw - - -EXTRA_DIST += fpucw.h - -## end gnulib module fpucw - -## begin gnulib module fputc-tests - -TESTS += test-fputc -check_PROGRAMS += test-fputc -EXTRA_DIST += test-fputc.c signature.h macros.h - -## end gnulib module fputc-tests - -## begin gnulib module fread-tests - -TESTS += test-fread -check_PROGRAMS += test-fread -EXTRA_DIST += test-fread.c signature.h macros.h - -## end gnulib module fread-tests - -## begin gnulib module fstat-tests - -TESTS += test-fstat -check_PROGRAMS += test-fstat -EXTRA_DIST += test-fstat.c signature.h macros.h - -## end gnulib module fstat-tests - -## begin gnulib module ftell-tests - -TESTS += test-ftell.sh test-ftell2.sh test-ftell3 -check_PROGRAMS += test-ftell test-ftell3 -MOSTLYCLEANFILES += t-ftell3.tmp -EXTRA_DIST += test-ftell.c test-ftell.sh test-ftell2.sh test-ftell3.c signature.h macros.h - -## end gnulib module ftell-tests - -## begin gnulib module ftello-tests - -TESTS += test-ftello.sh test-ftello2.sh test-ftello3 test-ftello4.sh -check_PROGRAMS += test-ftello test-ftello3 test-ftello4 -MOSTLYCLEANFILES += t-ftello3.tmp -EXTRA_DIST += test-ftello.c test-ftello.sh test-ftello2.sh test-ftello3.c test-ftello4.c test-ftello4.sh signature.h macros.h - -## end gnulib module ftello-tests - -## begin gnulib module func-tests - -TESTS += test-func -check_PROGRAMS += test-func -EXTRA_DIST += test-func.c macros.h - -## end gnulib module func-tests - -## begin gnulib module fwrite-tests - -TESTS += test-fwrite -check_PROGRAMS += test-fwrite -EXTRA_DIST += test-fwrite.c signature.h macros.h - -## end gnulib module fwrite-tests - -## begin gnulib module getdelim-tests - -TESTS += test-getdelim -check_PROGRAMS += test-getdelim -MOSTLYCLEANFILES += test-getdelim.txt -EXTRA_DIST += test-getdelim.c signature.h macros.h - -## end gnulib module getdelim-tests - -## begin gnulib module getline-tests - -TESTS += test-getline -check_PROGRAMS += test-getline -MOSTLYCLEANFILES += test-getline.txt -EXTRA_DIST += test-getline.c signature.h macros.h - -## end gnulib module getline-tests - -## begin gnulib module getpagesize - - -EXTRA_DIST += getpagesize.c - -EXTRA_libtests_a_SOURCES += getpagesize.c - -## end gnulib module getpagesize - -## begin gnulib module gettimeofday-tests - -TESTS += test-gettimeofday -check_PROGRAMS += test-gettimeofday - -EXTRA_DIST += signature.h test-gettimeofday.c - -## end gnulib module gettimeofday-tests - -## begin gnulib module intprops-tests - -TESTS += test-intprops -check_PROGRAMS += test-intprops -EXTRA_DIST += test-intprops.c macros.h - -## end gnulib module intprops-tests - -## begin gnulib module inttypes-incomplete - -BUILT_SOURCES += inttypes.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ - -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \ - -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ - -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ - -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ - -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ - -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \ - -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \ - -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \ - -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \ - -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ - -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ - -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ - -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ - -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ - -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ - -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ - -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ - -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ - -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/inttypes.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += inttypes.h inttypes.h-t - -EXTRA_DIST += inttypes.in.h - -## end gnulib module inttypes-incomplete - -## begin gnulib module inttypes-tests - -TESTS += test-inttypes -check_PROGRAMS += test-inttypes -EXTRA_DIST += test-inttypes.c - -## end gnulib module inttypes-tests - -## begin gnulib module limits-h-tests - -TESTS += test-limits-h -check_PROGRAMS += test-limits-h -EXTRA_DIST += test-limits-h.c - -## end gnulib module limits-h-tests - -## begin gnulib module memchr-tests - -TESTS += test-memchr -check_PROGRAMS += test-memchr -EXTRA_DIST += test-memchr.c zerosize-ptr.h signature.h macros.h - -## end gnulib module memchr-tests - -## begin gnulib module netdb-tests - -TESTS += test-netdb -check_PROGRAMS += test-netdb -EXTRA_DIST += test-netdb.c - -## end gnulib module netdb-tests - -## begin gnulib module netinet_in-tests - -TESTS += test-netinet_in -check_PROGRAMS += test-netinet_in -EXTRA_DIST += test-netinet_in.c - -## end gnulib module netinet_in-tests - -## begin gnulib module read-file-tests - -TESTS += test-read-file -check_PROGRAMS += test-read-file -EXTRA_DIST += test-read-file.c - -## end gnulib module read-file-tests - -## begin gnulib module snippet/_Noreturn - -# Because this Makefile snippet defines a variable used by other -# gnulib Makefile snippets, it must be present in all Makefile.am that -# need it. This is ensured by the applicability 'all' defined above. - -_NORETURN_H=$(top_srcdir)/build-aux/snippet/_Noreturn.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/_Noreturn.h - -## end gnulib module snippet/_Noreturn - -## begin gnulib module snippet/arg-nonnull - -# The BUILT_SOURCES created by this Makefile snippet are not used via #include -# statements but through direct file reference. Therefore this snippet must be -# present in all Makefile.am that need it. This is ensured by the applicability -# 'all' defined above. - -BUILT_SOURCES += arg-nonnull.h -# The arg-nonnull.h that gets inserted into generated .h files is the same as -# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut -# off. -arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/GL_ARG_NONNULL/,$$p' \ - < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t - -ARG_NONNULL_H=arg-nonnull.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h - -## end gnulib module snippet/arg-nonnull - -## begin gnulib module snippet/c++defs - -# The BUILT_SOURCES created by this Makefile snippet are not used via #include -# statements but through direct file reference. Therefore this snippet must be -# present in all Makefile.am that need it. This is ensured by the applicability -# 'all' defined above. - -BUILT_SOURCES += c++defs.h -# The c++defs.h that gets inserted into generated .h files is the same as -# build-aux/snippet/c++defs.h, except that it has the copyright header cut off. -c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/_GL_CXXDEFS/,$$p' \ - < $(top_srcdir)/build-aux/snippet/c++defs.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += c++defs.h c++defs.h-t - -CXXDEFS_H=c++defs.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h - -## end gnulib module snippet/c++defs - -## begin gnulib module snippet/warn-on-use - -BUILT_SOURCES += warn-on-use.h -# The warn-on-use.h that gets inserted into generated .h files is the same as -# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut -# off. -warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/^.ifndef/,$$p' \ - < $(top_srcdir)/build-aux/snippet/warn-on-use.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t - -WARN_ON_USE_H=warn-on-use.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h - -## end gnulib module snippet/warn-on-use - -## begin gnulib module snprintf-tests - -TESTS += test-snprintf -check_PROGRAMS += test-snprintf - -EXTRA_DIST += test-snprintf.c signature.h macros.h - -## end gnulib module snprintf-tests - -## begin gnulib module stdalign-tests - -TESTS += test-stdalign -check_PROGRAMS += test-stdalign -EXTRA_DIST += test-stdalign.c macros.h - -## end gnulib module stdalign-tests - -## begin gnulib module stdbool-tests - -TESTS += test-stdbool -check_PROGRAMS += test-stdbool -EXTRA_DIST += test-stdbool.c - -## end gnulib module stdbool-tests - -## begin gnulib module stddef-tests - -TESTS += test-stddef -check_PROGRAMS += test-stddef -EXTRA_DIST += test-stddef.c - -## end gnulib module stddef-tests - -## begin gnulib module stdint-tests - -TESTS += test-stdint -check_PROGRAMS += test-stdint -EXTRA_DIST += test-stdint.c - -## end gnulib module stdint-tests - -## begin gnulib module stdio-tests - -TESTS += test-stdio -check_PROGRAMS += test-stdio -EXTRA_DIST += test-stdio.c - -## end gnulib module stdio-tests - -## begin gnulib module stdlib-tests - -TESTS += test-stdlib -check_PROGRAMS += test-stdlib -EXTRA_DIST += test-stdlib.c test-sys_wait.h - -## end gnulib module stdlib-tests - -## begin gnulib module string-tests - -TESTS += test-string -check_PROGRAMS += test-string -EXTRA_DIST += test-string.c - -## end gnulib module string-tests - -## begin gnulib module strings-tests - -TESTS += test-strings -check_PROGRAMS += test-strings -EXTRA_DIST += test-strings.c - -## end gnulib module strings-tests - -## begin gnulib module strnlen-tests - -TESTS += test-strnlen -check_PROGRAMS += test-strnlen -EXTRA_DIST += test-strnlen.c zerosize-ptr.h signature.h macros.h - -## end gnulib module strnlen-tests - -## begin gnulib module strverscmp-tests - -TESTS += test-strverscmp -check_PROGRAMS += test-strverscmp -EXTRA_DIST += test-strverscmp.c signature.h macros.h - -## end gnulib module strverscmp-tests - -## begin gnulib module sys_socket-tests - -TESTS += test-sys_socket -check_PROGRAMS += test-sys_socket -EXTRA_DIST += test-sys_socket.c - -## end gnulib module sys_socket-tests - -## begin gnulib module sys_stat-tests - -TESTS += test-sys_stat -check_PROGRAMS += test-sys_stat -EXTRA_DIST += test-sys_stat.c - -## end gnulib module sys_stat-tests - -## begin gnulib module sys_time-tests - -TESTS += test-sys_time -check_PROGRAMS += test-sys_time -EXTRA_DIST += test-sys_time.c - -## end gnulib module sys_time-tests - -## begin gnulib module sys_types-tests - -TESTS += test-sys_types -check_PROGRAMS += test-sys_types -EXTRA_DIST += test-sys_types.c - -## end gnulib module sys_types-tests - -## begin gnulib module sys_uio-tests - -TESTS += test-sys_uio -check_PROGRAMS += test-sys_uio -EXTRA_DIST += test-sys_uio.c - -## end gnulib module sys_uio-tests - -## begin gnulib module test-framework-sh-tests - -TESTS += test-init.sh -EXTRA_DIST += init.sh -EXTRA_DIST += test-init.sh - -## end gnulib module test-framework-sh-tests - -## begin gnulib module time-tests - -TESTS += test-time -check_PROGRAMS += test-time -EXTRA_DIST += test-time.c - -## end gnulib module time-tests - -## begin gnulib module unistd-tests - -TESTS += test-unistd -check_PROGRAMS += test-unistd -EXTRA_DIST += test-unistd.c - -## end gnulib module unistd-tests - -## begin gnulib module vasnprintf-tests - -TESTS += test-vasnprintf -check_PROGRAMS += test-vasnprintf - -EXTRA_DIST += test-vasnprintf.c macros.h - -## end gnulib module vasnprintf-tests - -## begin gnulib module vasprintf-tests - -TESTS += test-vasprintf -check_PROGRAMS += test-vasprintf - -EXTRA_DIST += test-vasprintf.c signature.h macros.h - -## end gnulib module vasprintf-tests - -## begin gnulib module vc-list-files-tests - -TESTS += test-vc-list-files-git.sh -TESTS += test-vc-list-files-cvs.sh -TESTS_ENVIRONMENT += abs_aux_dir='$(abs_aux_dir)' -EXTRA_DIST += test-vc-list-files-git.sh test-vc-list-files-cvs.sh - -## end gnulib module vc-list-files-tests - -## begin gnulib module verify-tests - -TESTS_ENVIRONMENT += MAKE='$(MAKE)' -TESTS += test-verify test-verify.sh -check_PROGRAMS += test-verify - -# This test expects compilation of test-verify.c to fail, and -# each time it fails, the makefile rule does not perform the usual -# "mv -f $name.Tpo $name.po, so tell make clean to remove that file. -MOSTLYCLEANFILES += .deps/test-verify.Tpo -EXTRA_DIST += test-verify.c test-verify.sh - -## end gnulib module verify-tests - -## begin gnulib module vsnprintf-tests - -TESTS += test-vsnprintf -check_PROGRAMS += test-vsnprintf - -EXTRA_DIST += test-vsnprintf.c signature.h macros.h - -## end gnulib module vsnprintf-tests - -## begin gnulib module wchar-tests - -TESTS += test-wchar -check_PROGRAMS += test-wchar -EXTRA_DIST += test-wchar.c - -## end gnulib module wchar-tests - -# Clean up after Solaris cc. -clean-local: - rm -rf SunWS_cache - -mostlyclean-local: mostlyclean-generic - @for dir in '' $(MOSTLYCLEANDIRS); do \ - if test -n "$$dir" && test -d $$dir; then \ - echo "rmdir $$dir"; rmdir $$dir; \ - fi; \ - done; \ - : diff --git a/gl/tests/binary-io.c b/gl/tests/binary-io.c deleted file mode 100644 index d828bcd015..0000000000 --- a/gl/tests/binary-io.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#define BINARY_IO_INLINE _GL_EXTERN_INLINE -#include "binary-io.h" -typedef int dummy; diff --git a/gl/tests/binary-io.h b/gl/tests/binary-io.h deleted file mode 100644 index 9f17c0d398..0000000000 --- a/gl/tests/binary-io.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Binary mode I/O. - Copyright (C) 2001, 2003, 2005, 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef _BINARY_H -#define _BINARY_H - -/* For systems that distinguish between text and binary I/O. - O_BINARY is guaranteed by the gnulib . */ -#include - -/* The MSVC7 doesn't like to be included after '#define fileno ...', - so we include it here first. */ -#include - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif -_GL_INLINE_HEADER_BEGIN -#ifndef BINARY_IO_INLINE -# define BINARY_IO_INLINE _GL_INLINE -#endif - -/* set_binary_mode (fd, mode) - sets the binary/text I/O mode of file descriptor fd to the given mode - (must be O_BINARY or O_TEXT) and returns the previous mode. */ -#if O_BINARY -# if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ -# include /* declares setmode() */ -# define set_binary_mode setmode -# else -# define set_binary_mode _setmode -# undef fileno -# define fileno _fileno -# endif -#else - /* On reasonable systems, binary I/O is the only choice. */ - /* Use a function rather than a macro, to avoid gcc warnings - "warning: statement with no effect". */ -BINARY_IO_INLINE int -set_binary_mode (int fd, int mode) -{ - (void) fd; - (void) mode; - return O_BINARY; -} -#endif - -/* SET_BINARY (fd); - changes the file descriptor fd to perform binary I/O. */ -#if defined __DJGPP__ || defined __EMX__ -# include /* declares isatty() */ - /* Avoid putting stdin/stdout in binary mode if it is connected to - the console, because that would make it impossible for the user - to interrupt the program through Ctrl-C or Ctrl-Break. */ -# define SET_BINARY(fd) ((void) (!isatty (fd) ? (set_binary_mode (fd, O_BINARY), 0) : 0)) -#else -# define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY)) -#endif - -_GL_INLINE_HEADER_END - -#endif /* _BINARY_H */ diff --git a/gl/tests/ctype.in.h b/gl/tests/ctype.in.h deleted file mode 100644 index 217812de10..0000000000 --- a/gl/tests/ctype.in.h +++ /dev/null @@ -1,57 +0,0 @@ -/* A substitute for ISO C99 , for platforms on which it is incomplete. - - Copyright (C) 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Written by Bruno Haible. */ - -/* - * ISO C 99 for platforms on which it is incomplete. - * - */ - -#ifndef _@GUARD_PREFIX@_CTYPE_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* Include the original . */ -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_CTYPE_H@ - -#ifndef _@GUARD_PREFIX@_CTYPE_H -#define _@GUARD_PREFIX@_CTYPE_H - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -/* Return non-zero if c is a blank, i.e. a space or tab character. */ -#if @GNULIB_ISBLANK@ -# if !@HAVE_ISBLANK@ -_GL_EXTERN_C int isblank (int c); -# endif -#elif defined GNULIB_POSIXCHECK -# undef isblank -# if HAVE_RAW_DECL_ISBLANK -_GL_WARN_ON_USE (isblank, "isblank is unportable - " - "use gnulib module isblank for portability"); -# endif -#endif - -#endif /* _@GUARD_PREFIX@_CTYPE_H */ -#endif /* _@GUARD_PREFIX@_CTYPE_H */ diff --git a/gl/tests/fcntl.in.h b/gl/tests/fcntl.in.h deleted file mode 100644 index b94397307e..0000000000 --- a/gl/tests/fcntl.in.h +++ /dev/null @@ -1,363 +0,0 @@ -/* Like , but with non-working flags defined to 0. - - Copyright (C) 2006-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* written by Paul Eggert */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined __need_system_fcntl_h -/* Special invocation convention. */ - -/* Needed before . - May also define off_t to a 64-bit type on native Windows. */ -#include -/* On some systems other than glibc, is a prerequisite of - . On glibc systems, we would like to avoid namespace pollution. - But on glibc systems, includes inside an - extern "C" { ... } block, which leads to errors in C++ mode with the - overridden from gnulib. These errors are known to be gone - with g++ version >= 4.3. */ -#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) -# include -#endif -#@INCLUDE_NEXT@ @NEXT_FCNTL_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_FCNTL_H - -/* Needed before . - May also define off_t to a 64-bit type on native Windows. */ -#include -/* On some systems other than glibc, is a prerequisite of - . On glibc systems, we would like to avoid namespace pollution. - But on glibc systems, includes inside an - extern "C" { ... } block, which leads to errors in C++ mode with the - overridden from gnulib. These errors are known to be gone - with g++ version >= 4.3. */ -#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) -# include -#endif -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_FCNTL_H@ - -#ifndef _@GUARD_PREFIX@_FCNTL_H -#define _@GUARD_PREFIX@_FCNTL_H - -#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ -# include -#endif - -/* Native Windows platforms declare open(), creat() in . */ -#if (@GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ - && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) -# include -#endif - - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - -/* Declare overridden functions. */ - -#if @GNULIB_FCNTL@ -# if @REPLACE_FCNTL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fcntl -# define fcntl rpl_fcntl -# endif -_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); -_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); -# else -# if !@HAVE_FCNTL@ -_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); -# endif -_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); -# endif -_GL_CXXALIASWARN (fcntl); -#elif defined GNULIB_POSIXCHECK -# undef fcntl -# if HAVE_RAW_DECL_FCNTL -_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " - "use gnulib module fcntl for portability"); -# endif -#endif - -#if @GNULIB_OPEN@ -# if @REPLACE_OPEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef open -# define open rpl_open -# endif -_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); -# else -_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); -# endif -/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a - default argument. _GL_CXXALIASWARN does not work in this case. */ -# if !defined __hpux -_GL_CXXALIASWARN (open); -# endif -#elif defined GNULIB_POSIXCHECK -# undef open -/* Assume open is always declared. */ -_GL_WARN_ON_USE (open, "open is not always POSIX compliant - " - "use gnulib module open for portability"); -#endif - -#if @GNULIB_OPENAT@ -# if @REPLACE_OPENAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef openat -# define openat rpl_openat -# endif -_GL_FUNCDECL_RPL (openat, int, - (int fd, char const *file, int flags, /* mode_t mode */ ...) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (openat, int, - (int fd, char const *file, int flags, /* mode_t mode */ ...)); -# else -# if !@HAVE_OPENAT@ -_GL_FUNCDECL_SYS (openat, int, - (int fd, char const *file, int flags, /* mode_t mode */ ...) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (openat, int, - (int fd, char const *file, int flags, /* mode_t mode */ ...)); -# endif -_GL_CXXALIASWARN (openat); -#elif defined GNULIB_POSIXCHECK -# undef openat -# if HAVE_RAW_DECL_OPENAT -_GL_WARN_ON_USE (openat, "openat is not portable - " - "use gnulib module openat for portability"); -# endif -#endif - - -/* Fix up the FD_* macros, only known to be missing on mingw. */ - -#ifndef FD_CLOEXEC -# define FD_CLOEXEC 1 -#endif - -/* Fix up the supported F_* macros. Intentionally leave other F_* - macros undefined. Only known to be missing on mingw. */ - -#ifndef F_DUPFD_CLOEXEC -# define F_DUPFD_CLOEXEC 0x40000000 -/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ -# define GNULIB_defined_F_DUPFD_CLOEXEC 1 -#else -# define GNULIB_defined_F_DUPFD_CLOEXEC 0 -#endif - -#ifndef F_DUPFD -# define F_DUPFD 1 -#endif - -#ifndef F_GETFD -# define F_GETFD 2 -#endif - -/* Fix up the O_* macros. */ - -/* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT - to values outside 'int' range, so omit these misdefinitions. - But avoid namespace pollution on non-AIX systems. */ -#ifdef _AIX -# include -# if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) -# undef O_CLOEXEC -# endif -# if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) -# undef O_NOFOLLOW -# endif -# if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) -# undef O_TTY_INIT -# endif -#endif - -#if !defined O_DIRECT && defined O_DIRECTIO -/* Tru64 spells it 'O_DIRECTIO'. */ -# define O_DIRECT O_DIRECTIO -#endif - -#if !defined O_CLOEXEC && defined O_NOINHERIT -/* Mingw spells it 'O_NOINHERIT'. */ -# define O_CLOEXEC O_NOINHERIT -#endif - -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - -#ifndef O_DIRECT -# define O_DIRECT 0 -#endif - -#ifndef O_DIRECTORY -# define O_DIRECTORY 0 -#endif - -#ifndef O_DSYNC -# define O_DSYNC 0 -#endif - -#ifndef O_EXEC -# define O_EXEC O_RDONLY /* This is often close enough in older systems. */ -#endif - -#ifndef O_IGNORE_CTTY -# define O_IGNORE_CTTY 0 -#endif - -#ifndef O_NDELAY -# define O_NDELAY 0 -#endif - -#ifndef O_NOATIME -# define O_NOATIME 0 -#endif - -#ifndef O_NONBLOCK -# define O_NONBLOCK O_NDELAY -#endif - -/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero - value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY - or to 0 as fallback. */ -#if @GNULIB_NONBLOCKING@ -# if O_NONBLOCK -# define GNULIB_defined_O_NONBLOCK 0 -# else -# define GNULIB_defined_O_NONBLOCK 1 -# undef O_NONBLOCK -# define O_NONBLOCK 0x40000000 -# endif -#endif - -#ifndef O_NOCTTY -# define O_NOCTTY 0 -#endif - -#ifndef O_NOFOLLOW -# define O_NOFOLLOW 0 -#endif - -#ifndef O_NOLINK -# define O_NOLINK 0 -#endif - -#ifndef O_NOLINKS -# define O_NOLINKS 0 -#endif - -#ifndef O_NOTRANS -# define O_NOTRANS 0 -#endif - -#ifndef O_RSYNC -# define O_RSYNC 0 -#endif - -#ifndef O_SEARCH -# define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ -#endif - -#ifndef O_SYNC -# define O_SYNC 0 -#endif - -#ifndef O_TTY_INIT -# define O_TTY_INIT 0 -#endif - -#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) -# undef O_ACCMODE -# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) -#endif - -/* For systems that distinguish between text and binary I/O. - O_BINARY is usually declared in fcntl.h */ -#if !defined O_BINARY && defined _O_BINARY - /* For MSC-compatible compilers. */ -# define O_BINARY _O_BINARY -# define O_TEXT _O_TEXT -#endif - -#if defined __BEOS__ || defined __HAIKU__ - /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ -# undef O_BINARY -# undef O_TEXT -#endif - -#ifndef O_BINARY -# define O_BINARY 0 -# define O_TEXT 0 -#endif - -/* Fix up the AT_* macros. */ - -/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its - value exceeds INT_MAX, so its use as an int doesn't conform to the - C standard, and GCC and Sun C complain in some cases. If the bug - is present, undef AT_FDCWD here, so it can be redefined below. */ -#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 -# undef AT_FDCWD -#endif - -/* Use the same bit pattern as Solaris 9, but with the proper - signedness. The bit pattern is important, in case this actually is - Solaris with the above workaround. */ -#ifndef AT_FDCWD -# define AT_FDCWD (-3041965) -#endif - -/* Use the same values as Solaris 9. This shouldn't matter, but - there's no real reason to differ. */ -#ifndef AT_SYMLINK_NOFOLLOW -# define AT_SYMLINK_NOFOLLOW 4096 -#endif - -#ifndef AT_REMOVEDIR -# define AT_REMOVEDIR 1 -#endif - -/* Solaris 9 lacks these two, so just pick unique values. */ -#ifndef AT_SYMLINK_FOLLOW -# define AT_SYMLINK_FOLLOW 2 -#endif - -#ifndef AT_EACCESS -# define AT_EACCESS 4 -#endif - - -#endif /* _@GUARD_PREFIX@_FCNTL_H */ -#endif /* _@GUARD_PREFIX@_FCNTL_H */ -#endif diff --git a/gl/tests/fdopen.c b/gl/tests/fdopen.c deleted file mode 100644 index 61fbfdfc5a..0000000000 --- a/gl/tests/fdopen.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Open a stream with a given file descriptor. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -#include - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER -# include "msvc-inval.h" -#endif - -#undef fdopen - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER -static FILE * -fdopen_nothrow (int fd, const char *mode) -{ - FILE *result; - - TRY_MSVC_INVAL - { - result = fdopen (fd, mode); - } - CATCH_MSVC_INVAL - { - result = NULL; - } - DONE_MSVC_INVAL; - - return result; -} -#else -# define fdopen_nothrow fdopen -#endif - -FILE * -rpl_fdopen (int fd, const char *mode) -{ - int saved_errno = errno; - FILE *fp; - - errno = 0; - fp = fdopen_nothrow (fd, mode); - if (fp == NULL) - { - if (errno == 0) - errno = EBADF; - } - else - errno = saved_errno; - - return fp; -} diff --git a/gl/tests/fpucw.h b/gl/tests/fpucw.h deleted file mode 100644 index 05ee0cac94..0000000000 --- a/gl/tests/fpucw.h +++ /dev/null @@ -1,108 +0,0 @@ -/* Manipulating the FPU control word. -*- coding: utf-8 -*- - Copyright (C) 2007-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2007. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef _FPUCW_H -#define _FPUCW_H - -/* The i386 floating point hardware (the 387 compatible FPU, not the modern - SSE/SSE2 hardware) has a controllable rounding precision. It is specified - through the 'PC' bits in the FPU control word ('fctrl' register). (See - the GNU libc i386 header for details.) - - On some platforms, such as Linux or Solaris, the default precision setting - is set to "extended precision". This means that 'long double' instructions - operate correctly, but 'double' computations often produce slightly - different results as on strictly IEEE 754 conforming systems. - - On some platforms, such as NetBSD, the default precision is set to - "double precision". This means that 'long double' instructions will operate - only as 'double', i.e. lead to wrong results. Similarly on FreeBSD 6.4, at - least for the division of 'long double' numbers. - - The FPU control word is under control of the application, i.e. it is - not required to be set either way by the ABI. (In fact, the i386 ABI - http://refspecs.freestandards.org/elf/abi386-4.pdf page 3-12 = page 38 - is not clear about it. But in any case, gcc treats the control word - like a "preserved" register: it emits code that assumes that the control - word is preserved across calls, and it restores the control word at the - end of functions that modify it.) - - See Vincent Lefèvre's page http://www.vinc17.org/research/extended.en.html - for a good explanation. - See http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html for - some argumentation which setting should be the default. */ - -/* This header file provides the following facilities: - fpucw_t integral type holding the value of 'fctrl' - FPU_PC_MASK bit mask denoting the precision control - FPU_PC_DOUBLE precision control for 53 bits mantissa - FPU_PC_EXTENDED precision control for 64 bits mantissa - GET_FPUCW () yields the current FPU control word - SET_FPUCW (word) sets the FPU control word - DECL_LONG_DOUBLE_ROUNDING variable declaration for - BEGIN/END_LONG_DOUBLE_ROUNDING - BEGIN_LONG_DOUBLE_ROUNDING () starts a sequence of instructions with - 'long double' safe operation precision - END_LONG_DOUBLE_ROUNDING () ends a sequence of instructions with - 'long double' safe operation precision - */ - -/* Inline assembler like this works only with GNU C. */ -#if (defined __i386__ || defined __x86_64__) && defined __GNUC__ - -typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */ - -# define FPU_PC_MASK 0x0300 -# define FPU_PC_DOUBLE 0x200 /* glibc calls this _FPU_DOUBLE */ -# define FPU_PC_EXTENDED 0x300 /* glibc calls this _FPU_EXTENDED */ - -# define GET_FPUCW() \ - ({ fpucw_t _cw; \ - __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ - _cw; \ - }) -# define SET_FPUCW(word) \ - (void)({ fpucw_t _ncw = (word); \ - __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw)); \ - }) - -# define DECL_LONG_DOUBLE_ROUNDING \ - fpucw_t oldcw; -# define BEGIN_LONG_DOUBLE_ROUNDING() \ - (void)(oldcw = GET_FPUCW (), \ - SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED)) -# define END_LONG_DOUBLE_ROUNDING() \ - SET_FPUCW (oldcw) - -#else - -typedef unsigned int fpucw_t; - -# define FPU_PC_MASK 0 -# define FPU_PC_DOUBLE 0 -# define FPU_PC_EXTENDED 0 - -# define GET_FPUCW() 0 -# define SET_FPUCW(word) (void)(word) - -# define DECL_LONG_DOUBLE_ROUNDING -# define BEGIN_LONG_DOUBLE_ROUNDING() -# define END_LONG_DOUBLE_ROUNDING() - -#endif - -#endif /* _FPUCW_H */ diff --git a/gl/tests/getpagesize.c b/gl/tests/getpagesize.c deleted file mode 100644 index dc4a200b21..0000000000 --- a/gl/tests/getpagesize.c +++ /dev/null @@ -1,39 +0,0 @@ -/* getpagesize emulation for systems where it cannot be done in a C macro. - - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible and Martin Lambers. */ - -#include - -/* Specification. */ -#include - -/* This implementation is only for native Windows systems. */ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - -# define WIN32_LEAN_AND_MEAN -# include - -int -getpagesize (void) -{ - SYSTEM_INFO system_info; - GetSystemInfo (&system_info); - return system_info.dwPageSize; -} - -#endif diff --git a/gl/tests/gnulib.mk b/gl/tests/gnulib.mk deleted file mode 100644 index c5836c7dc8..0000000000 --- a/gl/tests/gnulib.mk +++ /dev/null @@ -1,121 +0,0 @@ -## DO NOT EDIT! GENERATED AUTOMATICALLY! -## Process this file with automake to produce Makefile.in. -# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 Free -# Software Foundation, Inc. -# -# This file is free software, distributed under the terms of the GNU -# General Public License. As a special exception to the GNU General -# Public License, this file may be distributed as part of a program -# that contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. - -AUTOMAKE_OPTIONS = 1.5 foreign - -SUBDIRS = -TESTS = -TESTS_ENVIRONMENT = -noinst_PROGRAMS = -check_PROGRAMS = -noinst_HEADERS = -noinst_LIBRARIES = -EXTRA_DIST = -BUILT_SOURCES = -SUFFIXES = -MOSTLYCLEANFILES = core *.stackdump -MOSTLYCLEANDIRS = -CLEANFILES = -DISTCLEANFILES = -MAINTAINERCLEANFILES = - -AM_CPPFLAGS = \ - -I. -I$(srcdir) \ - -I../.. -I$(srcdir)/../.. \ - -I../../gl -I$(srcdir)/../../gl - -LDADD = ../../gl/libgnu.la - -## begin gnulib module arpa_inet-tests - -TESTS += test-arpa_inet -check_PROGRAMS += test-arpa_inet - -EXTRA_DIST += test-arpa_inet.c - -## end gnulib module arpa_inet-tests - -## begin gnulib module c-ctype-tests - -TESTS += test-c-ctype -check_PROGRAMS += test-c-ctype - -EXTRA_DIST += test-c-ctype.c - -## end gnulib module c-ctype-tests - -## begin gnulib module getaddrinfo-tests - -TESTS += test-getaddrinfo -check_PROGRAMS += test-getaddrinfo -test_getaddrinfo_LDADD = $(LDADD) @LIBINTL@ - -EXTRA_DIST += test-getaddrinfo.c - -## end gnulib module getaddrinfo-tests - -## begin gnulib module getdelim-tests - -TESTS += test-getdelim -check_PROGRAMS += test-getdelim -MOSTLYCLEANFILES += test-getdelim.txt -EXTRA_DIST += test-getdelim.c - -## end gnulib module getdelim-tests - -## begin gnulib module getline-tests - -TESTS += test-getline -check_PROGRAMS += test-getline -MOSTLYCLEANFILES += test-getline.txt -EXTRA_DIST += test-getline.c - -## end gnulib module getline-tests - -## begin gnulib module netdb-tests - -TESTS += test-netdb -check_PROGRAMS += test-netdb - -EXTRA_DIST += test-netdb.c - -## end gnulib module netdb-tests - -## begin gnulib module netinet_in-tests - -TESTS += test-netinet_in -check_PROGRAMS += test-netinet_in - -EXTRA_DIST += test-netinet_in.c - -## end gnulib module netinet_in-tests - -## begin gnulib module strerror-tests - -TESTS += test-strerror -check_PROGRAMS += test-strerror -EXTRA_DIST += test-strerror.c - -## end gnulib module strerror-tests - -# Clean up after Solaris cc. -clean-local: - rm -rf SunWS_cache - -mostlyclean-local: mostlyclean-generic - @for dir in '' $(MOSTLYCLEANDIRS); do \ - if test -n "$$dir" && test -d $$dir; then \ - echo "rmdir $$dir"; rmdir $$dir; \ - fi; \ - done; \ - : diff --git a/gl/tests/init.sh b/gl/tests/init.sh deleted file mode 100644 index da743c2ab0..0000000000 --- a/gl/tests/init.sh +++ /dev/null @@ -1,598 +0,0 @@ -# source this file; set up for tests - -# Copyright (C) 2009-2016 Free Software Foundation, Inc. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Using this file in a test -# ========================= -# -# The typical skeleton of a test looks like this: -# -# #!/bin/sh -# . "${srcdir=.}/init.sh"; path_prepend_ . -# Execute some commands. -# Note that these commands are executed in a subdirectory, therefore you -# need to prepend "../" to relative filenames in the build directory. -# Note that the "path_prepend_ ." is useful only if the body of your -# test invokes programs residing in the initial directory. -# For example, if the programs you want to test are in src/, and this test -# script is named tests/test-1, then you would use "path_prepend_ ../src", -# or perhaps export PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH" -# to all tests via automake's TESTS_ENVIRONMENT. -# Set the exit code 0 for success, 77 for skipped, or 1 or other for failure. -# Use the skip_ and fail_ functions to print a diagnostic and then exit -# with the corresponding exit code. -# Exit $? - -# Executing a test that uses this file -# ==================================== -# -# Running a single test: -# $ make check TESTS=test-foo.sh -# -# Running a single test, with verbose output: -# $ make check TESTS=test-foo.sh VERBOSE=yes -# -# Running a single test, with single-stepping: -# 1. Go into a sub-shell: -# $ bash -# 2. Set relevant environment variables from TESTS_ENVIRONMENT in the -# Makefile: -# $ export srcdir=../../tests # this is an example -# 3. Execute the commands from the test, copy&pasting them one by one: -# $ . "$srcdir/init.sh"; path_prepend_ . -# ... -# 4. Finally -# $ exit - -ME_=`expr "./$0" : '.*/\(.*\)$'` - -# We use a trap below for cleanup. This requires us to go through -# hoops to get the right exit status transported through the handler. -# So use 'Exit STATUS' instead of 'exit STATUS' inside of the tests. -# Turn off errexit here so that we don't trip the bug with OSF1/Tru64 -# sh inside this function. -Exit () { set +e; (exit $1); exit $1; } - -# Print warnings (e.g., about skipped and failed tests) to this file number. -# Override by defining to say, 9, in init.cfg, and putting say, -# export ...ENVVAR_SETTINGS...; $(SHELL) 9>&2 -# in the definition of TESTS_ENVIRONMENT in your tests/Makefile.am file. -# This is useful when using automake's parallel tests mode, to print -# the reason for skip/failure to console, rather than to the .log files. -: ${stderr_fileno_=2} - -# Note that correct expansion of "$*" depends on IFS starting with ' '. -# Always write the full diagnostic to stderr. -# When stderr_fileno_ is not 2, also emit the first line of the -# diagnostic to that file descriptor. -warn_ () -{ - # If IFS does not start with ' ', set it and emit the warning in a subshell. - case $IFS in - ' '*) printf '%s\n' "$*" >&2 - test $stderr_fileno_ = 2 \ - || { printf '%s\n' "$*" | sed 1q >&$stderr_fileno_ ; } ;; - *) (IFS=' '; warn_ "$@");; - esac -} -fail_ () { warn_ "$ME_: failed test: $@"; Exit 1; } -skip_ () { warn_ "$ME_: skipped test: $@"; Exit 77; } -fatal_ () { warn_ "$ME_: hard error: $@"; Exit 99; } -framework_failure_ () { warn_ "$ME_: set-up failure: $@"; Exit 99; } - -# This is used to simplify checking of the return value -# which is useful when ensuring a command fails as desired. -# I.e., just doing `command ... &&fail=1` will not catch -# a segfault in command for example. With this helper you -# instead check an explicit exit code like -# returns_ 1 command ... || fail -returns_ () { - # Disable tracing so it doesn't interfere with stderr of the wrapped command - { set +x; } 2>/dev/null - - local exp_exit="$1" - shift - "$@" - test $? -eq $exp_exit && ret_=0 || ret_=1 - - if test "$VERBOSE" = yes && test "$gl_set_x_corrupts_stderr_" = false; then - set -x - fi - { return $ret_; } 2>/dev/null -} - -# Sanitize this shell to POSIX mode, if possible. -DUALCASE=1; export DUALCASE -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; - esac -fi - -# We require $(...) support unconditionally. -# We require non-surprising "local" semantics (this eliminates dash). -# This takes the admittedly draconian step of eliminating dash, because the -# assignment tab=$(printf '\t') works fine, yet preceding it with "local " -# transforms it into an assignment that sets the variable to the empty string. -# That is too counter-intuitive, and can lead to subtle run-time malfunction. -# The example below is less subtle in that with dash, it evokes the run-time -# exception "dash: 1: local: 1: bad variable name". -# We require a few additional shell features only when $EXEEXT is nonempty, -# in order to support automatic $EXEEXT emulation: -# - hyphen-containing alias names -# - we prefer to use ${var#...} substitution, rather than having -# to work around lack of support for that feature. -# The following code attempts to find a shell with support for these features. -# If the current shell passes the test, we're done. Otherwise, test other -# shells until we find one that passes. If one is found, re-exec it. -# If no acceptable shell is found, skip the current test. -# -# The "...set -x; P=1 true 2>err..." test is to disqualify any shell that -# emits "P=1" into err, as /bin/sh from SunOS 5.11 and OpenBSD 4.7 do. -# -# Use "9" to indicate success (rather than 0), in case some shell acts -# like Solaris 10's /bin/sh but exits successfully instead of with status 2. - -# Eval this code in a subshell to determine a shell's suitability. -# 10 - passes all tests; ok to use -# 9 - ok, but enabling "set -x" corrupts app stderr; prefer higher score -# ? - not ok -gl_shell_test_script_=' -test $(echo y) = y || exit 1 -f_local_() { local v=1; }; f_local_ || exit 1 -f_dash_local_fail_() { local t=$(printf " 1"); }; f_dash_local_fail_ -score_=10 -if test "$VERBOSE" = yes; then - test -n "$( (exec 3>&1; set -x; P=1 true 2>&3) 2> /dev/null)" && score_=9 -fi -test -z "$EXEEXT" && exit $score_ -shopt -s expand_aliases -alias a-b="echo zoo" -v=abx - test ${v%x} = ab \ - && test ${v#a} = bx \ - && test $(a-b) = zoo \ - && exit $score_ -' - -if test "x$1" = "x--no-reexec"; then - shift -else - # Assume a working shell. Export to subshells (setup_ needs this). - gl_set_x_corrupts_stderr_=false - export gl_set_x_corrupts_stderr_ - - # Record the first marginally acceptable shell. - marginal_= - - # Search for a shell that meets our requirements. - for re_shell_ in __current__ "${CONFIG_SHELL:-no_shell}" \ - /bin/sh bash dash zsh pdksh fail - do - test "$re_shell_" = no_shell && continue - - # If we've made it all the way to the sentinel, "fail" without - # finding even a marginal shell, skip this test. - if test "$re_shell_" = fail; then - test -z "$marginal_" && skip_ failed to find an adequate shell - re_shell_=$marginal_ - break - fi - - # When testing the current shell, simply "eval" the test code. - # Otherwise, run it via $re_shell_ -c ... - if test "$re_shell_" = __current__; then - # 'eval'ing this code makes Solaris 10's /bin/sh exit with - # $? set to 2. It does not evaluate any of the code after the - # "unexpected" first '('. Thus, we must run it in a subshell. - ( eval "$gl_shell_test_script_" ) > /dev/null 2>&1 - else - "$re_shell_" -c "$gl_shell_test_script_" 2>/dev/null - fi - - st_=$? - - # $re_shell_ works just fine. Use it. - if test $st_ = 10; then - gl_set_x_corrupts_stderr_=false - break - fi - - # If this is our first marginally acceptable shell, remember it. - if test "$st_:$marginal_" = 9: ; then - marginal_="$re_shell_" - gl_set_x_corrupts_stderr_=true - fi - done - - if test "$re_shell_" != __current__; then - # Found a usable shell. Preserve -v and -x. - case $- in - *v*x* | *x*v*) opts_=-vx ;; - *v*) opts_=-v ;; - *x*) opts_=-x ;; - *) opts_= ;; - esac - re_shell=$re_shell_ - export re_shell - exec "$re_shell_" $opts_ "$0" --no-reexec "$@" - echo "$ME_: exec failed" 1>&2 - exit 127 - fi -fi - -# If this is bash, turn off all aliases. -test -n "$BASH_VERSION" && unalias -a - -# Note that when supporting $EXEEXT (transparently mapping from PROG_NAME to -# PROG_NAME.exe), we want to support hyphen-containing names like test-acos. -# That is part of the shell-selection test above. Why use aliases rather -# than functions? Because support for hyphen-containing aliases is more -# widespread than that for hyphen-containing function names. -test -n "$EXEEXT" && shopt -s expand_aliases - -# Enable glibc's malloc-perturbing option. -# This is useful for exposing code that depends on the fact that -# malloc-related functions often return memory that is mostly zeroed. -# If you have the time and cycles, use valgrind to do an even better job. -: ${MALLOC_PERTURB_=87} -export MALLOC_PERTURB_ - -# This is a stub function that is run upon trap (upon regular exit and -# interrupt). Override it with a per-test function, e.g., to unmount -# a partition, or to undo any other global state changes. -cleanup_ () { :; } - -# Emit a header similar to that from diff -u; Print the simulated "diff" -# command so that the order of arguments is clear. Don't bother with @@ lines. -emit_diff_u_header_ () -{ - printf '%s\n' "diff -u $*" \ - "--- $1 1970-01-01" \ - "+++ $2 1970-01-01" -} - -# Arrange not to let diff or cmp operate on /dev/null, -# since on some systems (at least OSF/1 5.1), that doesn't work. -# When there are not two arguments, or no argument is /dev/null, return 2. -# When one argument is /dev/null and the other is not empty, -# cat the nonempty file to stderr and return 1. -# Otherwise, return 0. -compare_dev_null_ () -{ - test $# = 2 || return 2 - - if test "x$1" = x/dev/null; then - test -s "$2" || return 0 - emit_diff_u_header_ "$@"; sed 's/^/+/' "$2" - return 1 - fi - - if test "x$2" = x/dev/null; then - test -s "$1" || return 0 - emit_diff_u_header_ "$@"; sed 's/^/-/' "$1" - return 1 - fi - - return 2 -} - -for diff_opt_ in -u -U3 -c '' no; do - test "$diff_opt_" != no && - diff_out_=`exec 2>/dev/null; diff $diff_opt_ "$0" "$0" < /dev/null` && - break -done -if test "$diff_opt_" != no; then - if test -z "$diff_out_"; then - compare_ () { diff $diff_opt_ "$@"; } - else - compare_ () - { - # If no differences were found, AIX and HP-UX 'diff' produce output - # like "No differences encountered". Hide this output. - diff $diff_opt_ "$@" > diff.out - diff_status_=$? - test $diff_status_ -eq 0 || cat diff.out || diff_status_=2 - rm -f diff.out || diff_status_=2 - return $diff_status_ - } - fi -elif cmp -s /dev/null /dev/null 2>/dev/null; then - compare_ () { cmp -s "$@"; } -else - compare_ () { cmp "$@"; } -fi - -# Usage: compare EXPECTED ACTUAL -# -# Given compare_dev_null_'s preprocessing, defer to compare_ if 2 or more. -# Otherwise, propagate $? to caller: any diffs have already been printed. -compare () -{ - # This looks like it can be factored to use a simple "case $?" - # after unchecked compare_dev_null_ invocation, but that would - # fail in a "set -e" environment. - if compare_dev_null_ "$@"; then - return 0 - else - case $? in - 1) return 1;; - *) compare_ "$@";; - esac - fi -} - -# An arbitrary prefix to help distinguish test directories. -testdir_prefix_ () { printf gt; } - -# Run the user-overridable cleanup_ function, remove the temporary -# directory and exit with the incoming value of $?. -remove_tmp_ () -{ - __st=$? - cleanup_ - # cd out of the directory we're about to remove - cd "$initial_cwd_" || cd / || cd /tmp - chmod -R u+rwx "$test_dir_" - # If removal fails and exit status was to be 0, then change it to 1. - rm -rf "$test_dir_" || { test $__st = 0 && __st=1; } - exit $__st -} - -# Given a directory name, DIR, if every entry in it that matches *.exe -# contains only the specified bytes (see the case stmt below), then print -# a space-separated list of those names and return 0. Otherwise, don't -# print anything and return 1. Naming constraints apply also to DIR. -find_exe_basenames_ () -{ - feb_dir_=$1 - feb_fail_=0 - feb_result_= - feb_sp_= - for feb_file_ in $feb_dir_/*.exe; do - # If there was no *.exe file, or there existed a file named "*.exe" that - # was deleted between the above glob expansion and the existence test - # below, just skip it. - test "x$feb_file_" = "x$feb_dir_/*.exe" && test ! -f "$feb_file_" \ - && continue - # Exempt [.exe, since we can't create a function by that name, yet - # we can't invoke [ by PATH search anyways due to shell builtins. - test "x$feb_file_" = "x$feb_dir_/[.exe" && continue - case $feb_file_ in - *[!-a-zA-Z/0-9_.+]*) feb_fail_=1; break;; - *) # Remove leading file name components as well as the .exe suffix. - feb_file_=${feb_file_##*/} - feb_file_=${feb_file_%.exe} - feb_result_="$feb_result_$feb_sp_$feb_file_";; - esac - feb_sp_=' ' - done - test $feb_fail_ = 0 && printf %s "$feb_result_" - return $feb_fail_ -} - -# Consider the files in directory, $1. -# For each file name of the form PROG.exe, create an alias named -# PROG that simply invokes PROG.exe, then return 0. If any selected -# file name or the directory name, $1, contains an unexpected character, -# define no alias and return 1. -create_exe_shims_ () -{ - case $EXEEXT in - '') return 0 ;; - .exe) ;; - *) echo "$0: unexpected \$EXEEXT value: $EXEEXT" 1>&2; return 1 ;; - esac - - base_names_=`find_exe_basenames_ $1` \ - || { echo "$0 (exe_shim): skipping directory: $1" 1>&2; return 0; } - - if test -n "$base_names_"; then - for base_ in $base_names_; do - alias "$base_"="$base_$EXEEXT" - done - fi - - return 0 -} - -# Use this function to prepend to PATH an absolute name for each -# specified, possibly-$initial_cwd_-relative, directory. -path_prepend_ () -{ - while test $# != 0; do - path_dir_=$1 - case $path_dir_ in - '') fail_ "invalid path dir: '$1'";; - /*) abs_path_dir_=$path_dir_;; - *) abs_path_dir_=$initial_cwd_/$path_dir_;; - esac - case $abs_path_dir_ in - *:*) fail_ "invalid path dir: '$abs_path_dir_'";; - esac - PATH="$abs_path_dir_:$PATH" - - # Create an alias, FOO, for each FOO.exe in this directory. - create_exe_shims_ "$abs_path_dir_" \ - || fail_ "something failed (above): $abs_path_dir_" - shift - done - export PATH -} - -setup_ () -{ - if test "$VERBOSE" = yes; then - # Test whether set -x may cause the selected shell to corrupt an - # application's stderr. Many do, including zsh-4.3.10 and the /bin/sh - # from SunOS 5.11, OpenBSD 4.7 and Irix 5.x and 6.5. - # If enabling verbose output this way would cause trouble, simply - # issue a warning and refrain. - if $gl_set_x_corrupts_stderr_; then - warn_ "using SHELL=$SHELL with 'set -x' corrupts stderr" - else - set -x - fi - fi - - initial_cwd_=$PWD - - pfx_=`testdir_prefix_` - test_dir_=`mktempd_ "$initial_cwd_" "$pfx_-$ME_.XXXX"` \ - || fail_ "failed to create temporary directory in $initial_cwd_" - cd "$test_dir_" || fail_ "failed to cd to temporary directory" - - # As autoconf-generated configure scripts do, ensure that IFS - # is defined initially, so that saving and restoring $IFS works. - gl_init_sh_nl_=' -' - IFS=" "" $gl_init_sh_nl_" - - # This trap statement, along with a trap on 0 below, ensure that the - # temporary directory, $test_dir_, is removed upon exit as well as - # upon receipt of any of the listed signals. - for sig_ in 1 2 3 13 15; do - eval "trap 'Exit $(expr $sig_ + 128)' $sig_" - done -} - -# Create a temporary directory, much like mktemp -d does. -# Written by Jim Meyering. -# -# Usage: mktempd_ /tmp phoey.XXXXXXXXXX -# -# First, try to use the mktemp program. -# Failing that, we'll roll our own mktemp-like function: -# - try to get random bytes from /dev/urandom -# - failing that, generate output from a combination of quickly-varying -# sources and gzip. Ignore non-varying gzip header, and extract -# "random" bits from there. -# - given those bits, map to file-name bytes using tr, and try to create -# the desired directory. -# - make only $MAX_TRIES_ attempts - -# Helper function. Print $N pseudo-random bytes from a-zA-Z0-9. -rand_bytes_ () -{ - n_=$1 - - # Maybe try openssl rand -base64 $n_prime_|tr '+/=\012' abcd first? - # But if they have openssl, they probably have mktemp, too. - - chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 - dev_rand_=/dev/urandom - if test -r "$dev_rand_"; then - # Note: 256-length($chars_) == 194; 3 copies of $chars_ is 186 + 8 = 194. - dd ibs=$n_ count=1 if=$dev_rand_ 2>/dev/null \ - | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_ - return - fi - - n_plus_50_=`expr $n_ + 50` - cmds_='date; date +%N; free; who -a; w; ps auxww; ps ef; netstat -n' - data_=` (eval "$cmds_") 2>&1 | gzip ` - - # Ensure that $data_ has length at least 50+$n_ - while :; do - len_=`echo "$data_"|wc -c` - test $n_plus_50_ -le $len_ && break; - data_=` (echo "$data_"; eval "$cmds_") 2>&1 | gzip ` - done - - echo "$data_" \ - | dd bs=1 skip=50 count=$n_ 2>/dev/null \ - | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_ -} - -mktempd_ () -{ - case $# in - 2);; - *) fail_ "Usage: mktempd_ DIR TEMPLATE";; - esac - - destdir_=$1 - template_=$2 - - MAX_TRIES_=4 - - # Disallow any trailing slash on specified destdir: - # it would subvert the post-mktemp "case"-based destdir test. - case $destdir_ in - / | //) destdir_slash_=$destdir;; - */) fail_ "invalid destination dir: remove trailing slash(es)";; - *) destdir_slash_=$destdir_/;; - esac - - case $template_ in - *XXXX) ;; - *) fail_ \ - "invalid template: $template_ (must have a suffix of at least 4 X's)";; - esac - - # First, try to use mktemp. - d=`unset TMPDIR; { mktemp -d -t -p "$destdir_" "$template_"; } 2>/dev/null` && - - # The resulting name must be in the specified directory. - case $d in "$destdir_slash_"*) :;; *) false;; esac && - - # It must have created the directory. - test -d "$d" && - - # It must have 0700 permissions. Handle sticky "S" bits. - perms=`ls -dgo "$d" 2>/dev/null` && - case $perms in drwx--[-S]---*) :;; *) false;; esac && { - echo "$d" - return - } - - # If we reach this point, we'll have to create a directory manually. - - # Get a copy of the template without its suffix of X's. - base_template_=`echo "$template_"|sed 's/XX*$//'` - - # Calculate how many X's we've just removed. - template_length_=`echo "$template_" | wc -c` - nx_=`echo "$base_template_" | wc -c` - nx_=`expr $template_length_ - $nx_` - - err_= - i_=1 - while :; do - X_=`rand_bytes_ $nx_` - candidate_dir_="$destdir_slash_$base_template_$X_" - err_=`mkdir -m 0700 "$candidate_dir_" 2>&1` \ - && { echo "$candidate_dir_"; return; } - test $MAX_TRIES_ -le $i_ && break; - i_=`expr $i_ + 1` - done - fail_ "$err_" -} - -# If you want to override the testdir_prefix_ function, -# or to add more utility functions, use this file. -test -f "$srcdir/init.cfg" \ - && . "$srcdir/init.cfg" - -setup_ "$@" -# This trap is here, rather than in the setup_ function, because some -# shells run the exit trap at shell function exit, rather than script exit. -trap remove_tmp_ 0 diff --git a/gl/tests/inttypes.in.h b/gl/tests/inttypes.in.h deleted file mode 100644 index ed09db6e86..0000000000 --- a/gl/tests/inttypes.in.h +++ /dev/null @@ -1,1144 +0,0 @@ -/* Copyright (C) 2006-2016 Free Software Foundation, Inc. - Written by Paul Eggert, Bruno Haible, Derek Price. - This file is part of gnulib. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* - * ISO C 99 for platforms that lack it. - * - */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* Include the original if it exists, and if this file - has not been included yet or if this file includes gnulib stdint.h - which in turn includes this file. - The include_next requires a split double-inclusion guard. */ -#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H -# if @HAVE_INTTYPES_H@ - - /* Some pre-C++11 implementations need this. */ -# if defined __cplusplus && ! defined __STDC_FORMAT_MACROS -# define __STDC_FORMAT_MACROS 1 -# endif - -# @INCLUDE_NEXT@ @NEXT_INTTYPES_H@ -# endif -#endif - -#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H -#define INTTYPES_H - -/* Include or the gnulib replacement. - But avoid namespace pollution on glibc systems. */ -#ifndef __GLIBC__ -# include -#endif -/* Get CHAR_BIT. */ -#include -/* On mingw, __USE_MINGW_ANSI_STDIO only works if is also included */ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -# include -#endif - -#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX) -# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to ." -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -/* 7.8.1 Macros for format specifiers */ - -#if defined _TNS_R_TARGET - /* Tandem NonStop R series and compatible platforms released before - July 2005 support %Ld but not %lld. */ -# define _LONG_LONG_FORMAT_PREFIX "L" -#else -# define _LONG_LONG_FORMAT_PREFIX "ll" -#endif - -#if !defined PRId8 || @PRI_MACROS_BROKEN@ -# undef PRId8 -# ifdef INT8_MAX -# define PRId8 "d" -# endif -#endif -#if !defined PRIi8 || @PRI_MACROS_BROKEN@ -# undef PRIi8 -# ifdef INT8_MAX -# define PRIi8 "i" -# endif -#endif -#if !defined PRIo8 || @PRI_MACROS_BROKEN@ -# undef PRIo8 -# ifdef UINT8_MAX -# define PRIo8 "o" -# endif -#endif -#if !defined PRIu8 || @PRI_MACROS_BROKEN@ -# undef PRIu8 -# ifdef UINT8_MAX -# define PRIu8 "u" -# endif -#endif -#if !defined PRIx8 || @PRI_MACROS_BROKEN@ -# undef PRIx8 -# ifdef UINT8_MAX -# define PRIx8 "x" -# endif -#endif -#if !defined PRIX8 || @PRI_MACROS_BROKEN@ -# undef PRIX8 -# ifdef UINT8_MAX -# define PRIX8 "X" -# endif -#endif -#if !defined PRId16 || @PRI_MACROS_BROKEN@ -# undef PRId16 -# ifdef INT16_MAX -# define PRId16 "d" -# endif -#endif -#if !defined PRIi16 || @PRI_MACROS_BROKEN@ -# undef PRIi16 -# ifdef INT16_MAX -# define PRIi16 "i" -# endif -#endif -#if !defined PRIo16 || @PRI_MACROS_BROKEN@ -# undef PRIo16 -# ifdef UINT16_MAX -# define PRIo16 "o" -# endif -#endif -#if !defined PRIu16 || @PRI_MACROS_BROKEN@ -# undef PRIu16 -# ifdef UINT16_MAX -# define PRIu16 "u" -# endif -#endif -#if !defined PRIx16 || @PRI_MACROS_BROKEN@ -# undef PRIx16 -# ifdef UINT16_MAX -# define PRIx16 "x" -# endif -#endif -#if !defined PRIX16 || @PRI_MACROS_BROKEN@ -# undef PRIX16 -# ifdef UINT16_MAX -# define PRIX16 "X" -# endif -#endif -#if !defined PRId32 || @PRI_MACROS_BROKEN@ -# undef PRId32 -# ifdef INT32_MAX -# define PRId32 "d" -# endif -#endif -#if !defined PRIi32 || @PRI_MACROS_BROKEN@ -# undef PRIi32 -# ifdef INT32_MAX -# define PRIi32 "i" -# endif -#endif -#if !defined PRIo32 || @PRI_MACROS_BROKEN@ -# undef PRIo32 -# ifdef UINT32_MAX -# define PRIo32 "o" -# endif -#endif -#if !defined PRIu32 || @PRI_MACROS_BROKEN@ -# undef PRIu32 -# ifdef UINT32_MAX -# define PRIu32 "u" -# endif -#endif -#if !defined PRIx32 || @PRI_MACROS_BROKEN@ -# undef PRIx32 -# ifdef UINT32_MAX -# define PRIx32 "x" -# endif -#endif -#if !defined PRIX32 || @PRI_MACROS_BROKEN@ -# undef PRIX32 -# ifdef UINT32_MAX -# define PRIX32 "X" -# endif -#endif -#ifdef INT64_MAX -# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) -# define _PRI64_PREFIX "l" -# elif defined _MSC_VER || defined __MINGW32__ -# define _PRI64_PREFIX "I64" -# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 -# define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX -# endif -# if !defined PRId64 || @PRI_MACROS_BROKEN@ -# undef PRId64 -# define PRId64 _PRI64_PREFIX "d" -# endif -# if !defined PRIi64 || @PRI_MACROS_BROKEN@ -# undef PRIi64 -# define PRIi64 _PRI64_PREFIX "i" -# endif -#endif -#ifdef UINT64_MAX -# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) -# define _PRIu64_PREFIX "l" -# elif defined _MSC_VER || defined __MINGW32__ -# define _PRIu64_PREFIX "I64" -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 -# define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX -# endif -# if !defined PRIo64 || @PRI_MACROS_BROKEN@ -# undef PRIo64 -# define PRIo64 _PRIu64_PREFIX "o" -# endif -# if !defined PRIu64 || @PRI_MACROS_BROKEN@ -# undef PRIu64 -# define PRIu64 _PRIu64_PREFIX "u" -# endif -# if !defined PRIx64 || @PRI_MACROS_BROKEN@ -# undef PRIx64 -# define PRIx64 _PRIu64_PREFIX "x" -# endif -# if !defined PRIX64 || @PRI_MACROS_BROKEN@ -# undef PRIX64 -# define PRIX64 _PRIu64_PREFIX "X" -# endif -#endif - -#if !defined PRIdLEAST8 || @PRI_MACROS_BROKEN@ -# undef PRIdLEAST8 -# define PRIdLEAST8 "d" -#endif -#if !defined PRIiLEAST8 || @PRI_MACROS_BROKEN@ -# undef PRIiLEAST8 -# define PRIiLEAST8 "i" -#endif -#if !defined PRIoLEAST8 || @PRI_MACROS_BROKEN@ -# undef PRIoLEAST8 -# define PRIoLEAST8 "o" -#endif -#if !defined PRIuLEAST8 || @PRI_MACROS_BROKEN@ -# undef PRIuLEAST8 -# define PRIuLEAST8 "u" -#endif -#if !defined PRIxLEAST8 || @PRI_MACROS_BROKEN@ -# undef PRIxLEAST8 -# define PRIxLEAST8 "x" -#endif -#if !defined PRIXLEAST8 || @PRI_MACROS_BROKEN@ -# undef PRIXLEAST8 -# define PRIXLEAST8 "X" -#endif -#if !defined PRIdLEAST16 || @PRI_MACROS_BROKEN@ -# undef PRIdLEAST16 -# define PRIdLEAST16 "d" -#endif -#if !defined PRIiLEAST16 || @PRI_MACROS_BROKEN@ -# undef PRIiLEAST16 -# define PRIiLEAST16 "i" -#endif -#if !defined PRIoLEAST16 || @PRI_MACROS_BROKEN@ -# undef PRIoLEAST16 -# define PRIoLEAST16 "o" -#endif -#if !defined PRIuLEAST16 || @PRI_MACROS_BROKEN@ -# undef PRIuLEAST16 -# define PRIuLEAST16 "u" -#endif -#if !defined PRIxLEAST16 || @PRI_MACROS_BROKEN@ -# undef PRIxLEAST16 -# define PRIxLEAST16 "x" -#endif -#if !defined PRIXLEAST16 || @PRI_MACROS_BROKEN@ -# undef PRIXLEAST16 -# define PRIXLEAST16 "X" -#endif -#if !defined PRIdLEAST32 || @PRI_MACROS_BROKEN@ -# undef PRIdLEAST32 -# define PRIdLEAST32 "d" -#endif -#if !defined PRIiLEAST32 || @PRI_MACROS_BROKEN@ -# undef PRIiLEAST32 -# define PRIiLEAST32 "i" -#endif -#if !defined PRIoLEAST32 || @PRI_MACROS_BROKEN@ -# undef PRIoLEAST32 -# define PRIoLEAST32 "o" -#endif -#if !defined PRIuLEAST32 || @PRI_MACROS_BROKEN@ -# undef PRIuLEAST32 -# define PRIuLEAST32 "u" -#endif -#if !defined PRIxLEAST32 || @PRI_MACROS_BROKEN@ -# undef PRIxLEAST32 -# define PRIxLEAST32 "x" -#endif -#if !defined PRIXLEAST32 || @PRI_MACROS_BROKEN@ -# undef PRIXLEAST32 -# define PRIXLEAST32 "X" -#endif -#ifdef INT64_MAX -# if !defined PRIdLEAST64 || @PRI_MACROS_BROKEN@ -# undef PRIdLEAST64 -# define PRIdLEAST64 PRId64 -# endif -# if !defined PRIiLEAST64 || @PRI_MACROS_BROKEN@ -# undef PRIiLEAST64 -# define PRIiLEAST64 PRIi64 -# endif -#endif -#ifdef UINT64_MAX -# if !defined PRIoLEAST64 || @PRI_MACROS_BROKEN@ -# undef PRIoLEAST64 -# define PRIoLEAST64 PRIo64 -# endif -# if !defined PRIuLEAST64 || @PRI_MACROS_BROKEN@ -# undef PRIuLEAST64 -# define PRIuLEAST64 PRIu64 -# endif -# if !defined PRIxLEAST64 || @PRI_MACROS_BROKEN@ -# undef PRIxLEAST64 -# define PRIxLEAST64 PRIx64 -# endif -# if !defined PRIXLEAST64 || @PRI_MACROS_BROKEN@ -# undef PRIXLEAST64 -# define PRIXLEAST64 PRIX64 -# endif -#endif - -#if !defined PRIdFAST8 || @PRI_MACROS_BROKEN@ -# undef PRIdFAST8 -# if INT_FAST8_MAX > INT32_MAX -# define PRIdFAST8 PRId64 -# else -# define PRIdFAST8 "d" -# endif -#endif -#if !defined PRIiFAST8 || @PRI_MACROS_BROKEN@ -# undef PRIiFAST8 -# if INT_FAST8_MAX > INT32_MAX -# define PRIiFAST8 PRIi64 -# else -# define PRIiFAST8 "i" -# endif -#endif -#if !defined PRIoFAST8 || @PRI_MACROS_BROKEN@ -# undef PRIoFAST8 -# if UINT_FAST8_MAX > UINT32_MAX -# define PRIoFAST8 PRIo64 -# else -# define PRIoFAST8 "o" -# endif -#endif -#if !defined PRIuFAST8 || @PRI_MACROS_BROKEN@ -# undef PRIuFAST8 -# if UINT_FAST8_MAX > UINT32_MAX -# define PRIuFAST8 PRIu64 -# else -# define PRIuFAST8 "u" -# endif -#endif -#if !defined PRIxFAST8 || @PRI_MACROS_BROKEN@ -# undef PRIxFAST8 -# if UINT_FAST8_MAX > UINT32_MAX -# define PRIxFAST8 PRIx64 -# else -# define PRIxFAST8 "x" -# endif -#endif -#if !defined PRIXFAST8 || @PRI_MACROS_BROKEN@ -# undef PRIXFAST8 -# if UINT_FAST8_MAX > UINT32_MAX -# define PRIXFAST8 PRIX64 -# else -# define PRIXFAST8 "X" -# endif -#endif -#if !defined PRIdFAST16 || @PRI_MACROS_BROKEN@ -# undef PRIdFAST16 -# if INT_FAST16_MAX > INT32_MAX -# define PRIdFAST16 PRId64 -# else -# define PRIdFAST16 "d" -# endif -#endif -#if !defined PRIiFAST16 || @PRI_MACROS_BROKEN@ -# undef PRIiFAST16 -# if INT_FAST16_MAX > INT32_MAX -# define PRIiFAST16 PRIi64 -# else -# define PRIiFAST16 "i" -# endif -#endif -#if !defined PRIoFAST16 || @PRI_MACROS_BROKEN@ -# undef PRIoFAST16 -# if UINT_FAST16_MAX > UINT32_MAX -# define PRIoFAST16 PRIo64 -# else -# define PRIoFAST16 "o" -# endif -#endif -#if !defined PRIuFAST16 || @PRI_MACROS_BROKEN@ -# undef PRIuFAST16 -# if UINT_FAST16_MAX > UINT32_MAX -# define PRIuFAST16 PRIu64 -# else -# define PRIuFAST16 "u" -# endif -#endif -#if !defined PRIxFAST16 || @PRI_MACROS_BROKEN@ -# undef PRIxFAST16 -# if UINT_FAST16_MAX > UINT32_MAX -# define PRIxFAST16 PRIx64 -# else -# define PRIxFAST16 "x" -# endif -#endif -#if !defined PRIXFAST16 || @PRI_MACROS_BROKEN@ -# undef PRIXFAST16 -# if UINT_FAST16_MAX > UINT32_MAX -# define PRIXFAST16 PRIX64 -# else -# define PRIXFAST16 "X" -# endif -#endif -#if !defined PRIdFAST32 || @PRI_MACROS_BROKEN@ -# undef PRIdFAST32 -# if INT_FAST32_MAX > INT32_MAX -# define PRIdFAST32 PRId64 -# else -# define PRIdFAST32 "d" -# endif -#endif -#if !defined PRIiFAST32 || @PRI_MACROS_BROKEN@ -# undef PRIiFAST32 -# if INT_FAST32_MAX > INT32_MAX -# define PRIiFAST32 PRIi64 -# else -# define PRIiFAST32 "i" -# endif -#endif -#if !defined PRIoFAST32 || @PRI_MACROS_BROKEN@ -# undef PRIoFAST32 -# if UINT_FAST32_MAX > UINT32_MAX -# define PRIoFAST32 PRIo64 -# else -# define PRIoFAST32 "o" -# endif -#endif -#if !defined PRIuFAST32 || @PRI_MACROS_BROKEN@ -# undef PRIuFAST32 -# if UINT_FAST32_MAX > UINT32_MAX -# define PRIuFAST32 PRIu64 -# else -# define PRIuFAST32 "u" -# endif -#endif -#if !defined PRIxFAST32 || @PRI_MACROS_BROKEN@ -# undef PRIxFAST32 -# if UINT_FAST32_MAX > UINT32_MAX -# define PRIxFAST32 PRIx64 -# else -# define PRIxFAST32 "x" -# endif -#endif -#if !defined PRIXFAST32 || @PRI_MACROS_BROKEN@ -# undef PRIXFAST32 -# if UINT_FAST32_MAX > UINT32_MAX -# define PRIXFAST32 PRIX64 -# else -# define PRIXFAST32 "X" -# endif -#endif -#ifdef INT64_MAX -# if !defined PRIdFAST64 || @PRI_MACROS_BROKEN@ -# undef PRIdFAST64 -# define PRIdFAST64 PRId64 -# endif -# if !defined PRIiFAST64 || @PRI_MACROS_BROKEN@ -# undef PRIiFAST64 -# define PRIiFAST64 PRIi64 -# endif -#endif -#ifdef UINT64_MAX -# if !defined PRIoFAST64 || @PRI_MACROS_BROKEN@ -# undef PRIoFAST64 -# define PRIoFAST64 PRIo64 -# endif -# if !defined PRIuFAST64 || @PRI_MACROS_BROKEN@ -# undef PRIuFAST64 -# define PRIuFAST64 PRIu64 -# endif -# if !defined PRIxFAST64 || @PRI_MACROS_BROKEN@ -# undef PRIxFAST64 -# define PRIxFAST64 PRIx64 -# endif -# if !defined PRIXFAST64 || @PRI_MACROS_BROKEN@ -# undef PRIXFAST64 -# define PRIXFAST64 PRIX64 -# endif -#endif - -#if !defined PRIdMAX || @PRI_MACROS_BROKEN@ -# undef PRIdMAX -# if @INT32_MAX_LT_INTMAX_MAX@ -# define PRIdMAX PRId64 -# else -# define PRIdMAX "ld" -# endif -#endif -#if !defined PRIiMAX || @PRI_MACROS_BROKEN@ -# undef PRIiMAX -# if @INT32_MAX_LT_INTMAX_MAX@ -# define PRIiMAX PRIi64 -# else -# define PRIiMAX "li" -# endif -#endif -#if !defined PRIoMAX || @PRI_MACROS_BROKEN@ -# undef PRIoMAX -# if @UINT32_MAX_LT_UINTMAX_MAX@ -# define PRIoMAX PRIo64 -# else -# define PRIoMAX "lo" -# endif -#endif -#if !defined PRIuMAX || @PRI_MACROS_BROKEN@ -# undef PRIuMAX -# if @UINT32_MAX_LT_UINTMAX_MAX@ -# define PRIuMAX PRIu64 -# else -# define PRIuMAX "lu" -# endif -#endif -#if !defined PRIxMAX || @PRI_MACROS_BROKEN@ -# undef PRIxMAX -# if @UINT32_MAX_LT_UINTMAX_MAX@ -# define PRIxMAX PRIx64 -# else -# define PRIxMAX "lx" -# endif -#endif -#if !defined PRIXMAX || @PRI_MACROS_BROKEN@ -# undef PRIXMAX -# if @UINT32_MAX_LT_UINTMAX_MAX@ -# define PRIXMAX PRIX64 -# else -# define PRIXMAX "lX" -# endif -#endif - -#if !defined PRIdPTR || @PRI_MACROS_BROKEN@ -# undef PRIdPTR -# ifdef INTPTR_MAX -# define PRIdPTR @PRIPTR_PREFIX@ "d" -# endif -#endif -#if !defined PRIiPTR || @PRI_MACROS_BROKEN@ -# undef PRIiPTR -# ifdef INTPTR_MAX -# define PRIiPTR @PRIPTR_PREFIX@ "i" -# endif -#endif -#if !defined PRIoPTR || @PRI_MACROS_BROKEN@ -# undef PRIoPTR -# ifdef UINTPTR_MAX -# define PRIoPTR @PRIPTR_PREFIX@ "o" -# endif -#endif -#if !defined PRIuPTR || @PRI_MACROS_BROKEN@ -# undef PRIuPTR -# ifdef UINTPTR_MAX -# define PRIuPTR @PRIPTR_PREFIX@ "u" -# endif -#endif -#if !defined PRIxPTR || @PRI_MACROS_BROKEN@ -# undef PRIxPTR -# ifdef UINTPTR_MAX -# define PRIxPTR @PRIPTR_PREFIX@ "x" -# endif -#endif -#if !defined PRIXPTR || @PRI_MACROS_BROKEN@ -# undef PRIXPTR -# ifdef UINTPTR_MAX -# define PRIXPTR @PRIPTR_PREFIX@ "X" -# endif -#endif - -#if !defined SCNd8 || @PRI_MACROS_BROKEN@ -# undef SCNd8 -# ifdef INT8_MAX -# define SCNd8 "hhd" -# endif -#endif -#if !defined SCNi8 || @PRI_MACROS_BROKEN@ -# undef SCNi8 -# ifdef INT8_MAX -# define SCNi8 "hhi" -# endif -#endif -#if !defined SCNo8 || @PRI_MACROS_BROKEN@ -# undef SCNo8 -# ifdef UINT8_MAX -# define SCNo8 "hho" -# endif -#endif -#if !defined SCNu8 || @PRI_MACROS_BROKEN@ -# undef SCNu8 -# ifdef UINT8_MAX -# define SCNu8 "hhu" -# endif -#endif -#if !defined SCNx8 || @PRI_MACROS_BROKEN@ -# undef SCNx8 -# ifdef UINT8_MAX -# define SCNx8 "hhx" -# endif -#endif -#if !defined SCNd16 || @PRI_MACROS_BROKEN@ -# undef SCNd16 -# ifdef INT16_MAX -# define SCNd16 "hd" -# endif -#endif -#if !defined SCNi16 || @PRI_MACROS_BROKEN@ -# undef SCNi16 -# ifdef INT16_MAX -# define SCNi16 "hi" -# endif -#endif -#if !defined SCNo16 || @PRI_MACROS_BROKEN@ -# undef SCNo16 -# ifdef UINT16_MAX -# define SCNo16 "ho" -# endif -#endif -#if !defined SCNu16 || @PRI_MACROS_BROKEN@ -# undef SCNu16 -# ifdef UINT16_MAX -# define SCNu16 "hu" -# endif -#endif -#if !defined SCNx16 || @PRI_MACROS_BROKEN@ -# undef SCNx16 -# ifdef UINT16_MAX -# define SCNx16 "hx" -# endif -#endif -#if !defined SCNd32 || @PRI_MACROS_BROKEN@ -# undef SCNd32 -# ifdef INT32_MAX -# define SCNd32 "d" -# endif -#endif -#if !defined SCNi32 || @PRI_MACROS_BROKEN@ -# undef SCNi32 -# ifdef INT32_MAX -# define SCNi32 "i" -# endif -#endif -#if !defined SCNo32 || @PRI_MACROS_BROKEN@ -# undef SCNo32 -# ifdef UINT32_MAX -# define SCNo32 "o" -# endif -#endif -#if !defined SCNu32 || @PRI_MACROS_BROKEN@ -# undef SCNu32 -# ifdef UINT32_MAX -# define SCNu32 "u" -# endif -#endif -#if !defined SCNx32 || @PRI_MACROS_BROKEN@ -# undef SCNx32 -# ifdef UINT32_MAX -# define SCNx32 "x" -# endif -#endif -#ifdef INT64_MAX -# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) -# define _SCN64_PREFIX "l" -# elif defined _MSC_VER || defined __MINGW32__ -# define _SCN64_PREFIX "I64" -# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 -# define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX -# endif -# if !defined SCNd64 || @PRI_MACROS_BROKEN@ -# undef SCNd64 -# define SCNd64 _SCN64_PREFIX "d" -# endif -# if !defined SCNi64 || @PRI_MACROS_BROKEN@ -# undef SCNi64 -# define SCNi64 _SCN64_PREFIX "i" -# endif -#endif -#ifdef UINT64_MAX -# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) -# define _SCNu64_PREFIX "l" -# elif defined _MSC_VER || defined __MINGW32__ -# define _SCNu64_PREFIX "I64" -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 -# define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX -# endif -# if !defined SCNo64 || @PRI_MACROS_BROKEN@ -# undef SCNo64 -# define SCNo64 _SCNu64_PREFIX "o" -# endif -# if !defined SCNu64 || @PRI_MACROS_BROKEN@ -# undef SCNu64 -# define SCNu64 _SCNu64_PREFIX "u" -# endif -# if !defined SCNx64 || @PRI_MACROS_BROKEN@ -# undef SCNx64 -# define SCNx64 _SCNu64_PREFIX "x" -# endif -#endif - -#if !defined SCNdLEAST8 || @PRI_MACROS_BROKEN@ -# undef SCNdLEAST8 -# define SCNdLEAST8 "hhd" -#endif -#if !defined SCNiLEAST8 || @PRI_MACROS_BROKEN@ -# undef SCNiLEAST8 -# define SCNiLEAST8 "hhi" -#endif -#if !defined SCNoLEAST8 || @PRI_MACROS_BROKEN@ -# undef SCNoLEAST8 -# define SCNoLEAST8 "hho" -#endif -#if !defined SCNuLEAST8 || @PRI_MACROS_BROKEN@ -# undef SCNuLEAST8 -# define SCNuLEAST8 "hhu" -#endif -#if !defined SCNxLEAST8 || @PRI_MACROS_BROKEN@ -# undef SCNxLEAST8 -# define SCNxLEAST8 "hhx" -#endif -#if !defined SCNdLEAST16 || @PRI_MACROS_BROKEN@ -# undef SCNdLEAST16 -# define SCNdLEAST16 "hd" -#endif -#if !defined SCNiLEAST16 || @PRI_MACROS_BROKEN@ -# undef SCNiLEAST16 -# define SCNiLEAST16 "hi" -#endif -#if !defined SCNoLEAST16 || @PRI_MACROS_BROKEN@ -# undef SCNoLEAST16 -# define SCNoLEAST16 "ho" -#endif -#if !defined SCNuLEAST16 || @PRI_MACROS_BROKEN@ -# undef SCNuLEAST16 -# define SCNuLEAST16 "hu" -#endif -#if !defined SCNxLEAST16 || @PRI_MACROS_BROKEN@ -# undef SCNxLEAST16 -# define SCNxLEAST16 "hx" -#endif -#if !defined SCNdLEAST32 || @PRI_MACROS_BROKEN@ -# undef SCNdLEAST32 -# define SCNdLEAST32 "d" -#endif -#if !defined SCNiLEAST32 || @PRI_MACROS_BROKEN@ -# undef SCNiLEAST32 -# define SCNiLEAST32 "i" -#endif -#if !defined SCNoLEAST32 || @PRI_MACROS_BROKEN@ -# undef SCNoLEAST32 -# define SCNoLEAST32 "o" -#endif -#if !defined SCNuLEAST32 || @PRI_MACROS_BROKEN@ -# undef SCNuLEAST32 -# define SCNuLEAST32 "u" -#endif -#if !defined SCNxLEAST32 || @PRI_MACROS_BROKEN@ -# undef SCNxLEAST32 -# define SCNxLEAST32 "x" -#endif -#ifdef INT64_MAX -# if !defined SCNdLEAST64 || @PRI_MACROS_BROKEN@ -# undef SCNdLEAST64 -# define SCNdLEAST64 SCNd64 -# endif -# if !defined SCNiLEAST64 || @PRI_MACROS_BROKEN@ -# undef SCNiLEAST64 -# define SCNiLEAST64 SCNi64 -# endif -#endif -#ifdef UINT64_MAX -# if !defined SCNoLEAST64 || @PRI_MACROS_BROKEN@ -# undef SCNoLEAST64 -# define SCNoLEAST64 SCNo64 -# endif -# if !defined SCNuLEAST64 || @PRI_MACROS_BROKEN@ -# undef SCNuLEAST64 -# define SCNuLEAST64 SCNu64 -# endif -# if !defined SCNxLEAST64 || @PRI_MACROS_BROKEN@ -# undef SCNxLEAST64 -# define SCNxLEAST64 SCNx64 -# endif -#endif - -#if !defined SCNdFAST8 || @PRI_MACROS_BROKEN@ -# undef SCNdFAST8 -# if INT_FAST8_MAX > INT32_MAX -# define SCNdFAST8 SCNd64 -# elif INT_FAST8_MAX == 0x7fff -# define SCNdFAST8 "hd" -# elif INT_FAST8_MAX == 0x7f -# define SCNdFAST8 "hhd" -# else -# define SCNdFAST8 "d" -# endif -#endif -#if !defined SCNiFAST8 || @PRI_MACROS_BROKEN@ -# undef SCNiFAST8 -# if INT_FAST8_MAX > INT32_MAX -# define SCNiFAST8 SCNi64 -# elif INT_FAST8_MAX == 0x7fff -# define SCNiFAST8 "hi" -# elif INT_FAST8_MAX == 0x7f -# define SCNiFAST8 "hhi" -# else -# define SCNiFAST8 "i" -# endif -#endif -#if !defined SCNoFAST8 || @PRI_MACROS_BROKEN@ -# undef SCNoFAST8 -# if UINT_FAST8_MAX > UINT32_MAX -# define SCNoFAST8 SCNo64 -# elif UINT_FAST8_MAX == 0xffff -# define SCNoFAST8 "ho" -# elif UINT_FAST8_MAX == 0xff -# define SCNoFAST8 "hho" -# else -# define SCNoFAST8 "o" -# endif -#endif -#if !defined SCNuFAST8 || @PRI_MACROS_BROKEN@ -# undef SCNuFAST8 -# if UINT_FAST8_MAX > UINT32_MAX -# define SCNuFAST8 SCNu64 -# elif UINT_FAST8_MAX == 0xffff -# define SCNuFAST8 "hu" -# elif UINT_FAST8_MAX == 0xff -# define SCNuFAST8 "hhu" -# else -# define SCNuFAST8 "u" -# endif -#endif -#if !defined SCNxFAST8 || @PRI_MACROS_BROKEN@ -# undef SCNxFAST8 -# if UINT_FAST8_MAX > UINT32_MAX -# define SCNxFAST8 SCNx64 -# elif UINT_FAST8_MAX == 0xffff -# define SCNxFAST8 "hx" -# elif UINT_FAST8_MAX == 0xff -# define SCNxFAST8 "hhx" -# else -# define SCNxFAST8 "x" -# endif -#endif -#if !defined SCNdFAST16 || @PRI_MACROS_BROKEN@ -# undef SCNdFAST16 -# if INT_FAST16_MAX > INT32_MAX -# define SCNdFAST16 SCNd64 -# elif INT_FAST16_MAX == 0x7fff -# define SCNdFAST16 "hd" -# else -# define SCNdFAST16 "d" -# endif -#endif -#if !defined SCNiFAST16 || @PRI_MACROS_BROKEN@ -# undef SCNiFAST16 -# if INT_FAST16_MAX > INT32_MAX -# define SCNiFAST16 SCNi64 -# elif INT_FAST16_MAX == 0x7fff -# define SCNiFAST16 "hi" -# else -# define SCNiFAST16 "i" -# endif -#endif -#if !defined SCNoFAST16 || @PRI_MACROS_BROKEN@ -# undef SCNoFAST16 -# if UINT_FAST16_MAX > UINT32_MAX -# define SCNoFAST16 SCNo64 -# elif UINT_FAST16_MAX == 0xffff -# define SCNoFAST16 "ho" -# else -# define SCNoFAST16 "o" -# endif -#endif -#if !defined SCNuFAST16 || @PRI_MACROS_BROKEN@ -# undef SCNuFAST16 -# if UINT_FAST16_MAX > UINT32_MAX -# define SCNuFAST16 SCNu64 -# elif UINT_FAST16_MAX == 0xffff -# define SCNuFAST16 "hu" -# else -# define SCNuFAST16 "u" -# endif -#endif -#if !defined SCNxFAST16 || @PRI_MACROS_BROKEN@ -# undef SCNxFAST16 -# if UINT_FAST16_MAX > UINT32_MAX -# define SCNxFAST16 SCNx64 -# elif UINT_FAST16_MAX == 0xffff -# define SCNxFAST16 "hx" -# else -# define SCNxFAST16 "x" -# endif -#endif -#if !defined SCNdFAST32 || @PRI_MACROS_BROKEN@ -# undef SCNdFAST32 -# if INT_FAST32_MAX > INT32_MAX -# define SCNdFAST32 SCNd64 -# else -# define SCNdFAST32 "d" -# endif -#endif -#if !defined SCNiFAST32 || @PRI_MACROS_BROKEN@ -# undef SCNiFAST32 -# if INT_FAST32_MAX > INT32_MAX -# define SCNiFAST32 SCNi64 -# else -# define SCNiFAST32 "i" -# endif -#endif -#if !defined SCNoFAST32 || @PRI_MACROS_BROKEN@ -# undef SCNoFAST32 -# if UINT_FAST32_MAX > UINT32_MAX -# define SCNoFAST32 SCNo64 -# else -# define SCNoFAST32 "o" -# endif -#endif -#if !defined SCNuFAST32 || @PRI_MACROS_BROKEN@ -# undef SCNuFAST32 -# if UINT_FAST32_MAX > UINT32_MAX -# define SCNuFAST32 SCNu64 -# else -# define SCNuFAST32 "u" -# endif -#endif -#if !defined SCNxFAST32 || @PRI_MACROS_BROKEN@ -# undef SCNxFAST32 -# if UINT_FAST32_MAX > UINT32_MAX -# define SCNxFAST32 SCNx64 -# else -# define SCNxFAST32 "x" -# endif -#endif -#ifdef INT64_MAX -# if !defined SCNdFAST64 || @PRI_MACROS_BROKEN@ -# undef SCNdFAST64 -# define SCNdFAST64 SCNd64 -# endif -# if !defined SCNiFAST64 || @PRI_MACROS_BROKEN@ -# undef SCNiFAST64 -# define SCNiFAST64 SCNi64 -# endif -#endif -#ifdef UINT64_MAX -# if !defined SCNoFAST64 || @PRI_MACROS_BROKEN@ -# undef SCNoFAST64 -# define SCNoFAST64 SCNo64 -# endif -# if !defined SCNuFAST64 || @PRI_MACROS_BROKEN@ -# undef SCNuFAST64 -# define SCNuFAST64 SCNu64 -# endif -# if !defined SCNxFAST64 || @PRI_MACROS_BROKEN@ -# undef SCNxFAST64 -# define SCNxFAST64 SCNx64 -# endif -#endif - -#if !defined SCNdMAX || @PRI_MACROS_BROKEN@ -# undef SCNdMAX -# if @INT32_MAX_LT_INTMAX_MAX@ -# define SCNdMAX SCNd64 -# else -# define SCNdMAX "ld" -# endif -#endif -#if !defined SCNiMAX || @PRI_MACROS_BROKEN@ -# undef SCNiMAX -# if @INT32_MAX_LT_INTMAX_MAX@ -# define SCNiMAX SCNi64 -# else -# define SCNiMAX "li" -# endif -#endif -#if !defined SCNoMAX || @PRI_MACROS_BROKEN@ -# undef SCNoMAX -# if @UINT32_MAX_LT_UINTMAX_MAX@ -# define SCNoMAX SCNo64 -# else -# define SCNoMAX "lo" -# endif -#endif -#if !defined SCNuMAX || @PRI_MACROS_BROKEN@ -# undef SCNuMAX -# if @UINT32_MAX_LT_UINTMAX_MAX@ -# define SCNuMAX SCNu64 -# else -# define SCNuMAX "lu" -# endif -#endif -#if !defined SCNxMAX || @PRI_MACROS_BROKEN@ -# undef SCNxMAX -# if @UINT32_MAX_LT_UINTMAX_MAX@ -# define SCNxMAX SCNx64 -# else -# define SCNxMAX "lx" -# endif -#endif - -#if !defined SCNdPTR || @PRI_MACROS_BROKEN@ -# undef SCNdPTR -# ifdef INTPTR_MAX -# define SCNdPTR @PRIPTR_PREFIX@ "d" -# endif -#endif -#if !defined SCNiPTR || @PRI_MACROS_BROKEN@ -# undef SCNiPTR -# ifdef INTPTR_MAX -# define SCNiPTR @PRIPTR_PREFIX@ "i" -# endif -#endif -#if !defined SCNoPTR || @PRI_MACROS_BROKEN@ -# undef SCNoPTR -# ifdef UINTPTR_MAX -# define SCNoPTR @PRIPTR_PREFIX@ "o" -# endif -#endif -#if !defined SCNuPTR || @PRI_MACROS_BROKEN@ -# undef SCNuPTR -# ifdef UINTPTR_MAX -# define SCNuPTR @PRIPTR_PREFIX@ "u" -# endif -#endif -#if !defined SCNxPTR || @PRI_MACROS_BROKEN@ -# undef SCNxPTR -# ifdef UINTPTR_MAX -# define SCNxPTR @PRIPTR_PREFIX@ "x" -# endif -#endif - -/* 7.8.2 Functions for greatest-width integer types */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if @GNULIB_IMAXABS@ -# if !@HAVE_DECL_IMAXABS@ -extern intmax_t imaxabs (intmax_t); -# endif -#elif defined GNULIB_POSIXCHECK -# undef imaxabs -# if HAVE_RAW_DECL_IMAXABS -_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - " - "use gnulib module imaxabs for portability"); -# endif -#endif - -#if @GNULIB_IMAXDIV@ -# if !@HAVE_DECL_IMAXDIV@ -# if !GNULIB_defined_imaxdiv_t -typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; -# define GNULIB_defined_imaxdiv_t 1 -# endif -extern imaxdiv_t imaxdiv (intmax_t, intmax_t); -# endif -#elif defined GNULIB_POSIXCHECK -# undef imaxdiv -# if HAVE_RAW_DECL_IMAXDIV -_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - " - "use gnulib module imaxdiv for portability"); -# endif -#endif - -#if @GNULIB_STRTOIMAX@ -# if @REPLACE_STRTOIMAX@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strtoimax -# define strtoimax rpl_strtoimax -# endif -_GL_FUNCDECL_RPL (strtoimax, intmax_t, - (const char *, char **, int) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int)); -# else -# if !@HAVE_DECL_STRTOIMAX@ -# undef strtoimax -_GL_FUNCDECL_SYS (strtoimax, intmax_t, - (const char *, char **, int) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *, char **, int)); -# endif -_GL_CXXALIASWARN (strtoimax); -#elif defined GNULIB_POSIXCHECK -# undef strtoimax -# if HAVE_RAW_DECL_STRTOIMAX -_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - " - "use gnulib module strtoimax for portability"); -# endif -#endif - -#if @GNULIB_STRTOUMAX@ -# if @REPLACE_STRTOUMAX@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strtoumax -# define strtoumax rpl_strtoumax -# endif -_GL_FUNCDECL_RPL (strtoumax, uintmax_t, - (const char *, char **, int) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strtoumax, uintmax_t, (const char *, char **, int)); -# else -# if !@HAVE_DECL_STRTOUMAX@ -# undef strtoumax -_GL_FUNCDECL_SYS (strtoumax, uintmax_t, - (const char *, char **, int) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int)); -# endif -_GL_CXXALIASWARN (strtoumax); -#elif defined GNULIB_POSIXCHECK -# undef strtoumax -# if HAVE_RAW_DECL_STRTOUMAX -_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - " - "use gnulib module strtoumax for portability"); -# endif -#endif - -/* Don't bother defining or declaring wcstoimax and wcstoumax, since - wide-character functions like this are hardly ever useful. */ - -#ifdef __cplusplus -} -#endif - -#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */ diff --git a/gl/tests/macros.h b/gl/tests/macros.h deleted file mode 100644 index 578bfe737e..0000000000 --- a/gl/tests/macros.h +++ /dev/null @@ -1,73 +0,0 @@ -/* Common macros used by gnulib tests. - Copyright (C) 2006-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - - -/* This file contains macros that are used by many gnulib tests. - Put here only frequently used macros, say, used by 10 tests or more. */ - -#include -#include - -/* Define ASSERT_STREAM before including this file if ASSERT must - target a stream other than stderr. */ -#ifndef ASSERT_STREAM -# define ASSERT_STREAM stderr -#endif - -/* ASSERT (condition); - verifies that the specified condition is fulfilled. If not, a message - is printed to ASSERT_STREAM if defined (defaulting to stderr if - undefined) and the program is terminated with an error code. - - This macro has the following properties: - - The programmer specifies the expected condition, not the failure - condition. This simplifies thinking. - - The condition is tested always, regardless of compilation flags. - (Unlike the macro from .) - - On Unix platforms, the tester can debug the test program with a - debugger (provided core dumps are enabled: "ulimit -c unlimited"). - - For the sake of platforms where no debugger is available (such as - some mingw systems), an error message is printed on the error - stream that includes the source location of the ASSERT invocation. - */ -#define ASSERT(expr) \ - do \ - { \ - if (!(expr)) \ - { \ - fprintf (ASSERT_STREAM, "%s:%d: assertion '%s' failed\n", \ - __FILE__, __LINE__, #expr); \ - fflush (ASSERT_STREAM); \ - abort (); \ - } \ - } \ - while (0) - -/* SIZEOF (array) - returns the number of elements of an array. It works for arrays that are - declared outside functions and for local variables of array type. It does - *not* work for function parameters of array type, because they are actually - parameters of pointer type. */ -#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) - -/* STREQ (str1, str2) - Return true if two strings compare equal. */ -#define STREQ(a, b) (strcmp (a, b) == 0) - -/* Some numbers in the interval [0,1). */ -extern const float randomf[1000]; -extern const double randomd[1000]; -extern const long double randoml[1000]; diff --git a/gl/tests/signature.h b/gl/tests/signature.h deleted file mode 100644 index 2df806788a..0000000000 --- a/gl/tests/signature.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Macro for checking that a function declaration is compliant. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef SIGNATURE_CHECK - -/* Check that the function FN takes the specified arguments ARGS with - a return type of RET. This header is designed to be included after - and the one system header that is supposed to contain - the function being checked, but prior to any other system headers - that are necessary for the unit test. Therefore, this file does - not include any system headers, nor reference anything outside of - the macro arguments. For an example, if foo.h should provide: - - extern int foo (char, float); - - then the unit test named test-foo.c would start out with: - - #include - #include - #include "signature.h" - SIGNATURE_CHECK (foo, int, (char, float)); - #include - ... -*/ -# define SIGNATURE_CHECK(fn, ret, args) \ - SIGNATURE_CHECK1 (fn, ret, args, __LINE__) - -/* Necessary to allow multiple SIGNATURE_CHECK lines in a unit test. - Note that the checks must not occupy the same line. */ -# define SIGNATURE_CHECK1(fn, ret, args, id) \ - SIGNATURE_CHECK2 (fn, ret, args, id) /* macroexpand line */ -# define SIGNATURE_CHECK2(fn, ret, args, id) \ - static ret (* _GL_UNUSED signature_check ## id) args = fn - -#endif /* SIGNATURE_CHECK */ diff --git a/gl/tests/test-alloca-opt.c b/gl/tests/test-alloca-opt.c deleted file mode 100644 index b9aaa4a147..0000000000 --- a/gl/tests/test-alloca-opt.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Test of optional automatic memory allocation. - Copyright (C) 2005, 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#if HAVE_ALLOCA - -static void -do_allocation (int n) -{ - void *ptr = alloca (n); - (void) ptr; -} - -void (*func) (int) = do_allocation; - -#endif - -int -main () -{ -#if HAVE_ALLOCA - int i; - - /* Repeat a lot of times, to make sure there's no memory leak. */ - for (i = 0; i < 100000; i++) - { - /* Try various values. - n = 0 gave a crash on Alpha with gcc-2.5.8. - Some versions of Mac OS X have a stack size limit of 512 KB. */ - func (34); - func (134); - func (399); - func (510823); - func (129321); - func (0); - func (4070); - func (4095); - func (1); - func (16582); - } -#endif - - return 0; -} diff --git a/gl/tests/test-binary-io.c b/gl/tests/test-binary-io.c deleted file mode 100644 index 6801e9621f..0000000000 --- a/gl/tests/test-binary-io.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Test of binary mode I/O. - Copyright (C) 2005, 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2005. */ - -#include - -#include "binary-io.h" - -#include -#include -#include -#include -#include -#include - -#include "macros.h" - -int -main (int argc, char *argv[]) -{ - /* Test the O_BINARY macro. */ - { - int fd = - open ("t-bin-out0.tmp", O_CREAT | O_TRUNC | O_RDWR | O_BINARY, 0600); - if (write (fd, "Hello\n", 6) < 0) - exit (1); - close (fd); - } - { - struct stat statbuf; - if (stat ("t-bin-out0.tmp", &statbuf) < 0) - exit (1); - ASSERT (statbuf.st_size == 6); - } - - switch (argv[1][0]) - { - case '1': - /* Test the set_binary_mode() function. */ - set_binary_mode (1, O_BINARY); - fputs ("Hello\n", stdout); - break; - - case '2': - /* Test the SET_BINARY macro. */ - SET_BINARY (1); - fputs ("Hello\n", stdout); - break; - - default: - break; - } - - return 0; -} diff --git a/gl/tests/test-binary-io.sh b/gl/tests/test-binary-io.sh deleted file mode 100755 index c4dd6e9295..0000000000 --- a/gl/tests/test-binary-io.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -tmpfiles="" -trap 'rm -fr $tmpfiles' 1 2 3 15 - -tmpfiles="$tmpfiles t-bin-out0.tmp t-bin-out1.tmp t-bin-out2.tmp" -./test-binary-io${EXEEXT} 1 > t-bin-out1.tmp || exit 1 -cmp t-bin-out0.tmp t-bin-out1.tmp > /dev/null || exit 1 -./test-binary-io${EXEEXT} 2 > t-bin-out2.tmp || exit 1 -cmp t-bin-out0.tmp t-bin-out2.tmp > /dev/null || exit 1 - -rm -fr $tmpfiles - -exit 0 diff --git a/gl/tests/test-byteswap.c b/gl/tests/test-byteswap.c deleted file mode 100644 index 909bd54d30..0000000000 --- a/gl/tests/test-byteswap.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include "macros.h" - -int -main () -{ - ASSERT (bswap_16 (0xABCD) == 0xCDAB); - ASSERT (bswap_32 (0xDEADBEEF) == 0xEFBEADDE); - - return 0; -} diff --git a/gl/tests/test-c-ctype.c b/gl/tests/test-c-ctype.c deleted file mode 100644 index 184cdec6e0..0000000000 --- a/gl/tests/test-c-ctype.c +++ /dev/null @@ -1,228 +0,0 @@ -/* Test of character handling in C locale. - Copyright (C) 2005, 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2005. */ - -#include - -#include "c-ctype.h" - -#include -#include -#include - -#include "macros.h" - -static void -test_agree_with_C_locale (void) -{ - int c; - - for (c = 0; c <= UCHAR_MAX; c++) - { - ASSERT (c_isascii (c) == (isascii (c) != 0)); - if (c_isascii (c)) - { - ASSERT (c_isalnum (c) == (isalnum (c) != 0)); - ASSERT (c_isalpha (c) == (isalpha (c) != 0)); - ASSERT (c_isblank (c) == (isblank (c) != 0)); - ASSERT (c_iscntrl (c) == (iscntrl (c) != 0)); - ASSERT (c_isdigit (c) == (isdigit (c) != 0)); - ASSERT (c_islower (c) == (islower (c) != 0)); - ASSERT (c_isgraph (c) == (isgraph (c) != 0)); - ASSERT (c_isprint (c) == (isprint (c) != 0)); - ASSERT (c_ispunct (c) == (ispunct (c) != 0)); - ASSERT (c_isspace (c) == (isspace (c) != 0)); - ASSERT (c_isupper (c) == (isupper (c) != 0)); - ASSERT (c_isxdigit (c) == (isxdigit (c) != 0)); - ASSERT (c_tolower (c) == tolower (c)); - ASSERT (c_toupper (c) == toupper (c)); - } - } -} - -static void -test_all (void) -{ - int c; - int n_isascii = 0; - - for (c = CHAR_MIN; c <= UCHAR_MAX; c++) - { - if (! (0 <= c && c <= CHAR_MAX)) - { - ASSERT (! c_isascii (c)); - ASSERT (! c_isalnum (c)); - ASSERT (! c_isalpha (c)); - ASSERT (! c_isblank (c)); - ASSERT (! c_iscntrl (c)); - ASSERT (! c_isdigit (c)); - ASSERT (! c_islower (c)); - ASSERT (! c_isgraph (c)); - ASSERT (! c_isprint (c)); - ASSERT (! c_ispunct (c)); - ASSERT (! c_isspace (c)); - ASSERT (! c_isupper (c)); - ASSERT (! c_isxdigit (c)); - ASSERT (c_tolower (c) == c); - ASSERT (c_toupper (c) == c); - } - - n_isascii += c_isascii (c); - -#ifdef C_CTYPE_ASCII - ASSERT (c_isascii (c) == (0 <= c && c <= 0x7f)); -#endif - - ASSERT (c_isascii (c) == (c_isprint (c) || c_iscntrl (c))); - - ASSERT (c_isalnum (c) == (c_isalpha (c) || c_isdigit (c))); - - ASSERT (c_isalpha (c) == (c_islower (c) || c_isupper (c))); - - switch (c) - { - case '\t': case ' ': - ASSERT (c_isblank (c) == 1); - break; - default: - ASSERT (c_isblank (c) == 0); - break; - } - -#ifdef C_CTYPE_ASCII - ASSERT (c_iscntrl (c) == ((c >= 0 && c < 0x20) || c == 0x7f)); -#endif - - switch (c) - { - case '\a': case '\b': case '\f': case '\n': - case '\r': case '\t': case '\v': - ASSERT (c_iscntrl (c)); - break; - } - - ASSERT (! (c_iscntrl (c) && c_isprint (c))); - - switch (c) - { - case '0': case '1': case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': - ASSERT (c_isdigit (c) == 1); - break; - default: - ASSERT (c_isdigit (c) == 0); - break; - } - - switch (c) - { - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': - case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': - case 's': case 't': case 'u': case 'v': case 'w': case 'x': - case 'y': case 'z': - ASSERT (c_islower (c) == 1); - ASSERT (c_toupper (c) == c - 'a' + 'A'); - break; - default: - ASSERT (c_islower (c) == 0); - ASSERT (c_toupper (c) == c); - break; - } - -#ifdef C_CTYPE_ASCII - ASSERT (c_isgraph (c) == ((c >= 0x20 && c < 0x7f) && c != ' ')); - - ASSERT (c_isprint (c) == (c >= 0x20 && c < 0x7f)); -#endif - - ASSERT (c_isgraph (c) == (c_isalnum (c) || c_ispunct (c))); - - ASSERT (c_isprint (c) == (c_isgraph (c) || c == ' ')); - - switch (c) - { - case '!': case '"': case '#': case '$': case '%': case '&': case '\'': - case '(': case ')': case '*': case '+': case ',': case '-': case '.': - case '/': case ':': case ';': case '<': case '=': case '>': case '?': - case '@': case '[': case'\\': case ']': case '^': case '_': case '`': - case '{': case '|': case '}': case '~': - ASSERT (c_ispunct (c) == 1); - break; - default: - ASSERT (c_ispunct (c) == 0); - break; - } - - switch (c) - { - case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': - ASSERT (c_isspace (c) == 1); - break; - default: - ASSERT (c_isspace (c) == 0); - break; - } - - switch (c) - { - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': - case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': - case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': - case 'Y': case 'Z': - ASSERT (c_isupper (c) == 1); - ASSERT (c_tolower (c) == c - 'A' + 'a'); - break; - default: - ASSERT (c_isupper (c) == 0); - ASSERT (c_tolower (c) == c); - break; - } - - switch (c) - { - case '0': case '1': case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - ASSERT (c_isxdigit (c) == 1); - break; - default: - ASSERT (c_isxdigit (c) == 0); - break; - } - } - - ASSERT (n_isascii == 128); -} - -int -main () -{ - test_agree_with_C_locale (); - - test_all (); - - setlocale (LC_ALL, "de_DE"); - test_all (); - - setlocale (LC_ALL, "ja_JP.EUC-JP"); - test_all (); - - return 0; -} diff --git a/gl/tests/test-ctype.c b/gl/tests/test-ctype.c deleted file mode 100644 index 570fbdb0c1..0000000000 --- a/gl/tests/test-ctype.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Test of substitute. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Eric Blake , 2009. */ - -#include - -#include - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-errno.c b/gl/tests/test-errno.c deleted file mode 100644 index 1e0bb6d4d3..0000000000 --- a/gl/tests/test-errno.c +++ /dev/null @@ -1,119 +0,0 @@ -/* Test of substitute. - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2008. */ - -#include - -#include - -/* Verify that the POSIX mandated errno values exist and can be used as - initializers outside of a function. - The variable names happen to match the Linux/x86 error numbers. */ -int e1 = EPERM; -int e2 = ENOENT; -int e3 = ESRCH; -int e4 = EINTR; -int e5 = EIO; -int e6 = ENXIO; -int e7 = E2BIG; -int e8 = ENOEXEC; -int e9 = EBADF; -int e10 = ECHILD; -int e11 = EAGAIN; -int e11a = EWOULDBLOCK; -int e12 = ENOMEM; -int e13 = EACCES; -int e14 = EFAULT; -int e16 = EBUSY; -int e17 = EEXIST; -int e18 = EXDEV; -int e19 = ENODEV; -int e20 = ENOTDIR; -int e21 = EISDIR; -int e22 = EINVAL; -int e23 = ENFILE; -int e24 = EMFILE; -int e25 = ENOTTY; -int e26 = ETXTBSY; -int e27 = EFBIG; -int e28 = ENOSPC; -int e29 = ESPIPE; -int e30 = EROFS; -int e31 = EMLINK; -int e32 = EPIPE; -int e33 = EDOM; -int e34 = ERANGE; -int e35 = EDEADLK; -int e36 = ENAMETOOLONG; -int e37 = ENOLCK; -int e38 = ENOSYS; -int e39 = ENOTEMPTY; -int e40 = ELOOP; -int e42 = ENOMSG; -int e43 = EIDRM; -int e67 = ENOLINK; -int e71 = EPROTO; -int e72 = EMULTIHOP; -int e74 = EBADMSG; -int e75 = EOVERFLOW; -int e84 = EILSEQ; -int e88 = ENOTSOCK; -int e89 = EDESTADDRREQ; -int e90 = EMSGSIZE; -int e91 = EPROTOTYPE; -int e92 = ENOPROTOOPT; -int e93 = EPROTONOSUPPORT; -int e95 = EOPNOTSUPP; -int e95a = ENOTSUP; -int e97 = EAFNOSUPPORT; -int e98 = EADDRINUSE; -int e99 = EADDRNOTAVAIL; -int e100 = ENETDOWN; -int e101 = ENETUNREACH; -int e102 = ENETRESET; -int e103 = ECONNABORTED; -int e104 = ECONNRESET; -int e105 = ENOBUFS; -int e106 = EISCONN; -int e107 = ENOTCONN; -int e110 = ETIMEDOUT; -int e111 = ECONNREFUSED; -int e113 = EHOSTUNREACH; -int e114 = EALREADY; -int e115 = EINPROGRESS; -int e116 = ESTALE; -int e122 = EDQUOT; -int e125 = ECANCELED; -int e130 = EOWNERDEAD; -int e131 = ENOTRECOVERABLE; - -/* Don't verify that these errno values are all different, except for possibly - EWOULDBLOCK == EAGAIN. Even Linux/x86 does not pass this check: it has - ENOTSUP == EOPNOTSUPP. */ - -int -main () -{ - /* Verify that errno can be assigned. */ - errno = EOVERFLOW; - - /* snprintf() callers want to distinguish EINVAL and EOVERFLOW. */ - if (errno == EINVAL) - return 1; - - return 0; -} diff --git a/gl/tests/test-fcntl-h.c b/gl/tests/test-fcntl-h.c deleted file mode 100644 index aef1661a64..0000000000 --- a/gl/tests/test-fcntl-h.c +++ /dev/null @@ -1,130 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -/* Check that the various O_* macros are defined. */ -int o = (O_DIRECT | O_DIRECTORY | O_DSYNC | O_IGNORE_CTTY | O_NDELAY | O_NOATIME - | O_NONBLOCK | O_NOCTTY | O_NOFOLLOW | O_NOLINK | O_NOLINKS | O_NOTRANS - | O_RSYNC | O_SYNC | O_TTY_INIT | O_BINARY | O_TEXT); - -/* Check that the various SEEK_* macros are defined. */ -int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; - -/* Check that the FD_* macros are defined. */ -int i = FD_CLOEXEC; - -/* Check that the types are all defined. */ -pid_t t1; -off_t t2; -mode_t t3; - -int -main (void) -{ - /* Ensure no overlap in SEEK_*. */ - switch (0) - { - case SEEK_CUR: - case SEEK_END: - case SEEK_SET: - ; - } - - /* Ensure no dangerous overlap in non-zero gnulib-defined replacements. */ - switch (O_RDONLY) - { - /* Access modes */ - case O_RDONLY: - case O_WRONLY: - case O_RDWR: -#if O_EXEC && O_EXEC != O_RDONLY - case O_EXEC: -#endif -#if O_SEARCH && O_EXEC != O_SEARCH && O_SEARCH != O_RDONLY - case O_SEARCH: -#endif - i = ! (~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)); - break; - - /* Everyone should have these */ - case O_CREAT: - case O_EXCL: - case O_TRUNC: - case O_APPEND: - break; - - /* These might be 0 or O_RDONLY, only test non-zero versions. */ -#if O_CLOEXEC - case O_CLOEXEC: -#endif -#if O_DIRECT - case O_DIRECT: -#endif -#if O_DIRECTORY - case O_DIRECTORY: -#endif -#if O_DSYNC - case O_DSYNC: -#endif -#if O_IGNORE_CTTY - case O_IGNORE_CTTY: -#endif -#if O_NOATIME - case O_NOATIME: -#endif -#if O_NONBLOCK - case O_NONBLOCK: -#endif -#if O_NOCTTY - case O_NOCTTY: -#endif -#if O_NOFOLLOW - case O_NOFOLLOW: -#endif -#if O_NOLINK - case O_NOLINK: -#endif -#if O_NOLINKS - case O_NOLINKS: -#endif -#if O_NOTRANS - case O_NOTRANS: -#endif -#if O_RSYNC && O_RSYNC != O_DSYNC - case O_RSYNC: -#endif -#if O_SYNC && O_SYNC != O_DSYNC && O_SYNC != O_RSYNC - case O_SYNC: -#endif -#if O_TTY_INIT - case O_TTY_INIT: -#endif -#if O_BINARY - case O_BINARY: -#endif -#if O_TEXT - case O_TEXT: -#endif - ; - } - - return !i; -} diff --git a/gl/tests/test-fdopen.c b/gl/tests/test-fdopen.c deleted file mode 100644 index 55b49a6490..0000000000 --- a/gl/tests/test-fdopen.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Test opening a stream with a file descriptor. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (fdopen, FILE *, (int, const char *)); - -#include -#include - -#include "macros.h" - -int -main (void) -{ - /* Test behavior on failure. POSIX makes it hard to check for - failure, since the behavior is not well-defined on invalid file - descriptors, so try fdopen 1000 times and if that's not enough to - fail due to EMFILE, so be it. */ - - int i; - for (i = 0; i < 1000; i++) - { - errno = 0; - if (! fdopen (STDOUT_FILENO, "w")) - { - ASSERT (errno != 0); - break; - } - } - - return 0; -} diff --git a/gl/tests/test-fgetc.c b/gl/tests/test-fgetc.c deleted file mode 100644 index c62e70c6d9..0000000000 --- a/gl/tests/test-fgetc.c +++ /dev/null @@ -1,97 +0,0 @@ -/* Test of fgetc() function. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (fgetc, int, (FILE *)); - -#include -#include -#include - -#include "msvc-inval.h" - -#include "macros.h" - -int -main (int argc, char **argv) -{ - const char *filename = "test-fgetc.txt"; - - /* We don't have an fgetc() function that installs an invalid parameter - handler so far. So install that handler here, explicitly. */ -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ - && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING - gl_msvc_inval_ensure_handler (); -#endif - - /* Prepare a file. */ - { - const char text[] = "hello world"; - int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0600); - ASSERT (fd >= 0); - ASSERT (write (fd, text, sizeof (text)) == sizeof (text)); - ASSERT (close (fd) == 0); - } - - /* Test that fgetc() sets errno if someone else closes the stream - fd behind the back of stdio. */ - { - FILE *fp = fopen (filename, "r"); - ASSERT (fp != NULL); - ASSERT (close (fileno (fp)) == 0); - errno = 0; - ASSERT (fgetc (fp) == EOF); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - - /* Test that fgetc() sets errno if the stream was constructed with - an invalid file descriptor. */ - { - FILE *fp = fdopen (-1, "r"); - if (fp != NULL) - { - errno = 0; - ASSERT (fgetc (fp) == EOF); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - } - { - FILE *fp; - close (99); - fp = fdopen (99, "r"); - if (fp != NULL) - { - errno = 0; - ASSERT (fgetc (fp) == EOF); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - } - - /* Clean up. */ - unlink (filename); - - return 0; -} diff --git a/gl/tests/test-float.c b/gl/tests/test-float.c deleted file mode 100644 index 1c95b12f97..0000000000 --- a/gl/tests/test-float.c +++ /dev/null @@ -1,383 +0,0 @@ -/* Test of substitute. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2011. */ - -#include - -#include - -#include "fpucw.h" -#include "macros.h" - -#if 0 - -/* Check that FLT_RADIX is a constant expression. */ -int a[] = { FLT_RADIX }; - -/* Return 2^n. */ -static float -pow2f (int n) -{ - int k = n; - volatile float x = 1; - volatile float y = 2; - /* Invariant: 2^n == x * y^k. */ - if (k < 0) - { - y = 0.5f; - k = - k; - } - while (k > 0) - { - if (k != 2 * (k / 2)) - { - x = x * y; - k = k - 1; - } - if (k == 0) - break; - y = y * y; - k = k / 2; - } - /* Now k == 0, hence x == 2^n. */ - return x; -} - -/* Return 2^n. */ -static double -pow2d (int n) -{ - int k = n; - volatile double x = 1; - volatile double y = 2; - /* Invariant: 2^n == x * y^k. */ - if (k < 0) - { - y = 0.5; - k = - k; - } - while (k > 0) - { - if (k != 2 * (k / 2)) - { - x = x * y; - k = k - 1; - } - if (k == 0) - break; - y = y * y; - k = k / 2; - } - /* Now k == 0, hence x == 2^n. */ - return x; -} - -/* Return 2^n. */ -static long double -pow2l (int n) -{ - int k = n; - volatile long double x = 1; - volatile long double y = 2; - /* Invariant: 2^n == x * y^k. */ - if (k < 0) - { - y = 0.5L; - k = - k; - } - while (k > 0) - { - if (k != 2 * (k / 2)) - { - x = x * y; - k = k - 1; - } - if (k == 0) - break; - y = y * y; - k = k / 2; - } - /* Now k == 0, hence x == 2^n. */ - return x; -} - -/* ----------------------- Check macros for 'float' ----------------------- */ - -/* Check that the FLT_* macros expand to constant expressions. */ -int fb[] = - { - FLT_MANT_DIG, FLT_MIN_EXP, FLT_MAX_EXP, - FLT_DIG, FLT_MIN_10_EXP, FLT_MAX_10_EXP - }; -float fc[] = { FLT_EPSILON, FLT_MIN, FLT_MAX }; - -static void -test_float (void) -{ - /* Check that the value of FLT_MIN_EXP is well parenthesized. */ - ASSERT ((FLT_MIN_EXP % 101111) == (FLT_MIN_EXP) % 101111); - - /* Check that the value of DBL_MIN_10_EXP is well parenthesized. */ - ASSERT ((FLT_MIN_10_EXP % 101111) == (FLT_MIN_10_EXP) % 101111); - - /* Check that 'float' is as specified in IEEE 754. */ - ASSERT (FLT_MANT_DIG == 24); - ASSERT (FLT_MIN_EXP == -125); - ASSERT (FLT_MAX_EXP == 128); - - /* Check the value of FLT_MIN_10_EXP. */ - ASSERT (FLT_MIN_10_EXP == - (int) (- (FLT_MIN_EXP - 1) * 0.30103)); - - /* Check the value of FLT_DIG. */ - ASSERT (FLT_DIG == (int) ((FLT_MANT_DIG - 1) * 0.30103)); - - /* Check the value of FLT_MIN_10_EXP. */ - ASSERT (FLT_MIN_10_EXP == - (int) (- (FLT_MIN_EXP - 1) * 0.30103)); - - /* Check the value of FLT_MAX_10_EXP. */ - ASSERT (FLT_MAX_10_EXP == (int) (FLT_MAX_EXP * 0.30103)); - - /* Check the value of FLT_MAX. */ - { - volatile float m = FLT_MAX; - int n; - - ASSERT (m + m > m); - for (n = 0; n <= 2 * FLT_MANT_DIG; n++) - { - volatile float pow2_n = pow2f (n); /* 2^n */ - volatile float x = m + (m / pow2_n); - if (x > m) - ASSERT (x + x == x); - else - ASSERT (!(x + x == x)); - } - } - - /* Check the value of FLT_MIN. */ - { - volatile float m = FLT_MIN; - volatile float x = pow2f (FLT_MIN_EXP - 1); - ASSERT (m == x); - } - - /* Check the value of FLT_EPSILON. */ - { - volatile float e = FLT_EPSILON; - volatile float me; - int n; - - me = 1.0f + e; - ASSERT (me > 1.0f); - ASSERT (me - 1.0f == e); - for (n = 0; n <= 2 * FLT_MANT_DIG; n++) - { - volatile float half_n = pow2f (- n); /* 2^-n */ - volatile float x = me - half_n; - if (x < me) - ASSERT (x <= 1.0f); - } - } -} - -/* ----------------------- Check macros for 'double' ----------------------- */ - -/* Check that the DBL_* macros expand to constant expressions. */ -int db[] = - { - DBL_MANT_DIG, DBL_MIN_EXP, DBL_MAX_EXP, - DBL_DIG, DBL_MIN_10_EXP, DBL_MAX_10_EXP - }; -double dc[] = { DBL_EPSILON, DBL_MIN, DBL_MAX }; - -static void -test_double (void) -{ - /* Check that the value of DBL_MIN_EXP is well parenthesized. */ - ASSERT ((DBL_MIN_EXP % 101111) == (DBL_MIN_EXP) % 101111); - - /* Check that the value of DBL_MIN_10_EXP is well parenthesized. */ - ASSERT ((DBL_MIN_10_EXP % 101111) == (DBL_MIN_10_EXP) % 101111); - - /* Check that 'double' is as specified in IEEE 754. */ - ASSERT (DBL_MANT_DIG == 53); - ASSERT (DBL_MIN_EXP == -1021); - ASSERT (DBL_MAX_EXP == 1024); - - /* Check the value of DBL_MIN_10_EXP. */ - ASSERT (DBL_MIN_10_EXP == - (int) (- (DBL_MIN_EXP - 1) * 0.30103)); - - /* Check the value of DBL_DIG. */ - ASSERT (DBL_DIG == (int) ((DBL_MANT_DIG - 1) * 0.30103)); - - /* Check the value of DBL_MIN_10_EXP. */ - ASSERT (DBL_MIN_10_EXP == - (int) (- (DBL_MIN_EXP - 1) * 0.30103)); - - /* Check the value of DBL_MAX_10_EXP. */ - ASSERT (DBL_MAX_10_EXP == (int) (DBL_MAX_EXP * 0.30103)); - - /* Check the value of DBL_MAX. */ - { - volatile double m = DBL_MAX; - int n; - - ASSERT (m + m > m); - for (n = 0; n <= 2 * DBL_MANT_DIG; n++) - { - volatile double pow2_n = pow2d (n); /* 2^n */ - volatile double x = m + (m / pow2_n); - if (x > m) - ASSERT (x + x == x); - else - ASSERT (!(x + x == x)); - } - } - - /* Check the value of DBL_MIN. */ - { - volatile double m = DBL_MIN; - volatile double x = pow2d (DBL_MIN_EXP - 1); - ASSERT (m == x); - } - - /* Check the value of DBL_EPSILON. */ - { - volatile double e = DBL_EPSILON; - volatile double me; - int n; - - me = 1.0 + e; - ASSERT (me > 1.0); - ASSERT (me - 1.0 == e); - for (n = 0; n <= 2 * DBL_MANT_DIG; n++) - { - volatile double half_n = pow2d (- n); /* 2^-n */ - volatile double x = me - half_n; - if (x < me) - ASSERT (x <= 1.0); - } - } -} - -/* -------------------- Check macros for 'long double' -------------------- */ - -/* Check that the LDBL_* macros expand to constant expressions. */ -int lb[] = - { - LDBL_MANT_DIG, LDBL_MIN_EXP, LDBL_MAX_EXP, - LDBL_DIG, LDBL_MIN_10_EXP, LDBL_MAX_10_EXP - }; -long double lc1 = LDBL_EPSILON; -long double lc2 = LDBL_MIN; -#if 0 /* LDBL_MAX is not a constant expression on some platforms. */ -long double lc3 = LDBL_MAX; -#endif - -static void -test_long_double (void) -{ - /* Check that the value of LDBL_MIN_EXP is well parenthesized. */ - ASSERT ((LDBL_MIN_EXP % 101111) == (LDBL_MIN_EXP) % 101111); - - /* Check that the value of LDBL_MIN_10_EXP is well parenthesized. */ - ASSERT ((LDBL_MIN_10_EXP % 101111) == (LDBL_MIN_10_EXP) % 101111); - - /* Check that 'long double' is at least as wide as 'double'. */ - ASSERT (LDBL_MANT_DIG >= DBL_MANT_DIG); - ASSERT (LDBL_MIN_EXP - LDBL_MANT_DIG <= DBL_MIN_EXP - DBL_MANT_DIG); - ASSERT (LDBL_MAX_EXP >= DBL_MAX_EXP); - - /* Check the value of LDBL_DIG. */ - ASSERT (LDBL_DIG == (int)((LDBL_MANT_DIG - 1) * 0.30103)); - - /* Check the value of LDBL_MIN_10_EXP. */ - ASSERT (LDBL_MIN_10_EXP == - (int) (- (LDBL_MIN_EXP - 1) * 0.30103)); - - /* Check the value of LDBL_MAX_10_EXP. */ - ASSERT (LDBL_MAX_10_EXP == (int) (LDBL_MAX_EXP * 0.30103)); - - /* Check the value of LDBL_MAX. */ - { - volatile long double m = LDBL_MAX; - int n; - - ASSERT (m + m > m); - for (n = 0; n <= 2 * LDBL_MANT_DIG; n++) - { - volatile long double pow2_n = pow2l (n); /* 2^n */ - volatile long double x = m + (m / pow2_n); - if (x > m) - ASSERT (x + x == x); - else - ASSERT (!(x + x == x)); - } - } - - /* Check the value of LDBL_MIN. */ - { - volatile long double m = LDBL_MIN; - volatile long double x = pow2l (LDBL_MIN_EXP - 1); - ASSERT (m == x); - } - - /* Check the value of LDBL_EPSILON. */ - { - volatile long double e = LDBL_EPSILON; - volatile long double me; - int n; - - me = 1.0L + e; - ASSERT (me > 1.0L); - ASSERT (me - 1.0L == e); - for (n = 0; n <= 2 * LDBL_MANT_DIG; n++) - { - volatile long double half_n = pow2l (- n); /* 2^-n */ - volatile long double x = me - half_n; - if (x < me) - ASSERT (x <= 1.0L); - } - } -} - -int -main () -{ - test_float (); - test_double (); - - { - DECL_LONG_DOUBLE_ROUNDING - - BEGIN_LONG_DOUBLE_ROUNDING (); - - test_long_double (); - - END_LONG_DOUBLE_ROUNDING (); - } - - return 0; -} - -#else - -int -main () -{ - return 77; -} - -#endif diff --git a/gl/tests/test-fputc.c b/gl/tests/test-fputc.c deleted file mode 100644 index 95a1cb6014..0000000000 --- a/gl/tests/test-fputc.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Test of fputc() function. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (fputc, int, (int, FILE *)); - -#include -#include -#include - -#include "msvc-inval.h" - -#include "macros.h" - -int -main (int argc, char **argv) -{ - const char *filename = "test-fputc.txt"; - - /* We don't have an fputc() function that installs an invalid parameter - handler so far. So install that handler here, explicitly. */ -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ - && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING - gl_msvc_inval_ensure_handler (); -#endif - - /* Test that fputc() on an unbuffered stream sets errno if someone else - closes the stream fd behind the back of stdio. */ - { - FILE *fp = fopen (filename, "w"); - ASSERT (fp != NULL); - setvbuf (fp, NULL, _IONBF, 0); - ASSERT (close (fileno (fp)) == 0); - errno = 0; - ASSERT (fputc ('x', fp) == EOF); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - - /* Test that fputc() on an unbuffered stream sets errno if the stream - was constructed with an invalid file descriptor. */ - { - FILE *fp = fdopen (-1, "w"); - if (fp != NULL) - { - setvbuf (fp, NULL, _IONBF, 0); - errno = 0; - ASSERT (fputc ('x', fp) == EOF); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - } - { - FILE *fp; - close (99); - fp = fdopen (99, "w"); - if (fp != NULL) - { - setvbuf (fp, NULL, _IONBF, 0); - errno = 0; - ASSERT (fputc ('x', fp) == EOF); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - } - - /* Clean up. */ - unlink (filename); - - return 0; -} diff --git a/gl/tests/test-fread.c b/gl/tests/test-fread.c deleted file mode 100644 index b9fc72afa1..0000000000 --- a/gl/tests/test-fread.c +++ /dev/null @@ -1,100 +0,0 @@ -/* Test of fread() function. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (fread, size_t, (void *, size_t, size_t, FILE *)); - -#include -#include -#include - -#include "msvc-inval.h" - -#include "macros.h" - -int -main (int argc, char **argv) -{ - const char *filename = "test-fread.txt"; - - /* We don't have an fread() function that installs an invalid parameter - handler so far. So install that handler here, explicitly. */ -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ - && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING - gl_msvc_inval_ensure_handler (); -#endif - - /* Prepare a file. */ - { - const char text[] = "hello world"; - int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0600); - ASSERT (fd >= 0); - ASSERT (write (fd, text, sizeof (text)) == sizeof (text)); - ASSERT (close (fd) == 0); - } - - /* Test that fread() sets errno if someone else closes the stream - fd behind the back of stdio. */ - { - FILE *fp = fopen (filename, "r"); - char buf[5]; - ASSERT (fp != NULL); - ASSERT (close (fileno (fp)) == 0); - errno = 0; - ASSERT (fread (buf, 1, sizeof (buf), fp) == 0); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - - /* Test that fread() sets errno if the stream was constructed with - an invalid file descriptor. */ - { - FILE *fp = fdopen (-1, "r"); - if (fp != NULL) - { - char buf[1]; - errno = 0; - ASSERT (fread (buf, 1, 1, fp) == 0); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - } - { - FILE *fp; - close (99); - fp = fdopen (99, "r"); - if (fp != NULL) - { - char buf[1]; - errno = 0; - ASSERT (fread (buf, 1, 1, fp) == 0); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - } - - /* Clean up. */ - unlink (filename); - - return 0; -} diff --git a/gl/tests/test-fstat.c b/gl/tests/test-fstat.c deleted file mode 100644 index c9ac749db8..0000000000 --- a/gl/tests/test-fstat.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Tests of fstat() function. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (fstat, int, (int, struct stat *)); - -#include -#include - -#include "macros.h" - -int -main (int argc, char *argv[]) -{ - /* Test behaviour for invalid file descriptors. */ - { - struct stat statbuf; - - errno = 0; - ASSERT (fstat (-1, &statbuf) == -1); - ASSERT (errno == EBADF); - } - { - struct stat statbuf; - - close (99); - errno = 0; - ASSERT (fstat (99, &statbuf) == -1); - ASSERT (errno == EBADF); - } - - return 0; -} diff --git a/gl/tests/test-ftell.c b/gl/tests/test-ftell.c deleted file mode 100644 index 9b523444eb..0000000000 --- a/gl/tests/test-ftell.c +++ /dev/null @@ -1,107 +0,0 @@ -/* Test of ftell() function. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -/* None of the files accessed by this test are large, so disable the - fseek link warning if we are not using the gnulib fseek module. */ -#define _GL_NO_LARGE_FILES -#include - -#include "signature.h" -SIGNATURE_CHECK (ftell, long, (FILE *)); - -#include "binary-io.h" -#include "macros.h" - -#ifndef FUNC_UNGETC_BROKEN -# define FUNC_UNGETC_BROKEN 0 -#endif - -int -main (int argc, char **argv) -{ - int ch; - /* Assume stdin is seekable iff argc > 1. */ - if (argc == 1) - { - ASSERT (ftell (stdin) == -1); - return 0; - } - - /* mingw ftell is unreliable on text mode input. */ - SET_BINARY (0); - - /* Simple tests. */ - ASSERT (ftell (stdin) == 0); - - ch = fgetc (stdin); - ASSERT (ch == '#'); - ASSERT (ftell (stdin) == 1); - - /* Test ftell after ungetc of read input. */ - ch = ungetc ('#', stdin); - ASSERT (ch == '#'); - ASSERT (ftell (stdin) == 0); - - ch = fgetc (stdin); - ASSERT (ch == '#'); - ASSERT (ftell (stdin) == 1); - - /* Test ftell after fseek. */ - ASSERT (fseek (stdin, 2, SEEK_SET) == 0); - ASSERT (ftell (stdin) == 2); - - /* Test ftell after random ungetc. */ - ch = fgetc (stdin); - ASSERT (ch == '/'); - ch = ungetc ('@', stdin); - ASSERT (ch == '@'); - ASSERT (ftell (stdin) == 2); - - ch = fgetc (stdin); - ASSERT (ch == '@'); - ASSERT (ftell (stdin) == 3); - - if (2 < argc) - { - if (FUNC_UNGETC_BROKEN) - { - fputs ("Skipping test: ungetc cannot handle arbitrary bytes\n", - stderr); - return 77; - } - /* Test ftell after ungetc without read. */ - ASSERT (fseek (stdin, 0, SEEK_CUR) == 0); - ASSERT (ftell (stdin) == 3); - - ch = ungetc ('~', stdin); - ASSERT (ch == '~'); - ASSERT (ftell (stdin) == 2); - } - -#if !defined __MINT__ /* FreeMiNT has problems seeking past end of file */ - /* Test ftell beyond end of file. */ - ASSERT (fseek (stdin, 0, SEEK_END) == 0); - ch = ftell (stdin); - ASSERT (fseek (stdin, 10, SEEK_END) == 0); - ASSERT (ftell (stdin) == ch + 10); -#endif - - return 0; -} diff --git a/gl/tests/test-ftell.sh b/gl/tests/test-ftell.sh deleted file mode 100755 index bf55d2e997..0000000000 --- a/gl/tests/test-ftell.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -./test-ftell${EXEEXT} 1 < "$srcdir/test-ftell.sh" || exit 1 -echo hi | ./test-ftell${EXEEXT} || exit 1 -exit 0 diff --git a/gl/tests/test-ftell2.sh b/gl/tests/test-ftell2.sh deleted file mode 100755 index 3b645b8318..0000000000 --- a/gl/tests/test-ftell2.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -exec ./test-ftell${EXEEXT} 1 2 < "$srcdir/test-ftell2.sh" diff --git a/gl/tests/test-ftell3.c b/gl/tests/test-ftell3.c deleted file mode 100644 index 695e5b2dc7..0000000000 --- a/gl/tests/test-ftell3.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Test of ftell() function. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* None of the files accessed by this test are large, so disable the - fseek link warning if we are not using the gnulib fseek module. */ -#define _GL_NO_LARGE_FILES -#include - -#include - -#include "macros.h" - -#define TESTFILE "t-ftell3.tmp" - -int -main (void) -{ - FILE *fp; - - /* Create a file with some contents. */ - fp = fopen (TESTFILE, "w"); - if (fp == NULL) - goto skip; - if (fwrite ("foogarsh", 1, 8, fp) < 8) - goto skip; - if (fclose (fp)) - goto skip; - - /* The file's contents is now "foogarsh". */ - - /* Try writing after reading to EOF. */ - fp = fopen (TESTFILE, "r+"); - if (fp == NULL) - goto skip; - if (fseek (fp, -1, SEEK_END)) - goto skip; - ASSERT (getc (fp) == 'h'); - ASSERT (getc (fp) == EOF); - ASSERT (ftell (fp) == 8); - ASSERT (ftell (fp) == 8); - ASSERT (putc ('!', fp) == '!'); - ASSERT (ftell (fp) == 9); - ASSERT (fclose (fp) == 0); - fp = fopen (TESTFILE, "r"); - if (fp == NULL) - goto skip; - { - char buf[10]; - ASSERT (fread (buf, 1, 10, fp) == 9); - ASSERT (memcmp (buf, "foogarsh!", 9) == 0); - } - ASSERT (fclose (fp) == 0); - - /* The file's contents is now "foogarsh!". */ - - remove (TESTFILE); - return 0; - - skip: - fprintf (stderr, "Skipping test: prerequisite file operations failed.\n"); - remove (TESTFILE); - return 77; -} diff --git a/gl/tests/test-ftello.c b/gl/tests/test-ftello.c deleted file mode 100644 index 369d476518..0000000000 --- a/gl/tests/test-ftello.c +++ /dev/null @@ -1,118 +0,0 @@ -/* Test of ftello() function. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -/* None of the files accessed by this test are large, so disable the - fseek link warning if we are not using the gnulib fseek module. */ -#define _GL_NO_LARGE_FILES -#include - -#include "signature.h" -SIGNATURE_CHECK (ftello, off_t, (FILE *)); - -#include "binary-io.h" -#include "macros.h" - -#ifndef FUNC_UNGETC_BROKEN -# define FUNC_UNGETC_BROKEN 0 -#endif - -int -main (int argc, char **argv _GL_UNUSED) -{ - int ch; - /* Assume stdin is seekable iff argc > 1. */ - if (argc == 1) - { - ASSERT (ftell (stdin) == -1); - ASSERT (ftello (stdin) == -1); - return 0; - } - - /* mingw ftell is unreliable on text mode input. */ - SET_BINARY (0); - - /* Simple tests. For each test, make sure ftell and ftello agree. */ - ASSERT (ftell (stdin) == 0); - ASSERT (ftello (stdin) == 0); - - ch = fgetc (stdin); - ASSERT (ch == '#'); - ASSERT (ftell (stdin) == 1); - ASSERT (ftello (stdin) == 1); - - /* Test ftell after ungetc of read input. */ - ch = ungetc ('#', stdin); - ASSERT (ch == '#'); - ASSERT (ftell (stdin) == 0); - ASSERT (ftello (stdin) == 0); - - ch = fgetc (stdin); - ASSERT (ch == '#'); - ASSERT (ftell (stdin) == 1); - ASSERT (ftello (stdin) == 1); - - /* Test ftell after fseek. */ - ASSERT (fseek (stdin, 2, SEEK_SET) == 0); - ASSERT (ftell (stdin) == 2); - ASSERT (ftello (stdin) == 2); - - /* Test ftell after random ungetc. */ - ch = fgetc (stdin); - ASSERT (ch == '/'); - ch = ungetc ('@', stdin); - ASSERT (ch == '@'); - ASSERT (ftell (stdin) == 2); - ASSERT (ftello (stdin) == 2); - - ch = fgetc (stdin); - ASSERT (ch == '@'); - ASSERT (ftell (stdin) == 3); - ASSERT (ftello (stdin) == 3); - - if (2 < argc) - { - if (FUNC_UNGETC_BROKEN) - { - fputs ("Skipping test: ungetc cannot handle arbitrary bytes\n", - stderr); - return 77; - } - /* Test ftell after ungetc without read. */ - ASSERT (fseek (stdin, 0, SEEK_CUR) == 0); - ASSERT (ftell (stdin) == 3); - ASSERT (ftello (stdin) == 3); - - ch = ungetc ('~', stdin); - ASSERT (ch == '~'); - ASSERT (ftell (stdin) == 2); - ASSERT (ftello (stdin) == 2); - } - -#if !defined __MINT__ /* FreeMiNT has problems seeking past end of file */ - /* Test ftell beyond end of file. */ - ASSERT (fseek (stdin, 0, SEEK_END) == 0); - ch = ftello (stdin); - ASSERT (fseek (stdin, 10, SEEK_END) == 0); - ASSERT (ftell (stdin) == ch + 10); - ASSERT (ftello (stdin) == ch + 10); -#endif - - return 0; -} diff --git a/gl/tests/test-ftello.sh b/gl/tests/test-ftello.sh deleted file mode 100755 index 33d2e838db..0000000000 --- a/gl/tests/test-ftello.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -./test-ftello${EXEEXT} 1 < "$srcdir/test-ftello.sh" || exit 1 -echo hi | ./test-ftello${EXEEXT} || exit 1 -exit 0 diff --git a/gl/tests/test-ftello2.sh b/gl/tests/test-ftello2.sh deleted file mode 100755 index ba750b003d..0000000000 --- a/gl/tests/test-ftello2.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -exec ./test-ftello${EXEEXT} 1 2 < "$srcdir/test-ftello2.sh" diff --git a/gl/tests/test-ftello3.c b/gl/tests/test-ftello3.c deleted file mode 100644 index f75ce03432..0000000000 --- a/gl/tests/test-ftello3.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Test of ftello() function. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* None of the files accessed by this test are large, so disable the - fseek link warning if we are not using the gnulib fseek module. */ -#define _GL_NO_LARGE_FILES -#include - -#include - -#include "macros.h" - -#define TESTFILE "t-ftello3.tmp" - -int -main (void) -{ - FILE *fp; - - /* Create a file with some contents. */ - fp = fopen (TESTFILE, "w"); - if (fp == NULL) - goto skip; - if (fwrite ("foogarsh", 1, 8, fp) < 8) - goto skip; - if (fclose (fp)) - goto skip; - - /* The file's contents is now "foogarsh". */ - - /* Try writing after reading to EOF. */ - fp = fopen (TESTFILE, "r+"); - if (fp == NULL) - goto skip; - if (fseek (fp, -1, SEEK_END)) - goto skip; - ASSERT (getc (fp) == 'h'); - ASSERT (getc (fp) == EOF); - ASSERT (ftello (fp) == 8); - ASSERT (ftello (fp) == 8); - ASSERT (putc ('!', fp) == '!'); - ASSERT (ftello (fp) == 9); - ASSERT (fclose (fp) == 0); - fp = fopen (TESTFILE, "r"); - if (fp == NULL) - goto skip; - { - char buf[10]; - ASSERT (fread (buf, 1, 10, fp) == 9); - ASSERT (memcmp (buf, "foogarsh!", 9) == 0); - } - ASSERT (fclose (fp) == 0); - - /* The file's contents is now "foogarsh!". */ - - remove (TESTFILE); - return 0; - - skip: - fprintf (stderr, "Skipping test: prerequisite file operations failed.\n"); - remove (TESTFILE); - return 77; -} diff --git a/gl/tests/test-ftello4.c b/gl/tests/test-ftello4.c deleted file mode 100644 index 1f94ef67d8..0000000000 --- a/gl/tests/test-ftello4.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Test of ftello() function. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -#include - -#include -#include - -#include "macros.h" - -int -main (int argc, char **argv) -{ - const char *filename = argv[1]; - - /* Test that ftello() sets errno if someone else closes the stream - fd behind the back of stdio. */ - { - FILE *fp = fopen (filename, "r"); - ASSERT (fp != NULL); - setvbuf (fp, NULL, _IONBF, 0); - ASSERT (close (fileno (fp)) == 0); - errno = 0; - ASSERT (ftello (fp) == (off_t)-1); - ASSERT (errno == EBADF); - fclose (fp); - } - - /* Test that ftello() sets errno if the stream was constructed with - an invalid file descriptor. */ - { - FILE *fp = fdopen (-1, "w"); - if (fp != NULL) - { - errno = 0; - ASSERT (ftello (fp) == (off_t)-1); - ASSERT (errno == EBADF); - fclose (fp); - } - } - { - FILE *fp; - close (99); - fp = fdopen (99, "w"); - if (fp != NULL) - { - errno = 0; - ASSERT (ftello (fp) == (off_t)-1); - ASSERT (errno == EBADF); - fclose (fp); - } - } - - return 0; -} diff --git a/gl/tests/test-ftello4.sh b/gl/tests/test-ftello4.sh deleted file mode 100755 index e3702bb605..0000000000 --- a/gl/tests/test-ftello4.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -./test-ftello4${EXEEXT} "$srcdir/test-ftello4.sh" || exit 1 - -exit 0 diff --git a/gl/tests/test-func.c b/gl/tests/test-func.c deleted file mode 100644 index 54e3328d35..0000000000 --- a/gl/tests/test-func.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Test whether __func__ is available - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2008. */ - -#include - -#include - -#include "macros.h" - -int -main () -{ - ASSERT (strlen (__func__) > 0); - - /* On SunPRO C 5.9, sizeof __func__ evaluates to 0. The compiler warns: - "warning: null dimension: sizeof()". */ -#if !defined __SUNPRO_C - ASSERT (strlen (__func__) + 1 == sizeof __func__); -#endif - - ASSERT (strcmp (__func__, "main") == 0 - || strcmp (__func__, "") == 0); - - return 0; -} diff --git a/gl/tests/test-fwrite.c b/gl/tests/test-fwrite.c deleted file mode 100644 index bc285f3017..0000000000 --- a/gl/tests/test-fwrite.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Test of fwrite() function. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (fwrite, size_t, (const void *, size_t, size_t, FILE *)); - -#include -#include -#include - -#include "msvc-inval.h" - -#include "macros.h" - -int -main (int argc, char **argv) -{ - const char *filename = "test-fwrite.txt"; - - /* We don't have an fwrite() function that installs an invalid parameter - handler so far. So install that handler here, explicitly. */ -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ - && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING - gl_msvc_inval_ensure_handler (); -#endif - - /* Test that fwrite() on an unbuffered stream sets errno if someone else - closes the stream fd behind the back of stdio. */ - { - FILE *fp = fopen (filename, "w"); - char buf[5] = "world"; - ASSERT (fp != NULL); - setvbuf (fp, NULL, _IONBF, 0); - ASSERT (close (fileno (fp)) == 0); - errno = 0; - ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - - /* Test that fwrite() on an unbuffered stream sets errno if the stream - was constructed with an invalid file descriptor. */ - { - FILE *fp = fdopen (-1, "w"); - if (fp != NULL) - { - char buf[5] = "world"; - setvbuf (fp, NULL, _IONBF, 0); - errno = 0; - ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - } - { - FILE *fp; - close (99); - fp = fdopen (99, "w"); - if (fp != NULL) - { - char buf[5] = "world"; - setvbuf (fp, NULL, _IONBF, 0); - errno = 0; - ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); - ASSERT (errno == EBADF); - ASSERT (ferror (fp)); - fclose (fp); - } - } - - /* Clean up. */ - unlink (filename); - - return 0; -} diff --git a/gl/tests/test-getdelim.c b/gl/tests/test-getdelim.c deleted file mode 100644 index 0770d5b3aa..0000000000 --- a/gl/tests/test-getdelim.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Test of getdelim() function. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Written by Eric Blake , 2007. */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (getdelim, ssize_t, (char **, size_t *, int, FILE *)); - -#include -#include - -#include "macros.h" - -int -main (void) -{ - FILE *f; - char *line; - size_t len; - ssize_t result; - - /* Create test file. */ - f = fopen ("test-getdelim.txt", "wb"); - if (!f || fwrite ("anAnbcnd\0f", 1, 10, f) != 10 || fclose (f) != 0) - { - fputs ("Failed to create sample file.\n", stderr); - remove ("test-getdelim.txt"); - return 1; - } - f = fopen ("test-getdelim.txt", "rb"); - if (!f) - { - fputs ("Failed to reopen sample file.\n", stderr); - remove ("test-getdelim.txt"); - return 1; - } - - /* Test initial allocation, which must include trailing NUL. */ - line = NULL; - len = 0; - result = getdelim (&line, &len, 'n', f); - ASSERT (result == 2); - ASSERT (strcmp (line, "an") == 0); - ASSERT (2 < len); - free (line); - - /* Test initial allocation again, with line = NULL and len != 0. */ - line = NULL; - len = (size_t)(~0) / 4; - result = getdelim (&line, &len, 'n', f); - ASSERT (result == 2); - ASSERT (strcmp (line, "An") == 0); - ASSERT (2 < len); - free (line); - - /* Test growth of buffer. */ - line = malloc (1); - len = 1; - result = getdelim (&line, &len, 'n', f); - ASSERT (result == 3); - ASSERT (strcmp (line, "bcn") == 0); - ASSERT (3 < len); - - /* Test embedded NULs and EOF behavior. */ - result = getdelim (&line, &len, 'n', f); - ASSERT (result == 3); - ASSERT (memcmp (line, "d\0f", 4) == 0); - ASSERT (3 < len); - - result = getdelim (&line, &len, 'n', f); - ASSERT (result == -1); - - free (line); - fclose (f); - remove ("test-getdelim.txt"); - return 0; -} diff --git a/gl/tests/test-getline.c b/gl/tests/test-getline.c deleted file mode 100644 index 13dcb1d7f8..0000000000 --- a/gl/tests/test-getline.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Test of getline() function. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Written by Eric Blake , 2007. */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (getline, ssize_t, (char **, size_t *, FILE *)); - -#include -#include - -#include "macros.h" - -int -main (void) -{ - FILE *f; - char *line; - size_t len; - ssize_t result; - - /* Create test file. */ - f = fopen ("test-getline.txt", "wb"); - if (!f || fwrite ("a\nA\nbc\nd\0f", 1, 10, f) != 10 || fclose (f) != 0) - { - fputs ("Failed to create sample file.\n", stderr); - remove ("test-getline.txt"); - return 1; - } - f = fopen ("test-getline.txt", "rb"); - if (!f) - { - fputs ("Failed to reopen sample file.\n", stderr); - remove ("test-getline.txt"); - return 1; - } - - /* Test initial allocation, which must include trailing NUL. */ - line = NULL; - len = 0; - result = getline (&line, &len, f); - ASSERT (result == 2); - ASSERT (strcmp (line, "a\n") == 0); - ASSERT (2 < len); - free (line); - - /* Test initial allocation again, with line = NULL and len != 0. */ - line = NULL; - len = (size_t)(~0) / 4; - result = getline (&line, &len, f); - ASSERT (result == 2); - ASSERT (strcmp (line, "A\n") == 0); - ASSERT (2 < len); - free (line); - - /* Test growth of buffer, must not leak. */ - len = 1; - line = malloc (len); - result = getline (&line, &len, f); - ASSERT (result == 3); - ASSERT (strcmp (line, "bc\n") == 0); - ASSERT (3 < len); - - /* Test embedded NULs and EOF behavior. */ - result = getline (&line, &len, f); - ASSERT (result == 3); - ASSERT (memcmp (line, "d\0f", 4) == 0); - ASSERT (3 < len); - - result = getline (&line, &len, f); - ASSERT (result == -1); - - free (line); - fclose (f); - remove ("test-getline.txt"); - return 0; -} diff --git a/gl/tests/test-gettimeofday.c b/gl/tests/test-gettimeofday.c deleted file mode 100644 index 7a44d71fa4..0000000000 --- a/gl/tests/test-gettimeofday.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2005, 2007, 2009-2016 Free Software Foundation, Inc. - * Written by Jim Meyering. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (gettimeofday, int, - (struct timeval *, GETTIMEOFDAY_TIMEZONE *)); - -#include - -#include -#include - -int -main (void) -{ - time_t t = 0; - struct tm *lt; - struct tm saved_lt; - struct timeval tv; - lt = localtime (&t); - saved_lt = *lt; - gettimeofday (&tv, NULL); - if (memcmp (lt, &saved_lt, sizeof (struct tm)) != 0) - { - fprintf (stderr, "gettimeofday still clobbers the localtime buffer!\n"); - return 1; - } - return 0; -} diff --git a/gl/tests/test-init.sh b/gl/tests/test-init.sh deleted file mode 100755 index a6278599ad..0000000000 --- a/gl/tests/test-init.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/sh -# Unit tests for init.sh -# Copyright (C) 2011-2016 Free Software Foundation, Inc. -# This file is part of the GNUlib Library. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . */ - -: ${srcdir=.} -. "$srcdir/init.sh"; path_prepend_ . - -fail=0 - -test_compare() -{ - touch empty || fail=1 - echo xyz > in || fail=1 - - compare /dev/null /dev/null >out 2>err || fail=1 - test -s out && fail_ "out not empty: $(cat out)" - # "err" should be empty, too, but has "set -x" output when VERBOSE=yes - case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac - - compare /dev/null empty >out 2>err || fail=1 - test -s out && fail_ "out not empty: $(cat out)" - case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac - - compare in in >out 2>err || fail=1 - test -s out && fail_ "out not empty: $(cat out)" - case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac - - compare /dev/null in >out 2>err && fail=1 - cat <<\EOF > exp -diff -u /dev/null in ---- /dev/null 1970-01-01 -+++ in 1970-01-01 -+xyz -EOF - compare exp out || fail=1 - case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac - - compare empty in >out 2>err && fail=1 - # Compare against expected output only if compare is using diff -u. - if grep @ out >/dev/null; then - # Remove the TAB-date suffix on each --- and +++ line, - # for both the expected and the actual output files. - # Also remove the @@ line, since Solaris 5.10 and GNU diff formats differ: - # -@@ -0,0 +1 @@ - # +@@ -1,0 +1,1 @@ - # Also, remove space after leading '+', since AIX 7.1 diff outputs a space. - sed 's/ .*//;/^@@/d;s/^+ /+/' out > k && mv k out - cat <<\EOF > exp ---- empty -+++ in -+xyz -EOF - compare exp out || fail=1 - fi - case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac -} - -test_compare - -Exit $fail diff --git a/gl/tests/test-intprops.c b/gl/tests/test-intprops.c deleted file mode 100644 index 0a8ddcd748..0000000000 --- a/gl/tests/test-intprops.c +++ /dev/null @@ -1,370 +0,0 @@ -/* Test intprops.h. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paul Eggert. */ - -/* Tell gcc not to warn about the long expressions that the overflow - macros expand to, or about the (X < 0) expressions. */ -#if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) -# pragma GCC diagnostic ignored "-Woverlength-strings" -# pragma GCC diagnostic ignored "-Wtype-limits" - -/* Work around a bug in GCC 6.1 and earlier; see: - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68971 */ -# pragma GCC diagnostic ignored "-Woverflow" - -#endif - -#include - -#include "intprops.h" -#include "verify.h" - -#include -#include -#include - -#include "macros.h" - -/* VERIFY (X) uses a static assertion for compilers that are known to work, - and falls back on a dynamic assertion for other compilers. - These tests should be checkable via 'verify' rather than 'ASSERT', but - using 'verify' would run into a bug with HP-UX 11.23 cc; see - . */ -#if __GNUC__ || __SUNPRO_C -# define VERIFY(x) do { verify (x); } while (0) -#else -# define VERIFY(x) ASSERT (x) -#endif - -#define DONTCARE __LINE__ - -int -main (void) -{ - /* Use VERIFY for tests that must be integer constant expressions, - ASSERT otherwise. */ - - /* TYPE_IS_INTEGER. */ - ASSERT (TYPE_IS_INTEGER (bool)); - ASSERT (TYPE_IS_INTEGER (char)); - ASSERT (TYPE_IS_INTEGER (signed char)); - ASSERT (TYPE_IS_INTEGER (unsigned char)); - ASSERT (TYPE_IS_INTEGER (short int)); - ASSERT (TYPE_IS_INTEGER (unsigned short int)); - ASSERT (TYPE_IS_INTEGER (int)); - ASSERT (TYPE_IS_INTEGER (unsigned int)); - ASSERT (TYPE_IS_INTEGER (long int)); - ASSERT (TYPE_IS_INTEGER (unsigned long int)); - ASSERT (TYPE_IS_INTEGER (intmax_t)); - ASSERT (TYPE_IS_INTEGER (uintmax_t)); - ASSERT (! TYPE_IS_INTEGER (float)); - ASSERT (! TYPE_IS_INTEGER (double)); - ASSERT (! TYPE_IS_INTEGER (long double)); - - /* TYPE_SIGNED. */ - /* VERIFY (! TYPE_SIGNED (bool)); // not guaranteed by gnulib substitute */ - VERIFY (TYPE_SIGNED (signed char)); - VERIFY (! TYPE_SIGNED (unsigned char)); - VERIFY (TYPE_SIGNED (short int)); - VERIFY (! TYPE_SIGNED (unsigned short int)); - VERIFY (TYPE_SIGNED (int)); - VERIFY (! TYPE_SIGNED (unsigned int)); - VERIFY (TYPE_SIGNED (long int)); - VERIFY (! TYPE_SIGNED (unsigned long int)); - VERIFY (TYPE_SIGNED (intmax_t)); - VERIFY (! TYPE_SIGNED (uintmax_t)); - ASSERT (TYPE_SIGNED (float)); - ASSERT (TYPE_SIGNED (double)); - ASSERT (TYPE_SIGNED (long double)); - - /* Integer representation. Check that it is two's complement. */ - VERIFY (INT_MIN + INT_MAX < 0); - - /* TYPE_MINIMUM, TYPE_MAXIMUM. */ - VERIFY (TYPE_MINIMUM (char) == CHAR_MIN); - VERIFY (TYPE_MAXIMUM (char) == CHAR_MAX); - VERIFY (TYPE_MINIMUM (unsigned char) == 0); - VERIFY (TYPE_MAXIMUM (unsigned char) == UCHAR_MAX); - VERIFY (TYPE_MINIMUM (signed char) == SCHAR_MIN); - VERIFY (TYPE_MAXIMUM (signed char) == SCHAR_MAX); - VERIFY (TYPE_MINIMUM (short int) == SHRT_MIN); - VERIFY (TYPE_MAXIMUM (short int) == SHRT_MAX); - VERIFY (TYPE_MINIMUM (unsigned short int) == 0); - VERIFY (TYPE_MAXIMUM (unsigned short int) == USHRT_MAX); - VERIFY (TYPE_MINIMUM (int) == INT_MIN); - VERIFY (TYPE_MAXIMUM (int) == INT_MAX); - VERIFY (TYPE_MINIMUM (unsigned int) == 0); - VERIFY (TYPE_MAXIMUM (unsigned int) == UINT_MAX); - VERIFY (TYPE_MINIMUM (long int) == LONG_MIN); - VERIFY (TYPE_MAXIMUM (long int) == LONG_MAX); - VERIFY (TYPE_MINIMUM (unsigned long int) == 0); - VERIFY (TYPE_MAXIMUM (unsigned long int) == ULONG_MAX); - VERIFY (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); - VERIFY (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); - VERIFY (TYPE_MINIMUM (uintmax_t) == 0); - VERIFY (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); - - /* INT_BITS_STRLEN_BOUND. */ - VERIFY (INT_BITS_STRLEN_BOUND (1) == 1); - VERIFY (INT_BITS_STRLEN_BOUND (2620) == 789); - - /* INT_STRLEN_BOUND, INT_BUFSIZE_BOUND. */ - #ifdef INT32_MAX /* POSIX guarantees int32_t; this ports to non-POSIX. */ - VERIFY (INT_STRLEN_BOUND (int32_t) == sizeof ("-2147483648") - 1); - VERIFY (INT_BUFSIZE_BOUND (int32_t) == sizeof ("-2147483648")); - #endif - #ifdef INT64_MAX - VERIFY (INT_STRLEN_BOUND (int64_t) == sizeof ("-9223372036854775808") - 1); - VERIFY (INT_BUFSIZE_BOUND (int64_t) == sizeof ("-9223372036854775808")); - #endif - - /* All the INT__RANGE_OVERFLOW tests are equally valid as - INT__OVERFLOW tests, so define macros to do both. OP is the - operation, OPNAME its symbolic name, A and B its operands, T the - result type, V the overflow flag, and VRES the result if V and if - two's complement. CHECK_BINOP is for most binary operatinos, - CHECK_SBINOP for binary +, -, * when the result type is signed, - and CHECK_UNOP for unary operations. */ - #define CHECK_BINOP(op, opname, a, b, t, v, vres) \ - VERIFY (INT_##opname##_RANGE_OVERFLOW (a, b, TYPE_MINIMUM (t), \ - TYPE_MAXIMUM (t)) \ - == (v)); \ - VERIFY (INT_##opname##_OVERFLOW (a, b) == (v)) - #define CHECK_SBINOP(op, opname, a, b, t, v, vres) \ - CHECK_BINOP(op, opname, a, b, t, v, vres); \ - { \ - t result; \ - ASSERT (INT_##opname##_WRAPV (a, b, &result) == (v)); \ - ASSERT (result == ((v) ? (vres) : ((a) op (b)))); \ - } - #define CHECK_UNOP(op, opname, a, t, v) \ - VERIFY (INT_##opname##_RANGE_OVERFLOW (a, TYPE_MINIMUM (t), \ - TYPE_MAXIMUM (t)) \ - == (v)); \ - VERIFY (INT_##opname##_OVERFLOW (a) == (v)) - - /* INT__RANGE_OVERFLOW, INT__OVERFLOW. */ - VERIFY (INT_ADD_RANGE_OVERFLOW (INT_MAX, 1, INT_MIN, INT_MAX)); - VERIFY (INT_ADD_OVERFLOW (INT_MAX, 1)); - - CHECK_SBINOP (+, ADD, INT_MAX, 1, int, true, INT_MIN); - CHECK_SBINOP (+, ADD, INT_MAX, -1, int, false, INT_MAX - 1); - CHECK_SBINOP (+, ADD, INT_MIN, 1, int, false, INT_MIN + 1); - CHECK_SBINOP (+, ADD, INT_MIN, -1, int, true, INT_MAX); - CHECK_BINOP (+, ADD, UINT_MAX, 1u, unsigned int, true, 0u); - CHECK_BINOP (+, ADD, 0u, 1u, unsigned int, false, 1u); - - CHECK_SBINOP (-, SUBTRACT, INT_MAX, 1, int, false, INT_MAX - 1); - CHECK_SBINOP (-, SUBTRACT, INT_MAX, -1, int, true, INT_MIN); - CHECK_SBINOP (-, SUBTRACT, INT_MIN, 1, int, true, INT_MAX); - CHECK_SBINOP (-, SUBTRACT, INT_MIN, -1, int, false, INT_MIN - -1); - CHECK_BINOP (-, SUBTRACT, UINT_MAX, 1u, unsigned int, false, UINT_MAX - 1u); - CHECK_BINOP (-, SUBTRACT, 0u, 1u, unsigned int, true, 0u - 1u); - - CHECK_UNOP (-, NEGATE, INT_MIN, int, true); - CHECK_UNOP (-, NEGATE, 0, int, false); - CHECK_UNOP (-, NEGATE, INT_MAX, int, false); - CHECK_UNOP (-, NEGATE, 0u, unsigned int, false); - CHECK_UNOP (-, NEGATE, 1u, unsigned int, true); - CHECK_UNOP (-, NEGATE, UINT_MAX, unsigned int, true); - - CHECK_SBINOP (*, MULTIPLY, INT_MAX, INT_MAX, int, true, 1); - CHECK_SBINOP (*, MULTIPLY, INT_MAX, INT_MIN, int, true, INT_MIN); - CHECK_SBINOP (*, MULTIPLY, INT_MIN, INT_MAX, int, true, INT_MIN); - CHECK_SBINOP (*, MULTIPLY, INT_MIN, INT_MIN, int, true, 0); - CHECK_SBINOP (*, MULTIPLY, -1, INT_MIN, int, - INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); - CHECK_SBINOP (*, MULTIPLY, LONG_MIN / INT_MAX, (long int) INT_MAX, - long int, false, LONG_MIN - LONG_MIN % INT_MAX); - - CHECK_BINOP (/, DIVIDE, INT_MIN, -1, int, - INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); - CHECK_BINOP (/, DIVIDE, INT_MAX, 1, int, false, INT_MAX); - CHECK_BINOP (/, DIVIDE, (unsigned int) INT_MIN, -1u, unsigned int, - false, INT_MIN / -1u); - - CHECK_BINOP (%, REMAINDER, INT_MIN, -1, int, INT_NEGATE_OVERFLOW (INT_MIN), 0); - CHECK_BINOP (%, REMAINDER, INT_MAX, 1, int, false, 0); - CHECK_BINOP (%, REMAINDER, (unsigned int) INT_MIN, -1u, unsigned int, - false, INT_MIN % -1u); - - CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX, 1, unsigned int, true, UINT_MAX << 1); - CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX / 2 + 1, 1, unsigned int, true, - (UINT_MAX / 2 + 1) << 1); - CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX / 2, 1, unsigned int, false, - (UINT_MAX / 2) << 1); - - /* INT__OVERFLOW and INT__WRAPV with mixed types. */ - #define CHECK_SUM(a, b, t, v, vres) \ - CHECK_SUM1(a, b, t, v, vres); \ - CHECK_SUM1(b, a, t, v, vres) - #define CHECK_SSUM(a, b, t, v, vres) \ - CHECK_SSUM1(a, b, t, v, vres); \ - CHECK_SSUM1(b, a, t, v, vres) - #define CHECK_SUM1(a, b, t, v, vres) \ - VERIFY (INT_ADD_OVERFLOW (a, b) == (v)) - #define CHECK_SSUM1(a, b, t, v, vres) \ - CHECK_SUM1(a, b, t, v, vres); \ - { \ - t result; \ - ASSERT (INT_ADD_WRAPV (a, b, &result) == (v)); \ - ASSERT (result == ((v) ? (vres) : ((a) + (b)))); \ - } - CHECK_SSUM (-1, LONG_MIN, long int, true, LONG_MAX); - CHECK_SUM (-1, UINT_MAX, unsigned int, false, DONTCARE); - CHECK_SSUM (-1L, INT_MIN, long int, INT_MIN == LONG_MIN, - INT_MIN == LONG_MIN ? INT_MAX : DONTCARE); - CHECK_SUM (0u, -1, unsigned int, true, 0u + -1); - CHECK_SUM (0u, 0, unsigned int, false, DONTCARE); - CHECK_SUM (0u, 1, unsigned int, false, DONTCARE); - CHECK_SSUM (1, LONG_MAX, long int, true, LONG_MIN); - CHECK_SUM (1, UINT_MAX, unsigned int, true, 0u); - CHECK_SSUM (1L, INT_MAX, long int, INT_MAX == LONG_MAX, - INT_MAX == LONG_MAX ? INT_MIN : DONTCARE); - CHECK_SUM (1u, INT_MAX, unsigned int, INT_MAX == UINT_MAX, 1u + INT_MAX); - CHECK_SUM (1u, INT_MIN, unsigned int, true, 1u + INT_MIN); - { - long int result; - ASSERT (INT_ADD_WRAPV (1, INT_MAX, &result) == (INT_MAX == LONG_MAX)); - ASSERT (INT_ADD_WRAPV (-1, INT_MIN, &result) == (INT_MIN == LONG_MIN)); - } - - #define CHECK_DIFFERENCE(a, b, t, v, vres) \ - VERIFY (INT_SUBTRACT_OVERFLOW (a, b) == (v)) - #define CHECK_SDIFFERENCE(a, b, t, v, vres) \ - CHECK_DIFFERENCE(a, b, t, v, vres); \ - { \ - t result; \ - ASSERT (INT_SUBTRACT_WRAPV (a, b, &result) == (v)); \ - ASSERT (result == ((v) ? (vres) : ((a) - (b)))); \ - } - CHECK_DIFFERENCE (INT_MAX, 1u, unsigned int, UINT_MAX < INT_MAX - 1, - INT_MAX - 1u); - CHECK_DIFFERENCE (UINT_MAX, 1, unsigned int, false, UINT_MAX - 1); - CHECK_DIFFERENCE (0u, -1, unsigned int, false, 0u - -1); - CHECK_DIFFERENCE (UINT_MAX, -1, unsigned int, true, UINT_MAX - -1); - CHECK_DIFFERENCE (INT_MIN, 1u, unsigned int, true, INT_MIN - 1u); - CHECK_DIFFERENCE (-1, 0u, unsigned int, true, -1 - 0u); - CHECK_SDIFFERENCE (-1, INT_MIN, int, false, -1 - INT_MIN); - CHECK_SDIFFERENCE (-1, INT_MAX, int, false, -1 - INT_MAX); - CHECK_SDIFFERENCE (0, INT_MIN, int, INT_MIN < -INT_MAX, INT_MIN); - CHECK_SDIFFERENCE (0, INT_MAX, int, false, 0 - INT_MAX); - { - long int result; - ASSERT (INT_SUBTRACT_WRAPV (INT_MAX, -1, &result) == (INT_MAX == LONG_MAX)); - ASSERT (INT_SUBTRACT_WRAPV (INT_MIN, 1, &result) == (INT_MAX == LONG_MAX)); - } - - #define CHECK_PRODUCT(a, b, t, v, vres) \ - CHECK_PRODUCT1(a, b, t, v, vres); \ - CHECK_PRODUCT1(b, a, t, v, vres) - #define CHECK_SPRODUCT(a, b, t, v, vres) \ - CHECK_SPRODUCT1(a, b, t, v, vres); \ - CHECK_SPRODUCT1(b, a, t, v, vres) - #define CHECK_PRODUCT1(a, b, t, v, vres) \ - VERIFY (INT_MULTIPLY_OVERFLOW (a, b) == (v)) - #define CHECK_SPRODUCT1(a, b, t, v, vres) \ - CHECK_PRODUCT1(a, b, t, v, vres); \ - { \ - t result; \ - ASSERT (INT_MULTIPLY_WRAPV (a, b, &result) == (v)); \ - ASSERT (result == ((v) ? (vres) : ((a) * (b)))); \ - } - CHECK_PRODUCT (-1, 1u, unsigned int, true, -1 * 1u); - CHECK_SPRODUCT (-1, INT_MIN, int, INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); - CHECK_PRODUCT (-1, UINT_MAX, unsigned int, true, -1 * UINT_MAX); - CHECK_SPRODUCT (-32768, LONG_MAX / -32768 - 1, long int, true, LONG_MIN); - CHECK_SPRODUCT (-12345, LONG_MAX / -12345, long int, false, DONTCARE); - CHECK_SPRODUCT (0, -1, int, false, DONTCARE); - CHECK_SPRODUCT (0, 0, int, false, DONTCARE); - CHECK_PRODUCT (0, 0u, unsigned int, false, DONTCARE); - CHECK_SPRODUCT (0, 1, int, false, DONTCARE); - CHECK_SPRODUCT (0, INT_MAX, int, false, DONTCARE); - CHECK_SPRODUCT (0, INT_MIN, int, false, DONTCARE); - CHECK_PRODUCT (0, UINT_MAX, unsigned int, false, DONTCARE); - CHECK_PRODUCT (0u, -1, unsigned int, false, DONTCARE); - CHECK_PRODUCT (0u, 0, unsigned int, false, DONTCARE); - CHECK_PRODUCT (0u, 0u, unsigned int, false, DONTCARE); - CHECK_PRODUCT (0u, 1, unsigned int, false, DONTCARE); - CHECK_PRODUCT (0u, INT_MAX, unsigned int, false, DONTCARE); - CHECK_PRODUCT (0u, INT_MIN, unsigned int, false, DONTCARE); - CHECK_PRODUCT (0u, UINT_MAX, unsigned int, false, DONTCARE); - CHECK_SPRODUCT (1, INT_MAX, int, false, DONTCARE); - CHECK_SPRODUCT (1, INT_MIN, int, false, DONTCARE); - CHECK_PRODUCT (1, UINT_MAX, unsigned int, false, DONTCARE); - CHECK_PRODUCT (1u, INT_MIN, unsigned int, true, 1u * INT_MIN); - CHECK_PRODUCT (1u, INT_MAX, unsigned int, UINT_MAX < INT_MAX, 1u * INT_MAX); - CHECK_PRODUCT (INT_MAX, UINT_MAX, unsigned int, true, INT_MAX * UINT_MAX); - CHECK_PRODUCT (INT_MAX, ULONG_MAX, unsigned long int, true, - INT_MAX * ULONG_MAX); - CHECK_SPRODUCT (INT_MIN, LONG_MAX / INT_MIN - 1, long int, true, LONG_MIN); - CHECK_SPRODUCT (INT_MIN, LONG_MAX / INT_MIN, long int, false, DONTCARE); - CHECK_PRODUCT (INT_MIN, UINT_MAX, unsigned int, true, INT_MIN * UINT_MAX); - CHECK_PRODUCT (INT_MIN, ULONG_MAX, unsigned long int, true, - INT_MIN * ULONG_MAX); - { - long int result; - ASSERT (INT_MULTIPLY_WRAPV (INT_MAX, INT_MAX, &result) - == (LONG_MAX / INT_MAX < INT_MAX)); - ASSERT (INT_MULTIPLY_WRAPV (INT_MAX, INT_MAX, &result) - || result == INT_MAX * (long int) INT_MAX); - ASSERT (INT_MULTIPLY_WRAPV (INT_MIN, INT_MIN, &result) - || result == INT_MIN * (long int) INT_MIN); - } - -# ifdef LLONG_MAX - { - long long int result; - ASSERT (INT_MULTIPLY_WRAPV (LONG_MAX, LONG_MAX, &result) - == (LLONG_MAX / LONG_MAX < LONG_MAX)); - ASSERT (INT_MULTIPLY_WRAPV (LONG_MAX, LONG_MAX, &result) - || result == LONG_MAX * (long long int) LONG_MAX); - ASSERT (INT_MULTIPLY_WRAPV (LONG_MIN, LONG_MIN, &result) - || result == LONG_MIN * (long long int) LONG_MIN); - } -# endif - - #define CHECK_QUOTIENT(a, b, v) VERIFY (INT_DIVIDE_OVERFLOW (a, b) == (v)) - - CHECK_QUOTIENT (INT_MIN, -1L, INT_MIN == LONG_MIN); - CHECK_QUOTIENT (INT_MIN, UINT_MAX, false); - CHECK_QUOTIENT (INTMAX_MIN, UINTMAX_MAX, false); - CHECK_QUOTIENT (INTMAX_MIN, UINT_MAX, false); - CHECK_QUOTIENT (-11, 10u, true); - CHECK_QUOTIENT (-10, 10u, true); - CHECK_QUOTIENT (-9, 10u, false); - CHECK_QUOTIENT (11u, -10, true); - CHECK_QUOTIENT (10u, -10, true); - CHECK_QUOTIENT (9u, -10, false); - - #define CHECK_REMAINDER(a, b, v) VERIFY (INT_REMAINDER_OVERFLOW (a, b) == (v)) - - CHECK_REMAINDER (INT_MIN, -1L, INT_MIN == LONG_MIN); - CHECK_REMAINDER (-1, UINT_MAX, true); - CHECK_REMAINDER ((intmax_t) -1, UINTMAX_MAX, true); - CHECK_REMAINDER (INTMAX_MIN, UINT_MAX, - (INTMAX_MAX < UINT_MAX - && - (unsigned int) INTMAX_MIN % UINT_MAX != 0)); - CHECK_REMAINDER (INT_MIN, ULONG_MAX, INT_MIN % ULONG_MAX != 1); - CHECK_REMAINDER (1u, -1, false); - CHECK_REMAINDER (37*39u, -39, false); - CHECK_REMAINDER (37*39u + 1, -39, true); - CHECK_REMAINDER (37*39u - 1, -39, true); - CHECK_REMAINDER (LONG_MAX, -INT_MAX, false); - - return 0; -} diff --git a/gl/tests/test-inttypes.c b/gl/tests/test-inttypes.c deleted file mode 100644 index 9a3193c398..0000000000 --- a/gl/tests/test-inttypes.c +++ /dev/null @@ -1,118 +0,0 @@ -/* Test of substitute. - Copyright (C) 2006-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include - -/* Tests for macros supposed to be defined in inttypes.h. */ - -const char *k = /* implicit string concatenation */ -#ifdef INT8_MAX - PRId8 PRIi8 -#endif -#ifdef UINT8_MAX - PRIo8 PRIu8 PRIx8 PRIX8 -#endif -#ifdef INT16_MAX - PRId16 PRIi16 -#endif -#ifdef UINT16_MAX - PRIo16 PRIu16 PRIx16 PRIX16 -#endif -#ifdef INT32_MAX - PRId32 PRIi32 -#endif -#ifdef UINT32_MAX - PRIo32 PRIu32 PRIx32 PRIX32 -#endif -#ifdef INT64_MAX - PRId64 PRIi64 -#endif -#ifdef UINT64_MAX - PRIo64 PRIu64 PRIx64 PRIX64 -#endif - PRIdLEAST8 PRIiLEAST8 PRIoLEAST8 PRIuLEAST8 PRIxLEAST8 PRIXLEAST8 - PRIdLEAST16 PRIiLEAST16 PRIoLEAST16 PRIuLEAST16 PRIxLEAST16 PRIXLEAST16 - PRIdLEAST32 PRIiLEAST32 PRIoLEAST32 PRIuLEAST32 PRIxLEAST32 PRIXLEAST32 - PRIdLEAST64 PRIiLEAST64 - PRIoLEAST64 PRIuLEAST64 PRIxLEAST64 PRIXLEAST64 - PRIdFAST8 PRIiFAST8 PRIoFAST8 PRIuFAST8 PRIxFAST8 PRIXFAST8 - PRIdFAST16 PRIiFAST16 PRIoFAST16 PRIuFAST16 PRIxFAST16 PRIXFAST16 - PRIdFAST32 PRIiFAST32 PRIoFAST32 PRIuFAST32 PRIxFAST32 PRIXFAST32 - PRIdFAST64 PRIiFAST64 - PRIoFAST64 PRIuFAST64 PRIxFAST64 PRIXFAST64 - PRIdMAX PRIiMAX PRIoMAX PRIuMAX PRIxMAX PRIXMAX -#ifdef INTPTR_MAX - PRIdPTR PRIiPTR -#endif -#ifdef UINTPTR_MAX - PRIoPTR PRIuPTR PRIxPTR PRIXPTR -#endif - ; -const char *l = /* implicit string concatenation */ -#ifdef INT8_MAX - SCNd8 SCNi8 -#endif -#ifdef UINT8_MAX - SCNo8 SCNu8 SCNx8 -#endif -#ifdef INT16_MAX - SCNd16 SCNi16 -#endif -#ifdef UINT16_MAX - SCNo16 SCNu16 SCNx16 -#endif -#ifdef INT32_MAX - SCNd32 SCNi32 -#endif -#ifdef UINT32_MAX - SCNo32 SCNu32 SCNx32 -#endif -#ifdef INT64_MAX - SCNd64 SCNi64 -#endif -#ifdef UINT64_MAX - SCNo64 SCNu64 SCNx64 -#endif - SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8 - SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16 - SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32 - SCNdLEAST64 SCNiLEAST64 - SCNoLEAST64 SCNuLEAST64 SCNxLEAST64 - SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8 - SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16 - SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32 - SCNdFAST64 SCNiFAST64 - SCNoFAST64 SCNuFAST64 SCNxFAST64 - SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX -#ifdef INTPTR_MAX - SCNdPTR SCNiPTR -#endif -#ifdef UINTPTR_MAX - SCNoPTR SCNuPTR SCNxPTR -#endif - ; - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-limits-h.c b/gl/tests/test-limits-h.c deleted file mode 100644 index f5576bff01..0000000000 --- a/gl/tests/test-limits-h.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Test of substitute. - Copyright 2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paul Eggert. */ - -#include - -#include - -#include "verify.h" - -#if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) -# pragma GCC diagnostic ignored "-Woverlength-strings" -#endif - -/* Macros specified by ISO/IEC TS 18661-1:2014. */ - -#define verify_width(width, min, max) \ - verify ((max) >> ((width) - 1 - ((min) < 0)) == 1) - -verify_width (CHAR_WIDTH, CHAR_MIN, CHAR_MAX); -verify_width (SCHAR_WIDTH, SCHAR_MIN, SCHAR_MAX); -verify_width (UCHAR_WIDTH, 0, UCHAR_MAX); -verify_width (SHRT_WIDTH, SHRT_MIN, SHRT_MAX); -verify_width (USHRT_WIDTH, 0, USHRT_MAX); -verify_width (INT_WIDTH, INT_MIN, INT_MAX); -verify_width (UINT_WIDTH, 0, UINT_MAX); -verify_width (LONG_WIDTH, LONG_MIN, LONG_MAX); -verify_width (ULONG_WIDTH, 0, ULONG_MAX); -verify_width (LLONG_WIDTH, LLONG_MIN, LLONG_MAX); -verify_width (ULLONG_WIDTH, 0, ULLONG_MAX); - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-memchr.c b/gl/tests/test-memchr.c deleted file mode 100644 index 1526ed2a69..0000000000 --- a/gl/tests/test-memchr.c +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2008-2016 Free Software Foundation, Inc. - * Written by Eric Blake and Bruno Haible - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (memchr, void *, (void const *, int, size_t)); - -#include - -#include "zerosize-ptr.h" -#include "macros.h" - -/* Calculating void * + int is not portable, so this wrapper converts - to char * to make the tests easier to write. */ -#define MEMCHR (char *) memchr - -int -main (void) -{ - size_t n = 0x100000; - char *input = malloc (n); - ASSERT (input); - - input[0] = 'a'; - input[1] = 'b'; - memset (input + 2, 'c', 1024); - memset (input + 1026, 'd', n - 1028); - input[n - 2] = 'e'; - input[n - 1] = 'a'; - - /* Basic behavior tests. */ - ASSERT (MEMCHR (input, 'a', n) == input); - - ASSERT (MEMCHR (input, 'a', 0) == NULL); - ASSERT (MEMCHR (zerosize_ptr (), 'a', 0) == NULL); - - ASSERT (MEMCHR (input, 'b', n) == input + 1); - ASSERT (MEMCHR (input, 'c', n) == input + 2); - ASSERT (MEMCHR (input, 'd', n) == input + 1026); - - ASSERT (MEMCHR (input + 1, 'a', n - 1) == input + n - 1); - ASSERT (MEMCHR (input + 1, 'e', n - 1) == input + n - 2); - ASSERT (MEMCHR (input + 1, 0x789abc00 | 'e', n - 1) == input + n - 2); - - ASSERT (MEMCHR (input, 'f', n) == NULL); - ASSERT (MEMCHR (input, '\0', n) == NULL); - - /* Check that a very long haystack is handled quickly if the byte is - found near the beginning. */ - { - size_t repeat = 10000; - for (; repeat > 0; repeat--) - { - ASSERT (MEMCHR (input, 'c', n) == input + 2); - } - } - - /* Alignment tests. */ - { - int i, j; - for (i = 0; i < 32; i++) - { - for (j = 0; j < 256; j++) - input[i + j] = j; - for (j = 0; j < 256; j++) - { - ASSERT (MEMCHR (input + i, j, 256) == input + i + j); - } - } - } - - /* Check that memchr() does not read past the first occurrence of the - byte being searched. See the Austin Group's clarification - . - Test both '\0' and something else, since some implementations - special-case searching for NUL. - */ - { - char *page_boundary = (char *) zerosize_ptr (); - /* Too small, and we miss cache line boundary tests; too large, - and the test takes cubically longer to complete. */ - int limit = 257; - - if (page_boundary != NULL) - { - for (n = 1; n <= limit; n++) - { - char *mem = page_boundary - n; - memset (mem, 'X', n); - ASSERT (MEMCHR (mem, 'U', n) == NULL); - ASSERT (MEMCHR (mem, 0, n) == NULL); - - { - size_t i; - size_t k; - - for (i = 0; i < n; i++) - { - mem[i] = 'U'; - for (k = i + 1; k < n + limit; k++) - ASSERT (MEMCHR (mem, 'U', k) == mem + i); - mem[i] = 0; - for (k = i + 1; k < n + limit; k++) - ASSERT (MEMCHR (mem, 0, k) == mem + i); - mem[i] = 'X'; - } - } - } - } - } - - free (input); - - return 0; -} diff --git a/gl/tests/test-netdb.c b/gl/tests/test-netdb.c deleted file mode 100644 index 93d9c97a5c..0000000000 --- a/gl/tests/test-netdb.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007-2008, 2010-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Simon Josefsson , 2008. */ - -#include -#include - -/* Check that the 'struct hostent' type is defined. */ -struct hostent t1; - -/* Check that the 'socklen_t' type is defined. */ -socklen_t t2; - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-netinet_in.c b/gl/tests/test-netinet_in.c deleted file mode 100644 index 8a603da6eb..0000000000 --- a/gl/tests/test-netinet_in.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-read-file.c b/gl/tests/test-read-file.c deleted file mode 100644 index ab13f14b32..0000000000 --- a/gl/tests/test-read-file.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (C) 2006-2007, 2010-2016 Free Software Foundation, Inc. - * Written by Simon Josefsson - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ - -#include - -#include "read-file.h" - -#include -#include -#include - -#define FILE1 "/etc/resolv.conf" -#define FILE2 "/dev/null" - -int -main (void) -{ - struct stat statbuf; - int err = 0; - - /* We can perform the test only if the file exists and is readable. - Test whether it exists, then assume it is world-readable. */ - if (stat (FILE1, &statbuf) >= 0) - { - size_t len; - char *out = read_file (FILE1, &len); - - if (!out) - { - perror ("Could not read file"); - err = 1; - } - else - { - if (out[len] != '\0') - { - perror ("BAD: out[len] not zero"); - err = 1; - } - - if (S_ISREG (statbuf.st_mode)) - { - /* FILE1 is a regular file or a symlink to a regular file. */ - if (len != statbuf.st_size) - { - fprintf (stderr, "Read %lu from %s...\n", - (unsigned long) len, FILE1); - err = 1; - } - } - else - { - /* Assume FILE1 is not empty. */ - if (len == 0) - { - fprintf (stderr, "Read nothing from %s\n", FILE1); - err = 1; - } - } - free (out); - } - } - - /* We can perform the test only if the file exists and is readable. - Test whether it exists, then assume it is world-readable. */ - if (stat (FILE2, &statbuf) >= 0) - { - size_t len; - char *out = read_file (FILE2, &len); - - if (!out) - { - perror ("Could not read file"); - err = 1; - } - else - { - if (out[len] != '\0') - { - perror ("BAD: out[len] not zero"); - err = 1; - } - - /* /dev/null should always be empty. Ignore statbuf.st_size, since it - is not a regular file. */ - if (len != 0) - { - fprintf (stderr, "Read %lu from %s...\n", - (unsigned long) len, FILE2); - err = 1; - } - free (out); - } - } - - return err; -} diff --git a/gl/tests/test-snprintf.c b/gl/tests/test-snprintf.c deleted file mode 100644 index 9041e4a047..0000000000 --- a/gl/tests/test-snprintf.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Test of snprintf() function. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (snprintf, int, (char *, size_t, char const *, ...)); - -#include - -#include "macros.h" - -int -main (int argc, char *argv[]) -{ - char buf[8]; - int size; - int retval; - - retval = snprintf (NULL, 0, "%d", 12345); - ASSERT (retval == 5); - - for (size = 0; size <= 8; size++) - { - memcpy (buf, "DEADBEEF", 8); - retval = snprintf (buf, size, "%d", 12345); - ASSERT (retval == 5); - if (size < 6) - { - if (size > 0) - { - ASSERT (memcmp (buf, "12345", size - 1) == 0); - ASSERT (buf[size - 1] == '\0' || buf[size - 1] == '0' + size); - } -#if !CHECK_SNPRINTF_POSIX - if (size > 0) -#endif - ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); - } - else - { - ASSERT (memcmp (buf, "12345\0EF", 8) == 0); - } - } - - /* Test the support of the POSIX/XSI format strings with positions. */ - { - char result[100]; - retval = snprintf (result, sizeof (result), "%2$d %1$d", 33, 55); - ASSERT (strcmp (result, "55 33") == 0); - ASSERT (retval == strlen (result)); - } - - return 0; -} diff --git a/gl/tests/test-stdalign.c b/gl/tests/test-stdalign.c deleted file mode 100644 index 0f240c5516..0000000000 --- a/gl/tests/test-stdalign.c +++ /dev/null @@ -1,116 +0,0 @@ -/* Test of . - Copyright 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paul Eggert, inspired by Bruno Haible's test-alignof.c. */ - -#include - -#include - -#include -#include - -#include "verify.h" - -#include "macros.h" - -typedef long double longdouble; -typedef struct { char a[1]; } struct1; -typedef struct { char a[2]; } struct2; -typedef struct { char a[3]; } struct3; -typedef struct { char a[4]; } struct4; - -verify (__alignof_is_defined == 1); -#ifndef alignof -# error "alignof is not a macro" -#endif - -#if __alignas_is_defined -verify (__alignas_is_defined == 1); -# ifndef alignas -# error "alignas is not a macro" -# endif -/* mingw can go up only to 8. 8 is all that GNU Emacs needs, so let's - limit the test to 8 for now. */ -# define TEST_ALIGNMENT 8 -#else -# define _Alignas(alignment) -# define alignas(alignment) -# define TEST_ALIGNMENT 1 -#endif - -#define CHECK_STATIC(type) \ - typedef struct { char slot1; type slot2; } type##_helper; \ - verify (alignof (type) == offsetof (type##_helper, slot2)); \ - verify (_Alignof (type) == alignof (type)); \ - const int type##_alignment = alignof (type); \ - type alignas (TEST_ALIGNMENT) static_##type##_alignas; \ - type _Alignas (TEST_ALIGNMENT) static_##type##_Alignas - -#define CHECK_ALIGNED(var) ASSERT ((uintptr_t) &(var) % TEST_ALIGNMENT == 0) - -CHECK_STATIC (char); -CHECK_STATIC (short); -CHECK_STATIC (int); -CHECK_STATIC (long); -#ifdef INT64_MAX -CHECK_STATIC (int64_t); -#endif -CHECK_STATIC (float); -CHECK_STATIC (double); -/* CHECK_STATIC (longdouble); */ -CHECK_STATIC (struct1); -CHECK_STATIC (struct2); -CHECK_STATIC (struct3); -CHECK_STATIC (struct4); - -int -main () -{ -#if defined __SUNPRO_C - /* Avoid a test failure due to Sun Studio Developer Bug Report #2125432. */ - fputs ("Skipping test: known Sun C compiler bug\n", stderr); - return 77; -#else - CHECK_ALIGNED (static_char_alignas); - CHECK_ALIGNED (static_char_Alignas); - CHECK_ALIGNED (static_short_alignas); - CHECK_ALIGNED (static_short_Alignas); - CHECK_ALIGNED (static_int_alignas); - CHECK_ALIGNED (static_int_Alignas); - CHECK_ALIGNED (static_long_alignas); - CHECK_ALIGNED (static_long_Alignas); -# ifdef INT64_MAX - CHECK_ALIGNED (static_int64_t_alignas); - CHECK_ALIGNED (static_int64_t_Alignas); -# endif - CHECK_ALIGNED (static_float_alignas); - CHECK_ALIGNED (static_float_Alignas); - CHECK_ALIGNED (static_double_alignas); - CHECK_ALIGNED (static_double_Alignas); - /* CHECK_ALIGNED (static_longdouble_alignas); */ - /* CHECK_ALIGNED (static_longdouble_Alignas); */ - CHECK_ALIGNED (static_struct1_alignas); - CHECK_ALIGNED (static_struct1_Alignas); - CHECK_ALIGNED (static_struct2_alignas); - CHECK_ALIGNED (static_struct2_Alignas); - CHECK_ALIGNED (static_struct3_alignas); - CHECK_ALIGNED (static_struct3_Alignas); - CHECK_ALIGNED (static_struct4_alignas); - CHECK_ALIGNED (static_struct4_Alignas); - return 0; -#endif -} diff --git a/gl/tests/test-stdbool.c b/gl/tests/test-stdbool.c deleted file mode 100644 index 45dc837675..0000000000 --- a/gl/tests/test-stdbool.c +++ /dev/null @@ -1,118 +0,0 @@ -/* Test of substitute. - Copyright (C) 2002-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -/* We want this test to succeed even when using gcc's -Werror; but to - do that requires a pragma that didn't exist before 4.3.0. */ -#ifndef __GNUC__ -# define ADDRESS_CHECK_OKAY -#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) -/* No way to silence -Waddress. */ -#else -# pragma GCC diagnostic ignored "-Waddress" -# define ADDRESS_CHECK_OKAY -#endif - -#include - -#include - -#ifndef bool - "error: bool is not defined" -#endif -#ifndef false - "error: false is not defined" -#endif -#if false - "error: false is not 0" -#endif -#ifndef true - "error: true is not defined" -#endif -#if true != 1 - "error: true is not 1" -#endif -#ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" -#endif - -/* Several tests cannot be guaranteed with gnulib's , at - least, not for all compilers and compiler options. */ -#if HAVE_STDBOOL_H || 3 <= __GNUC__ -struct s { _Bool s: 1; _Bool t; } s; -#endif - -char a[true == 1 ? 1 : -1]; -char b[false == 0 ? 1 : -1]; -char c[__bool_true_false_are_defined == 1 ? 1 : -1]; -#if HAVE_STDBOOL_H || 3 <= __GNUC__ /* See above. */ -char d[(bool) 0.5 == true ? 1 : -1]; -# ifdef ADDRESS_CHECK_OKAY /* Avoid gcc warning. */ -/* C99 may plausibly be interpreted as not requiring support for a cast from - a variable's address to bool in a static initializer. So treat it like a - GCC extension. */ -# ifdef __GNUC__ -bool e = &s; -# endif -# endif -char f[(_Bool) 0.0 == false ? 1 : -1]; -#endif -char g[true]; -char h[sizeof (_Bool)]; -#if HAVE_STDBOOL_H || 3 <= __GNUC__ /* See above. */ -char i[sizeof s.t]; -#endif -enum { j = false, k = true, l = false * true, m = true * 256 }; -_Bool n[m]; -char o[sizeof n == m * sizeof n[0] ? 1 : -1]; -char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; -/* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - */ -_Bool q = true; -_Bool *pq = &q; - -int -main () -{ - int error = 0; - -#if HAVE_STDBOOL_H || 3 <= __GNUC__ /* See above. */ -# ifdef ADDRESS_CHECK_OKAY /* Avoid gcc warning. */ - /* A cast from a variable's address to bool is valid in expressions. */ - { - bool e1 = &s; - if (!e1) - error = 1; - } -# endif -#endif - - /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 - reported by James Lemley on 2005-10-05; see - http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html - This is a runtime test, since a corresponding compile-time - test would rely on initializer extensions. */ - { - char digs[] = "0123456789"; - if (&(digs + 5)[-2 + (bool) 1] != &digs[4]) - error = 1; - } - - return error; -} diff --git a/gl/tests/test-stddef.c b/gl/tests/test-stddef.c deleted file mode 100644 index bfb72a01dc..0000000000 --- a/gl/tests/test-stddef.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Test of substitute. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Eric Blake , 2009. */ - -#include - -#include -#include -#include "verify.h" - -/* Check that appropriate types are defined. */ -wchar_t a = 'c'; -ptrdiff_t b = 1; -size_t c = 2; -max_align_t x; - -/* Check that NULL can be passed through varargs as a pointer type, - per POSIX 2008. */ -verify (sizeof NULL == sizeof (void *)); - -/* Check that offsetof produces integer constants with correct type. */ -struct d -{ - char e; - char f; -}; -/* Solaris 10 has a bug where offsetof is under-parenthesized, and - cannot be used as an arbitrary expression. However, since it is - unlikely to bite real code, we ignore that short-coming. */ -/* verify (sizeof offsetof (struct d, e) == sizeof (size_t)); */ -verify (sizeof (offsetof (struct d, e)) == sizeof (size_t)); -verify (offsetof (struct d, e) < -1); /* Must be unsigned. */ -verify (offsetof (struct d, f) == 1); - -/* Check max_align_t's alignment. */ -verify (alignof (double) <= alignof (max_align_t)); -verify (alignof (int) <= alignof (max_align_t)); -verify (alignof (long double) <= alignof (max_align_t)); -verify (alignof (long int) <= alignof (max_align_t)); -verify (alignof (ptrdiff_t) <= alignof (max_align_t)); -verify (alignof (size_t) <= alignof (max_align_t)); -verify (alignof (wchar_t) <= alignof (max_align_t)); -verify (alignof (struct d) <= alignof (max_align_t)); -#if defined __GNUC__ || defined __IBM__ALIGNOF__ -verify (__alignof__ (double) <= __alignof__ (max_align_t)); -verify (__alignof__ (int) <= __alignof__ (max_align_t)); -verify (__alignof__ (long double) <= __alignof__ (max_align_t)); -verify (__alignof__ (long int) <= __alignof__ (max_align_t)); -verify (__alignof__ (ptrdiff_t) <= __alignof__ (max_align_t)); -verify (__alignof__ (size_t) <= __alignof__ (max_align_t)); -verify (__alignof__ (wchar_t) <= __alignof__ (max_align_t)); -verify (__alignof__ (struct d) <= __alignof__ (max_align_t)); -#endif - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-stdint.c b/gl/tests/test-stdint.c deleted file mode 100644 index 6eb1d2edab..0000000000 --- a/gl/tests/test-stdint.c +++ /dev/null @@ -1,426 +0,0 @@ -/* Test of substitute. - Copyright (C) 2006-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2006. */ - -#include - -/* Whether to enable pedantic checks. */ -#define DO_PEDANTIC 0 - -#include - -#include "verify.h" -#include "intprops.h" - -#if __GNUC__ >= 2 && DO_PEDANTIC -# define verify_same_types(expr1,expr2) \ - extern void _verify_func(__LINE__) (__typeof__ (expr1) *); \ - extern void _verify_func(__LINE__) (__typeof__ (expr2) *); -# define _verify_func(line) _verify_func2(line) -# define _verify_func2(line) verify_func_ ## line -#else -# define verify_same_types(expr1,expr2) extern void verify_func (int) -#endif - -/* 7.18.1.1. Exact-width integer types */ -/* 7.18.2.1. Limits of exact-width integer types */ - -int8_t a1[3] = { INT8_C (17), INT8_MIN, INT8_MAX }; -verify (TYPE_MINIMUM (int8_t) == INT8_MIN); -verify (TYPE_MAXIMUM (int8_t) == INT8_MAX); -verify_same_types (INT8_MIN, (int8_t) 0 + 0); -verify_same_types (INT8_MAX, (int8_t) 0 + 0); - -int16_t a2[3] = { INT16_C (17), INT16_MIN, INT16_MAX }; -verify (TYPE_MINIMUM (int16_t) == INT16_MIN); -verify (TYPE_MAXIMUM (int16_t) == INT16_MAX); -verify_same_types (INT16_MIN, (int16_t) 0 + 0); -verify_same_types (INT16_MAX, (int16_t) 0 + 0); - -int32_t a3[3] = { INT32_C (17), INT32_MIN, INT32_MAX }; -verify (TYPE_MINIMUM (int32_t) == INT32_MIN); -verify (TYPE_MAXIMUM (int32_t) == INT32_MAX); -verify_same_types (INT32_MIN, (int32_t) 0 + 0); -verify_same_types (INT32_MAX, (int32_t) 0 + 0); - -#ifdef INT64_MAX -int64_t a4[3] = { INT64_C (17), INT64_MIN, INT64_MAX }; -verify (TYPE_MINIMUM (int64_t) == INT64_MIN); -verify (TYPE_MAXIMUM (int64_t) == INT64_MAX); -verify_same_types (INT64_MIN, (int64_t) 0 + 0); -verify_same_types (INT64_MAX, (int64_t) 0 + 0); -#endif - -uint8_t b1[2] = { UINT8_C (17), UINT8_MAX }; -verify (TYPE_MAXIMUM (uint8_t) == UINT8_MAX); -verify_same_types (UINT8_MAX, (uint8_t) 0 + 0); - -uint16_t b2[2] = { UINT16_C (17), UINT16_MAX }; -verify (TYPE_MAXIMUM (uint16_t) == UINT16_MAX); -verify_same_types (UINT16_MAX, (uint16_t) 0 + 0); - -uint32_t b3[2] = { UINT32_C (17), UINT32_MAX }; -verify (TYPE_MAXIMUM (uint32_t) == UINT32_MAX); -verify_same_types (UINT32_MAX, (uint32_t) 0 + 0); - -#ifdef UINT64_MAX -uint64_t b4[2] = { UINT64_C (17), UINT64_MAX }; -verify (TYPE_MAXIMUM (uint64_t) == UINT64_MAX); -verify_same_types (UINT64_MAX, (uint64_t) 0 + 0); -#endif - -#if INT8_MIN && INT8_MAX && INT16_MIN && INT16_MAX && INT32_MIN && INT32_MAX -/* ok */ -#else -err or; -#endif - -#if UINT8_MAX && UINT16_MAX && UINT32_MAX -/* ok */ -#else -err or; -#endif - -/* 7.18.1.2. Minimum-width integer types */ -/* 7.18.2.2. Limits of minimum-width integer types */ - -int_least8_t c1[3] = { 17, INT_LEAST8_MIN, INT_LEAST8_MAX }; -verify (TYPE_MINIMUM (int_least8_t) == INT_LEAST8_MIN); -verify (TYPE_MAXIMUM (int_least8_t) == INT_LEAST8_MAX); -verify_same_types (INT_LEAST8_MIN, (int_least8_t) 0 + 0); -verify_same_types (INT_LEAST8_MAX, (int_least8_t) 0 + 0); - -int_least16_t c2[3] = { 17, INT_LEAST16_MIN, INT_LEAST16_MAX }; -verify (TYPE_MINIMUM (int_least16_t) == INT_LEAST16_MIN); -verify (TYPE_MAXIMUM (int_least16_t) == INT_LEAST16_MAX); -verify_same_types (INT_LEAST16_MIN, (int_least16_t) 0 + 0); -verify_same_types (INT_LEAST16_MAX, (int_least16_t) 0 + 0); - -int_least32_t c3[3] = { 17, INT_LEAST32_MIN, INT_LEAST32_MAX }; -verify (TYPE_MINIMUM (int_least32_t) == INT_LEAST32_MIN); -verify (TYPE_MAXIMUM (int_least32_t) == INT_LEAST32_MAX); -verify_same_types (INT_LEAST32_MIN, (int_least32_t) 0 + 0); -verify_same_types (INT_LEAST32_MAX, (int_least32_t) 0 + 0); - -#ifdef INT_LEAST64_MAX -int_least64_t c4[3] = { 17, INT_LEAST64_MIN, INT_LEAST64_MAX }; -verify (TYPE_MINIMUM (int_least64_t) == INT_LEAST64_MIN); -verify (TYPE_MAXIMUM (int_least64_t) == INT_LEAST64_MAX); -verify_same_types (INT_LEAST64_MIN, (int_least64_t) 0 + 0); -verify_same_types (INT_LEAST64_MAX, (int_least64_t) 0 + 0); -#endif - -uint_least8_t d1[2] = { 17, UINT_LEAST8_MAX }; -verify (TYPE_MAXIMUM (uint_least8_t) == UINT_LEAST8_MAX); -verify_same_types (UINT_LEAST8_MAX, (uint_least8_t) 0 + 0); - -uint_least16_t d2[2] = { 17, UINT_LEAST16_MAX }; -verify (TYPE_MAXIMUM (uint_least16_t) == UINT_LEAST16_MAX); -verify_same_types (UINT_LEAST16_MAX, (uint_least16_t) 0 + 0); - -uint_least32_t d3[2] = { 17, UINT_LEAST32_MAX }; -verify (TYPE_MAXIMUM (uint_least32_t) == UINT_LEAST32_MAX); -verify_same_types (UINT_LEAST32_MAX, (uint_least32_t) 0 + 0); - -#ifdef UINT_LEAST64_MAX -uint_least64_t d4[2] = { 17, UINT_LEAST64_MAX }; -verify (TYPE_MAXIMUM (uint_least64_t) == UINT_LEAST64_MAX); -verify_same_types (UINT_LEAST64_MAX, (uint_least64_t) 0 + 0); -#endif - -#if INT_LEAST8_MIN && INT_LEAST8_MAX && INT_LEAST16_MIN && INT_LEAST16_MAX && INT_LEAST32_MIN && INT_LEAST32_MAX -/* ok */ -#else -err or; -#endif - -#if UINT_LEAST8_MAX && UINT_LEAST16_MAX && UINT_LEAST32_MAX -/* ok */ -#else -err or; -#endif - -/* 7.18.1.3. Fastest minimum-width integer types */ -/* 7.18.2.3. Limits of fastest minimum-width integer types */ - -int_fast8_t e1[3] = { 17, INT_FAST8_MIN, INT_FAST8_MAX }; -verify (TYPE_MINIMUM (int_fast8_t) == INT_FAST8_MIN); -verify (TYPE_MAXIMUM (int_fast8_t) == INT_FAST8_MAX); -verify_same_types (INT_FAST8_MIN, (int_fast8_t) 0 + 0); -verify_same_types (INT_FAST8_MAX, (int_fast8_t) 0 + 0); - -int_fast16_t e2[3] = { 17, INT_FAST16_MIN, INT_FAST16_MAX }; -verify (TYPE_MINIMUM (int_fast16_t) == INT_FAST16_MIN); -verify (TYPE_MAXIMUM (int_fast16_t) == INT_FAST16_MAX); -verify_same_types (INT_FAST16_MIN, (int_fast16_t) 0 + 0); -verify_same_types (INT_FAST16_MAX, (int_fast16_t) 0 + 0); - -int_fast32_t e3[3] = { 17, INT_FAST32_MIN, INT_FAST32_MAX }; -verify (TYPE_MINIMUM (int_fast32_t) == INT_FAST32_MIN); -verify (TYPE_MAXIMUM (int_fast32_t) == INT_FAST32_MAX); -verify_same_types (INT_FAST32_MIN, (int_fast32_t) 0 + 0); -verify_same_types (INT_FAST32_MAX, (int_fast32_t) 0 + 0); - -#ifdef INT_FAST64_MAX -int_fast64_t e4[3] = { 17, INT_FAST64_MIN, INT_FAST64_MAX }; -verify (TYPE_MINIMUM (int_fast64_t) == INT_FAST64_MIN); -verify (TYPE_MAXIMUM (int_fast64_t) == INT_FAST64_MAX); -verify_same_types (INT_FAST64_MIN, (int_fast64_t) 0 + 0); -verify_same_types (INT_FAST64_MAX, (int_fast64_t) 0 + 0); -#endif - -uint_fast8_t f1[2] = { 17, UINT_FAST8_MAX }; -verify (TYPE_MAXIMUM (uint_fast8_t) == UINT_FAST8_MAX); -verify_same_types (UINT_FAST8_MAX, (uint_fast8_t) 0 + 0); - -uint_fast16_t f2[2] = { 17, UINT_FAST16_MAX }; -verify (TYPE_MAXIMUM (uint_fast16_t) == UINT_FAST16_MAX); -verify_same_types (UINT_FAST16_MAX, (uint_fast16_t) 0 + 0); - -uint_fast32_t f3[2] = { 17, UINT_FAST32_MAX }; -verify (TYPE_MAXIMUM (uint_fast32_t) == UINT_FAST32_MAX); -verify_same_types (UINT_FAST32_MAX, (uint_fast32_t) 0 + 0); - -#ifdef UINT_FAST64_MAX -uint_fast64_t f4[2] = { 17, UINT_FAST64_MAX }; -verify (TYPE_MAXIMUM (uint_fast64_t) == UINT_FAST64_MAX); -verify_same_types (UINT_FAST64_MAX, (uint_fast64_t) 0 + 0); -#endif - -#if INT_FAST8_MIN && INT_FAST8_MAX && INT_FAST16_MIN && INT_FAST16_MAX && INT_FAST32_MIN && INT_FAST32_MAX -/* ok */ -#else -err or; -#endif - -#if UINT_FAST8_MAX && UINT_FAST16_MAX && UINT_FAST32_MAX -/* ok */ -#else -err or; -#endif - -/* 7.18.1.4. Integer types capable of holding object pointers */ -/* 7.18.2.4. Limits of integer types capable of holding object pointers */ - -intptr_t g[3] = { 17, INTPTR_MIN, INTPTR_MAX }; -verify (TYPE_MINIMUM (intptr_t) == INTPTR_MIN); -verify (TYPE_MAXIMUM (intptr_t) == INTPTR_MAX); -verify_same_types (INTPTR_MIN, (intptr_t) 0 + 0); -verify_same_types (INTPTR_MAX, (intptr_t) 0 + 0); - -uintptr_t h[2] = { 17, UINTPTR_MAX }; -verify (TYPE_MAXIMUM (uintptr_t) == UINTPTR_MAX); -verify_same_types (UINTPTR_MAX, (uintptr_t) 0 + 0); - -#if INTPTR_MIN && INTPTR_MAX && UINTPTR_MAX -/* ok */ -#else -err or; -#endif - -/* 7.18.1.5. Greatest-width integer types */ -/* 7.18.2.5. Limits of greatest-width integer types */ - -intmax_t i[3] = { INTMAX_C (17), INTMAX_MIN, INTMAX_MAX }; -verify (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); -verify (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); -verify_same_types (INTMAX_MIN, (intmax_t) 0 + 0); -verify_same_types (INTMAX_MAX, (intmax_t) 0 + 0); - -uintmax_t j[2] = { UINTMAX_C (17), UINTMAX_MAX }; -verify (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); -verify_same_types (UINTMAX_MAX, (uintmax_t) 0 + 0); - -/* As of 2007, Sun C and HP-UX 10.20 cc don't support 'long long' constants in - the preprocessor. */ -#if !(defined __SUNPRO_C || (defined __hpux && !defined __GNUC__)) -#if INTMAX_MIN && INTMAX_MAX && UINTMAX_MAX -/* ok */ -#else -err or; -#endif -#endif - -/* 7.18.3. Limits of other integer types */ - -#include - -verify (TYPE_MINIMUM (ptrdiff_t) == PTRDIFF_MIN); -verify (TYPE_MAXIMUM (ptrdiff_t) == PTRDIFF_MAX); -verify_same_types (PTRDIFF_MIN, (ptrdiff_t) 0 + 0); -verify_same_types (PTRDIFF_MAX, (ptrdiff_t) 0 + 0); - -#if PTRDIFF_MIN && PTRDIFF_MAX -/* ok */ -#else -err or; -#endif - -#include - -verify (TYPE_MINIMUM (sig_atomic_t) == SIG_ATOMIC_MIN); -verify (TYPE_MAXIMUM (sig_atomic_t) == SIG_ATOMIC_MAX); -verify_same_types (SIG_ATOMIC_MIN, (sig_atomic_t) 0 + 0); -verify_same_types (SIG_ATOMIC_MAX, (sig_atomic_t) 0 + 0); - -#if SIG_ATOMIC_MIN != 17 && SIG_ATOMIC_MAX -/* ok */ -#else -err or; -#endif - -verify (TYPE_MAXIMUM (size_t) == SIZE_MAX); -verify_same_types (SIZE_MAX, (size_t) 0 + 0); - -#if SIZE_MAX -/* ok */ -#else -err or; -#endif - -#if HAVE_WCHAR_T -verify (TYPE_MINIMUM (wchar_t) == WCHAR_MIN); -verify (TYPE_MAXIMUM (wchar_t) == WCHAR_MAX); -verify_same_types (WCHAR_MIN, (wchar_t) 0 + 0); -verify_same_types (WCHAR_MAX, (wchar_t) 0 + 0); - -# if WCHAR_MIN != 17 && WCHAR_MAX -/* ok */ -# else -err or; -# endif -#endif - -#if HAVE_WINT_T -# include - -verify (TYPE_MINIMUM (wint_t) == WINT_MIN); -verify (TYPE_MAXIMUM (wint_t) == WINT_MAX); -verify_same_types (WINT_MIN, (wint_t) 0 + 0); -verify_same_types (WINT_MAX, (wint_t) 0 + 0); - -# if WINT_MIN != 17 && WINT_MAX -/* ok */ -# else -err or; -# endif -#endif - -/* 7.18.4. Macros for integer constants */ - -verify (INT8_C (17) == 17); -verify_same_types (INT8_C (17), (int_least8_t)0 + 0); -verify (UINT8_C (17) == 17); -verify_same_types (UINT8_C (17), (uint_least8_t)0 + 0); - -verify (INT16_C (17) == 17); -verify_same_types (INT16_C (17), (int_least16_t)0 + 0); -verify (UINT16_C (17) == 17); -verify_same_types (UINT16_C (17), (uint_least16_t)0 + 0); - -verify (INT32_C (17) == 17); -verify_same_types (INT32_C (17), (int_least32_t)0 + 0); -verify (UINT32_C (17) == 17); -verify_same_types (UINT32_C (17), (uint_least32_t)0 + 0); - -#ifdef INT64_C -verify (INT64_C (17) == 17); -verify_same_types (INT64_C (17), (int_least64_t)0 + 0); -#endif -#ifdef UINT64_C -verify (UINT64_C (17) == 17); -verify_same_types (UINT64_C (17), (uint_least64_t)0 + 0); -#endif - -verify (INTMAX_C (17) == 17); -verify_same_types (INTMAX_C (17), (intmax_t)0 + 0); -verify (UINTMAX_C (17) == 17); -verify_same_types (UINTMAX_C (17), (uintmax_t)0 + 0); - -/* Use _GL_VERIFY (with a fixed-length diagnostic string) rather than verify, - because the latter would require forming each stringified expression, and - many of these would be so long as to trigger a warning/error like this: - - test-stdint.c:407:1: error: string length '6980' is greater than the \ - length '4095' ISO C99 compilers are required to support \ - [-Werror=overlength-strings] - */ -#define verify_width(width, min, max) \ - _GL_VERIFY ((max) >> ((width) - 1 - ((min) < 0)) == 1, \ - "verify_width check") - -/* Macros specified by ISO/IEC TS 18661-1:2014. */ - -#ifdef INT8_MAX -verify_width (INT8_WIDTH, INT8_MIN, INT8_MAX); -#endif -#ifdef UINT8_MAX -verify_width (UINT8_WIDTH, 0, UINT8_MAX); -#endif -#ifdef INT16_MAX -verify_width (INT16_WIDTH, INT16_MIN, INT16_MAX); -#endif -#ifdef UINT16_MAX -verify_width (UINT16_WIDTH, 0, UINT16_MAX); -#endif -#ifdef INT32_MAX -verify_width (INT32_WIDTH, INT32_MIN, INT32_MAX); -#endif -#ifdef UINT32_MAX -verify_width (UINT32_WIDTH, 0, UINT32_MAX); -#endif -#ifdef INT64_MAX -verify_width (INT64_WIDTH, INT64_MIN, INT64_MAX); -#endif -#ifdef UINT64_MAX -verify_width (UINT64_WIDTH, 0, UINT64_MAX); -#endif -verify_width (INT_LEAST8_WIDTH, INT_LEAST8_MIN, INT_LEAST8_MAX); -verify_width (UINT_LEAST8_WIDTH, 0, UINT_LEAST8_MAX); -verify_width (INT_LEAST16_WIDTH, INT_LEAST16_MIN, INT_LEAST16_MAX); -verify_width (UINT_LEAST16_WIDTH, 0, UINT_LEAST16_MAX); -verify_width (INT_LEAST32_WIDTH, INT_LEAST32_MIN, INT_LEAST32_MAX); -verify_width (UINT_LEAST32_WIDTH, 0, UINT_LEAST32_MAX); -verify_width (INT_LEAST64_WIDTH, INT_LEAST64_MIN, INT_LEAST64_MAX); -verify_width (UINT_LEAST64_WIDTH, 0, UINT_LEAST64_MAX); -verify_width (INT_FAST8_WIDTH, INT_FAST8_MIN, INT_FAST8_MAX); -verify_width (UINT_FAST8_WIDTH, 0, UINT_FAST8_MAX); -verify_width (INT_FAST16_WIDTH, INT_FAST16_MIN, INT_FAST16_MAX); -verify_width (UINT_FAST16_WIDTH, 0, UINT_FAST16_MAX); -verify_width (INT_FAST32_WIDTH, INT_FAST32_MIN, INT_FAST32_MAX); -verify_width (UINT_FAST32_WIDTH, 0, UINT_FAST32_MAX); -verify_width (INT_FAST64_WIDTH, INT_FAST64_MIN, INT_FAST64_MAX); -verify_width (UINT_FAST64_WIDTH, 0, UINT_FAST64_MAX); -verify_width (INTPTR_WIDTH, INTPTR_MIN, INTPTR_MAX); -verify_width (UINTPTR_WIDTH, 0, UINTPTR_MAX); -verify_width (INTMAX_WIDTH, INTMAX_MIN, INTMAX_MAX); -verify_width (UINTMAX_WIDTH, 0, UINTMAX_MAX); -verify_width (PTRDIFF_WIDTH, PTRDIFF_MIN, PTRDIFF_MAX); -verify_width (SIZE_WIDTH, 0, SIZE_MAX); -verify_width (WCHAR_WIDTH, WCHAR_MIN, WCHAR_MAX); -#ifdef WINT_MAX -verify_width (WINT_WIDTH, WINT_MIN, WINT_MAX); -#endif -#ifdef SIG_ATOMIC_MAX -verify_width (SIG_ATOMIC_WIDTH, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX); -#endif - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-stdio.c b/gl/tests/test-stdio.c deleted file mode 100644 index 6cde888b69..0000000000 --- a/gl/tests/test-stdio.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include "verify.h" - -/* Check that the various SEEK_* macros are defined. */ -int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; - -/* Check that NULL can be passed through varargs as a pointer type, - per POSIX 2008. */ -verify (sizeof NULL == sizeof (void *)); - -/* Check that the types are all defined. */ -fpos_t t1; -off_t t2; -size_t t3; -ssize_t t4; -va_list t5; - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-stdlib.c b/gl/tests/test-stdlib.c deleted file mode 100644 index a1fc0d814c..0000000000 --- a/gl/tests/test-stdlib.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include "verify.h" - -/* Check that EXIT_SUCCESS is 0, per POSIX. */ -static int exitcode = EXIT_SUCCESS; -#if EXIT_SUCCESS -"oops" -#endif - -/* Check for GNU value (not guaranteed by POSIX, but is guaranteed by - gnulib). */ -#if EXIT_FAILURE != 1 -"oops" -#endif - -/* Check that NULL can be passed through varargs as a pointer type, - per POSIX 2008. */ -verify (sizeof NULL == sizeof (void *)); - -#if GNULIB_TEST_SYSTEM_POSIX -# include "test-sys_wait.h" -#else -# define test_sys_wait_macros() 0 -#endif - -int -main (void) -{ - if (test_sys_wait_macros ()) - return 1; - - return exitcode; -} diff --git a/gl/tests/test-string.c b/gl/tests/test-string.c deleted file mode 100644 index f4c60f72c9..0000000000 --- a/gl/tests/test-string.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include "verify.h" - -/* Check that NULL can be passed through varargs as a pointer type, - per POSIX 2008. */ -verify (sizeof NULL == sizeof (void *)); - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-strings.c b/gl/tests/test-strings.c deleted file mode 100644 index 5eaa61a68e..0000000000 --- a/gl/tests/test-strings.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -int -main () -{ - return 0; -} diff --git a/gl/tests/test-strnlen.c b/gl/tests/test-strnlen.c deleted file mode 100644 index ee5bd78262..0000000000 --- a/gl/tests/test-strnlen.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2010-2016 Free Software Foundation, Inc. - * Written by Eric Blake - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (strnlen, size_t, (char const *, size_t)); - -#include - -#include "zerosize-ptr.h" -#include "macros.h" - -int -main (void) -{ - size_t i; - char *page_boundary = (char *) zerosize_ptr (); - if (!page_boundary) - { - page_boundary = malloc (0x1000); - ASSERT (page_boundary); - page_boundary += 0x1000; - } - - /* Basic behavior tests. */ - ASSERT (strnlen ("a", 0) == 0); - ASSERT (strnlen ("a", 1) == 1); - ASSERT (strnlen ("a", 2) == 1); - ASSERT (strnlen ("", 0x100000) == 0); - - /* Memory fence and alignment testing. */ - for (i = 0; i < 512; i++) - { - char *start = page_boundary - i; - size_t j = i; - memset (start, 'x', i); - do - { - if (i != j) - { - start[j] = 0; - ASSERT (strnlen (start, i + j) == j); - } - ASSERT (strnlen (start, i) == j); - ASSERT (strnlen (start, j) == j); - } - while (j--); - } - - return 0; -} diff --git a/gl/tests/test-strverscmp.c b/gl/tests/test-strverscmp.c deleted file mode 100644 index 0cafe08fb1..0000000000 --- a/gl/tests/test-strverscmp.c +++ /dev/null @@ -1,59 +0,0 @@ -/* Test of strverscmp() function. - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Written by Eric Blake , 2008. */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (strverscmp, int, (const char *, const char *)); - -#include "macros.h" - -int -main (void) -{ - ASSERT (strverscmp ("", "") == 0); - ASSERT (strverscmp ("a", "a") == 0); - ASSERT (strverscmp ("a", "b") < 0); - ASSERT (strverscmp ("b", "a") > 0); - ASSERT (strverscmp ("000", "00") < 0); - ASSERT (strverscmp ("00", "000") > 0); - ASSERT (strverscmp ("a0", "a") > 0); - ASSERT (strverscmp ("00", "01") < 0); - ASSERT (strverscmp ("01", "010") < 0); - ASSERT (strverscmp ("010", "09") < 0); - ASSERT (strverscmp ("09", "0") < 0); - ASSERT (strverscmp ("9", "10") < 0); - ASSERT (strverscmp ("0a", "0") > 0); - - /* From glibc bug 9913. */ - { - static char const a[] = "B0075022800016.gbp.corp.com"; - static char const b[] = "B007502280067.gbp.corp.com"; - static char const c[] = "B007502357019.GBP.CORP.COM"; - ASSERT (strverscmp (a, b) < 0); - ASSERT (strverscmp (b, c) < 0); - ASSERT (strverscmp (a, c) < 0); - ASSERT (strverscmp (b, a) > 0); - ASSERT (strverscmp (c, b) > 0); - ASSERT (strverscmp (c, a) > 0); - } - - return 0; -} diff --git a/gl/tests/test-sys_socket.c b/gl/tests/test-sys_socket.c deleted file mode 100644 index a4f7108735..0000000000 --- a/gl/tests/test-sys_socket.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include - -#if HAVE_SHUTDOWN -/* Check some integer constant expressions. */ -int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR }; -#endif - -/* Check that the 'socklen_t' type is defined. */ -socklen_t t1; - -/* Check that the 'size_t' and 'ssize_t' types are defined. */ -size_t t2; -ssize_t t3; - -/* Check that 'struct iovec' is defined. */ -struct iovec io; - -/* Check that a minimal set of 'struct msghdr' is defined. */ -struct msghdr msg; - -int -main (void) -{ - struct sockaddr_storage x; - sa_family_t i; - - /* Check some errno values. */ - switch (ENOTSOCK) - { - case ENOTSOCK: - case EADDRINUSE: - case ENETRESET: - case ECONNABORTED: - case ECONNRESET: - case ENOTCONN: - case ESHUTDOWN: - break; - } - - x.ss_family = 42; - i = 42; - msg.msg_iov = &io; - - return (x.ss_family - i + msg.msg_namelen + msg.msg_iov->iov_len - + msg.msg_iovlen); -} diff --git a/gl/tests/test-sys_stat.c b/gl/tests/test-sys_stat.c deleted file mode 100644 index 8a3af941be..0000000000 --- a/gl/tests/test-sys_stat.c +++ /dev/null @@ -1,340 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include "verify.h" - -/* Check the existence of some macros. */ -int a[] = - { - S_IFMT, -#ifdef S_IFBLK /* missing on MSVC */ - S_IFBLK, -#endif - S_IFCHR, S_IFDIR, S_IFIFO, S_IFREG, -#ifdef S_IFLNK /* missing on native Windows and DJGPP */ - S_IFLNK, -#endif -#ifdef S_IFSOCK /* missing on native Windows and DJGPP */ - S_IFSOCK, -#endif - S_IRWXU, S_IRUSR, S_IWUSR, S_IXUSR, - S_IRWXG, S_IRGRP, S_IWGRP, S_IXGRP, - S_IRWXO, S_IROTH, S_IWOTH, S_IXOTH, - S_ISUID, S_ISGID, S_ISVTX, - S_ISBLK (S_IFREG), - S_ISCHR (S_IFREG), - S_ISDIR (S_IFREG), - S_ISFIFO (S_IFREG), - S_ISREG (S_IFREG), - S_ISLNK (S_IFREG), - S_ISSOCK (S_IFREG), - S_ISDOOR (S_IFREG), - S_ISMPB (S_IFREG), - S_ISMPX (S_IFREG), - S_ISNAM (S_IFREG), - S_ISNWK (S_IFREG), - S_ISPORT (S_IFREG), - S_ISCTG (S_IFREG), - S_ISOFD (S_IFREG), - S_ISOFL (S_IFREG), - S_ISWHT (S_IFREG) - }; - -/* Sanity checks. */ - -verify (S_IRWXU == (S_IRUSR | S_IWUSR | S_IXUSR)); -verify (S_IRWXG == (S_IRGRP | S_IWGRP | S_IXGRP)); -verify (S_IRWXO == (S_IROTH | S_IWOTH | S_IXOTH)); - -#ifdef S_IFBLK -verify (S_ISBLK (S_IFBLK)); -#endif -verify (!S_ISBLK (S_IFCHR)); -verify (!S_ISBLK (S_IFDIR)); -verify (!S_ISBLK (S_IFIFO)); -verify (!S_ISBLK (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISBLK (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISBLK (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISCHR (S_IFBLK)); -#endif -verify (S_ISCHR (S_IFCHR)); -verify (!S_ISCHR (S_IFDIR)); -verify (!S_ISCHR (S_IFIFO)); -verify (!S_ISCHR (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISCHR (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISCHR (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISDIR (S_IFBLK)); -#endif -verify (!S_ISDIR (S_IFCHR)); -verify (S_ISDIR (S_IFDIR)); -verify (!S_ISDIR (S_IFIFO)); -verify (!S_ISDIR (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISDIR (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISDIR (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISFIFO (S_IFBLK)); -#endif -verify (!S_ISFIFO (S_IFCHR)); -verify (!S_ISFIFO (S_IFDIR)); -verify (S_ISFIFO (S_IFIFO)); -verify (!S_ISFIFO (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISFIFO (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISFIFO (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISREG (S_IFBLK)); -#endif -verify (!S_ISREG (S_IFCHR)); -verify (!S_ISREG (S_IFDIR)); -verify (!S_ISREG (S_IFIFO)); -verify (S_ISREG (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISREG (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISREG (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISLNK (S_IFBLK)); -#endif -verify (!S_ISLNK (S_IFCHR)); -verify (!S_ISLNK (S_IFDIR)); -verify (!S_ISLNK (S_IFIFO)); -verify (!S_ISLNK (S_IFREG)); -#ifdef S_IFLNK -verify (S_ISLNK (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISLNK (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISSOCK (S_IFBLK)); -#endif -verify (!S_ISSOCK (S_IFCHR)); -verify (!S_ISSOCK (S_IFDIR)); -verify (!S_ISSOCK (S_IFIFO)); -verify (!S_ISSOCK (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISSOCK (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (S_ISSOCK (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISDOOR (S_IFBLK)); -#endif -verify (!S_ISDOOR (S_IFCHR)); -verify (!S_ISDOOR (S_IFDIR)); -verify (!S_ISDOOR (S_IFIFO)); -verify (!S_ISDOOR (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISDOOR (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISDOOR (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISMPB (S_IFBLK)); -#endif -verify (!S_ISMPB (S_IFCHR)); -verify (!S_ISMPB (S_IFDIR)); -verify (!S_ISMPB (S_IFIFO)); -verify (!S_ISMPB (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISMPB (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISMPB (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISMPX (S_IFBLK)); -#endif -verify (!S_ISMPX (S_IFCHR)); -verify (!S_ISMPX (S_IFDIR)); -verify (!S_ISMPX (S_IFIFO)); -verify (!S_ISMPX (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISMPX (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISMPX (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISNAM (S_IFBLK)); -#endif -verify (!S_ISNAM (S_IFCHR)); -verify (!S_ISNAM (S_IFDIR)); -verify (!S_ISNAM (S_IFIFO)); -verify (!S_ISNAM (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISNAM (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISNAM (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISNWK (S_IFBLK)); -#endif -verify (!S_ISNWK (S_IFCHR)); -verify (!S_ISNWK (S_IFDIR)); -verify (!S_ISNWK (S_IFIFO)); -verify (!S_ISNWK (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISNWK (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISNWK (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISPORT (S_IFBLK)); -#endif -verify (!S_ISPORT (S_IFCHR)); -verify (!S_ISPORT (S_IFDIR)); -verify (!S_ISPORT (S_IFIFO)); -verify (!S_ISPORT (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISPORT (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISPORT (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISCTG (S_IFBLK)); -#endif -verify (!S_ISCTG (S_IFCHR)); -verify (!S_ISCTG (S_IFDIR)); -verify (!S_ISCTG (S_IFIFO)); -verify (!S_ISCTG (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISCTG (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISCTG (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISOFD (S_IFBLK)); -#endif -verify (!S_ISOFD (S_IFCHR)); -verify (!S_ISOFD (S_IFDIR)); -verify (!S_ISOFD (S_IFIFO)); -verify (!S_ISOFD (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISOFD (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISOFD (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISOFL (S_IFBLK)); -#endif -verify (!S_ISOFL (S_IFCHR)); -verify (!S_ISOFL (S_IFDIR)); -verify (!S_ISOFL (S_IFIFO)); -verify (!S_ISOFL (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISOFL (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISOFL (S_IFSOCK)); -#endif - -#ifdef S_IFBLK -verify (!S_ISWHT (S_IFBLK)); -#endif -verify (!S_ISWHT (S_IFCHR)); -verify (!S_ISWHT (S_IFDIR)); -verify (!S_ISWHT (S_IFIFO)); -verify (!S_ISWHT (S_IFREG)); -#ifdef S_IFLNK -verify (!S_ISWHT (S_IFLNK)); -#endif -#ifdef S_IFSOCK -verify (!S_ISWHT (S_IFSOCK)); -#endif - -/* POSIX 2008 requires traditional encoding of permission constants. */ -verify (S_IRWXU == 00700); -verify (S_IRUSR == 00400); -verify (S_IWUSR == 00200); -verify (S_IXUSR == 00100); -verify (S_IRWXG == 00070); -verify (S_IRGRP == 00040); -verify (S_IWGRP == 00020); -verify (S_IXGRP == 00010); -verify (S_IRWXO == 00007); -verify (S_IROTH == 00004); -verify (S_IWOTH == 00002); -verify (S_IXOTH == 00001); -verify (S_ISUID == 04000); -verify (S_ISGID == 02000); -verify (S_ISVTX == 01000); - -#if ((0 <= UTIME_NOW && UTIME_NOW < 1000000000) \ - || (0 <= UTIME_OMIT && UTIME_OMIT < 1000000000) \ - || UTIME_NOW == UTIME_OMIT) -invalid UTIME macros -#endif - -/* Check the existence of some types. */ -nlink_t t1; -off_t t2; -mode_t t3; - -struct timespec st; - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-sys_time.c b/gl/tests/test-sys_time.c deleted file mode 100644 index 44535b99dd..0000000000 --- a/gl/tests/test-sys_time.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -/* Check that the 'struct timeval' type is defined. */ -struct timeval a; - -/* Check that a.tv_sec is wide enough to hold a time_t, ignoring - signedness issues. */ -typedef int verify_tv_sec_type[sizeof (time_t) <= sizeof (a.tv_sec) ? 1 : -1]; - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-sys_types.c b/gl/tests/test-sys_types.c deleted file mode 100644 index 7f8fb6d121..0000000000 --- a/gl/tests/test-sys_types.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Test of substitute. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2011. */ - -#include - -#include - -/* Check that the types are all defined. */ -pid_t t1; -size_t t2; -ssize_t t3; -off_t t4; -mode_t t5; - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-sys_uio.c b/gl/tests/test-sys_uio.c deleted file mode 100644 index c433847918..0000000000 --- a/gl/tests/test-sys_uio.c +++ /dev/null @@ -1,32 +0,0 @@ -/* Test of substitute. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Eric Blake , 2011. */ - -#include - -#include - -/* Check that necessary types are defined. */ -size_t a; -ssize_t b; -struct iovec c; - -int -main (void) -{ - return a + b + !!c.iov_base + c.iov_len; -} diff --git a/gl/tests/test-sys_wait.h b/gl/tests/test-sys_wait.h deleted file mode 100644 index 7389be4256..0000000000 --- a/gl/tests/test-sys_wait.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Test of macros shared between and . - Copyright (C) 2010-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Eric Blake , 2010. */ - -static int -test_sys_wait_macros (void) -{ - /* Check subset of macros that must be visible here. - Note that some of these macros are only portable when operating - on an lvalue. */ - int i; - for (i = 0; i < 0x8000; i = (i ? i << 1 : 1)) - { - /* POSIX requires that for all valid process statuses, that - exactly one of these three macros is true. But not all - possible 16-bit values map to valid process status. - Traditionally, 8 of the bits are for WIFEXITED, 7 of the bits - to tell between WIFSIGNALED and WIFSTOPPED, and either 0x80 - or 0x8000 to flag that core was also dumped. Since we don't - know which byte is WIFEXITED, we skip the both possible bits - that can signal core dump. */ - if (i == 0x80) - continue; - if (!!WIFSIGNALED (i) + !!WIFEXITED (i) + !!WIFSTOPPED (i) != 1) - return 1; - } - i = WEXITSTATUS (i) + WSTOPSIG (i) + WTERMSIG (i); - - switch (i) - { -#if 0 - /* Gnulib doesn't guarantee these, yet. */ - case WNOHANG: - case WUNTRACED: -#endif - break; - } - return 0; -} diff --git a/gl/tests/test-time.c b/gl/tests/test-time.c deleted file mode 100644 index dec2b1338a..0000000000 --- a/gl/tests/test-time.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include "verify.h" - -/* Check that the types are all defined. */ -struct timespec t1; -#if 0 -/* POSIX:2008 does not require pid_t in unconditionally, and indeed - it's missing on Mac OS X 10.5, FreeBSD 6.4, OpenBSD 4.9, mingw. */ -pid_t t2; -#endif - -/* Check that NULL can be passed through varargs as a pointer type, - per POSIX 2008. */ -verify (sizeof NULL == sizeof (void *)); - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-unistd.c b/gl/tests/test-unistd.c deleted file mode 100644 index 463ef578cc..0000000000 --- a/gl/tests/test-unistd.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include "verify.h" - -/* Check that NULL can be passed through varargs as a pointer type, - per POSIX 2008. */ -verify (sizeof NULL == sizeof (void *)); - -/* Check that the various SEEK_* macros are defined. */ -int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; - -/* Check that the various *_FILENO macros are defined. */ -#if ! (defined STDIN_FILENO \ - && (STDIN_FILENO + STDOUT_FILENO + STDERR_FILENO == 3)) -missing or broken *_FILENO macros -#endif - -/* Check that the types are all defined. */ -size_t t1; -ssize_t t2; -#ifdef TODO /* Not implemented in gnulib yet */ -uid_t t3; -gid_t t4; -#endif -off_t t5; -pid_t t6; -#ifdef TODO -useconds_t t7; -intptr_t t8; -#endif - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/test-vasnprintf.c b/gl/tests/test-vasnprintf.c deleted file mode 100644 index a75c004ffc..0000000000 --- a/gl/tests/test-vasnprintf.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Test of vasnprintf() and asnprintf() functions. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include "vasnprintf.h" - -#include -#include -#include - -#include "macros.h" - -static void -test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) -{ - char buf[8]; - int size; - - for (size = 0; size <= 8; size++) - { - size_t length = size; - char *result = my_asnprintf (NULL, &length, "%d", 12345); - ASSERT (result != NULL); - ASSERT (strcmp (result, "12345") == 0); - ASSERT (length == 5); - free (result); - } - - for (size = 0; size <= 8; size++) - { - size_t length; - char *result; - - memcpy (buf, "DEADBEEF", 8); - length = size; - result = my_asnprintf (buf, &length, "%d", 12345); - ASSERT (result != NULL); - ASSERT (strcmp (result, "12345") == 0); - ASSERT (length == 5); - if (size < 6) - ASSERT (result != buf); - ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); - if (result != buf) - free (result); - } -} - -static char * -my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) -{ - va_list args; - char *ret; - - va_start (args, format); - ret = vasnprintf (resultbuf, lengthp, format, args); - va_end (args); - return ret; -} - -static void -test_vasnprintf () -{ - test_function (my_asnprintf); -} - -static void -test_asnprintf () -{ - test_function (asnprintf); -} - -int -main (int argc, char *argv[]) -{ - test_vasnprintf (); - test_asnprintf (); - return 0; -} diff --git a/gl/tests/test-vasprintf.c b/gl/tests/test-vasprintf.c deleted file mode 100644 index ebcbfc4d15..0000000000 --- a/gl/tests/test-vasprintf.c +++ /dev/null @@ -1,103 +0,0 @@ -/* Test of vasprintf() and asprintf() functions. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (asprintf, int, (char **, char const *, ...)); -SIGNATURE_CHECK (vasprintf, int, (char **, char const *, va_list)); - -#include -#include -#include - -#include "macros.h" - -static int -my_asprintf (char **result, const char *format, ...) -{ - va_list args; - int ret; - - va_start (args, format); - ret = vasprintf (result, format, args); - va_end (args); - return ret; -} - -static void -test_vasprintf () -{ - int repeat; - - for (repeat = 0; repeat <= 8; repeat++) - { - char *result; - int retval = my_asprintf (&result, "%d", 12345); - ASSERT (retval == 5); - ASSERT (result != NULL); - ASSERT (strcmp (result, "12345") == 0); - free (result); - } - - for (repeat = 0; repeat <= 8; repeat++) - { - char *result; - int retval = my_asprintf (&result, "%08lx", 12345UL); - ASSERT (retval == 8); - ASSERT (result != NULL); - ASSERT (strcmp (result, "00003039") == 0); - free (result); - } -} - -static void -test_asprintf () -{ - int repeat; - - for (repeat = 0; repeat <= 8; repeat++) - { - char *result; - int retval = asprintf (&result, "%d", 12345); - ASSERT (retval == 5); - ASSERT (result != NULL); - ASSERT (strcmp (result, "12345") == 0); - free (result); - } - - for (repeat = 0; repeat <= 8; repeat++) - { - char *result; - int retval = asprintf (&result, "%08lx", 12345UL); - ASSERT (retval == 8); - ASSERT (result != NULL); - ASSERT (strcmp (result, "00003039") == 0); - free (result); - } -} - -int -main (int argc, char *argv[]) -{ - test_vasprintf (); - test_asprintf (); - return 0; -} diff --git a/gl/tests/test-vc-list-files-cvs.sh b/gl/tests/test-vc-list-files-cvs.sh deleted file mode 100755 index 6262944412..0000000000 --- a/gl/tests/test-vc-list-files-cvs.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh -# Unit tests for vc-list-files -# Copyright (C) 2008-2016 Free Software Foundation, Inc. -# This file is part of the GNUlib Library. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . */ - -: ${srcdir=.} -. "$srcdir/init.sh"; path_prepend_ "$abs_aux_dir" . - -tmpdir=vc-cvs -repo=`pwd`/$tmpdir/repo - -fail=0 -for i in with-cvsu without; do - # On the first iteration, test using cvsu, if it's in your path. - # On the second iteration, ensure that cvsu fails, so we'll - # exercise the awk-using code. - if test $i = without; then - printf '%s\n' '#!/bin/sh' 'exit 1' > cvsu - chmod a+x cvsu - PATH=`pwd`:$PATH - export PATH - fi - ok=0 - mkdir $tmpdir && cd $tmpdir && - # without cvs, skip the test - { ( cvs -Q -d "$repo" init ) > /dev/null 2>&1 \ - || skip_ "cvs not found in PATH"; } && - mkdir w && cd w && - mkdir d && - touch d/a b c && - cvs -Q -d "$repo" import -m imp m M M0 && - cvs -Q -d "$repo" co m && cd m && - printf '%s\n' b c d/a > expected && - vc-list-files | sort > actual && - compare expected actual && - ok=1 - test $ok = 0 && fail=1 -done - -Exit $fail diff --git a/gl/tests/test-vc-list-files-git.sh b/gl/tests/test-vc-list-files-git.sh deleted file mode 100755 index 4358115ffe..0000000000 --- a/gl/tests/test-vc-list-files-git.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -# Unit tests for vc-list-files -# Copyright (C) 2008-2016 Free Software Foundation, Inc. -# This file is part of the GNUlib Library. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . */ - -: ${srcdir=.} -. "$srcdir/init.sh"; path_prepend_ "$abs_aux_dir" . - -tmpdir=vc-git-$$ -GIT_DIR= GIT_WORK_TREE=; unset GIT_DIR GIT_WORK_TREE - -fail=1 -mkdir $tmpdir && cd $tmpdir && - # without git, skip the test - # The double use of 'exit' is needed for the reference to $? inside the trap. - { ( git init -q ) > /dev/null 2>&1 \ - || skip_ "git not found in PATH"; } && - mkdir d && - touch d/a b c && - git config user.email "you@example.com" && - git config user.name "Your Name" && - git add . > /dev/null && - git commit -q -a -m log && - printf '%s\n' b c d/a > expected && - vc-list-files > actual && - compare expected actual && - fail=0 - -Exit $fail diff --git a/gl/tests/test-verify.c b/gl/tests/test-verify.c deleted file mode 100644 index d7ca0538b0..0000000000 --- a/gl/tests/test-verify.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Test the "verify" module. - - Copyright (C) 2005, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible. */ - -#include - -#include "verify.h" - -#ifndef EXP_FAIL -# define EXP_FAIL 0 -#endif - -int x; -enum { a, b, c }; - -#if EXP_FAIL == 1 -verify (x >= 0); /* should give ERROR: non-constant expression */ -#endif -verify (c == 2); /* should be ok */ -#if EXP_FAIL == 2 -verify (1 + 1 == 3); /* should give ERROR */ -#endif -verify (1 == 1); verify (1 == 1); /* should be ok */ - -enum -{ - item = verify_true (1 == 1) * 0 + 17 /* should be ok */ -}; - -static int -function (int n) -{ -#if EXP_FAIL == 3 - verify (n >= 0); /* should give ERROR: non-constant expression */ -#endif - verify (c == 2); /* should be ok */ -#if EXP_FAIL == 4 - verify (1 + 1 == 3); /* should give ERROR */ -#endif - verify (1 == 1); verify (1 == 1); /* should be ok */ - - if (n) - return ((void) verify_expr (1 == 1, 1), verify_expr (1 == 1, 8)); /* should be ok */ -#if EXP_FAIL == 5 - return verify_expr (1 == 2, 5); /* should give ERROR */ -#endif - return 0; -} - -int -main (void) -{ - return !(function (0) == 0 && function (1) == 8); -} diff --git a/gl/tests/test-verify.sh b/gl/tests/test-verify.sh deleted file mode 100755 index 3e7676148a..0000000000 --- a/gl/tests/test-verify.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -. "${srcdir=.}/init.sh" - -# We are not interested in triggering bugs in the compilers and tools -# (such as gcc 4.3.1 on openSUSE 11.0). -unset MALLOC_PERTURB_ - -# Rather than figure out how to invoke the compiler with the right -# include path ourselves, we let make do it: -(cd "$initial_cwd_" && rm -f test-verify.o \ - && $MAKE test-verify.o >/dev/null 2>&1) \ - || skip_ "cannot compile error-free" - -# Now, prove that we encounter all expected compilation failures: -: >out -: >err -for i in 1 2 3 4 5; do - (cd "$initial_cwd_" - rm -f test-verify.o - $MAKE CFLAGS=-DEXP_FAIL=$i test-verify.o) >>out 2>>err \ - && { warn_ "compiler didn't detect verification failure $i"; fail=1; } -done - -Exit $fail diff --git a/gl/tests/test-vsnprintf.c b/gl/tests/test-vsnprintf.c deleted file mode 100644 index 0a2ff02991..0000000000 --- a/gl/tests/test-vsnprintf.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Test of vsnprintf() function. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include "signature.h" -SIGNATURE_CHECK (vsnprintf, int, (char *, size_t, char const *, va_list)); - -#include -#include - -#include "macros.h" - -static int -my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} - -int -main (int argc, char *argv[]) -{ - char buf[8]; - int size; - int retval; - - retval = my_snprintf (NULL, 0, "%d", 12345); - ASSERT (retval == 5); - - for (size = 0; size <= 8; size++) - { - memcpy (buf, "DEADBEEF", 8); - retval = my_snprintf (buf, size, "%d", 12345); - ASSERT (retval == 5); - if (size < 6) - { - if (size > 0) - { - ASSERT (memcmp (buf, "12345", size - 1) == 0); - ASSERT (buf[size - 1] == '\0' || buf[size - 1] == '0' + size); - } -#if !CHECK_VSNPRINTF_POSIX - if (size > 0) -#endif - ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); - } - else - { - ASSERT (memcmp (buf, "12345\0EF", 8) == 0); - } - } - - /* Test the support of the POSIX/XSI format strings with positions. */ - { - char result[100]; - retval = my_snprintf (result, sizeof (result), "%2$d %1$d", 33, 55); - ASSERT (strcmp (result, "55 33") == 0); - ASSERT (retval == strlen (result)); - } - - return 0; -} diff --git a/gl/tests/test-wchar.c b/gl/tests/test-wchar.c deleted file mode 100644 index e118048224..0000000000 --- a/gl/tests/test-wchar.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Test of substitute. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2007. */ - -#include - -#include - -#include "verify.h" - -/* Check that the types wchar_t and wint_t are defined. */ -wchar_t a = 'c'; -wint_t b = 'x'; - -/* Check that NULL can be passed through varargs as a pointer type, - per POSIX 2008. */ -verify (sizeof NULL == sizeof (void *)); - -int -main (void) -{ - return 0; -} diff --git a/gl/tests/zerosize-ptr.h b/gl/tests/zerosize-ptr.h deleted file mode 100644 index e6ff672b64..0000000000 --- a/gl/tests/zerosize-ptr.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Return a pointer to a zero-size object in memory. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* ISO C 99 does not allow memcmp(), memchr() etc. to be invoked with a NULL - argument. Therefore this file produces a non-NULL pointer which cannot - be dereferenced, if possible. */ - -#include - -/* Test whether mmap() and mprotect() are available. - We don't use HAVE_MMAP, because AC_FUNC_MMAP would not define it on HP-UX. - HAVE_MPROTECT is not enough, because mingw does not have mmap() but has an - mprotect() function in libgcc.a. */ -#if HAVE_SYS_MMAN_H && HAVE_MPROTECT -# include -# include -# include -# include -/* Define MAP_FILE when it isn't otherwise. */ -# ifndef MAP_FILE -# define MAP_FILE 0 -# endif -#endif - -/* Return a pointer to a zero-size object in memory (that is, actually, a - pointer to a page boundary where the previous page is readable and writable - and the next page is neither readable not writable), if possible. - Return NULL otherwise. */ - -static void * -zerosize_ptr (void) -{ -/* Use mmap and mprotect when they exist. Don't test HAVE_MMAP, because it is - not defined on HP-UX 11 (since it does not support MAP_FIXED). */ -#if HAVE_SYS_MMAN_H && HAVE_MPROTECT -# if HAVE_MAP_ANONYMOUS - const int flags = MAP_ANONYMOUS | MAP_PRIVATE; - const int fd = -1; -# else /* !HAVE_MAP_ANONYMOUS */ - const int flags = MAP_FILE | MAP_PRIVATE; - int fd = open ("/dev/zero", O_RDONLY, 0666); - if (fd >= 0) -# endif - { - int pagesize = getpagesize (); - char *two_pages = - (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, - flags, fd, 0); - if (two_pages != (char *)(-1) - && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) - return two_pages + pagesize; - } -#endif - return NULL; -} diff --git a/gl/time.in.h b/gl/time.in.h deleted file mode 100644 index a2c321ed0a..0000000000 --- a/gl/time.in.h +++ /dev/null @@ -1,297 +0,0 @@ -/* A more-standard . - - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* Don't get in the way of glibc when it includes time.h merely to - declare a few standard symbols, rather than to declare all the - symbols. (However, skip this for MinGW as it treats __need_time_t - incompatibly.) Also, Solaris 8 eventually includes itself - recursively; if that is happening, just include the system - without adding our own declarations. */ -#if (((defined __need_time_t || defined __need_clock_t \ - || defined __need_timespec) \ - && !defined __MINGW32__) \ - || defined _@GUARD_PREFIX@_TIME_H) - -# @INCLUDE_NEXT@ @NEXT_TIME_H@ - -#else - -# define _@GUARD_PREFIX@_TIME_H - -# @INCLUDE_NEXT@ @NEXT_TIME_H@ - -/* NetBSD 5.0 mis-defines NULL. */ -# include - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3). - Or they define it with the wrong member names or define it in - (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, - but the pthreads-win32 library defines it in . */ -# if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@ -# if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ -# include -# elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ -# include -# elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ -# include -# else - -# ifdef __cplusplus -extern "C" { -# endif - -# if !GNULIB_defined_struct_timespec -# undef timespec -# define timespec rpl_timespec -struct timespec -{ - time_t tv_sec; - long int tv_nsec; -}; -# define GNULIB_defined_struct_timespec 1 -# endif - -# ifdef __cplusplus -} -# endif - -# endif -# endif - -# if !GNULIB_defined_struct_time_t_must_be_integral -/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires - time_t to be an integer type, even though C99 permits floating - point. We don't know of any implementation that uses floating - point, and it is much easier to write code that doesn't have to - worry about that corner case, so we force the issue. */ -struct __time_t_must_be_integral { - unsigned int __floating_time_t_unsupported : (time_t) 1; -}; -# define GNULIB_defined_struct_time_t_must_be_integral 1 -# endif - -/* Sleep for at least RQTP seconds unless interrupted, If interrupted, - return -1 and store the remaining time into RMTP. See - . */ -# if @GNULIB_NANOSLEEP@ -# if @REPLACE_NANOSLEEP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define nanosleep rpl_nanosleep -# endif -_GL_FUNCDECL_RPL (nanosleep, int, - (struct timespec const *__rqtp, struct timespec *__rmtp) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (nanosleep, int, - (struct timespec const *__rqtp, struct timespec *__rmtp)); -# else -# if ! @HAVE_NANOSLEEP@ -_GL_FUNCDECL_SYS (nanosleep, int, - (struct timespec const *__rqtp, struct timespec *__rmtp) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (nanosleep, int, - (struct timespec const *__rqtp, struct timespec *__rmtp)); -# endif -_GL_CXXALIASWARN (nanosleep); -# endif - -/* Return the 'time_t' representation of TP and normalize TP. */ -# if @GNULIB_MKTIME@ -# if @REPLACE_MKTIME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mktime rpl_mktime -# endif -_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); -# else -_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); -# endif -_GL_CXXALIASWARN (mktime); -# endif - -/* Convert TIMER to RESULT, assuming local time and UTC respectively. See - and - . */ -# if @GNULIB_TIME_R@ -# if @REPLACE_LOCALTIME_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef localtime_r -# define localtime_r rpl_localtime_r -# endif -_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result)); -# else -# if ! @HAVE_DECL_LOCALTIME_R@ -_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result)); -# endif -# if @HAVE_DECL_LOCALTIME_R@ -_GL_CXXALIASWARN (localtime_r); -# endif -# if @REPLACE_LOCALTIME_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gmtime_r -# define gmtime_r rpl_gmtime_r -# endif -_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result)); -# else -# if ! @HAVE_DECL_LOCALTIME_R@ -_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result)); -# endif -# if @HAVE_DECL_LOCALTIME_R@ -_GL_CXXALIASWARN (gmtime_r); -# endif -# endif - -/* Convert TIMER to RESULT, assuming local time and UTC respectively. See - and - . */ -# if @GNULIB_GETTIMEOFDAY@ -# if @REPLACE_LOCALTIME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef localtime -# define localtime rpl_localtime -# endif -_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); -# else -_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); -# endif -_GL_CXXALIASWARN (localtime); -# endif - -# if @GNULIB_GETTIMEOFDAY@ -# if @REPLACE_GMTIME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gmtime -# define gmtime rpl_gmtime -# endif -_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); -# else -_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); -# endif -_GL_CXXALIASWARN (gmtime); -# endif - -/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store - the resulting broken-down time into TM. See - . */ -# if @GNULIB_STRPTIME@ -# if ! @HAVE_STRPTIME@ -_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, - char const *restrict __format, - struct tm *restrict __tm) - _GL_ARG_NONNULL ((1, 2, 3))); -# endif -_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, - char const *restrict __format, - struct tm *restrict __tm)); -_GL_CXXALIASWARN (strptime); -# endif - -# if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ -typedef struct tm_zone *timezone_t; -_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); -_GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); -_GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); -_GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); -_GL_FUNCDECL_SYS (localtime_rz, struct tm *, - (timezone_t __tz, time_t const *restrict __timer, - struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_SYS (localtime_rz, struct tm *, - (timezone_t __tz, time_t const *restrict __timer, - struct tm *restrict __result)); -_GL_FUNCDECL_SYS (mktime_z, time_t, - (timezone_t __tz, struct tm *restrict __result) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_SYS (mktime_z, time_t, - (timezone_t __tz, struct tm *restrict __result)); -# endif - -/* Convert TM to a time_t value, assuming UTC. */ -# if @GNULIB_TIMEGM@ -# if @REPLACE_TIMEGM@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef timegm -# define timegm rpl_timegm -# endif -_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); -# else -# if ! @HAVE_TIMEGM@ -_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); -# endif -_GL_CXXALIASWARN (timegm); -# endif - -/* Encourage applications to avoid unsafe functions that can overrun - buffers when given outlandish struct tm values. Portable - applications should use strftime (or even sprintf) instead. */ -# if defined GNULIB_POSIXCHECK -# undef asctime -_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " - "better use strftime (or even sprintf) instead"); -# endif -# if defined GNULIB_POSIXCHECK -# undef asctime_r -_GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - " - "better use strftime (or even sprintf) instead"); -# endif -# if defined GNULIB_POSIXCHECK -# undef ctime -_GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - " - "better use strftime (or even sprintf) instead"); -# endif -# if defined GNULIB_POSIXCHECK -# undef ctime_r -_GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - " - "better use strftime (or even sprintf) instead"); -# endif - -#endif diff --git a/gl/time_r.c b/gl/time_r.c deleted file mode 100644 index cd066f0fcc..0000000000 --- a/gl/time_r.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Reentrant time functions like localtime_r. - - Copyright (C) 2003, 2006-2007, 2010-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -/* Written by Paul Eggert. */ - -#include - -#include - -static struct tm * -copy_tm_result (struct tm *dest, struct tm const *src) -{ - if (! src) - return 0; - *dest = *src; - return dest; -} - - -struct tm * -gmtime_r (time_t const * restrict t, struct tm * restrict tp) -{ - return copy_tm_result (tp, gmtime (t)); -} - -struct tm * -localtime_r (time_t const * restrict t, struct tm * restrict tp) -{ - return copy_tm_result (tp, localtime (t)); -} diff --git a/gl/unistd.c b/gl/unistd.c deleted file mode 100644 index 72bad1c052..0000000000 --- a/gl/unistd.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#define _GL_UNISTD_INLINE _GL_EXTERN_INLINE -#include "unistd.h" -typedef int dummy; diff --git a/gl/unistd.in.h b/gl/unistd.in.h deleted file mode 100644 index fd16379ffb..0000000000 --- a/gl/unistd.in.h +++ /dev/null @@ -1,1586 +0,0 @@ -/* Substitute for and wrapper around . - Copyright (C) 2003-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_UNISTD_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#ifdef _GL_INCLUDING_UNISTD_H -/* Special invocation convention: - - On Mac OS X 10.3.9 we have a sequence of nested includes - -> -> -> - In this situation, the functions are not yet declared, therefore we cannot - provide the C++ aliases. */ - -#@INCLUDE_NEXT@ @NEXT_UNISTD_H@ - -#else -/* Normal invocation convention. */ - -/* The include_next requires a split double-inclusion guard. */ -#if @HAVE_UNISTD_H@ -# define _GL_INCLUDING_UNISTD_H -# @INCLUDE_NEXT@ @NEXT_UNISTD_H@ -# undef _GL_INCLUDING_UNISTD_H -#endif - -/* Get all possible declarations of gethostname(). */ -#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ - && !defined _GL_INCLUDING_WINSOCK2_H -# define _GL_INCLUDING_WINSOCK2_H -# include -# undef _GL_INCLUDING_WINSOCK2_H -#endif - -#if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H -#define _@GUARD_PREFIX@_UNISTD_H - -/* NetBSD 5.0 mis-defines NULL. Also get size_t. */ -#include - -/* mingw doesn't define the SEEK_* or *_FILENO macros in . */ -/* Cygwin 1.7.1 declares symlinkat in , not in . */ -/* But avoid namespace pollution on glibc systems. */ -#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ - || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ - && defined __CYGWIN__)) \ - && ! defined __GLIBC__ -# include -#endif - -/* Cygwin 1.7.1 declares unlinkat in , not in . */ -/* But avoid namespace pollution on glibc systems. */ -#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \ - && ! defined __GLIBC__ -# include -#endif - -/* mingw fails to declare _exit in . */ -/* mingw, MSVC, BeOS, Haiku declare environ in , not in - . */ -/* Solaris declares getcwd not only in but also in . */ -/* OSF Tru64 Unix cannot see gnulib rpl_strtod when system is - included here. */ -/* But avoid namespace pollution on glibc systems. */ -#if !defined __GLIBC__ && !defined __osf__ -# define __need_system_stdlib_h -# include -# undef __need_system_stdlib_h -#endif - -/* Native Windows platforms declare chdir, getcwd, rmdir in - and/or , not in . - They also declare access(), chmod(), close(), dup(), dup2(), isatty(), - lseek(), read(), unlink(), write() in . */ -#if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ - || defined GNULIB_POSIXCHECK) \ - && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) -# include /* mingw32, mingw64 */ -# include /* mingw64, MSVC 9 */ -#elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \ - || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \ - || defined GNULIB_POSIXCHECK) \ - && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) -# include -#endif - -/* AIX and OSF/1 5.1 declare getdomainname in , not in . - NonStop Kernel declares gethostname in , not in . */ -/* But avoid namespace pollution on glibc systems. */ -#if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ - || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ - && !defined __GLIBC__ -# include -#endif - -/* MSVC defines off_t in . - May also define off_t to a 64-bit type on native Windows. */ -#if !@HAVE_UNISTD_H@ || @WINDOWS_64_BIT_OFF_T@ -/* Get off_t. */ -# include -#endif - -#if (@GNULIB_READ@ || @GNULIB_WRITE@ \ - || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ - || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK) -/* Get ssize_t. */ -# include -#endif - -/* Get getopt(), optarg, optind, opterr, optopt. - But avoid namespace pollution on glibc systems. */ -#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT -# define __need_getopt -# include -#endif - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif -_GL_INLINE_HEADER_BEGIN -#ifndef _GL_UNISTD_INLINE -# define _GL_UNISTD_INLINE _GL_INLINE -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - -/* Hide some function declarations from . */ - -#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ -# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef socket -# define socket socket_used_without_including_sys_socket_h -# undef connect -# define connect connect_used_without_including_sys_socket_h -# undef accept -# define accept accept_used_without_including_sys_socket_h -# undef bind -# define bind bind_used_without_including_sys_socket_h -# undef getpeername -# define getpeername getpeername_used_without_including_sys_socket_h -# undef getsockname -# define getsockname getsockname_used_without_including_sys_socket_h -# undef getsockopt -# define getsockopt getsockopt_used_without_including_sys_socket_h -# undef listen -# define listen listen_used_without_including_sys_socket_h -# undef recv -# define recv recv_used_without_including_sys_socket_h -# undef send -# define send send_used_without_including_sys_socket_h -# undef recvfrom -# define recvfrom recvfrom_used_without_including_sys_socket_h -# undef sendto -# define sendto sendto_used_without_including_sys_socket_h -# undef setsockopt -# define setsockopt setsockopt_used_without_including_sys_socket_h -# undef shutdown -# define shutdown shutdown_used_without_including_sys_socket_h -# else - _GL_WARN_ON_USE (socket, - "socket() used without including "); - _GL_WARN_ON_USE (connect, - "connect() used without including "); - _GL_WARN_ON_USE (accept, - "accept() used without including "); - _GL_WARN_ON_USE (bind, - "bind() used without including "); - _GL_WARN_ON_USE (getpeername, - "getpeername() used without including "); - _GL_WARN_ON_USE (getsockname, - "getsockname() used without including "); - _GL_WARN_ON_USE (getsockopt, - "getsockopt() used without including "); - _GL_WARN_ON_USE (listen, - "listen() used without including "); - _GL_WARN_ON_USE (recv, - "recv() used without including "); - _GL_WARN_ON_USE (send, - "send() used without including "); - _GL_WARN_ON_USE (recvfrom, - "recvfrom() used without including "); - _GL_WARN_ON_USE (sendto, - "sendto() used without including "); - _GL_WARN_ON_USE (setsockopt, - "setsockopt() used without including "); - _GL_WARN_ON_USE (shutdown, - "shutdown() used without including "); -# endif -# endif -# if !defined _@GUARD_PREFIX@_SYS_SELECT_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef select -# define select select_used_without_including_sys_select_h -# else - _GL_WARN_ON_USE (select, - "select() used without including "); -# endif -# endif -#endif - - -/* OS/2 EMX lacks these macros. */ -#ifndef STDIN_FILENO -# define STDIN_FILENO 0 -#endif -#ifndef STDOUT_FILENO -# define STDOUT_FILENO 1 -#endif -#ifndef STDERR_FILENO -# define STDERR_FILENO 2 -#endif - -/* Ensure *_OK macros exist. */ -#ifndef F_OK -# define F_OK 0 -# define X_OK 1 -# define W_OK 2 -# define R_OK 4 -#endif - - -/* Declare overridden functions. */ - - -#if defined GNULIB_POSIXCHECK -/* The access() function is a security risk. */ -_GL_WARN_ON_USE (access, "the access function is a security risk - " - "use the gnulib module faccessat instead"); -#endif - - -#if @GNULIB_CHDIR@ -_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); -_GL_CXXALIASWARN (chdir); -#elif defined GNULIB_POSIXCHECK -# undef chdir -# if HAVE_RAW_DECL_CHDIR -_GL_WARN_ON_USE (chown, "chdir is not always in - " - "use gnulib module chdir for portability"); -# endif -#endif - - -#if @GNULIB_CHOWN@ -/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE - to GID (if GID is not -1). Follow symbolic links. - Return 0 if successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if @REPLACE_DUP2@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define dup2 rpl_dup2 -# endif -_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); -_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); -# else -# if !@HAVE_DUP2@ -_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd)); -# endif -_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); -# endif -_GL_CXXALIASWARN (dup2); -#elif defined GNULIB_POSIXCHECK -# undef dup2 -# if HAVE_RAW_DECL_DUP2 -_GL_WARN_ON_USE (dup2, "dup2 is unportable - " - "use gnulib module dup2 for portability"); -# endif -#endif - - -#if @GNULIB_DUP3@ -/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the - specified flags. - The flags are a bitmask, possibly including O_CLOEXEC (defined in ) - and O_TEXT, O_BINARY (defined in "binary-io.h"). - Close NEWFD first if it is open. - Return newfd if successful, otherwise -1 and errno set. - See the Linux man page at - . */ -# if @HAVE_DUP3@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define dup3 rpl_dup3 -# endif -_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); -_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); -# else -_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); -_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); -# endif -_GL_CXXALIASWARN (dup3); -#elif defined GNULIB_POSIXCHECK -# undef dup3 -# if HAVE_RAW_DECL_DUP3 -_GL_WARN_ON_USE (dup3, "dup3 is unportable - " - "use gnulib module dup3 for portability"); -# endif -#endif - - -#if @GNULIB_ENVIRON@ -# if !@HAVE_DECL_ENVIRON@ -/* Set of environment variables and values. An array of strings of the form - "VARIABLE=VALUE", terminated with a NULL. */ -# if defined __APPLE__ && defined __MACH__ -# include -# if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR -# define _GL_USE_CRT_EXTERNS -# endif -# endif -# ifdef _GL_USE_CRT_EXTERNS -# include -# define environ (*_NSGetEnviron ()) -# else -# ifdef __cplusplus -extern "C" { -# endif -extern char **environ; -# ifdef __cplusplus -} -# endif -# endif -# endif -#elif defined GNULIB_POSIXCHECK -# if HAVE_RAW_DECL_ENVIRON -_GL_UNISTD_INLINE char *** -rpl_environ (void) -{ - return &environ; -} -_GL_WARN_ON_USE (rpl_environ, "environ is unportable - " - "use gnulib module environ for portability"); -# undef environ -# define environ (*rpl_environ ()) -# endif -#endif - - -#if @GNULIB_EUIDACCESS@ -/* Like access(), except that it uses the effective user id and group id of - the current process. */ -# if !@HAVE_EUIDACCESS@ -_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); -_GL_CXXALIASWARN (euidaccess); -# if defined GNULIB_POSIXCHECK -/* Like access(), this function is a security risk. */ -_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " - "use the gnulib module faccessat instead"); -# endif -#elif defined GNULIB_POSIXCHECK -# undef euidaccess -# if HAVE_RAW_DECL_EUIDACCESS -_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " - "use gnulib module euidaccess for portability"); -# endif -#endif - - -#if @GNULIB_FACCESSAT@ -# if !@HAVE_FACCESSAT@ -_GL_FUNCDECL_SYS (faccessat, int, - (int fd, char const *file, int mode, int flag) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (faccessat, int, - (int fd, char const *file, int mode, int flag)); -_GL_CXXALIASWARN (faccessat); -#elif defined GNULIB_POSIXCHECK -# undef faccessat -# if HAVE_RAW_DECL_FACCESSAT -_GL_WARN_ON_USE (faccessat, "faccessat is not portable - " - "use gnulib module faccessat for portability"); -# endif -#endif - - -#if @GNULIB_FCHDIR@ -/* Change the process' current working directory to the directory on which - the given file descriptor is open. - Return 0 if successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if ! @HAVE_FCHDIR@ -_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); - -/* Gnulib internal hooks needed to maintain the fchdir metadata. */ -_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) - _GL_ARG_NONNULL ((2)); -_GL_EXTERN_C void _gl_unregister_fd (int fd); -_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); -_GL_EXTERN_C const char *_gl_directory_name (int fd); - -# else -# if !@HAVE_DECL_FCHDIR@ -_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); -# endif -# endif -_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); -_GL_CXXALIASWARN (fchdir); -#elif defined GNULIB_POSIXCHECK -# undef fchdir -# if HAVE_RAW_DECL_FCHDIR -_GL_WARN_ON_USE (fchdir, "fchdir is unportable - " - "use gnulib module fchdir for portability"); -# endif -#endif - - -#if @GNULIB_FCHOWNAT@ -# if @REPLACE_FCHOWNAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fchownat -# define fchownat rpl_fchownat -# endif -_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, - uid_t owner, gid_t group, int flag) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, - uid_t owner, gid_t group, int flag)); -# else -# if !@HAVE_FCHOWNAT@ -_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, - uid_t owner, gid_t group, int flag) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, - uid_t owner, gid_t group, int flag)); -# endif -_GL_CXXALIASWARN (fchownat); -#elif defined GNULIB_POSIXCHECK -# undef fchownat -# if HAVE_RAW_DECL_FCHOWNAT -_GL_WARN_ON_USE (fchownat, "fchownat is not portable - " - "use gnulib module openat for portability"); -# endif -#endif - - -#if @GNULIB_FDATASYNC@ -/* Synchronize changes to a file. - Return 0 if successful, otherwise -1 and errno set. - See POSIX:2008 specification - . */ -# if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ -_GL_FUNCDECL_SYS (fdatasync, int, (int fd)); -# endif -_GL_CXXALIAS_SYS (fdatasync, int, (int fd)); -_GL_CXXALIASWARN (fdatasync); -#elif defined GNULIB_POSIXCHECK -# undef fdatasync -# if HAVE_RAW_DECL_FDATASYNC -_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " - "use gnulib module fdatasync for portability"); -# endif -#endif - - -#if @GNULIB_FSYNC@ -/* Synchronize changes, including metadata, to a file. - Return 0 if successful, otherwise -1 and errno set. - See POSIX:2008 specification - . */ -# if !@HAVE_FSYNC@ -_GL_FUNCDECL_SYS (fsync, int, (int fd)); -# endif -_GL_CXXALIAS_SYS (fsync, int, (int fd)); -_GL_CXXALIASWARN (fsync); -#elif defined GNULIB_POSIXCHECK -# undef fsync -# if HAVE_RAW_DECL_FSYNC -_GL_WARN_ON_USE (fsync, "fsync is unportable - " - "use gnulib module fsync for portability"); -# endif -#endif - - -#if @GNULIB_FTRUNCATE@ -/* Change the size of the file to which FD is opened to become equal to LENGTH. - Return 0 if successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if @REPLACE_FTRUNCATE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ftruncate -# define ftruncate rpl_ftruncate -# endif -_GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); -_GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); -# else -# if !@HAVE_FTRUNCATE@ -_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); -# endif -_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); -# endif -_GL_CXXALIASWARN (ftruncate); -#elif defined GNULIB_POSIXCHECK -# undef ftruncate -# if HAVE_RAW_DECL_FTRUNCATE -_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " - "use gnulib module ftruncate for portability"); -# endif -#endif - - -#if @GNULIB_GETCWD@ -/* Get the name of the current working directory, and put it in SIZE bytes - of BUF. - Return BUF if successful, or NULL if the directory couldn't be determined - or SIZE was too small. - See the POSIX:2008 specification - . - Additionally, the gnulib module 'getcwd' guarantees the following GNU - extension: If BUF is NULL, an array is allocated with 'malloc'; the array - is SIZE bytes long, unless SIZE == 0, in which case it is as big as - necessary. */ -# if @REPLACE_GETCWD@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define getcwd rpl_getcwd -# endif -_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); -_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); -# else -/* Need to cast, because on mingw, the second parameter is - int size. */ -_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); -# endif -_GL_CXXALIASWARN (getcwd); -#elif defined GNULIB_POSIXCHECK -# undef getcwd -# if HAVE_RAW_DECL_GETCWD -_GL_WARN_ON_USE (getcwd, "getcwd is unportable - " - "use gnulib module getcwd for portability"); -# endif -#endif - - -#if @GNULIB_GETDOMAINNAME@ -/* Return the NIS domain name of the machine. - WARNING! The NIS domain name is unrelated to the fully qualified host name - of the machine. It is also unrelated to email addresses. - WARNING! The NIS domain name is usually the empty string or "(none)" when - not using NIS. - - Put up to LEN bytes of the NIS domain name into NAME. - Null terminate it if the name is shorter than LEN. - If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. - Return 0 if successful, otherwise set errno and return -1. */ -# if @REPLACE_GETDOMAINNAME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getdomainname -# define getdomainname rpl_getdomainname -# endif -_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); -# else -# if !@HAVE_DECL_GETDOMAINNAME@ -_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); -# endif -_GL_CXXALIASWARN (getdomainname); -#elif defined GNULIB_POSIXCHECK -# undef getdomainname -# if HAVE_RAW_DECL_GETDOMAINNAME -_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " - "use gnulib module getdomainname for portability"); -# endif -#endif - - -#if @GNULIB_GETDTABLESIZE@ -/* Return the maximum number of file descriptors in the current process. - In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ -# if @REPLACE_GETDTABLESIZE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getdtablesize -# define getdtablesize rpl_getdtablesize -# endif -_GL_FUNCDECL_RPL (getdtablesize, int, (void)); -_GL_CXXALIAS_RPL (getdtablesize, int, (void)); -# else -# if !@HAVE_GETDTABLESIZE@ -_GL_FUNCDECL_SYS (getdtablesize, int, (void)); -# endif -_GL_CXXALIAS_SYS (getdtablesize, int, (void)); -# endif -_GL_CXXALIASWARN (getdtablesize); -#elif defined GNULIB_POSIXCHECK -# undef getdtablesize -# if HAVE_RAW_DECL_GETDTABLESIZE -_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " - "use gnulib module getdtablesize for portability"); -# endif -#endif - - -#if @GNULIB_GETGROUPS@ -/* Return the supplemental groups that the current process belongs to. - It is unspecified whether the effective group id is in the list. - If N is 0, return the group count; otherwise, N describes how many - entries are available in GROUPS. Return -1 and set errno if N is - not 0 and not large enough. Fails with ENOSYS on some systems. */ -# if @REPLACE_GETGROUPS@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getgroups -# define getgroups rpl_getgroups -# endif -_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); -_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); -# else -# if !@HAVE_GETGROUPS@ -_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); -# endif -_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); -# endif -_GL_CXXALIASWARN (getgroups); -#elif defined GNULIB_POSIXCHECK -# undef getgroups -# if HAVE_RAW_DECL_GETGROUPS -_GL_WARN_ON_USE (getgroups, "getgroups is unportable - " - "use gnulib module getgroups for portability"); -# endif -#endif - - -#if @GNULIB_GETHOSTNAME@ -/* Return the standard host name of the machine. - WARNING! The host name may or may not be fully qualified. - - Put up to LEN bytes of the host name into NAME. - Null terminate it if the name is shorter than LEN. - If the host name is longer than LEN, set errno = EINVAL and return -1. - Return 0 if successful, otherwise set errno and return -1. */ -# if @UNISTD_H_HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gethostname -# define gethostname rpl_gethostname -# endif -_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); -# else -# if !@HAVE_GETHOSTNAME@ -_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second - parameter is - int len. */ -_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); -# endif -_GL_CXXALIASWARN (gethostname); -#elif @UNISTD_H_HAVE_WINSOCK2_H@ -# undef gethostname -# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname -#elif defined GNULIB_POSIXCHECK -# undef gethostname -# if HAVE_RAW_DECL_GETHOSTNAME -_GL_WARN_ON_USE (gethostname, "gethostname is unportable - " - "use gnulib module gethostname for portability"); -# endif -#endif - - -#if @GNULIB_GETLOGIN@ -/* Returns the user's login name, or NULL if it cannot be found. Upon error, - returns NULL with errno set. - - See . - - Most programs don't need to use this function, because the information is - available through environment variables: - ${LOGNAME-$USER} on Unix platforms, - $USERNAME on native Windows platforms. - */ -# if !@HAVE_GETLOGIN@ -_GL_FUNCDECL_SYS (getlogin, char *, (void)); -# endif -_GL_CXXALIAS_SYS (getlogin, char *, (void)); -_GL_CXXALIASWARN (getlogin); -#elif defined GNULIB_POSIXCHECK -# undef getlogin -# if HAVE_RAW_DECL_GETLOGIN -_GL_WARN_ON_USE (getlogin, "getlogin is unportable - " - "use gnulib module getlogin for portability"); -# endif -#endif - - -#if @GNULIB_GETLOGIN_R@ -/* Copies the user's login name to NAME. - The array pointed to by NAME has room for SIZE bytes. - - Returns 0 if successful. Upon error, an error number is returned, or -1 in - the case that the login name cannot be found but no specific error is - provided (this case is hopefully rare but is left open by the POSIX spec). - - See . - - Most programs don't need to use this function, because the information is - available through environment variables: - ${LOGNAME-$USER} on Unix platforms, - $USERNAME on native Windows platforms. - */ -# if @REPLACE_GETLOGIN_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define getlogin_r rpl_getlogin_r -# endif -_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); -# else -# if !@HAVE_DECL_GETLOGIN_R@ -_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on Solaris 10 systems, the second argument is - int size. */ -_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); -# endif -_GL_CXXALIASWARN (getlogin_r); -#elif defined GNULIB_POSIXCHECK -# undef getlogin_r -# if HAVE_RAW_DECL_GETLOGIN_R -_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " - "use gnulib module getlogin_r for portability"); -# endif -#endif - - -#if @GNULIB_GETPAGESIZE@ -# if @REPLACE_GETPAGESIZE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define getpagesize rpl_getpagesize -# endif -_GL_FUNCDECL_RPL (getpagesize, int, (void)); -_GL_CXXALIAS_RPL (getpagesize, int, (void)); -# else -# if !@HAVE_GETPAGESIZE@ -# if !defined getpagesize -/* This is for POSIX systems. */ -# if !defined _gl_getpagesize && defined _SC_PAGESIZE -# if ! (defined __VMS && __VMS_VER < 70000000) -# define _gl_getpagesize() sysconf (_SC_PAGESIZE) -# endif -# endif -/* This is for older VMS. */ -# if !defined _gl_getpagesize && defined __VMS -# ifdef __ALPHA -# define _gl_getpagesize() 8192 -# else -# define _gl_getpagesize() 512 -# endif -# endif -/* This is for BeOS. */ -# if !defined _gl_getpagesize && @HAVE_OS_H@ -# include -# if defined B_PAGE_SIZE -# define _gl_getpagesize() B_PAGE_SIZE -# endif -# endif -/* This is for AmigaOS4.0. */ -# if !defined _gl_getpagesize && defined __amigaos4__ -# define _gl_getpagesize() 2048 -# endif -/* This is for older Unix systems. */ -# if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ -# include -# ifdef EXEC_PAGESIZE -# define _gl_getpagesize() EXEC_PAGESIZE -# else -# ifdef NBPG -# ifndef CLSIZE -# define CLSIZE 1 -# endif -# define _gl_getpagesize() (NBPG * CLSIZE) -# else -# ifdef NBPC -# define _gl_getpagesize() NBPC -# endif -# endif -# endif -# endif -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define getpagesize() _gl_getpagesize () -# else -# if !GNULIB_defined_getpagesize_function -_GL_UNISTD_INLINE int -getpagesize () -{ - return _gl_getpagesize (); -} -# define GNULIB_defined_getpagesize_function 1 -# endif -# endif -# endif -# endif -/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ -_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); -# endif -# if @HAVE_DECL_GETPAGESIZE@ -_GL_CXXALIASWARN (getpagesize); -# endif -#elif defined GNULIB_POSIXCHECK -# undef getpagesize -# if HAVE_RAW_DECL_GETPAGESIZE -_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " - "use gnulib module getpagesize for portability"); -# endif -#endif - - -#if @GNULIB_GETUSERSHELL@ -/* Return the next valid login shell on the system, or NULL when the end of - the list has been reached. */ -# if !@HAVE_DECL_GETUSERSHELL@ -_GL_FUNCDECL_SYS (getusershell, char *, (void)); -# endif -_GL_CXXALIAS_SYS (getusershell, char *, (void)); -_GL_CXXALIASWARN (getusershell); -#elif defined GNULIB_POSIXCHECK -# undef getusershell -# if HAVE_RAW_DECL_GETUSERSHELL -_GL_WARN_ON_USE (getusershell, "getusershell is unportable - " - "use gnulib module getusershell for portability"); -# endif -#endif - -#if @GNULIB_GETUSERSHELL@ -/* Rewind to pointer that is advanced at each getusershell() call. */ -# if !@HAVE_DECL_GETUSERSHELL@ -_GL_FUNCDECL_SYS (setusershell, void, (void)); -# endif -_GL_CXXALIAS_SYS (setusershell, void, (void)); -_GL_CXXALIASWARN (setusershell); -#elif defined GNULIB_POSIXCHECK -# undef setusershell -# if HAVE_RAW_DECL_SETUSERSHELL -_GL_WARN_ON_USE (setusershell, "setusershell is unportable - " - "use gnulib module getusershell for portability"); -# endif -#endif - -#if @GNULIB_GETUSERSHELL@ -/* Free the pointer that is advanced at each getusershell() call and - associated resources. */ -# if !@HAVE_DECL_GETUSERSHELL@ -_GL_FUNCDECL_SYS (endusershell, void, (void)); -# endif -_GL_CXXALIAS_SYS (endusershell, void, (void)); -_GL_CXXALIASWARN (endusershell); -#elif defined GNULIB_POSIXCHECK -# undef endusershell -# if HAVE_RAW_DECL_ENDUSERSHELL -_GL_WARN_ON_USE (endusershell, "endusershell is unportable - " - "use gnulib module getusershell for portability"); -# endif -#endif - - -#if @GNULIB_GROUP_MEMBER@ -/* Determine whether group id is in calling user's group list. */ -# if !@HAVE_GROUP_MEMBER@ -_GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); -# endif -_GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); -_GL_CXXALIASWARN (group_member); -#elif defined GNULIB_POSIXCHECK -# undef group_member -# if HAVE_RAW_DECL_GROUP_MEMBER -_GL_WARN_ON_USE (group_member, "group_member is unportable - " - "use gnulib module group-member for portability"); -# endif -#endif - - -#if @GNULIB_ISATTY@ -# if @REPLACE_ISATTY@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef isatty -# define isatty rpl_isatty -# endif -_GL_FUNCDECL_RPL (isatty, int, (int fd)); -_GL_CXXALIAS_RPL (isatty, int, (int fd)); -# else -_GL_CXXALIAS_SYS (isatty, int, (int fd)); -# endif -_GL_CXXALIASWARN (isatty); -#elif defined GNULIB_POSIXCHECK -# undef isatty -# if HAVE_RAW_DECL_ISATTY -_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " - "use gnulib module isatty for portability"); -# endif -#endif - - -#if @GNULIB_LCHOWN@ -/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE - to GID (if GID is not -1). Do not follow symbolic links. - Return 0 if successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if @REPLACE_LCHOWN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef lchown -# define lchown rpl_lchown -# endif -_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); -# else -# if !@HAVE_LCHOWN@ -_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); -# endif -_GL_CXXALIASWARN (lchown); -#elif defined GNULIB_POSIXCHECK -# undef lchown -# if HAVE_RAW_DECL_LCHOWN -_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " - "use gnulib module lchown for portability"); -# endif -#endif - - -#if @GNULIB_LINK@ -/* Create a new hard link for an existing file. - Return 0 if successful, otherwise -1 and errno set. - See POSIX:2008 specification - . */ -# if @REPLACE_LINK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define link rpl_link -# endif -_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); -# else -# if !@HAVE_LINK@ -_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); -# endif -_GL_CXXALIASWARN (link); -#elif defined GNULIB_POSIXCHECK -# undef link -# if HAVE_RAW_DECL_LINK -_GL_WARN_ON_USE (link, "link is unportable - " - "use gnulib module link for portability"); -# endif -#endif - - -#if @GNULIB_LINKAT@ -/* Create a new hard link for an existing file, relative to two - directories. FLAG controls whether symlinks are followed. - Return 0 if successful, otherwise -1 and errno set. */ -# if @REPLACE_LINKAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef linkat -# define linkat rpl_linkat -# endif -_GL_FUNCDECL_RPL (linkat, int, - (int fd1, const char *path1, int fd2, const char *path2, - int flag) - _GL_ARG_NONNULL ((2, 4))); -_GL_CXXALIAS_RPL (linkat, int, - (int fd1, const char *path1, int fd2, const char *path2, - int flag)); -# else -# if !@HAVE_LINKAT@ -_GL_FUNCDECL_SYS (linkat, int, - (int fd1, const char *path1, int fd2, const char *path2, - int flag) - _GL_ARG_NONNULL ((2, 4))); -# endif -_GL_CXXALIAS_SYS (linkat, int, - (int fd1, const char *path1, int fd2, const char *path2, - int flag)); -# endif -_GL_CXXALIASWARN (linkat); -#elif defined GNULIB_POSIXCHECK -# undef linkat -# if HAVE_RAW_DECL_LINKAT -_GL_WARN_ON_USE (linkat, "linkat is unportable - " - "use gnulib module linkat for portability"); -# endif -#endif - - -#if @GNULIB_LSEEK@ -/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. - Return the new offset if successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if @REPLACE_LSEEK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define lseek rpl_lseek -# endif -_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); -_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); -# else -_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); -# endif -_GL_CXXALIASWARN (lseek); -#elif defined GNULIB_POSIXCHECK -# undef lseek -# if HAVE_RAW_DECL_LSEEK -_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " - "systems - use gnulib module lseek for portability"); -# endif -#endif - - -#if @GNULIB_PIPE@ -/* Create a pipe, defaulting to O_BINARY mode. - Store the read-end as fd[0] and the write-end as fd[1]. - Return 0 upon success, or -1 with errno set upon failure. */ -# if !@HAVE_PIPE@ -_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (pipe, int, (int fd[2])); -_GL_CXXALIASWARN (pipe); -#elif defined GNULIB_POSIXCHECK -# undef pipe -# if HAVE_RAW_DECL_PIPE -_GL_WARN_ON_USE (pipe, "pipe is unportable - " - "use gnulib module pipe-posix for portability"); -# endif -#endif - - -#if @GNULIB_PIPE2@ -/* Create a pipe, applying the given flags when opening the read-end of the - pipe and the write-end of the pipe. - The flags are a bitmask, possibly including O_CLOEXEC (defined in ) - and O_TEXT, O_BINARY (defined in "binary-io.h"). - Store the read-end as fd[0] and the write-end as fd[1]. - Return 0 upon success, or -1 with errno set upon failure. - See also the Linux man page at - . */ -# if @HAVE_PIPE2@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define pipe2 rpl_pipe2 -# endif -_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); -# else -_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); -# endif -_GL_CXXALIASWARN (pipe2); -#elif defined GNULIB_POSIXCHECK -# undef pipe2 -# if HAVE_RAW_DECL_PIPE2 -_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " - "use gnulib module pipe2 for portability"); -# endif -#endif - - -#if @GNULIB_PREAD@ -/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. - Return the number of bytes placed into BUF if successful, otherwise - set errno and return -1. 0 indicates EOF. - See the POSIX:2008 specification - . */ -# if @REPLACE_PREAD@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef pread -# define pread rpl_pread -# endif -_GL_FUNCDECL_RPL (pread, ssize_t, - (int fd, void *buf, size_t bufsize, off_t offset) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (pread, ssize_t, - (int fd, void *buf, size_t bufsize, off_t offset)); -# else -# if !@HAVE_PREAD@ -_GL_FUNCDECL_SYS (pread, ssize_t, - (int fd, void *buf, size_t bufsize, off_t offset) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (pread, ssize_t, - (int fd, void *buf, size_t bufsize, off_t offset)); -# endif -_GL_CXXALIASWARN (pread); -#elif defined GNULIB_POSIXCHECK -# undef pread -# if HAVE_RAW_DECL_PREAD -_GL_WARN_ON_USE (pread, "pread is unportable - " - "use gnulib module pread for portability"); -# endif -#endif - - -#if @GNULIB_PWRITE@ -/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. - Return the number of bytes written if successful, otherwise - set errno and return -1. 0 indicates nothing written. See the - POSIX:2008 specification - . */ -# if @REPLACE_PWRITE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef pwrite -# define pwrite rpl_pwrite -# endif -_GL_FUNCDECL_RPL (pwrite, ssize_t, - (int fd, const void *buf, size_t bufsize, off_t offset) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (pwrite, ssize_t, - (int fd, const void *buf, size_t bufsize, off_t offset)); -# else -# if !@HAVE_PWRITE@ -_GL_FUNCDECL_SYS (pwrite, ssize_t, - (int fd, const void *buf, size_t bufsize, off_t offset) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (pwrite, ssize_t, - (int fd, const void *buf, size_t bufsize, off_t offset)); -# endif -_GL_CXXALIASWARN (pwrite); -#elif defined GNULIB_POSIXCHECK -# undef pwrite -# if HAVE_RAW_DECL_PWRITE -_GL_WARN_ON_USE (pwrite, "pwrite is unportable - " - "use gnulib module pwrite for portability"); -# endif -#endif - - -#if @GNULIB_READ@ -/* Read up to COUNT bytes from file descriptor FD into the buffer starting - at BUF. See the POSIX:2008 specification - . */ -# if @REPLACE_READ@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef read -# define read rpl_read -# endif -_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); -# else -/* Need to cast, because on mingw, the third parameter is - unsigned int count - and the return type is 'int'. */ -_GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count)); -# endif -_GL_CXXALIASWARN (read); -#endif - - -#if @GNULIB_READLINK@ -/* Read the contents of the symbolic link FILE and place the first BUFSIZE - bytes of it into BUF. Return the number of bytes placed into BUF if - successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if @REPLACE_READLINK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define readlink rpl_readlink -# endif -_GL_FUNCDECL_RPL (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize)); -# else -# if !@HAVE_READLINK@ -_GL_FUNCDECL_SYS (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize)); -# endif -_GL_CXXALIASWARN (readlink); -#elif defined GNULIB_POSIXCHECK -# undef readlink -# if HAVE_RAW_DECL_READLINK -_GL_WARN_ON_USE (readlink, "readlink is unportable - " - "use gnulib module readlink for portability"); -# endif -#endif - - -#if @GNULIB_READLINKAT@ -# if @REPLACE_READLINKAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define readlinkat rpl_readlinkat -# endif -_GL_FUNCDECL_RPL (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len)); -# else -# if !@HAVE_READLINKAT@ -_GL_FUNCDECL_SYS (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len) - _GL_ARG_NONNULL ((2, 3))); -# endif -_GL_CXXALIAS_SYS (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len)); -# endif -_GL_CXXALIASWARN (readlinkat); -#elif defined GNULIB_POSIXCHECK -# undef readlinkat -# if HAVE_RAW_DECL_READLINKAT -_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " - "use gnulib module readlinkat for portability"); -# endif -#endif - - -#if @GNULIB_RMDIR@ -/* Remove the directory DIR. */ -# if @REPLACE_RMDIR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define rmdir rpl_rmdir -# endif -_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (rmdir, int, (char const *name)); -# else -_GL_CXXALIAS_SYS (rmdir, int, (char const *name)); -# endif -_GL_CXXALIASWARN (rmdir); -#elif defined GNULIB_POSIXCHECK -# undef rmdir -# if HAVE_RAW_DECL_RMDIR -_GL_WARN_ON_USE (rmdir, "rmdir is unportable - " - "use gnulib module rmdir for portability"); -# endif -#endif - - -#if @GNULIB_SETHOSTNAME@ -/* Set the host name of the machine. - The host name may or may not be fully qualified. - - Put LEN bytes of NAME into the host name. - Return 0 if successful, otherwise, set errno and return -1. - - Platforms with no ability to set the hostname return -1 and set - errno = ENOSYS. */ -# if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ -_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 - and FreeBSD 6.4 the second parameter is int. On Solaris 11 - 2011-10, the first parameter is not const. */ -_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); -_GL_CXXALIASWARN (sethostname); -#elif defined GNULIB_POSIXCHECK -# undef sethostname -# if HAVE_RAW_DECL_SETHOSTNAME -_GL_WARN_ON_USE (sethostname, "sethostname is unportable - " - "use gnulib module sethostname for portability"); -# endif -#endif - - -#if @GNULIB_SLEEP@ -/* Pause the execution of the current thread for N seconds. - Returns the number of seconds left to sleep. - See the POSIX:2008 specification - . */ -# if @REPLACE_SLEEP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef sleep -# define sleep rpl_sleep -# endif -_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); -_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); -# else -# if !@HAVE_SLEEP@ -_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); -# endif -_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); -# endif -_GL_CXXALIASWARN (sleep); -#elif defined GNULIB_POSIXCHECK -# undef sleep -# if HAVE_RAW_DECL_SLEEP -_GL_WARN_ON_USE (sleep, "sleep is unportable - " - "use gnulib module sleep for portability"); -# endif -#endif - - -#if @GNULIB_SYMLINK@ -# if @REPLACE_SYMLINK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef symlink -# define symlink rpl_symlink -# endif -_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); -# else -# if !@HAVE_SYMLINK@ -_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); -# endif -_GL_CXXALIASWARN (symlink); -#elif defined GNULIB_POSIXCHECK -# undef symlink -# if HAVE_RAW_DECL_SYMLINK -_GL_WARN_ON_USE (symlink, "symlink is not portable - " - "use gnulib module symlink for portability"); -# endif -#endif - - -#if @GNULIB_SYMLINKAT@ -# if @REPLACE_SYMLINKAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef symlinkat -# define symlinkat rpl_symlinkat -# endif -_GL_FUNCDECL_RPL (symlinkat, int, - (char const *contents, int fd, char const *file) - _GL_ARG_NONNULL ((1, 3))); -_GL_CXXALIAS_RPL (symlinkat, int, - (char const *contents, int fd, char const *file)); -# else -# if !@HAVE_SYMLINKAT@ -_GL_FUNCDECL_SYS (symlinkat, int, - (char const *contents, int fd, char const *file) - _GL_ARG_NONNULL ((1, 3))); -# endif -_GL_CXXALIAS_SYS (symlinkat, int, - (char const *contents, int fd, char const *file)); -# endif -_GL_CXXALIASWARN (symlinkat); -#elif defined GNULIB_POSIXCHECK -# undef symlinkat -# if HAVE_RAW_DECL_SYMLINKAT -_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " - "use gnulib module symlinkat for portability"); -# endif -#endif - - -#if @GNULIB_TTYNAME_R@ -/* Store at most BUFLEN characters of the pathname of the terminal FD is - open on in BUF. Return 0 on success, otherwise an error number. */ -# if @REPLACE_TTYNAME_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ttyname_r -# define ttyname_r rpl_ttyname_r -# endif -_GL_FUNCDECL_RPL (ttyname_r, int, - (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (ttyname_r, int, - (int fd, char *buf, size_t buflen)); -# else -# if !@HAVE_DECL_TTYNAME_R@ -_GL_FUNCDECL_SYS (ttyname_r, int, - (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (ttyname_r, int, - (int fd, char *buf, size_t buflen)); -# endif -_GL_CXXALIASWARN (ttyname_r); -#elif defined GNULIB_POSIXCHECK -# undef ttyname_r -# if HAVE_RAW_DECL_TTYNAME_R -_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " - "use gnulib module ttyname_r for portability"); -# endif -#endif - - -#if @GNULIB_UNLINK@ -# if @REPLACE_UNLINK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef unlink -# define unlink rpl_unlink -# endif -_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (unlink, int, (char const *file)); -# else -_GL_CXXALIAS_SYS (unlink, int, (char const *file)); -# endif -_GL_CXXALIASWARN (unlink); -#elif defined GNULIB_POSIXCHECK -# undef unlink -# if HAVE_RAW_DECL_UNLINK -_GL_WARN_ON_USE (unlink, "unlink is not portable - " - "use gnulib module unlink for portability"); -# endif -#endif - - -#if @GNULIB_UNLINKAT@ -# if @REPLACE_UNLINKAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef unlinkat -# define unlinkat rpl_unlinkat -# endif -_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); -# else -# if !@HAVE_UNLINKAT@ -_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); -# endif -_GL_CXXALIASWARN (unlinkat); -#elif defined GNULIB_POSIXCHECK -# undef unlinkat -# if HAVE_RAW_DECL_UNLINKAT -_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " - "use gnulib module openat for portability"); -# endif -#endif - - -#if @GNULIB_USLEEP@ -/* Pause the execution of the current thread for N microseconds. - Returns 0 on completion, or -1 on range error. - See the POSIX:2001 specification - . */ -# if @REPLACE_USLEEP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef usleep -# define usleep rpl_usleep -# endif -_GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); -_GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); -# else -# if !@HAVE_USLEEP@ -_GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); -# endif -_GL_CXXALIAS_SYS (usleep, int, (useconds_t n)); -# endif -_GL_CXXALIASWARN (usleep); -#elif defined GNULIB_POSIXCHECK -# undef usleep -# if HAVE_RAW_DECL_USLEEP -_GL_WARN_ON_USE (usleep, "usleep is unportable - " - "use gnulib module usleep for portability"); -# endif -#endif - - -#if @GNULIB_WRITE@ -/* Write up to COUNT bytes starting at BUF to file descriptor FD. - See the POSIX:2008 specification - . */ -# if @REPLACE_WRITE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef write -# define write rpl_write -# endif -_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); -# else -/* Need to cast, because on mingw, the third parameter is - unsigned int count - and the return type is 'int'. */ -_GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count)); -# endif -_GL_CXXALIASWARN (write); -#endif - -_GL_INLINE_HEADER_END - -#endif /* _@GUARD_PREFIX@_UNISTD_H */ -#endif /* _GL_INCLUDING_UNISTD_H */ -#endif /* _@GUARD_PREFIX@_UNISTD_H */ diff --git a/gl/vasnprintf.c b/gl/vasnprintf.c deleted file mode 100644 index 7f75b9d556..0000000000 --- a/gl/vasnprintf.c +++ /dev/null @@ -1,5598 +0,0 @@ -/* vsprintf with automatic memory allocation. - Copyright (C) 1999, 2002-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -/* This file can be parametrized with the following macros: - VASNPRINTF The name of the function being defined. - FCHAR_T The element type of the format string. - DCHAR_T The element type of the destination (result) string. - FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters - in the format string are ASCII. MUST be set if - FCHAR_T and DCHAR_T are not the same type. - DIRECTIVE Structure denoting a format directive. - Depends on FCHAR_T. - DIRECTIVES Structure denoting the set of format directives of a - format string. Depends on FCHAR_T. - PRINTF_PARSE Function that parses a format string. - Depends on FCHAR_T. - DCHAR_CPY memcpy like function for DCHAR_T[] arrays. - DCHAR_SET memset like function for DCHAR_T[] arrays. - DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. - SNPRINTF The system's snprintf (or similar) function. - This may be either snprintf or swprintf. - TCHAR_T The element type of the argument and result string - of the said SNPRINTF function. This may be either - char or wchar_t. The code exploits that - sizeof (TCHAR_T) | sizeof (DCHAR_T) and - alignof (TCHAR_T) <= alignof (DCHAR_T). - DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. - DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. - DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. - DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. - DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ - -/* Tell glibc's to provide a prototype for snprintf(). - This must come before because may include - , and once has been included, it's too late. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -#ifndef VASNPRINTF -# include -#endif -#ifndef IN_LIBINTL -# include -#endif - -/* Specification. */ -#ifndef VASNPRINTF -# if WIDE_CHAR_VERSION -# include "vasnwprintf.h" -# else -# include "vasnprintf.h" -# endif -#endif - -#include /* localeconv() */ -#include /* snprintf(), sprintf() */ -#include /* abort(), malloc(), realloc(), free() */ -#include /* memcpy(), strlen() */ -#include /* errno */ -#include /* CHAR_BIT */ -#include /* DBL_MAX_EXP, LDBL_MAX_EXP */ -#if HAVE_NL_LANGINFO -# include -#endif -#ifndef VASNPRINTF -# if WIDE_CHAR_VERSION -# include "wprintf-parse.h" -# else -# include "printf-parse.h" -# endif -#endif - -/* Checked size_t computations. */ -#include "xsize.h" - -#include "verify.h" - -#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL -# include -# include "float+.h" -#endif - -#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL -# include -# include "isnand-nolibm.h" -#endif - -#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL -# include -# include "isnanl-nolibm.h" -# include "fpucw.h" -#endif - -#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL -# include -# include "isnand-nolibm.h" -# include "printf-frexp.h" -#endif - -#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL -# include -# include "isnanl-nolibm.h" -# include "printf-frexpl.h" -# include "fpucw.h" -#endif - -/* Default parameters. */ -#ifndef VASNPRINTF -# if WIDE_CHAR_VERSION -# define VASNPRINTF vasnwprintf -# define FCHAR_T wchar_t -# define DCHAR_T wchar_t -# define TCHAR_T wchar_t -# define DCHAR_IS_TCHAR 1 -# define DIRECTIVE wchar_t_directive -# define DIRECTIVES wchar_t_directives -# define PRINTF_PARSE wprintf_parse -# define DCHAR_CPY wmemcpy -# define DCHAR_SET wmemset -# else -# define VASNPRINTF vasnprintf -# define FCHAR_T char -# define DCHAR_T char -# define TCHAR_T char -# define DCHAR_IS_TCHAR 1 -# define DIRECTIVE char_directive -# define DIRECTIVES char_directives -# define PRINTF_PARSE printf_parse -# define DCHAR_CPY memcpy -# define DCHAR_SET memset -# endif -#endif -#if WIDE_CHAR_VERSION - /* TCHAR_T is wchar_t. */ -# define USE_SNPRINTF 1 -# if HAVE_DECL__SNWPRINTF - /* On Windows, the function swprintf() has a different signature than - on Unix; we use the function _snwprintf() or - on mingw - snwprintf() - instead. The mingw function snwprintf() has fewer bugs than the - MSVCRT function _snwprintf(), so prefer that. */ -# if defined __MINGW32__ -# define SNPRINTF snwprintf -# else -# define SNPRINTF _snwprintf -# endif -# else - /* Unix. */ -# define SNPRINTF swprintf -# endif -#else - /* TCHAR_T is char. */ - /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. - But don't use it on BeOS, since BeOS snprintf produces no output if the - size argument is >= 0x3000000. - Also don't use it on Linux libc5, since there snprintf with size = 1 - writes any output without bounds, like sprintf. */ -# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) -# define USE_SNPRINTF 1 -# else -# define USE_SNPRINTF 0 -# endif -# if HAVE_DECL__SNPRINTF - /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT - function _snprintf(), so prefer that. */ -# if defined __MINGW32__ -# define SNPRINTF snprintf - /* Here we need to call the native snprintf, not rpl_snprintf. */ -# undef snprintf -# else -# define SNPRINTF _snprintf -# endif -# else - /* Unix. */ -# define SNPRINTF snprintf - /* Here we need to call the native snprintf, not rpl_snprintf. */ -# undef snprintf -# endif -#endif -/* Here we need to call the native sprintf, not rpl_sprintf. */ -#undef sprintf - -/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" - warnings in this file. Use -Dlint to suppress them. */ -#if defined GCC_LINT || defined lint -# define IF_LINT(Code) Code -#else -# define IF_LINT(Code) /* empty */ -#endif - -/* Avoid some warnings from "gcc -Wshadow". - This file doesn't use the exp() and remainder() functions. */ -#undef exp -#define exp expo -#undef remainder -#define remainder rem - -#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && !WIDE_CHAR_VERSION -# if (HAVE_STRNLEN && !defined _AIX) -# define local_strnlen strnlen -# else -# ifndef local_strnlen_defined -# define local_strnlen_defined 1 -static size_t -local_strnlen (const char *string, size_t maxlen) -{ - const char *end = memchr (string, '\0', maxlen); - return end ? (size_t) (end - string) : maxlen; -} -# endif -# endif -#endif - -#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T -# if HAVE_WCSLEN -# define local_wcslen wcslen -# else - /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid - a dependency towards this library, here is a local substitute. - Define this substitute only once, even if this file is included - twice in the same compilation unit. */ -# ifndef local_wcslen_defined -# define local_wcslen_defined 1 -static size_t -local_wcslen (const wchar_t *s) -{ - const wchar_t *ptr; - - for (ptr = s; *ptr != (wchar_t) 0; ptr++) - ; - return ptr - s; -} -# endif -# endif -#endif - -#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && HAVE_WCHAR_T && WIDE_CHAR_VERSION -# if HAVE_WCSNLEN -# define local_wcsnlen wcsnlen -# else -# ifndef local_wcsnlen_defined -# define local_wcsnlen_defined 1 -static size_t -local_wcsnlen (const wchar_t *s, size_t maxlen) -{ - const wchar_t *ptr; - - for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) - ; - return ptr - s; -} -# endif -# endif -#endif - -#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL -/* Determine the decimal-point character according to the current locale. */ -# ifndef decimal_point_char_defined -# define decimal_point_char_defined 1 -static char -decimal_point_char (void) -{ - const char *point; - /* Determine it in a multithread-safe way. We know nl_langinfo is - multithread-safe on glibc systems and Mac OS X systems, but is not required - to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. - localeconv() is rarely multithread-safe. */ -# if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) - point = nl_langinfo (RADIXCHAR); -# elif 1 - char pointbuf[5]; - sprintf (pointbuf, "%#.0f", 1.0); - point = &pointbuf[1]; -# else - point = localeconv () -> decimal_point; -# endif - /* The decimal point is always a single byte: either '.' or ','. */ - return (point[0] != '\0' ? point[0] : '.'); -} -# endif -#endif - -#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL - -/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ -static int -is_infinite_or_zero (double x) -{ - return isnand (x) || x + x == x; -} - -#endif - -#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL - -/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ -static int -is_infinite_or_zerol (long double x) -{ - return isnanl (x) || x + x == x; -} - -#endif - -#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL - -/* Converting 'long double' to decimal without rare rounding bugs requires - real bignums. We use the naming conventions of GNU gmp, but vastly simpler - (and slower) algorithms. */ - -typedef unsigned int mp_limb_t; -# define GMP_LIMB_BITS 32 -verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); - -typedef unsigned long long mp_twolimb_t; -# define GMP_TWOLIMB_BITS 64 -verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); - -/* Representation of a bignum >= 0. */ -typedef struct -{ - size_t nlimbs; - mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ -} mpn_t; - -/* Compute the product of two bignums >= 0. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -multiply (mpn_t src1, mpn_t src2, mpn_t *dest) -{ - const mp_limb_t *p1; - const mp_limb_t *p2; - size_t len1; - size_t len2; - - if (src1.nlimbs <= src2.nlimbs) - { - len1 = src1.nlimbs; - p1 = src1.limbs; - len2 = src2.nlimbs; - p2 = src2.limbs; - } - else - { - len1 = src2.nlimbs; - p1 = src2.limbs; - len2 = src1.nlimbs; - p2 = src1.limbs; - } - /* Now 0 <= len1 <= len2. */ - if (len1 == 0) - { - /* src1 or src2 is zero. */ - dest->nlimbs = 0; - dest->limbs = (mp_limb_t *) malloc (1); - } - else - { - /* Here 1 <= len1 <= len2. */ - size_t dlen; - mp_limb_t *dp; - size_t k, i, j; - - dlen = len1 + len2; - dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); - if (dp == NULL) - return NULL; - for (k = len2; k > 0; ) - dp[--k] = 0; - for (i = 0; i < len1; i++) - { - mp_limb_t digit1 = p1[i]; - mp_twolimb_t carry = 0; - for (j = 0; j < len2; j++) - { - mp_limb_t digit2 = p2[j]; - carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; - carry += dp[i + j]; - dp[i + j] = (mp_limb_t) carry; - carry = carry >> GMP_LIMB_BITS; - } - dp[i + len2] = (mp_limb_t) carry; - } - /* Normalise. */ - while (dlen > 0 && dp[dlen - 1] == 0) - dlen--; - dest->nlimbs = dlen; - dest->limbs = dp; - } - return dest->limbs; -} - -/* Compute the quotient of a bignum a >= 0 and a bignum b > 0. - a is written as a = q * b + r with 0 <= r < b. q is the quotient, r - the remainder. - Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, - q is incremented. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -divide (mpn_t a, mpn_t b, mpn_t *q) -{ - /* Algorithm: - First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] - with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). - If m=n=1, perform a single-precision division: - r:=0, j:=m, - while j>0 do - {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = - = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r=n>1, perform a multiple-precision division: - We have a/b < beta^(m-n+1). - s:=intDsize-1-(highest bit in b[n-1]), 0<=s=beta/2. - For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} - Compute q* : - q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). - In case of overflow (q* >= beta) set q* := beta-1. - Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] - and c3 := b[n-2] * q*. - {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow - occurred. Furthermore 0 <= c3 < beta^2. - If there was overflow and - r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, - the next test can be skipped.} - While c3 > c2, {Here 0 <= c2 < c3 < beta^2} - Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. - If q* > 0: - Put r := r - b * q* * beta^j. In detail: - [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. - hence: u:=0, for i:=0 to n-1 do - u := u + q* * b[i], - r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), - u:=u div beta (+ 1, if carry in subtraction) - r[n+j]:=r[n+j]-u. - {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 - < q* + 1 <= beta, - the carry u does not overflow.} - If a negative carry occurs, put q* := q* - 1 - and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. - Set q[j] := q*. - Normalise [q[m-n],..,q[0]]; this yields the quotient q. - Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the - rest r. - The room for q[j] can be allocated at the memory location of r[n+j]. - Finally, round-to-even: - Shift r left by 1 bit. - If r > b or if r = b and q[0] is odd, q := q+1. - */ - const mp_limb_t *a_ptr = a.limbs; - size_t a_len = a.nlimbs; - const mp_limb_t *b_ptr = b.limbs; - size_t b_len = b.nlimbs; - mp_limb_t *roomptr; - mp_limb_t *tmp_roomptr = NULL; - mp_limb_t *q_ptr; - size_t q_len; - mp_limb_t *r_ptr; - size_t r_len; - - /* Allocate room for a_len+2 digits. - (Need a_len+1 digits for the real division and 1 more digit for the - final rounding of q.) */ - roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); - if (roomptr == NULL) - return NULL; - - /* Normalise a. */ - while (a_len > 0 && a_ptr[a_len - 1] == 0) - a_len--; - - /* Normalise b. */ - for (;;) - { - if (b_len == 0) - /* Division by zero. */ - abort (); - if (b_ptr[b_len - 1] == 0) - b_len--; - else - break; - } - - /* Here m = a_len >= 0 and n = b_len > 0. */ - - if (a_len < b_len) - { - /* m beta^(m-2) <= a/b < beta^m */ - r_ptr = roomptr; - q_ptr = roomptr + 1; - { - mp_limb_t den = b_ptr[0]; - mp_limb_t remainder = 0; - const mp_limb_t *sourceptr = a_ptr + a_len; - mp_limb_t *destptr = q_ptr + a_len; - size_t count; - for (count = a_len; count > 0; count--) - { - mp_twolimb_t num = - ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; - *--destptr = num / den; - remainder = num % den; - } - /* Normalise and store r. */ - if (remainder > 0) - { - r_ptr[0] = remainder; - r_len = 1; - } - else - r_len = 0; - /* Normalise q. */ - q_len = a_len; - if (q_ptr[q_len - 1] == 0) - q_len--; - } - } - else - { - /* n>1: multiple precision division. - beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> - beta^(m-n-1) <= a/b < beta^(m-n+1). */ - /* Determine s. */ - size_t s; - { - mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ - /* Determine s = GMP_LIMB_BITS - integer_length (msd). - Code copied from gnulib's integer_length.c. */ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) - s = __builtin_clz (msd); -# else -# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT - if (GMP_LIMB_BITS <= DBL_MANT_BIT) - { - /* Use 'double' operations. - Assumes an IEEE 754 'double' implementation. */ -# define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) -# define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) -# define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - union { double value; unsigned int word[NWORDS]; } m; - - /* Use a single integer to floating-point conversion. */ - m.value = msd; - - s = GMP_LIMB_BITS - - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) - - DBL_EXP_BIAS); - } - else -# undef NWORDS -# endif - { - s = 31; - if (msd >= 0x10000) - { - msd = msd >> 16; - s -= 16; - } - if (msd >= 0x100) - { - msd = msd >> 8; - s -= 8; - } - if (msd >= 0x10) - { - msd = msd >> 4; - s -= 4; - } - if (msd >= 0x4) - { - msd = msd >> 2; - s -= 2; - } - if (msd >= 0x2) - { - msd = msd >> 1; - s -= 1; - } - } -# endif - } - /* 0 <= s < GMP_LIMB_BITS. - Copy b, shifting it left by s bits. */ - if (s > 0) - { - tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); - if (tmp_roomptr == NULL) - { - free (roomptr); - return NULL; - } - { - const mp_limb_t *sourceptr = b_ptr; - mp_limb_t *destptr = tmp_roomptr; - mp_twolimb_t accu = 0; - size_t count; - for (count = b_len; count > 0; count--) - { - accu += (mp_twolimb_t) *sourceptr++ << s; - *destptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - /* accu must be zero, since that was how s was determined. */ - if (accu != 0) - abort (); - } - b_ptr = tmp_roomptr; - } - /* Copy a, shifting it left by s bits, yields r. - Memory layout: - At the beginning: r = roomptr[0..a_len], - at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ - r_ptr = roomptr; - if (s == 0) - { - memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); - r_ptr[a_len] = 0; - } - else - { - const mp_limb_t *sourceptr = a_ptr; - mp_limb_t *destptr = r_ptr; - mp_twolimb_t accu = 0; - size_t count; - for (count = a_len; count > 0; count--) - { - accu += (mp_twolimb_t) *sourceptr++ << s; - *destptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - *destptr++ = (mp_limb_t) accu; - } - q_ptr = roomptr + b_len; - q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ - { - size_t j = a_len - b_len; /* m-n */ - mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ - mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ - mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ - ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; - /* Division loop, traversed m-n+1 times. - j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ - for (;;) - { - mp_limb_t q_star; - mp_limb_t c1; - if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ - { - /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ - mp_twolimb_t num = - ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) - | r_ptr[j + b_len - 1]; - q_star = num / b_msd; - c1 = num % b_msd; - } - else - { - /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ - q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ - /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta - <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta - <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) - {<= beta !}. - If yes, jump directly to the subtraction loop. - (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta - <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ - if (r_ptr[j + b_len] > b_msd - || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) - /* r[j+n] >= b[n-1]+1 or - r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a - carry. */ - goto subtract; - } - /* q_star = q*, - c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, 0, decrease it by - b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 - this can happen only twice. */ - if (c3 > c2) - { - q_star = q_star - 1; /* q* := q* - 1 */ - if (c3 - c2 > b_msdd) - q_star = q_star - 1; /* q* := q* - 1 */ - } - } - if (q_star > 0) - subtract: - { - /* Subtract r := r - b * q* * beta^j. */ - mp_limb_t cr; - { - const mp_limb_t *sourceptr = b_ptr; - mp_limb_t *destptr = r_ptr + j; - mp_twolimb_t carry = 0; - size_t count; - for (count = b_len; count > 0; count--) - { - /* Here 0 <= carry <= q*. */ - carry = - carry - + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ - + (mp_limb_t) ~(*destptr); - /* Here 0 <= carry <= beta*q* + beta-1. */ - *destptr++ = ~(mp_limb_t) carry; - carry = carry >> GMP_LIMB_BITS; /* <= q* */ - } - cr = (mp_limb_t) carry; - } - /* Subtract cr from r_ptr[j + b_len], then forget about - r_ptr[j + b_len]. */ - if (cr > r_ptr[j + b_len]) - { - /* Subtraction gave a carry. */ - q_star = q_star - 1; /* q* := q* - 1 */ - /* Add b back. */ - { - const mp_limb_t *sourceptr = b_ptr; - mp_limb_t *destptr = r_ptr + j; - mp_limb_t carry = 0; - size_t count; - for (count = b_len; count > 0; count--) - { - mp_limb_t source1 = *sourceptr++; - mp_limb_t source2 = *destptr; - *destptr++ = source1 + source2 + carry; - carry = - (carry - ? source1 >= (mp_limb_t) ~source2 - : source1 > (mp_limb_t) ~source2); - } - } - /* Forget about the carry and about r[j+n]. */ - } - } - /* q* is determined. Store it as q[j]. */ - q_ptr[j] = q_star; - if (j == 0) - break; - j--; - } - } - r_len = b_len; - /* Normalise q. */ - if (q_ptr[q_len - 1] == 0) - q_len--; -# if 0 /* Not needed here, since we need r only to compare it with b/2, and - b is shifted left by s bits. */ - /* Shift r right by s bits. */ - if (s > 0) - { - mp_limb_t ptr = r_ptr + r_len; - mp_twolimb_t accu = 0; - size_t count; - for (count = r_len; count > 0; count--) - { - accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; - accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); - *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); - } - } -# endif - /* Normalise r. */ - while (r_len > 0 && r_ptr[r_len - 1] == 0) - r_len--; - } - /* Compare r << 1 with b. */ - if (r_len > b_len) - goto increment_q; - { - size_t i; - for (i = b_len;;) - { - mp_limb_t r_i = - (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) - | (i < r_len ? r_ptr[i] << 1 : 0); - mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); - if (r_i > b_i) - goto increment_q; - if (r_i < b_i) - goto keep_q; - if (i == 0) - break; - i--; - } - } - if (q_len > 0 && ((q_ptr[0] & 1) != 0)) - /* q is odd. */ - increment_q: - { - size_t i; - for (i = 0; i < q_len; i++) - if (++(q_ptr[i]) != 0) - goto keep_q; - q_ptr[q_len++] = 1; - } - keep_q: - if (tmp_roomptr != NULL) - free (tmp_roomptr); - q->limbs = q_ptr; - q->nlimbs = q_len; - return roomptr; -} - -/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal - representation. - Destroys the contents of a. - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -convert_to_decimal (mpn_t a, size_t extra_zeroes) -{ - mp_limb_t *a_ptr = a.limbs; - size_t a_len = a.nlimbs; - /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ - size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); - char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); - if (c_ptr != NULL) - { - char *d_ptr = c_ptr; - for (; extra_zeroes > 0; extra_zeroes--) - *d_ptr++ = '0'; - while (a_len > 0) - { - /* Divide a by 10^9, in-place. */ - mp_limb_t remainder = 0; - mp_limb_t *ptr = a_ptr + a_len; - size_t count; - for (count = a_len; count > 0; count--) - { - mp_twolimb_t num = - ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; - *ptr = num / 1000000000; - remainder = num % 1000000000; - } - /* Store the remainder as 9 decimal digits. */ - for (count = 9; count > 0; count--) - { - *d_ptr++ = '0' + (remainder % 10); - remainder = remainder / 10; - } - /* Normalize a. */ - if (a_ptr[a_len - 1] == 0) - a_len--; - } - /* Remove leading zeroes. */ - while (d_ptr > c_ptr && d_ptr[-1] == '0') - d_ptr--; - /* But keep at least one zero. */ - if (d_ptr == c_ptr) - *d_ptr++ = '0'; - /* Terminate the string. */ - *d_ptr = '\0'; - } - return c_ptr; -} - -# if NEED_PRINTF_LONG_DOUBLE - -/* Assuming x is finite and >= 0: - write x as x = 2^e * m, where m is a bignum. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -decode_long_double (long double x, int *ep, mpn_t *mp) -{ - mpn_t m; - int exp; - long double y; - size_t i; - - /* Allocate memory for result. */ - m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; - m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); - if (m.limbs == NULL) - return NULL; - /* Split into exponential part and mantissa. */ - y = frexpl (x, &exp); - if (!(y >= 0.0L && y < 1.0L)) - abort (); - /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the - latter is an integer. */ - /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. - I'm not sure whether it's safe to cast a 'long double' value between - 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only - 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', - doesn't matter). */ -# if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 -# if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); - hi = (int) y; - y -= hi; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } -# else - { - mp_limb_t d; - y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); - d = (int) y; - y -= d; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; - } -# endif -# endif - for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - hi = (int) y; - y -= hi; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } -# if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess - precision. */ - if (!(y == 0.0L)) - abort (); -# endif - /* Normalise. */ - while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) - m.nlimbs--; - *mp = m; - *ep = exp - LDBL_MANT_BIT; - return m.limbs; -} - -# endif - -# if NEED_PRINTF_DOUBLE - -/* Assuming x is finite and >= 0: - write x as x = 2^e * m, where m is a bignum. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -decode_double (double x, int *ep, mpn_t *mp) -{ - mpn_t m; - int exp; - double y; - size_t i; - - /* Allocate memory for result. */ - m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; - m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); - if (m.limbs == NULL) - return NULL; - /* Split into exponential part and mantissa. */ - y = frexp (x, &exp); - if (!(y >= 0.0 && y < 1.0)) - abort (); - /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the - latter is an integer. */ - /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. - I'm not sure whether it's safe to cast a 'double' value between - 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only - 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', - doesn't matter). */ -# if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 -# if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); - hi = (int) y; - y -= hi; - if (!(y >= 0.0 && y < 1.0)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0 && y < 1.0)) - abort (); - m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } -# else - { - mp_limb_t d; - y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); - d = (int) y; - y -= d; - if (!(y >= 0.0 && y < 1.0)) - abort (); - m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; - } -# endif -# endif - for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - hi = (int) y; - y -= hi; - if (!(y >= 0.0 && y < 1.0)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0 && y < 1.0)) - abort (); - m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } - if (!(y == 0.0)) - abort (); - /* Normalise. */ - while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) - m.nlimbs--; - *mp = m; - *ep = exp - DBL_MANT_BIT; - return m.limbs; -} - -# endif - -/* Assuming x = 2^e * m is finite and >= 0, and n is an integer: - Returns the decimal representation of round (x * 10^n). - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) -{ - int s; - size_t extra_zeroes; - unsigned int abs_n; - unsigned int abs_s; - mp_limb_t *pow5_ptr; - size_t pow5_len; - unsigned int s_limbs; - unsigned int s_bits; - mpn_t pow5; - mpn_t z; - void *z_memory; - char *digits; - - if (memory == NULL) - return NULL; - /* x = 2^e * m, hence - y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) - = round (2^s * 5^n * m). */ - s = e + n; - extra_zeroes = 0; - /* Factor out a common power of 10 if possible. */ - if (s > 0 && n > 0) - { - extra_zeroes = (s < n ? s : n); - s -= extra_zeroes; - n -= extra_zeroes; - } - /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. - Before converting to decimal, we need to compute - z = round (2^s * 5^n * m). */ - /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same - sign. 2.322 is slightly larger than log(5)/log(2). */ - abs_n = (n >= 0 ? n : -n); - abs_s = (s >= 0 ? s : -s); - pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 - + abs_s / GMP_LIMB_BITS + 1) - * sizeof (mp_limb_t)); - if (pow5_ptr == NULL) - { - free (memory); - return NULL; - } - /* Initialize with 1. */ - pow5_ptr[0] = 1; - pow5_len = 1; - /* Multiply with 5^|n|. */ - if (abs_n > 0) - { - static mp_limb_t const small_pow5[13 + 1] = - { - 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, - 48828125, 244140625, 1220703125 - }; - unsigned int n13; - for (n13 = 0; n13 <= abs_n; n13 += 13) - { - mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; - size_t j; - mp_twolimb_t carry = 0; - for (j = 0; j < pow5_len; j++) - { - mp_limb_t digit2 = pow5_ptr[j]; - carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; - pow5_ptr[j] = (mp_limb_t) carry; - carry = carry >> GMP_LIMB_BITS; - } - if (carry > 0) - pow5_ptr[pow5_len++] = (mp_limb_t) carry; - } - } - s_limbs = abs_s / GMP_LIMB_BITS; - s_bits = abs_s % GMP_LIMB_BITS; - if (n >= 0 ? s >= 0 : s <= 0) - { - /* Multiply with 2^|s|. */ - if (s_bits > 0) - { - mp_limb_t *ptr = pow5_ptr; - mp_twolimb_t accu = 0; - size_t count; - for (count = pow5_len; count > 0; count--) - { - accu += (mp_twolimb_t) *ptr << s_bits; - *ptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - if (accu > 0) - { - *ptr = (mp_limb_t) accu; - pow5_len++; - } - } - if (s_limbs > 0) - { - size_t count; - for (count = pow5_len; count > 0;) - { - count--; - pow5_ptr[s_limbs + count] = pow5_ptr[count]; - } - for (count = s_limbs; count > 0;) - { - count--; - pow5_ptr[count] = 0; - } - pow5_len += s_limbs; - } - pow5.limbs = pow5_ptr; - pow5.nlimbs = pow5_len; - if (n >= 0) - { - /* Multiply m with pow5. No division needed. */ - z_memory = multiply (m, pow5, &z); - } - else - { - /* Divide m by pow5 and round. */ - z_memory = divide (m, pow5, &z); - } - } - else - { - pow5.limbs = pow5_ptr; - pow5.nlimbs = pow5_len; - if (n >= 0) - { - /* n >= 0, s < 0. - Multiply m with pow5, then divide by 2^|s|. */ - mpn_t numerator; - mpn_t denominator; - void *tmp_memory; - tmp_memory = multiply (m, pow5, &numerator); - if (tmp_memory == NULL) - { - free (pow5_ptr); - free (memory); - return NULL; - } - /* Construct 2^|s|. */ - { - mp_limb_t *ptr = pow5_ptr + pow5_len; - size_t i; - for (i = 0; i < s_limbs; i++) - ptr[i] = 0; - ptr[s_limbs] = (mp_limb_t) 1 << s_bits; - denominator.limbs = ptr; - denominator.nlimbs = s_limbs + 1; - } - z_memory = divide (numerator, denominator, &z); - free (tmp_memory); - } - else - { - /* n < 0, s > 0. - Multiply m with 2^s, then divide by pow5. */ - mpn_t numerator; - mp_limb_t *num_ptr; - num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) - * sizeof (mp_limb_t)); - if (num_ptr == NULL) - { - free (pow5_ptr); - free (memory); - return NULL; - } - { - mp_limb_t *destptr = num_ptr; - { - size_t i; - for (i = 0; i < s_limbs; i++) - *destptr++ = 0; - } - if (s_bits > 0) - { - const mp_limb_t *sourceptr = m.limbs; - mp_twolimb_t accu = 0; - size_t count; - for (count = m.nlimbs; count > 0; count--) - { - accu += (mp_twolimb_t) *sourceptr++ << s_bits; - *destptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - if (accu > 0) - *destptr++ = (mp_limb_t) accu; - } - else - { - const mp_limb_t *sourceptr = m.limbs; - size_t count; - for (count = m.nlimbs; count > 0; count--) - *destptr++ = *sourceptr++; - } - numerator.limbs = num_ptr; - numerator.nlimbs = destptr - num_ptr; - } - z_memory = divide (numerator, pow5, &z); - free (num_ptr); - } - } - free (pow5_ptr); - free (memory); - - /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ - - if (z_memory == NULL) - return NULL; - digits = convert_to_decimal (z, extra_zeroes); - free (z_memory); - return digits; -} - -# if NEED_PRINTF_LONG_DOUBLE - -/* Assuming x is finite and >= 0, and n is an integer: - Returns the decimal representation of round (x * 10^n). - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -scale10_round_decimal_long_double (long double x, int n) -{ - int e IF_LINT(= 0); - mpn_t m; - void *memory = decode_long_double (x, &e, &m); - return scale10_round_decimal_decoded (e, m, memory, n); -} - -# endif - -# if NEED_PRINTF_DOUBLE - -/* Assuming x is finite and >= 0, and n is an integer: - Returns the decimal representation of round (x * 10^n). - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -scale10_round_decimal_double (double x, int n) -{ - int e IF_LINT(= 0); - mpn_t m; - void *memory = decode_double (x, &e, &m); - return scale10_round_decimal_decoded (e, m, memory, n); -} - -# endif - -# if NEED_PRINTF_LONG_DOUBLE - -/* Assuming x is finite and > 0: - Return an approximation for n with 10^n <= x < 10^(n+1). - The approximation is usually the right n, but may be off by 1 sometimes. */ -static int -floorlog10l (long double x) -{ - int exp; - long double y; - double z; - double l; - - /* Split into exponential part and mantissa. */ - y = frexpl (x, &exp); - if (!(y >= 0.0L && y < 1.0L)) - abort (); - if (y == 0.0L) - return INT_MIN; - if (y < 0.5L) - { - while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) - { - y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); - exp -= GMP_LIMB_BITS; - } - if (y < (1.0L / (1 << 16))) - { - y *= 1.0L * (1 << 16); - exp -= 16; - } - if (y < (1.0L / (1 << 8))) - { - y *= 1.0L * (1 << 8); - exp -= 8; - } - if (y < (1.0L / (1 << 4))) - { - y *= 1.0L * (1 << 4); - exp -= 4; - } - if (y < (1.0L / (1 << 2))) - { - y *= 1.0L * (1 << 2); - exp -= 2; - } - if (y < (1.0L / (1 << 1))) - { - y *= 1.0L * (1 << 1); - exp -= 1; - } - } - if (!(y >= 0.5L && y < 1.0L)) - abort (); - /* Compute an approximation for l = log2(x) = exp + log2(y). */ - l = exp; - z = y; - if (z < 0.70710678118654752444) - { - z *= 1.4142135623730950488; - l -= 0.5; - } - if (z < 0.8408964152537145431) - { - z *= 1.1892071150027210667; - l -= 0.25; - } - if (z < 0.91700404320467123175) - { - z *= 1.0905077326652576592; - l -= 0.125; - } - if (z < 0.9576032806985736469) - { - z *= 1.0442737824274138403; - l -= 0.0625; - } - /* Now 0.95 <= z <= 1.01. */ - z = 1 - z; - /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) - Four terms are enough to get an approximation with error < 10^-7. */ - l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); - /* Finally multiply with log(2)/log(10), yields an approximation for - log10(x). */ - l *= 0.30102999566398119523; - /* Round down to the next integer. */ - return (int) l + (l < 0 ? -1 : 0); -} - -# endif - -# if NEED_PRINTF_DOUBLE - -/* Assuming x is finite and > 0: - Return an approximation for n with 10^n <= x < 10^(n+1). - The approximation is usually the right n, but may be off by 1 sometimes. */ -static int -floorlog10 (double x) -{ - int exp; - double y; - double z; - double l; - - /* Split into exponential part and mantissa. */ - y = frexp (x, &exp); - if (!(y >= 0.0 && y < 1.0)) - abort (); - if (y == 0.0) - return INT_MIN; - if (y < 0.5) - { - while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) - { - y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); - exp -= GMP_LIMB_BITS; - } - if (y < (1.0 / (1 << 16))) - { - y *= 1.0 * (1 << 16); - exp -= 16; - } - if (y < (1.0 / (1 << 8))) - { - y *= 1.0 * (1 << 8); - exp -= 8; - } - if (y < (1.0 / (1 << 4))) - { - y *= 1.0 * (1 << 4); - exp -= 4; - } - if (y < (1.0 / (1 << 2))) - { - y *= 1.0 * (1 << 2); - exp -= 2; - } - if (y < (1.0 / (1 << 1))) - { - y *= 1.0 * (1 << 1); - exp -= 1; - } - } - if (!(y >= 0.5 && y < 1.0)) - abort (); - /* Compute an approximation for l = log2(x) = exp + log2(y). */ - l = exp; - z = y; - if (z < 0.70710678118654752444) - { - z *= 1.4142135623730950488; - l -= 0.5; - } - if (z < 0.8408964152537145431) - { - z *= 1.1892071150027210667; - l -= 0.25; - } - if (z < 0.91700404320467123175) - { - z *= 1.0905077326652576592; - l -= 0.125; - } - if (z < 0.9576032806985736469) - { - z *= 1.0442737824274138403; - l -= 0.0625; - } - /* Now 0.95 <= z <= 1.01. */ - z = 1 - z; - /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) - Four terms are enough to get an approximation with error < 10^-7. */ - l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); - /* Finally multiply with log(2)/log(10), yields an approximation for - log10(x). */ - l *= 0.30102999566398119523; - /* Round down to the next integer. */ - return (int) l + (l < 0 ? -1 : 0); -} - -# endif - -/* Tests whether a string of digits consists of exactly PRECISION zeroes and - a single '1' digit. */ -static int -is_borderline (const char *digits, size_t precision) -{ - for (; precision > 0; precision--, digits++) - if (*digits != '0') - return 0; - if (*digits != '1') - return 0; - digits++; - return *digits == '\0'; -} - -#endif - -#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 - -/* Use a different function name, to make it possible that the 'wchar_t' - parametrization and the 'char' parametrization get compiled in the same - translation unit. */ -# if WIDE_CHAR_VERSION -# define MAX_ROOM_NEEDED wmax_room_needed -# else -# define MAX_ROOM_NEEDED max_room_needed -# endif - -/* Returns the number of TCHAR_T units needed as temporary space for the result - of sprintf or SNPRINTF of a single conversion directive. */ -static size_t -MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, - arg_type type, int flags, size_t width, int has_precision, - size_t precision, int pad_ourselves) -{ - size_t tmp_length; - - switch (conversion) - { - case 'd': case 'i': case 'u': -# if HAVE_LONG_LONG_INT - if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long long) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - else -# endif - if (type == TYPE_LONGINT || type == TYPE_ULONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) (sizeof (unsigned int) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Multiply by 2, as an estimate for FLAG_GROUP. */ - tmp_length = xsum (tmp_length, tmp_length); - /* Add 1, to account for a leading sign. */ - tmp_length = xsum (tmp_length, 1); - break; - - case 'o': -# if HAVE_LONG_LONG_INT - if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long long) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - else -# endif - if (type == TYPE_LONGINT || type == TYPE_ULONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) (sizeof (unsigned int) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Add 1, to account for a leading sign. */ - tmp_length = xsum (tmp_length, 1); - break; - - case 'x': case 'X': -# if HAVE_LONG_LONG_INT - if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long long) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - else -# endif - if (type == TYPE_LONGINT || type == TYPE_ULONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) (sizeof (unsigned int) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Add 2, to account for a leading sign or alternate form. */ - tmp_length = xsum (tmp_length, 2); - break; - - case 'f': case 'F': - if (type == TYPE_LONGDOUBLE) - tmp_length = - (unsigned int) (LDBL_MAX_EXP - * 0.30103 /* binary -> decimal */ - * 2 /* estimate for FLAG_GROUP */ - ) - + 1 /* turn floor into ceil */ - + 10; /* sign, decimal point etc. */ - else - tmp_length = - (unsigned int) (DBL_MAX_EXP - * 0.30103 /* binary -> decimal */ - * 2 /* estimate for FLAG_GROUP */ - ) - + 1 /* turn floor into ceil */ - + 10; /* sign, decimal point etc. */ - tmp_length = xsum (tmp_length, precision); - break; - - case 'e': case 'E': case 'g': case 'G': - tmp_length = - 12; /* sign, decimal point, exponent etc. */ - tmp_length = xsum (tmp_length, precision); - break; - - case 'a': case 'A': - if (type == TYPE_LONGDOUBLE) - tmp_length = - (unsigned int) (LDBL_DIG - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) (DBL_DIG - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Account for sign, decimal point etc. */ - tmp_length = xsum (tmp_length, 12); - break; - - case 'c': -# if HAVE_WINT_T && !WIDE_CHAR_VERSION - if (type == TYPE_WIDE_CHAR) - tmp_length = MB_CUR_MAX; - else -# endif - tmp_length = 1; - break; - - case 's': -# if HAVE_WCHAR_T - if (type == TYPE_WIDE_STRING) - { -# if WIDE_CHAR_VERSION - /* ISO C says about %ls in fwprintf: - "If the precision is not specified or is greater than the size - of the array, the array shall contain a null wide character." - So if there is a precision, we must not use wcslen. */ - const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; - - if (has_precision) - tmp_length = local_wcsnlen (arg, precision); - else - tmp_length = local_wcslen (arg); -# else - /* ISO C says about %ls in fprintf: - "If a precision is specified, no more than that many bytes are - written (including shift sequences, if any), and the array - shall contain a null wide character if, to equal the multibyte - character sequence length given by the precision, the function - would need to access a wide character one past the end of the - array." - So if there is a precision, we must not use wcslen. */ - /* This case has already been handled separately in VASNPRINTF. */ - abort (); -# endif - } - else -# endif - { -# if WIDE_CHAR_VERSION - /* ISO C says about %s in fwprintf: - "If the precision is not specified or is greater than the size - of the converted array, the converted array shall contain a - null wide character." - So if there is a precision, we must not use strlen. */ - /* This case has already been handled separately in VASNPRINTF. */ - abort (); -# else - /* ISO C says about %s in fprintf: - "If the precision is not specified or greater than the size of - the array, the array shall contain a null character." - So if there is a precision, we must not use strlen. */ - const char *arg = ap->arg[arg_index].a.a_string; - - if (has_precision) - tmp_length = local_strnlen (arg, precision); - else - tmp_length = strlen (arg); -# endif - } - break; - - case 'p': - tmp_length = - (unsigned int) (sizeof (void *) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1 /* turn floor into ceil */ - + 2; /* account for leading 0x */ - break; - - default: - abort (); - } - - if (!pad_ourselves) - { -# if ENABLE_UNISTDIO - /* Padding considers the number of characters, therefore the number of - elements after padding may be - > max (tmp_length, width) - but is certainly - <= tmp_length + width. */ - tmp_length = xsum (tmp_length, width); -# else - /* Padding considers the number of elements, says POSIX. */ - if (tmp_length < width) - tmp_length = width; -# endif - } - - tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ - - return tmp_length; -} - -#endif - -DCHAR_T * -VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, - const FCHAR_T *format, va_list args) -{ - DIRECTIVES d; - arguments a; - - if (PRINTF_PARSE (format, &d, &a) < 0) - /* errno is already set. */ - return NULL; - -#define CLEANUP() \ - if (d.dir != d.direct_alloc_dir) \ - free (d.dir); \ - if (a.arg != a.direct_alloc_arg) \ - free (a.arg); - - if (PRINTF_FETCHARGS (args, &a) < 0) - { - CLEANUP (); - errno = EINVAL; - return NULL; - } - - { - size_t buf_neededlength; - TCHAR_T *buf; - TCHAR_T *buf_malloced; - const FCHAR_T *cp; - size_t i; - DIRECTIVE *dp; - /* Output string accumulator. */ - DCHAR_T *result; - size_t allocated; - size_t length; - - /* Allocate a small buffer that will hold a directive passed to - sprintf or snprintf. */ - buf_neededlength = - xsum4 (7, d.max_width_length, d.max_precision_length, 6); -#if HAVE_ALLOCA - if (buf_neededlength < 4000 / sizeof (TCHAR_T)) - { - buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); - buf_malloced = NULL; - } - else -#endif - { - size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); - if (size_overflow_p (buf_memsize)) - goto out_of_memory_1; - buf = (TCHAR_T *) malloc (buf_memsize); - if (buf == NULL) - goto out_of_memory_1; - buf_malloced = buf; - } - - if (resultbuf != NULL) - { - result = resultbuf; - allocated = *lengthp; - } - else - { - result = NULL; - allocated = 0; - } - length = 0; - /* Invariants: - result is either == resultbuf or == NULL or malloc-allocated. - If length > 0, then result != NULL. */ - - /* Ensures that allocated >= needed. Aborts through a jump to - out_of_memory if needed is SIZE_MAX or otherwise too big. */ -#define ENSURE_ALLOCATION(needed) \ - if ((needed) > allocated) \ - { \ - size_t memory_size; \ - DCHAR_T *memory; \ - \ - allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ - if ((needed) > allocated) \ - allocated = (needed); \ - memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ - if (size_overflow_p (memory_size)) \ - goto out_of_memory; \ - if (result == resultbuf || result == NULL) \ - memory = (DCHAR_T *) malloc (memory_size); \ - else \ - memory = (DCHAR_T *) realloc (result, memory_size); \ - if (memory == NULL) \ - goto out_of_memory; \ - if (result == resultbuf && length > 0) \ - DCHAR_CPY (memory, result, length); \ - result = memory; \ - } - - for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) - { - if (cp != dp->dir_start) - { - size_t n = dp->dir_start - cp; - size_t augmented_length = xsum (length, n); - - ENSURE_ALLOCATION (augmented_length); - /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we - need that the format string contains only ASCII characters - if FCHAR_T and DCHAR_T are not the same type. */ - if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) - { - DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); - length = augmented_length; - } - else - { - do - result[length++] = *cp++; - while (--n > 0); - } - } - if (i == d.count) - break; - - /* Execute a single directive. */ - if (dp->conversion == '%') - { - size_t augmented_length; - - if (!(dp->arg_index == ARG_NONE)) - abort (); - augmented_length = xsum (length, 1); - ENSURE_ALLOCATION (augmented_length); - result[length] = '%'; - length = augmented_length; - } - else - { - if (!(dp->arg_index != ARG_NONE)) - abort (); - - if (dp->conversion == 'n') - { - switch (a.arg[dp->arg_index].type) - { - case TYPE_COUNT_SCHAR_POINTER: - *a.arg[dp->arg_index].a.a_count_schar_pointer = length; - break; - case TYPE_COUNT_SHORT_POINTER: - *a.arg[dp->arg_index].a.a_count_short_pointer = length; - break; - case TYPE_COUNT_INT_POINTER: - *a.arg[dp->arg_index].a.a_count_int_pointer = length; - break; - case TYPE_COUNT_LONGINT_POINTER: - *a.arg[dp->arg_index].a.a_count_longint_pointer = length; - break; -#if HAVE_LONG_LONG_INT - case TYPE_COUNT_LONGLONGINT_POINTER: - *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; - break; -#endif - default: - abort (); - } - } -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - else if (dp->conversion == 'U') - { - arg_type type = a.arg[dp->arg_index].type; - int flags = dp->flags; - int has_width; - size_t width; - int has_precision; - size_t precision; - - has_width = 0; - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - has_width = 1; - } - - has_precision = 0; - precision = 0; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - - switch (type) - { - case TYPE_U8_STRING: - { - const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; - const uint8_t *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only PRECISION characters, from the left. */ - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count = u8_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of - characters. */ - arg_end = arg; - characters = 0; - for (;;) - { - int count = u8_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + u8_strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_UINT8_T - { - size_t n = arg_end - arg; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_CPY (result + length, arg, n); - length += n; - } -# else - { /* Convert. */ - DCHAR_T *converted = result + length; - size_t converted_len = allocated - length; -# if DCHAR_IS_TCHAR - /* Convert from UTF-8 to locale encoding. */ - converted = - u8_conv_to_encoding (locale_charset (), - iconveh_question_mark, - arg, arg_end - arg, NULL, - converted, &converted_len); -# else - /* Convert from UTF-8 to UTF-16/UTF-32. */ - converted = - U8_TO_DCHAR (arg, arg_end - arg, - converted, &converted_len); -# endif - if (converted == NULL) - { - int saved_errno = errno; - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = saved_errno; - return NULL; - } - if (converted != result + length) - { - ENSURE_ALLOCATION (xsum (length, converted_len)); - DCHAR_CPY (result + length, converted, converted_len); - free (converted); - } - length += converted_len; - } -# endif - - if (characters < width && (dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - break; - - case TYPE_U16_STRING: - { - const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; - const uint16_t *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only PRECISION characters, from the left. */ - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count = u16_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of - characters. */ - arg_end = arg; - characters = 0; - for (;;) - { - int count = u16_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + u16_strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_UINT16_T - { - size_t n = arg_end - arg; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_CPY (result + length, arg, n); - length += n; - } -# else - { /* Convert. */ - DCHAR_T *converted = result + length; - size_t converted_len = allocated - length; -# if DCHAR_IS_TCHAR - /* Convert from UTF-16 to locale encoding. */ - converted = - u16_conv_to_encoding (locale_charset (), - iconveh_question_mark, - arg, arg_end - arg, NULL, - converted, &converted_len); -# else - /* Convert from UTF-16 to UTF-8/UTF-32. */ - converted = - U16_TO_DCHAR (arg, arg_end - arg, - converted, &converted_len); -# endif - if (converted == NULL) - { - int saved_errno = errno; - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = saved_errno; - return NULL; - } - if (converted != result + length) - { - ENSURE_ALLOCATION (xsum (length, converted_len)); - DCHAR_CPY (result + length, converted, converted_len); - free (converted); - } - length += converted_len; - } -# endif - - if (characters < width && (dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - break; - - case TYPE_U32_STRING: - { - const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; - const uint32_t *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only PRECISION characters, from the left. */ - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count = u32_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of - characters. */ - arg_end = arg; - characters = 0; - for (;;) - { - int count = u32_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + u32_strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_UINT32_T - { - size_t n = arg_end - arg; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_CPY (result + length, arg, n); - length += n; - } -# else - { /* Convert. */ - DCHAR_T *converted = result + length; - size_t converted_len = allocated - length; -# if DCHAR_IS_TCHAR - /* Convert from UTF-32 to locale encoding. */ - converted = - u32_conv_to_encoding (locale_charset (), - iconveh_question_mark, - arg, arg_end - arg, NULL, - converted, &converted_len); -# else - /* Convert from UTF-32 to UTF-8/UTF-16. */ - converted = - U32_TO_DCHAR (arg, arg_end - arg, - converted, &converted_len); -# endif - if (converted == NULL) - { - int saved_errno = errno; - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = saved_errno; - return NULL; - } - if (converted != result + length) - { - ENSURE_ALLOCATION (xsum (length, converted_len)); - DCHAR_CPY (result + length, converted, converted_len); - free (converted); - } - length += converted_len; - } -# endif - - if (characters < width && (dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - break; - - default: - abort (); - } - } -#endif -#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T - else if (dp->conversion == 's' -# if WIDE_CHAR_VERSION - && a.arg[dp->arg_index].type != TYPE_WIDE_STRING -# else - && a.arg[dp->arg_index].type == TYPE_WIDE_STRING -# endif - ) - { - /* The normal handling of the 's' directive below requires - allocating a temporary buffer. The determination of its - length (tmp_length), in the case when a precision is - specified, below requires a conversion between a char[] - string and a wchar_t[] wide string. It could be done, but - we have no guarantee that the implementation of sprintf will - use the exactly same algorithm. Without this guarantee, it - is possible to have buffer overrun bugs. In order to avoid - such bugs, we implement the entire processing of the 's' - directive ourselves. */ - int flags = dp->flags; - int has_width; - size_t width; - int has_precision; - size_t precision; - - has_width = 0; - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - has_width = 1; - } - - has_precision = 0; - precision = 6; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - -# if WIDE_CHAR_VERSION - /* %s in vasnwprintf. See the specification of fwprintf. */ - { - const char *arg = a.arg[dp->arg_index].a.a_string; - const char *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only as many bytes as needed to produce PRECISION - wide characters, from the left. */ -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count; -# if HAVE_MBRTOWC - count = mbrlen (arg_end, MB_CUR_MAX, &state); -# else - count = mblen (arg_end, MB_CUR_MAX); -# endif - if (count == 0) - /* Found the terminating NUL. */ - break; - if (count < 0) - { - /* Invalid or incomplete multibyte character. */ - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of wide - characters. */ -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - for (;;) - { - int count; -# if HAVE_MBRTOWC - count = mbrlen (arg_end, MB_CUR_MAX, &state); -# else - count = mblen (arg_end, MB_CUR_MAX); -# endif - if (count == 0) - /* Found the terminating NUL. */ - break; - if (count < 0) - { - /* Invalid or incomplete multibyte character. */ - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - - if (has_precision || has_width) - { - /* We know the number of wide characters in advance. */ - size_t remaining; -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - ENSURE_ALLOCATION (xsum (length, characters)); - for (remaining = characters; remaining > 0; remaining--) - { - wchar_t wc; - int count; -# if HAVE_MBRTOWC - count = mbrtowc (&wc, arg, arg_end - arg, &state); -# else - count = mbtowc (&wc, arg, arg_end - arg); -# endif - if (count <= 0) - /* mbrtowc not consistent with mbrlen, or mbtowc - not consistent with mblen. */ - abort (); - result[length++] = wc; - arg += count; - } - if (!(arg == arg_end)) - abort (); - } - else - { -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - while (arg < arg_end) - { - wchar_t wc; - int count; -# if HAVE_MBRTOWC - count = mbrtowc (&wc, arg, arg_end - arg, &state); -# else - count = mbtowc (&wc, arg, arg_end - arg); -# endif - if (count <= 0) - /* mbrtowc not consistent with mbrlen, or mbtowc - not consistent with mblen. */ - abort (); - ENSURE_ALLOCATION (xsum (length, 1)); - result[length++] = wc; - arg += count; - } - } - - if (characters < width && (dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } -# else - /* %ls in vasnprintf. See the specification of fprintf. */ - { - const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; - const wchar_t *arg_end; - size_t characters; -# if !DCHAR_IS_TCHAR - /* This code assumes that TCHAR_T is 'char'. */ - verify (sizeof (TCHAR_T) == 1); - TCHAR_T *tmpsrc; - DCHAR_T *tmpdst; - size_t tmpdst_len; -# endif - size_t w; - - if (has_precision) - { - /* Use only as many wide characters as needed to produce - at most PRECISION bytes, from the left. */ -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - while (precision > 0) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg_end == 0) - /* Found the terminating null wide character. */ - break; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - count = wcrtomb (cbuf, *arg_end, &state); -# else - count = wctomb (cbuf, *arg_end); -# endif - if (count < 0) - { - /* Cannot convert. */ - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - if (precision < count) - break; - arg_end++; - characters += count; - precision -= count; - } - } -# if DCHAR_IS_TCHAR - else if (has_width) -# else - else -# endif - { - /* Use the entire string, and count the number of - bytes. */ -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - for (;;) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg_end == 0) - /* Found the terminating null wide character. */ - break; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - count = wcrtomb (cbuf, *arg_end, &state); -# else - count = wctomb (cbuf, *arg_end); -# endif - if (count < 0) - { - /* Cannot convert. */ - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end++; - characters += count; - } - } -# if DCHAR_IS_TCHAR - else - { - /* Use the entire string. */ - arg_end = arg + local_wcslen (arg); - /* The number of bytes doesn't matter. */ - characters = 0; - } -# endif - -# if !DCHAR_IS_TCHAR - /* Convert the string into a piece of temporary memory. */ - tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); - if (tmpsrc == NULL) - goto out_of_memory; - { - TCHAR_T *tmpptr = tmpsrc; - size_t remaining; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - for (remaining = characters; remaining > 0; ) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg == 0) - abort (); -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - count = wcrtomb (cbuf, *arg, &state); -# else - count = wctomb (cbuf, *arg); -# endif - if (count <= 0) - /* Inconsistency. */ - abort (); - memcpy (tmpptr, cbuf, count); - tmpptr += count; - arg++; - remaining -= count; - } - if (!(arg == arg_end)) - abort (); - } - - /* Convert from TCHAR_T[] to DCHAR_T[]. */ - tmpdst = - DCHAR_CONV_FROM_ENCODING (locale_charset (), - iconveh_question_mark, - tmpsrc, characters, - NULL, - NULL, &tmpdst_len); - if (tmpdst == NULL) - { - int saved_errno = errno; - free (tmpsrc); - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = saved_errno; - return NULL; - } - free (tmpsrc); -# endif - - if (has_width) - { -# if ENABLE_UNISTDIO - /* Outside POSIX, it's preferable to compare the width - against the number of _characters_ of the converted - value. */ - w = DCHAR_MBSNLEN (result + length, characters); -# else - /* The width is compared against the number of _bytes_ - of the converted value, says POSIX. */ - w = characters; -# endif - } - else - /* w doesn't matter. */ - w = 0; - - if (w < width && !(dp->flags & FLAG_LEFT)) - { - size_t n = width - w; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_TCHAR - if (has_precision || has_width) - { - /* We know the number of bytes in advance. */ - size_t remaining; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - ENSURE_ALLOCATION (xsum (length, characters)); - for (remaining = characters; remaining > 0; ) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg == 0) - abort (); -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - count = wcrtomb (cbuf, *arg, &state); -# else - count = wctomb (cbuf, *arg); -# endif - if (count <= 0) - /* Inconsistency. */ - abort (); - memcpy (result + length, cbuf, count); - length += count; - arg++; - remaining -= count; - } - if (!(arg == arg_end)) - abort (); - } - else - { -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - while (arg < arg_end) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg == 0) - abort (); -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - count = wcrtomb (cbuf, *arg, &state); -# else - count = wctomb (cbuf, *arg); -# endif - if (count <= 0) - { - /* Cannot convert. */ - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - ENSURE_ALLOCATION (xsum (length, count)); - memcpy (result + length, cbuf, count); - length += count; - arg++; - } - } -# else - ENSURE_ALLOCATION (xsum (length, tmpdst_len)); - DCHAR_CPY (result + length, tmpdst, tmpdst_len); - free (tmpdst); - length += tmpdst_len; -# endif - - if (w < width && (dp->flags & FLAG_LEFT)) - { - size_t n = width - w; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } -# endif - } -#endif -#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL - else if ((dp->conversion == 'a' || dp->conversion == 'A') -# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) - && (0 -# if NEED_PRINTF_DOUBLE - || a.arg[dp->arg_index].type == TYPE_DOUBLE -# endif -# if NEED_PRINTF_LONG_DOUBLE - || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE -# endif - ) -# endif - ) - { - arg_type type = a.arg[dp->arg_index].type; - int flags = dp->flags; - size_t width; - int has_precision; - size_t precision; - size_t tmp_length; - size_t count; - DCHAR_T tmpbuf[700]; - DCHAR_T *tmp; - DCHAR_T *pad_ptr; - DCHAR_T *p; - - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - } - - has_precision = 0; - precision = 0; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - - /* Allocate a temporary buffer of sufficient size. */ - if (type == TYPE_LONGDOUBLE) - tmp_length = - (unsigned int) ((LDBL_DIG + 1) - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) ((DBL_DIG + 1) - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Account for sign, decimal point etc. */ - tmp_length = xsum (tmp_length, 12); - - if (tmp_length < width) - tmp_length = width; - - tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ - - if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) - tmp = tmpbuf; - else - { - size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); - - if (size_overflow_p (tmp_memsize)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - tmp = (DCHAR_T *) malloc (tmp_memsize); - if (tmp == NULL) - /* Out of memory. */ - goto out_of_memory; - } - - pad_ptr = NULL; - p = tmp; - if (type == TYPE_LONGDOUBLE) - { -# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE - long double arg = a.arg[dp->arg_index].a.a_longdouble; - - if (isnanl (arg)) - { - if (dp->conversion == 'A') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - DECL_LONG_DOUBLE_ROUNDING - - BEGIN_LONG_DOUBLE_ROUNDING (); - - if (signbit (arg)) /* arg < 0.0L or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0L && arg + arg == arg) - { - if (dp->conversion == 'A') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { - int exponent; - long double mantissa; - - if (arg > 0.0L) - mantissa = printf_frexpl (arg, &exponent); - else - { - exponent = 0; - mantissa = 0.0L; - } - - if (has_precision - && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) - { - /* Round the mantissa. */ - long double tail = mantissa; - size_t q; - - for (q = precision; ; q--) - { - int digit = (int) tail; - tail -= digit; - if (q == 0) - { - if (digit & 1 ? tail >= 0.5L : tail > 0.5L) - tail = 1 - tail; - else - tail = - tail; - break; - } - tail *= 16.0L; - } - if (tail != 0.0L) - for (q = precision; q > 0; q--) - tail *= 0.0625L; - mantissa += tail; - } - - *p++ = '0'; - *p++ = dp->conversion - 'A' + 'X'; - pad_ptr = p; - { - int digit; - - digit = (int) mantissa; - mantissa -= digit; - *p++ = '0' + digit; - if ((flags & FLAG_ALT) - || mantissa > 0.0L || precision > 0) - { - *p++ = decimal_point_char (); - /* This loop terminates because we assume - that FLT_RADIX is a power of 2. */ - while (mantissa > 0.0L) - { - mantissa *= 16.0L; - digit = (int) mantissa; - mantissa -= digit; - *p++ = digit - + (digit < 10 - ? '0' - : dp->conversion - 10); - if (precision > 0) - precision--; - } - while (precision > 0) - { - *p++ = '0'; - precision--; - } - } - } - *p++ = dp->conversion - 'A' + 'P'; -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - { '%', '+', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - - END_LONG_DOUBLE_ROUNDING (); - } -# else - abort (); -# endif - } - else - { -# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE - double arg = a.arg[dp->arg_index].a.a_double; - - if (isnand (arg)) - { - if (dp->conversion == 'A') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - - if (signbit (arg)) /* arg < 0.0 or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0 && arg + arg == arg) - { - if (dp->conversion == 'A') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { - int exponent; - double mantissa; - - if (arg > 0.0) - mantissa = printf_frexp (arg, &exponent); - else - { - exponent = 0; - mantissa = 0.0; - } - - if (has_precision - && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) - { - /* Round the mantissa. */ - double tail = mantissa; - size_t q; - - for (q = precision; ; q--) - { - int digit = (int) tail; - tail -= digit; - if (q == 0) - { - if (digit & 1 ? tail >= 0.5 : tail > 0.5) - tail = 1 - tail; - else - tail = - tail; - break; - } - tail *= 16.0; - } - if (tail != 0.0) - for (q = precision; q > 0; q--) - tail *= 0.0625; - mantissa += tail; - } - - *p++ = '0'; - *p++ = dp->conversion - 'A' + 'X'; - pad_ptr = p; - { - int digit; - - digit = (int) mantissa; - mantissa -= digit; - *p++ = '0' + digit; - if ((flags & FLAG_ALT) - || mantissa > 0.0 || precision > 0) - { - *p++ = decimal_point_char (); - /* This loop terminates because we assume - that FLT_RADIX is a power of 2. */ - while (mantissa > 0.0) - { - mantissa *= 16.0; - digit = (int) mantissa; - mantissa -= digit; - *p++ = digit - + (digit < 10 - ? '0' - : dp->conversion - 10); - if (precision > 0) - precision--; - } - while (precision > 0) - { - *p++ = '0'; - precision--; - } - } - } - *p++ = dp->conversion - 'A' + 'P'; -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - { '%', '+', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - } -# else - abort (); -# endif - } - - /* The generated string now extends from tmp to p, with the - zero padding insertion point being at pad_ptr. */ - count = p - tmp; - - if (count < width) - { - size_t pad = width - count; - DCHAR_T *end = p + pad; - - if (flags & FLAG_LEFT) - { - /* Pad with spaces on the right. */ - for (; pad > 0; pad--) - *p++ = ' '; - } - else if ((flags & FLAG_ZERO) && pad_ptr != NULL) - { - /* Pad with zeroes. */ - DCHAR_T *q = end; - - while (p > pad_ptr) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = '0'; - } - else - { - /* Pad with spaces on the left. */ - DCHAR_T *q = end; - - while (p > tmp) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = ' '; - } - - p = end; - } - - count = p - tmp; - - if (count >= tmp_length) - /* tmp_length was incorrectly calculated - fix the - code above! */ - abort (); - - /* Make room for the result. */ - if (count >= allocated - length) - { - size_t n = xsum (length, count); - - ENSURE_ALLOCATION (n); - } - - /* Append the result. */ - memcpy (result + length, tmp, count * sizeof (DCHAR_T)); - if (tmp != tmpbuf) - free (tmp); - length += count; - } -#endif -#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL - else if ((dp->conversion == 'f' || dp->conversion == 'F' - || dp->conversion == 'e' || dp->conversion == 'E' - || dp->conversion == 'g' || dp->conversion == 'G' - || dp->conversion == 'a' || dp->conversion == 'A') - && (0 -# if NEED_PRINTF_DOUBLE - || a.arg[dp->arg_index].type == TYPE_DOUBLE -# elif NEED_PRINTF_INFINITE_DOUBLE - || (a.arg[dp->arg_index].type == TYPE_DOUBLE - /* The systems (mingw) which produce wrong output - for Inf, -Inf, and NaN also do so for -0.0. - Therefore we treat this case here as well. */ - && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) -# endif -# if NEED_PRINTF_LONG_DOUBLE - || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE -# elif NEED_PRINTF_INFINITE_LONG_DOUBLE - || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE - /* Some systems produce wrong output for Inf, - -Inf, and NaN. Some systems in this category - (IRIX 5.3) also do so for -0.0. Therefore we - treat this case here as well. */ - && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) -# endif - )) - { -# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) - arg_type type = a.arg[dp->arg_index].type; -# endif - int flags = dp->flags; - size_t width; - size_t count; - int has_precision; - size_t precision; - size_t tmp_length; - DCHAR_T tmpbuf[700]; - DCHAR_T *tmp; - DCHAR_T *pad_ptr; - DCHAR_T *p; - - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - } - - has_precision = 0; - precision = 0; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - - /* POSIX specifies the default precision to be 6 for %f, %F, - %e, %E, but not for %g, %G. Implementations appear to use - the same default precision also for %g, %G. But for %a, %A, - the default precision is 0. */ - if (!has_precision) - if (!(dp->conversion == 'a' || dp->conversion == 'A')) - precision = 6; - - /* Allocate a temporary buffer of sufficient size. */ -# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE - tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); -# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE - tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); -# elif NEED_PRINTF_LONG_DOUBLE - tmp_length = LDBL_DIG + 1; -# elif NEED_PRINTF_DOUBLE - tmp_length = DBL_DIG + 1; -# else - tmp_length = 0; -# endif - if (tmp_length < precision) - tmp_length = precision; -# if NEED_PRINTF_LONG_DOUBLE -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - if (type == TYPE_LONGDOUBLE) -# endif - if (dp->conversion == 'f' || dp->conversion == 'F') - { - long double arg = a.arg[dp->arg_index].a.a_longdouble; - if (!(isnanl (arg) || arg + arg == arg)) - { - /* arg is finite and nonzero. */ - int exponent = floorlog10l (arg < 0 ? -arg : arg); - if (exponent >= 0 && tmp_length < exponent + precision) - tmp_length = exponent + precision; - } - } -# endif -# if NEED_PRINTF_DOUBLE -# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE - if (type == TYPE_DOUBLE) -# endif - if (dp->conversion == 'f' || dp->conversion == 'F') - { - double arg = a.arg[dp->arg_index].a.a_double; - if (!(isnand (arg) || arg + arg == arg)) - { - /* arg is finite and nonzero. */ - int exponent = floorlog10 (arg < 0 ? -arg : arg); - if (exponent >= 0 && tmp_length < exponent + precision) - tmp_length = exponent + precision; - } - } -# endif - /* Account for sign, decimal point etc. */ - tmp_length = xsum (tmp_length, 12); - - if (tmp_length < width) - tmp_length = width; - - tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ - - if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) - tmp = tmpbuf; - else - { - size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); - - if (size_overflow_p (tmp_memsize)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - tmp = (DCHAR_T *) malloc (tmp_memsize); - if (tmp == NULL) - /* Out of memory. */ - goto out_of_memory; - } - - pad_ptr = NULL; - p = tmp; - -# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - if (type == TYPE_LONGDOUBLE) -# endif - { - long double arg = a.arg[dp->arg_index].a.a_longdouble; - - if (isnanl (arg)) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - DECL_LONG_DOUBLE_ROUNDING - - BEGIN_LONG_DOUBLE_ROUNDING (); - - if (signbit (arg)) /* arg < 0.0L or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0L && arg + arg == arg) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { -# if NEED_PRINTF_LONG_DOUBLE - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - char *digits; - size_t ndigits; - - digits = - scale10_round_decimal_long_double (arg, precision); - if (digits == NULL) - { - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - ndigits = strlen (digits); - - if (ndigits > precision) - do - { - --ndigits; - *p++ = digits[ndigits]; - } - while (ndigits > precision); - else - *p++ = '0'; - /* Here ndigits <= precision. */ - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > ndigits; precision--) - *p++ = '0'; - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - int exponent; - - if (arg == 0.0L) - { - exponent = 0; - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else - { - /* arg > 0.0L. */ - int adjusted; - char *digits; - size_t ndigits; - - exponent = floorlog10l (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_long_double (arg, - (int)precision - exponent); - if (digits == NULL) - { - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - ndigits = strlen (digits); - - if (ndigits == precision + 1) - break; - if (ndigits < precision - || ndigits > precision + 2) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits == precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision+1. */ - if (is_borderline (digits, precision)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_long_double (arg, - (int)precision - exponent + 1); - if (digits2 == NULL) - { - free (digits); - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - if (strlen (digits2) == precision + 1) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision+1. */ - - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - - *p++ = dp->conversion; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - { '%', '+', '.', '2', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+.2d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+.2d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - if (precision == 0) - precision = 1; - /* precision >= 1. */ - - if (arg == 0.0L) - /* The exponent is 0, >= -4, < precision. - Use fixed-point notation. */ - { - size_t ndigits = precision; - /* Number of trailing zeroes that have to be - dropped. */ - size_t nzeroes = - (flags & FLAG_ALT ? 0 : precision - 1); - - --ndigits; - *p++ = '0'; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = '0'; - } - } - } - else - { - /* arg > 0.0L. */ - int exponent; - int adjusted; - char *digits; - size_t ndigits; - size_t nzeroes; - - exponent = floorlog10l (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_long_double (arg, - (int)(precision - 1) - exponent); - if (digits == NULL) - { - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - ndigits = strlen (digits); - - if (ndigits == precision) - break; - if (ndigits < precision - 1 - || ndigits > precision + 1) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits < precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision. */ - if (is_borderline (digits, precision - 1)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_long_double (arg, - (int)(precision - 1) - exponent + 1); - if (digits2 == NULL) - { - free (digits); - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - if (strlen (digits2) == precision) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision. */ - - /* Determine the number of trailing zeroes - that have to be dropped. */ - nzeroes = 0; - if ((flags & FLAG_ALT) == 0) - while (nzeroes < ndigits - && digits[nzeroes] == '0') - nzeroes++; - - /* The exponent is now determined. */ - if (exponent >= -4 - && exponent < (long)precision) - { - /* Fixed-point notation: - max(exponent,0)+1 digits, then the - decimal point, then the remaining - digits without trailing zeroes. */ - if (exponent >= 0) - { - size_t ecount = exponent + 1; - /* Note: count <= precision = ndigits. */ - for (; ecount > 0; ecount--) - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - size_t ecount = -exponent - 1; - *p++ = '0'; - *p++ = decimal_point_char (); - for (; ecount > 0; ecount--) - *p++ = '0'; - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - /* Exponential notation. */ - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - { '%', '+', '.', '2', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+.2d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+.2d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - - free (digits); - } - } - else - abort (); -# else - /* arg is finite. */ - if (!(arg == 0.0L)) - abort (); - - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - *p++ = dp->conversion; /* 'e' or 'E' */ - *p++ = '+'; - *p++ = '0'; - *p++ = '0'; - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - *p++ = '0'; - if (flags & FLAG_ALT) - { - size_t ndigits = - (precision > 0 ? precision - 1 : 0); - *p++ = decimal_point_char (); - for (; ndigits > 0; --ndigits) - *p++ = '0'; - } - } - else if (dp->conversion == 'a' || dp->conversion == 'A') - { - *p++ = '0'; - *p++ = dp->conversion - 'A' + 'X'; - pad_ptr = p; - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - *p++ = dp->conversion - 'A' + 'P'; - *p++ = '+'; - *p++ = '0'; - } - else - abort (); -# endif - } - - END_LONG_DOUBLE_ROUNDING (); - } - } -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - else -# endif -# endif -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - { - double arg = a.arg[dp->arg_index].a.a_double; - - if (isnand (arg)) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - - if (signbit (arg)) /* arg < 0.0 or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0 && arg + arg == arg) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { -# if NEED_PRINTF_DOUBLE - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - char *digits; - size_t ndigits; - - digits = - scale10_round_decimal_double (arg, precision); - if (digits == NULL) - goto out_of_memory; - ndigits = strlen (digits); - - if (ndigits > precision) - do - { - --ndigits; - *p++ = digits[ndigits]; - } - while (ndigits > precision); - else - *p++ = '0'; - /* Here ndigits <= precision. */ - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > ndigits; precision--) - *p++ = '0'; - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - int exponent; - - if (arg == 0.0) - { - exponent = 0; - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else - { - /* arg > 0.0. */ - int adjusted; - char *digits; - size_t ndigits; - - exponent = floorlog10 (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_double (arg, - (int)precision - exponent); - if (digits == NULL) - goto out_of_memory; - ndigits = strlen (digits); - - if (ndigits == precision + 1) - break; - if (ndigits < precision - || ndigits > precision + 2) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits == precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision+1. */ - if (is_borderline (digits, precision)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_double (arg, - (int)precision - exponent + 1); - if (digits2 == NULL) - { - free (digits); - goto out_of_memory; - } - if (strlen (digits2) == precision + 1) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision+1. */ - - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - - *p++ = dp->conversion; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - { '%', '+', '.', '3', 'd', '\0' }; -# else - { '%', '+', '.', '2', 'd', '\0' }; -# endif - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - { - static const char decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - "%+.3d"; -# else - "%+.2d"; -# endif - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, decimal_format, exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, decimal_format, exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } - } -# endif - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - if (precision == 0) - precision = 1; - /* precision >= 1. */ - - if (arg == 0.0) - /* The exponent is 0, >= -4, < precision. - Use fixed-point notation. */ - { - size_t ndigits = precision; - /* Number of trailing zeroes that have to be - dropped. */ - size_t nzeroes = - (flags & FLAG_ALT ? 0 : precision - 1); - - --ndigits; - *p++ = '0'; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = '0'; - } - } - } - else - { - /* arg > 0.0. */ - int exponent; - int adjusted; - char *digits; - size_t ndigits; - size_t nzeroes; - - exponent = floorlog10 (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_double (arg, - (int)(precision - 1) - exponent); - if (digits == NULL) - goto out_of_memory; - ndigits = strlen (digits); - - if (ndigits == precision) - break; - if (ndigits < precision - 1 - || ndigits > precision + 1) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits < precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision. */ - if (is_borderline (digits, precision - 1)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_double (arg, - (int)(precision - 1) - exponent + 1); - if (digits2 == NULL) - { - free (digits); - goto out_of_memory; - } - if (strlen (digits2) == precision) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision. */ - - /* Determine the number of trailing zeroes - that have to be dropped. */ - nzeroes = 0; - if ((flags & FLAG_ALT) == 0) - while (nzeroes < ndigits - && digits[nzeroes] == '0') - nzeroes++; - - /* The exponent is now determined. */ - if (exponent >= -4 - && exponent < (long)precision) - { - /* Fixed-point notation: - max(exponent,0)+1 digits, then the - decimal point, then the remaining - digits without trailing zeroes. */ - if (exponent >= 0) - { - size_t ecount = exponent + 1; - /* Note: ecount <= precision = ndigits. */ - for (; ecount > 0; ecount--) - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - size_t ecount = -exponent - 1; - *p++ = '0'; - *p++ = decimal_point_char (); - for (; ecount > 0; ecount--) - *p++ = '0'; - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - /* Exponential notation. */ - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - { '%', '+', '.', '3', 'd', '\0' }; -# else - { '%', '+', '.', '2', 'd', '\0' }; -# endif - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - { - static const char decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - "%+.3d"; -# else - "%+.2d"; -# endif - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, decimal_format, exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, decimal_format, exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } - } -# endif - } - - free (digits); - } - } - else - abort (); -# else - /* arg is finite. */ - if (!(arg == 0.0)) - abort (); - - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - *p++ = dp->conversion; /* 'e' or 'E' */ - *p++ = '+'; - /* Produce the same number of exponent digits as - the native printf implementation. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - *p++ = '0'; -# endif - *p++ = '0'; - *p++ = '0'; - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - *p++ = '0'; - if (flags & FLAG_ALT) - { - size_t ndigits = - (precision > 0 ? precision - 1 : 0); - *p++ = decimal_point_char (); - for (; ndigits > 0; --ndigits) - *p++ = '0'; - } - } - else - abort (); -# endif - } - } - } -# endif - - /* The generated string now extends from tmp to p, with the - zero padding insertion point being at pad_ptr. */ - count = p - tmp; - - if (count < width) - { - size_t pad = width - count; - DCHAR_T *end = p + pad; - - if (flags & FLAG_LEFT) - { - /* Pad with spaces on the right. */ - for (; pad > 0; pad--) - *p++ = ' '; - } - else if ((flags & FLAG_ZERO) && pad_ptr != NULL) - { - /* Pad with zeroes. */ - DCHAR_T *q = end; - - while (p > pad_ptr) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = '0'; - } - else - { - /* Pad with spaces on the left. */ - DCHAR_T *q = end; - - while (p > tmp) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = ' '; - } - - p = end; - } - - count = p - tmp; - - if (count >= tmp_length) - /* tmp_length was incorrectly calculated - fix the - code above! */ - abort (); - - /* Make room for the result. */ - if (count >= allocated - length) - { - size_t n = xsum (length, count); - - ENSURE_ALLOCATION (n); - } - - /* Append the result. */ - memcpy (result + length, tmp, count * sizeof (DCHAR_T)); - if (tmp != tmpbuf) - free (tmp); - length += count; - } -#endif - else - { - arg_type type = a.arg[dp->arg_index].type; - int flags = dp->flags; -#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - int has_width; -#endif -#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - size_t width; -#endif -#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION - int has_precision; - size_t precision; -#endif -#if NEED_PRINTF_UNBOUNDED_PRECISION - int prec_ourselves; -#else -# define prec_ourselves 0 -#endif -#if NEED_PRINTF_FLAG_LEFTADJUST -# define pad_ourselves 1 -#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - int pad_ourselves; -#else -# define pad_ourselves 0 -#endif - TCHAR_T *fbp; - unsigned int prefix_count; - int prefixes[2] IF_LINT (= { 0 }); - int orig_errno; -#if !USE_SNPRINTF - size_t tmp_length; - TCHAR_T tmpbuf[700]; - TCHAR_T *tmp; -#endif - -#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - has_width = 0; -#endif -#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } -#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - has_width = 1; -#endif - } -#endif - -#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION - has_precision = 0; - precision = 6; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } -#endif - - /* Decide whether to handle the precision ourselves. */ -#if NEED_PRINTF_UNBOUNDED_PRECISION - switch (dp->conversion) - { - case 'd': case 'i': case 'u': - case 'o': - case 'x': case 'X': case 'p': - prec_ourselves = has_precision && (precision > 0); - break; - default: - prec_ourselves = 0; - break; - } -#endif - - /* Decide whether to perform the padding ourselves. */ -#if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) - switch (dp->conversion) - { -# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO - /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need - to perform the padding after this conversion. Functions - with unistdio extensions perform the padding based on - character count rather than element count. */ - case 'c': case 's': -# endif -# if NEED_PRINTF_FLAG_ZERO - case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': - case 'a': case 'A': -# endif - pad_ourselves = 1; - break; - default: - pad_ourselves = prec_ourselves; - break; - } -#endif - -#if !USE_SNPRINTF - /* Allocate a temporary buffer of sufficient size for calling - sprintf. */ - tmp_length = - MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, - flags, width, has_precision, precision, - pad_ourselves); - - if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) - tmp = tmpbuf; - else - { - size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); - - if (size_overflow_p (tmp_memsize)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - tmp = (TCHAR_T *) malloc (tmp_memsize); - if (tmp == NULL) - /* Out of memory. */ - goto out_of_memory; - } -#endif - - /* Construct the format string for calling snprintf or - sprintf. */ - fbp = buf; - *fbp++ = '%'; -#if NEED_PRINTF_FLAG_GROUPING - /* The underlying implementation doesn't support the ' flag. - Produce no grouping characters in this case; this is - acceptable because the grouping is locale dependent. */ -#else - if (flags & FLAG_GROUP) - *fbp++ = '\''; -#endif - if (flags & FLAG_LEFT) - *fbp++ = '-'; - if (flags & FLAG_SHOWSIGN) - *fbp++ = '+'; - if (flags & FLAG_SPACE) - *fbp++ = ' '; - if (flags & FLAG_ALT) - *fbp++ = '#'; -#if __GLIBC__ >= 2 && !defined __UCLIBC__ - if (flags & FLAG_LOCALIZED) - *fbp++ = 'I'; -#endif - if (!pad_ourselves) - { - if (flags & FLAG_ZERO) - *fbp++ = '0'; - if (dp->width_start != dp->width_end) - { - size_t n = dp->width_end - dp->width_start; - /* The width specification is known to consist only - of standard ASCII characters. */ - if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) - { - memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); - fbp += n; - } - else - { - const FCHAR_T *mp = dp->width_start; - do - *fbp++ = *mp++; - while (--n > 0); - } - } - } - if (!prec_ourselves) - { - if (dp->precision_start != dp->precision_end) - { - size_t n = dp->precision_end - dp->precision_start; - /* The precision specification is known to consist only - of standard ASCII characters. */ - if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) - { - memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); - fbp += n; - } - else - { - const FCHAR_T *mp = dp->precision_start; - do - *fbp++ = *mp++; - while (--n > 0); - } - } - } - - switch (type) - { -#if HAVE_LONG_LONG_INT - case TYPE_LONGLONGINT: - case TYPE_ULONGLONGINT: -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - *fbp++ = 'I'; - *fbp++ = '6'; - *fbp++ = '4'; - break; -# else - *fbp++ = 'l'; -# endif -#endif - /*FALLTHROUGH*/ - case TYPE_LONGINT: - case TYPE_ULONGINT: -#if HAVE_WINT_T - case TYPE_WIDE_CHAR: -#endif -#if HAVE_WCHAR_T - case TYPE_WIDE_STRING: -#endif - *fbp++ = 'l'; - break; - case TYPE_LONGDOUBLE: - *fbp++ = 'L'; - break; - default: - break; - } -#if NEED_PRINTF_DIRECTIVE_F - if (dp->conversion == 'F') - *fbp = 'f'; - else -#endif - *fbp = dp->conversion; -#if USE_SNPRINTF -# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) - fbp[1] = '%'; - fbp[2] = 'n'; - fbp[3] = '\0'; -# else - /* On glibc2 systems from glibc >= 2.3 - probably also older - ones - we know that snprintf's return value conforms to - ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and - gl_SNPRINTF_TRUNCATION_C99 pass. - Therefore we can avoid using %n in this situation. - On glibc2 systems from 2004-10-18 or newer, the use of %n - in format strings in writable memory may crash the program - (if compiled with _FORTIFY_SOURCE=2), so we should avoid it - in this situation. */ - /* On native Windows systems (such as mingw), we can avoid using - %n because: - - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, - snprintf does not write more than the specified number - of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes - '4', '5', '6' into buf, not '4', '5', '\0'.) - - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf - allows us to recognize the case of an insufficient - buffer size: it returns -1 in this case. - On native Windows systems (such as mingw) where the OS is - Windows Vista, the use of %n in format strings by default - crashes the program. See - and - - So we should avoid %n in this situation. */ - fbp[1] = '\0'; -# endif -#else - fbp[1] = '\0'; -#endif - - /* Construct the arguments for calling snprintf or sprintf. */ - prefix_count = 0; - if (!pad_ourselves && dp->width_arg_index != ARG_NONE) - { - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; - } - if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) - { - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; - } - -#if USE_SNPRINTF - /* The SNPRINTF result is appended after result[0..length]. - The latter is an array of DCHAR_T; SNPRINTF appends an - array of TCHAR_T to it. This is possible because - sizeof (TCHAR_T) divides sizeof (DCHAR_T) and - alignof (TCHAR_T) <= alignof (DCHAR_T). */ -# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) - /* Ensure that maxlen below will be >= 2. Needed on BeOS, - where an snprintf() with maxlen==1 acts like sprintf(). */ - ENSURE_ALLOCATION (xsum (length, - (2 + TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR)); - /* Prepare checking whether snprintf returns the count - via %n. */ - *(TCHAR_T *) (result + length) = '\0'; -#endif - - orig_errno = errno; - - for (;;) - { - int count = -1; - -#if USE_SNPRINTF - int retcount = 0; - size_t maxlen = allocated - length; - /* SNPRINTF can fail if its second argument is - > INT_MAX. */ - if (maxlen > INT_MAX / TCHARS_PER_DCHAR) - maxlen = INT_MAX / TCHARS_PER_DCHAR; - maxlen = maxlen * TCHARS_PER_DCHAR; -# define SNPRINTF_BUF(arg) \ - switch (prefix_count) \ - { \ - case 0: \ - retcount = SNPRINTF ((TCHAR_T *) (result + length), \ - maxlen, buf, \ - arg, &count); \ - break; \ - case 1: \ - retcount = SNPRINTF ((TCHAR_T *) (result + length), \ - maxlen, buf, \ - prefixes[0], arg, &count); \ - break; \ - case 2: \ - retcount = SNPRINTF ((TCHAR_T *) (result + length), \ - maxlen, buf, \ - prefixes[0], prefixes[1], arg, \ - &count); \ - break; \ - default: \ - abort (); \ - } -#else -# define SNPRINTF_BUF(arg) \ - switch (prefix_count) \ - { \ - case 0: \ - count = sprintf (tmp, buf, arg); \ - break; \ - case 1: \ - count = sprintf (tmp, buf, prefixes[0], arg); \ - break; \ - case 2: \ - count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ - arg); \ - break; \ - default: \ - abort (); \ - } -#endif - - errno = 0; - switch (type) - { - case TYPE_SCHAR: - { - int arg = a.arg[dp->arg_index].a.a_schar; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UCHAR: - { - unsigned int arg = a.arg[dp->arg_index].a.a_uchar; - SNPRINTF_BUF (arg); - } - break; - case TYPE_SHORT: - { - int arg = a.arg[dp->arg_index].a.a_short; - SNPRINTF_BUF (arg); - } - break; - case TYPE_USHORT: - { - unsigned int arg = a.arg[dp->arg_index].a.a_ushort; - SNPRINTF_BUF (arg); - } - break; - case TYPE_INT: - { - int arg = a.arg[dp->arg_index].a.a_int; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UINT: - { - unsigned int arg = a.arg[dp->arg_index].a.a_uint; - SNPRINTF_BUF (arg); - } - break; - case TYPE_LONGINT: - { - long int arg = a.arg[dp->arg_index].a.a_longint; - SNPRINTF_BUF (arg); - } - break; - case TYPE_ULONGINT: - { - unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; - SNPRINTF_BUF (arg); - } - break; -#if HAVE_LONG_LONG_INT - case TYPE_LONGLONGINT: - { - long long int arg = a.arg[dp->arg_index].a.a_longlongint; - SNPRINTF_BUF (arg); - } - break; - case TYPE_ULONGLONGINT: - { - unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; - SNPRINTF_BUF (arg); - } - break; -#endif - case TYPE_DOUBLE: - { - double arg = a.arg[dp->arg_index].a.a_double; - SNPRINTF_BUF (arg); - } - break; - case TYPE_LONGDOUBLE: - { - long double arg = a.arg[dp->arg_index].a.a_longdouble; - SNPRINTF_BUF (arg); - } - break; - case TYPE_CHAR: - { - int arg = a.arg[dp->arg_index].a.a_char; - SNPRINTF_BUF (arg); - } - break; -#if HAVE_WINT_T - case TYPE_WIDE_CHAR: - { - wint_t arg = a.arg[dp->arg_index].a.a_wide_char; - SNPRINTF_BUF (arg); - } - break; -#endif - case TYPE_STRING: - { - const char *arg = a.arg[dp->arg_index].a.a_string; - SNPRINTF_BUF (arg); - } - break; -#if HAVE_WCHAR_T - case TYPE_WIDE_STRING: - { - const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; - SNPRINTF_BUF (arg); - } - break; -#endif - case TYPE_POINTER: - { - void *arg = a.arg[dp->arg_index].a.a_pointer; - SNPRINTF_BUF (arg); - } - break; - default: - abort (); - } - -#if USE_SNPRINTF - /* Portability: Not all implementations of snprintf() - are ISO C 99 compliant. Determine the number of - bytes that snprintf() has produced or would have - produced. */ - if (count >= 0) - { - /* Verify that snprintf() has NUL-terminated its - result. */ - if (count < maxlen - && ((TCHAR_T *) (result + length)) [count] != '\0') - abort (); - /* Portability hack. */ - if (retcount > count) - count = retcount; - } - else - { - /* snprintf() doesn't understand the '%n' - directive. */ - if (fbp[1] != '\0') - { - /* Don't use the '%n' directive; instead, look - at the snprintf() return value. */ - fbp[1] = '\0'; - continue; - } - else - { - /* Look at the snprintf() return value. */ - if (retcount < 0) - { -# if !HAVE_SNPRINTF_RETVAL_C99 - /* HP-UX 10.20 snprintf() is doubly deficient: - It doesn't understand the '%n' directive, - *and* it returns -1 (rather than the length - that would have been required) when the - buffer is too small. - But a failure at this point can also come - from other reasons than a too small buffer, - such as an invalid wide string argument to - the %ls directive, or possibly an invalid - floating-point argument. */ - size_t tmp_length = - MAX_ROOM_NEEDED (&a, dp->arg_index, - dp->conversion, type, flags, - width, - has_precision, - precision, pad_ourselves); - - if (maxlen < tmp_length) - { - /* Make more room. But try to do through - this reallocation only once. */ - size_t bigger_need = - xsum (length, - xsum (tmp_length, - TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR); - /* And always grow proportionally. - (There may be several arguments, each - needing a little more room than the - previous one.) */ - size_t bigger_need2 = - xsum (xtimes (allocated, 2), 12); - if (bigger_need < bigger_need2) - bigger_need = bigger_need2; - ENSURE_ALLOCATION (bigger_need); - continue; - } -# endif - } - else - count = retcount; - } - } -#endif - - /* Attempt to handle failure. */ - if (count < 0) - { - /* SNPRINTF or sprintf failed. Save and use the errno - that it has set, if any. */ - int saved_errno = errno; - if (saved_errno == 0) - { - if (dp->conversion == 'c' || dp->conversion == 's') - saved_errno = EILSEQ; - else - saved_errno = EINVAL; - } - - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - - errno = saved_errno; - return NULL; - } - -#if USE_SNPRINTF - /* Handle overflow of the allocated buffer. - If such an overflow occurs, a C99 compliant snprintf() - returns a count >= maxlen. However, a non-compliant - snprintf() function returns only count = maxlen - 1. To - cover both cases, test whether count >= maxlen - 1. */ - if ((unsigned int) count + 1 >= maxlen) - { - /* If maxlen already has attained its allowed maximum, - allocating more memory will not increase maxlen. - Instead of looping, bail out. */ - if (maxlen == INT_MAX / TCHARS_PER_DCHAR) - goto overflow; - else - { - /* Need at least (count + 1) * sizeof (TCHAR_T) - bytes. (The +1 is for the trailing NUL.) - But ask for (count + 2) * sizeof (TCHAR_T) - bytes, so that in the next round, we likely get - maxlen > (unsigned int) count + 1 - and so we don't get here again. - And allocate proportionally, to avoid looping - eternally if snprintf() reports a too small - count. */ - size_t n = - xmax (xsum (length, - ((unsigned int) count + 2 - + TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR), - xtimes (allocated, 2)); - - ENSURE_ALLOCATION (n); - continue; - } - } -#endif - -#if NEED_PRINTF_UNBOUNDED_PRECISION - if (prec_ourselves) - { - /* Handle the precision. */ - TCHAR_T *prec_ptr = -# if USE_SNPRINTF - (TCHAR_T *) (result + length); -# else - tmp; -# endif - size_t prefix_count; - size_t move; - - prefix_count = 0; - /* Put the additional zeroes after the sign. */ - if (count >= 1 - && (*prec_ptr == '-' || *prec_ptr == '+' - || *prec_ptr == ' ')) - prefix_count = 1; - /* Put the additional zeroes after the 0x prefix if - (flags & FLAG_ALT) || (dp->conversion == 'p'). */ - else if (count >= 2 - && prec_ptr[0] == '0' - && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) - prefix_count = 2; - - move = count - prefix_count; - if (precision > move) - { - /* Insert zeroes. */ - size_t insert = precision - move; - TCHAR_T *prec_end; - -# if USE_SNPRINTF - size_t n = - xsum (length, - (count + insert + TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR); - length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; - ENSURE_ALLOCATION (n); - length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; - prec_ptr = (TCHAR_T *) (result + length); -# endif - - prec_end = prec_ptr + count; - prec_ptr += prefix_count; - - while (prec_end > prec_ptr) - { - prec_end--; - prec_end[insert] = prec_end[0]; - } - - prec_end += insert; - do - *--prec_end = '0'; - while (prec_end > prec_ptr); - - count += insert; - } - } -#endif - -#if !USE_SNPRINTF - if (count >= tmp_length) - /* tmp_length was incorrectly calculated - fix the - code above! */ - abort (); -#endif - -#if !DCHAR_IS_TCHAR - /* Convert from TCHAR_T[] to DCHAR_T[]. */ - if (dp->conversion == 'c' || dp->conversion == 's') - { - /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING - TYPE_WIDE_STRING. - The result string is not certainly ASCII. */ - const TCHAR_T *tmpsrc; - DCHAR_T *tmpdst; - size_t tmpdst_len; - /* This code assumes that TCHAR_T is 'char'. */ - verify (sizeof (TCHAR_T) == 1); -# if USE_SNPRINTF - tmpsrc = (TCHAR_T *) (result + length); -# else - tmpsrc = tmp; -# endif - tmpdst = - DCHAR_CONV_FROM_ENCODING (locale_charset (), - iconveh_question_mark, - tmpsrc, count, - NULL, - NULL, &tmpdst_len); - if (tmpdst == NULL) - { - int saved_errno = errno; - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = saved_errno; - return NULL; - } - ENSURE_ALLOCATION (xsum (length, tmpdst_len)); - DCHAR_CPY (result + length, tmpdst, tmpdst_len); - free (tmpdst); - count = tmpdst_len; - } - else - { - /* The result string is ASCII. - Simple 1:1 conversion. */ -# if USE_SNPRINTF - /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a - no-op conversion, in-place on the array starting - at (result + length). */ - if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) -# endif - { - const TCHAR_T *tmpsrc; - DCHAR_T *tmpdst; - size_t n; - -# if USE_SNPRINTF - if (result == resultbuf) - { - tmpsrc = (TCHAR_T *) (result + length); - /* ENSURE_ALLOCATION will not move tmpsrc - (because it's part of resultbuf). */ - ENSURE_ALLOCATION (xsum (length, count)); - } - else - { - /* ENSURE_ALLOCATION will move the array - (because it uses realloc(). */ - ENSURE_ALLOCATION (xsum (length, count)); - tmpsrc = (TCHAR_T *) (result + length); - } -# else - tmpsrc = tmp; - ENSURE_ALLOCATION (xsum (length, count)); -# endif - tmpdst = result + length; - /* Copy backwards, because of overlapping. */ - tmpsrc += count; - tmpdst += count; - for (n = count; n > 0; n--) - *--tmpdst = *--tmpsrc; - } - } -#endif - -#if DCHAR_IS_TCHAR && !USE_SNPRINTF - /* Make room for the result. */ - if (count > allocated - length) - { - /* Need at least count elements. But allocate - proportionally. */ - size_t n = - xmax (xsum (length, count), xtimes (allocated, 2)); - - ENSURE_ALLOCATION (n); - } -#endif - - /* Here count <= allocated - length. */ - - /* Perform padding. */ -#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - if (pad_ourselves && has_width) - { - size_t w; -# if ENABLE_UNISTDIO - /* Outside POSIX, it's preferable to compare the width - against the number of _characters_ of the converted - value. */ - w = DCHAR_MBSNLEN (result + length, count); -# else - /* The width is compared against the number of _bytes_ - of the converted value, says POSIX. */ - w = count; -# endif - if (w < width) - { - size_t pad = width - w; - - /* Make room for the result. */ - if (xsum (count, pad) > allocated - length) - { - /* Need at least count + pad elements. But - allocate proportionally. */ - size_t n = - xmax (xsum3 (length, count, pad), - xtimes (allocated, 2)); - -# if USE_SNPRINTF - length += count; - ENSURE_ALLOCATION (n); - length -= count; -# else - ENSURE_ALLOCATION (n); -# endif - } - /* Here count + pad <= allocated - length. */ - - { -# if !DCHAR_IS_TCHAR || USE_SNPRINTF - DCHAR_T * const rp = result + length; -# else - DCHAR_T * const rp = tmp; -# endif - DCHAR_T *p = rp + count; - DCHAR_T *end = p + pad; - DCHAR_T *pad_ptr; -# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO - if (dp->conversion == 'c' - || dp->conversion == 's') - /* No zero-padding for string directives. */ - pad_ptr = NULL; - else -# endif - { - pad_ptr = (*rp == '-' ? rp + 1 : rp); - /* No zero-padding of "inf" and "nan". */ - if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') - || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) - pad_ptr = NULL; - } - /* The generated string now extends from rp to p, - with the zero padding insertion point being at - pad_ptr. */ - - count = count + pad; /* = end - rp */ - - if (flags & FLAG_LEFT) - { - /* Pad with spaces on the right. */ - for (; pad > 0; pad--) - *p++ = ' '; - } - else if ((flags & FLAG_ZERO) && pad_ptr != NULL) - { - /* Pad with zeroes. */ - DCHAR_T *q = end; - - while (p > pad_ptr) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = '0'; - } - else - { - /* Pad with spaces on the left. */ - DCHAR_T *q = end; - - while (p > rp) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = ' '; - } - } - } - } -#endif - - /* Here still count <= allocated - length. */ - -#if !DCHAR_IS_TCHAR || USE_SNPRINTF - /* The snprintf() result did fit. */ -#else - /* Append the sprintf() result. */ - memcpy (result + length, tmp, count * sizeof (DCHAR_T)); -#endif -#if !USE_SNPRINTF - if (tmp != tmpbuf) - free (tmp); -#endif - -#if NEED_PRINTF_DIRECTIVE_F - if (dp->conversion == 'F') - { - /* Convert the %f result to upper case for %F. */ - DCHAR_T *rp = result + length; - size_t rc; - for (rc = count; rc > 0; rc--, rp++) - if (*rp >= 'a' && *rp <= 'z') - *rp = *rp - 'a' + 'A'; - } -#endif - - length += count; - break; - } - errno = orig_errno; -#undef pad_ourselves -#undef prec_ourselves - } - } - } - - /* Add the final NUL. */ - ENSURE_ALLOCATION (xsum (length, 1)); - result[length] = '\0'; - - if (result != resultbuf && length + 1 < allocated) - { - /* Shrink the allocated memory if possible. */ - DCHAR_T *memory; - - memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); - if (memory != NULL) - result = memory; - } - - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - *lengthp = length; - /* Note that we can produce a big string of a length > INT_MAX. POSIX - says that snprintf() fails with errno = EOVERFLOW in this case, but - that's only because snprintf() returns an 'int'. This function does - not have this limitation. */ - return result; - -#if USE_SNPRINTF - overflow: - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EOVERFLOW; - return NULL; -#endif - - out_of_memory: - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - out_of_memory_1: - CLEANUP (); - errno = ENOMEM; - return NULL; - } -} - -#undef MAX_ROOM_NEEDED -#undef TCHARS_PER_DCHAR -#undef SNPRINTF -#undef USE_SNPRINTF -#undef DCHAR_SET -#undef DCHAR_CPY -#undef PRINTF_PARSE -#undef DIRECTIVES -#undef DIRECTIVE -#undef DCHAR_IS_TCHAR -#undef TCHAR_T -#undef DCHAR_T -#undef FCHAR_T -#undef VASNPRINTF diff --git a/gl/vasnprintf.h b/gl/vasnprintf.h deleted file mode 100644 index d2bcfb59fa..0000000000 --- a/gl/vasnprintf.h +++ /dev/null @@ -1,79 +0,0 @@ -/* vsprintf with automatic memory allocation. - Copyright (C) 2002-2004, 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#ifndef _VASNPRINTF_H -#define _VASNPRINTF_H - -/* Get va_list. */ -#include - -/* Get size_t. */ -#include - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The __-protected variants of the attributes 'format' and 'printf' are - accepted by gcc versions 2.6.4 (effectively 2.7) and later. - We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because - gnulib and libintl do '#define printf __printf__' when they override - the 'printf' function. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) -#else -# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* Write formatted output to a string dynamically allocated with malloc(). - You can pass a preallocated buffer for the result in RESULTBUF and its - size in *LENGTHP; otherwise you pass RESULTBUF = NULL. - If successful, return the address of the string (this may be = RESULTBUF - if no dynamic memory allocation was necessary) and set *LENGTHP to the - number of resulting bytes, excluding the trailing NUL. Upon error, set - errno and return NULL. - - When dynamic memory allocation occurs, the preallocated buffer is left - alone (with possibly modified contents). This makes it possible to use - a statically allocated or stack-allocated buffer, like this: - - char buf[100]; - size_t len = sizeof (buf); - char *output = vasnprintf (buf, &len, format, args); - if (output == NULL) - ... error handling ...; - else - { - ... use the output string ...; - if (output != buf) - free (output); - } - */ -#if REPLACE_VASNPRINTF -# define asnprintf rpl_asnprintf -# define vasnprintf rpl_vasnprintf -#endif -extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); -extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); - -#ifdef __cplusplus -} -#endif - -#endif /* _VASNPRINTF_H */ diff --git a/gl/vasprintf.c b/gl/vasprintf.c deleted file mode 100644 index a5e00a108c..0000000000 --- a/gl/vasprintf.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 1999, 2002, 2006-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#ifdef IN_LIBASPRINTF -# include "vasprintf.h" -#else -# include -#endif - -#include -#include -#include - -#include "vasnprintf.h" - -int -vasprintf (char **resultp, const char *format, va_list args) -{ - size_t length; - char *result = vasnprintf (NULL, &length, format, args); - if (result == NULL) - return -1; - - if (length > INT_MAX) - { - free (result); - errno = EOVERFLOW; - return -1; - } - - *resultp = result; - /* Return the number of resulting bytes, excluding the trailing NUL. */ - return length; -} diff --git a/gl/verify.h b/gl/verify.h deleted file mode 100644 index 40846ec794..0000000000 --- a/gl/verify.h +++ /dev/null @@ -1,279 +0,0 @@ -/* Compile-time assert-like macros. - - Copyright (C) 2005-2006, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ - -#ifndef _GL_VERIFY_H -#define _GL_VERIFY_H - - -/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. - This is supported by GCC 4.6.0 and later, in C mode, and its use - here generates easier-to-read diagnostics when verify (R) fails. - - Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. - This will likely be supported by future GCC versions, in C++ mode. - - Use this only with GCC. If we were willing to slow 'configure' - down we could also use it with other compilers, but since this - affects only the quality of diagnostics, why bother? */ -#if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \ - && (201112L <= __STDC_VERSION__ || !defined __STRICT_ANSI__) \ - && !defined __cplusplus) -# define _GL_HAVE__STATIC_ASSERT 1 -#endif -/* The condition (99 < __GNUC__) is temporary, until we know about the - first G++ release that supports static_assert. */ -#if (99 < __GNUC__) && defined __cplusplus -# define _GL_HAVE_STATIC_ASSERT 1 -#endif - -/* FreeBSD 9.1 , included by and lots of other - system headers, defines a conflicting _Static_assert that is no - better than ours; override it. */ -#ifndef _GL_HAVE_STATIC_ASSERT -# include -# undef _Static_assert -#endif - -/* Each of these macros verifies that its argument R is nonzero. To - be portable, R should be an integer constant expression. Unlike - assert (R), there is no run-time overhead. - - If _Static_assert works, verify (R) uses it directly. Similarly, - _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct - that is an operand of sizeof. - - The code below uses several ideas for C++ compilers, and for C - compilers that do not support _Static_assert: - - * The first step is ((R) ? 1 : -1). Given an expression R, of - integral or boolean or floating-point type, this yields an - expression of integral type, whose value is later verified to be - constant and nonnegative. - - * Next this expression W is wrapped in a type - struct _gl_verify_type { - unsigned int _gl_verify_error_if_negative: W; - }. - If W is negative, this yields a compile-time error. No compiler can - deal with a bit-field of negative size. - - One might think that an array size check would have the same - effect, that is, that the type struct { unsigned int dummy[W]; } - would work as well. However, inside a function, some compilers - (such as C++ compilers and GNU C) allow local parameters and - variables inside array size expressions. With these compilers, - an array size check would not properly diagnose this misuse of - the verify macro: - - void function (int n) { verify (n < 0); } - - * For the verify macro, the struct _gl_verify_type will need to - somehow be embedded into a declaration. To be portable, this - declaration must declare an object, a constant, a function, or a - typedef name. If the declared entity uses the type directly, - such as in - - struct dummy {...}; - typedef struct {...} dummy; - extern struct {...} *dummy; - extern void dummy (struct {...} *); - extern struct {...} *dummy (void); - - two uses of the verify macro would yield colliding declarations - if the entity names are not disambiguated. A workaround is to - attach the current line number to the entity name: - - #define _GL_CONCAT0(x, y) x##y - #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) - extern struct {...} * _GL_CONCAT (dummy, __LINE__); - - But this has the problem that two invocations of verify from - within the same macro would collide, since the __LINE__ value - would be the same for both invocations. (The GCC __COUNTER__ - macro solves this problem, but is not portable.) - - A solution is to use the sizeof operator. It yields a number, - getting rid of the identity of the type. Declarations like - - extern int dummy [sizeof (struct {...})]; - extern void dummy (int [sizeof (struct {...})]); - extern int (*dummy (void)) [sizeof (struct {...})]; - - can be repeated. - - * Should the implementation use a named struct or an unnamed struct? - Which of the following alternatives can be used? - - extern int dummy [sizeof (struct {...})]; - extern int dummy [sizeof (struct _gl_verify_type {...})]; - extern void dummy (int [sizeof (struct {...})]); - extern void dummy (int [sizeof (struct _gl_verify_type {...})]); - extern int (*dummy (void)) [sizeof (struct {...})]; - extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; - - In the second and sixth case, the struct type is exported to the - outer scope; two such declarations therefore collide. GCC warns - about the first, third, and fourth cases. So the only remaining - possibility is the fifth case: - - extern int (*dummy (void)) [sizeof (struct {...})]; - - * GCC warns about duplicate declarations of the dummy function if - -Wredundant-decls is used. GCC 4.3 and later have a builtin - __COUNTER__ macro that can let us generate unique identifiers for - each dummy function, to suppress this warning. - - * This implementation exploits the fact that older versions of GCC, - which do not support _Static_assert, also do not warn about the - last declaration mentioned above. - - * GCC warns if -Wnested-externs is enabled and verify() is used - within a function body; but inside a function, you can always - arrange to use verify_expr() instead. - - * In C++, any struct definition inside sizeof is invalid. - Use a template type to work around the problem. */ - -/* Concatenate two preprocessor tokens. */ -#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) -#define _GL_CONCAT0(x, y) x##y - -/* _GL_COUNTER is an integer, preferably one that changes each time we - use it. Use __COUNTER__ if it works, falling back on __LINE__ - otherwise. __LINE__ isn't perfect, but it's better than a - constant. */ -#if defined __COUNTER__ && __COUNTER__ != __COUNTER__ -# define _GL_COUNTER __COUNTER__ -#else -# define _GL_COUNTER __LINE__ -#endif - -/* Generate a symbol with the given prefix, making it unique if - possible. */ -#define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) - -/* Verify requirement R at compile-time, as an integer constant expression - that returns 1. If R is false, fail at compile-time, preferably - with a diagnostic that includes the string-literal DIAGNOSTIC. */ - -#define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ - (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) - -#ifdef __cplusplus -# if !GNULIB_defined_struct__gl_verify_type -template - struct _gl_verify_type { - unsigned int _gl_verify_error_if_negative: w; - }; -# define GNULIB_defined_struct__gl_verify_type 1 -# endif -# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ - _gl_verify_type<(R) ? 1 : -1> -#elif defined _GL_HAVE__STATIC_ASSERT -# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ - struct { \ - _Static_assert (R, DIAGNOSTIC); \ - int _gl_dummy; \ - } -#else -# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ - struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } -#endif - -/* Verify requirement R at compile-time, as a declaration without a - trailing ';'. If R is false, fail at compile-time, preferably - with a diagnostic that includes the string-literal DIAGNOSTIC. - - Unfortunately, unlike C11, this implementation must appear as an - ordinary declaration, and cannot appear inside struct { ... }. */ - -#ifdef _GL_HAVE__STATIC_ASSERT -# define _GL_VERIFY _Static_assert -#else -# define _GL_VERIFY(R, DIAGNOSTIC) \ - extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ - [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] -#endif - -/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ -#ifdef _GL_STATIC_ASSERT_H -# if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert -# define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) -# endif -# if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert -# define static_assert _Static_assert /* C11 requires this #define. */ -# endif -#endif - -/* @assert.h omit start@ */ - -/* Each of these macros verifies that its argument R is nonzero. To - be portable, R should be an integer constant expression. Unlike - assert (R), there is no run-time overhead. - - There are two macros, since no single macro can be used in all - contexts in C. verify_true (R) is for scalar contexts, including - integer constant expression contexts. verify (R) is for declaration - contexts, e.g., the top level. */ - -/* Verify requirement R at compile-time, as an integer constant expression. - Return 1. This is equivalent to verify_expr (R, 1). - - verify_true is obsolescent; please use verify_expr instead. */ - -#define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") - -/* Verify requirement R at compile-time. Return the value of the - expression E. */ - -#define verify_expr(R, E) \ - (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) - -/* Verify requirement R at compile-time, as a declaration without a - trailing ';'. */ - -#define verify(R) _GL_VERIFY (R, "verify (" #R ")") - -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif - -/* Assume that R always holds. This lets the compiler optimize - accordingly. R should not have side-effects; it may or may not be - evaluated. Behavior is undefined if R is false. */ - -#if (__has_builtin (__builtin_unreachable) \ - || 4 < __GNUC__ + (5 <= __GNUC_MINOR__)) -# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) -#elif 1200 <= _MSC_VER -# define assume(R) __assume (R) -#elif ((defined GCC_LINT || defined lint) \ - && (__has_builtin (__builtin_trap) \ - || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)))) - /* Doing it this way helps various packages when configured with - --enable-gcc-warnings, which compiles with -Dlint. It's nicer - when 'assume' silences warnings even with older GCCs. */ -# define assume(R) ((R) ? (void) 0 : __builtin_trap ()) -#else -# define assume(R) ((void) (0 && (R))) -#endif - -/* @assert.h omit end@ */ - -#endif diff --git a/gl/vsnprintf.c b/gl/vsnprintf.c deleted file mode 100644 index 63bd79651b..0000000000 --- a/gl/vsnprintf.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 2004, 2006-2016 Free Software Foundation, Inc. - Written by Simon Josefsson and Yoann Vandoorselaere . - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -/* Specification. */ -#include - -#include -#include -#include -#include -#include - -#include "vasnprintf.h" - -/* Print formatted output to string STR. Similar to vsprintf, but - additional length SIZE limit how much is written into STR. Returns - string length of formatted string (which may be larger than SIZE). - STR may be NULL, in which case nothing will be written. On error, - return a negative value. */ -int -vsnprintf (char *str, size_t size, const char *format, va_list args) -{ - char *output; - size_t len; - size_t lenbuf = size; - - output = vasnprintf (str, &lenbuf, format, args); - len = lenbuf; - - if (!output) - return -1; - - if (output != str) - { - if (size) - { - size_t pruned_len = (len < size ? len : size - 1); - memcpy (str, output, pruned_len); - str[pruned_len] = '\0'; - } - - free (output); - } - - if (len > INT_MAX) - { - errno = EOVERFLOW; - return -1; - } - - return len; -} diff --git a/gl/wchar.in.h b/gl/wchar.in.h deleted file mode 100644 index 2468c96464..0000000000 --- a/gl/wchar.in.h +++ /dev/null @@ -1,1041 +0,0 @@ -/* A substitute for ISO C99 , for platforms that have issues. - - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* Written by Eric Blake. */ - -/* - * ISO C 99 for platforms that have issues. - * - * - * For now, this just ensures proper prerequisite inclusion order and - * the declaration of wcwidth(). - */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if (((defined __need_mbstate_t || defined __need_wint_t) \ - && !defined __MINGW32__ && !defined __KLIBC__) \ - || (defined __hpux \ - && ((defined _INTTYPES_INCLUDED && !defined strtoimax) \ - || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ - || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ - || defined _GL_ALREADY_INCLUDING_WCHAR_H) -/* Special invocation convention: - - Inside glibc and uClibc header files, but not MinGW. - - On HP-UX 11.00 we have a sequence of nested includes - -> -> , and the latter includes , - once indirectly -> -> -> - and once directly. In both situations 'wint_t' is not yet defined, - therefore we cannot provide the function overrides; instead include only - the system's . - - With MinGW 3.22, when includes , only some part of - is actually processed, and that doesn't include 'mbstate_t'. - - On IRIX 6.5, similarly, we have an include -> , and - the latter includes . But here, we have no way to detect whether - is completely included or is still being included. */ - -#@INCLUDE_NEXT@ @NEXT_WCHAR_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_WCHAR_H - -#define _GL_ALREADY_INCLUDING_WCHAR_H - -#if @HAVE_FEATURES_H@ -# include /* for __GLIBC__ */ -#endif - -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be - included before . - In some builds of uClibc, is nonexistent and wchar_t is defined - by . - But avoid namespace pollution on glibc systems. */ -#if !(defined __GLIBC__ && !defined __UCLIBC__) -# include -#endif -#ifndef __GLIBC__ -# include -# include -#endif - -/* Include the original if it exists. - Some builds of uClibc lack it. */ -/* The include_next requires a split double-inclusion guard. */ -#if @HAVE_WCHAR_H@ -# @INCLUDE_NEXT@ @NEXT_WCHAR_H@ -#endif - -#undef _GL_ALREADY_INCLUDING_WCHAR_H - -#ifndef _@GUARD_PREFIX@_WCHAR_H -#define _@GUARD_PREFIX@_WCHAR_H - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The attribute __pure__ was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - -/* Define wint_t and WEOF. (Also done in wctype.in.h.) */ -#if !@HAVE_WINT_T@ && !defined wint_t -# define wint_t int -# ifndef WEOF -# define WEOF -1 -# endif -#else -/* MSVC defines wint_t as 'unsigned short' in . - This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be - "unchanged by default argument promotions". Override it. */ -# if defined _MSC_VER -# if !GNULIB_defined_wint_t -# include -typedef unsigned int rpl_wint_t; -# undef wint_t -# define wint_t rpl_wint_t -# define GNULIB_defined_wint_t 1 -# endif -# endif -# ifndef WEOF -# define WEOF ((wint_t) -1) -# endif -#endif - - -/* Override mbstate_t if it is too small. - On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for - implementing mbrtowc for encodings like UTF-8. */ -#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ -# if !GNULIB_defined_mbstate_t -typedef int rpl_mbstate_t; -# undef mbstate_t -# define mbstate_t rpl_mbstate_t -# define GNULIB_defined_mbstate_t 1 -# endif -#endif - - -/* Convert a single-byte character to a wide character. */ -#if @GNULIB_BTOWC@ -# if @REPLACE_BTOWC@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef btowc -# define btowc rpl_btowc -# endif -_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); -_GL_CXXALIAS_RPL (btowc, wint_t, (int c)); -# else -# if !@HAVE_BTOWC@ -_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (btowc, wint_t, (int c)); -# endif -_GL_CXXALIASWARN (btowc); -#elif defined GNULIB_POSIXCHECK -# undef btowc -# if HAVE_RAW_DECL_BTOWC -_GL_WARN_ON_USE (btowc, "btowc is unportable - " - "use gnulib module btowc for portability"); -# endif -#endif - - -/* Convert a wide character to a single-byte character. */ -#if @GNULIB_WCTOB@ -# if @REPLACE_WCTOB@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wctob -# define wctob rpl_wctob -# endif -_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); -_GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); -# else -# if !defined wctob && !@HAVE_DECL_WCTOB@ -/* wctob is provided by gnulib, or wctob exists but is not declared. */ -_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); -# endif -_GL_CXXALIASWARN (wctob); -#elif defined GNULIB_POSIXCHECK -# undef wctob -# if HAVE_RAW_DECL_WCTOB -_GL_WARN_ON_USE (wctob, "wctob is unportable - " - "use gnulib module wctob for portability"); -# endif -#endif - - -/* Test whether *PS is in the initial state. */ -#if @GNULIB_MBSINIT@ -# if @REPLACE_MBSINIT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbsinit -# define mbsinit rpl_mbsinit -# endif -_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); -_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); -# else -# if !@HAVE_MBSINIT@ -_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); -# endif -_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (mbsinit); -#elif defined GNULIB_POSIXCHECK -# undef mbsinit -# if HAVE_RAW_DECL_MBSINIT -_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " - "use gnulib module mbsinit for portability"); -# endif -#endif - - -/* Convert a multibyte character to a wide character. */ -#if @GNULIB_MBRTOWC@ -# if @REPLACE_MBRTOWC@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbrtowc -# define mbrtowc rpl_mbrtowc -# endif -_GL_FUNCDECL_RPL (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); -_GL_CXXALIAS_RPL (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); -# else -# if !@HAVE_MBRTOWC@ -_GL_FUNCDECL_SYS (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); -# endif -_GL_CXXALIAS_SYS (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (mbrtowc); -#elif defined GNULIB_POSIXCHECK -# undef mbrtowc -# if HAVE_RAW_DECL_MBRTOWC -_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " - "use gnulib module mbrtowc for portability"); -# endif -#endif - - -/* Recognize a multibyte character. */ -#if @GNULIB_MBRLEN@ -# if @REPLACE_MBRLEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbrlen -# define mbrlen rpl_mbrlen -# endif -_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); -_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); -# else -# if !@HAVE_MBRLEN@ -_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); -# endif -_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (mbrlen); -#elif defined GNULIB_POSIXCHECK -# undef mbrlen -# if HAVE_RAW_DECL_MBRLEN -_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " - "use gnulib module mbrlen for portability"); -# endif -#endif - - -/* Convert a string to a wide string. */ -#if @GNULIB_MBSRTOWCS@ -# if @REPLACE_MBSRTOWCS@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbsrtowcs -# define mbsrtowcs rpl_mbsrtowcs -# endif -_GL_FUNCDECL_RPL (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, - mbstate_t *ps)); -# else -# if !@HAVE_MBSRTOWCS@ -_GL_FUNCDECL_SYS (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, - mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (mbsrtowcs); -#elif defined GNULIB_POSIXCHECK -# undef mbsrtowcs -# if HAVE_RAW_DECL_MBSRTOWCS -_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " - "use gnulib module mbsrtowcs for portability"); -# endif -#endif - - -/* Convert a string to a wide string. */ -#if @GNULIB_MBSNRTOWCS@ -# if @REPLACE_MBSNRTOWCS@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbsnrtowcs -# define mbsnrtowcs rpl_mbsnrtowcs -# endif -_GL_FUNCDECL_RPL (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps)); -# else -# if !@HAVE_MBSNRTOWCS@ -_GL_FUNCDECL_SYS (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (mbsnrtowcs); -#elif defined GNULIB_POSIXCHECK -# undef mbsnrtowcs -# if HAVE_RAW_DECL_MBSNRTOWCS -_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " - "use gnulib module mbsnrtowcs for portability"); -# endif -#endif - - -/* Convert a wide character to a multibyte character. */ -#if @GNULIB_WCRTOMB@ -# if @REPLACE_WCRTOMB@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wcrtomb -# define wcrtomb rpl_wcrtomb -# endif -_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); -_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); -# else -# if !@HAVE_WCRTOMB@ -_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); -# endif -_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (wcrtomb); -#elif defined GNULIB_POSIXCHECK -# undef wcrtomb -# if HAVE_RAW_DECL_WCRTOMB -_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " - "use gnulib module wcrtomb for portability"); -# endif -#endif - - -/* Convert a wide string to a string. */ -#if @GNULIB_WCSRTOMBS@ -# if @REPLACE_WCSRTOMBS@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wcsrtombs -# define wcsrtombs rpl_wcsrtombs -# endif -_GL_FUNCDECL_RPL (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, - mbstate_t *ps)); -# else -# if !@HAVE_WCSRTOMBS@ -_GL_FUNCDECL_SYS (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, - mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (wcsrtombs); -#elif defined GNULIB_POSIXCHECK -# undef wcsrtombs -# if HAVE_RAW_DECL_WCSRTOMBS -_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " - "use gnulib module wcsrtombs for portability"); -# endif -#endif - - -/* Convert a wide string to a string. */ -#if @GNULIB_WCSNRTOMBS@ -# if @REPLACE_WCSNRTOMBS@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wcsnrtombs -# define wcsnrtombs rpl_wcsnrtombs -# endif -_GL_FUNCDECL_RPL (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps)); -# else -# if !@HAVE_WCSNRTOMBS@ -_GL_FUNCDECL_SYS (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (wcsnrtombs); -#elif defined GNULIB_POSIXCHECK -# undef wcsnrtombs -# if HAVE_RAW_DECL_WCSNRTOMBS -_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " - "use gnulib module wcsnrtombs for portability"); -# endif -#endif - - -/* Return the number of screen columns needed for WC. */ -#if @GNULIB_WCWIDTH@ -# if @REPLACE_WCWIDTH@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wcwidth -# define wcwidth rpl_wcwidth -# endif -_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); -_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); -# else -# if !@HAVE_DECL_WCWIDTH@ -/* wcwidth exists but is not declared. */ -_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); -# elif defined __KLIBC__ -/* On OS/2 kLIBC, wcwidth is a macro that expands to the name of a - static inline function. The implementation of wcwidth in wcwidth.c - causes a "conflicting types" error. */ -# undef wcwidth -# endif -_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); -# endif -_GL_CXXALIASWARN (wcwidth); -#elif defined GNULIB_POSIXCHECK -# undef wcwidth -# if HAVE_RAW_DECL_WCWIDTH -_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " - "use gnulib module wcwidth for portability"); -# endif -#endif - - -/* Search N wide characters of S for C. */ -#if @GNULIB_WMEMCHR@ -# if !@HAVE_WMEMCHR@ -_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) - _GL_ATTRIBUTE_PURE); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { - const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); - wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); - } */ -_GL_CXXALIAS_SYS_CAST2 (wmemchr, - wchar_t *, (const wchar_t *, wchar_t, size_t), - const wchar_t *, (const wchar_t *, wchar_t, size_t)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); -_GL_CXXALIASWARN1 (wmemchr, const wchar_t *, - (const wchar_t *s, wchar_t c, size_t n)); -# else -_GL_CXXALIASWARN (wmemchr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef wmemchr -# if HAVE_RAW_DECL_WMEMCHR -_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " - "use gnulib module wmemchr for portability"); -# endif -#endif - - -/* Compare N wide characters of S1 and S2. */ -#if @GNULIB_WMEMCMP@ -# if !@HAVE_WMEMCMP@ -_GL_FUNCDECL_SYS (wmemcmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wmemcmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n)); -_GL_CXXALIASWARN (wmemcmp); -#elif defined GNULIB_POSIXCHECK -# undef wmemcmp -# if HAVE_RAW_DECL_WMEMCMP -_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " - "use gnulib module wmemcmp for portability"); -# endif -#endif - - -/* Copy N wide characters of SRC to DEST. */ -#if @GNULIB_WMEMCPY@ -# if !@HAVE_WMEMCPY@ -_GL_FUNCDECL_SYS (wmemcpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -# endif -_GL_CXXALIAS_SYS (wmemcpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -_GL_CXXALIASWARN (wmemcpy); -#elif defined GNULIB_POSIXCHECK -# undef wmemcpy -# if HAVE_RAW_DECL_WMEMCPY -_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " - "use gnulib module wmemcpy for portability"); -# endif -#endif - - -/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for - overlapping memory areas. */ -#if @GNULIB_WMEMMOVE@ -# if !@HAVE_WMEMMOVE@ -_GL_FUNCDECL_SYS (wmemmove, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -# endif -_GL_CXXALIAS_SYS (wmemmove, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -_GL_CXXALIASWARN (wmemmove); -#elif defined GNULIB_POSIXCHECK -# undef wmemmove -# if HAVE_RAW_DECL_WMEMMOVE -_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " - "use gnulib module wmemmove for portability"); -# endif -#endif - - -/* Set N wide characters of S to C. */ -#if @GNULIB_WMEMSET@ -# if !@HAVE_WMEMSET@ -_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); -# endif -_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); -_GL_CXXALIASWARN (wmemset); -#elif defined GNULIB_POSIXCHECK -# undef wmemset -# if HAVE_RAW_DECL_WMEMSET -_GL_WARN_ON_USE (wmemset, "wmemset is unportable - " - "use gnulib module wmemset for portability"); -# endif -#endif - - -/* Return the number of wide characters in S. */ -#if @GNULIB_WCSLEN@ -# if !@HAVE_WCSLEN@ -_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); -_GL_CXXALIASWARN (wcslen); -#elif defined GNULIB_POSIXCHECK -# undef wcslen -# if HAVE_RAW_DECL_WCSLEN -_GL_WARN_ON_USE (wcslen, "wcslen is unportable - " - "use gnulib module wcslen for portability"); -# endif -#endif - - -/* Return the number of wide characters in S, but at most MAXLEN. */ -#if @GNULIB_WCSNLEN@ -# if !@HAVE_WCSNLEN@ -_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); -_GL_CXXALIASWARN (wcsnlen); -#elif defined GNULIB_POSIXCHECK -# undef wcsnlen -# if HAVE_RAW_DECL_WCSNLEN -_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " - "use gnulib module wcsnlen for portability"); -# endif -#endif - - -/* Copy SRC to DEST. */ -#if @GNULIB_WCSCPY@ -# if !@HAVE_WCSCPY@ -_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); -# endif -_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); -_GL_CXXALIASWARN (wcscpy); -#elif defined GNULIB_POSIXCHECK -# undef wcscpy -# if HAVE_RAW_DECL_WCSCPY -_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " - "use gnulib module wcscpy for portability"); -# endif -#endif - - -/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ -#if @GNULIB_WCPCPY@ -# if !@HAVE_WCPCPY@ -_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); -# endif -_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); -_GL_CXXALIASWARN (wcpcpy); -#elif defined GNULIB_POSIXCHECK -# undef wcpcpy -# if HAVE_RAW_DECL_WCPCPY -_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " - "use gnulib module wcpcpy for portability"); -# endif -#endif - - -/* Copy no more than N wide characters of SRC to DEST. */ -#if @GNULIB_WCSNCPY@ -# if !@HAVE_WCSNCPY@ -_GL_FUNCDECL_SYS (wcsncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -# endif -_GL_CXXALIAS_SYS (wcsncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -_GL_CXXALIASWARN (wcsncpy); -#elif defined GNULIB_POSIXCHECK -# undef wcsncpy -# if HAVE_RAW_DECL_WCSNCPY -_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " - "use gnulib module wcsncpy for portability"); -# endif -#endif - - -/* Copy no more than N characters of SRC to DEST, returning the address of - the last character written into DEST. */ -#if @GNULIB_WCPNCPY@ -# if !@HAVE_WCPNCPY@ -_GL_FUNCDECL_SYS (wcpncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -# endif -_GL_CXXALIAS_SYS (wcpncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -_GL_CXXALIASWARN (wcpncpy); -#elif defined GNULIB_POSIXCHECK -# undef wcpncpy -# if HAVE_RAW_DECL_WCPNCPY -_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " - "use gnulib module wcpncpy for portability"); -# endif -#endif - - -/* Append SRC onto DEST. */ -#if @GNULIB_WCSCAT@ -# if !@HAVE_WCSCAT@ -_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); -# endif -_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); -_GL_CXXALIASWARN (wcscat); -#elif defined GNULIB_POSIXCHECK -# undef wcscat -# if HAVE_RAW_DECL_WCSCAT -_GL_WARN_ON_USE (wcscat, "wcscat is unportable - " - "use gnulib module wcscat for portability"); -# endif -#endif - - -/* Append no more than N wide characters of SRC onto DEST. */ -#if @GNULIB_WCSNCAT@ -# if !@HAVE_WCSNCAT@ -_GL_FUNCDECL_SYS (wcsncat, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -# endif -_GL_CXXALIAS_SYS (wcsncat, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -_GL_CXXALIASWARN (wcsncat); -#elif defined GNULIB_POSIXCHECK -# undef wcsncat -# if HAVE_RAW_DECL_WCSNCAT -_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " - "use gnulib module wcsncat for portability"); -# endif -#endif - - -/* Compare S1 and S2. */ -#if @GNULIB_WCSCMP@ -# if !@HAVE_WCSCMP@ -_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); -_GL_CXXALIASWARN (wcscmp); -#elif defined GNULIB_POSIXCHECK -# undef wcscmp -# if HAVE_RAW_DECL_WCSCMP -_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " - "use gnulib module wcscmp for portability"); -# endif -#endif - - -/* Compare no more than N wide characters of S1 and S2. */ -#if @GNULIB_WCSNCMP@ -# if !@HAVE_WCSNCMP@ -_GL_FUNCDECL_SYS (wcsncmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcsncmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n)); -_GL_CXXALIASWARN (wcsncmp); -#elif defined GNULIB_POSIXCHECK -# undef wcsncmp -# if HAVE_RAW_DECL_WCSNCMP -_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " - "use gnulib module wcsncmp for portability"); -# endif -#endif - - -/* Compare S1 and S2, ignoring case. */ -#if @GNULIB_WCSCASECMP@ -# if !@HAVE_WCSCASECMP@ -_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); -_GL_CXXALIASWARN (wcscasecmp); -#elif defined GNULIB_POSIXCHECK -# undef wcscasecmp -# if HAVE_RAW_DECL_WCSCASECMP -_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " - "use gnulib module wcscasecmp for portability"); -# endif -#endif - - -/* Compare no more than N chars of S1 and S2, ignoring case. */ -#if @GNULIB_WCSNCASECMP@ -# if !@HAVE_WCSNCASECMP@ -_GL_FUNCDECL_SYS (wcsncasecmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcsncasecmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n)); -_GL_CXXALIASWARN (wcsncasecmp); -#elif defined GNULIB_POSIXCHECK -# undef wcsncasecmp -# if HAVE_RAW_DECL_WCSNCASECMP -_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " - "use gnulib module wcsncasecmp for portability"); -# endif -#endif - - -/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE - category of the current locale. */ -#if @GNULIB_WCSCOLL@ -# if !@HAVE_WCSCOLL@ -_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); -# endif -_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); -_GL_CXXALIASWARN (wcscoll); -#elif defined GNULIB_POSIXCHECK -# undef wcscoll -# if HAVE_RAW_DECL_WCSCOLL -_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " - "use gnulib module wcscoll for portability"); -# endif -#endif - - -/* Transform S2 into array pointed to by S1 such that if wcscmp is applied - to two transformed strings the result is the as applying 'wcscoll' to the - original strings. */ -#if @GNULIB_WCSXFRM@ -# if !@HAVE_WCSXFRM@ -_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); -# endif -_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); -_GL_CXXALIASWARN (wcsxfrm); -#elif defined GNULIB_POSIXCHECK -# undef wcsxfrm -# if HAVE_RAW_DECL_WCSXFRM -_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " - "use gnulib module wcsxfrm for portability"); -# endif -#endif - - -/* Duplicate S, returning an identical malloc'd string. */ -#if @GNULIB_WCSDUP@ -# if !@HAVE_WCSDUP@ -_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s)); -# endif -_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); -_GL_CXXALIASWARN (wcsdup); -#elif defined GNULIB_POSIXCHECK -# undef wcsdup -# if HAVE_RAW_DECL_WCSDUP -_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " - "use gnulib module wcsdup for portability"); -# endif -#endif - - -/* Find the first occurrence of WC in WCS. */ -#if @GNULIB_WCSCHR@ -# if !@HAVE_WCSCHR@ -_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) - _GL_ATTRIBUTE_PURE); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { - const wchar_t * std::wcschr (const wchar_t *, wchar_t); - wchar_t * std::wcschr (wchar_t *, wchar_t); - } */ -_GL_CXXALIAS_SYS_CAST2 (wcschr, - wchar_t *, (const wchar_t *, wchar_t), - const wchar_t *, (const wchar_t *, wchar_t)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); -_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); -# else -_GL_CXXALIASWARN (wcschr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef wcschr -# if HAVE_RAW_DECL_WCSCHR -_GL_WARN_ON_USE (wcschr, "wcschr is unportable - " - "use gnulib module wcschr for portability"); -# endif -#endif - - -/* Find the last occurrence of WC in WCS. */ -#if @GNULIB_WCSRCHR@ -# if !@HAVE_WCSRCHR@ -_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) - _GL_ATTRIBUTE_PURE); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { - const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); - wchar_t * std::wcsrchr (wchar_t *, wchar_t); - } */ -_GL_CXXALIAS_SYS_CAST2 (wcsrchr, - wchar_t *, (const wchar_t *, wchar_t), - const wchar_t *, (const wchar_t *, wchar_t)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); -_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); -# else -_GL_CXXALIASWARN (wcsrchr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef wcsrchr -# if HAVE_RAW_DECL_WCSRCHR -_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " - "use gnulib module wcsrchr for portability"); -# endif -#endif - - -/* Return the length of the initial segmet of WCS which consists entirely - of wide characters not in REJECT. */ -#if @GNULIB_WCSCSPN@ -# if !@HAVE_WCSCSPN@ -_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); -_GL_CXXALIASWARN (wcscspn); -#elif defined GNULIB_POSIXCHECK -# undef wcscspn -# if HAVE_RAW_DECL_WCSCSPN -_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " - "use gnulib module wcscspn for portability"); -# endif -#endif - - -/* Return the length of the initial segmet of WCS which consists entirely - of wide characters in ACCEPT. */ -#if @GNULIB_WCSSPN@ -# if !@HAVE_WCSSPN@ -_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); -_GL_CXXALIASWARN (wcsspn); -#elif defined GNULIB_POSIXCHECK -# undef wcsspn -# if HAVE_RAW_DECL_WCSSPN -_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " - "use gnulib module wcsspn for portability"); -# endif -#endif - - -/* Find the first occurrence in WCS of any character in ACCEPT. */ -#if @GNULIB_WCSPBRK@ -# if !@HAVE_WCSPBRK@ -_GL_FUNCDECL_SYS (wcspbrk, wchar_t *, - (const wchar_t *wcs, const wchar_t *accept) - _GL_ATTRIBUTE_PURE); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { - const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); - wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); - } */ -_GL_CXXALIAS_SYS_CAST2 (wcspbrk, - wchar_t *, (const wchar_t *, const wchar_t *), - const wchar_t *, (const wchar_t *, const wchar_t *)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (wcspbrk, wchar_t *, - (wchar_t *wcs, const wchar_t *accept)); -_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, - (const wchar_t *wcs, const wchar_t *accept)); -# else -_GL_CXXALIASWARN (wcspbrk); -# endif -#elif defined GNULIB_POSIXCHECK -# undef wcspbrk -# if HAVE_RAW_DECL_WCSPBRK -_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " - "use gnulib module wcspbrk for portability"); -# endif -#endif - - -/* Find the first occurrence of NEEDLE in HAYSTACK. */ -#if @GNULIB_WCSSTR@ -# if !@HAVE_WCSSTR@ -_GL_FUNCDECL_SYS (wcsstr, wchar_t *, - (const wchar_t *haystack, const wchar_t *needle) - _GL_ATTRIBUTE_PURE); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { - const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); - wchar_t * std::wcsstr (wchar_t *, const wchar_t *); - } */ -_GL_CXXALIAS_SYS_CAST2 (wcsstr, - wchar_t *, (const wchar_t *, const wchar_t *), - const wchar_t *, (const wchar_t *, const wchar_t *)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (wcsstr, wchar_t *, - (wchar_t *haystack, const wchar_t *needle)); -_GL_CXXALIASWARN1 (wcsstr, const wchar_t *, - (const wchar_t *haystack, const wchar_t *needle)); -# else -_GL_CXXALIASWARN (wcsstr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef wcsstr -# if HAVE_RAW_DECL_WCSSTR -_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " - "use gnulib module wcsstr for portability"); -# endif -#endif - - -/* Divide WCS into tokens separated by characters in DELIM. */ -#if @GNULIB_WCSTOK@ -# if !@HAVE_WCSTOK@ -_GL_FUNCDECL_SYS (wcstok, wchar_t *, - (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); -# endif -_GL_CXXALIAS_SYS (wcstok, wchar_t *, - (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); -_GL_CXXALIASWARN (wcstok); -#elif defined GNULIB_POSIXCHECK -# undef wcstok -# if HAVE_RAW_DECL_WCSTOK -_GL_WARN_ON_USE (wcstok, "wcstok is unportable - " - "use gnulib module wcstok for portability"); -# endif -#endif - - -/* Determine number of column positions required for first N wide - characters (or fewer if S ends before this) in S. */ -#if @GNULIB_WCSWIDTH@ -# if @REPLACE_WCSWIDTH@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wcswidth -# define wcswidth rpl_wcswidth -# endif -_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) - _GL_ATTRIBUTE_PURE); -_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); -# else -# if !@HAVE_WCSWIDTH@ -_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); -# endif -_GL_CXXALIASWARN (wcswidth); -#elif defined GNULIB_POSIXCHECK -# undef wcswidth -# if HAVE_RAW_DECL_WCSWIDTH -_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " - "use gnulib module wcswidth for portability"); -# endif -#endif - - -#endif /* _@GUARD_PREFIX@_WCHAR_H */ -#endif /* _@GUARD_PREFIX@_WCHAR_H */ -#endif diff --git a/gl/xsize.c b/gl/xsize.c deleted file mode 100644 index 4b4914c2ca..0000000000 --- a/gl/xsize.c +++ /dev/null @@ -1,3 +0,0 @@ -#include -#define XSIZE_INLINE _GL_EXTERN_INLINE -#include "xsize.h" diff --git a/gl/xsize.h b/gl/xsize.h deleted file mode 100644 index c82712d3e2..0000000000 --- a/gl/xsize.h +++ /dev/null @@ -1,117 +0,0 @@ -/* xsize.h -- Checked size_t computations. - - Copyright (C) 2003, 2008-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef _XSIZE_H -#define _XSIZE_H - -/* Get size_t. */ -#include - -/* Get SIZE_MAX. */ -#include -#if HAVE_STDINT_H -# include -#endif - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif -_GL_INLINE_HEADER_BEGIN -#ifndef XSIZE_INLINE -# define XSIZE_INLINE _GL_INLINE -#endif - -/* The size of memory objects is often computed through expressions of - type size_t. Example: - void* p = malloc (header_size + n * element_size). - These computations can lead to overflow. When this happens, malloc() - returns a piece of memory that is way too small, and the program then - crashes while attempting to fill the memory. - To avoid this, the functions and macros in this file check for overflow. - The convention is that SIZE_MAX represents overflow. - malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc - implementation that uses mmap --, it's recommended to use size_overflow_p() - or size_in_bounds_p() before invoking malloc(). - The example thus becomes: - size_t size = xsum (header_size, xtimes (n, element_size)); - void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); -*/ - -/* Convert an arbitrary value >= 0 to type size_t. */ -#define xcast_size_t(N) \ - ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) - -/* Sum of two sizes, with overflow check. */ -XSIZE_INLINE size_t -#if __GNUC__ >= 3 -__attribute__ ((__pure__)) -#endif -xsum (size_t size1, size_t size2) -{ - size_t sum = size1 + size2; - return (sum >= size1 ? sum : SIZE_MAX); -} - -/* Sum of three sizes, with overflow check. */ -XSIZE_INLINE size_t -#if __GNUC__ >= 3 -__attribute__ ((__pure__)) -#endif -xsum3 (size_t size1, size_t size2, size_t size3) -{ - return xsum (xsum (size1, size2), size3); -} - -/* Sum of four sizes, with overflow check. */ -XSIZE_INLINE size_t -#if __GNUC__ >= 3 -__attribute__ ((__pure__)) -#endif -xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) -{ - return xsum (xsum (xsum (size1, size2), size3), size4); -} - -/* Maximum of two sizes, with overflow check. */ -XSIZE_INLINE size_t -#if __GNUC__ >= 3 -__attribute__ ((__pure__)) -#endif -xmax (size_t size1, size_t size2) -{ - /* No explicit check is needed here, because for any n: - max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ - return (size1 >= size2 ? size1 : size2); -} - -/* Multiplication of a count with an element size, with overflow check. - The count must be >= 0 and the element size must be > 0. - This is a macro, not a function, so that it works correctly even - when N is of a wider type and N > SIZE_MAX. */ -#define xtimes(N, ELSIZE) \ - ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) - -/* Check for overflow. */ -#define size_overflow_p(SIZE) \ - ((SIZE) == SIZE_MAX) -/* Check against overflow. */ -#define size_in_bounds_p(SIZE) \ - ((SIZE) != SIZE_MAX) - -_GL_INLINE_HEADER_END - -#endif /* _XSIZE_H */ diff --git a/gnulib b/gnulib new file mode 160000 index 0000000000..02c8a3da2c --- /dev/null +++ b/gnulib @@ -0,0 +1 @@ +Subproject commit 02c8a3da2c4462ecf78944af9f6fd2c986fa536c diff --git a/gtk-doc.make b/gtk-doc.make deleted file mode 100644 index 1f75dfdc72..0000000000 --- a/gtk-doc.make +++ /dev/null @@ -1,280 +0,0 @@ -# -*- mode: makefile -*- - -#################################### -# Everything below here is generic # -#################################### - -if GTK_DOC_USE_LIBTOOL -GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -GTKDOC_RUN = $(LIBTOOL) --mode=execute -else -GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -GTKDOC_RUN = -endif - -# We set GPATH here; this gives us semantics for GNU make -# which are more like other make's VPATH, when it comes to -# whether a source that is a target of one rule is then -# searched for in VPATH/GPATH. -# -GPATH = $(srcdir) - -TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE) - -SETUP_FILES = \ - $(content_files) \ - $(DOC_MAIN_SGML_FILE) \ - $(DOC_MODULE)-sections.txt \ - $(DOC_MODULE)-overrides.txt - -EXTRA_DIST = \ - $(HTML_IMAGES) \ - $(SETUP_FILES) - -DOC_STAMPS=setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \ - html-build.stamp pdf-build.stamp \ - tmpl.stamp sgml.stamp html.stamp pdf.stamp - -SCANOBJ_FILES = \ - $(DOC_MODULE).args \ - $(DOC_MODULE).hierarchy \ - $(DOC_MODULE).interfaces \ - $(DOC_MODULE).prerequisites \ - $(DOC_MODULE).signals - -REPORT_FILES = \ - $(DOC_MODULE)-undocumented.txt \ - $(DOC_MODULE)-undeclared.txt \ - $(DOC_MODULE)-unused.txt - -CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) - -if ENABLE_GTK_DOC -if GTK_DOC_BUILD_HTML -HTML_BUILD_STAMP=html-build.stamp -else -HTML_BUILD_STAMP= -endif -if GTK_DOC_BUILD_PDF -PDF_BUILD_STAMP=pdf-build.stamp -else -PDF_BUILD_STAMP= -endif - -all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) -else -all-local: -endif - -docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) - -$(REPORT_FILES): sgml-build.stamp - -#### setup #### - -setup-build.stamp: - -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ - echo ' DOC Preparing build'; \ - files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ - if test "x$$files" != "x" ; then \ - for file in $$files ; do \ - test -f $(abs_srcdir)/$$file && \ - cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ - done; \ - fi; \ - test -d $(abs_srcdir)/tmpl && \ - { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \ - chmod -R u+w $(abs_builddir)/tmpl; } \ - fi - @touch setup-build.stamp - -#### scan #### - -scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) - @echo ' DOC Scanning header files' - @_source_dir='' ; \ - for i in $(DOC_SOURCE_DIR) ; do \ - _source_dir="$${_source_dir} --source-dir=$$i" ; \ - done ; \ - gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) - @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ - echo " DOC Introspecting gobjects"; \ - scanobj_options=""; \ - gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ - if test "$(?)" = "0"; then \ - if test "x$(V)" = "x1"; then \ - scanobj_options="--verbose"; \ - fi; \ - fi; \ - CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ - gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ - else \ - for i in $(SCANOBJ_FILES) ; do \ - test -f $$i || touch $$i ; \ - done \ - fi - @touch scan-build.stamp - -$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp - @true - -#### templates #### - -tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt - @echo ' DOC Rebuilding template files' - @gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS) - @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ - if test -w $(abs_srcdir) ; then \ - cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \ - fi \ - fi - @touch tmpl-build.stamp - -tmpl.stamp: tmpl-build.stamp - @true - -$(srcdir)/tmpl/*.sgml: - @true - -#### xml #### - -sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files) - @echo ' DOC Building XML' - @-chmod -R u+w $(srcdir) - @_source_dir='' ; \ - for i in $(DOC_SOURCE_DIR) ; do \ - _source_dir="$${_source_dir} --source-dir=$$i" ; \ - done ; \ - gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) - @touch sgml-build.stamp - -sgml.stamp: sgml-build.stamp - @true - -#### html #### - -html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) - @echo ' DOC Building HTML' - @rm -rf html - @mkdir html - @mkhtml_options=""; \ - gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ - if test "$(?)" = "0"; then \ - if test "x$(V)" = "x1"; then \ - mkhtml_options="$$mkhtml_options --verbose"; \ - fi; \ - fi; \ - gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ - if test "$(?)" = "0"; then \ - mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ - fi; \ - cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) - -@test "x$(HTML_IMAGES)" = "x" || \ - for file in $(HTML_IMAGES) ; do \ - if test -f $(abs_srcdir)/$$file ; then \ - cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ - fi; \ - if test -f $(abs_builddir)/$$file ; then \ - cp $(abs_builddir)/$$file $(abs_builddir)/html; \ - fi; \ - done; - @echo ' DOC Fixing cross-references' - @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) - @touch html-build.stamp - -#### pdf #### - -pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) - @echo ' DOC Building PDF' - @rm -f $(DOC_MODULE).pdf - @mkpdf_options=""; \ - gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ - if test "$(?)" = "0"; then \ - if test "x$(V)" = "x1"; then \ - mkpdf_options="$$mkpdf_options --verbose"; \ - fi; \ - fi; \ - if test "x$(HTML_IMAGES)" != "x"; then \ - for img in $(HTML_IMAGES); do \ - part=`dirname $$img`; \ - echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ - if test $$? != 0; then \ - mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ - fi; \ - done; \ - fi; \ - gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) - @touch pdf-build.stamp - -############## - -clean-local: - @rm -f *~ *.bak - @rm -rf .libs - -distclean-local: - @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ - $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt - @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ - rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ - rm -rf tmpl; \ - fi - -maintainer-clean-local: clean - @rm -rf xml html - -install-data-local: - @installfiles=`echo $(builddir)/html/*`; \ - if test "$$installfiles" = '$(builddir)/html/*'; \ - then echo 1>&2 'Nothing to install' ; \ - else \ - if test -n "$(DOC_MODULE_VERSION)"; then \ - installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ - else \ - installdir="$(DESTDIR)$(TARGET_DIR)"; \ - fi; \ - $(mkinstalldirs) $${installdir} ; \ - for i in $$installfiles; do \ - echo ' $(INSTALL_DATA) '$$i ; \ - $(INSTALL_DATA) $$i $${installdir}; \ - done; \ - if test -n "$(DOC_MODULE_VERSION)"; then \ - mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ - $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ - fi; \ - $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ - fi - -uninstall-local: - @if test -n "$(DOC_MODULE_VERSION)"; then \ - installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ - else \ - installdir="$(DESTDIR)$(TARGET_DIR)"; \ - fi; \ - rm -rf $${installdir} - -# -# Require gtk-doc when making dist -# -if ENABLE_GTK_DOC -dist-check-gtkdoc: -else -dist-check-gtkdoc: - @echo "*** gtk-doc must be installed and enabled in order to make dist" - @false -endif - -dist-hook: dist-check-gtkdoc dist-hook-local - @mkdir $(distdir)/tmpl - @mkdir $(distdir)/html - @-cp ./tmpl/*.sgml $(distdir)/tmpl - @cp ./html/* $(distdir)/html - @-cp ./$(DOC_MODULE).pdf $(distdir)/ - @-cp ./$(DOC_MODULE).types $(distdir)/ - @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ - @cd $(distdir) && rm -f $(DISTCLEANFILES) - @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html - -.PHONY : dist-hook-local docs diff --git a/guile/Makefile.am b/guile/Makefile.am index acbb594e2c..4f82a9fa9d 100644 --- a/guile/Makefile.am +++ b/guile/Makefile.am @@ -1,5 +1,5 @@ # GnuTLS --- Guile bindings for GnuTLS. -# Copyright (C) 2007-2012, 2016 Free Software Foundation, Inc. +# Copyright (C) 2007-2012, 2016, 2019 Free Software Foundation, Inc. # # GnuTLS is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -22,11 +22,10 @@ SUBDIRS = src EXTRA_DIST = .dir-locals.el -guilemoduledir = $(GUILE_SITE) -guilemodulesubdir = $(GUILE_SITE)/gnutls +guilesitesubdir = $(guilesitedir)/gnutls -nodist_guilemodule_DATA = modules/gnutls.scm -dist_guilemodulesub_DATA = modules/gnutls/extra.scm +nodist_guilesite_DATA = modules/gnutls.scm +dist_guilesitesub_DATA = modules/gnutls/extra.scm documentation_modules = \ modules/system/documentation/README \ @@ -45,7 +44,7 @@ CLEANFILES = modules/gnutls.scm .in.scm: $(AM_V_GEN)$(MKDIR_P) "`dirname "$@"`" ; cat "$^" | \ - $(SED) -e's|[@]guileextensiondir[@]|$(guileextensiondir)|g' \ + $(SED) -e's|[@]maybe_guileextensiondir[@]|$(maybe_guileextensiondir)|g' \ > "$@.tmp" $(AM_V_at)mv "$@.tmp" "$@" @@ -56,13 +55,13 @@ CLEANFILES = modules/gnutls.scm if HAVE_GUILD -guileobjectsubdir = $(guileobjectdir)/gnutls -nodist_guileobject_DATA = modules/gnutls.go -nodist_guileobjectsub_DATA = modules/gnutls/extra.go +guilesiteccachesubdir = $(guilesiteccachedir)/gnutls +nodist_guilesiteccache_DATA = modules/gnutls.go +nodist_guilesiteccachesub_DATA = modules/gnutls/extra.go GOBJECTS = \ - $(nodist_guileobject_DATA) \ - $(nodist_guileobjectsub_DATA) + $(nodist_guilesiteccache_DATA) \ + $(nodist_guilesiteccachesub_DATA) CLEANFILES += $(GOBJECTS) @@ -70,15 +69,22 @@ AM_V_GUILEC = $(AM_V_GUILEC_$(V)) AM_V_GUILEC_ = $(AM_V_GUILEC_$(AM_DEFAULT_VERBOSITY)) AM_V_GUILEC_0 = @echo " GUILEC " $@; +if CROSS_COMPILING +CROSS_COMPILING_VARIABLE = GNUTLS_GUILE_CROSS_COMPILING=yes +else +CROSS_COMPILING_VARIABLE = +endif + # Make sure 'gnutls.scm' is built first. # Unset 'GUILE_LOAD_COMPILED_PATH' so we can be sure that any .go file that we # load comes from the build directory. # XXX: Use the C locale for when Guile lacks -# . +# . %.go: %.scm modules/gnutls.scm $(AM_V_GUILEC)$(MKDIR_P) "`dirname "$@"`" ; \ $(AM_V_P) && out=1 || out=- ; \ unset GUILE_LOAD_COMPILED_PATH ; LC_ALL=C \ + GUILE_AUTO_COMPILE=0 $(CROSS_COMPILING_VARIABLE) \ GNUTLS_GUILE_EXTENSION_DIR="$(abs_top_builddir)/guile/src" \ $(GUILD) compile --target="$(host)" \ -L "$(top_builddir)/guile/modules" \ @@ -102,15 +108,9 @@ TESTS = \ tests/errors.scm \ tests/x509-certificates.scm \ tests/x509-auth.scm \ + tests/reauth.scm \ tests/priorities.scm -if ENABLE_OPENPGP -TESTS += \ - tests/openpgp-keys.scm \ - tests/openpgp-keyring.scm \ - tests/openpgp-auth.scm -endif - if ENABLE_SRP TESTS += \ tests/srp-base64.scm @@ -125,12 +125,6 @@ LOG_COMPILER = $(top_builddir)/guile/pre-inst-guile -L $(srcdir)/tests EXTRA_DIST += \ $(TESTS) \ - tests/openpgp-pub.asc \ - tests/openpgp-sec.asc \ - tests/openpgp-elg-pub.asc \ - tests/openpgp-elg-sec.asc \ - tests/openpgp-keyring.gpg \ - tests/openpgp-keyring.asc \ tests/rsa-parameters.pem \ tests/dh-parameters.pem \ tests/x509-certificate.pem \ diff --git a/guile/modules/gnutls.in b/guile/modules/gnutls.in index 193603238f..6461c404a2 100644 --- a/guile/modules/gnutls.in +++ b/guile/modules/gnutls.in @@ -1,5 +1,5 @@ ;;; GnuTLS --- Guile bindings for GnuTLS. -;;; Copyright (C) 2007-2012, 2014, 2015, 2016 Free Software Foundation, Inc. +;;; Copyright (C) 2007-2012, 2014, 2015, 2016, 2019 Free Software Foundation, Inc. ;;; ;;; GnuTLS is free software; you can redistribute it and/or ;;; modify it under the terms of the GNU Lesser General Public @@ -25,7 +25,7 @@ ;; sessions session? - make-session bye handshake rehandshake + make-session bye handshake rehandshake reauthenticate alert-get alert-send session-cipher session-kx session-mac session-protocol session-compression-method session-certificate-type @@ -101,7 +101,8 @@ ;; enum->string functions cipher->string kx->string params->string credentials->string mac->string digest->string compression-method->string - connection-end->string alert-level->string + connection-end->string connection-flag->string + alert-level->string alert-description->string handshake-description->string certificate-status->string certificate-request->string close-request->string @@ -155,6 +156,25 @@ compression-method/lzo connection-end/server connection-end/client + connection-flag/datagram + connection-flag/nonblock + connection-flag/no-extensions + connection-flag/no-replay-protection + connection-flag/no-signal + connection-flag/allow-id-change + connection-flag/enable-false-start + connection-flag/force-client-cert + connection-flag/no-tickets + connection-flag/key-share-top + connection-flag/key-share-top2 + connection-flag/key-share-top3 + connection-flag/post-handshake-auth + connection-flag/no-auto-rekey + connection-flag/safe-padding-check + connection-flag/enable-early-start + connection-flag/enable-rawpk + connection-flag/auto-reauth + connection-flag/enable-early-data alert-level/warning alert-level/fatal alert-description/close-notify @@ -202,6 +222,18 @@ certificate-status/signer-not-found certificate-status/signer-not-ca certificate-status/insecure-algorithm + certificate-status/not-activated + certificate-status/expired + certificate-status/signature-failure + certificate-status/revocation-data-superseded + certificate-status/unexpected-owner + certificate-status/revocation-data-issued-in-future + certificate-status/signer-constraints-failed + certificate-status/mismatch + certificate-status/purpose-mismatch + certificate-status/missing-ocsp-status + certificate-status/invalid-ocsp-status + certificate-status/unknown-crit-extensions certificate-request/ignore certificate-request/request certificate-request/require @@ -254,6 +286,7 @@ ;; sed -r -e 's|^#define GNUTLS_E_([^ ]+).*$|error/\1|' | tr A-Z_ a-z- error/success error/unsupported-version-packet + error/tls-packet-decoding-error error/unexpected-packet-length error/invalid-session error/fatal-alert-received @@ -269,6 +302,7 @@ error/expired error/db-error error/srp-pwd-error + error/keyfile-error error/insufficient-credentials error/insuficient-credentials error/insufficient-cred @@ -300,6 +334,8 @@ error/too-many-empty-packets error/unknown-pk-algorithm error/too-many-handshake-packets + error/received-disallowed-name + error/certificate-required error/no-temporary-rsa-params error/no-compression-algorithms error/no-cipher-suites @@ -307,6 +343,7 @@ error/pk-sig-verify-failed error/illegal-srp-username error/srp-pwd-parsing-error + error/keyfile-parsing-error error/no-temporary-dh-params error/asn1-element-not-found error/asn1-identifier-not-found @@ -342,6 +379,7 @@ error/unsafe-renegotiation-denied error/unknown-srp-username error/premature-termination + error/malformed-cidr error/base64-encoding-error error/incompatible-gcrypt-library error/incompatible-crypto-library @@ -352,6 +390,7 @@ error/base64-unexpected-header-error error/openpgp-subkey-error error/crypto-already-registered + error/already-registered error/handshake-too-large error/cryptodev-ioctl-error error/cryptodev-device-error @@ -359,6 +398,10 @@ error/bad-cookie error/openpgp-preferred-key-error error/incompat-dsa-key-with-tls-protocol + error/insufficient-security + error/heartbeat-pong-received + error/heartbeat-ping-received + error/unrecognized-name error/pkcs11-error error/pkcs11-load-error error/parsing-error @@ -385,10 +428,65 @@ error/certificate-list-unsorted error/illegal-parameter error/no-priorities-were-set + error/x509-unsupported-extension + error/session-eof + error/tpm-error + error/tpm-key-password-error + error/tpm-srk-password-error + error/tpm-session-error + error/tpm-key-not-found + error/tpm-uninitialized + error/tpm-no-lib + error/no-certificate-status + error/ocsp-response-error + error/random-device-error + error/auth-error + error/no-application-protocol + error/sockets-init-error + error/key-import-failed + error/inappropriate-fallback + error/certificate-verification-error + error/privkey-verification-error + error/unexpected-extensions-length + error/asn1-embedded-null-in-string + error/self-test-error + error/no-self-test + error/lib-in-error-state + error/pk-generation-error + error/idna-error + error/need-fallback + error/session-user-id-changed + error/handshake-during-false-start + error/unavailable-during-handshake + error/pk-invalid-pubkey + error/pk-invalid-privkey + error/not-yet-activated + error/invalid-utf8-string + error/no-embedded-data + error/invalid-utf8-email + error/invalid-password-string + error/certificate-time-error + error/record-overflow + error/asn1-time-error + error/incompatible-sig-with-key + error/pk-invalid-pubkey-params + error/pk-no-validation-params + error/ocsp-mismatch-with-certs + error/no-common-key-share + error/reauth-request + error/too-many-matches + error/crl-verification-error + error/missing-extension + error/db-entry-exists + error/early-data-rejected error/unimplemented-feature + error/int-ret-0 + error/int-check-again error/application-error-max error/application-error-min + fatal-error? + ;; OpenPGP keys (formerly in GnuTLS-extra) openpgp-certificate? openpgp-private-key? import-openpgp-certificate import-openpgp-private-key @@ -421,10 +519,51 @@ (eval-when (expand load eval) (define %libdir (or (getenv "GNUTLS_GUILE_EXTENSION_DIR") - "@guileextensiondir@")) - (load-extension (string-append %libdir "/guile-gnutls-v-2") - "scm_init_gnutls")) + ;; The .scm file is supposed to be architecture-independent. Thus, + ;; save 'extensiondir' only if it's different from what Guile expects. + @maybe_guileextensiondir@)) + + (unless (getenv "GNUTLS_GUILE_CROSS_COMPILING") + (load-extension (if %libdir + (string-append %libdir "/guile-gnutls-v-2") + "guile-gnutls-v-2") + "scm_init_gnutls"))) + +(cond-expand + ((not guile-2) + (define-macro (define-deprecated new) + `(define ,new ,(symbol-append '% new)))) + (else + (define-syntax define-deprecated + (lambda (s) + "Define a deprecated variable or procedure, along these lines: + + (define-deprecated variable alias) + +This defines 'variable' as an alias for 'alias', and emits a warning when +'variable' is used." + (syntax-case s () + ((_ variable) + (with-syntax ((alias (datum->syntax + #'variable + (symbol-append + '% (syntax->datum #'variable))))) + #'(define-deprecated variable alias))) + ((_ variable alias) + (identifier? #'variable) + #`(define-syntax variable + (lambda (s) + (issue-deprecation-warning + (format #f "GnuTLS variable '~a' is deprecated" + (syntax->datum #'variable))) + (syntax-case s () + ((_ args (... ...)) + #'(alias args (... ...))) + (id + (identifier? #'id) + #'alias)))))))))) + ;; Renaming. (define protocol/ssl-3 protocol/ssl3) @@ -442,6 +581,40 @@ (define certificate-verify/allow-x509-v1-ca-certificate certificate-verify/allow-x509-v1-ca-crt) +;; Deprecated OpenPGP bindings. +(define-deprecated certificate-type/openpgp) +(define-deprecated error/openpgp-getkey-failed) +(define-deprecated error/openpgp-uid-revoked) +(define-deprecated error/openpgp-fingerprint-unsupported) +(define-deprecated error/openpgp-keyring-error) +(define-deprecated error/openpgp-subkey-error) +(define-deprecated error/openpgp-preferred-key-error) +(define-deprecated openpgp-private-key?) +(define-deprecated import-openpgp-certificate) +(define-deprecated import-openpgp-private-key) +(define-deprecated openpgp-certificate-id) +(define-deprecated openpgp-certificate-id!) +(define-deprecated openpgp-certificate-fingerprint) +(define-deprecated openpgp-certificate-fingerprint!) +(define-deprecated openpgp-certificate-name) +(define-deprecated openpgp-certificate-names) +(define-deprecated openpgp-certificate-algorithm) +(define-deprecated openpgp-certificate-version) +(define-deprecated openpgp-certificate-usage) +(define-deprecated openpgp-keyring?) +(define-deprecated import-openpgp-keyring) +(define-deprecated openpgp-keyring-contains-key-id?) +(define-deprecated set-certificate-credentials-openpgp-keys!) + +;; XXX: The following bindings should be marked as deprecated as well, but due +;; to the way binding names are constructed for enums and smobs, it's +;; complicated. Oh well. +;; +;; (define-deprecated openpgp-certificate?) +;; (define-deprecated openpgp-certificate-format->string) +;; (define-deprecated openpgp-certificate-format/raw) +;; (define-deprecated openpgp-certificate-format/base64) + ;;; Local Variables: ;;; mode: scheme ;;; coding: latin-1 diff --git a/guile/modules/gnutls/build/enums.scm b/guile/modules/gnutls/build/enums.scm index 1ef46b77a5..117059b0e3 100644 --- a/guile/modules/gnutls/build/enums.scm +++ b/guile/modules/gnutls/build/enums.scm @@ -1,5 +1,5 @@ ;;; GnuTLS --- Guile bindings for GnuTLS. -;;; Copyright (C) 2007-2012, 2014 Free Software Foundation, Inc. +;;; Copyright (C) 2007-2012, 2014, 2019 Free Software Foundation, Inc. ;;; ;;; GnuTLS is free software; you can redistribute it and/or ;;; modify it under the terms of the GNU Lesser General Public @@ -341,6 +341,30 @@ #f "GNUTLS_")) +(define %connection-flag-enum + (make-enum-type 'connection-flag "gnutls_init_flags_t" + '(datagram + nonblock + no-extensions + no-replay-protection + no-signal + allow-id-change + enable-false-start + force-client-cert + no-tickets + key-share-top + key-share-top2 + key-share-top3 + post-handshake-auth + no-auto-rekey + safe-padding-check + enable-early-start + enable-rawpk + auto-reauth + enable-early-data) + #f + "GNUTLS_")) + (define %alert-level-enum (make-enum-type 'alert-level "gnutls_alert_level_t" '(warning fatal) @@ -371,7 +395,12 @@ unrecognized-name unknown-psk-identity) (define %certificate-status-enum (make-enum-type 'certificate-status "gnutls_certificate_status_t" '(invalid revoked signer-not-found signer-not-ca - insecure-algorithm) + insecure-algorithm not-activated expired + signature-failure revocation-data-superseded + unexpected-owner revocation-data-issued-in-future + signer-constraints-failure mismatch purpose-mismatch + missing-ocsp-status invalid-ocsp-status + unknown-crit-extensions) #f "GNUTLS_CERT_")) @@ -459,10 +488,11 @@ unrecognized-name unknown-psk-identity) (make-enum-type 'error "int" '( ;; FIXME: Automate this: -;; grep '^#define GNUTLS_E_' ../../../../includes/gnutls/gnutls.h.in \ +;; grep '^#define GNUTLS_E_' ../../../lib/includes/gnutls/gnutls.h.in \ ;; | sed -r -e 's/^#define GNUTLS_E_([^ ]+).*$/\1/' | tr A-Z_ a-z- success unsupported-version-packet +tls-packet-decoding-error unexpected-packet-length invalid-session fatal-alert-received @@ -478,6 +508,7 @@ again expired db-error srp-pwd-error +keyfile-error insufficient-credentials insuficient-credentials insufficient-cred @@ -509,6 +540,8 @@ file-error too-many-empty-packets unknown-pk-algorithm too-many-handshake-packets +received-disallowed-name +certificate-required no-temporary-rsa-params no-compression-algorithms no-cipher-suites @@ -516,6 +549,7 @@ openpgp-getkey-failed pk-sig-verify-failed illegal-srp-username srp-pwd-parsing-error +keyfile-parsing-error no-temporary-dh-params asn1-element-not-found asn1-identifier-not-found @@ -551,6 +585,7 @@ safe-renegotiation-failed unsafe-renegotiation-denied unknown-srp-username premature-termination +malformed-cidr base64-encoding-error incompatible-gcrypt-library incompatible-crypto-library @@ -561,6 +596,7 @@ random-failed base64-unexpected-header-error openpgp-subkey-error crypto-already-registered +already-registered handshake-too-large cryptodev-ioctl-error cryptodev-device-error @@ -568,6 +604,10 @@ channel-binding-not-available bad-cookie openpgp-preferred-key-error incompat-dsa-key-with-tls-protocol +insufficient-security +heartbeat-pong-received +heartbeat-ping-received +unrecognized-name pkcs11-error pkcs11-load-error parsing-error @@ -594,7 +634,60 @@ pkcs11-requested-object-not-availble certificate-list-unsorted illegal-parameter no-priorities-were-set +x509-unsupported-extension +session-eof +tpm-error +tpm-key-password-error +tpm-srk-password-error +tpm-session-error +tpm-key-not-found +tpm-uninitialized +tpm-no-lib +no-certificate-status +ocsp-response-error +random-device-error +auth-error +no-application-protocol +sockets-init-error +key-import-failed +inappropriate-fallback +certificate-verification-error +privkey-verification-error +unexpected-extensions-length +asn1-embedded-null-in-string +self-test-error +no-self-test +lib-in-error-state +pk-generation-error +idna-error +need-fallback +session-user-id-changed +handshake-during-false-start +unavailable-during-handshake +pk-invalid-pubkey +pk-invalid-privkey +not-yet-activated +invalid-utf8-string +no-embedded-data +invalid-utf8-email +invalid-password-string +certificate-time-error +record-overflow +asn1-time-error +incompatible-sig-with-key +pk-invalid-pubkey-params +pk-no-validation-params +ocsp-mismatch-with-certs +no-common-key-share +reauth-request +too-many-matches +crl-verification-error +missing-extension +db-entry-exists +early-data-rejected unimplemented-feature +int-ret-0 +int-check-again application-error-max application-error-min ) @@ -617,7 +710,8 @@ application-error-min (define %gnutls-enums ;; All enums. (list %cipher-enum %kx-enum %params-enum %credentials-enum %mac-enum - %digest-enum %compression-method-enum %connection-end-enum + %digest-enum %compression-method-enum + %connection-end-enum %connection-flag-enum %alert-level-enum %alert-description-enum %handshake-description-enum %certificate-status-enum %certificate-request-enum %close-request-enum %protocol-enum %certificate-type-enum diff --git a/guile/modules/system/documentation/README b/guile/modules/system/documentation/README index de45e2e503..d8dba12983 100644 --- a/guile/modules/system/documentation/README +++ b/guile/modules/system/documentation/README @@ -7,7 +7,7 @@ in Guile terms. They were stolen from Guile-Reader 0.3: - http://www.nongnu.org/guile-reader/ + https://www.nongnu.org/guile-reader/ It was only slightly modified. diff --git a/guile/src/Makefile.am b/guile/src/Makefile.am index 177a8618c3..78f0143b27 100644 --- a/guile/src/Makefile.am +++ b/guile/src/Makefile.am @@ -38,7 +38,7 @@ guileextension_LTLIBRARIES = guile-gnutls-v-2.la # Use '-module' to build a "dlopenable module", in Libtool terms. # Use '-undefined' to placate Libtool on Windows; see -# . +# . guile_gnutls_v_2_la_LDFLAGS = -module -no-undefined # Linking against GnuTLS. @@ -113,7 +113,7 @@ snarfcppopts = $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ # Note: we cannot use the portable ".c.x" form, since that leads # prerequisites to be ignored: -# . +# . %.x: %.c $(GENERATED_BINDINGS) $(AM_V_GEN)$(guile_snarf) -o $@ $< $(snarfcppopts) diff --git a/guile/src/core.c b/guile/src/core.c index 2c38b60235..d78e53bbc9 100644 --- a/guile/src/core.c +++ b/guile/src/core.c @@ -1,5 +1,5 @@ /* GnuTLS --- Guile bindings for GnuTLS. - Copyright (C) 2007-2014, 2016 Free Software Foundation, Inc. + Copyright (C) 2007-2014, 2016, 2019 Free Software Foundation, Inc. GnuTLS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -28,9 +28,8 @@ #include #include -#ifdef HAVE_ALLOCA_H #include -#endif +#include #include "enums.h" #include "smobs.h" @@ -38,6 +37,18 @@ #include "utils.h" +#ifndef HAVE_SCM_GC_MALLOC_POINTERLESS +# define scm_gc_malloc_pointerless scm_gc_malloc +#endif + +/* Maximum size allowed for 'alloca'. */ +#define ALLOCA_MAX_SIZE 1024U + +/* Allocate SIZE bytes, either on the C stack or on the GC-managed heap. */ +#define FAST_ALLOC(size) \ + (((size) <= ALLOCA_MAX_SIZE) \ + ? alloca (size) \ + : scm_gc_malloc_pointerless ((size), "gnutls-alloc")) /* SMOB and enums type definitions. */ #include "enum-map.i.c" @@ -118,21 +129,27 @@ SCM_DEFINE (scm_gnutls_version, "gnutls-version", 0, 0, 0, #undef FUNC_NAME -SCM_DEFINE (scm_gnutls_make_session, "make-session", 1, 0, 0, - (SCM end), +SCM_DEFINE (scm_gnutls_make_session, "make-session", 1, 0, 1, + (SCM end, SCM flags), "Return a new session for connection end @var{end}, either " - "@code{connection-end/server} or @code{connection-end/client}.") + "@code{connection-end/server} or @code{connection-end/client}. " + "The optional @var{flags} arguments are @code{connection-flag} " + "values such as @code{connection-flag/auto-reauth}.") #define FUNC_NAME s_scm_gnutls_make_session { - int err; + int err, i; gnutls_session_t c_session; gnutls_connection_end_t c_end; + gnutls_init_flags_t c_flags = 0; SCM session_data; c_end = scm_to_gnutls_connection_end (end, 1, FUNC_NAME); session_data = SCM_GNUTLS_MAKE_SESSION_DATA (); - err = gnutls_init (&c_session, c_end); + for (i = 2; scm_is_pair (flags); flags = scm_cdr (flags), i++) + c_flags |= scm_to_gnutls_connection_flag (scm_car (flags), i, FUNC_NAME); + + err = gnutls_init (&c_session, c_end | c_flags); if (EXPECT_FALSE (err)) scm_gnutls_error (err, FUNC_NAME); @@ -198,7 +215,24 @@ SCM_DEFINE (scm_gnutls_rehandshake, "rehandshake", 1, 0, 0, return SCM_UNSPECIFIED; } +#undef FUNC_NAME + +SCM_DEFINE (scm_gnutls_reauthenticate, "reauthenticate", 1, 0, 0, + (SCM session), "Perform a re-authentication step for @var{session}.") +#define FUNC_NAME s_scm_gnutls_reauthenticate +{ + int err; + gnutls_session_t c_session; + + c_session = scm_to_gnutls_session (session, 1, FUNC_NAME); + + /* FIXME: Allow flags as an argument. */ + err = gnutls_reauth (c_session, 0); + if (EXPECT_FALSE (err)) + scm_gnutls_error (err, FUNC_NAME); + return SCM_UNSPECIFIED; +} #undef FUNC_NAME SCM_DEFINE (scm_gnutls_alert_get, "alert-get", 1, 0, 0, @@ -793,6 +827,10 @@ SCM_DEFINE (scm_gnutls_record_receive_x, "record-receive!", 2, 0, 0, so we have a separate implementation for these newer versions. */ #if USING_GUILE_BEFORE_2_2 static scm_t_bits session_record_port_type; + +/* Hint for the `scm_gc_' functions. */ +static const char session_record_port_gc_hint[] = + "gnutls-session-record-port"; #else static scm_t_port_type *session_record_port_type; #endif @@ -804,10 +842,6 @@ static scm_t_port_type *session_record_port_type; /* Size of a session port's input buffer. */ #define SCM_GNUTLS_SESSION_RECORD_PORT_BUFFER_SIZE 4096 -/* Hint for the `scm_gc_' functions. */ -static const char session_record_port_gc_hint[] = - "gnutls-session-record-port"; - #if SCM_MAJOR_VERSION == 1 && SCM_MINOR_VERSION <= 8 @@ -871,8 +905,15 @@ do_fill_port (void *data) const fill_port_data_t *args = (fill_port_data_t *) data; c_port = args->c_port; - result = gnutls_record_recv (args->c_session, - c_port->read_buf, c_port->read_buf_size); + + /* We can get GNUTLS_E_AGAIN due to a "short read", which does _not_ + correspond to an actual EAGAIN from read(2) since the underlying file + descriptor is blocking. Thus, we can safely loop right away. */ + do + result = gnutls_record_recv (args->c_session, + c_port->read_buf, c_port->read_buf_size); + while (result == GNUTLS_E_AGAIN || result == GNUTLS_E_INTERRUPTED); + if (EXPECT_TRUE (result > 0)) { c_port->read_pos = c_port->read_buf; @@ -960,12 +1001,8 @@ make_session_record_port (SCM session) const unsigned long mode_bits = SCM_OPN | SCM_RDNG | SCM_WRTNG; c_port_buf = (unsigned char *) -#ifdef HAVE_SCM_GC_MALLOC_POINTERLESS - scm_gc_malloc_pointerless -#else - scm_gc_malloc -#endif - (SCM_GNUTLS_SESSION_RECORD_PORT_BUFFER_SIZE, session_record_port_gc_hint); + scm_gc_malloc_pointerless (SCM_GNUTLS_SESSION_RECORD_PORT_BUFFER_SIZE, + session_record_port_gc_hint); /* Create a new port. */ port = scm_new_port_table_entry (session_record_port_type); @@ -1002,9 +1039,25 @@ read_from_session_record_port (SCM port, SCM dst, size_t start, size_t count) read_buf = (char *) SCM_BYTEVECTOR_CONTENTS (dst) + start; - /* XXX: Leave guile mode when SCM_GNUTLS_SESSION_TRANSPORT_IS_FD is - true? */ - result = gnutls_record_recv (c_session, read_buf, count); + /* We can get GNUTLS_E_AGAIN due to a "short read", which does _not_ + correspond to an actual EAGAIN from read(2) if the underlying file + descriptor is blocking--e.g., from 'get_last_packet', returning + GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE. + + If SESSION is backed by a file descriptor, return -1 to indicate that + we'd better poll; otherwise loop, which is good enough if the underlying + port is blocking. */ + do + result = gnutls_record_recv (c_session, read_buf, count); + while (result == GNUTLS_E_INTERRUPTED + || (result == GNUTLS_E_AGAIN + && !SCM_GNUTLS_SESSION_TRANSPORT_IS_FD (c_session))); + + if (result == GNUTLS_E_AGAIN + && SCM_GNUTLS_SESSION_TRANSPORT_IS_FD (c_session)) + /* Tell Guile that reading would block. */ + return (size_t) -1; + if (EXPECT_FALSE (result < 0)) /* FIXME: Silently swallowed! */ scm_gnutls_error (result, FUNC_NAME); @@ -1013,6 +1066,22 @@ read_from_session_record_port (SCM port, SCM dst, size_t start, size_t count) } #undef FUNC_NAME +/* Return the file descriptor that backs PORT. This function is called upon a + blocking read--i.e., 'read_from_session_record_port' returned -1. */ +static int +session_record_port_fd (SCM port) +{ + SCM session; + gnutls_session_t c_session; + + session = SCM_GNUTLS_SESSION_RECORD_PORT_SESSION (port); + c_session = scm_to_gnutls_session (session, 1, __func__); + + assert (SCM_GNUTLS_SESSION_TRANSPORT_IS_FD (c_session)); + + return gnutls_transport_get_int (c_session); +} + static size_t write_to_session_record_port (SCM port, SCM src, size_t start, size_t count) #define FUNC_NAME "write_to_session_record_port" @@ -1086,6 +1155,11 @@ scm_init_gnutls_session_record_port_type (void) #endif write_to_session_record_port); +#if !USING_GUILE_BEFORE_2_2 + scm_set_port_read_wait_fd (session_record_port_type, + session_record_port_fd); +#endif + /* Guile >= 1.9.3 doesn't need a custom mark procedure, and doesn't need a finalizer (since memory associated with the port is automatically reclaimed.) */ @@ -1440,7 +1514,7 @@ set_certificate_file (certificate_set_file_function_t set_file, c_format = scm_to_gnutls_x509_certificate_format (format, 3, FUNC_NAME); c_file_len = scm_c_string_length (file); - c_file = alloca (c_file_len + 1); + c_file = FAST_ALLOC (c_file_len + 1); (void) scm_to_locale_stringbuf (file, c_file, c_file_len + 1); c_file[c_file_len] = '\0'; @@ -1552,10 +1626,10 @@ SCM_DEFINE (scm_gnutls_set_certificate_credentials_x509_key_files_x, c_format = scm_to_gnutls_x509_certificate_format (format, 2, FUNC_NAME); c_cert_file_len = scm_c_string_length (cert_file); - c_cert_file = alloca (c_cert_file_len + 1); + c_cert_file = FAST_ALLOC (c_cert_file_len + 1); c_key_file_len = scm_c_string_length (key_file); - c_key_file = alloca (c_key_file_len + 1); + c_key_file = FAST_ALLOC (c_key_file_len + 1); (void) scm_to_locale_stringbuf (cert_file, c_cert_file, c_cert_file_len + 1); @@ -1715,7 +1789,7 @@ SCM_DEFINE (scm_gnutls_set_certificate_credentials_x509_keys_x, SCM_VALIDATE_LIST_COPYLEN (2, certs, c_cert_count); c_key = scm_to_gnutls_x509_private_key (privkey, 3, FUNC_NAME); - c_certs = alloca (c_cert_count * sizeof (*c_certs)); + c_certs = FAST_ALLOC (c_cert_count * sizeof (*c_certs)); for (i = 0; scm_is_pair (certs); certs = SCM_CDR (certs), i++) { c_certs[i] = scm_to_gnutls_x509_certificate (SCM_CAR (certs), @@ -1821,6 +1895,18 @@ SCM_DEFINE (scm_gnutls_peer_certificate_status, "peer-certificate-status", MATCH_STATUS (GNUTLS_CERT_SIGNER_NOT_FOUND); MATCH_STATUS (GNUTLS_CERT_SIGNER_NOT_CA); MATCH_STATUS (GNUTLS_CERT_INSECURE_ALGORITHM); + MATCH_STATUS (GNUTLS_CERT_NOT_ACTIVATED); + MATCH_STATUS (GNUTLS_CERT_EXPIRED); + MATCH_STATUS (GNUTLS_CERT_SIGNATURE_FAILURE); + MATCH_STATUS (GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED); + MATCH_STATUS (GNUTLS_CERT_UNEXPECTED_OWNER); + MATCH_STATUS (GNUTLS_CERT_REVOCATION_DATA_ISSUED_IN_FUTURE); + MATCH_STATUS (GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE); + MATCH_STATUS (GNUTLS_CERT_MISMATCH); + MATCH_STATUS (GNUTLS_CERT_PURPOSE_MISMATCH); + MATCH_STATUS (GNUTLS_CERT_MISSING_OCSP_STATUS); + MATCH_STATUS (GNUTLS_CERT_INVALID_OCSP_STATUS); + MATCH_STATUS (GNUTLS_CERT_UNKNOWN_CRIT_EXTENSIONS); if (EXPECT_FALSE (c_status != 0)) /* XXX: We failed to interpret one of the status flags. */ @@ -1874,8 +1960,8 @@ SCM_DEFINE (scm_gnutls_set_srp_server_credentials_files_x, c_password_file_len = scm_c_string_length (password_file); c_password_conf_file_len = scm_c_string_length (password_conf_file); - c_password_file = alloca (c_password_file_len + 1); - c_password_conf_file = alloca (c_password_conf_file_len + 1); + c_password_file = FAST_ALLOC (c_password_file_len + 1); + c_password_conf_file = FAST_ALLOC (c_password_conf_file_len + 1); (void) scm_to_locale_stringbuf (password_file, c_password_file, c_password_file_len + 1); @@ -1932,8 +2018,8 @@ SCM_DEFINE (scm_gnutls_set_srp_client_credentials_x, c_username_len = scm_c_string_length (username); c_password_len = scm_c_string_length (password); - c_username = alloca (c_username_len + 1); - c_password = alloca (c_password_len + 1); + c_username = FAST_ALLOC (c_username_len + 1); + c_password = FAST_ALLOC (c_password_len + 1); (void) scm_to_locale_stringbuf (username, c_username, c_username_len + 1); c_username[c_username_len] = '\0'; @@ -1989,7 +2075,7 @@ SCM_DEFINE (scm_gnutls_srp_base64_encode, "srp-base64-encode", SCM_VALIDATE_STRING (1, str); c_str_len = scm_c_string_length (str); - c_str = alloca (c_str_len + 1); + c_str = FAST_ALLOC (c_str_len + 1); (void) scm_to_locale_stringbuf (str, c_str, c_str_len + 1); c_str[c_str_len] = '\0'; @@ -2052,14 +2138,14 @@ SCM_DEFINE (scm_gnutls_srp_base64_decode, "srp-base64-decode", SCM_VALIDATE_STRING (1, str); c_str_len = scm_c_string_length (str); - c_str = alloca (c_str_len + 1); + c_str = FAST_ALLOC (c_str_len + 1); (void) scm_to_locale_stringbuf (str, c_str, c_str_len + 1); c_str[c_str_len] = '\0'; /* We assume that the decoded string is smaller than the encoded string. */ c_result_len = c_str_len; - c_result = alloca (c_result_len + 1); + c_result = FAST_ALLOC (c_result_len + 1); c_str_d.data = (unsigned char *) c_str; c_str_d.size = c_str_len; @@ -2114,7 +2200,7 @@ SCM_DEFINE (scm_gnutls_set_psk_server_credentials_file_x, SCM_VALIDATE_STRING (2, file); c_file_len = scm_c_string_length (file); - c_file = alloca (c_file_len + 1); + c_file = FAST_ALLOC (c_file_len + 1); (void) scm_to_locale_stringbuf (file, c_file, c_file_len + 1); c_file[c_file_len] = '\0'; @@ -2168,7 +2254,7 @@ SCM_DEFINE (scm_gnutls_set_psk_client_credentials_x, c_key_format = scm_to_gnutls_psk_key_format (key_format, 4, FUNC_NAME); c_username_len = scm_c_string_length (username); - c_username = alloca (c_username_len + 1); + c_username = FAST_ALLOC (c_username_len + 1); (void) scm_to_locale_stringbuf (username, c_username, c_username_len + 1); c_username[c_username_len] = '\0'; @@ -2336,7 +2422,7 @@ SCM_DEFINE (scm_gnutls_pkcs8_import_x509_private_key, else { c_pass_len = scm_c_string_length (pass); - c_pass = alloca (c_pass_len + 1); + c_pass = FAST_ALLOC (c_pass_len + 1); (void) scm_to_locale_stringbuf (pass, c_pass, c_pass_len + 1); c_pass[c_pass_len] = '\0'; } @@ -2392,7 +2478,7 @@ SCM_DEFINE (scm_gnutls_pkcs8_import_x509_private_key, (void) get_the_dn (c_cert, NULL, &c_dn_len); \ \ /* Get the DN itself. */ \ - c_dn = alloca (c_dn_len); \ + c_dn = FAST_ALLOC (c_dn_len); \ err = get_the_dn (c_cert, c_dn, &c_dn_len); \ \ if (EXPECT_FALSE (err)) \ @@ -2406,7 +2492,7 @@ SCM_DEFINE (scm_gnutls_x509_certificate_dn, "x509-certificate-dn", (SCM cert), "Return the distinguished name (DN) of X.509 certificate " "@var{cert}. The form of the DN is as described in @uref{" - "http://tools.ietf.org/html/rfc2253, RFC 2253}.") + "https://tools.ietf.org/html/rfc2253, RFC 2253}.") #define FUNC_NAME s_scm_gnutls_x509_certificate_dn { X509_CERTIFICATE_DN_FUNCTION_BODY (gnutls_x509_crt_get_dn); @@ -2512,7 +2598,7 @@ SCM_DEFINE (scm_gnutls_x509_certificate_matches_hostname_p, (SCM cert, SCM hostname), "Return true if @var{cert} matches @var{hostname}, a string " "denoting a DNS host name. This is the basic implementation " - "of @uref{http://tools.ietf.org/html/rfc2818, RFC 2818} (aka. " + "of @uref{https://tools.ietf.org/html/rfc2818, RFC 2818} (aka. " "HTTPS).") #define FUNC_NAME s_scm_gnutls_x509_certificate_matches_hostname_p { @@ -2525,7 +2611,7 @@ SCM_DEFINE (scm_gnutls_x509_certificate_matches_hostname_p, SCM_VALIDATE_STRING (2, hostname); c_hostname_len = scm_c_string_length (hostname); - c_hostname = alloca (c_hostname_len + 1); + c_hostname = FAST_ALLOC (c_hostname_len + 1); (void) scm_to_locale_stringbuf (hostname, c_hostname, c_hostname_len + 1); c_hostname[c_hostname_len] = '\0'; @@ -2799,7 +2885,7 @@ SCM_DEFINE (scm_gnutls_x509_certificate_subject_alternative_name, #define GUILE_GNUTLS_MAX_OPENPGP_NAME_LENGTH 2048 SCM_DEFINE (scm_gnutls_import_openpgp_certificate, - "import-openpgp-certificate", 2, 0, 0, (SCM data, SCM format), + "%import-openpgp-certificate", 2, 0, 0, (SCM data, SCM format), "Return a new OpenPGP certificate object resulting from the " "import of @var{data} (a uniform array) according to " "@var{format}.") @@ -2843,7 +2929,7 @@ SCM_DEFINE (scm_gnutls_import_openpgp_certificate, #undef FUNC_NAME SCM_DEFINE (scm_gnutls_import_openpgp_private_key, - "import-openpgp-private-key", 2, 1, 0, (SCM data, SCM format, + "%import-openpgp-private-key", 2, 1, 0, (SCM data, SCM format, SCM pass), "Return a new OpenPGP private key object resulting from the " "import of @var{data} (a uniform array) according to " @@ -2866,7 +2952,7 @@ SCM_DEFINE (scm_gnutls_import_openpgp_private_key, else { c_pass_len = scm_c_string_length (pass); - c_pass = alloca (c_pass_len + 1); + c_pass = FAST_ALLOC (c_pass_len + 1); (void) scm_to_locale_stringbuf (pass, c_pass, c_pass_len + 1); c_pass[c_pass_len] = '\0'; } @@ -2898,7 +2984,7 @@ SCM_DEFINE (scm_gnutls_import_openpgp_private_key, #undef FUNC_NAME -SCM_DEFINE (scm_gnutls_openpgp_certificate_id, "openpgp-certificate-id", +SCM_DEFINE (scm_gnutls_openpgp_certificate_id, "%openpgp-certificate-id", 1, 0, 0, (SCM key), "Return the ID (an 8-element u8vector) of certificate " @@ -2924,7 +3010,7 @@ SCM_DEFINE (scm_gnutls_openpgp_certificate_id, "openpgp-certificate-id", #undef FUNC_NAME -SCM_DEFINE (scm_gnutls_openpgp_certificate_id_x, "openpgp-certificate-id!", +SCM_DEFINE (scm_gnutls_openpgp_certificate_id_x, "%openpgp-certificate-id!", 2, 0, 0, (SCM key, SCM id), "Store the ID (an 8 byte sequence) of certificate " @@ -2959,7 +3045,7 @@ SCM_DEFINE (scm_gnutls_openpgp_certificate_id_x, "openpgp-certificate-id!", #undef FUNC_NAME SCM_DEFINE (scm_gnutls_openpgp_certificate_fingerpint_x, - "openpgp-certificate-fingerprint!", + "%openpgp-certificate-fingerprint!", 2, 0, 0, (SCM key, SCM fpr), "Store in @var{fpr} (a u8vector) the fingerprint of @var{key}. " @@ -2990,7 +3076,7 @@ SCM_DEFINE (scm_gnutls_openpgp_certificate_fingerpint_x, #undef FUNC_NAME SCM_DEFINE (scm_gnutls_openpgp_certificate_fingerprint, - "openpgp-certificate-fingerprint", + "%openpgp-certificate-fingerprint", 1, 0, 0, (SCM key), "Return a new u8vector denoting the fingerprint of " "@var{key}.") @@ -3048,7 +3134,7 @@ SCM_DEFINE (scm_gnutls_openpgp_certificate_fingerprint, #undef FUNC_NAME -SCM_DEFINE (scm_gnutls_openpgp_certificate_name, "openpgp-certificate-name", +SCM_DEFINE (scm_gnutls_openpgp_certificate_name, "%openpgp-certificate-name", 2, 0, 0, (SCM key, SCM index), "Return the @var{index}th name of @var{key}.") @@ -3073,7 +3159,7 @@ SCM_DEFINE (scm_gnutls_openpgp_certificate_name, "openpgp-certificate-name", #undef FUNC_NAME -SCM_DEFINE (scm_gnutls_openpgp_certificate_names, "openpgp-certificate-names", +SCM_DEFINE (scm_gnutls_openpgp_certificate_names, "%openpgp-certificate-names", 1, 0, 0, (SCM key), "Return the list of names for @var{key}.") #define FUNC_NAME s_scm_gnutls_openpgp_certificate_names { @@ -3106,7 +3192,7 @@ SCM_DEFINE (scm_gnutls_openpgp_certificate_names, "openpgp-certificate-names", #undef FUNC_NAME SCM_DEFINE (scm_gnutls_openpgp_certificate_algorithm, - "openpgp-certificate-algorithm", + "%openpgp-certificate-algorithm", 1, 0, 0, (SCM key), "Return two values: the certificate algorithm used by " @@ -3127,7 +3213,7 @@ SCM_DEFINE (scm_gnutls_openpgp_certificate_algorithm, #undef FUNC_NAME SCM_DEFINE (scm_gnutls_openpgp_certificate_version, - "openpgp-certificate-version", + "%openpgp-certificate-version", 1, 0, 0, (SCM key), "Return the version of the OpenPGP message format (RFC2440) " @@ -3145,7 +3231,7 @@ SCM_DEFINE (scm_gnutls_openpgp_certificate_version, #undef FUNC_NAME -SCM_DEFINE (scm_gnutls_openpgp_certificate_usage, "openpgp-certificate-usage", +SCM_DEFINE (scm_gnutls_openpgp_certificate_usage, "%openpgp-certificate-usage", 1, 0, 0, (SCM key), "Return a list of values denoting the key usage of @var{key}.") @@ -3216,7 +3302,7 @@ SCM_DEFINE (scm_gnutls_import_openpgp_keyring, "import-openpgp-keyring", #undef FUNC_NAME SCM_DEFINE (scm_gnutls_openpgp_keyring_contains_key_id_p, - "openpgp-keyring-contains-key-id?", + "%openpgp-keyring-contains-key-id?", 2, 0, 0, (SCM keyring, SCM id), "Return @code{#f} if key ID @var{id} is in @var{keyring}, " @@ -3254,7 +3340,7 @@ SCM_DEFINE (scm_gnutls_openpgp_keyring_contains_key_id_p, /* OpenPGP certificates. */ SCM_DEFINE (scm_gnutls_set_certificate_credentials_openpgp_keys_x, - "set-certificate-credentials-openpgp-keys!", + "%set-certificate-credentials-openpgp-keys!", 3, 0, 0, (SCM cred, SCM pub, SCM sec), "Use certificate @var{pub} and secret key @var{sec} in " diff --git a/guile/src/errors.c b/guile/src/errors.c index 102be5180b..a78f2ffef8 100644 --- a/guile/src/errors.c +++ b/guile/src/errors.c @@ -1,5 +1,5 @@ /* GnuTLS --- Guile bindings for GnuTLS. - Copyright (C) 2007-2012 Free Software Foundation, Inc. + Copyright (C) 2007-2012, 2019 Free Software Foundation, Inc. GnuTLS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -52,6 +52,16 @@ scm_gnutls_error (int c_err, const char *c_func) scm_gnutls_error_with_args (c_err, c_func, SCM_EOL); } +SCM_DEFINE (scm_gnutls_fatal_error_p, "fatal-error?", 1, 0, 0, + (SCM err), + "Return true if @var{error} is fatal.") +#define FUNC_NAME s_scm_gnutls_fatal_error_p +{ + int c_err = scm_to_gnutls_error (err, 1, FUNC_NAME); + return scm_from_bool (gnutls_error_is_fatal (c_err)); +} +#undef FUNC_NAME + void diff --git a/guile/src/utils.c b/guile/src/utils.c index 24aca49100..88db96386b 100644 --- a/guile/src/utils.c +++ b/guile/src/utils.c @@ -1,5 +1,5 @@ /* GnuTLS --- Guile bindings for GnuTLS. - Copyright (C) 2007-2012 Free Software Foundation, Inc. + Copyright (C) 2007-2012, 2019 Free Software Foundation, Inc. GnuTLS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -26,10 +26,6 @@ #include #include -#ifdef HAVE_ALLOCA_H -#include -#endif - #include "enums.h" #include "errors.h" diff --git a/guile/tests/anonymous-auth.scm b/guile/tests/anonymous-auth.scm index a12eeb5b1d..e9010bc554 100644 --- a/guile/tests/anonymous-auth.scm +++ b/guile/tests/anonymous-auth.scm @@ -30,7 +30,7 @@ ;; TLS session settings. (define priorities - "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH") + "NONE:+VERS-TLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH") ;; Message sent by the client. (define %message (apply u8vector (iota 256))) diff --git a/guile/tests/errors.scm b/guile/tests/errors.scm index 4d4d958f85..b8d46234ab 100644 --- a/guile/tests/errors.scm +++ b/guile/tests/errors.scm @@ -1,5 +1,5 @@ ;;; GnuTLS --- Guile bindings for GnuTLS. -;;; Copyright (C) 2007-2012 Free Software Foundation, Inc. +;;; Copyright (C) 2007-2012, 2019 Free Software Foundation, Inc. ;;; ;;; GnuTLS is free software; you can redistribute it and/or ;;; modify it under the terms of the GNU Lesser General Public @@ -26,15 +26,19 @@ (gnutls build tests)) (run-test - (lambda () - (let ((s (make-session connection-end/server))) - (catch 'gnutls-error - (lambda () - (handshake s)) - (lambda (key err function . currently-unused) - (and (eq? key 'gnutls-error) - err - (string? (error->string err)) - (eq? function 'handshake))))))) + (lambda () + (and (fatal-error? error/hash-failed) + (not (fatal-error? error/reauth-request)) + + (let ((s (make-session connection-end/server))) + (catch 'gnutls-error + (lambda () + (handshake s)) + (lambda (key err function . currently-unused) + (and (eq? key 'gnutls-error) + err + (fatal-error? err) + (string? (error->string err)) + (eq? function 'handshake)))))))) ;;; arch-tag: 73ed6229-378d-4a12-a5c6-4c2586c6e3a2 diff --git a/guile/tests/openpgp-auth.scm b/guile/tests/openpgp-auth.scm deleted file mode 100644 index 8c732ce077..0000000000 --- a/guile/tests/openpgp-auth.scm +++ /dev/null @@ -1,105 +0,0 @@ -;;; GnuTLS-extra --- Guile bindings for GnuTLS-EXTRA. -;;; Copyright (C) 2007-2014, 2016 Free Software Foundation, Inc. -;;; -;;; GnuTLS-extra is free software; you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; GnuTLS-extra is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GnuTLS-EXTRA; if not, write to the Free Software -;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -;;; USA. - -;;; Written by Ludovic Courts . - - -;;; -;;; Test session establishment using OpenPGP certificate authentication. -;;; - -(use-modules (gnutls) - (gnutls build tests) - (srfi srfi-4)) - - -;; TLS session settings. -(define priorities - "NONE:+VERS-TLS-ALL:+CTYPE-OPENPGP:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+DHE-RSA:+DHE-DSS:+COMP-ALL") - -;; Message sent by the client. -(define %message - (cons "hello, world!" (iota 4444))) - -(define (import-something import-proc file fmt) - (let* ((path (search-path %load-path file)) - (size (stat:size (stat path))) - (raw (make-u8vector size))) - (uniform-vector-read! raw (open-input-file path)) - (import-proc raw fmt))) - -(define (import-key import-proc file) - (import-something import-proc file openpgp-certificate-format/base64)) - -(define (import-dh-params file) - (import-something pkcs3-import-dh-parameters file - x509-certificate-format/pem)) - -;; Debugging. -;; (set-log-level! 3) -;; (set-log-procedure! (lambda (level str) -;; (format #t "[~a|~a] ~a" (getpid) level str))) - -(run-test - (lambda () - (let ((socket-pair (socketpair PF_UNIX SOCK_STREAM 0)) - (pub (import-key import-openpgp-certificate - "openpgp-pub.asc")) - (sec (import-key import-openpgp-private-key - "openpgp-sec.asc"))) - (with-child-process pid - ;; server-side - (let ((server (make-session connection-end/server)) - (dh (import-dh-params "dh-parameters.pem"))) - (set-session-priorities! server priorities) - (set-server-session-certificate-request! server - certificate-request/require) - - (set-session-transport-fd! server (port->fdes (cdr socket-pair))) - (let ((cred (make-certificate-credentials))) - (set-certificate-credentials-dh-parameters! cred dh) - (set-certificate-credentials-openpgp-keys! cred pub sec) - (set-session-credentials! server cred)) - (set-session-dh-prime-bits! server 1024) - - (handshake server) - (let ((msg (read (session-record-port server))) - (auth-type (session-authentication-type server))) - (bye server close-request/rdwr) - (and (zero? (cdr (waitpid pid))) - (eq? auth-type credentials/certificate) - (equal? msg %message)))) - - ;; client-side (child process) - (let ((client (make-session connection-end/client)) - (cred (make-certificate-credentials))) - (set-session-priorities! client priorities) - - (set-certificate-credentials-openpgp-keys! cred pub sec) - (set-session-credentials! client cred) - (set-session-dh-prime-bits! client 1024) - - (set-session-transport-fd! client (port->fdes (car socket-pair))) - - (handshake client) - (write %message (session-record-port client)) - (bye client close-request/rdwr) - - (primitive-exit)))))) - -;;; arch-tag: 1a973ed5-f45d-45a4-8160-900b6a8c27ff diff --git a/guile/tests/openpgp-elg-pub.asc b/guile/tests/openpgp-elg-pub.asc deleted file mode 100644 index 6bdfabf9d2..0000000000 --- a/guile/tests/openpgp-elg-pub.asc +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mQGiBDxKxWwRBADnLna2Lu+po71ZQJMpJBgFDALXAp1sogZu/DTIYDhifGQ+saZS -p68dN89G/FBaweDGmbN4lbS8s+U1Qf/aR2bWFowriq/WqyJGbQbRgDTV2saY5pk7 -pbNQ/4IuHNhwKnURTotzprCcs7k85E27UWybtflbtmYYhgKgoURyNsBljwCgj1te -eNhfeSzCBy+UdGRXJvtNk3MD/jV41onWYG6RGOn5pwQrljzyPz2PE3eic8Dwl02/ -RLPKvL4U3WRBJVWGPjmpxidmLXesNmYq5El5LDJi0/EumDKnVlMJ1nugrk3yX17a -CTcFatW+ifQGnr1+x2zkMkQd9dUv/9BtOeX2HjaUe2mKd8tiq4HkpBIr+QUGcdmU -bIZeBADQYUN6lk3eMYgYwrJN4AjmAJa2DbimhLhag40Rn8kwMRiJrVejuSf0SPhO -slPGI+2nO0L/eLzmOmpTHXWmTOhUBROAjp9bEM4HXTQXuAEWSRixMdNUTIdlqOy5 -lx9hoJ/HPVCYBhBrWXfSEcsOHQTQ7Za86Juuj3PYALBSE5y/jbRJT3BlbkNESyB0 -ZXN0IGtleSAoT25seSBpbnRlbmRlZCBmb3IgdGVzdCBwdXJwb3NlcyEpIDxvcGVu -Y2RrQGZvby1iYXIub3JnPohaBBMRAgAaBQI8SsVsBQsHCgMEAxUDAgMWAgECHgEC -F4AACgkQvVcs3MzAfDWBwQCcDhKNjtREfG3LzmFQ2c2G4g2EWaUAn2aBZiyAxqrP -HS0rwgTwgv6A09ukuQENBDxKxW8QBADiAVZSYGnQZ9JPTXHm04ZY4IvjvyRsGtzg -jbac2NRZwe0zVzhBB5h1Wv23nxeXzwIucMeWDxLKaJbSfP0koRzTFt3h+8wephXF -wx/sZW5GcHjIdfxQmx7Lmci1bC2HXFDiAYtbD6N4YG62QlolM4MPVf0h1kkBVhXU -mh0J6VEPXwADBQQA0L2t5AQydYZ1yH0HMMNgmBRnuuG+tswQWjwfNmv9vqEuN4RW -UTI4uK1BTlKiqWYdHfHba7XzP2kGFmEHVWyBMiQzCzCTLbfIzIIlZy164kryRpdQ -5Tm2YepkddLgPNjTg43EqKxK/SE1Nv4+luydCuplFktXbgGzeo3KifKyV9CIRgQY -EQIABgUCPErFbwAKCRC9VyzczMB8NXVmAJ9gHh+Z4LB8d+Z/Puyh4Z+UY9NzZwCf -asaetBGab/v0SefRVNguBdQIYds= -=GwWK ------END PGP PUBLIC KEY BLOCK----- diff --git a/guile/tests/openpgp-elg-sec.asc b/guile/tests/openpgp-elg-sec.asc deleted file mode 100644 index 58bafeea47..0000000000 --- a/guile/tests/openpgp-elg-sec.asc +++ /dev/null @@ -1,32 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- - -lQG7BDxKxWwRBADnLna2Lu+po71ZQJMpJBgFDALXAp1sogZu/DTIYDhifGQ+saZS -p68dN89G/FBaweDGmbN4lbS8s+U1Qf/aR2bWFowriq/WqyJGbQbRgDTV2saY5pk7 -pbNQ/4IuHNhwKnURTotzprCcs7k85E27UWybtflbtmYYhgKgoURyNsBljwCgj1te -eNhfeSzCBy+UdGRXJvtNk3MD/jV41onWYG6RGOn5pwQrljzyPz2PE3eic8Dwl02/ -RLPKvL4U3WRBJVWGPjmpxidmLXesNmYq5El5LDJi0/EumDKnVlMJ1nugrk3yX17a -CTcFatW+ifQGnr1+x2zkMkQd9dUv/9BtOeX2HjaUe2mKd8tiq4HkpBIr+QUGcdmU -bIZeBADQYUN6lk3eMYgYwrJN4AjmAJa2DbimhLhag40Rn8kwMRiJrVejuSf0SPhO -slPGI+2nO0L/eLzmOmpTHXWmTOhUBROAjp9bEM4HXTQXuAEWSRixMdNUTIdlqOy5 -lx9hoJ/HPVCYBhBrWXfSEcsOHQTQ7Za86Juuj3PYALBSE5y/jQAAn2P+O9oRyd/b -1jXd4F2H8SSzMMu3DM/9JiM6RFNBX2ZhY3RvcjoAAK9+8VCrUSp2tkcQT5PxLJzr -ENoOP4NB/SYjOkRTQV9mYWN0b3I6AACvTy8J9Y0wrRLLV4I96AjHaNfLwQp9E/0m -IzpEU0FfZmFjdG9yOgAAr2T4CrVVKLaOwyIga909v8jvsToXmxu0SU9wZW5DREsg -dGVzdCBrZXkgKE9ubHkgaW50ZW5kZWQgZm9yIHRlc3QgcHVycG9zZXMhKSA8b3Bl -bmNka0Bmb28tYmFyLm9yZz6IWgQTEQIAGgUCPErFbAULBwoDBAMVAwIDFgIBAh4B -AheAAAoJEL1XLNzMwHw1gcEAmQGbWA2HMKJfa1qvFUwrpVK9zdHtAJ9HHAujC4X+ -0AnRZNUKFdC94Ct+r50BMgQ8SsVvEAQA4gFWUmBp0GfST01x5tOGWOCL478kbBrc -4I22nNjUWcHtM1c4QQeYdVr9t58Xl88CLnDHlg8SymiW0nz9JKEc0xbd4fvMHqYV -xcMf7GVuRnB4yHX8UJsey5nItWwth1xQ4gGLWw+jeGButkJaJTODD1X9IdZJAVYV -1JodCelRD18AAwUEANC9reQEMnWGdch9BzDDYJgUZ7rhvrbMEFo8HzZr/b6hLjeE -VlEyOLitQU5SoqlmHR3x22u18z9pBhZhB1VsgTIkMwswky23yMyCJWcteuJK8kaX -UOU5tmHqZHXS4DzY04ONxKisSv0hNTb+PpbsnQrqZRZLV24Bs3qNyonyslfQAAD6 -AqTLHwdVk3VLPMjSKNONdwwYPDTowJ5cHw5Uc2vRRG0OJf0mIzpFTEdfZmFjdG9y -OgAAqwRFtBcGdsy2AtBSxX4HPMvtBiODIhf9JiM6RUxHX2ZhY3RvcjoAAKsFn0GK -Y7/TzpNP3IdTXmkQfUXC+YpP/SYjOkVMR19mYWN0b3I6AACrBV0wh13upAu9+4N1 -rXOuK6EkJ4T1//0mIzpFTEdfZmFjdG9yOgAAqwbJVCRiM/nb341fujR8AELlrBOb -Lqv9JiM6RUxHX2ZhY3RvcjoAAKsGhKSsyEs0Yrs4YvI0CBiIZn1b2G9LiEYEGBEC -AAYFAjxKxW8ACgkQvVcs3MzAfDV1ZgCeLovqxqOYaIfjREbT8e9+2jy1D20An268 -JJzFTBkCFFN0YlBK57y6qjf0 -=0tJj ------END PGP PRIVATE KEY BLOCK----- diff --git a/guile/tests/openpgp-keyring.asc b/guile/tests/openpgp-keyring.asc deleted file mode 100644 index 4495a5a8e3..0000000000 --- a/guile/tests/openpgp-keyring.asc +++ /dev/null @@ -1,37 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.6 (GNU/Linux) - -mQGiBDxnlY0RBACAsWUhi/goBvpvTBgL8fFPwBAuD04VYFEtC7+4pBp6kFsHjUR7 -TTUkBsOk2PvMHrDdv0+C4x2CH8YGP1e+O0f2yLWk8Uu+kkF12yiqbbvDEiCdeJT6 -c3vIstY8vJ9Jso5g/LB8Xggq88R7jXFS3hH+WC5v/6P6SARfzXl457cVewCgvxSf -Gsm9mFospJ0B3RGyg5MB0d8D/RQQryJCGdR2nLe4VfctPL2QBD/1XhtubqEbetaV -PxssqrJdA+eplBRT7UHokSBahM8gmSmNuSrLDujPfEtaMg6YIkB+Kq0VeJLE0cXT -ZIH29KJlI/qk1xG4K7D6B0cKaHC/L4BIoKcQLJzfTIPw3frS4jVeNaQZNHSVqZ8/ -VmOMA/9rkNtccQ4RVd9WTFoHKvT4vfiISEOIzKGmcBY9Hymq7MCci3mNe4CDImkv -ZgnjDlJAM91CX1ODthPLBqvyhnMhhxDnaDl4Nh42uPMSr9JEW2IwoIbFne10ihGT -O4lBS1C28UfSGEMm/8JBMtxAjbYy3BYzUtCMA+bGBG6Voe5i5LQlRHIuIFdobyAo -Tm8gY29tbWVudHMpIDx3aG9Ad2hvaXMub3JnPohdBBMRAgAdBQI8Z5WNBQkDwmcA -BQsHCgMEAxUDAgMWAgECF4AACgkQNRRc6qfZPD+WWACfeJnLyfbpTDB7mDh3aATb -+0PXz28AoKRdApBVM6Bty+vWyXH6HfF6ZTj+mQGiBDxKxWwRBADnLna2Lu+po71Z -QJMpJBgFDALXAp1sogZu/DTIYDhifGQ+saZSp68dN89G/FBaweDGmbN4lbS8s+U1 -Qf/aR2bWFowriq/WqyJGbQbRgDTV2saY5pk7pbNQ/4IuHNhwKnURTotzprCcs7k8 -5E27UWybtflbtmYYhgKgoURyNsBljwCgj1teeNhfeSzCBy+UdGRXJvtNk3MD/jV4 -1onWYG6RGOn5pwQrljzyPz2PE3eic8Dwl02/RLPKvL4U3WRBJVWGPjmpxidmLXes -NmYq5El5LDJi0/EumDKnVlMJ1nugrk3yX17aCTcFatW+ifQGnr1+x2zkMkQd9dUv -/9BtOeX2HjaUe2mKd8tiq4HkpBIr+QUGcdmUbIZeBADQYUN6lk3eMYgYwrJN4Ajm -AJa2DbimhLhag40Rn8kwMRiJrVejuSf0SPhOslPGI+2nO0L/eLzmOmpTHXWmTOhU -BROAjp9bEM4HXTQXuAEWSRixMdNUTIdlqOy5lx9hoJ/HPVCYBhBrWXfSEcsOHQTQ -7Za86Juuj3PYALBSE5y/jbRJT3BlbkNESyB0ZXN0IGtleSAoT25seSBpbnRlbmRl -ZCBmb3IgdGVzdCBwdXJwb3NlcyEpIDxvcGVuY2RrQGZvby1iYXIub3JnPohiBBMR -AgAaBQI8SsVsBQsHCgMEAxUDAgMWAgECHgECF4AAEgkQvVcs3MzAfDUHZUdQRwAB -AYHBAJwOEo2O1ER8bcvOYVDZzYbiDYRZpQCfZoFmLIDGqs8dLSvCBPCC/oDT26S5 -AQ0EPErFbxAEAOIBVlJgadBn0k9NcebThljgi+O/JGwa3OCNtpzY1FnB7TNXOEEH -mHVa/befF5fPAi5wx5YPEspoltJ8/SShHNMW3eH7zB6mFcXDH+xlbkZweMh1/FCb -HsuZyLVsLYdcUOIBi1sPo3hgbrZCWiUzgw9V/SHWSQFWFdSaHQnpUQ9fAAMFBADQ -va3kBDJ1hnXIfQcww2CYFGe64b62zBBaPB82a/2+oS43hFZRMji4rUFOUqKpZh0d -8dtrtfM/aQYWYQdVbIEyJDMLMJMtt8jMgiVnLXriSvJGl1DlObZh6mR10uA82NOD -jcSorEr9ITU2/j6W7J0K6mUWS1duAbN6jcqJ8rJX0IhOBBgRAgAGBQI8SsVvABIJ -EL1XLNzMwHw1B2VHUEcAAQF1ZgCfYB4fmeCwfHfmfz7soeGflGPTc2cAn2rGnrQR -mm/79Enn0VTYLgXUCGHb -=7B/E ------END PGP PUBLIC KEY BLOCK----- diff --git a/guile/tests/openpgp-keyring.gpg b/guile/tests/openpgp-keyring.gpg deleted file mode 100644 index f78440407b..0000000000 Binary files a/guile/tests/openpgp-keyring.gpg and /dev/null differ diff --git a/guile/tests/openpgp-keyring.scm b/guile/tests/openpgp-keyring.scm deleted file mode 100644 index 957b952651..0000000000 --- a/guile/tests/openpgp-keyring.scm +++ /dev/null @@ -1,71 +0,0 @@ -;;; GnuTLS-extra --- Guile bindings for GnuTLS-EXTRA. -;;; Copyright (C) 2007-2012, 2014 Free Software Foundation, Inc. -;;; -;;; GnuTLS-extra is free software; you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; GnuTLS-extra is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GnuTLS-EXTRA; if not, write to the Free Software -;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -;;; USA. - -;;; Written by Ludovic Courts . - - -;;; -;;; Exercise the OpenPGP keyring API part of GnuTLS-extra. -;;; - -(use-modules (gnutls) - (gnutls build tests) - (srfi srfi-1) - (srfi srfi-4)) - -(define %raw-keyring-file - (search-path %load-path "openpgp-keyring.gpg")) - -(define %ascii-keyring-file - (search-path %load-path "openpgp-keyring.asc")) - -(define %ids-in-keyring - ;; The IDs of keys that are in the keyring. - ;; Change me if you change the keyring file. - (list '#u8(#x35 #x14 #x5c #xea - #xa7 #xd9 #x3c #x3f) - '#u8(#xbd #x57 #x2c #xdc - #xcc #xc0 #x7c #x35))) - -(define (file-size file) - (stat:size (stat file))) - -(define (valid-keyring? file format) - ;; Return true if FILE contains a valid keyring encoded in FORMAT. - (let ((raw-keyring (make-u8vector (file-size file)))) - - (uniform-vector-read! raw-keyring (open-file file "rb")) - - (let ((keyring (import-openpgp-keyring raw-keyring format)) - (null-id (make-u8vector 8 0))) - - (and (openpgp-keyring? keyring) - (not (openpgp-keyring-contains-key-id? keyring null-id)) - (every (lambda (id) - (openpgp-keyring-contains-key-id? keyring id)) - %ids-in-keyring))))) - -(run-test - (lambda () - (every valid-keyring? - (list %raw-keyring-file - %ascii-keyring-file) - (list openpgp-certificate-format/raw - openpgp-certificate-format/base64)))) - -;;; arch-tag: 516bf608-5c8b-4787-abe9-5f7b6e6d660b diff --git a/guile/tests/openpgp-keys.scm b/guile/tests/openpgp-keys.scm deleted file mode 100644 index a7ca0f193a..0000000000 --- a/guile/tests/openpgp-keys.scm +++ /dev/null @@ -1,71 +0,0 @@ -;;; GnuTLS-extra --- Guile bindings for GnuTLS-EXTRA. -;;; Copyright (C) 2007-2012 Free Software Foundation, Inc. -;;; -;;; GnuTLS-extra is free software; you can redistribute it and/or modify -;;; it under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or -;;; (at your option) any later version. -;;; -;;; GnuTLS-extra is distributed in the hope that it will be useful, -;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GnuTLS-EXTRA; if not, write to the Free Software -;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -;;; USA. - -;;; Written by Ludovic Courts . - - -;;; -;;; Exercise the OpenPGP key API part of GnuTLS-extra. -;;; - -(use-modules (gnutls) - (gnutls build tests) - (srfi srfi-1) - (srfi srfi-4) - (srfi srfi-11)) - -(define %certificate-file - (search-path %load-path "openpgp-elg-pub.asc")) - -(define %private-key-file - (search-path %load-path "openpgp-elg-sec.asc")) - -(define %key-id - ;; Change me if you change the key files. - '#u8(#xbd #x57 #x2c #xdc #xcc #xc0 #x7c #x35)) - -(define (file-size file) - (stat:size (stat file))) - - -(run-test - (lambda () - (let ((raw-pubkey (make-u8vector (file-size %certificate-file))) - (raw-privkey (make-u8vector (file-size %private-key-file)))) - - (uniform-vector-read! raw-pubkey (open-input-file %certificate-file)) - (uniform-vector-read! raw-privkey (open-input-file %private-key-file)) - - (let ((pub (import-openpgp-certificate raw-pubkey - openpgp-certificate-format/base64)) - (sec (import-openpgp-private-key raw-privkey - openpgp-certificate-format/base64))) - - (and (openpgp-certificate? pub) - (openpgp-private-key? sec) - (equal? (openpgp-certificate-id pub) %key-id) - (u8vector? (openpgp-certificate-fingerprint pub)) - (every string? (openpgp-certificate-names pub)) - (member (openpgp-certificate-version pub) '(3 4)) - (list? (openpgp-certificate-usage pub)) - (let-values (((pk bits) - (openpgp-certificate-algorithm pub))) - (and (string? (pk-algorithm->string pk)) - (number? bits)))))))) - -;;; arch-tag: 2ee2a377-7f4d-4031-92a8-275090e4f83d diff --git a/guile/tests/openpgp-pub.asc b/guile/tests/openpgp-pub.asc deleted file mode 100644 index 4aa5cf921d..0000000000 --- a/guile/tests/openpgp-pub.asc +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.10 (GNU/Linux) -Comment: Test key for GnuTLS - -mI0ETYD2OQEEAMHmDBtJii82NbWuYcvEWCYnwa7GTcz2PYikYCcq/t5nkyb5Bfmx -mh2hpto7Lr5d1L/shvab1gXCcrWEAREgNNk9LiowtLuTHBdeOFlJ1u1P1rvdFVKq -2a6ft77Q5VltUDKPgTqz4NWH2KUlLfTvwJDnq2DxYsbwVpBDURuUocXhABEBAAG0 -CVRlc3QgdXNlcoi4BBMBAgAiBQJNgPY5AhsvBgsJCAcDAgYVCAIJCgsEFgIDAQIe -AQIXgAAKCRAMTrFUBnAKMOVDA/9GEw7AokwJSGvHREriXcvMMKp6c6SYqa0TVsTg -Gh3ENu/KTfGJIM5p+zR6xy+5u5DfP5qLrRdCnoczncR5w9fn3RsP8ju/Ga5z23Q+ -6XxRKRkXjE/E0ZFulbuaBom/nhrOmmfqKe7Mor9Y4QwzL2wL3sf6jWLglwdFYS/X -W3wqjLkBogRNgPY5EQQApafdUhCAHj8LLXYCqOXRSPZbKzvB55NwWrdvnod0seUW -aiTSWBlKnSvIomdcII/E3bjdngK4fTJ+Xr5pEJuzBnW3w787r6jBJSq2Lp0T9SP4 -CBzd0gXcOQkILvX1VzxAsYVULJA0mhAR3IHFcywjX6ENKuvs7ApniBNoXqi6d3cA -oIAzYKrjyZ+guM4IUlRRrB8abx5vBACJPV+d15GYgzt1d8zLvOl/mzs85Twj2SB1 -ZqzK6H/6QxQkEZpP/UVFpXaUGUly3nGEqg1yw4cgqW4SSxgLFz6B23Si+cTsssE6 -CYziN1UI6NjxkoG/npMm0wRp7Z+KylEolAdbFBAAprORkt58CrGgpYe8O/35+PWc -J9rjhwxxkQP/VCpbZLugkL4XHWGWFGG35S6k9F3xPPTPoX9Zoud+0bOeoOK5RQHo -e99sVNN4hxxPTM/rJXfTTZUoB6o84yulTSxb6C9ueHotDV0eB9QX1ov/ltmwy3XS -fXEyWtI0CDBuZgEww26Up0pzg4XTBYMkmXrxx3J9ihcCIYyAHoE13EWI5wQYAQIA -CQUCTYD2OQIbIgBSCRAMTrFUBnAKMEcgBBkRAgAGBQJNgPY5AAoJEPMP1CPBQ+e6 -3fQAnR7HWLnQTbxCIhlBTZiuJv2HC6cbAJwJ6VsSU6ADCkMuGT3LLNo+UnckK+4i -BACcivWsW40ddtEQ0wno1uP65TmKq3aJrdODXTAnqkmNQKL7X7Fz+nmEWiS+LBH8 -lRvAaeRPX2LV+DCJDbAPrYd7LkOHyuM0I+ZApto5cjem/EnO7op2QwkCCa6oUp0l -YA6i6aGF2KGx7WQwi2URIMPhihpOvAbkjfszYpFL4VP5wQ== -=ydIq ------END PGP PUBLIC KEY BLOCK----- diff --git a/guile/tests/openpgp-sec.asc b/guile/tests/openpgp-sec.asc deleted file mode 100644 index 886ba3453c..0000000000 --- a/guile/tests/openpgp-sec.asc +++ /dev/null @@ -1,35 +0,0 @@ ------BEGIN PGP PRIVATE KEY BLOCK----- -Version: GnuPG v1.4.10 (GNU/Linux) -Comment: Test key for GnuTLS - -lQHYBE2A9jkBBADB5gwbSYovNjW1rmHLxFgmJ8Guxk3M9j2IpGAnKv7eZ5Mm+QX5 -sZodoabaOy6+XdS/7Ib2m9YFwnK1hAERIDTZPS4qMLS7kxwXXjhZSdbtT9a73RVS -qtmun7e+0OVZbVAyj4E6s+DVh9ilJS3078CQ56tg8WLG8FaQQ1EblKHF4QARAQAB -AAP9HJePsXZmqg+UW/Ya9bE+TmIObXdQgajN6hhTFXOBocokKNsPxoIp97Sepg+U -FP5BIQv/2t2f8bl6sMmGXsAhCqVzRxGuA+9USx8OfTHSdgIKT5T2VFSGJaU4df3Q -rstUY3dcvl6VKpDDZic1T7u2ANzaWM2u+pwooKC4cc/k9AECAMNDvrKF3FC7R9sd -TagVrrfde0RZuwhbGW9ghslkY893EelXQL/lbBI20crPdrsdDpMe370KO2bQLqwO -HGAxIYUCAP41iC7KReYvysLZ34tM55ZFE7BPsMcXUeu6hkYOMDZYvE+x4KV6Umo+ -Civd4qD9dESR3WOcI9MwALUdNTxQU60B/21MrWjajY1m1vv7l2slJon5eSrH6BkH -Aj173uZca8HbgqSF1xOQW8ZGa6KInN3wHe+vPOXAgzlku/4XHgEYVVGeq7QJVGVz -dCB1c2VyiLgEEwECACIFAk2A9jkCGy8GCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheA -AAoJEAxOsVQGcAow5UMD/0YTDsCiTAlIa8dESuJdy8wwqnpzpJiprRNWxOAaHcQ2 -78pN8Ykgzmn7NHrHL7m7kN8/moutF0KehzOdxHnD1+fdGw/yO78ZrnPbdD7pfFEp -GReMT8TRkW6Vu5oGib+eGs6aZ+op7syiv1jhDDMvbAvex/qNYuCXB0VhL9dbfCqM -nQG7BE2A9jkRBAClp91SEIAePwstdgKo5dFI9lsrO8Hnk3Bat2+eh3Sx5RZqJNJY -GUqdK8iiZ1wgj8TduN2eArh9Mn5evmkQm7MGdbfDvzuvqMElKrYunRP1I/gIHN3S -Bdw5CQgu9fVXPECxhVQskDSaEBHcgcVzLCNfoQ0q6+zsCmeIE2heqLp3dwCggDNg -quPJn6C4zghSVFGsHxpvHm8EAIk9X53XkZiDO3V3zMu86X+bOzzlPCPZIHVmrMro -f/pDFCQRmk/9RUWldpQZSXLecYSqDXLDhyCpbhJLGAsXPoHbdKL5xOyywToJjOI3 -VQjo2PGSgb+ekybTBGntn4rKUSiUB1sUEACms5GS3nwKsaClh7w7/fn49Zwn2uOH -DHGRA/9UKltku6CQvhcdYZYUYbflLqT0XfE89M+hf1mi537Rs56g4rlFAeh732xU -03iHHE9Mz+sld9NNlSgHqjzjK6VNLFvoL254ei0NXR4H1BfWi/+W2bDLddJ9cTJa -0jQIMG5mATDDbpSnSnODhdMFgySZevHHcn2KFwIhjIAegTXcRQAAn2PK9kOqhjOJ -KU5iaagnF176FwhdCO2I5wQYAQIACQUCTYD2OQIbIgBSCRAMTrFUBnAKMEcgBBkR -AgAGBQJNgPY5AAoJEPMP1CPBQ+e63fQAniK5kU+dwIbkD+OHJHkC73V6v4D8AJ0Z -+GBYj4nhKEX21QXfj55F3Zpg1e4iBACcivWsW40ddtEQ0wno1uP65TmKq3aJrdOD -XTAnqkmNQKL7X7Fz+nmEWiS+LBH8lRvAaeRPX2LV+DCJDbAPrYd7LkOHyuM0I+ZA -pto5cjem/EnO7op2QwkCCa6oUp0lYA6i6aGF2KGx7WQwi2URIMPhihpOvAbkjfsz -YpFL4VP5wQ== -=zzoN ------END PGP PRIVATE KEY BLOCK----- diff --git a/guile/tests/priorities.scm b/guile/tests/priorities.scm index a96cffda9c..6e837294de 100644 --- a/guile/tests/priorities.scm +++ b/guile/tests/priorities.scm @@ -30,17 +30,17 @@ (define %valid-priority-strings ;; Valid priority strings (from the manual). - '("NONE:+VERS-TLS-ALL:+MAC-ALL:+RSA:+AES-128-CBC:+SIGN-ALL:+COMP-NULL" + '("NONE:+VERS-TLS1.2:+MAC-ALL:+RSA:+AES-128-CBC:+SIGN-ALL:+COMP-NULL" "NORMAL:-ARCFOUR-128" "SECURE128:-VERS-SSL3.0:+COMP-NULL" - "NONE:+VERS-TLS-ALL:+AES-128-CBC:+RSA:+SHA1:+COMP-NULL:+SIGN-RSA-SHA1")) + "NONE:+VERS-TLS1.2:+AES-128-CBC:+RSA:+SHA1:+COMP-NULL:+SIGN-RSA-SHA1")) (define %invalid-priority-strings ;; Invalid strings: the prefix and the suffix that leads to a parse error. '(("" . "THIS-DOES-NOT-WORK") ("NORMAL:" . "FAIL-HERE") ("SECURE128:-VERS-SSL3.0:" . "+FAIL-HERE") - ("NONE:+VERS-TLS-ALL:+AES-128-CBC:" + ("NONE:+VERS-TLS1.2:+AES-128-CBC:" . "+FAIL-HERE:+SHA1:+COMP-NULL:+SIGN-RSA-SHA1"))) (run-test diff --git a/guile/tests/reauth.scm b/guile/tests/reauth.scm new file mode 100644 index 0000000000..0f768e514e --- /dev/null +++ b/guile/tests/reauth.scm @@ -0,0 +1,121 @@ +;;; GnuTLS --- Guile bindings for GnuTLS. +;;; Copyright (C) 2019 Free Software Foundation, Inc. +;;; +;;; GnuTLS is free software; you can redistribute it and/or +;;; modify it under the terms of the GNU Lesser General Public +;;; License as published by the Free Software Foundation; either +;;; version 2.1 of the License, or (at your option) any later version. +;;; +;;; GnuTLS is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; Lesser General Public License for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License along with GnuTLS; if not, write to the Free Software +;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +;;; Written by Ludovic Courtès . + + +;;; +;;; Test TLS 1.3 re-authentication requests. +;;; + +(use-modules (gnutls) + (gnutls build tests) + (srfi srfi-4)) + + +;; TLS session settings. +(define priorities + "NORMAL:+VERS-TLS1.3") + +;; Message sent by the client. +(define %message + (cons "hello, world!" (iota 4444))) + +(define (import-something import-proc file fmt) + (let* ((path (search-path %load-path file)) + (size (stat:size (stat path))) + (raw (make-u8vector size))) + (uniform-vector-read! raw (open-input-file path)) + (import-proc raw fmt))) + +(define (import-key import-proc file) + (import-something import-proc file x509-certificate-format/pem)) + +(define (import-dh-params file) + (import-something pkcs3-import-dh-parameters file + x509-certificate-format/pem)) + +;; Debugging. +;; (set-log-level! 5) +;; (set-log-procedure! (lambda (level str) +;; (format #t "[~a|~a] ~a" (getpid) level str))) + +(run-test + (lambda () + (let ((socket-pair (socketpair PF_UNIX SOCK_STREAM 0)) + (pub (import-key import-x509-certificate + "x509-certificate.pem")) + (sec (import-key import-x509-private-key + "x509-key.pem"))) + (with-child-process pid + + ;; server-side + (let ((server (make-session connection-end/server + connection-flag/post-handshake-auth)) + (dh (import-dh-params "dh-parameters.pem"))) + (set-session-priorities! server "NORMAL:+VERS-TLS1.3") + (set-session-transport-fd! server (port->fdes (cdr socket-pair))) + (let ((cred (make-certificate-credentials)) + (trust-file (search-path %load-path + "x509-certificate.pem")) + (trust-fmt x509-certificate-format/pem)) + (set-certificate-credentials-dh-parameters! cred dh) + (set-certificate-credentials-x509-keys! cred (list pub) sec) + (set-certificate-credentials-x509-trust-file! cred + trust-file + trust-fmt) + (set-session-credentials! server cred)) + + (handshake server) + (let ((msg (read (session-record-port server))) + (auth-type (session-authentication-type server))) + (set-server-session-certificate-request! server + certificate-request/request) + + ;; Request a post-handshake reauthentication. + (reauthenticate server) + + (write msg (session-record-port server)) + (bye server close-request/rdwr) + (and (zero? (cdr (waitpid pid))) + (eq? auth-type credentials/certificate) + (equal? msg %message)))) + + ;; client-side (child process) + (let ((client (make-session connection-end/client + connection-flag/post-handshake-auth + connection-flag/auto-reauth)) + (cred (make-certificate-credentials))) + (set-session-priorities! client + "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.0") + (set-certificate-credentials-x509-keys! cred (list pub) sec) + (set-session-credentials! client cred) + + (set-session-transport-fd! client (port->fdes (car socket-pair))) + + (handshake client) + (write %message (session-record-port client)) + + ;; In the middle of the 'read' call, we receive a post-handshake + ;; reauthentication request that should be automatically handled, + ;; thanks to CONNECTION-FLAG/AUTO-REAUTH. + (let ((msg (read (session-record-port client)))) + (unless (equal? msg %message) + (error "wrong message" msg))) + (bye client close-request/rdwr) + + (primitive-exit)))))) diff --git a/guile/tests/session-record-port.scm b/guile/tests/session-record-port.scm index 8764d43655..0b8ca9d47a 100644 --- a/guile/tests/session-record-port.scm +++ b/guile/tests/session-record-port.scm @@ -29,7 +29,7 @@ ;; TLS session settings. (define priorities - "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH") + "NONE:+VERS-TLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH") ;; Message sent by the client. (define %message (apply u8vector (iota 256))) diff --git a/lib/Makefile.am b/lib/Makefile.am index 8a54d54c51..f55f298f7b 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -16,11 +16,11 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see ACLOCAL_AMFLAGS = -I ../m4 -I ../gl/m4 -EXTRA_DIST = priority_options.gperf common.mk +EXTRA_DIST = priority_options.gperf common.mk inih/LICENSE.txt BUILT_SOURCES = pkix_asn1_tab.c gnutls_asn1_tab.c priority_options.h SUBDIRS = includes x509 auth ext algorithms extras accelerated @@ -45,12 +45,6 @@ AM_CPPFLAGS = \ $(LIBTASN1_CFLAGS) \ $(P11_KIT_CFLAGS) -if ENABLE_OPENPGP -SUBDIRS += opencdk -SUBDIRS += openpgp -AM_CPPFLAGS += -I$(srcdir)/opencdk -endif - if !HAVE_LIBUNISTRING SUBDIRS += unistring AM_CPPFLAGS += -I$(srcdir)/unistring/ -I$(builddir)/unistring/ @@ -71,21 +65,27 @@ SRP_COBJECTS = srp.c PSK_COBJECTS = psk.c -COBJECTS = range.c record.c compress.c debug.c cipher.c \ - mbuffers.c buffers.c handshake.c num.c errors.c dh.c kx.c \ +COBJECTS = range.c record.c compress.c debug.c cipher.c gthreads.h handshake-tls13.c \ + mbuffers.c buffers.c handshake.c errors.c dh.c kx.c cipher-cbc.c \ priority.c hash_int.c cipher_int.c session.c db.c x509_b64.c \ - extensions.c auth.c sslv2_compat.c datum.c session_pack.c mpi.c \ - pk.c cert.c global.c constate.c anon_cred.c pkix_asn1_tab.c gnutls_asn1_tab.c \ - mem.c fingerprint.c tls-sig.c ecc.c alert.c privkey_raw.c \ + hello_ext.c auth.c sslv2_compat.c datum.c session_pack.c mpi.c \ + pk.c cert-cred.c global.c constate.c anon_cred.c pkix_asn1_tab.c gnutls_asn1_tab.c \ + mem.c fingerprint.c tls-sig.c ecc.c alert.c privkey_raw.c atomic.h \ system/certs.c system/threads.c system/fastopen.c system/sockets.c \ - system/inet_ntop.c str-iconv.c system/vasprintf.c vasprintf.h system.c \ - str.c str-unicode.c str-idna.c state.c x509.c file.c supplemental.c \ - random.c crypto-api.c privkey.c pcert.c pubkey.c locks.c dtls.c \ + str-iconv.c system.c profiles.c profiles.h inih/ini.c \ + str.c str-unicode.c str-idna.c state.c cert-cred-x509.c file.c supplemental.c \ + random.c crypto-api.c crypto-api.h privkey.c pcert.c pubkey.c locks.c dtls.c \ system_override.c crypto-backend.c verify-tofu.c pin.c tpm.c fips.c \ - safe-memfuncs.c system/inet_pton.c atfork.c atfork.h randomart.c \ + safe-memfuncs.c atfork.c atfork.h randomart.c name_val_array.h \ system-keys.h urls.c urls.h prf.c auto-verify.c dh-session.c \ cert-session.c handshake-checks.c dtls-sw.c dh-primes.c openpgp_compat.c \ - crypto-selftests.c crypto-selftests-pk.c + crypto-selftests.c crypto-selftests-pk.c secrets.c extv.c extv.h \ + hello_ext_lib.c hello_ext_lib.h ocsp-api.c stek.c cert-cred-rawpk.c \ + iov.c iov.h + +if ENABLE_GOST +COBJECTS += vko.c +endif if WINDOWS COBJECTS += system/keys-win.c @@ -93,6 +93,19 @@ else COBJECTS += system/keys-dummy.c endif +COBJECTS += tls13/encrypted_extensions.c tls13/encrypted_extensions.h \ + tls13/certificate_request.c tls13/certificate_request.h \ + tls13/certificate_verify.c tls13/certificate_verify.h \ + tls13-sig.c tls13-sig.h \ + tls13/finished.c tls13/finished.h \ + tls13/key_update.c tls13/key_update.h \ + tls13/hello_retry.c tls13/hello_retry.h \ + tls13/session_ticket.c tls13/session_ticket.h \ + tls13/certificate.c tls13/certificate.h \ + tls13/early_data.c tls13/early_data.h \ + tls13/post_handshake.c \ + tls13/psk_ext_parser.c tls13/psk_ext_parser.h \ + tls13/anti_replay.c tls13/anti_replay.h if ENABLE_PKCS11 COBJECTS += pkcs11.c pkcs11x.c pkcs11_privkey.c pkcs11_write.c pkcs11_secret.c \ @@ -103,25 +116,29 @@ if ENABLE_NETTLE SUBDIRS += nettle endif -HFILES = abstract_int.h debug.h compress.h cipher.h \ - buffers.h errors.h gnutls_int.h dtls.h \ - handshake.h num.h algorithms.h \ - dh.h kx.h hash_int.h cipher_int.h \ - db.h auth.h extensions.h \ +HFILES = abstract_int.h debug.h cipher.h \ + buffers.h errors.h gnutls_int.h dtls.h \ + handshake.h num.h algorithms.h \ + dh.h kx.h hash_int.h cipher_int.h \ + db.h auth.h hello_ext.h handshake-defs.h \ x509_b64.h sslv2_compat.h datum.h \ - mpi.h pk.h record.h \ + mpi.h pk.h record.h inih/ini.h \ constate.h global.h tls-sig.h mem.h \ session_pack.h str.h str_array.h \ state.h x509.h crypto-backend.h \ srp.h auth/srp_kx.h auth/srp_passwd.h \ file.h supplemental.h crypto.h random.h system.h\ locks.h mbuffers.h ecc.h pin.h fips.h \ - priority_options.h + priority_options.h secrets.h stek.h cert-cred.h if ENABLE_PKCS11 HFILES += pkcs11_int.h pkcs11x.h endif +if ENABLE_GOST +HFILES += vko.h +endif + libgnutls_la_SOURCES = $(HFILES) $(COBJECTS) $(SRP_COBJECTS) \ $(PSK_COBJECTS) \ gnutls.asn pkix.asn libgnutls.map @@ -134,14 +151,14 @@ libgnutls_la_LIBADD = ../gl/libgnu.la x509/libgnutls_x509.la \ auth/libgnutls_auth.la algorithms/libgnutls_alg.la \ extras/libgnutls_extras.la thirdparty_libadd = $(LTLIBZ) $(LTLIBINTL) $(LIBSOCKET) $(LTLIBNSL) \ - $(P11_KIT_LIBS) $(LIB_SELECT) + $(P11_KIT_LIBS) $(LIB_SELECT) $(LIB_CRYPT32) if HAVE_LIBIDN2 thirdparty_libadd += $(LIBIDN2_LIBS) endif if HAVE_LIBUNISTRING -thirdparty_libadd += $(LTLIBUNISTRING) +thirdparty_libadd += $(LIBUNISTRING) else libgnutls_la_LIBADD += unistring/libunistring.la endif @@ -166,11 +183,6 @@ if ENABLE_TROUSERS thirdparty_libadd += $(LTLIBDL) endif -if ENABLE_OPENPGP -libgnutls_la_LIBADD += openpgp/libgnutls_openpgp.la -libgnutls_la_LIBADD += opencdk/libminiopencdk.la -endif - if HAVE_LD_VERSION_SCRIPT libgnutls_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libgnutls.map else @@ -196,10 +208,6 @@ defexec_DATA = libgnutls-$(DLL_VERSION).def DISTCLEANFILES += $(defexec_DATA) endif -if WINDOWS -thirdparty_libadd += -lcrypt32 -endif - if MACOSX libgnutls_la_LDFLAGS += -framework Security -framework CoreFoundation endif @@ -213,7 +221,7 @@ libgnutlsxx_la_CPPFLAGS = -I$(top_srcdir)/includes -I$(top_builddir)/includes -I AM_CXXFLAGS = \ -I$(srcdir)/includes \ - -I$(builddir)/includes + -I$(builddir)/includes lib_LTLIBRARIES += libgnutlsxx.la @@ -233,6 +241,6 @@ gnutls_asn1_tab.c: $(srcdir)/gnutls.asn -asn1Parser $(srcdir)/gnutls.asn gnutls_asn1_tab.c priority_options.h: $(srcdir)/priority_options.gperf - -gperf --global-table -t $^ > $@-tmp && mv $@-tmp $@ - - + -gperf --global-table -t $^ > $@-tmp \ + && sed 's/^const struct priority_options_st \*/static const struct priority_options_st \*/' <$@-tmp >$@ \ + && rm -f $@-tmp diff --git a/lib/abstract_int.h b/lib/abstract_int.h index 3693d00074..8f436b0a9f 100644 --- a/lib/abstract_int.h +++ b/lib/abstract_int.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef _ABSTRACT_INT_H -#define _ABSTRACT_INT_H +#ifndef GNUTLS_LIB_ABSTRACT_INT_H +#define GNUTLS_LIB_ABSTRACT_INT_H #include @@ -33,26 +33,25 @@ struct gnutls_privkey_st { gnutls_x509_privkey_t x509; #ifdef ENABLE_PKCS11 gnutls_pkcs11_privkey_t pkcs11; -#endif -#ifdef ENABLE_OPENPGP - gnutls_openpgp_privkey_t openpgp; #endif struct { - gnutls_privkey_sign_func sign_func; + gnutls_privkey_sign_func sign_func; /* raw like TLS 1.x */ + gnutls_privkey_sign_data_func sign_data_func; + gnutls_privkey_sign_hash_func sign_hash_func; gnutls_privkey_decrypt_func decrypt_func; + gnutls_privkey_decrypt_func2 decrypt_func2; gnutls_privkey_deinit_func deinit_func; gnutls_privkey_info_func info_func; void *userdata; + unsigned bits; } ext; } key; unsigned int flags; - gnutls_sign_algorithm_t preferred_sign_algo; struct pin_info_st pin; }; struct gnutls_pubkey_st { - gnutls_pk_algorithm_t pk_algorithm; unsigned int bits; /* an indication of the security parameter */ /* the size of params depends on the public @@ -66,14 +65,6 @@ struct gnutls_pubkey_st { */ gnutls_pk_params_st params; -#ifdef ENABLE_OPENPGP - uint8_t openpgp_key_id[GNUTLS_OPENPGP_KEYID_SIZE]; - unsigned int openpgp_key_id_set; - - uint8_t openpgp_key_fpr[GNUTLS_OPENPGP_V4_FINGERPRINT_SIZE]; - unsigned int openpgp_key_fpr_set:1; -#endif - unsigned int key_usage; /* bits from GNUTLS_KEY_* */ struct pin_info_st pin; @@ -82,9 +73,31 @@ struct gnutls_pubkey_st { int _gnutls_privkey_get_public_mpis(gnutls_privkey_t key, gnutls_pk_params_st *); +int _gnutls_privkey_get_spki_params(gnutls_privkey_t key, + gnutls_x509_spki_st * params); +int _gnutls_privkey_update_spki_params(gnutls_privkey_t key, + gnutls_pk_algorithm_t pk, + gnutls_digest_algorithm_t dig, + unsigned flags, + gnutls_x509_spki_st *params); + +unsigned _gnutls_privkey_compatible_with_sig(gnutls_privkey_t key, gnutls_sign_algorithm_t sig); + void _gnutls_privkey_cleanup(gnutls_privkey_t key); -unsigned pubkey_to_bits(gnutls_pk_algorithm_t pk, gnutls_pk_params_st * params); +int privkey_sign_and_hash_data(gnutls_privkey_t signer, + const gnutls_sign_entry_st *se, + const gnutls_datum_t * data, + gnutls_datum_t * signature, + gnutls_x509_spki_st *params); +int +privkey_sign_raw_data(gnutls_privkey_t key, + const gnutls_sign_entry_st *se, + const gnutls_datum_t * data, + gnutls_datum_t * signature, + gnutls_x509_spki_st * params); + +unsigned pubkey_to_bits(const gnutls_pk_params_st * params); int _gnutls_pubkey_compatible_with_sig(gnutls_session_t, gnutls_pubkey_t pubkey, const version_entry_st * ver, @@ -92,29 +105,20 @@ int _gnutls_pubkey_compatible_with_sig(gnutls_session_t, int _gnutls_pubkey_get_mpis(gnutls_pubkey_t key, gnutls_pk_params_st * params); -int -pubkey_verify_hashed_data(gnutls_pk_algorithm_t pk, - const mac_entry_st * algo, - const gnutls_datum_t * hash, - const gnutls_datum_t * signature, - gnutls_pk_params_st * issuer_params); - -int pubkey_verify_data(gnutls_pk_algorithm_t pk, - const mac_entry_st * algo, +int pubkey_verify_data(const gnutls_sign_entry_st *se, + const mac_entry_st *me, const gnutls_datum_t * data, const gnutls_datum_t * signature, - gnutls_pk_params_st * issuer_params); + gnutls_pk_params_st * params, + gnutls_x509_spki_st * sign_params, + unsigned vflags); -const mac_entry_st *_gnutls_dsa_q_to_hash(gnutls_pk_algorithm_t algo, - const gnutls_pk_params_st * +const mac_entry_st *_gnutls_dsa_q_to_hash(const gnutls_pk_params_st * params, unsigned int *hash_len); int _gnutls_privkey_get_mpis(gnutls_privkey_t key, gnutls_pk_params_st * params); -gnutls_sign_algorithm_t -_gnutls_privkey_get_preferred_sign_algo(gnutls_privkey_t key); - -#endif +#endif /* GNUTLS_LIB_ABSTRACT_INT_H */ diff --git a/lib/accelerated/Makefile.am b/lib/accelerated/Makefile.am index ae6adf966e..d44920def4 100644 --- a/lib/accelerated/Makefile.am +++ b/lib/accelerated/Makefile.am @@ -16,7 +16,7 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see include $(top_srcdir)/lib/common.mk diff --git a/lib/accelerated/aarch64/Makefile.am b/lib/accelerated/aarch64/Makefile.am index 7ccc855367..0c245aca40 100644 --- a/lib/accelerated/aarch64/Makefile.am +++ b/lib/accelerated/aarch64/Makefile.am @@ -16,7 +16,7 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see AM_LIBTOOLFLAGS=--tag=CC @@ -43,8 +43,10 @@ noinst_LTLIBRARIES = libaarch64.la libaarch64_la_SOURCES = aarch64-common.c aarch64-common.h sha-aarch64.h sha-aarch64.c \ hmac-sha-aarch64.c aes-cbc-aarch64.c aes-gcm-aarch64.c aes-aarch64.h aes-ccm-aarch64.c -if ASM_AARCH64 +if MACOSX +libaarch64_la_SOURCES += macosx/sha1-armv8.s macosx/sha512-armv8.s macosx/sha256-armv8.s \ + macosx/aes-aarch64.s macosx/ghash-aarch64.s +else libaarch64_la_SOURCES += elf/sha1-armv8.s elf/sha512-armv8.s elf/sha256-armv8.s \ elf/aes-aarch64.s elf/ghash-aarch64.s - -endif #ASM_AARCH64 +endif diff --git a/lib/accelerated/aarch64/aarch64-common.c b/lib/accelerated/aarch64/aarch64-common.c index 11f6a7466e..38cff360b6 100644 --- a/lib/accelerated/aarch64/aarch64-common.c +++ b/lib/accelerated/aarch64/aarch64-common.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -28,7 +28,6 @@ #include "errors.h" #include "gnutls_int.h" #include -#include #include "errors.h" #ifdef HAVE_LIBNETTLE # include /* for key generation in 192 and 256 bits */ @@ -37,6 +36,13 @@ #endif #include "aarch64-common.h" +#ifdef HAVE_GETAUXVAL +# include +# ifdef AT_HWCAP +# define USE_AUXVAL +# endif +#endif + #if defined(__GNUC__) __attribute__((visibility("hidden"))) #elif defined(__SUNPRO_C) @@ -59,41 +65,36 @@ static void capabilities_to_cpuid(unsigned capabilities) _gnutls_arm_cpuid_s |= capabilities; } +/* Correspond to asm/hwcap.h for aarch64 */ +#ifdef USE_AUXVAL +#define HWCAP_ASIMD (1 << 1) +#define HWCAP_AES (1 << 3) +#define HWCAP_PMULL (1 << 4) +#define HWCAP_SHA1 (1 << 5) +#define HWCAP_SHA2 (1 << 6) +#define HWCAP_SHA3 (1 << 17) +#define HWCAP_SHA512 (1 << 21) +#endif + static void discover_caps(unsigned int *caps) { - char line[512]; - char *p, *savep = NULL, *p2; - FILE *fp = fopen("/proc/cpuinfo", "r"); - - if (fp == NULL) - return; - - /* this is most likely linux-only */ - while(fgets(line, sizeof(line), fp) != NULL) { - if (strncmp(line, "Features", 8) == 0) { - p = strchr(line, ':'); - if (p) { - p++; - while (c_isspace(*p)) - p++; - - while((p2 = strtok_r(p, " ", &savep)) != NULL) { - if (strncmp(p2, "sha2", 4) == 0) - *caps |= ARMV8_SHA256; - else if (strncmp(p2, "sha1", 4) == 0) - *caps |= ARMV8_SHA1; - else if (strncmp(p2, "pmull", 5) == 0) - *caps |= ARMV8_PMULL; - else if (strncmp(p2, "aes", 3) == 0) - *caps |= ARMV8_AES; - p = NULL; - } - } - break; - } - } - - fclose(fp); +#ifdef USE_AUXVAL + unsigned long c; + + c = getauxval(AT_HWCAP); + if (c & HWCAP_ASIMD) + *caps |= ARMV7_NEON; + if (c & HWCAP_AES) + *caps |= ARMV8_AES; + if (c & HWCAP_PMULL) + *caps |= ARMV8_PMULL; + if (c & HWCAP_SHA1) + *caps |= ARMV8_SHA1; + if (c & HWCAP_SHA2) + *caps |= ARMV8_SHA256; + if (c & HWCAP_SHA512) + *caps |= ARMV8_SHA512; +#endif } static diff --git a/lib/accelerated/aarch64/aarch64-common.h b/lib/accelerated/aarch64/aarch64-common.h index 7330775ac0..039b8fb0d8 100644 --- a/lib/accelerated/aarch64/aarch64-common.h +++ b/lib/accelerated/aarch64/aarch64-common.h @@ -16,10 +16,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . + * along with this program. If not, see . * */ +#ifndef GNUTLS_LIB_ACCELERATED_AARCH64_AARCH64_COMMON_H +# define GNUTLS_LIB_ACCELERATED_AARCH64_AARCH64_COMMON_H + #if !__ASSEMBLER__ #define NN_HASH(name, update_func, digest_func, NAME) { \ #name, \ @@ -34,7 +37,12 @@ void register_aarch64_crypto(void); #endif +#define ARMV7_NEON (1<<0) +#define ARMV7_TICK (1<<1) #define ARMV8_AES (1<<2) #define ARMV8_SHA1 (1<<3) #define ARMV8_SHA256 (1<<4) #define ARMV8_PMULL (1<<5) +#define ARMV8_SHA512 (1<<6) + +#endif /* GNUTLS_LIB_ACCELERATED_AARCH64_AARCH64_COMMON_H */ diff --git a/lib/accelerated/aarch64/aes-aarch64.h b/lib/accelerated/aarch64/aes-aarch64.h index 55b815173c..692d8620d7 100644 --- a/lib/accelerated/aarch64/aes-aarch64.h +++ b/lib/accelerated/aarch64/aes-aarch64.h @@ -1,5 +1,5 @@ -#ifndef AES_ARM_H -#define AES_ARM_H +#ifndef GNUTLS_LIB_ACCELERATED_AARCH64_AES_AARCH64_H +#define GNUTLS_LIB_ACCELERATED_AARCH64_AES_AARCH64_H #include "gnutls_int.h" @@ -16,6 +16,10 @@ typedef struct { uint32_t rounds; } AES_KEY; +#define CHECK_AES_KEYSIZE(s) \ + if (s != 16 && s != 24 && s != 32) \ + return GNUTLS_E_INVALID_REQUEST + int aes_v8_set_encrypt_key(const unsigned char *userKey, int bits, AES_KEY *key); int aes_v8_set_decrypt_key(const unsigned char *userKey, int bits, AES_KEY *key); void aes_v8_cbc_encrypt(const unsigned char *in, unsigned char *out, @@ -27,4 +31,4 @@ extern const gnutls_crypto_cipher_st _gnutls_aes_gcm_aarch64; extern const gnutls_crypto_cipher_st _gnutls_aes_cbc_aarch64; extern const gnutls_crypto_cipher_st _gnutls_aes_ccm_aarch64; -#endif +#endif /* GNUTLS_LIB_ACCELERATED_AARCH64_AES_AARCH64_H */ diff --git a/lib/accelerated/aarch64/aes-cbc-aarch64.c b/lib/accelerated/aarch64/aes-cbc-aarch64.c index 9022362e44..68434f3656 100644 --- a/lib/accelerated/aarch64/aes-cbc-aarch64.c +++ b/lib/accelerated/aarch64/aes-cbc-aarch64.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2011-2016 Free Software Foundation, Inc. - * Copyright (C) 2016 Red Hat, Inc. + * Copyright (C) 2016-2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -65,6 +65,8 @@ aes_aarch64_cipher_setkey(void *_ctx, const void *userkey, size_t keysize) struct aes_ctx *ctx = _ctx; int ret; + CHECK_AES_KEYSIZE(keysize); + if (ctx->enc) ret = aes_v8_set_encrypt_key(userkey, keysize * 8, @@ -86,6 +88,9 @@ aes_aarch64_encrypt(void *_ctx, const void *src, size_t src_size, { struct aes_ctx *ctx = _ctx; + if (unlikely(src_size % 16 != 0)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + aes_v8_cbc_encrypt(src, dst, src_size, ALIGN16(&ctx->expanded_key), ctx->iv, 1); return 0; @@ -97,6 +102,9 @@ aes_aarch64_decrypt(void *_ctx, const void *src, size_t src_size, { struct aes_ctx *ctx = _ctx; + if (unlikely(src_size % 16 != 0)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + aes_v8_cbc_encrypt(src, dst, src_size, ALIGN16(&ctx->expanded_key), ctx->iv, 0); diff --git a/lib/accelerated/aarch64/aes-ccm-aarch64.c b/lib/accelerated/aarch64/aes-ccm-aarch64.c index 590ee6b6ab..5de7ab0e89 100644 --- a/lib/accelerated/aarch64/aes-ccm-aarch64.c +++ b/lib/accelerated/aarch64/aes-ccm-aarch64.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -81,6 +81,9 @@ static int aes_ccm_cipher_setkey(void *_ctx, const void *key, size_t length) { struct ccm_aarch64_aes_ctx *ctx = _ctx; + + CHECK_AES_KEYSIZE(length); + aes_v8_set_encrypt_key(key, length*8, &ctx->key); return 0; diff --git a/lib/accelerated/aarch64/aes-gcm-aarch64.c b/lib/accelerated/aarch64/aes-gcm-aarch64.c index c571d0294f..c88fe9759f 100644 --- a/lib/accelerated/aarch64/aes-gcm-aarch64.c +++ b/lib/accelerated/aarch64/aes-gcm-aarch64.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2011-2016 Free Software Foundation, Inc. - * Copyright (C) 2016 Red Hat, Inc. + * Copyright (C) 2016-2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -37,6 +37,7 @@ #include #define GCM_BLOCK_SIZE 16 +#define INC32(block) INCREMENT(4, block + GCM_BLOCK_SIZE - 4) /* GCM mode */ @@ -59,6 +60,8 @@ struct gcm128_context { struct aes_gcm_ctx { AES_KEY expanded_key; struct gcm128_context gcm; + unsigned finished; + unsigned auth_finished; }; void gcm_init_v8(u128 Htable[16], const uint64_t Xi[2]); @@ -98,6 +101,8 @@ aes_gcm_cipher_setkey(void *_ctx, const void *userkey, size_t keysize) struct aes_gcm_ctx *ctx = _ctx; int ret; + CHECK_AES_KEYSIZE(keysize); + ret = aes_v8_set_encrypt_key(userkey, keysize * 8, ALIGN16(&ctx->expanded_key)); @@ -133,6 +138,8 @@ static int aes_gcm_setiv(void *_ctx, const void *iv, size_t iv_size) aes_v8_encrypt(ctx->gcm.Yi.c, ctx->gcm.EK0.c, ALIGN16(&ctx->expanded_key)); ctx->gcm.Yi.c[GCM_BLOCK_SIZE - 1] = 2; + ctx->finished = 0; + ctx->auth_finished = 0; return 0; } @@ -152,6 +159,27 @@ gcm_ghash(struct aes_gcm_ctx *ctx, const uint8_t * src, size_t src_size) } } +static void +ctr32_encrypt_blocks_inplace(const unsigned char *in, unsigned char *out, + size_t blocks, const AES_KEY *key, + const unsigned char ivec[16]) +{ + unsigned i; + uint8_t ctr[16]; + uint8_t tmp[16]; + + memcpy(ctr, ivec, 16); + + for (i=0;ifinished)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (blocks > 0) { ctr32_encrypt_blocks(src, dst, blocks, @@ -209,8 +243,10 @@ aes_gcm_encrypt(void *_ctx, const void *src, size_t src_size, _gnutls_write_uint32(counter, ctx->gcm.Yi.c + 12); } - if (rest > 0) /* last incomplete block */ + if (rest > 0) { /* last incomplete block */ ctr_encrypt_last(ctx, src, dst, exp_blocks, rest); + ctx->finished = 1; + } gcm_ghash(ctx, dst, src_size); ctx->gcm.len.u[1] += src_size; @@ -228,6 +264,9 @@ aes_gcm_decrypt(void *_ctx, const void *src, size_t src_size, int rest = src_size - (exp_blocks); uint32_t counter; + if (unlikely(ctx->finished)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + gcm_ghash(ctx, src, src_size); ctx->gcm.len.u[1] += src_size; @@ -242,8 +281,10 @@ aes_gcm_decrypt(void *_ctx, const void *src, size_t src_size, _gnutls_write_uint32(counter, ctx->gcm.Yi.c + 12); } - if (rest > 0) /* last incomplete block */ + if (rest > 0) { /* last incomplete block */ ctr_encrypt_last(ctx, src, dst, exp_blocks, rest); + ctx->finished = 1; + } return 0; } @@ -252,9 +293,15 @@ static int aes_gcm_auth(void *_ctx, const void *src, size_t src_size) { struct aes_gcm_ctx *ctx = _ctx; + if (unlikely(ctx->auth_finished)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + gcm_ghash(ctx, src, src_size); ctx->gcm.len.u[0] += src_size; + if (src_size % GCM_BLOCK_SIZE != 0) + ctx->auth_finished = 1; + return 0; } diff --git a/lib/accelerated/aarch64/elf/aes-aarch64.s b/lib/accelerated/aarch64/elf/aes-aarch64.s index 0f16715357..ab227a8c14 100644 --- a/lib/accelerated/aarch64/elf/aes-aarch64.s +++ b/lib/accelerated/aarch64/elf/aes-aarch64.s @@ -224,6 +224,7 @@ aes_v8_set_encrypt_key: .type aes_v8_set_decrypt_key,%function .align 5 aes_v8_set_decrypt_key: +.inst 0xd503233f stp x29,x30,[sp,#-16]! add x29,sp,#0 bl .Lenc_key @@ -257,6 +258,7 @@ aes_v8_set_decrypt_key: eor x0,x0,x0 .Ldec_key_abort: ldp x29,x30,[sp],#16 +.inst 0xd50323bf ret .size aes_v8_set_decrypt_key,.-aes_v8_set_decrypt_key .globl aes_v8_encrypt diff --git a/lib/accelerated/aarch64/elf/ghash-aarch64.s b/lib/accelerated/aarch64/elf/ghash-aarch64.s index 13faf91f40..c30139985b 100644 --- a/lib/accelerated/aarch64/elf/ghash-aarch64.s +++ b/lib/accelerated/aarch64/elf/ghash-aarch64.s @@ -44,6 +44,7 @@ # 1 "lib/accelerated/aarch64/aarch64-common.h" 1 # 2 "lib/accelerated/aarch64/elf/ghash-aarch64.s.tmp.S" 2 + .text .arch armv8-a+crypto .globl gcm_init_v8 @@ -92,8 +93,48 @@ gcm_init_v8: ext v17.16b,v22.16b,v22.16b,#8 eor v17.16b,v17.16b,v22.16b ext v21.16b,v16.16b,v17.16b,#8 - st1 {v21.2d,v22.2d},[x0] + st1 {v21.2d,v22.2d},[x0],#32 + + pmull v0.1q,v20.1d, v22.1d + pmull v5.1q,v22.1d,v22.1d + pmull2 v2.1q,v20.2d, v22.2d + pmull2 v7.1q,v22.2d,v22.2d + pmull v1.1q,v16.1d,v17.1d + pmull v6.1q,v17.1d,v17.1d + + ext v16.16b,v0.16b,v2.16b,#8 + ext v17.16b,v5.16b,v7.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v16.16b + eor v4.16b,v5.16b,v7.16b + eor v6.16b,v6.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d + eor v6.16b,v6.16b,v4.16b + pmull v4.1q,v5.1d,v19.1d + ins v2.d[0],v1.d[1] + ins v7.d[0],v6.d[1] + ins v1.d[1],v0.d[0] + ins v6.d[1],v5.d[0] + eor v0.16b,v1.16b,v18.16b + eor v5.16b,v6.16b,v4.16b + + ext v18.16b,v0.16b,v0.16b,#8 + ext v4.16b,v5.16b,v5.16b,#8 + pmull v0.1q,v0.1d,v19.1d + pmull v5.1q,v5.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v4.16b,v4.16b,v7.16b + eor v20.16b, v0.16b,v18.16b + eor v22.16b,v5.16b,v4.16b + + ext v16.16b,v20.16b, v20.16b,#8 + ext v17.16b,v22.16b,v22.16b,#8 + eor v16.16b,v16.16b,v20.16b + eor v17.16b,v17.16b,v22.16b + ext v21.16b,v16.16b,v17.16b,#8 + st1 {v20.2d,v21.2d,v22.2d},[x0] ret .size gcm_init_v8,.-gcm_init_v8 .globl gcm_gmult_v8 @@ -141,6 +182,8 @@ gcm_gmult_v8: .type gcm_ghash_v8,%function .align 4 gcm_ghash_v8: + cmp x3,#64 + b.hs .Lgcm_ghash_v8_4x ld1 {v0.2d},[x0] @@ -149,7 +192,7 @@ gcm_ghash_v8: subs x3,x3,#32 mov x12,#16 -# 116 "lib/accelerated/aarch64/elf/ghash-aarch64.s.tmp.S" +# 159 "lib/accelerated/aarch64/elf/ghash-aarch64.s.tmp.S" ld1 {v20.2d,v21.2d},[x1],#32 movi v19.16b,#0xe1 ld1 {v22.2d},[x1] @@ -260,6 +303,286 @@ gcm_ghash_v8: ret .size gcm_ghash_v8,.-gcm_ghash_v8 +.type gcm_ghash_v8_4x,%function +.align 4 +gcm_ghash_v8_4x: +.Lgcm_ghash_v8_4x: + ld1 {v0.2d},[x0] + ld1 {v20.2d,v21.2d,v22.2d},[x1],#48 + movi v19.16b,#0xe1 + ld1 {v26.2d,v27.2d,v28.2d},[x1] + shl v19.2d,v19.2d,#57 + + ld1 {v4.2d,v5.2d,v6.2d,v7.2d},[x2],#64 + + rev64 v0.16b,v0.16b + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v7.16b,v7.16b + rev64 v4.16b,v4.16b + + ext v25.16b,v7.16b,v7.16b,#8 + ext v24.16b,v6.16b,v6.16b,#8 + ext v23.16b,v5.16b,v5.16b,#8 + + pmull v29.1q,v20.1d,v25.1d + eor v7.16b,v7.16b,v25.16b + pmull2 v31.1q,v20.2d,v25.2d + pmull v30.1q,v21.1d,v7.1d + + pmull v16.1q,v22.1d,v24.1d + eor v6.16b,v6.16b,v24.16b + pmull2 v24.1q,v22.2d,v24.2d + pmull2 v6.1q,v21.2d,v6.2d + + eor v29.16b,v29.16b,v16.16b + eor v31.16b,v31.16b,v24.16b + eor v30.16b,v30.16b,v6.16b + + pmull v7.1q,v26.1d,v23.1d + eor v5.16b,v5.16b,v23.16b + pmull2 v23.1q,v26.2d,v23.2d + pmull v5.1q,v27.1d,v5.1d + + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + eor v30.16b,v30.16b,v5.16b + + subs x3,x3,#128 + b.lo .Ltail4x + + b .Loop4x + +.align 4 +.Loop4x: + eor v16.16b,v4.16b,v0.16b + ld1 {v4.2d,v5.2d,v6.2d,v7.2d},[x2],#64 + ext v3.16b,v16.16b,v16.16b,#8 + + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v7.16b,v7.16b + rev64 v4.16b,v4.16b + + + pmull v0.1q,v28.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v28.2d,v3.2d + ext v25.16b,v7.16b,v7.16b,#8 + pmull2 v1.1q,v27.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + ext v24.16b,v6.16b,v6.16b,#8 + eor v1.16b,v1.16b,v30.16b + ext v23.16b,v5.16b,v5.16b,#8 + + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + pmull v29.1q,v20.1d,v25.1d + eor v7.16b,v7.16b,v25.16b + eor v1.16b,v1.16b,v17.16b + pmull2 v31.1q,v20.2d,v25.2d + eor v1.16b,v1.16b,v18.16b + pmull v30.1q,v21.1d,v7.1d + + pmull v18.1q,v0.1d,v19.1d + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + pmull v16.1q,v22.1d,v24.1d + eor v6.16b,v6.16b,v24.16b + pmull2 v24.1q,v22.2d,v24.2d + eor v0.16b,v1.16b,v18.16b + pmull2 v6.1q,v21.2d,v6.2d + + eor v29.16b,v29.16b,v16.16b + eor v31.16b,v31.16b,v24.16b + eor v30.16b,v30.16b,v6.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + pmull v7.1q,v26.1d,v23.1d + eor v5.16b,v5.16b,v23.16b + eor v18.16b,v18.16b,v2.16b + pmull2 v23.1q,v26.2d,v23.2d + pmull v5.1q,v27.1d,v5.1d + + eor v0.16b,v0.16b,v18.16b + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + ext v0.16b,v0.16b,v0.16b,#8 + eor v30.16b,v30.16b,v5.16b + + subs x3,x3,#64 + b.hs .Loop4x + +.Ltail4x: + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull v0.1q,v28.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v28.2d,v3.2d + pmull2 v1.1q,v27.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + + adds x3,x3,#64 + b.eq .Ldone4x + + cmp x3,#32 + b.lo .Lone + b.eq .Ltwo +.Lthree: + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d,v5.2d,v6.2d},[x2] + eor v1.16b,v1.16b,v18.16b + + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v4.16b,v4.16b + + + pmull v18.1q,v0.1d,v19.1d + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + ext v24.16b,v6.16b,v6.16b,#8 + ext v23.16b,v5.16b,v5.16b,#8 + eor v0.16b,v1.16b,v18.16b + + pmull v29.1q,v20.1d,v24.1d + eor v6.16b,v6.16b,v24.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + pmull2 v31.1q,v20.2d,v24.2d + pmull v30.1q,v21.1d,v6.1d + eor v0.16b,v0.16b,v18.16b + pmull v7.1q,v22.1d,v23.1d + eor v5.16b,v5.16b,v23.16b + ext v0.16b,v0.16b,v0.16b,#8 + + pmull2 v23.1q,v22.2d,v23.2d + eor v16.16b,v4.16b,v0.16b + pmull2 v5.1q,v21.2d,v5.2d + ext v3.16b,v16.16b,v16.16b,#8 + + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + eor v30.16b,v30.16b,v5.16b + + pmull v0.1q,v26.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v26.2d,v3.2d + pmull v1.1q,v27.1d,v16.1d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + b .Ldone4x + +.align 4 +.Ltwo: + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d,v5.2d},[x2] + eor v1.16b,v1.16b,v18.16b + + rev64 v5.16b,v5.16b + rev64 v4.16b,v4.16b + + + pmull v18.1q,v0.1d,v19.1d + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + ext v23.16b,v5.16b,v5.16b,#8 + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + + pmull v29.1q,v20.1d,v23.1d + eor v5.16b,v5.16b,v23.16b + + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull2 v31.1q,v20.2d,v23.2d + pmull v30.1q,v21.1d,v5.1d + + pmull v0.1q,v22.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v22.2d,v3.2d + pmull2 v1.1q,v21.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + b .Ldone4x + +.align 4 +.Lone: + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d},[x2] + eor v1.16b,v1.16b,v18.16b + + rev64 v4.16b,v4.16b + + + pmull v18.1q,v0.1d,v19.1d + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull v0.1q,v20.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v20.2d,v3.2d + pmull v1.1q,v21.1d,v16.1d + +.Ldone4x: + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + + pmull v18.1q,v0.1d,v19.1d + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + + + rev64 v0.16b,v0.16b + + st1 {v0.2d},[x0] + + ret +.size gcm_ghash_v8_4x,.-gcm_ghash_v8_4x .byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 .align 2 diff --git a/lib/accelerated/aarch64/elf/sha1-armv8.s b/lib/accelerated/aarch64/elf/sha1-armv8.s index 0dc68fe769..4b65cf6ea8 100644 --- a/lib/accelerated/aarch64/elf/sha1-armv8.s +++ b/lib/accelerated/aarch64/elf/sha1-armv8.s @@ -1,32 +1,28 @@ -# 1 "lib/accelerated/aarch64/elf/sha1-armv8.s.tmp.S" -# 1 "" -# 1 "" -# 1 "lib/accelerated/aarch64/elf/sha1-armv8.s.tmp.S" # Copyright (c) 2011-2016, Andy Polyakov # 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 copyright notices, -# 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 Andy Polyakov nor the names of its -# copyright holder and contributors may be used to endorse or -# promote products derived from this software without specific -# prior written permission. - +# +# * Redistributions of source code must retain copyright notices, +# 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 Andy Polyakov nor the names of its +# copyright holder and contributors may be used to endorse or +# promote products derived from this software without specific +# prior written permission. +# # ALTERNATIVELY, provided that this notice is retained in full, this # product may be distributed under the terms of the GNU General Public # License (GPL), in which case the provisions of the GPL apply INSTEAD OF # those given above. - +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -38,11 +34,15 @@ # 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. - +# # *** This file is auto-generated *** - +# +# 1 "lib/accelerated/aarch64/elf/sha1-armv8.s.tmp.S" +# 1 "" +# 1 "" +# 1 "lib/accelerated/aarch64/elf/sha1-armv8.s.tmp.S" # 1 "lib/accelerated/aarch64/aarch64-common.h" 1 -# 41 "lib/accelerated/aarch64/elf/sha1-armv8.s.tmp.S" 2 +# 2 "lib/accelerated/aarch64/elf/sha1-armv8.s.tmp.S" 2 .text @@ -1263,5 +1263,4 @@ sha1_block_armv8: .align 2 .align 2 .comm _gnutls_arm_cpuid_s,4,4 - .section .note.GNU-stack,"",%progbits diff --git a/lib/accelerated/aarch64/elf/sha256-armv8.s b/lib/accelerated/aarch64/elf/sha256-armv8.s index c055ce4035..bc3f146c68 100644 --- a/lib/accelerated/aarch64/elf/sha256-armv8.s +++ b/lib/accelerated/aarch64/elf/sha256-armv8.s @@ -1,32 +1,28 @@ -# 1 "lib/accelerated/aarch64/elf/sha256-armv8.s.tmp.S" -# 1 "" -# 1 "" -# 1 "lib/accelerated/aarch64/elf/sha256-armv8.s.tmp.S" # Copyright (c) 2011-2016, Andy Polyakov # 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 copyright notices, -# 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 Andy Polyakov nor the names of its -# copyright holder and contributors may be used to endorse or -# promote products derived from this software without specific -# prior written permission. - +# +# * Redistributions of source code must retain copyright notices, +# 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 Andy Polyakov nor the names of its +# copyright holder and contributors may be used to endorse or +# promote products derived from this software without specific +# prior written permission. +# # ALTERNATIVELY, provided that this notice is retained in full, this # product may be distributed under the terms of the GNU General Public # License (GPL), in which case the provisions of the GPL apply INSTEAD OF # those given above. - +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -38,11 +34,17 @@ # 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. - +# # *** This file is auto-generated *** - +# +# 1 "lib/accelerated/aarch64/elf/sha256-armv8.s.tmp.S" +# 1 "" +# 1 "" +# 1 "lib/accelerated/aarch64/elf/sha256-armv8.s.tmp.S" +# 56 "lib/accelerated/aarch64/elf/sha256-armv8.s.tmp.S" # 1 "lib/accelerated/aarch64/aarch64-common.h" 1 -# 41 "lib/accelerated/aarch64/elf/sha256-armv8.s.tmp.S" 2 +# 57 "lib/accelerated/aarch64/elf/sha256-armv8.s.tmp.S" 2 + .text @@ -54,6 +56,7 @@ sha256_block_data_order: + ldr x16,.L_gnutls_arm_cpuid_s adr x17,.L_gnutls_arm_cpuid_s @@ -61,6 +64,10 @@ sha256_block_data_order: ldr w16,[x16] tst w16,#(1<<4) b.ne .Lv8_entry + tst w16,#(1<<0) + b.ne .Lneon_entry + +.inst 0xd503233f stp x29,x30,[sp,#-128]! add x29,sp,#0 @@ -1020,6 +1027,7 @@ sha256_block_data_order: ldp x25,x26,[x29,#64] ldp x27,x28,[x29,#80] ldp x29,x30,[sp],#128 +.inst 0xd50323bf ret .size sha256_block_data_order,.-sha256_block_data_order @@ -1044,6 +1052,7 @@ sha256_block_data_order: .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 .long 0 .size .LK256,.-.LK256 + .align 3 .L_gnutls_arm_cpuid_s: @@ -1051,9 +1060,11 @@ sha256_block_data_order: .quad _gnutls_arm_cpuid_s-. + .byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 .align 2 + .type sha256_block_armv8,%function .align 6 sha256_block_armv8: @@ -1192,6 +1203,853 @@ sha256_block_armv8: ldr x29,[sp],#16 ret .size sha256_block_armv8,.-sha256_block_armv8 -.comm _gnutls_arm_cpuid_s,4,4 + + + +.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 x16,.LK256 + add x2,x1,x2,lsl#6 + + ld1 {v0.16b},[x1], #16 + ld1 {v1.16b},[x1], #16 + ld1 {v2.16b},[x1], #16 + ld1 {v3.16b},[x1], #16 + ld1 {v4.4s},[x16], #16 + ld1 {v5.4s},[x16], #16 + ld1 {v6.4s},[x16], #16 + ld1 {v7.4s},[x16], #16 + rev32 v0.16b,v0.16b + rev32 v1.16b,v1.16b + rev32 v2.16b,v2.16b + rev32 v3.16b,v3.16b + mov x17,sp + add v4.4s,v4.4s,v0.4s + add v5.4s,v5.4s,v1.4s + add v6.4s,v6.4s,v2.4s + st1 {v4.4s,v5.4s},[x17], #32 + add v7.4s,v7.4s,v3.4s + st1 {v6.4s,v7.4s},[x17] + sub x17,x17,#32 + + ldp w3,w4,[x0] + ldp w5,w6,[x0,#8] + ldp w7,w8,[x0,#16] + ldp w9,w10,[x0,#24] + ldr w12,[sp,#0] + mov w13,wzr + eor w14,w4,w5 + mov w15,wzr + b .L_00_48 + +.align 4 +.L_00_48: + ext v4.16b,v0.16b,v1.16b,#4 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + bic w15,w9,w7 + ext v7.16b,v2.16b,v3.16b,#4 + eor w11,w7,w7,ror#5 + add w3,w3,w13 + mov d19,v3.d[1] + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w3,w3,ror#11 + ushr v5.4s,v4.4s,#3 + add w10,w10,w12 + add v0.4s,v0.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + ushr v7.4s,v4.4s,#18 + add w10,w10,w11 + ldr w12,[sp,#4] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w6,w6,w10 + sli v7.4s,v4.4s,#14 + eor w14,w14,w4 + ushr v16.4s,v19.4s,#17 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + eor v5.16b,v5.16b,v7.16b + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + sli v16.4s,v19.4s,#15 + add w10,w10,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + ushr v7.4s,v19.4s,#19 + add w9,w9,w12 + ror w11,w11,#6 + add v0.4s,v0.4s,v5.4s + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + sli v7.4s,v19.4s,#13 + add w9,w9,w11 + ldr w12,[sp,#8] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + eor v17.16b,v17.16b,v7.16b + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + add v0.4s,v0.4s,v17.4s + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + ushr v18.4s,v0.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v0.4s,#10 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + sli v18.4s,v0.4s,#15 + add w8,w8,w12 + ushr v17.4s,v0.4s,#19 + ror w11,w11,#6 + eor w13,w9,w10 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w9,ror#20 + add w8,w8,w11 + sli v17.4s,v0.4s,#13 + ldr w12,[sp,#12] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w4,w4,w8 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w10 + eor v17.16b,v17.16b,v17.16b + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + mov v17.d[1],v19.d[0] + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + add v0.4s,v0.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add v4.4s,v4.4s,v0.4s + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#16] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + ext v4.16b,v1.16b,v2.16b,#4 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + bic w15,w5,w3 + ext v7.16b,v3.16b,v0.16b,#4 + eor w11,w3,w3,ror#5 + add w7,w7,w13 + mov d19,v0.d[1] + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w7,w7,ror#11 + ushr v5.4s,v4.4s,#3 + add w6,w6,w12 + add v1.4s,v1.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + ushr v7.4s,v4.4s,#18 + add w6,w6,w11 + ldr w12,[sp,#20] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w10,w10,w6 + sli v7.4s,v4.4s,#14 + eor w14,w14,w8 + ushr v16.4s,v19.4s,#17 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + eor v5.16b,v5.16b,v7.16b + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + sli v16.4s,v19.4s,#15 + add w6,w6,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + ushr v7.4s,v19.4s,#19 + add w5,w5,w12 + ror w11,w11,#6 + add v1.4s,v1.4s,v5.4s + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + sli v7.4s,v19.4s,#13 + add w5,w5,w11 + ldr w12,[sp,#24] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + eor v17.16b,v17.16b,v7.16b + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + add v1.4s,v1.4s,v17.4s + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + ushr v18.4s,v1.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v1.4s,#10 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + sli v18.4s,v1.4s,#15 + add w4,w4,w12 + ushr v17.4s,v1.4s,#19 + ror w11,w11,#6 + eor w13,w5,w6 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w5,ror#20 + add w4,w4,w11 + sli v17.4s,v1.4s,#13 + ldr w12,[sp,#28] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w8,w8,w4 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w6 + eor v17.16b,v17.16b,v17.16b + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + mov v17.d[1],v19.d[0] + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + add v1.4s,v1.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add v4.4s,v4.4s,v1.4s + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[sp,#32] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + ext v4.16b,v2.16b,v3.16b,#4 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + bic w15,w9,w7 + ext v7.16b,v0.16b,v1.16b,#4 + eor w11,w7,w7,ror#5 + add w3,w3,w13 + mov d19,v1.d[1] + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w3,w3,ror#11 + ushr v5.4s,v4.4s,#3 + add w10,w10,w12 + add v2.4s,v2.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + ushr v7.4s,v4.4s,#18 + add w10,w10,w11 + ldr w12,[sp,#36] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w6,w6,w10 + sli v7.4s,v4.4s,#14 + eor w14,w14,w4 + ushr v16.4s,v19.4s,#17 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + eor v5.16b,v5.16b,v7.16b + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + sli v16.4s,v19.4s,#15 + add w10,w10,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + ushr v7.4s,v19.4s,#19 + add w9,w9,w12 + ror w11,w11,#6 + add v2.4s,v2.4s,v5.4s + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + sli v7.4s,v19.4s,#13 + add w9,w9,w11 + ldr w12,[sp,#40] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + eor v17.16b,v17.16b,v7.16b + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + add v2.4s,v2.4s,v17.4s + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + ushr v18.4s,v2.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v2.4s,#10 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + sli v18.4s,v2.4s,#15 + add w8,w8,w12 + ushr v17.4s,v2.4s,#19 + ror w11,w11,#6 + eor w13,w9,w10 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w9,ror#20 + add w8,w8,w11 + sli v17.4s,v2.4s,#13 + ldr w12,[sp,#44] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w4,w4,w8 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w10 + eor v17.16b,v17.16b,v17.16b + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + mov v17.d[1],v19.d[0] + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + add v2.4s,v2.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add v4.4s,v4.4s,v2.4s + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#48] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + ext v4.16b,v3.16b,v0.16b,#4 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + bic w15,w5,w3 + ext v7.16b,v1.16b,v2.16b,#4 + eor w11,w3,w3,ror#5 + add w7,w7,w13 + mov d19,v2.d[1] + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w7,w7,ror#11 + ushr v5.4s,v4.4s,#3 + add w6,w6,w12 + add v3.4s,v3.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + ushr v7.4s,v4.4s,#18 + add w6,w6,w11 + ldr w12,[sp,#52] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w10,w10,w6 + sli v7.4s,v4.4s,#14 + eor w14,w14,w8 + ushr v16.4s,v19.4s,#17 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + eor v5.16b,v5.16b,v7.16b + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + sli v16.4s,v19.4s,#15 + add w6,w6,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + ushr v7.4s,v19.4s,#19 + add w5,w5,w12 + ror w11,w11,#6 + add v3.4s,v3.4s,v5.4s + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + sli v7.4s,v19.4s,#13 + add w5,w5,w11 + ldr w12,[sp,#56] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + eor v17.16b,v17.16b,v7.16b + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + add v3.4s,v3.4s,v17.4s + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + ushr v18.4s,v3.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v3.4s,#10 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + sli v18.4s,v3.4s,#15 + add w4,w4,w12 + ushr v17.4s,v3.4s,#19 + ror w11,w11,#6 + eor w13,w5,w6 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w5,ror#20 + add w4,w4,w11 + sli v17.4s,v3.4s,#13 + ldr w12,[sp,#60] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w8,w8,w4 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w6 + eor v17.16b,v17.16b,v17.16b + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + mov v17.d[1],v19.d[0] + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + add v3.4s,v3.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add v4.4s,v4.4s,v3.4s + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[x16] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + cmp w12,#0 + ldr w12,[sp,#0] + sub x17,x17,#64 + bne .L_00_48 + + sub x16,x16,#256 + cmp x1,x2 + mov x17, #64 + csel x17, x17, xzr, eq + sub x1,x1,x17 + mov x17,sp + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + ld1 {v0.16b},[x1],#16 + bic w15,w9,w7 + eor w11,w7,w7,ror#5 + ld1 {v4.4s},[x16],#16 + add w3,w3,w13 + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + eor w15,w3,w3,ror#11 + rev32 v0.16b,v0.16b + add w10,w10,w12 + ror w11,w11,#6 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + add v4.4s,v4.4s,v0.4s + add w10,w10,w11 + ldr w12,[sp,#4] + and w14,w14,w13 + ror w15,w15,#2 + add w6,w6,w10 + eor w14,w14,w4 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + add w10,w10,w14 + orr w12,w12,w15 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + add w9,w9,w12 + ror w11,w11,#6 + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + add w9,w9,w11 + ldr w12,[sp,#8] + and w13,w13,w14 + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + orr w12,w12,w15 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + add w8,w8,w12 + ror w11,w11,#6 + eor w13,w9,w10 + eor w15,w15,w9,ror#20 + add w8,w8,w11 + ldr w12,[sp,#12] + and w14,w14,w13 + ror w15,w15,#2 + add w4,w4,w8 + eor w14,w14,w10 + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#16] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + ld1 {v1.16b},[x1],#16 + bic w15,w5,w3 + eor w11,w3,w3,ror#5 + ld1 {v4.4s},[x16],#16 + add w7,w7,w13 + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + eor w15,w7,w7,ror#11 + rev32 v1.16b,v1.16b + add w6,w6,w12 + ror w11,w11,#6 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + add v4.4s,v4.4s,v1.4s + add w6,w6,w11 + ldr w12,[sp,#20] + and w14,w14,w13 + ror w15,w15,#2 + add w10,w10,w6 + eor w14,w14,w8 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + add w6,w6,w14 + orr w12,w12,w15 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + add w5,w5,w12 + ror w11,w11,#6 + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + add w5,w5,w11 + ldr w12,[sp,#24] + and w13,w13,w14 + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + orr w12,w12,w15 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + add w4,w4,w12 + ror w11,w11,#6 + eor w13,w5,w6 + eor w15,w15,w5,ror#20 + add w4,w4,w11 + ldr w12,[sp,#28] + and w14,w14,w13 + ror w15,w15,#2 + add w8,w8,w4 + eor w14,w14,w6 + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[sp,#32] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + ld1 {v2.16b},[x1],#16 + bic w15,w9,w7 + eor w11,w7,w7,ror#5 + ld1 {v4.4s},[x16],#16 + add w3,w3,w13 + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + eor w15,w3,w3,ror#11 + rev32 v2.16b,v2.16b + add w10,w10,w12 + ror w11,w11,#6 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + add v4.4s,v4.4s,v2.4s + add w10,w10,w11 + ldr w12,[sp,#36] + and w14,w14,w13 + ror w15,w15,#2 + add w6,w6,w10 + eor w14,w14,w4 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + add w10,w10,w14 + orr w12,w12,w15 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + add w9,w9,w12 + ror w11,w11,#6 + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + add w9,w9,w11 + ldr w12,[sp,#40] + and w13,w13,w14 + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + orr w12,w12,w15 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + add w8,w8,w12 + ror w11,w11,#6 + eor w13,w9,w10 + eor w15,w15,w9,ror#20 + add w8,w8,w11 + ldr w12,[sp,#44] + and w14,w14,w13 + ror w15,w15,#2 + add w4,w4,w8 + eor w14,w14,w10 + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#48] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + ld1 {v3.16b},[x1],#16 + bic w15,w5,w3 + eor w11,w3,w3,ror#5 + ld1 {v4.4s},[x16],#16 + add w7,w7,w13 + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + eor w15,w7,w7,ror#11 + rev32 v3.16b,v3.16b + add w6,w6,w12 + ror w11,w11,#6 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + add v4.4s,v4.4s,v3.4s + add w6,w6,w11 + ldr w12,[sp,#52] + and w14,w14,w13 + ror w15,w15,#2 + add w10,w10,w6 + eor w14,w14,w8 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + add w6,w6,w14 + orr w12,w12,w15 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + add w5,w5,w12 + ror w11,w11,#6 + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + add w5,w5,w11 + ldr w12,[sp,#56] + and w13,w13,w14 + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + orr w12,w12,w15 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + add w4,w4,w12 + ror w11,w11,#6 + eor w13,w5,w6 + eor w15,w15,w5,ror#20 + add w4,w4,w11 + ldr w12,[sp,#60] + and w14,w14,w13 + ror w15,w15,#2 + add w8,w8,w4 + eor w14,w14,w6 + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + add w3,w3,w15 + ldp w11,w12,[x0,#0] + add w3,w3,w13 + ldp w13,w14,[x0,#8] + add w3,w3,w11 + add w4,w4,w12 + ldp w11,w12,[x0,#16] + add w5,w5,w13 + add w6,w6,w14 + ldp w13,w14,[x0,#24] + add w7,w7,w11 + add w8,w8,w12 + ldr w12,[sp,#0] + stp w3,w4,[x0,#0] + add w9,w9,w13 + mov w13,wzr + stp w5,w6,[x0,#8] + add w10,w10,w14 + stp w7,w8,[x0,#16] + eor w14,w4,w5 + stp w9,w10,[x0,#24] + mov w15,wzr + mov x17,sp + b.ne .L_00_48 + + ldr x29,[x29] + add sp,sp,#16*4+16 + ret +.size sha256_block_neon,.-sha256_block_neon + +.comm _gnutls_arm_cpuid_s,4,4 .section .note.GNU-stack,"",%progbits diff --git a/lib/accelerated/aarch64/elf/sha512-armv8.s b/lib/accelerated/aarch64/elf/sha512-armv8.s index 8484f272e6..b036c2a121 100644 --- a/lib/accelerated/aarch64/elf/sha512-armv8.s +++ b/lib/accelerated/aarch64/elf/sha512-armv8.s @@ -1,32 +1,28 @@ -# 1 "lib/accelerated/aarch64/elf/sha512-armv8.s.tmp.S" -# 1 "" -# 1 "" -# 1 "lib/accelerated/aarch64/elf/sha512-armv8.s.tmp.S" # Copyright (c) 2011-2016, Andy Polyakov # 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 copyright notices, -# 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 Andy Polyakov nor the names of its -# copyright holder and contributors may be used to endorse or -# promote products derived from this software without specific -# prior written permission. - +# +# * Redistributions of source code must retain copyright notices, +# 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 Andy Polyakov nor the names of its +# copyright holder and contributors may be used to endorse or +# promote products derived from this software without specific +# prior written permission. +# # ALTERNATIVELY, provided that this notice is retained in full, this # product may be distributed under the terms of the GNU General Public # License (GPL), in which case the provisions of the GPL apply INSTEAD OF # those given above. - +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -38,11 +34,17 @@ # 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. - +# # *** This file is auto-generated *** - +# +# 1 "lib/accelerated/aarch64/elf/sha512-armv8.s.tmp.S" +# 1 "" +# 1 "" +# 1 "lib/accelerated/aarch64/elf/sha512-armv8.s.tmp.S" +# 56 "lib/accelerated/aarch64/elf/sha512-armv8.s.tmp.S" # 1 "lib/accelerated/aarch64/aarch64-common.h" 1 -# 41 "lib/accelerated/aarch64/elf/sha512-armv8.s.tmp.S" 2 +# 57 "lib/accelerated/aarch64/elf/sha512-armv8.s.tmp.S" 2 + .text @@ -51,6 +53,19 @@ .type sha512_block_data_order,%function .align 6 sha512_block_data_order: + + + + + ldr x16,.L_gnutls_arm_cpuid_s + + adr x17,.L_gnutls_arm_cpuid_s + add x16,x16,x17 + ldr w16,[x16] + tst w16,#(1<<6) + b.ne .Lv8_entry + +.inst 0xd503233f stp x29,x30,[sp,#-128]! add x29,sp,#0 @@ -1010,6 +1025,7 @@ sha512_block_data_order: ldp x25,x26,[x29,#64] ldp x27,x28,[x29,#80] ldp x29,x30,[sp],#128 +.inst 0xd50323bf ret .size sha512_block_data_order,.-sha512_block_data_order @@ -1058,6 +1074,7 @@ sha512_block_data_order: .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 .quad 0 .size .LK512,.-.LK512 + .align 3 .L_gnutls_arm_cpuid_s: @@ -1065,9 +1082,529 @@ sha512_block_data_order: .quad _gnutls_arm_cpuid_s-. + .byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 .align 2 -.comm _gnutls_arm_cpuid_s,4,4 +.type sha512_block_armv8,%function +.align 6 +sha512_block_armv8: +.Lv8_entry: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x1],#64 + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + + ld1 {v0.2d,v1.2d,v2.2d,v3.2d},[x0] + adr x3,.LK512 + + rev64 v16.16b,v16.16b + rev64 v17.16b,v17.16b + rev64 v18.16b,v18.16b + rev64 v19.16b,v19.16b + rev64 v20.16b,v20.16b + rev64 v21.16b,v21.16b + rev64 v22.16b,v22.16b + rev64 v23.16b,v23.16b + b .Loop_hw + +.align 4 +.Loop_hw: + ld1 {v24.2d},[x3],#16 + subs x2,x2,#1 + sub x4,x1,#128 + orr v26.16b,v0.16b,v0.16b + orr v27.16b,v1.16b,v1.16b + orr v28.16b,v2.16b,v2.16b + orr v29.16b,v3.16b,v3.16b + csel x1,x1,x4,ne + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d +.inst 0xcec08230 + ext v7.16b,v20.16b,v21.16b,#8 +.inst 0xce6680a3 +.inst 0xce678af0 + add v4.2d,v1.2d,v3.2d +.inst 0xce608423 + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d +.inst 0xcec08251 + ext v7.16b,v21.16b,v22.16b,#8 +.inst 0xce6680a2 +.inst 0xce678a11 + add v1.2d,v0.2d,v2.2d +.inst 0xce638402 + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d +.inst 0xcec08272 + ext v7.16b,v22.16b,v23.16b,#8 +.inst 0xce6680a4 +.inst 0xce678a32 + add v0.2d,v3.2d,v4.2d +.inst 0xce628464 + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d +.inst 0xcec08293 + ext v7.16b,v23.16b,v16.16b,#8 +.inst 0xce6680a1 +.inst 0xce678a53 + add v3.2d,v2.2d,v1.2d +.inst 0xce648441 + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d +.inst 0xcec082b4 + ext v7.16b,v16.16b,v17.16b,#8 +.inst 0xce6680a0 +.inst 0xce678a74 + add v2.2d,v4.2d,v0.2d +.inst 0xce618480 + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d +.inst 0xcec082d5 + ext v7.16b,v17.16b,v18.16b,#8 +.inst 0xce6680a3 +.inst 0xce678a95 + add v4.2d,v1.2d,v3.2d +.inst 0xce608423 + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d +.inst 0xcec082f6 + ext v7.16b,v18.16b,v19.16b,#8 +.inst 0xce6680a2 +.inst 0xce678ab6 + add v1.2d,v0.2d,v2.2d +.inst 0xce638402 + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d +.inst 0xcec08217 + ext v7.16b,v19.16b,v20.16b,#8 +.inst 0xce6680a4 +.inst 0xce678ad7 + add v0.2d,v3.2d,v4.2d +.inst 0xce628464 + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d +.inst 0xcec08230 + ext v7.16b,v20.16b,v21.16b,#8 +.inst 0xce6680a1 +.inst 0xce678af0 + add v3.2d,v2.2d,v1.2d +.inst 0xce648441 + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d +.inst 0xcec08251 + ext v7.16b,v21.16b,v22.16b,#8 +.inst 0xce6680a0 +.inst 0xce678a11 + add v2.2d,v4.2d,v0.2d +.inst 0xce618480 + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d +.inst 0xcec08272 + ext v7.16b,v22.16b,v23.16b,#8 +.inst 0xce6680a3 +.inst 0xce678a32 + add v4.2d,v1.2d,v3.2d +.inst 0xce608423 + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d +.inst 0xcec08293 + ext v7.16b,v23.16b,v16.16b,#8 +.inst 0xce6680a2 +.inst 0xce678a53 + add v1.2d,v0.2d,v2.2d +.inst 0xce638402 + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d +.inst 0xcec082b4 + ext v7.16b,v16.16b,v17.16b,#8 +.inst 0xce6680a4 +.inst 0xce678a74 + add v0.2d,v3.2d,v4.2d +.inst 0xce628464 + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d +.inst 0xcec082d5 + ext v7.16b,v17.16b,v18.16b,#8 +.inst 0xce6680a1 +.inst 0xce678a95 + add v3.2d,v2.2d,v1.2d +.inst 0xce648441 + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d +.inst 0xcec082f6 + ext v7.16b,v18.16b,v19.16b,#8 +.inst 0xce6680a0 +.inst 0xce678ab6 + add v2.2d,v4.2d,v0.2d +.inst 0xce618480 + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d +.inst 0xcec08217 + ext v7.16b,v19.16b,v20.16b,#8 +.inst 0xce6680a3 +.inst 0xce678ad7 + add v4.2d,v1.2d,v3.2d +.inst 0xce608423 + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d +.inst 0xcec08230 + ext v7.16b,v20.16b,v21.16b,#8 +.inst 0xce6680a2 +.inst 0xce678af0 + add v1.2d,v0.2d,v2.2d +.inst 0xce638402 + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d +.inst 0xcec08251 + ext v7.16b,v21.16b,v22.16b,#8 +.inst 0xce6680a4 +.inst 0xce678a11 + add v0.2d,v3.2d,v4.2d +.inst 0xce628464 + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d +.inst 0xcec08272 + ext v7.16b,v22.16b,v23.16b,#8 +.inst 0xce6680a1 +.inst 0xce678a32 + add v3.2d,v2.2d,v1.2d +.inst 0xce648441 + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d +.inst 0xcec08293 + ext v7.16b,v23.16b,v16.16b,#8 +.inst 0xce6680a0 +.inst 0xce678a53 + add v2.2d,v4.2d,v0.2d +.inst 0xce618480 + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d +.inst 0xcec082b4 + ext v7.16b,v16.16b,v17.16b,#8 +.inst 0xce6680a3 +.inst 0xce678a74 + add v4.2d,v1.2d,v3.2d +.inst 0xce608423 + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d +.inst 0xcec082d5 + ext v7.16b,v17.16b,v18.16b,#8 +.inst 0xce6680a2 +.inst 0xce678a95 + add v1.2d,v0.2d,v2.2d +.inst 0xce638402 + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d +.inst 0xcec082f6 + ext v7.16b,v18.16b,v19.16b,#8 +.inst 0xce6680a4 +.inst 0xce678ab6 + add v0.2d,v3.2d,v4.2d +.inst 0xce628464 + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d +.inst 0xcec08217 + ext v7.16b,v19.16b,v20.16b,#8 +.inst 0xce6680a1 +.inst 0xce678ad7 + add v3.2d,v2.2d,v1.2d +.inst 0xce648441 + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d +.inst 0xcec08230 + ext v7.16b,v20.16b,v21.16b,#8 +.inst 0xce6680a0 +.inst 0xce678af0 + add v2.2d,v4.2d,v0.2d +.inst 0xce618480 + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d +.inst 0xcec08251 + ext v7.16b,v21.16b,v22.16b,#8 +.inst 0xce6680a3 +.inst 0xce678a11 + add v4.2d,v1.2d,v3.2d +.inst 0xce608423 + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d +.inst 0xcec08272 + ext v7.16b,v22.16b,v23.16b,#8 +.inst 0xce6680a2 +.inst 0xce678a32 + add v1.2d,v0.2d,v2.2d +.inst 0xce638402 + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d +.inst 0xcec08293 + ext v7.16b,v23.16b,v16.16b,#8 +.inst 0xce6680a4 +.inst 0xce678a53 + add v0.2d,v3.2d,v4.2d +.inst 0xce628464 + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d +.inst 0xcec082b4 + ext v7.16b,v16.16b,v17.16b,#8 +.inst 0xce6680a1 +.inst 0xce678a74 + add v3.2d,v2.2d,v1.2d +.inst 0xce648441 + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d +.inst 0xcec082d5 + ext v7.16b,v17.16b,v18.16b,#8 +.inst 0xce6680a0 +.inst 0xce678a95 + add v2.2d,v4.2d,v0.2d +.inst 0xce618480 + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d +.inst 0xcec082f6 + ext v7.16b,v18.16b,v19.16b,#8 +.inst 0xce6680a3 +.inst 0xce678ab6 + add v4.2d,v1.2d,v3.2d +.inst 0xce608423 + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d +.inst 0xcec08217 + ext v7.16b,v19.16b,v20.16b,#8 +.inst 0xce6680a2 +.inst 0xce678ad7 + add v1.2d,v0.2d,v2.2d +.inst 0xce638402 + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v16.2d + ld1 {v16.16b},[x1],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d +.inst 0xce6680a4 + rev64 v16.16b,v16.16b + add v0.2d,v3.2d,v4.2d +.inst 0xce628464 + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v17.2d + ld1 {v17.16b},[x1],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d +.inst 0xce6680a1 + rev64 v17.16b,v17.16b + add v3.2d,v2.2d,v1.2d +.inst 0xce648441 + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v18.2d + ld1 {v18.16b},[x1],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d +.inst 0xce6680a0 + rev64 v18.16b,v18.16b + add v2.2d,v4.2d,v0.2d +.inst 0xce618480 + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v19.2d + ld1 {v19.16b},[x1],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d +.inst 0xce6680a3 + rev64 v19.16b,v19.16b + add v4.2d,v1.2d,v3.2d +.inst 0xce608423 + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v20.2d + ld1 {v20.16b},[x1],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d +.inst 0xce6680a2 + rev64 v20.16b,v20.16b + add v1.2d,v0.2d,v2.2d +.inst 0xce638402 + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v21.2d + ld1 {v21.16b},[x1],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d +.inst 0xce6680a4 + rev64 v21.16b,v21.16b + add v0.2d,v3.2d,v4.2d +.inst 0xce628464 + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v22.2d + ld1 {v22.16b},[x1],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d +.inst 0xce6680a1 + rev64 v22.16b,v22.16b + add v3.2d,v2.2d,v1.2d +.inst 0xce648441 + sub x3,x3,#80*8 + add v25.2d,v25.2d,v23.2d + ld1 {v23.16b},[x1],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d +.inst 0xce6680a0 + rev64 v23.16b,v23.16b + add v2.2d,v4.2d,v0.2d +.inst 0xce618480 + add v0.2d,v0.2d,v26.2d + add v1.2d,v1.2d,v27.2d + add v2.2d,v2.2d,v28.2d + add v3.2d,v3.2d,v29.2d + + cbnz x2,.Loop_hw + + st1 {v0.2d,v1.2d,v2.2d,v3.2d},[x0] + + ldr x29,[sp],#16 + ret +.size sha512_block_armv8,.-sha512_block_armv8 + + +.comm _gnutls_arm_cpuid_s,4,4 .section .note.GNU-stack,"",%progbits diff --git a/lib/accelerated/aarch64/hmac-sha-aarch64.c b/lib/accelerated/aarch64/hmac-sha-aarch64.c index c67ca98f91..47d6c516ce 100644 --- a/lib/accelerated/aarch64/hmac-sha-aarch64.c +++ b/lib/accelerated/aarch64/hmac-sha-aarch64.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -218,6 +218,26 @@ static int wrap_aarch64_hmac_init(gnutls_mac_algorithm_t algo, void **_ctx) return 0; } +static void * +wrap_aarch64_hmac_copy(const void *_ctx) +{ + struct aarch64_hmac_ctx *new_ctx; + const struct aarch64_hmac_ctx *ctx=_ctx; + ptrdiff_t off = (uint8_t *)ctx->ctx_ptr - (uint8_t *)(&ctx->ctx); + + new_ctx = gnutls_malloc(sizeof(struct aarch64_hmac_ctx)); + if (new_ctx == NULL) { + gnutls_assert(); + return NULL; + } + + memcpy(new_ctx, ctx, sizeof(*new_ctx)); + new_ctx->ctx_ptr = (uint8_t *)&new_ctx->ctx + off; + + return new_ctx; +} + + static int wrap_aarch64_hmac_setkey(void *_ctx, const void *key, size_t keylen) { @@ -287,6 +307,7 @@ const gnutls_crypto_mac_st _gnutls_hmac_sha_aarch64 = { .setnonce = NULL, .hash = wrap_aarch64_hmac_update, .output = wrap_aarch64_hmac_output, + .copy = wrap_aarch64_hmac_copy, .deinit = wrap_aarch64_hmac_deinit, .fast = wrap_aarch64_hmac_fast, }; diff --git a/lib/accelerated/aarch64/macosx/aes-aarch64.s b/lib/accelerated/aarch64/macosx/aes-aarch64.s new file mode 100644 index 0000000000..7acabf3f25 --- /dev/null +++ b/lib/accelerated/aarch64/macosx/aes-aarch64.s @@ -0,0 +1,791 @@ +# Copyright (c) 2011-2016, Andy Polyakov +# 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 copyright notices, +# 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 Andy Polyakov nor the names of its +# copyright holder and contributors may be used to endorse or +# promote products derived from this software without specific +# prior written permission. +# +# ALTERNATIVELY, provided that this notice is retained in full, this +# product may be distributed under the terms of the GNU General Public +# License (GPL), in which case the provisions of the GPL apply INSTEAD OF +# those given above. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER 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 COPYRIGHT +# OWNER 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. +# +# *** This file is auto-generated *** +# +# 1 "lib/accelerated/aarch64/macosx/aes-aarch64.s.tmp.S" +# 1 "" +# 1 "" +# 1 "lib/accelerated/aarch64/macosx/aes-aarch64.s.tmp.S" +# 1 "lib/accelerated/aarch64/aarch64-common.h" 1 +# 2 "lib/accelerated/aarch64/macosx/aes-aarch64.s.tmp.S" 2 + + +.text + +.align 5 +Lrcon: +.long 0x01,0x01,0x01,0x01 +.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d +.long 0x1b,0x1b,0x1b,0x1b + +.globl _aes_v8_set_encrypt_key + +.align 5 +_aes_v8_set_encrypt_key: +Lenc_key: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + mov x3,#-1 + cmp x0,#0 + b.eq Lenc_key_abort + cmp x2,#0 + b.eq Lenc_key_abort + mov x3,#-2 + cmp w1,#128 + b.lt Lenc_key_abort + cmp w1,#256 + b.gt Lenc_key_abort + tst w1,#0x3f + b.ne Lenc_key_abort + + adr x3,Lrcon + cmp w1,#192 + + eor v0.16b,v0.16b,v0.16b + ld1 {v3.16b},[x0],#16 + mov w1,#8 + ld1 {v1.4s,v2.4s},[x3],#32 + + b.lt Loop128 + b.eq L192 + b L256 + +.align 4 +Loop128: + tbl v6.16b,{v3.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v3.4s},[x2],#16 + aese v6.16b,v0.16b + subs w1,w1,#1 + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + shl v1.16b,v1.16b,#1 + eor v3.16b,v3.16b,v6.16b + b.ne Loop128 + + ld1 {v1.4s},[x3] + + tbl v6.16b,{v3.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v3.4s},[x2],#16 + aese v6.16b,v0.16b + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + shl v1.16b,v1.16b,#1 + eor v3.16b,v3.16b,v6.16b + + tbl v6.16b,{v3.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v3.4s},[x2],#16 + aese v6.16b,v0.16b + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + eor v3.16b,v3.16b,v6.16b + st1 {v3.4s},[x2] + add x2,x2,#0x50 + + mov w12,#10 + b Ldone + +.align 4 +L192: + ld1 {v4.8b},[x0],#8 + movi v6.16b,#8 + st1 {v3.4s},[x2],#16 + sub v2.16b,v2.16b,v6.16b + +Loop192: + tbl v6.16b,{v4.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v4.8b},[x2],#8 + aese v6.16b,v0.16b + subs w1,w1,#1 + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + + dup v5.4s,v3.s[3] + eor v5.16b,v5.16b,v4.16b + eor v6.16b,v6.16b,v1.16b + ext v4.16b,v0.16b,v4.16b,#12 + shl v1.16b,v1.16b,#1 + eor v4.16b,v4.16b,v5.16b + eor v3.16b,v3.16b,v6.16b + eor v4.16b,v4.16b,v6.16b + st1 {v3.4s},[x2],#16 + b.ne Loop192 + + mov w12,#12 + add x2,x2,#0x20 + b Ldone + +.align 4 +L256: + ld1 {v4.16b},[x0] + mov w1,#7 + mov w12,#14 + st1 {v3.4s},[x2],#16 + +Loop256: + tbl v6.16b,{v4.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v4.4s},[x2],#16 + aese v6.16b,v0.16b + subs w1,w1,#1 + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + shl v1.16b,v1.16b,#1 + eor v3.16b,v3.16b,v6.16b + st1 {v3.4s},[x2],#16 + b.eq Ldone + + dup v6.4s,v3.s[3] + ext v5.16b,v0.16b,v4.16b,#12 + aese v6.16b,v0.16b + + eor v4.16b,v4.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v4.16b,v4.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v4.16b,v4.16b,v5.16b + + eor v4.16b,v4.16b,v6.16b + b Loop256 + +Ldone: + str w12,[x2] + mov x3,#0 + +Lenc_key_abort: + mov x0,x3 + ldr x29,[sp],#16 + ret + + +.globl _aes_v8_set_decrypt_key + +.align 5 +_aes_v8_set_decrypt_key: +.long 0xd503233f + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + bl Lenc_key + + cmp x0,#0 + b.ne Ldec_key_abort + + sub x2,x2,#240 + mov x4,#-16 + add x0,x2,x12,lsl#4 + + ld1 {v0.4s},[x2] + ld1 {v1.4s},[x0] + st1 {v0.4s},[x0],x4 + st1 {v1.4s},[x2],#16 + +Loop_imc: + ld1 {v0.4s},[x2] + ld1 {v1.4s},[x0] + aesimc v0.16b,v0.16b + aesimc v1.16b,v1.16b + st1 {v0.4s},[x0],x4 + st1 {v1.4s},[x2],#16 + cmp x0,x2 + b.hi Loop_imc + + ld1 {v0.4s},[x2] + aesimc v0.16b,v0.16b + st1 {v0.4s},[x0] + + eor x0,x0,x0 +Ldec_key_abort: + ldp x29,x30,[sp],#16 +.long 0xd50323bf + ret + +.globl _aes_v8_encrypt + +.align 5 +_aes_v8_encrypt: + ldr w3,[x2,#240] + ld1 {v0.4s},[x2],#16 + ld1 {v2.16b},[x0] + sub w3,w3,#2 + ld1 {v1.4s},[x2],#16 + +Loop_enc: + aese v2.16b,v0.16b + aesmc v2.16b,v2.16b + ld1 {v0.4s},[x2],#16 + subs w3,w3,#2 + aese v2.16b,v1.16b + aesmc v2.16b,v2.16b + ld1 {v1.4s},[x2],#16 + b.gt Loop_enc + + aese v2.16b,v0.16b + aesmc v2.16b,v2.16b + ld1 {v0.4s},[x2] + aese v2.16b,v1.16b + eor v2.16b,v2.16b,v0.16b + + st1 {v2.16b},[x1] + ret + +.globl _aes_v8_decrypt + +.align 5 +_aes_v8_decrypt: + ldr w3,[x2,#240] + ld1 {v0.4s},[x2],#16 + ld1 {v2.16b},[x0] + sub w3,w3,#2 + ld1 {v1.4s},[x2],#16 + +Loop_dec: + aesd v2.16b,v0.16b + aesimc v2.16b,v2.16b + ld1 {v0.4s},[x2],#16 + subs w3,w3,#2 + aesd v2.16b,v1.16b + aesimc v2.16b,v2.16b + ld1 {v1.4s},[x2],#16 + b.gt Loop_dec + + aesd v2.16b,v0.16b + aesimc v2.16b,v2.16b + ld1 {v0.4s},[x2] + aesd v2.16b,v1.16b + eor v2.16b,v2.16b,v0.16b + + st1 {v2.16b},[x1] + ret + +.globl _aes_v8_cbc_encrypt + +.align 5 +_aes_v8_cbc_encrypt: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + subs x2,x2,#16 + mov x8,#16 + b.lo Lcbc_abort + csel x8,xzr,x8,eq + + cmp w5,#0 + ldr w5,[x3,#240] + and x2,x2,#-16 + ld1 {v6.16b},[x4] + ld1 {v0.16b},[x0],x8 + + ld1 {v16.4s,v17.4s},[x3] + sub w5,w5,#6 + add x7,x3,x5,lsl#4 + sub w5,w5,#2 + ld1 {v18.4s,v19.4s},[x7],#32 + ld1 {v20.4s,v21.4s},[x7],#32 + ld1 {v22.4s,v23.4s},[x7],#32 + ld1 {v7.4s},[x7] + + add x7,x3,#32 + mov w6,w5 + b.eq Lcbc_dec + + cmp w5,#2 + eor v0.16b,v0.16b,v6.16b + eor v5.16b,v16.16b,v7.16b + b.eq Lcbc_enc128 + + ld1 {v2.4s,v3.4s},[x7] + add x7,x3,#16 + add x6,x3,#16*4 + add x12,x3,#16*5 + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + add x14,x3,#16*6 + add x3,x3,#16*7 + b Lenter_cbc_enc + +.align 4 +Loop_cbc_enc: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + st1 {v6.16b},[x1],#16 +Lenter_cbc_enc: + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v2.16b + aesmc v0.16b,v0.16b + ld1 {v16.4s},[x6] + cmp w5,#4 + aese v0.16b,v3.16b + aesmc v0.16b,v0.16b + ld1 {v17.4s},[x12] + b.eq Lcbc_enc192 + + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + ld1 {v16.4s},[x14] + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + ld1 {v17.4s},[x3] + nop + +Lcbc_enc192: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + subs x2,x2,#16 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + csel x8,xzr,x8,eq + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ld1 {v16.16b},[x0],x8 + aese v0.16b,v20.16b + aesmc v0.16b,v0.16b + eor v16.16b,v16.16b,v5.16b + aese v0.16b,v21.16b + aesmc v0.16b,v0.16b + ld1 {v17.4s},[x7] + aese v0.16b,v22.16b + aesmc v0.16b,v0.16b + aese v0.16b,v23.16b + eor v6.16b,v0.16b,v7.16b + b.hs Loop_cbc_enc + + st1 {v6.16b},[x1],#16 + b Lcbc_done + +.align 5 +Lcbc_enc128: + ld1 {v2.4s,v3.4s},[x7] + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + b Lenter_cbc_enc128 +Loop_cbc_enc128: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + st1 {v6.16b},[x1],#16 +Lenter_cbc_enc128: + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + subs x2,x2,#16 + aese v0.16b,v2.16b + aesmc v0.16b,v0.16b + csel x8,xzr,x8,eq + aese v0.16b,v3.16b + aesmc v0.16b,v0.16b + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ld1 {v16.16b},[x0],x8 + aese v0.16b,v20.16b + aesmc v0.16b,v0.16b + aese v0.16b,v21.16b + aesmc v0.16b,v0.16b + aese v0.16b,v22.16b + aesmc v0.16b,v0.16b + eor v16.16b,v16.16b,v5.16b + aese v0.16b,v23.16b + eor v6.16b,v0.16b,v7.16b + b.hs Loop_cbc_enc128 + + st1 {v6.16b},[x1],#16 + b Lcbc_done +.align 5 +Lcbc_dec: + ld1 {v18.16b},[x0],#16 + subs x2,x2,#32 + add w6,w5,#2 + orr v3.16b,v0.16b,v0.16b + orr v1.16b,v0.16b,v0.16b + orr v19.16b,v18.16b,v18.16b + b.lo Lcbc_dec_tail + + orr v1.16b,v18.16b,v18.16b + ld1 {v18.16b},[x0],#16 + orr v2.16b,v0.16b,v0.16b + orr v3.16b,v1.16b,v1.16b + orr v19.16b,v18.16b,v18.16b + +Loop3x_cbc_dec: + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + ld1 {v17.4s},[x7],#16 + b.gt Loop3x_cbc_dec + + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + eor v4.16b,v6.16b,v7.16b + subs x2,x2,#0x30 + eor v5.16b,v2.16b,v7.16b + csel x6,x2,x6,lo + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + eor v17.16b,v3.16b,v7.16b + add x0,x0,x6 + + + orr v6.16b,v19.16b,v19.16b + mov x7,x3 + aesd v0.16b,v20.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v20.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v20.16b + aesimc v18.16b,v18.16b + ld1 {v2.16b},[x0],#16 + aesd v0.16b,v21.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v21.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v21.16b + aesimc v18.16b,v18.16b + ld1 {v3.16b},[x0],#16 + aesd v0.16b,v22.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v22.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v22.16b + aesimc v18.16b,v18.16b + ld1 {v19.16b},[x0],#16 + aesd v0.16b,v23.16b + aesd v1.16b,v23.16b + aesd v18.16b,v23.16b + ld1 {v16.4s},[x7],#16 + add w6,w5,#2 + eor v4.16b,v4.16b,v0.16b + eor v5.16b,v5.16b,v1.16b + eor v18.16b,v18.16b,v17.16b + ld1 {v17.4s},[x7],#16 + st1 {v4.16b},[x1],#16 + orr v0.16b,v2.16b,v2.16b + st1 {v5.16b},[x1],#16 + orr v1.16b,v3.16b,v3.16b + st1 {v18.16b},[x1],#16 + orr v18.16b,v19.16b,v19.16b + b.hs Loop3x_cbc_dec + + cmn x2,#0x30 + b.eq Lcbc_done + nop + +Lcbc_dec_tail: + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + ld1 {v17.4s},[x7],#16 + b.gt Lcbc_dec_tail + + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + aesd v1.16b,v20.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v20.16b + aesimc v18.16b,v18.16b + cmn x2,#0x20 + aesd v1.16b,v21.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v21.16b + aesimc v18.16b,v18.16b + eor v5.16b,v6.16b,v7.16b + aesd v1.16b,v22.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v22.16b + aesimc v18.16b,v18.16b + eor v17.16b,v3.16b,v7.16b + aesd v1.16b,v23.16b + aesd v18.16b,v23.16b + b.eq Lcbc_dec_one + eor v5.16b,v5.16b,v1.16b + eor v17.16b,v17.16b,v18.16b + orr v6.16b,v19.16b,v19.16b + st1 {v5.16b},[x1],#16 + st1 {v17.16b},[x1],#16 + b Lcbc_done + +Lcbc_dec_one: + eor v5.16b,v5.16b,v18.16b + orr v6.16b,v19.16b,v19.16b + st1 {v5.16b},[x1],#16 + +Lcbc_done: + st1 {v6.16b},[x4] +Lcbc_abort: + ldr x29,[sp],#16 + ret + +.globl _aes_v8_ctr32_encrypt_blocks + +.align 5 +_aes_v8_ctr32_encrypt_blocks: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + ldr w5,[x3,#240] + + ldr w8, [x4, #12] + ld1 {v0.4s},[x4] + + ld1 {v16.4s,v17.4s},[x3] + sub w5,w5,#4 + mov x12,#16 + cmp x2,#2 + add x7,x3,x5,lsl#4 + sub w5,w5,#2 + ld1 {v20.4s,v21.4s},[x7],#32 + ld1 {v22.4s,v23.4s},[x7],#32 + ld1 {v7.4s},[x7] + add x7,x3,#32 + mov w6,w5 + csel x12,xzr,x12,lo + + rev w8, w8 + + orr v1.16b,v0.16b,v0.16b + add w10, w8, #1 + orr v18.16b,v0.16b,v0.16b + add w8, w8, #2 + orr v6.16b,v0.16b,v0.16b + rev w10, w10 + mov v1.s[3],w10 + b.ls Lctr32_tail + rev w12, w8 + sub x2,x2,#3 + mov v18.s[3],w12 + b Loop3x_ctr32 + +.align 4 +Loop3x_ctr32: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + aese v18.16b,v16.16b + aesmc v18.16b,v18.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v18.16b,v17.16b + aesmc v18.16b,v18.16b + ld1 {v17.4s},[x7],#16 + b.gt Loop3x_ctr32 + + aese v0.16b,v16.16b + aesmc v4.16b,v0.16b + aese v1.16b,v16.16b + aesmc v5.16b,v1.16b + ld1 {v2.16b},[x0],#16 + orr v0.16b,v6.16b,v6.16b + aese v18.16b,v16.16b + aesmc v18.16b,v18.16b + ld1 {v3.16b},[x0],#16 + orr v1.16b,v6.16b,v6.16b + aese v4.16b,v17.16b + aesmc v4.16b,v4.16b + aese v5.16b,v17.16b + aesmc v5.16b,v5.16b + ld1 {v19.16b},[x0],#16 + mov x7,x3 + aese v18.16b,v17.16b + aesmc v17.16b,v18.16b + orr v18.16b,v6.16b,v6.16b + add w9,w8,#1 + aese v4.16b,v20.16b + aesmc v4.16b,v4.16b + aese v5.16b,v20.16b + aesmc v5.16b,v5.16b + eor v2.16b,v2.16b,v7.16b + add w10,w8,#2 + aese v17.16b,v20.16b + aesmc v17.16b,v17.16b + eor v3.16b,v3.16b,v7.16b + add w8,w8,#3 + aese v4.16b,v21.16b + aesmc v4.16b,v4.16b + aese v5.16b,v21.16b + aesmc v5.16b,v5.16b + eor v19.16b,v19.16b,v7.16b + rev w9,w9 + aese v17.16b,v21.16b + aesmc v17.16b,v17.16b + mov v0.s[3], w9 + rev w10,w10 + aese v4.16b,v22.16b + aesmc v4.16b,v4.16b + aese v5.16b,v22.16b + aesmc v5.16b,v5.16b + mov v1.s[3], w10 + rev w12,w8 + aese v17.16b,v22.16b + aesmc v17.16b,v17.16b + mov v18.s[3], w12 + subs x2,x2,#3 + aese v4.16b,v23.16b + aese v5.16b,v23.16b + aese v17.16b,v23.16b + + eor v2.16b,v2.16b,v4.16b + ld1 {v16.4s},[x7],#16 + st1 {v2.16b},[x1],#16 + eor v3.16b,v3.16b,v5.16b + mov w6,w5 + st1 {v3.16b},[x1],#16 + eor v19.16b,v19.16b,v17.16b + ld1 {v17.4s},[x7],#16 + st1 {v19.16b},[x1],#16 + b.hs Loop3x_ctr32 + + adds x2,x2,#3 + b.eq Lctr32_done + cmp x2,#1 + mov x12,#16 + csel x12,xzr,x12,eq + +Lctr32_tail: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + ld1 {v17.4s},[x7],#16 + b.gt Lctr32_tail + + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + ld1 {v2.16b},[x0],x12 + aese v0.16b,v20.16b + aesmc v0.16b,v0.16b + aese v1.16b,v20.16b + aesmc v1.16b,v1.16b + ld1 {v3.16b},[x0] + aese v0.16b,v21.16b + aesmc v0.16b,v0.16b + aese v1.16b,v21.16b + aesmc v1.16b,v1.16b + eor v2.16b,v2.16b,v7.16b + aese v0.16b,v22.16b + aesmc v0.16b,v0.16b + aese v1.16b,v22.16b + aesmc v1.16b,v1.16b + eor v3.16b,v3.16b,v7.16b + aese v0.16b,v23.16b + aese v1.16b,v23.16b + + cmp x2,#1 + eor v2.16b,v2.16b,v0.16b + eor v3.16b,v3.16b,v1.16b + st1 {v2.16b},[x1],#16 + b.eq Lctr32_done + st1 {v3.16b},[x1] + +Lctr32_done: + ldr x29,[sp],#16 + ret diff --git a/lib/accelerated/aarch64/macosx/ghash-aarch64.s b/lib/accelerated/aarch64/macosx/ghash-aarch64.s new file mode 100644 index 0000000000..bf33773aa8 --- /dev/null +++ b/lib/accelerated/aarch64/macosx/ghash-aarch64.s @@ -0,0 +1,588 @@ +# Copyright (c) 2011-2016, Andy Polyakov +# 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 copyright notices, +# 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 Andy Polyakov nor the names of its +# copyright holder and contributors may be used to endorse or +# promote products derived from this software without specific +# prior written permission. +# +# ALTERNATIVELY, provided that this notice is retained in full, this +# product may be distributed under the terms of the GNU General Public +# License (GPL), in which case the provisions of the GPL apply INSTEAD OF +# those given above. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER 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 COPYRIGHT +# OWNER 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. +# +# *** This file is auto-generated *** +# +# 1 "lib/accelerated/aarch64/macosx/ghash-aarch64.s.tmp.S" +# 1 "" +# 1 "" +# 1 "lib/accelerated/aarch64/macosx/ghash-aarch64.s.tmp.S" +# 1 "lib/accelerated/aarch64/aarch64-common.h" 1 +# 2 "lib/accelerated/aarch64/macosx/ghash-aarch64.s.tmp.S" 2 + + +.text + +.globl _gcm_init_v8 + +.align 4 +_gcm_init_v8: + ld1 {v17.2d},[x1] + movi v19.16b,#0xe1 + shl v19.2d,v19.2d,#57 + ext v3.16b,v17.16b,v17.16b,#8 + ushr v18.2d,v19.2d,#63 + dup v17.4s,v17.s[1] + ext v16.16b,v18.16b,v19.16b,#8 + ushr v18.2d,v3.2d,#63 + sshr v17.4s,v17.4s,#31 + and v18.16b,v18.16b,v16.16b + shl v3.2d,v3.2d,#1 + ext v18.16b,v18.16b,v18.16b,#8 + and v16.16b,v16.16b,v17.16b + orr v3.16b,v3.16b,v18.16b + eor v20.16b,v3.16b,v16.16b + st1 {v20.2d},[x0],#16 + + + ext v16.16b,v20.16b,v20.16b,#8 + pmull v0.1q,v20.1d,v20.1d + eor v16.16b,v16.16b,v20.16b + pmull2 v2.1q,v20.2d,v20.2d + pmull v1.1q,v16.1d,v16.1d + + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d + + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v22.16b,v0.16b,v18.16b + + ext v17.16b,v22.16b,v22.16b,#8 + eor v17.16b,v17.16b,v22.16b + ext v21.16b,v16.16b,v17.16b,#8 + st1 {v21.2d,v22.2d},[x0],#32 + + pmull v0.1q,v20.1d, v22.1d + pmull v5.1q,v22.1d,v22.1d + pmull2 v2.1q,v20.2d, v22.2d + pmull2 v7.1q,v22.2d,v22.2d + pmull v1.1q,v16.1d,v17.1d + pmull v6.1q,v17.1d,v17.1d + + ext v16.16b,v0.16b,v2.16b,#8 + ext v17.16b,v5.16b,v7.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v16.16b + eor v4.16b,v5.16b,v7.16b + eor v6.16b,v6.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d + eor v6.16b,v6.16b,v4.16b + pmull v4.1q,v5.1d,v19.1d + + ins v2.d[0],v1.d[1] + ins v7.d[0],v6.d[1] + ins v1.d[1],v0.d[0] + ins v6.d[1],v5.d[0] + eor v0.16b,v1.16b,v18.16b + eor v5.16b,v6.16b,v4.16b + + ext v18.16b,v0.16b,v0.16b,#8 + ext v4.16b,v5.16b,v5.16b,#8 + pmull v0.1q,v0.1d,v19.1d + pmull v5.1q,v5.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v4.16b,v4.16b,v7.16b + eor v20.16b, v0.16b,v18.16b + eor v22.16b,v5.16b,v4.16b + + ext v16.16b,v20.16b, v20.16b,#8 + ext v17.16b,v22.16b,v22.16b,#8 + eor v16.16b,v16.16b,v20.16b + eor v17.16b,v17.16b,v22.16b + ext v21.16b,v16.16b,v17.16b,#8 + st1 {v20.2d,v21.2d,v22.2d},[x0] + ret + +.globl _gcm_gmult_v8 + +.align 4 +_gcm_gmult_v8: + ld1 {v17.2d},[x0] + movi v19.16b,#0xe1 + ld1 {v20.2d,v21.2d},[x1] + shl v19.2d,v19.2d,#57 + + rev64 v17.16b,v17.16b + + ext v3.16b,v17.16b,v17.16b,#8 + + pmull v0.1q,v20.1d,v3.1d + eor v17.16b,v17.16b,v3.16b + pmull2 v2.1q,v20.2d,v3.2d + pmull v1.1q,v21.1d,v17.1d + + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d + + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + + + rev64 v0.16b,v0.16b + + ext v0.16b,v0.16b,v0.16b,#8 + st1 {v0.2d},[x0] + + ret + +.globl _gcm_ghash_v8 + +.align 4 +_gcm_ghash_v8: + cmp x3,#64 + b.hs Lgcm_ghash_v8_4x + ld1 {v0.2d},[x0] + + + + + + subs x3,x3,#32 + mov x12,#16 +# 159 "lib/accelerated/aarch64/macosx/ghash-aarch64.s.tmp.S" + ld1 {v20.2d,v21.2d},[x1],#32 + movi v19.16b,#0xe1 + ld1 {v22.2d},[x1] + csel x12,xzr,x12,eq + ext v0.16b,v0.16b,v0.16b,#8 + ld1 {v16.2d},[x2],#16 + shl v19.2d,v19.2d,#57 + + rev64 v16.16b,v16.16b + rev64 v0.16b,v0.16b + + ext v3.16b,v16.16b,v16.16b,#8 + b.lo Lodd_tail_v8 + ld1 {v17.2d},[x2],x12 + + rev64 v17.16b,v17.16b + + ext v7.16b,v17.16b,v17.16b,#8 + eor v3.16b,v3.16b,v0.16b + pmull v4.1q,v20.1d,v7.1d + eor v17.16b,v17.16b,v7.16b + pmull2 v6.1q,v20.2d,v7.2d + b Loop_mod2x_v8 + +.align 4 +Loop_mod2x_v8: + ext v18.16b,v3.16b,v3.16b,#8 + subs x3,x3,#32 + pmull v0.1q,v22.1d,v3.1d + csel x12,xzr,x12,lo + + pmull v5.1q,v21.1d,v17.1d + eor v18.16b,v18.16b,v3.16b + pmull2 v2.1q,v22.2d,v3.2d + eor v0.16b,v0.16b,v4.16b + pmull2 v1.1q,v21.2d,v18.2d + ld1 {v16.2d},[x2],x12 + + eor v2.16b,v2.16b,v6.16b + csel x12,xzr,x12,eq + eor v1.16b,v1.16b,v5.16b + + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v17.2d},[x2],x12 + + rev64 v16.16b,v16.16b + + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d + + + rev64 v17.16b,v17.16b + + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + ext v7.16b,v17.16b,v17.16b,#8 + ext v3.16b,v16.16b,v16.16b,#8 + eor v0.16b,v1.16b,v18.16b + pmull v4.1q,v20.1d,v7.1d + eor v3.16b,v3.16b,v2.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v3.16b,v3.16b,v18.16b + eor v17.16b,v17.16b,v7.16b + eor v3.16b,v3.16b,v0.16b + pmull2 v6.1q,v20.2d,v7.2d + b.hs Loop_mod2x_v8 + + eor v2.16b,v2.16b,v18.16b + ext v3.16b,v16.16b,v16.16b,#8 + adds x3,x3,#32 + eor v0.16b,v0.16b,v2.16b + b.eq Ldone_v8 +Lodd_tail_v8: + ext v18.16b,v0.16b,v0.16b,#8 + eor v3.16b,v3.16b,v0.16b + eor v17.16b,v16.16b,v18.16b + + pmull v0.1q,v20.1d,v3.1d + eor v17.16b,v17.16b,v3.16b + pmull2 v2.1q,v20.2d,v3.2d + pmull v1.1q,v21.1d,v17.1d + + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d + + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + +Ldone_v8: + + rev64 v0.16b,v0.16b + + ext v0.16b,v0.16b,v0.16b,#8 + st1 {v0.2d},[x0] + + ret + + +.align 4 +gcm_ghash_v8_4x: +Lgcm_ghash_v8_4x: + ld1 {v0.2d},[x0] + ld1 {v20.2d,v21.2d,v22.2d},[x1],#48 + movi v19.16b,#0xe1 + ld1 {v26.2d,v27.2d,v28.2d},[x1] + shl v19.2d,v19.2d,#57 + + ld1 {v4.2d,v5.2d,v6.2d,v7.2d},[x2],#64 + + rev64 v0.16b,v0.16b + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v7.16b,v7.16b + rev64 v4.16b,v4.16b + + ext v25.16b,v7.16b,v7.16b,#8 + ext v24.16b,v6.16b,v6.16b,#8 + ext v23.16b,v5.16b,v5.16b,#8 + + pmull v29.1q,v20.1d,v25.1d + eor v7.16b,v7.16b,v25.16b + pmull2 v31.1q,v20.2d,v25.2d + pmull v30.1q,v21.1d,v7.1d + + pmull v16.1q,v22.1d,v24.1d + eor v6.16b,v6.16b,v24.16b + pmull2 v24.1q,v22.2d,v24.2d + pmull2 v6.1q,v21.2d,v6.2d + + eor v29.16b,v29.16b,v16.16b + eor v31.16b,v31.16b,v24.16b + eor v30.16b,v30.16b,v6.16b + + pmull v7.1q,v26.1d,v23.1d + eor v5.16b,v5.16b,v23.16b + pmull2 v23.1q,v26.2d,v23.2d + pmull v5.1q,v27.1d,v5.1d + + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + eor v30.16b,v30.16b,v5.16b + + subs x3,x3,#128 + b.lo Ltail4x + + b Loop4x + +.align 4 +Loop4x: + eor v16.16b,v4.16b,v0.16b + ld1 {v4.2d,v5.2d,v6.2d,v7.2d},[x2],#64 + ext v3.16b,v16.16b,v16.16b,#8 + + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v7.16b,v7.16b + rev64 v4.16b,v4.16b + + + pmull v0.1q,v28.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v28.2d,v3.2d + ext v25.16b,v7.16b,v7.16b,#8 + pmull2 v1.1q,v27.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + ext v24.16b,v6.16b,v6.16b,#8 + eor v1.16b,v1.16b,v30.16b + ext v23.16b,v5.16b,v5.16b,#8 + + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + pmull v29.1q,v20.1d,v25.1d + eor v7.16b,v7.16b,v25.16b + eor v1.16b,v1.16b,v17.16b + pmull2 v31.1q,v20.2d,v25.2d + eor v1.16b,v1.16b,v18.16b + pmull v30.1q,v21.1d,v7.1d + + pmull v18.1q,v0.1d,v19.1d + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + pmull v16.1q,v22.1d,v24.1d + eor v6.16b,v6.16b,v24.16b + pmull2 v24.1q,v22.2d,v24.2d + eor v0.16b,v1.16b,v18.16b + pmull2 v6.1q,v21.2d,v6.2d + + eor v29.16b,v29.16b,v16.16b + eor v31.16b,v31.16b,v24.16b + eor v30.16b,v30.16b,v6.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + pmull v7.1q,v26.1d,v23.1d + eor v5.16b,v5.16b,v23.16b + eor v18.16b,v18.16b,v2.16b + pmull2 v23.1q,v26.2d,v23.2d + pmull v5.1q,v27.1d,v5.1d + + eor v0.16b,v0.16b,v18.16b + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + ext v0.16b,v0.16b,v0.16b,#8 + eor v30.16b,v30.16b,v5.16b + + subs x3,x3,#64 + b.hs Loop4x + +Ltail4x: + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull v0.1q,v28.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v28.2d,v3.2d + pmull2 v1.1q,v27.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + + adds x3,x3,#64 + b.eq Ldone4x + + cmp x3,#32 + b.lo Lone + b.eq Ltwo +Lthree: + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d,v5.2d,v6.2d},[x2] + eor v1.16b,v1.16b,v18.16b + + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v4.16b,v4.16b + + + pmull v18.1q,v0.1d,v19.1d + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + ext v24.16b,v6.16b,v6.16b,#8 + ext v23.16b,v5.16b,v5.16b,#8 + eor v0.16b,v1.16b,v18.16b + + pmull v29.1q,v20.1d,v24.1d + eor v6.16b,v6.16b,v24.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + pmull2 v31.1q,v20.2d,v24.2d + pmull v30.1q,v21.1d,v6.1d + eor v0.16b,v0.16b,v18.16b + pmull v7.1q,v22.1d,v23.1d + eor v5.16b,v5.16b,v23.16b + ext v0.16b,v0.16b,v0.16b,#8 + + pmull2 v23.1q,v22.2d,v23.2d + eor v16.16b,v4.16b,v0.16b + pmull2 v5.1q,v21.2d,v5.2d + ext v3.16b,v16.16b,v16.16b,#8 + + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + eor v30.16b,v30.16b,v5.16b + + pmull v0.1q,v26.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v26.2d,v3.2d + pmull v1.1q,v27.1d,v16.1d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + b Ldone4x + +.align 4 +Ltwo: + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d,v5.2d},[x2] + eor v1.16b,v1.16b,v18.16b + + rev64 v5.16b,v5.16b + rev64 v4.16b,v4.16b + + + pmull v18.1q,v0.1d,v19.1d + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + ext v23.16b,v5.16b,v5.16b,#8 + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + + pmull v29.1q,v20.1d,v23.1d + eor v5.16b,v5.16b,v23.16b + + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull2 v31.1q,v20.2d,v23.2d + pmull v30.1q,v21.1d,v5.1d + + pmull v0.1q,v22.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v22.2d,v3.2d + pmull2 v1.1q,v21.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + b Ldone4x + +.align 4 +Lone: + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d},[x2] + eor v1.16b,v1.16b,v18.16b + + rev64 v4.16b,v4.16b + + + pmull v18.1q,v0.1d,v19.1d + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull v0.1q,v20.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v20.2d,v3.2d + pmull v1.1q,v21.1d,v16.1d + +Ldone4x: + ext v17.16b,v0.16b,v2.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + + pmull v18.1q,v0.1d,v19.1d + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + + + rev64 v0.16b,v0.16b + + st1 {v0.2d},[x0] + + ret + +.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 diff --git a/lib/accelerated/aarch64/macosx/sha1-armv8.s b/lib/accelerated/aarch64/macosx/sha1-armv8.s new file mode 100644 index 0000000000..8e1e12edf6 --- /dev/null +++ b/lib/accelerated/aarch64/macosx/sha1-armv8.s @@ -0,0 +1,1265 @@ +# Copyright (c) 2011-2016, Andy Polyakov +# 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 copyright notices, +# 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 Andy Polyakov nor the names of its +# copyright holder and contributors may be used to endorse or +# promote products derived from this software without specific +# prior written permission. +# +# ALTERNATIVELY, provided that this notice is retained in full, this +# product may be distributed under the terms of the GNU General Public +# License (GPL), in which case the provisions of the GPL apply INSTEAD OF +# those given above. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER 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 COPYRIGHT +# OWNER 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. +# +# *** This file is auto-generated *** +# +# 1 "lib/accelerated/aarch64/macosx/sha1-armv8.s.tmp.S" +# 1 "" +# 1 "" +# 1 "lib/accelerated/aarch64/macosx/sha1-armv8.s.tmp.S" +# 1 "lib/accelerated/aarch64/aarch64-common.h" 1 +# 2 "lib/accelerated/aarch64/macosx/sha1-armv8.s.tmp.S" 2 + +.text + + +.globl _sha1_block_data_order + +.align 6 +_sha1_block_data_order: + + + + ldr x16,L_gnutls_arm_cpuid_s + + adr x17,L_gnutls_arm_cpuid_s + add x16,x16,x17 + ldr w16,[x16] + tst w16,#(1<<3) + b.ne Lv8_entry + + stp x29,x30,[sp,#-96]! + 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] + + ldp w20,w21,[x0] + ldp w22,w23,[x0,#8] + ldr w24,[x0,#16] + +Loop: + ldr x3,[x1],#64 + movz w28,#0x7999 + sub x2,x2,#1 + movk w28,#0x5a82,lsl#16 + + + + rev32 x3,x3 + + add w24,w24,w28 + add w24,w24,w3 + lsr x4,x3,#32 + ldr x5,[x1,#-56] + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + add w23,w23,w28 + orr w25,w25,w26 + add w24,w24,w27 + ror w21,w21,#2 + add w23,w23,w4 + add w24,w24,w25 + + + + rev32 x5,x5 + + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + add w22,w22,w28 + orr w25,w25,w26 + add w23,w23,w27 + ror w20,w20,#2 + add w22,w22,w5 + add w23,w23,w25 + lsr x6,x5,#32 + ldr x7,[x1,#-48] + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + add w21,w21,w28 + orr w25,w25,w26 + add w22,w22,w27 + ror w24,w24,#2 + add w21,w21,w6 + add w22,w22,w25 + + + + rev32 x7,x7 + + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + add w20,w20,w28 + orr w25,w25,w26 + add w21,w21,w27 + ror w23,w23,#2 + add w20,w20,w7 + add w21,w21,w25 + lsr x8,x7,#32 + ldr x9,[x1,#-40] + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + add w24,w24,w28 + orr w25,w25,w26 + add w20,w20,w27 + ror w22,w22,#2 + add w24,w24,w8 + add w20,w20,w25 + + + + rev32 x9,x9 + + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + add w23,w23,w28 + orr w25,w25,w26 + add w24,w24,w27 + ror w21,w21,#2 + add w23,w23,w9 + add w24,w24,w25 + lsr x10,x9,#32 + ldr x11,[x1,#-32] + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + add w22,w22,w28 + orr w25,w25,w26 + add w23,w23,w27 + ror w20,w20,#2 + add w22,w22,w10 + add w23,w23,w25 + + + + rev32 x11,x11 + + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + add w21,w21,w28 + orr w25,w25,w26 + add w22,w22,w27 + ror w24,w24,#2 + add w21,w21,w11 + add w22,w22,w25 + lsr x12,x11,#32 + ldr x13,[x1,#-24] + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + add w20,w20,w28 + orr w25,w25,w26 + add w21,w21,w27 + ror w23,w23,#2 + add w20,w20,w12 + add w21,w21,w25 + + + + rev32 x13,x13 + + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + add w24,w24,w28 + orr w25,w25,w26 + add w20,w20,w27 + ror w22,w22,#2 + add w24,w24,w13 + add w20,w20,w25 + lsr x14,x13,#32 + ldr x15,[x1,#-16] + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + add w23,w23,w28 + orr w25,w25,w26 + add w24,w24,w27 + ror w21,w21,#2 + add w23,w23,w14 + add w24,w24,w25 + + + + rev32 x15,x15 + + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + add w22,w22,w28 + orr w25,w25,w26 + add w23,w23,w27 + ror w20,w20,#2 + add w22,w22,w15 + add w23,w23,w25 + lsr x16,x15,#32 + ldr x17,[x1,#-8] + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + add w21,w21,w28 + orr w25,w25,w26 + add w22,w22,w27 + ror w24,w24,#2 + add w21,w21,w16 + add w22,w22,w25 + + + + rev32 x17,x17 + + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + add w20,w20,w28 + orr w25,w25,w26 + add w21,w21,w27 + ror w23,w23,#2 + add w20,w20,w17 + add w21,w21,w25 + lsr x19,x17,#32 + eor w3,w3,w5 + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + eor w3,w3,w11 + add w24,w24,w28 + orr w25,w25,w26 + add w20,w20,w27 + eor w3,w3,w16 + ror w22,w22,#2 + add w24,w24,w19 + add w20,w20,w25 + ror w3,w3,#31 + eor w4,w4,w6 + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + eor w4,w4,w12 + add w23,w23,w28 + orr w25,w25,w26 + add w24,w24,w27 + eor w4,w4,w17 + ror w21,w21,#2 + add w23,w23,w3 + add w24,w24,w25 + ror w4,w4,#31 + eor w5,w5,w7 + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + eor w5,w5,w13 + add w22,w22,w28 + orr w25,w25,w26 + add w23,w23,w27 + eor w5,w5,w19 + ror w20,w20,#2 + add w22,w22,w4 + add w23,w23,w25 + ror w5,w5,#31 + eor w6,w6,w8 + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + eor w6,w6,w14 + add w21,w21,w28 + orr w25,w25,w26 + add w22,w22,w27 + eor w6,w6,w3 + ror w24,w24,#2 + add w21,w21,w5 + add w22,w22,w25 + ror w6,w6,#31 + eor w7,w7,w9 + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + eor w7,w7,w15 + add w20,w20,w28 + orr w25,w25,w26 + add w21,w21,w27 + eor w7,w7,w4 + ror w23,w23,#2 + add w20,w20,w6 + add w21,w21,w25 + ror w7,w7,#31 + movz w28,#0xeba1 + movk w28,#0x6ed9,lsl#16 + eor w8,w8,w10 + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + eor w8,w8,w16 + add w24,w24,w28 + orr w25,w25,w26 + add w20,w20,w27 + eor w8,w8,w5 + ror w22,w22,#2 + add w24,w24,w7 + add w20,w20,w25 + ror w8,w8,#31 + eor w9,w9,w11 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 + eor w9,w9,w17 + eor w25,w25,w22 + add w24,w24,w27 + ror w21,w21,#2 + eor w9,w9,w6 + add w23,w23,w8 + add w24,w24,w25 + ror w9,w9,#31 + eor w10,w10,w12 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 + eor w10,w10,w19 + eor w25,w25,w21 + add w23,w23,w27 + ror w20,w20,#2 + eor w10,w10,w7 + add w22,w22,w9 + add w23,w23,w25 + ror w10,w10,#31 + eor w11,w11,w13 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 + eor w11,w11,w3 + eor w25,w25,w20 + add w22,w22,w27 + ror w24,w24,#2 + eor w11,w11,w8 + add w21,w21,w10 + add w22,w22,w25 + ror w11,w11,#31 + eor w12,w12,w14 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 + eor w12,w12,w4 + eor w25,w25,w24 + add w21,w21,w27 + ror w23,w23,#2 + eor w12,w12,w9 + add w20,w20,w11 + add w21,w21,w25 + ror w12,w12,#31 + eor w13,w13,w15 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 + eor w13,w13,w5 + eor w25,w25,w23 + add w20,w20,w27 + ror w22,w22,#2 + eor w13,w13,w10 + add w24,w24,w12 + add w20,w20,w25 + ror w13,w13,#31 + eor w14,w14,w16 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 + eor w14,w14,w6 + eor w25,w25,w22 + add w24,w24,w27 + ror w21,w21,#2 + eor w14,w14,w11 + add w23,w23,w13 + add w24,w24,w25 + ror w14,w14,#31 + eor w15,w15,w17 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 + eor w15,w15,w7 + eor w25,w25,w21 + add w23,w23,w27 + ror w20,w20,#2 + eor w15,w15,w12 + add w22,w22,w14 + add w23,w23,w25 + ror w15,w15,#31 + eor w16,w16,w19 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 + eor w16,w16,w8 + eor w25,w25,w20 + add w22,w22,w27 + ror w24,w24,#2 + eor w16,w16,w13 + add w21,w21,w15 + add w22,w22,w25 + ror w16,w16,#31 + eor w17,w17,w3 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 + eor w17,w17,w9 + eor w25,w25,w24 + add w21,w21,w27 + ror w23,w23,#2 + eor w17,w17,w14 + add w20,w20,w16 + add w21,w21,w25 + ror w17,w17,#31 + eor w19,w19,w4 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 + eor w19,w19,w10 + eor w25,w25,w23 + add w20,w20,w27 + ror w22,w22,#2 + eor w19,w19,w15 + add w24,w24,w17 + add w20,w20,w25 + ror w19,w19,#31 + eor w3,w3,w5 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 + eor w3,w3,w11 + eor w25,w25,w22 + add w24,w24,w27 + ror w21,w21,#2 + eor w3,w3,w16 + add w23,w23,w19 + add w24,w24,w25 + ror w3,w3,#31 + eor w4,w4,w6 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 + eor w4,w4,w12 + eor w25,w25,w21 + add w23,w23,w27 + ror w20,w20,#2 + eor w4,w4,w17 + add w22,w22,w3 + add w23,w23,w25 + ror w4,w4,#31 + eor w5,w5,w7 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 + eor w5,w5,w13 + eor w25,w25,w20 + add w22,w22,w27 + ror w24,w24,#2 + eor w5,w5,w19 + add w21,w21,w4 + add w22,w22,w25 + ror w5,w5,#31 + eor w6,w6,w8 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 + eor w6,w6,w14 + eor w25,w25,w24 + add w21,w21,w27 + ror w23,w23,#2 + eor w6,w6,w3 + add w20,w20,w5 + add w21,w21,w25 + ror w6,w6,#31 + eor w7,w7,w9 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 + eor w7,w7,w15 + eor w25,w25,w23 + add w20,w20,w27 + ror w22,w22,#2 + eor w7,w7,w4 + add w24,w24,w6 + add w20,w20,w25 + ror w7,w7,#31 + eor w8,w8,w10 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 + eor w8,w8,w16 + eor w25,w25,w22 + add w24,w24,w27 + ror w21,w21,#2 + eor w8,w8,w5 + add w23,w23,w7 + add w24,w24,w25 + ror w8,w8,#31 + eor w9,w9,w11 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 + eor w9,w9,w17 + eor w25,w25,w21 + add w23,w23,w27 + ror w20,w20,#2 + eor w9,w9,w6 + add w22,w22,w8 + add w23,w23,w25 + ror w9,w9,#31 + eor w10,w10,w12 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 + eor w10,w10,w19 + eor w25,w25,w20 + add w22,w22,w27 + ror w24,w24,#2 + eor w10,w10,w7 + add w21,w21,w9 + add w22,w22,w25 + ror w10,w10,#31 + eor w11,w11,w13 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 + eor w11,w11,w3 + eor w25,w25,w24 + add w21,w21,w27 + ror w23,w23,#2 + eor w11,w11,w8 + add w20,w20,w10 + add w21,w21,w25 + ror w11,w11,#31 + movz w28,#0xbcdc + movk w28,#0x8f1b,lsl#16 + eor w12,w12,w14 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 + eor w12,w12,w4 + eor w25,w25,w23 + add w20,w20,w27 + ror w22,w22,#2 + eor w12,w12,w9 + add w24,w24,w11 + add w20,w20,w25 + ror w12,w12,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w13,w13,w15 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 + eor w13,w13,w5 + add w24,w24,w27 + orr w25,w25,w26 + ror w21,w21,#2 + eor w13,w13,w10 + add w23,w23,w12 + add w24,w24,w25 + ror w13,w13,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w14,w14,w16 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 + eor w14,w14,w6 + add w23,w23,w27 + orr w25,w25,w26 + ror w20,w20,#2 + eor w14,w14,w11 + add w22,w22,w13 + add w23,w23,w25 + ror w14,w14,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w15,w15,w17 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 + eor w15,w15,w7 + add w22,w22,w27 + orr w25,w25,w26 + ror w24,w24,#2 + eor w15,w15,w12 + add w21,w21,w14 + add w22,w22,w25 + ror w15,w15,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w16,w16,w19 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 + eor w16,w16,w8 + add w21,w21,w27 + orr w25,w25,w26 + ror w23,w23,#2 + eor w16,w16,w13 + add w20,w20,w15 + add w21,w21,w25 + ror w16,w16,#31 + orr w25,w22,w23 + and w26,w22,w23 + eor w17,w17,w3 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 + eor w17,w17,w9 + add w20,w20,w27 + orr w25,w25,w26 + ror w22,w22,#2 + eor w17,w17,w14 + add w24,w24,w16 + add w20,w20,w25 + ror w17,w17,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w19,w19,w4 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 + eor w19,w19,w10 + add w24,w24,w27 + orr w25,w25,w26 + ror w21,w21,#2 + eor w19,w19,w15 + add w23,w23,w17 + add w24,w24,w25 + ror w19,w19,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w3,w3,w5 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 + eor w3,w3,w11 + add w23,w23,w27 + orr w25,w25,w26 + ror w20,w20,#2 + eor w3,w3,w16 + add w22,w22,w19 + add w23,w23,w25 + ror w3,w3,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w4,w4,w6 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 + eor w4,w4,w12 + add w22,w22,w27 + orr w25,w25,w26 + ror w24,w24,#2 + eor w4,w4,w17 + add w21,w21,w3 + add w22,w22,w25 + ror w4,w4,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w5,w5,w7 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 + eor w5,w5,w13 + add w21,w21,w27 + orr w25,w25,w26 + ror w23,w23,#2 + eor w5,w5,w19 + add w20,w20,w4 + add w21,w21,w25 + ror w5,w5,#31 + orr w25,w22,w23 + and w26,w22,w23 + eor w6,w6,w8 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 + eor w6,w6,w14 + add w20,w20,w27 + orr w25,w25,w26 + ror w22,w22,#2 + eor w6,w6,w3 + add w24,w24,w5 + add w20,w20,w25 + ror w6,w6,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w7,w7,w9 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 + eor w7,w7,w15 + add w24,w24,w27 + orr w25,w25,w26 + ror w21,w21,#2 + eor w7,w7,w4 + add w23,w23,w6 + add w24,w24,w25 + ror w7,w7,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w8,w8,w10 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 + eor w8,w8,w16 + add w23,w23,w27 + orr w25,w25,w26 + ror w20,w20,#2 + eor w8,w8,w5 + add w22,w22,w7 + add w23,w23,w25 + ror w8,w8,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w9,w9,w11 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 + eor w9,w9,w17 + add w22,w22,w27 + orr w25,w25,w26 + ror w24,w24,#2 + eor w9,w9,w6 + add w21,w21,w8 + add w22,w22,w25 + ror w9,w9,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w10,w10,w12 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 + eor w10,w10,w19 + add w21,w21,w27 + orr w25,w25,w26 + ror w23,w23,#2 + eor w10,w10,w7 + add w20,w20,w9 + add w21,w21,w25 + ror w10,w10,#31 + orr w25,w22,w23 + and w26,w22,w23 + eor w11,w11,w13 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 + eor w11,w11,w3 + add w20,w20,w27 + orr w25,w25,w26 + ror w22,w22,#2 + eor w11,w11,w8 + add w24,w24,w10 + add w20,w20,w25 + ror w11,w11,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w12,w12,w14 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 + eor w12,w12,w4 + add w24,w24,w27 + orr w25,w25,w26 + ror w21,w21,#2 + eor w12,w12,w9 + add w23,w23,w11 + add w24,w24,w25 + ror w12,w12,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w13,w13,w15 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 + eor w13,w13,w5 + add w23,w23,w27 + orr w25,w25,w26 + ror w20,w20,#2 + eor w13,w13,w10 + add w22,w22,w12 + add w23,w23,w25 + ror w13,w13,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w14,w14,w16 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 + eor w14,w14,w6 + add w22,w22,w27 + orr w25,w25,w26 + ror w24,w24,#2 + eor w14,w14,w11 + add w21,w21,w13 + add w22,w22,w25 + ror w14,w14,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w15,w15,w17 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 + eor w15,w15,w7 + add w21,w21,w27 + orr w25,w25,w26 + ror w23,w23,#2 + eor w15,w15,w12 + add w20,w20,w14 + add w21,w21,w25 + ror w15,w15,#31 + movz w28,#0xc1d6 + movk w28,#0xca62,lsl#16 + orr w25,w22,w23 + and w26,w22,w23 + eor w16,w16,w19 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 + eor w16,w16,w8 + add w20,w20,w27 + orr w25,w25,w26 + ror w22,w22,#2 + eor w16,w16,w13 + add w24,w24,w15 + add w20,w20,w25 + ror w16,w16,#31 + eor w17,w17,w3 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 + eor w17,w17,w9 + eor w25,w25,w22 + add w24,w24,w27 + ror w21,w21,#2 + eor w17,w17,w14 + add w23,w23,w16 + add w24,w24,w25 + ror w17,w17,#31 + eor w19,w19,w4 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 + eor w19,w19,w10 + eor w25,w25,w21 + add w23,w23,w27 + ror w20,w20,#2 + eor w19,w19,w15 + add w22,w22,w17 + add w23,w23,w25 + ror w19,w19,#31 + eor w3,w3,w5 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 + eor w3,w3,w11 + eor w25,w25,w20 + add w22,w22,w27 + ror w24,w24,#2 + eor w3,w3,w16 + add w21,w21,w19 + add w22,w22,w25 + ror w3,w3,#31 + eor w4,w4,w6 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 + eor w4,w4,w12 + eor w25,w25,w24 + add w21,w21,w27 + ror w23,w23,#2 + eor w4,w4,w17 + add w20,w20,w3 + add w21,w21,w25 + ror w4,w4,#31 + eor w5,w5,w7 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 + eor w5,w5,w13 + eor w25,w25,w23 + add w20,w20,w27 + ror w22,w22,#2 + eor w5,w5,w19 + add w24,w24,w4 + add w20,w20,w25 + ror w5,w5,#31 + eor w6,w6,w8 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 + eor w6,w6,w14 + eor w25,w25,w22 + add w24,w24,w27 + ror w21,w21,#2 + eor w6,w6,w3 + add w23,w23,w5 + add w24,w24,w25 + ror w6,w6,#31 + eor w7,w7,w9 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 + eor w7,w7,w15 + eor w25,w25,w21 + add w23,w23,w27 + ror w20,w20,#2 + eor w7,w7,w4 + add w22,w22,w6 + add w23,w23,w25 + ror w7,w7,#31 + eor w8,w8,w10 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 + eor w8,w8,w16 + eor w25,w25,w20 + add w22,w22,w27 + ror w24,w24,#2 + eor w8,w8,w5 + add w21,w21,w7 + add w22,w22,w25 + ror w8,w8,#31 + eor w9,w9,w11 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 + eor w9,w9,w17 + eor w25,w25,w24 + add w21,w21,w27 + ror w23,w23,#2 + eor w9,w9,w6 + add w20,w20,w8 + add w21,w21,w25 + ror w9,w9,#31 + eor w10,w10,w12 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 + eor w10,w10,w19 + eor w25,w25,w23 + add w20,w20,w27 + ror w22,w22,#2 + eor w10,w10,w7 + add w24,w24,w9 + add w20,w20,w25 + ror w10,w10,#31 + eor w11,w11,w13 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 + eor w11,w11,w3 + eor w25,w25,w22 + add w24,w24,w27 + ror w21,w21,#2 + eor w11,w11,w8 + add w23,w23,w10 + add w24,w24,w25 + ror w11,w11,#31 + eor w12,w12,w14 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 + eor w12,w12,w4 + eor w25,w25,w21 + add w23,w23,w27 + ror w20,w20,#2 + eor w12,w12,w9 + add w22,w22,w11 + add w23,w23,w25 + ror w12,w12,#31 + eor w13,w13,w15 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 + eor w13,w13,w5 + eor w25,w25,w20 + add w22,w22,w27 + ror w24,w24,#2 + eor w13,w13,w10 + add w21,w21,w12 + add w22,w22,w25 + ror w13,w13,#31 + eor w14,w14,w16 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 + eor w14,w14,w6 + eor w25,w25,w24 + add w21,w21,w27 + ror w23,w23,#2 + eor w14,w14,w11 + add w20,w20,w13 + add w21,w21,w25 + ror w14,w14,#31 + eor w15,w15,w17 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 + eor w15,w15,w7 + eor w25,w25,w23 + add w20,w20,w27 + ror w22,w22,#2 + eor w15,w15,w12 + add w24,w24,w14 + add w20,w20,w25 + ror w15,w15,#31 + eor w16,w16,w19 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 + eor w16,w16,w8 + eor w25,w25,w22 + add w24,w24,w27 + ror w21,w21,#2 + eor w16,w16,w13 + add w23,w23,w15 + add w24,w24,w25 + ror w16,w16,#31 + eor w17,w17,w3 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 + eor w17,w17,w9 + eor w25,w25,w21 + add w23,w23,w27 + ror w20,w20,#2 + eor w17,w17,w14 + add w22,w22,w16 + add w23,w23,w25 + ror w17,w17,#31 + eor w19,w19,w4 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 + eor w19,w19,w10 + eor w25,w25,w20 + add w22,w22,w27 + ror w24,w24,#2 + eor w19,w19,w15 + add w21,w21,w17 + add w22,w22,w25 + ror w19,w19,#31 + ldp w4,w5,[x0] + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 + eor w25,w25,w24 + add w21,w21,w27 + ror w23,w23,#2 + add w20,w20,w19 + add w21,w21,w25 + ldp w6,w7,[x0,#8] + eor w25,w24,w22 + ror w27,w21,#27 + eor w25,w25,w23 + add w20,w20,w27 + ror w22,w22,#2 + ldr w8,[x0,#16] + add w20,w20,w25 + add w21,w21,w5 + add w22,w22,w6 + add w20,w20,w4 + add w23,w23,w7 + add w24,w24,w8 + stp w20,w21,[x0] + stp w22,w23,[x0,#8] + str w24,[x0,#16] + cbnz x2,Loop + + ldp x19,x20,[sp,#16] + ldp x21,x22,[sp,#32] + ldp x23,x24,[sp,#48] + ldp x25,x26,[sp,#64] + ldp x27,x28,[sp,#80] + ldr x29,[sp],#96 + ret + + +.align 6 +sha1_block_armv8: +Lv8_entry: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + adr x4,Lconst + eor v1.16b,v1.16b,v1.16b + ld1 {v0.4s},[x0],#16 + ld1 {v1.s}[0],[x0] + sub x0,x0,#16 + ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x4] + +Loop_hw: + ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64 + sub x2,x2,#1 + rev32 v4.16b,v4.16b + rev32 v5.16b,v5.16b + + add v20.4s,v16.4s,v4.4s + rev32 v6.16b,v6.16b + orr v22.16b,v0.16b,v0.16b + + add v21.4s,v16.4s,v5.4s + rev32 v7.16b,v7.16b +.long 0x5e280803 +.long 0x5e140020 + add v20.4s,v16.4s,v6.4s +.long 0x5e0630a4 +.long 0x5e280802 +.long 0x5e150060 + add v21.4s,v16.4s,v7.4s +.long 0x5e2818e4 +.long 0x5e0730c5 +.long 0x5e280803 +.long 0x5e140040 + add v20.4s,v16.4s,v4.4s +.long 0x5e281885 +.long 0x5e0430e6 +.long 0x5e280802 +.long 0x5e150060 + add v21.4s,v17.4s,v5.4s +.long 0x5e2818a6 +.long 0x5e053087 +.long 0x5e280803 +.long 0x5e140040 + add v20.4s,v17.4s,v6.4s +.long 0x5e2818c7 +.long 0x5e0630a4 +.long 0x5e280802 +.long 0x5e151060 + add v21.4s,v17.4s,v7.4s +.long 0x5e2818e4 +.long 0x5e0730c5 +.long 0x5e280803 +.long 0x5e141040 + add v20.4s,v17.4s,v4.4s +.long 0x5e281885 +.long 0x5e0430e6 +.long 0x5e280802 +.long 0x5e151060 + add v21.4s,v17.4s,v5.4s +.long 0x5e2818a6 +.long 0x5e053087 +.long 0x5e280803 +.long 0x5e141040 + add v20.4s,v18.4s,v6.4s +.long 0x5e2818c7 +.long 0x5e0630a4 +.long 0x5e280802 +.long 0x5e151060 + add v21.4s,v18.4s,v7.4s +.long 0x5e2818e4 +.long 0x5e0730c5 +.long 0x5e280803 +.long 0x5e142040 + add v20.4s,v18.4s,v4.4s +.long 0x5e281885 +.long 0x5e0430e6 +.long 0x5e280802 +.long 0x5e152060 + add v21.4s,v18.4s,v5.4s +.long 0x5e2818a6 +.long 0x5e053087 +.long 0x5e280803 +.long 0x5e142040 + add v20.4s,v18.4s,v6.4s +.long 0x5e2818c7 +.long 0x5e0630a4 +.long 0x5e280802 +.long 0x5e152060 + add v21.4s,v19.4s,v7.4s +.long 0x5e2818e4 +.long 0x5e0730c5 +.long 0x5e280803 +.long 0x5e142040 + add v20.4s,v19.4s,v4.4s +.long 0x5e281885 +.long 0x5e0430e6 +.long 0x5e280802 +.long 0x5e151060 + add v21.4s,v19.4s,v5.4s +.long 0x5e2818a6 +.long 0x5e053087 +.long 0x5e280803 +.long 0x5e141040 + add v20.4s,v19.4s,v6.4s +.long 0x5e2818c7 +.long 0x5e280802 +.long 0x5e151060 + add v21.4s,v19.4s,v7.4s + +.long 0x5e280803 +.long 0x5e141040 + +.long 0x5e280802 +.long 0x5e151060 + + add v1.4s,v1.4s,v2.4s + add v0.4s,v0.4s,v22.4s + + cbnz x2,Loop_hw + + st1 {v0.4s},[x0],#16 + st1 {v1.s}[0],[x0] + + ldr x29,[sp],#16 + ret + +.align 6 +Lconst: +.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 +.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 +.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc +.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 +L_gnutls_arm_cpuid_s: + + + +.quad __gnutls_arm_cpuid_s-. + +.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 +.comm __gnutls_arm_cpuid_s,4,4 diff --git a/lib/accelerated/aarch64/macosx/sha256-armv8.s b/lib/accelerated/aarch64/macosx/sha256-armv8.s new file mode 100644 index 0000000000..fc6424975c --- /dev/null +++ b/lib/accelerated/aarch64/macosx/sha256-armv8.s @@ -0,0 +1,2054 @@ +# Copyright (c) 2011-2016, Andy Polyakov +# 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 copyright notices, +# 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 Andy Polyakov nor the names of its +# copyright holder and contributors may be used to endorse or +# promote products derived from this software without specific +# prior written permission. +# +# ALTERNATIVELY, provided that this notice is retained in full, this +# product may be distributed under the terms of the GNU General Public +# License (GPL), in which case the provisions of the GPL apply INSTEAD OF +# those given above. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER 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 COPYRIGHT +# OWNER 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. +# +# *** This file is auto-generated *** +# +# 1 "lib/accelerated/aarch64/macosx/sha256-armv8.s.tmp.S" +# 1 "" +# 1 "" +# 1 "lib/accelerated/aarch64/macosx/sha256-armv8.s.tmp.S" +# 56 "lib/accelerated/aarch64/macosx/sha256-armv8.s.tmp.S" +# 1 "lib/accelerated/aarch64/aarch64-common.h" 1 +# 57 "lib/accelerated/aarch64/macosx/sha256-armv8.s.tmp.S" 2 + + +.text + + +.globl _sha256_block_data_order + +.align 6 +_sha256_block_data_order: + + + + + ldr x16,L_gnutls_arm_cpuid_s + + adr x17,L_gnutls_arm_cpuid_s + add x16,x16,x17 + ldr w16,[x16] + tst w16,#(1<<4) + b.ne Lv8_entry + tst w16,#(1<<0) + b.ne Lneon_entry + +.long 0xd503233f + 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,#4*4 + + ldp w20,w21,[x0] + ldp w22,w23,[x0,#2*4] + ldp w24,w25,[x0,#4*4] + add x2,x1,x2,lsl#6 + ldp w26,w27,[x0,#6*4] + adr x30,LK256 + stp x0,x2,[x29,#96] + +Loop: + ldp w3,w4,[x1],#2*4 + ldr w19,[x30],#4 + eor w28,w21,w22 + str x1,[x29,#112] + + rev w3,w3 + + ror w16,w24,#6 + add w27,w27,w19 + eor w6,w24,w24,ror#14 + and w17,w25,w24 + bic w19,w26,w24 + add w27,w27,w3 + orr w17,w17,w19 + eor w19,w20,w21 + eor w16,w16,w6,ror#11 + ror w6,w20,#2 + add w27,w27,w17 + eor w17,w20,w20,ror#9 + add w27,w27,w16 + and w28,w28,w19 + add w23,w23,w27 + eor w28,w28,w21 + eor w17,w6,w17,ror#13 + add w27,w27,w28 + ldr w28,[x30],#4 + + + rev w4,w4 + + ldp w5,w6,[x1],#2*4 + add w27,w27,w17 + ror w16,w23,#6 + add w26,w26,w28 + eor w7,w23,w23,ror#14 + and w17,w24,w23 + bic w28,w25,w23 + add w26,w26,w4 + orr w17,w17,w28 + eor w28,w27,w20 + eor w16,w16,w7,ror#11 + ror w7,w27,#2 + add w26,w26,w17 + eor w17,w27,w27,ror#9 + add w26,w26,w16 + and w19,w19,w28 + add w22,w22,w26 + eor w19,w19,w20 + eor w17,w7,w17,ror#13 + add w26,w26,w19 + ldr w19,[x30],#4 + + + rev w5,w5 + + add w26,w26,w17 + ror w16,w22,#6 + add w25,w25,w19 + eor w8,w22,w22,ror#14 + and w17,w23,w22 + bic w19,w24,w22 + add w25,w25,w5 + orr w17,w17,w19 + eor w19,w26,w27 + eor w16,w16,w8,ror#11 + ror w8,w26,#2 + add w25,w25,w17 + eor w17,w26,w26,ror#9 + add w25,w25,w16 + and w28,w28,w19 + add w21,w21,w25 + eor w28,w28,w27 + eor w17,w8,w17,ror#13 + add w25,w25,w28 + ldr w28,[x30],#4 + + + rev w6,w6 + + ldp w7,w8,[x1],#2*4 + add w25,w25,w17 + ror w16,w21,#6 + add w24,w24,w28 + eor w9,w21,w21,ror#14 + and w17,w22,w21 + bic w28,w23,w21 + add w24,w24,w6 + orr w17,w17,w28 + eor w28,w25,w26 + eor w16,w16,w9,ror#11 + ror w9,w25,#2 + add w24,w24,w17 + eor w17,w25,w25,ror#9 + add w24,w24,w16 + and w19,w19,w28 + add w20,w20,w24 + eor w19,w19,w26 + eor w17,w9,w17,ror#13 + add w24,w24,w19 + ldr w19,[x30],#4 + + + rev w7,w7 + + add w24,w24,w17 + ror w16,w20,#6 + add w23,w23,w19 + eor w10,w20,w20,ror#14 + and w17,w21,w20 + bic w19,w22,w20 + add w23,w23,w7 + orr w17,w17,w19 + eor w19,w24,w25 + eor w16,w16,w10,ror#11 + ror w10,w24,#2 + add w23,w23,w17 + eor w17,w24,w24,ror#9 + add w23,w23,w16 + and w28,w28,w19 + add w27,w27,w23 + eor w28,w28,w25 + eor w17,w10,w17,ror#13 + add w23,w23,w28 + ldr w28,[x30],#4 + + + rev w8,w8 + + ldp w9,w10,[x1],#2*4 + add w23,w23,w17 + ror w16,w27,#6 + add w22,w22,w28 + eor w11,w27,w27,ror#14 + and w17,w20,w27 + bic w28,w21,w27 + add w22,w22,w8 + orr w17,w17,w28 + eor w28,w23,w24 + eor w16,w16,w11,ror#11 + ror w11,w23,#2 + add w22,w22,w17 + eor w17,w23,w23,ror#9 + add w22,w22,w16 + and w19,w19,w28 + add w26,w26,w22 + eor w19,w19,w24 + eor w17,w11,w17,ror#13 + add w22,w22,w19 + ldr w19,[x30],#4 + + + rev w9,w9 + + add w22,w22,w17 + ror w16,w26,#6 + add w21,w21,w19 + eor w12,w26,w26,ror#14 + and w17,w27,w26 + bic w19,w20,w26 + add w21,w21,w9 + orr w17,w17,w19 + eor w19,w22,w23 + eor w16,w16,w12,ror#11 + ror w12,w22,#2 + add w21,w21,w17 + eor w17,w22,w22,ror#9 + add w21,w21,w16 + and w28,w28,w19 + add w25,w25,w21 + eor w28,w28,w23 + eor w17,w12,w17,ror#13 + add w21,w21,w28 + ldr w28,[x30],#4 + + + rev w10,w10 + + ldp w11,w12,[x1],#2*4 + add w21,w21,w17 + ror w16,w25,#6 + add w20,w20,w28 + eor w13,w25,w25,ror#14 + and w17,w26,w25 + bic w28,w27,w25 + add w20,w20,w10 + orr w17,w17,w28 + eor w28,w21,w22 + eor w16,w16,w13,ror#11 + ror w13,w21,#2 + add w20,w20,w17 + eor w17,w21,w21,ror#9 + add w20,w20,w16 + and w19,w19,w28 + add w24,w24,w20 + eor w19,w19,w22 + eor w17,w13,w17,ror#13 + add w20,w20,w19 + ldr w19,[x30],#4 + + + rev w11,w11 + + add w20,w20,w17 + ror w16,w24,#6 + add w27,w27,w19 + eor w14,w24,w24,ror#14 + and w17,w25,w24 + bic w19,w26,w24 + add w27,w27,w11 + orr w17,w17,w19 + eor w19,w20,w21 + eor w16,w16,w14,ror#11 + ror w14,w20,#2 + add w27,w27,w17 + eor w17,w20,w20,ror#9 + add w27,w27,w16 + and w28,w28,w19 + add w23,w23,w27 + eor w28,w28,w21 + eor w17,w14,w17,ror#13 + add w27,w27,w28 + ldr w28,[x30],#4 + + + rev w12,w12 + + ldp w13,w14,[x1],#2*4 + add w27,w27,w17 + ror w16,w23,#6 + add w26,w26,w28 + eor w15,w23,w23,ror#14 + and w17,w24,w23 + bic w28,w25,w23 + add w26,w26,w12 + orr w17,w17,w28 + eor w28,w27,w20 + eor w16,w16,w15,ror#11 + ror w15,w27,#2 + add w26,w26,w17 + eor w17,w27,w27,ror#9 + add w26,w26,w16 + and w19,w19,w28 + add w22,w22,w26 + eor w19,w19,w20 + eor w17,w15,w17,ror#13 + add w26,w26,w19 + ldr w19,[x30],#4 + + + rev w13,w13 + + add w26,w26,w17 + ror w16,w22,#6 + add w25,w25,w19 + eor w0,w22,w22,ror#14 + and w17,w23,w22 + bic w19,w24,w22 + add w25,w25,w13 + orr w17,w17,w19 + eor w19,w26,w27 + eor w16,w16,w0,ror#11 + ror w0,w26,#2 + add w25,w25,w17 + eor w17,w26,w26,ror#9 + add w25,w25,w16 + and w28,w28,w19 + add w21,w21,w25 + eor w28,w28,w27 + eor w17,w0,w17,ror#13 + add w25,w25,w28 + ldr w28,[x30],#4 + + + rev w14,w14 + + ldp w15,w0,[x1],#2*4 + add w25,w25,w17 + str w6,[sp,#12] + ror w16,w21,#6 + add w24,w24,w28 + eor w6,w21,w21,ror#14 + and w17,w22,w21 + bic w28,w23,w21 + add w24,w24,w14 + orr w17,w17,w28 + eor w28,w25,w26 + eor w16,w16,w6,ror#11 + ror w6,w25,#2 + add w24,w24,w17 + eor w17,w25,w25,ror#9 + add w24,w24,w16 + and w19,w19,w28 + add w20,w20,w24 + eor w19,w19,w26 + eor w17,w6,w17,ror#13 + add w24,w24,w19 + ldr w19,[x30],#4 + + + rev w15,w15 + + add w24,w24,w17 + str w7,[sp,#0] + ror w16,w20,#6 + add w23,w23,w19 + eor w7,w20,w20,ror#14 + and w17,w21,w20 + bic w19,w22,w20 + add w23,w23,w15 + orr w17,w17,w19 + eor w19,w24,w25 + eor w16,w16,w7,ror#11 + ror w7,w24,#2 + add w23,w23,w17 + eor w17,w24,w24,ror#9 + add w23,w23,w16 + and w28,w28,w19 + add w27,w27,w23 + eor w28,w28,w25 + eor w17,w7,w17,ror#13 + add w23,w23,w28 + ldr w28,[x30],#4 + + + rev w0,w0 + + ldp w1,w2,[x1] + add w23,w23,w17 + str w8,[sp,#4] + ror w16,w27,#6 + add w22,w22,w28 + eor w8,w27,w27,ror#14 + and w17,w20,w27 + bic w28,w21,w27 + add w22,w22,w0 + orr w17,w17,w28 + eor w28,w23,w24 + eor w16,w16,w8,ror#11 + ror w8,w23,#2 + add w22,w22,w17 + eor w17,w23,w23,ror#9 + add w22,w22,w16 + and w19,w19,w28 + add w26,w26,w22 + eor w19,w19,w24 + eor w17,w8,w17,ror#13 + add w22,w22,w19 + ldr w19,[x30],#4 + + + rev w1,w1 + + ldr w6,[sp,#12] + add w22,w22,w17 + str w9,[sp,#8] + ror w16,w26,#6 + add w21,w21,w19 + eor w9,w26,w26,ror#14 + and w17,w27,w26 + bic w19,w20,w26 + add w21,w21,w1 + orr w17,w17,w19 + eor w19,w22,w23 + eor w16,w16,w9,ror#11 + ror w9,w22,#2 + add w21,w21,w17 + eor w17,w22,w22,ror#9 + add w21,w21,w16 + and w28,w28,w19 + add w25,w25,w21 + eor w28,w28,w23 + eor w17,w9,w17,ror#13 + add w21,w21,w28 + ldr w28,[x30],#4 + + + rev w2,w2 + + ldr w7,[sp,#0] + add w21,w21,w17 + str w10,[sp,#12] + ror w16,w25,#6 + add w20,w20,w28 + ror w9,w4,#7 + and w17,w26,w25 + ror w8,w1,#17 + bic w28,w27,w25 + ror w10,w21,#2 + add w20,w20,w2 + eor w16,w16,w25,ror#11 + eor w9,w9,w4,ror#18 + orr w17,w17,w28 + eor w28,w21,w22 + eor w16,w16,w25,ror#25 + eor w10,w10,w21,ror#13 + add w20,w20,w17 + and w19,w19,w28 + eor w8,w8,w1,ror#19 + eor w9,w9,w4,lsr#3 + add w20,w20,w16 + eor w19,w19,w22 + eor w17,w10,w21,ror#22 + eor w8,w8,w1,lsr#10 + add w3,w3,w12 + add w24,w24,w20 + add w20,w20,w19 + ldr w19,[x30],#4 + add w3,w3,w9 + add w20,w20,w17 + add w3,w3,w8 +Loop_16_xx: + ldr w8,[sp,#4] + str w11,[sp,#0] + ror w16,w24,#6 + add w27,w27,w19 + ror w10,w5,#7 + and w17,w25,w24 + ror w9,w2,#17 + bic w19,w26,w24 + ror w11,w20,#2 + add w27,w27,w3 + eor w16,w16,w24,ror#11 + eor w10,w10,w5,ror#18 + orr w17,w17,w19 + eor w19,w20,w21 + eor w16,w16,w24,ror#25 + eor w11,w11,w20,ror#13 + add w27,w27,w17 + and w28,w28,w19 + eor w9,w9,w2,ror#19 + eor w10,w10,w5,lsr#3 + add w27,w27,w16 + eor w28,w28,w21 + eor w17,w11,w20,ror#22 + eor w9,w9,w2,lsr#10 + add w4,w4,w13 + add w23,w23,w27 + add w27,w27,w28 + ldr w28,[x30],#4 + add w4,w4,w10 + add w27,w27,w17 + add w4,w4,w9 + ldr w9,[sp,#8] + str w12,[sp,#4] + ror w16,w23,#6 + add w26,w26,w28 + ror w11,w6,#7 + and w17,w24,w23 + ror w10,w3,#17 + bic w28,w25,w23 + ror w12,w27,#2 + add w26,w26,w4 + eor w16,w16,w23,ror#11 + eor w11,w11,w6,ror#18 + orr w17,w17,w28 + eor w28,w27,w20 + eor w16,w16,w23,ror#25 + eor w12,w12,w27,ror#13 + add w26,w26,w17 + and w19,w19,w28 + eor w10,w10,w3,ror#19 + eor w11,w11,w6,lsr#3 + add w26,w26,w16 + eor w19,w19,w20 + eor w17,w12,w27,ror#22 + eor w10,w10,w3,lsr#10 + add w5,w5,w14 + add w22,w22,w26 + add w26,w26,w19 + ldr w19,[x30],#4 + add w5,w5,w11 + add w26,w26,w17 + add w5,w5,w10 + ldr w10,[sp,#12] + str w13,[sp,#8] + ror w16,w22,#6 + add w25,w25,w19 + ror w12,w7,#7 + and w17,w23,w22 + ror w11,w4,#17 + bic w19,w24,w22 + ror w13,w26,#2 + add w25,w25,w5 + eor w16,w16,w22,ror#11 + eor w12,w12,w7,ror#18 + orr w17,w17,w19 + eor w19,w26,w27 + eor w16,w16,w22,ror#25 + eor w13,w13,w26,ror#13 + add w25,w25,w17 + and w28,w28,w19 + eor w11,w11,w4,ror#19 + eor w12,w12,w7,lsr#3 + add w25,w25,w16 + eor w28,w28,w27 + eor w17,w13,w26,ror#22 + eor w11,w11,w4,lsr#10 + add w6,w6,w15 + add w21,w21,w25 + add w25,w25,w28 + ldr w28,[x30],#4 + add w6,w6,w12 + add w25,w25,w17 + add w6,w6,w11 + ldr w11,[sp,#0] + str w14,[sp,#12] + ror w16,w21,#6 + add w24,w24,w28 + ror w13,w8,#7 + and w17,w22,w21 + ror w12,w5,#17 + bic w28,w23,w21 + ror w14,w25,#2 + add w24,w24,w6 + eor w16,w16,w21,ror#11 + eor w13,w13,w8,ror#18 + orr w17,w17,w28 + eor w28,w25,w26 + eor w16,w16,w21,ror#25 + eor w14,w14,w25,ror#13 + add w24,w24,w17 + and w19,w19,w28 + eor w12,w12,w5,ror#19 + eor w13,w13,w8,lsr#3 + add w24,w24,w16 + eor w19,w19,w26 + eor w17,w14,w25,ror#22 + eor w12,w12,w5,lsr#10 + add w7,w7,w0 + add w20,w20,w24 + add w24,w24,w19 + ldr w19,[x30],#4 + add w7,w7,w13 + add w24,w24,w17 + add w7,w7,w12 + ldr w12,[sp,#4] + str w15,[sp,#0] + ror w16,w20,#6 + add w23,w23,w19 + ror w14,w9,#7 + and w17,w21,w20 + ror w13,w6,#17 + bic w19,w22,w20 + ror w15,w24,#2 + add w23,w23,w7 + eor w16,w16,w20,ror#11 + eor w14,w14,w9,ror#18 + orr w17,w17,w19 + eor w19,w24,w25 + eor w16,w16,w20,ror#25 + eor w15,w15,w24,ror#13 + add w23,w23,w17 + and w28,w28,w19 + eor w13,w13,w6,ror#19 + eor w14,w14,w9,lsr#3 + add w23,w23,w16 + eor w28,w28,w25 + eor w17,w15,w24,ror#22 + eor w13,w13,w6,lsr#10 + add w8,w8,w1 + add w27,w27,w23 + add w23,w23,w28 + ldr w28,[x30],#4 + add w8,w8,w14 + add w23,w23,w17 + add w8,w8,w13 + ldr w13,[sp,#8] + str w0,[sp,#4] + ror w16,w27,#6 + add w22,w22,w28 + ror w15,w10,#7 + and w17,w20,w27 + ror w14,w7,#17 + bic w28,w21,w27 + ror w0,w23,#2 + add w22,w22,w8 + eor w16,w16,w27,ror#11 + eor w15,w15,w10,ror#18 + orr w17,w17,w28 + eor w28,w23,w24 + eor w16,w16,w27,ror#25 + eor w0,w0,w23,ror#13 + add w22,w22,w17 + and w19,w19,w28 + eor w14,w14,w7,ror#19 + eor w15,w15,w10,lsr#3 + add w22,w22,w16 + eor w19,w19,w24 + eor w17,w0,w23,ror#22 + eor w14,w14,w7,lsr#10 + add w9,w9,w2 + add w26,w26,w22 + add w22,w22,w19 + ldr w19,[x30],#4 + add w9,w9,w15 + add w22,w22,w17 + add w9,w9,w14 + ldr w14,[sp,#12] + str w1,[sp,#8] + ror w16,w26,#6 + add w21,w21,w19 + ror w0,w11,#7 + and w17,w27,w26 + ror w15,w8,#17 + bic w19,w20,w26 + ror w1,w22,#2 + add w21,w21,w9 + eor w16,w16,w26,ror#11 + eor w0,w0,w11,ror#18 + orr w17,w17,w19 + eor w19,w22,w23 + eor w16,w16,w26,ror#25 + eor w1,w1,w22,ror#13 + add w21,w21,w17 + and w28,w28,w19 + eor w15,w15,w8,ror#19 + eor w0,w0,w11,lsr#3 + add w21,w21,w16 + eor w28,w28,w23 + eor w17,w1,w22,ror#22 + eor w15,w15,w8,lsr#10 + add w10,w10,w3 + add w25,w25,w21 + add w21,w21,w28 + ldr w28,[x30],#4 + add w10,w10,w0 + add w21,w21,w17 + add w10,w10,w15 + ldr w15,[sp,#0] + str w2,[sp,#12] + ror w16,w25,#6 + add w20,w20,w28 + ror w1,w12,#7 + and w17,w26,w25 + ror w0,w9,#17 + bic w28,w27,w25 + ror w2,w21,#2 + add w20,w20,w10 + eor w16,w16,w25,ror#11 + eor w1,w1,w12,ror#18 + orr w17,w17,w28 + eor w28,w21,w22 + eor w16,w16,w25,ror#25 + eor w2,w2,w21,ror#13 + add w20,w20,w17 + and w19,w19,w28 + eor w0,w0,w9,ror#19 + eor w1,w1,w12,lsr#3 + add w20,w20,w16 + eor w19,w19,w22 + eor w17,w2,w21,ror#22 + eor w0,w0,w9,lsr#10 + add w11,w11,w4 + add w24,w24,w20 + add w20,w20,w19 + ldr w19,[x30],#4 + add w11,w11,w1 + add w20,w20,w17 + add w11,w11,w0 + ldr w0,[sp,#4] + str w3,[sp,#0] + ror w16,w24,#6 + add w27,w27,w19 + ror w2,w13,#7 + and w17,w25,w24 + ror w1,w10,#17 + bic w19,w26,w24 + ror w3,w20,#2 + add w27,w27,w11 + eor w16,w16,w24,ror#11 + eor w2,w2,w13,ror#18 + orr w17,w17,w19 + eor w19,w20,w21 + eor w16,w16,w24,ror#25 + eor w3,w3,w20,ror#13 + add w27,w27,w17 + and w28,w28,w19 + eor w1,w1,w10,ror#19 + eor w2,w2,w13,lsr#3 + add w27,w27,w16 + eor w28,w28,w21 + eor w17,w3,w20,ror#22 + eor w1,w1,w10,lsr#10 + add w12,w12,w5 + add w23,w23,w27 + add w27,w27,w28 + ldr w28,[x30],#4 + add w12,w12,w2 + add w27,w27,w17 + add w12,w12,w1 + ldr w1,[sp,#8] + str w4,[sp,#4] + ror w16,w23,#6 + add w26,w26,w28 + ror w3,w14,#7 + and w17,w24,w23 + ror w2,w11,#17 + bic w28,w25,w23 + ror w4,w27,#2 + add w26,w26,w12 + eor w16,w16,w23,ror#11 + eor w3,w3,w14,ror#18 + orr w17,w17,w28 + eor w28,w27,w20 + eor w16,w16,w23,ror#25 + eor w4,w4,w27,ror#13 + add w26,w26,w17 + and w19,w19,w28 + eor w2,w2,w11,ror#19 + eor w3,w3,w14,lsr#3 + add w26,w26,w16 + eor w19,w19,w20 + eor w17,w4,w27,ror#22 + eor w2,w2,w11,lsr#10 + add w13,w13,w6 + add w22,w22,w26 + add w26,w26,w19 + ldr w19,[x30],#4 + add w13,w13,w3 + add w26,w26,w17 + add w13,w13,w2 + ldr w2,[sp,#12] + str w5,[sp,#8] + ror w16,w22,#6 + add w25,w25,w19 + ror w4,w15,#7 + and w17,w23,w22 + ror w3,w12,#17 + bic w19,w24,w22 + ror w5,w26,#2 + add w25,w25,w13 + eor w16,w16,w22,ror#11 + eor w4,w4,w15,ror#18 + orr w17,w17,w19 + eor w19,w26,w27 + eor w16,w16,w22,ror#25 + eor w5,w5,w26,ror#13 + add w25,w25,w17 + and w28,w28,w19 + eor w3,w3,w12,ror#19 + eor w4,w4,w15,lsr#3 + add w25,w25,w16 + eor w28,w28,w27 + eor w17,w5,w26,ror#22 + eor w3,w3,w12,lsr#10 + add w14,w14,w7 + add w21,w21,w25 + add w25,w25,w28 + ldr w28,[x30],#4 + add w14,w14,w4 + add w25,w25,w17 + add w14,w14,w3 + ldr w3,[sp,#0] + str w6,[sp,#12] + ror w16,w21,#6 + add w24,w24,w28 + ror w5,w0,#7 + and w17,w22,w21 + ror w4,w13,#17 + bic w28,w23,w21 + ror w6,w25,#2 + add w24,w24,w14 + eor w16,w16,w21,ror#11 + eor w5,w5,w0,ror#18 + orr w17,w17,w28 + eor w28,w25,w26 + eor w16,w16,w21,ror#25 + eor w6,w6,w25,ror#13 + add w24,w24,w17 + and w19,w19,w28 + eor w4,w4,w13,ror#19 + eor w5,w5,w0,lsr#3 + add w24,w24,w16 + eor w19,w19,w26 + eor w17,w6,w25,ror#22 + eor w4,w4,w13,lsr#10 + add w15,w15,w8 + add w20,w20,w24 + add w24,w24,w19 + ldr w19,[x30],#4 + add w15,w15,w5 + add w24,w24,w17 + add w15,w15,w4 + ldr w4,[sp,#4] + str w7,[sp,#0] + ror w16,w20,#6 + add w23,w23,w19 + ror w6,w1,#7 + and w17,w21,w20 + ror w5,w14,#17 + bic w19,w22,w20 + ror w7,w24,#2 + add w23,w23,w15 + eor w16,w16,w20,ror#11 + eor w6,w6,w1,ror#18 + orr w17,w17,w19 + eor w19,w24,w25 + eor w16,w16,w20,ror#25 + eor w7,w7,w24,ror#13 + add w23,w23,w17 + and w28,w28,w19 + eor w5,w5,w14,ror#19 + eor w6,w6,w1,lsr#3 + add w23,w23,w16 + eor w28,w28,w25 + eor w17,w7,w24,ror#22 + eor w5,w5,w14,lsr#10 + add w0,w0,w9 + add w27,w27,w23 + add w23,w23,w28 + ldr w28,[x30],#4 + add w0,w0,w6 + add w23,w23,w17 + add w0,w0,w5 + ldr w5,[sp,#8] + str w8,[sp,#4] + ror w16,w27,#6 + add w22,w22,w28 + ror w7,w2,#7 + and w17,w20,w27 + ror w6,w15,#17 + bic w28,w21,w27 + ror w8,w23,#2 + add w22,w22,w0 + eor w16,w16,w27,ror#11 + eor w7,w7,w2,ror#18 + orr w17,w17,w28 + eor w28,w23,w24 + eor w16,w16,w27,ror#25 + eor w8,w8,w23,ror#13 + add w22,w22,w17 + and w19,w19,w28 + eor w6,w6,w15,ror#19 + eor w7,w7,w2,lsr#3 + add w22,w22,w16 + eor w19,w19,w24 + eor w17,w8,w23,ror#22 + eor w6,w6,w15,lsr#10 + add w1,w1,w10 + add w26,w26,w22 + add w22,w22,w19 + ldr w19,[x30],#4 + add w1,w1,w7 + add w22,w22,w17 + add w1,w1,w6 + ldr w6,[sp,#12] + str w9,[sp,#8] + ror w16,w26,#6 + add w21,w21,w19 + ror w8,w3,#7 + and w17,w27,w26 + ror w7,w0,#17 + bic w19,w20,w26 + ror w9,w22,#2 + add w21,w21,w1 + eor w16,w16,w26,ror#11 + eor w8,w8,w3,ror#18 + orr w17,w17,w19 + eor w19,w22,w23 + eor w16,w16,w26,ror#25 + eor w9,w9,w22,ror#13 + add w21,w21,w17 + and w28,w28,w19 + eor w7,w7,w0,ror#19 + eor w8,w8,w3,lsr#3 + add w21,w21,w16 + eor w28,w28,w23 + eor w17,w9,w22,ror#22 + eor w7,w7,w0,lsr#10 + add w2,w2,w11 + add w25,w25,w21 + add w21,w21,w28 + ldr w28,[x30],#4 + add w2,w2,w8 + add w21,w21,w17 + add w2,w2,w7 + ldr w7,[sp,#0] + str w10,[sp,#12] + ror w16,w25,#6 + add w20,w20,w28 + ror w9,w4,#7 + and w17,w26,w25 + ror w8,w1,#17 + bic w28,w27,w25 + ror w10,w21,#2 + add w20,w20,w2 + eor w16,w16,w25,ror#11 + eor w9,w9,w4,ror#18 + orr w17,w17,w28 + eor w28,w21,w22 + eor w16,w16,w25,ror#25 + eor w10,w10,w21,ror#13 + add w20,w20,w17 + and w19,w19,w28 + eor w8,w8,w1,ror#19 + eor w9,w9,w4,lsr#3 + add w20,w20,w16 + eor w19,w19,w22 + eor w17,w10,w21,ror#22 + eor w8,w8,w1,lsr#10 + add w3,w3,w12 + add w24,w24,w20 + add w20,w20,w19 + ldr w19,[x30],#4 + add w3,w3,w9 + add w20,w20,w17 + add w3,w3,w8 + cbnz w19,Loop_16_xx + + ldp x0,x2,[x29,#96] + ldr x1,[x29,#112] + sub x30,x30,#260 + + ldp w3,w4,[x0] + ldp w5,w6,[x0,#2*4] + add x1,x1,#14*4 + ldp w7,w8,[x0,#4*4] + add w20,w20,w3 + ldp w9,w10,[x0,#6*4] + add w21,w21,w4 + add w22,w22,w5 + add w23,w23,w6 + stp w20,w21,[x0] + add w24,w24,w7 + add w25,w25,w8 + stp w22,w23,[x0,#2*4] + add w26,w26,w9 + add w27,w27,w10 + cmp x1,x2 + stp w24,w25,[x0,#4*4] + stp w26,w27,[x0,#6*4] + b.ne Loop + + ldp x19,x20,[x29,#16] + add sp,sp,#4*4 + 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 +.long 0xd50323bf + ret + + +.align 6 + +LK256: +.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 +.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 +.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 +.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 +.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc +.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da +.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 +.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 +.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 +.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 +.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 +.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 +.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 +.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 +.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 +.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +.long 0 + + +.align 3 +L_gnutls_arm_cpuid_s: + + + +.quad __gnutls_arm_cpuid_s-. + + +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 + + +.align 6 +sha256_block_armv8: +Lv8_entry: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v0.4s,v1.4s},[x0] + adr x3,LK256 + +Loop_hw: + ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64 + sub x2,x2,#1 + ld1 {v16.4s},[x3],#16 + rev32 v4.16b,v4.16b + rev32 v5.16b,v5.16b + rev32 v6.16b,v6.16b + rev32 v7.16b,v7.16b + orr v18.16b,v0.16b,v0.16b + orr v19.16b,v1.16b,v1.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s +.long 0x5e2828a4 + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 +.long 0x5e105041 +.long 0x5e0760c4 + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s +.long 0x5e2828c5 + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 +.long 0x5e115041 +.long 0x5e0460e5 + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v6.4s +.long 0x5e2828e6 + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 +.long 0x5e105041 +.long 0x5e056086 + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v7.4s +.long 0x5e282887 + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 +.long 0x5e115041 +.long 0x5e0660a7 + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s +.long 0x5e2828a4 + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 +.long 0x5e105041 +.long 0x5e0760c4 + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s +.long 0x5e2828c5 + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 +.long 0x5e115041 +.long 0x5e0460e5 + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v6.4s +.long 0x5e2828e6 + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 +.long 0x5e105041 +.long 0x5e056086 + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v7.4s +.long 0x5e282887 + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 +.long 0x5e115041 +.long 0x5e0660a7 + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s +.long 0x5e2828a4 + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 +.long 0x5e105041 +.long 0x5e0760c4 + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s +.long 0x5e2828c5 + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 +.long 0x5e115041 +.long 0x5e0460e5 + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v6.4s +.long 0x5e2828e6 + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 +.long 0x5e105041 +.long 0x5e056086 + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v7.4s +.long 0x5e282887 + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 +.long 0x5e115041 +.long 0x5e0660a7 + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 +.long 0x5e105041 + + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 +.long 0x5e115041 + + ld1 {v17.4s},[x3] + add v16.4s,v16.4s,v6.4s + sub x3,x3,#64*4-16 + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 +.long 0x5e105041 + + add v17.4s,v17.4s,v7.4s + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 +.long 0x5e115041 + + add v0.4s,v0.4s,v18.4s + add v1.4s,v1.4s,v19.4s + + cbnz x2,Loop_hw + + st1 {v0.4s,v1.4s},[x0] + + ldr x29,[sp],#16 + ret + + + + + + +.align 4 +_sha256_block_neon: +Lneon_entry: + stp x29, x30, [sp, #-16]! + mov x29, sp + sub sp,sp,#16*4 + + adr x16,LK256 + add x2,x1,x2,lsl#6 + + ld1 {v0.16b},[x1], #16 + ld1 {v1.16b},[x1], #16 + ld1 {v2.16b},[x1], #16 + ld1 {v3.16b},[x1], #16 + ld1 {v4.4s},[x16], #16 + ld1 {v5.4s},[x16], #16 + ld1 {v6.4s},[x16], #16 + ld1 {v7.4s},[x16], #16 + rev32 v0.16b,v0.16b + rev32 v1.16b,v1.16b + rev32 v2.16b,v2.16b + rev32 v3.16b,v3.16b + mov x17,sp + add v4.4s,v4.4s,v0.4s + add v5.4s,v5.4s,v1.4s + add v6.4s,v6.4s,v2.4s + st1 {v4.4s,v5.4s},[x17], #32 + add v7.4s,v7.4s,v3.4s + st1 {v6.4s,v7.4s},[x17] + sub x17,x17,#32 + + ldp w3,w4,[x0] + ldp w5,w6,[x0,#8] + ldp w7,w8,[x0,#16] + ldp w9,w10,[x0,#24] + ldr w12,[sp,#0] + mov w13,wzr + eor w14,w4,w5 + mov w15,wzr + b L_00_48 + +.align 4 +L_00_48: + ext v4.16b,v0.16b,v1.16b,#4 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + bic w15,w9,w7 + ext v7.16b,v2.16b,v3.16b,#4 + eor w11,w7,w7,ror#5 + add w3,w3,w13 + mov d19,v3.d[1] + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w3,w3,ror#11 + ushr v5.4s,v4.4s,#3 + add w10,w10,w12 + add v0.4s,v0.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + ushr v7.4s,v4.4s,#18 + add w10,w10,w11 + ldr w12,[sp,#4] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w6,w6,w10 + sli v7.4s,v4.4s,#14 + eor w14,w14,w4 + ushr v16.4s,v19.4s,#17 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + eor v5.16b,v5.16b,v7.16b + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + sli v16.4s,v19.4s,#15 + add w10,w10,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + ushr v7.4s,v19.4s,#19 + add w9,w9,w12 + ror w11,w11,#6 + add v0.4s,v0.4s,v5.4s + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + sli v7.4s,v19.4s,#13 + add w9,w9,w11 + ldr w12,[sp,#8] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + eor v17.16b,v17.16b,v7.16b + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + add v0.4s,v0.4s,v17.4s + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + ushr v18.4s,v0.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v0.4s,#10 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + sli v18.4s,v0.4s,#15 + add w8,w8,w12 + ushr v17.4s,v0.4s,#19 + ror w11,w11,#6 + eor w13,w9,w10 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w9,ror#20 + add w8,w8,w11 + sli v17.4s,v0.4s,#13 + ldr w12,[sp,#12] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w4,w4,w8 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w10 + eor v17.16b,v17.16b,v17.16b + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + mov v17.d[1],v19.d[0] + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + add v0.4s,v0.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add v4.4s,v4.4s,v0.4s + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#16] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + ext v4.16b,v1.16b,v2.16b,#4 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + bic w15,w5,w3 + ext v7.16b,v3.16b,v0.16b,#4 + eor w11,w3,w3,ror#5 + add w7,w7,w13 + mov d19,v0.d[1] + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w7,w7,ror#11 + ushr v5.4s,v4.4s,#3 + add w6,w6,w12 + add v1.4s,v1.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + ushr v7.4s,v4.4s,#18 + add w6,w6,w11 + ldr w12,[sp,#20] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w10,w10,w6 + sli v7.4s,v4.4s,#14 + eor w14,w14,w8 + ushr v16.4s,v19.4s,#17 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + eor v5.16b,v5.16b,v7.16b + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + sli v16.4s,v19.4s,#15 + add w6,w6,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + ushr v7.4s,v19.4s,#19 + add w5,w5,w12 + ror w11,w11,#6 + add v1.4s,v1.4s,v5.4s + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + sli v7.4s,v19.4s,#13 + add w5,w5,w11 + ldr w12,[sp,#24] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + eor v17.16b,v17.16b,v7.16b + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + add v1.4s,v1.4s,v17.4s + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + ushr v18.4s,v1.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v1.4s,#10 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + sli v18.4s,v1.4s,#15 + add w4,w4,w12 + ushr v17.4s,v1.4s,#19 + ror w11,w11,#6 + eor w13,w5,w6 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w5,ror#20 + add w4,w4,w11 + sli v17.4s,v1.4s,#13 + ldr w12,[sp,#28] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w8,w8,w4 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w6 + eor v17.16b,v17.16b,v17.16b + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + mov v17.d[1],v19.d[0] + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + add v1.4s,v1.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add v4.4s,v4.4s,v1.4s + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[sp,#32] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + ext v4.16b,v2.16b,v3.16b,#4 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + bic w15,w9,w7 + ext v7.16b,v0.16b,v1.16b,#4 + eor w11,w7,w7,ror#5 + add w3,w3,w13 + mov d19,v1.d[1] + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w3,w3,ror#11 + ushr v5.4s,v4.4s,#3 + add w10,w10,w12 + add v2.4s,v2.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + ushr v7.4s,v4.4s,#18 + add w10,w10,w11 + ldr w12,[sp,#36] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w6,w6,w10 + sli v7.4s,v4.4s,#14 + eor w14,w14,w4 + ushr v16.4s,v19.4s,#17 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + eor v5.16b,v5.16b,v7.16b + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + sli v16.4s,v19.4s,#15 + add w10,w10,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + ushr v7.4s,v19.4s,#19 + add w9,w9,w12 + ror w11,w11,#6 + add v2.4s,v2.4s,v5.4s + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + sli v7.4s,v19.4s,#13 + add w9,w9,w11 + ldr w12,[sp,#40] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + eor v17.16b,v17.16b,v7.16b + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + add v2.4s,v2.4s,v17.4s + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + ushr v18.4s,v2.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v2.4s,#10 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + sli v18.4s,v2.4s,#15 + add w8,w8,w12 + ushr v17.4s,v2.4s,#19 + ror w11,w11,#6 + eor w13,w9,w10 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w9,ror#20 + add w8,w8,w11 + sli v17.4s,v2.4s,#13 + ldr w12,[sp,#44] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w4,w4,w8 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w10 + eor v17.16b,v17.16b,v17.16b + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + mov v17.d[1],v19.d[0] + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + add v2.4s,v2.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add v4.4s,v4.4s,v2.4s + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#48] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + ext v4.16b,v3.16b,v0.16b,#4 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + bic w15,w5,w3 + ext v7.16b,v1.16b,v2.16b,#4 + eor w11,w3,w3,ror#5 + add w7,w7,w13 + mov d19,v2.d[1] + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w7,w7,ror#11 + ushr v5.4s,v4.4s,#3 + add w6,w6,w12 + add v3.4s,v3.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + ushr v7.4s,v4.4s,#18 + add w6,w6,w11 + ldr w12,[sp,#52] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w10,w10,w6 + sli v7.4s,v4.4s,#14 + eor w14,w14,w8 + ushr v16.4s,v19.4s,#17 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + eor v5.16b,v5.16b,v7.16b + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + sli v16.4s,v19.4s,#15 + add w6,w6,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + ushr v7.4s,v19.4s,#19 + add w5,w5,w12 + ror w11,w11,#6 + add v3.4s,v3.4s,v5.4s + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + sli v7.4s,v19.4s,#13 + add w5,w5,w11 + ldr w12,[sp,#56] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + eor v17.16b,v17.16b,v7.16b + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + add v3.4s,v3.4s,v17.4s + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + ushr v18.4s,v3.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v3.4s,#10 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + sli v18.4s,v3.4s,#15 + add w4,w4,w12 + ushr v17.4s,v3.4s,#19 + ror w11,w11,#6 + eor w13,w5,w6 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w5,ror#20 + add w4,w4,w11 + sli v17.4s,v3.4s,#13 + ldr w12,[sp,#60] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w8,w8,w4 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w6 + eor v17.16b,v17.16b,v17.16b + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + mov v17.d[1],v19.d[0] + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + add v3.4s,v3.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add v4.4s,v4.4s,v3.4s + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[x16] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + cmp w12,#0 + ldr w12,[sp,#0] + sub x17,x17,#64 + bne L_00_48 + + sub x16,x16,#256 + cmp x1,x2 + mov x17, #64 + csel x17, x17, xzr, eq + sub x1,x1,x17 + mov x17,sp + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + ld1 {v0.16b},[x1],#16 + bic w15,w9,w7 + eor w11,w7,w7,ror#5 + ld1 {v4.4s},[x16],#16 + add w3,w3,w13 + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + eor w15,w3,w3,ror#11 + rev32 v0.16b,v0.16b + add w10,w10,w12 + ror w11,w11,#6 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + add v4.4s,v4.4s,v0.4s + add w10,w10,w11 + ldr w12,[sp,#4] + and w14,w14,w13 + ror w15,w15,#2 + add w6,w6,w10 + eor w14,w14,w4 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + add w10,w10,w14 + orr w12,w12,w15 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + add w9,w9,w12 + ror w11,w11,#6 + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + add w9,w9,w11 + ldr w12,[sp,#8] + and w13,w13,w14 + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + orr w12,w12,w15 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + add w8,w8,w12 + ror w11,w11,#6 + eor w13,w9,w10 + eor w15,w15,w9,ror#20 + add w8,w8,w11 + ldr w12,[sp,#12] + and w14,w14,w13 + ror w15,w15,#2 + add w4,w4,w8 + eor w14,w14,w10 + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#16] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + ld1 {v1.16b},[x1],#16 + bic w15,w5,w3 + eor w11,w3,w3,ror#5 + ld1 {v4.4s},[x16],#16 + add w7,w7,w13 + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + eor w15,w7,w7,ror#11 + rev32 v1.16b,v1.16b + add w6,w6,w12 + ror w11,w11,#6 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + add v4.4s,v4.4s,v1.4s + add w6,w6,w11 + ldr w12,[sp,#20] + and w14,w14,w13 + ror w15,w15,#2 + add w10,w10,w6 + eor w14,w14,w8 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + add w6,w6,w14 + orr w12,w12,w15 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + add w5,w5,w12 + ror w11,w11,#6 + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + add w5,w5,w11 + ldr w12,[sp,#24] + and w13,w13,w14 + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + orr w12,w12,w15 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + add w4,w4,w12 + ror w11,w11,#6 + eor w13,w5,w6 + eor w15,w15,w5,ror#20 + add w4,w4,w11 + ldr w12,[sp,#28] + and w14,w14,w13 + ror w15,w15,#2 + add w8,w8,w4 + eor w14,w14,w6 + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[sp,#32] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + ld1 {v2.16b},[x1],#16 + bic w15,w9,w7 + eor w11,w7,w7,ror#5 + ld1 {v4.4s},[x16],#16 + add w3,w3,w13 + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + eor w15,w3,w3,ror#11 + rev32 v2.16b,v2.16b + add w10,w10,w12 + ror w11,w11,#6 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + add v4.4s,v4.4s,v2.4s + add w10,w10,w11 + ldr w12,[sp,#36] + and w14,w14,w13 + ror w15,w15,#2 + add w6,w6,w10 + eor w14,w14,w4 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + add w10,w10,w14 + orr w12,w12,w15 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + add w9,w9,w12 + ror w11,w11,#6 + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + add w9,w9,w11 + ldr w12,[sp,#40] + and w13,w13,w14 + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + orr w12,w12,w15 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + add w8,w8,w12 + ror w11,w11,#6 + eor w13,w9,w10 + eor w15,w15,w9,ror#20 + add w8,w8,w11 + ldr w12,[sp,#44] + and w14,w14,w13 + ror w15,w15,#2 + add w4,w4,w8 + eor w14,w14,w10 + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#48] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + ld1 {v3.16b},[x1],#16 + bic w15,w5,w3 + eor w11,w3,w3,ror#5 + ld1 {v4.4s},[x16],#16 + add w7,w7,w13 + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + eor w15,w7,w7,ror#11 + rev32 v3.16b,v3.16b + add w6,w6,w12 + ror w11,w11,#6 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + add v4.4s,v4.4s,v3.4s + add w6,w6,w11 + ldr w12,[sp,#52] + and w14,w14,w13 + ror w15,w15,#2 + add w10,w10,w6 + eor w14,w14,w8 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + add w6,w6,w14 + orr w12,w12,w15 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + add w5,w5,w12 + ror w11,w11,#6 + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + add w5,w5,w11 + ldr w12,[sp,#56] + and w13,w13,w14 + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + orr w12,w12,w15 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + add w4,w4,w12 + ror w11,w11,#6 + eor w13,w5,w6 + eor w15,w15,w5,ror#20 + add w4,w4,w11 + ldr w12,[sp,#60] + and w14,w14,w13 + ror w15,w15,#2 + add w8,w8,w4 + eor w14,w14,w6 + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + add w3,w3,w15 + ldp w11,w12,[x0,#0] + add w3,w3,w13 + ldp w13,w14,[x0,#8] + add w3,w3,w11 + add w4,w4,w12 + ldp w11,w12,[x0,#16] + add w5,w5,w13 + add w6,w6,w14 + ldp w13,w14,[x0,#24] + add w7,w7,w11 + add w8,w8,w12 + ldr w12,[sp,#0] + stp w3,w4,[x0,#0] + add w9,w9,w13 + mov w13,wzr + stp w5,w6,[x0,#8] + add w10,w10,w14 + stp w7,w8,[x0,#16] + eor w14,w4,w5 + stp w9,w10,[x0,#24] + mov w15,wzr + mov x17,sp + b.ne L_00_48 + + ldr x29,[x29] + add sp,sp,#16*4+16 + ret + + +.comm __gnutls_arm_cpuid_s,4,4 diff --git a/lib/accelerated/aarch64/macosx/sha512-armv8.s b/lib/accelerated/aarch64/macosx/sha512-armv8.s new file mode 100644 index 0000000000..43af71fa48 --- /dev/null +++ b/lib/accelerated/aarch64/macosx/sha512-armv8.s @@ -0,0 +1,1609 @@ +# Copyright (c) 2011-2016, Andy Polyakov +# 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 copyright notices, +# 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 Andy Polyakov nor the names of its +# copyright holder and contributors may be used to endorse or +# promote products derived from this software without specific +# prior written permission. +# +# ALTERNATIVELY, provided that this notice is retained in full, this +# product may be distributed under the terms of the GNU General Public +# License (GPL), in which case the provisions of the GPL apply INSTEAD OF +# those given above. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER 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 COPYRIGHT +# OWNER 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. +# +# *** This file is auto-generated *** +# +# 1 "lib/accelerated/aarch64/macosx/sha512-armv8.s.tmp.S" +# 1 "" +# 1 "" +# 1 "lib/accelerated/aarch64/macosx/sha512-armv8.s.tmp.S" +# 56 "lib/accelerated/aarch64/macosx/sha512-armv8.s.tmp.S" +# 1 "lib/accelerated/aarch64/aarch64-common.h" 1 +# 57 "lib/accelerated/aarch64/macosx/sha512-armv8.s.tmp.S" 2 + + +.text + + +.globl _sha512_block_data_order + +.align 6 +_sha512_block_data_order: + + + + + ldr x16,L_gnutls_arm_cpuid_s + + adr x17,L_gnutls_arm_cpuid_s + add x16,x16,x17 + ldr w16,[x16] + tst w16,#(1<<6) + b.ne Lv8_entry + +.long 0xd503233f + 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,#4*8 + + ldp x20,x21,[x0] + ldp x22,x23,[x0,#2*8] + ldp x24,x25,[x0,#4*8] + add x2,x1,x2,lsl#7 + ldp x26,x27,[x0,#6*8] + adr x30,LK512 + stp x0,x2,[x29,#96] + +Loop: + ldp x3,x4,[x1],#2*8 + ldr x19,[x30],#8 + eor x28,x21,x22 + str x1,[x29,#112] + + rev x3,x3 + + ror x16,x24,#14 + add x27,x27,x19 + eor x6,x24,x24,ror#23 + and x17,x25,x24 + bic x19,x26,x24 + add x27,x27,x3 + orr x17,x17,x19 + eor x19,x20,x21 + eor x16,x16,x6,ror#18 + ror x6,x20,#28 + add x27,x27,x17 + eor x17,x20,x20,ror#5 + add x27,x27,x16 + and x28,x28,x19 + add x23,x23,x27 + eor x28,x28,x21 + eor x17,x6,x17,ror#34 + add x27,x27,x28 + ldr x28,[x30],#8 + + + rev x4,x4 + + ldp x5,x6,[x1],#2*8 + add x27,x27,x17 + ror x16,x23,#14 + add x26,x26,x28 + eor x7,x23,x23,ror#23 + and x17,x24,x23 + bic x28,x25,x23 + add x26,x26,x4 + orr x17,x17,x28 + eor x28,x27,x20 + eor x16,x16,x7,ror#18 + ror x7,x27,#28 + add x26,x26,x17 + eor x17,x27,x27,ror#5 + add x26,x26,x16 + and x19,x19,x28 + add x22,x22,x26 + eor x19,x19,x20 + eor x17,x7,x17,ror#34 + add x26,x26,x19 + ldr x19,[x30],#8 + + + rev x5,x5 + + add x26,x26,x17 + ror x16,x22,#14 + add x25,x25,x19 + eor x8,x22,x22,ror#23 + and x17,x23,x22 + bic x19,x24,x22 + add x25,x25,x5 + orr x17,x17,x19 + eor x19,x26,x27 + eor x16,x16,x8,ror#18 + ror x8,x26,#28 + add x25,x25,x17 + eor x17,x26,x26,ror#5 + add x25,x25,x16 + and x28,x28,x19 + add x21,x21,x25 + eor x28,x28,x27 + eor x17,x8,x17,ror#34 + add x25,x25,x28 + ldr x28,[x30],#8 + + + rev x6,x6 + + ldp x7,x8,[x1],#2*8 + add x25,x25,x17 + ror x16,x21,#14 + add x24,x24,x28 + eor x9,x21,x21,ror#23 + and x17,x22,x21 + bic x28,x23,x21 + add x24,x24,x6 + orr x17,x17,x28 + eor x28,x25,x26 + eor x16,x16,x9,ror#18 + ror x9,x25,#28 + add x24,x24,x17 + eor x17,x25,x25,ror#5 + add x24,x24,x16 + and x19,x19,x28 + add x20,x20,x24 + eor x19,x19,x26 + eor x17,x9,x17,ror#34 + add x24,x24,x19 + ldr x19,[x30],#8 + + + rev x7,x7 + + add x24,x24,x17 + ror x16,x20,#14 + add x23,x23,x19 + eor x10,x20,x20,ror#23 + and x17,x21,x20 + bic x19,x22,x20 + add x23,x23,x7 + orr x17,x17,x19 + eor x19,x24,x25 + eor x16,x16,x10,ror#18 + ror x10,x24,#28 + add x23,x23,x17 + eor x17,x24,x24,ror#5 + add x23,x23,x16 + and x28,x28,x19 + add x27,x27,x23 + eor x28,x28,x25 + eor x17,x10,x17,ror#34 + add x23,x23,x28 + ldr x28,[x30],#8 + + + rev x8,x8 + + ldp x9,x10,[x1],#2*8 + add x23,x23,x17 + ror x16,x27,#14 + add x22,x22,x28 + eor x11,x27,x27,ror#23 + and x17,x20,x27 + bic x28,x21,x27 + add x22,x22,x8 + orr x17,x17,x28 + eor x28,x23,x24 + eor x16,x16,x11,ror#18 + ror x11,x23,#28 + add x22,x22,x17 + eor x17,x23,x23,ror#5 + add x22,x22,x16 + and x19,x19,x28 + add x26,x26,x22 + eor x19,x19,x24 + eor x17,x11,x17,ror#34 + add x22,x22,x19 + ldr x19,[x30],#8 + + + rev x9,x9 + + add x22,x22,x17 + ror x16,x26,#14 + add x21,x21,x19 + eor x12,x26,x26,ror#23 + and x17,x27,x26 + bic x19,x20,x26 + add x21,x21,x9 + orr x17,x17,x19 + eor x19,x22,x23 + eor x16,x16,x12,ror#18 + ror x12,x22,#28 + add x21,x21,x17 + eor x17,x22,x22,ror#5 + add x21,x21,x16 + and x28,x28,x19 + add x25,x25,x21 + eor x28,x28,x23 + eor x17,x12,x17,ror#34 + add x21,x21,x28 + ldr x28,[x30],#8 + + + rev x10,x10 + + ldp x11,x12,[x1],#2*8 + add x21,x21,x17 + ror x16,x25,#14 + add x20,x20,x28 + eor x13,x25,x25,ror#23 + and x17,x26,x25 + bic x28,x27,x25 + add x20,x20,x10 + orr x17,x17,x28 + eor x28,x21,x22 + eor x16,x16,x13,ror#18 + ror x13,x21,#28 + add x20,x20,x17 + eor x17,x21,x21,ror#5 + add x20,x20,x16 + and x19,x19,x28 + add x24,x24,x20 + eor x19,x19,x22 + eor x17,x13,x17,ror#34 + add x20,x20,x19 + ldr x19,[x30],#8 + + + rev x11,x11 + + add x20,x20,x17 + ror x16,x24,#14 + add x27,x27,x19 + eor x14,x24,x24,ror#23 + and x17,x25,x24 + bic x19,x26,x24 + add x27,x27,x11 + orr x17,x17,x19 + eor x19,x20,x21 + eor x16,x16,x14,ror#18 + ror x14,x20,#28 + add x27,x27,x17 + eor x17,x20,x20,ror#5 + add x27,x27,x16 + and x28,x28,x19 + add x23,x23,x27 + eor x28,x28,x21 + eor x17,x14,x17,ror#34 + add x27,x27,x28 + ldr x28,[x30],#8 + + + rev x12,x12 + + ldp x13,x14,[x1],#2*8 + add x27,x27,x17 + ror x16,x23,#14 + add x26,x26,x28 + eor x15,x23,x23,ror#23 + and x17,x24,x23 + bic x28,x25,x23 + add x26,x26,x12 + orr x17,x17,x28 + eor x28,x27,x20 + eor x16,x16,x15,ror#18 + ror x15,x27,#28 + add x26,x26,x17 + eor x17,x27,x27,ror#5 + add x26,x26,x16 + and x19,x19,x28 + add x22,x22,x26 + eor x19,x19,x20 + eor x17,x15,x17,ror#34 + add x26,x26,x19 + ldr x19,[x30],#8 + + + rev x13,x13 + + add x26,x26,x17 + ror x16,x22,#14 + add x25,x25,x19 + eor x0,x22,x22,ror#23 + and x17,x23,x22 + bic x19,x24,x22 + add x25,x25,x13 + orr x17,x17,x19 + eor x19,x26,x27 + eor x16,x16,x0,ror#18 + ror x0,x26,#28 + add x25,x25,x17 + eor x17,x26,x26,ror#5 + add x25,x25,x16 + and x28,x28,x19 + add x21,x21,x25 + eor x28,x28,x27 + eor x17,x0,x17,ror#34 + add x25,x25,x28 + ldr x28,[x30],#8 + + + rev x14,x14 + + ldp x15,x0,[x1],#2*8 + add x25,x25,x17 + str x6,[sp,#24] + ror x16,x21,#14 + add x24,x24,x28 + eor x6,x21,x21,ror#23 + and x17,x22,x21 + bic x28,x23,x21 + add x24,x24,x14 + orr x17,x17,x28 + eor x28,x25,x26 + eor x16,x16,x6,ror#18 + ror x6,x25,#28 + add x24,x24,x17 + eor x17,x25,x25,ror#5 + add x24,x24,x16 + and x19,x19,x28 + add x20,x20,x24 + eor x19,x19,x26 + eor x17,x6,x17,ror#34 + add x24,x24,x19 + ldr x19,[x30],#8 + + + rev x15,x15 + + add x24,x24,x17 + str x7,[sp,#0] + ror x16,x20,#14 + add x23,x23,x19 + eor x7,x20,x20,ror#23 + and x17,x21,x20 + bic x19,x22,x20 + add x23,x23,x15 + orr x17,x17,x19 + eor x19,x24,x25 + eor x16,x16,x7,ror#18 + ror x7,x24,#28 + add x23,x23,x17 + eor x17,x24,x24,ror#5 + add x23,x23,x16 + and x28,x28,x19 + add x27,x27,x23 + eor x28,x28,x25 + eor x17,x7,x17,ror#34 + add x23,x23,x28 + ldr x28,[x30],#8 + + + rev x0,x0 + + ldp x1,x2,[x1] + add x23,x23,x17 + str x8,[sp,#8] + ror x16,x27,#14 + add x22,x22,x28 + eor x8,x27,x27,ror#23 + and x17,x20,x27 + bic x28,x21,x27 + add x22,x22,x0 + orr x17,x17,x28 + eor x28,x23,x24 + eor x16,x16,x8,ror#18 + ror x8,x23,#28 + add x22,x22,x17 + eor x17,x23,x23,ror#5 + add x22,x22,x16 + and x19,x19,x28 + add x26,x26,x22 + eor x19,x19,x24 + eor x17,x8,x17,ror#34 + add x22,x22,x19 + ldr x19,[x30],#8 + + + rev x1,x1 + + ldr x6,[sp,#24] + add x22,x22,x17 + str x9,[sp,#16] + ror x16,x26,#14 + add x21,x21,x19 + eor x9,x26,x26,ror#23 + and x17,x27,x26 + bic x19,x20,x26 + add x21,x21,x1 + orr x17,x17,x19 + eor x19,x22,x23 + eor x16,x16,x9,ror#18 + ror x9,x22,#28 + add x21,x21,x17 + eor x17,x22,x22,ror#5 + add x21,x21,x16 + and x28,x28,x19 + add x25,x25,x21 + eor x28,x28,x23 + eor x17,x9,x17,ror#34 + add x21,x21,x28 + ldr x28,[x30],#8 + + + rev x2,x2 + + ldr x7,[sp,#0] + add x21,x21,x17 + str x10,[sp,#24] + ror x16,x25,#14 + add x20,x20,x28 + ror x9,x4,#1 + and x17,x26,x25 + ror x8,x1,#19 + bic x28,x27,x25 + ror x10,x21,#28 + add x20,x20,x2 + eor x16,x16,x25,ror#18 + eor x9,x9,x4,ror#8 + orr x17,x17,x28 + eor x28,x21,x22 + eor x16,x16,x25,ror#41 + eor x10,x10,x21,ror#34 + add x20,x20,x17 + and x19,x19,x28 + eor x8,x8,x1,ror#61 + eor x9,x9,x4,lsr#7 + add x20,x20,x16 + eor x19,x19,x22 + eor x17,x10,x21,ror#39 + eor x8,x8,x1,lsr#6 + add x3,x3,x12 + add x24,x24,x20 + add x20,x20,x19 + ldr x19,[x30],#8 + add x3,x3,x9 + add x20,x20,x17 + add x3,x3,x8 +Loop_16_xx: + ldr x8,[sp,#8] + str x11,[sp,#0] + ror x16,x24,#14 + add x27,x27,x19 + ror x10,x5,#1 + and x17,x25,x24 + ror x9,x2,#19 + bic x19,x26,x24 + ror x11,x20,#28 + add x27,x27,x3 + eor x16,x16,x24,ror#18 + eor x10,x10,x5,ror#8 + orr x17,x17,x19 + eor x19,x20,x21 + eor x16,x16,x24,ror#41 + eor x11,x11,x20,ror#34 + add x27,x27,x17 + and x28,x28,x19 + eor x9,x9,x2,ror#61 + eor x10,x10,x5,lsr#7 + add x27,x27,x16 + eor x28,x28,x21 + eor x17,x11,x20,ror#39 + eor x9,x9,x2,lsr#6 + add x4,x4,x13 + add x23,x23,x27 + add x27,x27,x28 + ldr x28,[x30],#8 + add x4,x4,x10 + add x27,x27,x17 + add x4,x4,x9 + ldr x9,[sp,#16] + str x12,[sp,#8] + ror x16,x23,#14 + add x26,x26,x28 + ror x11,x6,#1 + and x17,x24,x23 + ror x10,x3,#19 + bic x28,x25,x23 + ror x12,x27,#28 + add x26,x26,x4 + eor x16,x16,x23,ror#18 + eor x11,x11,x6,ror#8 + orr x17,x17,x28 + eor x28,x27,x20 + eor x16,x16,x23,ror#41 + eor x12,x12,x27,ror#34 + add x26,x26,x17 + and x19,x19,x28 + eor x10,x10,x3,ror#61 + eor x11,x11,x6,lsr#7 + add x26,x26,x16 + eor x19,x19,x20 + eor x17,x12,x27,ror#39 + eor x10,x10,x3,lsr#6 + add x5,x5,x14 + add x22,x22,x26 + add x26,x26,x19 + ldr x19,[x30],#8 + add x5,x5,x11 + add x26,x26,x17 + add x5,x5,x10 + ldr x10,[sp,#24] + str x13,[sp,#16] + ror x16,x22,#14 + add x25,x25,x19 + ror x12,x7,#1 + and x17,x23,x22 + ror x11,x4,#19 + bic x19,x24,x22 + ror x13,x26,#28 + add x25,x25,x5 + eor x16,x16,x22,ror#18 + eor x12,x12,x7,ror#8 + orr x17,x17,x19 + eor x19,x26,x27 + eor x16,x16,x22,ror#41 + eor x13,x13,x26,ror#34 + add x25,x25,x17 + and x28,x28,x19 + eor x11,x11,x4,ror#61 + eor x12,x12,x7,lsr#7 + add x25,x25,x16 + eor x28,x28,x27 + eor x17,x13,x26,ror#39 + eor x11,x11,x4,lsr#6 + add x6,x6,x15 + add x21,x21,x25 + add x25,x25,x28 + ldr x28,[x30],#8 + add x6,x6,x12 + add x25,x25,x17 + add x6,x6,x11 + ldr x11,[sp,#0] + str x14,[sp,#24] + ror x16,x21,#14 + add x24,x24,x28 + ror x13,x8,#1 + and x17,x22,x21 + ror x12,x5,#19 + bic x28,x23,x21 + ror x14,x25,#28 + add x24,x24,x6 + eor x16,x16,x21,ror#18 + eor x13,x13,x8,ror#8 + orr x17,x17,x28 + eor x28,x25,x26 + eor x16,x16,x21,ror#41 + eor x14,x14,x25,ror#34 + add x24,x24,x17 + and x19,x19,x28 + eor x12,x12,x5,ror#61 + eor x13,x13,x8,lsr#7 + add x24,x24,x16 + eor x19,x19,x26 + eor x17,x14,x25,ror#39 + eor x12,x12,x5,lsr#6 + add x7,x7,x0 + add x20,x20,x24 + add x24,x24,x19 + ldr x19,[x30],#8 + add x7,x7,x13 + add x24,x24,x17 + add x7,x7,x12 + ldr x12,[sp,#8] + str x15,[sp,#0] + ror x16,x20,#14 + add x23,x23,x19 + ror x14,x9,#1 + and x17,x21,x20 + ror x13,x6,#19 + bic x19,x22,x20 + ror x15,x24,#28 + add x23,x23,x7 + eor x16,x16,x20,ror#18 + eor x14,x14,x9,ror#8 + orr x17,x17,x19 + eor x19,x24,x25 + eor x16,x16,x20,ror#41 + eor x15,x15,x24,ror#34 + add x23,x23,x17 + and x28,x28,x19 + eor x13,x13,x6,ror#61 + eor x14,x14,x9,lsr#7 + add x23,x23,x16 + eor x28,x28,x25 + eor x17,x15,x24,ror#39 + eor x13,x13,x6,lsr#6 + add x8,x8,x1 + add x27,x27,x23 + add x23,x23,x28 + ldr x28,[x30],#8 + add x8,x8,x14 + add x23,x23,x17 + add x8,x8,x13 + ldr x13,[sp,#16] + str x0,[sp,#8] + ror x16,x27,#14 + add x22,x22,x28 + ror x15,x10,#1 + and x17,x20,x27 + ror x14,x7,#19 + bic x28,x21,x27 + ror x0,x23,#28 + add x22,x22,x8 + eor x16,x16,x27,ror#18 + eor x15,x15,x10,ror#8 + orr x17,x17,x28 + eor x28,x23,x24 + eor x16,x16,x27,ror#41 + eor x0,x0,x23,ror#34 + add x22,x22,x17 + and x19,x19,x28 + eor x14,x14,x7,ror#61 + eor x15,x15,x10,lsr#7 + add x22,x22,x16 + eor x19,x19,x24 + eor x17,x0,x23,ror#39 + eor x14,x14,x7,lsr#6 + add x9,x9,x2 + add x26,x26,x22 + add x22,x22,x19 + ldr x19,[x30],#8 + add x9,x9,x15 + add x22,x22,x17 + add x9,x9,x14 + ldr x14,[sp,#24] + str x1,[sp,#16] + ror x16,x26,#14 + add x21,x21,x19 + ror x0,x11,#1 + and x17,x27,x26 + ror x15,x8,#19 + bic x19,x20,x26 + ror x1,x22,#28 + add x21,x21,x9 + eor x16,x16,x26,ror#18 + eor x0,x0,x11,ror#8 + orr x17,x17,x19 + eor x19,x22,x23 + eor x16,x16,x26,ror#41 + eor x1,x1,x22,ror#34 + add x21,x21,x17 + and x28,x28,x19 + eor x15,x15,x8,ror#61 + eor x0,x0,x11,lsr#7 + add x21,x21,x16 + eor x28,x28,x23 + eor x17,x1,x22,ror#39 + eor x15,x15,x8,lsr#6 + add x10,x10,x3 + add x25,x25,x21 + add x21,x21,x28 + ldr x28,[x30],#8 + add x10,x10,x0 + add x21,x21,x17 + add x10,x10,x15 + ldr x15,[sp,#0] + str x2,[sp,#24] + ror x16,x25,#14 + add x20,x20,x28 + ror x1,x12,#1 + and x17,x26,x25 + ror x0,x9,#19 + bic x28,x27,x25 + ror x2,x21,#28 + add x20,x20,x10 + eor x16,x16,x25,ror#18 + eor x1,x1,x12,ror#8 + orr x17,x17,x28 + eor x28,x21,x22 + eor x16,x16,x25,ror#41 + eor x2,x2,x21,ror#34 + add x20,x20,x17 + and x19,x19,x28 + eor x0,x0,x9,ror#61 + eor x1,x1,x12,lsr#7 + add x20,x20,x16 + eor x19,x19,x22 + eor x17,x2,x21,ror#39 + eor x0,x0,x9,lsr#6 + add x11,x11,x4 + add x24,x24,x20 + add x20,x20,x19 + ldr x19,[x30],#8 + add x11,x11,x1 + add x20,x20,x17 + add x11,x11,x0 + ldr x0,[sp,#8] + str x3,[sp,#0] + ror x16,x24,#14 + add x27,x27,x19 + ror x2,x13,#1 + and x17,x25,x24 + ror x1,x10,#19 + bic x19,x26,x24 + ror x3,x20,#28 + add x27,x27,x11 + eor x16,x16,x24,ror#18 + eor x2,x2,x13,ror#8 + orr x17,x17,x19 + eor x19,x20,x21 + eor x16,x16,x24,ror#41 + eor x3,x3,x20,ror#34 + add x27,x27,x17 + and x28,x28,x19 + eor x1,x1,x10,ror#61 + eor x2,x2,x13,lsr#7 + add x27,x27,x16 + eor x28,x28,x21 + eor x17,x3,x20,ror#39 + eor x1,x1,x10,lsr#6 + add x12,x12,x5 + add x23,x23,x27 + add x27,x27,x28 + ldr x28,[x30],#8 + add x12,x12,x2 + add x27,x27,x17 + add x12,x12,x1 + ldr x1,[sp,#16] + str x4,[sp,#8] + ror x16,x23,#14 + add x26,x26,x28 + ror x3,x14,#1 + and x17,x24,x23 + ror x2,x11,#19 + bic x28,x25,x23 + ror x4,x27,#28 + add x26,x26,x12 + eor x16,x16,x23,ror#18 + eor x3,x3,x14,ror#8 + orr x17,x17,x28 + eor x28,x27,x20 + eor x16,x16,x23,ror#41 + eor x4,x4,x27,ror#34 + add x26,x26,x17 + and x19,x19,x28 + eor x2,x2,x11,ror#61 + eor x3,x3,x14,lsr#7 + add x26,x26,x16 + eor x19,x19,x20 + eor x17,x4,x27,ror#39 + eor x2,x2,x11,lsr#6 + add x13,x13,x6 + add x22,x22,x26 + add x26,x26,x19 + ldr x19,[x30],#8 + add x13,x13,x3 + add x26,x26,x17 + add x13,x13,x2 + ldr x2,[sp,#24] + str x5,[sp,#16] + ror x16,x22,#14 + add x25,x25,x19 + ror x4,x15,#1 + and x17,x23,x22 + ror x3,x12,#19 + bic x19,x24,x22 + ror x5,x26,#28 + add x25,x25,x13 + eor x16,x16,x22,ror#18 + eor x4,x4,x15,ror#8 + orr x17,x17,x19 + eor x19,x26,x27 + eor x16,x16,x22,ror#41 + eor x5,x5,x26,ror#34 + add x25,x25,x17 + and x28,x28,x19 + eor x3,x3,x12,ror#61 + eor x4,x4,x15,lsr#7 + add x25,x25,x16 + eor x28,x28,x27 + eor x17,x5,x26,ror#39 + eor x3,x3,x12,lsr#6 + add x14,x14,x7 + add x21,x21,x25 + add x25,x25,x28 + ldr x28,[x30],#8 + add x14,x14,x4 + add x25,x25,x17 + add x14,x14,x3 + ldr x3,[sp,#0] + str x6,[sp,#24] + ror x16,x21,#14 + add x24,x24,x28 + ror x5,x0,#1 + and x17,x22,x21 + ror x4,x13,#19 + bic x28,x23,x21 + ror x6,x25,#28 + add x24,x24,x14 + eor x16,x16,x21,ror#18 + eor x5,x5,x0,ror#8 + orr x17,x17,x28 + eor x28,x25,x26 + eor x16,x16,x21,ror#41 + eor x6,x6,x25,ror#34 + add x24,x24,x17 + and x19,x19,x28 + eor x4,x4,x13,ror#61 + eor x5,x5,x0,lsr#7 + add x24,x24,x16 + eor x19,x19,x26 + eor x17,x6,x25,ror#39 + eor x4,x4,x13,lsr#6 + add x15,x15,x8 + add x20,x20,x24 + add x24,x24,x19 + ldr x19,[x30],#8 + add x15,x15,x5 + add x24,x24,x17 + add x15,x15,x4 + ldr x4,[sp,#8] + str x7,[sp,#0] + ror x16,x20,#14 + add x23,x23,x19 + ror x6,x1,#1 + and x17,x21,x20 + ror x5,x14,#19 + bic x19,x22,x20 + ror x7,x24,#28 + add x23,x23,x15 + eor x16,x16,x20,ror#18 + eor x6,x6,x1,ror#8 + orr x17,x17,x19 + eor x19,x24,x25 + eor x16,x16,x20,ror#41 + eor x7,x7,x24,ror#34 + add x23,x23,x17 + and x28,x28,x19 + eor x5,x5,x14,ror#61 + eor x6,x6,x1,lsr#7 + add x23,x23,x16 + eor x28,x28,x25 + eor x17,x7,x24,ror#39 + eor x5,x5,x14,lsr#6 + add x0,x0,x9 + add x27,x27,x23 + add x23,x23,x28 + ldr x28,[x30],#8 + add x0,x0,x6 + add x23,x23,x17 + add x0,x0,x5 + ldr x5,[sp,#16] + str x8,[sp,#8] + ror x16,x27,#14 + add x22,x22,x28 + ror x7,x2,#1 + and x17,x20,x27 + ror x6,x15,#19 + bic x28,x21,x27 + ror x8,x23,#28 + add x22,x22,x0 + eor x16,x16,x27,ror#18 + eor x7,x7,x2,ror#8 + orr x17,x17,x28 + eor x28,x23,x24 + eor x16,x16,x27,ror#41 + eor x8,x8,x23,ror#34 + add x22,x22,x17 + and x19,x19,x28 + eor x6,x6,x15,ror#61 + eor x7,x7,x2,lsr#7 + add x22,x22,x16 + eor x19,x19,x24 + eor x17,x8,x23,ror#39 + eor x6,x6,x15,lsr#6 + add x1,x1,x10 + add x26,x26,x22 + add x22,x22,x19 + ldr x19,[x30],#8 + add x1,x1,x7 + add x22,x22,x17 + add x1,x1,x6 + ldr x6,[sp,#24] + str x9,[sp,#16] + ror x16,x26,#14 + add x21,x21,x19 + ror x8,x3,#1 + and x17,x27,x26 + ror x7,x0,#19 + bic x19,x20,x26 + ror x9,x22,#28 + add x21,x21,x1 + eor x16,x16,x26,ror#18 + eor x8,x8,x3,ror#8 + orr x17,x17,x19 + eor x19,x22,x23 + eor x16,x16,x26,ror#41 + eor x9,x9,x22,ror#34 + add x21,x21,x17 + and x28,x28,x19 + eor x7,x7,x0,ror#61 + eor x8,x8,x3,lsr#7 + add x21,x21,x16 + eor x28,x28,x23 + eor x17,x9,x22,ror#39 + eor x7,x7,x0,lsr#6 + add x2,x2,x11 + add x25,x25,x21 + add x21,x21,x28 + ldr x28,[x30],#8 + add x2,x2,x8 + add x21,x21,x17 + add x2,x2,x7 + ldr x7,[sp,#0] + str x10,[sp,#24] + ror x16,x25,#14 + add x20,x20,x28 + ror x9,x4,#1 + and x17,x26,x25 + ror x8,x1,#19 + bic x28,x27,x25 + ror x10,x21,#28 + add x20,x20,x2 + eor x16,x16,x25,ror#18 + eor x9,x9,x4,ror#8 + orr x17,x17,x28 + eor x28,x21,x22 + eor x16,x16,x25,ror#41 + eor x10,x10,x21,ror#34 + add x20,x20,x17 + and x19,x19,x28 + eor x8,x8,x1,ror#61 + eor x9,x9,x4,lsr#7 + add x20,x20,x16 + eor x19,x19,x22 + eor x17,x10,x21,ror#39 + eor x8,x8,x1,lsr#6 + add x3,x3,x12 + add x24,x24,x20 + add x20,x20,x19 + ldr x19,[x30],#8 + add x3,x3,x9 + add x20,x20,x17 + add x3,x3,x8 + cbnz x19,Loop_16_xx + + ldp x0,x2,[x29,#96] + ldr x1,[x29,#112] + sub x30,x30,#648 + + ldp x3,x4,[x0] + ldp x5,x6,[x0,#2*8] + add x1,x1,#14*8 + ldp x7,x8,[x0,#4*8] + add x20,x20,x3 + ldp x9,x10,[x0,#6*8] + add x21,x21,x4 + add x22,x22,x5 + add x23,x23,x6 + stp x20,x21,[x0] + add x24,x24,x7 + add x25,x25,x8 + stp x22,x23,[x0,#2*8] + add x26,x26,x9 + add x27,x27,x10 + cmp x1,x2 + stp x24,x25,[x0,#4*8] + stp x26,x27,[x0,#6*8] + b.ne Loop + + ldp x19,x20,[x29,#16] + add sp,sp,#4*8 + 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 +.long 0xd50323bf + ret + + +.align 6 + +LK512: +.quad 0x428a2f98d728ae22,0x7137449123ef65cd +.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc +.quad 0x3956c25bf348b538,0x59f111f1b605d019 +.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 +.quad 0xd807aa98a3030242,0x12835b0145706fbe +.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 +.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 +.quad 0x9bdc06a725c71235,0xc19bf174cf692694 +.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 +.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 +.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 +.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 +.quad 0x983e5152ee66dfab,0xa831c66d2db43210 +.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 +.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 +.quad 0x06ca6351e003826f,0x142929670a0e6e70 +.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 +.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df +.quad 0x650a73548baf63de,0x766a0abb3c77b2a8 +.quad 0x81c2c92e47edaee6,0x92722c851482353b +.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 +.quad 0xc24b8b70d0f89791,0xc76c51a30654be30 +.quad 0xd192e819d6ef5218,0xd69906245565a910 +.quad 0xf40e35855771202a,0x106aa07032bbd1b8 +.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 +.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 +.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb +.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 +.quad 0x748f82ee5defb2fc,0x78a5636f43172f60 +.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec +.quad 0x90befffa23631e28,0xa4506cebde82bde9 +.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b +.quad 0xca273eceea26619c,0xd186b8c721c0c207 +.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 +.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 +.quad 0x113f9804bef90dae,0x1b710b35131c471b +.quad 0x28db77f523047d84,0x32caab7b40c72493 +.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c +.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a +.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +.quad 0 + + +.align 3 +L_gnutls_arm_cpuid_s: + + + +.quad __gnutls_arm_cpuid_s-. + + +.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 + + +.align 6 +sha512_block_armv8: +Lv8_entry: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x1],#64 + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + + ld1 {v0.2d,v1.2d,v2.2d,v3.2d},[x0] + adr x3,LK512 + + rev64 v16.16b,v16.16b + rev64 v17.16b,v17.16b + rev64 v18.16b,v18.16b + rev64 v19.16b,v19.16b + rev64 v20.16b,v20.16b + rev64 v21.16b,v21.16b + rev64 v22.16b,v22.16b + rev64 v23.16b,v23.16b + b Loop_hw + +.align 4 +Loop_hw: + ld1 {v24.2d},[x3],#16 + subs x2,x2,#1 + sub x4,x1,#128 + orr v26.16b,v0.16b,v0.16b + orr v27.16b,v1.16b,v1.16b + orr v28.16b,v2.16b,v2.16b + orr v29.16b,v3.16b,v3.16b + csel x1,x1,x4,ne + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d +.long 0xcec08230 + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a3 +.long 0xce678af0 + add v4.2d,v1.2d,v3.2d +.long 0xce608423 + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d +.long 0xcec08251 + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a2 +.long 0xce678a11 + add v1.2d,v0.2d,v2.2d +.long 0xce638402 + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d +.long 0xcec08272 + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a4 +.long 0xce678a32 + add v0.2d,v3.2d,v4.2d +.long 0xce628464 + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d +.long 0xcec08293 + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a1 +.long 0xce678a53 + add v3.2d,v2.2d,v1.2d +.long 0xce648441 + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d +.long 0xcec082b4 + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a0 +.long 0xce678a74 + add v2.2d,v4.2d,v0.2d +.long 0xce618480 + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d +.long 0xcec082d5 + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a3 +.long 0xce678a95 + add v4.2d,v1.2d,v3.2d +.long 0xce608423 + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d +.long 0xcec082f6 + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a2 +.long 0xce678ab6 + add v1.2d,v0.2d,v2.2d +.long 0xce638402 + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d +.long 0xcec08217 + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a4 +.long 0xce678ad7 + add v0.2d,v3.2d,v4.2d +.long 0xce628464 + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d +.long 0xcec08230 + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a1 +.long 0xce678af0 + add v3.2d,v2.2d,v1.2d +.long 0xce648441 + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d +.long 0xcec08251 + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a0 +.long 0xce678a11 + add v2.2d,v4.2d,v0.2d +.long 0xce618480 + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d +.long 0xcec08272 + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a3 +.long 0xce678a32 + add v4.2d,v1.2d,v3.2d +.long 0xce608423 + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d +.long 0xcec08293 + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a2 +.long 0xce678a53 + add v1.2d,v0.2d,v2.2d +.long 0xce638402 + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d +.long 0xcec082b4 + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a4 +.long 0xce678a74 + add v0.2d,v3.2d,v4.2d +.long 0xce628464 + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d +.long 0xcec082d5 + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a1 +.long 0xce678a95 + add v3.2d,v2.2d,v1.2d +.long 0xce648441 + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d +.long 0xcec082f6 + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a0 +.long 0xce678ab6 + add v2.2d,v4.2d,v0.2d +.long 0xce618480 + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d +.long 0xcec08217 + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a3 +.long 0xce678ad7 + add v4.2d,v1.2d,v3.2d +.long 0xce608423 + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d +.long 0xcec08230 + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a2 +.long 0xce678af0 + add v1.2d,v0.2d,v2.2d +.long 0xce638402 + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d +.long 0xcec08251 + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a4 +.long 0xce678a11 + add v0.2d,v3.2d,v4.2d +.long 0xce628464 + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d +.long 0xcec08272 + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a1 +.long 0xce678a32 + add v3.2d,v2.2d,v1.2d +.long 0xce648441 + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d +.long 0xcec08293 + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a0 +.long 0xce678a53 + add v2.2d,v4.2d,v0.2d +.long 0xce618480 + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d +.long 0xcec082b4 + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a3 +.long 0xce678a74 + add v4.2d,v1.2d,v3.2d +.long 0xce608423 + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d +.long 0xcec082d5 + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a2 +.long 0xce678a95 + add v1.2d,v0.2d,v2.2d +.long 0xce638402 + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d +.long 0xcec082f6 + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a4 +.long 0xce678ab6 + add v0.2d,v3.2d,v4.2d +.long 0xce628464 + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d +.long 0xcec08217 + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a1 +.long 0xce678ad7 + add v3.2d,v2.2d,v1.2d +.long 0xce648441 + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d +.long 0xcec08230 + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a0 +.long 0xce678af0 + add v2.2d,v4.2d,v0.2d +.long 0xce618480 + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d +.long 0xcec08251 + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a3 +.long 0xce678a11 + add v4.2d,v1.2d,v3.2d +.long 0xce608423 + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d +.long 0xcec08272 + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a2 +.long 0xce678a32 + add v1.2d,v0.2d,v2.2d +.long 0xce638402 + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d +.long 0xcec08293 + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a4 +.long 0xce678a53 + add v0.2d,v3.2d,v4.2d +.long 0xce628464 + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d +.long 0xcec082b4 + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a1 +.long 0xce678a74 + add v3.2d,v2.2d,v1.2d +.long 0xce648441 + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d +.long 0xcec082d5 + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a0 +.long 0xce678a95 + add v2.2d,v4.2d,v0.2d +.long 0xce618480 + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d +.long 0xcec082f6 + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a3 +.long 0xce678ab6 + add v4.2d,v1.2d,v3.2d +.long 0xce608423 + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d +.long 0xcec08217 + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a2 +.long 0xce678ad7 + add v1.2d,v0.2d,v2.2d +.long 0xce638402 + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v16.2d + ld1 {v16.16b},[x1],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d +.long 0xce6680a4 + rev64 v16.16b,v16.16b + add v0.2d,v3.2d,v4.2d +.long 0xce628464 + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v17.2d + ld1 {v17.16b},[x1],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d +.long 0xce6680a1 + rev64 v17.16b,v17.16b + add v3.2d,v2.2d,v1.2d +.long 0xce648441 + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v18.2d + ld1 {v18.16b},[x1],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d +.long 0xce6680a0 + rev64 v18.16b,v18.16b + add v2.2d,v4.2d,v0.2d +.long 0xce618480 + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v19.2d + ld1 {v19.16b},[x1],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d +.long 0xce6680a3 + rev64 v19.16b,v19.16b + add v4.2d,v1.2d,v3.2d +.long 0xce608423 + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v20.2d + ld1 {v20.16b},[x1],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d +.long 0xce6680a2 + rev64 v20.16b,v20.16b + add v1.2d,v0.2d,v2.2d +.long 0xce638402 + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v21.2d + ld1 {v21.16b},[x1],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d +.long 0xce6680a4 + rev64 v21.16b,v21.16b + add v0.2d,v3.2d,v4.2d +.long 0xce628464 + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v22.2d + ld1 {v22.16b},[x1],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d +.long 0xce6680a1 + rev64 v22.16b,v22.16b + add v3.2d,v2.2d,v1.2d +.long 0xce648441 + sub x3,x3,#80*8 + add v25.2d,v25.2d,v23.2d + ld1 {v23.16b},[x1],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d +.long 0xce6680a0 + rev64 v23.16b,v23.16b + add v2.2d,v4.2d,v0.2d +.long 0xce618480 + add v0.2d,v0.2d,v26.2d + add v1.2d,v1.2d,v27.2d + add v2.2d,v2.2d,v28.2d + add v3.2d,v3.2d,v29.2d + + cbnz x2,Loop_hw + + st1 {v0.2d,v1.2d,v2.2d,v3.2d},[x0] + + ldr x29,[sp],#16 + ret + + + +.comm __gnutls_arm_cpuid_s,4,4 diff --git a/lib/accelerated/aarch64/sha-aarch64.c b/lib/accelerated/aarch64/sha-aarch64.c index 5b68204b00..e4871293e5 100644 --- a/lib/accelerated/aarch64/sha-aarch64.c +++ b/lib/accelerated/aarch64/sha-aarch64.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -305,6 +305,25 @@ static int wrap_aarch64_hash_init(gnutls_digest_algorithm_t algo, void **_ctx) return 0; } +static void * +wrap_aarch64_hash_copy(const void *_ctx) +{ + struct aarch64_hash_ctx *new_ctx; + const struct aarch64_hash_ctx *ctx=_ctx; + ptrdiff_t off = (uint8_t *)ctx->ctx_ptr - (uint8_t *)(&ctx->ctx); + + new_ctx = gnutls_malloc(sizeof(struct aarch64_hash_ctx)); + if (new_ctx == NULL) { + gnutls_assert(); + return NULL; + } + + memcpy(new_ctx, ctx, sizeof(*new_ctx)); + new_ctx->ctx_ptr = (uint8_t *)&new_ctx->ctx + off; + + return new_ctx; +} + static int wrap_aarch64_hash_output(void *src_ctx, void *digest, size_t digestsize) { @@ -352,6 +371,7 @@ const gnutls_crypto_digest_st _gnutls_sha_aarch64 = { .init = wrap_aarch64_hash_init, .hash = wrap_aarch64_hash_update, .output = wrap_aarch64_hash_output, + .copy = wrap_aarch64_hash_copy, .deinit = wrap_aarch64_hash_deinit, .fast = wrap_aarch64_hash_fast, }; diff --git a/lib/accelerated/aarch64/sha-aarch64.h b/lib/accelerated/aarch64/sha-aarch64.h index 010a216232..e5282b87a1 100644 --- a/lib/accelerated/aarch64/sha-aarch64.h +++ b/lib/accelerated/aarch64/sha-aarch64.h @@ -1,5 +1,5 @@ -#ifndef SHA_ARM_H -#define SHA_ARM_H +#ifndef GNUTLS_LIB_ACCELERATED_AARCH64_SHA_AARCH64_H +#define GNUTLS_LIB_ACCELERATED_AARCH64_SHA_AARCH64_H #include @@ -16,4 +16,4 @@ void aarch64_sha1_update(struct sha1_ctx *ctx, size_t length, const uint8_t * da void aarch64_sha256_update(struct sha256_ctx *ctx, size_t length, const uint8_t * data); void aarch64_sha512_update(struct sha512_ctx *ctx, size_t length, const uint8_t * data); -#endif +#endif /* GNUTLS_LIB_ACCELERATED_AARCH64_SHA_AARCH64_H */ diff --git a/lib/accelerated/accelerated.c b/lib/accelerated/accelerated.c index 063617a1e9..8fb0b11f65 100644 --- a/lib/accelerated/accelerated.c +++ b/lib/accelerated/accelerated.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . + * along with this program. If not, see . * */ @@ -32,9 +32,7 @@ void _gnutls_register_accel_crypto(void) { #if defined(ASM_X86) - if (gnutls_have_cpuid() != 0) { - register_x86_crypto(); - } + register_x86_crypto(); #endif #if defined(ASM_AARCH64) diff --git a/lib/accelerated/accelerated.h b/lib/accelerated/accelerated.h index 1fccccbb3c..5e9e92afb1 100644 --- a/lib/accelerated/accelerated.h +++ b/lib/accelerated/accelerated.h @@ -1 +1,6 @@ +#ifndef GNUTLS_LIB_ACCELERATED_ACCELERATED_H +# define GNUTLS_LIB_ACCELERATED_ACCELERATED_H + void _gnutls_register_accel_crypto(void); + +#endif /* GNUTLS_LIB_ACCELERATED_ACCELERATED_H */ diff --git a/lib/accelerated/cryptodev-gcm.c b/lib/accelerated/cryptodev-gcm.c index e992b63b47..bd9f1a025d 100644 --- a/lib/accelerated/cryptodev-gcm.c +++ b/lib/accelerated/cryptodev-gcm.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . + * along with this program. If not, see . * */ @@ -99,6 +99,8 @@ aes_gcm_cipher_setkey(void *_ctx, const void *userkey, size_t keysize) { struct cryptodev_gcm_ctx *ctx = _ctx; + CHECK_AES_KEYSIZE(keysize); + ctx->sess.keylen = keysize; ctx->sess.key = (void *) userkey; diff --git a/lib/accelerated/cryptodev.c b/lib/accelerated/cryptodev.c index 71b3365301..d28322967d 100644 --- a/lib/accelerated/cryptodev.c +++ b/lib/accelerated/cryptodev.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . + * along with this program. If not, see . * */ @@ -28,6 +28,7 @@ #ifdef ENABLE_CRYPTODEV +#include #include #include #include @@ -90,6 +91,8 @@ cryptodev_cipher_setkey(void *_ctx, const void *key, size_t keysize) { struct cryptodev_ctx *ctx = _ctx; + CHECK_AES_KEYSIZE(keysize); + ctx->sess.keylen = keysize; ctx->sess.key = (void *) key; @@ -248,7 +251,7 @@ int _gnutls_cryptodev_init(void) return GNUTLS_E_CRYPTODEV_IOCTL_ERROR; } - /* Set close-on-exec (not really neede here) */ + /* Set close-on-exec (not really needed here) */ if (fcntl(cfd, F_SETFD, 1) == -1) { gnutls_assert(); return GNUTLS_E_CRYPTODEV_IOCTL_ERROR; @@ -299,12 +302,15 @@ static const int gnutls_mac_map[] = { static int cryptodev_mac_fast(gnutls_mac_algorithm_t algo, + const void *nonce, size_t nonce_size, const void *key, size_t key_size, const void *text, size_t text_size, void *digest) { struct cryptodev_ctx ctx; int ret; + assert(nonce_size == 0); + memset(&ctx, 0, sizeof(ctx)); ctx.cfd = _gnutls_cryptodev_fd; ctx.sess.mac = gnutls_mac_map[algo]; diff --git a/lib/accelerated/cryptodev.h b/lib/accelerated/cryptodev.h index b77fa6e89e..4824def777 100644 --- a/lib/accelerated/cryptodev.h +++ b/lib/accelerated/cryptodev.h @@ -1,5 +1,14 @@ +#ifndef GNUTLS_LIB_ACCELERATED_CRYPTODEV_H +# define GNUTLS_LIB_ACCELERATED_CRYPTODEV_H + extern int _gnutls_cryptodev_fd; +#define CHECK_AES_KEYSIZE(s) \ + if (s != 16 && s != 24 && s != 32) \ + return GNUTLS_E_INVALID_REQUEST + void _gnutls_cryptodev_deinit(void); int _gnutls_cryptodev_init(void); int _cryptodev_register_gcm_crypto(int cfd); + +#endif /* GNUTLS_LIB_ACCELERATED_CRYPTODEV_H */ diff --git a/lib/accelerated/x86/Makefile.am b/lib/accelerated/x86/Makefile.am index c4ee6a1308..58698af300 100644 --- a/lib/accelerated/x86/Makefile.am +++ b/lib/accelerated/x86/Makefile.am @@ -16,7 +16,7 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see AM_LIBTOOLFLAGS=--tag=CC @@ -39,7 +39,7 @@ noinst_LTLIBRARIES = libx86.la libx86_la_SOURCES = x86-common.c aes-x86.h x86-common.h sha-x86-ssse3.c sha-x86.h hmac-x86-ssse3.c \ aes-gcm-x86-ssse3.c aes-gcm-x86-aesni.c aes-cbc-x86-ssse3.c aes-cbc-x86-aesni.c aes-gcm-aead.h \ - aes-ccm-x86-aesni.c + aes-ccm-x86-aesni.c aes-xts-x86-aesni.c if ENABLE_PADLOCK libx86_la_SOURCES += sha-padlock.c hmac-padlock.c aes-padlock.c aes-gcm-padlock.c \ diff --git a/lib/accelerated/x86/aes-cbc-x86-aesni.c b/lib/accelerated/x86/aes-cbc-x86-aesni.c index 91d50e9bf0..e4364d54a1 100644 --- a/lib/accelerated/x86/aes-cbc-x86-aesni.c +++ b/lib/accelerated/x86/aes-cbc-x86-aesni.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -65,6 +66,8 @@ aes_cipher_setkey(void *_ctx, const void *userkey, size_t keysize) struct aes_ctx *ctx = _ctx; int ret; + CHECK_AES_KEYSIZE(keysize); + if (ctx->enc) ret = aesni_set_encrypt_key(userkey, keysize * 8, @@ -97,6 +100,9 @@ aes_encrypt(void *_ctx, const void *src, size_t src_size, { struct aes_ctx *ctx = _ctx; + if (unlikely(src_size % 16 != 0)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + aesni_cbc_encrypt(src, dst, src_size, ALIGN16(&ctx->expanded_key), ctx->iv, 1); return 0; @@ -108,6 +114,9 @@ aes_decrypt(void *_ctx, const void *src, size_t src_size, { struct aes_ctx *ctx = _ctx; + if (unlikely(src_size % 16 != 0)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + aesni_cbc_encrypt(src, dst, src_size, ALIGN16(&ctx->expanded_key), ctx->iv, 0); diff --git a/lib/accelerated/x86/aes-cbc-x86-ssse3.c b/lib/accelerated/x86/aes-cbc-x86-ssse3.c index 8b90a5990a..fe09f502c3 100644 --- a/lib/accelerated/x86/aes-cbc-x86-ssse3.c +++ b/lib/accelerated/x86/aes-cbc-x86-ssse3.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -65,6 +66,8 @@ aes_ssse3_cipher_setkey(void *_ctx, const void *userkey, size_t keysize) struct aes_ctx *ctx = _ctx; int ret; + CHECK_AES_KEYSIZE(keysize); + if (ctx->enc) ret = vpaes_set_encrypt_key(userkey, keysize * 8, @@ -86,6 +89,9 @@ aes_ssse3_encrypt(void *_ctx, const void *src, size_t src_size, { struct aes_ctx *ctx = _ctx; + if (unlikely(src_size % 16 != 0)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + vpaes_cbc_encrypt(src, dst, src_size, ALIGN16(&ctx->expanded_key), ctx->iv, 1); return 0; @@ -97,6 +103,9 @@ aes_ssse3_decrypt(void *_ctx, const void *src, size_t src_size, { struct aes_ctx *ctx = _ctx; + if (unlikely(src_size % 16 != 0)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + vpaes_cbc_encrypt(src, dst, src_size, ALIGN16(&ctx->expanded_key), ctx->iv, 0); diff --git a/lib/accelerated/x86/aes-ccm-x86-aesni.c b/lib/accelerated/x86/aes-ccm-x86-aesni.c index 4828a229df..95607b95c1 100644 --- a/lib/accelerated/x86/aes-ccm-x86-aesni.c +++ b/lib/accelerated/x86/aes-ccm-x86-aesni.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/accelerated/x86/aes-gcm-aead.h b/lib/accelerated/x86/aes-gcm-aead.h index a1a71edbc5..f8cb5a5ea1 100644 --- a/lib/accelerated/x86/aes-gcm-aead.h +++ b/lib/accelerated/x86/aes-gcm-aead.h @@ -1,3 +1,6 @@ +#ifndef GNUTLS_LIB_ACCELERATED_X86_AES_GCM_AEAD_H +# define GNUTLS_LIB_ACCELERATED_X86_AES_GCM_AEAD_H + static int aes_gcm_aead_encrypt(void *ctx, const void *nonce, size_t nonce_size, @@ -46,3 +49,4 @@ aes_gcm_aead_decrypt(void *ctx, return 0; } +#endif /* GNUTLS_LIB_ACCELERATED_X86_AES_GCM_AEAD_H */ diff --git a/lib/accelerated/x86/aes-gcm-padlock.c b/lib/accelerated/x86/aes-gcm-padlock.c index 51b02a8d5c..d651d0aed5 100644 --- a/lib/accelerated/x86/aes-gcm-padlock.c +++ b/lib/accelerated/x86/aes-gcm-padlock.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -113,7 +113,8 @@ aes_gcm_cipher_setkey(void *_ctx, const void *key, size_t keysize) } else if (keysize == 32) { GCM_SET_KEY(ctx, padlock_aes256_set_encrypt_key, padlock_aes_encrypt, key); - } else abort(); + } else + return GNUTLS_E_INVALID_REQUEST; return 0; } diff --git a/lib/accelerated/x86/aes-gcm-x86-aesni.c b/lib/accelerated/x86/aes-gcm-x86-aesni.c index 9cae528912..e5110ef528 100644 --- a/lib/accelerated/x86/aes-gcm-x86-aesni.c +++ b/lib/accelerated/x86/aes-gcm-x86-aesni.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -49,7 +49,7 @@ static void x86_aes_encrypt(const void *_ctx, { AES_KEY *ctx = (void*)_ctx; - aesni_ecb_encrypt(src, dst, 16, ctx, 1); + aesni_ecb_encrypt(src, dst, length, ctx, 1); } static void x86_aes128_set_encrypt_key(void *_ctx, @@ -97,7 +97,8 @@ aes_gcm_cipher_setkey(void *_ctx, const void *key, size_t length) } else if (length == 32) { GCM_SET_KEY(ctx, x86_aes256_set_encrypt_key, x86_aes_encrypt, key); - } else abort(); + } else + return GNUTLS_E_INVALID_REQUEST; return 0; } diff --git a/lib/accelerated/x86/aes-gcm-x86-pclmul-avx.c b/lib/accelerated/x86/aes-gcm-x86-pclmul-avx.c index 4b469dead9..747a894921 100644 --- a/lib/accelerated/x86/aes-gcm-x86-pclmul-avx.c +++ b/lib/accelerated/x86/aes-gcm-x86-pclmul-avx.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2011-2016 Free Software Foundation, Inc. - * Copyright (C) 2015-2016 Red Hat, Inc. + * Copyright (C) 2015-2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -59,6 +59,8 @@ struct gcm128_context { struct aes_gcm_ctx { AES_KEY expanded_key; struct gcm128_context gcm; + unsigned finished; + unsigned auth_finished; }; void gcm_init_avx(u128 Htable[16], const uint64_t Xi[2]); @@ -97,6 +99,8 @@ aes_gcm_cipher_setkey(void *_ctx, const void *userkey, size_t keysize) struct aes_gcm_ctx *ctx = _ctx; int ret; + CHECK_AES_KEYSIZE(keysize); + ret = aesni_set_encrypt_key(userkey, keysize * 8, ALIGN16(&ctx->expanded_key)); @@ -133,6 +137,8 @@ static int aes_gcm_setiv(void *_ctx, const void *iv, size_t iv_size) aesni_ecb_encrypt(ctx->gcm.Yi.c, ctx->gcm.EK0.c, GCM_BLOCK_SIZE, ALIGN16(&ctx->expanded_key), 1); ctx->gcm.Yi.c[GCM_BLOCK_SIZE - 1] = 2; + ctx->finished = 0; + ctx->auth_finished = 0; return 0; } @@ -178,6 +184,9 @@ aes_gcm_encrypt(void *_ctx, const void *src, size_t src_size, int rest = src_size - (exp_blocks); uint32_t counter; + if (unlikely(ctx->finished)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (blocks > 0) { aesni_ctr32_encrypt_blocks(src, dst, blocks, @@ -189,8 +198,10 @@ aes_gcm_encrypt(void *_ctx, const void *src, size_t src_size, _gnutls_write_uint32(counter, ctx->gcm.Yi.c + 12); } - if (rest > 0) /* last incomplete block */ + if (rest > 0) { /* last incomplete block */ ctr_encrypt_last(ctx, src, dst, exp_blocks, rest); + ctx->finished = 1; + } gcm_ghash(ctx, dst, src_size); ctx->gcm.len.u[1] += src_size; @@ -208,6 +219,9 @@ aes_gcm_decrypt(void *_ctx, const void *src, size_t src_size, int rest = src_size - (exp_blocks); uint32_t counter; + if (unlikely(ctx->finished)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + gcm_ghash(ctx, src, src_size); ctx->gcm.len.u[1] += src_size; @@ -222,8 +236,10 @@ aes_gcm_decrypt(void *_ctx, const void *src, size_t src_size, _gnutls_write_uint32(counter, ctx->gcm.Yi.c + 12); } - if (rest > 0) /* last incomplete block */ + if (rest > 0) { /* last incomplete block */ ctr_encrypt_last(ctx, src, dst, exp_blocks, rest); + ctx->finished = 1; + } return 0; } @@ -232,9 +248,15 @@ static int aes_gcm_auth(void *_ctx, const void *src, size_t src_size) { struct aes_gcm_ctx *ctx = _ctx; + if (unlikely(ctx->auth_finished)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + gcm_ghash(ctx, src, src_size); ctx->gcm.len.u[0] += src_size; + if (src_size % GCM_BLOCK_SIZE != 0) + ctx->auth_finished = 1; + return 0; } diff --git a/lib/accelerated/x86/aes-gcm-x86-pclmul.c b/lib/accelerated/x86/aes-gcm-x86-pclmul.c index 40d4769803..2225b93376 100644 --- a/lib/accelerated/x86/aes-gcm-x86-pclmul.c +++ b/lib/accelerated/x86/aes-gcm-x86-pclmul.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -57,6 +58,8 @@ struct gcm128_context { struct aes_gcm_ctx { AES_KEY expanded_key; struct gcm128_context gcm; + unsigned finished; + unsigned auth_finished; }; void gcm_init_clmul(u128 Htable[16], const uint64_t Xi[2]); @@ -96,6 +99,8 @@ aes_gcm_cipher_setkey(void *_ctx, const void *userkey, size_t keysize) struct aes_gcm_ctx *ctx = _ctx; int ret; + CHECK_AES_KEYSIZE(keysize); + ret = aesni_set_encrypt_key(userkey, keysize * 8, ALIGN16(&ctx->expanded_key)); @@ -132,6 +137,8 @@ static int aes_gcm_setiv(void *_ctx, const void *iv, size_t iv_size) aesni_ecb_encrypt(ctx->gcm.Yi.c, ctx->gcm.EK0.c, GCM_BLOCK_SIZE, ALIGN16(&ctx->expanded_key), 1); ctx->gcm.Yi.c[GCM_BLOCK_SIZE - 1] = 2; + ctx->finished = 0; + ctx->auth_finished = 0; return 0; } @@ -177,6 +184,9 @@ aes_gcm_encrypt(void *_ctx, const void *src, size_t src_size, int rest = src_size - (exp_blocks); uint32_t counter; + if (unlikely(ctx->finished)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (blocks > 0) { aesni_ctr32_encrypt_blocks(src, dst, blocks, @@ -188,8 +198,10 @@ aes_gcm_encrypt(void *_ctx, const void *src, size_t src_size, _gnutls_write_uint32(counter, ctx->gcm.Yi.c + 12); } - if (rest > 0) /* last incomplete block */ + if (rest > 0) { /* last incomplete block */ ctr_encrypt_last(ctx, src, dst, exp_blocks, rest); + ctx->finished = 1; + } gcm_ghash(ctx, dst, src_size); ctx->gcm.len.u[1] += src_size; @@ -207,6 +219,9 @@ aes_gcm_decrypt(void *_ctx, const void *src, size_t src_size, int rest = src_size - (exp_blocks); uint32_t counter; + if (unlikely(ctx->finished)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + gcm_ghash(ctx, src, src_size); ctx->gcm.len.u[1] += src_size; @@ -221,8 +236,10 @@ aes_gcm_decrypt(void *_ctx, const void *src, size_t src_size, _gnutls_write_uint32(counter, ctx->gcm.Yi.c + 12); } - if (rest > 0) /* last incomplete block */ + if (rest > 0) { /* last incomplete block */ ctr_encrypt_last(ctx, src, dst, exp_blocks, rest); + ctx->finished = 1; + } return 0; } @@ -231,9 +248,15 @@ static int aes_gcm_auth(void *_ctx, const void *src, size_t src_size) { struct aes_gcm_ctx *ctx = _ctx; + if (unlikely(ctx->auth_finished)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + gcm_ghash(ctx, src, src_size); ctx->gcm.len.u[0] += src_size; + if (src_size % GCM_BLOCK_SIZE != 0) + ctx->auth_finished = 1; + return 0; } diff --git a/lib/accelerated/x86/aes-gcm-x86-ssse3.c b/lib/accelerated/x86/aes-gcm-x86-ssse3.c index 512a8cffd7..5580cc2214 100644 --- a/lib/accelerated/x86/aes-gcm-x86-ssse3.c +++ b/lib/accelerated/x86/aes-gcm-x86-ssse3.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -36,6 +37,7 @@ #include #include #include +#include /* GCM mode * It is used when the CPU doesn't include the PCLMUL instructions. @@ -47,8 +49,16 @@ static void x86_aes_encrypt(const void *_ctx, const uint8_t * src) { AES_KEY *ctx = (void*)_ctx; + unsigned i; + unsigned blocks = (length+15) / 16; - vpaes_encrypt(src, dst, ctx); + assert(blocks*16 == length); + + for (i=0;i + * along with this program. If not, see * */ @@ -31,10 +32,8 @@ #include "errors.h" #include #include -#ifdef HAVE_LIBNETTLE -# include /* for key generation in 192 and 256 bits */ -# include -#endif +#include /* for key generation in 192 and 256 bits */ +#include #include static int @@ -42,7 +41,6 @@ aes_cipher_init(gnutls_cipher_algorithm_t algorithm, void **_ctx, int enc) { /* we use key size to distinguish */ if (algorithm != GNUTLS_CIPHER_AES_128_CBC - && algorithm != GNUTLS_CIPHER_AES_192_CBC && algorithm != GNUTLS_CIPHER_AES_256_CBC) return GNUTLS_E_INVALID_REQUEST; @@ -61,9 +59,7 @@ padlock_aes_cipher_setkey(void *_ctx, const void *userkey, size_t keysize) { struct padlock_ctx *ctx = _ctx; struct padlock_cipher_data *pce; -#ifdef HAVE_LIBNETTLE - struct aes_ctx nc; -#endif + struct aes256_ctx nc; memset(_ctx, 0, sizeof(struct padlock_cipher_data)); @@ -78,29 +74,23 @@ padlock_aes_cipher_setkey(void *_ctx, const void *userkey, size_t keysize) memcpy(pce->ks.rd_key, userkey, 16); pce->cword.b.keygen = 0; break; -#ifdef HAVE_LIBNETTLE - case 24: - pce->cword.b.ksize = 1; - pce->cword.b.rounds = 12; - goto common_24_32; case 32: pce->cword.b.ksize = 2; pce->cword.b.rounds = 14; - common_24_32: + /* expand key using nettle */ if (ctx->enc) - aes_set_encrypt_key(&nc, keysize, userkey); + aes256_set_encrypt_key(&nc, userkey); else - aes_set_decrypt_key(&nc, keysize, userkey); + aes256_set_decrypt_key(&nc, userkey); memcpy(pce->ks.rd_key, nc.keys, sizeof(nc.keys)); - pce->ks.rounds = nc.rounds; + pce->ks.rounds = _AES256_ROUNDS; pce->cword.b.keygen = 1; break; -#endif default: - return gnutls_assert_val(GNUTLS_E_ENCRYPTION_FAILED); + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); } padlock_reload_key(); @@ -129,13 +119,14 @@ padlock_aes_cbc_encrypt(void *_ctx, const void *src, size_t src_size, { struct padlock_ctx *ctx = _ctx; struct padlock_cipher_data *pce; + int ret = 1; pce = ALIGN16(&ctx->expanded_key); if (src_size > 0) - padlock_cbc_encrypt(dst, src, pce, src_size); + ret = padlock_cbc_encrypt(dst, src, pce, src_size); - return 0; + return ret ? 0 : GNUTLS_E_ENCRYPTION_FAILED; } @@ -145,13 +136,14 @@ padlock_aes_cbc_decrypt(void *_ctx, const void *src, size_t src_size, { struct padlock_ctx *ctx = _ctx; struct padlock_cipher_data *pcd; + int ret = 1; pcd = ALIGN16(&ctx->expanded_key); if (src_size > 0) padlock_cbc_encrypt(dst, src, pcd, src_size); - return 0; + return ret ? 0 : GNUTLS_E_ENCRYPTION_FAILED; } static void aes_deinit(void *_ctx) diff --git a/lib/accelerated/x86/aes-padlock.h b/lib/accelerated/x86/aes-padlock.h index cff3128f14..cd9dc23609 100644 --- a/lib/accelerated/x86/aes-padlock.h +++ b/lib/accelerated/x86/aes-padlock.h @@ -1,5 +1,5 @@ -#ifndef AES_PADLOCK_H -#define AES_PADLOCK_H +#ifndef GNUTLS_LIB_ACCELERATED_X86_AES_PADLOCK_H +#define GNUTLS_LIB_ACCELERATED_X86_AES_PADLOCK_H #include "gnutls_int.h" #include @@ -43,4 +43,4 @@ int padlock_ecb_encrypt(void *out, const void *inp, struct padlock_cipher_data *ctx, size_t len); int padlock_cbc_encrypt(void *out, const void *inp, struct padlock_cipher_data *ctx, size_t len); -#endif +#endif /* GNUTLS_LIB_ACCELERATED_X86_AES_PADLOCK_H */ diff --git a/lib/accelerated/x86/aes-x86.h b/lib/accelerated/x86/aes-x86.h index 703521856b..023b5f7be6 100644 --- a/lib/accelerated/x86/aes-x86.h +++ b/lib/accelerated/x86/aes-x86.h @@ -1,5 +1,5 @@ -#ifndef AES_X86_H -#define AES_X86_H +#ifndef GNUTLS_LIB_ACCELERATED_X86_AES_X86_H +#define GNUTLS_LIB_ACCELERATED_X86_AES_X86_H #include "gnutls_int.h" @@ -18,6 +18,10 @@ typedef struct { uint32_t rounds; } AES_KEY; +#define CHECK_AES_KEYSIZE(s) \ + if (s != 16 && s != 24 && s != 32) \ + return GNUTLS_E_INVALID_REQUEST + void aesni_ecb_encrypt(const unsigned char *in, unsigned char *out, size_t len, const AES_KEY * key, int enc); @@ -41,6 +45,14 @@ size_t aesni_gcm_encrypt(const void *inp, void *out, size_t len, size_t aesni_gcm_decrypt(const void *inp, void *out, size_t len, const AES_KEY *key, const unsigned char iv[16], uint64_t* Xi); +void aesni_xts_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY * key, const AES_KEY * key2, + const unsigned char iv[16]); + +void aesni_xts_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const AES_KEY * key, const AES_KEY * key2, + const unsigned char iv[16]); + int vpaes_set_encrypt_key(const unsigned char *userKey, int bits, AES_KEY *key); int vpaes_set_decrypt_key(const unsigned char *userKey, int bits, AES_KEY *key); void vpaes_cbc_encrypt(const unsigned char *in, unsigned char *out, @@ -52,10 +64,11 @@ extern const gnutls_crypto_cipher_st _gnutls_aes_gcm_pclmul; extern const gnutls_crypto_cipher_st _gnutls_aes_gcm_pclmul_avx; extern const gnutls_crypto_cipher_st _gnutls_aes_gcm_x86_aesni; extern const gnutls_crypto_cipher_st _gnutls_aes_ccm_x86_aesni; +extern const gnutls_crypto_cipher_st _gnutls_aes_xts_x86_aesni; extern const gnutls_crypto_cipher_st _gnutls_aes_gcm_x86_ssse3; extern const gnutls_crypto_cipher_st _gnutls_aes_ssse3; extern const gnutls_crypto_cipher_st _gnutls_aesni_x86; -#endif +#endif /* GNUTLS_LIB_ACCELERATED_X86_AES_X86_H */ diff --git a/lib/accelerated/x86/aes-xts-x86-aesni.c b/lib/accelerated/x86/aes-xts-x86-aesni.c new file mode 100644 index 0000000000..3371d0812d --- /dev/null +++ b/lib/accelerated/x86/aes-xts-x86-aesni.c @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2020 Red Hat, Inc. + * + * Authors: Nikos Mavrogiannopoulos, Anderson Toshiyuki Sasaki + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* + * The following code wraps the CRYPTOGAMS implementation of the AES-XTS cipher + * using Intel's AES instruction set. + */ + +#include "errors.h" +#include "gnutls_int.h" +#include "fips.h" +#include +#include +#include + +struct x86_aes_xts_ctx { + AES_KEY block_key; + AES_KEY tweak_key; + uint8_t iv[16]; + int enc; +}; + +static int +x86_aes_xts_cipher_init(gnutls_cipher_algorithm_t algorithm, void **_ctx, + int enc) +{ + if (algorithm != GNUTLS_CIPHER_AES_128_XTS && + algorithm != GNUTLS_CIPHER_AES_256_XTS) + return GNUTLS_E_INVALID_REQUEST; + + *_ctx = gnutls_calloc(1, sizeof(struct x86_aes_xts_ctx)); + if (*_ctx == NULL) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + + ((struct x86_aes_xts_ctx *) (*_ctx))->enc = enc; + + return 0; +} + +static int +x86_aes_xts_cipher_setkey(void *_ctx, const void *userkey, size_t keysize) +{ + struct x86_aes_xts_ctx *ctx = _ctx; + int ret; + size_t keybits; + const uint8_t *key = userkey; + + if ((keysize != 32) && (keysize != 64)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + /* Check key block according to FIPS-140-2 IG A.9 */ + if (_gnutls_fips_mode_enabled()){ + if (safe_memcmp(key, key + (keysize / 2), keysize / 2) == 0) { + _gnutls_switch_lib_state(LIB_STATE_ERROR); + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } + } + + /* Size in bits of each half for block and tweak (=keysize * 8 / 2) */ + keybits = keysize * 4; + + if (ctx->enc) + ret = + aesni_set_encrypt_key(key, keybits, + ALIGN16(&ctx->block_key)); + else + ret = + aesni_set_decrypt_key(key, keybits, + ALIGN16(&ctx->block_key)); + + if (ret != 0) + return gnutls_assert_val(GNUTLS_E_ENCRYPTION_FAILED); + + ret = + aesni_set_encrypt_key(key + (keysize / 2), keybits, + ALIGN16(&ctx->tweak_key)); + if (ret != 0) + return gnutls_assert_val(GNUTLS_E_ENCRYPTION_FAILED); + + return 0; +} + +static int x86_aes_xts_setiv(void *_ctx, const void *iv, size_t iv_size) +{ + struct x86_aes_xts_ctx *ctx = _ctx; + + if (iv_size != 16) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + memcpy(ctx->iv, iv, 16); + return 0; +} + +static int +x86_aes_xts_encrypt(void *_ctx, const void *src, size_t src_size, + void *dst, size_t dst_size) +{ + struct x86_aes_xts_ctx *ctx = _ctx; + + if (src_size < 16) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + aesni_xts_encrypt(src, dst, src_size, ALIGN16(&ctx->block_key), + ALIGN16(&ctx->tweak_key), ctx->iv); + return 0; +} + +static int +x86_aes_xts_decrypt(void *_ctx, const void *src, size_t src_size, + void *dst, size_t dst_size) +{ + struct x86_aes_xts_ctx *ctx = _ctx; + + if (src_size < 16) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + aesni_xts_decrypt(src, dst, src_size, ALIGN16(&ctx->block_key), + ALIGN16(&ctx->tweak_key), ctx->iv); + return 0; +} + +static void x86_aes_xts_deinit(void *_ctx) +{ + struct x86_aes_xts_ctx *ctx = _ctx; + + zeroize_temp_key(ctx, sizeof(*ctx)); + gnutls_free(ctx); +} + +const gnutls_crypto_cipher_st _gnutls_aes_xts_x86_aesni = { + .init = x86_aes_xts_cipher_init, + .setkey = x86_aes_xts_cipher_setkey, + .setiv = x86_aes_xts_setiv, + .encrypt = x86_aes_xts_encrypt, + .decrypt = x86_aes_xts_decrypt, + .deinit = x86_aes_xts_deinit, +}; + diff --git a/lib/accelerated/x86/coff/aes-ssse3-x86.s b/lib/accelerated/x86/coff/aes-ssse3-x86.s index 063f6b157e..c58ea23597 100644 --- a/lib/accelerated/x86/coff/aes-ssse3-x86.s +++ b/lib/accelerated/x86/coff/aes-ssse3-x86.s @@ -10,7 +10,6 @@ # # *** This file is auto-generated *** # -.file "vpaes-x86.s" .text .align 64 .L_vpaes_consts: diff --git a/lib/accelerated/x86/coff/aes-ssse3-x86_64.s b/lib/accelerated/x86/coff/aes-ssse3-x86_64.s index 7d5defdbb1..150c9921d7 100644 --- a/lib/accelerated/x86/coff/aes-ssse3-x86_64.s +++ b/lib/accelerated/x86/coff/aes-ssse3-x86_64.s @@ -30,6 +30,7 @@ .def _vpaes_encrypt_core; .scl 3; .type 32; .endef .p2align 4 _vpaes_encrypt_core: + movq %rdx,%r9 movq $16,%r11 movl 240(%rdx),%eax @@ -117,9 +118,11 @@ _vpaes_encrypt_core: + .def _vpaes_decrypt_core; .scl 3; .type 32; .endef .p2align 4 _vpaes_decrypt_core: + movq %rdx,%r9 movl 240(%rdx),%eax movdqa %xmm9,%xmm1 @@ -223,6 +226,7 @@ _vpaes_decrypt_core: + .def _vpaes_schedule_core; .scl 3; .type 32; .endef .p2align 4 _vpaes_schedule_core: @@ -231,6 +235,7 @@ _vpaes_schedule_core: + call _vpaes_preheat movdqa .Lk_rcon(%rip),%xmm8 movdqu (%rdi),%xmm0 @@ -408,9 +413,11 @@ _vpaes_schedule_core: + .def _vpaes_schedule_192_smear; .scl 3; .type 32; .endef .p2align 4 _vpaes_schedule_192_smear: + pshufd $0x80,%xmm6,%xmm1 pshufd $0xFE,%xmm7,%xmm0 pxor %xmm1,%xmm6 @@ -438,11 +445,13 @@ _vpaes_schedule_192_smear: + .def _vpaes_schedule_round; .scl 3; .type 32; .endef .p2align 4 _vpaes_schedule_round: + pxor %xmm1,%xmm1 .byte 102,65,15,58,15,200,15 .byte 102,69,15,58,15,192,15 @@ -506,9 +515,11 @@ _vpaes_schedule_low_round: + .def _vpaes_schedule_transform; .scl 3; .type 32; .endef .p2align 4 _vpaes_schedule_transform: + movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 @@ -542,11 +553,13 @@ _vpaes_schedule_transform: + .def _vpaes_schedule_mangle; .scl 3; .type 32; .endef .p2align 4 _vpaes_schedule_mangle: + movdqa %xmm0,%xmm4 movdqa .Lk_mc_forward(%rip),%xmm5 testq %rcx,%rcx @@ -616,6 +629,7 @@ _vpaes_schedule_mangle: + .globl vpaes_set_encrypt_key .def vpaes_set_encrypt_key; .scl 2; .type 32; .endef .p2align 4 @@ -628,6 +642,7 @@ vpaes_set_encrypt_key: movq %rdx,%rsi movq %r8,%rdx + leaq -184(%rsp),%rsp movaps %xmm6,16(%rsp) movaps %xmm7,32(%rsp) @@ -664,6 +679,7 @@ vpaes_set_encrypt_key: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_vpaes_set_encrypt_key: .globl vpaes_set_decrypt_key @@ -678,6 +694,7 @@ vpaes_set_decrypt_key: movq %rdx,%rsi movq %r8,%rdx + leaq -184(%rsp),%rsp movaps %xmm6,16(%rsp) movaps %xmm7,32(%rsp) @@ -719,6 +736,7 @@ vpaes_set_decrypt_key: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_vpaes_set_decrypt_key: .globl vpaes_encrypt @@ -733,6 +751,7 @@ vpaes_encrypt: movq %rdx,%rsi movq %r8,%rdx + leaq -184(%rsp),%rsp movaps %xmm6,16(%rsp) movaps %xmm7,32(%rsp) @@ -764,6 +783,7 @@ vpaes_encrypt: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_vpaes_encrypt: .globl vpaes_decrypt @@ -778,6 +798,7 @@ vpaes_decrypt: movq %rdx,%rsi movq %r8,%rdx + leaq -184(%rsp),%rsp movaps %xmm6,16(%rsp) movaps %xmm7,32(%rsp) @@ -809,6 +830,7 @@ vpaes_decrypt: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_vpaes_decrypt: .globl vpaes_cbc_encrypt .def vpaes_cbc_encrypt; .scl 2; .type 32; .endef @@ -825,6 +847,7 @@ vpaes_cbc_encrypt: movq 40(%rsp),%r8 movq 48(%rsp),%r9 + xchgq %rcx,%rdx subq $16,%rcx jc .Lcbc_abort @@ -886,6 +909,7 @@ vpaes_cbc_encrypt: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_vpaes_cbc_encrypt: @@ -896,6 +920,7 @@ vpaes_cbc_encrypt: .def _vpaes_preheat; .scl 3; .type 32; .endef .p2align 4 _vpaes_preheat: + leaq .Lk_s0F(%rip),%r10 movdqa -32(%r10),%xmm10 movdqa -16(%r10),%xmm11 @@ -912,6 +937,7 @@ _vpaes_preheat: + .p2align 6 _vpaes_consts: .Lk_inv: diff --git a/lib/accelerated/x86/coff/aesni-gcm-x86_64.s b/lib/accelerated/x86/coff/aesni-gcm-x86_64.s index bc3554ca07..7988004cb0 100644 --- a/lib/accelerated/x86/coff/aesni-gcm-x86_64.s +++ b/lib/accelerated/x86/coff/aesni-gcm-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -365,17 +365,25 @@ aesni_gcm_decrypt: movq 40(%rsp),%r8 movq 48(%rsp),%r9 + xorq %r10,%r10 cmpq $0x60,%rdx jb .Lgcm_dec_abort leaq (%rsp),%rax + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + leaq -168(%rsp),%rsp movaps %xmm6,-216(%rax) movaps %xmm7,-200(%rax) @@ -459,17 +467,25 @@ aesni_gcm_decrypt: movaps -88(%rax),%xmm14 movaps -72(%rax),%xmm15 movq -48(%rax),%r15 + movq -40(%rax),%r14 + movq -32(%rax),%r13 + movq -24(%rax),%r12 + movq -16(%rax),%rbp + movq -8(%rax),%rbx + leaq (%rax),%rsp + .Lgcm_dec_abort: movq %r10,%rax movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_aesni_gcm_decrypt: .def _aesni_ctr32_6x; .scl 3; .type 32; .endef .p2align 5 @@ -577,17 +593,25 @@ aesni_gcm_encrypt: movq 40(%rsp),%r8 movq 48(%rsp),%r9 + xorq %r10,%r10 cmpq $288,%rdx jb .Lgcm_enc_abort leaq (%rsp),%rax + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + leaq -168(%rsp),%rsp movaps %xmm6,-216(%rax) movaps %xmm7,-200(%rax) @@ -835,17 +859,25 @@ aesni_gcm_encrypt: movaps -88(%rax),%xmm14 movaps -72(%rax),%xmm15 movq -48(%rax),%r15 + movq -40(%rax),%r14 + movq -32(%rax),%r13 + movq -24(%rax),%r12 + movq -16(%rax),%rbp + movq -8(%rax),%rbx + leaq (%rax),%rsp + .Lgcm_enc_abort: movq %r10,%rax movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_aesni_gcm_encrypt: .p2align 6 .Lbswap_mask: diff --git a/lib/accelerated/x86/coff/aesni-x86.s b/lib/accelerated/x86/coff/aesni-x86.s index 502be77883..c6aa1a1e2a 100644 --- a/lib/accelerated/x86/coff/aesni-x86.s +++ b/lib/accelerated/x86/coff/aesni-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "devel/perlasm/aesni-x86.s" .text .globl _aesni_encrypt .def _aesni_encrypt; .scl 2; .type 32; .endef @@ -60,7 +59,10 @@ _aesni_encrypt: leal 16(%edx),%edx jnz .L000enc1_loop_1 .byte 102,15,56,221,209 + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 movups %xmm2,(%eax) + pxor %xmm2,%xmm2 ret .globl _aesni_decrypt .def _aesni_decrypt; .scl 2; .type 32; .endef @@ -83,31 +85,87 @@ _aesni_decrypt: leal 16(%edx),%edx jnz .L001dec1_loop_2 .byte 102,15,56,223,209 + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 movups %xmm2,(%eax) + pxor %xmm2,%xmm2 + ret +.def __aesni_encrypt2; .scl 3; .type 32; .endef +.align 16 +__aesni_encrypt2: + movups (%edx),%xmm0 + shll $4,%ecx + movups 16(%edx),%xmm1 + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +.L002enc2_loop: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 + movups -16(%edx,%ecx,1),%xmm0 + jnz .L002enc2_loop +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,221,208 +.byte 102,15,56,221,216 + ret +.def __aesni_decrypt2; .scl 3; .type 32; .endef +.align 16 +__aesni_decrypt2: + movups (%edx),%xmm0 + shll $4,%ecx + movups 16(%edx),%xmm1 + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +.L003dec2_loop: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 + movups -16(%edx,%ecx,1),%xmm0 + jnz .L003dec2_loop +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,223,208 +.byte 102,15,56,223,216 ret .def __aesni_encrypt3; .scl 3; .type 32; .endef .align 16 __aesni_encrypt3: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 - movups (%edx),%xmm0 -.L002enc3_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +.L004enc3_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 - decl %ecx .byte 102,15,56,220,225 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 .byte 102,15,56,220,216 - leal 32(%edx),%edx .byte 102,15,56,220,224 - movups (%edx),%xmm0 - jnz .L002enc3_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L004enc3_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 @@ -119,25 +177,26 @@ __aesni_encrypt3: .align 16 __aesni_decrypt3: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 - movups (%edx),%xmm0 -.L003dec3_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +.L005dec3_loop: .byte 102,15,56,222,209 .byte 102,15,56,222,217 - decl %ecx .byte 102,15,56,222,225 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,222,208 .byte 102,15,56,222,216 - leal 32(%edx),%edx .byte 102,15,56,222,224 - movups (%edx),%xmm0 - jnz .L003dec3_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L005dec3_loop .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 @@ -150,27 +209,29 @@ __aesni_decrypt3: __aesni_encrypt4: movups (%edx),%xmm0 movups 16(%edx),%xmm1 - shrl $1,%ecx - leal 32(%edx),%edx + shll $4,%ecx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 pxor %xmm0,%xmm5 - movups (%edx),%xmm0 -.L004enc4_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 15,31,64,0 + addl $16,%ecx +.L006enc4_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 - decl %ecx .byte 102,15,56,220,225 .byte 102,15,56,220,233 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 .byte 102,15,56,220,216 - leal 32(%edx),%edx .byte 102,15,56,220,224 .byte 102,15,56,220,232 - movups (%edx),%xmm0 - jnz .L004enc4_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L006enc4_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 @@ -185,27 +246,29 @@ __aesni_encrypt4: __aesni_decrypt4: movups (%edx),%xmm0 movups 16(%edx),%xmm1 - shrl $1,%ecx - leal 32(%edx),%edx + shll $4,%ecx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 pxor %xmm0,%xmm5 - movups (%edx),%xmm0 -.L005dec4_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 15,31,64,0 + addl $16,%ecx +.L007dec4_loop: .byte 102,15,56,222,209 .byte 102,15,56,222,217 - decl %ecx .byte 102,15,56,222,225 .byte 102,15,56,222,233 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,222,208 .byte 102,15,56,222,216 - leal 32(%edx),%edx .byte 102,15,56,222,224 .byte 102,15,56,222,232 - movups (%edx),%xmm0 - jnz .L005dec4_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L007dec4_loop .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 @@ -219,45 +282,42 @@ __aesni_decrypt4: .align 16 __aesni_encrypt6: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 -.byte 102,15,56,220,209 pxor %xmm0,%xmm4 -.byte 102,15,56,220,217 +.byte 102,15,56,220,209 pxor %xmm0,%xmm5 - decl %ecx -.byte 102,15,56,220,225 pxor %xmm0,%xmm6 -.byte 102,15,56,220,233 +.byte 102,15,56,220,217 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 102,15,56,220,225 pxor %xmm0,%xmm7 -.byte 102,15,56,220,241 - movups (%edx),%xmm0 -.byte 102,15,56,220,249 - jmp .L_aesni_encrypt6_enter + movups (%edx,%ecx,1),%xmm0 + addl $16,%ecx + jmp .L008_aesni_encrypt6_inner .align 16 -.L006enc6_loop: +.L009enc6_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 - decl %ecx .byte 102,15,56,220,225 +.L008_aesni_encrypt6_inner: .byte 102,15,56,220,233 .byte 102,15,56,220,241 .byte 102,15,56,220,249 -.align 16 .L_aesni_encrypt6_enter: - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 .byte 102,15,56,220,216 - leal 32(%edx),%edx .byte 102,15,56,220,224 .byte 102,15,56,220,232 .byte 102,15,56,220,240 .byte 102,15,56,220,248 - movups (%edx),%xmm0 - jnz .L006enc6_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L009enc6_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 @@ -275,45 +335,42 @@ __aesni_encrypt6: .align 16 __aesni_decrypt6: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 -.byte 102,15,56,222,209 pxor %xmm0,%xmm4 -.byte 102,15,56,222,217 +.byte 102,15,56,222,209 pxor %xmm0,%xmm5 - decl %ecx -.byte 102,15,56,222,225 pxor %xmm0,%xmm6 -.byte 102,15,56,222,233 +.byte 102,15,56,222,217 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 102,15,56,222,225 pxor %xmm0,%xmm7 -.byte 102,15,56,222,241 - movups (%edx),%xmm0 -.byte 102,15,56,222,249 - jmp .L_aesni_decrypt6_enter + movups (%edx,%ecx,1),%xmm0 + addl $16,%ecx + jmp .L010_aesni_decrypt6_inner .align 16 -.L007dec6_loop: +.L011dec6_loop: .byte 102,15,56,222,209 .byte 102,15,56,222,217 - decl %ecx .byte 102,15,56,222,225 +.L010_aesni_decrypt6_inner: .byte 102,15,56,222,233 .byte 102,15,56,222,241 .byte 102,15,56,222,249 -.align 16 .L_aesni_decrypt6_enter: - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,222,208 .byte 102,15,56,222,216 - leal 32(%edx),%edx .byte 102,15,56,222,224 .byte 102,15,56,222,232 .byte 102,15,56,222,240 .byte 102,15,56,222,248 - movups (%edx),%xmm0 - jnz .L007dec6_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L011dec6_loop .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 @@ -342,14 +399,14 @@ _aesni_ecb_encrypt: movl 32(%esp),%edx movl 36(%esp),%ebx andl $-16,%eax - jz .L008ecb_ret + jz .L012ecb_ret movl 240(%edx),%ecx testl %ebx,%ebx - jz .L009ecb_decrypt + jz .L013ecb_decrypt movl %edx,%ebp movl %ecx,%ebx cmpl $96,%eax - jb .L010ecb_enc_tail + jb .L014ecb_enc_tail movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -358,9 +415,9 @@ _aesni_ecb_encrypt: movdqu 80(%esi),%xmm7 leal 96(%esi),%esi subl $96,%eax - jmp .L011ecb_enc_loop6_enter + jmp .L015ecb_enc_loop6_enter .align 16 -.L012ecb_enc_loop6: +.L016ecb_enc_loop6: movups %xmm2,(%edi) movdqu (%esi),%xmm2 movups %xmm3,16(%edi) @@ -375,12 +432,12 @@ _aesni_ecb_encrypt: leal 96(%edi),%edi movdqu 80(%esi),%xmm7 leal 96(%esi),%esi -.L011ecb_enc_loop6_enter: +.L015ecb_enc_loop6_enter: call __aesni_encrypt6 movl %ebp,%edx movl %ebx,%ecx subl $96,%eax - jnc .L012ecb_enc_loop6 + jnc .L016ecb_enc_loop6 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) @@ -389,18 +446,18 @@ _aesni_ecb_encrypt: movups %xmm7,80(%edi) leal 96(%edi),%edi addl $96,%eax - jz .L008ecb_ret -.L010ecb_enc_tail: + jz .L012ecb_ret +.L014ecb_enc_tail: movups (%esi),%xmm2 cmpl $32,%eax - jb .L013ecb_enc_one + jb .L017ecb_enc_one movups 16(%esi),%xmm3 - je .L014ecb_enc_two + je .L018ecb_enc_two movups 32(%esi),%xmm4 cmpl $64,%eax - jb .L015ecb_enc_three + jb .L019ecb_enc_three movups 48(%esi),%xmm5 - je .L016ecb_enc_four + je .L020ecb_enc_four movups 64(%esi),%xmm6 xorps %xmm7,%xmm7 call __aesni_encrypt6 @@ -409,50 +466,49 @@ _aesni_ecb_encrypt: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L013ecb_enc_one: +.L017ecb_enc_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L017enc1_loop_3: +.L021enc1_loop_3: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L017enc1_loop_3 + jnz .L021enc1_loop_3 .byte 102,15,56,221,209 movups %xmm2,(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L014ecb_enc_two: - xorps %xmm4,%xmm4 - call __aesni_encrypt3 +.L018ecb_enc_two: + call __aesni_encrypt2 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L015ecb_enc_three: +.L019ecb_enc_three: call __aesni_encrypt3 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L016ecb_enc_four: +.L020ecb_enc_four: call __aesni_encrypt4 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) movups %xmm5,48(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L009ecb_decrypt: +.L013ecb_decrypt: movl %edx,%ebp movl %ecx,%ebx cmpl $96,%eax - jb .L018ecb_dec_tail + jb .L022ecb_dec_tail movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -461,9 +517,9 @@ _aesni_ecb_encrypt: movdqu 80(%esi),%xmm7 leal 96(%esi),%esi subl $96,%eax - jmp .L019ecb_dec_loop6_enter + jmp .L023ecb_dec_loop6_enter .align 16 -.L020ecb_dec_loop6: +.L024ecb_dec_loop6: movups %xmm2,(%edi) movdqu (%esi),%xmm2 movups %xmm3,16(%edi) @@ -478,12 +534,12 @@ _aesni_ecb_encrypt: leal 96(%edi),%edi movdqu 80(%esi),%xmm7 leal 96(%esi),%esi -.L019ecb_dec_loop6_enter: +.L023ecb_dec_loop6_enter: call __aesni_decrypt6 movl %ebp,%edx movl %ebx,%ecx subl $96,%eax - jnc .L020ecb_dec_loop6 + jnc .L024ecb_dec_loop6 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) @@ -492,18 +548,18 @@ _aesni_ecb_encrypt: movups %xmm7,80(%edi) leal 96(%edi),%edi addl $96,%eax - jz .L008ecb_ret -.L018ecb_dec_tail: + jz .L012ecb_ret +.L022ecb_dec_tail: movups (%esi),%xmm2 cmpl $32,%eax - jb .L021ecb_dec_one + jb .L025ecb_dec_one movups 16(%esi),%xmm3 - je .L022ecb_dec_two + je .L026ecb_dec_two movups 32(%esi),%xmm4 cmpl $64,%eax - jb .L023ecb_dec_three + jb .L027ecb_dec_three movups 48(%esi),%xmm5 - je .L024ecb_dec_four + je .L028ecb_dec_four movups 64(%esi),%xmm6 xorps %xmm7,%xmm7 call __aesni_decrypt6 @@ -512,44 +568,51 @@ _aesni_ecb_encrypt: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L021ecb_dec_one: +.L025ecb_dec_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L025dec1_loop_4: +.L029dec1_loop_4: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L025dec1_loop_4 + jnz .L029dec1_loop_4 .byte 102,15,56,223,209 movups %xmm2,(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L022ecb_dec_two: - xorps %xmm4,%xmm4 - call __aesni_decrypt3 +.L026ecb_dec_two: + call __aesni_decrypt2 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L023ecb_dec_three: +.L027ecb_dec_three: call __aesni_decrypt3 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L024ecb_dec_four: +.L028ecb_dec_four: call __aesni_decrypt4 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) movups %xmm5,48(%edi) -.L008ecb_ret: +.L012ecb_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -587,48 +650,56 @@ _aesni_ccm64_encrypt_blocks: movl %ebp,20(%esp) movl %ebp,24(%esp) movl %ebp,28(%esp) - shrl $1,%ecx + shll $4,%ecx + movl $16,%ebx leal (%edx),%ebp movdqa (%esp),%xmm5 movdqa %xmm7,%xmm2 - movl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx + subl %ecx,%ebx .byte 102,15,56,0,253 -.L026ccm64_enc_outer: +.L030ccm64_enc_outer: movups (%ebp),%xmm0 movl %ebx,%ecx movups (%esi),%xmm6 xorps %xmm0,%xmm2 movups 16(%ebp),%xmm1 xorps %xmm6,%xmm0 - leal 32(%ebp),%edx xorps %xmm0,%xmm3 - movups (%edx),%xmm0 -.L027ccm64_enc2_loop: + movups 32(%ebp),%xmm0 +.L031ccm64_enc2_loop: .byte 102,15,56,220,209 - decl %ecx .byte 102,15,56,220,217 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 - leal 32(%edx),%edx .byte 102,15,56,220,216 - movups (%edx),%xmm0 - jnz .L027ccm64_enc2_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L031ccm64_enc2_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 paddq 16(%esp),%xmm7 + decl %eax .byte 102,15,56,221,208 .byte 102,15,56,221,216 - decl %eax leal 16(%esi),%esi xorps %xmm2,%xmm6 movdqa %xmm7,%xmm2 movups %xmm6,(%edi) - leal 16(%edi),%edi .byte 102,15,56,0,213 - jnz .L026ccm64_enc_outer + leal 16(%edi),%edi + jnz .L030ccm64_enc_outer movl 48(%esp),%esp movl 40(%esp),%edi movups %xmm3,(%edi) + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -675,71 +746,82 @@ _aesni_ccm64_decrypt_blocks: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L028enc1_loop_5: +.L032enc1_loop_5: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L028enc1_loop_5 + jnz .L032enc1_loop_5 .byte 102,15,56,221,209 + shll $4,%ebx + movl $16,%ecx movups (%esi),%xmm6 paddq 16(%esp),%xmm7 leal 16(%esi),%esi - jmp .L029ccm64_dec_outer + subl %ebx,%ecx + leal 32(%ebp,%ebx,1),%edx + movl %ecx,%ebx + jmp .L033ccm64_dec_outer .align 16 -.L029ccm64_dec_outer: +.L033ccm64_dec_outer: xorps %xmm2,%xmm6 movdqa %xmm7,%xmm2 - movl %ebx,%ecx movups %xmm6,(%edi) leal 16(%edi),%edi .byte 102,15,56,0,213 subl $1,%eax - jz .L030ccm64_dec_break + jz .L034ccm64_dec_break movups (%ebp),%xmm0 - shrl $1,%ecx + movl %ebx,%ecx movups 16(%ebp),%xmm1 xorps %xmm0,%xmm6 - leal 32(%ebp),%edx xorps %xmm0,%xmm2 xorps %xmm6,%xmm3 - movups (%edx),%xmm0 -.L031ccm64_dec2_loop: + movups 32(%ebp),%xmm0 +.L035ccm64_dec2_loop: .byte 102,15,56,220,209 - decl %ecx .byte 102,15,56,220,217 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 - leal 32(%edx),%edx .byte 102,15,56,220,216 - movups (%edx),%xmm0 - jnz .L031ccm64_dec2_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L035ccm64_dec2_loop movups (%esi),%xmm6 paddq 16(%esp),%xmm7 .byte 102,15,56,220,209 .byte 102,15,56,220,217 - leal 16(%esi),%esi .byte 102,15,56,221,208 .byte 102,15,56,221,216 - jmp .L029ccm64_dec_outer + leal 16(%esi),%esi + jmp .L033ccm64_dec_outer .align 16 -.L030ccm64_dec_break: +.L034ccm64_dec_break: + movl 240(%ebp),%ecx movl %ebp,%edx movups (%edx),%xmm0 movups 16(%edx),%xmm1 xorps %xmm0,%xmm6 leal 32(%edx),%edx xorps %xmm6,%xmm3 -.L032enc1_loop_6: +.L036enc1_loop_6: .byte 102,15,56,220,217 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L032enc1_loop_6 + jnz .L036enc1_loop_6 .byte 102,15,56,221,217 movl 48(%esp),%esp movl 40(%esp),%edi movups %xmm3,(%edi) + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -764,7 +846,7 @@ _aesni_ctr32_encrypt_blocks: andl $-16,%esp movl %ebp,80(%esp) cmpl $1,%eax - je .L033ctr32_one_shortcut + je .L037ctr32_one_shortcut movdqu (%ebx),%xmm7 movl $202182159,(%esp) movl $134810123,4(%esp) @@ -780,63 +862,59 @@ _aesni_ctr32_encrypt_blocks: .byte 102,15,58,34,253,3 movl 240(%edx),%ecx bswap %ebx - pxor %xmm1,%xmm1 pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 movdqa (%esp),%xmm2 -.byte 102,15,58,34,203,0 +.byte 102,15,58,34,195,0 leal 3(%ebx),%ebp -.byte 102,15,58,34,197,0 +.byte 102,15,58,34,205,0 incl %ebx -.byte 102,15,58,34,203,1 +.byte 102,15,58,34,195,1 incl %ebp -.byte 102,15,58,34,197,1 +.byte 102,15,58,34,205,1 incl %ebx -.byte 102,15,58,34,203,2 +.byte 102,15,58,34,195,2 incl %ebp -.byte 102,15,58,34,197,2 - movdqa %xmm1,48(%esp) -.byte 102,15,56,0,202 - movdqa %xmm0,64(%esp) +.byte 102,15,58,34,205,2 + movdqa %xmm0,48(%esp) .byte 102,15,56,0,194 - pshufd $192,%xmm1,%xmm2 - pshufd $128,%xmm1,%xmm3 + movdqu (%edx),%xmm6 + movdqa %xmm1,64(%esp) +.byte 102,15,56,0,202 + pshufd $192,%xmm0,%xmm2 + pshufd $128,%xmm0,%xmm3 cmpl $6,%eax - jb .L034ctr32_tail + jb .L038ctr32_tail + pxor %xmm6,%xmm7 + shll $4,%ecx + movl $16,%ebx movdqa %xmm7,32(%esp) - shrl $1,%ecx movl %edx,%ebp - movl %ecx,%ebx + subl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx subl $6,%eax - jmp .L035ctr32_loop6 -.align 16 -.L035ctr32_loop6: - pshufd $64,%xmm1,%xmm4 - movdqa 32(%esp),%xmm1 - pshufd $192,%xmm0,%xmm5 - por %xmm1,%xmm2 - pshufd $128,%xmm0,%xmm6 - por %xmm1,%xmm3 - pshufd $64,%xmm0,%xmm7 - por %xmm1,%xmm4 - por %xmm1,%xmm5 - por %xmm1,%xmm6 - por %xmm1,%xmm7 - movups (%ebp),%xmm0 - movups 16(%ebp),%xmm1 - leal 32(%ebp),%edx - decl %ecx + jmp .L039ctr32_loop6 +.align 16 +.L039ctr32_loop6: + pshufd $64,%xmm0,%xmm4 + movdqa 32(%esp),%xmm0 + pshufd $192,%xmm1,%xmm5 pxor %xmm0,%xmm2 + pshufd $128,%xmm1,%xmm6 pxor %xmm0,%xmm3 -.byte 102,15,56,220,209 + pshufd $64,%xmm1,%xmm7 + movups 16(%ebp),%xmm1 pxor %xmm0,%xmm4 -.byte 102,15,56,220,217 pxor %xmm0,%xmm5 -.byte 102,15,56,220,225 +.byte 102,15,56,220,209 pxor %xmm0,%xmm6 -.byte 102,15,56,220,233 pxor %xmm0,%xmm7 +.byte 102,15,56,220,217 + movups 32(%ebp),%xmm0 + movl %ebx,%ecx +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 .byte 102,15,56,220,241 - movups (%edx),%xmm0 .byte 102,15,56,220,249 call .L_aesni_encrypt6_enter movups (%esi),%xmm1 @@ -847,51 +925,51 @@ _aesni_ctr32_encrypt_blocks: movups %xmm2,(%edi) movdqa 16(%esp),%xmm0 xorps %xmm1,%xmm4 - movdqa 48(%esp),%xmm1 + movdqa 64(%esp),%xmm1 movups %xmm3,16(%edi) movups %xmm4,32(%edi) paddd %xmm0,%xmm1 - paddd 64(%esp),%xmm0 + paddd 48(%esp),%xmm0 movdqa (%esp),%xmm2 movups 48(%esi),%xmm3 movups 64(%esi),%xmm4 xorps %xmm3,%xmm5 movups 80(%esi),%xmm3 leal 96(%esi),%esi - movdqa %xmm1,48(%esp) -.byte 102,15,56,0,202 + movdqa %xmm0,48(%esp) +.byte 102,15,56,0,194 xorps %xmm4,%xmm6 movups %xmm5,48(%edi) xorps %xmm3,%xmm7 - movdqa %xmm0,64(%esp) -.byte 102,15,56,0,194 + movdqa %xmm1,64(%esp) +.byte 102,15,56,0,202 movups %xmm6,64(%edi) - pshufd $192,%xmm1,%xmm2 + pshufd $192,%xmm0,%xmm2 movups %xmm7,80(%edi) leal 96(%edi),%edi - movl %ebx,%ecx - pshufd $128,%xmm1,%xmm3 + pshufd $128,%xmm0,%xmm3 subl $6,%eax - jnc .L035ctr32_loop6 + jnc .L039ctr32_loop6 addl $6,%eax - jz .L036ctr32_ret + jz .L040ctr32_ret + movdqu (%ebp),%xmm7 movl %ebp,%edx - leal 1(,%ecx,2),%ecx - movdqa 32(%esp),%xmm7 -.L034ctr32_tail: + pxor 32(%esp),%xmm7 + movl 240(%ebp),%ecx +.L038ctr32_tail: por %xmm7,%xmm2 cmpl $2,%eax - jb .L037ctr32_one - pshufd $64,%xmm1,%xmm4 + jb .L041ctr32_one + pshufd $64,%xmm0,%xmm4 por %xmm7,%xmm3 - je .L038ctr32_two - pshufd $192,%xmm0,%xmm5 + je .L042ctr32_two + pshufd $192,%xmm1,%xmm5 por %xmm7,%xmm4 cmpl $4,%eax - jb .L039ctr32_three - pshufd $128,%xmm0,%xmm6 + jb .L043ctr32_three + pshufd $128,%xmm1,%xmm6 por %xmm7,%xmm5 - je .L040ctr32_four + je .L044ctr32_four por %xmm7,%xmm6 call __aesni_encrypt6 movups (%esi),%xmm1 @@ -909,39 +987,39 @@ _aesni_ctr32_encrypt_blocks: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp .L036ctr32_ret + jmp .L040ctr32_ret .align 16 -.L033ctr32_one_shortcut: +.L037ctr32_one_shortcut: movups (%ebx),%xmm2 movl 240(%edx),%ecx -.L037ctr32_one: +.L041ctr32_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L041enc1_loop_7: +.L045enc1_loop_7: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L041enc1_loop_7 + jnz .L045enc1_loop_7 .byte 102,15,56,221,209 movups (%esi),%xmm6 xorps %xmm2,%xmm6 movups %xmm6,(%edi) - jmp .L036ctr32_ret + jmp .L040ctr32_ret .align 16 -.L038ctr32_two: - call __aesni_encrypt3 +.L042ctr32_two: + call __aesni_encrypt2 movups (%esi),%xmm5 movups 16(%esi),%xmm6 xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp .L036ctr32_ret + jmp .L040ctr32_ret .align 16 -.L039ctr32_three: +.L043ctr32_three: call __aesni_encrypt3 movups (%esi),%xmm5 movups 16(%esi),%xmm6 @@ -952,9 +1030,9 @@ _aesni_ctr32_encrypt_blocks: xorps %xmm7,%xmm4 movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp .L036ctr32_ret + jmp .L040ctr32_ret .align 16 -.L040ctr32_four: +.L044ctr32_four: call __aesni_encrypt4 movups (%esi),%xmm6 movups 16(%esi),%xmm7 @@ -968,7 +1046,18 @@ _aesni_ctr32_encrypt_blocks: xorps %xmm0,%xmm5 movups %xmm4,32(%edi) movups %xmm5,48(%edi) -.L036ctr32_ret: +.L040ctr32_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + movdqa %xmm0,32(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm0,48(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm0,64(%esp) + pxor %xmm7,%xmm7 movl 80(%esp),%esp popl %edi popl %esi @@ -992,12 +1081,12 @@ _aesni_xts_encrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L042enc1_loop_8: +.L046enc1_loop_8: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L042enc1_loop_8 + jnz .L046enc1_loop_8 .byte 102,15,56,221,209 movl 20(%esp),%esi movl 24(%esp),%edi @@ -1021,12 +1110,14 @@ _aesni_xts_encrypt: movl %edx,%ebp movl %ecx,%ebx subl $96,%eax - jc .L043xts_enc_short - shrl $1,%ecx - movl %ecx,%ebx - jmp .L044xts_enc_loop6 + jc .L047xts_enc_short + shll $4,%ecx + movl $16,%ebx + subl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx + jmp .L048xts_enc_loop6 .align 16 -.L044xts_enc_loop6: +.L048xts_enc_loop6: pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,(%esp) @@ -1062,6 +1153,7 @@ _aesni_xts_encrypt: pand %xmm3,%xmm7 movups (%esi),%xmm2 pxor %xmm1,%xmm7 + movl %ebx,%ecx movdqu 16(%esi),%xmm3 xorps %xmm0,%xmm2 movdqu 32(%esi),%xmm4 @@ -1077,19 +1169,17 @@ _aesni_xts_encrypt: movdqa %xmm7,80(%esp) pxor %xmm1,%xmm7 movups 16(%ebp),%xmm1 - leal 32(%ebp),%edx pxor 16(%esp),%xmm3 -.byte 102,15,56,220,209 pxor 32(%esp),%xmm4 -.byte 102,15,56,220,217 +.byte 102,15,56,220,209 pxor 48(%esp),%xmm5 - decl %ecx -.byte 102,15,56,220,225 pxor 64(%esp),%xmm6 -.byte 102,15,56,220,233 +.byte 102,15,56,220,217 pxor %xmm0,%xmm7 + movups 32(%ebp),%xmm0 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 .byte 102,15,56,220,241 - movups (%edx),%xmm0 .byte 102,15,56,220,249 call .L_aesni_encrypt6_enter movdqa 80(%esp),%xmm1 @@ -1114,26 +1204,25 @@ _aesni_xts_encrypt: paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 - movl %ebx,%ecx pxor %xmm2,%xmm1 subl $96,%eax - jnc .L044xts_enc_loop6 - leal 1(,%ecx,2),%ecx + jnc .L048xts_enc_loop6 + movl 240(%ebp),%ecx movl %ebp,%edx movl %ecx,%ebx -.L043xts_enc_short: +.L047xts_enc_short: addl $96,%eax - jz .L045xts_enc_done6x + jz .L049xts_enc_done6x movdqa %xmm1,%xmm5 cmpl $32,%eax - jb .L046xts_enc_one + jb .L050xts_enc_one pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 - je .L047xts_enc_two + je .L051xts_enc_two pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm6 @@ -1142,7 +1231,7 @@ _aesni_xts_encrypt: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 cmpl $64,%eax - jb .L048xts_enc_three + jb .L052xts_enc_three pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm7 @@ -1152,7 +1241,7 @@ _aesni_xts_encrypt: pxor %xmm2,%xmm1 movdqa %xmm5,(%esp) movdqa %xmm6,16(%esp) - je .L049xts_enc_four + je .L053xts_enc_four movdqa %xmm7,32(%esp) pshufd $19,%xmm0,%xmm7 movdqa %xmm1,48(%esp) @@ -1184,9 +1273,9 @@ _aesni_xts_encrypt: movups %xmm5,48(%edi) movups %xmm6,64(%edi) leal 80(%edi),%edi - jmp .L050xts_enc_done + jmp .L054xts_enc_done .align 16 -.L046xts_enc_one: +.L050xts_enc_one: movups (%esi),%xmm2 leal 16(%esi),%esi xorps %xmm5,%xmm2 @@ -1194,37 +1283,36 @@ _aesni_xts_encrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L051enc1_loop_9: +.L055enc1_loop_9: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L051enc1_loop_9 + jnz .L055enc1_loop_9 .byte 102,15,56,221,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) leal 16(%edi),%edi movdqa %xmm5,%xmm1 - jmp .L050xts_enc_done + jmp .L054xts_enc_done .align 16 -.L047xts_enc_two: +.L051xts_enc_two: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 leal 32(%esi),%esi xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 - xorps %xmm4,%xmm4 - call __aesni_encrypt3 + call __aesni_encrypt2 xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movups %xmm3,16(%edi) leal 32(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L050xts_enc_done + jmp .L054xts_enc_done .align 16 -.L048xts_enc_three: +.L052xts_enc_three: movaps %xmm1,%xmm7 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1242,9 +1330,9 @@ _aesni_xts_encrypt: movups %xmm4,32(%edi) leal 48(%edi),%edi movdqa %xmm7,%xmm1 - jmp .L050xts_enc_done + jmp .L054xts_enc_done .align 16 -.L049xts_enc_four: +.L053xts_enc_four: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1266,28 +1354,28 @@ _aesni_xts_encrypt: movups %xmm5,48(%edi) leal 64(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L050xts_enc_done + jmp .L054xts_enc_done .align 16 -.L045xts_enc_done6x: +.L049xts_enc_done6x: movl 112(%esp),%eax andl $15,%eax - jz .L052xts_enc_ret + jz .L056xts_enc_ret movdqa %xmm1,%xmm5 movl %eax,112(%esp) - jmp .L053xts_enc_steal + jmp .L057xts_enc_steal .align 16 -.L050xts_enc_done: +.L054xts_enc_done: movl 112(%esp),%eax pxor %xmm0,%xmm0 andl $15,%eax - jz .L052xts_enc_ret + jz .L056xts_enc_ret pcmpgtd %xmm1,%xmm0 movl %eax,112(%esp) pshufd $19,%xmm0,%xmm5 paddq %xmm1,%xmm1 pand 96(%esp),%xmm5 pxor %xmm1,%xmm5 -.L053xts_enc_steal: +.L057xts_enc_steal: movzbl (%esi),%ecx movzbl -16(%edi),%edx leal 1(%esi),%esi @@ -1295,7 +1383,7 @@ _aesni_xts_encrypt: movb %dl,(%edi) leal 1(%edi),%edi subl $1,%eax - jnz .L053xts_enc_steal + jnz .L057xts_enc_steal subl 112(%esp),%edi movl %ebp,%edx movl %ebx,%ecx @@ -1305,16 +1393,30 @@ _aesni_xts_encrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L054enc1_loop_10: +.L058enc1_loop_10: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L054enc1_loop_10 + jnz .L058enc1_loop_10 .byte 102,15,56,221,209 xorps %xmm5,%xmm2 movups %xmm2,-16(%edi) -.L052xts_enc_ret: +.L056xts_enc_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + movdqa %xmm0,(%esp) + pxor %xmm3,%xmm3 + movdqa %xmm0,16(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm0,32(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm0,48(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm0,64(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm0,80(%esp) movl 116(%esp),%esp popl %edi popl %esi @@ -1338,12 +1440,12 @@ _aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L055enc1_loop_11: +.L059enc1_loop_11: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L055enc1_loop_11 + jnz .L059enc1_loop_11 .byte 102,15,56,221,209 movl 20(%esp),%esi movl 24(%esp),%edi @@ -1372,12 +1474,14 @@ _aesni_xts_decrypt: pcmpgtd %xmm1,%xmm0 andl $-16,%eax subl $96,%eax - jc .L056xts_dec_short - shrl $1,%ecx - movl %ecx,%ebx - jmp .L057xts_dec_loop6 + jc .L060xts_dec_short + shll $4,%ecx + movl $16,%ebx + subl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx + jmp .L061xts_dec_loop6 .align 16 -.L057xts_dec_loop6: +.L061xts_dec_loop6: pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,(%esp) @@ -1413,6 +1517,7 @@ _aesni_xts_decrypt: pand %xmm3,%xmm7 movups (%esi),%xmm2 pxor %xmm1,%xmm7 + movl %ebx,%ecx movdqu 16(%esi),%xmm3 xorps %xmm0,%xmm2 movdqu 32(%esi),%xmm4 @@ -1428,19 +1533,17 @@ _aesni_xts_decrypt: movdqa %xmm7,80(%esp) pxor %xmm1,%xmm7 movups 16(%ebp),%xmm1 - leal 32(%ebp),%edx pxor 16(%esp),%xmm3 -.byte 102,15,56,222,209 pxor 32(%esp),%xmm4 -.byte 102,15,56,222,217 +.byte 102,15,56,222,209 pxor 48(%esp),%xmm5 - decl %ecx -.byte 102,15,56,222,225 pxor 64(%esp),%xmm6 -.byte 102,15,56,222,233 +.byte 102,15,56,222,217 pxor %xmm0,%xmm7 + movups 32(%ebp),%xmm0 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 .byte 102,15,56,222,241 - movups (%edx),%xmm0 .byte 102,15,56,222,249 call .L_aesni_decrypt6_enter movdqa 80(%esp),%xmm1 @@ -1465,26 +1568,25 @@ _aesni_xts_decrypt: paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 - movl %ebx,%ecx pxor %xmm2,%xmm1 subl $96,%eax - jnc .L057xts_dec_loop6 - leal 1(,%ecx,2),%ecx + jnc .L061xts_dec_loop6 + movl 240(%ebp),%ecx movl %ebp,%edx movl %ecx,%ebx -.L056xts_dec_short: +.L060xts_dec_short: addl $96,%eax - jz .L058xts_dec_done6x + jz .L062xts_dec_done6x movdqa %xmm1,%xmm5 cmpl $32,%eax - jb .L059xts_dec_one + jb .L063xts_dec_one pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 - je .L060xts_dec_two + je .L064xts_dec_two pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm6 @@ -1493,7 +1595,7 @@ _aesni_xts_decrypt: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 cmpl $64,%eax - jb .L061xts_dec_three + jb .L065xts_dec_three pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm7 @@ -1503,7 +1605,7 @@ _aesni_xts_decrypt: pxor %xmm2,%xmm1 movdqa %xmm5,(%esp) movdqa %xmm6,16(%esp) - je .L062xts_dec_four + je .L066xts_dec_four movdqa %xmm7,32(%esp) pshufd $19,%xmm0,%xmm7 movdqa %xmm1,48(%esp) @@ -1535,9 +1637,9 @@ _aesni_xts_decrypt: movups %xmm5,48(%edi) movups %xmm6,64(%edi) leal 80(%edi),%edi - jmp .L063xts_dec_done + jmp .L067xts_dec_done .align 16 -.L059xts_dec_one: +.L063xts_dec_one: movups (%esi),%xmm2 leal 16(%esi),%esi xorps %xmm5,%xmm2 @@ -1545,36 +1647,36 @@ _aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L064dec1_loop_12: +.L068dec1_loop_12: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L064dec1_loop_12 + jnz .L068dec1_loop_12 .byte 102,15,56,223,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) leal 16(%edi),%edi movdqa %xmm5,%xmm1 - jmp .L063xts_dec_done + jmp .L067xts_dec_done .align 16 -.L060xts_dec_two: +.L064xts_dec_two: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 leal 32(%esi),%esi xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 - call __aesni_decrypt3 + call __aesni_decrypt2 xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movups %xmm3,16(%edi) leal 32(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L063xts_dec_done + jmp .L067xts_dec_done .align 16 -.L061xts_dec_three: +.L065xts_dec_three: movaps %xmm1,%xmm7 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1592,9 +1694,9 @@ _aesni_xts_decrypt: movups %xmm4,32(%edi) leal 48(%edi),%edi movdqa %xmm7,%xmm1 - jmp .L063xts_dec_done + jmp .L067xts_dec_done .align 16 -.L062xts_dec_four: +.L066xts_dec_four: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1616,20 +1718,20 @@ _aesni_xts_decrypt: movups %xmm5,48(%edi) leal 64(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L063xts_dec_done + jmp .L067xts_dec_done .align 16 -.L058xts_dec_done6x: +.L062xts_dec_done6x: movl 112(%esp),%eax andl $15,%eax - jz .L065xts_dec_ret + jz .L069xts_dec_ret movl %eax,112(%esp) - jmp .L066xts_dec_only_one_more + jmp .L070xts_dec_only_one_more .align 16 -.L063xts_dec_done: +.L067xts_dec_done: movl 112(%esp),%eax pxor %xmm0,%xmm0 andl $15,%eax - jz .L065xts_dec_ret + jz .L069xts_dec_ret pcmpgtd %xmm1,%xmm0 movl %eax,112(%esp) pshufd $19,%xmm0,%xmm2 @@ -1639,7 +1741,7 @@ _aesni_xts_decrypt: pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 -.L066xts_dec_only_one_more: +.L070xts_dec_only_one_more: pshufd $19,%xmm0,%xmm5 movdqa %xmm1,%xmm6 paddq %xmm1,%xmm1 @@ -1653,16 +1755,16 @@ _aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L067dec1_loop_13: +.L071dec1_loop_13: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L067dec1_loop_13 + jnz .L071dec1_loop_13 .byte 102,15,56,223,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) -.L068xts_dec_steal: +.L072xts_dec_steal: movzbl 16(%esi),%ecx movzbl (%edi),%edx leal 1(%esi),%esi @@ -1670,7 +1772,7 @@ _aesni_xts_decrypt: movb %dl,16(%edi) leal 1(%edi),%edi subl $1,%eax - jnz .L068xts_dec_steal + jnz .L072xts_dec_steal subl 112(%esp),%edi movl %ebp,%edx movl %ebx,%ecx @@ -1680,105 +1782,908 @@ _aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L069dec1_loop_14: +.L073dec1_loop_14: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L069dec1_loop_14 + jnz .L073dec1_loop_14 .byte 102,15,56,223,209 xorps %xmm6,%xmm2 movups %xmm2,(%edi) -.L065xts_dec_ret: +.L069xts_dec_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + movdqa %xmm0,(%esp) + pxor %xmm3,%xmm3 + movdqa %xmm0,16(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm0,32(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm0,48(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm0,64(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm0,80(%esp) movl 116(%esp),%esp popl %edi popl %esi popl %ebx popl %ebp ret -.globl _aesni_cbc_encrypt -.def _aesni_cbc_encrypt; .scl 2; .type 32; .endef +.globl _aesni_ocb_encrypt +.def _aesni_ocb_encrypt; .scl 2; .type 32; .endef .align 16 -_aesni_cbc_encrypt: -.L_aesni_cbc_encrypt_begin: +_aesni_ocb_encrypt: +.L_aesni_ocb_encrypt_begin: pushl %ebp pushl %ebx pushl %esi pushl %edi + movl 40(%esp),%ecx + movl 48(%esp),%ebx movl 20(%esp),%esi - movl %esp,%ebx movl 24(%esp),%edi - subl $24,%ebx movl 28(%esp),%eax - andl $-16,%ebx movl 32(%esp),%edx + movdqu (%ecx),%xmm0 movl 36(%esp),%ebp - testl %eax,%eax - jz .L070cbc_abort - cmpl $0,40(%esp) - xchgl %esp,%ebx - movups (%ebp),%xmm7 + movdqu (%ebx),%xmm1 + movl 44(%esp),%ebx + movl %esp,%ecx + subl $132,%esp + andl $-16,%esp + subl %esi,%edi + shll $4,%eax + leal -96(%esi,%eax,1),%eax + movl %edi,120(%esp) + movl %eax,124(%esp) + movl %ecx,128(%esp) movl 240(%edx),%ecx - movl %edx,%ebp - movl %ebx,16(%esp) - movl %ecx,%ebx - je .L071cbc_decrypt - movaps %xmm7,%xmm2 - cmpl $16,%eax - jb .L072cbc_enc_tail - subl $16,%eax - jmp .L073cbc_enc_loop -.align 16 -.L073cbc_enc_loop: - movups (%esi),%xmm7 + testl $1,%ebp + jnz .L074odd + bsfl %ebp,%eax + addl $1,%ebp + shll $4,%eax + movdqu (%ebx,%eax,1),%xmm7 + movl %edx,%eax + movdqu (%esi),%xmm2 leal 16(%esi),%esi + pxor %xmm0,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 movups (%edx),%xmm0 movups 16(%edx),%xmm1 - xorps %xmm0,%xmm7 leal 32(%edx),%edx - xorps %xmm7,%xmm2 -.L074enc1_loop_15: + xorps %xmm0,%xmm2 +.L075enc1_loop_15: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L074enc1_loop_15 + jnz .L075enc1_loop_15 .byte 102,15,56,221,209 - movl %ebx,%ecx - movl %ebp,%edx - movups %xmm2,(%edi) - leal 16(%edi),%edi - subl $16,%eax - jnc .L073cbc_enc_loop - addl $16,%eax - jnz .L072cbc_enc_tail - movaps %xmm2,%xmm7 - jmp .L075cbc_ret -.L072cbc_enc_tail: - movl %eax,%ecx -.long 2767451785 - movl $16,%ecx - subl %eax,%ecx - xorl %eax,%eax -.long 2868115081 - leal -16(%edi),%edi - movl %ebx,%ecx - movl %edi,%esi - movl %ebp,%edx - jmp .L073cbc_enc_loop -.align 16 -.L071cbc_decrypt: - cmpl $80,%eax - jbe .L076cbc_dec_tail - movaps %xmm7,(%esp) - subl $80,%eax - jmp .L077cbc_dec_loop6_enter -.align 16 -.L078cbc_dec_loop6: - movaps %xmm0,(%esp) - movups %xmm7,(%edi) + xorps %xmm7,%xmm2 + movdqa %xmm7,%xmm0 + movdqa %xmm6,%xmm1 + movups %xmm2,-16(%edi,%esi,1) + movl 240(%eax),%ecx + movl %eax,%edx + movl 124(%esp),%eax +.L074odd: + shll $4,%ecx + movl $16,%edi + subl %ecx,%edi + movl %edx,112(%esp) + leal 32(%edx,%ecx,1),%edx + movl %edi,116(%esp) + cmpl %eax,%esi + ja .L076short + jmp .L077grandloop +.align 32 +.L077grandloop: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + leal 5(%ebp),%edi + addl $6,%ebp + bsfl %ecx,%ecx + bsfl %eax,%eax + bsfl %edi,%edi + shll $4,%ecx + shll $4,%eax + shll $4,%edi + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + movdqu (%ebx,%edi,1),%xmm7 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movdqa %xmm7,80(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + movdqu 80(%esi),%xmm7 + leal 96(%esi),%esi + pxor %xmm2,%xmm1 + pxor %xmm0,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm0,%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm0,%xmm4 + pxor %xmm5,%xmm1 + pxor %xmm0,%xmm5 + pxor %xmm6,%xmm1 + pxor %xmm0,%xmm6 + pxor %xmm7,%xmm1 + pxor %xmm0,%xmm7 + movdqa %xmm1,96(%esp) + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor 80(%esp),%xmm7 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movl 120(%esp),%edi + movl 124(%esp),%eax + call .L_aesni_encrypt6_enter + movdqa 80(%esp),%xmm0 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor %xmm0,%xmm7 + movdqa 96(%esp),%xmm1 + movdqu %xmm2,-96(%edi,%esi,1) + movdqu %xmm3,-80(%edi,%esi,1) + movdqu %xmm4,-64(%edi,%esi,1) + movdqu %xmm5,-48(%edi,%esi,1) + movdqu %xmm6,-32(%edi,%esi,1) + movdqu %xmm7,-16(%edi,%esi,1) + cmpl %eax,%esi + jb .L077grandloop +.L076short: + addl $96,%eax + subl %esi,%eax + jz .L078done + cmpl $32,%eax + jb .L079one + je .L080two + cmpl $64,%eax + jb .L081three + je .L082four + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + pxor %xmm7,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm0,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm0,%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm0,%xmm4 + pxor %xmm5,%xmm1 + pxor %xmm0,%xmm5 + pxor %xmm6,%xmm1 + pxor %xmm0,%xmm6 + movdqa %xmm1,96(%esp) + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movl 120(%esp),%edi + call .L_aesni_encrypt6_enter + movdqa 64(%esp),%xmm0 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor %xmm0,%xmm6 + movdqa 96(%esp),%xmm1 + movdqu %xmm2,(%edi,%esi,1) + movdqu %xmm3,16(%edi,%esi,1) + movdqu %xmm4,32(%edi,%esi,1) + movdqu %xmm5,48(%edi,%esi,1) + movdqu %xmm6,64(%edi,%esi,1) + jmp .L078done +.align 16 +.L079one: + movdqu (%ebx),%xmm7 + movl 112(%esp),%edx + movdqu (%esi),%xmm2 + movl 240(%edx),%ecx + pxor %xmm0,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 + movl 120(%esp),%edi + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +.L083enc1_loop_16: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz .L083enc1_loop_16 +.byte 102,15,56,221,209 + xorps %xmm7,%xmm2 + movdqa %xmm7,%xmm0 + movdqa %xmm6,%xmm1 + movups %xmm2,(%edi,%esi,1) + jmp .L078done +.align 16 +.L080two: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm6 + movdqu (%ebx,%ecx,1),%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movl 240(%edx),%ecx + pxor %xmm0,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm6,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm7,%xmm3 + movdqa %xmm1,%xmm5 + movl 120(%esp),%edi + call __aesni_encrypt2 + xorps %xmm6,%xmm2 + xorps %xmm7,%xmm3 + movdqa %xmm7,%xmm0 + movdqa %xmm5,%xmm1 + movups %xmm2,(%edi,%esi,1) + movups %xmm3,16(%edi,%esi,1) + jmp .L078done +.align 16 +.L081three: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm5 + movdqu (%ebx,%ecx,1),%xmm6 + movdqa %xmm5,%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movl 240(%edx),%ecx + pxor %xmm0,%xmm5 + pxor %xmm5,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm5,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm6,%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm7,%xmm4 + movdqa %xmm1,96(%esp) + movl 120(%esp),%edi + call __aesni_encrypt3 + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm7,%xmm4 + movdqa %xmm7,%xmm0 + movdqa 96(%esp),%xmm1 + movups %xmm2,(%edi,%esi,1) + movups %xmm3,16(%edi,%esi,1) + movups %xmm4,32(%edi,%esi,1) + jmp .L078done +.align 16 +.L082four: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + movl 112(%esp),%edx + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm4 + movdqu (%ebx,%ecx,1),%xmm5 + movdqa %xmm4,%xmm6 + movdqu (%ebx,%eax,1),%xmm7 + pxor %xmm0,%xmm4 + movdqu (%esi),%xmm2 + pxor %xmm4,%xmm5 + movdqu 16(%esi),%xmm3 + pxor %xmm5,%xmm6 + movdqa %xmm4,(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm5,16(%esp) + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movl 240(%edx),%ecx + pxor %xmm2,%xmm1 + pxor (%esp),%xmm2 + pxor %xmm3,%xmm1 + pxor 16(%esp),%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm6,%xmm4 + pxor %xmm5,%xmm1 + pxor %xmm7,%xmm5 + movdqa %xmm1,96(%esp) + movl 120(%esp),%edi + call __aesni_encrypt4 + xorps (%esp),%xmm2 + xorps 16(%esp),%xmm3 + xorps %xmm6,%xmm4 + movups %xmm2,(%edi,%esi,1) + xorps %xmm7,%xmm5 + movups %xmm3,16(%edi,%esi,1) + movdqa %xmm7,%xmm0 + movups %xmm4,32(%edi,%esi,1) + movdqa 96(%esp),%xmm1 + movups %xmm5,48(%edi,%esi,1) +.L078done: + movl 128(%esp),%edx + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm2,16(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm2,32(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm2,48(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm2,64(%esp) + movdqa %xmm2,80(%esp) + movdqa %xmm2,96(%esp) + leal (%edx),%esp + movl 40(%esp),%ecx + movl 48(%esp),%ebx + movdqu %xmm0,(%ecx) + pxor %xmm0,%xmm0 + movdqu %xmm1,(%ebx) + pxor %xmm1,%xmm1 + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _aesni_ocb_decrypt +.def _aesni_ocb_decrypt; .scl 2; .type 32; .endef +.align 16 +_aesni_ocb_decrypt: +.L_aesni_ocb_decrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 40(%esp),%ecx + movl 48(%esp),%ebx + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl 32(%esp),%edx + movdqu (%ecx),%xmm0 + movl 36(%esp),%ebp + movdqu (%ebx),%xmm1 + movl 44(%esp),%ebx + movl %esp,%ecx + subl $132,%esp + andl $-16,%esp + subl %esi,%edi + shll $4,%eax + leal -96(%esi,%eax,1),%eax + movl %edi,120(%esp) + movl %eax,124(%esp) + movl %ecx,128(%esp) + movl 240(%edx),%ecx + testl $1,%ebp + jnz .L084odd + bsfl %ebp,%eax + addl $1,%ebp + shll $4,%eax + movdqu (%ebx,%eax,1),%xmm7 + movl %edx,%eax + movdqu (%esi),%xmm2 + leal 16(%esi),%esi + pxor %xmm0,%xmm7 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +.L085dec1_loop_17: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz .L085dec1_loop_17 +.byte 102,15,56,223,209 + xorps %xmm7,%xmm2 + movaps %xmm6,%xmm1 + movdqa %xmm7,%xmm0 + xorps %xmm2,%xmm1 + movups %xmm2,-16(%edi,%esi,1) + movl 240(%eax),%ecx + movl %eax,%edx + movl 124(%esp),%eax +.L084odd: + shll $4,%ecx + movl $16,%edi + subl %ecx,%edi + movl %edx,112(%esp) + leal 32(%edx,%ecx,1),%edx + movl %edi,116(%esp) + cmpl %eax,%esi + ja .L086short + jmp .L087grandloop +.align 32 +.L087grandloop: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + leal 5(%ebp),%edi + addl $6,%ebp + bsfl %ecx,%ecx + bsfl %eax,%eax + bsfl %edi,%edi + shll $4,%ecx + shll $4,%eax + shll $4,%edi + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + movdqu (%ebx,%edi,1),%xmm7 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movdqa %xmm7,80(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + movdqu 80(%esi),%xmm7 + leal 96(%esi),%esi + movdqa %xmm1,96(%esp) + pxor %xmm0,%xmm2 + pxor %xmm0,%xmm3 + pxor %xmm0,%xmm4 + pxor %xmm0,%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm0,%xmm7 + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor 80(%esp),%xmm7 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movl 120(%esp),%edi + movl 124(%esp),%eax + call .L_aesni_decrypt6_enter + movdqa 80(%esp),%xmm0 + pxor (%esp),%xmm2 + movdqa 96(%esp),%xmm1 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor %xmm0,%xmm7 + pxor %xmm2,%xmm1 + movdqu %xmm2,-96(%edi,%esi,1) + pxor %xmm3,%xmm1 + movdqu %xmm3,-80(%edi,%esi,1) + pxor %xmm4,%xmm1 + movdqu %xmm4,-64(%edi,%esi,1) + pxor %xmm5,%xmm1 + movdqu %xmm5,-48(%edi,%esi,1) + pxor %xmm6,%xmm1 + movdqu %xmm6,-32(%edi,%esi,1) + pxor %xmm7,%xmm1 + movdqu %xmm7,-16(%edi,%esi,1) + cmpl %eax,%esi + jb .L087grandloop +.L086short: + addl $96,%eax + subl %esi,%eax + jz .L088done + cmpl $32,%eax + jb .L089one + je .L090two + cmpl $64,%eax + jb .L091three + je .L092four + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + pxor %xmm7,%xmm7 + movdqa %xmm1,96(%esp) + pxor %xmm0,%xmm2 + pxor %xmm0,%xmm3 + pxor %xmm0,%xmm4 + pxor %xmm0,%xmm5 + pxor %xmm0,%xmm6 + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movl 120(%esp),%edi + call .L_aesni_decrypt6_enter + movdqa 64(%esp),%xmm0 + pxor (%esp),%xmm2 + movdqa 96(%esp),%xmm1 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm2,%xmm1 + movdqu %xmm2,(%edi,%esi,1) + pxor %xmm3,%xmm1 + movdqu %xmm3,16(%edi,%esi,1) + pxor %xmm4,%xmm1 + movdqu %xmm4,32(%edi,%esi,1) + pxor %xmm5,%xmm1 + movdqu %xmm5,48(%edi,%esi,1) + pxor %xmm6,%xmm1 + movdqu %xmm6,64(%edi,%esi,1) + jmp .L088done +.align 16 +.L089one: + movdqu (%ebx),%xmm7 + movl 112(%esp),%edx + movdqu (%esi),%xmm2 + movl 240(%edx),%ecx + pxor %xmm0,%xmm7 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 + movl 120(%esp),%edi + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +.L093dec1_loop_18: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz .L093dec1_loop_18 +.byte 102,15,56,223,209 + xorps %xmm7,%xmm2 + movaps %xmm6,%xmm1 + movdqa %xmm7,%xmm0 + xorps %xmm2,%xmm1 + movups %xmm2,(%edi,%esi,1) + jmp .L088done +.align 16 +.L090two: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm6 + movdqu (%ebx,%ecx,1),%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movl 240(%edx),%ecx + movdqa %xmm1,%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm6,%xmm2 + pxor %xmm7,%xmm3 + movl 120(%esp),%edi + call __aesni_decrypt2 + xorps %xmm6,%xmm2 + xorps %xmm7,%xmm3 + movdqa %xmm7,%xmm0 + xorps %xmm2,%xmm5 + movups %xmm2,(%edi,%esi,1) + xorps %xmm3,%xmm5 + movups %xmm3,16(%edi,%esi,1) + movaps %xmm5,%xmm1 + jmp .L088done +.align 16 +.L091three: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm5 + movdqu (%ebx,%ecx,1),%xmm6 + movdqa %xmm5,%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movl 240(%edx),%ecx + movdqa %xmm1,96(%esp) + pxor %xmm0,%xmm5 + pxor %xmm5,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm5,%xmm2 + pxor %xmm6,%xmm3 + pxor %xmm7,%xmm4 + movl 120(%esp),%edi + call __aesni_decrypt3 + movdqa 96(%esp),%xmm1 + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm7,%xmm4 + movups %xmm2,(%edi,%esi,1) + pxor %xmm2,%xmm1 + movdqa %xmm7,%xmm0 + movups %xmm3,16(%edi,%esi,1) + pxor %xmm3,%xmm1 + movups %xmm4,32(%edi,%esi,1) + pxor %xmm4,%xmm1 + jmp .L088done +.align 16 +.L092four: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + movl 112(%esp),%edx + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm4 + movdqu (%ebx,%ecx,1),%xmm5 + movdqa %xmm4,%xmm6 + movdqu (%ebx,%eax,1),%xmm7 + pxor %xmm0,%xmm4 + movdqu (%esi),%xmm2 + pxor %xmm4,%xmm5 + movdqu 16(%esi),%xmm3 + pxor %xmm5,%xmm6 + movdqa %xmm4,(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm5,16(%esp) + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movl 240(%edx),%ecx + movdqa %xmm1,96(%esp) + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor %xmm6,%xmm4 + pxor %xmm7,%xmm5 + movl 120(%esp),%edi + call __aesni_decrypt4 + movdqa 96(%esp),%xmm1 + xorps (%esp),%xmm2 + xorps 16(%esp),%xmm3 + xorps %xmm6,%xmm4 + movups %xmm2,(%edi,%esi,1) + pxor %xmm2,%xmm1 + xorps %xmm7,%xmm5 + movups %xmm3,16(%edi,%esi,1) + pxor %xmm3,%xmm1 + movdqa %xmm7,%xmm0 + movups %xmm4,32(%edi,%esi,1) + pxor %xmm4,%xmm1 + movups %xmm5,48(%edi,%esi,1) + pxor %xmm5,%xmm1 +.L088done: + movl 128(%esp),%edx + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm2,16(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm2,32(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm2,48(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm2,64(%esp) + movdqa %xmm2,80(%esp) + movdqa %xmm2,96(%esp) + leal (%edx),%esp + movl 40(%esp),%ecx + movl 48(%esp),%ebx + movdqu %xmm0,(%ecx) + pxor %xmm0,%xmm0 + movdqu %xmm1,(%ebx) + pxor %xmm1,%xmm1 + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _aesni_cbc_encrypt +.def _aesni_cbc_encrypt; .scl 2; .type 32; .endef +.align 16 +_aesni_cbc_encrypt: +.L_aesni_cbc_encrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl %esp,%ebx + movl 24(%esp),%edi + subl $24,%ebx + movl 28(%esp),%eax + andl $-16,%ebx + movl 32(%esp),%edx + movl 36(%esp),%ebp + testl %eax,%eax + jz .L094cbc_abort + cmpl $0,40(%esp) + xchgl %esp,%ebx + movups (%ebp),%xmm7 + movl 240(%edx),%ecx + movl %edx,%ebp + movl %ebx,16(%esp) + movl %ecx,%ebx + je .L095cbc_decrypt + movaps %xmm7,%xmm2 + cmpl $16,%eax + jb .L096cbc_enc_tail + subl $16,%eax + jmp .L097cbc_enc_loop +.align 16 +.L097cbc_enc_loop: + movups (%esi),%xmm7 + leal 16(%esi),%esi + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + xorps %xmm0,%xmm7 + leal 32(%edx),%edx + xorps %xmm7,%xmm2 +.L098enc1_loop_19: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz .L098enc1_loop_19 +.byte 102,15,56,221,209 + movl %ebx,%ecx + movl %ebp,%edx + movups %xmm2,(%edi) leal 16(%edi),%edi -.L077cbc_dec_loop6_enter: + subl $16,%eax + jnc .L097cbc_enc_loop + addl $16,%eax + jnz .L096cbc_enc_tail + movaps %xmm2,%xmm7 + pxor %xmm2,%xmm2 + jmp .L099cbc_ret +.L096cbc_enc_tail: + movl %eax,%ecx +.long 2767451785 + movl $16,%ecx + subl %eax,%ecx + xorl %eax,%eax +.long 2868115081 + leal -16(%edi),%edi + movl %ebx,%ecx + movl %edi,%esi + movl %ebp,%edx + jmp .L097cbc_enc_loop +.align 16 +.L095cbc_decrypt: + cmpl $80,%eax + jbe .L100cbc_dec_tail + movaps %xmm7,(%esp) + subl $80,%eax + jmp .L101cbc_dec_loop6_enter +.align 16 +.L102cbc_dec_loop6: + movaps %xmm0,(%esp) + movups %xmm7,(%edi) + leal 16(%edi),%edi +.L101cbc_dec_loop6_enter: movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -1808,28 +2713,28 @@ _aesni_cbc_encrypt: movups %xmm6,64(%edi) leal 80(%edi),%edi subl $96,%eax - ja .L078cbc_dec_loop6 + ja .L102cbc_dec_loop6 movaps %xmm7,%xmm2 movaps %xmm0,%xmm7 addl $80,%eax - jle .L079cbc_dec_tail_collected + jle .L103cbc_dec_clear_tail_collected movups %xmm2,(%edi) leal 16(%edi),%edi -.L076cbc_dec_tail: +.L100cbc_dec_tail: movups (%esi),%xmm2 movaps %xmm2,%xmm6 cmpl $16,%eax - jbe .L080cbc_dec_one + jbe .L104cbc_dec_one movups 16(%esi),%xmm3 movaps %xmm3,%xmm5 cmpl $32,%eax - jbe .L081cbc_dec_two + jbe .L105cbc_dec_two movups 32(%esi),%xmm4 cmpl $48,%eax - jbe .L082cbc_dec_three + jbe .L106cbc_dec_three movups 48(%esi),%xmm5 cmpl $64,%eax - jbe .L083cbc_dec_four + jbe .L107cbc_dec_four movups 64(%esi),%xmm6 movaps %xmm7,(%esp) movups (%esi),%xmm2 @@ -1847,56 +2752,62 @@ _aesni_cbc_encrypt: xorps %xmm0,%xmm6 movups %xmm2,(%edi) movups %xmm3,16(%edi) + pxor %xmm3,%xmm3 movups %xmm4,32(%edi) + pxor %xmm4,%xmm4 movups %xmm5,48(%edi) + pxor %xmm5,%xmm5 leal 64(%edi),%edi movaps %xmm6,%xmm2 + pxor %xmm6,%xmm6 subl $80,%eax - jmp .L079cbc_dec_tail_collected + jmp .L108cbc_dec_tail_collected .align 16 -.L080cbc_dec_one: +.L104cbc_dec_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L084dec1_loop_16: +.L109dec1_loop_20: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L084dec1_loop_16 + jnz .L109dec1_loop_20 .byte 102,15,56,223,209 xorps %xmm7,%xmm2 movaps %xmm6,%xmm7 subl $16,%eax - jmp .L079cbc_dec_tail_collected + jmp .L108cbc_dec_tail_collected .align 16 -.L081cbc_dec_two: - xorps %xmm4,%xmm4 - call __aesni_decrypt3 +.L105cbc_dec_two: + call __aesni_decrypt2 xorps %xmm7,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movaps %xmm3,%xmm2 + pxor %xmm3,%xmm3 leal 16(%edi),%edi movaps %xmm5,%xmm7 subl $32,%eax - jmp .L079cbc_dec_tail_collected + jmp .L108cbc_dec_tail_collected .align 16 -.L082cbc_dec_three: +.L106cbc_dec_three: call __aesni_decrypt3 xorps %xmm7,%xmm2 xorps %xmm6,%xmm3 xorps %xmm5,%xmm4 movups %xmm2,(%edi) movaps %xmm4,%xmm2 + pxor %xmm4,%xmm4 movups %xmm3,16(%edi) + pxor %xmm3,%xmm3 leal 32(%edi),%edi movups 32(%esi),%xmm7 subl $48,%eax - jmp .L079cbc_dec_tail_collected + jmp .L108cbc_dec_tail_collected .align 16 -.L083cbc_dec_four: +.L107cbc_dec_four: call __aesni_decrypt4 movups 16(%esi),%xmm1 movups 32(%esi),%xmm0 @@ -1906,28 +2817,44 @@ _aesni_cbc_encrypt: movups %xmm2,(%edi) xorps %xmm1,%xmm4 movups %xmm3,16(%edi) + pxor %xmm3,%xmm3 xorps %xmm0,%xmm5 movups %xmm4,32(%edi) + pxor %xmm4,%xmm4 leal 48(%edi),%edi movaps %xmm5,%xmm2 + pxor %xmm5,%xmm5 subl $64,%eax -.L079cbc_dec_tail_collected: + jmp .L108cbc_dec_tail_collected +.align 16 +.L103cbc_dec_clear_tail_collected: + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 +.L108cbc_dec_tail_collected: andl $15,%eax - jnz .L085cbc_dec_tail_partial + jnz .L110cbc_dec_tail_partial movups %xmm2,(%edi) - jmp .L075cbc_ret + pxor %xmm0,%xmm0 + jmp .L099cbc_ret .align 16 -.L085cbc_dec_tail_partial: +.L110cbc_dec_tail_partial: movaps %xmm2,(%esp) + pxor %xmm0,%xmm0 movl $16,%ecx movl %esp,%esi subl %eax,%ecx .long 2767451785 -.L075cbc_ret: + movdqa %xmm2,(%esp) +.L099cbc_ret: movl 16(%esp),%esp movl 36(%esp),%ebp + pxor %xmm2,%xmm2 + pxor %xmm1,%xmm1 movups %xmm7,(%ebp) -.L070cbc_abort: + pxor %xmm7,%xmm7 +.L094cbc_abort: popl %edi popl %esi popl %ebx @@ -1936,52 +2863,62 @@ _aesni_cbc_encrypt: .def __aesni_set_encrypt_key; .scl 3; .type 32; .endef .align 16 __aesni_set_encrypt_key: + pushl %ebp + pushl %ebx testl %eax,%eax - jz .L086bad_pointer + jz .L111bad_pointer testl %edx,%edx - jz .L086bad_pointer + jz .L111bad_pointer + call .L112pic +.L112pic: + popl %ebx + leal .Lkey_const-.L112pic(%ebx),%ebx + leal __gnutls_x86_cpuid_s,%ebp movups (%eax),%xmm0 xorps %xmm4,%xmm4 + movl 4(%ebp),%ebp leal 16(%edx),%edx + andl $268437504,%ebp cmpl $256,%ecx - je .L08714rounds + je .L11314rounds cmpl $192,%ecx - je .L08812rounds + je .L11412rounds cmpl $128,%ecx - jne .L089bad_keybits + jne .L115bad_keybits .align 16 -.L09010rounds: +.L11610rounds: + cmpl $268435456,%ebp + je .L11710rounds_alt movl $9,%ecx movups %xmm0,-16(%edx) .byte 102,15,58,223,200,1 - call .L091key_128_cold + call .L118key_128_cold .byte 102,15,58,223,200,2 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,4 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,8 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,16 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,32 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,64 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,128 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,27 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,54 - call .L092key_128 + call .L119key_128 movups %xmm0,(%edx) movl %ecx,80(%edx) - xorl %eax,%eax - ret + jmp .L120good_key .align 16 -.L092key_128: +.L119key_128: movups %xmm0,(%edx) leal 16(%edx),%edx -.L091key_128_cold: +.L118key_128_cold: shufps $16,%xmm0,%xmm4 xorps %xmm4,%xmm0 shufps $140,%xmm0,%xmm4 @@ -1990,38 +2927,91 @@ __aesni_set_encrypt_key: xorps %xmm1,%xmm0 ret .align 16 -.L08812rounds: +.L11710rounds_alt: + movdqa (%ebx),%xmm5 + movl $8,%ecx + movdqa 32(%ebx),%xmm4 + movdqa %xmm0,%xmm2 + movdqu %xmm0,-16(%edx) +.L121loop_key128: +.byte 102,15,56,0,197 +.byte 102,15,56,221,196 + pslld $1,%xmm4 + leal 16(%edx),%edx + movdqa %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm3,%xmm2 + pxor %xmm2,%xmm0 + movdqu %xmm0,-16(%edx) + movdqa %xmm0,%xmm2 + decl %ecx + jnz .L121loop_key128 + movdqa 48(%ebx),%xmm4 +.byte 102,15,56,0,197 +.byte 102,15,56,221,196 + pslld $1,%xmm4 + movdqa %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm3,%xmm2 + pxor %xmm2,%xmm0 + movdqu %xmm0,(%edx) + movdqa %xmm0,%xmm2 +.byte 102,15,56,0,197 +.byte 102,15,56,221,196 + movdqa %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm3,%xmm2 + pxor %xmm2,%xmm0 + movdqu %xmm0,16(%edx) + movl $9,%ecx + movl %ecx,96(%edx) + jmp .L120good_key +.align 16 +.L11412rounds: movq 16(%eax),%xmm2 + cmpl $268435456,%ebp + je .L12212rounds_alt movl $11,%ecx movups %xmm0,-16(%edx) .byte 102,15,58,223,202,1 - call .L093key_192a_cold + call .L123key_192a_cold .byte 102,15,58,223,202,2 - call .L094key_192b + call .L124key_192b .byte 102,15,58,223,202,4 - call .L095key_192a + call .L125key_192a .byte 102,15,58,223,202,8 - call .L094key_192b + call .L124key_192b .byte 102,15,58,223,202,16 - call .L095key_192a + call .L125key_192a .byte 102,15,58,223,202,32 - call .L094key_192b + call .L124key_192b .byte 102,15,58,223,202,64 - call .L095key_192a + call .L125key_192a .byte 102,15,58,223,202,128 - call .L094key_192b + call .L124key_192b movups %xmm0,(%edx) movl %ecx,48(%edx) - xorl %eax,%eax - ret + jmp .L120good_key .align 16 -.L095key_192a: +.L125key_192a: movups %xmm0,(%edx) leal 16(%edx),%edx .align 16 -.L093key_192a_cold: +.L123key_192a_cold: movaps %xmm2,%xmm5 -.L096key_192b_warm: +.L126key_192b_warm: shufps $16,%xmm0,%xmm4 movdqa %xmm2,%xmm3 xorps %xmm4,%xmm0 @@ -2035,56 +3025,90 @@ __aesni_set_encrypt_key: pxor %xmm3,%xmm2 ret .align 16 -.L094key_192b: +.L124key_192b: movaps %xmm0,%xmm3 shufps $68,%xmm0,%xmm5 movups %xmm5,(%edx) shufps $78,%xmm2,%xmm3 movups %xmm3,16(%edx) leal 32(%edx),%edx - jmp .L096key_192b_warm + jmp .L126key_192b_warm +.align 16 +.L12212rounds_alt: + movdqa 16(%ebx),%xmm5 + movdqa 32(%ebx),%xmm4 + movl $8,%ecx + movdqu %xmm0,-16(%edx) +.L127loop_key192: + movq %xmm2,(%edx) + movdqa %xmm2,%xmm1 +.byte 102,15,56,0,213 +.byte 102,15,56,221,212 + pslld $1,%xmm4 + leal 24(%edx),%edx + movdqa %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm3,%xmm0 + pshufd $255,%xmm0,%xmm3 + pxor %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm1,%xmm3 + pxor %xmm2,%xmm0 + pxor %xmm3,%xmm2 + movdqu %xmm0,-16(%edx) + decl %ecx + jnz .L127loop_key192 + movl $11,%ecx + movl %ecx,32(%edx) + jmp .L120good_key .align 16 -.L08714rounds: +.L11314rounds: movups 16(%eax),%xmm2 - movl $13,%ecx leal 16(%edx),%edx + cmpl $268435456,%ebp + je .L12814rounds_alt + movl $13,%ecx movups %xmm0,-32(%edx) movups %xmm2,-16(%edx) .byte 102,15,58,223,202,1 - call .L097key_256a_cold + call .L129key_256a_cold .byte 102,15,58,223,200,1 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,2 - call .L099key_256a + call .L131key_256a .byte 102,15,58,223,200,2 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,4 - call .L099key_256a + call .L131key_256a .byte 102,15,58,223,200,4 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,8 - call .L099key_256a + call .L131key_256a .byte 102,15,58,223,200,8 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,16 - call .L099key_256a + call .L131key_256a .byte 102,15,58,223,200,16 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,32 - call .L099key_256a + call .L131key_256a .byte 102,15,58,223,200,32 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,64 - call .L099key_256a + call .L131key_256a movups %xmm0,(%edx) movl %ecx,16(%edx) xorl %eax,%eax - ret + jmp .L120good_key .align 16 -.L099key_256a: +.L131key_256a: movups %xmm2,(%edx) leal 16(%edx),%edx -.L097key_256a_cold: +.L129key_256a_cold: shufps $16,%xmm0,%xmm4 xorps %xmm4,%xmm0 shufps $140,%xmm0,%xmm4 @@ -2093,7 +3117,7 @@ __aesni_set_encrypt_key: xorps %xmm1,%xmm0 ret .align 16 -.L098key_256b: +.L130key_256b: movups %xmm0,(%edx) leal 16(%edx),%edx shufps $16,%xmm2,%xmm4 @@ -2103,13 +3127,70 @@ __aesni_set_encrypt_key: shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 ret +.align 16 +.L12814rounds_alt: + movdqa (%ebx),%xmm5 + movdqa 32(%ebx),%xmm4 + movl $7,%ecx + movdqu %xmm0,-32(%edx) + movdqa %xmm2,%xmm1 + movdqu %xmm2,-16(%edx) +.L132loop_key256: +.byte 102,15,56,0,213 +.byte 102,15,56,221,212 + movdqa %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm3,%xmm0 + pslld $1,%xmm4 + pxor %xmm2,%xmm0 + movdqu %xmm0,(%edx) + decl %ecx + jz .L133done_key256 + pshufd $255,%xmm0,%xmm2 + pxor %xmm3,%xmm3 +.byte 102,15,56,221,211 + movdqa %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm3,%xmm1 + pxor %xmm1,%xmm2 + movdqu %xmm2,16(%edx) + leal 32(%edx),%edx + movdqa %xmm2,%xmm1 + jmp .L132loop_key256 +.L133done_key256: + movl $13,%ecx + movl %ecx,16(%edx) +.L120good_key: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + xorl %eax,%eax + popl %ebx + popl %ebp + ret .align 4 -.L086bad_pointer: +.L111bad_pointer: movl $-1,%eax + popl %ebx + popl %ebp ret .align 4 -.L089bad_keybits: +.L115bad_keybits: + pxor %xmm0,%xmm0 movl $-2,%eax + popl %ebx + popl %ebp ret .globl _aesni_set_encrypt_key .def _aesni_set_encrypt_key; .scl 2; .type 32; .endef @@ -2133,7 +3214,7 @@ _aesni_set_decrypt_key: movl 12(%esp),%edx shll $4,%ecx testl %eax,%eax - jnz .L100dec_key_ret + jnz .L134dec_key_ret leal 16(%edx,%ecx,1),%eax movups (%edx),%xmm0 movups (%eax),%xmm1 @@ -2141,7 +3222,7 @@ _aesni_set_decrypt_key: movups %xmm1,(%edx) leal 16(%edx),%edx leal -16(%eax),%eax -.L101dec_key_inverse: +.L135dec_key_inverse: movups (%edx),%xmm0 movups (%eax),%xmm1 .byte 102,15,56,219,192 @@ -2151,15 +3232,24 @@ _aesni_set_decrypt_key: movups %xmm0,16(%eax) movups %xmm1,-16(%edx) cmpl %edx,%eax - ja .L101dec_key_inverse + ja .L135dec_key_inverse movups (%edx),%xmm0 .byte 102,15,56,219,192 movups %xmm0,(%edx) + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 xorl %eax,%eax -.L100dec_key_ret: +.L134dec_key_ret: ret +.align 64 +.Lkey_const: +.long 202313229,202313229,202313229,202313229 +.long 67569157,67569157,67569157,67569157 +.long 1,1,1,1 +.long 27,27,27,27 .byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 .byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 .byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 .byte 115,108,46,111,114,103,62,0 +.comm __gnutls_x86_cpuid_s,16 diff --git a/lib/accelerated/x86/coff/aesni-x86_64.s b/lib/accelerated/x86/coff/aesni-x86_64.s index 79ffbf70c7..4e8de065f2 100644 --- a/lib/accelerated/x86/coff/aesni-x86_64.s +++ b/lib/accelerated/x86/coff/aesni-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -43,6 +43,7 @@ .def aesni_encrypt; .scl 2; .type 32; .endef .p2align 4 aesni_encrypt: + movups (%rcx),%xmm2 movl 240(%r8),%eax movups (%r8),%xmm0 @@ -63,10 +64,12 @@ aesni_encrypt: .byte 0xf3,0xc3 + .globl aesni_decrypt .def aesni_decrypt; .scl 2; .type 32; .endef .p2align 4 aesni_decrypt: + movups (%rcx),%xmm2 movl 240(%r8),%eax movups (%r8),%xmm0 @@ -86,9 +89,11 @@ aesni_decrypt: pxor %xmm2,%xmm2 .byte 0xf3,0xc3 + .def _aesni_encrypt2; .scl 3; .type 32; .endef .p2align 4 _aesni_encrypt2: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -115,9 +120,11 @@ _aesni_encrypt2: .byte 102,15,56,221,216 .byte 0xf3,0xc3 + .def _aesni_decrypt2; .scl 3; .type 32; .endef .p2align 4 _aesni_decrypt2: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -144,9 +151,11 @@ _aesni_decrypt2: .byte 102,15,56,223,216 .byte 0xf3,0xc3 + .def _aesni_encrypt3; .scl 3; .type 32; .endef .p2align 4 _aesni_encrypt3: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -178,9 +187,11 @@ _aesni_encrypt3: .byte 102,15,56,221,224 .byte 0xf3,0xc3 + .def _aesni_decrypt3; .scl 3; .type 32; .endef .p2align 4 _aesni_decrypt3: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -212,9 +223,11 @@ _aesni_decrypt3: .byte 102,15,56,223,224 .byte 0xf3,0xc3 + .def _aesni_encrypt4; .scl 3; .type 32; .endef .p2align 4 _aesni_encrypt4: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -252,9 +265,11 @@ _aesni_encrypt4: .byte 102,15,56,221,232 .byte 0xf3,0xc3 + .def _aesni_decrypt4; .scl 3; .type 32; .endef .p2align 4 _aesni_decrypt4: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -292,9 +307,11 @@ _aesni_decrypt4: .byte 102,15,56,223,232 .byte 0xf3,0xc3 + .def _aesni_encrypt6; .scl 3; .type 32; .endef .p2align 4 _aesni_encrypt6: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -346,9 +363,11 @@ _aesni_encrypt6: .byte 102,15,56,221,248 .byte 0xf3,0xc3 + .def _aesni_decrypt6; .scl 3; .type 32; .endef .p2align 4 _aesni_decrypt6: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -400,9 +419,11 @@ _aesni_decrypt6: .byte 102,15,56,223,248 .byte 0xf3,0xc3 + .def _aesni_encrypt8; .scl 3; .type 32; .endef .p2align 4 _aesni_encrypt8: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -464,9 +485,11 @@ _aesni_encrypt8: .byte 102,68,15,56,221,200 .byte 0xf3,0xc3 + .def _aesni_decrypt8; .scl 3; .type 32; .endef .p2align 4 _aesni_decrypt8: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -528,6 +551,7 @@ _aesni_decrypt8: .byte 102,68,15,56,223,200 .byte 0xf3,0xc3 + .globl aesni_ecb_encrypt .def aesni_ecb_encrypt; .scl 2; .type 32; .endef .p2align 4 @@ -542,6 +566,7 @@ aesni_ecb_encrypt: movq %r9,%rcx movq 40(%rsp),%r8 + leaq -88(%rsp),%rsp movaps %xmm6,(%rsp) movaps %xmm7,16(%rsp) @@ -897,6 +922,7 @@ aesni_ecb_encrypt: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_aesni_ecb_encrypt: .globl aesni_ccm64_encrypt_blocks .def aesni_ccm64_encrypt_blocks; .scl 2; .type 32; .endef @@ -1130,6 +1156,7 @@ aesni_ctr32_encrypt_blocks: movq %r9,%rcx movq 40(%rsp),%r8 + cmpq $1,%rdx jne .Lctr32_bulk @@ -1159,22 +1186,23 @@ aesni_ctr32_encrypt_blocks: .p2align 4 .Lctr32_bulk: - leaq (%rsp),%rax + leaq (%rsp),%r11 + pushq %rbp + subq $288,%rsp andq $-16,%rsp - movaps %xmm6,-168(%rax) - movaps %xmm7,-152(%rax) - movaps %xmm8,-136(%rax) - movaps %xmm9,-120(%rax) - movaps %xmm10,-104(%rax) - movaps %xmm11,-88(%rax) - movaps %xmm12,-72(%rax) - movaps %xmm13,-56(%rax) - movaps %xmm14,-40(%rax) - movaps %xmm15,-24(%rax) + movaps %xmm6,-168(%r11) + movaps %xmm7,-152(%r11) + movaps %xmm8,-136(%r11) + movaps %xmm9,-120(%r11) + movaps %xmm10,-104(%r11) + movaps %xmm11,-88(%r11) + movaps %xmm12,-72(%r11) + movaps %xmm13,-56(%r11) + movaps %xmm14,-40(%r11) + movaps %xmm15,-24(%r11) .Lctr32_body: - leaq -8(%rax),%rbp @@ -1183,7 +1211,7 @@ aesni_ctr32_encrypt_blocks: movdqu (%rcx),%xmm0 movl 12(%r8),%r8d pxor %xmm0,%xmm2 - movl 12(%rcx),%r11d + movl 12(%rcx),%ebp movdqa %xmm2,0(%rsp) bswapl %r8d movdqa %xmm2,%xmm3 @@ -1199,8 +1227,8 @@ aesni_ctr32_encrypt_blocks: leaq 2(%r8),%rdx bswapl %eax bswapl %edx - xorl %r11d,%eax - xorl %r11d,%edx + xorl %ebp,%eax + xorl %ebp,%edx .byte 102,15,58,34,216,3 leaq 3(%r8),%rax movdqa %xmm3,16(%rsp) @@ -1209,25 +1237,25 @@ aesni_ctr32_encrypt_blocks: movq %r10,%rdx leaq 4(%r8),%r10 movdqa %xmm4,32(%rsp) - xorl %r11d,%eax + xorl %ebp,%eax bswapl %r10d .byte 102,15,58,34,232,3 - xorl %r11d,%r10d + xorl %ebp,%r10d movdqa %xmm5,48(%rsp) leaq 5(%r8),%r9 movl %r10d,64+12(%rsp) bswapl %r9d leaq 6(%r8),%r10 movl 240(%rcx),%eax - xorl %r11d,%r9d + xorl %ebp,%r9d bswapl %r10d movl %r9d,80+12(%rsp) - xorl %r11d,%r10d + xorl %ebp,%r10d leaq 7(%r8),%r9 movl %r10d,96+12(%rsp) bswapl %r9d movl _gnutls_x86_cpuid_s+4(%rip),%r10d - xorl %r11d,%r9d + xorl %ebp,%r9d andl $71303168,%r10d movl %r9d,112+12(%rsp) @@ -1251,7 +1279,7 @@ aesni_ctr32_encrypt_blocks: .Lctr32_6x: shll $4,%eax movl $48,%r10d - bswapl %r11d + bswapl %ebp leaq 32(%rcx,%rax,1),%rcx subq %rax,%r10 jmp .Lctr32_loop6 @@ -1262,32 +1290,32 @@ aesni_ctr32_encrypt_blocks: movups -48(%rcx,%r10,1),%xmm0 .byte 102,15,56,220,209 movl %r8d,%eax - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,217 .byte 0x0f,0x38,0xf1,0x44,0x24,12 leal 1(%r8),%eax .byte 102,15,56,220,225 - xorl %r11d,%eax + xorl %ebp,%eax .byte 0x0f,0x38,0xf1,0x44,0x24,28 .byte 102,15,56,220,233 leal 2(%r8),%eax - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,241 .byte 0x0f,0x38,0xf1,0x44,0x24,44 leal 3(%r8),%eax .byte 102,15,56,220,249 movups -32(%rcx,%r10,1),%xmm1 - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,208 .byte 0x0f,0x38,0xf1,0x44,0x24,60 leal 4(%r8),%eax .byte 102,15,56,220,216 - xorl %r11d,%eax + xorl %ebp,%eax .byte 0x0f,0x38,0xf1,0x44,0x24,76 .byte 102,15,56,220,224 leal 5(%r8),%eax - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,232 .byte 0x0f,0x38,0xf1,0x44,0x24,92 movq %r10,%rax @@ -1348,7 +1376,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d movups 32-128(%rcx),%xmm0 .byte 102,15,56,220,225 - xorl %r11d,%r9d + xorl %ebp,%r9d nop .byte 102,15,56,220,233 movl %r9d,0+12(%rsp) @@ -1361,7 +1389,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,208 .byte 102,15,56,220,216 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,224 .byte 102,15,56,220,232 @@ -1375,7 +1403,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,209 .byte 102,15,56,220,217 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,225 .byte 102,15,56,220,233 @@ -1389,7 +1417,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,208 .byte 102,15,56,220,216 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,224 .byte 102,15,56,220,232 @@ -1403,7 +1431,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,209 .byte 102,15,56,220,217 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,225 .byte 102,15,56,220,233 @@ -1417,7 +1445,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,208 .byte 102,15,56,220,216 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,224 .byte 102,15,56,220,232 @@ -1431,7 +1459,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,209 .byte 102,15,56,220,217 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,225 .byte 102,15,56,220,233 @@ -1446,7 +1474,7 @@ aesni_ctr32_encrypt_blocks: .byte 102,15,56,220,208 .byte 102,15,56,220,216 .byte 102,15,56,220,224 - xorl %r11d,%r9d + xorl %ebp,%r9d movdqu 0(%rdi),%xmm10 .byte 102,15,56,220,232 movl %r9d,112+12(%rsp) @@ -1681,32 +1709,32 @@ aesni_ctr32_encrypt_blocks: .Lctr32_done: xorps %xmm0,%xmm0 - xorl %r11d,%r11d + xorl %ebp,%ebp pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 pxor %xmm3,%xmm3 pxor %xmm4,%xmm4 pxor %xmm5,%xmm5 - movaps -160(%rbp),%xmm6 - movaps %xmm0,-160(%rbp) - movaps -144(%rbp),%xmm7 - movaps %xmm0,-144(%rbp) - movaps -128(%rbp),%xmm8 - movaps %xmm0,-128(%rbp) - movaps -112(%rbp),%xmm9 - movaps %xmm0,-112(%rbp) - movaps -96(%rbp),%xmm10 - movaps %xmm0,-96(%rbp) - movaps -80(%rbp),%xmm11 - movaps %xmm0,-80(%rbp) - movaps -64(%rbp),%xmm12 - movaps %xmm0,-64(%rbp) - movaps -48(%rbp),%xmm13 - movaps %xmm0,-48(%rbp) - movaps -32(%rbp),%xmm14 - movaps %xmm0,-32(%rbp) - movaps -16(%rbp),%xmm15 - movaps %xmm0,-16(%rbp) + movaps -168(%r11),%xmm6 + movaps %xmm0,-168(%r11) + movaps -152(%r11),%xmm7 + movaps %xmm0,-152(%r11) + movaps -136(%r11),%xmm8 + movaps %xmm0,-136(%r11) + movaps -120(%r11),%xmm9 + movaps %xmm0,-120(%r11) + movaps -104(%r11),%xmm10 + movaps %xmm0,-104(%r11) + movaps -88(%r11),%xmm11 + movaps %xmm0,-88(%r11) + movaps -72(%r11),%xmm12 + movaps %xmm0,-72(%r11) + movaps -56(%r11),%xmm13 + movaps %xmm0,-56(%r11) + movaps -40(%r11),%xmm14 + movaps %xmm0,-40(%r11) + movaps -24(%r11),%xmm15 + movaps %xmm0,-24(%r11) movaps %xmm0,0(%rsp) movaps %xmm0,16(%rsp) movaps %xmm0,32(%rsp) @@ -1715,12 +1743,15 @@ aesni_ctr32_encrypt_blocks: movaps %xmm0,80(%rsp) movaps %xmm0,96(%rsp) movaps %xmm0,112(%rsp) - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp + + leaq (%r11),%rsp + .Lctr32_epilogue: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_aesni_ctr32_encrypt_blocks: .globl aesni_xts_encrypt .def aesni_xts_encrypt; .scl 2; .type 32; .endef @@ -1737,22 +1768,24 @@ aesni_xts_encrypt: movq 40(%rsp),%r8 movq 48(%rsp),%r9 - leaq (%rsp),%rax + + leaq (%rsp),%r11 + pushq %rbp + subq $272,%rsp andq $-16,%rsp - movaps %xmm6,-168(%rax) - movaps %xmm7,-152(%rax) - movaps %xmm8,-136(%rax) - movaps %xmm9,-120(%rax) - movaps %xmm10,-104(%rax) - movaps %xmm11,-88(%rax) - movaps %xmm12,-72(%rax) - movaps %xmm13,-56(%rax) - movaps %xmm14,-40(%rax) - movaps %xmm15,-24(%rax) + movaps %xmm6,-168(%r11) + movaps %xmm7,-152(%r11) + movaps %xmm8,-136(%r11) + movaps %xmm9,-120(%r11) + movaps %xmm10,-104(%r11) + movaps %xmm11,-88(%r11) + movaps %xmm12,-72(%r11) + movaps %xmm13,-56(%r11) + movaps %xmm14,-40(%r11) + movaps %xmm15,-24(%r11) .Lxts_enc_body: - leaq -8(%rax),%rbp movups (%r9),%xmm2 movl 240(%r8),%eax movl 240(%rcx),%r10d @@ -1768,7 +1801,7 @@ aesni_xts_encrypt: jnz .Loop_enc1_8 .byte 102,15,56,221,209 movups (%rcx),%xmm0 - movq %rcx,%r11 + movq %rcx,%rbp movl %r10d,%eax shll $4,%r10d movq %rdx,%r9 @@ -1824,9 +1857,9 @@ aesni_xts_encrypt: jc .Lxts_enc_short movl $16+96,%eax - leaq 32(%r11,%r10,1),%rcx + leaq 32(%rbp,%r10,1),%rcx subq %r10,%rax - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 movq %rax,%r10 leaq .Lxts_magic(%rip),%r8 jmp .Lxts_enc_grandloop @@ -1851,7 +1884,7 @@ aesni_xts_encrypt: movdqa 96(%rsp),%xmm9 pxor %xmm14,%xmm6 .byte 102,15,56,220,233 - movups 32(%r11),%xmm0 + movups 32(%rbp),%xmm0 leaq 96(%rdi),%rdi pxor %xmm8,%xmm7 @@ -1860,7 +1893,7 @@ aesni_xts_encrypt: pxor %xmm9,%xmm11 movdqa %xmm10,0(%rsp) .byte 102,15,56,220,249 - movups 48(%r11),%xmm1 + movups 48(%rbp),%xmm1 pxor %xmm9,%xmm12 .byte 102,15,56,220,208 @@ -1875,7 +1908,7 @@ aesni_xts_encrypt: movdqa %xmm14,64(%rsp) .byte 102,15,56,220,240 .byte 102,15,56,220,248 - movups 64(%r11),%xmm0 + movups 64(%rbp),%xmm0 movdqa %xmm8,80(%rsp) pshufd $0x5f,%xmm15,%xmm9 jmp .Lxts_enc_loop6 @@ -1907,7 +1940,7 @@ aesni_xts_encrypt: psrad $31,%xmm14 .byte 102,15,56,220,217 pand %xmm8,%xmm14 - movups (%r11),%xmm10 + movups (%rbp),%xmm10 .byte 102,15,56,220,225 .byte 102,15,56,220,233 .byte 102,15,56,220,241 @@ -1975,10 +2008,10 @@ aesni_xts_encrypt: .byte 102,15,56,220,225 .byte 102,15,56,220,233 pxor %xmm0,%xmm15 - movups (%r11),%xmm0 + movups (%rbp),%xmm0 .byte 102,15,56,220,241 .byte 102,15,56,220,249 - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 pxor %xmm15,%xmm14 .byte 102,15,56,221,84,36,0 @@ -2005,7 +2038,7 @@ aesni_xts_encrypt: movl $16+96,%eax subl %r10d,%eax - movq %r11,%rcx + movq %rbp,%rcx shrl $4,%eax .Lxts_enc_short: @@ -2161,7 +2194,7 @@ aesni_xts_encrypt: jnz .Lxts_enc_steal subq %r9,%rsi - movq %r11,%rcx + movq %rbp,%rcx movl %r10d,%eax movups -16(%rsi),%xmm2 @@ -2187,26 +2220,26 @@ aesni_xts_encrypt: pxor %xmm3,%xmm3 pxor %xmm4,%xmm4 pxor %xmm5,%xmm5 - movaps -160(%rbp),%xmm6 - movaps %xmm0,-160(%rbp) - movaps -144(%rbp),%xmm7 - movaps %xmm0,-144(%rbp) - movaps -128(%rbp),%xmm8 - movaps %xmm0,-128(%rbp) - movaps -112(%rbp),%xmm9 - movaps %xmm0,-112(%rbp) - movaps -96(%rbp),%xmm10 - movaps %xmm0,-96(%rbp) - movaps -80(%rbp),%xmm11 - movaps %xmm0,-80(%rbp) - movaps -64(%rbp),%xmm12 - movaps %xmm0,-64(%rbp) - movaps -48(%rbp),%xmm13 - movaps %xmm0,-48(%rbp) - movaps -32(%rbp),%xmm14 - movaps %xmm0,-32(%rbp) - movaps -16(%rbp),%xmm15 - movaps %xmm0,-16(%rbp) + movaps -168(%r11),%xmm6 + movaps %xmm0,-168(%r11) + movaps -152(%r11),%xmm7 + movaps %xmm0,-152(%r11) + movaps -136(%r11),%xmm8 + movaps %xmm0,-136(%r11) + movaps -120(%r11),%xmm9 + movaps %xmm0,-120(%r11) + movaps -104(%r11),%xmm10 + movaps %xmm0,-104(%r11) + movaps -88(%r11),%xmm11 + movaps %xmm0,-88(%r11) + movaps -72(%r11),%xmm12 + movaps %xmm0,-72(%r11) + movaps -56(%r11),%xmm13 + movaps %xmm0,-56(%r11) + movaps -40(%r11),%xmm14 + movaps %xmm0,-40(%r11) + movaps -24(%r11),%xmm15 + movaps %xmm0,-24(%r11) movaps %xmm0,0(%rsp) movaps %xmm0,16(%rsp) movaps %xmm0,32(%rsp) @@ -2214,12 +2247,15 @@ aesni_xts_encrypt: movaps %xmm0,64(%rsp) movaps %xmm0,80(%rsp) movaps %xmm0,96(%rsp) - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp + + leaq (%r11),%rsp + .Lxts_enc_epilogue: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_aesni_xts_encrypt: .globl aesni_xts_decrypt .def aesni_xts_decrypt; .scl 2; .type 32; .endef @@ -2236,22 +2272,24 @@ aesni_xts_decrypt: movq 40(%rsp),%r8 movq 48(%rsp),%r9 - leaq (%rsp),%rax + + leaq (%rsp),%r11 + pushq %rbp + subq $272,%rsp andq $-16,%rsp - movaps %xmm6,-168(%rax) - movaps %xmm7,-152(%rax) - movaps %xmm8,-136(%rax) - movaps %xmm9,-120(%rax) - movaps %xmm10,-104(%rax) - movaps %xmm11,-88(%rax) - movaps %xmm12,-72(%rax) - movaps %xmm13,-56(%rax) - movaps %xmm14,-40(%rax) - movaps %xmm15,-24(%rax) + movaps %xmm6,-168(%r11) + movaps %xmm7,-152(%r11) + movaps %xmm8,-136(%r11) + movaps %xmm9,-120(%r11) + movaps %xmm10,-104(%r11) + movaps %xmm11,-88(%r11) + movaps %xmm12,-72(%r11) + movaps %xmm13,-56(%r11) + movaps %xmm14,-40(%r11) + movaps %xmm15,-24(%r11) .Lxts_dec_body: - leaq -8(%rax),%rbp movups (%r9),%xmm2 movl 240(%r8),%eax movl 240(%rcx),%r10d @@ -2273,7 +2311,7 @@ aesni_xts_decrypt: subq %rax,%rdx movups (%rcx),%xmm0 - movq %rcx,%r11 + movq %rcx,%rbp movl %r10d,%eax shll $4,%r10d movq %rdx,%r9 @@ -2329,9 +2367,9 @@ aesni_xts_decrypt: jc .Lxts_dec_short movl $16+96,%eax - leaq 32(%r11,%r10,1),%rcx + leaq 32(%rbp,%r10,1),%rcx subq %r10,%rax - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 movq %rax,%r10 leaq .Lxts_magic(%rip),%r8 jmp .Lxts_dec_grandloop @@ -2356,7 +2394,7 @@ aesni_xts_decrypt: movdqa 96(%rsp),%xmm9 pxor %xmm14,%xmm6 .byte 102,15,56,222,233 - movups 32(%r11),%xmm0 + movups 32(%rbp),%xmm0 leaq 96(%rdi),%rdi pxor %xmm8,%xmm7 @@ -2365,7 +2403,7 @@ aesni_xts_decrypt: pxor %xmm9,%xmm11 movdqa %xmm10,0(%rsp) .byte 102,15,56,222,249 - movups 48(%r11),%xmm1 + movups 48(%rbp),%xmm1 pxor %xmm9,%xmm12 .byte 102,15,56,222,208 @@ -2380,7 +2418,7 @@ aesni_xts_decrypt: movdqa %xmm14,64(%rsp) .byte 102,15,56,222,240 .byte 102,15,56,222,248 - movups 64(%r11),%xmm0 + movups 64(%rbp),%xmm0 movdqa %xmm8,80(%rsp) pshufd $0x5f,%xmm15,%xmm9 jmp .Lxts_dec_loop6 @@ -2412,7 +2450,7 @@ aesni_xts_decrypt: psrad $31,%xmm14 .byte 102,15,56,222,217 pand %xmm8,%xmm14 - movups (%r11),%xmm10 + movups (%rbp),%xmm10 .byte 102,15,56,222,225 .byte 102,15,56,222,233 .byte 102,15,56,222,241 @@ -2480,10 +2518,10 @@ aesni_xts_decrypt: .byte 102,15,56,222,225 .byte 102,15,56,222,233 pxor %xmm0,%xmm15 - movups (%r11),%xmm0 + movups (%rbp),%xmm0 .byte 102,15,56,222,241 .byte 102,15,56,222,249 - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 pxor %xmm15,%xmm14 .byte 102,15,56,223,84,36,0 @@ -2510,7 +2548,7 @@ aesni_xts_decrypt: movl $16+96,%eax subl %r10d,%eax - movq %r11,%rcx + movq %rbp,%rcx shrl $4,%eax .Lxts_dec_short: @@ -2667,7 +2705,7 @@ aesni_xts_decrypt: jz .Lxts_dec_ret .Lxts_dec_done2: movq %r9,%rdx - movq %r11,%rcx + movq %rbp,%rcx movl %r10d,%eax movups (%rdi),%xmm2 @@ -2697,7 +2735,7 @@ aesni_xts_decrypt: jnz .Lxts_dec_steal subq %r9,%rsi - movq %r11,%rcx + movq %rbp,%rcx movl %r10d,%eax movups (%rsi),%xmm2 @@ -2723,26 +2761,26 @@ aesni_xts_decrypt: pxor %xmm3,%xmm3 pxor %xmm4,%xmm4 pxor %xmm5,%xmm5 - movaps -160(%rbp),%xmm6 - movaps %xmm0,-160(%rbp) - movaps -144(%rbp),%xmm7 - movaps %xmm0,-144(%rbp) - movaps -128(%rbp),%xmm8 - movaps %xmm0,-128(%rbp) - movaps -112(%rbp),%xmm9 - movaps %xmm0,-112(%rbp) - movaps -96(%rbp),%xmm10 - movaps %xmm0,-96(%rbp) - movaps -80(%rbp),%xmm11 - movaps %xmm0,-80(%rbp) - movaps -64(%rbp),%xmm12 - movaps %xmm0,-64(%rbp) - movaps -48(%rbp),%xmm13 - movaps %xmm0,-48(%rbp) - movaps -32(%rbp),%xmm14 - movaps %xmm0,-32(%rbp) - movaps -16(%rbp),%xmm15 - movaps %xmm0,-16(%rbp) + movaps -168(%r11),%xmm6 + movaps %xmm0,-168(%r11) + movaps -152(%r11),%xmm7 + movaps %xmm0,-152(%r11) + movaps -136(%r11),%xmm8 + movaps %xmm0,-136(%r11) + movaps -120(%r11),%xmm9 + movaps %xmm0,-120(%r11) + movaps -104(%r11),%xmm10 + movaps %xmm0,-104(%r11) + movaps -88(%r11),%xmm11 + movaps %xmm0,-88(%r11) + movaps -72(%r11),%xmm12 + movaps %xmm0,-72(%r11) + movaps -56(%r11),%xmm13 + movaps %xmm0,-56(%r11) + movaps -40(%r11),%xmm14 + movaps %xmm0,-40(%r11) + movaps -24(%r11),%xmm15 + movaps %xmm0,-24(%r11) movaps %xmm0,0(%rsp) movaps %xmm0,16(%rsp) movaps %xmm0,32(%rsp) @@ -2750,21 +2788,24 @@ aesni_xts_decrypt: movaps %xmm0,64(%rsp) movaps %xmm0,80(%rsp) movaps %xmm0,96(%rsp) - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp + + leaq (%r11),%rsp + .Lxts_dec_epilogue: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_aesni_xts_decrypt: -.globl aesni_cbc_encrypt -.def aesni_cbc_encrypt; .scl 2; .type 32; .endef -.p2align 4 -aesni_cbc_encrypt: +.globl aesni_ocb_encrypt +.def aesni_ocb_encrypt; .scl 2; .type 32; .endef +.p2align 5 +aesni_ocb_encrypt: movq %rdi,8(%rsp) movq %rsi,16(%rsp) movq %rsp,%rax -.LSEH_begin_aesni_cbc_encrypt: +.LSEH_begin_aesni_ocb_encrypt: movq %rcx,%rdi movq %rdx,%rsi movq %r8,%rdx @@ -2772,181 +2813,1096 @@ aesni_cbc_encrypt: movq 40(%rsp),%r8 movq 48(%rsp),%r9 - testq %rdx,%rdx - jz .Lcbc_ret + + leaq (%rsp),%rax + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + leaq -160(%rsp),%rsp + movaps %xmm6,0(%rsp) + movaps %xmm7,16(%rsp) + movaps %xmm8,32(%rsp) + movaps %xmm9,48(%rsp) + movaps %xmm10,64(%rsp) + movaps %xmm11,80(%rsp) + movaps %xmm12,96(%rsp) + movaps %xmm13,112(%rsp) + movaps %xmm14,128(%rsp) + movaps %xmm15,144(%rsp) +.Locb_enc_body: + movq 56(%rax),%rbx + movq 56+8(%rax),%rbp movl 240(%rcx),%r10d movq %rcx,%r11 - testl %r9d,%r9d - jz .Lcbc_decrypt + shll $4,%r10d + movups (%rcx),%xmm9 + movups 16(%rcx,%r10,1),%xmm1 - movups (%r8),%xmm2 - movl %r10d,%eax - cmpq $16,%rdx - jb .Lcbc_enc_tail - subq $16,%rdx - jmp .Lcbc_enc_loop -.p2align 4 -.Lcbc_enc_loop: - movups (%rdi),%xmm3 - leaq 16(%rdi),%rdi + movdqu (%r9),%xmm15 + pxor %xmm1,%xmm9 + pxor %xmm1,%xmm15 - movups (%rcx),%xmm0 - movups 16(%rcx),%xmm1 - xorps %xmm0,%xmm3 - leaq 32(%rcx),%rcx - xorps %xmm3,%xmm2 -.Loop_enc1_15: -.byte 102,15,56,220,209 - decl %eax - movups (%rcx),%xmm1 - leaq 16(%rcx),%rcx - jnz .Loop_enc1_15 -.byte 102,15,56,221,209 - movl %r10d,%eax - movq %r11,%rcx - movups %xmm2,0(%rsi) - leaq 16(%rsi),%rsi - subq $16,%rdx - jnc .Lcbc_enc_loop - addq $16,%rdx - jnz .Lcbc_enc_tail - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - movups %xmm2,(%r8) - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - jmp .Lcbc_ret + movl $16+32,%eax + leaq 32(%r11,%r10,1),%rcx + movups 16(%r11),%xmm1 + subq %r10,%rax + movq %rax,%r10 -.Lcbc_enc_tail: - movq %rdx,%rcx - xchgq %rdi,%rsi -.long 0x9066A4F3 - movl $16,%ecx - subq %rdx,%rcx - xorl %eax,%eax -.long 0x9066AAF3 - leaq -16(%rdi),%rdi - movl %r10d,%eax - movq %rdi,%rsi - movq %r11,%rcx - xorq %rdx,%rdx - jmp .Lcbc_enc_loop + movdqu (%rbx),%xmm10 + movdqu (%rbp),%xmm8 -.p2align 4 -.Lcbc_decrypt: - cmpq $16,%rdx - jne .Lcbc_decrypt_bulk + testq $1,%r8 + jnz .Locb_enc_odd + bsfq %r8,%r12 + addq $1,%r8 + shlq $4,%r12 + movdqu (%rbx,%r12,1),%xmm7 + movdqu (%rdi),%xmm2 + leaq 16(%rdi),%rdi + call __ocb_encrypt1 - movdqu (%rdi),%xmm2 - movdqu (%r8),%xmm3 - movdqa %xmm2,%xmm4 - movups (%rcx),%xmm0 - movups 16(%rcx),%xmm1 - leaq 32(%rcx),%rcx - xorps %xmm0,%xmm2 -.Loop_dec1_16: -.byte 102,15,56,222,209 - decl %r10d - movups (%rcx),%xmm1 - leaq 16(%rcx),%rcx - jnz .Loop_dec1_16 -.byte 102,15,56,223,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - movdqu %xmm4,(%r8) - xorps %xmm3,%xmm2 - pxor %xmm3,%xmm3 + movdqa %xmm7,%xmm15 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 - jmp .Lcbc_ret -.p2align 4 -.Lcbc_decrypt_bulk: - leaq (%rsp),%rax - pushq %rbp - subq $176,%rsp - andq $-16,%rsp - movaps %xmm6,16(%rsp) - movaps %xmm7,32(%rsp) - movaps %xmm8,48(%rsp) - movaps %xmm9,64(%rsp) - movaps %xmm10,80(%rsp) - movaps %xmm11,96(%rsp) - movaps %xmm12,112(%rsp) - movaps %xmm13,128(%rsp) - movaps %xmm14,144(%rsp) - movaps %xmm15,160(%rsp) -.Lcbc_decrypt_body: - leaq -8(%rax),%rbp - movups (%r8),%xmm10 - movl %r10d,%eax - cmpq $0x50,%rdx - jbe .Lcbc_dec_tail + leaq 16(%rsi),%rsi + subq $1,%rdx + jz .Locb_enc_done + +.Locb_enc_odd: + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + leaq 6(%r8),%r8 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + shlq $4,%r12 + shlq $4,%r13 + shlq $4,%r14 - movups (%rcx),%xmm0 + subq $6,%rdx + jc .Locb_enc_short + jmp .Locb_enc_grandloop + +.p2align 5 +.Locb_enc_grandloop: movdqu 0(%rdi),%xmm2 movdqu 16(%rdi),%xmm3 - movdqa %xmm2,%xmm11 movdqu 32(%rdi),%xmm4 - movdqa %xmm3,%xmm12 movdqu 48(%rdi),%xmm5 - movdqa %xmm4,%xmm13 movdqu 64(%rdi),%xmm6 - movdqa %xmm5,%xmm14 movdqu 80(%rdi),%xmm7 - movdqa %xmm6,%xmm15 - movl _gnutls_x86_cpuid_s+4(%rip),%r9d - cmpq $0x70,%rdx - jbe .Lcbc_dec_six_or_seven + leaq 96(%rdi),%rdi - andl $71303168,%r9d - subq $0x50,%rdx - cmpl $4194304,%r9d - je .Lcbc_dec_loop6_enter - subq $0x20,%rdx - leaq 112(%rcx),%rcx - jmp .Lcbc_dec_loop8_enter -.p2align 4 -.Lcbc_dec_loop8: - movups %xmm9,(%rsi) - leaq 16(%rsi),%rsi -.Lcbc_dec_loop8_enter: - movdqu 96(%rdi),%xmm8 - pxor %xmm0,%xmm2 - movdqu 112(%rdi),%xmm9 - pxor %xmm0,%xmm3 - movups 16-112(%rcx),%xmm1 - pxor %xmm0,%xmm4 - xorq %r11,%r11 - cmpq $0x70,%rdx - pxor %xmm0,%xmm5 - pxor %xmm0,%xmm6 - pxor %xmm0,%xmm7 - pxor %xmm0,%xmm8 + call __ocb_encrypt6 -.byte 102,15,56,222,209 - pxor %xmm0,%xmm9 - movups 32-112(%rcx),%xmm0 -.byte 102,15,56,222,217 -.byte 102,15,56,222,225 -.byte 102,15,56,222,233 -.byte 102,15,56,222,241 -.byte 102,15,56,222,249 -.byte 102,68,15,56,222,193 - setnc %r11b - shlq $7,%r11 -.byte 102,68,15,56,222,201 - addq %rdi,%r11 - movups 48-112(%rcx),%xmm1 -.byte 102,15,56,222,208 -.byte 102,15,56,222,216 -.byte 102,15,56,222,224 -.byte 102,15,56,222,232 -.byte 102,15,56,222,240 -.byte 102,15,56,222,248 -.byte 102,68,15,56,222,192 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + movups %xmm5,48(%rsi) + movups %xmm6,64(%rsi) + movups %xmm7,80(%rsi) + leaq 96(%rsi),%rsi + subq $6,%rdx + jnc .Locb_enc_grandloop + +.Locb_enc_short: + addq $6,%rdx + jz .Locb_enc_done + + movdqu 0(%rdi),%xmm2 + cmpq $2,%rdx + jb .Locb_enc_one + movdqu 16(%rdi),%xmm3 + je .Locb_enc_two + + movdqu 32(%rdi),%xmm4 + cmpq $4,%rdx + jb .Locb_enc_three + movdqu 48(%rdi),%xmm5 + je .Locb_enc_four + + movdqu 64(%rdi),%xmm6 + pxor %xmm7,%xmm7 + + call __ocb_encrypt6 + + movdqa %xmm14,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + movups %xmm5,48(%rsi) + movups %xmm6,64(%rsi) + + jmp .Locb_enc_done + +.p2align 4 +.Locb_enc_one: + movdqa %xmm10,%xmm7 + + call __ocb_encrypt1 + + movdqa %xmm7,%xmm15 + movups %xmm2,0(%rsi) + jmp .Locb_enc_done + +.p2align 4 +.Locb_enc_two: + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + + call __ocb_encrypt4 + + movdqa %xmm11,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + + jmp .Locb_enc_done + +.p2align 4 +.Locb_enc_three: + pxor %xmm5,%xmm5 + + call __ocb_encrypt4 + + movdqa %xmm12,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + + jmp .Locb_enc_done + +.p2align 4 +.Locb_enc_four: + call __ocb_encrypt4 + + movdqa %xmm13,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + movups %xmm5,48(%rsi) + +.Locb_enc_done: + pxor %xmm0,%xmm15 + movdqu %xmm8,(%rbp) + movdqu %xmm15,(%r9) + + xorps %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + movaps 0(%rsp),%xmm6 + movaps %xmm0,0(%rsp) + movaps 16(%rsp),%xmm7 + movaps %xmm0,16(%rsp) + movaps 32(%rsp),%xmm8 + movaps %xmm0,32(%rsp) + movaps 48(%rsp),%xmm9 + movaps %xmm0,48(%rsp) + movaps 64(%rsp),%xmm10 + movaps %xmm0,64(%rsp) + movaps 80(%rsp),%xmm11 + movaps %xmm0,80(%rsp) + movaps 96(%rsp),%xmm12 + movaps %xmm0,96(%rsp) + movaps 112(%rsp),%xmm13 + movaps %xmm0,112(%rsp) + movaps 128(%rsp),%xmm14 + movaps %xmm0,128(%rsp) + movaps 144(%rsp),%xmm15 + movaps %xmm0,144(%rsp) + leaq 160+40(%rsp),%rax +.Locb_enc_pop: + movq -40(%rax),%r14 + + movq -32(%rax),%r13 + + movq -24(%rax),%r12 + + movq -16(%rax),%rbp + + movq -8(%rax),%rbx + + leaq (%rax),%rsp + +.Locb_enc_epilogue: + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 + +.LSEH_end_aesni_ocb_encrypt: + +.def __ocb_encrypt6; .scl 3; .type 32; .endef +.p2align 5 +__ocb_encrypt6: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + movdqa %xmm10,%xmm14 + pxor %xmm15,%xmm10 + movdqu (%rbx,%r14,1),%xmm15 + pxor %xmm10,%xmm11 + pxor %xmm2,%xmm8 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm3,%xmm8 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm4,%xmm8 + pxor %xmm12,%xmm4 + pxor %xmm13,%xmm14 + pxor %xmm5,%xmm8 + pxor %xmm13,%xmm5 + pxor %xmm14,%xmm15 + pxor %xmm6,%xmm8 + pxor %xmm14,%xmm6 + pxor %xmm7,%xmm8 + pxor %xmm15,%xmm7 + movups 32(%r11),%xmm0 + + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + addq $6,%r8 + pxor %xmm9,%xmm10 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 +.byte 102,15,56,220,241 + pxor %xmm9,%xmm13 + pxor %xmm9,%xmm14 +.byte 102,15,56,220,249 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm15 + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 +.byte 102,15,56,220,240 +.byte 102,15,56,220,248 + movups 64(%r11),%xmm0 + shlq $4,%r12 + shlq $4,%r13 + jmp .Locb_enc_loop6 + +.p2align 5 +.Locb_enc_loop6: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 +.byte 102,15,56,220,240 +.byte 102,15,56,220,248 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_enc_loop6 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movups 16(%r11),%xmm1 + shlq $4,%r14 + +.byte 102,65,15,56,221,210 + movdqu (%rbx),%xmm10 + movq %r10,%rax +.byte 102,65,15,56,221,219 +.byte 102,65,15,56,221,228 +.byte 102,65,15,56,221,237 +.byte 102,65,15,56,221,246 +.byte 102,65,15,56,221,255 + .byte 0xf3,0xc3 + + +.def __ocb_encrypt4; .scl 3; .type 32; .endef +.p2align 5 +__ocb_encrypt4: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + pxor %xmm15,%xmm10 + pxor %xmm10,%xmm11 + pxor %xmm2,%xmm8 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm3,%xmm8 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm4,%xmm8 + pxor %xmm12,%xmm4 + pxor %xmm5,%xmm8 + pxor %xmm13,%xmm5 + movups 32(%r11),%xmm0 + + pxor %xmm9,%xmm10 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 + pxor %xmm9,%xmm13 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + movups 48(%r11),%xmm1 + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 + movups 64(%r11),%xmm0 + jmp .Locb_enc_loop4 + +.p2align 5 +.Locb_enc_loop4: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_enc_loop4 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,65,15,56,221,210 +.byte 102,65,15,56,221,219 +.byte 102,65,15,56,221,228 +.byte 102,65,15,56,221,237 + .byte 0xf3,0xc3 + + +.def __ocb_encrypt1; .scl 3; .type 32; .endef +.p2align 5 +__ocb_encrypt1: + pxor %xmm15,%xmm7 + pxor %xmm9,%xmm7 + pxor %xmm2,%xmm8 + pxor %xmm7,%xmm2 + movups 32(%r11),%xmm0 + +.byte 102,15,56,220,209 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm7 + +.byte 102,15,56,220,208 + movups 64(%r11),%xmm0 + jmp .Locb_enc_loop1 + +.p2align 5 +.Locb_enc_loop1: +.byte 102,15,56,220,209 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,220,208 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_enc_loop1 + +.byte 102,15,56,220,209 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,15,56,221,215 + .byte 0xf3,0xc3 + + +.globl aesni_ocb_decrypt +.def aesni_ocb_decrypt; .scl 2; .type 32; .endef +.p2align 5 +aesni_ocb_decrypt: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_aesni_ocb_decrypt: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + movq %r9,%rcx + movq 40(%rsp),%r8 + movq 48(%rsp),%r9 + + + leaq (%rsp),%rax + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + leaq -160(%rsp),%rsp + movaps %xmm6,0(%rsp) + movaps %xmm7,16(%rsp) + movaps %xmm8,32(%rsp) + movaps %xmm9,48(%rsp) + movaps %xmm10,64(%rsp) + movaps %xmm11,80(%rsp) + movaps %xmm12,96(%rsp) + movaps %xmm13,112(%rsp) + movaps %xmm14,128(%rsp) + movaps %xmm15,144(%rsp) +.Locb_dec_body: + movq 56(%rax),%rbx + movq 56+8(%rax),%rbp + + movl 240(%rcx),%r10d + movq %rcx,%r11 + shll $4,%r10d + movups (%rcx),%xmm9 + movups 16(%rcx,%r10,1),%xmm1 + + movdqu (%r9),%xmm15 + pxor %xmm1,%xmm9 + pxor %xmm1,%xmm15 + + movl $16+32,%eax + leaq 32(%r11,%r10,1),%rcx + movups 16(%r11),%xmm1 + subq %r10,%rax + movq %rax,%r10 + + movdqu (%rbx),%xmm10 + movdqu (%rbp),%xmm8 + + testq $1,%r8 + jnz .Locb_dec_odd + + bsfq %r8,%r12 + addq $1,%r8 + shlq $4,%r12 + movdqu (%rbx,%r12,1),%xmm7 + movdqu (%rdi),%xmm2 + leaq 16(%rdi),%rdi + + call __ocb_decrypt1 + + movdqa %xmm7,%xmm15 + movups %xmm2,(%rsi) + xorps %xmm2,%xmm8 + leaq 16(%rsi),%rsi + subq $1,%rdx + jz .Locb_dec_done + +.Locb_dec_odd: + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + leaq 6(%r8),%r8 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + shlq $4,%r12 + shlq $4,%r13 + shlq $4,%r14 + + subq $6,%rdx + jc .Locb_dec_short + jmp .Locb_dec_grandloop + +.p2align 5 +.Locb_dec_grandloop: + movdqu 0(%rdi),%xmm2 + movdqu 16(%rdi),%xmm3 + movdqu 32(%rdi),%xmm4 + movdqu 48(%rdi),%xmm5 + movdqu 64(%rdi),%xmm6 + movdqu 80(%rdi),%xmm7 + leaq 96(%rdi),%rdi + + call __ocb_decrypt6 + + movups %xmm2,0(%rsi) + pxor %xmm2,%xmm8 + movups %xmm3,16(%rsi) + pxor %xmm3,%xmm8 + movups %xmm4,32(%rsi) + pxor %xmm4,%xmm8 + movups %xmm5,48(%rsi) + pxor %xmm5,%xmm8 + movups %xmm6,64(%rsi) + pxor %xmm6,%xmm8 + movups %xmm7,80(%rsi) + pxor %xmm7,%xmm8 + leaq 96(%rsi),%rsi + subq $6,%rdx + jnc .Locb_dec_grandloop + +.Locb_dec_short: + addq $6,%rdx + jz .Locb_dec_done + + movdqu 0(%rdi),%xmm2 + cmpq $2,%rdx + jb .Locb_dec_one + movdqu 16(%rdi),%xmm3 + je .Locb_dec_two + + movdqu 32(%rdi),%xmm4 + cmpq $4,%rdx + jb .Locb_dec_three + movdqu 48(%rdi),%xmm5 + je .Locb_dec_four + + movdqu 64(%rdi),%xmm6 + pxor %xmm7,%xmm7 + + call __ocb_decrypt6 + + movdqa %xmm14,%xmm15 + movups %xmm2,0(%rsi) + pxor %xmm2,%xmm8 + movups %xmm3,16(%rsi) + pxor %xmm3,%xmm8 + movups %xmm4,32(%rsi) + pxor %xmm4,%xmm8 + movups %xmm5,48(%rsi) + pxor %xmm5,%xmm8 + movups %xmm6,64(%rsi) + pxor %xmm6,%xmm8 + + jmp .Locb_dec_done + +.p2align 4 +.Locb_dec_one: + movdqa %xmm10,%xmm7 + + call __ocb_decrypt1 + + movdqa %xmm7,%xmm15 + movups %xmm2,0(%rsi) + xorps %xmm2,%xmm8 + jmp .Locb_dec_done + +.p2align 4 +.Locb_dec_two: + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + + call __ocb_decrypt4 + + movdqa %xmm11,%xmm15 + movups %xmm2,0(%rsi) + xorps %xmm2,%xmm8 + movups %xmm3,16(%rsi) + xorps %xmm3,%xmm8 + + jmp .Locb_dec_done + +.p2align 4 +.Locb_dec_three: + pxor %xmm5,%xmm5 + + call __ocb_decrypt4 + + movdqa %xmm12,%xmm15 + movups %xmm2,0(%rsi) + xorps %xmm2,%xmm8 + movups %xmm3,16(%rsi) + xorps %xmm3,%xmm8 + movups %xmm4,32(%rsi) + xorps %xmm4,%xmm8 + + jmp .Locb_dec_done + +.p2align 4 +.Locb_dec_four: + call __ocb_decrypt4 + + movdqa %xmm13,%xmm15 + movups %xmm2,0(%rsi) + pxor %xmm2,%xmm8 + movups %xmm3,16(%rsi) + pxor %xmm3,%xmm8 + movups %xmm4,32(%rsi) + pxor %xmm4,%xmm8 + movups %xmm5,48(%rsi) + pxor %xmm5,%xmm8 + +.Locb_dec_done: + pxor %xmm0,%xmm15 + movdqu %xmm8,(%rbp) + movdqu %xmm15,(%r9) + + xorps %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + movaps 0(%rsp),%xmm6 + movaps %xmm0,0(%rsp) + movaps 16(%rsp),%xmm7 + movaps %xmm0,16(%rsp) + movaps 32(%rsp),%xmm8 + movaps %xmm0,32(%rsp) + movaps 48(%rsp),%xmm9 + movaps %xmm0,48(%rsp) + movaps 64(%rsp),%xmm10 + movaps %xmm0,64(%rsp) + movaps 80(%rsp),%xmm11 + movaps %xmm0,80(%rsp) + movaps 96(%rsp),%xmm12 + movaps %xmm0,96(%rsp) + movaps 112(%rsp),%xmm13 + movaps %xmm0,112(%rsp) + movaps 128(%rsp),%xmm14 + movaps %xmm0,128(%rsp) + movaps 144(%rsp),%xmm15 + movaps %xmm0,144(%rsp) + leaq 160+40(%rsp),%rax +.Locb_dec_pop: + movq -40(%rax),%r14 + + movq -32(%rax),%r13 + + movq -24(%rax),%r12 + + movq -16(%rax),%rbp + + movq -8(%rax),%rbx + + leaq (%rax),%rsp + +.Locb_dec_epilogue: + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 + +.LSEH_end_aesni_ocb_decrypt: + +.def __ocb_decrypt6; .scl 3; .type 32; .endef +.p2align 5 +__ocb_decrypt6: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + movdqa %xmm10,%xmm14 + pxor %xmm15,%xmm10 + movdqu (%rbx,%r14,1),%xmm15 + pxor %xmm10,%xmm11 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm12,%xmm4 + pxor %xmm13,%xmm14 + pxor %xmm13,%xmm5 + pxor %xmm14,%xmm15 + pxor %xmm14,%xmm6 + pxor %xmm15,%xmm7 + movups 32(%r11),%xmm0 + + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + addq $6,%r8 + pxor %xmm9,%xmm10 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 +.byte 102,15,56,222,241 + pxor %xmm9,%xmm13 + pxor %xmm9,%xmm14 +.byte 102,15,56,222,249 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm15 + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 +.byte 102,15,56,222,240 +.byte 102,15,56,222,248 + movups 64(%r11),%xmm0 + shlq $4,%r12 + shlq $4,%r13 + jmp .Locb_dec_loop6 + +.p2align 5 +.Locb_dec_loop6: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 +.byte 102,15,56,222,240 +.byte 102,15,56,222,248 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_dec_loop6 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movups 16(%r11),%xmm1 + shlq $4,%r14 + +.byte 102,65,15,56,223,210 + movdqu (%rbx),%xmm10 + movq %r10,%rax +.byte 102,65,15,56,223,219 +.byte 102,65,15,56,223,228 +.byte 102,65,15,56,223,237 +.byte 102,65,15,56,223,246 +.byte 102,65,15,56,223,255 + .byte 0xf3,0xc3 + + +.def __ocb_decrypt4; .scl 3; .type 32; .endef +.p2align 5 +__ocb_decrypt4: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + pxor %xmm15,%xmm10 + pxor %xmm10,%xmm11 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm12,%xmm4 + pxor %xmm13,%xmm5 + movups 32(%r11),%xmm0 + + pxor %xmm9,%xmm10 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 + pxor %xmm9,%xmm13 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + movups 48(%r11),%xmm1 + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 + movups 64(%r11),%xmm0 + jmp .Locb_dec_loop4 + +.p2align 5 +.Locb_dec_loop4: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_dec_loop4 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,65,15,56,223,210 +.byte 102,65,15,56,223,219 +.byte 102,65,15,56,223,228 +.byte 102,65,15,56,223,237 + .byte 0xf3,0xc3 + + +.def __ocb_decrypt1; .scl 3; .type 32; .endef +.p2align 5 +__ocb_decrypt1: + pxor %xmm15,%xmm7 + pxor %xmm9,%xmm7 + pxor %xmm7,%xmm2 + movups 32(%r11),%xmm0 + +.byte 102,15,56,222,209 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm7 + +.byte 102,15,56,222,208 + movups 64(%r11),%xmm0 + jmp .Locb_dec_loop1 + +.p2align 5 +.Locb_dec_loop1: +.byte 102,15,56,222,209 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,222,208 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_dec_loop1 + +.byte 102,15,56,222,209 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,15,56,223,215 + .byte 0xf3,0xc3 + +.globl aesni_cbc_encrypt +.def aesni_cbc_encrypt; .scl 2; .type 32; .endef +.p2align 4 +aesni_cbc_encrypt: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_aesni_cbc_encrypt: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + movq %r9,%rcx + movq 40(%rsp),%r8 + movq 48(%rsp),%r9 + + + testq %rdx,%rdx + jz .Lcbc_ret + + movl 240(%rcx),%r10d + movq %rcx,%r11 + testl %r9d,%r9d + jz .Lcbc_decrypt + + movups (%r8),%xmm2 + movl %r10d,%eax + cmpq $16,%rdx + jb .Lcbc_enc_tail + subq $16,%rdx + jmp .Lcbc_enc_loop +.p2align 4 +.Lcbc_enc_loop: + movups (%rdi),%xmm3 + leaq 16(%rdi),%rdi + + movups (%rcx),%xmm0 + movups 16(%rcx),%xmm1 + xorps %xmm0,%xmm3 + leaq 32(%rcx),%rcx + xorps %xmm3,%xmm2 +.Loop_enc1_15: +.byte 102,15,56,220,209 + decl %eax + movups (%rcx),%xmm1 + leaq 16(%rcx),%rcx + jnz .Loop_enc1_15 +.byte 102,15,56,221,209 + movl %r10d,%eax + movq %r11,%rcx + movups %xmm2,0(%rsi) + leaq 16(%rsi),%rsi + subq $16,%rdx + jnc .Lcbc_enc_loop + addq $16,%rdx + jnz .Lcbc_enc_tail + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + movups %xmm2,(%r8) + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + jmp .Lcbc_ret + +.Lcbc_enc_tail: + movq %rdx,%rcx + xchgq %rdi,%rsi +.long 0x9066A4F3 + movl $16,%ecx + subq %rdx,%rcx + xorl %eax,%eax +.long 0x9066AAF3 + leaq -16(%rdi),%rdi + movl %r10d,%eax + movq %rdi,%rsi + movq %r11,%rcx + xorq %rdx,%rdx + jmp .Lcbc_enc_loop + +.p2align 4 +.Lcbc_decrypt: + cmpq $16,%rdx + jne .Lcbc_decrypt_bulk + + + + movdqu (%rdi),%xmm2 + movdqu (%r8),%xmm3 + movdqa %xmm2,%xmm4 + movups (%rcx),%xmm0 + movups 16(%rcx),%xmm1 + leaq 32(%rcx),%rcx + xorps %xmm0,%xmm2 +.Loop_dec1_16: +.byte 102,15,56,222,209 + decl %r10d + movups (%rcx),%xmm1 + leaq 16(%rcx),%rcx + jnz .Loop_dec1_16 +.byte 102,15,56,223,209 + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + movdqu %xmm4,(%r8) + xorps %xmm3,%xmm2 + pxor %xmm3,%xmm3 + movups %xmm2,(%rsi) + pxor %xmm2,%xmm2 + jmp .Lcbc_ret +.p2align 4 +.Lcbc_decrypt_bulk: + leaq (%rsp),%r11 + + pushq %rbp + + subq $176,%rsp + andq $-16,%rsp + movaps %xmm6,16(%rsp) + movaps %xmm7,32(%rsp) + movaps %xmm8,48(%rsp) + movaps %xmm9,64(%rsp) + movaps %xmm10,80(%rsp) + movaps %xmm11,96(%rsp) + movaps %xmm12,112(%rsp) + movaps %xmm13,128(%rsp) + movaps %xmm14,144(%rsp) + movaps %xmm15,160(%rsp) +.Lcbc_decrypt_body: + movq %rcx,%rbp + movups (%r8),%xmm10 + movl %r10d,%eax + cmpq $0x50,%rdx + jbe .Lcbc_dec_tail + + movups (%rcx),%xmm0 + movdqu 0(%rdi),%xmm2 + movdqu 16(%rdi),%xmm3 + movdqa %xmm2,%xmm11 + movdqu 32(%rdi),%xmm4 + movdqa %xmm3,%xmm12 + movdqu 48(%rdi),%xmm5 + movdqa %xmm4,%xmm13 + movdqu 64(%rdi),%xmm6 + movdqa %xmm5,%xmm14 + movdqu 80(%rdi),%xmm7 + movdqa %xmm6,%xmm15 + movl _gnutls_x86_cpuid_s+4(%rip),%r9d + cmpq $0x70,%rdx + jbe .Lcbc_dec_six_or_seven + + andl $71303168,%r9d + subq $0x50,%rdx + cmpl $4194304,%r9d + je .Lcbc_dec_loop6_enter + subq $0x20,%rdx + leaq 112(%rcx),%rcx + jmp .Lcbc_dec_loop8_enter +.p2align 4 +.Lcbc_dec_loop8: + movups %xmm9,(%rsi) + leaq 16(%rsi),%rsi +.Lcbc_dec_loop8_enter: + movdqu 96(%rdi),%xmm8 + pxor %xmm0,%xmm2 + movdqu 112(%rdi),%xmm9 + pxor %xmm0,%xmm3 + movups 16-112(%rcx),%xmm1 + pxor %xmm0,%xmm4 + movq $-1,%rbp + cmpq $0x70,%rdx + pxor %xmm0,%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm0,%xmm7 + pxor %xmm0,%xmm8 + +.byte 102,15,56,222,209 + pxor %xmm0,%xmm9 + movups 32-112(%rcx),%xmm0 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 +.byte 102,68,15,56,222,193 + adcq $0,%rbp + andq $128,%rbp +.byte 102,68,15,56,222,201 + addq %rdi,%rbp + movups 48-112(%rcx),%xmm1 +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 +.byte 102,15,56,222,240 +.byte 102,15,56,222,248 +.byte 102,68,15,56,222,192 .byte 102,68,15,56,222,200 movups 64-112(%rcx),%xmm0 nop @@ -3076,18 +4032,18 @@ aesni_cbc_encrypt: movdqu 112(%rdi),%xmm0 .byte 102,65,15,56,223,228 leaq 128(%rdi),%rdi - movdqu 0(%r11),%xmm11 + movdqu 0(%rbp),%xmm11 .byte 102,65,15,56,223,237 .byte 102,65,15,56,223,246 - movdqu 16(%r11),%xmm12 - movdqu 32(%r11),%xmm13 + movdqu 16(%rbp),%xmm12 + movdqu 32(%rbp),%xmm13 .byte 102,65,15,56,223,255 .byte 102,68,15,56,223,193 - movdqu 48(%r11),%xmm14 - movdqu 64(%r11),%xmm15 + movdqu 48(%rbp),%xmm14 + movdqu 64(%rbp),%xmm15 .byte 102,69,15,56,223,202 movdqa %xmm0,%xmm10 - movdqu 80(%r11),%xmm1 + movdqu 80(%rbp),%xmm1 movups -112(%rcx),%xmm0 movups %xmm2,(%rsi) @@ -3206,7 +4162,7 @@ aesni_cbc_encrypt: pxor %xmm13,%xmm5 movdqu %xmm4,32(%rsi) pxor %xmm14,%xmm6 - movq %r11,%rcx + movq %rbp,%rcx movdqu %xmm5,48(%rsi) pxor %xmm15,%xmm7 movl %r10d,%eax @@ -3375,18 +4331,23 @@ aesni_cbc_encrypt: movaps %xmm0,144(%rsp) movaps 160(%rsp),%xmm15 movaps %xmm0,160(%rsp) - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp + + leaq (%r11),%rsp + .Lcbc_ret: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_aesni_cbc_encrypt: .globl aesni_set_decrypt_key .def aesni_set_decrypt_key; .scl 2; .type 32; .endef .p2align 4 aesni_set_decrypt_key: + .byte 0x48,0x83,0xEC,0x08 + call __aesni_set_encrypt_key shll $4,%edx testl %eax,%eax @@ -3419,7 +4380,9 @@ aesni_set_decrypt_key: pxor %xmm0,%xmm0 .Ldec_key_ret: addq $8,%rsp + .byte 0xf3,0xc3 + .LSEH_end_set_decrypt_key: .globl aesni_set_encrypt_key @@ -3427,7 +4390,9 @@ aesni_set_decrypt_key: .p2align 4 aesni_set_encrypt_key: __aesni_set_encrypt_key: + .byte 0x48,0x83,0xEC,0x08 + movq $-1,%rax testq %rcx,%rcx jz .Lenc_key_ret @@ -3720,7 +4685,9 @@ __aesni_set_encrypt_key: pxor %xmm4,%xmm4 pxor %xmm5,%xmm5 addq $8,%rsp + .byte 0xf3,0xc3 + .LSEH_end_set_encrypt_key: .p2align 4 @@ -3889,13 +4856,75 @@ ctr_xts_se_handler: cmpq %r10,%rbx jae .Lcommon_seh_tail - movq 160(%r8),%rax - leaq -160(%rax),%rsi + movq 208(%r8),%rax + + leaq -168(%rax),%rsi + leaq 512(%r8),%rdi + movl $20,%ecx +.long 0xa548f3fc + + movq -8(%rax),%rbp + movq %rbp,160(%r8) + jmp .Lcommon_seh_tail + + +.def ocb_se_handler; .scl 3; .type 32; .endef +.p2align 4 +ocb_se_handler: + pushq %rsi + pushq %rdi + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + pushfq + subq $64,%rsp + + movq 120(%r8),%rax + movq 248(%r8),%rbx + + movq 8(%r9),%rsi + movq 56(%r9),%r11 + + movl 0(%r11),%r10d + leaq (%rsi,%r10,1),%r10 + cmpq %r10,%rbx + jb .Lcommon_seh_tail + + movl 4(%r11),%r10d + leaq (%rsi,%r10,1),%r10 + cmpq %r10,%rbx + jae .Lcommon_seh_tail + + movl 8(%r11),%r10d + leaq (%rsi,%r10,1),%r10 + cmpq %r10,%rbx + jae .Locb_no_xmm + + movq 152(%r8),%rax + + leaq (%rax),%rsi leaq 512(%r8),%rdi movl $20,%ecx .long 0xa548f3fc + leaq 160+40(%rax),%rax + +.Locb_no_xmm: + movq -8(%rax),%rbx + movq -16(%rax),%rbp + movq -24(%rax),%r12 + movq -32(%rax),%r13 + movq -40(%rax),%r14 - jmp .Lcommon_rbp_tail + movq %rbx,144(%r8) + movq %rbp,160(%r8) + movq %r12,216(%r8) + movq %r13,224(%r8) + movq %r14,232(%r8) + + jmp .Lcommon_seh_tail .def cbc_se_handler; .scl 3; .type 32; .endef .p2align 4 @@ -3918,9 +4947,13 @@ cbc_se_handler: cmpq %r10,%rbx jb .Lcommon_seh_tail + movq 120(%r8),%rax + leaq .Lcbc_decrypt_body(%rip),%r10 cmpq %r10,%rbx - jb .Lrestore_cbc_rax + jb .Lcommon_seh_tail + + movq 152(%r8),%rax leaq .Lcbc_ret(%rip),%r10 cmpq %r10,%rbx @@ -3931,15 +4964,10 @@ cbc_se_handler: movl $20,%ecx .long 0xa548f3fc -.Lcommon_rbp_tail: - movq 160(%r8),%rax - movq (%rax),%rbp - leaq 8(%rax),%rax - movq %rbp,160(%r8) - jmp .Lcommon_seh_tail + movq 208(%r8),%rax -.Lrestore_cbc_rax: - movq 120(%r8),%rax + movq -8(%rax),%rbp + movq %rbp,160(%r8) .Lcommon_seh_tail: movq 8(%rax),%rdi @@ -4006,6 +5034,14 @@ cbc_se_handler: .rva .LSEH_begin_aesni_xts_decrypt .rva .LSEH_end_aesni_xts_decrypt .rva .LSEH_info_xts_dec + +.rva .LSEH_begin_aesni_ocb_encrypt +.rva .LSEH_end_aesni_ocb_encrypt +.rva .LSEH_info_ocb_enc + +.rva .LSEH_begin_aesni_ocb_decrypt +.rva .LSEH_end_aesni_ocb_decrypt +.rva .LSEH_info_ocb_dec .rva .LSEH_begin_aesni_cbc_encrypt .rva .LSEH_end_aesni_cbc_encrypt .rva .LSEH_info_cbc @@ -4043,6 +5079,18 @@ cbc_se_handler: .byte 9,0,0,0 .rva ctr_xts_se_handler .rva .Lxts_dec_body,.Lxts_dec_epilogue +.LSEH_info_ocb_enc: +.byte 9,0,0,0 +.rva ocb_se_handler +.rva .Locb_enc_body,.Locb_enc_epilogue +.rva .Locb_enc_pop +.long 0 +.LSEH_info_ocb_dec: +.byte 9,0,0,0 +.rva ocb_se_handler +.rva .Locb_dec_body,.Locb_dec_epilogue +.rva .Locb_dec_pop +.long 0 .LSEH_info_cbc: .byte 9,0,0,0 .rva cbc_se_handler diff --git a/lib/accelerated/x86/coff/cpuid-x86.s b/lib/accelerated/x86/coff/cpuid-x86.s deleted file mode 100644 index 0196ae9855..0000000000 --- a/lib/accelerated/x86/coff/cpuid-x86.s +++ /dev/null @@ -1,72 +0,0 @@ -# -# Copyright (C) 2011-2013 Free Software Foundation, Inc. -# Copyright (C) 2013 Nikos Mavrogiannopoulos -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# The GnuTLS is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public License -# as published by the Free Software Foundation; either version 2.1 of -# the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see . -# -# *** This file is auto-generated *** -# -.file "devel/perlasm/cpuid-x86.s" -.text -.globl _gnutls_cpuid -.def _gnutls_cpuid; .scl 2; .type 32; .endef -.align 16 -_gnutls_cpuid: -.L_gnutls_cpuid_begin: - pushl %ebp - movl %esp,%ebp - subl $12,%esp - movl %ebx,(%esp) - movl 8(%ebp),%eax - movl %esi,4(%esp) - movl %edi,8(%esp) - pushl %ebx - .byte 0x0f,0xa2 - movl %ebx,%edi - popl %ebx - movl %edx,%esi - movl 12(%ebp),%edx - movl %eax,(%edx) - movl 16(%ebp),%eax - movl %edi,(%eax) - movl 20(%ebp),%eax - movl %ecx,(%eax) - movl 24(%ebp),%eax - movl %esi,(%eax) - movl (%esp),%ebx - movl 4(%esp),%esi - movl 8(%esp),%edi - movl %ebp,%esp - popl %ebp - ret -.globl _gnutls_have_cpuid -.def _gnutls_have_cpuid; .scl 2; .type 32; .endef -.align 16 -_gnutls_have_cpuid: -.L_gnutls_have_cpuid_begin: - pushfl - popl %eax - orl $2097152,%eax - pushl %eax - popfl - pushfl - popl %eax - andl $2097152,%eax - ret -.byte 67,80,85,73,68,32,102,111,114,32,120,56,54,0 - diff --git a/lib/accelerated/x86/coff/cpuid-x86_64.s b/lib/accelerated/x86/coff/cpuid-x86_64.s deleted file mode 100644 index 5c7135cd96..0000000000 --- a/lib/accelerated/x86/coff/cpuid-x86_64.s +++ /dev/null @@ -1,71 +0,0 @@ -# -# Copyright (C) 2011-2013 Free Software Foundation, Inc. -# Copyright (C) 2013 Nikos Mavrogiannopoulos -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# The GnuTLS is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public License -# as published by the Free Software Foundation; either version 2.1 of -# the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see . -# -# *** This file is auto-generated *** -# -.text -.globl gnutls_cpuid -.def gnutls_cpuid; .scl 2; .type 32; .endef -.p2align 4 -gnutls_cpuid: - movq %rdi,8(%rsp) - movq %rsi,16(%rsp) - movq %rsp,%rax -.LSEH_begin_gnutls_cpuid: - movq %rcx,%rdi - movq %rdx,%rsi - movq %r8,%rdx - movq %r9,%rcx - movq 40(%rsp),%r8 - movq 48(%rsp),%r9 - - pushq %rbp - movq %rsp,%rbp - pushq %rbx - movl %edi,-12(%rbp) - movq %rsi,-24(%rbp) - movq %rdx,-32(%rbp) - movq %rcx,-40(%rbp) - movq %r8,-48(%rbp) - movl -12(%rbp),%eax - movl %eax,-60(%rbp) - movl -60(%rbp),%eax - cpuid - movl %edx,-56(%rbp) - movl %ecx,%esi - movl %eax,-52(%rbp) - movq -24(%rbp),%rax - movl -52(%rbp),%edx - movl %edx,(%rax) - movq -32(%rbp),%rax - movl %ebx,(%rax) - movq -40(%rbp),%rax - movl %esi,(%rax) - movq -48(%rbp),%rax - movl -56(%rbp),%ecx - movl %ecx,(%rax) - popq %rbx - leave - movq 8(%rsp),%rdi - movq 16(%rsp),%rsi - .byte 0xf3,0xc3 -.LSEH_end_gnutls_cpuid: - diff --git a/lib/accelerated/x86/coff/ghash-x86_64.s b/lib/accelerated/x86/coff/ghash-x86_64.s index f4bcee28f0..de207e4002 100644 --- a/lib/accelerated/x86/coff/ghash-x86_64.s +++ b/lib/accelerated/x86/coff/ghash-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -51,9 +51,21 @@ gcm_gmult_4bit: movq %rcx,%rdi movq %rdx,%rsi + pushq %rbx + pushq %rbp + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + subq $280,%rsp + .Lgmult_prologue: movzbq 15(%rdi),%r8 @@ -130,12 +142,17 @@ gcm_gmult_4bit: movq %r8,8(%rdi) movq %r9,(%rdi) - movq 16(%rsp),%rbx - leaq 24(%rsp),%rsp + leaq 280+48(%rsp),%rsi + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + .Lgmult_epilogue: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_gcm_gmult_4bit: .globl gcm_ghash_4bit .def gcm_ghash_4bit; .scl 2; .type 32; .endef @@ -150,13 +167,21 @@ gcm_ghash_4bit: movq %r8,%rdx movq %r9,%rcx + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + subq $280,%rsp + .Lghash_prologue: movq %rdx,%r14 movq %rcx,%r15 @@ -701,23 +726,33 @@ gcm_ghash_4bit: movq %r8,8(%rdi) movq %r9,(%rdi) - leaq 280(%rsp),%rsi - movq 0(%rsi),%r15 - movq 8(%rsi),%r14 - movq 16(%rsi),%r13 - movq 24(%rsi),%r12 - movq 32(%rsi),%rbp - movq 40(%rsi),%rbx - leaq 48(%rsi),%rsp + leaq 280+48(%rsp),%rsi + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq 0(%rsi),%rsp + .Lghash_epilogue: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_gcm_ghash_4bit: .globl gcm_init_clmul .def gcm_init_clmul; .scl 2; .type 32; .endef .p2align 4 gcm_init_clmul: + .L_init_clmul: .LSEH_begin_gcm_init_clmul: @@ -877,10 +912,12 @@ gcm_init_clmul: .LSEH_end_gcm_init_clmul: .byte 0xf3,0xc3 + .globl gcm_gmult_clmul .def gcm_gmult_clmul; .scl 2; .type 32; .endef .p2align 4 gcm_gmult_clmul: + .L_gmult_clmul: movdqu (%rcx),%xmm0 movdqa .Lbswap_mask(%rip),%xmm5 @@ -928,10 +965,12 @@ gcm_gmult_clmul: movdqu %xmm0,(%rcx) .byte 0xf3,0xc3 + .globl gcm_ghash_clmul .def gcm_ghash_clmul; .scl 2; .type 32; .endef .p2align 5 gcm_ghash_clmul: + .L_ghash_clmul: leaq -136(%rsp),%rax .LSEH_begin_gcm_ghash_clmul: @@ -1337,10 +1376,12 @@ gcm_ghash_clmul: .LSEH_end_gcm_ghash_clmul: .byte 0xf3,0xc3 + .globl gcm_init_avx .def gcm_init_avx; .scl 2; .type 32; .endef .p2align 5 gcm_init_avx: + .LSEH_begin_gcm_init_avx: .byte 0x48,0x83,0xec,0x18 @@ -1451,16 +1492,20 @@ gcm_init_avx: .LSEH_end_gcm_init_avx: .byte 0xf3,0xc3 + .globl gcm_gmult_avx .def gcm_gmult_avx; .scl 2; .type 32; .endef .p2align 5 gcm_gmult_avx: + jmp .L_gmult_clmul + .globl gcm_ghash_avx .def gcm_ghash_avx; .scl 2; .type 32; .endef .p2align 5 gcm_ghash_avx: + leaq -136(%rsp),%rax .LSEH_begin_gcm_ghash_avx: @@ -1859,6 +1904,7 @@ gcm_ghash_avx: .LSEH_end_gcm_ghash_avx: .byte 0xf3,0xc3 + .p2align 6 .Lbswap_mask: .byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 @@ -1945,14 +1991,20 @@ se_handler: cmpq %r10,%rbx jae .Lin_prologue - leaq 24(%rax),%rax + leaq 48+280(%rax),%rax movq -8(%rax),%rbx movq -16(%rax),%rbp movq -24(%rax),%r12 + movq -32(%rax),%r13 + movq -40(%rax),%r14 + movq -48(%rax),%r15 movq %rbx,144(%r8) movq %rbp,160(%r8) movq %r12,216(%r8) + movq %r13,224(%r8) + movq %r14,232(%r8) + movq %r15,240(%r8) .Lin_prologue: movq 8(%rax),%rdi diff --git a/lib/accelerated/x86/coff/sha1-ssse3-x86.s b/lib/accelerated/x86/coff/sha1-ssse3-x86.s index 22c17e7353..30f9ded212 100644 --- a/lib/accelerated/x86/coff/sha1-ssse3-x86.s +++ b/lib/accelerated/x86/coff/sha1-ssse3-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "sha1-586.s" .text .globl _sha1_block_data_order .def _sha1_block_data_order; .scl 2; .type 32; .endef diff --git a/lib/accelerated/x86/coff/sha1-ssse3-x86_64.s b/lib/accelerated/x86/coff/sha1-ssse3-x86_64.s index 13203c2b90..cdfc88254e 100644 --- a/lib/accelerated/x86/coff/sha1-ssse3-x86_64.s +++ b/lib/accelerated/x86/coff/sha1-ssse3-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -52,25 +52,45 @@ sha1_block_data_order: movq %rdx,%rsi movq %r8,%rdx + movl _gnutls_x86_cpuid_s+0(%rip),%r9d movl _gnutls_x86_cpuid_s+4(%rip),%r8d + movl _gnutls_x86_cpuid_s+8(%rip),%r10d testl $512,%r8d jz .Lialu + testl $536870912,%r10d + jnz _shaext_shortcut + andl $296,%r10d + cmpl $296,%r10d + je _avx2_shortcut + andl $268435456,%r8d + andl $1073741824,%r9d + orl %r9d,%r8d + cmpl $1342177280,%r8d + je _avx_shortcut jmp _ssse3_shortcut .p2align 4 .Lialu: + movq %rsp,%rax + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 - movq %rsp,%r11 + + pushq %r14 + movq %rdi,%r8 subq $72,%rsp movq %rsi,%r9 andq $-64,%rsp movq %rdx,%r10 - movq %r11,64(%rsp) + movq %rax,64(%rsp) + .Lprologue: movl 0(%r8),%esi @@ -84,1230 +104,1168 @@ sha1_block_data_order: .Lloop: movl 0(%r9),%edx bswapl %edx - movl %edx,0(%rsp) - movl %r11d,%eax movl 4(%r9),%ebp + movl %r12d,%eax + movl %edx,0(%rsp) movl %esi,%ecx - xorl %r12d,%eax bswapl %ebp + xorl %r11d,%eax roll $5,%ecx - leal 1518500249(%rdx,%r13,1),%r13d andl %edi,%eax - movl %ebp,4(%rsp) + leal 1518500249(%rdx,%r13,1),%r13d addl %ecx,%r13d xorl %r12d,%eax roll $30,%edi addl %eax,%r13d - movl %edi,%eax - movl 8(%r9),%edx + movl 8(%r9),%r14d + movl %r11d,%eax + movl %ebp,4(%rsp) movl %r13d,%ecx - xorl %r11d,%eax - bswapl %edx + bswapl %r14d + xorl %edi,%eax roll $5,%ecx - leal 1518500249(%rbp,%r12,1),%r12d andl %esi,%eax - movl %edx,8(%rsp) + leal 1518500249(%rbp,%r12,1),%r12d addl %ecx,%r12d xorl %r11d,%eax roll $30,%esi addl %eax,%r12d - movl %esi,%eax - movl 12(%r9),%ebp + movl 12(%r9),%edx + movl %edi,%eax + movl %r14d,8(%rsp) movl %r12d,%ecx - xorl %edi,%eax - bswapl %ebp + bswapl %edx + xorl %esi,%eax roll $5,%ecx - leal 1518500249(%rdx,%r11,1),%r11d andl %r13d,%eax - movl %ebp,12(%rsp) + leal 1518500249(%r14,%r11,1),%r11d addl %ecx,%r11d xorl %edi,%eax roll $30,%r13d addl %eax,%r11d - movl %r13d,%eax - movl 16(%r9),%edx + movl 16(%r9),%ebp + movl %esi,%eax + movl %edx,12(%rsp) movl %r11d,%ecx - xorl %esi,%eax - bswapl %edx + bswapl %ebp + xorl %r13d,%eax roll $5,%ecx - leal 1518500249(%rbp,%rdi,1),%edi andl %r12d,%eax - movl %edx,16(%rsp) + leal 1518500249(%rdx,%rdi,1),%edi addl %ecx,%edi xorl %esi,%eax roll $30,%r12d addl %eax,%edi - movl %r12d,%eax - movl 20(%r9),%ebp + movl 20(%r9),%r14d + movl %r13d,%eax + movl %ebp,16(%rsp) movl %edi,%ecx - xorl %r13d,%eax - bswapl %ebp + bswapl %r14d + xorl %r12d,%eax roll $5,%ecx - leal 1518500249(%rdx,%rsi,1),%esi andl %r11d,%eax - movl %ebp,20(%rsp) + leal 1518500249(%rbp,%rsi,1),%esi addl %ecx,%esi xorl %r13d,%eax roll $30,%r11d addl %eax,%esi - movl %r11d,%eax movl 24(%r9),%edx + movl %r12d,%eax + movl %r14d,20(%rsp) movl %esi,%ecx - xorl %r12d,%eax bswapl %edx + xorl %r11d,%eax roll $5,%ecx - leal 1518500249(%rbp,%r13,1),%r13d andl %edi,%eax - movl %edx,24(%rsp) + leal 1518500249(%r14,%r13,1),%r13d addl %ecx,%r13d xorl %r12d,%eax roll $30,%edi addl %eax,%r13d - movl %edi,%eax movl 28(%r9),%ebp + movl %r11d,%eax + movl %edx,24(%rsp) movl %r13d,%ecx - xorl %r11d,%eax bswapl %ebp + xorl %edi,%eax roll $5,%ecx - leal 1518500249(%rdx,%r12,1),%r12d andl %esi,%eax - movl %ebp,28(%rsp) + leal 1518500249(%rdx,%r12,1),%r12d addl %ecx,%r12d xorl %r11d,%eax roll $30,%esi addl %eax,%r12d - movl %esi,%eax - movl 32(%r9),%edx + movl 32(%r9),%r14d + movl %edi,%eax + movl %ebp,28(%rsp) movl %r12d,%ecx - xorl %edi,%eax - bswapl %edx + bswapl %r14d + xorl %esi,%eax roll $5,%ecx - leal 1518500249(%rbp,%r11,1),%r11d andl %r13d,%eax - movl %edx,32(%rsp) + leal 1518500249(%rbp,%r11,1),%r11d addl %ecx,%r11d xorl %edi,%eax roll $30,%r13d addl %eax,%r11d - movl %r13d,%eax - movl 36(%r9),%ebp + movl 36(%r9),%edx + movl %esi,%eax + movl %r14d,32(%rsp) movl %r11d,%ecx - xorl %esi,%eax - bswapl %ebp + bswapl %edx + xorl %r13d,%eax roll $5,%ecx - leal 1518500249(%rdx,%rdi,1),%edi andl %r12d,%eax - movl %ebp,36(%rsp) + leal 1518500249(%r14,%rdi,1),%edi addl %ecx,%edi xorl %esi,%eax roll $30,%r12d addl %eax,%edi - movl %r12d,%eax - movl 40(%r9),%edx + movl 40(%r9),%ebp + movl %r13d,%eax + movl %edx,36(%rsp) movl %edi,%ecx - xorl %r13d,%eax - bswapl %edx + bswapl %ebp + xorl %r12d,%eax roll $5,%ecx - leal 1518500249(%rbp,%rsi,1),%esi andl %r11d,%eax - movl %edx,40(%rsp) + leal 1518500249(%rdx,%rsi,1),%esi addl %ecx,%esi xorl %r13d,%eax roll $30,%r11d addl %eax,%esi - movl %r11d,%eax - movl 44(%r9),%ebp + movl 44(%r9),%r14d + movl %r12d,%eax + movl %ebp,40(%rsp) movl %esi,%ecx - xorl %r12d,%eax - bswapl %ebp + bswapl %r14d + xorl %r11d,%eax roll $5,%ecx - leal 1518500249(%rdx,%r13,1),%r13d andl %edi,%eax - movl %ebp,44(%rsp) + leal 1518500249(%rbp,%r13,1),%r13d addl %ecx,%r13d xorl %r12d,%eax roll $30,%edi addl %eax,%r13d - movl %edi,%eax movl 48(%r9),%edx + movl %r11d,%eax + movl %r14d,44(%rsp) movl %r13d,%ecx - xorl %r11d,%eax bswapl %edx + xorl %edi,%eax roll $5,%ecx - leal 1518500249(%rbp,%r12,1),%r12d andl %esi,%eax - movl %edx,48(%rsp) + leal 1518500249(%r14,%r12,1),%r12d addl %ecx,%r12d xorl %r11d,%eax roll $30,%esi addl %eax,%r12d - movl %esi,%eax movl 52(%r9),%ebp + movl %edi,%eax + movl %edx,48(%rsp) movl %r12d,%ecx - xorl %edi,%eax bswapl %ebp + xorl %esi,%eax roll $5,%ecx - leal 1518500249(%rdx,%r11,1),%r11d andl %r13d,%eax - movl %ebp,52(%rsp) + leal 1518500249(%rdx,%r11,1),%r11d addl %ecx,%r11d xorl %edi,%eax roll $30,%r13d addl %eax,%r11d - movl %r13d,%eax - movl 56(%r9),%edx + movl 56(%r9),%r14d + movl %esi,%eax + movl %ebp,52(%rsp) movl %r11d,%ecx - xorl %esi,%eax - bswapl %edx + bswapl %r14d + xorl %r13d,%eax roll $5,%ecx - leal 1518500249(%rbp,%rdi,1),%edi andl %r12d,%eax - movl %edx,56(%rsp) + leal 1518500249(%rbp,%rdi,1),%edi addl %ecx,%edi xorl %esi,%eax roll $30,%r12d addl %eax,%edi - movl %r12d,%eax - movl 60(%r9),%ebp + movl 60(%r9),%edx + movl %r13d,%eax + movl %r14d,56(%rsp) movl %edi,%ecx - xorl %r13d,%eax - bswapl %ebp + bswapl %edx + xorl %r12d,%eax roll $5,%ecx - leal 1518500249(%rdx,%rsi,1),%esi andl %r11d,%eax - movl %ebp,60(%rsp) + leal 1518500249(%r14,%rsi,1),%esi addl %ecx,%esi xorl %r13d,%eax roll $30,%r11d addl %eax,%esi - movl 0(%rsp),%edx - movl %r11d,%eax + xorl 0(%rsp),%ebp + movl %r12d,%eax + movl %edx,60(%rsp) movl %esi,%ecx - xorl 8(%rsp),%edx - xorl %r12d,%eax + xorl 8(%rsp),%ebp + xorl %r11d,%eax roll $5,%ecx - xorl 32(%rsp),%edx + xorl 32(%rsp),%ebp andl %edi,%eax - leal 1518500249(%rbp,%r13,1),%r13d - xorl 52(%rsp),%edx + leal 1518500249(%rdx,%r13,1),%r13d + roll $30,%edi xorl %r12d,%eax - roll $1,%edx addl %ecx,%r13d - roll $30,%edi - movl %edx,0(%rsp) + roll $1,%ebp addl %eax,%r13d - movl 4(%rsp),%ebp - movl %edi,%eax + xorl 4(%rsp),%r14d + movl %r11d,%eax + movl %ebp,0(%rsp) movl %r13d,%ecx - xorl 12(%rsp),%ebp - xorl %r11d,%eax + xorl 12(%rsp),%r14d + xorl %edi,%eax roll $5,%ecx - xorl 36(%rsp),%ebp + xorl 36(%rsp),%r14d andl %esi,%eax - leal 1518500249(%rdx,%r12,1),%r12d - xorl 56(%rsp),%ebp + leal 1518500249(%rbp,%r12,1),%r12d + roll $30,%esi xorl %r11d,%eax - roll $1,%ebp addl %ecx,%r12d - roll $30,%esi - movl %ebp,4(%rsp) + roll $1,%r14d addl %eax,%r12d - movl 8(%rsp),%edx - movl %esi,%eax + xorl 8(%rsp),%edx + movl %edi,%eax + movl %r14d,4(%rsp) movl %r12d,%ecx xorl 16(%rsp),%edx - xorl %edi,%eax + xorl %esi,%eax roll $5,%ecx xorl 40(%rsp),%edx andl %r13d,%eax - leal 1518500249(%rbp,%r11,1),%r11d - xorl 60(%rsp),%edx + leal 1518500249(%r14,%r11,1),%r11d + roll $30,%r13d xorl %edi,%eax - roll $1,%edx addl %ecx,%r11d - roll $30,%r13d - movl %edx,8(%rsp) + roll $1,%edx addl %eax,%r11d - movl 12(%rsp),%ebp - movl %r13d,%eax + xorl 12(%rsp),%ebp + movl %esi,%eax + movl %edx,8(%rsp) movl %r11d,%ecx xorl 20(%rsp),%ebp - xorl %esi,%eax + xorl %r13d,%eax roll $5,%ecx xorl 44(%rsp),%ebp andl %r12d,%eax leal 1518500249(%rdx,%rdi,1),%edi - xorl 0(%rsp),%ebp + roll $30,%r12d xorl %esi,%eax - roll $1,%ebp addl %ecx,%edi - roll $30,%r12d - movl %ebp,12(%rsp) + roll $1,%ebp addl %eax,%edi - movl 16(%rsp),%edx - movl %r12d,%eax + xorl 16(%rsp),%r14d + movl %r13d,%eax + movl %ebp,12(%rsp) movl %edi,%ecx - xorl 24(%rsp),%edx - xorl %r13d,%eax + xorl 24(%rsp),%r14d + xorl %r12d,%eax roll $5,%ecx - xorl 48(%rsp),%edx + xorl 48(%rsp),%r14d andl %r11d,%eax leal 1518500249(%rbp,%rsi,1),%esi - xorl 4(%rsp),%edx + roll $30,%r11d xorl %r13d,%eax - roll $1,%edx addl %ecx,%esi - roll $30,%r11d - movl %edx,16(%rsp) + roll $1,%r14d addl %eax,%esi - movl 20(%rsp),%ebp - movl %r11d,%eax + xorl 20(%rsp),%edx + movl %edi,%eax + movl %r14d,16(%rsp) movl %esi,%ecx - xorl 28(%rsp),%ebp - xorl %edi,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r13,1),%r13d - xorl 52(%rsp),%ebp + xorl 28(%rsp),%edx xorl %r12d,%eax + roll $5,%ecx + xorl 52(%rsp),%edx + leal 1859775393(%r14,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 8(%rsp),%ebp roll $30,%edi addl %eax,%r13d - roll $1,%ebp - movl %ebp,20(%rsp) - movl 24(%rsp),%edx - movl %edi,%eax + roll $1,%edx + xorl 24(%rsp),%ebp + movl %esi,%eax + movl %edx,20(%rsp) movl %r13d,%ecx - xorl 32(%rsp),%edx - xorl %esi,%eax - roll $5,%ecx - leal 1859775393(%rbp,%r12,1),%r12d - xorl 56(%rsp),%edx + xorl 32(%rsp),%ebp xorl %r11d,%eax + roll $5,%ecx + xorl 56(%rsp),%ebp + leal 1859775393(%rdx,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 12(%rsp),%edx roll $30,%esi addl %eax,%r12d - roll $1,%edx - movl %edx,24(%rsp) - movl 28(%rsp),%ebp - movl %esi,%eax + roll $1,%ebp + xorl 28(%rsp),%r14d + movl %r13d,%eax + movl %ebp,24(%rsp) movl %r12d,%ecx - xorl 36(%rsp),%ebp - xorl %r13d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r11,1),%r11d - xorl 60(%rsp),%ebp + xorl 36(%rsp),%r14d xorl %edi,%eax + roll $5,%ecx + xorl 60(%rsp),%r14d + leal 1859775393(%rbp,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 16(%rsp),%ebp roll $30,%r13d addl %eax,%r11d - roll $1,%ebp - movl %ebp,28(%rsp) - movl 32(%rsp),%edx - movl %r13d,%eax + roll $1,%r14d + xorl 32(%rsp),%edx + movl %r12d,%eax + movl %r14d,28(%rsp) movl %r11d,%ecx xorl 40(%rsp),%edx - xorl %r12d,%eax + xorl %esi,%eax roll $5,%ecx - leal 1859775393(%rbp,%rdi,1),%edi xorl 0(%rsp),%edx - xorl %esi,%eax + leal 1859775393(%r14,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 20(%rsp),%edx roll $30,%r12d addl %eax,%edi roll $1,%edx + xorl 36(%rsp),%ebp + movl %r11d,%eax movl %edx,32(%rsp) - movl 36(%rsp),%ebp - movl %r12d,%eax movl %edi,%ecx xorl 44(%rsp),%ebp - xorl %r11d,%eax + xorl %r13d,%eax roll $5,%ecx - leal 1859775393(%rdx,%rsi,1),%esi xorl 4(%rsp),%ebp - xorl %r13d,%eax + leal 1859775393(%rdx,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 24(%rsp),%ebp roll $30,%r11d addl %eax,%esi roll $1,%ebp + xorl 40(%rsp),%r14d + movl %edi,%eax movl %ebp,36(%rsp) - movl 40(%rsp),%edx - movl %r11d,%eax movl %esi,%ecx - xorl 48(%rsp),%edx - xorl %edi,%eax + xorl 48(%rsp),%r14d + xorl %r12d,%eax roll $5,%ecx + xorl 8(%rsp),%r14d leal 1859775393(%rbp,%r13,1),%r13d - xorl 8(%rsp),%edx - xorl %r12d,%eax + xorl %r11d,%eax addl %ecx,%r13d - xorl 28(%rsp),%edx roll $30,%edi addl %eax,%r13d - roll $1,%edx - movl %edx,40(%rsp) - movl 44(%rsp),%ebp - movl %edi,%eax + roll $1,%r14d + xorl 44(%rsp),%edx + movl %esi,%eax + movl %r14d,40(%rsp) movl %r13d,%ecx - xorl 52(%rsp),%ebp - xorl %esi,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r12,1),%r12d - xorl 12(%rsp),%ebp + xorl 52(%rsp),%edx xorl %r11d,%eax + roll $5,%ecx + xorl 12(%rsp),%edx + leal 1859775393(%r14,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 32(%rsp),%ebp roll $30,%esi addl %eax,%r12d - roll $1,%ebp - movl %ebp,44(%rsp) - movl 48(%rsp),%edx - movl %esi,%eax + roll $1,%edx + xorl 48(%rsp),%ebp + movl %r13d,%eax + movl %edx,44(%rsp) movl %r12d,%ecx - xorl 56(%rsp),%edx - xorl %r13d,%eax - roll $5,%ecx - leal 1859775393(%rbp,%r11,1),%r11d - xorl 16(%rsp),%edx + xorl 56(%rsp),%ebp xorl %edi,%eax + roll $5,%ecx + xorl 16(%rsp),%ebp + leal 1859775393(%rdx,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 36(%rsp),%edx roll $30,%r13d addl %eax,%r11d - roll $1,%edx - movl %edx,48(%rsp) - movl 52(%rsp),%ebp - movl %r13d,%eax + roll $1,%ebp + xorl 52(%rsp),%r14d + movl %r12d,%eax + movl %ebp,48(%rsp) movl %r11d,%ecx - xorl 60(%rsp),%ebp - xorl %r12d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%rdi,1),%edi - xorl 20(%rsp),%ebp + xorl 60(%rsp),%r14d xorl %esi,%eax + roll $5,%ecx + xorl 20(%rsp),%r14d + leal 1859775393(%rbp,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 40(%rsp),%ebp roll $30,%r12d addl %eax,%edi - roll $1,%ebp - movl %ebp,52(%rsp) - movl 56(%rsp),%edx - movl %r12d,%eax + roll $1,%r14d + xorl 56(%rsp),%edx + movl %r11d,%eax + movl %r14d,52(%rsp) movl %edi,%ecx xorl 0(%rsp),%edx - xorl %r11d,%eax + xorl %r13d,%eax roll $5,%ecx - leal 1859775393(%rbp,%rsi,1),%esi xorl 24(%rsp),%edx - xorl %r13d,%eax + leal 1859775393(%r14,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 44(%rsp),%edx roll $30,%r11d addl %eax,%esi roll $1,%edx + xorl 60(%rsp),%ebp + movl %edi,%eax movl %edx,56(%rsp) - movl 60(%rsp),%ebp - movl %r11d,%eax movl %esi,%ecx xorl 4(%rsp),%ebp - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal 1859775393(%rdx,%r13,1),%r13d xorl 28(%rsp),%ebp - xorl %r12d,%eax + leal 1859775393(%rdx,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 48(%rsp),%ebp roll $30,%edi addl %eax,%r13d roll $1,%ebp + xorl 0(%rsp),%r14d + movl %esi,%eax movl %ebp,60(%rsp) - movl 0(%rsp),%edx - movl %edi,%eax movl %r13d,%ecx - xorl 8(%rsp),%edx - xorl %esi,%eax + xorl 8(%rsp),%r14d + xorl %r11d,%eax roll $5,%ecx + xorl 32(%rsp),%r14d leal 1859775393(%rbp,%r12,1),%r12d - xorl 32(%rsp),%edx - xorl %r11d,%eax + xorl %edi,%eax addl %ecx,%r12d - xorl 52(%rsp),%edx roll $30,%esi addl %eax,%r12d - roll $1,%edx - movl %edx,0(%rsp) - movl 4(%rsp),%ebp - movl %esi,%eax + roll $1,%r14d + xorl 4(%rsp),%edx + movl %r13d,%eax + movl %r14d,0(%rsp) movl %r12d,%ecx - xorl 12(%rsp),%ebp - xorl %r13d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r11,1),%r11d - xorl 36(%rsp),%ebp + xorl 12(%rsp),%edx xorl %edi,%eax + roll $5,%ecx + xorl 36(%rsp),%edx + leal 1859775393(%r14,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 56(%rsp),%ebp roll $30,%r13d addl %eax,%r11d - roll $1,%ebp - movl %ebp,4(%rsp) - movl 8(%rsp),%edx - movl %r13d,%eax + roll $1,%edx + xorl 8(%rsp),%ebp + movl %r12d,%eax + movl %edx,4(%rsp) movl %r11d,%ecx - xorl 16(%rsp),%edx - xorl %r12d,%eax - roll $5,%ecx - leal 1859775393(%rbp,%rdi,1),%edi - xorl 40(%rsp),%edx + xorl 16(%rsp),%ebp xorl %esi,%eax + roll $5,%ecx + xorl 40(%rsp),%ebp + leal 1859775393(%rdx,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 60(%rsp),%edx roll $30,%r12d addl %eax,%edi - roll $1,%edx - movl %edx,8(%rsp) - movl 12(%rsp),%ebp - movl %r12d,%eax + roll $1,%ebp + xorl 12(%rsp),%r14d + movl %r11d,%eax + movl %ebp,8(%rsp) movl %edi,%ecx - xorl 20(%rsp),%ebp - xorl %r11d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%rsi,1),%esi - xorl 44(%rsp),%ebp + xorl 20(%rsp),%r14d xorl %r13d,%eax + roll $5,%ecx + xorl 44(%rsp),%r14d + leal 1859775393(%rbp,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 0(%rsp),%ebp roll $30,%r11d addl %eax,%esi - roll $1,%ebp - movl %ebp,12(%rsp) - movl 16(%rsp),%edx - movl %r11d,%eax + roll $1,%r14d + xorl 16(%rsp),%edx + movl %edi,%eax + movl %r14d,12(%rsp) movl %esi,%ecx xorl 24(%rsp),%edx - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal 1859775393(%rbp,%r13,1),%r13d xorl 48(%rsp),%edx - xorl %r12d,%eax + leal 1859775393(%r14,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 4(%rsp),%edx roll $30,%edi addl %eax,%r13d roll $1,%edx + xorl 20(%rsp),%ebp + movl %esi,%eax movl %edx,16(%rsp) - movl 20(%rsp),%ebp - movl %edi,%eax movl %r13d,%ecx xorl 28(%rsp),%ebp - xorl %esi,%eax + xorl %r11d,%eax roll $5,%ecx - leal 1859775393(%rdx,%r12,1),%r12d xorl 52(%rsp),%ebp - xorl %r11d,%eax + leal 1859775393(%rdx,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 8(%rsp),%ebp roll $30,%esi addl %eax,%r12d roll $1,%ebp + xorl 24(%rsp),%r14d + movl %r13d,%eax movl %ebp,20(%rsp) - movl 24(%rsp),%edx - movl %esi,%eax movl %r12d,%ecx - xorl 32(%rsp),%edx - xorl %r13d,%eax + xorl 32(%rsp),%r14d + xorl %edi,%eax roll $5,%ecx + xorl 56(%rsp),%r14d leal 1859775393(%rbp,%r11,1),%r11d - xorl 56(%rsp),%edx - xorl %edi,%eax + xorl %esi,%eax addl %ecx,%r11d - xorl 12(%rsp),%edx roll $30,%r13d addl %eax,%r11d - roll $1,%edx - movl %edx,24(%rsp) - movl 28(%rsp),%ebp - movl %r13d,%eax + roll $1,%r14d + xorl 28(%rsp),%edx + movl %r12d,%eax + movl %r14d,24(%rsp) movl %r11d,%ecx - xorl 36(%rsp),%ebp - xorl %r12d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%rdi,1),%edi - xorl 60(%rsp),%ebp + xorl 36(%rsp),%edx xorl %esi,%eax + roll $5,%ecx + xorl 60(%rsp),%edx + leal 1859775393(%r14,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 16(%rsp),%ebp roll $30,%r12d addl %eax,%edi - roll $1,%ebp - movl %ebp,28(%rsp) - movl 32(%rsp),%edx - movl %r12d,%eax + roll $1,%edx + xorl 32(%rsp),%ebp + movl %r11d,%eax + movl %edx,28(%rsp) movl %edi,%ecx - xorl 40(%rsp),%edx - xorl %r11d,%eax - roll $5,%ecx - leal 1859775393(%rbp,%rsi,1),%esi - xorl 0(%rsp),%edx + xorl 40(%rsp),%ebp xorl %r13d,%eax + roll $5,%ecx + xorl 0(%rsp),%ebp + leal 1859775393(%rdx,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 20(%rsp),%edx roll $30,%r11d addl %eax,%esi - roll $1,%edx - movl %edx,32(%rsp) - movl 36(%rsp),%ebp - movl %r11d,%eax - movl %r11d,%ebx - xorl 44(%rsp),%ebp - andl %r12d,%eax + roll $1,%ebp + xorl 36(%rsp),%r14d + movl %r12d,%eax + movl %ebp,32(%rsp) + movl %r12d,%ebx + xorl 44(%rsp),%r14d + andl %r11d,%eax movl %esi,%ecx - xorl 4(%rsp),%ebp - xorl %r12d,%ebx - leal -1894007588(%rdx,%r13,1),%r13d + xorl 4(%rsp),%r14d + leal -1894007588(%rbp,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 24(%rsp),%ebp addl %eax,%r13d + roll $1,%r14d andl %edi,%ebx - roll $1,%ebp - addl %ebx,%r13d - roll $30,%edi - movl %ebp,36(%rsp) addl %ecx,%r13d - movl 40(%rsp),%edx - movl %edi,%eax - movl %edi,%ebx + roll $30,%edi + addl %ebx,%r13d + xorl 40(%rsp),%edx + movl %r11d,%eax + movl %r14d,36(%rsp) + movl %r11d,%ebx xorl 48(%rsp),%edx - andl %r11d,%eax + andl %edi,%eax movl %r13d,%ecx xorl 8(%rsp),%edx - xorl %r11d,%ebx - leal -1894007588(%rbp,%r12,1),%r12d + leal -1894007588(%r14,%r12,1),%r12d + xorl %edi,%ebx roll $5,%ecx - xorl 28(%rsp),%edx addl %eax,%r12d - andl %esi,%ebx roll $1,%edx - addl %ebx,%r12d + andl %esi,%ebx + addl %ecx,%r12d roll $30,%esi + addl %ebx,%r12d + xorl 44(%rsp),%ebp + movl %edi,%eax movl %edx,40(%rsp) - addl %ecx,%r12d - movl 44(%rsp),%ebp - movl %esi,%eax - movl %esi,%ebx + movl %edi,%ebx xorl 52(%rsp),%ebp - andl %edi,%eax + andl %esi,%eax movl %r12d,%ecx xorl 12(%rsp),%ebp - xorl %edi,%ebx leal -1894007588(%rdx,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 32(%rsp),%ebp addl %eax,%r11d - andl %r13d,%ebx roll $1,%ebp - addl %ebx,%r11d + andl %r13d,%ebx + addl %ecx,%r11d roll $30,%r13d + addl %ebx,%r11d + xorl 48(%rsp),%r14d + movl %esi,%eax movl %ebp,44(%rsp) - addl %ecx,%r11d - movl 48(%rsp),%edx - movl %r13d,%eax - movl %r13d,%ebx - xorl 56(%rsp),%edx - andl %esi,%eax + movl %esi,%ebx + xorl 56(%rsp),%r14d + andl %r13d,%eax movl %r11d,%ecx - xorl 16(%rsp),%edx - xorl %esi,%ebx + xorl 16(%rsp),%r14d leal -1894007588(%rbp,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 36(%rsp),%edx addl %eax,%edi + roll $1,%r14d andl %r12d,%ebx - roll $1,%edx - addl %ebx,%edi - roll $30,%r12d - movl %edx,48(%rsp) addl %ecx,%edi - movl 52(%rsp),%ebp - movl %r12d,%eax - movl %r12d,%ebx - xorl 60(%rsp),%ebp - andl %r13d,%eax + roll $30,%r12d + addl %ebx,%edi + xorl 52(%rsp),%edx + movl %r13d,%eax + movl %r14d,48(%rsp) + movl %r13d,%ebx + xorl 60(%rsp),%edx + andl %r12d,%eax movl %edi,%ecx - xorl 20(%rsp),%ebp - xorl %r13d,%ebx - leal -1894007588(%rdx,%rsi,1),%esi + xorl 20(%rsp),%edx + leal -1894007588(%r14,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 40(%rsp),%ebp addl %eax,%esi + roll $1,%edx andl %r11d,%ebx - roll $1,%ebp - addl %ebx,%esi - roll $30,%r11d - movl %ebp,52(%rsp) addl %ecx,%esi - movl 56(%rsp),%edx - movl %r11d,%eax - movl %r11d,%ebx - xorl 0(%rsp),%edx - andl %r12d,%eax + roll $30,%r11d + addl %ebx,%esi + xorl 56(%rsp),%ebp + movl %r12d,%eax + movl %edx,52(%rsp) + movl %r12d,%ebx + xorl 0(%rsp),%ebp + andl %r11d,%eax movl %esi,%ecx - xorl 24(%rsp),%edx - xorl %r12d,%ebx - leal -1894007588(%rbp,%r13,1),%r13d + xorl 24(%rsp),%ebp + leal -1894007588(%rdx,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 44(%rsp),%edx addl %eax,%r13d + roll $1,%ebp andl %edi,%ebx - roll $1,%edx - addl %ebx,%r13d - roll $30,%edi - movl %edx,56(%rsp) addl %ecx,%r13d - movl 60(%rsp),%ebp - movl %edi,%eax - movl %edi,%ebx - xorl 4(%rsp),%ebp - andl %r11d,%eax + roll $30,%edi + addl %ebx,%r13d + xorl 60(%rsp),%r14d + movl %r11d,%eax + movl %ebp,56(%rsp) + movl %r11d,%ebx + xorl 4(%rsp),%r14d + andl %edi,%eax movl %r13d,%ecx - xorl 28(%rsp),%ebp - xorl %r11d,%ebx - leal -1894007588(%rdx,%r12,1),%r12d + xorl 28(%rsp),%r14d + leal -1894007588(%rbp,%r12,1),%r12d + xorl %edi,%ebx roll $5,%ecx - xorl 48(%rsp),%ebp addl %eax,%r12d + roll $1,%r14d andl %esi,%ebx - roll $1,%ebp - addl %ebx,%r12d - roll $30,%esi - movl %ebp,60(%rsp) addl %ecx,%r12d - movl 0(%rsp),%edx - movl %esi,%eax - movl %esi,%ebx + roll $30,%esi + addl %ebx,%r12d + xorl 0(%rsp),%edx + movl %edi,%eax + movl %r14d,60(%rsp) + movl %edi,%ebx xorl 8(%rsp),%edx - andl %edi,%eax + andl %esi,%eax movl %r12d,%ecx xorl 32(%rsp),%edx - xorl %edi,%ebx - leal -1894007588(%rbp,%r11,1),%r11d + leal -1894007588(%r14,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 52(%rsp),%edx addl %eax,%r11d - andl %r13d,%ebx roll $1,%edx - addl %ebx,%r11d + andl %r13d,%ebx + addl %ecx,%r11d roll $30,%r13d + addl %ebx,%r11d + xorl 4(%rsp),%ebp + movl %esi,%eax movl %edx,0(%rsp) - addl %ecx,%r11d - movl 4(%rsp),%ebp - movl %r13d,%eax - movl %r13d,%ebx + movl %esi,%ebx xorl 12(%rsp),%ebp - andl %esi,%eax + andl %r13d,%eax movl %r11d,%ecx xorl 36(%rsp),%ebp - xorl %esi,%ebx leal -1894007588(%rdx,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 56(%rsp),%ebp addl %eax,%edi - andl %r12d,%ebx roll $1,%ebp - addl %ebx,%edi + andl %r12d,%ebx + addl %ecx,%edi roll $30,%r12d + addl %ebx,%edi + xorl 8(%rsp),%r14d + movl %r13d,%eax movl %ebp,4(%rsp) - addl %ecx,%edi - movl 8(%rsp),%edx - movl %r12d,%eax - movl %r12d,%ebx - xorl 16(%rsp),%edx - andl %r13d,%eax + movl %r13d,%ebx + xorl 16(%rsp),%r14d + andl %r12d,%eax movl %edi,%ecx - xorl 40(%rsp),%edx - xorl %r13d,%ebx + xorl 40(%rsp),%r14d leal -1894007588(%rbp,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 60(%rsp),%edx addl %eax,%esi + roll $1,%r14d andl %r11d,%ebx - roll $1,%edx - addl %ebx,%esi - roll $30,%r11d - movl %edx,8(%rsp) addl %ecx,%esi - movl 12(%rsp),%ebp - movl %r11d,%eax - movl %r11d,%ebx - xorl 20(%rsp),%ebp - andl %r12d,%eax + roll $30,%r11d + addl %ebx,%esi + xorl 12(%rsp),%edx + movl %r12d,%eax + movl %r14d,8(%rsp) + movl %r12d,%ebx + xorl 20(%rsp),%edx + andl %r11d,%eax movl %esi,%ecx - xorl 44(%rsp),%ebp - xorl %r12d,%ebx - leal -1894007588(%rdx,%r13,1),%r13d + xorl 44(%rsp),%edx + leal -1894007588(%r14,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 0(%rsp),%ebp addl %eax,%r13d + roll $1,%edx andl %edi,%ebx - roll $1,%ebp - addl %ebx,%r13d - roll $30,%edi - movl %ebp,12(%rsp) addl %ecx,%r13d - movl 16(%rsp),%edx - movl %edi,%eax - movl %edi,%ebx - xorl 24(%rsp),%edx - andl %r11d,%eax + roll $30,%edi + addl %ebx,%r13d + xorl 16(%rsp),%ebp + movl %r11d,%eax + movl %edx,12(%rsp) + movl %r11d,%ebx + xorl 24(%rsp),%ebp + andl %edi,%eax movl %r13d,%ecx - xorl 48(%rsp),%edx - xorl %r11d,%ebx - leal -1894007588(%rbp,%r12,1),%r12d + xorl 48(%rsp),%ebp + leal -1894007588(%rdx,%r12,1),%r12d + xorl %edi,%ebx roll $5,%ecx - xorl 4(%rsp),%edx addl %eax,%r12d + roll $1,%ebp andl %esi,%ebx - roll $1,%edx - addl %ebx,%r12d - roll $30,%esi - movl %edx,16(%rsp) addl %ecx,%r12d - movl 20(%rsp),%ebp - movl %esi,%eax - movl %esi,%ebx - xorl 28(%rsp),%ebp - andl %edi,%eax + roll $30,%esi + addl %ebx,%r12d + xorl 20(%rsp),%r14d + movl %edi,%eax + movl %ebp,16(%rsp) + movl %edi,%ebx + xorl 28(%rsp),%r14d + andl %esi,%eax movl %r12d,%ecx - xorl 52(%rsp),%ebp - xorl %edi,%ebx - leal -1894007588(%rdx,%r11,1),%r11d + xorl 52(%rsp),%r14d + leal -1894007588(%rbp,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 8(%rsp),%ebp addl %eax,%r11d + roll $1,%r14d andl %r13d,%ebx - roll $1,%ebp - addl %ebx,%r11d - roll $30,%r13d - movl %ebp,20(%rsp) addl %ecx,%r11d - movl 24(%rsp),%edx - movl %r13d,%eax - movl %r13d,%ebx + roll $30,%r13d + addl %ebx,%r11d + xorl 24(%rsp),%edx + movl %esi,%eax + movl %r14d,20(%rsp) + movl %esi,%ebx xorl 32(%rsp),%edx - andl %esi,%eax + andl %r13d,%eax movl %r11d,%ecx xorl 56(%rsp),%edx - xorl %esi,%ebx - leal -1894007588(%rbp,%rdi,1),%edi + leal -1894007588(%r14,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 12(%rsp),%edx addl %eax,%edi - andl %r12d,%ebx roll $1,%edx - addl %ebx,%edi + andl %r12d,%ebx + addl %ecx,%edi roll $30,%r12d + addl %ebx,%edi + xorl 28(%rsp),%ebp + movl %r13d,%eax movl %edx,24(%rsp) - addl %ecx,%edi - movl 28(%rsp),%ebp - movl %r12d,%eax - movl %r12d,%ebx + movl %r13d,%ebx xorl 36(%rsp),%ebp - andl %r13d,%eax + andl %r12d,%eax movl %edi,%ecx xorl 60(%rsp),%ebp - xorl %r13d,%ebx leal -1894007588(%rdx,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 16(%rsp),%ebp addl %eax,%esi - andl %r11d,%ebx roll $1,%ebp - addl %ebx,%esi + andl %r11d,%ebx + addl %ecx,%esi roll $30,%r11d + addl %ebx,%esi + xorl 32(%rsp),%r14d + movl %r12d,%eax movl %ebp,28(%rsp) - addl %ecx,%esi - movl 32(%rsp),%edx - movl %r11d,%eax - movl %r11d,%ebx - xorl 40(%rsp),%edx - andl %r12d,%eax + movl %r12d,%ebx + xorl 40(%rsp),%r14d + andl %r11d,%eax movl %esi,%ecx - xorl 0(%rsp),%edx - xorl %r12d,%ebx + xorl 0(%rsp),%r14d leal -1894007588(%rbp,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 20(%rsp),%edx addl %eax,%r13d + roll $1,%r14d andl %edi,%ebx - roll $1,%edx - addl %ebx,%r13d - roll $30,%edi - movl %edx,32(%rsp) addl %ecx,%r13d - movl 36(%rsp),%ebp - movl %edi,%eax - movl %edi,%ebx - xorl 44(%rsp),%ebp - andl %r11d,%eax + roll $30,%edi + addl %ebx,%r13d + xorl 36(%rsp),%edx + movl %r11d,%eax + movl %r14d,32(%rsp) + movl %r11d,%ebx + xorl 44(%rsp),%edx + andl %edi,%eax movl %r13d,%ecx - xorl 4(%rsp),%ebp - xorl %r11d,%ebx - leal -1894007588(%rdx,%r12,1),%r12d + xorl 4(%rsp),%edx + leal -1894007588(%r14,%r12,1),%r12d + xorl %edi,%ebx roll $5,%ecx - xorl 24(%rsp),%ebp addl %eax,%r12d + roll $1,%edx andl %esi,%ebx - roll $1,%ebp - addl %ebx,%r12d - roll $30,%esi - movl %ebp,36(%rsp) addl %ecx,%r12d - movl 40(%rsp),%edx - movl %esi,%eax - movl %esi,%ebx - xorl 48(%rsp),%edx - andl %edi,%eax + roll $30,%esi + addl %ebx,%r12d + xorl 40(%rsp),%ebp + movl %edi,%eax + movl %edx,36(%rsp) + movl %edi,%ebx + xorl 48(%rsp),%ebp + andl %esi,%eax movl %r12d,%ecx - xorl 8(%rsp),%edx - xorl %edi,%ebx - leal -1894007588(%rbp,%r11,1),%r11d + xorl 8(%rsp),%ebp + leal -1894007588(%rdx,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 28(%rsp),%edx addl %eax,%r11d + roll $1,%ebp andl %r13d,%ebx - roll $1,%edx - addl %ebx,%r11d - roll $30,%r13d - movl %edx,40(%rsp) addl %ecx,%r11d - movl 44(%rsp),%ebp - movl %r13d,%eax - movl %r13d,%ebx - xorl 52(%rsp),%ebp - andl %esi,%eax + roll $30,%r13d + addl %ebx,%r11d + xorl 44(%rsp),%r14d + movl %esi,%eax + movl %ebp,40(%rsp) + movl %esi,%ebx + xorl 52(%rsp),%r14d + andl %r13d,%eax movl %r11d,%ecx - xorl 12(%rsp),%ebp - xorl %esi,%ebx - leal -1894007588(%rdx,%rdi,1),%edi + xorl 12(%rsp),%r14d + leal -1894007588(%rbp,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 32(%rsp),%ebp addl %eax,%edi + roll $1,%r14d andl %r12d,%ebx - roll $1,%ebp - addl %ebx,%edi - roll $30,%r12d - movl %ebp,44(%rsp) addl %ecx,%edi - movl 48(%rsp),%edx - movl %r12d,%eax - movl %r12d,%ebx + roll $30,%r12d + addl %ebx,%edi + xorl 48(%rsp),%edx + movl %r13d,%eax + movl %r14d,44(%rsp) + movl %r13d,%ebx xorl 56(%rsp),%edx - andl %r13d,%eax + andl %r12d,%eax movl %edi,%ecx xorl 16(%rsp),%edx - xorl %r13d,%ebx - leal -1894007588(%rbp,%rsi,1),%esi + leal -1894007588(%r14,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 36(%rsp),%edx addl %eax,%esi - andl %r11d,%ebx roll $1,%edx - addl %ebx,%esi + andl %r11d,%ebx + addl %ecx,%esi roll $30,%r11d + addl %ebx,%esi + xorl 52(%rsp),%ebp + movl %edi,%eax movl %edx,48(%rsp) - addl %ecx,%esi - movl 52(%rsp),%ebp - movl %r11d,%eax movl %esi,%ecx xorl 60(%rsp),%ebp - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal -899497514(%rdx,%r13,1),%r13d xorl 20(%rsp),%ebp - xorl %r12d,%eax + leal -899497514(%rdx,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 40(%rsp),%ebp roll $30,%edi addl %eax,%r13d roll $1,%ebp + xorl 56(%rsp),%r14d + movl %esi,%eax movl %ebp,52(%rsp) - movl 56(%rsp),%edx - movl %edi,%eax movl %r13d,%ecx - xorl 0(%rsp),%edx - xorl %esi,%eax + xorl 0(%rsp),%r14d + xorl %r11d,%eax roll $5,%ecx + xorl 24(%rsp),%r14d leal -899497514(%rbp,%r12,1),%r12d - xorl 24(%rsp),%edx - xorl %r11d,%eax + xorl %edi,%eax addl %ecx,%r12d - xorl 44(%rsp),%edx roll $30,%esi addl %eax,%r12d - roll $1,%edx - movl %edx,56(%rsp) - movl 60(%rsp),%ebp - movl %esi,%eax + roll $1,%r14d + xorl 60(%rsp),%edx + movl %r13d,%eax + movl %r14d,56(%rsp) movl %r12d,%ecx - xorl 4(%rsp),%ebp - xorl %r13d,%eax - roll $5,%ecx - leal -899497514(%rdx,%r11,1),%r11d - xorl 28(%rsp),%ebp + xorl 4(%rsp),%edx xorl %edi,%eax + roll $5,%ecx + xorl 28(%rsp),%edx + leal -899497514(%r14,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 48(%rsp),%ebp roll $30,%r13d addl %eax,%r11d - roll $1,%ebp - movl %ebp,60(%rsp) - movl 0(%rsp),%edx - movl %r13d,%eax + roll $1,%edx + xorl 0(%rsp),%ebp + movl %r12d,%eax + movl %edx,60(%rsp) movl %r11d,%ecx - xorl 8(%rsp),%edx - xorl %r12d,%eax - roll $5,%ecx - leal -899497514(%rbp,%rdi,1),%edi - xorl 32(%rsp),%edx + xorl 8(%rsp),%ebp xorl %esi,%eax + roll $5,%ecx + xorl 32(%rsp),%ebp + leal -899497514(%rdx,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 52(%rsp),%edx roll $30,%r12d addl %eax,%edi - roll $1,%edx - movl %edx,0(%rsp) - movl 4(%rsp),%ebp - movl %r12d,%eax + roll $1,%ebp + xorl 4(%rsp),%r14d + movl %r11d,%eax + movl %ebp,0(%rsp) movl %edi,%ecx - xorl 12(%rsp),%ebp - xorl %r11d,%eax - roll $5,%ecx - leal -899497514(%rdx,%rsi,1),%esi - xorl 36(%rsp),%ebp + xorl 12(%rsp),%r14d xorl %r13d,%eax + roll $5,%ecx + xorl 36(%rsp),%r14d + leal -899497514(%rbp,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 56(%rsp),%ebp roll $30,%r11d addl %eax,%esi - roll $1,%ebp - movl %ebp,4(%rsp) - movl 8(%rsp),%edx - movl %r11d,%eax + roll $1,%r14d + xorl 8(%rsp),%edx + movl %edi,%eax + movl %r14d,4(%rsp) movl %esi,%ecx xorl 16(%rsp),%edx - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal -899497514(%rbp,%r13,1),%r13d xorl 40(%rsp),%edx - xorl %r12d,%eax + leal -899497514(%r14,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 60(%rsp),%edx roll $30,%edi addl %eax,%r13d roll $1,%edx + xorl 12(%rsp),%ebp + movl %esi,%eax movl %edx,8(%rsp) - movl 12(%rsp),%ebp - movl %edi,%eax movl %r13d,%ecx xorl 20(%rsp),%ebp - xorl %esi,%eax + xorl %r11d,%eax roll $5,%ecx - leal -899497514(%rdx,%r12,1),%r12d xorl 44(%rsp),%ebp - xorl %r11d,%eax + leal -899497514(%rdx,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 0(%rsp),%ebp roll $30,%esi addl %eax,%r12d roll $1,%ebp + xorl 16(%rsp),%r14d + movl %r13d,%eax movl %ebp,12(%rsp) - movl 16(%rsp),%edx - movl %esi,%eax movl %r12d,%ecx - xorl 24(%rsp),%edx - xorl %r13d,%eax + xorl 24(%rsp),%r14d + xorl %edi,%eax roll $5,%ecx + xorl 48(%rsp),%r14d leal -899497514(%rbp,%r11,1),%r11d - xorl 48(%rsp),%edx - xorl %edi,%eax + xorl %esi,%eax addl %ecx,%r11d - xorl 4(%rsp),%edx roll $30,%r13d addl %eax,%r11d - roll $1,%edx - movl %edx,16(%rsp) - movl 20(%rsp),%ebp - movl %r13d,%eax + roll $1,%r14d + xorl 20(%rsp),%edx + movl %r12d,%eax + movl %r14d,16(%rsp) movl %r11d,%ecx - xorl 28(%rsp),%ebp - xorl %r12d,%eax - roll $5,%ecx - leal -899497514(%rdx,%rdi,1),%edi - xorl 52(%rsp),%ebp + xorl 28(%rsp),%edx xorl %esi,%eax + roll $5,%ecx + xorl 52(%rsp),%edx + leal -899497514(%r14,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 8(%rsp),%ebp roll $30,%r12d addl %eax,%edi - roll $1,%ebp - movl %ebp,20(%rsp) - movl 24(%rsp),%edx - movl %r12d,%eax + roll $1,%edx + xorl 24(%rsp),%ebp + movl %r11d,%eax + movl %edx,20(%rsp) movl %edi,%ecx - xorl 32(%rsp),%edx - xorl %r11d,%eax - roll $5,%ecx - leal -899497514(%rbp,%rsi,1),%esi - xorl 56(%rsp),%edx + xorl 32(%rsp),%ebp xorl %r13d,%eax + roll $5,%ecx + xorl 56(%rsp),%ebp + leal -899497514(%rdx,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 12(%rsp),%edx roll $30,%r11d addl %eax,%esi - roll $1,%edx - movl %edx,24(%rsp) - movl 28(%rsp),%ebp - movl %r11d,%eax + roll $1,%ebp + xorl 28(%rsp),%r14d + movl %edi,%eax + movl %ebp,24(%rsp) movl %esi,%ecx - xorl 36(%rsp),%ebp - xorl %edi,%eax - roll $5,%ecx - leal -899497514(%rdx,%r13,1),%r13d - xorl 60(%rsp),%ebp + xorl 36(%rsp),%r14d xorl %r12d,%eax + roll $5,%ecx + xorl 60(%rsp),%r14d + leal -899497514(%rbp,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 16(%rsp),%ebp roll $30,%edi addl %eax,%r13d - roll $1,%ebp - movl %ebp,28(%rsp) - movl 32(%rsp),%edx - movl %edi,%eax + roll $1,%r14d + xorl 32(%rsp),%edx + movl %esi,%eax + movl %r14d,28(%rsp) movl %r13d,%ecx xorl 40(%rsp),%edx - xorl %esi,%eax + xorl %r11d,%eax roll $5,%ecx - leal -899497514(%rbp,%r12,1),%r12d xorl 0(%rsp),%edx - xorl %r11d,%eax + leal -899497514(%r14,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 20(%rsp),%edx roll $30,%esi addl %eax,%r12d roll $1,%edx - movl %edx,32(%rsp) - movl 36(%rsp),%ebp - movl %esi,%eax + xorl 36(%rsp),%ebp + movl %r13d,%eax + movl %r12d,%ecx xorl 44(%rsp),%ebp - xorl %r13d,%eax + xorl %edi,%eax roll $5,%ecx - leal -899497514(%rdx,%r11,1),%r11d xorl 4(%rsp),%ebp - xorl %edi,%eax + leal -899497514(%rdx,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 24(%rsp),%ebp roll $30,%r13d addl %eax,%r11d roll $1,%ebp - movl %ebp,36(%rsp) - movl 40(%rsp),%edx - movl %r13d,%eax + xorl 40(%rsp),%r14d + movl %r12d,%eax + movl %r11d,%ecx - xorl 48(%rsp),%edx - xorl %r12d,%eax + xorl 48(%rsp),%r14d + xorl %esi,%eax roll $5,%ecx + xorl 8(%rsp),%r14d leal -899497514(%rbp,%rdi,1),%edi - xorl 8(%rsp),%edx - xorl %esi,%eax + xorl %r13d,%eax addl %ecx,%edi - xorl 28(%rsp),%edx roll $30,%r12d addl %eax,%edi - roll $1,%edx - movl %edx,40(%rsp) - movl 44(%rsp),%ebp - movl %r12d,%eax + roll $1,%r14d + xorl 44(%rsp),%edx + movl %r11d,%eax + movl %edi,%ecx - xorl 52(%rsp),%ebp - xorl %r11d,%eax + xorl 52(%rsp),%edx + xorl %r13d,%eax roll $5,%ecx - leal -899497514(%rdx,%rsi,1),%esi - xorl 12(%rsp),%ebp - xorl %r13d,%eax + xorl 12(%rsp),%edx + leal -899497514(%r14,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 32(%rsp),%ebp roll $30,%r11d addl %eax,%esi - roll $1,%ebp - movl %ebp,44(%rsp) - movl 48(%rsp),%edx - movl %r11d,%eax + roll $1,%edx + xorl 48(%rsp),%ebp + movl %edi,%eax + movl %esi,%ecx - xorl 56(%rsp),%edx - xorl %edi,%eax - roll $5,%ecx - leal -899497514(%rbp,%r13,1),%r13d - xorl 16(%rsp),%edx + xorl 56(%rsp),%ebp xorl %r12d,%eax + roll $5,%ecx + xorl 16(%rsp),%ebp + leal -899497514(%rdx,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 36(%rsp),%edx roll $30,%edi addl %eax,%r13d - roll $1,%edx - movl %edx,48(%rsp) - movl 52(%rsp),%ebp - movl %edi,%eax + roll $1,%ebp + xorl 52(%rsp),%r14d + movl %esi,%eax + movl %r13d,%ecx - xorl 60(%rsp),%ebp - xorl %esi,%eax - roll $5,%ecx - leal -899497514(%rdx,%r12,1),%r12d - xorl 20(%rsp),%ebp + xorl 60(%rsp),%r14d xorl %r11d,%eax + roll $5,%ecx + xorl 20(%rsp),%r14d + leal -899497514(%rbp,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 40(%rsp),%ebp roll $30,%esi addl %eax,%r12d - roll $1,%ebp - movl 56(%rsp),%edx - movl %esi,%eax + roll $1,%r14d + xorl 56(%rsp),%edx + movl %r13d,%eax + movl %r12d,%ecx xorl 0(%rsp),%edx - xorl %r13d,%eax + xorl %edi,%eax roll $5,%ecx - leal -899497514(%rbp,%r11,1),%r11d xorl 24(%rsp),%edx - xorl %edi,%eax + leal -899497514(%r14,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 44(%rsp),%edx roll $30,%r13d addl %eax,%r11d roll $1,%edx - movl 60(%rsp),%ebp - movl %r13d,%eax + xorl 60(%rsp),%ebp + movl %r12d,%eax + movl %r11d,%ecx xorl 4(%rsp),%ebp - xorl %r12d,%eax + xorl %esi,%eax roll $5,%ecx - leal -899497514(%rdx,%rdi,1),%edi xorl 28(%rsp),%ebp - xorl %esi,%eax + leal -899497514(%rdx,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 48(%rsp),%ebp roll $30,%r12d addl %eax,%edi roll $1,%ebp - movl %r12d,%eax + movl %r11d,%eax movl %edi,%ecx - xorl %r11d,%eax + xorl %r13d,%eax leal -899497514(%rbp,%rsi,1),%esi roll $5,%ecx - xorl %r13d,%eax + xorl %r12d,%eax addl %ecx,%esi roll $30,%r11d addl %eax,%esi @@ -1327,16 +1285,216 @@ sha1_block_data_order: jnz .Lloop movq 64(%rsp),%rsi - movq (%rsi),%r13 - movq 8(%rsi),%r12 - movq 16(%rsi),%rbp - movq 24(%rsi),%rbx - leaq 32(%rsi),%rsp + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + .Lepilogue: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 + .LSEH_end_sha1_block_data_order: +.def sha1_block_data_order_shaext; .scl 3; .type 32; .endef +.p2align 5 +sha1_block_data_order_shaext: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_sha1_block_data_order_shaext: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + +_shaext_shortcut: + + leaq -72(%rsp),%rsp + movaps %xmm6,-8-64(%rax) + movaps %xmm7,-8-48(%rax) + movaps %xmm8,-8-32(%rax) + movaps %xmm9,-8-16(%rax) +.Lprologue_shaext: + movdqu (%rdi),%xmm0 + movd 16(%rdi),%xmm1 + movdqa K_XX_XX+160(%rip),%xmm3 + + movdqu (%rsi),%xmm4 + pshufd $27,%xmm0,%xmm0 + movdqu 16(%rsi),%xmm5 + pshufd $27,%xmm1,%xmm1 + movdqu 32(%rsi),%xmm6 +.byte 102,15,56,0,227 + movdqu 48(%rsi),%xmm7 +.byte 102,15,56,0,235 +.byte 102,15,56,0,243 + movdqa %xmm1,%xmm9 +.byte 102,15,56,0,251 + jmp .Loop_shaext + +.p2align 4 +.Loop_shaext: + decq %rdx + leaq 64(%rsi),%r8 + paddd %xmm4,%xmm1 + cmovneq %r8,%rsi + movdqa %xmm0,%xmm8 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,0 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,0 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,0 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,0 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,0 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,1 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,1 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,1 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,1 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,1 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,2 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,2 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,2 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,2 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,2 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,3 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 + movdqu (%rsi),%xmm4 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,3 +.byte 15,56,200,213 + movdqu 16(%rsi),%xmm5 +.byte 102,15,56,0,227 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,3 +.byte 15,56,200,206 + movdqu 32(%rsi),%xmm6 +.byte 102,15,56,0,235 + + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,3 +.byte 15,56,200,215 + movdqu 48(%rsi),%xmm7 +.byte 102,15,56,0,243 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,3 +.byte 65,15,56,200,201 +.byte 102,15,56,0,251 + + paddd %xmm8,%xmm0 + movdqa %xmm1,%xmm9 + + jnz .Loop_shaext + + pshufd $27,%xmm0,%xmm0 + pshufd $27,%xmm1,%xmm1 + movdqu %xmm0,(%rdi) + movd %xmm1,16(%rdi) + movaps -8-64(%rax),%xmm6 + movaps -8-48(%rax),%xmm7 + movaps -8-32(%rax),%xmm8 + movaps -8-16(%rax),%xmm9 + movq %rax,%rsp +.Lepilogue_shaext: + + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 +.LSEH_end_sha1_block_data_order_shaext: .def sha1_block_data_order_ssse3; .scl 3; .type 32; .endef .p2align 4 sha1_block_data_order_ssse3: @@ -1349,24 +1507,35 @@ sha1_block_data_order_ssse3: movq %r8,%rdx _ssse3_shortcut: + + movq %rsp,%r11 + pushq %rbx + pushq %rbp + pushq %r12 + + pushq %r13 + + pushq %r14 + leaq -160(%rsp),%rsp - movaps %xmm6,64+0(%rsp) - movaps %xmm7,64+16(%rsp) - movaps %xmm8,64+32(%rsp) - movaps %xmm9,64+48(%rsp) - movaps %xmm10,64+64(%rsp) - movaps %xmm11,64+80(%rsp) + movaps %xmm6,-40-96(%r11) + movaps %xmm7,-40-80(%r11) + movaps %xmm8,-40-64(%r11) + movaps %xmm9,-40-48(%r11) + movaps %xmm10,-40-32(%r11) + movaps %xmm11,-40-16(%r11) .Lprologue_ssse3: + andq $-64,%rsp movq %rdi,%r8 movq %rsi,%r9 movq %rdx,%r10 shlq $6,%r10 addq %r9,%r10 - leaq K_XX_XX(%rip),%r11 + leaq K_XX_XX+64(%rip),%r14 movl 0(%r8),%eax movl 4(%r8),%ebx @@ -1378,18 +1547,18 @@ _ssse3_shortcut: xorl %edx,%edi andl %edi,%esi - movdqa 64(%r11),%xmm6 - movdqa 0(%r11),%xmm9 + movdqa 64(%r14),%xmm6 + movdqa -64(%r14),%xmm9 movdqu 0(%r9),%xmm0 movdqu 16(%r9),%xmm1 movdqu 32(%r9),%xmm2 movdqu 48(%r9),%xmm3 .byte 102,15,56,0,198 - addq $64,%r9 .byte 102,15,56,0,206 .byte 102,15,56,0,214 -.byte 102,15,56,0,222 + addq $64,%r9 paddd %xmm9,%xmm0 +.byte 102,15,56,0,222 paddd %xmm9,%xmm1 paddd %xmm9,%xmm2 movdqa %xmm0,0(%rsp) @@ -1401,24 +1570,24 @@ _ssse3_shortcut: jmp .Loop_ssse3 .p2align 4 .Loop_ssse3: - movdqa %xmm1,%xmm4 rorl $2,%ebx + pshufd $238,%xmm0,%xmm4 xorl %edx,%esi movdqa %xmm3,%xmm8 -.byte 102,15,58,15,224,8 + paddd %xmm3,%xmm9 movl %eax,%edi addl 0(%rsp),%ebp - paddd %xmm3,%xmm9 + punpcklqdq %xmm1,%xmm4 xorl %ecx,%ebx roll $5,%eax - psrldq $4,%xmm8 addl %esi,%ebp + psrldq $4,%xmm8 andl %ebx,%edi - pxor %xmm0,%xmm4 xorl %ecx,%ebx + pxor %xmm0,%xmm4 addl %eax,%ebp - pxor %xmm2,%xmm8 rorl $7,%eax + pxor %xmm2,%xmm8 xorl %ecx,%edi movl %ebp,%esi addl 4(%rsp),%edx @@ -1429,57 +1598,57 @@ _ssse3_shortcut: addl %edi,%edx andl %eax,%esi movdqa %xmm4,%xmm10 - movdqa %xmm4,%xmm8 xorl %ebx,%eax addl %ebp,%edx rorl $7,%ebp + movdqa %xmm4,%xmm8 xorl %ebx,%esi pslldq $12,%xmm10 paddd %xmm4,%xmm4 movl %edx,%edi addl 8(%rsp),%ecx + psrld $31,%xmm8 xorl %eax,%ebp roll $5,%edx - psrld $31,%xmm8 addl %esi,%ecx - andl %ebp,%edi movdqa %xmm10,%xmm9 + andl %ebp,%edi xorl %eax,%ebp - addl %edx,%ecx psrld $30,%xmm10 - por %xmm8,%xmm4 + addl %edx,%ecx rorl $7,%edx + por %xmm8,%xmm4 xorl %eax,%edi movl %ecx,%esi addl 12(%rsp),%ebx pslld $2,%xmm9 pxor %xmm10,%xmm4 xorl %ebp,%edx + movdqa -64(%r14),%xmm10 roll $5,%ecx - movdqa 0(%r11),%xmm10 addl %edi,%ebx andl %edx,%esi pxor %xmm9,%xmm4 xorl %ebp,%edx addl %ecx,%ebx - movdqa %xmm2,%xmm5 rorl $7,%ecx + pshufd $238,%xmm1,%xmm5 xorl %ebp,%esi movdqa %xmm4,%xmm9 -.byte 102,15,58,15,233,8 + paddd %xmm4,%xmm10 movl %ebx,%edi addl 16(%rsp),%eax - paddd %xmm4,%xmm10 + punpcklqdq %xmm2,%xmm5 xorl %edx,%ecx roll $5,%ebx - psrldq $4,%xmm9 addl %esi,%eax + psrldq $4,%xmm9 andl %ecx,%edi - pxor %xmm1,%xmm5 xorl %edx,%ecx + pxor %xmm1,%xmm5 addl %ebx,%eax - pxor %xmm3,%xmm9 rorl $7,%ebx + pxor %xmm3,%xmm9 xorl %edx,%edi movl %eax,%esi addl 20(%rsp),%ebp @@ -1490,57 +1659,57 @@ _ssse3_shortcut: addl %edi,%ebp andl %ebx,%esi movdqa %xmm5,%xmm8 - movdqa %xmm5,%xmm9 xorl %ecx,%ebx addl %eax,%ebp rorl $7,%eax + movdqa %xmm5,%xmm9 xorl %ecx,%esi pslldq $12,%xmm8 paddd %xmm5,%xmm5 movl %ebp,%edi addl 24(%rsp),%edx + psrld $31,%xmm9 xorl %ebx,%eax roll $5,%ebp - psrld $31,%xmm9 addl %esi,%edx - andl %eax,%edi movdqa %xmm8,%xmm10 + andl %eax,%edi xorl %ebx,%eax - addl %ebp,%edx psrld $30,%xmm8 - por %xmm9,%xmm5 + addl %ebp,%edx rorl $7,%ebp + por %xmm9,%xmm5 xorl %ebx,%edi movl %edx,%esi addl 28(%rsp),%ecx pslld $2,%xmm10 pxor %xmm8,%xmm5 xorl %eax,%ebp + movdqa -32(%r14),%xmm8 roll $5,%edx - movdqa 16(%r11),%xmm8 addl %edi,%ecx andl %ebp,%esi pxor %xmm10,%xmm5 xorl %eax,%ebp addl %edx,%ecx - movdqa %xmm3,%xmm6 rorl $7,%edx + pshufd $238,%xmm2,%xmm6 xorl %eax,%esi movdqa %xmm5,%xmm10 -.byte 102,15,58,15,242,8 + paddd %xmm5,%xmm8 movl %ecx,%edi addl 32(%rsp),%ebx - paddd %xmm5,%xmm8 + punpcklqdq %xmm3,%xmm6 xorl %ebp,%edx roll $5,%ecx - psrldq $4,%xmm10 addl %esi,%ebx + psrldq $4,%xmm10 andl %edx,%edi - pxor %xmm2,%xmm6 xorl %ebp,%edx + pxor %xmm2,%xmm6 addl %ecx,%ebx - pxor %xmm4,%xmm10 rorl $7,%ecx + pxor %xmm4,%xmm10 xorl %ebp,%edi movl %ebx,%esi addl 36(%rsp),%eax @@ -1551,57 +1720,57 @@ _ssse3_shortcut: addl %edi,%eax andl %ecx,%esi movdqa %xmm6,%xmm9 - movdqa %xmm6,%xmm10 xorl %edx,%ecx addl %ebx,%eax rorl $7,%ebx + movdqa %xmm6,%xmm10 xorl %edx,%esi pslldq $12,%xmm9 paddd %xmm6,%xmm6 movl %eax,%edi addl 40(%rsp),%ebp + psrld $31,%xmm10 xorl %ecx,%ebx roll $5,%eax - psrld $31,%xmm10 addl %esi,%ebp - andl %ebx,%edi movdqa %xmm9,%xmm8 + andl %ebx,%edi xorl %ecx,%ebx - addl %eax,%ebp psrld $30,%xmm9 - por %xmm10,%xmm6 + addl %eax,%ebp rorl $7,%eax + por %xmm10,%xmm6 xorl %ecx,%edi movl %ebp,%esi addl 44(%rsp),%edx pslld $2,%xmm8 pxor %xmm9,%xmm6 xorl %ebx,%eax + movdqa -32(%r14),%xmm9 roll $5,%ebp - movdqa 16(%r11),%xmm9 addl %edi,%edx andl %eax,%esi pxor %xmm8,%xmm6 xorl %ebx,%eax addl %ebp,%edx - movdqa %xmm4,%xmm7 rorl $7,%ebp + pshufd $238,%xmm3,%xmm7 xorl %ebx,%esi movdqa %xmm6,%xmm8 -.byte 102,15,58,15,251,8 + paddd %xmm6,%xmm9 movl %edx,%edi addl 48(%rsp),%ecx - paddd %xmm6,%xmm9 + punpcklqdq %xmm4,%xmm7 xorl %eax,%ebp roll $5,%edx - psrldq $4,%xmm8 addl %esi,%ecx + psrldq $4,%xmm8 andl %ebp,%edi - pxor %xmm3,%xmm7 xorl %eax,%ebp + pxor %xmm3,%xmm7 addl %edx,%ecx - pxor %xmm5,%xmm8 rorl $7,%edx + pxor %xmm5,%xmm8 xorl %eax,%edi movl %ecx,%esi addl 52(%rsp),%ebx @@ -1612,78 +1781,78 @@ _ssse3_shortcut: addl %edi,%ebx andl %edx,%esi movdqa %xmm7,%xmm10 - movdqa %xmm7,%xmm8 xorl %ebp,%edx addl %ecx,%ebx rorl $7,%ecx + movdqa %xmm7,%xmm8 xorl %ebp,%esi pslldq $12,%xmm10 paddd %xmm7,%xmm7 movl %ebx,%edi addl 56(%rsp),%eax + psrld $31,%xmm8 xorl %edx,%ecx roll $5,%ebx - psrld $31,%xmm8 addl %esi,%eax - andl %ecx,%edi movdqa %xmm10,%xmm9 + andl %ecx,%edi xorl %edx,%ecx - addl %ebx,%eax psrld $30,%xmm10 - por %xmm8,%xmm7 + addl %ebx,%eax rorl $7,%ebx + por %xmm8,%xmm7 xorl %edx,%edi movl %eax,%esi addl 60(%rsp),%ebp pslld $2,%xmm9 pxor %xmm10,%xmm7 xorl %ecx,%ebx + movdqa -32(%r14),%xmm10 roll $5,%eax - movdqa 16(%r11),%xmm10 addl %edi,%ebp andl %ebx,%esi pxor %xmm9,%xmm7 + pshufd $238,%xmm6,%xmm9 xorl %ecx,%ebx addl %eax,%ebp - movdqa %xmm7,%xmm9 rorl $7,%eax pxor %xmm4,%xmm0 -.byte 102,68,15,58,15,206,8 xorl %ecx,%esi movl %ebp,%edi addl 0(%rsp),%edx - pxor %xmm1,%xmm0 + punpcklqdq %xmm7,%xmm9 xorl %ebx,%eax roll $5,%ebp - movdqa %xmm10,%xmm8 - paddd %xmm7,%xmm10 + pxor %xmm1,%xmm0 addl %esi,%edx andl %eax,%edi - pxor %xmm9,%xmm0 + movdqa %xmm10,%xmm8 xorl %ebx,%eax + paddd %xmm7,%xmm10 addl %ebp,%edx + pxor %xmm9,%xmm0 rorl $7,%ebp xorl %ebx,%edi - movdqa %xmm0,%xmm9 - movdqa %xmm10,48(%rsp) movl %edx,%esi addl 4(%rsp),%ecx + movdqa %xmm0,%xmm9 xorl %eax,%ebp roll $5,%edx - pslld $2,%xmm0 + movdqa %xmm10,48(%rsp) addl %edi,%ecx andl %ebp,%esi - psrld $30,%xmm9 xorl %eax,%ebp + pslld $2,%xmm0 addl %edx,%ecx rorl $7,%edx + psrld $30,%xmm9 xorl %eax,%esi movl %ecx,%edi addl 8(%rsp),%ebx por %xmm9,%xmm0 xorl %ebp,%edx roll $5,%ecx - movdqa %xmm0,%xmm10 + pshufd $238,%xmm7,%xmm10 addl %esi,%ebx andl %edx,%edi xorl %ebp,%edx @@ -1696,18 +1865,18 @@ _ssse3_shortcut: xorl %edx,%esi rorl $7,%ecx addl %ebx,%eax - addl 16(%rsp),%ebp pxor %xmm5,%xmm1 -.byte 102,68,15,58,15,215,8 + addl 16(%rsp),%ebp xorl %ecx,%esi + punpcklqdq %xmm0,%xmm10 movl %eax,%edi roll $5,%eax pxor %xmm2,%xmm1 addl %esi,%ebp xorl %ecx,%edi movdqa %xmm8,%xmm9 - paddd %xmm0,%xmm8 rorl $7,%ebx + paddd %xmm0,%xmm8 addl %eax,%ebp pxor %xmm10,%xmm1 addl 20(%rsp),%edx @@ -1715,43 +1884,43 @@ _ssse3_shortcut: movl %ebp,%esi roll $5,%ebp movdqa %xmm1,%xmm10 - movdqa %xmm8,0(%rsp) addl %edi,%edx xorl %ebx,%esi + movdqa %xmm8,0(%rsp) rorl $7,%eax addl %ebp,%edx - pslld $2,%xmm1 addl 24(%rsp),%ecx + pslld $2,%xmm1 xorl %eax,%esi - psrld $30,%xmm10 movl %edx,%edi + psrld $30,%xmm10 roll $5,%edx addl %esi,%ecx xorl %eax,%edi rorl $7,%ebp - addl %edx,%ecx por %xmm10,%xmm1 + addl %edx,%ecx addl 28(%rsp),%ebx + pshufd $238,%xmm0,%xmm8 xorl %ebp,%edi - movdqa %xmm1,%xmm8 movl %ecx,%esi roll $5,%ecx addl %edi,%ebx xorl %ebp,%esi rorl $7,%edx addl %ecx,%ebx - addl 32(%rsp),%eax pxor %xmm6,%xmm2 -.byte 102,68,15,58,15,192,8 + addl 32(%rsp),%eax xorl %edx,%esi + punpcklqdq %xmm1,%xmm8 movl %ebx,%edi roll $5,%ebx pxor %xmm3,%xmm2 addl %esi,%eax xorl %edx,%edi - movdqa 32(%r11),%xmm10 - paddd %xmm1,%xmm9 + movdqa 0(%r14),%xmm10 rorl $7,%ecx + paddd %xmm1,%xmm9 addl %ebx,%eax pxor %xmm8,%xmm2 addl 36(%rsp),%ebp @@ -1759,43 +1928,43 @@ _ssse3_shortcut: movl %eax,%esi roll $5,%eax movdqa %xmm2,%xmm8 - movdqa %xmm9,16(%rsp) addl %edi,%ebp xorl %ecx,%esi + movdqa %xmm9,16(%rsp) rorl $7,%ebx addl %eax,%ebp - pslld $2,%xmm2 addl 40(%rsp),%edx + pslld $2,%xmm2 xorl %ebx,%esi - psrld $30,%xmm8 movl %ebp,%edi + psrld $30,%xmm8 roll $5,%ebp addl %esi,%edx xorl %ebx,%edi rorl $7,%eax - addl %ebp,%edx por %xmm8,%xmm2 + addl %ebp,%edx addl 44(%rsp),%ecx + pshufd $238,%xmm1,%xmm9 xorl %eax,%edi - movdqa %xmm2,%xmm9 movl %edx,%esi roll $5,%edx addl %edi,%ecx xorl %eax,%esi rorl $7,%ebp addl %edx,%ecx - addl 48(%rsp),%ebx pxor %xmm7,%xmm3 -.byte 102,68,15,58,15,201,8 + addl 48(%rsp),%ebx xorl %ebp,%esi + punpcklqdq %xmm2,%xmm9 movl %ecx,%edi roll $5,%ecx pxor %xmm4,%xmm3 addl %esi,%ebx xorl %ebp,%edi movdqa %xmm10,%xmm8 - paddd %xmm2,%xmm10 rorl $7,%edx + paddd %xmm2,%xmm10 addl %ecx,%ebx pxor %xmm9,%xmm3 addl 52(%rsp),%eax @@ -1803,43 +1972,43 @@ _ssse3_shortcut: movl %ebx,%esi roll $5,%ebx movdqa %xmm3,%xmm9 - movdqa %xmm10,32(%rsp) addl %edi,%eax xorl %edx,%esi + movdqa %xmm10,32(%rsp) rorl $7,%ecx addl %ebx,%eax - pslld $2,%xmm3 addl 56(%rsp),%ebp + pslld $2,%xmm3 xorl %ecx,%esi - psrld $30,%xmm9 movl %eax,%edi + psrld $30,%xmm9 roll $5,%eax addl %esi,%ebp xorl %ecx,%edi rorl $7,%ebx - addl %eax,%ebp por %xmm9,%xmm3 + addl %eax,%ebp addl 60(%rsp),%edx + pshufd $238,%xmm2,%xmm10 xorl %ebx,%edi - movdqa %xmm3,%xmm10 movl %ebp,%esi roll $5,%ebp addl %edi,%edx xorl %ebx,%esi rorl $7,%eax addl %ebp,%edx - addl 0(%rsp),%ecx pxor %xmm0,%xmm4 -.byte 102,68,15,58,15,210,8 + addl 0(%rsp),%ecx xorl %eax,%esi + punpcklqdq %xmm3,%xmm10 movl %edx,%edi roll $5,%edx pxor %xmm5,%xmm4 addl %esi,%ecx xorl %eax,%edi movdqa %xmm8,%xmm9 - paddd %xmm3,%xmm8 rorl $7,%ebp + paddd %xmm3,%xmm8 addl %edx,%ecx pxor %xmm10,%xmm4 addl 4(%rsp),%ebx @@ -1847,43 +2016,43 @@ _ssse3_shortcut: movl %ecx,%esi roll $5,%ecx movdqa %xmm4,%xmm10 - movdqa %xmm8,48(%rsp) addl %edi,%ebx xorl %ebp,%esi + movdqa %xmm8,48(%rsp) rorl $7,%edx addl %ecx,%ebx - pslld $2,%xmm4 addl 8(%rsp),%eax + pslld $2,%xmm4 xorl %edx,%esi - psrld $30,%xmm10 movl %ebx,%edi + psrld $30,%xmm10 roll $5,%ebx addl %esi,%eax xorl %edx,%edi rorl $7,%ecx - addl %ebx,%eax por %xmm10,%xmm4 + addl %ebx,%eax addl 12(%rsp),%ebp + pshufd $238,%xmm3,%xmm8 xorl %ecx,%edi - movdqa %xmm4,%xmm8 movl %eax,%esi roll $5,%eax addl %edi,%ebp xorl %ecx,%esi rorl $7,%ebx addl %eax,%ebp - addl 16(%rsp),%edx pxor %xmm1,%xmm5 -.byte 102,68,15,58,15,195,8 + addl 16(%rsp),%edx xorl %ebx,%esi + punpcklqdq %xmm4,%xmm8 movl %ebp,%edi roll $5,%ebp pxor %xmm6,%xmm5 addl %esi,%edx xorl %ebx,%edi movdqa %xmm9,%xmm10 - paddd %xmm4,%xmm9 rorl $7,%eax + paddd %xmm4,%xmm9 addl %ebp,%edx pxor %xmm8,%xmm5 addl 20(%rsp),%ecx @@ -1891,24 +2060,24 @@ _ssse3_shortcut: movl %edx,%esi roll $5,%edx movdqa %xmm5,%xmm8 - movdqa %xmm9,0(%rsp) addl %edi,%ecx xorl %eax,%esi + movdqa %xmm9,0(%rsp) rorl $7,%ebp addl %edx,%ecx - pslld $2,%xmm5 addl 24(%rsp),%ebx + pslld $2,%xmm5 xorl %ebp,%esi - psrld $30,%xmm8 movl %ecx,%edi + psrld $30,%xmm8 roll $5,%ecx addl %esi,%ebx xorl %ebp,%edi rorl $7,%edx - addl %ecx,%ebx por %xmm8,%xmm5 + addl %ecx,%ebx addl 28(%rsp),%eax - movdqa %xmm5,%xmm9 + pshufd $238,%xmm4,%xmm9 rorl $7,%ecx movl %ebx,%esi xorl %edx,%edi @@ -1917,47 +2086,47 @@ _ssse3_shortcut: xorl %ecx,%esi xorl %edx,%ecx addl %ebx,%eax - addl 32(%rsp),%ebp pxor %xmm2,%xmm6 -.byte 102,68,15,58,15,204,8 + addl 32(%rsp),%ebp andl %ecx,%esi xorl %edx,%ecx rorl $7,%ebx - pxor %xmm7,%xmm6 + punpcklqdq %xmm5,%xmm9 movl %eax,%edi xorl %ecx,%esi - movdqa %xmm10,%xmm8 - paddd %xmm5,%xmm10 + pxor %xmm7,%xmm6 roll $5,%eax addl %esi,%ebp - pxor %xmm9,%xmm6 + movdqa %xmm10,%xmm8 xorl %ebx,%edi + paddd %xmm5,%xmm10 xorl %ecx,%ebx + pxor %xmm9,%xmm6 addl %eax,%ebp addl 36(%rsp),%edx - movdqa %xmm6,%xmm9 - movdqa %xmm10,16(%rsp) andl %ebx,%edi xorl %ecx,%ebx rorl $7,%eax + movdqa %xmm6,%xmm9 movl %ebp,%esi - pslld $2,%xmm6 xorl %ebx,%edi + movdqa %xmm10,16(%rsp) roll $5,%ebp - psrld $30,%xmm9 addl %edi,%edx xorl %eax,%esi + pslld $2,%xmm6 xorl %ebx,%eax addl %ebp,%edx + psrld $30,%xmm9 addl 40(%rsp),%ecx andl %eax,%esi - por %xmm9,%xmm6 xorl %ebx,%eax + por %xmm9,%xmm6 rorl $7,%ebp - movdqa %xmm6,%xmm10 movl %edx,%edi xorl %eax,%esi roll $5,%edx + pshufd $238,%xmm5,%xmm10 addl %esi,%ecx xorl %ebp,%edi xorl %eax,%ebp @@ -1973,47 +2142,47 @@ _ssse3_shortcut: xorl %edx,%esi xorl %ebp,%edx addl %ecx,%ebx - addl 48(%rsp),%eax pxor %xmm3,%xmm7 -.byte 102,68,15,58,15,213,8 + addl 48(%rsp),%eax andl %edx,%esi xorl %ebp,%edx rorl $7,%ecx - pxor %xmm0,%xmm7 + punpcklqdq %xmm6,%xmm10 movl %ebx,%edi xorl %edx,%esi - movdqa 48(%r11),%xmm9 - paddd %xmm6,%xmm8 + pxor %xmm0,%xmm7 roll $5,%ebx addl %esi,%eax - pxor %xmm10,%xmm7 + movdqa 32(%r14),%xmm9 xorl %ecx,%edi + paddd %xmm6,%xmm8 xorl %edx,%ecx + pxor %xmm10,%xmm7 addl %ebx,%eax addl 52(%rsp),%ebp - movdqa %xmm7,%xmm10 - movdqa %xmm8,32(%rsp) andl %ecx,%edi xorl %edx,%ecx rorl $7,%ebx + movdqa %xmm7,%xmm10 movl %eax,%esi - pslld $2,%xmm7 xorl %ecx,%edi + movdqa %xmm8,32(%rsp) roll $5,%eax - psrld $30,%xmm10 addl %edi,%ebp xorl %ebx,%esi + pslld $2,%xmm7 xorl %ecx,%ebx addl %eax,%ebp + psrld $30,%xmm10 addl 56(%rsp),%edx andl %ebx,%esi - por %xmm10,%xmm7 xorl %ecx,%ebx + por %xmm10,%xmm7 rorl $7,%eax - movdqa %xmm7,%xmm8 movl %ebp,%edi xorl %ebx,%esi roll $5,%ebp + pshufd $238,%xmm6,%xmm8 addl %esi,%edx xorl %eax,%edi xorl %ebx,%eax @@ -2029,47 +2198,47 @@ _ssse3_shortcut: xorl %ebp,%esi xorl %eax,%ebp addl %edx,%ecx - addl 0(%rsp),%ebx pxor %xmm4,%xmm0 -.byte 102,68,15,58,15,198,8 + addl 0(%rsp),%ebx andl %ebp,%esi xorl %eax,%ebp rorl $7,%edx - pxor %xmm1,%xmm0 + punpcklqdq %xmm7,%xmm8 movl %ecx,%edi xorl %ebp,%esi - movdqa %xmm9,%xmm10 - paddd %xmm7,%xmm9 + pxor %xmm1,%xmm0 roll $5,%ecx addl %esi,%ebx - pxor %xmm8,%xmm0 + movdqa %xmm9,%xmm10 xorl %edx,%edi + paddd %xmm7,%xmm9 xorl %ebp,%edx + pxor %xmm8,%xmm0 addl %ecx,%ebx addl 4(%rsp),%eax - movdqa %xmm0,%xmm8 - movdqa %xmm9,48(%rsp) andl %edx,%edi xorl %ebp,%edx rorl $7,%ecx + movdqa %xmm0,%xmm8 movl %ebx,%esi - pslld $2,%xmm0 xorl %edx,%edi + movdqa %xmm9,48(%rsp) roll $5,%ebx - psrld $30,%xmm8 addl %edi,%eax xorl %ecx,%esi + pslld $2,%xmm0 xorl %edx,%ecx addl %ebx,%eax + psrld $30,%xmm8 addl 8(%rsp),%ebp andl %ecx,%esi - por %xmm8,%xmm0 xorl %edx,%ecx + por %xmm8,%xmm0 rorl $7,%ebx - movdqa %xmm0,%xmm9 movl %eax,%edi xorl %ecx,%esi roll $5,%eax + pshufd $238,%xmm7,%xmm9 addl %esi,%ebp xorl %ebx,%edi xorl %ecx,%ebx @@ -2085,47 +2254,47 @@ _ssse3_shortcut: xorl %eax,%esi xorl %ebx,%eax addl %ebp,%edx - addl 16(%rsp),%ecx pxor %xmm5,%xmm1 -.byte 102,68,15,58,15,207,8 + addl 16(%rsp),%ecx andl %eax,%esi xorl %ebx,%eax rorl $7,%ebp - pxor %xmm2,%xmm1 + punpcklqdq %xmm0,%xmm9 movl %edx,%edi xorl %eax,%esi - movdqa %xmm10,%xmm8 - paddd %xmm0,%xmm10 + pxor %xmm2,%xmm1 roll $5,%edx addl %esi,%ecx - pxor %xmm9,%xmm1 + movdqa %xmm10,%xmm8 xorl %ebp,%edi + paddd %xmm0,%xmm10 xorl %eax,%ebp + pxor %xmm9,%xmm1 addl %edx,%ecx addl 20(%rsp),%ebx - movdqa %xmm1,%xmm9 - movdqa %xmm10,0(%rsp) andl %ebp,%edi xorl %eax,%ebp rorl $7,%edx + movdqa %xmm1,%xmm9 movl %ecx,%esi - pslld $2,%xmm1 xorl %ebp,%edi + movdqa %xmm10,0(%rsp) roll $5,%ecx - psrld $30,%xmm9 addl %edi,%ebx xorl %edx,%esi + pslld $2,%xmm1 xorl %ebp,%edx addl %ecx,%ebx + psrld $30,%xmm9 addl 24(%rsp),%eax andl %edx,%esi - por %xmm9,%xmm1 xorl %ebp,%edx + por %xmm9,%xmm1 rorl $7,%ecx - movdqa %xmm1,%xmm10 movl %ebx,%edi xorl %edx,%esi roll $5,%ebx + pshufd $238,%xmm0,%xmm10 addl %esi,%eax xorl %ecx,%edi xorl %edx,%ecx @@ -2141,47 +2310,47 @@ _ssse3_shortcut: xorl %ebx,%esi xorl %ecx,%ebx addl %eax,%ebp - addl 32(%rsp),%edx pxor %xmm6,%xmm2 -.byte 102,68,15,58,15,208,8 + addl 32(%rsp),%edx andl %ebx,%esi xorl %ecx,%ebx rorl $7,%eax - pxor %xmm3,%xmm2 + punpcklqdq %xmm1,%xmm10 movl %ebp,%edi xorl %ebx,%esi - movdqa %xmm8,%xmm9 - paddd %xmm1,%xmm8 + pxor %xmm3,%xmm2 roll $5,%ebp addl %esi,%edx - pxor %xmm10,%xmm2 + movdqa %xmm8,%xmm9 xorl %eax,%edi + paddd %xmm1,%xmm8 xorl %ebx,%eax + pxor %xmm10,%xmm2 addl %ebp,%edx addl 36(%rsp),%ecx - movdqa %xmm2,%xmm10 - movdqa %xmm8,16(%rsp) andl %eax,%edi xorl %ebx,%eax rorl $7,%ebp + movdqa %xmm2,%xmm10 movl %edx,%esi - pslld $2,%xmm2 xorl %eax,%edi + movdqa %xmm8,16(%rsp) roll $5,%edx - psrld $30,%xmm10 addl %edi,%ecx xorl %ebp,%esi + pslld $2,%xmm2 xorl %eax,%ebp addl %edx,%ecx + psrld $30,%xmm10 addl 40(%rsp),%ebx andl %ebp,%esi - por %xmm10,%xmm2 xorl %eax,%ebp + por %xmm10,%xmm2 rorl $7,%edx - movdqa %xmm2,%xmm8 movl %ecx,%edi xorl %ebp,%esi roll $5,%ecx + pshufd $238,%xmm1,%xmm8 addl %esi,%ebx xorl %edx,%edi xorl %ebp,%edx @@ -2196,18 +2365,18 @@ _ssse3_shortcut: addl %edi,%eax xorl %edx,%esi addl %ebx,%eax - addl 48(%rsp),%ebp pxor %xmm7,%xmm3 -.byte 102,68,15,58,15,193,8 + addl 48(%rsp),%ebp xorl %ecx,%esi + punpcklqdq %xmm2,%xmm8 movl %eax,%edi roll $5,%eax pxor %xmm4,%xmm3 addl %esi,%ebp xorl %ecx,%edi movdqa %xmm9,%xmm10 - paddd %xmm2,%xmm9 rorl $7,%ebx + paddd %xmm2,%xmm9 addl %eax,%ebp pxor %xmm8,%xmm3 addl 52(%rsp),%edx @@ -2215,22 +2384,22 @@ _ssse3_shortcut: movl %ebp,%esi roll $5,%ebp movdqa %xmm3,%xmm8 - movdqa %xmm9,32(%rsp) addl %edi,%edx xorl %ebx,%esi + movdqa %xmm9,32(%rsp) rorl $7,%eax addl %ebp,%edx - pslld $2,%xmm3 addl 56(%rsp),%ecx + pslld $2,%xmm3 xorl %eax,%esi - psrld $30,%xmm8 movl %edx,%edi + psrld $30,%xmm8 roll $5,%edx addl %esi,%ecx xorl %eax,%edi rorl $7,%ebp - addl %edx,%ecx por %xmm8,%xmm3 + addl %edx,%ecx addl 60(%rsp),%ebx xorl %ebp,%edi movl %ecx,%esi @@ -2240,13 +2409,13 @@ _ssse3_shortcut: rorl $7,%edx addl %ecx,%ebx addl 0(%rsp),%eax - paddd %xmm3,%xmm10 xorl %edx,%esi movl %ebx,%edi roll $5,%ebx + paddd %xmm3,%xmm10 addl %esi,%eax - movdqa %xmm10,48(%rsp) xorl %edx,%edi + movdqa %xmm10,48(%rsp) rorl $7,%ecx addl %ebx,%eax addl 4(%rsp),%ebp @@ -2275,8 +2444,8 @@ _ssse3_shortcut: addl %edx,%ecx cmpq %r10,%r9 je .Ldone_ssse3 - movdqa 64(%r11),%xmm6 - movdqa 0(%r11),%xmm9 + movdqa 64(%r14),%xmm6 + movdqa -64(%r14),%xmm9 movdqu 0(%r9),%xmm0 movdqu 16(%r9),%xmm1 movdqu 32(%r9),%xmm2 @@ -2285,23 +2454,23 @@ _ssse3_shortcut: addq $64,%r9 addl 16(%rsp),%ebx xorl %ebp,%esi -.byte 102,15,56,0,206 movl %ecx,%edi +.byte 102,15,56,0,206 roll $5,%ecx - paddd %xmm9,%xmm0 addl %esi,%ebx xorl %ebp,%edi rorl $7,%edx + paddd %xmm9,%xmm0 addl %ecx,%ebx - movdqa %xmm0,0(%rsp) addl 20(%rsp),%eax xorl %edx,%edi - psubd %xmm9,%xmm0 movl %ebx,%esi + movdqa %xmm0,0(%rsp) roll $5,%ebx addl %edi,%eax xorl %edx,%esi rorl $7,%ecx + psubd %xmm9,%xmm0 addl %ebx,%eax addl 24(%rsp),%ebp xorl %ecx,%esi @@ -2321,23 +2490,23 @@ _ssse3_shortcut: addl %ebp,%edx addl 32(%rsp),%ecx xorl %eax,%esi -.byte 102,15,56,0,214 movl %edx,%edi +.byte 102,15,56,0,214 roll $5,%edx - paddd %xmm9,%xmm1 addl %esi,%ecx xorl %eax,%edi rorl $7,%ebp + paddd %xmm9,%xmm1 addl %edx,%ecx - movdqa %xmm1,16(%rsp) addl 36(%rsp),%ebx xorl %ebp,%edi - psubd %xmm9,%xmm1 movl %ecx,%esi + movdqa %xmm1,16(%rsp) roll $5,%ecx addl %edi,%ebx xorl %ebp,%esi rorl $7,%edx + psubd %xmm9,%xmm1 addl %ecx,%ebx addl 40(%rsp),%eax xorl %edx,%esi @@ -2345,197 +2514,3079 @@ _ssse3_shortcut: roll $5,%ebx addl %esi,%eax xorl %edx,%edi - rorl $7,%ecx - addl %ebx,%eax - addl 44(%rsp),%ebp + rorl $7,%ecx + addl %ebx,%eax + addl 44(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + roll $5,%eax + addl %edi,%ebp + xorl %ecx,%esi + rorl $7,%ebx + addl %eax,%ebp + addl 48(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi +.byte 102,15,56,0,222 + roll $5,%ebp + addl %esi,%edx + xorl %ebx,%edi + rorl $7,%eax + paddd %xmm9,%xmm2 + addl %ebp,%edx + addl 52(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + movdqa %xmm2,32(%rsp) + roll $5,%edx + addl %edi,%ecx + xorl %eax,%esi + rorl $7,%ebp + psubd %xmm9,%xmm2 + addl %edx,%ecx + addl 56(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + roll $5,%ecx + addl %esi,%ebx + xorl %ebp,%edi + rorl $7,%edx + addl %ecx,%ebx + addl 60(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + roll $5,%ebx + addl %edi,%eax + rorl $7,%ecx + addl %ebx,%eax + addl 0(%r8),%eax + addl 4(%r8),%esi + addl 8(%r8),%ecx + addl 12(%r8),%edx + movl %eax,0(%r8) + addl 16(%r8),%ebp + movl %esi,4(%r8) + movl %esi,%ebx + movl %ecx,8(%r8) + movl %ecx,%edi + movl %edx,12(%r8) + xorl %edx,%edi + movl %ebp,16(%r8) + andl %edi,%esi + jmp .Loop_ssse3 + +.p2align 4 +.Ldone_ssse3: + addl 16(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + roll $5,%ecx + addl %esi,%ebx + xorl %ebp,%edi + rorl $7,%edx + addl %ecx,%ebx + addl 20(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + roll $5,%ebx + addl %edi,%eax + xorl %edx,%esi + rorl $7,%ecx + addl %ebx,%eax + addl 24(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + roll $5,%eax + addl %esi,%ebp + xorl %ecx,%edi + rorl $7,%ebx + addl %eax,%ebp + addl 28(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + roll $5,%ebp + addl %edi,%edx + xorl %ebx,%esi + rorl $7,%eax + addl %ebp,%edx + addl 32(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + roll $5,%edx + addl %esi,%ecx + xorl %eax,%edi + rorl $7,%ebp + addl %edx,%ecx + addl 36(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + roll $5,%ecx + addl %edi,%ebx + xorl %ebp,%esi + rorl $7,%edx + addl %ecx,%ebx + addl 40(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + roll $5,%ebx + addl %esi,%eax + xorl %edx,%edi + rorl $7,%ecx + addl %ebx,%eax + addl 44(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + roll $5,%eax + addl %edi,%ebp + xorl %ecx,%esi + rorl $7,%ebx + addl %eax,%ebp + addl 48(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + roll $5,%ebp + addl %esi,%edx + xorl %ebx,%edi + rorl $7,%eax + addl %ebp,%edx + addl 52(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + roll $5,%edx + addl %edi,%ecx + xorl %eax,%esi + rorl $7,%ebp + addl %edx,%ecx + addl 56(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + roll $5,%ecx + addl %esi,%ebx + xorl %ebp,%edi + rorl $7,%edx + addl %ecx,%ebx + addl 60(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + roll $5,%ebx + addl %edi,%eax + rorl $7,%ecx + addl %ebx,%eax + addl 0(%r8),%eax + addl 4(%r8),%esi + addl 8(%r8),%ecx + movl %eax,0(%r8) + addl 12(%r8),%edx + movl %esi,4(%r8) + addl 16(%r8),%ebp + movl %ecx,8(%r8) + movl %edx,12(%r8) + movl %ebp,16(%r8) + movaps -40-96(%r11),%xmm6 + movaps -40-80(%r11),%xmm7 + movaps -40-64(%r11),%xmm8 + movaps -40-48(%r11),%xmm9 + movaps -40-32(%r11),%xmm10 + movaps -40-16(%r11),%xmm11 + movq -40(%r11),%r14 + + movq -32(%r11),%r13 + + movq -24(%r11),%r12 + + movq -16(%r11),%rbp + + movq -8(%r11),%rbx + + leaq (%r11),%rsp + +.Lepilogue_ssse3: + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 + +.LSEH_end_sha1_block_data_order_ssse3: +.def sha1_block_data_order_avx; .scl 3; .type 32; .endef +.p2align 4 +sha1_block_data_order_avx: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_sha1_block_data_order_avx: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + +_avx_shortcut: + + movq %rsp,%r11 + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + leaq -160(%rsp),%rsp + vzeroupper + vmovaps %xmm6,-40-96(%r11) + vmovaps %xmm7,-40-80(%r11) + vmovaps %xmm8,-40-64(%r11) + vmovaps %xmm9,-40-48(%r11) + vmovaps %xmm10,-40-32(%r11) + vmovaps %xmm11,-40-16(%r11) +.Lprologue_avx: + andq $-64,%rsp + movq %rdi,%r8 + movq %rsi,%r9 + movq %rdx,%r10 + + shlq $6,%r10 + addq %r9,%r10 + leaq K_XX_XX+64(%rip),%r14 + + movl 0(%r8),%eax + movl 4(%r8),%ebx + movl 8(%r8),%ecx + movl 12(%r8),%edx + movl %ebx,%esi + movl 16(%r8),%ebp + movl %ecx,%edi + xorl %edx,%edi + andl %edi,%esi + + vmovdqa 64(%r14),%xmm6 + vmovdqa -64(%r14),%xmm11 + vmovdqu 0(%r9),%xmm0 + vmovdqu 16(%r9),%xmm1 + vmovdqu 32(%r9),%xmm2 + vmovdqu 48(%r9),%xmm3 + vpshufb %xmm6,%xmm0,%xmm0 + addq $64,%r9 + vpshufb %xmm6,%xmm1,%xmm1 + vpshufb %xmm6,%xmm2,%xmm2 + vpshufb %xmm6,%xmm3,%xmm3 + vpaddd %xmm11,%xmm0,%xmm4 + vpaddd %xmm11,%xmm1,%xmm5 + vpaddd %xmm11,%xmm2,%xmm6 + vmovdqa %xmm4,0(%rsp) + vmovdqa %xmm5,16(%rsp) + vmovdqa %xmm6,32(%rsp) + jmp .Loop_avx +.p2align 4 +.Loop_avx: + shrdl $2,%ebx,%ebx + xorl %edx,%esi + vpalignr $8,%xmm0,%xmm1,%xmm4 + movl %eax,%edi + addl 0(%rsp),%ebp + vpaddd %xmm3,%xmm11,%xmm9 + xorl %ecx,%ebx + shldl $5,%eax,%eax + vpsrldq $4,%xmm3,%xmm8 + addl %esi,%ebp + andl %ebx,%edi + vpxor %xmm0,%xmm4,%xmm4 + xorl %ecx,%ebx + addl %eax,%ebp + vpxor %xmm2,%xmm8,%xmm8 + shrdl $7,%eax,%eax + xorl %ecx,%edi + movl %ebp,%esi + addl 4(%rsp),%edx + vpxor %xmm8,%xmm4,%xmm4 + xorl %ebx,%eax + shldl $5,%ebp,%ebp + vmovdqa %xmm9,48(%rsp) + addl %edi,%edx + andl %eax,%esi + vpsrld $31,%xmm4,%xmm8 + xorl %ebx,%eax + addl %ebp,%edx + shrdl $7,%ebp,%ebp + xorl %ebx,%esi + vpslldq $12,%xmm4,%xmm10 + vpaddd %xmm4,%xmm4,%xmm4 + movl %edx,%edi + addl 8(%rsp),%ecx + xorl %eax,%ebp + shldl $5,%edx,%edx + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm4,%xmm4 + addl %esi,%ecx + andl %ebp,%edi + xorl %eax,%ebp + addl %edx,%ecx + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm4,%xmm4 + shrdl $7,%edx,%edx + xorl %eax,%edi + movl %ecx,%esi + addl 12(%rsp),%ebx + vpxor %xmm10,%xmm4,%xmm4 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + addl %edi,%ebx + andl %edx,%esi + xorl %ebp,%edx + addl %ecx,%ebx + shrdl $7,%ecx,%ecx + xorl %ebp,%esi + vpalignr $8,%xmm1,%xmm2,%xmm5 + movl %ebx,%edi + addl 16(%rsp),%eax + vpaddd %xmm4,%xmm11,%xmm9 + xorl %edx,%ecx + shldl $5,%ebx,%ebx + vpsrldq $4,%xmm4,%xmm8 + addl %esi,%eax + andl %ecx,%edi + vpxor %xmm1,%xmm5,%xmm5 + xorl %edx,%ecx + addl %ebx,%eax + vpxor %xmm3,%xmm8,%xmm8 + shrdl $7,%ebx,%ebx + xorl %edx,%edi + movl %eax,%esi + addl 20(%rsp),%ebp + vpxor %xmm8,%xmm5,%xmm5 + xorl %ecx,%ebx + shldl $5,%eax,%eax + vmovdqa %xmm9,0(%rsp) + addl %edi,%ebp + andl %ebx,%esi + vpsrld $31,%xmm5,%xmm8 + xorl %ecx,%ebx + addl %eax,%ebp + shrdl $7,%eax,%eax + xorl %ecx,%esi + vpslldq $12,%xmm5,%xmm10 + vpaddd %xmm5,%xmm5,%xmm5 + movl %ebp,%edi + addl 24(%rsp),%edx + xorl %ebx,%eax + shldl $5,%ebp,%ebp + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm5,%xmm5 + addl %esi,%edx + andl %eax,%edi + xorl %ebx,%eax + addl %ebp,%edx + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm5,%xmm5 + shrdl $7,%ebp,%ebp + xorl %ebx,%edi + movl %edx,%esi + addl 28(%rsp),%ecx + vpxor %xmm10,%xmm5,%xmm5 + xorl %eax,%ebp + shldl $5,%edx,%edx + vmovdqa -32(%r14),%xmm11 + addl %edi,%ecx + andl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + shrdl $7,%edx,%edx + xorl %eax,%esi + vpalignr $8,%xmm2,%xmm3,%xmm6 + movl %ecx,%edi + addl 32(%rsp),%ebx + vpaddd %xmm5,%xmm11,%xmm9 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + vpsrldq $4,%xmm5,%xmm8 + addl %esi,%ebx + andl %edx,%edi + vpxor %xmm2,%xmm6,%xmm6 + xorl %ebp,%edx + addl %ecx,%ebx + vpxor %xmm4,%xmm8,%xmm8 + shrdl $7,%ecx,%ecx + xorl %ebp,%edi + movl %ebx,%esi + addl 36(%rsp),%eax + vpxor %xmm8,%xmm6,%xmm6 + xorl %edx,%ecx + shldl $5,%ebx,%ebx + vmovdqa %xmm9,16(%rsp) + addl %edi,%eax + andl %ecx,%esi + vpsrld $31,%xmm6,%xmm8 + xorl %edx,%ecx + addl %ebx,%eax + shrdl $7,%ebx,%ebx + xorl %edx,%esi + vpslldq $12,%xmm6,%xmm10 + vpaddd %xmm6,%xmm6,%xmm6 + movl %eax,%edi + addl 40(%rsp),%ebp + xorl %ecx,%ebx + shldl $5,%eax,%eax + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm6,%xmm6 + addl %esi,%ebp + andl %ebx,%edi + xorl %ecx,%ebx + addl %eax,%ebp + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm6,%xmm6 + shrdl $7,%eax,%eax + xorl %ecx,%edi + movl %ebp,%esi + addl 44(%rsp),%edx + vpxor %xmm10,%xmm6,%xmm6 + xorl %ebx,%eax + shldl $5,%ebp,%ebp + addl %edi,%edx + andl %eax,%esi + xorl %ebx,%eax + addl %ebp,%edx + shrdl $7,%ebp,%ebp + xorl %ebx,%esi + vpalignr $8,%xmm3,%xmm4,%xmm7 + movl %edx,%edi + addl 48(%rsp),%ecx + vpaddd %xmm6,%xmm11,%xmm9 + xorl %eax,%ebp + shldl $5,%edx,%edx + vpsrldq $4,%xmm6,%xmm8 + addl %esi,%ecx + andl %ebp,%edi + vpxor %xmm3,%xmm7,%xmm7 + xorl %eax,%ebp + addl %edx,%ecx + vpxor %xmm5,%xmm8,%xmm8 + shrdl $7,%edx,%edx + xorl %eax,%edi + movl %ecx,%esi + addl 52(%rsp),%ebx + vpxor %xmm8,%xmm7,%xmm7 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + vmovdqa %xmm9,32(%rsp) + addl %edi,%ebx + andl %edx,%esi + vpsrld $31,%xmm7,%xmm8 + xorl %ebp,%edx + addl %ecx,%ebx + shrdl $7,%ecx,%ecx + xorl %ebp,%esi + vpslldq $12,%xmm7,%xmm10 + vpaddd %xmm7,%xmm7,%xmm7 + movl %ebx,%edi + addl 56(%rsp),%eax + xorl %edx,%ecx + shldl $5,%ebx,%ebx + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm7,%xmm7 + addl %esi,%eax + andl %ecx,%edi + xorl %edx,%ecx + addl %ebx,%eax + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm7,%xmm7 + shrdl $7,%ebx,%ebx + xorl %edx,%edi + movl %eax,%esi + addl 60(%rsp),%ebp + vpxor %xmm10,%xmm7,%xmm7 + xorl %ecx,%ebx + shldl $5,%eax,%eax + addl %edi,%ebp + andl %ebx,%esi + xorl %ecx,%ebx + addl %eax,%ebp + vpalignr $8,%xmm6,%xmm7,%xmm8 + vpxor %xmm4,%xmm0,%xmm0 + shrdl $7,%eax,%eax + xorl %ecx,%esi + movl %ebp,%edi + addl 0(%rsp),%edx + vpxor %xmm1,%xmm0,%xmm0 + xorl %ebx,%eax + shldl $5,%ebp,%ebp + vpaddd %xmm7,%xmm11,%xmm9 + addl %esi,%edx + andl %eax,%edi + vpxor %xmm8,%xmm0,%xmm0 + xorl %ebx,%eax + addl %ebp,%edx + shrdl $7,%ebp,%ebp + xorl %ebx,%edi + vpsrld $30,%xmm0,%xmm8 + vmovdqa %xmm9,48(%rsp) + movl %edx,%esi + addl 4(%rsp),%ecx + xorl %eax,%ebp + shldl $5,%edx,%edx + vpslld $2,%xmm0,%xmm0 + addl %edi,%ecx + andl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + shrdl $7,%edx,%edx + xorl %eax,%esi + movl %ecx,%edi + addl 8(%rsp),%ebx + vpor %xmm8,%xmm0,%xmm0 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + addl %esi,%ebx + andl %edx,%edi + xorl %ebp,%edx + addl %ecx,%ebx + addl 12(%rsp),%eax + xorl %ebp,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpalignr $8,%xmm7,%xmm0,%xmm8 + vpxor %xmm5,%xmm1,%xmm1 + addl 16(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + vpxor %xmm2,%xmm1,%xmm1 + addl %esi,%ebp + xorl %ecx,%edi + vpaddd %xmm0,%xmm11,%xmm9 + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpxor %xmm8,%xmm1,%xmm1 + addl 20(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + vpsrld $30,%xmm1,%xmm8 + vmovdqa %xmm9,0(%rsp) + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpslld $2,%xmm1,%xmm1 + addl 24(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpor %xmm8,%xmm1,%xmm1 + addl 28(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpalignr $8,%xmm0,%xmm1,%xmm8 + vpxor %xmm6,%xmm2,%xmm2 + addl 32(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + vpxor %xmm3,%xmm2,%xmm2 + addl %esi,%eax + xorl %edx,%edi + vpaddd %xmm1,%xmm11,%xmm9 + vmovdqa 0(%r14),%xmm11 + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpxor %xmm8,%xmm2,%xmm2 + addl 36(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + vpsrld $30,%xmm2,%xmm8 + vmovdqa %xmm9,16(%rsp) + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpslld $2,%xmm2,%xmm2 + addl 40(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpor %xmm8,%xmm2,%xmm2 + addl 44(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpalignr $8,%xmm1,%xmm2,%xmm8 + vpxor %xmm7,%xmm3,%xmm3 + addl 48(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + vpxor %xmm4,%xmm3,%xmm3 + addl %esi,%ebx + xorl %ebp,%edi + vpaddd %xmm2,%xmm11,%xmm9 + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpxor %xmm8,%xmm3,%xmm3 + addl 52(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + vpsrld $30,%xmm3,%xmm8 + vmovdqa %xmm9,32(%rsp) + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpslld $2,%xmm3,%xmm3 + addl 56(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ecx,%edi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpor %xmm8,%xmm3,%xmm3 + addl 60(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpalignr $8,%xmm2,%xmm3,%xmm8 + vpxor %xmm0,%xmm4,%xmm4 + addl 0(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + vpxor %xmm5,%xmm4,%xmm4 + addl %esi,%ecx + xorl %eax,%edi + vpaddd %xmm3,%xmm11,%xmm9 + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpxor %xmm8,%xmm4,%xmm4 + addl 4(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + vpsrld $30,%xmm4,%xmm8 + vmovdqa %xmm9,48(%rsp) + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpslld $2,%xmm4,%xmm4 + addl 8(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpor %xmm8,%xmm4,%xmm4 + addl 12(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpalignr $8,%xmm3,%xmm4,%xmm8 + vpxor %xmm1,%xmm5,%xmm5 + addl 16(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + vpxor %xmm6,%xmm5,%xmm5 + addl %esi,%edx + xorl %ebx,%edi + vpaddd %xmm4,%xmm11,%xmm9 + shrdl $7,%eax,%eax + addl %ebp,%edx + vpxor %xmm8,%xmm5,%xmm5 + addl 20(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + vpsrld $30,%xmm5,%xmm8 + vmovdqa %xmm9,0(%rsp) + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpslld $2,%xmm5,%xmm5 + addl 24(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpor %xmm8,%xmm5,%xmm5 + addl 28(%rsp),%eax + shrdl $7,%ecx,%ecx + movl %ebx,%esi + xorl %edx,%edi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %ecx,%esi + xorl %edx,%ecx + addl %ebx,%eax + vpalignr $8,%xmm4,%xmm5,%xmm8 + vpxor %xmm2,%xmm6,%xmm6 + addl 32(%rsp),%ebp + andl %ecx,%esi + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + vpxor %xmm7,%xmm6,%xmm6 + movl %eax,%edi + xorl %ecx,%esi + vpaddd %xmm5,%xmm11,%xmm9 + shldl $5,%eax,%eax + addl %esi,%ebp + vpxor %xmm8,%xmm6,%xmm6 + xorl %ebx,%edi + xorl %ecx,%ebx + addl %eax,%ebp + addl 36(%rsp),%edx + vpsrld $30,%xmm6,%xmm8 + vmovdqa %xmm9,16(%rsp) + andl %ebx,%edi + xorl %ecx,%ebx + shrdl $7,%eax,%eax + movl %ebp,%esi + vpslld $2,%xmm6,%xmm6 + xorl %ebx,%edi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %eax,%esi + xorl %ebx,%eax + addl %ebp,%edx + addl 40(%rsp),%ecx + andl %eax,%esi + vpor %xmm8,%xmm6,%xmm6 + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + movl %edx,%edi + xorl %eax,%esi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %ebp,%edi + xorl %eax,%ebp + addl %edx,%ecx + addl 44(%rsp),%ebx + andl %ebp,%edi + xorl %eax,%ebp + shrdl $7,%edx,%edx + movl %ecx,%esi + xorl %ebp,%edi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %edx,%esi + xorl %ebp,%edx + addl %ecx,%ebx + vpalignr $8,%xmm5,%xmm6,%xmm8 + vpxor %xmm3,%xmm7,%xmm7 + addl 48(%rsp),%eax + andl %edx,%esi + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + vpxor %xmm0,%xmm7,%xmm7 + movl %ebx,%edi + xorl %edx,%esi + vpaddd %xmm6,%xmm11,%xmm9 + vmovdqa 32(%r14),%xmm11 + shldl $5,%ebx,%ebx + addl %esi,%eax + vpxor %xmm8,%xmm7,%xmm7 + xorl %ecx,%edi + xorl %edx,%ecx + addl %ebx,%eax + addl 52(%rsp),%ebp + vpsrld $30,%xmm7,%xmm8 + vmovdqa %xmm9,32(%rsp) + andl %ecx,%edi + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + movl %eax,%esi + vpslld $2,%xmm7,%xmm7 + xorl %ecx,%edi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ebx,%esi + xorl %ecx,%ebx + addl %eax,%ebp + addl 56(%rsp),%edx + andl %ebx,%esi + vpor %xmm8,%xmm7,%xmm7 + xorl %ecx,%ebx + shrdl $7,%eax,%eax + movl %ebp,%edi + xorl %ebx,%esi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %eax,%edi + xorl %ebx,%eax + addl %ebp,%edx + addl 60(%rsp),%ecx + andl %eax,%edi + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + movl %edx,%esi + xorl %eax,%edi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + vpalignr $8,%xmm6,%xmm7,%xmm8 + vpxor %xmm4,%xmm0,%xmm0 + addl 0(%rsp),%ebx + andl %ebp,%esi + xorl %eax,%ebp + shrdl $7,%edx,%edx + vpxor %xmm1,%xmm0,%xmm0 + movl %ecx,%edi + xorl %ebp,%esi + vpaddd %xmm7,%xmm11,%xmm9 + shldl $5,%ecx,%ecx + addl %esi,%ebx + vpxor %xmm8,%xmm0,%xmm0 + xorl %edx,%edi + xorl %ebp,%edx + addl %ecx,%ebx + addl 4(%rsp),%eax + vpsrld $30,%xmm0,%xmm8 + vmovdqa %xmm9,48(%rsp) + andl %edx,%edi + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + movl %ebx,%esi + vpslld $2,%xmm0,%xmm0 + xorl %edx,%edi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %ecx,%esi + xorl %edx,%ecx + addl %ebx,%eax + addl 8(%rsp),%ebp + andl %ecx,%esi + vpor %xmm8,%xmm0,%xmm0 + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + movl %eax,%edi + xorl %ecx,%esi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ebx,%edi + xorl %ecx,%ebx + addl %eax,%ebp + addl 12(%rsp),%edx + andl %ebx,%edi + xorl %ecx,%ebx + shrdl $7,%eax,%eax + movl %ebp,%esi + xorl %ebx,%edi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %eax,%esi + xorl %ebx,%eax + addl %ebp,%edx + vpalignr $8,%xmm7,%xmm0,%xmm8 + vpxor %xmm5,%xmm1,%xmm1 + addl 16(%rsp),%ecx + andl %eax,%esi + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + vpxor %xmm2,%xmm1,%xmm1 + movl %edx,%edi + xorl %eax,%esi + vpaddd %xmm0,%xmm11,%xmm9 + shldl $5,%edx,%edx + addl %esi,%ecx + vpxor %xmm8,%xmm1,%xmm1 + xorl %ebp,%edi + xorl %eax,%ebp + addl %edx,%ecx + addl 20(%rsp),%ebx + vpsrld $30,%xmm1,%xmm8 + vmovdqa %xmm9,0(%rsp) + andl %ebp,%edi + xorl %eax,%ebp + shrdl $7,%edx,%edx + movl %ecx,%esi + vpslld $2,%xmm1,%xmm1 + xorl %ebp,%edi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %edx,%esi + xorl %ebp,%edx + addl %ecx,%ebx + addl 24(%rsp),%eax + andl %edx,%esi + vpor %xmm8,%xmm1,%xmm1 + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + movl %ebx,%edi + xorl %edx,%esi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %ecx,%edi + xorl %edx,%ecx + addl %ebx,%eax + addl 28(%rsp),%ebp + andl %ecx,%edi + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + movl %eax,%esi + xorl %ecx,%edi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ebx,%esi + xorl %ecx,%ebx + addl %eax,%ebp + vpalignr $8,%xmm0,%xmm1,%xmm8 + vpxor %xmm6,%xmm2,%xmm2 + addl 32(%rsp),%edx + andl %ebx,%esi + xorl %ecx,%ebx + shrdl $7,%eax,%eax + vpxor %xmm3,%xmm2,%xmm2 + movl %ebp,%edi + xorl %ebx,%esi + vpaddd %xmm1,%xmm11,%xmm9 + shldl $5,%ebp,%ebp + addl %esi,%edx + vpxor %xmm8,%xmm2,%xmm2 + xorl %eax,%edi + xorl %ebx,%eax + addl %ebp,%edx + addl 36(%rsp),%ecx + vpsrld $30,%xmm2,%xmm8 + vmovdqa %xmm9,16(%rsp) + andl %eax,%edi + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + movl %edx,%esi + vpslld $2,%xmm2,%xmm2 + xorl %eax,%edi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + addl 40(%rsp),%ebx + andl %ebp,%esi + vpor %xmm8,%xmm2,%xmm2 + xorl %eax,%ebp + shrdl $7,%edx,%edx + movl %ecx,%edi + xorl %ebp,%esi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %edx,%edi + xorl %ebp,%edx + addl %ecx,%ebx + addl 44(%rsp),%eax + andl %edx,%edi + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + movl %ebx,%esi + xorl %edx,%edi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + addl %ebx,%eax + vpalignr $8,%xmm1,%xmm2,%xmm8 + vpxor %xmm7,%xmm3,%xmm3 + addl 48(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + vpxor %xmm4,%xmm3,%xmm3 + addl %esi,%ebp + xorl %ecx,%edi + vpaddd %xmm2,%xmm11,%xmm9 + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpxor %xmm8,%xmm3,%xmm3 + addl 52(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + vpsrld $30,%xmm3,%xmm8 + vmovdqa %xmm9,32(%rsp) + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpslld $2,%xmm3,%xmm3 + addl 56(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpor %xmm8,%xmm3,%xmm3 + addl 60(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 0(%rsp),%eax + vpaddd %xmm3,%xmm11,%xmm9 + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + vmovdqa %xmm9,48(%rsp) + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 4(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 8(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 12(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + cmpq %r10,%r9 + je .Ldone_avx + vmovdqa 64(%r14),%xmm6 + vmovdqa -64(%r14),%xmm11 + vmovdqu 0(%r9),%xmm0 + vmovdqu 16(%r9),%xmm1 + vmovdqu 32(%r9),%xmm2 + vmovdqu 48(%r9),%xmm3 + vpshufb %xmm6,%xmm0,%xmm0 + addq $64,%r9 + addl 16(%rsp),%ebx + xorl %ebp,%esi + vpshufb %xmm6,%xmm1,%xmm1 + movl %ecx,%edi + shldl $5,%ecx,%ecx + vpaddd %xmm11,%xmm0,%xmm4 + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vmovdqa %xmm4,0(%rsp) + addl 20(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 24(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ecx,%edi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 28(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 32(%rsp),%ecx + xorl %eax,%esi + vpshufb %xmm6,%xmm2,%xmm2 + movl %edx,%edi + shldl $5,%edx,%edx + vpaddd %xmm11,%xmm1,%xmm5 + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vmovdqa %xmm5,16(%rsp) + addl 36(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 40(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 44(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 48(%rsp),%edx + xorl %ebx,%esi + vpshufb %xmm6,%xmm3,%xmm3 + movl %ebp,%edi + shldl $5,%ebp,%ebp + vpaddd %xmm11,%xmm2,%xmm6 + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + vmovdqa %xmm6,32(%rsp) + addl 52(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + addl 56(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 60(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 0(%r8),%eax + addl 4(%r8),%esi + addl 8(%r8),%ecx + addl 12(%r8),%edx + movl %eax,0(%r8) + addl 16(%r8),%ebp + movl %esi,4(%r8) + movl %esi,%ebx + movl %ecx,8(%r8) + movl %ecx,%edi + movl %edx,12(%r8) + xorl %edx,%edi + movl %ebp,16(%r8) + andl %edi,%esi + jmp .Loop_avx + +.p2align 4 +.Ldone_avx: + addl 16(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 20(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 24(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ecx,%edi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 28(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 32(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + addl 36(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 40(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 44(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 48(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 52(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + addl 56(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 60(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vzeroupper + + addl 0(%r8),%eax + addl 4(%r8),%esi + addl 8(%r8),%ecx + movl %eax,0(%r8) + addl 12(%r8),%edx + movl %esi,4(%r8) + addl 16(%r8),%ebp + movl %ecx,8(%r8) + movl %edx,12(%r8) + movl %ebp,16(%r8) + movaps -40-96(%r11),%xmm6 + movaps -40-80(%r11),%xmm7 + movaps -40-64(%r11),%xmm8 + movaps -40-48(%r11),%xmm9 + movaps -40-32(%r11),%xmm10 + movaps -40-16(%r11),%xmm11 + movq -40(%r11),%r14 + + movq -32(%r11),%r13 + + movq -24(%r11),%r12 + + movq -16(%r11),%rbp + + movq -8(%r11),%rbx + + leaq (%r11),%rsp + +.Lepilogue_avx: + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 + +.LSEH_end_sha1_block_data_order_avx: +.def sha1_block_data_order_avx2; .scl 3; .type 32; .endef +.p2align 4 +sha1_block_data_order_avx2: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_sha1_block_data_order_avx2: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + +_avx2_shortcut: + + movq %rsp,%r11 + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + vzeroupper + leaq -96(%rsp),%rsp + vmovaps %xmm6,-40-96(%r11) + vmovaps %xmm7,-40-80(%r11) + vmovaps %xmm8,-40-64(%r11) + vmovaps %xmm9,-40-48(%r11) + vmovaps %xmm10,-40-32(%r11) + vmovaps %xmm11,-40-16(%r11) +.Lprologue_avx2: + movq %rdi,%r8 + movq %rsi,%r9 + movq %rdx,%r10 + + leaq -640(%rsp),%rsp + shlq $6,%r10 + leaq 64(%r9),%r13 + andq $-128,%rsp + addq %r9,%r10 + leaq K_XX_XX+64(%rip),%r14 + + movl 0(%r8),%eax + cmpq %r10,%r13 + cmovaeq %r9,%r13 + movl 4(%r8),%ebp + movl 8(%r8),%ecx + movl 12(%r8),%edx + movl 16(%r8),%esi + vmovdqu 64(%r14),%ymm6 + + vmovdqu (%r9),%xmm0 + vmovdqu 16(%r9),%xmm1 + vmovdqu 32(%r9),%xmm2 + vmovdqu 48(%r9),%xmm3 + leaq 64(%r9),%r9 + vinserti128 $1,(%r13),%ymm0,%ymm0 + vinserti128 $1,16(%r13),%ymm1,%ymm1 + vpshufb %ymm6,%ymm0,%ymm0 + vinserti128 $1,32(%r13),%ymm2,%ymm2 + vpshufb %ymm6,%ymm1,%ymm1 + vinserti128 $1,48(%r13),%ymm3,%ymm3 + vpshufb %ymm6,%ymm2,%ymm2 + vmovdqu -64(%r14),%ymm11 + vpshufb %ymm6,%ymm3,%ymm3 + + vpaddd %ymm11,%ymm0,%ymm4 + vpaddd %ymm11,%ymm1,%ymm5 + vmovdqu %ymm4,0(%rsp) + vpaddd %ymm11,%ymm2,%ymm6 + vmovdqu %ymm5,32(%rsp) + vpaddd %ymm11,%ymm3,%ymm7 + vmovdqu %ymm6,64(%rsp) + vmovdqu %ymm7,96(%rsp) + vpalignr $8,%ymm0,%ymm1,%ymm4 + vpsrldq $4,%ymm3,%ymm8 + vpxor %ymm0,%ymm4,%ymm4 + vpxor %ymm2,%ymm8,%ymm8 + vpxor %ymm8,%ymm4,%ymm4 + vpsrld $31,%ymm4,%ymm8 + vpslldq $12,%ymm4,%ymm10 + vpaddd %ymm4,%ymm4,%ymm4 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm4,%ymm4 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm4,%ymm4 + vpxor %ymm10,%ymm4,%ymm4 + vpaddd %ymm11,%ymm4,%ymm9 + vmovdqu %ymm9,128(%rsp) + vpalignr $8,%ymm1,%ymm2,%ymm5 + vpsrldq $4,%ymm4,%ymm8 + vpxor %ymm1,%ymm5,%ymm5 + vpxor %ymm3,%ymm8,%ymm8 + vpxor %ymm8,%ymm5,%ymm5 + vpsrld $31,%ymm5,%ymm8 + vmovdqu -32(%r14),%ymm11 + vpslldq $12,%ymm5,%ymm10 + vpaddd %ymm5,%ymm5,%ymm5 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm5,%ymm5 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm5,%ymm5 + vpxor %ymm10,%ymm5,%ymm5 + vpaddd %ymm11,%ymm5,%ymm9 + vmovdqu %ymm9,160(%rsp) + vpalignr $8,%ymm2,%ymm3,%ymm6 + vpsrldq $4,%ymm5,%ymm8 + vpxor %ymm2,%ymm6,%ymm6 + vpxor %ymm4,%ymm8,%ymm8 + vpxor %ymm8,%ymm6,%ymm6 + vpsrld $31,%ymm6,%ymm8 + vpslldq $12,%ymm6,%ymm10 + vpaddd %ymm6,%ymm6,%ymm6 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm6,%ymm6 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm6,%ymm6 + vpxor %ymm10,%ymm6,%ymm6 + vpaddd %ymm11,%ymm6,%ymm9 + vmovdqu %ymm9,192(%rsp) + vpalignr $8,%ymm3,%ymm4,%ymm7 + vpsrldq $4,%ymm6,%ymm8 + vpxor %ymm3,%ymm7,%ymm7 + vpxor %ymm5,%ymm8,%ymm8 + vpxor %ymm8,%ymm7,%ymm7 + vpsrld $31,%ymm7,%ymm8 + vpslldq $12,%ymm7,%ymm10 + vpaddd %ymm7,%ymm7,%ymm7 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm7,%ymm7 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm7,%ymm7 + vpxor %ymm10,%ymm7,%ymm7 + vpaddd %ymm11,%ymm7,%ymm9 + vmovdqu %ymm9,224(%rsp) + leaq 128(%rsp),%r13 + jmp .Loop_avx2 +.p2align 5 +.Loop_avx2: + rorxl $2,%ebp,%ebx + andnl %edx,%ebp,%edi + andl %ecx,%ebp + xorl %edi,%ebp + jmp .Lalign32_1 +.p2align 5 +.Lalign32_1: + vpalignr $8,%ymm6,%ymm7,%ymm8 + vpxor %ymm4,%ymm0,%ymm0 + addl -128(%r13),%esi + andnl %ecx,%eax,%edi + vpxor %ymm1,%ymm0,%ymm0 + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + vpxor %ymm8,%ymm0,%ymm0 + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + vpsrld $30,%ymm0,%ymm8 + vpslld $2,%ymm0,%ymm0 + addl -124(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + vpor %ymm8,%ymm0,%ymm0 + addl %r12d,%edx + xorl %edi,%esi + addl -120(%r13),%ecx + andnl %ebp,%edx,%edi + vpaddd %ymm11,%ymm0,%ymm9 + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + vmovdqu %ymm9,256(%rsp) + addl %r12d,%ecx + xorl %edi,%edx + addl -116(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl -96(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + vpalignr $8,%ymm7,%ymm0,%ymm8 + vpxor %ymm5,%ymm1,%ymm1 + addl -92(%r13),%eax + andnl %edx,%ebp,%edi + vpxor %ymm2,%ymm1,%ymm1 + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + vpxor %ymm8,%ymm1,%ymm1 + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + vpsrld $30,%ymm1,%ymm8 + vpslld $2,%ymm1,%ymm1 + addl -88(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + vpor %ymm8,%ymm1,%ymm1 + addl %r12d,%esi + xorl %edi,%eax + addl -84(%r13),%edx + andnl %ebx,%esi,%edi + vpaddd %ymm11,%ymm1,%ymm9 + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + vmovdqu %ymm9,288(%rsp) + addl %r12d,%edx + xorl %edi,%esi + addl -64(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -60(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + vpalignr $8,%ymm0,%ymm1,%ymm8 + vpxor %ymm6,%ymm2,%ymm2 + addl -56(%r13),%ebp + andnl %esi,%ebx,%edi + vpxor %ymm3,%ymm2,%ymm2 + vmovdqu 0(%r14),%ymm11 + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + vpxor %ymm8,%ymm2,%ymm2 + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + vpsrld $30,%ymm2,%ymm8 + vpslld $2,%ymm2,%ymm2 + addl -52(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + vpor %ymm8,%ymm2,%ymm2 + addl %r12d,%eax + xorl %edi,%ebp + addl -32(%r13),%esi + andnl %ecx,%eax,%edi + vpaddd %ymm11,%ymm2,%ymm9 + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + vmovdqu %ymm9,320(%rsp) + addl %r12d,%esi + xorl %edi,%eax + addl -28(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -24(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + vpalignr $8,%ymm1,%ymm2,%ymm8 + vpxor %ymm7,%ymm3,%ymm3 + addl -20(%r13),%ebx + andnl %eax,%ecx,%edi + vpxor %ymm4,%ymm3,%ymm3 + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + vpxor %ymm8,%ymm3,%ymm3 + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + vpsrld $30,%ymm3,%ymm8 + vpslld $2,%ymm3,%ymm3 + addl 0(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + vpor %ymm8,%ymm3,%ymm3 + addl %r12d,%ebp + xorl %edi,%ebx + addl 4(%r13),%eax + andnl %edx,%ebp,%edi + vpaddd %ymm11,%ymm3,%ymm9 + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + vmovdqu %ymm9,352(%rsp) + addl %r12d,%eax + xorl %edi,%ebp + addl 8(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl 12(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + vpalignr $8,%ymm2,%ymm3,%ymm8 + vpxor %ymm0,%ymm4,%ymm4 + addl 32(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + vpxor %ymm5,%ymm4,%ymm4 + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + vpxor %ymm8,%ymm4,%ymm4 + addl %r12d,%ecx + xorl %ebp,%edx + addl 36(%r13),%ebx + vpsrld $30,%ymm4,%ymm8 + vpslld $2,%ymm4,%ymm4 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + vpor %ymm8,%ymm4,%ymm4 + addl 40(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + vpaddd %ymm11,%ymm4,%ymm9 + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 44(%r13),%eax + vmovdqu %ymm9,384(%rsp) + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl 64(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vpalignr $8,%ymm3,%ymm4,%ymm8 + vpxor %ymm1,%ymm5,%ymm5 + addl 68(%r13),%edx + leal (%rdx,%rax,1),%edx + vpxor %ymm6,%ymm5,%ymm5 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + vpxor %ymm8,%ymm5,%ymm5 + addl %r12d,%edx + xorl %ebx,%esi + addl 72(%r13),%ecx + vpsrld $30,%ymm5,%ymm8 + vpslld $2,%ymm5,%ymm5 + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + vpor %ymm8,%ymm5,%ymm5 + addl 76(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + vpaddd %ymm11,%ymm5,%ymm9 + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl 96(%r13),%ebp + vmovdqu %ymm9,416(%rsp) + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 100(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpalignr $8,%ymm4,%ymm5,%ymm8 + vpxor %ymm2,%ymm6,%ymm6 + addl 104(%r13),%esi + leal (%rsi,%rbp,1),%esi + vpxor %ymm7,%ymm6,%ymm6 + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + vpxor %ymm8,%ymm6,%ymm6 + addl %r12d,%esi + xorl %ecx,%eax + addl 108(%r13),%edx + leaq 256(%r13),%r13 + vpsrld $30,%ymm6,%ymm8 + vpslld $2,%ymm6,%ymm6 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + vpor %ymm8,%ymm6,%ymm6 + addl -128(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + vpaddd %ymm11,%ymm6,%ymm9 + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -124(%r13),%ebx + vmovdqu %ymm9,448(%rsp) + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -120(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vpalignr $8,%ymm5,%ymm6,%ymm8 + vpxor %ymm3,%ymm7,%ymm7 + addl -116(%r13),%eax + leal (%rax,%rbx,1),%eax + vpxor %ymm0,%ymm7,%ymm7 + vmovdqu 32(%r14),%ymm11 + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + vpxor %ymm8,%ymm7,%ymm7 + addl %r12d,%eax + xorl %edx,%ebp + addl -96(%r13),%esi + vpsrld $30,%ymm7,%ymm8 + vpslld $2,%ymm7,%ymm7 + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vpor %ymm8,%ymm7,%ymm7 + addl -92(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpaddd %ymm11,%ymm7,%ymm9 + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -88(%r13),%ecx + vmovdqu %ymm9,480(%rsp) + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -84(%r13),%ebx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + jmp .Lalign32_2 +.p2align 5 +.Lalign32_2: + vpalignr $8,%ymm6,%ymm7,%ymm8 + vpxor %ymm4,%ymm0,%ymm0 + addl -64(%r13),%ebp + xorl %esi,%ecx + vpxor %ymm1,%ymm0,%ymm0 + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + vpxor %ymm8,%ymm0,%ymm0 + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + vpsrld $30,%ymm0,%ymm8 + vpslld $2,%ymm0,%ymm0 + addl %r12d,%ebp + andl %edi,%ebx + addl -60(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + vpor %ymm8,%ymm0,%ymm0 + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + vpaddd %ymm11,%ymm0,%ymm9 + addl %r12d,%eax + andl %edi,%ebp + addl -56(%r13),%esi + xorl %ecx,%ebp + vmovdqu %ymm9,512(%rsp) + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl -52(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + andl %edi,%esi + addl -32(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + andl %edi,%edx + vpalignr $8,%ymm7,%ymm0,%ymm8 + vpxor %ymm5,%ymm1,%ymm1 + addl -28(%r13),%ebx + xorl %eax,%edx + vpxor %ymm2,%ymm1,%ymm1 + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + vpxor %ymm8,%ymm1,%ymm1 + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + vpsrld $30,%ymm1,%ymm8 + vpslld $2,%ymm1,%ymm1 + addl %r12d,%ebx + andl %edi,%ecx + addl -24(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + vpor %ymm8,%ymm1,%ymm1 + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + vpaddd %ymm11,%ymm1,%ymm9 + addl %r12d,%ebp + andl %edi,%ebx + addl -20(%r13),%eax + xorl %edx,%ebx + vmovdqu %ymm9,544(%rsp) + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 0(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl 4(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + andl %edi,%esi + vpalignr $8,%ymm0,%ymm1,%ymm8 + vpxor %ymm6,%ymm2,%ymm2 + addl 8(%r13),%ecx + xorl %ebp,%esi + vpxor %ymm3,%ymm2,%ymm2 + movl %eax,%edi + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + vpxor %ymm8,%ymm2,%ymm2 + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + vpsrld $30,%ymm2,%ymm8 + vpslld $2,%ymm2,%ymm2 + addl %r12d,%ecx + andl %edi,%edx + addl 12(%r13),%ebx + xorl %eax,%edx + movl %esi,%edi + xorl %eax,%edi + vpor %ymm8,%ymm2,%ymm2 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + vpaddd %ymm11,%ymm2,%ymm9 + addl %r12d,%ebx + andl %edi,%ecx + addl 32(%r13),%ebp + xorl %esi,%ecx + vmovdqu %ymm9,576(%rsp) + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 36(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 40(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + vpalignr $8,%ymm1,%ymm2,%ymm8 + vpxor %ymm7,%ymm3,%ymm3 + addl 44(%r13),%edx + xorl %ebx,%eax + vpxor %ymm4,%ymm3,%ymm3 + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + vpxor %ymm8,%ymm3,%ymm3 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + vpsrld $30,%ymm3,%ymm8 + vpslld $2,%ymm3,%ymm3 + addl %r12d,%edx + andl %edi,%esi + addl 64(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + xorl %ebp,%edi + vpor %ymm8,%ymm3,%ymm3 + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + vpaddd %ymm11,%ymm3,%ymm9 + addl %r12d,%ecx + andl %edi,%edx + addl 68(%r13),%ebx + xorl %eax,%edx + vmovdqu %ymm9,608(%rsp) + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + addl 72(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 76(%r13),%eax + xorl %edx,%ebx + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl 96(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl 100(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl 104(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl 108(%r13),%ebx + leaq 256(%r13),%r13 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -128(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -124(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -120(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -116(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -96(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -92(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -88(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -84(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -64(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -60(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -56(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -52(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -32(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -28(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -24(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -20(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + addl %r12d,%edx + leaq 128(%r9),%r13 + leaq 128(%r9),%rdi + cmpq %r10,%r13 + cmovaeq %r9,%r13 + + + addl 0(%r8),%edx + addl 4(%r8),%esi + addl 8(%r8),%ebp + movl %edx,0(%r8) + addl 12(%r8),%ebx + movl %esi,4(%r8) + movl %edx,%eax + addl 16(%r8),%ecx + movl %ebp,%r12d + movl %ebp,8(%r8) + movl %ebx,%edx + + movl %ebx,12(%r8) + movl %esi,%ebp + movl %ecx,16(%r8) + + movl %ecx,%esi + movl %r12d,%ecx + + + cmpq %r10,%r9 + je .Ldone_avx2 + vmovdqu 64(%r14),%ymm6 + cmpq %r10,%rdi + ja .Last_avx2 + + vmovdqu -64(%rdi),%xmm0 + vmovdqu -48(%rdi),%xmm1 + vmovdqu -32(%rdi),%xmm2 + vmovdqu -16(%rdi),%xmm3 + vinserti128 $1,0(%r13),%ymm0,%ymm0 + vinserti128 $1,16(%r13),%ymm1,%ymm1 + vinserti128 $1,32(%r13),%ymm2,%ymm2 + vinserti128 $1,48(%r13),%ymm3,%ymm3 + jmp .Last_avx2 + +.p2align 5 +.Last_avx2: + leaq 128+16(%rsp),%r13 + rorxl $2,%ebp,%ebx + andnl %edx,%ebp,%edi + andl %ecx,%ebp + xorl %edi,%ebp + subq $-128,%r9 + addl -128(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl -124(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -120(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -116(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl -96(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + addl -92(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + addl -88(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl -84(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -64(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -60(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl -56(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + addl -52(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + addl -32(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl -28(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -24(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -20(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl 0(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + addl 4(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + addl 8(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl 12(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl 32(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl 36(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl 40(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 44(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl 64(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vmovdqu -64(%r14),%ymm11 + vpshufb %ymm6,%ymm0,%ymm0 + addl 68(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl 72(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl 76(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl 96(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 100(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpshufb %ymm6,%ymm1,%ymm1 + vpaddd %ymm11,%ymm0,%ymm8 + addl 104(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl 108(%r13),%edx + leaq 256(%r13),%r13 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -128(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -124(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -120(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vmovdqu %ymm8,0(%rsp) + vpshufb %ymm6,%ymm2,%ymm2 + vpaddd %ymm11,%ymm1,%ymm9 + addl -116(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -96(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -92(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -88(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -84(%r13),%ebx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + vmovdqu %ymm9,32(%rsp) + vpshufb %ymm6,%ymm3,%ymm3 + vpaddd %ymm11,%ymm2,%ymm6 + addl -64(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl -60(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl -56(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi xorl %ecx,%edi - movl %eax,%esi - roll $5,%eax - addl %edi,%ebp - xorl %ecx,%esi - rorl $7,%ebx - addl %eax,%ebp - addl 48(%rsp),%edx - xorl %ebx,%esi -.byte 102,15,56,0,222 + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl -52(%r13),%edx + xorl %ebx,%eax movl %ebp,%edi - roll $5,%ebp - paddd %xmm9,%xmm2 - addl %esi,%edx xorl %ebx,%edi - rorl $7,%eax - addl %ebp,%edx - movdqa %xmm2,32(%rsp) - addl 52(%rsp),%ecx - xorl %eax,%edi - psubd %xmm9,%xmm2 - movl %edx,%esi - roll $5,%edx - addl %edi,%ecx - xorl %eax,%esi - rorl $7,%ebp - addl %edx,%ecx - addl 56(%rsp),%ebx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax xorl %ebp,%esi - movl %ecx,%edi - roll $5,%ecx - addl %esi,%ebx - xorl %ebp,%edi - rorl $7,%edx - addl %ecx,%ebx - addl 60(%rsp),%eax - xorl %edx,%edi - movl %ebx,%esi - roll $5,%ebx - addl %edi,%eax - rorl $7,%ecx - addl %ebx,%eax - addl 0(%r8),%eax - addl 4(%r8),%esi - addl 8(%r8),%ecx - addl 12(%r8),%edx - movl %eax,0(%r8) - addl 16(%r8),%ebp - movl %esi,4(%r8) - movl %esi,%ebx - movl %ecx,8(%r8) - movl %ecx,%edi - movl %edx,12(%r8) - xorl %edx,%edi - movl %ebp,16(%r8) + addl %r12d,%edx andl %edi,%esi - jmp .Loop_ssse3 - -.p2align 4 -.Ldone_ssse3: - addl 16(%rsp),%ebx + addl -32(%r13),%ecx xorl %ebp,%esi - movl %ecx,%edi - roll $5,%ecx - addl %esi,%ebx + movl %eax,%edi xorl %ebp,%edi - rorl $7,%edx - addl %ecx,%ebx - addl 20(%rsp),%eax + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + andl %edi,%edx + jmp .Lalign32_3 +.p2align 5 +.Lalign32_3: + vmovdqu %ymm6,64(%rsp) + vpaddd %ymm11,%ymm3,%ymm7 + addl -28(%r13),%ebx + xorl %eax,%edx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + addl -24(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl -20(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi xorl %edx,%edi - movl %ebx,%esi - roll $5,%ebx - addl %edi,%eax - xorl %edx,%esi - rorl $7,%ecx - addl %ebx,%eax - addl 24(%rsp),%ebp - xorl %ecx,%esi - movl %eax,%edi - roll $5,%eax - addl %esi,%ebp + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 0(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi xorl %ecx,%edi - rorl $7,%ebx - addl %eax,%ebp - addl 28(%rsp),%edx + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl 4(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi xorl %ebx,%edi - movl %ebp,%esi - roll $5,%ebp - addl %edi,%edx - xorl %ebx,%esi - rorl $7,%eax - addl %ebp,%edx - addl 32(%rsp),%ecx - xorl %eax,%esi - movl %edx,%edi - roll $5,%edx - addl %esi,%ecx - xorl %eax,%edi - rorl $7,%ebp - addl %edx,%ecx - addl 36(%rsp),%ebx - xorl %ebp,%edi - movl %ecx,%esi - roll $5,%ecx - addl %edi,%ebx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax xorl %ebp,%esi - rorl $7,%edx - addl %ecx,%ebx - addl 40(%rsp),%eax - xorl %edx,%esi - movl %ebx,%edi - roll $5,%ebx - addl %esi,%eax + addl %r12d,%edx + andl %edi,%esi + vmovdqu %ymm7,96(%rsp) + addl 8(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + andl %edi,%edx + addl 12(%r13),%ebx + xorl %eax,%edx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + addl 32(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 36(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi xorl %edx,%edi - rorl $7,%ecx - addl %ebx,%eax - addl 44(%rsp),%ebp + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 40(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi xorl %ecx,%edi - movl %eax,%esi - roll $5,%eax - addl %edi,%ebp - xorl %ecx,%esi - rorl $7,%ebx - addl %eax,%ebp - addl 48(%rsp),%edx - xorl %ebx,%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + vpalignr $8,%ymm0,%ymm1,%ymm4 + addl 44(%r13),%edx + xorl %ebx,%eax movl %ebp,%edi - roll $5,%ebp - addl %esi,%edx xorl %ebx,%edi - rorl $7,%eax - addl %ebp,%edx - addl 52(%rsp),%ecx - xorl %eax,%edi - movl %edx,%esi - roll $5,%edx - addl %edi,%ecx - xorl %eax,%esi - rorl $7,%ebp - addl %edx,%ecx - addl 56(%rsp),%ebx + vpsrldq $4,%ymm3,%ymm8 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpxor %ymm0,%ymm4,%ymm4 + vpxor %ymm2,%ymm8,%ymm8 xorl %ebp,%esi - movl %ecx,%edi - roll $5,%ecx - addl %esi,%ebx + addl %r12d,%edx + vpxor %ymm8,%ymm4,%ymm4 + andl %edi,%esi + addl 64(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + vpsrld $31,%ymm4,%ymm8 xorl %ebp,%edi - rorl $7,%edx - addl %ecx,%ebx - addl 60(%rsp),%eax - xorl %edx,%edi - movl %ebx,%esi - roll $5,%ebx - addl %edi,%eax - rorl $7,%ecx - addl %ebx,%eax - addl 0(%r8),%eax + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + vpslldq $12,%ymm4,%ymm10 + vpaddd %ymm4,%ymm4,%ymm4 + rorxl $2,%edx,%esi + xorl %eax,%edx + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm4,%ymm4 + addl %r12d,%ecx + andl %edi,%edx + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm4,%ymm4 + addl 68(%r13),%ebx + xorl %eax,%edx + vpxor %ymm10,%ymm4,%ymm4 + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + vpaddd %ymm11,%ymm4,%ymm9 + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + vmovdqu %ymm9,128(%rsp) + addl %r12d,%ebx + andl %edi,%ecx + addl 72(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 76(%r13),%eax + xorl %edx,%ebx + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpalignr $8,%ymm1,%ymm2,%ymm5 + addl 96(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + vpsrldq $4,%ymm4,%ymm8 + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vpxor %ymm1,%ymm5,%ymm5 + vpxor %ymm3,%ymm8,%ymm8 + addl 100(%r13),%edx + leal (%rdx,%rax,1),%edx + vpxor %ymm8,%ymm5,%ymm5 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + vpsrld $31,%ymm5,%ymm8 + vmovdqu -32(%r14),%ymm11 + xorl %ebx,%esi + addl 104(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + vpslldq $12,%ymm5,%ymm10 + vpaddd %ymm5,%ymm5,%ymm5 + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm5,%ymm5 + xorl %eax,%edx + addl %r12d,%ecx + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm5,%ymm5 + xorl %ebp,%edx + addl 108(%r13),%ebx + leaq 256(%r13),%r13 + vpxor %ymm10,%ymm5,%ymm5 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + vpaddd %ymm11,%ymm5,%ymm9 + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + vmovdqu %ymm9,160(%rsp) + addl -128(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vpalignr $8,%ymm2,%ymm3,%ymm6 + addl -124(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + vpsrldq $4,%ymm5,%ymm8 + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpxor %ymm2,%ymm6,%ymm6 + vpxor %ymm4,%ymm8,%ymm8 + addl -120(%r13),%esi + leal (%rsi,%rbp,1),%esi + vpxor %ymm8,%ymm6,%ymm6 + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + vpsrld $31,%ymm6,%ymm8 + xorl %ecx,%eax + addl -116(%r13),%edx + leal (%rdx,%rax,1),%edx + vpslldq $12,%ymm6,%ymm10 + vpaddd %ymm6,%ymm6,%ymm6 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm6,%ymm6 + xorl %ebp,%esi + addl %r12d,%edx + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm6,%ymm6 + xorl %ebx,%esi + addl -96(%r13),%ecx + vpxor %ymm10,%ymm6,%ymm6 + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + vpaddd %ymm11,%ymm6,%ymm9 + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + vmovdqu %ymm9,192(%rsp) + addl -92(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + vpalignr $8,%ymm3,%ymm4,%ymm7 + addl -88(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + vpsrldq $4,%ymm6,%ymm8 + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vpxor %ymm3,%ymm7,%ymm7 + vpxor %ymm5,%ymm8,%ymm8 + addl -84(%r13),%eax + leal (%rax,%rbx,1),%eax + vpxor %ymm8,%ymm7,%ymm7 + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + vpsrld $31,%ymm7,%ymm8 + xorl %edx,%ebp + addl -64(%r13),%esi + leal (%rsi,%rbp,1),%esi + vpslldq $12,%ymm7,%ymm10 + vpaddd %ymm7,%ymm7,%ymm7 + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm7,%ymm7 + xorl %ebx,%eax + addl %r12d,%esi + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm7,%ymm7 + xorl %ecx,%eax + addl -60(%r13),%edx + vpxor %ymm10,%ymm7,%ymm7 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpaddd %ymm11,%ymm7,%ymm9 + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + vmovdqu %ymm9,224(%rsp) + addl -56(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -52(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -32(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -28(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -24(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -20(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + addl %r12d,%edx + leaq 128(%rsp),%r13 + + + addl 0(%r8),%edx addl 4(%r8),%esi - addl 8(%r8),%ecx - movl %eax,0(%r8) - addl 12(%r8),%edx + addl 8(%r8),%ebp + movl %edx,0(%r8) + addl 12(%r8),%ebx movl %esi,4(%r8) - addl 16(%r8),%ebp - movl %ecx,8(%r8) - movl %edx,12(%r8) - movl %ebp,16(%r8) - movaps 64+0(%rsp),%xmm6 - movaps 64+16(%rsp),%xmm7 - movaps 64+32(%rsp),%xmm8 - movaps 64+48(%rsp),%xmm9 - movaps 64+64(%rsp),%xmm10 - movaps 64+80(%rsp),%xmm11 - leaq 160(%rsp),%rsi - movq 0(%rsi),%r12 - movq 8(%rsi),%rbp - movq 16(%rsi),%rbx - leaq 24(%rsi),%rsp -.Lepilogue_ssse3: + movl %edx,%eax + addl 16(%r8),%ecx + movl %ebp,%r12d + movl %ebp,8(%r8) + movl %ebx,%edx + + movl %ebx,12(%r8) + movl %esi,%ebp + movl %ecx,16(%r8) + + movl %ecx,%esi + movl %r12d,%ecx + + + cmpq %r10,%r9 + jbe .Loop_avx2 + +.Ldone_avx2: + vzeroupper + movaps -40-96(%r11),%xmm6 + movaps -40-80(%r11),%xmm7 + movaps -40-64(%r11),%xmm8 + movaps -40-48(%r11),%xmm9 + movaps -40-32(%r11),%xmm10 + movaps -40-16(%r11),%xmm11 + movq -40(%r11),%r14 + + movq -32(%r11),%r13 + + movq -24(%r11),%r12 + + movq -16(%r11),%rbp + + movq -8(%r11),%rbx + + leaq (%r11),%rsp + +.Lepilogue_avx2: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 -.LSEH_end_sha1_block_data_order_ssse3: + +.LSEH_end_sha1_block_data_order_avx2: .p2align 6 K_XX_XX: -.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 -.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 -.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc -.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 -.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 +.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 +.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 +.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 +.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc +.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc +.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 +.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0 .byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .p2align 6 @@ -2567,19 +5618,51 @@ se_handler: jae .Lcommon_seh_tail movq 64(%rax),%rax - leaq 32(%rax),%rax movq -8(%rax),%rbx movq -16(%rax),%rbp movq -24(%rax),%r12 movq -32(%rax),%r13 + movq -40(%rax),%r14 movq %rbx,144(%r8) movq %rbp,160(%r8) movq %r12,216(%r8) movq %r13,224(%r8) + movq %r14,232(%r8) jmp .Lcommon_seh_tail +.def shaext_handler; .scl 3; .type 32; .endef +.p2align 4 +shaext_handler: + pushq %rsi + pushq %rdi + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + pushfq + subq $64,%rsp + + movq 120(%r8),%rax + movq 248(%r8),%rbx + + leaq .Lprologue_shaext(%rip),%r10 + cmpq %r10,%rbx + jb .Lcommon_seh_tail + + leaq .Lepilogue_shaext(%rip),%r10 + cmpq %r10,%rbx + jae .Lcommon_seh_tail + + leaq -8-64(%rax),%rsi + leaq 512(%r8),%rdi + movl $8,%ecx +.long 0xa548f3fc + + jmp .Lcommon_seh_tail .def ssse3_handler; .scl 3; .type 32; .endef .p2align 4 @@ -2606,25 +5689,28 @@ ssse3_handler: cmpq %r10,%rbx jb .Lcommon_seh_tail - movq 152(%r8),%rax + movq 208(%r8),%rax movl 4(%r11),%r10d leaq (%rsi,%r10,1),%r10 cmpq %r10,%rbx jae .Lcommon_seh_tail - leaq 64(%rax),%rsi + leaq -40-96(%rax),%rsi leaq 512(%r8),%rdi movl $12,%ecx -.long 0xa548f3fc - leaq 184(%rax),%rax +.long 0xa548f3fc movq -8(%rax),%rbx movq -16(%rax),%rbp movq -24(%rax),%r12 + movq -32(%rax),%r13 + movq -40(%rax),%r14 movq %rbx,144(%r8) movq %rbp,160(%r8) movq %r12,216(%r8) + movq %r13,224(%r8) + movq %r14,232(%r8) .Lcommon_seh_tail: movq 8(%rax),%rdi @@ -2636,7 +5722,7 @@ ssse3_handler: movq 40(%r9),%rdi movq %r8,%rsi movl $154,%ecx -.long 0xa548f3fc +.long 0xa548f3fc movq %r9,%rsi xorq %rcx,%rcx @@ -2671,16 +5757,36 @@ ssse3_handler: .rva .LSEH_begin_sha1_block_data_order .rva .LSEH_end_sha1_block_data_order .rva .LSEH_info_sha1_block_data_order +.rva .LSEH_begin_sha1_block_data_order_shaext +.rva .LSEH_end_sha1_block_data_order_shaext +.rva .LSEH_info_sha1_block_data_order_shaext .rva .LSEH_begin_sha1_block_data_order_ssse3 .rva .LSEH_end_sha1_block_data_order_ssse3 .rva .LSEH_info_sha1_block_data_order_ssse3 +.rva .LSEH_begin_sha1_block_data_order_avx +.rva .LSEH_end_sha1_block_data_order_avx +.rva .LSEH_info_sha1_block_data_order_avx +.rva .LSEH_begin_sha1_block_data_order_avx2 +.rva .LSEH_end_sha1_block_data_order_avx2 +.rva .LSEH_info_sha1_block_data_order_avx2 .section .xdata .p2align 3 .LSEH_info_sha1_block_data_order: .byte 9,0,0,0 .rva se_handler +.LSEH_info_sha1_block_data_order_shaext: +.byte 9,0,0,0 +.rva shaext_handler .LSEH_info_sha1_block_data_order_ssse3: .byte 9,0,0,0 .rva ssse3_handler -.rva .Lprologue_ssse3,.Lepilogue_ssse3 +.rva .Lprologue_ssse3,.Lepilogue_ssse3 +.LSEH_info_sha1_block_data_order_avx: +.byte 9,0,0,0 +.rva ssse3_handler +.rva .Lprologue_avx,.Lepilogue_avx +.LSEH_info_sha1_block_data_order_avx2: +.byte 9,0,0,0 +.rva ssse3_handler +.rva .Lprologue_avx2,.Lepilogue_avx2 diff --git a/lib/accelerated/x86/coff/sha256-ssse3-x86.s b/lib/accelerated/x86/coff/sha256-ssse3-x86.s index eaa435408e..05cd61d1b1 100644 --- a/lib/accelerated/x86/coff/sha256-ssse3-x86.s +++ b/lib/accelerated/x86/coff/sha256-ssse3-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "sha512-586.s" .text .globl _sha256_block_data_order .def _sha256_block_data_order; .scl 2; .type 32; .endef @@ -64,20 +63,6 @@ _sha256_block_data_order: movl %edi,4(%esp) movl %eax,8(%esp) movl %ebx,12(%esp) - leal __gnutls_x86_cpuid_s-.L001K256(%ebp),%edx - movl (%edx),%ecx - movl 4(%edx),%edx - testl $1048576,%ecx - jnz .L002loop - testl $2048,%edx - andl $1073741824,%ecx - andl $268435456,%edx - orl %edx,%ecx - cmpl $1342177280,%ecx - je .L003loop_shrd - subl %edi,%eax - cmpl $256,%eax - jae .L004unrolled jmp .L002loop .align 16 .L002loop: @@ -149,7 +134,7 @@ _sha256_block_data_order: movl %ecx,28(%esp) movl %edi,32(%esp) .align 16 -.L00500_15: +.L00300_15: movl %edx,%ecx movl 24(%esp),%esi rorl $14,%ecx @@ -187,11 +172,11 @@ _sha256_block_data_order: addl $4,%ebp addl %ebx,%eax cmpl $3248222580,%esi - jne .L00500_15 + jne .L00300_15 movl 156(%esp),%ecx - jmp .L00616_63 + jmp .L00416_63 .align 16 -.L00616_63: +.L00416_63: movl %ecx,%ebx movl 104(%esp),%esi rorl $11,%ecx @@ -246,7 +231,7 @@ _sha256_block_data_order: addl $4,%ebp addl %ebx,%eax cmpl $3329325298,%esi - jne .L00616_63 + jne .L00416_63 movl 356(%esp),%esi movl 8(%esp),%ebx movl 16(%esp),%ecx @@ -280,8 +265,8 @@ _sha256_block_data_order: popl %ebx popl %ebp ret -.align 16 -.L003loop_shrd: +.align 32 +.L005loop_shrd: movl (%edi),%eax movl 4(%edi),%ebx movl 8(%edi),%ecx @@ -350,7 +335,7 @@ _sha256_block_data_order: movl %ecx,28(%esp) movl %edi,32(%esp) .align 16 -.L00700_15_shrd: +.L00600_15_shrd: movl %edx,%ecx movl 24(%esp),%esi shrdl $14,%ecx,%ecx @@ -388,11 +373,11 @@ _sha256_block_data_order: addl $4,%ebp addl %ebx,%eax cmpl $3248222580,%esi - jne .L00700_15_shrd + jne .L00600_15_shrd movl 156(%esp),%ecx - jmp .L00816_63_shrd + jmp .L00716_63_shrd .align 16 -.L00816_63_shrd: +.L00716_63_shrd: movl %ecx,%ebx movl 104(%esp),%esi shrdl $11,%ecx,%ecx @@ -447,7 +432,7 @@ _sha256_block_data_order: addl $4,%ebp addl %ebx,%eax cmpl $3329325298,%esi - jne .L00816_63_shrd + jne .L00716_63_shrd movl 356(%esp),%esi movl 8(%esp),%ebx movl 16(%esp),%ecx @@ -474,7 +459,7 @@ _sha256_block_data_order: leal 356(%esp),%esp subl $256,%ebp cmpl 8(%esp),%edi - jb .L003loop_shrd + jb .L005loop_shrd movl 12(%esp),%esp popl %edi popl %esi @@ -485,8 +470,13 @@ _sha256_block_data_order: .L001K256: .long 1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298 .long 66051,67438087,134810123,202182159 +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 +.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 +.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 +.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 +.byte 62,0 .align 16 -.L004unrolled: +.L008unrolled: leal -96(%esp),%esp movl (%esi),%eax movl 4(%esi),%ebp @@ -3392,10 +3382,4 @@ _sha256_block_data_order: popl %ebx popl %ebp ret -.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 -.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 -.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 -.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 -.byte 62,0 -.comm __gnutls_x86_cpuid_s,16 diff --git a/lib/accelerated/x86/coff/sha256-ssse3-x86_64.s b/lib/accelerated/x86/coff/sha256-ssse3-x86_64.s new file mode 100644 index 0000000000..d2fc1957ea --- /dev/null +++ b/lib/accelerated/x86/coff/sha256-ssse3-x86_64.s @@ -0,0 +1,5731 @@ +# Copyright (c) 2011-2016, Andy Polyakov +# 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 copyright notices, +# 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 Andy Polyakov nor the names of its +# copyright holder and contributors may be used to endorse or +# promote products derived from this software without specific +# prior written permission. +# +# ALTERNATIVELY, provided that this notice is retained in full, this +# product may be distributed under the terms of the GNU General Public +# License (GPL), in which case the provisions of the GPL apply INSTEAD OF +# those given above. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER 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 COPYRIGHT +# OWNER 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. +# +# *** This file is auto-generated *** +# +.text + + +.globl sha256_block_data_order +.def sha256_block_data_order; .scl 2; .type 32; .endef +.p2align 4 +sha256_block_data_order: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_sha256_block_data_order: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + + + leaq _gnutls_x86_cpuid_s(%rip),%r11 + movl 0(%r11),%r9d + movl 4(%r11),%r10d + movl 8(%r11),%r11d + testl $536870912,%r11d + jnz _shaext_shortcut + andl $296,%r11d + cmpl $296,%r11d + je .Lavx2_shortcut + andl $1073741824,%r9d + andl $268435968,%r10d + orl %r9d,%r10d + cmpl $1342177792,%r10d + je .Lavx_shortcut + testl $512,%r10d + jnz .Lssse3_shortcut + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + shlq $4,%rdx + subq $64+32,%rsp + leaq (%rsi,%rdx,4),%rdx + andq $-64,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) + +.Lprologue: + + movl 0(%rdi),%eax + movl 4(%rdi),%ebx + movl 8(%rdi),%ecx + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + jmp .Lloop + +.p2align 4 +.Lloop: + movl %ebx,%edi + leaq K256(%rip),%rbp + xorl %ecx,%edi + movl 0(%rsi),%r12d + movl %r8d,%r13d + movl %eax,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,0(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + addl %r14d,%r11d + movl 4(%rsi),%r12d + movl %edx,%r13d + movl %r11d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,4(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + addl %r14d,%r10d + movl 8(%rsi),%r12d + movl %ecx,%r13d + movl %r10d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,8(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + addl %r14d,%r9d + movl 12(%rsi),%r12d + movl %ebx,%r13d + movl %r9d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,12(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + addl %r14d,%r8d + movl 16(%rsi),%r12d + movl %eax,%r13d + movl %r8d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,16(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + addl %r14d,%edx + movl 20(%rsi),%r12d + movl %r11d,%r13d + movl %edx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,20(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + addl %r14d,%ecx + movl 24(%rsi),%r12d + movl %r10d,%r13d + movl %ecx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,24(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + addl %r14d,%ebx + movl 28(%rsi),%r12d + movl %r9d,%r13d + movl %ebx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,28(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + addl %r14d,%eax + movl 32(%rsi),%r12d + movl %r8d,%r13d + movl %eax,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,32(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + addl %r14d,%r11d + movl 36(%rsi),%r12d + movl %edx,%r13d + movl %r11d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,36(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + addl %r14d,%r10d + movl 40(%rsi),%r12d + movl %ecx,%r13d + movl %r10d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,40(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + addl %r14d,%r9d + movl 44(%rsi),%r12d + movl %ebx,%r13d + movl %r9d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,44(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + addl %r14d,%r8d + movl 48(%rsi),%r12d + movl %eax,%r13d + movl %r8d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,48(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + addl %r14d,%edx + movl 52(%rsi),%r12d + movl %r11d,%r13d + movl %edx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,52(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + addl %r14d,%ecx + movl 56(%rsi),%r12d + movl %r10d,%r13d + movl %ecx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,56(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + addl %r14d,%ebx + movl 60(%rsi),%r12d + movl %r9d,%r13d + movl %ebx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,60(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + jmp .Lrounds_16_xx +.p2align 4 +.Lrounds_16_xx: + movl 4(%rsp),%r13d + movl 56(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%eax + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 36(%rsp),%r12d + + addl 0(%rsp),%r12d + movl %r8d,%r13d + addl %r15d,%r12d + movl %eax,%r14d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,0(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + movl 8(%rsp),%r13d + movl 60(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r11d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 40(%rsp),%r12d + + addl 4(%rsp),%r12d + movl %edx,%r13d + addl %edi,%r12d + movl %r11d,%r14d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,4(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + movl 12(%rsp),%r13d + movl 0(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r10d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 44(%rsp),%r12d + + addl 8(%rsp),%r12d + movl %ecx,%r13d + addl %r15d,%r12d + movl %r10d,%r14d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,8(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + movl 16(%rsp),%r13d + movl 4(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r9d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 48(%rsp),%r12d + + addl 12(%rsp),%r12d + movl %ebx,%r13d + addl %edi,%r12d + movl %r9d,%r14d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,12(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + movl 20(%rsp),%r13d + movl 8(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r8d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 52(%rsp),%r12d + + addl 16(%rsp),%r12d + movl %eax,%r13d + addl %r15d,%r12d + movl %r8d,%r14d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,16(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + movl 24(%rsp),%r13d + movl 12(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%edx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 56(%rsp),%r12d + + addl 20(%rsp),%r12d + movl %r11d,%r13d + addl %edi,%r12d + movl %edx,%r14d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,20(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + movl 28(%rsp),%r13d + movl 16(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ecx + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 60(%rsp),%r12d + + addl 24(%rsp),%r12d + movl %r10d,%r13d + addl %r15d,%r12d + movl %ecx,%r14d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,24(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + movl 32(%rsp),%r13d + movl 20(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ebx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 0(%rsp),%r12d + + addl 28(%rsp),%r12d + movl %r9d,%r13d + addl %edi,%r12d + movl %ebx,%r14d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,28(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + movl 36(%rsp),%r13d + movl 24(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%eax + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 4(%rsp),%r12d + + addl 32(%rsp),%r12d + movl %r8d,%r13d + addl %r15d,%r12d + movl %eax,%r14d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,32(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + movl 40(%rsp),%r13d + movl 28(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r11d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 8(%rsp),%r12d + + addl 36(%rsp),%r12d + movl %edx,%r13d + addl %edi,%r12d + movl %r11d,%r14d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,36(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + movl 44(%rsp),%r13d + movl 32(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r10d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 12(%rsp),%r12d + + addl 40(%rsp),%r12d + movl %ecx,%r13d + addl %r15d,%r12d + movl %r10d,%r14d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,40(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + movl 48(%rsp),%r13d + movl 36(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r9d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 16(%rsp),%r12d + + addl 44(%rsp),%r12d + movl %ebx,%r13d + addl %edi,%r12d + movl %r9d,%r14d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,44(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + movl 52(%rsp),%r13d + movl 40(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r8d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 20(%rsp),%r12d + + addl 48(%rsp),%r12d + movl %eax,%r13d + addl %r15d,%r12d + movl %r8d,%r14d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,48(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + movl 56(%rsp),%r13d + movl 44(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%edx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 24(%rsp),%r12d + + addl 52(%rsp),%r12d + movl %r11d,%r13d + addl %edi,%r12d + movl %edx,%r14d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,52(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + movl 60(%rsp),%r13d + movl 48(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ecx + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 28(%rsp),%r12d + + addl 56(%rsp),%r12d + movl %r10d,%r13d + addl %r15d,%r12d + movl %ecx,%r14d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,56(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + movl 0(%rsp),%r13d + movl 52(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ebx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 32(%rsp),%r12d + + addl 60(%rsp),%r12d + movl %r9d,%r13d + addl %edi,%r12d + movl %ebx,%r14d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,60(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + cmpb $0,3(%rbp) + jnz .Lrounds_16_xx + + movq 64+0(%rsp),%rdi + addl %r14d,%eax + leaq 64(%rsi),%rsi + + addl 0(%rdi),%eax + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + jb .Lloop + + movq 88(%rsp),%rsi + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +.Lepilogue: + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 + +.LSEH_end_sha256_block_data_order: +.p2align 6 + +K256: +.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 +.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 +.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 +.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 +.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 +.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 +.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 +.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 +.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc +.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc +.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da +.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da +.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 +.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 +.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 +.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 +.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 +.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 +.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 +.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 +.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 +.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 +.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 +.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 +.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 +.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 +.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 +.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 +.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 +.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 +.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 + +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff +.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff +.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 +.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.def sha256_block_data_order_shaext; .scl 3; .type 32; .endef +.p2align 6 +sha256_block_data_order_shaext: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_sha256_block_data_order_shaext: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + +_shaext_shortcut: + leaq -88(%rsp),%rsp + movaps %xmm6,-8-80(%rax) + movaps %xmm7,-8-64(%rax) + movaps %xmm8,-8-48(%rax) + movaps %xmm9,-8-32(%rax) + movaps %xmm10,-8-16(%rax) +.Lprologue_shaext: + leaq K256+128(%rip),%rcx + movdqu (%rdi),%xmm1 + movdqu 16(%rdi),%xmm2 + movdqa 512-128(%rcx),%xmm7 + + pshufd $0x1b,%xmm1,%xmm0 + pshufd $0xb1,%xmm1,%xmm1 + pshufd $0x1b,%xmm2,%xmm2 + movdqa %xmm7,%xmm8 +.byte 102,15,58,15,202,8 + punpcklqdq %xmm0,%xmm2 + jmp .Loop_shaext + +.p2align 4 +.Loop_shaext: + movdqu (%rsi),%xmm3 + movdqu 16(%rsi),%xmm4 + movdqu 32(%rsi),%xmm5 +.byte 102,15,56,0,223 + movdqu 48(%rsi),%xmm6 + + movdqa 0-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 102,15,56,0,231 + movdqa %xmm2,%xmm10 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + nop + movdqa %xmm1,%xmm9 +.byte 15,56,203,202 + + movdqa 32-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 102,15,56,0,239 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + leaq 64(%rsi),%rsi +.byte 15,56,204,220 +.byte 15,56,203,202 + + movdqa 64-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 102,15,56,0,247 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm6,%xmm7 +.byte 102,15,58,15,253,4 + nop + paddd %xmm7,%xmm3 +.byte 15,56,204,229 +.byte 15,56,203,202 + + movdqa 96-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 +.byte 15,56,205,222 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm3,%xmm7 +.byte 102,15,58,15,254,4 + nop + paddd %xmm7,%xmm4 +.byte 15,56,204,238 +.byte 15,56,203,202 + movdqa 128-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 15,56,205,227 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm4,%xmm7 +.byte 102,15,58,15,251,4 + nop + paddd %xmm7,%xmm5 +.byte 15,56,204,243 +.byte 15,56,203,202 + movdqa 160-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 15,56,205,236 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm5,%xmm7 +.byte 102,15,58,15,252,4 + nop + paddd %xmm7,%xmm6 +.byte 15,56,204,220 +.byte 15,56,203,202 + movdqa 192-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 15,56,205,245 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm6,%xmm7 +.byte 102,15,58,15,253,4 + nop + paddd %xmm7,%xmm3 +.byte 15,56,204,229 +.byte 15,56,203,202 + movdqa 224-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 +.byte 15,56,205,222 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm3,%xmm7 +.byte 102,15,58,15,254,4 + nop + paddd %xmm7,%xmm4 +.byte 15,56,204,238 +.byte 15,56,203,202 + movdqa 256-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 15,56,205,227 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm4,%xmm7 +.byte 102,15,58,15,251,4 + nop + paddd %xmm7,%xmm5 +.byte 15,56,204,243 +.byte 15,56,203,202 + movdqa 288-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 15,56,205,236 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm5,%xmm7 +.byte 102,15,58,15,252,4 + nop + paddd %xmm7,%xmm6 +.byte 15,56,204,220 +.byte 15,56,203,202 + movdqa 320-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 15,56,205,245 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm6,%xmm7 +.byte 102,15,58,15,253,4 + nop + paddd %xmm7,%xmm3 +.byte 15,56,204,229 +.byte 15,56,203,202 + movdqa 352-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 +.byte 15,56,205,222 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm3,%xmm7 +.byte 102,15,58,15,254,4 + nop + paddd %xmm7,%xmm4 +.byte 15,56,204,238 +.byte 15,56,203,202 + movdqa 384-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 15,56,205,227 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm4,%xmm7 +.byte 102,15,58,15,251,4 + nop + paddd %xmm7,%xmm5 +.byte 15,56,204,243 +.byte 15,56,203,202 + movdqa 416-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 15,56,205,236 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm5,%xmm7 +.byte 102,15,58,15,252,4 +.byte 15,56,203,202 + paddd %xmm7,%xmm6 + + movdqa 448-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 +.byte 15,56,205,245 + movdqa %xmm8,%xmm7 +.byte 15,56,203,202 + + movdqa 480-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 + nop +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + decq %rdx + nop +.byte 15,56,203,202 + + paddd %xmm10,%xmm2 + paddd %xmm9,%xmm1 + jnz .Loop_shaext + + pshufd $0xb1,%xmm2,%xmm2 + pshufd $0x1b,%xmm1,%xmm7 + pshufd $0xb1,%xmm1,%xmm1 + punpckhqdq %xmm2,%xmm1 +.byte 102,15,58,15,215,8 + + movdqu %xmm1,(%rdi) + movdqu %xmm2,16(%rdi) + movaps -8-80(%rax),%xmm6 + movaps -8-64(%rax),%xmm7 + movaps -8-48(%rax),%xmm8 + movaps -8-32(%rax),%xmm9 + movaps -8-16(%rax),%xmm10 + movq %rax,%rsp +.Lepilogue_shaext: + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 +.LSEH_end_sha256_block_data_order_shaext: +.def sha256_block_data_order_ssse3; .scl 3; .type 32; .endef +.p2align 6 +sha256_block_data_order_ssse3: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_sha256_block_data_order_ssse3: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + + +.Lssse3_shortcut: + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + shlq $4,%rdx + subq $160,%rsp + leaq (%rsi,%rdx,4),%rdx + andq $-64,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) + + movaps %xmm6,64+32(%rsp) + movaps %xmm7,64+48(%rsp) + movaps %xmm8,64+64(%rsp) + movaps %xmm9,64+80(%rsp) +.Lprologue_ssse3: + + movl 0(%rdi),%eax + movl 4(%rdi),%ebx + movl 8(%rdi),%ecx + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + + + jmp .Lloop_ssse3 +.p2align 4 +.Lloop_ssse3: + movdqa K256+512(%rip),%xmm7 + movdqu 0(%rsi),%xmm0 + movdqu 16(%rsi),%xmm1 + movdqu 32(%rsi),%xmm2 +.byte 102,15,56,0,199 + movdqu 48(%rsi),%xmm3 + leaq K256(%rip),%rbp +.byte 102,15,56,0,207 + movdqa 0(%rbp),%xmm4 + movdqa 32(%rbp),%xmm5 +.byte 102,15,56,0,215 + paddd %xmm0,%xmm4 + movdqa 64(%rbp),%xmm6 +.byte 102,15,56,0,223 + movdqa 96(%rbp),%xmm7 + paddd %xmm1,%xmm5 + paddd %xmm2,%xmm6 + paddd %xmm3,%xmm7 + movdqa %xmm4,0(%rsp) + movl %eax,%r14d + movdqa %xmm5,16(%rsp) + movl %ebx,%edi + movdqa %xmm6,32(%rsp) + xorl %ecx,%edi + movdqa %xmm7,48(%rsp) + movl %r8d,%r13d + jmp .Lssse3_00_47 + +.p2align 4 +.Lssse3_00_47: + subq $-128,%rbp + rorl $14,%r13d + movdqa %xmm1,%xmm4 + movl %r14d,%eax + movl %r9d,%r12d + movdqa %xmm3,%xmm7 + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d +.byte 102,15,58,15,224,4 + andl %r8d,%r12d + xorl %r8d,%r13d +.byte 102,15,58,15,250,4 + addl 0(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %ebx,%r15d + addl %r12d,%r11d + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + paddd %xmm7,%xmm0 + rorl $2,%r14d + addl %r11d,%edx + psrld $7,%xmm6 + addl %edi,%r11d + movl %edx,%r13d + pshufd $250,%xmm3,%xmm7 + addl %r11d,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%r11d + movl %r8d,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %r11d,%r14d + pxor %xmm5,%xmm4 + andl %edx,%r12d + xorl %edx,%r13d + pslld $11,%xmm5 + addl 4(%rsp),%r10d + movl %r11d,%edi + pxor %xmm6,%xmm4 + xorl %r9d,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %eax,%edi + addl %r12d,%r10d + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + psrld $10,%xmm7 + addl %r13d,%r10d + xorl %eax,%r15d + paddd %xmm4,%xmm0 + rorl $2,%r14d + addl %r10d,%ecx + psrlq $17,%xmm6 + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %ecx,%r13d + xorl %r8d,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %ecx,%r13d + addl 8(%rsp),%r9d + movl %r10d,%r15d + psrldq $8,%xmm7 + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + paddd %xmm7,%xmm0 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + pshufd $80,%xmm0,%xmm7 + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + movdqa %xmm7,%xmm6 + addl %edi,%r9d + movl %ebx,%r13d + psrld $10,%xmm7 + addl %r9d,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%r9d + movl %ecx,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + psrlq $2,%xmm6 + andl %ebx,%r12d + xorl %ebx,%r13d + addl 12(%rsp),%r8d + pxor %xmm6,%xmm7 + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %r10d,%edi + addl %r12d,%r8d + movdqa 0(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + paddd %xmm7,%xmm0 + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + paddd %xmm0,%xmm6 + movl %eax,%r13d + addl %r8d,%r14d + movdqa %xmm6,0(%rsp) + rorl $14,%r13d + movdqa %xmm2,%xmm4 + movl %r14d,%r8d + movl %ebx,%r12d + movdqa %xmm0,%xmm7 + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d +.byte 102,15,58,15,225,4 + andl %eax,%r12d + xorl %eax,%r13d +.byte 102,15,58,15,251,4 + addl 16(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %r9d,%r15d + addl %r12d,%edx + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + paddd %xmm7,%xmm1 + rorl $2,%r14d + addl %edx,%r11d + psrld $7,%xmm6 + addl %edi,%edx + movl %r11d,%r13d + pshufd $250,%xmm0,%xmm7 + addl %edx,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%edx + movl %eax,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %edx,%r14d + pxor %xmm5,%xmm4 + andl %r11d,%r12d + xorl %r11d,%r13d + pslld $11,%xmm5 + addl 20(%rsp),%ecx + movl %edx,%edi + pxor %xmm6,%xmm4 + xorl %ebx,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %r8d,%edi + addl %r12d,%ecx + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + psrld $10,%xmm7 + addl %r13d,%ecx + xorl %r8d,%r15d + paddd %xmm4,%xmm1 + rorl $2,%r14d + addl %ecx,%r10d + psrlq $17,%xmm6 + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %r10d,%r13d + xorl %eax,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %r10d,%r13d + addl 24(%rsp),%ebx + movl %ecx,%r15d + psrldq $8,%xmm7 + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + paddd %xmm7,%xmm1 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + pshufd $80,%xmm1,%xmm7 + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + movdqa %xmm7,%xmm6 + addl %edi,%ebx + movl %r9d,%r13d + psrld $10,%xmm7 + addl %ebx,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%ebx + movl %r10d,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + psrlq $2,%xmm6 + andl %r9d,%r12d + xorl %r9d,%r13d + addl 28(%rsp),%eax + pxor %xmm6,%xmm7 + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %ecx,%edi + addl %r12d,%eax + movdqa 32(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + paddd %xmm7,%xmm1 + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + paddd %xmm1,%xmm6 + movl %r8d,%r13d + addl %eax,%r14d + movdqa %xmm6,16(%rsp) + rorl $14,%r13d + movdqa %xmm3,%xmm4 + movl %r14d,%eax + movl %r9d,%r12d + movdqa %xmm1,%xmm7 + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d +.byte 102,15,58,15,226,4 + andl %r8d,%r12d + xorl %r8d,%r13d +.byte 102,15,58,15,248,4 + addl 32(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %ebx,%r15d + addl %r12d,%r11d + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + paddd %xmm7,%xmm2 + rorl $2,%r14d + addl %r11d,%edx + psrld $7,%xmm6 + addl %edi,%r11d + movl %edx,%r13d + pshufd $250,%xmm1,%xmm7 + addl %r11d,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%r11d + movl %r8d,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %r11d,%r14d + pxor %xmm5,%xmm4 + andl %edx,%r12d + xorl %edx,%r13d + pslld $11,%xmm5 + addl 36(%rsp),%r10d + movl %r11d,%edi + pxor %xmm6,%xmm4 + xorl %r9d,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %eax,%edi + addl %r12d,%r10d + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + psrld $10,%xmm7 + addl %r13d,%r10d + xorl %eax,%r15d + paddd %xmm4,%xmm2 + rorl $2,%r14d + addl %r10d,%ecx + psrlq $17,%xmm6 + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %ecx,%r13d + xorl %r8d,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %ecx,%r13d + addl 40(%rsp),%r9d + movl %r10d,%r15d + psrldq $8,%xmm7 + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + paddd %xmm7,%xmm2 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + pshufd $80,%xmm2,%xmm7 + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + movdqa %xmm7,%xmm6 + addl %edi,%r9d + movl %ebx,%r13d + psrld $10,%xmm7 + addl %r9d,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%r9d + movl %ecx,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + psrlq $2,%xmm6 + andl %ebx,%r12d + xorl %ebx,%r13d + addl 44(%rsp),%r8d + pxor %xmm6,%xmm7 + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %r10d,%edi + addl %r12d,%r8d + movdqa 64(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + paddd %xmm7,%xmm2 + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + paddd %xmm2,%xmm6 + movl %eax,%r13d + addl %r8d,%r14d + movdqa %xmm6,32(%rsp) + rorl $14,%r13d + movdqa %xmm0,%xmm4 + movl %r14d,%r8d + movl %ebx,%r12d + movdqa %xmm2,%xmm7 + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d +.byte 102,15,58,15,227,4 + andl %eax,%r12d + xorl %eax,%r13d +.byte 102,15,58,15,249,4 + addl 48(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %r9d,%r15d + addl %r12d,%edx + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + paddd %xmm7,%xmm3 + rorl $2,%r14d + addl %edx,%r11d + psrld $7,%xmm6 + addl %edi,%edx + movl %r11d,%r13d + pshufd $250,%xmm2,%xmm7 + addl %edx,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%edx + movl %eax,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %edx,%r14d + pxor %xmm5,%xmm4 + andl %r11d,%r12d + xorl %r11d,%r13d + pslld $11,%xmm5 + addl 52(%rsp),%ecx + movl %edx,%edi + pxor %xmm6,%xmm4 + xorl %ebx,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %r8d,%edi + addl %r12d,%ecx + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + psrld $10,%xmm7 + addl %r13d,%ecx + xorl %r8d,%r15d + paddd %xmm4,%xmm3 + rorl $2,%r14d + addl %ecx,%r10d + psrlq $17,%xmm6 + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %r10d,%r13d + xorl %eax,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %r10d,%r13d + addl 56(%rsp),%ebx + movl %ecx,%r15d + psrldq $8,%xmm7 + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + paddd %xmm7,%xmm3 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + pshufd $80,%xmm3,%xmm7 + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + movdqa %xmm7,%xmm6 + addl %edi,%ebx + movl %r9d,%r13d + psrld $10,%xmm7 + addl %ebx,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%ebx + movl %r10d,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + psrlq $2,%xmm6 + andl %r9d,%r12d + xorl %r9d,%r13d + addl 60(%rsp),%eax + pxor %xmm6,%xmm7 + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %ecx,%edi + addl %r12d,%eax + movdqa 96(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + paddd %xmm7,%xmm3 + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + paddd %xmm3,%xmm6 + movl %r8d,%r13d + addl %eax,%r14d + movdqa %xmm6,48(%rsp) + cmpb $0,131(%rbp) + jne .Lssse3_00_47 + rorl $14,%r13d + movl %r14d,%eax + movl %r9d,%r12d + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 0(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + rorl $6,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + rorl $2,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + rorl $14,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 4(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + rorl $11,%r14d + xorl %eax,%edi + addl %r12d,%r10d + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + rorl $2,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 8(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + rorl $14,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 12(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + rorl $6,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + rorl $14,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 16(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + rorl $6,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + rorl $2,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + rorl $14,%r13d + movl %r14d,%edx + movl %eax,%r12d + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 20(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + rorl $11,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + rorl $2,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 24(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + rorl $14,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 28(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + xorl %ecx,%edi + addl %r12d,%eax + rorl $6,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + rorl $14,%r13d + movl %r14d,%eax + movl %r9d,%r12d + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 32(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + rorl $6,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + rorl $2,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + rorl $14,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 36(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + rorl $11,%r14d + xorl %eax,%edi + addl %r12d,%r10d + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + rorl $2,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 40(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + rorl $14,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 44(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + rorl $6,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + rorl $14,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 48(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + rorl $6,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + rorl $2,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + rorl $14,%r13d + movl %r14d,%edx + movl %eax,%r12d + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 52(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + rorl $11,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + rorl $2,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 56(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + rorl $14,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 60(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + xorl %ecx,%edi + addl %r12d,%eax + rorl $6,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + movq 64+0(%rsp),%rdi + movl %r14d,%eax + + addl 0(%rdi),%eax + leaq 64(%rsi),%rsi + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + jb .Lloop_ssse3 + + movq 88(%rsp),%rsi + + movaps 64+32(%rsp),%xmm6 + movaps 64+48(%rsp),%xmm7 + movaps 64+64(%rsp),%xmm8 + movaps 64+80(%rsp),%xmm9 + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +.Lepilogue_ssse3: + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 + +.LSEH_end_sha256_block_data_order_ssse3: +.def sha256_block_data_order_avx; .scl 3; .type 32; .endef +.p2align 6 +sha256_block_data_order_avx: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_sha256_block_data_order_avx: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + + +.Lavx_shortcut: + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + shlq $4,%rdx + subq $160,%rsp + leaq (%rsi,%rdx,4),%rdx + andq $-64,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) + + movaps %xmm6,64+32(%rsp) + movaps %xmm7,64+48(%rsp) + movaps %xmm8,64+64(%rsp) + movaps %xmm9,64+80(%rsp) +.Lprologue_avx: + + vzeroupper + movl 0(%rdi),%eax + movl 4(%rdi),%ebx + movl 8(%rdi),%ecx + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + vmovdqa K256+512+32(%rip),%xmm8 + vmovdqa K256+512+64(%rip),%xmm9 + jmp .Lloop_avx +.p2align 4 +.Lloop_avx: + vmovdqa K256+512(%rip),%xmm7 + vmovdqu 0(%rsi),%xmm0 + vmovdqu 16(%rsi),%xmm1 + vmovdqu 32(%rsi),%xmm2 + vmovdqu 48(%rsi),%xmm3 + vpshufb %xmm7,%xmm0,%xmm0 + leaq K256(%rip),%rbp + vpshufb %xmm7,%xmm1,%xmm1 + vpshufb %xmm7,%xmm2,%xmm2 + vpaddd 0(%rbp),%xmm0,%xmm4 + vpshufb %xmm7,%xmm3,%xmm3 + vpaddd 32(%rbp),%xmm1,%xmm5 + vpaddd 64(%rbp),%xmm2,%xmm6 + vpaddd 96(%rbp),%xmm3,%xmm7 + vmovdqa %xmm4,0(%rsp) + movl %eax,%r14d + vmovdqa %xmm5,16(%rsp) + movl %ebx,%edi + vmovdqa %xmm6,32(%rsp) + xorl %ecx,%edi + vmovdqa %xmm7,48(%rsp) + movl %r8d,%r13d + jmp .Lavx_00_47 + +.p2align 4 +.Lavx_00_47: + subq $-128,%rbp + vpalignr $4,%xmm0,%xmm1,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + vpalignr $4,%xmm2,%xmm3,%xmm7 + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + vpaddd %xmm7,%xmm0,%xmm0 + xorl %r8d,%r13d + addl 0(%rsp),%r11d + movl %eax,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + vpshufd $250,%xmm3,%xmm7 + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + vpsrld $11,%xmm6,%xmm6 + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 4(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + vpaddd %xmm4,%xmm0,%xmm0 + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + vpxor %xmm7,%xmm6,%xmm6 + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + vpaddd %xmm6,%xmm0,%xmm0 + andl %ecx,%r12d + xorl %ecx,%r13d + addl 8(%rsp),%r9d + vpshufd $80,%xmm0,%xmm7 + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + vpxor %xmm7,%xmm6,%xmm6 + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + vpaddd %xmm6,%xmm0,%xmm0 + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + vpaddd 0(%rbp),%xmm0,%xmm6 + xorl %ebx,%r13d + addl 12(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + vmovdqa %xmm6,0(%rsp) + vpalignr $4,%xmm1,%xmm2,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + vpalignr $4,%xmm3,%xmm0,%xmm7 + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + vpaddd %xmm7,%xmm1,%xmm1 + xorl %eax,%r13d + addl 16(%rsp),%edx + movl %r8d,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + vpshufd $250,%xmm0,%xmm7 + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + vpsrld $11,%xmm6,%xmm6 + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 20(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + vpaddd %xmm4,%xmm1,%xmm1 + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + vpxor %xmm7,%xmm6,%xmm6 + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + vpaddd %xmm6,%xmm1,%xmm1 + andl %r10d,%r12d + xorl %r10d,%r13d + addl 24(%rsp),%ebx + vpshufd $80,%xmm1,%xmm7 + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + vpxor %xmm7,%xmm6,%xmm6 + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + vpaddd %xmm6,%xmm1,%xmm1 + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + vpaddd 32(%rbp),%xmm1,%xmm6 + xorl %r9d,%r13d + addl 28(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + vmovdqa %xmm6,16(%rsp) + vpalignr $4,%xmm2,%xmm3,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + vpalignr $4,%xmm0,%xmm1,%xmm7 + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + vpaddd %xmm7,%xmm2,%xmm2 + xorl %r8d,%r13d + addl 32(%rsp),%r11d + movl %eax,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + vpshufd $250,%xmm1,%xmm7 + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + vpsrld $11,%xmm6,%xmm6 + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 36(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + vpaddd %xmm4,%xmm2,%xmm2 + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + vpxor %xmm7,%xmm6,%xmm6 + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + vpaddd %xmm6,%xmm2,%xmm2 + andl %ecx,%r12d + xorl %ecx,%r13d + addl 40(%rsp),%r9d + vpshufd $80,%xmm2,%xmm7 + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + vpxor %xmm7,%xmm6,%xmm6 + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + vpaddd %xmm6,%xmm2,%xmm2 + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + vpaddd 64(%rbp),%xmm2,%xmm6 + xorl %ebx,%r13d + addl 44(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + vmovdqa %xmm6,32(%rsp) + vpalignr $4,%xmm3,%xmm0,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + vpalignr $4,%xmm1,%xmm2,%xmm7 + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + vpaddd %xmm7,%xmm3,%xmm3 + xorl %eax,%r13d + addl 48(%rsp),%edx + movl %r8d,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + vpshufd $250,%xmm2,%xmm7 + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + vpsrld $11,%xmm6,%xmm6 + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 52(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + vpaddd %xmm4,%xmm3,%xmm3 + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + vpxor %xmm7,%xmm6,%xmm6 + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + vpaddd %xmm6,%xmm3,%xmm3 + andl %r10d,%r12d + xorl %r10d,%r13d + addl 56(%rsp),%ebx + vpshufd $80,%xmm3,%xmm7 + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + vpxor %xmm7,%xmm6,%xmm6 + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + vpaddd %xmm6,%xmm3,%xmm3 + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + vpaddd 96(%rbp),%xmm3,%xmm6 + xorl %r9d,%r13d + addl 60(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + vmovdqa %xmm6,48(%rsp) + cmpb $0,131(%rbp) + jne .Lavx_00_47 + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 0(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 4(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 8(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 12(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 16(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 20(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 24(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 28(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 32(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 36(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 40(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 44(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 48(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 52(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 56(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 60(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + movq 64+0(%rsp),%rdi + movl %r14d,%eax + + addl 0(%rdi),%eax + leaq 64(%rsi),%rsi + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + jb .Lloop_avx + + movq 88(%rsp),%rsi + + vzeroupper + movaps 64+32(%rsp),%xmm6 + movaps 64+48(%rsp),%xmm7 + movaps 64+64(%rsp),%xmm8 + movaps 64+80(%rsp),%xmm9 + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +.Lepilogue_avx: + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 + +.LSEH_end_sha256_block_data_order_avx: +.def sha256_block_data_order_avx2; .scl 3; .type 32; .endef +.p2align 6 +sha256_block_data_order_avx2: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_sha256_block_data_order_avx2: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + + +.Lavx2_shortcut: + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + subq $608,%rsp + shlq $4,%rdx + andq $-1024,%rsp + leaq (%rsi,%rdx,4),%rdx + addq $448,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) + + movaps %xmm6,64+32(%rsp) + movaps %xmm7,64+48(%rsp) + movaps %xmm8,64+64(%rsp) + movaps %xmm9,64+80(%rsp) +.Lprologue_avx2: + + vzeroupper + subq $-64,%rsi + movl 0(%rdi),%eax + movq %rsi,%r12 + movl 4(%rdi),%ebx + cmpq %rdx,%rsi + movl 8(%rdi),%ecx + cmoveq %rsp,%r12 + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + vmovdqa K256+512+32(%rip),%ymm8 + vmovdqa K256+512+64(%rip),%ymm9 + jmp .Loop_avx2 +.p2align 4 +.Loop_avx2: + vmovdqa K256+512(%rip),%ymm7 + vmovdqu -64+0(%rsi),%xmm0 + vmovdqu -64+16(%rsi),%xmm1 + vmovdqu -64+32(%rsi),%xmm2 + vmovdqu -64+48(%rsi),%xmm3 + + vinserti128 $1,(%r12),%ymm0,%ymm0 + vinserti128 $1,16(%r12),%ymm1,%ymm1 + vpshufb %ymm7,%ymm0,%ymm0 + vinserti128 $1,32(%r12),%ymm2,%ymm2 + vpshufb %ymm7,%ymm1,%ymm1 + vinserti128 $1,48(%r12),%ymm3,%ymm3 + + leaq K256(%rip),%rbp + vpshufb %ymm7,%ymm2,%ymm2 + vpaddd 0(%rbp),%ymm0,%ymm4 + vpshufb %ymm7,%ymm3,%ymm3 + vpaddd 32(%rbp),%ymm1,%ymm5 + vpaddd 64(%rbp),%ymm2,%ymm6 + vpaddd 96(%rbp),%ymm3,%ymm7 + vmovdqa %ymm4,0(%rsp) + xorl %r14d,%r14d + vmovdqa %ymm5,32(%rsp) + leaq -64(%rsp),%rsp + movl %ebx,%edi + vmovdqa %ymm6,0(%rsp) + xorl %ecx,%edi + vmovdqa %ymm7,32(%rsp) + movl %r9d,%r12d + subq $-32*4,%rbp + jmp .Lavx2_00_47 + +.p2align 4 +.Lavx2_00_47: + leaq -64(%rsp),%rsp + vpalignr $4,%ymm0,%ymm1,%ymm4 + addl 0+128(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + vpalignr $4,%ymm2,%ymm3,%ymm7 + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + vpsrld $7,%ymm4,%ymm6 + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + vpaddd %ymm7,%ymm0,%ymm0 + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + vpshufd $250,%ymm3,%ymm7 + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 4+128(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + vpslld $11,%ymm5,%ymm5 + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + vpaddd %ymm4,%ymm0,%ymm0 + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 8+128(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + vpxor %ymm7,%ymm6,%ymm6 + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + vpaddd %ymm6,%ymm0,%ymm0 + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + vpshufd $80,%ymm0,%ymm7 + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 12+128(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + vpxor %ymm7,%ymm6,%ymm6 + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + vpaddd %ymm6,%ymm0,%ymm0 + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + vpaddd 0(%rbp),%ymm0,%ymm6 + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + vmovdqa %ymm6,0(%rsp) + vpalignr $4,%ymm1,%ymm2,%ymm4 + addl 32+128(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + vpalignr $4,%ymm3,%ymm0,%ymm7 + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + vpsrld $7,%ymm4,%ymm6 + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + vpaddd %ymm7,%ymm1,%ymm1 + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + vpshufd $250,%ymm0,%ymm7 + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 36+128(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + vpslld $11,%ymm5,%ymm5 + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + vpaddd %ymm4,%ymm1,%ymm1 + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 40+128(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + vpxor %ymm7,%ymm6,%ymm6 + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + vpaddd %ymm6,%ymm1,%ymm1 + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + vpshufd $80,%ymm1,%ymm7 + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 44+128(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + vpxor %ymm7,%ymm6,%ymm6 + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + vpaddd %ymm6,%ymm1,%ymm1 + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + vpaddd 32(%rbp),%ymm1,%ymm6 + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + vmovdqa %ymm6,32(%rsp) + leaq -64(%rsp),%rsp + vpalignr $4,%ymm2,%ymm3,%ymm4 + addl 0+128(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + vpalignr $4,%ymm0,%ymm1,%ymm7 + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + vpsrld $7,%ymm4,%ymm6 + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + vpaddd %ymm7,%ymm2,%ymm2 + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + vpshufd $250,%ymm1,%ymm7 + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 4+128(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + vpslld $11,%ymm5,%ymm5 + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + vpaddd %ymm4,%ymm2,%ymm2 + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 8+128(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + vpxor %ymm7,%ymm6,%ymm6 + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + vpaddd %ymm6,%ymm2,%ymm2 + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + vpshufd $80,%ymm2,%ymm7 + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 12+128(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + vpxor %ymm7,%ymm6,%ymm6 + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + vpaddd %ymm6,%ymm2,%ymm2 + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + vpaddd 64(%rbp),%ymm2,%ymm6 + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + vmovdqa %ymm6,0(%rsp) + vpalignr $4,%ymm3,%ymm0,%ymm4 + addl 32+128(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + vpalignr $4,%ymm1,%ymm2,%ymm7 + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + vpsrld $7,%ymm4,%ymm6 + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + vpaddd %ymm7,%ymm3,%ymm3 + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + vpshufd $250,%ymm2,%ymm7 + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 36+128(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + vpslld $11,%ymm5,%ymm5 + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + vpaddd %ymm4,%ymm3,%ymm3 + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 40+128(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + vpxor %ymm7,%ymm6,%ymm6 + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + vpaddd %ymm6,%ymm3,%ymm3 + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + vpshufd $80,%ymm3,%ymm7 + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 44+128(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + vpxor %ymm7,%ymm6,%ymm6 + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + vpaddd %ymm6,%ymm3,%ymm3 + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + vpaddd 96(%rbp),%ymm3,%ymm6 + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + vmovdqa %ymm6,32(%rsp) + leaq 128(%rbp),%rbp + cmpb $0,3(%rbp) + jne .Lavx2_00_47 + addl 0+64(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + addl 4+64(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + addl 8+64(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + addl 12+64(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + addl 32+64(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + addl 36+64(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + addl 40+64(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + addl 44+64(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + addl 0(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + addl 4(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + addl 8(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + addl 12(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + addl 32(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + addl 36(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + addl 40(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + addl 44(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + movq 512(%rsp),%rdi + addl %r14d,%eax + + leaq 448(%rsp),%rbp + + addl 0(%rdi),%eax + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + + cmpq 80(%rbp),%rsi + je .Ldone_avx2 + + xorl %r14d,%r14d + movl %ebx,%edi + xorl %ecx,%edi + movl %r9d,%r12d + jmp .Lower_avx2 +.p2align 4 +.Lower_avx2: + addl 0+16(%rbp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + addl 4+16(%rbp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + addl 8+16(%rbp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + addl 12+16(%rbp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + addl 32+16(%rbp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + addl 36+16(%rbp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + addl 40+16(%rbp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + addl 44+16(%rbp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + leaq -64(%rbp),%rbp + cmpq %rsp,%rbp + jae .Lower_avx2 + + movq 512(%rsp),%rdi + addl %r14d,%eax + + leaq 448(%rsp),%rsp + + addl 0(%rdi),%eax + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + leaq 128(%rsi),%rsi + addl 24(%rdi),%r10d + movq %rsi,%r12 + addl 28(%rdi),%r11d + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + cmoveq %rsp,%r12 + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + + jbe .Loop_avx2 + leaq (%rsp),%rbp + +.Ldone_avx2: + leaq (%rbp),%rsp + movq 88(%rsp),%rsi + + vzeroupper + movaps 64+32(%rsp),%xmm6 + movaps 64+48(%rsp),%xmm7 + movaps 64+64(%rsp),%xmm8 + movaps 64+80(%rsp),%xmm9 + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +.Lepilogue_avx2: + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 + +.LSEH_end_sha256_block_data_order_avx2: + +.def se_handler; .scl 3; .type 32; .endef +.p2align 4 +se_handler: + pushq %rsi + pushq %rdi + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + pushfq + subq $64,%rsp + + movq 120(%r8),%rax + movq 248(%r8),%rbx + + movq 8(%r9),%rsi + movq 56(%r9),%r11 + + movl 0(%r11),%r10d + leaq (%rsi,%r10,1),%r10 + cmpq %r10,%rbx + jb .Lin_prologue + + movq 152(%r8),%rax + + movl 4(%r11),%r10d + leaq (%rsi,%r10,1),%r10 + cmpq %r10,%rbx + jae .Lin_prologue + leaq .Lavx2_shortcut(%rip),%r10 + cmpq %r10,%rbx + jb .Lnot_in_avx2 + + andq $-1024,%rax + addq $448,%rax +.Lnot_in_avx2: + movq %rax,%rsi + movq 64+24(%rax),%rax + + movq -8(%rax),%rbx + movq -16(%rax),%rbp + movq -24(%rax),%r12 + movq -32(%rax),%r13 + movq -40(%rax),%r14 + movq -48(%rax),%r15 + movq %rbx,144(%r8) + movq %rbp,160(%r8) + movq %r12,216(%r8) + movq %r13,224(%r8) + movq %r14,232(%r8) + movq %r15,240(%r8) + + leaq .Lepilogue(%rip),%r10 + cmpq %r10,%rbx + jb .Lin_prologue + + leaq 64+32(%rsi),%rsi + leaq 512(%r8),%rdi + movl $8,%ecx +.long 0xa548f3fc + +.Lin_prologue: + movq 8(%rax),%rdi + movq 16(%rax),%rsi + movq %rax,152(%r8) + movq %rsi,168(%r8) + movq %rdi,176(%r8) + + movq 40(%r9),%rdi + movq %r8,%rsi + movl $154,%ecx +.long 0xa548f3fc + + movq %r9,%rsi + xorq %rcx,%rcx + movq 8(%rsi),%rdx + movq 0(%rsi),%r8 + movq 16(%rsi),%r9 + movq 40(%rsi),%r10 + leaq 56(%rsi),%r11 + leaq 24(%rsi),%r12 + movq %r10,32(%rsp) + movq %r11,40(%rsp) + movq %r12,48(%rsp) + movq %rcx,56(%rsp) + call *__imp_RtlVirtualUnwind(%rip) + + movl $1,%eax + addq $64,%rsp + popfq + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbp + popq %rbx + popq %rdi + popq %rsi + .byte 0xf3,0xc3 + +.def shaext_handler; .scl 3; .type 32; .endef +.p2align 4 +shaext_handler: + pushq %rsi + pushq %rdi + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + pushfq + subq $64,%rsp + + movq 120(%r8),%rax + movq 248(%r8),%rbx + + leaq .Lprologue_shaext(%rip),%r10 + cmpq %r10,%rbx + jb .Lin_prologue + + leaq .Lepilogue_shaext(%rip),%r10 + cmpq %r10,%rbx + jae .Lin_prologue + + leaq -8-80(%rax),%rsi + leaq 512(%r8),%rdi + movl $10,%ecx +.long 0xa548f3fc + + jmp .Lin_prologue + +.section .pdata +.p2align 2 +.rva .LSEH_begin_sha256_block_data_order +.rva .LSEH_end_sha256_block_data_order +.rva .LSEH_info_sha256_block_data_order +.rva .LSEH_begin_sha256_block_data_order_shaext +.rva .LSEH_end_sha256_block_data_order_shaext +.rva .LSEH_info_sha256_block_data_order_shaext +.rva .LSEH_begin_sha256_block_data_order_ssse3 +.rva .LSEH_end_sha256_block_data_order_ssse3 +.rva .LSEH_info_sha256_block_data_order_ssse3 +.rva .LSEH_begin_sha256_block_data_order_avx +.rva .LSEH_end_sha256_block_data_order_avx +.rva .LSEH_info_sha256_block_data_order_avx +.rva .LSEH_begin_sha256_block_data_order_avx2 +.rva .LSEH_end_sha256_block_data_order_avx2 +.rva .LSEH_info_sha256_block_data_order_avx2 +.section .xdata +.p2align 3 +.LSEH_info_sha256_block_data_order: +.byte 9,0,0,0 +.rva se_handler +.rva .Lprologue,.Lepilogue +.LSEH_info_sha256_block_data_order_shaext: +.byte 9,0,0,0 +.rva shaext_handler +.LSEH_info_sha256_block_data_order_ssse3: +.byte 9,0,0,0 +.rva se_handler +.rva .Lprologue_ssse3,.Lepilogue_ssse3 +.LSEH_info_sha256_block_data_order_avx: +.byte 9,0,0,0 +.rva se_handler +.rva .Lprologue_avx,.Lepilogue_avx +.LSEH_info_sha256_block_data_order_avx2: +.byte 9,0,0,0 +.rva se_handler +.rva .Lprologue_avx2,.Lepilogue_avx2 + diff --git a/lib/accelerated/x86/coff/sha512-ssse3-x86.s b/lib/accelerated/x86/coff/sha512-ssse3-x86.s index acad0ec1e7..72a7f73d77 100644 --- a/lib/accelerated/x86/coff/sha512-ssse3-x86.s +++ b/lib/accelerated/x86/coff/sha512-ssse3-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "sha512-586.s" .text .globl _sha512_block_data_order .def _sha512_block_data_order; .scl 2; .type 32; .endef @@ -594,6 +593,8 @@ _sha512_block_data_order: .long 4234509866,1501505948 .long 987167468,1607167915 .long 1246189591,1816402316 +.long 67438087,66051 +.long 202182159,134810123 .byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97 .byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 .byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 diff --git a/lib/accelerated/x86/coff/sha512-ssse3-x86_64.s b/lib/accelerated/x86/coff/sha512-ssse3-x86_64.s index 034dab2388..419fa2a980 100644 --- a/lib/accelerated/x86/coff/sha512-ssse3-x86_64.s +++ b/lib/accelerated/x86/coff/sha512-ssse3-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -40,2880 +40,5516 @@ .text -.globl sha256_block_data_order -.def sha256_block_data_order; .scl 2; .type 32; .endef +.globl sha512_block_data_order +.def sha512_block_data_order; .scl 2; .type 32; .endef .p2align 4 -sha256_block_data_order: +sha512_block_data_order: movq %rdi,8(%rsp) movq %rsi,16(%rsp) movq %rsp,%rax -.LSEH_begin_sha256_block_data_order: +.LSEH_begin_sha512_block_data_order: movq %rcx,%rdi movq %rdx,%rsi movq %r8,%rdx + leaq _gnutls_x86_cpuid_s(%rip),%r11 movl 0(%r11),%r9d movl 4(%r11),%r10d movl 8(%r11),%r11d - testl $512,%r10d - jnz .Lssse3_shortcut + testl $2048,%r10d + jnz .Lxop_shortcut + andl $296,%r11d + cmpl $296,%r11d + je .Lavx2_shortcut + andl $1073741824,%r9d + andl $268435968,%r10d + orl %r9d,%r10d + cmpl $1342177792,%r10d + je .Lavx_shortcut + movq %rsp,%rax + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 - movq %rsp,%r11 + shlq $4,%rdx - subq $64+32,%rsp - leaq (%rsi,%rdx,4),%rdx + subq $128+32,%rsp + leaq (%rsi,%rdx,8),%rdx andq $-64,%rsp - movq %rdi,64+0(%rsp) - movq %rsi,64+8(%rsp) - movq %rdx,64+16(%rsp) - movq %r11,64+24(%rsp) + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) + .Lprologue: - movl 0(%rdi),%eax - movl 4(%rdi),%ebx - movl 8(%rdi),%ecx - movl 12(%rdi),%edx - movl 16(%rdi),%r8d - movl 20(%rdi),%r9d - movl 24(%rdi),%r10d - movl 28(%rdi),%r11d + movq 0(%rdi),%rax + movq 8(%rdi),%rbx + movq 16(%rdi),%rcx + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 jmp .Lloop .p2align 4 .Lloop: - movl %ebx,%edi - leaq K256(%rip),%rbp - xorl %ecx,%edi - movl 0(%rsi),%r12d - movl %r8d,%r13d - movl %eax,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,0(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - movl 4(%rsi),%r12d - movl %edx,%r13d - movl %r11d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,4(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - movl 8(%rsi),%r12d - movl %ecx,%r13d - movl %r10d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,8(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - movl 12(%rsi),%r12d - movl %ebx,%r13d - movl %r9d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,12(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - movl 16(%rsi),%r12d - movl %eax,%r13d - movl %r8d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,16(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - leaq 4(%rbp),%rbp - addl %r14d,%edx - - movl 20(%rsi),%r12d - movl %r11d,%r13d - movl %edx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,20(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - movl 24(%rsi),%r12d - movl %r10d,%r13d - movl %ecx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,24(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - movl 28(%rsi),%r12d - movl %r9d,%r13d - movl %ebx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,28(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - leaq 20(%rbp),%rbp - addl %r14d,%eax - - movl 32(%rsi),%r12d - movl %r8d,%r13d - movl %eax,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,32(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - movl 36(%rsi),%r12d - movl %edx,%r13d - movl %r11d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,36(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - movl 40(%rsi),%r12d - movl %ecx,%r13d - movl %r10d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,40(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - movl 44(%rsi),%r12d - movl %ebx,%r13d - movl %r9d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,44(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - movl 48(%rsi),%r12d - movl %eax,%r13d - movl %r8d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,48(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - leaq 4(%rbp),%rbp - addl %r14d,%edx - - movl 52(%rsi),%r12d - movl %r11d,%r13d - movl %edx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,52(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - movl 56(%rsi),%r12d - movl %r10d,%r13d - movl %ecx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,56(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - movl 60(%rsi),%r12d - movl %r9d,%r13d - movl %ebx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,60(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - movl 4(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%eax + movq %rbx,%rdi + leaq K512(%rip),%rbp + xorq %rcx,%rdi + movq 0(%rsi),%r12 + movq %r8,%r13 + movq %rax,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,0(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + addq %r14,%r11 + movq 8(%rsi),%r12 + movq %rdx,%r13 + movq %r11,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,8(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + addq %r14,%r10 + movq 16(%rsi),%r12 + movq %rcx,%r13 + movq %r10,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,16(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + addq %r14,%r9 + movq 24(%rsi),%r12 + movq %rbx,%r13 + movq %r9,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rcx,%rdi + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,24(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + addq %r14,%r8 + movq 32(%rsi),%r12 + movq %rax,%r13 + movq %r8,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,32(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + addq %r14,%rdx + movq 40(%rsi),%r12 + movq %r11,%r13 + movq %rdx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,40(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + addq %r14,%rcx + movq 48(%rsi),%r12 + movq %r10,%r13 + movq %rcx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,48(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + addq %r14,%rbx + movq 56(%rsi),%r12 + movq %r9,%r13 + movq %rbx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,56(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp + addq %r14,%rax + movq 64(%rsi),%r12 + movq %r8,%r13 + movq %rax,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,64(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + addq %r14,%r11 + movq 72(%rsi),%r12 + movq %rdx,%r13 + movq %r11,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,72(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + addq %r14,%r10 + movq 80(%rsi),%r12 + movq %rcx,%r13 + movq %r10,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,80(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + addq %r14,%r9 + movq 88(%rsi),%r12 + movq %rbx,%r13 + movq %r9,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rcx,%rdi + + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,88(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + addq %r14,%r8 + movq 96(%rsi),%r12 + movq %rax,%r13 + movq %r8,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,96(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + addq %r14,%rdx + movq 104(%rsi),%r12 + movq %r11,%r13 + movq %rdx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,104(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + addq %r14,%rcx + movq 112(%rsi),%r12 + movq %r10,%r13 + movq %rcx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,112(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + addq %r14,%rbx + movq 120(%rsi),%r12 + movq %r9,%r13 + movq %rbx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,120(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp jmp .Lrounds_16_xx .p2align 4 .Lrounds_16_xx: + movq 8(%rsp),%r13 + movq 112(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rax + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 72(%rsp),%r12 + + addq 0(%rsp),%r12 + movq %r8,%r13 + addq %r15,%r12 + movq %rax,%r14 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,0(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + movq 16(%rsp),%r13 + movq 120(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r11 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 80(%rsp),%r12 + + addq 8(%rsp),%r12 + movq %rdx,%r13 + addq %rdi,%r12 + movq %r11,%r14 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,8(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + movq 24(%rsp),%r13 + movq 0(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r10 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 88(%rsp),%r12 + + addq 16(%rsp),%r12 + movq %rcx,%r13 + addq %r15,%r12 + movq %r10,%r14 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,16(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + movq 32(%rsp),%r13 + movq 8(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r9 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 96(%rsp),%r12 + + addq 24(%rsp),%r12 + movq %rbx,%r13 + addq %rdi,%r12 + movq %r9,%r14 + rorq $23,%r13 + movq %rcx,%rdi + + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,24(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + movq 40(%rsp),%r13 + movq 16(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r8 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 104(%rsp),%r12 + + addq 32(%rsp),%r12 + movq %rax,%r13 + addq %r15,%r12 + movq %r8,%r14 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,32(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + movq 48(%rsp),%r13 + movq 24(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rdx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 112(%rsp),%r12 + + addq 40(%rsp),%r12 + movq %r11,%r13 + addq %rdi,%r12 + movq %rdx,%r14 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,40(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + movq 56(%rsp),%r13 + movq 32(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rcx + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 120(%rsp),%r12 + + addq 48(%rsp),%r12 + movq %r10,%r13 + addq %r15,%r12 + movq %rcx,%r14 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,48(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + movq 64(%rsp),%r13 + movq 40(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rbx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 0(%rsp),%r12 + + addq 56(%rsp),%r12 + movq %r9,%r13 + addq %rdi,%r12 + movq %rbx,%r14 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,56(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp + movq 72(%rsp),%r13 + movq 48(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rax + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 8(%rsp),%r12 + + addq 64(%rsp),%r12 + movq %r8,%r13 + addq %r15,%r12 + movq %rax,%r14 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,64(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + movq 80(%rsp),%r13 + movq 56(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r11 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 16(%rsp),%r12 + + addq 72(%rsp),%r12 + movq %rdx,%r13 + addq %rdi,%r12 + movq %r11,%r14 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,72(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + movq 88(%rsp),%r13 + movq 64(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r10 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 24(%rsp),%r12 + + addq 80(%rsp),%r12 + movq %rcx,%r13 + addq %r15,%r12 + movq %r10,%r14 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,80(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + movq 96(%rsp),%r13 + movq 72(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r9 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 32(%rsp),%r12 + + addq 88(%rsp),%r12 + movq %rbx,%r13 + addq %rdi,%r12 + movq %r9,%r14 + rorq $23,%r13 + movq %rcx,%rdi - movl 56(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 36(%rsp),%r12d - xorl %r15d,%r14d - - addl 0(%rsp),%r12d - movl %r8d,%r13d - addl %r14d,%r12d - movl %eax,%r14d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,0(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - movl 8(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - - movl 60(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 40(%rsp),%r12d - xorl %edi,%r14d - - addl 4(%rsp),%r12d - movl %edx,%r13d - addl %r14d,%r12d - movl %r11d,%r14d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,4(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - movl 12(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - - movl 0(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 44(%rsp),%r12d - xorl %r15d,%r14d - - addl 8(%rsp),%r12d - movl %ecx,%r13d - addl %r14d,%r12d - movl %r10d,%r14d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,8(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - movl 16(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - - movl 4(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 48(%rsp),%r12d - xorl %edi,%r14d - - addl 12(%rsp),%r12d - movl %ebx,%r13d - addl %r14d,%r12d - movl %r9d,%r14d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,12(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - movl 20(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - - movl 8(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 52(%rsp),%r12d - xorl %r15d,%r14d - - addl 16(%rsp),%r12d - movl %eax,%r13d - addl %r14d,%r12d - movl %r8d,%r14d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,16(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - movl 24(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%edx - - - movl 12(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 56(%rsp),%r12d - xorl %edi,%r14d - - addl 20(%rsp),%r12d - movl %r11d,%r13d - addl %r14d,%r12d - movl %edx,%r14d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,20(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - movl 28(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - - movl 16(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 60(%rsp),%r12d - xorl %r15d,%r14d - - addl 24(%rsp),%r12d - movl %r10d,%r13d - addl %r14d,%r12d - movl %ecx,%r14d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,24(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - movl 32(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - - movl 20(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 0(%rsp),%r12d - xorl %edi,%r14d - - addl 28(%rsp),%r12d - movl %r9d,%r13d - addl %r14d,%r12d - movl %ebx,%r14d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,28(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - movl 36(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%eax - - - movl 24(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 4(%rsp),%r12d - xorl %r15d,%r14d - - addl 32(%rsp),%r12d - movl %r8d,%r13d - addl %r14d,%r12d - movl %eax,%r14d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,32(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - movl 40(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - - movl 28(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 8(%rsp),%r12d - xorl %edi,%r14d - - addl 36(%rsp),%r12d - movl %edx,%r13d - addl %r14d,%r12d - movl %r11d,%r14d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,36(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - movl 44(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - - movl 32(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 12(%rsp),%r12d - xorl %r15d,%r14d - - addl 40(%rsp),%r12d - movl %ecx,%r13d - addl %r14d,%r12d - movl %r10d,%r14d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,40(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - movl 48(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - - movl 36(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 16(%rsp),%r12d - xorl %edi,%r14d - - addl 44(%rsp),%r12d - movl %ebx,%r13d - addl %r14d,%r12d - movl %r9d,%r14d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,44(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - movl 52(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - - movl 40(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 20(%rsp),%r12d - xorl %r15d,%r14d - - addl 48(%rsp),%r12d - movl %eax,%r13d - addl %r14d,%r12d - movl %r8d,%r14d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,48(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - movl 56(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%edx - - - movl 44(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 24(%rsp),%r12d - xorl %edi,%r14d - - addl 52(%rsp),%r12d - movl %r11d,%r13d - addl %r14d,%r12d - movl %edx,%r14d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,52(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - movl 60(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - - movl 48(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 28(%rsp),%r12d - xorl %r15d,%r14d - - addl 56(%rsp),%r12d - movl %r10d,%r13d - addl %r14d,%r12d - movl %ecx,%r14d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,56(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - movl 0(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - - movl 52(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 32(%rsp),%r12d - xorl %edi,%r14d - - addl 60(%rsp),%r12d - movl %r9d,%r13d - addl %r14d,%r12d - movl %ebx,%r14d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,60(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - movl 4(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%eax - - cmpb $0,3(%rbp) + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,88(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + movq 104(%rsp),%r13 + movq 80(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r8 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 40(%rsp),%r12 + + addq 96(%rsp),%r12 + movq %rax,%r13 + addq %r15,%r12 + movq %r8,%r14 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,96(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + movq 112(%rsp),%r13 + movq 88(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rdx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 48(%rsp),%r12 + + addq 104(%rsp),%r12 + movq %r11,%r13 + addq %rdi,%r12 + movq %rdx,%r14 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,104(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + movq 120(%rsp),%r13 + movq 96(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rcx + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 56(%rsp),%r12 + + addq 112(%rsp),%r12 + movq %r10,%r13 + addq %r15,%r12 + movq %rcx,%r14 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,112(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + movq 0(%rsp),%r13 + movq 104(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rbx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 64(%rsp),%r12 + + addq 120(%rsp),%r12 + movq %r9,%r13 + addq %rdi,%r12 + movq %rbx,%r14 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,120(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp + cmpb $0,7(%rbp) jnz .Lrounds_16_xx - movq 64+0(%rsp),%rdi - leaq 64(%rsi),%rsi - - addl 0(%rdi),%eax - addl 4(%rdi),%ebx - addl 8(%rdi),%ecx - addl 12(%rdi),%edx - addl 16(%rdi),%r8d - addl 20(%rdi),%r9d - addl 24(%rdi),%r10d - addl 28(%rdi),%r11d - - cmpq 64+16(%rsp),%rsi - - movl %eax,0(%rdi) - movl %ebx,4(%rdi) - movl %ecx,8(%rdi) - movl %edx,12(%rdi) - movl %r8d,16(%rdi) - movl %r9d,20(%rdi) - movl %r10d,24(%rdi) - movl %r11d,28(%rdi) + movq 128+0(%rsp),%rdi + addq %r14,%rax + leaq 128(%rsi),%rsi + + addq 0(%rdi),%rax + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) jb .Lloop - movq 64+24(%rsp),%rsi - movq (%rsi),%r15 - movq 8(%rsi),%r14 - movq 16(%rsi),%r13 - movq 24(%rsi),%r12 - movq 32(%rsi),%rbp - movq 40(%rsi),%rbx - leaq 48(%rsi),%rsp + movq 152(%rsp),%rsi + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + .Lepilogue: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 -.LSEH_end_sha256_block_data_order: + +.LSEH_end_sha512_block_data_order: .p2align 6 -K256: -.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 -.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 -.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 -.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 -.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 -.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 -.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 -.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 -.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc -.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc -.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da -.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da -.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 -.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 -.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 -.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 -.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 -.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 -.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 -.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 -.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 -.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 -.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 -.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 -.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 -.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 -.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 -.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 -.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 -.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 -.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 -.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 - -.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f -.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f -.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff -.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff -.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 -.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 -.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 -.def sha256_block_data_order_ssse3; .scl 3; .type 32; .endef +K512: +.quad 0x428a2f98d728ae22,0x7137449123ef65cd +.quad 0x428a2f98d728ae22,0x7137449123ef65cd +.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc +.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc +.quad 0x3956c25bf348b538,0x59f111f1b605d019 +.quad 0x3956c25bf348b538,0x59f111f1b605d019 +.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 +.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 +.quad 0xd807aa98a3030242,0x12835b0145706fbe +.quad 0xd807aa98a3030242,0x12835b0145706fbe +.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 +.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 +.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 +.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 +.quad 0x9bdc06a725c71235,0xc19bf174cf692694 +.quad 0x9bdc06a725c71235,0xc19bf174cf692694 +.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 +.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 +.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 +.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 +.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 +.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 +.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 +.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 +.quad 0x983e5152ee66dfab,0xa831c66d2db43210 +.quad 0x983e5152ee66dfab,0xa831c66d2db43210 +.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 +.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 +.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 +.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 +.quad 0x06ca6351e003826f,0x142929670a0e6e70 +.quad 0x06ca6351e003826f,0x142929670a0e6e70 +.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 +.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 +.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df +.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df +.quad 0x650a73548baf63de,0x766a0abb3c77b2a8 +.quad 0x650a73548baf63de,0x766a0abb3c77b2a8 +.quad 0x81c2c92e47edaee6,0x92722c851482353b +.quad 0x81c2c92e47edaee6,0x92722c851482353b +.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 +.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 +.quad 0xc24b8b70d0f89791,0xc76c51a30654be30 +.quad 0xc24b8b70d0f89791,0xc76c51a30654be30 +.quad 0xd192e819d6ef5218,0xd69906245565a910 +.quad 0xd192e819d6ef5218,0xd69906245565a910 +.quad 0xf40e35855771202a,0x106aa07032bbd1b8 +.quad 0xf40e35855771202a,0x106aa07032bbd1b8 +.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 +.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 +.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 +.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 +.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb +.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb +.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 +.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 +.quad 0x748f82ee5defb2fc,0x78a5636f43172f60 +.quad 0x748f82ee5defb2fc,0x78a5636f43172f60 +.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec +.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec +.quad 0x90befffa23631e28,0xa4506cebde82bde9 +.quad 0x90befffa23631e28,0xa4506cebde82bde9 +.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b +.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b +.quad 0xca273eceea26619c,0xd186b8c721c0c207 +.quad 0xca273eceea26619c,0xd186b8c721c0c207 +.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 +.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 +.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 +.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 +.quad 0x113f9804bef90dae,0x1b710b35131c471b +.quad 0x113f9804bef90dae,0x1b710b35131c471b +.quad 0x28db77f523047d84,0x32caab7b40c72493 +.quad 0x28db77f523047d84,0x32caab7b40c72493 +.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c +.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c +.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a +.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a +.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 + +.quad 0x0001020304050607,0x08090a0b0c0d0e0f +.quad 0x0001020304050607,0x08090a0b0c0d0e0f +.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.def sha512_block_data_order_xop; .scl 3; .type 32; .endef .p2align 6 -sha256_block_data_order_ssse3: +sha512_block_data_order_xop: movq %rdi,8(%rsp) movq %rsi,16(%rsp) movq %rsp,%rax -.LSEH_begin_sha256_block_data_order_ssse3: +.LSEH_begin_sha512_block_data_order_xop: movq %rcx,%rdi movq %rdx,%rsi movq %r8,%rdx -.Lssse3_shortcut: + +.Lxop_shortcut: + movq %rsp,%rax + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 - movq %rsp,%r11 + shlq $4,%rdx - subq $160,%rsp - leaq (%rsi,%rdx,4),%rdx + subq $256,%rsp + leaq (%rsi,%rdx,8),%rdx andq $-64,%rsp - movq %rdi,64+0(%rsp) - movq %rsi,64+8(%rsp) - movq %rdx,64+16(%rsp) - movq %r11,64+24(%rsp) - movaps %xmm6,64+32(%rsp) - movaps %xmm7,64+48(%rsp) - movaps %xmm8,64+64(%rsp) - movaps %xmm9,64+80(%rsp) -.Lprologue_ssse3: - - movl 0(%rdi),%eax - movl 4(%rdi),%ebx - movl 8(%rdi),%ecx - movl 12(%rdi),%edx - movl 16(%rdi),%r8d - movl 20(%rdi),%r9d - movl 24(%rdi),%r10d - movl 28(%rdi),%r11d - movdqa K256+512+32(%rip),%xmm8 - movdqa K256+512+64(%rip),%xmm9 - jmp .Lloop_ssse3 + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) + + movaps %xmm6,128+32(%rsp) + movaps %xmm7,128+48(%rsp) + movaps %xmm8,128+64(%rsp) + movaps %xmm9,128+80(%rsp) + movaps %xmm10,128+96(%rsp) + movaps %xmm11,128+112(%rsp) +.Lprologue_xop: + + vzeroupper + movq 0(%rdi),%rax + movq 8(%rdi),%rbx + movq 16(%rdi),%rcx + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 + jmp .Lloop_xop .p2align 4 -.Lloop_ssse3: - movdqa K256+512(%rip),%xmm7 - movdqu 0(%rsi),%xmm0 - movdqu 16(%rsi),%xmm1 - movdqu 32(%rsi),%xmm2 - movdqu 48(%rsi),%xmm3 -.byte 102,15,56,0,199 - leaq K256(%rip),%rbp -.byte 102,15,56,0,207 - movdqa 0(%rbp),%xmm4 -.byte 102,15,56,0,215 - movdqa 32(%rbp),%xmm5 - paddd %xmm0,%xmm4 - movdqa 64(%rbp),%xmm6 -.byte 102,15,56,0,223 - movdqa 96(%rbp),%xmm7 - paddd %xmm1,%xmm5 - paddd %xmm2,%xmm6 - paddd %xmm3,%xmm7 - movdqa %xmm4,0(%rsp) - movl %eax,%r14d - movdqa %xmm5,16(%rsp) - movl %ebx,%edi - movdqa %xmm6,32(%rsp) - xorl %ecx,%edi - movdqa %xmm7,48(%rsp) - movl %r8d,%r13d - jmp .Lssse3_00_47 +.Lloop_xop: + vmovdqa K512+1280(%rip),%xmm11 + vmovdqu 0(%rsi),%xmm0 + leaq K512+128(%rip),%rbp + vmovdqu 16(%rsi),%xmm1 + vmovdqu 32(%rsi),%xmm2 + vpshufb %xmm11,%xmm0,%xmm0 + vmovdqu 48(%rsi),%xmm3 + vpshufb %xmm11,%xmm1,%xmm1 + vmovdqu 64(%rsi),%xmm4 + vpshufb %xmm11,%xmm2,%xmm2 + vmovdqu 80(%rsi),%xmm5 + vpshufb %xmm11,%xmm3,%xmm3 + vmovdqu 96(%rsi),%xmm6 + vpshufb %xmm11,%xmm4,%xmm4 + vmovdqu 112(%rsi),%xmm7 + vpshufb %xmm11,%xmm5,%xmm5 + vpaddq -128(%rbp),%xmm0,%xmm8 + vpshufb %xmm11,%xmm6,%xmm6 + vpaddq -96(%rbp),%xmm1,%xmm9 + vpshufb %xmm11,%xmm7,%xmm7 + vpaddq -64(%rbp),%xmm2,%xmm10 + vpaddq -32(%rbp),%xmm3,%xmm11 + vmovdqa %xmm8,0(%rsp) + vpaddq 0(%rbp),%xmm4,%xmm8 + vmovdqa %xmm9,16(%rsp) + vpaddq 32(%rbp),%xmm5,%xmm9 + vmovdqa %xmm10,32(%rsp) + vpaddq 64(%rbp),%xmm6,%xmm10 + vmovdqa %xmm11,48(%rsp) + vpaddq 96(%rbp),%xmm7,%xmm11 + vmovdqa %xmm8,64(%rsp) + movq %rax,%r14 + vmovdqa %xmm9,80(%rsp) + movq %rbx,%rdi + vmovdqa %xmm10,96(%rsp) + xorq %rcx,%rdi + vmovdqa %xmm11,112(%rsp) + movq %r8,%r13 + jmp .Lxop_00_47 .p2align 4 -.Lssse3_00_47: - subq $-32*4,%rbp - rorl $14,%r13d - movl %r14d,%eax - movdqa %xmm1,%xmm4 - movl %r9d,%r12d - movdqa %xmm3,%xmm7 - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d -.byte 102,15,58,15,224,4 - rorl $5,%r13d - xorl %eax,%r14d -.byte 102,15,58,15,250,4 - andl %r8d,%r12d - xorl %r8d,%r13d - addl 0(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - movdqa %xmm4,%xmm5 - xorl %ebx,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - psrld $3,%xmm4 - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - paddd %xmm7,%xmm0 - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - psrld $7,%xmm6 - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - pshufd $250,%xmm3,%xmm7 - movl %r8d,%r12d - pslld $14,%xmm5 - xorl %edx,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %r9d,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %r11d,%r14d - pxor %xmm5,%xmm4 - andl %edx,%r12d - xorl %edx,%r13d - pslld $11,%xmm5 - addl 4(%rsp),%r10d - pxor %xmm6,%xmm4 - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - movdqa %xmm7,%xmm6 - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %r11d,%r14d - psrld $10,%xmm7 - addl %r13d,%r10d - xorl %eax,%r15d - paddd %xmm4,%xmm0 - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - psrlq $17,%xmm6 - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - pxor %xmm6,%xmm7 - xorl %ecx,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - pxor %xmm6,%xmm7 - andl %ecx,%r12d - xorl %ecx,%r13d - addl 8(%rsp),%r9d -.byte 102,65,15,56,0,248 - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm0 - addl %r12d,%r9d - pshufd $80,%xmm0,%xmm7 - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - movdqa %xmm7,%xmm6 - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - psrld $10,%xmm7 - movl %ebx,%r13d - psrlq $17,%xmm6 - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - pxor %xmm6,%xmm7 - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - pxor %xmm6,%xmm7 - addl 12(%rsp),%r8d - movl %r9d,%edi - movdqa 0(%rbp),%xmm6 - rorl $11,%r14d - xorl %edx,%r12d -.byte 102,65,15,56,0,249 - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - paddd %xmm7,%xmm0 - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - paddd %xmm0,%xmm6 - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - movdqa %xmm6,0(%rsp) - rorl $14,%r13d - movl %r14d,%r8d - movdqa %xmm2,%xmm4 - movl %ebx,%r12d - movdqa %xmm0,%xmm7 - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d -.byte 102,15,58,15,225,4 - rorl $5,%r13d - xorl %r8d,%r14d -.byte 102,15,58,15,251,4 - andl %eax,%r12d - xorl %eax,%r13d - addl 16(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - movdqa %xmm4,%xmm5 - xorl %r9d,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - psrld $3,%xmm4 - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - paddd %xmm7,%xmm1 - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - psrld $7,%xmm6 - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - pshufd $250,%xmm0,%xmm7 - movl %eax,%r12d - pslld $14,%xmm5 - xorl %r11d,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %ebx,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %edx,%r14d - pxor %xmm5,%xmm4 - andl %r11d,%r12d - xorl %r11d,%r13d - pslld $11,%xmm5 - addl 20(%rsp),%ecx - pxor %xmm6,%xmm4 - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - movdqa %xmm7,%xmm6 - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %edx,%r14d - psrld $10,%xmm7 - addl %r13d,%ecx - xorl %r8d,%r15d - paddd %xmm4,%xmm1 - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - psrlq $17,%xmm6 - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - pxor %xmm6,%xmm7 - xorl %r10d,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - pxor %xmm6,%xmm7 - andl %r10d,%r12d - xorl %r10d,%r13d - addl 24(%rsp),%ebx -.byte 102,65,15,56,0,248 - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm1 - addl %r12d,%ebx - pshufd $80,%xmm1,%xmm7 - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - movdqa %xmm7,%xmm6 - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - psrld $10,%xmm7 - movl %r9d,%r13d - psrlq $17,%xmm6 - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - pxor %xmm6,%xmm7 - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - pxor %xmm6,%xmm7 - addl 28(%rsp),%eax - movl %ebx,%edi - movdqa 32(%rbp),%xmm6 - rorl $11,%r14d - xorl %r11d,%r12d -.byte 102,65,15,56,0,249 - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - paddd %xmm7,%xmm1 - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - paddd %xmm1,%xmm6 - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - movdqa %xmm6,16(%rsp) - rorl $14,%r13d - movl %r14d,%eax - movdqa %xmm3,%xmm4 - movl %r9d,%r12d - movdqa %xmm1,%xmm7 - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d -.byte 102,15,58,15,226,4 - rorl $5,%r13d - xorl %eax,%r14d -.byte 102,15,58,15,248,4 - andl %r8d,%r12d - xorl %r8d,%r13d - addl 32(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - movdqa %xmm4,%xmm5 - xorl %ebx,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - psrld $3,%xmm4 - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - paddd %xmm7,%xmm2 - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - psrld $7,%xmm6 - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - pshufd $250,%xmm1,%xmm7 - movl %r8d,%r12d - pslld $14,%xmm5 - xorl %edx,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %r9d,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %r11d,%r14d - pxor %xmm5,%xmm4 - andl %edx,%r12d - xorl %edx,%r13d - pslld $11,%xmm5 - addl 36(%rsp),%r10d - pxor %xmm6,%xmm4 - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - movdqa %xmm7,%xmm6 - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %r11d,%r14d - psrld $10,%xmm7 - addl %r13d,%r10d - xorl %eax,%r15d - paddd %xmm4,%xmm2 - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - psrlq $17,%xmm6 - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - pxor %xmm6,%xmm7 - xorl %ecx,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - pxor %xmm6,%xmm7 - andl %ecx,%r12d - xorl %ecx,%r13d - addl 40(%rsp),%r9d -.byte 102,65,15,56,0,248 - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm2 - addl %r12d,%r9d - pshufd $80,%xmm2,%xmm7 - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - movdqa %xmm7,%xmm6 - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - psrld $10,%xmm7 - movl %ebx,%r13d - psrlq $17,%xmm6 - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - pxor %xmm6,%xmm7 - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - pxor %xmm6,%xmm7 - addl 44(%rsp),%r8d - movl %r9d,%edi - movdqa 64(%rbp),%xmm6 - rorl $11,%r14d - xorl %edx,%r12d -.byte 102,65,15,56,0,249 - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - paddd %xmm7,%xmm2 - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - paddd %xmm2,%xmm6 - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - movdqa %xmm6,32(%rsp) - rorl $14,%r13d - movl %r14d,%r8d - movdqa %xmm0,%xmm4 - movl %ebx,%r12d - movdqa %xmm2,%xmm7 - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d -.byte 102,15,58,15,227,4 - rorl $5,%r13d - xorl %r8d,%r14d -.byte 102,15,58,15,249,4 - andl %eax,%r12d - xorl %eax,%r13d - addl 48(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - movdqa %xmm4,%xmm5 - xorl %r9d,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - psrld $3,%xmm4 - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - paddd %xmm7,%xmm3 - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - psrld $7,%xmm6 - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - pshufd $250,%xmm2,%xmm7 - movl %eax,%r12d - pslld $14,%xmm5 - xorl %r11d,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %ebx,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %edx,%r14d - pxor %xmm5,%xmm4 - andl %r11d,%r12d - xorl %r11d,%r13d - pslld $11,%xmm5 - addl 52(%rsp),%ecx - pxor %xmm6,%xmm4 - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - movdqa %xmm7,%xmm6 - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %edx,%r14d - psrld $10,%xmm7 - addl %r13d,%ecx - xorl %r8d,%r15d - paddd %xmm4,%xmm3 - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - psrlq $17,%xmm6 - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - pxor %xmm6,%xmm7 - xorl %r10d,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - pxor %xmm6,%xmm7 - andl %r10d,%r12d - xorl %r10d,%r13d - addl 56(%rsp),%ebx -.byte 102,65,15,56,0,248 - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm3 - addl %r12d,%ebx - pshufd $80,%xmm3,%xmm7 - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - movdqa %xmm7,%xmm6 - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - psrld $10,%xmm7 - movl %r9d,%r13d - psrlq $17,%xmm6 - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - pxor %xmm6,%xmm7 - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - pxor %xmm6,%xmm7 - addl 60(%rsp),%eax - movl %ebx,%edi - movdqa 96(%rbp),%xmm6 - rorl $11,%r14d - xorl %r11d,%r12d -.byte 102,65,15,56,0,249 - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - paddd %xmm7,%xmm3 - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - paddd %xmm3,%xmm6 - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - movdqa %xmm6,48(%rsp) - cmpb $0,131(%rbp) - jne .Lssse3_00_47 - rorl $14,%r13d - movl %r14d,%eax - movl %r9d,%r12d - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d - rorl $5,%r13d - xorl %eax,%r14d - andl %r8d,%r12d - xorl %r8d,%r13d - addl 0(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - xorl %ebx,%r15d - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - movl %r8d,%r12d - xorl %edx,%r13d - rorl $9,%r14d - xorl %r9d,%r12d - rorl $5,%r13d - xorl %r11d,%r14d - andl %edx,%r12d - xorl %edx,%r13d - addl 4(%rsp),%r10d - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - andl %edi,%r15d - xorl %r11d,%r14d - addl %r13d,%r10d - xorl %eax,%r15d - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - xorl %ecx,%r13d - rorl $9,%r14d - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - andl %ecx,%r12d - xorl %ecx,%r13d - addl 8(%rsp),%r9d - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - addl %r12d,%r9d - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - movl %ebx,%r13d - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - addl 12(%rsp),%r8d - movl %r9d,%edi - rorl $11,%r14d - xorl %edx,%r12d - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - rorl $14,%r13d - movl %r14d,%r8d - movl %ebx,%r12d - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d - rorl $5,%r13d - xorl %r8d,%r14d - andl %eax,%r12d - xorl %eax,%r13d - addl 16(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - xorl %r9d,%r15d - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - movl %eax,%r12d - xorl %r11d,%r13d - rorl $9,%r14d - xorl %ebx,%r12d - rorl $5,%r13d - xorl %edx,%r14d - andl %r11d,%r12d - xorl %r11d,%r13d - addl 20(%rsp),%ecx - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - andl %edi,%r15d - xorl %edx,%r14d - addl %r13d,%ecx - xorl %r8d,%r15d - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - xorl %r10d,%r13d - rorl $9,%r14d - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - andl %r10d,%r12d - xorl %r10d,%r13d - addl 24(%rsp),%ebx - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - addl %r12d,%ebx - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - movl %r9d,%r13d - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - addl 28(%rsp),%eax - movl %ebx,%edi - rorl $11,%r14d - xorl %r11d,%r12d - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - rorl $14,%r13d - movl %r14d,%eax - movl %r9d,%r12d - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d - rorl $5,%r13d - xorl %eax,%r14d - andl %r8d,%r12d - xorl %r8d,%r13d - addl 32(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - xorl %ebx,%r15d - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - movl %r8d,%r12d - xorl %edx,%r13d - rorl $9,%r14d - xorl %r9d,%r12d - rorl $5,%r13d - xorl %r11d,%r14d - andl %edx,%r12d - xorl %edx,%r13d - addl 36(%rsp),%r10d - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - andl %edi,%r15d - xorl %r11d,%r14d - addl %r13d,%r10d - xorl %eax,%r15d - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - xorl %ecx,%r13d - rorl $9,%r14d - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - andl %ecx,%r12d - xorl %ecx,%r13d - addl 40(%rsp),%r9d - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - addl %r12d,%r9d - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - movl %ebx,%r13d - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - addl 44(%rsp),%r8d - movl %r9d,%edi - rorl $11,%r14d - xorl %edx,%r12d - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - rorl $14,%r13d - movl %r14d,%r8d - movl %ebx,%r12d - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d - rorl $5,%r13d - xorl %r8d,%r14d - andl %eax,%r12d - xorl %eax,%r13d - addl 48(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - xorl %r9d,%r15d - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - movl %eax,%r12d - xorl %r11d,%r13d - rorl $9,%r14d - xorl %ebx,%r12d - rorl $5,%r13d - xorl %edx,%r14d - andl %r11d,%r12d - xorl %r11d,%r13d - addl 52(%rsp),%ecx - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - andl %edi,%r15d - xorl %edx,%r14d - addl %r13d,%ecx - xorl %r8d,%r15d - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - xorl %r10d,%r13d - rorl $9,%r14d - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - andl %r10d,%r12d - xorl %r10d,%r13d - addl 56(%rsp),%ebx - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - addl %r12d,%ebx - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - movl %r9d,%r13d - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - addl 60(%rsp),%eax - movl %ebx,%edi - rorl $11,%r14d - xorl %r11d,%r12d - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - movq 64+0(%rsp),%rdi - movl %r14d,%eax - - addl 0(%rdi),%eax - leaq 64(%rsi),%rsi - addl 4(%rdi),%ebx - addl 8(%rdi),%ecx - addl 12(%rdi),%edx - addl 16(%rdi),%r8d - addl 20(%rdi),%r9d - addl 24(%rdi),%r10d - addl 28(%rdi),%r11d - - cmpq 64+16(%rsp),%rsi - - movl %eax,0(%rdi) - movl %ebx,4(%rdi) - movl %ecx,8(%rdi) - movl %edx,12(%rdi) - movl %r8d,16(%rdi) - movl %r9d,20(%rdi) - movl %r10d,24(%rdi) - movl %r11d,28(%rdi) - jb .Lloop_ssse3 - - movq 64+24(%rsp),%rsi - movaps 64+32(%rsp),%xmm6 - movaps 64+48(%rsp),%xmm7 - movaps 64+64(%rsp),%xmm8 - movaps 64+80(%rsp),%xmm9 - movq (%rsi),%r15 - movq 8(%rsi),%r14 - movq 16(%rsi),%r13 - movq 24(%rsi),%r12 - movq 32(%rsi),%rbp - movq 40(%rsi),%rbx - leaq 48(%rsi),%rsp -.Lepilogue_ssse3: +.Lxop_00_47: + addq $256,%rbp + vpalignr $8,%xmm0,%xmm1,%xmm8 + rorq $23,%r13 + movq %r14,%rax + vpalignr $8,%xmm4,%xmm5,%xmm11 + movq %r9,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r8,%r13 + xorq %r10,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rax,%r14 + vpaddq %xmm11,%xmm0,%xmm0 + andq %r8,%r12 + xorq %r8,%r13 + addq 0(%rsp),%r11 + movq %rax,%r15 +.byte 143,72,120,195,209,7 + xorq %r10,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,223,3 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm7,%xmm10 + addq %r11,%rdx + addq %rdi,%r11 + vpaddq %xmm8,%xmm0,%xmm0 + movq %rdx,%r13 + addq %r11,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r11 + vpxor %xmm10,%xmm11,%xmm11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + vpaddq %xmm11,%xmm0,%xmm0 + addq 8(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + vpaddq -128(%rbp),%xmm0,%xmm10 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,0(%rsp) + vpalignr $8,%xmm1,%xmm2,%xmm8 + rorq $23,%r13 + movq %r14,%r10 + vpalignr $8,%xmm5,%xmm6,%xmm11 + movq %rdx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rcx,%r13 + xorq %r8,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r10,%r14 + vpaddq %xmm11,%xmm1,%xmm1 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 16(%rsp),%r9 + movq %r10,%r15 +.byte 143,72,120,195,209,7 + xorq %r8,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,216,3 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm0,%xmm10 + addq %r9,%rbx + addq %rdi,%r9 + vpaddq %xmm8,%xmm1,%xmm1 + movq %rbx,%r13 + addq %r9,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r9 + vpxor %xmm10,%xmm11,%xmm11 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + vpaddq %xmm11,%xmm1,%xmm1 + addq 24(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + vpaddq -96(%rbp),%xmm1,%xmm10 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,16(%rsp) + vpalignr $8,%xmm2,%xmm3,%xmm8 + rorq $23,%r13 + movq %r14,%r8 + vpalignr $8,%xmm6,%xmm7,%xmm11 + movq %rbx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rax,%r13 + xorq %rcx,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r8,%r14 + vpaddq %xmm11,%xmm2,%xmm2 + andq %rax,%r12 + xorq %rax,%r13 + addq 32(%rsp),%rdx + movq %r8,%r15 +.byte 143,72,120,195,209,7 + xorq %rcx,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,217,3 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm1,%xmm10 + addq %rdx,%r11 + addq %rdi,%rdx + vpaddq %xmm8,%xmm2,%xmm2 + movq %r11,%r13 + addq %rdx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rdx + vpxor %xmm10,%xmm11,%xmm11 + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + vpaddq %xmm11,%xmm2,%xmm2 + addq 40(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + vpaddq -64(%rbp),%xmm2,%xmm10 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,32(%rsp) + vpalignr $8,%xmm3,%xmm4,%xmm8 + rorq $23,%r13 + movq %r14,%rcx + vpalignr $8,%xmm7,%xmm0,%xmm11 + movq %r11,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r10,%r13 + xorq %rax,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rcx,%r14 + vpaddq %xmm11,%xmm3,%xmm3 + andq %r10,%r12 + xorq %r10,%r13 + addq 48(%rsp),%rbx + movq %rcx,%r15 +.byte 143,72,120,195,209,7 + xorq %rax,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,218,3 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm2,%xmm10 + addq %rbx,%r9 + addq %rdi,%rbx + vpaddq %xmm8,%xmm3,%xmm3 + movq %r9,%r13 + addq %rbx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rbx + vpxor %xmm10,%xmm11,%xmm11 + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + vpaddq %xmm11,%xmm3,%xmm3 + addq 56(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + vpaddq -32(%rbp),%xmm3,%xmm10 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,48(%rsp) + vpalignr $8,%xmm4,%xmm5,%xmm8 + rorq $23,%r13 + movq %r14,%rax + vpalignr $8,%xmm0,%xmm1,%xmm11 + movq %r9,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r8,%r13 + xorq %r10,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rax,%r14 + vpaddq %xmm11,%xmm4,%xmm4 + andq %r8,%r12 + xorq %r8,%r13 + addq 64(%rsp),%r11 + movq %rax,%r15 +.byte 143,72,120,195,209,7 + xorq %r10,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,219,3 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm3,%xmm10 + addq %r11,%rdx + addq %rdi,%r11 + vpaddq %xmm8,%xmm4,%xmm4 + movq %rdx,%r13 + addq %r11,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r11 + vpxor %xmm10,%xmm11,%xmm11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + vpaddq %xmm11,%xmm4,%xmm4 + addq 72(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + vpaddq 0(%rbp),%xmm4,%xmm10 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,64(%rsp) + vpalignr $8,%xmm5,%xmm6,%xmm8 + rorq $23,%r13 + movq %r14,%r10 + vpalignr $8,%xmm1,%xmm2,%xmm11 + movq %rdx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rcx,%r13 + xorq %r8,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r10,%r14 + vpaddq %xmm11,%xmm5,%xmm5 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 80(%rsp),%r9 + movq %r10,%r15 +.byte 143,72,120,195,209,7 + xorq %r8,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,220,3 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm4,%xmm10 + addq %r9,%rbx + addq %rdi,%r9 + vpaddq %xmm8,%xmm5,%xmm5 + movq %rbx,%r13 + addq %r9,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r9 + vpxor %xmm10,%xmm11,%xmm11 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + vpaddq %xmm11,%xmm5,%xmm5 + addq 88(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + vpaddq 32(%rbp),%xmm5,%xmm10 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,80(%rsp) + vpalignr $8,%xmm6,%xmm7,%xmm8 + rorq $23,%r13 + movq %r14,%r8 + vpalignr $8,%xmm2,%xmm3,%xmm11 + movq %rbx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rax,%r13 + xorq %rcx,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r8,%r14 + vpaddq %xmm11,%xmm6,%xmm6 + andq %rax,%r12 + xorq %rax,%r13 + addq 96(%rsp),%rdx + movq %r8,%r15 +.byte 143,72,120,195,209,7 + xorq %rcx,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,221,3 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm5,%xmm10 + addq %rdx,%r11 + addq %rdi,%rdx + vpaddq %xmm8,%xmm6,%xmm6 + movq %r11,%r13 + addq %rdx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rdx + vpxor %xmm10,%xmm11,%xmm11 + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + vpaddq %xmm11,%xmm6,%xmm6 + addq 104(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + vpaddq 64(%rbp),%xmm6,%xmm10 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,96(%rsp) + vpalignr $8,%xmm7,%xmm0,%xmm8 + rorq $23,%r13 + movq %r14,%rcx + vpalignr $8,%xmm3,%xmm4,%xmm11 + movq %r11,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r10,%r13 + xorq %rax,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rcx,%r14 + vpaddq %xmm11,%xmm7,%xmm7 + andq %r10,%r12 + xorq %r10,%r13 + addq 112(%rsp),%rbx + movq %rcx,%r15 +.byte 143,72,120,195,209,7 + xorq %rax,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,222,3 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm6,%xmm10 + addq %rbx,%r9 + addq %rdi,%rbx + vpaddq %xmm8,%xmm7,%xmm7 + movq %r9,%r13 + addq %rbx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rbx + vpxor %xmm10,%xmm11,%xmm11 + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + vpaddq %xmm11,%xmm7,%xmm7 + addq 120(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + vpaddq 96(%rbp),%xmm7,%xmm10 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,112(%rsp) + cmpb $0,135(%rbp) + jne .Lxop_00_47 + rorq $23,%r13 + movq %r14,%rax + movq %r9,%r12 + rorq $5,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + rorq $4,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 0(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + rorq $6,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + rorq $28,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + rorq $23,%r13 + movq %r14,%r11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 8(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + rorq $23,%r13 + movq %r14,%r10 + movq %rdx,%r12 + rorq $5,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + rorq $4,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 16(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + rorq $6,%r14 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + rorq $28,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + rorq $23,%r13 + movq %r14,%r9 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 24(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + rorq $23,%r13 + movq %r14,%r8 + movq %rbx,%r12 + rorq $5,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + rorq $4,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 32(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + rorq $6,%r14 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + rorq $28,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + rorq $23,%r13 + movq %r14,%rdx + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 40(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + rorq $23,%r13 + movq %r14,%rcx + movq %r11,%r12 + rorq $5,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + rorq $4,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 48(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + rorq $6,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + rorq $28,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + rorq $23,%r13 + movq %r14,%rbx + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 56(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + rorq $23,%r13 + movq %r14,%rax + movq %r9,%r12 + rorq $5,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + rorq $4,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 64(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + rorq $6,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + rorq $28,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + rorq $23,%r13 + movq %r14,%r11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 72(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + rorq $23,%r13 + movq %r14,%r10 + movq %rdx,%r12 + rorq $5,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + rorq $4,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 80(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + rorq $6,%r14 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + rorq $28,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + rorq $23,%r13 + movq %r14,%r9 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 88(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + rorq $23,%r13 + movq %r14,%r8 + movq %rbx,%r12 + rorq $5,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + rorq $4,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 96(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + rorq $6,%r14 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + rorq $28,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + rorq $23,%r13 + movq %r14,%rdx + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 104(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + rorq $23,%r13 + movq %r14,%rcx + movq %r11,%r12 + rorq $5,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + rorq $4,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 112(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + rorq $6,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + rorq $28,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + rorq $23,%r13 + movq %r14,%rbx + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 120(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + movq 128+0(%rsp),%rdi + movq %r14,%rax + + addq 0(%rdi),%rax + leaq 128(%rsi),%rsi + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + jb .Lloop_xop + + movq 152(%rsp),%rsi + + vzeroupper + movaps 128+32(%rsp),%xmm6 + movaps 128+48(%rsp),%xmm7 + movaps 128+64(%rsp),%xmm8 + movaps 128+80(%rsp),%xmm9 + movaps 128+96(%rsp),%xmm10 + movaps 128+112(%rsp),%xmm11 + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +.Lepilogue_xop: + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 + +.LSEH_end_sha512_block_data_order_xop: +.def sha512_block_data_order_avx; .scl 3; .type 32; .endef +.p2align 6 +sha512_block_data_order_avx: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_sha512_block_data_order_avx: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + + +.Lavx_shortcut: + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + shlq $4,%rdx + subq $256,%rsp + leaq (%rsi,%rdx,8),%rdx + andq $-64,%rsp + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) + + movaps %xmm6,128+32(%rsp) + movaps %xmm7,128+48(%rsp) + movaps %xmm8,128+64(%rsp) + movaps %xmm9,128+80(%rsp) + movaps %xmm10,128+96(%rsp) + movaps %xmm11,128+112(%rsp) +.Lprologue_avx: + + vzeroupper + movq 0(%rdi),%rax + movq 8(%rdi),%rbx + movq 16(%rdi),%rcx + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 + jmp .Lloop_avx +.p2align 4 +.Lloop_avx: + vmovdqa K512+1280(%rip),%xmm11 + vmovdqu 0(%rsi),%xmm0 + leaq K512+128(%rip),%rbp + vmovdqu 16(%rsi),%xmm1 + vmovdqu 32(%rsi),%xmm2 + vpshufb %xmm11,%xmm0,%xmm0 + vmovdqu 48(%rsi),%xmm3 + vpshufb %xmm11,%xmm1,%xmm1 + vmovdqu 64(%rsi),%xmm4 + vpshufb %xmm11,%xmm2,%xmm2 + vmovdqu 80(%rsi),%xmm5 + vpshufb %xmm11,%xmm3,%xmm3 + vmovdqu 96(%rsi),%xmm6 + vpshufb %xmm11,%xmm4,%xmm4 + vmovdqu 112(%rsi),%xmm7 + vpshufb %xmm11,%xmm5,%xmm5 + vpaddq -128(%rbp),%xmm0,%xmm8 + vpshufb %xmm11,%xmm6,%xmm6 + vpaddq -96(%rbp),%xmm1,%xmm9 + vpshufb %xmm11,%xmm7,%xmm7 + vpaddq -64(%rbp),%xmm2,%xmm10 + vpaddq -32(%rbp),%xmm3,%xmm11 + vmovdqa %xmm8,0(%rsp) + vpaddq 0(%rbp),%xmm4,%xmm8 + vmovdqa %xmm9,16(%rsp) + vpaddq 32(%rbp),%xmm5,%xmm9 + vmovdqa %xmm10,32(%rsp) + vpaddq 64(%rbp),%xmm6,%xmm10 + vmovdqa %xmm11,48(%rsp) + vpaddq 96(%rbp),%xmm7,%xmm11 + vmovdqa %xmm8,64(%rsp) + movq %rax,%r14 + vmovdqa %xmm9,80(%rsp) + movq %rbx,%rdi + vmovdqa %xmm10,96(%rsp) + xorq %rcx,%rdi + vmovdqa %xmm11,112(%rsp) + movq %r8,%r13 + jmp .Lavx_00_47 + +.p2align 4 +.Lavx_00_47: + addq $256,%rbp + vpalignr $8,%xmm0,%xmm1,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rax + vpalignr $8,%xmm4,%xmm5,%xmm11 + movq %r9,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r8,%r13 + xorq %r10,%r12 + vpaddq %xmm11,%xmm0,%xmm0 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r8,%r12 + xorq %r8,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 0(%rsp),%r11 + movq %rax,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rbx,%r15 + addq %r12,%r11 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm7,%xmm11 + addq %r11,%rdx + addq %rdi,%r11 + vpxor %xmm9,%xmm8,%xmm8 + movq %rdx,%r13 + addq %r11,%r14 + vpsllq $3,%xmm7,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r11 + vpaddq %xmm8,%xmm0,%xmm0 + movq %r8,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm7,%xmm9 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rdx,%r12 + xorq %rdx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 8(%rsp),%r10 + movq %r11,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r9,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rax,%rdi + addq %r12,%r10 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm0,%xmm0 + xorq %r11,%r14 + addq %r13,%r10 + vpaddq -128(%rbp),%xmm0,%xmm10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,0(%rsp) + vpalignr $8,%xmm1,%xmm2,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r10 + vpalignr $8,%xmm5,%xmm6,%xmm11 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rcx,%r13 + xorq %r8,%r12 + vpaddq %xmm11,%xmm1,%xmm1 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rcx,%r12 + xorq %rcx,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 16(%rsp),%r9 + movq %r10,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r11,%r15 + addq %r12,%r9 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm0,%xmm11 + addq %r9,%rbx + addq %rdi,%r9 + vpxor %xmm9,%xmm8,%xmm8 + movq %rbx,%r13 + addq %r9,%r14 + vpsllq $3,%xmm0,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r9 + vpaddq %xmm8,%xmm1,%xmm1 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm0,%xmm9 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rbx,%r12 + xorq %rbx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 24(%rsp),%r8 + movq %r9,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r10,%rdi + addq %r12,%r8 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm1,%xmm1 + xorq %r9,%r14 + addq %r13,%r8 + vpaddq -96(%rbp),%xmm1,%xmm10 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,16(%rsp) + vpalignr $8,%xmm2,%xmm3,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r8 + vpalignr $8,%xmm6,%xmm7,%xmm11 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rax,%r13 + xorq %rcx,%r12 + vpaddq %xmm11,%xmm2,%xmm2 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rax,%r12 + xorq %rax,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 32(%rsp),%rdx + movq %r8,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r9,%r15 + addq %r12,%rdx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm1,%xmm11 + addq %rdx,%r11 + addq %rdi,%rdx + vpxor %xmm9,%xmm8,%xmm8 + movq %r11,%r13 + addq %rdx,%r14 + vpsllq $3,%xmm1,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rdx + vpaddq %xmm8,%xmm2,%xmm2 + movq %rax,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm1,%xmm9 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r11,%r12 + xorq %r11,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 40(%rsp),%rcx + movq %rdx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r8,%rdi + addq %r12,%rcx + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm2,%xmm2 + xorq %rdx,%r14 + addq %r13,%rcx + vpaddq -64(%rbp),%xmm2,%xmm10 + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,32(%rsp) + vpalignr $8,%xmm3,%xmm4,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rcx + vpalignr $8,%xmm7,%xmm0,%xmm11 + movq %r11,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r10,%r13 + xorq %rax,%r12 + vpaddq %xmm11,%xmm3,%xmm3 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r10,%r12 + xorq %r10,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 48(%rsp),%rbx + movq %rcx,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rdx,%r15 + addq %r12,%rbx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm2,%xmm11 + addq %rbx,%r9 + addq %rdi,%rbx + vpxor %xmm9,%xmm8,%xmm8 + movq %r9,%r13 + addq %rbx,%r14 + vpsllq $3,%xmm2,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rbx + vpaddq %xmm8,%xmm3,%xmm3 + movq %r10,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm2,%xmm9 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r9,%r12 + xorq %r9,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 56(%rsp),%rax + movq %rbx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r11,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rcx,%rdi + addq %r12,%rax + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm3,%xmm3 + xorq %rbx,%r14 + addq %r13,%rax + vpaddq -32(%rbp),%xmm3,%xmm10 + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,48(%rsp) + vpalignr $8,%xmm4,%xmm5,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rax + vpalignr $8,%xmm0,%xmm1,%xmm11 + movq %r9,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r8,%r13 + xorq %r10,%r12 + vpaddq %xmm11,%xmm4,%xmm4 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r8,%r12 + xorq %r8,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 64(%rsp),%r11 + movq %rax,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rbx,%r15 + addq %r12,%r11 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm3,%xmm11 + addq %r11,%rdx + addq %rdi,%r11 + vpxor %xmm9,%xmm8,%xmm8 + movq %rdx,%r13 + addq %r11,%r14 + vpsllq $3,%xmm3,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r11 + vpaddq %xmm8,%xmm4,%xmm4 + movq %r8,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm3,%xmm9 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rdx,%r12 + xorq %rdx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 72(%rsp),%r10 + movq %r11,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r9,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rax,%rdi + addq %r12,%r10 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm4,%xmm4 + xorq %r11,%r14 + addq %r13,%r10 + vpaddq 0(%rbp),%xmm4,%xmm10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,64(%rsp) + vpalignr $8,%xmm5,%xmm6,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r10 + vpalignr $8,%xmm1,%xmm2,%xmm11 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rcx,%r13 + xorq %r8,%r12 + vpaddq %xmm11,%xmm5,%xmm5 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rcx,%r12 + xorq %rcx,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 80(%rsp),%r9 + movq %r10,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r11,%r15 + addq %r12,%r9 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm4,%xmm11 + addq %r9,%rbx + addq %rdi,%r9 + vpxor %xmm9,%xmm8,%xmm8 + movq %rbx,%r13 + addq %r9,%r14 + vpsllq $3,%xmm4,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r9 + vpaddq %xmm8,%xmm5,%xmm5 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm4,%xmm9 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rbx,%r12 + xorq %rbx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 88(%rsp),%r8 + movq %r9,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r10,%rdi + addq %r12,%r8 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm5,%xmm5 + xorq %r9,%r14 + addq %r13,%r8 + vpaddq 32(%rbp),%xmm5,%xmm10 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,80(%rsp) + vpalignr $8,%xmm6,%xmm7,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r8 + vpalignr $8,%xmm2,%xmm3,%xmm11 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rax,%r13 + xorq %rcx,%r12 + vpaddq %xmm11,%xmm6,%xmm6 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rax,%r12 + xorq %rax,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 96(%rsp),%rdx + movq %r8,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r9,%r15 + addq %r12,%rdx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm5,%xmm11 + addq %rdx,%r11 + addq %rdi,%rdx + vpxor %xmm9,%xmm8,%xmm8 + movq %r11,%r13 + addq %rdx,%r14 + vpsllq $3,%xmm5,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rdx + vpaddq %xmm8,%xmm6,%xmm6 + movq %rax,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm5,%xmm9 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r11,%r12 + xorq %r11,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 104(%rsp),%rcx + movq %rdx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r8,%rdi + addq %r12,%rcx + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm6,%xmm6 + xorq %rdx,%r14 + addq %r13,%rcx + vpaddq 64(%rbp),%xmm6,%xmm10 + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,96(%rsp) + vpalignr $8,%xmm7,%xmm0,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rcx + vpalignr $8,%xmm3,%xmm4,%xmm11 + movq %r11,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r10,%r13 + xorq %rax,%r12 + vpaddq %xmm11,%xmm7,%xmm7 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r10,%r12 + xorq %r10,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 112(%rsp),%rbx + movq %rcx,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rdx,%r15 + addq %r12,%rbx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm6,%xmm11 + addq %rbx,%r9 + addq %rdi,%rbx + vpxor %xmm9,%xmm8,%xmm8 + movq %r9,%r13 + addq %rbx,%r14 + vpsllq $3,%xmm6,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rbx + vpaddq %xmm8,%xmm7,%xmm7 + movq %r10,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm6,%xmm9 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r9,%r12 + xorq %r9,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 120(%rsp),%rax + movq %rbx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r11,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rcx,%rdi + addq %r12,%rax + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm7,%xmm7 + xorq %rbx,%r14 + addq %r13,%rax + vpaddq 96(%rbp),%xmm7,%xmm10 + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,112(%rsp) + cmpb $0,135(%rbp) + jne .Lavx_00_47 + shrdq $23,%r13,%r13 + movq %r14,%rax + movq %r9,%r12 + shrdq $5,%r14,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 0(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r11 + movq %r8,%r12 + shrdq $5,%r14,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 8(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + shrdq $6,%r14,%r14 + xorq %rax,%rdi + addq %r12,%r10 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r10 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 16(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + xorq %r11,%r15 + addq %r12,%r9 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r9 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 24(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + xorq %r10,%rdi + addq %r12,%r8 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r8 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 32(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + xorq %r9,%r15 + addq %r12,%rdx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + shrdq $28,%r14,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rdx + movq %rax,%r12 + shrdq $5,%r14,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 40(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + xorq %r8,%rdi + addq %r12,%rcx + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rcx + movq %r11,%r12 + shrdq $5,%r14,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 48(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rbx + movq %r10,%r12 + shrdq $5,%r14,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 56(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + shrdq $6,%r14,%r14 + xorq %rcx,%rdi + addq %r12,%rax + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rax + movq %r9,%r12 + shrdq $5,%r14,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 64(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r11 + movq %r8,%r12 + shrdq $5,%r14,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 72(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + shrdq $6,%r14,%r14 + xorq %rax,%rdi + addq %r12,%r10 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r10 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 80(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + xorq %r11,%r15 + addq %r12,%r9 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r9 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 88(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + xorq %r10,%rdi + addq %r12,%r8 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r8 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 96(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + xorq %r9,%r15 + addq %r12,%rdx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + shrdq $28,%r14,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rdx + movq %rax,%r12 + shrdq $5,%r14,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 104(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + xorq %r8,%rdi + addq %r12,%rcx + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rcx + movq %r11,%r12 + shrdq $5,%r14,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 112(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rbx + movq %r10,%r12 + shrdq $5,%r14,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 120(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + shrdq $6,%r14,%r14 + xorq %rcx,%rdi + addq %r12,%rax + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + movq 128+0(%rsp),%rdi + movq %r14,%rax + + addq 0(%rdi),%rax + leaq 128(%rsi),%rsi + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + jb .Lloop_avx + + movq 152(%rsp),%rsi + + vzeroupper + movaps 128+32(%rsp),%xmm6 + movaps 128+48(%rsp),%xmm7 + movaps 128+64(%rsp),%xmm8 + movaps 128+80(%rsp),%xmm9 + movaps 128+96(%rsp),%xmm10 + movaps 128+112(%rsp),%xmm11 + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +.Lepilogue_avx: + movq 8(%rsp),%rdi + movq 16(%rsp),%rsi + .byte 0xf3,0xc3 + +.LSEH_end_sha512_block_data_order_avx: +.def sha512_block_data_order_avx2; .scl 3; .type 32; .endef +.p2align 6 +sha512_block_data_order_avx2: + movq %rdi,8(%rsp) + movq %rsi,16(%rsp) + movq %rsp,%rax +.LSEH_begin_sha512_block_data_order_avx2: + movq %rcx,%rdi + movq %rdx,%rsi + movq %r8,%rdx + + +.Lavx2_shortcut: + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + subq $1408,%rsp + shlq $4,%rdx + andq $-2048,%rsp + leaq (%rsi,%rdx,8),%rdx + addq $1152,%rsp + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) + + movaps %xmm6,128+32(%rsp) + movaps %xmm7,128+48(%rsp) + movaps %xmm8,128+64(%rsp) + movaps %xmm9,128+80(%rsp) + movaps %xmm10,128+96(%rsp) + movaps %xmm11,128+112(%rsp) +.Lprologue_avx2: + + vzeroupper + subq $-128,%rsi + movq 0(%rdi),%rax + movq %rsi,%r12 + movq 8(%rdi),%rbx + cmpq %rdx,%rsi + movq 16(%rdi),%rcx + cmoveq %rsp,%r12 + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 + jmp .Loop_avx2 +.p2align 4 +.Loop_avx2: + vmovdqu -128(%rsi),%xmm0 + vmovdqu -128+16(%rsi),%xmm1 + vmovdqu -128+32(%rsi),%xmm2 + leaq K512+128(%rip),%rbp + vmovdqu -128+48(%rsi),%xmm3 + vmovdqu -128+64(%rsi),%xmm4 + vmovdqu -128+80(%rsi),%xmm5 + vmovdqu -128+96(%rsi),%xmm6 + vmovdqu -128+112(%rsi),%xmm7 + + vmovdqa 1152(%rbp),%ymm10 + vinserti128 $1,(%r12),%ymm0,%ymm0 + vinserti128 $1,16(%r12),%ymm1,%ymm1 + vpshufb %ymm10,%ymm0,%ymm0 + vinserti128 $1,32(%r12),%ymm2,%ymm2 + vpshufb %ymm10,%ymm1,%ymm1 + vinserti128 $1,48(%r12),%ymm3,%ymm3 + vpshufb %ymm10,%ymm2,%ymm2 + vinserti128 $1,64(%r12),%ymm4,%ymm4 + vpshufb %ymm10,%ymm3,%ymm3 + vinserti128 $1,80(%r12),%ymm5,%ymm5 + vpshufb %ymm10,%ymm4,%ymm4 + vinserti128 $1,96(%r12),%ymm6,%ymm6 + vpshufb %ymm10,%ymm5,%ymm5 + vinserti128 $1,112(%r12),%ymm7,%ymm7 + + vpaddq -128(%rbp),%ymm0,%ymm8 + vpshufb %ymm10,%ymm6,%ymm6 + vpaddq -96(%rbp),%ymm1,%ymm9 + vpshufb %ymm10,%ymm7,%ymm7 + vpaddq -64(%rbp),%ymm2,%ymm10 + vpaddq -32(%rbp),%ymm3,%ymm11 + vmovdqa %ymm8,0(%rsp) + vpaddq 0(%rbp),%ymm4,%ymm8 + vmovdqa %ymm9,32(%rsp) + vpaddq 32(%rbp),%ymm5,%ymm9 + vmovdqa %ymm10,64(%rsp) + vpaddq 64(%rbp),%ymm6,%ymm10 + vmovdqa %ymm11,96(%rsp) + leaq -128(%rsp),%rsp + vpaddq 96(%rbp),%ymm7,%ymm11 + vmovdqa %ymm8,0(%rsp) + xorq %r14,%r14 + vmovdqa %ymm9,32(%rsp) + movq %rbx,%rdi + vmovdqa %ymm10,64(%rsp) + xorq %rcx,%rdi + vmovdqa %ymm11,96(%rsp) + movq %r9,%r12 + addq $32*8,%rbp + jmp .Lavx2_00_47 + +.p2align 4 +.Lavx2_00_47: + leaq -128(%rsp),%rsp + vpalignr $8,%ymm0,%ymm1,%ymm8 + addq 0+256(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + vpalignr $8,%ymm4,%ymm5,%ymm11 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + vpsrlq $1,%ymm8,%ymm10 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + vpaddq %ymm11,%ymm0,%ymm0 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + vpsrlq $6,%ymm7,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + vpsllq $3,%ymm7,%ymm10 + vpaddq %ymm8,%ymm0,%ymm0 + addq 8+256(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + vpsrlq $19,%ymm7,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + vpaddq %ymm11,%ymm0,%ymm0 + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + vpaddq -128(%rbp),%ymm0,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + vmovdqa %ymm10,0(%rsp) + vpalignr $8,%ymm1,%ymm2,%ymm8 + addq 32+256(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + vpalignr $8,%ymm5,%ymm6,%ymm11 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + vpsrlq $1,%ymm8,%ymm10 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + vpaddq %ymm11,%ymm1,%ymm1 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + vpsrlq $6,%ymm0,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + vpsllq $3,%ymm0,%ymm10 + vpaddq %ymm8,%ymm1,%ymm1 + addq 40+256(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + vpsrlq $19,%ymm0,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + vpaddq %ymm11,%ymm1,%ymm1 + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + vpaddq -96(%rbp),%ymm1,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + vmovdqa %ymm10,32(%rsp) + vpalignr $8,%ymm2,%ymm3,%ymm8 + addq 64+256(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + vpalignr $8,%ymm6,%ymm7,%ymm11 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + vpsrlq $1,%ymm8,%ymm10 + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + vpaddq %ymm11,%ymm2,%ymm2 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + vpsrlq $6,%ymm1,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + vpsllq $3,%ymm1,%ymm10 + vpaddq %ymm8,%ymm2,%ymm2 + addq 72+256(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + vpsrlq $19,%ymm1,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + vpaddq %ymm11,%ymm2,%ymm2 + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + vpaddq -64(%rbp),%ymm2,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + vmovdqa %ymm10,64(%rsp) + vpalignr $8,%ymm3,%ymm4,%ymm8 + addq 96+256(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + vpalignr $8,%ymm7,%ymm0,%ymm11 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + vpsrlq $1,%ymm8,%ymm10 + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + vpaddq %ymm11,%ymm3,%ymm3 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + vpsrlq $6,%ymm2,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + vpsllq $3,%ymm2,%ymm10 + vpaddq %ymm8,%ymm3,%ymm3 + addq 104+256(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + vpsrlq $19,%ymm2,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + vpaddq %ymm11,%ymm3,%ymm3 + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + vpaddq -32(%rbp),%ymm3,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + vmovdqa %ymm10,96(%rsp) + leaq -128(%rsp),%rsp + vpalignr $8,%ymm4,%ymm5,%ymm8 + addq 0+256(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + vpalignr $8,%ymm0,%ymm1,%ymm11 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + vpsrlq $1,%ymm8,%ymm10 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + vpaddq %ymm11,%ymm4,%ymm4 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + vpsrlq $6,%ymm3,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + vpsllq $3,%ymm3,%ymm10 + vpaddq %ymm8,%ymm4,%ymm4 + addq 8+256(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + vpsrlq $19,%ymm3,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + vpaddq %ymm11,%ymm4,%ymm4 + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + vpaddq 0(%rbp),%ymm4,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + vmovdqa %ymm10,0(%rsp) + vpalignr $8,%ymm5,%ymm6,%ymm8 + addq 32+256(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + vpalignr $8,%ymm1,%ymm2,%ymm11 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + vpsrlq $1,%ymm8,%ymm10 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + vpaddq %ymm11,%ymm5,%ymm5 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + vpsrlq $6,%ymm4,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + vpsllq $3,%ymm4,%ymm10 + vpaddq %ymm8,%ymm5,%ymm5 + addq 40+256(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + vpsrlq $19,%ymm4,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + vpaddq %ymm11,%ymm5,%ymm5 + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + vpaddq 32(%rbp),%ymm5,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + vmovdqa %ymm10,32(%rsp) + vpalignr $8,%ymm6,%ymm7,%ymm8 + addq 64+256(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + vpalignr $8,%ymm2,%ymm3,%ymm11 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + vpsrlq $1,%ymm8,%ymm10 + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + vpaddq %ymm11,%ymm6,%ymm6 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + vpsrlq $6,%ymm5,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + vpsllq $3,%ymm5,%ymm10 + vpaddq %ymm8,%ymm6,%ymm6 + addq 72+256(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + vpsrlq $19,%ymm5,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + vpaddq %ymm11,%ymm6,%ymm6 + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + vpaddq 64(%rbp),%ymm6,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + vmovdqa %ymm10,64(%rsp) + vpalignr $8,%ymm7,%ymm0,%ymm8 + addq 96+256(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + vpalignr $8,%ymm3,%ymm4,%ymm11 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + vpsrlq $1,%ymm8,%ymm10 + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + vpaddq %ymm11,%ymm7,%ymm7 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + vpsrlq $6,%ymm6,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + vpsllq $3,%ymm6,%ymm10 + vpaddq %ymm8,%ymm7,%ymm7 + addq 104+256(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + vpsrlq $19,%ymm6,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + vpaddq %ymm11,%ymm7,%ymm7 + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + vpaddq 96(%rbp),%ymm7,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + vmovdqa %ymm10,96(%rsp) + leaq 256(%rbp),%rbp + cmpb $0,-121(%rbp) + jne .Lavx2_00_47 + addq 0+128(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + addq 8+128(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + addq 32+128(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + addq 40+128(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + addq 64+128(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + addq 72+128(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + addq 96+128(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + addq 104+128(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + addq 0(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + addq 8(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + addq 32(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + addq 40(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + addq 64(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + addq 72(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + addq 96(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + addq 104(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + movq 1280(%rsp),%rdi + addq %r14,%rax + + leaq 1152(%rsp),%rbp + + addq 0(%rdi),%rax + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + + cmpq 144(%rbp),%rsi + je .Ldone_avx2 + + xorq %r14,%r14 + movq %rbx,%rdi + xorq %rcx,%rdi + movq %r9,%r12 + jmp .Lower_avx2 +.p2align 4 +.Lower_avx2: + addq 0+16(%rbp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + addq 8+16(%rbp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + addq 32+16(%rbp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + addq 40+16(%rbp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + addq 64+16(%rbp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + addq 72+16(%rbp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + addq 96+16(%rbp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + addq 104+16(%rbp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + leaq -128(%rbp),%rbp + cmpq %rsp,%rbp + jae .Lower_avx2 + + movq 1280(%rsp),%rdi + addq %r14,%rax + + leaq 1152(%rsp),%rsp + + addq 0(%rdi),%rax + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + leaq 256(%rsi),%rsi + addq 48(%rdi),%r10 + movq %rsi,%r12 + addq 56(%rdi),%r11 + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + cmoveq %rsp,%r12 + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + + jbe .Loop_avx2 + leaq (%rsp),%rbp + +.Ldone_avx2: + leaq (%rbp),%rsp + movq 152(%rsp),%rsi + + vzeroupper + movaps 128+32(%rsp),%xmm6 + movaps 128+48(%rsp),%xmm7 + movaps 128+64(%rsp),%xmm8 + movaps 128+80(%rsp),%xmm9 + movaps 128+96(%rsp),%xmm10 + movaps 128+112(%rsp),%xmm11 + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +.Lepilogue_avx2: movq 8(%rsp),%rdi movq 16(%rsp),%rsi .byte 0xf3,0xc3 -.LSEH_end_sha256_block_data_order_ssse3: + +.LSEH_end_sha512_block_data_order_avx2: .def se_handler; .scl 3; .type 32; .endef .p2align 4 @@ -2946,9 +5582,15 @@ se_handler: leaq (%rsi,%r10,1),%r10 cmpq %r10,%rbx jae .Lin_prologue + leaq .Lavx2_shortcut(%rip),%r10 + cmpq %r10,%rbx + jb .Lnot_in_avx2 + + andq $-2048,%rax + addq $1152,%rax +.Lnot_in_avx2: movq %rax,%rsi - movq 64+24(%rax),%rax - leaq 48(%rax),%rax + movq 128+24(%rax),%rax movq -8(%rax),%rbx movq -16(%rax),%rbp @@ -2965,12 +5607,12 @@ se_handler: leaq .Lepilogue(%rip),%r10 cmpq %r10,%rbx - jb .Lin_prologue + jb .Lin_prologue - leaq 64+32(%rsi),%rsi + leaq 128+32(%rsi),%rsi leaq 512(%r8),%rdi - movl $8,%ecx -.long 0xa548f3fc + movl $12,%ecx +.long 0xa548f3fc .Lin_prologue: movq 8(%rax),%rdi @@ -2982,7 +5624,7 @@ se_handler: movq 40(%r9),%rdi movq %r8,%rsi movl $154,%ecx -.long 0xa548f3fc +.long 0xa548f3fc movq %r9,%rsi xorq %rcx,%rcx @@ -3011,23 +5653,36 @@ se_handler: popq %rsi .byte 0xf3,0xc3 - .section .pdata .p2align 2 -.rva .LSEH_begin_sha256_block_data_order -.rva .LSEH_end_sha256_block_data_order -.rva .LSEH_info_sha256_block_data_order -.rva .LSEH_begin_sha256_block_data_order_ssse3 -.rva .LSEH_end_sha256_block_data_order_ssse3 -.rva .LSEH_info_sha256_block_data_order_ssse3 +.rva .LSEH_begin_sha512_block_data_order +.rva .LSEH_end_sha512_block_data_order +.rva .LSEH_info_sha512_block_data_order +.rva .LSEH_begin_sha512_block_data_order_xop +.rva .LSEH_end_sha512_block_data_order_xop +.rva .LSEH_info_sha512_block_data_order_xop +.rva .LSEH_begin_sha512_block_data_order_avx +.rva .LSEH_end_sha512_block_data_order_avx +.rva .LSEH_info_sha512_block_data_order_avx +.rva .LSEH_begin_sha512_block_data_order_avx2 +.rva .LSEH_end_sha512_block_data_order_avx2 +.rva .LSEH_info_sha512_block_data_order_avx2 .section .xdata .p2align 3 -.LSEH_info_sha256_block_data_order: +.LSEH_info_sha512_block_data_order: +.byte 9,0,0,0 +.rva se_handler +.rva .Lprologue,.Lepilogue +.LSEH_info_sha512_block_data_order_xop: +.byte 9,0,0,0 +.rva se_handler +.rva .Lprologue_xop,.Lepilogue_xop +.LSEH_info_sha512_block_data_order_avx: .byte 9,0,0,0 .rva se_handler -.rva .Lprologue,.Lepilogue -.LSEH_info_sha256_block_data_order_ssse3: +.rva .Lprologue_avx,.Lepilogue_avx +.LSEH_info_sha512_block_data_order_avx2: .byte 9,0,0,0 .rva se_handler -.rva .Lprologue_ssse3,.Lepilogue_ssse3 +.rva .Lprologue_avx2,.Lepilogue_avx2 diff --git a/lib/accelerated/x86/elf/aes-ssse3-x86.s b/lib/accelerated/x86/elf/aes-ssse3-x86.s index 3aa221267a..265e28a7ef 100644 --- a/lib/accelerated/x86/elf/aes-ssse3-x86.s +++ b/lib/accelerated/x86/elf/aes-ssse3-x86.s @@ -10,7 +10,6 @@ # # *** This file is auto-generated *** # -.file "vpaes-x86.s" .text .align 64 .L_vpaes_consts: diff --git a/lib/accelerated/x86/elf/aes-ssse3-x86_64.s b/lib/accelerated/x86/elf/aes-ssse3-x86_64.s index 31a6161c58..ea1216baf7 100644 --- a/lib/accelerated/x86/elf/aes-ssse3-x86_64.s +++ b/lib/accelerated/x86/elf/aes-ssse3-x86_64.s @@ -30,6 +30,7 @@ .type _vpaes_encrypt_core,@function .align 16 _vpaes_encrypt_core: +.cfi_startproc movq %rdx,%r9 movq $16,%r11 movl 240(%rdx),%eax @@ -110,6 +111,7 @@ _vpaes_encrypt_core: pxor %xmm4,%xmm0 .byte 102,15,56,0,193 .byte 0xf3,0xc3 +.cfi_endproc .size _vpaes_encrypt_core,.-_vpaes_encrypt_core @@ -120,6 +122,7 @@ _vpaes_encrypt_core: .type _vpaes_decrypt_core,@function .align 16 _vpaes_decrypt_core: +.cfi_startproc movq %rdx,%r9 movl 240(%rdx),%eax movdqa %xmm9,%xmm1 @@ -216,6 +219,7 @@ _vpaes_decrypt_core: pxor %xmm4,%xmm0 .byte 102,15,56,0,194 .byte 0xf3,0xc3 +.cfi_endproc .size _vpaes_decrypt_core,.-_vpaes_decrypt_core @@ -226,6 +230,7 @@ _vpaes_decrypt_core: .type _vpaes_schedule_core,@function .align 16 _vpaes_schedule_core: +.cfi_startproc @@ -392,6 +397,7 @@ _vpaes_schedule_core: pxor %xmm6,%xmm6 pxor %xmm7,%xmm7 .byte 0xf3,0xc3 +.cfi_endproc .size _vpaes_schedule_core,.-_vpaes_schedule_core @@ -411,6 +417,7 @@ _vpaes_schedule_core: .type _vpaes_schedule_192_smear,@function .align 16 _vpaes_schedule_192_smear: +.cfi_startproc pshufd $0x80,%xmm6,%xmm1 pshufd $0xFE,%xmm7,%xmm0 pxor %xmm1,%xmm6 @@ -419,6 +426,7 @@ _vpaes_schedule_192_smear: movdqa %xmm6,%xmm0 movhlps %xmm1,%xmm6 .byte 0xf3,0xc3 +.cfi_endproc .size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear @@ -442,6 +450,7 @@ _vpaes_schedule_192_smear: .type _vpaes_schedule_round,@function .align 16 _vpaes_schedule_round: +.cfi_startproc pxor %xmm1,%xmm1 .byte 102,65,15,58,15,200,15 @@ -495,6 +504,7 @@ _vpaes_schedule_low_round: pxor %xmm7,%xmm0 movdqa %xmm0,%xmm7 .byte 0xf3,0xc3 +.cfi_endproc .size _vpaes_schedule_round,.-_vpaes_schedule_round @@ -509,6 +519,7 @@ _vpaes_schedule_low_round: .type _vpaes_schedule_transform,@function .align 16 _vpaes_schedule_transform: +.cfi_startproc movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 @@ -519,6 +530,7 @@ _vpaes_schedule_transform: .byte 102,15,56,0,193 pxor %xmm2,%xmm0 .byte 0xf3,0xc3 +.cfi_endproc .size _vpaes_schedule_transform,.-_vpaes_schedule_transform @@ -547,6 +559,7 @@ _vpaes_schedule_transform: .type _vpaes_schedule_mangle,@function .align 16 _vpaes_schedule_mangle: +.cfi_startproc movdqa %xmm0,%xmm4 movdqa .Lk_mc_forward(%rip),%xmm5 testq %rcx,%rcx @@ -611,6 +624,7 @@ _vpaes_schedule_mangle: andq $0x30,%r8 movdqu %xmm3,(%rdx) .byte 0xf3,0xc3 +.cfi_endproc .size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle @@ -620,6 +634,7 @@ _vpaes_schedule_mangle: .type vpaes_set_encrypt_key,@function .align 16 vpaes_set_encrypt_key: +.cfi_startproc movl %esi,%eax shrl $5,%eax addl $5,%eax @@ -630,12 +645,14 @@ vpaes_set_encrypt_key: call _vpaes_schedule_core xorl %eax,%eax .byte 0xf3,0xc3 +.cfi_endproc .size vpaes_set_encrypt_key,.-vpaes_set_encrypt_key .globl vpaes_set_decrypt_key .type vpaes_set_decrypt_key,@function .align 16 vpaes_set_decrypt_key: +.cfi_startproc movl %esi,%eax shrl $5,%eax addl $5,%eax @@ -651,33 +668,39 @@ vpaes_set_decrypt_key: call _vpaes_schedule_core xorl %eax,%eax .byte 0xf3,0xc3 +.cfi_endproc .size vpaes_set_decrypt_key,.-vpaes_set_decrypt_key .globl vpaes_encrypt .type vpaes_encrypt,@function .align 16 vpaes_encrypt: +.cfi_startproc movdqu (%rdi),%xmm0 call _vpaes_preheat call _vpaes_encrypt_core movdqu %xmm0,(%rsi) .byte 0xf3,0xc3 +.cfi_endproc .size vpaes_encrypt,.-vpaes_encrypt .globl vpaes_decrypt .type vpaes_decrypt,@function .align 16 vpaes_decrypt: +.cfi_startproc movdqu (%rdi),%xmm0 call _vpaes_preheat call _vpaes_decrypt_core movdqu %xmm0,(%rsi) .byte 0xf3,0xc3 +.cfi_endproc .size vpaes_decrypt,.-vpaes_decrypt .globl vpaes_cbc_encrypt .type vpaes_cbc_encrypt,@function .align 16 vpaes_cbc_encrypt: +.cfi_startproc xchgq %rcx,%rdx subq $16,%rcx jc .Lcbc_abort @@ -713,6 +736,7 @@ vpaes_cbc_encrypt: movdqu %xmm6,(%r8) .Lcbc_abort: .byte 0xf3,0xc3 +.cfi_endproc .size vpaes_cbc_encrypt,.-vpaes_cbc_encrypt @@ -723,6 +747,7 @@ vpaes_cbc_encrypt: .type _vpaes_preheat,@function .align 16 _vpaes_preheat: +.cfi_startproc leaq .Lk_s0F(%rip),%r10 movdqa -32(%r10),%xmm10 movdqa -16(%r10),%xmm11 @@ -732,6 +757,7 @@ _vpaes_preheat: movdqa 80(%r10),%xmm15 movdqa 96(%r10),%xmm14 .byte 0xf3,0xc3 +.cfi_endproc .size _vpaes_preheat,.-_vpaes_preheat diff --git a/lib/accelerated/x86/elf/aesni-gcm-x86_64.s b/lib/accelerated/x86/elf/aesni-gcm-x86_64.s index 07f177d8d4..e26d18d69f 100644 --- a/lib/accelerated/x86/elf/aesni-gcm-x86_64.s +++ b/lib/accelerated/x86/elf/aesni-gcm-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -354,17 +354,25 @@ _aesni_ctr32_ghash_6x: .type aesni_gcm_decrypt,@function .align 32 aesni_gcm_decrypt: +.cfi_startproc xorq %r10,%r10 cmpq $0x60,%rdx jb .Lgcm_dec_abort leaq (%rsp),%rax +.cfi_def_cfa_register %rax pushq %rbx +.cfi_offset %rbx,-16 pushq %rbp +.cfi_offset %rbp,-24 pushq %r12 +.cfi_offset %r12,-32 pushq %r13 +.cfi_offset %r13,-40 pushq %r14 +.cfi_offset %r14,-48 pushq %r15 +.cfi_offset %r15,-56 vzeroupper vmovdqu (%r8),%xmm1 @@ -426,15 +434,23 @@ aesni_gcm_decrypt: vzeroupper 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 .Lgcm_dec_abort: movq %r10,%rax .byte 0xf3,0xc3 +.cfi_endproc .size aesni_gcm_decrypt,.-aesni_gcm_decrypt .type _aesni_ctr32_6x,@function .align 32 @@ -531,17 +547,25 @@ _aesni_ctr32_6x: .type aesni_gcm_encrypt,@function .align 32 aesni_gcm_encrypt: +.cfi_startproc xorq %r10,%r10 cmpq $288,%rdx jb .Lgcm_enc_abort leaq (%rsp),%rax +.cfi_def_cfa_register %rax pushq %rbx +.cfi_offset %rbx,-16 pushq %rbp +.cfi_offset %rbp,-24 pushq %r12 +.cfi_offset %r12,-32 pushq %r13 +.cfi_offset %r13,-40 pushq %r14 +.cfi_offset %r14,-48 pushq %r15 +.cfi_offset %r15,-56 vzeroupper vmovdqu (%r8),%xmm1 @@ -767,15 +791,23 @@ aesni_gcm_encrypt: vzeroupper 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 .Lgcm_enc_abort: movq %r10,%rax .byte 0xf3,0xc3 +.cfi_endproc .size aesni_gcm_encrypt,.-aesni_gcm_encrypt .align 64 .Lbswap_mask: diff --git a/lib/accelerated/x86/elf/aesni-x86.s b/lib/accelerated/x86/elf/aesni-x86.s index 5d70f2568f..6e4860209f 100644 --- a/lib/accelerated/x86/elf/aesni-x86.s +++ b/lib/accelerated/x86/elf/aesni-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "devel/perlasm/aesni-x86.s" .text .globl aesni_encrypt .type aesni_encrypt,@function @@ -60,7 +59,10 @@ aesni_encrypt: leal 16(%edx),%edx jnz .L000enc1_loop_1 .byte 102,15,56,221,209 + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 movups %xmm2,(%eax) + pxor %xmm2,%xmm2 ret .size aesni_encrypt,.-.L_aesni_encrypt_begin .globl aesni_decrypt @@ -84,32 +86,90 @@ aesni_decrypt: leal 16(%edx),%edx jnz .L001dec1_loop_2 .byte 102,15,56,223,209 + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 movups %xmm2,(%eax) + pxor %xmm2,%xmm2 ret .size aesni_decrypt,.-.L_aesni_decrypt_begin +.type _aesni_encrypt2,@function +.align 16 +_aesni_encrypt2: + movups (%edx),%xmm0 + shll $4,%ecx + movups 16(%edx),%xmm1 + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +.L002enc2_loop: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 + movups -16(%edx,%ecx,1),%xmm0 + jnz .L002enc2_loop +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,221,208 +.byte 102,15,56,221,216 + ret +.size _aesni_encrypt2,.-_aesni_encrypt2 +.type _aesni_decrypt2,@function +.align 16 +_aesni_decrypt2: + movups (%edx),%xmm0 + shll $4,%ecx + movups 16(%edx),%xmm1 + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +.L003dec2_loop: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 + movups -16(%edx,%ecx,1),%xmm0 + jnz .L003dec2_loop +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,223,208 +.byte 102,15,56,223,216 + ret +.size _aesni_decrypt2,.-_aesni_decrypt2 .type _aesni_encrypt3,@function .align 16 _aesni_encrypt3: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 - movups (%edx),%xmm0 -.L002enc3_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +.L004enc3_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 - decl %ecx .byte 102,15,56,220,225 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 .byte 102,15,56,220,216 - leal 32(%edx),%edx .byte 102,15,56,220,224 - movups (%edx),%xmm0 - jnz .L002enc3_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L004enc3_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 @@ -122,25 +182,26 @@ _aesni_encrypt3: .align 16 _aesni_decrypt3: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 - movups (%edx),%xmm0 -.L003dec3_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +.L005dec3_loop: .byte 102,15,56,222,209 .byte 102,15,56,222,217 - decl %ecx .byte 102,15,56,222,225 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,222,208 .byte 102,15,56,222,216 - leal 32(%edx),%edx .byte 102,15,56,222,224 - movups (%edx),%xmm0 - jnz .L003dec3_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L005dec3_loop .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 @@ -154,27 +215,29 @@ _aesni_decrypt3: _aesni_encrypt4: movups (%edx),%xmm0 movups 16(%edx),%xmm1 - shrl $1,%ecx - leal 32(%edx),%edx + shll $4,%ecx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 pxor %xmm0,%xmm5 - movups (%edx),%xmm0 -.L004enc4_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 15,31,64,0 + addl $16,%ecx +.L006enc4_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 - decl %ecx .byte 102,15,56,220,225 .byte 102,15,56,220,233 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 .byte 102,15,56,220,216 - leal 32(%edx),%edx .byte 102,15,56,220,224 .byte 102,15,56,220,232 - movups (%edx),%xmm0 - jnz .L004enc4_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L006enc4_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 @@ -190,27 +253,29 @@ _aesni_encrypt4: _aesni_decrypt4: movups (%edx),%xmm0 movups 16(%edx),%xmm1 - shrl $1,%ecx - leal 32(%edx),%edx + shll $4,%ecx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 pxor %xmm0,%xmm5 - movups (%edx),%xmm0 -.L005dec4_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 15,31,64,0 + addl $16,%ecx +.L007dec4_loop: .byte 102,15,56,222,209 .byte 102,15,56,222,217 - decl %ecx .byte 102,15,56,222,225 .byte 102,15,56,222,233 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,222,208 .byte 102,15,56,222,216 - leal 32(%edx),%edx .byte 102,15,56,222,224 .byte 102,15,56,222,232 - movups (%edx),%xmm0 - jnz .L005dec4_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L007dec4_loop .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 @@ -225,45 +290,42 @@ _aesni_decrypt4: .align 16 _aesni_encrypt6: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 -.byte 102,15,56,220,209 pxor %xmm0,%xmm4 -.byte 102,15,56,220,217 +.byte 102,15,56,220,209 pxor %xmm0,%xmm5 - decl %ecx -.byte 102,15,56,220,225 pxor %xmm0,%xmm6 -.byte 102,15,56,220,233 +.byte 102,15,56,220,217 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 102,15,56,220,225 pxor %xmm0,%xmm7 -.byte 102,15,56,220,241 - movups (%edx),%xmm0 -.byte 102,15,56,220,249 - jmp .L_aesni_encrypt6_enter + movups (%edx,%ecx,1),%xmm0 + addl $16,%ecx + jmp .L008_aesni_encrypt6_inner .align 16 -.L006enc6_loop: +.L009enc6_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 - decl %ecx .byte 102,15,56,220,225 +.L008_aesni_encrypt6_inner: .byte 102,15,56,220,233 .byte 102,15,56,220,241 .byte 102,15,56,220,249 -.align 16 .L_aesni_encrypt6_enter: - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 .byte 102,15,56,220,216 - leal 32(%edx),%edx .byte 102,15,56,220,224 .byte 102,15,56,220,232 .byte 102,15,56,220,240 .byte 102,15,56,220,248 - movups (%edx),%xmm0 - jnz .L006enc6_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L009enc6_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 @@ -282,45 +344,42 @@ _aesni_encrypt6: .align 16 _aesni_decrypt6: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 -.byte 102,15,56,222,209 pxor %xmm0,%xmm4 -.byte 102,15,56,222,217 +.byte 102,15,56,222,209 pxor %xmm0,%xmm5 - decl %ecx -.byte 102,15,56,222,225 pxor %xmm0,%xmm6 -.byte 102,15,56,222,233 +.byte 102,15,56,222,217 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 102,15,56,222,225 pxor %xmm0,%xmm7 -.byte 102,15,56,222,241 - movups (%edx),%xmm0 -.byte 102,15,56,222,249 - jmp .L_aesni_decrypt6_enter + movups (%edx,%ecx,1),%xmm0 + addl $16,%ecx + jmp .L010_aesni_decrypt6_inner .align 16 -.L007dec6_loop: +.L011dec6_loop: .byte 102,15,56,222,209 .byte 102,15,56,222,217 - decl %ecx .byte 102,15,56,222,225 +.L010_aesni_decrypt6_inner: .byte 102,15,56,222,233 .byte 102,15,56,222,241 .byte 102,15,56,222,249 -.align 16 .L_aesni_decrypt6_enter: - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,222,208 .byte 102,15,56,222,216 - leal 32(%edx),%edx .byte 102,15,56,222,224 .byte 102,15,56,222,232 .byte 102,15,56,222,240 .byte 102,15,56,222,248 - movups (%edx),%xmm0 - jnz .L007dec6_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L011dec6_loop .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 @@ -350,14 +409,14 @@ aesni_ecb_encrypt: movl 32(%esp),%edx movl 36(%esp),%ebx andl $-16,%eax - jz .L008ecb_ret + jz .L012ecb_ret movl 240(%edx),%ecx testl %ebx,%ebx - jz .L009ecb_decrypt + jz .L013ecb_decrypt movl %edx,%ebp movl %ecx,%ebx cmpl $96,%eax - jb .L010ecb_enc_tail + jb .L014ecb_enc_tail movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -366,9 +425,9 @@ aesni_ecb_encrypt: movdqu 80(%esi),%xmm7 leal 96(%esi),%esi subl $96,%eax - jmp .L011ecb_enc_loop6_enter + jmp .L015ecb_enc_loop6_enter .align 16 -.L012ecb_enc_loop6: +.L016ecb_enc_loop6: movups %xmm2,(%edi) movdqu (%esi),%xmm2 movups %xmm3,16(%edi) @@ -383,12 +442,12 @@ aesni_ecb_encrypt: leal 96(%edi),%edi movdqu 80(%esi),%xmm7 leal 96(%esi),%esi -.L011ecb_enc_loop6_enter: +.L015ecb_enc_loop6_enter: call _aesni_encrypt6 movl %ebp,%edx movl %ebx,%ecx subl $96,%eax - jnc .L012ecb_enc_loop6 + jnc .L016ecb_enc_loop6 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) @@ -397,18 +456,18 @@ aesni_ecb_encrypt: movups %xmm7,80(%edi) leal 96(%edi),%edi addl $96,%eax - jz .L008ecb_ret -.L010ecb_enc_tail: + jz .L012ecb_ret +.L014ecb_enc_tail: movups (%esi),%xmm2 cmpl $32,%eax - jb .L013ecb_enc_one + jb .L017ecb_enc_one movups 16(%esi),%xmm3 - je .L014ecb_enc_two + je .L018ecb_enc_two movups 32(%esi),%xmm4 cmpl $64,%eax - jb .L015ecb_enc_three + jb .L019ecb_enc_three movups 48(%esi),%xmm5 - je .L016ecb_enc_four + je .L020ecb_enc_four movups 64(%esi),%xmm6 xorps %xmm7,%xmm7 call _aesni_encrypt6 @@ -417,50 +476,49 @@ aesni_ecb_encrypt: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L013ecb_enc_one: +.L017ecb_enc_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L017enc1_loop_3: +.L021enc1_loop_3: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L017enc1_loop_3 + jnz .L021enc1_loop_3 .byte 102,15,56,221,209 movups %xmm2,(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L014ecb_enc_two: - xorps %xmm4,%xmm4 - call _aesni_encrypt3 +.L018ecb_enc_two: + call _aesni_encrypt2 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L015ecb_enc_three: +.L019ecb_enc_three: call _aesni_encrypt3 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L016ecb_enc_four: +.L020ecb_enc_four: call _aesni_encrypt4 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) movups %xmm5,48(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L009ecb_decrypt: +.L013ecb_decrypt: movl %edx,%ebp movl %ecx,%ebx cmpl $96,%eax - jb .L018ecb_dec_tail + jb .L022ecb_dec_tail movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -469,9 +527,9 @@ aesni_ecb_encrypt: movdqu 80(%esi),%xmm7 leal 96(%esi),%esi subl $96,%eax - jmp .L019ecb_dec_loop6_enter + jmp .L023ecb_dec_loop6_enter .align 16 -.L020ecb_dec_loop6: +.L024ecb_dec_loop6: movups %xmm2,(%edi) movdqu (%esi),%xmm2 movups %xmm3,16(%edi) @@ -486,12 +544,12 @@ aesni_ecb_encrypt: leal 96(%edi),%edi movdqu 80(%esi),%xmm7 leal 96(%esi),%esi -.L019ecb_dec_loop6_enter: +.L023ecb_dec_loop6_enter: call _aesni_decrypt6 movl %ebp,%edx movl %ebx,%ecx subl $96,%eax - jnc .L020ecb_dec_loop6 + jnc .L024ecb_dec_loop6 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) @@ -500,18 +558,18 @@ aesni_ecb_encrypt: movups %xmm7,80(%edi) leal 96(%edi),%edi addl $96,%eax - jz .L008ecb_ret -.L018ecb_dec_tail: + jz .L012ecb_ret +.L022ecb_dec_tail: movups (%esi),%xmm2 cmpl $32,%eax - jb .L021ecb_dec_one + jb .L025ecb_dec_one movups 16(%esi),%xmm3 - je .L022ecb_dec_two + je .L026ecb_dec_two movups 32(%esi),%xmm4 cmpl $64,%eax - jb .L023ecb_dec_three + jb .L027ecb_dec_three movups 48(%esi),%xmm5 - je .L024ecb_dec_four + je .L028ecb_dec_four movups 64(%esi),%xmm6 xorps %xmm7,%xmm7 call _aesni_decrypt6 @@ -520,44 +578,51 @@ aesni_ecb_encrypt: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L021ecb_dec_one: +.L025ecb_dec_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L025dec1_loop_4: +.L029dec1_loop_4: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L025dec1_loop_4 + jnz .L029dec1_loop_4 .byte 102,15,56,223,209 movups %xmm2,(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L022ecb_dec_two: - xorps %xmm4,%xmm4 - call _aesni_decrypt3 +.L026ecb_dec_two: + call _aesni_decrypt2 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L023ecb_dec_three: +.L027ecb_dec_three: call _aesni_decrypt3 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp .L008ecb_ret + jmp .L012ecb_ret .align 16 -.L024ecb_dec_four: +.L028ecb_dec_four: call _aesni_decrypt4 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) movups %xmm5,48(%edi) -.L008ecb_ret: +.L012ecb_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -596,48 +661,56 @@ aesni_ccm64_encrypt_blocks: movl %ebp,20(%esp) movl %ebp,24(%esp) movl %ebp,28(%esp) - shrl $1,%ecx + shll $4,%ecx + movl $16,%ebx leal (%edx),%ebp movdqa (%esp),%xmm5 movdqa %xmm7,%xmm2 - movl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx + subl %ecx,%ebx .byte 102,15,56,0,253 -.L026ccm64_enc_outer: +.L030ccm64_enc_outer: movups (%ebp),%xmm0 movl %ebx,%ecx movups (%esi),%xmm6 xorps %xmm0,%xmm2 movups 16(%ebp),%xmm1 xorps %xmm6,%xmm0 - leal 32(%ebp),%edx xorps %xmm0,%xmm3 - movups (%edx),%xmm0 -.L027ccm64_enc2_loop: + movups 32(%ebp),%xmm0 +.L031ccm64_enc2_loop: .byte 102,15,56,220,209 - decl %ecx .byte 102,15,56,220,217 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 - leal 32(%edx),%edx .byte 102,15,56,220,216 - movups (%edx),%xmm0 - jnz .L027ccm64_enc2_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L031ccm64_enc2_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 paddq 16(%esp),%xmm7 + decl %eax .byte 102,15,56,221,208 .byte 102,15,56,221,216 - decl %eax leal 16(%esi),%esi xorps %xmm2,%xmm6 movdqa %xmm7,%xmm2 movups %xmm6,(%edi) - leal 16(%edi),%edi .byte 102,15,56,0,213 - jnz .L026ccm64_enc_outer + leal 16(%edi),%edi + jnz .L030ccm64_enc_outer movl 48(%esp),%esp movl 40(%esp),%edi movups %xmm3,(%edi) + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -685,71 +758,82 @@ aesni_ccm64_decrypt_blocks: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L028enc1_loop_5: +.L032enc1_loop_5: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L028enc1_loop_5 + jnz .L032enc1_loop_5 .byte 102,15,56,221,209 + shll $4,%ebx + movl $16,%ecx movups (%esi),%xmm6 paddq 16(%esp),%xmm7 leal 16(%esi),%esi - jmp .L029ccm64_dec_outer + subl %ebx,%ecx + leal 32(%ebp,%ebx,1),%edx + movl %ecx,%ebx + jmp .L033ccm64_dec_outer .align 16 -.L029ccm64_dec_outer: +.L033ccm64_dec_outer: xorps %xmm2,%xmm6 movdqa %xmm7,%xmm2 - movl %ebx,%ecx movups %xmm6,(%edi) leal 16(%edi),%edi .byte 102,15,56,0,213 subl $1,%eax - jz .L030ccm64_dec_break + jz .L034ccm64_dec_break movups (%ebp),%xmm0 - shrl $1,%ecx + movl %ebx,%ecx movups 16(%ebp),%xmm1 xorps %xmm0,%xmm6 - leal 32(%ebp),%edx xorps %xmm0,%xmm2 xorps %xmm6,%xmm3 - movups (%edx),%xmm0 -.L031ccm64_dec2_loop: + movups 32(%ebp),%xmm0 +.L035ccm64_dec2_loop: .byte 102,15,56,220,209 - decl %ecx .byte 102,15,56,220,217 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 - leal 32(%edx),%edx .byte 102,15,56,220,216 - movups (%edx),%xmm0 - jnz .L031ccm64_dec2_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz .L035ccm64_dec2_loop movups (%esi),%xmm6 paddq 16(%esp),%xmm7 .byte 102,15,56,220,209 .byte 102,15,56,220,217 - leal 16(%esi),%esi .byte 102,15,56,221,208 .byte 102,15,56,221,216 - jmp .L029ccm64_dec_outer + leal 16(%esi),%esi + jmp .L033ccm64_dec_outer .align 16 -.L030ccm64_dec_break: +.L034ccm64_dec_break: + movl 240(%ebp),%ecx movl %ebp,%edx movups (%edx),%xmm0 movups 16(%edx),%xmm1 xorps %xmm0,%xmm6 leal 32(%edx),%edx xorps %xmm6,%xmm3 -.L032enc1_loop_6: +.L036enc1_loop_6: .byte 102,15,56,220,217 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L032enc1_loop_6 + jnz .L036enc1_loop_6 .byte 102,15,56,221,217 movl 48(%esp),%esp movl 40(%esp),%edi movups %xmm3,(%edi) + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -775,7 +859,7 @@ aesni_ctr32_encrypt_blocks: andl $-16,%esp movl %ebp,80(%esp) cmpl $1,%eax - je .L033ctr32_one_shortcut + je .L037ctr32_one_shortcut movdqu (%ebx),%xmm7 movl $202182159,(%esp) movl $134810123,4(%esp) @@ -791,63 +875,59 @@ aesni_ctr32_encrypt_blocks: .byte 102,15,58,34,253,3 movl 240(%edx),%ecx bswap %ebx - pxor %xmm1,%xmm1 pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 movdqa (%esp),%xmm2 -.byte 102,15,58,34,203,0 +.byte 102,15,58,34,195,0 leal 3(%ebx),%ebp -.byte 102,15,58,34,197,0 +.byte 102,15,58,34,205,0 incl %ebx -.byte 102,15,58,34,203,1 +.byte 102,15,58,34,195,1 incl %ebp -.byte 102,15,58,34,197,1 +.byte 102,15,58,34,205,1 incl %ebx -.byte 102,15,58,34,203,2 +.byte 102,15,58,34,195,2 incl %ebp -.byte 102,15,58,34,197,2 - movdqa %xmm1,48(%esp) -.byte 102,15,56,0,202 - movdqa %xmm0,64(%esp) +.byte 102,15,58,34,205,2 + movdqa %xmm0,48(%esp) .byte 102,15,56,0,194 - pshufd $192,%xmm1,%xmm2 - pshufd $128,%xmm1,%xmm3 + movdqu (%edx),%xmm6 + movdqa %xmm1,64(%esp) +.byte 102,15,56,0,202 + pshufd $192,%xmm0,%xmm2 + pshufd $128,%xmm0,%xmm3 cmpl $6,%eax - jb .L034ctr32_tail + jb .L038ctr32_tail + pxor %xmm6,%xmm7 + shll $4,%ecx + movl $16,%ebx movdqa %xmm7,32(%esp) - shrl $1,%ecx movl %edx,%ebp - movl %ecx,%ebx + subl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx subl $6,%eax - jmp .L035ctr32_loop6 -.align 16 -.L035ctr32_loop6: - pshufd $64,%xmm1,%xmm4 - movdqa 32(%esp),%xmm1 - pshufd $192,%xmm0,%xmm5 - por %xmm1,%xmm2 - pshufd $128,%xmm0,%xmm6 - por %xmm1,%xmm3 - pshufd $64,%xmm0,%xmm7 - por %xmm1,%xmm4 - por %xmm1,%xmm5 - por %xmm1,%xmm6 - por %xmm1,%xmm7 - movups (%ebp),%xmm0 - movups 16(%ebp),%xmm1 - leal 32(%ebp),%edx - decl %ecx + jmp .L039ctr32_loop6 +.align 16 +.L039ctr32_loop6: + pshufd $64,%xmm0,%xmm4 + movdqa 32(%esp),%xmm0 + pshufd $192,%xmm1,%xmm5 pxor %xmm0,%xmm2 + pshufd $128,%xmm1,%xmm6 pxor %xmm0,%xmm3 -.byte 102,15,56,220,209 + pshufd $64,%xmm1,%xmm7 + movups 16(%ebp),%xmm1 pxor %xmm0,%xmm4 -.byte 102,15,56,220,217 pxor %xmm0,%xmm5 -.byte 102,15,56,220,225 +.byte 102,15,56,220,209 pxor %xmm0,%xmm6 -.byte 102,15,56,220,233 pxor %xmm0,%xmm7 +.byte 102,15,56,220,217 + movups 32(%ebp),%xmm0 + movl %ebx,%ecx +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 .byte 102,15,56,220,241 - movups (%edx),%xmm0 .byte 102,15,56,220,249 call .L_aesni_encrypt6_enter movups (%esi),%xmm1 @@ -858,51 +938,51 @@ aesni_ctr32_encrypt_blocks: movups %xmm2,(%edi) movdqa 16(%esp),%xmm0 xorps %xmm1,%xmm4 - movdqa 48(%esp),%xmm1 + movdqa 64(%esp),%xmm1 movups %xmm3,16(%edi) movups %xmm4,32(%edi) paddd %xmm0,%xmm1 - paddd 64(%esp),%xmm0 + paddd 48(%esp),%xmm0 movdqa (%esp),%xmm2 movups 48(%esi),%xmm3 movups 64(%esi),%xmm4 xorps %xmm3,%xmm5 movups 80(%esi),%xmm3 leal 96(%esi),%esi - movdqa %xmm1,48(%esp) -.byte 102,15,56,0,202 + movdqa %xmm0,48(%esp) +.byte 102,15,56,0,194 xorps %xmm4,%xmm6 movups %xmm5,48(%edi) xorps %xmm3,%xmm7 - movdqa %xmm0,64(%esp) -.byte 102,15,56,0,194 + movdqa %xmm1,64(%esp) +.byte 102,15,56,0,202 movups %xmm6,64(%edi) - pshufd $192,%xmm1,%xmm2 + pshufd $192,%xmm0,%xmm2 movups %xmm7,80(%edi) leal 96(%edi),%edi - movl %ebx,%ecx - pshufd $128,%xmm1,%xmm3 + pshufd $128,%xmm0,%xmm3 subl $6,%eax - jnc .L035ctr32_loop6 + jnc .L039ctr32_loop6 addl $6,%eax - jz .L036ctr32_ret + jz .L040ctr32_ret + movdqu (%ebp),%xmm7 movl %ebp,%edx - leal 1(,%ecx,2),%ecx - movdqa 32(%esp),%xmm7 -.L034ctr32_tail: + pxor 32(%esp),%xmm7 + movl 240(%ebp),%ecx +.L038ctr32_tail: por %xmm7,%xmm2 cmpl $2,%eax - jb .L037ctr32_one - pshufd $64,%xmm1,%xmm4 + jb .L041ctr32_one + pshufd $64,%xmm0,%xmm4 por %xmm7,%xmm3 - je .L038ctr32_two - pshufd $192,%xmm0,%xmm5 + je .L042ctr32_two + pshufd $192,%xmm1,%xmm5 por %xmm7,%xmm4 cmpl $4,%eax - jb .L039ctr32_three - pshufd $128,%xmm0,%xmm6 + jb .L043ctr32_three + pshufd $128,%xmm1,%xmm6 por %xmm7,%xmm5 - je .L040ctr32_four + je .L044ctr32_four por %xmm7,%xmm6 call _aesni_encrypt6 movups (%esi),%xmm1 @@ -920,39 +1000,39 @@ aesni_ctr32_encrypt_blocks: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp .L036ctr32_ret + jmp .L040ctr32_ret .align 16 -.L033ctr32_one_shortcut: +.L037ctr32_one_shortcut: movups (%ebx),%xmm2 movl 240(%edx),%ecx -.L037ctr32_one: +.L041ctr32_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L041enc1_loop_7: +.L045enc1_loop_7: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L041enc1_loop_7 + jnz .L045enc1_loop_7 .byte 102,15,56,221,209 movups (%esi),%xmm6 xorps %xmm2,%xmm6 movups %xmm6,(%edi) - jmp .L036ctr32_ret + jmp .L040ctr32_ret .align 16 -.L038ctr32_two: - call _aesni_encrypt3 +.L042ctr32_two: + call _aesni_encrypt2 movups (%esi),%xmm5 movups 16(%esi),%xmm6 xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp .L036ctr32_ret + jmp .L040ctr32_ret .align 16 -.L039ctr32_three: +.L043ctr32_three: call _aesni_encrypt3 movups (%esi),%xmm5 movups 16(%esi),%xmm6 @@ -963,9 +1043,9 @@ aesni_ctr32_encrypt_blocks: xorps %xmm7,%xmm4 movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp .L036ctr32_ret + jmp .L040ctr32_ret .align 16 -.L040ctr32_four: +.L044ctr32_four: call _aesni_encrypt4 movups (%esi),%xmm6 movups 16(%esi),%xmm7 @@ -979,7 +1059,18 @@ aesni_ctr32_encrypt_blocks: xorps %xmm0,%xmm5 movups %xmm4,32(%edi) movups %xmm5,48(%edi) -.L036ctr32_ret: +.L040ctr32_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + movdqa %xmm0,32(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm0,48(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm0,64(%esp) + pxor %xmm7,%xmm7 movl 80(%esp),%esp popl %edi popl %esi @@ -1004,12 +1095,12 @@ aesni_xts_encrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L042enc1_loop_8: +.L046enc1_loop_8: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L042enc1_loop_8 + jnz .L046enc1_loop_8 .byte 102,15,56,221,209 movl 20(%esp),%esi movl 24(%esp),%edi @@ -1033,12 +1124,14 @@ aesni_xts_encrypt: movl %edx,%ebp movl %ecx,%ebx subl $96,%eax - jc .L043xts_enc_short - shrl $1,%ecx - movl %ecx,%ebx - jmp .L044xts_enc_loop6 + jc .L047xts_enc_short + shll $4,%ecx + movl $16,%ebx + subl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx + jmp .L048xts_enc_loop6 .align 16 -.L044xts_enc_loop6: +.L048xts_enc_loop6: pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,(%esp) @@ -1074,6 +1167,7 @@ aesni_xts_encrypt: pand %xmm3,%xmm7 movups (%esi),%xmm2 pxor %xmm1,%xmm7 + movl %ebx,%ecx movdqu 16(%esi),%xmm3 xorps %xmm0,%xmm2 movdqu 32(%esi),%xmm4 @@ -1089,19 +1183,17 @@ aesni_xts_encrypt: movdqa %xmm7,80(%esp) pxor %xmm1,%xmm7 movups 16(%ebp),%xmm1 - leal 32(%ebp),%edx pxor 16(%esp),%xmm3 -.byte 102,15,56,220,209 pxor 32(%esp),%xmm4 -.byte 102,15,56,220,217 +.byte 102,15,56,220,209 pxor 48(%esp),%xmm5 - decl %ecx -.byte 102,15,56,220,225 pxor 64(%esp),%xmm6 -.byte 102,15,56,220,233 +.byte 102,15,56,220,217 pxor %xmm0,%xmm7 + movups 32(%ebp),%xmm0 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 .byte 102,15,56,220,241 - movups (%edx),%xmm0 .byte 102,15,56,220,249 call .L_aesni_encrypt6_enter movdqa 80(%esp),%xmm1 @@ -1126,26 +1218,25 @@ aesni_xts_encrypt: paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 - movl %ebx,%ecx pxor %xmm2,%xmm1 subl $96,%eax - jnc .L044xts_enc_loop6 - leal 1(,%ecx,2),%ecx + jnc .L048xts_enc_loop6 + movl 240(%ebp),%ecx movl %ebp,%edx movl %ecx,%ebx -.L043xts_enc_short: +.L047xts_enc_short: addl $96,%eax - jz .L045xts_enc_done6x + jz .L049xts_enc_done6x movdqa %xmm1,%xmm5 cmpl $32,%eax - jb .L046xts_enc_one + jb .L050xts_enc_one pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 - je .L047xts_enc_two + je .L051xts_enc_two pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm6 @@ -1154,7 +1245,7 @@ aesni_xts_encrypt: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 cmpl $64,%eax - jb .L048xts_enc_three + jb .L052xts_enc_three pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm7 @@ -1164,7 +1255,7 @@ aesni_xts_encrypt: pxor %xmm2,%xmm1 movdqa %xmm5,(%esp) movdqa %xmm6,16(%esp) - je .L049xts_enc_four + je .L053xts_enc_four movdqa %xmm7,32(%esp) pshufd $19,%xmm0,%xmm7 movdqa %xmm1,48(%esp) @@ -1196,9 +1287,9 @@ aesni_xts_encrypt: movups %xmm5,48(%edi) movups %xmm6,64(%edi) leal 80(%edi),%edi - jmp .L050xts_enc_done + jmp .L054xts_enc_done .align 16 -.L046xts_enc_one: +.L050xts_enc_one: movups (%esi),%xmm2 leal 16(%esi),%esi xorps %xmm5,%xmm2 @@ -1206,37 +1297,36 @@ aesni_xts_encrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L051enc1_loop_9: +.L055enc1_loop_9: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L051enc1_loop_9 + jnz .L055enc1_loop_9 .byte 102,15,56,221,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) leal 16(%edi),%edi movdqa %xmm5,%xmm1 - jmp .L050xts_enc_done + jmp .L054xts_enc_done .align 16 -.L047xts_enc_two: +.L051xts_enc_two: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 leal 32(%esi),%esi xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 - xorps %xmm4,%xmm4 - call _aesni_encrypt3 + call _aesni_encrypt2 xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movups %xmm3,16(%edi) leal 32(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L050xts_enc_done + jmp .L054xts_enc_done .align 16 -.L048xts_enc_three: +.L052xts_enc_three: movaps %xmm1,%xmm7 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1254,9 +1344,9 @@ aesni_xts_encrypt: movups %xmm4,32(%edi) leal 48(%edi),%edi movdqa %xmm7,%xmm1 - jmp .L050xts_enc_done + jmp .L054xts_enc_done .align 16 -.L049xts_enc_four: +.L053xts_enc_four: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1278,28 +1368,28 @@ aesni_xts_encrypt: movups %xmm5,48(%edi) leal 64(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L050xts_enc_done + jmp .L054xts_enc_done .align 16 -.L045xts_enc_done6x: +.L049xts_enc_done6x: movl 112(%esp),%eax andl $15,%eax - jz .L052xts_enc_ret + jz .L056xts_enc_ret movdqa %xmm1,%xmm5 movl %eax,112(%esp) - jmp .L053xts_enc_steal + jmp .L057xts_enc_steal .align 16 -.L050xts_enc_done: +.L054xts_enc_done: movl 112(%esp),%eax pxor %xmm0,%xmm0 andl $15,%eax - jz .L052xts_enc_ret + jz .L056xts_enc_ret pcmpgtd %xmm1,%xmm0 movl %eax,112(%esp) pshufd $19,%xmm0,%xmm5 paddq %xmm1,%xmm1 pand 96(%esp),%xmm5 pxor %xmm1,%xmm5 -.L053xts_enc_steal: +.L057xts_enc_steal: movzbl (%esi),%ecx movzbl -16(%edi),%edx leal 1(%esi),%esi @@ -1307,7 +1397,7 @@ aesni_xts_encrypt: movb %dl,(%edi) leal 1(%edi),%edi subl $1,%eax - jnz .L053xts_enc_steal + jnz .L057xts_enc_steal subl 112(%esp),%edi movl %ebp,%edx movl %ebx,%ecx @@ -1317,16 +1407,30 @@ aesni_xts_encrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L054enc1_loop_10: +.L058enc1_loop_10: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L054enc1_loop_10 + jnz .L058enc1_loop_10 .byte 102,15,56,221,209 xorps %xmm5,%xmm2 movups %xmm2,-16(%edi) -.L052xts_enc_ret: +.L056xts_enc_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + movdqa %xmm0,(%esp) + pxor %xmm3,%xmm3 + movdqa %xmm0,16(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm0,32(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm0,48(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm0,64(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm0,80(%esp) movl 116(%esp),%esp popl %edi popl %esi @@ -1351,12 +1455,12 @@ aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L055enc1_loop_11: +.L059enc1_loop_11: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L055enc1_loop_11 + jnz .L059enc1_loop_11 .byte 102,15,56,221,209 movl 20(%esp),%esi movl 24(%esp),%edi @@ -1385,12 +1489,14 @@ aesni_xts_decrypt: pcmpgtd %xmm1,%xmm0 andl $-16,%eax subl $96,%eax - jc .L056xts_dec_short - shrl $1,%ecx - movl %ecx,%ebx - jmp .L057xts_dec_loop6 + jc .L060xts_dec_short + shll $4,%ecx + movl $16,%ebx + subl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx + jmp .L061xts_dec_loop6 .align 16 -.L057xts_dec_loop6: +.L061xts_dec_loop6: pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,(%esp) @@ -1426,6 +1532,7 @@ aesni_xts_decrypt: pand %xmm3,%xmm7 movups (%esi),%xmm2 pxor %xmm1,%xmm7 + movl %ebx,%ecx movdqu 16(%esi),%xmm3 xorps %xmm0,%xmm2 movdqu 32(%esi),%xmm4 @@ -1441,19 +1548,17 @@ aesni_xts_decrypt: movdqa %xmm7,80(%esp) pxor %xmm1,%xmm7 movups 16(%ebp),%xmm1 - leal 32(%ebp),%edx pxor 16(%esp),%xmm3 -.byte 102,15,56,222,209 pxor 32(%esp),%xmm4 -.byte 102,15,56,222,217 +.byte 102,15,56,222,209 pxor 48(%esp),%xmm5 - decl %ecx -.byte 102,15,56,222,225 pxor 64(%esp),%xmm6 -.byte 102,15,56,222,233 +.byte 102,15,56,222,217 pxor %xmm0,%xmm7 + movups 32(%ebp),%xmm0 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 .byte 102,15,56,222,241 - movups (%edx),%xmm0 .byte 102,15,56,222,249 call .L_aesni_decrypt6_enter movdqa 80(%esp),%xmm1 @@ -1478,26 +1583,25 @@ aesni_xts_decrypt: paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 - movl %ebx,%ecx pxor %xmm2,%xmm1 subl $96,%eax - jnc .L057xts_dec_loop6 - leal 1(,%ecx,2),%ecx + jnc .L061xts_dec_loop6 + movl 240(%ebp),%ecx movl %ebp,%edx movl %ecx,%ebx -.L056xts_dec_short: +.L060xts_dec_short: addl $96,%eax - jz .L058xts_dec_done6x + jz .L062xts_dec_done6x movdqa %xmm1,%xmm5 cmpl $32,%eax - jb .L059xts_dec_one + jb .L063xts_dec_one pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 - je .L060xts_dec_two + je .L064xts_dec_two pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm6 @@ -1506,7 +1610,7 @@ aesni_xts_decrypt: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 cmpl $64,%eax - jb .L061xts_dec_three + jb .L065xts_dec_three pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm7 @@ -1516,7 +1620,7 @@ aesni_xts_decrypt: pxor %xmm2,%xmm1 movdqa %xmm5,(%esp) movdqa %xmm6,16(%esp) - je .L062xts_dec_four + je .L066xts_dec_four movdqa %xmm7,32(%esp) pshufd $19,%xmm0,%xmm7 movdqa %xmm1,48(%esp) @@ -1548,9 +1652,9 @@ aesni_xts_decrypt: movups %xmm5,48(%edi) movups %xmm6,64(%edi) leal 80(%edi),%edi - jmp .L063xts_dec_done + jmp .L067xts_dec_done .align 16 -.L059xts_dec_one: +.L063xts_dec_one: movups (%esi),%xmm2 leal 16(%esi),%esi xorps %xmm5,%xmm2 @@ -1558,36 +1662,36 @@ aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L064dec1_loop_12: +.L068dec1_loop_12: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L064dec1_loop_12 + jnz .L068dec1_loop_12 .byte 102,15,56,223,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) leal 16(%edi),%edi movdqa %xmm5,%xmm1 - jmp .L063xts_dec_done + jmp .L067xts_dec_done .align 16 -.L060xts_dec_two: +.L064xts_dec_two: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 leal 32(%esi),%esi xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 - call _aesni_decrypt3 + call _aesni_decrypt2 xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movups %xmm3,16(%edi) leal 32(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L063xts_dec_done + jmp .L067xts_dec_done .align 16 -.L061xts_dec_three: +.L065xts_dec_three: movaps %xmm1,%xmm7 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1605,9 +1709,9 @@ aesni_xts_decrypt: movups %xmm4,32(%edi) leal 48(%edi),%edi movdqa %xmm7,%xmm1 - jmp .L063xts_dec_done + jmp .L067xts_dec_done .align 16 -.L062xts_dec_four: +.L066xts_dec_four: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1629,20 +1733,20 @@ aesni_xts_decrypt: movups %xmm5,48(%edi) leal 64(%edi),%edi movdqa %xmm6,%xmm1 - jmp .L063xts_dec_done + jmp .L067xts_dec_done .align 16 -.L058xts_dec_done6x: +.L062xts_dec_done6x: movl 112(%esp),%eax andl $15,%eax - jz .L065xts_dec_ret + jz .L069xts_dec_ret movl %eax,112(%esp) - jmp .L066xts_dec_only_one_more + jmp .L070xts_dec_only_one_more .align 16 -.L063xts_dec_done: +.L067xts_dec_done: movl 112(%esp),%eax pxor %xmm0,%xmm0 andl $15,%eax - jz .L065xts_dec_ret + jz .L069xts_dec_ret pcmpgtd %xmm1,%xmm0 movl %eax,112(%esp) pshufd $19,%xmm0,%xmm2 @@ -1652,7 +1756,7 @@ aesni_xts_decrypt: pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 -.L066xts_dec_only_one_more: +.L070xts_dec_only_one_more: pshufd $19,%xmm0,%xmm5 movdqa %xmm1,%xmm6 paddq %xmm1,%xmm1 @@ -1666,16 +1770,16 @@ aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L067dec1_loop_13: +.L071dec1_loop_13: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L067dec1_loop_13 + jnz .L071dec1_loop_13 .byte 102,15,56,223,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) -.L068xts_dec_steal: +.L072xts_dec_steal: movzbl 16(%esi),%ecx movzbl (%edi),%edx leal 1(%esi),%esi @@ -1683,7 +1787,7 @@ aesni_xts_decrypt: movb %dl,16(%edi) leal 1(%edi),%edi subl $1,%eax - jnz .L068xts_dec_steal + jnz .L072xts_dec_steal subl 112(%esp),%edi movl %ebp,%edx movl %ebx,%ecx @@ -1693,16 +1797,30 @@ aesni_xts_decrypt: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L069dec1_loop_14: +.L073dec1_loop_14: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L069dec1_loop_14 + jnz .L073dec1_loop_14 .byte 102,15,56,223,209 xorps %xmm6,%xmm2 movups %xmm2,(%edi) -.L065xts_dec_ret: +.L069xts_dec_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + movdqa %xmm0,(%esp) + pxor %xmm3,%xmm3 + movdqa %xmm0,16(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm0,32(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm0,48(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm0,64(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm0,80(%esp) movl 116(%esp),%esp popl %edi popl %esi @@ -1710,89 +1828,880 @@ aesni_xts_decrypt: popl %ebp ret .size aesni_xts_decrypt,.-.L_aesni_xts_decrypt_begin -.globl aesni_cbc_encrypt -.type aesni_cbc_encrypt,@function +.globl aesni_ocb_encrypt +.type aesni_ocb_encrypt,@function .align 16 -aesni_cbc_encrypt: -.L_aesni_cbc_encrypt_begin: +aesni_ocb_encrypt: +.L_aesni_ocb_encrypt_begin: pushl %ebp pushl %ebx pushl %esi pushl %edi + movl 40(%esp),%ecx + movl 48(%esp),%ebx movl 20(%esp),%esi - movl %esp,%ebx movl 24(%esp),%edi - subl $24,%ebx movl 28(%esp),%eax - andl $-16,%ebx movl 32(%esp),%edx + movdqu (%ecx),%xmm0 movl 36(%esp),%ebp - testl %eax,%eax - jz .L070cbc_abort - cmpl $0,40(%esp) - xchgl %esp,%ebx - movups (%ebp),%xmm7 + movdqu (%ebx),%xmm1 + movl 44(%esp),%ebx + movl %esp,%ecx + subl $132,%esp + andl $-16,%esp + subl %esi,%edi + shll $4,%eax + leal -96(%esi,%eax,1),%eax + movl %edi,120(%esp) + movl %eax,124(%esp) + movl %ecx,128(%esp) movl 240(%edx),%ecx - movl %edx,%ebp - movl %ebx,16(%esp) - movl %ecx,%ebx - je .L071cbc_decrypt - movaps %xmm7,%xmm2 - cmpl $16,%eax - jb .L072cbc_enc_tail - subl $16,%eax - jmp .L073cbc_enc_loop -.align 16 -.L073cbc_enc_loop: - movups (%esi),%xmm7 + testl $1,%ebp + jnz .L074odd + bsfl %ebp,%eax + addl $1,%ebp + shll $4,%eax + movdqu (%ebx,%eax,1),%xmm7 + movl %edx,%eax + movdqu (%esi),%xmm2 leal 16(%esi),%esi + pxor %xmm0,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 movups (%edx),%xmm0 movups 16(%edx),%xmm1 - xorps %xmm0,%xmm7 leal 32(%edx),%edx - xorps %xmm7,%xmm2 -.L074enc1_loop_15: + xorps %xmm0,%xmm2 +.L075enc1_loop_15: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L074enc1_loop_15 + jnz .L075enc1_loop_15 .byte 102,15,56,221,209 - movl %ebx,%ecx - movl %ebp,%edx - movups %xmm2,(%edi) - leal 16(%edi),%edi - subl $16,%eax - jnc .L073cbc_enc_loop - addl $16,%eax - jnz .L072cbc_enc_tail - movaps %xmm2,%xmm7 - jmp .L075cbc_ret -.L072cbc_enc_tail: - movl %eax,%ecx -.long 2767451785 - movl $16,%ecx - subl %eax,%ecx - xorl %eax,%eax -.long 2868115081 - leal -16(%edi),%edi - movl %ebx,%ecx - movl %edi,%esi - movl %ebp,%edx - jmp .L073cbc_enc_loop -.align 16 -.L071cbc_decrypt: - cmpl $80,%eax - jbe .L076cbc_dec_tail - movaps %xmm7,(%esp) - subl $80,%eax - jmp .L077cbc_dec_loop6_enter -.align 16 -.L078cbc_dec_loop6: - movaps %xmm0,(%esp) - movups %xmm7,(%edi) + xorps %xmm7,%xmm2 + movdqa %xmm7,%xmm0 + movdqa %xmm6,%xmm1 + movups %xmm2,-16(%edi,%esi,1) + movl 240(%eax),%ecx + movl %eax,%edx + movl 124(%esp),%eax +.L074odd: + shll $4,%ecx + movl $16,%edi + subl %ecx,%edi + movl %edx,112(%esp) + leal 32(%edx,%ecx,1),%edx + movl %edi,116(%esp) + cmpl %eax,%esi + ja .L076short + jmp .L077grandloop +.align 32 +.L077grandloop: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + leal 5(%ebp),%edi + addl $6,%ebp + bsfl %ecx,%ecx + bsfl %eax,%eax + bsfl %edi,%edi + shll $4,%ecx + shll $4,%eax + shll $4,%edi + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + movdqu (%ebx,%edi,1),%xmm7 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movdqa %xmm7,80(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + movdqu 80(%esi),%xmm7 + leal 96(%esi),%esi + pxor %xmm2,%xmm1 + pxor %xmm0,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm0,%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm0,%xmm4 + pxor %xmm5,%xmm1 + pxor %xmm0,%xmm5 + pxor %xmm6,%xmm1 + pxor %xmm0,%xmm6 + pxor %xmm7,%xmm1 + pxor %xmm0,%xmm7 + movdqa %xmm1,96(%esp) + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor 80(%esp),%xmm7 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movl 120(%esp),%edi + movl 124(%esp),%eax + call .L_aesni_encrypt6_enter + movdqa 80(%esp),%xmm0 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor %xmm0,%xmm7 + movdqa 96(%esp),%xmm1 + movdqu %xmm2,-96(%edi,%esi,1) + movdqu %xmm3,-80(%edi,%esi,1) + movdqu %xmm4,-64(%edi,%esi,1) + movdqu %xmm5,-48(%edi,%esi,1) + movdqu %xmm6,-32(%edi,%esi,1) + movdqu %xmm7,-16(%edi,%esi,1) + cmpl %eax,%esi + jb .L077grandloop +.L076short: + addl $96,%eax + subl %esi,%eax + jz .L078done + cmpl $32,%eax + jb .L079one + je .L080two + cmpl $64,%eax + jb .L081three + je .L082four + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + pxor %xmm7,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm0,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm0,%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm0,%xmm4 + pxor %xmm5,%xmm1 + pxor %xmm0,%xmm5 + pxor %xmm6,%xmm1 + pxor %xmm0,%xmm6 + movdqa %xmm1,96(%esp) + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movl 120(%esp),%edi + call .L_aesni_encrypt6_enter + movdqa 64(%esp),%xmm0 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor %xmm0,%xmm6 + movdqa 96(%esp),%xmm1 + movdqu %xmm2,(%edi,%esi,1) + movdqu %xmm3,16(%edi,%esi,1) + movdqu %xmm4,32(%edi,%esi,1) + movdqu %xmm5,48(%edi,%esi,1) + movdqu %xmm6,64(%edi,%esi,1) + jmp .L078done +.align 16 +.L079one: + movdqu (%ebx),%xmm7 + movl 112(%esp),%edx + movdqu (%esi),%xmm2 + movl 240(%edx),%ecx + pxor %xmm0,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 + movl 120(%esp),%edi + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +.L083enc1_loop_16: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz .L083enc1_loop_16 +.byte 102,15,56,221,209 + xorps %xmm7,%xmm2 + movdqa %xmm7,%xmm0 + movdqa %xmm6,%xmm1 + movups %xmm2,(%edi,%esi,1) + jmp .L078done +.align 16 +.L080two: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm6 + movdqu (%ebx,%ecx,1),%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movl 240(%edx),%ecx + pxor %xmm0,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm6,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm7,%xmm3 + movdqa %xmm1,%xmm5 + movl 120(%esp),%edi + call _aesni_encrypt2 + xorps %xmm6,%xmm2 + xorps %xmm7,%xmm3 + movdqa %xmm7,%xmm0 + movdqa %xmm5,%xmm1 + movups %xmm2,(%edi,%esi,1) + movups %xmm3,16(%edi,%esi,1) + jmp .L078done +.align 16 +.L081three: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm5 + movdqu (%ebx,%ecx,1),%xmm6 + movdqa %xmm5,%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movl 240(%edx),%ecx + pxor %xmm0,%xmm5 + pxor %xmm5,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm5,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm6,%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm7,%xmm4 + movdqa %xmm1,96(%esp) + movl 120(%esp),%edi + call _aesni_encrypt3 + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm7,%xmm4 + movdqa %xmm7,%xmm0 + movdqa 96(%esp),%xmm1 + movups %xmm2,(%edi,%esi,1) + movups %xmm3,16(%edi,%esi,1) + movups %xmm4,32(%edi,%esi,1) + jmp .L078done +.align 16 +.L082four: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + movl 112(%esp),%edx + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm4 + movdqu (%ebx,%ecx,1),%xmm5 + movdqa %xmm4,%xmm6 + movdqu (%ebx,%eax,1),%xmm7 + pxor %xmm0,%xmm4 + movdqu (%esi),%xmm2 + pxor %xmm4,%xmm5 + movdqu 16(%esi),%xmm3 + pxor %xmm5,%xmm6 + movdqa %xmm4,(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm5,16(%esp) + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movl 240(%edx),%ecx + pxor %xmm2,%xmm1 + pxor (%esp),%xmm2 + pxor %xmm3,%xmm1 + pxor 16(%esp),%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm6,%xmm4 + pxor %xmm5,%xmm1 + pxor %xmm7,%xmm5 + movdqa %xmm1,96(%esp) + movl 120(%esp),%edi + call _aesni_encrypt4 + xorps (%esp),%xmm2 + xorps 16(%esp),%xmm3 + xorps %xmm6,%xmm4 + movups %xmm2,(%edi,%esi,1) + xorps %xmm7,%xmm5 + movups %xmm3,16(%edi,%esi,1) + movdqa %xmm7,%xmm0 + movups %xmm4,32(%edi,%esi,1) + movdqa 96(%esp),%xmm1 + movups %xmm5,48(%edi,%esi,1) +.L078done: + movl 128(%esp),%edx + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm2,16(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm2,32(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm2,48(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm2,64(%esp) + movdqa %xmm2,80(%esp) + movdqa %xmm2,96(%esp) + leal (%edx),%esp + movl 40(%esp),%ecx + movl 48(%esp),%ebx + movdqu %xmm0,(%ecx) + pxor %xmm0,%xmm0 + movdqu %xmm1,(%ebx) + pxor %xmm1,%xmm1 + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.size aesni_ocb_encrypt,.-.L_aesni_ocb_encrypt_begin +.globl aesni_ocb_decrypt +.type aesni_ocb_decrypt,@function +.align 16 +aesni_ocb_decrypt: +.L_aesni_ocb_decrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 40(%esp),%ecx + movl 48(%esp),%ebx + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl 32(%esp),%edx + movdqu (%ecx),%xmm0 + movl 36(%esp),%ebp + movdqu (%ebx),%xmm1 + movl 44(%esp),%ebx + movl %esp,%ecx + subl $132,%esp + andl $-16,%esp + subl %esi,%edi + shll $4,%eax + leal -96(%esi,%eax,1),%eax + movl %edi,120(%esp) + movl %eax,124(%esp) + movl %ecx,128(%esp) + movl 240(%edx),%ecx + testl $1,%ebp + jnz .L084odd + bsfl %ebp,%eax + addl $1,%ebp + shll $4,%eax + movdqu (%ebx,%eax,1),%xmm7 + movl %edx,%eax + movdqu (%esi),%xmm2 + leal 16(%esi),%esi + pxor %xmm0,%xmm7 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +.L085dec1_loop_17: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz .L085dec1_loop_17 +.byte 102,15,56,223,209 + xorps %xmm7,%xmm2 + movaps %xmm6,%xmm1 + movdqa %xmm7,%xmm0 + xorps %xmm2,%xmm1 + movups %xmm2,-16(%edi,%esi,1) + movl 240(%eax),%ecx + movl %eax,%edx + movl 124(%esp),%eax +.L084odd: + shll $4,%ecx + movl $16,%edi + subl %ecx,%edi + movl %edx,112(%esp) + leal 32(%edx,%ecx,1),%edx + movl %edi,116(%esp) + cmpl %eax,%esi + ja .L086short + jmp .L087grandloop +.align 32 +.L087grandloop: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + leal 5(%ebp),%edi + addl $6,%ebp + bsfl %ecx,%ecx + bsfl %eax,%eax + bsfl %edi,%edi + shll $4,%ecx + shll $4,%eax + shll $4,%edi + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + movdqu (%ebx,%edi,1),%xmm7 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movdqa %xmm7,80(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + movdqu 80(%esi),%xmm7 + leal 96(%esi),%esi + movdqa %xmm1,96(%esp) + pxor %xmm0,%xmm2 + pxor %xmm0,%xmm3 + pxor %xmm0,%xmm4 + pxor %xmm0,%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm0,%xmm7 + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor 80(%esp),%xmm7 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movl 120(%esp),%edi + movl 124(%esp),%eax + call .L_aesni_decrypt6_enter + movdqa 80(%esp),%xmm0 + pxor (%esp),%xmm2 + movdqa 96(%esp),%xmm1 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor %xmm0,%xmm7 + pxor %xmm2,%xmm1 + movdqu %xmm2,-96(%edi,%esi,1) + pxor %xmm3,%xmm1 + movdqu %xmm3,-80(%edi,%esi,1) + pxor %xmm4,%xmm1 + movdqu %xmm4,-64(%edi,%esi,1) + pxor %xmm5,%xmm1 + movdqu %xmm5,-48(%edi,%esi,1) + pxor %xmm6,%xmm1 + movdqu %xmm6,-32(%edi,%esi,1) + pxor %xmm7,%xmm1 + movdqu %xmm7,-16(%edi,%esi,1) + cmpl %eax,%esi + jb .L087grandloop +.L086short: + addl $96,%eax + subl %esi,%eax + jz .L088done + cmpl $32,%eax + jb .L089one + je .L090two + cmpl $64,%eax + jb .L091three + je .L092four + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + pxor %xmm7,%xmm7 + movdqa %xmm1,96(%esp) + pxor %xmm0,%xmm2 + pxor %xmm0,%xmm3 + pxor %xmm0,%xmm4 + pxor %xmm0,%xmm5 + pxor %xmm0,%xmm6 + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movl 120(%esp),%edi + call .L_aesni_decrypt6_enter + movdqa 64(%esp),%xmm0 + pxor (%esp),%xmm2 + movdqa 96(%esp),%xmm1 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm2,%xmm1 + movdqu %xmm2,(%edi,%esi,1) + pxor %xmm3,%xmm1 + movdqu %xmm3,16(%edi,%esi,1) + pxor %xmm4,%xmm1 + movdqu %xmm4,32(%edi,%esi,1) + pxor %xmm5,%xmm1 + movdqu %xmm5,48(%edi,%esi,1) + pxor %xmm6,%xmm1 + movdqu %xmm6,64(%edi,%esi,1) + jmp .L088done +.align 16 +.L089one: + movdqu (%ebx),%xmm7 + movl 112(%esp),%edx + movdqu (%esi),%xmm2 + movl 240(%edx),%ecx + pxor %xmm0,%xmm7 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 + movl 120(%esp),%edi + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +.L093dec1_loop_18: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz .L093dec1_loop_18 +.byte 102,15,56,223,209 + xorps %xmm7,%xmm2 + movaps %xmm6,%xmm1 + movdqa %xmm7,%xmm0 + xorps %xmm2,%xmm1 + movups %xmm2,(%edi,%esi,1) + jmp .L088done +.align 16 +.L090two: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm6 + movdqu (%ebx,%ecx,1),%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movl 240(%edx),%ecx + movdqa %xmm1,%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm6,%xmm2 + pxor %xmm7,%xmm3 + movl 120(%esp),%edi + call _aesni_decrypt2 + xorps %xmm6,%xmm2 + xorps %xmm7,%xmm3 + movdqa %xmm7,%xmm0 + xorps %xmm2,%xmm5 + movups %xmm2,(%edi,%esi,1) + xorps %xmm3,%xmm5 + movups %xmm3,16(%edi,%esi,1) + movaps %xmm5,%xmm1 + jmp .L088done +.align 16 +.L091three: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm5 + movdqu (%ebx,%ecx,1),%xmm6 + movdqa %xmm5,%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movl 240(%edx),%ecx + movdqa %xmm1,96(%esp) + pxor %xmm0,%xmm5 + pxor %xmm5,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm5,%xmm2 + pxor %xmm6,%xmm3 + pxor %xmm7,%xmm4 + movl 120(%esp),%edi + call _aesni_decrypt3 + movdqa 96(%esp),%xmm1 + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm7,%xmm4 + movups %xmm2,(%edi,%esi,1) + pxor %xmm2,%xmm1 + movdqa %xmm7,%xmm0 + movups %xmm3,16(%edi,%esi,1) + pxor %xmm3,%xmm1 + movups %xmm4,32(%edi,%esi,1) + pxor %xmm4,%xmm1 + jmp .L088done +.align 16 +.L092four: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + movl 112(%esp),%edx + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm4 + movdqu (%ebx,%ecx,1),%xmm5 + movdqa %xmm4,%xmm6 + movdqu (%ebx,%eax,1),%xmm7 + pxor %xmm0,%xmm4 + movdqu (%esi),%xmm2 + pxor %xmm4,%xmm5 + movdqu 16(%esi),%xmm3 + pxor %xmm5,%xmm6 + movdqa %xmm4,(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm5,16(%esp) + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movl 240(%edx),%ecx + movdqa %xmm1,96(%esp) + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor %xmm6,%xmm4 + pxor %xmm7,%xmm5 + movl 120(%esp),%edi + call _aesni_decrypt4 + movdqa 96(%esp),%xmm1 + xorps (%esp),%xmm2 + xorps 16(%esp),%xmm3 + xorps %xmm6,%xmm4 + movups %xmm2,(%edi,%esi,1) + pxor %xmm2,%xmm1 + xorps %xmm7,%xmm5 + movups %xmm3,16(%edi,%esi,1) + pxor %xmm3,%xmm1 + movdqa %xmm7,%xmm0 + movups %xmm4,32(%edi,%esi,1) + pxor %xmm4,%xmm1 + movups %xmm5,48(%edi,%esi,1) + pxor %xmm5,%xmm1 +.L088done: + movl 128(%esp),%edx + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm2,16(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm2,32(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm2,48(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm2,64(%esp) + movdqa %xmm2,80(%esp) + movdqa %xmm2,96(%esp) + leal (%edx),%esp + movl 40(%esp),%ecx + movl 48(%esp),%ebx + movdqu %xmm0,(%ecx) + pxor %xmm0,%xmm0 + movdqu %xmm1,(%ebx) + pxor %xmm1,%xmm1 + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.size aesni_ocb_decrypt,.-.L_aesni_ocb_decrypt_begin +.globl aesni_cbc_encrypt +.type aesni_cbc_encrypt,@function +.align 16 +aesni_cbc_encrypt: +.L_aesni_cbc_encrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl %esp,%ebx + movl 24(%esp),%edi + subl $24,%ebx + movl 28(%esp),%eax + andl $-16,%ebx + movl 32(%esp),%edx + movl 36(%esp),%ebp + testl %eax,%eax + jz .L094cbc_abort + cmpl $0,40(%esp) + xchgl %esp,%ebx + movups (%ebp),%xmm7 + movl 240(%edx),%ecx + movl %edx,%ebp + movl %ebx,16(%esp) + movl %ecx,%ebx + je .L095cbc_decrypt + movaps %xmm7,%xmm2 + cmpl $16,%eax + jb .L096cbc_enc_tail + subl $16,%eax + jmp .L097cbc_enc_loop +.align 16 +.L097cbc_enc_loop: + movups (%esi),%xmm7 + leal 16(%esi),%esi + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + xorps %xmm0,%xmm7 + leal 32(%edx),%edx + xorps %xmm7,%xmm2 +.L098enc1_loop_19: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz .L098enc1_loop_19 +.byte 102,15,56,221,209 + movl %ebx,%ecx + movl %ebp,%edx + movups %xmm2,(%edi) leal 16(%edi),%edi -.L077cbc_dec_loop6_enter: + subl $16,%eax + jnc .L097cbc_enc_loop + addl $16,%eax + jnz .L096cbc_enc_tail + movaps %xmm2,%xmm7 + pxor %xmm2,%xmm2 + jmp .L099cbc_ret +.L096cbc_enc_tail: + movl %eax,%ecx +.long 2767451785 + movl $16,%ecx + subl %eax,%ecx + xorl %eax,%eax +.long 2868115081 + leal -16(%edi),%edi + movl %ebx,%ecx + movl %edi,%esi + movl %ebp,%edx + jmp .L097cbc_enc_loop +.align 16 +.L095cbc_decrypt: + cmpl $80,%eax + jbe .L100cbc_dec_tail + movaps %xmm7,(%esp) + subl $80,%eax + jmp .L101cbc_dec_loop6_enter +.align 16 +.L102cbc_dec_loop6: + movaps %xmm0,(%esp) + movups %xmm7,(%edi) + leal 16(%edi),%edi +.L101cbc_dec_loop6_enter: movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -1822,28 +2731,28 @@ aesni_cbc_encrypt: movups %xmm6,64(%edi) leal 80(%edi),%edi subl $96,%eax - ja .L078cbc_dec_loop6 + ja .L102cbc_dec_loop6 movaps %xmm7,%xmm2 movaps %xmm0,%xmm7 addl $80,%eax - jle .L079cbc_dec_tail_collected + jle .L103cbc_dec_clear_tail_collected movups %xmm2,(%edi) leal 16(%edi),%edi -.L076cbc_dec_tail: +.L100cbc_dec_tail: movups (%esi),%xmm2 movaps %xmm2,%xmm6 cmpl $16,%eax - jbe .L080cbc_dec_one + jbe .L104cbc_dec_one movups 16(%esi),%xmm3 movaps %xmm3,%xmm5 cmpl $32,%eax - jbe .L081cbc_dec_two + jbe .L105cbc_dec_two movups 32(%esi),%xmm4 cmpl $48,%eax - jbe .L082cbc_dec_three + jbe .L106cbc_dec_three movups 48(%esi),%xmm5 cmpl $64,%eax - jbe .L083cbc_dec_four + jbe .L107cbc_dec_four movups 64(%esi),%xmm6 movaps %xmm7,(%esp) movups (%esi),%xmm2 @@ -1861,56 +2770,62 @@ aesni_cbc_encrypt: xorps %xmm0,%xmm6 movups %xmm2,(%edi) movups %xmm3,16(%edi) + pxor %xmm3,%xmm3 movups %xmm4,32(%edi) + pxor %xmm4,%xmm4 movups %xmm5,48(%edi) + pxor %xmm5,%xmm5 leal 64(%edi),%edi movaps %xmm6,%xmm2 + pxor %xmm6,%xmm6 subl $80,%eax - jmp .L079cbc_dec_tail_collected + jmp .L108cbc_dec_tail_collected .align 16 -.L080cbc_dec_one: +.L104cbc_dec_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -.L084dec1_loop_16: +.L109dec1_loop_20: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz .L084dec1_loop_16 + jnz .L109dec1_loop_20 .byte 102,15,56,223,209 xorps %xmm7,%xmm2 movaps %xmm6,%xmm7 subl $16,%eax - jmp .L079cbc_dec_tail_collected + jmp .L108cbc_dec_tail_collected .align 16 -.L081cbc_dec_two: - xorps %xmm4,%xmm4 - call _aesni_decrypt3 +.L105cbc_dec_two: + call _aesni_decrypt2 xorps %xmm7,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movaps %xmm3,%xmm2 + pxor %xmm3,%xmm3 leal 16(%edi),%edi movaps %xmm5,%xmm7 subl $32,%eax - jmp .L079cbc_dec_tail_collected + jmp .L108cbc_dec_tail_collected .align 16 -.L082cbc_dec_three: +.L106cbc_dec_three: call _aesni_decrypt3 xorps %xmm7,%xmm2 xorps %xmm6,%xmm3 xorps %xmm5,%xmm4 movups %xmm2,(%edi) movaps %xmm4,%xmm2 + pxor %xmm4,%xmm4 movups %xmm3,16(%edi) + pxor %xmm3,%xmm3 leal 32(%edi),%edi movups 32(%esi),%xmm7 subl $48,%eax - jmp .L079cbc_dec_tail_collected + jmp .L108cbc_dec_tail_collected .align 16 -.L083cbc_dec_four: +.L107cbc_dec_four: call _aesni_decrypt4 movups 16(%esi),%xmm1 movups 32(%esi),%xmm0 @@ -1920,28 +2835,44 @@ aesni_cbc_encrypt: movups %xmm2,(%edi) xorps %xmm1,%xmm4 movups %xmm3,16(%edi) + pxor %xmm3,%xmm3 xorps %xmm0,%xmm5 movups %xmm4,32(%edi) + pxor %xmm4,%xmm4 leal 48(%edi),%edi movaps %xmm5,%xmm2 + pxor %xmm5,%xmm5 subl $64,%eax -.L079cbc_dec_tail_collected: + jmp .L108cbc_dec_tail_collected +.align 16 +.L103cbc_dec_clear_tail_collected: + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 +.L108cbc_dec_tail_collected: andl $15,%eax - jnz .L085cbc_dec_tail_partial + jnz .L110cbc_dec_tail_partial movups %xmm2,(%edi) - jmp .L075cbc_ret + pxor %xmm0,%xmm0 + jmp .L099cbc_ret .align 16 -.L085cbc_dec_tail_partial: +.L110cbc_dec_tail_partial: movaps %xmm2,(%esp) + pxor %xmm0,%xmm0 movl $16,%ecx movl %esp,%esi subl %eax,%ecx .long 2767451785 -.L075cbc_ret: + movdqa %xmm2,(%esp) +.L099cbc_ret: movl 16(%esp),%esp movl 36(%esp),%ebp + pxor %xmm2,%xmm2 + pxor %xmm1,%xmm1 movups %xmm7,(%ebp) -.L070cbc_abort: + pxor %xmm7,%xmm7 +.L094cbc_abort: popl %edi popl %esi popl %ebx @@ -1951,52 +2882,62 @@ aesni_cbc_encrypt: .type _aesni_set_encrypt_key,@function .align 16 _aesni_set_encrypt_key: + pushl %ebp + pushl %ebx testl %eax,%eax - jz .L086bad_pointer + jz .L111bad_pointer testl %edx,%edx - jz .L086bad_pointer + jz .L111bad_pointer + call .L112pic +.L112pic: + popl %ebx + leal .Lkey_const-.L112pic(%ebx),%ebx + leal _gnutls_x86_cpuid_s-.Lkey_const(%ebx),%ebp movups (%eax),%xmm0 xorps %xmm4,%xmm4 + movl 4(%ebp),%ebp leal 16(%edx),%edx + andl $268437504,%ebp cmpl $256,%ecx - je .L08714rounds + je .L11314rounds cmpl $192,%ecx - je .L08812rounds + je .L11412rounds cmpl $128,%ecx - jne .L089bad_keybits + jne .L115bad_keybits .align 16 -.L09010rounds: +.L11610rounds: + cmpl $268435456,%ebp + je .L11710rounds_alt movl $9,%ecx movups %xmm0,-16(%edx) .byte 102,15,58,223,200,1 - call .L091key_128_cold + call .L118key_128_cold .byte 102,15,58,223,200,2 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,4 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,8 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,16 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,32 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,64 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,128 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,27 - call .L092key_128 + call .L119key_128 .byte 102,15,58,223,200,54 - call .L092key_128 + call .L119key_128 movups %xmm0,(%edx) movl %ecx,80(%edx) - xorl %eax,%eax - ret + jmp .L120good_key .align 16 -.L092key_128: +.L119key_128: movups %xmm0,(%edx) leal 16(%edx),%edx -.L091key_128_cold: +.L118key_128_cold: shufps $16,%xmm0,%xmm4 xorps %xmm4,%xmm0 shufps $140,%xmm0,%xmm4 @@ -2005,38 +2946,91 @@ _aesni_set_encrypt_key: xorps %xmm1,%xmm0 ret .align 16 -.L08812rounds: +.L11710rounds_alt: + movdqa (%ebx),%xmm5 + movl $8,%ecx + movdqa 32(%ebx),%xmm4 + movdqa %xmm0,%xmm2 + movdqu %xmm0,-16(%edx) +.L121loop_key128: +.byte 102,15,56,0,197 +.byte 102,15,56,221,196 + pslld $1,%xmm4 + leal 16(%edx),%edx + movdqa %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm3,%xmm2 + pxor %xmm2,%xmm0 + movdqu %xmm0,-16(%edx) + movdqa %xmm0,%xmm2 + decl %ecx + jnz .L121loop_key128 + movdqa 48(%ebx),%xmm4 +.byte 102,15,56,0,197 +.byte 102,15,56,221,196 + pslld $1,%xmm4 + movdqa %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm3,%xmm2 + pxor %xmm2,%xmm0 + movdqu %xmm0,(%edx) + movdqa %xmm0,%xmm2 +.byte 102,15,56,0,197 +.byte 102,15,56,221,196 + movdqa %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm3,%xmm2 + pxor %xmm2,%xmm0 + movdqu %xmm0,16(%edx) + movl $9,%ecx + movl %ecx,96(%edx) + jmp .L120good_key +.align 16 +.L11412rounds: movq 16(%eax),%xmm2 + cmpl $268435456,%ebp + je .L12212rounds_alt movl $11,%ecx movups %xmm0,-16(%edx) .byte 102,15,58,223,202,1 - call .L093key_192a_cold + call .L123key_192a_cold .byte 102,15,58,223,202,2 - call .L094key_192b + call .L124key_192b .byte 102,15,58,223,202,4 - call .L095key_192a + call .L125key_192a .byte 102,15,58,223,202,8 - call .L094key_192b + call .L124key_192b .byte 102,15,58,223,202,16 - call .L095key_192a + call .L125key_192a .byte 102,15,58,223,202,32 - call .L094key_192b + call .L124key_192b .byte 102,15,58,223,202,64 - call .L095key_192a + call .L125key_192a .byte 102,15,58,223,202,128 - call .L094key_192b + call .L124key_192b movups %xmm0,(%edx) movl %ecx,48(%edx) - xorl %eax,%eax - ret + jmp .L120good_key .align 16 -.L095key_192a: +.L125key_192a: movups %xmm0,(%edx) leal 16(%edx),%edx .align 16 -.L093key_192a_cold: +.L123key_192a_cold: movaps %xmm2,%xmm5 -.L096key_192b_warm: +.L126key_192b_warm: shufps $16,%xmm0,%xmm4 movdqa %xmm2,%xmm3 xorps %xmm4,%xmm0 @@ -2050,56 +3044,90 @@ _aesni_set_encrypt_key: pxor %xmm3,%xmm2 ret .align 16 -.L094key_192b: +.L124key_192b: movaps %xmm0,%xmm3 shufps $68,%xmm0,%xmm5 movups %xmm5,(%edx) shufps $78,%xmm2,%xmm3 movups %xmm3,16(%edx) leal 32(%edx),%edx - jmp .L096key_192b_warm + jmp .L126key_192b_warm +.align 16 +.L12212rounds_alt: + movdqa 16(%ebx),%xmm5 + movdqa 32(%ebx),%xmm4 + movl $8,%ecx + movdqu %xmm0,-16(%edx) +.L127loop_key192: + movq %xmm2,(%edx) + movdqa %xmm2,%xmm1 +.byte 102,15,56,0,213 +.byte 102,15,56,221,212 + pslld $1,%xmm4 + leal 24(%edx),%edx + movdqa %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm3,%xmm0 + pshufd $255,%xmm0,%xmm3 + pxor %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm1,%xmm3 + pxor %xmm2,%xmm0 + pxor %xmm3,%xmm2 + movdqu %xmm0,-16(%edx) + decl %ecx + jnz .L127loop_key192 + movl $11,%ecx + movl %ecx,32(%edx) + jmp .L120good_key .align 16 -.L08714rounds: +.L11314rounds: movups 16(%eax),%xmm2 - movl $13,%ecx leal 16(%edx),%edx + cmpl $268435456,%ebp + je .L12814rounds_alt + movl $13,%ecx movups %xmm0,-32(%edx) movups %xmm2,-16(%edx) .byte 102,15,58,223,202,1 - call .L097key_256a_cold + call .L129key_256a_cold .byte 102,15,58,223,200,1 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,2 - call .L099key_256a + call .L131key_256a .byte 102,15,58,223,200,2 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,4 - call .L099key_256a + call .L131key_256a .byte 102,15,58,223,200,4 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,8 - call .L099key_256a + call .L131key_256a .byte 102,15,58,223,200,8 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,16 - call .L099key_256a + call .L131key_256a .byte 102,15,58,223,200,16 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,32 - call .L099key_256a + call .L131key_256a .byte 102,15,58,223,200,32 - call .L098key_256b + call .L130key_256b .byte 102,15,58,223,202,64 - call .L099key_256a + call .L131key_256a movups %xmm0,(%edx) movl %ecx,16(%edx) xorl %eax,%eax - ret + jmp .L120good_key .align 16 -.L099key_256a: +.L131key_256a: movups %xmm2,(%edx) leal 16(%edx),%edx -.L097key_256a_cold: +.L129key_256a_cold: shufps $16,%xmm0,%xmm4 xorps %xmm4,%xmm0 shufps $140,%xmm0,%xmm4 @@ -2108,7 +3136,7 @@ _aesni_set_encrypt_key: xorps %xmm1,%xmm0 ret .align 16 -.L098key_256b: +.L130key_256b: movups %xmm0,(%edx) leal 16(%edx),%edx shufps $16,%xmm2,%xmm4 @@ -2118,13 +3146,70 @@ _aesni_set_encrypt_key: shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 ret +.align 16 +.L12814rounds_alt: + movdqa (%ebx),%xmm5 + movdqa 32(%ebx),%xmm4 + movl $7,%ecx + movdqu %xmm0,-32(%edx) + movdqa %xmm2,%xmm1 + movdqu %xmm2,-16(%edx) +.L132loop_key256: +.byte 102,15,56,0,213 +.byte 102,15,56,221,212 + movdqa %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm3,%xmm0 + pslld $1,%xmm4 + pxor %xmm2,%xmm0 + movdqu %xmm0,(%edx) + decl %ecx + jz .L133done_key256 + pshufd $255,%xmm0,%xmm2 + pxor %xmm3,%xmm3 +.byte 102,15,56,221,211 + movdqa %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm3,%xmm1 + pxor %xmm1,%xmm2 + movdqu %xmm2,16(%edx) + leal 32(%edx),%edx + movdqa %xmm2,%xmm1 + jmp .L132loop_key256 +.L133done_key256: + movl $13,%ecx + movl %ecx,16(%edx) +.L120good_key: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + xorl %eax,%eax + popl %ebx + popl %ebp + ret .align 4 -.L086bad_pointer: +.L111bad_pointer: movl $-1,%eax + popl %ebx + popl %ebp ret .align 4 -.L089bad_keybits: +.L115bad_keybits: + pxor %xmm0,%xmm0 movl $-2,%eax + popl %ebx + popl %ebp ret .size _aesni_set_encrypt_key,.-_aesni_set_encrypt_key .globl aesni_set_encrypt_key @@ -2150,7 +3235,7 @@ aesni_set_decrypt_key: movl 12(%esp),%edx shll $4,%ecx testl %eax,%eax - jnz .L100dec_key_ret + jnz .L134dec_key_ret leal 16(%edx,%ecx,1),%eax movups (%edx),%xmm0 movups (%eax),%xmm1 @@ -2158,7 +3243,7 @@ aesni_set_decrypt_key: movups %xmm1,(%edx) leal 16(%edx),%edx leal -16(%eax),%eax -.L101dec_key_inverse: +.L135dec_key_inverse: movups (%edx),%xmm0 movups (%eax),%xmm1 .byte 102,15,56,219,192 @@ -2168,20 +3253,26 @@ aesni_set_decrypt_key: movups %xmm0,16(%eax) movups %xmm1,-16(%edx) cmpl %edx,%eax - ja .L101dec_key_inverse + ja .L135dec_key_inverse movups (%edx),%xmm0 .byte 102,15,56,219,192 movups %xmm0,(%edx) + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 xorl %eax,%eax -.L100dec_key_ret: +.L134dec_key_ret: ret .size aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin +.align 64 +.Lkey_const: +.long 202313229,202313229,202313229,202313229 +.long 67569157,67569157,67569157,67569157 +.long 1,1,1,1 +.long 27,27,27,27 .byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 .byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 .byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 .byte 115,108,46,111,114,103,62,0 - +.comm _gnutls_x86_cpuid_s,16,4 .section .note.GNU-stack,"",%progbits - - diff --git a/lib/accelerated/x86/elf/aesni-x86_64.s b/lib/accelerated/x86/elf/aesni-x86_64.s index 76d44fc2a8..43cf4e68de 100644 --- a/lib/accelerated/x86/elf/aesni-x86_64.s +++ b/lib/accelerated/x86/elf/aesni-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -43,6 +43,7 @@ .type aesni_encrypt,@function .align 16 aesni_encrypt: +.cfi_startproc movups (%rdi),%xmm2 movl 240(%rdx),%eax movups (%rdx),%xmm0 @@ -61,12 +62,14 @@ aesni_encrypt: movups %xmm2,(%rsi) pxor %xmm2,%xmm2 .byte 0xf3,0xc3 +.cfi_endproc .size aesni_encrypt,.-aesni_encrypt .globl aesni_decrypt .type aesni_decrypt,@function .align 16 aesni_decrypt: +.cfi_startproc movups (%rdi),%xmm2 movl 240(%rdx),%eax movups (%rdx),%xmm0 @@ -85,10 +88,12 @@ aesni_decrypt: movups %xmm2,(%rsi) pxor %xmm2,%xmm2 .byte 0xf3,0xc3 +.cfi_endproc .size aesni_decrypt, .-aesni_decrypt .type _aesni_encrypt2,@function .align 16 _aesni_encrypt2: +.cfi_startproc movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -114,10 +119,12 @@ _aesni_encrypt2: .byte 102,15,56,221,208 .byte 102,15,56,221,216 .byte 0xf3,0xc3 +.cfi_endproc .size _aesni_encrypt2,.-_aesni_encrypt2 .type _aesni_decrypt2,@function .align 16 _aesni_decrypt2: +.cfi_startproc movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -143,10 +150,12 @@ _aesni_decrypt2: .byte 102,15,56,223,208 .byte 102,15,56,223,216 .byte 0xf3,0xc3 +.cfi_endproc .size _aesni_decrypt2,.-_aesni_decrypt2 .type _aesni_encrypt3,@function .align 16 _aesni_encrypt3: +.cfi_startproc movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -177,10 +186,12 @@ _aesni_encrypt3: .byte 102,15,56,221,216 .byte 102,15,56,221,224 .byte 0xf3,0xc3 +.cfi_endproc .size _aesni_encrypt3,.-_aesni_encrypt3 .type _aesni_decrypt3,@function .align 16 _aesni_decrypt3: +.cfi_startproc movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -211,10 +222,12 @@ _aesni_decrypt3: .byte 102,15,56,223,216 .byte 102,15,56,223,224 .byte 0xf3,0xc3 +.cfi_endproc .size _aesni_decrypt3,.-_aesni_decrypt3 .type _aesni_encrypt4,@function .align 16 _aesni_encrypt4: +.cfi_startproc movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -251,10 +264,12 @@ _aesni_encrypt4: .byte 102,15,56,221,224 .byte 102,15,56,221,232 .byte 0xf3,0xc3 +.cfi_endproc .size _aesni_encrypt4,.-_aesni_encrypt4 .type _aesni_decrypt4,@function .align 16 _aesni_decrypt4: +.cfi_startproc movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -291,10 +306,12 @@ _aesni_decrypt4: .byte 102,15,56,223,224 .byte 102,15,56,223,232 .byte 0xf3,0xc3 +.cfi_endproc .size _aesni_decrypt4,.-_aesni_decrypt4 .type _aesni_encrypt6,@function .align 16 _aesni_encrypt6: +.cfi_startproc movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -345,10 +362,12 @@ _aesni_encrypt6: .byte 102,15,56,221,240 .byte 102,15,56,221,248 .byte 0xf3,0xc3 +.cfi_endproc .size _aesni_encrypt6,.-_aesni_encrypt6 .type _aesni_decrypt6,@function .align 16 _aesni_decrypt6: +.cfi_startproc movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -399,10 +418,12 @@ _aesni_decrypt6: .byte 102,15,56,223,240 .byte 102,15,56,223,248 .byte 0xf3,0xc3 +.cfi_endproc .size _aesni_decrypt6,.-_aesni_decrypt6 .type _aesni_encrypt8,@function .align 16 _aesni_encrypt8: +.cfi_startproc movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -463,10 +484,12 @@ _aesni_encrypt8: .byte 102,68,15,56,221,192 .byte 102,68,15,56,221,200 .byte 0xf3,0xc3 +.cfi_endproc .size _aesni_encrypt8,.-_aesni_encrypt8 .type _aesni_decrypt8,@function .align 16 _aesni_decrypt8: +.cfi_startproc movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -527,11 +550,13 @@ _aesni_decrypt8: .byte 102,68,15,56,223,192 .byte 102,68,15,56,223,200 .byte 0xf3,0xc3 +.cfi_endproc .size _aesni_decrypt8,.-_aesni_decrypt8 .globl aesni_ecb_encrypt .type aesni_ecb_encrypt,@function .align 16 aesni_ecb_encrypt: +.cfi_startproc andq $-16,%rdx jz .Lecb_ret @@ -869,6 +894,7 @@ aesni_ecb_encrypt: xorps %xmm0,%xmm0 pxor %xmm1,%xmm1 .byte 0xf3,0xc3 +.cfi_endproc .size aesni_ecb_encrypt,.-aesni_ecb_encrypt .globl aesni_ccm64_encrypt_blocks .type aesni_ccm64_encrypt_blocks,@function @@ -1034,6 +1060,7 @@ aesni_ccm64_decrypt_blocks: .type aesni_ctr32_encrypt_blocks,@function .align 16 aesni_ctr32_encrypt_blocks: +.cfi_startproc cmpq $1,%rdx jne .Lctr32_bulk @@ -1063,11 +1090,12 @@ aesni_ctr32_encrypt_blocks: .align 16 .Lctr32_bulk: - leaq (%rsp),%rax + leaq (%rsp),%r11 +.cfi_def_cfa_register %r11 pushq %rbp +.cfi_offset %rbp,-16 subq $128,%rsp andq $-16,%rsp - leaq -8(%rax),%rbp @@ -1076,7 +1104,7 @@ aesni_ctr32_encrypt_blocks: movdqu (%rcx),%xmm0 movl 12(%r8),%r8d pxor %xmm0,%xmm2 - movl 12(%rcx),%r11d + movl 12(%rcx),%ebp movdqa %xmm2,0(%rsp) bswapl %r8d movdqa %xmm2,%xmm3 @@ -1092,8 +1120,8 @@ aesni_ctr32_encrypt_blocks: leaq 2(%r8),%rdx bswapl %eax bswapl %edx - xorl %r11d,%eax - xorl %r11d,%edx + xorl %ebp,%eax + xorl %ebp,%edx .byte 102,15,58,34,216,3 leaq 3(%r8),%rax movdqa %xmm3,16(%rsp) @@ -1102,25 +1130,25 @@ aesni_ctr32_encrypt_blocks: movq %r10,%rdx leaq 4(%r8),%r10 movdqa %xmm4,32(%rsp) - xorl %r11d,%eax + xorl %ebp,%eax bswapl %r10d .byte 102,15,58,34,232,3 - xorl %r11d,%r10d + xorl %ebp,%r10d movdqa %xmm5,48(%rsp) leaq 5(%r8),%r9 movl %r10d,64+12(%rsp) bswapl %r9d leaq 6(%r8),%r10 movl 240(%rcx),%eax - xorl %r11d,%r9d + xorl %ebp,%r9d bswapl %r10d movl %r9d,80+12(%rsp) - xorl %r11d,%r10d + xorl %ebp,%r10d leaq 7(%r8),%r9 movl %r10d,96+12(%rsp) bswapl %r9d movl _gnutls_x86_cpuid_s+4(%rip),%r10d - xorl %r11d,%r9d + xorl %ebp,%r9d andl $71303168,%r10d movl %r9d,112+12(%rsp) @@ -1144,7 +1172,7 @@ aesni_ctr32_encrypt_blocks: .Lctr32_6x: shll $4,%eax movl $48,%r10d - bswapl %r11d + bswapl %ebp leaq 32(%rcx,%rax,1),%rcx subq %rax,%r10 jmp .Lctr32_loop6 @@ -1155,32 +1183,32 @@ aesni_ctr32_encrypt_blocks: movups -48(%rcx,%r10,1),%xmm0 .byte 102,15,56,220,209 movl %r8d,%eax - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,217 .byte 0x0f,0x38,0xf1,0x44,0x24,12 leal 1(%r8),%eax .byte 102,15,56,220,225 - xorl %r11d,%eax + xorl %ebp,%eax .byte 0x0f,0x38,0xf1,0x44,0x24,28 .byte 102,15,56,220,233 leal 2(%r8),%eax - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,241 .byte 0x0f,0x38,0xf1,0x44,0x24,44 leal 3(%r8),%eax .byte 102,15,56,220,249 movups -32(%rcx,%r10,1),%xmm1 - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,208 .byte 0x0f,0x38,0xf1,0x44,0x24,60 leal 4(%r8),%eax .byte 102,15,56,220,216 - xorl %r11d,%eax + xorl %ebp,%eax .byte 0x0f,0x38,0xf1,0x44,0x24,76 .byte 102,15,56,220,224 leal 5(%r8),%eax - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,232 .byte 0x0f,0x38,0xf1,0x44,0x24,92 movq %r10,%rax @@ -1241,7 +1269,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d movups 32-128(%rcx),%xmm0 .byte 102,15,56,220,225 - xorl %r11d,%r9d + xorl %ebp,%r9d nop .byte 102,15,56,220,233 movl %r9d,0+12(%rsp) @@ -1254,7 +1282,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,208 .byte 102,15,56,220,216 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,224 .byte 102,15,56,220,232 @@ -1268,7 +1296,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,209 .byte 102,15,56,220,217 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,225 .byte 102,15,56,220,233 @@ -1282,7 +1310,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,208 .byte 102,15,56,220,216 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,224 .byte 102,15,56,220,232 @@ -1296,7 +1324,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,209 .byte 102,15,56,220,217 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,225 .byte 102,15,56,220,233 @@ -1310,7 +1338,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,208 .byte 102,15,56,220,216 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,224 .byte 102,15,56,220,232 @@ -1324,7 +1352,7 @@ aesni_ctr32_encrypt_blocks: bswapl %r9d .byte 102,15,56,220,209 .byte 102,15,56,220,217 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,225 .byte 102,15,56,220,233 @@ -1339,7 +1367,7 @@ aesni_ctr32_encrypt_blocks: .byte 102,15,56,220,208 .byte 102,15,56,220,216 .byte 102,15,56,220,224 - xorl %r11d,%r9d + xorl %ebp,%r9d movdqu 0(%rdi),%xmm10 .byte 102,15,56,220,232 movl %r9d,112+12(%rsp) @@ -1574,7 +1602,7 @@ aesni_ctr32_encrypt_blocks: .Lctr32_done: xorps %xmm0,%xmm0 - xorl %r11d,%r11d + xorl %ebp,%ebp pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 pxor %xmm3,%xmm3 @@ -1598,20 +1626,25 @@ aesni_ctr32_encrypt_blocks: pxor %xmm14,%xmm14 movaps %xmm0,112(%rsp) pxor %xmm15,%xmm15 - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp +.cfi_restore %rbp + leaq (%r11),%rsp +.cfi_def_cfa_register %rsp .Lctr32_epilogue: .byte 0xf3,0xc3 +.cfi_endproc .size aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks .globl aesni_xts_encrypt .type aesni_xts_encrypt,@function .align 16 aesni_xts_encrypt: - leaq (%rsp),%rax +.cfi_startproc + leaq (%rsp),%r11 +.cfi_def_cfa_register %r11 pushq %rbp +.cfi_offset %rbp,-16 subq $112,%rsp andq $-16,%rsp - leaq -8(%rax),%rbp movups (%r9),%xmm2 movl 240(%r8),%eax movl 240(%rcx),%r10d @@ -1627,7 +1660,7 @@ aesni_xts_encrypt: jnz .Loop_enc1_8 .byte 102,15,56,221,209 movups (%rcx),%xmm0 - movq %rcx,%r11 + movq %rcx,%rbp movl %r10d,%eax shll $4,%r10d movq %rdx,%r9 @@ -1683,9 +1716,9 @@ aesni_xts_encrypt: jc .Lxts_enc_short movl $16+96,%eax - leaq 32(%r11,%r10,1),%rcx + leaq 32(%rbp,%r10,1),%rcx subq %r10,%rax - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 movq %rax,%r10 leaq .Lxts_magic(%rip),%r8 jmp .Lxts_enc_grandloop @@ -1710,7 +1743,7 @@ aesni_xts_encrypt: movdqa 96(%rsp),%xmm9 pxor %xmm14,%xmm6 .byte 102,15,56,220,233 - movups 32(%r11),%xmm0 + movups 32(%rbp),%xmm0 leaq 96(%rdi),%rdi pxor %xmm8,%xmm7 @@ -1719,7 +1752,7 @@ aesni_xts_encrypt: pxor %xmm9,%xmm11 movdqa %xmm10,0(%rsp) .byte 102,15,56,220,249 - movups 48(%r11),%xmm1 + movups 48(%rbp),%xmm1 pxor %xmm9,%xmm12 .byte 102,15,56,220,208 @@ -1734,7 +1767,7 @@ aesni_xts_encrypt: movdqa %xmm14,64(%rsp) .byte 102,15,56,220,240 .byte 102,15,56,220,248 - movups 64(%r11),%xmm0 + movups 64(%rbp),%xmm0 movdqa %xmm8,80(%rsp) pshufd $0x5f,%xmm15,%xmm9 jmp .Lxts_enc_loop6 @@ -1766,7 +1799,7 @@ aesni_xts_encrypt: psrad $31,%xmm14 .byte 102,15,56,220,217 pand %xmm8,%xmm14 - movups (%r11),%xmm10 + movups (%rbp),%xmm10 .byte 102,15,56,220,225 .byte 102,15,56,220,233 .byte 102,15,56,220,241 @@ -1834,10 +1867,10 @@ aesni_xts_encrypt: .byte 102,15,56,220,225 .byte 102,15,56,220,233 pxor %xmm0,%xmm15 - movups (%r11),%xmm0 + movups (%rbp),%xmm0 .byte 102,15,56,220,241 .byte 102,15,56,220,249 - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 pxor %xmm15,%xmm14 .byte 102,15,56,221,84,36,0 @@ -1864,7 +1897,7 @@ aesni_xts_encrypt: movl $16+96,%eax subl %r10d,%eax - movq %r11,%rcx + movq %rbp,%rcx shrl $4,%eax .Lxts_enc_short: @@ -2020,7 +2053,7 @@ aesni_xts_encrypt: jnz .Lxts_enc_steal subq %r9,%rsi - movq %r11,%rcx + movq %rbp,%rcx movl %r10d,%eax movups -16(%rsi),%xmm2 @@ -2063,20 +2096,25 @@ aesni_xts_encrypt: movaps %xmm0,96(%rsp) pxor %xmm14,%xmm14 pxor %xmm15,%xmm15 - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp +.cfi_restore %rbp + leaq (%r11),%rsp +.cfi_def_cfa_register %rsp .Lxts_enc_epilogue: .byte 0xf3,0xc3 +.cfi_endproc .size aesni_xts_encrypt,.-aesni_xts_encrypt .globl aesni_xts_decrypt .type aesni_xts_decrypt,@function .align 16 aesni_xts_decrypt: - leaq (%rsp),%rax +.cfi_startproc + leaq (%rsp),%r11 +.cfi_def_cfa_register %r11 pushq %rbp +.cfi_offset %rbp,-16 subq $112,%rsp andq $-16,%rsp - leaq -8(%rax),%rbp movups (%r9),%xmm2 movl 240(%r8),%eax movl 240(%rcx),%r10d @@ -2098,7 +2136,7 @@ aesni_xts_decrypt: subq %rax,%rdx movups (%rcx),%xmm0 - movq %rcx,%r11 + movq %rcx,%rbp movl %r10d,%eax shll $4,%r10d movq %rdx,%r9 @@ -2154,9 +2192,9 @@ aesni_xts_decrypt: jc .Lxts_dec_short movl $16+96,%eax - leaq 32(%r11,%r10,1),%rcx + leaq 32(%rbp,%r10,1),%rcx subq %r10,%rax - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 movq %rax,%r10 leaq .Lxts_magic(%rip),%r8 jmp .Lxts_dec_grandloop @@ -2181,7 +2219,7 @@ aesni_xts_decrypt: movdqa 96(%rsp),%xmm9 pxor %xmm14,%xmm6 .byte 102,15,56,222,233 - movups 32(%r11),%xmm0 + movups 32(%rbp),%xmm0 leaq 96(%rdi),%rdi pxor %xmm8,%xmm7 @@ -2190,7 +2228,7 @@ aesni_xts_decrypt: pxor %xmm9,%xmm11 movdqa %xmm10,0(%rsp) .byte 102,15,56,222,249 - movups 48(%r11),%xmm1 + movups 48(%rbp),%xmm1 pxor %xmm9,%xmm12 .byte 102,15,56,222,208 @@ -2205,7 +2243,7 @@ aesni_xts_decrypt: movdqa %xmm14,64(%rsp) .byte 102,15,56,222,240 .byte 102,15,56,222,248 - movups 64(%r11),%xmm0 + movups 64(%rbp),%xmm0 movdqa %xmm8,80(%rsp) pshufd $0x5f,%xmm15,%xmm9 jmp .Lxts_dec_loop6 @@ -2237,7 +2275,7 @@ aesni_xts_decrypt: psrad $31,%xmm14 .byte 102,15,56,222,217 pand %xmm8,%xmm14 - movups (%r11),%xmm10 + movups (%rbp),%xmm10 .byte 102,15,56,222,225 .byte 102,15,56,222,233 .byte 102,15,56,222,241 @@ -2305,10 +2343,10 @@ aesni_xts_decrypt: .byte 102,15,56,222,225 .byte 102,15,56,222,233 pxor %xmm0,%xmm15 - movups (%r11),%xmm0 + movups (%rbp),%xmm0 .byte 102,15,56,222,241 .byte 102,15,56,222,249 - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 pxor %xmm15,%xmm14 .byte 102,15,56,223,84,36,0 @@ -2335,7 +2373,7 @@ aesni_xts_decrypt: movl $16+96,%eax subl %r10d,%eax - movq %r11,%rcx + movq %rbp,%rcx shrl $4,%eax .Lxts_dec_short: @@ -2492,7 +2530,7 @@ aesni_xts_decrypt: jz .Lxts_dec_ret .Lxts_dec_done2: movq %r9,%rdx - movq %r11,%rcx + movq %rbp,%rcx movl %r10d,%eax movups (%rdi),%xmm2 @@ -2522,7 +2560,7 @@ aesni_xts_decrypt: jnz .Lxts_dec_steal subq %r9,%rsi - movq %r11,%rcx + movq %rbp,%rcx movl %r10d,%eax movups (%rsi),%xmm2 @@ -2565,221 +2603,1079 @@ aesni_xts_decrypt: movaps %xmm0,96(%rsp) pxor %xmm14,%xmm14 pxor %xmm15,%xmm15 - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp +.cfi_restore %rbp + leaq (%r11),%rsp +.cfi_def_cfa_register %rsp .Lxts_dec_epilogue: .byte 0xf3,0xc3 +.cfi_endproc .size aesni_xts_decrypt,.-aesni_xts_decrypt -.globl aesni_cbc_encrypt -.type aesni_cbc_encrypt,@function -.align 16 -aesni_cbc_encrypt: - testq %rdx,%rdx - jz .Lcbc_ret +.globl aesni_ocb_encrypt +.type aesni_ocb_encrypt,@function +.align 32 +aesni_ocb_encrypt: +.cfi_startproc + leaq (%rsp),%rax + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 + movq 8(%rax),%rbx + movq 8+8(%rax),%rbp movl 240(%rcx),%r10d movq %rcx,%r11 - testl %r9d,%r9d - jz .Lcbc_decrypt + shll $4,%r10d + movups (%rcx),%xmm9 + movups 16(%rcx,%r10,1),%xmm1 - movups (%r8),%xmm2 - movl %r10d,%eax - cmpq $16,%rdx - jb .Lcbc_enc_tail - subq $16,%rdx - jmp .Lcbc_enc_loop -.align 16 -.Lcbc_enc_loop: - movups (%rdi),%xmm3 - leaq 16(%rdi),%rdi + movdqu (%r9),%xmm15 + pxor %xmm1,%xmm9 + pxor %xmm1,%xmm15 - movups (%rcx),%xmm0 - movups 16(%rcx),%xmm1 - xorps %xmm0,%xmm3 - leaq 32(%rcx),%rcx - xorps %xmm3,%xmm2 -.Loop_enc1_15: -.byte 102,15,56,220,209 - decl %eax - movups (%rcx),%xmm1 - leaq 16(%rcx),%rcx - jnz .Loop_enc1_15 -.byte 102,15,56,221,209 - movl %r10d,%eax - movq %r11,%rcx - movups %xmm2,0(%rsi) - leaq 16(%rsi),%rsi - subq $16,%rdx - jnc .Lcbc_enc_loop - addq $16,%rdx - jnz .Lcbc_enc_tail - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - movups %xmm2,(%r8) - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - jmp .Lcbc_ret + movl $16+32,%eax + leaq 32(%r11,%r10,1),%rcx + movups 16(%r11),%xmm1 + subq %r10,%rax + movq %rax,%r10 -.Lcbc_enc_tail: - movq %rdx,%rcx - xchgq %rdi,%rsi -.long 0x9066A4F3 - movl $16,%ecx - subq %rdx,%rcx - xorl %eax,%eax -.long 0x9066AAF3 - leaq -16(%rdi),%rdi - movl %r10d,%eax - movq %rdi,%rsi - movq %r11,%rcx - xorq %rdx,%rdx - jmp .Lcbc_enc_loop + movdqu (%rbx),%xmm10 + movdqu (%rbp),%xmm8 -.align 16 -.Lcbc_decrypt: - cmpq $16,%rdx - jne .Lcbc_decrypt_bulk + testq $1,%r8 + jnz .Locb_enc_odd + bsfq %r8,%r12 + addq $1,%r8 + shlq $4,%r12 + movdqu (%rbx,%r12,1),%xmm7 + movdqu (%rdi),%xmm2 + leaq 16(%rdi),%rdi + call __ocb_encrypt1 - movdqu (%rdi),%xmm2 - movdqu (%r8),%xmm3 - movdqa %xmm2,%xmm4 - movups (%rcx),%xmm0 - movups 16(%rcx),%xmm1 - leaq 32(%rcx),%rcx - xorps %xmm0,%xmm2 -.Loop_dec1_16: -.byte 102,15,56,222,209 - decl %r10d - movups (%rcx),%xmm1 - leaq 16(%rcx),%rcx - jnz .Loop_dec1_16 -.byte 102,15,56,223,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - movdqu %xmm4,(%r8) - xorps %xmm3,%xmm2 - pxor %xmm3,%xmm3 + movdqa %xmm7,%xmm15 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 - jmp .Lcbc_ret -.align 16 -.Lcbc_decrypt_bulk: - leaq (%rsp),%rax - pushq %rbp - subq $16,%rsp - andq $-16,%rsp - leaq -8(%rax),%rbp - movups (%r8),%xmm10 - movl %r10d,%eax - cmpq $0x50,%rdx - jbe .Lcbc_dec_tail + leaq 16(%rsi),%rsi + subq $1,%rdx + jz .Locb_enc_done + +.Locb_enc_odd: + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + leaq 6(%r8),%r8 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + shlq $4,%r12 + shlq $4,%r13 + shlq $4,%r14 - movups (%rcx),%xmm0 + subq $6,%rdx + jc .Locb_enc_short + jmp .Locb_enc_grandloop + +.align 32 +.Locb_enc_grandloop: movdqu 0(%rdi),%xmm2 movdqu 16(%rdi),%xmm3 - movdqa %xmm2,%xmm11 movdqu 32(%rdi),%xmm4 - movdqa %xmm3,%xmm12 movdqu 48(%rdi),%xmm5 - movdqa %xmm4,%xmm13 movdqu 64(%rdi),%xmm6 - movdqa %xmm5,%xmm14 movdqu 80(%rdi),%xmm7 - movdqa %xmm6,%xmm15 - movl _gnutls_x86_cpuid_s+4(%rip),%r9d - cmpq $0x70,%rdx - jbe .Lcbc_dec_six_or_seven + leaq 96(%rdi),%rdi + + call __ocb_encrypt6 + + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + movups %xmm5,48(%rsi) + movups %xmm6,64(%rsi) + movups %xmm7,80(%rsi) + leaq 96(%rsi),%rsi + subq $6,%rdx + jnc .Locb_enc_grandloop + +.Locb_enc_short: + addq $6,%rdx + jz .Locb_enc_done + + movdqu 0(%rdi),%xmm2 + cmpq $2,%rdx + jb .Locb_enc_one + movdqu 16(%rdi),%xmm3 + je .Locb_enc_two + + movdqu 32(%rdi),%xmm4 + cmpq $4,%rdx + jb .Locb_enc_three + movdqu 48(%rdi),%xmm5 + je .Locb_enc_four + + movdqu 64(%rdi),%xmm6 + pxor %xmm7,%xmm7 + + call __ocb_encrypt6 + + movdqa %xmm14,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + movups %xmm5,48(%rsi) + movups %xmm6,64(%rsi) + + jmp .Locb_enc_done - andl $71303168,%r9d - subq $0x50,%rdx - cmpl $4194304,%r9d - je .Lcbc_dec_loop6_enter - subq $0x20,%rdx - leaq 112(%rcx),%rcx - jmp .Lcbc_dec_loop8_enter .align 16 -.Lcbc_dec_loop8: - movups %xmm9,(%rsi) - leaq 16(%rsi),%rsi -.Lcbc_dec_loop8_enter: - movdqu 96(%rdi),%xmm8 - pxor %xmm0,%xmm2 - movdqu 112(%rdi),%xmm9 - pxor %xmm0,%xmm3 - movups 16-112(%rcx),%xmm1 - pxor %xmm0,%xmm4 - xorq %r11,%r11 - cmpq $0x70,%rdx - pxor %xmm0,%xmm5 - pxor %xmm0,%xmm6 - pxor %xmm0,%xmm7 - pxor %xmm0,%xmm8 +.Locb_enc_one: + movdqa %xmm10,%xmm7 -.byte 102,15,56,222,209 - pxor %xmm0,%xmm9 - movups 32-112(%rcx),%xmm0 -.byte 102,15,56,222,217 -.byte 102,15,56,222,225 -.byte 102,15,56,222,233 -.byte 102,15,56,222,241 -.byte 102,15,56,222,249 -.byte 102,68,15,56,222,193 - setnc %r11b - shlq $7,%r11 -.byte 102,68,15,56,222,201 - addq %rdi,%r11 - movups 48-112(%rcx),%xmm1 -.byte 102,15,56,222,208 -.byte 102,15,56,222,216 -.byte 102,15,56,222,224 -.byte 102,15,56,222,232 -.byte 102,15,56,222,240 -.byte 102,15,56,222,248 -.byte 102,68,15,56,222,192 -.byte 102,68,15,56,222,200 - movups 64-112(%rcx),%xmm0 - nop -.byte 102,15,56,222,209 -.byte 102,15,56,222,217 -.byte 102,15,56,222,225 -.byte 102,15,56,222,233 -.byte 102,15,56,222,241 -.byte 102,15,56,222,249 -.byte 102,68,15,56,222,193 -.byte 102,68,15,56,222,201 - movups 80-112(%rcx),%xmm1 - nop -.byte 102,15,56,222,208 -.byte 102,15,56,222,216 -.byte 102,15,56,222,224 -.byte 102,15,56,222,232 -.byte 102,15,56,222,240 -.byte 102,15,56,222,248 -.byte 102,68,15,56,222,192 -.byte 102,68,15,56,222,200 - movups 96-112(%rcx),%xmm0 - nop -.byte 102,15,56,222,209 -.byte 102,15,56,222,217 -.byte 102,15,56,222,225 -.byte 102,15,56,222,233 -.byte 102,15,56,222,241 -.byte 102,15,56,222,249 -.byte 102,68,15,56,222,193 -.byte 102,68,15,56,222,201 - movups 112-112(%rcx),%xmm1 - nop -.byte 102,15,56,222,208 -.byte 102,15,56,222,216 -.byte 102,15,56,222,224 -.byte 102,15,56,222,232 -.byte 102,15,56,222,240 -.byte 102,15,56,222,248 -.byte 102,68,15,56,222,192 -.byte 102,68,15,56,222,200 - movups 128-112(%rcx),%xmm0 + call __ocb_encrypt1 + + movdqa %xmm7,%xmm15 + movups %xmm2,0(%rsi) + jmp .Locb_enc_done + +.align 16 +.Locb_enc_two: + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + + call __ocb_encrypt4 + + movdqa %xmm11,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + + jmp .Locb_enc_done + +.align 16 +.Locb_enc_three: + pxor %xmm5,%xmm5 + + call __ocb_encrypt4 + + movdqa %xmm12,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + + jmp .Locb_enc_done + +.align 16 +.Locb_enc_four: + call __ocb_encrypt4 + + movdqa %xmm13,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + movups %xmm5,48(%rsi) + +.Locb_enc_done: + pxor %xmm0,%xmm15 + movdqu %xmm8,(%rbp) + movdqu %xmm15,(%r9) + + xorps %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 + pxor %xmm8,%xmm8 + pxor %xmm9,%xmm9 + pxor %xmm10,%xmm10 + pxor %xmm11,%xmm11 + pxor %xmm12,%xmm12 + pxor %xmm13,%xmm13 + pxor %xmm14,%xmm14 + pxor %xmm15,%xmm15 + leaq 40(%rsp),%rax +.cfi_def_cfa %rax,8 + 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 +.Locb_enc_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size aesni_ocb_encrypt,.-aesni_ocb_encrypt + +.type __ocb_encrypt6,@function +.align 32 +__ocb_encrypt6: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + movdqa %xmm10,%xmm14 + pxor %xmm15,%xmm10 + movdqu (%rbx,%r14,1),%xmm15 + pxor %xmm10,%xmm11 + pxor %xmm2,%xmm8 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm3,%xmm8 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm4,%xmm8 + pxor %xmm12,%xmm4 + pxor %xmm13,%xmm14 + pxor %xmm5,%xmm8 + pxor %xmm13,%xmm5 + pxor %xmm14,%xmm15 + pxor %xmm6,%xmm8 + pxor %xmm14,%xmm6 + pxor %xmm7,%xmm8 + pxor %xmm15,%xmm7 + movups 32(%r11),%xmm0 + + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + addq $6,%r8 + pxor %xmm9,%xmm10 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 +.byte 102,15,56,220,241 + pxor %xmm9,%xmm13 + pxor %xmm9,%xmm14 +.byte 102,15,56,220,249 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm15 + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 +.byte 102,15,56,220,240 +.byte 102,15,56,220,248 + movups 64(%r11),%xmm0 + shlq $4,%r12 + shlq $4,%r13 + jmp .Locb_enc_loop6 + +.align 32 +.Locb_enc_loop6: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 +.byte 102,15,56,220,240 +.byte 102,15,56,220,248 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_enc_loop6 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movups 16(%r11),%xmm1 + shlq $4,%r14 + +.byte 102,65,15,56,221,210 + movdqu (%rbx),%xmm10 + movq %r10,%rax +.byte 102,65,15,56,221,219 +.byte 102,65,15,56,221,228 +.byte 102,65,15,56,221,237 +.byte 102,65,15,56,221,246 +.byte 102,65,15,56,221,255 + .byte 0xf3,0xc3 +.size __ocb_encrypt6,.-__ocb_encrypt6 + +.type __ocb_encrypt4,@function +.align 32 +__ocb_encrypt4: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + pxor %xmm15,%xmm10 + pxor %xmm10,%xmm11 + pxor %xmm2,%xmm8 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm3,%xmm8 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm4,%xmm8 + pxor %xmm12,%xmm4 + pxor %xmm5,%xmm8 + pxor %xmm13,%xmm5 + movups 32(%r11),%xmm0 + + pxor %xmm9,%xmm10 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 + pxor %xmm9,%xmm13 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + movups 48(%r11),%xmm1 + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 + movups 64(%r11),%xmm0 + jmp .Locb_enc_loop4 + +.align 32 +.Locb_enc_loop4: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_enc_loop4 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,65,15,56,221,210 +.byte 102,65,15,56,221,219 +.byte 102,65,15,56,221,228 +.byte 102,65,15,56,221,237 + .byte 0xf3,0xc3 +.size __ocb_encrypt4,.-__ocb_encrypt4 + +.type __ocb_encrypt1,@function +.align 32 +__ocb_encrypt1: + pxor %xmm15,%xmm7 + pxor %xmm9,%xmm7 + pxor %xmm2,%xmm8 + pxor %xmm7,%xmm2 + movups 32(%r11),%xmm0 + +.byte 102,15,56,220,209 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm7 + +.byte 102,15,56,220,208 + movups 64(%r11),%xmm0 + jmp .Locb_enc_loop1 + +.align 32 +.Locb_enc_loop1: +.byte 102,15,56,220,209 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,220,208 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_enc_loop1 + +.byte 102,15,56,220,209 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,15,56,221,215 + .byte 0xf3,0xc3 +.size __ocb_encrypt1,.-__ocb_encrypt1 + +.globl aesni_ocb_decrypt +.type aesni_ocb_decrypt,@function +.align 32 +aesni_ocb_decrypt: +.cfi_startproc + leaq (%rsp),%rax + pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 + movq 8(%rax),%rbx + movq 8+8(%rax),%rbp + + movl 240(%rcx),%r10d + movq %rcx,%r11 + shll $4,%r10d + movups (%rcx),%xmm9 + movups 16(%rcx,%r10,1),%xmm1 + + movdqu (%r9),%xmm15 + pxor %xmm1,%xmm9 + pxor %xmm1,%xmm15 + + movl $16+32,%eax + leaq 32(%r11,%r10,1),%rcx + movups 16(%r11),%xmm1 + subq %r10,%rax + movq %rax,%r10 + + movdqu (%rbx),%xmm10 + movdqu (%rbp),%xmm8 + + testq $1,%r8 + jnz .Locb_dec_odd + + bsfq %r8,%r12 + addq $1,%r8 + shlq $4,%r12 + movdqu (%rbx,%r12,1),%xmm7 + movdqu (%rdi),%xmm2 + leaq 16(%rdi),%rdi + + call __ocb_decrypt1 + + movdqa %xmm7,%xmm15 + movups %xmm2,(%rsi) + xorps %xmm2,%xmm8 + leaq 16(%rsi),%rsi + subq $1,%rdx + jz .Locb_dec_done + +.Locb_dec_odd: + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + leaq 6(%r8),%r8 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + shlq $4,%r12 + shlq $4,%r13 + shlq $4,%r14 + + subq $6,%rdx + jc .Locb_dec_short + jmp .Locb_dec_grandloop + +.align 32 +.Locb_dec_grandloop: + movdqu 0(%rdi),%xmm2 + movdqu 16(%rdi),%xmm3 + movdqu 32(%rdi),%xmm4 + movdqu 48(%rdi),%xmm5 + movdqu 64(%rdi),%xmm6 + movdqu 80(%rdi),%xmm7 + leaq 96(%rdi),%rdi + + call __ocb_decrypt6 + + movups %xmm2,0(%rsi) + pxor %xmm2,%xmm8 + movups %xmm3,16(%rsi) + pxor %xmm3,%xmm8 + movups %xmm4,32(%rsi) + pxor %xmm4,%xmm8 + movups %xmm5,48(%rsi) + pxor %xmm5,%xmm8 + movups %xmm6,64(%rsi) + pxor %xmm6,%xmm8 + movups %xmm7,80(%rsi) + pxor %xmm7,%xmm8 + leaq 96(%rsi),%rsi + subq $6,%rdx + jnc .Locb_dec_grandloop + +.Locb_dec_short: + addq $6,%rdx + jz .Locb_dec_done + + movdqu 0(%rdi),%xmm2 + cmpq $2,%rdx + jb .Locb_dec_one + movdqu 16(%rdi),%xmm3 + je .Locb_dec_two + + movdqu 32(%rdi),%xmm4 + cmpq $4,%rdx + jb .Locb_dec_three + movdqu 48(%rdi),%xmm5 + je .Locb_dec_four + + movdqu 64(%rdi),%xmm6 + pxor %xmm7,%xmm7 + + call __ocb_decrypt6 + + movdqa %xmm14,%xmm15 + movups %xmm2,0(%rsi) + pxor %xmm2,%xmm8 + movups %xmm3,16(%rsi) + pxor %xmm3,%xmm8 + movups %xmm4,32(%rsi) + pxor %xmm4,%xmm8 + movups %xmm5,48(%rsi) + pxor %xmm5,%xmm8 + movups %xmm6,64(%rsi) + pxor %xmm6,%xmm8 + + jmp .Locb_dec_done + +.align 16 +.Locb_dec_one: + movdqa %xmm10,%xmm7 + + call __ocb_decrypt1 + + movdqa %xmm7,%xmm15 + movups %xmm2,0(%rsi) + xorps %xmm2,%xmm8 + jmp .Locb_dec_done + +.align 16 +.Locb_dec_two: + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + + call __ocb_decrypt4 + + movdqa %xmm11,%xmm15 + movups %xmm2,0(%rsi) + xorps %xmm2,%xmm8 + movups %xmm3,16(%rsi) + xorps %xmm3,%xmm8 + + jmp .Locb_dec_done + +.align 16 +.Locb_dec_three: + pxor %xmm5,%xmm5 + + call __ocb_decrypt4 + + movdqa %xmm12,%xmm15 + movups %xmm2,0(%rsi) + xorps %xmm2,%xmm8 + movups %xmm3,16(%rsi) + xorps %xmm3,%xmm8 + movups %xmm4,32(%rsi) + xorps %xmm4,%xmm8 + + jmp .Locb_dec_done + +.align 16 +.Locb_dec_four: + call __ocb_decrypt4 + + movdqa %xmm13,%xmm15 + movups %xmm2,0(%rsi) + pxor %xmm2,%xmm8 + movups %xmm3,16(%rsi) + pxor %xmm3,%xmm8 + movups %xmm4,32(%rsi) + pxor %xmm4,%xmm8 + movups %xmm5,48(%rsi) + pxor %xmm5,%xmm8 + +.Locb_dec_done: + pxor %xmm0,%xmm15 + movdqu %xmm8,(%rbp) + movdqu %xmm15,(%r9) + + xorps %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 + pxor %xmm8,%xmm8 + pxor %xmm9,%xmm9 + pxor %xmm10,%xmm10 + pxor %xmm11,%xmm11 + pxor %xmm12,%xmm12 + pxor %xmm13,%xmm13 + pxor %xmm14,%xmm14 + pxor %xmm15,%xmm15 + leaq 40(%rsp),%rax +.cfi_def_cfa %rax,8 + 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 +.Locb_dec_epilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size aesni_ocb_decrypt,.-aesni_ocb_decrypt + +.type __ocb_decrypt6,@function +.align 32 +__ocb_decrypt6: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + movdqa %xmm10,%xmm14 + pxor %xmm15,%xmm10 + movdqu (%rbx,%r14,1),%xmm15 + pxor %xmm10,%xmm11 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm12,%xmm4 + pxor %xmm13,%xmm14 + pxor %xmm13,%xmm5 + pxor %xmm14,%xmm15 + pxor %xmm14,%xmm6 + pxor %xmm15,%xmm7 + movups 32(%r11),%xmm0 + + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + addq $6,%r8 + pxor %xmm9,%xmm10 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 +.byte 102,15,56,222,241 + pxor %xmm9,%xmm13 + pxor %xmm9,%xmm14 +.byte 102,15,56,222,249 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm15 + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 +.byte 102,15,56,222,240 +.byte 102,15,56,222,248 + movups 64(%r11),%xmm0 + shlq $4,%r12 + shlq $4,%r13 + jmp .Locb_dec_loop6 + +.align 32 +.Locb_dec_loop6: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 +.byte 102,15,56,222,240 +.byte 102,15,56,222,248 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_dec_loop6 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movups 16(%r11),%xmm1 + shlq $4,%r14 + +.byte 102,65,15,56,223,210 + movdqu (%rbx),%xmm10 + movq %r10,%rax +.byte 102,65,15,56,223,219 +.byte 102,65,15,56,223,228 +.byte 102,65,15,56,223,237 +.byte 102,65,15,56,223,246 +.byte 102,65,15,56,223,255 + .byte 0xf3,0xc3 +.size __ocb_decrypt6,.-__ocb_decrypt6 + +.type __ocb_decrypt4,@function +.align 32 +__ocb_decrypt4: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + pxor %xmm15,%xmm10 + pxor %xmm10,%xmm11 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm12,%xmm4 + pxor %xmm13,%xmm5 + movups 32(%r11),%xmm0 + + pxor %xmm9,%xmm10 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 + pxor %xmm9,%xmm13 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + movups 48(%r11),%xmm1 + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 + movups 64(%r11),%xmm0 + jmp .Locb_dec_loop4 + +.align 32 +.Locb_dec_loop4: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_dec_loop4 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,65,15,56,223,210 +.byte 102,65,15,56,223,219 +.byte 102,65,15,56,223,228 +.byte 102,65,15,56,223,237 + .byte 0xf3,0xc3 +.size __ocb_decrypt4,.-__ocb_decrypt4 + +.type __ocb_decrypt1,@function +.align 32 +__ocb_decrypt1: + pxor %xmm15,%xmm7 + pxor %xmm9,%xmm7 + pxor %xmm7,%xmm2 + movups 32(%r11),%xmm0 + +.byte 102,15,56,222,209 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm7 + +.byte 102,15,56,222,208 + movups 64(%r11),%xmm0 + jmp .Locb_dec_loop1 + +.align 32 +.Locb_dec_loop1: +.byte 102,15,56,222,209 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,222,208 + movups -16(%rcx,%rax,1),%xmm0 + jnz .Locb_dec_loop1 + +.byte 102,15,56,222,209 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,15,56,223,215 + .byte 0xf3,0xc3 +.size __ocb_decrypt1,.-__ocb_decrypt1 +.globl aesni_cbc_encrypt +.type aesni_cbc_encrypt,@function +.align 16 +aesni_cbc_encrypt: +.cfi_startproc + testq %rdx,%rdx + jz .Lcbc_ret + + movl 240(%rcx),%r10d + movq %rcx,%r11 + testl %r9d,%r9d + jz .Lcbc_decrypt + + movups (%r8),%xmm2 + movl %r10d,%eax + cmpq $16,%rdx + jb .Lcbc_enc_tail + subq $16,%rdx + jmp .Lcbc_enc_loop +.align 16 +.Lcbc_enc_loop: + movups (%rdi),%xmm3 + leaq 16(%rdi),%rdi + + movups (%rcx),%xmm0 + movups 16(%rcx),%xmm1 + xorps %xmm0,%xmm3 + leaq 32(%rcx),%rcx + xorps %xmm3,%xmm2 +.Loop_enc1_15: +.byte 102,15,56,220,209 + decl %eax + movups (%rcx),%xmm1 + leaq 16(%rcx),%rcx + jnz .Loop_enc1_15 +.byte 102,15,56,221,209 + movl %r10d,%eax + movq %r11,%rcx + movups %xmm2,0(%rsi) + leaq 16(%rsi),%rsi + subq $16,%rdx + jnc .Lcbc_enc_loop + addq $16,%rdx + jnz .Lcbc_enc_tail + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + movups %xmm2,(%r8) + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + jmp .Lcbc_ret + +.Lcbc_enc_tail: + movq %rdx,%rcx + xchgq %rdi,%rsi +.long 0x9066A4F3 + movl $16,%ecx + subq %rdx,%rcx + xorl %eax,%eax +.long 0x9066AAF3 + leaq -16(%rdi),%rdi + movl %r10d,%eax + movq %rdi,%rsi + movq %r11,%rcx + xorq %rdx,%rdx + jmp .Lcbc_enc_loop + +.align 16 +.Lcbc_decrypt: + cmpq $16,%rdx + jne .Lcbc_decrypt_bulk + + + + movdqu (%rdi),%xmm2 + movdqu (%r8),%xmm3 + movdqa %xmm2,%xmm4 + movups (%rcx),%xmm0 + movups 16(%rcx),%xmm1 + leaq 32(%rcx),%rcx + xorps %xmm0,%xmm2 +.Loop_dec1_16: +.byte 102,15,56,222,209 + decl %r10d + movups (%rcx),%xmm1 + leaq 16(%rcx),%rcx + jnz .Loop_dec1_16 +.byte 102,15,56,223,209 + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + movdqu %xmm4,(%r8) + xorps %xmm3,%xmm2 + pxor %xmm3,%xmm3 + movups %xmm2,(%rsi) + pxor %xmm2,%xmm2 + jmp .Lcbc_ret +.align 16 +.Lcbc_decrypt_bulk: + leaq (%rsp),%r11 +.cfi_def_cfa_register %r11 + pushq %rbp +.cfi_offset %rbp,-16 + subq $16,%rsp + andq $-16,%rsp + movq %rcx,%rbp + movups (%r8),%xmm10 + movl %r10d,%eax + cmpq $0x50,%rdx + jbe .Lcbc_dec_tail + + movups (%rcx),%xmm0 + movdqu 0(%rdi),%xmm2 + movdqu 16(%rdi),%xmm3 + movdqa %xmm2,%xmm11 + movdqu 32(%rdi),%xmm4 + movdqa %xmm3,%xmm12 + movdqu 48(%rdi),%xmm5 + movdqa %xmm4,%xmm13 + movdqu 64(%rdi),%xmm6 + movdqa %xmm5,%xmm14 + movdqu 80(%rdi),%xmm7 + movdqa %xmm6,%xmm15 + movl _gnutls_x86_cpuid_s+4(%rip),%r9d + cmpq $0x70,%rdx + jbe .Lcbc_dec_six_or_seven + + andl $71303168,%r9d + subq $0x50,%rdx + cmpl $4194304,%r9d + je .Lcbc_dec_loop6_enter + subq $0x20,%rdx + leaq 112(%rcx),%rcx + jmp .Lcbc_dec_loop8_enter +.align 16 +.Lcbc_dec_loop8: + movups %xmm9,(%rsi) + leaq 16(%rsi),%rsi +.Lcbc_dec_loop8_enter: + movdqu 96(%rdi),%xmm8 + pxor %xmm0,%xmm2 + movdqu 112(%rdi),%xmm9 + pxor %xmm0,%xmm3 + movups 16-112(%rcx),%xmm1 + pxor %xmm0,%xmm4 + movq $-1,%rbp + cmpq $0x70,%rdx + pxor %xmm0,%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm0,%xmm7 + pxor %xmm0,%xmm8 + +.byte 102,15,56,222,209 + pxor %xmm0,%xmm9 + movups 32-112(%rcx),%xmm0 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 +.byte 102,68,15,56,222,193 + adcq $0,%rbp + andq $128,%rbp +.byte 102,68,15,56,222,201 + addq %rdi,%rbp + movups 48-112(%rcx),%xmm1 +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 +.byte 102,15,56,222,240 +.byte 102,15,56,222,248 +.byte 102,68,15,56,222,192 +.byte 102,68,15,56,222,200 + movups 64-112(%rcx),%xmm0 + nop +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 +.byte 102,68,15,56,222,193 +.byte 102,68,15,56,222,201 + movups 80-112(%rcx),%xmm1 + nop +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 +.byte 102,15,56,222,240 +.byte 102,15,56,222,248 +.byte 102,68,15,56,222,192 +.byte 102,68,15,56,222,200 + movups 96-112(%rcx),%xmm0 + nop +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 +.byte 102,68,15,56,222,193 +.byte 102,68,15,56,222,201 + movups 112-112(%rcx),%xmm1 + nop +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 +.byte 102,15,56,222,240 +.byte 102,15,56,222,248 +.byte 102,68,15,56,222,192 +.byte 102,68,15,56,222,200 + movups 128-112(%rcx),%xmm0 nop .byte 102,15,56,222,209 .byte 102,15,56,222,217 @@ -2867,18 +3763,18 @@ aesni_cbc_encrypt: movdqu 112(%rdi),%xmm0 .byte 102,65,15,56,223,228 leaq 128(%rdi),%rdi - movdqu 0(%r11),%xmm11 + movdqu 0(%rbp),%xmm11 .byte 102,65,15,56,223,237 .byte 102,65,15,56,223,246 - movdqu 16(%r11),%xmm12 - movdqu 32(%r11),%xmm13 + movdqu 16(%rbp),%xmm12 + movdqu 32(%rbp),%xmm13 .byte 102,65,15,56,223,255 .byte 102,68,15,56,223,193 - movdqu 48(%r11),%xmm14 - movdqu 64(%r11),%xmm15 + movdqu 48(%rbp),%xmm14 + movdqu 64(%rbp),%xmm15 .byte 102,69,15,56,223,202 movdqa %xmm0,%xmm10 - movdqu 80(%r11),%xmm1 + movdqu 80(%rbp),%xmm1 movups -112(%rcx),%xmm0 movups %xmm2,(%rsi) @@ -2997,7 +3893,7 @@ aesni_cbc_encrypt: pxor %xmm13,%xmm5 movdqu %xmm4,32(%rsi) pxor %xmm14,%xmm6 - movq %r11,%rcx + movq %rbp,%rcx movdqu %xmm5,48(%rsi) pxor %xmm15,%xmm7 movl %r10d,%eax @@ -3150,16 +4046,21 @@ aesni_cbc_encrypt: .Lcbc_dec_ret: xorps %xmm0,%xmm0 pxor %xmm1,%xmm1 - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp +.cfi_restore %rbp + leaq (%r11),%rsp +.cfi_def_cfa_register %rsp .Lcbc_ret: .byte 0xf3,0xc3 +.cfi_endproc .size aesni_cbc_encrypt,.-aesni_cbc_encrypt .globl aesni_set_decrypt_key .type aesni_set_decrypt_key,@function .align 16 aesni_set_decrypt_key: +.cfi_startproc .byte 0x48,0x83,0xEC,0x08 +.cfi_adjust_cfa_offset 8 call __aesni_set_encrypt_key shll $4,%esi testl %eax,%eax @@ -3192,7 +4093,9 @@ aesni_set_decrypt_key: pxor %xmm0,%xmm0 .Ldec_key_ret: addq $8,%rsp +.cfi_adjust_cfa_offset -8 .byte 0xf3,0xc3 +.cfi_endproc .LSEH_end_set_decrypt_key: .size aesni_set_decrypt_key,.-aesni_set_decrypt_key .globl aesni_set_encrypt_key @@ -3200,7 +4103,9 @@ aesni_set_decrypt_key: .align 16 aesni_set_encrypt_key: __aesni_set_encrypt_key: +.cfi_startproc .byte 0x48,0x83,0xEC,0x08 +.cfi_adjust_cfa_offset 8 movq $-1,%rax testq %rdi,%rdi jz .Lenc_key_ret @@ -3493,7 +4398,9 @@ __aesni_set_encrypt_key: pxor %xmm4,%xmm4 pxor %xmm5,%xmm5 addq $8,%rsp +.cfi_adjust_cfa_offset -8 .byte 0xf3,0xc3 +.cfi_endproc .LSEH_end_set_encrypt_key: .align 16 diff --git a/lib/accelerated/x86/elf/cpuid-x86.s b/lib/accelerated/x86/elf/cpuid-x86.s deleted file mode 100644 index 83a6d23545..0000000000 --- a/lib/accelerated/x86/elf/cpuid-x86.s +++ /dev/null @@ -1,75 +0,0 @@ -# -# Copyright (C) 2011-2013 Free Software Foundation, Inc. -# Copyright (C) 2013 Nikos Mavrogiannopoulos -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# The GnuTLS is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public License -# as published by the Free Software Foundation; either version 2.1 of -# the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see . -# -# *** This file is auto-generated *** -# -.file "devel/perlasm/cpuid-x86.s" -.text -.globl gnutls_cpuid -.type gnutls_cpuid,@function -.align 16 -gnutls_cpuid: -.L_gnutls_cpuid_begin: - pushl %ebp - movl %esp,%ebp - subl $12,%esp - movl %ebx,(%esp) - movl 8(%ebp),%eax - movl %esi,4(%esp) - movl %edi,8(%esp) - pushl %ebx - .byte 0x0f,0xa2 - movl %ebx,%edi - popl %ebx - movl %edx,%esi - movl 12(%ebp),%edx - movl %eax,(%edx) - movl 16(%ebp),%eax - movl %edi,(%eax) - movl 20(%ebp),%eax - movl %ecx,(%eax) - movl 24(%ebp),%eax - movl %esi,(%eax) - movl (%esp),%ebx - movl 4(%esp),%esi - movl 8(%esp),%edi - movl %ebp,%esp - popl %ebp - ret -.size gnutls_cpuid,.-.L_gnutls_cpuid_begin -.globl gnutls_have_cpuid -.type gnutls_have_cpuid,@function -.align 16 -gnutls_have_cpuid: -.L_gnutls_have_cpuid_begin: - pushfl - popl %eax - orl $2097152,%eax - pushl %eax - popfl - pushfl - popl %eax - andl $2097152,%eax - ret -.size gnutls_have_cpuid,.-.L_gnutls_have_cpuid_begin -.byte 67,80,85,73,68,32,102,111,114,32,120,56,54,0 - -.section .note.GNU-stack,"",%progbits diff --git a/lib/accelerated/x86/elf/cpuid-x86_64.s b/lib/accelerated/x86/elf/cpuid-x86_64.s deleted file mode 100644 index 12d6faa9e6..0000000000 --- a/lib/accelerated/x86/elf/cpuid-x86_64.s +++ /dev/null @@ -1,62 +0,0 @@ -# -# Copyright (C) 2011-2013 Free Software Foundation, Inc. -# Copyright (C) 2013 Nikos Mavrogiannopoulos -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# The GnuTLS is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public License -# as published by the Free Software Foundation; either version 2.1 of -# the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see . -# -# *** This file is auto-generated *** -# -.text -.globl gnutls_cpuid -.type gnutls_cpuid,@function -.align 16 -gnutls_cpuid: - pushq %rbp - movq %rsp,%rbp - pushq %rbx - movl %edi,-12(%rbp) - movq %rsi,-24(%rbp) - movq %rdx,-32(%rbp) - movq %rcx,-40(%rbp) - movq %r8,-48(%rbp) - movl -12(%rbp),%eax - movl %eax,-60(%rbp) - movl -60(%rbp),%eax - cpuid - movl %edx,-56(%rbp) - movl %ecx,%esi - movl %eax,-52(%rbp) - movq -24(%rbp),%rax - movl -52(%rbp),%edx - movl %edx,(%rax) - movq -32(%rbp),%rax - movl %ebx,(%rax) - movq -40(%rbp),%rax - movl %esi,(%rax) - movq -48(%rbp),%rax - movl -56(%rbp),%ecx - movl %ecx,(%rax) - popq %rbx - leave - .byte 0xf3,0xc3 -.size gnutls_cpuid,.-gnutls_cpuid - - -.section .note.GNU-stack,"",%progbits - - diff --git a/lib/accelerated/x86/elf/ghash-x86_64.s b/lib/accelerated/x86/elf/ghash-x86_64.s index e2568a6fd6..1e4d18b341 100644 --- a/lib/accelerated/x86/elf/ghash-x86_64.s +++ b/lib/accelerated/x86/elf/ghash-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -44,9 +44,27 @@ .type gcm_gmult_4bit,@function .align 16 gcm_gmult_4bit: +.cfi_startproc pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-16 pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-24 pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-56 + subq $280,%rsp +.cfi_adjust_cfa_offset 280 .Lgmult_prologue: movzbq 15(%rdi),%r8 @@ -123,22 +141,41 @@ gcm_gmult_4bit: movq %r8,8(%rdi) movq %r9,(%rdi) - movq 16(%rsp),%rbx - leaq 24(%rsp),%rsp + leaq 280+48(%rsp),%rsi +.cfi_def_cfa %rsi,8 + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lgmult_epilogue: .byte 0xf3,0xc3 +.cfi_endproc .size gcm_gmult_4bit,.-gcm_gmult_4bit .globl gcm_ghash_4bit .type gcm_ghash_4bit,@function .align 16 gcm_ghash_4bit: +.cfi_startproc pushq %rbx +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbx,-16 pushq %rbp +.cfi_adjust_cfa_offset 8 +.cfi_offset %rbp,-24 pushq %r12 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r12,-32 pushq %r13 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r13,-40 pushq %r14 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r14,-48 pushq %r15 +.cfi_adjust_cfa_offset 8 +.cfi_offset %r15,-56 subq $280,%rsp +.cfi_adjust_cfa_offset 280 .Lghash_prologue: movq %rdx,%r14 movq %rcx,%r15 @@ -683,21 +720,31 @@ gcm_ghash_4bit: movq %r8,8(%rdi) movq %r9,(%rdi) - leaq 280(%rsp),%rsi - movq 0(%rsi),%r15 - movq 8(%rsi),%r14 - movq 16(%rsi),%r13 - movq 24(%rsi),%r12 - movq 32(%rsi),%rbp - movq 40(%rsi),%rbx - leaq 48(%rsi),%rsp + leaq 280+48(%rsp),%rsi +.cfi_def_cfa %rsi,8 + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq 0(%rsi),%rsp +.cfi_def_cfa_register %rsp .Lghash_epilogue: .byte 0xf3,0xc3 +.cfi_endproc .size gcm_ghash_4bit,.-gcm_ghash_4bit .globl gcm_init_clmul .type gcm_init_clmul,@function .align 16 gcm_init_clmul: +.cfi_startproc .L_init_clmul: movdqu (%rsi),%xmm2 pshufd $78,%xmm2,%xmm2 @@ -849,11 +896,13 @@ gcm_init_clmul: .byte 102,15,58,15,227,8 movdqu %xmm4,80(%rdi) .byte 0xf3,0xc3 +.cfi_endproc .size gcm_init_clmul,.-gcm_init_clmul .globl gcm_gmult_clmul .type gcm_gmult_clmul,@function .align 16 gcm_gmult_clmul: +.cfi_startproc .L_gmult_clmul: movdqu (%rdi),%xmm0 movdqa .Lbswap_mask(%rip),%xmm5 @@ -900,11 +949,13 @@ gcm_gmult_clmul: .byte 102,15,56,0,197 movdqu %xmm0,(%rdi) .byte 0xf3,0xc3 +.cfi_endproc .size gcm_gmult_clmul,.-gcm_gmult_clmul .globl gcm_ghash_clmul .type gcm_ghash_clmul,@function .align 32 gcm_ghash_clmul: +.cfi_startproc .L_ghash_clmul: movdqa .Lbswap_mask(%rip),%xmm10 @@ -1283,11 +1334,13 @@ gcm_ghash_clmul: .byte 102,65,15,56,0,194 movdqu %xmm0,(%rdi) .byte 0xf3,0xc3 +.cfi_endproc .size gcm_ghash_clmul,.-gcm_ghash_clmul .globl gcm_init_avx .type gcm_init_avx,@function .align 32 gcm_init_avx: +.cfi_startproc vzeroupper vmovdqu (%rsi),%xmm2 @@ -1390,17 +1443,21 @@ gcm_init_avx: vzeroupper .byte 0xf3,0xc3 +.cfi_endproc .size gcm_init_avx,.-gcm_init_avx .globl gcm_gmult_avx .type gcm_gmult_avx,@function .align 32 gcm_gmult_avx: +.cfi_startproc jmp .L_gmult_clmul +.cfi_endproc .size gcm_gmult_avx,.-gcm_gmult_avx .globl gcm_ghash_avx .type gcm_ghash_avx,@function .align 32 gcm_ghash_avx: +.cfi_startproc vzeroupper vmovdqu (%rdi),%xmm10 @@ -1772,6 +1829,7 @@ gcm_ghash_avx: vmovdqu %xmm10,(%rdi) vzeroupper .byte 0xf3,0xc3 +.cfi_endproc .size gcm_ghash_avx,.-gcm_ghash_avx .align 64 .Lbswap_mask: diff --git a/lib/accelerated/x86/elf/sha1-ssse3-x86.s b/lib/accelerated/x86/elf/sha1-ssse3-x86.s index 7b585a0f3e..8bfbcb6b39 100644 --- a/lib/accelerated/x86/elf/sha1-ssse3-x86.s +++ b/lib/accelerated/x86/elf/sha1-ssse3-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "sha1-586.s" .text .globl sha1_block_data_order .type sha1_block_data_order,@function @@ -1418,7 +1417,4 @@ sha1_block_data_order: .byte 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112 .byte 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 - .section .note.GNU-stack,"",%progbits - - diff --git a/lib/accelerated/x86/elf/sha1-ssse3-x86_64.s b/lib/accelerated/x86/elf/sha1-ssse3-x86_64.s index af40532f12..1e6546e11e 100644 --- a/lib/accelerated/x86/elf/sha1-ssse3-x86_64.s +++ b/lib/accelerated/x86/elf/sha1-ssse3-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -44,25 +44,45 @@ .type sha1_block_data_order,@function .align 16 sha1_block_data_order: +.cfi_startproc movl _gnutls_x86_cpuid_s+0(%rip),%r9d movl _gnutls_x86_cpuid_s+4(%rip),%r8d + movl _gnutls_x86_cpuid_s+8(%rip),%r10d testl $512,%r8d jz .Lialu + testl $536870912,%r10d + jnz _shaext_shortcut + andl $296,%r10d + cmpl $296,%r10d + je _avx2_shortcut + andl $268435456,%r8d + andl $1073741824,%r9d + orl %r9d,%r8d + cmpl $1342177280,%r8d + je _avx_shortcut jmp _ssse3_shortcut .align 16 .Lialu: + movq %rsp,%rax +.cfi_def_cfa_register %rax pushq %rbx +.cfi_offset %rbx,-16 pushq %rbp +.cfi_offset %rbp,-24 pushq %r12 +.cfi_offset %r12,-32 pushq %r13 - movq %rsp,%r11 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 movq %rdi,%r8 subq $72,%rsp movq %rsi,%r9 andq $-64,%rsp movq %rdx,%r10 - movq %r11,64(%rsp) + movq %rax,64(%rsp) +.cfi_escape 0x0f,0x06,0x77,0xc0,0x00,0x06,0x23,0x08 .Lprologue: movl 0(%r8),%esi @@ -76,1230 +96,1168 @@ sha1_block_data_order: .Lloop: movl 0(%r9),%edx bswapl %edx - movl %edx,0(%rsp) - movl %r11d,%eax movl 4(%r9),%ebp + movl %r12d,%eax + movl %edx,0(%rsp) movl %esi,%ecx - xorl %r12d,%eax bswapl %ebp + xorl %r11d,%eax roll $5,%ecx - leal 1518500249(%rdx,%r13,1),%r13d andl %edi,%eax - movl %ebp,4(%rsp) + leal 1518500249(%rdx,%r13,1),%r13d addl %ecx,%r13d xorl %r12d,%eax roll $30,%edi addl %eax,%r13d - movl %edi,%eax - movl 8(%r9),%edx + movl 8(%r9),%r14d + movl %r11d,%eax + movl %ebp,4(%rsp) movl %r13d,%ecx - xorl %r11d,%eax - bswapl %edx + bswapl %r14d + xorl %edi,%eax roll $5,%ecx - leal 1518500249(%rbp,%r12,1),%r12d andl %esi,%eax - movl %edx,8(%rsp) + leal 1518500249(%rbp,%r12,1),%r12d addl %ecx,%r12d xorl %r11d,%eax roll $30,%esi addl %eax,%r12d - movl %esi,%eax - movl 12(%r9),%ebp + movl 12(%r9),%edx + movl %edi,%eax + movl %r14d,8(%rsp) movl %r12d,%ecx - xorl %edi,%eax - bswapl %ebp + bswapl %edx + xorl %esi,%eax roll $5,%ecx - leal 1518500249(%rdx,%r11,1),%r11d andl %r13d,%eax - movl %ebp,12(%rsp) + leal 1518500249(%r14,%r11,1),%r11d addl %ecx,%r11d xorl %edi,%eax roll $30,%r13d addl %eax,%r11d - movl %r13d,%eax - movl 16(%r9),%edx + movl 16(%r9),%ebp + movl %esi,%eax + movl %edx,12(%rsp) movl %r11d,%ecx - xorl %esi,%eax - bswapl %edx + bswapl %ebp + xorl %r13d,%eax roll $5,%ecx - leal 1518500249(%rbp,%rdi,1),%edi andl %r12d,%eax - movl %edx,16(%rsp) + leal 1518500249(%rdx,%rdi,1),%edi addl %ecx,%edi xorl %esi,%eax roll $30,%r12d addl %eax,%edi - movl %r12d,%eax - movl 20(%r9),%ebp + movl 20(%r9),%r14d + movl %r13d,%eax + movl %ebp,16(%rsp) movl %edi,%ecx - xorl %r13d,%eax - bswapl %ebp + bswapl %r14d + xorl %r12d,%eax roll $5,%ecx - leal 1518500249(%rdx,%rsi,1),%esi andl %r11d,%eax - movl %ebp,20(%rsp) + leal 1518500249(%rbp,%rsi,1),%esi addl %ecx,%esi xorl %r13d,%eax roll $30,%r11d addl %eax,%esi - movl %r11d,%eax movl 24(%r9),%edx + movl %r12d,%eax + movl %r14d,20(%rsp) movl %esi,%ecx - xorl %r12d,%eax bswapl %edx + xorl %r11d,%eax roll $5,%ecx - leal 1518500249(%rbp,%r13,1),%r13d andl %edi,%eax - movl %edx,24(%rsp) + leal 1518500249(%r14,%r13,1),%r13d addl %ecx,%r13d xorl %r12d,%eax roll $30,%edi addl %eax,%r13d - movl %edi,%eax movl 28(%r9),%ebp + movl %r11d,%eax + movl %edx,24(%rsp) movl %r13d,%ecx - xorl %r11d,%eax bswapl %ebp + xorl %edi,%eax roll $5,%ecx - leal 1518500249(%rdx,%r12,1),%r12d andl %esi,%eax - movl %ebp,28(%rsp) + leal 1518500249(%rdx,%r12,1),%r12d addl %ecx,%r12d xorl %r11d,%eax roll $30,%esi addl %eax,%r12d - movl %esi,%eax - movl 32(%r9),%edx + movl 32(%r9),%r14d + movl %edi,%eax + movl %ebp,28(%rsp) movl %r12d,%ecx - xorl %edi,%eax - bswapl %edx + bswapl %r14d + xorl %esi,%eax roll $5,%ecx - leal 1518500249(%rbp,%r11,1),%r11d andl %r13d,%eax - movl %edx,32(%rsp) + leal 1518500249(%rbp,%r11,1),%r11d addl %ecx,%r11d xorl %edi,%eax roll $30,%r13d addl %eax,%r11d - movl %r13d,%eax - movl 36(%r9),%ebp + movl 36(%r9),%edx + movl %esi,%eax + movl %r14d,32(%rsp) movl %r11d,%ecx - xorl %esi,%eax - bswapl %ebp + bswapl %edx + xorl %r13d,%eax roll $5,%ecx - leal 1518500249(%rdx,%rdi,1),%edi andl %r12d,%eax - movl %ebp,36(%rsp) + leal 1518500249(%r14,%rdi,1),%edi addl %ecx,%edi xorl %esi,%eax roll $30,%r12d addl %eax,%edi - movl %r12d,%eax - movl 40(%r9),%edx + movl 40(%r9),%ebp + movl %r13d,%eax + movl %edx,36(%rsp) movl %edi,%ecx - xorl %r13d,%eax - bswapl %edx + bswapl %ebp + xorl %r12d,%eax roll $5,%ecx - leal 1518500249(%rbp,%rsi,1),%esi andl %r11d,%eax - movl %edx,40(%rsp) + leal 1518500249(%rdx,%rsi,1),%esi addl %ecx,%esi xorl %r13d,%eax roll $30,%r11d addl %eax,%esi - movl %r11d,%eax - movl 44(%r9),%ebp + movl 44(%r9),%r14d + movl %r12d,%eax + movl %ebp,40(%rsp) movl %esi,%ecx - xorl %r12d,%eax - bswapl %ebp + bswapl %r14d + xorl %r11d,%eax roll $5,%ecx - leal 1518500249(%rdx,%r13,1),%r13d andl %edi,%eax - movl %ebp,44(%rsp) + leal 1518500249(%rbp,%r13,1),%r13d addl %ecx,%r13d xorl %r12d,%eax roll $30,%edi addl %eax,%r13d - movl %edi,%eax movl 48(%r9),%edx + movl %r11d,%eax + movl %r14d,44(%rsp) movl %r13d,%ecx - xorl %r11d,%eax bswapl %edx + xorl %edi,%eax roll $5,%ecx - leal 1518500249(%rbp,%r12,1),%r12d andl %esi,%eax - movl %edx,48(%rsp) + leal 1518500249(%r14,%r12,1),%r12d addl %ecx,%r12d xorl %r11d,%eax roll $30,%esi addl %eax,%r12d - movl %esi,%eax movl 52(%r9),%ebp + movl %edi,%eax + movl %edx,48(%rsp) movl %r12d,%ecx - xorl %edi,%eax bswapl %ebp + xorl %esi,%eax roll $5,%ecx - leal 1518500249(%rdx,%r11,1),%r11d andl %r13d,%eax - movl %ebp,52(%rsp) + leal 1518500249(%rdx,%r11,1),%r11d addl %ecx,%r11d xorl %edi,%eax roll $30,%r13d addl %eax,%r11d - movl %r13d,%eax - movl 56(%r9),%edx + movl 56(%r9),%r14d + movl %esi,%eax + movl %ebp,52(%rsp) movl %r11d,%ecx - xorl %esi,%eax - bswapl %edx + bswapl %r14d + xorl %r13d,%eax roll $5,%ecx - leal 1518500249(%rbp,%rdi,1),%edi andl %r12d,%eax - movl %edx,56(%rsp) + leal 1518500249(%rbp,%rdi,1),%edi addl %ecx,%edi xorl %esi,%eax roll $30,%r12d addl %eax,%edi - movl %r12d,%eax - movl 60(%r9),%ebp + movl 60(%r9),%edx + movl %r13d,%eax + movl %r14d,56(%rsp) movl %edi,%ecx - xorl %r13d,%eax - bswapl %ebp + bswapl %edx + xorl %r12d,%eax roll $5,%ecx - leal 1518500249(%rdx,%rsi,1),%esi andl %r11d,%eax - movl %ebp,60(%rsp) + leal 1518500249(%r14,%rsi,1),%esi addl %ecx,%esi xorl %r13d,%eax roll $30,%r11d addl %eax,%esi - movl 0(%rsp),%edx - movl %r11d,%eax + xorl 0(%rsp),%ebp + movl %r12d,%eax + movl %edx,60(%rsp) movl %esi,%ecx - xorl 8(%rsp),%edx - xorl %r12d,%eax + xorl 8(%rsp),%ebp + xorl %r11d,%eax roll $5,%ecx - xorl 32(%rsp),%edx + xorl 32(%rsp),%ebp andl %edi,%eax - leal 1518500249(%rbp,%r13,1),%r13d - xorl 52(%rsp),%edx + leal 1518500249(%rdx,%r13,1),%r13d + roll $30,%edi xorl %r12d,%eax - roll $1,%edx addl %ecx,%r13d - roll $30,%edi - movl %edx,0(%rsp) + roll $1,%ebp addl %eax,%r13d - movl 4(%rsp),%ebp - movl %edi,%eax + xorl 4(%rsp),%r14d + movl %r11d,%eax + movl %ebp,0(%rsp) movl %r13d,%ecx - xorl 12(%rsp),%ebp - xorl %r11d,%eax + xorl 12(%rsp),%r14d + xorl %edi,%eax roll $5,%ecx - xorl 36(%rsp),%ebp + xorl 36(%rsp),%r14d andl %esi,%eax - leal 1518500249(%rdx,%r12,1),%r12d - xorl 56(%rsp),%ebp + leal 1518500249(%rbp,%r12,1),%r12d + roll $30,%esi xorl %r11d,%eax - roll $1,%ebp addl %ecx,%r12d - roll $30,%esi - movl %ebp,4(%rsp) + roll $1,%r14d addl %eax,%r12d - movl 8(%rsp),%edx - movl %esi,%eax + xorl 8(%rsp),%edx + movl %edi,%eax + movl %r14d,4(%rsp) movl %r12d,%ecx xorl 16(%rsp),%edx - xorl %edi,%eax + xorl %esi,%eax roll $5,%ecx xorl 40(%rsp),%edx andl %r13d,%eax - leal 1518500249(%rbp,%r11,1),%r11d - xorl 60(%rsp),%edx + leal 1518500249(%r14,%r11,1),%r11d + roll $30,%r13d xorl %edi,%eax - roll $1,%edx addl %ecx,%r11d - roll $30,%r13d - movl %edx,8(%rsp) + roll $1,%edx addl %eax,%r11d - movl 12(%rsp),%ebp - movl %r13d,%eax + xorl 12(%rsp),%ebp + movl %esi,%eax + movl %edx,8(%rsp) movl %r11d,%ecx xorl 20(%rsp),%ebp - xorl %esi,%eax + xorl %r13d,%eax roll $5,%ecx xorl 44(%rsp),%ebp andl %r12d,%eax leal 1518500249(%rdx,%rdi,1),%edi - xorl 0(%rsp),%ebp + roll $30,%r12d xorl %esi,%eax - roll $1,%ebp addl %ecx,%edi - roll $30,%r12d - movl %ebp,12(%rsp) + roll $1,%ebp addl %eax,%edi - movl 16(%rsp),%edx - movl %r12d,%eax + xorl 16(%rsp),%r14d + movl %r13d,%eax + movl %ebp,12(%rsp) movl %edi,%ecx - xorl 24(%rsp),%edx - xorl %r13d,%eax + xorl 24(%rsp),%r14d + xorl %r12d,%eax roll $5,%ecx - xorl 48(%rsp),%edx + xorl 48(%rsp),%r14d andl %r11d,%eax leal 1518500249(%rbp,%rsi,1),%esi - xorl 4(%rsp),%edx + roll $30,%r11d xorl %r13d,%eax - roll $1,%edx addl %ecx,%esi - roll $30,%r11d - movl %edx,16(%rsp) + roll $1,%r14d addl %eax,%esi - movl 20(%rsp),%ebp - movl %r11d,%eax + xorl 20(%rsp),%edx + movl %edi,%eax + movl %r14d,16(%rsp) movl %esi,%ecx - xorl 28(%rsp),%ebp - xorl %edi,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r13,1),%r13d - xorl 52(%rsp),%ebp + xorl 28(%rsp),%edx xorl %r12d,%eax + roll $5,%ecx + xorl 52(%rsp),%edx + leal 1859775393(%r14,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 8(%rsp),%ebp roll $30,%edi addl %eax,%r13d - roll $1,%ebp - movl %ebp,20(%rsp) - movl 24(%rsp),%edx - movl %edi,%eax + roll $1,%edx + xorl 24(%rsp),%ebp + movl %esi,%eax + movl %edx,20(%rsp) movl %r13d,%ecx - xorl 32(%rsp),%edx - xorl %esi,%eax - roll $5,%ecx - leal 1859775393(%rbp,%r12,1),%r12d - xorl 56(%rsp),%edx + xorl 32(%rsp),%ebp xorl %r11d,%eax + roll $5,%ecx + xorl 56(%rsp),%ebp + leal 1859775393(%rdx,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 12(%rsp),%edx roll $30,%esi addl %eax,%r12d - roll $1,%edx - movl %edx,24(%rsp) - movl 28(%rsp),%ebp - movl %esi,%eax + roll $1,%ebp + xorl 28(%rsp),%r14d + movl %r13d,%eax + movl %ebp,24(%rsp) movl %r12d,%ecx - xorl 36(%rsp),%ebp - xorl %r13d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r11,1),%r11d - xorl 60(%rsp),%ebp + xorl 36(%rsp),%r14d xorl %edi,%eax + roll $5,%ecx + xorl 60(%rsp),%r14d + leal 1859775393(%rbp,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 16(%rsp),%ebp roll $30,%r13d addl %eax,%r11d - roll $1,%ebp - movl %ebp,28(%rsp) - movl 32(%rsp),%edx - movl %r13d,%eax + roll $1,%r14d + xorl 32(%rsp),%edx + movl %r12d,%eax + movl %r14d,28(%rsp) movl %r11d,%ecx xorl 40(%rsp),%edx - xorl %r12d,%eax + xorl %esi,%eax roll $5,%ecx - leal 1859775393(%rbp,%rdi,1),%edi xorl 0(%rsp),%edx - xorl %esi,%eax + leal 1859775393(%r14,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 20(%rsp),%edx roll $30,%r12d addl %eax,%edi roll $1,%edx + xorl 36(%rsp),%ebp + movl %r11d,%eax movl %edx,32(%rsp) - movl 36(%rsp),%ebp - movl %r12d,%eax movl %edi,%ecx xorl 44(%rsp),%ebp - xorl %r11d,%eax + xorl %r13d,%eax roll $5,%ecx - leal 1859775393(%rdx,%rsi,1),%esi xorl 4(%rsp),%ebp - xorl %r13d,%eax + leal 1859775393(%rdx,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 24(%rsp),%ebp roll $30,%r11d addl %eax,%esi roll $1,%ebp + xorl 40(%rsp),%r14d + movl %edi,%eax movl %ebp,36(%rsp) - movl 40(%rsp),%edx - movl %r11d,%eax movl %esi,%ecx - xorl 48(%rsp),%edx - xorl %edi,%eax + xorl 48(%rsp),%r14d + xorl %r12d,%eax roll $5,%ecx + xorl 8(%rsp),%r14d leal 1859775393(%rbp,%r13,1),%r13d - xorl 8(%rsp),%edx - xorl %r12d,%eax + xorl %r11d,%eax addl %ecx,%r13d - xorl 28(%rsp),%edx roll $30,%edi addl %eax,%r13d - roll $1,%edx - movl %edx,40(%rsp) - movl 44(%rsp),%ebp - movl %edi,%eax + roll $1,%r14d + xorl 44(%rsp),%edx + movl %esi,%eax + movl %r14d,40(%rsp) movl %r13d,%ecx - xorl 52(%rsp),%ebp - xorl %esi,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r12,1),%r12d - xorl 12(%rsp),%ebp + xorl 52(%rsp),%edx xorl %r11d,%eax + roll $5,%ecx + xorl 12(%rsp),%edx + leal 1859775393(%r14,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 32(%rsp),%ebp roll $30,%esi addl %eax,%r12d - roll $1,%ebp - movl %ebp,44(%rsp) - movl 48(%rsp),%edx - movl %esi,%eax + roll $1,%edx + xorl 48(%rsp),%ebp + movl %r13d,%eax + movl %edx,44(%rsp) movl %r12d,%ecx - xorl 56(%rsp),%edx - xorl %r13d,%eax - roll $5,%ecx - leal 1859775393(%rbp,%r11,1),%r11d - xorl 16(%rsp),%edx + xorl 56(%rsp),%ebp xorl %edi,%eax + roll $5,%ecx + xorl 16(%rsp),%ebp + leal 1859775393(%rdx,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 36(%rsp),%edx roll $30,%r13d addl %eax,%r11d - roll $1,%edx - movl %edx,48(%rsp) - movl 52(%rsp),%ebp - movl %r13d,%eax + roll $1,%ebp + xorl 52(%rsp),%r14d + movl %r12d,%eax + movl %ebp,48(%rsp) movl %r11d,%ecx - xorl 60(%rsp),%ebp - xorl %r12d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%rdi,1),%edi - xorl 20(%rsp),%ebp + xorl 60(%rsp),%r14d xorl %esi,%eax + roll $5,%ecx + xorl 20(%rsp),%r14d + leal 1859775393(%rbp,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 40(%rsp),%ebp roll $30,%r12d addl %eax,%edi - roll $1,%ebp - movl %ebp,52(%rsp) - movl 56(%rsp),%edx - movl %r12d,%eax + roll $1,%r14d + xorl 56(%rsp),%edx + movl %r11d,%eax + movl %r14d,52(%rsp) movl %edi,%ecx xorl 0(%rsp),%edx - xorl %r11d,%eax + xorl %r13d,%eax roll $5,%ecx - leal 1859775393(%rbp,%rsi,1),%esi xorl 24(%rsp),%edx - xorl %r13d,%eax + leal 1859775393(%r14,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 44(%rsp),%edx roll $30,%r11d addl %eax,%esi roll $1,%edx + xorl 60(%rsp),%ebp + movl %edi,%eax movl %edx,56(%rsp) - movl 60(%rsp),%ebp - movl %r11d,%eax movl %esi,%ecx xorl 4(%rsp),%ebp - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal 1859775393(%rdx,%r13,1),%r13d xorl 28(%rsp),%ebp - xorl %r12d,%eax + leal 1859775393(%rdx,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 48(%rsp),%ebp roll $30,%edi addl %eax,%r13d roll $1,%ebp + xorl 0(%rsp),%r14d + movl %esi,%eax movl %ebp,60(%rsp) - movl 0(%rsp),%edx - movl %edi,%eax movl %r13d,%ecx - xorl 8(%rsp),%edx - xorl %esi,%eax + xorl 8(%rsp),%r14d + xorl %r11d,%eax roll $5,%ecx + xorl 32(%rsp),%r14d leal 1859775393(%rbp,%r12,1),%r12d - xorl 32(%rsp),%edx - xorl %r11d,%eax + xorl %edi,%eax addl %ecx,%r12d - xorl 52(%rsp),%edx roll $30,%esi addl %eax,%r12d - roll $1,%edx - movl %edx,0(%rsp) - movl 4(%rsp),%ebp - movl %esi,%eax + roll $1,%r14d + xorl 4(%rsp),%edx + movl %r13d,%eax + movl %r14d,0(%rsp) movl %r12d,%ecx - xorl 12(%rsp),%ebp - xorl %r13d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r11,1),%r11d - xorl 36(%rsp),%ebp + xorl 12(%rsp),%edx xorl %edi,%eax + roll $5,%ecx + xorl 36(%rsp),%edx + leal 1859775393(%r14,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 56(%rsp),%ebp roll $30,%r13d addl %eax,%r11d - roll $1,%ebp - movl %ebp,4(%rsp) - movl 8(%rsp),%edx - movl %r13d,%eax + roll $1,%edx + xorl 8(%rsp),%ebp + movl %r12d,%eax + movl %edx,4(%rsp) movl %r11d,%ecx - xorl 16(%rsp),%edx - xorl %r12d,%eax - roll $5,%ecx - leal 1859775393(%rbp,%rdi,1),%edi - xorl 40(%rsp),%edx + xorl 16(%rsp),%ebp xorl %esi,%eax + roll $5,%ecx + xorl 40(%rsp),%ebp + leal 1859775393(%rdx,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 60(%rsp),%edx roll $30,%r12d addl %eax,%edi - roll $1,%edx - movl %edx,8(%rsp) - movl 12(%rsp),%ebp - movl %r12d,%eax + roll $1,%ebp + xorl 12(%rsp),%r14d + movl %r11d,%eax + movl %ebp,8(%rsp) movl %edi,%ecx - xorl 20(%rsp),%ebp - xorl %r11d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%rsi,1),%esi - xorl 44(%rsp),%ebp + xorl 20(%rsp),%r14d xorl %r13d,%eax + roll $5,%ecx + xorl 44(%rsp),%r14d + leal 1859775393(%rbp,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 0(%rsp),%ebp roll $30,%r11d addl %eax,%esi - roll $1,%ebp - movl %ebp,12(%rsp) - movl 16(%rsp),%edx - movl %r11d,%eax + roll $1,%r14d + xorl 16(%rsp),%edx + movl %edi,%eax + movl %r14d,12(%rsp) movl %esi,%ecx xorl 24(%rsp),%edx - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal 1859775393(%rbp,%r13,1),%r13d xorl 48(%rsp),%edx - xorl %r12d,%eax + leal 1859775393(%r14,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 4(%rsp),%edx roll $30,%edi addl %eax,%r13d roll $1,%edx + xorl 20(%rsp),%ebp + movl %esi,%eax movl %edx,16(%rsp) - movl 20(%rsp),%ebp - movl %edi,%eax movl %r13d,%ecx xorl 28(%rsp),%ebp - xorl %esi,%eax + xorl %r11d,%eax roll $5,%ecx - leal 1859775393(%rdx,%r12,1),%r12d xorl 52(%rsp),%ebp - xorl %r11d,%eax + leal 1859775393(%rdx,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 8(%rsp),%ebp roll $30,%esi addl %eax,%r12d roll $1,%ebp + xorl 24(%rsp),%r14d + movl %r13d,%eax movl %ebp,20(%rsp) - movl 24(%rsp),%edx - movl %esi,%eax movl %r12d,%ecx - xorl 32(%rsp),%edx - xorl %r13d,%eax + xorl 32(%rsp),%r14d + xorl %edi,%eax roll $5,%ecx + xorl 56(%rsp),%r14d leal 1859775393(%rbp,%r11,1),%r11d - xorl 56(%rsp),%edx - xorl %edi,%eax + xorl %esi,%eax addl %ecx,%r11d - xorl 12(%rsp),%edx roll $30,%r13d addl %eax,%r11d - roll $1,%edx - movl %edx,24(%rsp) - movl 28(%rsp),%ebp - movl %r13d,%eax + roll $1,%r14d + xorl 28(%rsp),%edx + movl %r12d,%eax + movl %r14d,24(%rsp) movl %r11d,%ecx - xorl 36(%rsp),%ebp - xorl %r12d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%rdi,1),%edi - xorl 60(%rsp),%ebp + xorl 36(%rsp),%edx xorl %esi,%eax + roll $5,%ecx + xorl 60(%rsp),%edx + leal 1859775393(%r14,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 16(%rsp),%ebp roll $30,%r12d addl %eax,%edi - roll $1,%ebp - movl %ebp,28(%rsp) - movl 32(%rsp),%edx - movl %r12d,%eax + roll $1,%edx + xorl 32(%rsp),%ebp + movl %r11d,%eax + movl %edx,28(%rsp) movl %edi,%ecx - xorl 40(%rsp),%edx - xorl %r11d,%eax - roll $5,%ecx - leal 1859775393(%rbp,%rsi,1),%esi - xorl 0(%rsp),%edx + xorl 40(%rsp),%ebp xorl %r13d,%eax + roll $5,%ecx + xorl 0(%rsp),%ebp + leal 1859775393(%rdx,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 20(%rsp),%edx roll $30,%r11d addl %eax,%esi - roll $1,%edx - movl %edx,32(%rsp) - movl 36(%rsp),%ebp - movl %r11d,%eax - movl %r11d,%ebx - xorl 44(%rsp),%ebp - andl %r12d,%eax + roll $1,%ebp + xorl 36(%rsp),%r14d + movl %r12d,%eax + movl %ebp,32(%rsp) + movl %r12d,%ebx + xorl 44(%rsp),%r14d + andl %r11d,%eax movl %esi,%ecx - xorl 4(%rsp),%ebp - xorl %r12d,%ebx - leal -1894007588(%rdx,%r13,1),%r13d + xorl 4(%rsp),%r14d + leal -1894007588(%rbp,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 24(%rsp),%ebp addl %eax,%r13d + roll $1,%r14d andl %edi,%ebx - roll $1,%ebp - addl %ebx,%r13d - roll $30,%edi - movl %ebp,36(%rsp) addl %ecx,%r13d - movl 40(%rsp),%edx - movl %edi,%eax - movl %edi,%ebx + roll $30,%edi + addl %ebx,%r13d + xorl 40(%rsp),%edx + movl %r11d,%eax + movl %r14d,36(%rsp) + movl %r11d,%ebx xorl 48(%rsp),%edx - andl %r11d,%eax + andl %edi,%eax movl %r13d,%ecx xorl 8(%rsp),%edx - xorl %r11d,%ebx - leal -1894007588(%rbp,%r12,1),%r12d + leal -1894007588(%r14,%r12,1),%r12d + xorl %edi,%ebx roll $5,%ecx - xorl 28(%rsp),%edx addl %eax,%r12d - andl %esi,%ebx roll $1,%edx - addl %ebx,%r12d + andl %esi,%ebx + addl %ecx,%r12d roll $30,%esi + addl %ebx,%r12d + xorl 44(%rsp),%ebp + movl %edi,%eax movl %edx,40(%rsp) - addl %ecx,%r12d - movl 44(%rsp),%ebp - movl %esi,%eax - movl %esi,%ebx + movl %edi,%ebx xorl 52(%rsp),%ebp - andl %edi,%eax + andl %esi,%eax movl %r12d,%ecx xorl 12(%rsp),%ebp - xorl %edi,%ebx leal -1894007588(%rdx,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 32(%rsp),%ebp addl %eax,%r11d - andl %r13d,%ebx roll $1,%ebp - addl %ebx,%r11d + andl %r13d,%ebx + addl %ecx,%r11d roll $30,%r13d + addl %ebx,%r11d + xorl 48(%rsp),%r14d + movl %esi,%eax movl %ebp,44(%rsp) - addl %ecx,%r11d - movl 48(%rsp),%edx - movl %r13d,%eax - movl %r13d,%ebx - xorl 56(%rsp),%edx - andl %esi,%eax + movl %esi,%ebx + xorl 56(%rsp),%r14d + andl %r13d,%eax movl %r11d,%ecx - xorl 16(%rsp),%edx - xorl %esi,%ebx + xorl 16(%rsp),%r14d leal -1894007588(%rbp,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 36(%rsp),%edx addl %eax,%edi + roll $1,%r14d andl %r12d,%ebx - roll $1,%edx - addl %ebx,%edi - roll $30,%r12d - movl %edx,48(%rsp) addl %ecx,%edi - movl 52(%rsp),%ebp - movl %r12d,%eax - movl %r12d,%ebx - xorl 60(%rsp),%ebp - andl %r13d,%eax + roll $30,%r12d + addl %ebx,%edi + xorl 52(%rsp),%edx + movl %r13d,%eax + movl %r14d,48(%rsp) + movl %r13d,%ebx + xorl 60(%rsp),%edx + andl %r12d,%eax movl %edi,%ecx - xorl 20(%rsp),%ebp - xorl %r13d,%ebx - leal -1894007588(%rdx,%rsi,1),%esi + xorl 20(%rsp),%edx + leal -1894007588(%r14,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 40(%rsp),%ebp addl %eax,%esi + roll $1,%edx andl %r11d,%ebx - roll $1,%ebp - addl %ebx,%esi - roll $30,%r11d - movl %ebp,52(%rsp) addl %ecx,%esi - movl 56(%rsp),%edx - movl %r11d,%eax - movl %r11d,%ebx - xorl 0(%rsp),%edx - andl %r12d,%eax + roll $30,%r11d + addl %ebx,%esi + xorl 56(%rsp),%ebp + movl %r12d,%eax + movl %edx,52(%rsp) + movl %r12d,%ebx + xorl 0(%rsp),%ebp + andl %r11d,%eax movl %esi,%ecx - xorl 24(%rsp),%edx - xorl %r12d,%ebx - leal -1894007588(%rbp,%r13,1),%r13d + xorl 24(%rsp),%ebp + leal -1894007588(%rdx,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 44(%rsp),%edx addl %eax,%r13d + roll $1,%ebp andl %edi,%ebx - roll $1,%edx - addl %ebx,%r13d - roll $30,%edi - movl %edx,56(%rsp) addl %ecx,%r13d - movl 60(%rsp),%ebp - movl %edi,%eax - movl %edi,%ebx - xorl 4(%rsp),%ebp - andl %r11d,%eax + roll $30,%edi + addl %ebx,%r13d + xorl 60(%rsp),%r14d + movl %r11d,%eax + movl %ebp,56(%rsp) + movl %r11d,%ebx + xorl 4(%rsp),%r14d + andl %edi,%eax movl %r13d,%ecx - xorl 28(%rsp),%ebp - xorl %r11d,%ebx - leal -1894007588(%rdx,%r12,1),%r12d + xorl 28(%rsp),%r14d + leal -1894007588(%rbp,%r12,1),%r12d + xorl %edi,%ebx roll $5,%ecx - xorl 48(%rsp),%ebp addl %eax,%r12d + roll $1,%r14d andl %esi,%ebx - roll $1,%ebp - addl %ebx,%r12d - roll $30,%esi - movl %ebp,60(%rsp) addl %ecx,%r12d - movl 0(%rsp),%edx - movl %esi,%eax - movl %esi,%ebx + roll $30,%esi + addl %ebx,%r12d + xorl 0(%rsp),%edx + movl %edi,%eax + movl %r14d,60(%rsp) + movl %edi,%ebx xorl 8(%rsp),%edx - andl %edi,%eax + andl %esi,%eax movl %r12d,%ecx xorl 32(%rsp),%edx - xorl %edi,%ebx - leal -1894007588(%rbp,%r11,1),%r11d + leal -1894007588(%r14,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 52(%rsp),%edx addl %eax,%r11d - andl %r13d,%ebx roll $1,%edx - addl %ebx,%r11d + andl %r13d,%ebx + addl %ecx,%r11d roll $30,%r13d + addl %ebx,%r11d + xorl 4(%rsp),%ebp + movl %esi,%eax movl %edx,0(%rsp) - addl %ecx,%r11d - movl 4(%rsp),%ebp - movl %r13d,%eax - movl %r13d,%ebx + movl %esi,%ebx xorl 12(%rsp),%ebp - andl %esi,%eax + andl %r13d,%eax movl %r11d,%ecx xorl 36(%rsp),%ebp - xorl %esi,%ebx leal -1894007588(%rdx,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 56(%rsp),%ebp addl %eax,%edi - andl %r12d,%ebx roll $1,%ebp - addl %ebx,%edi + andl %r12d,%ebx + addl %ecx,%edi roll $30,%r12d + addl %ebx,%edi + xorl 8(%rsp),%r14d + movl %r13d,%eax movl %ebp,4(%rsp) - addl %ecx,%edi - movl 8(%rsp),%edx - movl %r12d,%eax - movl %r12d,%ebx - xorl 16(%rsp),%edx - andl %r13d,%eax + movl %r13d,%ebx + xorl 16(%rsp),%r14d + andl %r12d,%eax movl %edi,%ecx - xorl 40(%rsp),%edx - xorl %r13d,%ebx + xorl 40(%rsp),%r14d leal -1894007588(%rbp,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 60(%rsp),%edx addl %eax,%esi + roll $1,%r14d andl %r11d,%ebx - roll $1,%edx - addl %ebx,%esi - roll $30,%r11d - movl %edx,8(%rsp) addl %ecx,%esi - movl 12(%rsp),%ebp - movl %r11d,%eax - movl %r11d,%ebx - xorl 20(%rsp),%ebp - andl %r12d,%eax + roll $30,%r11d + addl %ebx,%esi + xorl 12(%rsp),%edx + movl %r12d,%eax + movl %r14d,8(%rsp) + movl %r12d,%ebx + xorl 20(%rsp),%edx + andl %r11d,%eax movl %esi,%ecx - xorl 44(%rsp),%ebp - xorl %r12d,%ebx - leal -1894007588(%rdx,%r13,1),%r13d + xorl 44(%rsp),%edx + leal -1894007588(%r14,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 0(%rsp),%ebp addl %eax,%r13d + roll $1,%edx andl %edi,%ebx - roll $1,%ebp - addl %ebx,%r13d - roll $30,%edi - movl %ebp,12(%rsp) addl %ecx,%r13d - movl 16(%rsp),%edx - movl %edi,%eax - movl %edi,%ebx - xorl 24(%rsp),%edx - andl %r11d,%eax + roll $30,%edi + addl %ebx,%r13d + xorl 16(%rsp),%ebp + movl %r11d,%eax + movl %edx,12(%rsp) + movl %r11d,%ebx + xorl 24(%rsp),%ebp + andl %edi,%eax movl %r13d,%ecx - xorl 48(%rsp),%edx - xorl %r11d,%ebx - leal -1894007588(%rbp,%r12,1),%r12d + xorl 48(%rsp),%ebp + leal -1894007588(%rdx,%r12,1),%r12d + xorl %edi,%ebx roll $5,%ecx - xorl 4(%rsp),%edx addl %eax,%r12d + roll $1,%ebp andl %esi,%ebx - roll $1,%edx - addl %ebx,%r12d - roll $30,%esi - movl %edx,16(%rsp) addl %ecx,%r12d - movl 20(%rsp),%ebp - movl %esi,%eax - movl %esi,%ebx - xorl 28(%rsp),%ebp - andl %edi,%eax + roll $30,%esi + addl %ebx,%r12d + xorl 20(%rsp),%r14d + movl %edi,%eax + movl %ebp,16(%rsp) + movl %edi,%ebx + xorl 28(%rsp),%r14d + andl %esi,%eax movl %r12d,%ecx - xorl 52(%rsp),%ebp - xorl %edi,%ebx - leal -1894007588(%rdx,%r11,1),%r11d + xorl 52(%rsp),%r14d + leal -1894007588(%rbp,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 8(%rsp),%ebp addl %eax,%r11d + roll $1,%r14d andl %r13d,%ebx - roll $1,%ebp - addl %ebx,%r11d - roll $30,%r13d - movl %ebp,20(%rsp) addl %ecx,%r11d - movl 24(%rsp),%edx - movl %r13d,%eax - movl %r13d,%ebx + roll $30,%r13d + addl %ebx,%r11d + xorl 24(%rsp),%edx + movl %esi,%eax + movl %r14d,20(%rsp) + movl %esi,%ebx xorl 32(%rsp),%edx - andl %esi,%eax + andl %r13d,%eax movl %r11d,%ecx xorl 56(%rsp),%edx - xorl %esi,%ebx - leal -1894007588(%rbp,%rdi,1),%edi + leal -1894007588(%r14,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 12(%rsp),%edx addl %eax,%edi - andl %r12d,%ebx roll $1,%edx - addl %ebx,%edi + andl %r12d,%ebx + addl %ecx,%edi roll $30,%r12d + addl %ebx,%edi + xorl 28(%rsp),%ebp + movl %r13d,%eax movl %edx,24(%rsp) - addl %ecx,%edi - movl 28(%rsp),%ebp - movl %r12d,%eax - movl %r12d,%ebx + movl %r13d,%ebx xorl 36(%rsp),%ebp - andl %r13d,%eax + andl %r12d,%eax movl %edi,%ecx xorl 60(%rsp),%ebp - xorl %r13d,%ebx leal -1894007588(%rdx,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 16(%rsp),%ebp addl %eax,%esi - andl %r11d,%ebx roll $1,%ebp - addl %ebx,%esi + andl %r11d,%ebx + addl %ecx,%esi roll $30,%r11d + addl %ebx,%esi + xorl 32(%rsp),%r14d + movl %r12d,%eax movl %ebp,28(%rsp) - addl %ecx,%esi - movl 32(%rsp),%edx - movl %r11d,%eax - movl %r11d,%ebx - xorl 40(%rsp),%edx - andl %r12d,%eax + movl %r12d,%ebx + xorl 40(%rsp),%r14d + andl %r11d,%eax movl %esi,%ecx - xorl 0(%rsp),%edx - xorl %r12d,%ebx + xorl 0(%rsp),%r14d leal -1894007588(%rbp,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 20(%rsp),%edx addl %eax,%r13d + roll $1,%r14d andl %edi,%ebx - roll $1,%edx - addl %ebx,%r13d - roll $30,%edi - movl %edx,32(%rsp) addl %ecx,%r13d - movl 36(%rsp),%ebp - movl %edi,%eax - movl %edi,%ebx - xorl 44(%rsp),%ebp - andl %r11d,%eax + roll $30,%edi + addl %ebx,%r13d + xorl 36(%rsp),%edx + movl %r11d,%eax + movl %r14d,32(%rsp) + movl %r11d,%ebx + xorl 44(%rsp),%edx + andl %edi,%eax movl %r13d,%ecx - xorl 4(%rsp),%ebp - xorl %r11d,%ebx - leal -1894007588(%rdx,%r12,1),%r12d + xorl 4(%rsp),%edx + leal -1894007588(%r14,%r12,1),%r12d + xorl %edi,%ebx roll $5,%ecx - xorl 24(%rsp),%ebp addl %eax,%r12d + roll $1,%edx andl %esi,%ebx - roll $1,%ebp - addl %ebx,%r12d - roll $30,%esi - movl %ebp,36(%rsp) addl %ecx,%r12d - movl 40(%rsp),%edx - movl %esi,%eax - movl %esi,%ebx - xorl 48(%rsp),%edx - andl %edi,%eax + roll $30,%esi + addl %ebx,%r12d + xorl 40(%rsp),%ebp + movl %edi,%eax + movl %edx,36(%rsp) + movl %edi,%ebx + xorl 48(%rsp),%ebp + andl %esi,%eax movl %r12d,%ecx - xorl 8(%rsp),%edx - xorl %edi,%ebx - leal -1894007588(%rbp,%r11,1),%r11d + xorl 8(%rsp),%ebp + leal -1894007588(%rdx,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 28(%rsp),%edx addl %eax,%r11d + roll $1,%ebp andl %r13d,%ebx - roll $1,%edx - addl %ebx,%r11d - roll $30,%r13d - movl %edx,40(%rsp) addl %ecx,%r11d - movl 44(%rsp),%ebp - movl %r13d,%eax - movl %r13d,%ebx - xorl 52(%rsp),%ebp - andl %esi,%eax + roll $30,%r13d + addl %ebx,%r11d + xorl 44(%rsp),%r14d + movl %esi,%eax + movl %ebp,40(%rsp) + movl %esi,%ebx + xorl 52(%rsp),%r14d + andl %r13d,%eax movl %r11d,%ecx - xorl 12(%rsp),%ebp - xorl %esi,%ebx - leal -1894007588(%rdx,%rdi,1),%edi + xorl 12(%rsp),%r14d + leal -1894007588(%rbp,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 32(%rsp),%ebp addl %eax,%edi + roll $1,%r14d andl %r12d,%ebx - roll $1,%ebp - addl %ebx,%edi - roll $30,%r12d - movl %ebp,44(%rsp) addl %ecx,%edi - movl 48(%rsp),%edx - movl %r12d,%eax - movl %r12d,%ebx + roll $30,%r12d + addl %ebx,%edi + xorl 48(%rsp),%edx + movl %r13d,%eax + movl %r14d,44(%rsp) + movl %r13d,%ebx xorl 56(%rsp),%edx - andl %r13d,%eax + andl %r12d,%eax movl %edi,%ecx xorl 16(%rsp),%edx - xorl %r13d,%ebx - leal -1894007588(%rbp,%rsi,1),%esi + leal -1894007588(%r14,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 36(%rsp),%edx addl %eax,%esi - andl %r11d,%ebx roll $1,%edx - addl %ebx,%esi + andl %r11d,%ebx + addl %ecx,%esi roll $30,%r11d + addl %ebx,%esi + xorl 52(%rsp),%ebp + movl %edi,%eax movl %edx,48(%rsp) - addl %ecx,%esi - movl 52(%rsp),%ebp - movl %r11d,%eax movl %esi,%ecx xorl 60(%rsp),%ebp - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal -899497514(%rdx,%r13,1),%r13d xorl 20(%rsp),%ebp - xorl %r12d,%eax + leal -899497514(%rdx,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 40(%rsp),%ebp roll $30,%edi addl %eax,%r13d roll $1,%ebp + xorl 56(%rsp),%r14d + movl %esi,%eax movl %ebp,52(%rsp) - movl 56(%rsp),%edx - movl %edi,%eax movl %r13d,%ecx - xorl 0(%rsp),%edx - xorl %esi,%eax + xorl 0(%rsp),%r14d + xorl %r11d,%eax roll $5,%ecx + xorl 24(%rsp),%r14d leal -899497514(%rbp,%r12,1),%r12d - xorl 24(%rsp),%edx - xorl %r11d,%eax + xorl %edi,%eax addl %ecx,%r12d - xorl 44(%rsp),%edx roll $30,%esi addl %eax,%r12d - roll $1,%edx - movl %edx,56(%rsp) - movl 60(%rsp),%ebp - movl %esi,%eax + roll $1,%r14d + xorl 60(%rsp),%edx + movl %r13d,%eax + movl %r14d,56(%rsp) movl %r12d,%ecx - xorl 4(%rsp),%ebp - xorl %r13d,%eax - roll $5,%ecx - leal -899497514(%rdx,%r11,1),%r11d - xorl 28(%rsp),%ebp + xorl 4(%rsp),%edx xorl %edi,%eax + roll $5,%ecx + xorl 28(%rsp),%edx + leal -899497514(%r14,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 48(%rsp),%ebp roll $30,%r13d addl %eax,%r11d - roll $1,%ebp - movl %ebp,60(%rsp) - movl 0(%rsp),%edx - movl %r13d,%eax + roll $1,%edx + xorl 0(%rsp),%ebp + movl %r12d,%eax + movl %edx,60(%rsp) movl %r11d,%ecx - xorl 8(%rsp),%edx - xorl %r12d,%eax - roll $5,%ecx - leal -899497514(%rbp,%rdi,1),%edi - xorl 32(%rsp),%edx + xorl 8(%rsp),%ebp xorl %esi,%eax + roll $5,%ecx + xorl 32(%rsp),%ebp + leal -899497514(%rdx,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 52(%rsp),%edx roll $30,%r12d addl %eax,%edi - roll $1,%edx - movl %edx,0(%rsp) - movl 4(%rsp),%ebp - movl %r12d,%eax + roll $1,%ebp + xorl 4(%rsp),%r14d + movl %r11d,%eax + movl %ebp,0(%rsp) movl %edi,%ecx - xorl 12(%rsp),%ebp - xorl %r11d,%eax - roll $5,%ecx - leal -899497514(%rdx,%rsi,1),%esi - xorl 36(%rsp),%ebp + xorl 12(%rsp),%r14d xorl %r13d,%eax + roll $5,%ecx + xorl 36(%rsp),%r14d + leal -899497514(%rbp,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 56(%rsp),%ebp roll $30,%r11d addl %eax,%esi - roll $1,%ebp - movl %ebp,4(%rsp) - movl 8(%rsp),%edx - movl %r11d,%eax + roll $1,%r14d + xorl 8(%rsp),%edx + movl %edi,%eax + movl %r14d,4(%rsp) movl %esi,%ecx xorl 16(%rsp),%edx - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal -899497514(%rbp,%r13,1),%r13d xorl 40(%rsp),%edx - xorl %r12d,%eax + leal -899497514(%r14,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 60(%rsp),%edx roll $30,%edi addl %eax,%r13d roll $1,%edx + xorl 12(%rsp),%ebp + movl %esi,%eax movl %edx,8(%rsp) - movl 12(%rsp),%ebp - movl %edi,%eax movl %r13d,%ecx xorl 20(%rsp),%ebp - xorl %esi,%eax + xorl %r11d,%eax roll $5,%ecx - leal -899497514(%rdx,%r12,1),%r12d xorl 44(%rsp),%ebp - xorl %r11d,%eax + leal -899497514(%rdx,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 0(%rsp),%ebp roll $30,%esi addl %eax,%r12d roll $1,%ebp + xorl 16(%rsp),%r14d + movl %r13d,%eax movl %ebp,12(%rsp) - movl 16(%rsp),%edx - movl %esi,%eax movl %r12d,%ecx - xorl 24(%rsp),%edx - xorl %r13d,%eax + xorl 24(%rsp),%r14d + xorl %edi,%eax roll $5,%ecx + xorl 48(%rsp),%r14d leal -899497514(%rbp,%r11,1),%r11d - xorl 48(%rsp),%edx - xorl %edi,%eax + xorl %esi,%eax addl %ecx,%r11d - xorl 4(%rsp),%edx roll $30,%r13d addl %eax,%r11d - roll $1,%edx - movl %edx,16(%rsp) - movl 20(%rsp),%ebp - movl %r13d,%eax + roll $1,%r14d + xorl 20(%rsp),%edx + movl %r12d,%eax + movl %r14d,16(%rsp) movl %r11d,%ecx - xorl 28(%rsp),%ebp - xorl %r12d,%eax - roll $5,%ecx - leal -899497514(%rdx,%rdi,1),%edi - xorl 52(%rsp),%ebp + xorl 28(%rsp),%edx xorl %esi,%eax + roll $5,%ecx + xorl 52(%rsp),%edx + leal -899497514(%r14,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 8(%rsp),%ebp roll $30,%r12d addl %eax,%edi - roll $1,%ebp - movl %ebp,20(%rsp) - movl 24(%rsp),%edx - movl %r12d,%eax + roll $1,%edx + xorl 24(%rsp),%ebp + movl %r11d,%eax + movl %edx,20(%rsp) movl %edi,%ecx - xorl 32(%rsp),%edx - xorl %r11d,%eax - roll $5,%ecx - leal -899497514(%rbp,%rsi,1),%esi - xorl 56(%rsp),%edx + xorl 32(%rsp),%ebp xorl %r13d,%eax + roll $5,%ecx + xorl 56(%rsp),%ebp + leal -899497514(%rdx,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 12(%rsp),%edx roll $30,%r11d addl %eax,%esi - roll $1,%edx - movl %edx,24(%rsp) - movl 28(%rsp),%ebp - movl %r11d,%eax + roll $1,%ebp + xorl 28(%rsp),%r14d + movl %edi,%eax + movl %ebp,24(%rsp) movl %esi,%ecx - xorl 36(%rsp),%ebp - xorl %edi,%eax - roll $5,%ecx - leal -899497514(%rdx,%r13,1),%r13d - xorl 60(%rsp),%ebp + xorl 36(%rsp),%r14d xorl %r12d,%eax + roll $5,%ecx + xorl 60(%rsp),%r14d + leal -899497514(%rbp,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 16(%rsp),%ebp roll $30,%edi addl %eax,%r13d - roll $1,%ebp - movl %ebp,28(%rsp) - movl 32(%rsp),%edx - movl %edi,%eax + roll $1,%r14d + xorl 32(%rsp),%edx + movl %esi,%eax + movl %r14d,28(%rsp) movl %r13d,%ecx xorl 40(%rsp),%edx - xorl %esi,%eax + xorl %r11d,%eax roll $5,%ecx - leal -899497514(%rbp,%r12,1),%r12d xorl 0(%rsp),%edx - xorl %r11d,%eax + leal -899497514(%r14,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 20(%rsp),%edx roll $30,%esi addl %eax,%r12d roll $1,%edx - movl %edx,32(%rsp) - movl 36(%rsp),%ebp - movl %esi,%eax + xorl 36(%rsp),%ebp + movl %r13d,%eax + movl %r12d,%ecx xorl 44(%rsp),%ebp - xorl %r13d,%eax + xorl %edi,%eax roll $5,%ecx - leal -899497514(%rdx,%r11,1),%r11d xorl 4(%rsp),%ebp - xorl %edi,%eax + leal -899497514(%rdx,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 24(%rsp),%ebp roll $30,%r13d addl %eax,%r11d roll $1,%ebp - movl %ebp,36(%rsp) - movl 40(%rsp),%edx - movl %r13d,%eax + xorl 40(%rsp),%r14d + movl %r12d,%eax + movl %r11d,%ecx - xorl 48(%rsp),%edx - xorl %r12d,%eax + xorl 48(%rsp),%r14d + xorl %esi,%eax roll $5,%ecx + xorl 8(%rsp),%r14d leal -899497514(%rbp,%rdi,1),%edi - xorl 8(%rsp),%edx - xorl %esi,%eax + xorl %r13d,%eax addl %ecx,%edi - xorl 28(%rsp),%edx roll $30,%r12d addl %eax,%edi - roll $1,%edx - movl %edx,40(%rsp) - movl 44(%rsp),%ebp - movl %r12d,%eax + roll $1,%r14d + xorl 44(%rsp),%edx + movl %r11d,%eax + movl %edi,%ecx - xorl 52(%rsp),%ebp - xorl %r11d,%eax - roll $5,%ecx - leal -899497514(%rdx,%rsi,1),%esi - xorl 12(%rsp),%ebp + xorl 52(%rsp),%edx xorl %r13d,%eax + roll $5,%ecx + xorl 12(%rsp),%edx + leal -899497514(%r14,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 32(%rsp),%ebp roll $30,%r11d addl %eax,%esi - roll $1,%ebp - movl %ebp,44(%rsp) - movl 48(%rsp),%edx - movl %r11d,%eax - movl %esi,%ecx - xorl 56(%rsp),%edx - xorl %edi,%eax - roll $5,%ecx - leal -899497514(%rbp,%r13,1),%r13d - xorl 16(%rsp),%edx + roll $1,%edx + xorl 48(%rsp),%ebp + movl %edi,%eax + + movl %esi,%ecx + xorl 56(%rsp),%ebp xorl %r12d,%eax + roll $5,%ecx + xorl 16(%rsp),%ebp + leal -899497514(%rdx,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 36(%rsp),%edx roll $30,%edi addl %eax,%r13d - roll $1,%edx - movl %edx,48(%rsp) - movl 52(%rsp),%ebp - movl %edi,%eax + roll $1,%ebp + xorl 52(%rsp),%r14d + movl %esi,%eax + movl %r13d,%ecx - xorl 60(%rsp),%ebp - xorl %esi,%eax - roll $5,%ecx - leal -899497514(%rdx,%r12,1),%r12d - xorl 20(%rsp),%ebp + xorl 60(%rsp),%r14d xorl %r11d,%eax + roll $5,%ecx + xorl 20(%rsp),%r14d + leal -899497514(%rbp,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 40(%rsp),%ebp roll $30,%esi addl %eax,%r12d - roll $1,%ebp - movl 56(%rsp),%edx - movl %esi,%eax + roll $1,%r14d + xorl 56(%rsp),%edx + movl %r13d,%eax + movl %r12d,%ecx xorl 0(%rsp),%edx - xorl %r13d,%eax + xorl %edi,%eax roll $5,%ecx - leal -899497514(%rbp,%r11,1),%r11d xorl 24(%rsp),%edx - xorl %edi,%eax + leal -899497514(%r14,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 44(%rsp),%edx roll $30,%r13d addl %eax,%r11d roll $1,%edx - movl 60(%rsp),%ebp - movl %r13d,%eax + xorl 60(%rsp),%ebp + movl %r12d,%eax + movl %r11d,%ecx xorl 4(%rsp),%ebp - xorl %r12d,%eax + xorl %esi,%eax roll $5,%ecx - leal -899497514(%rdx,%rdi,1),%edi xorl 28(%rsp),%ebp - xorl %esi,%eax + leal -899497514(%rdx,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 48(%rsp),%ebp roll $30,%r12d addl %eax,%edi roll $1,%ebp - movl %r12d,%eax + movl %r11d,%eax movl %edi,%ecx - xorl %r11d,%eax + xorl %r13d,%eax leal -899497514(%rbp,%rsi,1),%esi roll $5,%ecx - xorl %r13d,%eax + xorl %r12d,%eax addl %ecx,%esi roll $30,%r11d addl %eax,%esi @@ -1319,29 +1277,218 @@ sha1_block_data_order: jnz .Lloop movq 64(%rsp),%rsi - movq (%rsi),%r13 - movq 8(%rsi),%r12 - movq 16(%rsi),%rbp - movq 24(%rsi),%rbx - leaq 32(%rsi),%rsp +.cfi_def_cfa %rsi,8 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue: .byte 0xf3,0xc3 +.cfi_endproc .size sha1_block_data_order,.-sha1_block_data_order +.type sha1_block_data_order_shaext,@function +.align 32 +sha1_block_data_order_shaext: +_shaext_shortcut: +.cfi_startproc + movdqu (%rdi),%xmm0 + movd 16(%rdi),%xmm1 + movdqa K_XX_XX+160(%rip),%xmm3 + + movdqu (%rsi),%xmm4 + pshufd $27,%xmm0,%xmm0 + movdqu 16(%rsi),%xmm5 + pshufd $27,%xmm1,%xmm1 + movdqu 32(%rsi),%xmm6 +.byte 102,15,56,0,227 + movdqu 48(%rsi),%xmm7 +.byte 102,15,56,0,235 +.byte 102,15,56,0,243 + movdqa %xmm1,%xmm9 +.byte 102,15,56,0,251 + jmp .Loop_shaext + +.align 16 +.Loop_shaext: + decq %rdx + leaq 64(%rsi),%r8 + paddd %xmm4,%xmm1 + cmovneq %r8,%rsi + movdqa %xmm0,%xmm8 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,0 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,0 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,0 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,0 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,0 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,1 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,1 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,1 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,1 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,1 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,2 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,2 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,2 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,2 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,2 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,3 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 + movdqu (%rsi),%xmm4 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,3 +.byte 15,56,200,213 + movdqu 16(%rsi),%xmm5 +.byte 102,15,56,0,227 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,3 +.byte 15,56,200,206 + movdqu 32(%rsi),%xmm6 +.byte 102,15,56,0,235 + + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,3 +.byte 15,56,200,215 + movdqu 48(%rsi),%xmm7 +.byte 102,15,56,0,243 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,3 +.byte 65,15,56,200,201 +.byte 102,15,56,0,251 + + paddd %xmm8,%xmm0 + movdqa %xmm1,%xmm9 + + jnz .Loop_shaext + + pshufd $27,%xmm0,%xmm0 + pshufd $27,%xmm1,%xmm1 + movdqu %xmm0,(%rdi) + movd %xmm1,16(%rdi) +.cfi_endproc + .byte 0xf3,0xc3 +.size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext .type sha1_block_data_order_ssse3,@function .align 16 sha1_block_data_order_ssse3: _ssse3_shortcut: +.cfi_startproc + movq %rsp,%r11 +.cfi_def_cfa_register %r11 pushq %rbx +.cfi_offset %rbx,-16 pushq %rbp +.cfi_offset %rbp,-24 pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 leaq -64(%rsp),%rsp + andq $-64,%rsp movq %rdi,%r8 movq %rsi,%r9 movq %rdx,%r10 shlq $6,%r10 addq %r9,%r10 - leaq K_XX_XX(%rip),%r11 + leaq K_XX_XX+64(%rip),%r14 movl 0(%r8),%eax movl 4(%r8),%ebx @@ -1353,18 +1500,18 @@ _ssse3_shortcut: xorl %edx,%edi andl %edi,%esi - movdqa 64(%r11),%xmm6 - movdqa 0(%r11),%xmm9 + movdqa 64(%r14),%xmm6 + movdqa -64(%r14),%xmm9 movdqu 0(%r9),%xmm0 movdqu 16(%r9),%xmm1 movdqu 32(%r9),%xmm2 movdqu 48(%r9),%xmm3 .byte 102,15,56,0,198 - addq $64,%r9 .byte 102,15,56,0,206 .byte 102,15,56,0,214 -.byte 102,15,56,0,222 + addq $64,%r9 paddd %xmm9,%xmm0 +.byte 102,15,56,0,222 paddd %xmm9,%xmm1 paddd %xmm9,%xmm2 movdqa %xmm0,0(%rsp) @@ -1376,24 +1523,24 @@ _ssse3_shortcut: jmp .Loop_ssse3 .align 16 .Loop_ssse3: - movdqa %xmm1,%xmm4 rorl $2,%ebx + pshufd $238,%xmm0,%xmm4 xorl %edx,%esi movdqa %xmm3,%xmm8 -.byte 102,15,58,15,224,8 + paddd %xmm3,%xmm9 movl %eax,%edi addl 0(%rsp),%ebp - paddd %xmm3,%xmm9 + punpcklqdq %xmm1,%xmm4 xorl %ecx,%ebx roll $5,%eax - psrldq $4,%xmm8 addl %esi,%ebp + psrldq $4,%xmm8 andl %ebx,%edi - pxor %xmm0,%xmm4 xorl %ecx,%ebx + pxor %xmm0,%xmm4 addl %eax,%ebp - pxor %xmm2,%xmm8 rorl $7,%eax + pxor %xmm2,%xmm8 xorl %ecx,%edi movl %ebp,%esi addl 4(%rsp),%edx @@ -1404,57 +1551,57 @@ _ssse3_shortcut: addl %edi,%edx andl %eax,%esi movdqa %xmm4,%xmm10 - movdqa %xmm4,%xmm8 xorl %ebx,%eax addl %ebp,%edx rorl $7,%ebp + movdqa %xmm4,%xmm8 xorl %ebx,%esi pslldq $12,%xmm10 paddd %xmm4,%xmm4 movl %edx,%edi addl 8(%rsp),%ecx + psrld $31,%xmm8 xorl %eax,%ebp roll $5,%edx - psrld $31,%xmm8 addl %esi,%ecx - andl %ebp,%edi movdqa %xmm10,%xmm9 + andl %ebp,%edi xorl %eax,%ebp - addl %edx,%ecx psrld $30,%xmm10 - por %xmm8,%xmm4 + addl %edx,%ecx rorl $7,%edx + por %xmm8,%xmm4 xorl %eax,%edi movl %ecx,%esi addl 12(%rsp),%ebx pslld $2,%xmm9 pxor %xmm10,%xmm4 xorl %ebp,%edx + movdqa -64(%r14),%xmm10 roll $5,%ecx - movdqa 0(%r11),%xmm10 addl %edi,%ebx andl %edx,%esi pxor %xmm9,%xmm4 xorl %ebp,%edx addl %ecx,%ebx - movdqa %xmm2,%xmm5 rorl $7,%ecx + pshufd $238,%xmm1,%xmm5 xorl %ebp,%esi movdqa %xmm4,%xmm9 -.byte 102,15,58,15,233,8 + paddd %xmm4,%xmm10 movl %ebx,%edi addl 16(%rsp),%eax - paddd %xmm4,%xmm10 + punpcklqdq %xmm2,%xmm5 xorl %edx,%ecx roll $5,%ebx - psrldq $4,%xmm9 addl %esi,%eax + psrldq $4,%xmm9 andl %ecx,%edi - pxor %xmm1,%xmm5 xorl %edx,%ecx + pxor %xmm1,%xmm5 addl %ebx,%eax - pxor %xmm3,%xmm9 rorl $7,%ebx + pxor %xmm3,%xmm9 xorl %edx,%edi movl %eax,%esi addl 20(%rsp),%ebp @@ -1465,57 +1612,57 @@ _ssse3_shortcut: addl %edi,%ebp andl %ebx,%esi movdqa %xmm5,%xmm8 - movdqa %xmm5,%xmm9 xorl %ecx,%ebx addl %eax,%ebp rorl $7,%eax + movdqa %xmm5,%xmm9 xorl %ecx,%esi pslldq $12,%xmm8 paddd %xmm5,%xmm5 movl %ebp,%edi addl 24(%rsp),%edx + psrld $31,%xmm9 xorl %ebx,%eax roll $5,%ebp - psrld $31,%xmm9 addl %esi,%edx - andl %eax,%edi movdqa %xmm8,%xmm10 + andl %eax,%edi xorl %ebx,%eax - addl %ebp,%edx psrld $30,%xmm8 - por %xmm9,%xmm5 + addl %ebp,%edx rorl $7,%ebp + por %xmm9,%xmm5 xorl %ebx,%edi movl %edx,%esi addl 28(%rsp),%ecx pslld $2,%xmm10 pxor %xmm8,%xmm5 xorl %eax,%ebp + movdqa -32(%r14),%xmm8 roll $5,%edx - movdqa 16(%r11),%xmm8 addl %edi,%ecx andl %ebp,%esi pxor %xmm10,%xmm5 xorl %eax,%ebp addl %edx,%ecx - movdqa %xmm3,%xmm6 rorl $7,%edx + pshufd $238,%xmm2,%xmm6 xorl %eax,%esi movdqa %xmm5,%xmm10 -.byte 102,15,58,15,242,8 + paddd %xmm5,%xmm8 movl %ecx,%edi addl 32(%rsp),%ebx - paddd %xmm5,%xmm8 + punpcklqdq %xmm3,%xmm6 xorl %ebp,%edx roll $5,%ecx - psrldq $4,%xmm10 addl %esi,%ebx + psrldq $4,%xmm10 andl %edx,%edi - pxor %xmm2,%xmm6 xorl %ebp,%edx + pxor %xmm2,%xmm6 addl %ecx,%ebx - pxor %xmm4,%xmm10 rorl $7,%ecx + pxor %xmm4,%xmm10 xorl %ebp,%edi movl %ebx,%esi addl 36(%rsp),%eax @@ -1526,57 +1673,57 @@ _ssse3_shortcut: addl %edi,%eax andl %ecx,%esi movdqa %xmm6,%xmm9 - movdqa %xmm6,%xmm10 xorl %edx,%ecx addl %ebx,%eax rorl $7,%ebx + movdqa %xmm6,%xmm10 xorl %edx,%esi pslldq $12,%xmm9 paddd %xmm6,%xmm6 movl %eax,%edi addl 40(%rsp),%ebp + psrld $31,%xmm10 xorl %ecx,%ebx roll $5,%eax - psrld $31,%xmm10 addl %esi,%ebp - andl %ebx,%edi movdqa %xmm9,%xmm8 + andl %ebx,%edi xorl %ecx,%ebx - addl %eax,%ebp psrld $30,%xmm9 - por %xmm10,%xmm6 + addl %eax,%ebp rorl $7,%eax + por %xmm10,%xmm6 xorl %ecx,%edi movl %ebp,%esi addl 44(%rsp),%edx pslld $2,%xmm8 pxor %xmm9,%xmm6 xorl %ebx,%eax + movdqa -32(%r14),%xmm9 roll $5,%ebp - movdqa 16(%r11),%xmm9 addl %edi,%edx andl %eax,%esi pxor %xmm8,%xmm6 xorl %ebx,%eax addl %ebp,%edx - movdqa %xmm4,%xmm7 rorl $7,%ebp + pshufd $238,%xmm3,%xmm7 xorl %ebx,%esi movdqa %xmm6,%xmm8 -.byte 102,15,58,15,251,8 + paddd %xmm6,%xmm9 movl %edx,%edi addl 48(%rsp),%ecx - paddd %xmm6,%xmm9 + punpcklqdq %xmm4,%xmm7 xorl %eax,%ebp roll $5,%edx - psrldq $4,%xmm8 addl %esi,%ecx + psrldq $4,%xmm8 andl %ebp,%edi - pxor %xmm3,%xmm7 xorl %eax,%ebp + pxor %xmm3,%xmm7 addl %edx,%ecx - pxor %xmm5,%xmm8 rorl $7,%edx + pxor %xmm5,%xmm8 xorl %eax,%edi movl %ecx,%esi addl 52(%rsp),%ebx @@ -1587,78 +1734,78 @@ _ssse3_shortcut: addl %edi,%ebx andl %edx,%esi movdqa %xmm7,%xmm10 - movdqa %xmm7,%xmm8 xorl %ebp,%edx addl %ecx,%ebx rorl $7,%ecx + movdqa %xmm7,%xmm8 xorl %ebp,%esi pslldq $12,%xmm10 paddd %xmm7,%xmm7 movl %ebx,%edi addl 56(%rsp),%eax + psrld $31,%xmm8 xorl %edx,%ecx roll $5,%ebx - psrld $31,%xmm8 addl %esi,%eax - andl %ecx,%edi movdqa %xmm10,%xmm9 + andl %ecx,%edi xorl %edx,%ecx - addl %ebx,%eax psrld $30,%xmm10 - por %xmm8,%xmm7 + addl %ebx,%eax rorl $7,%ebx + por %xmm8,%xmm7 xorl %edx,%edi movl %eax,%esi addl 60(%rsp),%ebp pslld $2,%xmm9 pxor %xmm10,%xmm7 xorl %ecx,%ebx + movdqa -32(%r14),%xmm10 roll $5,%eax - movdqa 16(%r11),%xmm10 addl %edi,%ebp andl %ebx,%esi pxor %xmm9,%xmm7 + pshufd $238,%xmm6,%xmm9 xorl %ecx,%ebx addl %eax,%ebp - movdqa %xmm7,%xmm9 rorl $7,%eax pxor %xmm4,%xmm0 -.byte 102,68,15,58,15,206,8 xorl %ecx,%esi movl %ebp,%edi addl 0(%rsp),%edx - pxor %xmm1,%xmm0 + punpcklqdq %xmm7,%xmm9 xorl %ebx,%eax roll $5,%ebp - movdqa %xmm10,%xmm8 - paddd %xmm7,%xmm10 + pxor %xmm1,%xmm0 addl %esi,%edx andl %eax,%edi - pxor %xmm9,%xmm0 + movdqa %xmm10,%xmm8 xorl %ebx,%eax + paddd %xmm7,%xmm10 addl %ebp,%edx + pxor %xmm9,%xmm0 rorl $7,%ebp xorl %ebx,%edi - movdqa %xmm0,%xmm9 - movdqa %xmm10,48(%rsp) movl %edx,%esi addl 4(%rsp),%ecx + movdqa %xmm0,%xmm9 xorl %eax,%ebp roll $5,%edx - pslld $2,%xmm0 + movdqa %xmm10,48(%rsp) addl %edi,%ecx andl %ebp,%esi - psrld $30,%xmm9 xorl %eax,%ebp + pslld $2,%xmm0 addl %edx,%ecx rorl $7,%edx + psrld $30,%xmm9 xorl %eax,%esi movl %ecx,%edi addl 8(%rsp),%ebx por %xmm9,%xmm0 xorl %ebp,%edx roll $5,%ecx - movdqa %xmm0,%xmm10 + pshufd $238,%xmm7,%xmm10 addl %esi,%ebx andl %edx,%edi xorl %ebp,%edx @@ -1671,18 +1818,18 @@ _ssse3_shortcut: xorl %edx,%esi rorl $7,%ecx addl %ebx,%eax - addl 16(%rsp),%ebp pxor %xmm5,%xmm1 -.byte 102,68,15,58,15,215,8 + addl 16(%rsp),%ebp xorl %ecx,%esi + punpcklqdq %xmm0,%xmm10 movl %eax,%edi roll $5,%eax pxor %xmm2,%xmm1 addl %esi,%ebp xorl %ecx,%edi movdqa %xmm8,%xmm9 - paddd %xmm0,%xmm8 rorl $7,%ebx + paddd %xmm0,%xmm8 addl %eax,%ebp pxor %xmm10,%xmm1 addl 20(%rsp),%edx @@ -1690,43 +1837,43 @@ _ssse3_shortcut: movl %ebp,%esi roll $5,%ebp movdqa %xmm1,%xmm10 - movdqa %xmm8,0(%rsp) addl %edi,%edx xorl %ebx,%esi + movdqa %xmm8,0(%rsp) rorl $7,%eax addl %ebp,%edx - pslld $2,%xmm1 addl 24(%rsp),%ecx + pslld $2,%xmm1 xorl %eax,%esi - psrld $30,%xmm10 movl %edx,%edi + psrld $30,%xmm10 roll $5,%edx addl %esi,%ecx xorl %eax,%edi rorl $7,%ebp - addl %edx,%ecx por %xmm10,%xmm1 + addl %edx,%ecx addl 28(%rsp),%ebx + pshufd $238,%xmm0,%xmm8 xorl %ebp,%edi - movdqa %xmm1,%xmm8 movl %ecx,%esi roll $5,%ecx addl %edi,%ebx xorl %ebp,%esi rorl $7,%edx addl %ecx,%ebx - addl 32(%rsp),%eax pxor %xmm6,%xmm2 -.byte 102,68,15,58,15,192,8 + addl 32(%rsp),%eax xorl %edx,%esi + punpcklqdq %xmm1,%xmm8 movl %ebx,%edi roll $5,%ebx pxor %xmm3,%xmm2 addl %esi,%eax xorl %edx,%edi - movdqa 32(%r11),%xmm10 - paddd %xmm1,%xmm9 + movdqa 0(%r14),%xmm10 rorl $7,%ecx + paddd %xmm1,%xmm9 addl %ebx,%eax pxor %xmm8,%xmm2 addl 36(%rsp),%ebp @@ -1734,43 +1881,43 @@ _ssse3_shortcut: movl %eax,%esi roll $5,%eax movdqa %xmm2,%xmm8 - movdqa %xmm9,16(%rsp) addl %edi,%ebp xorl %ecx,%esi + movdqa %xmm9,16(%rsp) rorl $7,%ebx addl %eax,%ebp - pslld $2,%xmm2 addl 40(%rsp),%edx + pslld $2,%xmm2 xorl %ebx,%esi - psrld $30,%xmm8 movl %ebp,%edi + psrld $30,%xmm8 roll $5,%ebp addl %esi,%edx xorl %ebx,%edi rorl $7,%eax - addl %ebp,%edx por %xmm8,%xmm2 + addl %ebp,%edx addl 44(%rsp),%ecx + pshufd $238,%xmm1,%xmm9 xorl %eax,%edi - movdqa %xmm2,%xmm9 movl %edx,%esi roll $5,%edx addl %edi,%ecx xorl %eax,%esi rorl $7,%ebp addl %edx,%ecx - addl 48(%rsp),%ebx pxor %xmm7,%xmm3 -.byte 102,68,15,58,15,201,8 + addl 48(%rsp),%ebx xorl %ebp,%esi + punpcklqdq %xmm2,%xmm9 movl %ecx,%edi roll $5,%ecx pxor %xmm4,%xmm3 addl %esi,%ebx xorl %ebp,%edi movdqa %xmm10,%xmm8 - paddd %xmm2,%xmm10 rorl $7,%edx + paddd %xmm2,%xmm10 addl %ecx,%ebx pxor %xmm9,%xmm3 addl 52(%rsp),%eax @@ -1778,43 +1925,43 @@ _ssse3_shortcut: movl %ebx,%esi roll $5,%ebx movdqa %xmm3,%xmm9 - movdqa %xmm10,32(%rsp) addl %edi,%eax xorl %edx,%esi + movdqa %xmm10,32(%rsp) rorl $7,%ecx addl %ebx,%eax - pslld $2,%xmm3 addl 56(%rsp),%ebp + pslld $2,%xmm3 xorl %ecx,%esi - psrld $30,%xmm9 movl %eax,%edi + psrld $30,%xmm9 roll $5,%eax addl %esi,%ebp xorl %ecx,%edi rorl $7,%ebx - addl %eax,%ebp por %xmm9,%xmm3 + addl %eax,%ebp addl 60(%rsp),%edx + pshufd $238,%xmm2,%xmm10 xorl %ebx,%edi - movdqa %xmm3,%xmm10 movl %ebp,%esi roll $5,%ebp addl %edi,%edx xorl %ebx,%esi rorl $7,%eax addl %ebp,%edx - addl 0(%rsp),%ecx pxor %xmm0,%xmm4 -.byte 102,68,15,58,15,210,8 + addl 0(%rsp),%ecx xorl %eax,%esi + punpcklqdq %xmm3,%xmm10 movl %edx,%edi roll $5,%edx pxor %xmm5,%xmm4 addl %esi,%ecx xorl %eax,%edi movdqa %xmm8,%xmm9 - paddd %xmm3,%xmm8 rorl $7,%ebp + paddd %xmm3,%xmm8 addl %edx,%ecx pxor %xmm10,%xmm4 addl 4(%rsp),%ebx @@ -1822,43 +1969,43 @@ _ssse3_shortcut: movl %ecx,%esi roll $5,%ecx movdqa %xmm4,%xmm10 - movdqa %xmm8,48(%rsp) addl %edi,%ebx xorl %ebp,%esi + movdqa %xmm8,48(%rsp) rorl $7,%edx addl %ecx,%ebx - pslld $2,%xmm4 addl 8(%rsp),%eax + pslld $2,%xmm4 xorl %edx,%esi - psrld $30,%xmm10 movl %ebx,%edi + psrld $30,%xmm10 roll $5,%ebx addl %esi,%eax xorl %edx,%edi rorl $7,%ecx - addl %ebx,%eax por %xmm10,%xmm4 + addl %ebx,%eax addl 12(%rsp),%ebp + pshufd $238,%xmm3,%xmm8 xorl %ecx,%edi - movdqa %xmm4,%xmm8 movl %eax,%esi roll $5,%eax addl %edi,%ebp xorl %ecx,%esi rorl $7,%ebx addl %eax,%ebp - addl 16(%rsp),%edx pxor %xmm1,%xmm5 -.byte 102,68,15,58,15,195,8 + addl 16(%rsp),%edx xorl %ebx,%esi + punpcklqdq %xmm4,%xmm8 movl %ebp,%edi roll $5,%ebp pxor %xmm6,%xmm5 addl %esi,%edx xorl %ebx,%edi movdqa %xmm9,%xmm10 - paddd %xmm4,%xmm9 rorl $7,%eax + paddd %xmm4,%xmm9 addl %ebp,%edx pxor %xmm8,%xmm5 addl 20(%rsp),%ecx @@ -1866,24 +2013,24 @@ _ssse3_shortcut: movl %edx,%esi roll $5,%edx movdqa %xmm5,%xmm8 - movdqa %xmm9,0(%rsp) addl %edi,%ecx xorl %eax,%esi + movdqa %xmm9,0(%rsp) rorl $7,%ebp addl %edx,%ecx - pslld $2,%xmm5 addl 24(%rsp),%ebx + pslld $2,%xmm5 xorl %ebp,%esi - psrld $30,%xmm8 movl %ecx,%edi + psrld $30,%xmm8 roll $5,%ecx addl %esi,%ebx xorl %ebp,%edi rorl $7,%edx - addl %ecx,%ebx por %xmm8,%xmm5 + addl %ecx,%ebx addl 28(%rsp),%eax - movdqa %xmm5,%xmm9 + pshufd $238,%xmm4,%xmm9 rorl $7,%ecx movl %ebx,%esi xorl %edx,%edi @@ -1892,47 +2039,47 @@ _ssse3_shortcut: xorl %ecx,%esi xorl %edx,%ecx addl %ebx,%eax - addl 32(%rsp),%ebp pxor %xmm2,%xmm6 -.byte 102,68,15,58,15,204,8 + addl 32(%rsp),%ebp andl %ecx,%esi xorl %edx,%ecx rorl $7,%ebx - pxor %xmm7,%xmm6 + punpcklqdq %xmm5,%xmm9 movl %eax,%edi xorl %ecx,%esi - movdqa %xmm10,%xmm8 - paddd %xmm5,%xmm10 + pxor %xmm7,%xmm6 roll $5,%eax addl %esi,%ebp - pxor %xmm9,%xmm6 + movdqa %xmm10,%xmm8 xorl %ebx,%edi + paddd %xmm5,%xmm10 xorl %ecx,%ebx + pxor %xmm9,%xmm6 addl %eax,%ebp addl 36(%rsp),%edx - movdqa %xmm6,%xmm9 - movdqa %xmm10,16(%rsp) andl %ebx,%edi xorl %ecx,%ebx rorl $7,%eax + movdqa %xmm6,%xmm9 movl %ebp,%esi - pslld $2,%xmm6 xorl %ebx,%edi + movdqa %xmm10,16(%rsp) roll $5,%ebp - psrld $30,%xmm9 addl %edi,%edx xorl %eax,%esi + pslld $2,%xmm6 xorl %ebx,%eax addl %ebp,%edx + psrld $30,%xmm9 addl 40(%rsp),%ecx andl %eax,%esi - por %xmm9,%xmm6 xorl %ebx,%eax + por %xmm9,%xmm6 rorl $7,%ebp - movdqa %xmm6,%xmm10 movl %edx,%edi xorl %eax,%esi roll $5,%edx + pshufd $238,%xmm5,%xmm10 addl %esi,%ecx xorl %ebp,%edi xorl %eax,%ebp @@ -1948,47 +2095,47 @@ _ssse3_shortcut: xorl %edx,%esi xorl %ebp,%edx addl %ecx,%ebx - addl 48(%rsp),%eax pxor %xmm3,%xmm7 -.byte 102,68,15,58,15,213,8 + addl 48(%rsp),%eax andl %edx,%esi xorl %ebp,%edx rorl $7,%ecx - pxor %xmm0,%xmm7 + punpcklqdq %xmm6,%xmm10 movl %ebx,%edi xorl %edx,%esi - movdqa 48(%r11),%xmm9 - paddd %xmm6,%xmm8 + pxor %xmm0,%xmm7 roll $5,%ebx addl %esi,%eax - pxor %xmm10,%xmm7 + movdqa 32(%r14),%xmm9 xorl %ecx,%edi + paddd %xmm6,%xmm8 xorl %edx,%ecx + pxor %xmm10,%xmm7 addl %ebx,%eax addl 52(%rsp),%ebp - movdqa %xmm7,%xmm10 - movdqa %xmm8,32(%rsp) andl %ecx,%edi xorl %edx,%ecx rorl $7,%ebx + movdqa %xmm7,%xmm10 movl %eax,%esi - pslld $2,%xmm7 xorl %ecx,%edi + movdqa %xmm8,32(%rsp) roll $5,%eax - psrld $30,%xmm10 addl %edi,%ebp xorl %ebx,%esi + pslld $2,%xmm7 xorl %ecx,%ebx addl %eax,%ebp + psrld $30,%xmm10 addl 56(%rsp),%edx andl %ebx,%esi - por %xmm10,%xmm7 xorl %ecx,%ebx + por %xmm10,%xmm7 rorl $7,%eax - movdqa %xmm7,%xmm8 movl %ebp,%edi xorl %ebx,%esi roll $5,%ebp + pshufd $238,%xmm6,%xmm8 addl %esi,%edx xorl %eax,%edi xorl %ebx,%eax @@ -2004,47 +2151,47 @@ _ssse3_shortcut: xorl %ebp,%esi xorl %eax,%ebp addl %edx,%ecx - addl 0(%rsp),%ebx pxor %xmm4,%xmm0 -.byte 102,68,15,58,15,198,8 + addl 0(%rsp),%ebx andl %ebp,%esi xorl %eax,%ebp rorl $7,%edx - pxor %xmm1,%xmm0 + punpcklqdq %xmm7,%xmm8 movl %ecx,%edi xorl %ebp,%esi - movdqa %xmm9,%xmm10 - paddd %xmm7,%xmm9 + pxor %xmm1,%xmm0 roll $5,%ecx addl %esi,%ebx - pxor %xmm8,%xmm0 + movdqa %xmm9,%xmm10 xorl %edx,%edi + paddd %xmm7,%xmm9 xorl %ebp,%edx + pxor %xmm8,%xmm0 addl %ecx,%ebx addl 4(%rsp),%eax - movdqa %xmm0,%xmm8 - movdqa %xmm9,48(%rsp) andl %edx,%edi xorl %ebp,%edx rorl $7,%ecx + movdqa %xmm0,%xmm8 movl %ebx,%esi - pslld $2,%xmm0 xorl %edx,%edi + movdqa %xmm9,48(%rsp) roll $5,%ebx - psrld $30,%xmm8 addl %edi,%eax xorl %ecx,%esi + pslld $2,%xmm0 xorl %edx,%ecx addl %ebx,%eax + psrld $30,%xmm8 addl 8(%rsp),%ebp andl %ecx,%esi - por %xmm8,%xmm0 xorl %edx,%ecx + por %xmm8,%xmm0 rorl $7,%ebx - movdqa %xmm0,%xmm9 movl %eax,%edi xorl %ecx,%esi roll $5,%eax + pshufd $238,%xmm7,%xmm9 addl %esi,%ebp xorl %ebx,%edi xorl %ecx,%ebx @@ -2060,47 +2207,47 @@ _ssse3_shortcut: xorl %eax,%esi xorl %ebx,%eax addl %ebp,%edx - addl 16(%rsp),%ecx pxor %xmm5,%xmm1 -.byte 102,68,15,58,15,207,8 + addl 16(%rsp),%ecx andl %eax,%esi xorl %ebx,%eax rorl $7,%ebp - pxor %xmm2,%xmm1 + punpcklqdq %xmm0,%xmm9 movl %edx,%edi xorl %eax,%esi - movdqa %xmm10,%xmm8 - paddd %xmm0,%xmm10 + pxor %xmm2,%xmm1 roll $5,%edx addl %esi,%ecx - pxor %xmm9,%xmm1 + movdqa %xmm10,%xmm8 xorl %ebp,%edi + paddd %xmm0,%xmm10 xorl %eax,%ebp + pxor %xmm9,%xmm1 addl %edx,%ecx addl 20(%rsp),%ebx - movdqa %xmm1,%xmm9 - movdqa %xmm10,0(%rsp) andl %ebp,%edi xorl %eax,%ebp rorl $7,%edx + movdqa %xmm1,%xmm9 movl %ecx,%esi - pslld $2,%xmm1 xorl %ebp,%edi + movdqa %xmm10,0(%rsp) roll $5,%ecx - psrld $30,%xmm9 addl %edi,%ebx xorl %edx,%esi + pslld $2,%xmm1 xorl %ebp,%edx addl %ecx,%ebx + psrld $30,%xmm9 addl 24(%rsp),%eax andl %edx,%esi - por %xmm9,%xmm1 xorl %ebp,%edx + por %xmm9,%xmm1 rorl $7,%ecx - movdqa %xmm1,%xmm10 movl %ebx,%edi xorl %edx,%esi roll $5,%ebx + pshufd $238,%xmm0,%xmm10 addl %esi,%eax xorl %ecx,%edi xorl %edx,%ecx @@ -2116,47 +2263,47 @@ _ssse3_shortcut: xorl %ebx,%esi xorl %ecx,%ebx addl %eax,%ebp - addl 32(%rsp),%edx pxor %xmm6,%xmm2 -.byte 102,68,15,58,15,208,8 + addl 32(%rsp),%edx andl %ebx,%esi xorl %ecx,%ebx rorl $7,%eax - pxor %xmm3,%xmm2 + punpcklqdq %xmm1,%xmm10 movl %ebp,%edi xorl %ebx,%esi - movdqa %xmm8,%xmm9 - paddd %xmm1,%xmm8 + pxor %xmm3,%xmm2 roll $5,%ebp addl %esi,%edx - pxor %xmm10,%xmm2 + movdqa %xmm8,%xmm9 xorl %eax,%edi + paddd %xmm1,%xmm8 xorl %ebx,%eax + pxor %xmm10,%xmm2 addl %ebp,%edx addl 36(%rsp),%ecx - movdqa %xmm2,%xmm10 - movdqa %xmm8,16(%rsp) andl %eax,%edi xorl %ebx,%eax rorl $7,%ebp + movdqa %xmm2,%xmm10 movl %edx,%esi - pslld $2,%xmm2 xorl %eax,%edi + movdqa %xmm8,16(%rsp) roll $5,%edx - psrld $30,%xmm10 addl %edi,%ecx xorl %ebp,%esi + pslld $2,%xmm2 xorl %eax,%ebp addl %edx,%ecx + psrld $30,%xmm10 addl 40(%rsp),%ebx andl %ebp,%esi - por %xmm10,%xmm2 xorl %eax,%ebp + por %xmm10,%xmm2 rorl $7,%edx - movdqa %xmm2,%xmm8 movl %ecx,%edi xorl %ebp,%esi roll $5,%ecx + pshufd $238,%xmm1,%xmm8 addl %esi,%ebx xorl %edx,%edi xorl %ebp,%edx @@ -2171,18 +2318,18 @@ _ssse3_shortcut: addl %edi,%eax xorl %edx,%esi addl %ebx,%eax - addl 48(%rsp),%ebp pxor %xmm7,%xmm3 -.byte 102,68,15,58,15,193,8 + addl 48(%rsp),%ebp xorl %ecx,%esi + punpcklqdq %xmm2,%xmm8 movl %eax,%edi roll $5,%eax pxor %xmm4,%xmm3 addl %esi,%ebp xorl %ecx,%edi movdqa %xmm9,%xmm10 - paddd %xmm2,%xmm9 rorl $7,%ebx + paddd %xmm2,%xmm9 addl %eax,%ebp pxor %xmm8,%xmm3 addl 52(%rsp),%edx @@ -2190,22 +2337,22 @@ _ssse3_shortcut: movl %ebp,%esi roll $5,%ebp movdqa %xmm3,%xmm8 - movdqa %xmm9,32(%rsp) addl %edi,%edx xorl %ebx,%esi + movdqa %xmm9,32(%rsp) rorl $7,%eax addl %ebp,%edx - pslld $2,%xmm3 addl 56(%rsp),%ecx + pslld $2,%xmm3 xorl %eax,%esi - psrld $30,%xmm8 movl %edx,%edi + psrld $30,%xmm8 roll $5,%edx addl %esi,%ecx xorl %eax,%edi rorl $7,%ebp - addl %edx,%ecx por %xmm8,%xmm3 + addl %edx,%ecx addl 60(%rsp),%ebx xorl %ebp,%edi movl %ecx,%esi @@ -2215,13 +2362,13 @@ _ssse3_shortcut: rorl $7,%edx addl %ecx,%ebx addl 0(%rsp),%eax - paddd %xmm3,%xmm10 xorl %edx,%esi movl %ebx,%edi roll $5,%ebx + paddd %xmm3,%xmm10 addl %esi,%eax - movdqa %xmm10,48(%rsp) xorl %edx,%edi + movdqa %xmm10,48(%rsp) rorl $7,%ecx addl %ebx,%eax addl 4(%rsp),%ebp @@ -2250,8 +2397,8 @@ _ssse3_shortcut: addl %edx,%ecx cmpq %r10,%r9 je .Ldone_ssse3 - movdqa 64(%r11),%xmm6 - movdqa 0(%r11),%xmm9 + movdqa 64(%r14),%xmm6 + movdqa -64(%r14),%xmm9 movdqu 0(%r9),%xmm0 movdqu 16(%r9),%xmm1 movdqu 32(%r9),%xmm2 @@ -2260,23 +2407,23 @@ _ssse3_shortcut: addq $64,%r9 addl 16(%rsp),%ebx xorl %ebp,%esi -.byte 102,15,56,0,206 movl %ecx,%edi +.byte 102,15,56,0,206 roll $5,%ecx - paddd %xmm9,%xmm0 addl %esi,%ebx xorl %ebp,%edi rorl $7,%edx + paddd %xmm9,%xmm0 addl %ecx,%ebx - movdqa %xmm0,0(%rsp) addl 20(%rsp),%eax xorl %edx,%edi - psubd %xmm9,%xmm0 movl %ebx,%esi + movdqa %xmm0,0(%rsp) roll $5,%ebx addl %edi,%eax xorl %edx,%esi rorl $7,%ecx + psubd %xmm9,%xmm0 addl %ebx,%eax addl 24(%rsp),%ebp xorl %ecx,%esi @@ -2296,23 +2443,23 @@ _ssse3_shortcut: addl %ebp,%edx addl 32(%rsp),%ecx xorl %eax,%esi -.byte 102,15,56,0,214 movl %edx,%edi +.byte 102,15,56,0,214 roll $5,%edx - paddd %xmm9,%xmm1 addl %esi,%ecx xorl %eax,%edi rorl $7,%ebp + paddd %xmm9,%xmm1 addl %edx,%ecx - movdqa %xmm1,16(%rsp) addl 36(%rsp),%ebx xorl %ebp,%edi - psubd %xmm9,%xmm1 movl %ecx,%esi + movdqa %xmm1,16(%rsp) roll $5,%ecx addl %edi,%ebx xorl %ebp,%esi rorl $7,%edx + psubd %xmm9,%xmm1 addl %ecx,%ebx addl 40(%rsp),%eax xorl %edx,%esi @@ -2332,23 +2479,23 @@ _ssse3_shortcut: addl %eax,%ebp addl 48(%rsp),%edx xorl %ebx,%esi -.byte 102,15,56,0,222 movl %ebp,%edi +.byte 102,15,56,0,222 roll $5,%ebp - paddd %xmm9,%xmm2 addl %esi,%edx xorl %ebx,%edi rorl $7,%eax + paddd %xmm9,%xmm2 addl %ebp,%edx - movdqa %xmm2,32(%rsp) addl 52(%rsp),%ecx xorl %eax,%edi - psubd %xmm9,%xmm2 movl %edx,%esi + movdqa %xmm2,32(%rsp) roll $5,%edx addl %edi,%ecx xorl %eax,%esi rorl $7,%ebp + psubd %xmm9,%xmm2 addl %edx,%ecx addl 56(%rsp),%ebx xorl %ebp,%esi @@ -2488,25 +2635,2857 @@ _ssse3_shortcut: movl %ecx,8(%r8) movl %edx,12(%r8) movl %ebp,16(%r8) - leaq 64(%rsp),%rsi - movq 0(%rsi),%r12 - movq 8(%rsi),%rbp - movq 16(%rsi),%rbx - leaq 24(%rsi),%rsp + movq -40(%r11),%r14 +.cfi_restore %r14 + movq -32(%r11),%r13 +.cfi_restore %r13 + movq -24(%r11),%r12 +.cfi_restore %r12 + movq -16(%r11),%rbp +.cfi_restore %rbp + movq -8(%r11),%rbx +.cfi_restore %rbx + leaq (%r11),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_ssse3: .byte 0xf3,0xc3 +.cfi_endproc .size sha1_block_data_order_ssse3,.-sha1_block_data_order_ssse3 -.align 64 -K_XX_XX: -.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 -.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 -.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc -.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 -.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f -.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 -.align 64 - +.type sha1_block_data_order_avx,@function +.align 16 +sha1_block_data_order_avx: +_avx_shortcut: +.cfi_startproc + movq %rsp,%r11 +.cfi_def_cfa_register %r11 + pushq %rbx +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 + leaq -64(%rsp),%rsp + vzeroupper + andq $-64,%rsp + movq %rdi,%r8 + movq %rsi,%r9 + movq %rdx,%r10 -.section .note.GNU-stack,"",%progbits + shlq $6,%r10 + addq %r9,%r10 + leaq K_XX_XX+64(%rip),%r14 + movl 0(%r8),%eax + movl 4(%r8),%ebx + movl 8(%r8),%ecx + movl 12(%r8),%edx + movl %ebx,%esi + movl 16(%r8),%ebp + movl %ecx,%edi + xorl %edx,%edi + andl %edi,%esi + vmovdqa 64(%r14),%xmm6 + vmovdqa -64(%r14),%xmm11 + vmovdqu 0(%r9),%xmm0 + vmovdqu 16(%r9),%xmm1 + vmovdqu 32(%r9),%xmm2 + vmovdqu 48(%r9),%xmm3 + vpshufb %xmm6,%xmm0,%xmm0 + addq $64,%r9 + vpshufb %xmm6,%xmm1,%xmm1 + vpshufb %xmm6,%xmm2,%xmm2 + vpshufb %xmm6,%xmm3,%xmm3 + vpaddd %xmm11,%xmm0,%xmm4 + vpaddd %xmm11,%xmm1,%xmm5 + vpaddd %xmm11,%xmm2,%xmm6 + vmovdqa %xmm4,0(%rsp) + vmovdqa %xmm5,16(%rsp) + vmovdqa %xmm6,32(%rsp) + jmp .Loop_avx +.align 16 +.Loop_avx: + shrdl $2,%ebx,%ebx + xorl %edx,%esi + vpalignr $8,%xmm0,%xmm1,%xmm4 + movl %eax,%edi + addl 0(%rsp),%ebp + vpaddd %xmm3,%xmm11,%xmm9 + xorl %ecx,%ebx + shldl $5,%eax,%eax + vpsrldq $4,%xmm3,%xmm8 + addl %esi,%ebp + andl %ebx,%edi + vpxor %xmm0,%xmm4,%xmm4 + xorl %ecx,%ebx + addl %eax,%ebp + vpxor %xmm2,%xmm8,%xmm8 + shrdl $7,%eax,%eax + xorl %ecx,%edi + movl %ebp,%esi + addl 4(%rsp),%edx + vpxor %xmm8,%xmm4,%xmm4 + xorl %ebx,%eax + shldl $5,%ebp,%ebp + vmovdqa %xmm9,48(%rsp) + addl %edi,%edx + andl %eax,%esi + vpsrld $31,%xmm4,%xmm8 + xorl %ebx,%eax + addl %ebp,%edx + shrdl $7,%ebp,%ebp + xorl %ebx,%esi + vpslldq $12,%xmm4,%xmm10 + vpaddd %xmm4,%xmm4,%xmm4 + movl %edx,%edi + addl 8(%rsp),%ecx + xorl %eax,%ebp + shldl $5,%edx,%edx + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm4,%xmm4 + addl %esi,%ecx + andl %ebp,%edi + xorl %eax,%ebp + addl %edx,%ecx + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm4,%xmm4 + shrdl $7,%edx,%edx + xorl %eax,%edi + movl %ecx,%esi + addl 12(%rsp),%ebx + vpxor %xmm10,%xmm4,%xmm4 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + addl %edi,%ebx + andl %edx,%esi + xorl %ebp,%edx + addl %ecx,%ebx + shrdl $7,%ecx,%ecx + xorl %ebp,%esi + vpalignr $8,%xmm1,%xmm2,%xmm5 + movl %ebx,%edi + addl 16(%rsp),%eax + vpaddd %xmm4,%xmm11,%xmm9 + xorl %edx,%ecx + shldl $5,%ebx,%ebx + vpsrldq $4,%xmm4,%xmm8 + addl %esi,%eax + andl %ecx,%edi + vpxor %xmm1,%xmm5,%xmm5 + xorl %edx,%ecx + addl %ebx,%eax + vpxor %xmm3,%xmm8,%xmm8 + shrdl $7,%ebx,%ebx + xorl %edx,%edi + movl %eax,%esi + addl 20(%rsp),%ebp + vpxor %xmm8,%xmm5,%xmm5 + xorl %ecx,%ebx + shldl $5,%eax,%eax + vmovdqa %xmm9,0(%rsp) + addl %edi,%ebp + andl %ebx,%esi + vpsrld $31,%xmm5,%xmm8 + xorl %ecx,%ebx + addl %eax,%ebp + shrdl $7,%eax,%eax + xorl %ecx,%esi + vpslldq $12,%xmm5,%xmm10 + vpaddd %xmm5,%xmm5,%xmm5 + movl %ebp,%edi + addl 24(%rsp),%edx + xorl %ebx,%eax + shldl $5,%ebp,%ebp + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm5,%xmm5 + addl %esi,%edx + andl %eax,%edi + xorl %ebx,%eax + addl %ebp,%edx + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm5,%xmm5 + shrdl $7,%ebp,%ebp + xorl %ebx,%edi + movl %edx,%esi + addl 28(%rsp),%ecx + vpxor %xmm10,%xmm5,%xmm5 + xorl %eax,%ebp + shldl $5,%edx,%edx + vmovdqa -32(%r14),%xmm11 + addl %edi,%ecx + andl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + shrdl $7,%edx,%edx + xorl %eax,%esi + vpalignr $8,%xmm2,%xmm3,%xmm6 + movl %ecx,%edi + addl 32(%rsp),%ebx + vpaddd %xmm5,%xmm11,%xmm9 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + vpsrldq $4,%xmm5,%xmm8 + addl %esi,%ebx + andl %edx,%edi + vpxor %xmm2,%xmm6,%xmm6 + xorl %ebp,%edx + addl %ecx,%ebx + vpxor %xmm4,%xmm8,%xmm8 + shrdl $7,%ecx,%ecx + xorl %ebp,%edi + movl %ebx,%esi + addl 36(%rsp),%eax + vpxor %xmm8,%xmm6,%xmm6 + xorl %edx,%ecx + shldl $5,%ebx,%ebx + vmovdqa %xmm9,16(%rsp) + addl %edi,%eax + andl %ecx,%esi + vpsrld $31,%xmm6,%xmm8 + xorl %edx,%ecx + addl %ebx,%eax + shrdl $7,%ebx,%ebx + xorl %edx,%esi + vpslldq $12,%xmm6,%xmm10 + vpaddd %xmm6,%xmm6,%xmm6 + movl %eax,%edi + addl 40(%rsp),%ebp + xorl %ecx,%ebx + shldl $5,%eax,%eax + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm6,%xmm6 + addl %esi,%ebp + andl %ebx,%edi + xorl %ecx,%ebx + addl %eax,%ebp + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm6,%xmm6 + shrdl $7,%eax,%eax + xorl %ecx,%edi + movl %ebp,%esi + addl 44(%rsp),%edx + vpxor %xmm10,%xmm6,%xmm6 + xorl %ebx,%eax + shldl $5,%ebp,%ebp + addl %edi,%edx + andl %eax,%esi + xorl %ebx,%eax + addl %ebp,%edx + shrdl $7,%ebp,%ebp + xorl %ebx,%esi + vpalignr $8,%xmm3,%xmm4,%xmm7 + movl %edx,%edi + addl 48(%rsp),%ecx + vpaddd %xmm6,%xmm11,%xmm9 + xorl %eax,%ebp + shldl $5,%edx,%edx + vpsrldq $4,%xmm6,%xmm8 + addl %esi,%ecx + andl %ebp,%edi + vpxor %xmm3,%xmm7,%xmm7 + xorl %eax,%ebp + addl %edx,%ecx + vpxor %xmm5,%xmm8,%xmm8 + shrdl $7,%edx,%edx + xorl %eax,%edi + movl %ecx,%esi + addl 52(%rsp),%ebx + vpxor %xmm8,%xmm7,%xmm7 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + vmovdqa %xmm9,32(%rsp) + addl %edi,%ebx + andl %edx,%esi + vpsrld $31,%xmm7,%xmm8 + xorl %ebp,%edx + addl %ecx,%ebx + shrdl $7,%ecx,%ecx + xorl %ebp,%esi + vpslldq $12,%xmm7,%xmm10 + vpaddd %xmm7,%xmm7,%xmm7 + movl %ebx,%edi + addl 56(%rsp),%eax + xorl %edx,%ecx + shldl $5,%ebx,%ebx + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm7,%xmm7 + addl %esi,%eax + andl %ecx,%edi + xorl %edx,%ecx + addl %ebx,%eax + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm7,%xmm7 + shrdl $7,%ebx,%ebx + xorl %edx,%edi + movl %eax,%esi + addl 60(%rsp),%ebp + vpxor %xmm10,%xmm7,%xmm7 + xorl %ecx,%ebx + shldl $5,%eax,%eax + addl %edi,%ebp + andl %ebx,%esi + xorl %ecx,%ebx + addl %eax,%ebp + vpalignr $8,%xmm6,%xmm7,%xmm8 + vpxor %xmm4,%xmm0,%xmm0 + shrdl $7,%eax,%eax + xorl %ecx,%esi + movl %ebp,%edi + addl 0(%rsp),%edx + vpxor %xmm1,%xmm0,%xmm0 + xorl %ebx,%eax + shldl $5,%ebp,%ebp + vpaddd %xmm7,%xmm11,%xmm9 + addl %esi,%edx + andl %eax,%edi + vpxor %xmm8,%xmm0,%xmm0 + xorl %ebx,%eax + addl %ebp,%edx + shrdl $7,%ebp,%ebp + xorl %ebx,%edi + vpsrld $30,%xmm0,%xmm8 + vmovdqa %xmm9,48(%rsp) + movl %edx,%esi + addl 4(%rsp),%ecx + xorl %eax,%ebp + shldl $5,%edx,%edx + vpslld $2,%xmm0,%xmm0 + addl %edi,%ecx + andl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + shrdl $7,%edx,%edx + xorl %eax,%esi + movl %ecx,%edi + addl 8(%rsp),%ebx + vpor %xmm8,%xmm0,%xmm0 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + addl %esi,%ebx + andl %edx,%edi + xorl %ebp,%edx + addl %ecx,%ebx + addl 12(%rsp),%eax + xorl %ebp,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpalignr $8,%xmm7,%xmm0,%xmm8 + vpxor %xmm5,%xmm1,%xmm1 + addl 16(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + vpxor %xmm2,%xmm1,%xmm1 + addl %esi,%ebp + xorl %ecx,%edi + vpaddd %xmm0,%xmm11,%xmm9 + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpxor %xmm8,%xmm1,%xmm1 + addl 20(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + vpsrld $30,%xmm1,%xmm8 + vmovdqa %xmm9,0(%rsp) + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpslld $2,%xmm1,%xmm1 + addl 24(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpor %xmm8,%xmm1,%xmm1 + addl 28(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpalignr $8,%xmm0,%xmm1,%xmm8 + vpxor %xmm6,%xmm2,%xmm2 + addl 32(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + vpxor %xmm3,%xmm2,%xmm2 + addl %esi,%eax + xorl %edx,%edi + vpaddd %xmm1,%xmm11,%xmm9 + vmovdqa 0(%r14),%xmm11 + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpxor %xmm8,%xmm2,%xmm2 + addl 36(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + vpsrld $30,%xmm2,%xmm8 + vmovdqa %xmm9,16(%rsp) + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpslld $2,%xmm2,%xmm2 + addl 40(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpor %xmm8,%xmm2,%xmm2 + addl 44(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpalignr $8,%xmm1,%xmm2,%xmm8 + vpxor %xmm7,%xmm3,%xmm3 + addl 48(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + vpxor %xmm4,%xmm3,%xmm3 + addl %esi,%ebx + xorl %ebp,%edi + vpaddd %xmm2,%xmm11,%xmm9 + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpxor %xmm8,%xmm3,%xmm3 + addl 52(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + vpsrld $30,%xmm3,%xmm8 + vmovdqa %xmm9,32(%rsp) + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpslld $2,%xmm3,%xmm3 + addl 56(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ecx,%edi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpor %xmm8,%xmm3,%xmm3 + addl 60(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpalignr $8,%xmm2,%xmm3,%xmm8 + vpxor %xmm0,%xmm4,%xmm4 + addl 0(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + vpxor %xmm5,%xmm4,%xmm4 + addl %esi,%ecx + xorl %eax,%edi + vpaddd %xmm3,%xmm11,%xmm9 + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpxor %xmm8,%xmm4,%xmm4 + addl 4(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + vpsrld $30,%xmm4,%xmm8 + vmovdqa %xmm9,48(%rsp) + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpslld $2,%xmm4,%xmm4 + addl 8(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpor %xmm8,%xmm4,%xmm4 + addl 12(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpalignr $8,%xmm3,%xmm4,%xmm8 + vpxor %xmm1,%xmm5,%xmm5 + addl 16(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + vpxor %xmm6,%xmm5,%xmm5 + addl %esi,%edx + xorl %ebx,%edi + vpaddd %xmm4,%xmm11,%xmm9 + shrdl $7,%eax,%eax + addl %ebp,%edx + vpxor %xmm8,%xmm5,%xmm5 + addl 20(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + vpsrld $30,%xmm5,%xmm8 + vmovdqa %xmm9,0(%rsp) + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpslld $2,%xmm5,%xmm5 + addl 24(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpor %xmm8,%xmm5,%xmm5 + addl 28(%rsp),%eax + shrdl $7,%ecx,%ecx + movl %ebx,%esi + xorl %edx,%edi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %ecx,%esi + xorl %edx,%ecx + addl %ebx,%eax + vpalignr $8,%xmm4,%xmm5,%xmm8 + vpxor %xmm2,%xmm6,%xmm6 + addl 32(%rsp),%ebp + andl %ecx,%esi + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + vpxor %xmm7,%xmm6,%xmm6 + movl %eax,%edi + xorl %ecx,%esi + vpaddd %xmm5,%xmm11,%xmm9 + shldl $5,%eax,%eax + addl %esi,%ebp + vpxor %xmm8,%xmm6,%xmm6 + xorl %ebx,%edi + xorl %ecx,%ebx + addl %eax,%ebp + addl 36(%rsp),%edx + vpsrld $30,%xmm6,%xmm8 + vmovdqa %xmm9,16(%rsp) + andl %ebx,%edi + xorl %ecx,%ebx + shrdl $7,%eax,%eax + movl %ebp,%esi + vpslld $2,%xmm6,%xmm6 + xorl %ebx,%edi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %eax,%esi + xorl %ebx,%eax + addl %ebp,%edx + addl 40(%rsp),%ecx + andl %eax,%esi + vpor %xmm8,%xmm6,%xmm6 + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + movl %edx,%edi + xorl %eax,%esi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %ebp,%edi + xorl %eax,%ebp + addl %edx,%ecx + addl 44(%rsp),%ebx + andl %ebp,%edi + xorl %eax,%ebp + shrdl $7,%edx,%edx + movl %ecx,%esi + xorl %ebp,%edi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %edx,%esi + xorl %ebp,%edx + addl %ecx,%ebx + vpalignr $8,%xmm5,%xmm6,%xmm8 + vpxor %xmm3,%xmm7,%xmm7 + addl 48(%rsp),%eax + andl %edx,%esi + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + vpxor %xmm0,%xmm7,%xmm7 + movl %ebx,%edi + xorl %edx,%esi + vpaddd %xmm6,%xmm11,%xmm9 + vmovdqa 32(%r14),%xmm11 + shldl $5,%ebx,%ebx + addl %esi,%eax + vpxor %xmm8,%xmm7,%xmm7 + xorl %ecx,%edi + xorl %edx,%ecx + addl %ebx,%eax + addl 52(%rsp),%ebp + vpsrld $30,%xmm7,%xmm8 + vmovdqa %xmm9,32(%rsp) + andl %ecx,%edi + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + movl %eax,%esi + vpslld $2,%xmm7,%xmm7 + xorl %ecx,%edi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ebx,%esi + xorl %ecx,%ebx + addl %eax,%ebp + addl 56(%rsp),%edx + andl %ebx,%esi + vpor %xmm8,%xmm7,%xmm7 + xorl %ecx,%ebx + shrdl $7,%eax,%eax + movl %ebp,%edi + xorl %ebx,%esi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %eax,%edi + xorl %ebx,%eax + addl %ebp,%edx + addl 60(%rsp),%ecx + andl %eax,%edi + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + movl %edx,%esi + xorl %eax,%edi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + vpalignr $8,%xmm6,%xmm7,%xmm8 + vpxor %xmm4,%xmm0,%xmm0 + addl 0(%rsp),%ebx + andl %ebp,%esi + xorl %eax,%ebp + shrdl $7,%edx,%edx + vpxor %xmm1,%xmm0,%xmm0 + movl %ecx,%edi + xorl %ebp,%esi + vpaddd %xmm7,%xmm11,%xmm9 + shldl $5,%ecx,%ecx + addl %esi,%ebx + vpxor %xmm8,%xmm0,%xmm0 + xorl %edx,%edi + xorl %ebp,%edx + addl %ecx,%ebx + addl 4(%rsp),%eax + vpsrld $30,%xmm0,%xmm8 + vmovdqa %xmm9,48(%rsp) + andl %edx,%edi + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + movl %ebx,%esi + vpslld $2,%xmm0,%xmm0 + xorl %edx,%edi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %ecx,%esi + xorl %edx,%ecx + addl %ebx,%eax + addl 8(%rsp),%ebp + andl %ecx,%esi + vpor %xmm8,%xmm0,%xmm0 + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + movl %eax,%edi + xorl %ecx,%esi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ebx,%edi + xorl %ecx,%ebx + addl %eax,%ebp + addl 12(%rsp),%edx + andl %ebx,%edi + xorl %ecx,%ebx + shrdl $7,%eax,%eax + movl %ebp,%esi + xorl %ebx,%edi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %eax,%esi + xorl %ebx,%eax + addl %ebp,%edx + vpalignr $8,%xmm7,%xmm0,%xmm8 + vpxor %xmm5,%xmm1,%xmm1 + addl 16(%rsp),%ecx + andl %eax,%esi + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + vpxor %xmm2,%xmm1,%xmm1 + movl %edx,%edi + xorl %eax,%esi + vpaddd %xmm0,%xmm11,%xmm9 + shldl $5,%edx,%edx + addl %esi,%ecx + vpxor %xmm8,%xmm1,%xmm1 + xorl %ebp,%edi + xorl %eax,%ebp + addl %edx,%ecx + addl 20(%rsp),%ebx + vpsrld $30,%xmm1,%xmm8 + vmovdqa %xmm9,0(%rsp) + andl %ebp,%edi + xorl %eax,%ebp + shrdl $7,%edx,%edx + movl %ecx,%esi + vpslld $2,%xmm1,%xmm1 + xorl %ebp,%edi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %edx,%esi + xorl %ebp,%edx + addl %ecx,%ebx + addl 24(%rsp),%eax + andl %edx,%esi + vpor %xmm8,%xmm1,%xmm1 + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + movl %ebx,%edi + xorl %edx,%esi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %ecx,%edi + xorl %edx,%ecx + addl %ebx,%eax + addl 28(%rsp),%ebp + andl %ecx,%edi + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + movl %eax,%esi + xorl %ecx,%edi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ebx,%esi + xorl %ecx,%ebx + addl %eax,%ebp + vpalignr $8,%xmm0,%xmm1,%xmm8 + vpxor %xmm6,%xmm2,%xmm2 + addl 32(%rsp),%edx + andl %ebx,%esi + xorl %ecx,%ebx + shrdl $7,%eax,%eax + vpxor %xmm3,%xmm2,%xmm2 + movl %ebp,%edi + xorl %ebx,%esi + vpaddd %xmm1,%xmm11,%xmm9 + shldl $5,%ebp,%ebp + addl %esi,%edx + vpxor %xmm8,%xmm2,%xmm2 + xorl %eax,%edi + xorl %ebx,%eax + addl %ebp,%edx + addl 36(%rsp),%ecx + vpsrld $30,%xmm2,%xmm8 + vmovdqa %xmm9,16(%rsp) + andl %eax,%edi + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + movl %edx,%esi + vpslld $2,%xmm2,%xmm2 + xorl %eax,%edi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + addl 40(%rsp),%ebx + andl %ebp,%esi + vpor %xmm8,%xmm2,%xmm2 + xorl %eax,%ebp + shrdl $7,%edx,%edx + movl %ecx,%edi + xorl %ebp,%esi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %edx,%edi + xorl %ebp,%edx + addl %ecx,%ebx + addl 44(%rsp),%eax + andl %edx,%edi + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + movl %ebx,%esi + xorl %edx,%edi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + addl %ebx,%eax + vpalignr $8,%xmm1,%xmm2,%xmm8 + vpxor %xmm7,%xmm3,%xmm3 + addl 48(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + vpxor %xmm4,%xmm3,%xmm3 + addl %esi,%ebp + xorl %ecx,%edi + vpaddd %xmm2,%xmm11,%xmm9 + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpxor %xmm8,%xmm3,%xmm3 + addl 52(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + vpsrld $30,%xmm3,%xmm8 + vmovdqa %xmm9,32(%rsp) + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpslld $2,%xmm3,%xmm3 + addl 56(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpor %xmm8,%xmm3,%xmm3 + addl 60(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 0(%rsp),%eax + vpaddd %xmm3,%xmm11,%xmm9 + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + vmovdqa %xmm9,48(%rsp) + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 4(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 8(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 12(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + cmpq %r10,%r9 + je .Ldone_avx + vmovdqa 64(%r14),%xmm6 + vmovdqa -64(%r14),%xmm11 + vmovdqu 0(%r9),%xmm0 + vmovdqu 16(%r9),%xmm1 + vmovdqu 32(%r9),%xmm2 + vmovdqu 48(%r9),%xmm3 + vpshufb %xmm6,%xmm0,%xmm0 + addq $64,%r9 + addl 16(%rsp),%ebx + xorl %ebp,%esi + vpshufb %xmm6,%xmm1,%xmm1 + movl %ecx,%edi + shldl $5,%ecx,%ecx + vpaddd %xmm11,%xmm0,%xmm4 + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vmovdqa %xmm4,0(%rsp) + addl 20(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 24(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ecx,%edi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 28(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 32(%rsp),%ecx + xorl %eax,%esi + vpshufb %xmm6,%xmm2,%xmm2 + movl %edx,%edi + shldl $5,%edx,%edx + vpaddd %xmm11,%xmm1,%xmm5 + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vmovdqa %xmm5,16(%rsp) + addl 36(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 40(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 44(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 48(%rsp),%edx + xorl %ebx,%esi + vpshufb %xmm6,%xmm3,%xmm3 + movl %ebp,%edi + shldl $5,%ebp,%ebp + vpaddd %xmm11,%xmm2,%xmm6 + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + vmovdqa %xmm6,32(%rsp) + addl 52(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + addl 56(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 60(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 0(%r8),%eax + addl 4(%r8),%esi + addl 8(%r8),%ecx + addl 12(%r8),%edx + movl %eax,0(%r8) + addl 16(%r8),%ebp + movl %esi,4(%r8) + movl %esi,%ebx + movl %ecx,8(%r8) + movl %ecx,%edi + movl %edx,12(%r8) + xorl %edx,%edi + movl %ebp,16(%r8) + andl %edi,%esi + jmp .Loop_avx + +.align 16 +.Ldone_avx: + addl 16(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 20(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 24(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ecx,%edi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 28(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 32(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + addl 36(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 40(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 44(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 48(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 52(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + addl 56(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 60(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vzeroupper + + addl 0(%r8),%eax + addl 4(%r8),%esi + addl 8(%r8),%ecx + movl %eax,0(%r8) + addl 12(%r8),%edx + movl %esi,4(%r8) + addl 16(%r8),%ebp + movl %ecx,8(%r8) + movl %edx,12(%r8) + movl %ebp,16(%r8) + movq -40(%r11),%r14 +.cfi_restore %r14 + movq -32(%r11),%r13 +.cfi_restore %r13 + movq -24(%r11),%r12 +.cfi_restore %r12 + movq -16(%r11),%rbp +.cfi_restore %rbp + movq -8(%r11),%rbx +.cfi_restore %rbx + leaq (%r11),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue_avx: + .byte 0xf3,0xc3 +.cfi_endproc +.size sha1_block_data_order_avx,.-sha1_block_data_order_avx +.type sha1_block_data_order_avx2,@function +.align 16 +sha1_block_data_order_avx2: +_avx2_shortcut: +.cfi_startproc + movq %rsp,%r11 +.cfi_def_cfa_register %r11 + pushq %rbx +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 + vzeroupper + movq %rdi,%r8 + movq %rsi,%r9 + movq %rdx,%r10 + + leaq -640(%rsp),%rsp + shlq $6,%r10 + leaq 64(%r9),%r13 + andq $-128,%rsp + addq %r9,%r10 + leaq K_XX_XX+64(%rip),%r14 + + movl 0(%r8),%eax + cmpq %r10,%r13 + cmovaeq %r9,%r13 + movl 4(%r8),%ebp + movl 8(%r8),%ecx + movl 12(%r8),%edx + movl 16(%r8),%esi + vmovdqu 64(%r14),%ymm6 + + vmovdqu (%r9),%xmm0 + vmovdqu 16(%r9),%xmm1 + vmovdqu 32(%r9),%xmm2 + vmovdqu 48(%r9),%xmm3 + leaq 64(%r9),%r9 + vinserti128 $1,(%r13),%ymm0,%ymm0 + vinserti128 $1,16(%r13),%ymm1,%ymm1 + vpshufb %ymm6,%ymm0,%ymm0 + vinserti128 $1,32(%r13),%ymm2,%ymm2 + vpshufb %ymm6,%ymm1,%ymm1 + vinserti128 $1,48(%r13),%ymm3,%ymm3 + vpshufb %ymm6,%ymm2,%ymm2 + vmovdqu -64(%r14),%ymm11 + vpshufb %ymm6,%ymm3,%ymm3 + + vpaddd %ymm11,%ymm0,%ymm4 + vpaddd %ymm11,%ymm1,%ymm5 + vmovdqu %ymm4,0(%rsp) + vpaddd %ymm11,%ymm2,%ymm6 + vmovdqu %ymm5,32(%rsp) + vpaddd %ymm11,%ymm3,%ymm7 + vmovdqu %ymm6,64(%rsp) + vmovdqu %ymm7,96(%rsp) + vpalignr $8,%ymm0,%ymm1,%ymm4 + vpsrldq $4,%ymm3,%ymm8 + vpxor %ymm0,%ymm4,%ymm4 + vpxor %ymm2,%ymm8,%ymm8 + vpxor %ymm8,%ymm4,%ymm4 + vpsrld $31,%ymm4,%ymm8 + vpslldq $12,%ymm4,%ymm10 + vpaddd %ymm4,%ymm4,%ymm4 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm4,%ymm4 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm4,%ymm4 + vpxor %ymm10,%ymm4,%ymm4 + vpaddd %ymm11,%ymm4,%ymm9 + vmovdqu %ymm9,128(%rsp) + vpalignr $8,%ymm1,%ymm2,%ymm5 + vpsrldq $4,%ymm4,%ymm8 + vpxor %ymm1,%ymm5,%ymm5 + vpxor %ymm3,%ymm8,%ymm8 + vpxor %ymm8,%ymm5,%ymm5 + vpsrld $31,%ymm5,%ymm8 + vmovdqu -32(%r14),%ymm11 + vpslldq $12,%ymm5,%ymm10 + vpaddd %ymm5,%ymm5,%ymm5 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm5,%ymm5 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm5,%ymm5 + vpxor %ymm10,%ymm5,%ymm5 + vpaddd %ymm11,%ymm5,%ymm9 + vmovdqu %ymm9,160(%rsp) + vpalignr $8,%ymm2,%ymm3,%ymm6 + vpsrldq $4,%ymm5,%ymm8 + vpxor %ymm2,%ymm6,%ymm6 + vpxor %ymm4,%ymm8,%ymm8 + vpxor %ymm8,%ymm6,%ymm6 + vpsrld $31,%ymm6,%ymm8 + vpslldq $12,%ymm6,%ymm10 + vpaddd %ymm6,%ymm6,%ymm6 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm6,%ymm6 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm6,%ymm6 + vpxor %ymm10,%ymm6,%ymm6 + vpaddd %ymm11,%ymm6,%ymm9 + vmovdqu %ymm9,192(%rsp) + vpalignr $8,%ymm3,%ymm4,%ymm7 + vpsrldq $4,%ymm6,%ymm8 + vpxor %ymm3,%ymm7,%ymm7 + vpxor %ymm5,%ymm8,%ymm8 + vpxor %ymm8,%ymm7,%ymm7 + vpsrld $31,%ymm7,%ymm8 + vpslldq $12,%ymm7,%ymm10 + vpaddd %ymm7,%ymm7,%ymm7 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm7,%ymm7 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm7,%ymm7 + vpxor %ymm10,%ymm7,%ymm7 + vpaddd %ymm11,%ymm7,%ymm9 + vmovdqu %ymm9,224(%rsp) + leaq 128(%rsp),%r13 + jmp .Loop_avx2 +.align 32 +.Loop_avx2: + rorxl $2,%ebp,%ebx + andnl %edx,%ebp,%edi + andl %ecx,%ebp + xorl %edi,%ebp + jmp .Lalign32_1 +.align 32 +.Lalign32_1: + vpalignr $8,%ymm6,%ymm7,%ymm8 + vpxor %ymm4,%ymm0,%ymm0 + addl -128(%r13),%esi + andnl %ecx,%eax,%edi + vpxor %ymm1,%ymm0,%ymm0 + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + vpxor %ymm8,%ymm0,%ymm0 + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + vpsrld $30,%ymm0,%ymm8 + vpslld $2,%ymm0,%ymm0 + addl -124(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + vpor %ymm8,%ymm0,%ymm0 + addl %r12d,%edx + xorl %edi,%esi + addl -120(%r13),%ecx + andnl %ebp,%edx,%edi + vpaddd %ymm11,%ymm0,%ymm9 + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + vmovdqu %ymm9,256(%rsp) + addl %r12d,%ecx + xorl %edi,%edx + addl -116(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl -96(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + vpalignr $8,%ymm7,%ymm0,%ymm8 + vpxor %ymm5,%ymm1,%ymm1 + addl -92(%r13),%eax + andnl %edx,%ebp,%edi + vpxor %ymm2,%ymm1,%ymm1 + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + vpxor %ymm8,%ymm1,%ymm1 + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + vpsrld $30,%ymm1,%ymm8 + vpslld $2,%ymm1,%ymm1 + addl -88(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + vpor %ymm8,%ymm1,%ymm1 + addl %r12d,%esi + xorl %edi,%eax + addl -84(%r13),%edx + andnl %ebx,%esi,%edi + vpaddd %ymm11,%ymm1,%ymm9 + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + vmovdqu %ymm9,288(%rsp) + addl %r12d,%edx + xorl %edi,%esi + addl -64(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -60(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + vpalignr $8,%ymm0,%ymm1,%ymm8 + vpxor %ymm6,%ymm2,%ymm2 + addl -56(%r13),%ebp + andnl %esi,%ebx,%edi + vpxor %ymm3,%ymm2,%ymm2 + vmovdqu 0(%r14),%ymm11 + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + vpxor %ymm8,%ymm2,%ymm2 + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + vpsrld $30,%ymm2,%ymm8 + vpslld $2,%ymm2,%ymm2 + addl -52(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + vpor %ymm8,%ymm2,%ymm2 + addl %r12d,%eax + xorl %edi,%ebp + addl -32(%r13),%esi + andnl %ecx,%eax,%edi + vpaddd %ymm11,%ymm2,%ymm9 + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + vmovdqu %ymm9,320(%rsp) + addl %r12d,%esi + xorl %edi,%eax + addl -28(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -24(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + vpalignr $8,%ymm1,%ymm2,%ymm8 + vpxor %ymm7,%ymm3,%ymm3 + addl -20(%r13),%ebx + andnl %eax,%ecx,%edi + vpxor %ymm4,%ymm3,%ymm3 + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + vpxor %ymm8,%ymm3,%ymm3 + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + vpsrld $30,%ymm3,%ymm8 + vpslld $2,%ymm3,%ymm3 + addl 0(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + vpor %ymm8,%ymm3,%ymm3 + addl %r12d,%ebp + xorl %edi,%ebx + addl 4(%r13),%eax + andnl %edx,%ebp,%edi + vpaddd %ymm11,%ymm3,%ymm9 + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + vmovdqu %ymm9,352(%rsp) + addl %r12d,%eax + xorl %edi,%ebp + addl 8(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl 12(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + vpalignr $8,%ymm2,%ymm3,%ymm8 + vpxor %ymm0,%ymm4,%ymm4 + addl 32(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + vpxor %ymm5,%ymm4,%ymm4 + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + vpxor %ymm8,%ymm4,%ymm4 + addl %r12d,%ecx + xorl %ebp,%edx + addl 36(%r13),%ebx + vpsrld $30,%ymm4,%ymm8 + vpslld $2,%ymm4,%ymm4 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + vpor %ymm8,%ymm4,%ymm4 + addl 40(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + vpaddd %ymm11,%ymm4,%ymm9 + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 44(%r13),%eax + vmovdqu %ymm9,384(%rsp) + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl 64(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vpalignr $8,%ymm3,%ymm4,%ymm8 + vpxor %ymm1,%ymm5,%ymm5 + addl 68(%r13),%edx + leal (%rdx,%rax,1),%edx + vpxor %ymm6,%ymm5,%ymm5 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + vpxor %ymm8,%ymm5,%ymm5 + addl %r12d,%edx + xorl %ebx,%esi + addl 72(%r13),%ecx + vpsrld $30,%ymm5,%ymm8 + vpslld $2,%ymm5,%ymm5 + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + vpor %ymm8,%ymm5,%ymm5 + addl 76(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + vpaddd %ymm11,%ymm5,%ymm9 + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl 96(%r13),%ebp + vmovdqu %ymm9,416(%rsp) + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 100(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpalignr $8,%ymm4,%ymm5,%ymm8 + vpxor %ymm2,%ymm6,%ymm6 + addl 104(%r13),%esi + leal (%rsi,%rbp,1),%esi + vpxor %ymm7,%ymm6,%ymm6 + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + vpxor %ymm8,%ymm6,%ymm6 + addl %r12d,%esi + xorl %ecx,%eax + addl 108(%r13),%edx + leaq 256(%r13),%r13 + vpsrld $30,%ymm6,%ymm8 + vpslld $2,%ymm6,%ymm6 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + vpor %ymm8,%ymm6,%ymm6 + addl -128(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + vpaddd %ymm11,%ymm6,%ymm9 + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -124(%r13),%ebx + vmovdqu %ymm9,448(%rsp) + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -120(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vpalignr $8,%ymm5,%ymm6,%ymm8 + vpxor %ymm3,%ymm7,%ymm7 + addl -116(%r13),%eax + leal (%rax,%rbx,1),%eax + vpxor %ymm0,%ymm7,%ymm7 + vmovdqu 32(%r14),%ymm11 + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + vpxor %ymm8,%ymm7,%ymm7 + addl %r12d,%eax + xorl %edx,%ebp + addl -96(%r13),%esi + vpsrld $30,%ymm7,%ymm8 + vpslld $2,%ymm7,%ymm7 + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vpor %ymm8,%ymm7,%ymm7 + addl -92(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpaddd %ymm11,%ymm7,%ymm9 + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -88(%r13),%ecx + vmovdqu %ymm9,480(%rsp) + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -84(%r13),%ebx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + jmp .Lalign32_2 +.align 32 +.Lalign32_2: + vpalignr $8,%ymm6,%ymm7,%ymm8 + vpxor %ymm4,%ymm0,%ymm0 + addl -64(%r13),%ebp + xorl %esi,%ecx + vpxor %ymm1,%ymm0,%ymm0 + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + vpxor %ymm8,%ymm0,%ymm0 + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + vpsrld $30,%ymm0,%ymm8 + vpslld $2,%ymm0,%ymm0 + addl %r12d,%ebp + andl %edi,%ebx + addl -60(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + vpor %ymm8,%ymm0,%ymm0 + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + vpaddd %ymm11,%ymm0,%ymm9 + addl %r12d,%eax + andl %edi,%ebp + addl -56(%r13),%esi + xorl %ecx,%ebp + vmovdqu %ymm9,512(%rsp) + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl -52(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + andl %edi,%esi + addl -32(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + andl %edi,%edx + vpalignr $8,%ymm7,%ymm0,%ymm8 + vpxor %ymm5,%ymm1,%ymm1 + addl -28(%r13),%ebx + xorl %eax,%edx + vpxor %ymm2,%ymm1,%ymm1 + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + vpxor %ymm8,%ymm1,%ymm1 + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + vpsrld $30,%ymm1,%ymm8 + vpslld $2,%ymm1,%ymm1 + addl %r12d,%ebx + andl %edi,%ecx + addl -24(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + vpor %ymm8,%ymm1,%ymm1 + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + vpaddd %ymm11,%ymm1,%ymm9 + addl %r12d,%ebp + andl %edi,%ebx + addl -20(%r13),%eax + xorl %edx,%ebx + vmovdqu %ymm9,544(%rsp) + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 0(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl 4(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + andl %edi,%esi + vpalignr $8,%ymm0,%ymm1,%ymm8 + vpxor %ymm6,%ymm2,%ymm2 + addl 8(%r13),%ecx + xorl %ebp,%esi + vpxor %ymm3,%ymm2,%ymm2 + movl %eax,%edi + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + vpxor %ymm8,%ymm2,%ymm2 + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + vpsrld $30,%ymm2,%ymm8 + vpslld $2,%ymm2,%ymm2 + addl %r12d,%ecx + andl %edi,%edx + addl 12(%r13),%ebx + xorl %eax,%edx + movl %esi,%edi + xorl %eax,%edi + vpor %ymm8,%ymm2,%ymm2 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + vpaddd %ymm11,%ymm2,%ymm9 + addl %r12d,%ebx + andl %edi,%ecx + addl 32(%r13),%ebp + xorl %esi,%ecx + vmovdqu %ymm9,576(%rsp) + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 36(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 40(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + vpalignr $8,%ymm1,%ymm2,%ymm8 + vpxor %ymm7,%ymm3,%ymm3 + addl 44(%r13),%edx + xorl %ebx,%eax + vpxor %ymm4,%ymm3,%ymm3 + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + vpxor %ymm8,%ymm3,%ymm3 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + vpsrld $30,%ymm3,%ymm8 + vpslld $2,%ymm3,%ymm3 + addl %r12d,%edx + andl %edi,%esi + addl 64(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + xorl %ebp,%edi + vpor %ymm8,%ymm3,%ymm3 + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + vpaddd %ymm11,%ymm3,%ymm9 + addl %r12d,%ecx + andl %edi,%edx + addl 68(%r13),%ebx + xorl %eax,%edx + vmovdqu %ymm9,608(%rsp) + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + addl 72(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 76(%r13),%eax + xorl %edx,%ebx + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl 96(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl 100(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl 104(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl 108(%r13),%ebx + leaq 256(%r13),%r13 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -128(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -124(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -120(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -116(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -96(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -92(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -88(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -84(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -64(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -60(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -56(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -52(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -32(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -28(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -24(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -20(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + addl %r12d,%edx + leaq 128(%r9),%r13 + leaq 128(%r9),%rdi + cmpq %r10,%r13 + cmovaeq %r9,%r13 + + + addl 0(%r8),%edx + addl 4(%r8),%esi + addl 8(%r8),%ebp + movl %edx,0(%r8) + addl 12(%r8),%ebx + movl %esi,4(%r8) + movl %edx,%eax + addl 16(%r8),%ecx + movl %ebp,%r12d + movl %ebp,8(%r8) + movl %ebx,%edx + + movl %ebx,12(%r8) + movl %esi,%ebp + movl %ecx,16(%r8) + + movl %ecx,%esi + movl %r12d,%ecx + + + cmpq %r10,%r9 + je .Ldone_avx2 + vmovdqu 64(%r14),%ymm6 + cmpq %r10,%rdi + ja .Last_avx2 + + vmovdqu -64(%rdi),%xmm0 + vmovdqu -48(%rdi),%xmm1 + vmovdqu -32(%rdi),%xmm2 + vmovdqu -16(%rdi),%xmm3 + vinserti128 $1,0(%r13),%ymm0,%ymm0 + vinserti128 $1,16(%r13),%ymm1,%ymm1 + vinserti128 $1,32(%r13),%ymm2,%ymm2 + vinserti128 $1,48(%r13),%ymm3,%ymm3 + jmp .Last_avx2 + +.align 32 +.Last_avx2: + leaq 128+16(%rsp),%r13 + rorxl $2,%ebp,%ebx + andnl %edx,%ebp,%edi + andl %ecx,%ebp + xorl %edi,%ebp + subq $-128,%r9 + addl -128(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl -124(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -120(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -116(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl -96(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + addl -92(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + addl -88(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl -84(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -64(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -60(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl -56(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + addl -52(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + addl -32(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl -28(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -24(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -20(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl 0(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + addl 4(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + addl 8(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl 12(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl 32(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl 36(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl 40(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 44(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl 64(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vmovdqu -64(%r14),%ymm11 + vpshufb %ymm6,%ymm0,%ymm0 + addl 68(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl 72(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl 76(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl 96(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 100(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpshufb %ymm6,%ymm1,%ymm1 + vpaddd %ymm11,%ymm0,%ymm8 + addl 104(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl 108(%r13),%edx + leaq 256(%r13),%r13 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -128(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -124(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -120(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vmovdqu %ymm8,0(%rsp) + vpshufb %ymm6,%ymm2,%ymm2 + vpaddd %ymm11,%ymm1,%ymm9 + addl -116(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -96(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -92(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -88(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -84(%r13),%ebx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + vmovdqu %ymm9,32(%rsp) + vpshufb %ymm6,%ymm3,%ymm3 + vpaddd %ymm11,%ymm2,%ymm6 + addl -64(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl -60(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl -56(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl -52(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + andl %edi,%esi + addl -32(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + andl %edi,%edx + jmp .Lalign32_3 +.align 32 +.Lalign32_3: + vmovdqu %ymm6,64(%rsp) + vpaddd %ymm11,%ymm3,%ymm7 + addl -28(%r13),%ebx + xorl %eax,%edx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + addl -24(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl -20(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 0(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl 4(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + andl %edi,%esi + vmovdqu %ymm7,96(%rsp) + addl 8(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + andl %edi,%edx + addl 12(%r13),%ebx + xorl %eax,%edx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + addl 32(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 36(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 40(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + vpalignr $8,%ymm0,%ymm1,%ymm4 + addl 44(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + vpsrldq $4,%ymm3,%ymm8 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpxor %ymm0,%ymm4,%ymm4 + vpxor %ymm2,%ymm8,%ymm8 + xorl %ebp,%esi + addl %r12d,%edx + vpxor %ymm8,%ymm4,%ymm4 + andl %edi,%esi + addl 64(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + vpsrld $31,%ymm4,%ymm8 + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + vpslldq $12,%ymm4,%ymm10 + vpaddd %ymm4,%ymm4,%ymm4 + rorxl $2,%edx,%esi + xorl %eax,%edx + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm4,%ymm4 + addl %r12d,%ecx + andl %edi,%edx + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm4,%ymm4 + addl 68(%r13),%ebx + xorl %eax,%edx + vpxor %ymm10,%ymm4,%ymm4 + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + vpaddd %ymm11,%ymm4,%ymm9 + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + vmovdqu %ymm9,128(%rsp) + addl %r12d,%ebx + andl %edi,%ecx + addl 72(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 76(%r13),%eax + xorl %edx,%ebx + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpalignr $8,%ymm1,%ymm2,%ymm5 + addl 96(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + vpsrldq $4,%ymm4,%ymm8 + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vpxor %ymm1,%ymm5,%ymm5 + vpxor %ymm3,%ymm8,%ymm8 + addl 100(%r13),%edx + leal (%rdx,%rax,1),%edx + vpxor %ymm8,%ymm5,%ymm5 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + vpsrld $31,%ymm5,%ymm8 + vmovdqu -32(%r14),%ymm11 + xorl %ebx,%esi + addl 104(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + vpslldq $12,%ymm5,%ymm10 + vpaddd %ymm5,%ymm5,%ymm5 + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm5,%ymm5 + xorl %eax,%edx + addl %r12d,%ecx + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm5,%ymm5 + xorl %ebp,%edx + addl 108(%r13),%ebx + leaq 256(%r13),%r13 + vpxor %ymm10,%ymm5,%ymm5 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + vpaddd %ymm11,%ymm5,%ymm9 + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + vmovdqu %ymm9,160(%rsp) + addl -128(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vpalignr $8,%ymm2,%ymm3,%ymm6 + addl -124(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + vpsrldq $4,%ymm5,%ymm8 + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpxor %ymm2,%ymm6,%ymm6 + vpxor %ymm4,%ymm8,%ymm8 + addl -120(%r13),%esi + leal (%rsi,%rbp,1),%esi + vpxor %ymm8,%ymm6,%ymm6 + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + vpsrld $31,%ymm6,%ymm8 + xorl %ecx,%eax + addl -116(%r13),%edx + leal (%rdx,%rax,1),%edx + vpslldq $12,%ymm6,%ymm10 + vpaddd %ymm6,%ymm6,%ymm6 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm6,%ymm6 + xorl %ebp,%esi + addl %r12d,%edx + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm6,%ymm6 + xorl %ebx,%esi + addl -96(%r13),%ecx + vpxor %ymm10,%ymm6,%ymm6 + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + vpaddd %ymm11,%ymm6,%ymm9 + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + vmovdqu %ymm9,192(%rsp) + addl -92(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + vpalignr $8,%ymm3,%ymm4,%ymm7 + addl -88(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + vpsrldq $4,%ymm6,%ymm8 + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vpxor %ymm3,%ymm7,%ymm7 + vpxor %ymm5,%ymm8,%ymm8 + addl -84(%r13),%eax + leal (%rax,%rbx,1),%eax + vpxor %ymm8,%ymm7,%ymm7 + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + vpsrld $31,%ymm7,%ymm8 + xorl %edx,%ebp + addl -64(%r13),%esi + leal (%rsi,%rbp,1),%esi + vpslldq $12,%ymm7,%ymm10 + vpaddd %ymm7,%ymm7,%ymm7 + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm7,%ymm7 + xorl %ebx,%eax + addl %r12d,%esi + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm7,%ymm7 + xorl %ecx,%eax + addl -60(%r13),%edx + vpxor %ymm10,%ymm7,%ymm7 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpaddd %ymm11,%ymm7,%ymm9 + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + vmovdqu %ymm9,224(%rsp) + addl -56(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -52(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -32(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -28(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -24(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -20(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + addl %r12d,%edx + leaq 128(%rsp),%r13 + + + addl 0(%r8),%edx + addl 4(%r8),%esi + addl 8(%r8),%ebp + movl %edx,0(%r8) + addl 12(%r8),%ebx + movl %esi,4(%r8) + movl %edx,%eax + addl 16(%r8),%ecx + movl %ebp,%r12d + movl %ebp,8(%r8) + movl %ebx,%edx + + movl %ebx,12(%r8) + movl %esi,%ebp + movl %ecx,16(%r8) + + movl %ecx,%esi + movl %r12d,%ecx + + + cmpq %r10,%r9 + jbe .Loop_avx2 + +.Ldone_avx2: + vzeroupper + movq -40(%r11),%r14 +.cfi_restore %r14 + movq -32(%r11),%r13 +.cfi_restore %r13 + movq -24(%r11),%r12 +.cfi_restore %r12 + movq -16(%r11),%rbp +.cfi_restore %rbp + movq -8(%r11),%rbx +.cfi_restore %rbx + leaq (%r11),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue_avx2: + .byte 0xf3,0xc3 +.cfi_endproc +.size sha1_block_data_order_avx2,.-sha1_block_data_order_avx2 +.align 64 +K_XX_XX: +.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 +.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 +.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 +.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 +.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc +.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc +.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 +.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0 +.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 64 + +.section .note.GNU-stack,"",%progbits diff --git a/lib/accelerated/x86/elf/sha256-ssse3-x86.s b/lib/accelerated/x86/elf/sha256-ssse3-x86.s index 7470ef7407..8d9aaa4a81 100644 --- a/lib/accelerated/x86/elf/sha256-ssse3-x86.s +++ b/lib/accelerated/x86/elf/sha256-ssse3-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "sha512-586.s" .text .globl sha256_block_data_order .type sha256_block_data_order,@function @@ -64,20 +63,6 @@ sha256_block_data_order: movl %edi,4(%esp) movl %eax,8(%esp) movl %ebx,12(%esp) - leal _gnutls_x86_cpuid_s-.L001K256(%ebp),%edx - movl (%edx),%ecx - movl 4(%edx),%edx - testl $1048576,%ecx - jnz .L002loop - testl $2048,%edx - andl $1073741824,%ecx - andl $268435456,%edx - orl %edx,%ecx - cmpl $1342177280,%ecx - je .L003loop_shrd - subl %edi,%eax - cmpl $256,%eax - jae .L004unrolled jmp .L002loop .align 16 .L002loop: @@ -149,7 +134,7 @@ sha256_block_data_order: movl %ecx,28(%esp) movl %edi,32(%esp) .align 16 -.L00500_15: +.L00300_15: movl %edx,%ecx movl 24(%esp),%esi rorl $14,%ecx @@ -187,11 +172,11 @@ sha256_block_data_order: addl $4,%ebp addl %ebx,%eax cmpl $3248222580,%esi - jne .L00500_15 + jne .L00300_15 movl 156(%esp),%ecx - jmp .L00616_63 + jmp .L00416_63 .align 16 -.L00616_63: +.L00416_63: movl %ecx,%ebx movl 104(%esp),%esi rorl $11,%ecx @@ -246,7 +231,7 @@ sha256_block_data_order: addl $4,%ebp addl %ebx,%eax cmpl $3329325298,%esi - jne .L00616_63 + jne .L00416_63 movl 356(%esp),%esi movl 8(%esp),%ebx movl 16(%esp),%ecx @@ -280,8 +265,8 @@ sha256_block_data_order: popl %ebx popl %ebp ret -.align 16 -.L003loop_shrd: +.align 32 +.L005loop_shrd: movl (%edi),%eax movl 4(%edi),%ebx movl 8(%edi),%ecx @@ -350,7 +335,7 @@ sha256_block_data_order: movl %ecx,28(%esp) movl %edi,32(%esp) .align 16 -.L00700_15_shrd: +.L00600_15_shrd: movl %edx,%ecx movl 24(%esp),%esi shrdl $14,%ecx,%ecx @@ -388,11 +373,11 @@ sha256_block_data_order: addl $4,%ebp addl %ebx,%eax cmpl $3248222580,%esi - jne .L00700_15_shrd + jne .L00600_15_shrd movl 156(%esp),%ecx - jmp .L00816_63_shrd + jmp .L00716_63_shrd .align 16 -.L00816_63_shrd: +.L00716_63_shrd: movl %ecx,%ebx movl 104(%esp),%esi shrdl $11,%ecx,%ecx @@ -447,7 +432,7 @@ sha256_block_data_order: addl $4,%ebp addl %ebx,%eax cmpl $3329325298,%esi - jne .L00816_63_shrd + jne .L00716_63_shrd movl 356(%esp),%esi movl 8(%esp),%ebx movl 16(%esp),%ecx @@ -474,7 +459,7 @@ sha256_block_data_order: leal 356(%esp),%esp subl $256,%ebp cmpl 8(%esp),%edi - jb .L003loop_shrd + jb .L005loop_shrd movl 12(%esp),%esp popl %edi popl %esi @@ -485,8 +470,13 @@ sha256_block_data_order: .L001K256: .long 1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298 .long 66051,67438087,134810123,202182159 +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 +.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 +.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 +.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 +.byte 62,0 .align 16 -.L004unrolled: +.L008unrolled: leal -96(%esp),%esp movl (%esi),%eax movl 4(%esi),%ebp @@ -3393,14 +3383,5 @@ sha256_block_data_order: popl %ebp ret .size sha256_block_data_order,.-.L_sha256_block_data_order_begin -.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 -.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 -.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 -.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 -.byte 62,0 -.comm _gnutls_x86_cpuid_s,16,4 - .section .note.GNU-stack,"",%progbits - - diff --git a/lib/accelerated/x86/elf/sha256-ssse3-x86_64.s b/lib/accelerated/x86/elf/sha256-ssse3-x86_64.s new file mode 100644 index 0000000000..4b08e0c85e --- /dev/null +++ b/lib/accelerated/x86/elf/sha256-ssse3-x86_64.s @@ -0,0 +1,5471 @@ +# Copyright (c) 2011-2016, Andy Polyakov +# 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 copyright notices, +# 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 Andy Polyakov nor the names of its +# copyright holder and contributors may be used to endorse or +# promote products derived from this software without specific +# prior written permission. +# +# ALTERNATIVELY, provided that this notice is retained in full, this +# product may be distributed under the terms of the GNU General Public +# License (GPL), in which case the provisions of the GPL apply INSTEAD OF +# those given above. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER 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 COPYRIGHT +# OWNER 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. +# +# *** This file is auto-generated *** +# +.text + + +.globl sha256_block_data_order +.type sha256_block_data_order,@function +.align 16 +sha256_block_data_order: +.cfi_startproc + leaq _gnutls_x86_cpuid_s(%rip),%r11 + movl 0(%r11),%r9d + movl 4(%r11),%r10d + movl 8(%r11),%r11d + testl $536870912,%r11d + jnz _shaext_shortcut + andl $296,%r11d + cmpl $296,%r11d + je .Lavx2_shortcut + andl $1073741824,%r9d + andl $268435968,%r10d + orl %r9d,%r10d + cmpl $1342177792,%r10d + je .Lavx_shortcut + testl $512,%r10d + jnz .Lssse3_shortcut + movq %rsp,%rax +.cfi_def_cfa_register %rax + pushq %rbx +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_offset %r15,-56 + shlq $4,%rdx + subq $64+32,%rsp + leaq (%rsi,%rdx,4),%rdx + andq $-64,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) +.cfi_escape 0x0f,0x06,0x77,0xd8,0x00,0x06,0x23,0x08 +.Lprologue: + + movl 0(%rdi),%eax + movl 4(%rdi),%ebx + movl 8(%rdi),%ecx + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + jmp .Lloop + +.align 16 +.Lloop: + movl %ebx,%edi + leaq K256(%rip),%rbp + xorl %ecx,%edi + movl 0(%rsi),%r12d + movl %r8d,%r13d + movl %eax,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,0(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + addl %r14d,%r11d + movl 4(%rsi),%r12d + movl %edx,%r13d + movl %r11d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,4(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + addl %r14d,%r10d + movl 8(%rsi),%r12d + movl %ecx,%r13d + movl %r10d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,8(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + addl %r14d,%r9d + movl 12(%rsi),%r12d + movl %ebx,%r13d + movl %r9d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,12(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + addl %r14d,%r8d + movl 16(%rsi),%r12d + movl %eax,%r13d + movl %r8d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,16(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + addl %r14d,%edx + movl 20(%rsi),%r12d + movl %r11d,%r13d + movl %edx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,20(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + addl %r14d,%ecx + movl 24(%rsi),%r12d + movl %r10d,%r13d + movl %ecx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,24(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + addl %r14d,%ebx + movl 28(%rsi),%r12d + movl %r9d,%r13d + movl %ebx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,28(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + addl %r14d,%eax + movl 32(%rsi),%r12d + movl %r8d,%r13d + movl %eax,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,32(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + addl %r14d,%r11d + movl 36(%rsi),%r12d + movl %edx,%r13d + movl %r11d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,36(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + addl %r14d,%r10d + movl 40(%rsi),%r12d + movl %ecx,%r13d + movl %r10d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,40(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + addl %r14d,%r9d + movl 44(%rsi),%r12d + movl %ebx,%r13d + movl %r9d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,44(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + addl %r14d,%r8d + movl 48(%rsi),%r12d + movl %eax,%r13d + movl %r8d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,48(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + addl %r14d,%edx + movl 52(%rsi),%r12d + movl %r11d,%r13d + movl %edx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,52(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + addl %r14d,%ecx + movl 56(%rsi),%r12d + movl %r10d,%r13d + movl %ecx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,56(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + addl %r14d,%ebx + movl 60(%rsi),%r12d + movl %r9d,%r13d + movl %ebx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,60(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + jmp .Lrounds_16_xx +.align 16 +.Lrounds_16_xx: + movl 4(%rsp),%r13d + movl 56(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%eax + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 36(%rsp),%r12d + + addl 0(%rsp),%r12d + movl %r8d,%r13d + addl %r15d,%r12d + movl %eax,%r14d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,0(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + movl 8(%rsp),%r13d + movl 60(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r11d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 40(%rsp),%r12d + + addl 4(%rsp),%r12d + movl %edx,%r13d + addl %edi,%r12d + movl %r11d,%r14d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,4(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + movl 12(%rsp),%r13d + movl 0(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r10d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 44(%rsp),%r12d + + addl 8(%rsp),%r12d + movl %ecx,%r13d + addl %r15d,%r12d + movl %r10d,%r14d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,8(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + movl 16(%rsp),%r13d + movl 4(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r9d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 48(%rsp),%r12d + + addl 12(%rsp),%r12d + movl %ebx,%r13d + addl %edi,%r12d + movl %r9d,%r14d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,12(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + movl 20(%rsp),%r13d + movl 8(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r8d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 52(%rsp),%r12d + + addl 16(%rsp),%r12d + movl %eax,%r13d + addl %r15d,%r12d + movl %r8d,%r14d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,16(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + movl 24(%rsp),%r13d + movl 12(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%edx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 56(%rsp),%r12d + + addl 20(%rsp),%r12d + movl %r11d,%r13d + addl %edi,%r12d + movl %edx,%r14d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,20(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + movl 28(%rsp),%r13d + movl 16(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ecx + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 60(%rsp),%r12d + + addl 24(%rsp),%r12d + movl %r10d,%r13d + addl %r15d,%r12d + movl %ecx,%r14d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,24(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + movl 32(%rsp),%r13d + movl 20(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ebx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 0(%rsp),%r12d + + addl 28(%rsp),%r12d + movl %r9d,%r13d + addl %edi,%r12d + movl %ebx,%r14d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,28(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + movl 36(%rsp),%r13d + movl 24(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%eax + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 4(%rsp),%r12d + + addl 32(%rsp),%r12d + movl %r8d,%r13d + addl %r15d,%r12d + movl %eax,%r14d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,32(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + movl 40(%rsp),%r13d + movl 28(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r11d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 8(%rsp),%r12d + + addl 36(%rsp),%r12d + movl %edx,%r13d + addl %edi,%r12d + movl %r11d,%r14d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,36(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + movl 44(%rsp),%r13d + movl 32(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r10d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 12(%rsp),%r12d + + addl 40(%rsp),%r12d + movl %ecx,%r13d + addl %r15d,%r12d + movl %r10d,%r14d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,40(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + movl 48(%rsp),%r13d + movl 36(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r9d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 16(%rsp),%r12d + + addl 44(%rsp),%r12d + movl %ebx,%r13d + addl %edi,%r12d + movl %r9d,%r14d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,44(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + movl 52(%rsp),%r13d + movl 40(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r8d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 20(%rsp),%r12d + + addl 48(%rsp),%r12d + movl %eax,%r13d + addl %r15d,%r12d + movl %r8d,%r14d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,48(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + movl 56(%rsp),%r13d + movl 44(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%edx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 24(%rsp),%r12d + + addl 52(%rsp),%r12d + movl %r11d,%r13d + addl %edi,%r12d + movl %edx,%r14d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,52(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + movl 60(%rsp),%r13d + movl 48(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ecx + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 28(%rsp),%r12d + + addl 56(%rsp),%r12d + movl %r10d,%r13d + addl %r15d,%r12d + movl %ecx,%r14d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,56(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + movl 0(%rsp),%r13d + movl 52(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ebx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 32(%rsp),%r12d + + addl 60(%rsp),%r12d + movl %r9d,%r13d + addl %edi,%r12d + movl %ebx,%r14d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,60(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + cmpb $0,3(%rbp) + jnz .Lrounds_16_xx + + movq 64+0(%rsp),%rdi + addl %r14d,%eax + leaq 64(%rsi),%rsi + + addl 0(%rdi),%eax + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + jb .Lloop + + movq 88(%rsp),%rsi +.cfi_def_cfa %rsi,8 + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue: + .byte 0xf3,0xc3 +.cfi_endproc +.size sha256_block_data_order,.-sha256_block_data_order +.align 64 +.type K256,@object +K256: +.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 +.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 +.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 +.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 +.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 +.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 +.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 +.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 +.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc +.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc +.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da +.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da +.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 +.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 +.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 +.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 +.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 +.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 +.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 +.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 +.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 +.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 +.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 +.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 +.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 +.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 +.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 +.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 +.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 +.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 +.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 + +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff +.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff +.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 +.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.type sha256_block_data_order_shaext,@function +.align 64 +sha256_block_data_order_shaext: +_shaext_shortcut: + leaq K256+128(%rip),%rcx + movdqu (%rdi),%xmm1 + movdqu 16(%rdi),%xmm2 + movdqa 512-128(%rcx),%xmm7 + + pshufd $0x1b,%xmm1,%xmm0 + pshufd $0xb1,%xmm1,%xmm1 + pshufd $0x1b,%xmm2,%xmm2 + movdqa %xmm7,%xmm8 +.byte 102,15,58,15,202,8 + punpcklqdq %xmm0,%xmm2 + jmp .Loop_shaext + +.align 16 +.Loop_shaext: + movdqu (%rsi),%xmm3 + movdqu 16(%rsi),%xmm4 + movdqu 32(%rsi),%xmm5 +.byte 102,15,56,0,223 + movdqu 48(%rsi),%xmm6 + + movdqa 0-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 102,15,56,0,231 + movdqa %xmm2,%xmm10 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + nop + movdqa %xmm1,%xmm9 +.byte 15,56,203,202 + + movdqa 32-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 102,15,56,0,239 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + leaq 64(%rsi),%rsi +.byte 15,56,204,220 +.byte 15,56,203,202 + + movdqa 64-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 102,15,56,0,247 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm6,%xmm7 +.byte 102,15,58,15,253,4 + nop + paddd %xmm7,%xmm3 +.byte 15,56,204,229 +.byte 15,56,203,202 + + movdqa 96-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 +.byte 15,56,205,222 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm3,%xmm7 +.byte 102,15,58,15,254,4 + nop + paddd %xmm7,%xmm4 +.byte 15,56,204,238 +.byte 15,56,203,202 + movdqa 128-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 15,56,205,227 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm4,%xmm7 +.byte 102,15,58,15,251,4 + nop + paddd %xmm7,%xmm5 +.byte 15,56,204,243 +.byte 15,56,203,202 + movdqa 160-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 15,56,205,236 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm5,%xmm7 +.byte 102,15,58,15,252,4 + nop + paddd %xmm7,%xmm6 +.byte 15,56,204,220 +.byte 15,56,203,202 + movdqa 192-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 15,56,205,245 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm6,%xmm7 +.byte 102,15,58,15,253,4 + nop + paddd %xmm7,%xmm3 +.byte 15,56,204,229 +.byte 15,56,203,202 + movdqa 224-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 +.byte 15,56,205,222 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm3,%xmm7 +.byte 102,15,58,15,254,4 + nop + paddd %xmm7,%xmm4 +.byte 15,56,204,238 +.byte 15,56,203,202 + movdqa 256-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 15,56,205,227 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm4,%xmm7 +.byte 102,15,58,15,251,4 + nop + paddd %xmm7,%xmm5 +.byte 15,56,204,243 +.byte 15,56,203,202 + movdqa 288-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 15,56,205,236 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm5,%xmm7 +.byte 102,15,58,15,252,4 + nop + paddd %xmm7,%xmm6 +.byte 15,56,204,220 +.byte 15,56,203,202 + movdqa 320-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 15,56,205,245 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm6,%xmm7 +.byte 102,15,58,15,253,4 + nop + paddd %xmm7,%xmm3 +.byte 15,56,204,229 +.byte 15,56,203,202 + movdqa 352-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 +.byte 15,56,205,222 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm3,%xmm7 +.byte 102,15,58,15,254,4 + nop + paddd %xmm7,%xmm4 +.byte 15,56,204,238 +.byte 15,56,203,202 + movdqa 384-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 15,56,205,227 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm4,%xmm7 +.byte 102,15,58,15,251,4 + nop + paddd %xmm7,%xmm5 +.byte 15,56,204,243 +.byte 15,56,203,202 + movdqa 416-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 15,56,205,236 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm5,%xmm7 +.byte 102,15,58,15,252,4 +.byte 15,56,203,202 + paddd %xmm7,%xmm6 + + movdqa 448-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 +.byte 15,56,205,245 + movdqa %xmm8,%xmm7 +.byte 15,56,203,202 + + movdqa 480-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 + nop +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + decq %rdx + nop +.byte 15,56,203,202 + + paddd %xmm10,%xmm2 + paddd %xmm9,%xmm1 + jnz .Loop_shaext + + pshufd $0xb1,%xmm2,%xmm2 + pshufd $0x1b,%xmm1,%xmm7 + pshufd $0xb1,%xmm1,%xmm1 + punpckhqdq %xmm2,%xmm1 +.byte 102,15,58,15,215,8 + + movdqu %xmm1,(%rdi) + movdqu %xmm2,16(%rdi) + .byte 0xf3,0xc3 +.size sha256_block_data_order_shaext,.-sha256_block_data_order_shaext +.type sha256_block_data_order_ssse3,@function +.align 64 +sha256_block_data_order_ssse3: +.cfi_startproc +.Lssse3_shortcut: + movq %rsp,%rax +.cfi_def_cfa_register %rax + pushq %rbx +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_offset %r15,-56 + shlq $4,%rdx + subq $96,%rsp + leaq (%rsi,%rdx,4),%rdx + andq $-64,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) +.cfi_escape 0x0f,0x06,0x77,0xd8,0x00,0x06,0x23,0x08 +.Lprologue_ssse3: + + movl 0(%rdi),%eax + movl 4(%rdi),%ebx + movl 8(%rdi),%ecx + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + + + jmp .Lloop_ssse3 +.align 16 +.Lloop_ssse3: + movdqa K256+512(%rip),%xmm7 + movdqu 0(%rsi),%xmm0 + movdqu 16(%rsi),%xmm1 + movdqu 32(%rsi),%xmm2 +.byte 102,15,56,0,199 + movdqu 48(%rsi),%xmm3 + leaq K256(%rip),%rbp +.byte 102,15,56,0,207 + movdqa 0(%rbp),%xmm4 + movdqa 32(%rbp),%xmm5 +.byte 102,15,56,0,215 + paddd %xmm0,%xmm4 + movdqa 64(%rbp),%xmm6 +.byte 102,15,56,0,223 + movdqa 96(%rbp),%xmm7 + paddd %xmm1,%xmm5 + paddd %xmm2,%xmm6 + paddd %xmm3,%xmm7 + movdqa %xmm4,0(%rsp) + movl %eax,%r14d + movdqa %xmm5,16(%rsp) + movl %ebx,%edi + movdqa %xmm6,32(%rsp) + xorl %ecx,%edi + movdqa %xmm7,48(%rsp) + movl %r8d,%r13d + jmp .Lssse3_00_47 + +.align 16 +.Lssse3_00_47: + subq $-128,%rbp + rorl $14,%r13d + movdqa %xmm1,%xmm4 + movl %r14d,%eax + movl %r9d,%r12d + movdqa %xmm3,%xmm7 + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d +.byte 102,15,58,15,224,4 + andl %r8d,%r12d + xorl %r8d,%r13d +.byte 102,15,58,15,250,4 + addl 0(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %ebx,%r15d + addl %r12d,%r11d + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + paddd %xmm7,%xmm0 + rorl $2,%r14d + addl %r11d,%edx + psrld $7,%xmm6 + addl %edi,%r11d + movl %edx,%r13d + pshufd $250,%xmm3,%xmm7 + addl %r11d,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%r11d + movl %r8d,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %r11d,%r14d + pxor %xmm5,%xmm4 + andl %edx,%r12d + xorl %edx,%r13d + pslld $11,%xmm5 + addl 4(%rsp),%r10d + movl %r11d,%edi + pxor %xmm6,%xmm4 + xorl %r9d,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %eax,%edi + addl %r12d,%r10d + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + psrld $10,%xmm7 + addl %r13d,%r10d + xorl %eax,%r15d + paddd %xmm4,%xmm0 + rorl $2,%r14d + addl %r10d,%ecx + psrlq $17,%xmm6 + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %ecx,%r13d + xorl %r8d,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %ecx,%r13d + addl 8(%rsp),%r9d + movl %r10d,%r15d + psrldq $8,%xmm7 + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + paddd %xmm7,%xmm0 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + pshufd $80,%xmm0,%xmm7 + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + movdqa %xmm7,%xmm6 + addl %edi,%r9d + movl %ebx,%r13d + psrld $10,%xmm7 + addl %r9d,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%r9d + movl %ecx,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + psrlq $2,%xmm6 + andl %ebx,%r12d + xorl %ebx,%r13d + addl 12(%rsp),%r8d + pxor %xmm6,%xmm7 + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %r10d,%edi + addl %r12d,%r8d + movdqa 0(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + paddd %xmm7,%xmm0 + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + paddd %xmm0,%xmm6 + movl %eax,%r13d + addl %r8d,%r14d + movdqa %xmm6,0(%rsp) + rorl $14,%r13d + movdqa %xmm2,%xmm4 + movl %r14d,%r8d + movl %ebx,%r12d + movdqa %xmm0,%xmm7 + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d +.byte 102,15,58,15,225,4 + andl %eax,%r12d + xorl %eax,%r13d +.byte 102,15,58,15,251,4 + addl 16(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %r9d,%r15d + addl %r12d,%edx + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + paddd %xmm7,%xmm1 + rorl $2,%r14d + addl %edx,%r11d + psrld $7,%xmm6 + addl %edi,%edx + movl %r11d,%r13d + pshufd $250,%xmm0,%xmm7 + addl %edx,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%edx + movl %eax,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %edx,%r14d + pxor %xmm5,%xmm4 + andl %r11d,%r12d + xorl %r11d,%r13d + pslld $11,%xmm5 + addl 20(%rsp),%ecx + movl %edx,%edi + pxor %xmm6,%xmm4 + xorl %ebx,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %r8d,%edi + addl %r12d,%ecx + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + psrld $10,%xmm7 + addl %r13d,%ecx + xorl %r8d,%r15d + paddd %xmm4,%xmm1 + rorl $2,%r14d + addl %ecx,%r10d + psrlq $17,%xmm6 + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %r10d,%r13d + xorl %eax,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %r10d,%r13d + addl 24(%rsp),%ebx + movl %ecx,%r15d + psrldq $8,%xmm7 + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + paddd %xmm7,%xmm1 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + pshufd $80,%xmm1,%xmm7 + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + movdqa %xmm7,%xmm6 + addl %edi,%ebx + movl %r9d,%r13d + psrld $10,%xmm7 + addl %ebx,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%ebx + movl %r10d,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + psrlq $2,%xmm6 + andl %r9d,%r12d + xorl %r9d,%r13d + addl 28(%rsp),%eax + pxor %xmm6,%xmm7 + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %ecx,%edi + addl %r12d,%eax + movdqa 32(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + paddd %xmm7,%xmm1 + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + paddd %xmm1,%xmm6 + movl %r8d,%r13d + addl %eax,%r14d + movdqa %xmm6,16(%rsp) + rorl $14,%r13d + movdqa %xmm3,%xmm4 + movl %r14d,%eax + movl %r9d,%r12d + movdqa %xmm1,%xmm7 + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d +.byte 102,15,58,15,226,4 + andl %r8d,%r12d + xorl %r8d,%r13d +.byte 102,15,58,15,248,4 + addl 32(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %ebx,%r15d + addl %r12d,%r11d + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + paddd %xmm7,%xmm2 + rorl $2,%r14d + addl %r11d,%edx + psrld $7,%xmm6 + addl %edi,%r11d + movl %edx,%r13d + pshufd $250,%xmm1,%xmm7 + addl %r11d,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%r11d + movl %r8d,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %r11d,%r14d + pxor %xmm5,%xmm4 + andl %edx,%r12d + xorl %edx,%r13d + pslld $11,%xmm5 + addl 36(%rsp),%r10d + movl %r11d,%edi + pxor %xmm6,%xmm4 + xorl %r9d,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %eax,%edi + addl %r12d,%r10d + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + psrld $10,%xmm7 + addl %r13d,%r10d + xorl %eax,%r15d + paddd %xmm4,%xmm2 + rorl $2,%r14d + addl %r10d,%ecx + psrlq $17,%xmm6 + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %ecx,%r13d + xorl %r8d,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %ecx,%r13d + addl 40(%rsp),%r9d + movl %r10d,%r15d + psrldq $8,%xmm7 + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + paddd %xmm7,%xmm2 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + pshufd $80,%xmm2,%xmm7 + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + movdqa %xmm7,%xmm6 + addl %edi,%r9d + movl %ebx,%r13d + psrld $10,%xmm7 + addl %r9d,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%r9d + movl %ecx,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + psrlq $2,%xmm6 + andl %ebx,%r12d + xorl %ebx,%r13d + addl 44(%rsp),%r8d + pxor %xmm6,%xmm7 + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %r10d,%edi + addl %r12d,%r8d + movdqa 64(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + paddd %xmm7,%xmm2 + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + paddd %xmm2,%xmm6 + movl %eax,%r13d + addl %r8d,%r14d + movdqa %xmm6,32(%rsp) + rorl $14,%r13d + movdqa %xmm0,%xmm4 + movl %r14d,%r8d + movl %ebx,%r12d + movdqa %xmm2,%xmm7 + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d +.byte 102,15,58,15,227,4 + andl %eax,%r12d + xorl %eax,%r13d +.byte 102,15,58,15,249,4 + addl 48(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %r9d,%r15d + addl %r12d,%edx + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + paddd %xmm7,%xmm3 + rorl $2,%r14d + addl %edx,%r11d + psrld $7,%xmm6 + addl %edi,%edx + movl %r11d,%r13d + pshufd $250,%xmm2,%xmm7 + addl %edx,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%edx + movl %eax,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %edx,%r14d + pxor %xmm5,%xmm4 + andl %r11d,%r12d + xorl %r11d,%r13d + pslld $11,%xmm5 + addl 52(%rsp),%ecx + movl %edx,%edi + pxor %xmm6,%xmm4 + xorl %ebx,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %r8d,%edi + addl %r12d,%ecx + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + psrld $10,%xmm7 + addl %r13d,%ecx + xorl %r8d,%r15d + paddd %xmm4,%xmm3 + rorl $2,%r14d + addl %ecx,%r10d + psrlq $17,%xmm6 + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %r10d,%r13d + xorl %eax,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %r10d,%r13d + addl 56(%rsp),%ebx + movl %ecx,%r15d + psrldq $8,%xmm7 + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + paddd %xmm7,%xmm3 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + pshufd $80,%xmm3,%xmm7 + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + movdqa %xmm7,%xmm6 + addl %edi,%ebx + movl %r9d,%r13d + psrld $10,%xmm7 + addl %ebx,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%ebx + movl %r10d,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + psrlq $2,%xmm6 + andl %r9d,%r12d + xorl %r9d,%r13d + addl 60(%rsp),%eax + pxor %xmm6,%xmm7 + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %ecx,%edi + addl %r12d,%eax + movdqa 96(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + paddd %xmm7,%xmm3 + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + paddd %xmm3,%xmm6 + movl %r8d,%r13d + addl %eax,%r14d + movdqa %xmm6,48(%rsp) + cmpb $0,131(%rbp) + jne .Lssse3_00_47 + rorl $14,%r13d + movl %r14d,%eax + movl %r9d,%r12d + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 0(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + rorl $6,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + rorl $2,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + rorl $14,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 4(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + rorl $11,%r14d + xorl %eax,%edi + addl %r12d,%r10d + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + rorl $2,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 8(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + rorl $14,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 12(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + rorl $6,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + rorl $14,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 16(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + rorl $6,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + rorl $2,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + rorl $14,%r13d + movl %r14d,%edx + movl %eax,%r12d + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 20(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + rorl $11,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + rorl $2,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 24(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + rorl $14,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 28(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + xorl %ecx,%edi + addl %r12d,%eax + rorl $6,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + rorl $14,%r13d + movl %r14d,%eax + movl %r9d,%r12d + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 32(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + rorl $6,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + rorl $2,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + rorl $14,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 36(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + rorl $11,%r14d + xorl %eax,%edi + addl %r12d,%r10d + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + rorl $2,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 40(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + rorl $14,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 44(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + rorl $6,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + rorl $14,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 48(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + rorl $6,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + rorl $2,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + rorl $14,%r13d + movl %r14d,%edx + movl %eax,%r12d + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 52(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + rorl $11,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + rorl $2,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 56(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + rorl $14,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 60(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + xorl %ecx,%edi + addl %r12d,%eax + rorl $6,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + movq 64+0(%rsp),%rdi + movl %r14d,%eax + + addl 0(%rdi),%eax + leaq 64(%rsi),%rsi + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + jb .Lloop_ssse3 + + movq 88(%rsp),%rsi +.cfi_def_cfa %rsi,8 + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue_ssse3: + .byte 0xf3,0xc3 +.cfi_endproc +.size sha256_block_data_order_ssse3,.-sha256_block_data_order_ssse3 +.type sha256_block_data_order_avx,@function +.align 64 +sha256_block_data_order_avx: +.cfi_startproc +.Lavx_shortcut: + movq %rsp,%rax +.cfi_def_cfa_register %rax + pushq %rbx +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_offset %r15,-56 + shlq $4,%rdx + subq $96,%rsp + leaq (%rsi,%rdx,4),%rdx + andq $-64,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) +.cfi_escape 0x0f,0x06,0x77,0xd8,0x00,0x06,0x23,0x08 +.Lprologue_avx: + + vzeroupper + movl 0(%rdi),%eax + movl 4(%rdi),%ebx + movl 8(%rdi),%ecx + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + vmovdqa K256+512+32(%rip),%xmm8 + vmovdqa K256+512+64(%rip),%xmm9 + jmp .Lloop_avx +.align 16 +.Lloop_avx: + vmovdqa K256+512(%rip),%xmm7 + vmovdqu 0(%rsi),%xmm0 + vmovdqu 16(%rsi),%xmm1 + vmovdqu 32(%rsi),%xmm2 + vmovdqu 48(%rsi),%xmm3 + vpshufb %xmm7,%xmm0,%xmm0 + leaq K256(%rip),%rbp + vpshufb %xmm7,%xmm1,%xmm1 + vpshufb %xmm7,%xmm2,%xmm2 + vpaddd 0(%rbp),%xmm0,%xmm4 + vpshufb %xmm7,%xmm3,%xmm3 + vpaddd 32(%rbp),%xmm1,%xmm5 + vpaddd 64(%rbp),%xmm2,%xmm6 + vpaddd 96(%rbp),%xmm3,%xmm7 + vmovdqa %xmm4,0(%rsp) + movl %eax,%r14d + vmovdqa %xmm5,16(%rsp) + movl %ebx,%edi + vmovdqa %xmm6,32(%rsp) + xorl %ecx,%edi + vmovdqa %xmm7,48(%rsp) + movl %r8d,%r13d + jmp .Lavx_00_47 + +.align 16 +.Lavx_00_47: + subq $-128,%rbp + vpalignr $4,%xmm0,%xmm1,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + vpalignr $4,%xmm2,%xmm3,%xmm7 + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + vpaddd %xmm7,%xmm0,%xmm0 + xorl %r8d,%r13d + addl 0(%rsp),%r11d + movl %eax,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + vpshufd $250,%xmm3,%xmm7 + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + vpsrld $11,%xmm6,%xmm6 + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 4(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + vpaddd %xmm4,%xmm0,%xmm0 + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + vpxor %xmm7,%xmm6,%xmm6 + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + vpaddd %xmm6,%xmm0,%xmm0 + andl %ecx,%r12d + xorl %ecx,%r13d + addl 8(%rsp),%r9d + vpshufd $80,%xmm0,%xmm7 + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + vpxor %xmm7,%xmm6,%xmm6 + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + vpaddd %xmm6,%xmm0,%xmm0 + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + vpaddd 0(%rbp),%xmm0,%xmm6 + xorl %ebx,%r13d + addl 12(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + vmovdqa %xmm6,0(%rsp) + vpalignr $4,%xmm1,%xmm2,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + vpalignr $4,%xmm3,%xmm0,%xmm7 + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + vpaddd %xmm7,%xmm1,%xmm1 + xorl %eax,%r13d + addl 16(%rsp),%edx + movl %r8d,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + vpshufd $250,%xmm0,%xmm7 + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + vpsrld $11,%xmm6,%xmm6 + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 20(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + vpaddd %xmm4,%xmm1,%xmm1 + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + vpxor %xmm7,%xmm6,%xmm6 + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + vpaddd %xmm6,%xmm1,%xmm1 + andl %r10d,%r12d + xorl %r10d,%r13d + addl 24(%rsp),%ebx + vpshufd $80,%xmm1,%xmm7 + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + vpxor %xmm7,%xmm6,%xmm6 + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + vpaddd %xmm6,%xmm1,%xmm1 + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + vpaddd 32(%rbp),%xmm1,%xmm6 + xorl %r9d,%r13d + addl 28(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + vmovdqa %xmm6,16(%rsp) + vpalignr $4,%xmm2,%xmm3,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + vpalignr $4,%xmm0,%xmm1,%xmm7 + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + vpaddd %xmm7,%xmm2,%xmm2 + xorl %r8d,%r13d + addl 32(%rsp),%r11d + movl %eax,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + vpshufd $250,%xmm1,%xmm7 + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + vpsrld $11,%xmm6,%xmm6 + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 36(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + vpaddd %xmm4,%xmm2,%xmm2 + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + vpxor %xmm7,%xmm6,%xmm6 + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + vpaddd %xmm6,%xmm2,%xmm2 + andl %ecx,%r12d + xorl %ecx,%r13d + addl 40(%rsp),%r9d + vpshufd $80,%xmm2,%xmm7 + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + vpxor %xmm7,%xmm6,%xmm6 + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + vpaddd %xmm6,%xmm2,%xmm2 + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + vpaddd 64(%rbp),%xmm2,%xmm6 + xorl %ebx,%r13d + addl 44(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + vmovdqa %xmm6,32(%rsp) + vpalignr $4,%xmm3,%xmm0,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + vpalignr $4,%xmm1,%xmm2,%xmm7 + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + vpaddd %xmm7,%xmm3,%xmm3 + xorl %eax,%r13d + addl 48(%rsp),%edx + movl %r8d,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + vpshufd $250,%xmm2,%xmm7 + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + vpsrld $11,%xmm6,%xmm6 + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 52(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + vpaddd %xmm4,%xmm3,%xmm3 + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + vpxor %xmm7,%xmm6,%xmm6 + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + vpaddd %xmm6,%xmm3,%xmm3 + andl %r10d,%r12d + xorl %r10d,%r13d + addl 56(%rsp),%ebx + vpshufd $80,%xmm3,%xmm7 + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + vpxor %xmm7,%xmm6,%xmm6 + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + vpaddd %xmm6,%xmm3,%xmm3 + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + vpaddd 96(%rbp),%xmm3,%xmm6 + xorl %r9d,%r13d + addl 60(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + vmovdqa %xmm6,48(%rsp) + cmpb $0,131(%rbp) + jne .Lavx_00_47 + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 0(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 4(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 8(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 12(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 16(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 20(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 24(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 28(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 32(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 36(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 40(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 44(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 48(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 52(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 56(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 60(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + movq 64+0(%rsp),%rdi + movl %r14d,%eax + + addl 0(%rdi),%eax + leaq 64(%rsi),%rsi + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + jb .Lloop_avx + + movq 88(%rsp),%rsi +.cfi_def_cfa %rsi,8 + vzeroupper + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue_avx: + .byte 0xf3,0xc3 +.cfi_endproc +.size sha256_block_data_order_avx,.-sha256_block_data_order_avx +.type sha256_block_data_order_avx2,@function +.align 64 +sha256_block_data_order_avx2: +.cfi_startproc +.Lavx2_shortcut: + movq %rsp,%rax +.cfi_def_cfa_register %rax + pushq %rbx +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_offset %r15,-56 + subq $544,%rsp + shlq $4,%rdx + andq $-1024,%rsp + leaq (%rsi,%rdx,4),%rdx + addq $448,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) +.cfi_escape 0x0f,0x06,0x77,0xd8,0x00,0x06,0x23,0x08 +.Lprologue_avx2: + + vzeroupper + subq $-64,%rsi + movl 0(%rdi),%eax + movq %rsi,%r12 + movl 4(%rdi),%ebx + cmpq %rdx,%rsi + movl 8(%rdi),%ecx + cmoveq %rsp,%r12 + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + vmovdqa K256+512+32(%rip),%ymm8 + vmovdqa K256+512+64(%rip),%ymm9 + jmp .Loop_avx2 +.align 16 +.Loop_avx2: + vmovdqa K256+512(%rip),%ymm7 + vmovdqu -64+0(%rsi),%xmm0 + vmovdqu -64+16(%rsi),%xmm1 + vmovdqu -64+32(%rsi),%xmm2 + vmovdqu -64+48(%rsi),%xmm3 + + vinserti128 $1,(%r12),%ymm0,%ymm0 + vinserti128 $1,16(%r12),%ymm1,%ymm1 + vpshufb %ymm7,%ymm0,%ymm0 + vinserti128 $1,32(%r12),%ymm2,%ymm2 + vpshufb %ymm7,%ymm1,%ymm1 + vinserti128 $1,48(%r12),%ymm3,%ymm3 + + leaq K256(%rip),%rbp + vpshufb %ymm7,%ymm2,%ymm2 + vpaddd 0(%rbp),%ymm0,%ymm4 + vpshufb %ymm7,%ymm3,%ymm3 + vpaddd 32(%rbp),%ymm1,%ymm5 + vpaddd 64(%rbp),%ymm2,%ymm6 + vpaddd 96(%rbp),%ymm3,%ymm7 + vmovdqa %ymm4,0(%rsp) + xorl %r14d,%r14d + vmovdqa %ymm5,32(%rsp) + leaq -64(%rsp),%rsp + movl %ebx,%edi + vmovdqa %ymm6,0(%rsp) + xorl %ecx,%edi + vmovdqa %ymm7,32(%rsp) + movl %r9d,%r12d + subq $-32*4,%rbp + jmp .Lavx2_00_47 + +.align 16 +.Lavx2_00_47: + leaq -64(%rsp),%rsp + vpalignr $4,%ymm0,%ymm1,%ymm4 + addl 0+128(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + vpalignr $4,%ymm2,%ymm3,%ymm7 + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + vpsrld $7,%ymm4,%ymm6 + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + vpaddd %ymm7,%ymm0,%ymm0 + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + vpshufd $250,%ymm3,%ymm7 + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 4+128(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + vpslld $11,%ymm5,%ymm5 + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + vpaddd %ymm4,%ymm0,%ymm0 + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 8+128(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + vpxor %ymm7,%ymm6,%ymm6 + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + vpaddd %ymm6,%ymm0,%ymm0 + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + vpshufd $80,%ymm0,%ymm7 + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 12+128(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + vpxor %ymm7,%ymm6,%ymm6 + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + vpaddd %ymm6,%ymm0,%ymm0 + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + vpaddd 0(%rbp),%ymm0,%ymm6 + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + vmovdqa %ymm6,0(%rsp) + vpalignr $4,%ymm1,%ymm2,%ymm4 + addl 32+128(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + vpalignr $4,%ymm3,%ymm0,%ymm7 + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + vpsrld $7,%ymm4,%ymm6 + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + vpaddd %ymm7,%ymm1,%ymm1 + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + vpshufd $250,%ymm0,%ymm7 + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 36+128(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + vpslld $11,%ymm5,%ymm5 + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + vpaddd %ymm4,%ymm1,%ymm1 + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 40+128(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + vpxor %ymm7,%ymm6,%ymm6 + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + vpaddd %ymm6,%ymm1,%ymm1 + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + vpshufd $80,%ymm1,%ymm7 + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 44+128(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + vpxor %ymm7,%ymm6,%ymm6 + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + vpaddd %ymm6,%ymm1,%ymm1 + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + vpaddd 32(%rbp),%ymm1,%ymm6 + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + vmovdqa %ymm6,32(%rsp) + leaq -64(%rsp),%rsp + vpalignr $4,%ymm2,%ymm3,%ymm4 + addl 0+128(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + vpalignr $4,%ymm0,%ymm1,%ymm7 + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + vpsrld $7,%ymm4,%ymm6 + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + vpaddd %ymm7,%ymm2,%ymm2 + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + vpshufd $250,%ymm1,%ymm7 + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 4+128(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + vpslld $11,%ymm5,%ymm5 + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + vpaddd %ymm4,%ymm2,%ymm2 + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 8+128(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + vpxor %ymm7,%ymm6,%ymm6 + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + vpaddd %ymm6,%ymm2,%ymm2 + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + vpshufd $80,%ymm2,%ymm7 + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 12+128(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + vpxor %ymm7,%ymm6,%ymm6 + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + vpaddd %ymm6,%ymm2,%ymm2 + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + vpaddd 64(%rbp),%ymm2,%ymm6 + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + vmovdqa %ymm6,0(%rsp) + vpalignr $4,%ymm3,%ymm0,%ymm4 + addl 32+128(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + vpalignr $4,%ymm1,%ymm2,%ymm7 + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + vpsrld $7,%ymm4,%ymm6 + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + vpaddd %ymm7,%ymm3,%ymm3 + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + vpshufd $250,%ymm2,%ymm7 + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 36+128(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + vpslld $11,%ymm5,%ymm5 + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + vpaddd %ymm4,%ymm3,%ymm3 + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 40+128(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + vpxor %ymm7,%ymm6,%ymm6 + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + vpaddd %ymm6,%ymm3,%ymm3 + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + vpshufd $80,%ymm3,%ymm7 + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 44+128(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + vpxor %ymm7,%ymm6,%ymm6 + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + vpaddd %ymm6,%ymm3,%ymm3 + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + vpaddd 96(%rbp),%ymm3,%ymm6 + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + vmovdqa %ymm6,32(%rsp) + leaq 128(%rbp),%rbp + cmpb $0,3(%rbp) + jne .Lavx2_00_47 + addl 0+64(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + addl 4+64(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + addl 8+64(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + addl 12+64(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + addl 32+64(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + addl 36+64(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + addl 40+64(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + addl 44+64(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + addl 0(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + addl 4(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + addl 8(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + addl 12(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + addl 32(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + addl 36(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + addl 40(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + addl 44(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + movq 512(%rsp),%rdi + addl %r14d,%eax + + leaq 448(%rsp),%rbp + + addl 0(%rdi),%eax + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + + cmpq 80(%rbp),%rsi + je .Ldone_avx2 + + xorl %r14d,%r14d + movl %ebx,%edi + xorl %ecx,%edi + movl %r9d,%r12d + jmp .Lower_avx2 +.align 16 +.Lower_avx2: + addl 0+16(%rbp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + addl 4+16(%rbp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + addl 8+16(%rbp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + addl 12+16(%rbp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + addl 32+16(%rbp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + addl 36+16(%rbp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + addl 40+16(%rbp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + addl 44+16(%rbp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + leaq -64(%rbp),%rbp + cmpq %rsp,%rbp + jae .Lower_avx2 + + movq 512(%rsp),%rdi + addl %r14d,%eax + + leaq 448(%rsp),%rsp + + addl 0(%rdi),%eax + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + leaq 128(%rsi),%rsi + addl 24(%rdi),%r10d + movq %rsi,%r12 + addl 28(%rdi),%r11d + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + cmoveq %rsp,%r12 + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + + jbe .Loop_avx2 + leaq (%rsp),%rbp + +.Ldone_avx2: + leaq (%rbp),%rsp + movq 88(%rsp),%rsi +.cfi_def_cfa %rsi,8 + vzeroupper + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue_avx2: + .byte 0xf3,0xc3 +.cfi_endproc +.size sha256_block_data_order_avx2,.-sha256_block_data_order_avx2 + +.section .note.GNU-stack,"",%progbits diff --git a/lib/accelerated/x86/elf/sha512-ssse3-x86.s b/lib/accelerated/x86/elf/sha512-ssse3-x86.s index 0b99b22ec9..481c777154 100644 --- a/lib/accelerated/x86/elf/sha512-ssse3-x86.s +++ b/lib/accelerated/x86/elf/sha512-ssse3-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "sha512-586.s" .text .globl sha512_block_data_order .type sha512_block_data_order,@function @@ -594,6 +593,8 @@ sha512_block_data_order: .long 4234509866,1501505948 .long 987167468,1607167915 .long 1246189591,1816402316 +.long 67438087,66051 +.long 202182159,134810123 .size sha512_block_data_order,.-.L_sha512_block_data_order_begin .byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97 .byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 @@ -601,7 +602,4 @@ sha512_block_data_order: .byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 .byte 62,0 - .section .note.GNU-stack,"",%progbits - - diff --git a/lib/accelerated/x86/elf/sha512-ssse3-x86_64.s b/lib/accelerated/x86/elf/sha512-ssse3-x86_64.s index d51d8169bc..e384d7e9e8 100644 --- a/lib/accelerated/x86/elf/sha512-ssse3-x86_64.s +++ b/lib/accelerated/x86/elf/sha512-ssse3-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -40,2854 +40,5439 @@ .text -.globl sha256_block_data_order -.type sha256_block_data_order,@function +.globl sha512_block_data_order +.type sha512_block_data_order,@function .align 16 -sha256_block_data_order: +sha512_block_data_order: +.cfi_startproc leaq _gnutls_x86_cpuid_s(%rip),%r11 movl 0(%r11),%r9d movl 4(%r11),%r10d movl 8(%r11),%r11d - testl $512,%r10d - jnz .Lssse3_shortcut + testl $2048,%r10d + jnz .Lxop_shortcut + andl $296,%r11d + cmpl $296,%r11d + je .Lavx2_shortcut + andl $1073741824,%r9d + andl $268435968,%r10d + orl %r9d,%r10d + cmpl $1342177792,%r10d + je .Lavx_shortcut + movq %rsp,%rax +.cfi_def_cfa_register %rax pushq %rbx +.cfi_offset %rbx,-16 pushq %rbp +.cfi_offset %rbp,-24 pushq %r12 +.cfi_offset %r12,-32 pushq %r13 +.cfi_offset %r13,-40 pushq %r14 +.cfi_offset %r14,-48 pushq %r15 - movq %rsp,%r11 +.cfi_offset %r15,-56 shlq $4,%rdx - subq $64+32,%rsp - leaq (%rsi,%rdx,4),%rdx + subq $128+32,%rsp + leaq (%rsi,%rdx,8),%rdx andq $-64,%rsp - movq %rdi,64+0(%rsp) - movq %rsi,64+8(%rsp) - movq %rdx,64+16(%rsp) - movq %r11,64+24(%rsp) + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) +.cfi_escape 0x0f,0x06,0x77,0x98,0x01,0x06,0x23,0x08 .Lprologue: - movl 0(%rdi),%eax - movl 4(%rdi),%ebx - movl 8(%rdi),%ecx - movl 12(%rdi),%edx - movl 16(%rdi),%r8d - movl 20(%rdi),%r9d - movl 24(%rdi),%r10d - movl 28(%rdi),%r11d + movq 0(%rdi),%rax + movq 8(%rdi),%rbx + movq 16(%rdi),%rcx + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 jmp .Lloop .align 16 .Lloop: - movl %ebx,%edi - leaq K256(%rip),%rbp - xorl %ecx,%edi - movl 0(%rsi),%r12d - movl %r8d,%r13d - movl %eax,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,0(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - movl 4(%rsi),%r12d - movl %edx,%r13d - movl %r11d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,4(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - movl 8(%rsi),%r12d - movl %ecx,%r13d - movl %r10d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,8(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - movl 12(%rsi),%r12d - movl %ebx,%r13d - movl %r9d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,12(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - movl 16(%rsi),%r12d - movl %eax,%r13d - movl %r8d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,16(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - leaq 4(%rbp),%rbp - addl %r14d,%edx - - movl 20(%rsi),%r12d - movl %r11d,%r13d - movl %edx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,20(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - movl 24(%rsi),%r12d - movl %r10d,%r13d - movl %ecx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,24(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - movl 28(%rsi),%r12d - movl %r9d,%r13d - movl %ebx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,28(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - leaq 20(%rbp),%rbp - addl %r14d,%eax - - movl 32(%rsi),%r12d - movl %r8d,%r13d - movl %eax,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,32(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - movl 36(%rsi),%r12d - movl %edx,%r13d - movl %r11d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,36(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - movl 40(%rsi),%r12d - movl %ecx,%r13d - movl %r10d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,40(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - movl 44(%rsi),%r12d - movl %ebx,%r13d - movl %r9d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,44(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - movl 48(%rsi),%r12d - movl %eax,%r13d - movl %r8d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,48(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - leaq 4(%rbp),%rbp - addl %r14d,%edx - - movl 52(%rsi),%r12d - movl %r11d,%r13d - movl %edx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,52(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - movl 56(%rsi),%r12d - movl %r10d,%r13d - movl %ecx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,56(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - movl 60(%rsi),%r12d - movl %r9d,%r13d - movl %ebx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,60(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - movl 4(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%eax - + movq %rbx,%rdi + leaq K512(%rip),%rbp + xorq %rcx,%rdi + movq 0(%rsi),%r12 + movq %r8,%r13 + movq %rax,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,0(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + addq %r14,%r11 + movq 8(%rsi),%r12 + movq %rdx,%r13 + movq %r11,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,8(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + addq %r14,%r10 + movq 16(%rsi),%r12 + movq %rcx,%r13 + movq %r10,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,16(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + addq %r14,%r9 + movq 24(%rsi),%r12 + movq %rbx,%r13 + movq %r9,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rcx,%rdi + + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,24(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + addq %r14,%r8 + movq 32(%rsi),%r12 + movq %rax,%r13 + movq %r8,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,32(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + addq %r14,%rdx + movq 40(%rsi),%r12 + movq %r11,%r13 + movq %rdx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,40(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + addq %r14,%rcx + movq 48(%rsi),%r12 + movq %r10,%r13 + movq %rcx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,48(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + addq %r14,%rbx + movq 56(%rsi),%r12 + movq %r9,%r13 + movq %rbx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,56(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp + addq %r14,%rax + movq 64(%rsi),%r12 + movq %r8,%r13 + movq %rax,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,64(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + addq %r14,%r11 + movq 72(%rsi),%r12 + movq %rdx,%r13 + movq %r11,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,72(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + addq %r14,%r10 + movq 80(%rsi),%r12 + movq %rcx,%r13 + movq %r10,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,80(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + addq %r14,%r9 + movq 88(%rsi),%r12 + movq %rbx,%r13 + movq %r9,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rcx,%rdi + + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,88(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + addq %r14,%r8 + movq 96(%rsi),%r12 + movq %rax,%r13 + movq %r8,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,96(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + addq %r14,%rdx + movq 104(%rsi),%r12 + movq %r11,%r13 + movq %rdx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,104(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + addq %r14,%rcx + movq 112(%rsi),%r12 + movq %r10,%r13 + movq %rcx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,112(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + addq %r14,%rbx + movq 120(%rsi),%r12 + movq %r9,%r13 + movq %rbx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,120(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp jmp .Lrounds_16_xx .align 16 .Lrounds_16_xx: - - movl 56(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 36(%rsp),%r12d - xorl %r15d,%r14d - - addl 0(%rsp),%r12d - movl %r8d,%r13d - addl %r14d,%r12d - movl %eax,%r14d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,0(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - movl 8(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - - movl 60(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 40(%rsp),%r12d - xorl %edi,%r14d - - addl 4(%rsp),%r12d - movl %edx,%r13d - addl %r14d,%r12d - movl %r11d,%r14d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,4(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - movl 12(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - - movl 0(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 44(%rsp),%r12d - xorl %r15d,%r14d - - addl 8(%rsp),%r12d - movl %ecx,%r13d - addl %r14d,%r12d - movl %r10d,%r14d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,8(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - movl 16(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - - movl 4(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 48(%rsp),%r12d - xorl %edi,%r14d - - addl 12(%rsp),%r12d - movl %ebx,%r13d - addl %r14d,%r12d - movl %r9d,%r14d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,12(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - movl 20(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - - movl 8(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 52(%rsp),%r12d - xorl %r15d,%r14d - - addl 16(%rsp),%r12d - movl %eax,%r13d - addl %r14d,%r12d - movl %r8d,%r14d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,16(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - movl 24(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%edx - - - movl 12(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 56(%rsp),%r12d - xorl %edi,%r14d - - addl 20(%rsp),%r12d - movl %r11d,%r13d - addl %r14d,%r12d - movl %edx,%r14d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,20(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - movl 28(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - - movl 16(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 60(%rsp),%r12d - xorl %r15d,%r14d - - addl 24(%rsp),%r12d - movl %r10d,%r13d - addl %r14d,%r12d - movl %ecx,%r14d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,24(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - movl 32(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - - movl 20(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 0(%rsp),%r12d - xorl %edi,%r14d - - addl 28(%rsp),%r12d - movl %r9d,%r13d - addl %r14d,%r12d - movl %ebx,%r14d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,28(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - movl 36(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%eax - - - movl 24(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 4(%rsp),%r12d - xorl %r15d,%r14d - - addl 32(%rsp),%r12d - movl %r8d,%r13d - addl %r14d,%r12d - movl %eax,%r14d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,32(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - movl 40(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - - movl 28(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 8(%rsp),%r12d - xorl %edi,%r14d - - addl 36(%rsp),%r12d - movl %edx,%r13d - addl %r14d,%r12d - movl %r11d,%r14d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,36(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - movl 44(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - - movl 32(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 12(%rsp),%r12d - xorl %r15d,%r14d - - addl 40(%rsp),%r12d - movl %ecx,%r13d - addl %r14d,%r12d - movl %r10d,%r14d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,40(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - movl 48(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - - movl 36(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 16(%rsp),%r12d - xorl %edi,%r14d - - addl 44(%rsp),%r12d - movl %ebx,%r13d - addl %r14d,%r12d - movl %r9d,%r14d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,44(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - movl 52(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - - movl 40(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 20(%rsp),%r12d - xorl %r15d,%r14d - - addl 48(%rsp),%r12d - movl %eax,%r13d - addl %r14d,%r12d - movl %r8d,%r14d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,48(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - movl 56(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%edx - - - movl 44(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 24(%rsp),%r12d - xorl %edi,%r14d - - addl 52(%rsp),%r12d - movl %r11d,%r13d - addl %r14d,%r12d - movl %edx,%r14d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,52(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - movl 60(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - - movl 48(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 28(%rsp),%r12d - xorl %r15d,%r14d - - addl 56(%rsp),%r12d - movl %r10d,%r13d - addl %r14d,%r12d - movl %ecx,%r14d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,56(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - movl 0(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - - movl 52(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 32(%rsp),%r12d - xorl %edi,%r14d - - addl 60(%rsp),%r12d - movl %r9d,%r13d - addl %r14d,%r12d - movl %ebx,%r14d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,60(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - movl 4(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%eax - - cmpb $0,3(%rbp) + movq 8(%rsp),%r13 + movq 112(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rax + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 72(%rsp),%r12 + + addq 0(%rsp),%r12 + movq %r8,%r13 + addq %r15,%r12 + movq %rax,%r14 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,0(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + movq 16(%rsp),%r13 + movq 120(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r11 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 80(%rsp),%r12 + + addq 8(%rsp),%r12 + movq %rdx,%r13 + addq %rdi,%r12 + movq %r11,%r14 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,8(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + movq 24(%rsp),%r13 + movq 0(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r10 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 88(%rsp),%r12 + + addq 16(%rsp),%r12 + movq %rcx,%r13 + addq %r15,%r12 + movq %r10,%r14 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,16(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + movq 32(%rsp),%r13 + movq 8(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r9 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 96(%rsp),%r12 + + addq 24(%rsp),%r12 + movq %rbx,%r13 + addq %rdi,%r12 + movq %r9,%r14 + rorq $23,%r13 + movq %rcx,%rdi + + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,24(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + movq 40(%rsp),%r13 + movq 16(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r8 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 104(%rsp),%r12 + + addq 32(%rsp),%r12 + movq %rax,%r13 + addq %r15,%r12 + movq %r8,%r14 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,32(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + movq 48(%rsp),%r13 + movq 24(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rdx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 112(%rsp),%r12 + + addq 40(%rsp),%r12 + movq %r11,%r13 + addq %rdi,%r12 + movq %rdx,%r14 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,40(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + movq 56(%rsp),%r13 + movq 32(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rcx + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 120(%rsp),%r12 + + addq 48(%rsp),%r12 + movq %r10,%r13 + addq %r15,%r12 + movq %rcx,%r14 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,48(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + movq 64(%rsp),%r13 + movq 40(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rbx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 0(%rsp),%r12 + + addq 56(%rsp),%r12 + movq %r9,%r13 + addq %rdi,%r12 + movq %rbx,%r14 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,56(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp + movq 72(%rsp),%r13 + movq 48(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rax + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 8(%rsp),%r12 + + addq 64(%rsp),%r12 + movq %r8,%r13 + addq %r15,%r12 + movq %rax,%r14 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,64(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + movq 80(%rsp),%r13 + movq 56(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r11 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 16(%rsp),%r12 + + addq 72(%rsp),%r12 + movq %rdx,%r13 + addq %rdi,%r12 + movq %r11,%r14 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,72(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + movq 88(%rsp),%r13 + movq 64(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r10 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 24(%rsp),%r12 + + addq 80(%rsp),%r12 + movq %rcx,%r13 + addq %r15,%r12 + movq %r10,%r14 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,80(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + movq 96(%rsp),%r13 + movq 72(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r9 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 32(%rsp),%r12 + + addq 88(%rsp),%r12 + movq %rbx,%r13 + addq %rdi,%r12 + movq %r9,%r14 + rorq $23,%r13 + movq %rcx,%rdi + + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,88(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + movq 104(%rsp),%r13 + movq 80(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r8 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 40(%rsp),%r12 + + addq 96(%rsp),%r12 + movq %rax,%r13 + addq %r15,%r12 + movq %r8,%r14 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,96(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + movq 112(%rsp),%r13 + movq 88(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rdx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 48(%rsp),%r12 + + addq 104(%rsp),%r12 + movq %r11,%r13 + addq %rdi,%r12 + movq %rdx,%r14 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,104(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + movq 120(%rsp),%r13 + movq 96(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rcx + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 56(%rsp),%r12 + + addq 112(%rsp),%r12 + movq %r10,%r13 + addq %r15,%r12 + movq %rcx,%r14 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,112(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + movq 0(%rsp),%r13 + movq 104(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rbx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 64(%rsp),%r12 + + addq 120(%rsp),%r12 + movq %r9,%r13 + addq %rdi,%r12 + movq %rbx,%r14 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,120(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp + cmpb $0,7(%rbp) jnz .Lrounds_16_xx - movq 64+0(%rsp),%rdi - leaq 64(%rsi),%rsi - - addl 0(%rdi),%eax - addl 4(%rdi),%ebx - addl 8(%rdi),%ecx - addl 12(%rdi),%edx - addl 16(%rdi),%r8d - addl 20(%rdi),%r9d - addl 24(%rdi),%r10d - addl 28(%rdi),%r11d - - cmpq 64+16(%rsp),%rsi - - movl %eax,0(%rdi) - movl %ebx,4(%rdi) - movl %ecx,8(%rdi) - movl %edx,12(%rdi) - movl %r8d,16(%rdi) - movl %r9d,20(%rdi) - movl %r10d,24(%rdi) - movl %r11d,28(%rdi) + movq 128+0(%rsp),%rdi + addq %r14,%rax + leaq 128(%rsi),%rsi + + addq 0(%rdi),%rax + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) jb .Lloop - movq 64+24(%rsp),%rsi - movq (%rsi),%r15 - movq 8(%rsi),%r14 - movq 16(%rsi),%r13 - movq 24(%rsi),%r12 - movq 32(%rsi),%rbp - movq 40(%rsi),%rbx - leaq 48(%rsi),%rsp + movq 152(%rsp),%rsi +.cfi_def_cfa %rsi,8 + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue: .byte 0xf3,0xc3 -.size sha256_block_data_order,.-sha256_block_data_order +.cfi_endproc +.size sha512_block_data_order,.-sha512_block_data_order .align 64 -.type K256,@object -K256: -.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 -.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 -.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 -.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 -.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 -.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 -.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 -.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 -.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc -.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc -.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da -.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da -.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 -.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 -.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 -.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 -.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 -.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 -.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 -.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 -.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 -.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 -.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 -.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 -.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 -.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 -.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 -.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 -.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 -.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 -.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 -.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 - -.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f -.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f -.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff -.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff -.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 -.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 -.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 -.type sha256_block_data_order_ssse3,@function +.type K512,@object +K512: +.quad 0x428a2f98d728ae22,0x7137449123ef65cd +.quad 0x428a2f98d728ae22,0x7137449123ef65cd +.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc +.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc +.quad 0x3956c25bf348b538,0x59f111f1b605d019 +.quad 0x3956c25bf348b538,0x59f111f1b605d019 +.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 +.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 +.quad 0xd807aa98a3030242,0x12835b0145706fbe +.quad 0xd807aa98a3030242,0x12835b0145706fbe +.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 +.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 +.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 +.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 +.quad 0x9bdc06a725c71235,0xc19bf174cf692694 +.quad 0x9bdc06a725c71235,0xc19bf174cf692694 +.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 +.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 +.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 +.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 +.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 +.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 +.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 +.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 +.quad 0x983e5152ee66dfab,0xa831c66d2db43210 +.quad 0x983e5152ee66dfab,0xa831c66d2db43210 +.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 +.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 +.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 +.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 +.quad 0x06ca6351e003826f,0x142929670a0e6e70 +.quad 0x06ca6351e003826f,0x142929670a0e6e70 +.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 +.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 +.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df +.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df +.quad 0x650a73548baf63de,0x766a0abb3c77b2a8 +.quad 0x650a73548baf63de,0x766a0abb3c77b2a8 +.quad 0x81c2c92e47edaee6,0x92722c851482353b +.quad 0x81c2c92e47edaee6,0x92722c851482353b +.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 +.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 +.quad 0xc24b8b70d0f89791,0xc76c51a30654be30 +.quad 0xc24b8b70d0f89791,0xc76c51a30654be30 +.quad 0xd192e819d6ef5218,0xd69906245565a910 +.quad 0xd192e819d6ef5218,0xd69906245565a910 +.quad 0xf40e35855771202a,0x106aa07032bbd1b8 +.quad 0xf40e35855771202a,0x106aa07032bbd1b8 +.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 +.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 +.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 +.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 +.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb +.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb +.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 +.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 +.quad 0x748f82ee5defb2fc,0x78a5636f43172f60 +.quad 0x748f82ee5defb2fc,0x78a5636f43172f60 +.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec +.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec +.quad 0x90befffa23631e28,0xa4506cebde82bde9 +.quad 0x90befffa23631e28,0xa4506cebde82bde9 +.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b +.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b +.quad 0xca273eceea26619c,0xd186b8c721c0c207 +.quad 0xca273eceea26619c,0xd186b8c721c0c207 +.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 +.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 +.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 +.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 +.quad 0x113f9804bef90dae,0x1b710b35131c471b +.quad 0x113f9804bef90dae,0x1b710b35131c471b +.quad 0x28db77f523047d84,0x32caab7b40c72493 +.quad 0x28db77f523047d84,0x32caab7b40c72493 +.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c +.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c +.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a +.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a +.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 + +.quad 0x0001020304050607,0x08090a0b0c0d0e0f +.quad 0x0001020304050607,0x08090a0b0c0d0e0f +.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.type sha512_block_data_order_xop,@function .align 64 -sha256_block_data_order_ssse3: -.Lssse3_shortcut: +sha512_block_data_order_xop: +.cfi_startproc +.Lxop_shortcut: + movq %rsp,%rax +.cfi_def_cfa_register %rax pushq %rbx +.cfi_offset %rbx,-16 pushq %rbp +.cfi_offset %rbp,-24 pushq %r12 +.cfi_offset %r12,-32 pushq %r13 +.cfi_offset %r13,-40 pushq %r14 +.cfi_offset %r14,-48 pushq %r15 - movq %rsp,%r11 +.cfi_offset %r15,-56 shlq $4,%rdx - subq $96,%rsp - leaq (%rsi,%rdx,4),%rdx + subq $160,%rsp + leaq (%rsi,%rdx,8),%rdx andq $-64,%rsp - movq %rdi,64+0(%rsp) - movq %rsi,64+8(%rsp) - movq %rdx,64+16(%rsp) - movq %r11,64+24(%rsp) -.Lprologue_ssse3: - - movl 0(%rdi),%eax - movl 4(%rdi),%ebx - movl 8(%rdi),%ecx - movl 12(%rdi),%edx - movl 16(%rdi),%r8d - movl 20(%rdi),%r9d - movl 24(%rdi),%r10d - movl 28(%rdi),%r11d - movdqa K256+512+32(%rip),%xmm8 - movdqa K256+512+64(%rip),%xmm9 - jmp .Lloop_ssse3 + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) +.cfi_escape 0x0f,0x06,0x77,0x98,0x01,0x06,0x23,0x08 +.Lprologue_xop: + + vzeroupper + movq 0(%rdi),%rax + movq 8(%rdi),%rbx + movq 16(%rdi),%rcx + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 + jmp .Lloop_xop .align 16 -.Lloop_ssse3: - movdqa K256+512(%rip),%xmm7 - movdqu 0(%rsi),%xmm0 - movdqu 16(%rsi),%xmm1 - movdqu 32(%rsi),%xmm2 - movdqu 48(%rsi),%xmm3 -.byte 102,15,56,0,199 - leaq K256(%rip),%rbp -.byte 102,15,56,0,207 - movdqa 0(%rbp),%xmm4 -.byte 102,15,56,0,215 - movdqa 32(%rbp),%xmm5 - paddd %xmm0,%xmm4 - movdqa 64(%rbp),%xmm6 -.byte 102,15,56,0,223 - movdqa 96(%rbp),%xmm7 - paddd %xmm1,%xmm5 - paddd %xmm2,%xmm6 - paddd %xmm3,%xmm7 - movdqa %xmm4,0(%rsp) - movl %eax,%r14d - movdqa %xmm5,16(%rsp) - movl %ebx,%edi - movdqa %xmm6,32(%rsp) - xorl %ecx,%edi - movdqa %xmm7,48(%rsp) - movl %r8d,%r13d - jmp .Lssse3_00_47 +.Lloop_xop: + vmovdqa K512+1280(%rip),%xmm11 + vmovdqu 0(%rsi),%xmm0 + leaq K512+128(%rip),%rbp + vmovdqu 16(%rsi),%xmm1 + vmovdqu 32(%rsi),%xmm2 + vpshufb %xmm11,%xmm0,%xmm0 + vmovdqu 48(%rsi),%xmm3 + vpshufb %xmm11,%xmm1,%xmm1 + vmovdqu 64(%rsi),%xmm4 + vpshufb %xmm11,%xmm2,%xmm2 + vmovdqu 80(%rsi),%xmm5 + vpshufb %xmm11,%xmm3,%xmm3 + vmovdqu 96(%rsi),%xmm6 + vpshufb %xmm11,%xmm4,%xmm4 + vmovdqu 112(%rsi),%xmm7 + vpshufb %xmm11,%xmm5,%xmm5 + vpaddq -128(%rbp),%xmm0,%xmm8 + vpshufb %xmm11,%xmm6,%xmm6 + vpaddq -96(%rbp),%xmm1,%xmm9 + vpshufb %xmm11,%xmm7,%xmm7 + vpaddq -64(%rbp),%xmm2,%xmm10 + vpaddq -32(%rbp),%xmm3,%xmm11 + vmovdqa %xmm8,0(%rsp) + vpaddq 0(%rbp),%xmm4,%xmm8 + vmovdqa %xmm9,16(%rsp) + vpaddq 32(%rbp),%xmm5,%xmm9 + vmovdqa %xmm10,32(%rsp) + vpaddq 64(%rbp),%xmm6,%xmm10 + vmovdqa %xmm11,48(%rsp) + vpaddq 96(%rbp),%xmm7,%xmm11 + vmovdqa %xmm8,64(%rsp) + movq %rax,%r14 + vmovdqa %xmm9,80(%rsp) + movq %rbx,%rdi + vmovdqa %xmm10,96(%rsp) + xorq %rcx,%rdi + vmovdqa %xmm11,112(%rsp) + movq %r8,%r13 + jmp .Lxop_00_47 .align 16 -.Lssse3_00_47: - subq $-32*4,%rbp - rorl $14,%r13d - movl %r14d,%eax - movdqa %xmm1,%xmm4 - movl %r9d,%r12d - movdqa %xmm3,%xmm7 - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d -.byte 102,15,58,15,224,4 - rorl $5,%r13d - xorl %eax,%r14d -.byte 102,15,58,15,250,4 - andl %r8d,%r12d - xorl %r8d,%r13d - addl 0(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - movdqa %xmm4,%xmm5 - xorl %ebx,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - psrld $3,%xmm4 - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - paddd %xmm7,%xmm0 - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - psrld $7,%xmm6 - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - pshufd $250,%xmm3,%xmm7 - movl %r8d,%r12d - pslld $14,%xmm5 - xorl %edx,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %r9d,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %r11d,%r14d - pxor %xmm5,%xmm4 - andl %edx,%r12d - xorl %edx,%r13d - pslld $11,%xmm5 - addl 4(%rsp),%r10d - pxor %xmm6,%xmm4 - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - movdqa %xmm7,%xmm6 - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %r11d,%r14d - psrld $10,%xmm7 - addl %r13d,%r10d - xorl %eax,%r15d - paddd %xmm4,%xmm0 - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - psrlq $17,%xmm6 - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - pxor %xmm6,%xmm7 - xorl %ecx,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - pxor %xmm6,%xmm7 - andl %ecx,%r12d - xorl %ecx,%r13d - addl 8(%rsp),%r9d -.byte 102,65,15,56,0,248 - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm0 - addl %r12d,%r9d - pshufd $80,%xmm0,%xmm7 - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - movdqa %xmm7,%xmm6 - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - psrld $10,%xmm7 - movl %ebx,%r13d - psrlq $17,%xmm6 - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - pxor %xmm6,%xmm7 - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - pxor %xmm6,%xmm7 - addl 12(%rsp),%r8d - movl %r9d,%edi - movdqa 0(%rbp),%xmm6 - rorl $11,%r14d - xorl %edx,%r12d -.byte 102,65,15,56,0,249 - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - paddd %xmm7,%xmm0 - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - paddd %xmm0,%xmm6 - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - movdqa %xmm6,0(%rsp) - rorl $14,%r13d - movl %r14d,%r8d - movdqa %xmm2,%xmm4 - movl %ebx,%r12d - movdqa %xmm0,%xmm7 - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d -.byte 102,15,58,15,225,4 - rorl $5,%r13d - xorl %r8d,%r14d -.byte 102,15,58,15,251,4 - andl %eax,%r12d - xorl %eax,%r13d - addl 16(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - movdqa %xmm4,%xmm5 - xorl %r9d,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - psrld $3,%xmm4 - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - paddd %xmm7,%xmm1 - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - psrld $7,%xmm6 - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - pshufd $250,%xmm0,%xmm7 - movl %eax,%r12d - pslld $14,%xmm5 - xorl %r11d,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %ebx,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %edx,%r14d - pxor %xmm5,%xmm4 - andl %r11d,%r12d - xorl %r11d,%r13d - pslld $11,%xmm5 - addl 20(%rsp),%ecx - pxor %xmm6,%xmm4 - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - movdqa %xmm7,%xmm6 - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %edx,%r14d - psrld $10,%xmm7 - addl %r13d,%ecx - xorl %r8d,%r15d - paddd %xmm4,%xmm1 - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - psrlq $17,%xmm6 - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - pxor %xmm6,%xmm7 - xorl %r10d,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - pxor %xmm6,%xmm7 - andl %r10d,%r12d - xorl %r10d,%r13d - addl 24(%rsp),%ebx -.byte 102,65,15,56,0,248 - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm1 - addl %r12d,%ebx - pshufd $80,%xmm1,%xmm7 - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - movdqa %xmm7,%xmm6 - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - psrld $10,%xmm7 - movl %r9d,%r13d - psrlq $17,%xmm6 - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - pxor %xmm6,%xmm7 - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - pxor %xmm6,%xmm7 - addl 28(%rsp),%eax - movl %ebx,%edi - movdqa 32(%rbp),%xmm6 - rorl $11,%r14d - xorl %r11d,%r12d -.byte 102,65,15,56,0,249 - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - paddd %xmm7,%xmm1 - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - paddd %xmm1,%xmm6 - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - movdqa %xmm6,16(%rsp) - rorl $14,%r13d - movl %r14d,%eax - movdqa %xmm3,%xmm4 - movl %r9d,%r12d - movdqa %xmm1,%xmm7 - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d -.byte 102,15,58,15,226,4 - rorl $5,%r13d - xorl %eax,%r14d -.byte 102,15,58,15,248,4 - andl %r8d,%r12d - xorl %r8d,%r13d - addl 32(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - movdqa %xmm4,%xmm5 - xorl %ebx,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - psrld $3,%xmm4 - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - paddd %xmm7,%xmm2 - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - psrld $7,%xmm6 - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - pshufd $250,%xmm1,%xmm7 - movl %r8d,%r12d - pslld $14,%xmm5 - xorl %edx,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %r9d,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %r11d,%r14d - pxor %xmm5,%xmm4 - andl %edx,%r12d - xorl %edx,%r13d - pslld $11,%xmm5 - addl 36(%rsp),%r10d - pxor %xmm6,%xmm4 - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - movdqa %xmm7,%xmm6 - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %r11d,%r14d - psrld $10,%xmm7 - addl %r13d,%r10d - xorl %eax,%r15d - paddd %xmm4,%xmm2 - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - psrlq $17,%xmm6 - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - pxor %xmm6,%xmm7 - xorl %ecx,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - pxor %xmm6,%xmm7 - andl %ecx,%r12d - xorl %ecx,%r13d - addl 40(%rsp),%r9d -.byte 102,65,15,56,0,248 - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm2 - addl %r12d,%r9d - pshufd $80,%xmm2,%xmm7 - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - movdqa %xmm7,%xmm6 - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - psrld $10,%xmm7 - movl %ebx,%r13d - psrlq $17,%xmm6 - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - pxor %xmm6,%xmm7 - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - pxor %xmm6,%xmm7 - addl 44(%rsp),%r8d - movl %r9d,%edi - movdqa 64(%rbp),%xmm6 - rorl $11,%r14d - xorl %edx,%r12d -.byte 102,65,15,56,0,249 - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - paddd %xmm7,%xmm2 - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - paddd %xmm2,%xmm6 - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - movdqa %xmm6,32(%rsp) - rorl $14,%r13d - movl %r14d,%r8d - movdqa %xmm0,%xmm4 - movl %ebx,%r12d - movdqa %xmm2,%xmm7 - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d -.byte 102,15,58,15,227,4 - rorl $5,%r13d - xorl %r8d,%r14d -.byte 102,15,58,15,249,4 - andl %eax,%r12d - xorl %eax,%r13d - addl 48(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - movdqa %xmm4,%xmm5 - xorl %r9d,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - psrld $3,%xmm4 - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - paddd %xmm7,%xmm3 - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - psrld $7,%xmm6 - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - pshufd $250,%xmm2,%xmm7 - movl %eax,%r12d - pslld $14,%xmm5 - xorl %r11d,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %ebx,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %edx,%r14d - pxor %xmm5,%xmm4 - andl %r11d,%r12d - xorl %r11d,%r13d - pslld $11,%xmm5 - addl 52(%rsp),%ecx - pxor %xmm6,%xmm4 - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - movdqa %xmm7,%xmm6 - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %edx,%r14d - psrld $10,%xmm7 - addl %r13d,%ecx - xorl %r8d,%r15d - paddd %xmm4,%xmm3 - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - psrlq $17,%xmm6 - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - pxor %xmm6,%xmm7 - xorl %r10d,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - pxor %xmm6,%xmm7 - andl %r10d,%r12d - xorl %r10d,%r13d - addl 56(%rsp),%ebx -.byte 102,65,15,56,0,248 - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm3 - addl %r12d,%ebx - pshufd $80,%xmm3,%xmm7 - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - movdqa %xmm7,%xmm6 - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - psrld $10,%xmm7 - movl %r9d,%r13d - psrlq $17,%xmm6 - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - pxor %xmm6,%xmm7 - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - pxor %xmm6,%xmm7 - addl 60(%rsp),%eax - movl %ebx,%edi - movdqa 96(%rbp),%xmm6 - rorl $11,%r14d - xorl %r11d,%r12d -.byte 102,65,15,56,0,249 - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - paddd %xmm7,%xmm3 - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - paddd %xmm3,%xmm6 - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - movdqa %xmm6,48(%rsp) - cmpb $0,131(%rbp) - jne .Lssse3_00_47 - rorl $14,%r13d - movl %r14d,%eax - movl %r9d,%r12d - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d - rorl $5,%r13d - xorl %eax,%r14d - andl %r8d,%r12d - xorl %r8d,%r13d - addl 0(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - xorl %ebx,%r15d - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - movl %r8d,%r12d - xorl %edx,%r13d - rorl $9,%r14d - xorl %r9d,%r12d - rorl $5,%r13d - xorl %r11d,%r14d - andl %edx,%r12d - xorl %edx,%r13d - addl 4(%rsp),%r10d - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - andl %edi,%r15d - xorl %r11d,%r14d - addl %r13d,%r10d - xorl %eax,%r15d - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - xorl %ecx,%r13d - rorl $9,%r14d - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - andl %ecx,%r12d - xorl %ecx,%r13d - addl 8(%rsp),%r9d - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - addl %r12d,%r9d - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - movl %ebx,%r13d - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - addl 12(%rsp),%r8d - movl %r9d,%edi - rorl $11,%r14d - xorl %edx,%r12d - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - rorl $14,%r13d - movl %r14d,%r8d - movl %ebx,%r12d - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d - rorl $5,%r13d - xorl %r8d,%r14d - andl %eax,%r12d - xorl %eax,%r13d - addl 16(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - xorl %r9d,%r15d - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - movl %eax,%r12d - xorl %r11d,%r13d - rorl $9,%r14d - xorl %ebx,%r12d - rorl $5,%r13d - xorl %edx,%r14d - andl %r11d,%r12d - xorl %r11d,%r13d - addl 20(%rsp),%ecx - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - andl %edi,%r15d - xorl %edx,%r14d - addl %r13d,%ecx - xorl %r8d,%r15d - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - xorl %r10d,%r13d - rorl $9,%r14d - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - andl %r10d,%r12d - xorl %r10d,%r13d - addl 24(%rsp),%ebx - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - addl %r12d,%ebx - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - movl %r9d,%r13d - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - addl 28(%rsp),%eax - movl %ebx,%edi - rorl $11,%r14d - xorl %r11d,%r12d - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - rorl $14,%r13d - movl %r14d,%eax - movl %r9d,%r12d - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d - rorl $5,%r13d - xorl %eax,%r14d - andl %r8d,%r12d - xorl %r8d,%r13d - addl 32(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - xorl %ebx,%r15d - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - movl %r8d,%r12d - xorl %edx,%r13d - rorl $9,%r14d - xorl %r9d,%r12d - rorl $5,%r13d - xorl %r11d,%r14d - andl %edx,%r12d - xorl %edx,%r13d - addl 36(%rsp),%r10d - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - andl %edi,%r15d - xorl %r11d,%r14d - addl %r13d,%r10d - xorl %eax,%r15d - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - xorl %ecx,%r13d - rorl $9,%r14d - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - andl %ecx,%r12d - xorl %ecx,%r13d - addl 40(%rsp),%r9d - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - addl %r12d,%r9d - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - movl %ebx,%r13d - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - addl 44(%rsp),%r8d - movl %r9d,%edi - rorl $11,%r14d - xorl %edx,%r12d - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - rorl $14,%r13d - movl %r14d,%r8d - movl %ebx,%r12d - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d - rorl $5,%r13d - xorl %r8d,%r14d - andl %eax,%r12d - xorl %eax,%r13d - addl 48(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - xorl %r9d,%r15d - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - movl %eax,%r12d - xorl %r11d,%r13d - rorl $9,%r14d - xorl %ebx,%r12d - rorl $5,%r13d - xorl %edx,%r14d - andl %r11d,%r12d - xorl %r11d,%r13d - addl 52(%rsp),%ecx - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - andl %edi,%r15d - xorl %edx,%r14d - addl %r13d,%ecx - xorl %r8d,%r15d - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - xorl %r10d,%r13d - rorl $9,%r14d - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - andl %r10d,%r12d - xorl %r10d,%r13d - addl 56(%rsp),%ebx - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - addl %r12d,%ebx - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - movl %r9d,%r13d - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - addl 60(%rsp),%eax - movl %ebx,%edi - rorl $11,%r14d - xorl %r11d,%r12d - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - movq 64+0(%rsp),%rdi - movl %r14d,%eax - - addl 0(%rdi),%eax - leaq 64(%rsi),%rsi - addl 4(%rdi),%ebx - addl 8(%rdi),%ecx - addl 12(%rdi),%edx - addl 16(%rdi),%r8d - addl 20(%rdi),%r9d - addl 24(%rdi),%r10d - addl 28(%rdi),%r11d - - cmpq 64+16(%rsp),%rsi - - movl %eax,0(%rdi) - movl %ebx,4(%rdi) - movl %ecx,8(%rdi) - movl %edx,12(%rdi) - movl %r8d,16(%rdi) - movl %r9d,20(%rdi) - movl %r10d,24(%rdi) - movl %r11d,28(%rdi) - jb .Lloop_ssse3 - - movq 64+24(%rsp),%rsi - movq (%rsi),%r15 - movq 8(%rsi),%r14 - movq 16(%rsi),%r13 - movq 24(%rsi),%r12 - movq 32(%rsi),%rbp - movq 40(%rsi),%rbx - leaq 48(%rsi),%rsp -.Lepilogue_ssse3: +.Lxop_00_47: + addq $256,%rbp + vpalignr $8,%xmm0,%xmm1,%xmm8 + rorq $23,%r13 + movq %r14,%rax + vpalignr $8,%xmm4,%xmm5,%xmm11 + movq %r9,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r8,%r13 + xorq %r10,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rax,%r14 + vpaddq %xmm11,%xmm0,%xmm0 + andq %r8,%r12 + xorq %r8,%r13 + addq 0(%rsp),%r11 + movq %rax,%r15 +.byte 143,72,120,195,209,7 + xorq %r10,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,223,3 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm7,%xmm10 + addq %r11,%rdx + addq %rdi,%r11 + vpaddq %xmm8,%xmm0,%xmm0 + movq %rdx,%r13 + addq %r11,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r11 + vpxor %xmm10,%xmm11,%xmm11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + vpaddq %xmm11,%xmm0,%xmm0 + addq 8(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + vpaddq -128(%rbp),%xmm0,%xmm10 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,0(%rsp) + vpalignr $8,%xmm1,%xmm2,%xmm8 + rorq $23,%r13 + movq %r14,%r10 + vpalignr $8,%xmm5,%xmm6,%xmm11 + movq %rdx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rcx,%r13 + xorq %r8,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r10,%r14 + vpaddq %xmm11,%xmm1,%xmm1 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 16(%rsp),%r9 + movq %r10,%r15 +.byte 143,72,120,195,209,7 + xorq %r8,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,216,3 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm0,%xmm10 + addq %r9,%rbx + addq %rdi,%r9 + vpaddq %xmm8,%xmm1,%xmm1 + movq %rbx,%r13 + addq %r9,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r9 + vpxor %xmm10,%xmm11,%xmm11 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + vpaddq %xmm11,%xmm1,%xmm1 + addq 24(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + vpaddq -96(%rbp),%xmm1,%xmm10 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,16(%rsp) + vpalignr $8,%xmm2,%xmm3,%xmm8 + rorq $23,%r13 + movq %r14,%r8 + vpalignr $8,%xmm6,%xmm7,%xmm11 + movq %rbx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rax,%r13 + xorq %rcx,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r8,%r14 + vpaddq %xmm11,%xmm2,%xmm2 + andq %rax,%r12 + xorq %rax,%r13 + addq 32(%rsp),%rdx + movq %r8,%r15 +.byte 143,72,120,195,209,7 + xorq %rcx,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,217,3 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm1,%xmm10 + addq %rdx,%r11 + addq %rdi,%rdx + vpaddq %xmm8,%xmm2,%xmm2 + movq %r11,%r13 + addq %rdx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rdx + vpxor %xmm10,%xmm11,%xmm11 + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + vpaddq %xmm11,%xmm2,%xmm2 + addq 40(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + vpaddq -64(%rbp),%xmm2,%xmm10 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,32(%rsp) + vpalignr $8,%xmm3,%xmm4,%xmm8 + rorq $23,%r13 + movq %r14,%rcx + vpalignr $8,%xmm7,%xmm0,%xmm11 + movq %r11,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r10,%r13 + xorq %rax,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rcx,%r14 + vpaddq %xmm11,%xmm3,%xmm3 + andq %r10,%r12 + xorq %r10,%r13 + addq 48(%rsp),%rbx + movq %rcx,%r15 +.byte 143,72,120,195,209,7 + xorq %rax,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,218,3 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm2,%xmm10 + addq %rbx,%r9 + addq %rdi,%rbx + vpaddq %xmm8,%xmm3,%xmm3 + movq %r9,%r13 + addq %rbx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rbx + vpxor %xmm10,%xmm11,%xmm11 + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + vpaddq %xmm11,%xmm3,%xmm3 + addq 56(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + vpaddq -32(%rbp),%xmm3,%xmm10 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,48(%rsp) + vpalignr $8,%xmm4,%xmm5,%xmm8 + rorq $23,%r13 + movq %r14,%rax + vpalignr $8,%xmm0,%xmm1,%xmm11 + movq %r9,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r8,%r13 + xorq %r10,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rax,%r14 + vpaddq %xmm11,%xmm4,%xmm4 + andq %r8,%r12 + xorq %r8,%r13 + addq 64(%rsp),%r11 + movq %rax,%r15 +.byte 143,72,120,195,209,7 + xorq %r10,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,219,3 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm3,%xmm10 + addq %r11,%rdx + addq %rdi,%r11 + vpaddq %xmm8,%xmm4,%xmm4 + movq %rdx,%r13 + addq %r11,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r11 + vpxor %xmm10,%xmm11,%xmm11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + vpaddq %xmm11,%xmm4,%xmm4 + addq 72(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + vpaddq 0(%rbp),%xmm4,%xmm10 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,64(%rsp) + vpalignr $8,%xmm5,%xmm6,%xmm8 + rorq $23,%r13 + movq %r14,%r10 + vpalignr $8,%xmm1,%xmm2,%xmm11 + movq %rdx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rcx,%r13 + xorq %r8,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r10,%r14 + vpaddq %xmm11,%xmm5,%xmm5 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 80(%rsp),%r9 + movq %r10,%r15 +.byte 143,72,120,195,209,7 + xorq %r8,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,220,3 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm4,%xmm10 + addq %r9,%rbx + addq %rdi,%r9 + vpaddq %xmm8,%xmm5,%xmm5 + movq %rbx,%r13 + addq %r9,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r9 + vpxor %xmm10,%xmm11,%xmm11 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + vpaddq %xmm11,%xmm5,%xmm5 + addq 88(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + vpaddq 32(%rbp),%xmm5,%xmm10 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,80(%rsp) + vpalignr $8,%xmm6,%xmm7,%xmm8 + rorq $23,%r13 + movq %r14,%r8 + vpalignr $8,%xmm2,%xmm3,%xmm11 + movq %rbx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rax,%r13 + xorq %rcx,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r8,%r14 + vpaddq %xmm11,%xmm6,%xmm6 + andq %rax,%r12 + xorq %rax,%r13 + addq 96(%rsp),%rdx + movq %r8,%r15 +.byte 143,72,120,195,209,7 + xorq %rcx,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,221,3 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm5,%xmm10 + addq %rdx,%r11 + addq %rdi,%rdx + vpaddq %xmm8,%xmm6,%xmm6 + movq %r11,%r13 + addq %rdx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rdx + vpxor %xmm10,%xmm11,%xmm11 + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + vpaddq %xmm11,%xmm6,%xmm6 + addq 104(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + vpaddq 64(%rbp),%xmm6,%xmm10 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,96(%rsp) + vpalignr $8,%xmm7,%xmm0,%xmm8 + rorq $23,%r13 + movq %r14,%rcx + vpalignr $8,%xmm3,%xmm4,%xmm11 + movq %r11,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r10,%r13 + xorq %rax,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rcx,%r14 + vpaddq %xmm11,%xmm7,%xmm7 + andq %r10,%r12 + xorq %r10,%r13 + addq 112(%rsp),%rbx + movq %rcx,%r15 +.byte 143,72,120,195,209,7 + xorq %rax,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,222,3 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm6,%xmm10 + addq %rbx,%r9 + addq %rdi,%rbx + vpaddq %xmm8,%xmm7,%xmm7 + movq %r9,%r13 + addq %rbx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rbx + vpxor %xmm10,%xmm11,%xmm11 + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + vpaddq %xmm11,%xmm7,%xmm7 + addq 120(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + vpaddq 96(%rbp),%xmm7,%xmm10 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,112(%rsp) + cmpb $0,135(%rbp) + jne .Lxop_00_47 + rorq $23,%r13 + movq %r14,%rax + movq %r9,%r12 + rorq $5,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + rorq $4,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 0(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + rorq $6,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + rorq $28,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + rorq $23,%r13 + movq %r14,%r11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 8(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + rorq $23,%r13 + movq %r14,%r10 + movq %rdx,%r12 + rorq $5,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + rorq $4,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 16(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + rorq $6,%r14 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + rorq $28,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + rorq $23,%r13 + movq %r14,%r9 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 24(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + rorq $23,%r13 + movq %r14,%r8 + movq %rbx,%r12 + rorq $5,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + rorq $4,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 32(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + rorq $6,%r14 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + rorq $28,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + rorq $23,%r13 + movq %r14,%rdx + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 40(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + rorq $23,%r13 + movq %r14,%rcx + movq %r11,%r12 + rorq $5,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + rorq $4,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 48(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + rorq $6,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + rorq $28,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + rorq $23,%r13 + movq %r14,%rbx + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 56(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + rorq $23,%r13 + movq %r14,%rax + movq %r9,%r12 + rorq $5,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + rorq $4,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 64(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + rorq $6,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + rorq $28,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + rorq $23,%r13 + movq %r14,%r11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 72(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + rorq $23,%r13 + movq %r14,%r10 + movq %rdx,%r12 + rorq $5,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + rorq $4,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 80(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + rorq $6,%r14 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + rorq $28,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + rorq $23,%r13 + movq %r14,%r9 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 88(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + rorq $23,%r13 + movq %r14,%r8 + movq %rbx,%r12 + rorq $5,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + rorq $4,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 96(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + rorq $6,%r14 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + rorq $28,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + rorq $23,%r13 + movq %r14,%rdx + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 104(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + rorq $23,%r13 + movq %r14,%rcx + movq %r11,%r12 + rorq $5,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + rorq $4,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 112(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + rorq $6,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + rorq $28,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + rorq $23,%r13 + movq %r14,%rbx + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 120(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + movq 128+0(%rsp),%rdi + movq %r14,%rax + + addq 0(%rdi),%rax + leaq 128(%rsi),%rsi + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + jb .Lloop_xop + + movq 152(%rsp),%rsi +.cfi_def_cfa %rsi,8 + vzeroupper + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue_xop: .byte 0xf3,0xc3 -.size sha256_block_data_order_ssse3,.-sha256_block_data_order_ssse3 - +.cfi_endproc +.size sha512_block_data_order_xop,.-sha512_block_data_order_xop +.type sha512_block_data_order_avx,@function +.align 64 +sha512_block_data_order_avx: +.cfi_startproc +.Lavx_shortcut: + movq %rsp,%rax +.cfi_def_cfa_register %rax + pushq %rbx +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_offset %r15,-56 + shlq $4,%rdx + subq $160,%rsp + leaq (%rsi,%rdx,8),%rdx + andq $-64,%rsp + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) +.cfi_escape 0x0f,0x06,0x77,0x98,0x01,0x06,0x23,0x08 +.Lprologue_avx: + + vzeroupper + movq 0(%rdi),%rax + movq 8(%rdi),%rbx + movq 16(%rdi),%rcx + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 + jmp .Lloop_avx +.align 16 +.Lloop_avx: + vmovdqa K512+1280(%rip),%xmm11 + vmovdqu 0(%rsi),%xmm0 + leaq K512+128(%rip),%rbp + vmovdqu 16(%rsi),%xmm1 + vmovdqu 32(%rsi),%xmm2 + vpshufb %xmm11,%xmm0,%xmm0 + vmovdqu 48(%rsi),%xmm3 + vpshufb %xmm11,%xmm1,%xmm1 + vmovdqu 64(%rsi),%xmm4 + vpshufb %xmm11,%xmm2,%xmm2 + vmovdqu 80(%rsi),%xmm5 + vpshufb %xmm11,%xmm3,%xmm3 + vmovdqu 96(%rsi),%xmm6 + vpshufb %xmm11,%xmm4,%xmm4 + vmovdqu 112(%rsi),%xmm7 + vpshufb %xmm11,%xmm5,%xmm5 + vpaddq -128(%rbp),%xmm0,%xmm8 + vpshufb %xmm11,%xmm6,%xmm6 + vpaddq -96(%rbp),%xmm1,%xmm9 + vpshufb %xmm11,%xmm7,%xmm7 + vpaddq -64(%rbp),%xmm2,%xmm10 + vpaddq -32(%rbp),%xmm3,%xmm11 + vmovdqa %xmm8,0(%rsp) + vpaddq 0(%rbp),%xmm4,%xmm8 + vmovdqa %xmm9,16(%rsp) + vpaddq 32(%rbp),%xmm5,%xmm9 + vmovdqa %xmm10,32(%rsp) + vpaddq 64(%rbp),%xmm6,%xmm10 + vmovdqa %xmm11,48(%rsp) + vpaddq 96(%rbp),%xmm7,%xmm11 + vmovdqa %xmm8,64(%rsp) + movq %rax,%r14 + vmovdqa %xmm9,80(%rsp) + movq %rbx,%rdi + vmovdqa %xmm10,96(%rsp) + xorq %rcx,%rdi + vmovdqa %xmm11,112(%rsp) + movq %r8,%r13 + jmp .Lavx_00_47 -.section .note.GNU-stack,"",%progbits +.align 16 +.Lavx_00_47: + addq $256,%rbp + vpalignr $8,%xmm0,%xmm1,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rax + vpalignr $8,%xmm4,%xmm5,%xmm11 + movq %r9,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r8,%r13 + xorq %r10,%r12 + vpaddq %xmm11,%xmm0,%xmm0 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r8,%r12 + xorq %r8,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 0(%rsp),%r11 + movq %rax,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rbx,%r15 + addq %r12,%r11 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm7,%xmm11 + addq %r11,%rdx + addq %rdi,%r11 + vpxor %xmm9,%xmm8,%xmm8 + movq %rdx,%r13 + addq %r11,%r14 + vpsllq $3,%xmm7,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r11 + vpaddq %xmm8,%xmm0,%xmm0 + movq %r8,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm7,%xmm9 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rdx,%r12 + xorq %rdx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 8(%rsp),%r10 + movq %r11,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r9,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rax,%rdi + addq %r12,%r10 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm0,%xmm0 + xorq %r11,%r14 + addq %r13,%r10 + vpaddq -128(%rbp),%xmm0,%xmm10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,0(%rsp) + vpalignr $8,%xmm1,%xmm2,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r10 + vpalignr $8,%xmm5,%xmm6,%xmm11 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rcx,%r13 + xorq %r8,%r12 + vpaddq %xmm11,%xmm1,%xmm1 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rcx,%r12 + xorq %rcx,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 16(%rsp),%r9 + movq %r10,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r11,%r15 + addq %r12,%r9 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm0,%xmm11 + addq %r9,%rbx + addq %rdi,%r9 + vpxor %xmm9,%xmm8,%xmm8 + movq %rbx,%r13 + addq %r9,%r14 + vpsllq $3,%xmm0,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r9 + vpaddq %xmm8,%xmm1,%xmm1 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm0,%xmm9 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rbx,%r12 + xorq %rbx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 24(%rsp),%r8 + movq %r9,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r10,%rdi + addq %r12,%r8 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm1,%xmm1 + xorq %r9,%r14 + addq %r13,%r8 + vpaddq -96(%rbp),%xmm1,%xmm10 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,16(%rsp) + vpalignr $8,%xmm2,%xmm3,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r8 + vpalignr $8,%xmm6,%xmm7,%xmm11 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rax,%r13 + xorq %rcx,%r12 + vpaddq %xmm11,%xmm2,%xmm2 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rax,%r12 + xorq %rax,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 32(%rsp),%rdx + movq %r8,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r9,%r15 + addq %r12,%rdx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm1,%xmm11 + addq %rdx,%r11 + addq %rdi,%rdx + vpxor %xmm9,%xmm8,%xmm8 + movq %r11,%r13 + addq %rdx,%r14 + vpsllq $3,%xmm1,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rdx + vpaddq %xmm8,%xmm2,%xmm2 + movq %rax,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm1,%xmm9 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r11,%r12 + xorq %r11,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 40(%rsp),%rcx + movq %rdx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r8,%rdi + addq %r12,%rcx + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm2,%xmm2 + xorq %rdx,%r14 + addq %r13,%rcx + vpaddq -64(%rbp),%xmm2,%xmm10 + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,32(%rsp) + vpalignr $8,%xmm3,%xmm4,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rcx + vpalignr $8,%xmm7,%xmm0,%xmm11 + movq %r11,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r10,%r13 + xorq %rax,%r12 + vpaddq %xmm11,%xmm3,%xmm3 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r10,%r12 + xorq %r10,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 48(%rsp),%rbx + movq %rcx,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rdx,%r15 + addq %r12,%rbx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm2,%xmm11 + addq %rbx,%r9 + addq %rdi,%rbx + vpxor %xmm9,%xmm8,%xmm8 + movq %r9,%r13 + addq %rbx,%r14 + vpsllq $3,%xmm2,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rbx + vpaddq %xmm8,%xmm3,%xmm3 + movq %r10,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm2,%xmm9 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r9,%r12 + xorq %r9,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 56(%rsp),%rax + movq %rbx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r11,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rcx,%rdi + addq %r12,%rax + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm3,%xmm3 + xorq %rbx,%r14 + addq %r13,%rax + vpaddq -32(%rbp),%xmm3,%xmm10 + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,48(%rsp) + vpalignr $8,%xmm4,%xmm5,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rax + vpalignr $8,%xmm0,%xmm1,%xmm11 + movq %r9,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r8,%r13 + xorq %r10,%r12 + vpaddq %xmm11,%xmm4,%xmm4 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r8,%r12 + xorq %r8,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 64(%rsp),%r11 + movq %rax,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rbx,%r15 + addq %r12,%r11 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm3,%xmm11 + addq %r11,%rdx + addq %rdi,%r11 + vpxor %xmm9,%xmm8,%xmm8 + movq %rdx,%r13 + addq %r11,%r14 + vpsllq $3,%xmm3,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r11 + vpaddq %xmm8,%xmm4,%xmm4 + movq %r8,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm3,%xmm9 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rdx,%r12 + xorq %rdx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 72(%rsp),%r10 + movq %r11,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r9,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rax,%rdi + addq %r12,%r10 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm4,%xmm4 + xorq %r11,%r14 + addq %r13,%r10 + vpaddq 0(%rbp),%xmm4,%xmm10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,64(%rsp) + vpalignr $8,%xmm5,%xmm6,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r10 + vpalignr $8,%xmm1,%xmm2,%xmm11 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rcx,%r13 + xorq %r8,%r12 + vpaddq %xmm11,%xmm5,%xmm5 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rcx,%r12 + xorq %rcx,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 80(%rsp),%r9 + movq %r10,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r11,%r15 + addq %r12,%r9 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm4,%xmm11 + addq %r9,%rbx + addq %rdi,%r9 + vpxor %xmm9,%xmm8,%xmm8 + movq %rbx,%r13 + addq %r9,%r14 + vpsllq $3,%xmm4,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r9 + vpaddq %xmm8,%xmm5,%xmm5 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm4,%xmm9 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rbx,%r12 + xorq %rbx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 88(%rsp),%r8 + movq %r9,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r10,%rdi + addq %r12,%r8 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm5,%xmm5 + xorq %r9,%r14 + addq %r13,%r8 + vpaddq 32(%rbp),%xmm5,%xmm10 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,80(%rsp) + vpalignr $8,%xmm6,%xmm7,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r8 + vpalignr $8,%xmm2,%xmm3,%xmm11 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rax,%r13 + xorq %rcx,%r12 + vpaddq %xmm11,%xmm6,%xmm6 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rax,%r12 + xorq %rax,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 96(%rsp),%rdx + movq %r8,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r9,%r15 + addq %r12,%rdx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm5,%xmm11 + addq %rdx,%r11 + addq %rdi,%rdx + vpxor %xmm9,%xmm8,%xmm8 + movq %r11,%r13 + addq %rdx,%r14 + vpsllq $3,%xmm5,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rdx + vpaddq %xmm8,%xmm6,%xmm6 + movq %rax,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm5,%xmm9 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r11,%r12 + xorq %r11,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 104(%rsp),%rcx + movq %rdx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r8,%rdi + addq %r12,%rcx + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm6,%xmm6 + xorq %rdx,%r14 + addq %r13,%rcx + vpaddq 64(%rbp),%xmm6,%xmm10 + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,96(%rsp) + vpalignr $8,%xmm7,%xmm0,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rcx + vpalignr $8,%xmm3,%xmm4,%xmm11 + movq %r11,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r10,%r13 + xorq %rax,%r12 + vpaddq %xmm11,%xmm7,%xmm7 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r10,%r12 + xorq %r10,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 112(%rsp),%rbx + movq %rcx,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rdx,%r15 + addq %r12,%rbx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm6,%xmm11 + addq %rbx,%r9 + addq %rdi,%rbx + vpxor %xmm9,%xmm8,%xmm8 + movq %r9,%r13 + addq %rbx,%r14 + vpsllq $3,%xmm6,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rbx + vpaddq %xmm8,%xmm7,%xmm7 + movq %r10,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm6,%xmm9 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r9,%r12 + xorq %r9,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 120(%rsp),%rax + movq %rbx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r11,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rcx,%rdi + addq %r12,%rax + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm7,%xmm7 + xorq %rbx,%r14 + addq %r13,%rax + vpaddq 96(%rbp),%xmm7,%xmm10 + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,112(%rsp) + cmpb $0,135(%rbp) + jne .Lavx_00_47 + shrdq $23,%r13,%r13 + movq %r14,%rax + movq %r9,%r12 + shrdq $5,%r14,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 0(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r11 + movq %r8,%r12 + shrdq $5,%r14,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 8(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + shrdq $6,%r14,%r14 + xorq %rax,%rdi + addq %r12,%r10 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r10 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 16(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + xorq %r11,%r15 + addq %r12,%r9 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r9 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 24(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + xorq %r10,%rdi + addq %r12,%r8 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r8 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 32(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + xorq %r9,%r15 + addq %r12,%rdx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + shrdq $28,%r14,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rdx + movq %rax,%r12 + shrdq $5,%r14,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 40(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + xorq %r8,%rdi + addq %r12,%rcx + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rcx + movq %r11,%r12 + shrdq $5,%r14,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 48(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rbx + movq %r10,%r12 + shrdq $5,%r14,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 56(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + shrdq $6,%r14,%r14 + xorq %rcx,%rdi + addq %r12,%rax + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rax + movq %r9,%r12 + shrdq $5,%r14,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 64(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r11 + movq %r8,%r12 + shrdq $5,%r14,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 72(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + shrdq $6,%r14,%r14 + xorq %rax,%rdi + addq %r12,%r10 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r10 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 80(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + xorq %r11,%r15 + addq %r12,%r9 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r9 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 88(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + xorq %r10,%rdi + addq %r12,%r8 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r8 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 96(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + xorq %r9,%r15 + addq %r12,%rdx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + shrdq $28,%r14,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rdx + movq %rax,%r12 + shrdq $5,%r14,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 104(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + xorq %r8,%rdi + addq %r12,%rcx + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rcx + movq %r11,%r12 + shrdq $5,%r14,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 112(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rbx + movq %r10,%r12 + shrdq $5,%r14,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 120(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + shrdq $6,%r14,%r14 + xorq %rcx,%rdi + addq %r12,%rax + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + movq 128+0(%rsp),%rdi + movq %r14,%rax + + addq 0(%rdi),%rax + leaq 128(%rsi),%rsi + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + jb .Lloop_avx + + movq 152(%rsp),%rsi +.cfi_def_cfa %rsi,8 + vzeroupper + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue_avx: + .byte 0xf3,0xc3 +.cfi_endproc +.size sha512_block_data_order_avx,.-sha512_block_data_order_avx +.type sha512_block_data_order_avx2,@function +.align 64 +sha512_block_data_order_avx2: +.cfi_startproc +.Lavx2_shortcut: + movq %rsp,%rax +.cfi_def_cfa_register %rax + pushq %rbx +.cfi_offset %rbx,-16 + pushq %rbp +.cfi_offset %rbp,-24 + pushq %r12 +.cfi_offset %r12,-32 + pushq %r13 +.cfi_offset %r13,-40 + pushq %r14 +.cfi_offset %r14,-48 + pushq %r15 +.cfi_offset %r15,-56 + subq $1312,%rsp + shlq $4,%rdx + andq $-2048,%rsp + leaq (%rsi,%rdx,8),%rdx + addq $1152,%rsp + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) +.cfi_escape 0x0f,0x06,0x77,0x98,0x01,0x06,0x23,0x08 +.Lprologue_avx2: + + vzeroupper + subq $-128,%rsi + movq 0(%rdi),%rax + movq %rsi,%r12 + movq 8(%rdi),%rbx + cmpq %rdx,%rsi + movq 16(%rdi),%rcx + cmoveq %rsp,%r12 + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 + jmp .Loop_avx2 +.align 16 +.Loop_avx2: + vmovdqu -128(%rsi),%xmm0 + vmovdqu -128+16(%rsi),%xmm1 + vmovdqu -128+32(%rsi),%xmm2 + leaq K512+128(%rip),%rbp + vmovdqu -128+48(%rsi),%xmm3 + vmovdqu -128+64(%rsi),%xmm4 + vmovdqu -128+80(%rsi),%xmm5 + vmovdqu -128+96(%rsi),%xmm6 + vmovdqu -128+112(%rsi),%xmm7 + + vmovdqa 1152(%rbp),%ymm10 + vinserti128 $1,(%r12),%ymm0,%ymm0 + vinserti128 $1,16(%r12),%ymm1,%ymm1 + vpshufb %ymm10,%ymm0,%ymm0 + vinserti128 $1,32(%r12),%ymm2,%ymm2 + vpshufb %ymm10,%ymm1,%ymm1 + vinserti128 $1,48(%r12),%ymm3,%ymm3 + vpshufb %ymm10,%ymm2,%ymm2 + vinserti128 $1,64(%r12),%ymm4,%ymm4 + vpshufb %ymm10,%ymm3,%ymm3 + vinserti128 $1,80(%r12),%ymm5,%ymm5 + vpshufb %ymm10,%ymm4,%ymm4 + vinserti128 $1,96(%r12),%ymm6,%ymm6 + vpshufb %ymm10,%ymm5,%ymm5 + vinserti128 $1,112(%r12),%ymm7,%ymm7 + + vpaddq -128(%rbp),%ymm0,%ymm8 + vpshufb %ymm10,%ymm6,%ymm6 + vpaddq -96(%rbp),%ymm1,%ymm9 + vpshufb %ymm10,%ymm7,%ymm7 + vpaddq -64(%rbp),%ymm2,%ymm10 + vpaddq -32(%rbp),%ymm3,%ymm11 + vmovdqa %ymm8,0(%rsp) + vpaddq 0(%rbp),%ymm4,%ymm8 + vmovdqa %ymm9,32(%rsp) + vpaddq 32(%rbp),%ymm5,%ymm9 + vmovdqa %ymm10,64(%rsp) + vpaddq 64(%rbp),%ymm6,%ymm10 + vmovdqa %ymm11,96(%rsp) + leaq -128(%rsp),%rsp + vpaddq 96(%rbp),%ymm7,%ymm11 + vmovdqa %ymm8,0(%rsp) + xorq %r14,%r14 + vmovdqa %ymm9,32(%rsp) + movq %rbx,%rdi + vmovdqa %ymm10,64(%rsp) + xorq %rcx,%rdi + vmovdqa %ymm11,96(%rsp) + movq %r9,%r12 + addq $32*8,%rbp + jmp .Lavx2_00_47 +.align 16 +.Lavx2_00_47: + leaq -128(%rsp),%rsp + vpalignr $8,%ymm0,%ymm1,%ymm8 + addq 0+256(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + vpalignr $8,%ymm4,%ymm5,%ymm11 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + vpsrlq $1,%ymm8,%ymm10 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + vpaddq %ymm11,%ymm0,%ymm0 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + vpsrlq $6,%ymm7,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + vpsllq $3,%ymm7,%ymm10 + vpaddq %ymm8,%ymm0,%ymm0 + addq 8+256(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + vpsrlq $19,%ymm7,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + vpaddq %ymm11,%ymm0,%ymm0 + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + vpaddq -128(%rbp),%ymm0,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + vmovdqa %ymm10,0(%rsp) + vpalignr $8,%ymm1,%ymm2,%ymm8 + addq 32+256(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + vpalignr $8,%ymm5,%ymm6,%ymm11 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + vpsrlq $1,%ymm8,%ymm10 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + vpaddq %ymm11,%ymm1,%ymm1 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + vpsrlq $6,%ymm0,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + vpsllq $3,%ymm0,%ymm10 + vpaddq %ymm8,%ymm1,%ymm1 + addq 40+256(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + vpsrlq $19,%ymm0,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + vpaddq %ymm11,%ymm1,%ymm1 + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + vpaddq -96(%rbp),%ymm1,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + vmovdqa %ymm10,32(%rsp) + vpalignr $8,%ymm2,%ymm3,%ymm8 + addq 64+256(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + vpalignr $8,%ymm6,%ymm7,%ymm11 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + vpsrlq $1,%ymm8,%ymm10 + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + vpaddq %ymm11,%ymm2,%ymm2 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + vpsrlq $6,%ymm1,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + vpsllq $3,%ymm1,%ymm10 + vpaddq %ymm8,%ymm2,%ymm2 + addq 72+256(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + vpsrlq $19,%ymm1,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + vpaddq %ymm11,%ymm2,%ymm2 + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + vpaddq -64(%rbp),%ymm2,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + vmovdqa %ymm10,64(%rsp) + vpalignr $8,%ymm3,%ymm4,%ymm8 + addq 96+256(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + vpalignr $8,%ymm7,%ymm0,%ymm11 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + vpsrlq $1,%ymm8,%ymm10 + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + vpaddq %ymm11,%ymm3,%ymm3 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + vpsrlq $6,%ymm2,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + vpsllq $3,%ymm2,%ymm10 + vpaddq %ymm8,%ymm3,%ymm3 + addq 104+256(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + vpsrlq $19,%ymm2,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + vpaddq %ymm11,%ymm3,%ymm3 + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + vpaddq -32(%rbp),%ymm3,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + vmovdqa %ymm10,96(%rsp) + leaq -128(%rsp),%rsp + vpalignr $8,%ymm4,%ymm5,%ymm8 + addq 0+256(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + vpalignr $8,%ymm0,%ymm1,%ymm11 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + vpsrlq $1,%ymm8,%ymm10 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + vpaddq %ymm11,%ymm4,%ymm4 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + vpsrlq $6,%ymm3,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + vpsllq $3,%ymm3,%ymm10 + vpaddq %ymm8,%ymm4,%ymm4 + addq 8+256(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + vpsrlq $19,%ymm3,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + vpaddq %ymm11,%ymm4,%ymm4 + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + vpaddq 0(%rbp),%ymm4,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + vmovdqa %ymm10,0(%rsp) + vpalignr $8,%ymm5,%ymm6,%ymm8 + addq 32+256(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + vpalignr $8,%ymm1,%ymm2,%ymm11 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + vpsrlq $1,%ymm8,%ymm10 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + vpaddq %ymm11,%ymm5,%ymm5 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + vpsrlq $6,%ymm4,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + vpsllq $3,%ymm4,%ymm10 + vpaddq %ymm8,%ymm5,%ymm5 + addq 40+256(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + vpsrlq $19,%ymm4,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + vpaddq %ymm11,%ymm5,%ymm5 + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + vpaddq 32(%rbp),%ymm5,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + vmovdqa %ymm10,32(%rsp) + vpalignr $8,%ymm6,%ymm7,%ymm8 + addq 64+256(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + vpalignr $8,%ymm2,%ymm3,%ymm11 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + vpsrlq $1,%ymm8,%ymm10 + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + vpaddq %ymm11,%ymm6,%ymm6 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + vpsrlq $6,%ymm5,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + vpsllq $3,%ymm5,%ymm10 + vpaddq %ymm8,%ymm6,%ymm6 + addq 72+256(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + vpsrlq $19,%ymm5,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + vpaddq %ymm11,%ymm6,%ymm6 + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + vpaddq 64(%rbp),%ymm6,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + vmovdqa %ymm10,64(%rsp) + vpalignr $8,%ymm7,%ymm0,%ymm8 + addq 96+256(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + vpalignr $8,%ymm3,%ymm4,%ymm11 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + vpsrlq $1,%ymm8,%ymm10 + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + vpaddq %ymm11,%ymm7,%ymm7 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + vpsrlq $6,%ymm6,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + vpsllq $3,%ymm6,%ymm10 + vpaddq %ymm8,%ymm7,%ymm7 + addq 104+256(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + vpsrlq $19,%ymm6,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + vpaddq %ymm11,%ymm7,%ymm7 + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + vpaddq 96(%rbp),%ymm7,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + vmovdqa %ymm10,96(%rsp) + leaq 256(%rbp),%rbp + cmpb $0,-121(%rbp) + jne .Lavx2_00_47 + addq 0+128(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + addq 8+128(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + addq 32+128(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + addq 40+128(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + addq 64+128(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + addq 72+128(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + addq 96+128(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + addq 104+128(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + addq 0(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + addq 8(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + addq 32(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + addq 40(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + addq 64(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + addq 72(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + addq 96(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + addq 104(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + movq 1280(%rsp),%rdi + addq %r14,%rax + + leaq 1152(%rsp),%rbp + + addq 0(%rdi),%rax + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + + cmpq 144(%rbp),%rsi + je .Ldone_avx2 + + xorq %r14,%r14 + movq %rbx,%rdi + xorq %rcx,%rdi + movq %r9,%r12 + jmp .Lower_avx2 +.align 16 +.Lower_avx2: + addq 0+16(%rbp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + addq 8+16(%rbp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + addq 32+16(%rbp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + addq 40+16(%rbp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + addq 64+16(%rbp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + addq 72+16(%rbp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + addq 96+16(%rbp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + addq 104+16(%rbp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + leaq -128(%rbp),%rbp + cmpq %rsp,%rbp + jae .Lower_avx2 + + movq 1280(%rsp),%rdi + addq %r14,%rax + + leaq 1152(%rsp),%rsp + + addq 0(%rdi),%rax + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + leaq 256(%rsi),%rsi + addq 48(%rdi),%r10 + movq %rsi,%r12 + addq 56(%rdi),%r11 + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + cmoveq %rsp,%r12 + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + + jbe .Loop_avx2 + leaq (%rsp),%rbp + +.Ldone_avx2: + leaq (%rbp),%rsp + movq 152(%rsp),%rsi +.cfi_def_cfa %rsi,8 + vzeroupper + movq -48(%rsi),%r15 +.cfi_restore %r15 + movq -40(%rsi),%r14 +.cfi_restore %r14 + movq -32(%rsi),%r13 +.cfi_restore %r13 + movq -24(%rsi),%r12 +.cfi_restore %r12 + movq -16(%rsi),%rbp +.cfi_restore %rbp + movq -8(%rsi),%rbx +.cfi_restore %rbx + leaq (%rsi),%rsp +.cfi_def_cfa_register %rsp +.Lepilogue_avx2: + .byte 0xf3,0xc3 +.cfi_endproc +.size sha512_block_data_order_avx2,.-sha512_block_data_order_avx2 +.section .note.GNU-stack,"",%progbits diff --git a/lib/accelerated/x86/files.mk b/lib/accelerated/x86/files.mk index a134213922..ac1f2b05bd 100644 --- a/lib/accelerated/x86/files.mk +++ b/lib/accelerated/x86/files.mk @@ -1,9 +1,9 @@ -X86_FILES_ELF=elf/aesni-x86.s elf/cpuid-x86.s elf/sha1-ssse3-x86.s elf/sha256-ssse3-x86.s elf/sha512-ssse3-x86.s elf/aes-ssse3-x86.s -X86_FILES_COFF=coff/aesni-x86.s coff/cpuid-x86.s coff/sha1-ssse3-x86.s coff/sha256-ssse3-x86.s coff/sha512-ssse3-x86.s coff/aes-ssse3-x86.s -X86_FILES_MACOSX=macosx/aesni-x86.s macosx/cpuid-x86.s macosx/sha1-ssse3-x86.s macosx/sha256-ssse3-x86.s macosx/sha512-ssse3-x86.s macosx/aes-ssse3-x86.s -X86_64_FILES_ELF=elf/aesni-x86_64.s elf/cpuid-x86_64.s elf/ghash-x86_64.s elf/sha1-ssse3-x86_64.s elf/sha512-ssse3-x86_64.s elf/aes-ssse3-x86_64.s elf/aesni-gcm-x86_64.s -X86_64_FILES_COFF=coff/aesni-x86_64.s coff/cpuid-x86_64.s coff/ghash-x86_64.s coff/sha1-ssse3-x86_64.s coff/sha512-ssse3-x86_64.s coff/aes-ssse3-x86_64.s coff/aesni-gcm-x86_64.s -X86_64_FILES_MACOSX=macosx/aesni-x86_64.s macosx/cpuid-x86_64.s macosx/ghash-x86_64.s macosx/sha1-ssse3-x86_64.s macosx/sha512-ssse3-x86_64.s macosx/aes-ssse3-x86_64.s macosx/aesni-gcm-x86_64.s +X86_FILES_ELF=elf/aesni-x86.s elf/sha1-ssse3-x86.s elf/sha256-ssse3-x86.s elf/sha512-ssse3-x86.s elf/aes-ssse3-x86.s +X86_FILES_COFF=coff/aesni-x86.s coff/sha1-ssse3-x86.s coff/sha256-ssse3-x86.s coff/sha512-ssse3-x86.s coff/aes-ssse3-x86.s +X86_FILES_MACOSX=macosx/aesni-x86.s macosx/sha1-ssse3-x86.s macosx/sha256-ssse3-x86.s macosx/sha512-ssse3-x86.s macosx/aes-ssse3-x86.s +X86_64_FILES_ELF=elf/aesni-x86_64.s elf/ghash-x86_64.s elf/sha1-ssse3-x86_64.s elf/sha512-ssse3-x86_64.s elf/aes-ssse3-x86_64.s elf/aesni-gcm-x86_64.s elf/sha256-ssse3-x86_64.s +X86_64_FILES_COFF=coff/aesni-x86_64.s coff/ghash-x86_64.s coff/sha1-ssse3-x86_64.s coff/sha512-ssse3-x86_64.s coff/aes-ssse3-x86_64.s coff/aesni-gcm-x86_64.s coff/sha256-ssse3-x86_64.s +X86_64_FILES_MACOSX=macosx/aesni-x86_64.s macosx/ghash-x86_64.s macosx/sha1-ssse3-x86_64.s macosx/sha512-ssse3-x86_64.s macosx/aes-ssse3-x86_64.s macosx/aesni-gcm-x86_64.s macosx/sha256-ssse3-x86_64.s X86_PADLOCK_FILES_ELF=elf/e_padlock-x86.s X86_PADLOCK_FILES_COFF=coff/e_padlock-x86.s X86_PADLOCK_FILES_MACOSX=macosx/e_padlock-x86.s diff --git a/lib/accelerated/x86/hmac-padlock.c b/lib/accelerated/x86/hmac-padlock.c index 94f58f5f4a..be6c55bc33 100644 --- a/lib/accelerated/x86/hmac-padlock.c +++ b/lib/accelerated/x86/hmac-padlock.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -223,6 +223,25 @@ static int wrap_padlock_hmac_init(gnutls_mac_algorithm_t algo, void **_ctx) return 0; } +static void * +wrap_padlock_hmac_copy(const void *_ctx) +{ + struct padlock_hmac_ctx *new_ctx; + const struct padlock_hmac_ctx *ctx=_ctx; + ptrdiff_t off = (uint8_t *)ctx->ctx_ptr - (uint8_t *)(&ctx->ctx); + + new_ctx = gnutls_malloc(sizeof(struct padlock_hmac_ctx)); + if (new_ctx == NULL) { + gnutls_assert(); + return NULL; + } + + memcpy(new_ctx, ctx, sizeof(*new_ctx)); + new_ctx->ctx_ptr = (uint8_t *)&new_ctx->ctx + off; + + return new_ctx; +} + static int wrap_padlock_hmac_setkey(void *_ctx, const void *key, size_t keylen) { @@ -344,6 +363,7 @@ const gnutls_crypto_mac_st _gnutls_hmac_sha_padlock_nano = { .setnonce = NULL, .hash = wrap_padlock_hmac_update, .output = wrap_padlock_hmac_output, + .copy = wrap_padlock_hmac_copy, .deinit = wrap_padlock_hmac_deinit, .fast = wrap_padlock_hmac_fast, }; diff --git a/lib/accelerated/x86/hmac-x86-ssse3.c b/lib/accelerated/x86/hmac-x86-ssse3.c index dd641aa528..f4ead02c47 100644 --- a/lib/accelerated/x86/hmac-x86-ssse3.c +++ b/lib/accelerated/x86/hmac-x86-ssse3.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -45,10 +45,8 @@ struct x86_hmac_ctx { struct hmac_sha1_ctx sha1; struct hmac_sha224_ctx sha224; struct hmac_sha256_ctx sha256; -#ifdef ENABLE_SHA512 struct hmac_sha384_ctx sha384; struct hmac_sha512_ctx sha512; -#endif } ctx; void *ctx_ptr; @@ -115,7 +113,6 @@ x86_hmac_sha224_digest(struct hmac_sha224_ctx *ctx, HMAC_DIGEST(ctx, &x86_sha224, length, digest); } -#ifdef ENABLE_SHA512 static void x86_hmac_sha384_set_key(struct hmac_sha384_ctx *ctx, size_t key_length, const uint8_t * key) @@ -150,7 +147,6 @@ x86_hmac_sha512_digest(struct hmac_sha512_ctx *ctx, { HMAC_DIGEST(ctx, &x86_sha512, length, digest); } -#endif static int _hmac_ctx_init(gnutls_mac_algorithm_t algo, struct x86_hmac_ctx *ctx) @@ -177,7 +173,6 @@ _hmac_ctx_init(gnutls_mac_algorithm_t algo, struct x86_hmac_ctx *ctx) ctx->ctx_ptr = &ctx->ctx.sha256; ctx->length = SHA256_DIGEST_SIZE; break; -#ifdef ENABLE_SHA512 case GNUTLS_MAC_SHA384: ctx->update = (update_func) x86_hmac_sha512_update; ctx->digest = (digest_func) x86_hmac_sha384_digest; @@ -192,7 +187,6 @@ _hmac_ctx_init(gnutls_mac_algorithm_t algo, struct x86_hmac_ctx *ctx) ctx->ctx_ptr = &ctx->ctx.sha512; ctx->length = SHA512_DIGEST_SIZE; break; -#endif default: gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; @@ -224,6 +218,25 @@ static int wrap_x86_hmac_init(gnutls_mac_algorithm_t algo, void **_ctx) return 0; } +static void * +wrap_x86_hmac_copy(const void *_ctx) +{ + struct x86_hmac_ctx *new_ctx; + const struct x86_hmac_ctx *ctx=_ctx; + ptrdiff_t off = (uint8_t *)ctx->ctx_ptr - (uint8_t *)(&ctx->ctx); + + new_ctx = gnutls_malloc(sizeof(struct x86_hmac_ctx)); + if (new_ctx == NULL) { + gnutls_assert(); + return NULL; + } + + memcpy(new_ctx, ctx, sizeof(*new_ctx)); + new_ctx->ctx_ptr = (uint8_t *)&new_ctx->ctx + off; + + return new_ctx; +} + static int wrap_x86_hmac_setkey(void *_ctx, const void *key, size_t keylen) { @@ -293,6 +306,7 @@ const gnutls_crypto_mac_st _gnutls_hmac_sha_x86_ssse3 = { .setnonce = NULL, .hash = wrap_x86_hmac_update, .output = wrap_x86_hmac_output, + .copy = wrap_x86_hmac_copy, .deinit = wrap_x86_hmac_deinit, .fast = wrap_x86_hmac_fast, }; diff --git a/lib/accelerated/x86/license.txt b/lib/accelerated/x86/license.txt index a50b3a0b9d..7f7caab1cc 100755 --- a/lib/accelerated/x86/license.txt +++ b/lib/accelerated/x86/license.txt @@ -2,7 +2,7 @@ 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/. +details see https://www.openssl.org/~appro/cryptogams/. ==================================================================== Copyright (c) 2006-2012, CRYPTOGAMS by @@ -50,5 +50,5 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ## By Mike Hamburg (Stanford University), 2009 ## Public domain. ## -## For details see http://shiftleft.org/papers/vector_aes/ and -## http://crypto.stanford.edu/vpaes/. +## For details see https://shiftleft.org/papers/vector_aes/ and +## https://crypto.stanford.edu/vpaes/. diff --git a/lib/accelerated/x86/macosx/aes-ssse3-x86.s b/lib/accelerated/x86/macosx/aes-ssse3-x86.s index 3c12cbf20e..4be899281b 100644 --- a/lib/accelerated/x86/macosx/aes-ssse3-x86.s +++ b/lib/accelerated/x86/macosx/aes-ssse3-x86.s @@ -10,7 +10,6 @@ # # *** This file is auto-generated *** # -.file "vpaes-x86.s" .text .align 6,0x90 L_vpaes_consts: diff --git a/lib/accelerated/x86/macosx/aes-ssse3-x86_64.s b/lib/accelerated/x86/macosx/aes-ssse3-x86_64.s index 6014d41ba0..3d5c652266 100644 --- a/lib/accelerated/x86/macosx/aes-ssse3-x86_64.s +++ b/lib/accelerated/x86/macosx/aes-ssse3-x86_64.s @@ -30,6 +30,7 @@ .p2align 4 _vpaes_encrypt_core: + movq %rdx,%r9 movq $16,%r11 movl 240(%rdx),%eax @@ -118,8 +119,10 @@ L$enc_entry: + .p2align 4 _vpaes_decrypt_core: + movq %rdx,%r9 movl 240(%rdx),%eax movdqa %xmm9,%xmm1 @@ -224,6 +227,7 @@ L$dec_entry: + .p2align 4 _vpaes_schedule_core: @@ -231,6 +235,7 @@ _vpaes_schedule_core: + call _vpaes_preheat movdqa L$k_rcon(%rip),%xmm8 movdqu (%rdi),%xmm0 @@ -409,8 +414,10 @@ L$schedule_mangle_last_dec: + .p2align 4 _vpaes_schedule_192_smear: + pshufd $0x80,%xmm6,%xmm1 pshufd $0xFE,%xmm7,%xmm0 pxor %xmm1,%xmm6 @@ -438,11 +445,13 @@ _vpaes_schedule_192_smear: + .p2align 4 _vpaes_schedule_round: + pxor %xmm1,%xmm1 .byte 102,65,15,58,15,200,15 .byte 102,69,15,58,15,192,15 @@ -507,8 +516,10 @@ _vpaes_schedule_low_round: + .p2align 4 _vpaes_schedule_transform: + movdqa %xmm9,%xmm1 pandn %xmm0,%xmm1 psrld $4,%xmm1 @@ -543,10 +554,12 @@ _vpaes_schedule_transform: + .p2align 4 _vpaes_schedule_mangle: + movdqa %xmm0,%xmm4 movdqa L$k_mc_forward(%rip),%xmm5 testq %rcx,%rcx @@ -616,10 +629,12 @@ L$schedule_mangle_both: + .globl _vpaes_set_encrypt_key .p2align 4 _vpaes_set_encrypt_key: + movl %esi,%eax shrl $5,%eax addl $5,%eax @@ -632,10 +647,12 @@ _vpaes_set_encrypt_key: .byte 0xf3,0xc3 + .globl _vpaes_set_decrypt_key .p2align 4 _vpaes_set_decrypt_key: + movl %esi,%eax shrl $5,%eax addl $5,%eax @@ -653,10 +670,12 @@ _vpaes_set_decrypt_key: .byte 0xf3,0xc3 + .globl _vpaes_encrypt .p2align 4 _vpaes_encrypt: + movdqu (%rdi),%xmm0 call _vpaes_preheat call _vpaes_encrypt_core @@ -664,20 +683,24 @@ _vpaes_encrypt: .byte 0xf3,0xc3 + .globl _vpaes_decrypt .p2align 4 _vpaes_decrypt: + movdqu (%rdi),%xmm0 call _vpaes_preheat call _vpaes_decrypt_core movdqu %xmm0,(%rsi) .byte 0xf3,0xc3 + .globl _vpaes_cbc_encrypt .p2align 4 _vpaes_cbc_encrypt: + xchgq %rcx,%rdx subq $16,%rcx jc L$cbc_abort @@ -721,8 +744,10 @@ L$cbc_abort: + .p2align 4 _vpaes_preheat: + leaq L$k_s0F(%rip),%r10 movdqa -32(%r10),%xmm10 movdqa -16(%r10),%xmm11 @@ -739,6 +764,7 @@ _vpaes_preheat: + .p2align 6 _vpaes_consts: L$k_inv: diff --git a/lib/accelerated/x86/macosx/aesni-gcm-x86_64.s b/lib/accelerated/x86/macosx/aesni-gcm-x86_64.s index 002041cee2..d540930b5b 100644 --- a/lib/accelerated/x86/macosx/aesni-gcm-x86_64.s +++ b/lib/accelerated/x86/macosx/aesni-gcm-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -354,17 +354,25 @@ L$6x_done: .p2align 5 _aesni_gcm_decrypt: + xorq %r10,%r10 cmpq $0x60,%rdx jb L$gcm_dec_abort leaq (%rsp),%rax + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + vzeroupper vmovdqu (%r8),%xmm1 @@ -426,17 +434,25 @@ L$dec_no_key_aliasing: vzeroupper movq -48(%rax),%r15 + movq -40(%rax),%r14 + movq -32(%rax),%r13 + movq -24(%rax),%r12 + movq -16(%rax),%rbp + movq -8(%rax),%rbx + leaq (%rax),%rsp + L$gcm_dec_abort: movq %r10,%rax .byte 0xf3,0xc3 + .p2align 5 _aesni_ctr32_6x: vmovdqu 0-128(%rcx),%xmm4 @@ -531,17 +547,25 @@ L$handle_ctr32_2: .p2align 5 _aesni_gcm_encrypt: + xorq %r10,%r10 cmpq $288,%rdx jb L$gcm_enc_abort leaq (%rsp),%rax + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + vzeroupper vmovdqu (%r8),%xmm1 @@ -767,16 +791,24 @@ L$enc_no_key_aliasing: vzeroupper movq -48(%rax),%r15 + movq -40(%rax),%r14 + movq -32(%rax),%r13 + movq -24(%rax),%r12 + movq -16(%rax),%rbp + movq -8(%rax),%rbx + leaq (%rax),%rsp + L$gcm_enc_abort: movq %r10,%rax .byte 0xf3,0xc3 + .p2align 6 L$bswap_mask: .byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 diff --git a/lib/accelerated/x86/macosx/aesni-x86.s b/lib/accelerated/x86/macosx/aesni-x86.s index 09ca1cbc5c..ee50089146 100644 --- a/lib/accelerated/x86/macosx/aesni-x86.s +++ b/lib/accelerated/x86/macosx/aesni-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "devel/perlasm/aesni-x86.s" .text .globl _aesni_encrypt .align 4 @@ -59,7 +58,10 @@ L000enc1_loop_1: leal 16(%edx),%edx jnz L000enc1_loop_1 .byte 102,15,56,221,209 + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 movups %xmm2,(%eax) + pxor %xmm2,%xmm2 ret .globl _aesni_decrypt .align 4 @@ -81,30 +83,84 @@ L001dec1_loop_2: leal 16(%edx),%edx jnz L001dec1_loop_2 .byte 102,15,56,223,209 + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 movups %xmm2,(%eax) + pxor %xmm2,%xmm2 + ret +.align 4 +__aesni_encrypt2: + movups (%edx),%xmm0 + shll $4,%ecx + movups 16(%edx),%xmm1 + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +L002enc2_loop: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 + movups -16(%edx,%ecx,1),%xmm0 + jnz L002enc2_loop +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,221,208 +.byte 102,15,56,221,216 + ret +.align 4 +__aesni_decrypt2: + movups (%edx),%xmm0 + shll $4,%ecx + movups 16(%edx),%xmm1 + xorps %xmm0,%xmm2 + pxor %xmm0,%xmm3 + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +L003dec2_loop: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 + movups -16(%edx,%ecx,1),%xmm0 + jnz L003dec2_loop +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,223,208 +.byte 102,15,56,223,216 ret .align 4 __aesni_encrypt3: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 - movups (%edx),%xmm0 -L002enc3_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +L004enc3_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 - decl %ecx .byte 102,15,56,220,225 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 .byte 102,15,56,220,216 - leal 32(%edx),%edx .byte 102,15,56,220,224 - movups (%edx),%xmm0 - jnz L002enc3_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz L004enc3_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 @@ -115,25 +171,26 @@ L002enc3_loop: .align 4 __aesni_decrypt3: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 - movups (%edx),%xmm0 -L003dec3_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx + addl $16,%ecx +L005dec3_loop: .byte 102,15,56,222,209 .byte 102,15,56,222,217 - decl %ecx .byte 102,15,56,222,225 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,222,208 .byte 102,15,56,222,216 - leal 32(%edx),%edx .byte 102,15,56,222,224 - movups (%edx),%xmm0 - jnz L003dec3_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz L005dec3_loop .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 @@ -145,27 +202,29 @@ L003dec3_loop: __aesni_encrypt4: movups (%edx),%xmm0 movups 16(%edx),%xmm1 - shrl $1,%ecx - leal 32(%edx),%edx + shll $4,%ecx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 pxor %xmm0,%xmm5 - movups (%edx),%xmm0 -L004enc4_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 15,31,64,0 + addl $16,%ecx +L006enc4_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 - decl %ecx .byte 102,15,56,220,225 .byte 102,15,56,220,233 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 .byte 102,15,56,220,216 - leal 32(%edx),%edx .byte 102,15,56,220,224 .byte 102,15,56,220,232 - movups (%edx),%xmm0 - jnz L004enc4_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz L006enc4_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 @@ -179,27 +238,29 @@ L004enc4_loop: __aesni_decrypt4: movups (%edx),%xmm0 movups 16(%edx),%xmm1 - shrl $1,%ecx - leal 32(%edx),%edx + shll $4,%ecx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 pxor %xmm0,%xmm4 pxor %xmm0,%xmm5 - movups (%edx),%xmm0 -L005dec4_loop: + movups 32(%edx),%xmm0 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 15,31,64,0 + addl $16,%ecx +L007dec4_loop: .byte 102,15,56,222,209 .byte 102,15,56,222,217 - decl %ecx .byte 102,15,56,222,225 .byte 102,15,56,222,233 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,222,208 .byte 102,15,56,222,216 - leal 32(%edx),%edx .byte 102,15,56,222,224 .byte 102,15,56,222,232 - movups (%edx),%xmm0 - jnz L005dec4_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz L007dec4_loop .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 @@ -212,45 +273,42 @@ L005dec4_loop: .align 4 __aesni_encrypt6: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 -.byte 102,15,56,220,209 pxor %xmm0,%xmm4 -.byte 102,15,56,220,217 +.byte 102,15,56,220,209 pxor %xmm0,%xmm5 - decl %ecx -.byte 102,15,56,220,225 pxor %xmm0,%xmm6 -.byte 102,15,56,220,233 +.byte 102,15,56,220,217 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 102,15,56,220,225 pxor %xmm0,%xmm7 -.byte 102,15,56,220,241 - movups (%edx),%xmm0 -.byte 102,15,56,220,249 - jmp L_aesni_encrypt6_enter + movups (%edx,%ecx,1),%xmm0 + addl $16,%ecx + jmp L008_aesni_encrypt6_inner .align 4,0x90 -L006enc6_loop: +L009enc6_loop: .byte 102,15,56,220,209 .byte 102,15,56,220,217 - decl %ecx .byte 102,15,56,220,225 +L008_aesni_encrypt6_inner: .byte 102,15,56,220,233 .byte 102,15,56,220,241 .byte 102,15,56,220,249 -.align 4,0x90 L_aesni_encrypt6_enter: - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 .byte 102,15,56,220,216 - leal 32(%edx),%edx .byte 102,15,56,220,224 .byte 102,15,56,220,232 .byte 102,15,56,220,240 .byte 102,15,56,220,248 - movups (%edx),%xmm0 - jnz L006enc6_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz L009enc6_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 .byte 102,15,56,220,225 @@ -267,45 +325,42 @@ L_aesni_encrypt6_enter: .align 4 __aesni_decrypt6: movups (%edx),%xmm0 - shrl $1,%ecx + shll $4,%ecx movups 16(%edx),%xmm1 - leal 32(%edx),%edx xorps %xmm0,%xmm2 pxor %xmm0,%xmm3 -.byte 102,15,56,222,209 pxor %xmm0,%xmm4 -.byte 102,15,56,222,217 +.byte 102,15,56,222,209 pxor %xmm0,%xmm5 - decl %ecx -.byte 102,15,56,222,225 pxor %xmm0,%xmm6 -.byte 102,15,56,222,233 +.byte 102,15,56,222,217 + leal 32(%edx,%ecx,1),%edx + negl %ecx +.byte 102,15,56,222,225 pxor %xmm0,%xmm7 -.byte 102,15,56,222,241 - movups (%edx),%xmm0 -.byte 102,15,56,222,249 - jmp L_aesni_decrypt6_enter + movups (%edx,%ecx,1),%xmm0 + addl $16,%ecx + jmp L010_aesni_decrypt6_inner .align 4,0x90 -L007dec6_loop: +L011dec6_loop: .byte 102,15,56,222,209 .byte 102,15,56,222,217 - decl %ecx .byte 102,15,56,222,225 +L010_aesni_decrypt6_inner: .byte 102,15,56,222,233 .byte 102,15,56,222,241 .byte 102,15,56,222,249 -.align 4,0x90 L_aesni_decrypt6_enter: - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,222,208 .byte 102,15,56,222,216 - leal 32(%edx),%edx .byte 102,15,56,222,224 .byte 102,15,56,222,232 .byte 102,15,56,222,240 .byte 102,15,56,222,248 - movups (%edx),%xmm0 - jnz L007dec6_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz L011dec6_loop .byte 102,15,56,222,209 .byte 102,15,56,222,217 .byte 102,15,56,222,225 @@ -333,14 +388,14 @@ L_aesni_ecb_encrypt_begin: movl 32(%esp),%edx movl 36(%esp),%ebx andl $-16,%eax - jz L008ecb_ret + jz L012ecb_ret movl 240(%edx),%ecx testl %ebx,%ebx - jz L009ecb_decrypt + jz L013ecb_decrypt movl %edx,%ebp movl %ecx,%ebx cmpl $96,%eax - jb L010ecb_enc_tail + jb L014ecb_enc_tail movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -349,9 +404,9 @@ L_aesni_ecb_encrypt_begin: movdqu 80(%esi),%xmm7 leal 96(%esi),%esi subl $96,%eax - jmp L011ecb_enc_loop6_enter + jmp L015ecb_enc_loop6_enter .align 4,0x90 -L012ecb_enc_loop6: +L016ecb_enc_loop6: movups %xmm2,(%edi) movdqu (%esi),%xmm2 movups %xmm3,16(%edi) @@ -366,12 +421,12 @@ L012ecb_enc_loop6: leal 96(%edi),%edi movdqu 80(%esi),%xmm7 leal 96(%esi),%esi -L011ecb_enc_loop6_enter: +L015ecb_enc_loop6_enter: call __aesni_encrypt6 movl %ebp,%edx movl %ebx,%ecx subl $96,%eax - jnc L012ecb_enc_loop6 + jnc L016ecb_enc_loop6 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) @@ -380,18 +435,18 @@ L011ecb_enc_loop6_enter: movups %xmm7,80(%edi) leal 96(%edi),%edi addl $96,%eax - jz L008ecb_ret -L010ecb_enc_tail: + jz L012ecb_ret +L014ecb_enc_tail: movups (%esi),%xmm2 cmpl $32,%eax - jb L013ecb_enc_one + jb L017ecb_enc_one movups 16(%esi),%xmm3 - je L014ecb_enc_two + je L018ecb_enc_two movups 32(%esi),%xmm4 cmpl $64,%eax - jb L015ecb_enc_three + jb L019ecb_enc_three movups 48(%esi),%xmm5 - je L016ecb_enc_four + je L020ecb_enc_four movups 64(%esi),%xmm6 xorps %xmm7,%xmm7 call __aesni_encrypt6 @@ -400,50 +455,49 @@ L010ecb_enc_tail: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp L008ecb_ret + jmp L012ecb_ret .align 4,0x90 -L013ecb_enc_one: +L017ecb_enc_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L017enc1_loop_3: +L021enc1_loop_3: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L017enc1_loop_3 + jnz L021enc1_loop_3 .byte 102,15,56,221,209 movups %xmm2,(%edi) - jmp L008ecb_ret + jmp L012ecb_ret .align 4,0x90 -L014ecb_enc_two: - xorps %xmm4,%xmm4 - call __aesni_encrypt3 +L018ecb_enc_two: + call __aesni_encrypt2 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp L008ecb_ret + jmp L012ecb_ret .align 4,0x90 -L015ecb_enc_three: +L019ecb_enc_three: call __aesni_encrypt3 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp L008ecb_ret + jmp L012ecb_ret .align 4,0x90 -L016ecb_enc_four: +L020ecb_enc_four: call __aesni_encrypt4 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) movups %xmm5,48(%edi) - jmp L008ecb_ret + jmp L012ecb_ret .align 4,0x90 -L009ecb_decrypt: +L013ecb_decrypt: movl %edx,%ebp movl %ecx,%ebx cmpl $96,%eax - jb L018ecb_dec_tail + jb L022ecb_dec_tail movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 @@ -452,9 +506,9 @@ L009ecb_decrypt: movdqu 80(%esi),%xmm7 leal 96(%esi),%esi subl $96,%eax - jmp L019ecb_dec_loop6_enter + jmp L023ecb_dec_loop6_enter .align 4,0x90 -L020ecb_dec_loop6: +L024ecb_dec_loop6: movups %xmm2,(%edi) movdqu (%esi),%xmm2 movups %xmm3,16(%edi) @@ -469,12 +523,12 @@ L020ecb_dec_loop6: leal 96(%edi),%edi movdqu 80(%esi),%xmm7 leal 96(%esi),%esi -L019ecb_dec_loop6_enter: +L023ecb_dec_loop6_enter: call __aesni_decrypt6 movl %ebp,%edx movl %ebx,%ecx subl $96,%eax - jnc L020ecb_dec_loop6 + jnc L024ecb_dec_loop6 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) @@ -483,18 +537,18 @@ L019ecb_dec_loop6_enter: movups %xmm7,80(%edi) leal 96(%edi),%edi addl $96,%eax - jz L008ecb_ret -L018ecb_dec_tail: + jz L012ecb_ret +L022ecb_dec_tail: movups (%esi),%xmm2 cmpl $32,%eax - jb L021ecb_dec_one + jb L025ecb_dec_one movups 16(%esi),%xmm3 - je L022ecb_dec_two + je L026ecb_dec_two movups 32(%esi),%xmm4 cmpl $64,%eax - jb L023ecb_dec_three + jb L027ecb_dec_three movups 48(%esi),%xmm5 - je L024ecb_dec_four + je L028ecb_dec_four movups 64(%esi),%xmm6 xorps %xmm7,%xmm7 call __aesni_decrypt6 @@ -503,44 +557,51 @@ L018ecb_dec_tail: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp L008ecb_ret + jmp L012ecb_ret .align 4,0x90 -L021ecb_dec_one: +L025ecb_dec_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L025dec1_loop_4: +L029dec1_loop_4: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L025dec1_loop_4 + jnz L029dec1_loop_4 .byte 102,15,56,223,209 movups %xmm2,(%edi) - jmp L008ecb_ret + jmp L012ecb_ret .align 4,0x90 -L022ecb_dec_two: - xorps %xmm4,%xmm4 - call __aesni_decrypt3 +L026ecb_dec_two: + call __aesni_decrypt2 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp L008ecb_ret + jmp L012ecb_ret .align 4,0x90 -L023ecb_dec_three: +L027ecb_dec_three: call __aesni_decrypt3 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp L008ecb_ret + jmp L012ecb_ret .align 4,0x90 -L024ecb_dec_four: +L028ecb_dec_four: call __aesni_decrypt4 movups %xmm2,(%edi) movups %xmm3,16(%edi) movups %xmm4,32(%edi) movups %xmm5,48(%edi) -L008ecb_ret: +L012ecb_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -577,48 +638,56 @@ L_aesni_ccm64_encrypt_blocks_begin: movl %ebp,20(%esp) movl %ebp,24(%esp) movl %ebp,28(%esp) - shrl $1,%ecx + shll $4,%ecx + movl $16,%ebx leal (%edx),%ebp movdqa (%esp),%xmm5 movdqa %xmm7,%xmm2 - movl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx + subl %ecx,%ebx .byte 102,15,56,0,253 -L026ccm64_enc_outer: +L030ccm64_enc_outer: movups (%ebp),%xmm0 movl %ebx,%ecx movups (%esi),%xmm6 xorps %xmm0,%xmm2 movups 16(%ebp),%xmm1 xorps %xmm6,%xmm0 - leal 32(%ebp),%edx xorps %xmm0,%xmm3 - movups (%edx),%xmm0 -L027ccm64_enc2_loop: + movups 32(%ebp),%xmm0 +L031ccm64_enc2_loop: .byte 102,15,56,220,209 - decl %ecx .byte 102,15,56,220,217 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 - leal 32(%edx),%edx .byte 102,15,56,220,216 - movups (%edx),%xmm0 - jnz L027ccm64_enc2_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz L031ccm64_enc2_loop .byte 102,15,56,220,209 .byte 102,15,56,220,217 paddq 16(%esp),%xmm7 + decl %eax .byte 102,15,56,221,208 .byte 102,15,56,221,216 - decl %eax leal 16(%esi),%esi xorps %xmm2,%xmm6 movdqa %xmm7,%xmm2 movups %xmm6,(%edi) - leal 16(%edi),%edi .byte 102,15,56,0,213 - jnz L026ccm64_enc_outer + leal 16(%edi),%edi + jnz L030ccm64_enc_outer movl 48(%esp),%esp movl 40(%esp),%edi movups %xmm3,(%edi) + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -664,71 +733,82 @@ L_aesni_ccm64_decrypt_blocks_begin: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L028enc1_loop_5: +L032enc1_loop_5: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L028enc1_loop_5 + jnz L032enc1_loop_5 .byte 102,15,56,221,209 + shll $4,%ebx + movl $16,%ecx movups (%esi),%xmm6 paddq 16(%esp),%xmm7 leal 16(%esi),%esi - jmp L029ccm64_dec_outer + subl %ebx,%ecx + leal 32(%ebp,%ebx,1),%edx + movl %ecx,%ebx + jmp L033ccm64_dec_outer .align 4,0x90 -L029ccm64_dec_outer: +L033ccm64_dec_outer: xorps %xmm2,%xmm6 movdqa %xmm7,%xmm2 - movl %ebx,%ecx movups %xmm6,(%edi) leal 16(%edi),%edi .byte 102,15,56,0,213 subl $1,%eax - jz L030ccm64_dec_break + jz L034ccm64_dec_break movups (%ebp),%xmm0 - shrl $1,%ecx + movl %ebx,%ecx movups 16(%ebp),%xmm1 xorps %xmm0,%xmm6 - leal 32(%ebp),%edx xorps %xmm0,%xmm2 xorps %xmm6,%xmm3 - movups (%edx),%xmm0 -L031ccm64_dec2_loop: + movups 32(%ebp),%xmm0 +L035ccm64_dec2_loop: .byte 102,15,56,220,209 - decl %ecx .byte 102,15,56,220,217 - movups 16(%edx),%xmm1 + movups (%edx,%ecx,1),%xmm1 + addl $32,%ecx .byte 102,15,56,220,208 - leal 32(%edx),%edx .byte 102,15,56,220,216 - movups (%edx),%xmm0 - jnz L031ccm64_dec2_loop + movups -16(%edx,%ecx,1),%xmm0 + jnz L035ccm64_dec2_loop movups (%esi),%xmm6 paddq 16(%esp),%xmm7 .byte 102,15,56,220,209 .byte 102,15,56,220,217 - leal 16(%esi),%esi .byte 102,15,56,221,208 .byte 102,15,56,221,216 - jmp L029ccm64_dec_outer + leal 16(%esi),%esi + jmp L033ccm64_dec_outer .align 4,0x90 -L030ccm64_dec_break: +L034ccm64_dec_break: + movl 240(%ebp),%ecx movl %ebp,%edx movups (%edx),%xmm0 movups 16(%edx),%xmm1 xorps %xmm0,%xmm6 leal 32(%edx),%edx xorps %xmm6,%xmm3 -L032enc1_loop_6: +L036enc1_loop_6: .byte 102,15,56,220,217 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L032enc1_loop_6 + jnz L036enc1_loop_6 .byte 102,15,56,221,217 movl 48(%esp),%esp movl 40(%esp),%edi movups %xmm3,(%edi) + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 popl %edi popl %esi popl %ebx @@ -752,7 +832,7 @@ L_aesni_ctr32_encrypt_blocks_begin: andl $-16,%esp movl %ebp,80(%esp) cmpl $1,%eax - je L033ctr32_one_shortcut + je L037ctr32_one_shortcut movdqu (%ebx),%xmm7 movl $202182159,(%esp) movl $134810123,4(%esp) @@ -768,63 +848,59 @@ L_aesni_ctr32_encrypt_blocks_begin: .byte 102,15,58,34,253,3 movl 240(%edx),%ecx bswap %ebx - pxor %xmm1,%xmm1 pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 movdqa (%esp),%xmm2 -.byte 102,15,58,34,203,0 +.byte 102,15,58,34,195,0 leal 3(%ebx),%ebp -.byte 102,15,58,34,197,0 +.byte 102,15,58,34,205,0 incl %ebx -.byte 102,15,58,34,203,1 +.byte 102,15,58,34,195,1 incl %ebp -.byte 102,15,58,34,197,1 +.byte 102,15,58,34,205,1 incl %ebx -.byte 102,15,58,34,203,2 +.byte 102,15,58,34,195,2 incl %ebp -.byte 102,15,58,34,197,2 - movdqa %xmm1,48(%esp) -.byte 102,15,56,0,202 - movdqa %xmm0,64(%esp) +.byte 102,15,58,34,205,2 + movdqa %xmm0,48(%esp) .byte 102,15,56,0,194 - pshufd $192,%xmm1,%xmm2 - pshufd $128,%xmm1,%xmm3 + movdqu (%edx),%xmm6 + movdqa %xmm1,64(%esp) +.byte 102,15,56,0,202 + pshufd $192,%xmm0,%xmm2 + pshufd $128,%xmm0,%xmm3 cmpl $6,%eax - jb L034ctr32_tail + jb L038ctr32_tail + pxor %xmm6,%xmm7 + shll $4,%ecx + movl $16,%ebx movdqa %xmm7,32(%esp) - shrl $1,%ecx movl %edx,%ebp - movl %ecx,%ebx + subl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx subl $6,%eax - jmp L035ctr32_loop6 + jmp L039ctr32_loop6 .align 4,0x90 -L035ctr32_loop6: - pshufd $64,%xmm1,%xmm4 - movdqa 32(%esp),%xmm1 - pshufd $192,%xmm0,%xmm5 - por %xmm1,%xmm2 - pshufd $128,%xmm0,%xmm6 - por %xmm1,%xmm3 - pshufd $64,%xmm0,%xmm7 - por %xmm1,%xmm4 - por %xmm1,%xmm5 - por %xmm1,%xmm6 - por %xmm1,%xmm7 - movups (%ebp),%xmm0 - movups 16(%ebp),%xmm1 - leal 32(%ebp),%edx - decl %ecx +L039ctr32_loop6: + pshufd $64,%xmm0,%xmm4 + movdqa 32(%esp),%xmm0 + pshufd $192,%xmm1,%xmm5 pxor %xmm0,%xmm2 + pshufd $128,%xmm1,%xmm6 pxor %xmm0,%xmm3 -.byte 102,15,56,220,209 + pshufd $64,%xmm1,%xmm7 + movups 16(%ebp),%xmm1 pxor %xmm0,%xmm4 -.byte 102,15,56,220,217 pxor %xmm0,%xmm5 -.byte 102,15,56,220,225 +.byte 102,15,56,220,209 pxor %xmm0,%xmm6 -.byte 102,15,56,220,233 pxor %xmm0,%xmm7 +.byte 102,15,56,220,217 + movups 32(%ebp),%xmm0 + movl %ebx,%ecx +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 .byte 102,15,56,220,241 - movups (%edx),%xmm0 .byte 102,15,56,220,249 call L_aesni_encrypt6_enter movups (%esi),%xmm1 @@ -835,51 +911,51 @@ L035ctr32_loop6: movups %xmm2,(%edi) movdqa 16(%esp),%xmm0 xorps %xmm1,%xmm4 - movdqa 48(%esp),%xmm1 + movdqa 64(%esp),%xmm1 movups %xmm3,16(%edi) movups %xmm4,32(%edi) paddd %xmm0,%xmm1 - paddd 64(%esp),%xmm0 + paddd 48(%esp),%xmm0 movdqa (%esp),%xmm2 movups 48(%esi),%xmm3 movups 64(%esi),%xmm4 xorps %xmm3,%xmm5 movups 80(%esi),%xmm3 leal 96(%esi),%esi - movdqa %xmm1,48(%esp) -.byte 102,15,56,0,202 + movdqa %xmm0,48(%esp) +.byte 102,15,56,0,194 xorps %xmm4,%xmm6 movups %xmm5,48(%edi) xorps %xmm3,%xmm7 - movdqa %xmm0,64(%esp) -.byte 102,15,56,0,194 + movdqa %xmm1,64(%esp) +.byte 102,15,56,0,202 movups %xmm6,64(%edi) - pshufd $192,%xmm1,%xmm2 + pshufd $192,%xmm0,%xmm2 movups %xmm7,80(%edi) leal 96(%edi),%edi - movl %ebx,%ecx - pshufd $128,%xmm1,%xmm3 + pshufd $128,%xmm0,%xmm3 subl $6,%eax - jnc L035ctr32_loop6 + jnc L039ctr32_loop6 addl $6,%eax - jz L036ctr32_ret + jz L040ctr32_ret + movdqu (%ebp),%xmm7 movl %ebp,%edx - leal 1(,%ecx,2),%ecx - movdqa 32(%esp),%xmm7 -L034ctr32_tail: + pxor 32(%esp),%xmm7 + movl 240(%ebp),%ecx +L038ctr32_tail: por %xmm7,%xmm2 cmpl $2,%eax - jb L037ctr32_one - pshufd $64,%xmm1,%xmm4 + jb L041ctr32_one + pshufd $64,%xmm0,%xmm4 por %xmm7,%xmm3 - je L038ctr32_two - pshufd $192,%xmm0,%xmm5 + je L042ctr32_two + pshufd $192,%xmm1,%xmm5 por %xmm7,%xmm4 cmpl $4,%eax - jb L039ctr32_three - pshufd $128,%xmm0,%xmm6 + jb L043ctr32_three + pshufd $128,%xmm1,%xmm6 por %xmm7,%xmm5 - je L040ctr32_four + je L044ctr32_four por %xmm7,%xmm6 call __aesni_encrypt6 movups (%esi),%xmm1 @@ -897,39 +973,39 @@ L034ctr32_tail: movups %xmm4,32(%edi) movups %xmm5,48(%edi) movups %xmm6,64(%edi) - jmp L036ctr32_ret + jmp L040ctr32_ret .align 4,0x90 -L033ctr32_one_shortcut: +L037ctr32_one_shortcut: movups (%ebx),%xmm2 movl 240(%edx),%ecx -L037ctr32_one: +L041ctr32_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L041enc1_loop_7: +L045enc1_loop_7: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L041enc1_loop_7 + jnz L045enc1_loop_7 .byte 102,15,56,221,209 movups (%esi),%xmm6 xorps %xmm2,%xmm6 movups %xmm6,(%edi) - jmp L036ctr32_ret + jmp L040ctr32_ret .align 4,0x90 -L038ctr32_two: - call __aesni_encrypt3 +L042ctr32_two: + call __aesni_encrypt2 movups (%esi),%xmm5 movups 16(%esi),%xmm6 xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movups %xmm3,16(%edi) - jmp L036ctr32_ret + jmp L040ctr32_ret .align 4,0x90 -L039ctr32_three: +L043ctr32_three: call __aesni_encrypt3 movups (%esi),%xmm5 movups 16(%esi),%xmm6 @@ -940,9 +1016,9 @@ L039ctr32_three: xorps %xmm7,%xmm4 movups %xmm3,16(%edi) movups %xmm4,32(%edi) - jmp L036ctr32_ret + jmp L040ctr32_ret .align 4,0x90 -L040ctr32_four: +L044ctr32_four: call __aesni_encrypt4 movups (%esi),%xmm6 movups 16(%esi),%xmm7 @@ -956,7 +1032,18 @@ L040ctr32_four: xorps %xmm0,%xmm5 movups %xmm4,32(%edi) movups %xmm5,48(%edi) -L036ctr32_ret: +L040ctr32_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + movdqa %xmm0,32(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm0,48(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm0,64(%esp) + pxor %xmm7,%xmm7 movl 80(%esp),%esp popl %edi popl %esi @@ -979,12 +1066,12 @@ L_aesni_xts_encrypt_begin: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L042enc1_loop_8: +L046enc1_loop_8: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L042enc1_loop_8 + jnz L046enc1_loop_8 .byte 102,15,56,221,209 movl 20(%esp),%esi movl 24(%esp),%edi @@ -1008,12 +1095,14 @@ L042enc1_loop_8: movl %edx,%ebp movl %ecx,%ebx subl $96,%eax - jc L043xts_enc_short - shrl $1,%ecx - movl %ecx,%ebx - jmp L044xts_enc_loop6 + jc L047xts_enc_short + shll $4,%ecx + movl $16,%ebx + subl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx + jmp L048xts_enc_loop6 .align 4,0x90 -L044xts_enc_loop6: +L048xts_enc_loop6: pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,(%esp) @@ -1049,6 +1138,7 @@ L044xts_enc_loop6: pand %xmm3,%xmm7 movups (%esi),%xmm2 pxor %xmm1,%xmm7 + movl %ebx,%ecx movdqu 16(%esi),%xmm3 xorps %xmm0,%xmm2 movdqu 32(%esi),%xmm4 @@ -1064,19 +1154,17 @@ L044xts_enc_loop6: movdqa %xmm7,80(%esp) pxor %xmm1,%xmm7 movups 16(%ebp),%xmm1 - leal 32(%ebp),%edx pxor 16(%esp),%xmm3 -.byte 102,15,56,220,209 pxor 32(%esp),%xmm4 -.byte 102,15,56,220,217 +.byte 102,15,56,220,209 pxor 48(%esp),%xmm5 - decl %ecx -.byte 102,15,56,220,225 pxor 64(%esp),%xmm6 -.byte 102,15,56,220,233 +.byte 102,15,56,220,217 pxor %xmm0,%xmm7 + movups 32(%ebp),%xmm0 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 .byte 102,15,56,220,241 - movups (%edx),%xmm0 .byte 102,15,56,220,249 call L_aesni_encrypt6_enter movdqa 80(%esp),%xmm1 @@ -1101,26 +1189,25 @@ L044xts_enc_loop6: paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 - movl %ebx,%ecx pxor %xmm2,%xmm1 subl $96,%eax - jnc L044xts_enc_loop6 - leal 1(,%ecx,2),%ecx + jnc L048xts_enc_loop6 + movl 240(%ebp),%ecx movl %ebp,%edx movl %ecx,%ebx -L043xts_enc_short: +L047xts_enc_short: addl $96,%eax - jz L045xts_enc_done6x + jz L049xts_enc_done6x movdqa %xmm1,%xmm5 cmpl $32,%eax - jb L046xts_enc_one + jb L050xts_enc_one pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 - je L047xts_enc_two + je L051xts_enc_two pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm6 @@ -1129,7 +1216,7 @@ L043xts_enc_short: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 cmpl $64,%eax - jb L048xts_enc_three + jb L052xts_enc_three pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm7 @@ -1139,7 +1226,7 @@ L043xts_enc_short: pxor %xmm2,%xmm1 movdqa %xmm5,(%esp) movdqa %xmm6,16(%esp) - je L049xts_enc_four + je L053xts_enc_four movdqa %xmm7,32(%esp) pshufd $19,%xmm0,%xmm7 movdqa %xmm1,48(%esp) @@ -1171,9 +1258,9 @@ L043xts_enc_short: movups %xmm5,48(%edi) movups %xmm6,64(%edi) leal 80(%edi),%edi - jmp L050xts_enc_done + jmp L054xts_enc_done .align 4,0x90 -L046xts_enc_one: +L050xts_enc_one: movups (%esi),%xmm2 leal 16(%esi),%esi xorps %xmm5,%xmm2 @@ -1181,37 +1268,36 @@ L046xts_enc_one: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L051enc1_loop_9: +L055enc1_loop_9: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L051enc1_loop_9 + jnz L055enc1_loop_9 .byte 102,15,56,221,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) leal 16(%edi),%edi movdqa %xmm5,%xmm1 - jmp L050xts_enc_done + jmp L054xts_enc_done .align 4,0x90 -L047xts_enc_two: +L051xts_enc_two: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 leal 32(%esi),%esi xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 - xorps %xmm4,%xmm4 - call __aesni_encrypt3 + call __aesni_encrypt2 xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movups %xmm3,16(%edi) leal 32(%edi),%edi movdqa %xmm6,%xmm1 - jmp L050xts_enc_done + jmp L054xts_enc_done .align 4,0x90 -L048xts_enc_three: +L052xts_enc_three: movaps %xmm1,%xmm7 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1229,9 +1315,9 @@ L048xts_enc_three: movups %xmm4,32(%edi) leal 48(%edi),%edi movdqa %xmm7,%xmm1 - jmp L050xts_enc_done + jmp L054xts_enc_done .align 4,0x90 -L049xts_enc_four: +L053xts_enc_four: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1253,28 +1339,28 @@ L049xts_enc_four: movups %xmm5,48(%edi) leal 64(%edi),%edi movdqa %xmm6,%xmm1 - jmp L050xts_enc_done + jmp L054xts_enc_done .align 4,0x90 -L045xts_enc_done6x: +L049xts_enc_done6x: movl 112(%esp),%eax andl $15,%eax - jz L052xts_enc_ret + jz L056xts_enc_ret movdqa %xmm1,%xmm5 movl %eax,112(%esp) - jmp L053xts_enc_steal + jmp L057xts_enc_steal .align 4,0x90 -L050xts_enc_done: +L054xts_enc_done: movl 112(%esp),%eax pxor %xmm0,%xmm0 andl $15,%eax - jz L052xts_enc_ret + jz L056xts_enc_ret pcmpgtd %xmm1,%xmm0 movl %eax,112(%esp) pshufd $19,%xmm0,%xmm5 paddq %xmm1,%xmm1 pand 96(%esp),%xmm5 pxor %xmm1,%xmm5 -L053xts_enc_steal: +L057xts_enc_steal: movzbl (%esi),%ecx movzbl -16(%edi),%edx leal 1(%esi),%esi @@ -1282,7 +1368,7 @@ L053xts_enc_steal: movb %dl,(%edi) leal 1(%edi),%edi subl $1,%eax - jnz L053xts_enc_steal + jnz L057xts_enc_steal subl 112(%esp),%edi movl %ebp,%edx movl %ebx,%ecx @@ -1292,16 +1378,30 @@ L053xts_enc_steal: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L054enc1_loop_10: +L058enc1_loop_10: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L054enc1_loop_10 + jnz L058enc1_loop_10 .byte 102,15,56,221,209 xorps %xmm5,%xmm2 movups %xmm2,-16(%edi) -L052xts_enc_ret: +L056xts_enc_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + movdqa %xmm0,(%esp) + pxor %xmm3,%xmm3 + movdqa %xmm0,16(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm0,32(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm0,48(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm0,64(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm0,80(%esp) movl 116(%esp),%esp popl %edi popl %esi @@ -1324,12 +1424,12 @@ L_aesni_xts_decrypt_begin: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L055enc1_loop_11: +L059enc1_loop_11: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L055enc1_loop_11 + jnz L059enc1_loop_11 .byte 102,15,56,221,209 movl 20(%esp),%esi movl 24(%esp),%edi @@ -1358,12 +1458,14 @@ L055enc1_loop_11: pcmpgtd %xmm1,%xmm0 andl $-16,%eax subl $96,%eax - jc L056xts_dec_short - shrl $1,%ecx - movl %ecx,%ebx - jmp L057xts_dec_loop6 + jc L060xts_dec_short + shll $4,%ecx + movl $16,%ebx + subl %ecx,%ebx + leal 32(%edx,%ecx,1),%edx + jmp L061xts_dec_loop6 .align 4,0x90 -L057xts_dec_loop6: +L061xts_dec_loop6: pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,(%esp) @@ -1399,6 +1501,7 @@ L057xts_dec_loop6: pand %xmm3,%xmm7 movups (%esi),%xmm2 pxor %xmm1,%xmm7 + movl %ebx,%ecx movdqu 16(%esi),%xmm3 xorps %xmm0,%xmm2 movdqu 32(%esi),%xmm4 @@ -1414,19 +1517,17 @@ L057xts_dec_loop6: movdqa %xmm7,80(%esp) pxor %xmm1,%xmm7 movups 16(%ebp),%xmm1 - leal 32(%ebp),%edx pxor 16(%esp),%xmm3 -.byte 102,15,56,222,209 pxor 32(%esp),%xmm4 -.byte 102,15,56,222,217 +.byte 102,15,56,222,209 pxor 48(%esp),%xmm5 - decl %ecx -.byte 102,15,56,222,225 pxor 64(%esp),%xmm6 -.byte 102,15,56,222,233 +.byte 102,15,56,222,217 pxor %xmm0,%xmm7 + movups 32(%ebp),%xmm0 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 .byte 102,15,56,222,241 - movups (%edx),%xmm0 .byte 102,15,56,222,249 call L_aesni_decrypt6_enter movdqa 80(%esp),%xmm1 @@ -1451,26 +1552,25 @@ L057xts_dec_loop6: paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 - movl %ebx,%ecx pxor %xmm2,%xmm1 subl $96,%eax - jnc L057xts_dec_loop6 - leal 1(,%ecx,2),%ecx + jnc L061xts_dec_loop6 + movl 240(%ebp),%ecx movl %ebp,%edx movl %ecx,%ebx -L056xts_dec_short: +L060xts_dec_short: addl $96,%eax - jz L058xts_dec_done6x + jz L062xts_dec_done6x movdqa %xmm1,%xmm5 cmpl $32,%eax - jb L059xts_dec_one + jb L063xts_dec_one pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 paddq %xmm1,%xmm1 pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 - je L060xts_dec_two + je L064xts_dec_two pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm6 @@ -1479,7 +1579,7 @@ L056xts_dec_short: pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 cmpl $64,%eax - jb L061xts_dec_three + jb L065xts_dec_three pshufd $19,%xmm0,%xmm2 pxor %xmm0,%xmm0 movdqa %xmm1,%xmm7 @@ -1489,7 +1589,7 @@ L056xts_dec_short: pxor %xmm2,%xmm1 movdqa %xmm5,(%esp) movdqa %xmm6,16(%esp) - je L062xts_dec_four + je L066xts_dec_four movdqa %xmm7,32(%esp) pshufd $19,%xmm0,%xmm7 movdqa %xmm1,48(%esp) @@ -1521,9 +1621,9 @@ L056xts_dec_short: movups %xmm5,48(%edi) movups %xmm6,64(%edi) leal 80(%edi),%edi - jmp L063xts_dec_done + jmp L067xts_dec_done .align 4,0x90 -L059xts_dec_one: +L063xts_dec_one: movups (%esi),%xmm2 leal 16(%esi),%esi xorps %xmm5,%xmm2 @@ -1531,36 +1631,36 @@ L059xts_dec_one: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L064dec1_loop_12: +L068dec1_loop_12: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L064dec1_loop_12 + jnz L068dec1_loop_12 .byte 102,15,56,223,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) leal 16(%edi),%edi movdqa %xmm5,%xmm1 - jmp L063xts_dec_done + jmp L067xts_dec_done .align 4,0x90 -L060xts_dec_two: +L064xts_dec_two: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 leal 32(%esi),%esi xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 - call __aesni_decrypt3 + call __aesni_decrypt2 xorps %xmm5,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movups %xmm3,16(%edi) leal 32(%edi),%edi movdqa %xmm6,%xmm1 - jmp L063xts_dec_done + jmp L067xts_dec_done .align 4,0x90 -L061xts_dec_three: +L065xts_dec_three: movaps %xmm1,%xmm7 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1578,9 +1678,9 @@ L061xts_dec_three: movups %xmm4,32(%edi) leal 48(%edi),%edi movdqa %xmm7,%xmm1 - jmp L063xts_dec_done + jmp L067xts_dec_done .align 4,0x90 -L062xts_dec_four: +L066xts_dec_four: movaps %xmm1,%xmm6 movups (%esi),%xmm2 movups 16(%esi),%xmm3 @@ -1602,20 +1702,20 @@ L062xts_dec_four: movups %xmm5,48(%edi) leal 64(%edi),%edi movdqa %xmm6,%xmm1 - jmp L063xts_dec_done + jmp L067xts_dec_done .align 4,0x90 -L058xts_dec_done6x: +L062xts_dec_done6x: movl 112(%esp),%eax andl $15,%eax - jz L065xts_dec_ret + jz L069xts_dec_ret movl %eax,112(%esp) - jmp L066xts_dec_only_one_more + jmp L070xts_dec_only_one_more .align 4,0x90 -L063xts_dec_done: +L067xts_dec_done: movl 112(%esp),%eax pxor %xmm0,%xmm0 andl $15,%eax - jz L065xts_dec_ret + jz L069xts_dec_ret pcmpgtd %xmm1,%xmm0 movl %eax,112(%esp) pshufd $19,%xmm0,%xmm2 @@ -1625,7 +1725,7 @@ L063xts_dec_done: pand %xmm3,%xmm2 pcmpgtd %xmm1,%xmm0 pxor %xmm2,%xmm1 -L066xts_dec_only_one_more: +L070xts_dec_only_one_more: pshufd $19,%xmm0,%xmm5 movdqa %xmm1,%xmm6 paddq %xmm1,%xmm1 @@ -1639,16 +1739,16 @@ L066xts_dec_only_one_more: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L067dec1_loop_13: +L071dec1_loop_13: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L067dec1_loop_13 + jnz L071dec1_loop_13 .byte 102,15,56,223,209 xorps %xmm5,%xmm2 movups %xmm2,(%edi) -L068xts_dec_steal: +L072xts_dec_steal: movzbl 16(%esi),%ecx movzbl (%edi),%edx leal 1(%esi),%esi @@ -1656,7 +1756,7 @@ L068xts_dec_steal: movb %dl,16(%edi) leal 1(%edi),%edi subl $1,%eax - jnz L068xts_dec_steal + jnz L072xts_dec_steal subl 112(%esp),%edi movl %ebp,%edx movl %ebx,%ecx @@ -1666,105 +1766,906 @@ L068xts_dec_steal: movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L069dec1_loop_14: +L073dec1_loop_14: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L069dec1_loop_14 + jnz L073dec1_loop_14 .byte 102,15,56,223,209 xorps %xmm6,%xmm2 movups %xmm2,(%edi) -L065xts_dec_ret: +L069xts_dec_ret: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + movdqa %xmm0,(%esp) + pxor %xmm3,%xmm3 + movdqa %xmm0,16(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm0,32(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm0,48(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm0,64(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm0,80(%esp) movl 116(%esp),%esp popl %edi popl %esi popl %ebx popl %ebp ret -.globl _aesni_cbc_encrypt +.globl _aesni_ocb_encrypt .align 4 -_aesni_cbc_encrypt: -L_aesni_cbc_encrypt_begin: +_aesni_ocb_encrypt: +L_aesni_ocb_encrypt_begin: pushl %ebp pushl %ebx pushl %esi pushl %edi + movl 40(%esp),%ecx + movl 48(%esp),%ebx movl 20(%esp),%esi - movl %esp,%ebx movl 24(%esp),%edi - subl $24,%ebx movl 28(%esp),%eax - andl $-16,%ebx movl 32(%esp),%edx + movdqu (%ecx),%xmm0 movl 36(%esp),%ebp - testl %eax,%eax - jz L070cbc_abort - cmpl $0,40(%esp) - xchgl %esp,%ebx - movups (%ebp),%xmm7 + movdqu (%ebx),%xmm1 + movl 44(%esp),%ebx + movl %esp,%ecx + subl $132,%esp + andl $-16,%esp + subl %esi,%edi + shll $4,%eax + leal -96(%esi,%eax,1),%eax + movl %edi,120(%esp) + movl %eax,124(%esp) + movl %ecx,128(%esp) movl 240(%edx),%ecx - movl %edx,%ebp - movl %ebx,16(%esp) - movl %ecx,%ebx - je L071cbc_decrypt - movaps %xmm7,%xmm2 - cmpl $16,%eax - jb L072cbc_enc_tail - subl $16,%eax - jmp L073cbc_enc_loop -.align 4,0x90 -L073cbc_enc_loop: - movups (%esi),%xmm7 + testl $1,%ebp + jnz L074odd + bsfl %ebp,%eax + addl $1,%ebp + shll $4,%eax + movdqu (%ebx,%eax,1),%xmm7 + movl %edx,%eax + movdqu (%esi),%xmm2 leal 16(%esi),%esi + pxor %xmm0,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 movups (%edx),%xmm0 movups 16(%edx),%xmm1 - xorps %xmm0,%xmm7 leal 32(%edx),%edx - xorps %xmm7,%xmm2 -L074enc1_loop_15: + xorps %xmm0,%xmm2 +L075enc1_loop_15: .byte 102,15,56,220,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L074enc1_loop_15 + jnz L075enc1_loop_15 .byte 102,15,56,221,209 - movl %ebx,%ecx - movl %ebp,%edx - movups %xmm2,(%edi) - leal 16(%edi),%edi - subl $16,%eax - jnc L073cbc_enc_loop - addl $16,%eax - jnz L072cbc_enc_tail - movaps %xmm2,%xmm7 - jmp L075cbc_ret -L072cbc_enc_tail: - movl %eax,%ecx -.long 2767451785 - movl $16,%ecx - subl %eax,%ecx - xorl %eax,%eax -.long 2868115081 - leal -16(%edi),%edi - movl %ebx,%ecx - movl %edi,%esi - movl %ebp,%edx - jmp L073cbc_enc_loop -.align 4,0x90 -L071cbc_decrypt: - cmpl $80,%eax - jbe L076cbc_dec_tail - movaps %xmm7,(%esp) - subl $80,%eax - jmp L077cbc_dec_loop6_enter -.align 4,0x90 -L078cbc_dec_loop6: - movaps %xmm0,(%esp) - movups %xmm7,(%edi) - leal 16(%edi),%edi -L077cbc_dec_loop6_enter: - movdqu (%esi),%xmm2 + xorps %xmm7,%xmm2 + movdqa %xmm7,%xmm0 + movdqa %xmm6,%xmm1 + movups %xmm2,-16(%edi,%esi,1) + movl 240(%eax),%ecx + movl %eax,%edx + movl 124(%esp),%eax +L074odd: + shll $4,%ecx + movl $16,%edi + subl %ecx,%edi + movl %edx,112(%esp) + leal 32(%edx,%ecx,1),%edx + movl %edi,116(%esp) + cmpl %eax,%esi + ja L076short + jmp L077grandloop +.align 5,0x90 +L077grandloop: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + leal 5(%ebp),%edi + addl $6,%ebp + bsfl %ecx,%ecx + bsfl %eax,%eax + bsfl %edi,%edi + shll $4,%ecx + shll $4,%eax + shll $4,%edi + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + movdqu (%ebx,%edi,1),%xmm7 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movdqa %xmm7,80(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + movdqu 80(%esi),%xmm7 + leal 96(%esi),%esi + pxor %xmm2,%xmm1 + pxor %xmm0,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm0,%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm0,%xmm4 + pxor %xmm5,%xmm1 + pxor %xmm0,%xmm5 + pxor %xmm6,%xmm1 + pxor %xmm0,%xmm6 + pxor %xmm7,%xmm1 + pxor %xmm0,%xmm7 + movdqa %xmm1,96(%esp) + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor 80(%esp),%xmm7 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movl 120(%esp),%edi + movl 124(%esp),%eax + call L_aesni_encrypt6_enter + movdqa 80(%esp),%xmm0 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor %xmm0,%xmm7 + movdqa 96(%esp),%xmm1 + movdqu %xmm2,-96(%edi,%esi,1) + movdqu %xmm3,-80(%edi,%esi,1) + movdqu %xmm4,-64(%edi,%esi,1) + movdqu %xmm5,-48(%edi,%esi,1) + movdqu %xmm6,-32(%edi,%esi,1) + movdqu %xmm7,-16(%edi,%esi,1) + cmpl %eax,%esi + jb L077grandloop +L076short: + addl $96,%eax + subl %esi,%eax + jz L078done + cmpl $32,%eax + jb L079one + je L080two + cmpl $64,%eax + jb L081three + je L082four + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + pxor %xmm7,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm0,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm0,%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm0,%xmm4 + pxor %xmm5,%xmm1 + pxor %xmm0,%xmm5 + pxor %xmm6,%xmm1 + pxor %xmm0,%xmm6 + movdqa %xmm1,96(%esp) + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movl 120(%esp),%edi + call L_aesni_encrypt6_enter + movdqa 64(%esp),%xmm0 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor %xmm0,%xmm6 + movdqa 96(%esp),%xmm1 + movdqu %xmm2,(%edi,%esi,1) + movdqu %xmm3,16(%edi,%esi,1) + movdqu %xmm4,32(%edi,%esi,1) + movdqu %xmm5,48(%edi,%esi,1) + movdqu %xmm6,64(%edi,%esi,1) + jmp L078done +.align 4,0x90 +L079one: + movdqu (%ebx),%xmm7 + movl 112(%esp),%edx + movdqu (%esi),%xmm2 + movl 240(%edx),%ecx + pxor %xmm0,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 + movl 120(%esp),%edi + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L083enc1_loop_16: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L083enc1_loop_16 +.byte 102,15,56,221,209 + xorps %xmm7,%xmm2 + movdqa %xmm7,%xmm0 + movdqa %xmm6,%xmm1 + movups %xmm2,(%edi,%esi,1) + jmp L078done +.align 4,0x90 +L080two: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm6 + movdqu (%ebx,%ecx,1),%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movl 240(%edx),%ecx + pxor %xmm0,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm6,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm7,%xmm3 + movdqa %xmm1,%xmm5 + movl 120(%esp),%edi + call __aesni_encrypt2 + xorps %xmm6,%xmm2 + xorps %xmm7,%xmm3 + movdqa %xmm7,%xmm0 + movdqa %xmm5,%xmm1 + movups %xmm2,(%edi,%esi,1) + movups %xmm3,16(%edi,%esi,1) + jmp L078done +.align 4,0x90 +L081three: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm5 + movdqu (%ebx,%ecx,1),%xmm6 + movdqa %xmm5,%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movl 240(%edx),%ecx + pxor %xmm0,%xmm5 + pxor %xmm5,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm2,%xmm1 + pxor %xmm5,%xmm2 + pxor %xmm3,%xmm1 + pxor %xmm6,%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm7,%xmm4 + movdqa %xmm1,96(%esp) + movl 120(%esp),%edi + call __aesni_encrypt3 + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm7,%xmm4 + movdqa %xmm7,%xmm0 + movdqa 96(%esp),%xmm1 + movups %xmm2,(%edi,%esi,1) + movups %xmm3,16(%edi,%esi,1) + movups %xmm4,32(%edi,%esi,1) + jmp L078done +.align 4,0x90 +L082four: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + movl 112(%esp),%edx + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm4 + movdqu (%ebx,%ecx,1),%xmm5 + movdqa %xmm4,%xmm6 + movdqu (%ebx,%eax,1),%xmm7 + pxor %xmm0,%xmm4 + movdqu (%esi),%xmm2 + pxor %xmm4,%xmm5 + movdqu 16(%esi),%xmm3 + pxor %xmm5,%xmm6 + movdqa %xmm4,(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm5,16(%esp) + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movl 240(%edx),%ecx + pxor %xmm2,%xmm1 + pxor (%esp),%xmm2 + pxor %xmm3,%xmm1 + pxor 16(%esp),%xmm3 + pxor %xmm4,%xmm1 + pxor %xmm6,%xmm4 + pxor %xmm5,%xmm1 + pxor %xmm7,%xmm5 + movdqa %xmm1,96(%esp) + movl 120(%esp),%edi + call __aesni_encrypt4 + xorps (%esp),%xmm2 + xorps 16(%esp),%xmm3 + xorps %xmm6,%xmm4 + movups %xmm2,(%edi,%esi,1) + xorps %xmm7,%xmm5 + movups %xmm3,16(%edi,%esi,1) + movdqa %xmm7,%xmm0 + movups %xmm4,32(%edi,%esi,1) + movdqa 96(%esp),%xmm1 + movups %xmm5,48(%edi,%esi,1) +L078done: + movl 128(%esp),%edx + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm2,16(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm2,32(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm2,48(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm2,64(%esp) + movdqa %xmm2,80(%esp) + movdqa %xmm2,96(%esp) + leal (%edx),%esp + movl 40(%esp),%ecx + movl 48(%esp),%ebx + movdqu %xmm0,(%ecx) + pxor %xmm0,%xmm0 + movdqu %xmm1,(%ebx) + pxor %xmm1,%xmm1 + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _aesni_ocb_decrypt +.align 4 +_aesni_ocb_decrypt: +L_aesni_ocb_decrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 40(%esp),%ecx + movl 48(%esp),%ebx + movl 20(%esp),%esi + movl 24(%esp),%edi + movl 28(%esp),%eax + movl 32(%esp),%edx + movdqu (%ecx),%xmm0 + movl 36(%esp),%ebp + movdqu (%ebx),%xmm1 + movl 44(%esp),%ebx + movl %esp,%ecx + subl $132,%esp + andl $-16,%esp + subl %esi,%edi + shll $4,%eax + leal -96(%esi,%eax,1),%eax + movl %edi,120(%esp) + movl %eax,124(%esp) + movl %ecx,128(%esp) + movl 240(%edx),%ecx + testl $1,%ebp + jnz L084odd + bsfl %ebp,%eax + addl $1,%ebp + shll $4,%eax + movdqu (%ebx,%eax,1),%xmm7 + movl %edx,%eax + movdqu (%esi),%xmm2 + leal 16(%esi),%esi + pxor %xmm0,%xmm7 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L085dec1_loop_17: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L085dec1_loop_17 +.byte 102,15,56,223,209 + xorps %xmm7,%xmm2 + movaps %xmm6,%xmm1 + movdqa %xmm7,%xmm0 + xorps %xmm2,%xmm1 + movups %xmm2,-16(%edi,%esi,1) + movl 240(%eax),%ecx + movl %eax,%edx + movl 124(%esp),%eax +L084odd: + shll $4,%ecx + movl $16,%edi + subl %ecx,%edi + movl %edx,112(%esp) + leal 32(%edx,%ecx,1),%edx + movl %edi,116(%esp) + cmpl %eax,%esi + ja L086short + jmp L087grandloop +.align 5,0x90 +L087grandloop: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + leal 5(%ebp),%edi + addl $6,%ebp + bsfl %ecx,%ecx + bsfl %eax,%eax + bsfl %edi,%edi + shll $4,%ecx + shll $4,%eax + shll $4,%edi + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + movdqu (%ebx,%edi,1),%xmm7 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movdqa %xmm7,80(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + movdqu 80(%esi),%xmm7 + leal 96(%esi),%esi + movdqa %xmm1,96(%esp) + pxor %xmm0,%xmm2 + pxor %xmm0,%xmm3 + pxor %xmm0,%xmm4 + pxor %xmm0,%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm0,%xmm7 + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor 80(%esp),%xmm7 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movl 120(%esp),%edi + movl 124(%esp),%eax + call L_aesni_decrypt6_enter + movdqa 80(%esp),%xmm0 + pxor (%esp),%xmm2 + movdqa 96(%esp),%xmm1 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + pxor %xmm0,%xmm7 + pxor %xmm2,%xmm1 + movdqu %xmm2,-96(%edi,%esi,1) + pxor %xmm3,%xmm1 + movdqu %xmm3,-80(%edi,%esi,1) + pxor %xmm4,%xmm1 + movdqu %xmm4,-64(%edi,%esi,1) + pxor %xmm5,%xmm1 + movdqu %xmm5,-48(%edi,%esi,1) + pxor %xmm6,%xmm1 + movdqu %xmm6,-32(%edi,%esi,1) + pxor %xmm7,%xmm1 + movdqu %xmm7,-16(%edi,%esi,1) + cmpl %eax,%esi + jb L087grandloop +L086short: + addl $96,%eax + subl %esi,%eax + jz L088done + cmpl $32,%eax + jb L089one + je L090two + cmpl $64,%eax + jb L091three + je L092four + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm2 + movdqu (%ebx,%ecx,1),%xmm3 + movl 116(%esp),%ecx + movdqa %xmm2,%xmm4 + movdqu (%ebx,%eax,1),%xmm5 + movdqa %xmm2,%xmm6 + pxor %xmm0,%xmm2 + pxor %xmm2,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm3,%xmm4 + movdqa %xmm3,16(%esp) + pxor %xmm4,%xmm5 + movdqa %xmm4,32(%esp) + pxor %xmm5,%xmm6 + movdqa %xmm5,48(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm6,64(%esp) + movups -48(%edx,%ecx,1),%xmm0 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movdqu 64(%esi),%xmm6 + pxor %xmm7,%xmm7 + movdqa %xmm1,96(%esp) + pxor %xmm0,%xmm2 + pxor %xmm0,%xmm3 + pxor %xmm0,%xmm4 + pxor %xmm0,%xmm5 + pxor %xmm0,%xmm6 + movups -32(%edx,%ecx,1),%xmm1 + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor 64(%esp),%xmm6 + movups -16(%edx,%ecx,1),%xmm0 +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movl 120(%esp),%edi + call L_aesni_decrypt6_enter + movdqa 64(%esp),%xmm0 + pxor (%esp),%xmm2 + movdqa 96(%esp),%xmm1 + pxor 16(%esp),%xmm3 + pxor 32(%esp),%xmm4 + pxor 48(%esp),%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm2,%xmm1 + movdqu %xmm2,(%edi,%esi,1) + pxor %xmm3,%xmm1 + movdqu %xmm3,16(%edi,%esi,1) + pxor %xmm4,%xmm1 + movdqu %xmm4,32(%edi,%esi,1) + pxor %xmm5,%xmm1 + movdqu %xmm5,48(%edi,%esi,1) + pxor %xmm6,%xmm1 + movdqu %xmm6,64(%edi,%esi,1) + jmp L088done +.align 4,0x90 +L089one: + movdqu (%ebx),%xmm7 + movl 112(%esp),%edx + movdqu (%esi),%xmm2 + movl 240(%edx),%ecx + pxor %xmm0,%xmm7 + pxor %xmm7,%xmm2 + movdqa %xmm1,%xmm6 + movl 120(%esp),%edi + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + leal 32(%edx),%edx + xorps %xmm0,%xmm2 +L093dec1_loop_18: +.byte 102,15,56,222,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L093dec1_loop_18 +.byte 102,15,56,223,209 + xorps %xmm7,%xmm2 + movaps %xmm6,%xmm1 + movdqa %xmm7,%xmm0 + xorps %xmm2,%xmm1 + movups %xmm2,(%edi,%esi,1) + jmp L088done +.align 4,0x90 +L090two: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm6 + movdqu (%ebx,%ecx,1),%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movl 240(%edx),%ecx + movdqa %xmm1,%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm6,%xmm2 + pxor %xmm7,%xmm3 + movl 120(%esp),%edi + call __aesni_decrypt2 + xorps %xmm6,%xmm2 + xorps %xmm7,%xmm3 + movdqa %xmm7,%xmm0 + xorps %xmm2,%xmm5 + movups %xmm2,(%edi,%esi,1) + xorps %xmm3,%xmm5 + movups %xmm3,16(%edi,%esi,1) + movaps %xmm5,%xmm1 + jmp L088done +.align 4,0x90 +L091three: + leal 1(%ebp),%ecx + movl 112(%esp),%edx + bsfl %ecx,%ecx + shll $4,%ecx + movdqu (%ebx),%xmm5 + movdqu (%ebx,%ecx,1),%xmm6 + movdqa %xmm5,%xmm7 + movdqu (%esi),%xmm2 + movdqu 16(%esi),%xmm3 + movdqu 32(%esi),%xmm4 + movl 240(%edx),%ecx + movdqa %xmm1,96(%esp) + pxor %xmm0,%xmm5 + pxor %xmm5,%xmm6 + pxor %xmm6,%xmm7 + pxor %xmm5,%xmm2 + pxor %xmm6,%xmm3 + pxor %xmm7,%xmm4 + movl 120(%esp),%edi + call __aesni_decrypt3 + movdqa 96(%esp),%xmm1 + xorps %xmm5,%xmm2 + xorps %xmm6,%xmm3 + xorps %xmm7,%xmm4 + movups %xmm2,(%edi,%esi,1) + pxor %xmm2,%xmm1 + movdqa %xmm7,%xmm0 + movups %xmm3,16(%edi,%esi,1) + pxor %xmm3,%xmm1 + movups %xmm4,32(%edi,%esi,1) + pxor %xmm4,%xmm1 + jmp L088done +.align 4,0x90 +L092four: + leal 1(%ebp),%ecx + leal 3(%ebp),%eax + bsfl %ecx,%ecx + bsfl %eax,%eax + movl 112(%esp),%edx + shll $4,%ecx + shll $4,%eax + movdqu (%ebx),%xmm4 + movdqu (%ebx,%ecx,1),%xmm5 + movdqa %xmm4,%xmm6 + movdqu (%ebx,%eax,1),%xmm7 + pxor %xmm0,%xmm4 + movdqu (%esi),%xmm2 + pxor %xmm4,%xmm5 + movdqu 16(%esi),%xmm3 + pxor %xmm5,%xmm6 + movdqa %xmm4,(%esp) + pxor %xmm6,%xmm7 + movdqa %xmm5,16(%esp) + movdqu 32(%esi),%xmm4 + movdqu 48(%esi),%xmm5 + movl 240(%edx),%ecx + movdqa %xmm1,96(%esp) + pxor (%esp),%xmm2 + pxor 16(%esp),%xmm3 + pxor %xmm6,%xmm4 + pxor %xmm7,%xmm5 + movl 120(%esp),%edi + call __aesni_decrypt4 + movdqa 96(%esp),%xmm1 + xorps (%esp),%xmm2 + xorps 16(%esp),%xmm3 + xorps %xmm6,%xmm4 + movups %xmm2,(%edi,%esi,1) + pxor %xmm2,%xmm1 + xorps %xmm7,%xmm5 + movups %xmm3,16(%edi,%esi,1) + pxor %xmm3,%xmm1 + movdqa %xmm7,%xmm0 + movups %xmm4,32(%edi,%esi,1) + pxor %xmm4,%xmm1 + movups %xmm5,48(%edi,%esi,1) + pxor %xmm5,%xmm1 +L088done: + movl 128(%esp),%edx + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + movdqa %xmm2,(%esp) + pxor %xmm4,%xmm4 + movdqa %xmm2,16(%esp) + pxor %xmm5,%xmm5 + movdqa %xmm2,32(%esp) + pxor %xmm6,%xmm6 + movdqa %xmm2,48(%esp) + pxor %xmm7,%xmm7 + movdqa %xmm2,64(%esp) + movdqa %xmm2,80(%esp) + movdqa %xmm2,96(%esp) + leal (%edx),%esp + movl 40(%esp),%ecx + movl 48(%esp),%ebx + movdqu %xmm0,(%ecx) + pxor %xmm0,%xmm0 + movdqu %xmm1,(%ebx) + pxor %xmm1,%xmm1 + popl %edi + popl %esi + popl %ebx + popl %ebp + ret +.globl _aesni_cbc_encrypt +.align 4 +_aesni_cbc_encrypt: +L_aesni_cbc_encrypt_begin: + pushl %ebp + pushl %ebx + pushl %esi + pushl %edi + movl 20(%esp),%esi + movl %esp,%ebx + movl 24(%esp),%edi + subl $24,%ebx + movl 28(%esp),%eax + andl $-16,%ebx + movl 32(%esp),%edx + movl 36(%esp),%ebp + testl %eax,%eax + jz L094cbc_abort + cmpl $0,40(%esp) + xchgl %esp,%ebx + movups (%ebp),%xmm7 + movl 240(%edx),%ecx + movl %edx,%ebp + movl %ebx,16(%esp) + movl %ecx,%ebx + je L095cbc_decrypt + movaps %xmm7,%xmm2 + cmpl $16,%eax + jb L096cbc_enc_tail + subl $16,%eax + jmp L097cbc_enc_loop +.align 4,0x90 +L097cbc_enc_loop: + movups (%esi),%xmm7 + leal 16(%esi),%esi + movups (%edx),%xmm0 + movups 16(%edx),%xmm1 + xorps %xmm0,%xmm7 + leal 32(%edx),%edx + xorps %xmm7,%xmm2 +L098enc1_loop_19: +.byte 102,15,56,220,209 + decl %ecx + movups (%edx),%xmm1 + leal 16(%edx),%edx + jnz L098enc1_loop_19 +.byte 102,15,56,221,209 + movl %ebx,%ecx + movl %ebp,%edx + movups %xmm2,(%edi) + leal 16(%edi),%edi + subl $16,%eax + jnc L097cbc_enc_loop + addl $16,%eax + jnz L096cbc_enc_tail + movaps %xmm2,%xmm7 + pxor %xmm2,%xmm2 + jmp L099cbc_ret +L096cbc_enc_tail: + movl %eax,%ecx +.long 2767451785 + movl $16,%ecx + subl %eax,%ecx + xorl %eax,%eax +.long 2868115081 + leal -16(%edi),%edi + movl %ebx,%ecx + movl %edi,%esi + movl %ebp,%edx + jmp L097cbc_enc_loop +.align 4,0x90 +L095cbc_decrypt: + cmpl $80,%eax + jbe L100cbc_dec_tail + movaps %xmm7,(%esp) + subl $80,%eax + jmp L101cbc_dec_loop6_enter +.align 4,0x90 +L102cbc_dec_loop6: + movaps %xmm0,(%esp) + movups %xmm7,(%edi) + leal 16(%edi),%edi +L101cbc_dec_loop6_enter: + movdqu (%esi),%xmm2 movdqu 16(%esi),%xmm3 movdqu 32(%esi),%xmm4 movdqu 48(%esi),%xmm5 @@ -1793,28 +2694,28 @@ L077cbc_dec_loop6_enter: movups %xmm6,64(%edi) leal 80(%edi),%edi subl $96,%eax - ja L078cbc_dec_loop6 + ja L102cbc_dec_loop6 movaps %xmm7,%xmm2 movaps %xmm0,%xmm7 addl $80,%eax - jle L079cbc_dec_tail_collected + jle L103cbc_dec_clear_tail_collected movups %xmm2,(%edi) leal 16(%edi),%edi -L076cbc_dec_tail: +L100cbc_dec_tail: movups (%esi),%xmm2 movaps %xmm2,%xmm6 cmpl $16,%eax - jbe L080cbc_dec_one + jbe L104cbc_dec_one movups 16(%esi),%xmm3 movaps %xmm3,%xmm5 cmpl $32,%eax - jbe L081cbc_dec_two + jbe L105cbc_dec_two movups 32(%esi),%xmm4 cmpl $48,%eax - jbe L082cbc_dec_three + jbe L106cbc_dec_three movups 48(%esi),%xmm5 cmpl $64,%eax - jbe L083cbc_dec_four + jbe L107cbc_dec_four movups 64(%esi),%xmm6 movaps %xmm7,(%esp) movups (%esi),%xmm2 @@ -1832,56 +2733,62 @@ L076cbc_dec_tail: xorps %xmm0,%xmm6 movups %xmm2,(%edi) movups %xmm3,16(%edi) + pxor %xmm3,%xmm3 movups %xmm4,32(%edi) + pxor %xmm4,%xmm4 movups %xmm5,48(%edi) + pxor %xmm5,%xmm5 leal 64(%edi),%edi movaps %xmm6,%xmm2 + pxor %xmm6,%xmm6 subl $80,%eax - jmp L079cbc_dec_tail_collected + jmp L108cbc_dec_tail_collected .align 4,0x90 -L080cbc_dec_one: +L104cbc_dec_one: movups (%edx),%xmm0 movups 16(%edx),%xmm1 leal 32(%edx),%edx xorps %xmm0,%xmm2 -L084dec1_loop_16: +L109dec1_loop_20: .byte 102,15,56,222,209 decl %ecx movups (%edx),%xmm1 leal 16(%edx),%edx - jnz L084dec1_loop_16 + jnz L109dec1_loop_20 .byte 102,15,56,223,209 xorps %xmm7,%xmm2 movaps %xmm6,%xmm7 subl $16,%eax - jmp L079cbc_dec_tail_collected + jmp L108cbc_dec_tail_collected .align 4,0x90 -L081cbc_dec_two: - xorps %xmm4,%xmm4 - call __aesni_decrypt3 +L105cbc_dec_two: + call __aesni_decrypt2 xorps %xmm7,%xmm2 xorps %xmm6,%xmm3 movups %xmm2,(%edi) movaps %xmm3,%xmm2 + pxor %xmm3,%xmm3 leal 16(%edi),%edi movaps %xmm5,%xmm7 subl $32,%eax - jmp L079cbc_dec_tail_collected + jmp L108cbc_dec_tail_collected .align 4,0x90 -L082cbc_dec_three: +L106cbc_dec_three: call __aesni_decrypt3 xorps %xmm7,%xmm2 xorps %xmm6,%xmm3 xorps %xmm5,%xmm4 movups %xmm2,(%edi) movaps %xmm4,%xmm2 + pxor %xmm4,%xmm4 movups %xmm3,16(%edi) + pxor %xmm3,%xmm3 leal 32(%edi),%edi movups 32(%esi),%xmm7 subl $48,%eax - jmp L079cbc_dec_tail_collected + jmp L108cbc_dec_tail_collected .align 4,0x90 -L083cbc_dec_four: +L107cbc_dec_four: call __aesni_decrypt4 movups 16(%esi),%xmm1 movups 32(%esi),%xmm0 @@ -1891,28 +2798,44 @@ L083cbc_dec_four: movups %xmm2,(%edi) xorps %xmm1,%xmm4 movups %xmm3,16(%edi) + pxor %xmm3,%xmm3 xorps %xmm0,%xmm5 movups %xmm4,32(%edi) + pxor %xmm4,%xmm4 leal 48(%edi),%edi movaps %xmm5,%xmm2 + pxor %xmm5,%xmm5 subl $64,%eax -L079cbc_dec_tail_collected: + jmp L108cbc_dec_tail_collected +.align 4,0x90 +L103cbc_dec_clear_tail_collected: + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 +L108cbc_dec_tail_collected: andl $15,%eax - jnz L085cbc_dec_tail_partial + jnz L110cbc_dec_tail_partial movups %xmm2,(%edi) - jmp L075cbc_ret + pxor %xmm0,%xmm0 + jmp L099cbc_ret .align 4,0x90 -L085cbc_dec_tail_partial: +L110cbc_dec_tail_partial: movaps %xmm2,(%esp) + pxor %xmm0,%xmm0 movl $16,%ecx movl %esp,%esi subl %eax,%ecx .long 2767451785 -L075cbc_ret: + movdqa %xmm2,(%esp) +L099cbc_ret: movl 16(%esp),%esp movl 36(%esp),%ebp + pxor %xmm2,%xmm2 + pxor %xmm1,%xmm1 movups %xmm7,(%ebp) -L070cbc_abort: + pxor %xmm7,%xmm7 +L094cbc_abort: popl %edi popl %esi popl %ebx @@ -1920,52 +2843,62 @@ L070cbc_abort: ret .align 4 __aesni_set_encrypt_key: + pushl %ebp + pushl %ebx testl %eax,%eax - jz L086bad_pointer + jz L111bad_pointer testl %edx,%edx - jz L086bad_pointer + jz L111bad_pointer + call L112pic +L112pic: + popl %ebx + leal Lkey_const-L112pic(%ebx),%ebx + movl L__gnutls_x86_cpuid_s$non_lazy_ptr-Lkey_const(%ebx),%ebp movups (%eax),%xmm0 xorps %xmm4,%xmm4 + movl 4(%ebp),%ebp leal 16(%edx),%edx + andl $268437504,%ebp cmpl $256,%ecx - je L08714rounds + je L11314rounds cmpl $192,%ecx - je L08812rounds + je L11412rounds cmpl $128,%ecx - jne L089bad_keybits + jne L115bad_keybits .align 4,0x90 -L09010rounds: +L11610rounds: + cmpl $268435456,%ebp + je L11710rounds_alt movl $9,%ecx movups %xmm0,-16(%edx) .byte 102,15,58,223,200,1 - call L091key_128_cold + call L118key_128_cold .byte 102,15,58,223,200,2 - call L092key_128 + call L119key_128 .byte 102,15,58,223,200,4 - call L092key_128 + call L119key_128 .byte 102,15,58,223,200,8 - call L092key_128 + call L119key_128 .byte 102,15,58,223,200,16 - call L092key_128 + call L119key_128 .byte 102,15,58,223,200,32 - call L092key_128 + call L119key_128 .byte 102,15,58,223,200,64 - call L092key_128 + call L119key_128 .byte 102,15,58,223,200,128 - call L092key_128 + call L119key_128 .byte 102,15,58,223,200,27 - call L092key_128 + call L119key_128 .byte 102,15,58,223,200,54 - call L092key_128 + call L119key_128 movups %xmm0,(%edx) movl %ecx,80(%edx) - xorl %eax,%eax - ret + jmp L120good_key .align 4,0x90 -L092key_128: +L119key_128: movups %xmm0,(%edx) leal 16(%edx),%edx -L091key_128_cold: +L118key_128_cold: shufps $16,%xmm0,%xmm4 xorps %xmm4,%xmm0 shufps $140,%xmm0,%xmm4 @@ -1974,38 +2907,91 @@ L091key_128_cold: xorps %xmm1,%xmm0 ret .align 4,0x90 -L08812rounds: +L11710rounds_alt: + movdqa (%ebx),%xmm5 + movl $8,%ecx + movdqa 32(%ebx),%xmm4 + movdqa %xmm0,%xmm2 + movdqu %xmm0,-16(%edx) +L121loop_key128: +.byte 102,15,56,0,197 +.byte 102,15,56,221,196 + pslld $1,%xmm4 + leal 16(%edx),%edx + movdqa %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm3,%xmm2 + pxor %xmm2,%xmm0 + movdqu %xmm0,-16(%edx) + movdqa %xmm0,%xmm2 + decl %ecx + jnz L121loop_key128 + movdqa 48(%ebx),%xmm4 +.byte 102,15,56,0,197 +.byte 102,15,56,221,196 + pslld $1,%xmm4 + movdqa %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm3,%xmm2 + pxor %xmm2,%xmm0 + movdqu %xmm0,(%edx) + movdqa %xmm0,%xmm2 +.byte 102,15,56,0,197 +.byte 102,15,56,221,196 + movdqa %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm2,%xmm3 + pslldq $4,%xmm2 + pxor %xmm3,%xmm2 + pxor %xmm2,%xmm0 + movdqu %xmm0,16(%edx) + movl $9,%ecx + movl %ecx,96(%edx) + jmp L120good_key +.align 4,0x90 +L11412rounds: movq 16(%eax),%xmm2 + cmpl $268435456,%ebp + je L12212rounds_alt movl $11,%ecx movups %xmm0,-16(%edx) .byte 102,15,58,223,202,1 - call L093key_192a_cold + call L123key_192a_cold .byte 102,15,58,223,202,2 - call L094key_192b + call L124key_192b .byte 102,15,58,223,202,4 - call L095key_192a + call L125key_192a .byte 102,15,58,223,202,8 - call L094key_192b + call L124key_192b .byte 102,15,58,223,202,16 - call L095key_192a + call L125key_192a .byte 102,15,58,223,202,32 - call L094key_192b + call L124key_192b .byte 102,15,58,223,202,64 - call L095key_192a + call L125key_192a .byte 102,15,58,223,202,128 - call L094key_192b + call L124key_192b movups %xmm0,(%edx) movl %ecx,48(%edx) - xorl %eax,%eax - ret + jmp L120good_key .align 4,0x90 -L095key_192a: +L125key_192a: movups %xmm0,(%edx) leal 16(%edx),%edx .align 4,0x90 -L093key_192a_cold: +L123key_192a_cold: movaps %xmm2,%xmm5 -L096key_192b_warm: +L126key_192b_warm: shufps $16,%xmm0,%xmm4 movdqa %xmm2,%xmm3 xorps %xmm4,%xmm0 @@ -2019,56 +3005,90 @@ L096key_192b_warm: pxor %xmm3,%xmm2 ret .align 4,0x90 -L094key_192b: +L124key_192b: movaps %xmm0,%xmm3 shufps $68,%xmm0,%xmm5 movups %xmm5,(%edx) shufps $78,%xmm2,%xmm3 movups %xmm3,16(%edx) leal 32(%edx),%edx - jmp L096key_192b_warm + jmp L126key_192b_warm .align 4,0x90 -L08714rounds: +L12212rounds_alt: + movdqa 16(%ebx),%xmm5 + movdqa 32(%ebx),%xmm4 + movl $8,%ecx + movdqu %xmm0,-16(%edx) +L127loop_key192: + movq %xmm2,(%edx) + movdqa %xmm2,%xmm1 +.byte 102,15,56,0,213 +.byte 102,15,56,221,212 + pslld $1,%xmm4 + leal 24(%edx),%edx + movdqa %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm3,%xmm0 + pshufd $255,%xmm0,%xmm3 + pxor %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm1,%xmm3 + pxor %xmm2,%xmm0 + pxor %xmm3,%xmm2 + movdqu %xmm0,-16(%edx) + decl %ecx + jnz L127loop_key192 + movl $11,%ecx + movl %ecx,32(%edx) + jmp L120good_key +.align 4,0x90 +L11314rounds: movups 16(%eax),%xmm2 - movl $13,%ecx leal 16(%edx),%edx + cmpl $268435456,%ebp + je L12814rounds_alt + movl $13,%ecx movups %xmm0,-32(%edx) movups %xmm2,-16(%edx) .byte 102,15,58,223,202,1 - call L097key_256a_cold + call L129key_256a_cold .byte 102,15,58,223,200,1 - call L098key_256b + call L130key_256b .byte 102,15,58,223,202,2 - call L099key_256a + call L131key_256a .byte 102,15,58,223,200,2 - call L098key_256b + call L130key_256b .byte 102,15,58,223,202,4 - call L099key_256a + call L131key_256a .byte 102,15,58,223,200,4 - call L098key_256b + call L130key_256b .byte 102,15,58,223,202,8 - call L099key_256a + call L131key_256a .byte 102,15,58,223,200,8 - call L098key_256b + call L130key_256b .byte 102,15,58,223,202,16 - call L099key_256a + call L131key_256a .byte 102,15,58,223,200,16 - call L098key_256b + call L130key_256b .byte 102,15,58,223,202,32 - call L099key_256a + call L131key_256a .byte 102,15,58,223,200,32 - call L098key_256b + call L130key_256b .byte 102,15,58,223,202,64 - call L099key_256a + call L131key_256a movups %xmm0,(%edx) movl %ecx,16(%edx) xorl %eax,%eax - ret + jmp L120good_key .align 4,0x90 -L099key_256a: +L131key_256a: movups %xmm2,(%edx) leal 16(%edx),%edx -L097key_256a_cold: +L129key_256a_cold: shufps $16,%xmm0,%xmm4 xorps %xmm4,%xmm0 shufps $140,%xmm0,%xmm4 @@ -2077,7 +3097,7 @@ L097key_256a_cold: xorps %xmm1,%xmm0 ret .align 4,0x90 -L098key_256b: +L130key_256b: movups %xmm0,(%edx) leal 16(%edx),%edx shufps $16,%xmm2,%xmm4 @@ -2087,13 +3107,70 @@ L098key_256b: shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 ret +.align 4,0x90 +L12814rounds_alt: + movdqa (%ebx),%xmm5 + movdqa 32(%ebx),%xmm4 + movl $7,%ecx + movdqu %xmm0,-32(%edx) + movdqa %xmm2,%xmm1 + movdqu %xmm2,-16(%edx) +L132loop_key256: +.byte 102,15,56,0,213 +.byte 102,15,56,221,212 + movdqa %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm0,%xmm3 + pslldq $4,%xmm0 + pxor %xmm3,%xmm0 + pslld $1,%xmm4 + pxor %xmm2,%xmm0 + movdqu %xmm0,(%edx) + decl %ecx + jz L133done_key256 + pshufd $255,%xmm0,%xmm2 + pxor %xmm3,%xmm3 +.byte 102,15,56,221,211 + movdqa %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm1,%xmm3 + pslldq $4,%xmm1 + pxor %xmm3,%xmm1 + pxor %xmm1,%xmm2 + movdqu %xmm2,16(%edx) + leal 32(%edx),%edx + movdqa %xmm2,%xmm1 + jmp L132loop_key256 +L133done_key256: + movl $13,%ecx + movl %ecx,16(%edx) +L120good_key: + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + xorl %eax,%eax + popl %ebx + popl %ebp + ret .align 2,0x90 -L086bad_pointer: +L111bad_pointer: movl $-1,%eax + popl %ebx + popl %ebp ret .align 2,0x90 -L089bad_keybits: +L115bad_keybits: + pxor %xmm0,%xmm0 movl $-2,%eax + popl %ebx + popl %ebp ret .globl _aesni_set_encrypt_key .align 4 @@ -2115,7 +3192,7 @@ L_aesni_set_decrypt_key_begin: movl 12(%esp),%edx shll $4,%ecx testl %eax,%eax - jnz L100dec_key_ret + jnz L134dec_key_ret leal 16(%edx,%ecx,1),%eax movups (%edx),%xmm0 movups (%eax),%xmm1 @@ -2123,7 +3200,7 @@ L_aesni_set_decrypt_key_begin: movups %xmm1,(%edx) leal 16(%edx),%edx leal -16(%eax),%eax -L101dec_key_inverse: +L135dec_key_inverse: movups (%edx),%xmm0 movups (%eax),%xmm1 .byte 102,15,56,219,192 @@ -2133,15 +3210,28 @@ L101dec_key_inverse: movups %xmm0,16(%eax) movups %xmm1,-16(%edx) cmpl %edx,%eax - ja L101dec_key_inverse + ja L135dec_key_inverse movups (%edx),%xmm0 .byte 102,15,56,219,192 movups %xmm0,(%edx) + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 xorl %eax,%eax -L100dec_key_ret: +L134dec_key_ret: ret +.align 6,0x90 +Lkey_const: +.long 202313229,202313229,202313229,202313229 +.long 67569157,67569157,67569157,67569157 +.long 1,1,1,1 +.long 27,27,27,27 .byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 .byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 .byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 .byte 115,108,46,111,114,103,62,0 +.section __IMPORT,__pointers,non_lazy_symbol_pointers +L__gnutls_x86_cpuid_s$non_lazy_ptr: +.indirect_symbol __gnutls_x86_cpuid_s +.long 0 +.comm __gnutls_x86_cpuid_s,16,2 diff --git a/lib/accelerated/x86/macosx/aesni-x86_64.s b/lib/accelerated/x86/macosx/aesni-x86_64.s index f0a5606348..f6145f166b 100644 --- a/lib/accelerated/x86/macosx/aesni-x86_64.s +++ b/lib/accelerated/x86/macosx/aesni-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -43,6 +43,7 @@ .p2align 4 _aesni_encrypt: + movups (%rdi),%xmm2 movl 240(%rdx),%eax movups (%rdx),%xmm0 @@ -63,10 +64,12 @@ L$oop_enc1_1: .byte 0xf3,0xc3 + .globl _aesni_decrypt .p2align 4 _aesni_decrypt: + movups (%rdi),%xmm2 movl 240(%rdx),%eax movups (%rdx),%xmm0 @@ -87,8 +90,10 @@ L$oop_dec1_2: .byte 0xf3,0xc3 + .p2align 4 _aesni_encrypt2: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -116,8 +121,10 @@ L$enc_loop2: .byte 0xf3,0xc3 + .p2align 4 _aesni_decrypt2: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -145,8 +152,10 @@ L$dec_loop2: .byte 0xf3,0xc3 + .p2align 4 _aesni_encrypt3: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -179,8 +188,10 @@ L$enc_loop3: .byte 0xf3,0xc3 + .p2align 4 _aesni_decrypt3: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -213,8 +224,10 @@ L$dec_loop3: .byte 0xf3,0xc3 + .p2align 4 _aesni_encrypt4: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -253,8 +266,10 @@ L$enc_loop4: .byte 0xf3,0xc3 + .p2align 4 _aesni_decrypt4: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -293,8 +308,10 @@ L$dec_loop4: .byte 0xf3,0xc3 + .p2align 4 _aesni_encrypt6: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -347,8 +364,10 @@ L$enc_loop6_enter: .byte 0xf3,0xc3 + .p2align 4 _aesni_decrypt6: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -401,8 +420,10 @@ L$dec_loop6_enter: .byte 0xf3,0xc3 + .p2align 4 _aesni_encrypt8: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -465,8 +486,10 @@ L$enc_loop8_enter: .byte 0xf3,0xc3 + .p2align 4 _aesni_decrypt8: + movups (%rcx),%xmm0 shll $4,%eax movups 16(%rcx),%xmm1 @@ -528,10 +551,12 @@ L$dec_loop8_enter: .byte 102,68,15,56,223,200 .byte 0xf3,0xc3 + .globl _aesni_ecb_encrypt .p2align 4 _aesni_ecb_encrypt: + andq $-16,%rdx jz L$ecb_ret @@ -870,6 +895,7 @@ L$ecb_ret: pxor %xmm1,%xmm1 .byte 0xf3,0xc3 + .globl _aesni_ccm64_encrypt_blocks .p2align 4 @@ -1034,6 +1060,7 @@ L$oop_enc1_6: .p2align 4 _aesni_ctr32_encrypt_blocks: + cmpq $1,%rdx jne L$ctr32_bulk @@ -1063,11 +1090,12 @@ L$oop_enc1_7: .p2align 4 L$ctr32_bulk: - leaq (%rsp),%rax + leaq (%rsp),%r11 + pushq %rbp + subq $128,%rsp andq $-16,%rsp - leaq -8(%rax),%rbp @@ -1076,7 +1104,7 @@ L$ctr32_bulk: movdqu (%rcx),%xmm0 movl 12(%r8),%r8d pxor %xmm0,%xmm2 - movl 12(%rcx),%r11d + movl 12(%rcx),%ebp movdqa %xmm2,0(%rsp) bswapl %r8d movdqa %xmm2,%xmm3 @@ -1092,8 +1120,8 @@ L$ctr32_bulk: leaq 2(%r8),%rdx bswapl %eax bswapl %edx - xorl %r11d,%eax - xorl %r11d,%edx + xorl %ebp,%eax + xorl %ebp,%edx .byte 102,15,58,34,216,3 leaq 3(%r8),%rax movdqa %xmm3,16(%rsp) @@ -1102,25 +1130,25 @@ L$ctr32_bulk: movq %r10,%rdx leaq 4(%r8),%r10 movdqa %xmm4,32(%rsp) - xorl %r11d,%eax + xorl %ebp,%eax bswapl %r10d .byte 102,15,58,34,232,3 - xorl %r11d,%r10d + xorl %ebp,%r10d movdqa %xmm5,48(%rsp) leaq 5(%r8),%r9 movl %r10d,64+12(%rsp) bswapl %r9d leaq 6(%r8),%r10 movl 240(%rcx),%eax - xorl %r11d,%r9d + xorl %ebp,%r9d bswapl %r10d movl %r9d,80+12(%rsp) - xorl %r11d,%r10d + xorl %ebp,%r10d leaq 7(%r8),%r9 movl %r10d,96+12(%rsp) bswapl %r9d movl __gnutls_x86_cpuid_s+4(%rip),%r10d - xorl %r11d,%r9d + xorl %ebp,%r9d andl $71303168,%r10d movl %r9d,112+12(%rsp) @@ -1144,7 +1172,7 @@ L$ctr32_bulk: L$ctr32_6x: shll $4,%eax movl $48,%r10d - bswapl %r11d + bswapl %ebp leaq 32(%rcx,%rax,1),%rcx subq %rax,%r10 jmp L$ctr32_loop6 @@ -1155,32 +1183,32 @@ L$ctr32_loop6: movups -48(%rcx,%r10,1),%xmm0 .byte 102,15,56,220,209 movl %r8d,%eax - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,217 .byte 0x0f,0x38,0xf1,0x44,0x24,12 leal 1(%r8),%eax .byte 102,15,56,220,225 - xorl %r11d,%eax + xorl %ebp,%eax .byte 0x0f,0x38,0xf1,0x44,0x24,28 .byte 102,15,56,220,233 leal 2(%r8),%eax - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,241 .byte 0x0f,0x38,0xf1,0x44,0x24,44 leal 3(%r8),%eax .byte 102,15,56,220,249 movups -32(%rcx,%r10,1),%xmm1 - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,208 .byte 0x0f,0x38,0xf1,0x44,0x24,60 leal 4(%r8),%eax .byte 102,15,56,220,216 - xorl %r11d,%eax + xorl %ebp,%eax .byte 0x0f,0x38,0xf1,0x44,0x24,76 .byte 102,15,56,220,224 leal 5(%r8),%eax - xorl %r11d,%eax + xorl %ebp,%eax .byte 102,15,56,220,232 .byte 0x0f,0x38,0xf1,0x44,0x24,92 movq %r10,%rax @@ -1241,7 +1269,7 @@ L$ctr32_loop8: bswapl %r9d movups 32-128(%rcx),%xmm0 .byte 102,15,56,220,225 - xorl %r11d,%r9d + xorl %ebp,%r9d nop .byte 102,15,56,220,233 movl %r9d,0+12(%rsp) @@ -1254,7 +1282,7 @@ L$ctr32_loop8: bswapl %r9d .byte 102,15,56,220,208 .byte 102,15,56,220,216 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,224 .byte 102,15,56,220,232 @@ -1268,7 +1296,7 @@ L$ctr32_loop8: bswapl %r9d .byte 102,15,56,220,209 .byte 102,15,56,220,217 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,225 .byte 102,15,56,220,233 @@ -1282,7 +1310,7 @@ L$ctr32_loop8: bswapl %r9d .byte 102,15,56,220,208 .byte 102,15,56,220,216 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,224 .byte 102,15,56,220,232 @@ -1296,7 +1324,7 @@ L$ctr32_loop8: bswapl %r9d .byte 102,15,56,220,209 .byte 102,15,56,220,217 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,225 .byte 102,15,56,220,233 @@ -1310,7 +1338,7 @@ L$ctr32_loop8: bswapl %r9d .byte 102,15,56,220,208 .byte 102,15,56,220,216 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,224 .byte 102,15,56,220,232 @@ -1324,7 +1352,7 @@ L$ctr32_loop8: bswapl %r9d .byte 102,15,56,220,209 .byte 102,15,56,220,217 - xorl %r11d,%r9d + xorl %ebp,%r9d .byte 0x66,0x90 .byte 102,15,56,220,225 .byte 102,15,56,220,233 @@ -1339,7 +1367,7 @@ L$ctr32_loop8: .byte 102,15,56,220,208 .byte 102,15,56,220,216 .byte 102,15,56,220,224 - xorl %r11d,%r9d + xorl %ebp,%r9d movdqu 0(%rdi),%xmm10 .byte 102,15,56,220,232 movl %r9d,112+12(%rsp) @@ -1574,7 +1602,7 @@ L$ctr32_loop3: L$ctr32_done: xorps %xmm0,%xmm0 - xorl %r11d,%r11d + xorl %ebp,%ebp pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 pxor %xmm3,%xmm3 @@ -1598,20 +1626,25 @@ L$ctr32_done: pxor %xmm14,%xmm14 movaps %xmm0,112(%rsp) pxor %xmm15,%xmm15 - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp + + leaq (%r11),%rsp + L$ctr32_epilogue: .byte 0xf3,0xc3 + .globl _aesni_xts_encrypt .p2align 4 _aesni_xts_encrypt: - leaq (%rsp),%rax + + leaq (%rsp),%r11 + pushq %rbp + subq $112,%rsp andq $-16,%rsp - leaq -8(%rax),%rbp movups (%r9),%xmm2 movl 240(%r8),%eax movl 240(%rcx),%r10d @@ -1627,7 +1660,7 @@ L$oop_enc1_8: jnz L$oop_enc1_8 .byte 102,15,56,221,209 movups (%rcx),%xmm0 - movq %rcx,%r11 + movq %rcx,%rbp movl %r10d,%eax shll $4,%r10d movq %rdx,%r9 @@ -1683,9 +1716,9 @@ L$oop_enc1_8: jc L$xts_enc_short movl $16+96,%eax - leaq 32(%r11,%r10,1),%rcx + leaq 32(%rbp,%r10,1),%rcx subq %r10,%rax - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 movq %rax,%r10 leaq L$xts_magic(%rip),%r8 jmp L$xts_enc_grandloop @@ -1710,7 +1743,7 @@ L$xts_enc_grandloop: movdqa 96(%rsp),%xmm9 pxor %xmm14,%xmm6 .byte 102,15,56,220,233 - movups 32(%r11),%xmm0 + movups 32(%rbp),%xmm0 leaq 96(%rdi),%rdi pxor %xmm8,%xmm7 @@ -1719,7 +1752,7 @@ L$xts_enc_grandloop: pxor %xmm9,%xmm11 movdqa %xmm10,0(%rsp) .byte 102,15,56,220,249 - movups 48(%r11),%xmm1 + movups 48(%rbp),%xmm1 pxor %xmm9,%xmm12 .byte 102,15,56,220,208 @@ -1734,7 +1767,7 @@ L$xts_enc_grandloop: movdqa %xmm14,64(%rsp) .byte 102,15,56,220,240 .byte 102,15,56,220,248 - movups 64(%r11),%xmm0 + movups 64(%rbp),%xmm0 movdqa %xmm8,80(%rsp) pshufd $0x5f,%xmm15,%xmm9 jmp L$xts_enc_loop6 @@ -1766,7 +1799,7 @@ L$xts_enc_loop6: psrad $31,%xmm14 .byte 102,15,56,220,217 pand %xmm8,%xmm14 - movups (%r11),%xmm10 + movups (%rbp),%xmm10 .byte 102,15,56,220,225 .byte 102,15,56,220,233 .byte 102,15,56,220,241 @@ -1834,10 +1867,10 @@ L$xts_enc_loop6: .byte 102,15,56,220,225 .byte 102,15,56,220,233 pxor %xmm0,%xmm15 - movups (%r11),%xmm0 + movups (%rbp),%xmm0 .byte 102,15,56,220,241 .byte 102,15,56,220,249 - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 pxor %xmm15,%xmm14 .byte 102,15,56,221,84,36,0 @@ -1864,7 +1897,7 @@ L$xts_enc_loop6: movl $16+96,%eax subl %r10d,%eax - movq %r11,%rcx + movq %rbp,%rcx shrl $4,%eax L$xts_enc_short: @@ -2020,7 +2053,7 @@ L$xts_enc_steal: jnz L$xts_enc_steal subq %r9,%rsi - movq %r11,%rcx + movq %rbp,%rcx movl %r10d,%eax movups -16(%rsi),%xmm2 @@ -2063,20 +2096,25 @@ L$xts_enc_ret: movaps %xmm0,96(%rsp) pxor %xmm14,%xmm14 pxor %xmm15,%xmm15 - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp + + leaq (%r11),%rsp + L$xts_enc_epilogue: .byte 0xf3,0xc3 + .globl _aesni_xts_decrypt .p2align 4 _aesni_xts_decrypt: - leaq (%rsp),%rax + + leaq (%rsp),%r11 + pushq %rbp + subq $112,%rsp andq $-16,%rsp - leaq -8(%rax),%rbp movups (%r9),%xmm2 movl 240(%r8),%eax movl 240(%rcx),%r10d @@ -2098,7 +2136,7 @@ L$oop_enc1_11: subq %rax,%rdx movups (%rcx),%xmm0 - movq %rcx,%r11 + movq %rcx,%rbp movl %r10d,%eax shll $4,%r10d movq %rdx,%r9 @@ -2154,9 +2192,9 @@ L$oop_enc1_11: jc L$xts_dec_short movl $16+96,%eax - leaq 32(%r11,%r10,1),%rcx + leaq 32(%rbp,%r10,1),%rcx subq %r10,%rax - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 movq %rax,%r10 leaq L$xts_magic(%rip),%r8 jmp L$xts_dec_grandloop @@ -2181,7 +2219,7 @@ L$xts_dec_grandloop: movdqa 96(%rsp),%xmm9 pxor %xmm14,%xmm6 .byte 102,15,56,222,233 - movups 32(%r11),%xmm0 + movups 32(%rbp),%xmm0 leaq 96(%rdi),%rdi pxor %xmm8,%xmm7 @@ -2190,7 +2228,7 @@ L$xts_dec_grandloop: pxor %xmm9,%xmm11 movdqa %xmm10,0(%rsp) .byte 102,15,56,222,249 - movups 48(%r11),%xmm1 + movups 48(%rbp),%xmm1 pxor %xmm9,%xmm12 .byte 102,15,56,222,208 @@ -2205,7 +2243,7 @@ L$xts_dec_grandloop: movdqa %xmm14,64(%rsp) .byte 102,15,56,222,240 .byte 102,15,56,222,248 - movups 64(%r11),%xmm0 + movups 64(%rbp),%xmm0 movdqa %xmm8,80(%rsp) pshufd $0x5f,%xmm15,%xmm9 jmp L$xts_dec_loop6 @@ -2237,7 +2275,7 @@ L$xts_dec_loop6: psrad $31,%xmm14 .byte 102,15,56,222,217 pand %xmm8,%xmm14 - movups (%r11),%xmm10 + movups (%rbp),%xmm10 .byte 102,15,56,222,225 .byte 102,15,56,222,233 .byte 102,15,56,222,241 @@ -2305,10 +2343,10 @@ L$xts_dec_loop6: .byte 102,15,56,222,225 .byte 102,15,56,222,233 pxor %xmm0,%xmm15 - movups (%r11),%xmm0 + movups (%rbp),%xmm0 .byte 102,15,56,222,241 .byte 102,15,56,222,249 - movups 16(%r11),%xmm1 + movups 16(%rbp),%xmm1 pxor %xmm15,%xmm14 .byte 102,15,56,223,84,36,0 @@ -2335,7 +2373,7 @@ L$xts_dec_loop6: movl $16+96,%eax subl %r10d,%eax - movq %r11,%rcx + movq %rbp,%rcx shrl $4,%eax L$xts_dec_short: @@ -2492,7 +2530,7 @@ L$xts_dec_done: jz L$xts_dec_ret L$xts_dec_done2: movq %r9,%rdx - movq %r11,%rcx + movq %rbp,%rcx movl %r10d,%eax movups (%rdi),%xmm2 @@ -2522,7 +2560,7 @@ L$xts_dec_steal: jnz L$xts_dec_steal subq %r9,%rsi - movq %r11,%rcx + movq %rbp,%rcx movl %r10d,%eax movups (%rsi),%xmm2 @@ -2565,172 +2603,1020 @@ L$xts_dec_ret: movaps %xmm0,96(%rsp) pxor %xmm14,%xmm14 pxor %xmm15,%xmm15 - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp + + leaq (%r11),%rsp + L$xts_dec_epilogue: .byte 0xf3,0xc3 -.globl _aesni_cbc_encrypt -.p2align 4 -_aesni_cbc_encrypt: - testq %rdx,%rdx - jz L$cbc_ret +.globl _aesni_ocb_encrypt + +.p2align 5 +_aesni_ocb_encrypt: + + leaq (%rsp),%rax + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + movq 8(%rax),%rbx + movq 8+8(%rax),%rbp movl 240(%rcx),%r10d movq %rcx,%r11 - testl %r9d,%r9d - jz L$cbc_decrypt + shll $4,%r10d + movups (%rcx),%xmm9 + movups 16(%rcx,%r10,1),%xmm1 - movups (%r8),%xmm2 - movl %r10d,%eax - cmpq $16,%rdx - jb L$cbc_enc_tail - subq $16,%rdx - jmp L$cbc_enc_loop -.p2align 4 -L$cbc_enc_loop: - movups (%rdi),%xmm3 - leaq 16(%rdi),%rdi + movdqu (%r9),%xmm15 + pxor %xmm1,%xmm9 + pxor %xmm1,%xmm15 - movups (%rcx),%xmm0 - movups 16(%rcx),%xmm1 - xorps %xmm0,%xmm3 - leaq 32(%rcx),%rcx - xorps %xmm3,%xmm2 -L$oop_enc1_15: -.byte 102,15,56,220,209 - decl %eax - movups (%rcx),%xmm1 - leaq 16(%rcx),%rcx - jnz L$oop_enc1_15 -.byte 102,15,56,221,209 - movl %r10d,%eax - movq %r11,%rcx - movups %xmm2,0(%rsi) - leaq 16(%rsi),%rsi - subq $16,%rdx - jnc L$cbc_enc_loop - addq $16,%rdx - jnz L$cbc_enc_tail - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - movups %xmm2,(%r8) - pxor %xmm2,%xmm2 - pxor %xmm3,%xmm3 - jmp L$cbc_ret + movl $16+32,%eax + leaq 32(%r11,%r10,1),%rcx + movups 16(%r11),%xmm1 + subq %r10,%rax + movq %rax,%r10 -L$cbc_enc_tail: - movq %rdx,%rcx - xchgq %rdi,%rsi -.long 0x9066A4F3 - movl $16,%ecx - subq %rdx,%rcx - xorl %eax,%eax -.long 0x9066AAF3 - leaq -16(%rdi),%rdi - movl %r10d,%eax - movq %rdi,%rsi - movq %r11,%rcx - xorq %rdx,%rdx - jmp L$cbc_enc_loop + movdqu (%rbx),%xmm10 + movdqu (%rbp),%xmm8 -.p2align 4 -L$cbc_decrypt: - cmpq $16,%rdx - jne L$cbc_decrypt_bulk + testq $1,%r8 + jnz L$ocb_enc_odd + bsfq %r8,%r12 + addq $1,%r8 + shlq $4,%r12 + movdqu (%rbx,%r12,1),%xmm7 + movdqu (%rdi),%xmm2 + leaq 16(%rdi),%rdi + call __ocb_encrypt1 - movdqu (%rdi),%xmm2 - movdqu (%r8),%xmm3 - movdqa %xmm2,%xmm4 - movups (%rcx),%xmm0 - movups 16(%rcx),%xmm1 - leaq 32(%rcx),%rcx - xorps %xmm0,%xmm2 -L$oop_dec1_16: -.byte 102,15,56,222,209 - decl %r10d - movups (%rcx),%xmm1 - leaq 16(%rcx),%rcx - jnz L$oop_dec1_16 -.byte 102,15,56,223,209 - pxor %xmm0,%xmm0 - pxor %xmm1,%xmm1 - movdqu %xmm4,(%r8) - xorps %xmm3,%xmm2 - pxor %xmm3,%xmm3 + movdqa %xmm7,%xmm15 movups %xmm2,(%rsi) - pxor %xmm2,%xmm2 - jmp L$cbc_ret -.p2align 4 -L$cbc_decrypt_bulk: - leaq (%rsp),%rax - pushq %rbp - subq $16,%rsp - andq $-16,%rsp - leaq -8(%rax),%rbp - movups (%r8),%xmm10 - movl %r10d,%eax - cmpq $0x50,%rdx - jbe L$cbc_dec_tail + leaq 16(%rsi),%rsi + subq $1,%rdx + jz L$ocb_enc_done + +L$ocb_enc_odd: + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + leaq 6(%r8),%r8 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + shlq $4,%r12 + shlq $4,%r13 + shlq $4,%r14 - movups (%rcx),%xmm0 + subq $6,%rdx + jc L$ocb_enc_short + jmp L$ocb_enc_grandloop + +.p2align 5 +L$ocb_enc_grandloop: movdqu 0(%rdi),%xmm2 movdqu 16(%rdi),%xmm3 - movdqa %xmm2,%xmm11 movdqu 32(%rdi),%xmm4 - movdqa %xmm3,%xmm12 movdqu 48(%rdi),%xmm5 - movdqa %xmm4,%xmm13 movdqu 64(%rdi),%xmm6 - movdqa %xmm5,%xmm14 movdqu 80(%rdi),%xmm7 - movdqa %xmm6,%xmm15 - movl __gnutls_x86_cpuid_s+4(%rip),%r9d - cmpq $0x70,%rdx - jbe L$cbc_dec_six_or_seven + leaq 96(%rdi),%rdi + + call __ocb_encrypt6 + + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + movups %xmm5,48(%rsi) + movups %xmm6,64(%rsi) + movups %xmm7,80(%rsi) + leaq 96(%rsi),%rsi + subq $6,%rdx + jnc L$ocb_enc_grandloop + +L$ocb_enc_short: + addq $6,%rdx + jz L$ocb_enc_done + + movdqu 0(%rdi),%xmm2 + cmpq $2,%rdx + jb L$ocb_enc_one + movdqu 16(%rdi),%xmm3 + je L$ocb_enc_two + + movdqu 32(%rdi),%xmm4 + cmpq $4,%rdx + jb L$ocb_enc_three + movdqu 48(%rdi),%xmm5 + je L$ocb_enc_four + + movdqu 64(%rdi),%xmm6 + pxor %xmm7,%xmm7 + + call __ocb_encrypt6 + + movdqa %xmm14,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + movups %xmm5,48(%rsi) + movups %xmm6,64(%rsi) + + jmp L$ocb_enc_done - andl $71303168,%r9d - subq $0x50,%rdx - cmpl $4194304,%r9d - je L$cbc_dec_loop6_enter - subq $0x20,%rdx - leaq 112(%rcx),%rcx - jmp L$cbc_dec_loop8_enter .p2align 4 -L$cbc_dec_loop8: - movups %xmm9,(%rsi) - leaq 16(%rsi),%rsi -L$cbc_dec_loop8_enter: - movdqu 96(%rdi),%xmm8 - pxor %xmm0,%xmm2 - movdqu 112(%rdi),%xmm9 - pxor %xmm0,%xmm3 - movups 16-112(%rcx),%xmm1 - pxor %xmm0,%xmm4 - xorq %r11,%r11 - cmpq $0x70,%rdx - pxor %xmm0,%xmm5 - pxor %xmm0,%xmm6 - pxor %xmm0,%xmm7 - pxor %xmm0,%xmm8 +L$ocb_enc_one: + movdqa %xmm10,%xmm7 -.byte 102,15,56,222,209 - pxor %xmm0,%xmm9 - movups 32-112(%rcx),%xmm0 -.byte 102,15,56,222,217 -.byte 102,15,56,222,225 -.byte 102,15,56,222,233 -.byte 102,15,56,222,241 -.byte 102,15,56,222,249 -.byte 102,68,15,56,222,193 - setnc %r11b - shlq $7,%r11 -.byte 102,68,15,56,222,201 - addq %rdi,%r11 - movups 48-112(%rcx),%xmm1 + call __ocb_encrypt1 + + movdqa %xmm7,%xmm15 + movups %xmm2,0(%rsi) + jmp L$ocb_enc_done + +.p2align 4 +L$ocb_enc_two: + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + + call __ocb_encrypt4 + + movdqa %xmm11,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + + jmp L$ocb_enc_done + +.p2align 4 +L$ocb_enc_three: + pxor %xmm5,%xmm5 + + call __ocb_encrypt4 + + movdqa %xmm12,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + + jmp L$ocb_enc_done + +.p2align 4 +L$ocb_enc_four: + call __ocb_encrypt4 + + movdqa %xmm13,%xmm15 + movups %xmm2,0(%rsi) + movups %xmm3,16(%rsi) + movups %xmm4,32(%rsi) + movups %xmm5,48(%rsi) + +L$ocb_enc_done: + pxor %xmm0,%xmm15 + movdqu %xmm8,(%rbp) + movdqu %xmm15,(%r9) + + xorps %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 + pxor %xmm8,%xmm8 + pxor %xmm9,%xmm9 + pxor %xmm10,%xmm10 + pxor %xmm11,%xmm11 + pxor %xmm12,%xmm12 + pxor %xmm13,%xmm13 + pxor %xmm14,%xmm14 + pxor %xmm15,%xmm15 + leaq 40(%rsp),%rax + + movq -40(%rax),%r14 + + movq -32(%rax),%r13 + + movq -24(%rax),%r12 + + movq -16(%rax),%rbp + + movq -8(%rax),%rbx + + leaq (%rax),%rsp + +L$ocb_enc_epilogue: + .byte 0xf3,0xc3 + + + + +.p2align 5 +__ocb_encrypt6: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + movdqa %xmm10,%xmm14 + pxor %xmm15,%xmm10 + movdqu (%rbx,%r14,1),%xmm15 + pxor %xmm10,%xmm11 + pxor %xmm2,%xmm8 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm3,%xmm8 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm4,%xmm8 + pxor %xmm12,%xmm4 + pxor %xmm13,%xmm14 + pxor %xmm5,%xmm8 + pxor %xmm13,%xmm5 + pxor %xmm14,%xmm15 + pxor %xmm6,%xmm8 + pxor %xmm14,%xmm6 + pxor %xmm7,%xmm8 + pxor %xmm15,%xmm7 + movups 32(%r11),%xmm0 + + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + addq $6,%r8 + pxor %xmm9,%xmm10 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 +.byte 102,15,56,220,241 + pxor %xmm9,%xmm13 + pxor %xmm9,%xmm14 +.byte 102,15,56,220,249 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm15 + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 +.byte 102,15,56,220,240 +.byte 102,15,56,220,248 + movups 64(%r11),%xmm0 + shlq $4,%r12 + shlq $4,%r13 + jmp L$ocb_enc_loop6 + +.p2align 5 +L$ocb_enc_loop6: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 +.byte 102,15,56,220,240 +.byte 102,15,56,220,248 + movups -16(%rcx,%rax,1),%xmm0 + jnz L$ocb_enc_loop6 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 +.byte 102,15,56,220,241 +.byte 102,15,56,220,249 + movups 16(%r11),%xmm1 + shlq $4,%r14 + +.byte 102,65,15,56,221,210 + movdqu (%rbx),%xmm10 + movq %r10,%rax +.byte 102,65,15,56,221,219 +.byte 102,65,15,56,221,228 +.byte 102,65,15,56,221,237 +.byte 102,65,15,56,221,246 +.byte 102,65,15,56,221,255 + .byte 0xf3,0xc3 + + + +.p2align 5 +__ocb_encrypt4: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + pxor %xmm15,%xmm10 + pxor %xmm10,%xmm11 + pxor %xmm2,%xmm8 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm3,%xmm8 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm4,%xmm8 + pxor %xmm12,%xmm4 + pxor %xmm5,%xmm8 + pxor %xmm13,%xmm5 + movups 32(%r11),%xmm0 + + pxor %xmm9,%xmm10 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 + pxor %xmm9,%xmm13 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + movups 48(%r11),%xmm1 + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 + movups 64(%r11),%xmm0 + jmp L$ocb_enc_loop4 + +.p2align 5 +L$ocb_enc_loop4: +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,220,208 +.byte 102,15,56,220,216 +.byte 102,15,56,220,224 +.byte 102,15,56,220,232 + movups -16(%rcx,%rax,1),%xmm0 + jnz L$ocb_enc_loop4 + +.byte 102,15,56,220,209 +.byte 102,15,56,220,217 +.byte 102,15,56,220,225 +.byte 102,15,56,220,233 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,65,15,56,221,210 +.byte 102,65,15,56,221,219 +.byte 102,65,15,56,221,228 +.byte 102,65,15,56,221,237 + .byte 0xf3,0xc3 + + + +.p2align 5 +__ocb_encrypt1: + pxor %xmm15,%xmm7 + pxor %xmm9,%xmm7 + pxor %xmm2,%xmm8 + pxor %xmm7,%xmm2 + movups 32(%r11),%xmm0 + +.byte 102,15,56,220,209 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm7 + +.byte 102,15,56,220,208 + movups 64(%r11),%xmm0 + jmp L$ocb_enc_loop1 + +.p2align 5 +L$ocb_enc_loop1: +.byte 102,15,56,220,209 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,220,208 + movups -16(%rcx,%rax,1),%xmm0 + jnz L$ocb_enc_loop1 + +.byte 102,15,56,220,209 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,15,56,221,215 + .byte 0xf3,0xc3 + + +.globl _aesni_ocb_decrypt + +.p2align 5 +_aesni_ocb_decrypt: + + leaq (%rsp),%rax + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + movq 8(%rax),%rbx + movq 8+8(%rax),%rbp + + movl 240(%rcx),%r10d + movq %rcx,%r11 + shll $4,%r10d + movups (%rcx),%xmm9 + movups 16(%rcx,%r10,1),%xmm1 + + movdqu (%r9),%xmm15 + pxor %xmm1,%xmm9 + pxor %xmm1,%xmm15 + + movl $16+32,%eax + leaq 32(%r11,%r10,1),%rcx + movups 16(%r11),%xmm1 + subq %r10,%rax + movq %rax,%r10 + + movdqu (%rbx),%xmm10 + movdqu (%rbp),%xmm8 + + testq $1,%r8 + jnz L$ocb_dec_odd + + bsfq %r8,%r12 + addq $1,%r8 + shlq $4,%r12 + movdqu (%rbx,%r12,1),%xmm7 + movdqu (%rdi),%xmm2 + leaq 16(%rdi),%rdi + + call __ocb_decrypt1 + + movdqa %xmm7,%xmm15 + movups %xmm2,(%rsi) + xorps %xmm2,%xmm8 + leaq 16(%rsi),%rsi + subq $1,%rdx + jz L$ocb_dec_done + +L$ocb_dec_odd: + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + leaq 6(%r8),%r8 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + shlq $4,%r12 + shlq $4,%r13 + shlq $4,%r14 + + subq $6,%rdx + jc L$ocb_dec_short + jmp L$ocb_dec_grandloop + +.p2align 5 +L$ocb_dec_grandloop: + movdqu 0(%rdi),%xmm2 + movdqu 16(%rdi),%xmm3 + movdqu 32(%rdi),%xmm4 + movdqu 48(%rdi),%xmm5 + movdqu 64(%rdi),%xmm6 + movdqu 80(%rdi),%xmm7 + leaq 96(%rdi),%rdi + + call __ocb_decrypt6 + + movups %xmm2,0(%rsi) + pxor %xmm2,%xmm8 + movups %xmm3,16(%rsi) + pxor %xmm3,%xmm8 + movups %xmm4,32(%rsi) + pxor %xmm4,%xmm8 + movups %xmm5,48(%rsi) + pxor %xmm5,%xmm8 + movups %xmm6,64(%rsi) + pxor %xmm6,%xmm8 + movups %xmm7,80(%rsi) + pxor %xmm7,%xmm8 + leaq 96(%rsi),%rsi + subq $6,%rdx + jnc L$ocb_dec_grandloop + +L$ocb_dec_short: + addq $6,%rdx + jz L$ocb_dec_done + + movdqu 0(%rdi),%xmm2 + cmpq $2,%rdx + jb L$ocb_dec_one + movdqu 16(%rdi),%xmm3 + je L$ocb_dec_two + + movdqu 32(%rdi),%xmm4 + cmpq $4,%rdx + jb L$ocb_dec_three + movdqu 48(%rdi),%xmm5 + je L$ocb_dec_four + + movdqu 64(%rdi),%xmm6 + pxor %xmm7,%xmm7 + + call __ocb_decrypt6 + + movdqa %xmm14,%xmm15 + movups %xmm2,0(%rsi) + pxor %xmm2,%xmm8 + movups %xmm3,16(%rsi) + pxor %xmm3,%xmm8 + movups %xmm4,32(%rsi) + pxor %xmm4,%xmm8 + movups %xmm5,48(%rsi) + pxor %xmm5,%xmm8 + movups %xmm6,64(%rsi) + pxor %xmm6,%xmm8 + + jmp L$ocb_dec_done + +.p2align 4 +L$ocb_dec_one: + movdqa %xmm10,%xmm7 + + call __ocb_decrypt1 + + movdqa %xmm7,%xmm15 + movups %xmm2,0(%rsi) + xorps %xmm2,%xmm8 + jmp L$ocb_dec_done + +.p2align 4 +L$ocb_dec_two: + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + + call __ocb_decrypt4 + + movdqa %xmm11,%xmm15 + movups %xmm2,0(%rsi) + xorps %xmm2,%xmm8 + movups %xmm3,16(%rsi) + xorps %xmm3,%xmm8 + + jmp L$ocb_dec_done + +.p2align 4 +L$ocb_dec_three: + pxor %xmm5,%xmm5 + + call __ocb_decrypt4 + + movdqa %xmm12,%xmm15 + movups %xmm2,0(%rsi) + xorps %xmm2,%xmm8 + movups %xmm3,16(%rsi) + xorps %xmm3,%xmm8 + movups %xmm4,32(%rsi) + xorps %xmm4,%xmm8 + + jmp L$ocb_dec_done + +.p2align 4 +L$ocb_dec_four: + call __ocb_decrypt4 + + movdqa %xmm13,%xmm15 + movups %xmm2,0(%rsi) + pxor %xmm2,%xmm8 + movups %xmm3,16(%rsi) + pxor %xmm3,%xmm8 + movups %xmm4,32(%rsi) + pxor %xmm4,%xmm8 + movups %xmm5,48(%rsi) + pxor %xmm5,%xmm8 + +L$ocb_dec_done: + pxor %xmm0,%xmm15 + movdqu %xmm8,(%rbp) + movdqu %xmm15,(%r9) + + xorps %xmm0,%xmm0 + pxor %xmm1,%xmm1 + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + pxor %xmm4,%xmm4 + pxor %xmm5,%xmm5 + pxor %xmm6,%xmm6 + pxor %xmm7,%xmm7 + pxor %xmm8,%xmm8 + pxor %xmm9,%xmm9 + pxor %xmm10,%xmm10 + pxor %xmm11,%xmm11 + pxor %xmm12,%xmm12 + pxor %xmm13,%xmm13 + pxor %xmm14,%xmm14 + pxor %xmm15,%xmm15 + leaq 40(%rsp),%rax + + movq -40(%rax),%r14 + + movq -32(%rax),%r13 + + movq -24(%rax),%r12 + + movq -16(%rax),%rbp + + movq -8(%rax),%rbx + + leaq (%rax),%rsp + +L$ocb_dec_epilogue: + .byte 0xf3,0xc3 + + + + +.p2align 5 +__ocb_decrypt6: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + movdqa %xmm10,%xmm14 + pxor %xmm15,%xmm10 + movdqu (%rbx,%r14,1),%xmm15 + pxor %xmm10,%xmm11 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm12,%xmm4 + pxor %xmm13,%xmm14 + pxor %xmm13,%xmm5 + pxor %xmm14,%xmm15 + pxor %xmm14,%xmm6 + pxor %xmm15,%xmm7 + movups 32(%r11),%xmm0 + + leaq 1(%r8),%r12 + leaq 3(%r8),%r13 + leaq 5(%r8),%r14 + addq $6,%r8 + pxor %xmm9,%xmm10 + bsfq %r12,%r12 + bsfq %r13,%r13 + bsfq %r14,%r14 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 +.byte 102,15,56,222,241 + pxor %xmm9,%xmm13 + pxor %xmm9,%xmm14 +.byte 102,15,56,222,249 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm15 + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 +.byte 102,15,56,222,240 +.byte 102,15,56,222,248 + movups 64(%r11),%xmm0 + shlq $4,%r12 + shlq $4,%r13 + jmp L$ocb_dec_loop6 + +.p2align 5 +L$ocb_dec_loop6: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 +.byte 102,15,56,222,240 +.byte 102,15,56,222,248 + movups -16(%rcx,%rax,1),%xmm0 + jnz L$ocb_dec_loop6 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 + movups 16(%r11),%xmm1 + shlq $4,%r14 + +.byte 102,65,15,56,223,210 + movdqu (%rbx),%xmm10 + movq %r10,%rax +.byte 102,65,15,56,223,219 +.byte 102,65,15,56,223,228 +.byte 102,65,15,56,223,237 +.byte 102,65,15,56,223,246 +.byte 102,65,15,56,223,255 + .byte 0xf3,0xc3 + + + +.p2align 5 +__ocb_decrypt4: + pxor %xmm9,%xmm15 + movdqu (%rbx,%r12,1),%xmm11 + movdqa %xmm10,%xmm12 + movdqu (%rbx,%r13,1),%xmm13 + pxor %xmm15,%xmm10 + pxor %xmm10,%xmm11 + pxor %xmm10,%xmm2 + pxor %xmm11,%xmm12 + pxor %xmm11,%xmm3 + pxor %xmm12,%xmm13 + pxor %xmm12,%xmm4 + pxor %xmm13,%xmm5 + movups 32(%r11),%xmm0 + + pxor %xmm9,%xmm10 + pxor %xmm9,%xmm11 + pxor %xmm9,%xmm12 + pxor %xmm9,%xmm13 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + movups 48(%r11),%xmm1 + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 + movups 64(%r11),%xmm0 + jmp L$ocb_dec_loop4 + +.p2align 5 +L$ocb_dec_loop4: +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,222,208 +.byte 102,15,56,222,216 +.byte 102,15,56,222,224 +.byte 102,15,56,222,232 + movups -16(%rcx,%rax,1),%xmm0 + jnz L$ocb_dec_loop4 + +.byte 102,15,56,222,209 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,65,15,56,223,210 +.byte 102,65,15,56,223,219 +.byte 102,65,15,56,223,228 +.byte 102,65,15,56,223,237 + .byte 0xf3,0xc3 + + + +.p2align 5 +__ocb_decrypt1: + pxor %xmm15,%xmm7 + pxor %xmm9,%xmm7 + pxor %xmm7,%xmm2 + movups 32(%r11),%xmm0 + +.byte 102,15,56,222,209 + movups 48(%r11),%xmm1 + pxor %xmm9,%xmm7 + +.byte 102,15,56,222,208 + movups 64(%r11),%xmm0 + jmp L$ocb_dec_loop1 + +.p2align 5 +L$ocb_dec_loop1: +.byte 102,15,56,222,209 + movups (%rcx,%rax,1),%xmm1 + addq $32,%rax + +.byte 102,15,56,222,208 + movups -16(%rcx,%rax,1),%xmm0 + jnz L$ocb_dec_loop1 + +.byte 102,15,56,222,209 + movups 16(%r11),%xmm1 + movq %r10,%rax + +.byte 102,15,56,223,215 + .byte 0xf3,0xc3 + +.globl _aesni_cbc_encrypt + +.p2align 4 +_aesni_cbc_encrypt: + + testq %rdx,%rdx + jz L$cbc_ret + + movl 240(%rcx),%r10d + movq %rcx,%r11 + testl %r9d,%r9d + jz L$cbc_decrypt + + movups (%r8),%xmm2 + movl %r10d,%eax + cmpq $16,%rdx + jb L$cbc_enc_tail + subq $16,%rdx + jmp L$cbc_enc_loop +.p2align 4 +L$cbc_enc_loop: + movups (%rdi),%xmm3 + leaq 16(%rdi),%rdi + + movups (%rcx),%xmm0 + movups 16(%rcx),%xmm1 + xorps %xmm0,%xmm3 + leaq 32(%rcx),%rcx + xorps %xmm3,%xmm2 +L$oop_enc1_15: +.byte 102,15,56,220,209 + decl %eax + movups (%rcx),%xmm1 + leaq 16(%rcx),%rcx + jnz L$oop_enc1_15 +.byte 102,15,56,221,209 + movl %r10d,%eax + movq %r11,%rcx + movups %xmm2,0(%rsi) + leaq 16(%rsi),%rsi + subq $16,%rdx + jnc L$cbc_enc_loop + addq $16,%rdx + jnz L$cbc_enc_tail + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + movups %xmm2,(%r8) + pxor %xmm2,%xmm2 + pxor %xmm3,%xmm3 + jmp L$cbc_ret + +L$cbc_enc_tail: + movq %rdx,%rcx + xchgq %rdi,%rsi +.long 0x9066A4F3 + movl $16,%ecx + subq %rdx,%rcx + xorl %eax,%eax +.long 0x9066AAF3 + leaq -16(%rdi),%rdi + movl %r10d,%eax + movq %rdi,%rsi + movq %r11,%rcx + xorq %rdx,%rdx + jmp L$cbc_enc_loop + +.p2align 4 +L$cbc_decrypt: + cmpq $16,%rdx + jne L$cbc_decrypt_bulk + + + + movdqu (%rdi),%xmm2 + movdqu (%r8),%xmm3 + movdqa %xmm2,%xmm4 + movups (%rcx),%xmm0 + movups 16(%rcx),%xmm1 + leaq 32(%rcx),%rcx + xorps %xmm0,%xmm2 +L$oop_dec1_16: +.byte 102,15,56,222,209 + decl %r10d + movups (%rcx),%xmm1 + leaq 16(%rcx),%rcx + jnz L$oop_dec1_16 +.byte 102,15,56,223,209 + pxor %xmm0,%xmm0 + pxor %xmm1,%xmm1 + movdqu %xmm4,(%r8) + xorps %xmm3,%xmm2 + pxor %xmm3,%xmm3 + movups %xmm2,(%rsi) + pxor %xmm2,%xmm2 + jmp L$cbc_ret +.p2align 4 +L$cbc_decrypt_bulk: + leaq (%rsp),%r11 + + pushq %rbp + + subq $16,%rsp + andq $-16,%rsp + movq %rcx,%rbp + movups (%r8),%xmm10 + movl %r10d,%eax + cmpq $0x50,%rdx + jbe L$cbc_dec_tail + + movups (%rcx),%xmm0 + movdqu 0(%rdi),%xmm2 + movdqu 16(%rdi),%xmm3 + movdqa %xmm2,%xmm11 + movdqu 32(%rdi),%xmm4 + movdqa %xmm3,%xmm12 + movdqu 48(%rdi),%xmm5 + movdqa %xmm4,%xmm13 + movdqu 64(%rdi),%xmm6 + movdqa %xmm5,%xmm14 + movdqu 80(%rdi),%xmm7 + movdqa %xmm6,%xmm15 + movl __gnutls_x86_cpuid_s+4(%rip),%r9d + cmpq $0x70,%rdx + jbe L$cbc_dec_six_or_seven + + andl $71303168,%r9d + subq $0x50,%rdx + cmpl $4194304,%r9d + je L$cbc_dec_loop6_enter + subq $0x20,%rdx + leaq 112(%rcx),%rcx + jmp L$cbc_dec_loop8_enter +.p2align 4 +L$cbc_dec_loop8: + movups %xmm9,(%rsi) + leaq 16(%rsi),%rsi +L$cbc_dec_loop8_enter: + movdqu 96(%rdi),%xmm8 + pxor %xmm0,%xmm2 + movdqu 112(%rdi),%xmm9 + pxor %xmm0,%xmm3 + movups 16-112(%rcx),%xmm1 + pxor %xmm0,%xmm4 + movq $-1,%rbp + cmpq $0x70,%rdx + pxor %xmm0,%xmm5 + pxor %xmm0,%xmm6 + pxor %xmm0,%xmm7 + pxor %xmm0,%xmm8 + +.byte 102,15,56,222,209 + pxor %xmm0,%xmm9 + movups 32-112(%rcx),%xmm0 +.byte 102,15,56,222,217 +.byte 102,15,56,222,225 +.byte 102,15,56,222,233 +.byte 102,15,56,222,241 +.byte 102,15,56,222,249 +.byte 102,68,15,56,222,193 + adcq $0,%rbp + andq $128,%rbp +.byte 102,68,15,56,222,201 + addq %rdi,%rbp + movups 48-112(%rcx),%xmm1 .byte 102,15,56,222,208 .byte 102,15,56,222,216 .byte 102,15,56,222,224 @@ -2867,18 +3753,18 @@ L$cbc_dec_done: movdqu 112(%rdi),%xmm0 .byte 102,65,15,56,223,228 leaq 128(%rdi),%rdi - movdqu 0(%r11),%xmm11 + movdqu 0(%rbp),%xmm11 .byte 102,65,15,56,223,237 .byte 102,65,15,56,223,246 - movdqu 16(%r11),%xmm12 - movdqu 32(%r11),%xmm13 + movdqu 16(%rbp),%xmm12 + movdqu 32(%rbp),%xmm13 .byte 102,65,15,56,223,255 .byte 102,68,15,56,223,193 - movdqu 48(%r11),%xmm14 - movdqu 64(%r11),%xmm15 + movdqu 48(%rbp),%xmm14 + movdqu 64(%rbp),%xmm15 .byte 102,69,15,56,223,202 movdqa %xmm0,%xmm10 - movdqu 80(%r11),%xmm1 + movdqu 80(%rbp),%xmm1 movups -112(%rcx),%xmm0 movups %xmm2,(%rsi) @@ -2997,7 +3883,7 @@ L$cbc_dec_loop6_enter: pxor %xmm13,%xmm5 movdqu %xmm4,32(%rsi) pxor %xmm14,%xmm6 - movq %r11,%rcx + movq %rbp,%rcx movdqu %xmm5,48(%rsi) pxor %xmm15,%xmm7 movl %r10d,%eax @@ -3150,16 +4036,21 @@ L$cbc_dec_tail_partial: L$cbc_dec_ret: xorps %xmm0,%xmm0 pxor %xmm1,%xmm1 - leaq (%rbp),%rsp - popq %rbp + movq -8(%r11),%rbp + + leaq (%r11),%rsp + L$cbc_ret: .byte 0xf3,0xc3 + .globl _aesni_set_decrypt_key .p2align 4 _aesni_set_decrypt_key: + .byte 0x48,0x83,0xEC,0x08 + call __aesni_set_encrypt_key shll $4,%esi testl %eax,%eax @@ -3192,7 +4083,9 @@ L$dec_key_inverse: pxor %xmm0,%xmm0 L$dec_key_ret: addq $8,%rsp + .byte 0xf3,0xc3 + L$SEH_end_set_decrypt_key: .globl _aesni_set_encrypt_key @@ -3200,7 +4093,9 @@ L$SEH_end_set_decrypt_key: .p2align 4 _aesni_set_encrypt_key: __aesni_set_encrypt_key: + .byte 0x48,0x83,0xEC,0x08 + movq $-1,%rax testq %rdi,%rdi jz L$enc_key_ret @@ -3493,7 +4388,9 @@ L$enc_key_ret: pxor %xmm4,%xmm4 pxor %xmm5,%xmm5 addq $8,%rsp + .byte 0xf3,0xc3 + L$SEH_end_set_encrypt_key: .p2align 4 diff --git a/lib/accelerated/x86/macosx/cpuid-x86.s b/lib/accelerated/x86/macosx/cpuid-x86.s deleted file mode 100644 index beacbd8525..0000000000 --- a/lib/accelerated/x86/macosx/cpuid-x86.s +++ /dev/null @@ -1,70 +0,0 @@ -# -# Copyright (C) 2011-2013 Free Software Foundation, Inc. -# Copyright (C) 2013 Nikos Mavrogiannopoulos -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# The GnuTLS is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public License -# as published by the Free Software Foundation; either version 2.1 of -# the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see . -# -# *** This file is auto-generated *** -# -.file "devel/perlasm/cpuid-x86.s" -.text -.globl _gnutls_cpuid -.align 4 -_gnutls_cpuid: -L_gnutls_cpuid_begin: - pushl %ebp - movl %esp,%ebp - subl $12,%esp - movl %ebx,(%esp) - movl 8(%ebp),%eax - movl %esi,4(%esp) - movl %edi,8(%esp) - pushl %ebx - .byte 0x0f,0xa2 - movl %ebx,%edi - popl %ebx - movl %edx,%esi - movl 12(%ebp),%edx - movl %eax,(%edx) - movl 16(%ebp),%eax - movl %edi,(%eax) - movl 20(%ebp),%eax - movl %ecx,(%eax) - movl 24(%ebp),%eax - movl %esi,(%eax) - movl (%esp),%ebx - movl 4(%esp),%esi - movl 8(%esp),%edi - movl %ebp,%esp - popl %ebp - ret -.globl _gnutls_have_cpuid -.align 4 -_gnutls_have_cpuid: -L_gnutls_have_cpuid_begin: - pushfl - popl %eax - orl $2097152,%eax - pushl %eax - popfl - pushfl - popl %eax - andl $2097152,%eax - ret -.byte 67,80,85,73,68,32,102,111,114,32,120,56,54,0 - diff --git a/lib/accelerated/x86/macosx/cpuid-x86_64.s b/lib/accelerated/x86/macosx/cpuid-x86_64.s deleted file mode 100644 index 339883ff3d..0000000000 --- a/lib/accelerated/x86/macosx/cpuid-x86_64.s +++ /dev/null @@ -1,58 +0,0 @@ -# -# Copyright (C) 2011-2013 Free Software Foundation, Inc. -# Copyright (C) 2013 Nikos Mavrogiannopoulos -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# The GnuTLS is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public License -# as published by the Free Software Foundation; either version 2.1 of -# the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see . -# -# *** This file is auto-generated *** -# -.text -.globl _gnutls_cpuid - -.p2align 4 -_gnutls_cpuid: - pushq %rbp - movq %rsp,%rbp - pushq %rbx - movl %edi,-12(%rbp) - movq %rsi,-24(%rbp) - movq %rdx,-32(%rbp) - movq %rcx,-40(%rbp) - movq %r8,-48(%rbp) - movl -12(%rbp),%eax - movl %eax,-60(%rbp) - movl -60(%rbp),%eax - cpuid - movl %edx,-56(%rbp) - movl %ecx,%esi - movl %eax,-52(%rbp) - movq -24(%rbp),%rax - movl -52(%rbp),%edx - movl %edx,(%rax) - movq -32(%rbp),%rax - movl %ebx,(%rax) - movq -40(%rbp),%rax - movl %esi,(%rax) - movq -48(%rbp),%rax - movl -56(%rbp),%ecx - movl %ecx,(%rax) - popq %rbx - leave - .byte 0xf3,0xc3 - - diff --git a/lib/accelerated/x86/macosx/ghash-x86_64.s b/lib/accelerated/x86/macosx/ghash-x86_64.s index 8fe772fd35..5fd3216755 100644 --- a/lib/accelerated/x86/macosx/ghash-x86_64.s +++ b/lib/accelerated/x86/macosx/ghash-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -44,9 +44,21 @@ .p2align 4 _gcm_gmult_4bit: + pushq %rbx + pushq %rbp + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + subq $280,%rsp + L$gmult_prologue: movzbq 15(%rdi),%r8 @@ -123,22 +135,35 @@ L$break1: movq %r8,8(%rdi) movq %r9,(%rdi) - movq 16(%rsp),%rbx - leaq 24(%rsp),%rsp + leaq 280+48(%rsp),%rsi + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + L$gmult_epilogue: .byte 0xf3,0xc3 + .globl _gcm_ghash_4bit .p2align 4 _gcm_ghash_4bit: + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + subq $280,%rsp + L$ghash_prologue: movq %rdx,%r14 movq %rcx,%r15 @@ -683,21 +708,31 @@ L$outer_loop: movq %r8,8(%rdi) movq %r9,(%rdi) - leaq 280(%rsp),%rsi - movq 0(%rsi),%r15 - movq 8(%rsi),%r14 - movq 16(%rsi),%r13 - movq 24(%rsi),%r12 - movq 32(%rsi),%rbp - movq 40(%rsi),%rbx - leaq 48(%rsi),%rsp + leaq 280+48(%rsp),%rsi + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq 0(%rsi),%rsp + L$ghash_epilogue: .byte 0xf3,0xc3 + .globl _gcm_init_clmul .p2align 4 _gcm_init_clmul: + L$_init_clmul: movdqu (%rsi),%xmm2 pshufd $78,%xmm2,%xmm2 @@ -850,10 +885,12 @@ L$_init_clmul: movdqu %xmm4,80(%rdi) .byte 0xf3,0xc3 + .globl _gcm_gmult_clmul .p2align 4 _gcm_gmult_clmul: + L$_gmult_clmul: movdqu (%rdi),%xmm0 movdqa L$bswap_mask(%rip),%xmm5 @@ -901,10 +938,12 @@ L$_gmult_clmul: movdqu %xmm0,(%rdi) .byte 0xf3,0xc3 + .globl _gcm_ghash_clmul .p2align 5 _gcm_ghash_clmul: + L$_ghash_clmul: movdqa L$bswap_mask(%rip),%xmm10 @@ -1284,10 +1323,12 @@ L$done: movdqu %xmm0,(%rdi) .byte 0xf3,0xc3 + .globl _gcm_init_avx .p2align 5 _gcm_init_avx: + vzeroupper vmovdqu (%rsi),%xmm2 @@ -1391,16 +1432,20 @@ L$init_start_avx: vzeroupper .byte 0xf3,0xc3 + .globl _gcm_gmult_avx .p2align 5 _gcm_gmult_avx: + jmp L$_gmult_clmul + .globl _gcm_ghash_avx .p2align 5 _gcm_ghash_avx: + vzeroupper vmovdqu (%rdi),%xmm10 @@ -1773,6 +1818,7 @@ L$tail_no_xor_avx: vzeroupper .byte 0xf3,0xc3 + .p2align 6 L$bswap_mask: .byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 diff --git a/lib/accelerated/x86/macosx/sha1-ssse3-x86.s b/lib/accelerated/x86/macosx/sha1-ssse3-x86.s index 8e01010ce3..985d4af8db 100644 --- a/lib/accelerated/x86/macosx/sha1-ssse3-x86.s +++ b/lib/accelerated/x86/macosx/sha1-ssse3-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "sha1-586.s" .text .globl _sha1_block_data_order .align 4 diff --git a/lib/accelerated/x86/macosx/sha1-ssse3-x86_64.s b/lib/accelerated/x86/macosx/sha1-ssse3-x86_64.s index 79c10de2ed..a576acc25f 100644 --- a/lib/accelerated/x86/macosx/sha1-ssse3-x86_64.s +++ b/lib/accelerated/x86/macosx/sha1-ssse3-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -44,25 +44,45 @@ .p2align 4 _sha1_block_data_order: + movl __gnutls_x86_cpuid_s+0(%rip),%r9d movl __gnutls_x86_cpuid_s+4(%rip),%r8d + movl __gnutls_x86_cpuid_s+8(%rip),%r10d testl $512,%r8d jz L$ialu + testl $536870912,%r10d + jnz _shaext_shortcut + andl $296,%r10d + cmpl $296,%r10d + je _avx2_shortcut + andl $268435456,%r8d + andl $1073741824,%r9d + orl %r9d,%r8d + cmpl $1342177280,%r8d + je _avx_shortcut jmp _ssse3_shortcut .p2align 4 L$ialu: + movq %rsp,%rax + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 - movq %rsp,%r11 + + pushq %r14 + movq %rdi,%r8 subq $72,%rsp movq %rsi,%r9 andq $-64,%rsp movq %rdx,%r10 - movq %r11,64(%rsp) + movq %rax,64(%rsp) + L$prologue: movl 0(%r8),%esi @@ -76,1230 +96,1168 @@ L$prologue: L$loop: movl 0(%r9),%edx bswapl %edx - movl %edx,0(%rsp) - movl %r11d,%eax movl 4(%r9),%ebp + movl %r12d,%eax + movl %edx,0(%rsp) movl %esi,%ecx - xorl %r12d,%eax bswapl %ebp + xorl %r11d,%eax roll $5,%ecx - leal 1518500249(%rdx,%r13,1),%r13d andl %edi,%eax - movl %ebp,4(%rsp) + leal 1518500249(%rdx,%r13,1),%r13d addl %ecx,%r13d xorl %r12d,%eax roll $30,%edi addl %eax,%r13d - movl %edi,%eax - movl 8(%r9),%edx + movl 8(%r9),%r14d + movl %r11d,%eax + movl %ebp,4(%rsp) movl %r13d,%ecx - xorl %r11d,%eax - bswapl %edx + bswapl %r14d + xorl %edi,%eax roll $5,%ecx - leal 1518500249(%rbp,%r12,1),%r12d andl %esi,%eax - movl %edx,8(%rsp) + leal 1518500249(%rbp,%r12,1),%r12d addl %ecx,%r12d xorl %r11d,%eax roll $30,%esi addl %eax,%r12d - movl %esi,%eax - movl 12(%r9),%ebp + movl 12(%r9),%edx + movl %edi,%eax + movl %r14d,8(%rsp) movl %r12d,%ecx - xorl %edi,%eax - bswapl %ebp + bswapl %edx + xorl %esi,%eax roll $5,%ecx - leal 1518500249(%rdx,%r11,1),%r11d andl %r13d,%eax - movl %ebp,12(%rsp) + leal 1518500249(%r14,%r11,1),%r11d addl %ecx,%r11d xorl %edi,%eax roll $30,%r13d addl %eax,%r11d - movl %r13d,%eax - movl 16(%r9),%edx + movl 16(%r9),%ebp + movl %esi,%eax + movl %edx,12(%rsp) movl %r11d,%ecx - xorl %esi,%eax - bswapl %edx + bswapl %ebp + xorl %r13d,%eax roll $5,%ecx - leal 1518500249(%rbp,%rdi,1),%edi andl %r12d,%eax - movl %edx,16(%rsp) + leal 1518500249(%rdx,%rdi,1),%edi addl %ecx,%edi xorl %esi,%eax roll $30,%r12d addl %eax,%edi - movl %r12d,%eax - movl 20(%r9),%ebp + movl 20(%r9),%r14d + movl %r13d,%eax + movl %ebp,16(%rsp) movl %edi,%ecx - xorl %r13d,%eax - bswapl %ebp + bswapl %r14d + xorl %r12d,%eax roll $5,%ecx - leal 1518500249(%rdx,%rsi,1),%esi andl %r11d,%eax - movl %ebp,20(%rsp) + leal 1518500249(%rbp,%rsi,1),%esi addl %ecx,%esi xorl %r13d,%eax roll $30,%r11d addl %eax,%esi - movl %r11d,%eax movl 24(%r9),%edx + movl %r12d,%eax + movl %r14d,20(%rsp) movl %esi,%ecx - xorl %r12d,%eax bswapl %edx + xorl %r11d,%eax roll $5,%ecx - leal 1518500249(%rbp,%r13,1),%r13d andl %edi,%eax - movl %edx,24(%rsp) + leal 1518500249(%r14,%r13,1),%r13d addl %ecx,%r13d xorl %r12d,%eax roll $30,%edi addl %eax,%r13d - movl %edi,%eax movl 28(%r9),%ebp + movl %r11d,%eax + movl %edx,24(%rsp) movl %r13d,%ecx - xorl %r11d,%eax bswapl %ebp + xorl %edi,%eax roll $5,%ecx - leal 1518500249(%rdx,%r12,1),%r12d andl %esi,%eax - movl %ebp,28(%rsp) + leal 1518500249(%rdx,%r12,1),%r12d addl %ecx,%r12d xorl %r11d,%eax roll $30,%esi addl %eax,%r12d - movl %esi,%eax - movl 32(%r9),%edx + movl 32(%r9),%r14d + movl %edi,%eax + movl %ebp,28(%rsp) movl %r12d,%ecx - xorl %edi,%eax - bswapl %edx + bswapl %r14d + xorl %esi,%eax roll $5,%ecx - leal 1518500249(%rbp,%r11,1),%r11d andl %r13d,%eax - movl %edx,32(%rsp) + leal 1518500249(%rbp,%r11,1),%r11d addl %ecx,%r11d xorl %edi,%eax roll $30,%r13d addl %eax,%r11d - movl %r13d,%eax - movl 36(%r9),%ebp + movl 36(%r9),%edx + movl %esi,%eax + movl %r14d,32(%rsp) movl %r11d,%ecx - xorl %esi,%eax - bswapl %ebp + bswapl %edx + xorl %r13d,%eax roll $5,%ecx - leal 1518500249(%rdx,%rdi,1),%edi andl %r12d,%eax - movl %ebp,36(%rsp) + leal 1518500249(%r14,%rdi,1),%edi addl %ecx,%edi xorl %esi,%eax roll $30,%r12d addl %eax,%edi - movl %r12d,%eax - movl 40(%r9),%edx + movl 40(%r9),%ebp + movl %r13d,%eax + movl %edx,36(%rsp) movl %edi,%ecx - xorl %r13d,%eax - bswapl %edx + bswapl %ebp + xorl %r12d,%eax roll $5,%ecx - leal 1518500249(%rbp,%rsi,1),%esi andl %r11d,%eax - movl %edx,40(%rsp) + leal 1518500249(%rdx,%rsi,1),%esi addl %ecx,%esi xorl %r13d,%eax roll $30,%r11d addl %eax,%esi - movl %r11d,%eax - movl 44(%r9),%ebp + movl 44(%r9),%r14d + movl %r12d,%eax + movl %ebp,40(%rsp) movl %esi,%ecx - xorl %r12d,%eax - bswapl %ebp + bswapl %r14d + xorl %r11d,%eax roll $5,%ecx - leal 1518500249(%rdx,%r13,1),%r13d andl %edi,%eax - movl %ebp,44(%rsp) + leal 1518500249(%rbp,%r13,1),%r13d addl %ecx,%r13d xorl %r12d,%eax roll $30,%edi addl %eax,%r13d - movl %edi,%eax movl 48(%r9),%edx + movl %r11d,%eax + movl %r14d,44(%rsp) movl %r13d,%ecx - xorl %r11d,%eax bswapl %edx + xorl %edi,%eax roll $5,%ecx - leal 1518500249(%rbp,%r12,1),%r12d andl %esi,%eax - movl %edx,48(%rsp) + leal 1518500249(%r14,%r12,1),%r12d addl %ecx,%r12d xorl %r11d,%eax roll $30,%esi addl %eax,%r12d - movl %esi,%eax movl 52(%r9),%ebp + movl %edi,%eax + movl %edx,48(%rsp) movl %r12d,%ecx - xorl %edi,%eax bswapl %ebp + xorl %esi,%eax roll $5,%ecx - leal 1518500249(%rdx,%r11,1),%r11d andl %r13d,%eax - movl %ebp,52(%rsp) + leal 1518500249(%rdx,%r11,1),%r11d addl %ecx,%r11d xorl %edi,%eax roll $30,%r13d addl %eax,%r11d - movl %r13d,%eax - movl 56(%r9),%edx + movl 56(%r9),%r14d + movl %esi,%eax + movl %ebp,52(%rsp) movl %r11d,%ecx - xorl %esi,%eax - bswapl %edx + bswapl %r14d + xorl %r13d,%eax roll $5,%ecx - leal 1518500249(%rbp,%rdi,1),%edi andl %r12d,%eax - movl %edx,56(%rsp) + leal 1518500249(%rbp,%rdi,1),%edi addl %ecx,%edi xorl %esi,%eax roll $30,%r12d addl %eax,%edi - movl %r12d,%eax - movl 60(%r9),%ebp + movl 60(%r9),%edx + movl %r13d,%eax + movl %r14d,56(%rsp) movl %edi,%ecx - xorl %r13d,%eax - bswapl %ebp + bswapl %edx + xorl %r12d,%eax roll $5,%ecx - leal 1518500249(%rdx,%rsi,1),%esi andl %r11d,%eax - movl %ebp,60(%rsp) + leal 1518500249(%r14,%rsi,1),%esi addl %ecx,%esi xorl %r13d,%eax roll $30,%r11d addl %eax,%esi - movl 0(%rsp),%edx - movl %r11d,%eax + xorl 0(%rsp),%ebp + movl %r12d,%eax + movl %edx,60(%rsp) movl %esi,%ecx - xorl 8(%rsp),%edx - xorl %r12d,%eax + xorl 8(%rsp),%ebp + xorl %r11d,%eax roll $5,%ecx - xorl 32(%rsp),%edx + xorl 32(%rsp),%ebp andl %edi,%eax - leal 1518500249(%rbp,%r13,1),%r13d - xorl 52(%rsp),%edx + leal 1518500249(%rdx,%r13,1),%r13d + roll $30,%edi xorl %r12d,%eax - roll $1,%edx addl %ecx,%r13d - roll $30,%edi - movl %edx,0(%rsp) + roll $1,%ebp addl %eax,%r13d - movl 4(%rsp),%ebp - movl %edi,%eax + xorl 4(%rsp),%r14d + movl %r11d,%eax + movl %ebp,0(%rsp) movl %r13d,%ecx - xorl 12(%rsp),%ebp - xorl %r11d,%eax + xorl 12(%rsp),%r14d + xorl %edi,%eax roll $5,%ecx - xorl 36(%rsp),%ebp + xorl 36(%rsp),%r14d andl %esi,%eax - leal 1518500249(%rdx,%r12,1),%r12d - xorl 56(%rsp),%ebp + leal 1518500249(%rbp,%r12,1),%r12d + roll $30,%esi xorl %r11d,%eax - roll $1,%ebp addl %ecx,%r12d - roll $30,%esi - movl %ebp,4(%rsp) + roll $1,%r14d addl %eax,%r12d - movl 8(%rsp),%edx - movl %esi,%eax + xorl 8(%rsp),%edx + movl %edi,%eax + movl %r14d,4(%rsp) movl %r12d,%ecx xorl 16(%rsp),%edx - xorl %edi,%eax + xorl %esi,%eax roll $5,%ecx xorl 40(%rsp),%edx andl %r13d,%eax - leal 1518500249(%rbp,%r11,1),%r11d - xorl 60(%rsp),%edx + leal 1518500249(%r14,%r11,1),%r11d + roll $30,%r13d xorl %edi,%eax - roll $1,%edx addl %ecx,%r11d - roll $30,%r13d - movl %edx,8(%rsp) + roll $1,%edx addl %eax,%r11d - movl 12(%rsp),%ebp - movl %r13d,%eax + xorl 12(%rsp),%ebp + movl %esi,%eax + movl %edx,8(%rsp) movl %r11d,%ecx xorl 20(%rsp),%ebp - xorl %esi,%eax + xorl %r13d,%eax roll $5,%ecx xorl 44(%rsp),%ebp andl %r12d,%eax leal 1518500249(%rdx,%rdi,1),%edi - xorl 0(%rsp),%ebp + roll $30,%r12d xorl %esi,%eax - roll $1,%ebp addl %ecx,%edi - roll $30,%r12d - movl %ebp,12(%rsp) + roll $1,%ebp addl %eax,%edi - movl 16(%rsp),%edx - movl %r12d,%eax + xorl 16(%rsp),%r14d + movl %r13d,%eax + movl %ebp,12(%rsp) movl %edi,%ecx - xorl 24(%rsp),%edx - xorl %r13d,%eax + xorl 24(%rsp),%r14d + xorl %r12d,%eax roll $5,%ecx - xorl 48(%rsp),%edx + xorl 48(%rsp),%r14d andl %r11d,%eax leal 1518500249(%rbp,%rsi,1),%esi - xorl 4(%rsp),%edx + roll $30,%r11d xorl %r13d,%eax - roll $1,%edx addl %ecx,%esi - roll $30,%r11d - movl %edx,16(%rsp) + roll $1,%r14d addl %eax,%esi - movl 20(%rsp),%ebp - movl %r11d,%eax + xorl 20(%rsp),%edx + movl %edi,%eax + movl %r14d,16(%rsp) movl %esi,%ecx - xorl 28(%rsp),%ebp - xorl %edi,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r13,1),%r13d - xorl 52(%rsp),%ebp + xorl 28(%rsp),%edx xorl %r12d,%eax + roll $5,%ecx + xorl 52(%rsp),%edx + leal 1859775393(%r14,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 8(%rsp),%ebp roll $30,%edi addl %eax,%r13d - roll $1,%ebp - movl %ebp,20(%rsp) - movl 24(%rsp),%edx - movl %edi,%eax + roll $1,%edx + xorl 24(%rsp),%ebp + movl %esi,%eax + movl %edx,20(%rsp) movl %r13d,%ecx - xorl 32(%rsp),%edx - xorl %esi,%eax - roll $5,%ecx - leal 1859775393(%rbp,%r12,1),%r12d - xorl 56(%rsp),%edx + xorl 32(%rsp),%ebp xorl %r11d,%eax + roll $5,%ecx + xorl 56(%rsp),%ebp + leal 1859775393(%rdx,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 12(%rsp),%edx roll $30,%esi addl %eax,%r12d - roll $1,%edx - movl %edx,24(%rsp) - movl 28(%rsp),%ebp - movl %esi,%eax + roll $1,%ebp + xorl 28(%rsp),%r14d + movl %r13d,%eax + movl %ebp,24(%rsp) movl %r12d,%ecx - xorl 36(%rsp),%ebp - xorl %r13d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r11,1),%r11d - xorl 60(%rsp),%ebp + xorl 36(%rsp),%r14d xorl %edi,%eax + roll $5,%ecx + xorl 60(%rsp),%r14d + leal 1859775393(%rbp,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 16(%rsp),%ebp roll $30,%r13d addl %eax,%r11d - roll $1,%ebp - movl %ebp,28(%rsp) - movl 32(%rsp),%edx - movl %r13d,%eax + roll $1,%r14d + xorl 32(%rsp),%edx + movl %r12d,%eax + movl %r14d,28(%rsp) movl %r11d,%ecx xorl 40(%rsp),%edx - xorl %r12d,%eax + xorl %esi,%eax roll $5,%ecx - leal 1859775393(%rbp,%rdi,1),%edi xorl 0(%rsp),%edx - xorl %esi,%eax + leal 1859775393(%r14,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 20(%rsp),%edx roll $30,%r12d addl %eax,%edi roll $1,%edx + xorl 36(%rsp),%ebp + movl %r11d,%eax movl %edx,32(%rsp) - movl 36(%rsp),%ebp - movl %r12d,%eax movl %edi,%ecx xorl 44(%rsp),%ebp - xorl %r11d,%eax + xorl %r13d,%eax roll $5,%ecx - leal 1859775393(%rdx,%rsi,1),%esi xorl 4(%rsp),%ebp - xorl %r13d,%eax + leal 1859775393(%rdx,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 24(%rsp),%ebp roll $30,%r11d addl %eax,%esi roll $1,%ebp + xorl 40(%rsp),%r14d + movl %edi,%eax movl %ebp,36(%rsp) - movl 40(%rsp),%edx - movl %r11d,%eax movl %esi,%ecx - xorl 48(%rsp),%edx - xorl %edi,%eax + xorl 48(%rsp),%r14d + xorl %r12d,%eax roll $5,%ecx + xorl 8(%rsp),%r14d leal 1859775393(%rbp,%r13,1),%r13d - xorl 8(%rsp),%edx - xorl %r12d,%eax + xorl %r11d,%eax addl %ecx,%r13d - xorl 28(%rsp),%edx roll $30,%edi addl %eax,%r13d - roll $1,%edx - movl %edx,40(%rsp) - movl 44(%rsp),%ebp - movl %edi,%eax + roll $1,%r14d + xorl 44(%rsp),%edx + movl %esi,%eax + movl %r14d,40(%rsp) movl %r13d,%ecx - xorl 52(%rsp),%ebp - xorl %esi,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r12,1),%r12d - xorl 12(%rsp),%ebp + xorl 52(%rsp),%edx xorl %r11d,%eax + roll $5,%ecx + xorl 12(%rsp),%edx + leal 1859775393(%r14,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 32(%rsp),%ebp roll $30,%esi addl %eax,%r12d - roll $1,%ebp - movl %ebp,44(%rsp) - movl 48(%rsp),%edx - movl %esi,%eax + roll $1,%edx + xorl 48(%rsp),%ebp + movl %r13d,%eax + movl %edx,44(%rsp) movl %r12d,%ecx - xorl 56(%rsp),%edx - xorl %r13d,%eax - roll $5,%ecx - leal 1859775393(%rbp,%r11,1),%r11d - xorl 16(%rsp),%edx + xorl 56(%rsp),%ebp xorl %edi,%eax + roll $5,%ecx + xorl 16(%rsp),%ebp + leal 1859775393(%rdx,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 36(%rsp),%edx roll $30,%r13d addl %eax,%r11d - roll $1,%edx - movl %edx,48(%rsp) - movl 52(%rsp),%ebp - movl %r13d,%eax + roll $1,%ebp + xorl 52(%rsp),%r14d + movl %r12d,%eax + movl %ebp,48(%rsp) movl %r11d,%ecx - xorl 60(%rsp),%ebp - xorl %r12d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%rdi,1),%edi - xorl 20(%rsp),%ebp + xorl 60(%rsp),%r14d xorl %esi,%eax + roll $5,%ecx + xorl 20(%rsp),%r14d + leal 1859775393(%rbp,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 40(%rsp),%ebp roll $30,%r12d addl %eax,%edi - roll $1,%ebp - movl %ebp,52(%rsp) - movl 56(%rsp),%edx - movl %r12d,%eax + roll $1,%r14d + xorl 56(%rsp),%edx + movl %r11d,%eax + movl %r14d,52(%rsp) movl %edi,%ecx xorl 0(%rsp),%edx - xorl %r11d,%eax + xorl %r13d,%eax roll $5,%ecx - leal 1859775393(%rbp,%rsi,1),%esi xorl 24(%rsp),%edx - xorl %r13d,%eax + leal 1859775393(%r14,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 44(%rsp),%edx roll $30,%r11d addl %eax,%esi roll $1,%edx + xorl 60(%rsp),%ebp + movl %edi,%eax movl %edx,56(%rsp) - movl 60(%rsp),%ebp - movl %r11d,%eax movl %esi,%ecx xorl 4(%rsp),%ebp - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal 1859775393(%rdx,%r13,1),%r13d xorl 28(%rsp),%ebp - xorl %r12d,%eax + leal 1859775393(%rdx,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 48(%rsp),%ebp roll $30,%edi addl %eax,%r13d roll $1,%ebp + xorl 0(%rsp),%r14d + movl %esi,%eax movl %ebp,60(%rsp) - movl 0(%rsp),%edx - movl %edi,%eax movl %r13d,%ecx - xorl 8(%rsp),%edx - xorl %esi,%eax + xorl 8(%rsp),%r14d + xorl %r11d,%eax roll $5,%ecx + xorl 32(%rsp),%r14d leal 1859775393(%rbp,%r12,1),%r12d - xorl 32(%rsp),%edx - xorl %r11d,%eax + xorl %edi,%eax addl %ecx,%r12d - xorl 52(%rsp),%edx roll $30,%esi addl %eax,%r12d - roll $1,%edx - movl %edx,0(%rsp) - movl 4(%rsp),%ebp - movl %esi,%eax + roll $1,%r14d + xorl 4(%rsp),%edx + movl %r13d,%eax + movl %r14d,0(%rsp) movl %r12d,%ecx - xorl 12(%rsp),%ebp - xorl %r13d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%r11,1),%r11d - xorl 36(%rsp),%ebp + xorl 12(%rsp),%edx xorl %edi,%eax + roll $5,%ecx + xorl 36(%rsp),%edx + leal 1859775393(%r14,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 56(%rsp),%ebp roll $30,%r13d addl %eax,%r11d - roll $1,%ebp - movl %ebp,4(%rsp) - movl 8(%rsp),%edx - movl %r13d,%eax + roll $1,%edx + xorl 8(%rsp),%ebp + movl %r12d,%eax + movl %edx,4(%rsp) movl %r11d,%ecx - xorl 16(%rsp),%edx - xorl %r12d,%eax - roll $5,%ecx - leal 1859775393(%rbp,%rdi,1),%edi - xorl 40(%rsp),%edx + xorl 16(%rsp),%ebp xorl %esi,%eax + roll $5,%ecx + xorl 40(%rsp),%ebp + leal 1859775393(%rdx,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 60(%rsp),%edx roll $30,%r12d addl %eax,%edi - roll $1,%edx - movl %edx,8(%rsp) - movl 12(%rsp),%ebp - movl %r12d,%eax + roll $1,%ebp + xorl 12(%rsp),%r14d + movl %r11d,%eax + movl %ebp,8(%rsp) movl %edi,%ecx - xorl 20(%rsp),%ebp - xorl %r11d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%rsi,1),%esi - xorl 44(%rsp),%ebp + xorl 20(%rsp),%r14d xorl %r13d,%eax + roll $5,%ecx + xorl 44(%rsp),%r14d + leal 1859775393(%rbp,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 0(%rsp),%ebp roll $30,%r11d addl %eax,%esi - roll $1,%ebp - movl %ebp,12(%rsp) - movl 16(%rsp),%edx - movl %r11d,%eax + roll $1,%r14d + xorl 16(%rsp),%edx + movl %edi,%eax + movl %r14d,12(%rsp) movl %esi,%ecx xorl 24(%rsp),%edx - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal 1859775393(%rbp,%r13,1),%r13d xorl 48(%rsp),%edx - xorl %r12d,%eax + leal 1859775393(%r14,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 4(%rsp),%edx roll $30,%edi addl %eax,%r13d roll $1,%edx + xorl 20(%rsp),%ebp + movl %esi,%eax movl %edx,16(%rsp) - movl 20(%rsp),%ebp - movl %edi,%eax movl %r13d,%ecx xorl 28(%rsp),%ebp - xorl %esi,%eax + xorl %r11d,%eax roll $5,%ecx - leal 1859775393(%rdx,%r12,1),%r12d xorl 52(%rsp),%ebp - xorl %r11d,%eax + leal 1859775393(%rdx,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 8(%rsp),%ebp roll $30,%esi addl %eax,%r12d roll $1,%ebp + xorl 24(%rsp),%r14d + movl %r13d,%eax movl %ebp,20(%rsp) - movl 24(%rsp),%edx - movl %esi,%eax movl %r12d,%ecx - xorl 32(%rsp),%edx - xorl %r13d,%eax + xorl 32(%rsp),%r14d + xorl %edi,%eax roll $5,%ecx + xorl 56(%rsp),%r14d leal 1859775393(%rbp,%r11,1),%r11d - xorl 56(%rsp),%edx - xorl %edi,%eax + xorl %esi,%eax addl %ecx,%r11d - xorl 12(%rsp),%edx roll $30,%r13d addl %eax,%r11d - roll $1,%edx - movl %edx,24(%rsp) - movl 28(%rsp),%ebp - movl %r13d,%eax + roll $1,%r14d + xorl 28(%rsp),%edx + movl %r12d,%eax + movl %r14d,24(%rsp) movl %r11d,%ecx - xorl 36(%rsp),%ebp - xorl %r12d,%eax - roll $5,%ecx - leal 1859775393(%rdx,%rdi,1),%edi - xorl 60(%rsp),%ebp + xorl 36(%rsp),%edx xorl %esi,%eax + roll $5,%ecx + xorl 60(%rsp),%edx + leal 1859775393(%r14,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 16(%rsp),%ebp roll $30,%r12d addl %eax,%edi - roll $1,%ebp - movl %ebp,28(%rsp) - movl 32(%rsp),%edx - movl %r12d,%eax + roll $1,%edx + xorl 32(%rsp),%ebp + movl %r11d,%eax + movl %edx,28(%rsp) movl %edi,%ecx - xorl 40(%rsp),%edx - xorl %r11d,%eax - roll $5,%ecx - leal 1859775393(%rbp,%rsi,1),%esi - xorl 0(%rsp),%edx + xorl 40(%rsp),%ebp xorl %r13d,%eax + roll $5,%ecx + xorl 0(%rsp),%ebp + leal 1859775393(%rdx,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 20(%rsp),%edx roll $30,%r11d addl %eax,%esi - roll $1,%edx - movl %edx,32(%rsp) - movl 36(%rsp),%ebp - movl %r11d,%eax - movl %r11d,%ebx - xorl 44(%rsp),%ebp - andl %r12d,%eax + roll $1,%ebp + xorl 36(%rsp),%r14d + movl %r12d,%eax + movl %ebp,32(%rsp) + movl %r12d,%ebx + xorl 44(%rsp),%r14d + andl %r11d,%eax movl %esi,%ecx - xorl 4(%rsp),%ebp - xorl %r12d,%ebx - leal -1894007588(%rdx,%r13,1),%r13d + xorl 4(%rsp),%r14d + leal -1894007588(%rbp,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 24(%rsp),%ebp addl %eax,%r13d + roll $1,%r14d andl %edi,%ebx - roll $1,%ebp - addl %ebx,%r13d - roll $30,%edi - movl %ebp,36(%rsp) addl %ecx,%r13d - movl 40(%rsp),%edx - movl %edi,%eax - movl %edi,%ebx + roll $30,%edi + addl %ebx,%r13d + xorl 40(%rsp),%edx + movl %r11d,%eax + movl %r14d,36(%rsp) + movl %r11d,%ebx xorl 48(%rsp),%edx - andl %r11d,%eax + andl %edi,%eax movl %r13d,%ecx xorl 8(%rsp),%edx - xorl %r11d,%ebx - leal -1894007588(%rbp,%r12,1),%r12d + leal -1894007588(%r14,%r12,1),%r12d + xorl %edi,%ebx roll $5,%ecx - xorl 28(%rsp),%edx addl %eax,%r12d - andl %esi,%ebx roll $1,%edx - addl %ebx,%r12d + andl %esi,%ebx + addl %ecx,%r12d roll $30,%esi + addl %ebx,%r12d + xorl 44(%rsp),%ebp + movl %edi,%eax movl %edx,40(%rsp) - addl %ecx,%r12d - movl 44(%rsp),%ebp - movl %esi,%eax - movl %esi,%ebx + movl %edi,%ebx xorl 52(%rsp),%ebp - andl %edi,%eax + andl %esi,%eax movl %r12d,%ecx xorl 12(%rsp),%ebp - xorl %edi,%ebx leal -1894007588(%rdx,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 32(%rsp),%ebp addl %eax,%r11d - andl %r13d,%ebx roll $1,%ebp - addl %ebx,%r11d + andl %r13d,%ebx + addl %ecx,%r11d roll $30,%r13d + addl %ebx,%r11d + xorl 48(%rsp),%r14d + movl %esi,%eax movl %ebp,44(%rsp) - addl %ecx,%r11d - movl 48(%rsp),%edx - movl %r13d,%eax - movl %r13d,%ebx - xorl 56(%rsp),%edx - andl %esi,%eax + movl %esi,%ebx + xorl 56(%rsp),%r14d + andl %r13d,%eax movl %r11d,%ecx - xorl 16(%rsp),%edx - xorl %esi,%ebx + xorl 16(%rsp),%r14d leal -1894007588(%rbp,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 36(%rsp),%edx addl %eax,%edi + roll $1,%r14d andl %r12d,%ebx - roll $1,%edx - addl %ebx,%edi - roll $30,%r12d - movl %edx,48(%rsp) addl %ecx,%edi - movl 52(%rsp),%ebp - movl %r12d,%eax - movl %r12d,%ebx - xorl 60(%rsp),%ebp - andl %r13d,%eax + roll $30,%r12d + addl %ebx,%edi + xorl 52(%rsp),%edx + movl %r13d,%eax + movl %r14d,48(%rsp) + movl %r13d,%ebx + xorl 60(%rsp),%edx + andl %r12d,%eax movl %edi,%ecx - xorl 20(%rsp),%ebp - xorl %r13d,%ebx - leal -1894007588(%rdx,%rsi,1),%esi + xorl 20(%rsp),%edx + leal -1894007588(%r14,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 40(%rsp),%ebp addl %eax,%esi + roll $1,%edx andl %r11d,%ebx - roll $1,%ebp - addl %ebx,%esi - roll $30,%r11d - movl %ebp,52(%rsp) addl %ecx,%esi - movl 56(%rsp),%edx - movl %r11d,%eax - movl %r11d,%ebx - xorl 0(%rsp),%edx - andl %r12d,%eax + roll $30,%r11d + addl %ebx,%esi + xorl 56(%rsp),%ebp + movl %r12d,%eax + movl %edx,52(%rsp) + movl %r12d,%ebx + xorl 0(%rsp),%ebp + andl %r11d,%eax movl %esi,%ecx - xorl 24(%rsp),%edx - xorl %r12d,%ebx - leal -1894007588(%rbp,%r13,1),%r13d + xorl 24(%rsp),%ebp + leal -1894007588(%rdx,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 44(%rsp),%edx addl %eax,%r13d + roll $1,%ebp andl %edi,%ebx - roll $1,%edx - addl %ebx,%r13d - roll $30,%edi - movl %edx,56(%rsp) addl %ecx,%r13d - movl 60(%rsp),%ebp - movl %edi,%eax - movl %edi,%ebx - xorl 4(%rsp),%ebp - andl %r11d,%eax + roll $30,%edi + addl %ebx,%r13d + xorl 60(%rsp),%r14d + movl %r11d,%eax + movl %ebp,56(%rsp) + movl %r11d,%ebx + xorl 4(%rsp),%r14d + andl %edi,%eax movl %r13d,%ecx - xorl 28(%rsp),%ebp - xorl %r11d,%ebx - leal -1894007588(%rdx,%r12,1),%r12d + xorl 28(%rsp),%r14d + leal -1894007588(%rbp,%r12,1),%r12d + xorl %edi,%ebx roll $5,%ecx - xorl 48(%rsp),%ebp addl %eax,%r12d + roll $1,%r14d andl %esi,%ebx - roll $1,%ebp - addl %ebx,%r12d - roll $30,%esi - movl %ebp,60(%rsp) addl %ecx,%r12d - movl 0(%rsp),%edx - movl %esi,%eax - movl %esi,%ebx + roll $30,%esi + addl %ebx,%r12d + xorl 0(%rsp),%edx + movl %edi,%eax + movl %r14d,60(%rsp) + movl %edi,%ebx xorl 8(%rsp),%edx - andl %edi,%eax + andl %esi,%eax movl %r12d,%ecx xorl 32(%rsp),%edx - xorl %edi,%ebx - leal -1894007588(%rbp,%r11,1),%r11d + leal -1894007588(%r14,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 52(%rsp),%edx addl %eax,%r11d - andl %r13d,%ebx roll $1,%edx - addl %ebx,%r11d + andl %r13d,%ebx + addl %ecx,%r11d roll $30,%r13d + addl %ebx,%r11d + xorl 4(%rsp),%ebp + movl %esi,%eax movl %edx,0(%rsp) - addl %ecx,%r11d - movl 4(%rsp),%ebp - movl %r13d,%eax - movl %r13d,%ebx + movl %esi,%ebx xorl 12(%rsp),%ebp - andl %esi,%eax + andl %r13d,%eax movl %r11d,%ecx xorl 36(%rsp),%ebp - xorl %esi,%ebx leal -1894007588(%rdx,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 56(%rsp),%ebp addl %eax,%edi - andl %r12d,%ebx roll $1,%ebp - addl %ebx,%edi + andl %r12d,%ebx + addl %ecx,%edi roll $30,%r12d + addl %ebx,%edi + xorl 8(%rsp),%r14d + movl %r13d,%eax movl %ebp,4(%rsp) - addl %ecx,%edi - movl 8(%rsp),%edx - movl %r12d,%eax - movl %r12d,%ebx - xorl 16(%rsp),%edx - andl %r13d,%eax + movl %r13d,%ebx + xorl 16(%rsp),%r14d + andl %r12d,%eax movl %edi,%ecx - xorl 40(%rsp),%edx - xorl %r13d,%ebx + xorl 40(%rsp),%r14d leal -1894007588(%rbp,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 60(%rsp),%edx addl %eax,%esi + roll $1,%r14d andl %r11d,%ebx - roll $1,%edx - addl %ebx,%esi - roll $30,%r11d - movl %edx,8(%rsp) addl %ecx,%esi - movl 12(%rsp),%ebp - movl %r11d,%eax - movl %r11d,%ebx - xorl 20(%rsp),%ebp - andl %r12d,%eax + roll $30,%r11d + addl %ebx,%esi + xorl 12(%rsp),%edx + movl %r12d,%eax + movl %r14d,8(%rsp) + movl %r12d,%ebx + xorl 20(%rsp),%edx + andl %r11d,%eax movl %esi,%ecx - xorl 44(%rsp),%ebp - xorl %r12d,%ebx - leal -1894007588(%rdx,%r13,1),%r13d + xorl 44(%rsp),%edx + leal -1894007588(%r14,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 0(%rsp),%ebp addl %eax,%r13d + roll $1,%edx andl %edi,%ebx - roll $1,%ebp - addl %ebx,%r13d - roll $30,%edi - movl %ebp,12(%rsp) addl %ecx,%r13d - movl 16(%rsp),%edx - movl %edi,%eax - movl %edi,%ebx - xorl 24(%rsp),%edx - andl %r11d,%eax + roll $30,%edi + addl %ebx,%r13d + xorl 16(%rsp),%ebp + movl %r11d,%eax + movl %edx,12(%rsp) + movl %r11d,%ebx + xorl 24(%rsp),%ebp + andl %edi,%eax movl %r13d,%ecx - xorl 48(%rsp),%edx - xorl %r11d,%ebx - leal -1894007588(%rbp,%r12,1),%r12d + xorl 48(%rsp),%ebp + leal -1894007588(%rdx,%r12,1),%r12d + xorl %edi,%ebx roll $5,%ecx - xorl 4(%rsp),%edx addl %eax,%r12d + roll $1,%ebp andl %esi,%ebx - roll $1,%edx - addl %ebx,%r12d - roll $30,%esi - movl %edx,16(%rsp) addl %ecx,%r12d - movl 20(%rsp),%ebp - movl %esi,%eax - movl %esi,%ebx - xorl 28(%rsp),%ebp - andl %edi,%eax + roll $30,%esi + addl %ebx,%r12d + xorl 20(%rsp),%r14d + movl %edi,%eax + movl %ebp,16(%rsp) + movl %edi,%ebx + xorl 28(%rsp),%r14d + andl %esi,%eax movl %r12d,%ecx - xorl 52(%rsp),%ebp - xorl %edi,%ebx - leal -1894007588(%rdx,%r11,1),%r11d + xorl 52(%rsp),%r14d + leal -1894007588(%rbp,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 8(%rsp),%ebp addl %eax,%r11d + roll $1,%r14d andl %r13d,%ebx - roll $1,%ebp - addl %ebx,%r11d - roll $30,%r13d - movl %ebp,20(%rsp) addl %ecx,%r11d - movl 24(%rsp),%edx - movl %r13d,%eax - movl %r13d,%ebx + roll $30,%r13d + addl %ebx,%r11d + xorl 24(%rsp),%edx + movl %esi,%eax + movl %r14d,20(%rsp) + movl %esi,%ebx xorl 32(%rsp),%edx - andl %esi,%eax + andl %r13d,%eax movl %r11d,%ecx xorl 56(%rsp),%edx - xorl %esi,%ebx - leal -1894007588(%rbp,%rdi,1),%edi + leal -1894007588(%r14,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 12(%rsp),%edx addl %eax,%edi - andl %r12d,%ebx roll $1,%edx - addl %ebx,%edi + andl %r12d,%ebx + addl %ecx,%edi roll $30,%r12d + addl %ebx,%edi + xorl 28(%rsp),%ebp + movl %r13d,%eax movl %edx,24(%rsp) - addl %ecx,%edi - movl 28(%rsp),%ebp - movl %r12d,%eax - movl %r12d,%ebx + movl %r13d,%ebx xorl 36(%rsp),%ebp - andl %r13d,%eax + andl %r12d,%eax movl %edi,%ecx xorl 60(%rsp),%ebp - xorl %r13d,%ebx leal -1894007588(%rdx,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 16(%rsp),%ebp addl %eax,%esi - andl %r11d,%ebx roll $1,%ebp - addl %ebx,%esi + andl %r11d,%ebx + addl %ecx,%esi roll $30,%r11d + addl %ebx,%esi + xorl 32(%rsp),%r14d + movl %r12d,%eax movl %ebp,28(%rsp) - addl %ecx,%esi - movl 32(%rsp),%edx - movl %r11d,%eax - movl %r11d,%ebx - xorl 40(%rsp),%edx - andl %r12d,%eax + movl %r12d,%ebx + xorl 40(%rsp),%r14d + andl %r11d,%eax movl %esi,%ecx - xorl 0(%rsp),%edx - xorl %r12d,%ebx + xorl 0(%rsp),%r14d leal -1894007588(%rbp,%r13,1),%r13d + xorl %r11d,%ebx roll $5,%ecx - xorl 20(%rsp),%edx addl %eax,%r13d + roll $1,%r14d andl %edi,%ebx - roll $1,%edx - addl %ebx,%r13d - roll $30,%edi - movl %edx,32(%rsp) addl %ecx,%r13d - movl 36(%rsp),%ebp - movl %edi,%eax - movl %edi,%ebx - xorl 44(%rsp),%ebp - andl %r11d,%eax + roll $30,%edi + addl %ebx,%r13d + xorl 36(%rsp),%edx + movl %r11d,%eax + movl %r14d,32(%rsp) + movl %r11d,%ebx + xorl 44(%rsp),%edx + andl %edi,%eax movl %r13d,%ecx - xorl 4(%rsp),%ebp - xorl %r11d,%ebx - leal -1894007588(%rdx,%r12,1),%r12d - roll $5,%ecx - xorl 24(%rsp),%ebp + xorl 4(%rsp),%edx + leal -1894007588(%r14,%r12,1),%r12d + xorl %edi,%ebx + roll $5,%ecx addl %eax,%r12d + roll $1,%edx andl %esi,%ebx - roll $1,%ebp - addl %ebx,%r12d - roll $30,%esi - movl %ebp,36(%rsp) addl %ecx,%r12d - movl 40(%rsp),%edx - movl %esi,%eax - movl %esi,%ebx - xorl 48(%rsp),%edx - andl %edi,%eax + roll $30,%esi + addl %ebx,%r12d + xorl 40(%rsp),%ebp + movl %edi,%eax + movl %edx,36(%rsp) + movl %edi,%ebx + xorl 48(%rsp),%ebp + andl %esi,%eax movl %r12d,%ecx - xorl 8(%rsp),%edx - xorl %edi,%ebx - leal -1894007588(%rbp,%r11,1),%r11d + xorl 8(%rsp),%ebp + leal -1894007588(%rdx,%r11,1),%r11d + xorl %esi,%ebx roll $5,%ecx - xorl 28(%rsp),%edx addl %eax,%r11d + roll $1,%ebp andl %r13d,%ebx - roll $1,%edx - addl %ebx,%r11d - roll $30,%r13d - movl %edx,40(%rsp) addl %ecx,%r11d - movl 44(%rsp),%ebp - movl %r13d,%eax - movl %r13d,%ebx - xorl 52(%rsp),%ebp - andl %esi,%eax + roll $30,%r13d + addl %ebx,%r11d + xorl 44(%rsp),%r14d + movl %esi,%eax + movl %ebp,40(%rsp) + movl %esi,%ebx + xorl 52(%rsp),%r14d + andl %r13d,%eax movl %r11d,%ecx - xorl 12(%rsp),%ebp - xorl %esi,%ebx - leal -1894007588(%rdx,%rdi,1),%edi + xorl 12(%rsp),%r14d + leal -1894007588(%rbp,%rdi,1),%edi + xorl %r13d,%ebx roll $5,%ecx - xorl 32(%rsp),%ebp addl %eax,%edi + roll $1,%r14d andl %r12d,%ebx - roll $1,%ebp - addl %ebx,%edi - roll $30,%r12d - movl %ebp,44(%rsp) addl %ecx,%edi - movl 48(%rsp),%edx - movl %r12d,%eax - movl %r12d,%ebx + roll $30,%r12d + addl %ebx,%edi + xorl 48(%rsp),%edx + movl %r13d,%eax + movl %r14d,44(%rsp) + movl %r13d,%ebx xorl 56(%rsp),%edx - andl %r13d,%eax + andl %r12d,%eax movl %edi,%ecx xorl 16(%rsp),%edx - xorl %r13d,%ebx - leal -1894007588(%rbp,%rsi,1),%esi + leal -1894007588(%r14,%rsi,1),%esi + xorl %r12d,%ebx roll $5,%ecx - xorl 36(%rsp),%edx addl %eax,%esi - andl %r11d,%ebx roll $1,%edx - addl %ebx,%esi + andl %r11d,%ebx + addl %ecx,%esi roll $30,%r11d + addl %ebx,%esi + xorl 52(%rsp),%ebp + movl %edi,%eax movl %edx,48(%rsp) - addl %ecx,%esi - movl 52(%rsp),%ebp - movl %r11d,%eax movl %esi,%ecx xorl 60(%rsp),%ebp - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal -899497514(%rdx,%r13,1),%r13d xorl 20(%rsp),%ebp - xorl %r12d,%eax + leal -899497514(%rdx,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 40(%rsp),%ebp roll $30,%edi addl %eax,%r13d roll $1,%ebp + xorl 56(%rsp),%r14d + movl %esi,%eax movl %ebp,52(%rsp) - movl 56(%rsp),%edx - movl %edi,%eax movl %r13d,%ecx - xorl 0(%rsp),%edx - xorl %esi,%eax + xorl 0(%rsp),%r14d + xorl %r11d,%eax roll $5,%ecx + xorl 24(%rsp),%r14d leal -899497514(%rbp,%r12,1),%r12d - xorl 24(%rsp),%edx - xorl %r11d,%eax + xorl %edi,%eax addl %ecx,%r12d - xorl 44(%rsp),%edx roll $30,%esi addl %eax,%r12d - roll $1,%edx - movl %edx,56(%rsp) - movl 60(%rsp),%ebp - movl %esi,%eax + roll $1,%r14d + xorl 60(%rsp),%edx + movl %r13d,%eax + movl %r14d,56(%rsp) movl %r12d,%ecx - xorl 4(%rsp),%ebp - xorl %r13d,%eax - roll $5,%ecx - leal -899497514(%rdx,%r11,1),%r11d - xorl 28(%rsp),%ebp + xorl 4(%rsp),%edx xorl %edi,%eax + roll $5,%ecx + xorl 28(%rsp),%edx + leal -899497514(%r14,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 48(%rsp),%ebp roll $30,%r13d addl %eax,%r11d - roll $1,%ebp - movl %ebp,60(%rsp) - movl 0(%rsp),%edx - movl %r13d,%eax + roll $1,%edx + xorl 0(%rsp),%ebp + movl %r12d,%eax + movl %edx,60(%rsp) movl %r11d,%ecx - xorl 8(%rsp),%edx - xorl %r12d,%eax - roll $5,%ecx - leal -899497514(%rbp,%rdi,1),%edi - xorl 32(%rsp),%edx + xorl 8(%rsp),%ebp xorl %esi,%eax + roll $5,%ecx + xorl 32(%rsp),%ebp + leal -899497514(%rdx,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 52(%rsp),%edx roll $30,%r12d addl %eax,%edi - roll $1,%edx - movl %edx,0(%rsp) - movl 4(%rsp),%ebp - movl %r12d,%eax + roll $1,%ebp + xorl 4(%rsp),%r14d + movl %r11d,%eax + movl %ebp,0(%rsp) movl %edi,%ecx - xorl 12(%rsp),%ebp - xorl %r11d,%eax - roll $5,%ecx - leal -899497514(%rdx,%rsi,1),%esi - xorl 36(%rsp),%ebp + xorl 12(%rsp),%r14d xorl %r13d,%eax + roll $5,%ecx + xorl 36(%rsp),%r14d + leal -899497514(%rbp,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 56(%rsp),%ebp roll $30,%r11d addl %eax,%esi - roll $1,%ebp - movl %ebp,4(%rsp) - movl 8(%rsp),%edx - movl %r11d,%eax + roll $1,%r14d + xorl 8(%rsp),%edx + movl %edi,%eax + movl %r14d,4(%rsp) movl %esi,%ecx xorl 16(%rsp),%edx - xorl %edi,%eax + xorl %r12d,%eax roll $5,%ecx - leal -899497514(%rbp,%r13,1),%r13d xorl 40(%rsp),%edx - xorl %r12d,%eax + leal -899497514(%r14,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 60(%rsp),%edx roll $30,%edi addl %eax,%r13d roll $1,%edx + xorl 12(%rsp),%ebp + movl %esi,%eax movl %edx,8(%rsp) - movl 12(%rsp),%ebp - movl %edi,%eax movl %r13d,%ecx xorl 20(%rsp),%ebp - xorl %esi,%eax + xorl %r11d,%eax roll $5,%ecx - leal -899497514(%rdx,%r12,1),%r12d xorl 44(%rsp),%ebp - xorl %r11d,%eax + leal -899497514(%rdx,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 0(%rsp),%ebp roll $30,%esi addl %eax,%r12d roll $1,%ebp + xorl 16(%rsp),%r14d + movl %r13d,%eax movl %ebp,12(%rsp) - movl 16(%rsp),%edx - movl %esi,%eax movl %r12d,%ecx - xorl 24(%rsp),%edx - xorl %r13d,%eax + xorl 24(%rsp),%r14d + xorl %edi,%eax roll $5,%ecx + xorl 48(%rsp),%r14d leal -899497514(%rbp,%r11,1),%r11d - xorl 48(%rsp),%edx - xorl %edi,%eax + xorl %esi,%eax addl %ecx,%r11d - xorl 4(%rsp),%edx roll $30,%r13d addl %eax,%r11d - roll $1,%edx - movl %edx,16(%rsp) - movl 20(%rsp),%ebp - movl %r13d,%eax + roll $1,%r14d + xorl 20(%rsp),%edx + movl %r12d,%eax + movl %r14d,16(%rsp) movl %r11d,%ecx - xorl 28(%rsp),%ebp - xorl %r12d,%eax - roll $5,%ecx - leal -899497514(%rdx,%rdi,1),%edi - xorl 52(%rsp),%ebp + xorl 28(%rsp),%edx xorl %esi,%eax + roll $5,%ecx + xorl 52(%rsp),%edx + leal -899497514(%r14,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 8(%rsp),%ebp roll $30,%r12d addl %eax,%edi - roll $1,%ebp - movl %ebp,20(%rsp) - movl 24(%rsp),%edx - movl %r12d,%eax + roll $1,%edx + xorl 24(%rsp),%ebp + movl %r11d,%eax + movl %edx,20(%rsp) movl %edi,%ecx - xorl 32(%rsp),%edx - xorl %r11d,%eax - roll $5,%ecx - leal -899497514(%rbp,%rsi,1),%esi - xorl 56(%rsp),%edx + xorl 32(%rsp),%ebp xorl %r13d,%eax + roll $5,%ecx + xorl 56(%rsp),%ebp + leal -899497514(%rdx,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 12(%rsp),%edx roll $30,%r11d addl %eax,%esi - roll $1,%edx - movl %edx,24(%rsp) - movl 28(%rsp),%ebp - movl %r11d,%eax + roll $1,%ebp + xorl 28(%rsp),%r14d + movl %edi,%eax + movl %ebp,24(%rsp) movl %esi,%ecx - xorl 36(%rsp),%ebp - xorl %edi,%eax - roll $5,%ecx - leal -899497514(%rdx,%r13,1),%r13d - xorl 60(%rsp),%ebp + xorl 36(%rsp),%r14d xorl %r12d,%eax + roll $5,%ecx + xorl 60(%rsp),%r14d + leal -899497514(%rbp,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 16(%rsp),%ebp roll $30,%edi addl %eax,%r13d - roll $1,%ebp - movl %ebp,28(%rsp) - movl 32(%rsp),%edx - movl %edi,%eax + roll $1,%r14d + xorl 32(%rsp),%edx + movl %esi,%eax + movl %r14d,28(%rsp) movl %r13d,%ecx xorl 40(%rsp),%edx - xorl %esi,%eax + xorl %r11d,%eax roll $5,%ecx - leal -899497514(%rbp,%r12,1),%r12d xorl 0(%rsp),%edx - xorl %r11d,%eax + leal -899497514(%r14,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 20(%rsp),%edx roll $30,%esi addl %eax,%r12d roll $1,%edx - movl %edx,32(%rsp) - movl 36(%rsp),%ebp - movl %esi,%eax + xorl 36(%rsp),%ebp + movl %r13d,%eax + movl %r12d,%ecx xorl 44(%rsp),%ebp - xorl %r13d,%eax + xorl %edi,%eax roll $5,%ecx - leal -899497514(%rdx,%r11,1),%r11d xorl 4(%rsp),%ebp - xorl %edi,%eax + leal -899497514(%rdx,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 24(%rsp),%ebp roll $30,%r13d addl %eax,%r11d roll $1,%ebp - movl %ebp,36(%rsp) - movl 40(%rsp),%edx - movl %r13d,%eax + xorl 40(%rsp),%r14d + movl %r12d,%eax + movl %r11d,%ecx - xorl 48(%rsp),%edx - xorl %r12d,%eax + xorl 48(%rsp),%r14d + xorl %esi,%eax roll $5,%ecx + xorl 8(%rsp),%r14d leal -899497514(%rbp,%rdi,1),%edi - xorl 8(%rsp),%edx - xorl %esi,%eax + xorl %r13d,%eax addl %ecx,%edi - xorl 28(%rsp),%edx roll $30,%r12d addl %eax,%edi - roll $1,%edx - movl %edx,40(%rsp) - movl 44(%rsp),%ebp - movl %r12d,%eax + roll $1,%r14d + xorl 44(%rsp),%edx + movl %r11d,%eax + movl %edi,%ecx - xorl 52(%rsp),%ebp - xorl %r11d,%eax + xorl 52(%rsp),%edx + xorl %r13d,%eax roll $5,%ecx - leal -899497514(%rdx,%rsi,1),%esi - xorl 12(%rsp),%ebp - xorl %r13d,%eax + xorl 12(%rsp),%edx + leal -899497514(%r14,%rsi,1),%esi + xorl %r12d,%eax addl %ecx,%esi - xorl 32(%rsp),%ebp roll $30,%r11d addl %eax,%esi - roll $1,%ebp - movl %ebp,44(%rsp) - movl 48(%rsp),%edx - movl %r11d,%eax + roll $1,%edx + xorl 48(%rsp),%ebp + movl %edi,%eax + movl %esi,%ecx - xorl 56(%rsp),%edx - xorl %edi,%eax - roll $5,%ecx - leal -899497514(%rbp,%r13,1),%r13d - xorl 16(%rsp),%edx + xorl 56(%rsp),%ebp xorl %r12d,%eax + roll $5,%ecx + xorl 16(%rsp),%ebp + leal -899497514(%rdx,%r13,1),%r13d + xorl %r11d,%eax addl %ecx,%r13d - xorl 36(%rsp),%edx roll $30,%edi addl %eax,%r13d - roll $1,%edx - movl %edx,48(%rsp) - movl 52(%rsp),%ebp - movl %edi,%eax + roll $1,%ebp + xorl 52(%rsp),%r14d + movl %esi,%eax + movl %r13d,%ecx - xorl 60(%rsp),%ebp - xorl %esi,%eax - roll $5,%ecx - leal -899497514(%rdx,%r12,1),%r12d - xorl 20(%rsp),%ebp + xorl 60(%rsp),%r14d xorl %r11d,%eax + roll $5,%ecx + xorl 20(%rsp),%r14d + leal -899497514(%rbp,%r12,1),%r12d + xorl %edi,%eax addl %ecx,%r12d - xorl 40(%rsp),%ebp roll $30,%esi addl %eax,%r12d - roll $1,%ebp - movl 56(%rsp),%edx - movl %esi,%eax + roll $1,%r14d + xorl 56(%rsp),%edx + movl %r13d,%eax + movl %r12d,%ecx xorl 0(%rsp),%edx - xorl %r13d,%eax + xorl %edi,%eax roll $5,%ecx - leal -899497514(%rbp,%r11,1),%r11d xorl 24(%rsp),%edx - xorl %edi,%eax + leal -899497514(%r14,%r11,1),%r11d + xorl %esi,%eax addl %ecx,%r11d - xorl 44(%rsp),%edx roll $30,%r13d addl %eax,%r11d roll $1,%edx - movl 60(%rsp),%ebp - movl %r13d,%eax + xorl 60(%rsp),%ebp + movl %r12d,%eax + movl %r11d,%ecx xorl 4(%rsp),%ebp - xorl %r12d,%eax + xorl %esi,%eax roll $5,%ecx - leal -899497514(%rdx,%rdi,1),%edi xorl 28(%rsp),%ebp - xorl %esi,%eax + leal -899497514(%rdx,%rdi,1),%edi + xorl %r13d,%eax addl %ecx,%edi - xorl 48(%rsp),%ebp roll $30,%r12d addl %eax,%edi roll $1,%ebp - movl %r12d,%eax + movl %r11d,%eax movl %edi,%ecx - xorl %r11d,%eax + xorl %r13d,%eax leal -899497514(%rbp,%rsi,1),%esi roll $5,%ecx - xorl %r13d,%eax + xorl %r12d,%eax addl %ecx,%esi roll $30,%r11d addl %eax,%esi @@ -1319,29 +1277,218 @@ L$loop: jnz L$loop movq 64(%rsp),%rsi - movq (%rsi),%r13 - movq 8(%rsi),%r12 - movq 16(%rsi),%rbp - movq 24(%rsi),%rbx - leaq 32(%rsi),%rsp + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + L$epilogue: .byte 0xf3,0xc3 + +.p2align 5 +sha1_block_data_order_shaext: +_shaext_shortcut: + + movdqu (%rdi),%xmm0 + movd 16(%rdi),%xmm1 + movdqa K_XX_XX+160(%rip),%xmm3 + + movdqu (%rsi),%xmm4 + pshufd $27,%xmm0,%xmm0 + movdqu 16(%rsi),%xmm5 + pshufd $27,%xmm1,%xmm1 + movdqu 32(%rsi),%xmm6 +.byte 102,15,56,0,227 + movdqu 48(%rsi),%xmm7 +.byte 102,15,56,0,235 +.byte 102,15,56,0,243 + movdqa %xmm1,%xmm9 +.byte 102,15,56,0,251 + jmp L$oop_shaext + +.p2align 4 +L$oop_shaext: + decq %rdx + leaq 64(%rsi),%r8 + paddd %xmm4,%xmm1 + cmovneq %r8,%rsi + movdqa %xmm0,%xmm8 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,0 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,0 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,0 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,0 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,0 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,1 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,1 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,1 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,1 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,1 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,2 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,2 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 +.byte 15,56,201,229 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,2 +.byte 15,56,200,213 + pxor %xmm6,%xmm4 +.byte 15,56,201,238 +.byte 15,56,202,231 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,2 +.byte 15,56,200,206 + pxor %xmm7,%xmm5 +.byte 15,56,202,236 +.byte 15,56,201,247 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,2 +.byte 15,56,200,215 + pxor %xmm4,%xmm6 +.byte 15,56,201,252 +.byte 15,56,202,245 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,3 +.byte 15,56,200,204 + pxor %xmm5,%xmm7 +.byte 15,56,202,254 + movdqu (%rsi),%xmm4 + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,3 +.byte 15,56,200,213 + movdqu 16(%rsi),%xmm5 +.byte 102,15,56,0,227 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,3 +.byte 15,56,200,206 + movdqu 32(%rsi),%xmm6 +.byte 102,15,56,0,235 + + movdqa %xmm0,%xmm2 +.byte 15,58,204,193,3 +.byte 15,56,200,215 + movdqu 48(%rsi),%xmm7 +.byte 102,15,56,0,243 + + movdqa %xmm0,%xmm1 +.byte 15,58,204,194,3 +.byte 65,15,56,200,201 +.byte 102,15,56,0,251 + + paddd %xmm8,%xmm0 + movdqa %xmm1,%xmm9 + + jnz L$oop_shaext + + pshufd $27,%xmm0,%xmm0 + pshufd $27,%xmm1,%xmm1 + movdqu %xmm0,(%rdi) + movd %xmm1,16(%rdi) + + .byte 0xf3,0xc3 + + .p2align 4 sha1_block_data_order_ssse3: _ssse3_shortcut: + + movq %rsp,%r11 + pushq %rbx + pushq %rbp + pushq %r12 + + pushq %r13 + + pushq %r14 + leaq -64(%rsp),%rsp + andq $-64,%rsp movq %rdi,%r8 movq %rsi,%r9 movq %rdx,%r10 shlq $6,%r10 addq %r9,%r10 - leaq K_XX_XX(%rip),%r11 + leaq K_XX_XX+64(%rip),%r14 movl 0(%r8),%eax movl 4(%r8),%ebx @@ -1353,18 +1500,18 @@ _ssse3_shortcut: xorl %edx,%edi andl %edi,%esi - movdqa 64(%r11),%xmm6 - movdqa 0(%r11),%xmm9 + movdqa 64(%r14),%xmm6 + movdqa -64(%r14),%xmm9 movdqu 0(%r9),%xmm0 movdqu 16(%r9),%xmm1 movdqu 32(%r9),%xmm2 movdqu 48(%r9),%xmm3 .byte 102,15,56,0,198 - addq $64,%r9 .byte 102,15,56,0,206 .byte 102,15,56,0,214 -.byte 102,15,56,0,222 + addq $64,%r9 paddd %xmm9,%xmm0 +.byte 102,15,56,0,222 paddd %xmm9,%xmm1 paddd %xmm9,%xmm2 movdqa %xmm0,0(%rsp) @@ -1376,24 +1523,24 @@ _ssse3_shortcut: jmp L$oop_ssse3 .p2align 4 L$oop_ssse3: - movdqa %xmm1,%xmm4 rorl $2,%ebx + pshufd $238,%xmm0,%xmm4 xorl %edx,%esi movdqa %xmm3,%xmm8 -.byte 102,15,58,15,224,8 + paddd %xmm3,%xmm9 movl %eax,%edi addl 0(%rsp),%ebp - paddd %xmm3,%xmm9 + punpcklqdq %xmm1,%xmm4 xorl %ecx,%ebx roll $5,%eax - psrldq $4,%xmm8 addl %esi,%ebp + psrldq $4,%xmm8 andl %ebx,%edi - pxor %xmm0,%xmm4 xorl %ecx,%ebx + pxor %xmm0,%xmm4 addl %eax,%ebp - pxor %xmm2,%xmm8 rorl $7,%eax + pxor %xmm2,%xmm8 xorl %ecx,%edi movl %ebp,%esi addl 4(%rsp),%edx @@ -1404,57 +1551,57 @@ L$oop_ssse3: addl %edi,%edx andl %eax,%esi movdqa %xmm4,%xmm10 - movdqa %xmm4,%xmm8 xorl %ebx,%eax addl %ebp,%edx rorl $7,%ebp + movdqa %xmm4,%xmm8 xorl %ebx,%esi pslldq $12,%xmm10 paddd %xmm4,%xmm4 movl %edx,%edi addl 8(%rsp),%ecx + psrld $31,%xmm8 xorl %eax,%ebp roll $5,%edx - psrld $31,%xmm8 addl %esi,%ecx - andl %ebp,%edi movdqa %xmm10,%xmm9 + andl %ebp,%edi xorl %eax,%ebp - addl %edx,%ecx psrld $30,%xmm10 - por %xmm8,%xmm4 + addl %edx,%ecx rorl $7,%edx + por %xmm8,%xmm4 xorl %eax,%edi movl %ecx,%esi addl 12(%rsp),%ebx pslld $2,%xmm9 pxor %xmm10,%xmm4 xorl %ebp,%edx + movdqa -64(%r14),%xmm10 roll $5,%ecx - movdqa 0(%r11),%xmm10 addl %edi,%ebx andl %edx,%esi pxor %xmm9,%xmm4 xorl %ebp,%edx addl %ecx,%ebx - movdqa %xmm2,%xmm5 rorl $7,%ecx + pshufd $238,%xmm1,%xmm5 xorl %ebp,%esi movdqa %xmm4,%xmm9 -.byte 102,15,58,15,233,8 + paddd %xmm4,%xmm10 movl %ebx,%edi addl 16(%rsp),%eax - paddd %xmm4,%xmm10 + punpcklqdq %xmm2,%xmm5 xorl %edx,%ecx roll $5,%ebx - psrldq $4,%xmm9 addl %esi,%eax + psrldq $4,%xmm9 andl %ecx,%edi - pxor %xmm1,%xmm5 xorl %edx,%ecx + pxor %xmm1,%xmm5 addl %ebx,%eax - pxor %xmm3,%xmm9 rorl $7,%ebx + pxor %xmm3,%xmm9 xorl %edx,%edi movl %eax,%esi addl 20(%rsp),%ebp @@ -1465,57 +1612,57 @@ L$oop_ssse3: addl %edi,%ebp andl %ebx,%esi movdqa %xmm5,%xmm8 - movdqa %xmm5,%xmm9 xorl %ecx,%ebx addl %eax,%ebp rorl $7,%eax + movdqa %xmm5,%xmm9 xorl %ecx,%esi pslldq $12,%xmm8 paddd %xmm5,%xmm5 movl %ebp,%edi addl 24(%rsp),%edx + psrld $31,%xmm9 xorl %ebx,%eax roll $5,%ebp - psrld $31,%xmm9 addl %esi,%edx - andl %eax,%edi movdqa %xmm8,%xmm10 + andl %eax,%edi xorl %ebx,%eax - addl %ebp,%edx psrld $30,%xmm8 - por %xmm9,%xmm5 + addl %ebp,%edx rorl $7,%ebp + por %xmm9,%xmm5 xorl %ebx,%edi movl %edx,%esi addl 28(%rsp),%ecx pslld $2,%xmm10 pxor %xmm8,%xmm5 xorl %eax,%ebp + movdqa -32(%r14),%xmm8 roll $5,%edx - movdqa 16(%r11),%xmm8 addl %edi,%ecx andl %ebp,%esi pxor %xmm10,%xmm5 xorl %eax,%ebp addl %edx,%ecx - movdqa %xmm3,%xmm6 rorl $7,%edx + pshufd $238,%xmm2,%xmm6 xorl %eax,%esi movdqa %xmm5,%xmm10 -.byte 102,15,58,15,242,8 + paddd %xmm5,%xmm8 movl %ecx,%edi addl 32(%rsp),%ebx - paddd %xmm5,%xmm8 + punpcklqdq %xmm3,%xmm6 xorl %ebp,%edx roll $5,%ecx - psrldq $4,%xmm10 addl %esi,%ebx + psrldq $4,%xmm10 andl %edx,%edi - pxor %xmm2,%xmm6 xorl %ebp,%edx + pxor %xmm2,%xmm6 addl %ecx,%ebx - pxor %xmm4,%xmm10 rorl $7,%ecx + pxor %xmm4,%xmm10 xorl %ebp,%edi movl %ebx,%esi addl 36(%rsp),%eax @@ -1526,57 +1673,57 @@ L$oop_ssse3: addl %edi,%eax andl %ecx,%esi movdqa %xmm6,%xmm9 - movdqa %xmm6,%xmm10 xorl %edx,%ecx addl %ebx,%eax rorl $7,%ebx + movdqa %xmm6,%xmm10 xorl %edx,%esi pslldq $12,%xmm9 paddd %xmm6,%xmm6 movl %eax,%edi addl 40(%rsp),%ebp + psrld $31,%xmm10 xorl %ecx,%ebx roll $5,%eax - psrld $31,%xmm10 addl %esi,%ebp - andl %ebx,%edi movdqa %xmm9,%xmm8 + andl %ebx,%edi xorl %ecx,%ebx - addl %eax,%ebp psrld $30,%xmm9 - por %xmm10,%xmm6 + addl %eax,%ebp rorl $7,%eax + por %xmm10,%xmm6 xorl %ecx,%edi movl %ebp,%esi addl 44(%rsp),%edx pslld $2,%xmm8 pxor %xmm9,%xmm6 xorl %ebx,%eax + movdqa -32(%r14),%xmm9 roll $5,%ebp - movdqa 16(%r11),%xmm9 addl %edi,%edx andl %eax,%esi pxor %xmm8,%xmm6 xorl %ebx,%eax addl %ebp,%edx - movdqa %xmm4,%xmm7 rorl $7,%ebp + pshufd $238,%xmm3,%xmm7 xorl %ebx,%esi movdqa %xmm6,%xmm8 -.byte 102,15,58,15,251,8 + paddd %xmm6,%xmm9 movl %edx,%edi addl 48(%rsp),%ecx - paddd %xmm6,%xmm9 + punpcklqdq %xmm4,%xmm7 xorl %eax,%ebp roll $5,%edx - psrldq $4,%xmm8 addl %esi,%ecx + psrldq $4,%xmm8 andl %ebp,%edi - pxor %xmm3,%xmm7 xorl %eax,%ebp + pxor %xmm3,%xmm7 addl %edx,%ecx - pxor %xmm5,%xmm8 rorl $7,%edx + pxor %xmm5,%xmm8 xorl %eax,%edi movl %ecx,%esi addl 52(%rsp),%ebx @@ -1587,78 +1734,78 @@ L$oop_ssse3: addl %edi,%ebx andl %edx,%esi movdqa %xmm7,%xmm10 - movdqa %xmm7,%xmm8 xorl %ebp,%edx addl %ecx,%ebx rorl $7,%ecx + movdqa %xmm7,%xmm8 xorl %ebp,%esi pslldq $12,%xmm10 paddd %xmm7,%xmm7 movl %ebx,%edi addl 56(%rsp),%eax + psrld $31,%xmm8 xorl %edx,%ecx roll $5,%ebx - psrld $31,%xmm8 addl %esi,%eax - andl %ecx,%edi movdqa %xmm10,%xmm9 + andl %ecx,%edi xorl %edx,%ecx - addl %ebx,%eax psrld $30,%xmm10 - por %xmm8,%xmm7 + addl %ebx,%eax rorl $7,%ebx + por %xmm8,%xmm7 xorl %edx,%edi movl %eax,%esi addl 60(%rsp),%ebp pslld $2,%xmm9 pxor %xmm10,%xmm7 xorl %ecx,%ebx + movdqa -32(%r14),%xmm10 roll $5,%eax - movdqa 16(%r11),%xmm10 addl %edi,%ebp andl %ebx,%esi pxor %xmm9,%xmm7 + pshufd $238,%xmm6,%xmm9 xorl %ecx,%ebx addl %eax,%ebp - movdqa %xmm7,%xmm9 rorl $7,%eax pxor %xmm4,%xmm0 -.byte 102,68,15,58,15,206,8 xorl %ecx,%esi movl %ebp,%edi addl 0(%rsp),%edx - pxor %xmm1,%xmm0 + punpcklqdq %xmm7,%xmm9 xorl %ebx,%eax roll $5,%ebp - movdqa %xmm10,%xmm8 - paddd %xmm7,%xmm10 + pxor %xmm1,%xmm0 addl %esi,%edx andl %eax,%edi - pxor %xmm9,%xmm0 + movdqa %xmm10,%xmm8 xorl %ebx,%eax + paddd %xmm7,%xmm10 addl %ebp,%edx + pxor %xmm9,%xmm0 rorl $7,%ebp xorl %ebx,%edi - movdqa %xmm0,%xmm9 - movdqa %xmm10,48(%rsp) movl %edx,%esi addl 4(%rsp),%ecx + movdqa %xmm0,%xmm9 xorl %eax,%ebp roll $5,%edx - pslld $2,%xmm0 + movdqa %xmm10,48(%rsp) addl %edi,%ecx andl %ebp,%esi - psrld $30,%xmm9 xorl %eax,%ebp + pslld $2,%xmm0 addl %edx,%ecx rorl $7,%edx + psrld $30,%xmm9 xorl %eax,%esi movl %ecx,%edi addl 8(%rsp),%ebx por %xmm9,%xmm0 xorl %ebp,%edx roll $5,%ecx - movdqa %xmm0,%xmm10 + pshufd $238,%xmm7,%xmm10 addl %esi,%ebx andl %edx,%edi xorl %ebp,%edx @@ -1671,18 +1818,18 @@ L$oop_ssse3: xorl %edx,%esi rorl $7,%ecx addl %ebx,%eax - addl 16(%rsp),%ebp pxor %xmm5,%xmm1 -.byte 102,68,15,58,15,215,8 + addl 16(%rsp),%ebp xorl %ecx,%esi + punpcklqdq %xmm0,%xmm10 movl %eax,%edi roll $5,%eax pxor %xmm2,%xmm1 addl %esi,%ebp xorl %ecx,%edi movdqa %xmm8,%xmm9 - paddd %xmm0,%xmm8 rorl $7,%ebx + paddd %xmm0,%xmm8 addl %eax,%ebp pxor %xmm10,%xmm1 addl 20(%rsp),%edx @@ -1690,43 +1837,43 @@ L$oop_ssse3: movl %ebp,%esi roll $5,%ebp movdqa %xmm1,%xmm10 - movdqa %xmm8,0(%rsp) addl %edi,%edx xorl %ebx,%esi + movdqa %xmm8,0(%rsp) rorl $7,%eax addl %ebp,%edx - pslld $2,%xmm1 addl 24(%rsp),%ecx + pslld $2,%xmm1 xorl %eax,%esi - psrld $30,%xmm10 movl %edx,%edi + psrld $30,%xmm10 roll $5,%edx addl %esi,%ecx xorl %eax,%edi rorl $7,%ebp - addl %edx,%ecx por %xmm10,%xmm1 + addl %edx,%ecx addl 28(%rsp),%ebx + pshufd $238,%xmm0,%xmm8 xorl %ebp,%edi - movdqa %xmm1,%xmm8 movl %ecx,%esi roll $5,%ecx addl %edi,%ebx xorl %ebp,%esi rorl $7,%edx addl %ecx,%ebx - addl 32(%rsp),%eax pxor %xmm6,%xmm2 -.byte 102,68,15,58,15,192,8 + addl 32(%rsp),%eax xorl %edx,%esi + punpcklqdq %xmm1,%xmm8 movl %ebx,%edi roll $5,%ebx pxor %xmm3,%xmm2 addl %esi,%eax xorl %edx,%edi - movdqa 32(%r11),%xmm10 - paddd %xmm1,%xmm9 + movdqa 0(%r14),%xmm10 rorl $7,%ecx + paddd %xmm1,%xmm9 addl %ebx,%eax pxor %xmm8,%xmm2 addl 36(%rsp),%ebp @@ -1734,43 +1881,43 @@ L$oop_ssse3: movl %eax,%esi roll $5,%eax movdqa %xmm2,%xmm8 - movdqa %xmm9,16(%rsp) addl %edi,%ebp xorl %ecx,%esi + movdqa %xmm9,16(%rsp) rorl $7,%ebx addl %eax,%ebp - pslld $2,%xmm2 addl 40(%rsp),%edx + pslld $2,%xmm2 xorl %ebx,%esi - psrld $30,%xmm8 movl %ebp,%edi + psrld $30,%xmm8 roll $5,%ebp addl %esi,%edx xorl %ebx,%edi rorl $7,%eax - addl %ebp,%edx por %xmm8,%xmm2 + addl %ebp,%edx addl 44(%rsp),%ecx + pshufd $238,%xmm1,%xmm9 xorl %eax,%edi - movdqa %xmm2,%xmm9 movl %edx,%esi roll $5,%edx addl %edi,%ecx xorl %eax,%esi rorl $7,%ebp addl %edx,%ecx - addl 48(%rsp),%ebx pxor %xmm7,%xmm3 -.byte 102,68,15,58,15,201,8 + addl 48(%rsp),%ebx xorl %ebp,%esi + punpcklqdq %xmm2,%xmm9 movl %ecx,%edi roll $5,%ecx pxor %xmm4,%xmm3 addl %esi,%ebx xorl %ebp,%edi movdqa %xmm10,%xmm8 - paddd %xmm2,%xmm10 rorl $7,%edx + paddd %xmm2,%xmm10 addl %ecx,%ebx pxor %xmm9,%xmm3 addl 52(%rsp),%eax @@ -1778,43 +1925,43 @@ L$oop_ssse3: movl %ebx,%esi roll $5,%ebx movdqa %xmm3,%xmm9 - movdqa %xmm10,32(%rsp) addl %edi,%eax xorl %edx,%esi + movdqa %xmm10,32(%rsp) rorl $7,%ecx addl %ebx,%eax - pslld $2,%xmm3 addl 56(%rsp),%ebp + pslld $2,%xmm3 xorl %ecx,%esi - psrld $30,%xmm9 movl %eax,%edi + psrld $30,%xmm9 roll $5,%eax addl %esi,%ebp xorl %ecx,%edi rorl $7,%ebx - addl %eax,%ebp por %xmm9,%xmm3 + addl %eax,%ebp addl 60(%rsp),%edx + pshufd $238,%xmm2,%xmm10 xorl %ebx,%edi - movdqa %xmm3,%xmm10 movl %ebp,%esi roll $5,%ebp addl %edi,%edx xorl %ebx,%esi rorl $7,%eax addl %ebp,%edx - addl 0(%rsp),%ecx pxor %xmm0,%xmm4 -.byte 102,68,15,58,15,210,8 + addl 0(%rsp),%ecx xorl %eax,%esi + punpcklqdq %xmm3,%xmm10 movl %edx,%edi roll $5,%edx pxor %xmm5,%xmm4 addl %esi,%ecx xorl %eax,%edi movdqa %xmm8,%xmm9 - paddd %xmm3,%xmm8 rorl $7,%ebp + paddd %xmm3,%xmm8 addl %edx,%ecx pxor %xmm10,%xmm4 addl 4(%rsp),%ebx @@ -1822,43 +1969,43 @@ L$oop_ssse3: movl %ecx,%esi roll $5,%ecx movdqa %xmm4,%xmm10 - movdqa %xmm8,48(%rsp) addl %edi,%ebx xorl %ebp,%esi + movdqa %xmm8,48(%rsp) rorl $7,%edx addl %ecx,%ebx - pslld $2,%xmm4 addl 8(%rsp),%eax + pslld $2,%xmm4 xorl %edx,%esi - psrld $30,%xmm10 movl %ebx,%edi + psrld $30,%xmm10 roll $5,%ebx addl %esi,%eax xorl %edx,%edi rorl $7,%ecx - addl %ebx,%eax por %xmm10,%xmm4 + addl %ebx,%eax addl 12(%rsp),%ebp + pshufd $238,%xmm3,%xmm8 xorl %ecx,%edi - movdqa %xmm4,%xmm8 movl %eax,%esi roll $5,%eax addl %edi,%ebp xorl %ecx,%esi rorl $7,%ebx addl %eax,%ebp - addl 16(%rsp),%edx pxor %xmm1,%xmm5 -.byte 102,68,15,58,15,195,8 + addl 16(%rsp),%edx xorl %ebx,%esi + punpcklqdq %xmm4,%xmm8 movl %ebp,%edi roll $5,%ebp pxor %xmm6,%xmm5 addl %esi,%edx xorl %ebx,%edi movdqa %xmm9,%xmm10 - paddd %xmm4,%xmm9 rorl $7,%eax + paddd %xmm4,%xmm9 addl %ebp,%edx pxor %xmm8,%xmm5 addl 20(%rsp),%ecx @@ -1866,24 +2013,24 @@ L$oop_ssse3: movl %edx,%esi roll $5,%edx movdqa %xmm5,%xmm8 - movdqa %xmm9,0(%rsp) addl %edi,%ecx xorl %eax,%esi + movdqa %xmm9,0(%rsp) rorl $7,%ebp addl %edx,%ecx - pslld $2,%xmm5 addl 24(%rsp),%ebx + pslld $2,%xmm5 xorl %ebp,%esi - psrld $30,%xmm8 movl %ecx,%edi + psrld $30,%xmm8 roll $5,%ecx addl %esi,%ebx xorl %ebp,%edi rorl $7,%edx - addl %ecx,%ebx por %xmm8,%xmm5 + addl %ecx,%ebx addl 28(%rsp),%eax - movdqa %xmm5,%xmm9 + pshufd $238,%xmm4,%xmm9 rorl $7,%ecx movl %ebx,%esi xorl %edx,%edi @@ -1892,47 +2039,47 @@ L$oop_ssse3: xorl %ecx,%esi xorl %edx,%ecx addl %ebx,%eax - addl 32(%rsp),%ebp pxor %xmm2,%xmm6 -.byte 102,68,15,58,15,204,8 + addl 32(%rsp),%ebp andl %ecx,%esi xorl %edx,%ecx rorl $7,%ebx - pxor %xmm7,%xmm6 + punpcklqdq %xmm5,%xmm9 movl %eax,%edi xorl %ecx,%esi - movdqa %xmm10,%xmm8 - paddd %xmm5,%xmm10 + pxor %xmm7,%xmm6 roll $5,%eax addl %esi,%ebp - pxor %xmm9,%xmm6 + movdqa %xmm10,%xmm8 xorl %ebx,%edi + paddd %xmm5,%xmm10 xorl %ecx,%ebx + pxor %xmm9,%xmm6 addl %eax,%ebp addl 36(%rsp),%edx - movdqa %xmm6,%xmm9 - movdqa %xmm10,16(%rsp) andl %ebx,%edi xorl %ecx,%ebx rorl $7,%eax + movdqa %xmm6,%xmm9 movl %ebp,%esi - pslld $2,%xmm6 xorl %ebx,%edi + movdqa %xmm10,16(%rsp) roll $5,%ebp - psrld $30,%xmm9 addl %edi,%edx xorl %eax,%esi + pslld $2,%xmm6 xorl %ebx,%eax addl %ebp,%edx + psrld $30,%xmm9 addl 40(%rsp),%ecx andl %eax,%esi - por %xmm9,%xmm6 xorl %ebx,%eax + por %xmm9,%xmm6 rorl $7,%ebp - movdqa %xmm6,%xmm10 movl %edx,%edi xorl %eax,%esi roll $5,%edx + pshufd $238,%xmm5,%xmm10 addl %esi,%ecx xorl %ebp,%edi xorl %eax,%ebp @@ -1948,47 +2095,47 @@ L$oop_ssse3: xorl %edx,%esi xorl %ebp,%edx addl %ecx,%ebx - addl 48(%rsp),%eax pxor %xmm3,%xmm7 -.byte 102,68,15,58,15,213,8 + addl 48(%rsp),%eax andl %edx,%esi xorl %ebp,%edx rorl $7,%ecx - pxor %xmm0,%xmm7 + punpcklqdq %xmm6,%xmm10 movl %ebx,%edi xorl %edx,%esi - movdqa 48(%r11),%xmm9 - paddd %xmm6,%xmm8 + pxor %xmm0,%xmm7 roll $5,%ebx addl %esi,%eax - pxor %xmm10,%xmm7 + movdqa 32(%r14),%xmm9 xorl %ecx,%edi + paddd %xmm6,%xmm8 xorl %edx,%ecx + pxor %xmm10,%xmm7 addl %ebx,%eax addl 52(%rsp),%ebp - movdqa %xmm7,%xmm10 - movdqa %xmm8,32(%rsp) andl %ecx,%edi xorl %edx,%ecx rorl $7,%ebx + movdqa %xmm7,%xmm10 movl %eax,%esi - pslld $2,%xmm7 xorl %ecx,%edi + movdqa %xmm8,32(%rsp) roll $5,%eax - psrld $30,%xmm10 addl %edi,%ebp xorl %ebx,%esi + pslld $2,%xmm7 xorl %ecx,%ebx addl %eax,%ebp + psrld $30,%xmm10 addl 56(%rsp),%edx andl %ebx,%esi - por %xmm10,%xmm7 xorl %ecx,%ebx + por %xmm10,%xmm7 rorl $7,%eax - movdqa %xmm7,%xmm8 movl %ebp,%edi xorl %ebx,%esi roll $5,%ebp + pshufd $238,%xmm6,%xmm8 addl %esi,%edx xorl %eax,%edi xorl %ebx,%eax @@ -2004,47 +2151,47 @@ L$oop_ssse3: xorl %ebp,%esi xorl %eax,%ebp addl %edx,%ecx - addl 0(%rsp),%ebx pxor %xmm4,%xmm0 -.byte 102,68,15,58,15,198,8 + addl 0(%rsp),%ebx andl %ebp,%esi xorl %eax,%ebp rorl $7,%edx - pxor %xmm1,%xmm0 + punpcklqdq %xmm7,%xmm8 movl %ecx,%edi xorl %ebp,%esi - movdqa %xmm9,%xmm10 - paddd %xmm7,%xmm9 + pxor %xmm1,%xmm0 roll $5,%ecx addl %esi,%ebx - pxor %xmm8,%xmm0 + movdqa %xmm9,%xmm10 xorl %edx,%edi + paddd %xmm7,%xmm9 xorl %ebp,%edx + pxor %xmm8,%xmm0 addl %ecx,%ebx addl 4(%rsp),%eax - movdqa %xmm0,%xmm8 - movdqa %xmm9,48(%rsp) andl %edx,%edi xorl %ebp,%edx rorl $7,%ecx + movdqa %xmm0,%xmm8 movl %ebx,%esi - pslld $2,%xmm0 xorl %edx,%edi + movdqa %xmm9,48(%rsp) roll $5,%ebx - psrld $30,%xmm8 addl %edi,%eax xorl %ecx,%esi + pslld $2,%xmm0 xorl %edx,%ecx addl %ebx,%eax + psrld $30,%xmm8 addl 8(%rsp),%ebp andl %ecx,%esi - por %xmm8,%xmm0 xorl %edx,%ecx + por %xmm8,%xmm0 rorl $7,%ebx - movdqa %xmm0,%xmm9 movl %eax,%edi xorl %ecx,%esi roll $5,%eax + pshufd $238,%xmm7,%xmm9 addl %esi,%ebp xorl %ebx,%edi xorl %ecx,%ebx @@ -2060,47 +2207,47 @@ L$oop_ssse3: xorl %eax,%esi xorl %ebx,%eax addl %ebp,%edx - addl 16(%rsp),%ecx pxor %xmm5,%xmm1 -.byte 102,68,15,58,15,207,8 + addl 16(%rsp),%ecx andl %eax,%esi xorl %ebx,%eax rorl $7,%ebp - pxor %xmm2,%xmm1 + punpcklqdq %xmm0,%xmm9 movl %edx,%edi xorl %eax,%esi - movdqa %xmm10,%xmm8 - paddd %xmm0,%xmm10 + pxor %xmm2,%xmm1 roll $5,%edx addl %esi,%ecx - pxor %xmm9,%xmm1 + movdqa %xmm10,%xmm8 xorl %ebp,%edi + paddd %xmm0,%xmm10 xorl %eax,%ebp + pxor %xmm9,%xmm1 addl %edx,%ecx addl 20(%rsp),%ebx - movdqa %xmm1,%xmm9 - movdqa %xmm10,0(%rsp) andl %ebp,%edi xorl %eax,%ebp rorl $7,%edx + movdqa %xmm1,%xmm9 movl %ecx,%esi - pslld $2,%xmm1 xorl %ebp,%edi + movdqa %xmm10,0(%rsp) roll $5,%ecx - psrld $30,%xmm9 addl %edi,%ebx xorl %edx,%esi + pslld $2,%xmm1 xorl %ebp,%edx addl %ecx,%ebx + psrld $30,%xmm9 addl 24(%rsp),%eax andl %edx,%esi - por %xmm9,%xmm1 xorl %ebp,%edx + por %xmm9,%xmm1 rorl $7,%ecx - movdqa %xmm1,%xmm10 movl %ebx,%edi xorl %edx,%esi roll $5,%ebx + pshufd $238,%xmm0,%xmm10 addl %esi,%eax xorl %ecx,%edi xorl %edx,%ecx @@ -2116,47 +2263,47 @@ L$oop_ssse3: xorl %ebx,%esi xorl %ecx,%ebx addl %eax,%ebp - addl 32(%rsp),%edx pxor %xmm6,%xmm2 -.byte 102,68,15,58,15,208,8 + addl 32(%rsp),%edx andl %ebx,%esi xorl %ecx,%ebx rorl $7,%eax - pxor %xmm3,%xmm2 + punpcklqdq %xmm1,%xmm10 movl %ebp,%edi xorl %ebx,%esi - movdqa %xmm8,%xmm9 - paddd %xmm1,%xmm8 + pxor %xmm3,%xmm2 roll $5,%ebp addl %esi,%edx - pxor %xmm10,%xmm2 + movdqa %xmm8,%xmm9 xorl %eax,%edi + paddd %xmm1,%xmm8 xorl %ebx,%eax + pxor %xmm10,%xmm2 addl %ebp,%edx addl 36(%rsp),%ecx - movdqa %xmm2,%xmm10 - movdqa %xmm8,16(%rsp) andl %eax,%edi xorl %ebx,%eax rorl $7,%ebp + movdqa %xmm2,%xmm10 movl %edx,%esi - pslld $2,%xmm2 xorl %eax,%edi + movdqa %xmm8,16(%rsp) roll $5,%edx - psrld $30,%xmm10 addl %edi,%ecx xorl %ebp,%esi + pslld $2,%xmm2 xorl %eax,%ebp addl %edx,%ecx + psrld $30,%xmm10 addl 40(%rsp),%ebx andl %ebp,%esi - por %xmm10,%xmm2 xorl %eax,%ebp + por %xmm10,%xmm2 rorl $7,%edx - movdqa %xmm2,%xmm8 movl %ecx,%edi xorl %ebp,%esi roll $5,%ecx + pshufd $238,%xmm1,%xmm8 addl %esi,%ebx xorl %edx,%edi xorl %ebp,%edx @@ -2171,18 +2318,18 @@ L$oop_ssse3: addl %edi,%eax xorl %edx,%esi addl %ebx,%eax - addl 48(%rsp),%ebp pxor %xmm7,%xmm3 -.byte 102,68,15,58,15,193,8 + addl 48(%rsp),%ebp xorl %ecx,%esi + punpcklqdq %xmm2,%xmm8 movl %eax,%edi roll $5,%eax pxor %xmm4,%xmm3 addl %esi,%ebp xorl %ecx,%edi movdqa %xmm9,%xmm10 - paddd %xmm2,%xmm9 rorl $7,%ebx + paddd %xmm2,%xmm9 addl %eax,%ebp pxor %xmm8,%xmm3 addl 52(%rsp),%edx @@ -2190,22 +2337,22 @@ L$oop_ssse3: movl %ebp,%esi roll $5,%ebp movdqa %xmm3,%xmm8 - movdqa %xmm9,32(%rsp) addl %edi,%edx xorl %ebx,%esi + movdqa %xmm9,32(%rsp) rorl $7,%eax addl %ebp,%edx - pslld $2,%xmm3 addl 56(%rsp),%ecx + pslld $2,%xmm3 xorl %eax,%esi - psrld $30,%xmm8 movl %edx,%edi + psrld $30,%xmm8 roll $5,%edx addl %esi,%ecx xorl %eax,%edi rorl $7,%ebp - addl %edx,%ecx por %xmm8,%xmm3 + addl %edx,%ecx addl 60(%rsp),%ebx xorl %ebp,%edi movl %ecx,%esi @@ -2215,13 +2362,13 @@ L$oop_ssse3: rorl $7,%edx addl %ecx,%ebx addl 0(%rsp),%eax - paddd %xmm3,%xmm10 xorl %edx,%esi movl %ebx,%edi roll $5,%ebx + paddd %xmm3,%xmm10 addl %esi,%eax - movdqa %xmm10,48(%rsp) xorl %edx,%edi + movdqa %xmm10,48(%rsp) rorl $7,%ecx addl %ebx,%eax addl 4(%rsp),%ebp @@ -2250,8 +2397,8 @@ L$oop_ssse3: addl %edx,%ecx cmpq %r10,%r9 je L$done_ssse3 - movdqa 64(%r11),%xmm6 - movdqa 0(%r11),%xmm9 + movdqa 64(%r14),%xmm6 + movdqa -64(%r14),%xmm9 movdqu 0(%r9),%xmm0 movdqu 16(%r9),%xmm1 movdqu 32(%r9),%xmm2 @@ -2260,23 +2407,23 @@ L$oop_ssse3: addq $64,%r9 addl 16(%rsp),%ebx xorl %ebp,%esi -.byte 102,15,56,0,206 movl %ecx,%edi +.byte 102,15,56,0,206 roll $5,%ecx - paddd %xmm9,%xmm0 addl %esi,%ebx xorl %ebp,%edi rorl $7,%edx + paddd %xmm9,%xmm0 addl %ecx,%ebx - movdqa %xmm0,0(%rsp) addl 20(%rsp),%eax xorl %edx,%edi - psubd %xmm9,%xmm0 movl %ebx,%esi + movdqa %xmm0,0(%rsp) roll $5,%ebx addl %edi,%eax xorl %edx,%esi rorl $7,%ecx + psubd %xmm9,%xmm0 addl %ebx,%eax addl 24(%rsp),%ebp xorl %ecx,%esi @@ -2296,23 +2443,23 @@ L$oop_ssse3: addl %ebp,%edx addl 32(%rsp),%ecx xorl %eax,%esi -.byte 102,15,56,0,214 movl %edx,%edi +.byte 102,15,56,0,214 roll $5,%edx - paddd %xmm9,%xmm1 addl %esi,%ecx xorl %eax,%edi rorl $7,%ebp + paddd %xmm9,%xmm1 addl %edx,%ecx - movdqa %xmm1,16(%rsp) addl 36(%rsp),%ebx xorl %ebp,%edi - psubd %xmm9,%xmm1 movl %ecx,%esi + movdqa %xmm1,16(%rsp) roll $5,%ecx addl %edi,%ebx xorl %ebp,%esi rorl $7,%edx + psubd %xmm9,%xmm1 addl %ecx,%ebx addl 40(%rsp),%eax xorl %edx,%esi @@ -2332,23 +2479,23 @@ L$oop_ssse3: addl %eax,%ebp addl 48(%rsp),%edx xorl %ebx,%esi -.byte 102,15,56,0,222 movl %ebp,%edi +.byte 102,15,56,0,222 roll $5,%ebp - paddd %xmm9,%xmm2 addl %esi,%edx xorl %ebx,%edi rorl $7,%eax + paddd %xmm9,%xmm2 addl %ebp,%edx - movdqa %xmm2,32(%rsp) addl 52(%rsp),%ecx xorl %eax,%edi - psubd %xmm9,%xmm2 movl %edx,%esi + movdqa %xmm2,32(%rsp) roll $5,%edx addl %edi,%ecx xorl %eax,%esi rorl $7,%ebp + psubd %xmm9,%xmm2 addl %edx,%ecx addl 56(%rsp),%ebx xorl %ebp,%esi @@ -2488,21 +2635,2856 @@ L$done_ssse3: movl %ecx,8(%r8) movl %edx,12(%r8) movl %ebp,16(%r8) - leaq 64(%rsp),%rsi - movq 0(%rsi),%r12 - movq 8(%rsi),%rbp - movq 16(%rsi),%rbx - leaq 24(%rsi),%rsp + movq -40(%r11),%r14 + + movq -32(%r11),%r13 + + movq -24(%r11),%r12 + + movq -16(%r11),%rbp + + movq -8(%r11),%rbx + + leaq (%r11),%rsp + L$epilogue_ssse3: .byte 0xf3,0xc3 + + +.p2align 4 +sha1_block_data_order_avx: +_avx_shortcut: + + movq %rsp,%r11 + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + leaq -64(%rsp),%rsp + vzeroupper + andq $-64,%rsp + movq %rdi,%r8 + movq %rsi,%r9 + movq %rdx,%r10 + + shlq $6,%r10 + addq %r9,%r10 + leaq K_XX_XX+64(%rip),%r14 + + movl 0(%r8),%eax + movl 4(%r8),%ebx + movl 8(%r8),%ecx + movl 12(%r8),%edx + movl %ebx,%esi + movl 16(%r8),%ebp + movl %ecx,%edi + xorl %edx,%edi + andl %edi,%esi + + vmovdqa 64(%r14),%xmm6 + vmovdqa -64(%r14),%xmm11 + vmovdqu 0(%r9),%xmm0 + vmovdqu 16(%r9),%xmm1 + vmovdqu 32(%r9),%xmm2 + vmovdqu 48(%r9),%xmm3 + vpshufb %xmm6,%xmm0,%xmm0 + addq $64,%r9 + vpshufb %xmm6,%xmm1,%xmm1 + vpshufb %xmm6,%xmm2,%xmm2 + vpshufb %xmm6,%xmm3,%xmm3 + vpaddd %xmm11,%xmm0,%xmm4 + vpaddd %xmm11,%xmm1,%xmm5 + vpaddd %xmm11,%xmm2,%xmm6 + vmovdqa %xmm4,0(%rsp) + vmovdqa %xmm5,16(%rsp) + vmovdqa %xmm6,32(%rsp) + jmp L$oop_avx +.p2align 4 +L$oop_avx: + shrdl $2,%ebx,%ebx + xorl %edx,%esi + vpalignr $8,%xmm0,%xmm1,%xmm4 + movl %eax,%edi + addl 0(%rsp),%ebp + vpaddd %xmm3,%xmm11,%xmm9 + xorl %ecx,%ebx + shldl $5,%eax,%eax + vpsrldq $4,%xmm3,%xmm8 + addl %esi,%ebp + andl %ebx,%edi + vpxor %xmm0,%xmm4,%xmm4 + xorl %ecx,%ebx + addl %eax,%ebp + vpxor %xmm2,%xmm8,%xmm8 + shrdl $7,%eax,%eax + xorl %ecx,%edi + movl %ebp,%esi + addl 4(%rsp),%edx + vpxor %xmm8,%xmm4,%xmm4 + xorl %ebx,%eax + shldl $5,%ebp,%ebp + vmovdqa %xmm9,48(%rsp) + addl %edi,%edx + andl %eax,%esi + vpsrld $31,%xmm4,%xmm8 + xorl %ebx,%eax + addl %ebp,%edx + shrdl $7,%ebp,%ebp + xorl %ebx,%esi + vpslldq $12,%xmm4,%xmm10 + vpaddd %xmm4,%xmm4,%xmm4 + movl %edx,%edi + addl 8(%rsp),%ecx + xorl %eax,%ebp + shldl $5,%edx,%edx + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm4,%xmm4 + addl %esi,%ecx + andl %ebp,%edi + xorl %eax,%ebp + addl %edx,%ecx + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm4,%xmm4 + shrdl $7,%edx,%edx + xorl %eax,%edi + movl %ecx,%esi + addl 12(%rsp),%ebx + vpxor %xmm10,%xmm4,%xmm4 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + addl %edi,%ebx + andl %edx,%esi + xorl %ebp,%edx + addl %ecx,%ebx + shrdl $7,%ecx,%ecx + xorl %ebp,%esi + vpalignr $8,%xmm1,%xmm2,%xmm5 + movl %ebx,%edi + addl 16(%rsp),%eax + vpaddd %xmm4,%xmm11,%xmm9 + xorl %edx,%ecx + shldl $5,%ebx,%ebx + vpsrldq $4,%xmm4,%xmm8 + addl %esi,%eax + andl %ecx,%edi + vpxor %xmm1,%xmm5,%xmm5 + xorl %edx,%ecx + addl %ebx,%eax + vpxor %xmm3,%xmm8,%xmm8 + shrdl $7,%ebx,%ebx + xorl %edx,%edi + movl %eax,%esi + addl 20(%rsp),%ebp + vpxor %xmm8,%xmm5,%xmm5 + xorl %ecx,%ebx + shldl $5,%eax,%eax + vmovdqa %xmm9,0(%rsp) + addl %edi,%ebp + andl %ebx,%esi + vpsrld $31,%xmm5,%xmm8 + xorl %ecx,%ebx + addl %eax,%ebp + shrdl $7,%eax,%eax + xorl %ecx,%esi + vpslldq $12,%xmm5,%xmm10 + vpaddd %xmm5,%xmm5,%xmm5 + movl %ebp,%edi + addl 24(%rsp),%edx + xorl %ebx,%eax + shldl $5,%ebp,%ebp + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm5,%xmm5 + addl %esi,%edx + andl %eax,%edi + xorl %ebx,%eax + addl %ebp,%edx + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm5,%xmm5 + shrdl $7,%ebp,%ebp + xorl %ebx,%edi + movl %edx,%esi + addl 28(%rsp),%ecx + vpxor %xmm10,%xmm5,%xmm5 + xorl %eax,%ebp + shldl $5,%edx,%edx + vmovdqa -32(%r14),%xmm11 + addl %edi,%ecx + andl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + shrdl $7,%edx,%edx + xorl %eax,%esi + vpalignr $8,%xmm2,%xmm3,%xmm6 + movl %ecx,%edi + addl 32(%rsp),%ebx + vpaddd %xmm5,%xmm11,%xmm9 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + vpsrldq $4,%xmm5,%xmm8 + addl %esi,%ebx + andl %edx,%edi + vpxor %xmm2,%xmm6,%xmm6 + xorl %ebp,%edx + addl %ecx,%ebx + vpxor %xmm4,%xmm8,%xmm8 + shrdl $7,%ecx,%ecx + xorl %ebp,%edi + movl %ebx,%esi + addl 36(%rsp),%eax + vpxor %xmm8,%xmm6,%xmm6 + xorl %edx,%ecx + shldl $5,%ebx,%ebx + vmovdqa %xmm9,16(%rsp) + addl %edi,%eax + andl %ecx,%esi + vpsrld $31,%xmm6,%xmm8 + xorl %edx,%ecx + addl %ebx,%eax + shrdl $7,%ebx,%ebx + xorl %edx,%esi + vpslldq $12,%xmm6,%xmm10 + vpaddd %xmm6,%xmm6,%xmm6 + movl %eax,%edi + addl 40(%rsp),%ebp + xorl %ecx,%ebx + shldl $5,%eax,%eax + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm6,%xmm6 + addl %esi,%ebp + andl %ebx,%edi + xorl %ecx,%ebx + addl %eax,%ebp + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm6,%xmm6 + shrdl $7,%eax,%eax + xorl %ecx,%edi + movl %ebp,%esi + addl 44(%rsp),%edx + vpxor %xmm10,%xmm6,%xmm6 + xorl %ebx,%eax + shldl $5,%ebp,%ebp + addl %edi,%edx + andl %eax,%esi + xorl %ebx,%eax + addl %ebp,%edx + shrdl $7,%ebp,%ebp + xorl %ebx,%esi + vpalignr $8,%xmm3,%xmm4,%xmm7 + movl %edx,%edi + addl 48(%rsp),%ecx + vpaddd %xmm6,%xmm11,%xmm9 + xorl %eax,%ebp + shldl $5,%edx,%edx + vpsrldq $4,%xmm6,%xmm8 + addl %esi,%ecx + andl %ebp,%edi + vpxor %xmm3,%xmm7,%xmm7 + xorl %eax,%ebp + addl %edx,%ecx + vpxor %xmm5,%xmm8,%xmm8 + shrdl $7,%edx,%edx + xorl %eax,%edi + movl %ecx,%esi + addl 52(%rsp),%ebx + vpxor %xmm8,%xmm7,%xmm7 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + vmovdqa %xmm9,32(%rsp) + addl %edi,%ebx + andl %edx,%esi + vpsrld $31,%xmm7,%xmm8 + xorl %ebp,%edx + addl %ecx,%ebx + shrdl $7,%ecx,%ecx + xorl %ebp,%esi + vpslldq $12,%xmm7,%xmm10 + vpaddd %xmm7,%xmm7,%xmm7 + movl %ebx,%edi + addl 56(%rsp),%eax + xorl %edx,%ecx + shldl $5,%ebx,%ebx + vpsrld $30,%xmm10,%xmm9 + vpor %xmm8,%xmm7,%xmm7 + addl %esi,%eax + andl %ecx,%edi + xorl %edx,%ecx + addl %ebx,%eax + vpslld $2,%xmm10,%xmm10 + vpxor %xmm9,%xmm7,%xmm7 + shrdl $7,%ebx,%ebx + xorl %edx,%edi + movl %eax,%esi + addl 60(%rsp),%ebp + vpxor %xmm10,%xmm7,%xmm7 + xorl %ecx,%ebx + shldl $5,%eax,%eax + addl %edi,%ebp + andl %ebx,%esi + xorl %ecx,%ebx + addl %eax,%ebp + vpalignr $8,%xmm6,%xmm7,%xmm8 + vpxor %xmm4,%xmm0,%xmm0 + shrdl $7,%eax,%eax + xorl %ecx,%esi + movl %ebp,%edi + addl 0(%rsp),%edx + vpxor %xmm1,%xmm0,%xmm0 + xorl %ebx,%eax + shldl $5,%ebp,%ebp + vpaddd %xmm7,%xmm11,%xmm9 + addl %esi,%edx + andl %eax,%edi + vpxor %xmm8,%xmm0,%xmm0 + xorl %ebx,%eax + addl %ebp,%edx + shrdl $7,%ebp,%ebp + xorl %ebx,%edi + vpsrld $30,%xmm0,%xmm8 + vmovdqa %xmm9,48(%rsp) + movl %edx,%esi + addl 4(%rsp),%ecx + xorl %eax,%ebp + shldl $5,%edx,%edx + vpslld $2,%xmm0,%xmm0 + addl %edi,%ecx + andl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + shrdl $7,%edx,%edx + xorl %eax,%esi + movl %ecx,%edi + addl 8(%rsp),%ebx + vpor %xmm8,%xmm0,%xmm0 + xorl %ebp,%edx + shldl $5,%ecx,%ecx + addl %esi,%ebx + andl %edx,%edi + xorl %ebp,%edx + addl %ecx,%ebx + addl 12(%rsp),%eax + xorl %ebp,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpalignr $8,%xmm7,%xmm0,%xmm8 + vpxor %xmm5,%xmm1,%xmm1 + addl 16(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + vpxor %xmm2,%xmm1,%xmm1 + addl %esi,%ebp + xorl %ecx,%edi + vpaddd %xmm0,%xmm11,%xmm9 + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpxor %xmm8,%xmm1,%xmm1 + addl 20(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + vpsrld $30,%xmm1,%xmm8 + vmovdqa %xmm9,0(%rsp) + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpslld $2,%xmm1,%xmm1 + addl 24(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpor %xmm8,%xmm1,%xmm1 + addl 28(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpalignr $8,%xmm0,%xmm1,%xmm8 + vpxor %xmm6,%xmm2,%xmm2 + addl 32(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + vpxor %xmm3,%xmm2,%xmm2 + addl %esi,%eax + xorl %edx,%edi + vpaddd %xmm1,%xmm11,%xmm9 + vmovdqa 0(%r14),%xmm11 + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpxor %xmm8,%xmm2,%xmm2 + addl 36(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + vpsrld $30,%xmm2,%xmm8 + vmovdqa %xmm9,16(%rsp) + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpslld $2,%xmm2,%xmm2 + addl 40(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpor %xmm8,%xmm2,%xmm2 + addl 44(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpalignr $8,%xmm1,%xmm2,%xmm8 + vpxor %xmm7,%xmm3,%xmm3 + addl 48(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + vpxor %xmm4,%xmm3,%xmm3 + addl %esi,%ebx + xorl %ebp,%edi + vpaddd %xmm2,%xmm11,%xmm9 + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpxor %xmm8,%xmm3,%xmm3 + addl 52(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + vpsrld $30,%xmm3,%xmm8 + vmovdqa %xmm9,32(%rsp) + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpslld $2,%xmm3,%xmm3 + addl 56(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ecx,%edi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpor %xmm8,%xmm3,%xmm3 + addl 60(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpalignr $8,%xmm2,%xmm3,%xmm8 + vpxor %xmm0,%xmm4,%xmm4 + addl 0(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + vpxor %xmm5,%xmm4,%xmm4 + addl %esi,%ecx + xorl %eax,%edi + vpaddd %xmm3,%xmm11,%xmm9 + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpxor %xmm8,%xmm4,%xmm4 + addl 4(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + vpsrld $30,%xmm4,%xmm8 + vmovdqa %xmm9,48(%rsp) + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpslld $2,%xmm4,%xmm4 + addl 8(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vpor %xmm8,%xmm4,%xmm4 + addl 12(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpalignr $8,%xmm3,%xmm4,%xmm8 + vpxor %xmm1,%xmm5,%xmm5 + addl 16(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + vpxor %xmm6,%xmm5,%xmm5 + addl %esi,%edx + xorl %ebx,%edi + vpaddd %xmm4,%xmm11,%xmm9 + shrdl $7,%eax,%eax + addl %ebp,%edx + vpxor %xmm8,%xmm5,%xmm5 + addl 20(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + vpsrld $30,%xmm5,%xmm8 + vmovdqa %xmm9,0(%rsp) + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpslld $2,%xmm5,%xmm5 + addl 24(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vpor %xmm8,%xmm5,%xmm5 + addl 28(%rsp),%eax + shrdl $7,%ecx,%ecx + movl %ebx,%esi + xorl %edx,%edi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %ecx,%esi + xorl %edx,%ecx + addl %ebx,%eax + vpalignr $8,%xmm4,%xmm5,%xmm8 + vpxor %xmm2,%xmm6,%xmm6 + addl 32(%rsp),%ebp + andl %ecx,%esi + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + vpxor %xmm7,%xmm6,%xmm6 + movl %eax,%edi + xorl %ecx,%esi + vpaddd %xmm5,%xmm11,%xmm9 + shldl $5,%eax,%eax + addl %esi,%ebp + vpxor %xmm8,%xmm6,%xmm6 + xorl %ebx,%edi + xorl %ecx,%ebx + addl %eax,%ebp + addl 36(%rsp),%edx + vpsrld $30,%xmm6,%xmm8 + vmovdqa %xmm9,16(%rsp) + andl %ebx,%edi + xorl %ecx,%ebx + shrdl $7,%eax,%eax + movl %ebp,%esi + vpslld $2,%xmm6,%xmm6 + xorl %ebx,%edi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %eax,%esi + xorl %ebx,%eax + addl %ebp,%edx + addl 40(%rsp),%ecx + andl %eax,%esi + vpor %xmm8,%xmm6,%xmm6 + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + movl %edx,%edi + xorl %eax,%esi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %ebp,%edi + xorl %eax,%ebp + addl %edx,%ecx + addl 44(%rsp),%ebx + andl %ebp,%edi + xorl %eax,%ebp + shrdl $7,%edx,%edx + movl %ecx,%esi + xorl %ebp,%edi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %edx,%esi + xorl %ebp,%edx + addl %ecx,%ebx + vpalignr $8,%xmm5,%xmm6,%xmm8 + vpxor %xmm3,%xmm7,%xmm7 + addl 48(%rsp),%eax + andl %edx,%esi + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + vpxor %xmm0,%xmm7,%xmm7 + movl %ebx,%edi + xorl %edx,%esi + vpaddd %xmm6,%xmm11,%xmm9 + vmovdqa 32(%r14),%xmm11 + shldl $5,%ebx,%ebx + addl %esi,%eax + vpxor %xmm8,%xmm7,%xmm7 + xorl %ecx,%edi + xorl %edx,%ecx + addl %ebx,%eax + addl 52(%rsp),%ebp + vpsrld $30,%xmm7,%xmm8 + vmovdqa %xmm9,32(%rsp) + andl %ecx,%edi + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + movl %eax,%esi + vpslld $2,%xmm7,%xmm7 + xorl %ecx,%edi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ebx,%esi + xorl %ecx,%ebx + addl %eax,%ebp + addl 56(%rsp),%edx + andl %ebx,%esi + vpor %xmm8,%xmm7,%xmm7 + xorl %ecx,%ebx + shrdl $7,%eax,%eax + movl %ebp,%edi + xorl %ebx,%esi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %eax,%edi + xorl %ebx,%eax + addl %ebp,%edx + addl 60(%rsp),%ecx + andl %eax,%edi + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + movl %edx,%esi + xorl %eax,%edi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + vpalignr $8,%xmm6,%xmm7,%xmm8 + vpxor %xmm4,%xmm0,%xmm0 + addl 0(%rsp),%ebx + andl %ebp,%esi + xorl %eax,%ebp + shrdl $7,%edx,%edx + vpxor %xmm1,%xmm0,%xmm0 + movl %ecx,%edi + xorl %ebp,%esi + vpaddd %xmm7,%xmm11,%xmm9 + shldl $5,%ecx,%ecx + addl %esi,%ebx + vpxor %xmm8,%xmm0,%xmm0 + xorl %edx,%edi + xorl %ebp,%edx + addl %ecx,%ebx + addl 4(%rsp),%eax + vpsrld $30,%xmm0,%xmm8 + vmovdqa %xmm9,48(%rsp) + andl %edx,%edi + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + movl %ebx,%esi + vpslld $2,%xmm0,%xmm0 + xorl %edx,%edi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %ecx,%esi + xorl %edx,%ecx + addl %ebx,%eax + addl 8(%rsp),%ebp + andl %ecx,%esi + vpor %xmm8,%xmm0,%xmm0 + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + movl %eax,%edi + xorl %ecx,%esi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ebx,%edi + xorl %ecx,%ebx + addl %eax,%ebp + addl 12(%rsp),%edx + andl %ebx,%edi + xorl %ecx,%ebx + shrdl $7,%eax,%eax + movl %ebp,%esi + xorl %ebx,%edi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %eax,%esi + xorl %ebx,%eax + addl %ebp,%edx + vpalignr $8,%xmm7,%xmm0,%xmm8 + vpxor %xmm5,%xmm1,%xmm1 + addl 16(%rsp),%ecx + andl %eax,%esi + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + vpxor %xmm2,%xmm1,%xmm1 + movl %edx,%edi + xorl %eax,%esi + vpaddd %xmm0,%xmm11,%xmm9 + shldl $5,%edx,%edx + addl %esi,%ecx + vpxor %xmm8,%xmm1,%xmm1 + xorl %ebp,%edi + xorl %eax,%ebp + addl %edx,%ecx + addl 20(%rsp),%ebx + vpsrld $30,%xmm1,%xmm8 + vmovdqa %xmm9,0(%rsp) + andl %ebp,%edi + xorl %eax,%ebp + shrdl $7,%edx,%edx + movl %ecx,%esi + vpslld $2,%xmm1,%xmm1 + xorl %ebp,%edi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %edx,%esi + xorl %ebp,%edx + addl %ecx,%ebx + addl 24(%rsp),%eax + andl %edx,%esi + vpor %xmm8,%xmm1,%xmm1 + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + movl %ebx,%edi + xorl %edx,%esi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %ecx,%edi + xorl %edx,%ecx + addl %ebx,%eax + addl 28(%rsp),%ebp + andl %ecx,%edi + xorl %edx,%ecx + shrdl $7,%ebx,%ebx + movl %eax,%esi + xorl %ecx,%edi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ebx,%esi + xorl %ecx,%ebx + addl %eax,%ebp + vpalignr $8,%xmm0,%xmm1,%xmm8 + vpxor %xmm6,%xmm2,%xmm2 + addl 32(%rsp),%edx + andl %ebx,%esi + xorl %ecx,%ebx + shrdl $7,%eax,%eax + vpxor %xmm3,%xmm2,%xmm2 + movl %ebp,%edi + xorl %ebx,%esi + vpaddd %xmm1,%xmm11,%xmm9 + shldl $5,%ebp,%ebp + addl %esi,%edx + vpxor %xmm8,%xmm2,%xmm2 + xorl %eax,%edi + xorl %ebx,%eax + addl %ebp,%edx + addl 36(%rsp),%ecx + vpsrld $30,%xmm2,%xmm8 + vmovdqa %xmm9,16(%rsp) + andl %eax,%edi + xorl %ebx,%eax + shrdl $7,%ebp,%ebp + movl %edx,%esi + vpslld $2,%xmm2,%xmm2 + xorl %eax,%edi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %ebp,%esi + xorl %eax,%ebp + addl %edx,%ecx + addl 40(%rsp),%ebx + andl %ebp,%esi + vpor %xmm8,%xmm2,%xmm2 + xorl %eax,%ebp + shrdl $7,%edx,%edx + movl %ecx,%edi + xorl %ebp,%esi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %edx,%edi + xorl %ebp,%edx + addl %ecx,%ebx + addl 44(%rsp),%eax + andl %edx,%edi + xorl %ebp,%edx + shrdl $7,%ecx,%ecx + movl %ebx,%esi + xorl %edx,%edi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + addl %ebx,%eax + vpalignr $8,%xmm1,%xmm2,%xmm8 + vpxor %xmm7,%xmm3,%xmm3 + addl 48(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + vpxor %xmm4,%xmm3,%xmm3 + addl %esi,%ebp + xorl %ecx,%edi + vpaddd %xmm2,%xmm11,%xmm9 + shrdl $7,%ebx,%ebx + addl %eax,%ebp + vpxor %xmm8,%xmm3,%xmm3 + addl 52(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + vpsrld $30,%xmm3,%xmm8 + vmovdqa %xmm9,32(%rsp) + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + vpslld $2,%xmm3,%xmm3 + addl 56(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vpor %xmm8,%xmm3,%xmm3 + addl 60(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 0(%rsp),%eax + vpaddd %xmm3,%xmm11,%xmm9 + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + vmovdqa %xmm9,48(%rsp) + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 4(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 8(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 12(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + cmpq %r10,%r9 + je L$done_avx + vmovdqa 64(%r14),%xmm6 + vmovdqa -64(%r14),%xmm11 + vmovdqu 0(%r9),%xmm0 + vmovdqu 16(%r9),%xmm1 + vmovdqu 32(%r9),%xmm2 + vmovdqu 48(%r9),%xmm3 + vpshufb %xmm6,%xmm0,%xmm0 + addq $64,%r9 + addl 16(%rsp),%ebx + xorl %ebp,%esi + vpshufb %xmm6,%xmm1,%xmm1 + movl %ecx,%edi + shldl $5,%ecx,%ecx + vpaddd %xmm11,%xmm0,%xmm4 + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + vmovdqa %xmm4,0(%rsp) + addl 20(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 24(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ecx,%edi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 28(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 32(%rsp),%ecx + xorl %eax,%esi + vpshufb %xmm6,%xmm2,%xmm2 + movl %edx,%edi + shldl $5,%edx,%edx + vpaddd %xmm11,%xmm1,%xmm5 + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + vmovdqa %xmm5,16(%rsp) + addl 36(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 40(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 44(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 48(%rsp),%edx + xorl %ebx,%esi + vpshufb %xmm6,%xmm3,%xmm3 + movl %ebp,%edi + shldl $5,%ebp,%ebp + vpaddd %xmm11,%xmm2,%xmm6 + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + vmovdqa %xmm6,32(%rsp) + addl 52(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + addl 56(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 60(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 0(%r8),%eax + addl 4(%r8),%esi + addl 8(%r8),%ecx + addl 12(%r8),%edx + movl %eax,0(%r8) + addl 16(%r8),%ebp + movl %esi,4(%r8) + movl %esi,%ebx + movl %ecx,8(%r8) + movl %ecx,%edi + movl %edx,12(%r8) + xorl %edx,%edi + movl %ebp,16(%r8) + andl %edi,%esi + jmp L$oop_avx + +.p2align 4 +L$done_avx: + addl 16(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 20(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + xorl %edx,%esi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 24(%rsp),%ebp + xorl %ecx,%esi + movl %eax,%edi + shldl $5,%eax,%eax + addl %esi,%ebp + xorl %ecx,%edi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 28(%rsp),%edx + xorl %ebx,%edi + movl %ebp,%esi + shldl $5,%ebp,%ebp + addl %edi,%edx + xorl %ebx,%esi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 32(%rsp),%ecx + xorl %eax,%esi + movl %edx,%edi + shldl $5,%edx,%edx + addl %esi,%ecx + xorl %eax,%edi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + addl 36(%rsp),%ebx + xorl %ebp,%edi + movl %ecx,%esi + shldl $5,%ecx,%ecx + addl %edi,%ebx + xorl %ebp,%esi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 40(%rsp),%eax + xorl %edx,%esi + movl %ebx,%edi + shldl $5,%ebx,%ebx + addl %esi,%eax + xorl %edx,%edi + shrdl $7,%ecx,%ecx + addl %ebx,%eax + addl 44(%rsp),%ebp + xorl %ecx,%edi + movl %eax,%esi + shldl $5,%eax,%eax + addl %edi,%ebp + xorl %ecx,%esi + shrdl $7,%ebx,%ebx + addl %eax,%ebp + addl 48(%rsp),%edx + xorl %ebx,%esi + movl %ebp,%edi + shldl $5,%ebp,%ebp + addl %esi,%edx + xorl %ebx,%edi + shrdl $7,%eax,%eax + addl %ebp,%edx + addl 52(%rsp),%ecx + xorl %eax,%edi + movl %edx,%esi + shldl $5,%edx,%edx + addl %edi,%ecx + xorl %eax,%esi + shrdl $7,%ebp,%ebp + addl %edx,%ecx + addl 56(%rsp),%ebx + xorl %ebp,%esi + movl %ecx,%edi + shldl $5,%ecx,%ecx + addl %esi,%ebx + xorl %ebp,%edi + shrdl $7,%edx,%edx + addl %ecx,%ebx + addl 60(%rsp),%eax + xorl %edx,%edi + movl %ebx,%esi + shldl $5,%ebx,%ebx + addl %edi,%eax + shrdl $7,%ecx,%ecx + addl %ebx,%eax + vzeroupper + + addl 0(%r8),%eax + addl 4(%r8),%esi + addl 8(%r8),%ecx + movl %eax,0(%r8) + addl 12(%r8),%edx + movl %esi,4(%r8) + addl 16(%r8),%ebp + movl %ecx,8(%r8) + movl %edx,12(%r8) + movl %ebp,16(%r8) + movq -40(%r11),%r14 + + movq -32(%r11),%r13 + + movq -24(%r11),%r12 + + movq -16(%r11),%rbp + + movq -8(%r11),%rbx + + leaq (%r11),%rsp + +L$epilogue_avx: + .byte 0xf3,0xc3 + + + +.p2align 4 +sha1_block_data_order_avx2: +_avx2_shortcut: + + movq %rsp,%r11 + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + vzeroupper + movq %rdi,%r8 + movq %rsi,%r9 + movq %rdx,%r10 + + leaq -640(%rsp),%rsp + shlq $6,%r10 + leaq 64(%r9),%r13 + andq $-128,%rsp + addq %r9,%r10 + leaq K_XX_XX+64(%rip),%r14 + + movl 0(%r8),%eax + cmpq %r10,%r13 + cmovaeq %r9,%r13 + movl 4(%r8),%ebp + movl 8(%r8),%ecx + movl 12(%r8),%edx + movl 16(%r8),%esi + vmovdqu 64(%r14),%ymm6 + + vmovdqu (%r9),%xmm0 + vmovdqu 16(%r9),%xmm1 + vmovdqu 32(%r9),%xmm2 + vmovdqu 48(%r9),%xmm3 + leaq 64(%r9),%r9 + vinserti128 $1,(%r13),%ymm0,%ymm0 + vinserti128 $1,16(%r13),%ymm1,%ymm1 + vpshufb %ymm6,%ymm0,%ymm0 + vinserti128 $1,32(%r13),%ymm2,%ymm2 + vpshufb %ymm6,%ymm1,%ymm1 + vinserti128 $1,48(%r13),%ymm3,%ymm3 + vpshufb %ymm6,%ymm2,%ymm2 + vmovdqu -64(%r14),%ymm11 + vpshufb %ymm6,%ymm3,%ymm3 + + vpaddd %ymm11,%ymm0,%ymm4 + vpaddd %ymm11,%ymm1,%ymm5 + vmovdqu %ymm4,0(%rsp) + vpaddd %ymm11,%ymm2,%ymm6 + vmovdqu %ymm5,32(%rsp) + vpaddd %ymm11,%ymm3,%ymm7 + vmovdqu %ymm6,64(%rsp) + vmovdqu %ymm7,96(%rsp) + vpalignr $8,%ymm0,%ymm1,%ymm4 + vpsrldq $4,%ymm3,%ymm8 + vpxor %ymm0,%ymm4,%ymm4 + vpxor %ymm2,%ymm8,%ymm8 + vpxor %ymm8,%ymm4,%ymm4 + vpsrld $31,%ymm4,%ymm8 + vpslldq $12,%ymm4,%ymm10 + vpaddd %ymm4,%ymm4,%ymm4 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm4,%ymm4 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm4,%ymm4 + vpxor %ymm10,%ymm4,%ymm4 + vpaddd %ymm11,%ymm4,%ymm9 + vmovdqu %ymm9,128(%rsp) + vpalignr $8,%ymm1,%ymm2,%ymm5 + vpsrldq $4,%ymm4,%ymm8 + vpxor %ymm1,%ymm5,%ymm5 + vpxor %ymm3,%ymm8,%ymm8 + vpxor %ymm8,%ymm5,%ymm5 + vpsrld $31,%ymm5,%ymm8 + vmovdqu -32(%r14),%ymm11 + vpslldq $12,%ymm5,%ymm10 + vpaddd %ymm5,%ymm5,%ymm5 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm5,%ymm5 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm5,%ymm5 + vpxor %ymm10,%ymm5,%ymm5 + vpaddd %ymm11,%ymm5,%ymm9 + vmovdqu %ymm9,160(%rsp) + vpalignr $8,%ymm2,%ymm3,%ymm6 + vpsrldq $4,%ymm5,%ymm8 + vpxor %ymm2,%ymm6,%ymm6 + vpxor %ymm4,%ymm8,%ymm8 + vpxor %ymm8,%ymm6,%ymm6 + vpsrld $31,%ymm6,%ymm8 + vpslldq $12,%ymm6,%ymm10 + vpaddd %ymm6,%ymm6,%ymm6 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm6,%ymm6 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm6,%ymm6 + vpxor %ymm10,%ymm6,%ymm6 + vpaddd %ymm11,%ymm6,%ymm9 + vmovdqu %ymm9,192(%rsp) + vpalignr $8,%ymm3,%ymm4,%ymm7 + vpsrldq $4,%ymm6,%ymm8 + vpxor %ymm3,%ymm7,%ymm7 + vpxor %ymm5,%ymm8,%ymm8 + vpxor %ymm8,%ymm7,%ymm7 + vpsrld $31,%ymm7,%ymm8 + vpslldq $12,%ymm7,%ymm10 + vpaddd %ymm7,%ymm7,%ymm7 + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm7,%ymm7 + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm7,%ymm7 + vpxor %ymm10,%ymm7,%ymm7 + vpaddd %ymm11,%ymm7,%ymm9 + vmovdqu %ymm9,224(%rsp) + leaq 128(%rsp),%r13 + jmp L$oop_avx2 +.p2align 5 +L$oop_avx2: + rorxl $2,%ebp,%ebx + andnl %edx,%ebp,%edi + andl %ecx,%ebp + xorl %edi,%ebp + jmp L$align32_1 +.p2align 5 +L$align32_1: + vpalignr $8,%ymm6,%ymm7,%ymm8 + vpxor %ymm4,%ymm0,%ymm0 + addl -128(%r13),%esi + andnl %ecx,%eax,%edi + vpxor %ymm1,%ymm0,%ymm0 + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + vpxor %ymm8,%ymm0,%ymm0 + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + vpsrld $30,%ymm0,%ymm8 + vpslld $2,%ymm0,%ymm0 + addl -124(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + vpor %ymm8,%ymm0,%ymm0 + addl %r12d,%edx + xorl %edi,%esi + addl -120(%r13),%ecx + andnl %ebp,%edx,%edi + vpaddd %ymm11,%ymm0,%ymm9 + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + vmovdqu %ymm9,256(%rsp) + addl %r12d,%ecx + xorl %edi,%edx + addl -116(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl -96(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + vpalignr $8,%ymm7,%ymm0,%ymm8 + vpxor %ymm5,%ymm1,%ymm1 + addl -92(%r13),%eax + andnl %edx,%ebp,%edi + vpxor %ymm2,%ymm1,%ymm1 + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + vpxor %ymm8,%ymm1,%ymm1 + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + vpsrld $30,%ymm1,%ymm8 + vpslld $2,%ymm1,%ymm1 + addl -88(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + vpor %ymm8,%ymm1,%ymm1 + addl %r12d,%esi + xorl %edi,%eax + addl -84(%r13),%edx + andnl %ebx,%esi,%edi + vpaddd %ymm11,%ymm1,%ymm9 + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + vmovdqu %ymm9,288(%rsp) + addl %r12d,%edx + xorl %edi,%esi + addl -64(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -60(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + vpalignr $8,%ymm0,%ymm1,%ymm8 + vpxor %ymm6,%ymm2,%ymm2 + addl -56(%r13),%ebp + andnl %esi,%ebx,%edi + vpxor %ymm3,%ymm2,%ymm2 + vmovdqu 0(%r14),%ymm11 + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + vpxor %ymm8,%ymm2,%ymm2 + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + vpsrld $30,%ymm2,%ymm8 + vpslld $2,%ymm2,%ymm2 + addl -52(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + vpor %ymm8,%ymm2,%ymm2 + addl %r12d,%eax + xorl %edi,%ebp + addl -32(%r13),%esi + andnl %ecx,%eax,%edi + vpaddd %ymm11,%ymm2,%ymm9 + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + vmovdqu %ymm9,320(%rsp) + addl %r12d,%esi + xorl %edi,%eax + addl -28(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -24(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + vpalignr $8,%ymm1,%ymm2,%ymm8 + vpxor %ymm7,%ymm3,%ymm3 + addl -20(%r13),%ebx + andnl %eax,%ecx,%edi + vpxor %ymm4,%ymm3,%ymm3 + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + vpxor %ymm8,%ymm3,%ymm3 + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + vpsrld $30,%ymm3,%ymm8 + vpslld $2,%ymm3,%ymm3 + addl 0(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + vpor %ymm8,%ymm3,%ymm3 + addl %r12d,%ebp + xorl %edi,%ebx + addl 4(%r13),%eax + andnl %edx,%ebp,%edi + vpaddd %ymm11,%ymm3,%ymm9 + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + vmovdqu %ymm9,352(%rsp) + addl %r12d,%eax + xorl %edi,%ebp + addl 8(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl 12(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + vpalignr $8,%ymm2,%ymm3,%ymm8 + vpxor %ymm0,%ymm4,%ymm4 + addl 32(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + vpxor %ymm5,%ymm4,%ymm4 + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + vpxor %ymm8,%ymm4,%ymm4 + addl %r12d,%ecx + xorl %ebp,%edx + addl 36(%r13),%ebx + vpsrld $30,%ymm4,%ymm8 + vpslld $2,%ymm4,%ymm4 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + vpor %ymm8,%ymm4,%ymm4 + addl 40(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + vpaddd %ymm11,%ymm4,%ymm9 + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 44(%r13),%eax + vmovdqu %ymm9,384(%rsp) + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl 64(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vpalignr $8,%ymm3,%ymm4,%ymm8 + vpxor %ymm1,%ymm5,%ymm5 + addl 68(%r13),%edx + leal (%rdx,%rax,1),%edx + vpxor %ymm6,%ymm5,%ymm5 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + vpxor %ymm8,%ymm5,%ymm5 + addl %r12d,%edx + xorl %ebx,%esi + addl 72(%r13),%ecx + vpsrld $30,%ymm5,%ymm8 + vpslld $2,%ymm5,%ymm5 + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + vpor %ymm8,%ymm5,%ymm5 + addl 76(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + vpaddd %ymm11,%ymm5,%ymm9 + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl 96(%r13),%ebp + vmovdqu %ymm9,416(%rsp) + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 100(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpalignr $8,%ymm4,%ymm5,%ymm8 + vpxor %ymm2,%ymm6,%ymm6 + addl 104(%r13),%esi + leal (%rsi,%rbp,1),%esi + vpxor %ymm7,%ymm6,%ymm6 + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + vpxor %ymm8,%ymm6,%ymm6 + addl %r12d,%esi + xorl %ecx,%eax + addl 108(%r13),%edx + leaq 256(%r13),%r13 + vpsrld $30,%ymm6,%ymm8 + vpslld $2,%ymm6,%ymm6 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + vpor %ymm8,%ymm6,%ymm6 + addl -128(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + vpaddd %ymm11,%ymm6,%ymm9 + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -124(%r13),%ebx + vmovdqu %ymm9,448(%rsp) + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -120(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vpalignr $8,%ymm5,%ymm6,%ymm8 + vpxor %ymm3,%ymm7,%ymm7 + addl -116(%r13),%eax + leal (%rax,%rbx,1),%eax + vpxor %ymm0,%ymm7,%ymm7 + vmovdqu 32(%r14),%ymm11 + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + vpxor %ymm8,%ymm7,%ymm7 + addl %r12d,%eax + xorl %edx,%ebp + addl -96(%r13),%esi + vpsrld $30,%ymm7,%ymm8 + vpslld $2,%ymm7,%ymm7 + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vpor %ymm8,%ymm7,%ymm7 + addl -92(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpaddd %ymm11,%ymm7,%ymm9 + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -88(%r13),%ecx + vmovdqu %ymm9,480(%rsp) + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -84(%r13),%ebx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + jmp L$align32_2 +.p2align 5 +L$align32_2: + vpalignr $8,%ymm6,%ymm7,%ymm8 + vpxor %ymm4,%ymm0,%ymm0 + addl -64(%r13),%ebp + xorl %esi,%ecx + vpxor %ymm1,%ymm0,%ymm0 + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + vpxor %ymm8,%ymm0,%ymm0 + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + vpsrld $30,%ymm0,%ymm8 + vpslld $2,%ymm0,%ymm0 + addl %r12d,%ebp + andl %edi,%ebx + addl -60(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + vpor %ymm8,%ymm0,%ymm0 + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + vpaddd %ymm11,%ymm0,%ymm9 + addl %r12d,%eax + andl %edi,%ebp + addl -56(%r13),%esi + xorl %ecx,%ebp + vmovdqu %ymm9,512(%rsp) + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl -52(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + andl %edi,%esi + addl -32(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + andl %edi,%edx + vpalignr $8,%ymm7,%ymm0,%ymm8 + vpxor %ymm5,%ymm1,%ymm1 + addl -28(%r13),%ebx + xorl %eax,%edx + vpxor %ymm2,%ymm1,%ymm1 + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + vpxor %ymm8,%ymm1,%ymm1 + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + vpsrld $30,%ymm1,%ymm8 + vpslld $2,%ymm1,%ymm1 + addl %r12d,%ebx + andl %edi,%ecx + addl -24(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + vpor %ymm8,%ymm1,%ymm1 + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + vpaddd %ymm11,%ymm1,%ymm9 + addl %r12d,%ebp + andl %edi,%ebx + addl -20(%r13),%eax + xorl %edx,%ebx + vmovdqu %ymm9,544(%rsp) + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 0(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl 4(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + andl %edi,%esi + vpalignr $8,%ymm0,%ymm1,%ymm8 + vpxor %ymm6,%ymm2,%ymm2 + addl 8(%r13),%ecx + xorl %ebp,%esi + vpxor %ymm3,%ymm2,%ymm2 + movl %eax,%edi + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + vpxor %ymm8,%ymm2,%ymm2 + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + vpsrld $30,%ymm2,%ymm8 + vpslld $2,%ymm2,%ymm2 + addl %r12d,%ecx + andl %edi,%edx + addl 12(%r13),%ebx + xorl %eax,%edx + movl %esi,%edi + xorl %eax,%edi + vpor %ymm8,%ymm2,%ymm2 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + vpaddd %ymm11,%ymm2,%ymm9 + addl %r12d,%ebx + andl %edi,%ecx + addl 32(%r13),%ebp + xorl %esi,%ecx + vmovdqu %ymm9,576(%rsp) + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 36(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 40(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + vpalignr $8,%ymm1,%ymm2,%ymm8 + vpxor %ymm7,%ymm3,%ymm3 + addl 44(%r13),%edx + xorl %ebx,%eax + vpxor %ymm4,%ymm3,%ymm3 + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + vpxor %ymm8,%ymm3,%ymm3 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + vpsrld $30,%ymm3,%ymm8 + vpslld $2,%ymm3,%ymm3 + addl %r12d,%edx + andl %edi,%esi + addl 64(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + xorl %ebp,%edi + vpor %ymm8,%ymm3,%ymm3 + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + vpaddd %ymm11,%ymm3,%ymm9 + addl %r12d,%ecx + andl %edi,%edx + addl 68(%r13),%ebx + xorl %eax,%edx + vmovdqu %ymm9,608(%rsp) + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + addl 72(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 76(%r13),%eax + xorl %edx,%ebx + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl 96(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl 100(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl 104(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl 108(%r13),%ebx + leaq 256(%r13),%r13 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -128(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -124(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -120(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -116(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -96(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -92(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -88(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -84(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -64(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -60(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -56(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -52(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -32(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -28(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -24(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -20(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + addl %r12d,%edx + leaq 128(%r9),%r13 + leaq 128(%r9),%rdi + cmpq %r10,%r13 + cmovaeq %r9,%r13 + + + addl 0(%r8),%edx + addl 4(%r8),%esi + addl 8(%r8),%ebp + movl %edx,0(%r8) + addl 12(%r8),%ebx + movl %esi,4(%r8) + movl %edx,%eax + addl 16(%r8),%ecx + movl %ebp,%r12d + movl %ebp,8(%r8) + movl %ebx,%edx + + movl %ebx,12(%r8) + movl %esi,%ebp + movl %ecx,16(%r8) + + movl %ecx,%esi + movl %r12d,%ecx + + + cmpq %r10,%r9 + je L$done_avx2 + vmovdqu 64(%r14),%ymm6 + cmpq %r10,%rdi + ja L$ast_avx2 + + vmovdqu -64(%rdi),%xmm0 + vmovdqu -48(%rdi),%xmm1 + vmovdqu -32(%rdi),%xmm2 + vmovdqu -16(%rdi),%xmm3 + vinserti128 $1,0(%r13),%ymm0,%ymm0 + vinserti128 $1,16(%r13),%ymm1,%ymm1 + vinserti128 $1,32(%r13),%ymm2,%ymm2 + vinserti128 $1,48(%r13),%ymm3,%ymm3 + jmp L$ast_avx2 + +.p2align 5 +L$ast_avx2: + leaq 128+16(%rsp),%r13 + rorxl $2,%ebp,%ebx + andnl %edx,%ebp,%edi + andl %ecx,%ebp + xorl %edi,%ebp + subq $-128,%r9 + addl -128(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl -124(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -120(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -116(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl -96(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + addl -92(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + addl -88(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl -84(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -64(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -60(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl -56(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + addl -52(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + addl -32(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl -28(%r13),%edx + andnl %ebx,%esi,%edi + addl %eax,%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + andl %ebp,%esi + addl %r12d,%edx + xorl %edi,%esi + addl -24(%r13),%ecx + andnl %ebp,%edx,%edi + addl %esi,%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + andl %eax,%edx + addl %r12d,%ecx + xorl %edi,%edx + addl -20(%r13),%ebx + andnl %eax,%ecx,%edi + addl %edx,%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + andl %esi,%ecx + addl %r12d,%ebx + xorl %edi,%ecx + addl 0(%r13),%ebp + andnl %esi,%ebx,%edi + addl %ecx,%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + andl %edx,%ebx + addl %r12d,%ebp + xorl %edi,%ebx + addl 4(%r13),%eax + andnl %edx,%ebp,%edi + addl %ebx,%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + andl %ecx,%ebp + addl %r12d,%eax + xorl %edi,%ebp + addl 8(%r13),%esi + andnl %ecx,%eax,%edi + addl %ebp,%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + andl %ebx,%eax + addl %r12d,%esi + xorl %edi,%eax + addl 12(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl 32(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl 36(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl 40(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 44(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl 64(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vmovdqu -64(%r14),%ymm11 + vpshufb %ymm6,%ymm0,%ymm0 + addl 68(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl 72(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl 76(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl 96(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl 100(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpshufb %ymm6,%ymm1,%ymm1 + vpaddd %ymm11,%ymm0,%ymm8 + addl 104(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl 108(%r13),%edx + leaq 256(%r13),%r13 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -128(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -124(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -120(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vmovdqu %ymm8,0(%rsp) + vpshufb %ymm6,%ymm2,%ymm2 + vpaddd %ymm11,%ymm1,%ymm9 + addl -116(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -96(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -92(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + addl -88(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -84(%r13),%ebx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + vmovdqu %ymm9,32(%rsp) + vpshufb %ymm6,%ymm3,%ymm3 + vpaddd %ymm11,%ymm2,%ymm6 + addl -64(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl -60(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl -56(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl -52(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + andl %edi,%esi + addl -32(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + andl %edi,%edx + jmp L$align32_3 +.p2align 5 +L$align32_3: + vmovdqu %ymm6,64(%rsp) + vpaddd %ymm11,%ymm3,%ymm7 + addl -28(%r13),%ebx + xorl %eax,%edx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + addl -24(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl -20(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 0(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + addl 4(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + andl %edi,%esi + vmovdqu %ymm7,96(%rsp) + addl 8(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + andl %edi,%edx + addl 12(%r13),%ebx + xorl %eax,%edx + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + andl %edi,%ecx + addl 32(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 36(%r13),%eax + xorl %edx,%ebx + movl %ecx,%edi + xorl %edx,%edi + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + andl %edi,%ebp + addl 40(%r13),%esi + xorl %ecx,%ebp + movl %ebx,%edi + xorl %ecx,%edi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + andl %edi,%eax + vpalignr $8,%ymm0,%ymm1,%ymm4 + addl 44(%r13),%edx + xorl %ebx,%eax + movl %ebp,%edi + xorl %ebx,%edi + vpsrldq $4,%ymm3,%ymm8 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpxor %ymm0,%ymm4,%ymm4 + vpxor %ymm2,%ymm8,%ymm8 + xorl %ebp,%esi + addl %r12d,%edx + vpxor %ymm8,%ymm4,%ymm4 + andl %edi,%esi + addl 64(%r13),%ecx + xorl %ebp,%esi + movl %eax,%edi + vpsrld $31,%ymm4,%ymm8 + xorl %ebp,%edi + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + vpslldq $12,%ymm4,%ymm10 + vpaddd %ymm4,%ymm4,%ymm4 + rorxl $2,%edx,%esi + xorl %eax,%edx + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm4,%ymm4 + addl %r12d,%ecx + andl %edi,%edx + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm4,%ymm4 + addl 68(%r13),%ebx + xorl %eax,%edx + vpxor %ymm10,%ymm4,%ymm4 + movl %esi,%edi + xorl %eax,%edi + leal (%rbx,%rdx,1),%ebx + vpaddd %ymm11,%ymm4,%ymm9 + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + vmovdqu %ymm9,128(%rsp) + addl %r12d,%ebx + andl %edi,%ecx + addl 72(%r13),%ebp + xorl %esi,%ecx + movl %edx,%edi + xorl %esi,%edi + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + andl %edi,%ebx + addl 76(%r13),%eax + xorl %edx,%ebx + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpalignr $8,%ymm1,%ymm2,%ymm5 + addl 96(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + vpsrldq $4,%ymm4,%ymm8 + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + vpxor %ymm1,%ymm5,%ymm5 + vpxor %ymm3,%ymm8,%ymm8 + addl 100(%r13),%edx + leal (%rdx,%rax,1),%edx + vpxor %ymm8,%ymm5,%ymm5 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + xorl %ebp,%esi + addl %r12d,%edx + vpsrld $31,%ymm5,%ymm8 + vmovdqu -32(%r14),%ymm11 + xorl %ebx,%esi + addl 104(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + vpslldq $12,%ymm5,%ymm10 + vpaddd %ymm5,%ymm5,%ymm5 + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm5,%ymm5 + xorl %eax,%edx + addl %r12d,%ecx + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm5,%ymm5 + xorl %ebp,%edx + addl 108(%r13),%ebx + leaq 256(%r13),%r13 + vpxor %ymm10,%ymm5,%ymm5 + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + vpaddd %ymm11,%ymm5,%ymm9 + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + vmovdqu %ymm9,160(%rsp) + addl -128(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vpalignr $8,%ymm2,%ymm3,%ymm6 + addl -124(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + vpsrldq $4,%ymm5,%ymm8 + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + vpxor %ymm2,%ymm6,%ymm6 + vpxor %ymm4,%ymm8,%ymm8 + addl -120(%r13),%esi + leal (%rsi,%rbp,1),%esi + vpxor %ymm8,%ymm6,%ymm6 + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + vpsrld $31,%ymm6,%ymm8 + xorl %ecx,%eax + addl -116(%r13),%edx + leal (%rdx,%rax,1),%edx + vpslldq $12,%ymm6,%ymm10 + vpaddd %ymm6,%ymm6,%ymm6 + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm6,%ymm6 + xorl %ebp,%esi + addl %r12d,%edx + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm6,%ymm6 + xorl %ebx,%esi + addl -96(%r13),%ecx + vpxor %ymm10,%ymm6,%ymm6 + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + vpaddd %ymm11,%ymm6,%ymm9 + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + vmovdqu %ymm9,192(%rsp) + addl -92(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + vpalignr $8,%ymm3,%ymm4,%ymm7 + addl -88(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + vpsrldq $4,%ymm6,%ymm8 + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + vpxor %ymm3,%ymm7,%ymm7 + vpxor %ymm5,%ymm8,%ymm8 + addl -84(%r13),%eax + leal (%rax,%rbx,1),%eax + vpxor %ymm8,%ymm7,%ymm7 + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + vpsrld $31,%ymm7,%ymm8 + xorl %edx,%ebp + addl -64(%r13),%esi + leal (%rsi,%rbp,1),%esi + vpslldq $12,%ymm7,%ymm10 + vpaddd %ymm7,%ymm7,%ymm7 + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + vpsrld $30,%ymm10,%ymm9 + vpor %ymm8,%ymm7,%ymm7 + xorl %ebx,%eax + addl %r12d,%esi + vpslld $2,%ymm10,%ymm10 + vpxor %ymm9,%ymm7,%ymm7 + xorl %ecx,%eax + addl -60(%r13),%edx + vpxor %ymm10,%ymm7,%ymm7 + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + rorxl $2,%esi,%eax + vpaddd %ymm11,%ymm7,%ymm9 + xorl %ebp,%esi + addl %r12d,%edx + xorl %ebx,%esi + vmovdqu %ymm9,224(%rsp) + addl -56(%r13),%ecx + leal (%rcx,%rsi,1),%ecx + rorxl $27,%edx,%r12d + rorxl $2,%edx,%esi + xorl %eax,%edx + addl %r12d,%ecx + xorl %ebp,%edx + addl -52(%r13),%ebx + leal (%rbx,%rdx,1),%ebx + rorxl $27,%ecx,%r12d + rorxl $2,%ecx,%edx + xorl %esi,%ecx + addl %r12d,%ebx + xorl %eax,%ecx + addl -32(%r13),%ebp + leal (%rcx,%rbp,1),%ebp + rorxl $27,%ebx,%r12d + rorxl $2,%ebx,%ecx + xorl %edx,%ebx + addl %r12d,%ebp + xorl %esi,%ebx + addl -28(%r13),%eax + leal (%rax,%rbx,1),%eax + rorxl $27,%ebp,%r12d + rorxl $2,%ebp,%ebx + xorl %ecx,%ebp + addl %r12d,%eax + xorl %edx,%ebp + addl -24(%r13),%esi + leal (%rsi,%rbp,1),%esi + rorxl $27,%eax,%r12d + rorxl $2,%eax,%ebp + xorl %ebx,%eax + addl %r12d,%esi + xorl %ecx,%eax + addl -20(%r13),%edx + leal (%rdx,%rax,1),%edx + rorxl $27,%esi,%r12d + addl %r12d,%edx + leaq 128(%rsp),%r13 + + + addl 0(%r8),%edx + addl 4(%r8),%esi + addl 8(%r8),%ebp + movl %edx,0(%r8) + addl 12(%r8),%ebx + movl %esi,4(%r8) + movl %edx,%eax + addl 16(%r8),%ecx + movl %ebp,%r12d + movl %ebp,8(%r8) + movl %ebx,%edx + + movl %ebx,12(%r8) + movl %esi,%ebp + movl %ecx,16(%r8) + + movl %ecx,%esi + movl %r12d,%ecx + + + cmpq %r10,%r9 + jbe L$oop_avx2 + +L$done_avx2: + vzeroupper + movq -40(%r11),%r14 + + movq -32(%r11),%r13 + + movq -24(%r11),%r12 + + movq -16(%r11),%rbp + + movq -8(%r11),%rbx + + leaq (%r11),%rsp + +L$epilogue_avx2: + .byte 0xf3,0xc3 + + .p2align 6 K_XX_XX: -.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 -.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 -.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc -.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 -.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 +.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 +.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 +.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 +.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc +.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc +.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 +.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0 .byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .p2align 6 diff --git a/lib/accelerated/x86/macosx/sha256-ssse3-x86.s b/lib/accelerated/x86/macosx/sha256-ssse3-x86.s index 300212c915..8d257109ca 100644 --- a/lib/accelerated/x86/macosx/sha256-ssse3-x86.s +++ b/lib/accelerated/x86/macosx/sha256-ssse3-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "sha512-586.s" .text .globl _sha256_block_data_order .align 4 @@ -63,20 +62,6 @@ L000pic_point: movl %edi,4(%esp) movl %eax,8(%esp) movl %ebx,12(%esp) - movl L__gnutls_x86_cpuid_s$non_lazy_ptr-L001K256(%ebp),%edx - movl (%edx),%ecx - movl 4(%edx),%edx - testl $1048576,%ecx - jnz L002loop - testl $2048,%edx - andl $1073741824,%ecx - andl $268435456,%edx - orl %edx,%ecx - cmpl $1342177280,%ecx - je L003loop_shrd - subl %edi,%eax - cmpl $256,%eax - jae L004unrolled jmp L002loop .align 4,0x90 L002loop: @@ -148,7 +133,7 @@ L002loop: movl %ecx,28(%esp) movl %edi,32(%esp) .align 4,0x90 -L00500_15: +L00300_15: movl %edx,%ecx movl 24(%esp),%esi rorl $14,%ecx @@ -186,11 +171,11 @@ L00500_15: addl $4,%ebp addl %ebx,%eax cmpl $3248222580,%esi - jne L00500_15 + jne L00300_15 movl 156(%esp),%ecx - jmp L00616_63 + jmp L00416_63 .align 4,0x90 -L00616_63: +L00416_63: movl %ecx,%ebx movl 104(%esp),%esi rorl $11,%ecx @@ -245,7 +230,7 @@ L00616_63: addl $4,%ebp addl %ebx,%eax cmpl $3329325298,%esi - jne L00616_63 + jne L00416_63 movl 356(%esp),%esi movl 8(%esp),%ebx movl 16(%esp),%ecx @@ -279,8 +264,8 @@ L00616_63: popl %ebx popl %ebp ret -.align 4,0x90 -L003loop_shrd: +.align 5,0x90 +L005loop_shrd: movl (%edi),%eax movl 4(%edi),%ebx movl 8(%edi),%ecx @@ -349,7 +334,7 @@ L003loop_shrd: movl %ecx,28(%esp) movl %edi,32(%esp) .align 4,0x90 -L00700_15_shrd: +L00600_15_shrd: movl %edx,%ecx movl 24(%esp),%esi shrdl $14,%ecx,%ecx @@ -387,11 +372,11 @@ L00700_15_shrd: addl $4,%ebp addl %ebx,%eax cmpl $3248222580,%esi - jne L00700_15_shrd + jne L00600_15_shrd movl 156(%esp),%ecx - jmp L00816_63_shrd + jmp L00716_63_shrd .align 4,0x90 -L00816_63_shrd: +L00716_63_shrd: movl %ecx,%ebx movl 104(%esp),%esi shrdl $11,%ecx,%ecx @@ -446,7 +431,7 @@ L00816_63_shrd: addl $4,%ebp addl %ebx,%eax cmpl $3329325298,%esi - jne L00816_63_shrd + jne L00716_63_shrd movl 356(%esp),%esi movl 8(%esp),%ebx movl 16(%esp),%ecx @@ -473,7 +458,7 @@ L00816_63_shrd: leal 356(%esp),%esp subl $256,%ebp cmpl 8(%esp),%edi - jb L003loop_shrd + jb L005loop_shrd movl 12(%esp),%esp popl %edi popl %esi @@ -484,8 +469,13 @@ L00816_63_shrd: L001K256: .long 1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298 .long 66051,67438087,134810123,202182159 +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 +.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 +.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 +.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 +.byte 62,0 .align 4,0x90 -L004unrolled: +L008unrolled: leal -96(%esp),%esp movl (%esi),%eax movl 4(%esi),%ebp @@ -3391,14 +3381,4 @@ L009grand_loop: popl %ebx popl %ebp ret -.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97 -.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 -.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 -.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 -.byte 62,0 -.section __IMPORT,__pointers,non_lazy_symbol_pointers -L__gnutls_x86_cpuid_s$non_lazy_ptr: -.indirect_symbol __gnutls_x86_cpuid_s -.long 0 -.comm __gnutls_x86_cpuid_s,16,2 diff --git a/lib/accelerated/x86/macosx/sha256-ssse3-x86_64.s b/lib/accelerated/x86/macosx/sha256-ssse3-x86_64.s new file mode 100644 index 0000000000..fd0c247359 --- /dev/null +++ b/lib/accelerated/x86/macosx/sha256-ssse3-x86_64.s @@ -0,0 +1,5470 @@ +# Copyright (c) 2011-2016, Andy Polyakov +# 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 copyright notices, +# 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 Andy Polyakov nor the names of its +# copyright holder and contributors may be used to endorse or +# promote products derived from this software without specific +# prior written permission. +# +# ALTERNATIVELY, provided that this notice is retained in full, this +# product may be distributed under the terms of the GNU General Public +# License (GPL), in which case the provisions of the GPL apply INSTEAD OF +# those given above. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER 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 COPYRIGHT +# OWNER 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. +# +# *** This file is auto-generated *** +# +.text + + +.globl _sha256_block_data_order + +.p2align 4 +_sha256_block_data_order: + + leaq __gnutls_x86_cpuid_s(%rip),%r11 + movl 0(%r11),%r9d + movl 4(%r11),%r10d + movl 8(%r11),%r11d + testl $536870912,%r11d + jnz _shaext_shortcut + andl $296,%r11d + cmpl $296,%r11d + je L$avx2_shortcut + andl $1073741824,%r9d + andl $268435968,%r10d + orl %r9d,%r10d + cmpl $1342177792,%r10d + je L$avx_shortcut + testl $512,%r10d + jnz L$ssse3_shortcut + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + shlq $4,%rdx + subq $64+32,%rsp + leaq (%rsi,%rdx,4),%rdx + andq $-64,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) + +L$prologue: + + movl 0(%rdi),%eax + movl 4(%rdi),%ebx + movl 8(%rdi),%ecx + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + jmp L$loop + +.p2align 4 +L$loop: + movl %ebx,%edi + leaq K256(%rip),%rbp + xorl %ecx,%edi + movl 0(%rsi),%r12d + movl %r8d,%r13d + movl %eax,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,0(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + addl %r14d,%r11d + movl 4(%rsi),%r12d + movl %edx,%r13d + movl %r11d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,4(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + addl %r14d,%r10d + movl 8(%rsi),%r12d + movl %ecx,%r13d + movl %r10d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,8(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + addl %r14d,%r9d + movl 12(%rsi),%r12d + movl %ebx,%r13d + movl %r9d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,12(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + addl %r14d,%r8d + movl 16(%rsi),%r12d + movl %eax,%r13d + movl %r8d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,16(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + addl %r14d,%edx + movl 20(%rsi),%r12d + movl %r11d,%r13d + movl %edx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,20(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + addl %r14d,%ecx + movl 24(%rsi),%r12d + movl %r10d,%r13d + movl %ecx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,24(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + addl %r14d,%ebx + movl 28(%rsi),%r12d + movl %r9d,%r13d + movl %ebx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,28(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + addl %r14d,%eax + movl 32(%rsi),%r12d + movl %r8d,%r13d + movl %eax,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,32(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + addl %r14d,%r11d + movl 36(%rsi),%r12d + movl %edx,%r13d + movl %r11d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,36(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + addl %r14d,%r10d + movl 40(%rsi),%r12d + movl %ecx,%r13d + movl %r10d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,40(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + addl %r14d,%r9d + movl 44(%rsi),%r12d + movl %ebx,%r13d + movl %r9d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,44(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + addl %r14d,%r8d + movl 48(%rsi),%r12d + movl %eax,%r13d + movl %r8d,%r14d + bswapl %r12d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,48(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + addl %r14d,%edx + movl 52(%rsi),%r12d + movl %r11d,%r13d + movl %edx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,52(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + addl %r14d,%ecx + movl 56(%rsi),%r12d + movl %r10d,%r13d + movl %ecx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,56(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + addl %r14d,%ebx + movl 60(%rsi),%r12d + movl %r9d,%r13d + movl %ebx,%r14d + bswapl %r12d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,60(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + jmp L$rounds_16_xx +.p2align 4 +L$rounds_16_xx: + movl 4(%rsp),%r13d + movl 56(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%eax + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 36(%rsp),%r12d + + addl 0(%rsp),%r12d + movl %r8d,%r13d + addl %r15d,%r12d + movl %eax,%r14d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,0(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + movl 8(%rsp),%r13d + movl 60(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r11d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 40(%rsp),%r12d + + addl 4(%rsp),%r12d + movl %edx,%r13d + addl %edi,%r12d + movl %r11d,%r14d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,4(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + movl 12(%rsp),%r13d + movl 0(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r10d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 44(%rsp),%r12d + + addl 8(%rsp),%r12d + movl %ecx,%r13d + addl %r15d,%r12d + movl %r10d,%r14d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,8(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + movl 16(%rsp),%r13d + movl 4(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r9d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 48(%rsp),%r12d + + addl 12(%rsp),%r12d + movl %ebx,%r13d + addl %edi,%r12d + movl %r9d,%r14d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,12(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + movl 20(%rsp),%r13d + movl 8(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r8d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 52(%rsp),%r12d + + addl 16(%rsp),%r12d + movl %eax,%r13d + addl %r15d,%r12d + movl %r8d,%r14d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,16(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + movl 24(%rsp),%r13d + movl 12(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%edx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 56(%rsp),%r12d + + addl 20(%rsp),%r12d + movl %r11d,%r13d + addl %edi,%r12d + movl %edx,%r14d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,20(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + movl 28(%rsp),%r13d + movl 16(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ecx + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 60(%rsp),%r12d + + addl 24(%rsp),%r12d + movl %r10d,%r13d + addl %r15d,%r12d + movl %ecx,%r14d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,24(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + movl 32(%rsp),%r13d + movl 20(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ebx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 0(%rsp),%r12d + + addl 28(%rsp),%r12d + movl %r9d,%r13d + addl %edi,%r12d + movl %ebx,%r14d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,28(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + movl 36(%rsp),%r13d + movl 24(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%eax + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 4(%rsp),%r12d + + addl 32(%rsp),%r12d + movl %r8d,%r13d + addl %r15d,%r12d + movl %eax,%r14d + rorl $14,%r13d + movl %r9d,%r15d + + xorl %r8d,%r13d + rorl $9,%r14d + xorl %r10d,%r15d + + movl %r12d,32(%rsp) + xorl %eax,%r14d + andl %r8d,%r15d + + rorl $5,%r13d + addl %r11d,%r12d + xorl %r10d,%r15d + + rorl $11,%r14d + xorl %r8d,%r13d + addl %r15d,%r12d + + movl %eax,%r15d + addl (%rbp),%r12d + xorl %eax,%r14d + + xorl %ebx,%r15d + rorl $6,%r13d + movl %ebx,%r11d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r11d + addl %r12d,%edx + addl %r12d,%r11d + + leaq 4(%rbp),%rbp + movl 40(%rsp),%r13d + movl 28(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r11d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 8(%rsp),%r12d + + addl 36(%rsp),%r12d + movl %edx,%r13d + addl %edi,%r12d + movl %r11d,%r14d + rorl $14,%r13d + movl %r8d,%edi + + xorl %edx,%r13d + rorl $9,%r14d + xorl %r9d,%edi + + movl %r12d,36(%rsp) + xorl %r11d,%r14d + andl %edx,%edi + + rorl $5,%r13d + addl %r10d,%r12d + xorl %r9d,%edi + + rorl $11,%r14d + xorl %edx,%r13d + addl %edi,%r12d + + movl %r11d,%edi + addl (%rbp),%r12d + xorl %r11d,%r14d + + xorl %eax,%edi + rorl $6,%r13d + movl %eax,%r10d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r10d + addl %r12d,%ecx + addl %r12d,%r10d + + leaq 4(%rbp),%rbp + movl 44(%rsp),%r13d + movl 32(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r10d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 12(%rsp),%r12d + + addl 40(%rsp),%r12d + movl %ecx,%r13d + addl %r15d,%r12d + movl %r10d,%r14d + rorl $14,%r13d + movl %edx,%r15d + + xorl %ecx,%r13d + rorl $9,%r14d + xorl %r8d,%r15d + + movl %r12d,40(%rsp) + xorl %r10d,%r14d + andl %ecx,%r15d + + rorl $5,%r13d + addl %r9d,%r12d + xorl %r8d,%r15d + + rorl $11,%r14d + xorl %ecx,%r13d + addl %r15d,%r12d + + movl %r10d,%r15d + addl (%rbp),%r12d + xorl %r10d,%r14d + + xorl %r11d,%r15d + rorl $6,%r13d + movl %r11d,%r9d + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%r9d + addl %r12d,%ebx + addl %r12d,%r9d + + leaq 4(%rbp),%rbp + movl 48(%rsp),%r13d + movl 36(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r9d + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 16(%rsp),%r12d + + addl 44(%rsp),%r12d + movl %ebx,%r13d + addl %edi,%r12d + movl %r9d,%r14d + rorl $14,%r13d + movl %ecx,%edi + + xorl %ebx,%r13d + rorl $9,%r14d + xorl %edx,%edi + + movl %r12d,44(%rsp) + xorl %r9d,%r14d + andl %ebx,%edi + + rorl $5,%r13d + addl %r8d,%r12d + xorl %edx,%edi + + rorl $11,%r14d + xorl %ebx,%r13d + addl %edi,%r12d + + movl %r9d,%edi + addl (%rbp),%r12d + xorl %r9d,%r14d + + xorl %r10d,%edi + rorl $6,%r13d + movl %r10d,%r8d + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%r8d + addl %r12d,%eax + addl %r12d,%r8d + + leaq 20(%rbp),%rbp + movl 52(%rsp),%r13d + movl 40(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%r8d + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 20(%rsp),%r12d + + addl 48(%rsp),%r12d + movl %eax,%r13d + addl %r15d,%r12d + movl %r8d,%r14d + rorl $14,%r13d + movl %ebx,%r15d + + xorl %eax,%r13d + rorl $9,%r14d + xorl %ecx,%r15d + + movl %r12d,48(%rsp) + xorl %r8d,%r14d + andl %eax,%r15d + + rorl $5,%r13d + addl %edx,%r12d + xorl %ecx,%r15d + + rorl $11,%r14d + xorl %eax,%r13d + addl %r15d,%r12d + + movl %r8d,%r15d + addl (%rbp),%r12d + xorl %r8d,%r14d + + xorl %r9d,%r15d + rorl $6,%r13d + movl %r9d,%edx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%edx + addl %r12d,%r11d + addl %r12d,%edx + + leaq 4(%rbp),%rbp + movl 56(%rsp),%r13d + movl 44(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%edx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 24(%rsp),%r12d + + addl 52(%rsp),%r12d + movl %r11d,%r13d + addl %edi,%r12d + movl %edx,%r14d + rorl $14,%r13d + movl %eax,%edi + + xorl %r11d,%r13d + rorl $9,%r14d + xorl %ebx,%edi + + movl %r12d,52(%rsp) + xorl %edx,%r14d + andl %r11d,%edi + + rorl $5,%r13d + addl %ecx,%r12d + xorl %ebx,%edi + + rorl $11,%r14d + xorl %r11d,%r13d + addl %edi,%r12d + + movl %edx,%edi + addl (%rbp),%r12d + xorl %edx,%r14d + + xorl %r8d,%edi + rorl $6,%r13d + movl %r8d,%ecx + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%ecx + addl %r12d,%r10d + addl %r12d,%ecx + + leaq 4(%rbp),%rbp + movl 60(%rsp),%r13d + movl 48(%rsp),%r15d + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ecx + movl %r15d,%r14d + rorl $2,%r15d + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%r15d + shrl $10,%r14d + + rorl $17,%r15d + xorl %r13d,%r12d + xorl %r14d,%r15d + addl 28(%rsp),%r12d + + addl 56(%rsp),%r12d + movl %r10d,%r13d + addl %r15d,%r12d + movl %ecx,%r14d + rorl $14,%r13d + movl %r11d,%r15d + + xorl %r10d,%r13d + rorl $9,%r14d + xorl %eax,%r15d + + movl %r12d,56(%rsp) + xorl %ecx,%r14d + andl %r10d,%r15d + + rorl $5,%r13d + addl %ebx,%r12d + xorl %eax,%r15d + + rorl $11,%r14d + xorl %r10d,%r13d + addl %r15d,%r12d + + movl %ecx,%r15d + addl (%rbp),%r12d + xorl %ecx,%r14d + + xorl %edx,%r15d + rorl $6,%r13d + movl %edx,%ebx + + andl %r15d,%edi + rorl $2,%r14d + addl %r13d,%r12d + + xorl %edi,%ebx + addl %r12d,%r9d + addl %r12d,%ebx + + leaq 4(%rbp),%rbp + movl 0(%rsp),%r13d + movl 52(%rsp),%edi + + movl %r13d,%r12d + rorl $11,%r13d + addl %r14d,%ebx + movl %edi,%r14d + rorl $2,%edi + + xorl %r12d,%r13d + shrl $3,%r12d + rorl $7,%r13d + xorl %r14d,%edi + shrl $10,%r14d + + rorl $17,%edi + xorl %r13d,%r12d + xorl %r14d,%edi + addl 32(%rsp),%r12d + + addl 60(%rsp),%r12d + movl %r9d,%r13d + addl %edi,%r12d + movl %ebx,%r14d + rorl $14,%r13d + movl %r10d,%edi + + xorl %r9d,%r13d + rorl $9,%r14d + xorl %r11d,%edi + + movl %r12d,60(%rsp) + xorl %ebx,%r14d + andl %r9d,%edi + + rorl $5,%r13d + addl %eax,%r12d + xorl %r11d,%edi + + rorl $11,%r14d + xorl %r9d,%r13d + addl %edi,%r12d + + movl %ebx,%edi + addl (%rbp),%r12d + xorl %ebx,%r14d + + xorl %ecx,%edi + rorl $6,%r13d + movl %ecx,%eax + + andl %edi,%r15d + rorl $2,%r14d + addl %r13d,%r12d + + xorl %r15d,%eax + addl %r12d,%r8d + addl %r12d,%eax + + leaq 20(%rbp),%rbp + cmpb $0,3(%rbp) + jnz L$rounds_16_xx + + movq 64+0(%rsp),%rdi + addl %r14d,%eax + leaq 64(%rsi),%rsi + + addl 0(%rdi),%eax + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + jb L$loop + + movq 88(%rsp),%rsi + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +L$epilogue: + .byte 0xf3,0xc3 + + +.p2align 6 + +K256: +.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 +.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 +.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 +.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 +.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 +.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 +.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 +.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 +.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc +.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc +.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da +.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da +.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 +.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 +.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 +.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 +.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 +.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 +.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 +.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 +.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 +.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 +.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 +.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 +.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 +.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 +.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 +.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 +.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 +.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 +.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 + +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f +.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff +.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff +.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 +.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 + +.p2align 6 +sha256_block_data_order_shaext: +_shaext_shortcut: + leaq K256+128(%rip),%rcx + movdqu (%rdi),%xmm1 + movdqu 16(%rdi),%xmm2 + movdqa 512-128(%rcx),%xmm7 + + pshufd $0x1b,%xmm1,%xmm0 + pshufd $0xb1,%xmm1,%xmm1 + pshufd $0x1b,%xmm2,%xmm2 + movdqa %xmm7,%xmm8 +.byte 102,15,58,15,202,8 + punpcklqdq %xmm0,%xmm2 + jmp L$oop_shaext + +.p2align 4 +L$oop_shaext: + movdqu (%rsi),%xmm3 + movdqu 16(%rsi),%xmm4 + movdqu 32(%rsi),%xmm5 +.byte 102,15,56,0,223 + movdqu 48(%rsi),%xmm6 + + movdqa 0-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 102,15,56,0,231 + movdqa %xmm2,%xmm10 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + nop + movdqa %xmm1,%xmm9 +.byte 15,56,203,202 + + movdqa 32-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 102,15,56,0,239 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + leaq 64(%rsi),%rsi +.byte 15,56,204,220 +.byte 15,56,203,202 + + movdqa 64-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 102,15,56,0,247 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm6,%xmm7 +.byte 102,15,58,15,253,4 + nop + paddd %xmm7,%xmm3 +.byte 15,56,204,229 +.byte 15,56,203,202 + + movdqa 96-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 +.byte 15,56,205,222 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm3,%xmm7 +.byte 102,15,58,15,254,4 + nop + paddd %xmm7,%xmm4 +.byte 15,56,204,238 +.byte 15,56,203,202 + movdqa 128-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 15,56,205,227 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm4,%xmm7 +.byte 102,15,58,15,251,4 + nop + paddd %xmm7,%xmm5 +.byte 15,56,204,243 +.byte 15,56,203,202 + movdqa 160-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 15,56,205,236 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm5,%xmm7 +.byte 102,15,58,15,252,4 + nop + paddd %xmm7,%xmm6 +.byte 15,56,204,220 +.byte 15,56,203,202 + movdqa 192-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 15,56,205,245 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm6,%xmm7 +.byte 102,15,58,15,253,4 + nop + paddd %xmm7,%xmm3 +.byte 15,56,204,229 +.byte 15,56,203,202 + movdqa 224-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 +.byte 15,56,205,222 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm3,%xmm7 +.byte 102,15,58,15,254,4 + nop + paddd %xmm7,%xmm4 +.byte 15,56,204,238 +.byte 15,56,203,202 + movdqa 256-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 15,56,205,227 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm4,%xmm7 +.byte 102,15,58,15,251,4 + nop + paddd %xmm7,%xmm5 +.byte 15,56,204,243 +.byte 15,56,203,202 + movdqa 288-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 15,56,205,236 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm5,%xmm7 +.byte 102,15,58,15,252,4 + nop + paddd %xmm7,%xmm6 +.byte 15,56,204,220 +.byte 15,56,203,202 + movdqa 320-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 15,56,205,245 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm6,%xmm7 +.byte 102,15,58,15,253,4 + nop + paddd %xmm7,%xmm3 +.byte 15,56,204,229 +.byte 15,56,203,202 + movdqa 352-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 +.byte 15,56,205,222 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm3,%xmm7 +.byte 102,15,58,15,254,4 + nop + paddd %xmm7,%xmm4 +.byte 15,56,204,238 +.byte 15,56,203,202 + movdqa 384-128(%rcx),%xmm0 + paddd %xmm3,%xmm0 +.byte 15,56,205,227 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm4,%xmm7 +.byte 102,15,58,15,251,4 + nop + paddd %xmm7,%xmm5 +.byte 15,56,204,243 +.byte 15,56,203,202 + movdqa 416-128(%rcx),%xmm0 + paddd %xmm4,%xmm0 +.byte 15,56,205,236 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + movdqa %xmm5,%xmm7 +.byte 102,15,58,15,252,4 +.byte 15,56,203,202 + paddd %xmm7,%xmm6 + + movdqa 448-128(%rcx),%xmm0 + paddd %xmm5,%xmm0 +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 +.byte 15,56,205,245 + movdqa %xmm8,%xmm7 +.byte 15,56,203,202 + + movdqa 480-128(%rcx),%xmm0 + paddd %xmm6,%xmm0 + nop +.byte 15,56,203,209 + pshufd $0x0e,%xmm0,%xmm0 + decq %rdx + nop +.byte 15,56,203,202 + + paddd %xmm10,%xmm2 + paddd %xmm9,%xmm1 + jnz L$oop_shaext + + pshufd $0xb1,%xmm2,%xmm2 + pshufd $0x1b,%xmm1,%xmm7 + pshufd $0xb1,%xmm1,%xmm1 + punpckhqdq %xmm2,%xmm1 +.byte 102,15,58,15,215,8 + + movdqu %xmm1,(%rdi) + movdqu %xmm2,16(%rdi) + .byte 0xf3,0xc3 + + +.p2align 6 +sha256_block_data_order_ssse3: + +L$ssse3_shortcut: + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + shlq $4,%rdx + subq $96,%rsp + leaq (%rsi,%rdx,4),%rdx + andq $-64,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) + +L$prologue_ssse3: + + movl 0(%rdi),%eax + movl 4(%rdi),%ebx + movl 8(%rdi),%ecx + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + + + jmp L$loop_ssse3 +.p2align 4 +L$loop_ssse3: + movdqa K256+512(%rip),%xmm7 + movdqu 0(%rsi),%xmm0 + movdqu 16(%rsi),%xmm1 + movdqu 32(%rsi),%xmm2 +.byte 102,15,56,0,199 + movdqu 48(%rsi),%xmm3 + leaq K256(%rip),%rbp +.byte 102,15,56,0,207 + movdqa 0(%rbp),%xmm4 + movdqa 32(%rbp),%xmm5 +.byte 102,15,56,0,215 + paddd %xmm0,%xmm4 + movdqa 64(%rbp),%xmm6 +.byte 102,15,56,0,223 + movdqa 96(%rbp),%xmm7 + paddd %xmm1,%xmm5 + paddd %xmm2,%xmm6 + paddd %xmm3,%xmm7 + movdqa %xmm4,0(%rsp) + movl %eax,%r14d + movdqa %xmm5,16(%rsp) + movl %ebx,%edi + movdqa %xmm6,32(%rsp) + xorl %ecx,%edi + movdqa %xmm7,48(%rsp) + movl %r8d,%r13d + jmp L$ssse3_00_47 + +.p2align 4 +L$ssse3_00_47: + subq $-128,%rbp + rorl $14,%r13d + movdqa %xmm1,%xmm4 + movl %r14d,%eax + movl %r9d,%r12d + movdqa %xmm3,%xmm7 + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d +.byte 102,15,58,15,224,4 + andl %r8d,%r12d + xorl %r8d,%r13d +.byte 102,15,58,15,250,4 + addl 0(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %ebx,%r15d + addl %r12d,%r11d + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + paddd %xmm7,%xmm0 + rorl $2,%r14d + addl %r11d,%edx + psrld $7,%xmm6 + addl %edi,%r11d + movl %edx,%r13d + pshufd $250,%xmm3,%xmm7 + addl %r11d,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%r11d + movl %r8d,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %r11d,%r14d + pxor %xmm5,%xmm4 + andl %edx,%r12d + xorl %edx,%r13d + pslld $11,%xmm5 + addl 4(%rsp),%r10d + movl %r11d,%edi + pxor %xmm6,%xmm4 + xorl %r9d,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %eax,%edi + addl %r12d,%r10d + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + psrld $10,%xmm7 + addl %r13d,%r10d + xorl %eax,%r15d + paddd %xmm4,%xmm0 + rorl $2,%r14d + addl %r10d,%ecx + psrlq $17,%xmm6 + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %ecx,%r13d + xorl %r8d,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %ecx,%r13d + addl 8(%rsp),%r9d + movl %r10d,%r15d + psrldq $8,%xmm7 + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + paddd %xmm7,%xmm0 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + pshufd $80,%xmm0,%xmm7 + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + movdqa %xmm7,%xmm6 + addl %edi,%r9d + movl %ebx,%r13d + psrld $10,%xmm7 + addl %r9d,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%r9d + movl %ecx,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + psrlq $2,%xmm6 + andl %ebx,%r12d + xorl %ebx,%r13d + addl 12(%rsp),%r8d + pxor %xmm6,%xmm7 + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %r10d,%edi + addl %r12d,%r8d + movdqa 0(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + paddd %xmm7,%xmm0 + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + paddd %xmm0,%xmm6 + movl %eax,%r13d + addl %r8d,%r14d + movdqa %xmm6,0(%rsp) + rorl $14,%r13d + movdqa %xmm2,%xmm4 + movl %r14d,%r8d + movl %ebx,%r12d + movdqa %xmm0,%xmm7 + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d +.byte 102,15,58,15,225,4 + andl %eax,%r12d + xorl %eax,%r13d +.byte 102,15,58,15,251,4 + addl 16(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %r9d,%r15d + addl %r12d,%edx + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + paddd %xmm7,%xmm1 + rorl $2,%r14d + addl %edx,%r11d + psrld $7,%xmm6 + addl %edi,%edx + movl %r11d,%r13d + pshufd $250,%xmm0,%xmm7 + addl %edx,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%edx + movl %eax,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %edx,%r14d + pxor %xmm5,%xmm4 + andl %r11d,%r12d + xorl %r11d,%r13d + pslld $11,%xmm5 + addl 20(%rsp),%ecx + movl %edx,%edi + pxor %xmm6,%xmm4 + xorl %ebx,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %r8d,%edi + addl %r12d,%ecx + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + psrld $10,%xmm7 + addl %r13d,%ecx + xorl %r8d,%r15d + paddd %xmm4,%xmm1 + rorl $2,%r14d + addl %ecx,%r10d + psrlq $17,%xmm6 + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %r10d,%r13d + xorl %eax,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %r10d,%r13d + addl 24(%rsp),%ebx + movl %ecx,%r15d + psrldq $8,%xmm7 + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + paddd %xmm7,%xmm1 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + pshufd $80,%xmm1,%xmm7 + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + movdqa %xmm7,%xmm6 + addl %edi,%ebx + movl %r9d,%r13d + psrld $10,%xmm7 + addl %ebx,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%ebx + movl %r10d,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + psrlq $2,%xmm6 + andl %r9d,%r12d + xorl %r9d,%r13d + addl 28(%rsp),%eax + pxor %xmm6,%xmm7 + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %ecx,%edi + addl %r12d,%eax + movdqa 32(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + paddd %xmm7,%xmm1 + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + paddd %xmm1,%xmm6 + movl %r8d,%r13d + addl %eax,%r14d + movdqa %xmm6,16(%rsp) + rorl $14,%r13d + movdqa %xmm3,%xmm4 + movl %r14d,%eax + movl %r9d,%r12d + movdqa %xmm1,%xmm7 + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d +.byte 102,15,58,15,226,4 + andl %r8d,%r12d + xorl %r8d,%r13d +.byte 102,15,58,15,248,4 + addl 32(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %ebx,%r15d + addl %r12d,%r11d + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + paddd %xmm7,%xmm2 + rorl $2,%r14d + addl %r11d,%edx + psrld $7,%xmm6 + addl %edi,%r11d + movl %edx,%r13d + pshufd $250,%xmm1,%xmm7 + addl %r11d,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%r11d + movl %r8d,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %r11d,%r14d + pxor %xmm5,%xmm4 + andl %edx,%r12d + xorl %edx,%r13d + pslld $11,%xmm5 + addl 36(%rsp),%r10d + movl %r11d,%edi + pxor %xmm6,%xmm4 + xorl %r9d,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %eax,%edi + addl %r12d,%r10d + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + psrld $10,%xmm7 + addl %r13d,%r10d + xorl %eax,%r15d + paddd %xmm4,%xmm2 + rorl $2,%r14d + addl %r10d,%ecx + psrlq $17,%xmm6 + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %ecx,%r13d + xorl %r8d,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %ecx,%r13d + addl 40(%rsp),%r9d + movl %r10d,%r15d + psrldq $8,%xmm7 + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + paddd %xmm7,%xmm2 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + pshufd $80,%xmm2,%xmm7 + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + movdqa %xmm7,%xmm6 + addl %edi,%r9d + movl %ebx,%r13d + psrld $10,%xmm7 + addl %r9d,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%r9d + movl %ecx,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + psrlq $2,%xmm6 + andl %ebx,%r12d + xorl %ebx,%r13d + addl 44(%rsp),%r8d + pxor %xmm6,%xmm7 + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %r10d,%edi + addl %r12d,%r8d + movdqa 64(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + paddd %xmm7,%xmm2 + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + paddd %xmm2,%xmm6 + movl %eax,%r13d + addl %r8d,%r14d + movdqa %xmm6,32(%rsp) + rorl $14,%r13d + movdqa %xmm0,%xmm4 + movl %r14d,%r8d + movl %ebx,%r12d + movdqa %xmm2,%xmm7 + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d +.byte 102,15,58,15,227,4 + andl %eax,%r12d + xorl %eax,%r13d +.byte 102,15,58,15,249,4 + addl 48(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + movdqa %xmm4,%xmm5 + xorl %r9d,%r15d + addl %r12d,%edx + movdqa %xmm4,%xmm6 + rorl $6,%r13d + andl %r15d,%edi + psrld $3,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + paddd %xmm7,%xmm3 + rorl $2,%r14d + addl %edx,%r11d + psrld $7,%xmm6 + addl %edi,%edx + movl %r11d,%r13d + pshufd $250,%xmm2,%xmm7 + addl %edx,%r14d + rorl $14,%r13d + pslld $14,%xmm5 + movl %r14d,%edx + movl %eax,%r12d + pxor %xmm6,%xmm4 + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + psrld $11,%xmm6 + xorl %edx,%r14d + pxor %xmm5,%xmm4 + andl %r11d,%r12d + xorl %r11d,%r13d + pslld $11,%xmm5 + addl 52(%rsp),%ecx + movl %edx,%edi + pxor %xmm6,%xmm4 + xorl %ebx,%r12d + rorl $11,%r14d + movdqa %xmm7,%xmm6 + xorl %r8d,%edi + addl %r12d,%ecx + pxor %xmm5,%xmm4 + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + psrld $10,%xmm7 + addl %r13d,%ecx + xorl %r8d,%r15d + paddd %xmm4,%xmm3 + rorl $2,%r14d + addl %ecx,%r10d + psrlq $17,%xmm6 + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + pxor %xmm6,%xmm7 + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + psrlq $2,%xmm6 + xorl %r10d,%r13d + xorl %eax,%r12d + pxor %xmm6,%xmm7 + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + pshufd $128,%xmm7,%xmm7 + xorl %r10d,%r13d + addl 56(%rsp),%ebx + movl %ecx,%r15d + psrldq $8,%xmm7 + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + paddd %xmm7,%xmm3 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + pshufd $80,%xmm3,%xmm7 + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + movdqa %xmm7,%xmm6 + addl %edi,%ebx + movl %r9d,%r13d + psrld $10,%xmm7 + addl %ebx,%r14d + rorl $14,%r13d + psrlq $17,%xmm6 + movl %r14d,%ebx + movl %r10d,%r12d + pxor %xmm6,%xmm7 + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + psrlq $2,%xmm6 + andl %r9d,%r12d + xorl %r9d,%r13d + addl 60(%rsp),%eax + pxor %xmm6,%xmm7 + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + pshufd $8,%xmm7,%xmm7 + xorl %ecx,%edi + addl %r12d,%eax + movdqa 96(%rbp),%xmm6 + rorl $6,%r13d + andl %edi,%r15d + pslldq $8,%xmm7 + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + paddd %xmm7,%xmm3 + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + paddd %xmm3,%xmm6 + movl %r8d,%r13d + addl %eax,%r14d + movdqa %xmm6,48(%rsp) + cmpb $0,131(%rbp) + jne L$ssse3_00_47 + rorl $14,%r13d + movl %r14d,%eax + movl %r9d,%r12d + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 0(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + rorl $6,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + rorl $2,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + rorl $14,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 4(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + rorl $11,%r14d + xorl %eax,%edi + addl %r12d,%r10d + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + rorl $2,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 8(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + rorl $14,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 12(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + rorl $6,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + rorl $14,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 16(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + rorl $6,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + rorl $2,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + rorl $14,%r13d + movl %r14d,%edx + movl %eax,%r12d + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 20(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + rorl $11,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + rorl $2,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 24(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + rorl $14,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 28(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + xorl %ecx,%edi + addl %r12d,%eax + rorl $6,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + rorl $14,%r13d + movl %r14d,%eax + movl %r9d,%r12d + rorl $9,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + rorl $5,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 32(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + rorl $11,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + rorl $6,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + rorl $2,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + rorl $14,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + rorl $9,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + rorl $5,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 36(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + rorl $11,%r14d + xorl %eax,%edi + addl %r12d,%r10d + rorl $6,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + rorl $2,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + rorl $14,%r13d + movl %r14d,%r10d + movl %edx,%r12d + rorl $9,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + rorl $5,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 40(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + rorl $11,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + rorl $6,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + rorl $2,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + rorl $14,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + rorl $9,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + rorl $5,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 44(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + rorl $11,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + rorl $6,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + rorl $2,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + rorl $14,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + rorl $9,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + rorl $5,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 48(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + rorl $11,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + rorl $6,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + rorl $2,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + rorl $14,%r13d + movl %r14d,%edx + movl %eax,%r12d + rorl $9,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + rorl $5,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 52(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + rorl $11,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + rorl $6,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + rorl $2,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + rorl $14,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + rorl $9,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + rorl $5,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 56(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + rorl $11,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + rorl $6,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + rorl $2,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + rorl $14,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + rorl $9,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + rorl $5,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 60(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + rorl $11,%r14d + xorl %ecx,%edi + addl %r12d,%eax + rorl $6,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + rorl $2,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + movq 64+0(%rsp),%rdi + movl %r14d,%eax + + addl 0(%rdi),%eax + leaq 64(%rsi),%rsi + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + jb L$loop_ssse3 + + movq 88(%rsp),%rsi + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +L$epilogue_ssse3: + .byte 0xf3,0xc3 + + + +.p2align 6 +sha256_block_data_order_avx: + +L$avx_shortcut: + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + shlq $4,%rdx + subq $96,%rsp + leaq (%rsi,%rdx,4),%rdx + andq $-64,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) + +L$prologue_avx: + + vzeroupper + movl 0(%rdi),%eax + movl 4(%rdi),%ebx + movl 8(%rdi),%ecx + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + vmovdqa K256+512+32(%rip),%xmm8 + vmovdqa K256+512+64(%rip),%xmm9 + jmp L$loop_avx +.p2align 4 +L$loop_avx: + vmovdqa K256+512(%rip),%xmm7 + vmovdqu 0(%rsi),%xmm0 + vmovdqu 16(%rsi),%xmm1 + vmovdqu 32(%rsi),%xmm2 + vmovdqu 48(%rsi),%xmm3 + vpshufb %xmm7,%xmm0,%xmm0 + leaq K256(%rip),%rbp + vpshufb %xmm7,%xmm1,%xmm1 + vpshufb %xmm7,%xmm2,%xmm2 + vpaddd 0(%rbp),%xmm0,%xmm4 + vpshufb %xmm7,%xmm3,%xmm3 + vpaddd 32(%rbp),%xmm1,%xmm5 + vpaddd 64(%rbp),%xmm2,%xmm6 + vpaddd 96(%rbp),%xmm3,%xmm7 + vmovdqa %xmm4,0(%rsp) + movl %eax,%r14d + vmovdqa %xmm5,16(%rsp) + movl %ebx,%edi + vmovdqa %xmm6,32(%rsp) + xorl %ecx,%edi + vmovdqa %xmm7,48(%rsp) + movl %r8d,%r13d + jmp L$avx_00_47 + +.p2align 4 +L$avx_00_47: + subq $-128,%rbp + vpalignr $4,%xmm0,%xmm1,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + vpalignr $4,%xmm2,%xmm3,%xmm7 + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + vpaddd %xmm7,%xmm0,%xmm0 + xorl %r8d,%r13d + addl 0(%rsp),%r11d + movl %eax,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + vpshufd $250,%xmm3,%xmm7 + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + vpsrld $11,%xmm6,%xmm6 + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 4(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + vpaddd %xmm4,%xmm0,%xmm0 + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + vpxor %xmm7,%xmm6,%xmm6 + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + vpaddd %xmm6,%xmm0,%xmm0 + andl %ecx,%r12d + xorl %ecx,%r13d + addl 8(%rsp),%r9d + vpshufd $80,%xmm0,%xmm7 + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + vpxor %xmm7,%xmm6,%xmm6 + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + vpaddd %xmm6,%xmm0,%xmm0 + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + vpaddd 0(%rbp),%xmm0,%xmm6 + xorl %ebx,%r13d + addl 12(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + vmovdqa %xmm6,0(%rsp) + vpalignr $4,%xmm1,%xmm2,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + vpalignr $4,%xmm3,%xmm0,%xmm7 + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + vpaddd %xmm7,%xmm1,%xmm1 + xorl %eax,%r13d + addl 16(%rsp),%edx + movl %r8d,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + vpshufd $250,%xmm0,%xmm7 + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + vpsrld $11,%xmm6,%xmm6 + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 20(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + vpaddd %xmm4,%xmm1,%xmm1 + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + vpxor %xmm7,%xmm6,%xmm6 + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + vpaddd %xmm6,%xmm1,%xmm1 + andl %r10d,%r12d + xorl %r10d,%r13d + addl 24(%rsp),%ebx + vpshufd $80,%xmm1,%xmm7 + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + vpxor %xmm7,%xmm6,%xmm6 + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + vpaddd %xmm6,%xmm1,%xmm1 + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + vpaddd 32(%rbp),%xmm1,%xmm6 + xorl %r9d,%r13d + addl 28(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + vmovdqa %xmm6,16(%rsp) + vpalignr $4,%xmm2,%xmm3,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + vpalignr $4,%xmm0,%xmm1,%xmm7 + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + vpaddd %xmm7,%xmm2,%xmm2 + xorl %r8d,%r13d + addl 32(%rsp),%r11d + movl %eax,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + vpshufd $250,%xmm1,%xmm7 + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + vpsrld $11,%xmm6,%xmm6 + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 36(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + vpaddd %xmm4,%xmm2,%xmm2 + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + vpxor %xmm7,%xmm6,%xmm6 + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + vpaddd %xmm6,%xmm2,%xmm2 + andl %ecx,%r12d + xorl %ecx,%r13d + addl 40(%rsp),%r9d + vpshufd $80,%xmm2,%xmm7 + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + vpxor %xmm7,%xmm6,%xmm6 + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + vpaddd %xmm6,%xmm2,%xmm2 + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + vpaddd 64(%rbp),%xmm2,%xmm6 + xorl %ebx,%r13d + addl 44(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + vmovdqa %xmm6,32(%rsp) + vpalignr $4,%xmm3,%xmm0,%xmm4 + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + vpalignr $4,%xmm1,%xmm2,%xmm7 + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + vpsrld $7,%xmm4,%xmm6 + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + vpaddd %xmm7,%xmm3,%xmm3 + xorl %eax,%r13d + addl 48(%rsp),%edx + movl %r8d,%r15d + vpsrld $3,%xmm4,%xmm7 + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + vpslld $14,%xmm4,%xmm5 + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + vpxor %xmm6,%xmm7,%xmm4 + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + vpshufd $250,%xmm2,%xmm7 + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + vpsrld $11,%xmm6,%xmm6 + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + vpxor %xmm5,%xmm4,%xmm4 + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + vpslld $11,%xmm5,%xmm5 + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + vpxor %xmm6,%xmm4,%xmm4 + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + vpsrld $10,%xmm7,%xmm6 + addl 52(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + vpxor %xmm5,%xmm4,%xmm4 + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + vpsrlq $17,%xmm7,%xmm7 + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + vpaddd %xmm4,%xmm3,%xmm3 + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + vpxor %xmm7,%xmm6,%xmm6 + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + vpsrlq $2,%xmm7,%xmm7 + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + vpxor %xmm7,%xmm6,%xmm6 + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + vpshufb %xmm8,%xmm6,%xmm6 + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + vpaddd %xmm6,%xmm3,%xmm3 + andl %r10d,%r12d + xorl %r10d,%r13d + addl 56(%rsp),%ebx + vpshufd $80,%xmm3,%xmm7 + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + vpsrld $10,%xmm7,%xmm6 + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + vpsrlq $17,%xmm7,%xmm7 + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + vpxor %xmm7,%xmm6,%xmm6 + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + vpsrlq $2,%xmm7,%xmm7 + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + vpxor %xmm7,%xmm6,%xmm6 + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + vpshufb %xmm9,%xmm6,%xmm6 + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + vpaddd %xmm6,%xmm3,%xmm3 + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + vpaddd 96(%rbp),%xmm3,%xmm6 + xorl %r9d,%r13d + addl 60(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + vmovdqa %xmm6,48(%rsp) + cmpb $0,131(%rbp) + jne L$avx_00_47 + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 0(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 4(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 8(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 12(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 16(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 20(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 24(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 28(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%eax + movl %r9d,%r12d + shrdl $9,%r14d,%r14d + xorl %r8d,%r13d + xorl %r10d,%r12d + shrdl $5,%r13d,%r13d + xorl %eax,%r14d + andl %r8d,%r12d + xorl %r8d,%r13d + addl 32(%rsp),%r11d + movl %eax,%r15d + xorl %r10d,%r12d + shrdl $11,%r14d,%r14d + xorl %ebx,%r15d + addl %r12d,%r11d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %eax,%r14d + addl %r13d,%r11d + xorl %ebx,%edi + shrdl $2,%r14d,%r14d + addl %r11d,%edx + addl %edi,%r11d + movl %edx,%r13d + addl %r11d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r11d + movl %r8d,%r12d + shrdl $9,%r14d,%r14d + xorl %edx,%r13d + xorl %r9d,%r12d + shrdl $5,%r13d,%r13d + xorl %r11d,%r14d + andl %edx,%r12d + xorl %edx,%r13d + addl 36(%rsp),%r10d + movl %r11d,%edi + xorl %r9d,%r12d + shrdl $11,%r14d,%r14d + xorl %eax,%edi + addl %r12d,%r10d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r11d,%r14d + addl %r13d,%r10d + xorl %eax,%r15d + shrdl $2,%r14d,%r14d + addl %r10d,%ecx + addl %r15d,%r10d + movl %ecx,%r13d + addl %r10d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r10d + movl %edx,%r12d + shrdl $9,%r14d,%r14d + xorl %ecx,%r13d + xorl %r8d,%r12d + shrdl $5,%r13d,%r13d + xorl %r10d,%r14d + andl %ecx,%r12d + xorl %ecx,%r13d + addl 40(%rsp),%r9d + movl %r10d,%r15d + xorl %r8d,%r12d + shrdl $11,%r14d,%r14d + xorl %r11d,%r15d + addl %r12d,%r9d + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r10d,%r14d + addl %r13d,%r9d + xorl %r11d,%edi + shrdl $2,%r14d,%r14d + addl %r9d,%ebx + addl %edi,%r9d + movl %ebx,%r13d + addl %r9d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r9d + movl %ecx,%r12d + shrdl $9,%r14d,%r14d + xorl %ebx,%r13d + xorl %edx,%r12d + shrdl $5,%r13d,%r13d + xorl %r9d,%r14d + andl %ebx,%r12d + xorl %ebx,%r13d + addl 44(%rsp),%r8d + movl %r9d,%edi + xorl %edx,%r12d + shrdl $11,%r14d,%r14d + xorl %r10d,%edi + addl %r12d,%r8d + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %r9d,%r14d + addl %r13d,%r8d + xorl %r10d,%r15d + shrdl $2,%r14d,%r14d + addl %r8d,%eax + addl %r15d,%r8d + movl %eax,%r13d + addl %r8d,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%r8d + movl %ebx,%r12d + shrdl $9,%r14d,%r14d + xorl %eax,%r13d + xorl %ecx,%r12d + shrdl $5,%r13d,%r13d + xorl %r8d,%r14d + andl %eax,%r12d + xorl %eax,%r13d + addl 48(%rsp),%edx + movl %r8d,%r15d + xorl %ecx,%r12d + shrdl $11,%r14d,%r14d + xorl %r9d,%r15d + addl %r12d,%edx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %r8d,%r14d + addl %r13d,%edx + xorl %r9d,%edi + shrdl $2,%r14d,%r14d + addl %edx,%r11d + addl %edi,%edx + movl %r11d,%r13d + addl %edx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%edx + movl %eax,%r12d + shrdl $9,%r14d,%r14d + xorl %r11d,%r13d + xorl %ebx,%r12d + shrdl $5,%r13d,%r13d + xorl %edx,%r14d + andl %r11d,%r12d + xorl %r11d,%r13d + addl 52(%rsp),%ecx + movl %edx,%edi + xorl %ebx,%r12d + shrdl $11,%r14d,%r14d + xorl %r8d,%edi + addl %r12d,%ecx + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %edx,%r14d + addl %r13d,%ecx + xorl %r8d,%r15d + shrdl $2,%r14d,%r14d + addl %ecx,%r10d + addl %r15d,%ecx + movl %r10d,%r13d + addl %ecx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ecx + movl %r11d,%r12d + shrdl $9,%r14d,%r14d + xorl %r10d,%r13d + xorl %eax,%r12d + shrdl $5,%r13d,%r13d + xorl %ecx,%r14d + andl %r10d,%r12d + xorl %r10d,%r13d + addl 56(%rsp),%ebx + movl %ecx,%r15d + xorl %eax,%r12d + shrdl $11,%r14d,%r14d + xorl %edx,%r15d + addl %r12d,%ebx + shrdl $6,%r13d,%r13d + andl %r15d,%edi + xorl %ecx,%r14d + addl %r13d,%ebx + xorl %edx,%edi + shrdl $2,%r14d,%r14d + addl %ebx,%r9d + addl %edi,%ebx + movl %r9d,%r13d + addl %ebx,%r14d + shrdl $14,%r13d,%r13d + movl %r14d,%ebx + movl %r10d,%r12d + shrdl $9,%r14d,%r14d + xorl %r9d,%r13d + xorl %r11d,%r12d + shrdl $5,%r13d,%r13d + xorl %ebx,%r14d + andl %r9d,%r12d + xorl %r9d,%r13d + addl 60(%rsp),%eax + movl %ebx,%edi + xorl %r11d,%r12d + shrdl $11,%r14d,%r14d + xorl %ecx,%edi + addl %r12d,%eax + shrdl $6,%r13d,%r13d + andl %edi,%r15d + xorl %ebx,%r14d + addl %r13d,%eax + xorl %ecx,%r15d + shrdl $2,%r14d,%r14d + addl %eax,%r8d + addl %r15d,%eax + movl %r8d,%r13d + addl %eax,%r14d + movq 64+0(%rsp),%rdi + movl %r14d,%eax + + addl 0(%rdi),%eax + leaq 64(%rsi),%rsi + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + jb L$loop_avx + + movq 88(%rsp),%rsi + + vzeroupper + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +L$epilogue_avx: + .byte 0xf3,0xc3 + + + +.p2align 6 +sha256_block_data_order_avx2: + +L$avx2_shortcut: + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + subq $544,%rsp + shlq $4,%rdx + andq $-1024,%rsp + leaq (%rsi,%rdx,4),%rdx + addq $448,%rsp + movq %rdi,64+0(%rsp) + movq %rsi,64+8(%rsp) + movq %rdx,64+16(%rsp) + movq %rax,88(%rsp) + +L$prologue_avx2: + + vzeroupper + subq $-64,%rsi + movl 0(%rdi),%eax + movq %rsi,%r12 + movl 4(%rdi),%ebx + cmpq %rdx,%rsi + movl 8(%rdi),%ecx + cmoveq %rsp,%r12 + movl 12(%rdi),%edx + movl 16(%rdi),%r8d + movl 20(%rdi),%r9d + movl 24(%rdi),%r10d + movl 28(%rdi),%r11d + vmovdqa K256+512+32(%rip),%ymm8 + vmovdqa K256+512+64(%rip),%ymm9 + jmp L$oop_avx2 +.p2align 4 +L$oop_avx2: + vmovdqa K256+512(%rip),%ymm7 + vmovdqu -64+0(%rsi),%xmm0 + vmovdqu -64+16(%rsi),%xmm1 + vmovdqu -64+32(%rsi),%xmm2 + vmovdqu -64+48(%rsi),%xmm3 + + vinserti128 $1,(%r12),%ymm0,%ymm0 + vinserti128 $1,16(%r12),%ymm1,%ymm1 + vpshufb %ymm7,%ymm0,%ymm0 + vinserti128 $1,32(%r12),%ymm2,%ymm2 + vpshufb %ymm7,%ymm1,%ymm1 + vinserti128 $1,48(%r12),%ymm3,%ymm3 + + leaq K256(%rip),%rbp + vpshufb %ymm7,%ymm2,%ymm2 + vpaddd 0(%rbp),%ymm0,%ymm4 + vpshufb %ymm7,%ymm3,%ymm3 + vpaddd 32(%rbp),%ymm1,%ymm5 + vpaddd 64(%rbp),%ymm2,%ymm6 + vpaddd 96(%rbp),%ymm3,%ymm7 + vmovdqa %ymm4,0(%rsp) + xorl %r14d,%r14d + vmovdqa %ymm5,32(%rsp) + leaq -64(%rsp),%rsp + movl %ebx,%edi + vmovdqa %ymm6,0(%rsp) + xorl %ecx,%edi + vmovdqa %ymm7,32(%rsp) + movl %r9d,%r12d + subq $-32*4,%rbp + jmp L$avx2_00_47 + +.p2align 4 +L$avx2_00_47: + leaq -64(%rsp),%rsp + vpalignr $4,%ymm0,%ymm1,%ymm4 + addl 0+128(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + vpalignr $4,%ymm2,%ymm3,%ymm7 + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + vpsrld $7,%ymm4,%ymm6 + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + vpaddd %ymm7,%ymm0,%ymm0 + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + vpshufd $250,%ymm3,%ymm7 + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 4+128(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + vpslld $11,%ymm5,%ymm5 + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + vpaddd %ymm4,%ymm0,%ymm0 + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 8+128(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + vpxor %ymm7,%ymm6,%ymm6 + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + vpaddd %ymm6,%ymm0,%ymm0 + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + vpshufd $80,%ymm0,%ymm7 + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 12+128(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + vpxor %ymm7,%ymm6,%ymm6 + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + vpaddd %ymm6,%ymm0,%ymm0 + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + vpaddd 0(%rbp),%ymm0,%ymm6 + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + vmovdqa %ymm6,0(%rsp) + vpalignr $4,%ymm1,%ymm2,%ymm4 + addl 32+128(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + vpalignr $4,%ymm3,%ymm0,%ymm7 + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + vpsrld $7,%ymm4,%ymm6 + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + vpaddd %ymm7,%ymm1,%ymm1 + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + vpshufd $250,%ymm0,%ymm7 + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 36+128(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + vpslld $11,%ymm5,%ymm5 + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + vpaddd %ymm4,%ymm1,%ymm1 + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 40+128(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + vpxor %ymm7,%ymm6,%ymm6 + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + vpaddd %ymm6,%ymm1,%ymm1 + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + vpshufd $80,%ymm1,%ymm7 + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 44+128(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + vpxor %ymm7,%ymm6,%ymm6 + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + vpaddd %ymm6,%ymm1,%ymm1 + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + vpaddd 32(%rbp),%ymm1,%ymm6 + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + vmovdqa %ymm6,32(%rsp) + leaq -64(%rsp),%rsp + vpalignr $4,%ymm2,%ymm3,%ymm4 + addl 0+128(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + vpalignr $4,%ymm0,%ymm1,%ymm7 + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + vpsrld $7,%ymm4,%ymm6 + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + vpaddd %ymm7,%ymm2,%ymm2 + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + vpshufd $250,%ymm1,%ymm7 + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 4+128(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + vpslld $11,%ymm5,%ymm5 + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + vpaddd %ymm4,%ymm2,%ymm2 + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 8+128(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + vpxor %ymm7,%ymm6,%ymm6 + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + vpaddd %ymm6,%ymm2,%ymm2 + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + vpshufd $80,%ymm2,%ymm7 + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 12+128(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + vpxor %ymm7,%ymm6,%ymm6 + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + vpaddd %ymm6,%ymm2,%ymm2 + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + vpaddd 64(%rbp),%ymm2,%ymm6 + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + vmovdqa %ymm6,0(%rsp) + vpalignr $4,%ymm3,%ymm0,%ymm4 + addl 32+128(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + vpalignr $4,%ymm1,%ymm2,%ymm7 + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + vpsrld $7,%ymm4,%ymm6 + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + vpaddd %ymm7,%ymm3,%ymm3 + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + vpsrld $3,%ymm4,%ymm7 + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + vpslld $14,%ymm4,%ymm5 + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + vpxor %ymm6,%ymm7,%ymm4 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + vpshufd $250,%ymm2,%ymm7 + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + vpsrld $11,%ymm6,%ymm6 + addl 36+128(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + vpxor %ymm5,%ymm4,%ymm4 + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + vpslld $11,%ymm5,%ymm5 + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + vpxor %ymm6,%ymm4,%ymm4 + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + vpsrld $10,%ymm7,%ymm6 + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + vpxor %ymm5,%ymm4,%ymm4 + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + vpsrlq $17,%ymm7,%ymm7 + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + vpaddd %ymm4,%ymm3,%ymm3 + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 40+128(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + vpxor %ymm7,%ymm6,%ymm6 + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + vpshufb %ymm8,%ymm6,%ymm6 + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + vpaddd %ymm6,%ymm3,%ymm3 + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + vpshufd $80,%ymm3,%ymm7 + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + vpsrld $10,%ymm7,%ymm6 + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + vpsrlq $17,%ymm7,%ymm7 + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + vpxor %ymm7,%ymm6,%ymm6 + addl 44+128(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + vpsrlq $2,%ymm7,%ymm7 + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + vpxor %ymm7,%ymm6,%ymm6 + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + vpshufb %ymm9,%ymm6,%ymm6 + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + vpaddd %ymm6,%ymm3,%ymm3 + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + vpaddd 96(%rbp),%ymm3,%ymm6 + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + vmovdqa %ymm6,32(%rsp) + leaq 128(%rbp),%rbp + cmpb $0,3(%rbp) + jne L$avx2_00_47 + addl 0+64(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + addl 4+64(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + addl 8+64(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + addl 12+64(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + addl 32+64(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + addl 36+64(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + addl 40+64(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + addl 44+64(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + addl 0(%rsp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + addl 4(%rsp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + addl 8(%rsp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + addl 12(%rsp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + addl 32(%rsp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + addl 36(%rsp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + addl 40(%rsp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + addl 44(%rsp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + movq 512(%rsp),%rdi + addl %r14d,%eax + + leaq 448(%rsp),%rbp + + addl 0(%rdi),%eax + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + addl 24(%rdi),%r10d + addl 28(%rdi),%r11d + + movl %eax,0(%rdi) + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + + cmpq 80(%rbp),%rsi + je L$done_avx2 + + xorl %r14d,%r14d + movl %ebx,%edi + xorl %ecx,%edi + movl %r9d,%r12d + jmp L$ower_avx2 +.p2align 4 +L$ower_avx2: + addl 0+16(%rbp),%r11d + andl %r8d,%r12d + rorxl $25,%r8d,%r13d + rorxl $11,%r8d,%r15d + leal (%rax,%r14,1),%eax + leal (%r11,%r12,1),%r11d + andnl %r10d,%r8d,%r12d + xorl %r15d,%r13d + rorxl $6,%r8d,%r14d + leal (%r11,%r12,1),%r11d + xorl %r14d,%r13d + movl %eax,%r15d + rorxl $22,%eax,%r12d + leal (%r11,%r13,1),%r11d + xorl %ebx,%r15d + rorxl $13,%eax,%r14d + rorxl $2,%eax,%r13d + leal (%rdx,%r11,1),%edx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %ebx,%edi + xorl %r13d,%r14d + leal (%r11,%rdi,1),%r11d + movl %r8d,%r12d + addl 4+16(%rbp),%r10d + andl %edx,%r12d + rorxl $25,%edx,%r13d + rorxl $11,%edx,%edi + leal (%r11,%r14,1),%r11d + leal (%r10,%r12,1),%r10d + andnl %r9d,%edx,%r12d + xorl %edi,%r13d + rorxl $6,%edx,%r14d + leal (%r10,%r12,1),%r10d + xorl %r14d,%r13d + movl %r11d,%edi + rorxl $22,%r11d,%r12d + leal (%r10,%r13,1),%r10d + xorl %eax,%edi + rorxl $13,%r11d,%r14d + rorxl $2,%r11d,%r13d + leal (%rcx,%r10,1),%ecx + andl %edi,%r15d + xorl %r12d,%r14d + xorl %eax,%r15d + xorl %r13d,%r14d + leal (%r10,%r15,1),%r10d + movl %edx,%r12d + addl 8+16(%rbp),%r9d + andl %ecx,%r12d + rorxl $25,%ecx,%r13d + rorxl $11,%ecx,%r15d + leal (%r10,%r14,1),%r10d + leal (%r9,%r12,1),%r9d + andnl %r8d,%ecx,%r12d + xorl %r15d,%r13d + rorxl $6,%ecx,%r14d + leal (%r9,%r12,1),%r9d + xorl %r14d,%r13d + movl %r10d,%r15d + rorxl $22,%r10d,%r12d + leal (%r9,%r13,1),%r9d + xorl %r11d,%r15d + rorxl $13,%r10d,%r14d + rorxl $2,%r10d,%r13d + leal (%rbx,%r9,1),%ebx + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r11d,%edi + xorl %r13d,%r14d + leal (%r9,%rdi,1),%r9d + movl %ecx,%r12d + addl 12+16(%rbp),%r8d + andl %ebx,%r12d + rorxl $25,%ebx,%r13d + rorxl $11,%ebx,%edi + leal (%r9,%r14,1),%r9d + leal (%r8,%r12,1),%r8d + andnl %edx,%ebx,%r12d + xorl %edi,%r13d + rorxl $6,%ebx,%r14d + leal (%r8,%r12,1),%r8d + xorl %r14d,%r13d + movl %r9d,%edi + rorxl $22,%r9d,%r12d + leal (%r8,%r13,1),%r8d + xorl %r10d,%edi + rorxl $13,%r9d,%r14d + rorxl $2,%r9d,%r13d + leal (%rax,%r8,1),%eax + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r10d,%r15d + xorl %r13d,%r14d + leal (%r8,%r15,1),%r8d + movl %ebx,%r12d + addl 32+16(%rbp),%edx + andl %eax,%r12d + rorxl $25,%eax,%r13d + rorxl $11,%eax,%r15d + leal (%r8,%r14,1),%r8d + leal (%rdx,%r12,1),%edx + andnl %ecx,%eax,%r12d + xorl %r15d,%r13d + rorxl $6,%eax,%r14d + leal (%rdx,%r12,1),%edx + xorl %r14d,%r13d + movl %r8d,%r15d + rorxl $22,%r8d,%r12d + leal (%rdx,%r13,1),%edx + xorl %r9d,%r15d + rorxl $13,%r8d,%r14d + rorxl $2,%r8d,%r13d + leal (%r11,%rdx,1),%r11d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %r9d,%edi + xorl %r13d,%r14d + leal (%rdx,%rdi,1),%edx + movl %eax,%r12d + addl 36+16(%rbp),%ecx + andl %r11d,%r12d + rorxl $25,%r11d,%r13d + rorxl $11,%r11d,%edi + leal (%rdx,%r14,1),%edx + leal (%rcx,%r12,1),%ecx + andnl %ebx,%r11d,%r12d + xorl %edi,%r13d + rorxl $6,%r11d,%r14d + leal (%rcx,%r12,1),%ecx + xorl %r14d,%r13d + movl %edx,%edi + rorxl $22,%edx,%r12d + leal (%rcx,%r13,1),%ecx + xorl %r8d,%edi + rorxl $13,%edx,%r14d + rorxl $2,%edx,%r13d + leal (%r10,%rcx,1),%r10d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %r8d,%r15d + xorl %r13d,%r14d + leal (%rcx,%r15,1),%ecx + movl %r11d,%r12d + addl 40+16(%rbp),%ebx + andl %r10d,%r12d + rorxl $25,%r10d,%r13d + rorxl $11,%r10d,%r15d + leal (%rcx,%r14,1),%ecx + leal (%rbx,%r12,1),%ebx + andnl %eax,%r10d,%r12d + xorl %r15d,%r13d + rorxl $6,%r10d,%r14d + leal (%rbx,%r12,1),%ebx + xorl %r14d,%r13d + movl %ecx,%r15d + rorxl $22,%ecx,%r12d + leal (%rbx,%r13,1),%ebx + xorl %edx,%r15d + rorxl $13,%ecx,%r14d + rorxl $2,%ecx,%r13d + leal (%r9,%rbx,1),%r9d + andl %r15d,%edi + xorl %r12d,%r14d + xorl %edx,%edi + xorl %r13d,%r14d + leal (%rbx,%rdi,1),%ebx + movl %r10d,%r12d + addl 44+16(%rbp),%eax + andl %r9d,%r12d + rorxl $25,%r9d,%r13d + rorxl $11,%r9d,%edi + leal (%rbx,%r14,1),%ebx + leal (%rax,%r12,1),%eax + andnl %r11d,%r9d,%r12d + xorl %edi,%r13d + rorxl $6,%r9d,%r14d + leal (%rax,%r12,1),%eax + xorl %r14d,%r13d + movl %ebx,%edi + rorxl $22,%ebx,%r12d + leal (%rax,%r13,1),%eax + xorl %ecx,%edi + rorxl $13,%ebx,%r14d + rorxl $2,%ebx,%r13d + leal (%r8,%rax,1),%r8d + andl %edi,%r15d + xorl %r12d,%r14d + xorl %ecx,%r15d + xorl %r13d,%r14d + leal (%rax,%r15,1),%eax + movl %r9d,%r12d + leaq -64(%rbp),%rbp + cmpq %rsp,%rbp + jae L$ower_avx2 + + movq 512(%rsp),%rdi + addl %r14d,%eax + + leaq 448(%rsp),%rsp + + addl 0(%rdi),%eax + addl 4(%rdi),%ebx + addl 8(%rdi),%ecx + addl 12(%rdi),%edx + addl 16(%rdi),%r8d + addl 20(%rdi),%r9d + leaq 128(%rsi),%rsi + addl 24(%rdi),%r10d + movq %rsi,%r12 + addl 28(%rdi),%r11d + cmpq 64+16(%rsp),%rsi + + movl %eax,0(%rdi) + cmoveq %rsp,%r12 + movl %ebx,4(%rdi) + movl %ecx,8(%rdi) + movl %edx,12(%rdi) + movl %r8d,16(%rdi) + movl %r9d,20(%rdi) + movl %r10d,24(%rdi) + movl %r11d,28(%rdi) + + jbe L$oop_avx2 + leaq (%rsp),%rbp + +L$done_avx2: + leaq (%rbp),%rsp + movq 88(%rsp),%rsi + + vzeroupper + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +L$epilogue_avx2: + .byte 0xf3,0xc3 + + + diff --git a/lib/accelerated/x86/macosx/sha512-ssse3-x86.s b/lib/accelerated/x86/macosx/sha512-ssse3-x86.s index 0014a8116b..4e60bb45f6 100644 --- a/lib/accelerated/x86/macosx/sha512-ssse3-x86.s +++ b/lib/accelerated/x86/macosx/sha512-ssse3-x86.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,6 @@ # # *** This file is auto-generated *** # -.file "sha512-586.s" .text .globl _sha512_block_data_order .align 4 @@ -593,6 +592,8 @@ L001K512: .long 4234509866,1501505948 .long 987167468,1607167915 .long 1246189591,1816402316 +.long 67438087,66051 +.long 202182159,134810123 .byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97 .byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32 .byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 diff --git a/lib/accelerated/x86/macosx/sha512-ssse3-x86_64.s b/lib/accelerated/x86/macosx/sha512-ssse3-x86_64.s index 7e73227c2b..8bf161601e 100644 --- a/lib/accelerated/x86/macosx/sha512-ssse3-x86_64.s +++ b/lib/accelerated/x86/macosx/sha512-ssse3-x86_64.s @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2013, Andy Polyakov +# Copyright (c) 2011-2016, Andy Polyakov # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -40,2850 +40,5438 @@ .text -.globl _sha256_block_data_order +.globl _sha512_block_data_order .p2align 4 -_sha256_block_data_order: +_sha512_block_data_order: + leaq __gnutls_x86_cpuid_s(%rip),%r11 movl 0(%r11),%r9d movl 4(%r11),%r10d movl 8(%r11),%r11d - testl $512,%r10d - jnz L$ssse3_shortcut + testl $2048,%r10d + jnz L$xop_shortcut + andl $296,%r11d + cmpl $296,%r11d + je L$avx2_shortcut + andl $1073741824,%r9d + andl $268435968,%r10d + orl %r9d,%r10d + cmpl $1342177792,%r10d + je L$avx_shortcut + movq %rsp,%rax + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 - movq %rsp,%r11 + shlq $4,%rdx - subq $64+32,%rsp - leaq (%rsi,%rdx,4),%rdx + subq $128+32,%rsp + leaq (%rsi,%rdx,8),%rdx andq $-64,%rsp - movq %rdi,64+0(%rsp) - movq %rsi,64+8(%rsp) - movq %rdx,64+16(%rsp) - movq %r11,64+24(%rsp) + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) + L$prologue: - movl 0(%rdi),%eax - movl 4(%rdi),%ebx - movl 8(%rdi),%ecx - movl 12(%rdi),%edx - movl 16(%rdi),%r8d - movl 20(%rdi),%r9d - movl 24(%rdi),%r10d - movl 28(%rdi),%r11d + movq 0(%rdi),%rax + movq 8(%rdi),%rbx + movq 16(%rdi),%rcx + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 jmp L$loop .p2align 4 L$loop: - movl %ebx,%edi - leaq K256(%rip),%rbp - xorl %ecx,%edi - movl 0(%rsi),%r12d - movl %r8d,%r13d - movl %eax,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,0(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - movl 4(%rsi),%r12d - movl %edx,%r13d - movl %r11d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,4(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - movl 8(%rsi),%r12d - movl %ecx,%r13d - movl %r10d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,8(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - movl 12(%rsi),%r12d - movl %ebx,%r13d - movl %r9d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,12(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - movl 16(%rsi),%r12d - movl %eax,%r13d - movl %r8d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,16(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - leaq 4(%rbp),%rbp - addl %r14d,%edx - - movl 20(%rsi),%r12d - movl %r11d,%r13d - movl %edx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,20(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - movl 24(%rsi),%r12d - movl %r10d,%r13d - movl %ecx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,24(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - movl 28(%rsi),%r12d - movl %r9d,%r13d - movl %ebx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,28(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - leaq 20(%rbp),%rbp - addl %r14d,%eax - - movl 32(%rsi),%r12d - movl %r8d,%r13d - movl %eax,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,32(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - movl 36(%rsi),%r12d - movl %edx,%r13d - movl %r11d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,36(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - movl 40(%rsi),%r12d - movl %ecx,%r13d - movl %r10d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,40(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - movl 44(%rsi),%r12d - movl %ebx,%r13d - movl %r9d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,44(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - movl 48(%rsi),%r12d - movl %eax,%r13d - movl %r8d,%r14d - bswapl %r12d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,48(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - leaq 4(%rbp),%rbp - addl %r14d,%edx - - movl 52(%rsi),%r12d - movl %r11d,%r13d - movl %edx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,52(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - movl 56(%rsi),%r12d - movl %r10d,%r13d - movl %ecx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,56(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - movl 60(%rsi),%r12d - movl %r9d,%r13d - movl %ebx,%r14d - bswapl %r12d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,60(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - movl 4(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%eax - + movq %rbx,%rdi + leaq K512(%rip),%rbp + xorq %rcx,%rdi + movq 0(%rsi),%r12 + movq %r8,%r13 + movq %rax,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,0(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + addq %r14,%r11 + movq 8(%rsi),%r12 + movq %rdx,%r13 + movq %r11,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,8(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + addq %r14,%r10 + movq 16(%rsi),%r12 + movq %rcx,%r13 + movq %r10,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,16(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + addq %r14,%r9 + movq 24(%rsi),%r12 + movq %rbx,%r13 + movq %r9,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rcx,%rdi + + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,24(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + addq %r14,%r8 + movq 32(%rsi),%r12 + movq %rax,%r13 + movq %r8,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,32(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + addq %r14,%rdx + movq 40(%rsi),%r12 + movq %r11,%r13 + movq %rdx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,40(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + addq %r14,%rcx + movq 48(%rsi),%r12 + movq %r10,%r13 + movq %rcx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,48(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + addq %r14,%rbx + movq 56(%rsi),%r12 + movq %r9,%r13 + movq %rbx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,56(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp + addq %r14,%rax + movq 64(%rsi),%r12 + movq %r8,%r13 + movq %rax,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,64(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + addq %r14,%r11 + movq 72(%rsi),%r12 + movq %rdx,%r13 + movq %r11,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,72(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + addq %r14,%r10 + movq 80(%rsi),%r12 + movq %rcx,%r13 + movq %r10,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,80(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + addq %r14,%r9 + movq 88(%rsi),%r12 + movq %rbx,%r13 + movq %r9,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rcx,%rdi + + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,88(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + addq %r14,%r8 + movq 96(%rsi),%r12 + movq %rax,%r13 + movq %r8,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,96(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + addq %r14,%rdx + movq 104(%rsi),%r12 + movq %r11,%r13 + movq %rdx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,104(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + addq %r14,%rcx + movq 112(%rsi),%r12 + movq %r10,%r13 + movq %rcx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,112(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + addq %r14,%rbx + movq 120(%rsi),%r12 + movq %r9,%r13 + movq %rbx,%r14 + bswapq %r12 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,120(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp jmp L$rounds_16_xx .p2align 4 L$rounds_16_xx: - - movl 56(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 36(%rsp),%r12d - xorl %r15d,%r14d - - addl 0(%rsp),%r12d - movl %r8d,%r13d - addl %r14d,%r12d - movl %eax,%r14d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,0(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - movl 8(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - - movl 60(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 40(%rsp),%r12d - xorl %edi,%r14d - - addl 4(%rsp),%r12d - movl %edx,%r13d - addl %r14d,%r12d - movl %r11d,%r14d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,4(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - movl 12(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - - movl 0(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 44(%rsp),%r12d - xorl %r15d,%r14d - - addl 8(%rsp),%r12d - movl %ecx,%r13d - addl %r14d,%r12d - movl %r10d,%r14d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,8(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - movl 16(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - - movl 4(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 48(%rsp),%r12d - xorl %edi,%r14d - - addl 12(%rsp),%r12d - movl %ebx,%r13d - addl %r14d,%r12d - movl %r9d,%r14d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,12(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - movl 20(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - - movl 8(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 52(%rsp),%r12d - xorl %r15d,%r14d - - addl 16(%rsp),%r12d - movl %eax,%r13d - addl %r14d,%r12d - movl %r8d,%r14d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,16(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - movl 24(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%edx - - - movl 12(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 56(%rsp),%r12d - xorl %edi,%r14d - - addl 20(%rsp),%r12d - movl %r11d,%r13d - addl %r14d,%r12d - movl %edx,%r14d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,20(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - movl 28(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - - movl 16(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 60(%rsp),%r12d - xorl %r15d,%r14d - - addl 24(%rsp),%r12d - movl %r10d,%r13d - addl %r14d,%r12d - movl %ecx,%r14d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,24(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - movl 32(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - - movl 20(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 0(%rsp),%r12d - xorl %edi,%r14d - - addl 28(%rsp),%r12d - movl %r9d,%r13d - addl %r14d,%r12d - movl %ebx,%r14d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,28(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - movl 36(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%eax - - - movl 24(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 4(%rsp),%r12d - xorl %r15d,%r14d - - addl 32(%rsp),%r12d - movl %r8d,%r13d - addl %r14d,%r12d - movl %eax,%r14d - rorl $14,%r13d - movl %r9d,%r15d - - rorl $9,%r14d - xorl %r8d,%r13d - xorl %r10d,%r15d - - movl %r12d,32(%rsp) - xorl %eax,%r14d - andl %r8d,%r15d - - rorl $5,%r13d - addl %r11d,%r12d - xorl %r10d,%r15d - - rorl $11,%r14d - xorl %r8d,%r13d - addl %r15d,%r12d - - movl %eax,%r15d - addl (%rbp),%r12d - xorl %eax,%r14d - - rorl $6,%r13d - xorl %ebx,%r15d - movl %ebx,%r11d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r11d - addl %r12d,%edx - addl %r12d,%r11d - movl 40(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r11d - - - movl 28(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 8(%rsp),%r12d - xorl %edi,%r14d - - addl 36(%rsp),%r12d - movl %edx,%r13d - addl %r14d,%r12d - movl %r11d,%r14d - rorl $14,%r13d - movl %r8d,%edi - - rorl $9,%r14d - xorl %edx,%r13d - xorl %r9d,%edi - - movl %r12d,36(%rsp) - xorl %r11d,%r14d - andl %edx,%edi - - rorl $5,%r13d - addl %r10d,%r12d - xorl %r9d,%edi - - rorl $11,%r14d - xorl %edx,%r13d - addl %edi,%r12d - - movl %r11d,%edi - addl (%rbp),%r12d - xorl %r11d,%r14d - - rorl $6,%r13d - xorl %eax,%edi - movl %eax,%r10d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r10d - addl %r12d,%ecx - addl %r12d,%r10d - movl 44(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r10d - - - movl 32(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 12(%rsp),%r12d - xorl %r15d,%r14d - - addl 40(%rsp),%r12d - movl %ecx,%r13d - addl %r14d,%r12d - movl %r10d,%r14d - rorl $14,%r13d - movl %edx,%r15d - - rorl $9,%r14d - xorl %ecx,%r13d - xorl %r8d,%r15d - - movl %r12d,40(%rsp) - xorl %r10d,%r14d - andl %ecx,%r15d - - rorl $5,%r13d - addl %r9d,%r12d - xorl %r8d,%r15d - - rorl $11,%r14d - xorl %ecx,%r13d - addl %r15d,%r12d - - movl %r10d,%r15d - addl (%rbp),%r12d - xorl %r10d,%r14d - - rorl $6,%r13d - xorl %r11d,%r15d - movl %r11d,%r9d - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%r9d - addl %r12d,%ebx - addl %r12d,%r9d - movl 48(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%r9d - - - movl 36(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 16(%rsp),%r12d - xorl %edi,%r14d - - addl 44(%rsp),%r12d - movl %ebx,%r13d - addl %r14d,%r12d - movl %r9d,%r14d - rorl $14,%r13d - movl %ecx,%edi - - rorl $9,%r14d - xorl %ebx,%r13d - xorl %edx,%edi - - movl %r12d,44(%rsp) - xorl %r9d,%r14d - andl %ebx,%edi - - rorl $5,%r13d - addl %r8d,%r12d - xorl %edx,%edi - - rorl $11,%r14d - xorl %ebx,%r13d - addl %edi,%r12d - - movl %r9d,%edi - addl (%rbp),%r12d - xorl %r9d,%r14d - - rorl $6,%r13d - xorl %r10d,%edi - movl %r10d,%r8d - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%r8d - addl %r12d,%eax - addl %r12d,%r8d - movl 52(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%r8d - - - movl 40(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 20(%rsp),%r12d - xorl %r15d,%r14d - - addl 48(%rsp),%r12d - movl %eax,%r13d - addl %r14d,%r12d - movl %r8d,%r14d - rorl $14,%r13d - movl %ebx,%r15d - - rorl $9,%r14d - xorl %eax,%r13d - xorl %ecx,%r15d - - movl %r12d,48(%rsp) - xorl %r8d,%r14d - andl %eax,%r15d - - rorl $5,%r13d - addl %edx,%r12d - xorl %ecx,%r15d - - rorl $11,%r14d - xorl %eax,%r13d - addl %r15d,%r12d - - movl %r8d,%r15d - addl (%rbp),%r12d - xorl %r8d,%r14d - - rorl $6,%r13d - xorl %r9d,%r15d - movl %r9d,%edx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%edx - addl %r12d,%r11d - addl %r12d,%edx - movl 56(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%edx - - - movl 44(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 24(%rsp),%r12d - xorl %edi,%r14d - - addl 52(%rsp),%r12d - movl %r11d,%r13d - addl %r14d,%r12d - movl %edx,%r14d - rorl $14,%r13d - movl %eax,%edi - - rorl $9,%r14d - xorl %r11d,%r13d - xorl %ebx,%edi - - movl %r12d,52(%rsp) - xorl %edx,%r14d - andl %r11d,%edi - - rorl $5,%r13d - addl %ecx,%r12d - xorl %ebx,%edi - - rorl $11,%r14d - xorl %r11d,%r13d - addl %edi,%r12d - - movl %edx,%edi - addl (%rbp),%r12d - xorl %edx,%r14d - - rorl $6,%r13d - xorl %r8d,%edi - movl %r8d,%ecx - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%ecx - addl %r12d,%r10d - addl %r12d,%ecx - movl 60(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ecx - - - movl 48(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%r15d - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %r15d,%r14d - shrl $10,%r15d - - xorl %r13d,%r12d - rorl $17,%r14d - addl 28(%rsp),%r12d - xorl %r15d,%r14d - - addl 56(%rsp),%r12d - movl %r10d,%r13d - addl %r14d,%r12d - movl %ecx,%r14d - rorl $14,%r13d - movl %r11d,%r15d - - rorl $9,%r14d - xorl %r10d,%r13d - xorl %eax,%r15d - - movl %r12d,56(%rsp) - xorl %ecx,%r14d - andl %r10d,%r15d - - rorl $5,%r13d - addl %ebx,%r12d - xorl %eax,%r15d - - rorl $11,%r14d - xorl %r10d,%r13d - addl %r15d,%r12d - - movl %ecx,%r15d - addl (%rbp),%r12d - xorl %ecx,%r14d - - rorl $6,%r13d - xorl %edx,%r15d - movl %edx,%ebx - - rorl $2,%r14d - andl %r15d,%edi - addl %r13d,%r12d - - xorl %edi,%ebx - addl %r12d,%r9d - addl %r12d,%ebx - movl 0(%rsp),%r13d - leaq 4(%rbp),%rbp - addl %r14d,%ebx - - - movl 52(%rsp),%r14d - - movl %r13d,%r12d - rorl $11,%r13d - movl %r14d,%edi - rorl $2,%r14d - - xorl %r12d,%r13d - shrl $3,%r12d - rorl $7,%r13d - xorl %edi,%r14d - shrl $10,%edi - - xorl %r13d,%r12d - rorl $17,%r14d - addl 32(%rsp),%r12d - xorl %edi,%r14d - - addl 60(%rsp),%r12d - movl %r9d,%r13d - addl %r14d,%r12d - movl %ebx,%r14d - rorl $14,%r13d - movl %r10d,%edi - - rorl $9,%r14d - xorl %r9d,%r13d - xorl %r11d,%edi - - movl %r12d,60(%rsp) - xorl %ebx,%r14d - andl %r9d,%edi - - rorl $5,%r13d - addl %eax,%r12d - xorl %r11d,%edi - - rorl $11,%r14d - xorl %r9d,%r13d - addl %edi,%r12d - - movl %ebx,%edi - addl (%rbp),%r12d - xorl %ebx,%r14d - - rorl $6,%r13d - xorl %ecx,%edi - movl %ecx,%eax - - rorl $2,%r14d - andl %edi,%r15d - addl %r13d,%r12d - - xorl %r15d,%eax - addl %r12d,%r8d - addl %r12d,%eax - movl 4(%rsp),%r13d - leaq 20(%rbp),%rbp - addl %r14d,%eax - - cmpb $0,3(%rbp) + movq 8(%rsp),%r13 + movq 112(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rax + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 72(%rsp),%r12 + + addq 0(%rsp),%r12 + movq %r8,%r13 + addq %r15,%r12 + movq %rax,%r14 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,0(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + movq 16(%rsp),%r13 + movq 120(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r11 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 80(%rsp),%r12 + + addq 8(%rsp),%r12 + movq %rdx,%r13 + addq %rdi,%r12 + movq %r11,%r14 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,8(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + movq 24(%rsp),%r13 + movq 0(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r10 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 88(%rsp),%r12 + + addq 16(%rsp),%r12 + movq %rcx,%r13 + addq %r15,%r12 + movq %r10,%r14 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,16(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + movq 32(%rsp),%r13 + movq 8(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r9 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 96(%rsp),%r12 + + addq 24(%rsp),%r12 + movq %rbx,%r13 + addq %rdi,%r12 + movq %r9,%r14 + rorq $23,%r13 + movq %rcx,%rdi + + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,24(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + movq 40(%rsp),%r13 + movq 16(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r8 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 104(%rsp),%r12 + + addq 32(%rsp),%r12 + movq %rax,%r13 + addq %r15,%r12 + movq %r8,%r14 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,32(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + movq 48(%rsp),%r13 + movq 24(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rdx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 112(%rsp),%r12 + + addq 40(%rsp),%r12 + movq %r11,%r13 + addq %rdi,%r12 + movq %rdx,%r14 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,40(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + movq 56(%rsp),%r13 + movq 32(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rcx + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 120(%rsp),%r12 + + addq 48(%rsp),%r12 + movq %r10,%r13 + addq %r15,%r12 + movq %rcx,%r14 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,48(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + movq 64(%rsp),%r13 + movq 40(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rbx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 0(%rsp),%r12 + + addq 56(%rsp),%r12 + movq %r9,%r13 + addq %rdi,%r12 + movq %rbx,%r14 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,56(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp + movq 72(%rsp),%r13 + movq 48(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rax + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 8(%rsp),%r12 + + addq 64(%rsp),%r12 + movq %r8,%r13 + addq %r15,%r12 + movq %rax,%r14 + rorq $23,%r13 + movq %r9,%r15 + + xorq %r8,%r13 + rorq $5,%r14 + xorq %r10,%r15 + + movq %r12,64(%rsp) + xorq %rax,%r14 + andq %r8,%r15 + + rorq $4,%r13 + addq %r11,%r12 + xorq %r10,%r15 + + rorq $6,%r14 + xorq %r8,%r13 + addq %r15,%r12 + + movq %rax,%r15 + addq (%rbp),%r12 + xorq %rax,%r14 + + xorq %rbx,%r15 + rorq $14,%r13 + movq %rbx,%r11 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r11 + addq %r12,%rdx + addq %r12,%r11 + + leaq 8(%rbp),%rbp + movq 80(%rsp),%r13 + movq 56(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r11 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 16(%rsp),%r12 + + addq 72(%rsp),%r12 + movq %rdx,%r13 + addq %rdi,%r12 + movq %r11,%r14 + rorq $23,%r13 + movq %r8,%rdi + + xorq %rdx,%r13 + rorq $5,%r14 + xorq %r9,%rdi + + movq %r12,72(%rsp) + xorq %r11,%r14 + andq %rdx,%rdi + + rorq $4,%r13 + addq %r10,%r12 + xorq %r9,%rdi + + rorq $6,%r14 + xorq %rdx,%r13 + addq %rdi,%r12 + + movq %r11,%rdi + addq (%rbp),%r12 + xorq %r11,%r14 + + xorq %rax,%rdi + rorq $14,%r13 + movq %rax,%r10 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r10 + addq %r12,%rcx + addq %r12,%r10 + + leaq 24(%rbp),%rbp + movq 88(%rsp),%r13 + movq 64(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r10 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 24(%rsp),%r12 + + addq 80(%rsp),%r12 + movq %rcx,%r13 + addq %r15,%r12 + movq %r10,%r14 + rorq $23,%r13 + movq %rdx,%r15 + + xorq %rcx,%r13 + rorq $5,%r14 + xorq %r8,%r15 + + movq %r12,80(%rsp) + xorq %r10,%r14 + andq %rcx,%r15 + + rorq $4,%r13 + addq %r9,%r12 + xorq %r8,%r15 + + rorq $6,%r14 + xorq %rcx,%r13 + addq %r15,%r12 + + movq %r10,%r15 + addq (%rbp),%r12 + xorq %r10,%r14 + + xorq %r11,%r15 + rorq $14,%r13 + movq %r11,%r9 + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%r9 + addq %r12,%rbx + addq %r12,%r9 + + leaq 8(%rbp),%rbp + movq 96(%rsp),%r13 + movq 72(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r9 + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 32(%rsp),%r12 + + addq 88(%rsp),%r12 + movq %rbx,%r13 + addq %rdi,%r12 + movq %r9,%r14 + rorq $23,%r13 + movq %rcx,%rdi + + xorq %rbx,%r13 + rorq $5,%r14 + xorq %rdx,%rdi + + movq %r12,88(%rsp) + xorq %r9,%r14 + andq %rbx,%rdi + + rorq $4,%r13 + addq %r8,%r12 + xorq %rdx,%rdi + + rorq $6,%r14 + xorq %rbx,%r13 + addq %rdi,%r12 + + movq %r9,%rdi + addq (%rbp),%r12 + xorq %r9,%r14 + + xorq %r10,%rdi + rorq $14,%r13 + movq %r10,%r8 + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%r8 + addq %r12,%rax + addq %r12,%r8 + + leaq 24(%rbp),%rbp + movq 104(%rsp),%r13 + movq 80(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%r8 + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 40(%rsp),%r12 + + addq 96(%rsp),%r12 + movq %rax,%r13 + addq %r15,%r12 + movq %r8,%r14 + rorq $23,%r13 + movq %rbx,%r15 + + xorq %rax,%r13 + rorq $5,%r14 + xorq %rcx,%r15 + + movq %r12,96(%rsp) + xorq %r8,%r14 + andq %rax,%r15 + + rorq $4,%r13 + addq %rdx,%r12 + xorq %rcx,%r15 + + rorq $6,%r14 + xorq %rax,%r13 + addq %r15,%r12 + + movq %r8,%r15 + addq (%rbp),%r12 + xorq %r8,%r14 + + xorq %r9,%r15 + rorq $14,%r13 + movq %r9,%rdx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rdx + addq %r12,%r11 + addq %r12,%rdx + + leaq 8(%rbp),%rbp + movq 112(%rsp),%r13 + movq 88(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rdx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 48(%rsp),%r12 + + addq 104(%rsp),%r12 + movq %r11,%r13 + addq %rdi,%r12 + movq %rdx,%r14 + rorq $23,%r13 + movq %rax,%rdi + + xorq %r11,%r13 + rorq $5,%r14 + xorq %rbx,%rdi + + movq %r12,104(%rsp) + xorq %rdx,%r14 + andq %r11,%rdi + + rorq $4,%r13 + addq %rcx,%r12 + xorq %rbx,%rdi + + rorq $6,%r14 + xorq %r11,%r13 + addq %rdi,%r12 + + movq %rdx,%rdi + addq (%rbp),%r12 + xorq %rdx,%r14 + + xorq %r8,%rdi + rorq $14,%r13 + movq %r8,%rcx + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rcx + addq %r12,%r10 + addq %r12,%rcx + + leaq 24(%rbp),%rbp + movq 120(%rsp),%r13 + movq 96(%rsp),%r15 + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rcx + movq %r15,%r14 + rorq $42,%r15 + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%r15 + shrq $6,%r14 + + rorq $19,%r15 + xorq %r13,%r12 + xorq %r14,%r15 + addq 56(%rsp),%r12 + + addq 112(%rsp),%r12 + movq %r10,%r13 + addq %r15,%r12 + movq %rcx,%r14 + rorq $23,%r13 + movq %r11,%r15 + + xorq %r10,%r13 + rorq $5,%r14 + xorq %rax,%r15 + + movq %r12,112(%rsp) + xorq %rcx,%r14 + andq %r10,%r15 + + rorq $4,%r13 + addq %rbx,%r12 + xorq %rax,%r15 + + rorq $6,%r14 + xorq %r10,%r13 + addq %r15,%r12 + + movq %rcx,%r15 + addq (%rbp),%r12 + xorq %rcx,%r14 + + xorq %rdx,%r15 + rorq $14,%r13 + movq %rdx,%rbx + + andq %r15,%rdi + rorq $28,%r14 + addq %r13,%r12 + + xorq %rdi,%rbx + addq %r12,%r9 + addq %r12,%rbx + + leaq 8(%rbp),%rbp + movq 0(%rsp),%r13 + movq 104(%rsp),%rdi + + movq %r13,%r12 + rorq $7,%r13 + addq %r14,%rbx + movq %rdi,%r14 + rorq $42,%rdi + + xorq %r12,%r13 + shrq $7,%r12 + rorq $1,%r13 + xorq %r14,%rdi + shrq $6,%r14 + + rorq $19,%rdi + xorq %r13,%r12 + xorq %r14,%rdi + addq 64(%rsp),%r12 + + addq 120(%rsp),%r12 + movq %r9,%r13 + addq %rdi,%r12 + movq %rbx,%r14 + rorq $23,%r13 + movq %r10,%rdi + + xorq %r9,%r13 + rorq $5,%r14 + xorq %r11,%rdi + + movq %r12,120(%rsp) + xorq %rbx,%r14 + andq %r9,%rdi + + rorq $4,%r13 + addq %rax,%r12 + xorq %r11,%rdi + + rorq $6,%r14 + xorq %r9,%r13 + addq %rdi,%r12 + + movq %rbx,%rdi + addq (%rbp),%r12 + xorq %rbx,%r14 + + xorq %rcx,%rdi + rorq $14,%r13 + movq %rcx,%rax + + andq %rdi,%r15 + rorq $28,%r14 + addq %r13,%r12 + + xorq %r15,%rax + addq %r12,%r8 + addq %r12,%rax + + leaq 24(%rbp),%rbp + cmpb $0,7(%rbp) jnz L$rounds_16_xx - movq 64+0(%rsp),%rdi - leaq 64(%rsi),%rsi - - addl 0(%rdi),%eax - addl 4(%rdi),%ebx - addl 8(%rdi),%ecx - addl 12(%rdi),%edx - addl 16(%rdi),%r8d - addl 20(%rdi),%r9d - addl 24(%rdi),%r10d - addl 28(%rdi),%r11d - - cmpq 64+16(%rsp),%rsi - - movl %eax,0(%rdi) - movl %ebx,4(%rdi) - movl %ecx,8(%rdi) - movl %edx,12(%rdi) - movl %r8d,16(%rdi) - movl %r9d,20(%rdi) - movl %r10d,24(%rdi) - movl %r11d,28(%rdi) + movq 128+0(%rsp),%rdi + addq %r14,%rax + leaq 128(%rsi),%rsi + + addq 0(%rdi),%rax + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) jb L$loop - movq 64+24(%rsp),%rsi - movq (%rsi),%r15 - movq 8(%rsi),%r14 - movq 16(%rsi),%r13 - movq 24(%rsi),%r12 - movq 32(%rsi),%rbp - movq 40(%rsi),%rbx - leaq 48(%rsi),%rsp + movq 152(%rsp),%rsi + + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + L$epilogue: .byte 0xf3,0xc3 + .p2align 6 -K256: -.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 -.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 -.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 -.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 -.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 -.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 -.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 -.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 -.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc -.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc -.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da -.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da -.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 -.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 -.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 -.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 -.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 -.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 -.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 -.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 -.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 -.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 -.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 -.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 -.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 -.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 -.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 -.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 -.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 -.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 -.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 -.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 - -.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f -.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f -.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff -.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff -.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 -.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908 -.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +K512: +.quad 0x428a2f98d728ae22,0x7137449123ef65cd +.quad 0x428a2f98d728ae22,0x7137449123ef65cd +.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc +.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc +.quad 0x3956c25bf348b538,0x59f111f1b605d019 +.quad 0x3956c25bf348b538,0x59f111f1b605d019 +.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 +.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 +.quad 0xd807aa98a3030242,0x12835b0145706fbe +.quad 0xd807aa98a3030242,0x12835b0145706fbe +.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 +.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 +.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 +.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 +.quad 0x9bdc06a725c71235,0xc19bf174cf692694 +.quad 0x9bdc06a725c71235,0xc19bf174cf692694 +.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 +.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 +.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 +.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 +.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 +.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 +.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 +.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 +.quad 0x983e5152ee66dfab,0xa831c66d2db43210 +.quad 0x983e5152ee66dfab,0xa831c66d2db43210 +.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 +.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 +.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 +.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 +.quad 0x06ca6351e003826f,0x142929670a0e6e70 +.quad 0x06ca6351e003826f,0x142929670a0e6e70 +.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 +.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 +.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df +.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df +.quad 0x650a73548baf63de,0x766a0abb3c77b2a8 +.quad 0x650a73548baf63de,0x766a0abb3c77b2a8 +.quad 0x81c2c92e47edaee6,0x92722c851482353b +.quad 0x81c2c92e47edaee6,0x92722c851482353b +.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 +.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 +.quad 0xc24b8b70d0f89791,0xc76c51a30654be30 +.quad 0xc24b8b70d0f89791,0xc76c51a30654be30 +.quad 0xd192e819d6ef5218,0xd69906245565a910 +.quad 0xd192e819d6ef5218,0xd69906245565a910 +.quad 0xf40e35855771202a,0x106aa07032bbd1b8 +.quad 0xf40e35855771202a,0x106aa07032bbd1b8 +.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 +.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 +.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 +.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 +.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb +.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb +.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 +.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 +.quad 0x748f82ee5defb2fc,0x78a5636f43172f60 +.quad 0x748f82ee5defb2fc,0x78a5636f43172f60 +.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec +.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec +.quad 0x90befffa23631e28,0xa4506cebde82bde9 +.quad 0x90befffa23631e28,0xa4506cebde82bde9 +.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b +.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b +.quad 0xca273eceea26619c,0xd186b8c721c0c207 +.quad 0xca273eceea26619c,0xd186b8c721c0c207 +.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 +.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 +.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 +.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 +.quad 0x113f9804bef90dae,0x1b710b35131c471b +.quad 0x113f9804bef90dae,0x1b710b35131c471b +.quad 0x28db77f523047d84,0x32caab7b40c72493 +.quad 0x28db77f523047d84,0x32caab7b40c72493 +.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c +.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c +.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a +.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a +.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 + +.quad 0x0001020304050607,0x08090a0b0c0d0e0f +.quad 0x0001020304050607,0x08090a0b0c0d0e0f +.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .p2align 6 -sha256_block_data_order_ssse3: -L$ssse3_shortcut: +sha512_block_data_order_xop: + +L$xop_shortcut: + movq %rsp,%rax + pushq %rbx + pushq %rbp + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 - movq %rsp,%r11 + shlq $4,%rdx - subq $96,%rsp - leaq (%rsi,%rdx,4),%rdx + subq $160,%rsp + leaq (%rsi,%rdx,8),%rdx andq $-64,%rsp - movq %rdi,64+0(%rsp) - movq %rsi,64+8(%rsp) - movq %rdx,64+16(%rsp) - movq %r11,64+24(%rsp) -L$prologue_ssse3: - - movl 0(%rdi),%eax - movl 4(%rdi),%ebx - movl 8(%rdi),%ecx - movl 12(%rdi),%edx - movl 16(%rdi),%r8d - movl 20(%rdi),%r9d - movl 24(%rdi),%r10d - movl 28(%rdi),%r11d - movdqa K256+512+32(%rip),%xmm8 - movdqa K256+512+64(%rip),%xmm9 - jmp L$loop_ssse3 + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) + +L$prologue_xop: + + vzeroupper + movq 0(%rdi),%rax + movq 8(%rdi),%rbx + movq 16(%rdi),%rcx + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 + jmp L$loop_xop .p2align 4 -L$loop_ssse3: - movdqa K256+512(%rip),%xmm7 - movdqu 0(%rsi),%xmm0 - movdqu 16(%rsi),%xmm1 - movdqu 32(%rsi),%xmm2 - movdqu 48(%rsi),%xmm3 -.byte 102,15,56,0,199 - leaq K256(%rip),%rbp -.byte 102,15,56,0,207 - movdqa 0(%rbp),%xmm4 -.byte 102,15,56,0,215 - movdqa 32(%rbp),%xmm5 - paddd %xmm0,%xmm4 - movdqa 64(%rbp),%xmm6 -.byte 102,15,56,0,223 - movdqa 96(%rbp),%xmm7 - paddd %xmm1,%xmm5 - paddd %xmm2,%xmm6 - paddd %xmm3,%xmm7 - movdqa %xmm4,0(%rsp) - movl %eax,%r14d - movdqa %xmm5,16(%rsp) - movl %ebx,%edi - movdqa %xmm6,32(%rsp) - xorl %ecx,%edi - movdqa %xmm7,48(%rsp) - movl %r8d,%r13d - jmp L$ssse3_00_47 +L$loop_xop: + vmovdqa K512+1280(%rip),%xmm11 + vmovdqu 0(%rsi),%xmm0 + leaq K512+128(%rip),%rbp + vmovdqu 16(%rsi),%xmm1 + vmovdqu 32(%rsi),%xmm2 + vpshufb %xmm11,%xmm0,%xmm0 + vmovdqu 48(%rsi),%xmm3 + vpshufb %xmm11,%xmm1,%xmm1 + vmovdqu 64(%rsi),%xmm4 + vpshufb %xmm11,%xmm2,%xmm2 + vmovdqu 80(%rsi),%xmm5 + vpshufb %xmm11,%xmm3,%xmm3 + vmovdqu 96(%rsi),%xmm6 + vpshufb %xmm11,%xmm4,%xmm4 + vmovdqu 112(%rsi),%xmm7 + vpshufb %xmm11,%xmm5,%xmm5 + vpaddq -128(%rbp),%xmm0,%xmm8 + vpshufb %xmm11,%xmm6,%xmm6 + vpaddq -96(%rbp),%xmm1,%xmm9 + vpshufb %xmm11,%xmm7,%xmm7 + vpaddq -64(%rbp),%xmm2,%xmm10 + vpaddq -32(%rbp),%xmm3,%xmm11 + vmovdqa %xmm8,0(%rsp) + vpaddq 0(%rbp),%xmm4,%xmm8 + vmovdqa %xmm9,16(%rsp) + vpaddq 32(%rbp),%xmm5,%xmm9 + vmovdqa %xmm10,32(%rsp) + vpaddq 64(%rbp),%xmm6,%xmm10 + vmovdqa %xmm11,48(%rsp) + vpaddq 96(%rbp),%xmm7,%xmm11 + vmovdqa %xmm8,64(%rsp) + movq %rax,%r14 + vmovdqa %xmm9,80(%rsp) + movq %rbx,%rdi + vmovdqa %xmm10,96(%rsp) + xorq %rcx,%rdi + vmovdqa %xmm11,112(%rsp) + movq %r8,%r13 + jmp L$xop_00_47 .p2align 4 -L$ssse3_00_47: - subq $-32*4,%rbp - rorl $14,%r13d - movl %r14d,%eax - movdqa %xmm1,%xmm4 - movl %r9d,%r12d - movdqa %xmm3,%xmm7 - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d -.byte 102,15,58,15,224,4 - rorl $5,%r13d - xorl %eax,%r14d -.byte 102,15,58,15,250,4 - andl %r8d,%r12d - xorl %r8d,%r13d - addl 0(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - movdqa %xmm4,%xmm5 - xorl %ebx,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - psrld $3,%xmm4 - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - paddd %xmm7,%xmm0 - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - psrld $7,%xmm6 - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - pshufd $250,%xmm3,%xmm7 - movl %r8d,%r12d - pslld $14,%xmm5 - xorl %edx,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %r9d,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %r11d,%r14d - pxor %xmm5,%xmm4 - andl %edx,%r12d - xorl %edx,%r13d - pslld $11,%xmm5 - addl 4(%rsp),%r10d - pxor %xmm6,%xmm4 - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - movdqa %xmm7,%xmm6 - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %r11d,%r14d - psrld $10,%xmm7 - addl %r13d,%r10d - xorl %eax,%r15d - paddd %xmm4,%xmm0 - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - psrlq $17,%xmm6 - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - pxor %xmm6,%xmm7 - xorl %ecx,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - pxor %xmm6,%xmm7 - andl %ecx,%r12d - xorl %ecx,%r13d - addl 8(%rsp),%r9d -.byte 102,65,15,56,0,248 - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm0 - addl %r12d,%r9d - pshufd $80,%xmm0,%xmm7 - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - movdqa %xmm7,%xmm6 - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - psrld $10,%xmm7 - movl %ebx,%r13d - psrlq $17,%xmm6 - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - pxor %xmm6,%xmm7 - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - pxor %xmm6,%xmm7 - addl 12(%rsp),%r8d - movl %r9d,%edi - movdqa 0(%rbp),%xmm6 - rorl $11,%r14d - xorl %edx,%r12d -.byte 102,65,15,56,0,249 - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - paddd %xmm7,%xmm0 - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - paddd %xmm0,%xmm6 - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - movdqa %xmm6,0(%rsp) - rorl $14,%r13d - movl %r14d,%r8d - movdqa %xmm2,%xmm4 - movl %ebx,%r12d - movdqa %xmm0,%xmm7 - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d -.byte 102,15,58,15,225,4 - rorl $5,%r13d - xorl %r8d,%r14d -.byte 102,15,58,15,251,4 - andl %eax,%r12d - xorl %eax,%r13d - addl 16(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - movdqa %xmm4,%xmm5 - xorl %r9d,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - psrld $3,%xmm4 - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - paddd %xmm7,%xmm1 - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - psrld $7,%xmm6 - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - pshufd $250,%xmm0,%xmm7 - movl %eax,%r12d - pslld $14,%xmm5 - xorl %r11d,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %ebx,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %edx,%r14d - pxor %xmm5,%xmm4 - andl %r11d,%r12d - xorl %r11d,%r13d - pslld $11,%xmm5 - addl 20(%rsp),%ecx - pxor %xmm6,%xmm4 - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - movdqa %xmm7,%xmm6 - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %edx,%r14d - psrld $10,%xmm7 - addl %r13d,%ecx - xorl %r8d,%r15d - paddd %xmm4,%xmm1 - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - psrlq $17,%xmm6 - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - pxor %xmm6,%xmm7 - xorl %r10d,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - pxor %xmm6,%xmm7 - andl %r10d,%r12d - xorl %r10d,%r13d - addl 24(%rsp),%ebx -.byte 102,65,15,56,0,248 - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm1 - addl %r12d,%ebx - pshufd $80,%xmm1,%xmm7 - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - movdqa %xmm7,%xmm6 - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - psrld $10,%xmm7 - movl %r9d,%r13d - psrlq $17,%xmm6 - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - pxor %xmm6,%xmm7 - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - pxor %xmm6,%xmm7 - addl 28(%rsp),%eax - movl %ebx,%edi - movdqa 32(%rbp),%xmm6 - rorl $11,%r14d - xorl %r11d,%r12d -.byte 102,65,15,56,0,249 - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - paddd %xmm7,%xmm1 - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - paddd %xmm1,%xmm6 - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - movdqa %xmm6,16(%rsp) - rorl $14,%r13d - movl %r14d,%eax - movdqa %xmm3,%xmm4 - movl %r9d,%r12d - movdqa %xmm1,%xmm7 - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d -.byte 102,15,58,15,226,4 - rorl $5,%r13d - xorl %eax,%r14d -.byte 102,15,58,15,248,4 - andl %r8d,%r12d - xorl %r8d,%r13d - addl 32(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - movdqa %xmm4,%xmm5 - xorl %ebx,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - psrld $3,%xmm4 - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - paddd %xmm7,%xmm2 - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - psrld $7,%xmm6 - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - pshufd $250,%xmm1,%xmm7 - movl %r8d,%r12d - pslld $14,%xmm5 - xorl %edx,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %r9d,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %r11d,%r14d - pxor %xmm5,%xmm4 - andl %edx,%r12d - xorl %edx,%r13d - pslld $11,%xmm5 - addl 36(%rsp),%r10d - pxor %xmm6,%xmm4 - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - movdqa %xmm7,%xmm6 - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %r11d,%r14d - psrld $10,%xmm7 - addl %r13d,%r10d - xorl %eax,%r15d - paddd %xmm4,%xmm2 - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - psrlq $17,%xmm6 - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - pxor %xmm6,%xmm7 - xorl %ecx,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - pxor %xmm6,%xmm7 - andl %ecx,%r12d - xorl %ecx,%r13d - addl 40(%rsp),%r9d -.byte 102,65,15,56,0,248 - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm2 - addl %r12d,%r9d - pshufd $80,%xmm2,%xmm7 - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - movdqa %xmm7,%xmm6 - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - psrld $10,%xmm7 - movl %ebx,%r13d - psrlq $17,%xmm6 - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - pxor %xmm6,%xmm7 - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - pxor %xmm6,%xmm7 - addl 44(%rsp),%r8d - movl %r9d,%edi - movdqa 64(%rbp),%xmm6 - rorl $11,%r14d - xorl %edx,%r12d -.byte 102,65,15,56,0,249 - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - paddd %xmm7,%xmm2 - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - paddd %xmm2,%xmm6 - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - movdqa %xmm6,32(%rsp) - rorl $14,%r13d - movl %r14d,%r8d - movdqa %xmm0,%xmm4 - movl %ebx,%r12d - movdqa %xmm2,%xmm7 - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d -.byte 102,15,58,15,227,4 - rorl $5,%r13d - xorl %r8d,%r14d -.byte 102,15,58,15,249,4 - andl %eax,%r12d - xorl %eax,%r13d - addl 48(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - movdqa %xmm4,%xmm5 - xorl %r9d,%r15d - movdqa %xmm4,%xmm6 - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - psrld $3,%xmm4 - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - paddd %xmm7,%xmm3 - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - psrld $7,%xmm6 - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - pshufd $250,%xmm2,%xmm7 - movl %eax,%r12d - pslld $14,%xmm5 - xorl %r11d,%r13d - pxor %xmm6,%xmm4 - rorl $9,%r14d - xorl %ebx,%r12d - psrld $11,%xmm6 - rorl $5,%r13d - xorl %edx,%r14d - pxor %xmm5,%xmm4 - andl %r11d,%r12d - xorl %r11d,%r13d - pslld $11,%xmm5 - addl 52(%rsp),%ecx - pxor %xmm6,%xmm4 - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - movdqa %xmm7,%xmm6 - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - pxor %xmm5,%xmm4 - andl %edi,%r15d - xorl %edx,%r14d - psrld $10,%xmm7 - addl %r13d,%ecx - xorl %r8d,%r15d - paddd %xmm4,%xmm3 - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - psrlq $17,%xmm6 - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - pxor %xmm6,%xmm7 - xorl %r10d,%r13d - rorl $9,%r14d - psrlq $2,%xmm6 - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - pxor %xmm6,%xmm7 - andl %r10d,%r12d - xorl %r10d,%r13d - addl 56(%rsp),%ebx -.byte 102,65,15,56,0,248 - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - paddd %xmm7,%xmm3 - addl %r12d,%ebx - pshufd $80,%xmm3,%xmm7 - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - movdqa %xmm7,%xmm6 - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - psrld $10,%xmm7 - movl %r9d,%r13d - psrlq $17,%xmm6 - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - pxor %xmm6,%xmm7 - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - psrlq $2,%xmm6 - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - pxor %xmm6,%xmm7 - addl 60(%rsp),%eax - movl %ebx,%edi - movdqa 96(%rbp),%xmm6 - rorl $11,%r14d - xorl %r11d,%r12d -.byte 102,65,15,56,0,249 - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - paddd %xmm7,%xmm3 - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - paddd %xmm3,%xmm6 - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - movdqa %xmm6,48(%rsp) - cmpb $0,131(%rbp) - jne L$ssse3_00_47 - rorl $14,%r13d - movl %r14d,%eax - movl %r9d,%r12d - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d - rorl $5,%r13d - xorl %eax,%r14d - andl %r8d,%r12d - xorl %r8d,%r13d - addl 0(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - xorl %ebx,%r15d - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - movl %r8d,%r12d - xorl %edx,%r13d - rorl $9,%r14d - xorl %r9d,%r12d - rorl $5,%r13d - xorl %r11d,%r14d - andl %edx,%r12d - xorl %edx,%r13d - addl 4(%rsp),%r10d - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - andl %edi,%r15d - xorl %r11d,%r14d - addl %r13d,%r10d - xorl %eax,%r15d - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - xorl %ecx,%r13d - rorl $9,%r14d - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - andl %ecx,%r12d - xorl %ecx,%r13d - addl 8(%rsp),%r9d - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - addl %r12d,%r9d - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - movl %ebx,%r13d - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - addl 12(%rsp),%r8d - movl %r9d,%edi - rorl $11,%r14d - xorl %edx,%r12d - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - rorl $14,%r13d - movl %r14d,%r8d - movl %ebx,%r12d - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d - rorl $5,%r13d - xorl %r8d,%r14d - andl %eax,%r12d - xorl %eax,%r13d - addl 16(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - xorl %r9d,%r15d - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - movl %eax,%r12d - xorl %r11d,%r13d - rorl $9,%r14d - xorl %ebx,%r12d - rorl $5,%r13d - xorl %edx,%r14d - andl %r11d,%r12d - xorl %r11d,%r13d - addl 20(%rsp),%ecx - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - andl %edi,%r15d - xorl %edx,%r14d - addl %r13d,%ecx - xorl %r8d,%r15d - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - xorl %r10d,%r13d - rorl $9,%r14d - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - andl %r10d,%r12d - xorl %r10d,%r13d - addl 24(%rsp),%ebx - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - addl %r12d,%ebx - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - movl %r9d,%r13d - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - addl 28(%rsp),%eax - movl %ebx,%edi - rorl $11,%r14d - xorl %r11d,%r12d - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - rorl $14,%r13d - movl %r14d,%eax - movl %r9d,%r12d - xorl %r8d,%r13d - rorl $9,%r14d - xorl %r10d,%r12d - rorl $5,%r13d - xorl %eax,%r14d - andl %r8d,%r12d - xorl %r8d,%r13d - addl 32(%rsp),%r11d - movl %eax,%r15d - rorl $11,%r14d - xorl %r10d,%r12d - xorl %ebx,%r15d - rorl $6,%r13d - addl %r12d,%r11d - andl %r15d,%edi - xorl %eax,%r14d - addl %r13d,%r11d - xorl %ebx,%edi - addl %r11d,%edx - rorl $2,%r14d - addl %edi,%r11d - movl %edx,%r13d - addl %r11d,%r14d - rorl $14,%r13d - movl %r14d,%r11d - movl %r8d,%r12d - xorl %edx,%r13d - rorl $9,%r14d - xorl %r9d,%r12d - rorl $5,%r13d - xorl %r11d,%r14d - andl %edx,%r12d - xorl %edx,%r13d - addl 36(%rsp),%r10d - movl %r11d,%edi - rorl $11,%r14d - xorl %r9d,%r12d - xorl %eax,%edi - rorl $6,%r13d - addl %r12d,%r10d - andl %edi,%r15d - xorl %r11d,%r14d - addl %r13d,%r10d - xorl %eax,%r15d - addl %r10d,%ecx - rorl $2,%r14d - addl %r15d,%r10d - movl %ecx,%r13d - addl %r10d,%r14d - rorl $14,%r13d - movl %r14d,%r10d - movl %edx,%r12d - xorl %ecx,%r13d - rorl $9,%r14d - xorl %r8d,%r12d - rorl $5,%r13d - xorl %r10d,%r14d - andl %ecx,%r12d - xorl %ecx,%r13d - addl 40(%rsp),%r9d - movl %r10d,%r15d - rorl $11,%r14d - xorl %r8d,%r12d - xorl %r11d,%r15d - rorl $6,%r13d - addl %r12d,%r9d - andl %r15d,%edi - xorl %r10d,%r14d - addl %r13d,%r9d - xorl %r11d,%edi - addl %r9d,%ebx - rorl $2,%r14d - addl %edi,%r9d - movl %ebx,%r13d - addl %r9d,%r14d - rorl $14,%r13d - movl %r14d,%r9d - movl %ecx,%r12d - xorl %ebx,%r13d - rorl $9,%r14d - xorl %edx,%r12d - rorl $5,%r13d - xorl %r9d,%r14d - andl %ebx,%r12d - xorl %ebx,%r13d - addl 44(%rsp),%r8d - movl %r9d,%edi - rorl $11,%r14d - xorl %edx,%r12d - xorl %r10d,%edi - rorl $6,%r13d - addl %r12d,%r8d - andl %edi,%r15d - xorl %r9d,%r14d - addl %r13d,%r8d - xorl %r10d,%r15d - addl %r8d,%eax - rorl $2,%r14d - addl %r15d,%r8d - movl %eax,%r13d - addl %r8d,%r14d - rorl $14,%r13d - movl %r14d,%r8d - movl %ebx,%r12d - xorl %eax,%r13d - rorl $9,%r14d - xorl %ecx,%r12d - rorl $5,%r13d - xorl %r8d,%r14d - andl %eax,%r12d - xorl %eax,%r13d - addl 48(%rsp),%edx - movl %r8d,%r15d - rorl $11,%r14d - xorl %ecx,%r12d - xorl %r9d,%r15d - rorl $6,%r13d - addl %r12d,%edx - andl %r15d,%edi - xorl %r8d,%r14d - addl %r13d,%edx - xorl %r9d,%edi - addl %edx,%r11d - rorl $2,%r14d - addl %edi,%edx - movl %r11d,%r13d - addl %edx,%r14d - rorl $14,%r13d - movl %r14d,%edx - movl %eax,%r12d - xorl %r11d,%r13d - rorl $9,%r14d - xorl %ebx,%r12d - rorl $5,%r13d - xorl %edx,%r14d - andl %r11d,%r12d - xorl %r11d,%r13d - addl 52(%rsp),%ecx - movl %edx,%edi - rorl $11,%r14d - xorl %ebx,%r12d - xorl %r8d,%edi - rorl $6,%r13d - addl %r12d,%ecx - andl %edi,%r15d - xorl %edx,%r14d - addl %r13d,%ecx - xorl %r8d,%r15d - addl %ecx,%r10d - rorl $2,%r14d - addl %r15d,%ecx - movl %r10d,%r13d - addl %ecx,%r14d - rorl $14,%r13d - movl %r14d,%ecx - movl %r11d,%r12d - xorl %r10d,%r13d - rorl $9,%r14d - xorl %eax,%r12d - rorl $5,%r13d - xorl %ecx,%r14d - andl %r10d,%r12d - xorl %r10d,%r13d - addl 56(%rsp),%ebx - movl %ecx,%r15d - rorl $11,%r14d - xorl %eax,%r12d - xorl %edx,%r15d - rorl $6,%r13d - addl %r12d,%ebx - andl %r15d,%edi - xorl %ecx,%r14d - addl %r13d,%ebx - xorl %edx,%edi - addl %ebx,%r9d - rorl $2,%r14d - addl %edi,%ebx - movl %r9d,%r13d - addl %ebx,%r14d - rorl $14,%r13d - movl %r14d,%ebx - movl %r10d,%r12d - xorl %r9d,%r13d - rorl $9,%r14d - xorl %r11d,%r12d - rorl $5,%r13d - xorl %ebx,%r14d - andl %r9d,%r12d - xorl %r9d,%r13d - addl 60(%rsp),%eax - movl %ebx,%edi - rorl $11,%r14d - xorl %r11d,%r12d - xorl %ecx,%edi - rorl $6,%r13d - addl %r12d,%eax - andl %edi,%r15d - xorl %ebx,%r14d - addl %r13d,%eax - xorl %ecx,%r15d - addl %eax,%r8d - rorl $2,%r14d - addl %r15d,%eax - movl %r8d,%r13d - addl %eax,%r14d - movq 64+0(%rsp),%rdi - movl %r14d,%eax - - addl 0(%rdi),%eax - leaq 64(%rsi),%rsi - addl 4(%rdi),%ebx - addl 8(%rdi),%ecx - addl 12(%rdi),%edx - addl 16(%rdi),%r8d - addl 20(%rdi),%r9d - addl 24(%rdi),%r10d - addl 28(%rdi),%r11d - - cmpq 64+16(%rsp),%rsi - - movl %eax,0(%rdi) - movl %ebx,4(%rdi) - movl %ecx,8(%rdi) - movl %edx,12(%rdi) - movl %r8d,16(%rdi) - movl %r9d,20(%rdi) - movl %r10d,24(%rdi) - movl %r11d,28(%rdi) - jb L$loop_ssse3 - - movq 64+24(%rsp),%rsi - movq (%rsi),%r15 - movq 8(%rsi),%r14 - movq 16(%rsi),%r13 - movq 24(%rsi),%r12 - movq 32(%rsi),%rbp - movq 40(%rsi),%rbx - leaq 48(%rsi),%rsp -L$epilogue_ssse3: +L$xop_00_47: + addq $256,%rbp + vpalignr $8,%xmm0,%xmm1,%xmm8 + rorq $23,%r13 + movq %r14,%rax + vpalignr $8,%xmm4,%xmm5,%xmm11 + movq %r9,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r8,%r13 + xorq %r10,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rax,%r14 + vpaddq %xmm11,%xmm0,%xmm0 + andq %r8,%r12 + xorq %r8,%r13 + addq 0(%rsp),%r11 + movq %rax,%r15 +.byte 143,72,120,195,209,7 + xorq %r10,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,223,3 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm7,%xmm10 + addq %r11,%rdx + addq %rdi,%r11 + vpaddq %xmm8,%xmm0,%xmm0 + movq %rdx,%r13 + addq %r11,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r11 + vpxor %xmm10,%xmm11,%xmm11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + vpaddq %xmm11,%xmm0,%xmm0 + addq 8(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + vpaddq -128(%rbp),%xmm0,%xmm10 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,0(%rsp) + vpalignr $8,%xmm1,%xmm2,%xmm8 + rorq $23,%r13 + movq %r14,%r10 + vpalignr $8,%xmm5,%xmm6,%xmm11 + movq %rdx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rcx,%r13 + xorq %r8,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r10,%r14 + vpaddq %xmm11,%xmm1,%xmm1 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 16(%rsp),%r9 + movq %r10,%r15 +.byte 143,72,120,195,209,7 + xorq %r8,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,216,3 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm0,%xmm10 + addq %r9,%rbx + addq %rdi,%r9 + vpaddq %xmm8,%xmm1,%xmm1 + movq %rbx,%r13 + addq %r9,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r9 + vpxor %xmm10,%xmm11,%xmm11 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + vpaddq %xmm11,%xmm1,%xmm1 + addq 24(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + vpaddq -96(%rbp),%xmm1,%xmm10 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,16(%rsp) + vpalignr $8,%xmm2,%xmm3,%xmm8 + rorq $23,%r13 + movq %r14,%r8 + vpalignr $8,%xmm6,%xmm7,%xmm11 + movq %rbx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rax,%r13 + xorq %rcx,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r8,%r14 + vpaddq %xmm11,%xmm2,%xmm2 + andq %rax,%r12 + xorq %rax,%r13 + addq 32(%rsp),%rdx + movq %r8,%r15 +.byte 143,72,120,195,209,7 + xorq %rcx,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,217,3 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm1,%xmm10 + addq %rdx,%r11 + addq %rdi,%rdx + vpaddq %xmm8,%xmm2,%xmm2 + movq %r11,%r13 + addq %rdx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rdx + vpxor %xmm10,%xmm11,%xmm11 + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + vpaddq %xmm11,%xmm2,%xmm2 + addq 40(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + vpaddq -64(%rbp),%xmm2,%xmm10 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,32(%rsp) + vpalignr $8,%xmm3,%xmm4,%xmm8 + rorq $23,%r13 + movq %r14,%rcx + vpalignr $8,%xmm7,%xmm0,%xmm11 + movq %r11,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r10,%r13 + xorq %rax,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rcx,%r14 + vpaddq %xmm11,%xmm3,%xmm3 + andq %r10,%r12 + xorq %r10,%r13 + addq 48(%rsp),%rbx + movq %rcx,%r15 +.byte 143,72,120,195,209,7 + xorq %rax,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,218,3 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm2,%xmm10 + addq %rbx,%r9 + addq %rdi,%rbx + vpaddq %xmm8,%xmm3,%xmm3 + movq %r9,%r13 + addq %rbx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rbx + vpxor %xmm10,%xmm11,%xmm11 + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + vpaddq %xmm11,%xmm3,%xmm3 + addq 56(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + vpaddq -32(%rbp),%xmm3,%xmm10 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,48(%rsp) + vpalignr $8,%xmm4,%xmm5,%xmm8 + rorq $23,%r13 + movq %r14,%rax + vpalignr $8,%xmm0,%xmm1,%xmm11 + movq %r9,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r8,%r13 + xorq %r10,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rax,%r14 + vpaddq %xmm11,%xmm4,%xmm4 + andq %r8,%r12 + xorq %r8,%r13 + addq 64(%rsp),%r11 + movq %rax,%r15 +.byte 143,72,120,195,209,7 + xorq %r10,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,219,3 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm3,%xmm10 + addq %r11,%rdx + addq %rdi,%r11 + vpaddq %xmm8,%xmm4,%xmm4 + movq %rdx,%r13 + addq %r11,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r11 + vpxor %xmm10,%xmm11,%xmm11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + vpaddq %xmm11,%xmm4,%xmm4 + addq 72(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + vpaddq 0(%rbp),%xmm4,%xmm10 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,64(%rsp) + vpalignr $8,%xmm5,%xmm6,%xmm8 + rorq $23,%r13 + movq %r14,%r10 + vpalignr $8,%xmm1,%xmm2,%xmm11 + movq %rdx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rcx,%r13 + xorq %r8,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r10,%r14 + vpaddq %xmm11,%xmm5,%xmm5 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 80(%rsp),%r9 + movq %r10,%r15 +.byte 143,72,120,195,209,7 + xorq %r8,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,220,3 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm4,%xmm10 + addq %r9,%rbx + addq %rdi,%r9 + vpaddq %xmm8,%xmm5,%xmm5 + movq %rbx,%r13 + addq %r9,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%r9 + vpxor %xmm10,%xmm11,%xmm11 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + vpaddq %xmm11,%xmm5,%xmm5 + addq 88(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + vpaddq 32(%rbp),%xmm5,%xmm10 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,80(%rsp) + vpalignr $8,%xmm6,%xmm7,%xmm8 + rorq $23,%r13 + movq %r14,%r8 + vpalignr $8,%xmm2,%xmm3,%xmm11 + movq %rbx,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %rax,%r13 + xorq %rcx,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %r8,%r14 + vpaddq %xmm11,%xmm6,%xmm6 + andq %rax,%r12 + xorq %rax,%r13 + addq 96(%rsp),%rdx + movq %r8,%r15 +.byte 143,72,120,195,209,7 + xorq %rcx,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,221,3 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm5,%xmm10 + addq %rdx,%r11 + addq %rdi,%rdx + vpaddq %xmm8,%xmm6,%xmm6 + movq %r11,%r13 + addq %rdx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rdx + vpxor %xmm10,%xmm11,%xmm11 + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + vpaddq %xmm11,%xmm6,%xmm6 + addq 104(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + vpaddq 64(%rbp),%xmm6,%xmm10 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,96(%rsp) + vpalignr $8,%xmm7,%xmm0,%xmm8 + rorq $23,%r13 + movq %r14,%rcx + vpalignr $8,%xmm3,%xmm4,%xmm11 + movq %r11,%r12 + rorq $5,%r14 +.byte 143,72,120,195,200,56 + xorq %r10,%r13 + xorq %rax,%r12 + vpsrlq $7,%xmm8,%xmm8 + rorq $4,%r13 + xorq %rcx,%r14 + vpaddq %xmm11,%xmm7,%xmm7 + andq %r10,%r12 + xorq %r10,%r13 + addq 112(%rsp),%rbx + movq %rcx,%r15 +.byte 143,72,120,195,209,7 + xorq %rax,%r12 + rorq $6,%r14 + vpxor %xmm9,%xmm8,%xmm8 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi +.byte 143,104,120,195,222,3 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + rorq $28,%r14 + vpsrlq $6,%xmm6,%xmm10 + addq %rbx,%r9 + addq %rdi,%rbx + vpaddq %xmm8,%xmm7,%xmm7 + movq %r9,%r13 + addq %rbx,%r14 +.byte 143,72,120,195,203,42 + rorq $23,%r13 + movq %r14,%rbx + vpxor %xmm10,%xmm11,%xmm11 + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm9,%xmm11,%xmm11 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + vpaddq %xmm11,%xmm7,%xmm7 + addq 120(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + vpaddq 96(%rbp),%xmm7,%xmm10 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,112(%rsp) + cmpb $0,135(%rbp) + jne L$xop_00_47 + rorq $23,%r13 + movq %r14,%rax + movq %r9,%r12 + rorq $5,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + rorq $4,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 0(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + rorq $6,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + rorq $28,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + rorq $23,%r13 + movq %r14,%r11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 8(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + rorq $23,%r13 + movq %r14,%r10 + movq %rdx,%r12 + rorq $5,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + rorq $4,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 16(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + rorq $6,%r14 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + rorq $28,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + rorq $23,%r13 + movq %r14,%r9 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 24(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + rorq $23,%r13 + movq %r14,%r8 + movq %rbx,%r12 + rorq $5,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + rorq $4,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 32(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + rorq $6,%r14 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + rorq $28,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + rorq $23,%r13 + movq %r14,%rdx + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 40(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + rorq $23,%r13 + movq %r14,%rcx + movq %r11,%r12 + rorq $5,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + rorq $4,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 48(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + rorq $6,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + rorq $28,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + rorq $23,%r13 + movq %r14,%rbx + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 56(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + rorq $23,%r13 + movq %r14,%rax + movq %r9,%r12 + rorq $5,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + rorq $4,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 64(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + rorq $6,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + rorq $14,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + rorq $28,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + rorq $23,%r13 + movq %r14,%r11 + movq %r8,%r12 + rorq $5,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + rorq $4,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 72(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + rorq $6,%r14 + xorq %rax,%rdi + addq %r12,%r10 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + rorq $28,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + rorq $23,%r13 + movq %r14,%r10 + movq %rdx,%r12 + rorq $5,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + rorq $4,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 80(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + rorq $6,%r14 + xorq %r11,%r15 + addq %r12,%r9 + rorq $14,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + rorq $28,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + rorq $23,%r13 + movq %r14,%r9 + movq %rcx,%r12 + rorq $5,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + rorq $4,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 88(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + rorq $6,%r14 + xorq %r10,%rdi + addq %r12,%r8 + rorq $14,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + rorq $28,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + rorq $23,%r13 + movq %r14,%r8 + movq %rbx,%r12 + rorq $5,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + rorq $4,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 96(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + rorq $6,%r14 + xorq %r9,%r15 + addq %r12,%rdx + rorq $14,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + rorq $28,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + rorq $23,%r13 + movq %r14,%rdx + movq %rax,%r12 + rorq $5,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + rorq $4,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 104(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + rorq $6,%r14 + xorq %r8,%rdi + addq %r12,%rcx + rorq $14,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + rorq $28,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + rorq $23,%r13 + movq %r14,%rcx + movq %r11,%r12 + rorq $5,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + rorq $4,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 112(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + rorq $6,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + rorq $14,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + rorq $28,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + rorq $23,%r13 + movq %r14,%rbx + movq %r10,%r12 + rorq $5,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + rorq $4,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 120(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + rorq $6,%r14 + xorq %rcx,%rdi + addq %r12,%rax + rorq $14,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + rorq $28,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + movq 128+0(%rsp),%rdi + movq %r14,%rax + + addq 0(%rdi),%rax + leaq 128(%rsi),%rsi + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + jb L$loop_xop + + movq 152(%rsp),%rsi + + vzeroupper + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +L$epilogue_xop: + .byte 0xf3,0xc3 + + + +.p2align 6 +sha512_block_data_order_avx: + +L$avx_shortcut: + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + shlq $4,%rdx + subq $160,%rsp + leaq (%rsi,%rdx,8),%rdx + andq $-64,%rsp + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) + +L$prologue_avx: + + vzeroupper + movq 0(%rdi),%rax + movq 8(%rdi),%rbx + movq 16(%rdi),%rcx + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 + jmp L$loop_avx +.p2align 4 +L$loop_avx: + vmovdqa K512+1280(%rip),%xmm11 + vmovdqu 0(%rsi),%xmm0 + leaq K512+128(%rip),%rbp + vmovdqu 16(%rsi),%xmm1 + vmovdqu 32(%rsi),%xmm2 + vpshufb %xmm11,%xmm0,%xmm0 + vmovdqu 48(%rsi),%xmm3 + vpshufb %xmm11,%xmm1,%xmm1 + vmovdqu 64(%rsi),%xmm4 + vpshufb %xmm11,%xmm2,%xmm2 + vmovdqu 80(%rsi),%xmm5 + vpshufb %xmm11,%xmm3,%xmm3 + vmovdqu 96(%rsi),%xmm6 + vpshufb %xmm11,%xmm4,%xmm4 + vmovdqu 112(%rsi),%xmm7 + vpshufb %xmm11,%xmm5,%xmm5 + vpaddq -128(%rbp),%xmm0,%xmm8 + vpshufb %xmm11,%xmm6,%xmm6 + vpaddq -96(%rbp),%xmm1,%xmm9 + vpshufb %xmm11,%xmm7,%xmm7 + vpaddq -64(%rbp),%xmm2,%xmm10 + vpaddq -32(%rbp),%xmm3,%xmm11 + vmovdqa %xmm8,0(%rsp) + vpaddq 0(%rbp),%xmm4,%xmm8 + vmovdqa %xmm9,16(%rsp) + vpaddq 32(%rbp),%xmm5,%xmm9 + vmovdqa %xmm10,32(%rsp) + vpaddq 64(%rbp),%xmm6,%xmm10 + vmovdqa %xmm11,48(%rsp) + vpaddq 96(%rbp),%xmm7,%xmm11 + vmovdqa %xmm8,64(%rsp) + movq %rax,%r14 + vmovdqa %xmm9,80(%rsp) + movq %rbx,%rdi + vmovdqa %xmm10,96(%rsp) + xorq %rcx,%rdi + vmovdqa %xmm11,112(%rsp) + movq %r8,%r13 + jmp L$avx_00_47 + +.p2align 4 +L$avx_00_47: + addq $256,%rbp + vpalignr $8,%xmm0,%xmm1,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rax + vpalignr $8,%xmm4,%xmm5,%xmm11 + movq %r9,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r8,%r13 + xorq %r10,%r12 + vpaddq %xmm11,%xmm0,%xmm0 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r8,%r12 + xorq %r8,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 0(%rsp),%r11 + movq %rax,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rbx,%r15 + addq %r12,%r11 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm7,%xmm11 + addq %r11,%rdx + addq %rdi,%r11 + vpxor %xmm9,%xmm8,%xmm8 + movq %rdx,%r13 + addq %r11,%r14 + vpsllq $3,%xmm7,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r11 + vpaddq %xmm8,%xmm0,%xmm0 + movq %r8,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm7,%xmm9 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rdx,%r12 + xorq %rdx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 8(%rsp),%r10 + movq %r11,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r9,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rax,%rdi + addq %r12,%r10 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm0,%xmm0 + xorq %r11,%r14 + addq %r13,%r10 + vpaddq -128(%rbp),%xmm0,%xmm10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,0(%rsp) + vpalignr $8,%xmm1,%xmm2,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r10 + vpalignr $8,%xmm5,%xmm6,%xmm11 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rcx,%r13 + xorq %r8,%r12 + vpaddq %xmm11,%xmm1,%xmm1 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rcx,%r12 + xorq %rcx,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 16(%rsp),%r9 + movq %r10,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r11,%r15 + addq %r12,%r9 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm0,%xmm11 + addq %r9,%rbx + addq %rdi,%r9 + vpxor %xmm9,%xmm8,%xmm8 + movq %rbx,%r13 + addq %r9,%r14 + vpsllq $3,%xmm0,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r9 + vpaddq %xmm8,%xmm1,%xmm1 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm0,%xmm9 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rbx,%r12 + xorq %rbx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 24(%rsp),%r8 + movq %r9,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r10,%rdi + addq %r12,%r8 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm1,%xmm1 + xorq %r9,%r14 + addq %r13,%r8 + vpaddq -96(%rbp),%xmm1,%xmm10 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,16(%rsp) + vpalignr $8,%xmm2,%xmm3,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r8 + vpalignr $8,%xmm6,%xmm7,%xmm11 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rax,%r13 + xorq %rcx,%r12 + vpaddq %xmm11,%xmm2,%xmm2 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rax,%r12 + xorq %rax,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 32(%rsp),%rdx + movq %r8,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r9,%r15 + addq %r12,%rdx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm1,%xmm11 + addq %rdx,%r11 + addq %rdi,%rdx + vpxor %xmm9,%xmm8,%xmm8 + movq %r11,%r13 + addq %rdx,%r14 + vpsllq $3,%xmm1,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rdx + vpaddq %xmm8,%xmm2,%xmm2 + movq %rax,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm1,%xmm9 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r11,%r12 + xorq %r11,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 40(%rsp),%rcx + movq %rdx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r8,%rdi + addq %r12,%rcx + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm2,%xmm2 + xorq %rdx,%r14 + addq %r13,%rcx + vpaddq -64(%rbp),%xmm2,%xmm10 + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,32(%rsp) + vpalignr $8,%xmm3,%xmm4,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rcx + vpalignr $8,%xmm7,%xmm0,%xmm11 + movq %r11,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r10,%r13 + xorq %rax,%r12 + vpaddq %xmm11,%xmm3,%xmm3 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r10,%r12 + xorq %r10,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 48(%rsp),%rbx + movq %rcx,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rdx,%r15 + addq %r12,%rbx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm2,%xmm11 + addq %rbx,%r9 + addq %rdi,%rbx + vpxor %xmm9,%xmm8,%xmm8 + movq %r9,%r13 + addq %rbx,%r14 + vpsllq $3,%xmm2,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rbx + vpaddq %xmm8,%xmm3,%xmm3 + movq %r10,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm2,%xmm9 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r9,%r12 + xorq %r9,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 56(%rsp),%rax + movq %rbx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r11,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rcx,%rdi + addq %r12,%rax + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm3,%xmm3 + xorq %rbx,%r14 + addq %r13,%rax + vpaddq -32(%rbp),%xmm3,%xmm10 + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,48(%rsp) + vpalignr $8,%xmm4,%xmm5,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rax + vpalignr $8,%xmm0,%xmm1,%xmm11 + movq %r9,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r8,%r13 + xorq %r10,%r12 + vpaddq %xmm11,%xmm4,%xmm4 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r8,%r12 + xorq %r8,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 64(%rsp),%r11 + movq %rax,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rbx,%r15 + addq %r12,%r11 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rax,%r14 + addq %r13,%r11 + vpxor %xmm10,%xmm8,%xmm8 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm3,%xmm11 + addq %r11,%rdx + addq %rdi,%r11 + vpxor %xmm9,%xmm8,%xmm8 + movq %rdx,%r13 + addq %r11,%r14 + vpsllq $3,%xmm3,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r11 + vpaddq %xmm8,%xmm4,%xmm4 + movq %r8,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm3,%xmm9 + xorq %rdx,%r13 + xorq %r9,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rdx,%r12 + xorq %rdx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 72(%rsp),%r10 + movq %r11,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r9,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rax,%rdi + addq %r12,%r10 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm4,%xmm4 + xorq %r11,%r14 + addq %r13,%r10 + vpaddq 0(%rbp),%xmm4,%xmm10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + vmovdqa %xmm10,64(%rsp) + vpalignr $8,%xmm5,%xmm6,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r10 + vpalignr $8,%xmm1,%xmm2,%xmm11 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rcx,%r13 + xorq %r8,%r12 + vpaddq %xmm11,%xmm5,%xmm5 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rcx,%r12 + xorq %rcx,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 80(%rsp),%r9 + movq %r10,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r11,%r15 + addq %r12,%r9 + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r10,%r14 + addq %r13,%r9 + vpxor %xmm10,%xmm8,%xmm8 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm4,%xmm11 + addq %r9,%rbx + addq %rdi,%r9 + vpxor %xmm9,%xmm8,%xmm8 + movq %rbx,%r13 + addq %r9,%r14 + vpsllq $3,%xmm4,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%r9 + vpaddq %xmm8,%xmm5,%xmm5 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm4,%xmm9 + xorq %rbx,%r13 + xorq %rdx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %rbx,%r12 + xorq %rbx,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 88(%rsp),%r8 + movq %r9,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r10,%rdi + addq %r12,%r8 + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm5,%xmm5 + xorq %r9,%r14 + addq %r13,%r8 + vpaddq 32(%rbp),%xmm5,%xmm10 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + vmovdqa %xmm10,80(%rsp) + vpalignr $8,%xmm6,%xmm7,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%r8 + vpalignr $8,%xmm2,%xmm3,%xmm11 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %rax,%r13 + xorq %rcx,%r12 + vpaddq %xmm11,%xmm6,%xmm6 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %rax,%r12 + xorq %rax,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 96(%rsp),%rdx + movq %r8,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %r9,%r15 + addq %r12,%rdx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %r8,%r14 + addq %r13,%rdx + vpxor %xmm10,%xmm8,%xmm8 + xorq %r9,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm5,%xmm11 + addq %rdx,%r11 + addq %rdi,%rdx + vpxor %xmm9,%xmm8,%xmm8 + movq %r11,%r13 + addq %rdx,%r14 + vpsllq $3,%xmm5,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rdx + vpaddq %xmm8,%xmm6,%xmm6 + movq %rax,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm5,%xmm9 + xorq %r11,%r13 + xorq %rbx,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r11,%r12 + xorq %r11,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 104(%rsp),%rcx + movq %rdx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %r8,%rdi + addq %r12,%rcx + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm6,%xmm6 + xorq %rdx,%r14 + addq %r13,%rcx + vpaddq 64(%rbp),%xmm6,%xmm10 + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + vmovdqa %xmm10,96(%rsp) + vpalignr $8,%xmm7,%xmm0,%xmm8 + shrdq $23,%r13,%r13 + movq %r14,%rcx + vpalignr $8,%xmm3,%xmm4,%xmm11 + movq %r11,%r12 + shrdq $5,%r14,%r14 + vpsrlq $1,%xmm8,%xmm10 + xorq %r10,%r13 + xorq %rax,%r12 + vpaddq %xmm11,%xmm7,%xmm7 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + vpsrlq $7,%xmm8,%xmm11 + andq %r10,%r12 + xorq %r10,%r13 + vpsllq $56,%xmm8,%xmm9 + addq 112(%rsp),%rbx + movq %rcx,%r15 + vpxor %xmm10,%xmm11,%xmm8 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + vpsrlq $7,%xmm10,%xmm10 + xorq %rdx,%r15 + addq %r12,%rbx + vpxor %xmm9,%xmm8,%xmm8 + shrdq $14,%r13,%r13 + andq %r15,%rdi + vpsllq $7,%xmm9,%xmm9 + xorq %rcx,%r14 + addq %r13,%rbx + vpxor %xmm10,%xmm8,%xmm8 + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + vpsrlq $6,%xmm6,%xmm11 + addq %rbx,%r9 + addq %rdi,%rbx + vpxor %xmm9,%xmm8,%xmm8 + movq %r9,%r13 + addq %rbx,%r14 + vpsllq $3,%xmm6,%xmm10 + shrdq $23,%r13,%r13 + movq %r14,%rbx + vpaddq %xmm8,%xmm7,%xmm7 + movq %r10,%r12 + shrdq $5,%r14,%r14 + vpsrlq $19,%xmm6,%xmm9 + xorq %r9,%r13 + xorq %r11,%r12 + vpxor %xmm10,%xmm11,%xmm11 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + vpsllq $42,%xmm10,%xmm10 + andq %r9,%r12 + xorq %r9,%r13 + vpxor %xmm9,%xmm11,%xmm11 + addq 120(%rsp),%rax + movq %rbx,%rdi + vpsrlq $42,%xmm9,%xmm9 + xorq %r11,%r12 + shrdq $6,%r14,%r14 + vpxor %xmm10,%xmm11,%xmm11 + xorq %rcx,%rdi + addq %r12,%rax + vpxor %xmm9,%xmm11,%xmm11 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + vpaddq %xmm11,%xmm7,%xmm7 + xorq %rbx,%r14 + addq %r13,%rax + vpaddq 96(%rbp),%xmm7,%xmm10 + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + vmovdqa %xmm10,112(%rsp) + cmpb $0,135(%rbp) + jne L$avx_00_47 + shrdq $23,%r13,%r13 + movq %r14,%rax + movq %r9,%r12 + shrdq $5,%r14,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 0(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r11 + movq %r8,%r12 + shrdq $5,%r14,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 8(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + shrdq $6,%r14,%r14 + xorq %rax,%rdi + addq %r12,%r10 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r10 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 16(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + xorq %r11,%r15 + addq %r12,%r9 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r9 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 24(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + xorq %r10,%rdi + addq %r12,%r8 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r8 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 32(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + xorq %r9,%r15 + addq %r12,%rdx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + shrdq $28,%r14,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rdx + movq %rax,%r12 + shrdq $5,%r14,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 40(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + xorq %r8,%rdi + addq %r12,%rcx + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rcx + movq %r11,%r12 + shrdq $5,%r14,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 48(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rbx + movq %r10,%r12 + shrdq $5,%r14,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 56(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + shrdq $6,%r14,%r14 + xorq %rcx,%rdi + addq %r12,%rax + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rax + movq %r9,%r12 + shrdq $5,%r14,%r14 + xorq %r8,%r13 + xorq %r10,%r12 + shrdq $4,%r13,%r13 + xorq %rax,%r14 + andq %r8,%r12 + xorq %r8,%r13 + addq 64(%rsp),%r11 + movq %rax,%r15 + xorq %r10,%r12 + shrdq $6,%r14,%r14 + xorq %rbx,%r15 + addq %r12,%r11 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rax,%r14 + addq %r13,%r11 + xorq %rbx,%rdi + shrdq $28,%r14,%r14 + addq %r11,%rdx + addq %rdi,%r11 + movq %rdx,%r13 + addq %r11,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r11 + movq %r8,%r12 + shrdq $5,%r14,%r14 + xorq %rdx,%r13 + xorq %r9,%r12 + shrdq $4,%r13,%r13 + xorq %r11,%r14 + andq %rdx,%r12 + xorq %rdx,%r13 + addq 72(%rsp),%r10 + movq %r11,%rdi + xorq %r9,%r12 + shrdq $6,%r14,%r14 + xorq %rax,%rdi + addq %r12,%r10 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r11,%r14 + addq %r13,%r10 + xorq %rax,%r15 + shrdq $28,%r14,%r14 + addq %r10,%rcx + addq %r15,%r10 + movq %rcx,%r13 + addq %r10,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r10 + movq %rdx,%r12 + shrdq $5,%r14,%r14 + xorq %rcx,%r13 + xorq %r8,%r12 + shrdq $4,%r13,%r13 + xorq %r10,%r14 + andq %rcx,%r12 + xorq %rcx,%r13 + addq 80(%rsp),%r9 + movq %r10,%r15 + xorq %r8,%r12 + shrdq $6,%r14,%r14 + xorq %r11,%r15 + addq %r12,%r9 + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r10,%r14 + addq %r13,%r9 + xorq %r11,%rdi + shrdq $28,%r14,%r14 + addq %r9,%rbx + addq %rdi,%r9 + movq %rbx,%r13 + addq %r9,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r9 + movq %rcx,%r12 + shrdq $5,%r14,%r14 + xorq %rbx,%r13 + xorq %rdx,%r12 + shrdq $4,%r13,%r13 + xorq %r9,%r14 + andq %rbx,%r12 + xorq %rbx,%r13 + addq 88(%rsp),%r8 + movq %r9,%rdi + xorq %rdx,%r12 + shrdq $6,%r14,%r14 + xorq %r10,%rdi + addq %r12,%r8 + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %r9,%r14 + addq %r13,%r8 + xorq %r10,%r15 + shrdq $28,%r14,%r14 + addq %r8,%rax + addq %r15,%r8 + movq %rax,%r13 + addq %r8,%r14 + shrdq $23,%r13,%r13 + movq %r14,%r8 + movq %rbx,%r12 + shrdq $5,%r14,%r14 + xorq %rax,%r13 + xorq %rcx,%r12 + shrdq $4,%r13,%r13 + xorq %r8,%r14 + andq %rax,%r12 + xorq %rax,%r13 + addq 96(%rsp),%rdx + movq %r8,%r15 + xorq %rcx,%r12 + shrdq $6,%r14,%r14 + xorq %r9,%r15 + addq %r12,%rdx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %r8,%r14 + addq %r13,%rdx + xorq %r9,%rdi + shrdq $28,%r14,%r14 + addq %rdx,%r11 + addq %rdi,%rdx + movq %r11,%r13 + addq %rdx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rdx + movq %rax,%r12 + shrdq $5,%r14,%r14 + xorq %r11,%r13 + xorq %rbx,%r12 + shrdq $4,%r13,%r13 + xorq %rdx,%r14 + andq %r11,%r12 + xorq %r11,%r13 + addq 104(%rsp),%rcx + movq %rdx,%rdi + xorq %rbx,%r12 + shrdq $6,%r14,%r14 + xorq %r8,%rdi + addq %r12,%rcx + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rdx,%r14 + addq %r13,%rcx + xorq %r8,%r15 + shrdq $28,%r14,%r14 + addq %rcx,%r10 + addq %r15,%rcx + movq %r10,%r13 + addq %rcx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rcx + movq %r11,%r12 + shrdq $5,%r14,%r14 + xorq %r10,%r13 + xorq %rax,%r12 + shrdq $4,%r13,%r13 + xorq %rcx,%r14 + andq %r10,%r12 + xorq %r10,%r13 + addq 112(%rsp),%rbx + movq %rcx,%r15 + xorq %rax,%r12 + shrdq $6,%r14,%r14 + xorq %rdx,%r15 + addq %r12,%rbx + shrdq $14,%r13,%r13 + andq %r15,%rdi + xorq %rcx,%r14 + addq %r13,%rbx + xorq %rdx,%rdi + shrdq $28,%r14,%r14 + addq %rbx,%r9 + addq %rdi,%rbx + movq %r9,%r13 + addq %rbx,%r14 + shrdq $23,%r13,%r13 + movq %r14,%rbx + movq %r10,%r12 + shrdq $5,%r14,%r14 + xorq %r9,%r13 + xorq %r11,%r12 + shrdq $4,%r13,%r13 + xorq %rbx,%r14 + andq %r9,%r12 + xorq %r9,%r13 + addq 120(%rsp),%rax + movq %rbx,%rdi + xorq %r11,%r12 + shrdq $6,%r14,%r14 + xorq %rcx,%rdi + addq %r12,%rax + shrdq $14,%r13,%r13 + andq %rdi,%r15 + xorq %rbx,%r14 + addq %r13,%rax + xorq %rcx,%r15 + shrdq $28,%r14,%r14 + addq %rax,%r8 + addq %r15,%rax + movq %r8,%r13 + addq %rax,%r14 + movq 128+0(%rsp),%rdi + movq %r14,%rax + + addq 0(%rdi),%rax + leaq 128(%rsi),%rsi + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + jb L$loop_avx + + movq 152(%rsp),%rsi + + vzeroupper + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +L$epilogue_avx: + .byte 0xf3,0xc3 + + + +.p2align 6 +sha512_block_data_order_avx2: + +L$avx2_shortcut: + movq %rsp,%rax + + pushq %rbx + + pushq %rbp + + pushq %r12 + + pushq %r13 + + pushq %r14 + + pushq %r15 + + subq $1312,%rsp + shlq $4,%rdx + andq $-2048,%rsp + leaq (%rsi,%rdx,8),%rdx + addq $1152,%rsp + movq %rdi,128+0(%rsp) + movq %rsi,128+8(%rsp) + movq %rdx,128+16(%rsp) + movq %rax,152(%rsp) + +L$prologue_avx2: + + vzeroupper + subq $-128,%rsi + movq 0(%rdi),%rax + movq %rsi,%r12 + movq 8(%rdi),%rbx + cmpq %rdx,%rsi + movq 16(%rdi),%rcx + cmoveq %rsp,%r12 + movq 24(%rdi),%rdx + movq 32(%rdi),%r8 + movq 40(%rdi),%r9 + movq 48(%rdi),%r10 + movq 56(%rdi),%r11 + jmp L$oop_avx2 +.p2align 4 +L$oop_avx2: + vmovdqu -128(%rsi),%xmm0 + vmovdqu -128+16(%rsi),%xmm1 + vmovdqu -128+32(%rsi),%xmm2 + leaq K512+128(%rip),%rbp + vmovdqu -128+48(%rsi),%xmm3 + vmovdqu -128+64(%rsi),%xmm4 + vmovdqu -128+80(%rsi),%xmm5 + vmovdqu -128+96(%rsi),%xmm6 + vmovdqu -128+112(%rsi),%xmm7 + + vmovdqa 1152(%rbp),%ymm10 + vinserti128 $1,(%r12),%ymm0,%ymm0 + vinserti128 $1,16(%r12),%ymm1,%ymm1 + vpshufb %ymm10,%ymm0,%ymm0 + vinserti128 $1,32(%r12),%ymm2,%ymm2 + vpshufb %ymm10,%ymm1,%ymm1 + vinserti128 $1,48(%r12),%ymm3,%ymm3 + vpshufb %ymm10,%ymm2,%ymm2 + vinserti128 $1,64(%r12),%ymm4,%ymm4 + vpshufb %ymm10,%ymm3,%ymm3 + vinserti128 $1,80(%r12),%ymm5,%ymm5 + vpshufb %ymm10,%ymm4,%ymm4 + vinserti128 $1,96(%r12),%ymm6,%ymm6 + vpshufb %ymm10,%ymm5,%ymm5 + vinserti128 $1,112(%r12),%ymm7,%ymm7 + + vpaddq -128(%rbp),%ymm0,%ymm8 + vpshufb %ymm10,%ymm6,%ymm6 + vpaddq -96(%rbp),%ymm1,%ymm9 + vpshufb %ymm10,%ymm7,%ymm7 + vpaddq -64(%rbp),%ymm2,%ymm10 + vpaddq -32(%rbp),%ymm3,%ymm11 + vmovdqa %ymm8,0(%rsp) + vpaddq 0(%rbp),%ymm4,%ymm8 + vmovdqa %ymm9,32(%rsp) + vpaddq 32(%rbp),%ymm5,%ymm9 + vmovdqa %ymm10,64(%rsp) + vpaddq 64(%rbp),%ymm6,%ymm10 + vmovdqa %ymm11,96(%rsp) + leaq -128(%rsp),%rsp + vpaddq 96(%rbp),%ymm7,%ymm11 + vmovdqa %ymm8,0(%rsp) + xorq %r14,%r14 + vmovdqa %ymm9,32(%rsp) + movq %rbx,%rdi + vmovdqa %ymm10,64(%rsp) + xorq %rcx,%rdi + vmovdqa %ymm11,96(%rsp) + movq %r9,%r12 + addq $32*8,%rbp + jmp L$avx2_00_47 + +.p2align 4 +L$avx2_00_47: + leaq -128(%rsp),%rsp + vpalignr $8,%ymm0,%ymm1,%ymm8 + addq 0+256(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + vpalignr $8,%ymm4,%ymm5,%ymm11 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + vpsrlq $1,%ymm8,%ymm10 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + vpaddq %ymm11,%ymm0,%ymm0 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + vpsrlq $6,%ymm7,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + vpsllq $3,%ymm7,%ymm10 + vpaddq %ymm8,%ymm0,%ymm0 + addq 8+256(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + vpsrlq $19,%ymm7,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + vpaddq %ymm11,%ymm0,%ymm0 + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + vpaddq -128(%rbp),%ymm0,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + vmovdqa %ymm10,0(%rsp) + vpalignr $8,%ymm1,%ymm2,%ymm8 + addq 32+256(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + vpalignr $8,%ymm5,%ymm6,%ymm11 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + vpsrlq $1,%ymm8,%ymm10 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + vpaddq %ymm11,%ymm1,%ymm1 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + vpsrlq $6,%ymm0,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + vpsllq $3,%ymm0,%ymm10 + vpaddq %ymm8,%ymm1,%ymm1 + addq 40+256(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + vpsrlq $19,%ymm0,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + vpaddq %ymm11,%ymm1,%ymm1 + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + vpaddq -96(%rbp),%ymm1,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + vmovdqa %ymm10,32(%rsp) + vpalignr $8,%ymm2,%ymm3,%ymm8 + addq 64+256(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + vpalignr $8,%ymm6,%ymm7,%ymm11 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + vpsrlq $1,%ymm8,%ymm10 + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + vpaddq %ymm11,%ymm2,%ymm2 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + vpsrlq $6,%ymm1,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + vpsllq $3,%ymm1,%ymm10 + vpaddq %ymm8,%ymm2,%ymm2 + addq 72+256(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + vpsrlq $19,%ymm1,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + vpaddq %ymm11,%ymm2,%ymm2 + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + vpaddq -64(%rbp),%ymm2,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + vmovdqa %ymm10,64(%rsp) + vpalignr $8,%ymm3,%ymm4,%ymm8 + addq 96+256(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + vpalignr $8,%ymm7,%ymm0,%ymm11 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + vpsrlq $1,%ymm8,%ymm10 + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + vpaddq %ymm11,%ymm3,%ymm3 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + vpsrlq $6,%ymm2,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + vpsllq $3,%ymm2,%ymm10 + vpaddq %ymm8,%ymm3,%ymm3 + addq 104+256(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + vpsrlq $19,%ymm2,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + vpaddq %ymm11,%ymm3,%ymm3 + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + vpaddq -32(%rbp),%ymm3,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + vmovdqa %ymm10,96(%rsp) + leaq -128(%rsp),%rsp + vpalignr $8,%ymm4,%ymm5,%ymm8 + addq 0+256(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + vpalignr $8,%ymm0,%ymm1,%ymm11 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + vpsrlq $1,%ymm8,%ymm10 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + vpaddq %ymm11,%ymm4,%ymm4 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + vpsrlq $6,%ymm3,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + vpsllq $3,%ymm3,%ymm10 + vpaddq %ymm8,%ymm4,%ymm4 + addq 8+256(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + vpsrlq $19,%ymm3,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + vpaddq %ymm11,%ymm4,%ymm4 + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + vpaddq 0(%rbp),%ymm4,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + vmovdqa %ymm10,0(%rsp) + vpalignr $8,%ymm5,%ymm6,%ymm8 + addq 32+256(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + vpalignr $8,%ymm1,%ymm2,%ymm11 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + vpsrlq $1,%ymm8,%ymm10 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + vpaddq %ymm11,%ymm5,%ymm5 + vpsrlq $7,%ymm8,%ymm11 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + vpsrlq $6,%ymm4,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + vpsllq $3,%ymm4,%ymm10 + vpaddq %ymm8,%ymm5,%ymm5 + addq 40+256(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + vpsrlq $19,%ymm4,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + vpaddq %ymm11,%ymm5,%ymm5 + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + vpaddq 32(%rbp),%ymm5,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + vmovdqa %ymm10,32(%rsp) + vpalignr $8,%ymm6,%ymm7,%ymm8 + addq 64+256(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + vpalignr $8,%ymm2,%ymm3,%ymm11 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + vpsrlq $1,%ymm8,%ymm10 + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + vpaddq %ymm11,%ymm6,%ymm6 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + vpsrlq $6,%ymm5,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + vpsllq $3,%ymm5,%ymm10 + vpaddq %ymm8,%ymm6,%ymm6 + addq 72+256(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + vpsrlq $19,%ymm5,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + vpaddq %ymm11,%ymm6,%ymm6 + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + vpaddq 64(%rbp),%ymm6,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + vmovdqa %ymm10,64(%rsp) + vpalignr $8,%ymm7,%ymm0,%ymm8 + addq 96+256(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + vpalignr $8,%ymm3,%ymm4,%ymm11 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + vpsrlq $1,%ymm8,%ymm10 + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + vpaddq %ymm11,%ymm7,%ymm7 + vpsrlq $7,%ymm8,%ymm11 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + vpsllq $56,%ymm8,%ymm9 + vpxor %ymm10,%ymm11,%ymm8 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + vpsrlq $7,%ymm10,%ymm10 + vpxor %ymm9,%ymm8,%ymm8 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + vpsllq $7,%ymm9,%ymm9 + vpxor %ymm10,%ymm8,%ymm8 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + vpsrlq $6,%ymm6,%ymm11 + vpxor %ymm9,%ymm8,%ymm8 + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + vpsllq $3,%ymm6,%ymm10 + vpaddq %ymm8,%ymm7,%ymm7 + addq 104+256(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + vpsrlq $19,%ymm6,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + vpsllq $42,%ymm10,%ymm10 + vpxor %ymm9,%ymm11,%ymm11 + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + vpsrlq $42,%ymm9,%ymm9 + vpxor %ymm10,%ymm11,%ymm11 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + vpxor %ymm9,%ymm11,%ymm11 + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + vpaddq %ymm11,%ymm7,%ymm7 + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + vpaddq 96(%rbp),%ymm7,%ymm10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + vmovdqa %ymm10,96(%rsp) + leaq 256(%rbp),%rbp + cmpb $0,-121(%rbp) + jne L$avx2_00_47 + addq 0+128(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + addq 8+128(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + addq 32+128(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + addq 40+128(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + addq 64+128(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + addq 72+128(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + addq 96+128(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + addq 104+128(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + addq 0(%rsp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + addq 8(%rsp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + addq 32(%rsp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + addq 40(%rsp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + addq 64(%rsp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + addq 72(%rsp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + addq 96(%rsp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + addq 104(%rsp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + movq 1280(%rsp),%rdi + addq %r14,%rax + + leaq 1152(%rsp),%rbp + + addq 0(%rdi),%rax + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + addq 48(%rdi),%r10 + addq 56(%rdi),%r11 + + movq %rax,0(%rdi) + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + + cmpq 144(%rbp),%rsi + je L$done_avx2 + + xorq %r14,%r14 + movq %rbx,%rdi + xorq %rcx,%rdi + movq %r9,%r12 + jmp L$ower_avx2 +.p2align 4 +L$ower_avx2: + addq 0+16(%rbp),%r11 + andq %r8,%r12 + rorxq $41,%r8,%r13 + rorxq $18,%r8,%r15 + leaq (%rax,%r14,1),%rax + leaq (%r11,%r12,1),%r11 + andnq %r10,%r8,%r12 + xorq %r15,%r13 + rorxq $14,%r8,%r14 + leaq (%r11,%r12,1),%r11 + xorq %r14,%r13 + movq %rax,%r15 + rorxq $39,%rax,%r12 + leaq (%r11,%r13,1),%r11 + xorq %rbx,%r15 + rorxq $34,%rax,%r14 + rorxq $28,%rax,%r13 + leaq (%rdx,%r11,1),%rdx + andq %r15,%rdi + xorq %r12,%r14 + xorq %rbx,%rdi + xorq %r13,%r14 + leaq (%r11,%rdi,1),%r11 + movq %r8,%r12 + addq 8+16(%rbp),%r10 + andq %rdx,%r12 + rorxq $41,%rdx,%r13 + rorxq $18,%rdx,%rdi + leaq (%r11,%r14,1),%r11 + leaq (%r10,%r12,1),%r10 + andnq %r9,%rdx,%r12 + xorq %rdi,%r13 + rorxq $14,%rdx,%r14 + leaq (%r10,%r12,1),%r10 + xorq %r14,%r13 + movq %r11,%rdi + rorxq $39,%r11,%r12 + leaq (%r10,%r13,1),%r10 + xorq %rax,%rdi + rorxq $34,%r11,%r14 + rorxq $28,%r11,%r13 + leaq (%rcx,%r10,1),%rcx + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rax,%r15 + xorq %r13,%r14 + leaq (%r10,%r15,1),%r10 + movq %rdx,%r12 + addq 32+16(%rbp),%r9 + andq %rcx,%r12 + rorxq $41,%rcx,%r13 + rorxq $18,%rcx,%r15 + leaq (%r10,%r14,1),%r10 + leaq (%r9,%r12,1),%r9 + andnq %r8,%rcx,%r12 + xorq %r15,%r13 + rorxq $14,%rcx,%r14 + leaq (%r9,%r12,1),%r9 + xorq %r14,%r13 + movq %r10,%r15 + rorxq $39,%r10,%r12 + leaq (%r9,%r13,1),%r9 + xorq %r11,%r15 + rorxq $34,%r10,%r14 + rorxq $28,%r10,%r13 + leaq (%rbx,%r9,1),%rbx + andq %r15,%rdi + xorq %r12,%r14 + xorq %r11,%rdi + xorq %r13,%r14 + leaq (%r9,%rdi,1),%r9 + movq %rcx,%r12 + addq 40+16(%rbp),%r8 + andq %rbx,%r12 + rorxq $41,%rbx,%r13 + rorxq $18,%rbx,%rdi + leaq (%r9,%r14,1),%r9 + leaq (%r8,%r12,1),%r8 + andnq %rdx,%rbx,%r12 + xorq %rdi,%r13 + rorxq $14,%rbx,%r14 + leaq (%r8,%r12,1),%r8 + xorq %r14,%r13 + movq %r9,%rdi + rorxq $39,%r9,%r12 + leaq (%r8,%r13,1),%r8 + xorq %r10,%rdi + rorxq $34,%r9,%r14 + rorxq $28,%r9,%r13 + leaq (%rax,%r8,1),%rax + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r10,%r15 + xorq %r13,%r14 + leaq (%r8,%r15,1),%r8 + movq %rbx,%r12 + addq 64+16(%rbp),%rdx + andq %rax,%r12 + rorxq $41,%rax,%r13 + rorxq $18,%rax,%r15 + leaq (%r8,%r14,1),%r8 + leaq (%rdx,%r12,1),%rdx + andnq %rcx,%rax,%r12 + xorq %r15,%r13 + rorxq $14,%rax,%r14 + leaq (%rdx,%r12,1),%rdx + xorq %r14,%r13 + movq %r8,%r15 + rorxq $39,%r8,%r12 + leaq (%rdx,%r13,1),%rdx + xorq %r9,%r15 + rorxq $34,%r8,%r14 + rorxq $28,%r8,%r13 + leaq (%r11,%rdx,1),%r11 + andq %r15,%rdi + xorq %r12,%r14 + xorq %r9,%rdi + xorq %r13,%r14 + leaq (%rdx,%rdi,1),%rdx + movq %rax,%r12 + addq 72+16(%rbp),%rcx + andq %r11,%r12 + rorxq $41,%r11,%r13 + rorxq $18,%r11,%rdi + leaq (%rdx,%r14,1),%rdx + leaq (%rcx,%r12,1),%rcx + andnq %rbx,%r11,%r12 + xorq %rdi,%r13 + rorxq $14,%r11,%r14 + leaq (%rcx,%r12,1),%rcx + xorq %r14,%r13 + movq %rdx,%rdi + rorxq $39,%rdx,%r12 + leaq (%rcx,%r13,1),%rcx + xorq %r8,%rdi + rorxq $34,%rdx,%r14 + rorxq $28,%rdx,%r13 + leaq (%r10,%rcx,1),%r10 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %r8,%r15 + xorq %r13,%r14 + leaq (%rcx,%r15,1),%rcx + movq %r11,%r12 + addq 96+16(%rbp),%rbx + andq %r10,%r12 + rorxq $41,%r10,%r13 + rorxq $18,%r10,%r15 + leaq (%rcx,%r14,1),%rcx + leaq (%rbx,%r12,1),%rbx + andnq %rax,%r10,%r12 + xorq %r15,%r13 + rorxq $14,%r10,%r14 + leaq (%rbx,%r12,1),%rbx + xorq %r14,%r13 + movq %rcx,%r15 + rorxq $39,%rcx,%r12 + leaq (%rbx,%r13,1),%rbx + xorq %rdx,%r15 + rorxq $34,%rcx,%r14 + rorxq $28,%rcx,%r13 + leaq (%r9,%rbx,1),%r9 + andq %r15,%rdi + xorq %r12,%r14 + xorq %rdx,%rdi + xorq %r13,%r14 + leaq (%rbx,%rdi,1),%rbx + movq %r10,%r12 + addq 104+16(%rbp),%rax + andq %r9,%r12 + rorxq $41,%r9,%r13 + rorxq $18,%r9,%rdi + leaq (%rbx,%r14,1),%rbx + leaq (%rax,%r12,1),%rax + andnq %r11,%r9,%r12 + xorq %rdi,%r13 + rorxq $14,%r9,%r14 + leaq (%rax,%r12,1),%rax + xorq %r14,%r13 + movq %rbx,%rdi + rorxq $39,%rbx,%r12 + leaq (%rax,%r13,1),%rax + xorq %rcx,%rdi + rorxq $34,%rbx,%r14 + rorxq $28,%rbx,%r13 + leaq (%r8,%rax,1),%r8 + andq %rdi,%r15 + xorq %r12,%r14 + xorq %rcx,%r15 + xorq %r13,%r14 + leaq (%rax,%r15,1),%rax + movq %r9,%r12 + leaq -128(%rbp),%rbp + cmpq %rsp,%rbp + jae L$ower_avx2 + + movq 1280(%rsp),%rdi + addq %r14,%rax + + leaq 1152(%rsp),%rsp + + addq 0(%rdi),%rax + addq 8(%rdi),%rbx + addq 16(%rdi),%rcx + addq 24(%rdi),%rdx + addq 32(%rdi),%r8 + addq 40(%rdi),%r9 + leaq 256(%rsi),%rsi + addq 48(%rdi),%r10 + movq %rsi,%r12 + addq 56(%rdi),%r11 + cmpq 128+16(%rsp),%rsi + + movq %rax,0(%rdi) + cmoveq %rsp,%r12 + movq %rbx,8(%rdi) + movq %rcx,16(%rdi) + movq %rdx,24(%rdi) + movq %r8,32(%rdi) + movq %r9,40(%rdi) + movq %r10,48(%rdi) + movq %r11,56(%rdi) + + jbe L$oop_avx2 + leaq (%rsp),%rbp + +L$done_avx2: + leaq (%rbp),%rsp + movq 152(%rsp),%rsi + + vzeroupper + movq -48(%rsi),%r15 + + movq -40(%rsi),%r14 + + movq -32(%rsi),%r13 + + movq -24(%rsi),%r12 + + movq -16(%rsi),%rbp + + movq -8(%rsi),%rbx + + leaq (%rsi),%rsp + +L$epilogue_avx2: .byte 0xf3,0xc3 + diff --git a/lib/accelerated/x86/sha-padlock.c b/lib/accelerated/x86/sha-padlock.c index 41602832a0..1030d4f63e 100644 --- a/lib/accelerated/x86/sha-padlock.c +++ b/lib/accelerated/x86/sha-padlock.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -120,10 +120,10 @@ _nettle_write_be32(unsigned length, uint8_t * dst, uint32_t * src) abort(); case 3: dst[--j] = (word >> 8) & 0xff; - /* Fall through */ + FALLTHROUGH; case 2: dst[--j] = (word >> 16) & 0xff; - /* Fall through */ + FALLTHROUGH; case 1: dst[--j] = (word >> 24) & 0xff; } @@ -292,6 +292,25 @@ wrap_padlock_hash_init(gnutls_digest_algorithm_t algo, void **_ctx) return 0; } +static void * +wrap_padlock_hash_copy(const void *_ctx) +{ + struct padlock_hash_ctx *new_ctx; + const struct padlock_hash_ctx *ctx=_ctx; + ptrdiff_t off = (uint8_t *)ctx->ctx_ptr - (uint8_t *)(&ctx->ctx); + + new_ctx = gnutls_malloc(sizeof(struct padlock_hash_ctx)); + if (new_ctx == NULL) { + gnutls_assert(); + return NULL; + } + + memcpy(new_ctx, ctx, sizeof(*new_ctx)); + new_ctx->ctx_ptr = (uint8_t *)&new_ctx->ctx + off; + + return new_ctx; +} + static int wrap_padlock_hash_output(void *src_ctx, void *digest, size_t digestsize) { @@ -312,6 +331,8 @@ int wrap_padlock_hash_fast(gnutls_digest_algorithm_t algo, const void *text, size_t text_size, void *digest) { + if (text_size == 0 && text == NULL) + text = digest; if (algo == GNUTLS_DIG_SHA1) { uint32_t iv[5] = { 0x67452301UL, @@ -343,7 +364,6 @@ int wrap_padlock_hash_fast(gnutls_digest_algorithm_t algo, wrap_padlock_hash_update(&ctx, text, text_size); wrap_padlock_hash_output(&ctx, digest, ctx.length); - wrap_padlock_hash_deinit(&ctx); } return 0; @@ -367,6 +387,7 @@ const gnutls_crypto_digest_st _gnutls_sha_padlock_nano = { .init = wrap_padlock_hash_init, .hash = wrap_padlock_hash_update, .output = wrap_padlock_hash_output, + .copy = wrap_padlock_hash_copy, .deinit = wrap_padlock_hash_deinit, .fast = wrap_padlock_hash_fast, }; diff --git a/lib/accelerated/x86/sha-padlock.h b/lib/accelerated/x86/sha-padlock.h index e489582b65..af67a07dd7 100644 --- a/lib/accelerated/x86/sha-padlock.h +++ b/lib/accelerated/x86/sha-padlock.h @@ -1,5 +1,5 @@ -#ifndef SHA_PADLOCK_H -#define SHA_PADLOCK_H +#ifndef GNUTLS_LIB_ACCELERATED_X86_SHA_PADLOCK_H +#define GNUTLS_LIB_ACCELERATED_X86_SHA_PADLOCK_H #include @@ -33,4 +33,4 @@ extern const struct nettle_hash padlock_sha512; extern const gnutls_crypto_mac_st _gnutls_hmac_sha_padlock_nano; extern const gnutls_crypto_digest_st _gnutls_sha_padlock_nano; -#endif +#endif /* GNUTLS_LIB_ACCELERATED_X86_SHA_PADLOCK_H */ diff --git a/lib/accelerated/x86/sha-x86-ssse3.c b/lib/accelerated/x86/sha-x86-ssse3.c index d73039ed00..8ea4e54aee 100644 --- a/lib/accelerated/x86/sha-x86-ssse3.c +++ b/lib/accelerated/x86/sha-x86-ssse3.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -45,10 +45,8 @@ struct x86_hash_ctx { struct sha1_ctx sha1; struct sha224_ctx sha224; struct sha256_ctx sha256; -#ifdef ENABLE_SHA512 struct sha384_ctx sha384; struct sha512_ctx sha512; -#endif } ctx; void *ctx_ptr; gnutls_digest_algorithm_t algo; @@ -180,7 +178,6 @@ void x86_sha256_update(struct sha256_ctx *ctx, size_t length, } } -#ifdef ENABLE_SHA512 void x86_sha512_update(struct sha512_ctx *ctx, size_t length, const uint8_t * data) { @@ -231,7 +228,6 @@ void x86_sha512_update(struct sha512_ctx *ctx, size_t length, sha512_update(ctx, res, data); } } -#endif static int _ctx_init(gnutls_digest_algorithm_t algo, struct x86_hash_ctx *ctx) @@ -261,7 +257,6 @@ static int _ctx_init(gnutls_digest_algorithm_t algo, ctx->ctx_ptr = &ctx->ctx.sha256; ctx->length = SHA256_DIGEST_SIZE; break; -#ifdef ENABLE_SHA512 case GNUTLS_DIG_SHA384: sha384_init(&ctx->ctx.sha384); ctx->update = (update_func) x86_sha512_update; @@ -278,7 +273,6 @@ static int _ctx_init(gnutls_digest_algorithm_t algo, ctx->ctx_ptr = &ctx->ctx.sha512; ctx->length = SHA512_DIGEST_SIZE; break; -#endif default: gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; @@ -311,6 +305,25 @@ static int wrap_x86_hash_init(gnutls_digest_algorithm_t algo, void **_ctx) return 0; } +static void * +wrap_x86_hash_copy(const void *_ctx) +{ + struct x86_hash_ctx *new_ctx; + const struct x86_hash_ctx *ctx=_ctx; + ptrdiff_t off = (uint8_t *)ctx->ctx_ptr - (uint8_t *)(&ctx->ctx); + + new_ctx = gnutls_malloc(sizeof(struct x86_hash_ctx)); + if (new_ctx == NULL) { + gnutls_assert(); + return NULL; + } + + memcpy(new_ctx, ctx, sizeof(*new_ctx)); + new_ctx->ctx_ptr = (uint8_t *)&new_ctx->ctx + off; + + return new_ctx; +} + static int wrap_x86_hash_output(void *src_ctx, void *digest, size_t digestsize) { @@ -349,17 +362,16 @@ NN_HASH(sha224, x86_sha256_update, sha224_digest, SHA224); const struct nettle_hash x86_sha256 = NN_HASH(sha256, x86_sha256_update, sha256_digest, SHA256); -#ifdef ENABLE_SHA512 const struct nettle_hash x86_sha384 = NN_HASH(sha384, x86_sha512_update, sha384_digest, SHA384); const struct nettle_hash x86_sha512 = NN_HASH(sha512, x86_sha512_update, sha512_digest, SHA512); -#endif const gnutls_crypto_digest_st _gnutls_sha_x86_ssse3 = { .init = wrap_x86_hash_init, .hash = wrap_x86_hash_update, .output = wrap_x86_hash_output, + .copy = wrap_x86_hash_copy, .deinit = wrap_x86_hash_deinit, .fast = wrap_x86_hash_fast, }; diff --git a/lib/accelerated/x86/sha-x86.h b/lib/accelerated/x86/sha-x86.h index 3304212538..6bbbfb8641 100644 --- a/lib/accelerated/x86/sha-x86.h +++ b/lib/accelerated/x86/sha-x86.h @@ -1,11 +1,8 @@ -#ifndef SHA_X86_H -#define SHA_X86_H +#ifndef GNUTLS_LIB_ACCELERATED_X86_SHA_X86_H +#define GNUTLS_LIB_ACCELERATED_X86_SHA_X86_H #include -/* nettle's SHA512 is faster than openssl's */ -#undef ENABLE_SHA512 - extern const struct nettle_hash x86_sha1; extern const struct nettle_hash x86_sha224; extern const struct nettle_hash x86_sha256; @@ -19,4 +16,4 @@ void x86_sha512_update(struct sha512_ctx *ctx, size_t length, const uint8_t * da extern const gnutls_crypto_digest_st _gnutls_sha_x86_ssse3; extern const gnutls_crypto_mac_st _gnutls_hmac_sha_x86_ssse3; -#endif +#endif /* GNUTLS_LIB_ACCELERATED_X86_SHA_X86_H */ diff --git a/lib/accelerated/x86/x86-common.c b/lib/accelerated/x86/x86-common.c index 353a252909..459397c118 100644 --- a/lib/accelerated/x86/x86-common.c +++ b/lib/accelerated/x86/x86-common.c @@ -1,5 +1,6 @@ /* - * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2011-2018 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -37,6 +38,12 @@ # include #endif #include +#ifdef HAVE_CPUID_H +# include +#else +# define __get_cpuid(...) 0 +# define __get_cpuid_count(...) 0 +#endif /* ebx, ecx, edx * This is a format compatible with openssl's CPUID detection. @@ -48,11 +55,21 @@ __hidden #endif unsigned int _gnutls_x86_cpuid_s[4]; +#ifndef bit_SHA +# define bit_SHA (1<<29) +#endif + +/* ecx */ +#ifndef bit_AVX512BITALG +# define bit_AVX512BITALG 0x4000 +#endif + #ifndef bit_PCLMUL # define bit_PCLMUL 0x2 #endif #ifndef bit_SSSE3 +/* ecx */ # define bit_SSSE3 0x0000200 #endif @@ -84,10 +101,42 @@ unsigned int _gnutls_x86_cpuid_s[4]; #define INTEL_SSSE3 (1<<2) #define INTEL_PCLMUL (1<<3) #define INTEL_AVX (1<<4) +#define INTEL_SHA (1<<5) #define VIA_PADLOCK (1<<20) #define VIA_PADLOCK_PHE (1<<21) #define VIA_PADLOCK_PHE_SHA512 (1<<22) +#ifndef HAVE_GET_CPUID_COUNT +static inline void +get_cpuid_level7(unsigned int *eax, unsigned int *ebx, + unsigned int *ecx, unsigned int *edx) +{ + /* we avoid using __get_cpuid_count, because it is not available with gcc 4.8 */ + if (__get_cpuid_max(7, 0) < 7) + return; + + __cpuid_count(7, 0, *eax, *ebx, *ecx, *edx); + return; +} +#else +# define get_cpuid_level7(a,b,c,d) __get_cpuid_count(7, 0, a, b, c, d) +#endif + +static unsigned read_cpuid_vals(unsigned int vals[4]) +{ + unsigned t1, t2, t3; + vals[0] = vals[1] = vals[2] = vals[3] = 0; + + if (!__get_cpuid(1, &t1, &vals[0], &vals[1], &t2)) + return 0; + /* suppress AVX512; it works conditionally on certain CPUs on the original code */ + vals[1] &= 0xfffff7ff; + + get_cpuid_level7(&t1, &vals[2], &t2, &t3); + + return 1; +} + /* Based on the example in "How to detect New Instruction support in * the 4th generation Intel Core processor family. * https://software.intel.com/en-us/articles/how-to-detect-new-instruction-support-in-the-4th-generation-intel-core-processor-family @@ -99,7 +148,7 @@ static unsigned check_4th_gen_intel_features(unsigned ecx) if ((ecx & OSXSAVE_MASK) != OSXSAVE_MASK) return 0; -#if defined(_MSC_VER) +#if defined(_MSC_VER) && !defined(__clang__) xcr0 = _xgetbv(0); #else __asm__ ("xgetbv" : "=a" (xcr0) : "c" (0) : "%edx"); @@ -110,18 +159,17 @@ static unsigned check_4th_gen_intel_features(unsigned ecx) static void capabilities_to_intel_cpuid(unsigned capabilities) { - unsigned a,b,c,t; - - memset(_gnutls_x86_cpuid_s, 0, sizeof(_gnutls_x86_cpuid_s)); + unsigned a[4]; if (capabilities & EMPTY_SET) { return; } - gnutls_cpuid(1, &t, &a, &b, &c); + if (!read_cpuid_vals(a)) + return; if (capabilities & INTEL_AES_NI) { - if (b & bit_AES) { + if (a[1] & bit_AES) { _gnutls_x86_cpuid_s[1] |= bit_AES; } else { _gnutls_debug_log @@ -130,7 +178,7 @@ static void capabilities_to_intel_cpuid(unsigned capabilities) } if (capabilities & INTEL_SSSE3) { - if (b & bit_SSSE3) { + if (a[1] & bit_SSSE3) { _gnutls_x86_cpuid_s[1] |= bit_SSSE3; } else { _gnutls_debug_log @@ -139,7 +187,7 @@ static void capabilities_to_intel_cpuid(unsigned capabilities) } if (capabilities & INTEL_AVX) { - if ((b & bit_AVX) && check_4th_gen_intel_features(b)) { + if ((a[1] & bit_AVX) && check_4th_gen_intel_features(a[1])) { _gnutls_x86_cpuid_s[1] |= bit_AVX|bit_MOVBE; } else { _gnutls_debug_log @@ -148,7 +196,7 @@ static void capabilities_to_intel_cpuid(unsigned capabilities) } if (capabilities & INTEL_PCLMUL) { - if (b & bit_PCLMUL) { + if (a[1] & bit_PCLMUL) { _gnutls_x86_cpuid_s[1] |= bit_PCLMUL; } else { _gnutls_debug_log @@ -156,6 +204,14 @@ static void capabilities_to_intel_cpuid(unsigned capabilities) } } + if (capabilities & INTEL_SHA) { + if (a[2] & bit_SHA) { + _gnutls_x86_cpuid_s[2] |= bit_SHA; + } else { + _gnutls_debug_log + ("SHA acceleration requested but not available\n"); + } + } } @@ -169,6 +225,11 @@ static unsigned check_ssse3(void) return (_gnutls_x86_cpuid_s[1] & bit_SSSE3); } +static unsigned check_sha(void) +{ + return (_gnutls_x86_cpuid_s[2] & bit_SHA); +} + #ifdef ASM_X86_64 static unsigned check_avx_movbe(void) { @@ -195,8 +256,8 @@ static unsigned capabilities_to_via_edx(unsigned capabilities) return 0; } - gnutls_cpuid(1, &t, &a, &b, &c); - + if (!__get_cpuid(1, &t, &a, &b, &c)) + return 0; if (capabilities & VIA_PADLOCK) { if (c & via_bit_PADLOCK) { _gnutls_x86_cpuid_s[2] |= via_bit_PADLOCK; @@ -264,7 +325,9 @@ static int check_phe_partial(void) static unsigned check_via(void) { unsigned int a, b, c, d; - gnutls_cpuid(0, &a, &b, &c, &d); + + if (!__get_cpuid(0, &a, &b, &c, &d)) + return 0; if ((memcmp(&b, "Cent", 4) == 0 && memcmp(&d, "aurH", 4) == 0 && memcmp(&c, "auls", 4) == 0)) { @@ -306,13 +369,6 @@ void register_x86_padlock_crypto(unsigned capabilities) if (ret < 0) { gnutls_assert(); } -#ifdef HAVE_LIBNETTLE - ret = - gnutls_crypto_single_cipher_register - (GNUTLS_CIPHER_AES_192_CBC, 80, &_gnutls_aes_padlock, 0); - if (ret < 0) { - gnutls_assert(); - } ret = gnutls_crypto_single_cipher_register @@ -328,7 +384,6 @@ void register_x86_padlock_crypto(unsigned capabilities) if (ret < 0) { gnutls_assert(); } -#endif } else { _gnutls_priority_update_non_aesni(); } @@ -462,7 +517,9 @@ void register_x86_padlock_crypto(unsigned capabilities) static unsigned check_intel_or_amd(void) { unsigned int a, b, c, d; - gnutls_cpuid(0, &a, &b, &c, &d); + + if (!__get_cpuid(0, &a, &b, &c, &d)) + return 0; if ((memcmp(&b, "Genu", 4) == 0 && memcmp(&d, "ineI", 4) == 0 && @@ -479,14 +536,15 @@ static void register_x86_intel_crypto(unsigned capabilities) { int ret; - unsigned t; + + memset(_gnutls_x86_cpuid_s, 0, sizeof(_gnutls_x86_cpuid_s)); if (check_intel_or_amd() == 0) return; if (capabilities == 0) { - gnutls_cpuid(1, &t, &_gnutls_x86_cpuid_s[0], - &_gnutls_x86_cpuid_s[1], &_gnutls_x86_cpuid_s[2]); + if (!read_cpuid_vals(_gnutls_x86_cpuid_s)) + return; } else { capabilities_to_intel_cpuid(capabilities); } @@ -530,6 +588,11 @@ void register_x86_intel_crypto(unsigned capabilities) if (ret < 0) { gnutls_assert(); } + } + + if (check_sha() || check_ssse3()) { + if (check_sha()) + _gnutls_debug_log("Intel SHA was detected\n"); ret = gnutls_crypto_single_digest_register(GNUTLS_DIG_SHA1, @@ -577,7 +640,6 @@ void register_x86_intel_crypto(unsigned capabilities) if (ret < 0) gnutls_assert(); -#ifdef ENABLE_SHA512 ret = gnutls_crypto_single_digest_register(GNUTLS_DIG_SHA384, 80, @@ -604,7 +666,6 @@ void register_x86_intel_crypto(unsigned capabilities) &_gnutls_hmac_sha_x86_ssse3, 0); if (ret < 0) gnutls_assert(); -#endif } if (check_optimized_aes()) { @@ -662,6 +723,22 @@ void register_x86_intel_crypto(unsigned capabilities) gnutls_assert(); } + ret = + gnutls_crypto_single_cipher_register + (GNUTLS_CIPHER_AES_128_XTS, 80, + &_gnutls_aes_xts_x86_aesni, 0); + if (ret < 0) { + gnutls_assert(); + } + + ret = + gnutls_crypto_single_cipher_register + (GNUTLS_CIPHER_AES_256_XTS, 80, + &_gnutls_aes_xts_x86_aesni, 0); + if (ret < 0) { + gnutls_assert(); + } + #ifdef ASM_X86_64 if (check_pclmul()) { /* register GCM ciphers */ diff --git a/lib/accelerated/x86/x86-common.h b/lib/accelerated/x86/x86-common.h index 221d733a11..d15786f378 100644 --- a/lib/accelerated/x86/x86-common.h +++ b/lib/accelerated/x86/x86-common.h @@ -16,9 +16,11 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . + * along with this program. If not, see . * */ +#ifndef GNUTLS_LIB_ACCELERATED_X86_X86_COMMON_H +# define GNUTLS_LIB_ACCELERATED_X86_X86_COMMON_H #include @@ -27,14 +29,12 @@ void gnutls_cpuid(unsigned int func, unsigned int *ax, unsigned int *bx, unsigned int *cx, unsigned int *dx); -# ifdef ASM_X86_32 -unsigned int gnutls_have_cpuid(void); -# else -# define gnutls_have_cpuid() 1 -# endif /* ASM_X86_32 */ - #endif +#define CHECK_AES_KEYSIZE(s) \ + if (s != 16 && s != 24 && s != 32) \ + return GNUTLS_E_INVALID_REQUEST + #define NN_HASH(name, update_func, digest_func, NAME) { \ #name, \ sizeof(struct name##_ctx), \ @@ -44,3 +44,5 @@ unsigned int gnutls_have_cpuid(void); (nettle_hash_update_func *) update_func, \ (nettle_hash_digest_func *) digest_func \ } + +#endif diff --git a/lib/alert.c b/lib/alert.c index 61a14a070b..cfd1205d01 100644 --- a/lib/alert.c +++ b/lib/alert.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -79,9 +79,13 @@ static const gnutls_alert_entry sup_alerts[] = { N_("The server name sent was not recognized")), ALERT_ENTRY(GNUTLS_A_UNKNOWN_PSK_IDENTITY, N_("The SRP/PSK username is missing or not known")), + ALERT_ENTRY(GNUTLS_A_MISSING_EXTENSION, + N_("An extension was expected but was not seen")), ALERT_ENTRY(GNUTLS_A_NO_APPLICATION_PROTOCOL, N_ ("No supported application protocol could be negotiated")), + ALERT_ENTRY(GNUTLS_A_CERTIFICATE_REQUIRED, + N_("Certificate is required")), {0, NULL, NULL} }; @@ -155,7 +159,7 @@ gnutls_alert_send(gnutls_session_t session, gnutls_alert_level_t level, data[0] = (uint8_t) level; data[1] = (uint8_t) desc; - name = gnutls_alert_get_name((int) data[1]); + name = gnutls_alert_get_name((gnutls_alert_description_t) data[1]); if (name == NULL) name = "(unknown)"; _gnutls_record_log("REC: Sending Alert[%d|%d] - %s\n", data[0], @@ -182,7 +186,7 @@ gnutls_alert_send(gnutls_session_t session, gnutls_alert_level_t level, * renegotiation will be performed. * * If there is no mapping to a valid alert the alert to indicate - * internal error is returned. + * internal error (%GNUTLS_A_INTERNAL_ERROR) is returned. * * Returns: the alert code to use for a particular error code. **/ @@ -191,6 +195,11 @@ int gnutls_error_to_alert(int err, int *level) int ret, _level = -1; switch (err) { /* send appropriate alert */ + case GNUTLS_E_PK_SIG_VERIFY_FAILED: + case GNUTLS_E_ERROR_IN_FINISHED_PACKET: + ret = GNUTLS_A_DECRYPT_ERROR; + _level = GNUTLS_AL_FATAL; + break; case GNUTLS_E_DECRYPTION_FAILED: /* GNUTLS_A_DECRYPTION_FAILED is not sent, because * it is not defined in SSL3. Note that we must @@ -204,6 +213,7 @@ int gnutls_error_to_alert(int err, int *level) case GNUTLS_E_UNEXPECTED_PACKET_LENGTH: case GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH: case GNUTLS_E_NO_CERTIFICATE_FOUND: + case GNUTLS_E_HANDSHAKE_TOO_LARGE: ret = GNUTLS_A_DECODE_ERROR; _level = GNUTLS_AL_FATAL; break; @@ -211,9 +221,13 @@ int gnutls_error_to_alert(int err, int *level) ret = GNUTLS_A_DECOMPRESSION_FAILURE; _level = GNUTLS_AL_FATAL; break; + case GNUTLS_E_ILLEGAL_PARAMETER: case GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER: case GNUTLS_E_ILLEGAL_SRP_USERNAME: case GNUTLS_E_PK_INVALID_PUBKEY: + case GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM: + case GNUTLS_E_RECEIVED_DISALLOWED_NAME: + case GNUTLS_E_INCOMPATIBLE_SIG_WITH_KEY: ret = GNUTLS_A_ILLEGAL_PARAMETER; _level = GNUTLS_AL_FATAL; break; @@ -234,12 +248,10 @@ int gnutls_error_to_alert(int err, int *level) case GNUTLS_E_ASN1_DER_OVERFLOW: case GNUTLS_E_CERTIFICATE_ERROR: case GNUTLS_E_CERTIFICATE_VERIFICATION_ERROR: - case GNUTLS_E_PK_SIG_VERIFY_FAILED: ret = GNUTLS_A_BAD_CERTIFICATE; _level = GNUTLS_AL_FATAL; break; case GNUTLS_E_UNKNOWN_CIPHER_SUITE: - case GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM: case GNUTLS_E_INSUFFICIENT_CREDENTIALS: case GNUTLS_E_NO_CIPHER_SUITES: case GNUTLS_E_NO_COMPRESSION_ALGORITHMS: @@ -247,6 +259,10 @@ int gnutls_error_to_alert(int err, int *level) case GNUTLS_E_SAFE_RENEGOTIATION_FAILED: case GNUTLS_E_INCOMPAT_DSA_KEY_WITH_TLS_PROTOCOL: case GNUTLS_E_UNKNOWN_PK_ALGORITHM: + case GNUTLS_E_UNWANTED_ALGORITHM: + case GNUTLS_E_NO_COMMON_KEY_SHARE: + case GNUTLS_E_ECC_NO_SUPPORTED_CURVES: + case GNUTLS_E_ECC_UNSUPPORTED_CURVE: ret = GNUTLS_A_HANDSHAKE_FAILURE; _level = GNUTLS_AL_FATAL; break; @@ -254,6 +270,10 @@ int gnutls_error_to_alert(int err, int *level) ret = GNUTLS_A_UNSUPPORTED_EXTENSION; _level = GNUTLS_AL_FATAL; break; + case GNUTLS_E_MISSING_EXTENSION: + ret = GNUTLS_A_MISSING_EXTENSION; + _level = GNUTLS_AL_FATAL; + break; case GNUTLS_E_USER_ERROR: ret = GNUTLS_A_USER_CANCELED; _level = GNUTLS_AL_FATAL; @@ -297,6 +317,7 @@ int gnutls_error_to_alert(int err, int *level) break; case GNUTLS_E_DH_PRIME_UNACCEPTABLE: case GNUTLS_E_SESSION_USER_ID_CHANGED: + case GNUTLS_E_INSUFFICIENT_SECURITY: ret = GNUTLS_A_INSUFFICIENT_SECURITY; _level = GNUTLS_AL_FATAL; break; @@ -308,6 +329,10 @@ int gnutls_error_to_alert(int err, int *level) ret = GNUTLS_A_UNRECOGNIZED_NAME; _level = GNUTLS_AL_FATAL; break; + case GNUTLS_E_CERTIFICATE_REQUIRED: + ret = GNUTLS_A_CERTIFICATE_REQUIRED; + _level = GNUTLS_AL_FATAL; + break; default: ret = GNUTLS_A_INTERNAL_ERROR; _level = GNUTLS_AL_FATAL; @@ -323,7 +348,7 @@ int gnutls_error_to_alert(int err, int *level) /** * gnutls_alert_send_appropriate: * @session: is a #gnutls_session_t type. - * @err: is an integer + * @err: is an error code returned by another GnuTLS function * * Sends an alert to the peer depending on the error code returned by * a gnutls function. This function will call gnutls_error_to_alert() @@ -332,8 +357,11 @@ int gnutls_error_to_alert(int err, int *level) * This function may also return %GNUTLS_E_AGAIN, or * %GNUTLS_E_INTERRUPTED. * - * If the return value is %GNUTLS_E_INVALID_REQUEST, then no alert has - * been sent to the peer. + * This function historically was always sending an alert to the + * peer, even if @err was inappropriate to respond with an alert + * (e.g., %GNUTLS_E_SUCCESS). Since 3.6.6 this function returns + * success without transmitting any data on error codes that + * should not result to an alert. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise * an error code is returned. @@ -343,12 +371,13 @@ int gnutls_alert_send_appropriate(gnutls_session_t session, int err) int alert; int level; + if (err != GNUTLS_E_REHANDSHAKE && (!gnutls_error_is_fatal(err) || + err == GNUTLS_E_FATAL_ALERT_RECEIVED)) + return gnutls_assert_val(0); + alert = gnutls_error_to_alert(err, &level); - if (alert < 0) { - return alert; - } - return gnutls_alert_send(session, level, alert); + return gnutls_alert_send(session, (gnutls_alert_level_t)level, alert); } /** @@ -366,5 +395,5 @@ int gnutls_alert_send_appropriate(gnutls_session_t session, int err) **/ gnutls_alert_description_t gnutls_alert_get(gnutls_session_t session) { - return session->internals.last_alert; + return (gnutls_alert_description_t)session->internals.last_alert; } diff --git a/lib/algorithms.h b/lib/algorithms.h index 60c0915098..9cdb3abf7a 100644 --- a/lib/algorithms.h +++ b/lib/algorithms.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2000-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,38 +17,69 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef ALGORITHMS_H -#define ALGORITHMS_H +#ifndef GNUTLS_LIB_ALGORITHMS_H +#define GNUTLS_LIB_ALGORITHMS_H #include "auth.h" +#ifdef DISABLE_SYSTEM_CONFIG +# define SYSTEM_CONFIG_OR_CONST const +#else +# define SYSTEM_CONFIG_OR_CONST +#endif + +#define version_to_entry _gnutls_version_to_entry + #define GNUTLS_RENEGO_PROTECTION_REQUEST_MAJOR 0x00 #define GNUTLS_RENEGO_PROTECTION_REQUEST_MINOR 0xFF #define GNUTLS_FALLBACK_SCSV_MAJOR 0x56 #define GNUTLS_FALLBACK_SCSV_MINOR 0x00 -/* would allow for 256 ciphersuites */ -#define MAX_CIPHERSUITE_SIZE 512 +#define IS_GOSTEC(x) (((x)==GNUTLS_PK_GOST_01) || \ + ((x)==GNUTLS_PK_GOST_12_256)|| \ + ((x)==GNUTLS_PK_GOST_12_512)) + +#define IS_EC(x) (((x)==GNUTLS_PK_ECDSA)|| \ + ((x)==GNUTLS_PK_ECDH_X25519)||((x)==GNUTLS_PK_EDDSA_ED25519)|| \ + ((x)==GNUTLS_PK_ECDH_X448)||((x)==GNUTLS_PK_EDDSA_ED448)) + +#define SIG_SEM_PRE_TLS12 (1<<1) +#define SIG_SEM_TLS13 (1<<2) +#define SIG_SEM_DEFAULT (SIG_SEM_PRE_TLS12|SIG_SEM_TLS13) -#define IS_EC(x) (((x)==GNUTLS_PK_ECDSA)||((x)==GNUTLS_PK_ECDHX)) +#define TLS_SIGN_AID_UNKNOWN {{255, 255}, 0} +#define HAVE_UNKNOWN_SIGAID(aid) ((aid)->id[0] == 255 && (aid)->id[1] == 255) + +#define CS_INVALID_MAJOR 0x00 +#define CS_INVALID_MINOR 0x00 /* Functions for version handling. */ -const version_entry_st *version_to_entry(gnutls_protocol_t c); +const version_entry_st *version_to_entry(gnutls_protocol_t version); +const version_entry_st *nversion_to_entry(uint8_t major, uint8_t minor); const version_entry_st *_gnutls_version_lowest(gnutls_session_t session); -gnutls_protocol_t _gnutls_version_max(gnutls_session_t session); + +const version_entry_st *_gnutls_legacy_version_max(gnutls_session_t session); +const version_entry_st *_gnutls_version_max(gnutls_session_t session); int _gnutls_version_priority(gnutls_session_t session, gnutls_protocol_t version); -int _gnutls_version_is_supported(gnutls_session_t session, - const gnutls_protocol_t version); +int _gnutls_nversion_is_supported(gnutls_session_t session, + unsigned char major, unsigned char minor); gnutls_protocol_t _gnutls_version_get(uint8_t major, uint8_t minor); unsigned _gnutls_version_is_too_high(gnutls_session_t session, uint8_t major, uint8_t minor); +int _gnutls_write_supported_versions(gnutls_session_t session, uint8_t *buffer, ssize_t buffer_size); + /* Functions for feature checks */ +int +_gnutls_figure_common_ciphersuite(gnutls_session_t session, + const ciphersuite_list_st *peer_clist, + const gnutls_cipher_suite_entry_st **ce); + inline static int _gnutls_version_has_selectable_prf(const version_entry_st * ver) { @@ -147,34 +179,32 @@ inline static int _gnutls_mac_get_key_size(const mac_entry_st * e) #define _gnutls_digest_get_name _gnutls_mac_get_name #define _gnutls_hash_get_algo_len _gnutls_mac_get_algo_len +/* Security against pre-image attacks */ inline static int _gnutls_digest_is_secure(const mac_entry_st * e) { if (unlikely(e == NULL)) return 0; else - return e->secure; + return !(e->flags & GNUTLS_MAC_FLAG_PREIMAGE_INSECURE); } /* Functions for cipher suites. */ +int _gnutls_get_client_ciphersuites(gnutls_session_t session, + gnutls_buffer_st * cdata, const version_entry_st *minver, + unsigned add_scsv); + int _gnutls_supported_ciphersuites(gnutls_session_t session, uint8_t * cipher_suites, unsigned int max_cipher_suite_size); -int -_gnutls_remove_unwanted_ciphersuites(gnutls_session_t session, - uint8_t * cipher_suites, - int cipher_suites_size, - gnutls_pk_algorithm_t * pk_algos, - size_t pk_algos_size); + +const gnutls_cipher_suite_entry_st + *cipher_suite_get(gnutls_kx_algorithm_t kx_algorithm, + gnutls_cipher_algorithm_t cipher_algorithm, + gnutls_mac_algorithm_t mac_algorithm); const char *_gnutls_cipher_suite_get_name(const uint8_t suite[2]); -gnutls_mac_algorithm_t _gnutls_cipher_suite_get_prf(const uint8_t - suite[2]); -const cipher_entry_st *_gnutls_cipher_suite_get_cipher_algo(const uint8_t - suite[2]); gnutls_kx_algorithm_t _gnutls_cipher_suite_get_kx_algo(const uint8_t suite[2]); -const mac_entry_st *_gnutls_cipher_suite_get_mac_algo(const uint8_t - suite[2]); int _gnutls_cipher_suite_get_id(gnutls_kx_algorithm_t kx_algorithm, @@ -185,13 +215,14 @@ _gnutls_cipher_suite_get_id(gnutls_kx_algorithm_t kx_algorithm, const gnutls_cipher_suite_entry_st *ciphersuite_to_entry(const uint8_t suite[2]); /* Functions for ciphers. */ -const cipher_entry_st *cipher_to_entry(gnutls_cipher_algorithm_t c); +const cipher_entry_st *_gnutls_cipher_to_entry(gnutls_cipher_algorithm_t c); +#define cipher_to_entry(x) _gnutls_cipher_to_entry(x) const cipher_entry_st *cipher_name_to_entry(const char *name); inline static cipher_type_t _gnutls_cipher_type(const cipher_entry_st * e) { if (unlikely(e == NULL)) - return 0; + return CIPHER_AEAD; /* doesn't matter */ return e->type; } @@ -270,68 +301,173 @@ inline static int _gnutls_cipher_get_tag_size(const cipher_entry_st * e) /* Functions for key exchange. */ bool _gnutls_kx_needs_dh_params(gnutls_kx_algorithm_t algorithm); bool _gnutls_kx_allows_false_start(gnutls_session_t session); -int _gnutls_kx_cert_pk_params(gnutls_kx_algorithm_t algorithm); mod_auth_st *_gnutls_kx_auth_struct(gnutls_kx_algorithm_t algorithm); int _gnutls_kx_is_ok(gnutls_kx_algorithm_t algorithm); int _gnutls_kx_get_id(const char *name); -/* Type to KX mappings. */ -gnutls_kx_algorithm_t _gnutls_map_kx_get_kx(gnutls_credentials_type_t type, - int server); gnutls_credentials_type_t _gnutls_map_kx_get_cred(gnutls_kx_algorithm_t algorithm, int server); /* KX to PK mapping. */ +unsigned +_gnutls_kx_supports_pk(gnutls_kx_algorithm_t kx_algorithm, + gnutls_pk_algorithm_t pk_algorithm); -/* DSA + RSA + ECC */ -#define GNUTLS_DISTINCT_PK_ALGORITHMS 3 -gnutls_pk_algorithm_t _gnutls_map_kx_get_pk(gnutls_kx_algorithm_t - kx_algorithm); +unsigned +_gnutls_kx_supports_pk_usage(gnutls_kx_algorithm_t kx_algorithm, + gnutls_pk_algorithm_t pk_algorithm, + unsigned key_usage); enum encipher_type { CIPHER_ENCRYPT = 0, CIPHER_SIGN = 1, CIPHER_IGN }; enum encipher_type _gnutls_kx_encipher_type(gnutls_kx_algorithm_t - algorithm); + kx_algorithm); /* Functions for sign algorithms. */ + +typedef enum hash_security_level_t { + _SECURE, + _INSECURE_FOR_CERTS, + _INSECURE +} hash_security_level_t; + +int _gnutls_ecc_curve_mark_disabled(const char *name); +int _gnutls_sign_mark_insecure(const char *name, hash_security_level_t); +int _gnutls_digest_mark_insecure(const char *name); +unsigned _gnutls_digest_is_insecure(gnutls_digest_algorithm_t dig); +int _gnutls_version_mark_disabled(const char *name); +gnutls_protocol_t _gnutls_protocol_get_id_if_supported(const char *name); + +#define GNUTLS_SIGN_FLAG_TLS13_OK 1 /* if it is ok to use under TLS1.3 */ +#define GNUTLS_SIGN_FLAG_CRT_VRFY_REVERSE (1 << 1) /* reverse order of bytes in CrtVrfy signature */ +struct gnutls_sign_entry_st { + const char *name; + const char *oid; + gnutls_sign_algorithm_t id; + gnutls_pk_algorithm_t pk; + gnutls_digest_algorithm_t hash; + + /* if non-zero it must be the algorithm of the + * private key used or certificate. This is for algorithms + * which can have a different public key type than the + * private key (e.g., RSA PKCS#1 1.5 certificate, but + * an RSA-PSS private key, or an RSA private key and + * an RSA-PSS certificate). */ + gnutls_pk_algorithm_t priv_pk; + gnutls_pk_algorithm_t cert_pk; + + unsigned flags; + + /* if this signature algorithm is restricted to a curve + * under TLS 1.3. */ + gnutls_ecc_curve_t curve; + + /* See RFC 5246 HashAlgorithm and SignatureAlgorithm + for values to use in aid struct. */ + const sign_algorithm_st aid; + hash_security_level_t slevel; /* contains values of hash_security_level_t */ + + /* 0 if it matches the predefined hash output size, otherwise + * it is truncated or expanded (with XOF) */ + unsigned hash_output_size; +}; +typedef struct gnutls_sign_entry_st gnutls_sign_entry_st; + +const gnutls_sign_entry_st *_gnutls_sign_to_entry(gnutls_sign_algorithm_t sign); +const gnutls_sign_entry_st *_gnutls_pk_to_sign_entry(gnutls_pk_algorithm_t pk, gnutls_digest_algorithm_t hash); +const gnutls_sign_entry_st *_gnutls_oid_to_sign_entry(const char *oid); + +/* returns true if that signature can be generated + * from the given private key algorithm. */ +inline static unsigned +sign_supports_priv_pk_algorithm(const gnutls_sign_entry_st *se, gnutls_pk_algorithm_t pk) +{ + if (pk == se->pk || (se->priv_pk && se->priv_pk == pk)) + return 1; + + return 0; +} + +/* returns true if that signature can be verified with + * the given public key algorithm. */ +inline static unsigned +sign_supports_cert_pk_algorithm(const gnutls_sign_entry_st *se, gnutls_pk_algorithm_t pk) +{ + if ((!se->cert_pk && pk == se->pk) || (se->cert_pk && se->cert_pk == pk)) + return 1; + + return 0; +} + +bool _gnutls_sign_is_secure2(const gnutls_sign_entry_st *se, unsigned int flags); + gnutls_pk_algorithm_t _gnutls_x509_sign_to_pk(gnutls_sign_algorithm_t sign); const char *_gnutls_x509_sign_to_oid(gnutls_pk_algorithm_t, gnutls_digest_algorithm_t mac); -gnutls_sign_algorithm_t _gnutls_tls_aid_to_sign(const sign_algorithm_st * - aid); + +const gnutls_sign_entry_st * +_gnutls_tls_aid_to_sign_entry(uint8_t id0, uint8_t id1, const version_entry_st *ver); + +gnutls_sign_algorithm_t +_gnutls_tls_aid_to_sign(uint8_t id0, uint8_t id1, const version_entry_st *ver); const sign_algorithm_st *_gnutls_sign_to_tls_aid(gnutls_sign_algorithm_t sign); -int _gnutls_mac_priority(gnutls_session_t session, - gnutls_mac_algorithm_t algorithm); -int _gnutls_cipher_priority(gnutls_session_t session, - gnutls_cipher_algorithm_t a); -int _gnutls_kx_priority(gnutls_session_t session, - gnutls_kx_algorithm_t algorithm); +const gnutls_sign_entry_st * +_gnutls13_sign_get_compatible_with_privkey(gnutls_privkey_t privkey); unsigned int _gnutls_pk_bits_to_subgroup_bits(unsigned int pk_bits); +gnutls_digest_algorithm_t _gnutls_pk_bits_to_sha_hash(unsigned int pk_bits); + +gnutls_digest_algorithm_t _gnutls_hash_size_to_sha_hash(unsigned int size); + +bool _gnutls_pk_is_not_prehashed(gnutls_pk_algorithm_t algorithm); /* ECC */ -struct gnutls_ecc_curve_entry_st { +typedef struct gnutls_ecc_curve_entry_st { const char *name; const char *oid; gnutls_ecc_curve_t id; gnutls_pk_algorithm_t pk; - int tls_id; /* The RFC4492 namedCurve ID */ - int size; /* the size in bytes */ -}; -typedef struct gnutls_ecc_curve_entry_st gnutls_ecc_curve_entry_st; + unsigned size; /* the size in bytes */ + unsigned sig_size; /* the size of curve signatures in bytes (EdDSA) */ + unsigned gost_curve; + bool supported; + gnutls_group_t group; +} gnutls_ecc_curve_entry_st; const gnutls_ecc_curve_entry_st *_gnutls_ecc_curve_get_params(gnutls_ecc_curve_t curve); -gnutls_ecc_curve_t gnutls_ecc_curve_get_id(const char *name); -int _gnutls_tls_id_to_ecc_curve(int num); -int _gnutls_ecc_curve_get_tls_id(gnutls_ecc_curve_t supported_ecc); -gnutls_ecc_curve_t _gnutls_ecc_bits_to_curve(int bits); + +unsigned _gnutls_ecc_curve_is_supported(gnutls_ecc_curve_t); + +gnutls_group_t _gnutls_ecc_curve_get_group(gnutls_ecc_curve_t); +const gnutls_group_entry_st *_gnutls_tls_id_to_group(unsigned num); +const gnutls_group_entry_st * _gnutls_id_to_group(unsigned id); + +gnutls_ecc_curve_t _gnutls_ecc_bits_to_curve(gnutls_pk_algorithm_t pk, int bits); #define MAX_ECC_CURVE_SIZE 66 +gnutls_pk_algorithm_t _gnutls_oid_to_pk_and_curve(const char *oid, gnutls_ecc_curve_t *curve); + +inline static int _curve_is_eddsa(const gnutls_ecc_curve_entry_st * e) +{ + if (unlikely(e == NULL)) + return 0; + if (e->pk == GNUTLS_PK_EDDSA_ED25519 || + e->pk == GNUTLS_PK_EDDSA_ED448) + return 1; + return 0; +} + +inline static int curve_is_eddsa(gnutls_ecc_curve_t id) +{ + const gnutls_ecc_curve_entry_st *e = _gnutls_ecc_curve_get_params(id); + return _curve_is_eddsa(e); +} + static inline int _gnutls_kx_is_ecc(gnutls_kx_algorithm_t kx) { if (kx == GNUTLS_KX_ECDHE_RSA || kx == GNUTLS_KX_ECDHE_ECDSA || @@ -341,6 +477,42 @@ static inline int _gnutls_kx_is_ecc(gnutls_kx_algorithm_t kx) return 0; } +static inline int _gnutls_kx_is_psk(gnutls_kx_algorithm_t kx) +{ + if (kx == GNUTLS_KX_PSK || kx == GNUTLS_KX_DHE_PSK || + kx == GNUTLS_KX_ECDHE_PSK || kx == GNUTLS_KX_RSA_PSK) + return 1; + + return 0; +} + +static inline int _gnutls_kx_is_dhe(gnutls_kx_algorithm_t kx) +{ + if (kx == GNUTLS_KX_DHE_RSA || kx == GNUTLS_KX_DHE_DSS || + kx == GNUTLS_KX_ANON_DH || kx == GNUTLS_KX_DHE_PSK) + return 1; + + return 0; +} + +static inline unsigned _gnutls_kx_is_vko_gost(gnutls_kx_algorithm_t kx) +{ + if (kx == GNUTLS_KX_VKO_GOST_12) + return 1; + + return 0; +} + +static inline bool +_sign_is_gost(const gnutls_sign_entry_st *se) +{ + gnutls_pk_algorithm_t pk = se->pk; + + return (pk == GNUTLS_PK_GOST_01) || + (pk == GNUTLS_PK_GOST_12_256) || + (pk == GNUTLS_PK_GOST_12_512); +} + static inline int _sig_is_ecdsa(gnutls_sign_algorithm_t sig) { if (sig == GNUTLS_SIGN_ECDSA_SHA1 || sig == GNUTLS_SIGN_ECDSA_SHA224 || @@ -351,4 +523,8 @@ static inline int _sig_is_ecdsa(gnutls_sign_algorithm_t sig) return 0; } -#endif +bool _gnutls_pk_are_compat(gnutls_pk_algorithm_t pk1, gnutls_pk_algorithm_t pk2); + +unsigned _gnutls_sign_get_hash_strength(gnutls_sign_algorithm_t sign); + +#endif /* GNUTLS_LIB_ALGORITHMS_H */ diff --git a/lib/algorithms/Makefile.am b/lib/algorithms/Makefile.am index 47e5739ccc..18aac8a87a 100644 --- a/lib/algorithms/Makefile.am +++ b/lib/algorithms/Makefile.am @@ -16,7 +16,7 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see include $(top_srcdir)/lib/common.mk @@ -26,8 +26,7 @@ AM_CPPFLAGS = \ -I$(srcdir)/../includes \ -I$(builddir)/../includes \ -I$(builddir)/../../gl \ - -I$(srcdir)/.. \ - -I$(srcdir)/../opencdk + -I$(srcdir)/.. if ENABLE_MINITASN1 AM_CPPFLAGS += -I$(srcdir)/../minitasn1 @@ -36,4 +35,5 @@ endif noinst_LTLIBRARIES = libgnutls_alg.la libgnutls_alg_la_SOURCES = cert_types.c ciphers.c ciphersuites.c \ - ecc.c kx.c mac.c protocols.c publickey.c secparams.c sign.c + ecc.c kx.c mac.c protocols.c publickey.c secparams.c sign.c \ + groups.c diff --git a/lib/algorithms/cert_types.c b/lib/algorithms/cert_types.c index ca014507dc..4fa43b819f 100644 --- a/lib/algorithms/cert_types.c +++ b/lib/algorithms/cert_types.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -24,6 +24,7 @@ #include #include "errors.h" #include +#include "c-strcase.h" /** * gnutls_certificate_type_get_name: @@ -41,8 +42,8 @@ const char *gnutls_certificate_type_get_name(gnutls_certificate_type_t if (type == GNUTLS_CRT_X509) ret = "X.509"; - if (type == GNUTLS_CRT_OPENPGP) - ret = "OPENPGP"; + if (type == GNUTLS_CRT_RAWPK) + ret = "Raw Public Key"; return ret; } @@ -60,18 +61,18 @@ gnutls_certificate_type_t gnutls_certificate_type_get_id(const char *name) { gnutls_certificate_type_t ret = GNUTLS_CRT_UNKNOWN; - if (strcasecmp(name, "X.509") == 0 - || strcasecmp(name, "X509") == 0) + if (c_strcasecmp(name, "X.509") == 0 + || c_strcasecmp(name, "X509") == 0) return GNUTLS_CRT_X509; - if (strcasecmp(name, "OPENPGP") == 0) - return GNUTLS_CRT_OPENPGP; + if (c_strcasecmp(name, "RAWPK") == 0) + return GNUTLS_CRT_RAWPK; return ret; } static const gnutls_certificate_type_t supported_certificate_types[] = { GNUTLS_CRT_X509, - GNUTLS_CRT_OPENPGP, + GNUTLS_CRT_RAWPK, 0 }; diff --git a/lib/algorithms/ciphers.c b/lib/algorithms/ciphers.c index ea0cf51bbf..59dc7ea7fb 100644 --- a/lib/algorithms/ciphers.c +++ b/lib/algorithms/ciphers.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -24,15 +24,17 @@ #include #include "errors.h" #include +#include "c-strcase.h" -/* Note that all algorithms are in CBC or STREAM modes. +/* Note that all algorithms are in CBC or STREAM modes. * Do not add any algorithms in other modes (avoid modified algorithms). * View first: "The order of encryption and authentication for * protecting communications" by Hugo Krawczyk - CRYPTO 2001 * - * On update, make sure to update MAX_CIPHER_BLOCK_SIZE and MAX_CIPHER_KEY_SIZE - * as well. If any ciphers are removed, remove them from the back-end but + * On update, make sure to update MAX_CIPHER_BLOCK_SIZE, MAX_CIPHER_IV_SIZE, + * and MAX_CIPHER_KEY_SIZE as well. + * If any ciphers are removed, remove them from the back-end but * keep them in that list to allow backwards compatibility with applications * that specify them (they will be a no-op). */ @@ -53,7 +55,7 @@ static const cipher_entry_st algorithms[] = { .cipher_iv = 16}, { .name = "AES-128-CBC", .id = GNUTLS_CIPHER_AES_128_CBC, - .blocksize = 16, + .blocksize = 16, .keysize = 16, .type = CIPHER_BLOCK, .explicit_iv = 16, @@ -84,6 +86,7 @@ static const cipher_entry_st algorithms[] = { .implicit_iv = 4, .explicit_iv = 8, .cipher_iv = 12, + .flags = GNUTLS_CIPHER_FLAG_ONLY_AEAD, .tagsize = 16}, { .name = "AES-256-CCM", .id = GNUTLS_CIPHER_AES_256_CCM, @@ -93,6 +96,7 @@ static const cipher_entry_st algorithms[] = { .implicit_iv = 4, .explicit_iv = 8, .cipher_iv = 12, + .flags = GNUTLS_CIPHER_FLAG_ONLY_AEAD, .tagsize = 16}, { .name = "AES-128-CCM-8", .id = GNUTLS_CIPHER_AES_128_CCM_8, @@ -102,6 +106,7 @@ static const cipher_entry_st algorithms[] = { .implicit_iv = 4, .explicit_iv = 8, .cipher_iv = 12, + .flags = GNUTLS_CIPHER_FLAG_ONLY_AEAD, .tagsize = 8}, { .name = "AES-256-CCM-8", .id = GNUTLS_CIPHER_AES_256_CCM_8, @@ -111,25 +116,42 @@ static const cipher_entry_st algorithms[] = { .implicit_iv = 4, .explicit_iv = 8, .cipher_iv = 12, + .flags = GNUTLS_CIPHER_FLAG_ONLY_AEAD, .tagsize = 8}, { .name = "ARCFOUR-128", .id = GNUTLS_CIPHER_ARCFOUR_128, .blocksize = 1, .keysize = 16, - .type = CIPHER_STREAM, + .type = CIPHER_STREAM, 0, 0, 0, 0}, - { .name = "ESTREAM-SALSA20-256", + { .name = "ESTREAM-SALSA20-256", .id = GNUTLS_CIPHER_ESTREAM_SALSA20_256, .blocksize = 64, .keysize = 32, .type = CIPHER_STREAM, 0, 0, 8, 0}, - { .name = "SALSA20-256", + { .name = "SALSA20-256", .id = GNUTLS_CIPHER_SALSA20_256, .blocksize = 64, .keysize = 32, .type = CIPHER_STREAM, .explicit_iv = 0, .cipher_iv = 8}, + { .name = "CHACHA20-32", + .id = GNUTLS_CIPHER_CHACHA20_32, + .blocksize = 64, + .keysize = 32, + .type = CIPHER_STREAM, + .explicit_iv = 0, + /* IV includes counter */ + .cipher_iv = 16}, + { .name = "CHACHA20-64", + .id = GNUTLS_CIPHER_CHACHA20_64, + .blocksize = 64, + .keysize = 32, + .type = CIPHER_STREAM, + .explicit_iv = 0, + /* IV includes counter */ + .cipher_iv = 16}, { .name = "CAMELLIA-256-CBC", .id = GNUTLS_CIPHER_CAMELLIA_256_CBC, .blocksize = 16, @@ -158,7 +180,8 @@ static const cipher_entry_st algorithms[] = { .type = CIPHER_AEAD, .implicit_iv = 12, .explicit_iv = 0, - .xor_nonce = 1, + /* in chacha20 we don't need a rekey after 2^24 messages */ + .flags = GNUTLS_CIPHER_FLAG_XOR_NONCE | GNUTLS_CIPHER_FLAG_NO_REKEY, .cipher_iv = 12, .tagsize = 16 }, @@ -176,24 +199,120 @@ static const cipher_entry_st algorithms[] = { .explicit_iv = 8, .cipher_iv = 12, .tagsize = 16}, - { .name = "3DES-CBC", + { .name = "GOST28147-TC26Z-CFB", + .id = GNUTLS_CIPHER_GOST28147_TC26Z_CFB, + .blocksize = 8, + .keysize = 32, + .type = CIPHER_STREAM, + .implicit_iv = 8, + .cipher_iv = 8}, + { .name = "GOST28147-CPA-CFB", + .id = GNUTLS_CIPHER_GOST28147_CPA_CFB, + .blocksize = 8, + .keysize = 32, + .type = CIPHER_STREAM, + .implicit_iv = 8, + .cipher_iv = 8}, + { .name = "GOST28147-CPB-CFB", + .id = GNUTLS_CIPHER_GOST28147_CPB_CFB, + .blocksize = 8, + .keysize = 32, + .type = CIPHER_STREAM, + .implicit_iv = 8, + .cipher_iv = 8}, + { .name = "GOST28147-CPC-CFB", + .id = GNUTLS_CIPHER_GOST28147_CPC_CFB, + .blocksize = 8, + .keysize = 32, + .type = CIPHER_STREAM, + .implicit_iv = 8, + .cipher_iv = 8}, + { .name = "GOST28147-CPD-CFB", + .id = GNUTLS_CIPHER_GOST28147_CPD_CFB, + .blocksize = 8, + .keysize = 32, + .type = CIPHER_STREAM, + .implicit_iv = 8, + .cipher_iv = 8}, + + { .name = "AES-128-CFB8", + .id = GNUTLS_CIPHER_AES_128_CFB8, + .blocksize = 16, + .keysize = 16, + .type = CIPHER_BLOCK, + .explicit_iv = 16, + .cipher_iv = 16}, + { .name = "AES-192-CFB8", + .id = GNUTLS_CIPHER_AES_192_CFB8, + .blocksize = 16, + .keysize = 24, + .type = CIPHER_BLOCK, + .explicit_iv = 16, + .cipher_iv = 16}, + { .name = "AES-256-CFB8", + .id = GNUTLS_CIPHER_AES_256_CFB8, + .blocksize = 16, + .keysize = 32, + .type = CIPHER_BLOCK, + .explicit_iv = 16, + .cipher_iv = 16}, + { .name = "AES-128-XTS", + .id = GNUTLS_CIPHER_AES_128_XTS, + .blocksize = 16, + .keysize = 32, + .type = CIPHER_BLOCK, + .explicit_iv = 16, + .cipher_iv = 16}, + { .name = "AES-256-XTS", + .id = GNUTLS_CIPHER_AES_256_XTS, + .blocksize = 16, + .keysize = 64, + .type = CIPHER_BLOCK, + .explicit_iv = 16, + .cipher_iv = 16}, + { .name = "AES-128-SIV", + .id = GNUTLS_CIPHER_AES_128_SIV, + .blocksize = 16, + .keysize = 32, + .type = CIPHER_AEAD, + .explicit_iv = 16, + .cipher_iv = 16, + .flags = GNUTLS_CIPHER_FLAG_ONLY_AEAD, + .tagsize = 16}, + { .name = "AES-256-SIV", + .id = GNUTLS_CIPHER_AES_256_SIV, + .blocksize = 16, + .keysize = 64, + .type = CIPHER_AEAD, + .explicit_iv = 16, + .cipher_iv = 16, + .flags = GNUTLS_CIPHER_FLAG_ONLY_AEAD, + .tagsize = 16}, + { .name = "GOST28147-TC26Z-CNT", + .id = GNUTLS_CIPHER_GOST28147_TC26Z_CNT, + .blocksize = 8, + .keysize = 32, + .type = CIPHER_STREAM, + .implicit_iv = 8, + .cipher_iv = 8}, + { .name = "3DES-CBC", .id = GNUTLS_CIPHER_3DES_CBC, .blocksize = 8, .keysize = 24, .type = CIPHER_BLOCK, .explicit_iv = 8, .cipher_iv = 8}, - { .name = "DES-CBC", + { .name = "DES-CBC", .id = GNUTLS_CIPHER_DES_CBC, .blocksize = 8, .keysize = 8, .type = CIPHER_BLOCK, .explicit_iv = 8, .cipher_iv = 8}, - { .name = "ARCFOUR-40", + { .name = "ARCFOUR-40", .id = GNUTLS_CIPHER_ARCFOUR_40, .blocksize = 1, - .keysize = 5, + .keysize = 5, .type = CIPHER_STREAM}, { .name = "RC2-40", .id = GNUTLS_CIPHER_RC2_40_CBC, @@ -220,7 +339,7 @@ static const cipher_entry_st algorithms[] = { /* CIPHER functions */ -const cipher_entry_st *cipher_to_entry(gnutls_cipher_algorithm_t c) +const cipher_entry_st *_gnutls_cipher_to_entry(gnutls_cipher_algorithm_t c) { GNUTLS_CIPHER_LOOP(if (c == p->id) return p); @@ -233,7 +352,7 @@ const cipher_entry_st *cipher_to_entry(gnutls_cipher_algorithm_t c) const cipher_entry_st *cipher_name_to_entry(const char *name) { GNUTLS_CIPHER_LOOP( - if (strcasecmp(p->name, name) == 0) { + if (c_strcasecmp(p->name, name) == 0) { return p; } ); @@ -277,7 +396,9 @@ unsigned gnutls_cipher_get_tag_size(gnutls_cipher_algorithm_t algorithm) * gnutls_cipher_get_iv_size: * @algorithm: is an encryption algorithm * - * Get block size for encryption algorithm. + * This function returns the size of the initialization vector (IV) for the + * provided algorithm. For algorithms with variable size IV (e.g., AES-CCM), + * the returned size will be the one used by TLS. * * Returns: block size for encryption algorithm. * @@ -290,27 +411,11 @@ unsigned gnutls_cipher_get_iv_size(gnutls_cipher_algorithm_t algorithm) return ret; } - - /* returns the priority */ -int -_gnutls_cipher_priority(gnutls_session_t session, - gnutls_cipher_algorithm_t algorithm) -{ - unsigned int i; - for (i = 0; i < session->internals.priorities.cipher.algorithms; - i++) { - if (session->internals.priorities.cipher.priority[i] == - algorithm) - return i; - } - return -1; -} - /** * gnutls_cipher_get_key_size: * @algorithm: is an encryption algorithm * - * Get key size for cipher. + * This function returns the key size of the provided algorithm. * * Returns: length (in bytes) of the given cipher's key size, or 0 if * the given cipher is invalid. @@ -356,9 +461,9 @@ gnutls_cipher_algorithm_t gnutls_cipher_get_id(const char *name) gnutls_cipher_algorithm_t ret = GNUTLS_CIPHER_UNKNOWN; GNUTLS_CIPHER_LOOP( - if (strcasecmp(p->name, name) == 0) { + if (c_strcasecmp(p->name, name) == 0) { if (p->id == GNUTLS_CIPHER_NULL || _gnutls_cipher_exists(p->id)) - ret = p->id; + ret = p->id; break; } ); diff --git a/lib/algorithms/ciphersuites.c b/lib/algorithms/ciphersuites.c index 5d0ed6d5f1..2c76f84d6d 100644 --- a/lib/algorithms/ciphersuites.c +++ b/lib/algorithms/ciphersuites.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -29,6 +30,7 @@ #include #include #include +#include #ifndef ENABLE_SSL3 # define GNUTLS_SSL3 GNUTLS_TLS1 @@ -36,9 +38,18 @@ /* Cipher SUITES */ #define ENTRY( name, block_algorithm, kx_algorithm, mac_algorithm, min_version, dtls_version ) \ - { #name, name, block_algorithm, kx_algorithm, mac_algorithm, min_version, dtls_version, GNUTLS_MAC_SHA256} + { #name, name, block_algorithm, kx_algorithm, mac_algorithm, min_version, GNUTLS_TLS1_2, dtls_version, GNUTLS_DTLS1_2, GNUTLS_MAC_SHA256} #define ENTRY_PRF( name, block_algorithm, kx_algorithm, mac_algorithm, min_version, dtls_version, prf ) \ - { #name, name, block_algorithm, kx_algorithm, mac_algorithm, min_version, dtls_version, prf} + { #name, name, block_algorithm, kx_algorithm, mac_algorithm, min_version, GNUTLS_TLS1_2, dtls_version, GNUTLS_DTLS1_2, prf} +#define ENTRY_TLS13( name, block_algorithm, min_version, prf ) \ + { #name, name, block_algorithm, 0, GNUTLS_MAC_AEAD, min_version, GNUTLS_TLS1_3, GNUTLS_VERSION_UNKNOWN, GNUTLS_VERSION_UNKNOWN, prf} + +/* TLS 1.3 ciphersuites */ +#define GNUTLS_AES_128_GCM_SHA256 { 0x13, 0x01 } +#define GNUTLS_AES_256_GCM_SHA384 { 0x13, 0x02 } +#define GNUTLS_CHACHA20_POLY1305_SHA256 { 0x13, 0x03 } +#define GNUTLS_AES_128_CCM_SHA256 { 0x13, 0x04 } +#define GNUTLS_AES_128_CCM_8_SHA256 { 0x13,0x05 } /* RSA with NULL cipher and MD5 MAC * for test purposes. @@ -323,12 +334,43 @@ #define GNUTLS_ECDHE_PSK_NULL_SHA256 { 0xC0, 0x3A } #define GNUTLS_ECDHE_PSK_NULL_SHA384 { 0xC0, 0x3B } +/* draft-smyshlyaev-tls12-gost-suites */ +#ifdef ENABLE_GOST +#define GNUTLS_GOSTR341112_256_28147_CNT_IMIT { 0xc1, 0x02 } +#endif + #define CIPHER_SUITES_COUNT (sizeof(cs_algorithms)/sizeof(gnutls_cipher_suite_entry_st)-1) /* The following is a potential list of ciphersuites. For the options to be * available, the ciphers and MACs must be available to gnutls as well. */ static const gnutls_cipher_suite_entry_st cs_algorithms[] = { +/* TLS 1.3 */ + ENTRY_TLS13(GNUTLS_AES_128_GCM_SHA256, + GNUTLS_CIPHER_AES_128_GCM, + GNUTLS_TLS1_3, + GNUTLS_MAC_SHA256), + + ENTRY_TLS13(GNUTLS_AES_256_GCM_SHA384, + GNUTLS_CIPHER_AES_256_GCM, + GNUTLS_TLS1_3, + GNUTLS_MAC_SHA384), + + ENTRY_TLS13(GNUTLS_CHACHA20_POLY1305_SHA256, + GNUTLS_CIPHER_CHACHA20_POLY1305, + GNUTLS_TLS1_3, + GNUTLS_MAC_SHA256), + + ENTRY_TLS13(GNUTLS_AES_128_CCM_SHA256, + GNUTLS_CIPHER_AES_128_CCM, + GNUTLS_TLS1_3, + GNUTLS_MAC_SHA256), + + ENTRY_TLS13(GNUTLS_AES_128_CCM_8_SHA256, + GNUTLS_CIPHER_AES_128_CCM_8, + GNUTLS_TLS1_3, + GNUTLS_MAC_SHA256), + /* RSA-NULL */ ENTRY(GNUTLS_RSA_NULL_MD5, GNUTLS_CIPHER_NULL, @@ -389,6 +431,8 @@ static const gnutls_cipher_suite_entry_st cs_algorithms[] = { GNUTLS_CIPHER_AES_256_CBC, GNUTLS_KX_RSA, GNUTLS_MAC_SHA256, GNUTLS_TLS1_2, GNUTLS_DTLS1_2), + + /* GCM */ ENTRY(GNUTLS_RSA_AES_128_GCM_SHA256, GNUTLS_CIPHER_AES_128_GCM, GNUTLS_KX_RSA, @@ -1134,6 +1178,12 @@ static const gnutls_cipher_suite_entry_st cs_algorithms[] = { GNUTLS_DTLS_VERSION_MIN), #endif +#ifdef ENABLE_GOST + ENTRY_PRF(GNUTLS_GOSTR341112_256_28147_CNT_IMIT, + GNUTLS_CIPHER_GOST28147_TC26Z_CNT, GNUTLS_KX_VKO_GOST_12, + GNUTLS_MAC_GOST28147_TC26Z_IMIT, GNUTLS_TLS1_2, + GNUTLS_VERSION_UNKNOWN, GNUTLS_MAC_STREEBOG_256), +#endif {0, {0, 0}, 0, 0, 0, 0, 0, 0} }; @@ -1153,42 +1203,16 @@ const gnutls_cipher_suite_entry_st *ciphersuite_to_entry(const uint8_t suite[2]) return NULL; } -const cipher_entry_st *_gnutls_cipher_suite_get_cipher_algo(const uint8_t - suite[2]) -{ - int ret = 0; - CIPHER_SUITE_ALG_LOOP(ret = p->block_algorithm, suite); - return cipher_to_entry(ret); -} - gnutls_kx_algorithm_t _gnutls_cipher_suite_get_kx_algo(const uint8_t suite[2]) { - int ret = 0; + gnutls_kx_algorithm_t ret = GNUTLS_KX_UNKNOWN; CIPHER_SUITE_ALG_LOOP(ret = p->kx_algorithm, suite); return ret; } -gnutls_mac_algorithm_t _gnutls_cipher_suite_get_prf(const uint8_t suite[2]) -{ - int ret = 0; - - CIPHER_SUITE_ALG_LOOP(ret = p->prf, suite); - return ret; - -} - -const mac_entry_st *_gnutls_cipher_suite_get_mac_algo(const uint8_t - suite[2]) -{ /* In bytes */ - int ret = 0; - CIPHER_SUITE_ALG_LOOP(ret = p->mac_algorithm, suite); - return mac_to_entry(ret); - -} - const char *_gnutls_cipher_suite_get_name(const uint8_t suite[2]) { const char *ret = NULL; @@ -1200,7 +1224,7 @@ const char *_gnutls_cipher_suite_get_name(const uint8_t suite[2]) } -static const gnutls_cipher_suite_entry_st +const gnutls_cipher_suite_entry_st *cipher_suite_get(gnutls_kx_algorithm_t kx_algorithm, gnutls_cipher_algorithm_t cipher_algorithm, gnutls_mac_algorithm_t mac_algorithm) @@ -1211,7 +1235,7 @@ static const gnutls_cipher_suite_entry_st if (kx_algorithm == p->kx_algorithm && cipher_algorithm == p->block_algorithm && mac_algorithm == p->mac_algorithm) { - ret = p; + ret = p; break; } ); @@ -1219,60 +1243,46 @@ static const gnutls_cipher_suite_entry_st return ret; } -/* Returns 1 if the given KX has not the corresponding parameters - * (DH or RSA) set up. Otherwise returns 0. +/* Returns 0 if the given KX has not the corresponding parameters + * (DH or RSA) set up. Otherwise returns 1. */ -inline static int -check_server_params(gnutls_session_t session, - gnutls_kx_algorithm_t kx, - gnutls_kx_algorithm_t * alg, int alg_size) +static unsigned +check_server_dh_params(gnutls_session_t session, + unsigned cred_type, + gnutls_kx_algorithm_t kx) { - int cred_type; - gnutls_dh_params_t dh_params = NULL; - int j; + unsigned have_dh_params = 0; + + if (!_gnutls_kx_needs_dh_params(kx)) { + return 1; + } - cred_type = _gnutls_map_kx_get_cred(kx, 1); + if (session->internals.hsk_flags & HSK_HAVE_FFDHE) { + /* if the client has advertized FFDHE then it doesn't matter + * whether we have server DH parameters. They are no good. */ + gnutls_assert(); + return 0; + } /* Read the Diffie-Hellman parameters, if any. */ if (cred_type == GNUTLS_CRD_CERTIFICATE) { - int delete; gnutls_certificate_credentials_t x509_cred = (gnutls_certificate_credentials_t) _gnutls_get_cred(session, cred_type); - if (x509_cred != NULL) { - dh_params = - _gnutls_get_dh_params(x509_cred->dh_params, - x509_cred->params_func, - session); - } - - /* Check also if the certificate supports the - * KX method. - */ - delete = 1; - for (j = 0; j < alg_size; j++) { - if (alg[j] == kx) { - delete = 0; - break; - } + if (x509_cred != NULL && (x509_cred->dh_params || x509_cred->params_func || x509_cred->dh_sec_param)) { + have_dh_params = 1; } - if (delete == 1) - return 1; - #ifdef ENABLE_ANON } else if (cred_type == GNUTLS_CRD_ANON) { gnutls_anon_server_credentials_t anon_cred = (gnutls_anon_server_credentials_t) _gnutls_get_cred(session, cred_type); - if (anon_cred != NULL) { - dh_params = - _gnutls_get_dh_params(anon_cred->dh_params, - anon_cred->params_func, - session); + if (anon_cred != NULL && (anon_cred->dh_params || anon_cred->params_func || anon_cred->dh_sec_param)) { + have_dh_params = 1; } #endif #ifdef ENABLE_PSK @@ -1281,167 +1291,29 @@ check_server_params(gnutls_session_t session, (gnutls_psk_server_credentials_t) _gnutls_get_cred(session, cred_type); - if (psk_cred != NULL) { - dh_params = - _gnutls_get_dh_params(psk_cred->dh_params, - psk_cred->params_func, - session); + if (psk_cred != NULL && (psk_cred->dh_params || psk_cred->params_func || psk_cred->dh_sec_param)) { + have_dh_params = 1; } #endif - } else - return 0; /* no need for params */ - - /* If the key exchange method needs DH params, - * but they are not set then remove it. - */ - if (_gnutls_kx_needs_dh_params(kx) != 0) { - /* needs DH params. */ - if (_gnutls_dh_params_to_mpi(dh_params) == NULL) { - gnutls_assert(); - return 1; - } + } else { + return 1; /* no need for params */ } - return 0; + return have_dh_params; } -/* This function will remove algorithms that are not supported by - * the requested authentication method. We remove an algorithm if - * we have a certificate with keyUsage bits set. - * - * This does a more elaborate check than gnutls_supported_ciphersuites(), - * by checking certificates etc. - */ -int -_gnutls_remove_unwanted_ciphersuites(gnutls_session_t session, - uint8_t * cipher_suites, - int cipher_suites_size, - gnutls_pk_algorithm_t * pk_algos, - size_t pk_algos_size) -{ - - int ret = 0; - gnutls_certificate_credentials_t cert_cred; - gnutls_kx_algorithm_t kx; - int server = - session->security_parameters.entity == GNUTLS_SERVER ? 1 : 0; - gnutls_kx_algorithm_t alg[MAX_ALGOS]; - int alg_size = MAX_ALGOS; - uint8_t new_list[cipher_suites_size]; /* it's safe to use that size because it's provided by _gnutls_supported_ciphersuites() */ - int i, new_list_size = 0; - const gnutls_cipher_suite_entry_st *entry; - const uint8_t *cp; - - /* if we should use a specific certificate, - * we should remove all algorithms that are not supported - * by that certificate and are on the same authentication - * method (CERTIFICATE). - */ - cert_cred = - (gnutls_certificate_credentials_t) _gnutls_get_cred(session, - GNUTLS_CRD_CERTIFICATE); - - /* If there are certificate credentials, find an appropriate certificate - * or disable them; - */ - if (session->security_parameters.entity == GNUTLS_SERVER - && cert_cred != NULL && pk_algos_size > 0) { - ret = - _gnutls_server_select_cert(session, pk_algos, - pk_algos_size); - if (ret < 0) { - gnutls_assert(); - _gnutls_debug_log - ("Could not find an appropriate certificate: %s\n", - gnutls_strerror(ret)); - } - } - - /* get all the key exchange algorithms that are - * supported by the X509 certificate parameters. - */ - if ((ret = - _gnutls_selected_cert_supported_kx(session, alg, - &alg_size)) < 0) { - gnutls_assert(); - return ret; - } - - /* now remove ciphersuites based on the KX algorithm - */ - for (i = 0; i < cipher_suites_size; i += 2) { - entry = NULL; - cp = &cipher_suites[i]; - - CIPHER_SUITE_ALG_LOOP(entry = p, cp); - - if (entry == NULL) - continue; - - /* finds the key exchange algorithm in - * the ciphersuite - */ - kx = entry->kx_algorithm; - - /* if it is defined but had no credentials - */ - if (!session->internals.premaster_set && - _gnutls_get_kx_cred(session, kx) == NULL) { - continue; - } else { - if (server && check_server_params(session, kx, alg, - alg_size) != 0) - continue; - } - - /* If we have not agreed to a common curve with the peer don't bother - * negotiating ECDH. - */ - if (server != 0 && _gnutls_kx_is_ecc(kx)) { - if (_gnutls_session_ecc_curve_get(session) == - GNUTLS_ECC_CURVE_INVALID) { - continue; - } - } - - /* These two SRP kx's are marked to require a CRD_CERTIFICATE, - (see cred_mappings in gnutls_algorithms.c), but it also - requires a SRP credential. Don't use SRP kx unless we have a - SRP credential too. */ - if (kx == GNUTLS_KX_SRP_RSA || kx == GNUTLS_KX_SRP_DSS) { - if (!_gnutls_get_cred - (session, GNUTLS_CRD_SRP)) { - continue; - } - } - - _gnutls_handshake_log - ("HSK[%p]: Keeping ciphersuite: %s (%.2X.%.2X)\n", - session, entry->name, - cipher_suites[i], cipher_suites[i + 1]); - - memcpy(&new_list[new_list_size], &cipher_suites[i], 2); - new_list_size += 2; - } - - if (new_list_size == 0) { - return gnutls_assert_val(GNUTLS_E_NO_CIPHER_SUITES); - } - - memcpy(cipher_suites, new_list, new_list_size); - - return new_list_size; -} - - /** * gnutls_cipher_suite_get_name: * @kx_algorithm: is a Key exchange algorithm * @cipher_algorithm: is a cipher algorithm * @mac_algorithm: is a MAC algorithm * - * Note that the full cipher suite name must be prepended by TLS or - * SSL depending of the protocol in use. + * This function returns the ciphersuite name under TLS1.2 or earlier + * versions when provided with individual algorithms. The full cipher suite + * name must be prepended by TLS or SSL depending of the protocol in use. + * + * To get a description of the current ciphersuite across versions, it + * is recommended to use gnutls_session_get_desc(). * * Returns: a string that contains the name of a TLS cipher suite, * specified by the given algorithms, or %NULL. @@ -1470,7 +1342,8 @@ const char *gnutls_cipher_suite_get_name(gnutls_kx_algorithm_t * @mac_algorithm: is a MAC algorithm * @suite: The id to be returned * - * It fills @suite with the ID of the ciphersuite of the provided parameters. + * This function returns the ciphersuite ID in @suite, under TLS1.2 or earlier + * versions when provided with individual algorithms. * * Returns: 0 on success or a negative error code otherwise. -*/ @@ -1535,109 +1408,283 @@ const char *gnutls_cipher_suite_info(size_t idx, return cs_algorithms[idx].name + sizeof("GNU") - 1; } +#define VERSION_CHECK(entry) \ + if (is_dtls) { \ + if (entry->min_dtls_version == GNUTLS_VERSION_UNKNOWN || \ + version->id < entry->min_dtls_version || \ + version->id > entry->max_dtls_version) \ + continue; \ + } else { \ + if (entry->min_version == GNUTLS_VERSION_UNKNOWN || \ + version->id < entry->min_version || \ + version->id > entry->max_version) \ + continue; \ + } -static inline int _gnutls_cipher_suite_is_ok(const uint8_t suite[2]) -{ - size_t ret; - const char *name = NULL; +#define CIPHER_CHECK(algo) \ + if (session->internals.priorities->force_etm && !have_etm) { \ + const cipher_entry_st *_cipher; \ + _cipher = cipher_to_entry(algo); \ + if (_cipher == NULL || _gnutls_cipher_type(_cipher) == CIPHER_BLOCK) \ + continue; \ + } - CIPHER_SUITE_ALG_LOOP(name = p->name, suite); - if (name != NULL) - ret = 0; - else - ret = 1; - return ret; +#define KX_SRP_CHECKS(kx, action) \ + if (kx == GNUTLS_KX_SRP_RSA || kx == GNUTLS_KX_SRP_DSS) { \ + if (!_gnutls_get_cred(session, GNUTLS_CRD_SRP)) { \ + action; \ + } \ + } + +static unsigned kx_is_ok(gnutls_session_t session, gnutls_kx_algorithm_t kx, unsigned cred_type, + const gnutls_group_entry_st **sgroup) +{ + if (_gnutls_kx_is_ecc(kx)) { + if (session->internals.cand_ec_group == NULL) { + return 0; + } else { + *sgroup = session->internals.cand_ec_group; + } + } else if (_gnutls_kx_is_dhe(kx)) { + if (session->internals.cand_dh_group == NULL) { + if (!check_server_dh_params(session, cred_type, kx)) { + return 0; + } + } else { + *sgroup = session->internals.cand_dh_group; + } + } + KX_SRP_CHECKS(kx, return 0); + return 1; } -/*- - * _gnutls_supported_ciphersuites: - * @session: a TLS session - * @cipher_suites: Where the ciphersuites will be stored (2bytes each) - * @max_cipher_suite_size: the maximum size of the @cipher_suites buffer. - * - * Returns the supported ciphersuites by this session (based on priorities) - * sorted by order of preference. - * - * Returns the size of the @cipher_suites buffer, or a negative value on error. - * - -*/ +/* Called on server-side only */ int -_gnutls_supported_ciphersuites(gnutls_session_t session, - uint8_t * cipher_suites, - unsigned int max_cipher_suite_size) +_gnutls_figure_common_ciphersuite(gnutls_session_t session, + const ciphersuite_list_st *peer_clist, + const gnutls_cipher_suite_entry_st **ce) { - unsigned int i, ret_count, j, z, k = 0; - const gnutls_cipher_suite_entry_st *ce; + unsigned int i, j; + int ret; const version_entry_st *version = get_version(session); unsigned int is_dtls = IS_DTLS(session); + gnutls_kx_algorithm_t kx; + gnutls_credentials_type_t cred_type = GNUTLS_CRD_CERTIFICATE; /* default for TLS1.3 */ + const gnutls_group_entry_st *sgroup = NULL; + gnutls_ext_priv_data_t epriv; + unsigned have_etm = 0; - if (version == NULL) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - - for (i = 0; i < session->internals.priorities.kx.algorithms; i++) - for (j = 0; - j < session->internals.priorities.cipher.algorithms; - j++) - for (z = 0; - z < - session->internals.priorities.mac.algorithms; - z++) { - ce = cipher_suite_get(session->internals. - priorities.kx. - priority[i], - session->internals. - priorities.cipher. - priority[j], - session->internals. - priorities.mac. - priority[z]); - - if (ce == NULL) - continue; - - if (is_dtls) { - if (version->id < ce->min_dtls_version) - continue; - } else { - if (version->id < ce->min_version) + if (version == NULL) { + return gnutls_assert_val(GNUTLS_E_NO_CIPHER_SUITES); + } + + /* we figure whether etm is negotiated by checking the raw extension data + * because we only set (security_params) EtM to true only after the ciphersuite is + * negotiated. */ + ret = _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_ETM, &epriv); + if (ret >= 0 && ((intptr_t)epriv) != 0) + have_etm = 1; + + /* If we didn't receive the supported_groups extension, then + * we should assume that SECP256R1 is supported; that is required + * by RFC4492, probably to allow SSLv2 hellos negotiate elliptic curve + * ciphersuites */ + if (!version->tls13_sem && session->internals.cand_ec_group == NULL && + !_gnutls_hello_ext_is_present(session, GNUTLS_EXTENSION_SUPPORTED_GROUPS)) { + session->internals.cand_ec_group = _gnutls_id_to_group(DEFAULT_EC_GROUP); + } + + if (session->internals.priorities->server_precedence == 0) { + for (i = 0; i < peer_clist->size; i++) { + _gnutls_debug_log("checking %.2x.%.2x (%s) for compatibility\n", + (unsigned)peer_clist->entry[i]->id[0], + (unsigned)peer_clist->entry[i]->id[1], + peer_clist->entry[i]->name); + VERSION_CHECK(peer_clist->entry[i]); + + kx = peer_clist->entry[i]->kx_algorithm; + + CIPHER_CHECK(peer_clist->entry[i]->block_algorithm); + + if (!version->tls13_sem) + cred_type = _gnutls_map_kx_get_cred(kx, 1); + + for (j = 0; j < session->internals.priorities->cs.size; j++) { + if (session->internals.priorities->cs.entry[j] == peer_clist->entry[i]) { + sgroup = NULL; + if (!kx_is_ok(session, kx, cred_type, &sgroup)) continue; + + /* if we have selected PSK, we need a ciphersuites which matches + * the selected binder */ + if (session->internals.hsk_flags & HSK_PSK_SELECTED) { + if (session->key.binders[0].prf->id != session->internals.priorities->cs.entry[j]->prf) + continue; + } else if (cred_type == GNUTLS_CRD_CERTIFICATE) { + ret = _gnutls_select_server_cert(session, peer_clist->entry[i]); + if (ret < 0) { + /* couldn't select cert with this ciphersuite */ + gnutls_assert(); + break; + } + } + + /* select the group based on the selected ciphersuite */ + if (sgroup) + _gnutls_session_group_set(session, sgroup); + *ce = peer_clist->entry[i]; + return 0; } + } + } + } else { + for (j = 0; j < session->internals.priorities->cs.size; j++) { + VERSION_CHECK(session->internals.priorities->cs.entry[j]); + + CIPHER_CHECK(session->internals.priorities->cs.entry[j]->block_algorithm); + + for (i = 0; i < peer_clist->size; i++) { + _gnutls_debug_log("checking %.2x.%.2x (%s) for compatibility\n", + (unsigned)peer_clist->entry[i]->id[0], + (unsigned)peer_clist->entry[i]->id[1], + peer_clist->entry[i]->name); + + if (session->internals.priorities->cs.entry[j] == peer_clist->entry[i]) { + sgroup = NULL; + kx = peer_clist->entry[i]->kx_algorithm; + + if (!version->tls13_sem) + cred_type = _gnutls_map_kx_get_cred(kx, 1); + + if (!kx_is_ok(session, kx, cred_type, &sgroup)) + break; + + /* if we have selected PSK, we need a ciphersuites which matches + * the selected binder */ + if (session->internals.hsk_flags & HSK_PSK_SELECTED) { + if (session->key.binders[0].prf->id != session->internals.priorities->cs.entry[j]->prf) + break; + } else if (cred_type == GNUTLS_CRD_CERTIFICATE) { + ret = _gnutls_select_server_cert(session, peer_clist->entry[i]); + if (ret < 0) { + /* couldn't select cert with this ciphersuite */ + gnutls_assert(); + break; + } + } + + /* select the group based on the selected ciphersuite */ + if (sgroup) + _gnutls_session_group_set(session, sgroup); + *ce = peer_clist->entry[i]; + return 0; + } + } + } + + } + + /* nothing in common */ - if (k + 2 > max_cipher_suite_size) - return - gnutls_assert_val - (GNUTLS_E_INTERNAL_ERROR); + return gnutls_assert_val(GNUTLS_E_NO_CIPHER_SUITES); +} - memcpy(&cipher_suites[k], ce->id, 2); - k += 2; +#define CLIENT_VERSION_CHECK(minver, maxver, e) \ + if (is_dtls) { \ + if (e->min_dtls_version > maxver->id) \ + continue; \ + } else { \ + if (e->min_version > maxver->id) \ + continue; \ } - ret_count = k; +#define RESERVED_CIPHERSUITES 4 +int +_gnutls_get_client_ciphersuites(gnutls_session_t session, + gnutls_buffer_st * cdata, + const version_entry_st *vmin, + unsigned add_scsv) +{ + + unsigned int j; + int ret; + unsigned int is_dtls = IS_DTLS(session); + gnutls_kx_algorithm_t kx; + gnutls_credentials_type_t cred_type; + uint8_t cipher_suites[MAX_CIPHERSUITE_SIZE*2 + RESERVED_CIPHERSUITES]; + unsigned cipher_suites_size = 0; + size_t init_length = cdata->length; + const version_entry_st *vmax; - /* This function can no longer return 0 cipher suites. - * It returns an error code instead. - */ - if (ret_count == 0) { - gnutls_assert(); - return GNUTLS_E_NO_CIPHER_SUITES; + vmax = _gnutls_version_max(session); + if (vmax == NULL) + return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET); + + for (j = 0; j < session->internals.priorities->cs.size; j++) { + CLIENT_VERSION_CHECK(vmin, vmax, session->internals.priorities->cs.entry[j]); + + kx = session->internals.priorities->cs.entry[j]->kx_algorithm; + if (kx != GNUTLS_KX_UNKNOWN) { /* In TLS 1.3 ciphersuites don't map to credentials */ + cred_type = _gnutls_map_kx_get_cred(kx, 0); + + if (!session->internals.premaster_set && _gnutls_get_cred(session, cred_type) == NULL) + continue; + + KX_SRP_CHECKS(kx, continue); + } + + _gnutls_debug_log("Keeping ciphersuite %.2x.%.2x (%s)\n", + (unsigned)session->internals.priorities->cs.entry[j]->id[0], + (unsigned)session->internals.priorities->cs.entry[j]->id[1], + session->internals.priorities->cs.entry[j]->name); + cipher_suites[cipher_suites_size] = session->internals.priorities->cs.entry[j]->id[0]; + cipher_suites[cipher_suites_size + 1] = session->internals.priorities->cs.entry[j]->id[1]; + cipher_suites_size += 2; + + if (cipher_suites_size >= MAX_CIPHERSUITE_SIZE*2) + break; } - return ret_count; +#ifdef ENABLE_SSL3 + if (add_scsv) { + cipher_suites[cipher_suites_size] = 0x00; + cipher_suites[cipher_suites_size + 1] = 0xff; + cipher_suites_size += 2; + + ret = _gnutls_ext_sr_send_cs(session); + if (ret < 0) + return gnutls_assert_val(ret); + + _gnutls_hello_ext_save_sr(session); + } +#endif + + if (session->internals.priorities->fallback) { + cipher_suites[cipher_suites_size] = GNUTLS_FALLBACK_SCSV_MAJOR; + cipher_suites[cipher_suites_size + 1] = GNUTLS_FALLBACK_SCSV_MINOR; + cipher_suites_size += 2; + } + + ret = _gnutls_buffer_append_data_prefix(cdata, 16, cipher_suites, cipher_suites_size); + if (ret < 0) + return gnutls_assert_val(ret); + + return cdata->length - init_length; } /** - * gnutls_priority_get_cipher_suite: + * gnutls_priority_get_cipher_suite_index: * @pcache: is a #gnutls_prioritity_t type. * @idx: is an index number. * @sidx: internal index of cipher suite to get information about. * * Provides the internal ciphersuite index to be used with - * gnutls_cipher_suite_info(). The index @idx provided is an + * gnutls_cipher_suite_info(). The index @idx provided is an * index kept at the priorities structure. It might be that a valid - * priorities index does not correspond to a ciphersuite and in - * that case %GNUTLS_E_UNKNOWN_CIPHER_SUITE will be returned. - * Once the last available index is crossed then + * priorities index does not correspond to a ciphersuite and in + * that case %GNUTLS_E_UNKNOWN_CIPHER_SUITE will be returned. + * Once the last available index is crossed then * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE will be returned. * * Returns: On success it returns %GNUTLS_E_SUCCESS (0), or a negative error value otherwise. @@ -1649,56 +1696,39 @@ gnutls_priority_get_cipher_suite_index(gnutls_priority_t pcache, unsigned int idx, unsigned int *sidx) { - int mac_idx, cipher_idx, kx_idx; unsigned int i, j; - unsigned int total = - pcache->mac.algorithms * pcache->cipher.algorithms * - pcache->kx.algorithms; unsigned max_tls = 0; unsigned max_dtls = 0; - if (idx >= total) + if (idx >= pcache->cs.size) return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; - mac_idx = idx % pcache->mac.algorithms; - - idx /= pcache->mac.algorithms; - cipher_idx = idx % pcache->cipher.algorithms; - - idx /= pcache->cipher.algorithms; - kx_idx = idx % pcache->kx.algorithms; - /* find max_tls and max_dtls */ - for (j=0;jprotocol.algorithms;j++) { - if (pcache->protocol.priority[j] <= GNUTLS_TLS_VERSION_MAX && - pcache->protocol.priority[j] >= max_tls) { - max_tls = pcache->protocol.priority[j]; - } else if (pcache->protocol.priority[j] <= GNUTLS_DTLS_VERSION_MAX && - pcache->protocol.priority[j] >= max_dtls) { - max_dtls = pcache->protocol.priority[j]; + for (j=0;jprotocol.num_priorities;j++) { + if (pcache->protocol.priorities[j] <= GNUTLS_TLS_VERSION_MAX && + pcache->protocol.priorities[j] >= max_tls) { + max_tls = pcache->protocol.priorities[j]; + } else if (pcache->protocol.priorities[j] <= GNUTLS_DTLS_VERSION_MAX && + pcache->protocol.priorities[j] >= max_dtls) { + max_dtls = pcache->protocol.priorities[j]; } } for (i = 0; i < CIPHER_SUITES_COUNT; i++) { - if (cs_algorithms[i].kx_algorithm == - pcache->kx.priority[kx_idx] - && cs_algorithms[i].block_algorithm == - pcache->cipher.priority[cipher_idx] - && cs_algorithms[i].mac_algorithm == - pcache->mac.priority[mac_idx]) { - *sidx = i; - - if (_gnutls_cipher_exists(cs_algorithms[i].block_algorithm) && - _gnutls_mac_exists(cs_algorithms[i].mac_algorithm)) { - - if (max_tls >= cs_algorithms[i].min_version) { - return 0; - } else if (max_dtls >= cs_algorithms[i].min_dtls_version) { - return 0; - } - } else - break; - } + if (pcache->cs.entry[idx] != &cs_algorithms[i]) + continue; + + *sidx = i; + if (_gnutls_cipher_exists(cs_algorithms[i].block_algorithm) && + _gnutls_mac_exists(cs_algorithms[i].mac_algorithm)) { + if (max_tls >= cs_algorithms[i].min_version) { + return 0; + } else if (max_dtls >= cs_algorithms[i].min_dtls_version) { + return 0; + } + } else + break; } + return GNUTLS_E_UNKNOWN_CIPHER_SUITE; } diff --git a/lib/algorithms/ecc.c b/lib/algorithms/ecc.c index 5274a815cb..14351b87ad 100644 --- a/lib/algorithms/ecc.c +++ b/lib/algorithms/ecc.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -25,58 +25,238 @@ #include "errors.h" #include #include +#include "c-strcase.h" /* Supported ECC curves */ -static const gnutls_ecc_curve_entry_st ecc_curves[] = { +static SYSTEM_CONFIG_OR_CONST +gnutls_ecc_curve_entry_st ecc_curves[] = { +#ifdef ENABLE_NON_SUITEB_CURVES { .name = "SECP192R1", .oid = "1.2.840.10045.3.1.1", .id = GNUTLS_ECC_CURVE_SECP192R1, - .tls_id = 19, + .group = GNUTLS_GROUP_SECP192R1, .pk = GNUTLS_PK_ECDSA, .size = 24, + .supported = 1, }, { .name = "SECP224R1", .oid = "1.3.132.0.33", .id = GNUTLS_ECC_CURVE_SECP224R1, - .tls_id = 21, + .group = GNUTLS_GROUP_SECP224R1, .pk = GNUTLS_PK_ECDSA, .size = 28, + .supported = 1, }, +#endif { .name = "SECP256R1", .oid = "1.2.840.10045.3.1.7", .id = GNUTLS_ECC_CURVE_SECP256R1, - .tls_id = 23, + .group = GNUTLS_GROUP_SECP256R1, .pk = GNUTLS_PK_ECDSA, .size = 32, + .supported = 1, }, { .name = "SECP384R1", .oid = "1.3.132.0.34", .id = GNUTLS_ECC_CURVE_SECP384R1, - .tls_id = 24, + .group = GNUTLS_GROUP_SECP384R1, .pk = GNUTLS_PK_ECDSA, .size = 48, + .supported = 1, }, { .name = "SECP521R1", .oid = "1.3.132.0.35", .id = GNUTLS_ECC_CURVE_SECP521R1, - .tls_id = 25, + .group = GNUTLS_GROUP_SECP521R1, .pk = GNUTLS_PK_ECDSA, .size = 66, + .supported = 1, }, { .name = "X25519", .id = GNUTLS_ECC_CURVE_X25519, - .tls_id = 29, - .pk = GNUTLS_PK_ECDHX, + .group = GNUTLS_GROUP_X25519, + .pk = GNUTLS_PK_ECDH_X25519, .size = 32, + .supported = 1, }, + { + .name = "Ed25519", + .oid = SIG_EDDSA_SHA512_OID, + .id = GNUTLS_ECC_CURVE_ED25519, + .pk = GNUTLS_PK_EDDSA_ED25519, + .size = 32, + .sig_size = 64, + .supported = 1, + }, + { + .name = "X448", + .id = GNUTLS_ECC_CURVE_X448, + .pk = GNUTLS_PK_ECDH_X448, + .size = 56, + .supported = 1, + }, + { + .name = "Ed448", + .oid = SIG_ED448_OID, + .id = GNUTLS_ECC_CURVE_ED448, + .pk = GNUTLS_PK_EDDSA_ED448, + .size = 57, + .sig_size = 114, + .supported = 1, + }, +#if ENABLE_GOST + /* Curves for usage in GOST digital signature algorithm (GOST R + * 34.10-2001/-2012) and key agreement (VKO GOST R 34.10-2001/-2012). + * + * Historically CryptoPro has defined three 256-bit curves for use with + * digital signature algorithm (CryptoPro-A, -B, -C). + * + * Also it has reissues two of them with different OIDs for key + * exchange (CryptoPro-XchA = CryptoPro-A and CryptoPro-XchB = + * CryptoPro-C). + * + * Then TC26 (Standard comitee working on cryptographic standards) has + * defined one 256-bit curve (TC26-256-A) and three 512-bit curves + * (TC26-512-A, -B, -C). + * + * And finally TC26 has reissues original CryptoPro curves under their + * own OID namespace (TC26-256-B = CryptoPro-A, TC26-256-C = + * CryptoPro-B and TC26-256-D = CryptoPro-C). + * + * CryptoPro OIDs are usable for both GOST R 34.10-2001 and + * GOST R 34.10-2012 keys (thus they have GNUTLS_PK_UNKNOWN in this + * table). + * TC26 OIDs are usable only for GOST R 34.10-2012 keys. + */ + { + .name = "CryptoPro-A", + .oid = "1.2.643.2.2.35.1", + .id = GNUTLS_ECC_CURVE_GOST256CPA, + .group = GNUTLS_GROUP_GC256B, + .pk = GNUTLS_PK_UNKNOWN, + .size = 32, + .gost_curve = 1, + .supported = 1, + }, + { + .name = "CryptoPro-B", + .oid = "1.2.643.2.2.35.2", + .id = GNUTLS_ECC_CURVE_GOST256CPB, + .group = GNUTLS_GROUP_GC256C, + .pk = GNUTLS_PK_UNKNOWN, + .size = 32, + .gost_curve = 1, + .supported = 1, + }, + { + .name = "CryptoPro-C", + .oid = "1.2.643.2.2.35.3", + .id = GNUTLS_ECC_CURVE_GOST256CPC, + .group = GNUTLS_GROUP_GC256D, + .pk = GNUTLS_PK_UNKNOWN, + .size = 32, + .gost_curve = 1, + .supported = 1, + }, + { + .name = "CryptoPro-XchA", + .oid = "1.2.643.2.2.36.0", + .id = GNUTLS_ECC_CURVE_GOST256CPXA, + .group = GNUTLS_GROUP_GC256B, + .pk = GNUTLS_PK_UNKNOWN, + .size = 32, + .gost_curve = 1, + .supported = 1, + }, + { + .name = "CryptoPro-XchB", + .oid = "1.2.643.2.2.36.1", + .id = GNUTLS_ECC_CURVE_GOST256CPXB, + .group = GNUTLS_GROUP_GC256D, + .pk = GNUTLS_PK_UNKNOWN, + .size = 32, + .gost_curve = 1, + .supported = 1, + }, + { + .name = "TC26-256-A", + .oid = "1.2.643.7.1.2.1.1.1", + .id = GNUTLS_ECC_CURVE_GOST256A, + .group = GNUTLS_GROUP_GC256A, + .pk = GNUTLS_PK_GOST_12_256, + .size = 32, + .gost_curve = 1, + .supported = 1, + }, + { + .name = "TC26-256-B", + .oid = "1.2.643.7.1.2.1.1.2", + .id = GNUTLS_ECC_CURVE_GOST256B, + .group = GNUTLS_GROUP_GC256B, + .pk = GNUTLS_PK_GOST_12_256, + .size = 32, + .gost_curve = 1, + .supported = 1, + }, + { + .name = "TC26-256-C", + .oid = "1.2.643.7.1.2.1.1.3", + .id = GNUTLS_ECC_CURVE_GOST256C, + .group = GNUTLS_GROUP_GC256C, + .pk = GNUTLS_PK_GOST_12_256, + .size = 32, + .gost_curve = 1, + .supported = 1, + }, + { + .name = "TC26-256-D", + .oid = "1.2.643.7.1.2.1.1.4", + .id = GNUTLS_ECC_CURVE_GOST256D, + .group = GNUTLS_GROUP_GC256D, + .pk = GNUTLS_PK_GOST_12_256, + .size = 32, + .gost_curve = 1, + .supported = 1, + }, + { + .name = "TC26-512-A", + .oid = "1.2.643.7.1.2.1.2.1", + .id = GNUTLS_ECC_CURVE_GOST512A, + .group = GNUTLS_GROUP_GC512A, + .pk = GNUTLS_PK_GOST_12_512, + .size = 64, + .gost_curve = 1, + .supported = 1, + }, + { + .name = "TC26-512-B", + .oid = "1.2.643.7.1.2.1.2.2", + .id = GNUTLS_ECC_CURVE_GOST512B, + .group = GNUTLS_GROUP_GC512B, + .pk = GNUTLS_PK_GOST_12_512, + .size = 64, + .gost_curve = 1, + .supported = 1, + }, + { + .name = "TC26-512-C", + .oid = "1.2.643.7.1.2.1.2.3", + .id = GNUTLS_ECC_CURVE_GOST512C, + .group = GNUTLS_GROUP_GC512C, + .pk = GNUTLS_PK_GOST_12_512, + .size = 64, + .gost_curve = 1, + .supported = 1, + }, +#endif {0, 0, 0} }; @@ -85,22 +265,6 @@ static const gnutls_ecc_curve_entry_st ecc_curves[] = { for(p = ecc_curves; p->name != NULL; p++) { b ; } } -/* Returns the TLS id of the given curve - */ -int _gnutls_tls_id_to_ecc_curve(int num) -{ - gnutls_ecc_curve_t ret = GNUTLS_ECC_CURVE_INVALID; - - GNUTLS_ECC_CURVE_LOOP( - if (p->tls_id == num && _gnutls_pk_curve_exists(p->id)) { - ret = p->id; - break; - } - ); - - return ret; -} - /** * gnutls_ecc_curve_list: * @@ -119,7 +283,7 @@ const gnutls_ecc_curve_t *gnutls_ecc_curve_list(void) int i = 0; GNUTLS_ECC_CURVE_LOOP( - if (_gnutls_pk_curve_exists(p->id)) + if (p->supported && _gnutls_pk_curve_exists(p->id)) supported_curves[i++] = p->id; ); supported_curves[i++] = 0; @@ -128,21 +292,13 @@ const gnutls_ecc_curve_t *gnutls_ecc_curve_list(void) return supported_curves; } -/* Maps numbers to TLS NamedCurve IDs (RFC4492). - * Returns a negative number on error. - */ -int _gnutls_ecc_curve_get_tls_id(gnutls_ecc_curve_t supported_ecc) +unsigned _gnutls_ecc_curve_is_supported(gnutls_ecc_curve_t curve) { - int ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; - GNUTLS_ECC_CURVE_LOOP( - if (p->id == supported_ecc) { - ret = p->tls_id; - break; - } + if (p->id == curve && p->supported && _gnutls_pk_curve_exists(p->id)) + return 1; ); - - return ret; + return 0; } /** @@ -159,7 +315,8 @@ gnutls_ecc_curve_t gnutls_oid_to_ecc_curve(const char *oid) gnutls_ecc_curve_t ret = GNUTLS_ECC_CURVE_INVALID; GNUTLS_ECC_CURVE_LOOP( - if (p->oid && strcasecmp(p->oid, oid) == 0 && _gnutls_pk_curve_exists(p->id)) { + if (p->oid != NULL && c_strcasecmp(p->oid, oid) == 0 && p->supported && + _gnutls_pk_curve_exists(p->id)) { ret = p->id; break; } @@ -184,7 +341,8 @@ gnutls_ecc_curve_t gnutls_ecc_curve_get_id(const char *name) gnutls_ecc_curve_t ret = GNUTLS_ECC_CURVE_INVALID; GNUTLS_ECC_CURVE_LOOP( - if (strcasecmp(p->name, name) == 0 && _gnutls_pk_curve_exists(p->id)) { + if (c_strcasecmp(p->name, name) == 0 && p->supported && + _gnutls_pk_curve_exists(p->id)) { ret = p->id; break; } @@ -193,6 +351,33 @@ gnutls_ecc_curve_t gnutls_ecc_curve_get_id(const char *name) return ret; } +int _gnutls_ecc_curve_mark_disabled(const char *name) +{ + gnutls_ecc_curve_entry_st *p; + + for(p = ecc_curves; p->name != NULL; p++) { + if (c_strcasecmp(p->name, name) == 0) { + p->supported = 0; + return 0; + } + } + + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); +} + +static int _gnutls_ecc_pk_compatible(const gnutls_ecc_curve_entry_st *p, + gnutls_pk_algorithm_t pk) +{ + if (!p->supported || !_gnutls_pk_curve_exists(p->id)) + return 0; + + if (pk == GNUTLS_PK_GOST_01 || + pk == GNUTLS_PK_GOST_12_256) + return p->gost_curve && p->size == 32; + + return pk == p->pk; +} + /*- * _gnutls_ecc_bits_to_curve: * @bits: is a security parameter in bits @@ -200,12 +385,22 @@ gnutls_ecc_curve_t gnutls_ecc_curve_get_id(const char *name) * Returns: return a #gnutls_ecc_curve_t value corresponding to * the specified bit length, or %GNUTLS_ECC_CURVE_INVALID on error. -*/ -gnutls_ecc_curve_t _gnutls_ecc_bits_to_curve(int bits) +gnutls_ecc_curve_t _gnutls_ecc_bits_to_curve(gnutls_pk_algorithm_t pk, int bits) { - gnutls_ecc_curve_t ret = GNUTLS_ECC_CURVE_SECP256R1; + gnutls_ecc_curve_t ret; + + if (pk == GNUTLS_PK_ECDSA) + ret = GNUTLS_ECC_CURVE_SECP256R1; + else if (pk == GNUTLS_PK_GOST_01 || + pk == GNUTLS_PK_GOST_12_256) + ret = GNUTLS_ECC_CURVE_GOST256CPA; + else if (pk == GNUTLS_PK_GOST_12_512) + ret = GNUTLS_ECC_CURVE_GOST512A; + else + ret = GNUTLS_ECC_CURVE_ED25519; GNUTLS_ECC_CURVE_LOOP( - if (8 * p->size >= bits && _gnutls_pk_curve_exists(p->id)) { + if (_gnutls_ecc_pk_compatible(p, pk) && 8 * p->size >= (unsigned)bits) { ret = p->id; break; } @@ -256,7 +451,7 @@ const char *gnutls_ecc_curve_get_oid(gnutls_ecc_curve_t curve) GNUTLS_ECC_CURVE_LOOP( if (p->id == curve) { - ret = p->oid; + ret = p->oid; break; } ); @@ -322,7 +517,7 @@ gnutls_pk_algorithm_t gnutls_ecc_curve_get_pk(gnutls_ecc_curve_t curve) int ret = GNUTLS_PK_UNKNOWN; GNUTLS_ECC_CURVE_LOOP( - if (p->id == curve) { + if (p->id == curve && p->supported) { ret = p->pk; break; } @@ -331,3 +526,24 @@ gnutls_pk_algorithm_t gnutls_ecc_curve_get_pk(gnutls_ecc_curve_t curve) return ret; } +/** + * _gnutls_ecc_curve_get_group: + * @curve: is an ECC curve + * + * Returns: the group associated with the named curve or %GNUTLS_GROUP_INVALID. + * + * Since: 3.6.11 + */ +gnutls_group_t _gnutls_ecc_curve_get_group(gnutls_ecc_curve_t curve) +{ + gnutls_group_t ret = GNUTLS_GROUP_INVALID; + + GNUTLS_ECC_CURVE_LOOP( + if (p->id == curve && p->supported && _gnutls_pk_curve_exists(p->id)) { + ret = p->group; + break; + } + ); + + return ret; +} diff --git a/lib/algorithms/groups.c b/lib/algorithms/groups.c new file mode 100644 index 0000000000..d4b77beb2a --- /dev/null +++ b/lib/algorithms/groups.c @@ -0,0 +1,299 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include +#include "errors.h" +#include +#include +#include "c-strcase.h" + +/* Supported ECC curves + */ + +static const gnutls_group_entry_st supported_groups[] = { + { + .name = "SECP192R1", + .id = GNUTLS_GROUP_SECP192R1, + .curve = GNUTLS_ECC_CURVE_SECP192R1, + .tls_id = 19, + .pk = GNUTLS_PK_ECDSA, + }, + { + .name = "SECP224R1", + .id = GNUTLS_GROUP_SECP224R1, + .curve = GNUTLS_ECC_CURVE_SECP224R1, + .tls_id = 21, + .pk = GNUTLS_PK_ECDSA, + }, + { + .name = "SECP256R1", + .id = GNUTLS_GROUP_SECP256R1, + .curve = GNUTLS_ECC_CURVE_SECP256R1, + .tls_id = 23, + .pk = GNUTLS_PK_ECDSA, + }, + { + .name = "SECP384R1", + .id = GNUTLS_GROUP_SECP384R1, + .curve = GNUTLS_ECC_CURVE_SECP384R1, + .tls_id = 24, + .pk = GNUTLS_PK_ECDSA, + }, + { + .name = "SECP521R1", + .id = GNUTLS_GROUP_SECP521R1, + .curve = GNUTLS_ECC_CURVE_SECP521R1, + .tls_id = 25, + .pk = GNUTLS_PK_ECDSA, + }, + { + .name = "X25519", + .id = GNUTLS_GROUP_X25519, + .curve = GNUTLS_ECC_CURVE_X25519, + .tls_id = 29, + .pk = GNUTLS_PK_ECDH_X25519 + }, +#ifdef ENABLE_GOST + /* draft-smyshlyaev-tls12-gost-suites-06, Section 6 */ + { + .name = "GC256A", + .id = GNUTLS_GROUP_GC256A, + .curve = GNUTLS_ECC_CURVE_GOST256A, + .pk = GNUTLS_PK_GOST_12_256, + .tls_id = 34, + }, + { + .name = "GC256B", + .id = GNUTLS_GROUP_GC256B, + .curve = GNUTLS_ECC_CURVE_GOST256B, + .pk = GNUTLS_PK_GOST_12_256, + .tls_id = 35, + }, + { + .name = "GC256C", + .id = GNUTLS_GROUP_GC256C, + .curve = GNUTLS_ECC_CURVE_GOST256C, + .pk = GNUTLS_PK_GOST_12_256, + .tls_id = 36, + }, + { + .name = "GC256D", + .id = GNUTLS_GROUP_GC256D, + .curve = GNUTLS_ECC_CURVE_GOST256D, + .pk = GNUTLS_PK_GOST_12_256, + .tls_id = 37, + }, + { + .name = "GC512A", + .id = GNUTLS_GROUP_GC512A, + .curve = GNUTLS_ECC_CURVE_GOST512A, + .pk = GNUTLS_PK_GOST_12_512, + .tls_id = 38, + }, + { + .name = "GC512B", + .id = GNUTLS_GROUP_GC512B, + .curve = GNUTLS_ECC_CURVE_GOST512B, + .pk = GNUTLS_PK_GOST_12_512, + .tls_id = 39, + }, + { + .name = "GC512C", + .id = GNUTLS_GROUP_GC512C, + .curve = GNUTLS_ECC_CURVE_GOST512C, + .pk = GNUTLS_PK_GOST_12_512, + .tls_id = 40, + }, +#endif + { + .name = "X448", + .id = GNUTLS_GROUP_X448, + .curve = GNUTLS_ECC_CURVE_X448, + .tls_id = 30, + .pk = GNUTLS_PK_ECDH_X448 + }, +#ifdef ENABLE_DHE + { + .name = "FFDHE2048", + .id = GNUTLS_GROUP_FFDHE2048, + .generator = &gnutls_ffdhe_2048_group_generator, + .prime = &gnutls_ffdhe_2048_group_prime, + .q = &gnutls_ffdhe_2048_group_q, + .q_bits = &gnutls_ffdhe_2048_key_bits, + .pk = GNUTLS_PK_DH, + .tls_id = 0x100 + }, + { + .name = "FFDHE3072", + .id = GNUTLS_GROUP_FFDHE3072, + .generator = &gnutls_ffdhe_3072_group_generator, + .prime = &gnutls_ffdhe_3072_group_prime, + .q = &gnutls_ffdhe_3072_group_q, + .q_bits = &gnutls_ffdhe_3072_key_bits, + .pk = GNUTLS_PK_DH, + .tls_id = 0x101 + }, + { + .name = "FFDHE4096", + .id = GNUTLS_GROUP_FFDHE4096, + .generator = &gnutls_ffdhe_4096_group_generator, + .prime = &gnutls_ffdhe_4096_group_prime, + .q = &gnutls_ffdhe_4096_group_q, + .q_bits = &gnutls_ffdhe_4096_key_bits, + .pk = GNUTLS_PK_DH, + .tls_id = 0x102 + }, + { + .name = "FFDHE6144", + .id = GNUTLS_GROUP_FFDHE6144, + .generator = &gnutls_ffdhe_6144_group_generator, + .prime = &gnutls_ffdhe_6144_group_prime, + .q = &gnutls_ffdhe_6144_group_q, + .q_bits = &gnutls_ffdhe_6144_key_bits, + .pk = GNUTLS_PK_DH, + .tls_id = 0x103 + }, + { + .name = "FFDHE8192", + .id = GNUTLS_GROUP_FFDHE8192, + .generator = &gnutls_ffdhe_8192_group_generator, + .prime = &gnutls_ffdhe_8192_group_prime, + .q = &gnutls_ffdhe_8192_group_q, + .q_bits = &gnutls_ffdhe_8192_key_bits, + .pk = GNUTLS_PK_DH, + .tls_id = 0x104 + }, +#endif + {0, 0, 0} +}; + +#define GNUTLS_GROUP_LOOP(b) \ + { const gnutls_group_entry_st *p; \ + for(p = supported_groups; p->name != NULL; p++) { b ; } } + + +/* Returns the TLS id of the given curve + */ +const gnutls_group_entry_st * _gnutls_tls_id_to_group(unsigned num) +{ + GNUTLS_GROUP_LOOP( + if (p->tls_id == num && + (p->curve == 0 || _gnutls_ecc_curve_is_supported(p->curve))) { + return p; + } + ); + + return NULL; +} + +const gnutls_group_entry_st * _gnutls_id_to_group(unsigned id) +{ + if (id == 0) + return NULL; + + GNUTLS_GROUP_LOOP( + if (p->id == id && + (p->curve == 0 || _gnutls_ecc_curve_is_supported(p->curve))) { + return p; + } + ); + + return NULL; +} + +/** + * gnutls_group_list: + * + * Get the list of supported elliptic curves. + * + * This function is not thread safe. + * + * Returns: Return a (0)-terminated list of #gnutls_group_t + * integers indicating the available groups. + * + * Since: 3.6.0 + **/ +const gnutls_group_t *gnutls_group_list(void) +{ + static gnutls_group_t groups[MAX_ALGOS] = { 0 }; + + if (groups[0] == 0) { + int i = 0; + + GNUTLS_GROUP_LOOP( + if (p->curve == 0 || _gnutls_ecc_curve_is_supported(p->curve)) + groups[i++] = p->id; + ); + groups[i++] = 0; + } + + return groups; +} + +/** + * gnutls_group_get_id: + * @name: is a group name + * + * The names are compared in a case insensitive way. + * + * Returns: return a #gnutls_group_t value corresponding to + * the specified group, or %GNUTLS_GROUP_INVALID on error. + * + * Since: 3.6.0 + **/ +gnutls_group_t gnutls_group_get_id(const char *name) +{ + gnutls_group_t ret = GNUTLS_GROUP_INVALID; + + GNUTLS_GROUP_LOOP( + if (c_strcasecmp(p->name, name) == 0 && ( + p->curve == 0 ||_gnutls_ecc_curve_is_supported(p->curve))) { + ret = p->id; + break; + } + ); + + return ret; +} + +/** + * gnutls_group_get_name: + * @group: is an element from %gnutls_group_t + * + * Convert a #gnutls_group_t value to a string. + * + * Returns: a string that contains the name of the specified + * group or %NULL. + * + * Since: 3.6.0 + **/ +const char *gnutls_group_get_name(gnutls_group_t group) +{ + GNUTLS_GROUP_LOOP( + if (p->id == group) { + return p->name; + } + ); + + return NULL; +} diff --git a/lib/algorithms/kx.c b/lib/algorithms/kx.c index 2d5ad81bc5..2591ec193a 100644 --- a/lib/algorithms/kx.c +++ b/lib/algorithms/kx.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -24,7 +24,8 @@ #include #include "errors.h" #include - +#include "state.h" +#include "c-strcase.h" extern mod_auth_st rsa_auth_struct; extern mod_auth_st dhe_rsa_auth_struct; @@ -40,10 +41,11 @@ extern mod_auth_st dhe_psk_auth_struct; extern mod_auth_st rsa_psk_auth_struct; extern mod_auth_st srp_rsa_auth_struct; extern mod_auth_st srp_dss_auth_struct; +extern mod_auth_st vko_gost_auth_struct; -/* Cred type mappings to KX algorithms - * FIXME: The mappings are not 1-1. Some KX such as SRP_RSA require +/* Cred type mappings to KX algorithms + * The mappings are not 1-1. Some KX such as SRP_RSA require * more than one credentials type. */ typedef struct { @@ -54,24 +56,25 @@ typedef struct { } gnutls_cred_map; static const gnutls_cred_map cred_mappings[] = { - {GNUTLS_KX_ANON_DH, GNUTLS_CRD_ANON, GNUTLS_CRD_ANON}, - {GNUTLS_KX_ANON_ECDH, GNUTLS_CRD_ANON, GNUTLS_CRD_ANON}, - {GNUTLS_KX_RSA, GNUTLS_CRD_CERTIFICATE, GNUTLS_CRD_CERTIFICATE}, {GNUTLS_KX_ECDHE_RSA, GNUTLS_CRD_CERTIFICATE, GNUTLS_CRD_CERTIFICATE}, {GNUTLS_KX_ECDHE_ECDSA, GNUTLS_CRD_CERTIFICATE, GNUTLS_CRD_CERTIFICATE}, + {GNUTLS_KX_RSA, GNUTLS_CRD_CERTIFICATE, GNUTLS_CRD_CERTIFICATE}, {GNUTLS_KX_DHE_DSS, GNUTLS_CRD_CERTIFICATE, GNUTLS_CRD_CERTIFICATE}, {GNUTLS_KX_DHE_RSA, GNUTLS_CRD_CERTIFICATE, GNUTLS_CRD_CERTIFICATE}, + {GNUTLS_KX_ECDHE_PSK, GNUTLS_CRD_PSK, GNUTLS_CRD_PSK}, {GNUTLS_KX_PSK, GNUTLS_CRD_PSK, GNUTLS_CRD_PSK}, {GNUTLS_KX_DHE_PSK, GNUTLS_CRD_PSK, GNUTLS_CRD_PSK}, {GNUTLS_KX_RSA_PSK, GNUTLS_CRD_PSK, GNUTLS_CRD_CERTIFICATE}, - {GNUTLS_KX_ECDHE_PSK, GNUTLS_CRD_PSK, GNUTLS_CRD_PSK}, {GNUTLS_KX_SRP, GNUTLS_CRD_SRP, GNUTLS_CRD_SRP}, {GNUTLS_KX_SRP_RSA, GNUTLS_CRD_SRP, GNUTLS_CRD_CERTIFICATE}, {GNUTLS_KX_SRP_DSS, GNUTLS_CRD_SRP, GNUTLS_CRD_CERTIFICATE}, + {GNUTLS_KX_ANON_DH, GNUTLS_CRD_ANON, GNUTLS_CRD_ANON}, + {GNUTLS_KX_ANON_ECDH, GNUTLS_CRD_ANON, GNUTLS_CRD_ANON}, + {GNUTLS_KX_VKO_GOST_12, GNUTLS_CRD_CERTIFICATE, GNUTLS_CRD_CERTIFICATE}, {0, 0, 0} }; @@ -79,57 +82,56 @@ static const gnutls_cred_map cred_mappings[] = { const gnutls_cred_map *p; \ for(p = cred_mappings; p->algorithm != 0; p++) { b ; } -#define GNUTLS_KX_MAP_ALG_LOOP_SERVER(a) \ - GNUTLS_KX_MAP_LOOP( if(p->server_type == type) { a; break; }) - struct gnutls_kx_algo_entry { const char *name; gnutls_kx_algorithm_t algorithm; mod_auth_st *auth_struct; bool needs_dh_params; - gnutls_pk_algorithm_t cert_pk; /* the type of certificate required */ bool false_start; }; typedef struct gnutls_kx_algo_entry gnutls_kx_algo_entry; static const gnutls_kx_algo_entry _gnutls_kx_algorithms[] = { -#if defined(ENABLE_ANON) && defined(ENABLE_DHE) - {"ANON-DH", GNUTLS_KX_ANON_DH, &anon_auth_struct, 1, GNUTLS_PK_UNKNOWN, 0}, -#endif -#if defined(ENABLE_ANON) && defined(ENABLE_ECDHE) - {"ANON-ECDH", GNUTLS_KX_ANON_ECDH, &anon_ecdh_auth_struct, 0, GNUTLS_PK_UNKNOWN, 0}, -#endif - {"RSA", GNUTLS_KX_RSA, &rsa_auth_struct, 0, GNUTLS_PK_RSA, 0}, -#ifdef ENABLE_DHE - {"DHE-RSA", GNUTLS_KX_DHE_RSA, &dhe_rsa_auth_struct, 1, GNUTLS_PK_RSA, 1}, - {"DHE-DSS", GNUTLS_KX_DHE_DSS, &dhe_dss_auth_struct, 1, GNUTLS_PK_DSA, 1}, -#endif #ifdef ENABLE_ECDHE - {"ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, &ecdhe_rsa_auth_struct, 0, GNUTLS_PK_RSA, 1}, + {"ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, &ecdhe_rsa_auth_struct, 0, 1}, {"ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, &ecdhe_ecdsa_auth_struct, - 0, GNUTLS_PK_EC, 1}, + 0, 1}, #endif -#ifdef ENABLE_SRP - {"SRP-DSS", GNUTLS_KX_SRP_DSS, &srp_dss_auth_struct, 0, GNUTLS_PK_DSA, 0}, - {"SRP-RSA", GNUTLS_KX_SRP_RSA, &srp_rsa_auth_struct, 0, GNUTLS_PK_RSA, 0}, - {"SRP", GNUTLS_KX_SRP, &srp_auth_struct, 0, GNUTLS_PK_UNKNOWN, 0}, + {"RSA", GNUTLS_KX_RSA, &rsa_auth_struct, 0, 0}, +#ifdef ENABLE_DHE + {"DHE-RSA", GNUTLS_KX_DHE_RSA, &dhe_rsa_auth_struct, 1, 1}, + {"DHE-DSS", GNUTLS_KX_DHE_DSS, &dhe_dss_auth_struct, 1, 1}, #endif #ifdef ENABLE_PSK - {"PSK", GNUTLS_KX_PSK, &psk_auth_struct, 0, GNUTLS_PK_UNKNOWN, 0}, - {"RSA-PSK", GNUTLS_KX_RSA_PSK, &rsa_psk_auth_struct, 0, GNUTLS_PK_RSA, 0}, + {"PSK", GNUTLS_KX_PSK, &psk_auth_struct, 0, 0}, + {"RSA-PSK", GNUTLS_KX_RSA_PSK, &rsa_psk_auth_struct, 0, 0}, #ifdef ENABLE_DHE {"DHE-PSK", GNUTLS_KX_DHE_PSK, &dhe_psk_auth_struct, - 1 /* needs DHE params */, GNUTLS_PK_UNKNOWN, 0}, + 1 /* needs DHE params */, 0}, #endif #ifdef ENABLE_ECDHE - {"ECDHE-PSK", GNUTLS_KX_ECDHE_PSK, &ecdhe_psk_auth_struct, 0, GNUTLS_PK_UNKNOWN, 0}, + {"ECDHE-PSK", GNUTLS_KX_ECDHE_PSK, &ecdhe_psk_auth_struct, 0, 0}, +#endif +#endif +#ifdef ENABLE_SRP + {"SRP-DSS", GNUTLS_KX_SRP_DSS, &srp_dss_auth_struct, 0, 0}, + {"SRP-RSA", GNUTLS_KX_SRP_RSA, &srp_rsa_auth_struct, 0, 0}, + {"SRP", GNUTLS_KX_SRP, &srp_auth_struct, 0, 0}, +#endif +#if defined(ENABLE_ANON) && defined(ENABLE_DHE) + {"ANON-DH", GNUTLS_KX_ANON_DH, &anon_auth_struct, 1, 0}, +#endif +#if defined(ENABLE_ANON) && defined(ENABLE_ECDHE) + {"ANON-ECDH", GNUTLS_KX_ANON_ECDH, &anon_ecdh_auth_struct, 0, 0}, #endif +#ifdef ENABLE_GOST + {"VKO-GOST-12", GNUTLS_KX_VKO_GOST_12, &vko_gost_auth_struct, 0, 0}, #endif /* for deprecated and legacy algorithms no longer supported, use * GNUTLS_KX_INVALID as an entry. This will make them available * as priority strings, but they will be a no-op. */ - {"RSA-EXPORT", GNUTLS_KX_INVALID, NULL, 0, GNUTLS_PK_UNKNOWN, 0}, + {"RSA-EXPORT", GNUTLS_KX_INVALID, NULL, 0, 0}, {0, 0, 0, 0, 0} }; @@ -150,19 +152,6 @@ mod_auth_st *_gnutls_kx_auth_struct(gnutls_kx_algorithm_t algorithm) } -int -_gnutls_kx_priority(gnutls_session_t session, - gnutls_kx_algorithm_t algorithm) -{ - unsigned int i; - for (i = 0; i < session->internals.priorities.kx.algorithms; i++) { - if (session->internals.priorities.kx.priority[i] == - algorithm) - return i; - } - return -1; -} - /** * gnutls_kx_get_name: * @algorithm: is a key exchange algorithm @@ -197,7 +186,7 @@ gnutls_kx_algorithm_t gnutls_kx_get_id(const char *name) gnutls_kx_algorithm_t ret = GNUTLS_KX_UNKNOWN; GNUTLS_KX_LOOP( - if (strcasecmp(p->name, name) == 0 && (int)p->algorithm != GNUTLS_KX_INVALID) { + if (c_strcasecmp(p->name, name) == 0 && (int)p->algorithm != GNUTLS_KX_INVALID) { ret = p->algorithm; break; } @@ -215,7 +204,7 @@ int _gnutls_kx_get_id(const char *name) gnutls_kx_algorithm_t ret = GNUTLS_KX_UNKNOWN; GNUTLS_KX_LOOP( - if (strcasecmp(p->name, name) == 0) { + if (c_strcasecmp(p->name, name) == 0) { ret = p->algorithm; break; } @@ -261,7 +250,7 @@ int _gnutls_kx_is_ok(gnutls_kx_algorithm_t algorithm) bool _gnutls_kx_allows_false_start(gnutls_session_t session) { - unsigned algorithm = session->security_parameters.kx_algorithm; + unsigned algorithm = session->security_parameters.cs->kx_algorithm; bool needs_dh = 0; int bits; @@ -269,18 +258,25 @@ bool _gnutls_kx_allows_false_start(gnutls_session_t session) GNUTLS_KX_ALG_LOOP(ret = p->false_start; needs_dh = p->needs_dh_params); if (ret != 0) { + const gnutls_group_entry_st *e; + + e = get_group(session); + #if defined(ENABLE_DHE) || defined(ENABLE_ANON) if (needs_dh != 0) { bits = gnutls_sec_param_to_pk_bits(GNUTLS_PK_DH, GNUTLS_SEC_PARAM_HIGH); /* check whether sizes are sufficient */ - if (gnutls_dh_get_prime_bits(session) < bits) + if (e && e->prime) { + if (e->prime->size*8 < (unsigned)bits) + ret = 0; + } else if (gnutls_dh_get_prime_bits(session) < bits) ret = 0; - } else + } else #endif if (algorithm == GNUTLS_KX_ECDHE_RSA || algorithm == GNUTLS_KX_ECDHE_ECDSA) { bits = gnutls_sec_param_to_pk_bits(GNUTLS_PK_EC, GNUTLS_SEC_PARAM_HIGH); - if (gnutls_ecc_curve_get_size(session->security_parameters.ecc_curve) * 8 < bits) + if (e != NULL && gnutls_ecc_curve_get_size(e->curve) * 8 < bits) ret = 0; } } @@ -294,27 +290,6 @@ bool _gnutls_kx_needs_dh_params(gnutls_kx_algorithm_t algorithm) return ret; } -int _gnutls_kx_cert_pk_params(gnutls_kx_algorithm_t algorithm) -{ - ssize_t ret = 0; - GNUTLS_KX_ALG_LOOP(ret = p->cert_pk); - return ret; -} - -/* Type to KX mappings */ -gnutls_kx_algorithm_t -_gnutls_map_kx_get_kx(gnutls_credentials_type_t type, int server) -{ - gnutls_kx_algorithm_t ret = -1; - - if (server) { - GNUTLS_KX_MAP_ALG_LOOP_SERVER(ret = p->algorithm); - } else { - GNUTLS_KX_MAP_ALG_LOOP_SERVER(ret = p->algorithm); - } - return ret; -} - /* Returns the credentials type required for this * Key exchange method. */ diff --git a/lib/algorithms/mac.c b/lib/algorithms/mac.c index f9b3537403..edd6e10acc 100644 --- a/lib/algorithms/mac.c +++ b/lib/algorithms/mac.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -24,46 +25,174 @@ #include #include "errors.h" #include +#include "c-strcase.h" #define MAC_OID_SHA1 "1.2.840.113549.2.7" #define MAC_OID_SHA224 "1.2.840.113549.2.8" #define MAC_OID_SHA256 "1.2.840.113549.2.9" #define MAC_OID_SHA384 "1.2.840.113549.2.10" #define MAC_OID_SHA512 "1.2.840.113549.2.11" - -#ifdef ALLOW_SHA1 -# define SHA1_SECURE_VAL 1 -#else -# define SHA1_SECURE_VAL 0 -#endif - -static const mac_entry_st hash_algorithms[] = { - {"SHA1", HASH_OID_SHA1, MAC_OID_SHA1, GNUTLS_MAC_SHA1, 20, 20, 0, 0, SHA1_SECURE_VAL, 64}, - {"MD5", HASH_OID_MD5, NULL, GNUTLS_MAC_MD5, 16, 16, 0, 0, 0, 64}, - {"MD5+SHA1", NULL, NULL, GNUTLS_MAC_MD5_SHA1, 36, 36, 0, 0, 0, 64}, - {"SHA256", HASH_OID_SHA256, MAC_OID_SHA256, GNUTLS_MAC_SHA256, 32, 32, 0, 0, 1, - 64}, - {"SHA384", HASH_OID_SHA384, MAC_OID_SHA384, GNUTLS_MAC_SHA384, 48, 48, 0, 0, 1, - 64}, - {"SHA512", HASH_OID_SHA512, MAC_OID_SHA512, GNUTLS_MAC_SHA512, 64, 64, 0, 0, 1, - 64}, - {"SHA224", HASH_OID_SHA224, MAC_OID_SHA224, GNUTLS_MAC_SHA224, 28, 28, 0, 0, 1, - 64}, - {"SHA3-256", HASH_OID_SHA3_256, NULL, GNUTLS_MAC_SHA3_256, 32, 32, 0, 0, 1, - 136}, - {"SHA3-384", HASH_OID_SHA3_384, NULL, GNUTLS_MAC_SHA3_384, 48, 48, 0, 0, 1, - 104}, - {"SHA3-512", HASH_OID_SHA3_512, NULL, GNUTLS_MAC_SHA3_512, 64, 64, 0, 0, 1, - 72}, - {"SHA3-224", HASH_OID_SHA3_224, NULL, GNUTLS_MAC_SHA3_224, 28, 28, 0, 0, 1, - 144}, - {"UMAC-96", NULL, NULL, GNUTLS_MAC_UMAC_96, 12, 16, 8, 0, 1, 0}, - {"UMAC-128", NULL, NULL, GNUTLS_MAC_UMAC_128, 16, 16, 8, 0, 1, 0}, - {"AEAD", NULL, NULL, GNUTLS_MAC_AEAD, 0, 0, 0, 1, 1, 0}, - {"MD2", HASH_OID_MD2, NULL, GNUTLS_MAC_MD2, 0, 0, 0, 0, 0, 0}, /* not used as MAC */ - {"RIPEMD160", HASH_OID_RMD160, NULL, GNUTLS_MAC_RMD160, 20, 20, 0, 0, 1, - 64}, - {"MAC-NULL", NULL, NULL, GNUTLS_MAC_NULL, 0, 0, 0, 0, 0, 0}, +#define MAC_OID_GOST_R_3411_94 "1.2.643.2.2.10" +#define MAC_OID_STREEBOG_256 "1.2.643.7.1.1.4.1" +#define MAC_OID_STREEBOG_512 "1.2.643.7.1.1.4.2" + +static SYSTEM_CONFIG_OR_CONST +mac_entry_st hash_algorithms[] = { + {.name = "SHA1", + .oid = HASH_OID_SHA1, + .mac_oid = MAC_OID_SHA1, + .id = GNUTLS_MAC_SHA1, + .output_size = 20, + .key_size = 20, + .block_size = 64}, + {.name = "MD5+SHA1", + .id = GNUTLS_MAC_MD5_SHA1, + .output_size = 36, + .key_size = 36, + .flags = GNUTLS_MAC_FLAG_PREIMAGE_INSECURE, + .block_size = 64}, + {.name = "SHA256", + .oid = HASH_OID_SHA256, + .mac_oid = MAC_OID_SHA256, + .id = GNUTLS_MAC_SHA256, + .output_size = 32, + .key_size = 32, + .block_size = 64}, + {.name = "SHA384", + .oid = HASH_OID_SHA384, + .mac_oid = MAC_OID_SHA384, + .id = GNUTLS_MAC_SHA384, + .output_size = 48, + .key_size = 48, + .block_size = 128}, + {.name = "SHA512", + .oid = HASH_OID_SHA512, + .mac_oid = MAC_OID_SHA512, + .id = GNUTLS_MAC_SHA512, + .output_size = 64, + .key_size = 64, + .block_size = 128}, + {.name = "SHA224", + .oid = HASH_OID_SHA224, + .mac_oid = MAC_OID_SHA224, + .id = GNUTLS_MAC_SHA224, + .output_size = 28, + .key_size = 28, + .block_size = 64}, + {.name = "SHA3-256", + .oid = HASH_OID_SHA3_256, + .id = GNUTLS_MAC_SHA3_256, + .output_size = 32, + .key_size = 32, + .block_size = 136}, + {.name = "SHA3-384", + .oid = HASH_OID_SHA3_384, + .id = GNUTLS_MAC_SHA3_384, + .output_size = 48, + .key_size = 48, + .block_size = 104}, + {.name = "SHA3-512", + .oid = HASH_OID_SHA3_512, + .id = GNUTLS_MAC_SHA3_512, + .output_size = 64, + .key_size = 64, + .block_size = 72}, + {.name = "SHA3-224", + .oid = HASH_OID_SHA3_224, + .id = GNUTLS_MAC_SHA3_224, + .output_size = 28, + .key_size = 28, + .block_size = 144}, + {.name = "UMAC-96", + .id = GNUTLS_MAC_UMAC_96, + .output_size = 12, + .key_size = 16, + .nonce_size = 8}, + {.name = "UMAC-128", + .id = GNUTLS_MAC_UMAC_128, + .output_size = 16, + .key_size = 16, + .nonce_size = 8}, + {.name = "AEAD", + .id = GNUTLS_MAC_AEAD, + .placeholder = 1}, + {.name = "MD5", + .oid = HASH_OID_MD5, + .id = GNUTLS_MAC_MD5, + .output_size = 16, + .key_size = 16, + .flags = GNUTLS_MAC_FLAG_PREIMAGE_INSECURE, + .block_size = 64}, + {.name = "MD2", + .oid = HASH_OID_MD2, + .flags = GNUTLS_MAC_FLAG_PREIMAGE_INSECURE, + .id = GNUTLS_MAC_MD2}, + {.name = "RIPEMD160", + .oid = HASH_OID_RMD160, + .id = GNUTLS_MAC_RMD160, + .output_size = 20, + .key_size = 20, + .block_size = 64}, + {.name = "GOSTR341194", + .oid = HASH_OID_GOST_R_3411_94, + .mac_oid = MAC_OID_GOST_R_3411_94, + .id = GNUTLS_MAC_GOSTR_94, + .output_size = 32, + .key_size = 32, + .block_size = 32}, + {.name = "STREEBOG-256", + .oid = HASH_OID_STREEBOG_256, + .mac_oid = MAC_OID_STREEBOG_256, + .id = GNUTLS_MAC_STREEBOG_256, + .output_size = 32, + .key_size = 32, + .block_size = 64}, + {.name = "STREEBOG-512", + .oid = HASH_OID_STREEBOG_512, + .mac_oid = MAC_OID_STREEBOG_512, + .id = GNUTLS_MAC_STREEBOG_512, + .output_size = 64, + .key_size = 64, + .block_size = 64}, + {.name = "AES-CMAC-128", + .id = GNUTLS_MAC_AES_CMAC_128, + .output_size = 16, + .key_size = 16,}, + {.name = "AES-CMAC-256", + .id = GNUTLS_MAC_AES_CMAC_256, + .output_size = 16, + .key_size = 32}, + {.name = "AES-GMAC-128", + .id = GNUTLS_MAC_AES_GMAC_128, + .output_size = 16, + .key_size = 16, + .nonce_size = 12}, + {.name = "AES-GMAC-192", + .id = GNUTLS_MAC_AES_GMAC_192, + .output_size = 16, + .key_size = 24, + .nonce_size = 12}, + {.name = "AES-GMAC-256", + .id = GNUTLS_MAC_AES_GMAC_256, + .output_size = 16, + .key_size = 32, + .nonce_size = 12}, + {.name = "GOST28147-TC26Z-IMIT", + .id = GNUTLS_MAC_GOST28147_TC26Z_IMIT, + .output_size = 4, + .key_size = 32, + .block_size = 8, + .flags = GNUTLS_MAC_FLAG_CONTINUOUS_MAC}, + {.name = "SHAKE-128", + .oid = HASH_OID_SHAKE_128, + .id = GNUTLS_MAC_SHAKE_128, + .block_size = 168}, + {.name = "SHAKE-256", + .oid = HASH_OID_SHAKE_256, + .id = GNUTLS_MAC_SHAKE_256, + .block_size = 136}, + {.name = "MAC-NULL", + .id = GNUTLS_MAC_NULL}, {0, 0, 0, 0, 0, 0, 0, 0, 0} }; @@ -82,19 +211,6 @@ const mac_entry_st *_gnutls_mac_to_entry(gnutls_mac_algorithm_t c) return NULL; } -int -_gnutls_mac_priority(gnutls_session_t session, - gnutls_mac_algorithm_t algorithm) -{ /* actually returns the priority */ - unsigned int i; - for (i = 0; i < session->internals.priorities.mac.algorithms; i++) { - if (session->internals.priorities.mac.priority[i] == - algorithm) - return i; - } - return -1; -} - /** * gnutls_mac_get_name: * @algorithm: is a MAC algorithm @@ -152,7 +268,7 @@ gnutls_digest_algorithm_t gnutls_digest_get_id(const char *name) gnutls_digest_algorithm_t ret = GNUTLS_DIG_UNKNOWN; GNUTLS_HASH_LOOP( - if (p->oid != NULL && strcasecmp(p->name, name) == 0) { + if (p->oid != NULL && c_strcasecmp(p->name, name) == 0) { if (_gnutls_digest_exists((gnutls_digest_algorithm_t)p->id)) ret = (gnutls_digest_algorithm_t)p->id; break; @@ -162,6 +278,35 @@ gnutls_digest_algorithm_t gnutls_digest_get_id(const char *name) return ret; } +int _gnutls_digest_mark_insecure(const char *name) +{ +#ifndef DISABLE_SYSTEM_CONFIG + mac_entry_st *p; + + for(p = hash_algorithms; p->name != NULL; p++) { + if (p->oid != NULL && c_strcasecmp(p->name, name) == 0) { + p->flags |= GNUTLS_MAC_FLAG_PREIMAGE_INSECURE; + return 0; + } + } + +#endif + return GNUTLS_E_INVALID_REQUEST; +} + +unsigned _gnutls_digest_is_insecure(gnutls_digest_algorithm_t dig) +{ + const mac_entry_st *p; + + for(p = hash_algorithms; p->name != NULL; p++) { + if (p->oid != NULL && p->id == (gnutls_mac_algorithm_t)dig) { + return p->flags & GNUTLS_MAC_FLAG_PREIMAGE_INSECURE; + } + } + + return 1; +} + /** * gnutls_mac_get_id: * @name: is a MAC algorithm name @@ -177,7 +322,7 @@ gnutls_mac_algorithm_t gnutls_mac_get_id(const char *name) gnutls_mac_algorithm_t ret = GNUTLS_MAC_UNKNOWN; GNUTLS_HASH_LOOP( - if (strcasecmp(p->name, name) == 0) { + if (c_strcasecmp(p->name, name) == 0) { if (p->placeholder != 0 || _gnutls_mac_exists(p->id)) ret = p->id; break; @@ -191,7 +336,7 @@ gnutls_mac_algorithm_t gnutls_mac_get_id(const char *name) * gnutls_mac_get_key_size: * @algorithm: is an encryption algorithm * - * Returns the size of the MAC key used in TLS. + * Returns the size of the MAC key used in TLS. * * Returns: length (in bytes) of the given MAC key size, or 0 if the * given MAC algorithm is invalid. @@ -230,7 +375,7 @@ size_t gnutls_mac_get_nonce_size(gnutls_mac_algorithm_t algorithm) * gnutls_mac_list: * * Get a list of hash algorithms for use as MACs. Note that not - * necessarily all MACs are supported in TLS cipher suites. + * necessarily all MACs are supported in TLS cipher suites. * This function is not thread safe. * * Returns: Return a (0)-terminated list of #gnutls_mac_algorithm_t @@ -274,7 +419,7 @@ const gnutls_digest_algorithm_t *gnutls_digest_list(void) GNUTLS_HASH_LOOP( if (p->oid != NULL && (p->placeholder != 0 || _gnutls_mac_exists(p->id))) { - + supported_digests[i++] = (gnutls_digest_algorithm_t)p->id; } ); @@ -297,20 +442,16 @@ const gnutls_digest_algorithm_t *gnutls_digest_list(void) **/ gnutls_digest_algorithm_t gnutls_oid_to_digest(const char *oid) { - gnutls_digest_algorithm_t ret = 0; - GNUTLS_HASH_LOOP( if (p->oid && strcmp(oid, p->oid) == 0) { if (_gnutls_digest_exists((gnutls_digest_algorithm_t)p->id)) { - ret = (gnutls_digest_algorithm_t) p->id; + return (gnutls_digest_algorithm_t) p->id; } break; } ); - if (ret == 0) - return GNUTLS_DIG_UNKNOWN; - return ret; + return GNUTLS_DIG_UNKNOWN; } /** @@ -326,20 +467,16 @@ gnutls_digest_algorithm_t gnutls_oid_to_digest(const char *oid) **/ gnutls_mac_algorithm_t gnutls_oid_to_mac(const char *oid) { - gnutls_digest_algorithm_t ret = 0; - GNUTLS_HASH_LOOP( if (p->mac_oid && strcmp(oid, p->mac_oid) == 0) { if (_gnutls_mac_exists(p->id)) { - ret = p->id; + return p->id; } break; } ); - if (ret == 0) - return GNUTLS_MAC_UNKNOWN; - return ret; + return GNUTLS_MAC_UNKNOWN; } /** @@ -355,14 +492,27 @@ gnutls_mac_algorithm_t gnutls_oid_to_mac(const char *oid) **/ const char *gnutls_digest_get_oid(gnutls_digest_algorithm_t algorithm) { - const char *ret = NULL; - GNUTLS_HASH_LOOP( if (algorithm == (unsigned) p->id && p->oid != NULL) { - ret = p->oid; - break; + return p->oid; } ); - return ret; + return NULL; +} + +gnutls_digest_algorithm_t _gnutls_hash_size_to_sha_hash(unsigned int size) +{ + if (size == 20) + return GNUTLS_DIG_SHA1; + else if (size == 28) + return GNUTLS_DIG_SHA224; + else if (size == 32) + return GNUTLS_DIG_SHA256; + else if (size == 48) + return GNUTLS_DIG_SHA384; + else if (size == 64) + return GNUTLS_DIG_SHA512; + + return GNUTLS_DIG_UNKNOWN; } diff --git a/lib/algorithms/protocols.c b/lib/algorithms/protocols.c index b2bd675f5f..a3d1edeb6c 100644 --- a/lib/algorithms/protocols.c +++ b/lib/algorithms/protocols.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -24,24 +24,31 @@ #include #include "errors.h" #include +#include "c-strcase.h" /* TLS Versions */ -static const version_entry_st sup_versions[] = { - {.name = "SSL3.0", + +static SYSTEM_CONFIG_OR_CONST +version_entry_st sup_versions[] = { + {.name = "SSL3.0", .id = GNUTLS_SSL3, .age = 0, .major = 3, .minor = 0, .transport = GNUTLS_STREAM, +#ifdef ENABLE_SSL3 .supported = 1, +#endif .explicit_iv = 0, .extensions = 0, .selectable_sighash = 0, .selectable_prf = 0, .obsolete = 1, + .only_extension = 0, + .tls_sig_sem = SIG_SEM_PRE_TLS12, .false_start = 0 }, - {.name = "TLS1.0", + {.name = "TLS1.0", .id = GNUTLS_TLS1, .age = 1, .major = 3, @@ -53,9 +60,11 @@ static const version_entry_st sup_versions[] = { .selectable_sighash = 0, .selectable_prf = 0, .obsolete = 0, + .only_extension = 0, + .tls_sig_sem = SIG_SEM_PRE_TLS12, .false_start = 0 }, - {.name = "TLS1.1", + {.name = "TLS1.1", .id = GNUTLS_TLS1_1, .age = 2, .major = 3, @@ -67,9 +76,11 @@ static const version_entry_st sup_versions[] = { .selectable_sighash = 0, .selectable_prf = 0, .obsolete = 0, + .only_extension = 0, + .tls_sig_sem = SIG_SEM_PRE_TLS12, .false_start = 0 }, - {.name = "TLS1.2", + {.name = "TLS1.2", .id = GNUTLS_TLS1_2, .age = 3, .major = 3, @@ -81,8 +92,30 @@ static const version_entry_st sup_versions[] = { .selectable_sighash = 1, .selectable_prf = 1, .obsolete = 0, + .only_extension = 0, + .tls_sig_sem = SIG_SEM_PRE_TLS12, .false_start = 1 }, + {.name = "TLS1.3", + .id = GNUTLS_TLS1_3, + .age = 5, + .major = 3, + .minor = 4, + .transport = GNUTLS_STREAM, + .supported = 1, + .explicit_iv = 0, + .extensions = 1, + .selectable_sighash = 1, + .selectable_prf = 1, + .tls13_sem = 1, + .obsolete = 0, + .only_extension = 1, + .post_handshake_auth = 1, + .multi_ocsp = 1, + .key_shares = 1, + .false_start = 0, /* doesn't make sense */ + .tls_sig_sem = SIG_SEM_TLS13 + }, {.name = "DTLS0.9", /* Cisco AnyConnect (based on about OpenSSL 0.9.8e) */ .id = GNUTLS_DTLS0_9, .age = 200, @@ -95,9 +128,11 @@ static const version_entry_st sup_versions[] = { .selectable_sighash = 0, .selectable_prf = 0, .obsolete = 0, + .only_extension = 0, + .tls_sig_sem = SIG_SEM_PRE_TLS12, .false_start = 0 }, - {.name = "DTLS1.0", + {.name = "DTLS1.0", .id = GNUTLS_DTLS1_0, .age = 201, .major = 254, @@ -109,9 +144,11 @@ static const version_entry_st sup_versions[] = { .selectable_sighash = 0, .selectable_prf = 0, .obsolete = 0, + .only_extension = 0, + .tls_sig_sem = SIG_SEM_PRE_TLS12, .false_start = 0 }, - {.name = "DTLS1.2", + {.name = "DTLS1.2", .id = GNUTLS_DTLS1_2, .age = 202, .major = 254, @@ -123,21 +160,31 @@ static const version_entry_st sup_versions[] = { .selectable_sighash = 1, .selectable_prf = 1, .obsolete = 0, + .only_extension = 0, + .tls_sig_sem = SIG_SEM_PRE_TLS12, .false_start = 1 }, {0, 0, 0, 0, 0} }; -#define GNUTLS_VERSION_LOOP(b) \ - const version_entry_st *p; \ - for(p = sup_versions; p->name != NULL; p++) { b ; } +const version_entry_st *version_to_entry(gnutls_protocol_t version) +{ + const version_entry_st *p; -#define GNUTLS_VERSION_ALG_LOOP(a) \ - GNUTLS_VERSION_LOOP( if(p->id == version) { a; break; }) + for (p = sup_versions; p->name != NULL; p++) + if (p->id == version) + return p; + return NULL; +} -const version_entry_st *version_to_entry(gnutls_protocol_t version) +const version_entry_st *nversion_to_entry(uint8_t major, uint8_t minor) { - GNUTLS_VERSION_ALG_LOOP(return p); + const version_entry_st *p; + + for (p = sup_versions; p->name != NULL; p++) { + if ((p->major == major) && (p->minor == minor)) + return p; + } return NULL; } @@ -151,6 +198,21 @@ version_is_valid_for_session(gnutls_session_t session, return 0; } +int _gnutls_version_mark_disabled(const char *name) +{ +#ifndef DISABLE_SYSTEM_CONFIG + version_entry_st *p; + + for (p = sup_versions; p->name != NULL; p++) + if (c_strcasecmp(p->name, name) == 0) { + p->supported = 0; + return 0; + } + +#endif + return GNUTLS_E_INVALID_REQUEST; +} + /* Return the priority of the provided version number */ int _gnutls_version_priority(gnutls_session_t session, @@ -158,9 +220,9 @@ _gnutls_version_priority(gnutls_session_t session, { unsigned int i; - for (i = 0; i < session->internals.priorities.protocol.algorithms; + for (i = 0; i < session->internals.priorities->protocol.num_priorities; i++) { - if (session->internals.priorities.protocol.priority[i] == + if (session->internals.priorities->protocol.priorities[i] == version) return i; } @@ -176,9 +238,9 @@ const version_entry_st *_gnutls_version_lowest(gnutls_session_t session) const version_entry_st *v, *min_v = NULL; const version_entry_st *backup = NULL; - for (i=0;i < session->internals.priorities.protocol.algorithms;i++) { + for (i=0;i < session->internals.priorities->protocol.num_priorities;i++) { cur_prot = - session->internals.priorities.protocol.priority[i]; + session->internals.priorities->protocol.priorities[i]; v = version_to_entry(cur_prot); if (v != NULL && version_is_valid_for_session(session, v)) { @@ -199,37 +261,112 @@ const version_entry_st *_gnutls_version_lowest(gnutls_session_t session) return min_v; } -/* Returns the maximum version in the priorities +/* Returns the maximum version in the priorities */ -static const version_entry_st *version_max(gnutls_session_t session) +const version_entry_st *_gnutls_version_max(gnutls_session_t session) { - int max_proto = _gnutls_version_max(session); + unsigned int i; + gnutls_protocol_t cur_prot; + const version_entry_st *p, *max = NULL; + + for (i = 0; i < session->internals.priorities->protocol.num_priorities; + i++) { + cur_prot = + session->internals.priorities->protocol.priorities[i]; + + for (p = sup_versions; p->name != NULL; p++) { + if(p->id == cur_prot) { +#ifndef ENABLE_SSL3 + if (p->obsolete != 0) + break; +#endif + if (!p->supported || p->transport != session->internals.transport) + break; + + if (p->tls13_sem && (session->internals.flags & INT_FLAG_NO_TLS13)) + break; - if (max_proto < 0) - return NULL; + if (max == NULL || cur_prot > max->id) { + max = p; + } - return version_to_entry(max_proto); + break; + } + } + } + + return max; } -gnutls_protocol_t _gnutls_version_max(gnutls_session_t session) +const version_entry_st *_gnutls_legacy_version_max(gnutls_session_t session) +{ + const version_entry_st *max = _gnutls_version_max(session); + + if (max && max->only_extension != 0) { + /* TLS 1.3 or later found */ + if (max->transport == GNUTLS_STREAM) { + return version_to_entry(GNUTLS_TLS1_2); + } else { + return version_to_entry(GNUTLS_DTLS1_2); + } + } + + return max; +} + +/* Returns the number of bytes written to buffer or a negative + * error code. It will return GNUTLS_E_UNSUPPORTED_VERSION_PACKET + * if there is no version >= TLS 1.3. + */ +int _gnutls_write_supported_versions(gnutls_session_t session, uint8_t *buffer, ssize_t buffer_size) { - unsigned int i, max = 0x00; gnutls_protocol_t cur_prot; + size_t written_bytes = 0; + unsigned at_least_one_new = 0; + unsigned i; + const version_entry_st *p; - for (i = 0; i < session->internals.priorities.protocol.algorithms; - i++) { + for (i = 0; i < session->internals.priorities->protocol.num_priorities; i++) { cur_prot = - session->internals.priorities.protocol.priority[i]; + session->internals.priorities->protocol.priorities[i]; + + for (p = sup_versions; p->name != NULL; p++) { + if(p->id == cur_prot) { + if (p->obsolete != 0) + break; + + if (!p->supported || p->transport != session->internals.transport) + break; + + if (p->only_extension) + at_least_one_new = 1; - if (cur_prot > max - && _gnutls_version_is_supported(session, cur_prot)) - max = cur_prot; + if (buffer_size > 2) { + _gnutls_debug_log("Advertizing version %d.%d\n", (int)p->major, (int)p->minor); + buffer[0] = p->major; + buffer[1] = p->minor; + written_bytes += 2; + buffer += 2; + } + + buffer_size -= 2; + + if (buffer_size <= 0) + goto finish; + + break; + } + } } - if (max == 0x00) - return GNUTLS_VERSION_UNKNOWN; /* unknown version */ + finish: + if (written_bytes == 0) + return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET); - return max; + if (at_least_one_new == 0) + return GNUTLS_E_UNSUPPORTED_VERSION_PACKET; + + return written_bytes; } /* Returns true (1) if the given version is higher than the highest supported @@ -238,7 +375,7 @@ unsigned _gnutls_version_is_too_high(gnutls_session_t session, uint8_t major, ui { const version_entry_st *e; - e = version_max(session); + e = _gnutls_legacy_version_max(session); if (e == NULL) /* we don't know; but that means something is unconfigured */ return 1; @@ -270,11 +407,12 @@ unsigned _gnutls_version_is_too_high(gnutls_session_t session, uint8_t major, ui **/ const char *gnutls_protocol_get_name(gnutls_protocol_t version) { - const char *ret = NULL; - + const version_entry_st *p; /* avoid prefix */ - GNUTLS_VERSION_ALG_LOOP(ret = p->name); - return ret; + for (p = sup_versions; p->name != NULL; p++) + if (p->id == version) + return p->name; + return NULL; } /** @@ -288,14 +426,15 @@ const char *gnutls_protocol_get_name(gnutls_protocol_t version) **/ gnutls_protocol_t gnutls_protocol_get_id(const char *name) { + const version_entry_st *p; gnutls_protocol_t ret = GNUTLS_VERSION_UNKNOWN; - GNUTLS_VERSION_LOOP( - if (strcasecmp(p->name, name) == 0) { + for (p = sup_versions; p->name != NULL; p++) { + if (c_strcasecmp(p->name, name) == 0) { ret = p->id; break; } - ); + } return ret; } @@ -313,12 +452,17 @@ gnutls_protocol_t gnutls_protocol_get_id(const char *name) **/ const gnutls_protocol_t *gnutls_protocol_list(void) { + const version_entry_st *p; static gnutls_protocol_t supported_protocols[MAX_ALGOS] = { 0 }; if (supported_protocols[0] == 0) { int i = 0; - GNUTLS_VERSION_LOOP(supported_protocols[i++] = p->id); + for (p = sup_versions; p->name != NULL; p++) { + if (!p->supported) + continue; + supported_protocols[i++] = p->id; + } supported_protocols[i++] = 0; } @@ -329,34 +473,41 @@ const gnutls_protocol_t *gnutls_protocol_list(void) */ gnutls_protocol_t _gnutls_version_get(uint8_t major, uint8_t minor) { + const version_entry_st *p; int ret = GNUTLS_VERSION_UNKNOWN; - GNUTLS_VERSION_LOOP( + for (p = sup_versions; p->name != NULL; p++) if ((p->major == major) && (p->minor == minor)) - ret = p->id - ); + ret = p->id; return ret; } /* Version Functions */ int -_gnutls_version_is_supported(gnutls_session_t session, - const gnutls_protocol_t version) +_gnutls_nversion_is_supported(gnutls_session_t session, + unsigned char major, unsigned char minor) { - int ret = 0; + const version_entry_st *p; + int version = 0; - GNUTLS_VERSION_LOOP( - if(p->id == version) { + for (p = sup_versions; p->name != NULL; p++) { + if(p->major == major && p->minor == minor) { #ifndef ENABLE_SSL3 if (p->obsolete != 0) return 0; #endif - ret = p->supported && p->transport == session->internals.transport; + if (p->tls13_sem && (session->internals.flags & INT_FLAG_NO_TLS13)) + return 0; + + if (!p->supported || p->transport != session->internals.transport) + return 0; + + version = p->id; break; } - ) + } - if (ret == 0) + if (version == 0) return 0; if (_gnutls_version_priority(session, version) < 0) @@ -364,4 +515,3 @@ _gnutls_version_is_supported(gnutls_session_t session, else return 1; } - diff --git a/lib/algorithms/publickey.c b/lib/algorithms/publickey.c index 5ef780986f..c298a38936 100644 --- a/lib/algorithms/publickey.c +++ b/lib/algorithms/publickey.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -50,9 +50,16 @@ static const gnutls_pk_map pk_mappings[] = { {GNUTLS_KX_SRP_RSA, GNUTLS_PK_RSA, CIPHER_SIGN}, {GNUTLS_KX_ECDHE_RSA, GNUTLS_PK_RSA, CIPHER_SIGN}, {GNUTLS_KX_ECDHE_ECDSA, GNUTLS_PK_EC, CIPHER_SIGN}, + {GNUTLS_KX_ECDHE_ECDSA, GNUTLS_PK_EDDSA_ED25519, CIPHER_SIGN}, + {GNUTLS_KX_ECDHE_ECDSA, GNUTLS_PK_EDDSA_ED448, CIPHER_SIGN}, {GNUTLS_KX_DHE_DSS, GNUTLS_PK_DSA, CIPHER_SIGN}, + {GNUTLS_KX_DHE_RSA, GNUTLS_PK_RSA_PSS, CIPHER_SIGN}, + {GNUTLS_KX_ECDHE_RSA, GNUTLS_PK_RSA_PSS, CIPHER_SIGN}, {GNUTLS_KX_SRP_DSS, GNUTLS_PK_DSA, CIPHER_SIGN}, {GNUTLS_KX_RSA_PSK, GNUTLS_PK_RSA, CIPHER_ENCRYPT}, + {GNUTLS_KX_VKO_GOST_12, GNUTLS_PK_GOST_01, CIPHER_SIGN}, + {GNUTLS_KX_VKO_GOST_12, GNUTLS_PK_GOST_12_256, CIPHER_SIGN}, + {GNUTLS_KX_VKO_GOST_12, GNUTLS_PK_GOST_12_512, CIPHER_SIGN}, {0, 0, 0} }; @@ -64,15 +71,35 @@ static const gnutls_pk_map pk_mappings[] = { GNUTLS_PK_MAP_LOOP( if(p->kx_algorithm == kx_algorithm) { a; break; }) -/* returns the gnutls_pk_algorithm_t which is compatible with - * the given gnutls_kx_algorithm_t. - */ -gnutls_pk_algorithm_t -_gnutls_map_kx_get_pk(gnutls_kx_algorithm_t kx_algorithm) +unsigned +_gnutls_kx_supports_pk(gnutls_kx_algorithm_t kx_algorithm, + gnutls_pk_algorithm_t pk_algorithm) +{ + GNUTLS_PK_MAP_LOOP(if (p->kx_algorithm == kx_algorithm && p->pk_algorithm == pk_algorithm) { return 1; }) + return 0; +} + +unsigned +_gnutls_kx_supports_pk_usage(gnutls_kx_algorithm_t kx_algorithm, + gnutls_pk_algorithm_t pk_algorithm, + unsigned int key_usage) { - gnutls_pk_algorithm_t ret = -1; + const gnutls_pk_map *p; + + for(p = pk_mappings; p->kx_algorithm != 0; p++) { + if (p->kx_algorithm == kx_algorithm && p->pk_algorithm == pk_algorithm) { + if (key_usage == 0) + return 1; + else if (p->encipher_type == CIPHER_SIGN && (key_usage & GNUTLS_KEY_DIGITAL_SIGNATURE)) + return 1; + else if (p->encipher_type == CIPHER_ENCRYPT && (key_usage & GNUTLS_KEY_KEY_ENCIPHERMENT)) + return 1; + else + return 0; + } + } - GNUTLS_PK_MAP_ALG_LOOP(ret = p->pk_algorithm) return ret; + return 0; } /* pk algorithms; @@ -81,25 +108,51 @@ struct gnutls_pk_entry { const char *name; const char *oid; gnutls_pk_algorithm_t id; + gnutls_ecc_curve_t curve; /* to map PK to specific OID, we need to know the curve for EdDSA */ + bool no_prehashed; /* non-zero if the algorithm cannot sign pre-hashed data */ }; typedef struct gnutls_pk_entry gnutls_pk_entry; static const gnutls_pk_entry pk_algorithms[] = { /* having duplicate entries is ok, as long as the one * we want to return OID from is first */ - {"UNKNOWN", NULL, GNUTLS_PK_UNKNOWN}, - {"RSA", PK_PKIX1_RSA_OID, GNUTLS_PK_RSA}, - {"RSA (X.509)", PK_X509_RSA_OID, GNUTLS_PK_RSA}, /* some certificates use this OID for RSA */ - {"RSA-MD5", SIG_RSA_MD5_OID, GNUTLS_PK_RSA}, /* some other broken certificates set RSA with MD5 as an indicator of RSA */ - {"RSA-SHA1", SIG_RSA_SHA1_OID, GNUTLS_PK_RSA}, /* some other broken certificates set RSA with SHA1 as an indicator of RSA */ - {"RSA-SHA1", ISO_SIG_RSA_SHA1_OID, GNUTLS_PK_RSA}, /* some other broken certificates set RSA with SHA1 as an indicator of RSA */ - {"DSA", PK_DSA_OID, GNUTLS_PK_DSA}, - {"GOST R 34.10-2001", PK_GOST_R3410_2001_OID, GNUTLS_PK_UNKNOWN}, - {"GOST R 34.10-94", PK_GOST_R3410_94_OID, GNUTLS_PK_UNKNOWN}, - {"EC/ECDSA", "1.2.840.10045.2.1", GNUTLS_PK_ECDSA}, - {"DH", NULL, GNUTLS_PK_DH}, - {"ECDHX", NULL, GNUTLS_PK_ECDHX}, - {0, 0, 0} + { .name = "RSA", .oid = PK_PKIX1_RSA_OID, .id = GNUTLS_PK_RSA, + .curve = GNUTLS_ECC_CURVE_INVALID }, + { .name = "RSA-PSS", .oid = PK_PKIX1_RSA_PSS_OID, .id = GNUTLS_PK_RSA_PSS, + .curve = GNUTLS_ECC_CURVE_INVALID }, + { .name = "RSA (X.509)", .oid = PK_X509_RSA_OID, .id = GNUTLS_PK_RSA, + .curve = GNUTLS_ECC_CURVE_INVALID }, /* some certificates use this OID for RSA */ + { .name = "RSA-MD5", .oid = SIG_RSA_MD5_OID, .id = GNUTLS_PK_RSA, + .curve = GNUTLS_ECC_CURVE_INVALID }, /* some other broken certificates set RSA with MD5 as an indicator of RSA */ + { .name = "RSA-SHA1", .oid = SIG_RSA_SHA1_OID, .id = GNUTLS_PK_RSA, + .curve = GNUTLS_ECC_CURVE_INVALID }, /* some other broken certificates set RSA with SHA1 as an indicator of RSA */ + { .name = "RSA-SHA1", .oid = ISO_SIG_RSA_SHA1_OID, .id = GNUTLS_PK_RSA, + .curve = GNUTLS_ECC_CURVE_INVALID }, /* some other broken certificates set RSA with SHA1 as an indicator of RSA */ + { .name = "DSA", .oid = PK_DSA_OID, .id = GNUTLS_PK_DSA, + .curve = GNUTLS_ECC_CURVE_INVALID }, + { .name = "GOST R 34.10-2012-512", .oid = PK_GOST_R3410_2012_512_OID, .id = GNUTLS_PK_GOST_12_512, + .curve = GNUTLS_ECC_CURVE_INVALID }, + { .name = "GOST R 34.10-2012-256", .oid = PK_GOST_R3410_2012_256_OID, .id = GNUTLS_PK_GOST_12_256, + .curve = GNUTLS_ECC_CURVE_INVALID }, + { .name = "GOST R 34.10-2001", .oid = PK_GOST_R3410_2001_OID, .id = GNUTLS_PK_GOST_01, + .curve = GNUTLS_ECC_CURVE_INVALID }, + { .name = "GOST R 34.10-94", .oid = PK_GOST_R3410_94_OID, .id = GNUTLS_PK_UNKNOWN, + .curve = GNUTLS_ECC_CURVE_INVALID }, + { .name = "EC/ECDSA", .oid = "1.2.840.10045.2.1", .id = GNUTLS_PK_ECDSA, + .curve = GNUTLS_ECC_CURVE_INVALID }, + { .name = "EdDSA (Ed25519)", .oid = SIG_EDDSA_SHA512_OID, .id = GNUTLS_PK_EDDSA_ED25519, + .curve = GNUTLS_ECC_CURVE_ED25519, .no_prehashed = 1 }, + { .name = "EdDSA (Ed448)", .oid = SIG_ED448_OID, .id = GNUTLS_PK_EDDSA_ED448, + .curve = GNUTLS_ECC_CURVE_ED448, .no_prehashed = 1 }, + { .name = "DH", .oid = NULL, .id = GNUTLS_PK_DH, + .curve = GNUTLS_ECC_CURVE_INVALID }, + { .name = "ECDH (X25519)", .oid = "1.3.101.110", .id = GNUTLS_PK_ECDH_X25519, + .curve = GNUTLS_ECC_CURVE_X25519 }, + { .name = "ECDH (X448)", .oid = "1.3.101.111", .id = GNUTLS_PK_ECDH_X448, + .curve = GNUTLS_ECC_CURVE_X448 }, + { .name = "UNKNOWN", .oid = NULL, .id = GNUTLS_PK_UNKNOWN, + .curve = GNUTLS_ECC_CURVE_INVALID }, + {0, 0, 0, 0} }; #define GNUTLS_PK_LOOP(b) \ @@ -150,7 +203,7 @@ const gnutls_pk_algorithm_t *gnutls_pk_list(void) int i = 0; GNUTLS_PK_LOOP( - if (p->id != GNUTLS_PK_UNKNOWN && supported_pks[i > 0 ? (i - 1) : 0] != p->id) + if (p->id != GNUTLS_PK_UNKNOWN && supported_pks[i > 0 ? (i - 1) : 0] != p->id) supported_pks[i++] = p->id ); supported_pks[i++] = 0; @@ -211,6 +264,27 @@ const char *gnutls_pk_get_name(gnutls_pk_algorithm_t algorithm) return ret; } +/*- + * _gnutls_pk_is_not_prehashed: + * @algorithm: is a public key algorithm + * + * Returns non-zero when the public key algorithm does not support pre-hashed + * data. + * + * Since: 3.6.0 + **/ +bool _gnutls_pk_is_not_prehashed(gnutls_pk_algorithm_t algorithm) +{ + const gnutls_pk_entry *p; + + for (p = pk_algorithms; p->name != NULL; p++) + if (algorithm == p->id) { + return p->no_prehashed; + } + + return 0; +} + /** * gnutls_oid_to_pk: * @oid: is an object identifier @@ -252,6 +326,9 @@ const char *gnutls_pk_get_oid(gnutls_pk_algorithm_t algorithm) const char *ret = NULL; const gnutls_pk_entry *p; + if (algorithm == 0) + return NULL; + for (p = pk_algorithms; p->name != NULL; p++) if (p->id == algorithm) { ret = p->oid; @@ -261,6 +338,37 @@ const char *gnutls_pk_get_oid(gnutls_pk_algorithm_t algorithm) return ret; } +/*- + * _gnutls_oid_to_pk_and_curve: + * @oid: is an object identifier + * + * Convert an OID to a #gnutls_pk_algorithm_t and curve values. If no curve + * is applicable, curve will be set GNUTLS_ECC_CURVE_INVALID. + * + * Returns: a #gnutls_pk_algorithm_t id of the specified digest + * algorithm, or %GNUTLS_PK_UNKNOWN on failure. + * + * Since: 3.6.0 + -*/ +gnutls_pk_algorithm_t _gnutls_oid_to_pk_and_curve(const char *oid, gnutls_ecc_curve_t *curve) +{ + gnutls_pk_algorithm_t ret = GNUTLS_PK_UNKNOWN; + const gnutls_pk_entry *p; + + for (p = pk_algorithms; p->name != NULL; p++) + if (p->oid && strcmp(p->oid, oid) == 0) { + ret = p->id; + if (curve) + *curve = p->curve; + break; + } + + if (ret == GNUTLS_PK_UNKNOWN && curve) + *curve = GNUTLS_ECC_CURVE_INVALID; + + return ret; +} + /* Returns the encipher type for the given key exchange algorithm. * That one of CIPHER_ENCRYPT, CIPHER_SIGN, CIPHER_IGN. * @@ -275,3 +383,14 @@ _gnutls_kx_encipher_type(gnutls_kx_algorithm_t kx_algorithm) return ret; } + +bool _gnutls_pk_are_compat(gnutls_pk_algorithm_t pk1, gnutls_pk_algorithm_t pk2) +{ + if (pk1 == pk2) + return 1; + + if (GNUTLS_PK_IS_RSA(pk1) && GNUTLS_PK_IS_RSA(pk2)) + return 1; + + return 0; +} diff --git a/lib/algorithms/secparams.c b/lib/algorithms/secparams.c index ee65fc7a90..efd1f47530 100644 --- a/lib/algorithms/secparams.c +++ b/lib/algorithms/secparams.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -88,10 +88,11 @@ gnutls_sec_param_to_pk_bits(gnutls_pk_algorithm_t algo, if (p->sec_param == param) { if (algo == GNUTLS_PK_DSA) ret = p->dsa_bits; - else if (IS_EC(algo)) + else if (IS_EC(algo)||IS_GOSTEC(algo)) ret = p->ecc_bits; else - ret = p->pk_bits; break; + ret = p->pk_bits; + break; } ); return ret; @@ -131,13 +132,31 @@ unsigned int _gnutls_pk_bits_to_subgroup_bits(unsigned int pk_bits) unsigned int ret = 0; GNUTLS_SEC_PARAM_LOOP( - ret = p->subgroup_bits; + ret = p->subgroup_bits; if (p->pk_bits >= pk_bits) break; ); return ret; } +/* Returns a corresponding SHA algorithm size for the + * public key bits given. It is based on the NIST mappings. + */ +gnutls_digest_algorithm_t _gnutls_pk_bits_to_sha_hash(unsigned int pk_bits) +{ + GNUTLS_SEC_PARAM_LOOP( + if (p->pk_bits >= pk_bits) { + if (p->bits <= 128) + return GNUTLS_DIG_SHA256; + else if (p->bits <= 192) + return GNUTLS_DIG_SHA384; + else + return GNUTLS_DIG_SHA512; + } + ); + return GNUTLS_DIG_SHA256; +} + /** * gnutls_sec_param_get_name: * @param: is a security parameter @@ -155,7 +174,7 @@ const char *gnutls_sec_param_get_name(gnutls_sec_param_t param) GNUTLS_SEC_PARAM_LOOP( if (p->sec_param == param) { - ret = p->name; + ret = p->name; break; } ); @@ -184,7 +203,7 @@ gnutls_pk_bits_to_sec_param(gnutls_pk_algorithm_t algo, unsigned int bits) if (bits == 0) return GNUTLS_SEC_PARAM_UNKNOWN; - if (IS_EC(algo)) { + if (IS_EC(algo)||IS_GOSTEC(algo)) { GNUTLS_SEC_PARAM_LOOP( if (p->ecc_bits > bits) { break; diff --git a/lib/algorithms/sign.c b/lib/algorithms/sign.c index 6107c44435..0d8d1a89c9 100644 --- a/lib/algorithms/sign.c +++ b/lib/algorithms/sign.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -24,111 +25,395 @@ #include #include "errors.h" #include +#include +#include "c-strcase.h" /* signature algorithms; */ -struct gnutls_sign_entry { - const char *name; - const char *oid; - gnutls_sign_algorithm_t id; - gnutls_pk_algorithm_t pk; - gnutls_digest_algorithm_t mac; - /* See RFC 5246 HashAlgorithm and SignatureAlgorithm - for values to use in aid struct. */ - const sign_algorithm_st aid; -}; -typedef struct gnutls_sign_entry gnutls_sign_entry; - -#define TLS_SIGN_AID_UNKNOWN {255, 255} -static const sign_algorithm_st unknown_tls_aid = TLS_SIGN_AID_UNKNOWN; - -static const gnutls_sign_entry sign_algorithms[] = { - {"RSA-SHA1", SIG_RSA_SHA1_OID, GNUTLS_SIGN_RSA_SHA1, GNUTLS_PK_RSA, - GNUTLS_DIG_SHA1, {2, 1}}, - {"RSA-SHA1", ISO_SIG_RSA_SHA1_OID, GNUTLS_SIGN_RSA_SHA1, - GNUTLS_PK_RSA, - GNUTLS_DIG_SHA1, {2, 1}}, - {"RSA-SHA224", SIG_RSA_SHA224_OID, GNUTLS_SIGN_RSA_SHA224, - GNUTLS_PK_RSA, - GNUTLS_DIG_SHA224, {3, 1}}, - {"RSA-SHA256", SIG_RSA_SHA256_OID, GNUTLS_SIGN_RSA_SHA256, - GNUTLS_PK_RSA, - GNUTLS_DIG_SHA256, {4, 1}}, - {"RSA-SHA384", SIG_RSA_SHA384_OID, GNUTLS_SIGN_RSA_SHA384, - GNUTLS_PK_RSA, - GNUTLS_DIG_SHA384, {5, 1}}, - {"RSA-SHA512", SIG_RSA_SHA512_OID, GNUTLS_SIGN_RSA_SHA512, - GNUTLS_PK_RSA, - GNUTLS_DIG_SHA512, {6, 1}}, - {"RSA-RMD160", SIG_RSA_RMD160_OID, GNUTLS_SIGN_RSA_RMD160, - GNUTLS_PK_RSA, - GNUTLS_DIG_RMD160, TLS_SIGN_AID_UNKNOWN}, - {"DSA-SHA1", SIG_DSA_SHA1_OID, GNUTLS_SIGN_DSA_SHA1, GNUTLS_PK_DSA, - GNUTLS_DIG_SHA1, {2, 2}}, - {"DSA-SHA1", "1.3.14.3.2.27", GNUTLS_SIGN_DSA_SHA1, GNUTLS_PK_DSA, - GNUTLS_DIG_SHA1, {2, 2}}, - {"DSA-SHA224", SIG_DSA_SHA224_OID, GNUTLS_SIGN_DSA_SHA224, - GNUTLS_PK_DSA, - GNUTLS_DIG_SHA224, {3, 2}}, - {"DSA-SHA256", SIG_DSA_SHA256_OID, GNUTLS_SIGN_DSA_SHA256, - GNUTLS_PK_DSA, GNUTLS_DIG_SHA256, {4, 2}}, - {"RSA-MD5", SIG_RSA_MD5_OID, GNUTLS_SIGN_RSA_MD5, GNUTLS_PK_RSA, - GNUTLS_DIG_MD5, {1, 1}}, - {"RSA-MD5", "1.3.14.3.2.25", GNUTLS_SIGN_RSA_MD5, GNUTLS_PK_RSA, - GNUTLS_DIG_MD5, {1, 1}}, - {"RSA-MD2", SIG_RSA_MD2_OID, GNUTLS_SIGN_RSA_MD2, GNUTLS_PK_RSA, - GNUTLS_DIG_MD2, TLS_SIGN_AID_UNKNOWN}, - {"ECDSA-SHA1", "1.2.840.10045.4.1", GNUTLS_SIGN_ECDSA_SHA1, - GNUTLS_PK_EC, GNUTLS_DIG_SHA1, {2, 3}}, - {"ECDSA-SHA224", "1.2.840.10045.4.3.1", GNUTLS_SIGN_ECDSA_SHA224, - GNUTLS_PK_EC, GNUTLS_DIG_SHA224, {3, 3}}, - {"ECDSA-SHA256", "1.2.840.10045.4.3.2", GNUTLS_SIGN_ECDSA_SHA256, - GNUTLS_PK_EC, GNUTLS_DIG_SHA256, {4, 3}}, - {"ECDSA-SHA384", "1.2.840.10045.4.3.3", GNUTLS_SIGN_ECDSA_SHA384, - GNUTLS_PK_EC, GNUTLS_DIG_SHA384, {5, 3}}, - {"ECDSA-SHA512", "1.2.840.10045.4.3.4", GNUTLS_SIGN_ECDSA_SHA512, - GNUTLS_PK_EC, GNUTLS_DIG_SHA512, {6, 3}}, - {"GOST R 34.10-2001", SIG_GOST_R3410_2001_OID, 0, 0, 0, - TLS_SIGN_AID_UNKNOWN}, - {"GOST R 34.10-94", SIG_GOST_R3410_94_OID, 0, 0, 0, - TLS_SIGN_AID_UNKNOWN}, - {"DSA-SHA384", SIG_DSA_SHA384_OID, GNUTLS_SIGN_DSA_SHA384, - GNUTLS_PK_DSA, GNUTLS_DIG_SHA384, {5, 2}}, - {"DSA-SHA512", SIG_DSA_SHA512_OID, GNUTLS_SIGN_DSA_SHA512, - GNUTLS_PK_DSA, GNUTLS_DIG_SHA512, {6, 2}}, - - {"ECDSA-SHA3-224", SIG_ECDSA_SHA3_224_OID, GNUTLS_SIGN_ECDSA_SHA3_224, - GNUTLS_PK_EC, GNUTLS_DIG_SHA3_224, TLS_SIGN_AID_UNKNOWN}, - {"ECDSA-SHA3-256", SIG_ECDSA_SHA3_256_OID, GNUTLS_SIGN_ECDSA_SHA3_256, - GNUTLS_PK_EC, GNUTLS_DIG_SHA3_256, TLS_SIGN_AID_UNKNOWN}, - {"ECDSA-SHA3-384", SIG_ECDSA_SHA3_384_OID, GNUTLS_SIGN_ECDSA_SHA3_384, - GNUTLS_PK_EC, GNUTLS_DIG_SHA3_384, TLS_SIGN_AID_UNKNOWN}, - {"ECDSA-SHA3-512", SIG_ECDSA_SHA3_512_OID, GNUTLS_SIGN_ECDSA_SHA3_512, - GNUTLS_PK_EC, GNUTLS_DIG_SHA3_512, TLS_SIGN_AID_UNKNOWN}, - - {"RSA-SHA3-224", SIG_RSA_SHA3_224_OID, GNUTLS_SIGN_RSA_SHA3_224, - GNUTLS_PK_RSA, GNUTLS_DIG_SHA3_224, TLS_SIGN_AID_UNKNOWN}, - {"RSA-SHA3-256", SIG_RSA_SHA3_256_OID, GNUTLS_SIGN_RSA_SHA3_256, - GNUTLS_PK_RSA, GNUTLS_DIG_SHA3_256, TLS_SIGN_AID_UNKNOWN}, - {"RSA-SHA3-384", SIG_RSA_SHA3_384_OID, GNUTLS_SIGN_RSA_SHA3_384, - GNUTLS_PK_RSA, GNUTLS_DIG_SHA3_384, TLS_SIGN_AID_UNKNOWN}, - {"RSA-SHA3-512", SIG_RSA_SHA3_512_OID, GNUTLS_SIGN_RSA_SHA3_512, - GNUTLS_PK_RSA, GNUTLS_DIG_SHA3_512, TLS_SIGN_AID_UNKNOWN}, - - {"DSA-SHA3-224", SIG_DSA_SHA3_224_OID, GNUTLS_SIGN_DSA_SHA3_224, - GNUTLS_PK_DSA, GNUTLS_DIG_SHA3_224, TLS_SIGN_AID_UNKNOWN}, - {"DSA-SHA3-256", SIG_DSA_SHA3_256_OID, GNUTLS_SIGN_DSA_SHA3_256, - GNUTLS_PK_DSA, GNUTLS_DIG_SHA3_256, TLS_SIGN_AID_UNKNOWN}, - {"DSA-SHA3-384", SIG_DSA_SHA3_384_OID, GNUTLS_SIGN_DSA_SHA3_384, - GNUTLS_PK_DSA, GNUTLS_DIG_SHA3_384, TLS_SIGN_AID_UNKNOWN}, - {"DSA-SHA3-512", SIG_DSA_SHA3_512_OID, GNUTLS_SIGN_DSA_SHA3_512, - GNUTLS_PK_DSA, GNUTLS_DIG_SHA3_512, TLS_SIGN_AID_UNKNOWN}, - {0, 0, 0, 0, 0, TLS_SIGN_AID_UNKNOWN} + +#ifdef ALLOW_SHA1 +# define SHA1_SECURE_VAL _SECURE +#else +# define SHA1_SECURE_VAL _INSECURE_FOR_CERTS +#endif + +static SYSTEM_CONFIG_OR_CONST +gnutls_sign_entry_st sign_algorithms[] = { + /* RSA-PKCS#1 1.5: must be before PSS, + * so that gnutls_pk_to_sign() will return + * these first for backwards compatibility. */ + {.name = "RSA-SHA256", + .oid = SIG_RSA_SHA256_OID, + .id = GNUTLS_SIGN_RSA_SHA256, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA256, + .aid = {{4, 1}, SIG_SEM_DEFAULT}}, + {.name = "RSA-SHA384", + .oid = SIG_RSA_SHA384_OID, + .id = GNUTLS_SIGN_RSA_SHA384, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA384, + .aid = {{5, 1}, SIG_SEM_DEFAULT}}, + {.name = "RSA-SHA512", + .oid = SIG_RSA_SHA512_OID, + .id = GNUTLS_SIGN_RSA_SHA512, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA512, + .aid = {{6, 1}, SIG_SEM_DEFAULT}}, + + /* RSA-PSS */ + {.name = "RSA-PSS-SHA256", + .oid = PK_PKIX1_RSA_PSS_OID, + .id = GNUTLS_SIGN_RSA_PSS_SHA256, + .pk = GNUTLS_PK_RSA_PSS, + .priv_pk = GNUTLS_PK_RSA, /* PKCS#11 doesn't separate RSA from RSA-PSS privkeys */ + .hash = GNUTLS_DIG_SHA256, + .flags = GNUTLS_SIGN_FLAG_TLS13_OK, + .aid = {{8, 9}, SIG_SEM_DEFAULT}}, + {.name = "RSA-PSS-RSAE-SHA256", + .oid = PK_PKIX1_RSA_PSS_OID, + .id = GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, + .pk = GNUTLS_PK_RSA_PSS, + .cert_pk = GNUTLS_PK_RSA, + .priv_pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA256, + .flags = GNUTLS_SIGN_FLAG_TLS13_OK, + .aid = {{8, 4}, SIG_SEM_DEFAULT}}, + {.name = "RSA-PSS-SHA384", + .oid = PK_PKIX1_RSA_PSS_OID, + .id = GNUTLS_SIGN_RSA_PSS_SHA384, + .pk = GNUTLS_PK_RSA_PSS, + .priv_pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA384, + .flags = GNUTLS_SIGN_FLAG_TLS13_OK, + .aid = {{8, 0x0A}, SIG_SEM_DEFAULT}}, + {.name = "RSA-PSS-RSAE-SHA384", + .oid = PK_PKIX1_RSA_PSS_OID, + .id = GNUTLS_SIGN_RSA_PSS_RSAE_SHA384, + .pk = GNUTLS_PK_RSA_PSS, + .cert_pk = GNUTLS_PK_RSA, + .priv_pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA384, + .flags = GNUTLS_SIGN_FLAG_TLS13_OK, + .aid = {{8, 5}, SIG_SEM_DEFAULT}}, + {.name = "RSA-PSS-SHA512", + .oid = PK_PKIX1_RSA_PSS_OID, + .id = GNUTLS_SIGN_RSA_PSS_SHA512, + .pk = GNUTLS_PK_RSA_PSS, + .priv_pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA512, + .flags = GNUTLS_SIGN_FLAG_TLS13_OK, + .aid = {{8, 0x0B}, SIG_SEM_DEFAULT}}, + {.name = "RSA-PSS-RSAE-SHA512", + .oid = PK_PKIX1_RSA_PSS_OID, + .id = GNUTLS_SIGN_RSA_PSS_RSAE_SHA512, + .pk = GNUTLS_PK_RSA_PSS, + .cert_pk = GNUTLS_PK_RSA, + .priv_pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA512, + .flags = GNUTLS_SIGN_FLAG_TLS13_OK, + .aid = {{8, 6}, SIG_SEM_DEFAULT}}, + + /* Ed25519: The hash algorithm here is set to be SHA512, although that is + * an internal detail of Ed25519; we set it, because CMS/PKCS#7 requires + * that mapping. */ + {.name = "EdDSA-Ed25519", + .oid = SIG_EDDSA_SHA512_OID, + .id = GNUTLS_SIGN_EDDSA_ED25519, + .pk = GNUTLS_PK_EDDSA_ED25519, + .hash = GNUTLS_DIG_SHA512, + .flags = GNUTLS_SIGN_FLAG_TLS13_OK, + .aid = {{8, 7}, SIG_SEM_DEFAULT}}, + + /* Ed448: The hash algorithm here is set to be SHAKE256, although that is + * an internal detail of Ed448; we set it, because CMS/PKCS#7 requires + * that mapping. */ + {.name = "EdDSA-Ed448", + .oid = SIG_ED448_OID, + .id = GNUTLS_SIGN_EDDSA_ED448, + .pk = GNUTLS_PK_EDDSA_ED448, + .hash = GNUTLS_DIG_SHAKE_256, + .flags = GNUTLS_SIGN_FLAG_TLS13_OK, + .aid = {{8, 8}, SIG_SEM_DEFAULT}, + .hash_output_size = 114}, + + /* ECDSA */ + /* The following three signature algorithms + * have different semantics when used under TLS 1.2 + * or TLS 1.3. Under the former they behave as the + * as ECDSA signed by SHAXXX by any curve, but under the + * latter they are restricted to a single curve. + * For this reason the ECDSA-SHAXXX algorithms act + * as an alias to them. */ + /* we have intentionally the ECDSA-SHAXXX algorithms first + * so that gnutls_pk_to_sign() will return these. */ + {.name = "ECDSA-SHA256", + .oid = "1.2.840.10045.4.3.2", + .id = GNUTLS_SIGN_ECDSA_SHA256, + .pk = GNUTLS_PK_ECDSA, + .hash = GNUTLS_DIG_SHA256, + .aid = {{4, 3}, SIG_SEM_PRE_TLS12}}, + {.name = "ECDSA-SHA384", + .oid = "1.2.840.10045.4.3.3", + .id = GNUTLS_SIGN_ECDSA_SHA384, + .pk = GNUTLS_PK_ECDSA, + .hash = GNUTLS_DIG_SHA384, + .aid = {{5, 3}, SIG_SEM_PRE_TLS12}}, + {.name = "ECDSA-SHA512", + .oid = "1.2.840.10045.4.3.4", + .id = GNUTLS_SIGN_ECDSA_SHA512, + .pk = GNUTLS_PK_ECDSA, + .hash = GNUTLS_DIG_SHA512, + .aid = {{6, 3}, SIG_SEM_PRE_TLS12}}, + + {.name = "ECDSA-SECP256R1-SHA256", + .id = GNUTLS_SIGN_ECDSA_SECP256R1_SHA256, + .pk = GNUTLS_PK_ECDSA, + .curve = GNUTLS_ECC_CURVE_SECP256R1, + .hash = GNUTLS_DIG_SHA256, + .flags = GNUTLS_SIGN_FLAG_TLS13_OK, + .aid = {{4, 3}, SIG_SEM_TLS13}}, + {.name = "ECDSA-SECP384R1-SHA384", + .id = GNUTLS_SIGN_ECDSA_SECP384R1_SHA384, + .pk = GNUTLS_PK_ECDSA, + .curve = GNUTLS_ECC_CURVE_SECP384R1, + .hash = GNUTLS_DIG_SHA384, + .flags = GNUTLS_SIGN_FLAG_TLS13_OK, + .aid = {{5, 3}, SIG_SEM_TLS13}}, + {.name = "ECDSA-SECP521R1-SHA512", + .id = GNUTLS_SIGN_ECDSA_SECP521R1_SHA512, + .pk = GNUTLS_PK_ECDSA, + .curve = GNUTLS_ECC_CURVE_SECP521R1, + .hash = GNUTLS_DIG_SHA512, + .flags = GNUTLS_SIGN_FLAG_TLS13_OK, + .aid = {{6, 3}, SIG_SEM_TLS13}}, + + /* ECDSA-SHA3 */ + {.name = "ECDSA-SHA3-224", + .oid = SIG_ECDSA_SHA3_224_OID, + .id = GNUTLS_SIGN_ECDSA_SHA3_224, + .pk = GNUTLS_PK_EC, + .hash = GNUTLS_DIG_SHA3_224, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "ECDSA-SHA3-256", + .oid = SIG_ECDSA_SHA3_256_OID, + .id = GNUTLS_SIGN_ECDSA_SHA3_256, + .pk = GNUTLS_PK_EC, + .hash = GNUTLS_DIG_SHA3_256, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "ECDSA-SHA3-384", + .oid = SIG_ECDSA_SHA3_384_OID, + .id = GNUTLS_SIGN_ECDSA_SHA3_384, + .pk = GNUTLS_PK_EC, + .hash = GNUTLS_DIG_SHA3_384, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "ECDSA-SHA3-512", + .oid = SIG_ECDSA_SHA3_512_OID, + .id = GNUTLS_SIGN_ECDSA_SHA3_512, + .pk = GNUTLS_PK_EC, + .hash = GNUTLS_DIG_SHA3_512, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "RSA-SHA3-224", + .oid = SIG_RSA_SHA3_224_OID, + .id = GNUTLS_SIGN_RSA_SHA3_224, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA3_224, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "RSA-SHA3-256", + .oid = SIG_RSA_SHA3_256_OID, + .id = GNUTLS_SIGN_RSA_SHA3_256, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA3_256, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "RSA-SHA3-384", + .oid = SIG_RSA_SHA3_384_OID, + .id = GNUTLS_SIGN_RSA_SHA3_384, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA3_384, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "RSA-SHA3-512", + .oid = SIG_RSA_SHA3_512_OID, + .id = GNUTLS_SIGN_RSA_SHA3_512, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA3_512, + .aid = TLS_SIGN_AID_UNKNOWN}, + + /* DSA-SHA3 */ + {.name = "DSA-SHA3-224", + .oid = SIG_DSA_SHA3_224_OID, + .id = GNUTLS_SIGN_DSA_SHA3_224, + .pk = GNUTLS_PK_DSA, + .hash = GNUTLS_DIG_SHA3_224, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "DSA-SHA3-256", + .oid = SIG_DSA_SHA3_256_OID, + .id = GNUTLS_SIGN_DSA_SHA3_256, + .pk = GNUTLS_PK_DSA, + .hash = GNUTLS_DIG_SHA3_256, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "DSA-SHA3-384", + .oid = SIG_DSA_SHA3_384_OID, + .id = GNUTLS_SIGN_DSA_SHA3_384, + .pk = GNUTLS_PK_DSA, + .hash = GNUTLS_DIG_SHA3_384, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "DSA-SHA3-512", + .oid = SIG_DSA_SHA3_512_OID, + .id = GNUTLS_SIGN_DSA_SHA3_512, + .pk = GNUTLS_PK_DSA, + .hash = GNUTLS_DIG_SHA3_512, + .aid = TLS_SIGN_AID_UNKNOWN}, + + /* legacy */ + {.name = "RSA-RAW", + .oid = NULL, + .id = GNUTLS_SIGN_RSA_RAW, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_UNKNOWN, + .aid = TLS_SIGN_AID_UNKNOWN + }, + {.name = "RSA-SHA1", + .oid = SIG_RSA_SHA1_OID, + .id = GNUTLS_SIGN_RSA_SHA1, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA1, + .slevel = SHA1_SECURE_VAL, + .aid = {{2, 1}, SIG_SEM_DEFAULT}}, + {.name = "RSA-SHA1", + .oid = ISO_SIG_RSA_SHA1_OID, + .id = GNUTLS_SIGN_RSA_SHA1, + .pk = GNUTLS_PK_RSA, + .slevel = SHA1_SECURE_VAL, + .hash = GNUTLS_DIG_SHA1, + .aid = {{2, 1}, SIG_SEM_DEFAULT}}, + {.name = "RSA-SHA224", + .oid = SIG_RSA_SHA224_OID, + .id = GNUTLS_SIGN_RSA_SHA224, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_SHA224, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "RSA-RMD160", + .oid = SIG_RSA_RMD160_OID, + .id = GNUTLS_SIGN_RSA_RMD160, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_RMD160, + .slevel = _INSECURE_FOR_CERTS, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "DSA-SHA1", + .oid = SIG_DSA_SHA1_OID, + .id = GNUTLS_SIGN_DSA_SHA1, + .pk = GNUTLS_PK_DSA, + .slevel = SHA1_SECURE_VAL, + .hash = GNUTLS_DIG_SHA1, + .aid = {{2, 2}, SIG_SEM_PRE_TLS12}}, + {.name = "DSA-SHA1", + .oid = "1.3.14.3.2.27", + .id = GNUTLS_SIGN_DSA_SHA1, + .pk = GNUTLS_PK_DSA, + .hash = GNUTLS_DIG_SHA1, + .slevel = SHA1_SECURE_VAL, + .aid = {{2, 2}, SIG_SEM_PRE_TLS12}}, + {.name = "DSA-SHA224", + .oid = SIG_DSA_SHA224_OID, + .id = GNUTLS_SIGN_DSA_SHA224, + .pk = GNUTLS_PK_DSA, + .hash = GNUTLS_DIG_SHA224, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "DSA-SHA256", + .oid = SIG_DSA_SHA256_OID, + .id = GNUTLS_SIGN_DSA_SHA256, + .pk = GNUTLS_PK_DSA, + .hash = GNUTLS_DIG_SHA256, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "RSA-MD5", + .oid = SIG_RSA_MD5_OID, + .id = GNUTLS_SIGN_RSA_MD5, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_MD5, + .slevel = _INSECURE, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "RSA-MD5", + .oid = "1.3.14.3.2.25", + .id = GNUTLS_SIGN_RSA_MD5, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_MD5, + .slevel = _INSECURE, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "RSA-MD2", + .oid = SIG_RSA_MD2_OID, + .id = GNUTLS_SIGN_RSA_MD2, + .pk = GNUTLS_PK_RSA, + .hash = GNUTLS_DIG_MD2, + .slevel = _INSECURE, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "ECDSA-SHA1", + .oid = "1.2.840.10045.4.1", + .id = GNUTLS_SIGN_ECDSA_SHA1, + .pk = GNUTLS_PK_EC, + .slevel = SHA1_SECURE_VAL, + .hash = GNUTLS_DIG_SHA1, + .aid = {{2, 3}, SIG_SEM_DEFAULT}}, + {.name = "ECDSA-SHA224", + .oid = "1.2.840.10045.4.3.1", + .id = GNUTLS_SIGN_ECDSA_SHA224, + .pk = GNUTLS_PK_EC, + .hash = GNUTLS_DIG_SHA224, + .aid = TLS_SIGN_AID_UNKNOWN}, + /* GOST R 34.10-2012-512 */ + {.name = "GOSTR341012-512", + .oid = SIG_GOST_R3410_2012_512_OID, + .id = GNUTLS_SIGN_GOST_512, + .pk = GNUTLS_PK_GOST_12_512, + .hash = GNUTLS_DIG_STREEBOG_512, + .flags = GNUTLS_SIGN_FLAG_CRT_VRFY_REVERSE, + .aid = {{8, 65}, SIG_SEM_PRE_TLS12}}, + /* GOST R 34.10-2012-256 */ + {.name = "GOSTR341012-256", + .oid = SIG_GOST_R3410_2012_256_OID, + .id = GNUTLS_SIGN_GOST_256, + .pk = GNUTLS_PK_GOST_12_256, + .hash = GNUTLS_DIG_STREEBOG_256, + .flags = GNUTLS_SIGN_FLAG_CRT_VRFY_REVERSE, + .aid = {{8, 64}, SIG_SEM_PRE_TLS12}}, + /* GOST R 34.10-2001 */ + {.name = "GOSTR341001", + .oid = SIG_GOST_R3410_2001_OID, + .id = GNUTLS_SIGN_GOST_94, + .pk = GNUTLS_PK_GOST_01, + .hash = GNUTLS_DIG_GOSTR_94, + .flags = GNUTLS_SIGN_FLAG_CRT_VRFY_REVERSE, + .aid = TLS_SIGN_AID_UNKNOWN}, + /* GOST R 34.10-94 */ + {.name = "GOSTR341094", + .oid = SIG_GOST_R3410_94_OID, + .id = 0, + .pk = 0, + .hash = 0, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "DSA-SHA384", + .oid = SIG_DSA_SHA384_OID, + .id = GNUTLS_SIGN_DSA_SHA384, + .pk = GNUTLS_PK_DSA, + .hash = GNUTLS_DIG_SHA384, + .aid = TLS_SIGN_AID_UNKNOWN}, + {.name = "DSA-SHA512", + .oid = SIG_DSA_SHA512_OID, + .id = GNUTLS_SIGN_DSA_SHA512, + .pk = GNUTLS_PK_DSA, + .hash = GNUTLS_DIG_SHA512, + .aid = TLS_SIGN_AID_UNKNOWN}, + + {.name = 0, + .oid = 0, + .id = 0, + .pk = 0, + .hash = 0, + .aid = TLS_SIGN_AID_UNKNOWN} }; #define GNUTLS_SIGN_LOOP(b) \ do { \ - const gnutls_sign_entry *p; \ + const gnutls_sign_entry_st *p; \ for(p = sign_algorithms; p->name != NULL; p++) { b ; } \ } while (0) @@ -161,24 +446,63 @@ const char *gnutls_sign_get_name(gnutls_sign_algorithm_t algorithm) * * Returns: Non-zero if the provided signature algorithm is considered to be secure. **/ -int gnutls_sign_is_secure(gnutls_sign_algorithm_t algorithm) +unsigned gnutls_sign_is_secure(gnutls_sign_algorithm_t algorithm) { - gnutls_sign_algorithm_t sign = algorithm; - gnutls_digest_algorithm_t dig = GNUTLS_DIG_UNKNOWN; + return gnutls_sign_is_secure2(algorithm, 0); +} - /* avoid prefix */ - GNUTLS_SIGN_ALG_LOOP(dig = p->mac); +bool _gnutls_sign_is_secure2(const gnutls_sign_entry_st *se, unsigned int flags) +{ + if (se->hash != GNUTLS_DIG_UNKNOWN && _gnutls_digest_is_insecure(se->hash)) + return gnutls_assert_val(0); - if (dig != GNUTLS_DIG_UNKNOWN) - return _gnutls_digest_is_secure(hash_to_entry(dig)); + if (flags & GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS) + return (se->slevel==_SECURE)?1:0; + else + return (se->slevel==_SECURE || se->slevel == _INSECURE_FOR_CERTS)?1:0; +} - return 0; +int _gnutls_sign_mark_insecure(const char *name, hash_security_level_t level) +{ +#ifndef DISABLE_SYSTEM_CONFIG + gnutls_sign_entry_st *p; + + if (unlikely(level == _SECURE)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + for(p = sign_algorithms; p->name != NULL; p++) { + if (c_strcasecmp(p->name, name) == 0) { + p->slevel = level; + return 0; + } + } +#endif + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); +} + +/** + * gnutls_sign_is_secure2: + * @algorithm: is a sign algorithm + * @flags: zero or %GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS + * + * Returns: Non-zero if the provided signature algorithm is considered to be secure. + **/ +unsigned gnutls_sign_is_secure2(gnutls_sign_algorithm_t algorithm, unsigned int flags) +{ + const gnutls_sign_entry_st *se; + + se = _gnutls_sign_to_entry(algorithm); + if (se == NULL) + return 0; + + return _gnutls_sign_is_secure2(se, flags); } /** * gnutls_sign_list: * * Get a list of supported public key signature algorithms. + * This function is not thread safe. * * Returns: a (0)-terminated list of #gnutls_sign_algorithm_t * integers indicating the available ciphers. @@ -186,13 +510,19 @@ int gnutls_sign_is_secure(gnutls_sign_algorithm_t algorithm) **/ const gnutls_sign_algorithm_t *gnutls_sign_list(void) { - static gnutls_sign_algorithm_t supported_sign[MAX_ALGOS] = { 0 }; + static gnutls_sign_algorithm_t supported_sign[MAX_ALGOS+1] = { 0 }; if (supported_sign[0] == 0) { int i = 0; - GNUTLS_SIGN_LOOP(supported_sign[i++] = p->id); - supported_sign[i++] = 0; + GNUTLS_SIGN_LOOP( + /* list all algorithms, but not duplicates */ + if (supported_sign[i] != p->id) { + assert(i+1 < MAX_ALGOS); + supported_sign[i++] = p->id; + supported_sign[i+1] = 0; + } + ); } return supported_sign; @@ -212,7 +542,7 @@ gnutls_sign_algorithm_t gnutls_sign_get_id(const char *name) gnutls_sign_algorithm_t ret = GNUTLS_SIGN_UNKNOWN; GNUTLS_SIGN_LOOP( - if (strcasecmp(p->name, name) == 0) { + if (c_strcasecmp(p->name, name) == 0) { ret = p->id; break; } @@ -222,6 +552,16 @@ gnutls_sign_algorithm_t gnutls_sign_get_id(const char *name) } +const gnutls_sign_entry_st *_gnutls_oid_to_sign_entry(const char *oid) +{ + GNUTLS_SIGN_LOOP( + if (p->oid && strcmp(oid, p->oid) == 0) { + return p; + } + ); + return NULL; +} + /** * gnutls_oid_to_sign: * @oid: is an object identifier @@ -235,18 +575,25 @@ gnutls_sign_algorithm_t gnutls_sign_get_id(const char *name) **/ gnutls_sign_algorithm_t gnutls_oid_to_sign(const char *oid) { - gnutls_sign_algorithm_t ret = 0; + const gnutls_sign_entry_st *se; - GNUTLS_SIGN_LOOP( - if (p->oid && strcmp(oid, p->oid) == 0) { - ret = p->id; break;} - ); - - if (ret == 0) { + se = _gnutls_oid_to_sign_entry(oid); + if (se == NULL) { _gnutls_debug_log("Unknown SIGN OID: '%s'\n", oid); return GNUTLS_SIGN_UNKNOWN; } - return ret; + return se->id; +} + +const gnutls_sign_entry_st *_gnutls_pk_to_sign_entry(gnutls_pk_algorithm_t pk, gnutls_digest_algorithm_t hash) +{ + GNUTLS_SIGN_LOOP( + if (pk == p->pk && hash == p->hash) { + return p; + } + ); + + return NULL; } /** @@ -262,18 +609,12 @@ gnutls_sign_algorithm_t gnutls_oid_to_sign(const char *oid) gnutls_sign_algorithm_t gnutls_pk_to_sign(gnutls_pk_algorithm_t pk, gnutls_digest_algorithm_t hash) { - gnutls_sign_algorithm_t ret = 0; - - GNUTLS_SIGN_LOOP( - if (pk == p->pk && hash == p->mac) { - ret = p->id; - break; - } - ); + const gnutls_sign_entry_st *e; - if (ret == 0) + e = _gnutls_pk_to_sign_entry(pk, hash); + if (e == NULL) return GNUTLS_SIGN_UNKNOWN; - return ret; + return e->id; } /** @@ -312,7 +653,7 @@ gnutls_sign_get_hash_algorithm(gnutls_sign_algorithm_t sign) { gnutls_digest_algorithm_t ret = GNUTLS_DIG_UNKNOWN; - GNUTLS_SIGN_ALG_LOOP(ret = p->mac); + GNUTLS_SIGN_ALG_LOOP(ret = p->hash); return ret; } @@ -322,7 +663,9 @@ gnutls_sign_get_hash_algorithm(gnutls_sign_algorithm_t sign) * @sign: is a signature algorithm * * This function returns the public key algorithm corresponding to - * the given signature algorithms. + * the given signature algorithms. Note that there may be multiple + * public key algorithms supporting a particular signature type; + * when dealing with such algorithms use instead gnutls_sign_supports_pk_algorithm(). * * Since: 3.1.1 * @@ -338,25 +681,54 @@ gnutls_sign_get_pk_algorithm(gnutls_sign_algorithm_t sign) return ret; } +/** + * gnutls_sign_supports_pk_algorithm: + * @sign: is a signature algorithm + * @pk: is a public key algorithm + * + * This function returns non-zero if the public key algorithm corresponds to + * the given signature algorithm. That is, if that signature can be generated + * from the given private key algorithm. + * + * Since: 3.6.0 + * + * Returns: return non-zero when the provided algorithms are compatible. + **/ +unsigned +gnutls_sign_supports_pk_algorithm(gnutls_sign_algorithm_t sign, gnutls_pk_algorithm_t pk) +{ + const gnutls_sign_entry_st *p; + unsigned r; + + for(p = sign_algorithms; p->name != NULL; p++) { + if (p->id && p->id == sign) { + r = sign_supports_priv_pk_algorithm(p, pk); + if (r != 0) + return r; + } + } + + return 0; +} + gnutls_sign_algorithm_t -_gnutls_tls_aid_to_sign(const sign_algorithm_st * aid) +_gnutls_tls_aid_to_sign(uint8_t id0, uint8_t id1, const version_entry_st *ver) { gnutls_sign_algorithm_t ret = GNUTLS_SIGN_UNKNOWN; - if (aid->hash_algorithm == unknown_tls_aid.hash_algorithm && - aid->sign_algorithm == unknown_tls_aid.sign_algorithm) + if (id0 == 255 && id1 == 255) return ret; GNUTLS_SIGN_LOOP( - if (p->aid.hash_algorithm == aid->hash_algorithm && - p->aid.sign_algorithm == aid->sign_algorithm) { + if (p->aid.id[0] == id0 && + p->aid.id[1] == id1 && + ((p->aid.tls_sem & ver->tls_sig_sem) != 0)) { ret = p->id; break; } ); - return ret; } @@ -369,10 +741,75 @@ const sign_algorithm_st *_gnutls_sign_to_tls_aid(gnutls_sign_algorithm_t GNUTLS_SIGN_ALG_LOOP(ret = &p->aid); - if (ret != NULL && - ret->hash_algorithm == unknown_tls_aid.hash_algorithm && - ret->sign_algorithm == unknown_tls_aid.sign_algorithm) + if (ret != NULL && HAVE_UNKNOWN_SIGAID(ret)) return NULL; return ret; } + +const gnutls_sign_entry_st *_gnutls_sign_to_entry(gnutls_sign_algorithm_t sign) +{ + const gnutls_sign_entry_st *ret = NULL; + + GNUTLS_SIGN_ALG_LOOP(ret = p); + + return ret; +} + +const gnutls_sign_entry_st * +_gnutls_tls_aid_to_sign_entry(uint8_t id0, uint8_t id1, const version_entry_st *ver) +{ + if (id0 == 255 && id1 == 255) + return NULL; + + GNUTLS_SIGN_LOOP( + if (p->aid.id[0] == id0 && + p->aid.id[1] == id1 && + ((p->aid.tls_sem & ver->tls_sig_sem) != 0)) { + + return p; + } + ); + + return NULL; +} + +const gnutls_sign_entry_st * +_gnutls13_sign_get_compatible_with_privkey(gnutls_privkey_t privkey) +{ + GNUTLS_SIGN_LOOP( + if ((p->flags & GNUTLS_SIGN_FLAG_TLS13_OK) && + _gnutls_privkey_compatible_with_sig(privkey, p->id)) { + return p; + } + ); + + return NULL; +} + +unsigned +_gnutls_sign_get_hash_strength(gnutls_sign_algorithm_t sign) +{ + const gnutls_sign_entry_st *se = _gnutls_sign_to_entry(sign); + const mac_entry_st *me; + unsigned hash_output_size; + + if (unlikely(se == NULL)) + return 0; + + me = mac_to_entry(se->hash); + if (unlikely(me == NULL)) + return 0; + + if (se->hash_output_size > 0) + hash_output_size = se->hash_output_size; + else + hash_output_size = _gnutls_mac_get_algo_len(me); + + if (me->id == GNUTLS_MAC_SHAKE_128) + return MIN(hash_output_size*8/2, 128); + else if (me->id == GNUTLS_MAC_SHAKE_256) + return MIN(hash_output_size*8/2, 256); + + return hash_output_size*8/2; +} diff --git a/lib/anon_cred.c b/lib/anon_cred.c index d8f2e846ff..49c273a83b 100644 --- a/lib/anon_cred.c +++ b/lib/anon_cred.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -108,6 +108,10 @@ gnutls_anon_allocate_client_credentials(gnutls_anon_client_credentials_t * * This function will set the Diffie-Hellman parameters for an * anonymous server to use. These parameters will be used in * Anonymous Diffie-Hellman cipher suites. + * + * Deprecated: This function is unnecessary and discouraged on GnuTLS 3.6.0 + * or later. Since 3.6.0, DH parameters are negotiated + * following RFC7919. **/ void gnutls_anon_set_server_dh_params(gnutls_anon_server_credentials_t res, @@ -120,6 +124,7 @@ gnutls_anon_set_server_dh_params(gnutls_anon_server_credentials_t res, } res->dh_params = dh_params; + res->dh_sec_param = gnutls_pk_bits_to_sec_param(GNUTLS_PK_DH, _gnutls_mpi_get_nbits(dh_params->params[0])); } /** @@ -132,6 +137,10 @@ gnutls_anon_set_server_dh_params(gnutls_anon_server_credentials_t res, * Anonymous Diffie-Hellman cipher suites and will be selected from * the FFDHE set of RFC7919 according to the security level provided. * + * Deprecated: This function is unnecessary and discouraged on GnuTLS 3.6.0 + * or later. Since 3.6.0, DH parameters are negotiated + * following RFC7919. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * @@ -141,19 +150,7 @@ int gnutls_anon_set_server_known_dh_params(gnutls_anon_server_credentials_t res, gnutls_sec_param_t sec_param) { - int ret; - - if (res->deinit_dh_params) { - res->deinit_dh_params = 0; - gnutls_dh_params_deinit(res->dh_params); - res->dh_params = NULL; - } - - ret = _gnutls_set_cred_dh_params(&res->dh_params, sec_param); - if (ret < 0) - return gnutls_assert_val(ret); - - res->deinit_dh_params = 1; + res->dh_sec_param = sec_param; return 0; } @@ -166,6 +163,11 @@ gnutls_anon_set_server_known_dh_params(gnutls_anon_server_credentials_t res, * This function will set a callback in order for the server to get * the Diffie-Hellman parameters for anonymous authentication. The * callback should return %GNUTLS_E_SUCCESS (0) on success. + * + * Deprecated: This function is unnecessary and discouraged on GnuTLS 3.6.0 + * or later. Since 3.6.0, DH parameters are negotiated + * following RFC7919. + * **/ void gnutls_anon_set_server_params_function(gnutls_anon_server_credentials_t @@ -182,6 +184,11 @@ gnutls_anon_set_server_params_function(gnutls_anon_server_credentials_t * This function will set a callback in order for the server to get * the Diffie-Hellman or RSA parameters for anonymous authentication. * The callback should return %GNUTLS_E_SUCCESS (0) on success. + * + * Deprecated: This function is unnecessary and discouraged on GnuTLS 3.6.0 + * or later. Since 3.6.0, DH parameters are negotiated + * following RFC7919. + * **/ void gnutls_anon_set_params_function(gnutls_anon_server_credentials_t res, diff --git a/lib/atfork.c b/lib/atfork.c index 62e161e9dd..8d85176a72 100644 --- a/lib/atfork.c +++ b/lib/atfork.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/atfork.h b/lib/atfork.h index a6f4c2a98f..8c779ef9b9 100644 --- a/lib/atfork.h +++ b/lib/atfork.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef ATFORK_H -# define ATFORK_H +#ifndef GNUTLS_LIB_ATFORK_H +#define GNUTLS_LIB_ATFORK_H #include #include "gnutls_int.h" @@ -61,4 +61,4 @@ unsigned int _gnutls_get_forkid(void); #endif -#endif +#endif /* GNUTLS_LIB_ATFORK_H */ diff --git a/lib/atomic.h b/lib/atomic.h new file mode 100644 index 0000000000..b6db70375f --- /dev/null +++ b/lib/atomic.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_ATOMIC_H +#define GNUTLS_LIB_ATOMIC_H + +#ifdef HAVE_STDATOMIC_H +# include + +# define gnutls_atomic_uint_t atomic_uint +# define DEF_ATOMIC_INT(x) atomic_uint x +# define gnutls_atomic_increment(x) (*x)++ +# define gnutls_atomic_decrement(x) (*x)-- +# define gnutls_atomic_init(x) (*x)=(0) +# define gnutls_atomic_deinit(x) +# define gnutls_atomic_val(x) (*x) +#else +# include "locks.h" + +struct gnutls_atomic_uint_st { + void *lock; + unsigned int value; +}; +typedef struct gnutls_atomic_uint_st *gnutls_atomic_uint_t; + +# define DEF_ATOMIC_INT(x) struct gnutls_atomic_uint_st x + +inline static unsigned gnutls_atomic_val(gnutls_atomic_uint_t x) +{ + unsigned int t; + gnutls_mutex_lock(&x->lock); + t = x->value; + gnutls_mutex_unlock(&x->lock); + return t; +} + +inline static void gnutls_atomic_increment(gnutls_atomic_uint_t x) +{ + gnutls_mutex_lock(&x->lock); + x->value++; + gnutls_mutex_unlock(&x->lock); +} + +inline static void gnutls_atomic_decrement(gnutls_atomic_uint_t x) +{ + gnutls_mutex_lock(&x->lock); + x->value--; + gnutls_mutex_unlock(&x->lock); +} + +inline static void gnutls_atomic_init(gnutls_atomic_uint_t x) +{ + gnutls_mutex_init(&x->lock); + x->value = 0; +} +inline static void gnutls_atomic_deinit(gnutls_atomic_uint_t x) +{ + gnutls_mutex_deinit(&x->lock); +} +#endif + +#endif /* GNUTLS_LIB_ATOMIC_H */ diff --git a/lib/auth.c b/lib/auth.c index beaa1bfaa0..f9e6900803 100644 --- a/lib/auth.c +++ b/lib/auth.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2001-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -137,6 +138,33 @@ gnutls_credentials_set(gnutls_session_t session, } } + /* sanity tests */ + if (type == GNUTLS_CRD_CERTIFICATE) { + gnutls_certificate_credentials_t c = cred; + unsigned i; + bool allow_tls13 = 0; + unsigned key_usage; + + if (c != NULL && c->ncerts != 0) { + for (i = 0; i < c->ncerts; i++) { + key_usage = get_key_usage(session, c->certs[i].cert_list[0].pubkey); + if (key_usage == 0 || (key_usage & GNUTLS_KEY_DIGITAL_SIGNATURE)) { + allow_tls13 = 1; + break; + } + } + + if (session->security_parameters.entity == GNUTLS_SERVER && + !c->tls13_ok) + allow_tls13 = 0; + + if (!allow_tls13) { + /* to prevent the server random indicate TLS1.3 support */ + session->internals.flags |= INT_FLAG_NO_TLS13; + } + } + } + return 0; } @@ -168,7 +196,7 @@ int gnutls_credentials_get(gnutls_session_t session, gnutls_credentials_type_t type, void **cred) { -const void *_cred; + const void *_cred; _cred = _gnutls_get_cred(session, type); if (_cred == NULL) @@ -192,21 +220,18 @@ const void *_cred; * %GNUTLS_KX_RSA, %GNUTLS_KX_DHE_RSA), the same function are to be * used to access the authentication data. * + * Note that on resumed sessions, this function returns the schema + * used in the original session authentication. + * * Returns: The type of credentials for the current authentication * schema, a #gnutls_credentials_type_t type. **/ gnutls_credentials_type_t gnutls_auth_get_type(gnutls_session_t session) { -/* This is not the credentials we must set, but the authentication data - * we get by the peer, so it should be reversed. - */ - int server = - session->security_parameters.entity == GNUTLS_SERVER ? 0 : 1; - - return - _gnutls_map_kx_get_cred(_gnutls_cipher_suite_get_kx_algo - (session->security_parameters. - cipher_suite), server); + if (session->security_parameters.entity == GNUTLS_SERVER) + return gnutls_auth_client_get_type(session); + else + return gnutls_auth_server_get_type(session); } /** @@ -217,16 +242,16 @@ gnutls_credentials_type_t gnutls_auth_get_type(gnutls_session_t session) * The returned information is to be used to distinguish the function used * to access authentication data. * + * Note that on resumed sessions, this function returns the schema + * used in the original session authentication. + * * Returns: The type of credentials for the server authentication * schema, a #gnutls_credentials_type_t type. **/ gnutls_credentials_type_t gnutls_auth_server_get_type(gnutls_session_t session) { - return - _gnutls_map_kx_get_cred(_gnutls_cipher_suite_get_kx_algo - (session->security_parameters. - cipher_suite), 1); + return session->security_parameters.server_auth_type; } /** @@ -237,16 +262,16 @@ gnutls_auth_server_get_type(gnutls_session_t session) * The returned information is to be used to distinguish the function used * to access authentication data. * + * Note that on resumed sessions, this function returns the schema + * used in the original session authentication. + * * Returns: The type of credentials for the client authentication * schema, a #gnutls_credentials_type_t type. **/ gnutls_credentials_type_t gnutls_auth_client_get_type(gnutls_session_t session) { - return - _gnutls_map_kx_get_cred(_gnutls_cipher_suite_get_kx_algo - (session->security_parameters. - cipher_suite), 0); + return session->security_parameters.client_auth_type; } @@ -342,14 +367,17 @@ void _gnutls_free_auth_info(gnutls_session_t session) dh_info = &info->dh; for (i = 0; i < info->ncerts; i++) { - _gnutls_free_datum(&info-> - raw_certificate_list - [i]); + _gnutls_free_datum(&info->raw_certificate_list[i]); + } + + for (i = 0; i < info->nocsp; i++) { + _gnutls_free_datum(&info->raw_ocsp_list[i]); } gnutls_free(info->raw_certificate_list); - info->raw_certificate_list = NULL; + gnutls_free(info->raw_ocsp_list); info->ncerts = 0; + info->nocsp = 0; #ifdef ENABLE_DHE _gnutls_free_dh_info(dh_info); @@ -364,7 +392,6 @@ void _gnutls_free_auth_info(gnutls_session_t session) } gnutls_free(session->key.auth_info); - session->key.auth_info = NULL; session->key.auth_info_size = 0; session->key.auth_info_type = 0; @@ -377,7 +404,7 @@ void _gnutls_free_auth_info(gnutls_session_t session) * info structure to a different type. */ int -_gnutls_auth_info_set(gnutls_session_t session, +_gnutls_auth_info_init(gnutls_session_t session, gnutls_credentials_type_t type, int size, int allow_change) { diff --git a/lib/auth.h b/lib/auth.h index 0674e1807b..7e2f3afdc4 100644 --- a/lib/auth.h +++ b/lib/auth.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_AUTH_H -#define GNUTLS_AUTH_H +#ifndef GNUTLS_LIB_AUTH_H +#define GNUTLS_LIB_AUTH_H #include "str.h" @@ -54,10 +54,10 @@ typedef struct mod_auth_st_int { } mod_auth_st; const void *_gnutls_get_cred(gnutls_session_t session, - gnutls_credentials_type_t kx); + gnutls_credentials_type_t type); const void *_gnutls_get_kx_cred(gnutls_session_t session, gnutls_kx_algorithm_t algo); -int _gnutls_auth_info_set(gnutls_session_t session, +int _gnutls_auth_info_init(gnutls_session_t session, gnutls_credentials_type_t type, int size, int allow_change); @@ -83,4 +83,4 @@ void *_gnutls_get_auth_info(gnutls_session_t session, gnutls_credentials_type_t return NULL; } -#endif +#endif /* GNUTLS_LIB_AUTH_H */ diff --git a/lib/auth/Makefile.am b/lib/auth/Makefile.am index 9df2fa13b8..e85eaaef81 100644 --- a/lib/auth/Makefile.am +++ b/lib/auth/Makefile.am @@ -16,7 +16,7 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see include $(top_srcdir)/lib/common.mk @@ -26,8 +26,7 @@ AM_CPPFLAGS = \ -I$(srcdir)/../includes \ -I$(builddir)/../includes \ -I$(builddir)/../../gl \ - -I$(srcdir)/.. \ - -I$(srcdir)/../opencdk + -I$(srcdir)/.. if ENABLE_MINITASN1 AM_CPPFLAGS += -I$(srcdir)/../minitasn1 @@ -39,4 +38,4 @@ libgnutls_auth_la_SOURCES = anon.c cert.c dh_common.c dhe.c \ rsa_psk.c dhe_psk.c psk.c psk_passwd.c rsa.c srp_kx.c \ srp_passwd.c srp_rsa.c srp_sb64.c anon.h cert.h dh_common.h \ psk.h psk_passwd.h srp_kx.h srp_passwd.h anon_ecdh.c \ - ecdhe.c ecdhe.h rsa_common.h + ecdhe.c ecdhe.h rsa_common.h vko_gost.c diff --git a/lib/auth/anon.c b/lib/auth/anon.c index 24cfd74f0d..2fc2cd77ae 100644 --- a/lib/auth/anon.c +++ b/lib/auth/anon.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2000-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -62,10 +63,7 @@ const mod_auth_st anon_auth_struct = { static int gen_anon_server_kx(gnutls_session_t session, gnutls_buffer_st * data) { - bigint_t g, p; - const bigint_t *mpis; int ret; - gnutls_dh_params_t dh_params; gnutls_anon_server_credentials_t cred; cred = (gnutls_anon_server_credentials_t) @@ -75,30 +73,17 @@ gen_anon_server_kx(gnutls_session_t session, gnutls_buffer_st * data) return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } - dh_params = - _gnutls_get_dh_params(cred->dh_params, cred->params_func, - session); - mpis = _gnutls_dh_params_to_mpi(dh_params); - if (mpis == NULL) { - gnutls_assert(); - return GNUTLS_E_NO_TEMPORARY_DH_PARAMS; - } - - p = mpis[0]; - g = mpis[1]; - if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_ANON, + _gnutls_auth_info_init(session, GNUTLS_CRD_ANON, sizeof(anon_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; } - _gnutls_dh_set_group(session, g, p); - - ret = _gnutls_set_dh_pk_params(session, g, p, dh_params->q_bits); - if (ret < 0) + ret = _gnutls_figure_dh_params(session, cred->dh_params, cred->params_func, cred->dh_sec_param); + if (ret < 0) { return gnutls_assert_val(ret); + } ret = _gnutls_dh_common_print_server_kx(session, data); @@ -114,36 +99,8 @@ static int proc_anon_client_kx(gnutls_session_t session, uint8_t * data, size_t _data_size) { - gnutls_anon_server_credentials_t cred; - int ret; - bigint_t p, g; - gnutls_dh_params_t dh_params; - const bigint_t *mpis; - - cred = (gnutls_anon_server_credentials_t) - _gnutls_get_cred(session, GNUTLS_CRD_ANON); - if (cred == NULL) { - gnutls_assert(); - return GNUTLS_E_INSUFFICIENT_CREDENTIALS; - } - - dh_params = - _gnutls_get_dh_params(cred->dh_params, cred->params_func, - session); - mpis = _gnutls_dh_params_to_mpi(dh_params); - if (mpis == NULL) { - gnutls_assert(); - return GNUTLS_E_NO_TEMPORARY_DH_PARAMS; - } - - p = mpis[0]; - g = mpis[1]; - - ret = - _gnutls_proc_dh_common_client_kx(session, data, _data_size, g, - p, NULL); - - return ret; + return + _gnutls_proc_dh_common_client_kx(session, data, _data_size, NULL); } @@ -156,7 +113,7 @@ proc_anon_server_kx(gnutls_session_t session, uint8_t * data, /* set auth_info */ if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_ANON, + _gnutls_auth_info_init(session, GNUTLS_CRD_ANON, sizeof(anon_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; diff --git a/lib/auth/anon.h b/lib/auth/anon.h index 02722c83e1..3a8db4b5b3 100644 --- a/lib/auth/anon.h +++ b/lib/auth/anon.h @@ -16,10 +16,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_AUTH_ANON_H +#define GNUTLS_LIB_AUTH_ANON_H + /* this is not to be included by gnutls_anon.c */ #include #include @@ -27,6 +30,7 @@ typedef struct gnutls_anon_server_credentials_st { gnutls_dh_params_t dh_params; unsigned deinit_dh_params; + gnutls_sec_param_t dh_sec_param; /* this callback is used to retrieve the DH or RSA * parameters. @@ -44,3 +48,5 @@ typedef struct anon_auth_info_st { } *anon_auth_info_t; typedef struct anon_auth_info_st anon_auth_info_st; + +#endif /* GNUTLS_LIB_AUTH_ANON_H */ diff --git a/lib/auth/anon_ecdh.c b/lib/auth/anon_ecdh.c index 1f8a9b7a2b..48da7393a3 100644 --- a/lib/auth/anon_ecdh.c +++ b/lib/auth/anon_ecdh.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -37,7 +37,7 @@ #include "mpi.h" #include #include -#include +#include static int gen_anon_ecdh_server_kx(gnutls_session_t, gnutls_buffer_st *); static int proc_anon_ecdh_client_kx(gnutls_session_t, uint8_t *, size_t); @@ -74,7 +74,7 @@ gen_anon_ecdh_server_kx(gnutls_session_t session, gnutls_buffer_st * data) } if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_ANON, + _gnutls_auth_info_init(session, GNUTLS_CRD_ANON, sizeof(anon_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; @@ -82,7 +82,7 @@ gen_anon_ecdh_server_kx(gnutls_session_t session, gnutls_buffer_st * data) ret = _gnutls_ecdh_common_print_server_kx(session, data, - _gnutls_session_ecc_curve_get + get_group (session)); if (ret < 0) { gnutls_assert(); @@ -107,7 +107,7 @@ proc_anon_ecdh_client_kx(gnutls_session_t session, uint8_t * data, return _gnutls_proc_ecdh_common_client_kx(session, data, _data_size, - _gnutls_session_ecc_curve_get + get_group (session), NULL); } @@ -120,7 +120,7 @@ proc_anon_ecdh_server_kx(gnutls_session_t session, uint8_t * data, /* set auth_info */ if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_ANON, + _gnutls_auth_info_init(session, GNUTLS_CRD_ANON, sizeof(anon_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; diff --git a/lib/auth/cert.c b/lib/auth/cert.c index 75f77115e4..3073a33d34 100644 --- a/lib/auth/cert.c +++ b/lib/auth/cert.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -44,49 +44,32 @@ #include #include #include +#include "abstract_int.h" #include "debug.h" -#ifdef ENABLE_OPENPGP -#include "openpgp/openpgp.h" - -static gnutls_privkey_t alloc_and_load_pgp_key(const - gnutls_openpgp_privkey_t - key, int deinit); -static gnutls_pcert_st *alloc_and_load_pgp_certs(gnutls_openpgp_crt_t cert); - -#endif - -static gnutls_pcert_st *alloc_and_load_x509_certs(gnutls_x509_crt_t * - certs, unsigned); -static gnutls_privkey_t alloc_and_load_x509_key(gnutls_x509_privkey_t key, - int deinit); - -#ifdef ENABLE_PKCS11 -static gnutls_privkey_t alloc_and_load_pkcs11_key(gnutls_pkcs11_privkey_t - key, int deinit); -#endif - static void -_gnutls_selected_certs_set(gnutls_session_t session, - gnutls_pcert_st * certs, int ncerts, - gnutls_privkey_t key, int need_free, - gnutls_status_request_ocsp_func ocsp_func, - void *ocsp_func_ptr); - -#define MAX_CLIENT_SIGN_ALGOS 3 +selected_certs_set(gnutls_session_t session, + gnutls_pcert_st * certs, int ncerts, + gnutls_ocsp_data_st *ocsp, unsigned nocsp, + gnutls_privkey_t key, int need_free, + gnutls_status_request_ocsp_func ocsp_func, + void *ocsp_func_ptr); + +#define MAX_CLIENT_SIGN_ALGOS 5 #define CERTTYPE_SIZE (MAX_CLIENT_SIGN_ALGOS+1) -typedef enum CertificateSigType { RSA_SIGN = 1, DSA_SIGN = 2, ECDSA_SIGN = 64 +typedef enum CertificateSigType { RSA_SIGN = 1, DSA_SIGN = 2, ECDSA_SIGN = 64, +#ifdef ENABLE_GOST + GOSTR34102012_256_SIGN = 67, + GOSTR34102012_512_SIGN = 68 +#endif } CertificateSigType; -/* Copies data from a internal certificate struct (gnutls_pcert_st) to - * exported certificate struct (cert_auth_info_t) +/* Moves data from an internal certificate struct (gnutls_pcert_st) to + * another internal certificate struct (cert_auth_info_t), and deinitializes + * the former. */ -static int copy_certificate_auth_info(cert_auth_info_t info, gnutls_pcert_st * certs, size_t ncerts, /* openpgp only */ - void *keyid) +int _gnutls_pcert_to_auth_info(cert_auth_info_t info, gnutls_pcert_st * certs, size_t ncerts) { - /* Copy peer's information to auth_info_t - */ - int ret; size_t i, j; if (info->raw_certificate_list != NULL) { @@ -108,40 +91,18 @@ static int copy_certificate_auth_info(cert_auth_info_t info, gnutls_pcert_st * c return GNUTLS_E_MEMORY_ERROR; } - for (i = 0; i < ncerts; i++) { - if (certs[i].cert.size > 0) { - ret = - _gnutls_set_datum(&info->raw_certificate_list[i], - certs[i].cert.data, - certs[i].cert.size); - if (ret < 0) { - gnutls_assert(); - goto clear; - } - } - } - info->ncerts = ncerts; info->cert_type = certs[0].type; + info->ncerts = ncerts; -#ifdef ENABLE_OPENPGP - if (certs[0].type == GNUTLS_CRT_OPENPGP) { - if (keyid) - memcpy(info->subkey_id, keyid, - GNUTLS_OPENPGP_KEYID_SIZE); + for (i = 0; i < ncerts; i++) { + info->raw_certificate_list[i].data = certs[i].cert.data; + info->raw_certificate_list[i].size = certs[i].cert.size; + certs[i].cert.data = NULL; + gnutls_pcert_deinit(&certs[i]); } -#endif + gnutls_free(certs); return 0; - - clear: - - for (j = 0; j < i; j++) - _gnutls_free_datum(&info->raw_certificate_list[j]); - - gnutls_free(info->raw_certificate_list); - info->raw_certificate_list = NULL; - - return ret; } /* returns 0 if the algo_to-check exists in the pk_algos list, @@ -161,7 +122,7 @@ check_pk_algo_in_list(const gnutls_pk_algorithm_t * return -1; } -/* Returns the issuer's Distinguished name in odn, of the certificate +/* Returns the issuer's Distinguished name in odn, of the certificate * specified in cert. */ static int cert_get_issuer_dn(gnutls_pcert_st * cert, gnutls_datum_t * odn) @@ -208,22 +169,23 @@ static int cert_get_issuer_dn(gnutls_pcert_st * cert, gnutls_datum_t * odn) /* Locates the most appropriate x509 certificate using the * given DN. If indx == -1 then no certificate was found. * - * That is to guess which certificate to use, based on the + * That is to guess which certificate to use, based on the * CAs and sign algorithms supported by the peer server. */ static int find_x509_client_cert(gnutls_session_t session, const gnutls_certificate_credentials_t cred, - uint8_t * _data, size_t _data_size, + const uint8_t * _data, size_t _data_size, const gnutls_pk_algorithm_t * pk_algos, int pk_algos_length, int *indx) { unsigned size; - gnutls_datum_t odn = { NULL, 0 }; - uint8_t *data = _data; + gnutls_datum_t odn = { NULL, 0 }, asked_dn; + const uint8_t *data = _data; ssize_t data_size = _data_size; unsigned i, j; int result, cert_pk; + unsigned key_usage; *indx = -1; @@ -231,9 +193,22 @@ find_x509_client_cert(gnutls_session_t session, * then send that one. */ if (cred->ncerts == 1 && - (data_size == 0 || (session->internals.flags & GNUTLS_FORCE_CLIENT_CERT))) { + (data_size == 0 + || (session->internals.flags & GNUTLS_FORCE_CLIENT_CERT))) { + if (cred->certs[0].cert_list[0].type == GNUTLS_CRT_X509) { + + key_usage = get_key_usage(session, cred->certs[0].cert_list[0].pubkey); + + /* For client certificates we require signatures */ + result = _gnutls_check_key_usage_for_sig(session, key_usage, 1); + if (result < 0) { + _gnutls_debug_log("Client certificate is not suitable for signing\n"); + return gnutls_assert_val(result); + } + *indx = 0; return 0; + } } do { @@ -242,6 +217,10 @@ find_x509_client_cert(gnutls_session_t session, DECR_LENGTH_RET(data_size, size, 0); data += 2; + asked_dn.data = (void*)data; + asked_dn.size = size; + _gnutls_dn_log("Peer requested CA", &asked_dn); + for (i = 0; i < cred->ncerts; i++) { for (j = 0; j < cred->certs[i].cert_list_length; j++) { if ((result = @@ -252,9 +231,17 @@ find_x509_client_cert(gnutls_session_t session, return result; } - if (odn.size == 0 || odn.size != size) + if (odn.size == 0 || odn.size != asked_dn.size) continue; + key_usage = get_key_usage(session, cred->certs[i].cert_list[0].pubkey); + + /* For client certificates we require signatures */ + if (_gnutls_check_key_usage_for_sig(session, key_usage, 1) < 0) { + _gnutls_debug_log("Client certificate is not suitable for signing\n"); + continue; + } + /* If the DN matches and * the *_SIGN algorithm matches * the cert is our cert! @@ -265,7 +252,7 @@ find_x509_client_cert(gnutls_session_t session, [0].pubkey, NULL); - if ((memcmp(odn.data, data, size) == 0) && + if ((memcmp(odn.data, asked_dn.data, asked_dn.size) == 0) && (check_pk_algo_in_list (pk_algos, pk_algos_length, cert_pk) == 0)) { @@ -289,51 +276,62 @@ find_x509_client_cert(gnutls_session_t session, } -#ifdef ENABLE_OPENPGP -/* Locates the most appropriate openpgp cert + +/* Locates the first raw public-key. + * Currently it only makes sense to associate one raw pubkey per session. + * Associating more raw pubkeys with a session has no use because we + * don't know how to select the correct one. */ static int -find_openpgp_cert(const gnutls_certificate_credentials_t cred, - gnutls_pk_algorithm_t * pk_algos, - int pk_algos_length, int *indx) +find_rawpk_client_cert(gnutls_session_t session, + const gnutls_certificate_credentials_t cred, + const gnutls_pk_algorithm_t* pk_algos, + int pk_algos_length, int* indx) { - unsigned i, j; + unsigned i; + int ret; + gnutls_pk_algorithm_t pk; *indx = -1; for (i = 0; i < cred->ncerts; i++) { - for (j = 0; j < cred->certs[i].cert_list_length; j++) { + /* We know that our list length will be 1, therefore we can + * ignore the rest. + */ + if (cred->certs[i].cert_list_length == 1 && cred->certs[i].cert_list[0].type == GNUTLS_CRT_RAWPK) { + pk = gnutls_pubkey_get_pk_algorithm(cred->certs[i].cert_list[0].pubkey, NULL); - /* If the *_SIGN algorithm matches - * the cert is our cert! - */ - if ((check_pk_algo_in_list - (pk_algos, pk_algos_length, - gnutls_pubkey_get_pk_algorithm(cred->certs - [i].cert_list - [0].pubkey, - NULL)) == 0) - && (cred->certs[i].cert_list[0].type == - GNUTLS_CRT_OPENPGP)) { + /* For client certificates we require signatures */ + ret = _gnutls_check_key_usage_for_sig(session, get_key_usage(session, cred->certs[i].cert_list[0].pubkey), 1); + if (ret < 0) { + /* we return an error instead of skipping so that the user is notified about + * the key incompatibility */ + _gnutls_debug_log("Client certificate is not suitable for signing\n"); + return gnutls_assert_val(ret); + } + + /* Check whether the public-key algorithm of our credential is in + * the list with supported public-key algorithms and whether the + * cert type matches. */ + if ((check_pk_algo_in_list(pk_algos, pk_algos_length, pk) == 0)) { + // We found a compatible credential *indx = i; break; } } - if (*indx != -1) - break; } return 0; } -#endif + /* Returns the number of issuers in the server's * certificate request packet. */ static int -get_issuers_num(gnutls_session_t session, uint8_t * data, ssize_t data_size) +get_issuers_num(gnutls_session_t session, const uint8_t * data, ssize_t data_size) { - int issuers_dn_len = 0, result; + int issuers_dn_len = 0; unsigned size; /* Count the number of the given issuers; @@ -344,34 +342,23 @@ get_issuers_num(gnutls_session_t session, uint8_t * data, ssize_t data_size) if (data_size == 0 || data == NULL) return 0; - if (data_size > 0) - do { - /* This works like DECR_LEN() - */ - result = GNUTLS_E_UNEXPECTED_PACKET_LENGTH; - DECR_LENGTH_COM(data_size, 2, goto error); - size = _gnutls_read_uint16(data); - - result = GNUTLS_E_UNEXPECTED_PACKET_LENGTH; - DECR_LENGTH_COM(data_size, size, goto error); + while (data_size > 0) { + /* This works like DECR_LEN() + */ + DECR_LENGTH_RET(data_size, 2, GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + size = _gnutls_read_uint16(data); - data += 2; + DECR_LENGTH_RET(data_size, size, GNUTLS_E_UNEXPECTED_PACKET_LENGTH); - if (size > 0) { - issuers_dn_len++; - data += size; - } - - if (data_size == 0) - break; + data += 2; + if (size > 0) { + issuers_dn_len++; + data += size; } - while (1); + } return issuers_dn_len; - - error: - return result; } /* Returns the issuers in the server's certificate request @@ -380,12 +367,12 @@ get_issuers_num(gnutls_session_t session, uint8_t * data, ssize_t data_size) static int get_issuers(gnutls_session_t session, gnutls_datum_t * issuers_dn, int issuers_len, - uint8_t * data, size_t data_size) + const uint8_t * data, size_t data_size) { int i; unsigned size; - if (gnutls_certificate_type_get(session) != GNUTLS_CRT_X509) + if (get_certificate_type(session, GNUTLS_CTYPE_CLIENT) != GNUTLS_CRT_X509) return 0; /* put the requested DNs to req_dn, only in case @@ -404,9 +391,11 @@ get_issuers(gnutls_session_t session, data += 2; - issuers_dn[i].data = data; + issuers_dn[i].data = (void*)data; issuers_dn[i].size = size; + _gnutls_dn_log("Peer requested CA", &issuers_dn[i]); + data += size; } } @@ -414,7 +403,7 @@ get_issuers(gnutls_session_t session, return 0; } -/* Calls the client or server get callback. +/* Calls the client or server certificate get callback. */ static int call_get_cert_callback(gnutls_session_t session, @@ -422,14 +411,13 @@ call_get_cert_callback(gnutls_session_t session, int issuers_dn_length, gnutls_pk_algorithm_t * pk_algos, int pk_algos_length) { - unsigned i; - gnutls_pcert_st *local_certs = NULL; gnutls_privkey_t local_key = NULL; int ret = GNUTLS_E_INTERNAL_ERROR; - gnutls_certificate_type_t type = gnutls_certificate_type_get(session); + gnutls_certificate_type_t type; gnutls_certificate_credentials_t cred; - gnutls_retr2_st st2; gnutls_pcert_st *pcert = NULL; + gnutls_ocsp_data_st *ocsp = NULL; + unsigned int ocsp_length = 0; unsigned int pcert_length = 0; cred = (gnutls_certificate_credentials_t) @@ -439,15 +427,27 @@ call_get_cert_callback(gnutls_session_t session, return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } - memset(&st2, 0, sizeof(st2)); + /* Correctly set the certificate type for ourselves */ + type = get_certificate_type(session, GNUTLS_CTYPE_OURS); + + /* Check whether a callback is set and call it */ + if (cred->get_cert_callback3) { + struct gnutls_cert_retr_st info; + unsigned int flags = 0; + + memset(&info, 0, sizeof(info)); + info.req_ca_rdn = issuers_dn; + info.nreqs = issuers_dn_length; + info.pk_algos = pk_algos; + info.pk_algos_length = pk_algos_length; + info.cred = cred; - if (cred->get_cert_callback2) { /* we avoid all allocations and transformations */ ret = - cred->get_cert_callback2(session, issuers_dn, - issuers_dn_length, pk_algos, - pk_algos_length, &pcert, - &pcert_length, &local_key); + cred->get_cert_callback3(session, &info, + &pcert, &pcert_length, + &ocsp, &ocsp_length, + &local_key, &flags); if (ret < 0) return gnutls_assert_val(GNUTLS_E_USER_ERROR); @@ -459,131 +459,15 @@ call_get_cert_callback(gnutls_session_t session, local_key = NULL; } - _gnutls_selected_certs_set(session, pcert, pcert_length, - local_key, 0, NULL, NULL); + selected_certs_set(session, pcert, pcert_length, + ocsp, ocsp_length, + local_key, (flags&GNUTLS_CERT_RETR_DEINIT_ALL)?1:0, + cred->glob_ocsp_func, cred->glob_ocsp_func_ptr); return 0; - - } else if (cred->get_cert_callback) { - ret = - cred->get_cert_callback(session, issuers_dn, - issuers_dn_length, pk_algos, - pk_algos_length, &st2); - - } else { /* compatibility mode */ - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - - if (ret < 0) { - gnutls_assert(); - return GNUTLS_E_USER_ERROR; - } - - if (st2.ncerts == 0) - return 0; /* no certificate was selected */ - - if (type != st2.cert_type) { - gnutls_assert(); - ret = GNUTLS_E_INVALID_REQUEST; - goto cleanup; - } - - if (type == GNUTLS_CRT_X509) { - local_certs = - alloc_and_load_x509_certs(st2.cert.x509, st2.ncerts); - } else { /* PGP */ - if (st2.ncerts > 1) { - gnutls_assert(); - ret = GNUTLS_E_INVALID_REQUEST; - goto cleanup; - } -#ifdef ENABLE_OPENPGP - { - local_certs = alloc_and_load_pgp_certs(st2.cert.pgp); - } -#else - ret = GNUTLS_E_UNIMPLEMENTED_FEATURE; - goto cleanup; -#endif - } - - if (local_certs == NULL) { - gnutls_assert(); - ret = GNUTLS_E_MEMORY_ERROR; - goto cleanup; - } - - switch (st2.key_type) { - case GNUTLS_PRIVKEY_OPENPGP: -#ifdef ENABLE_OPENPGP - if (st2.key.pgp != NULL) { - local_key = - alloc_and_load_pgp_key(st2.key.pgp, st2.deinit_all); - if (local_key == NULL) { - gnutls_assert(); - ret = GNUTLS_E_INTERNAL_ERROR; - goto cleanup; - } - } -#endif - break; - case GNUTLS_PRIVKEY_PKCS11: -#ifdef ENABLE_PKCS11 - if (st2.key.pkcs11 != NULL) { - local_key = - alloc_and_load_pkcs11_key(st2.key.pkcs11, - st2.deinit_all); - if (local_key == NULL) { - gnutls_assert(); - ret = GNUTLS_E_INTERNAL_ERROR; - goto cleanup; - } - } -#endif - break; - case GNUTLS_PRIVKEY_X509: - if (st2.key.x509 != NULL) { - local_key = - alloc_and_load_x509_key(st2.key.x509, - st2.deinit_all); - if (local_key == NULL) { - gnutls_assert(); - ret = GNUTLS_E_INTERNAL_ERROR; - goto cleanup; - } - } - break; - default: - gnutls_assert(); - ret = GNUTLS_E_INVALID_REQUEST; - goto cleanup; - } - - _gnutls_selected_certs_set(session, local_certs, - st2.ncerts, local_key, 1, - NULL, NULL); - - ret = 0; - - cleanup: - - if (st2.cert_type == GNUTLS_CRT_X509) { - if (st2.deinit_all) { - for (i = 0; i < st2.ncerts; i++) { - gnutls_x509_crt_deinit(st2.cert.x509[i]); - } - gnutls_free(st2.cert.x509); - } } else { -#ifdef ENABLE_OPENPGP - if (st2.deinit_all) { - gnutls_openpgp_crt_deinit(st2.cert.pgp); - } -#endif + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); } - - return ret; } /* Finds the appropriate certificate depending on the cA Distinguished name @@ -593,18 +477,19 @@ call_get_cert_callback(gnutls_session_t session, * 20020128: added ability to select a certificate depending on the SIGN * algorithm (only in automatic mode). */ -static int -select_client_cert(gnutls_session_t session, - uint8_t * _data, size_t _data_size, - gnutls_pk_algorithm_t * pk_algos, int pk_algos_length) +int +_gnutls_select_client_cert(gnutls_session_t session, + const uint8_t * _data, size_t _data_size, + gnutls_pk_algorithm_t * pk_algos, int pk_algos_length) { int result; int indx = -1; gnutls_certificate_credentials_t cred; - uint8_t *data = _data; + const uint8_t *data = _data; ssize_t data_size = _data_size; int issuers_dn_length; gnutls_datum_t *issuers_dn = NULL; + gnutls_certificate_type_t cert_type; cred = (gnutls_certificate_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); @@ -613,14 +498,13 @@ select_client_cert(gnutls_session_t session, return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } - if (cred->get_cert_callback != NULL - || cred->get_cert_callback2 != NULL) { + cert_type = get_certificate_type(session, GNUTLS_CTYPE_CLIENT); - /* use a callback to get certificate + if (cred->get_cert_callback3 != NULL) { + + /* use a callback to get certificate */ - if (session->security_parameters.cert_type != GNUTLS_CRT_X509) - issuers_dn_length = 0; - else { + if (cert_type == GNUTLS_CRT_X509) { issuers_dn_length = get_issuers_num(session, data, data_size); if (issuers_dn_length < 0) { @@ -646,6 +530,8 @@ select_client_cert(gnutls_session_t session, goto cleanup; } } + } else { + issuers_dn_length = 0; } result = @@ -657,36 +543,38 @@ select_client_cert(gnutls_session_t session, } else { /* If we have no callbacks, try to guess. */ - result = 0; - - if (session->security_parameters.cert_type == GNUTLS_CRT_X509) - result = - find_x509_client_cert(session, cred, _data, _data_size, - pk_algos, pk_algos_length, &indx); -#ifdef ENABLE_OPENPGP - else if (session->security_parameters.cert_type == - GNUTLS_CRT_OPENPGP) - result = - find_openpgp_cert(cred, pk_algos, - pk_algos_length, &indx); -#endif + switch (cert_type) { + case GNUTLS_CRT_X509: + result = find_x509_client_cert(session, cred, _data, + _data_size, pk_algos, + pk_algos_length, &indx); + break; + case GNUTLS_CRT_RAWPK: + result = find_rawpk_client_cert(session, cred, + pk_algos, pk_algos_length, &indx); + break; + default: + result = GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; + break; + } if (result < 0) { - gnutls_assert(); - return result; + return gnutls_assert_val(result); } if (indx >= 0) { - _gnutls_selected_certs_set(session, - &cred->certs[indx]. - cert_list[0], - cred->certs[indx]. - cert_list_length, - cred->pkey[indx], 0, - NULL, NULL); + selected_certs_set(session, + &cred->certs[indx]. + cert_list[0], + cred->certs[indx]. + cert_list_length, + cred->certs[indx].ocsp_data, + cred->certs[indx].ocsp_data_length, + cred->certs[indx].pkey, 0, + NULL, NULL); } else { - _gnutls_selected_certs_set(session, NULL, 0, NULL, 0, - NULL, NULL); + selected_certs_set(session, NULL, 0, NULL, 0, + NULL, 0, NULL, NULL); } result = 0; @@ -706,8 +594,9 @@ static int gen_x509_crt(gnutls_session_t session, gnutls_buffer_st * data) gnutls_pcert_st *apr_cert_list; gnutls_privkey_t apr_pkey; int apr_cert_list_length; + unsigned init_pos = data->length; - /* find the appropriate certificate + /* find the appropriate certificate */ if ((ret = _gnutls_get_selected_cert(session, &apr_cert_list, @@ -728,7 +617,7 @@ static int gen_x509_crt(gnutls_session_t session, gnutls_buffer_st * data) * instead of: * 0B 00 00 00 // empty certificate handshake * - * ( the above is the whole handshake message, not + * ( the above is the whole handshake message, not * the one produced here ) */ @@ -747,193 +636,89 @@ static int gen_x509_crt(gnutls_session_t session, gnutls_buffer_st * data) return gnutls_assert_val(ret); } - return data->length; + return data->length - init_pos; } -enum PGPKeyDescriptorType - { PGP_EMPTY_KEY = 1, PGP_KEY_SUBKEY, PGP_KEY_FINGERPRINT_SUBKEY }; -#ifdef ENABLE_OPENPGP -static int -gen_openpgp_certificate(gnutls_session_t session, gnutls_buffer_st * data) +/* Generates a Raw Public Key certificate message that holds only the + * SubjectPublicKeyInfo part of a regular certificate message. + * + * Returns the number of bytes sent or a negative error code. + */ +int +_gnutls_gen_rawpk_crt(gnutls_session_t session, gnutls_buffer_st* data) { int ret; gnutls_pcert_st *apr_cert_list; gnutls_privkey_t apr_pkey; int apr_cert_list_length; - unsigned int subkey; - uint8_t type; - uint8_t fpr[GNUTLS_OPENPGP_V4_FINGERPRINT_SIZE]; - char buf[2 * GNUTLS_OPENPGP_KEYID_SIZE + 1]; - size_t fpr_size; - - /* find the appropriate certificate */ - if ((ret = - _gnutls_get_selected_cert(session, &apr_cert_list, - &apr_cert_list_length, &apr_pkey)) < 0) { - gnutls_assert(); - return ret; - } - - ret = 3 + 1 + 3; - if (apr_cert_list_length > 0) { - fpr_size = sizeof(fpr); - ret = - gnutls_pubkey_get_openpgp_key_id(apr_cert_list[0].pubkey, 0, - fpr, &fpr_size, &subkey); - if (ret < 0) + if((ret = _gnutls_get_selected_cert(session, &apr_cert_list, + &apr_cert_list_length, &apr_pkey)) < 0) { return gnutls_assert_val(ret); - - ret += 1 + fpr_size; /* for the keyid */ - _gnutls_handshake_log("Sending PGP key ID %s (%s)\n", - _gnutls_bin2hex(fpr, - GNUTLS_OPENPGP_KEYID_SIZE, - buf, sizeof(buf), - NULL), - subkey ? "subkey" : "master"); - - ret += apr_cert_list[0].cert.size; } - ret = _gnutls_buffer_append_prefix(data, 24, ret - 3); - if (ret < 0) - return gnutls_assert_val(ret); - - if (apr_cert_list_length > 0) { - type = PGP_KEY_SUBKEY; - - ret = _gnutls_buffer_append_data(data, &type, 1); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = _gnutls_buffer_append_data_prefix(data, 8, fpr, fpr_size); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = - _gnutls_buffer_append_data_prefix(data, 24, - apr_cert_list[0]. - cert.data, - apr_cert_list[0]. - cert.size); - if (ret < 0) - return gnutls_assert_val(ret); - } else { /* empty - no certificate */ - - type = PGP_EMPTY_KEY; - - ret = _gnutls_buffer_append_data(data, &type, 1); - if (ret < 0) - return gnutls_assert_val(ret); - + /* Since we are transmitting a raw public key with no additional + * certificate credentials attached to it, it doesn't make sense to + * have more than one certificate set (i.e. to have a certificate chain). + */ + assert(apr_cert_list_length <= 1); + + /* Write our certificate containing only the SubjectPublicKeyInfo to + * the output buffer. We always have exactly one certificate that + * contains our raw public key. Our message looks like: + * where + * length = 3 bytes (or 24 bits) and + * certificate = length bytes. + */ + if (apr_cert_list_length == 0) { ret = _gnutls_buffer_append_prefix(data, 24, 0); - if (ret < 0) - return gnutls_assert_val(ret); - } - - return data->length; -} - -static int -gen_openpgp_certificate_fpr(gnutls_session_t session, gnutls_buffer_st * data) -{ - int ret, packet_size; - uint8_t type, fpr[GNUTLS_OPENPGP_V4_FINGERPRINT_SIZE]; - uint8_t id[GNUTLS_OPENPGP_KEYID_SIZE]; - unsigned int subkey; - size_t fpr_size, id_size; - gnutls_pcert_st *apr_cert_list; - gnutls_privkey_t apr_pkey; - int apr_cert_list_length; - - /* find the appropriate certificate */ - if ((ret = - _gnutls_get_selected_cert(session, &apr_cert_list, - &apr_cert_list_length, &apr_pkey)) < 0) { - gnutls_assert(); - return ret; + } else { + ret = _gnutls_buffer_append_data_prefix(data, 24, + apr_cert_list[0].cert.data, + apr_cert_list[0].cert.size); } - if (apr_cert_list_length <= 0) - return gen_openpgp_certificate(session, data); - - id_size = sizeof(id); - ret = - gnutls_pubkey_get_openpgp_key_id(apr_cert_list[0].pubkey, 0, - id, &id_size, &subkey); - if (ret < 0) - return gnutls_assert_val(ret); - fpr_size = sizeof(fpr); - ret = - gnutls_pubkey_get_openpgp_key_id(apr_cert_list[0].pubkey, - GNUTLS_PUBKEY_GET_OPENPGP_FINGERPRINT, - fpr, &fpr_size, NULL); - if (ret < 0) - return gnutls_assert_val(ret); - - packet_size = 3 + 1; - packet_size += 1 + fpr_size; /* for the keyid */ - - /* Only v4 fingerprints are sent - */ - packet_size += 20 + 1; - - ret = _gnutls_buffer_append_prefix(data, 24, packet_size - 3); - if (ret < 0) - return gnutls_assert_val(ret); - - type = PGP_KEY_FINGERPRINT_SUBKEY; - ret = _gnutls_buffer_append_data(data, &type, 1); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = _gnutls_buffer_append_data_prefix(data, 8, id, id_size); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = _gnutls_buffer_append_data_prefix(data, 8, fpr, fpr_size); - if (ret < 0) - return gnutls_assert_val(ret); + if (ret < 0) return gnutls_assert_val(ret); return data->length; } -#endif + int _gnutls_gen_cert_client_crt(gnutls_session_t session, gnutls_buffer_st * data) { - switch (session->security_parameters.cert_type) { -#ifdef ENABLE_OPENPGP - case GNUTLS_CRT_OPENPGP: - if (_gnutls_openpgp_send_fingerprint(session) == 0) - return gen_openpgp_certificate(session, data); - else - return gen_openpgp_certificate_fpr(session, data); -#endif - case GNUTLS_CRT_X509: - return gen_x509_crt(session, data); + gnutls_certificate_type_t cert_type; - default: - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; + // Retrieve the (negotiated) certificate type for the client + cert_type = get_certificate_type(session, GNUTLS_CTYPE_CLIENT); + + switch (cert_type) { + case GNUTLS_CRT_X509: + return gen_x509_crt(session, data); + case GNUTLS_CRT_RAWPK: + return _gnutls_gen_rawpk_crt(session, data); + default: + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); } } int _gnutls_gen_cert_server_crt(gnutls_session_t session, gnutls_buffer_st * data) { - switch (session->security_parameters.cert_type) { -#ifdef ENABLE_OPENPGP - case GNUTLS_CRT_OPENPGP: - return gen_openpgp_certificate(session, data); -#endif - case GNUTLS_CRT_X509: - return gen_x509_crt(session, data); - default: - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; + gnutls_certificate_type_t cert_type; + + // Retrieve the (negotiated) certificate type for the server + cert_type = get_certificate_type(session, GNUTLS_CTYPE_SERVER); + + switch (cert_type) { + case GNUTLS_CRT_X509: + return gen_x509_crt(session, data); + case GNUTLS_CRT_RAWPK: + return _gnutls_gen_rawpk_crt(session, data); + default: + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); } } @@ -941,7 +726,6 @@ static int check_pk_compat(gnutls_session_t session, gnutls_pubkey_t pubkey) { unsigned cert_pk; - unsigned req_cert_pk; unsigned kx; if (session->security_parameters.entity != GNUTLS_CLIENT) @@ -953,15 +737,10 @@ int check_pk_compat(gnutls_session_t session, gnutls_pubkey_t pubkey) return GNUTLS_E_CERTIFICATE_ERROR; } - kx = _gnutls_cipher_suite_get_kx_algo(session-> - security_parameters.cipher_suite); - - req_cert_pk = _gnutls_kx_cert_pk_params(kx); + kx = session->security_parameters.cs->kx_algorithm; - if (req_cert_pk == GNUTLS_PK_UNKNOWN) /* doesn't matter */ - return 0; - - if (req_cert_pk != cert_pk) { + if (_gnutls_map_kx_get_cred(kx, 1) == GNUTLS_CRD_CERTIFICATE && + !_gnutls_kx_supports_pk(kx, cert_pk)) { gnutls_assert(); return GNUTLS_E_CERTIFICATE_ERROR; } @@ -973,7 +752,7 @@ int check_pk_compat(gnutls_session_t session, gnutls_pubkey_t pubkey) */ #define CLEAR_CERTS for(x=0;x 0 because + * the caller checks this for us. */ - tmp.size = len; - tmp.data = p; + /* Read the length of our certificate. We always have exactly + * one certificate that contains our raw public key. Our message + * looks like: + * where + * length = 3 bytes and + * certificate = length bytes. + */ + DECR_LEN(dsize, 3); + cert_size = _gnutls_read_uint24(p); + p += 3; - } else if (key_type == PGP_EMPTY_KEY) { /* the whole key */ + /* Ensure no discrepancy in data */ + if (cert_size != dsize) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); - /* Read the actual certificate */ - DECR_LEN(dsize, 3); - len = _gnutls_read_uint24(p); - p += 3; - if (len == 0) /* PGP_EMPTY_KEY */ - return GNUTLS_E_NO_CERTIFICATE_FOUND; - /* Uncomment to remove compatibility with RFC5081. - else - return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); */ + if (cert_size == 0) { + // No certificate was sent. This is not OK. + return gnutls_assert_val(GNUTLS_E_NO_CERTIFICATE_FOUND); + } - DECR_LEN(dsize, len); + DECR_LEN_FINAL(dsize, cert_size); - tmp.size = len; - tmp.data = p; + /* We are now going to read our certificate and store it into + * the authentication info structure. + */ + tmp_cert.size = cert_size; + tmp_cert.data = p; - compat = 1; - } else { - gnutls_assert(); - return GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; + peer_certificate = gnutls_calloc(1, sizeof(*peer_certificate)); + if (peer_certificate == NULL) { + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); } - if (dsize != 0) - return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); - - /* ok we now have the peer's key in tmp datum - */ - peer_certificate_list = gnutls_calloc(1, sizeof(gnutls_pcert_st)); - if (peer_certificate_list == NULL) { + // Import our raw certificate holding only a raw public key into this pcert + ret = gnutls_pcert_import_rawpk_raw(peer_certificate, &tmp_cert, GNUTLS_X509_FMT_DER, 0, 0); + if (ret < 0) { gnutls_assert(); - ret = GNUTLS_E_MEMORY_ERROR; goto cleanup; } - ret = - gnutls_pcert_import_openpgp_raw(&peer_certificate_list[0], - &tmp, - GNUTLS_OPENPGP_FMT_RAW, - (compat == - 0) ? subkey_id : NULL, 0); + // Check whether the PK algo is compatible with the negotiated KX + ret = check_pk_compat(session, peer_certificate->pubkey); if (ret < 0) { gnutls_assert(); goto cleanup; } - if (compat != 0) { - size_t t = sizeof(subkey_id); - gnutls_pubkey_get_openpgp_key_id(peer_certificate_list - [0].pubkey, 0, subkey_id, &t, - NULL); - } - - ret = check_pk_compat(session, peer_certificate_list[0].pubkey); + ret = _gnutls_auth_info_init(session, GNUTLS_CRD_CERTIFICATE, + sizeof(cert_auth_info_st), 1); if (ret < 0) { gnutls_assert(); goto cleanup; } - ret = - copy_certificate_auth_info(info, - peer_certificate_list, 1, subkey_id); + info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); + + /* Copy our imported certificate into the auth info structure + * and free our temporary cert storage peer_certificate. + */ + ret = _gnutls_pcert_to_auth_info(info, peer_certificate, 1); if (ret < 0) { gnutls_assert(); goto cleanup; } - ret = 0; - - cleanup: + return GNUTLS_E_SUCCESS; - _gnutls_free_datum(&akey); - if (peer_certificate_list != NULL) { - gnutls_pcert_deinit(&peer_certificate_list[0]); - gnutls_free(peer_certificate_list); +cleanup: + if (peer_certificate != NULL) { + gnutls_pcert_deinit(peer_certificate); + gnutls_free(peer_certificate); } - return ret; + return ret; } -#endif + int _gnutls_proc_crt(gnutls_session_t session, uint8_t * data, size_t data_size) { - int ret; gnutls_certificate_credentials_t cred; + gnutls_certificate_type_t cert_type; cred = (gnutls_certificate_credentials_t) _gnutls_get_cred(session, @@ -1315,24 +994,21 @@ int _gnutls_proc_crt(gnutls_session_t session, uint8_t * data, size_t data_size) return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } - switch (session->security_parameters.cert_type) { -#ifdef ENABLE_OPENPGP - case GNUTLS_CRT_OPENPGP: - ret = _gnutls_proc_openpgp_server_crt(session, data, data_size); - break; -#endif - case GNUTLS_CRT_X509: - ret = _gnutls_proc_x509_server_crt(session, data, data_size); - break; - default: - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } + /* Determine what certificate type we need to process. + * We need to process the certificate of the peer. */ + cert_type = get_certificate_type(session, GNUTLS_CTYPE_PEERS); - return ret; + switch (cert_type) { + case GNUTLS_CRT_X509: + return _gnutls_proc_x509_crt(session, data, data_size); + case GNUTLS_CRT_RAWPK: + return _gnutls_proc_rawpk_crt(session, data, data_size); + default: + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + } } -/* Checks if we support the given signature algorithm +/* Checks if we support the given signature algorithm * (RSA or DSA). Returns the corresponding gnutls_pk_algorithm_t * if true; */ @@ -1345,6 +1021,12 @@ inline static int _gnutls_check_supported_sign_algo(CertificateSigType algo) return GNUTLS_PK_DSA; case ECDSA_SIGN: return GNUTLS_PK_EC; +#ifdef ENABLE_GOST + case GOSTR34102012_256_SIGN: + return GNUTLS_PK_GOST_12_256; + case GOSTR34102012_512_SIGN: + return GNUTLS_PK_GOST_12_512; +#endif } return -1; @@ -1374,7 +1056,7 @@ _gnutls_proc_cert_cert_req(gnutls_session_t session, uint8_t * data, } if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_CERTIFICATE, + _gnutls_auth_info_init(session, GNUTLS_CRD_CERTIFICATE, sizeof(cert_auth_info_st), 0)) < 0) { gnutls_assert(); return ret; @@ -1425,25 +1107,19 @@ _gnutls_proc_cert_cert_req(gnutls_session_t session, uint8_t * data, size = _gnutls_read_uint16(p); p += 2; - if (session->security_parameters.cert_type == GNUTLS_CRT_OPENPGP - && size != 0) { - gnutls_assert(); - return GNUTLS_E_UNEXPECTED_PACKET_LENGTH; - } - DECR_LEN_FINAL(dsize, size); - /* We should reply with a certificate message, + /* We should reply with a certificate message, * even if we have no certificate to send. */ - session->internals.crt_requested = 1; + session->internals.hsk_flags |= HSK_CRT_ASKED; /* now we ask the user to tell which one * he wants to use. */ if ((ret = - select_client_cert(session, p, size, pk_algos, - pk_algos_length)) < 0) { + _gnutls_select_client_cert(session, p, size, pk_algos, + pk_algos_length)) < 0) { gnutls_assert(); return ret; } @@ -1462,6 +1138,7 @@ _gnutls_gen_cert_client_crt_vrfy(gnutls_session_t session, gnutls_datum_t signature = { NULL, 0 }; gnutls_sign_algorithm_t sign_algo; const version_entry_st *ver = get_version(session); + unsigned init_pos = data->length; if (unlikely(ver == NULL)) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); @@ -1496,8 +1173,8 @@ _gnutls_gen_cert_client_crt_vrfy(gnutls_session_t session, if (aid == NULL) return gnutls_assert_val(GNUTLS_E_UNKNOWN_ALGORITHM); - p[0] = aid->hash_algorithm; - p[1] = aid->sign_algorithm; + p[0] = aid->id[0]; + p[1] = aid->id[1]; ret = _gnutls_buffer_append_data(data, p, 2); if (ret < 0) { gnutls_assert(); @@ -1513,7 +1190,7 @@ _gnutls_gen_cert_client_crt_vrfy(gnutls_session_t session, goto cleanup; } - ret = data->length; + ret = data->length - init_pos; cleanup: _gnutls_free_datum(&signature); @@ -1532,6 +1209,8 @@ _gnutls_proc_cert_client_crt_vrfy(gnutls_session_t session, gnutls_pcert_st peer_cert; gnutls_sign_algorithm_t sign_algo = GNUTLS_SIGN_UNKNOWN; const version_entry_st *ver = get_version(session); + gnutls_certificate_credentials_t cred; + unsigned vflags; if (unlikely(info == NULL || info->ncerts == 0 || ver == NULL)) { gnutls_assert(); @@ -1539,14 +1218,19 @@ _gnutls_proc_cert_client_crt_vrfy(gnutls_session_t session, return GNUTLS_E_INTERNAL_ERROR; } - if (_gnutls_version_has_selectable_sighash(ver)) { - sign_algorithm_st aid; + cred = (gnutls_certificate_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + if (cred == NULL) { + gnutls_assert(); + return GNUTLS_E_INSUFFICIENT_CREDENTIALS; + } + vflags = cred->verify_flags | session->internals.additional_verify_flags; + + if (_gnutls_version_has_selectable_sighash(ver)) { DECR_LEN(dsize, 2); - aid.hash_algorithm = pdata[0]; - aid.sign_algorithm = pdata[1]; - sign_algo = _gnutls_tls_aid_to_sign(&aid); + sign_algo = _gnutls_tls_aid_to_sign(pdata[0], pdata[1], ver); if (sign_algo == GNUTLS_SIGN_UNKNOWN) { gnutls_assert(); return GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM; @@ -1569,7 +1253,7 @@ _gnutls_proc_cert_client_crt_vrfy(gnutls_session_t session, ret = _gnutls_get_auth_info_pcert(&peer_cert, session->security_parameters. - cert_type, info); + client_ctype, info); if (ret < 0) { gnutls_assert(); @@ -1577,7 +1261,7 @@ _gnutls_proc_cert_client_crt_vrfy(gnutls_session_t session, } if ((ret = - _gnutls_handshake_verify_crt_vrfy(session, &peer_cert, &sig, + _gnutls_handshake_verify_crt_vrfy(session, vflags, &peer_cert, &sig, sign_algo)) < 0) { gnutls_assert(); gnutls_pcert_deinit(&peer_cert); @@ -1593,9 +1277,10 @@ _gnutls_gen_cert_server_cert_req(gnutls_session_t session, gnutls_buffer_st * data) { gnutls_certificate_credentials_t cred; - int ret; + int ret, i; uint8_t tmp_data[CERTTYPE_SIZE]; const version_entry_st *ver = get_version(session); + unsigned init_pos = data->length; if (unlikely(ver == NULL)) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); @@ -1612,32 +1297,34 @@ _gnutls_gen_cert_server_cert_req(gnutls_session_t session, return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } - tmp_data[0] = CERTTYPE_SIZE - 1; - tmp_data[1] = RSA_SIGN; - tmp_data[2] = DSA_SIGN; - tmp_data[3] = ECDSA_SIGN; /* only these for now */ + i = 1; +#ifdef ENABLE_GOST + if (_gnutls_kx_is_vko_gost(session->security_parameters.cs->kx_algorithm)) { + tmp_data[i++] = GOSTR34102012_256_SIGN; + tmp_data[i++] = GOSTR34102012_512_SIGN; + } else +#endif + { + tmp_data[i++] = RSA_SIGN; + tmp_data[i++] = DSA_SIGN; + tmp_data[i++] = ECDSA_SIGN; + } + tmp_data[0] = i - 1; - ret = _gnutls_buffer_append_data(data, tmp_data, CERTTYPE_SIZE); + ret = _gnutls_buffer_append_data(data, tmp_data, i); if (ret < 0) return gnutls_assert_val(ret); if (_gnutls_version_has_selectable_sighash(ver)) { - uint8_t p[MAX_SIGN_ALGO_SIZE]; - ret = - _gnutls_sign_algorithm_write_params(session, p, - MAX_SIGN_ALGO_SIZE); + _gnutls_sign_algorithm_write_params(session, data); if (ret < 0) { gnutls_assert(); return ret; } - - ret = _gnutls_buffer_append_data(data, p, ret); - if (ret < 0) - return gnutls_assert_val(ret); } - if (session->security_parameters.cert_type == GNUTLS_CRT_X509 && + if (session->security_parameters.client_ctype == GNUTLS_CRT_X509 && session->internals.ignore_rdn_sequence == 0) { ret = @@ -1656,10 +1343,10 @@ _gnutls_gen_cert_server_cert_req(gnutls_session_t session, return gnutls_assert_val(ret); } - return data->length; + return data->length - init_pos; } -/* This function will return the appropriate certificate to use. +/* This function will return the appropriate certificate to use. * Fills in the apr_cert_list, apr_cert_list_length and apr_pkey. * The return value is a negative error code on error. * @@ -1674,9 +1361,6 @@ _gnutls_get_selected_cert(gnutls_session_t session, { if (session->security_parameters.entity == GNUTLS_SERVER) { - /* select_client_cert() has been called before. - */ - *apr_cert_list = session->internals.selected_cert_list; *apr_pkey = session->internals.selected_key; *apr_cert_list_length = @@ -1687,11 +1371,8 @@ _gnutls_get_selected_cert(gnutls_session_t session, return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } - } else { /* CLIENT SIDE - */ - - /* we have already decided which certificate - * to send. + } else { /* CLIENT SIDE */ + /* _gnutls_select_client_cert() must have been called before. */ *apr_cert_list = session->internals.selected_cert_list; *apr_cert_list_length = @@ -1703,176 +1384,6 @@ _gnutls_get_selected_cert(gnutls_session_t session, return 0; } -/* converts the given x509 certificate list to gnutls_pcert_st* and allocates - * space for them. - */ -static gnutls_pcert_st *alloc_and_load_x509_certs(gnutls_x509_crt_t * - certs, unsigned ncerts) -{ - gnutls_pcert_st *local_certs; - int ret = 0; - unsigned i, j; - - if (certs == NULL) - return NULL; - - local_certs = gnutls_malloc(sizeof(gnutls_pcert_st) * ncerts); - if (local_certs == NULL) { - gnutls_assert(); - return NULL; - } - - for (i = 0; i < ncerts; i++) { - ret = gnutls_pcert_import_x509(&local_certs[i], certs[i], 0); - if (ret < 0) - break; - } - - if (ret < 0) { - gnutls_assert(); - for (j = 0; j < i; j++) { - gnutls_pcert_deinit(&local_certs[j]); - } - gnutls_free(local_certs); - return NULL; - } - - return local_certs; -} - -/* converts the given x509 key to gnutls_privkey* and allocates - * space for it. - */ -static gnutls_privkey_t -alloc_and_load_x509_key(gnutls_x509_privkey_t key, int deinit) -{ - gnutls_privkey_t local_key; - int ret = 0; - - if (key == NULL) - return NULL; - - ret = gnutls_privkey_init(&local_key); - if (ret < 0) { - gnutls_assert(); - return NULL; - } - - ret = - gnutls_privkey_import_x509(local_key, key, - deinit ? - GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE : 0); - if (ret < 0) { - gnutls_assert(); - gnutls_privkey_deinit(local_key); - return NULL; - } - - return local_key; -} - -/* converts the given pgp certificate to gnutls_cert* and allocates - * space for them. - */ -#ifdef ENABLE_OPENPGP -static gnutls_pcert_st *alloc_and_load_pgp_certs(gnutls_openpgp_crt_t cert) -{ - gnutls_pcert_st *local_certs; - int ret = 0; - - if (cert == NULL) - return NULL; - - local_certs = gnutls_malloc(sizeof(gnutls_pcert_st)); - if (local_certs == NULL) { - gnutls_assert(); - return NULL; - } - - ret = gnutls_pcert_import_openpgp(local_certs, cert, 0); - if (ret < 0) { - gnutls_assert(); - return NULL; - } - - if (ret < 0) { - gnutls_assert(); - gnutls_pcert_deinit(local_certs); - gnutls_free(local_certs); - return NULL; - } - - return local_certs; -} - -/* converts the given raw key to gnutls_privkey* and allocates - * space for it. - */ -static gnutls_privkey_t -alloc_and_load_pgp_key(gnutls_openpgp_privkey_t key, int deinit) -{ - gnutls_privkey_t local_key; - int ret = 0; - - if (key == NULL) - return NULL; - - ret = gnutls_privkey_init(&local_key); - if (ret < 0) { - gnutls_assert(); - return NULL; - } - - ret = - gnutls_privkey_import_openpgp(local_key, key, - deinit ? - GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE - : 0); - if (ret < 0) { - gnutls_assert(); - gnutls_privkey_deinit(local_key); - return NULL; - } - - return local_key; -} -#endif - -#ifdef ENABLE_PKCS11 - -/* converts the given raw key to gnutls_privkey* and allocates - * space for it. - */ -static gnutls_privkey_t -alloc_and_load_pkcs11_key(gnutls_pkcs11_privkey_t key, int deinit) -{ - gnutls_privkey_t local_key; - int ret = 0; - - if (key == NULL) - return NULL; - - ret = gnutls_privkey_init(&local_key); - if (ret < 0) { - gnutls_assert(); - return NULL; - } - - ret = - gnutls_privkey_import_pkcs11(local_key, key, - deinit ? - GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE - : 0); - if (ret < 0) { - gnutls_assert(); - gnutls_privkey_deinit(local_key); - return NULL; - } - - return local_key; -} - -#endif void _gnutls_selected_certs_deinit(gnutls_session_t session) { @@ -1886,6 +1397,13 @@ void _gnutls_selected_certs_deinit(gnutls_session_t session) } gnutls_free(session->internals.selected_cert_list); + for (i = 0; + i < session->internals.selected_ocsp_length; i++) { + _gnutls_free_datum(&session->internals. + selected_ocsp[i].response); + } + gnutls_free(session->internals.selected_ocsp); + gnutls_privkey_deinit(session->internals.selected_key); } session->internals.selected_ocsp_func = NULL; @@ -1899,16 +1417,21 @@ void _gnutls_selected_certs_deinit(gnutls_session_t session) } static void -_gnutls_selected_certs_set(gnutls_session_t session, - gnutls_pcert_st * certs, int ncerts, - gnutls_privkey_t key, int need_free, - gnutls_status_request_ocsp_func ocsp_func, - void *ocsp_func_ptr) +selected_certs_set(gnutls_session_t session, + gnutls_pcert_st * certs, int ncerts, + gnutls_ocsp_data_st *ocsp, unsigned nocsp, + gnutls_privkey_t key, int need_free, + gnutls_status_request_ocsp_func ocsp_func, + void *ocsp_func_ptr) { _gnutls_selected_certs_deinit(session); session->internals.selected_cert_list = certs; session->internals.selected_cert_list_length = ncerts; + + session->internals.selected_ocsp = ocsp; + session->internals.selected_ocsp_length = nocsp; + session->internals.selected_key = key; session->internals.selected_need_free = need_free; @@ -1937,6 +1460,72 @@ static void get_server_name(gnutls_session_t session, uint8_t * name, return; } +/* Checks the compatibility of the pubkey in the certificate with the + * ciphersuite and selects a signature algorithm (if required by the + * ciphersuite and TLS version) appropriate for the certificate. If none + * can be selected returns an error. + * + * IMPORTANT + * Currently this function is only called from _gnutls_select_server_cert, + * i.e. it is only called at the server. We therefore retrieve the + * negotiated server certificate type within this function. + * If, in the future, this routine is called at the client then we + * need to adapt the implementation accordingly. + */ +static +int cert_select_sign_algorithm(gnutls_session_t session, + gnutls_pcert_st * cert, + gnutls_privkey_t pkey, + const gnutls_cipher_suite_entry_st *cs) +{ + gnutls_pubkey_t pubkey = cert->pubkey; + gnutls_certificate_type_t cert_type = cert->type; + unsigned pk = pubkey->params.algo; + unsigned key_usage; + gnutls_sign_algorithm_t algo; + const version_entry_st *ver = get_version(session); + gnutls_certificate_type_t ctype; + + assert(IS_SERVER(session)); + + /* Retrieve the server certificate type */ + ctype = get_certificate_type(session, GNUTLS_CTYPE_SERVER); + + if (ctype != cert_type) { + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } + + key_usage = get_key_usage(session, pubkey); + + /* In TLS1.3 we support only signatures; ensure the selected key supports them */ + if (ver->tls13_sem && _gnutls_check_key_usage_for_sig(session, key_usage, 1) < 0) + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + + if (!ver->tls13_sem && !_gnutls_kx_supports_pk_usage(cs->kx_algorithm, pk, key_usage)) { + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } + + if (!ver->tls13_sem && _gnutls_kx_encipher_type(cs->kx_algorithm) != CIPHER_SIGN) + return 0; + + if (!_gnutls_version_has_selectable_sighash(ver)) { + /* For SSL3.0 and TLS1.0 we lie as we cannot express md5-sha1 as + * signature algorithm. */ + algo = gnutls_pk_to_sign(cert->pubkey->params.algo, GNUTLS_DIG_SHA1); + gnutls_sign_algorithm_set_server(session, algo); + return 0; + } + + algo = _gnutls_session_get_sign_algo(session, cert, pkey, 0, cs->kx_algorithm); + if (algo == GNUTLS_SIGN_UNKNOWN) + return gnutls_assert_val(GNUTLS_E_INCOMPATIBLE_SIG_WITH_KEY); + + gnutls_sign_algorithm_set_server(session, algo); + _gnutls_handshake_log("Selected signature algorithm: %s\n", gnutls_sign_algorithm_get_name(algo)); + + return 0; +} + /* finds the most appropriate certificate in the cert list. * The 'appropriate' is defined by the user. * @@ -1948,9 +1537,7 @@ static void get_server_name(gnutls_session_t session, uint8_t * name, * */ int -_gnutls_server_select_cert(gnutls_session_t session, - gnutls_pk_algorithm_t * pk_algos, - size_t pk_algos_size) +_gnutls_select_server_cert(gnutls_session_t session, const gnutls_cipher_suite_entry_st *cs) { unsigned i, j; int idx, ret; @@ -1960,22 +1547,39 @@ _gnutls_server_select_cert(gnutls_session_t session, cred = (gnutls_certificate_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); if (cred == NULL) { - gnutls_assert(); - return GNUTLS_E_INSUFFICIENT_CREDENTIALS; + gnutls_assert(); /* we don't need to select a cert */ + return 0; } - /* If the callback which retrieves certificate has been set, - * use it and leave. + /* When a callback is set, we call it once to get the + * certificate and then check its compatibility with + * the ciphersuites. */ - if (cred->get_cert_callback - || cred->get_cert_callback2) { - ret = call_get_cert_callback(session, NULL, 0, NULL, 0); + if (cred->get_cert_callback3) { + if (session->internals.selected_cert_list_length == 0) { + ret = call_get_cert_callback(session, NULL, 0, NULL, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + if (session->internals.selected_cert_list_length == 0) + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + + _gnutls_debug_log("Selected (%s) cert\n", + gnutls_pk_get_name(session->internals.selected_cert_list[0].pubkey->params.algo)); + } + + ret = cert_select_sign_algorithm(session, + &session->internals.selected_cert_list[0], + session->internals.selected_key, + cs); if (ret < 0) return gnutls_assert_val(ret); - return ret; + + return 0; } - /* Otherwise... */ + /* Otherwise... we check the compatibility of the ciphersuite + * with all the certificates available. */ get_server_name(session, (unsigned char *)server_name, sizeof(server_name)); @@ -1988,70 +1592,57 @@ _gnutls_server_select_cert(gnutls_session_t session, */ if (server_name[0] != 0) { - for (i = 0; i < cred->ncerts; i++) { + for (j = 0; j < cred->ncerts; j++) { + i = cred->sorted_cert_idx[j]; + if (cred->certs[i].names != NULL && _gnutls_str_array_match(cred->certs[i].names, server_name) != 0) { /* if requested algorithms are also compatible select it */ - gnutls_pk_algorithm_t pk = - gnutls_pubkey_get_pk_algorithm(cred->certs - [i].cert_list - [0].pubkey, - NULL); - _gnutls_handshake_log - ("HSK[%p]: Requested server name: '%s', ctype: %s (%d)\n", - session, server_name, - gnutls_certificate_type_get_name - (session->security_parameters.cert_type), - session->security_parameters.cert_type); - - if (session->security_parameters.cert_type == - cred->certs[i].cert_list[0].type) { - for (j = 0; j < pk_algos_size; j++) - if (pk_algos[j] == pk) { - idx = i; - goto finished; - } + ret = cert_select_sign_algorithm(session, + &cred->certs[i].cert_list[0], + cred->certs[i].pkey, + cs); + if (ret >= 0) { + idx = i; + _gnutls_debug_log("Selected (%s) cert based on ciphersuite %x.%x: %s\n", + gnutls_pk_get_name(cred->certs[i].cert_list[0].pubkey->params.algo), + (unsigned)cs->id[0], + (unsigned)cs->id[1], + cs->name); + /* found */ + goto finished; } } } } - for (j = 0; j < pk_algos_size; j++) { - _gnutls_handshake_log - ("HSK[%p]: Requested PK algorithm: %s (%d) -- ctype: %s (%d)\n", - session, gnutls_pk_get_name(pk_algos[j]), pk_algos[j], - gnutls_certificate_type_get_name - (session->security_parameters.cert_type), - session->security_parameters.cert_type); + /* no name match */ + for (j = 0; j < cred->ncerts; j++) { + i = cred->sorted_cert_idx[j]; - for (i = 0; i < cred->ncerts; i++) { - gnutls_pk_algorithm_t pk = - gnutls_pubkey_get_pk_algorithm(cred->certs[i]. - cert_list[0].pubkey, - NULL); - /* find one compatible certificate - */ - _gnutls_handshake_log - ("HSK[%p]: certificate[%d] PK algorithm: %s (%d) - ctype: %s (%d)\n", - session, i, gnutls_pk_get_name(pk), pk, - gnutls_certificate_type_get_name(cred->certs - [i].cert_list - [0].type), - cred->certs[i].cert_list[0].type); - - if (pk_algos[j] == pk) { - /* if cert type matches - */ - /* *INDENT-OFF* */ - if (session->security_parameters.cert_type == cred->certs[i].cert_list[0].type) - { - idx = i; - goto finished; - } - /* *INDENT-ON* */ - } + _gnutls_handshake_log + ("HSK[%p]: checking compat of %s with certificate[%d] (%s/%s)\n", + session, cs->name, i, + gnutls_pk_get_name(cred->certs[i].cert_list[0].pubkey-> + params.algo), + gnutls_certificate_type_get_name(cred->certs[i]. + cert_list[0].type)); + + ret = cert_select_sign_algorithm(session, + &cred->certs[i].cert_list[0], + cred->certs[i].pkey, + cs); + if (ret >= 0) { + idx = i; + _gnutls_debug_log("Selected (%s) cert based on ciphersuite %x.%x: %s\n", + gnutls_pk_get_name(cred->certs[i].cert_list[0].pubkey->params.algo), + (unsigned)cs->id[0], + (unsigned)cs->id[1], + cs->name); + /* found */ + goto finished; } } @@ -2060,29 +1651,37 @@ _gnutls_server_select_cert(gnutls_session_t session, */ finished: if (idx >= 0) { - _gnutls_selected_certs_set(session, - &cred->certs[idx].cert_list[0], - cred->certs[idx].cert_list_length, - cred->pkey[idx], 0, - cred->certs[idx].ocsp_func, - cred->certs[idx].ocsp_func_ptr); + gnutls_status_request_ocsp_func ocsp_func = NULL; + void *ocsp_ptr = NULL; + gnutls_ocsp_data_st *ocsp = NULL; + unsigned nocsp = 0; + + if (cred->certs[idx].ocsp_data_length > 0) { + ocsp = &cred->certs[idx].ocsp_data[0]; + nocsp = cred->certs[idx].ocsp_data_length; + } else if (cred->glob_ocsp_func != NULL) { + ocsp_func = cred->glob_ocsp_func; + ocsp_ptr = cred->glob_ocsp_func_ptr; + } else if (cred->certs[idx].ocsp_func != NULL) { + ocsp_func = cred->certs[idx].ocsp_func; + ocsp_ptr = cred->certs[idx].ocsp_func_ptr; + } + + selected_certs_set(session, + &cred->certs[idx].cert_list[0], + cred->certs[idx].cert_list_length, + ocsp, nocsp, + cred->certs[idx].pkey, 0, + ocsp_func, + ocsp_ptr); } else { - gnutls_assert(); /* Certificate does not support REQUESTED_ALGO. */ - return GNUTLS_E_INSUFFICIENT_CREDENTIALS; + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); } return 0; } -/* Frees the rsa_info_st structure. - */ -void _gnutls_free_rsa_info(rsa_info_st * rsa) -{ - _gnutls_free_datum(&rsa->modulus); - _gnutls_free_datum(&rsa->exponent); -} - int _gnutls_gen_dhe_signature(gnutls_session_t session, gnutls_buffer_st * data, uint8_t * plain, unsigned plain_size) @@ -2140,8 +1739,8 @@ int _gnutls_gen_dhe_signature(gnutls_session_t session, goto cleanup; } - p[0] = aid->hash_algorithm; - p[1] = aid->sign_algorithm; + p[0] = aid->id[0]; + p[1] = aid->id[1]; ret = _gnutls_buffer_append_data(data, p, 2); if (ret < 0) { @@ -2176,6 +1775,9 @@ _gnutls_proc_dhe_signature(gnutls_session_t session, uint8_t * data, gnutls_pcert_st peer_cert; gnutls_sign_algorithm_t sign_algo = GNUTLS_SIGN_UNKNOWN; const version_entry_st *ver = get_version(session); + gnutls_certificate_credentials_t cred; + unsigned vflags; + gnutls_certificate_type_t cert_type; if (unlikely(info == NULL || info->ncerts == 0 || ver == NULL)) { gnutls_assert(); @@ -2183,19 +1785,28 @@ _gnutls_proc_dhe_signature(gnutls_session_t session, uint8_t * data, return GNUTLS_E_INTERNAL_ERROR; } + cred = (gnutls_certificate_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + if (cred == NULL) { + gnutls_assert(); + return GNUTLS_E_INSUFFICIENT_CREDENTIALS; + } + + vflags = cred->verify_flags | session->internals.additional_verify_flags; + /* VERIFY SIGNATURE */ if (_gnutls_version_has_selectable_sighash(ver)) { - sign_algorithm_st aid; + uint8_t id[2]; DECR_LEN(data_size, 1); - aid.hash_algorithm = *data++; + id[0] = *data++; DECR_LEN(data_size, 1); - aid.sign_algorithm = *data++; - sign_algo = _gnutls_tls_aid_to_sign(&aid); + id[1] = *data++; + + sign_algo = _gnutls_tls_aid_to_sign(id[0], id[1], ver); if (sign_algo == GNUTLS_SIGN_UNKNOWN) { _gnutls_debug_log("unknown signature %d.%d\n", - aid.sign_algorithm, - aid.hash_algorithm); + (int)id[0], (int)id[1]); gnutls_assert(); return GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM; } @@ -2208,16 +1819,17 @@ _gnutls_proc_dhe_signature(gnutls_session_t session, uint8_t * data, signature.data = data; signature.size = sigsize; + // Retrieve the negotiated certificate type + cert_type = get_certificate_type(session, GNUTLS_CTYPE_SERVER); + if ((ret = - _gnutls_get_auth_info_pcert(&peer_cert, - session->security_parameters.cert_type, - info)) < 0) { + _gnutls_get_auth_info_pcert(&peer_cert, cert_type, info)) < 0) { gnutls_assert(); return ret; } ret = - _gnutls_handshake_verify_data(session, &peer_cert, vparams, + _gnutls_handshake_verify_data(session, vflags, &peer_cert, vparams, &signature, sign_algo); gnutls_pcert_deinit(&peer_cert); diff --git a/lib/auth/cert.h b/lib/auth/cert.h index f1389fb3f6..29b7220f7b 100644 --- a/lib/auth/cert.h +++ b/lib/auth/cert.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2002-2012 Free Software Foundation, Inc. + * Copyright (C) 2016-2019 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,20 +17,29 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef AUTH_CERT_H -#define AUTH_CERT_H +#ifndef GNUTLS_LIB_AUTH_CERT_H +#define GNUTLS_LIB_AUTH_CERT_H + #include "auth.h" #include #include -#include #include #include #include +#include "abstract_int.h" + +#define MAX_OCSP_RESPONSES 8 +/* We use the structure below to hold a certificate chain + * with corresponding public/private key pair. This structure will + * also be used when raw public keys are used. The cert_list will + * then not hold the cert chain but only a raw public-key. In that case + * the list length is always 1. + */ typedef struct { gnutls_pcert_st *cert_list; /* a certificate chain */ unsigned int cert_list_length; /* its length */ @@ -37,7 +47,12 @@ typedef struct { gnutls_status_request_ocsp_func ocsp_func; void *ocsp_func_ptr; /* corresponding OCSP response function + ptr */ - char *ocsp_response_file; /* corresponding OCSP response file */ + + gnutls_ocsp_data_st ocsp_data[MAX_OCSP_RESPONSES]; + unsigned int ocsp_data_length; + + /* the private key corresponding to certificate */ + gnutls_privkey_t pkey; } certs_st; /* This structure may be complex, but it's the only way to @@ -46,6 +61,7 @@ typedef struct { typedef struct gnutls_certificate_credentials_st { gnutls_dh_params_t dh_params; unsigned deinit_dh_params; /* if the internal values are set */ + gnutls_sec_param_t dh_sec_param; /* used in RFC7919 negotiation */ /* this callback is used to retrieve the DH or RSA * parameters. @@ -55,21 +71,17 @@ typedef struct gnutls_certificate_credentials_st { certs_st *certs; unsigned ncerts; /* the number of certs */ - gnutls_privkey_t *pkey; - /* private keys. It contains ncerts private - * keys. pkey[i] corresponds to certificate in - * cert_list[i][0]. + /* contains sorted index values for certs. Sorted in a way + * that RSA-PSS keys always take precedence over plain RSA keys + * to ensure that we use only RSA-PSS keys if present for RSA-PSS + * operations. We keep indexes to certs structures above. */ - -#ifdef ENABLE_OPENPGP - /* OpenPGP specific stuff */ - gnutls_openpgp_keyring_t keyring; -#endif + unsigned int *sorted_cert_idx; /* X509 specific stuff */ gnutls_x509_trust_list_t tlist; unsigned flags; /* gnutls_certificate_flags */ - unsigned int verify_flags; /* flags to be used at + unsigned int verify_flags; /* flags to be used at * certificate verification. */ unsigned int verify_depth; @@ -77,8 +89,9 @@ typedef struct gnutls_certificate_credentials_st { /* It's a mess here. However we need to keep the old 3 functions * for compatibility */ - gnutls_certificate_retrieve_function *get_cert_callback; /* deprecated */ - gnutls_certificate_retrieve_function2 *get_cert_callback2; + gnutls_certificate_retrieve_function *legacy_cert_cb1; /* deprecated */ + gnutls_certificate_retrieve_function2 *legacy_cert_cb2; + gnutls_certificate_retrieve_function3 *get_cert_callback3; gnutls_certificate_verify_function *verify_callback; @@ -89,12 +102,11 @@ typedef struct gnutls_certificate_credentials_st { /* OCSP */ gnutls_status_request_ocsp_func glob_ocsp_func; void *glob_ocsp_func_ptr; /* corresponding OCSP response function */ -} certificate_credentials_st; -typedef struct rsa_info_st { - gnutls_datum_t modulus; - gnutls_datum_t exponent; -} rsa_info_st; + /* This is only used by server to indicate whether this + * credentials can be used for signing in TLS 1.3. */ + bool tls13_ok; +} certificate_credentials_st; /* This is the information we keep for the peer * certificate. @@ -105,21 +117,21 @@ typedef struct cert_auth_info_st { */ dh_info_st dh; - gnutls_datum_t *raw_certificate_list; /* holds the raw certificate of the - * peer. - */ - unsigned int ncerts; /* holds the size of the list above */ + /* we store the peer's OCSP responses received during + * this session. */ + gnutls_datum_t *raw_ocsp_list; + unsigned int nocsp; + + /* we store the peer's certificates received during + * this ession */ + gnutls_datum_t *raw_certificate_list; + unsigned int ncerts; gnutls_certificate_type_t cert_type; -#ifdef ENABLE_OPENPGP - uint8_t subkey_id[GNUTLS_OPENPGP_KEYID_SIZE]; -#endif } *cert_auth_info_t; typedef struct cert_auth_info_st cert_auth_info_st; -void _gnutls_free_rsa_info(rsa_info_st * rsa); - /* AUTH X509 functions */ int _gnutls_gen_cert_server_crt(gnutls_session_t, gnutls_buffer_st *); int _gnutls_gen_cert_client_crt(gnutls_session_t, gnutls_buffer_st *); @@ -133,20 +145,21 @@ int _gnutls_get_selected_cert(gnutls_session_t session, int *apr_cert_list_length, gnutls_privkey_t * apr_pkey); -int _gnutls_server_select_cert(struct gnutls_session_int *, - gnutls_pk_algorithm_t *, size_t); +int +_gnutls_select_client_cert(gnutls_session_t session, + const uint8_t * _data, size_t _data_size, + gnutls_pk_algorithm_t * pk_algos, int pk_algos_length); + +int _gnutls_pcert_to_auth_info(cert_auth_info_t info, gnutls_pcert_st * certs, size_t ncerts); + +int +_gnutls_select_server_cert(gnutls_session_t session, const gnutls_cipher_suite_entry_st *cs); void _gnutls_selected_certs_deinit(gnutls_session_t session); int _gnutls_get_auth_info_pcert(gnutls_pcert_st * gcert, gnutls_certificate_type_t type, cert_auth_info_t info); -int certificate_credential_append_crt_list(gnutls_certificate_credentials_t - res, gnutls_str_array_t names, - gnutls_pcert_st * crt, int nr); -int certificate_credentials_append_pkey(gnutls_certificate_credentials_t - res, gnutls_privkey_t pkey); - int _gnutls_selected_cert_supported_kx(struct gnutls_session_int *session, gnutls_kx_algorithm_t * alg, int *alg_size); @@ -160,4 +173,17 @@ int _gnutls_proc_dhe_signature(gnutls_session_t session, uint8_t * data, size_t _data_size, gnutls_datum_t * vparams); -#endif +int _gnutls_gen_rawpk_crt(gnutls_session_t session, gnutls_buffer_st* data); +int _gnutls_proc_rawpk_crt(gnutls_session_t session, + uint8_t * data, size_t data_size); + +inline static unsigned get_key_usage(gnutls_session_t session, gnutls_pubkey_t pubkey) +{ + if (unlikely(session->internals.priorities && + session->internals.priorities->allow_server_key_usage_violation)) + return 0; + else + return pubkey->key_usage; +} + +#endif /* GNUTLS_LIB_AUTH_CERT_H */ diff --git a/lib/auth/dh_common.c b/lib/auth/dh_common.c index b80b329862..19c205bbe8 100644 --- a/lib/auth/dh_common.c +++ b/lib/auth/dh_common.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -54,7 +54,6 @@ void _gnutls_free_dh_info(dh_info_st * dh) int _gnutls_proc_dh_common_client_kx(gnutls_session_t session, uint8_t * data, size_t _data_size, - bigint_t g, bigint_t p, gnutls_datum_t * psk_key) { uint16_t n_Y; @@ -75,17 +74,17 @@ _gnutls_proc_dh_common_client_kx(gnutls_session_t session, if (data_size != 0) return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); - if (_gnutls_mpi_init_scan_nz(&session->key.client_Y, &data[2], _n_Y)) { + if (_gnutls_mpi_init_scan_nz(&session->key.proto.tls12.dh.client_Y, &data[2], _n_Y)) { gnutls_assert(); return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; /* most likely zero or illegal size */ } - _gnutls_dh_set_peer_public(session, session->key.client_Y); + _gnutls_dh_set_peer_public(session, session->key.proto.tls12.dh.client_Y); - peer_pub.params[DH_Y] = session->key.client_Y; + peer_pub.params[DH_Y] = session->key.proto.tls12.dh.client_Y; /* calculate the key after calculating the message */ - ret = _gnutls_pk_derive(GNUTLS_PK_DH, &tmp_dh_key, &session->key.dh_params, &peer_pub); + ret = _gnutls_pk_derive(GNUTLS_PK_DH, &tmp_dh_key, &session->key.proto.tls12.dh.params, &peer_pub); if (ret < 0) { gnutls_assert(); goto error; @@ -108,8 +107,8 @@ _gnutls_proc_dh_common_client_kx(gnutls_session_t session, ret = 0; error: - _gnutls_mpi_release(&session->key.client_Y); - gnutls_pk_params_clear(&session->key.dh_params); + _gnutls_mpi_release(&session->key.proto.tls12.dh.client_Y); + gnutls_pk_params_clear(&session->key.proto.tls12.dh.params); return ret; } @@ -128,35 +127,34 @@ _gnutls_gen_dh_common_client_kx_int(gnutls_session_t session, int ret; gnutls_pk_params_st peer_pub; gnutls_datum_t tmp_dh_key = {NULL, 0}; + unsigned init_pos = data->length; gnutls_pk_params_init(&peer_pub); ret = _gnutls_pk_generate_keys(GNUTLS_PK_DH, 0, - &session->key.dh_params, 1); + &session->key.proto.tls12.dh.params, 1); if (ret < 0) return gnutls_assert_val(ret); - _gnutls_dh_set_secret_bits(session, _gnutls_mpi_get_nbits(session->key.dh_params.params[DH_X])); + _gnutls_dh_set_secret_bits(session, _gnutls_mpi_get_nbits(session->key.proto.tls12.dh.params.params[DH_X])); - ret = _gnutls_buffer_append_mpi(data, 16, session->key.dh_params.params[DH_Y], 0); + ret = _gnutls_buffer_append_mpi(data, 16, session->key.proto.tls12.dh.params.params[DH_Y], 0); if (ret < 0) { gnutls_assert(); goto error; } - peer_pub.params[DH_Y] = session->key.client_Y; + peer_pub.params[DH_Y] = session->key.proto.tls12.dh.client_Y; /* calculate the key after calculating the message */ - ret = _gnutls_pk_derive(GNUTLS_PK_DH, &tmp_dh_key, &session->key.dh_params, &peer_pub); + ret = _gnutls_pk_derive(GNUTLS_PK_DH, &tmp_dh_key, &session->key.proto.tls12.dh.params, &peer_pub); if (ret < 0) { gnutls_assert(); goto error; } - if (_gnutls_cipher_suite_get_kx_algo - (session->security_parameters.cipher_suite) - != GNUTLS_KX_DHE_PSK) { + if (session->security_parameters.cs->kx_algorithm != GNUTLS_KX_DHE_PSK) { session->key.key.data = tmp_dh_key.data; session->key.key.size = tmp_dh_key.size; } else { /* In DHE_PSK the key is set differently */ @@ -171,55 +169,32 @@ _gnutls_gen_dh_common_client_kx_int(gnutls_session_t session, goto error; } - ret = data->length; + ret = data->length - init_pos; error: - gnutls_pk_params_clear(&session->key.dh_params); + gnutls_pk_params_clear(&session->key.proto.tls12.dh.params); return ret; } -int _gnutls_set_dh_pk_params(gnutls_session_t session, bigint_t g, bigint_t p, - unsigned q_bits) -{ - /* just in case we are resuming a session */ - gnutls_pk_params_release(&session->key.dh_params); - - gnutls_pk_params_init(&session->key.dh_params); - - session->key.dh_params.params[DH_G] = _gnutls_mpi_copy(g); - if (session->key.dh_params.params[DH_G] == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - - session->key.dh_params.params[DH_P] = _gnutls_mpi_copy(p); - if (session->key.dh_params.params[DH_P] == NULL) { - _gnutls_mpi_release(&session->key.dh_params.params[DH_G]); - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - } - - session->key.dh_params.params_nr = 3; /* include empty q */ - session->key.dh_params.algo = GNUTLS_PK_DH; - session->key.dh_params.flags = q_bits; - - return 0; -} - /* Returns the bytes parsed */ int _gnutls_proc_dh_common_server_kx(gnutls_session_t session, uint8_t * data, size_t _data_size) { uint16_t n_Y, n_g, n_p; - size_t _n_Y, _n_g, _n_p; + size_t _n_Y, _n_g, _n_p, _n_q; uint8_t *data_p; uint8_t *data_g; uint8_t *data_Y; + uint8_t *data_q = NULL; int i, bits, ret, p_bits; + unsigned j; ssize_t data_size = _data_size; - + /* just in case we are resuming a session */ - gnutls_pk_params_release(&session->key.dh_params); + gnutls_pk_params_release(&session->key.proto.tls12.dh.params); - gnutls_pk_params_init(&session->key.dh_params); + gnutls_pk_params_init(&session->key.proto.tls12.dh.params); i = 0; @@ -250,56 +225,96 @@ _gnutls_proc_dh_common_server_kx(gnutls_session_t session, _n_g = n_g; _n_p = n_p; - if (_gnutls_mpi_init_scan_nz(&session->key.client_Y, data_Y, _n_Y) != 0) { + if (_gnutls_mpi_init_scan_nz(&session->key.proto.tls12.dh.client_Y, data_Y, _n_Y) != 0) { gnutls_assert(); return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; } - if (_gnutls_mpi_init_scan_nz(&session->key.dh_params.params[DH_G], data_g, _n_g) != 0) { - gnutls_assert(); - return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + /* if we are doing RFC7919 */ + if (session->internals.priorities->groups.have_ffdhe != 0) { + /* verify whether the received parameters match the advertised, otherwise + * log that. */ + for (j=0;jinternals.priorities->groups.size;j++) { + if (session->internals.priorities->groups.entry[j]->generator && + session->internals.priorities->groups.entry[j]->generator->size == n_g && + session->internals.priorities->groups.entry[j]->prime->size == n_p && + memcmp(session->internals.priorities->groups.entry[j]->generator->data, + data_g, n_g) == 0 && + memcmp(session->internals.priorities->groups.entry[j]->prime->data, + data_p, n_p) == 0) { + + session->internals.hsk_flags |= HSK_USED_FFDHE; + _gnutls_session_group_set(session, session->internals.priorities->groups.entry[j]); + session->key.proto.tls12.dh.params.qbits = *session->internals.priorities->groups.entry[j]->q_bits; + data_q = session->internals.priorities->groups.entry[j]->q->data; + _n_q = session->internals.priorities->groups.entry[j]->q->size; + break; + } + } + + if (!(session->internals.hsk_flags & HSK_USED_FFDHE)) { + _gnutls_audit_log(session, "FFDHE groups advertised, but server didn't support it; falling back to server's choice\n"); + } } - if (_gnutls_mpi_init_scan_nz(&session->key.dh_params.params[DH_P], data_p, _n_p) != 0) { + if (_gnutls_mpi_init_scan_nz(&session->key.proto.tls12.dh.params.params[DH_G], data_g, _n_g) != 0) { gnutls_assert(); - /* we release now because session->key.dh_params.params_nr is not yet set */ - _gnutls_mpi_release(&session->key.dh_params.params[DH_G]); return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; } - session->key.dh_params.params_nr = 3; /* include empty q */ - session->key.dh_params.algo = GNUTLS_PK_DH; - - bits = _gnutls_dh_get_min_prime_bits(session); - if (bits < 0) { + if (_gnutls_mpi_init_scan_nz(&session->key.proto.tls12.dh.params.params[DH_P], data_p, _n_p) != 0) { gnutls_assert(); - return bits; + /* we release now because session->key.proto.tls12.dh.params.params_nr is not yet set */ + _gnutls_mpi_release(&session->key.proto.tls12.dh.params.params[DH_G]); + return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; } - - p_bits = _gnutls_mpi_get_nbits(session->key.dh_params.params[DH_P]); - if (p_bits < bits) { - /* the prime used by the peer is not acceptable - */ - gnutls_assert(); - _gnutls_debug_log - ("Received a prime of %u bits, limit is %u\n", - (unsigned) _gnutls_mpi_get_nbits(session->key.dh_params.params[DH_P]), - (unsigned) bits); - return GNUTLS_E_DH_PRIME_UNACCEPTABLE; + if (data_q && _gnutls_mpi_init_scan_nz( + &session->key.proto.tls12.dh.params.params[DH_Q], + data_q, _n_q) != 0) { + /* we release now because params_nr is not yet set */ + _gnutls_mpi_release( + &session->key.proto.tls12.dh.params.params[DH_P]); + _gnutls_mpi_release( + &session->key.proto.tls12.dh.params.params[DH_G]); + return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; } - if (p_bits >= DEFAULT_MAX_VERIFY_BITS) { - gnutls_assert(); - _gnutls_debug_log - ("Received a prime of %u bits, limit is %u\n", - (unsigned) p_bits, - (unsigned) DEFAULT_MAX_VERIFY_BITS); - return GNUTLS_E_DH_PRIME_UNACCEPTABLE; + /* include, possibly empty, q */ + session->key.proto.tls12.dh.params.params_nr = 3; + session->key.proto.tls12.dh.params.algo = GNUTLS_PK_DH; + + if (!(session->internals.hsk_flags & HSK_USED_FFDHE)) { + bits = _gnutls_dh_get_min_prime_bits(session); + if (bits < 0) { + gnutls_assert(); + return bits; + } + + p_bits = _gnutls_mpi_get_nbits(session->key.proto.tls12.dh.params.params[DH_P]); + if (p_bits < bits) { + /* the prime used by the peer is not acceptable + */ + gnutls_assert(); + _gnutls_debug_log + ("Received a prime of %u bits, limit is %u\n", + (unsigned) _gnutls_mpi_get_nbits(session->key.proto.tls12.dh.params.params[DH_P]), + (unsigned) bits); + return GNUTLS_E_DH_PRIME_UNACCEPTABLE; + } + + if (p_bits >= DEFAULT_MAX_VERIFY_BITS) { + gnutls_assert(); + _gnutls_debug_log + ("Received a prime of %u bits, limit is %u\n", + (unsigned) p_bits, + (unsigned) DEFAULT_MAX_VERIFY_BITS); + return GNUTLS_E_DH_PRIME_UNACCEPTABLE; + } } - _gnutls_dh_set_group(session, session->key.dh_params.params[DH_G], - session->key.dh_params.params[DH_P]); - _gnutls_dh_set_peer_public(session, session->key.client_Y); + _gnutls_dh_save_group(session, session->key.proto.tls12.dh.params.params[DH_G], + session->key.proto.tls12.dh.params.params[DH_P]); + _gnutls_dh_set_peer_public(session, session->key.proto.tls12.dh.client_Y); ret = n_Y + n_p + n_g + 6; @@ -311,7 +326,8 @@ _gnutls_dh_common_print_server_kx(gnutls_session_t session, gnutls_buffer_st * data) { int ret; - unsigned q_bits = session->key.dh_params.flags; + unsigned q_bits = session->key.proto.tls12.dh.params.qbits; + unsigned init_pos = data->length; if (q_bits < 192 && q_bits != 0) { gnutls_assert(); @@ -322,31 +338,31 @@ _gnutls_dh_common_print_server_kx(gnutls_session_t session, /* Y=g^x mod p */ ret = _gnutls_pk_generate_keys(GNUTLS_PK_DH, q_bits, - &session->key.dh_params, 1); + &session->key.proto.tls12.dh.params, 1); if (ret < 0) return gnutls_assert_val(ret); - _gnutls_dh_set_secret_bits(session, _gnutls_mpi_get_nbits(session->key.dh_params.params[DH_X])); + _gnutls_dh_set_secret_bits(session, _gnutls_mpi_get_nbits(session->key.proto.tls12.dh.params.params[DH_X])); - ret = _gnutls_buffer_append_mpi(data, 16, session->key.dh_params.params[DH_P], 0); + ret = _gnutls_buffer_append_mpi(data, 16, session->key.proto.tls12.dh.params.params[DH_P], 0); if (ret < 0) { gnutls_assert(); goto cleanup; } - ret = _gnutls_buffer_append_mpi(data, 16, session->key.dh_params.params[DH_G], 0); + ret = _gnutls_buffer_append_mpi(data, 16, session->key.proto.tls12.dh.params.params[DH_G], 0); if (ret < 0) { gnutls_assert(); goto cleanup; } - ret = _gnutls_buffer_append_mpi(data, 16, session->key.dh_params.params[DH_Y], 0); + ret = _gnutls_buffer_append_mpi(data, 16, session->key.proto.tls12.dh.params.params[DH_Y], 0); if (ret < 0) { gnutls_assert(); goto cleanup; } - ret = data->length; + ret = data->length - init_pos; cleanup: return ret; diff --git a/lib/auth/dh_common.h b/lib/auth/dh_common.h index 3bd8b8ae31..7584f89cf7 100644 --- a/lib/auth/dh_common.h +++ b/lib/auth/dh_common.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef AUTH_DH_COMMON -#define AUTH_DH_COMMON +#ifndef GNUTLS_LIB_AUTH_DH_COMMON_H +#define GNUTLS_LIB_AUTH_DH_COMMON_H #include @@ -34,19 +34,17 @@ typedef struct { } dh_info_st; void _gnutls_free_dh_info(dh_info_st * dh); -int _gnutls_set_dh_pk_params(gnutls_session_t session, bigint_t g, bigint_t p, - unsigned q_bits); + int _gnutls_gen_dh_common_client_kx_int(gnutls_session_t, gnutls_buffer_st *, gnutls_datum_t * pskkey); int _gnutls_gen_dh_common_client_kx(gnutls_session_t, gnutls_buffer_st *); int _gnutls_proc_dh_common_client_kx(gnutls_session_t session, uint8_t * data, size_t _data_size, - bigint_t p, bigint_t g, gnutls_datum_t * psk_key); int _gnutls_dh_common_print_server_kx(gnutls_session_t, gnutls_buffer_st * data); int _gnutls_proc_dh_common_server_kx(gnutls_session_t session, uint8_t * data, size_t _data_size); -#endif +#endif /* GNUTLS_LIB_AUTH_DH_COMMON_H */ diff --git a/lib/auth/dhe.c b/lib/auth/dhe.c index 31b4bc1158..1d16cde355 100644 --- a/lib/auth/dhe.c +++ b/lib/auth/dhe.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2000-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -84,11 +85,9 @@ const mod_auth_st dhe_dss_auth_struct = { static int gen_dhe_server_kx(gnutls_session_t session, gnutls_buffer_st * data) { - bigint_t g, p; - const bigint_t *mpis; int ret = 0; gnutls_certificate_credentials_t cred; - gnutls_dh_params_t dh_params; + unsigned sig_pos; cred = (gnutls_certificate_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); @@ -97,31 +96,20 @@ gen_dhe_server_kx(gnutls_session_t session, gnutls_buffer_st * data) return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } - - if ((ret = _gnutls_auth_info_set(session, GNUTLS_CRD_CERTIFICATE, + if ((ret = _gnutls_auth_info_init(session, GNUTLS_CRD_CERTIFICATE, sizeof(cert_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; } - dh_params = - _gnutls_get_dh_params(cred->dh_params, cred->params_func, - session); - mpis = _gnutls_dh_params_to_mpi(dh_params); - if (mpis == NULL) { - gnutls_assert(); - return GNUTLS_E_NO_TEMPORARY_DH_PARAMS; + ret = + _gnutls_figure_dh_params(session, cred->dh_params, cred->params_func, cred->dh_sec_param); + if (ret < 0) { + return gnutls_assert_val(ret); } - p = mpis[0]; - g = mpis[1]; - - _gnutls_dh_set_group(session, g, p); - - ret = _gnutls_set_dh_pk_params(session, g, p, dh_params->q_bits); - if (ret < 0) - return gnutls_assert_val(ret); + sig_pos = data->length; ret = _gnutls_dh_common_print_server_kx(session, data); @@ -131,8 +119,8 @@ gen_dhe_server_kx(gnutls_session_t session, gnutls_buffer_st * data) } /* Generate the signature. */ - return _gnutls_gen_dhe_signature(session, data, data->data, - data->length); + return _gnutls_gen_dhe_signature(session, data, &data->data[sig_pos], + data->length-sig_pos); } @@ -159,28 +147,6 @@ static int proc_dhe_client_kx(gnutls_session_t session, uint8_t * data, size_t _data_size) { - gnutls_certificate_credentials_t cred; - bigint_t p, g; - const bigint_t *mpis; - gnutls_dh_params_t dh_params; - - cred = (gnutls_certificate_credentials_t) - _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); - if (cred == NULL) { - gnutls_assert(); - return GNUTLS_E_INSUFFICIENT_CREDENTIALS; - } - - dh_params = - _gnutls_get_dh_params(cred->dh_params, cred->params_func, - session); - mpis = _gnutls_dh_params_to_mpi(dh_params); - if (mpis == NULL) - return gnutls_assert_val(GNUTLS_E_NO_TEMPORARY_DH_PARAMS); - - p = mpis[0]; - g = mpis[1]; - return _gnutls_proc_dh_common_client_kx(session, data, _data_size, - g, p, NULL); + NULL); } diff --git a/lib/auth/dhe_psk.c b/lib/auth/dhe_psk.c index d4c6b6e0c5..a98ef9c9ef 100644 --- a/lib/auth/dhe_psk.c +++ b/lib/auth/dhe_psk.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2005-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -99,6 +100,7 @@ gen_ecdhe_psk_client_kx(gnutls_session_t session, gnutls_buffer_st * data) int ret, free; gnutls_psk_client_credentials_t cred; gnutls_datum_t username, key; + unsigned init_pos = data->length; cred = (gnutls_psk_client_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_PSK); @@ -126,7 +128,7 @@ gen_ecdhe_psk_client_kx(gnutls_session_t session, gnutls_buffer_st * data) goto cleanup; } - ret = data->length; + ret = data->length - init_pos; cleanup: if (free) { @@ -143,6 +145,7 @@ gen_dhe_psk_client_kx(gnutls_session_t session, gnutls_buffer_st * data) int ret, free; gnutls_psk_client_credentials_t cred; gnutls_datum_t username, key; + unsigned init_pos = data->length; cred = (gnutls_psk_client_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_PSK); @@ -170,7 +173,7 @@ gen_dhe_psk_client_kx(gnutls_session_t session, gnutls_buffer_st * data) goto cleanup; } - ret = data->length; + ret = data->length - init_pos; cleanup: if (free) { @@ -184,10 +187,7 @@ gen_dhe_psk_client_kx(gnutls_session_t session, gnutls_buffer_st * data) static int gen_dhe_psk_server_kx(gnutls_session_t session, gnutls_buffer_st * data) { - bigint_t g, p; - const bigint_t *mpis; int ret; - gnutls_dh_params_t dh_params; gnutls_psk_server_credentials_t cred; gnutls_datum_t hint = {NULL, 0}; @@ -198,26 +198,19 @@ gen_dhe_psk_server_kx(gnutls_session_t session, gnutls_buffer_st * data) return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } - dh_params = - _gnutls_get_dh_params(cred->dh_params, cred->params_func, - session); - mpis = _gnutls_dh_params_to_mpi(dh_params); - if (mpis == NULL) { - gnutls_assert(); - return GNUTLS_E_NO_TEMPORARY_DH_PARAMS; - } - - p = mpis[0]; - g = mpis[1]; - if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_PSK, + _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; } - _gnutls_dh_set_group(session, g, p); + ret = + _gnutls_figure_dh_params(session, cred->dh_params, cred->params_func, cred->dh_sec_param); + if (ret < 0) { + gnutls_assert(); + return ret; + } if (cred->hint) { hint.data = (uint8_t *) cred->hint; @@ -228,10 +221,6 @@ gen_dhe_psk_server_kx(gnutls_session_t session, gnutls_buffer_st * data) if (ret < 0) return gnutls_assert_val(ret); - ret = _gnutls_set_dh_pk_params(session, g, p, dh_params->q_bits); - if (ret < 0) - return gnutls_assert_val(ret); - ret = _gnutls_dh_common_print_server_kx(session, data); if (ret < 0) @@ -248,7 +237,7 @@ gen_ecdhe_psk_server_kx(gnutls_session_t session, gnutls_buffer_st * data) gnutls_datum_t hint = {NULL, 0}; if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_PSK, + _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; @@ -272,7 +261,7 @@ gen_ecdhe_psk_server_kx(gnutls_session_t session, gnutls_buffer_st * data) return gnutls_assert_val(ret); ret = _gnutls_ecdh_common_print_server_kx(session, data, - _gnutls_session_ecc_curve_get + get_group (session)); if (ret < 0) gnutls_assert(); @@ -286,9 +275,6 @@ proc_dhe_psk_client_kx(gnutls_session_t session, uint8_t * data, size_t _data_size) { int ret; - bigint_t p, g; - gnutls_dh_params_t dh_params; - const bigint_t *mpis; gnutls_datum_t psk_key; gnutls_psk_server_credentials_t cred; psk_auth_info_t info; @@ -304,24 +290,12 @@ proc_dhe_psk_client_kx(gnutls_session_t session, uint8_t * data, } if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_PSK, + _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; } - dh_params = - _gnutls_get_dh_params(cred->dh_params, cred->params_func, - session); - mpis = _gnutls_dh_params_to_mpi(dh_params); - if (mpis == NULL) { - gnutls_assert(); - return GNUTLS_E_NO_TEMPORARY_DH_PARAMS; - } - - p = mpis[0]; - g = mpis[1]; - DECR_LEN(data_size, 2); username.size = _gnutls_read_uint16(&data[0]); @@ -342,19 +316,18 @@ proc_dhe_psk_client_kx(gnutls_session_t session, uint8_t * data, return GNUTLS_E_ILLEGAL_SRP_USERNAME; } - memcpy(info->username, username.data, username.size); - info->username[username.size] = 0; + _gnutls_copy_psk_username(info, &username); /* Adjust the data */ data += username.size + 2; ret = - _gnutls_psk_pwd_find_entry(session, info->username, &psk_key); + _gnutls_psk_pwd_find_entry(session, info->username, info->username_len, &psk_key); if (ret < 0) return gnutls_assert_val(ret); ret = _gnutls_proc_dh_common_client_kx(session, data, data_size, - g, p, &psk_key); + &psk_key); _gnutls_free_key_datum(&psk_key); @@ -382,7 +355,7 @@ proc_ecdhe_psk_client_kx(gnutls_session_t session, uint8_t * data, } if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_PSK, + _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; @@ -409,8 +382,7 @@ proc_ecdhe_psk_client_kx(gnutls_session_t session, uint8_t * data, return GNUTLS_E_ILLEGAL_SRP_USERNAME; } - memcpy(info->username, username.data, username.size); - info->username[username.size] = 0; + _gnutls_copy_psk_username(info, &username); /* Adjust the data */ data += username.size + 2; @@ -418,12 +390,12 @@ proc_ecdhe_psk_client_kx(gnutls_session_t session, uint8_t * data, /* should never fail. It will always return a key even if it is * a random one */ ret = - _gnutls_psk_pwd_find_entry(session, info->username, &psk_key); + _gnutls_psk_pwd_find_entry(session, info->username, info->username_len, &psk_key); if (ret < 0) return gnutls_assert_val(ret); ret = _gnutls_proc_ecdh_common_client_kx(session, data, data_size, - _gnutls_session_ecc_curve_get + get_group (session), &psk_key); _gnutls_free_key_datum(&psk_key); @@ -465,7 +437,7 @@ proc_dhe_psk_server_kx(gnutls_session_t session, uint8_t * data, /* set auth_info */ if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_PSK, + _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; @@ -505,7 +477,7 @@ proc_ecdhe_psk_server_kx(gnutls_session_t session, uint8_t * data, /* set auth_info */ if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_PSK, + _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; diff --git a/lib/auth/ecdhe.c b/lib/auth/ecdhe.c index 24cdf11430..883f6cd046 100644 --- a/lib/auth/ecdhe.c +++ b/lib/auth/ecdhe.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -36,7 +37,7 @@ #include #include #include -#include +#include #include #include #include @@ -94,15 +95,15 @@ static int calc_ecdh_key(gnutls_session_t session, gnutls_datum_t tmp_dh_key; gnutls_pk_params_init(&pub); - pub.params[ECC_X] = session->key.ecdh_x; - pub.params[ECC_Y] = session->key.ecdh_y; - pub.raw_pub.data = session->key.ecdhx.data; - pub.raw_pub.size = session->key.ecdhx.size; - pub.flags = ecurve->id; + pub.params[ECC_X] = session->key.proto.tls12.ecdh.x; + pub.params[ECC_Y] = session->key.proto.tls12.ecdh.y; + pub.raw_pub.data = session->key.proto.tls12.ecdh.raw.data; + pub.raw_pub.size = session->key.proto.tls12.ecdh.raw.size; + pub.curve = ecurve->id; ret = _gnutls_pk_derive(ecurve->pk, &tmp_dh_key, - &session->key.ecdh_params, &pub); + &session->key.proto.tls12.ecdh.params, &pub); if (ret < 0) { ret = gnutls_assert_val(ret); goto cleanup; @@ -127,55 +128,66 @@ static int calc_ecdh_key(gnutls_session_t session, cleanup: /* no longer needed */ - _gnutls_mpi_release(&session->key.ecdh_x); - _gnutls_mpi_release(&session->key.ecdh_y); - _gnutls_free_datum(&session->key.ecdhx); - gnutls_pk_params_release(&session->key.ecdh_params); + _gnutls_mpi_release(&session->key.proto.tls12.ecdh.x); + _gnutls_mpi_release(&session->key.proto.tls12.ecdh.y); + _gnutls_free_datum(&session->key.proto.tls12.ecdh.raw); + gnutls_pk_params_release(&session->key.proto.tls12.ecdh.params); return ret; } int _gnutls_proc_ecdh_common_client_kx(gnutls_session_t session, uint8_t * data, size_t _data_size, - gnutls_ecc_curve_t curve, + const struct gnutls_group_entry_st *group, gnutls_datum_t * psk_key) { ssize_t data_size = _data_size; int ret, i = 0; - int point_size; - const gnutls_ecc_curve_entry_st *ecurve = _gnutls_ecc_curve_get_params(curve); + unsigned point_size; + const gnutls_ecc_curve_entry_st *ecurve; - if (curve == GNUTLS_ECC_CURVE_INVALID || ecurve == NULL) + if (group == NULL) + return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES); + + ecurve = _gnutls_ecc_curve_get_params(group->curve); + if (ecurve == NULL) return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES); DECR_LEN(data_size, 1); point_size = data[i]; i += 1; + if (point_size == 0) { + ret = gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + goto cleanup; + } + DECR_LEN(data_size, point_size); if (ecurve->pk == GNUTLS_PK_EC) { ret = - _gnutls_ecc_ansi_x963_import(&data[i], point_size, - &session->key.ecdh_x, - &session->key.ecdh_y); + _gnutls_ecc_ansi_x962_import(&data[i], point_size, + &session->key.proto.tls12.ecdh.x, + &session->key.proto.tls12.ecdh.y); if (ret < 0) { gnutls_assert(); goto cleanup; } - } else if (ecurve->pk == GNUTLS_PK_ECDHX) { + } else if (ecurve->pk == GNUTLS_PK_ECDH_X25519 || + ecurve->pk == GNUTLS_PK_ECDH_X448) { if (ecurve->size != point_size) return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); - ret = _gnutls_set_datum(&session->key.ecdhx, + ret = _gnutls_set_datum(&session->key.proto.tls12.ecdh.raw, &data[i], point_size); if (ret < 0) { gnutls_assert(); goto cleanup; } - /* RFC7748 requires to mask the MSB in the final byte */ + /* RFC7748 requires to mask the MSB in the final byte + * for X25519 (not X448) */ if (ecurve->id == GNUTLS_ECC_CURVE_X25519) { - session->key.ecdhx.data[point_size-1] &= 0x7f; + session->key.proto.tls12.ecdh.raw.data[point_size-1] &= 0x7f; } } else { return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); @@ -192,7 +204,7 @@ int _gnutls_proc_ecdh_common_client_kx(gnutls_session_t session, } cleanup: - gnutls_pk_params_clear(&session->key.ecdh_params); + gnutls_pk_params_clear(&session->key.proto.tls12.ecdh.params); return ret; } @@ -211,7 +223,7 @@ proc_ecdhe_client_kx(gnutls_session_t session, return _gnutls_proc_ecdh_common_client_kx(session, data, _data_size, - _gnutls_session_ecc_curve_get + get_group (session), NULL); } @@ -229,10 +241,15 @@ _gnutls_gen_ecdh_common_client_kx_int(gnutls_session_t session, { int ret; gnutls_datum_t out; - int curve = _gnutls_session_ecc_curve_get(session); - const gnutls_ecc_curve_entry_st *ecurve = _gnutls_ecc_curve_get_params(curve); + const gnutls_group_entry_st *group = get_group(session); + const gnutls_ecc_curve_entry_st *ecurve; int pk; + unsigned init_pos = data->length; + if (group == NULL) + return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES); + + ecurve = _gnutls_ecc_curve_get_params(group->curve); if (ecurve == NULL) return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES); @@ -240,17 +257,17 @@ _gnutls_gen_ecdh_common_client_kx_int(gnutls_session_t session, /* generate temporal key */ ret = - _gnutls_pk_generate_keys(pk, curve, - &session->key.ecdh_params, 1); + _gnutls_pk_generate_keys(pk, ecurve->id, + &session->key.proto.tls12.ecdh.params, 1); if (ret < 0) return gnutls_assert_val(ret); if (pk == GNUTLS_PK_EC) { ret = - _gnutls_ecc_ansi_x963_export(curve, - session->key.ecdh_params. + _gnutls_ecc_ansi_x962_export(ecurve->id, + session->key.proto.tls12.ecdh.params. params[ECC_X] /* x */ , - session->key.ecdh_params. + session->key.proto.tls12.ecdh.params. params[ECC_Y] /* y */ , &out); if (ret < 0) { @@ -267,11 +284,11 @@ _gnutls_gen_ecdh_common_client_kx_int(gnutls_session_t session, gnutls_assert(); goto cleanup; } - } else if (pk == GNUTLS_PK_ECDHX) { + } else if (pk == GNUTLS_PK_ECDH_X25519 || pk == GNUTLS_PK_ECDH_X448) { ret = _gnutls_buffer_append_data_prefix(data, 8, - session->key.ecdh_params.raw_pub.data, - session->key.ecdh_params.raw_pub.size); + session->key.proto.tls12.ecdh.params.raw_pub.data, + session->key.proto.tls12.ecdh.params.raw_pub.size); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -285,9 +302,9 @@ _gnutls_gen_ecdh_common_client_kx_int(gnutls_session_t session, goto cleanup; } - ret = data->length; + ret = data->length - init_pos; cleanup: - gnutls_pk_params_clear(&session->key.ecdh_params); + gnutls_pk_params_clear(&session->key.proto.tls12.ecdh.params); return ret; } @@ -314,15 +331,16 @@ int _gnutls_proc_ecdh_common_server_kx(gnutls_session_t session, uint8_t * data, size_t _data_size) { - int i, ret, point_size; - gnutls_ecc_curve_t curve; + int i, ret; + unsigned point_size; + const gnutls_group_entry_st *group; ssize_t data_size = _data_size; const gnutls_ecc_curve_entry_st *ecurve; /* just in case we are resuming a session */ - gnutls_pk_params_release(&session->key.ecdh_params); + gnutls_pk_params_release(&session->key.proto.tls12.ecdh.params); - gnutls_pk_params_init(&session->key.ecdh_params); + gnutls_pk_params_init(&session->key.proto.tls12.ecdh.params); i = 0; DECR_LEN(data_size, 1); @@ -330,27 +348,27 @@ _gnutls_proc_ecdh_common_server_kx(gnutls_session_t session, return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES); DECR_LEN(data_size, 2); - curve = _gnutls_tls_id_to_ecc_curve(_gnutls_read_uint16(&data[i])); - if (curve == GNUTLS_ECC_CURVE_INVALID) { - _gnutls_debug_log("received curve %u.%u\n", (unsigned)data[i], (unsigned)data[i+1]); + group = _gnutls_tls_id_to_group(_gnutls_read_uint16(&data[i])); + if (group == NULL || group->curve == 0) { + _gnutls_debug_log("received unknown curve %u.%u\n", (unsigned)data[i], (unsigned)data[i+1]); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); } else { - _gnutls_debug_log("received curve %s\n", gnutls_ecc_curve_get_name(curve)); + _gnutls_debug_log("received curve %s\n", group->name); } i += 2; - ret = _gnutls_session_supports_ecc_curve(session, curve); + ret = _gnutls_session_supports_group(session, group->id); if (ret < 0) return gnutls_assert_val(ret); - ecurve = _gnutls_ecc_curve_get_params(curve); + ecurve = _gnutls_ecc_curve_get_params(group->curve); if (ecurve == NULL) { - gnutls_assert(); return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); } - _gnutls_session_ecc_curve_set(session, curve); + _gnutls_session_group_set(session, group); DECR_LEN(data_size, 1); point_size = data[i]; @@ -360,24 +378,26 @@ _gnutls_proc_ecdh_common_server_kx(gnutls_session_t session, if (ecurve->pk == GNUTLS_PK_EC) { ret = - _gnutls_ecc_ansi_x963_import(&data[i], point_size, - &session->key.ecdh_x, - &session->key.ecdh_y); + _gnutls_ecc_ansi_x962_import(&data[i], point_size, + &session->key.proto.tls12.ecdh.x, + &session->key.proto.tls12.ecdh.y); if (ret < 0) return gnutls_assert_val(ret); - } else if (ecurve->pk == GNUTLS_PK_ECDHX) { + } else if (ecurve->pk == GNUTLS_PK_ECDH_X25519 || + ecurve->pk == GNUTLS_PK_ECDH_X448) { if (ecurve->size != point_size) return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); - ret = _gnutls_set_datum(&session->key.ecdhx, + ret = _gnutls_set_datum(&session->key.proto.tls12.ecdh.raw, &data[i], point_size); if (ret < 0) return gnutls_assert_val(ret); - /* RFC7748 requires to mask the MSB in the final byte */ + /* RFC7748 requires to mask the MSB in the final byte + * for X25519 (not X448) */ if (ecurve->id == GNUTLS_ECC_CURVE_X25519) { - session->key.ecdhx.data[point_size-1] &= 0x7f; + session->key.proto.tls12.ecdh.raw.data[point_size-1] &= 0x7f; } } else { return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); @@ -392,19 +412,20 @@ _gnutls_proc_ecdh_common_server_kx(gnutls_session_t session, * be inserted */ int _gnutls_ecdh_common_print_server_kx(gnutls_session_t session, gnutls_buffer_st * data, - gnutls_ecc_curve_t curve) + const gnutls_group_entry_st *group) { uint8_t p; - int ret, pk; + int ret; gnutls_datum_t out; + unsigned init_pos = data->length; - if (curve == GNUTLS_ECC_CURVE_INVALID) + if (group == NULL || group->curve == 0) return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES); /* just in case we are resuming a session */ - gnutls_pk_params_release(&session->key.ecdh_params); + gnutls_pk_params_release(&session->key.proto.tls12.ecdh.params); - gnutls_pk_params_init(&session->key.ecdh_params); + gnutls_pk_params_init(&session->key.proto.tls12.ecdh.params); /* curve type */ p = 3; @@ -415,26 +436,24 @@ int _gnutls_ecdh_common_print_server_kx(gnutls_session_t session, ret = _gnutls_buffer_append_prefix(data, 16, - _gnutls_ecc_curve_get_tls_id - (curve)); + group->tls_id); if (ret < 0) return gnutls_assert_val(ret); - pk = gnutls_ecc_curve_get_pk(curve); /* generate temporal key */ ret = - _gnutls_pk_generate_keys(pk, curve, - &session->key.ecdh_params, 1); + _gnutls_pk_generate_keys(group->pk, group->curve, + &session->key.proto.tls12.ecdh.params, 1); if (ret < 0) return gnutls_assert_val(ret); - if (pk == GNUTLS_PK_EC) { + if (group->pk == GNUTLS_PK_EC) { ret = - _gnutls_ecc_ansi_x963_export(curve, - session->key.ecdh_params. + _gnutls_ecc_ansi_x962_export(group->curve, + session->key.proto.tls12.ecdh.params. params[ECC_X] /* x */ , - session->key.ecdh_params. + session->key.proto.tls12.ecdh.params. params[ECC_Y] /* y */ , &out); if (ret < 0) return gnutls_assert_val(ret); @@ -447,19 +466,20 @@ int _gnutls_ecdh_common_print_server_kx(gnutls_session_t session, if (ret < 0) return gnutls_assert_val(ret); - } else if (pk == GNUTLS_PK_ECDHX) { + } else if (group->pk == GNUTLS_PK_ECDH_X25519 || + group->pk == GNUTLS_PK_ECDH_X448) { ret = _gnutls_buffer_append_data_prefix(data, 8, - session->key.ecdh_params.raw_pub.data, - session->key.ecdh_params.raw_pub.size); + session->key.proto.tls12.ecdh.params.raw_pub.data, + session->key.proto.tls12.ecdh.params.raw_pub.size); if (ret < 0) return gnutls_assert_val(ret); } else { - return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + return gnutls_assert_val(GNUTLS_E_ECC_NO_SUPPORTED_CURVES); } - return data->length; + return data->length - init_pos; } static int @@ -467,6 +487,7 @@ gen_ecdhe_server_kx(gnutls_session_t session, gnutls_buffer_st * data) { int ret = 0; gnutls_certificate_credentials_t cred; + unsigned sig_pos; cred = (gnutls_certificate_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); @@ -475,16 +496,18 @@ gen_ecdhe_server_kx(gnutls_session_t session, gnutls_buffer_st * data) return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } - if ((ret = _gnutls_auth_info_set(session, GNUTLS_CRD_CERTIFICATE, + if ((ret = _gnutls_auth_info_init(session, GNUTLS_CRD_CERTIFICATE, sizeof(cert_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; } + sig_pos = data->length; + ret = _gnutls_ecdh_common_print_server_kx(session, data, - _gnutls_session_ecc_curve_get + get_group (session)); if (ret < 0) { gnutls_assert(); @@ -492,8 +515,8 @@ gen_ecdhe_server_kx(gnutls_session_t session, gnutls_buffer_st * data) } /* Generate the signature. */ - return _gnutls_gen_dhe_signature(session, data, data->data, - data->length); + return _gnutls_gen_dhe_signature(session, data, &data->data[sig_pos], + data->length-sig_pos); } #endif diff --git a/lib/auth/ecdhe.h b/lib/auth/ecdhe.h index 063c6707c9..e80e1ba25a 100644 --- a/lib/auth/ecdhe.h +++ b/lib/auth/ecdhe.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,12 +17,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef AUTH_ECDH_COMMON -#define AUTH_ECDH_COMMON +#ifndef GNUTLS_LIB_AUTH_ECDHE_H +#define GNUTLS_LIB_AUTH_ECDHE_H #include @@ -37,15 +38,15 @@ _gnutls_gen_ecdh_common_client_kx_int(gnutls_session_t session, int _gnutls_proc_ecdh_common_client_kx(gnutls_session_t session, uint8_t * data, size_t _data_size, - gnutls_ecc_curve_t curve, + const struct gnutls_group_entry_st *group, gnutls_datum_t * psk_key); int _gnutls_ecdh_common_print_server_kx(gnutls_session_t, gnutls_buffer_st * data, - gnutls_ecc_curve_t curve); + const struct gnutls_group_entry_st *group); int _gnutls_proc_ecdh_common_server_kx(gnutls_session_t session, uint8_t * data, size_t _data_size); -#endif +#endif /* GNUTLS_LIB_AUTH_ECDHE_H */ diff --git a/lib/auth/psk.c b/lib/auth/psk.c index e9bb701f33..6f220b6382 100644 --- a/lib/auth/psk.c +++ b/lib/auth/psk.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -26,7 +26,6 @@ #include "errors.h" #include "auth.h" -#include "auth.h" #include "debug.h" #include "num.h" #include @@ -111,40 +110,6 @@ _gnutls_set_psk_session_key(gnutls_session_t session, return ret; } -/* returns the username and they key for the PSK session. - * Free is non (0) if they have to be freed. - */ -int _gnutls_find_psk_key(gnutls_session_t session, - gnutls_psk_client_credentials_t cred, - gnutls_datum_t * username, gnutls_datum_t * key, - int *free) -{ - char *user_p; - int ret; - - *free = 0; - - if (cred->username.data != NULL && cred->key.data != NULL) { - username->data = cred->username.data; - username->size = cred->username.size; - key->data = cred->key.data; - key->size = cred->key.size; - } else if (cred->get_function != NULL) { - ret = cred->get_function(session, &user_p, key); - if (ret) - return gnutls_assert_val(ret); - - username->data = (uint8_t *) user_p; - username->size = strlen(user_p); - - *free = 1; - } else - return - gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); - - return 0; -} - /* Generates the PSK client key exchange * @@ -204,8 +169,7 @@ _gnutls_gen_psk_client_kx(gnutls_session_t session, } assert(username.data != NULL); - memcpy(info->username, username.data, username.size); - info->username[username.size] = 0; + _gnutls_copy_psk_username(info, &username); cleanup: @@ -239,7 +203,7 @@ _gnutls_proc_psk_client_kx(gnutls_session_t session, uint8_t * data, } if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_PSK, + _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; @@ -266,11 +230,10 @@ _gnutls_proc_psk_client_kx(gnutls_session_t session, uint8_t * data, return GNUTLS_E_ILLEGAL_SRP_USERNAME; } - memcpy(info->username, username.data, username.size); - info->username[username.size] = 0; + _gnutls_copy_psk_username(info, &username); ret = - _gnutls_psk_pwd_find_entry(session, info->username, &psk_key); + _gnutls_psk_pwd_find_entry(session, info->username, info->username_len, &psk_key); if (ret < 0) return gnutls_assert_val(ret); @@ -350,7 +313,7 @@ _gnutls_proc_psk_server_kx(gnutls_session_t session, uint8_t * data, } if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_PSK, + _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1)) < 0) { gnutls_assert(); return ret; diff --git a/lib/auth/psk.h b/lib/auth/psk.h index b2d8a76fdf..b0e511f7fe 100644 --- a/lib/auth/psk.h +++ b/lib/auth/psk.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef AUTH_PSK_H -#define AUTH_PSK_H +#ifndef GNUTLS_LIB_AUTH_PSK_H +#define GNUTLS_LIB_AUTH_PSK_H #include #include @@ -29,7 +29,10 @@ typedef struct gnutls_psk_client_credentials_st { gnutls_datum_t username; gnutls_datum_t key; - gnutls_psk_client_credentials_function *get_function; + gnutls_psk_client_credentials_function2 *get_function; + gnutls_psk_client_credentials_function *get_function_legacy; + /* TLS 1.3 - The HMAC algorithm to use to compute the binder values */ + const mac_entry_st *binder_algo; } psk_client_credentials_st; typedef struct gnutls_psk_server_credentials_st { @@ -37,11 +40,13 @@ typedef struct gnutls_psk_server_credentials_st { /* callback function, instead of reading the * password files. */ - gnutls_psk_server_credentials_function *pwd_callback; + gnutls_psk_server_credentials_function2 *pwd_callback; + gnutls_psk_server_credentials_function *pwd_callback_legacy; /* For DHE_PSK */ gnutls_dh_params_t dh_params; unsigned int deinit_dh_params; + gnutls_sec_param_t dh_sec_param; /* this callback is used to retrieve the DH or RSA * parameters. */ @@ -49,19 +54,30 @@ typedef struct gnutls_psk_server_credentials_st { /* Identity hint. */ char *hint; + /* TLS 1.3 - HMAC algorithm for the binder values */ + const mac_entry_st *binder_algo; } psk_server_cred_st; /* these structures should not use allocated data */ typedef struct psk_auth_info_st { char username[MAX_USERNAME_SIZE + 1]; + uint16_t username_len; dh_info_st dh; char hint[MAX_USERNAME_SIZE + 1]; } *psk_auth_info_t; +typedef struct psk_auth_info_st psk_auth_info_st; -#ifdef ENABLE_PSK +inline static +void _gnutls_copy_psk_username(psk_auth_info_t info, const gnutls_datum_t *username) +{ + assert(sizeof(info->username) > username->size); + memcpy(info->username, username->data, username->size); + info->username[username->size] = 0; + info->username_len = username->size; +} -typedef struct psk_auth_info_st psk_auth_info_st; +#ifdef ENABLE_PSK int _gnutls_set_psk_session_key(gnutls_session_t session, gnutls_datum_t * key, @@ -70,13 +86,8 @@ int _gnutls_gen_psk_server_kx(gnutls_session_t session, gnutls_buffer_st * data); int _gnutls_gen_psk_client_kx(gnutls_session_t, gnutls_buffer_st *); -int _gnutls_find_psk_key(gnutls_session_t session, - gnutls_psk_client_credentials_t cred, - gnutls_datum_t * username, gnutls_datum_t * key, - int *free); - #else #define _gnutls_set_psk_session_key(x,y,z) GNUTLS_E_UNIMPLEMENTED_FEATURE #endif /* ENABLE_PSK */ -#endif +#endif /* GNUTLS_LIB_AUTH_PSK_H */ diff --git a/lib/auth/psk_passwd.c b/lib/auth/psk_passwd.c index 1e1898cb8d..a0427914f9 100644 --- a/lib/auth/psk_passwd.c +++ b/lib/auth/psk_passwd.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -24,8 +24,6 @@ #include "gnutls_int.h" -#ifdef ENABLE_PSK - #include "x509_b64.h" #include "errors.h" #include @@ -75,7 +73,52 @@ static int pwd_put_values(gnutls_datum_t * psk, char *str) } return 0; +} + +static bool username_matches(const gnutls_datum_t *username, + const char *line, size_t line_size) +{ + int retval; + unsigned i; + gnutls_datum_t hexline, hex_username = { NULL, 0 }; + + /* + * Guard against weird behavior - we don't check 'line', + * as it's returned by getline(), which will never return NULL + * if successful. + */ + if (username->data == NULL) + return false; + + if (line_size == 0) + return (username->size == 0); + + /* move to first ':' */ + i = 0; + while ((i < line_size) && (line[i] != '\0') + && (line[i] != ':')) { + i++; + } + + /* if format is in hex, e.g. #FAFAFA */ + if (line[0] == '#' && line_size > 1) { + hexline.data = (void *) &line[1]; + hexline.size = i - 1; + + if ((retval = gnutls_hex_decode2(&hexline, &hex_username)) < 0) + return gnutls_assert_val(0); + + if (hex_username.size == username->size) + retval = memcmp(username->data, hex_username.data, username->size); + else + retval = -1; + + _gnutls_free_datum(&hex_username); + } else { + retval = strncmp((const char *) username->data, line, MAX(i, username->size)); + } + return (retval == 0); } @@ -107,15 +150,19 @@ static int _randomize_psk(gnutls_datum_t * psk) * If the user doesn't exist a random password is returned instead. */ int -_gnutls_psk_pwd_find_entry(gnutls_session_t session, char *username, +_gnutls_psk_pwd_find_entry(gnutls_session_t session, + const char *username, uint16_t username_len, gnutls_datum_t * psk) { gnutls_psk_server_credentials_t cred; FILE *fd; char *line = NULL; size_t line_size = 0; - unsigned i, len; int ret; + gnutls_datum_t username_datum = { + .data = (unsigned char *) username, + .size = username_len + }; cred = (gnutls_psk_server_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_PSK); @@ -128,7 +175,7 @@ _gnutls_psk_pwd_find_entry(gnutls_session_t session, char *username, * set, use it. */ if (cred->pwd_callback != NULL) { - ret = cred->pwd_callback(session, username, psk); + ret = cred->pwd_callback(session, &username_datum, psk); if (ret == 1) { /* the user does not exist */ ret = _randomize_psk(psk); @@ -162,16 +209,8 @@ _gnutls_psk_pwd_find_entry(gnutls_session_t session, char *username, return GNUTLS_E_SRP_PWD_ERROR; } - len = strlen(username); while (getline(&line, &line_size, fd) > 0) { - /* move to first ':' */ - i = 0; - while ((i < line_size) && (line[i] != '\0') - && (line[i] != ':')) { - i++; - } - - if (strncmp(username, line, MAX(i, len)) == 0) { + if (username_matches(&username_datum, line, line_size)) { ret = pwd_put_values(psk, line); if (ret < 0) { gnutls_assert(); @@ -202,5 +241,33 @@ _gnutls_psk_pwd_find_entry(gnutls_session_t session, char *username, } +/* returns the username and they key for the PSK session. + * Free is non (0) if they have to be freed. + */ +int _gnutls_find_psk_key(gnutls_session_t session, + gnutls_psk_client_credentials_t cred, + gnutls_datum_t * username, gnutls_datum_t * key, + int *free) +{ + int ret; + + *free = 0; + + if (cred->username.data != NULL && cred->key.data != NULL) { + username->data = cred->username.data; + username->size = cred->username.size; + key->data = cred->key.data; + key->size = cred->key.size; + } else if (cred->get_function != NULL) { + ret = cred->get_function(session, username, key); + + if (ret) + return gnutls_assert_val(ret); -#endif /* ENABLE PSK */ + *free = 1; + } else + return + gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + + return 0; +} diff --git a/lib/auth/psk_passwd.h b/lib/auth/psk_passwd.h index f09df621d5..3d351f22c7 100644 --- a/lib/auth/psk_passwd.h +++ b/lib/auth/psk_passwd.h @@ -16,14 +16,21 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifdef ENABLE_PSK +#ifndef GNUTLS_LIB_AUTH_PSK_PASSWD_H +#define GNUTLS_LIB_AUTH_PSK_PASSWD_H /* this is locally allocated. It should be freed using the provided function */ -int _gnutls_psk_pwd_find_entry(gnutls_session_t, char *username, +int _gnutls_psk_pwd_find_entry(gnutls_session_t, + const char *username, uint16_t username_len, gnutls_datum_t * key); -#endif /* ENABLE_SRP */ +int _gnutls_find_psk_key(gnutls_session_t session, + gnutls_psk_client_credentials_t cred, + gnutls_datum_t * username, gnutls_datum_t * key, + int *free); + +#endif /* GNUTLS_LIB_AUTH_PSK_PASSWD_H */ diff --git a/lib/auth/rsa.c b/lib/auth/rsa.c index 6f75bb5327..8108ee841d 100644 --- a/lib/auth/rsa.c +++ b/lib/auth/rsa.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -68,7 +68,7 @@ int check_key_usage_for_enc(gnutls_session_t session, unsigned key_usage) if (key_usage != 0) { if (!(key_usage & GNUTLS_KEY_KEY_ENCIPHERMENT) && !(key_usage & GNUTLS_KEY_KEY_AGREEMENT)) { gnutls_assert(); - if (session->internals.priorities.allow_key_usage_violation == 0) { + if (session->internals.allow_key_usage_violation == 0) { _gnutls_audit_log(session, "Peer's certificate does not allow encryption. Key usage violation detected.\n"); return GNUTLS_E_KEY_USAGE_VIOLATION; @@ -82,6 +82,18 @@ int check_key_usage_for_enc(gnutls_session_t session, unsigned key_usage) } /* This function reads the RSA parameters from peer's certificate; + * + * IMPORTANT: + * Currently this function gets only called on the client side + * during generation of the client kx msg. This function + * retrieves the RSA params from the peer's certificate. That is in + * this case the server's certificate. As of GNUTLS version 3.6.4 it is + * possible to negotiate different certificate types for client and + * server. Therefore the correct cert type needs to be retrieved to be + * used for the _gnutls_get_auth_info_pcert call. If this + * function is to be called on the server side in the future, extra + * checks need to be build in order to retrieve the correct + * certificate type. */ int _gnutls_get_public_rsa_params(gnutls_session_t session, @@ -91,6 +103,9 @@ _gnutls_get_public_rsa_params(gnutls_session_t session, cert_auth_info_t info; unsigned key_usage; gnutls_pcert_st peer_cert; + gnutls_certificate_type_t cert_type; + + assert(!IS_SERVER(session)); /* normal non export case */ @@ -101,10 +116,10 @@ _gnutls_get_public_rsa_params(gnutls_session_t session, return GNUTLS_E_INTERNAL_ERROR; } - ret = - _gnutls_get_auth_info_pcert(&peer_cert, - session->security_parameters. - cert_type, info); + // Get the negotiated server certificate type + cert_type = get_certificate_type(session, GNUTLS_CTYPE_SERVER); + + ret = _gnutls_get_auth_info_pcert(&peer_cert, cert_type, info); if (ret < 0) { gnutls_assert(); @@ -140,12 +155,13 @@ static int proc_rsa_client_kx(gnutls_session_t session, uint8_t * data, size_t _data_size) { - gnutls_datum_t plaintext = {NULL, 0}; + const char attack_error[] = "auth_rsa: Possible PKCS #1 attack\n"; gnutls_datum_t ciphertext; int ret, dsize; - int use_rnd_key = 0; ssize_t data_size = _data_size; - gnutls_datum_t rndkey = {NULL, 0}; + volatile uint8_t ver_maj, ver_min; + volatile uint8_t check_ver_min; + volatile uint32_t ok; #ifdef ENABLE_SSL3 if (get_num_version(session) == GNUTLS_SSL3) { @@ -169,75 +185,72 @@ proc_rsa_client_kx(gnutls_session_t session, uint8_t * data, ciphertext.size = dsize; } - rndkey.size = GNUTLS_MASTER_SIZE; - rndkey.data = gnutls_malloc(rndkey.size); - if (rndkey.data == NULL) { + ver_maj = _gnutls_get_adv_version_major(session); + ver_min = _gnutls_get_adv_version_minor(session); + check_ver_min = (session->internals.allow_wrong_pms == 0); + + session->key.key.data = gnutls_malloc(GNUTLS_MASTER_SIZE); + if (session->key.key.data == NULL) { gnutls_assert(); return GNUTLS_E_MEMORY_ERROR; } + session->key.key.size = GNUTLS_MASTER_SIZE; - /* we do not need strong random numbers here. - */ - ret = gnutls_rnd(GNUTLS_RND_NONCE, rndkey.data, - rndkey.size); + /* Fallback value when decryption fails. Needs to be unpredictable. */ + ret = gnutls_rnd(GNUTLS_RND_NONCE, session->key.key.data, + GNUTLS_MASTER_SIZE); if (ret < 0) { + gnutls_free(session->key.key.data); + session->key.key.size = 0; gnutls_assert(); - goto cleanup; + return ret; } ret = - gnutls_privkey_decrypt_data(session->internals.selected_key, 0, - &ciphertext, &plaintext); - - if (ret < 0 || plaintext.size != GNUTLS_MASTER_SIZE) { - /* In case decryption fails then don't inform - * the peer. Just use a random key. (in order to avoid - * attack against pkcs-1 formating). - */ - _gnutls_debug_log("auth_rsa: Possible PKCS #1 format attack\n"); - if (ret >= 0) { - gnutls_free(plaintext.data); - plaintext.data = NULL; - } - use_rnd_key = 1; - } else { - /* If the secret was properly formatted, then - * check the version number. - */ - if (_gnutls_get_adv_version_major(session) != - plaintext.data[0] - || (session->internals.priorities.allow_wrong_pms == 0 - && _gnutls_get_adv_version_minor(session) != - plaintext.data[1])) { - /* No error is returned here, if the version number check - * fails. We proceed normally. - * That is to defend against the attack described in the paper - * "Attacking RSA-based sessions in SSL/TLS" by Vlastimil Klima, - * Ondej Pokorny and Tomas Rosa. - */ - _gnutls_debug_log("auth_rsa: Possible PKCS #1 version check format attack\n"); - } - } + gnutls_privkey_decrypt_data2(session->internals.selected_key, + 0, &ciphertext, session->key.key.data, + session->key.key.size); + /* After this point, any conditional on failure that cause differences + * in execution may create a timing or cache access pattern side + * channel that can be used as an oracle, so treat very carefully */ + + /* Error handling logic: + * In case decryption fails then don't inform the peer. Just use the + * random key previously generated. (in order to avoid attack against + * pkcs-1 formatting). + * + * If we get version mismatches no error is returned either. We + * proceed normally. This is to defend against the attack described + * in the paper "Attacking RSA-based sessions in SSL/TLS" by + * Vlastimil Klima, Ondej Pokorny and Tomas Rosa. + */ - if (use_rnd_key != 0) { - session->key.key.data = rndkey.data; - session->key.key.size = rndkey.size; - rndkey.data = NULL; + /* ok is 0 in case of error and 1 in case of success. */ + + /* if ret < 0 */ + ok = CONSTCHECK_EQUAL(ret, 0); + /* session->key.key.data[0] must equal ver_maj */ + ok &= CONSTCHECK_EQUAL(session->key.key.data[0], ver_maj); + /* if check_ver_min then session->key.key.data[1] must equal ver_min */ + ok &= CONSTCHECK_NOT_EQUAL(check_ver_min, 0) & + CONSTCHECK_EQUAL(session->key.key.data[1], ver_min); + + if (ok) { + /* call logging function unconditionally so all branches are + * indistinguishable for timing and cache access when debug + * logging is disabled */ + _gnutls_no_log("%s", attack_error); } else { - session->key.key.data = plaintext.data; - session->key.key.size = plaintext.size; + _gnutls_debug_log("%s", attack_error); } /* This is here to avoid the version check attack * discussed above. */ - session->key.key.data[0] = _gnutls_get_adv_version_major(session); - session->key.key.data[1] = _gnutls_get_adv_version_minor(session); + session->key.key.data[0] = ver_maj; + session->key.key.data[1] = ver_min; - ret = 0; - cleanup: - gnutls_free(rndkey.data); - return ret; + return 0; } @@ -308,9 +321,12 @@ _gnutls_gen_rsa_client_kx(gnutls_session_t session, #ifdef ENABLE_SSL3 if (get_num_version(session) == GNUTLS_SSL3) { /* SSL 3.0 */ - _gnutls_buffer_replace_data(data, &sdata); + ret = + _gnutls_buffer_append_data(data, sdata.data, + sdata.size); - return data->length; + _gnutls_free_datum(&sdata); + return ret; } else #endif { /* TLS 1.x */ diff --git a/lib/auth/rsa_common.h b/lib/auth/rsa_common.h index 38ee264d6c..d91448bec0 100644 --- a/lib/auth/rsa_common.h +++ b/lib/auth/rsa_common.h @@ -23,12 +23,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef AUTH_RSA_COMMON -#define AUTH_RSA_COMMON +#ifndef GNUTLS_LIB_AUTH_RSA_COMMON_H +#define GNUTLS_LIB_AUTH_RSA_COMMON_H #include @@ -36,4 +36,4 @@ int _gnutls_get_public_rsa_params(gnutls_session_t session, gnutls_pk_params_st * params); -#endif +#endif /* GNUTLS_LIB_AUTH_RSA_COMMON_H */ diff --git a/lib/auth/rsa_psk.c b/lib/auth/rsa_psk.c index 9d65529cdc..1a9dab5612 100644 --- a/lib/auth/rsa_psk.c +++ b/lib/auth/rsa_psk.c @@ -136,6 +136,7 @@ _gnutls_gen_rsa_psk_client_kx(gnutls_session_t session, gnutls_psk_client_credentials_t cred; gnutls_datum_t username, key; int ret, free; + unsigned init_pos; if (auth == NULL) { /* this shouldn't have happened. The proc_certificate @@ -220,6 +221,8 @@ _gnutls_gen_rsa_psk_client_kx(gnutls_session_t session, * } */ + init_pos = data->length; + /* Write psk_identity and EncryptedPreMasterSecret into data stream */ ret = @@ -239,7 +242,7 @@ _gnutls_gen_rsa_psk_client_kx(gnutls_session_t session, goto cleanup; } - ret = data->length; + ret = data->length - init_pos; cleanup: _gnutls_free_datum(&sdata); @@ -278,7 +281,7 @@ _gnutls_proc_rsa_psk_client_kx(gnutls_session_t session, uint8_t * data, return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } - ret = _gnutls_auth_info_set(session, GNUTLS_CRD_PSK, + ret = _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1); if (ret < 0) { gnutls_assert(); @@ -307,8 +310,7 @@ _gnutls_proc_rsa_psk_client_kx(gnutls_session_t session, uint8_t * data, return GNUTLS_E_ILLEGAL_SRP_USERNAME; } - memcpy(info->username, username.data, username.size); - info->username[username.size] = 0; + _gnutls_copy_psk_username(info, &username); /* Adjust data so it points to EncryptedPreMasterSecret */ data += username.size + 2; @@ -331,11 +333,14 @@ _gnutls_proc_rsa_psk_client_kx(gnutls_session_t session, uint8_t * data, if (ret < 0 || plaintext.size != GNUTLS_MASTER_SIZE) { /* In case decryption fails then don't inform * the peer. Just use a random key. (in order to avoid - * attack against pkcs-1 formating). + * attack against pkcs-1 formatting). */ gnutls_assert(); _gnutls_debug_log ("auth_rsa_psk: Possible PKCS #1 format attack\n"); + if (ret >= 0) { + gnutls_free(plaintext.data); + } randomize_key = 1; } else { /* If the secret was properly formatted, then @@ -343,7 +348,7 @@ _gnutls_proc_rsa_psk_client_kx(gnutls_session_t session, uint8_t * data, */ if (_gnutls_get_adv_version_major(session) != plaintext.data[0] - || (session->internals.priorities.allow_wrong_pms == 0 + || (session->internals.allow_wrong_pms == 0 && _gnutls_get_adv_version_minor(session) != plaintext.data[1])) { /* No error is returned here, if the version number check @@ -391,7 +396,7 @@ _gnutls_proc_rsa_psk_client_kx(gnutls_session_t session, uint8_t * data, /* find the key of this username */ ret = - _gnutls_psk_pwd_find_entry(session, info->username, &pwd_psk); + _gnutls_psk_pwd_find_entry(session, info->username, strlen(info->username), &pwd_psk); if (ret < 0) { gnutls_assert(); goto cleanup; diff --git a/lib/auth/srp_kx.c b/lib/auth/srp_kx.c index ecaefb8b8c..27a5046ef6 100644 --- a/lib/auth/srp_kx.c +++ b/lib/auth/srp_kx.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -52,14 +52,14 @@ const mod_auth_st srp_auth_struct = { }; -#define _b session->key.b -#define B session->key.B -#define _a session->key.a -#define A session->key.A -#define N session->key.srp_p -#define G session->key.srp_g -#define V session->key.x -#define S session->key.srp_key +#define _b session->key.proto.tls12.srp.b +#define B session->key.proto.tls12.srp.B +#define _a session->key.proto.tls12.srp.a +#define A session->key.proto.tls12.srp.A +#define N session->key.proto.tls12.srp.srp_p +#define G session->key.proto.tls12.srp.srp_g +#define V session->key.proto.tls12.srp.x +#define S session->key.proto.tls12.srp.srp_key /* Checks if a%n==0,+1,-1%n which is a fatal srp error. * Returns a proper error code in that case, and 0 when @@ -123,11 +123,12 @@ _gnutls_gen_srp_server_kx(gnutls_session_t session, SRP_PWD_ENTRY *pwd_entry; srp_server_auth_info_t info; size_t tmp_size; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; srp_ext_st *priv; + unsigned init_pos; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_SRP, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SRP, &epriv); if (ret < 0) { /* peer didn't send a username */ gnutls_assert(); @@ -136,7 +137,7 @@ _gnutls_gen_srp_server_kx(gnutls_session_t session, priv = epriv; if ((ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_SRP, + _gnutls_auth_info_init(session, GNUTLS_CRD_SRP, sizeof(srp_server_auth_info_st), 1)) < 0) { gnutls_assert(); @@ -158,6 +159,8 @@ _gnutls_gen_srp_server_kx(gnutls_session_t session, return ret; } + init_pos = data->length; + /* copy from pwd_entry to local variables (actually in session) */ tmp_size = pwd_entry->g.size; if (_gnutls_mpi_init_scan_nz(&G, pwd_entry->g.data, tmp_size) < 0) { @@ -231,7 +234,7 @@ _gnutls_gen_srp_server_kx(gnutls_session_t session, _gnutls_mpi_log("SRP B: ", B); - ret = data->length; + ret = data->length - init_pos; cleanup: _gnutls_srp_entry_free(pwd_entry); @@ -246,11 +249,11 @@ _gnutls_gen_srp_client_kx(gnutls_session_t session, int ret; char *username, *password; gnutls_srp_client_credentials_t cred; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; srp_ext_st *priv; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_SRP, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SRP, &epriv); if (ret < 0) { /* peer didn't send a username */ gnutls_assert(); @@ -297,16 +300,16 @@ _gnutls_gen_srp_client_kx(gnutls_session_t session, */ /* calculate u */ - session->key.u = _gnutls_calc_srp_u(A, B, N); - if (session->key.u == NULL) { + session->key.proto.tls12.srp.u = _gnutls_calc_srp_u(A, B, N); + if (session->key.proto.tls12.srp.u == NULL) { gnutls_assert(); return GNUTLS_E_MEMORY_ERROR; } - _gnutls_mpi_log("SRP U: ", session->key.u); + _gnutls_mpi_log("SRP U: ", session->key.proto.tls12.srp.u); /* S = (B - g^x) ^ (a + u * x) % N */ - S = _gnutls_calc_srp_S2(B, G, session->key.x, _a, session->key.u, + S = _gnutls_calc_srp_S2(B, G, session->key.proto.tls12.srp.x, _a, session->key.proto.tls12.srp.u, N); if (S == NULL) { gnutls_assert(); @@ -317,10 +320,10 @@ _gnutls_gen_srp_client_kx(gnutls_session_t session, zrelease_temp_mpi_key(&_b); zrelease_temp_mpi_key(&V); - zrelease_temp_mpi_key(&session->key.u); + zrelease_temp_mpi_key(&session->key.proto.tls12.srp.u); zrelease_temp_mpi_key(&B); - ret = _gnutls_mpi_dprint(session->key.srp_key, &session->key.key); + ret = _gnutls_mpi_dprint(session->key.proto.tls12.srp.srp_key, &session->key.key); zrelease_temp_mpi_key(&S); if (ret < 0) { @@ -345,7 +348,7 @@ int _gnutls_proc_srp_client_kx(gnutls_session_t session, uint8_t * data, size_t _data_size) { - size_t _n_A; + ssize_t _n_A; ssize_t data_size = _data_size; int ret; @@ -371,17 +374,17 @@ _gnutls_proc_srp_client_kx(gnutls_session_t session, uint8_t * data, /* Start the SRP calculations. * - Calculate u */ - session->key.u = _gnutls_calc_srp_u(A, B, N); - if (session->key.u == NULL) { + session->key.proto.tls12.srp.u = _gnutls_calc_srp_u(A, B, N); + if (session->key.proto.tls12.srp.u == NULL) { gnutls_assert(); return GNUTLS_E_MEMORY_ERROR; } - _gnutls_mpi_log("SRP U: ", session->key.u); + _gnutls_mpi_log("SRP U: ", session->key.proto.tls12.srp.u); /* S = (A * v^u) ^ b % N */ - S = _gnutls_calc_srp_S1(A, _b, session->key.u, V, N); + S = _gnutls_calc_srp_S1(A, _b, session->key.proto.tls12.srp.u, V, N); if (S == NULL) { gnutls_assert(); return GNUTLS_E_MEMORY_ERROR; @@ -392,10 +395,10 @@ _gnutls_proc_srp_client_kx(gnutls_session_t session, uint8_t * data, _gnutls_mpi_release(&A); zrelease_temp_mpi_key(&_b); zrelease_temp_mpi_key(&V); - zrelease_temp_mpi_key(&session->key.u); + zrelease_temp_mpi_key(&session->key.proto.tls12.srp.u); zrelease_temp_mpi_key(&B); - ret = _gnutls_mpi_dprint(session->key.srp_key, &session->key.key); + ret = _gnutls_mpi_dprint(session->key.proto.tls12.srp.srp_key, &session->key.key); zrelease_temp_mpi_key(&S); if (ret < 0) { @@ -433,6 +436,7 @@ static const unsigned char srp_params_1024[] = { static const unsigned char srp_generator = 0x02; static const unsigned char srp3072_generator = 0x05; +static const unsigned char srp8192_generator = 19; const gnutls_datum_t gnutls_srp_1024_group_prime = { (void *) srp_params_1024, sizeof(srp_params_1024) @@ -665,24 +669,176 @@ const gnutls_datum_t gnutls_srp_4096_group_prime = { (void *) srp_params_4096, sizeof(srp_params_4096) }; +static const unsigned char srp_params_8192[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34, + 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, + 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, + 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x13, 0x9B, 0x22, + 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, + 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, + 0x30, 0x2B, 0x0A, 0x6D, 0xF2, 0x5F, 0x14, 0x37, + 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, + 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, + 0xF4, 0x4C, 0x42, 0xE9, 0xA6, 0x37, 0xED, 0x6B, + 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, + 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, + 0xAE, 0x9F, 0x24, 0x11, 0x7C, 0x4B, 0x1F, 0xE6, + 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE4, 0x5B, 0x3D, + 0xC2, 0x00, 0x7C, 0xB8, 0xA1, 0x63, 0xBF, 0x05, + 0x98, 0xDA, 0x48, 0x36, 0x1C, 0x55, 0xD3, 0x9A, + 0x69, 0x16, 0x3F, 0xA8, 0xFD, 0x24, 0xCF, 0x5F, + 0x83, 0x65, 0x5D, 0x23, 0xDC, 0xA3, 0xAD, 0x96, + 0x1C, 0x62, 0xF3, 0x56, 0x20, 0x85, 0x52, 0xBB, + 0x9E, 0xD5, 0x29, 0x07, 0x70, 0x96, 0x96, 0x6D, + 0x67, 0x0C, 0x35, 0x4E, 0x4A, 0xBC, 0x98, 0x04, + 0xF1, 0x74, 0x6C, 0x08, 0xCA, 0x18, 0x21, 0x7C, + 0x32, 0x90, 0x5E, 0x46, 0x2E, 0x36, 0xCE, 0x3B, + 0xE3, 0x9E, 0x77, 0x2C, 0x18, 0x0E, 0x86, 0x03, + 0x9B, 0x27, 0x83, 0xA2, 0xEC, 0x07, 0xA2, 0x8F, + 0xB5, 0xC5, 0x5D, 0xF0, 0x6F, 0x4C, 0x52, 0xC9, + 0xDE, 0x2B, 0xCB, 0xF6, 0x95, 0x58, 0x17, 0x18, + 0x39, 0x95, 0x49, 0x7C, 0xEA, 0x95, 0x6A, 0xE5, + 0x15, 0xD2, 0x26, 0x18, 0x98, 0xFA, 0x05, 0x10, + 0x15, 0x72, 0x8E, 0x5A, 0x8A, 0xAA, 0xC4, 0x2D, + 0xAD, 0x33, 0x17, 0x0D, 0x04, 0x50, 0x7A, 0x33, + 0xA8, 0x55, 0x21, 0xAB, 0xDF, 0x1C, 0xBA, 0x64, + 0xEC, 0xFB, 0x85, 0x04, 0x58, 0xDB, 0xEF, 0x0A, + 0x8A, 0xEA, 0x71, 0x57, 0x5D, 0x06, 0x0C, 0x7D, + 0xB3, 0x97, 0x0F, 0x85, 0xA6, 0xE1, 0xE4, 0xC7, + 0xAB, 0xF5, 0xAE, 0x8C, 0xDB, 0x09, 0x33, 0xD7, + 0x1E, 0x8C, 0x94, 0xE0, 0x4A, 0x25, 0x61, 0x9D, + 0xCE, 0xE3, 0xD2, 0x26, 0x1A, 0xD2, 0xEE, 0x6B, + 0xF1, 0x2F, 0xFA, 0x06, 0xD9, 0x8A, 0x08, 0x64, + 0xD8, 0x76, 0x02, 0x73, 0x3E, 0xC8, 0x6A, 0x64, + 0x52, 0x1F, 0x2B, 0x18, 0x17, 0x7B, 0x20, 0x0C, + 0xBB, 0xE1, 0x17, 0x57, 0x7A, 0x61, 0x5D, 0x6C, + 0x77, 0x09, 0x88, 0xC0, 0xBA, 0xD9, 0x46, 0xE2, + 0x08, 0xE2, 0x4F, 0xA0, 0x74, 0xE5, 0xAB, 0x31, + 0x43, 0xDB, 0x5B, 0xFC, 0xE0, 0xFD, 0x10, 0x8E, + 0x4B, 0x82, 0xD1, 0x20, 0xA9, 0x21, 0x08, 0x01, + 0x1A, 0x72, 0x3C, 0x12, 0xA7, 0x87, 0xE6, 0xD7, + 0x88, 0x71, 0x9A, 0x10, 0xBD, 0xBA, 0x5B, 0x26, + 0x99, 0xC3, 0x27, 0x18, 0x6A, 0xF4, 0xE2, 0x3C, + 0x1A, 0x94, 0x68, 0x34, 0xB6, 0x15, 0x0B, 0xDA, + 0x25, 0x83, 0xE9, 0xCA, 0x2A, 0xD4, 0x4C, 0xE8, + 0xDB, 0xBB, 0xC2, 0xDB, 0x04, 0xDE, 0x8E, 0xF9, + 0x2E, 0x8E, 0xFC, 0x14, 0x1F, 0xBE, 0xCA, 0xA6, + 0x28, 0x7C, 0x59, 0x47, 0x4E, 0x6B, 0xC0, 0x5D, + 0x99, 0xB2, 0x96, 0x4F, 0xA0, 0x90, 0xC3, 0xA2, + 0x23, 0x3B, 0xA1, 0x86, 0x51, 0x5B, 0xE7, 0xED, + 0x1F, 0x61, 0x29, 0x70, 0xCE, 0xE2, 0xD7, 0xAF, + 0xB8, 0x1B, 0xDD, 0x76, 0x21, 0x70, 0x48, 0x1C, + 0xD0, 0x06, 0x91, 0x27, 0xD5, 0xB0, 0x5A, 0xA9, + 0x93, 0xB4, 0xEA, 0x98, 0x8D, 0x8F, 0xDD, 0xC1, + 0x86, 0xFF, 0xB7, 0xDC, 0x90, 0xA6, 0xC0, 0x8F, + 0x4D, 0xF4, 0x35, 0xC9, 0x34, 0x02, 0x84, 0x92, + 0x36, 0xC3, 0xFA, 0xB4, 0xD2, 0x7C, 0x70, 0x26, + 0xC1, 0xD4, 0xDC, 0xB2, 0x60, 0x26, 0x46, 0xDE, + 0xC9, 0x75, 0x1E, 0x76, 0x3D, 0xBA, 0x37, 0xBD, + 0xF8, 0xFF, 0x94, 0x06, 0xAD, 0x9E, 0x53, 0x0E, + 0xE5, 0xDB, 0x38, 0x2F, 0x41, 0x30, 0x01, 0xAE, + 0xB0, 0x6A, 0x53, 0xED, 0x90, 0x27, 0xD8, 0x31, + 0x17, 0x97, 0x27, 0xB0, 0x86, 0x5A, 0x89, 0x18, + 0xDA, 0x3E, 0xDB, 0xEB, 0xCF, 0x9B, 0x14, 0xED, + 0x44, 0xCE, 0x6C, 0xBA, 0xCE, 0xD4, 0xBB, 0x1B, + 0xDB, 0x7F, 0x14, 0x47, 0xE6, 0xCC, 0x25, 0x4B, + 0x33, 0x20, 0x51, 0x51, 0x2B, 0xD7, 0xAF, 0x42, + 0x6F, 0xB8, 0xF4, 0x01, 0x37, 0x8C, 0xD2, 0xBF, + 0x59, 0x83, 0xCA, 0x01, 0xC6, 0x4B, 0x92, 0xEC, + 0xF0, 0x32, 0xEA, 0x15, 0xD1, 0x72, 0x1D, 0x03, + 0xF4, 0x82, 0xD7, 0xCE, 0x6E, 0x74, 0xFE, 0xF6, + 0xD5, 0x5E, 0x70, 0x2F, 0x46, 0x98, 0x0C, 0x82, + 0xB5, 0xA8, 0x40, 0x31, 0x90, 0x0B, 0x1C, 0x9E, + 0x59, 0xE7, 0xC9, 0x7F, 0xBE, 0xC7, 0xE8, 0xF3, + 0x23, 0xA9, 0x7A, 0x7E, 0x36, 0xCC, 0x88, 0xBE, + 0x0F, 0x1D, 0x45, 0xB7, 0xFF, 0x58, 0x5A, 0xC5, + 0x4B, 0xD4, 0x07, 0xB2, 0x2B, 0x41, 0x54, 0xAA, + 0xCC, 0x8F, 0x6D, 0x7E, 0xBF, 0x48, 0xE1, 0xD8, + 0x14, 0xCC, 0x5E, 0xD2, 0x0F, 0x80, 0x37, 0xE0, + 0xA7, 0x97, 0x15, 0xEE, 0xF2, 0x9B, 0xE3, 0x28, + 0x06, 0xA1, 0xD5, 0x8B, 0xB7, 0xC5, 0xDA, 0x76, + 0xF5, 0x50, 0xAA, 0x3D, 0x8A, 0x1F, 0xBF, 0xF0, + 0xEB, 0x19, 0xCC, 0xB1, 0xA3, 0x13, 0xD5, 0x5C, + 0xDA, 0x56, 0xC9, 0xEC, 0x2E, 0xF2, 0x96, 0x32, + 0x38, 0x7F, 0xE8, 0xD7, 0x6E, 0x3C, 0x04, 0x68, + 0x04, 0x3E, 0x8F, 0x66, 0x3F, 0x48, 0x60, 0xEE, + 0x12, 0xBF, 0x2D, 0x5B, 0x0B, 0x74, 0x74, 0xD6, + 0xE6, 0x94, 0xF9, 0x1E, 0x6D, 0xBE, 0x11, 0x59, + 0x74, 0xA3, 0x92, 0x6F, 0x12, 0xFE, 0xE5, 0xE4, + 0x38, 0x77, 0x7C, 0xB6, 0xA9, 0x32, 0xDF, 0x8C, + 0xD8, 0xBE, 0xC4, 0xD0, 0x73, 0xB9, 0x31, 0xBA, + 0x3B, 0xC8, 0x32, 0xB6, 0x8D, 0x9D, 0xD3, 0x00, + 0x74, 0x1F, 0xA7, 0xBF, 0x8A, 0xFC, 0x47, 0xED, + 0x25, 0x76, 0xF6, 0x93, 0x6B, 0xA4, 0x24, 0x66, + 0x3A, 0xAB, 0x63, 0x9C, 0x5A, 0xE4, 0xF5, 0x68, + 0x34, 0x23, 0xB4, 0x74, 0x2B, 0xF1, 0xC9, 0x78, + 0x23, 0x8F, 0x16, 0xCB, 0xE3, 0x9D, 0x65, 0x2D, + 0xE3, 0xFD, 0xB8, 0xBE, 0xFC, 0x84, 0x8A, 0xD9, + 0x22, 0x22, 0x2E, 0x04, 0xA4, 0x03, 0x7C, 0x07, + 0x13, 0xEB, 0x57, 0xA8, 0x1A, 0x23, 0xF0, 0xC7, + 0x34, 0x73, 0xFC, 0x64, 0x6C, 0xEA, 0x30, 0x6B, + 0x4B, 0xCB, 0xC8, 0x86, 0x2F, 0x83, 0x85, 0xDD, + 0xFA, 0x9D, 0x4B, 0x7F, 0xA2, 0xC0, 0x87, 0xE8, + 0x79, 0x68, 0x33, 0x03, 0xED, 0x5B, 0xDD, 0x3A, + 0x06, 0x2B, 0x3C, 0xF5, 0xB3, 0xA2, 0x78, 0xA6, + 0x6D, 0x2A, 0x13, 0xF8, 0x3F, 0x44, 0xF8, 0x2D, + 0xDF, 0x31, 0x0E, 0xE0, 0x74, 0xAB, 0x6A, 0x36, + 0x45, 0x97, 0xE8, 0x99, 0xA0, 0x25, 0x5D, 0xC1, + 0x64, 0xF3, 0x1C, 0xC5, 0x08, 0x46, 0x85, 0x1D, + 0xF9, 0xAB, 0x48, 0x19, 0x5D, 0xED, 0x7E, 0xA1, + 0xB1, 0xD5, 0x10, 0xBD, 0x7E, 0xE7, 0x4D, 0x73, + 0xFA, 0xF3, 0x6B, 0xC3, 0x1E, 0xCF, 0xA2, 0x68, + 0x35, 0x90, 0x46, 0xF4, 0xEB, 0x87, 0x9F, 0x92, + 0x40, 0x09, 0x43, 0x8B, 0x48, 0x1C, 0x6C, 0xD7, + 0x88, 0x9A, 0x00, 0x2E, 0xD5, 0xEE, 0x38, 0x2B, + 0xC9, 0x19, 0x0D, 0xA6, 0xFC, 0x02, 0x6E, 0x47, + 0x95, 0x58, 0xE4, 0x47, 0x56, 0x77, 0xE9, 0xAA, + 0x9E, 0x30, 0x50, 0xE2, 0x76, 0x56, 0x94, 0xDF, + 0xC8, 0x1F, 0x56, 0xE8, 0x80, 0xB9, 0x6E, 0x71, + 0x60, 0xC9, 0x80, 0xDD, 0x98, 0xED, 0xD3, 0xDF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +const gnutls_datum_t gnutls_srp_8192_group_prime = { + (void *) srp_params_8192, sizeof(srp_params_8192) +}; + +const gnutls_datum_t gnutls_srp_8192_group_generator = { + (void *) &srp8192_generator, sizeof(srp8192_generator) +}; + /* Check if G and N are parameters from the SRP draft. */ static int check_g_n(const uint8_t * g, size_t n_g, const uint8_t * n, size_t n_n) { - if ((n_n == sizeof(srp_params_3072) && - memcmp(srp_params_3072, n, n_n) == 0) || - (n_n == sizeof(srp_params_4096) && - memcmp(srp_params_4096, n, n_n) == 0)) { - if (n_g != 1 || g[0] != srp3072_generator) { - return - gnutls_assert_val - (GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); - } - return 0; + if (n_n == sizeof(srp_params_8192)) { + if (memcmp(srp_params_8192, n, n_n) == 0 && + n_g == 1 && g[0] == srp8192_generator) + return 0; + return + gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); } + if (n_n == sizeof(srp_params_4096)) { + if (memcmp(srp_params_4096, n, n_n) == 0 && + n_g == 1 && g[0] == srp3072_generator) + return 0; + return + gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } + + if (n_n == sizeof(srp_params_3072)) { + if (memcmp(srp_params_3072, n, n_n) == 0 && + n_g == 1 && g[0] == srp3072_generator) + return 0; + return + gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } + + /* 2048, 1536 and 1024 */ if (n_g != 1 || g[0] != srp_generator) { gnutls_assert(); return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; @@ -707,115 +863,7 @@ check_g_n(const uint8_t * g, size_t n_g, const uint8_t * n, size_t n_n) return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; } -/* Check if N is a prime and G a generator of the - * group. This check is only done if N is big enough. - * Otherwise only the included parameters must be used. - */ -static int -group_check_g_n(gnutls_session_t session, bigint_t g, bigint_t n) -{ - bigint_t q = NULL, two = NULL, w = NULL; - int ret; - - if (_gnutls_mpi_get_nbits(n) < (session->internals.srp_prime_bits - ? session->internals.srp_prime_bits - : 2048)) { - gnutls_assert(); - return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; - } - - /* N must be of the form N=2q+1 - * where q is also a prime. - */ - if (_gnutls_prime_check(n) != 0) { - _gnutls_mpi_log("no prime N: ", n); - gnutls_assert(); - return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; - } - - ret = _gnutls_mpi_init_multi(&two, &q, &w, NULL); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - /* q = n-1 - */ - ret = _gnutls_mpi_sub_ui(q, n, 1); - if (ret < 0) { - gnutls_assert(); - goto error; - } - - /* q = q/2, remember that q is divisible by 2 (prime - 1) - */ - ret = _gnutls_mpi_set_ui(two, 2); - if (ret < 0) { - gnutls_assert(); - goto error; - } - - ret = _gnutls_mpi_div(q, q, two); - if (ret < 0) { - gnutls_assert(); - goto error; - } - - if (_gnutls_prime_check(q) != 0) { - /* N was not on the form N=2q+1, where q = prime - */ - _gnutls_mpi_log("no prime Q: ", q); - gnutls_assert(); - ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; - goto error; - } - - /* We also check whether g is a generator, - */ - - /* check if g < q < N - */ - if (_gnutls_mpi_cmp(g, q) >= 0) { - gnutls_assert(); - ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; - goto error; - } - - /* check if g^q mod N == N-1 - * w = g^q mod N - */ - ret = _gnutls_mpi_powm(w, g, q, n); - if (ret < 0) { - gnutls_assert(); - goto error; - } - - /* w++ - */ - ret = _gnutls_mpi_add_ui(w, w, 1); - if (ret < 0) { - gnutls_assert(); - goto error; - } - - if (_gnutls_mpi_cmp(w, n) != 0) { - gnutls_assert(); - ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; - goto error; - } - - ret = 0; - - error: - _gnutls_mpi_release(&q); - _gnutls_mpi_release(&two); - _gnutls_mpi_release(&w); - - return ret; - -} - -/* receive the key exchange message ( n, g, s, B) +/* receive the key exchange message ( n, g, s, B) */ int _gnutls_proc_srp_server_kx(gnutls_session_t session, uint8_t * data, @@ -833,11 +881,11 @@ _gnutls_proc_srp_server_kx(gnutls_session_t session, uint8_t * data, char *username, *password; ssize_t data_size = _data_size; gnutls_srp_client_credentials_t cred; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; srp_ext_st *priv; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_SRP, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SRP, &epriv); if (ret < 0) { gnutls_assert(); @@ -868,7 +916,7 @@ _gnutls_proc_srp_server_kx(gnutls_session_t session, uint8_t * data, i = 0; - /* Read N + /* Read N */ DECR_LEN(data_size, 2); n_n = _gnutls_read_uint16(&data[i]); @@ -878,7 +926,7 @@ _gnutls_proc_srp_server_kx(gnutls_session_t session, uint8_t * data, data_n = &data[i]; i += n_n; - /* Read G + /* Read G */ DECR_LEN(data_size, 2); n_g = _gnutls_read_uint16(&data[i]); @@ -888,7 +936,7 @@ _gnutls_proc_srp_server_kx(gnutls_session_t session, uint8_t * data, data_g = &data[i]; i += n_g; - /* Read salt + /* Read salt */ DECR_LEN(data_size, 1); n_s = data[i]; @@ -898,7 +946,7 @@ _gnutls_proc_srp_server_kx(gnutls_session_t session, uint8_t * data, data_s = &data[i]; i += n_s; - /* Read B + /* Read B */ DECR_LEN(data_size, 2); n_b = _gnutls_read_uint16(&data[i]); @@ -934,11 +982,8 @@ _gnutls_proc_srp_server_kx(gnutls_session_t session, uint8_t * data, */ if ((ret = check_g_n(data_g, _n_g, data_n, _n_n)) < 0) { _gnutls_audit_log(session, - "SRP group parameters are not in the white list. Checking validity.\n"); - if ((ret = group_check_g_n(session, G, N)) < 0) { - gnutls_assert(); - return ret; - } + "SRP group parameters are not in the white list; rejecting.\n"); + return gnutls_assert_val(ret); } /* Checks if b % n == 0 @@ -959,7 +1004,7 @@ _gnutls_proc_srp_server_kx(gnutls_session_t session, uint8_t * data, return ret; } - if (_gnutls_mpi_init_scan_nz(&session->key.x, hd, _n_g) != 0) { + if (_gnutls_mpi_init_scan_nz(&session->key.proto.tls12.srp.x, hd, _n_g) != 0) { gnutls_assert(); return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; } diff --git a/lib/auth/srp_kx.h b/lib/auth/srp_kx.h index 013e0cc35e..ebe1477e02 100644 --- a/lib/auth/srp_kx.h +++ b/lib/auth/srp_kx.h @@ -16,15 +16,17 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef AUTH_SRP_H -#define AUTH_SRP_H +#ifndef GNUTLS_LIB_AUTH_SRP_KX_H +#define GNUTLS_LIB_AUTH_SRP_KX_H #include +#define MAX_FAKE_SALT_SEED_SIZE 64 + typedef struct gnutls_srp_client_credentials_st { char *username; char *password; @@ -38,7 +40,9 @@ typedef struct gnutls_srp_server_credentials_st { * password files. */ gnutls_srp_server_credentials_function *pwd_callback; - gnutls_datum_t fake_salt_seed; + unsigned char fake_salt_seed[MAX_FAKE_SALT_SEED_SIZE]; + unsigned int fake_salt_seed_size; + unsigned int fake_salt_length; } srp_server_cred_st; @@ -68,4 +72,4 @@ typedef struct srp_server_auth_info_st srp_server_auth_info_st; #endif /* ENABLE_SRP */ -#endif +#endif /* GNUTLS_LIB_AUTH_SRP_KX_H */ diff --git a/lib/auth/srp_passwd.c b/lib/auth/srp_passwd.c index c778e91977..baa4086e77 100644 --- a/lib/auth/srp_passwd.c +++ b/lib/auth/srp_passwd.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -368,8 +368,10 @@ _gnutls_srp_pwd_read_entry(gnutls_session_t state, char *username, _gnutls_srp_entry_free(entry); found: - zeroize_key(line, line_size); - free(line); + if (line) { + zeroize_key(line, line_size); + free(line); + } if (fd) fclose(fd); return ret; @@ -418,8 +420,8 @@ static int _randomize_pwd_entry(SRP_PWD_ENTRY * entry, return GNUTLS_E_MEMORY_ERROR; } - ret = _gnutls_mac_init(&ctx, me, sc->fake_salt_seed.data, - sc->fake_salt_seed.size); + ret = _gnutls_mac_init(&ctx, me, sc->fake_salt_seed, + sc->fake_salt_seed_size); if (ret < 0) { gnutls_assert(); @@ -447,20 +449,24 @@ void _gnutls_srp_entry_free(SRP_PWD_ENTRY * entry) _gnutls_free_key_datum(&entry->v); _gnutls_free_datum(&entry->salt); - if ((entry->g.data != gnutls_srp_1024_group_generator.data) - && (entry->g.data != gnutls_srp_3072_group_generator.data)) + if ((entry->g.data != gnutls_srp_1024_group_generator.data) && + (entry->g.data != gnutls_srp_1536_group_generator.data) && + (entry->g.data != gnutls_srp_2048_group_generator.data) && + (entry->g.data != gnutls_srp_3072_group_generator.data) && + (entry->g.data != gnutls_srp_4096_group_generator.data) && + (entry->g.data != gnutls_srp_8192_group_generator.data)) _gnutls_free_datum(&entry->g); if (entry->n.data != gnutls_srp_1024_group_prime.data && entry->n.data != gnutls_srp_1536_group_prime.data && entry->n.data != gnutls_srp_2048_group_prime.data && entry->n.data != gnutls_srp_3072_group_prime.data && - entry->n.data != gnutls_srp_4096_group_prime.data) + entry->n.data != gnutls_srp_4096_group_prime.data && + entry->n.data != gnutls_srp_8192_group_prime.data) _gnutls_free_datum(&entry->n); gnutls_free(entry->username); gnutls_free(entry); } - #endif /* ENABLE SRP */ diff --git a/lib/auth/srp_passwd.h b/lib/auth/srp_passwd.h index 71bcc220de..56ecec2ffe 100644 --- a/lib/auth/srp_passwd.h +++ b/lib/auth/srp_passwd.h @@ -16,10 +16,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_AUTH_SRP_PASSWD_H +#define GNUTLS_LIB_AUTH_SRP_PASSWD_H + #ifdef ENABLE_SRP typedef struct { @@ -39,3 +42,5 @@ int _gnutls_sbase64_decode(char *data, size_t data_size, uint8_t ** result); #endif /* ENABLE_SRP */ + +#endif /* GNUTLS_LIB_AUTH_SRP_PASSWD_H */ diff --git a/lib/auth/srp_rsa.c b/lib/auth/srp_rsa.c index 33359967da..2627189e62 100644 --- a/lib/auth/srp_rsa.c +++ b/lib/auth/srp_rsa.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -87,17 +87,20 @@ gen_srp_cert_server_kx(gnutls_session_t session, gnutls_buffer_st * data) int apr_cert_list_length; gnutls_sign_algorithm_t sign_algo; const version_entry_st *ver = get_version(session); + unsigned init_pos; if (unlikely(ver == NULL)) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + init_pos = data->length; + ret = _gnutls_gen_srp_server_kx(session, data); if (ret < 0) return ret; - ddata.data = data->data; - ddata.size = data->length; + ddata.data = &data->data[init_pos]; + ddata.size = data->length-init_pos; cred = (gnutls_certificate_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); @@ -139,8 +142,8 @@ gen_srp_cert_server_kx(gnutls_session_t session, gnutls_buffer_st * data) goto cleanup; } - p[0] = aid->hash_algorithm; - p[1] = aid->sign_algorithm; + p[0] = aid->id[0]; + p[1] = aid->id[1]; ret = _gnutls_buffer_append_data(data, p, 2); if (ret < 0) { @@ -158,7 +161,7 @@ gen_srp_cert_server_kx(gnutls_session_t session, gnutls_buffer_st * data) goto cleanup; } - ret = data->length; + ret = data->length - init_pos; cleanup: _gnutls_free_datum(&signature); @@ -177,6 +180,8 @@ proc_srp_cert_server_kx(gnutls_session_t session, uint8_t * data, gnutls_pcert_st peer_cert; uint8_t *p; gnutls_sign_algorithm_t sign_algo = GNUTLS_SIGN_UNKNOWN; + gnutls_certificate_credentials_t cred; + unsigned vflags; const version_entry_st *ver = get_version(session); if (unlikely(ver == NULL)) @@ -188,6 +193,15 @@ proc_srp_cert_server_kx(gnutls_session_t session, uint8_t * data, data_size = _data_size - ret; + cred = (gnutls_certificate_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + if (cred == NULL) { + gnutls_assert(); + return GNUTLS_E_INSUFFICIENT_CREDENTIALS; + } + + vflags = cred->verify_flags | session->internals.additional_verify_flags; + info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); if (info == NULL || info->ncerts == 0) { gnutls_assert(); @@ -202,17 +216,17 @@ proc_srp_cert_server_kx(gnutls_session_t session, uint8_t * data, p = &data[vparams.size]; if (_gnutls_version_has_selectable_sighash(ver)) { - sign_algorithm_st aid; + uint8_t id[2]; DECR_LEN(data_size, 1); - aid.hash_algorithm = *p++; + id[0] = *p++; DECR_LEN(data_size, 1); - aid.sign_algorithm = *p++; - sign_algo = _gnutls_tls_aid_to_sign(&aid); + id[1] = *p++; + + sign_algo = _gnutls_tls_aid_to_sign(id[0], id[1], ver); if (sign_algo == GNUTLS_SIGN_UNKNOWN) { _gnutls_debug_log("unknown signature %d.%d\n", - aid.sign_algorithm, - aid.hash_algorithm); + (int)id[0], (int)id[1]); gnutls_assert(); return GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM; } @@ -227,8 +241,7 @@ proc_srp_cert_server_kx(gnutls_session_t session, uint8_t * data, ret = _gnutls_get_auth_info_pcert(&peer_cert, - session->security_parameters. - cert_type, info); + session->security_parameters.server_ctype, info); if (ret < 0) { gnutls_assert(); @@ -236,7 +249,7 @@ proc_srp_cert_server_kx(gnutls_session_t session, uint8_t * data, } ret = - _gnutls_handshake_verify_data(session, &peer_cert, &vparams, + _gnutls_handshake_verify_data(session, vflags, &peer_cert, &vparams, &signature, sign_algo); gnutls_pcert_deinit(&peer_cert); diff --git a/lib/auth/srp_sb64.c b/lib/auth/srp_sb64.c index 1177e76719..16945e9a0a 100644 --- a/lib/auth/srp_sb64.c +++ b/lib/auth/srp_sb64.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -263,7 +263,6 @@ _gnutls_sbase64_decode(char *data, size_t idata_size, uint8_t ** result) tmp = decode(tmpres, datrev); if (tmp < 0) { gnutls_free((*result)); - *result = NULL; return tmp; } @@ -277,7 +276,6 @@ _gnutls_sbase64_decode(char *data, size_t idata_size, uint8_t ** result) tmp = decode(tmpres, (uint8_t *) & data[i]); if (tmp < 0) { gnutls_free((*result)); - *result = NULL; return tmp; } memcpy(&(*result)[j], tmpres, tmp); diff --git a/lib/auth/vko_gost.c b/lib/auth/vko_gost.c new file mode 100644 index 0000000000..35a4a2b0fb --- /dev/null +++ b/lib/auth/vko_gost.c @@ -0,0 +1,323 @@ +/* + * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2016 Dmitry Eremin-Solenikov + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "auth.h" +#include "errors.h" +#include "vko.h" +#include +#include +#include +#include +#include +#include +#include + +#if defined(ENABLE_GOST) +static int gen_vko_gost_client_kx(gnutls_session_t, gnutls_buffer_st *); +static int proc_vko_gost_client_kx(gnutls_session_t session, + uint8_t * data, size_t _data_size); + +/* VKO GOST Key Exchange: + * see draft-smyshlyaev-tls12-gost-suites-06, Section 4.2.4 + * + * Client generates ephemeral key pair, uses server's public key (from + * certificate), ephemeral private key and additional nonce (UKM) to generate + * (VKO) shared point/shared secret. This secret is used to encrypt (key wrap) + * random PMS. Then encrypted PMS and client's ephemeral public key are wrappen + * in ASN.1 structure and sent in KX message. + * + * Server uses decodes ASN.1 structure and uses it's own private key and + * client's ephemeral public key to unwrap PMS. + * + * Note, this KX is not PFS one, despite using ephemeral key pairs on client + * side. + */ +const mod_auth_st vko_gost_auth_struct = { + "VKO_GOST", + _gnutls_gen_cert_server_crt, + _gnutls_gen_cert_client_crt, + NULL, + gen_vko_gost_client_kx, + _gnutls_gen_cert_client_crt_vrfy, + _gnutls_gen_cert_server_cert_req, + + _gnutls_proc_crt, + _gnutls_proc_crt, + NULL, + proc_vko_gost_client_kx, + _gnutls_proc_cert_client_crt_vrfy, + _gnutls_proc_cert_cert_req +}; + +#define VKO_GOST_UKM_LEN 8 + +static int +calc_ukm(gnutls_session_t session, uint8_t *ukm) +{ + gnutls_digest_algorithm_t digalg = GNUTLS_DIG_STREEBOG_256; + gnutls_hash_hd_t dig; + int ret; + + ret = gnutls_hash_init(&dig, digalg); + if (ret < 0) + return gnutls_assert_val(ret); + + gnutls_hash(dig, session->security_parameters.client_random, + sizeof(session->security_parameters.client_random)); + + gnutls_hash(dig, session->security_parameters.server_random, + sizeof(session->security_parameters.server_random)); + + gnutls_hash_deinit(dig, ukm); + + return gnutls_hash_get_len(digalg); +} + +static int print_priv_key(gnutls_pk_params_st *params) +{ + int ret; + uint8_t priv_buf[512/8]; + char buf[512 / 4 + 1]; + size_t bytes = sizeof(priv_buf); + + /* Check if _gnutls_hard_log will print anything */ + if (likely(_gnutls_log_level < 9)) + return GNUTLS_E_SUCCESS; + + ret = _gnutls_mpi_print(params->params[GOST_K], + priv_buf, &bytes); + if (ret < 0) + return gnutls_assert_val(ret); + + _gnutls_hard_log("INT: VKO PRIVATE KEY[%zd]: %s\n", + bytes, _gnutls_bin2hex(priv_buf, + bytes, + buf, sizeof(buf), + NULL)); + return 0; +} + +static int +vko_prepare_client_keys(gnutls_session_t session, + gnutls_pk_params_st *pub, + gnutls_pk_params_st *priv) +{ + int ret; + gnutls_ecc_curve_t curve; + const gnutls_group_entry_st *group; + cert_auth_info_t info; + gnutls_pcert_st peer_cert; + + info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); + if (info == NULL || info->ncerts == 0) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + ret = _gnutls_get_auth_info_pcert(&peer_cert, + session->security_parameters. + server_ctype, info); + if (ret < 0) + return gnutls_assert_val(ret); + + /* Copy public key contents and free the rest */ + memcpy(pub, &peer_cert.pubkey->params, sizeof(gnutls_pk_params_st)); + gnutls_free(peer_cert.pubkey); + peer_cert.pubkey = NULL; + gnutls_pcert_deinit(&peer_cert); + + curve = pub->curve; + group = _gnutls_id_to_group(_gnutls_ecc_curve_get_group(curve)); + if (group == NULL) { + _gnutls_debug_log("received unknown curve %d\n", curve); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } else { + _gnutls_debug_log("received curve %s\n", group->name); + } + + ret = _gnutls_session_supports_group(session, group->id); + if (ret < 0) + return gnutls_assert_val(ret); + + if (pub->algo == GNUTLS_PK_GOST_12_512) { + gnutls_sign_algorithm_set_server(session, GNUTLS_SIGN_GOST_512); + } else { + gnutls_sign_algorithm_set_server(session, GNUTLS_SIGN_GOST_256); + } + + _gnutls_session_group_set(session, group); + + ret = _gnutls_pk_generate_keys(pub->algo, + curve, + priv, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + priv->gost_params = pub->gost_params; + + print_priv_key(priv); + + session->key.key.size = 32; /* GOST key size */ + session->key.key.data = gnutls_malloc(session->key.key.size); + if (session->key.key.data == NULL) { + gnutls_assert(); + session->key.key.size = 0; + return GNUTLS_E_MEMORY_ERROR; + } + + /* Generate random */ + ret = gnutls_rnd(GNUTLS_RND_RANDOM, session->key.key.data, + session->key.key.size); + if (ret < 0) { + gnutls_assert(); + gnutls_free(session->key.key.data); + session->key.key.size = 0; + return ret; + } + + return 0; +} + +/* KX message is: + TLSGostKeyTransportBlob ::= SEQUENCE { + keyBlob GostR3410-KeyTransport, + proxyKeyBlobs SEQUENCE OF TLSProxyKeyTransportBlob OPTIONAL + } + + draft-smyshlyaev-tls12-gost-suites does not define proxyKeyBlobs, but old + CSPs still send additional information after keyBlob. + + We only need keyBlob and we completely ignore the rest of the structure. + + _gnutls_gost_keytrans_decrypt will decrypt GostR3410-KeyTransport + */ + +static int +proc_vko_gost_client_kx(gnutls_session_t session, + uint8_t * data, size_t _data_size) +{ + int ret, i = 0; + ssize_t data_size = _data_size; + gnutls_privkey_t privkey = session->internals.selected_key; + uint8_t ukm_data[MAX_HASH_SIZE]; + gnutls_datum_t ukm = {ukm_data, VKO_GOST_UKM_LEN}; + gnutls_datum_t cek; + int len; + + if (!privkey || privkey->type != GNUTLS_PRIVKEY_X509) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + /* Skip TLSGostKeyTransportBlob tag and length */ + DECR_LEN(data_size, 1); + if (data[0] != (ASN1_TAG_SEQUENCE | ASN1_CLASS_STRUCTURED)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + i += 1; + + ret = asn1_get_length_der(&data[i], data_size, &len); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_ASN1_DER_ERROR); + DECR_LEN(data_size, len); + i += len; + + /* Check that nothing is left after TLSGostKeyTransportBlob */ + DECR_LEN_FINAL(data_size, ret); + + /* Point data to GostR3410-KeyTransport */ + data_size = ret; + data += i; + + /* Now do the tricky part: determine length of GostR3410-KeyTransport */ + DECR_LEN(data_size, 1); /* tag */ + ret = asn1_get_length_der(&data[1], data_size, &len); + DECR_LEN_FINAL(data_size, len + ret); + + cek.data = data; + cek.size = ret + len + 1; + + ret = calc_ukm(session, ukm_data); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_gost_keytrans_decrypt(&privkey->key.x509->params, + &cek, &ukm, + &session->key.key); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + +static int +gen_vko_gost_client_kx(gnutls_session_t session, + gnutls_buffer_st * data) +{ + int ret; + gnutls_datum_t out = {}; + uint8_t ukm_data[MAX_HASH_SIZE]; + gnutls_datum_t ukm = {ukm_data, VKO_GOST_UKM_LEN}; + gnutls_pk_params_st pub; + gnutls_pk_params_st priv; + uint8_t tl[1 + ASN1_MAX_LENGTH_SIZE]; + int len; + + ret = calc_ukm(session, ukm_data); + if (ret < 0) + return gnutls_assert_val(ret); + + gnutls_pk_params_init(&pub); + gnutls_pk_params_init(&priv); + ret = vko_prepare_client_keys(session, &pub, &priv); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_gost_keytrans_encrypt(&pub, + &priv, + &session->key.key, + &ukm, &out); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + tl[0] = ASN1_TAG_SEQUENCE | ASN1_CLASS_STRUCTURED; + asn1_length_der(out.size, tl + 1, &len); + ret = gnutls_buffer_append_data(data, tl, len + 1); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = gnutls_buffer_append_data(data, out.data, out.size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = data->length; + cleanup: + /* no longer needed */ + gnutls_pk_params_release(&priv); + gnutls_pk_params_release(&pub); + + _gnutls_free_datum(&out); + + return ret; +} +#endif diff --git a/lib/auto-verify.c b/lib/auto-verify.c index 179fb1066f..c9ec503bdf 100644 --- a/lib/auto-verify.c +++ b/lib/auto-verify.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/buffers.c b/lib/buffers.c index 107a9ca9ca..2d0e3d8afc 100644 --- a/lib/buffers.c +++ b/lib/buffers.c @@ -16,15 +16,15 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -/* +/* * This file holds all the buffering code used in gnutls. * The buffering code works as: * - * RECORD LAYER: + * RECORD LAYER: * 1. uses a buffer to hold data (application/handshake), * we got but they were not requested, yet. * (see gnutls_record_buffer_put(), gnutls_record_buffer_get_size() etc.) @@ -32,7 +32,7 @@ * 2. uses a buffer to hold data that were incomplete (ie the read/write * was interrupted) * (see _gnutls_io_read_buffered(), _gnutls_io_write_buffered() etc.) - * + * * HANDSHAKE LAYER: * 1. Uses buffer to hold the last received handshake message. * (see _gnutls_handshake_hash_buffer_put() etc.) @@ -67,12 +67,12 @@ */ void _gnutls_record_buffer_put(gnutls_session_t session, - content_type_t type, gnutls_uint64 * seq, + content_type_t type, uint64_t seq, mbuffer_st * bufel) { bufel->type = type; - memcpy(&bufel->record_sequence, seq, sizeof(*seq)); + bufel->record_sequence = seq; _mbuffer_enqueue(&session->internals.record_buffer, bufel); _gnutls_buffers_log("BUF[REC]: Inserted %d bytes of Data(%d)\n", @@ -102,7 +102,7 @@ size_t gnutls_record_check_pending(gnutls_session_t session) * @session: is a #gnutls_session_t type. * * This function checks if there pending corked - * data in the gnutls buffers --see gnutls_record_cork(). + * data in the gnutls buffers --see gnutls_record_cork(). * * Returns: Returns the size of the corked data or zero. * @@ -155,7 +155,7 @@ _gnutls_record_buffer_get(content_type_t type, length = msg.size; if (seq) - memcpy(seq, bufel->record_sequence.i, 8); + _gnutls_write_uint64(bufel->record_sequence, seq); memcpy(data, msg.data, length); _mbuffer_head_remove_bytes(&session->internals.record_buffer, @@ -224,6 +224,8 @@ int errno_to_gerr(int err, unsigned dtls) return GNUTLS_E_LARGE_PACKET; else return GNUTLS_E_PUSH_ERROR; + case ECONNRESET: + return GNUTLS_E_PREMATURE_TERMINATION; default: gnutls_assert(); return GNUTLS_E_PUSH_ERROR; @@ -250,7 +252,7 @@ _gnutls_dgram_read(gnutls_session_t session, mbuffer_st ** bufel, ret = _gnutls_io_check_recv(session, *ms); if (ret < 0) return gnutls_assert_val(ret); - gettime(&t1); + gnutls_gettime(&t1); } *bufel = _mbuffer_alloc_align16(max_size, get_total_headers(session)); @@ -275,7 +277,7 @@ _gnutls_dgram_read(gnutls_session_t session, mbuffer_st ** bufel, fd); if (i == 0) { /* If we get here, we likely have a stream socket. - * FIXME: this probably breaks DCCP. */ + * That assumption may not work on DCCP. */ gnutls_assert(); ret = 0; goto cleanup; @@ -285,7 +287,7 @@ _gnutls_dgram_read(gnutls_session_t session, mbuffer_st ** bufel, } if (ms && *ms > 0) { - gettime(&t2); + gnutls_gettime(&t2); diff = timespec_sub_ms(&t2, &t1); if (diff < *ms) *ms -= diff; @@ -336,7 +338,7 @@ _gnutls_stream_read(gnutls_session_t session, mbuffer_st ** bufel, goto cleanup; } - gettime(&t1); + gnutls_gettime(&t1); } reset_errno(session); @@ -381,7 +383,7 @@ _gnutls_stream_read(gnutls_session_t session, mbuffer_st ** bufel, (*bufel)->msg.size += i; if (ms && *ms > 0 && *ms != GNUTLS_INDEFINITE_TIMEOUT) { - gettime(&t2); + gnutls_gettime(&t2); diff = timespec_sub_ms(&t2, &t1); if (diff < *ms) *ms -= diff; @@ -515,13 +517,13 @@ _gnutls_writev(gnutls_session_t session, const giovec_t * giovec, return i; } -/* +/* * @ms: a pointer to the number of milliseconds to wait for data. Use zero or NULL for indefinite. * * This function is like recv(with MSG_PEEK). But it does not return -1 on error. * It does return gnutls_errno instead. * This function reads data from the socket and keeps them in a buffer, of up to - * max_record_recv_size. + * max_record_recv_size. * * This is not a general purpose function. It returns EXACTLY the data requested, * which are stored in a local (in the session) buffer. @@ -540,8 +542,8 @@ _gnutls_io_read_buffered(gnutls_session_t session, size_t total, size_t recvdata, readsize; if (total > max_record_recv_size(session) || total == 0) { - gnutls_assert(); /* internal error */ - return GNUTLS_E_INVALID_REQUEST; + gnutls_assert(); + return GNUTLS_E_RECORD_OVERFLOW; } /* calculate the actual size, ie. get the minimum of the @@ -739,10 +741,8 @@ int _gnutls_io_check_recv(gnutls_session_t session, unsigned int ms) gnutls_transport_ptr_t fd = session->internals.transport_recv_ptr; int ret = 0, err; - if (unlikely - (session->internals.pull_timeout_func == gnutls_system_recv_timeout - && session->internals.pull_func != system_read)) { - _gnutls_debug_log("The pull function has been replaced but not the pull timeout."); + if (NO_TIMEOUT_FUNC_SET(session)) { + _gnutls_debug_log("The pull function has been replaced but not the pull timeout.\n"); return gnutls_assert_val(GNUTLS_E_PULL_ERROR); } @@ -763,7 +763,7 @@ int _gnutls_io_check_recv(gnutls_session_t session, unsigned int ms) return GNUTLS_E_TIMEDOUT; } -/* HANDSHAKE buffers part +/* HANDSHAKE buffers part */ /* This function writes the data that are left in the @@ -800,6 +800,8 @@ ssize_t _gnutls_handshake_io_write_flush(gnutls_session_t session) total += ret; ret = _mbuffer_head_remove_bytes(send_buffer, ret); + /* for each queued message we send, ensure that + * we drop the epoch refcount set in _gnutls_handshake_io_cache_int(). */ if (ret == 1) _gnutls_epoch_refcount_dec(session, epoch); @@ -821,7 +823,7 @@ ssize_t _gnutls_handshake_io_write_flush(gnutls_session_t session) } -/* This is a send function for the gnutls handshake +/* This is a send function for the gnutls handshake * protocol. Just makes sure that all data have been sent. * */ @@ -839,6 +841,8 @@ _gnutls_handshake_io_cache_int(gnutls_session_t session, send_buffer = &session->internals.handshake_send_buffer; + /* ensure that our epoch does not get garbage collected + * before we send all queued messages with it */ bufel->epoch = (uint16_t) _gnutls_epoch_refcount_inc(session, EPOCH_WRITE_CURRENT); @@ -876,7 +880,7 @@ parse_handshake_header(gnutls_session_t session, mbuffer_st * bufel, { uint8_t *dataptr = NULL; /* for realloc */ size_t handshake_header_size = - HANDSHAKE_HEADER_SIZE(session), data_size; + HANDSHAKE_HEADER_SIZE(session), data_size, frag_size; /* Note: SSL2_HEADERS == 1 */ if (_mbuffer_get_udata_size(bufel) < handshake_header_size) @@ -892,73 +896,76 @@ parse_handshake_header(gnutls_session_t session, mbuffer_st * bufel, && bufel->htype == GNUTLS_HANDSHAKE_CLIENT_HELLO_V2)) { handshake_header_size = SSL2_HEADERS; /* we've already read one byte */ - hsk->length = _mbuffer_get_udata_size(bufel) - handshake_header_size; /* we've read the first byte */ + frag_size = _mbuffer_get_udata_size(bufel) - handshake_header_size; /* we've read the first byte */ if (dataptr[0] != GNUTLS_HANDSHAKE_CLIENT_HELLO) return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); - hsk->htype = GNUTLS_HANDSHAKE_CLIENT_HELLO_V2; + hsk->rtype = hsk->htype = GNUTLS_HANDSHAKE_CLIENT_HELLO_V2; hsk->sequence = 0; hsk->start_offset = 0; - hsk->end_offset = hsk->length; + hsk->length = frag_size; } else #endif - { /* TLS or DTLS handshake headers */ + { /* TLS or DTLS handshake headers */ - hsk->htype = dataptr[0]; + hsk->rtype = hsk->htype = dataptr[0]; /* we do not use DECR_LEN because we know * that the packet has enough data. */ hsk->length = _gnutls_read_uint24(&dataptr[1]); - handshake_header_size = HANDSHAKE_HEADER_SIZE(session); if (IS_DTLS(session)) { hsk->sequence = _gnutls_read_uint16(&dataptr[4]); hsk->start_offset = _gnutls_read_uint24(&dataptr[6]); - hsk->end_offset = - hsk->start_offset + + frag_size = _gnutls_read_uint24(&dataptr[9]); } else { hsk->sequence = 0; hsk->start_offset = 0; - hsk->end_offset = + frag_size = MIN((_mbuffer_get_udata_size(bufel) - handshake_header_size), hsk->length); } + + /* TLS1.3: distinguish server hello versus hello retry request. + * The epitome of slick protocol design. */ + if (hsk->htype == GNUTLS_HANDSHAKE_SERVER_HELLO && hsk->start_offset == 0 && !IS_DTLS(session)) { + if (_mbuffer_get_udata_size(bufel) > handshake_header_size+2+GNUTLS_RANDOM_SIZE && + memcmp(dataptr+handshake_header_size+2, HRR_RANDOM, GNUTLS_RANDOM_SIZE) == 0) { + hsk->htype = GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST; + } + } } data_size = _mbuffer_get_udata_size(bufel) - handshake_header_size; - /* make the length offset */ - if (hsk->end_offset > 0) - hsk->end_offset--; + if (frag_size > 0) + hsk->end_offset = hsk->start_offset + frag_size - 1; + else + hsk->end_offset = 0; _gnutls_handshake_log ("HSK[%p]: %s (%u) was received. Length %d[%d], frag offset %d, frag length: %d, sequence: %d\n", session, _gnutls_handshake2str(hsk->htype), (unsigned) hsk->htype, (int) hsk->length, (int) data_size, - hsk->start_offset, hsk->end_offset - hsk->start_offset + 1, + hsk->start_offset, (int) frag_size, (int) hsk->sequence); hsk->header_size = handshake_header_size; memcpy(hsk->header, _mbuffer_get_udata_ptr(bufel), handshake_header_size); - if (hsk->length > 0 && - (hsk->end_offset - hsk->start_offset >= data_size)) - return - gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); - - if (hsk->length > 0 && (hsk->start_offset >= hsk->end_offset || - hsk->end_offset - hsk->start_offset >= - data_size - || hsk->end_offset >= hsk->length)) + if (hsk->length > 0 && (frag_size > data_size || + (frag_size > 0 && + hsk->end_offset >= hsk->length))) { return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + } else if (hsk->length == 0 && hsk->end_offset != 0 && hsk->start_offset != 0) return @@ -1076,12 +1083,15 @@ static int merge_handshake_packet(gnutls_session_t session, inline static int cmp_hsk_types(gnutls_handshake_description_t expected, gnutls_handshake_description_t recvd) { - if ((expected != GNUTLS_HANDSHAKE_CLIENT_HELLO + if (expected == GNUTLS_HANDSHAKE_ANY) + return 1; + #ifdef ENABLE_SSL2 - || recvd != GNUTLS_HANDSHAKE_CLIENT_HELLO_V2 + if (expected == GNUTLS_HANDSHAKE_CLIENT_HELLO + && recvd == GNUTLS_HANDSHAKE_CLIENT_HELLO_V2) + return 1; #endif - ) - && (expected != recvd)) + if (expected != recvd) return 0; return 1; @@ -1163,7 +1173,7 @@ static int get_last_packet(gnutls_session_t session, RETURN_DTLS_EAGAIN_OR_TIMEOUT(session, 0); } -/* This is a receive function for the gnutls handshake +/* This is a receive function for the gnutls handshake * protocol. Makes sure that we have received all data. * * htype is the next handshake packet expected. @@ -1184,7 +1194,7 @@ int _gnutls_parse_record_buffered_msgs(gnutls_session_t session) return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; if (!IS_DTLS(session)) { - ssize_t remain, append, header_size; + ssize_t append, header_size; do { if (bufel->type != GNUTLS_HANDSHAKE) @@ -1192,18 +1202,21 @@ int _gnutls_parse_record_buffered_msgs(gnutls_session_t session) gnutls_assert_val (GNUTLS_E_UNEXPECTED_PACKET); - /* if we have a half received message then complete it. - */ - remain = recv_buf[0].length - - recv_buf[0].data.length; - - /* this is the rest of a previous message */ - if (session->internals.handshake_recv_buffer_size > - 0 && recv_buf[0].length > 0 && remain > 0) { - if ((ssize_t) msg.size <= remain) - append = msg.size; - else - append = remain; + if (unlikely + (session->internals.handshake_recv_buffer_size == 0 && + msg.size < HANDSHAKE_HEADER_SIZE(session) && + session->internals.handshake_header_recv_buffer.byte_length < + HANDSHAKE_HEADER_SIZE(session) - msg.size)) { + bufel = _mbuffer_head_pop_first(&session->internals.record_buffer); + _mbuffer_enqueue(&session->internals.handshake_header_recv_buffer, + bufel); + break; + } else if (session->internals.handshake_recv_buffer_size > + 0 && recv_buf[0].length > recv_buf[0].data.length) { + /* this is the rest of a previous message */ + append = MIN(msg.size, + recv_buf[0].length - + recv_buf[0].data.length); ret = _gnutls_buffer_append_data(&recv_buf @@ -1218,6 +1231,25 @@ int _gnutls_parse_record_buffered_msgs(gnutls_session_t session) record_buffer, append); } else { /* received new message */ + if (unlikely + (session->internals. + handshake_header_recv_buffer.length > 0)) { + bufel = _mbuffer_head_pop_first(&session->internals. + record_buffer); + _mbuffer_enqueue(&session->internals. + handshake_header_recv_buffer, + bufel); + ret = _mbuffer_linearize_align16(&session->internals. + handshake_header_recv_buffer, + get_total_headers(session)); + if (ret < 0) + return gnutls_assert_val(ret); + bufel = _mbuffer_head_pop_first(&session->internals. + handshake_header_recv_buffer); + _mbuffer_head_push_first(&session->internals. + record_buffer, + bufel); + } ret = parse_handshake_header(session, bufel, @@ -1271,7 +1303,7 @@ int _gnutls_parse_record_buffered_msgs(gnutls_session_t session) handshake_buffer_st tmp; do { - /* we now + /* we now * 0. parse headers * 1. insert to handshake_recv_buffer * 2. sort handshake_recv_buffer on sequence numbers @@ -1359,7 +1391,7 @@ int _gnutls_parse_record_buffered_msgs(gnutls_session_t session) } } -/* This is a receive function for the gnutls handshake +/* This is a receive function for the gnutls handshake * protocol. Makes sure that we have received all data. */ ssize_t @@ -1405,7 +1437,7 @@ _gnutls_handshake_io_recv_int(gnutls_session_t session, } do { - /* if we don't have a complete message waiting for us, try + /* if we don't have a complete message waiting for us, try * receiving more */ ret = _gnutls_recv_in_buffers(session, GNUTLS_HANDSHAKE, htype, diff --git a/lib/buffers.h b/lib/buffers.h index e03c45d40d..5576020680 100644 --- a/lib/buffers.h +++ b/lib/buffers.h @@ -16,17 +16,20 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_BUFFERS_H -#define GNUTLS_BUFFERS_H + +#ifndef GNUTLS_LIB_BUFFERS_H +#define GNUTLS_LIB_BUFFERS_H + +#include "mbuffers.h" #define MBUFFER_FLUSH 1 void _gnutls_record_buffer_put(gnutls_session_t session, - content_type_t type, gnutls_uint64 * seq, + content_type_t type, uint64_t seq, mbuffer_st * bufel); inline static int _gnutls_record_buffer_get_size(gnutls_session_t session) @@ -34,6 +37,9 @@ inline static int _gnutls_record_buffer_get_size(gnutls_session_t session) return session->internals.record_buffer.byte_length; } +#define NO_TIMEOUT_FUNC_SET(session) unlikely(session->internals.pull_timeout_func == gnutls_system_recv_timeout \ + && session->internals.pull_func != system_read) + /*- * record_check_unprocessed: * @session: is a #gnutls_session_t structure. @@ -98,6 +104,7 @@ inline static void _gnutls_handshake_recv_buffer_clear(gnutls_session_t _gnutls_handshake_buffer_clear(&session->internals. handshake_recv_buffer[i]); session->internals.handshake_recv_buffer_size = 0; + _mbuffer_head_clear(&session->internals.handshake_header_recv_buffer); } inline static void _gnutls_handshake_recv_buffer_init(gnutls_session_t @@ -109,6 +116,7 @@ inline static void _gnutls_handshake_recv_buffer_init(gnutls_session_t handshake_recv_buffer[i]); } session->internals.handshake_recv_buffer_size = 0; + _mbuffer_head_init(&session->internals.handshake_header_recv_buffer); } int _gnutls_parse_record_buffered_msgs(gnutls_session_t session); @@ -122,4 +130,4 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, _mbuffer_head_clear( &session->internals.handshake_send_buffer); \ _gnutls_handshake_recv_buffer_clear( session); -#endif +#endif /* GNUTLS_LIB_BUFFERS_H */ diff --git a/lib/cert-cred-rawpk.c b/lib/cert-cred-rawpk.c new file mode 100644 index 0000000000..cfa65eb318 --- /dev/null +++ b/lib/cert-cred-rawpk.c @@ -0,0 +1,360 @@ +/* + * Copyright (C) 2017 - 2018 ARPA2 project + * + * Author: Tom Vrancken (dev@tomvrancken.nl) + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include +#include "datum.h" +#include "auth/cert.h" +#include "x509.h" +#include "cert-cred.h" +#include "read-file.h" +#include + + +/** + * gnutls_certificate_set_rawpk_key_mem: + * @cred: is a #gnutls_certificate_credentials_t type. + * @spki: contains a raw public key in + * PKIX.SubjectPublicKeyInfo format. + * @pkey: contains a raw private key. + * @format: encoding of the keys. DER or PEM. + * @pass: an optional password to unlock the private key pkey. + * @key_usage: An ORed sequence of %GNUTLS_KEY_* flags. + * @names: is an array of DNS names belonging to the public-key (NULL if none). + * @names_length: holds the length of the names list. + * @flags: an ORed sequence of #gnutls_pkcs_encrypt_flags_t. + * These apply to the private key pkey. + * + * This function sets a public/private keypair in the + * #gnutls_certificate_credentials_t type to be used for authentication + * and/or encryption. @spki and @privkey should match otherwise set + * signatures cannot be validated. In case of no match this function + * returns %GNUTLS_E_CERTIFICATE_KEY_MISMATCH. This function should + * be called once for the client because there is currently no mechanism + * to determine which raw public-key to select for the peer when there + * are multiple present. Multiple raw public keys for the server can be + * distinghuished by setting the @names. + * + * Note here that @spki is a raw public-key as defined + * in RFC7250. It means that there is no surrounding certificate that + * holds the public key and that there is therefore no direct mechanism + * to prove the authenticity of this key. The keypair can be used during + * a TLS handshake but its authenticity should be established via a + * different mechanism (e.g. TOFU or known fingerprint). + * + * The supported formats are basic unencrypted key, PKCS8, PKCS12, + * and the openssl format and will be autodetected. + * + * If the raw public-key and the private key are given in PEM encoding + * then the strings that hold their values must be null terminated. + * + * Key usage (as defined by X.509 extension (2.5.29.15)) can be explicitly + * set because there is no certificate structure around the key to define + * this value. See for more info gnutls_x509_crt_get_key_usage(). + * + * Note that, this function by default returns zero on success and a + * negative value on error. Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 + * is set using gnutls_certificate_set_flags() it returns an index + * (greater or equal to zero). That index can be used in other functions + * to refer to the added key-pair. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, in case the + * key pair does not match %GNUTLS_E_CERTIFICATE_KEY_MISMATCH is returned, + * in other erroneous cases a different negative error code is returned. + * + * Since: 3.6.6 + **/ +int gnutls_certificate_set_rawpk_key_mem(gnutls_certificate_credentials_t cred, + const gnutls_datum_t* spki, + const gnutls_datum_t* pkey, + gnutls_x509_crt_fmt_t format, + const char* pass, + unsigned int key_usage, + const char **names, + unsigned int names_length, + unsigned int flags) +{ + int ret; + gnutls_privkey_t privkey; + gnutls_pcert_st* pcert; + gnutls_str_array_t str_names; + unsigned int i; + + if (pkey == NULL || spki == NULL) { + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } + + /* Import our private key. This function does all the necessary + * inits, checks and imports. */ + ret = _gnutls_read_key_mem(cred, pkey->data, pkey->size, + format, pass, flags, &privkey); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + /* We now convert our raw public key to a parsed certificate (pcert) structure */ + pcert = gnutls_calloc(1, sizeof(*pcert)); + if (pcert == NULL) { + gnutls_privkey_deinit(privkey); + + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + // Import our raw public key to the pcert structure + ret = gnutls_pcert_import_rawpk_raw(pcert, spki, + format, key_usage, 0); + if (ret < 0) { + gnutls_privkey_deinit(privkey); + + return gnutls_assert_val(ret); + } + + /* Process the names, if any */ + _gnutls_str_array_init(&str_names); + + if (names != NULL && names_length > 0) { + for (i = 0; i < names_length; i++) { + ret = + _gnutls_str_array_append_idna(&str_names, names[i], + strlen(names[i])); + if (ret < 0) { + gnutls_privkey_deinit(privkey); + _gnutls_str_array_clear(&str_names); + + return gnutls_assert_val(ret); + } + } + } + + /* Now that we have converted the key material to our internal structures + * we can now add them to the credentials structure */ + ret = _gnutls_certificate_credential_append_keypair(cred, privkey, str_names, pcert, 1); + // Check for errors + if (ret < 0) { + gnutls_privkey_deinit(privkey); + gnutls_pcert_deinit(pcert); + gnutls_free(pcert); + + return gnutls_assert_val(ret); + } + // Successfully added a certificate + cred->ncerts++; + + /* Check whether the key pair matches. + * After this point we do not deinitialize anything on failure to avoid + * double freeing. We intentionally keep everything as the credentials state + * is documented to be in undefined state. */ + if ((ret = _gnutls_check_key_cert_match(cred)) < 0) { + return gnutls_assert_val(ret); + } + + CRED_RET_SUCCESS(cred); +} + + +/** + * gnutls_certificate_set_rawpk_key_file: + * @cred: is a #gnutls_certificate_credentials_t type. + * @rawpkfile: contains a raw public key in + * PKIX.SubjectPublicKeyInfo format. + * @privkeyfile: contains a file path to a private key. + * @format: encoding of the keys. DER or PEM. + * @pass: an optional password to unlock the private key privkeyfile. + * @key_usage: an ORed sequence of %GNUTLS_KEY_* flags. + * @names: is an array of DNS names belonging to the public-key (NULL if none). + * @names_length: holds the length of the names list. + * @privkey_flags: an ORed sequence of #gnutls_pkcs_encrypt_flags_t. + * These apply to the private key pkey. + * @pkcs11_flags: one of gnutls_pkcs11_obj_flags. These apply to URLs. + * + * This function sets a public/private keypair read from file in the + * #gnutls_certificate_credentials_t type to be used for authentication + * and/or encryption. @spki and @privkey should match otherwise set + * signatures cannot be validated. In case of no match this function + * returns %GNUTLS_E_CERTIFICATE_KEY_MISMATCH. This function should + * be called once for the client because there is currently no mechanism + * to determine which raw public-key to select for the peer when there + * are multiple present. Multiple raw public keys for the server can be + * distinghuished by setting the @names. + * + * Note here that @spki is a raw public-key as defined + * in RFC7250. It means that there is no surrounding certificate that + * holds the public key and that there is therefore no direct mechanism + * to prove the authenticity of this key. The keypair can be used during + * a TLS handshake but its authenticity should be established via a + * different mechanism (e.g. TOFU or known fingerprint). + * + * The supported formats are basic unencrypted key, PKCS8, PKCS12, + * and the openssl format and will be autodetected. + * + * If the raw public-key and the private key are given in PEM encoding + * then the strings that hold their values must be null terminated. + * + * Key usage (as defined by X.509 extension (2.5.29.15)) can be explicitly + * set because there is no certificate structure around the key to define + * this value. See for more info gnutls_x509_crt_get_key_usage(). + * + * Note that, this function by default returns zero on success and a + * negative value on error. Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 + * is set using gnutls_certificate_set_flags() it returns an index + * (greater or equal to zero). That index can be used in other functions + * to refer to the added key-pair. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, in case the + * key pair does not match %GNUTLS_E_CERTIFICATE_KEY_MISMATCH is returned, + * in other erroneous cases a different negative error code is returned. + * + * Since: 3.6.6 + */ +int gnutls_certificate_set_rawpk_key_file(gnutls_certificate_credentials_t cred, + const char* rawpkfile, + const char* privkeyfile, + gnutls_x509_crt_fmt_t format, + const char *pass, + unsigned int key_usage, + const char **names, + unsigned int names_length, + unsigned int privkey_flags, + unsigned int pkcs11_flags) +{ + int ret; + gnutls_privkey_t privkey; + gnutls_pubkey_t pubkey; + gnutls_pcert_st* pcert; + gnutls_datum_t rawpubkey = { NULL, 0 }; // to hold rawpk data from file + size_t key_size; + gnutls_str_array_t str_names; + unsigned int i; + + if (rawpkfile == NULL || privkeyfile == NULL) { + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } + + /* Import our private key. This function does all the necessary + * inits, checks and imports. */ + ret = _gnutls_read_key_file(cred, privkeyfile, format, pass, privkey_flags, &privkey); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + pcert = gnutls_calloc(1, sizeof(*pcert)); + if (pcert == NULL) { + gnutls_privkey_deinit(privkey); + + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + + /* Check whether we are importing our raw public-key from a URL + * or from a regular file. + */ + if (gnutls_url_is_supported(rawpkfile)) { + + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) { + gnutls_privkey_deinit(privkey); + + return gnutls_assert_val(ret); + } + + ret = gnutls_pubkey_import_url(pubkey, rawpkfile, pkcs11_flags); + if (ret < 0) { + gnutls_privkey_deinit(privkey); + gnutls_pubkey_deinit(pubkey); + + return gnutls_assert_val(ret); + } + + ret = gnutls_pcert_import_rawpk(pcert, pubkey, 0); + if (ret < 0) { + gnutls_privkey_deinit(privkey); + gnutls_pubkey_deinit(pubkey); + + return gnutls_assert_val(ret); + } + + } else { + /* Read our raw public-key into memory from file */ + rawpubkey.data = (void*) read_binary_file(rawpkfile, &key_size); + if (rawpubkey.data == NULL) { + gnutls_privkey_deinit(privkey); + + return gnutls_assert_val(GNUTLS_E_FILE_ERROR); + } + rawpubkey.size = key_size; // Implicit type casting + + /* We now convert our raw public key that we've loaded into memory to + * a parsed certificate (pcert) structure. Note that rawpubkey will + * be copied into pcert. Therefore we can directly cleanup rawpubkey. + */ + ret = gnutls_pcert_import_rawpk_raw(pcert, &rawpubkey, + format, key_usage, 0); + + _gnutls_free_datum(&rawpubkey); + + if (ret < 0) { + gnutls_privkey_deinit(privkey); + + return gnutls_assert_val(ret); + } + + } + + /* Process the names, if any */ + _gnutls_str_array_init(&str_names); + + if (names != NULL && names_length > 0) { + for (i = 0; i < names_length; i++) { + ret = + _gnutls_str_array_append_idna(&str_names, names[i], + strlen(names[i])); + if (ret < 0) { + gnutls_privkey_deinit(privkey); + _gnutls_str_array_clear(&str_names); + + return gnutls_assert_val(ret); + } + } + } + + /* Now that we have converted the key material to our internal structures + * we can now add them to the credentials structure */ + ret = _gnutls_certificate_credential_append_keypair(cred, privkey, str_names, pcert, 1); + if (ret < 0) { + gnutls_privkey_deinit(privkey); + gnutls_pcert_deinit(pcert); + gnutls_free(pcert); + + return gnutls_assert_val(ret); + } + // Successfully added a certificate + cred->ncerts++; + + /* Check whether the key pair matches. + * After this point we do not deinitialize anything on failure to avoid + * double freeing. We intentionally keep everything as the credentials state + * is documented to be in undefined state. */ + if ((ret = _gnutls_check_key_cert_match(cred)) < 0) { + return gnutls_assert_val(ret); + } + + CRED_RET_SUCCESS(cred); +} + diff --git a/lib/cert-cred-x509.c b/lib/cert-cred-x509.c new file mode 100644 index 0000000000..4e86a59ba6 --- /dev/null +++ b/lib/cert-cred-x509.c @@ -0,0 +1,1624 @@ +/* + * Copyright (C) 2002-2016 Free Software Foundation, Inc. + * Copyright (C) 2016-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "auth.h" +#include "errors.h" +#include +#include "dh.h" +#include "num.h" +#include "datum.h" +#include +#include +#include +#include +#include +#include +#include +#include "str.h" +#include +#include +#include +#include "x509/common.h" +#include "x509/x509_int.h" +#include +#include +#include "read-file.h" +#include "system-keys.h" +#include "urls.h" +#include "cert-cred.h" +#ifdef _WIN32 +#include +#endif + +/* + * This file includes functions related to adding certificates and other + * related objects in a certificate credentials structure. + */ + + +/* Returns the name of the certificate of a null name + */ +int _gnutls_get_x509_name(gnutls_x509_crt_t crt, gnutls_str_array_t * names) +{ + size_t max_size; + int i, ret = 0, ret2; + char name[MAX_CN]; + unsigned have_dns_name = 0; + + for (i = 0; !(ret < 0); i++) { + max_size = sizeof(name); + + ret = + gnutls_x509_crt_get_subject_alt_name(crt, i, name, + &max_size, NULL); + if (ret == GNUTLS_SAN_DNSNAME) { + have_dns_name = 1; + + ret2 = + _gnutls_str_array_append_idna(names, name, + max_size); + if (ret2 < 0) { + _gnutls_str_array_clear(names); + return gnutls_assert_val(ret2); + } + } + } + + if (have_dns_name == 0) { + max_size = sizeof(name); + ret = + gnutls_x509_crt_get_dn_by_oid(crt, OID_X520_COMMON_NAME, 0, 0, + name, &max_size); + if (ret >= 0) { + ret = _gnutls_str_array_append_idna(names, name, max_size); + if (ret < 0) { + _gnutls_str_array_clear(names); + return gnutls_assert_val(ret); + } + } + } + + return 0; +} + +/* Reads a DER encoded certificate list from memory and stores it to a + * gnutls_cert structure. Returns the number of certificates parsed. + */ +static int +parse_der_cert_mem(gnutls_certificate_credentials_t res, + gnutls_privkey_t key, + const void *input_cert, int input_cert_size) +{ + gnutls_datum_t tmp; + gnutls_x509_crt_t crt; + gnutls_pcert_st *ccert; + int ret; + gnutls_str_array_t names; + + _gnutls_str_array_init(&names); + + ccert = gnutls_malloc(sizeof(*ccert)); + if (ccert == NULL) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + tmp.data = (uint8_t *) input_cert; + tmp.size = input_cert_size; + + ret = gnutls_x509_crt_import(crt, &tmp, GNUTLS_X509_FMT_DER); + if (ret < 0) { + gnutls_assert(); + gnutls_x509_crt_deinit(crt); + goto cleanup; + } + + ret = _gnutls_get_x509_name(crt, &names); + if (ret < 0) { + gnutls_assert(); + gnutls_x509_crt_deinit(crt); + goto cleanup; + } + + ret = gnutls_pcert_import_x509(ccert, crt, 0); + gnutls_x509_crt_deinit(crt); + + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_certificate_credential_append_keypair(res, key, names, ccert, 1); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + return ret; + + cleanup: + _gnutls_str_array_clear(&names); + gnutls_free(ccert); + return ret; +} + +/* Reads a base64 encoded certificate list from memory and stores it to + * a gnutls_cert structure. Returns the number of certificate parsed. + */ +static int +parse_pem_cert_mem(gnutls_certificate_credentials_t res, + gnutls_privkey_t key, + const char *input_cert, int input_cert_size) +{ + int size; + const char *ptr; + gnutls_datum_t tmp; + int ret, count, i; + unsigned ncerts = 0; + gnutls_pcert_st *pcerts = NULL; + gnutls_str_array_t names; + gnutls_x509_crt_t unsorted[DEFAULT_MAX_VERIFY_DEPTH]; + + _gnutls_str_array_init(&names); + + /* move to the certificate + */ + ptr = memmem(input_cert, input_cert_size, + PEM_CERT_SEP, sizeof(PEM_CERT_SEP) - 1); + if (ptr == NULL) + ptr = memmem(input_cert, input_cert_size, + PEM_CERT_SEP2, sizeof(PEM_CERT_SEP2) - 1); + + if (ptr == NULL) { + gnutls_assert(); + return GNUTLS_E_BASE64_DECODING_ERROR; + } + size = input_cert_size - (ptr - input_cert); + + count = 0; + + do { + tmp.data = (void *) ptr; + tmp.size = size; + + ret = gnutls_x509_crt_init(&unsorted[count]); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = gnutls_x509_crt_import(unsorted[count], &tmp, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + count++; + + /* now we move ptr after the pem header + */ + ptr++; + size--; + + /* find the next certificate (if any) + */ + + if (size > 0) { + char *ptr3; + + ptr3 = + memmem(ptr, size, PEM_CERT_SEP, + sizeof(PEM_CERT_SEP) - 1); + if (ptr3 == NULL) + ptr3 = memmem(ptr, size, PEM_CERT_SEP2, + sizeof(PEM_CERT_SEP2) - 1); + + ptr = ptr3; + size = input_cert_size - (ptr - input_cert); + } else + ptr = NULL; + + } + while (ptr != NULL && count < DEFAULT_MAX_VERIFY_DEPTH); + + ret = + _gnutls_get_x509_name(unsorted[0], &names); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + pcerts = gnutls_malloc(sizeof(gnutls_pcert_st) * count); + if (pcerts == NULL) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + + ncerts = count; + ret = + gnutls_pcert_import_x509_list(pcerts, unsorted, &ncerts, GNUTLS_X509_CRT_LIST_SORT); + if (ret < 0) { + gnutls_free(pcerts); + gnutls_assert(); + goto cleanup; + } + + ret = + _gnutls_certificate_credential_append_keypair(res, key, names, pcerts, ncerts); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + for (i = 0; i < count; i++) + gnutls_x509_crt_deinit(unsorted[i]); + + return ncerts; + + cleanup: + _gnutls_str_array_clear(&names); + for (i = 0; i < count; i++) + gnutls_x509_crt_deinit(unsorted[i]); + if (pcerts) { + for (i = 0; i < count; i++) + gnutls_pcert_deinit(&pcerts[i]); + gnutls_free(pcerts); + } + return ret; +} + + + +/* Reads a DER or PEM certificate from memory + */ +static int +read_cert_mem(gnutls_certificate_credentials_t res, + gnutls_privkey_t key, + const void *cert, + int cert_size, gnutls_x509_crt_fmt_t type) +{ + int ret; + + if (type == GNUTLS_X509_FMT_DER) + ret = parse_der_cert_mem(res, key, cert, cert_size); + else + ret = parse_pem_cert_mem(res, key, cert, cert_size); + + if (ret < 0) { + gnutls_assert(); + return ret; + } + + return ret; +} + +static int tmp_pin_cb(void *userdata, int attempt, const char *token_url, + const char *token_label, unsigned int flags, + char *pin, size_t pin_max) +{ + const char *tmp_pin = userdata; + + if (attempt == 0) { + snprintf(pin, pin_max, "%s", tmp_pin); + return 0; + } + + return -1; +} + +/* Reads a PEM encoded PKCS-1 RSA/DSA private key from memory. Type + * indicates the certificate format. + * + * It returns the private key read in @rkey. + */ +int +_gnutls_read_key_mem(gnutls_certificate_credentials_t res, + const void *key, int key_size, gnutls_x509_crt_fmt_t type, + const char *pass, unsigned int flags, + gnutls_privkey_t *rkey) +{ + int ret; + gnutls_datum_t tmp; + gnutls_privkey_t privkey; + + if (key) { + tmp.data = (uint8_t *) key; + tmp.size = key_size; + + ret = gnutls_privkey_init(&privkey); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + if (res->pin.cb) { + gnutls_privkey_set_pin_function(privkey, + res->pin.cb, + res->pin.data); + } else if (pass != NULL) { + snprintf(res->pin_tmp, sizeof(res->pin_tmp), "%s", + pass); + gnutls_privkey_set_pin_function(privkey, + tmp_pin_cb, + res->pin_tmp); + } + + ret = + gnutls_privkey_import_x509_raw(privkey, &tmp, type, + pass, flags); + if (ret < 0) { + gnutls_assert(); + gnutls_privkey_deinit(privkey); + return ret; + } + + *rkey = privkey; + } else { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + return 0; +} + + +/* Reads a private key from a token. + */ +static int +read_key_url(gnutls_certificate_credentials_t res, const char *url, gnutls_privkey_t *rkey) +{ + int ret; + gnutls_privkey_t pkey = NULL; + + /* allocate space for the pkey list + */ + ret = gnutls_privkey_init(&pkey); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (res->pin.cb) + gnutls_privkey_set_pin_function(pkey, res->pin.cb, + res->pin.data); + + ret = gnutls_privkey_import_url(pkey, url, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + *rkey = pkey; + + return 0; + + cleanup: + if (pkey) + gnutls_privkey_deinit(pkey); + + return ret; +} + + +#define MAX_PKCS11_CERT_CHAIN 8 +/* Reads a certificate key from a token. + */ +static int +read_cert_url(gnutls_certificate_credentials_t res, gnutls_privkey_t key, const char *url) +{ + int ret; + gnutls_x509_crt_t crt = NULL; + gnutls_pcert_st *ccert = NULL; + gnutls_str_array_t names; + gnutls_datum_t t = {NULL, 0}; + unsigned i, count = 0; + + _gnutls_str_array_init(&names); + + ccert = gnutls_malloc(sizeof(*ccert)*MAX_PKCS11_CERT_CHAIN); + if (ccert == NULL) { + gnutls_assert(); + ret = GNUTLS_E_MEMORY_ERROR; + goto cleanup; + } + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (res->pin.cb) + gnutls_x509_crt_set_pin_function(crt, res->pin.cb, + res->pin.data); + + ret = gnutls_x509_crt_import_url(crt, url, 0); + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + ret = + gnutls_x509_crt_import_url(crt, url, + GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_get_x509_name(crt, &names); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + /* Try to load the whole certificate chain from the PKCS #11 token */ + for (i=0;i 0 && ret != 0) { + /* self signed */ + break; + } + + ret = gnutls_pcert_import_x509(&ccert[i], crt, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + count++; + + ret = _gnutls_get_raw_issuer(url, crt, &t, 0); + if (ret < 0) + break; + + gnutls_x509_crt_deinit(crt); + crt = NULL; + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = gnutls_x509_crt_import(crt, &t, GNUTLS_X509_FMT_DER); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + gnutls_free(t.data); + } + + ret = _gnutls_certificate_credential_append_keypair(res, key, names, ccert, count); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (crt != NULL) + gnutls_x509_crt_deinit(crt); + + return 0; +cleanup: + if (crt != NULL) + gnutls_x509_crt_deinit(crt); + gnutls_free(t.data); + _gnutls_str_array_clear(&names); + gnutls_free(ccert); + return ret; +} + +/* Reads a certificate file + */ +static int +read_cert_file(gnutls_certificate_credentials_t res, + gnutls_privkey_t key, + const char *certfile, gnutls_x509_crt_fmt_t type) +{ + int ret; + size_t size; + char *data; + + if (gnutls_url_is_supported(certfile)) { + return read_cert_url(res, key, certfile); + } + + data = read_binary_file(certfile, &size); + + if (data == NULL) { + gnutls_assert(); + return GNUTLS_E_FILE_ERROR; + } + + ret = read_cert_mem(res, key, data, size, type); + free(data); + + return ret; + +} + + + +/* Reads PKCS-1 RSA private key file or a DSA file (in the format openssl + * stores it). + */ +int +_gnutls_read_key_file(gnutls_certificate_credentials_t res, + const char *keyfile, gnutls_x509_crt_fmt_t type, + const char *pass, unsigned int flags, + gnutls_privkey_t *rkey) +{ + int ret; + size_t size; + char *data; + + if (_gnutls_url_is_known(keyfile)) { + if (gnutls_url_is_supported(keyfile)) { + /* if no PIN function is specified, and we have a PIN, + * specify one */ + if (pass != NULL && res->pin.cb == NULL) { + snprintf(res->pin_tmp, sizeof(res->pin_tmp), "%s", pass); + gnutls_certificate_set_pin_function(res, tmp_pin_cb, res->pin_tmp); + } + + return read_key_url(res, keyfile, rkey); + } else + return + gnutls_assert_val + (GNUTLS_E_UNIMPLEMENTED_FEATURE); + } + + data = read_binary_file(keyfile, &size); + + if (data == NULL) { + gnutls_assert(); + return GNUTLS_E_FILE_ERROR; + } + + ret = _gnutls_read_key_mem(res, data, size, type, pass, flags, rkey); + free(data); + + return ret; +} + +/** + * gnutls_certificate_set_x509_key_mem: + * @res: is a #gnutls_certificate_credentials_t type. + * @cert: contains a certificate list (path) for the specified private key + * @key: is the private key, or %NULL + * @type: is PEM or DER + * + * This function sets a certificate/private key pair in the + * gnutls_certificate_credentials_t type. This function may be called + * more than once, in case multiple keys/certificates exist for the + * server. + * + * Note that the keyUsage (2.5.29.15) PKIX extension in X.509 certificates + * is supported. This means that certificates intended for signing cannot + * be used for ciphersuites that require encryption. + * + * If the certificate and the private key are given in PEM encoding + * then the strings that hold their values must be null terminated. + * + * The @key may be %NULL if you are using a sign callback, see + * gnutls_sign_callback_set(). + * + * Note that, this function by default returns zero on success and a negative value on error. + * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() + * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. + * + * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). + * + **/ +int +gnutls_certificate_set_x509_key_mem(gnutls_certificate_credentials_t res, + const gnutls_datum_t * cert, + const gnutls_datum_t * key, + gnutls_x509_crt_fmt_t type) +{ + return gnutls_certificate_set_x509_key_mem2(res, cert, key, type, + NULL, 0); +} + +/** + * gnutls_certificate_set_x509_key_mem2: + * @res: is a #gnutls_certificate_credentials_t type. + * @cert: contains a certificate list (path) for the specified private key + * @key: is the private key, or %NULL + * @type: is PEM or DER + * @pass: is the key's password + * @flags: an ORed sequence of gnutls_pkcs_encrypt_flags_t + * + * This function sets a certificate/private key pair in the + * gnutls_certificate_credentials_t type. This function may be called + * more than once, in case multiple keys/certificates exist for the + * server. + * + * Note that the keyUsage (2.5.29.15) PKIX extension in X.509 certificates + * is supported. This means that certificates intended for signing cannot + * be used for ciphersuites that require encryption. + * + * If the certificate and the private key are given in PEM encoding + * then the strings that hold their values must be null terminated. + * + * The @key may be %NULL if you are using a sign callback, see + * gnutls_sign_callback_set(). + * + * Note that, this function by default returns zero on success and a negative value on error. + * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() + * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. + * + * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). + **/ +int +gnutls_certificate_set_x509_key_mem2(gnutls_certificate_credentials_t res, + const gnutls_datum_t * cert, + const gnutls_datum_t * key, + gnutls_x509_crt_fmt_t type, + const char *pass, unsigned int flags) +{ + int ret; + gnutls_privkey_t rkey; + + /* this should be first + */ + if ((ret = _gnutls_read_key_mem(res, key ? key->data : NULL, + key ? key->size : 0, type, pass, + flags, &rkey)) < 0) + return ret; + + if ((ret = read_cert_mem(res, rkey, cert->data, cert->size, type)) < 0) { + gnutls_privkey_deinit(rkey); + return ret; + } + + res->ncerts++; + + if (key && (ret = _gnutls_check_key_cert_match(res)) < 0) { + gnutls_assert(); + return ret; + } + + CRED_RET_SUCCESS(res); +} + + +/** + * gnutls_certificate_set_x509_key: + * @res: is a #gnutls_certificate_credentials_t type. + * @cert_list: contains a certificate list (path) for the specified private key + * @cert_list_size: holds the size of the certificate list + * @key: is a #gnutls_x509_privkey_t key + * + * This function sets a certificate/private key pair in the + * gnutls_certificate_credentials_t type. This function may be + * called more than once, in case multiple keys/certificates exist for + * the server. For clients that wants to send more than their own end + * entity certificate (e.g., also an intermediate CA cert) then put + * the certificate chain in @cert_list. + * + * Note that the certificates and keys provided, can be safely deinitialized + * after this function is called. + * + * If that function fails to load the @res type is at an undefined state, it must + * not be reused to load other keys or certificates. + * + * Note that, this function by default returns zero on success and a negative value on error. + * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() + * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. + * + * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). + * + * Since: 2.4.0 + **/ +int +gnutls_certificate_set_x509_key(gnutls_certificate_credentials_t res, + gnutls_x509_crt_t * cert_list, + int cert_list_size, + gnutls_x509_privkey_t key) +{ + int ret; + gnutls_privkey_t pkey; + gnutls_pcert_st *pcerts = NULL; + gnutls_str_array_t names; + + _gnutls_str_array_init(&names); + + /* this should be first + */ + ret = gnutls_privkey_init(&pkey); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + if (res->pin.cb) + gnutls_privkey_set_pin_function(pkey, res->pin.cb, + res->pin.data); + + ret = + gnutls_privkey_import_x509(pkey, key, + GNUTLS_PRIVKEY_IMPORT_COPY); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + /* load certificates */ + pcerts = gnutls_malloc(sizeof(gnutls_pcert_st) * cert_list_size); + if (pcerts == NULL) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + + ret = _gnutls_get_x509_name(cert_list[0], &names); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = + gnutls_pcert_import_x509_list(pcerts, cert_list, (unsigned int*)&cert_list_size, + GNUTLS_X509_CRT_LIST_SORT); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = + _gnutls_certificate_credential_append_keypair(res, pkey, names, pcerts, + cert_list_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + res->ncerts++; + + /* after this point we do not deinitialize anything on failure to avoid + * double freeing. We intentionally keep everything as the credentials state + * is documented to be on undefined state. */ + if ((ret = _gnutls_check_key_cert_match(res)) < 0) { + gnutls_assert(); + return ret; + } + + CRED_RET_SUCCESS(res); + + cleanup: + gnutls_free(pcerts); + _gnutls_str_array_clear(&names); + return ret; +} + +/** + * gnutls_certificate_get_x509_key: + * @res: is a #gnutls_certificate_credentials_t type. + * @index: The index of the key to obtain. + * @key: Location to store the key. + * + * Obtains a X.509 private key that has been stored in @res with one of + * gnutls_certificate_set_x509_key(), gnutls_certificate_set_key(), + * gnutls_certificate_set_x509_key_file(), + * gnutls_certificate_set_x509_key_file2(), + * gnutls_certificate_set_x509_key_mem(), or + * gnutls_certificate_set_x509_key_mem2(). The returned key must be deallocated + * with gnutls_x509_privkey_deinit() when no longer needed. + * + * The @index matches the return value of gnutls_certificate_set_x509_key() and friends + * functions, when the %GNUTLS_CERTIFICATE_API_V2 flag is set. + * + * If there is no key with the given index, + * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned. If the key with the + * given index is not a X.509 key, %GNUTLS_E_INVALID_REQUEST is returned. + * + * Returns: %GNUTLS_E_SUCCESS (0) on success, or a negative error code. + * + * Since: 3.4.0 + */ +int +gnutls_certificate_get_x509_key(gnutls_certificate_credentials_t res, + unsigned index, + gnutls_x509_privkey_t *key) +{ + if (index >= res->ncerts) { + gnutls_assert(); + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + } + + return gnutls_privkey_export_x509(res->certs[index].pkey, key); +} + +/** + * gnutls_certificate_get_x509_crt: + * @res: is a #gnutls_certificate_credentials_t type. + * @index: The index of the certificate list to obtain. + * @crt_list: Where to store the certificate list. + * @crt_list_size: Will hold the number of certificates. + * + * Obtains a X.509 certificate list that has been stored in @res with one of + * gnutls_certificate_set_x509_key(), gnutls_certificate_set_key(), + * gnutls_certificate_set_x509_key_file(), + * gnutls_certificate_set_x509_key_file2(), + * gnutls_certificate_set_x509_key_mem(), or + * gnutls_certificate_set_x509_key_mem2(). Each certificate in the returned + * certificate list must be deallocated with gnutls_x509_crt_deinit(), and the + * list itself must be freed with gnutls_free(). + * + * The @index matches the return value of gnutls_certificate_set_x509_key() and friends + * functions, when the %GNUTLS_CERTIFICATE_API_V2 flag is set. + * + * If there is no certificate with the given index, + * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned. If the certificate + * with the given index is not a X.509 certificate, %GNUTLS_E_INVALID_REQUEST + * is returned. The returned certificates must be deinitialized after + * use, and the @crt_list pointer must be freed using gnutls_free(). + * + * Returns: %GNUTLS_E_SUCCESS (0) on success, or a negative error code. + * + * Since: 3.4.0 + */ +int +gnutls_certificate_get_x509_crt(gnutls_certificate_credentials_t res, + unsigned index, + gnutls_x509_crt_t **crt_list, + unsigned *crt_list_size) +{ + int ret; + unsigned i; + + if (index >= res->ncerts) { + gnutls_assert(); + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + } + + *crt_list_size = res->certs[index].cert_list_length; + *crt_list = gnutls_malloc( + res->certs[index].cert_list_length * sizeof (gnutls_x509_crt_t)); + if (*crt_list == NULL) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + + for (i = 0; i < res->certs[index].cert_list_length; ++i) { + ret = gnutls_pcert_export_x509(&res->certs[index].cert_list[i], &(*crt_list)[i]); + if (ret < 0) { + while (i--) + gnutls_x509_crt_deinit((*crt_list)[i]); + gnutls_free(*crt_list); + + return gnutls_assert_val(ret); + } + } + + return 0; +} + +/** + * gnutls_certificate_set_trust_list: + * @res: is a #gnutls_certificate_credentials_t type. + * @tlist: is a #gnutls_x509_trust_list_t type + * @flags: must be zero + * + * This function sets a trust list in the gnutls_certificate_credentials_t type. + * + * Note that the @tlist will become part of the credentials + * structure and must not be deallocated. It will be automatically deallocated + * when the @res structure is deinitialized. + * + * Returns: %GNUTLS_E_SUCCESS (0) on success, or a negative error code. + * + * Since: 3.2.2 + **/ +void +gnutls_certificate_set_trust_list(gnutls_certificate_credentials_t res, + gnutls_x509_trust_list_t tlist, + unsigned flags) +{ + gnutls_x509_trust_list_deinit(res->tlist, 1); + + res->tlist = tlist; +} + +/** + * gnutls_certificate_get_trust_list: + * @res: is a #gnutls_certificate_credentials_t type. + * @tlist: Location where to store the trust list. + * + * Obtains the list of trusted certificates stored in @res and writes a + * pointer to it to the location @tlist. The pointer will point to memory + * internal to @res, and must not be deinitialized. It will be automatically + * deallocated when the @res structure is deinitialized. + * + * Since: 3.4.0 + **/ +void +gnutls_certificate_get_trust_list(gnutls_certificate_credentials_t res, + gnutls_x509_trust_list_t *tlist) +{ + *tlist = res->tlist; +} + +/** + * gnutls_certificate_set_x509_key_file: + * @res: is a #gnutls_certificate_credentials_t type. + * @certfile: is a file that containing the certificate list (path) for + * the specified private key, in PKCS7 format, or a list of certificates + * @keyfile: is a file that contains the private key + * @type: is PEM or DER + * + * This function sets a certificate/private key pair in the + * gnutls_certificate_credentials_t type. This function may be + * called more than once, in case multiple keys/certificates exist for + * the server. For clients that need to send more than its own end + * entity certificate, e.g., also an intermediate CA cert, then the + * @certfile must contain the ordered certificate chain. + * + * Note that the names in the certificate provided will be considered + * when selecting the appropriate certificate to use (in case of multiple + * certificate/key pairs). + * + * This function can also accept URLs at @keyfile and @certfile. In that case it + * will use the private key and certificate indicated by the URLs. Note + * that the supported URLs are the ones indicated by gnutls_url_is_supported(). + * + * In case the @certfile is provided as a PKCS #11 URL, then the certificate, and its + * present issuers in the token are imported (i.e., forming the required trust chain). + * + * If that function fails to load the @res structure is at an undefined state, it must + * not be reused to load other keys or certificates. + * + * Note that, this function by default returns zero on success and a negative value on error. + * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() + * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. + * + * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). + * + * Since: 3.1.11 + **/ +int +gnutls_certificate_set_x509_key_file(gnutls_certificate_credentials_t res, + const char *certfile, + const char *keyfile, + gnutls_x509_crt_fmt_t type) +{ + return gnutls_certificate_set_x509_key_file2(res, certfile, + keyfile, type, NULL, + 0); +} + +/** + * gnutls_certificate_set_x509_key_file2: + * @res: is a #gnutls_certificate_credentials_t type. + * @certfile: is a file that containing the certificate list (path) for + * the specified private key, in PKCS7 format, or a list of certificates + * @keyfile: is a file that contains the private key + * @type: is PEM or DER + * @pass: is the password of the key + * @flags: an ORed sequence of gnutls_pkcs_encrypt_flags_t + * + * This function sets a certificate/private key pair in the + * gnutls_certificate_credentials_t type. This function may be + * called more than once, in case multiple keys/certificates exist for + * the server. For clients that need to send more than its own end + * entity certificate, e.g., also an intermediate CA cert, then the + * @certfile must contain the ordered certificate chain. + * + * Note that the names in the certificate provided will be considered + * when selecting the appropriate certificate to use (in case of multiple + * certificate/key pairs). + * + * This function can also accept URLs at @keyfile and @certfile. In that case it + * will use the private key and certificate indicated by the URLs. Note + * that the supported URLs are the ones indicated by gnutls_url_is_supported(). + * Before GnuTLS 3.4.0 when a URL was specified, the @pass part was ignored and a + * PIN callback had to be registered, this is no longer the case in current releases. + * + * In case the @certfile is provided as a PKCS #11 URL, then the certificate, and its + * present issuers in the token are imported (i.e., forming the required trust chain). + * + * If that function fails to load the @res structure is at an undefined state, it must + * not be reused to load other keys or certificates. + * + * Note that, this function by default returns zero on success and a negative value on error. + * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() + * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. + * + * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). + * + **/ +int +gnutls_certificate_set_x509_key_file2(gnutls_certificate_credentials_t res, + const char *certfile, + const char *keyfile, + gnutls_x509_crt_fmt_t type, + const char *pass, unsigned int flags) +{ + int ret; + gnutls_privkey_t rkey; + + /* this should be first + */ + if ((ret = _gnutls_read_key_file(res, keyfile, type, pass, flags, &rkey)) < 0) + return ret; + + if ((ret = read_cert_file(res, rkey, certfile, type)) < 0) { + gnutls_privkey_deinit(rkey); + return ret; + } + + res->ncerts++; + + if ((ret = _gnutls_check_key_cert_match(res)) < 0) { + gnutls_assert(); + return ret; + } + + CRED_RET_SUCCESS(res); +} + +/** + * gnutls_certificate_set_x509_trust_mem: + * @res: is a #gnutls_certificate_credentials_t type. + * @ca: is a list of trusted CAs or a DER certificate + * @type: is DER or PEM + * + * This function adds the trusted CAs in order to verify client or + * server certificates. In case of a client this is not required to be + * called if the certificates are not verified using + * gnutls_certificate_verify_peers2(). This function may be called + * multiple times. + * + * In case of a server the CAs set here will be sent to the client if + * a certificate request is sent. This can be disabled using + * gnutls_certificate_send_x509_rdn_sequence(). + * + * Returns: the number of certificates processed or a negative error code + * on error. + **/ +int +gnutls_certificate_set_x509_trust_mem(gnutls_certificate_credentials_t res, + const gnutls_datum_t * ca, + gnutls_x509_crt_fmt_t type) +{ +int ret; + + ret = gnutls_x509_trust_list_add_trust_mem(res->tlist, ca, NULL, + type, GNUTLS_TL_USE_IN_TLS, 0); + if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND) + return 0; + + return ret; +} + +/** + * gnutls_certificate_set_x509_trust: + * @res: is a #gnutls_certificate_credentials_t type. + * @ca_list: is a list of trusted CAs + * @ca_list_size: holds the size of the CA list + * + * This function adds the trusted CAs in order to verify client + * or server certificates. In case of a client this is not required + * to be called if the certificates are not verified using + * gnutls_certificate_verify_peers2(). + * This function may be called multiple times. + * + * In case of a server the CAs set here will be sent to the client if + * a certificate request is sent. This can be disabled using + * gnutls_certificate_send_x509_rdn_sequence(). + * + * Returns: the number of certificates processed or a negative error code + * on error. + * + * Since: 2.4.0 + **/ +int +gnutls_certificate_set_x509_trust(gnutls_certificate_credentials_t res, + gnutls_x509_crt_t * ca_list, + int ca_list_size) +{ + int ret, i, j; + gnutls_x509_crt_t *new_list = gnutls_malloc(ca_list_size * sizeof(gnutls_x509_crt_t)); + + if (!new_list) + return GNUTLS_E_MEMORY_ERROR; + + for (i = 0; i < ca_list_size; i++) { + ret = gnutls_x509_crt_init(&new_list[i]); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_x509_crt_cpy(new_list[i], ca_list[i]); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } + + ret = + gnutls_x509_trust_list_add_cas(res->tlist, new_list, + ca_list_size, GNUTLS_TL_USE_IN_TLS); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + gnutls_free(new_list); + return ret; + + cleanup: + for (j = 0; j < i; j++) + gnutls_x509_crt_deinit(new_list[j]); + gnutls_free(new_list); + + return ret; +} + + +/** + * gnutls_certificate_set_x509_trust_file: + * @cred: is a #gnutls_certificate_credentials_t type. + * @cafile: is a file containing the list of trusted CAs (DER or PEM list) + * @type: is PEM or DER + * + * This function adds the trusted CAs in order to verify client or + * server certificates. In case of a client this is not required to + * be called if the certificates are not verified using + * gnutls_certificate_verify_peers2(). This function may be called + * multiple times. + * + * In case of a server the names of the CAs set here will be sent to + * the client if a certificate request is sent. This can be disabled + * using gnutls_certificate_send_x509_rdn_sequence(). + * + * This function can also accept URLs. In that case it + * will import all certificates that are marked as trusted. Note + * that the supported URLs are the ones indicated by gnutls_url_is_supported(). + * + * Returns: the number of certificates processed + **/ +int +gnutls_certificate_set_x509_trust_file(gnutls_certificate_credentials_t + cred, const char *cafile, + gnutls_x509_crt_fmt_t type) +{ +int ret; + + ret = gnutls_x509_trust_list_add_trust_file(cred->tlist, cafile, NULL, + type, GNUTLS_TL_USE_IN_TLS, 0); + if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND) + return 0; + + return ret; +} + +/** + * gnutls_certificate_set_x509_trust_dir: + * @cred: is a #gnutls_certificate_credentials_t type. + * @ca_dir: is a directory containing the list of trusted CAs (DER or PEM list) + * @type: is PEM or DER + * + * This function adds the trusted CAs present in the directory in order to + * verify client or server certificates. This function is identical + * to gnutls_certificate_set_x509_trust_file() but loads all certificates + * in a directory. + * + * Returns: the number of certificates processed + * + * Since: 3.3.6 + * + **/ +int +gnutls_certificate_set_x509_trust_dir(gnutls_certificate_credentials_t cred, + const char *ca_dir, + gnutls_x509_crt_fmt_t type) +{ +int ret; + + ret = gnutls_x509_trust_list_add_trust_dir(cred->tlist, ca_dir, NULL, + type, GNUTLS_TL_USE_IN_TLS, 0); + if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND) + return 0; + + return ret; +} + +/** + * gnutls_certificate_set_x509_system_trust: + * @cred: is a #gnutls_certificate_credentials_t type. + * + * This function adds the system's default trusted CAs in order to + * verify client or server certificates. + * + * In the case the system is currently unsupported %GNUTLS_E_UNIMPLEMENTED_FEATURE + * is returned. + * + * Returns: the number of certificates processed or a negative error code + * on error. + * + * Since: 3.0.20 + **/ +int +gnutls_certificate_set_x509_system_trust(gnutls_certificate_credentials_t + cred) +{ + return gnutls_x509_trust_list_add_system_trust(cred->tlist, + GNUTLS_TL_USE_IN_TLS, 0); +} + +/** + * gnutls_certificate_set_x509_crl_mem: + * @res: is a #gnutls_certificate_credentials_t type. + * @CRL: is a list of trusted CRLs. They should have been verified before. + * @type: is DER or PEM + * + * This function adds the trusted CRLs in order to verify client or + * server certificates. In case of a client this is not required to + * be called if the certificates are not verified using + * gnutls_certificate_verify_peers2(). This function may be called + * multiple times. + * + * Returns: number of CRLs processed, or a negative error code on error. + **/ +int +gnutls_certificate_set_x509_crl_mem(gnutls_certificate_credentials_t res, + const gnutls_datum_t * CRL, + gnutls_x509_crt_fmt_t type) +{ + unsigned flags = GNUTLS_TL_USE_IN_TLS; + int ret; + + if (res->flags & GNUTLS_CERTIFICATE_VERIFY_CRLS) + flags |= GNUTLS_TL_VERIFY_CRL|GNUTLS_TL_FAIL_ON_INVALID_CRL; + + ret = gnutls_x509_trust_list_add_trust_mem(res->tlist, NULL, CRL, + type, flags, 0); + if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND) + return 0; + + return ret; +} + +/** + * gnutls_certificate_set_x509_crl: + * @res: is a #gnutls_certificate_credentials_t type. + * @crl_list: is a list of trusted CRLs. They should have been verified before. + * @crl_list_size: holds the size of the crl_list + * + * This function adds the trusted CRLs in order to verify client or + * server certificates. In case of a client this is not required to + * be called if the certificates are not verified using + * gnutls_certificate_verify_peers2(). This function may be called + * multiple times. + * + * Returns: number of CRLs processed, or a negative error code on error. + * + * Since: 2.4.0 + **/ +int +gnutls_certificate_set_x509_crl(gnutls_certificate_credentials_t res, + gnutls_x509_crl_t * crl_list, + int crl_list_size) +{ + int ret, i, j; + gnutls_x509_crl_t *new_crl = gnutls_malloc(crl_list_size * sizeof(gnutls_x509_crl_t)); + unsigned flags = GNUTLS_TL_USE_IN_TLS; + + if (res->flags & GNUTLS_CERTIFICATE_VERIFY_CRLS) + flags |= GNUTLS_TL_VERIFY_CRL|GNUTLS_TL_FAIL_ON_INVALID_CRL; + + if (!new_crl) + return GNUTLS_E_MEMORY_ERROR; + + for (i = 0; i < crl_list_size; i++) { + ret = gnutls_x509_crl_init(&new_crl[i]); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_x509_crl_cpy(new_crl[i], crl_list[i]); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } + + ret = + gnutls_x509_trust_list_add_crls(res->tlist, new_crl, + crl_list_size, flags, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + free(new_crl); + return ret; + + cleanup: + for (j = 0; j < i; j++) + gnutls_x509_crl_deinit(new_crl[j]); + free(new_crl); + + return ret; +} + +/** + * gnutls_certificate_set_x509_crl_file: + * @res: is a #gnutls_certificate_credentials_t type. + * @crlfile: is a file containing the list of verified CRLs (DER or PEM list) + * @type: is PEM or DER + * + * This function adds the trusted CRLs in order to verify client or server + * certificates. In case of a client this is not required + * to be called if the certificates are not verified using + * gnutls_certificate_verify_peers2(). + * This function may be called multiple times. + * + * Returns: number of CRLs processed or a negative error code on error. + **/ +int +gnutls_certificate_set_x509_crl_file(gnutls_certificate_credentials_t res, + const char *crlfile, + gnutls_x509_crt_fmt_t type) +{ + int ret; + unsigned flags = GNUTLS_TL_USE_IN_TLS; + + if (res->flags & GNUTLS_CERTIFICATE_VERIFY_CRLS) + flags |= GNUTLS_TL_VERIFY_CRL|GNUTLS_TL_FAIL_ON_INVALID_CRL; + + ret = gnutls_x509_trust_list_add_trust_file(res->tlist, NULL, crlfile, + type, flags, 0); + if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND) + return 0; + + return ret; +} + +#include + + +/** + * gnutls_certificate_set_x509_simple_pkcs12_file: + * @res: is a #gnutls_certificate_credentials_t type. + * @pkcs12file: filename of file containing PKCS#12 blob. + * @type: is PEM or DER of the @pkcs12file. + * @password: optional password used to decrypt PKCS#12 file, bags and keys. + * + * This function sets a certificate/private key pair and/or a CRL in + * the gnutls_certificate_credentials_t type. This function may + * be called more than once (in case multiple keys/certificates exist + * for the server). + * + * PKCS#12 files with a MAC, encrypted bags and PKCS #8 + * private keys are supported. However, + * only password based security, and the same password for all + * operations, are supported. + * + * PKCS#12 file may contain many keys and/or certificates, and this + * function will try to auto-detect based on the key ID the certificate + * and key pair to use. If the PKCS#12 file contain the issuer of + * the selected certificate, it will be appended to the certificate + * to form a chain. + * + * If more than one private keys are stored in the PKCS#12 file, + * then only one key will be read (and it is undefined which one). + * + * It is believed that the limitations of this function is acceptable + * for most usage, and that any more flexibility would introduce + * complexity that would make it harder to use this functionality at + * all. + * + * Note that, this function by default returns zero on success and a negative value on error. + * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() + * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. + * + * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). + * + **/ +int + gnutls_certificate_set_x509_simple_pkcs12_file + (gnutls_certificate_credentials_t res, const char *pkcs12file, + gnutls_x509_crt_fmt_t type, const char *password) { + gnutls_datum_t p12blob; + size_t size; + int ret; + + p12blob.data = (void *) read_binary_file(pkcs12file, &size); + p12blob.size = (unsigned int) size; + if (p12blob.data == NULL) { + gnutls_assert(); + return GNUTLS_E_FILE_ERROR; + } + + ret = + gnutls_certificate_set_x509_simple_pkcs12_mem(res, &p12blob, + type, password); + free(p12blob.data); + + return ret; +} + +/** + * gnutls_certificate_set_x509_simple_pkcs12_mem: + * @res: is a #gnutls_certificate_credentials_t type. + * @p12blob: the PKCS#12 blob. + * @type: is PEM or DER of the @pkcs12file. + * @password: optional password used to decrypt PKCS#12 file, bags and keys. + * + * This function sets a certificate/private key pair and/or a CRL in + * the gnutls_certificate_credentials_t type. This function may + * be called more than once (in case multiple keys/certificates exist + * for the server). + * + * Encrypted PKCS#12 bags and PKCS#8 private keys are supported. However, + * only password based security, and the same password for all + * operations, are supported. + * + * PKCS#12 file may contain many keys and/or certificates, and this + * function will try to auto-detect based on the key ID the certificate + * and key pair to use. If the PKCS#12 file contain the issuer of + * the selected certificate, it will be appended to the certificate + * to form a chain. + * + * If more than one private keys are stored in the PKCS#12 file, + * then only one key will be read (and it is undefined which one). + * + * It is believed that the limitations of this function is acceptable + * for most usage, and that any more flexibility would introduce + * complexity that would make it harder to use this functionality at + * all. + * + * Note that, this function by default returns zero on success and a negative value on error. + * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() + * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. + * + * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). + * + * Since: 2.8.0 + **/ +int + gnutls_certificate_set_x509_simple_pkcs12_mem + (gnutls_certificate_credentials_t res, const gnutls_datum_t * p12blob, + gnutls_x509_crt_fmt_t type, const char *password) { + gnutls_pkcs12_t p12; + gnutls_x509_privkey_t key = NULL; + gnutls_x509_crt_t *chain = NULL; + gnutls_x509_crl_t crl = NULL; + unsigned int chain_size = 0, i; + int ret, idx; + + ret = gnutls_pkcs12_init(&p12); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + ret = gnutls_pkcs12_import(p12, p12blob, type, 0); + if (ret < 0) { + gnutls_assert(); + gnutls_pkcs12_deinit(p12); + return ret; + } + + if (password) { + ret = gnutls_pkcs12_verify_mac(p12, password); + if (ret < 0) { + gnutls_assert(); + gnutls_pkcs12_deinit(p12); + return ret; + } + } + + ret = + gnutls_pkcs12_simple_parse(p12, password, &key, &chain, + &chain_size, NULL, NULL, &crl, 0); + gnutls_pkcs12_deinit(p12); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + if (key && chain) { + ret = + gnutls_certificate_set_x509_key(res, chain, chain_size, + key); + if (ret < 0) { + gnutls_assert(); + goto done; + } + + idx = ret; + } else { + gnutls_assert(); + ret = GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + goto done; + } + + if (crl) { + ret = gnutls_certificate_set_x509_crl(res, &crl, 1); + if (ret < 0) { + gnutls_assert(); + goto done; + } + } + + if (res->flags & GNUTLS_CERTIFICATE_API_V2) + ret = idx; + else + ret = 0; + + done: + if (chain) { + for (i = 0; i < chain_size; i++) + gnutls_x509_crt_deinit(chain[i]); + gnutls_free(chain); + } + if (key) + gnutls_x509_privkey_deinit(key); + if (crl) + gnutls_x509_crl_deinit(crl); + + return ret; +} + + + +/** + * gnutls_certificate_free_crls: + * @sc: is a #gnutls_certificate_credentials_t type. + * + * This function will delete all the CRLs associated + * with the given credentials. + **/ +void gnutls_certificate_free_crls(gnutls_certificate_credentials_t sc) +{ + /* do nothing for now */ + return; +} + +/** + * gnutls_certificate_credentials_t: + * @cred: is a #gnutls_certificate_credentials_t type. + * @fn: A PIN callback + * @userdata: Data to be passed in the callback + * + * This function will set a callback function to be used when + * required to access a protected object. This function overrides any other + * global PIN functions. + * + * Note that this function must be called right after initialization + * to have effect. + * + * Since: 3.1.0 + **/ +void gnutls_certificate_set_pin_function(gnutls_certificate_credentials_t + cred, gnutls_pin_callback_t fn, + void *userdata) +{ + cred->pin.cb = fn; + cred->pin.data = userdata; +} diff --git a/lib/cert-cred.c b/lib/cert-cred.c new file mode 100644 index 0000000000..7311737298 --- /dev/null +++ b/lib/cert-cred.c @@ -0,0 +1,1140 @@ +/* + * Copyright (C) 2001-2016 Free Software Foundation, Inc. + * Copyright (C) 2015-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* Some of the stuff needed for Certificate authentication is contained + * in this file. + */ + +#include "gnutls_int.h" +#include "errors.h" +#include +#include +#include +#include +#include +#include +#include "str.h" +#include +#include +#include +#include +#include +#include "x509/x509_int.h" +#include "x509/common.h" +#include "dh.h" +#include "cert-cred.h" + + +/* + * Adds a public/private key pair to a certificate credential + */ +int +_gnutls_certificate_credential_append_keypair(gnutls_certificate_credentials_t res, + gnutls_privkey_t key, + gnutls_str_array_t names, + gnutls_pcert_st * crt, + int nr) +{ + res->sorted_cert_idx = gnutls_realloc_fast(res->sorted_cert_idx, + (1 + res->ncerts) * + sizeof(unsigned int)); + if (res->sorted_cert_idx == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + res->certs = gnutls_realloc_fast(res->certs, + (1 + res->ncerts) * + sizeof(certs_st)); + if (res->certs == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + memset(&res->certs[res->ncerts], 0, sizeof(res->certs[0])); + + res->certs[res->ncerts].cert_list = crt; + res->certs[res->ncerts].cert_list_length = nr; + res->certs[res->ncerts].names = names; + res->certs[res->ncerts].pkey = key; + + if (_gnutls13_sign_get_compatible_with_privkey(key)) + res->tls13_ok = 1; + + /* move RSA-PSS certificates before any RSA key. + * Note that we cannot assume that any previous pointers + * to sorted list are ok, due to the realloc in res->certs. */ + if (crt->pubkey->params.algo == GNUTLS_PK_RSA_PSS) { + unsigned i,ridx; + unsigned tmp; + + for (i=0;incerts;i++) { + ridx = res->sorted_cert_idx[i]; + + if (res->certs[ridx].cert_list->pubkey->params.algo == GNUTLS_PK_RSA) { + tmp = ridx; + res->sorted_cert_idx[i] = res->ncerts; + res->sorted_cert_idx[res->ncerts] = tmp; + goto finish; + } + } + } + + /* otherwise append it normally on the end */ + res->sorted_cert_idx[res->ncerts] = res->ncerts; + + finish: + return 0; + +} + + +/** + * gnutls_certificate_set_key: + * @res: is a #gnutls_certificate_credentials_t type. + * @names: is an array of DNS names belonging to the public-key (NULL if none) + * @names_size: holds the size of the names list + * @pcert_list: contains a certificate list (chain) or raw public-key + * @pcert_list_size: holds the size of the certificate list + * @key: is a #gnutls_privkey_t key corresponding to the first public-key in pcert_list + * + * This function sets a public/private key pair in the + * gnutls_certificate_credentials_t type. The given public key may be encapsulated + * in a certificate or can be given as a raw key. This function may be + * called more than once, in case multiple key pairs exist for + * the server. For clients that want to send more than their own end- + * entity certificate (e.g., also an intermediate CA cert), the full + * certificate chain must be provided in @pcert_list. + * + * Note that the @key will become part of the credentials structure and must + * not be deallocated. It will be automatically deallocated when the @res structure + * is deinitialized. + * + * If this function fails, the @res structure is at an undefined state and it must + * not be reused to load other keys or certificates. + * + * Note that, this function by default returns zero on success and a negative value on error. + * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() + * it returns an index (greater or equal to zero). That index can be used for other functions to refer to the added key-pair. + * + * Since GnuTLS 3.6.6 this function also handles raw public keys. + * + * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). + * + * Since: 3.0 + **/ +int +gnutls_certificate_set_key(gnutls_certificate_credentials_t res, + const char **names, + int names_size, + gnutls_pcert_st * pcert_list, + int pcert_list_size, + gnutls_privkey_t key) +{ + int ret, i; + gnutls_str_array_t str_names; + gnutls_pcert_st *new_pcert_list; + + /* Sanity checks */ + // Check for a valid credential struct + if (res == NULL) { + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + } + + // A complete key pair must be given + if (pcert_list == NULL || key == NULL) { + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } + + /* Process the names, if any */ + _gnutls_str_array_init(&str_names); + + if (names != NULL && names_size > 0) { + for (i = 0; i < names_size; i++) { + ret = + _gnutls_str_array_append_idna(&str_names, names[i], + strlen(names[i])); + if (ret < 0) { + ret = gnutls_assert_val(ret); + goto cleanup; + } + } + } else if (names == NULL && pcert_list[0].type == GNUTLS_CRT_X509) { + gnutls_x509_crt_t crt; + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = gnutls_x509_crt_import(crt, &pcert_list[0].cert, GNUTLS_X509_FMT_DER); + if (ret < 0) { + gnutls_assert(); + gnutls_x509_crt_deinit(crt); + goto cleanup; + } + + ret = _gnutls_get_x509_name(crt, &str_names); + gnutls_x509_crt_deinit(crt); + + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } + + if (res->pin.cb) + gnutls_privkey_set_pin_function(key, res->pin.cb, + res->pin.data); + + new_pcert_list = gnutls_malloc(sizeof(gnutls_pcert_st) * pcert_list_size); + if (new_pcert_list == NULL) { + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + memcpy(new_pcert_list, pcert_list, sizeof(gnutls_pcert_st) * pcert_list_size); + + ret = + _gnutls_certificate_credential_append_keypair(res, key, str_names, + new_pcert_list, + pcert_list_size); + if (ret < 0) { + gnutls_assert(); + gnutls_free(new_pcert_list); + goto cleanup; + } + + res->ncerts++; + + /* Unlike gnutls_certificate_set_x509_key, we deinitialize everything + * local after a failure. That is because the caller is responsible for + * freeing these values after a failure, and if we keep references we + * lead to double freeing */ + if ((ret = _gnutls_check_key_cert_match(res)) < 0) { + gnutls_assert(); + gnutls_free(new_pcert_list); + res->ncerts--; + goto cleanup; + } + + CRED_RET_SUCCESS(res); + + cleanup: + _gnutls_str_array_clear(&str_names); + return ret; +} + +/** + * gnutls_certificate_free_keys: + * @sc: is a #gnutls_certificate_credentials_t type. + * + * This function will delete all the keys and the certificates associated + * with the given credentials. This function must not be called when a + * TLS negotiation that uses the credentials is in progress. + * + **/ +void gnutls_certificate_free_keys(gnutls_certificate_credentials_t sc) +{ + unsigned i, j; + + for (i = 0; i < sc->ncerts; i++) { + for (j = 0; j < sc->certs[i].cert_list_length; j++) { + gnutls_pcert_deinit(&sc->certs[i].cert_list[j]); + } + gnutls_free(sc->certs[i].cert_list); + + for (j = 0; j < sc->certs[i].ocsp_data_length; j++) { + gnutls_free(sc->certs[i].ocsp_data[j].response.data); + } + _gnutls_str_array_clear(&sc->certs[i].names); + gnutls_privkey_deinit(sc->certs[i].pkey); + } + + gnutls_free(sc->certs); + gnutls_free(sc->sorted_cert_idx); + + sc->ncerts = 0; +} + +/** + * gnutls_certificate_free_cas: + * @sc: is a #gnutls_certificate_credentials_t type. + * + * This function was operational on very early versions of gnutls. + * Due to internal refactorings and the fact that this was hardly ever + * used, it is currently a no-op. + * + **/ +void gnutls_certificate_free_cas(gnutls_certificate_credentials_t sc) +{ + return; +} + +/** + * gnutls_certificate_get_issuer: + * @sc: is a #gnutls_certificate_credentials_t type. + * @cert: is the certificate to find issuer for + * @issuer: Will hold the issuer if any. Should be treated as constant. + * @flags: Use zero or %GNUTLS_TL_GET_COPY + * + * This function will return the issuer of a given certificate. + * If the flag %GNUTLS_TL_GET_COPY is specified a copy of the issuer + * will be returned which must be freed using gnutls_x509_crt_deinit(). + * In that case the provided @issuer must not be initialized. + * + * As with gnutls_x509_trust_list_get_issuer() this function requires + * the %GNUTLS_TL_GET_COPY flag in order to operate with PKCS#11 trust + * lists in a thread-safe way. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.0 + **/ +int +gnutls_certificate_get_issuer(gnutls_certificate_credentials_t sc, + gnutls_x509_crt_t cert, + gnutls_x509_crt_t * issuer, + unsigned int flags) +{ + return gnutls_x509_trust_list_get_issuer(sc->tlist, cert, issuer, + flags); +} + +/** + * gnutls_certificate_get_crt_raw: + * @sc: is a #gnutls_certificate_credentials_t type. + * @idx1: the index of the certificate chain if multiple are present + * @idx2: the index of the certificate in the chain. Zero gives the server's certificate. + * @cert: Will hold the DER encoded certificate. + * + * This function will return the DER encoded certificate of the + * server or any other certificate on its certificate chain (based on @idx2). + * The returned data should be treated as constant and only accessible during the lifetime + * of @sc. The @idx1 matches the value gnutls_certificate_set_x509_key() and friends + * functions. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. In case the indexes are out of bounds %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE + * is returned. + * + * Since: 3.2.5 + **/ +int +gnutls_certificate_get_crt_raw(gnutls_certificate_credentials_t sc, + unsigned idx1, + unsigned idx2, gnutls_datum_t * cert) +{ + if (idx1 >= sc->ncerts) + return + gnutls_assert_val + (GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + if (idx2 >= sc->certs[idx1].cert_list_length) + return + gnutls_assert_val + (GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + cert->data = sc->certs[idx1].cert_list[idx2].cert.data; + cert->size = sc->certs[idx1].cert_list[idx2].cert.size; + + return 0; +} + +/** + * gnutls_certificate_free_ca_names: + * @sc: is a #gnutls_certificate_credentials_t type. + * + * This function will delete all the CA name in the given + * credentials. Clients may call this to save some memory since in + * client side the CA names are not used. Servers might want to use + * this function if a large list of trusted CAs is present and + * sending the names of it would just consume bandwidth without providing + * information to client. + * + * CA names are used by servers to advertise the CAs they support to + * clients. + **/ +void gnutls_certificate_free_ca_names(gnutls_certificate_credentials_t sc) +{ + _gnutls_free_datum(&sc->tlist->x509_rdn_sequence); +} + + +/** + * gnutls_certificate_free_credentials: + * @sc: is a #gnutls_certificate_credentials_t type. + * + * Free a gnutls_certificate_credentials_t structure. + * + * This function does not free any temporary parameters associated + * with this structure (ie RSA and DH parameters are not freed by this + * function). + **/ +void +gnutls_certificate_free_credentials(gnutls_certificate_credentials_t sc) +{ + // Check for valid pointer and otherwise do nothing + if (sc == NULL) + return; + + gnutls_x509_trust_list_deinit(sc->tlist, 1); + gnutls_certificate_free_keys(sc); + memset(sc->pin_tmp, 0, sizeof(sc->pin_tmp)); + + if (sc->deinit_dh_params) { + gnutls_dh_params_deinit(sc->dh_params); + } + + gnutls_free(sc); +} + + +/** + * gnutls_certificate_allocate_credentials: + * @res: is a pointer to a #gnutls_certificate_credentials_t type. + * + * Allocate a gnutls_certificate_credentials_t structure. + * + * Returns: %GNUTLS_E_SUCCESS on success, or an error code. + **/ +int +gnutls_certificate_allocate_credentials(gnutls_certificate_credentials_t * + res) +{ + int ret; + + *res = gnutls_calloc(1, sizeof(certificate_credentials_st)); + + if (*res == NULL) + return GNUTLS_E_MEMORY_ERROR; + + ret = gnutls_x509_trust_list_init(&(*res)->tlist, 0); + if (ret < 0) { + gnutls_assert(); + gnutls_free(*res); + return GNUTLS_E_MEMORY_ERROR; + } + (*res)->verify_bits = DEFAULT_MAX_VERIFY_BITS; + (*res)->verify_depth = DEFAULT_MAX_VERIFY_DEPTH; + + + return 0; +} + +/* converts the given x509 certificate list to gnutls_pcert_st* and allocates + * space for them. + */ +static gnutls_pcert_st *alloc_and_load_x509_certs(gnutls_x509_crt_t * + certs, unsigned ncerts) +{ + gnutls_pcert_st *local_certs; + int ret = 0; + unsigned i, j; + + if (certs == NULL) + return NULL; + + local_certs = gnutls_malloc(sizeof(gnutls_pcert_st) * ncerts); + if (local_certs == NULL) { + gnutls_assert(); + return NULL; + } + + for (i = 0; i < ncerts; i++) { + ret = gnutls_pcert_import_x509(&local_certs[i], certs[i], 0); + if (ret < 0) + break; + } + + if (ret < 0) { + gnutls_assert(); + for (j = 0; j < i; j++) { + gnutls_pcert_deinit(&local_certs[j]); + } + gnutls_free(local_certs); + return NULL; + } + + return local_certs; +} + +/* converts the given x509 key to gnutls_privkey* and allocates + * space for it. + */ +static gnutls_privkey_t +alloc_and_load_x509_key(gnutls_x509_privkey_t key, int deinit) +{ + gnutls_privkey_t local_key; + int ret = 0; + + if (key == NULL) + return NULL; + + ret = gnutls_privkey_init(&local_key); + if (ret < 0) { + gnutls_assert(); + return NULL; + } + + ret = + gnutls_privkey_import_x509(local_key, key, + deinit ? + GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE : 0); + if (ret < 0) { + gnutls_assert(); + gnutls_privkey_deinit(local_key); + return NULL; + } + + return local_key; +} + +#ifdef ENABLE_PKCS11 + +/* converts the given raw key to gnutls_privkey* and allocates + * space for it. + */ +static gnutls_privkey_t +alloc_and_load_pkcs11_key(gnutls_pkcs11_privkey_t key, int deinit) +{ + gnutls_privkey_t local_key; + int ret = 0; + + if (key == NULL) + return NULL; + + ret = gnutls_privkey_init(&local_key); + if (ret < 0) { + gnutls_assert(); + return NULL; + } + + ret = + gnutls_privkey_import_pkcs11(local_key, key, + deinit ? + GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE + : 0); + if (ret < 0) { + gnutls_assert(); + gnutls_privkey_deinit(local_key); + return NULL; + } + + return local_key; +} + +#endif + +/** + * gnutls_certificate_server_set_request: + * @session: is a #gnutls_session_t type. + * @req: is one of GNUTLS_CERT_REQUEST, GNUTLS_CERT_REQUIRE, GNUTLS_CERT_IGNORE + * + * This function specifies if we (in case of a server) are going to + * send a certificate request message to the client. If @req is + * GNUTLS_CERT_REQUIRE then the server will return the %GNUTLS_E_NO_CERTIFICATE_FOUND + * error if the peer does not provide a certificate. If you do not call this + * function then the client will not be asked to send a certificate. Invoking + * the function with @req GNUTLS_CERT_IGNORE has the same effect. + **/ +void +gnutls_certificate_server_set_request(gnutls_session_t session, + gnutls_certificate_request_t req) +{ + session->internals.send_cert_req = req; +} + +static int call_legacy_cert_cb1(gnutls_session_t session, + const struct gnutls_cert_retr_st *info, + gnutls_pcert_st **certs, + unsigned int *pcert_length, + gnutls_ocsp_data_st **ocsp, + unsigned int *ocsp_length, + gnutls_privkey_t *privkey, + unsigned int *flags) +{ + gnutls_retr2_st st2; + gnutls_pcert_st *local_certs = NULL; + gnutls_privkey_t local_key = NULL; + unsigned i; + int ret; + + *ocsp_length = 0; + + memset(&st2, 0, sizeof(st2)); + + ret = info->cred->legacy_cert_cb1(session, info->req_ca_rdn, info->nreqs, + info->pk_algos, info->pk_algos_length, + &st2); + if (ret < 0) + return gnutls_assert_val(ret); + + if (st2.ncerts == 0) { + *pcert_length = 0; + *ocsp_length = 0; + *privkey = NULL; + return 0; + } + + if (st2.cert_type != GNUTLS_CRT_X509) { + gnutls_assert(); + ret = GNUTLS_E_INVALID_REQUEST; + goto cleanup; + } + + local_certs = + alloc_and_load_x509_certs(st2.cert.x509, st2.ncerts); + if (local_certs == NULL) { + gnutls_assert(); + ret = GNUTLS_E_MEMORY_ERROR; + goto cleanup; + } + + switch (st2.key_type) { +#ifdef ENABLE_PKCS11 + case GNUTLS_PRIVKEY_PKCS11: + if (st2.key.pkcs11 != NULL) { + local_key = + alloc_and_load_pkcs11_key(st2.key.pkcs11, + st2.deinit_all); + if (local_key == NULL) { + gnutls_assert(); + ret = GNUTLS_E_INTERNAL_ERROR; + goto cleanup; + } + } + break; +#endif + case GNUTLS_PRIVKEY_X509: + if (st2.key.x509 != NULL) { + local_key = + alloc_and_load_x509_key(st2.key.x509, + st2.deinit_all); + if (local_key == NULL) { + gnutls_assert(); + ret = GNUTLS_E_INTERNAL_ERROR; + goto cleanup; + } + } + break; + default: + gnutls_assert(); + ret = GNUTLS_E_INVALID_REQUEST; + goto cleanup; + } + + *privkey = local_key; + *certs = local_certs; + *pcert_length = st2.ncerts; + + /* flag the caller to deinitialize our values */ + *flags |= GNUTLS_CERT_RETR_DEINIT_ALL; + + ret = 0; + + cleanup: + + if (st2.cert_type == GNUTLS_CRT_X509) { + if (st2.deinit_all) { + for (i = 0; i < st2.ncerts; i++) { + gnutls_x509_crt_deinit(st2.cert.x509[i]); + } + gnutls_free(st2.cert.x509); + } + } + + return ret; + +} + +/** + * gnutls_certificate_set_retrieve_function: + * @cred: is a #gnutls_certificate_credentials_t type. + * @func: is the callback function + * + * This function sets a callback to be called in order to retrieve the + * certificate to be used in the handshake. The callback will take control + * only if a certificate is requested by the peer. You are advised + * to use gnutls_certificate_set_retrieve_function2() because it + * is much more efficient in the processing it requires from gnutls. + * + * The callback's function prototype is: + * int (*callback)(gnutls_session_t, const gnutls_datum_t* req_ca_dn, int nreqs, + * const gnutls_pk_algorithm_t* pk_algos, int pk_algos_length, gnutls_retr2_st* st); + * + * @req_ca_dn is only used in X.509 certificates. + * Contains a list with the CA names that the server considers trusted. + * This is a hint and typically the client should send a certificate that is signed + * by one of these CAs. These names, when available, are DER encoded. To get a more + * meaningful value use the function gnutls_x509_rdn_get(). + * + * @pk_algos contains a list with server's acceptable public key algorithms. + * The certificate returned should support the server's given algorithms. + * + * @st should contain the certificates and private keys. + * + * If the callback function is provided then gnutls will call it, in the + * handshake, after the certificate request message has been received. + * + * In server side pk_algos and req_ca_dn are NULL. + * + * The callback function should set the certificate list to be sent, + * and return 0 on success. If no certificate was selected then the + * number of certificates should be set to zero. The value (-1) + * indicates error and the handshake will be terminated. If both certificates + * are set in the credentials and a callback is available, the callback + * takes predence. + * + * Since: 3.0 + **/ +void gnutls_certificate_set_retrieve_function + (gnutls_certificate_credentials_t cred, + gnutls_certificate_retrieve_function * func) +{ + cred->legacy_cert_cb1 = func; + if (!func) + cred->get_cert_callback3 = NULL; + else + cred->get_cert_callback3 = call_legacy_cert_cb1; +} + +static int call_legacy_cert_cb2(gnutls_session_t session, + const struct gnutls_cert_retr_st *info, + gnutls_pcert_st **certs, + unsigned int *pcert_length, + gnutls_ocsp_data_st **ocsp, + unsigned int *ocsp_length, + gnutls_privkey_t *privkey, + unsigned int *flags) +{ + int ret; + *ocsp_length = 0; + /* flags will be assumed to be zero */ + + ret = info->cred->legacy_cert_cb2(session, info->req_ca_rdn, info->nreqs, + info->pk_algos, info->pk_algos_length, + certs, pcert_length, privkey); + if (ret < 0) { + gnutls_assert(); + } + return ret; +} + +/** + * gnutls_certificate_set_retrieve_function2: + * @cred: is a #gnutls_certificate_credentials_t type. + * @func: is the callback function + * + * This function sets a callback to be called in order to retrieve the + * certificate to be used in the handshake. The callback will take control + * only if a certificate is requested by the peer. + * + * The callback's function prototype is: + * int (*callback)(gnutls_session_t, const gnutls_datum_t* req_ca_dn, int nreqs, + * const gnutls_pk_algorithm_t* pk_algos, int pk_algos_length, gnutls_pcert_st** pcert, + * unsigned int *pcert_length, gnutls_privkey_t * pkey); + * + * @req_ca_dn is only used in X.509 certificates. + * Contains a list with the CA names that the server considers trusted. + * This is a hint and typically the client should send a certificate that is signed + * by one of these CAs. These names, when available, are DER encoded. To get a more + * meaningful value use the function gnutls_x509_rdn_get(). + * + * @pk_algos contains a list with server's acceptable public key algorithms. + * The certificate returned should support the server's given algorithms. + * + * @pcert should contain a single certificate and public key or a list of them. + * + * @pcert_length is the size of the previous list. + * + * @pkey is the private key. + * + * If the callback function is provided then gnutls will call it, in the + * handshake, after the certificate request message has been received. + * All the provided by the callback values will not be released or + * modified by gnutls. + * + * In server side pk_algos and req_ca_dn are NULL. + * + * The callback function should set the certificate list to be sent, + * and return 0 on success. If no certificate was selected then the + * number of certificates should be set to zero. The value (-1) + * indicates error and the handshake will be terminated. If both certificates + * are set in the credentials and a callback is available, the callback + * takes predence. + * + * Since: 3.0 + **/ +void gnutls_certificate_set_retrieve_function2 + (gnutls_certificate_credentials_t cred, + gnutls_certificate_retrieve_function2 * func) +{ + cred->legacy_cert_cb2 = func; + if (!func) + cred->get_cert_callback3 = NULL; + else + cred->get_cert_callback3 = call_legacy_cert_cb2; +} + +/** + * gnutls_certificate_set_retrieve_function3: + * @cred: is a #gnutls_certificate_credentials_t type. + * @func: is the callback function + * + * This function sets a callback to be called in order to retrieve the + * certificate and OCSP responses to be used in the handshake. @func will + * be called only if the peer requests a certificate either during handshake + * or during post-handshake authentication. + * + * The callback's function prototype is defined in `abstract.h': + * + * int gnutls_certificate_retrieve_function3( + * gnutls_session_t, + * const struct gnutls_cert_retr_st *info, + * gnutls_pcert_st **certs, + * unsigned int *pcert_length, + * gnutls_ocsp_data_st **ocsp, + * unsigned int *ocsp_length, + * gnutls_privkey_t *privkey, + * unsigned int *flags); + * + * The info field of the callback contains: + * @req_ca_dn which is a list with the CA names that the server considers trusted. + * This is a hint and typically the client should send a certificate that is signed + * by one of these CAs. These names, when available, are DER encoded. To get a more + * meaningful value use the function gnutls_x509_rdn_get(). + * @pk_algos contains a list with server's acceptable public key algorithms. + * The certificate returned should support the server's given algorithms. + * + * The callback should fill-in the following values. + * + * @pcert should contain an allocated list of certificates and public keys. + * @pcert_length is the size of the previous list. + * @ocsp should contain an allocated list of OCSP responses. + * @ocsp_length is the size of the previous list. + * @pkey is the private key. + * + * If flags in the callback are set to %GNUTLS_CERT_RETR_DEINIT_ALL then + * all provided values must be allocated using gnutls_malloc(), and will + * be released by gnutls; otherwise they will not be touched by gnutls. + * + * The callback function should set the certificate and OCSP response + * list to be sent, and return 0 on success. If no certificates are available, + * the @pcert_length and @ocsp_length should be set to zero. The return + * value (-1) indicates error and the handshake will be terminated. If both + * certificates are set in the credentials and a callback is available, the + * callback takes predence. + * + * Since: 3.6.3 + **/ +void gnutls_certificate_set_retrieve_function3 + (gnutls_certificate_credentials_t cred, + gnutls_certificate_retrieve_function3 *func) +{ + cred->get_cert_callback3 = func; +} + +/** + * gnutls_certificate_set_verify_function: + * @cred: is a #gnutls_certificate_credentials_t type. + * @func: is the callback function + * + * This function sets a callback to be called when peer's certificate + * has been received in order to verify it on receipt rather than + * doing after the handshake is completed. + * + * The callback's function prototype is: + * int (*callback)(gnutls_session_t); + * + * If the callback function is provided then gnutls will call it, in the + * handshake, just after the certificate message has been received. + * To verify or obtain the certificate the gnutls_certificate_verify_peers2(), + * gnutls_certificate_type_get(), gnutls_certificate_get_peers() functions + * can be used. + * + * The callback function should return 0 for the handshake to continue + * or non-zero to terminate. + * + * Since: 2.10.0 + **/ +void + gnutls_certificate_set_verify_function + (gnutls_certificate_credentials_t cred, + gnutls_certificate_verify_function * func) +{ + cred->verify_callback = func; +} + +#define TEST_TEXT "test text" +/* returns error if the certificate has different algorithm than + * the given key parameters. + */ +int _gnutls_check_key_cert_match(gnutls_certificate_credentials_t res) +{ + gnutls_datum_t test = {(void*)TEST_TEXT, sizeof(TEST_TEXT)-1}; + gnutls_datum_t sig = {NULL, 0}; + gnutls_digest_algorithm_t dig; + int pk, pk2, ret; + unsigned sign_algo; + + if (res->flags & GNUTLS_CERTIFICATE_SKIP_KEY_CERT_MATCH) + return 0; + + pk = + gnutls_pubkey_get_pk_algorithm(res->certs[res->ncerts - 1]. + cert_list[0].pubkey, NULL); + pk2 = + gnutls_privkey_get_pk_algorithm(res->certs[res->ncerts - 1].pkey, + NULL); + + if (GNUTLS_PK_IS_RSA(pk) && GNUTLS_PK_IS_RSA(pk2)) { + if (pk2 == GNUTLS_PK_RSA_PSS && pk == GNUTLS_PK_RSA) { + _gnutls_debug_log("you cannot mix an RSA-PSS key with an RSA certificate\n"); + return GNUTLS_E_CERTIFICATE_KEY_MISMATCH; + } + + if (pk2 == GNUTLS_PK_RSA_PSS || pk == GNUTLS_PK_RSA_PSS) + pk = GNUTLS_PK_RSA_PSS; + } else if (pk2 != pk) { + gnutls_assert(); + _gnutls_debug_log("key is %s, certificate is %s\n", gnutls_pk_get_name(pk2), + gnutls_pk_get_name(pk)); + return GNUTLS_E_CERTIFICATE_KEY_MISMATCH; + } + + if (pk == GNUTLS_PK_GOST_01) + dig = GNUTLS_DIG_GOSTR_94; + else if (pk == GNUTLS_PK_GOST_12_256) + dig = GNUTLS_DIG_STREEBOG_256; + else if (pk == GNUTLS_PK_GOST_12_512) + dig = GNUTLS_DIG_STREEBOG_512; + else + dig = GNUTLS_DIG_SHA256; + + sign_algo = gnutls_pk_to_sign(pk, dig); + + /* now check if keys really match. We use the sign/verify approach + * because we cannot always obtain the parameters from the abstract + * keys (e.g. PKCS #11). */ + ret = gnutls_privkey_sign_data2(res->certs[res->ncerts - 1].pkey, + sign_algo, 0, &test, &sig); + if (ret < 0) { + /* for some reason we couldn't sign that. That shouldn't have + * happened, but since it did, report the issue and do not + * try the key matching test */ + _gnutls_debug_log("%s: failed signing\n", __func__); + goto finish; + } + + ret = gnutls_pubkey_verify_data2(res->certs[res->ncerts - 1].cert_list[0].pubkey, + sign_algo, + GNUTLS_VERIFY_ALLOW_BROKEN, &test, &sig); + + gnutls_free(sig.data); + + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_CERTIFICATE_KEY_MISMATCH); + + finish: + return 0; +} + +/** + * gnutls_certificate_verification_status_print: + * @status: The status flags to be printed + * @type: The certificate type + * @out: Newly allocated datum with (0) terminated string. + * @flags: should be zero + * + * This function will pretty print the status of a verification + * process -- eg. the one obtained by gnutls_certificate_verify_peers3(). + * + * The output @out needs to be deallocated using gnutls_free(). + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.1.4 + **/ +int +gnutls_certificate_verification_status_print(unsigned int status, + gnutls_certificate_type_t + type, gnutls_datum_t * out, + unsigned int flags) +{ + gnutls_buffer_st str; + + _gnutls_buffer_init(&str); + + if (status == 0) + _gnutls_buffer_append_str(&str, + _ + ("The certificate is trusted. ")); + else + _gnutls_buffer_append_str(&str, + _ + ("The certificate is NOT trusted. ")); + + if (type == GNUTLS_CRT_X509) { + if (status & GNUTLS_CERT_REVOKED) + _gnutls_buffer_append_str(&str, + _ + ("The certificate chain is revoked. ")); + + if (status & GNUTLS_CERT_MISMATCH) + _gnutls_buffer_append_str(&str, + _ + ("The certificate doesn't match the local copy (TOFU). ")); + + if (status & GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED) + _gnutls_buffer_append_str(&str, + _ + ("The revocation or OCSP data are old and have been superseded. ")); + + if (status & GNUTLS_CERT_REVOCATION_DATA_ISSUED_IN_FUTURE) + _gnutls_buffer_append_str(&str, + _ + ("The revocation or OCSP data are issued with a future date. ")); + + if (status & GNUTLS_CERT_SIGNER_NOT_FOUND) + _gnutls_buffer_append_str(&str, + _ + ("The certificate issuer is unknown. ")); + + if (status & GNUTLS_CERT_SIGNER_NOT_CA) + _gnutls_buffer_append_str(&str, + _ + ("The certificate issuer is not a CA. ")); + } + + if (status & GNUTLS_CERT_INSECURE_ALGORITHM) + _gnutls_buffer_append_str(&str, + _ + ("The certificate chain uses insecure algorithm. ")); + + if (status & GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE) + _gnutls_buffer_append_str(&str, + _ + ("The certificate chain violates the signer's constraints. ")); + + if (status & GNUTLS_CERT_PURPOSE_MISMATCH) + _gnutls_buffer_append_str(&str, + _ + ("The certificate chain does not match the intended purpose. ")); + + if (status & GNUTLS_CERT_NOT_ACTIVATED) + _gnutls_buffer_append_str(&str, + _ + ("The certificate chain uses not yet valid certificate. ")); + + if (status & GNUTLS_CERT_EXPIRED) + _gnutls_buffer_append_str(&str, + _ + ("The certificate chain uses expired certificate. ")); + + if (status & GNUTLS_CERT_SIGNATURE_FAILURE) + _gnutls_buffer_append_str(&str, + _ + ("The signature in the certificate is invalid. ")); + + if (status & GNUTLS_CERT_UNEXPECTED_OWNER) + _gnutls_buffer_append_str(&str, + _ + ("The name in the certificate does not match the expected. ")); + + if (status & GNUTLS_CERT_MISSING_OCSP_STATUS) + _gnutls_buffer_append_str(&str, + _ + ("The certificate requires the server to include an OCSP status in its response, but the OCSP status is missing. ")); + + if (status & GNUTLS_CERT_INVALID_OCSP_STATUS) + _gnutls_buffer_append_str(&str, + _ + ("The received OCSP status response is invalid. ")); + + if (status & GNUTLS_CERT_UNKNOWN_CRIT_EXTENSIONS) + _gnutls_buffer_append_str(&str, + _ + ("The certificate contains an unknown critical extension. ")); + + return _gnutls_buffer_to_datum(&str, out, 1); +} + +#if defined(ENABLE_DHE) || defined(ENABLE_ANON) +/** + * gnutls_certificate_set_dh_params: + * @res: is a gnutls_certificate_credentials_t type + * @dh_params: the Diffie-Hellman parameters. + * + * This function will set the Diffie-Hellman parameters for a + * certificate server to use. These parameters will be used in + * Ephemeral Diffie-Hellman cipher suites. Note that only a pointer + * to the parameters are stored in the certificate handle, so you + * must not deallocate the parameters before the certificate is deallocated. + * + * Deprecated: This function is unnecessary and discouraged on GnuTLS 3.6.0 + * or later. Since 3.6.0, DH parameters are negotiated + * following RFC7919. + * + **/ +void +gnutls_certificate_set_dh_params(gnutls_certificate_credentials_t res, + gnutls_dh_params_t dh_params) +{ + if (res->deinit_dh_params) { + res->deinit_dh_params = 0; + gnutls_dh_params_deinit(res->dh_params); + res->dh_params = NULL; + } + + res->dh_params = dh_params; + res->dh_sec_param = gnutls_pk_bits_to_sec_param(GNUTLS_PK_DH, _gnutls_mpi_get_nbits(dh_params->params[0])); +} + + +/** + * gnutls_certificate_set_known_dh_params: + * @res: is a gnutls_certificate_credentials_t type + * @sec_param: is an option of the %gnutls_sec_param_t enumeration + * + * This function will set the Diffie-Hellman parameters for a + * certificate server to use. These parameters will be used in + * Ephemeral Diffie-Hellman cipher suites and will be selected from + * the FFDHE set of RFC7919 according to the security level provided. + * + * Deprecated: This function is unnecessary and discouraged on GnuTLS 3.6.0 + * or later. Since 3.6.0, DH parameters are negotiated + * following RFC7919. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.5.6 + **/ +int +gnutls_certificate_set_known_dh_params(gnutls_certificate_credentials_t res, + gnutls_sec_param_t sec_param) +{ + res->dh_sec_param = sec_param; + + return 0; +} + +#endif /* DH */ diff --git a/lib/cert-cred.h b/lib/cert-cred.h new file mode 100644 index 0000000000..1131f6db97 --- /dev/null +++ b/lib/cert-cred.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_CERT_CRED_H +#define GNUTLS_LIB_CERT_CRED_H + +#include +#include "str_array.h" + + +int +_gnutls_certificate_credential_append_keypair(gnutls_certificate_credentials_t res, + gnutls_privkey_t key, + gnutls_str_array_t names, + gnutls_pcert_st * crt, int nr); + +int +_gnutls_read_key_mem(gnutls_certificate_credentials_t res, + const void *key, int key_size, gnutls_x509_crt_fmt_t type, + const char *pass, unsigned int flags, + gnutls_privkey_t *rkey); + +int +_gnutls_read_key_file(gnutls_certificate_credentials_t res, + const char *keyfile, gnutls_x509_crt_fmt_t type, + const char *pass, unsigned int flags, + gnutls_privkey_t *rkey); + +int +_gnutls_get_x509_name(gnutls_x509_crt_t crt, gnutls_str_array_t * names); + +#define CRED_RET_SUCCESS(cred) \ + if (cred->flags & GNUTLS_CERTIFICATE_API_V2) { \ + return cred->ncerts-1; \ + } else { \ + return 0; \ + } + +#endif /* GNUTLS_LIB_CERT_CRED_H */ diff --git a/lib/cert-session.c b/lib/cert-session.c index a2315389ef..db04a25e5d 100644 --- a/lib/cert-session.c +++ b/lib/cert-session.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -35,8 +35,10 @@ #include #include #include - -/* CERTIFICATE STUFF */ +#include +#include "x509.h" +#include "hello_ext.h" +#include "x509/ocsp.h" /** * gnutls_certificate_get_ours: @@ -46,6 +48,11 @@ * The certificate is in raw (DER) format. No certificate * list is being returned. Only the first certificate. * + * This function returns the certificate that was sent in the current + * handshake. In subsequent resumed sessions this function will return + * %NULL. That differs from gnutls_certificate_get_peers() which always + * returns the peer's certificate used in the original session. + * * Returns: a pointer to a #gnutls_datum_t containing our * certificate, or %NULL in case of an error or if no certificate * was used. @@ -54,7 +61,7 @@ const gnutls_datum_t *gnutls_certificate_get_ours(gnutls_session_t session) { gnutls_certificate_credentials_t cred; - CHECK_AUTH(GNUTLS_CRD_CERTIFICATE, NULL); + CHECK_AUTH_TYPE(GNUTLS_CRD_CERTIFICATE, NULL); cred = (gnutls_certificate_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); @@ -83,8 +90,8 @@ const gnutls_datum_t *gnutls_certificate_get_ours(gnutls_session_t session) * are servers which violate this principle and thus on certain * occasions this may be an unsorted list. * - * In case of OpenPGP keys a single key will be returned in raw - * format. + * In resumed sessions, this function will return the peer's certificate + * list as used in the first/original session. * * Returns: a pointer to a #gnutls_datum_t containing the peer's * certificates, or %NULL in case of an error or if no certificate @@ -96,7 +103,7 @@ const gnutls_datum_t *gnutls_certificate_get_peers(gnutls_session_t { cert_auth_info_t info; - CHECK_AUTH(GNUTLS_CRD_CERTIFICATE, NULL); + CHECK_AUTH_TYPE(GNUTLS_CRD_CERTIFICATE, NULL); info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); if (info == NULL) @@ -107,38 +114,6 @@ const gnutls_datum_t *gnutls_certificate_get_peers(gnutls_session_t return info->raw_certificate_list; } -#ifdef ENABLE_OPENPGP -/** - * gnutls_certificate_get_peers_subkey_id: - * @session: is a gnutls session - * @id: will contain the ID - * - * Get the peer's subkey ID when OpenPGP certificates are - * used. The returned @id should be treated as constant. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise - * an error code is returned. - * - * Since: 3.1.3 - **/ -int gnutls_certificate_get_peers_subkey_id(gnutls_session_t session, - gnutls_datum_t * id) -{ - cert_auth_info_t info; - - CHECK_AUTH(GNUTLS_CRD_CERTIFICATE, GNUTLS_E_INVALID_REQUEST); - - info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); - if (info == NULL) - return GNUTLS_E_INVALID_REQUEST; - - id->data = info->subkey_id; - id->size = GNUTLS_OPENPGP_KEYID_SIZE; - - return 0; -} -#endif - /** * gnutls_certificate_client_get_request_status: * @session: is a gnutls session @@ -149,9 +124,10 @@ int gnutls_certificate_get_peers_subkey_id(gnutls_session_t session, * Returns: 0 if the peer (server) did not request client * authentication or 1 otherwise. **/ -int gnutls_certificate_client_get_request_status(gnutls_session_t session) +unsigned +gnutls_certificate_client_get_request_status(gnutls_session_t session) { - return session->internals.crt_requested; + return (session->internals.hsk_flags & HSK_CRT_ASKED)?1:0; } /** @@ -162,6 +138,11 @@ int gnutls_certificate_client_get_request_status(gnutls_session_t session) * This function will set a callback in order for the server to get * the Diffie-Hellman or RSA parameters for certificate * authentication. The callback should return %GNUTLS_E_SUCCESS (0) on success. + * + * Deprecated: This function is unnecessary and discouraged on GnuTLS 3.6.0 + * or later. Since 3.6.0, DH parameters are negotiated + * following RFC7919. + * **/ void gnutls_certificate_set_params_function(gnutls_certificate_credentials_t @@ -242,3 +223,664 @@ gnutls_certificate_set_verify_limits(gnutls_certificate_credentials_t res, res->verify_bits = max_bits; } +#ifdef ENABLE_OCSP +/* If the certificate is revoked status will be GNUTLS_CERT_REVOKED. + * + * Returns: + * Zero on success, a negative error code otherwise. + */ +static int +check_ocsp_response(gnutls_session_t session, gnutls_x509_crt_t cert, + gnutls_x509_trust_list_t tl, + unsigned verify_flags, + gnutls_x509_crt_t *cand_issuers, unsigned cand_issuers_size, + gnutls_datum_t * data, unsigned int *ostatus) +{ + gnutls_ocsp_resp_t resp; + int ret; + unsigned int status, cert_status; + time_t rtime, vtime, ntime, now; + int check_failed = 0; + + now = gnutls_time(0); + + ret = gnutls_ocsp_resp_init(&resp); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = gnutls_ocsp_resp_import(resp, data); + if (ret < 0) { + _gnutls_audit_log(session, + "There was an error parsing the OCSP response: %s.\n", + gnutls_strerror(ret)); + ret = gnutls_assert_val(0); + check_failed = 1; + *ostatus |= GNUTLS_CERT_INVALID; + *ostatus |= GNUTLS_CERT_INVALID_OCSP_STATUS; + goto cleanup; + } + + ret = gnutls_ocsp_resp_check_crt(resp, 0, cert); + if (ret < 0) { + ret = gnutls_assert_val(0); + _gnutls_audit_log(session, + "Got OCSP response with an unrelated certificate.\n"); + check_failed = 1; + *ostatus |= GNUTLS_CERT_INVALID; + *ostatus |= GNUTLS_CERT_INVALID_OCSP_STATUS; + goto cleanup; + } + + /* Attempt to verify against our trusted list */ + ret = gnutls_ocsp_resp_verify(resp, tl, &status, verify_flags); + if ((ret < 0 || status != 0) && cand_issuers_size > 0) { + /* Attempt to verify against the certificate list provided by the server */ + + ret = gnutls_ocsp_resp_verify_direct(resp, cand_issuers[0], &status, verify_flags); + /* if verification fails attempt to find whether any of the other + * bundled CAs is an issuer of the OCSP response */ + if ((ret < 0 || status != 0) && cand_issuers_size > 1) { + int ret2; + unsigned status2, i; + + for (i=1;i= 0 && status2 == 0) { + status = status2; + ret = ret2; + break; + } + } + } + } + + if (ret < 0) { + ret = gnutls_assert_val(0); + gnutls_assert(); + check_failed = 1; + *ostatus |= GNUTLS_CERT_INVALID; + *ostatus |= GNUTLS_CERT_INVALID_OCSP_STATUS; + goto cleanup; + } + + /* do not consider revocation data if response was not verified */ + if (status != 0) { + char buf[MAX_OCSP_MSG_SIZE]; + + _gnutls_debug_log("OCSP rejection reason: %s\n", + _gnutls_ocsp_verify_status_to_str(status, buf)); + + ret = gnutls_assert_val(0); + check_failed = 1; + *ostatus |= GNUTLS_CERT_INVALID; + *ostatus |= GNUTLS_CERT_INVALID_OCSP_STATUS; + goto cleanup; + } + + ret = gnutls_ocsp_resp_get_single(resp, 0, NULL, NULL, NULL, NULL, + &cert_status, &vtime, &ntime, + &rtime, NULL); + if (ret < 0) { + _gnutls_audit_log(session, + "There was an error parsing the OCSP response: %s.\n", + gnutls_strerror(ret)); + ret = gnutls_assert_val(0); + check_failed = 1; + *ostatus |= GNUTLS_CERT_INVALID; + *ostatus |= GNUTLS_CERT_INVALID_OCSP_STATUS; + goto cleanup; + } + + if (cert_status == GNUTLS_OCSP_CERT_REVOKED) { + _gnutls_audit_log(session, + "The certificate was revoked via OCSP\n"); + check_failed = 1; + *ostatus |= GNUTLS_CERT_INVALID; + *ostatus |= GNUTLS_CERT_REVOKED; + ret = gnutls_assert_val(0); + goto cleanup; + } + + /* Report but do not fail on the following errors. That is + * because including the OCSP response in the handshake shouldn't + * cause more problems that not including it. + */ + if (ntime == -1) { + if (now - vtime > MAX_OCSP_VALIDITY_SECS) { + _gnutls_audit_log(session, + "The OCSP response is old\n"); + check_failed = 1; + *ostatus |= GNUTLS_CERT_INVALID; + *ostatus |= GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED; + goto cleanup; + } + } else { + /* there is a newer OCSP answer, don't trust this one */ + if (ntime < now) { + _gnutls_audit_log(session, + "There is a newer OCSP response but was not provided by the server\n"); + check_failed = 1; + *ostatus |= GNUTLS_CERT_INVALID; + *ostatus |= GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED; + goto cleanup; + } + } + + ret = 0; + cleanup: + if (check_failed == 0) + session->internals.ocsp_check_ok = 1; + + gnutls_ocsp_resp_deinit(resp); + + return ret; +} + +static int +_gnutls_ocsp_verify_mandatory_stapling(gnutls_session_t session, + gnutls_x509_crt_t cert, + unsigned int * ocsp_status) +{ + gnutls_x509_tlsfeatures_t tlsfeatures; + int i, ret; + unsigned feature; + + /* RFC 7633: If cert has TLS feature GNUTLS_EXTENSION_STATUS_REQUEST, stapling is mandatory. + * + * At this point, we know that we did not get the certificate status. + * + * To proceed, first check whether we have requested the certificate status + */ + if (!(session->internals.hsk_flags & HSK_OCSP_REQUESTED)) + return 0; + + ret = gnutls_x509_tlsfeatures_init(&tlsfeatures); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + /* We have requested the status, now check whether the certificate mandates a response */ + if (gnutls_x509_crt_get_tlsfeatures(cert, tlsfeatures, 0, NULL) == 0) { + for (i = 0;; ++i) { + ret = gnutls_x509_tlsfeatures_get(tlsfeatures, i, &feature); + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { + break; + } + + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (feature == 5 /* TLS ID for status request */) { + /* We sent a status request, the certificate mandates a reply, but we did not get any. */ + *ocsp_status |= GNUTLS_CERT_MISSING_OCSP_STATUS; + break; + } + } + } + + ret = 0; + cleanup: + gnutls_x509_tlsfeatures_deinit(tlsfeatures); + return ret; +} +#endif + +#define CLEAR_CERTS for(x=0;xinternals.ocsp_check_ok = 0; + + CHECK_AUTH_TYPE(GNUTLS_CRD_CERTIFICATE, GNUTLS_E_INVALID_REQUEST); + + info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); + if (info == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + cred = (gnutls_certificate_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + if (cred == NULL) { + gnutls_assert(); + return GNUTLS_E_INSUFFICIENT_CREDENTIALS; + } + + if (info->raw_certificate_list == NULL || info->ncerts == 0) + return GNUTLS_E_NO_CERTIFICATE_FOUND; + + if (info->ncerts > cred->verify_depth && cred->verify_depth > 0) { + gnutls_assert(); + return GNUTLS_E_CONSTRAINT_ERROR; + } + + verify_flags = + cred->verify_flags | session->internals.additional_verify_flags; + /* generate a list of gnutls_certs based on the auth info + * raw certs. + */ + peer_certificate_list_size = info->ncerts; + peer_certificate_list = + gnutls_calloc(peer_certificate_list_size, + sizeof(gnutls_x509_crt_t)); + if (peer_certificate_list == NULL) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + + for (i = 0; i < peer_certificate_list_size; i++) { + ret = gnutls_x509_crt_init(&peer_certificate_list[i]); + if (ret < 0) { + gnutls_assert(); + CLEAR_CERTS; + return ret; + } + + ret = + gnutls_x509_crt_import(peer_certificate_list[i], + &info->raw_certificate_list[i], + GNUTLS_X509_FMT_DER); + if (ret < 0) { + gnutls_assert(); + CLEAR_CERTS; + return ret; + } + } + + /* Use the OCSP extension if any */ +#ifdef ENABLE_OCSP + if (verify_flags & GNUTLS_VERIFY_DISABLE_CRL_CHECKS) + goto skip_ocsp; + + for (i=0;i i+1) { + cand_issuers = &peer_certificate_list[i+1]; + cand_issuers_size = peer_certificate_list_size-i-1; + } + + ret = + check_ocsp_response(session, + peer_certificate_list[i], + cred->tlist, + verify_flags, cand_issuers, + cand_issuers_size, + &resp, &ocsp_status); + + if (ret < 0) { + CLEAR_CERTS; + return gnutls_assert_val(ret); + } + } +#endif + + skip_ocsp: + /* Verify certificate + */ + ret = + gnutls_x509_trust_list_verify_crt2(cred->tlist, + peer_certificate_list, + peer_certificate_list_size, + data, elements, + verify_flags, status, NULL); + + if (ret < 0) { + gnutls_assert(); + CLEAR_CERTS; + return ret; + } + + CLEAR_CERTS; + + *status |= ocsp_status; + + return 0; +} + +/** + * gnutls_certificate_verify_peers2: + * @session: is a gnutls session + * @status: is the output of the verification + * + * This function will verify the peer's certificate and store + * the status in the @status variable as a bitwise OR of gnutls_certificate_status_t + * values or zero if the certificate is trusted. Note that value in @status + * is set only when the return value of this function is success (i.e, failure + * to trust a certificate does not imply a negative return value). + * The default verification flags used by this function can be overridden + * using gnutls_certificate_set_verify_flags(). + * + * This function will take into account the stapled OCSP responses sent by the server, + * as well as the following X.509 certificate extensions: Name Constraints, + * Key Usage, and Basic Constraints (pathlen). + * + * Note that you must also check the peer's name in order to check if + * the verified certificate belongs to the actual peer, see gnutls_x509_crt_check_hostname(), + * or use gnutls_certificate_verify_peers3(). + * + * To avoid denial of service attacks some + * default upper limits regarding the certificate key size and chain + * size are set. To override them use gnutls_certificate_set_verify_limits(). + * + * Note that when using raw public-keys verification will not work because there is + * no corresponding certificate body belonging to the raw key that can be verified. In that + * case this function will return %GNUTLS_E_INVALID_REQUEST. + * + * Returns: %GNUTLS_E_SUCCESS (0) when the validation is performed, or a negative error code otherwise. + * A successful error code means that the @status parameter must be checked to obtain the validation status. + **/ +int +gnutls_certificate_verify_peers2(gnutls_session_t session, + unsigned int *status) +{ + return gnutls_certificate_verify_peers(session, NULL, 0, status); +} + +/** + * gnutls_certificate_verify_peers3: + * @session: is a gnutls session + * @hostname: is the expected name of the peer; may be %NULL + * @status: is the output of the verification + * + * This function will verify the peer's certificate and store the + * the status in the @status variable as a bitwise OR of gnutls_certificate_status_t + * values or zero if the certificate is trusted. Note that value in @status + * is set only when the return value of this function is success (i.e, failure + * to trust a certificate does not imply a negative return value). + * The default verification flags used by this function can be overridden + * using gnutls_certificate_set_verify_flags(). See the documentation + * of gnutls_certificate_verify_peers2() for details in the verification process. + * + * This function will take into account the stapled OCSP responses sent by the server, + * as well as the following X.509 certificate extensions: Name Constraints, + * Key Usage, and Basic Constraints (pathlen). + * + * If the @hostname provided is non-NULL then this function will compare + * the hostname in the certificate against it. The comparison will follow + * the RFC6125 recommendations. If names do not match the + * %GNUTLS_CERT_UNEXPECTED_OWNER status flag will be set. + * + * In order to verify the purpose of the end-certificate (by checking the extended + * key usage), use gnutls_certificate_verify_peers(). + * + * To avoid denial of service attacks some + * default upper limits regarding the certificate key size and chain + * size are set. To override them use gnutls_certificate_set_verify_limits(). + * + * Note that when using raw public-keys verification will not work because there is + * no corresponding certificate body belonging to the raw key that can be verified. In that + * case this function will return %GNUTLS_E_INVALID_REQUEST. + * + * Returns: %GNUTLS_E_SUCCESS (0) when the validation is performed, or a negative error code otherwise. + * A successful error code means that the @status parameter must be checked to obtain the validation status. + * + * Since: 3.1.4 + **/ +int +gnutls_certificate_verify_peers3(gnutls_session_t session, + const char *hostname, + unsigned int *status) +{ +gnutls_typed_vdata_st data; + + data.type = GNUTLS_DT_DNS_HOSTNAME; + data.size = 0; + data.data = (void*)hostname; + + return gnutls_certificate_verify_peers(session, &data, 1, status); +} + +/** + * gnutls_certificate_verify_peers: + * @session: is a gnutls session + * @data: an array of typed data + * @elements: the number of data elements + * @status: is the output of the verification + * + * This function will verify the peer's certificate and store the + * the status in the @status variable as a bitwise OR of gnutls_certificate_status_t + * values or zero if the certificate is trusted. Note that value in @status + * is set only when the return value of this function is success (i.e, failure + * to trust a certificate does not imply a negative return value). + * The default verification flags used by this function can be overridden + * using gnutls_certificate_set_verify_flags(). See the documentation + * of gnutls_certificate_verify_peers2() for details in the verification process. + * + * This function will take into account the stapled OCSP responses sent by the server, + * as well as the following X.509 certificate extensions: Name Constraints, + * Key Usage, and Basic Constraints (pathlen). + * + * The acceptable @data types are %GNUTLS_DT_DNS_HOSTNAME, %GNUTLS_DT_RFC822NAME and %GNUTLS_DT_KEY_PURPOSE_OID. + * The former two accept as data a null-terminated hostname or email address, and the latter a null-terminated + * object identifier (e.g., %GNUTLS_KP_TLS_WWW_SERVER). + * + * If a DNS hostname is provided then this function will compare + * the hostname in the certificate against the given. If names do not match the + * %GNUTLS_CERT_UNEXPECTED_OWNER status flag will be set. + * If a key purpose OID is provided and the end-certificate contains the extended key + * usage PKIX extension, it will be required to be have the provided key purpose + * or be marked for any purpose, otherwise verification status will have the + * %GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE flag set. + * + * To avoid denial of service attacks some + * default upper limits regarding the certificate key size and chain + * size are set. To override them use gnutls_certificate_set_verify_limits(). + * + * Note that when using raw public-keys verification will not work because there is + * no corresponding certificate body belonging to the raw key that can be verified. In that + * case this function will return %GNUTLS_E_INVALID_REQUEST. + * + * Returns: %GNUTLS_E_SUCCESS (0) when the validation is performed, or a negative error code otherwise. + * A successful error code means that the @status parameter must be checked to obtain the validation status. + * + * Since: 3.3.0 + **/ +int +gnutls_certificate_verify_peers(gnutls_session_t session, + gnutls_typed_vdata_st * data, + unsigned int elements, + unsigned int *status) +{ + cert_auth_info_t info; + + CHECK_AUTH_TYPE(GNUTLS_CRD_CERTIFICATE, GNUTLS_E_INVALID_REQUEST); + + info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); + if (info == NULL) { + return GNUTLS_E_NO_CERTIFICATE_FOUND; + } + + if (info->raw_certificate_list == NULL || info->ncerts == 0) + return GNUTLS_E_NO_CERTIFICATE_FOUND; + + + switch (get_certificate_type(session, GNUTLS_CTYPE_PEERS)) { + case GNUTLS_CRT_X509: + return _gnutls_x509_cert_verify_peers(session, data, elements, + status); + default: + return GNUTLS_E_INVALID_REQUEST; + } +} + +/*- + * _gnutls_x509_extract_certificate_activation_time - return the peer's certificate activation time + * @cert: should contain an X.509 DER encoded certificate + * + * This function will return the certificate's activation time in UNIX time + * (ie seconds since 00:00:00 UTC January 1, 1970). + * + * Returns a (time_t) -1 in case of an error. + * + -*/ +static time_t +_gnutls_x509_get_raw_crt_activation_time(const gnutls_datum_t * cert) +{ + gnutls_x509_crt_t xcert; + time_t result; + + result = gnutls_x509_crt_init(&xcert); + if (result < 0) + return (time_t) - 1; + + result = gnutls_x509_crt_import(xcert, cert, GNUTLS_X509_FMT_DER); + if (result < 0) { + gnutls_x509_crt_deinit(xcert); + return (time_t) - 1; + } + + result = gnutls_x509_crt_get_activation_time(xcert); + + gnutls_x509_crt_deinit(xcert); + + return result; +} + +/*- + * gnutls_x509_extract_certificate_expiration_time: + * @cert: should contain an X.509 DER encoded certificate + * + * This function will return the certificate's expiration time in UNIX + * time (ie seconds since 00:00:00 UTC January 1, 1970). Returns a + * + * (time_t) -1 in case of an error. + * + -*/ +static time_t +_gnutls_x509_get_raw_crt_expiration_time(const gnutls_datum_t * cert) +{ + gnutls_x509_crt_t xcert; + time_t result; + + result = gnutls_x509_crt_init(&xcert); + if (result < 0) + return (time_t) - 1; + + result = gnutls_x509_crt_import(xcert, cert, GNUTLS_X509_FMT_DER); + if (result < 0) { + gnutls_x509_crt_deinit(xcert); + return (time_t) - 1; + } + + result = gnutls_x509_crt_get_expiration_time(xcert); + + gnutls_x509_crt_deinit(xcert); + + return result; +} + +/** + * gnutls_certificate_expiration_time_peers: + * @session: is a gnutls session + * + * This function will return the peer's certificate expiration time. + * + * Returns: (time_t)-1 on error. + * + * Deprecated: gnutls_certificate_verify_peers2() now verifies expiration times. + **/ +time_t gnutls_certificate_expiration_time_peers(gnutls_session_t session) +{ + cert_auth_info_t info; + + CHECK_AUTH_TYPE(GNUTLS_CRD_CERTIFICATE, GNUTLS_E_INVALID_REQUEST); + + info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); + if (info == NULL) { + return (time_t) - 1; + } + + if (info->raw_certificate_list == NULL || info->ncerts == 0) { + gnutls_assert(); + return (time_t) - 1; + } + + switch (get_certificate_type(session, GNUTLS_CTYPE_PEERS)) { + case GNUTLS_CRT_X509: + return + _gnutls_x509_get_raw_crt_expiration_time(&info-> + raw_certificate_list[0]); + default: + return (time_t) - 1; + } +} + +/** + * gnutls_certificate_activation_time_peers: + * @session: is a gnutls session + * + * This function will return the peer's certificate activation time. + * + * Returns: (time_t)-1 on error. + * + * Deprecated: gnutls_certificate_verify_peers2() now verifies activation times. + **/ +time_t gnutls_certificate_activation_time_peers(gnutls_session_t session) +{ + cert_auth_info_t info; + + CHECK_AUTH_TYPE(GNUTLS_CRD_CERTIFICATE, GNUTLS_E_INVALID_REQUEST); + + info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); + if (info == NULL) { + return (time_t) - 1; + } + + if (info->raw_certificate_list == NULL || info->ncerts == 0) { + gnutls_assert(); + return (time_t) - 1; + } + + switch (get_certificate_type(session, GNUTLS_CTYPE_PEERS)) { + case GNUTLS_CRT_X509: + return + _gnutls_x509_get_raw_crt_activation_time(&info-> + raw_certificate_list[0]); + default: + return (time_t) - 1; + } +} diff --git a/lib/cert.c b/lib/cert.c deleted file mode 100644 index 3b60aeea2d..0000000000 --- a/lib/cert.c +++ /dev/null @@ -1,1128 +0,0 @@ -/* - * Copyright (C) 2001-2016 Free Software Foundation, Inc. - * Copyright (C) 2015-2016 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* Some of the stuff needed for Certificate authentication is contained - * in this file. - */ - -#include "gnutls_int.h" -#include "errors.h" -#include -#include -#include -#include -#include -#include -#include "str.h" -#include -#include -#include -#include -#include -#include "x509/x509_int.h" -#ifdef ENABLE_OPENPGP -#include "openpgp/openpgp.h" -#endif -#include "dh.h" - -/** - * gnutls_certificate_free_keys: - * @sc: is a #gnutls_certificate_credentials_t type. - * - * This function will delete all the keys and the certificates associated - * with the given credentials. This function must not be called when a - * TLS negotiation that uses the credentials is in progress. - * - **/ -void gnutls_certificate_free_keys(gnutls_certificate_credentials_t sc) -{ - unsigned i, j; - - for (i = 0; i < sc->ncerts; i++) { - for (j = 0; j < sc->certs[i].cert_list_length; j++) { - gnutls_pcert_deinit(&sc->certs[i].cert_list[j]); - } - gnutls_free(sc->certs[i].cert_list); - gnutls_free(sc->certs[i].ocsp_response_file); - _gnutls_str_array_clear(&sc->certs[i].names); - } - - gnutls_free(sc->certs); - sc->certs = NULL; - - for (i = 0; i < sc->ncerts; i++) { - gnutls_privkey_deinit(sc->pkey[i]); - } - - gnutls_free(sc->pkey); - sc->pkey = NULL; - - sc->ncerts = 0; -} - -/** - * gnutls_certificate_free_cas: - * @sc: is a #gnutls_certificate_credentials_t type. - * - * This function will delete all the CAs associated with the given - * credentials. Servers that do not use - * gnutls_certificate_verify_peers2() may call this to save some - * memory. - **/ -void gnutls_certificate_free_cas(gnutls_certificate_credentials_t sc) -{ - /* FIXME: do nothing for now */ - return; -} - -/** - * gnutls_certificate_get_issuer: - * @sc: is a #gnutls_certificate_credentials_t type. - * @cert: is the certificate to find issuer for - * @issuer: Will hold the issuer if any. Should be treated as constant. - * @flags: Use zero or %GNUTLS_TL_GET_COPY - * - * This function will return the issuer of a given certificate. - * If the flag %GNUTLS_TL_GET_COPY is specified a copy of the issuer - * will be returned which must be freed using gnutls_x509_crt_deinit(). - * In that case the provided @issuer must not be initialized. - * - * As with gnutls_x509_trust_list_get_issuer() this function requires - * the %GNUTLS_TL_GET_COPY flag in order to operate with PKCS#11 trust - * lists in a thread-safe way. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - * - * Since: 3.0 - **/ -int -gnutls_certificate_get_issuer(gnutls_certificate_credentials_t sc, - gnutls_x509_crt_t cert, - gnutls_x509_crt_t * issuer, - unsigned int flags) -{ - return gnutls_x509_trust_list_get_issuer(sc->tlist, cert, issuer, - flags); -} - -/** - * gnutls_certificate_get_crt_raw: - * @sc: is a #gnutls_certificate_credentials_t type. - * @idx1: the index of the certificate chain if multiple are present - * @idx2: the index of the certificate in the chain. Zero gives the server's certificate. - * @cert: Will hold the DER encoded certificate. - * - * This function will return the DER encoded certificate of the - * server or any other certificate on its certificate chain (based on @idx2). - * The returned data should be treated as constant and only accessible during the lifetime - * of @sc. The @idx1 matches the value gnutls_certificate_set_x509_key() and friends - * functions. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. In case the indexes are out of bounds %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE - * is returned. - * - * Since: 3.2.5 - **/ -int -gnutls_certificate_get_crt_raw(gnutls_certificate_credentials_t sc, - unsigned idx1, - unsigned idx2, gnutls_datum_t * cert) -{ - if (idx1 >= sc->ncerts) - return - gnutls_assert_val - (GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); - - if (idx2 >= sc->certs[idx1].cert_list_length) - return - gnutls_assert_val - (GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); - - cert->data = sc->certs[idx1].cert_list[idx2].cert.data; - cert->size = sc->certs[idx1].cert_list[idx2].cert.size; - - return 0; -} - -/** - * gnutls_certificate_free_ca_names: - * @sc: is a #gnutls_certificate_credentials_t type. - * - * This function will delete all the CA name in the given - * credentials. Clients may call this to save some memory since in - * client side the CA names are not used. Servers might want to use - * this function if a large list of trusted CAs is present and - * sending the names of it would just consume bandwidth without providing - * information to client. - * - * CA names are used by servers to advertise the CAs they support to - * clients. - **/ -void gnutls_certificate_free_ca_names(gnutls_certificate_credentials_t sc) -{ - _gnutls_free_datum(&sc->tlist->x509_rdn_sequence); -} - - -/** - * gnutls_certificate_free_credentials: - * @sc: is a #gnutls_certificate_credentials_t type. - * - * Free a gnutls_certificate_credentials_t structure. - * - * This function does not free any temporary parameters associated - * with this structure (ie RSA and DH parameters are not freed by this - * function). - **/ -void -gnutls_certificate_free_credentials(gnutls_certificate_credentials_t sc) -{ - gnutls_x509_trust_list_deinit(sc->tlist, 1); - gnutls_certificate_free_keys(sc); - memset(sc->pin_tmp, 0, sizeof(sc->pin_tmp)); -#ifdef ENABLE_OPENPGP - gnutls_openpgp_keyring_deinit(sc->keyring); -#endif - if (sc->deinit_dh_params) { - gnutls_dh_params_deinit(sc->dh_params); - } - - gnutls_free(sc); -} - - -/** - * gnutls_certificate_allocate_credentials: - * @res: is a pointer to a #gnutls_certificate_credentials_t type. - * - * Allocate a gnutls_certificate_credentials_t structure. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int -gnutls_certificate_allocate_credentials(gnutls_certificate_credentials_t * - res) -{ - int ret; - - *res = gnutls_calloc(1, sizeof(certificate_credentials_st)); - - if (*res == NULL) - return GNUTLS_E_MEMORY_ERROR; - - ret = gnutls_x509_trust_list_init(&(*res)->tlist, 0); - if (ret < 0) { - gnutls_assert(); - gnutls_free(*res); - return GNUTLS_E_MEMORY_ERROR; - } - (*res)->verify_bits = DEFAULT_MAX_VERIFY_BITS; - (*res)->verify_depth = DEFAULT_MAX_VERIFY_DEPTH; - - - return 0; -} - -/* Returns 0 if it's ok to use the gnutls_kx_algorithm_t with this - * certificate (uses the KeyUsage field). - */ -static int -check_key_usage(const gnutls_pcert_st * cert, - gnutls_kx_algorithm_t alg) -{ - unsigned int key_usage = 0; - int encipher_type; - - if (cert == NULL || alg == GNUTLS_KX_UNKNOWN) { - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - - if (_gnutls_map_kx_get_cred(alg, 1) == GNUTLS_CRD_CERTIFICATE || - _gnutls_map_kx_get_cred(alg, 0) == GNUTLS_CRD_CERTIFICATE) { - - gnutls_pubkey_get_key_usage(cert->pubkey, &key_usage); - - encipher_type = _gnutls_kx_encipher_type(alg); - - if (key_usage != 0 && encipher_type != CIPHER_IGN) { - /* If key_usage has been set in the certificate - */ - - if (encipher_type == CIPHER_ENCRYPT) { - /* If the key exchange method requires an encipher - * type algorithm, and key's usage does not permit - * encipherment, then fail. - */ - if (!(key_usage & GNUTLS_KEY_KEY_ENCIPHERMENT)) { - gnutls_assert(); - return - GNUTLS_E_KEY_USAGE_VIOLATION; - } - } - - if (encipher_type == CIPHER_SIGN) { - /* The same as above, but for sign only keys - */ - if (!(key_usage & GNUTLS_KEY_DIGITAL_SIGNATURE)) { - gnutls_assert(); - return - GNUTLS_E_KEY_USAGE_VIOLATION; - } - } - } - } - return 0; -} - - -/* returns the KX algorithms that are supported by a - * certificate. (Eg a certificate with RSA params, supports - * GNUTLS_KX_RSA algorithm). - * This function also uses the KeyUsage field of the certificate - * extensions in order to disable unneeded algorithms. - */ -int -_gnutls_selected_cert_supported_kx(gnutls_session_t session, - gnutls_kx_algorithm_t * alg, - int *alg_size) -{ - unsigned kx; - gnutls_pk_algorithm_t pk, cert_pk; - gnutls_pcert_st *cert; - int i; - - if (session->internals.selected_cert_list_length == 0) { - *alg_size = 0; - return 0; - } - - cert = &session->internals.selected_cert_list[0]; - cert_pk = gnutls_pubkey_get_pk_algorithm(cert->pubkey, NULL); - i = 0; - - for (kx = 0; kx < MAX_ALGOS; kx++) { - pk = _gnutls_map_kx_get_pk(kx); - if (pk == cert_pk) { - /* then check key usage */ - if (check_key_usage(cert, kx) == 0 || - unlikely(session->internals.priorities.allow_server_key_usage_violation != 0)) { - alg[i] = kx; - i++; - - if (i > *alg_size) - return - gnutls_assert_val - (GNUTLS_E_INTERNAL_ERROR); - } - } - } - - if (i == 0) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - *alg_size = i; - - return 0; -} - - -/** - * gnutls_certificate_server_set_request: - * @session: is a #gnutls_session_t type. - * @req: is one of GNUTLS_CERT_REQUEST, GNUTLS_CERT_REQUIRE - * - * This function specifies if we (in case of a server) are going to - * send a certificate request message to the client. If @req is - * GNUTLS_CERT_REQUIRE then the server will return an error if the - * peer does not provide a certificate. If you do not call this - * function then the client will not be asked to send a certificate. - **/ -void -gnutls_certificate_server_set_request(gnutls_session_t session, - gnutls_certificate_request_t req) -{ - session->internals.send_cert_req = req; -} - -/** - * gnutls_certificate_set_retrieve_function: - * @cred: is a #gnutls_certificate_credentials_t type. - * @func: is the callback function - * - * This function sets a callback to be called in order to retrieve the - * certificate to be used in the handshake. The callback will take control - * only if a certificate is requested by the peer. You are advised - * to use gnutls_certificate_set_retrieve_function2() because it - * is much more efficient in the processing it requires from gnutls. - * - * The callback's function prototype is: - * int (*callback)(gnutls_session_t, const gnutls_datum_t* req_ca_dn, int nreqs, - * const gnutls_pk_algorithm_t* pk_algos, int pk_algos_length, gnutls_retr2_st* st); - * - * @req_ca_dn is only used in X.509 certificates. - * Contains a list with the CA names that the server considers trusted. - * This is a hint and typically the client should send a certificate that is signed - * by one of these CAs. These names, when available, are DER encoded. To get a more - * meaningful value use the function gnutls_x509_rdn_get(). - * - * @pk_algos contains a list with server's acceptable signature algorithms. - * The certificate returned should support the server's given algorithms. - * - * @st should contain the certificates and private keys. - * - * If the callback function is provided then gnutls will call it, in the - * handshake, after the certificate request message has been received. - * - * In server side pk_algos and req_ca_dn are NULL. - * - * The callback function should set the certificate list to be sent, - * and return 0 on success. If no certificate was selected then the - * number of certificates should be set to zero. The value (-1) - * indicates error and the handshake will be terminated. If both certificates - * are set in the credentials and a callback is available, the callback - * takes predence. - * - * Since: 3.0 - **/ -void gnutls_certificate_set_retrieve_function - (gnutls_certificate_credentials_t cred, - gnutls_certificate_retrieve_function * func) -{ - cred->get_cert_callback = func; -} - -/** - * gnutls_certificate_set_retrieve_function2: - * @cred: is a #gnutls_certificate_credentials_t type. - * @func: is the callback function - * - * This function sets a callback to be called in order to retrieve the - * certificate to be used in the handshake. The callback will take control - * only if a certificate is requested by the peer. - * - * The callback's function prototype is: - * int (*callback)(gnutls_session_t, const gnutls_datum_t* req_ca_dn, int nreqs, - * const gnutls_pk_algorithm_t* pk_algos, int pk_algos_length, gnutls_pcert_st** pcert, - * unsigned int *pcert_length, gnutls_privkey_t * pkey); - * - * @req_ca_dn is only used in X.509 certificates. - * Contains a list with the CA names that the server considers trusted. - * This is a hint and typically the client should send a certificate that is signed - * by one of these CAs. These names, when available, are DER encoded. To get a more - * meaningful value use the function gnutls_x509_rdn_get(). - * - * @pk_algos contains a list with server's acceptable signature algorithms. - * The certificate returned should support the server's given algorithms. - * - * @pcert should contain a single certificate and public key or a list of them. - * - * @pcert_length is the size of the previous list. - * - * @pkey is the private key. - * - * If the callback function is provided then gnutls will call it, in the - * handshake, after the certificate request message has been received. - * All the provided by the callback values will not be released or - * modified by gnutls. - * - * In server side pk_algos and req_ca_dn are NULL. - * - * The callback function should set the certificate list to be sent, - * and return 0 on success. If no certificate was selected then the - * number of certificates should be set to zero. The value (-1) - * indicates error and the handshake will be terminated. If both certificates - * are set in the credentials and a callback is available, the callback - * takes predence. - * - * Since: 3.0 - **/ -void gnutls_certificate_set_retrieve_function2 - (gnutls_certificate_credentials_t cred, - gnutls_certificate_retrieve_function2 * func) -{ - cred->get_cert_callback2 = func; -} - -/** - * gnutls_certificate_set_verify_function: - * @cred: is a #gnutls_certificate_credentials_t type. - * @func: is the callback function - * - * This function sets a callback to be called when peer's certificate - * has been received in order to verify it on receipt rather than - * doing after the handshake is completed. - * - * The callback's function prototype is: - * int (*callback)(gnutls_session_t); - * - * If the callback function is provided then gnutls will call it, in the - * handshake, just after the certificate message has been received. - * To verify or obtain the certificate the gnutls_certificate_verify_peers2(), - * gnutls_certificate_type_get(), gnutls_certificate_get_peers() functions - * can be used. - * - * The callback function should return 0 for the handshake to continue - * or non-zero to terminate. - * - * Since: 2.10.0 - **/ -void - gnutls_certificate_set_verify_function - (gnutls_certificate_credentials_t cred, - gnutls_certificate_verify_function * func) -{ - cred->verify_callback = func; -} - -/*- - * _gnutls_x509_extract_certificate_activation_time - return the peer's certificate activation time - * @cert: should contain an X.509 DER encoded certificate - * - * This function will return the certificate's activation time in UNIX time - * (ie seconds since 00:00:00 UTC January 1, 1970). - * - * Returns a (time_t) -1 in case of an error. - * - -*/ -static time_t -_gnutls_x509_get_raw_crt_activation_time(const gnutls_datum_t * cert) -{ - gnutls_x509_crt_t xcert; - time_t result; - - result = gnutls_x509_crt_init(&xcert); - if (result < 0) - return (time_t) - 1; - - result = gnutls_x509_crt_import(xcert, cert, GNUTLS_X509_FMT_DER); - if (result < 0) { - gnutls_x509_crt_deinit(xcert); - return (time_t) - 1; - } - - result = gnutls_x509_crt_get_activation_time(xcert); - - gnutls_x509_crt_deinit(xcert); - - return result; -} - -/*- - * gnutls_x509_extract_certificate_expiration_time: - * @cert: should contain an X.509 DER encoded certificate - * - * This function will return the certificate's expiration time in UNIX - * time (ie seconds since 00:00:00 UTC January 1, 1970). Returns a - * - * (time_t) -1 in case of an error. - * - -*/ -static time_t -_gnutls_x509_get_raw_crt_expiration_time(const gnutls_datum_t * cert) -{ - gnutls_x509_crt_t xcert; - time_t result; - - result = gnutls_x509_crt_init(&xcert); - if (result < 0) - return (time_t) - 1; - - result = gnutls_x509_crt_import(xcert, cert, GNUTLS_X509_FMT_DER); - if (result < 0) { - gnutls_x509_crt_deinit(xcert); - return (time_t) - 1; - } - - result = gnutls_x509_crt_get_expiration_time(xcert); - - gnutls_x509_crt_deinit(xcert); - - return result; -} - -#ifdef ENABLE_OPENPGP -/*- - * _gnutls_openpgp_crt_verify_peers - return the peer's certificate status - * @session: is a gnutls session - * - * This function will try to verify the peer's certificate and return its status (TRUSTED, INVALID etc.). - * Returns a negative error code in case of an error, or GNUTLS_E_NO_CERTIFICATE_FOUND if no certificate was sent. - -*/ -static int -_gnutls_openpgp_crt_verify_peers(gnutls_session_t session, - gnutls_x509_subject_alt_name_t type, - const char *hostname, - unsigned int *status) -{ - cert_auth_info_t info; - gnutls_certificate_credentials_t cred; - int peer_certificate_list_size, ret; - unsigned int verify_flags; - - CHECK_AUTH(GNUTLS_CRD_CERTIFICATE, GNUTLS_E_INVALID_REQUEST); - - info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); - if (info == NULL) - return GNUTLS_E_INVALID_REQUEST; - - cred = (gnutls_certificate_credentials_t) - _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); - if (cred == NULL) { - gnutls_assert(); - return GNUTLS_E_INSUFFICIENT_CREDENTIALS; - } - - if (info->raw_certificate_list == NULL || info->ncerts == 0) { - gnutls_assert(); - return GNUTLS_E_NO_CERTIFICATE_FOUND; - } - - verify_flags = cred->verify_flags | session->internals.additional_verify_flags; - - /* generate a list of gnutls_certs based on the auth info - * raw certs. - */ - peer_certificate_list_size = info->ncerts; - - if (peer_certificate_list_size != 1) { - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - - /* Verify certificate - */ - ret = - _gnutls_openpgp_verify_key(cred, type, hostname, - &info->raw_certificate_list[0], - peer_certificate_list_size, - verify_flags, - status); - - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return 0; -} -#endif - -/** - * gnutls_certificate_verify_peers2: - * @session: is a gnutls session - * @status: is the output of the verification - * - * This function will verify the peer's certificate and store - * the status in the @status variable as a bitwise OR of gnutls_certificate_status_t - * values or zero if the certificate is trusted. Note that value in @status - * is set only when the return value of this function is success (i.e, failure - * to trust a certificate does not imply a negative return value). - * The default verification flags used by this function can be overridden - * using gnutls_certificate_set_verify_flags(). - * - * This function will take into account the OCSP Certificate Status TLS extension, - * as well as the following X.509 certificate extensions: Name Constraints, - * Key Usage, and Basic Constraints (pathlen). - * - * To avoid denial of service attacks some - * default upper limits regarding the certificate key size and chain - * size are set. To override them use gnutls_certificate_set_verify_limits(). - * - * Note that you must also check the peer's name in order to check if - * the verified certificate belongs to the actual peer, see gnutls_x509_crt_check_hostname(), - * or use gnutls_certificate_verify_peers3(). - * - * Returns: %GNUTLS_E_SUCCESS (0) when the validation is performed, or a negative error code otherwise. - * A sucessful error code means that the @status parameter must be checked to obtain the validation status. - **/ -int -gnutls_certificate_verify_peers2(gnutls_session_t session, - unsigned int *status) -{ - return gnutls_certificate_verify_peers(session, NULL, 0, status); -} - -/** - * gnutls_certificate_verify_peers3: - * @session: is a gnutls session - * @hostname: is the expected name of the peer; may be %NULL - * @status: is the output of the verification - * - * This function will verify the peer's certificate and store the - * the status in the @status variable as a bitwise OR of gnutls_certificate_status_t - * values or zero if the certificate is trusted. Note that value in @status - * is set only when the return value of this function is success (i.e, failure - * to trust a certificate does not imply a negative return value). - * The default verification flags used by this function can be overridden - * using gnutls_certificate_set_verify_flags(). See the documentation - * of gnutls_certificate_verify_peers2() for details in the verification process. - * - * If the @hostname provided is non-NULL then this function will compare - * the hostname in the certificate against it. The comparison will follow - * the RFC6125 recommendations. If names do not match the - * %GNUTLS_CERT_UNEXPECTED_OWNER status flag will be set. - * - * In order to verify the purpose of the end-certificate (by checking the extended - * key usage), use gnutls_certificate_verify_peers(). - * - * Returns: %GNUTLS_E_SUCCESS (0) when the validation is performed, or a negative error code otherwise. - * A sucessful error code means that the @status parameter must be checked to obtain the validation status. - * - * Since: 3.1.4 - **/ -int -gnutls_certificate_verify_peers3(gnutls_session_t session, - const char *hostname, - unsigned int *status) -{ -gnutls_typed_vdata_st data; - - data.type = GNUTLS_DT_DNS_HOSTNAME; - data.size = 0; - data.data = (void*)hostname; - - return gnutls_certificate_verify_peers(session, &data, 1, status); -} - -/** - * gnutls_certificate_verify_peers: - * @session: is a gnutls session - * @data: an array of typed data - * @elements: the number of data elements - * @status: is the output of the verification - * - * This function will verify the peer's certificate and store the - * the status in the @status variable as a bitwise OR of gnutls_certificate_status_t - * values or zero if the certificate is trusted. Note that value in @status - * is set only when the return value of this function is success (i.e, failure - * to trust a certificate does not imply a negative return value). - * The default verification flags used by this function can be overridden - * using gnutls_certificate_set_verify_flags(). See the documentation - * of gnutls_certificate_verify_peers2() for details in the verification process. - * - * The acceptable @data types are %GNUTLS_DT_DNS_HOSTNAME, %GNUTLS_DT_RFC822NAME and %GNUTLS_DT_KEY_PURPOSE_OID. - * The former two accept as data a null-terminated hostname or email address, and the latter a null-terminated - * object identifier (e.g., %GNUTLS_KP_TLS_WWW_SERVER). - * - * If a DNS hostname is provided then this function will compare - * the hostname in the certificate against the given. If names do not match the - * %GNUTLS_CERT_UNEXPECTED_OWNER status flag will be set. - * If a key purpose OID is provided and the end-certificate contains the extended key - * usage PKIX extension, it will be required to be have the provided key purpose - * or be marked for any purpose, otherwise verification status will have the - * %GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE flag set. - * - * Returns: %GNUTLS_E_SUCCESS (0) when the validation is performed, or a negative error code otherwise. - * A sucessful error code means that the @status parameter must be checked to obtain the validation status. - * - * Since: 3.3.0 - **/ -int -gnutls_certificate_verify_peers(gnutls_session_t session, - gnutls_typed_vdata_st * data, - unsigned int elements, - unsigned int *status) -{ - cert_auth_info_t info; - - CHECK_AUTH(GNUTLS_CRD_CERTIFICATE, GNUTLS_E_INVALID_REQUEST); - - info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); - if (info == NULL) { - return GNUTLS_E_NO_CERTIFICATE_FOUND; - } - - if (info->raw_certificate_list == NULL || info->ncerts == 0) - return GNUTLS_E_NO_CERTIFICATE_FOUND; - - - switch (gnutls_certificate_type_get(session)) { - case GNUTLS_CRT_X509: - return _gnutls_x509_cert_verify_peers(session, data, elements, - status); -#ifdef ENABLE_OPENPGP - case GNUTLS_CRT_OPENPGP: { - const char *hostname = NULL; - unsigned i, type = 0; - - for (i=0;iraw_certificate_list == NULL || info->ncerts == 0) { - gnutls_assert(); - return (time_t) - 1; - } - - switch (gnutls_certificate_type_get(session)) { - case GNUTLS_CRT_X509: - return - _gnutls_x509_get_raw_crt_expiration_time(&info-> - raw_certificate_list - [0]); -#ifdef ENABLE_OPENPGP - case GNUTLS_CRT_OPENPGP: - return - _gnutls_openpgp_get_raw_key_expiration_time - (&info->raw_certificate_list[0]); -#endif - default: - return (time_t) - 1; - } -} - -/** - * gnutls_certificate_activation_time_peers: - * @session: is a gnutls session - * - * This function will return the peer's certificate activation time. - * This is the creation time for openpgp keys. - * - * Returns: (time_t)-1 on error. - * - * Deprecated: gnutls_certificate_verify_peers2() now verifies activation times. - **/ -time_t gnutls_certificate_activation_time_peers(gnutls_session_t session) -{ - cert_auth_info_t info; - - CHECK_AUTH(GNUTLS_CRD_CERTIFICATE, GNUTLS_E_INVALID_REQUEST); - - info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); - if (info == NULL) { - return (time_t) - 1; - } - - if (info->raw_certificate_list == NULL || info->ncerts == 0) { - gnutls_assert(); - return (time_t) - 1; - } - - switch (gnutls_certificate_type_get(session)) { - case GNUTLS_CRT_X509: - return - _gnutls_x509_get_raw_crt_activation_time(&info-> - raw_certificate_list - [0]); -#ifdef ENABLE_OPENPGP - case GNUTLS_CRT_OPENPGP: - return - _gnutls_openpgp_get_raw_key_creation_time(&info-> - raw_certificate_list - [0]); -#endif - default: - return (time_t) - 1; - } -} - -#define TEST_TEXT "test text" -/* returns error if the certificate has different algorithm than - * the given key parameters. - */ -int _gnutls_check_key_cert_match(gnutls_certificate_credentials_t res) -{ - gnutls_datum_t test = {(void*)TEST_TEXT, sizeof(TEST_TEXT)-1}; - gnutls_datum_t sig = {NULL, 0}; - int pk, pk2, ret; - - if (res->flags & GNUTLS_CERTIFICATE_SKIP_KEY_CERT_MATCH) - return 0; - - pk = - gnutls_pubkey_get_pk_algorithm(res->certs[res->ncerts - 1]. - cert_list[0].pubkey, NULL); - pk2 = - gnutls_privkey_get_pk_algorithm(res->pkey[res->ncerts - 1], - NULL); - - if (pk2 != pk) { - gnutls_assert(); - return GNUTLS_E_CERTIFICATE_KEY_MISMATCH; - } - - /* now check if keys really match. We use the sign/verify approach - * because we cannot always obtain the parameters from the abstract - * keys (e.g. PKCS #11). */ - ret = gnutls_privkey_sign_data(res->pkey[res->ncerts - 1], - GNUTLS_DIG_SHA256, 0, &test, &sig); - if (ret < 0) { - /* for some reason we couldn't sign that. That shouldn't have - * happened, but since it did, report the issue and do not - * try the key matching test */ - _gnutls_debug_log("%s: failed signing\n", __func__); - goto finish; - } - - ret = gnutls_pubkey_verify_data2(res->certs[res->ncerts - 1].cert_list[0].pubkey, - gnutls_pk_to_sign(pk, GNUTLS_DIG_SHA256), - GNUTLS_VERIFY_ALLOW_BROKEN, &test, &sig); - - gnutls_free(sig.data); - - if (ret < 0) - return gnutls_assert_val(GNUTLS_E_CERTIFICATE_KEY_MISMATCH); - - finish: - return 0; -} - -/** - * gnutls_certificate_verification_status_print: - * @status: The status flags to be printed - * @type: The certificate type - * @out: Newly allocated datum with (0) terminated string. - * @flags: should be zero - * - * This function will pretty print the status of a verification - * process -- eg. the one obtained by gnutls_certificate_verify_peers3(). - * - * The output @out needs to be deallocated using gnutls_free(). - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - * - * Since: 3.1.4 - **/ -int -gnutls_certificate_verification_status_print(unsigned int status, - gnutls_certificate_type_t - type, gnutls_datum_t * out, - unsigned int flags) -{ - gnutls_buffer_st str; - - _gnutls_buffer_init(&str); - - if (status == 0) - _gnutls_buffer_append_str(&str, - _ - ("The certificate is trusted. ")); - else - _gnutls_buffer_append_str(&str, - _ - ("The certificate is NOT trusted. ")); - - if (type == GNUTLS_CRT_X509) { - if (status & GNUTLS_CERT_REVOKED) - _gnutls_buffer_append_str(&str, - _ - ("The certificate chain is revoked. ")); - - if (status & GNUTLS_CERT_MISMATCH) - _gnutls_buffer_append_str(&str, - _ - ("The certificate doesn't match the local copy (TOFU). ")); - - if (status & GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED) - _gnutls_buffer_append_str(&str, - _ - ("The revocation data are old and have been superseded. ")); - - if (status & GNUTLS_CERT_REVOCATION_DATA_ISSUED_IN_FUTURE) - _gnutls_buffer_append_str(&str, - _ - ("The revocation data are issued with a future date. ")); - - if (status & GNUTLS_CERT_SIGNER_NOT_FOUND) - _gnutls_buffer_append_str(&str, - _ - ("The certificate issuer is unknown. ")); - - if (status & GNUTLS_CERT_SIGNER_NOT_CA) - _gnutls_buffer_append_str(&str, - _ - ("The certificate issuer is not a CA. ")); - } else if (type == GNUTLS_CRT_OPENPGP) { - if (status & GNUTLS_CERT_SIGNER_NOT_FOUND) - _gnutls_buffer_append_str(&str, - _ - ("Could not find a signer of the certificate. ")); - - if (status & GNUTLS_CERT_REVOKED) - _gnutls_buffer_append_str(&str, - _ - ("The certificate is revoked. ")); - } - - if (status & GNUTLS_CERT_INSECURE_ALGORITHM) - _gnutls_buffer_append_str(&str, - _ - ("The certificate chain uses insecure algorithm. ")); - - if (status & GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE) - _gnutls_buffer_append_str(&str, - _ - ("The certificate chain violates the signer's constraints. ")); - - if (status & GNUTLS_CERT_PURPOSE_MISMATCH) - _gnutls_buffer_append_str(&str, - _ - ("The certificate chain does not match the intended purpose. ")); - - if (status & GNUTLS_CERT_NOT_ACTIVATED) - _gnutls_buffer_append_str(&str, - _ - ("The certificate chain uses not yet valid certificate. ")); - - if (status & GNUTLS_CERT_EXPIRED) - _gnutls_buffer_append_str(&str, - _ - ("The certificate chain uses expired certificate. ")); - - if (status & GNUTLS_CERT_SIGNATURE_FAILURE) - _gnutls_buffer_append_str(&str, - _ - ("The signature in the certificate is invalid. ")); - - if (status & GNUTLS_CERT_UNEXPECTED_OWNER) - _gnutls_buffer_append_str(&str, - _ - ("The name in the certificate does not match the expected. ")); - - if (status & GNUTLS_CERT_MISSING_OCSP_STATUS) - _gnutls_buffer_append_str(&str, - _ - ("The certificate requires the server to include an OCSP status in its response, but the OCSP status is missing. ")); - - if (status & GNUTLS_CERT_INVALID_OCSP_STATUS) - _gnutls_buffer_append_str(&str, - _ - ("The received OCSP status response is invalid. ")); - - if (status & GNUTLS_CERT_UNKNOWN_CRIT_EXTENSIONS) - _gnutls_buffer_append_str(&str, - _ - ("The certificate contains an unknown critical extension. ")); - - return _gnutls_buffer_to_datum(&str, out, 1); -} - -#if defined(ENABLE_DHE) || defined(ENABLE_ANON) -/** - * gnutls_certificate_set_dh_params: - * @res: is a gnutls_certificate_credentials_t type - * @dh_params: the Diffie-Hellman parameters. - * - * This function will set the Diffie-Hellman parameters for a - * certificate server to use. These parameters will be used in - * Ephemeral Diffie-Hellman cipher suites. Note that only a pointer - * to the parameters are stored in the certificate handle, so you - * must not deallocate the parameters before the certificate is deallocated. - * - **/ -void -gnutls_certificate_set_dh_params(gnutls_certificate_credentials_t res, - gnutls_dh_params_t dh_params) -{ - if (res->deinit_dh_params) { - res->deinit_dh_params = 0; - gnutls_dh_params_deinit(res->dh_params); - res->dh_params = NULL; - } - - res->dh_params = dh_params; -} - - -/** - * gnutls_certificate_set_known_dh_params: - * @res: is a gnutls_certificate_credentials_t type - * @sec_param: is an option of the %gnutls_sec_param_t enumeration - * - * This function will set the Diffie-Hellman parameters for a - * certificate server to use. These parameters will be used in - * Ephemeral Diffie-Hellman cipher suites and will be selected from - * the FFDHE set of RFC7919 according to the security level provided. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - * - * Since: 3.5.6 - **/ -int -gnutls_certificate_set_known_dh_params(gnutls_certificate_credentials_t res, - gnutls_sec_param_t sec_param) -{ - int ret; - - if (res->deinit_dh_params) { - res->deinit_dh_params = 0; - gnutls_dh_params_deinit(res->dh_params); - res->dh_params = NULL; - } - - ret = _gnutls_set_cred_dh_params(&res->dh_params, sec_param); - if (ret < 0) - return gnutls_assert_val(ret); - - res->deinit_dh_params = 1; - - return 0; -} - -#endif /* DH */ diff --git a/lib/cipher-cbc.c b/lib/cipher-cbc.c new file mode 100644 index 0000000000..178fc2e5e8 --- /dev/null +++ b/lib/cipher-cbc.c @@ -0,0 +1,163 @@ +/* + * Copyright (C) 2000-2013 Free Software Foundation, Inc. + * Copyright (C) 2013 Nikos Mavrogiannopoulos + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "cipher.h" + +static void dummy_wait(record_parameters_st *params, + const uint8_t *data, size_t data_size, + unsigned int mac_data, unsigned int max_mac_data) +{ + /* this hack is only needed on CBC ciphers when Encrypt-then-MAC mode + * is not supported by the peer. */ + unsigned v; + unsigned int tag_size = + _gnutls_auth_cipher_tag_len(¶ms->read.ctx.tls12); + unsigned hash_block = _gnutls_mac_block_size(params->mac); + + /* force additional hash compression function evaluations to prevent timing + * attacks that distinguish between wrong-mac + correct pad, from wrong-mac + incorrect pad. + */ + + if (params->mac && params->mac->id == GNUTLS_MAC_SHA384) + /* v = 1 for the hash function padding + 16 for message length */ + v = 17; + else /* v = 1 for the hash function padding + 8 for message length */ + v = 9; + + if (hash_block > 0) { + int max_blocks = (max_mac_data+v+hash_block-1)/hash_block; + int hashed_blocks = (mac_data+v+hash_block-1)/hash_block; + unsigned to_hash; + + max_blocks -= hashed_blocks; + if (max_blocks < 1) + return; + + to_hash = max_blocks * hash_block; + if ((unsigned)to_hash+1+tag_size < data_size) { + _gnutls_auth_cipher_add_auth + (¶ms->read.ctx.tls12, + data+data_size-tag_size-to_hash-1, + to_hash); + } + } +} + +/* Verifies the CBC HMAC. That's a special case as it tries to avoid + * any leaks which could make CBC ciphersuites without EtM usable as an + * oracle to attacks. + */ +int cbc_mac_verify(gnutls_session_t session, record_parameters_st *params, + uint8_t preamble[MAX_PREAMBLE_SIZE], + content_type_t type, + uint64_t sequence, + const uint8_t *data, size_t data_size, + size_t tag_size) +{ + int ret; + const version_entry_st *ver = get_version(session); + unsigned int tmp_pad_failed = 0; + unsigned int pad_failed = 0; + unsigned int pad, i, length; + const uint8_t *tag_ptr = NULL; + unsigned preamble_size; + uint8_t tag[MAX_HASH_SIZE]; +#ifdef ENABLE_SSL3 + unsigned blocksize = _gnutls_cipher_get_block_size(params->cipher); +#endif + + pad = data[data_size - 1]; /* pad */ + + /* Check the padding bytes (TLS 1.x). + * Note that we access all 256 bytes of ciphertext for padding check + * because there is a timing channel in that memory access (in certain CPUs). + */ +#ifdef ENABLE_SSL3 + if (ver->id == GNUTLS_SSL3) { + if (pad >= blocksize) + pad_failed = 1; + } else +#endif + { + for (i = 2; i <= MIN(256, data_size); i++) { + tmp_pad_failed |= + (data[data_size - i] != pad); + pad_failed |= + ((i <= (1 + pad)) & (tmp_pad_failed)); + } + } + + if (unlikely + (pad_failed != 0 + || (1 + pad > ((int) data_size - tag_size)))) { + /* We do not fail here. We check below for the + * the pad_failed. If zero means success. + */ + pad_failed = 1; + pad = 0; + } + + length = data_size - tag_size - pad - 1; + tag_ptr = &data[length]; + + /* Pass the type, version, length and plain through + * MAC. + */ + preamble_size = + _gnutls_make_preamble(sequence, type, + length, ver, preamble); + + ret = + _gnutls_auth_cipher_add_auth(¶ms->read. + ctx.tls12, preamble, + preamble_size); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + + ret = + _gnutls_auth_cipher_add_auth(¶ms->read. + ctx.tls12, + data, length); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + + ret = + _gnutls_auth_cipher_tag(¶ms->read.ctx.tls12, tag, + tag_size); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + + if (unlikely + (gnutls_memcmp(tag, tag_ptr, tag_size) != 0 || pad_failed != 0)) { + /* HMAC was not the same. */ + dummy_wait(params, data, data_size, + length + preamble_size, + preamble_size + data_size - tag_size - 1); + + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); + } + + return length; +} diff --git a/lib/cipher.c b/lib/cipher.c index acb6b39623..275c57a4e8 100644 --- a/lib/cipher.c +++ b/lib/cipher.c @@ -1,6 +1,7 @@ /* * Copyright (C) 2000-2013 Free Software Foundation, Inc. * Copyright (C) 2013 Nikos Mavrogiannopoulos + * Copyright (C) 2017-2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -27,7 +28,6 @@ #include "gnutls_int.h" #include "errors.h" -#include "compress.h" #include "cipher.h" #include "algorithms.h" #include "hash_int.h" @@ -42,90 +42,76 @@ #include #include -static int compressed_to_ciphertext(gnutls_session_t session, - uint8_t * cipher_data, int cipher_size, - gnutls_datum_t * compressed, - size_t min_pad, - content_type_t _type, - record_parameters_st * params); -static int ciphertext_to_compressed(gnutls_session_t session, - gnutls_datum_t * ciphertext, - gnutls_datum_t * compressed, - uint8_t type, - record_parameters_st * params, - gnutls_uint64 * sequence); - -inline static int is_write_comp_null(record_parameters_st * record_params) -{ - if (record_params->compression_algorithm == GNUTLS_COMP_NULL) - return 0; - - return 1; -} +static int encrypt_packet(gnutls_session_t session, + uint8_t * cipher_data, int cipher_size, + gnutls_datum_t * plain, + size_t min_pad, + content_type_t _type, + record_parameters_st * params); -inline static int is_read_comp_null(record_parameters_st * record_params) -{ - if (record_params->compression_algorithm == GNUTLS_COMP_NULL) - return 0; +static int decrypt_packet(gnutls_session_t session, + gnutls_datum_t * ciphertext, + gnutls_datum_t * plain, + content_type_t type, + record_parameters_st * params, + uint64_t sequence); - return 1; -} +static int +decrypt_packet_tls13(gnutls_session_t session, + gnutls_datum_t * ciphertext, + gnutls_datum_t * plain, + content_type_t *type, record_parameters_st * params, + uint64_t sequence); +static int +encrypt_packet_tls13(gnutls_session_t session, + uint8_t *cipher_data, size_t cipher_size, + gnutls_datum_t *plain, + size_t pad_size, + uint8_t type, + record_parameters_st *params); /* returns ciphertext which contains the headers too. This also * calculates the size in the header field. - * + * */ int _gnutls_encrypt(gnutls_session_t session, - const uint8_t * data, size_t data_size, + const uint8_t *data, size_t data_size, size_t min_pad, - mbuffer_st * bufel, - content_type_t type, record_parameters_st * params) + mbuffer_st *bufel, + content_type_t type, record_parameters_st *params) { - gnutls_datum_t comp; - int free_comp = 0; + gnutls_datum_t plaintext; + const version_entry_st *vers = get_version(session); int ret; - if (data_size == 0 || is_write_comp_null(params) == 0) { - comp.data = (uint8_t *) data; - comp.size = data_size; - } else { - /* Here comp is allocated and must be - * freed. - */ - free_comp = 1; - - comp.size = _mbuffer_get_udata_size(bufel); - comp.data = gnutls_malloc(comp.size); - if (comp.data == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + plaintext.data = (uint8_t *) data; + plaintext.size = data_size; + if (vers && vers->tls13_sem) { + /* it fills the header, as it is included in the authenticated + * data of the AEAD cipher. */ ret = - _gnutls_compress(¶ms->write.compression_state, - data, data_size, comp.data, comp.size, - session->internals.priorities. - stateless_compression); - if (ret < 0) { - gnutls_free(comp.data); + encrypt_packet_tls13(session, + _mbuffer_get_udata_ptr(bufel), + _mbuffer_get_udata_size(bufel), + &plaintext, min_pad, type, + params); + if (ret < 0) + return gnutls_assert_val(ret); + } else { + ret = + encrypt_packet(session, + _mbuffer_get_udata_ptr(bufel), + _mbuffer_get_udata_size + (bufel), &plaintext, min_pad, type, + params); + if (ret < 0) return gnutls_assert_val(ret); - } - comp.size = ret; } - ret = - compressed_to_ciphertext(session, - _mbuffer_get_udata_ptr(bufel), - _mbuffer_get_udata_size - (bufel), &comp, min_pad, type, - params); - if (free_comp) - gnutls_free(comp.data); - - if (ret < 0) - return gnutls_assert_val(ret); - if (IS_DTLS(session)) _gnutls_write_uint16(ret, ((uint8_t *) @@ -148,56 +134,32 @@ _gnutls_encrypt(gnutls_session_t session, */ int _gnutls_decrypt(gnutls_session_t session, - gnutls_datum_t * ciphertext, - gnutls_datum_t * output, - content_type_t type, - record_parameters_st * params, gnutls_uint64 * sequence) + gnutls_datum_t *ciphertext, + gnutls_datum_t *output, + content_type_t *type, + record_parameters_st *params, + uint64_t sequence) { int ret; + const version_entry_st *vers = get_version(session); if (ciphertext->size == 0) return 0; - if (is_read_comp_null(params) == 0) { + if (vers && vers->tls13_sem) ret = - ciphertext_to_compressed(session, ciphertext, - output, type, params, - sequence); - if (ret < 0) - return gnutls_assert_val(ret); - - return ret; - } else { - gnutls_datum_t tmp; - - tmp.size = output->size; - tmp.data = gnutls_malloc(tmp.size); - if (tmp.data == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - + decrypt_packet_tls13(session, ciphertext, + output, type, params, + sequence); + else ret = - ciphertext_to_compressed(session, ciphertext, - &tmp, type, params, - sequence); - if (ret < 0) - goto leave; - - tmp.size = ret; - - if (ret != 0) { - ret = - _gnutls_decompress(¶ms->read. - compression_state, tmp.data, - tmp.size, output->data, - output->size); - if (ret < 0) - goto leave; - } + decrypt_packet(session, ciphertext, + output, *type, params, + sequence); + if (ret < 0) + return gnutls_assert_val(ret); - leave: - gnutls_free(tmp.data); - return ret; - } + return ret; } @@ -247,21 +209,19 @@ calc_enc_length_stream(gnutls_session_t session, int data_size, return length; } -#define MAX_PREAMBLE_SIZE 16 - /* generates the authentication data (data to be hashed only * and are not to be sent). Returns their size. */ -static inline int -make_preamble(uint8_t * uint64_data, uint8_t type, unsigned int length, - const version_entry_st * ver, uint8_t * preamble) +int +_gnutls_make_preamble(uint64_t uint64_data, uint8_t type, unsigned int length, + const version_entry_st * ver, uint8_t preamble[MAX_PREAMBLE_SIZE]) { uint8_t *p = preamble; uint16_t c_length; c_length = _gnutls_conv_uint16(length); - memcpy(p, uint64_data, 8); + _gnutls_write_uint64(uint64_data, p); p += 8; *p = type; p++; @@ -279,15 +239,15 @@ make_preamble(uint8_t * uint64_data, uint8_t type, unsigned int length, return p - preamble; } -/* This is the actual encryption - * Encrypts the given compressed datum, and puts the result to cipher_data, +/* This is the actual encryption + * Encrypts the given plaintext datum, and puts the result to cipher_data, * which has cipher_size size. * return the actual encrypted data length. */ static int -compressed_to_ciphertext(gnutls_session_t session, +encrypt_packet(gnutls_session_t session, uint8_t * cipher_data, int cipher_size, - gnutls_datum_t * compressed, + gnutls_datum_t * plain, size_t min_pad, content_type_t type, record_parameters_st * params) @@ -297,15 +257,15 @@ compressed_to_ciphertext(gnutls_session_t session, uint8_t preamble[MAX_PREAMBLE_SIZE]; int preamble_size; int tag_size = - _gnutls_auth_cipher_tag_len(¶ms->write.cipher_state); + _gnutls_auth_cipher_tag_len(¶ms->write.ctx.tls12); int blocksize = _gnutls_cipher_get_block_size(params->cipher); unsigned algo_type = _gnutls_cipher_type(params->cipher); uint8_t *data_ptr, *full_cipher_ptr; const version_entry_st *ver = get_version(session); int explicit_iv = _gnutls_version_has_explicit_iv(ver); int auth_cipher = - _gnutls_auth_cipher_is_aead(¶ms->write.cipher_state); - uint8_t nonce[MAX_CIPHER_BLOCK_SIZE]; + _gnutls_auth_cipher_is_aead(¶ms->write.ctx.tls12); + uint8_t nonce[MAX_CIPHER_IV_SIZE]; unsigned imp_iv_size = 0, exp_iv_size = 0; bool etm = 0; @@ -332,7 +292,7 @@ compressed_to_ciphertext(gnutls_session_t session, pad = min_pad; length = - calc_enc_length_block(session, ver, compressed->size, + calc_enc_length_block(session, ver, plain->size, tag_size, &pad, auth_cipher, blocksize, etm); } else { /* AEAD + STREAM */ @@ -341,7 +301,7 @@ compressed_to_ciphertext(gnutls_session_t session, pad = 0; length = - calc_enc_length_stream(session, compressed->size, + calc_enc_length_stream(session, plain->size, tag_size, auth_cipher, exp_iv_size); } @@ -362,20 +322,20 @@ compressed_to_ciphertext(gnutls_session_t session, /* copy the random IV. */ memcpy(data_ptr, nonce, blocksize); - _gnutls_auth_cipher_setiv(¶ms->write. - cipher_state, data_ptr, + ret = _gnutls_auth_cipher_setiv(¶ms->write. + ctx.tls12, data_ptr, blocksize); + if (ret < 0) + return gnutls_assert_val(ret); /*data_ptr += blocksize;*/ cipher_data += blocksize; } } else { /* AEAD */ - if (params->cipher->xor_nonce == 0) { + if ((params->cipher->flags & GNUTLS_CIPHER_FLAG_XOR_NONCE) == 0) { /* Values in AEAD are pretty fixed in TLS 1.2 for 128-bit block */ - if (params->write.IV.data == NULL - || params->write.IV.size != - imp_iv_size) + if (params->write.iv_size != imp_iv_size) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); @@ -383,11 +343,9 @@ compressed_to_ciphertext(gnutls_session_t session, * write.sequence_number (It is a MAY on RFC 5288), and safer * as it will never reuse a value. */ - memcpy(nonce, params->write.IV.data, - params->write.IV.size); - memcpy(&nonce[imp_iv_size], - UINT64DATA(params->write.sequence_number), - 8); + memcpy(nonce, params->write.iv, + params->write.iv_size); + _gnutls_write_uint64(params->write.sequence_number, &nonce[imp_iv_size]); memcpy(data_ptr, &nonce[imp_iv_size], exp_iv_size); @@ -395,30 +353,29 @@ compressed_to_ciphertext(gnutls_session_t session, /*data_ptr += exp_iv_size;*/ cipher_data += exp_iv_size; } else { /* XOR nonce with IV */ - if (unlikely(params->write.IV.size != 12 || imp_iv_size != 12 || exp_iv_size != 0)) + if (unlikely(params->write.iv_size != 12 || imp_iv_size != 12 || exp_iv_size != 0)) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); memset(nonce, 0, 4); - memcpy(&nonce[4], - UINT64DATA(params->write.sequence_number), 8); + _gnutls_write_uint64(params->write.sequence_number, &nonce[4]); - memxor(nonce, params->write.IV.data, 12); + memxor(nonce, params->write.iv, 12); } } if (etm) ret = length-tag_size; else - ret = compressed->size; + ret = plain->size; preamble_size = - make_preamble(UINT64DATA(params->write.sequence_number), - type, ret, ver, preamble); + _gnutls_make_preamble(params->write.sequence_number, + type, ret, ver, preamble); if (algo_type == CIPHER_BLOCK || algo_type == CIPHER_STREAM) { /* add the authenticated data */ ret = - _gnutls_auth_cipher_add_auth(¶ms->write.cipher_state, + _gnutls_auth_cipher_add_auth(¶ms->write.ctx.tls12, preamble, preamble_size); if (ret < 0) return gnutls_assert_val(ret); @@ -426,7 +383,7 @@ compressed_to_ciphertext(gnutls_session_t session, if (etm && explicit_iv) { /* In EtM we need to hash the IV as well */ ret = - _gnutls_auth_cipher_add_auth(¶ms->write.cipher_state, + _gnutls_auth_cipher_add_auth(¶ms->write.ctx.tls12, full_cipher_ptr, blocksize); if (ret < 0) return gnutls_assert_val(ret); @@ -435,18 +392,18 @@ compressed_to_ciphertext(gnutls_session_t session, /* Actual encryption. */ ret = - _gnutls_auth_cipher_encrypt2_tag(¶ms->write.cipher_state, - compressed->data, - compressed->size, cipher_data, + _gnutls_auth_cipher_encrypt2_tag(¶ms->write.ctx.tls12, + plain->data, + plain->size, cipher_data, cipher_size, pad); if (ret < 0) return gnutls_assert_val(ret); } else { /* AEAD */ - ret = _gnutls_aead_cipher_encrypt(¶ms->write.cipher_state.cipher, + ret = _gnutls_aead_cipher_encrypt(¶ms->write.ctx.tls12.cipher, nonce, imp_iv_size + exp_iv_size, preamble, preamble_size, tag_size, - compressed->data, compressed->size, + plain->data, plain->size, cipher_data, cipher_size); if (ret < 0) return gnutls_assert_val(ret); @@ -455,66 +412,132 @@ compressed_to_ciphertext(gnutls_session_t session, return length; } -static void dummy_wait(record_parameters_st * params, - gnutls_datum_t * plaintext, unsigned pad_failed, - unsigned int pad, unsigned total) +static int +encrypt_packet_tls13(gnutls_session_t session, + uint8_t *cipher_data, size_t cipher_size, + gnutls_datum_t *plain, + size_t pad_size, + uint8_t type, + record_parameters_st *params) { - /* this hack is only needed on CBC ciphers */ - if (_gnutls_cipher_type(params->cipher) == CIPHER_BLOCK) { - unsigned len; + int ret; + unsigned int tag_size = params->write.aead_tag_size; + const version_entry_st *ver = get_version(session); + uint8_t nonce[MAX_CIPHER_IV_SIZE]; + unsigned iv_size = 0; + ssize_t max, total; + uint8_t aad[5]; + giovec_t auth_iov[1]; + giovec_t iov[2]; - /* force an additional hash compression function evaluation to prevent timing - * attacks that distinguish between wrong-mac + correct pad, from wrong-mac + incorrect pad. - */ - if (pad_failed == 0 && pad > 0) { - len = _gnutls_mac_block_size(params->mac); - if (len > 0) { - /* This is really specific to the current hash functions. - * It should be removed once a protocol fix is in place. - */ - if ((pad + total) % len > len - 9 - && total % len <= len - 9) { - if (len < plaintext->size) - _gnutls_auth_cipher_add_auth - (¶ms->read. - cipher_state, - plaintext->data, len); - else - _gnutls_auth_cipher_add_auth - (¶ms->read. - cipher_state, - plaintext->data, - plaintext->size); - } - } - } + if (unlikely(ver == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + _gnutls_hard_log("ENC[%p]: cipher: %s, MAC: %s, Epoch: %u\n", + session, _gnutls_cipher_get_name(params->cipher), + _gnutls_mac_get_name(params->mac), + (unsigned int) params->epoch); + + iv_size = params->write.iv_size; + + if (params->cipher->id == GNUTLS_CIPHER_NULL) { + if (cipher_size < plain->size+1) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + memcpy(cipher_data, plain->data, plain->size); + return plain->size; + } + + if (unlikely(iv_size < 8)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + memset(nonce, 0, iv_size - 8); + _gnutls_write_uint64(params->write.sequence_number, &nonce[iv_size-8]); + memxor(nonce, params->write.iv, iv_size); + + max = MAX_RECORD_SEND_SIZE(session); + + /* make TLS 1.3 form of data */ + total = plain->size + 1 + pad_size; + + /* check whether padding would exceed max */ + if (total > max) { + if (unlikely(max < (ssize_t)plain->size+1)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + pad_size = max - plain->size - 1; + total = max; + } + + /* create authenticated data header */ + aad[0] = GNUTLS_APPLICATION_DATA; + aad[1] = 0x03; + aad[2] = 0x03; + _gnutls_write_uint16(total+tag_size, &aad[3]); + + auth_iov[0].iov_base = aad; + auth_iov[0].iov_len = sizeof(aad); + + iov[0].iov_base = plain->data; + iov[0].iov_len = plain->size; + + if (pad_size || (session->internals.flags & GNUTLS_SAFE_PADDING_CHECK)) { + uint8_t *pad = gnutls_calloc(1, 1+pad_size); + if (pad == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + pad[0] = type; + + iov[1].iov_base = pad; + iov[1].iov_len = 1+pad_size; + + ret = gnutls_aead_cipher_encryptv(¶ms->write.ctx.aead, + nonce, iv_size, + auth_iov, 1, + tag_size, + iov, 2, + cipher_data, &cipher_size); + gnutls_free(pad); + } else { + iov[1].iov_base = &type; + iov[1].iov_len = 1; + + ret = gnutls_aead_cipher_encryptv(¶ms->write.ctx.aead, + nonce, iv_size, + auth_iov, 1, + tag_size, + iov, 2, + cipher_data, &cipher_size); } + + if (ret < 0) + return gnutls_assert_val(ret); + + return cipher_size; } -/* Deciphers the ciphertext packet, and puts the result to compress_data, of compress_size. - * Returns the actual compressed packet size. + +/* Deciphers the ciphertext packet, and puts the result to plain. + * Returns the actual plaintext packet size. */ static int -ciphertext_to_compressed(gnutls_session_t session, - gnutls_datum_t * ciphertext, - gnutls_datum_t * compressed, - uint8_t type, record_parameters_st * params, - gnutls_uint64 * sequence) +decrypt_packet(gnutls_session_t session, + gnutls_datum_t * ciphertext, + gnutls_datum_t * plain, + content_type_t type, record_parameters_st * params, + uint64_t sequence) { uint8_t tag[MAX_HASH_SIZE]; - uint8_t nonce[MAX_CIPHER_BLOCK_SIZE]; + uint8_t nonce[MAX_CIPHER_IV_SIZE]; const uint8_t *tag_ptr = NULL; - unsigned int pad = 0, i; + unsigned int pad = 0; int length, length_to_decrypt; uint16_t blocksize; int ret; - unsigned int tmp_pad_failed = 0; - unsigned int pad_failed = 0; uint8_t preamble[MAX_PREAMBLE_SIZE]; unsigned int preamble_size = 0; const version_entry_st *ver = get_version(session); unsigned int tag_size = - _gnutls_auth_cipher_tag_len(¶ms->read.cipher_state); + _gnutls_auth_cipher_tag_len(¶ms->read.ctx.tls12); unsigned int explicit_iv = _gnutls_version_has_explicit_iv(ver); unsigned imp_iv_size, exp_iv_size; unsigned cipher_type = _gnutls_cipher_type(params->cipher); @@ -535,27 +558,27 @@ ciphertext_to_compressed(gnutls_session_t session, if (unlikely(ciphertext->size < tag_size)) return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); - preamble_size = make_preamble(UINT64DATA(*sequence), - type, ciphertext->size-tag_size, - ver, preamble); + preamble_size = _gnutls_make_preamble(sequence, + type, ciphertext->size-tag_size, + ver, preamble); ret = _gnutls_auth_cipher_add_auth(¶ms->read. - cipher_state, preamble, + ctx.tls12, preamble, preamble_size); if (unlikely(ret < 0)) return gnutls_assert_val(ret); ret = _gnutls_auth_cipher_add_auth(¶ms->read. - cipher_state, + ctx.tls12, ciphertext->data, ciphertext->size-tag_size); if (unlikely(ret < 0)) return gnutls_assert_val(ret); - ret = _gnutls_auth_cipher_tag(¶ms->read.cipher_state, tag, tag_size); + ret = _gnutls_auth_cipher_tag(¶ms->read.ctx.tls12, tag, tag_size); if (unlikely(ret < 0)) return gnutls_assert_val(ret); - + if (unlikely(gnutls_memcmp(tag, &ciphertext->data[ciphertext->size-tag_size], tag_size) != 0)) { /* HMAC was not the same. */ return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); @@ -570,23 +593,21 @@ ciphertext_to_compressed(gnutls_session_t session, * only stream ciphers. */ if (unlikely(_gnutls_auth_cipher_is_aead(¶ms->read. - cipher_state) == 0)) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + ctx.tls12) == 0)) + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); if (unlikely(ciphertext->size < (tag_size + exp_iv_size))) - return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); - if (params->cipher->xor_nonce == 0) { + if ((params->cipher->flags & GNUTLS_CIPHER_FLAG_XOR_NONCE) == 0) { /* Values in AEAD are pretty fixed in TLS 1.2 for 128-bit block */ - if (unlikely - (params->read.IV.data == NULL - || params->read.IV.size != 4)) + if (unlikely(params->read.iv_size != 4)) return - gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); - memcpy(nonce, params->read.IV.data, + memcpy(nonce, params->read.iv, imp_iv_size); memcpy(&nonce[imp_iv_size], @@ -595,13 +616,13 @@ ciphertext_to_compressed(gnutls_session_t session, ciphertext->data += exp_iv_size; ciphertext->size -= exp_iv_size; } else { /* XOR nonce with IV */ - if (unlikely(params->read.IV.size != 12 || imp_iv_size != 12 || exp_iv_size != 0)) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + if (unlikely(params->read.iv_size != 12 || imp_iv_size != 12 || exp_iv_size != 0)) + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); memset(nonce, 0, 4); - memcpy(&nonce[4], UINT64DATA(*sequence), 8); + _gnutls_write_uint64(sequence, &nonce[4]); - memxor(nonce, params->read.IV.data, 12); + memxor(nonce, params->read.iv, 12); } length = @@ -609,30 +630,30 @@ ciphertext_to_compressed(gnutls_session_t session, length_to_decrypt = ciphertext->size; - /* Pass the type, version, length and compressed through + /* Pass the type, version, length and plain through * MAC. */ preamble_size = - make_preamble(UINT64DATA(*sequence), type, - length, ver, preamble); + _gnutls_make_preamble(sequence, type, + length, ver, preamble); if (unlikely - ((unsigned) length_to_decrypt > compressed->size)) { + ((unsigned) length_to_decrypt > plain->size)) { _gnutls_audit_log(session, "Received %u bytes, while expecting less than %u\n", (unsigned int) length_to_decrypt, - (unsigned int) compressed->size); + (unsigned int) plain->size); return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); } - ret = _gnutls_aead_cipher_decrypt(¶ms->read.cipher_state.cipher, + ret = _gnutls_aead_cipher_decrypt(¶ms->read.ctx.tls12.cipher, nonce, exp_iv_size + imp_iv_size, preamble, preamble_size, tag_size, ciphertext->data, length_to_decrypt, - compressed->data, compressed->size); + plain->data, plain->size); if (unlikely(ret < 0)) return gnutls_assert_val(ret); @@ -647,43 +668,54 @@ ciphertext_to_compressed(gnutls_session_t session, length_to_decrypt = ciphertext->size; length = ciphertext->size - tag_size; - tag_ptr = compressed->data + length; + tag_ptr = plain->data + length; - /* Pass the type, version, length and compressed through + /* Pass the type, version, length and plain through * MAC. */ preamble_size = - make_preamble(UINT64DATA(*sequence), type, - length, ver, preamble); + _gnutls_make_preamble(sequence, type, + length, ver, preamble); ret = _gnutls_auth_cipher_add_auth(¶ms->read. - cipher_state, preamble, + ctx.tls12, preamble, preamble_size); if (unlikely(ret < 0)) return gnutls_assert_val(ret); if (unlikely - ((unsigned) length_to_decrypt > compressed->size)) { + ((unsigned) length_to_decrypt > plain->size)) { _gnutls_audit_log(session, "Received %u bytes, while expecting less than %u\n", (unsigned int) length_to_decrypt, - (unsigned int) compressed->size); + (unsigned int) plain->size); return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); } ret = _gnutls_auth_cipher_decrypt2(¶ms->read. - cipher_state, + ctx.tls12, ciphertext->data, length_to_decrypt, - compressed->data, - compressed->size); + plain->data, + plain->size); if (unlikely(ret < 0)) return gnutls_assert_val(ret); + ret = + _gnutls_auth_cipher_tag(¶ms->read.ctx.tls12, tag, + tag_size); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + + if (unlikely + (gnutls_memcmp(tag, tag_ptr, tag_size) != 0)) { + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); + } + break; case CIPHER_BLOCK: if (unlikely(ciphertext->size < blocksize)) @@ -702,10 +734,12 @@ ciphertext_to_compressed(gnutls_session_t session, /* ignore the IV in TLS 1.1+ */ if (explicit_iv) { - _gnutls_auth_cipher_setiv(¶ms->read. - cipher_state, + ret = _gnutls_auth_cipher_setiv(¶ms->read. + ctx.tls12, ciphertext->data, blocksize); + if (ret < 0) + return gnutls_assert_val(ret); memcpy(nonce, ciphertext->data, blocksize); ciphertext->size -= blocksize; @@ -721,114 +755,152 @@ ciphertext_to_compressed(gnutls_session_t session, * an API. (the length of plaintext is required to calculate * auth_data, but it is not available before decryption). */ - if (unlikely(ciphertext->size > compressed->size)) + if (unlikely(ciphertext->size > plain->size)) return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); if (etm == 0) { ret = - _gnutls_cipher_decrypt2(¶ms->read.cipher_state. + _gnutls_cipher_decrypt2(¶ms->read.ctx.tls12. cipher, ciphertext->data, ciphertext->size, - compressed->data, - compressed->size); + plain->data, + plain->size); if (unlikely(ret < 0)) return gnutls_assert_val(ret); - pad = compressed->data[ciphertext->size - 1]; /* pad */ - - /* Check the pading bytes (TLS 1.x). - * Note that we access all 256 bytes of ciphertext for padding check - * because there is a timing channel in that memory access (in certain CPUs). - */ -#ifdef ENABLE_SSL3 - if (ver->id != GNUTLS_SSL3) -#endif - for (i = 2; i <= MIN(256, ciphertext->size); i++) { - tmp_pad_failed |= - (compressed-> - data[ciphertext->size - i] != pad); - pad_failed |= - ((i <= (1 + pad)) & (tmp_pad_failed)); - } - - if (unlikely - (pad_failed != 0 - || (1 + pad > ((int) ciphertext->size - tag_size)))) { - /* We do not fail here. We check below for the - * the pad_failed. If zero means success. - */ - pad_failed = 1; - pad = 0; - } - - length = ciphertext->size - tag_size - pad - 1; - tag_ptr = &compressed->data[length]; - - /* Pass the type, version, length and compressed through - * MAC. - */ - preamble_size = - make_preamble(UINT64DATA(*sequence), type, - length, ver, preamble); - - ret = - _gnutls_auth_cipher_add_auth(¶ms->read. - cipher_state, preamble, - preamble_size); + ret = cbc_mac_verify(session, params, preamble, type, + sequence, plain->data, ciphertext->size, + tag_size); if (unlikely(ret < 0)) return gnutls_assert_val(ret); - ret = - _gnutls_auth_cipher_add_auth(¶ms->read. - cipher_state, - compressed->data, length); - if (unlikely(ret < 0)) - return gnutls_assert_val(ret); + length = ret; } else { /* EtM */ ret = - _gnutls_cipher_decrypt2(¶ms->read.cipher_state. + _gnutls_cipher_decrypt2(¶ms->read.ctx.tls12. cipher, ciphertext->data, ciphertext->size - tag_size, - compressed->data, - compressed->size); + plain->data, + plain->size); if (unlikely(ret < 0)) return gnutls_assert_val(ret); - pad = compressed->data[ciphertext->size - tag_size - 1]; /* pad */ + pad = plain->data[ciphertext->size - tag_size - 1]; /* pad */ length = ciphertext->size - tag_size - pad - 1; - + if (unlikely(length < 0)) return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); } break; default: + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); + } + + + return length; +} + +static int +decrypt_packet_tls13(gnutls_session_t session, + gnutls_datum_t *ciphertext, + gnutls_datum_t *plain, + content_type_t *type, record_parameters_st *params, + uint64_t sequence) +{ + uint8_t nonce[MAX_CIPHER_IV_SIZE]; + size_t length, length_to_decrypt; + int ret; + const version_entry_st *ver = get_version(session); + unsigned int tag_size = params->read.aead_tag_size; + unsigned iv_size; + unsigned j; + volatile unsigned length_set; + uint8_t aad[5]; + + if (unlikely(ver == NULL)) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + if (params->cipher->id == GNUTLS_CIPHER_NULL) { + if (plain->size < ciphertext->size) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + length = ciphertext->size; + memcpy(plain->data, ciphertext->data, length); + + return length; } - /* STREAM or BLOCK arrive here */ - if (etm == 0) { - ret = - _gnutls_auth_cipher_tag(¶ms->read.cipher_state, tag, - tag_size); - if (unlikely(ret < 0)) - return gnutls_assert_val(ret); + iv_size = _gnutls_cipher_get_iv_size(params->cipher); - /* Here there could be a timing leakage in CBC ciphersuites that - * could be exploited if the cost of a successful memcmp is high. - * A constant time memcmp would help there, but it is not easy to maintain - * against compiler optimizations. Currently we rely on the fact that - * a memcmp comparison is negligible over the crypto operations. - */ - if (unlikely - (gnutls_memcmp(tag, tag_ptr, tag_size) != 0 || pad_failed != 0)) { - /* HMAC was not the same. */ - dummy_wait(params, compressed, pad_failed, pad, - length + preamble_size); + /* The way AEAD ciphers are defined in RFC5246, it allows + * only stream ciphers. + */ + if (unlikely(ciphertext->size < tag_size)) + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); - return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); + if (unlikely(params->read.iv_size != iv_size || iv_size < 8)) + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); + + memset(nonce, 0, iv_size - 8); + _gnutls_write_uint64(sequence, &nonce[iv_size-8]); + memxor(nonce, params->read.iv, params->read.iv_size); + + length = + ciphertext->size - tag_size; + + length_to_decrypt = ciphertext->size; + + if (unlikely + ((unsigned) length_to_decrypt > plain->size)) { + _gnutls_audit_log(session, + "Received %u bytes, while expecting less than %u\n", + (unsigned int) length_to_decrypt, + (unsigned int) plain->size); + return + gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); + } + + aad[0] = GNUTLS_APPLICATION_DATA; + aad[1] = 0x03; + aad[2] = 0x03; + _gnutls_write_uint16(ciphertext->size, &aad[3]); + + ret = gnutls_aead_cipher_decrypt(¶ms->read.ctx.aead, + nonce, iv_size, + aad, sizeof(aad), + tag_size, + ciphertext->data, length_to_decrypt, + plain->data, &length); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + + /* 1 octet for content type */ + if (length > max_decrypted_size(session) + 1) { + _gnutls_audit_log + (session, "Received packet with illegal length: %u\n", + (unsigned int) length); + + return gnutls_assert_val(GNUTLS_E_RECORD_OVERFLOW); + } + + length_set = 0; + + /* now figure the actual data size. We intentionally iterate through all data, + * to avoid leaking the padding length due to timing differences in processing. + */ + for (j=length;j>0;j--) { + if (plain->data[j-1]!=0 && length_set == 0) { + *type = plain->data[j-1]; + length = j-1; + length_set = 1; + if (!(session->internals.flags & GNUTLS_SAFE_PADDING_CHECK)) + break; } } + if (!length_set) + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); + return length; } diff --git a/lib/cipher.h b/lib/cipher.h index a1dc80c4fd..43cdde22f4 100644 --- a/lib/cipher.h +++ b/lib/cipher.h @@ -16,10 +16,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_CIPHER_H +#define GNUTLS_LIB_CIPHER_H + int _gnutls_encrypt(gnutls_session_t session, const uint8_t * data, size_t data_size, size_t min_pad, @@ -28,5 +31,20 @@ int _gnutls_encrypt(gnutls_session_t session, int _gnutls_decrypt(gnutls_session_t session, gnutls_datum_t * ciphertext, gnutls_datum_t * output, - content_type_t type, record_parameters_st * params, - gnutls_uint64 * sequence); + content_type_t *type, record_parameters_st * params, + uint64_t sequence); + +#define MAX_PREAMBLE_SIZE 16 + +int +_gnutls_make_preamble(uint64_t uint64_data, uint8_t type, unsigned int length, + const version_entry_st * ver, uint8_t preamble[MAX_PREAMBLE_SIZE]); + +int cbc_mac_verify(gnutls_session_t session, record_parameters_st *params, + uint8_t preamble[MAX_PREAMBLE_SIZE], + content_type_t type, + uint64_t sequence, + const uint8_t *data, size_t data_size, + size_t tag_size); + +#endif /* GNUTLS_LIB_CIPHER_H */ diff --git a/lib/cipher_int.c b/lib/cipher_int.c index bc5ba38dec..b5308aa629 100644 --- a/lib/cipher_int.c +++ b/lib/cipher_int.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -55,16 +55,15 @@ int _gnutls_cipher_exists(gnutls_cipher_algorithm_t cipher) const gnutls_crypto_cipher_st *cc; int ret; + if (is_cipher_algo_forbidden(cipher)) + return 0; + /* All the other ciphers are disabled on the back-end library. * The NULL needs to be detected here as it is not a cipher * that is provided by the back-end. */ - if (cipher == GNUTLS_CIPHER_NULL) { - if (_gnutls_fips_mode_enabled() == 0) - return 1; - else - return 0; - } + if (cipher == GNUTLS_CIPHER_NULL) + return 1; cc = _gnutls_get_crypto_cipher(cipher); if (cc != NULL) @@ -102,6 +101,7 @@ _gnutls_cipher_init(cipher_hd_st *handle, const cipher_entry_st *e, handle->auth = cc->auth; handle->tag = cc->tag; handle->setiv = cc->setiv; + handle->getiv = cc->getiv; /* if cc->init() returns GNUTLS_E_NEED_FALLBACK we * use the default ciphers */ @@ -127,6 +127,7 @@ _gnutls_cipher_init(cipher_hd_st *handle, const cipher_entry_st *e, handle->auth = _gnutls_cipher_ops.auth; handle->tag = _gnutls_cipher_ops.tag; handle->setiv = _gnutls_cipher_ops.setiv; + handle->getiv = _gnutls_cipher_ops.getiv; /* otherwise use generic cipher interface */ @@ -217,6 +218,9 @@ int _gnutls_auth_cipher_init(auth_cipher_hd_st * handle, gnutls_assert(); goto cleanup; } +#ifdef ENABLE_GOST + handle->continuous_mac = !!(me->flags & GNUTLS_MAC_FLAG_CONTINUOUS_MAC); +#endif handle->tag_size = _gnutls_mac_get_algo_len(me); } else if (_gnutls_cipher_algo_is_aead(e)) { @@ -277,6 +281,8 @@ int _gnutls_auth_cipher_encrypt2_tag(auth_cipher_hd_st * handle, _gnutls_cipher_get_block_size(handle->cipher.e); unsigned l; + assert(ciphertext != NULL); + if (handle->is_mac) { /* cipher + mac */ if (handle->non_null == 0) { /* NULL cipher + MAC */ MAC(handle, text, textlen); @@ -419,14 +425,22 @@ int _gnutls_auth_cipher_tag(auth_cipher_hd_st * handle, void *tag, { if (handle->is_mac) { #ifdef ENABLE_SSL3 - int ret; - if (handle->ssl_hmac) { - ret = + int ret = _gnutls_mac_output_ssl3(&handle->mac.dig, tag); if (ret < 0) return gnutls_assert_val(ret); } else +#endif +#ifdef ENABLE_GOST + /* draft-smyshlyaev-tls12-gost-suites section 4.1.2 */ + if (handle->continuous_mac) { + mac_hd_st temp_mac; + int ret = _gnutls_mac_copy(&handle->mac.mac, &temp_mac); + if (ret < 0) + return gnutls_assert_val(ret); + _gnutls_mac_deinit(&temp_mac, tag); + } else #endif _gnutls_mac_output(&handle->mac.mac, tag); } else if (_gnutls_cipher_is_aead(&handle->cipher)) { diff --git a/lib/cipher_int.h b/lib/cipher_int.h index 26175dc3bd..b50a59c64a 100644 --- a/lib/cipher_int.h +++ b/lib/cipher_int.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_CIPHER_INT -#define GNUTLS_CIPHER_INT +#ifndef GNUTLS_LIB_CIPHER_INT_H +#define GNUTLS_LIB_CIPHER_INT_H #include #include "errors.h" @@ -50,6 +50,7 @@ typedef void (*cipher_deinit_func) (void *hd); typedef int (*cipher_auth_func) (void *hd, const void *data, size_t); typedef int (*cipher_setiv_func) (void *hd, const void *iv, size_t); +typedef int (*cipher_getiv_func) (void *hd, void *iv, size_t); typedef void (*cipher_tag_func) (void *hd, void *tag, size_t); @@ -63,6 +64,7 @@ typedef struct { cipher_auth_func auth; cipher_tag_func tag; cipher_setiv_func setiv; + cipher_getiv_func getiv; cipher_deinit_func deinit; } cipher_hd_st; @@ -76,6 +78,16 @@ inline static int _gnutls_cipher_setiv(const cipher_hd_st * handle, return handle->setiv(handle->handle, iv, ivlen); } +inline static int _gnutls_cipher_getiv(const cipher_hd_st * handle, + void *iv, size_t ivlen) +{ + if (unlikely(handle == NULL || handle->handle == NULL || + handle->getiv == NULL)) + return GNUTLS_E_INVALID_REQUEST; + + return handle->getiv(handle->handle, iv, ivlen); +} + inline static int _gnutls_cipher_encrypt2(const cipher_hd_st * handle, const void *text, size_t textlen, void *ciphertext, @@ -158,6 +170,9 @@ inline static void _gnutls_cipher_deinit(cipher_hd_st * handle) int _gnutls_cipher_exists(gnutls_cipher_algorithm_t cipher); +int _gnutls_cipher_get_iv(gnutls_cipher_hd_t handle, void *iv, + size_t ivlen); + #define _gnutls_cipher_is_aead(h) _gnutls_cipher_algo_is_aead((h)->e) /* returns the tag in AUTHENC ciphers */ @@ -195,6 +210,9 @@ typedef struct { unsigned int is_mac:1; #ifdef ENABLE_SSL3 unsigned int ssl_hmac:1; +#endif +#ifdef ENABLE_GOST + unsigned int continuous_mac:1; #endif unsigned int non_null:1; unsigned int etm:1; @@ -226,11 +244,11 @@ int _gnutls_auth_cipher_decrypt2(auth_cipher_hd_st * handle, int _gnutls_auth_cipher_tag(auth_cipher_hd_st * handle, void *tag, int tag_size); -inline static void _gnutls_auth_cipher_setiv(const auth_cipher_hd_st * +inline static int _gnutls_auth_cipher_setiv(const auth_cipher_hd_st * handle, const void *iv, size_t ivlen) { - _gnutls_cipher_setiv(&handle->cipher, iv, ivlen); + return _gnutls_cipher_setiv(&handle->cipher, iv, ivlen); } inline static size_t _gnutls_auth_cipher_tag_len(auth_cipher_hd_st * @@ -244,4 +262,4 @@ inline static size_t _gnutls_auth_cipher_tag_len(auth_cipher_hd_st * void _gnutls_auth_cipher_deinit(auth_cipher_hd_st * handle); -#endif /* GNUTLS_CIPHER_INT */ +#endif /* GNUTLS_LIB_CIPHER_INT_H */ diff --git a/lib/compress.c b/lib/compress.c index 8008bf60d8..f9e4bdbd70 100644 --- a/lib/compress.c +++ b/lib/compress.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2000-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,55 +16,14 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -/* This file contains the functions which convert the TLS plaintext - * packet to TLS compressed packet. - */ - #include "gnutls_int.h" -#include "compress.h" -#include "errors.h" -#include "constate.h" -#include -#include - -/* Compression Section */ -#define GNUTLS_COMPRESSION_ENTRY(name, id, wb, ml, cl) \ - { #name, name, id, wb, ml, cl} - - -#define MAX_COMP_METHODS 5 -const int _gnutls_comp_algorithms_size = MAX_COMP_METHODS; - -gnutls_compression_entry _gnutls_compression_algorithms[MAX_COMP_METHODS] = { - GNUTLS_COMPRESSION_ENTRY(GNUTLS_COMP_NULL, 0x00, 0, 0, 0), -#ifdef HAVE_LIBZ - /* draft-ietf-tls-compression-02 */ - GNUTLS_COMPRESSION_ENTRY(GNUTLS_COMP_DEFLATE, 0x01, 15, 8, 3), -#endif - {0, 0, 0, 0, 0, 0} -}; +#include "c-strcase.h" -static const gnutls_compression_method_t supported_compressions[] = { -#ifdef HAVE_LIBZ - GNUTLS_COMP_DEFLATE, -#endif - GNUTLS_COMP_NULL, - 0 -}; - -#define GNUTLS_COMPRESSION_LOOP(b) \ - const gnutls_compression_entry *p; \ - for(p = _gnutls_compression_algorithms; p->name != NULL; p++) { b ; } -#define GNUTLS_COMPRESSION_ALG_LOOP(a) \ - GNUTLS_COMPRESSION_LOOP( if(p->id == algorithm) { a; break; } ) -#define GNUTLS_COMPRESSION_ALG_LOOP_NUM(a) \ - GNUTLS_COMPRESSION_LOOP( if(p->num == num) { a; break; } ) - -/* Compression Functions */ +/* Compatibility compression functions */ /** * gnutls_compression_get_name: @@ -78,13 +37,10 @@ static const gnutls_compression_method_t supported_compressions[] = { const char *gnutls_compression_get_name(gnutls_compression_method_t algorithm) { - const char *ret = NULL; - - /* avoid prefix */ - GNUTLS_COMPRESSION_ALG_LOOP(ret = - p->name + sizeof("GNUTLS_COMP_") - 1); + if (algorithm == GNUTLS_COMP_NULL) + return "NULL"; - return ret; + return NULL; } /** @@ -98,342 +54,22 @@ const char *gnutls_compression_get_name(gnutls_compression_method_t **/ gnutls_compression_method_t gnutls_compression_get_id(const char *name) { - gnutls_compression_method_t ret = GNUTLS_COMP_UNKNOWN; + if (c_strcasecmp(name, "NULL") == 0) + return GNUTLS_COMP_NULL; - GNUTLS_COMPRESSION_LOOP(if - (strcasecmp - (p->name + sizeof("GNUTLS_COMP_") - 1, - name) == 0) ret = p->id); - - return ret; + return GNUTLS_COMP_UNKNOWN; } /** * gnutls_compression_list: * - * Get a list of compression methods. + * Get a list of compression methods. * * Returns: a zero-terminated list of #gnutls_compression_method_t * integers indicating the available compression methods. **/ const gnutls_compression_method_t *gnutls_compression_list(void) { - return supported_compressions; -} - -/* return the tls number of the specified algorithm */ -int _gnutls_compression_get_num(gnutls_compression_method_t algorithm) -{ - int ret = -1; - - /* avoid prefix */ - GNUTLS_COMPRESSION_ALG_LOOP(ret = p->num); - - return ret; -} - -#ifdef HAVE_LIBZ - -static int get_wbits(gnutls_compression_method_t algorithm) -{ - int ret = -1; - /* avoid prefix */ - GNUTLS_COMPRESSION_ALG_LOOP(ret = p->window_bits); - return ret; -} - -static int get_mem_level(gnutls_compression_method_t algorithm) -{ - int ret = -1; - /* avoid prefix */ - GNUTLS_COMPRESSION_ALG_LOOP(ret = p->mem_level); - return ret; -} - -static int get_comp_level(gnutls_compression_method_t algorithm) -{ - int ret = -1; - /* avoid prefix */ - GNUTLS_COMPRESSION_ALG_LOOP(ret = p->comp_level); - return ret; -} - -#endif - -/* returns the gnutls internal ID of the TLS compression - * method num - */ -gnutls_compression_method_t _gnutls_compression_get_id(int num) -{ - gnutls_compression_method_t ret = -1; - - /* avoid prefix */ - GNUTLS_COMPRESSION_ALG_LOOP_NUM(ret = p->id); - - return ret; -} - -int _gnutls_compression_is_ok(gnutls_compression_method_t algorithm) -{ - ssize_t ret = -1; - GNUTLS_COMPRESSION_ALG_LOOP(ret = p->id); - if (ret >= 0) - ret = 0; - else - ret = 1; - return ret; -} - - - -/* For compression */ - -#define MIN_PRIVATE_COMP_ALGO 0xEF - -/* returns the TLS numbers of the compression methods we support - */ -#define SUPPORTED_COMPRESSION_METHODS session->internals.priorities.compression.algorithms -int -_gnutls_supported_compression_methods(gnutls_session_t session, - uint8_t * comp, size_t comp_size) -{ - unsigned int i, j; - int tmp; - - if (comp_size < SUPPORTED_COMPRESSION_METHODS) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - - for (i = j = 0; i < SUPPORTED_COMPRESSION_METHODS; i++) { - if (IS_DTLS(session) && session->internals.priorities.compression.priority[i] != GNUTLS_COMP_NULL) { - gnutls_assert(); - continue; - } - - tmp = - _gnutls_compression_get_num(session-> - internals.priorities. - compression.priority[i]); - - /* remove private compression algorithms, if requested. - */ - if (tmp == -1 || (tmp >= MIN_PRIVATE_COMP_ALGO && - session->internals.enable_private == 0)) - { - gnutls_assert(); - continue; - } - - comp[j] = (uint8_t) tmp; - j++; - } - - if (j == 0) { - gnutls_assert(); - return GNUTLS_E_NO_COMPRESSION_ALGORITHMS; - } - return j; -} - - -/* The flag d is the direction (compress, decompress). Non zero is - * decompress. - */ -int _gnutls_comp_init(comp_hd_st * handle, - gnutls_compression_method_t method, int d) -{ - handle->algo = method; - handle->handle = NULL; - - switch (method) { - case GNUTLS_COMP_DEFLATE: -#ifdef HAVE_LIBZ - { - int window_bits, mem_level; - int comp_level; - z_stream *zhandle; - int err; - - window_bits = get_wbits(method); - mem_level = get_mem_level(method); - comp_level = get_comp_level(method); - - handle->handle = gnutls_malloc(sizeof(z_stream)); - if (handle->handle == NULL) - return - gnutls_assert_val - (GNUTLS_E_MEMORY_ERROR); - - zhandle = handle->handle; - - zhandle->zalloc = (alloc_func) 0; - zhandle->zfree = (free_func) 0; - zhandle->opaque = (voidpf) 0; - - if (d) - err = inflateInit2(zhandle, window_bits); - else { - err = deflateInit2(zhandle, - comp_level, Z_DEFLATED, - window_bits, mem_level, - Z_DEFAULT_STRATEGY); - } - if (err != Z_OK) { - gnutls_assert(); - gnutls_free(handle->handle); - return GNUTLS_E_COMPRESSION_FAILED; - } - } - break; -#endif - case GNUTLS_COMP_NULL: - case GNUTLS_COMP_UNKNOWN: - break; - default: - return GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM; - } - - return 0; -} - -/* The flag d is the direction (compress, decompress). Non zero is - * decompress. - */ -void _gnutls_comp_deinit(comp_hd_st * handle, int d) -{ - if (handle != NULL) { - switch (handle->algo) { -#ifdef HAVE_LIBZ - case GNUTLS_COMP_DEFLATE: - { - if (d) - inflateEnd(handle->handle); - else - deflateEnd(handle->handle); - break; - } -#endif - default: - break; - } - gnutls_free(handle->handle); - handle->handle = NULL; - } -} - -/* These functions are memory consuming - */ - -int -_gnutls_compress(comp_hd_st * handle, const uint8_t * plain, - size_t plain_size, uint8_t * compressed, - size_t max_comp_size, unsigned int stateless) -{ - int compressed_size = GNUTLS_E_COMPRESSION_FAILED; - - /* NULL compression is not handled here - */ - if (handle == NULL) { - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - - switch (handle->algo) { -#ifdef HAVE_LIBZ - case GNUTLS_COMP_DEFLATE: - { - z_stream *zhandle; - int err; - int type; - - if (stateless) { - type = Z_FULL_FLUSH; - } else - type = Z_SYNC_FLUSH; - - zhandle = handle->handle; - - zhandle->next_in = (Bytef *) plain; - zhandle->avail_in = plain_size; - zhandle->next_out = (Bytef *) compressed; - zhandle->avail_out = max_comp_size; - - err = deflate(zhandle, type); - if (err != Z_OK || zhandle->avail_in != 0) - return - gnutls_assert_val - (GNUTLS_E_COMPRESSION_FAILED); - - - compressed_size = - max_comp_size - zhandle->avail_out; - break; - } -#endif - default: - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } /* switch */ - -#ifdef COMPRESSION_DEBUG - _gnutls_debug_log("Compression ratio: %f\n", - (float) ((float) compressed_size / - (float) plain_size)); -#endif - - return compressed_size; -} - - - -int -_gnutls_decompress(comp_hd_st * handle, uint8_t * compressed, - size_t compressed_size, uint8_t * plain, - size_t max_plain_size) -{ - int plain_size = GNUTLS_E_DECOMPRESSION_FAILED; - - if (compressed_size > max_plain_size + EXTRA_COMP_SIZE) { - gnutls_assert(); - return GNUTLS_E_DECOMPRESSION_FAILED; - } - - /* NULL compression is not handled here - */ - - if (handle == NULL) { - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - - switch (handle->algo) { -#ifdef HAVE_LIBZ - case GNUTLS_COMP_DEFLATE: - { - z_stream *zhandle; - int err; - - zhandle = handle->handle; - - zhandle->next_in = (Bytef *) compressed; - zhandle->avail_in = compressed_size; - - zhandle->next_out = (Bytef *) plain; - zhandle->avail_out = max_plain_size; - err = inflate(zhandle, Z_SYNC_FLUSH); - - if (err != Z_OK) - return - gnutls_assert_val - (GNUTLS_E_DECOMPRESSION_FAILED); - - plain_size = max_plain_size - zhandle->avail_out; - break; - } -#endif - default: - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } /* switch */ - - return plain_size; + static const gnutls_compression_method_t list[2] = {GNUTLS_COMP_NULL, 0}; + return list; } diff --git a/lib/compress.h b/lib/compress.h deleted file mode 100644 index 691044113e..0000000000 --- a/lib/compress.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2000-2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ -#ifndef GNUTLS_COMPRESS_H -#define GNUTLS_COMPRESS_H - -/* Algorithm handling. */ -int _gnutls_supported_compression_methods(gnutls_session_t session, - uint8_t * comp, size_t max_comp); -int _gnutls_compression_is_ok(gnutls_compression_method_t algorithm); -int _gnutls_compression_get_num(gnutls_compression_method_t algorithm); -gnutls_compression_method_t _gnutls_compression_get_id(int num); - -#ifdef HAVE_LIBZ -#include -#endif - -#define GNUTLS_COMP_FAILED NULL - -typedef struct comp_hd_st { - void *handle; - gnutls_compression_method_t algo; -} comp_hd_st; - -int _gnutls_comp_init(comp_hd_st *, gnutls_compression_method_t, int d); -void _gnutls_comp_deinit(comp_hd_st * handle, int d); - -int _gnutls_decompress(comp_hd_st * handle, uint8_t * compressed, - size_t compressed_size, uint8_t * plain, - size_t max_plain_size); -int _gnutls_compress(comp_hd_st *, const uint8_t * plain, - size_t plain_size, uint8_t * compressed, - size_t max_comp_size, unsigned int stateless); - -struct gnutls_compression_entry { - const char *name; - gnutls_compression_method_t id; - /* the number reserved in TLS for the specific compression method */ - int num; - - /* used in zlib compressor */ - int window_bits; - int mem_level; - int comp_level; -}; -typedef struct gnutls_compression_entry gnutls_compression_entry; - -#endif diff --git a/lib/constate.c b/lib/constate.c index 81cbeff462..eb05fdd04c 100644 --- a/lib/constate.c +++ b/lib/constate.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2001-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -32,16 +33,20 @@ #include #include #include -#include +#include #include #include "dtls.h" - -static int -_gnutls_set_kx(gnutls_session_t session, gnutls_kx_algorithm_t algo); +#include "secrets.h" +#include "handshake.h" +#include "crypto-api.h" +#include "locks.h" static const char keyexp[] = "key expansion"; static const int keyexp_length = sizeof(keyexp) - 1; +static int +_tls13_init_record_state(gnutls_cipher_algorithm_t algo, record_state_st *state); + /* This function is to be called after handshake, when master_secret, * client_random and server_random have been initialized. * This function creates the keys and stores them into pending session. @@ -49,15 +54,13 @@ static const int keyexp_length = sizeof(keyexp) - 1; */ static int _gnutls_set_keys(gnutls_session_t session, record_parameters_st * params, - int hash_size, int IV_size, int key_size) + unsigned hash_size, unsigned IV_size, unsigned key_size) { - /* FIXME: This function is too long - */ uint8_t rnd[2 * GNUTLS_RANDOM_SIZE]; - uint8_t rrnd[2 * GNUTLS_RANDOM_SIZE]; int pos, ret; int block_size; - char buf[65]; + char buf[4 * MAX_HASH_SIZE + 4 * MAX_CIPHER_KEY_SIZE + + 4 * MAX_CIPHER_BLOCK_SIZE]; /* avoid using malloc */ uint8_t key_block[2 * MAX_HASH_SIZE + 2 * MAX_CIPHER_KEY_SIZE + 2 * MAX_CIPHER_BLOCK_SIZE]; @@ -80,12 +83,6 @@ _gnutls_set_keys(gnutls_session_t session, record_parameters_st * params, session->security_parameters.client_random, GNUTLS_RANDOM_SIZE); - memcpy(rrnd, session->security_parameters.client_random, - GNUTLS_RANDOM_SIZE); - memcpy(&rrnd[GNUTLS_RANDOM_SIZE], - session->security_parameters.server_random, - GNUTLS_RANDOM_SIZE); - #ifdef ENABLE_SSL3 if (get_num_version(session) == GNUTLS_SSL3) { /* SSL 3 */ ret = @@ -111,56 +108,52 @@ _gnutls_set_keys(gnutls_session_t session, record_parameters_st * params, pos = 0; if (hash_size > 0) { - - if (_gnutls_set_datum - (&client_write->mac_secret, &key_block[pos], - hash_size) < 0) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + assert(hash_size<=sizeof(client_write->mac_key)); + client_write->mac_key_size = hash_size; + memcpy(client_write->mac_key, &key_block[pos], hash_size); pos += hash_size; - if (_gnutls_set_datum - (&server_write->mac_secret, &key_block[pos], - hash_size) < 0) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + server_write->mac_key_size = hash_size; + memcpy(server_write->mac_key, &key_block[pos], hash_size); pos += hash_size; + + _gnutls_hard_log("INT: CLIENT MAC KEY [%d]: %s\n", + key_size, + _gnutls_bin2hex(client_write->mac_key, + hash_size, + buf, sizeof(buf), NULL)); + + _gnutls_hard_log("INT: SERVER MAC KEY [%d]: %s\n", + key_size, + _gnutls_bin2hex(server_write->mac_key, + hash_size, + buf, sizeof(buf), NULL)); } if (key_size > 0) { - uint8_t *client_write_key, *server_write_key; - int client_write_key_size, server_write_key_size; - - client_write_key = &key_block[pos]; - client_write_key_size = key_size; + assert(key_size <=sizeof(client_write->key)); + client_write->key_size = key_size; + memcpy(client_write->key, &key_block[pos], key_size); pos += key_size; - server_write_key = &key_block[pos]; - server_write_key_size = key_size; + server_write->key_size = key_size; + memcpy(server_write->key, &key_block[pos], key_size); pos += key_size; - if (_gnutls_set_datum - (&client_write->key, client_write_key, - client_write_key_size) < 0) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - _gnutls_hard_log("INT: CLIENT WRITE KEY [%d]: %s\n", - client_write_key_size, - _gnutls_bin2hex(client_write_key, - client_write_key_size, + key_size, + _gnutls_bin2hex(client_write->key, + key_size, buf, sizeof(buf), NULL)); - if (_gnutls_set_datum - (&server_write->key, server_write_key, - server_write_key_size) < 0) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - _gnutls_hard_log("INT: SERVER WRITE KEY [%d]: %s\n", - server_write_key_size, - _gnutls_bin2hex(server_write_key, - server_write_key_size, + key_size, + _gnutls_bin2hex(server_write->key, + key_size, buf, sizeof(buf), NULL)); } @@ -168,27 +161,362 @@ _gnutls_set_keys(gnutls_session_t session, record_parameters_st * params, /* IV generation in export and non export ciphers. */ if (IV_size > 0) { - if (_gnutls_set_datum - (&client_write->IV, &key_block[pos], IV_size) < 0) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + assert(IV_size <= sizeof(client_write->iv)); + + client_write->iv_size = IV_size; + memcpy(client_write->iv, &key_block[pos], IV_size); pos += IV_size; - if (_gnutls_set_datum - (&server_write->IV, &key_block[pos], IV_size) < 0) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + server_write->iv_size = IV_size; + memcpy(server_write->iv, &key_block[pos], IV_size); + + _gnutls_hard_log("INT: CLIENT WRITE IV [%d]: %s\n", + client_write->iv_size, + _gnutls_bin2hex(client_write->iv, + client_write->iv_size, + buf, sizeof(buf), NULL)); + + _gnutls_hard_log("INT: SERVER WRITE IV [%d]: %s\n", + server_write->iv_size, + _gnutls_bin2hex(server_write->iv, + server_write->iv_size, + buf, sizeof(buf), NULL)); + } + + return 0; +} + +static int +_tls13_update_keys(gnutls_session_t session, hs_stage_t stage, + record_parameters_st *params, + unsigned iv_size, unsigned key_size) +{ + uint8_t key_block[MAX_CIPHER_KEY_SIZE]; + uint8_t iv_block[MAX_CIPHER_IV_SIZE]; + char buf[65]; + record_state_st *upd_state; + record_parameters_st *prev = NULL; + int ret; + + /* generate new keys for direction needed and copy old from previous epoch */ + + if (stage == STAGE_UPD_OURS) { + upd_state = ¶ms->write; + + ret = _gnutls_epoch_get(session, EPOCH_READ_CURRENT, &prev); + if (ret < 0) + return gnutls_assert_val(ret); + assert(prev != NULL); + + params->read.sequence_number = prev->read.sequence_number; + + params->read.key_size = prev->read.key_size; + memcpy(params->read.key, prev->read.key, prev->read.key_size); + + _gnutls_hard_log("INT: READ KEY [%d]: %s\n", + params->read.key_size, + _gnutls_bin2hex(params->read.key, params->read.key_size, + buf, sizeof(buf), NULL)); + + params->read.iv_size = prev->read.iv_size; + memcpy(params->read.iv, prev->read.iv, prev->read.key_size); + _gnutls_hard_log("INT: READ IV [%d]: %s\n", + params->read.iv_size, + _gnutls_bin2hex(params->read.iv, params->read.iv_size, + buf, sizeof(buf), NULL)); + } else { + upd_state = ¶ms->read; + + ret = _gnutls_epoch_get(session, EPOCH_WRITE_CURRENT, &prev); + if (ret < 0) + return gnutls_assert_val(ret); + assert(prev != NULL); + + params->write.sequence_number = prev->write.sequence_number; + + params->write.key_size = prev->write.key_size; + memcpy(params->write.key, prev->write.key, prev->write.key_size); + + _gnutls_hard_log("INT: WRITE KEY [%d]: %s\n", + params->write.key_size, + _gnutls_bin2hex(params->write.key, params->write.key_size, + buf, sizeof(buf), NULL)); + + params->write.iv_size = prev->write.iv_size; + memcpy(params->write.iv, prev->write.iv, prev->write.iv_size); + + _gnutls_hard_log("INT: WRITE IV [%d]: %s\n", + params->write.iv_size, + _gnutls_bin2hex(params->write.iv, params->write.iv_size, + buf, sizeof(buf), NULL)); + } + + + if ((session->security_parameters.entity == GNUTLS_CLIENT && stage == STAGE_UPD_OURS) || + (session->security_parameters.entity == GNUTLS_SERVER && stage == STAGE_UPD_PEERS)) { + + /* client keys */ + ret = _tls13_expand_secret(session, APPLICATION_TRAFFIC_UPDATE, + sizeof(APPLICATION_TRAFFIC_UPDATE)-1, + NULL, 0, + session->key.proto.tls13.ap_ckey, + session->security_parameters.prf->output_size, + session->key.proto.tls13.ap_ckey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _tls13_expand_secret(session, "key", 3, NULL, 0, session->key.proto.tls13.ap_ckey, key_size, key_block); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _tls13_expand_secret(session, "iv", 2, NULL, 0, session->key.proto.tls13.ap_ckey, iv_size, iv_block); + if (ret < 0) + return gnutls_assert_val(ret); + } else { + ret = _tls13_expand_secret(session, APPLICATION_TRAFFIC_UPDATE, + sizeof(APPLICATION_TRAFFIC_UPDATE)-1, + NULL, 0, + session->key.proto.tls13.ap_skey, + session->security_parameters.prf->output_size, + session->key.proto.tls13.ap_skey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _tls13_expand_secret(session, "key", 3, NULL, 0, session->key.proto.tls13.ap_skey, key_size, key_block); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _tls13_expand_secret(session, "iv", 2, NULL, 0, session->key.proto.tls13.ap_skey, iv_size, iv_block); + if (ret < 0) + return gnutls_assert_val(ret); + } + + upd_state->mac_key_size = 0; + + assert(key_size <= sizeof(upd_state->key)); + memcpy(upd_state->key, key_block, key_size); + upd_state->key_size = key_size; + + _gnutls_hard_log("INT: NEW %s KEY [%d]: %s\n", + (upd_state == ¶ms->read)?"READ":"WRITE", + key_size, + _gnutls_bin2hex(key_block, key_size, + buf, sizeof(buf), NULL)); + + if (iv_size > 0) { + assert(iv_size <= sizeof(upd_state->iv)); + memcpy(upd_state->iv, iv_block, iv_size); + upd_state->iv_size = iv_size; + + _gnutls_hard_log("INT: NEW %s IV [%d]: %s\n", + (upd_state == ¶ms->read)?"READ":"WRITE", + iv_size, + _gnutls_bin2hex(iv_block, iv_size, + buf, sizeof(buf), NULL)); + } + + return 0; +} + +static int +_tls13_set_early_keys(gnutls_session_t session, + record_parameters_st * params, + unsigned iv_size, unsigned key_size) +{ + uint8_t key_block[MAX_CIPHER_KEY_SIZE]; + uint8_t iv_block[MAX_CIPHER_IV_SIZE]; + char buf[65]; + record_state_st *early_state; + int ret; + + if (session->security_parameters.entity == GNUTLS_CLIENT && + !(session->internals.hsk_flags & HSK_TLS13_TICKET_SENT)) { + return GNUTLS_E_INVALID_REQUEST; + } + + ret = _tls13_expand_secret(session, "key", 3, NULL, 0, session->key.proto.tls13.e_ckey, key_size, key_block); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _tls13_expand_secret(session, "iv", 2, NULL, 0, session->key.proto.tls13.e_ckey, iv_size, iv_block); + if (ret < 0) + return gnutls_assert_val(ret); + + if (session->security_parameters.entity == GNUTLS_CLIENT) { + early_state = ¶ms->write; + } else { + early_state = ¶ms->read; + } + + early_state->mac_key_size = 0; + + assert(key_size <= sizeof(early_state->key)); + memcpy(early_state->key, key_block, key_size); + early_state->key_size = key_size; + + _gnutls_hard_log("INT: EARLY KEY [%d]: %s\n", + key_size, + _gnutls_bin2hex(key_block, key_size, + buf, sizeof(buf), NULL)); + + if (iv_size > 0) { + assert(iv_size <= sizeof(early_state->iv)); + memcpy(early_state->iv, iv_block, iv_size); + early_state->iv_size = iv_size; + + _gnutls_hard_log("INT: EARLY IV [%d]: %s\n", + iv_size, + _gnutls_bin2hex(iv_block, iv_size, + buf, sizeof(buf), NULL)); + } + + return 0; +} + +static int +_tls13_set_keys(gnutls_session_t session, hs_stage_t stage, + record_parameters_st * params, + unsigned iv_size, unsigned key_size) +{ + uint8_t ckey_block[MAX_CIPHER_KEY_SIZE]; + uint8_t civ_block[MAX_CIPHER_IV_SIZE]; + uint8_t skey_block[MAX_CIPHER_KEY_SIZE]; + uint8_t siv_block[MAX_CIPHER_IV_SIZE]; + char buf[65]; + record_state_st *client_write, *server_write; + const char *label; + unsigned label_size, hsk_len; + const char *keylog_label; + void *ckey, *skey; + int ret; + + if (stage == STAGE_UPD_OURS || stage == STAGE_UPD_PEERS) + return _tls13_update_keys(session, stage, + params, iv_size, key_size); + + else if (stage == STAGE_EARLY) + return _tls13_set_early_keys(session, + params, iv_size, key_size); + + else if (stage == STAGE_HS) { + label = HANDSHAKE_CLIENT_TRAFFIC_LABEL; + label_size = sizeof(HANDSHAKE_CLIENT_TRAFFIC_LABEL)-1; + hsk_len = session->internals.handshake_hash_buffer.length; + keylog_label = "CLIENT_HANDSHAKE_TRAFFIC_SECRET"; + ckey = session->key.proto.tls13.hs_ckey; + } else { + label = APPLICATION_CLIENT_TRAFFIC_LABEL; + label_size = sizeof(APPLICATION_CLIENT_TRAFFIC_LABEL)-1; + hsk_len = session->internals.handshake_hash_buffer_server_finished_len; + keylog_label = "CLIENT_TRAFFIC_SECRET_0"; + ckey = session->key.proto.tls13.ap_ckey; + } + + ret = _tls13_derive_secret(session, label, label_size, + session->internals.handshake_hash_buffer.data, + hsk_len, + session->key.proto.tls13.temp_secret, + ckey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_call_keylog_func(session, keylog_label, + ckey, + session->security_parameters.prf->output_size); + if (ret < 0) + return gnutls_assert_val(ret); + + /* client keys */ + ret = _tls13_expand_secret(session, "key", 3, NULL, 0, ckey, key_size, ckey_block); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _tls13_expand_secret(session, "iv", 2, NULL, 0, ckey, iv_size, civ_block); + if (ret < 0) + return gnutls_assert_val(ret); + + /* server keys */ + if (stage == STAGE_HS) { + label = HANDSHAKE_SERVER_TRAFFIC_LABEL; + label_size = sizeof(HANDSHAKE_SERVER_TRAFFIC_LABEL)-1; + keylog_label = "SERVER_HANDSHAKE_TRAFFIC_SECRET"; + skey = session->key.proto.tls13.hs_skey; + } else { + label = APPLICATION_SERVER_TRAFFIC_LABEL; + label_size = sizeof(APPLICATION_SERVER_TRAFFIC_LABEL)-1; + keylog_label = "SERVER_TRAFFIC_SECRET_0"; + skey = session->key.proto.tls13.ap_skey; + } + + ret = _tls13_derive_secret(session, label, label_size, + session->internals.handshake_hash_buffer.data, + hsk_len, + session->key.proto.tls13.temp_secret, + skey); + + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_call_keylog_func(session, keylog_label, + skey, + session->security_parameters.prf->output_size); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _tls13_expand_secret(session, "key", 3, NULL, 0, skey, key_size, skey_block); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _tls13_expand_secret(session, "iv", 2, NULL, 0, skey, iv_size, siv_block); + if (ret < 0) + return gnutls_assert_val(ret); + + if (session->security_parameters.entity == GNUTLS_CLIENT) { + client_write = ¶ms->write; + server_write = ¶ms->read; + } else { + client_write = ¶ms->read; + server_write = ¶ms->write; + } + + client_write->mac_key_size = 0; + server_write->mac_key_size = 0; + + assert(key_size <= sizeof(client_write->key)); + memcpy(client_write->key, ckey_block, key_size); + client_write->key_size = key_size; + + _gnutls_hard_log("INT: CLIENT WRITE KEY [%d]: %s\n", + key_size, + _gnutls_bin2hex(ckey_block, key_size, + buf, sizeof(buf), NULL)); + + memcpy(server_write->key, skey_block, key_size); + server_write->key_size = key_size; + + _gnutls_hard_log("INT: SERVER WRITE KEY [%d]: %s\n", + key_size, + _gnutls_bin2hex(skey_block, key_size, + buf, sizeof(buf), NULL)); + + if (iv_size > 0) { + assert(iv_size <= sizeof(client_write->iv)); + memcpy(client_write->iv, civ_block, iv_size); + client_write->iv_size = iv_size; _gnutls_hard_log("INT: CLIENT WRITE IV [%d]: %s\n", - client_write->IV.size, - _gnutls_bin2hex(client_write->IV.data, - client_write->IV.size, + iv_size, + _gnutls_bin2hex(civ_block, iv_size, buf, sizeof(buf), NULL)); + memcpy(server_write->iv, siv_block, iv_size); + server_write->iv_size = iv_size; + _gnutls_hard_log("INT: SERVER WRITE IV [%d]: %s\n", - server_write->IV.size, - _gnutls_bin2hex(server_write->IV.data, - server_write->IV.size, + iv_size, + _gnutls_bin2hex(siv_block, iv_size, buf, sizeof(buf), NULL)); } @@ -201,16 +529,31 @@ _gnutls_init_record_state(record_parameters_st * params, record_state_st * state) { int ret; - gnutls_datum_t *iv = NULL; - - if (!_gnutls_version_has_explicit_iv(ver)) { - if (_gnutls_cipher_type(params->cipher) == CIPHER_BLOCK) - iv = &state->IV; + gnutls_datum_t *iv = NULL, _iv; + gnutls_datum_t key; + gnutls_datum_t mac; + + _iv.data = state->iv; + _iv.size = state->iv_size; + + key.data = state->key; + key.size = state->key_size; + + mac.data = state->mac_key; + mac.size = state->mac_key_size; + + if (_gnutls_cipher_type(params->cipher) == CIPHER_BLOCK) { + if (!_gnutls_version_has_explicit_iv(ver)) + iv = &_iv; + } else if (_gnutls_cipher_type(params->cipher) == CIPHER_STREAM) { + /* To handle GOST ciphersuites */ + if (_gnutls_cipher_get_implicit_iv_size(params->cipher)) + iv = &_iv; } - ret = _gnutls_auth_cipher_init(&state->cipher_state, - params->cipher, &state->key, iv, - params->mac, &state->mac_secret, + ret = _gnutls_auth_cipher_init(&state->ctx.tls12, + params->cipher, &key, iv, + params->mac, &mac, params->etm, #ifdef ENABLE_SSL3 (ver->id == GNUTLS_SSL3) ? 1 : 0, @@ -219,118 +562,93 @@ _gnutls_init_record_state(record_parameters_st * params, if (ret < 0 && params->cipher->id != GNUTLS_CIPHER_NULL) return gnutls_assert_val(ret); - ret = - _gnutls_comp_init(&state->compression_state, - params->compression_algorithm, - read /*1==decompress */ ); - - if (ret < 0) - return gnutls_assert_val(ret); - return 0; } int -_gnutls_set_cipher_suite(gnutls_session_t session, - const uint8_t suite[2]) +_gnutls_set_cipher_suite2(gnutls_session_t session, + const gnutls_cipher_suite_entry_st *cs) { const cipher_entry_st *cipher_algo; const mac_entry_st *mac_algo; record_parameters_st *params; - const gnutls_cipher_suite_entry_st *cs; int ret; + const version_entry_st *ver = get_version(session); ret = _gnutls_epoch_get(session, EPOCH_NEXT, ¶ms); if (ret < 0) return gnutls_assert_val(ret); - if (params->initialized - || params->cipher != NULL || params->mac != NULL) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - - cs = ciphersuite_to_entry(suite); - if (cs == NULL) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - cipher_algo = cipher_to_entry(cs->block_algorithm); mac_algo = mac_to_entry(cs->mac_algorithm); - if (_gnutls_cipher_is_ok(cipher_algo) == 0 - || _gnutls_mac_is_ok(mac_algo) == 0) - return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); + if (ver->tls13_sem && (session->internals.hsk_flags & HSK_HRR_SENT)) { + if (params->initialized && (params->cipher != cipher_algo || + params->mac != mac_algo || cs != session->security_parameters.cs)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); - if (_gnutls_cipher_priority(session, cipher_algo->id) < 0) - return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); + return 0; + } else { + if (params->initialized + || params->cipher != NULL || params->mac != NULL) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + } - if (_gnutls_mac_priority(session, mac_algo->id) < 0) + if (_gnutls_cipher_is_ok(cipher_algo) == 0 + || _gnutls_mac_is_ok(mac_algo) == 0) return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); if (_gnutls_version_has_selectable_prf(get_version(session))) { if (cs->prf == GNUTLS_MAC_UNKNOWN || _gnutls_mac_is_ok(mac_to_entry(cs->prf)) == 0) return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); - session->security_parameters.prf_mac = cs->prf; + session->security_parameters.prf = mac_to_entry(cs->prf); } else { - session->security_parameters.prf_mac = GNUTLS_MAC_MD5_SHA1; + session->security_parameters.prf = mac_to_entry(GNUTLS_MAC_MD5_SHA1); } - memcpy(session->security_parameters.cipher_suite, suite, 2); + session->security_parameters.cs = cs; params->cipher = cipher_algo; params->mac = mac_algo; return 0; } -int -_gnutls_set_compression(gnutls_session_t session, - gnutls_compression_method_t comp_algo) +/* Sets the next epoch to be a clone of the current one. + * The keys are not cloned, only the cipher and MAC. + */ +int _gnutls_epoch_dup(gnutls_session_t session, unsigned int epoch_rel) { - record_parameters_st *params; + record_parameters_st *prev; + record_parameters_st *next; int ret; - ret = _gnutls_epoch_get(session, EPOCH_NEXT, ¶ms); + ret = _gnutls_epoch_get(session, epoch_rel, &prev); if (ret < 0) return gnutls_assert_val(ret); - if (params->initialized - || params->compression_algorithm != GNUTLS_COMP_UNKNOWN) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + ret = _gnutls_epoch_get(session, EPOCH_NEXT, &next); + if (ret < 0) { + ret = _gnutls_epoch_setup_next(session, 0, &next); + if (ret < 0) + return gnutls_assert_val(ret); + } - if (_gnutls_compression_is_ok(comp_algo) != 0) - return - gnutls_assert_val - (GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM); + if (next->initialized + || next->cipher != NULL || next->mac != NULL) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - session->security_parameters.compression_method = comp_algo; - params->compression_algorithm = comp_algo; + next->cipher = prev->cipher; + next->mac = prev->mac; return 0; } -void -_gnutls_epoch_set_null_algos(gnutls_session_t session, - record_parameters_st * params) -{ - /* This is only called on startup. We are extra paranoid about this - because it may cause unencrypted application data to go out on - the wire. */ - if (params->initialized || params->epoch != 0) { - gnutls_assert(); - return; - } - - params->cipher = cipher_to_entry(GNUTLS_CIPHER_NULL); - params->mac = mac_to_entry(GNUTLS_MAC_NULL); - params->compression_algorithm = GNUTLS_COMP_NULL; - params->initialized = 1; -} - -int _gnutls_epoch_set_keys(gnutls_session_t session, uint16_t epoch) +int _gnutls_epoch_set_keys(gnutls_session_t session, uint16_t epoch, hs_stage_t stage) { int hash_size; int IV_size; int key_size; - gnutls_compression_method_t comp_algo; record_parameters_st *params; int ret; const version_entry_st *ver = get_version(session); @@ -348,46 +666,71 @@ int _gnutls_epoch_set_keys(gnutls_session_t session, uint16_t epoch) _gnutls_record_log ("REC[%p]: Initializing epoch #%u\n", session, params->epoch); - comp_algo = params->compression_algorithm; - - if (_gnutls_cipher_is_ok(params->cipher) == 0 - || _gnutls_mac_is_ok(params->mac) == 0) + if (_gnutls_cipher_is_ok(params->cipher) == 0 || + _gnutls_mac_is_ok(params->mac) == 0) return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); - if (_gnutls_cipher_priority(session, params->cipher->id) < 0) - return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); - - if (_gnutls_mac_priority(session, params->mac->id) < 0) - return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); - - if (_gnutls_compression_is_ok(comp_algo) != 0) - return - gnutls_assert_val - (GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM); - - if (!_gnutls_version_has_explicit_iv(ver) && - _gnutls_cipher_type(params->cipher) == CIPHER_BLOCK) { - IV_size = _gnutls_cipher_get_iv_size(params->cipher); - } else { + if (_gnutls_version_has_explicit_iv(ver) && + (_gnutls_cipher_type(params->cipher) != CIPHER_BLOCK)) { IV_size = _gnutls_cipher_get_implicit_iv_size(params->cipher); + } else { + IV_size = _gnutls_cipher_get_iv_size(params->cipher); } key_size = _gnutls_cipher_get_key_size(params->cipher); hash_size = _gnutls_mac_get_key_size(params->mac); params->etm = session->security_parameters.etm; - ret = _gnutls_set_keys - (session, params, hash_size, IV_size, key_size); - if (ret < 0) - return gnutls_assert_val(ret); + if (ver->tls13_sem) { + ret = _tls13_set_keys + (session, stage, params, IV_size, key_size); + if (ret < 0) + return gnutls_assert_val(ret); - ret = _gnutls_init_record_state(params, ver, 1, ¶ms->read); - if (ret < 0) - return gnutls_assert_val(ret); + if (stage != STAGE_EARLY || + session->security_parameters.entity == GNUTLS_SERVER) { + ret = _tls13_init_record_state(params->cipher->id, ¶ms->read); + if (ret < 0) + return gnutls_assert_val(ret); + } - ret = _gnutls_init_record_state(params, ver, 0, ¶ms->write); - if (ret < 0) - return gnutls_assert_val(ret); + if (stage != STAGE_EARLY || + session->security_parameters.entity == GNUTLS_CLIENT) { + ret = _tls13_init_record_state(params->cipher->id, ¶ms->write); + if (ret < 0) + return gnutls_assert_val(ret); + } + } else { + ret = _gnutls_set_keys + (session, params, hash_size, IV_size, key_size); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_init_record_state(params, ver, 1, ¶ms->read); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_init_record_state(params, ver, 0, ¶ms->write); + if (ret < 0) + return gnutls_assert_val(ret); + } + + /* The TLS1.3 limit of 256 additional bytes is also enforced under CBC + * ciphers to ensure we interoperate with gnutls 2.12.x which could add padding + * data exceeding the maximum. */ + if (ver->tls13_sem || _gnutls_cipher_type(params->cipher) == CIPHER_BLOCK) { + session->internals.max_recv_size = 256; + } else { + session->internals.max_recv_size = 0; + } + + if (!ver->tls13_sem) { + session->internals.max_recv_size += _gnutls_record_overhead(ver, params->cipher, params->mac, 1); + if (session->internals.allow_large_records != 0) + session->internals.max_recv_size += EXTRA_COMP_SIZE; + } + + session->internals.max_recv_size += session->security_parameters.max_record_recv_size + RECORD_HEADER_SIZE(session); _dtls_reset_window(params); @@ -398,31 +741,43 @@ int _gnutls_epoch_set_keys(gnutls_session_t session, uint16_t epoch) return 0; } - -#define CPY_COMMON dst->entity = src->entity; \ - dst->kx_algorithm = src->kx_algorithm; \ - memcpy( dst->cipher_suite, src->cipher_suite, 2); \ - memcpy( dst->master_secret, src->master_secret, GNUTLS_MASTER_SIZE); \ - memcpy( dst->client_random, src->client_random, GNUTLS_RANDOM_SIZE); \ - memcpy( dst->server_random, src->server_random, GNUTLS_RANDOM_SIZE); \ - memcpy( dst->session_id, src->session_id, GNUTLS_MAX_SESSION_ID_SIZE); \ +/* This copies the session values which apply to subsequent/resumed + * sessions. Under TLS 1.3, these values are items which are not + * negotiated on the subsequent session. */ +#define CPY_COMMON(tls13_sem) \ + if (!tls13_sem) { \ + dst->cs = src->cs; \ + memcpy(dst->master_secret, src->master_secret, GNUTLS_MASTER_SIZE); \ + memcpy(dst->client_random, src->client_random, GNUTLS_RANDOM_SIZE); \ + memcpy(dst->server_random, src->server_random, GNUTLS_RANDOM_SIZE); \ + dst->ext_master_secret = src->ext_master_secret; \ + dst->etm = src->etm; \ + dst->prf = src->prf; \ + dst->grp = src->grp; \ + dst->pversion = src->pversion; \ + } \ + memcpy(dst->session_id, src->session_id, GNUTLS_MAX_SESSION_ID_SIZE); \ dst->session_id_size = src->session_id_size; \ - dst->cert_type = src->cert_type; \ - dst->compression_method = src->compression_method; \ dst->timestamp = src->timestamp; \ - dst->ext_master_secret = src->ext_master_secret; \ - dst->etm = src->etm; \ - dst->max_record_recv_size = src->max_record_recv_size; \ - dst->max_record_send_size = src->max_record_send_size + dst->client_ctype = src->client_ctype; \ + dst->server_ctype = src->server_ctype; \ + dst->client_auth_type = src->client_auth_type; \ + dst->server_auth_type = src->server_auth_type -static void _gnutls_set_resumed_parameters(gnutls_session_t session) +void _gnutls_set_resumed_parameters(gnutls_session_t session) { security_parameters_st *src = &session->internals.resumed_security_parameters; security_parameters_st *dst = &session->security_parameters; + const version_entry_st *ver = get_version(session); + + CPY_COMMON(ver->tls13_sem); - CPY_COMMON; - dst->pversion = src->pversion; + if (!ver->tls13_sem && + !(session->internals.hsk_flags & HSK_RECORD_SIZE_LIMIT_NEGOTIATED)) { + dst->max_record_recv_size = src->max_record_recv_size; + dst->max_record_send_size = src->max_record_send_size; + } } /* Sets the current connection session to conform with the @@ -455,32 +810,23 @@ int _gnutls_read_connection_state_init(gnutls_session_t session) /* Update internals from CipherSuite selected. * If we are resuming just copy the connection session */ - if (session->internals.resumed == RESUME_FALSE) { - ret = _gnutls_set_kx(session, - _gnutls_cipher_suite_get_kx_algo - (session->security_parameters. - cipher_suite)); - if (ret < 0) - return ret; - } else if (session->security_parameters.entity == GNUTLS_CLIENT) + if (session->internals.resumed != RESUME_FALSE && + session->security_parameters.entity == GNUTLS_CLIENT) _gnutls_set_resumed_parameters(session); - ret = _gnutls_epoch_set_keys(session, epoch_next); + ret = _gnutls_epoch_set_keys(session, epoch_next, 0); if (ret < 0) return ret; _gnutls_handshake_log("HSK[%p]: Cipher Suite: %s\n", session, - _gnutls_cipher_suite_get_name - (session->security_parameters.cipher_suite)); + session->security_parameters.cs->name); session->security_parameters.epoch_read = epoch_next; return 0; } - - /* Initializes the write connection session * (write encrypted data) */ @@ -490,26 +836,26 @@ int _gnutls_write_connection_state_init(gnutls_session_t session) session->security_parameters.epoch_next; int ret; + /* reset max_record_send_size if it was negotiated in the + * previous handshake using the record_size_limit extension */ + if (!(session->internals.hsk_flags & HSK_RECORD_SIZE_LIMIT_NEGOTIATED) && + session->security_parameters.entity == GNUTLS_SERVER) + session->security_parameters.max_record_send_size = + session->security_parameters.max_user_record_send_size; + /* Update internals from CipherSuite selected. * If we are resuming just copy the connection session */ - if (session->internals.resumed == RESUME_FALSE) { - ret = _gnutls_set_kx(session, - _gnutls_cipher_suite_get_kx_algo - (session->security_parameters. - cipher_suite)); - if (ret < 0) - return ret; - } else if (session->security_parameters.entity == GNUTLS_SERVER) + if (session->internals.resumed != RESUME_FALSE && + session->security_parameters.entity == GNUTLS_SERVER) _gnutls_set_resumed_parameters(session); - ret = _gnutls_epoch_set_keys(session, epoch_next); + ret = _gnutls_epoch_set_keys(session, epoch_next, 0); if (ret < 0) return gnutls_assert_val(ret); _gnutls_handshake_log("HSK[%p]: Cipher Suite: %s\n", session, - _gnutls_cipher_suite_get_name - (session->security_parameters.cipher_suite)); + session->security_parameters.cs->name); _gnutls_handshake_log ("HSK[%p]: Initializing internal [write] cipher sessions\n", @@ -520,23 +866,6 @@ int _gnutls_write_connection_state_init(gnutls_session_t session) return 0; } -/* Sets the specified kx algorithm into pending session - */ -static int -_gnutls_set_kx(gnutls_session_t session, gnutls_kx_algorithm_t algo) -{ - - if (_gnutls_kx_is_ok(algo) == 0) { - session->security_parameters.kx_algorithm = algo; - } else - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - - if (_gnutls_kx_priority(session, algo) < 0) - return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); - - return 0; -} - static inline int epoch_resolve(gnutls_session_t session, unsigned int epoch_rel, uint16_t * epoch_out) @@ -589,53 +918,83 @@ _gnutls_epoch_get(gnutls_session_t session, unsigned int epoch_rel, record_parameters_st **params; int ret; + gnutls_mutex_lock(&session->internals.epoch_lock); + ret = epoch_resolve(session, epoch_rel, &epoch); - if (ret < 0) - return gnutls_assert_val(ret); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } params = epoch_get_slot(session, epoch); - if (params == NULL || *params == NULL) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (params == NULL || *params == NULL) { + ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + goto cleanup; + } - *params_out = *params; + if (params_out) + *params_out = *params; - return 0; + ret = 0; + +cleanup: + gnutls_mutex_unlock(&session->internals.epoch_lock); + return ret; } +/* Ensures that the next epoch is setup. When an epoch will null ciphers + * is to be setup, call with @null_epoch set to true. In that case + * the epoch is fully initialized after call. + */ int -_gnutls_epoch_alloc(gnutls_session_t session, uint16_t epoch, - record_parameters_st ** out) +_gnutls_epoch_setup_next(gnutls_session_t session, unsigned null_epoch, record_parameters_st **newp) { record_parameters_st **slot; - _gnutls_record_log("REC[%p]: Allocating epoch #%u\n", session, - epoch); - - slot = epoch_get_slot(session, epoch); + slot = epoch_get_slot(session, session->security_parameters.epoch_next); /* If slot out of range or not empty. */ if (slot == NULL) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - if (*slot != NULL) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (*slot != NULL) { /* already initialized */ + if (unlikely(null_epoch && !(*slot)->initialized)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + if (unlikely((*slot)->epoch != session->security_parameters.epoch_next)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + goto finish; + } + + _gnutls_record_log("REC[%p]: Allocating epoch #%u\n", session, + session->security_parameters.epoch_next); *slot = gnutls_calloc(1, sizeof(record_parameters_st)); if (*slot == NULL) return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - (*slot)->epoch = epoch; - (*slot)->cipher = NULL; - (*slot)->mac = NULL; - (*slot)->compression_algorithm = GNUTLS_COMP_UNKNOWN; + (*slot)->epoch = session->security_parameters.epoch_next; + + if (null_epoch) { + (*slot)->cipher = cipher_to_entry(GNUTLS_CIPHER_NULL); + (*slot)->mac = mac_to_entry(GNUTLS_MAC_NULL); + (*slot)->initialized = 1; + } else { + (*slot)->cipher = NULL; + (*slot)->mac = NULL; + } - if (IS_DTLS(session)) - _gnutls_write_uint16(epoch, - UINT64DATA((*slot)->write. - sequence_number)); + if (IS_DTLS(session)) { + uint64_t seq = (*slot)->write.sequence_number; + seq &= UINT64_C(0xffffffffffff); + seq |= ((uint64_t)session->security_parameters.epoch_next) << 48; + (*slot)->write.sequence_number = seq; + } - if (out != NULL) - *out = *slot; + finish: + if (newp != NULL) + *newp = *slot; return 0; } @@ -673,6 +1032,8 @@ void _gnutls_epoch_gc(gnutls_session_t session) _gnutls_record_log("REC[%p]: Start of epoch cleanup\n", session); + gnutls_mutex_lock(&session->internals.epoch_lock); + /* Free all dead cipher state */ for (i = 0; i < MAX_EPOCH_INDEX; i++) { if (session->record_parameters[i] != NULL) { @@ -702,28 +1063,34 @@ void _gnutls_epoch_gc(gnutls_session_t session) min_index = i; /* Pick up the slack in the epoch window. */ - for (i = 0, j = min_index; j < MAX_EPOCH_INDEX; i++, j++) - session->record_parameters[i] = - session->record_parameters[j]; + if (min_index != 0) { + for (i = 0, j = min_index; j < MAX_EPOCH_INDEX; i++, j++) { + session->record_parameters[i] = + session->record_parameters[j]; + session->record_parameters[j] = NULL; + } + } /* Set the new epoch_min */ if (session->record_parameters[0] != NULL) session->security_parameters.epoch_min = session->record_parameters[0]->epoch; + gnutls_mutex_unlock(&session->internals.epoch_lock); + _gnutls_record_log("REC[%p]: End of epoch cleanup\n", session); } -static inline void free_record_state(record_state_st * state, int d) +static inline void free_record_state(record_state_st * state) { - _gnutls_free_datum(&state->mac_secret); - _gnutls_free_datum(&state->IV); - _gnutls_free_datum(&state->key); - - _gnutls_auth_cipher_deinit(&state->cipher_state); - - if (state->compression_state.handle != NULL) - _gnutls_comp_deinit(&state->compression_state, d); + zeroize_temp_key(state->mac_key, state->mac_key_size); + zeroize_temp_key(state->iv, state->iv_size); + zeroize_temp_key(state->key, state->key_size); + + if (state->is_aead) + _gnutls_aead_cipher_deinit(&state->ctx.aead); + else + _gnutls_auth_cipher_deinit(&state->ctx.tls12); } void @@ -732,8 +1099,86 @@ _gnutls_epoch_free(gnutls_session_t session, record_parameters_st * params) _gnutls_record_log("REC[%p]: Epoch #%u freed\n", session, params->epoch); - free_record_state(¶ms->read, 1); - free_record_state(¶ms->write, 0); + free_record_state(¶ms->read); + free_record_state(¶ms->write); gnutls_free(params); } + +int _tls13_connection_state_init(gnutls_session_t session, hs_stage_t stage) +{ + const uint16_t epoch_next = + session->security_parameters.epoch_next; + int ret; + + ret = _gnutls_epoch_set_keys(session, epoch_next, stage); + if (ret < 0) + return ret; + + _gnutls_handshake_log("HSK[%p]: TLS 1.3 re-key with cipher suite: %s\n", + session, + session->security_parameters.cs->name); + + session->security_parameters.epoch_read = epoch_next; + session->security_parameters.epoch_write = epoch_next; + + return 0; +} + +int _tls13_read_connection_state_init(gnutls_session_t session, hs_stage_t stage) +{ + const uint16_t epoch_next = + session->security_parameters.epoch_next; + int ret; + + ret = _gnutls_epoch_set_keys(session, epoch_next, stage); + if (ret < 0) + return ret; + + _gnutls_handshake_log("HSK[%p]: TLS 1.3 set read key with cipher suite: %s\n", + session, + session->security_parameters.cs->name); + + session->security_parameters.epoch_read = epoch_next; + + return 0; +} + +int _tls13_write_connection_state_init(gnutls_session_t session, hs_stage_t stage) +{ + const uint16_t epoch_next = + session->security_parameters.epoch_next; + int ret; + + ret = _gnutls_epoch_set_keys(session, epoch_next, stage); + if (ret < 0) + return ret; + + _gnutls_handshake_log("HSK[%p]: TLS 1.3 set write key with cipher suite: %s\n", + session, + session->security_parameters.cs->name); + + session->security_parameters.epoch_write = epoch_next; + + return 0; +} + +static int +_tls13_init_record_state(gnutls_cipher_algorithm_t algo, record_state_st *state) +{ + int ret; + gnutls_datum_t key; + + key.data = state->key; + key.size = state->key_size; + + ret = _gnutls_aead_cipher_init(&state->ctx.aead, + algo, &key); + if (ret < 0) + return gnutls_assert_val(ret); + + state->aead_tag_size = gnutls_cipher_get_tag_size(algo); + state->is_aead = 1; + + return 0; +} diff --git a/lib/constate.h b/lib/constate.h index c62b72b9d0..bd5d8c0fc0 100644 --- a/lib/constate.h +++ b/lib/constate.h @@ -16,32 +16,39 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_CONSTATE_H -#define GNUTLS_CONSTATE_H +#ifndef GNUTLS_LIB_CONSTATE_H +#define GNUTLS_LIB_CONSTATE_H -int _gnutls_set_cipher_suite(gnutls_session_t session, - const uint8_t suite[2]); -int _gnutls_set_compression(gnutls_session_t session, - gnutls_compression_method_t comp_algo); -void _gnutls_epoch_set_null_algos(gnutls_session_t session, - record_parameters_st * params); -int _gnutls_epoch_set_keys(gnutls_session_t session, uint16_t epoch); +int _gnutls_set_cipher_suite2(gnutls_session_t session, + const gnutls_cipher_suite_entry_st *cs); + +int _gnutls_epoch_set_keys(gnutls_session_t session, uint16_t epoch, hs_stage_t stage); int _gnutls_connection_state_init(gnutls_session_t session); int _gnutls_read_connection_state_init(gnutls_session_t session); int _gnutls_write_connection_state_init(gnutls_session_t session); +#define _gnutls_epoch_bump(session) \ + (session)->security_parameters.epoch_next++ + +int _gnutls_epoch_dup(gnutls_session_t session, unsigned int epoch_rel); + int _gnutls_epoch_get(gnutls_session_t session, unsigned int epoch_rel, record_parameters_st ** params_out); -int _gnutls_epoch_alloc(gnutls_session_t session, uint16_t epoch, - record_parameters_st ** out); +int _gnutls_epoch_setup_next(gnutls_session_t session, unsigned null_epoch, record_parameters_st **newp); void _gnutls_epoch_gc(gnutls_session_t session); void _gnutls_epoch_free(gnutls_session_t session, record_parameters_st * state); +void _gnutls_set_resumed_parameters(gnutls_session_t session); + +int _tls13_connection_state_init(gnutls_session_t session, hs_stage_t stage); +int _tls13_read_connection_state_init(gnutls_session_t session, hs_stage_t stage); +int _tls13_write_connection_state_init(gnutls_session_t session, hs_stage_t stage); + static inline int _gnutls_epoch_is_valid(gnutls_session_t session, int epoch) { @@ -88,4 +95,4 @@ static inline int _gnutls_epoch_refcount_dec(gnutls_session_t session, return 0; } -#endif +#endif /* GNUTLS_LIB_CONSTATE_H */ diff --git a/lib/crypto-api.c b/lib/crypto-api.c index 6b3b065f08..45be64ed1f 100644 --- a/lib/crypto-api.c +++ b/lib/crypto-api.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -30,6 +30,8 @@ #include #include #include +#include "crypto-api.h" +#include "iov.h" typedef struct api_cipher_hd_st { cipher_hd_st ctx_enc; @@ -61,8 +63,11 @@ gnutls_cipher_init(gnutls_cipher_hd_t * handle, int ret; const cipher_entry_st* e; + if (is_cipher_algo_forbidden(cipher)) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); + e = cipher_to_entry(cipher); - if (e == NULL) + if (e == NULL || (e->flags & GNUTLS_CIPHER_FLAG_ONLY_AEAD)) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); *handle = gnutls_calloc(1, sizeof(api_cipher_hd_st)); @@ -134,9 +139,7 @@ gnutls_cipher_add_auth(gnutls_cipher_hd_t handle, const void *ptext, if (_gnutls_cipher_is_aead(&h->ctx_enc) == 0) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - _gnutls_cipher_auth(&h->ctx_enc, ptext, ptext_size); - - return 0; + return _gnutls_cipher_auth(&h->ctx_enc, ptext, ptext_size); } /** @@ -155,10 +158,42 @@ gnutls_cipher_set_iv(gnutls_cipher_hd_t handle, void *iv, size_t ivlen) { api_cipher_hd_st *h = handle; - _gnutls_cipher_setiv(&h->ctx_enc, iv, ivlen); + if (_gnutls_cipher_setiv(&h->ctx_enc, iv, ivlen) < 0) { + _gnutls_switch_lib_state(LIB_STATE_ERROR); + } if (_gnutls_cipher_type(h->ctx_enc.e) == CIPHER_BLOCK) - _gnutls_cipher_setiv(&h->ctx_dec, iv, ivlen); + if (_gnutls_cipher_setiv(&h->ctx_dec, iv, ivlen) < 0) { + _gnutls_switch_lib_state(LIB_STATE_ERROR); + } +} + +/*- + * _gnutls_cipher_get_iv: + * @handle: is a #gnutls_cipher_hd_t type + * @iv: the IV to set + * @ivlen: the length of the IV + * + * This function will retrieve the internally calculated IV value. It is + * intended to be used for modes like CFB. @iv must have @ivlen length + * at least. + * + * This is solely for validation purposes of our crypto + * implementation. For other purposes, the IV can be typically + * calculated from the initial IV value and the subsequent ciphertext + * values. As such, this function only works with the internally + * registered ciphers. + * + * Returns: The length of IV or a negative error code on error. + * + * Since: 3.6.8 + -*/ +int +_gnutls_cipher_get_iv(gnutls_cipher_hd_t handle, void *iv, size_t ivlen) +{ + api_cipher_hd_st *h = handle; + + return _gnutls_cipher_getiv(&h->ctx_enc, iv, ivlen); } /** @@ -299,6 +334,7 @@ void gnutls_cipher_deinit(gnutls_cipher_hd_t handle) /* HMAC */ + /** * gnutls_hmac_init: * @dig: is a #gnutls_hmac_hd_t type @@ -323,15 +359,9 @@ gnutls_hmac_init(gnutls_hmac_hd_t * dig, gnutls_mac_algorithm_t algorithm, const void *key, size_t keylen) { -#ifdef ENABLE_FIPS140 /* MD5 is only allowed internally for TLS */ - if (_gnutls_fips_mode_enabled() != 0 && - _gnutls_get_lib_state() != LIB_STATE_SELFTEST) { - - if (algorithm == GNUTLS_MAC_MD5) - return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); - } -#endif + if (is_mac_algo_forbidden(algorithm)) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); *dig = gnutls_malloc(sizeof(mac_hd_st)); if (*dig == NULL) { @@ -425,6 +455,23 @@ unsigned gnutls_hmac_get_len(gnutls_mac_algorithm_t algorithm) return _gnutls_mac_get_algo_len(mac_to_entry(algorithm)); } +/** + * gnutls_hmac_get_key_size: + * @algorithm: the mac algorithm to use + * + * This function will return the size of the key to be used with this + * algorithm. On the algorithms which may accept arbitrary key sizes, + * the returned size is the MAC key size used in the TLS protocol. + * + * Returns: The key size or zero on error. + * + * Since: 3.6.12 + **/ +unsigned gnutls_hmac_get_key_size(gnutls_mac_algorithm_t algorithm) +{ + return _gnutls_mac_get_key_size(mac_to_entry(algorithm)); +} + /** * gnutls_hmac_fast: * @algorithm: the hash algorithm to use @@ -435,7 +482,8 @@ unsigned gnutls_hmac_get_len(gnutls_mac_algorithm_t algorithm) * @digest: is the output value of the hash * * This convenience function will hash the given data and return output - * on a single call. + * on a single call. Note, this call will not work for MAC algorithms + * that require nonce (like UMAC or GMAC). * * Returns: Zero or a negative error code on error. * @@ -446,10 +494,45 @@ gnutls_hmac_fast(gnutls_mac_algorithm_t algorithm, const void *key, size_t keylen, const void *ptext, size_t ptext_len, void *digest) { + if (is_mac_algo_forbidden(algorithm)) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); + return _gnutls_mac_fast(algorithm, key, keylen, ptext, ptext_len, digest); } +/** + * gnutls_hmac_copy: + * @handle: is a #gnutls_hmac_hd_t type + * + * This function will create a copy of MAC context, containing all its current + * state. Copying contexts for MACs registered using + * gnutls_crypto_register_mac() is not supported and will always result in an + * error. + * + * Returns: new MAC context or NULL in case of an error. + * + * Since: 3.6.9 + */ +gnutls_hmac_hd_t gnutls_hmac_copy(gnutls_hmac_hd_t handle) +{ + gnutls_hmac_hd_t dig; + + dig = gnutls_malloc(sizeof(mac_hd_st)); + if (dig == NULL) { + gnutls_assert(); + return NULL; + } + + if (_gnutls_mac_copy((const mac_hd_st *) handle, (mac_hd_st *)dig) != GNUTLS_E_SUCCESS) { + gnutls_assert(); + gnutls_free(dig); + return NULL; + } + + return dig; +} + /* HASH */ /** @@ -470,15 +553,8 @@ int gnutls_hash_init(gnutls_hash_hd_t * dig, gnutls_digest_algorithm_t algorithm) { -#ifdef ENABLE_FIPS140 - /* MD5 is only allowed internally for TLS */ - if (_gnutls_fips_mode_enabled() != 0 && - _gnutls_get_lib_state() != LIB_STATE_SELFTEST) { - - if (algorithm == GNUTLS_DIG_MD5) - return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); - } -#endif + if (is_mac_algo_forbidden(algorithm)) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); *dig = gnutls_malloc(sizeof(digest_hd_st)); if (*dig == NULL) { @@ -573,9 +649,44 @@ int gnutls_hash_fast(gnutls_digest_algorithm_t algorithm, const void *ptext, size_t ptext_len, void *digest) { + if (is_mac_algo_forbidden(algorithm)) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); + return _gnutls_hash_fast(algorithm, ptext, ptext_len, digest); } +/** + * gnutls_hash_copy: + * @handle: is a #gnutls_hash_hd_t type + * + * This function will create a copy of Message Digest context, containing all + * its current state. Copying contexts for Message Digests registered using + * gnutls_crypto_register_digest() is not supported and will always result in + * an error. + * + * Returns: new Message Digest context or NULL in case of an error. + * + * Since: 3.6.9 + */ +gnutls_hash_hd_t gnutls_hash_copy(gnutls_hash_hd_t handle) +{ + gnutls_hash_hd_t dig; + + dig = gnutls_malloc(sizeof(digest_hd_st)); + if (dig == NULL) { + gnutls_assert(); + return NULL; + } + + if (_gnutls_hash_copy((const digest_hd_st *) handle, (digest_hd_st *)dig) != GNUTLS_E_SUCCESS) { + gnutls_assert(); + gnutls_free(dig); + return NULL; + } + + return dig; +} + /** * gnutls_key_generate: * @key: is a pointer to a #gnutls_datum_t which will contain a newly @@ -622,9 +733,6 @@ int gnutls_key_generate(gnutls_datum_t * key, unsigned int key_size) } /* AEAD API */ -typedef struct api_aead_cipher_hd_st { - cipher_hd_st ctx_enc; -} api_aead_cipher_hd_st; /** * gnutls_aead_cipher_init: @@ -641,12 +749,15 @@ typedef struct api_aead_cipher_hd_st { * * Since: 3.4.0 **/ -int gnutls_aead_cipher_init(gnutls_aead_cipher_hd_t * handle, +int gnutls_aead_cipher_init(gnutls_aead_cipher_hd_t *handle, gnutls_cipher_algorithm_t cipher, - const gnutls_datum_t * key) + const gnutls_datum_t *key) { api_aead_cipher_hd_st *h; - const cipher_entry_st* e; + const cipher_entry_st *e; + + if (is_cipher_algo_forbidden(cipher)) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); e = cipher_to_entry(cipher); if (e == NULL || e->type != CIPHER_AEAD) @@ -660,9 +771,7 @@ int gnutls_aead_cipher_init(gnutls_aead_cipher_hd_t * handle, h = *handle; - return - _gnutls_cipher_init(&h->ctx_enc, e, key, - NULL, 1); + return _gnutls_aead_cipher_init(h, cipher, key); } /** @@ -670,20 +779,22 @@ int gnutls_aead_cipher_init(gnutls_aead_cipher_hd_t * handle, * @handle: is a #gnutls_aead_cipher_hd_t type. * @nonce: the nonce to set * @nonce_len: The length of the nonce - * @auth: the data to be authenticated + * @auth: additional data to be authenticated * @auth_len: The length of the data * @tag_size: The size of the tag to use (use zero for the default) - * @ctext: the data to decrypt + * @ctext: the data to decrypt (including the authentication tag) * @ctext_len: the length of data to decrypt (includes tag size) * @ptext: the decrypted data * @ptext_len: the length of decrypted data (initially must hold the maximum available size) * * This function will decrypt the given data using the algorithm - * specified by the context. This function must be provided the whole - * data to be decrypted, including the tag, and will fail if the tag - * verification fails. + * specified by the context. This function must be provided the complete + * data to be decrypted, including the authentication tag. On several + * AEAD ciphers, the authentication tag is appended to the ciphertext, + * though this is not a general rule. This function will fail if + * the tag verification fails. * - * Returns: Zero or a negative error code on error. + * Returns: Zero or a negative error code on verification failure or other error. * * Since: 3.4.0 **/ @@ -727,12 +838,12 @@ gnutls_aead_cipher_decrypt(gnutls_aead_cipher_hd_t handle, * @handle: is a #gnutls_aead_cipher_hd_t type. * @nonce: the nonce to set * @nonce_len: The length of the nonce - * @auth: the data to be authenticated + * @auth: additional data to be authenticated * @auth_len: The length of the data * @tag_size: The size of the tag to use (use zero for the default) * @ptext: the data to encrypt * @ptext_len: The length of data to encrypt - * @ctext: the encrypted data + * @ctext: the encrypted data including authentication tag * @ctext_len: the length of encrypted data (initially must hold the maximum available size, including space for tag) * * This function will encrypt the given data using the algorithm @@ -777,6 +888,505 @@ gnutls_aead_cipher_encrypt(gnutls_aead_cipher_hd_t handle, return 0; } +struct iov_store_st { + void *data; + size_t size; + unsigned allocated; +}; + +static void iov_store_free(struct iov_store_st *s) +{ + if (s->allocated) { + gnutls_free(s->data); + s->allocated = 0; + } +} + +static int iov_store_grow(struct iov_store_st *s, size_t length) +{ + if (s->allocated || s->data == NULL) { + s->size += length; + s->data = gnutls_realloc(s->data, s->size); + if (s->data == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + s->allocated = 1; + } else { + void *data = s->data; + size_t size = s->size + length; + s->data = gnutls_malloc(size); + memcpy(s->data, data, s->size); + s->size += length; + } + return 0; +} + +static int +copy_from_iov(struct iov_store_st *dst, const giovec_t *iov, int iovcnt) +{ + memset(dst, 0, sizeof(*dst)); + if (iovcnt == 0) { + return 0; + } else if (iovcnt == 1) { + dst->data = iov[0].iov_base; + dst->size = iov[0].iov_len; + /* implies: dst->allocated = 0; */ + return 0; + } else { + int i; + uint8_t *p; + + dst->size = 0; + for (i=0;isize += iov[i].iov_len; + dst->data = gnutls_malloc(dst->size); + if (dst->data == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + p = dst->data; + for (i=0;iallocated = 1; + return 0; + } +} + +static int +copy_to_iov(struct iov_store_st *src, size_t size, + const giovec_t *iov, int iovcnt) +{ + size_t offset = 0; + int i; + + if (unlikely(src->size < size)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + for (i = 0; i < iovcnt && size > 0; i++) { + size_t to_copy = MIN(size, iov[i].iov_len); + memcpy(iov[i].iov_base, (uint8_t *) src->data + offset, to_copy); + offset += to_copy; + size -= to_copy; + } + if (size > 0) + return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER); + return 0; +} + + +/** + * gnutls_aead_cipher_encryptv: + * @handle: is a #gnutls_aead_cipher_hd_t type. + * @nonce: the nonce to set + * @nonce_len: The length of the nonce + * @auth_iov: additional data to be authenticated + * @auth_iovcnt: The number of buffers in @auth_iov + * @tag_size: The size of the tag to use (use zero for the default) + * @iov: the data to be encrypted + * @iovcnt: The number of buffers in @iov + * @ctext: the encrypted data including authentication tag + * @ctext_len: the length of encrypted data (initially must hold the maximum available size, including space for tag) + * + * This function will encrypt the provided data buffers using the algorithm + * specified by the context. The output data will contain the + * authentication tag. + * + * Returns: Zero or a negative error code on error. + * + * Since: 3.6.3 + **/ +int +gnutls_aead_cipher_encryptv(gnutls_aead_cipher_hd_t handle, + const void *nonce, size_t nonce_len, + const giovec_t *auth_iov, int auth_iovcnt, + size_t tag_size, + const giovec_t *iov, int iovcnt, + void *ctext, size_t *ctext_len) +{ + api_aead_cipher_hd_st *h = handle; + ssize_t ret; + uint8_t *dst; + size_t dst_size, total = 0; + uint8_t *p; + size_t len; + size_t blocksize = handle->ctx_enc.e->blocksize; + struct iov_iter_st iter; + + /* Limitation: this function provides an optimization under the internally registered + * AEAD ciphers. When an AEAD cipher is used registered with gnutls_crypto_register_aead_cipher(), + * then this becomes a convenience function as it missed the lower-level primitives + * necessary for piecemeal encryption. */ + + if (tag_size == 0) + tag_size = _gnutls_cipher_get_tag_size(h->ctx_enc.e); + else if (tag_size > (unsigned)_gnutls_cipher_get_tag_size(h->ctx_enc.e)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if ((handle->ctx_enc.e->flags & GNUTLS_CIPHER_FLAG_ONLY_AEAD) || handle->ctx_enc.encrypt == NULL) { + /* ciphertext cannot be produced in a piecemeal approach */ + struct iov_store_st auth; + struct iov_store_st ptext; + + ret = copy_from_iov(&auth, auth_iov, auth_iovcnt); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = copy_from_iov(&ptext, iov, iovcnt); + if (ret < 0) { + iov_store_free(&auth); + return gnutls_assert_val(ret); + } + + ret = gnutls_aead_cipher_encrypt(handle, nonce, nonce_len, + auth.data, auth.size, + tag_size, + ptext.data, ptext.size, + ctext, ctext_len); + iov_store_free(&auth); + iov_store_free(&ptext); + + return ret; + } + + ret = _gnutls_cipher_setiv(&handle->ctx_enc, nonce, nonce_len); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + + ret = _gnutls_iov_iter_init(&iter, auth_iov, auth_iovcnt, blocksize); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + while (1) { + ret = _gnutls_iov_iter_next(&iter, &p); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + if (ret == 0) + break; + ret = _gnutls_cipher_auth(&handle->ctx_enc, p, ret); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + } + + dst = ctext; + dst_size = *ctext_len; + + ret = _gnutls_iov_iter_init(&iter, iov, iovcnt, blocksize); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + while (1) { + ret = _gnutls_iov_iter_next(&iter, &p); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + if (ret == 0) + break; + len = ret; + ret = _gnutls_cipher_encrypt2(&handle->ctx_enc, + p, len, + dst, dst_size); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + DECR_LEN(dst_size, len); + dst += len; + total += len; + } + + if (dst_size < tag_size) + return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER); + + _gnutls_cipher_tag(&handle->ctx_enc, dst, tag_size); + + total += tag_size; + *ctext_len = total; + + return 0; +} + +/** + * gnutls_aead_cipher_encryptv2: + * @handle: is a #gnutls_aead_cipher_hd_t type. + * @nonce: the nonce to set + * @nonce_len: The length of the nonce + * @auth_iov: additional data to be authenticated + * @auth_iovcnt: The number of buffers in @auth_iov + * @iov: the data to be encrypted + * @iovcnt: The number of buffers in @iov + * @tag: The authentication tag + * @tag_size: The size of the tag to use (use zero for the default) + * + * This is similar to gnutls_aead_cipher_encrypt(), but it performs + * in-place encryption on the provided data buffers. + * + * Returns: Zero or a negative error code on error. + * + * Since: 3.6.10 + **/ +int +gnutls_aead_cipher_encryptv2(gnutls_aead_cipher_hd_t handle, + const void *nonce, size_t nonce_len, + const giovec_t *auth_iov, int auth_iovcnt, + const giovec_t *iov, int iovcnt, + void *tag, size_t *tag_size) +{ + api_aead_cipher_hd_st *h = handle; + ssize_t ret; + uint8_t *p; + size_t len; + ssize_t blocksize = handle->ctx_enc.e->blocksize; + struct iov_iter_st iter; + size_t _tag_size; + + if (tag_size == NULL || *tag_size == 0) + _tag_size = _gnutls_cipher_get_tag_size(h->ctx_enc.e); + else + _tag_size = *tag_size; + + if (_tag_size > (unsigned)_gnutls_cipher_get_tag_size(h->ctx_enc.e)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + /* Limitation: this function provides an optimization under the internally registered + * AEAD ciphers. When an AEAD cipher is used registered with gnutls_crypto_register_aead_cipher(), + * then this becomes a convenience function as it missed the lower-level primitives + * necessary for piecemeal encryption. */ + if ((handle->ctx_enc.e->flags & GNUTLS_CIPHER_FLAG_ONLY_AEAD) || handle->ctx_enc.encrypt == NULL) { + /* ciphertext cannot be produced in a piecemeal approach */ + struct iov_store_st auth; + struct iov_store_st ptext; + size_t ptext_size; + + ret = copy_from_iov(&auth, auth_iov, auth_iovcnt); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = copy_from_iov(&ptext, iov, iovcnt); + if (ret < 0) { + gnutls_assert(); + goto fallback_fail; + } + + ptext_size = ptext.size; + + /* append space for tag */ + ret = iov_store_grow(&ptext, _tag_size); + if (ret < 0) { + gnutls_assert(); + goto fallback_fail; + } + + ret = gnutls_aead_cipher_encrypt(handle, nonce, nonce_len, + auth.data, auth.size, + _tag_size, + ptext.data, ptext_size, + ptext.data, &ptext.size); + if (ret < 0) { + gnutls_assert(); + goto fallback_fail; + } + + ret = copy_to_iov(&ptext, ptext_size, iov, iovcnt); + if (ret < 0) { + gnutls_assert(); + goto fallback_fail; + } + + if (tag != NULL) + memcpy(tag, + (uint8_t *) ptext.data + ptext_size, + _tag_size); + if (tag_size != NULL) + *tag_size = _tag_size; + + fallback_fail: + iov_store_free(&auth); + iov_store_free(&ptext); + + return ret; + } + + ret = _gnutls_cipher_setiv(&handle->ctx_enc, nonce, nonce_len); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + + ret = _gnutls_iov_iter_init(&iter, auth_iov, auth_iovcnt, blocksize); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + while (1) { + ret = _gnutls_iov_iter_next(&iter, &p); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + if (ret == 0) + break; + ret = _gnutls_cipher_auth(&handle->ctx_enc, p, ret); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + } + + ret = _gnutls_iov_iter_init(&iter, iov, iovcnt, blocksize); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + while (1) { + ret = _gnutls_iov_iter_next(&iter, &p); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + if (ret == 0) + break; + + len = ret; + ret = _gnutls_cipher_encrypt2(&handle->ctx_enc, p, len, p, len); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + + ret = _gnutls_iov_iter_sync(&iter, p, len); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + } + + if (tag != NULL) + _gnutls_cipher_tag(&handle->ctx_enc, tag, _tag_size); + if (tag_size != NULL) + *tag_size = _tag_size; + + return 0; +} + +/** + * gnutls_aead_cipher_decryptv2: + * @handle: is a #gnutls_aead_cipher_hd_t type. + * @nonce: the nonce to set + * @nonce_len: The length of the nonce + * @auth_iov: additional data to be authenticated + * @auth_iovcnt: The number of buffers in @auth_iov + * @iov: the data to decrypt + * @iovcnt: The number of buffers in @iov + * @tag: The authentication tag + * @tag_size: The size of the tag to use (use zero for the default) + * + * This is similar to gnutls_aead_cipher_decrypt(), but it performs + * in-place encryption on the provided data buffers. + * + * Returns: Zero or a negative error code on error. + * + * Since: 3.6.10 + **/ +int +gnutls_aead_cipher_decryptv2(gnutls_aead_cipher_hd_t handle, + const void *nonce, size_t nonce_len, + const giovec_t *auth_iov, int auth_iovcnt, + const giovec_t *iov, int iovcnt, + void *tag, size_t tag_size) +{ + api_aead_cipher_hd_st *h = handle; + ssize_t ret; + uint8_t *p; + size_t len; + ssize_t blocksize = handle->ctx_enc.e->blocksize; + struct iov_iter_st iter; + uint8_t _tag[MAX_HASH_SIZE]; + + if (tag_size == 0) + tag_size = _gnutls_cipher_get_tag_size(h->ctx_enc.e); + else if (tag_size > (unsigned)_gnutls_cipher_get_tag_size(h->ctx_enc.e)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + /* Limitation: this function provides an optimization under the internally registered + * AEAD ciphers. When an AEAD cipher is used registered with gnutls_crypto_register_aead_cipher(), + * then this becomes a convenience function as it missed the lower-level primitives + * necessary for piecemeal encryption. */ + if ((handle->ctx_enc.e->flags & GNUTLS_CIPHER_FLAG_ONLY_AEAD) || handle->ctx_enc.encrypt == NULL) { + /* ciphertext cannot be produced in a piecemeal approach */ + struct iov_store_st auth; + struct iov_store_st ctext; + size_t ctext_size; + + ret = copy_from_iov(&auth, auth_iov, auth_iovcnt); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = copy_from_iov(&ctext, iov, iovcnt); + if (ret < 0) { + gnutls_assert(); + goto fallback_fail; + } + + ctext_size = ctext.size; + + /* append tag */ + ret = iov_store_grow(&ctext, tag_size); + if (ret < 0) { + gnutls_assert(); + goto fallback_fail; + } + memcpy((uint8_t *) ctext.data + ctext_size, tag, tag_size); + + ret = gnutls_aead_cipher_decrypt(handle, nonce, nonce_len, + auth.data, auth.size, + tag_size, + ctext.data, ctext.size, + ctext.data, &ctext_size); + if (ret < 0) { + gnutls_assert(); + goto fallback_fail; + } + + ret = copy_to_iov(&ctext, ctext_size, iov, iovcnt); + if (ret < 0) { + gnutls_assert(); + goto fallback_fail; + } + + fallback_fail: + iov_store_free(&auth); + iov_store_free(&ctext); + + return ret; + } + + ret = _gnutls_cipher_setiv(&handle->ctx_enc, nonce, nonce_len); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + + ret = _gnutls_iov_iter_init(&iter, auth_iov, auth_iovcnt, blocksize); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + while (1) { + ret = _gnutls_iov_iter_next(&iter, &p); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + if (ret == 0) + break; + ret = _gnutls_cipher_auth(&handle->ctx_enc, p, ret); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + } + + ret = _gnutls_iov_iter_init(&iter, iov, iovcnt, blocksize); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + while (1) { + ret = _gnutls_iov_iter_next(&iter, &p); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + if (ret == 0) + break; + + len = ret; + ret = _gnutls_cipher_decrypt2(&handle->ctx_enc, p, len, p, len); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + + ret = _gnutls_iov_iter_sync(&iter, p, len); + if (unlikely(ret < 0)) + return gnutls_assert_val(ret); + } + + if (tag != NULL) { + _gnutls_cipher_tag(&handle->ctx_enc, _tag, tag_size); + if (gnutls_memcmp(_tag, tag, tag_size) != 0) + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); + } + + return 0; +} + /** * gnutls_aead_cipher_deinit: * @handle: is a #gnutls_aead_cipher_hd_t type. @@ -788,8 +1398,101 @@ gnutls_aead_cipher_encrypt(gnutls_aead_cipher_hd_t handle, **/ void gnutls_aead_cipher_deinit(gnutls_aead_cipher_hd_t handle) { - api_aead_cipher_hd_st *h = handle; - - _gnutls_cipher_deinit(&h->ctx_enc); + _gnutls_aead_cipher_deinit(handle); gnutls_free(handle); } + +extern gnutls_crypto_kdf_st _gnutls_kdf_ops; + +/** + * gnutls_hkdf_extract: + * @mac: the mac algorithm used internally + * @key: the initial keying material + * @salt: the optional salt + * @output: the output value of the extract operation + * + * This function will derive a fixed-size key using the HKDF-Extract + * function as defined in RFC 5869. + * + * Returns: Zero or a negative error code on error. + * + * Since: 3.6.13 + */ +int +gnutls_hkdf_extract(gnutls_mac_algorithm_t mac, + const gnutls_datum_t *key, + const gnutls_datum_t *salt, + void *output) +{ + /* MD5 is only allowed internally for TLS */ + if (is_mac_algo_forbidden(mac)) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); + + return _gnutls_kdf_ops.hkdf_extract(mac, key->data, key->size, + salt ? salt->data : NULL, + salt ? salt->size : 0, + output); +} + +/** + * gnutls_hkdf_expand: + * @mac: the mac algorithm used internally + * @key: the pseudorandom key created with HKDF-Extract + * @info: the optional informational data + * @output: the output value of the expand operation + * @length: the desired length of the output key + * + * This function will derive a variable length keying material from + * the pseudorandom key using the HKDF-Expand function as defined in + * RFC 5869. + * + * Returns: Zero or a negative error code on error. + * + * Since: 3.6.13 + */ +int +gnutls_hkdf_expand(gnutls_mac_algorithm_t mac, + const gnutls_datum_t *key, + const gnutls_datum_t *info, + void *output, size_t length) +{ + /* MD5 is only allowed internally for TLS */ + if (is_mac_algo_forbidden(mac)) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); + + return _gnutls_kdf_ops.hkdf_expand(mac, key->data, key->size, + info->data, info->size, + output, length); +} + +/** + * gnutls_pbkdf2: + * @mac: the mac algorithm used internally + * @key: the initial keying material + * @salt: the salt + * @iter_count: the iteration count + * @output: the output value + * @length: the desired length of the output key + * + * This function will derive a variable length keying material from + * a password according to PKCS #5 PBKDF2. + * + * Returns: Zero or a negative error code on error. + * + * Since: 3.6.13 + */ +int +gnutls_pbkdf2(gnutls_mac_algorithm_t mac, + const gnutls_datum_t *key, + const gnutls_datum_t *salt, + unsigned iter_count, + void *output, size_t length) +{ + /* MD5 is only allowed internally for TLS */ + if (is_mac_algo_forbidden(mac)) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); + + return _gnutls_kdf_ops.pbkdf2(mac, key->data, key->size, + salt->data, salt->size, iter_count, + output, length); +} diff --git a/lib/crypto-api.h b/lib/crypto-api.h new file mode 100644 index 0000000000..d539534dab --- /dev/null +++ b/lib/crypto-api.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2000-2016 Free Software Foundation, Inc. + * Copyright (C) 2016-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_CRYPTO_API_H +#define GNUTLS_LIB_CRYPTO_API_H + +#include + +inline static +int _gnutls_aead_cipher_init(gnutls_aead_cipher_hd_t handle, + gnutls_cipher_algorithm_t cipher, + const gnutls_datum_t * key) +{ + const cipher_entry_st* e; + + e = cipher_to_entry(cipher); + if (e == NULL || e->type != CIPHER_AEAD) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + return + _gnutls_cipher_init(&handle->ctx_enc, e, key, + NULL, 1); +} + +inline static +void _gnutls_aead_cipher_deinit(gnutls_aead_cipher_hd_t handle) +{ + api_aead_cipher_hd_st *h = handle; + + _gnutls_cipher_deinit(&h->ctx_enc); +} + +#endif /* GNUTLS_LIB_CRYPTO_API_H */ diff --git a/lib/crypto-backend.c b/lib/crypto-backend.c index bac3035c44..bf0967629d 100644 --- a/lib/crypto-backend.c +++ b/lib/crypto-backend.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/crypto-backend.h b/lib/crypto-backend.h index 1f0b85fb11..33005e73dd 100644 --- a/lib/crypto-backend.h +++ b/lib/crypto-backend.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_CRYPTO_BACKEND_H -#define GNUTLS_CRYPTO_BACKEND_H +#ifndef GNUTLS_LIB_CRYPTO_BACKEND_H +#define GNUTLS_LIB_CRYPTO_BACKEND_H #include @@ -33,6 +33,7 @@ typedef struct { gnutls_cipher_init_func init; gnutls_cipher_setkey_func setkey; gnutls_cipher_setiv_func setiv; + gnutls_cipher_getiv_func getiv; gnutls_cipher_encrypt_func encrypt; gnutls_cipher_decrypt_func decrypt; gnutls_cipher_aead_encrypt_func aead_encrypt; @@ -54,6 +55,7 @@ typedef struct { gnutls_mac_output_func output; gnutls_mac_deinit_func deinit; gnutls_mac_fast_func fast; + gnutls_mac_copy_func copy; /* Not needed for registered on run-time. Only included * should define it. */ @@ -66,12 +68,29 @@ typedef struct { gnutls_digest_output_func output; gnutls_digest_deinit_func deinit; gnutls_digest_fast_func fast; + gnutls_digest_copy_func copy; /* Not needed for registered on run-time. Only included * should define it. */ int (*exists) (gnutls_digest_algorithm_t); } gnutls_crypto_digest_st; +typedef struct { + int (*hkdf_extract) (gnutls_mac_algorithm_t, + const void *key, size_t keysize, + const void *salt, size_t saltsize, + void *output); + int (*hkdf_expand) (gnutls_mac_algorithm_t, + const void *key, size_t keysize, + const void *info, size_t infosize, + void *output, size_t length); + int (*pbkdf2) (gnutls_mac_algorithm_t, + const void *key, size_t keysize, + const void *salt, size_t saltsize, + unsigned iter_count, + void *output, size_t length); +} gnutls_crypto_kdf_st; + typedef struct gnutls_crypto_rnd { int (*init) (void **ctx); /* called prior to first usage of randomness */ int (*rnd) (void *ctx, int level, void *data, size_t datasize); @@ -87,7 +106,6 @@ typedef void *bigint_t; * @GNUTLS_MPI_FORMAT_USG: Raw unsigned integer format. * @GNUTLS_MPI_FORMAT_STD: Raw signed integer format, always a leading * zero when positive. - * @GNUTLS_MPI_FORMAT_PGP: The pgp integer format. * * Enumeration of different bignum integer encoding formats. */ @@ -96,8 +114,8 @@ typedef enum { GNUTLS_MPI_FORMAT_USG = 0, /* raw signed integer format - always a leading zero when positive */ GNUTLS_MPI_FORMAT_STD = 1, - /* the pgp integer format */ - GNUTLS_MPI_FORMAT_PGP = 2 + /* raw unsigned integer format, little endian format */ + GNUTLS_MPI_FORMAT_ULE = 2 } gnutls_bigint_format_t; /* Multi precision integer arithmetic */ @@ -166,18 +184,52 @@ typedef struct gnutls_crypto_bigint { gnutls_bigint_format_t format); } gnutls_crypto_bigint_st; +/* Additional information about the public key, filled from + * SubjectPublicKeyInfo parameters. When there are no parameters, + * the pk field will be set to GNUTLS_PK_UNKNOWN. + */ +typedef struct gnutls_x509_spki_st { + /* We can have a key which is of type RSA, but a certificate + * of type RSA-PSS; the value here will be the expected value + * for signatures (i.e., RSA-PSS) */ + gnutls_pk_algorithm_t pk; + + /* the digest used by RSA-PSS */ + gnutls_digest_algorithm_t rsa_pss_dig; + + /* the size of salt used by RSA-PSS */ + unsigned int salt_size; + + /* if non-zero, the legacy value for PKCS#7 signatures will be + * written for RSA signatures. */ + unsigned int legacy; + + /* the digest used by ECDSA/DSA */ + gnutls_digest_algorithm_t dsa_dig; + + /* flags may include GNUTLS_PK_FLAG_REPRODUCIBLE for + * deterministic ECDSA/DSA */ + unsigned int flags; +} gnutls_x509_spki_st; + #define GNUTLS_MAX_PK_PARAMS 16 typedef struct { bigint_t params[GNUTLS_MAX_PK_PARAMS]; unsigned int params_nr; /* the number of parameters */ - unsigned int flags; + unsigned int pkflags; /* gnutls_pk_flag_t */ + unsigned int qbits; /* GNUTLS_PK_DH */ + gnutls_ecc_curve_t curve; /* GNUTLS_PK_EC, GNUTLS_PK_ED25519, GNUTLS_PK_GOST* */ + gnutls_group_t dh_group; /* GNUTLS_PK_DH - used by ext/key_share */ + gnutls_gost_paramset_t gost_params; /* GNUTLS_PK_GOST_* */ gnutls_datum_t raw_pub; /* used by x25519 */ gnutls_datum_t raw_priv; unsigned int seed_size; uint8_t seed[MAX_PVP_SEED_SIZE]; gnutls_digest_algorithm_t palgo; + /* public key information */ + gnutls_x509_spki_st spki; gnutls_pk_algorithm_t algo; } gnutls_pk_params_st; @@ -190,9 +242,16 @@ typedef struct { */ typedef enum { GNUTLS_PK_FLAG_NONE = 0, - GNUTLS_PK_FLAG_PROVABLE = 1 + GNUTLS_PK_FLAG_PROVABLE = 1, + GNUTLS_PK_FLAG_REPRODUCIBLE = 2 } gnutls_pk_flag_t; +#define FIX_SIGN_PARAMS(params, flags, dig) do { \ + if ((flags) & GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE) { \ + (params).flags |= GNUTLS_PK_FLAG_REPRODUCIBLE; \ + (params).dsa_dig = (dig); \ + } \ +} while (0) void gnutls_pk_params_release(gnutls_pk_params_st * p); void gnutls_pk_params_clear(gnutls_pk_params_st * p); @@ -206,6 +265,7 @@ void gnutls_pk_params_init(gnutls_pk_params_st * p); #define DH_PUBLIC_PARAMS 4 #define RSA_PUBLIC_PARAMS 2 #define ECC_PUBLIC_PARAMS 2 +#define GOST_PUBLIC_PARAMS 2 #define MAX_PRIV_PARAMS_SIZE GNUTLS_MAX_PK_PARAMS /* ok for RSA and DSA */ @@ -215,6 +275,7 @@ void gnutls_pk_params_init(gnutls_pk_params_st * p); #define DH_PRIVATE_PARAMS 5 #define RSA_PRIVATE_PARAMS 8 #define ECC_PRIVATE_PARAMS 3 +#define GOST_PRIVATE_PARAMS 3 #if MAX_PRIV_PARAMS_SIZE - RSA_PRIVATE_PARAMS < 0 #error INCREASE MAX_PRIV_PARAMS @@ -224,6 +285,10 @@ void gnutls_pk_params_init(gnutls_pk_params_st * p); #error INCREASE MAX_PRIV_PARAMS #endif +#if MAX_PRIV_PARAMS_SIZE - GOST_PRIVATE_PARAMS < 0 +#error INCREASE MAX_PRIV_PARAMS +#endif + #if MAX_PRIV_PARAMS_SIZE - DSA_PRIVATE_PARAMS < 0 #error INCREASE MAX_PRIV_PARAMS #endif @@ -268,6 +333,10 @@ void gnutls_pk_params_init(gnutls_pk_params_st * p); #define ECC_Y 1 #define ECC_K 2 +#define GOST_X 0 +#define GOST_Y 1 +#define GOST_K 2 + #define DSA_P 0 #define DSA_Q 1 #define DSA_G 2 @@ -308,16 +377,23 @@ typedef struct gnutls_crypto_pk { int (*encrypt) (gnutls_pk_algorithm_t, gnutls_datum_t * ciphertext, const gnutls_datum_t * plaintext, const gnutls_pk_params_st * pub); - int (*decrypt) (gnutls_pk_algorithm_t, gnutls_datum_t * plaintext, + int (*decrypt) (gnutls_pk_algorithm_t, + gnutls_datum_t * plaintext, const gnutls_datum_t * ciphertext, const gnutls_pk_params_st * priv); - + int (*decrypt2) (gnutls_pk_algorithm_t, + const gnutls_datum_t * ciphertext, + unsigned char * plaintext, + size_t paintext_size, + const gnutls_pk_params_st * priv); int (*sign) (gnutls_pk_algorithm_t, gnutls_datum_t * signature, const gnutls_datum_t * data, - const gnutls_pk_params_st * priv); + const gnutls_pk_params_st *priv, + const gnutls_x509_spki_st *sign); int (*verify) (gnutls_pk_algorithm_t, const gnutls_datum_t * data, const gnutls_datum_t * sig, - const gnutls_pk_params_st * pub); + const gnutls_pk_params_st *pub, + const gnutls_x509_spki_st *sign); /* sanity checks the public key parameters */ int (*verify_priv_params) (gnutls_pk_algorithm_t, const gnutls_pk_params_st * priv); @@ -333,9 +409,12 @@ typedef struct gnutls_crypto_pk { int (*pk_fixup_private_params) (gnutls_pk_algorithm_t, gnutls_direction_t, gnutls_pk_params_st *); +#define PK_DERIVE_TLS13 1 int (*derive) (gnutls_pk_algorithm_t, gnutls_datum_t * out, const gnutls_pk_params_st * priv, - const gnutls_pk_params_st * pub); + const gnutls_pk_params_st * pub, + const gnutls_datum_t *nonce, + unsigned int flags); int (*curve_exists) (gnutls_ecc_curve_t); /* true/false */ } gnutls_crypto_pk_st; @@ -363,4 +442,26 @@ int gnutls_crypto_pk_register(int priority, const gnutls_crypto_pk_st * s); int gnutls_crypto_bigint_register(int priority, const gnutls_crypto_bigint_st * s); -#endif +/* Provided by crypto-backend */ +int +_gnutls_prf_raw(gnutls_mac_algorithm_t mac, + size_t master_size, const void *master, + size_t label_size, const char *label, + size_t seed_size, const uint8_t *seed, size_t outsize, + char *out); + +int _gnutls_gost_key_wrap(gnutls_gost_paramset_t gost_params, + const gnutls_datum_t *kek, + const gnutls_datum_t *ukm, + const gnutls_datum_t *cek, + gnutls_datum_t *enc, + gnutls_datum_t *imit); + +int _gnutls_gost_key_unwrap(gnutls_gost_paramset_t gost_params, + const gnutls_datum_t *kek, + const gnutls_datum_t *ukm, + const gnutls_datum_t *enc, + const gnutls_datum_t *imit, + gnutls_datum_t *cek); + +#endif /* GNUTLS_LIB_CRYPTO_BACKEND_H */ diff --git a/lib/crypto-selftests-pk.c b/lib/crypto-selftests-pk.c index 84a9963cea..6f66cd84dd 100644 --- a/lib/crypto-selftests-pk.c +++ b/lib/crypto-selftests-pk.c @@ -16,12 +16,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ #include "gnutls_int.h" #include "errors.h" +#include "fips.h" #include #include #include @@ -42,52 +43,185 @@ static const gnutls_datum_t bad_data = { .size = sizeof(DATASTR) - 2 }; -static const char rsa_key2048[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIIEogIBAAKCAQEA6yCv+BLrRP/dMPBXJWK21c0aqxIX6JkODL4K+zlyEURt8/Wp\n" - "nw37CJwHD3VrimSnk2SJvBfTNhzYhCsLShDOPvi4qBrLZ1WozjoVJ8tRE4VCcjQJ\n" - "snpJ7ldiV+Eos1Z3FkbV/uQcw5CYCb/TciSukaWlI+G/xas9EOOFt4aELbc1yDe0\n" - "hyfPDtoaKfek4GhT9qT1I8pTC40P9OrA9Jt8lblqxHWwqmdunLTjPjB5zJT6QgI+\n" - "j1xuq7ZOQhveNA/AOyzh574GIpgsuvPPLBQwsCQkscr7cFnCsyOPgYJrQW3De2+l\n" - "wjp2D7gZeeQcFQKazXcFoiqNpJWoBWmU0qqsgwIDAQABAoIBAAghNzRioxPdrO42\n" - "QS0fvqah0tw7Yew+7oduQr7w+4qxTQP0aIsBVr6zdmMIclF0rX6hKUoBoOHsGWho\n" - "fJlw/1CaFPhrBMFr6sxGodigZQtBvkxolDVBmTDOgK39MQUSZke0501K4du5MiiU\n" - "I2F89zQ9//m/onvZMeFVnJf95LAX5qHr/FLARQFtOpgWzcGVxdvJdJlYb1zMUril\n" - "PqyAZXo1j0vgHWwSd54k8mBLus7l8KT57VFce8+9nBPrOrqW4rDVXzs/go3S+kiI\n" - "OyzYeUs9czg1N1e3VhEaC+EdYUawc0ASuEkbsJ53L8pwDvS+2ly2ykYziJp95Fjv\n" - "bzyd1dECgYEA8FzGCxu7A6/ei9Dn0Fmi8Ns/QvEgbdlGw4v4MlXHjrGJYdOB0BwG\n" - "2D2k0ODNYKlUX2J4hi5x8aCH33y/v0EcOHyuqM33vOWBVbdcumCqcOmp341UebAO\n" - "uCPgDJNhjxXaeDVPnizqnOBA1B9sTxwmCOmFIiFRLbR+XluvDh3t8L0CgYEA+my6\n" - "124Rw7kcFx+9JoB/Z+bUJDYpefUT91gBUhhEdEMx5fujhMzAbLpIRjFQq+75Qb7v\n" - "0NyIS09B4oKOqQYzVEJwqKY7H71BTl7QuzJ8Qtuh/DMZsVIt6xpvdeuAKpEOqz44\n" - "ZD3fW1B59A3ja7kqZadCqq2b02UTk+gdeOrYBj8CgYACX3gZDfoHrEnPKY3QUcI5\n" - "DIEQYR8H1phLP+uAW7ZvozMPAy6J5mzu35Tr9vwwExvhITC9amH3l7UfsLSX58Wm\n" - "jRyQUBA9Dir7tKa2tFOab8Qcj+GgnetXSAtjNGVHK1kPzL7vedQLHm+laHYCRe3e\n" - "Mqf80UVi5SBGQDN3OTZrJQKBgEkj2oozDqMwfGDQl0kYfJ2XEFynKQQCrVsva+tT\n" - "RSMDwR4fmcmel5Dp81P08U/WExy9rIM+9duxAVgrs4jwU6uHYCoRqvEBMIK4NJSI\n" - "ETzhsvTa4+UjUF/7L5SsPJmyFiuzl3rHi2W7InNCXyrGQPjBmjoJTJq4SbiIMZtw\n" - "U7m3AoGACG2rE/Ud71kyOJcKwxzEt8kd+2CMuaZeE/xk+3zLSSjXJzKPficogM3I\n" - "K37/N7N0FjhdQ5hRuD3GH1fcjv9AKdGHsH7RuaG+jHTRUjS1glr17SSQzh6xXnWj\n" - "jG0M4UZm5P9STL09nZuWH0wfpr/eg+9+A6yOVfnADI13v+Ygk7k=\n" - "-----END RSA PRIVATE KEY-----\n"; - -static const char ecc_key[] = - "-----BEGIN EC PRIVATE KEY-----\n" - "MHgCAQEEIQDzaOg65+brGV6INN0zXrUodxwRuocGG+GtKzN7ko26v6AKBggqhkjO\n" - "PQMBB6FEA0IABEppi34ngyNQ2a9kJmnT5QxIHAUGI1SpnsAyCfze4j6MJ7o/g7qx\n" - "MSHpe5vd0TQz+/GAa1zxle8mB/Cdh0JaTrA=\n" - "-----END EC PRIVATE KEY-----\n"; - -static const char dsa_key[] = - "-----BEGIN DSA PRIVATE KEY-----\n" - "MIH4AgEAAkEA6KUOSXfFNcInFLPdOlLlKNCe79zJrkxnsQN+lllxuk1ifZrE07r2\n" - "3edTrc4riQNnZ2nZ372tYUAMJg+5jM6IIwIVAOa58exwZ+42Tl+p3b4Kbpyu2Ron\n" - "AkBocj7gkiBYHtv6HMIIzooaxn4vpGR0Ns6wBfroBUGvrnSAgfT3WyiNaHkIF28e\n" - "quWcEeOJjUgFvatcM8gcY288AkEAyKWlgzBurIYST8TM3j4PuQJDTvdHDaGoAUAa\n" - "EfjmOw2UXKwqTmwPiT5BYKgCo2ILS87ttlTpd8vndH37pmnmVQIUQIVuKpZ8y9Bw\n" - "VzO8qcrLCFvTOXY=\n" - "-----END DSA PRIVATE KEY-----\n"; +/* RSA 2048 private key and signature */ +static const char rsa_2048_privkey[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIIEogIBAAKCAQEA6yCv+BLrRP/dMPBXJWK21c0aqxIX6JkODL4K+zlyEURt8/Wp\n" + "nw37CJwHD3VrimSnk2SJvBfTNhzYhCsLShDOPvi4qBrLZ1WozjoVJ8tRE4VCcjQJ\n" + "snpJ7ldiV+Eos1Z3FkbV/uQcw5CYCb/TciSukaWlI+G/xas9EOOFt4aELbc1yDe0\n" + "hyfPDtoaKfek4GhT9qT1I8pTC40P9OrA9Jt8lblqxHWwqmdunLTjPjB5zJT6QgI+\n" + "j1xuq7ZOQhveNA/AOyzh574GIpgsuvPPLBQwsCQkscr7cFnCsyOPgYJrQW3De2+l\n" + "wjp2D7gZeeQcFQKazXcFoiqNpJWoBWmU0qqsgwIDAQABAoIBAAghNzRioxPdrO42\n" + "QS0fvqah0tw7Yew+7oduQr7w+4qxTQP0aIsBVr6zdmMIclF0rX6hKUoBoOHsGWho\n" + "fJlw/1CaFPhrBMFr6sxGodigZQtBvkxolDVBmTDOgK39MQUSZke0501K4du5MiiU\n" + "I2F89zQ9//m/onvZMeFVnJf95LAX5qHr/FLARQFtOpgWzcGVxdvJdJlYb1zMUril\n" + "PqyAZXo1j0vgHWwSd54k8mBLus7l8KT57VFce8+9nBPrOrqW4rDVXzs/go3S+kiI\n" + "OyzYeUs9czg1N1e3VhEaC+EdYUawc0ASuEkbsJ53L8pwDvS+2ly2ykYziJp95Fjv\n" + "bzyd1dECgYEA8FzGCxu7A6/ei9Dn0Fmi8Ns/QvEgbdlGw4v4MlXHjrGJYdOB0BwG\n" + "2D2k0ODNYKlUX2J4hi5x8aCH33y/v0EcOHyuqM33vOWBVbdcumCqcOmp341UebAO\n" + "uCPgDJNhjxXaeDVPnizqnOBA1B9sTxwmCOmFIiFRLbR+XluvDh3t8L0CgYEA+my6\n" + "124Rw7kcFx+9JoB/Z+bUJDYpefUT91gBUhhEdEMx5fujhMzAbLpIRjFQq+75Qb7v\n" + "0NyIS09B4oKOqQYzVEJwqKY7H71BTl7QuzJ8Qtuh/DMZsVIt6xpvdeuAKpEOqz44\n" + "ZD3fW1B59A3ja7kqZadCqq2b02UTk+gdeOrYBj8CgYACX3gZDfoHrEnPKY3QUcI5\n" + "DIEQYR8H1phLP+uAW7ZvozMPAy6J5mzu35Tr9vwwExvhITC9amH3l7UfsLSX58Wm\n" + "jRyQUBA9Dir7tKa2tFOab8Qcj+GgnetXSAtjNGVHK1kPzL7vedQLHm+laHYCRe3e\n" + "Mqf80UVi5SBGQDN3OTZrJQKBgEkj2oozDqMwfGDQl0kYfJ2XEFynKQQCrVsva+tT\n" + "RSMDwR4fmcmel5Dp81P08U/WExy9rIM+9duxAVgrs4jwU6uHYCoRqvEBMIK4NJSI\n" + "ETzhsvTa4+UjUF/7L5SsPJmyFiuzl3rHi2W7InNCXyrGQPjBmjoJTJq4SbiIMZtw\n" + "U7m3AoGACG2rE/Ud71kyOJcKwxzEt8kd+2CMuaZeE/xk+3zLSSjXJzKPficogM3I\n" + "K37/N7N0FjhdQ5hRuD3GH1fcjv9AKdGHsH7RuaG+jHTRUjS1glr17SSQzh6xXnWj\n" + "jG0M4UZm5P9STL09nZuWH0wfpr/eg+9+A6yOVfnADI13v+Ygk7k=\n" + "-----END RSA PRIVATE KEY-----\n"; + +static const char rsa_2048_sig[] = + "\x7a\xb3\xf8\xb0\xf9\xf0\x52\x88\x37\x17\x97\x9f\xbe\x61\xb4\xd2" + "\x43\x78\x9f\x79\x92\xd0\xad\x08\xdb\xbd\x3c\x72\x7a\xb5\x51\x59" + "\x63\xd6\x7d\xf1\x9c\x1e\x10\x7b\x27\xab\xf8\xd4\x9d\xcd\xc5\xf9" + "\xae\xf7\x09\x6b\x40\x93\xc5\xe9\x1c\x0f\xb4\x82\xa1\x47\x86\x54" + "\x63\xd2\x4d\x40\x9a\x80\xb9\x38\x45\x69\xa2\xd6\x92\xb6\x69\x7f" + "\x3f\xf3\x5b\xa5\x1d\xac\x06\xad\xdf\x4e\xbb\xe6\xda\x68\x0d\xe5" + "\xab\xef\xd2\xf0\xc5\xd8\xc0\xed\x80\xe2\xd4\x76\x98\xec\x44\xa2" + "\xfc\x3f\xce\x2e\x8b\xc4\x4b\xab\xb0\x70\x24\x52\x85\x2a\x36\xcd" + "\x9a\xb5\x05\x00\xea\x98\x7c\x72\x06\x68\xb1\x38\x44\x16\x80\x6a" + "\x3b\x64\x72\xbb\xfd\x4b\xc9\xdd\xda\x2a\x68\xde\x7f\x6e\x48\x28" + "\xc1\x63\x57\x2b\xde\x83\xa3\x27\x34\xd7\xa6\x87\x18\x35\x10\xff" + "\x31\xd9\x47\xc9\x84\x35\xe1\xaa\xe2\xf7\x98\xfa\x19\xd3\xf1\x94" + "\x25\x2a\x96\xe4\xa8\xa7\x05\x10\x93\x87\xde\x96\x85\xe5\x68\xb8" + "\xe5\x4e\xbf\x66\x85\x91\xbd\x52\x5b\x3d\x9f\x1b\x79\xea\xe3\x8b" + "\xef\x62\x18\x39\x7a\x50\x01\x46\x1b\xde\x8d\x37\xbc\x90\x6c\x07" + "\xc0\x07\xed\x60\xce\x2e\x31\xd6\x8f\xe8\x75\xdb\x45\x21\xc6\xcb"; + +/* DSA 2048 private key and signature */ +static const char dsa_2048_privkey[] = + "-----BEGIN DSA PRIVATE KEY-----\n" + "MIIDTQIBAAKCAQEAh60B6yPMRIT7udq2kKuwnQDohvT1U0w+RJcSr23C05cM/Ovn\n" + "UP/8Rrj6T8K+uYhMbKgLaZiJJW9q04jaPQk0cfUphbLvRjzVHwE/0Bkb+Y1Rv7ni\n" + "Jot2IFMq5iuNraf889PC0WREvFCcIkSFY2Ac4WT7mCcBtfx/raGFXDUjcUrJ0HwZ\n" + "IOhjQDfcXUsztuyYsYA75ociEY8kyDZq/ixyr5++R1VjNf30Re8AbQlXOEGxEN5t\n" + "t+Tvpq8K5L3prQs2KNSzyOUmedjb/ojH4T4qe/RL9EVjjeuIGHDNUT6F197yZ91y\n" + "qLLTf1WjnUyZcKij5rryX0LJBBWawEZjNSHZawIdAMQlyycia4NigCdiDR+QptUn\n" + "2xrj9o14fXkIrXcCggEAXRZm1rbPhsjSTo6cpCVrmDzO1grv83EHiBH4MvRQQnP8\n" + "FpAREsBA5cYju97XvLaLhioZeMjLn08kU7TUbHRUB+ULTuVvE2dQbBpGuKiLRRt9\n" + "6U2T0eD3xGLoM+o8EY/kpqaWGEpZv7hzM9xuo4vy55+viAZgFWULqmltwfG/7w7V\n" + "NXUHNv5H4Ipw//fSDLTPqzUlNqSSswDLz6pCjWEs0rWAqNAMaOiLTz4id9pL48Oe\n" + "oAfpcQR9tgTEnwyXfZBnrJVclHhkHKGeXvU05IgCzpKO76Z5R+By50T0i/JV7vzM\n" + "l2yS9aAl/cprT6U7yI3oU/blldCVNpMcFAFb+fO8DAKCAQBVMo8xptyvQOJeSvbO\n" + "SSYdJ3IiI/0GdkcGWXblWg9z7mrPaWEnT7OquEm/+vYtWd3GHDtyNM+jzsN4Xgjc\n" + "TL3AEd2hLiozJQ1BFKw25VU08UHAYTzUxZhO4Vwtmp46Kwj8YLDQ3NHRWCBxpDQR\n" + "fbiFvyXP+qXap6plMfrydnUD1mae/JSOWOYgdB7tFIehstLxVXx/cAnjwgFU03Df\n" + "grjsad92zA1Hc9wIjbsgAQdTR5DWnFRkRt3UtayBwoyqm6QceZHsv1NAGvkQ4ion\n" + "bEjkHkjF9YCkR9/rspR8cLghRIXMjOpypuSbaRPeeWq0gP2UOxFL/d3iWH0ETr/L\n" + "kTlCAhxYGpVgtfB96qmJukyl9GOGvfkwFTgEyIDoV84M\n" + "-----END DSA PRIVATE KEY-----\n"; + +static const char dsa_2048_sig[] = + "\x30\x3d\x02\x1d\x00\xbe\x87\x2f\xcf\xa1\xe4\x86\x5c\x72\x58\x4a" + "\x7b\x8f\x32\x7f\xa5\x1b\xdc\x5c\xae\xda\x98\xea\x15\x32\xed\x0c" + "\x4e\x02\x1c\x4c\x76\x01\x2b\xcd\xb9\x33\x95\xf2\xfa\xde\x56\x01" + "\xb7\xaa\xe4\x5a\x4a\x2e\xf1\x24\x5a\xd1\xb5\x83\x9a\x93\x61"; + +/* secp256r1 private key and signature */ +static const char ecdsa_secp256r1_privkey[] = + "-----BEGIN EC PRIVATE KEY-----\n" + "MHcCAQEEIPAKWV7+pZe9c5EubMNfAEKWRQtP/MvlO9HehwHmJssNoAoGCCqGSM49\n" + "AwEHoUQDQgAE2CNONRio3ciuXtoomJKs3MdbzLbd44VPhtzJN30VLFm5gvnfiCj2\n" + "zzz7pl9Cv0ECHl6yedNI8QEKdcwCDgEmkQ==\n" + "-----END EC PRIVATE KEY-----\n"; + +static const char ecdsa_secp256r1_sig[] = + "\x30\x45\x02\x21\x00\x80\x67\x18\xb9\x72\xc6\x0b\xe1\xc9\x89\x9b" + "\x85\x11\x49\x29\x08\xd9\x86\x76\xcc\xfb\xc1\xf4\xd0\xa2\x5e\xa7" + "\xb9\x12\xfb\x1a\x68\x02\x20\x67\x12\xb1\x89\x9e\x1d\x9d\x5c\x0f" + "\xef\x6e\xa7\x2a\x95\x8c\xfa\x54\x20\x80\xc8\x30\x7c\xff\x06\xbc" + "\xc8\xe2\x9a\x2f\x05\x2f\x67"; +#ifdef ENABLE_NON_SUITEB_CURVES +/* secp192r1 private key and signature */ +static const char ecdsa_secp192r1_privkey[] = + "-----BEGIN EC PRIVATE KEY-----" + "MF8CAQEEGLjezFcbgDMeApVrdtZHvu/k1a8/tVZ41KAKBggqhkjOPQMBAaE0AzIA" + "BO1lciKdgxeRH8k64vxcaV1OYIK9akVrW02Dw21MXhRLP0l0wzCw6LGSr5rS6AaL" + "Fg==" "-----END EC PRIVATE KEY-----"; + +static const char ecdsa_secp192r1_sig[] = + "\x30\x34\x02\x18\x7c\x43\xe3\xb7\x26\x90\x43\xb5\xf5\x63\x8f\xee" + "\xac\x78\x3d\xac\x35\x35\xd0\x1e\x83\x17\x2b\x64\x02\x18\x14\x6e" + "\x94\xd5\x7e\xac\x43\x42\x0b\x71\x7a\xc8\x29\xe6\xe3\xda\xf2\x95" + "\x0e\xe0\x63\x24\xed\xf2"; + +/* secp224r1 private key and signature */ +static const char ecdsa_secp224r1_privkey[] = + "-----BEGIN EC PRIVATE KEY-----" + "MGgCAQEEHOKWJFdWdrR/CgVrUeTeawOrJ9GozE9KKx2a8PmgBwYFK4EEACGhPAM6" + "AAQKQj3YpenWT7lFR41SnBvmj/+Bj+kgzQnaF65qWAtPRJsZXFlLTu3/IUNqSRu9" + "DqPsk8xBHAB7pA==" "-----END EC PRIVATE KEY-----"; + +static const char ecdsa_secp224r1_sig[] = + "\x30\x3d\x02\x1c\x14\x22\x09\xa1\x51\x33\x37\xfd\x78\x73\xbd\x84" + "\x6e\x76\xa8\x60\x90\xf5\xb6\x57\x34\x25\xe0\x79\xe3\x01\x61\xa9" + "\x02\x1d\x00\xb1\xee\xdb\xae\xb3\xe6\x9c\x04\x68\xd5\xe1\x0d\xb6" + "\xfc\x5c\x45\xc3\x4f\xbf\x2b\xa5\xe0\x89\x37\x84\x04\x82\x5f"; +#endif + +/* secp384r1 private key and signature */ +static const char ecdsa_secp384r1_privkey[] = + "-----BEGIN EC PRIVATE KEY-----" + "MIGkAgEBBDDevshD6gb+4rZpC9vwFcIwNs4KmGzdqCxyyN40a8uOWRbyf7aHdiSS" + "03oAyKtc4JCgBwYFK4EEACKhZANiAARO1KkPMno2tnNXx1S9EZkp8SOpDCZ4aobH" + "IYv8RHnSmKf8I3OKD6TaoeR+1MwJmNJUH90Bj45WXla68/vsPiFcfVKboxsZYe/n" + "pv8e4ugXagVQVBXNZJ859iYPdJR24vo=" "-----END EC PRIVATE KEY-----"; + +static const char ecdsa_secp384r1_sig[] = + "\x30\x65\x02\x31\x00\xa7\x73\x60\x16\xdb\xf9\x1f\xfc\x9e\xd2\x12" + "\x23\xd4\x04\xa7\x31\x1f\x15\x28\xfd\x87\x9c\x2c\xb1\xf3\x38\x35" + "\x23\x3b\x6e\xfe\x6a\x5d\x89\x34\xbe\x02\x82\xc6\x27\xea\x45\x53" + "\xa9\x87\xc5\x31\x0a\x02\x30\x76\x32\x80\x6b\x43\x3c\xb4\xfd\x90" + "\x03\xe0\x1d\x5d\x77\x18\x45\xf6\x71\x29\xa9\x05\x87\x49\x75\x3a" + "\x78\x9c\x49\xe5\x6c\x8e\x18\xcd\x5d\xee\x2c\x6f\x92\xf7\x15\xd3" + "\x38\xd5\xf9\x9b\x9d\x1a\xf4"; + +/* secp521r1 private key and signature */ +static const char ecdsa_secp521r1_privkey[] = + "-----BEGIN EC PRIVATE KEY-----" + "MIHbAgEBBEGO2n7NN363qSCvJVdlQtCvudtaW4o0fEufXRjE1AsCrle+VXX0Zh0w" + "Y1slSeDHMndpakoiF+XkQ+bhcB867UV6aKAHBgUrgQQAI6GBiQOBhgAEAQb6jDpo" + "byy1tF8Zucg0TMGUzIN2DK+RZJ3QQRdWdirO25OIC3FoFi1Yird6rpoB6HlNyJ7R" + "0bNG9Uv34bSHMn8yAFoiqxUCdJZQbEenMoZsi6COaePe3e0QqvDMr0hEWT23Sr3t" + "LpEV7eZGFfFIJw5wSUp2KOcs+O9WjmoukTWtDKNV" + "-----END EC PRIVATE KEY-----"; + +static const char ecdsa_secp521r1_sig[] = + "\x30\x81\x88\x02\x42\x01\x9d\x13\x2e\xc9\x75\x1b\x60\x10\x62\xc5" + "\x0d\xcb\x08\x9e\x86\x01\xd3\xc9\x8c\xee\x2e\x16\x3d\x8c\xc2\x65" + "\x80\xe1\x32\x56\xc3\x02\x9d\xf0\x4a\x89\x8d\x2e\x33\x2a\x90\x4e" + "\x72\x1d\xaa\x84\x14\xe8\xcb\xdf\x7a\x4a\xc9\x67\x2e\xba\xa3\xf2" + "\xc2\x07\xf7\x1b\xa5\x91\xbd\x02\x42\x01\xe3\x32\xd2\x25\xeb\x2e" + "\xaf\xb4\x6c\xc0\xaa\x5c\xc1\x56\x14\x13\x23\x7f\x62\xcf\x4c\xb8" + "\xd1\x96\xe0\x29\x6d\xed\x74\xdd\x23\x64\xf9\x29\x86\x40\x22\x2f" + "\xb6\x8d\x4c\x8e\x0b\x7a\xda\xdb\x03\x44\x01\x9b\x81\x1c\x3c\xab" + "\x78\xee\xf2\xc5\x24\x33\x61\x65\x01\x87\x66"; + +/* GOST01 private key */ +static const char gost01_privkey[] = + "-----BEGIN PRIVATE KEY-----\n" + "MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIgQgdNfuHGmmTdPm\n" + "p5dAa3ea9UYxpdYQPP9lbDwzQwG2bJM=\n" + "-----END PRIVATE KEY-----\n"; + +/* GOST12 256 private key */ +static const char gost12_256_privkey[] = + "-----BEGIN PRIVATE KEY-----\n" + "MEgCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIjAQYIKoUDBwEBAgIEIgQgKOF96tom\n" + "D61rhSnzKjyrmO3fv0gdlHei+6ovrc8SnBk=\n" + "-----END PRIVATE KEY-----\n"; + +/* GOST12 512 private key */ +static const char gost12_512_privkey[] = + "-----BEGIN PRIVATE KEY-----\n" + "MGoCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwRCBECjFpvp\n" + "B0vdc7u59b99TCNXhHiB69JJtUjvieNkGYJpoaaIvoKZTNCjpSZASsZcQZCHOTof\n" + "hsQ3JCCy4xnd5jWT\n" + "-----END PRIVATE KEY-----\n"; static int test_rsa_enc(gnutls_pk_algorithm_t pk, unsigned bits, gnutls_digest_algorithm_t ign) @@ -95,9 +229,10 @@ static int test_rsa_enc(gnutls_pk_algorithm_t pk, int ret; gnutls_datum_t enc = { NULL, 0 }; gnutls_datum_t dec = { NULL, 0 }; - gnutls_datum_t raw_rsa_key = { (void*)rsa_key2048, sizeof(rsa_key2048)-1 }; + gnutls_datum_t raw_rsa_key = { (void*)rsa_2048_privkey, sizeof(rsa_2048_privkey)-1 }; gnutls_privkey_t key; gnutls_pubkey_t pub = NULL; + unsigned char plaintext2[sizeof(DATASTR) - 1]; ret = gnutls_privkey_init(&key); if (ret < 0) @@ -147,6 +282,18 @@ static int test_rsa_enc(gnutls_pk_algorithm_t pk, goto cleanup; } + ret = gnutls_privkey_decrypt_data2(key, 0, &enc, plaintext2, + signed_data.size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + if (memcmp(plaintext2, signed_data.data, signed_data.size) != 0) { + ret = GNUTLS_E_SELF_TEST_ERROR; + gnutls_assert(); + goto cleanup; + } + ret = 0; cleanup: if (pub != NULL) @@ -166,25 +313,15 @@ static int test_rsa_enc(gnutls_pk_algorithm_t pk, } static int test_sig(gnutls_pk_algorithm_t pk, - unsigned bits, gnutls_digest_algorithm_t dig) + unsigned bits, gnutls_sign_algorithm_t sigalgo) { int ret; - gnutls_datum_t sig = { NULL, 0 }; - gnutls_datum_t raw_rsa_key = { (void*)rsa_key2048, sizeof(rsa_key2048)-1 }; - gnutls_datum_t raw_dsa_key = { (void*)dsa_key, sizeof(dsa_key)-1 }; - gnutls_datum_t raw_ecc_key = { (void*)ecc_key, sizeof(ecc_key)-1 }; gnutls_privkey_t key; + gnutls_datum_t raw_key; + gnutls_datum_t sig = { NULL, 0 }; gnutls_pubkey_t pub = NULL; char param_name[32]; - if (pk == GNUTLS_PK_EC) { - snprintf(param_name, sizeof(param_name), "%s", - gnutls_ecc_curve_get_name(GNUTLS_BITS_TO_CURVE - (bits))); - } else { - snprintf(param_name, sizeof(param_name), "%u", bits); - } - ret = gnutls_privkey_init(&key); if (ret < 0) return gnutls_assert_val(ret); @@ -195,17 +332,83 @@ static int test_sig(gnutls_pk_algorithm_t pk, goto cleanup; } - if (pk == GNUTLS_PK_RSA) { - ret = gnutls_privkey_import_x509_raw(key, &raw_rsa_key, GNUTLS_X509_FMT_PEM, NULL, 0); - } else if (pk == GNUTLS_PK_DSA) { - ret = gnutls_privkey_import_x509_raw(key, &raw_dsa_key, GNUTLS_X509_FMT_PEM, NULL, 0); - } else if (pk == GNUTLS_PK_ECC) { - ret = gnutls_privkey_import_x509_raw(key, &raw_ecc_key, GNUTLS_X509_FMT_PEM, NULL, 0); - } else { - gnutls_assert(); - ret = GNUTLS_E_INTERNAL_ERROR; + switch(pk) { + case GNUTLS_PK_RSA: + raw_key.data = (void*)rsa_2048_privkey; + raw_key.size = sizeof(rsa_2048_privkey) - 1; + snprintf(param_name, sizeof(param_name), "%u", bits); + break; + case GNUTLS_PK_RSA_PSS: + raw_key.data = (void*)rsa_2048_privkey; + raw_key.size = sizeof(rsa_2048_privkey) - 1; + snprintf(param_name, sizeof(param_name), "%u", bits); + break; + case GNUTLS_PK_DSA: + raw_key.data = (void*)dsa_2048_privkey; + raw_key.size = sizeof(dsa_2048_privkey) - 1; + snprintf(param_name, sizeof(param_name), "%u", bits); + break; + case GNUTLS_PK_ECC: + switch(bits) { +#ifdef ENABLE_NON_SUITEB_CURVES + case GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP192R1): + raw_key.data = (void*)ecdsa_secp192r1_privkey; + raw_key.size = sizeof(ecdsa_secp192r1_privkey) - 1; + break; + case GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP224R1): + raw_key.data = (void*)ecdsa_secp224r1_privkey; + raw_key.size = sizeof(ecdsa_secp224r1_privkey) - 1; + break; +#endif + case GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP256R1): + raw_key.data = (void*)ecdsa_secp256r1_privkey; + raw_key.size = sizeof(ecdsa_secp256r1_privkey) - 1; + break; + case GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP384R1): + raw_key.data = (void*)ecdsa_secp384r1_privkey; + raw_key.size = sizeof(ecdsa_secp384r1_privkey) - 1; + break; + case GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP521R1): + raw_key.data = (void*)ecdsa_secp521r1_privkey; + raw_key.size = sizeof(ecdsa_secp521r1_privkey) - 1; + break; + default: + gnutls_assert(); + ret = GNUTLS_E_INTERNAL_ERROR; + goto cleanup; + } + snprintf(param_name, sizeof(param_name), "%s", + gnutls_ecc_curve_get_name(GNUTLS_BITS_TO_CURVE + (bits))); + break; + case GNUTLS_PK_GOST_01: + raw_key.data = (void*)gost01_privkey; + raw_key.size = sizeof(gost01_privkey) - 1; + snprintf(param_name, sizeof(param_name), "%s", + gnutls_ecc_curve_get_name(GNUTLS_BITS_TO_CURVE + (bits))); + break; + case GNUTLS_PK_GOST_12_256: + raw_key.data = (void*)gost12_256_privkey; + raw_key.size = sizeof(gost12_256_privkey) - 1; + snprintf(param_name, sizeof(param_name), "%s", + gnutls_ecc_curve_get_name(GNUTLS_BITS_TO_CURVE + (bits))); + break; + case GNUTLS_PK_GOST_12_512: + raw_key.data = (void*)gost12_512_privkey; + raw_key.size = sizeof(gost12_512_privkey) - 1; + snprintf(param_name, sizeof(param_name), "%s", + gnutls_ecc_curve_get_name(GNUTLS_BITS_TO_CURVE + (bits))); + break; + default: + gnutls_assert(); + ret = GNUTLS_E_INTERNAL_ERROR; + goto cleanup; } + ret = gnutls_privkey_import_x509_raw(key, &raw_key, GNUTLS_X509_FMT_PEM, NULL, 0); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -217,14 +420,14 @@ static int test_sig(gnutls_pk_algorithm_t pk, goto cleanup; } - ret = gnutls_privkey_sign_data(key, dig, 0, &signed_data, &sig); + ret = gnutls_privkey_sign_data2(key, sigalgo, 0, &signed_data, &sig); if (ret < 0) { gnutls_assert(); goto cleanup; } ret = - gnutls_pubkey_verify_data2(pub, gnutls_pk_to_sign(pk, dig), 0, + gnutls_pubkey_verify_data2(pub, sigalgo, 0, &signed_data, &sig); if (ret < 0) { ret = GNUTLS_E_SELF_TEST_ERROR; @@ -233,7 +436,7 @@ static int test_sig(gnutls_pk_algorithm_t pk, } ret = - gnutls_pubkey_verify_data2(pub, gnutls_pk_to_sign(pk, dig), 0, + gnutls_pubkey_verify_data2(pub, sigalgo, 0, &bad_data, &sig); if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) { @@ -243,7 +446,8 @@ static int test_sig(gnutls_pk_algorithm_t pk, } ret = 0; - cleanup: + +cleanup: if (pub != NULL) gnutls_pubkey_deinit(pub); gnutls_privkey_deinit(key); @@ -259,95 +463,11 @@ static int test_sig(gnutls_pk_algorithm_t pk, return ret; } -/* A precomputed RSA-SHA1 signature using the rsa_key2048 */ -static const char rsa_sig[] = - "\x7a\xb3\xf8\xb0\xf9\xf0\x52\x88\x37\x17\x97\x9f\xbe\x61\xb4\xd2\x43\x78\x9f\x79\x92\xd0\xad\x08\xdb\xbd\x3c\x72\x7a\xb5\x51\x59\x63\xd6\x7d\xf1\x9c\x1e\x10\x7b\x27\xab\xf8\xd4\x9d\xcd\xc5\xf9\xae\xf7\x09\x6b\x40\x93\xc5\xe9\x1c\x0f\xb4\x82\xa1\x47\x86\x54\x63\xd2\x4d\x40\x9a\x80\xb9\x38\x45\x69\xa2\xd6\x92\xb6\x69\x7f\x3f\xf3\x5b\xa5\x1d\xac\x06\xad\xdf\x4e\xbb\xe6\xda\x68\x0d\xe5\xab\xef\xd2\xf0\xc5\xd8\xc0\xed\x80\xe2\xd4\x76\x98\xec\x44\xa2\xfc\x3f\xce\x2e\x8b\xc4\x4b\xab\xb0\x70\x24\x52\x85\x2a\x36\xcd\x9a\xb5\x05\x00\xea\x98\x7c\x72\x06\x68\xb1\x38\x44\x16\x80\x6a\x3b\x64\x72\xbb\xfd\x4b\xc9\xdd\xda\x2a\x68\xde\x7f\x6e\x48\x28\xc1\x63\x57\x2b\xde\x83\xa3\x27\x34\xd7\xa6\x87\x18\x35\x10\xff\x31\xd9\x47\xc9\x84\x35\xe1\xaa\xe2\xf7\x98\xfa\x19\xd3\xf1\x94\x25\x2a\x96\xe4\xa8\xa7\x05\x10\x93\x87\xde\x96\x85\xe5\x68\xb8\xe5\x4e\xbf\x66\x85\x91\xbd\x52\x5b\x3d\x9f\x1b\x79\xea\xe3\x8b\xef\x62\x18\x39\x7a\x50\x01\x46\x1b\xde\x8d\x37\xbc\x90\x6c\x07\xc0\x07\xed\x60\xce\x2e\x31\xd6\x8f\xe8\x75\xdb\x45\x21\xc6\xcb"; - -/* ECDSA key and signature */ -static const char ecdsa_secp256r1_privkey[] = - "-----BEGIN EC PRIVATE KEY-----\n" - "MHcCAQEEIPAKWV7+pZe9c5EubMNfAEKWRQtP/MvlO9HehwHmJssNoAoGCCqGSM49\n" - "AwEHoUQDQgAE2CNONRio3ciuXtoomJKs3MdbzLbd44VPhtzJN30VLFm5gvnfiCj2\n" - "zzz7pl9Cv0ECHl6yedNI8QEKdcwCDgEmkQ==\n" - "-----END EC PRIVATE KEY-----\n"; - -static const char ecdsa_secp256r1_sig[] = - "\x30\x45\x02\x21\x00\x9b\x8f\x60\xed\x9e\x40\x8d\x74\x82\x73\xab\x20\x1a\x69\xfc\xf9\xee\x3c\x41\x80\xc0\x39\xdd\x21\x1a\x64\xfd\xbf\x7e\xaa\x43\x70\x02\x20\x44\x28\x05\xdd\x30\x47\x58\x96\x18\x39\x94\x18\xba\xe7\x7a\xf6\x1e\x2d\xba\xb1\xe0\x7d\x73\x9e\x2f\x58\xee\x0c\x2a\x89\xe8\x35"; - -#ifdef ENABLE_NON_SUITEB_CURVES -/* sha256 */ -static const char ecdsa_secp192r1_privkey[] = - "-----BEGIN EC PRIVATE KEY-----" - "MF8CAQEEGLjezFcbgDMeApVrdtZHvu/k1a8/tVZ41KAKBggqhkjOPQMBAaE0AzIA" - "BO1lciKdgxeRH8k64vxcaV1OYIK9akVrW02Dw21MXhRLP0l0wzCw6LGSr5rS6AaL" - "Fg==" "-----END EC PRIVATE KEY-----"; - -static const char ecdsa_secp192r1_sig[] = - "\x30\x34\x02\x18\x5f\xb3\x10\x4b\x4d\x44\x48\x29\x4b\xfd\xa7\x8e\xce\x57\xac\x36\x38\x54\xab\x73\xdb\xed\xb8\x5f\x02\x18\x0b\x8b\xf3\xae\x49\x50\x0e\x47\xca\x89\x1a\x00\xca\x23\xf5\x8d\xd6\xe3\xce\x9a\xff\x2e\x4f\x5c"; - -static const char ecdsa_secp224r1_privkey[] = - "-----BEGIN EC PRIVATE KEY-----" - "MGgCAQEEHOKWJFdWdrR/CgVrUeTeawOrJ9GozE9KKx2a8PmgBwYFK4EEACGhPAM6" - "AAQKQj3YpenWT7lFR41SnBvmj/+Bj+kgzQnaF65qWAtPRJsZXFlLTu3/IUNqSRu9" - "DqPsk8xBHAB7pA==" "-----END EC PRIVATE KEY-----"; - -static const char ecdsa_secp224r1_sig[] = - "\x30\x3d\x02\x1c\x76\x03\x8d\x74\xf4\xd3\x09\x2a\xb5\xdf\x6b\x5b\xf4\x4b\x86\xb8\x62\x81\x5d\x7b\x7a\xbb\x37\xfc\xf1\x46\x1c\x2b\x02\x1d\x00\xa0\x98\x5d\x80\x43\x89\xe5\xee\x1a\xec\x46\x08\x04\x55\xbc\x50\xfa\x2a\xd5\xa6\x18\x92\x19\xdb\x68\xa0\x2a\xda"; -#endif - -static const char ecdsa_secp384r1_privkey[] = - "-----BEGIN EC PRIVATE KEY-----" - "MIGkAgEBBDDevshD6gb+4rZpC9vwFcIwNs4KmGzdqCxyyN40a8uOWRbyf7aHdiSS" - "03oAyKtc4JCgBwYFK4EEACKhZANiAARO1KkPMno2tnNXx1S9EZkp8SOpDCZ4aobH" - "IYv8RHnSmKf8I3OKD6TaoeR+1MwJmNJUH90Bj45WXla68/vsPiFcfVKboxsZYe/n" - "pv8e4ugXagVQVBXNZJ859iYPdJR24vo=" "-----END EC PRIVATE KEY-----"; - -static const char ecdsa_secp384r1_sig[] = - "\x30\x66\x02\x31\x00\xbb\x4d\x25\x30\x13\x1b\x3b\x75\x60\x07\xed\x53\x8b\x52\xee\xd8\x6e\xf1\x9d\xa8\x36\x0e\x2e\x20\x31\x51\x11\x48\x78\xdd\xaf\x24\x38\x64\x81\x71\x6b\xa6\xb7\x29\x58\x28\x82\x32\xba\x29\x29\xd9\x02\x31\x00\xeb\x70\x09\x87\xac\x7b\x78\x0d\x4c\x4f\x08\x2b\x86\x27\xe2\x60\x1f\xc9\x11\x9f\x1d\xf5\x82\x4c\xc7\x3d\xb0\x27\xc8\x93\x29\xc7\xd0\x0e\x88\x02\x09\x93\xc2\x72\xce\xa5\x74\x8c\x3d\xe0\x8c\xad"; - -static const char ecdsa_secp521r1_privkey[] = - "-----BEGIN EC PRIVATE KEY-----" - "MIHbAgEBBEGO2n7NN363qSCvJVdlQtCvudtaW4o0fEufXRjE1AsCrle+VXX0Zh0w" - "Y1slSeDHMndpakoiF+XkQ+bhcB867UV6aKAHBgUrgQQAI6GBiQOBhgAEAQb6jDpo" - "byy1tF8Zucg0TMGUzIN2DK+RZJ3QQRdWdirO25OIC3FoFi1Yird6rpoB6HlNyJ7R" - "0bNG9Uv34bSHMn8yAFoiqxUCdJZQbEenMoZsi6COaePe3e0QqvDMr0hEWT23Sr3t" - "LpEV7eZGFfFIJw5wSUp2KOcs+O9WjmoukTWtDKNV" - "-----END EC PRIVATE KEY-----"; - -static const char ecdsa_secp521r1_sig[] = - "\x30\x81\x87\x02\x42\x01\xb8\xcb\x52\x9e\x10\xa8\x49\x3f\xe1\x9e\x14\x0a\xcf\x96\xed\x7e\xab\x7d\x0c\xe1\x9b\xa4\x97\xdf\x01\xf5\x35\x42\x5f\x5b\x28\x15\x24\x33\x6e\x59\x6c\xaf\x10\x8b\x98\x8e\xe9\x4c\x23\x0d\x76\x92\x03\xdd\x6d\x8d\x08\x47\x15\x5b\xf8\x66\x75\x75\x40\xe8\xf4\xa0\x52\x02\x41\x15\x27\x7c\x5f\xa6\x33\xa6\x29\x68\x3f\x55\x8d\x7f\x1d\x4f\x88\xc6\x61\x6e\xac\x21\xdf\x2b\x7b\xde\x76\x9a\xdc\xe6\x3b\x94\x3f\x03\x9c\xa2\xa6\xa3\x63\x39\x48\xbd\x79\x70\x21\xf2\x6b\xff\x58\x66\xf1\x58\xc2\x58\xad\x4f\x84\x14\x5d\x05\x12\x83\xd0\x87\xbd\xf3"; - -/* DSA key and signature */ -static const char dsa_privkey[] = - "-----BEGIN DSA PRIVATE KEY-----\n" - "MIIDTQIBAAKCAQEAh60B6yPMRIT7udq2kKuwnQDohvT1U0w+RJcSr23C05cM/Ovn\n" - "UP/8Rrj6T8K+uYhMbKgLaZiJJW9q04jaPQk0cfUphbLvRjzVHwE/0Bkb+Y1Rv7ni\n" - "Jot2IFMq5iuNraf889PC0WREvFCcIkSFY2Ac4WT7mCcBtfx/raGFXDUjcUrJ0HwZ\n" - "IOhjQDfcXUsztuyYsYA75ociEY8kyDZq/ixyr5++R1VjNf30Re8AbQlXOEGxEN5t\n" - "t+Tvpq8K5L3prQs2KNSzyOUmedjb/ojH4T4qe/RL9EVjjeuIGHDNUT6F197yZ91y\n" - "qLLTf1WjnUyZcKij5rryX0LJBBWawEZjNSHZawIdAMQlyycia4NigCdiDR+QptUn\n" - "2xrj9o14fXkIrXcCggEAXRZm1rbPhsjSTo6cpCVrmDzO1grv83EHiBH4MvRQQnP8\n" - "FpAREsBA5cYju97XvLaLhioZeMjLn08kU7TUbHRUB+ULTuVvE2dQbBpGuKiLRRt9\n" - "6U2T0eD3xGLoM+o8EY/kpqaWGEpZv7hzM9xuo4vy55+viAZgFWULqmltwfG/7w7V\n" - "NXUHNv5H4Ipw//fSDLTPqzUlNqSSswDLz6pCjWEs0rWAqNAMaOiLTz4id9pL48Oe\n" - "oAfpcQR9tgTEnwyXfZBnrJVclHhkHKGeXvU05IgCzpKO76Z5R+By50T0i/JV7vzM\n" - "l2yS9aAl/cprT6U7yI3oU/blldCVNpMcFAFb+fO8DAKCAQBVMo8xptyvQOJeSvbO\n" - "SSYdJ3IiI/0GdkcGWXblWg9z7mrPaWEnT7OquEm/+vYtWd3GHDtyNM+jzsN4Xgjc\n" - "TL3AEd2hLiozJQ1BFKw25VU08UHAYTzUxZhO4Vwtmp46Kwj8YLDQ3NHRWCBxpDQR\n" - "fbiFvyXP+qXap6plMfrydnUD1mae/JSOWOYgdB7tFIehstLxVXx/cAnjwgFU03Df\n" - "grjsad92zA1Hc9wIjbsgAQdTR5DWnFRkRt3UtayBwoyqm6QceZHsv1NAGvkQ4ion\n" - "bEjkHkjF9YCkR9/rspR8cLghRIXMjOpypuSbaRPeeWq0gP2UOxFL/d3iWH0ETr/L\n" - "kTlCAhxYGpVgtfB96qmJukyl9GOGvfkwFTgEyIDoV84M\n" - "-----END DSA PRIVATE KEY-----\n"; - -static const char dsa_sig[] = - "\x30\x3d\x02\x1c\x2e\x40\x14\xb3\x7a\x3f\xc0\x4f\x06\x74\x4f\xa6\x5f\xc2\x0a\x46\x35\x38\x88\xb4\x1a\xcf\x94\x02\x40\x42\x7c\x7f\x02\x1d\x00\x98\xfc\xf1\x08\x66\xf1\x86\x28\xc9\x73\x9e\x2b\x5d\xce\x57\xe8\xb5\xeb\xcf\xa3\xf6\x60\xf6\x63\x16\x0e\xc0\x42"; - static int test_known_sig(gnutls_pk_algorithm_t pk, unsigned bits, gnutls_digest_algorithm_t dig, const void *privkey, size_t privkey_size, const void *stored_sig, size_t stored_sig_size, - unsigned deterministic_sigs) + gnutls_privkey_flags_t flags) { int ret; gnutls_datum_t sig = { NULL, 0 }; @@ -356,7 +476,11 @@ static int test_known_sig(gnutls_pk_algorithm_t pk, unsigned bits, gnutls_privkey_t key; char param_name[32]; - if (pk == GNUTLS_PK_EC) { + if (pk == GNUTLS_PK_EC || + pk == GNUTLS_PK_GOST_01 || + pk == GNUTLS_PK_GOST_12_256 || + pk == GNUTLS_PK_GOST_12_512) + { snprintf(param_name, sizeof(param_name), "%s", gnutls_ecc_curve_get_name(GNUTLS_BITS_TO_CURVE (bits))); @@ -390,39 +514,37 @@ static int test_known_sig(gnutls_pk_algorithm_t pk, unsigned bits, goto cleanup; } - /* Test if the signature we generate matches the stored */ + ret = gnutls_privkey_sign_data(key, dig, flags, &signed_data, &sig); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + /* Test if the generated signature matches the stored */ ssig.data = (void *) stored_sig; ssig.size = stored_sig_size; - if (deterministic_sigs != 0) { /* do not compare against stored signature if not provided */ - ret = - gnutls_privkey_sign_data(key, dig, 0, &signed_data, - &sig); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - if (sig.size != ssig.size - || memcmp(sig.data, ssig.data, sig.size) != 0) { - ret = GNUTLS_E_SELF_TEST_ERROR; + if (sig.size != ssig.size + || memcmp(sig.data, ssig.data, sig.size) != 0) { + ret = GNUTLS_E_SELF_TEST_ERROR; #if 0 - unsigned i; - fprintf(stderr, "\nstored[%d]: ", ssig.size); - for (i = 0; i < ssig.size; i++) - fprintf(stderr, "\\x%.2x", ssig.data[i]); - - fprintf(stderr, "\ngenerated[%d]: ", sig.size); - for (i = 0; i < sig.size; i++) - fprintf(stderr, "\\x%.2x", sig.data[i]); - fprintf(stderr, "\n"); + unsigned i; + fprintf(stderr, "Algorithm: %s-%s\n", + gnutls_pk_get_name(pk), param_name); + fprintf(stderr, "\nstored[%d]: ", ssig.size); + for (i = 0; i < ssig.size; i++) + fprintf(stderr, "\\x%.2x", ssig.data[i]); + + fprintf(stderr, "\ngenerated[%d]: ", sig.size); + for (i = 0; i < sig.size; i++) + fprintf(stderr, "\\x%.2x", sig.data[i]); + fprintf(stderr, "\n"); #endif - gnutls_assert(); - goto cleanup; - } + gnutls_assert(); + goto cleanup; } - /* Test if we can verify the signature */ + /* Test if we can verify the generated signature */ ret = gnutls_pubkey_import_privkey(pub, key, 0, 0); if (ret < 0) { @@ -432,7 +554,7 @@ static int test_known_sig(gnutls_pk_algorithm_t pk, unsigned bits, ret = gnutls_pubkey_verify_data2(pub, gnutls_pk_to_sign(pk, dig), 0, - &signed_data, &ssig); + &signed_data, &sig); if (ret < 0) { ret = GNUTLS_E_SELF_TEST_ERROR; gnutls_assert(); @@ -443,7 +565,7 @@ static int test_known_sig(gnutls_pk_algorithm_t pk, unsigned bits, ret = gnutls_pubkey_verify_data2(pub, gnutls_pk_to_sign(pk, dig), 0, - &bad_data, &ssig); + &bad_data, &sig); if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) { ret = GNUTLS_E_SELF_TEST_ERROR; @@ -469,28 +591,21 @@ static int test_known_sig(gnutls_pk_algorithm_t pk, unsigned bits, return ret; } -#define PK_TEST(pk, func, bits, dig) \ - ret = func(pk, bits, dig); \ +#define PK_TEST(pk, func, bits, sigalgo) \ + ret = func(pk, bits, sigalgo); \ if (ret < 0) { \ gnutls_assert(); \ goto cleanup; \ - } \ - if (all == 0) \ - return 0 + } -#define PK_KNOWN_TEST(pk, det, bits, dig, pkey, sig) \ - ret = test_known_sig(pk, bits, dig, pkey, sizeof(pkey)-1, sig, sizeof(sig)-1, det); \ +#define PK_KNOWN_TEST(pk, bits, dig, pkey, sig, flags) \ + ret = test_known_sig(pk, bits, dig, pkey, sizeof(pkey)-1, sig, sizeof(sig)-1, flags); \ if (ret < 0) { \ gnutls_assert(); \ goto cleanup; \ - } \ - if (all == 0) \ - return 0 + } -/* This file is also included by the test app in tests/slow/cipher-test, so in that - * case we cannot depend on gnutls internals */ -#ifndef AVOID_INTERNALS /* Known answer tests for DH */ static int test_dh(void) { @@ -608,8 +723,8 @@ static int test_ecdh(void) gnutls_pk_params_init(&priv); gnutls_pk_params_init(&pub); - priv.flags = GNUTLS_ECC_CURVE_SECP256R1; - pub.flags = GNUTLS_ECC_CURVE_SECP256R1; + priv.curve = GNUTLS_ECC_CURVE_SECP256R1; + pub.curve = GNUTLS_ECC_CURVE_SECP256R1; priv.algo = pub.algo = GNUTLS_PK_EC; @@ -679,11 +794,10 @@ static int test_ecdh(void) return ret; } -#endif /*- * gnutls_pk_self_test: - * @all: if non-zero then tests to all public key algorithms are performed. + * @flags: GNUTLS_SELF_TEST_FLAG flags * @pk: the algorithm to use * * This function will run self tests on the provided public key algorithm. @@ -692,98 +806,166 @@ static int test_ecdh(void) * * Since: 3.3.0-FIPS140 -*/ -int gnutls_pk_self_test(unsigned all, gnutls_pk_algorithm_t pk) +int gnutls_pk_self_test(unsigned flags, gnutls_pk_algorithm_t pk) { int ret; - if (all != 0) + bool is_post = false; + bool is_fips140_mode_enabled = false; + + if (flags & GNUTLS_SELF_TEST_FLAG_ALL) pk = GNUTLS_PK_UNKNOWN; + if (_gnutls_get_lib_state() == LIB_STATE_SELFTEST) + is_post = true; + + if (gnutls_fips140_mode_enabled()) + is_fips140_mode_enabled = true; + switch (pk) { case GNUTLS_PK_UNKNOWN: - + FALLTHROUGH; case GNUTLS_PK_DH: -#ifndef AVOID_INTERNALS ret = test_dh(); if (ret < 0) { gnutls_assert(); goto cleanup; } - if (all == 0) + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL)) return 0; -#endif + FALLTHROUGH; case GNUTLS_PK_RSA: - PK_KNOWN_TEST(GNUTLS_PK_RSA, 1, 2048, GNUTLS_DIG_SHA256, - rsa_key2048, rsa_sig); + PK_KNOWN_TEST(GNUTLS_PK_RSA, 2048, GNUTLS_DIG_SHA256, + rsa_2048_privkey, rsa_2048_sig, 0); + PK_TEST(GNUTLS_PK_RSA, test_rsa_enc, 2048, 0); - PK_TEST(GNUTLS_PK_RSA, test_sig, 3072, GNUTLS_DIG_SHA256); + + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL)) + return 0; + + FALLTHROUGH; + case GNUTLS_PK_RSA_PSS: + PK_TEST(GNUTLS_PK_RSA_PSS, test_sig, 2048, + GNUTLS_SIGN_RSA_PSS_RSAE_SHA256); + + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL)) + return 0; + + FALLTHROUGH; case GNUTLS_PK_DSA: - PK_KNOWN_TEST(GNUTLS_PK_DSA, 0, 2048, GNUTLS_DIG_SHA256, - dsa_privkey, dsa_sig); - PK_TEST(GNUTLS_PK_DSA, test_sig, 3072, GNUTLS_DIG_SHA256); - case GNUTLS_PK_EC: /* Testing ECDSA */ - /* Test ECDH */ -#ifndef AVOID_INTERNALS + if (is_post || !is_fips140_mode_enabled) { + PK_KNOWN_TEST(GNUTLS_PK_DSA, 2048, GNUTLS_DIG_SHA256, + dsa_2048_privkey, dsa_2048_sig, + GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE); + } else { + PK_TEST(GNUTLS_PK_DSA, test_sig, 2048, + GNUTLS_SIGN_DSA_SHA256); + } + + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL)) + return 0; + + FALLTHROUGH; + case GNUTLS_PK_EC: + /* Test ECDH and ECDSA */ ret = test_ecdh(); if (ret < 0) { gnutls_assert(); goto cleanup; } - if (all == 0) + /* Test ECDSA */ + if (is_post || !is_fips140_mode_enabled) { + PK_KNOWN_TEST(GNUTLS_PK_EC, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP256R1), + GNUTLS_DIG_SHA256, ecdsa_secp256r1_privkey, + ecdsa_secp256r1_sig, GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE); + } else { + PK_TEST(GNUTLS_PK_EC, test_sig, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP256R1), + GNUTLS_SIGN_ECDSA_SHA256); + } + + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL)) return 0; -#endif - /* Test ECDSA */ + if (is_post || !is_fips140_mode_enabled) { + PK_KNOWN_TEST(GNUTLS_PK_EC, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP384R1), + GNUTLS_DIG_SHA384, ecdsa_secp384r1_privkey, + ecdsa_secp384r1_sig, GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE); + } else { + PK_TEST(GNUTLS_PK_EC, test_sig, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP384R1), + GNUTLS_SIGN_ECDSA_SHA384); + } + + if (is_post || !is_fips140_mode_enabled) { + PK_KNOWN_TEST(GNUTLS_PK_EC, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP521R1), + GNUTLS_DIG_SHA512, ecdsa_secp521r1_privkey, + ecdsa_secp521r1_sig, GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE); + } else { + PK_TEST(GNUTLS_PK_EC, test_sig, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP521R1), + GNUTLS_SIGN_ECDSA_SHA512); + } + #ifdef ENABLE_NON_SUITEB_CURVES - PK_KNOWN_TEST(GNUTLS_PK_EC, 0, - GNUTLS_CURVE_TO_BITS - (GNUTLS_ECC_CURVE_SECP192R1), - GNUTLS_DIG_SHA256, ecdsa_secp192r1_privkey, - ecdsa_secp192r1_sig); - PK_TEST(GNUTLS_PK_EC, test_sig, - GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP192R1), - GNUTLS_DIG_SHA256); - - PK_KNOWN_TEST(GNUTLS_PK_EC, 0, - GNUTLS_CURVE_TO_BITS - (GNUTLS_ECC_CURVE_SECP224R1), - GNUTLS_DIG_SHA256, ecdsa_secp224r1_privkey, - ecdsa_secp224r1_sig); - PK_TEST(GNUTLS_PK_EC, test_sig, - GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP224R1), - GNUTLS_DIG_SHA256); + if (is_post || !is_fips140_mode_enabled) { + PK_KNOWN_TEST(GNUTLS_PK_EC, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP192R1), + GNUTLS_DIG_SHA256, ecdsa_secp192r1_privkey, + ecdsa_secp192r1_sig, GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE); + } else { + PK_TEST(GNUTLS_PK_EC, test_sig, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP192R1), + GNUTLS_SIGN_ECDSA_SHA256); + } + + if (is_post || !is_fips140_mode_enabled) { + PK_KNOWN_TEST(GNUTLS_PK_EC, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP224R1), + GNUTLS_DIG_SHA256, ecdsa_secp224r1_privkey, + ecdsa_secp224r1_sig, GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE); + } else { + PK_TEST(GNUTLS_PK_EC, test_sig, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP224R1), + GNUTLS_SIGN_ECDSA_SHA256); + } #endif - PK_KNOWN_TEST(GNUTLS_PK_EC, 0, - GNUTLS_CURVE_TO_BITS - (GNUTLS_ECC_CURVE_SECP256R1), - GNUTLS_DIG_SHA256, ecdsa_secp256r1_privkey, - ecdsa_secp256r1_sig); - PK_TEST(GNUTLS_PK_EC, test_sig, - GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP256R1), - GNUTLS_DIG_SHA256); - - PK_KNOWN_TEST(GNUTLS_PK_EC, 0, - GNUTLS_CURVE_TO_BITS - (GNUTLS_ECC_CURVE_SECP384R1), - GNUTLS_DIG_SHA256, ecdsa_secp384r1_privkey, - ecdsa_secp384r1_sig); - PK_TEST(GNUTLS_PK_EC, test_sig, - GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP384R1), - GNUTLS_DIG_SHA384); - - PK_KNOWN_TEST(GNUTLS_PK_EC, 0, - GNUTLS_CURVE_TO_BITS - (GNUTLS_ECC_CURVE_SECP521R1), - GNUTLS_DIG_SHA512, ecdsa_secp521r1_privkey, - ecdsa_secp521r1_sig); - PK_TEST(GNUTLS_PK_EC, test_sig, - GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_SECP521R1), - GNUTLS_DIG_SHA512); - break; +#if ENABLE_GOST + FALLTHROUGH; + case GNUTLS_PK_GOST_01: + PK_TEST(GNUTLS_PK_GOST_01, test_sig, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_GOST256CPA), + GNUTLS_SIGN_GOST_94); + + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL)) + return 0; + + FALLTHROUGH; + case GNUTLS_PK_GOST_12_256: + PK_TEST(GNUTLS_PK_GOST_12_256, test_sig, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_GOST256CPA), + GNUTLS_SIGN_GOST_256); + + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL)) + return 0; + + FALLTHROUGH; + case GNUTLS_PK_GOST_12_512: + PK_TEST(GNUTLS_PK_GOST_12_512, test_sig, + GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_GOST512A), + GNUTLS_SIGN_GOST_512); + + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL)) + return 0; +#endif + break; default: return gnutls_assert_val(GNUTLS_E_NO_SELF_TEST); } diff --git a/lib/crypto-selftests.c b/lib/crypto-selftests.c index 63ab44f0b4..f904b029b2 100644 --- a/lib/crypto-selftests.c +++ b/lib/crypto-selftests.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 Red Hat + * Copyright (C) 2013-2018 Red Hat * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -37,7 +37,6 @@ #define V(x) (x), (sizeof(x)/sizeof(x[0])) - /* This does check the AES and SHA implementation against test vectors. * This should not run under valgrind in order to use the native * cpu instructions (AES-NI or padlock). @@ -53,9 +52,13 @@ struct cipher_vectors_st { const uint8_t *iv; unsigned int iv_size; + + const uint8_t *internal_iv; + unsigned int internal_iv_size; }; struct cipher_aead_vectors_st { + unsigned compat_apis; const uint8_t *key; unsigned int key_size; @@ -70,10 +73,12 @@ struct cipher_aead_vectors_st { const uint8_t *iv; const uint8_t *tag; unsigned tag_size; + unsigned tag_prepended; }; const struct cipher_aead_vectors_st chacha_poly1305_vectors[] = { { + .compat_apis = 1, STR(key, key_size, "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a\xf3\x33\x88\x86\x04\xf6\xb5\xf0\x47\x39\x17\xc1\x40\x2b\x80\x09\x9d\xca\x5c\xbc\x20\x70\x75\xc0"), .auth = (void*)"\xf3\x33\x88\x86\x00\x00\x00\x00\x00\x00\x4e\x91", @@ -90,6 +95,7 @@ const struct cipher_aead_vectors_st chacha_poly1305_vectors[] = { const struct cipher_aead_vectors_st aes128_gcm_vectors[] = { { + .compat_apis = 1, STR(key, key_size, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), .auth = NULL, @@ -103,6 +109,7 @@ const struct cipher_aead_vectors_st aes128_gcm_vectors[] = { .tag = (void *) "\x58\xe2\xfc\xce\xfa\x7e\x30\x61\x36\x7f\x1d\x57\xa4\xe7\x45\x5a"}, { + .compat_apis = 1, STR(key, key_size, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), .auth = NULL, @@ -117,6 +124,7 @@ const struct cipher_aead_vectors_st aes128_gcm_vectors[] = { .tag = (void *) "\xab\x6e\x47\xd4\x2c\xec\x13\xbd\xf5\x3a\x67\xb2\x12\x57\xbd\xdf"}, { + .compat_apis = 1, STR(key, key_size, "\xfe\xff\xe9\x92\x86\x65\x73\x1c\x6d\x6a\x8f\x94\x67\x30\x83\x08"), .auth = (void *) @@ -135,6 +143,7 @@ const struct cipher_aead_vectors_st aes128_gcm_vectors[] = { const struct cipher_aead_vectors_st aes256_gcm_vectors[] = { { + .compat_apis = 1, STR(key, key_size, "\xfe\xff\xe9\x92\x86\x65\x73\x1c\x6d\x6a\x8f\x94\x67\x30\x83\x08\xfe\xff\xe9\x92\x86\x65\x73\x1c\x6d\x6a\x8f\x94\x67\x30\x83\x08"), .auth = NULL, @@ -154,7 +163,9 @@ const struct cipher_aead_vectors_st aes256_gcm_vectors[] = { }; const struct cipher_aead_vectors_st aes256_ccm_vectors[] = { - { STR(key, key_size, + { + .compat_apis = 0, + STR(key, key_size, "\xfb\x76\x15\xb2\x3d\x80\x89\x1d\xd4\x70\x98\x0b\xc7\x95\x84\xc8\xb2\xfb\x64\xce\x60\x97\x8f\x4d\x17\xfc\xe4\x5a\x49\xe8\x30\xb7"), .auth = NULL, .auth_size = 0, @@ -168,6 +179,7 @@ const struct cipher_aead_vectors_st aes256_ccm_vectors[] = { .tag = (void *) "\x34\x72\xe1\x14\x5f\x2c\x0c\xbe\x14\x63\x49\x06\x2c\xf0\xe4\x23"}, { + .compat_apis = 0, STR(key, key_size, "\xfb\x76\x15\xb2\x3d\x80\x89\x1d\xd4\x70\x98\x0b\xc7\x95\x84\xc8\xb2\xfb\x64\xce\x60\x97\x87\x8d\x17\xfc\xe4\x5a\x49\xe8\x30\xb7"), STR(auth, auth_size, "\x36"), @@ -184,6 +196,7 @@ const struct cipher_aead_vectors_st aes256_ccm_vectors[] = { const struct cipher_aead_vectors_st aes128_ccm_vectors[] = { { + .compat_apis = 0, STR(key, key_size, "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF"), STR(auth, auth_size, "\x08\xD0\x84\x21\x43\x01\x00\x00\x00\x00\x48\xDE\xAC\x02\x05\x00\x00\x00\x55\xCF\x00\x00\x51\x52\x53\x54"), @@ -195,6 +208,7 @@ const struct cipher_aead_vectors_st aes128_ccm_vectors[] = { .tag = (void *) "\x22\x3B\xC1\xEC\x84\x1A\xB5\x53"}, { + .compat_apis = 0, STR(key, key_size, "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"), STR(auth, auth_size, "\x00\x01\x02\x03\x04\x05\x06\x07"), @@ -209,6 +223,7 @@ const struct cipher_aead_vectors_st aes128_ccm_vectors[] = { "\x4d\xac\x25\x5d"}, /* from rfc3610 */ { + .compat_apis = 0, STR(key, key_size, "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF"), STR(auth, auth_size, "\x00\x01\x02\x03\x04\x05\x06\x07"), @@ -222,6 +237,7 @@ const struct cipher_aead_vectors_st aes128_ccm_vectors[] = { .tag = (void *) "\x04\x8C\x56\x60\x2C\x97\xAC\xBB\x74\x90"}, { + .compat_apis = 0, STR(key, key_size, "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF"), STR(auth, auth_size, "\x00\x01\x02\x03\x04\x05\x06\x07"), @@ -361,102 +377,880 @@ const struct cipher_vectors_st arcfour_vectors[] = { /* RFC6229 */ }, }; -static int test_cipher(gnutls_cipher_algorithm_t cipher, - const struct cipher_vectors_st *vectors, - size_t vectors_size) +const struct cipher_vectors_st aes128_cfb8_vectors[] = { /* NIST 800-38a */ + { + STR(key, key_size, + "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c"), + STR(plaintext, plaintext_size, + "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a" + "\xae\x2d"), + .ciphertext = (uint8_t *) + "\x3b\x79\x42\x4c\x9c\x0d\xd4\x36\xba\xce\x9e\x0e\xd4\x58\x6a\x4f" + "\x32\xb9", + STR(iv, iv_size, + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"), + /* the least significant 16 bytes of ciphertext */ + STR(internal_iv, internal_iv_size, + "\x42\x4c\x9c\x0d\xd4\x36\xba\xce\x9e\x0e\xd4\x58\x6a\x4f\x32\xb9"), + }, +}; + +const struct cipher_vectors_st aes192_cfb8_vectors[] = { /* NIST 800-38a */ + { + STR(key, key_size, + "\x8e\x73\xb0\xf7\xda\x0e\x64\x52\xc8\x10\xf3\x2b\x80\x90\x79\xe5" + "\x62\xf8\xea\xd2\x52\x2c\x6b\x7b"), + STR(plaintext, plaintext_size, + "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a" + "\xae\x2d"), + .ciphertext = (uint8_t *) + "\xcd\xa2\x52\x1e\xf0\xa9\x05\xca\x44\xcd\x05\x7c\xbf\x0d\x47\xa0" + "\x67\x8a", + STR(iv, iv_size, + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"), + /* the least significant 16 bytes of ciphertext */ + STR(internal_iv, internal_iv_size, + "\x52\x1e\xf0\xa9\x05\xca\x44\xcd\x05\x7c\xbf\x0d\x47\xa0\x67\x8a"), + }, +}; + +const struct cipher_vectors_st aes256_cfb8_vectors[] = { /* NIST 800-38a */ + { + STR(key, key_size, + "\x60\x3d\xeb\x10\x15\xca\x71\xbe\x2b\x73\xae\xf0\x85\x7d\x77\x81" + "\x1f\x35\x2c\x07\x3b\x61\x08\xd7\x2d\x98\x10\xa3\x09\x14\xdf\xf4"), + STR(plaintext, plaintext_size, + "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a" + "\xae\x2d"), + .ciphertext = (uint8_t *) + "\xdc\x1f\x1a\x85\x20\xa6\x4d\xb5\x5f\xcc\x8a\xc5\x54\x84\x4e\x88" + "\x97\x00", + STR(iv, iv_size, + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"), + /* the least significant 16 bytes of ciphertext */ + STR(internal_iv, internal_iv_size, + "\x1a\x85\x20\xa6\x4d\xb5\x5f\xcc\x8a\xc5\x54\x84\x4e\x88\x97\x00"), + }, +}; + +/* GOST 28147-89 vectors come from the testsuite contributed to OpenSSL by + * Sergey E. Leontiev. CryptoPro-B test vector is just truncated. + * TC26Z is calculated using Nettle */ +const struct cipher_vectors_st gost28147_cpa_cfb_vectors[] = { + { + STR(key, key_size, + "\x8d\x5a\x2c\x83\xa7\xc7\x0a\x61\xd6\x1b\x34\xb5\x1f\xdf\x42\x68" + "\x66\x71\xa3\x5d\x87\x4c\xfd\x84\x99\x36\x63\xb6\x1e\xd6\x0d\xad"), + STR(plaintext, plaintext_size, + "\xd2\xfd\xf8\x3a\xc1\xb4\x39\x23\x2e\xaa\xcc\x98\x0a\x02\xda\x33"), + .ciphertext = (uint8_t *) + "\x88\xb7\x75\x16\x74\xa5\xee\x2d\x14\xfe\x91\x67\xd0\x5c\xcc\x40", + STR(iv, iv_size, + "\x46\x60\x6f\x0d\x88\x34\x23\x5a"), + }, +}; + +const struct cipher_vectors_st gost28147_cpb_cfb_vectors[] = { + { + STR(key, key_size, + "\x48\x0c\x74\x1b\x02\x6b\x55\xd5\xb6\x6d\xd7\x1d\x40\x48\x05\x6b" + "\x6d\xeb\x3c\x29\x0f\x84\x80\x23\xee\x0d\x47\x77\xe3\xfe\x61\xc9"), + STR(plaintext, plaintext_size, + "\x8c\x9c\x44\x35\xfb\xe9\xa5\xa3\xa0\xae\x28\x56\x91\x10\x8e\x1e" + "\xd2\xbb\x18\x53\x81\x27\x0d\xa6\x68\x59\x36\xc5\x81\x62\x9a\x8e" + "\x7d\x50\xf1\x6f\x97\x62\x29\xec\x80\x51\xe3\x7d\x6c\xc4\x07\x95" + "\x28\x63\xdc\xb4\xb9\x2d\xb8\x13\xb1\x05\xb5\xf9\xeb\x75\x37"), + .ciphertext = (uint8_t *) + "\x23\xc6\x7f\x20\xa1\x23\x58\xbc\x7b\x05\xdb\x21\x15\xcf\x96\x41" + "\xc7\x88\xef\x76\x5c\x49\xdb\x42\xbf\xf3\xc0\xf5\xbd\x5d\xd9\x8e" + "\xaf\x3d\xf4\xe4\xda\x88\xbd\xbc\x47\x5d\x76\x07\xc9\x5f\x54\x1d" + "\x1d\x6a\xa1\x2e\x18\xd6\x60\x84\x02\x18\x37\x92\x92\x15\xab", + STR(iv, iv_size, + "\x1f\x3f\x82\x1e\x0d\xd8\x1e\x22"), + }, +}; + +const struct cipher_vectors_st gost28147_cpc_cfb_vectors[] = { + { + STR(key, key_size, + "\x77\xc3\x45\x8e\xf6\x42\xe7\x04\x8e\xfc\x08\xe4\x70\x96\xd6\x05" + "\x93\x59\x02\x6d\x6f\x97\xca\xe9\xcf\x89\x44\x4b\xde\x6c\x22\x1d"), + STR(plaintext, plaintext_size, + "\x07\x9c\x91\xbe"), + .ciphertext = (uint8_t *) + "\x19\x35\x81\x34", + STR(iv, iv_size, + "\x43\x7c\x3e\x8e\x2f\x2a\x00\x98"), + }, +}; + +const struct cipher_vectors_st gost28147_cpd_cfb_vectors[] = { + { + STR(key, key_size, + "\x38\x9f\xe8\x37\xff\x9c\x5d\x29\xfc\x48\x55\xa0\x87\xea\xe8\x40" + "\x20\x87\x5b\xb2\x01\x15\x55\xa7\xe3\x2d\xcb\x3d\xd6\x59\x04\x73"), + STR(plaintext, plaintext_size, + "\x2f\x31\xd8\x83\xb4\x20\xe8\x6e\xda"), + .ciphertext = (uint8_t *) + "\x6d\xa4\xed\x40\x08\x88\x71\xad\x16", + STR(iv, iv_size, + "\xc5\xa2\xd2\x1f\x2f\xdf\xb8\xeb"), + }, +}; + +const struct cipher_vectors_st gost28147_tc26z_cfb_vectors[] = { + { + STR(key, key_size, + "\x8d\x5a\x2c\x83\xa7\xc7\x0a\x61\xd6\x1b\x34\xb5\x1f\xdf\x42\x68" + "\x66\x71\xa3\x5d\x87\x4c\xfd\x84\x99\x36\x63\xb6\x1e\xd6\x0d\xad"), + STR(plaintext, plaintext_size, + "\xd2\xfd\xf8\x3a\xc1\xb4\x39\x23\x2e\xaa\xcc\x98\x0a\x02\xda\x33"), + .ciphertext = (uint8_t *) + "\xed\xa7\xf1\x41\x01\x9c\xbd\xcd\x44\x6b\x00\x96\x87\xf7\xc7\xe6", + STR(iv, iv_size, + "\x46\x60\x6f\x0d\x88\x34\x23\x5a"), + }, +}; + +const struct cipher_vectors_st gost28147_tc26z_cnt_vectors[] = { + { + STR(key, key_size, + "\x59\x9f\x84\xba\xc3\xf3\xd2\xf1\x60\xe1\xe3\xf2\x6a\x96\x1a\xf9" + "\x9c\x48\xb2\x4e\xbc\xbb\xbf\x7c\xd8\xf3\xac\xcd\x96\x8d\x28\x6a"), + STR(plaintext, plaintext_size, + "\x90\xa2\x39\x66\xae\x01\xb9\xa3\x52\x4e\xc8\xed\x6c\xdd\x88\x30"), + .ciphertext = (uint8_t *) + "\xe8\xb1\x4f\xc7\x30\xdc\x25\xbb\x36\xba\x64\x3c\x17\xdb\xff\x99", + STR(iv, iv_size, + "\x8d\xaf\xa8\xd1\x58\xed\x05\x8d"), + } +}; + +const struct cipher_vectors_st aes128_xts_vectors[] = { + { + STR(key, key_size, + "\xa1\xb9\x0c\xba\x3f\x06\xac\x35\x3b\x2c\x34\x38\x76\x08\x17\x62" + "\x09\x09\x23\x02\x6e\x91\x77\x18\x15\xf2\x9d\xab\x01\x93\x2f\x2f"), + STR(plaintext, plaintext_size, + "\xeb\xab\xce\x95\xb1\x4d\x3c\x8d\x6f\xb3\x50\x39\x07\x90\x31\x1c"), + .ciphertext = (uint8_t *) + "\x77\x8a\xe8\xb4\x3c\xb9\x8d\x5a\x82\x50\x81\xd5\xbe\x47\x1c\x63", + STR(iv, iv_size, + "\x4f\xae\xf7\x11\x7c\xda\x59\xc6\x6e\x4b\x92\x01\x3e\x76\x8a\xd5"), + }, + { + STR(key, key_size, + "\x75\x03\x72\xc3\xd8\x2f\x63\x38\x28\x67\xbe\x66\x62\xac\xfa\x4a" + "\x25\x9b\xe3\xfa\x9b\xc6\x62\xa1\x15\x4f\xfa\xae\xd8\xb4\x48\xa5"), + STR(plaintext, plaintext_size, + "\xd8\xe3\xa5\x65\x59\xa4\x36\xce\x0d\x8b\x21\x2c\x80\xa8\x8b\x23" + "\xaf\x62\xb0\xe5\x98\xf2\x08\xe0\x3c\x1f\x2e\x9f\xa5\x63\xa5\x4b"), + .ciphertext = (uint8_t *) + "\x49\x5f\x78\x55\x53\x5e\xfd\x13\x34\x64\xdc\x9a\x9a\xbf\x8a\x0f" + "\x28\xfa\xcb\xce\x21\xbd\x3c\x22\x17\x8e\xc4\x89\xb7\x99\xe4\x91", + STR(iv, iv_size, + "\x93\xa2\x92\x54\xc4\x7e\x42\x60\x66\x96\x21\x30\x7d\x4f\x5c\xd3"), + }, +}; + +const struct cipher_vectors_st aes256_xts_vectors[] = { + { + STR(key, key_size, + "\x1e\xa6\x61\xc5\x8d\x94\x3a\x0e\x48\x01\xe4\x2f\x4b\x09\x47\x14" + "\x9e\x7f\x9f\x8e\x3e\x68\xd0\xc7\x50\x52\x10\xbd\x31\x1a\x0e\x7c" + "\xd6\xe1\x3f\xfd\xf2\x41\x8d\x8d\x19\x11\xc0\x04\xcd\xa5\x8d\xa3" + "\xd6\x19\xb7\xe2\xb9\x14\x1e\x58\x31\x8e\xea\x39\x2c\xf4\x1b\x08"), + STR(plaintext, plaintext_size, + "\x2e\xed\xea\x52\xcd\x82\x15\xe1\xac\xc6\x47\xe8\x10\xbb\xc3\x64" + "\x2e\x87\x28\x7f\x8d\x2e\x57\xe3\x6c\x0a\x24\xfb\xc1\x2a\x20\x2e"), + .ciphertext = (uint8_t *) + "\xcb\xaa\xd0\xe2\xf6\xce\xa3\xf5\x0b\x37\xf9\x34\xd4\x6a\x9b\x13" + "\x0b\x9d\x54\xf0\x7e\x34\xf3\x6a\xf7\x93\xe8\x6f\x73\xc6\xd7\xdb", + STR(iv, iv_size, + "\xad\xf8\xd9\x26\x27\x46\x4a\xd2\xf0\x42\x8e\x84\xa9\xf8\x75\x64"), + }, +}; + +const struct cipher_aead_vectors_st aes128_siv_vectors[] = { + { + STR(key, key_size, + "\x7f\x7e\x7d\x7c\x7b\x7a\x79\x78\x77\x76\x75\x74\x73\x72\x71\x70" + "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"), + STR(auth, auth_size, + "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff" + "\xde\xad\xda\xda\xde\xad\xda\xda\xff\xee\xdd\xcc\xbb\xaa\x99\x88" + "\x77\x66\x55\x44\x33\x22\x11\x00"), + STR(plaintext, plaintext_size, + "\x74\x68\x69\x73\x20\x69\x73\x20\x73\x6f\x6d\x65\x20\x70\x6c\x61" + "\x69\x6e\x74\x65\x78\x74\x20\x74\x6f\x20\x65\x6e\x63\x72\x79\x70" + "\x74\x20\x75\x73\x69\x6e\x67\x20\x53\x49\x56\x2d\x41\x45\x53"), + .ciphertext = (uint8_t *) + "\xa4\xff\xb8\x7f\xdb\xa9\x7c\x89\x44\xa6\x23\x25\xf1\x33\xb4\xe0" + "\x1c\xa5\x52\x76\xe2\x26\x1c\x1a\x1d\x1d\x42\x48\xd1\xda\x30\xba" + "\x52\xb9\xc8\xd7\x95\x5d\x65\xc8\xd2\xce\x6e\xb7\xe3\x67\xd0", + STR(iv, iv_size, + "\x02\x03\x04"), + .tag_size = 16, + .tag = (void *) + "\xf1\xdb\xa3\x3d\xe5\xb3\x36\x9e\x88\x3f\x67\xb6\xfc\x82\x3c\xee", + .tag_prepended = 1, + } +}; + +const struct cipher_aead_vectors_st aes256_siv_vectors[] = { + { + STR(key, key_size, + "\xc2\x7d\xf2\xfd\xae\xc3\x5d\x4a\x2a\x41\x2a\x50\xc3\xe8\xc4\x7d" + "\x2d\x56\x8e\x91\xa3\x8e\x54\x14\x8a\xbd\xc0\xb6\xe8\x6c\xaf\x87" + "\x69\x5c\x0a\x8a\xdf\x4c\x5f\x8e\xb2\xc6\xc8\xb1\x36\x52\x98\x64" + "\xf3\xb8\x4b\x3a\xe8\xe3\x67\x6c\xe7\x60\xc4\x61\xf3\xa1\x3e\x83"), + STR(auth, auth_size, + "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff" + "\xde\xad\xda\xda\xde\xad\xda\xda\xff\xee\xdd\xcc\xbb\xaa\x99\x88" + "\x77\x66\x55\x44\x33\x22\x11\x00"), + STR(plaintext, plaintext_size, + "\x74\x68\x69\x73\x20\x69\x73\x20\x73\x6f\x6d\x65\x20\x70\x6c\x61" + "\x69\x6e\x74\x65\x78\x74\x20\x74\x6f\x20\x65\x6e\x63\x72\x79\x70" + "\x74\x20\x75\x73\x69\x6e\x67\x20\x53\x49\x56\x2d\x41\x45\x53"), + .ciphertext = (uint8_t *) + "\x50\x93\x3d\xa8\x04\x7b\xc3\x06\xfa\xba\xf0\xc3\xd9\xfa\x84\x71" + "\xc7\x0a\x7d\xef\x39\xa2\xf9\x1d\x68\xa2\x02\x1c\x99\xac\x7e\x2a\x24" + "\x53\x5a\x13\x4b\xa2\x3e\xc1\x57\x87\xce\xbe\x5c\x53\xcc", + STR(iv, iv_size, + "\x09\xf9\x11\x02\x9d\x74\xe3\x5b\xd8\x41\x56\xc5\x63\x56\x88\xc0"), + .tag_size = 16, + .tag = (void *) + "\x5a\x97\x9b\x0d\xa5\x8f\xde\x80\x51\x62\x1a\xe6\xbf\x96\xfe\xda", + .tag_prepended = 1, + } +}; + +const struct cipher_vectors_st chacha20_32_vectors[] = { /* RFC8439 */ + { + STR(key, key_size, + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"), + STR(plaintext, plaintext_size, + "\x4c\x61\x64\x69\x65\x73\x20\x61\x6e\x64\x20\x47\x65\x6e\x74\x6c\x65\x6d\x65\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x63\x6c\x61\x73\x73\x20\x6f\x66\x20\x27\x39\x39\x3a\x20\x49\x66\x20\x49\x20\x63\x6f\x75\x6c\x64\x20\x6f\x66\x66\x65\x72\x20\x79\x6f\x75\x20\x6f\x6e\x6c\x79\x20\x6f\x6e\x65\x20\x74\x69\x70\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x66\x75\x74\x75\x72\x65\x2c\x20\x73\x75\x6e\x73\x63\x72\x65\x65\x6e\x20\x77\x6f\x75\x6c\x64\x20\x62\x65\x20\x69\x74\x2e"), + .ciphertext = (uint8_t *) + "\x6e\x2e\x35\x9a\x25\x68\xf9\x80\x41\xba\x07\x28\xdd\x0d\x69\x81\xe9\x7e\x7a\xec\x1d\x43\x60\xc2\x0a\x27\xaf\xcc\xfd\x9f\xae\x0b\xf9\x1b\x65\xc5\x52\x47\x33\xab\x8f\x59\x3d\xab\xcd\x62\xb3\x57\x16\x39\xd6\x24\xe6\x51\x52\xab\x8f\x53\x0c\x35\x9f\x08\x61\xd8\x07\xca\x0d\xbf\x50\x0d\x6a\x61\x56\xa3\x8e\x08\x8a\x22\xb6\x5e\x52\xbc\x51\x4d\x16\xcc\xf8\x06\x81\x8c\xe9\x1a\xb7\x79\x37\x36\x5a\xf9\x0b\xbf\x74\xa3\x5b\xe6\xb4\x0b\x8e\xed\xf2\x78\x5e\x42\x87\x4d", + STR(iv, iv_size, + "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00") + }, +}; + +static int test_cipher(gnutls_cipher_algorithm_t cipher, + const struct cipher_vectors_st *vectors, + size_t vectors_size, unsigned flags) +{ + gnutls_cipher_hd_t hd; + int ret; + unsigned int i; + uint8_t tmp[384]; + gnutls_datum_t key, iv = {NULL, 0}; + + for (i = 0; i < vectors_size; i++) { + key.data = (void *) vectors[i].key; + key.size = vectors[i].key_size; + + if (vectors[i].iv != NULL) { + iv.data = (void *) vectors[i].iv; + iv.size = gnutls_cipher_get_iv_size(cipher); + } + + if (iv.size != vectors[i].iv_size) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + + ret = gnutls_cipher_init(&hd, cipher, &key, &iv); + if (ret < 0) { + _gnutls_debug_log("error initializing: %s\n", + gnutls_cipher_get_name(cipher)); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + ret = + gnutls_cipher_encrypt2(hd, + vectors[i].plaintext, + vectors[i].plaintext_size, + tmp, sizeof(tmp)); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + + if (memcmp + (tmp, vectors[i].ciphertext, + vectors[i].plaintext_size) != 0) { + _gnutls_debug_log("%s test vector %d failed!\n", + gnutls_cipher_get_name(cipher), + i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + /* check in-place encryption */ + if (cipher != GNUTLS_CIPHER_ARCFOUR_128) { /* arcfour is stream */ + gnutls_cipher_set_iv(hd, (void*)vectors[i].iv, vectors[i].iv_size); + + memcpy(tmp, vectors[i].plaintext, vectors[i].plaintext_size); + ret = gnutls_cipher_encrypt(hd, tmp, vectors[i].plaintext_size); + if (ret < 0) + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); + + if (memcmp(tmp, vectors[i].ciphertext, vectors[i].plaintext_size) != 0) { + _gnutls_debug_log("%s vector %d in-place encryption failed!\n", gnutls_cipher_get_name(cipher), i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + } + + /* check the internal IV */ + if (vectors[i].internal_iv_size > 0) { + ret = _gnutls_cipher_get_iv(hd, tmp, sizeof(tmp)); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + + if (memcmp(tmp, vectors[i].internal_iv, ret) != 0) { + _gnutls_debug_log("%s vector %d internal IV check failed!\n", + gnutls_cipher_get_name(cipher), + i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + } + + gnutls_cipher_deinit(hd); + } + + iv.size = gnutls_cipher_get_iv_size(cipher); + + for (i = 0; i < vectors_size; i++) { + key.data = (void *) vectors[i].key; + key.size = vectors[i].key_size; + + iv.data = (void *) vectors[i].iv; + + ret = gnutls_cipher_init(&hd, cipher, &key, &iv); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + + ret = + gnutls_cipher_decrypt2(hd, + vectors[i].ciphertext, + vectors[i].plaintext_size, tmp, + sizeof(tmp)); + if (ret < 0) { + _gnutls_debug_log + ("%s decryption of test vector %d failed!\n", + gnutls_cipher_get_name(cipher), i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + if (memcmp + (tmp, vectors[i].plaintext, + vectors[i].plaintext_size) != 0) { + _gnutls_debug_log("%s test vector %d failed!\n", + gnutls_cipher_get_name(cipher), + i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + /* check in-place decryption */ + if (cipher != GNUTLS_CIPHER_ARCFOUR_128) { /* arcfour is stream */ + gnutls_cipher_set_iv(hd, (void*)vectors[i].iv, vectors[i].iv_size); + + memcpy(tmp, vectors[i].ciphertext, vectors[i].plaintext_size); + ret = gnutls_cipher_decrypt(hd, tmp, vectors[i].plaintext_size); + if (ret < 0) + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); + + if (memcmp(tmp, vectors[i].plaintext, vectors[i].plaintext_size) != 0) { + _gnutls_debug_log("%s vector %d in-place decryption failed!\n", gnutls_cipher_get_name(cipher), i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + } + + gnutls_cipher_deinit(hd); + } + + _gnutls_debug_log + ("%s self check succeeded\n", + gnutls_cipher_get_name(cipher)); + + return 0; +} + +static int test_cipher_all_block_sizes(gnutls_cipher_algorithm_t cipher, + const struct cipher_vectors_st *vectors, + size_t vectors_size, unsigned flags) +{ + gnutls_cipher_hd_t hd; + int ret; + unsigned int i; + uint8_t tmp[384]; + gnutls_datum_t key, iv = {NULL, 0}; + size_t block; + size_t offset; + + for (i = 0; i < vectors_size; i++) { + for (block = 1; block <= vectors[i].plaintext_size; block++) { + key.data = (void *) vectors[i].key; + key.size = vectors[i].key_size; + + iv.data = (void *) vectors[i].iv; + iv.size = gnutls_cipher_get_iv_size(cipher); + + if (iv.size != vectors[i].iv_size) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + + ret = gnutls_cipher_init(&hd, cipher, &key, &iv); + if (ret < 0) { + _gnutls_debug_log("error initializing: %s\n", + gnutls_cipher_get_name(cipher)); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + for (offset = 0; + offset < vectors[i].plaintext_size; + offset += block) { + ret = + gnutls_cipher_encrypt2(hd, + vectors[i].plaintext + offset, + MIN(block, vectors[i].plaintext_size - offset), + tmp + offset, + sizeof(tmp) - offset); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + if (memcmp + (tmp, vectors[i].ciphertext, + vectors[i].plaintext_size) != 0) { + _gnutls_debug_log("%s encryption of test vector %d failed with block size %d/%d!\n", + gnutls_cipher_get_name(cipher), + i, (int)block, (int)vectors[i].plaintext_size); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + gnutls_cipher_deinit(hd); + } + } + + for (i = 0; i < vectors_size; i++) { + for (block = 1; block <= vectors[i].plaintext_size; block++) { + key.data = (void *) vectors[i].key; + key.size = vectors[i].key_size; + + iv.data = (void *) vectors[i].iv; + iv.size = gnutls_cipher_get_iv_size(cipher); + + ret = gnutls_cipher_init(&hd, cipher, &key, &iv); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + + for (offset = 0; + offset + block <= vectors[i].plaintext_size; + offset += block) { + ret = + gnutls_cipher_decrypt2(hd, + vectors[i].ciphertext + offset, + MIN(block, vectors[i].plaintext_size - offset), + tmp + offset, + sizeof(tmp) - offset); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + if (memcmp + (tmp, vectors[i].plaintext, + vectors[i].plaintext_size) != 0) { + _gnutls_debug_log("%s decryption of test vector %d failed with block size %d!\n", + gnutls_cipher_get_name(cipher), + i, (int)block); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + gnutls_cipher_deinit(hd); + } + } + + _gnutls_debug_log + ("%s self check succeeded\n", + gnutls_cipher_get_name(cipher)); + + return 0; +} + +/* AEAD modes (compat APIs) */ +static int test_cipher_aead_compat(gnutls_cipher_algorithm_t cipher, + const struct cipher_aead_vectors_st *vectors, + size_t vectors_size) +{ + gnutls_cipher_hd_t hd; + int ret; + unsigned int i; + uint8_t tmp[384]; + uint8_t tmp2[384]; + gnutls_datum_t key, iv; + unsigned tag_size; + + _gnutls_debug_log("compat: running tests for: %s\n", + gnutls_cipher_get_name(cipher)); + + for (i = 0; i < vectors_size; i++) { + memset(tmp, 0, sizeof(tmp)); + key.data = (void *) vectors[i].key; + key.size = vectors[i].key_size; + + iv.data = (void *) vectors[i].iv; + iv.size = vectors[i].iv_size; + tag_size = vectors[i].tag_size; + + + if (tag_size > gnutls_cipher_get_tag_size(cipher)) { + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + ret = gnutls_cipher_init(&hd, cipher, &key, &iv); + if (ret < 0) { + if (vectors[i].compat_apis == 0) { + return 0; /* expected */ + } else { + _gnutls_debug_log("compat: error initializing: %s\n", + gnutls_cipher_get_name(cipher)); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + } + + if (vectors[i].compat_apis == 0) { + _gnutls_debug_log("compat: initialized but shouldn't: %s\n", + gnutls_cipher_get_name(cipher)); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + if (vectors[i].auth_size) { + ret = gnutls_cipher_add_auth(hd, vectors[i].auth, vectors[i].auth_size); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + ret = gnutls_cipher_encrypt2(hd, vectors[i].plaintext, vectors[i].plaintext_size, + tmp, sizeof(tmp)); + if (ret < 0) + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); + + ret = gnutls_cipher_tag(hd, tmp+vectors[i].plaintext_size, tag_size); + if (ret < 0) + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); + + if (memcmp(tmp+vectors[i].plaintext_size, vectors[i].tag, tag_size) != 0) { + _gnutls_debug_log + ("compat: %s test vector %d failed (tag)!\n", + gnutls_cipher_get_name(cipher), i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + if (vectors[i].plaintext_size > 0) { + if (memcmp + (tmp, vectors[i].ciphertext, + vectors[i].plaintext_size) != 0) { + _gnutls_debug_log + ("compat: %s test vector %d failed!\n", + gnutls_cipher_get_name(cipher), i); + + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); + } + } + + if (vectors[i].plaintext_size > 0) { + /* check inplace encryption */ + gnutls_cipher_set_iv(hd, (void*)vectors[i].iv, vectors[i].iv_size); + memcpy(tmp2, vectors[i].plaintext, vectors[i].plaintext_size); + + ret = gnutls_cipher_encrypt(hd, tmp2, vectors[i].plaintext_size); + if (ret < 0) + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); + + if (memcmp(tmp, tmp2, vectors[i].plaintext_size) != 0) { + _gnutls_debug_log("compat: %s vector %d in-place encryption failed!\n", gnutls_cipher_get_name(cipher), i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + /* check decryption with separate buffers */ + gnutls_cipher_set_iv(hd, (void*)vectors[i].iv, vectors[i].iv_size); + + if (vectors[i].auth_size) { + ret = gnutls_cipher_add_auth(hd, vectors[i].auth, vectors[i].auth_size); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + ret = + gnutls_cipher_decrypt2(hd, tmp, vectors[i].plaintext_size, + tmp2, sizeof(tmp2)); + if (ret < 0) + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); + + if (memcmp(tmp2, vectors[i].plaintext, vectors[i].plaintext_size) != 0) { + _gnutls_debug_log("compat: %s test vector %d failed (decryption)!\n", + gnutls_cipher_get_name(cipher), i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + /* check in-place decryption */ + if (vectors[i].plaintext_size > 0) { + gnutls_cipher_set_iv(hd, (void*)vectors[i].iv, vectors[i].iv_size); + + if (vectors[i].auth_size) { + ret = gnutls_cipher_add_auth(hd, vectors[i].auth, vectors[i].auth_size); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + + memcpy(tmp2, tmp, vectors[i].plaintext_size); + ret = gnutls_cipher_decrypt(hd, tmp2, vectors[i].plaintext_size); + if (ret < 0) + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); + + if (memcmp(tmp2, vectors[i].plaintext, vectors[i].plaintext_size) != 0) { + _gnutls_debug_log("compat: %s vector %d in-place decryption failed!\n", gnutls_cipher_get_name(cipher), i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + } + } + + gnutls_cipher_deinit(hd); + } + + _gnutls_debug_log + ("%s compat self check succeeded\n", + gnutls_cipher_get_name(cipher)); + + return 0; + +} + +#define IOV_PARTS 8 +/* AEAD modes - scatter read */ +static int test_cipher_aead_scatter(gnutls_cipher_algorithm_t cipher, + const struct cipher_aead_vectors_st *vectors, + size_t vectors_size, unsigned flags) { - gnutls_cipher_hd_t hd; + gnutls_aead_cipher_hd_t hd; int ret; - unsigned int i; + unsigned int i, z; uint8_t tmp[384]; - gnutls_datum_t key, iv = {NULL, 0}; + gnutls_datum_t key, iv; + size_t s; + unsigned tag_size; + giovec_t auth_iov[IOV_PARTS]; + int auth_iov_len; + int iov_len; + giovec_t iov[IOV_PARTS]; + const uint8_t *tag; + uint8_t *ciphertext; + + _gnutls_debug_log("running scatter (iovec) tests for: %s\n", + gnutls_cipher_get_name(cipher)); for (i = 0; i < vectors_size; i++) { + memset(tmp, 0, sizeof(tmp)); key.data = (void *) vectors[i].key; key.size = vectors[i].key_size; - if (vectors[i].iv != NULL) { - iv.data = (void *) vectors[i].iv; - iv.size = gnutls_cipher_get_iv_size(cipher); - } + iv.data = (void *) vectors[i].iv; + iv.size = vectors[i].iv_size; + tag_size = vectors[i].tag_size; - if (iv.size != vectors[i].iv_size) + if (tag_size > gnutls_cipher_get_tag_size(cipher)) { return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } - ret = gnutls_cipher_init(&hd, cipher, &key, &iv); + ret = gnutls_aead_cipher_init(&hd, cipher, &key); if (ret < 0) { _gnutls_debug_log("error initializing: %s\n", gnutls_cipher_get_name(cipher)); return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); } + s = sizeof(tmp); + + /* single vector */ + auth_iov_len = 1; + auth_iov[0].iov_base = (void*)vectors[i].auth; + auth_iov[0].iov_len = vectors[i].auth_size; + + iov_len = 1; + iov[0].iov_base = (void*)vectors[i].plaintext; + iov[0].iov_len = vectors[i].plaintext_size; + ret = - gnutls_cipher_encrypt2(hd, - vectors[i].plaintext, - vectors[i].plaintext_size, - tmp, sizeof(tmp)); + gnutls_aead_cipher_encryptv(hd, + iv.data, iv.size, + auth_iov, auth_iov_len, + vectors[i].tag_size, + iov, iov_len, + tmp, &s); if (ret < 0) - return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); - gnutls_cipher_deinit(hd); + if (s != vectors[i].plaintext_size + tag_size) { + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); + } - if (memcmp - (tmp, vectors[i].ciphertext, - vectors[i].plaintext_size) != 0) { - _gnutls_debug_log("%s test vector %d failed!\n", - gnutls_cipher_get_name(cipher), - i); + if (vectors[i].tag_prepended) + tag = tmp; + else + tag = tmp+vectors[i].plaintext_size; + + if (memcmp(tag, vectors[i].tag, tag_size) != 0) { + _gnutls_debug_log + ("%s test vector %d failed (tag)!\n", + gnutls_cipher_get_name(cipher), i); return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); } - } - iv.size = gnutls_cipher_get_iv_size(cipher); + if (vectors[i].tag_prepended) + ciphertext = tmp+vectors[i].tag_size; + else + ciphertext = tmp; - for (i = 0; i < vectors_size; i++) { - key.data = (void *) vectors[i].key; - key.size = vectors[i].key_size; + if (vectors[i].plaintext_size > 0) { + if (memcmp + (ciphertext, vectors[i].ciphertext, + vectors[i].plaintext_size) != 0) { + _gnutls_debug_log + ("%s test vector %d failed!\n", + gnutls_cipher_get_name(cipher), i); - iv.data = (void *) vectors[i].iv; + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); + } + } - ret = gnutls_cipher_init(&hd, cipher, &key, &iv); - if (ret < 0) - return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + /* multi-vector */ + auth_iov_len = 0; + if (vectors[i].auth_size > IOV_PARTS) { + unsigned split = vectors[i].auth_size / IOV_PARTS; + assert(split>0); + for (z=0;z IOV_PARTS) { + unsigned split = vectors[i].plaintext_size / IOV_PARTS; + assert(split>0); + + for (z=0;z 0) { + if (memcmp + (ciphertext, vectors[i].ciphertext, + vectors[i].plaintext_size) != 0) { + _gnutls_debug_log + ("%s test vector %d failed!\n", + gnutls_cipher_get_name(cipher), i); + + return + gnutls_assert_val + (GNUTLS_E_SELF_TEST_ERROR); + } } + + + + gnutls_aead_cipher_deinit(hd); } _gnutls_debug_log - ("%s self check succeeded\n", + ("%s scatter self check succeeded\n", gnutls_cipher_get_name(cipher)); - return 0; + if (flags & GNUTLS_SELF_TEST_FLAG_NO_COMPAT) + return 0; + else + return test_cipher_aead_compat(cipher, vectors, vectors_size); } /* AEAD modes */ static int test_cipher_aead(gnutls_cipher_algorithm_t cipher, const struct cipher_aead_vectors_st *vectors, - size_t vectors_size) + size_t vectors_size, unsigned flags) { gnutls_aead_cipher_hd_t hd; int ret; @@ -465,7 +1259,12 @@ static int test_cipher_aead(gnutls_cipher_algorithm_t cipher, uint8_t tmp2[384]; gnutls_datum_t key, iv; size_t s, s2; + const uint8_t *tag; unsigned tag_size; + uint8_t *ciphertext; + + _gnutls_debug_log("running tests for: %s\n", + gnutls_cipher_get_name(cipher)); for (i = 0; i < vectors_size; i++) { memset(tmp, 0, sizeof(tmp)); @@ -489,8 +1288,6 @@ static int test_cipher_aead(gnutls_cipher_algorithm_t cipher, gnutls_cipher_get_name(cipher)); return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); } - _gnutls_debug_log("initialized: %s\n", - gnutls_cipher_get_name(cipher)); s = sizeof(tmp); @@ -513,17 +1310,26 @@ static int test_cipher_aead(gnutls_cipher_algorithm_t cipher, (GNUTLS_E_SELF_TEST_ERROR); } - if (memcmp(tmp+vectors[i].plaintext_size, vectors[i].tag, tag_size) != 0) { + if (vectors[i].tag_prepended) + tag = tmp; + else + tag = tmp+vectors[i].plaintext_size; + + if (memcmp(tag, vectors[i].tag, tag_size) != 0) { _gnutls_debug_log ("%s test vector %d failed (tag)!\n", gnutls_cipher_get_name(cipher), i); return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); } + if (vectors[i].tag_prepended) + ciphertext = tmp+vectors[i].tag_size; + else + ciphertext = tmp; + if (vectors[i].plaintext_size > 0) { - if (memcmp - (tmp, vectors[i].ciphertext, + (ciphertext, vectors[i].ciphertext, vectors[i].plaintext_size) != 0) { _gnutls_debug_log ("%s test vector %d failed!\n", @@ -558,7 +1364,7 @@ static int test_cipher_aead(gnutls_cipher_algorithm_t cipher, /* test tag verification */ if (s > 0) { - tmp[0]++; + (*ciphertext)++; s2 = sizeof(tmp2); ret = @@ -585,10 +1391,11 @@ static int test_cipher_aead(gnutls_cipher_algorithm_t cipher, ("%s self check succeeded\n", gnutls_cipher_get_name(cipher)); - return 0; - + return test_cipher_aead_scatter(cipher, vectors, vectors_size, flags); } + + struct hash_vectors_st { const uint8_t *plaintext; unsigned int plaintext_size; @@ -696,18 +1503,76 @@ const struct hash_vectors_st sha3_512_vectors[] = { }, }; +const struct hash_vectors_st gostr_94_vectors[] = { + { + STR(plaintext, plaintext_size, + "The quick brown fox jumps over the lazy dog"), + STR(output, output_size, + "\x90\x04\x29\x4a\x36\x1a\x50\x8c\x58\x6f\xe5\x3d\x1f\x1b\x02\x74\x67\x65\xe7\x1b\x76\x54\x72\x78\x6e\x47\x70\xd5\x65\x83\x0a\x76"), + }, +}; + +/* GOST R 34.11-2012 */ +const struct hash_vectors_st streebog_512_vectors[] = { + { + STR(plaintext, plaintext_size, + "\xd1\xe5\x20\xe2\xe5\xf2\xf0\xe8\x2c\x20\xd1\xf2\xf0\xe8\xe1\xee" + "\xe6\xe8\x20\xe2\xed\xf3\xf6\xe8\x2c\x20\xe2\xe5\xfe\xf2\xfa\x20" + "\xf1\x20\xec\xee\xf0\xff\x20\xf1\xf2\xf0\xe5\xeb\xe0\xec\xe8\x20" + "\xed\xe0\x20\xf5\xf0\xe0\xe1\xf0\xfb\xff\x20\xef\xeb\xfa\xea\xfb" + "\x20\xc8\xe3\xee\xf0\xe5\xe2\xfb"), + STR(output, output_size, + "\x1e\x88\xe6\x22\x26\xbf\xca\x6f\x99\x94\xf1\xf2\xd5\x15\x69\xe0" + "\xda\xf8\x47\x5a\x3b\x0f\xe6\x1a\x53\x00\xee\xe4\x6d\x96\x13\x76" + "\x03\x5f\xe8\x35\x49\xad\xa2\xb8\x62\x0f\xcd\x7c\x49\x6c\xe5\xb3" + "\x3f\x0c\xb9\xdd\xdc\x2b\x64\x60\x14\x3b\x03\xda\xba\xc9\xfb\x28"), + }, + { + STR(plaintext, plaintext_size, + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"), + STR(output, output_size, + "\x90\xa1\x61\xd1\x2a\xd3\x09\x49\x8d\x3f\xe5\xd4\x82\x02\xd8\xa4" + "\xe9\xc4\x06\xd6\xa2\x64\xae\xab\x25\x8a\xc5\xec\xc3\x7a\x79\x62" + "\xaa\xf9\x58\x7a\x5a\xbb\x09\xb6\xbb\x81\xec\x4b\x37\x52\xa3\xff" + "\x5a\x83\x8e\xf1\x75\xbe\x57\x72\x05\x6b\xc5\xfe\x54\xfc\xfc\x7e"), + }, +}; + +/* GOST R 34.11-2012 */ +const struct hash_vectors_st streebog_256_vectors[] = { + { + STR(plaintext, plaintext_size, + "\xd1\xe5\x20\xe2\xe5\xf2\xf0\xe8\x2c\x20\xd1\xf2\xf0\xe8\xe1\xee" + "\xe6\xe8\x20\xe2\xed\xf3\xf6\xe8\x2c\x20\xe2\xe5\xfe\xf2\xfa\x20" + "\xf1\x20\xec\xee\xf0\xff\x20\xf1\xf2\xf0\xe5\xeb\xe0\xec\xe8\x20" + "\xed\xe0\x20\xf5\xf0\xe0\xe1\xf0\xfb\xff\x20\xef\xeb\xfa\xea\xfb" + "\x20\xc8\xe3\xee\xf0\xe5\xe2\xfb"), + STR(output, output_size, + "\x9d\xd2\xfe\x4e\x90\x40\x9e\x5d\xa8\x7f\x53\x97\x6d\x74\x05\xb0" + "\xc0\xca\xc6\x28\xfc\x66\x9a\x74\x1d\x50\x06\x3c\x55\x7e\x8f\x50"), + }, +}; + #define HASH_DATA_SIZE 64 /* SHA1 and other hashes */ static int test_digest(gnutls_digest_algorithm_t dig, const struct hash_vectors_st *vectors, - size_t vectors_size) + size_t vectors_size, unsigned flags) { uint8_t data[HASH_DATA_SIZE]; unsigned int i; int ret; size_t data_size; gnutls_hash_hd_t hd; + gnutls_hash_hd_t copy; if (_gnutls_digest_exists(dig) == 0) return 0; @@ -724,6 +1589,12 @@ static int test_digest(gnutls_digest_algorithm_t dig, if (ret < 0) return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + copy = gnutls_hash_copy(hd); + /* Returning NULL is not an error here for the time being, but + * it might become one later */ + if (!copy && secure_getenv("GNUTLS_TEST_SUITE_RUN")) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + ret = gnutls_hash(hd, &vectors[i].plaintext[1], vectors[i].plaintext_size - 1); @@ -733,7 +1604,7 @@ static int test_digest(gnutls_digest_algorithm_t dig, gnutls_hash_deinit(hd, data); data_size = gnutls_hash_get_len(dig); - if (ret < 0) + if (data_size <= 0) return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); if (data_size != vectors[i].output_size || @@ -743,6 +1614,24 @@ static int test_digest(gnutls_digest_algorithm_t dig, gnutls_digest_get_name(dig), i); return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); } + + if (copy != NULL) { + ret = gnutls_hash(copy, + &vectors[i].plaintext[1], + vectors[i].plaintext_size - 1); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + + memset(data, 0xaa, data_size); + gnutls_hash_deinit(copy, data); + + if (memcmp(data, vectors[i].output, + vectors[i].output_size) != 0) { + _gnutls_debug_log("%s copy test vector %d failed!\n", + gnutls_digest_get_name(dig), i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + } } _gnutls_debug_log("%s self check succeeded\n", @@ -755,6 +1644,8 @@ static int test_digest(gnutls_digest_algorithm_t dig, struct mac_vectors_st { const uint8_t *key; unsigned int key_size; + const uint8_t *nonce; + unsigned int nonce_size; const uint8_t *plaintext; unsigned int plaintext_size; const uint8_t *output; @@ -821,15 +1712,136 @@ const struct mac_vectors_st hmac_sha512_vectors[] = { }, }; +/* Calculated */ +const struct mac_vectors_st hmac_gostr_94_vectors[] = { + { + STR(key, key_size, + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" + "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"), + STR(plaintext, plaintext_size, + "\x01\x26\xbd\xb8\x78\x00\xaf\x21\x43\x41\x45\x65\x63\x78\x01\x00"), + STR(output, output_size, + "\xba\xd7\x0b\x61\xc4\x10\x95\xbc\x47\xe1\x14\x1c\xfa\xed\x42\x72" + "\x6a\x5c\xee\xbd\x62\xce\x75\xdb\xbb\x9a\xd7\x6c\xda\x9f\x72\xf7"), + }, +}; + +/* RFC 7836 */ +const struct mac_vectors_st hmac_streebog_512_vectors[] = { + { + STR(key, key_size, + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" + "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"), + STR(plaintext, plaintext_size, + "\x01\x26\xbd\xb8\x78\x00\xaf\x21\x43\x41\x45\x65\x63\x78\x01\x00"), + STR(output, output_size, + "\xa5\x9b\xab\x22\xec\xae\x19\xc6\x5f\xbd\xe6\xe5\xf4\xe9\xf5\xd8" + "\x54\x9d\x31\xf0\x37\xf9\xdf\x9b\x90\x55\x00\xe1\x71\x92\x3a\x77" + "\x3d\x5f\x15\x30\xf2\xed\x7e\x96\x4c\xb2\xee\xdc\x29\xe9\xad\x2f" + "\x3a\xfe\x93\xb2\x81\x4f\x79\xf5\x00\x0f\xfc\x03\x66\xc2\x51\xe6"), + }, +}; + +/* RFC 7836 */ +const struct mac_vectors_st hmac_streebog_256_vectors[] = { + { + STR(key, key_size, + "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" + "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"), + STR(plaintext, plaintext_size, + "\x01\x26\xbd\xb8\x78\x00\xaf\x21\x43\x41\x45\x65\x63\x78\x01\x00"), + STR(output, output_size, + "\xa1\xaa\x5f\x7d\xe4\x02\xd7\xb3\xd3\x23\xf2\x99\x1c\x8d\x45\x34" + "\x01\x31\x37\x01\x0a\x83\x75\x4f\xd0\xaf\x6d\x7c\xd4\x92\x2e\xd9"), + }, +}; + +const struct mac_vectors_st aes_cmac_128_vectors[] = { /* NIST SP800-38A */ + { + STR(key, key_size, + "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c"), + STR(plaintext, plaintext_size, + "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a"), + STR(output, output_size, + "\x07\x0a\x16\xb4\x6b\x4d\x41\x44\xf7\x9b\xdd\x9d\xd0\x4a\x28\x7c"), + }, +}; + +const struct mac_vectors_st aes_cmac_256_vectors[] = { /* NIST SP800-38A */ + { + STR(key, key_size, + "\x60\x3d\xeb\x10\x15\xca\x71\xbe\x2b\x73\xae\xf0\x85\x7d\x77\x81" + "\x1f\x35\x2c\x07\x3b\x61\x08\xd7\x2d\x98\x10\xa3\x09\x14\xdf\xf4"), + STR(plaintext, plaintext_size, + "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a"), + STR(output, output_size, + "\x28\xa7\x02\x3f\x45\x2e\x8f\x82\xbd\x4b\xf2\x8d\x8c\x37\xc3\x5c"), + }, +}; + +const struct mac_vectors_st aes_gmac_128_vectors[] = { /* NIST test vectors */ + { + STR(key, key_size, + "\x23\x70\xe3\x20\xd4\x34\x42\x08\xe0\xff\x56\x83\xf2\x43\xb2\x13"), + STR(nonce, nonce_size, + "\x04\xdb\xb8\x2f\x04\x4d\x30\x83\x1c\x44\x12\x28"), + STR(plaintext, plaintext_size, + "\xd4\x3a\x8e\x50\x89\xee\xa0\xd0\x26\xc0\x3a\x85\x17\x8b\x27\xda"), + STR(output, output_size, + "\x2a\x04\x9c\x04\x9d\x25\xaa\x95\x96\x9b\x45\x1d\x93\xc3\x1c\x6e"), + }, +}; + +const struct mac_vectors_st aes_gmac_192_vectors[] = { /* NIST test vectors */ + { + STR(key, key_size, + "\xaa\x92\x1c\xb5\xa2\x43\xab\x08\x91\x1f\x32\x89\x26\x6b\x39\xda" + "\xb1\x33\xf5\xc4\x20\xa6\xc5\xcd"), + STR(nonce, nonce_size, + "\x8f\x73\xdb\x68\xda\xee\xed\x2d\x15\x5f\xb1\xa0"), + STR(plaintext, plaintext_size, + "\x48\x74\x43\xc7\xc1\x4c\xe4\x74\xcb\x3d\x29\x1f\x25\x70\x70\xa2"), + STR(output, output_size, + "\xb1\x26\x74\xfb\xea\xc6\x88\x9a\x24\x94\x8f\x27\x92\xe3\x0a\x50"), + }, +}; + +const struct mac_vectors_st aes_gmac_256_vectors[] = { /* NIST test vectors */ + { + STR(key, key_size, + "\x6d\xfd\xaf\xd6\x70\x3c\x28\x5c\x01\xf1\x4f\xd1\x0a\x60\x12\x86" + "\x2b\x2a\xf9\x50\xd4\x73\x3a\xbb\x40\x3b\x2e\x74\x5b\x26\x94\x5d"), + STR(nonce, nonce_size, + "\x37\x49\xd0\xb3\xd5\xba\xcb\x71\xbe\x06\xad\xe6"), + STR(plaintext, plaintext_size, + "\xc0\xd2\x49\x87\x19\x92\xe7\x03\x02\xae\x00\x81\x93\xd1\xe8\x9f"), + STR(output, output_size, + "\x4a\xa4\xcc\x69\xf8\x4e\xe6\xac\x16\xd9\xbf\xb4\xe0\x5d\xe5\x00"), + }, +}; + +const struct mac_vectors_st gost28147_tc26z_imit_vectors[] = { + { + STR(key, key_size, + "\x9d\x05\xb7\x9e\x90\xca\xd0\x0a\x2c\xda\xd2\x2e\xf4\xe8\x6f\x5c" + "\xf5\xdc\x37\x68\x19\x85\xb3\xbf\xaa\x18\xc1\xc3\x05\x0a\x91\xa2"), + STR(plaintext, plaintext_size, + "\xb5\xa1\xf0\xe3\xce\x2f\x02\x1d\x67\x61\x94\x34\x5c\x41\xe3\x6e"), + STR(output, output_size, + "\x03\xe5\x67\x66"), + }, +}; + static int test_mac(gnutls_mac_algorithm_t mac, const struct mac_vectors_st *vectors, - size_t vectors_size) + size_t vectors_size, unsigned flags) { uint8_t data[HASH_DATA_SIZE]; unsigned int i; int ret; size_t data_size; gnutls_hmac_hd_t hd; + gnutls_hmac_hd_t copy; for (i = 0; i < vectors_size; i++) { ret = gnutls_hmac_init(&hd, @@ -842,10 +1854,21 @@ static int test_mac(gnutls_mac_algorithm_t mac, return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); } + if (vectors[i].nonce_size) + gnutls_hmac_set_nonce(hd, + vectors[i].nonce, + vectors[i].nonce_size); + ret = gnutls_hmac(hd, vectors[i].plaintext, 1); if (ret < 0) return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + copy = gnutls_hmac_copy(hd); + /* Returning NULL is not an error here for the time being, but + * it might become one later */ + if (!copy && secure_getenv("GNUTLS_TEST_SUITE_RUN")) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + ret = gnutls_hmac(hd, &vectors[i].plaintext[1], vectors[i].plaintext_size - 1); @@ -855,7 +1878,7 @@ static int test_mac(gnutls_mac_algorithm_t mac, gnutls_hmac_deinit(hd, data); data_size = gnutls_hmac_get_len(mac); - if (ret < 0) + if (data_size <= 0) return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); if (data_size != vectors[i].output_size || @@ -868,6 +1891,25 @@ static int test_mac(gnutls_mac_algorithm_t mac, return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); } + + if (copy != NULL) { + ret = gnutls_hmac(copy, + &vectors[i].plaintext[1], + vectors[i].plaintext_size - 1); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + + memset(data, 0xaa, data_size); + gnutls_hmac_deinit(copy, data); + + if (memcmp(data, vectors[i].output, + vectors[i].output_size) != 0) { + _gnutls_debug_log + ("MAC-%s copy test vector %d failed!\n", + gnutls_mac_get_name(mac), i); + return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); + } + } } _gnutls_debug_log @@ -878,65 +1920,133 @@ static int test_mac(gnutls_mac_algorithm_t mac, } #define CASE(x, func, vectors) case x: \ - ret = func(x, V(vectors)); \ - if (all == 0 || ret < 0) \ + ret = func(x, V(vectors), flags); \ + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL) || ret < 0) \ + return ret + +#define CASE2(x, func, func2, vectors) case x: \ + ret = func(x, V(vectors), flags); \ + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL) || ret < 0) \ + return ret; \ + ret = func2(x, V(vectors), flags); \ + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL) || ret < 0) \ return ret #define NON_FIPS_CASE(x, func, vectors) case x: \ if (_gnutls_fips_mode_enabled() == 0) { \ - ret = func(x, V(vectors)); \ - if (all == 0 || ret < 0) \ + ret = func(x, V(vectors), flags); \ + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL) || ret < 0) \ return ret; \ } #define FIPS_STARTUP_ONLY_TEST_CASE(x, func, vectors) case x: \ if (_gnutls_fips_mode_enabled() != 1) { \ - ret = func(x, V(vectors)); \ - if (all == 0 || ret < 0) \ + ret = func(x, V(vectors), flags); \ + if (!(flags & GNUTLS_SELF_TEST_FLAG_ALL) || ret < 0) \ return ret; \ } /*- * gnutls_cipher_self_test: - * @all: if non-zero then tests to all ciphers are performed. + * @flags: GNUTLS_SELF_TEST_FLAG flags * @cipher: the encryption algorithm to use * * This function will run self tests on the provided cipher or all - * available ciphers if @all is non-zero. + * available ciphers if @flags is %GNUTLS_SELF_TEST_FLAG_ALL. * * Returns: Zero or a negative error code on error. * * Since: 3.3.0-FIPS140 -*/ -int gnutls_cipher_self_test(unsigned all, gnutls_cipher_algorithm_t cipher) +int gnutls_cipher_self_test(unsigned flags, gnutls_cipher_algorithm_t cipher) { int ret; - if (all != 0) + if (flags & GNUTLS_SELF_TEST_FLAG_ALL) cipher = GNUTLS_CIPHER_UNKNOWN; switch (cipher) { case GNUTLS_CIPHER_UNKNOWN: CASE(GNUTLS_CIPHER_AES_128_CCM, test_cipher_aead, aes128_ccm_vectors); + FALLTHROUGH; CASE(GNUTLS_CIPHER_AES_256_CCM, test_cipher_aead, aes256_ccm_vectors); + FALLTHROUGH; CASE(GNUTLS_CIPHER_AES_128_CBC, test_cipher, aes128_cbc_vectors); + FALLTHROUGH; CASE(GNUTLS_CIPHER_AES_192_CBC, test_cipher, aes192_cbc_vectors); + FALLTHROUGH; CASE(GNUTLS_CIPHER_AES_256_CBC, test_cipher, aes256_cbc_vectors); + FALLTHROUGH; CASE(GNUTLS_CIPHER_3DES_CBC, test_cipher, tdes_cbc_vectors); + FALLTHROUGH; NON_FIPS_CASE(GNUTLS_CIPHER_ARCFOUR_128, test_cipher, arcfour_vectors); + FALLTHROUGH; CASE(GNUTLS_CIPHER_AES_128_GCM, test_cipher_aead, aes128_gcm_vectors); + FALLTHROUGH; CASE(GNUTLS_CIPHER_AES_256_GCM, test_cipher_aead, aes256_gcm_vectors); + FALLTHROUGH; NON_FIPS_CASE(GNUTLS_CIPHER_CHACHA20_POLY1305, test_cipher_aead, chacha_poly1305_vectors); + FALLTHROUGH; + CASE2(GNUTLS_CIPHER_AES_128_CFB8, test_cipher, + test_cipher_all_block_sizes, + aes128_cfb8_vectors); + FALLTHROUGH; + CASE2(GNUTLS_CIPHER_AES_192_CFB8, test_cipher, + test_cipher_all_block_sizes, + aes192_cfb8_vectors); + FALLTHROUGH; + CASE2(GNUTLS_CIPHER_AES_256_CFB8, test_cipher, + test_cipher_all_block_sizes, + aes256_cfb8_vectors); + FALLTHROUGH; + CASE(GNUTLS_CIPHER_AES_128_XTS, test_cipher, + aes128_xts_vectors); + FALLTHROUGH; + CASE(GNUTLS_CIPHER_AES_256_XTS, test_cipher, + aes256_xts_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_CIPHER_AES_128_SIV, test_cipher_aead, + aes128_siv_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_CIPHER_AES_256_SIV, test_cipher_aead, + aes256_siv_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_CIPHER_CHACHA20_32, test_cipher, + chacha20_32_vectors); + FALLTHROUGH; + /* The same test vector for _32 variant should work */ + NON_FIPS_CASE(GNUTLS_CIPHER_CHACHA20_64, test_cipher, + chacha20_32_vectors); +#if ENABLE_GOST + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_CIPHER_GOST28147_CPA_CFB, test_cipher, + gost28147_cpa_cfb_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_CIPHER_GOST28147_CPB_CFB, test_cipher, + gost28147_cpb_cfb_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_CIPHER_GOST28147_CPC_CFB, test_cipher, + gost28147_cpc_cfb_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_CIPHER_GOST28147_CPD_CFB, test_cipher, + gost28147_cpd_cfb_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_CIPHER_GOST28147_TC26Z_CFB, test_cipher, + gost28147_tc26z_cfb_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_CIPHER_GOST28147_TC26Z_CNT, test_cipher, + gost28147_tc26z_cnt_vectors); +#endif break; default: return gnutls_assert_val(GNUTLS_E_NO_SELF_TEST); @@ -947,7 +2057,7 @@ int gnutls_cipher_self_test(unsigned all, gnutls_cipher_algorithm_t cipher) /*- * gnutls_mac_self_test: - * @all: if non-zero then tests to all ciphers are performed. + * @flags: GNUTLS_SELF_TEST_FLAG flags * @mac: the message authentication algorithm to use * * This function will run self tests on the provided mac. @@ -956,21 +2066,46 @@ int gnutls_cipher_self_test(unsigned all, gnutls_cipher_algorithm_t cipher) * * Since: 3.3.0-FIPS140 -*/ -int gnutls_mac_self_test(unsigned all, gnutls_mac_algorithm_t mac) +int gnutls_mac_self_test(unsigned flags, gnutls_mac_algorithm_t mac) { int ret; - if (all != 0) + if (flags & GNUTLS_SELF_TEST_FLAG_ALL) mac = GNUTLS_MAC_UNKNOWN; switch (mac) { case GNUTLS_MAC_UNKNOWN: FIPS_STARTUP_ONLY_TEST_CASE(GNUTLS_MAC_MD5, test_mac, hmac_md5_vectors); + FALLTHROUGH; CASE(GNUTLS_MAC_SHA1, test_mac, hmac_sha1_vectors); + FALLTHROUGH; CASE(GNUTLS_MAC_SHA224, test_mac, hmac_sha224_vectors); + FALLTHROUGH; CASE(GNUTLS_MAC_SHA256, test_mac, hmac_sha256_vectors); + FALLTHROUGH; CASE(GNUTLS_MAC_SHA384, test_mac, hmac_sha384_vectors); + FALLTHROUGH; CASE(GNUTLS_MAC_SHA512, test_mac, hmac_sha512_vectors); +#if ENABLE_GOST + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_MAC_GOSTR_94, test_mac, hmac_gostr_94_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_MAC_STREEBOG_512, test_mac, hmac_streebog_512_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_MAC_STREEBOG_256, test_mac, hmac_streebog_256_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_MAC_GOST28147_TC26Z_IMIT, test_mac, gost28147_tc26z_imit_vectors); +#endif + FALLTHROUGH; + CASE(GNUTLS_MAC_AES_CMAC_128, test_mac, aes_cmac_128_vectors); + FALLTHROUGH; + CASE(GNUTLS_MAC_AES_CMAC_256, test_mac, aes_cmac_256_vectors); + FALLTHROUGH; + CASE(GNUTLS_MAC_AES_GMAC_128, test_mac, aes_gmac_128_vectors); + FALLTHROUGH; + CASE(GNUTLS_MAC_AES_GMAC_192, test_mac, aes_gmac_192_vectors); + FALLTHROUGH; + CASE(GNUTLS_MAC_AES_GMAC_256, test_mac, aes_gmac_256_vectors); break; default: @@ -982,7 +2117,7 @@ int gnutls_mac_self_test(unsigned all, gnutls_mac_algorithm_t mac) /*- * gnutls_digest_self_test: - * @all: if non-zero then tests to all ciphers are performed. + * @flags: GNUTLS_SELF_TEST_FLAG flags * @digest: the digest algorithm to use * * This function will run self tests on the provided digest. @@ -991,26 +2126,43 @@ int gnutls_mac_self_test(unsigned all, gnutls_mac_algorithm_t mac) * * Since: 3.3.0-FIPS140 -*/ -int gnutls_digest_self_test(unsigned all, gnutls_digest_algorithm_t digest) +int gnutls_digest_self_test(unsigned flags, gnutls_digest_algorithm_t digest) { int ret; - if (all != 0) + if (flags & GNUTLS_SELF_TEST_FLAG_ALL) digest = GNUTLS_DIG_UNKNOWN; switch (digest) { case GNUTLS_DIG_UNKNOWN: FIPS_STARTUP_ONLY_TEST_CASE(GNUTLS_DIG_MD5, test_digest, md5_vectors); + FALLTHROUGH; CASE(GNUTLS_DIG_SHA1, test_digest, sha1_vectors); + FALLTHROUGH; CASE(GNUTLS_DIG_SHA224, test_digest, sha224_vectors); + FALLTHROUGH; CASE(GNUTLS_DIG_SHA256, test_digest, sha256_vectors); + FALLTHROUGH; CASE(GNUTLS_DIG_SHA384, test_digest, sha384_vectors); + FALLTHROUGH; CASE(GNUTLS_DIG_SHA512, test_digest, sha512_vectors); #ifdef NETTLE_SHA3_FIPS202 + FALLTHROUGH; CASE(GNUTLS_DIG_SHA3_224, test_digest, sha3_224_vectors); + FALLTHROUGH; CASE(GNUTLS_DIG_SHA3_256, test_digest, sha3_256_vectors); + FALLTHROUGH; CASE(GNUTLS_DIG_SHA3_384, test_digest, sha3_384_vectors); + FALLTHROUGH; CASE(GNUTLS_DIG_SHA3_512, test_digest, sha3_512_vectors); +#endif +#if ENABLE_GOST + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_DIG_GOSTR_94, test_digest, gostr_94_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_DIG_STREEBOG_512, test_digest, streebog_512_vectors); + FALLTHROUGH; + NON_FIPS_CASE(GNUTLS_DIG_STREEBOG_256, test_digest, streebog_256_vectors); #endif break; default: diff --git a/lib/crypto.h b/lib/crypto.h index d084420a3c..684ee198f6 100644 --- a/lib/crypto.h +++ b/lib/crypto.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef CRYPTO_H -#define CRYPTO_H +#ifndef GNUTLS_LIB_CRYPTO_H +#define GNUTLS_LIB_CRYPTO_H const gnutls_crypto_cipher_st * _gnutls_get_crypto_cipher(gnutls_cipher_algorithm_t algo); @@ -31,4 +31,4 @@ const gnutls_crypto_mac_st *_gnutls_get_crypto_mac(gnutls_mac_algorithm_t algo); void _gnutls_crypto_deregister(void); -#endif /* CRYPTO_H */ +#endif /* GNUTLS_LIB_CRYPTO_H */ diff --git a/lib/datum.c b/lib/datum.c index 27af043a5e..bd0f216438 100644 --- a/lib/datum.c +++ b/lib/datum.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -30,6 +30,7 @@ #include #include "errors.h" +/* On error, @dat is not changed. */ int _gnutls_set_datum(gnutls_datum_t * dat, const void *data, size_t data_size) { @@ -39,10 +40,11 @@ _gnutls_set_datum(gnutls_datum_t * dat, const void *data, size_t data_size) return 0; } - dat->data = gnutls_malloc(data_size); - if (dat->data == NULL) + unsigned char *m = gnutls_malloc(data_size); + if (!m) return GNUTLS_E_MEMORY_ERROR; + dat->data = m; dat->size = data_size; memcpy(dat->data, data, data_size); @@ -51,39 +53,24 @@ _gnutls_set_datum(gnutls_datum_t * dat, const void *data, size_t data_size) /* ensures that the data set are null-terminated * The function always returns an allocated string in @dat on success. + * On error, @dat is not changed. */ int _gnutls_set_strdatum(gnutls_datum_t * dat, const void *data, size_t data_size) { - if (data_size == 0 || data == NULL) { - dat->data = gnutls_calloc(1, 1); - dat->size = 0; - return 0; - } + if (data == NULL) + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); - dat->data = gnutls_malloc(data_size+1); - if (dat->data == NULL) + unsigned char *m = gnutls_malloc(data_size + 1); + if (!m) return GNUTLS_E_MEMORY_ERROR; + dat->data = m; dat->size = data_size; - memcpy(dat->data, data, data_size); + if (data_size) + memcpy(dat->data, data, data_size); dat->data[data_size] = 0; return 0; } -int -_gnutls_datum_append(gnutls_datum_t * dst, const void *data, - size_t data_size) -{ - - dst->data = gnutls_realloc_fast(dst->data, data_size + dst->size); - if (dst->data == NULL) - return GNUTLS_E_MEMORY_ERROR; - - memcpy(&dst->data[dst->size], data, data_size); - dst->size += data_size; - - return 0; -} - diff --git a/lib/datum.h b/lib/datum.h index 26e31e8d88..3d86a0dc72 100644 --- a/lib/datum.h +++ b/lib/datum.h @@ -16,44 +16,39 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_DATUM_H -#define GNUTLS_DATUM_H +#ifndef GNUTLS_LIB_DATUM_H +#define GNUTLS_LIB_DATUM_H # include "gnutls_int.h" /* This will copy the provided data in @dat. If the provided data are * NULL or zero-size @dat will be NULL as well. */ +attr_warn_unused_result attr_nonnull((1)) int _gnutls_set_datum(gnutls_datum_t * dat, const void *data, size_t data_size); /* This will always return a non-NULL, and zero-terminated string in @dat. */ +attr_warn_unused_result attr_nonnull((1)) int _gnutls_set_strdatum(gnutls_datum_t * dat, const void *data, size_t data_size); -int _gnutls_datum_append(gnutls_datum_t * dat, const void *data, - size_t data_size); - inline static void _gnutls_free_datum(gnutls_datum_t * dat) { - if (dat == NULL) - return; - - if (dat->data != NULL) + if (dat != NULL) { gnutls_free(dat->data); - - dat->data = NULL; - dat->size = 0; + dat->size = 0; + } } -inline static +inline static attr_nonnull_all void _gnutls_free_temp_key_datum(gnutls_datum_t * dat) { if (dat->data != NULL) { @@ -61,11 +56,10 @@ void _gnutls_free_temp_key_datum(gnutls_datum_t * dat) gnutls_free(dat->data); } - dat->data = NULL; dat->size = 0; } -inline static +inline static attr_nonnull_all void _gnutls_free_key_datum(gnutls_datum_t * dat) { if (dat->data != NULL) { @@ -73,8 +67,7 @@ void _gnutls_free_key_datum(gnutls_datum_t * dat) gnutls_free(dat->data); } - dat->data = NULL; dat->size = 0; } -#endif +#endif /* GNUTLS_LIB_DATUM_H */ diff --git a/lib/db.c b/lib/db.c index 1955cd096a..fc0699a4bd 100644 --- a/lib/db.c +++ b/lib/db.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -29,6 +29,8 @@ #include #include #include +#include "ext/server_name.h" +#include /** * gnutls_db_set_retrieve_function: @@ -121,12 +123,18 @@ void *gnutls_db_get_ptr(gnutls_session_t session) * @session: is a #gnutls_session_t type. * @seconds: is the number of seconds. * - * Set the expiration time for resumed sessions. The default is 3600 - * (one hour) at the time of this writing. + * Set the expiration time for resumed sessions. The default is 21600 + * (6 hours) at the time of writing. + * + * The maximum value that can be set using this function is 604800 + * (7 days). + * **/ void gnutls_db_set_cache_expiration(gnutls_session_t session, int seconds) { session->internals.expire_time = seconds; + if (session->internals.expire_time > 604800) + session->internals.expire_time = 604800; } /** @@ -148,6 +156,8 @@ unsigned gnutls_db_get_default_cache_expiration(void) * * Returns: Returns %GNUTLS_E_EXPIRED, if the database entry has * expired or 0 otherwise. + * + * Deprecated: This function is deprecated. **/ int gnutls_db_check_entry(gnutls_session_t session, @@ -159,7 +169,6 @@ gnutls_db_check_entry(gnutls_session_t session, /** * gnutls_db_check_entry_time: * @entry: is a pointer to a #gnutls_datum_t type. - * @t: is the time of the session handshake * * This function returns the time that this entry was active. * It can be used for database entry expiration. @@ -184,6 +193,40 @@ time_t gnutls_db_check_entry_time(gnutls_datum_t * entry) return t; } +/** + * gnutls_db_check_entry_expire_time: + * @entry: is a pointer to a #gnutls_datum_t type. + * + * This function returns the time that this entry will expire. + * It can be used for database entry expiration. + * + * Returns: The time this entry will expire, or zero on error. + * + * Since: 3.6.5 + **/ +time_t gnutls_db_check_entry_expire_time(gnutls_datum_t *entry) +{ + uint32_t t; + uint32_t e; + uint32_t magic; + + if (entry->size < 12) + return gnutls_assert_val(0); + + magic = _gnutls_read_uint32(entry->data); + + if (magic != PACKED_SESSION_MAGIC) + return gnutls_assert_val(0); + + t = _gnutls_read_uint32(&entry->data[4]); + e = _gnutls_read_uint32(&entry->data[8]); + + if (INT_ADD_OVERFLOW(t, e)) + return gnutls_assert_val(0); + + return t + e; +} + /* Checks if both db_store and db_retrieve functions have * been set up. */ @@ -253,9 +296,28 @@ int _gnutls_server_register_current_session(gnutls_session_t session) int _gnutls_check_resumed_params(gnutls_session_t session) { - if (session->internals.resumed_security_parameters.ext_master_secret != - session->security_parameters.ext_master_secret) - return gnutls_assert_val(GNUTLS_E_INVALID_SESSION); + time_t timestamp = gnutls_time(0); + const version_entry_st *vers; + + /* check whether the session is expired */ + if (timestamp - + session->internals.resumed_security_parameters.timestamp > + session->internals.expire_time + || session->internals.resumed_security_parameters.timestamp > + timestamp) + return gnutls_assert_val(GNUTLS_E_EXPIRED); + + /* check various parameters applicable to resumption in TLS1.2 or earlier + */ + vers = get_version(session); + if (!vers || !vers->tls13_sem) { + if (session->internals.resumed_security_parameters.ext_master_secret != + session->security_parameters.ext_master_secret) + return gnutls_assert_val(GNUTLS_E_INVALID_SESSION); + + if (!_gnutls_server_name_matches_resumed(session)) + return gnutls_assert_val(GNUTLS_E_INVALID_SESSION); + } return 0; } @@ -301,7 +363,6 @@ _gnutls_server_restore_session(gnutls_session_t session, return GNUTLS_E_INVALID_SESSION; } - /* expiration check is performed inside */ ret = gnutls_session_set_data(session, data.data, data.size); gnutls_free(data.data); @@ -310,6 +371,7 @@ _gnutls_server_restore_session(gnutls_session_t session, return ret; } + /* expiration check is performed inside */ ret = _gnutls_check_resumed_params(session); if (ret < 0) return gnutls_assert_val(ret); diff --git a/lib/db.h b/lib/db.h index 153c094529..6dc5f7f1ff 100644 --- a/lib/db.h +++ b/lib/db.h @@ -16,10 +16,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_DB_H +#define GNUTLS_LIB_DB_H + int _gnutls_server_register_current_session(gnutls_session_t session); int _gnutls_server_restore_session(gnutls_session_t session, uint8_t * session_id, @@ -27,4 +30,6 @@ int _gnutls_server_restore_session(gnutls_session_t session, int _gnutls_check_resumed_params(gnutls_session_t session); -#define PACKED_SESSION_MAGIC ((0xfadebadd)+(GNUTLS_VERSION_NUMBER)) +#define PACKED_SESSION_MAGIC ((0xfadebadd)+(_gnutls_global_version)) + +#endif /* GNUTLS_LIB_DB_H */ diff --git a/lib/debug.c b/lib/debug.c index 252f2470a6..166dd61cad 100644 --- a/lib/debug.c +++ b/lib/debug.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -84,56 +84,48 @@ const char type) { switch (type) { + case GNUTLS_HANDSHAKE_END_OF_EARLY_DATA: + return "END OF EARLY DATA"; + case GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST: + return "HELLO RETRY REQUEST"; case GNUTLS_HANDSHAKE_HELLO_REQUEST: return "HELLO REQUEST"; - break; case GNUTLS_HANDSHAKE_CLIENT_HELLO: return "CLIENT HELLO"; - break; #ifdef ENABLE_SSL2 case GNUTLS_HANDSHAKE_CLIENT_HELLO_V2: return "SSL2 CLIENT HELLO"; - break; #endif case GNUTLS_HANDSHAKE_SERVER_HELLO: return "SERVER HELLO"; - break; case GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST: return "HELLO VERIFY REQUEST"; - break; case GNUTLS_HANDSHAKE_CERTIFICATE_PKT: return "CERTIFICATE"; - break; + case GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS: + return "ENCRYPTED EXTENSIONS"; case GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE: return "SERVER KEY EXCHANGE"; - break; case GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST: return "CERTIFICATE REQUEST"; - break; case GNUTLS_HANDSHAKE_SERVER_HELLO_DONE: return "SERVER HELLO DONE"; - break; case GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY: return "CERTIFICATE VERIFY"; - break; case GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE: return "CLIENT KEY EXCHANGE"; - break; case GNUTLS_HANDSHAKE_FINISHED: return "FINISHED"; - break; + case GNUTLS_HANDSHAKE_KEY_UPDATE: + return "KEY_UPDATE"; case GNUTLS_HANDSHAKE_SUPPLEMENTAL: return "SUPPLEMENTAL"; - break; case GNUTLS_HANDSHAKE_CERTIFICATE_STATUS: return "CERTIFICATE STATUS"; - break; case GNUTLS_HANDSHAKE_NEW_SESSION_TICKET: return "NEW SESSION TICKET"; - break; case GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC: return "CHANGE CIPHER SPEC"; - break; default: return "Unknown Handshake packet"; } diff --git a/lib/debug.h b/lib/debug.h index 1c3ab1b013..231570f521 100644 --- a/lib/debug.h +++ b/lib/debug.h @@ -16,10 +16,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_DEBUG_H +#define GNUTLS_LIB_DEBUG_H + const char *_gnutls_packet2str(content_type_t packet); inline static const char *_gnutls_handshake2str(unsigned x) { @@ -33,3 +36,5 @@ inline static const char *_gnutls_handshake2str(unsigned x) void _gnutls_dump_mpi(const char *prefix, bigint_t a); void _gnutls_dump_vector(const char *prefix, const uint8_t * a, size_t a_size); + +#endif /* GNUTLS_LIB_DEBUG_H */ diff --git a/lib/dh-primes.c b/lib/dh-primes.c index 50af25f9c2..d785584d0f 100644 --- a/lib/dh-primes.c +++ b/lib/dh-primes.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -27,6 +27,8 @@ #include "dh.h" +static const unsigned char ffdhe_generator = 0x02; + static const unsigned char ffdhe_params_2048[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0xF8, 0x54, 0x58, 0xA2, 0xBB, @@ -67,12 +69,52 @@ static const unsigned char ffdhe_params_2048[] = { 0xFF, 0xFF, 0xFF, 0xFF }; +static const unsigned char ffdhe_q_2048[] = { + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD6, 0xFC, 0x2A, 0x2C, 0x51, 0x5D, + 0xA5, 0x4D, 0x57, 0xEE, 0x2B, 0x10, 0x13, + 0x9E, 0x9E, 0x78, 0xEC, 0x5C, 0xE2, 0xC1, + 0xE7, 0x16, 0x9B, 0x4A, 0xD4, 0xF0, 0x9B, + 0x20, 0x8A, 0x32, 0x19, 0xFD, 0xE6, 0x49, + 0xCE, 0xE7, 0x12, 0x4D, 0x9F, 0x7C, 0xBE, + 0x97, 0xF1, 0xB1, 0xB1, 0x86, 0x3A, 0xEC, + 0x7B, 0x40, 0xD9, 0x01, 0x57, 0x62, 0x30, + 0xBD, 0x69, 0xEF, 0x8F, 0x6A, 0xEA, 0xFE, + 0xB2, 0xB0, 0x92, 0x19, 0xFA, 0x8F, 0xAF, + 0x83, 0x37, 0x68, 0x42, 0xB1, 0xB2, 0xAA, + 0x9E, 0xF6, 0x8D, 0x79, 0xDA, 0xAB, 0x89, + 0xAF, 0x3F, 0xAB, 0xE4, 0x9A, 0xCC, 0x27, + 0x86, 0x38, 0x70, 0x73, 0x45, 0xBB, 0xF1, + 0x53, 0x44, 0xED, 0x79, 0xF7, 0xF4, 0x39, + 0x0E, 0xF8, 0xAC, 0x50, 0x9B, 0x56, 0xF3, + 0x9A, 0x98, 0x56, 0x65, 0x27, 0xA4, 0x1D, + 0x3C, 0xBD, 0x5E, 0x05, 0x58, 0xC1, 0x59, + 0x92, 0x7D, 0xB0, 0xE8, 0x84, 0x54, 0xA5, + 0xD9, 0x64, 0x71, 0xFD, 0xDC, 0xB5, 0x6D, + 0x5B, 0xB0, 0x6B, 0xFA, 0x34, 0x0E, 0xA7, + 0xA1, 0x51, 0xEF, 0x1C, 0xA6, 0xFA, 0x57, + 0x2B, 0x76, 0xF3, 0xB1, 0xB9, 0x5D, 0x8C, + 0x85, 0x83, 0xD3, 0xE4, 0x77, 0x05, 0x36, + 0xB8, 0x4F, 0x01, 0x7E, 0x70, 0xE6, 0xFB, + 0xF1, 0x76, 0x60, 0x1A, 0x02, 0x66, 0x94, + 0x1A, 0x17, 0xB0, 0xC8, 0xB9, 0x7F, 0x4E, + 0x74, 0xC2, 0xC1, 0xFF, 0xC7, 0x27, 0x89, + 0x19, 0x77, 0x79, 0x40, 0xC1, 0xE1, 0xFF, + 0x1D, 0x8D, 0xA6, 0x37, 0xD6, 0xB9, 0x9D, + 0xDA, 0xFE, 0x5E, 0x17, 0x61, 0x10, 0x02, + 0xE2, 0xC7, 0x78, 0xC1, 0xBE, 0x8B, 0x41, + 0xD9, 0x63, 0x79, 0xA5, 0x13, 0x60, 0xD9, + 0x77, 0xFD, 0x44, 0x35, 0xA1, 0x1C, 0x30, + 0x94, 0x2E, 0x4B, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF +}; + const gnutls_datum_t gnutls_ffdhe_2048_group_prime = { (void *) ffdhe_params_2048, sizeof(ffdhe_params_2048) }; - -static const unsigned char ffdhe_generator = 0x02; - +const gnutls_datum_t gnutls_ffdhe_2048_group_q = { + (void *) ffdhe_q_2048, sizeof(ffdhe_q_2048) +}; const gnutls_datum_t gnutls_ffdhe_2048_group_generator = { (void *) &ffdhe_generator, sizeof(ffdhe_generator) }; @@ -136,13 +178,73 @@ static const unsigned char ffdhe_params_3072[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; -const gnutls_datum_t gnutls_ffdhe_3072_group_generator = { - (void *) &ffdhe_generator, sizeof(ffdhe_generator) +static const unsigned char ffdhe_q_3072[] = { + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD6, 0xFC, 0x2A, 0x2C, 0x51, 0x5D, + 0xA5, 0x4D, 0x57, 0xEE, 0x2B, 0x10, 0x13, + 0x9E, 0x9E, 0x78, 0xEC, 0x5C, 0xE2, 0xC1, + 0xE7, 0x16, 0x9B, 0x4A, 0xD4, 0xF0, 0x9B, + 0x20, 0x8A, 0x32, 0x19, 0xFD, 0xE6, 0x49, + 0xCE, 0xE7, 0x12, 0x4D, 0x9F, 0x7C, 0xBE, + 0x97, 0xF1, 0xB1, 0xB1, 0x86, 0x3A, 0xEC, + 0x7B, 0x40, 0xD9, 0x01, 0x57, 0x62, 0x30, + 0xBD, 0x69, 0xEF, 0x8F, 0x6A, 0xEA, 0xFE, + 0xB2, 0xB0, 0x92, 0x19, 0xFA, 0x8F, 0xAF, + 0x83, 0x37, 0x68, 0x42, 0xB1, 0xB2, 0xAA, + 0x9E, 0xF6, 0x8D, 0x79, 0xDA, 0xAB, 0x89, + 0xAF, 0x3F, 0xAB, 0xE4, 0x9A, 0xCC, 0x27, + 0x86, 0x38, 0x70, 0x73, 0x45, 0xBB, 0xF1, + 0x53, 0x44, 0xED, 0x79, 0xF7, 0xF4, 0x39, + 0x0E, 0xF8, 0xAC, 0x50, 0x9B, 0x56, 0xF3, + 0x9A, 0x98, 0x56, 0x65, 0x27, 0xA4, 0x1D, + 0x3C, 0xBD, 0x5E, 0x05, 0x58, 0xC1, 0x59, + 0x92, 0x7D, 0xB0, 0xE8, 0x84, 0x54, 0xA5, + 0xD9, 0x64, 0x71, 0xFD, 0xDC, 0xB5, 0x6D, + 0x5B, 0xB0, 0x6B, 0xFA, 0x34, 0x0E, 0xA7, + 0xA1, 0x51, 0xEF, 0x1C, 0xA6, 0xFA, 0x57, + 0x2B, 0x76, 0xF3, 0xB1, 0xB9, 0x5D, 0x8C, + 0x85, 0x83, 0xD3, 0xE4, 0x77, 0x05, 0x36, + 0xB8, 0x4F, 0x01, 0x7E, 0x70, 0xE6, 0xFB, + 0xF1, 0x76, 0x60, 0x1A, 0x02, 0x66, 0x94, + 0x1A, 0x17, 0xB0, 0xC8, 0xB9, 0x7F, 0x4E, + 0x74, 0xC2, 0xC1, 0xFF, 0xC7, 0x27, 0x89, + 0x19, 0x77, 0x79, 0x40, 0xC1, 0xE1, 0xFF, + 0x1D, 0x8D, 0xA6, 0x37, 0xD6, 0xB9, 0x9D, + 0xDA, 0xFE, 0x5E, 0x17, 0x61, 0x10, 0x02, + 0xE2, 0xC7, 0x78, 0xC1, 0xBE, 0x8B, 0x41, + 0xD9, 0x63, 0x79, 0xA5, 0x13, 0x60, 0xD9, + 0x77, 0xFD, 0x44, 0x35, 0xA1, 0x1C, 0x30, + 0x8F, 0xE7, 0xEE, 0x6F, 0x1A, 0xAD, 0x9D, + 0xB2, 0x8C, 0x81, 0xAD, 0xDE, 0x1A, 0x7A, + 0x6F, 0x7C, 0xCE, 0x01, 0x1C, 0x30, 0xDA, + 0x37, 0xE4, 0xEB, 0x73, 0x64, 0x83, 0xBD, + 0x6C, 0x8E, 0x93, 0x48, 0xFB, 0xFB, 0xF7, + 0x2C, 0xC6, 0x58, 0x7D, 0x60, 0xC3, 0x6C, + 0x8E, 0x57, 0x7F, 0x09, 0x84, 0xC2, 0x89, + 0xC9, 0x38, 0x5A, 0x09, 0x86, 0x49, 0xDE, + 0x21, 0xBC, 0xA2, 0x7A, 0x7E, 0xA2, 0x29, + 0x71, 0x6B, 0xA6, 0xE9, 0xB2, 0x79, 0x71, + 0x0F, 0x38, 0xFA, 0xA5, 0xFF, 0xAE, 0x57, + 0x41, 0x55, 0xCE, 0x4E, 0xFB, 0x4F, 0x74, + 0x36, 0x95, 0xE2, 0x91, 0x1B, 0x1D, 0x06, + 0xD5, 0xE2, 0x90, 0xCB, 0xCD, 0x86, 0xF5, + 0x6D, 0x0E, 0xDF, 0xCD, 0x21, 0x6A, 0xE2, + 0x24, 0x27, 0x05, 0x5E, 0x68, 0x35, 0xFD, + 0x29, 0xEE, 0xF7, 0x9E, 0x0D, 0x90, 0x77, + 0x1F, 0xEA, 0xCE, 0xBE, 0x12, 0xF2, 0x0E, + 0x95, 0xB3, 0x63, 0x17, 0x1B, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; const gnutls_datum_t gnutls_ffdhe_3072_group_prime = { (void *) ffdhe_params_3072, sizeof(ffdhe_params_3072) }; +const gnutls_datum_t gnutls_ffdhe_3072_group_q = { + (void *) ffdhe_q_3072, sizeof(ffdhe_q_3072) +}; +const gnutls_datum_t gnutls_ffdhe_3072_group_generator = { + (void *) &ffdhe_generator, sizeof(ffdhe_generator) +}; const unsigned int gnutls_ffdhe_3072_key_bits = 276; static const unsigned char ffdhe_params_4096[] = { @@ -222,15 +324,331 @@ static const unsigned char ffdhe_params_4096[] = { 0xFF }; -const gnutls_datum_t gnutls_ffdhe_4096_group_generator = { - (void *) &ffdhe_generator, sizeof(ffdhe_generator) +static const unsigned char ffdhe_q_4096[] = { + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD6, 0xFC, 0x2A, 0x2C, 0x51, 0x5D, + 0xA5, 0x4D, 0x57, 0xEE, 0x2B, 0x10, 0x13, + 0x9E, 0x9E, 0x78, 0xEC, 0x5C, 0xE2, 0xC1, + 0xE7, 0x16, 0x9B, 0x4A, 0xD4, 0xF0, 0x9B, + 0x20, 0x8A, 0x32, 0x19, 0xFD, 0xE6, 0x49, + 0xCE, 0xE7, 0x12, 0x4D, 0x9F, 0x7C, 0xBE, + 0x97, 0xF1, 0xB1, 0xB1, 0x86, 0x3A, 0xEC, + 0x7B, 0x40, 0xD9, 0x01, 0x57, 0x62, 0x30, + 0xBD, 0x69, 0xEF, 0x8F, 0x6A, 0xEA, 0xFE, + 0xB2, 0xB0, 0x92, 0x19, 0xFA, 0x8F, 0xAF, + 0x83, 0x37, 0x68, 0x42, 0xB1, 0xB2, 0xAA, + 0x9E, 0xF6, 0x8D, 0x79, 0xDA, 0xAB, 0x89, + 0xAF, 0x3F, 0xAB, 0xE4, 0x9A, 0xCC, 0x27, + 0x86, 0x38, 0x70, 0x73, 0x45, 0xBB, 0xF1, + 0x53, 0x44, 0xED, 0x79, 0xF7, 0xF4, 0x39, + 0x0E, 0xF8, 0xAC, 0x50, 0x9B, 0x56, 0xF3, + 0x9A, 0x98, 0x56, 0x65, 0x27, 0xA4, 0x1D, + 0x3C, 0xBD, 0x5E, 0x05, 0x58, 0xC1, 0x59, + 0x92, 0x7D, 0xB0, 0xE8, 0x84, 0x54, 0xA5, + 0xD9, 0x64, 0x71, 0xFD, 0xDC, 0xB5, 0x6D, + 0x5B, 0xB0, 0x6B, 0xFA, 0x34, 0x0E, 0xA7, + 0xA1, 0x51, 0xEF, 0x1C, 0xA6, 0xFA, 0x57, + 0x2B, 0x76, 0xF3, 0xB1, 0xB9, 0x5D, 0x8C, + 0x85, 0x83, 0xD3, 0xE4, 0x77, 0x05, 0x36, + 0xB8, 0x4F, 0x01, 0x7E, 0x70, 0xE6, 0xFB, + 0xF1, 0x76, 0x60, 0x1A, 0x02, 0x66, 0x94, + 0x1A, 0x17, 0xB0, 0xC8, 0xB9, 0x7F, 0x4E, + 0x74, 0xC2, 0xC1, 0xFF, 0xC7, 0x27, 0x89, + 0x19, 0x77, 0x79, 0x40, 0xC1, 0xE1, 0xFF, + 0x1D, 0x8D, 0xA6, 0x37, 0xD6, 0xB9, 0x9D, + 0xDA, 0xFE, 0x5E, 0x17, 0x61, 0x10, 0x02, + 0xE2, 0xC7, 0x78, 0xC1, 0xBE, 0x8B, 0x41, + 0xD9, 0x63, 0x79, 0xA5, 0x13, 0x60, 0xD9, + 0x77, 0xFD, 0x44, 0x35, 0xA1, 0x1C, 0x30, + 0x8F, 0xE7, 0xEE, 0x6F, 0x1A, 0xAD, 0x9D, + 0xB2, 0x8C, 0x81, 0xAD, 0xDE, 0x1A, 0x7A, + 0x6F, 0x7C, 0xCE, 0x01, 0x1C, 0x30, 0xDA, + 0x37, 0xE4, 0xEB, 0x73, 0x64, 0x83, 0xBD, + 0x6C, 0x8E, 0x93, 0x48, 0xFB, 0xFB, 0xF7, + 0x2C, 0xC6, 0x58, 0x7D, 0x60, 0xC3, 0x6C, + 0x8E, 0x57, 0x7F, 0x09, 0x84, 0xC2, 0x89, + 0xC9, 0x38, 0x5A, 0x09, 0x86, 0x49, 0xDE, + 0x21, 0xBC, 0xA2, 0x7A, 0x7E, 0xA2, 0x29, + 0x71, 0x6B, 0xA6, 0xE9, 0xB2, 0x79, 0x71, + 0x0F, 0x38, 0xFA, 0xA5, 0xFF, 0xAE, 0x57, + 0x41, 0x55, 0xCE, 0x4E, 0xFB, 0x4F, 0x74, + 0x36, 0x95, 0xE2, 0x91, 0x1B, 0x1D, 0x06, + 0xD5, 0xE2, 0x90, 0xCB, 0xCD, 0x86, 0xF5, + 0x6D, 0x0E, 0xDF, 0xCD, 0x21, 0x6A, 0xE2, + 0x24, 0x27, 0x05, 0x5E, 0x68, 0x35, 0xFD, + 0x29, 0xEE, 0xF7, 0x9E, 0x0D, 0x90, 0x77, + 0x1F, 0xEA, 0xCE, 0xBE, 0x12, 0xF2, 0x0E, + 0x95, 0xB3, 0x4F, 0x0F, 0x78, 0xB7, 0x37, + 0xA9, 0x61, 0x8B, 0x26, 0xFA, 0x7D, 0xBC, + 0x98, 0x74, 0xF2, 0x72, 0xC4, 0x2B, 0xDB, + 0x56, 0x3E, 0xAF, 0xA1, 0x6B, 0x4F, 0xB6, + 0x8C, 0x3B, 0xB1, 0xE7, 0x8E, 0xAA, 0x81, + 0xA0, 0x02, 0x43, 0xFA, 0xAD, 0xD2, 0xBF, + 0x18, 0xE6, 0x3D, 0x38, 0x9A, 0xE4, 0x43, + 0x77, 0xDA, 0x18, 0xC5, 0x76, 0xB5, 0x0F, + 0x00, 0x96, 0xCF, 0x34, 0x19, 0x54, 0x83, + 0xB0, 0x05, 0x48, 0xC0, 0x98, 0x62, 0x36, + 0xE3, 0xBC, 0x7C, 0xB8, 0xD6, 0x80, 0x1C, + 0x04, 0x94, 0xCC, 0xD1, 0x99, 0xE5, 0xC5, + 0xBD, 0x0D, 0x0E, 0xDC, 0x9E, 0xB8, 0xA0, + 0x00, 0x1E, 0x15, 0x27, 0x67, 0x54, 0xFC, + 0xC6, 0x85, 0x66, 0x05, 0x41, 0x48, 0xE6, + 0xE7, 0x64, 0xBE, 0xE7, 0xC7, 0x64, 0xDA, + 0xAD, 0x3F, 0xC4, 0x52, 0x35, 0xA6, 0xDA, + 0xD4, 0x28, 0xFA, 0x20, 0xC1, 0x70, 0xE3, + 0x45, 0x00, 0x3F, 0x2F, 0x32, 0xAF, 0xB5, + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF }; const gnutls_datum_t gnutls_ffdhe_4096_group_prime = { (void *) ffdhe_params_4096, sizeof(ffdhe_params_4096) }; +const gnutls_datum_t gnutls_ffdhe_4096_group_q = { + (void *) ffdhe_q_4096, sizeof(ffdhe_q_4096) +}; +const gnutls_datum_t gnutls_ffdhe_4096_group_generator = { + (void *) &ffdhe_generator, sizeof(ffdhe_generator) +}; const unsigned int gnutls_ffdhe_4096_key_bits = 336; +static const unsigned char ffdhe_params_6144[] = { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xAD, 0xF8, 0x54, 0x58, 0xA2, 0xBB, + 0x4A, 0x9A, 0xAF, 0xDC, 0x56, 0x20, 0x27, + 0x3D, 0x3C, 0xF1, 0xD8, 0xB9, 0xC5, 0x83, + 0xCE, 0x2D, 0x36, 0x95, 0xA9, 0xE1, 0x36, + 0x41, 0x14, 0x64, 0x33, 0xFB, 0xCC, 0x93, + 0x9D, 0xCE, 0x24, 0x9B, 0x3E, 0xF9, 0x7D, + 0x2F, 0xE3, 0x63, 0x63, 0x0C, 0x75, 0xD8, + 0xF6, 0x81, 0xB2, 0x02, 0xAE, 0xC4, 0x61, + 0x7A, 0xD3, 0xDF, 0x1E, 0xD5, 0xD5, 0xFD, + 0x65, 0x61, 0x24, 0x33, 0xF5, 0x1F, 0x5F, + 0x06, 0x6E, 0xD0, 0x85, 0x63, 0x65, 0x55, + 0x3D, 0xED, 0x1A, 0xF3, 0xB5, 0x57, 0x13, + 0x5E, 0x7F, 0x57, 0xC9, 0x35, 0x98, 0x4F, + 0x0C, 0x70, 0xE0, 0xE6, 0x8B, 0x77, 0xE2, + 0xA6, 0x89, 0xDA, 0xF3, 0xEF, 0xE8, 0x72, + 0x1D, 0xF1, 0x58, 0xA1, 0x36, 0xAD, 0xE7, + 0x35, 0x30, 0xAC, 0xCA, 0x4F, 0x48, 0x3A, + 0x79, 0x7A, 0xBC, 0x0A, 0xB1, 0x82, 0xB3, + 0x24, 0xFB, 0x61, 0xD1, 0x08, 0xA9, 0x4B, + 0xB2, 0xC8, 0xE3, 0xFB, 0xB9, 0x6A, 0xDA, + 0xB7, 0x60, 0xD7, 0xF4, 0x68, 0x1D, 0x4F, + 0x42, 0xA3, 0xDE, 0x39, 0x4D, 0xF4, 0xAE, + 0x56, 0xED, 0xE7, 0x63, 0x72, 0xBB, 0x19, + 0x0B, 0x07, 0xA7, 0xC8, 0xEE, 0x0A, 0x6D, + 0x70, 0x9E, 0x02, 0xFC, 0xE1, 0xCD, 0xF7, + 0xE2, 0xEC, 0xC0, 0x34, 0x04, 0xCD, 0x28, + 0x34, 0x2F, 0x61, 0x91, 0x72, 0xFE, 0x9C, + 0xE9, 0x85, 0x83, 0xFF, 0x8E, 0x4F, 0x12, + 0x32, 0xEE, 0xF2, 0x81, 0x83, 0xC3, 0xFE, + 0x3B, 0x1B, 0x4C, 0x6F, 0xAD, 0x73, 0x3B, + 0xB5, 0xFC, 0xBC, 0x2E, 0xC2, 0x20, 0x05, + 0xC5, 0x8E, 0xF1, 0x83, 0x7D, 0x16, 0x83, + 0xB2, 0xC6, 0xF3, 0x4A, 0x26, 0xC1, 0xB2, + 0xEF, 0xFA, 0x88, 0x6B, 0x42, 0x38, 0x61, + 0x1F, 0xCF, 0xDC, 0xDE, 0x35, 0x5B, 0x3B, + 0x65, 0x19, 0x03, 0x5B, 0xBC, 0x34, 0xF4, + 0xDE, 0xF9, 0x9C, 0x02, 0x38, 0x61, 0xB4, + 0x6F, 0xC9, 0xD6, 0xE6, 0xC9, 0x07, 0x7A, + 0xD9, 0x1D, 0x26, 0x91, 0xF7, 0xF7, 0xEE, + 0x59, 0x8C, 0xB0, 0xFA, 0xC1, 0x86, 0xD9, + 0x1C, 0xAE, 0xFE, 0x13, 0x09, 0x85, 0x13, + 0x92, 0x70, 0xB4, 0x13, 0x0C, 0x93, 0xBC, + 0x43, 0x79, 0x44, 0xF4, 0xFD, 0x44, 0x52, + 0xE2, 0xD7, 0x4D, 0xD3, 0x64, 0xF2, 0xE2, + 0x1E, 0x71, 0xF5, 0x4B, 0xFF, 0x5C, 0xAE, + 0x82, 0xAB, 0x9C, 0x9D, 0xF6, 0x9E, 0xE8, + 0x6D, 0x2B, 0xC5, 0x22, 0x36, 0x3A, 0x0D, + 0xAB, 0xC5, 0x21, 0x97, 0x9B, 0x0D, 0xEA, + 0xDA, 0x1D, 0xBF, 0x9A, 0x42, 0xD5, 0xC4, + 0x48, 0x4E, 0x0A, 0xBC, 0xD0, 0x6B, 0xFA, + 0x53, 0xDD, 0xEF, 0x3C, 0x1B, 0x20, 0xEE, + 0x3F, 0xD5, 0x9D, 0x7C, 0x25, 0xE4, 0x1D, + 0x2B, 0x66, 0x9E, 0x1E, 0xF1, 0x6E, 0x6F, + 0x52, 0xC3, 0x16, 0x4D, 0xF4, 0xFB, 0x79, + 0x30, 0xE9, 0xE4, 0xE5, 0x88, 0x57, 0xB6, + 0xAC, 0x7D, 0x5F, 0x42, 0xD6, 0x9F, 0x6D, + 0x18, 0x77, 0x63, 0xCF, 0x1D, 0x55, 0x03, + 0x40, 0x04, 0x87, 0xF5, 0x5B, 0xA5, 0x7E, + 0x31, 0xCC, 0x7A, 0x71, 0x35, 0xC8, 0x86, + 0xEF, 0xB4, 0x31, 0x8A, 0xED, 0x6A, 0x1E, + 0x01, 0x2D, 0x9E, 0x68, 0x32, 0xA9, 0x07, + 0x60, 0x0A, 0x91, 0x81, 0x30, 0xC4, 0x6D, + 0xC7, 0x78, 0xF9, 0x71, 0xAD, 0x00, 0x38, + 0x09, 0x29, 0x99, 0xA3, 0x33, 0xCB, 0x8B, + 0x7A, 0x1A, 0x1D, 0xB9, 0x3D, 0x71, 0x40, + 0x00, 0x3C, 0x2A, 0x4E, 0xCE, 0xA9, 0xF9, + 0x8D, 0x0A, 0xCC, 0x0A, 0x82, 0x91, 0xCD, + 0xCE, 0xC9, 0x7D, 0xCF, 0x8E, 0xC9, 0xB5, + 0x5A, 0x7F, 0x88, 0xA4, 0x6B, 0x4D, 0xB5, + 0xA8, 0x51, 0xF4, 0x41, 0x82, 0xE1, 0xC6, + 0x8A, 0x00, 0x7E, 0x5E, 0x0D, 0xD9, 0x02, + 0x0B, 0xFD, 0x64, 0xB6, 0x45, 0x03, 0x6C, + 0x7A, 0x4E, 0x67, 0x7D, 0x2C, 0x38, 0x53, + 0x2A, 0x3A, 0x23, 0xBA, 0x44, 0x42, 0xCA, + 0xF5, 0x3E, 0xA6, 0x3B, 0xB4, 0x54, 0x32, + 0x9B, 0x76, 0x24, 0xC8, 0x91, 0x7B, 0xDD, + 0x64, 0xB1, 0xC0, 0xFD, 0x4C, 0xB3, 0x8E, + 0x8C, 0x33, 0x4C, 0x70, 0x1C, 0x3A, 0xCD, + 0xAD, 0x06, 0x57, 0xFC, 0xCF, 0xEC, 0x71, + 0x9B, 0x1F, 0x5C, 0x3E, 0x4E, 0x46, 0x04, + 0x1F, 0x38, 0x81, 0x47, 0xFB, 0x4C, 0xFD, + 0xB4, 0x77, 0xA5, 0x24, 0x71, 0xF7, 0xA9, + 0xA9, 0x69, 0x10, 0xB8, 0x55, 0x32, 0x2E, + 0xDB, 0x63, 0x40, 0xD8, 0xA0, 0x0E, 0xF0, + 0x92, 0x35, 0x05, 0x11, 0xE3, 0x0A, 0xBE, + 0xC1, 0xFF, 0xF9, 0xE3, 0xA2, 0x6E, 0x7F, + 0xB2, 0x9F, 0x8C, 0x18, 0x30, 0x23, 0xC3, + 0x58, 0x7E, 0x38, 0xDA, 0x00, 0x77, 0xD9, + 0xB4, 0x76, 0x3E, 0x4E, 0x4B, 0x94, 0xB2, + 0xBB, 0xC1, 0x94, 0xC6, 0x65, 0x1E, 0x77, + 0xCA, 0xF9, 0x92, 0xEE, 0xAA, 0xC0, 0x23, + 0x2A, 0x28, 0x1B, 0xF6, 0xB3, 0xA7, 0x39, + 0xC1, 0x22, 0x61, 0x16, 0x82, 0x0A, 0xE8, + 0xDB, 0x58, 0x47, 0xA6, 0x7C, 0xBE, 0xF9, + 0xC9, 0x09, 0x1B, 0x46, 0x2D, 0x53, 0x8C, + 0xD7, 0x2B, 0x03, 0x74, 0x6A, 0xE7, 0x7F, + 0x5E, 0x62, 0x29, 0x2C, 0x31, 0x15, 0x62, + 0xA8, 0x46, 0x50, 0x5D, 0xC8, 0x2D, 0xB8, + 0x54, 0x33, 0x8A, 0xE4, 0x9F, 0x52, 0x35, + 0xC9, 0x5B, 0x91, 0x17, 0x8C, 0xCF, 0x2D, + 0xD5, 0xCA, 0xCE, 0xF4, 0x03, 0xEC, 0x9D, + 0x18, 0x10, 0xC6, 0x27, 0x2B, 0x04, 0x5B, + 0x3B, 0x71, 0xF9, 0xDC, 0x6B, 0x80, 0xD6, + 0x3F, 0xDD, 0x4A, 0x8E, 0x9A, 0xDB, 0x1E, + 0x69, 0x62, 0xA6, 0x95, 0x26, 0xD4, 0x31, + 0x61, 0xC1, 0xA4, 0x1D, 0x57, 0x0D, 0x79, + 0x38, 0xDA, 0xD4, 0xA4, 0x0E, 0x32, 0x9C, + 0xD0, 0xE4, 0x0E, 0x65, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +static const unsigned char ffdhe_q_6144[] = { + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD6, 0xFC, 0x2A, 0x2C, 0x51, 0x5D, + 0xA5, 0x4D, 0x57, 0xEE, 0x2B, 0x10, 0x13, + 0x9E, 0x9E, 0x78, 0xEC, 0x5C, 0xE2, 0xC1, + 0xE7, 0x16, 0x9B, 0x4A, 0xD4, 0xF0, 0x9B, + 0x20, 0x8A, 0x32, 0x19, 0xFD, 0xE6, 0x49, + 0xCE, 0xE7, 0x12, 0x4D, 0x9F, 0x7C, 0xBE, + 0x97, 0xF1, 0xB1, 0xB1, 0x86, 0x3A, 0xEC, + 0x7B, 0x40, 0xD9, 0x01, 0x57, 0x62, 0x30, + 0xBD, 0x69, 0xEF, 0x8F, 0x6A, 0xEA, 0xFE, + 0xB2, 0xB0, 0x92, 0x19, 0xFA, 0x8F, 0xAF, + 0x83, 0x37, 0x68, 0x42, 0xB1, 0xB2, 0xAA, + 0x9E, 0xF6, 0x8D, 0x79, 0xDA, 0xAB, 0x89, + 0xAF, 0x3F, 0xAB, 0xE4, 0x9A, 0xCC, 0x27, + 0x86, 0x38, 0x70, 0x73, 0x45, 0xBB, 0xF1, + 0x53, 0x44, 0xED, 0x79, 0xF7, 0xF4, 0x39, + 0x0E, 0xF8, 0xAC, 0x50, 0x9B, 0x56, 0xF3, + 0x9A, 0x98, 0x56, 0x65, 0x27, 0xA4, 0x1D, + 0x3C, 0xBD, 0x5E, 0x05, 0x58, 0xC1, 0x59, + 0x92, 0x7D, 0xB0, 0xE8, 0x84, 0x54, 0xA5, + 0xD9, 0x64, 0x71, 0xFD, 0xDC, 0xB5, 0x6D, + 0x5B, 0xB0, 0x6B, 0xFA, 0x34, 0x0E, 0xA7, + 0xA1, 0x51, 0xEF, 0x1C, 0xA6, 0xFA, 0x57, + 0x2B, 0x76, 0xF3, 0xB1, 0xB9, 0x5D, 0x8C, + 0x85, 0x83, 0xD3, 0xE4, 0x77, 0x05, 0x36, + 0xB8, 0x4F, 0x01, 0x7E, 0x70, 0xE6, 0xFB, + 0xF1, 0x76, 0x60, 0x1A, 0x02, 0x66, 0x94, + 0x1A, 0x17, 0xB0, 0xC8, 0xB9, 0x7F, 0x4E, + 0x74, 0xC2, 0xC1, 0xFF, 0xC7, 0x27, 0x89, + 0x19, 0x77, 0x79, 0x40, 0xC1, 0xE1, 0xFF, + 0x1D, 0x8D, 0xA6, 0x37, 0xD6, 0xB9, 0x9D, + 0xDA, 0xFE, 0x5E, 0x17, 0x61, 0x10, 0x02, + 0xE2, 0xC7, 0x78, 0xC1, 0xBE, 0x8B, 0x41, + 0xD9, 0x63, 0x79, 0xA5, 0x13, 0x60, 0xD9, + 0x77, 0xFD, 0x44, 0x35, 0xA1, 0x1C, 0x30, + 0x8F, 0xE7, 0xEE, 0x6F, 0x1A, 0xAD, 0x9D, + 0xB2, 0x8C, 0x81, 0xAD, 0xDE, 0x1A, 0x7A, + 0x6F, 0x7C, 0xCE, 0x01, 0x1C, 0x30, 0xDA, + 0x37, 0xE4, 0xEB, 0x73, 0x64, 0x83, 0xBD, + 0x6C, 0x8E, 0x93, 0x48, 0xFB, 0xFB, 0xF7, + 0x2C, 0xC6, 0x58, 0x7D, 0x60, 0xC3, 0x6C, + 0x8E, 0x57, 0x7F, 0x09, 0x84, 0xC2, 0x89, + 0xC9, 0x38, 0x5A, 0x09, 0x86, 0x49, 0xDE, + 0x21, 0xBC, 0xA2, 0x7A, 0x7E, 0xA2, 0x29, + 0x71, 0x6B, 0xA6, 0xE9, 0xB2, 0x79, 0x71, + 0x0F, 0x38, 0xFA, 0xA5, 0xFF, 0xAE, 0x57, + 0x41, 0x55, 0xCE, 0x4E, 0xFB, 0x4F, 0x74, + 0x36, 0x95, 0xE2, 0x91, 0x1B, 0x1D, 0x06, + 0xD5, 0xE2, 0x90, 0xCB, 0xCD, 0x86, 0xF5, + 0x6D, 0x0E, 0xDF, 0xCD, 0x21, 0x6A, 0xE2, + 0x24, 0x27, 0x05, 0x5E, 0x68, 0x35, 0xFD, + 0x29, 0xEE, 0xF7, 0x9E, 0x0D, 0x90, 0x77, + 0x1F, 0xEA, 0xCE, 0xBE, 0x12, 0xF2, 0x0E, + 0x95, 0xB3, 0x4F, 0x0F, 0x78, 0xB7, 0x37, + 0xA9, 0x61, 0x8B, 0x26, 0xFA, 0x7D, 0xBC, + 0x98, 0x74, 0xF2, 0x72, 0xC4, 0x2B, 0xDB, + 0x56, 0x3E, 0xAF, 0xA1, 0x6B, 0x4F, 0xB6, + 0x8C, 0x3B, 0xB1, 0xE7, 0x8E, 0xAA, 0x81, + 0xA0, 0x02, 0x43, 0xFA, 0xAD, 0xD2, 0xBF, + 0x18, 0xE6, 0x3D, 0x38, 0x9A, 0xE4, 0x43, + 0x77, 0xDA, 0x18, 0xC5, 0x76, 0xB5, 0x0F, + 0x00, 0x96, 0xCF, 0x34, 0x19, 0x54, 0x83, + 0xB0, 0x05, 0x48, 0xC0, 0x98, 0x62, 0x36, + 0xE3, 0xBC, 0x7C, 0xB8, 0xD6, 0x80, 0x1C, + 0x04, 0x94, 0xCC, 0xD1, 0x99, 0xE5, 0xC5, + 0xBD, 0x0D, 0x0E, 0xDC, 0x9E, 0xB8, 0xA0, + 0x00, 0x1E, 0x15, 0x27, 0x67, 0x54, 0xFC, + 0xC6, 0x85, 0x66, 0x05, 0x41, 0x48, 0xE6, + 0xE7, 0x64, 0xBE, 0xE7, 0xC7, 0x64, 0xDA, + 0xAD, 0x3F, 0xC4, 0x52, 0x35, 0xA6, 0xDA, + 0xD4, 0x28, 0xFA, 0x20, 0xC1, 0x70, 0xE3, + 0x45, 0x00, 0x3F, 0x2F, 0x06, 0xEC, 0x81, + 0x05, 0xFE, 0xB2, 0x5B, 0x22, 0x81, 0xB6, + 0x3D, 0x27, 0x33, 0xBE, 0x96, 0x1C, 0x29, + 0x95, 0x1D, 0x11, 0xDD, 0x22, 0x21, 0x65, + 0x7A, 0x9F, 0x53, 0x1D, 0xDA, 0x2A, 0x19, + 0x4D, 0xBB, 0x12, 0x64, 0x48, 0xBD, 0xEE, + 0xB2, 0x58, 0xE0, 0x7E, 0xA6, 0x59, 0xC7, + 0x46, 0x19, 0xA6, 0x38, 0x0E, 0x1D, 0x66, + 0xD6, 0x83, 0x2B, 0xFE, 0x67, 0xF6, 0x38, + 0xCD, 0x8F, 0xAE, 0x1F, 0x27, 0x23, 0x02, + 0x0F, 0x9C, 0x40, 0xA3, 0xFD, 0xA6, 0x7E, + 0xDA, 0x3B, 0xD2, 0x92, 0x38, 0xFB, 0xD4, + 0xD4, 0xB4, 0x88, 0x5C, 0x2A, 0x99, 0x17, + 0x6D, 0xB1, 0xA0, 0x6C, 0x50, 0x07, 0x78, + 0x49, 0x1A, 0x82, 0x88, 0xF1, 0x85, 0x5F, + 0x60, 0xFF, 0xFC, 0xF1, 0xD1, 0x37, 0x3F, + 0xD9, 0x4F, 0xC6, 0x0C, 0x18, 0x11, 0xE1, + 0xAC, 0x3F, 0x1C, 0x6D, 0x00, 0x3B, 0xEC, + 0xDA, 0x3B, 0x1F, 0x27, 0x25, 0xCA, 0x59, + 0x5D, 0xE0, 0xCA, 0x63, 0x32, 0x8F, 0x3B, + 0xE5, 0x7C, 0xC9, 0x77, 0x55, 0x60, 0x11, + 0x95, 0x14, 0x0D, 0xFB, 0x59, 0xD3, 0x9C, + 0xE0, 0x91, 0x30, 0x8B, 0x41, 0x05, 0x74, + 0x6D, 0xAC, 0x23, 0xD3, 0x3E, 0x5F, 0x7C, + 0xE4, 0x84, 0x8D, 0xA3, 0x16, 0xA9, 0xC6, + 0x6B, 0x95, 0x81, 0xBA, 0x35, 0x73, 0xBF, + 0xAF, 0x31, 0x14, 0x96, 0x18, 0x8A, 0xB1, + 0x54, 0x23, 0x28, 0x2E, 0xE4, 0x16, 0xDC, + 0x2A, 0x19, 0xC5, 0x72, 0x4F, 0xA9, 0x1A, + 0xE4, 0xAD, 0xC8, 0x8B, 0xC6, 0x67, 0x96, + 0xEA, 0xE5, 0x67, 0x7A, 0x01, 0xF6, 0x4E, + 0x8C, 0x08, 0x63, 0x13, 0x95, 0x82, 0x2D, + 0x9D, 0xB8, 0xFC, 0xEE, 0x35, 0xC0, 0x6B, + 0x1F, 0xEE, 0xA5, 0x47, 0x4D, 0x6D, 0x8F, + 0x34, 0xB1, 0x53, 0x4A, 0x93, 0x6A, 0x18, + 0xB0, 0xE0, 0xD2, 0x0E, 0xAB, 0x86, 0xBC, + 0x9C, 0x6D, 0x6A, 0x52, 0x07, 0x19, 0x4E, + 0x68, 0x72, 0x07, 0x32, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +const gnutls_datum_t gnutls_ffdhe_6144_group_prime = { + (void *) ffdhe_params_6144, sizeof(ffdhe_params_6144) +}; +const gnutls_datum_t gnutls_ffdhe_6144_group_q = { + (void *) ffdhe_q_6144, sizeof(ffdhe_q_6144) +}; +const gnutls_datum_t gnutls_ffdhe_6144_group_generator = { + (void *) &ffdhe_generator, sizeof(ffdhe_generator) +}; +const unsigned int gnutls_ffdhe_6144_key_bits = 376; + static const unsigned char ffdhe_params_8192[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0xF8, 0x54, 0x58, 0xA2, 0xBB, @@ -381,62 +799,165 @@ static const unsigned char ffdhe_params_8192[] = { 0xFF, 0xFF }; -const gnutls_datum_t gnutls_ffdhe_8192_group_generator = { - (void *) &ffdhe_generator, sizeof(ffdhe_generator) +static const unsigned char ffdhe_q_8192[] = { + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xD6, 0xFC, 0x2A, 0x2C, 0x51, 0x5D, + 0xA5, 0x4D, 0x57, 0xEE, 0x2B, 0x10, 0x13, + 0x9E, 0x9E, 0x78, 0xEC, 0x5C, 0xE2, 0xC1, + 0xE7, 0x16, 0x9B, 0x4A, 0xD4, 0xF0, 0x9B, + 0x20, 0x8A, 0x32, 0x19, 0xFD, 0xE6, 0x49, + 0xCE, 0xE7, 0x12, 0x4D, 0x9F, 0x7C, 0xBE, + 0x97, 0xF1, 0xB1, 0xB1, 0x86, 0x3A, 0xEC, + 0x7B, 0x40, 0xD9, 0x01, 0x57, 0x62, 0x30, + 0xBD, 0x69, 0xEF, 0x8F, 0x6A, 0xEA, 0xFE, + 0xB2, 0xB0, 0x92, 0x19, 0xFA, 0x8F, 0xAF, + 0x83, 0x37, 0x68, 0x42, 0xB1, 0xB2, 0xAA, + 0x9E, 0xF6, 0x8D, 0x79, 0xDA, 0xAB, 0x89, + 0xAF, 0x3F, 0xAB, 0xE4, 0x9A, 0xCC, 0x27, + 0x86, 0x38, 0x70, 0x73, 0x45, 0xBB, 0xF1, + 0x53, 0x44, 0xED, 0x79, 0xF7, 0xF4, 0x39, + 0x0E, 0xF8, 0xAC, 0x50, 0x9B, 0x56, 0xF3, + 0x9A, 0x98, 0x56, 0x65, 0x27, 0xA4, 0x1D, + 0x3C, 0xBD, 0x5E, 0x05, 0x58, 0xC1, 0x59, + 0x92, 0x7D, 0xB0, 0xE8, 0x84, 0x54, 0xA5, + 0xD9, 0x64, 0x71, 0xFD, 0xDC, 0xB5, 0x6D, + 0x5B, 0xB0, 0x6B, 0xFA, 0x34, 0x0E, 0xA7, + 0xA1, 0x51, 0xEF, 0x1C, 0xA6, 0xFA, 0x57, + 0x2B, 0x76, 0xF3, 0xB1, 0xB9, 0x5D, 0x8C, + 0x85, 0x83, 0xD3, 0xE4, 0x77, 0x05, 0x36, + 0xB8, 0x4F, 0x01, 0x7E, 0x70, 0xE6, 0xFB, + 0xF1, 0x76, 0x60, 0x1A, 0x02, 0x66, 0x94, + 0x1A, 0x17, 0xB0, 0xC8, 0xB9, 0x7F, 0x4E, + 0x74, 0xC2, 0xC1, 0xFF, 0xC7, 0x27, 0x89, + 0x19, 0x77, 0x79, 0x40, 0xC1, 0xE1, 0xFF, + 0x1D, 0x8D, 0xA6, 0x37, 0xD6, 0xB9, 0x9D, + 0xDA, 0xFE, 0x5E, 0x17, 0x61, 0x10, 0x02, + 0xE2, 0xC7, 0x78, 0xC1, 0xBE, 0x8B, 0x41, + 0xD9, 0x63, 0x79, 0xA5, 0x13, 0x60, 0xD9, + 0x77, 0xFD, 0x44, 0x35, 0xA1, 0x1C, 0x30, + 0x8F, 0xE7, 0xEE, 0x6F, 0x1A, 0xAD, 0x9D, + 0xB2, 0x8C, 0x81, 0xAD, 0xDE, 0x1A, 0x7A, + 0x6F, 0x7C, 0xCE, 0x01, 0x1C, 0x30, 0xDA, + 0x37, 0xE4, 0xEB, 0x73, 0x64, 0x83, 0xBD, + 0x6C, 0x8E, 0x93, 0x48, 0xFB, 0xFB, 0xF7, + 0x2C, 0xC6, 0x58, 0x7D, 0x60, 0xC3, 0x6C, + 0x8E, 0x57, 0x7F, 0x09, 0x84, 0xC2, 0x89, + 0xC9, 0x38, 0x5A, 0x09, 0x86, 0x49, 0xDE, + 0x21, 0xBC, 0xA2, 0x7A, 0x7E, 0xA2, 0x29, + 0x71, 0x6B, 0xA6, 0xE9, 0xB2, 0x79, 0x71, + 0x0F, 0x38, 0xFA, 0xA5, 0xFF, 0xAE, 0x57, + 0x41, 0x55, 0xCE, 0x4E, 0xFB, 0x4F, 0x74, + 0x36, 0x95, 0xE2, 0x91, 0x1B, 0x1D, 0x06, + 0xD5, 0xE2, 0x90, 0xCB, 0xCD, 0x86, 0xF5, + 0x6D, 0x0E, 0xDF, 0xCD, 0x21, 0x6A, 0xE2, + 0x24, 0x27, 0x05, 0x5E, 0x68, 0x35, 0xFD, + 0x29, 0xEE, 0xF7, 0x9E, 0x0D, 0x90, 0x77, + 0x1F, 0xEA, 0xCE, 0xBE, 0x12, 0xF2, 0x0E, + 0x95, 0xB3, 0x4F, 0x0F, 0x78, 0xB7, 0x37, + 0xA9, 0x61, 0x8B, 0x26, 0xFA, 0x7D, 0xBC, + 0x98, 0x74, 0xF2, 0x72, 0xC4, 0x2B, 0xDB, + 0x56, 0x3E, 0xAF, 0xA1, 0x6B, 0x4F, 0xB6, + 0x8C, 0x3B, 0xB1, 0xE7, 0x8E, 0xAA, 0x81, + 0xA0, 0x02, 0x43, 0xFA, 0xAD, 0xD2, 0xBF, + 0x18, 0xE6, 0x3D, 0x38, 0x9A, 0xE4, 0x43, + 0x77, 0xDA, 0x18, 0xC5, 0x76, 0xB5, 0x0F, + 0x00, 0x96, 0xCF, 0x34, 0x19, 0x54, 0x83, + 0xB0, 0x05, 0x48, 0xC0, 0x98, 0x62, 0x36, + 0xE3, 0xBC, 0x7C, 0xB8, 0xD6, 0x80, 0x1C, + 0x04, 0x94, 0xCC, 0xD1, 0x99, 0xE5, 0xC5, + 0xBD, 0x0D, 0x0E, 0xDC, 0x9E, 0xB8, 0xA0, + 0x00, 0x1E, 0x15, 0x27, 0x67, 0x54, 0xFC, + 0xC6, 0x85, 0x66, 0x05, 0x41, 0x48, 0xE6, + 0xE7, 0x64, 0xBE, 0xE7, 0xC7, 0x64, 0xDA, + 0xAD, 0x3F, 0xC4, 0x52, 0x35, 0xA6, 0xDA, + 0xD4, 0x28, 0xFA, 0x20, 0xC1, 0x70, 0xE3, + 0x45, 0x00, 0x3F, 0x2F, 0x06, 0xEC, 0x81, + 0x05, 0xFE, 0xB2, 0x5B, 0x22, 0x81, 0xB6, + 0x3D, 0x27, 0x33, 0xBE, 0x96, 0x1C, 0x29, + 0x95, 0x1D, 0x11, 0xDD, 0x22, 0x21, 0x65, + 0x7A, 0x9F, 0x53, 0x1D, 0xDA, 0x2A, 0x19, + 0x4D, 0xBB, 0x12, 0x64, 0x48, 0xBD, 0xEE, + 0xB2, 0x58, 0xE0, 0x7E, 0xA6, 0x59, 0xC7, + 0x46, 0x19, 0xA6, 0x38, 0x0E, 0x1D, 0x66, + 0xD6, 0x83, 0x2B, 0xFE, 0x67, 0xF6, 0x38, + 0xCD, 0x8F, 0xAE, 0x1F, 0x27, 0x23, 0x02, + 0x0F, 0x9C, 0x40, 0xA3, 0xFD, 0xA6, 0x7E, + 0xDA, 0x3B, 0xD2, 0x92, 0x38, 0xFB, 0xD4, + 0xD4, 0xB4, 0x88, 0x5C, 0x2A, 0x99, 0x17, + 0x6D, 0xB1, 0xA0, 0x6C, 0x50, 0x07, 0x78, + 0x49, 0x1A, 0x82, 0x88, 0xF1, 0x85, 0x5F, + 0x60, 0xFF, 0xFC, 0xF1, 0xD1, 0x37, 0x3F, + 0xD9, 0x4F, 0xC6, 0x0C, 0x18, 0x11, 0xE1, + 0xAC, 0x3F, 0x1C, 0x6D, 0x00, 0x3B, 0xEC, + 0xDA, 0x3B, 0x1F, 0x27, 0x25, 0xCA, 0x59, + 0x5D, 0xE0, 0xCA, 0x63, 0x32, 0x8F, 0x3B, + 0xE5, 0x7C, 0xC9, 0x77, 0x55, 0x60, 0x11, + 0x95, 0x14, 0x0D, 0xFB, 0x59, 0xD3, 0x9C, + 0xE0, 0x91, 0x30, 0x8B, 0x41, 0x05, 0x74, + 0x6D, 0xAC, 0x23, 0xD3, 0x3E, 0x5F, 0x7C, + 0xE4, 0x84, 0x8D, 0xA3, 0x16, 0xA9, 0xC6, + 0x6B, 0x95, 0x81, 0xBA, 0x35, 0x73, 0xBF, + 0xAF, 0x31, 0x14, 0x96, 0x18, 0x8A, 0xB1, + 0x54, 0x23, 0x28, 0x2E, 0xE4, 0x16, 0xDC, + 0x2A, 0x19, 0xC5, 0x72, 0x4F, 0xA9, 0x1A, + 0xE4, 0xAD, 0xC8, 0x8B, 0xC6, 0x67, 0x96, + 0xEA, 0xE5, 0x67, 0x7A, 0x01, 0xF6, 0x4E, + 0x8C, 0x08, 0x63, 0x13, 0x95, 0x82, 0x2D, + 0x9D, 0xB8, 0xFC, 0xEE, 0x35, 0xC0, 0x6B, + 0x1F, 0xEE, 0xA5, 0x47, 0x4D, 0x6D, 0x8F, + 0x34, 0xB1, 0x53, 0x4A, 0x93, 0x6A, 0x18, + 0xB0, 0xE0, 0xD2, 0x0E, 0xAB, 0x86, 0xBC, + 0x9C, 0x6D, 0x6A, 0x52, 0x07, 0x19, 0x4E, + 0x67, 0xFA, 0x35, 0x55, 0x1B, 0x56, 0x80, + 0x26, 0x7B, 0x00, 0x64, 0x1C, 0x0F, 0x21, + 0x2D, 0x18, 0xEC, 0xA8, 0xD7, 0x32, 0x7E, + 0xD9, 0x1F, 0xE7, 0x64, 0xA8, 0x4E, 0xA1, + 0xB4, 0x3F, 0xF5, 0xB4, 0xF6, 0xE8, 0xE6, + 0x2F, 0x05, 0xC6, 0x61, 0xDE, 0xFB, 0x25, + 0x88, 0x77, 0xC3, 0x5B, 0x18, 0xA1, 0x51, + 0xD5, 0xC4, 0x14, 0xAA, 0xAD, 0x97, 0xBA, + 0x3E, 0x49, 0x93, 0x32, 0xE5, 0x96, 0x07, + 0x8E, 0x60, 0x0D, 0xEB, 0x81, 0x14, 0x9C, + 0x44, 0x1C, 0xE9, 0x57, 0x82, 0xF2, 0x2A, + 0x28, 0x25, 0x63, 0xC5, 0xBA, 0xC1, 0x41, + 0x14, 0x23, 0x60, 0x5D, 0x1A, 0xE1, 0xAF, + 0xAE, 0x2C, 0x8B, 0x06, 0x60, 0x23, 0x7E, + 0xC1, 0x28, 0xAA, 0x0F, 0xE3, 0x46, 0x4E, + 0x43, 0x58, 0x11, 0x5D, 0xB8, 0x4C, 0xC3, + 0xB5, 0x23, 0x07, 0x3A, 0x28, 0xD4, 0x54, + 0x98, 0x84, 0xB8, 0x1F, 0xF7, 0x0E, 0x10, + 0xBF, 0x36, 0x1C, 0x13, 0x72, 0x96, 0x28, + 0xD5, 0x34, 0x8F, 0x07, 0x21, 0x1E, 0x7E, + 0x4C, 0xF4, 0xF1, 0x8B, 0x28, 0x60, 0x90, + 0xBD, 0xB1, 0x24, 0x0B, 0x66, 0xD6, 0xCD, + 0x4A, 0xFC, 0xEA, 0xDC, 0x00, 0xCA, 0x44, + 0x6C, 0xE0, 0x50, 0x50, 0xFF, 0x18, 0x3A, + 0xD2, 0xBB, 0xF1, 0x18, 0xC1, 0xFC, 0x0E, + 0xA5, 0x1F, 0x97, 0xD2, 0x2B, 0x8F, 0x7E, + 0x46, 0x70, 0x5D, 0x45, 0x27, 0xF4, 0x5B, + 0x42, 0xAE, 0xFF, 0x39, 0x58, 0x53, 0x37, + 0x6F, 0x69, 0x7D, 0xD5, 0xFD, 0xF2, 0xC5, + 0x18, 0x7D, 0x7D, 0x5F, 0x0E, 0x2E, 0xB8, + 0xD4, 0x3F, 0x17, 0xBA, 0x0F, 0x7C, 0x60, + 0xFF, 0x43, 0x7F, 0x53, 0x5D, 0xFE, 0xF2, + 0x98, 0x33, 0xBF, 0x86, 0xCB, 0xE8, 0x8E, + 0xA4, 0xFB, 0xD4, 0x22, 0x1E, 0x84, 0x11, + 0x72, 0x83, 0x54, 0xFA, 0x30, 0xA7, 0x00, + 0x8F, 0x15, 0x4A, 0x41, 0xC7, 0xFC, 0x46, + 0x6B, 0x46, 0x45, 0xDB, 0xE2, 0xE3, 0x21, + 0x26, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF }; const gnutls_datum_t gnutls_ffdhe_8192_group_prime = { (void *) ffdhe_params_8192, sizeof(ffdhe_params_8192) }; +const gnutls_datum_t gnutls_ffdhe_8192_group_q = { + (void *) ffdhe_q_8192, sizeof(ffdhe_q_8192) +}; +const gnutls_datum_t gnutls_ffdhe_8192_group_generator = { + (void *) &ffdhe_generator, sizeof(ffdhe_generator) +}; const unsigned int gnutls_ffdhe_8192_key_bits = 512; - -int _gnutls_set_cred_dh_params(gnutls_dh_params_t *cparams, gnutls_sec_param_t sec_param) -{ - gnutls_dh_params_t tmp_params; - const gnutls_datum_t *p, *g; - unsigned key_bits, est_bits; - unsigned bits; - int ret; - - bits = gnutls_sec_param_to_pk_bits(GNUTLS_PK_DH, sec_param); - - if (bits <= 2048) { - p = &gnutls_ffdhe_2048_group_prime; - g = &gnutls_ffdhe_2048_group_generator; - key_bits = gnutls_ffdhe_2048_key_bits; - } else if (bits <= 3072) { - p = &gnutls_ffdhe_3072_group_prime; - g = &gnutls_ffdhe_3072_group_generator; - key_bits = gnutls_ffdhe_3072_key_bits; - } else if (bits <= 4096) { - p = &gnutls_ffdhe_4096_group_prime; - g = &gnutls_ffdhe_4096_group_generator; - key_bits = gnutls_ffdhe_4096_key_bits; - } else { - p = &gnutls_ffdhe_8192_group_prime; - g = &gnutls_ffdhe_8192_group_generator; - key_bits = gnutls_ffdhe_8192_key_bits; - } - - /* if our estimation of subgroup bits is better/larger than - * the one provided by the rfc7919, use that one */ - est_bits = _gnutls_pk_bits_to_subgroup_bits(bits); - if (key_bits < est_bits) - key_bits = est_bits; - - ret = gnutls_dh_params_init(&tmp_params); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = gnutls_dh_params_import_raw2(tmp_params, p, g, key_bits); - if (ret < 0) { - gnutls_dh_params_deinit(tmp_params); - return gnutls_assert_val(ret); - } - - *cparams = tmp_params; - - return 0; -} #endif diff --git a/lib/dh-session.c b/lib/dh-session.c index 4d9f55cd3b..accc71ce6e 100644 --- a/lib/dh-session.c +++ b/lib/dh-session.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -72,7 +72,7 @@ void gnutls_dh_set_prime_bits(gnutls_session_t session, unsigned int bits) _gnutls_audit_log(session, "Note that the security level of the Diffie-Hellman key exchange has been lowered to %u bits and this may allow decryption of the session data\n", bits); - session->internals.priorities.dh_prime_bits = bits; + session->internals.dh_prime_bits = bits; } diff --git a/lib/dh.c b/lib/dh.c index 401525b0e3..ded939d0d4 100644 --- a/lib/dh.c +++ b/lib/dh.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2000-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -32,40 +33,164 @@ #include "x509/x509_int.h" #include #include "debug.h" +#include "state.h" -/*- - * _gnutls_get_dh_params - Returns the DH parameters pointer - * @dh_params: is an DH parameters type, or NULL. - * @func: is a callback function to receive the parameters or NULL. - * @session: a gnutls session. - * - * This function will return the dh parameters pointer. - -*/ -gnutls_dh_params_t -_gnutls_get_dh_params(gnutls_dh_params_t dh_params, - gnutls_params_function * func, - gnutls_session_t session) +static +int set_dh_pk_params(gnutls_session_t session, bigint_t g, bigint_t p, + bigint_t q, unsigned q_bits) +{ + /* just in case we are resuming a session */ + gnutls_pk_params_release(&session->key.proto.tls12.dh.params); + + gnutls_pk_params_init(&session->key.proto.tls12.dh.params); + + session->key.proto.tls12.dh.params.params[DH_G] = _gnutls_mpi_copy(g); + if (session->key.proto.tls12.dh.params.params[DH_G] == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + session->key.proto.tls12.dh.params.params[DH_P] = _gnutls_mpi_copy(p); + if (session->key.proto.tls12.dh.params.params[DH_P] == NULL) { + _gnutls_mpi_release(&session->key.proto.tls12.dh.params.params[DH_G]); + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + + if (q) { + session->key.proto.tls12.dh.params.params[DH_Q] = _gnutls_mpi_copy(q); + if (session->key.proto.tls12.dh.params.params[DH_Q] == NULL) { + _gnutls_mpi_release(&session->key.proto.tls12.dh.params.params[DH_P]); + _gnutls_mpi_release(&session->key.proto.tls12.dh.params.params[DH_G]); + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + } + /* include, possibly empty, q */ + session->key.proto.tls12.dh.params.params_nr = 3; + session->key.proto.tls12.dh.params.algo = GNUTLS_PK_DH; + session->key.proto.tls12.dh.params.qbits = q_bits; + + return 0; +} + +/* Use all available information to decide the DH parameters to use, + * that being the negotiated RFC7919 group, the callback, and the + * provided parameters structure. + */ +int +_gnutls_figure_dh_params(gnutls_session_t session, gnutls_dh_params_t dh_params, + gnutls_params_function * func, gnutls_sec_param_t sec_param) { gnutls_params_st params; + bigint_t p, g, q = NULL; + unsigned free_pg = 0; int ret; + unsigned q_bits = 0, i; + const gnutls_group_entry_st *group; + + group = get_group(session); + + params.deinit = 0; + + /* if we negotiated RFC7919 FFDHE */ + if (group && group->pk == GNUTLS_PK_DH) { + for (i=0;iinternals.priorities->groups.size;i++) { + if (session->internals.priorities->groups.entry[i] == group) { + ret = _gnutls_mpi_init_scan_nz(&p, + session->internals.priorities->groups.entry[i]->prime->data, + session->internals.priorities->groups.entry[i]->prime->size); + if (ret < 0) + return gnutls_assert_val(ret); + + free_pg = 1; + + ret = _gnutls_mpi_init_scan_nz(&g, + session->internals.priorities->groups.entry[i]->generator->data, + session->internals.priorities->groups.entry[i]->generator->size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_mpi_init_scan_nz(&q, + session->internals.priorities->groups.entry[i]->q->data, + session->internals.priorities->groups.entry[i]->q->size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + session->internals.hsk_flags |= HSK_USED_FFDHE; + q_bits = *session->internals.priorities->groups.entry[i]->q_bits; + goto finished; + } + } - /* if cached return the cached */ - if (session->internals.params.dh_params) - return session->internals.params.dh_params; + /* didn't find anything, that shouldn't have occurred + * as we received that extension */ + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + } else if (sec_param) { + unsigned bits = gnutls_sec_param_to_pk_bits(GNUTLS_PK_DH, sec_param)/8; + + for (i=0;iinternals.priorities->groups.size;i++) { + if (!session->internals.priorities->groups.entry[i]->prime) + continue; + + if (bits <= session->internals.priorities->groups.entry[i]->prime->size) { + ret = _gnutls_mpi_init_scan_nz(&p, + session->internals.priorities->groups.entry[i]->prime->data, + session->internals.priorities->groups.entry[i]->prime->size); + if (ret < 0) + return gnutls_assert_val(ret); + + free_pg = 1; + + ret = _gnutls_mpi_init_scan_nz(&g, + session->internals.priorities->groups.entry[i]->generator->data, + session->internals.priorities->groups.entry[i]->generator->size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + q_bits = *session->internals.priorities->groups.entry[i]->q_bits; + goto finished; + } + } + + } if (dh_params) { - session->internals.params.dh_params = dh_params; + p = dh_params->params[0]; + g = dh_params->params[1]; + q_bits = dh_params->q_bits; } else if (func) { ret = func(session, GNUTLS_PARAMS_DH, ¶ms); if (ret == 0 && params.type == GNUTLS_PARAMS_DH) { - session->internals.params.dh_params = - params.params.dh; - session->internals.params.free_dh_params = - params.deinit; - } + p = params.params.dh->params[0]; + g = params.params.dh->params[1]; + q_bits = params.params.dh->q_bits; + } else + return gnutls_assert_val(GNUTLS_E_NO_TEMPORARY_DH_PARAMS); + } else + return gnutls_assert_val(GNUTLS_E_NO_TEMPORARY_DH_PARAMS); + + finished: + _gnutls_dh_save_group(session, g, p); + + ret = set_dh_pk_params(session, g, p, q, q_bits); + if (ret < 0) { + gnutls_assert(); } - return session->internals.params.dh_params; + cleanup: + if (free_pg) { + _gnutls_mpi_release(&p); + _gnutls_mpi_release(&q); + _gnutls_mpi_release(&g); + } + if (params.deinit && params.type == GNUTLS_PARAMS_DH) + gnutls_dh_params_deinit(params.params.dh); + + return ret; + } /* returns the prime and the generator of DH params. @@ -117,25 +242,14 @@ int gnutls_dh_params_import_dsa(gnutls_dh_params_t dh_params, gnutls_x509_privkey_t key) { gnutls_datum_t p, g, q; - bigint_t tmp_q; int ret; ret = gnutls_x509_privkey_export_dsa_raw(key, &p, &q, &g, NULL, NULL); if (ret < 0) return gnutls_assert_val(ret); - ret = _gnutls_mpi_init_scan_nz(&tmp_q, q.data, q.size); - if (ret < 0) { - gnutls_assert(); - ret = GNUTLS_E_MPI_SCAN_FAILED; - goto cleanup; - } - - ret = gnutls_dh_params_import_raw2(dh_params, &p, &g, _gnutls_mpi_get_nbits(tmp_q)); - - _gnutls_mpi_release(&tmp_q); + ret = gnutls_dh_params_import_raw3(dh_params, &p, &q, &g); - cleanup: gnutls_free(p.data); gnutls_free(g.data); gnutls_free(q.data); @@ -188,6 +302,64 @@ gnutls_dh_params_import_raw2(gnutls_dh_params_t dh_params, return 0; } +/** + * gnutls_dh_params_import_raw3: + * @dh_params: The parameters + * @prime: holds the new prime + * @q: holds the subgroup if available, otherwise NULL + * @generator: holds the new generator + * + * This function will replace the pair of prime and generator for use + * in the Diffie-Hellman key exchange. The new parameters should be + * stored in the appropriate gnutls_datum. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, + * otherwise a negative error code is returned. + **/ +int +gnutls_dh_params_import_raw3(gnutls_dh_params_t dh_params, + const gnutls_datum_t * prime, + const gnutls_datum_t * q, + const gnutls_datum_t * generator) +{ + bigint_t tmp_p, tmp_g, tmp_q = NULL; + + if (_gnutls_mpi_init_scan_nz(&tmp_p, prime->data, prime->size)) { + gnutls_assert(); + return GNUTLS_E_MPI_SCAN_FAILED; + } + + if (_gnutls_mpi_init_scan_nz(&tmp_g, generator->data, + generator->size)) { + _gnutls_mpi_release(&tmp_p); + gnutls_assert(); + return GNUTLS_E_MPI_SCAN_FAILED; + } + + if (q) { + if (_gnutls_mpi_init_scan_nz(&tmp_q, q->data, q->size)) { + _gnutls_mpi_release(&tmp_p); + _gnutls_mpi_release(&tmp_g); + gnutls_assert(); + return GNUTLS_E_MPI_SCAN_FAILED; + } + } else if (_gnutls_fips_mode_enabled()) { + /* Mandatory in FIPS mode */ + gnutls_assert(); + return GNUTLS_E_DH_PRIME_UNACCEPTABLE; + } + + /* store the generated values + */ + dh_params->params[0] = tmp_p; + dh_params->params[1] = tmp_g; + dh_params->params[2] = tmp_q; + if (tmp_q) + dh_params->q_bits = _gnutls_mpi_get_nbits(tmp_q); + + return 0; +} + /** * gnutls_dh_params_init: * @dh_params: The parameters @@ -223,6 +395,7 @@ void gnutls_dh_params_deinit(gnutls_dh_params_t dh_params) _gnutls_mpi_release(&dh_params->params[0]); _gnutls_mpi_release(&dh_params->params[1]); + _gnutls_mpi_release(&dh_params->params[2]); gnutls_free(dh_params); @@ -246,6 +419,8 @@ int gnutls_dh_params_cpy(gnutls_dh_params_t dst, gnutls_dh_params_t src) dst->params[0] = _gnutls_mpi_copy(src->params[0]); dst->params[1] = _gnutls_mpi_copy(src->params[1]); + if (src->params[2]) + dst->params[2] = _gnutls_mpi_copy(src->params[2]); dst->q_bits = src->q_bits; if (dst->params[0] == NULL || dst->params[1] == NULL) @@ -287,9 +462,9 @@ gnutls_dh_params_generate2(gnutls_dh_params_t dparams, unsigned int bits) { int ret; gnutls_pk_params_st params; - + gnutls_pk_params_init(¶ms); - + ret = _gnutls_pk_generate_params(GNUTLS_PK_DH, bits, ¶ms); if (ret < 0) return gnutls_assert_val(ret); @@ -299,7 +474,7 @@ gnutls_dh_params_generate2(gnutls_dh_params_t dparams, unsigned int bits) dparams->q_bits = _gnutls_mpi_get_nbits(params.params[DSA_Q]); _gnutls_mpi_release(¶ms.params[DSA_Q]); - + return 0; } @@ -335,9 +510,7 @@ gnutls_dh_params_import_pkcs3(gnutls_dh_params_t params, pkcs3_params->size, &_params); - if (result <= 0) { - if (result == 0) - result = GNUTLS_E_INTERNAL_ERROR; + if (result < 0) { gnutls_assert(); return result; } @@ -359,6 +532,8 @@ gnutls_dh_params_import_pkcs3(gnutls_dh_params_t params, return _gnutls_asn2err(result); } + /* PKCS#3 doesn't specify whether DHParameter is encoded as + * BER or DER, thus we don't restrict libtasn1 to DER subset */ result = asn1_der_decoding(&c2, _params.data, _params.size, NULL); if (need_free != 0) { @@ -394,7 +569,7 @@ gnutls_dh_params_import_pkcs3(gnutls_dh_params_t params, if (_gnutls_mpi_cmp_ui(params->params[0], 0) == 0) { asn1_delete_structure(&c2); - return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); } /* read the generator @@ -410,7 +585,7 @@ gnutls_dh_params_import_pkcs3(gnutls_dh_params_t params, if (_gnutls_mpi_cmp_ui(params->params[1], 0) == 0) { asn1_delete_structure(&c2); _gnutls_mpi_release(¶ms->params[0]); - return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); } asn1_delete_structure(&c2); diff --git a/lib/dh.h b/lib/dh.h index 5b15a93ef2..9f3dc2a709 100644 --- a/lib/dh.h +++ b/lib/dh.h @@ -16,20 +16,19 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_DH_H -#define GNUTLS_DH_H +#ifndef GNUTLS_LIB_DH_H +#define GNUTLS_LIB_DH_H const bigint_t *_gnutls_dh_params_to_mpi(gnutls_dh_params_t); -gnutls_dh_params_t -_gnutls_get_dh_params(gnutls_dh_params_t dh_params, - gnutls_params_function * func, - gnutls_session_t session); +int +_gnutls_figure_dh_params(gnutls_session_t session, gnutls_dh_params_t dh_params, + gnutls_params_function * func, gnutls_sec_param_t sec_param); int _gnutls_set_cred_dh_params(gnutls_dh_params_t *cparams, gnutls_sec_param_t sec_param); -#endif +#endif /* GNUTLS_LIB_DH_H */ diff --git a/lib/dtls-sw.c b/lib/dtls-sw.c index 00f01e5a5e..2511fb34a2 100644 --- a/lib/dtls-sw.c +++ b/lib/dtls-sw.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -40,20 +40,6 @@ #define DTLS_EMPTY_BITMAP (0xFFFFFFFFFFFFFFFFULL) -/* We expect the compiler to be able to spot that this is a byteswapping - * load, and emit instructions like 'movbe' on x86_64 where appropriate. -*/ -#define LOAD_UINT64(out, ubytes) \ - out = (((uint64_t)ubytes[0] << 56) | \ - ((uint64_t)ubytes[1] << 48) | \ - ((uint64_t)ubytes[2] << 40) | \ - ((uint64_t)ubytes[3] << 32) | \ - ((uint64_t)ubytes[4] << 24) | \ - ((uint64_t)ubytes[5] << 16) | \ - ((uint64_t)ubytes[6] << 8) | \ - ((uint64_t)ubytes[7] << 0) ) - - void _dtls_reset_window(struct record_parameters_st *rp) { rp->dtls_sw_have_recv = 0; @@ -63,12 +49,8 @@ void _dtls_reset_window(struct record_parameters_st *rp) * packet is detected it returns a negative value (but no sensible error code). * Otherwise zero. */ -int _dtls_record_check(struct record_parameters_st *rp, gnutls_uint64 * _seq) +int _dtls_record_check(struct record_parameters_st *rp, uint64_t seq_num) { - uint64_t seq_num = 0; - - LOAD_UINT64(seq_num, _seq->i); - if ((seq_num >> DTLS_EPOCH_SHIFT) != rp->epoch) { return gnutls_assert_val(-1); } diff --git a/lib/dtls.c b/lib/dtls.c index ba953ae374..f0ded635c0 100644 --- a/lib/dtls.c +++ b/lib/dtls.c @@ -18,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -65,8 +65,8 @@ transmit_message(gnutls_session_t session, unsigned int mtu = gnutls_dtls_get_data_mtu(session); - if (session->security_parameters.max_record_recv_size < mtu) - mtu = session->security_parameters.max_record_recv_size; + if (session->security_parameters.max_record_send_size < mtu) + mtu = session->security_parameters.max_record_send_size; mtu -= DTLS_HANDSHAKE_HEADER_SIZE; @@ -234,7 +234,7 @@ int _dtls_transmit(gnutls_session_t session) unsigned int diff; struct timespec now; - gettime(&now); + gnutls_gettime(&now); /* If we have already sent a flight and we are operating in a * non blocking way, check if it is time to retransmit or just @@ -321,7 +321,7 @@ int _dtls_transmit(gnutls_session_t session) last_type = cur->htype; } - gettime(&session->internals.dtls.last_retransmit); + gnutls_gettime(&session->internals.dtls.last_retransmit); if (session->internals.dtls.flight_init == 0) { session->internals.dtls.flight_init = 1; @@ -391,7 +391,7 @@ int _dtls_transmit(gnutls_session_t session) } keep_up: - gettime(&now); + gnutls_gettime(&now); } while (ret == GNUTLS_E_TIMEDOUT); if (ret < 0) { @@ -493,23 +493,32 @@ void gnutls_dtls_set_mtu(gnutls_session_t session, unsigned int mtu) session->internals.dtls.mtu = MIN(mtu, DEFAULT_MAX_RECORD_SIZE); } -static int record_overhead(const cipher_entry_st * cipher, - const mac_entry_st * mac, - gnutls_compression_method_t comp, - unsigned etm, - unsigned est_data) +/* when max is non-zero this function will return the maximum + * overhead that this ciphersuite may introduce, e.g., the maximum + * amount of padding required */ +unsigned _gnutls_record_overhead(const version_entry_st *ver, + const cipher_entry_st *cipher, + const mac_entry_st *mac, + unsigned max) { int total = 0; - int ret, blocksize; + int ret; int hash_len = 0; if (unlikely(cipher == NULL)) return 0; + /* 1 octet content type in the unencrypted content */ + if (ver->tls13_sem) + total++; + if (mac->id == GNUTLS_MAC_AEAD) { - total += cipher->explicit_iv; + if (!ver->tls13_sem) + total += _gnutls_cipher_get_explicit_iv_size(cipher); + total += _gnutls_cipher_get_tag_size(cipher); } else { + /* STREAM + BLOCK have a MAC appended */ ret = _gnutls_mac_get_algo_len(mac); if (unlikely(ret < 0)) return 0; @@ -518,32 +527,16 @@ static int record_overhead(const cipher_entry_st * cipher, total += hash_len; } - if (comp != GNUTLS_COMP_NULL) - total += EXTRA_COMP_SIZE; - - /* This must be last */ + /* Block ciphers have padding + IV */ if (_gnutls_cipher_type(cipher) == CIPHER_BLOCK) { - int rem, exp_iv; + int exp_iv; exp_iv = _gnutls_cipher_get_explicit_iv_size(cipher); - total += exp_iv; - - blocksize = _gnutls_cipher_get_block_size(cipher); - if (est_data == 0) { - /* maximum padding */ - total += blocksize; - } else { - if (etm) - est_data -= hash_len; - est_data -= exp_iv; - rem = (est_data)%blocksize; - /* we need at least one byte for pad */ - if (rem == 0) - total += 1; - else - total += rem+1; - } + if (max) + total += 2*exp_iv; /* block == iv size */ + else + total += exp_iv + 1; } return total; @@ -554,7 +547,7 @@ static int record_overhead(const cipher_entry_st * cipher, * @version: is a #gnutls_protocol_t value * @cipher: is a #gnutls_cipher_algorithm_t value * @mac: is a #gnutls_mac_algorithm_t value - * @comp: is a #gnutls_compression_method_t value + * @comp: is a #gnutls_compression_method_t value (ignored) * @flags: must be zero * * This function will return the set size in bytes of the overhead @@ -595,7 +588,7 @@ size_t gnutls_est_record_overhead_size(gnutls_protocol_t version, else total = DTLS_RECORD_HEADER_SIZE; - total += record_overhead(c, m, comp, 0, 0); + total += _gnutls_record_overhead(v, c, m, 1); return total; } @@ -609,20 +602,18 @@ size_t gnutls_est_record_overhead_size(gnutls_protocol_t version, * * It may return a negative error code on error. */ -static int record_overhead_rt(gnutls_session_t session, unsigned est_data) +static int record_overhead_rt(gnutls_session_t session) { record_parameters_st *params; int ret; if (session->internals.initial_negotiation_completed == 0) return GNUTLS_E_INVALID_REQUEST; - ret = _gnutls_epoch_get(session, EPOCH_WRITE_CURRENT, ¶ms); if (ret < 0) return gnutls_assert_val(ret); - return record_overhead(params->cipher, params->mac, - params->compression_algorithm, params->etm, est_data); + return _gnutls_record_overhead(get_version(session), params->cipher, params->mac, 1); } /** @@ -639,6 +630,7 @@ static int record_overhead_rt(gnutls_session_t session, unsigned est_data) size_t gnutls_record_overhead_size(gnutls_session_t session) { const version_entry_st *v = get_version(session); + int ret; size_t total; if (v->transport == GNUTLS_STREAM) @@ -646,7 +638,9 @@ size_t gnutls_record_overhead_size(gnutls_session_t session) else total = DTLS_RECORD_HEADER_SIZE; - total += record_overhead_rt(session, 0); + ret = record_overhead_rt(session); + if (ret >= 0) + total += ret; return total; } @@ -668,22 +662,54 @@ size_t gnutls_record_overhead_size(gnutls_session_t session) unsigned int gnutls_dtls_get_data_mtu(gnutls_session_t session) { int mtu = session->internals.dtls.mtu; - int overhead; + record_parameters_st *params; + int ret, k, hash_size, block; - overhead = RECORD_HEADER_SIZE(session); - if (mtu < overhead) - return 0; + mtu -= RECORD_HEADER_SIZE(session); - mtu -= overhead; + if (session->internals.initial_negotiation_completed == 0) + return mtu; - overhead = record_overhead_rt(session, mtu); - if (overhead < 0) + ret = _gnutls_epoch_get(session, EPOCH_WRITE_CURRENT, ¶ms); + if (ret < 0) return mtu; - if (mtu < overhead) - return 0; + if (params->cipher->type == CIPHER_AEAD || params->cipher->type == CIPHER_STREAM) + return mtu-_gnutls_record_overhead(get_version(session), params->cipher, params->mac, 0); - return mtu - overhead; + /* CIPHER_BLOCK: in CBC ciphers guess the data MTU as it depends on residues + */ + hash_size = _gnutls_mac_get_algo_len(params->mac); + block = _gnutls_cipher_get_explicit_iv_size(params->cipher); + assert(_gnutls_cipher_get_block_size(params->cipher) == block); + + if (params->etm) { + /* the maximum data mtu satisfies: + * data mtu (mod block) = block-1 + * or data mtu = (k+1)*(block) - 1 + * + * and data mtu + block + hash size + 1 = link_mtu + * (k+2) * (block) + hash size = link_mtu + * + * We try to find k, and thus data mtu + */ + k = ((mtu-hash_size)/block) - 2; + + return (k+1)*block - 1; + } else { + /* the maximum data mtu satisfies: + * data mtu + hash size (mod block) = block-1 + * or data mtu = (k+1)*(block) - hash size - 1 + * + * and data mtu + block + hash size + 1 = link_mtu + * (k+2) * (block) = link_mtu + * + * We try to find k, and thus data mtu + */ + k = ((mtu)/block) - 2; + + return (k+1)*block - hash_size - 1; + } } /** @@ -710,7 +736,7 @@ int gnutls_dtls_set_data_mtu(gnutls_session_t session, unsigned int mtu) { int overhead; - overhead = record_overhead_rt(session, mtu); + overhead = record_overhead_rt(session); /* You can't call this until the session is actually running */ if (overhead < 0) @@ -763,7 +789,7 @@ unsigned int gnutls_dtls_get_timeout(gnutls_session_t session) struct timespec now; unsigned int diff; - gettime(&now); + gnutls_gettime(&now); diff = timespec_sub_ms(&now, @@ -1014,7 +1040,7 @@ void gnutls_dtls_prestate_set(gnutls_session_t session, if (ret < 0) return; - params->write.sequence_number.i[7] = prestate->record_seq; + params->write.sequence_number = prestate->record_seq; session->internals.dtls.hsk_read_seq = prestate->hsk_read_seq; session->internals.dtls.hsk_write_seq = diff --git a/lib/dtls.h b/lib/dtls.h index 8c88874ece..88fba4f3d1 100644 --- a/lib/dtls.h +++ b/lib/dtls.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef DTLS_H -#define DTLS_H +#ifndef GNUTLS_LIB_DTLS_H +#define GNUTLS_LIB_DTLS_H #include #include "gnutls_int.h" @@ -30,7 +30,7 @@ #include int _dtls_transmit(gnutls_session_t session); -int _dtls_record_check(struct record_parameters_st *rp, gnutls_uint64 * _seq); +int _dtls_record_check(struct record_parameters_st *rp, uint64_t seq_num); void _dtls_reset_hsk_state(gnutls_session_t session); void _dtls_reset_window(struct record_parameters_st *rp); @@ -40,7 +40,7 @@ void _dtls_reset_window(struct record_parameters_st *rp); #define RETURN_DTLS_EAGAIN_OR_TIMEOUT(session, r) { \ struct timespec _now; \ unsigned int _diff; \ - gettime(&_now); \ + gnutls_gettime(&_now); \ \ _diff = timespec_sub_ms(&_now, &session->internals.handshake_start_time); \ if (_diff > session->internals.handshake_timeout_ms) \ @@ -111,6 +111,11 @@ inline static void _dtls_async_timer_check(gnutls_session_t session) } } +unsigned _gnutls_record_overhead(const version_entry_st *ver, + const cipher_entry_st *cipher, + const mac_entry_st *mac, + unsigned max); + /* Returns non-zero if the async timer is active */ inline static int _dtls_async_timer_active(gnutls_session_t session) { @@ -130,4 +135,4 @@ inline static int _dtls_retransmit(gnutls_session_t session) return _dtls_transmit(session); } -#endif +#endif /* GNUTLS_LIB_DTLS_H */ diff --git a/lib/ecc.c b/lib/ecc.c index e3dc6d139e..b4d7a23980 100644 --- a/lib/ecc.c +++ b/lib/ecc.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -30,7 +30,7 @@ #include "errors.h" int -_gnutls_ecc_ansi_x963_export(gnutls_ecc_curve_t curve, bigint_t x, +_gnutls_ecc_ansi_x962_export(gnutls_ecc_curve_t curve, bigint_t x, bigint_t y, gnutls_datum_t * out) { int numlen = gnutls_ecc_curve_get_size(curve); @@ -93,7 +93,7 @@ _gnutls_ecc_ansi_x963_export(gnutls_ecc_curve_t curve, bigint_t x, int -_gnutls_ecc_ansi_x963_import(const uint8_t * in, +_gnutls_ecc_ansi_x962_import(const uint8_t * in, unsigned long inlen, bigint_t * x, bigint_t * y) { diff --git a/lib/ecc.h b/lib/ecc.h index 623a1a55bb..6e724b893a 100644 --- a/lib/ecc.h +++ b/lib/ecc.h @@ -16,16 +16,16 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_ECC_H -#define GNUTLS_ECC_H +#ifndef GNUTLS_LIB_ECC_H +#define GNUTLS_LIB_ECC_H -int _gnutls_ecc_ansi_x963_import(const uint8_t * in, unsigned long inlen, +int _gnutls_ecc_ansi_x962_import(const uint8_t * in, unsigned long inlen, bigint_t * x, bigint_t * y); -int _gnutls_ecc_ansi_x963_export(gnutls_ecc_curve_t curve, bigint_t x, +int _gnutls_ecc_ansi_x962_export(gnutls_ecc_curve_t curve, bigint_t x, bigint_t y, gnutls_datum_t * out); -#endif +#endif /* GNUTLS_LIB_ECC_H */ diff --git a/lib/errors.c b/lib/errors.c index b77ba48b1d..842afe0e24 100644 --- a/lib/errors.c +++ b/lib/errors.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -26,7 +26,6 @@ #ifdef STDC_HEADERS #include #endif -#include "vasprintf.h" #include "str.h" #define ERROR_ENTRY(desc, name) \ @@ -81,6 +80,8 @@ static const gnutls_error_entry error_entries[] = { GNUTLS_E_INAPPROPRIATE_FALLBACK), ERROR_ENTRY(N_("An illegal TLS extension was received."), GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION), + ERROR_ENTRY(N_("An required TLS extension was received."), + GNUTLS_E_MISSING_EXTENSION), ERROR_ENTRY(N_("A TLS fatal alert has been received."), GNUTLS_E_FATAL_ALERT_RECEIVED), ERROR_ENTRY(N_("An unexpected TLS packet was received."), @@ -92,6 +93,8 @@ static const gnutls_error_entry error_entries[] = { GNUTLS_E_ERROR_IN_FINISHED_PACKET), ERROR_ENTRY(N_("No certificate was found."), GNUTLS_E_NO_CERTIFICATE_FOUND), + ERROR_ENTRY(N_("Certificate is required."), + GNUTLS_E_CERTIFICATE_REQUIRED), ERROR_ENTRY(N_ ("The given DSA key is incompatible with the selected TLS protocol."), GNUTLS_E_INCOMPAT_DSA_KEY_WITH_TLS_PROTOCOL), @@ -134,7 +137,7 @@ static const gnutls_error_entry error_entries[] = { GNUTLS_E_UNIMPLEMENTED_FEATURE), ERROR_ENTRY(N_("Insufficient credentials for that request."), GNUTLS_E_INSUFFICIENT_CREDENTIALS), - ERROR_ENTRY(N_("Error in password file."), GNUTLS_E_SRP_PWD_ERROR), + ERROR_ENTRY(N_("Error in password/key file."), GNUTLS_E_SRP_PWD_ERROR), ERROR_ENTRY(N_("Wrong padding in PKCS1 packet."), GNUTLS_E_PKCS1_WRONG_PAD), ERROR_ENTRY(N_("The session or certificate has expired."), @@ -148,7 +151,7 @@ static const gnutls_error_entry error_entries[] = { GNUTLS_E_BASE64_UNEXPECTED_HEADER_ERROR), ERROR_ENTRY(N_("Base64 encoding error."), GNUTLS_E_BASE64_ENCODING_ERROR), - ERROR_ENTRY(N_("Parsing error in password file."), + ERROR_ENTRY(N_("Parsing error in password/key file."), GNUTLS_E_SRP_PWD_PARSING_ERROR), ERROR_ENTRY(N_("The requested data were not available."), GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE), @@ -165,6 +168,8 @@ static const gnutls_error_entry error_entries[] = { GNUTLS_E_CERTIFICATE_TIME_ERROR), ERROR_ENTRY(N_("Error in the certificate verification."), GNUTLS_E_CERTIFICATE_VERIFICATION_ERROR), + ERROR_ENTRY(N_("Error in the CRL verification."), + GNUTLS_E_CRL_VERIFICATION_ERROR), ERROR_ENTRY(N_("Error in the private key verification; seed doesn't match."), GNUTLS_E_PRIVKEY_VERIFICATION_ERROR), ERROR_ENTRY(N_("Could not authenticate peer."), @@ -181,6 +186,8 @@ static const gnutls_error_entry error_entries[] = { GNUTLS_E_X509_UNSUPPORTED_CRITICAL_EXTENSION), ERROR_ENTRY(N_("Unsupported extension in X.509 certificate."), GNUTLS_E_X509_UNSUPPORTED_EXTENSION), + ERROR_ENTRY(N_("Duplicate extension in X.509 certificate."), + GNUTLS_E_X509_DUPLICATE_EXTENSION), ERROR_ENTRY(N_ ("Key usage violation in certificate has been detected."), GNUTLS_E_KEY_USAGE_VIOLATION), @@ -189,6 +196,7 @@ static const gnutls_error_entry error_entries[] = { ("TLS Application data were received, while expecting handshake data."), GNUTLS_E_GOT_APPLICATION_DATA), ERROR_ENTRY(N_("Error in Database backend."), GNUTLS_E_DB_ERROR), + ERROR_ENTRY(N_("The Database entry already exists."), GNUTLS_E_DB_ENTRY_EXISTS), ERROR_ENTRY(N_("The certificate type is not supported."), GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE), ERROR_ENTRY(N_ @@ -202,6 +210,8 @@ static const gnutls_error_entry error_entries[] = { ERROR_ENTRY(N_("An illegal parameter was found."), GNUTLS_E_ILLEGAL_PARAMETER), ERROR_ENTRY(N_("Error while reading file."), GNUTLS_E_FILE_ERROR), + ERROR_ENTRY(N_("A disallowed SNI server name has been received."), + GNUTLS_E_RECEIVED_DISALLOWED_NAME), ERROR_ENTRY(N_("ASN1 parser: Element was not found."), GNUTLS_E_ASN1_ELEMENT_NOT_FOUND), @@ -231,6 +241,8 @@ static const gnutls_error_entry error_entries[] = { GNUTLS_E_TOO_MANY_EMPTY_PACKETS), ERROR_ENTRY(N_("Too many handshake packets have been received."), GNUTLS_E_TOO_MANY_HANDSHAKE_PACKETS), + ERROR_ENTRY(N_("More than a single object matches the criteria."), + GNUTLS_E_TOO_MANY_MATCHES), ERROR_ENTRY(N_("The crypto library version is too old."), GNUTLS_E_INCOMPATIBLE_GCRYPT_LIBRARY), @@ -260,7 +272,7 @@ static const gnutls_error_entry error_entries[] = { ERROR_ENTRY(N_("The SRP username supplied is illegal."), GNUTLS_E_ILLEGAL_SRP_USERNAME), - ERROR_ENTRY(N_("The SRP username supplied is unknown."), + ERROR_ENTRY(N_("The username supplied is unknown."), GNUTLS_E_UNKNOWN_SRP_USERNAME), ERROR_ENTRY(N_("The OpenPGP fingerprint is not supported."), @@ -375,6 +387,8 @@ static const gnutls_error_entry error_entries[] = { GNUTLS_E_CERTIFICATE_LIST_UNSORTED), ERROR_ENTRY(N_("The OCSP response is invalid"), GNUTLS_E_OCSP_RESPONSE_ERROR), + ERROR_ENTRY(N_("The OCSP response provided doesn't match the available certificates"), + GNUTLS_E_OCSP_MISMATCH_WITH_CERTS), ERROR_ENTRY(N_("There is no certificate status (OCSP)."), GNUTLS_E_NO_CERTIFICATE_STATUS), ERROR_ENTRY(N_("Error in the system's randomness device."), @@ -406,12 +420,24 @@ static const gnutls_error_entry error_entries[] = { GNUTLS_E_IDNA_ERROR), ERROR_ENTRY(N_("Cannot perform this action while handshake is in progress."), GNUTLS_E_UNAVAILABLE_DURING_HANDSHAKE), - ERROR_ENTRY(N_("The obtained public key is invalid."), + ERROR_ENTRY(N_("The public key is invalid."), GNUTLS_E_PK_INVALID_PUBKEY), + ERROR_ENTRY(N_("There are no validation parameters present."), + GNUTLS_E_PK_NO_VALIDATION_PARAMS), + ERROR_ENTRY(N_("The public key parameters are invalid."), + GNUTLS_E_PK_INVALID_PUBKEY_PARAMS), ERROR_ENTRY(N_("The private key is invalid."), GNUTLS_E_PK_INVALID_PRIVKEY), ERROR_ENTRY(N_("The DER time encoding is invalid."), GNUTLS_E_ASN1_TIME_ERROR), + ERROR_ENTRY(N_("The signature is incompatible with the public key."), + GNUTLS_E_INCOMPATIBLE_SIG_WITH_KEY), + ERROR_ENTRY(N_("One of the involved algorithms has insufficient security level."), + GNUTLS_E_INSUFFICIENT_SECURITY), + ERROR_ENTRY(N_("No common key share with peer."), + GNUTLS_E_NO_COMMON_KEY_SHARE), + ERROR_ENTRY(N_("The early data were rejected."), + GNUTLS_E_EARLY_DATA_REJECTED), {NULL, NULL, 0} }; @@ -430,8 +456,9 @@ static const gnutls_error_entry non_fatal_error_entries[] = { ERROR_ENTRY(N_("Function was interrupted."), GNUTLS_E_INTERRUPTED), ERROR_ENTRY(N_("Rehandshake was requested by the peer."), GNUTLS_E_REHANDSHAKE), - ERROR_ENTRY(N_("One of the involved algorithms has insufficient security level."), - GNUTLS_E_INSUFFICIENT_SECURITY), + ERROR_ENTRY(N_("Re-authentication was requested by the peer."), + GNUTLS_E_REAUTH_REQUEST), + /* Only non fatal (for handshake) errors here */ {NULL, NULL, 0} }; @@ -441,14 +468,14 @@ static const gnutls_error_entry non_fatal_error_entries[] = { * * If a GnuTLS function returns a negative error code you may feed that * value to this function to see if the error condition is fatal to - * a TLS session (i.e., must be terminated). + * a TLS session (i.e., must be terminated). * * Note that you may also want to check the error code manually, since some * non-fatal errors to the protocol (such as a warning alert or * a rehandshake request) may be fatal for your program. * * This function is only useful if you are dealing with errors from - * functions that relate to a TLS session (e.g., record layer or handshake + * functions that relate to a TLS session (e.g., record layer or handshake * layer handling functions). * * Returns: Non-zero value on fatal errors or zero on non-fatal. diff --git a/lib/errors.h b/lib/errors.h index 6ffc4172eb..976a788e7c 100644 --- a/lib/errors.h +++ b/lib/errors.h @@ -16,21 +16,18 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_ERRORS_H -#define GNUTLS_ERRORS_H +#ifndef GNUTLS_LIB_ERRORS_H +#define GNUTLS_LIB_ERRORS_H #include "gnutls_int.h" #include #include #include -#define GNUTLS_E_INT_RET_0 -1251 -#define GNUTLS_E_INT_CHECK_AGAIN -1252 - #ifdef __FILE__ #ifdef __LINE__ #define gnutls_assert() _gnutls_assert_log( "ASSERT: %s[%s]:%d\n", __FILE__,__func__,__LINE__); @@ -71,6 +68,18 @@ void _gnutls_mpi_log(const char *prefix, bigint_t a); } \ } while(0) +#define _gnutls_dn_log(str, dn) \ + do { \ + if (unlikely(_gnutls_log_level >= 3)) { \ + gnutls_datum_t _cl_out; int _cl_ret; \ + _cl_ret = gnutls_x509_rdn_get2((dn), &_cl_out, 0); \ + if (_cl_ret >= 0) { \ + _gnutls_log( 3, "%s: %s\n", str, _cl_out.data); \ + gnutls_free(_cl_out.data); \ + } \ + } \ + } while(0) + #define _gnutls_reason_log(str, status) \ do { \ if (unlikely(_gnutls_log_level >= 3)) { \ @@ -99,6 +108,7 @@ void _gnutls_mpi_log(const char *prefix, bigint_t a); #define _gnutls_write_log(...) LEVEL(11, __VA_ARGS__) #define _gnutls_io_log(...) LEVEL(12, __VA_ARGS__) #define _gnutls_buffers_log(...) LEVEL(13, __VA_ARGS__) +#define _gnutls_no_log(...) LEVEL(INT_MAX, __VA_ARGS__) #else #define _gnutls_debug_log _gnutls_null_log #define _gnutls_assert_log _gnutls_null_log @@ -110,6 +120,7 @@ void _gnutls_mpi_log(const char *prefix, bigint_t a); #define _gnutls_dtls_log _gnutls_null_log #define _gnutls_read_log _gnutls_null_log #define _gnutls_write_log _gnutls_null_log +#define _gnutls_no_log _gnutle_null_log void _gnutls_null_log(void *, ...); @@ -132,4 +143,4 @@ int gnutls_assert_val_int(int val, const char *file, const char *func, int line) #define gnutls_assert_val(x) gnutls_assert_val_int(x, __FILE__, __func__, __LINE__) #define gnutls_assert_val_fatal(x) (((x)!=GNUTLS_E_AGAIN && (x)!=GNUTLS_E_INTERRUPTED)?gnutls_assert_val_int(x, __FILE__, __func__, __LINE__):(x)) -#endif /* GNUTLS_ERRORS_H */ +#endif /* GNUTLS_LIB_ERRORS_H */ diff --git a/lib/ext/Makefile.am b/lib/ext/Makefile.am index fa3b90dbee..4e010ee9a0 100644 --- a/lib/ext/Makefile.am +++ b/lib/ext/Makefile.am @@ -16,7 +16,7 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see include $(top_srcdir)/lib/common.mk @@ -26,8 +26,7 @@ AM_CPPFLAGS = \ -I$(srcdir)/../includes \ -I$(builddir)/../includes \ -I$(builddir)/../../gl \ - -I$(srcdir)/.. \ - -I$(srcdir)/../opencdk + -I$(srcdir)/.. if ENABLE_MINITASN1 AM_CPPFLAGS += -I$(srcdir)/../minitasn1 @@ -35,13 +34,24 @@ endif noinst_LTLIBRARIES = libgnutls_ext.la -libgnutls_ext_la_SOURCES = max_record.c cert_type.c \ +libgnutls_ext_la_SOURCES = max_record.c \ server_name.c signature.c safe_renegotiation.c \ - max_record.h cert_type.h server_name.h srp.h \ + max_record.h server_name.h srp.h \ session_ticket.h signature.h safe_renegotiation.h \ - session_ticket.c srp.c ecc.c ecc.h heartbeat.c heartbeat.h \ + session_ticket.c srp.c heartbeat.c heartbeat.h \ status_request.h status_request.c dumbfw.c dumbfw.h \ - ext_master_secret.c ext_master_secret.h etm.h etm.c + ext_master_secret.c ext_master_secret.h etm.h etm.c \ + supported_versions.c supported_versions.h \ + post_handshake.c post_handshake.h key_share.c key_share.h \ + cookie.c cookie.h \ + psk_ke_modes.c psk_ke_modes.h pre_shared_key.c pre_shared_key.h \ + supported_groups.c supported_groups.h \ + ec_point_formats.c ec_point_formats.h \ + early_data.c early_data.h \ + record_size_limit.c record_size_limit.h \ + client_cert_type.c client_cert_type.h \ + server_cert_type.c server_cert_type.h \ + cert_types.h if ENABLE_ALPN libgnutls_ext_la_SOURCES += alpn.c alpn.h diff --git a/lib/ext/alpn.c b/lib/ext/alpn.c index 88752702a6..7cc7997560 100644 --- a/lib/ext/alpn.c +++ b/lib/ext/alpn.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2013 Nikos Mavrogiannopoulos + * Copyright (C) 2017 Red Hat, Inc. * * This file is part of GnuTLS. * @@ -14,7 +15,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -30,46 +31,50 @@ static int _gnutls_alpn_recv_params(gnutls_session_t session, static int _gnutls_alpn_send_params(gnutls_session_t session, gnutls_buffer_st * extdata); -static void _gnutls_alpn_deinit_data(extension_priv_data_t priv); +static void _gnutls_alpn_deinit_data(gnutls_ext_priv_data_t priv); -const extension_entry_st ext_mod_alpn = { +const hello_ext_entry_st ext_mod_alpn = { .name = "ALPN", - .type = GNUTLS_EXTENSION_ALPN, + .tls_id = 16, + .gid = GNUTLS_EXTENSION_ALPN, /* this extension must be parsed even on resumption */ - .parse_type = GNUTLS_EXT_MANDATORY, - + .client_parse_point = GNUTLS_EXT_MANDATORY, + .server_parse_point = GNUTLS_EXT_MANDATORY, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | + GNUTLS_EXT_FLAG_CLIENT_HELLO | GNUTLS_EXT_FLAG_EE | + GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, .recv_func = _gnutls_alpn_recv_params, .send_func = _gnutls_alpn_send_params, .deinit_func = _gnutls_alpn_deinit_data, + .cannot_be_overriden = 1 }; static int _gnutls_alpn_recv_params(gnutls_session_t session, - const uint8_t * data, size_t _data_size) + const uint8_t * data, size_t data_size) { unsigned int i; int ret; const uint8_t *p = data; unsigned len1, len; - ssize_t data_size = _data_size; alpn_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; int selected_protocol_index; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_ALPN, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_ALPN, &epriv); if (ret < 0) return 0; priv = epriv; - DECR_LENGTH_RET(data_size, 2, 0); + DECR_LENGTH_RET(data_size, 2, GNUTLS_E_UNEXPECTED_PACKET_LENGTH); len = _gnutls_read_uint16(p); p += 2; - if (len > (size_t)data_size) + if (len == 0 || len > (size_t)data_size) return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); @@ -77,10 +82,13 @@ _gnutls_alpn_recv_params(gnutls_session_t session, selected_protocol_index = MAX_ALPN_PROTOCOLS+1; while (data_size > 0) { - DECR_LENGTH_RET(data_size, 1, 0); + DECR_LENGTH_RET(data_size, 1, GNUTLS_E_UNEXPECTED_PACKET_LENGTH); len1 = *p; p += 1; - DECR_LENGTH_RET(data_size, len1, 0); + DECR_LENGTH_RET(data_size, len1, GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + if (len1 == 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); for (i = 0; i < priv->size; i++) { if (priv->protocol_size[i] == len1 @@ -108,10 +116,10 @@ _gnutls_alpn_recv_params(gnutls_session_t session, p += len1; } } else { - DECR_LENGTH_RET(data_size, 1, 0); + DECR_LENGTH_RET(data_size, 1, GNUTLS_E_UNEXPECTED_PACKET_LENGTH); len1 = *p; p += 1; - DECR_LENGTH_RET(data_size, len1, 0); + DECR_LENGTH_RET(data_size, len1, GNUTLS_E_UNEXPECTED_PACKET_LENGTH); for (i = 0; i < priv->size; i++) { if (priv->protocol_size[i] == len1 @@ -140,10 +148,10 @@ _gnutls_alpn_send_params(gnutls_session_t session, unsigned i; int total_size = 0, ret; alpn_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_ALPN, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_ALPN, &epriv); if (ret < 0) return 0; @@ -229,10 +237,10 @@ gnutls_alpn_get_selected_protocol(gnutls_session_t session, { alpn_ext_st *priv; int ret; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_ALPN, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_ALPN, &epriv); if (ret < 0) { gnutls_assert(); @@ -277,11 +285,11 @@ gnutls_alpn_set_protocols(gnutls_session_t session, { int ret; alpn_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; unsigned i; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_ALPN, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_ALPN, &epriv); if (ret < 0) { priv = gnutls_calloc(1, sizeof(*priv)); @@ -290,7 +298,7 @@ gnutls_alpn_set_protocols(gnutls_session_t session, return GNUTLS_E_MEMORY_ERROR; } epriv = priv; - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_ALPN, epriv); } else priv = epriv; @@ -313,7 +321,7 @@ gnutls_alpn_set_protocols(gnutls_session_t session, } -static void _gnutls_alpn_deinit_data(extension_priv_data_t priv) +static void _gnutls_alpn_deinit_data(gnutls_ext_priv_data_t priv) { gnutls_free(priv); } diff --git a/lib/ext/alpn.h b/lib/ext/alpn.h index 60d5266ef6..0b32a3292d 100644 --- a/lib/ext/alpn.h +++ b/lib/ext/alpn.h @@ -14,13 +14,14 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef EXT_ALPN_H -#define EXT_ALPN_H -#include +#ifndef GNUTLS_LIB_EXT_ALPN_H +#define GNUTLS_LIB_EXT_ALPN_H + +#include #define MAX_ALPN_PROTOCOLS 8 #define MAX_ALPN_PROTOCOL_NAME 32 @@ -34,6 +35,6 @@ typedef struct { unsigned flags; } alpn_ext_st; -extern const extension_entry_st ext_mod_alpn; +extern const hello_ext_entry_st ext_mod_alpn; -#endif +#endif /* GNUTLS_LIB_EXT_ALPN_H */ diff --git a/lib/ext/cert_type.c b/lib/ext/cert_type.c deleted file mode 100644 index 59b2ea1561..0000000000 --- a/lib/ext/cert_type.c +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* This file contains the code the Certificate Type TLS extension. - * This extension is currently gnutls specific. - */ - -#include "gnutls_int.h" -#include "errors.h" -#include "num.h" -#include -#include -#include - -#ifdef ENABLE_OPENPGP - -/* Maps record size to numbers according to the - * extensions draft. - */ -inline static int _gnutls_num2cert_type(int num); -inline static int _gnutls_cert_type2num(int record_size); -static int _gnutls_cert_type_recv_params(gnutls_session_t session, - const uint8_t * data, - size_t data_size); -static int _gnutls_cert_type_send_params(gnutls_session_t session, - gnutls_buffer_st * extdata); - -const extension_entry_st ext_mod_cert_type = { - .name = "Certificate Type", - .type = GNUTLS_EXTENSION_CERT_TYPE, - .parse_type = GNUTLS_EXT_TLS, - - .recv_func = _gnutls_cert_type_recv_params, - .send_func = _gnutls_cert_type_send_params, - .pack_func = NULL, - .unpack_func = NULL, - .deinit_func = NULL -}; - -/* - * In case of a server: if a CERT_TYPE extension type is received then it stores - * into the session security parameters the new value. The server may use gnutls_session_certificate_type_get(), - * to access it. - * - * In case of a client: If a cert_types have been specified then we send the extension. - * - */ - -static int -_gnutls_cert_type_recv_params(gnutls_session_t session, - const uint8_t * data, size_t _data_size) -{ - int new_type = -1, ret, i; - ssize_t data_size = _data_size; - - if (session->security_parameters.entity == GNUTLS_CLIENT) { - if (data_size > 0) { - if (data_size != 1) { - gnutls_assert(); - return GNUTLS_E_UNEXPECTED_PACKET_LENGTH; - } - - new_type = _gnutls_num2cert_type(data[0]); - - if (new_type < 0) { - gnutls_assert(); - return new_type; - } - - /* Check if we support this cert_type */ - if ((ret = - _gnutls_session_cert_type_supported(session, - new_type)) - < 0) { - gnutls_assert(); - return ret; - } - - _gnutls_session_cert_type_set(session, new_type); - } - } else { /* SERVER SIDE - we must check if the sent cert type is the right one - */ - if (data_size > 1) { - uint8_t len; - - DECR_LEN(data_size, 1); - len = data[0]; - DECR_LEN(data_size, len); - - for (i = 0; i < len; i++) { - new_type = - _gnutls_num2cert_type(data[i + 1]); - - if (new_type < 0) - continue; - - /* Check if we support this cert_type */ - if ((ret = - _gnutls_session_cert_type_supported - (session, new_type)) < 0) { - gnutls_assert(); - continue; - } else - break; - /* new_type is ok */ - } - - if (new_type < 0) { - gnutls_assert(); - return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; - } - - if ((ret = - _gnutls_session_cert_type_supported(session, - new_type)) - < 0) { - gnutls_assert(); - /* The peer has requested unsupported certificate - * types. Instead of failing, procceed normally. - * (the ciphersuite selection would fail, or a - * non certificate ciphersuite will be selected). - */ - return 0; - } - - _gnutls_session_cert_type_set(session, new_type); - } - } - - return 0; -} - -/* returns data_size or a negative number on failure - */ -static int -_gnutls_cert_type_send_params(gnutls_session_t session, - gnutls_buffer_st * extdata) -{ - unsigned len, i; - int ret; - uint8_t p; - - /* this function sends the client extension data (dnsname) */ - if (session->security_parameters.entity == GNUTLS_CLIENT) { - - if (session->internals.priorities.cert_type.algorithms > 0) { - - len = - session->internals.priorities.cert_type. - algorithms; - - if (len == 1 && - session->internals.priorities.cert_type. - priority[0] == GNUTLS_CRT_X509) { - /* We don't use this extension if X.509 certificates - * are used. - */ - return 0; - } - - /* this is a vector! - */ - p = (uint8_t) len; - ret = _gnutls_buffer_append_data(extdata, &p, 1); - if (ret < 0) - return gnutls_assert_val(ret); - - for (i = 0; i < len; i++) { - p = _gnutls_cert_type2num(session-> - internals. - priorities.cert_type. - priority[i]); - ret = - _gnutls_buffer_append_data(extdata, &p, - 1); - if (ret < 0) - return gnutls_assert_val(ret); - } - return len + 1; - } - - } else { /* server side */ - if (session->security_parameters.cert_type != - DEFAULT_CERT_TYPE) { - len = 1; - - p = _gnutls_cert_type2num(session-> - security_parameters. - cert_type); - ret = _gnutls_buffer_append_data(extdata, &p, 1); - if (ret < 0) - return gnutls_assert_val(ret); - - return len; - } - - - } - - return 0; -} - -/* Maps numbers to record sizes according to the - * extensions draft. - */ -inline static int _gnutls_num2cert_type(int num) -{ - switch (num) { - case 0: - return GNUTLS_CRT_X509; - case 1: - return GNUTLS_CRT_OPENPGP; - default: - return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; - } -} - -/* Maps record size to numbers according to the - * extensions draft. - */ -inline static int _gnutls_cert_type2num(int cert_type) -{ - switch (cert_type) { - case GNUTLS_CRT_X509: - return 0; - case GNUTLS_CRT_OPENPGP: - return 1; - default: - return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; - } - -} - -#endif diff --git a/lib/ext/cert_type.h b/lib/ext/cert_type.h deleted file mode 100644 index 8b41f586c0..0000000000 --- a/lib/ext/cert_type.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifndef EXT_CERT_TYPE_H -#define EXT_CERT_TYPE_H - -#include - -extern const extension_entry_st ext_mod_cert_type; - -#endif diff --git a/lib/ext/cert_types.h b/lib/ext/cert_types.h new file mode 100644 index 0000000000..98dfdef101 --- /dev/null +++ b/lib/ext/cert_types.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2018 ARPA2 project + * + * Author: Tom Vrancken (dev@tomvrancken.nl) + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + * This file provides common functionality for certificate type + * handling during TLS hello extensions. + * + */ + +#ifndef GNUTLS_LIB_EXT_CERT_TYPES_H +#define GNUTLS_LIB_EXT_CERT_TYPES_H + +/* Maps IANA TLS Certificate Types identifiers to internal + * certificate type representation. + */ +static inline gnutls_certificate_type_t IANA2cert_type(int num) +{ + switch (num) { + case 0: + return GNUTLS_CRT_X509; + case 2: + return GNUTLS_CRT_RAWPK; + default: + return GNUTLS_CRT_UNKNOWN; + } +} + +/* Maps internal certificate type representation to + * IANA TLS Certificate Types identifiers. + */ +static inline int cert_type2IANA(gnutls_certificate_type_t cert_type) +{ + switch (cert_type) { + case GNUTLS_CRT_X509: + return 0; + case GNUTLS_CRT_RAWPK: + return 2; + default: + return GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; + } +} + +/* Checks whether the given cert type is enabled in the application + */ +static inline bool is_cert_type_enabled(gnutls_session_t session, gnutls_certificate_type_t cert_type) +{ + switch(cert_type) { + case GNUTLS_CRT_X509: + // Default cert type, always enabled + return true; + case GNUTLS_CRT_RAWPK: + return session->internals.flags & GNUTLS_ENABLE_RAWPK; + default: + // When not explicitly supported here disable it + return false; + } +} + +/* Checks whether alternative cert types (i.e. other than X.509) + * are enabled in the application + */ +static inline bool are_alternative_cert_types_allowed(gnutls_session_t session) +{ + // OR-ed list of defined cert type init flags + #define CERT_TYPES_FLAGS GNUTLS_ENABLE_RAWPK + + return session->internals.flags & CERT_TYPES_FLAGS; + + #undef CERT_TYPES_FLAGS +} + +#endif /* GNUTLS_LIB_EXT_CERT_TYPES_H */ diff --git a/lib/ext/client_cert_type.c b/lib/ext/client_cert_type.c new file mode 100644 index 0000000000..34f4dcfa42 --- /dev/null +++ b/lib/ext/client_cert_type.c @@ -0,0 +1,381 @@ +/* + * Copyright (C) 2016 - 2018 ARPA2 project + * + * Author: Tom Vrancken (dev@tomvrancken.nl) + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + * This file is part of the client_certificate_type extension as + * defined in RFC7250 (https://tools.ietf.org/html/rfc7250). + * + * The client_certificate_type extension in the client hello indicates + * the certificate types the client is able to provide to the server, + * when requested using a certificate_request message. + */ + +#include "gnutls_int.h" +#include +#include "ext/cert_types.h" +#include "ext/client_cert_type.h" +#include "hello_ext.h" +#include "hello_ext_lib.h" +#include "errors.h" +#include "state.h" +#include "datum.h" + + +static int _gnutls_client_cert_type_recv_params(gnutls_session_t session, + const uint8_t* data, + size_t data_size); +static int _gnutls_client_cert_type_send_params(gnutls_session_t session, + gnutls_buffer_st* data); + + +const hello_ext_entry_st ext_mod_client_cert_type = { + .name = "Client Certificate Type", + .tls_id = 19, + .gid = GNUTLS_EXTENSION_CLIENT_CERT_TYPE, + .client_parse_point = GNUTLS_EXT_TLS, + .server_parse_point = GNUTLS_EXT_TLS, + .validity = GNUTLS_EXT_FLAG_TLS | + GNUTLS_EXT_FLAG_DTLS | + GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO | + GNUTLS_EXT_FLAG_EE, + .recv_func = _gnutls_client_cert_type_recv_params, + .send_func = _gnutls_client_cert_type_send_params, + .pack_func = _gnutls_hello_ext_default_pack, + .unpack_func = _gnutls_hello_ext_default_unpack, + .deinit_func = _gnutls_hello_ext_default_deinit, + .cannot_be_overriden = 1 +}; + + +static int _gnutls_client_cert_type_recv_params(gnutls_session_t session, + const uint8_t* data, + size_t data_size) +{ + int ret; + gnutls_datum_t cert_types; // Holds the received cert types + gnutls_datum_t sent_cert_types; // Holds the previously sent cert types + gnutls_certificate_type_t cert_type; + + uint8_t i, found = 0; + const uint8_t* pdata = data; + + /* Only activate this extension if we have cert credentials set + * and alternative cert types are allowed */ + if (!are_alternative_cert_types_allowed(session) || + (_gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE) == NULL)) + return 0; + + if (!IS_SERVER(session)) { // client mode + + /* Compare packet length with expected packet length. For the + * client this is a single byte. */ + if (data_size != 1) { + return + gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + } + + /* The server picked one of the offered cert types if he supports + * at least one of them and decided to do a client certificate + * request. If both parties play by the rules then we may only + * receive a cert type that we offered, i.e. one that we support. + * Because the world isn't as beautiful as it may seem, we're going + * to check it nevertheless. */ + cert_type = IANA2cert_type(pdata[0]); + + // Check validity of cert type + if (cert_type == GNUTLS_CRT_UNKNOWN) { + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE); + } + + /* Get the cert types that we sent to the server (they were stored + * in IANA representation. + */ + ret = _gnutls_hello_ext_get_datum(session, + GNUTLS_EXTENSION_CLIENT_CERT_TYPE, + &sent_cert_types); + if (ret < 0) { + /* This should not happen and indicate a memory corruption! + * Assertion are always on in production code so execution + * will halt here. */ + assert(false); + } + + // Check whether what we got back is actually offered by us + for (i = 0; i < sent_cert_types.size; i++) { + if (IANA2cert_type(sent_cert_types.data[i]) == cert_type) + found = 1; + } + + if (found) { + // Everything OK, now set the client certificate type + _gnutls_session_client_cert_type_set(session, cert_type); + ret = GNUTLS_E_SUCCESS; + } else { + // No valid cert type found + ret = GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; + } + + return ret; + + } else { // server mode + // Compare packet length with expected packet length. + DECR_LEN(data_size, 1); + if (data[0] != data_size) { + return + gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + } + pdata += 1; + + // Assign the contents of our data buffer to a gnutls_datum_t + cert_types.data = (uint8_t*)pdata; // Need casting to get rid of 'discards const qualifier' warning + cert_types.size = data_size; + + // Store the client certificate types in our session + _gnutls_hello_ext_set_datum(session, + GNUTLS_EXTENSION_CLIENT_CERT_TYPE, + &cert_types); + + /* We receive a list of supported certificate types that the client + * is able to provide when requested via a client certificate + * request. This list is sorted by order of preference. We now check + * in this order of preference whether we support any of these + * certificate types. + */ + for (i = 0; i < cert_types.size; i++) { + // Convert to internal representation + cert_type = IANA2cert_type(cert_types.data[i]); + + // If we have an invalid cert id then continue to the next + if (cert_type == GNUTLS_CRT_UNKNOWN) + continue; + + // Check for support of this cert type + if (_gnutls_session_cert_type_supported + (session, cert_type, false, GNUTLS_CTYPE_CLIENT) == 0) { + found = 1; + break; + } + } + + // We found a matching ctype, we pick this one + if (found) { + _gnutls_session_client_cert_type_set(session, cert_type); + ret = GNUTLS_E_SUCCESS; + } else { + /* If no supported certificate type can be found we terminate + * with a fatal alert of type "unsupported_certificate" + * (according to specification rfc7250). + */ + _gnutls_handshake_log + ("EXT[%p]: No supported client certificate type was found. " + "Aborting connection.\n", session); + ret = GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; + } + + return ret; + } +} + +static int _gnutls_client_cert_type_send_params(gnutls_session_t session, + gnutls_buffer_st* data) +{ + int ret; + uint8_t cert_type; // Holds an IANA cert type ID + uint8_t i = 0, num_cert_types = 0; + priority_st* cert_priorities; + gnutls_datum_t tmp_cert_types; // For type conversion + uint8_t cert_types[GNUTLS_CRT_MAX]; // The list with supported cert types. Inv: 0 <= cert type Id < 256 + const version_entry_st* vers = get_version(session); + + /* Only activate this extension if we have cert credentials set + * and alternative cert types are allowed */ + if (!are_alternative_cert_types_allowed(session) || + (_gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE) == NULL)) + return 0; + + if (!IS_SERVER(session)) { // Client mode + // For brevity + cert_priorities = + &session->internals.priorities->client_ctype; + + /* Retrieve client certificate type priorities if any. If no + * priorities are set then the default client certificate type + * initialization values apply. This default is currently set to + * x.509 in which case we don't enable this extension. + */ + if (cert_priorities->num_priorities > 0) { // Priorities are explicitly set + /* If the certificate priority is explicitly set to only + * X.509 (default) then, according to spec we don't send + * this extension. We check this here to avoid further work in + * this routine. We also check it below after pruning supported + * types. + */ + if (cert_priorities->num_priorities == 1 && + cert_priorities->priorities[0] == DEFAULT_CERT_TYPE) { + _gnutls_handshake_log + ("EXT[%p]: Client certificate type was set to default cert type (%s). " + "We therefore do not send this extension.\n", + session, + gnutls_certificate_type_get_name(DEFAULT_CERT_TYPE)); + + // Explicitly set but default ctype, so don't send anything + return 0; + } + + /* We are only allowed to send certificate types that we support, + * i.e. have credentials for. Therefore we check this here and + * prune our original list. + */ + for (i = 0; i < cert_priorities->num_priorities; i++) { + if (_gnutls_session_cert_type_supported + (session, cert_priorities->priorities[i], + true, GNUTLS_CTYPE_CLIENT) == 0) { + /* Check whether we are allowed to store another cert type + * in our buffer. In other words, prevent a possible buffer + * overflow. This situation can occur when a user sets + * duplicate cert types in the priority strings. */ + if (num_cert_types >= GNUTLS_CRT_MAX) + return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER); + + // Convert to IANA representation + ret = cert_type2IANA(cert_priorities->priorities[i]); + + if (ret < 0) + return gnutls_assert_val(ret); + + cert_type = ret; // For readability + + // Add this cert type to our list with supported types + cert_types[num_cert_types] = cert_type; + num_cert_types++; + + _gnutls_handshake_log + ("EXT[%p]: Client certificate type %s (%d) was queued.\n", + session, + gnutls_certificate_type_get_name(cert_priorities->priorities[i]), + cert_type); + } + } + + /* Check whether there are any supported certificate types left + * after the previous pruning step. If not, we do not send this + * extension. Also, if the only supported type is the default type + * we do not send this extension (according to RFC7250). + */ + if (num_cert_types == 0) { + _gnutls_handshake_log + ("EXT[%p]: Client certificate types were set but none of them is supported. " + "You might want to check your credentials or your priorities. " + "We do not send this extension.\n", + session); + + return 0; + } else if (num_cert_types == 1 && + IANA2cert_type(cert_types[0]) == DEFAULT_CERT_TYPE) { + _gnutls_handshake_log + ("EXT[%p]: The only supported client certificate type is (%s) which is the default. " + "We therefore do not send this extension.\n", + session, + gnutls_certificate_type_get_name(DEFAULT_CERT_TYPE)); + + return 0; + } + + /* We have data to send and store a copy internally. We convert + * our list with supported cert types to a datum_t in order to + * be able to make the ..._set_datum call. + */ + tmp_cert_types.data = cert_types; + tmp_cert_types.size = num_cert_types; + + _gnutls_hello_ext_set_datum(session, + GNUTLS_EXTENSION_CLIENT_CERT_TYPE, + &tmp_cert_types); + + /* Serialize the certificate types into a sequence of octets + * uint8: length of sequence of cert types (1 octet) + * uint8: cert types (0 <= #octets <= 255) + */ + ret = _gnutls_buffer_append_data_prefix(data, 8, + cert_types, + num_cert_types); + + // Check for errors + if (ret < 0) { + return gnutls_assert_val(ret); + } else { + // Number of bytes we are sending + return num_cert_types + 1; + } + } + } else { // Server mode + /* TLS 1.2: + * Check whether we are going to send a certificate request, + * otherwise omit the response. This is conform spec. + * (RFC7250, 4.2 case 3.). + * + * TLS 1.3: + * TLS 1.3 supports post-handshake authentication for the client. + * It means that a server can ask for a client certificate anytime + * after the handshake. In order for this to work we must always + * complete the certificate type negotiation and therefore respond + * with a cert type message. + */ + if (session->internals.send_cert_req != 0 || + vers->tls13_sem) { + /* Retrieve negotiated client certificate type and send it to + * the client. + * The scenario where we want to send a certificate request but + * do not have a matching certificate does not occur because we + * already terminate the connection at reception of this extension + * when we cannot find a matching client certificate. This is conform + * spec (RFC7250, 4.2 case 2.). + */ + ret = cert_type2IANA(get_certificate_type( + session, GNUTLS_CTYPE_CLIENT)); + + if (ret < 0) + return gnutls_assert_val(ret); + + cert_type = ret; // For readability + + ret = gnutls_buffer_append_data(data, &cert_type, 1); + + if (ret < 0) + return gnutls_assert_val(ret); + + return 1; // sent one byte + } + } + + // In all other cases don't enable this extension + return 0; +} + + +/** Extension interface **/ + +/* The interface is defined in state.c: + * Public: + * - gnutls_certificate_type_get2 + * + * Private: + * - _gnutls_session_client_cert_type_set + */ diff --git a/lib/ext/client_cert_type.h b/lib/ext/client_cert_type.h new file mode 100644 index 0000000000..7e89ca816a --- /dev/null +++ b/lib/ext/client_cert_type.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2016 - 2018 ARPA2 project + * + * Author: Tom Vrancken (dev@tomvrancken.nl) + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + * This file is part of the client_certificate_type extension as + * defined in RFC7250 (https://tools.ietf.org/html/rfc7250). + * + * The client_certificate_type extension in the client hello indicates + * the certificate types the client is able to provide to the server, + * when requested using a certificate_request message. + */ + +#ifndef GNUTLS_LIB_EXT_CLIENT_CERT_TYPE_H +#define GNUTLS_LIB_EXT_CLIENT_CERT_TYPE_H + +#include + +extern const hello_ext_entry_st ext_mod_client_cert_type; + +#endif /* GNUTLS_LIB_EXT_CLIENT_CERT_TYPE_H */ diff --git a/lib/ext/cookie.c b/lib/ext/cookie.c new file mode 100644 index 0000000000..b4608f3a91 --- /dev/null +++ b/lib/ext/cookie.c @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* This file contains the code for the Max Record Size TLS extension. + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "num.h" +#include "hello_ext_lib.h" +#include + +static int cookie_recv_params(gnutls_session_t session, + const uint8_t * data, + size_t data_size); +static int cookie_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata); + +const hello_ext_entry_st ext_mod_cookie = { + .name = "Cookie", + .tls_id = 44, + .gid = GNUTLS_EXTENSION_COOKIE, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_HRR | GNUTLS_EXT_FLAG_IGNORE_CLIENT_REQUEST, + .client_parse_point = GNUTLS_EXT_MANDATORY, /* force parsing prior to EXT_TLS extensions */ + .server_parse_point = GNUTLS_EXT_MANDATORY, /* force parsing prior to EXT_TLS extensions */ + .recv_func = cookie_recv_params, + .send_func = cookie_send_params, + .pack_func = NULL, + .unpack_func = NULL, + .deinit_func = _gnutls_hello_ext_default_deinit, + .cannot_be_overriden = 0 +}; + +/* Only client sends this extension. */ +static int +cookie_recv_params(gnutls_session_t session, + const uint8_t * data, size_t data_size) +{ + size_t csize; + int ret; + gnutls_datum_t tmp; + + if (session->security_parameters.entity == GNUTLS_SERVER) { + /* we don't support it */ + return 0; + } else { /* client */ + if (_gnutls_ext_get_msg(session) == GNUTLS_EXT_FLAG_HRR) { + DECR_LEN(data_size, 2); + + csize = _gnutls_read_uint16(data); + data += 2; + + DECR_LEN(data_size, csize); + + if (data_size != 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + tmp.data = (void*)data; + tmp.size = csize; + + ret = _gnutls_hello_ext_set_datum(session, GNUTLS_EXTENSION_COOKIE, &tmp); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; + } + + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + } + + return 0; +} + +/* returns data_size or a negative number on failure + */ +static int +cookie_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata) +{ + gnutls_datum_t tmp; + int ret; + + /* this function sends the client extension data (dnsname) */ + if (session->security_parameters.entity == GNUTLS_CLIENT) { + ret = _gnutls_hello_ext_get_datum(session, GNUTLS_EXTENSION_COOKIE, &tmp); + if (ret < 0) + return 0; + + ret = _gnutls_buffer_append_data_prefix(extdata, 16, tmp.data, tmp.size); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; + } + + return 0; +} diff --git a/lib/ext/cookie.h b/lib/ext/cookie.h new file mode 100644 index 0000000000..13ea7c7cde --- /dev/null +++ b/lib/ext/cookie.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_EXT_COOKIE_H +#define GNUTLS_LIB_EXT_COOKIE_H + +#include + +extern const hello_ext_entry_st ext_mod_cookie; + +#endif /* GNUTLS_LIB_EXT_COOKIE_H */ diff --git a/lib/ext/dumbfw.c b/lib/ext/dumbfw.c index b623f2a396..dfd2ee0181 100644 --- a/lib/ext/dumbfw.c +++ b/lib/ext/dumbfw.c @@ -1,5 +1,6 @@ /* - * Copyright (C) 2013 Nikos Mavrogiannopoulos + * Copyright (C) 2013-2018 Nikos Mavrogiannopoulos + * Copyright (C) 2018 Red Hat, Inc. * * This file is part of GnuTLS. * @@ -14,7 +15,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -29,22 +30,25 @@ * data that are between 256 and 511 bytes, and this extension will * make sure that client hello isn't in this range. * - * [0]. http://www.ietf.org/mail-archive/web/tls/current/msg10423.html + * [0]. https://www.ietf.org/mail-archive/web/tls/current/msg10423.html */ static int _gnutls_dumbfw_send_params(gnutls_session_t session, gnutls_buffer_st * extdata); -const extension_entry_st ext_mod_dumbfw = { +const hello_ext_entry_st ext_mod_dumbfw = { .name = "ClientHello Padding", - .type = GNUTLS_EXTENSION_DUMBFW, - .parse_type = GNUTLS_EXT_APPLICATION, - + .tls_id = 21, + .gid = GNUTLS_EXTENSION_DUMBFW, + .client_parse_point = GNUTLS_EXT_APPLICATION, + .server_parse_point = GNUTLS_EXT_APPLICATION, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_CLIENT_HELLO, .recv_func = NULL, .send_func = _gnutls_dumbfw_send_params, .pack_func = NULL, .unpack_func = NULL, .deinit_func = NULL, + .cannot_be_overriden = 0 }; static int @@ -54,15 +58,16 @@ _gnutls_dumbfw_send_params(gnutls_session_t session, int total_size = 0, ret; uint8_t pad[257]; unsigned pad_size; + ssize_t len = extdata->length - sizeof(mbuffer_st); if (session->security_parameters.entity == GNUTLS_SERVER || - session->internals.priorities.dumbfw == 0 || + session->internals.dumbfw == 0 || IS_DTLS(session) != 0 || - (extdata->length < 256 || extdata->length >= 512)) { + (len < 256 || len >= 512)) { return 0; } else { /* 256 <= extdata->length < 512 */ - pad_size = 512 - extdata->length; + pad_size = 512 - len; memset(pad, 0, pad_size); ret = diff --git a/lib/ext/dumbfw.h b/lib/ext/dumbfw.h index a3bd756eb8..87bb072e9f 100644 --- a/lib/ext/dumbfw.h +++ b/lib/ext/dumbfw.h @@ -14,14 +14,15 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef EXT_DUMBFW_H -#define EXT_DUMBFW_H -#include +#ifndef GNUTLS_LIB_EXT_DUMBFW_H +#define GNUTLS_LIB_EXT_DUMBFW_H -extern const extension_entry_st ext_mod_dumbfw; +#include -#endif +extern const hello_ext_entry_st ext_mod_dumbfw; + +#endif /* GNUTLS_LIB_EXT_DUMBFW_H */ diff --git a/lib/ext/early_data.c b/lib/ext/early_data.c new file mode 100644 index 0000000000..8bb2c012cb --- /dev/null +++ b/lib/ext/early_data.c @@ -0,0 +1,146 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* This file contains the code for the Early Data TLS 1.3 extension. + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "num.h" +#include "hello_ext_lib.h" +#include + +static int early_data_recv_params(gnutls_session_t session, + const uint8_t * data, + size_t data_size); +static int early_data_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata); + +const hello_ext_entry_st ext_mod_early_data = { + .name = "Early Data", + .tls_id = 42, + .gid = GNUTLS_EXTENSION_EARLY_DATA, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | GNUTLS_EXT_FLAG_EE, + .client_parse_point = GNUTLS_EXT_MANDATORY, /* force parsing prior to EXT_TLS extensions */ + .server_parse_point = GNUTLS_EXT_MANDATORY, /* force parsing prior to EXT_TLS extensions */ + .recv_func = early_data_recv_params, + .send_func = early_data_send_params, + .pack_func = NULL, + .unpack_func = NULL, + .deinit_func = _gnutls_hello_ext_default_deinit, + .cannot_be_overriden = 0 +}; + +static int +early_data_recv_params(gnutls_session_t session, + const uint8_t * data, size_t _data_size) +{ + const version_entry_st *vers = get_version(session); + + if (!vers || !vers->tls13_sem) + return gnutls_assert_val(0); + + if (session->security_parameters.entity == GNUTLS_SERVER) { + /* The flag may be cleared by pre_shared_key + * extension, when replay is detected. */ + if ((session->internals.flags & GNUTLS_ENABLE_EARLY_DATA) && + /* Refuse early data when this is a second CH after HRR */ + !(session->internals.hsk_flags & HSK_HRR_SENT)) + session->internals.hsk_flags |= HSK_EARLY_DATA_ACCEPTED; + + session->internals.hsk_flags |= HSK_EARLY_DATA_IN_FLIGHT; + } else { + if (_gnutls_ext_get_msg(session) == GNUTLS_EXT_FLAG_EE) + session->internals.hsk_flags |= HSK_EARLY_DATA_ACCEPTED; + } + + return 0; +} + +/* returns data_size or a negative number on failure + */ +static int +early_data_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata) +{ + if (session->security_parameters.entity == GNUTLS_SERVER) { + if (session->internals.hsk_flags & HSK_EARLY_DATA_ACCEPTED) + return GNUTLS_E_INT_RET_0; + } else { + if (session->internals.early_data_presend_buffer.length > 0) { + session->internals.hsk_flags |= HSK_EARLY_DATA_IN_FLIGHT; + return GNUTLS_E_INT_RET_0; + } + } + + return 0; +} + +/** + * gnutls_record_get_max_early_data_size: + * @session: is a #gnutls_session_t type. + * + * This function returns the maximum early data size in this connection. + * This property can only be set to servers. The client may be + * provided with the maximum allowed size through the "early_data" + * extension of the NewSessionTicket handshake message. + * + * Returns: The maximum early data size in this connection. + * + * Since: 3.6.5 + **/ +size_t +gnutls_record_get_max_early_data_size(gnutls_session_t session) +{ + return session->security_parameters.max_early_data_size; +} + +/** + * gnutls_record_set_max_early_data_size: + * @session: is a #gnutls_session_t type. + * @size: is the new size + * + * This function sets the maximum early data size in this connection. + * This property can only be set to servers. The client may be + * provided with the maximum allowed size through the "early_data" + * extension of the NewSessionTicket handshake message. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, + * otherwise a negative error code is returned. + * + * Since: 3.6.4 + **/ +int +gnutls_record_set_max_early_data_size(gnutls_session_t session, + size_t size) +{ + if (session->security_parameters.entity == GNUTLS_CLIENT) + return GNUTLS_E_INVALID_REQUEST; + + /* Reject zero as well, as it is useless. */ + if (size == 0 || size > UINT32_MAX) + return GNUTLS_E_INVALID_REQUEST; + + session->security_parameters.max_early_data_size = (uint32_t) size; + + return 0; +} diff --git a/lib/ext/early_data.h b/lib/ext/early_data.h new file mode 100644 index 0000000000..d7178e8ac2 --- /dev/null +++ b/lib/ext/early_data.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_EXT_EARLY_DATA_H +#define GNUTLS_LIB_EXT_EARLY_DATA_H + +#include + +extern const hello_ext_entry_st ext_mod_early_data; + +#endif /* GNUTLS_LIB_EXT_EARLY_DATA_H */ diff --git a/lib/ext/ec_point_formats.c b/lib/ext/ec_point_formats.c new file mode 100644 index 0000000000..d426580b19 --- /dev/null +++ b/lib/ext/ec_point_formats.c @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* This file contains the code for the Elliptic Curve Point Formats extension. + */ + +#include "ext/ec_point_formats.h" +#include "str.h" +#include "state.h" +#include + + +static int _gnutls_supported_ec_point_formats_recv_params(gnutls_session_t session, + const uint8_t * data, + size_t data_size); +static int _gnutls_supported_ec_point_formats_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata); + + +const hello_ext_entry_st ext_mod_supported_ec_point_formats = { + .name = "Supported EC Point Formats", + .tls_id = 11, + .gid = GNUTLS_EXTENSION_SUPPORTED_EC_POINT_FORMATS, + .client_parse_point = GNUTLS_EXT_TLS, + .server_parse_point = GNUTLS_EXT_TLS, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | + GNUTLS_EXT_FLAG_CLIENT_HELLO | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, + .recv_func = _gnutls_supported_ec_point_formats_recv_params, + .send_func = _gnutls_supported_ec_point_formats_send_params, + .pack_func = NULL, + .unpack_func = NULL, + .deinit_func = NULL +}; + + +/* Receive point formats + */ +static int +_gnutls_supported_ec_point_formats_recv_params(gnutls_session_t session, + const uint8_t * data, + size_t data_size) +{ + size_t len, i; + int uncompressed = 0; + + if (session->security_parameters.entity == GNUTLS_CLIENT) { + if (data_size < 1) + return + gnutls_assert_val + (GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + + len = data[0]; + if (len < 1) + return + gnutls_assert_val + (GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + + DECR_LEN(data_size, len + 1); + + for (i = 1; i <= len; i++) + if (data[i] == 0) { /* uncompressed */ + uncompressed = 1; + break; + } + + if (uncompressed == 0) + return + gnutls_assert_val + (GNUTLS_E_UNKNOWN_PK_ALGORITHM); + } else { + /* only sanity check here. We only support uncompressed points + * and a client must support it thus nothing to check. + */ + if (data_size < 1) + return + gnutls_assert_val + (GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + } + + return 0; +} + +/* returns data_size or a negative number on failure + */ +static int +_gnutls_supported_ec_point_formats_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata) +{ + const uint8_t p[2] = { 0x01, 0x00 }; /* only support uncompressed point format */ + int ret; + + if (session->security_parameters.entity == GNUTLS_SERVER + && !_gnutls_session_is_ecc(session)) + return 0; + + if (session->internals.priorities->groups.size > 0) { + ret = _gnutls_buffer_append_data(extdata, p, 2); + if (ret < 0) + return gnutls_assert_val(ret); + + return 2; + } + return 0; +} diff --git a/lib/ext/ec_point_formats.h b/lib/ext/ec_point_formats.h new file mode 100644 index 0000000000..cc65c04c38 --- /dev/null +++ b/lib/ext/ec_point_formats.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_EXT_EC_POINT_FORMATS_H +#define GNUTLS_LIB_EXT_EC_POINT_FORMATS_H + +#include + +extern const hello_ext_entry_st ext_mod_supported_ec_point_formats; + +#endif /* GNUTLS_LIB_EXT_EC_POINT_FORMATS_H */ diff --git a/lib/ext/ecc.c b/lib/ext/ecc.c deleted file mode 100644 index e1393419b9..0000000000 --- a/lib/ext/ecc.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Copyright (C) 2011-2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* This file contains the code the Certificate Type TLS extension. - * This extension is currently gnutls specific. - */ - -#include "gnutls_int.h" -#include "errors.h" -#include "num.h" -#include -#include -#include -#include - -static int _gnutls_supported_ecc_recv_params(gnutls_session_t session, - const uint8_t * data, - size_t data_size); -static int _gnutls_supported_ecc_send_params(gnutls_session_t session, - gnutls_buffer_st * extdata); - -static int _gnutls_supported_ecc_pf_recv_params(gnutls_session_t session, - const uint8_t * data, - size_t data_size); -static int _gnutls_supported_ecc_pf_send_params(gnutls_session_t session, - gnutls_buffer_st * - extdata); - -const extension_entry_st ext_mod_supported_ecc = { - .name = "Supported curves", - .type = GNUTLS_EXTENSION_SUPPORTED_ECC, - .parse_type = GNUTLS_EXT_TLS, - - .recv_func = _gnutls_supported_ecc_recv_params, - .send_func = _gnutls_supported_ecc_send_params, - .pack_func = NULL, - .unpack_func = NULL, - .deinit_func = NULL -}; - -const extension_entry_st ext_mod_supported_ecc_pf = { - .name = "Supported ECC Point Formats", - .type = GNUTLS_EXTENSION_SUPPORTED_ECC_PF, - .parse_type = GNUTLS_EXT_TLS, - - .recv_func = _gnutls_supported_ecc_pf_recv_params, - .send_func = _gnutls_supported_ecc_pf_send_params, - .pack_func = NULL, - .unpack_func = NULL, - .deinit_func = NULL -}; - -/* - * In case of a server: if a SUPPORTED_ECC extension type is received then it stores - * into the session security parameters the new value. The server may use gnutls_session_certificate_type_get(), - * to access it. - * - * In case of a client: If a supported_eccs have been specified then we send the extension. - * - */ -static int -_gnutls_supported_ecc_recv_params(gnutls_session_t session, - const uint8_t * data, size_t _data_size) -{ - int new_type = -1, ret, i; - ssize_t data_size = _data_size; - uint16_t len; - const uint8_t *p = data; - - if (session->security_parameters.entity == GNUTLS_CLIENT) { - /* A client shouldn't receive this extension, but of course - * there are servers out there that send it. Just ignore it. */ - _gnutls_debug_log("received SUPPORTED ECC extension on client side!!!\n"); - return 0; - } else { /* SERVER SIDE - we must check if the sent supported ecc type is the right one - */ - if (data_size < 2) - return - gnutls_assert_val - (GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); - - DECR_LEN(data_size, 2); - len = _gnutls_read_uint16(p); - p += 2; - - if (len % 2 != 0) - return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); - - DECR_LEN(data_size, len); - - for (i = 0; i < len; i += 2) { - new_type = - _gnutls_tls_id_to_ecc_curve(_gnutls_read_uint16 - (&p[i])); - if (new_type < 0) - continue; - - /* Check if we support this supported_ecc */ - if ((ret = - _gnutls_session_supports_ecc_curve(session, - new_type)) - < 0) { - continue; - } else - break; - /* new_type is ok */ - } - - if (new_type < 0) { - gnutls_assert(); - return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; - } - - if ((ret = - _gnutls_session_supports_ecc_curve(session, - new_type)) < 0) { - /* The peer has requested unsupported ecc - * types. Instead of failing, procceed normally. - * (the ciphersuite selection would fail, or a - * non certificate ciphersuite will be selected). - */ - return gnutls_assert_val(0); - } - - _gnutls_session_ecc_curve_set(session, new_type); - } - - return 0; -} - - -/* returns data_size or a negative number on failure - */ -static int -_gnutls_supported_ecc_send_params(gnutls_session_t session, - gnutls_buffer_st * extdata) -{ - unsigned len, i; - int ret; - uint16_t p; - - /* this extension is only being sent on client side */ - if (session->security_parameters.entity == GNUTLS_CLIENT) { - - if (session->internals.priorities.supported_ecc. - algorithms > 0) { - - len = - session->internals.priorities.supported_ecc. - algorithms; - - /* this is a vector! - */ - ret = - _gnutls_buffer_append_prefix(extdata, 16, - len * 2); - if (ret < 0) - return gnutls_assert_val(ret); - - for (i = 0; i < len; i++) { - p = _gnutls_ecc_curve_get_tls_id(session-> - internals. - priorities.supported_ecc. - priority - [i]); - ret = - _gnutls_buffer_append_prefix(extdata, - 16, p); - if (ret < 0) - return gnutls_assert_val(ret); - } - return (len + 1) * 2; - } - - } - - return 0; -} - -/* - * In case of a server: if a SUPPORTED_ECC extension type is received then it stores - * into the session security parameters the new value. The server may use gnutls_session_certificate_type_get(), - * to access it. - * - * In case of a client: If a supported_eccs have been specified then we send the extension. - * - */ -static int -_gnutls_supported_ecc_pf_recv_params(gnutls_session_t session, - const uint8_t * data, - size_t _data_size) -{ - int len, i; - int uncompressed = 0; - int data_size = _data_size; - - if (session->security_parameters.entity == GNUTLS_CLIENT) { - if (data_size < 1) - return - gnutls_assert_val - (GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); - - len = data[0]; - if (len < 1) - return - gnutls_assert_val - (GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); - - DECR_LEN(data_size, len + 1); - - for (i = 1; i <= len; i++) - if (data[i] == 0) { /* uncompressed */ - uncompressed = 1; - break; - } - - if (uncompressed == 0) - return - gnutls_assert_val - (GNUTLS_E_UNKNOWN_PK_ALGORITHM); - } else { - /* only sanity check here. We only support uncompressed points - * and a client must support it thus nothing to check. - */ - if (_data_size < 1) - return - gnutls_assert_val - (GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); - } - - return 0; -} - -/* returns data_size or a negative number on failure - */ -static int -_gnutls_supported_ecc_pf_send_params(gnutls_session_t session, - gnutls_buffer_st * extdata) -{ - const uint8_t p[2] = { 0x01, 0x00 }; /* only support uncompressed point format */ - int ret; - - if (session->security_parameters.entity == GNUTLS_SERVER - && !_gnutls_session_is_ecc(session)) - return 0; - - if (session->internals.priorities.supported_ecc.algorithms > 0) { - ret = _gnutls_buffer_append_data(extdata, p, 2); - if (ret < 0) - return gnutls_assert_val(ret); - - return 2; - } - return 0; -} - - -/* Returns 0 if the given ECC curve is allowed in the current - * session. A negative error value is returned otherwise. - */ -int -_gnutls_session_supports_ecc_curve(gnutls_session_t session, - unsigned int ecc_type) -{ - unsigned i; - - if (session->internals.priorities.supported_ecc.algorithms > 0) { - for (i = 0; - i < - session->internals.priorities.supported_ecc. - algorithms; i++) { - if (session->internals.priorities.supported_ecc. - priority[i] == ecc_type) - return 0; - } - } - - return GNUTLS_E_ECC_UNSUPPORTED_CURVE; -} diff --git a/lib/ext/ecc.h b/lib/ext/ecc.h deleted file mode 100644 index bb86871f03..0000000000 --- a/lib/ext/ecc.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2011-2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ -#ifndef EXT_ECC_H -#define EXT_ECC_H - -#include - -extern const extension_entry_st ext_mod_supported_ecc; -extern const extension_entry_st ext_mod_supported_ecc_pf; - -int -_gnutls_session_supports_ecc_curve(gnutls_session_t session, - unsigned int ecc_type); - -#endif diff --git a/lib/ext/etm.c b/lib/ext/etm.c index 8cba95912c..273a31a8b6 100644 --- a/lib/ext/etm.c +++ b/lib/ext/etm.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -26,7 +26,7 @@ #include "gnutls_int.h" #include "errors.h" #include "num.h" -#include +#include #include static int _gnutls_ext_etm_recv_params(gnutls_session_t session, @@ -35,16 +35,20 @@ static int _gnutls_ext_etm_recv_params(gnutls_session_t session, static int _gnutls_ext_etm_send_params(gnutls_session_t session, gnutls_buffer_st * extdata); -const extension_entry_st ext_mod_etm = { +const hello_ext_entry_st ext_mod_etm = { .name = "Encrypt-then-MAC", - .type = GNUTLS_EXTENSION_ETM, - .parse_type = GNUTLS_EXT_MANDATORY, - + .tls_id = 22, + .gid = GNUTLS_EXTENSION_ETM, + .client_parse_point = GNUTLS_EXT_MANDATORY, + .server_parse_point = GNUTLS_EXT_MANDATORY, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, .recv_func = _gnutls_ext_etm_recv_params, .send_func = _gnutls_ext_etm_send_params, .pack_func = NULL, .unpack_func = NULL, - .deinit_func = NULL + .deinit_func = NULL, + .cannot_be_overriden = 1 }; /* @@ -63,26 +67,29 @@ _gnutls_ext_etm_recv_params(gnutls_session_t session, } if (session->security_parameters.entity == GNUTLS_SERVER) { - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; - if (session->internals.priorities.no_etm != 0) + if (session->internals.no_etm != 0) return 0; epriv = (void*)(intptr_t)1; - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_ETM, epriv); /* don't decide now, decide on send */ return 0; } else { /* client */ - const cipher_entry_st *c; - - c = _gnutls_cipher_suite_get_cipher_algo(session->security_parameters.cipher_suite); - if (c == NULL || (c->type == CIPHER_AEAD || c->type == CIPHER_STREAM)) - return 0; - - session->security_parameters.etm = 1; + const gnutls_cipher_suite_entry_st *e = + session->security_parameters.cs; + if (e != NULL) { + const cipher_entry_st *c; + c = cipher_to_entry(e->block_algorithm); + if (c == NULL || (c->type == CIPHER_AEAD || c->type == CIPHER_STREAM)) + return 0; + + session->security_parameters.etm = 1; + } } return 0; @@ -94,32 +101,36 @@ static int _gnutls_ext_etm_send_params(gnutls_session_t session, gnutls_buffer_st * extdata) { - if (session->internals.priorities.no_etm != 0) + if (session->internals.no_etm != 0) return 0; /* this function sends the client extension data */ if (session->security_parameters.entity == GNUTLS_CLIENT) { - if (session->internals.priorities.have_cbc != 0) + if (session->internals.priorities->have_cbc != 0) return GNUTLS_E_INT_RET_0; else return 0; } else { /* server side */ + const gnutls_cipher_suite_entry_st *e; const cipher_entry_st *c; int ret; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; - c = _gnutls_cipher_suite_get_cipher_algo(session->security_parameters.cipher_suite); - if (c == NULL || (c->type == CIPHER_AEAD || c->type == CIPHER_STREAM)) - return 0; + e = session->security_parameters.cs; + if (e != NULL) { + c = cipher_to_entry(e->block_algorithm); + if (c == NULL || (c->type == CIPHER_AEAD || c->type == CIPHER_STREAM)) + return 0; - ret = _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_ETM, - &epriv); - if (ret < 0 || ((intptr_t)epriv) == 0) - return 0; + ret = _gnutls_hello_ext_get_priv(session, + GNUTLS_EXTENSION_ETM, + &epriv); + if (ret < 0 || ((intptr_t)epriv) == 0) + return 0; - session->security_parameters.etm = 1; - return GNUTLS_E_INT_RET_0; + session->security_parameters.etm = 1; + return GNUTLS_E_INT_RET_0; + } } return 0; diff --git a/lib/ext/etm.h b/lib/ext/etm.h index 5ceeb618d2..76f9dd5e51 100644 --- a/lib/ext/etm.h +++ b/lib/ext/etm.h @@ -16,15 +16,15 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef EXT_ETM_H -#define EXT_ETM_H +#ifndef GNUTLS_LIB_EXT_ETM_H +#define GNUTLS_LIB_EXT_ETM_H -#include +#include -extern const extension_entry_st ext_mod_etm; +extern const hello_ext_entry_st ext_mod_etm; -#endif +#endif /* GNUTLS_LIB_EXT_ETM_H */ diff --git a/lib/ext/ext_master_secret.c b/lib/ext/ext_master_secret.c index 62c4cf9f54..bc704e6b6a 100644 --- a/lib/ext/ext_master_secret.c +++ b/lib/ext/ext_master_secret.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014 Red Hat, Inc. + * Copyright (C) 2014-2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,17 +16,17 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -/* This file contains the code for the Max Record Size TLS extension. +/* This file contains the code for the RFC7627 (ext master secret) TLS extension. */ #include "gnutls_int.h" #include "errors.h" #include "num.h" -#include +#include #include static int _gnutls_ext_master_secret_recv_params(gnutls_session_t session, @@ -35,29 +35,33 @@ static int _gnutls_ext_master_secret_recv_params(gnutls_session_t session, static int _gnutls_ext_master_secret_send_params(gnutls_session_t session, gnutls_buffer_st * extdata); -const extension_entry_st ext_mod_ext_master_secret = { +const hello_ext_entry_st ext_mod_ext_master_secret = { .name = "Extended Master Secret", - .type = GNUTLS_EXTENSION_EXT_MASTER_SECRET, - .parse_type = GNUTLS_EXT_MANDATORY, - + .tls_id = 23, + .gid = GNUTLS_EXTENSION_EXT_MASTER_SECRET, + .client_parse_point = GNUTLS_EXT_MANDATORY, + .server_parse_point = GNUTLS_EXT_MANDATORY, + .validity = GNUTLS_EXT_FLAG_TLS|GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, .recv_func = _gnutls_ext_master_secret_recv_params, .send_func = _gnutls_ext_master_secret_send_params, .pack_func = NULL, .unpack_func = NULL, - .deinit_func = NULL + .deinit_func = NULL, + .cannot_be_overriden = 1 }; #ifdef ENABLE_SSL3 static inline unsigned have_only_ssl3_enabled(gnutls_session_t session) { - if (session->internals.priorities.protocol.algorithms == 1 && - session->internals.priorities.protocol.priority[0] == GNUTLS_SSL3) + if (session->internals.priorities->protocol.num_priorities == 1 && + session->internals.priorities->protocol.priorities[0] == GNUTLS_SSL3) return 1; return 0; } #endif -/* +/* * In case of a server: if an EXT_MASTER_SECRET extension type is received then it * sets a flag into the session security parameters. * @@ -69,12 +73,13 @@ _gnutls_ext_master_secret_recv_params(gnutls_session_t session, ssize_t data_size = _data_size; if ((session->internals.flags & GNUTLS_NO_EXTENSIONS) || - session->internals.priorities.no_ext_master_secret != 0) { + session->internals.priorities->no_extensions || + session->internals.no_ext_master_secret != 0) { return 0; } if (data_size != 0) { - return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); } #ifdef ENABLE_SSL3 @@ -101,7 +106,8 @@ _gnutls_ext_master_secret_send_params(gnutls_session_t session, gnutls_buffer_st * extdata) { if ((session->internals.flags & GNUTLS_NO_EXTENSIONS) || - session->internals.priorities.no_ext_master_secret != 0) { + session->internals.priorities->no_extensions != 0 || + session->internals.no_ext_master_secret != 0) { session->security_parameters.ext_master_secret = 0; return 0; } @@ -126,7 +132,7 @@ _gnutls_ext_master_secret_send_params(gnutls_session_t session, return 0; #else if (session->security_parameters.entity == GNUTLS_CLIENT || - session->security_parameters.ext_master_secret != 0) + session->security_parameters.ext_master_secret != 0) return GNUTLS_E_INT_RET_0; return 0; #endif @@ -137,7 +143,8 @@ _gnutls_ext_master_secret_send_params(gnutls_session_t session, * @session: is a #gnutls_session_t type. * * Get the status of the extended master secret extension negotiation. - * This is in accordance to draft-ietf-tls-session-hash-01 + * This is in accordance to RFC7627. That information is also + * available to the more generic gnutls_session_get_flags(). * * Returns: Non-zero if the negotiation was successful or zero otherwise. **/ diff --git a/lib/ext/ext_master_secret.h b/lib/ext/ext_master_secret.h index 04d20ab3fb..419335b4e3 100644 --- a/lib/ext/ext_master_secret.h +++ b/lib/ext/ext_master_secret.h @@ -16,15 +16,15 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef EXT_EXT_MASTER_SECRET_H -#define EXT_EXT_MASTER_SECRET_H +#ifndef GNUTLS_LIB_EXT_EXT_MASTER_SECRET_H +#define GNUTLS_LIB_EXT_EXT_MASTER_SECRET_H -#include +#include -extern const extension_entry_st ext_mod_ext_master_secret; +extern const hello_ext_entry_st ext_mod_ext_master_secret; -#endif +#endif /* GNUTLS_LIB_EXT_EXT_MASTER_SECRET_H */ diff --git a/lib/ext/heartbeat.c b/lib/ext/heartbeat.c index 6029a98907..5d9e9f4f8e 100644 --- a/lib/ext/heartbeat.c +++ b/lib/ext/heartbeat.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include #ifdef ENABLE_HEARTBEAT @@ -53,10 +53,10 @@ **/ void gnutls_heartbeat_enable(gnutls_session_t session, unsigned int type) { - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; epriv = (void*)(intptr_t)type; - _gnutls_ext_set_session_data(session, GNUTLS_EXTENSION_HEARTBEAT, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_HEARTBEAT, epriv); } @@ -74,12 +74,12 @@ void gnutls_heartbeat_enable(gnutls_session_t session, unsigned int type) **/ unsigned gnutls_heartbeat_allowed(gnutls_session_t session, unsigned int type) { - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; if (session->internals.handshake_in_progress != 0) return 0; /* not allowed */ - if (_gnutls_ext_get_session_data + if (_gnutls_hello_ext_get_priv (session, GNUTLS_EXTENSION_HEARTBEAT, &epriv) < 0) return 0; /* Not enabled */ @@ -202,11 +202,11 @@ gnutls_heartbeat_ping(gnutls_session_t session, size_t data_size, if (ret < 0) return gnutls_assert_val(ret); - gettime(&session->internals.hb_ping_start); + gnutls_gettime(&session->internals.hb_ping_start); session->internals.hb_local_data.length = data_size; session->internals.hb_state = SHB_SEND2; - /* fallthrough */ + FALLTHROUGH; case SHB_SEND2: session->internals.hb_actual_retrans_timeout_ms = session->internals.hb_retrans_timeout_ms; @@ -220,7 +220,7 @@ gnutls_heartbeat_ping(gnutls_session_t session, size_t data_size, if (ret < 0) return gnutls_assert_val(ret); - gettime(&session->internals.hb_ping_sent); + gnutls_gettime(&session->internals.hb_ping_sent); if (!(flags & GNUTLS_HEARTBEAT_WAIT)) { session->internals.hb_state = SHB_SEND1; @@ -228,7 +228,7 @@ gnutls_heartbeat_ping(gnutls_session_t session, size_t data_size, } session->internals.hb_state = SHB_RECV; - /* fallthrough */ + FALLTHROUGH; case SHB_RECV: ret = @@ -246,7 +246,7 @@ gnutls_heartbeat_ping(gnutls_session_t session, size_t data_size, return gnutls_assert_val(ret); } - gettime(&now); + gnutls_gettime(&now); diff = timespec_sub_ms(&now, &session->internals. @@ -405,7 +405,7 @@ unsigned int gnutls_heartbeat_get_timeout(gnutls_session_t session) struct timespec now; unsigned int diff; - gettime(&now); + gnutls_gettime(&now); diff = timespec_sub_ms(&now, &session->internals.hb_ping_sent); if (diff >= session->internals.hb_actual_retrans_timeout_ms) return 0; @@ -442,9 +442,9 @@ _gnutls_heartbeat_recv_params(gnutls_session_t session, const uint8_t * data, size_t _data_size) { unsigned policy; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; - if (_gnutls_ext_get_session_data + if (_gnutls_hello_ext_get_priv (session, GNUTLS_EXTENSION_HEARTBEAT, &epriv) < 0) { if (session->security_parameters.entity == GNUTLS_CLIENT) return @@ -467,7 +467,7 @@ _gnutls_heartbeat_recv_params(gnutls_session_t session, gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); epriv = (void*)(intptr_t)policy; - _gnutls_ext_set_session_data(session, GNUTLS_EXTENSION_HEARTBEAT, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_HEARTBEAT, epriv); return 0; @@ -477,10 +477,10 @@ static int _gnutls_heartbeat_send_params(gnutls_session_t session, gnutls_buffer_st * extdata) { - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; uint8_t p; - if (_gnutls_ext_get_session_data + if (_gnutls_hello_ext_get_priv (session, GNUTLS_EXTENSION_HEARTBEAT, &epriv) < 0) return 0; /* nothing to send - not enabled */ @@ -496,7 +496,7 @@ _gnutls_heartbeat_send_params(gnutls_session_t session, } static int -_gnutls_heartbeat_pack(extension_priv_data_t epriv, gnutls_buffer_st * ps) +_gnutls_heartbeat_pack(gnutls_ext_priv_data_t epriv, gnutls_buffer_st * ps) { int ret; @@ -508,9 +508,9 @@ _gnutls_heartbeat_pack(extension_priv_data_t epriv, gnutls_buffer_st * ps) static int _gnutls_heartbeat_unpack(gnutls_buffer_st * ps, - extension_priv_data_t * _priv) + gnutls_ext_priv_data_t * _priv) { - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; int ret; BUFFER_POP_CAST_NUM(ps, epriv); @@ -522,16 +522,20 @@ _gnutls_heartbeat_unpack(gnutls_buffer_st * ps, return ret; } -const extension_entry_st ext_mod_heartbeat = { +const hello_ext_entry_st ext_mod_heartbeat = { .name = "Heartbeat", - .type = GNUTLS_EXTENSION_HEARTBEAT, - .parse_type = GNUTLS_EXT_TLS, - + .tls_id = 15, + .gid = GNUTLS_EXTENSION_HEARTBEAT, + .client_parse_point = GNUTLS_EXT_TLS, + .server_parse_point = GNUTLS_EXT_TLS, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_EE | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, .recv_func = _gnutls_heartbeat_recv_params, .send_func = _gnutls_heartbeat_send_params, .pack_func = _gnutls_heartbeat_pack, .unpack_func = _gnutls_heartbeat_unpack, - .deinit_func = NULL + .deinit_func = NULL, + .cannot_be_overriden = 1 }; #else diff --git a/lib/ext/heartbeat.h b/lib/ext/heartbeat.h index c304e93a36..1a210040f5 100644 --- a/lib/ext/heartbeat.h +++ b/lib/ext/heartbeat.h @@ -17,14 +17,14 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef EXT_HEARTBEAT_H -#define EXT_HEARTBEAT_H +#ifndef GNUTLS_LIB_EXT_HEARTBEAT_H +#define GNUTLS_LIB_EXT_HEARTBEAT_H -#include +#include #define HEARTBEAT_REQUEST 1 #define HEARTBEAT_RESPONSE 2 @@ -36,8 +36,9 @@ #define HEARTBEAT_DEFAULT_POLICY PEER_NOT_ALLOWED_TO_SEND -extern const extension_entry_st ext_mod_heartbeat; +extern const hello_ext_entry_st ext_mod_heartbeat; int _gnutls_heartbeat_handle(gnutls_session_t session, mbuffer_st * bufel); int _gnutls_heartbeat_enabled(gnutls_session_t session, int local); -#endif + +#endif /* GNUTLS_LIB_EXT_HEARTBEAT_H */ diff --git a/lib/ext/key_share.c b/lib/ext/key_share.c new file mode 100644 index 0000000000..ab8abf8fe6 --- /dev/null +++ b/lib/ext/key_share.c @@ -0,0 +1,778 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* This file contains the code the Key Share TLS 1.3 extension. + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "num.h" +#include "ext/supported_groups.h" +#include +#include +#include +#include "auth/psk.h" +#include "auth/cert.h" +#include "handshake.h" +#include "../ecc.h" +#include "../algorithms.h" +#include "pk.h" + +static int key_share_recv_params(gnutls_session_t session, + const uint8_t * data, + size_t data_size); +static int key_share_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata); + +const hello_ext_entry_st ext_mod_key_share = { + .name = "Key Share", + .tls_id = 51, + .gid = GNUTLS_EXTENSION_KEY_SHARE, + .client_parse_point = _GNUTLS_EXT_TLS_POST_CS, + .server_parse_point = _GNUTLS_EXT_TLS_POST_CS, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO | + GNUTLS_EXT_FLAG_HRR, + .recv_func = key_share_recv_params, + .send_func = key_share_send_params, + .pack_func = NULL, + .unpack_func = NULL, + .deinit_func = NULL, + .cannot_be_overriden = 1 +}; + +/* + * Generates key exchange parameters, and stores them in + * session->key.kshare_*_params. + * + * struct { + * NamedGroup group; + * opaque key_exchange<1..2^16-1>; + * } KeyShareEntry; + * + */ +static int client_gen_key_share(gnutls_session_t session, const gnutls_group_entry_st *group, gnutls_buffer_st *extdata) +{ + gnutls_datum_t tmp = {NULL, 0}; + int ret; + + if (group->pk != GNUTLS_PK_EC && group->pk != GNUTLS_PK_ECDH_X25519 && + group->pk != GNUTLS_PK_ECDH_X448 && + group->pk != GNUTLS_PK_DH) { + _gnutls_debug_log("Cannot send key share for group %s!\n", group->name); + return GNUTLS_E_INT_RET_0; + } + + _gnutls_handshake_log("EXT[%p]: sending key share for %s\n", session, group->name); + + ret = + _gnutls_buffer_append_prefix(extdata, 16, group->tls_id); + if (ret < 0) + return gnutls_assert_val(ret); + + if (group->pk == GNUTLS_PK_EC) { + gnutls_pk_params_release(&session->key.kshare.ecdh_params); + gnutls_pk_params_init(&session->key.kshare.ecdh_params); + + ret = _gnutls_pk_generate_keys(group->pk, group->curve, + &session->key.kshare.ecdh_params, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_ecc_ansi_x962_export(group->curve, + session->key.kshare.ecdh_params.params[ECC_X], + session->key.kshare.ecdh_params.params[ECC_Y], + &tmp); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = + _gnutls_buffer_append_data_prefix(extdata, 16, tmp.data, tmp.size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + session->key.kshare.ecdh_params.algo = group->pk; + session->key.kshare.ecdh_params.curve = group->curve; + + ret = 0; + + } else if (group->pk == GNUTLS_PK_ECDH_X25519 || + group->pk == GNUTLS_PK_ECDH_X448) { + gnutls_pk_params_release(&session->key.kshare.ecdhx_params); + gnutls_pk_params_init(&session->key.kshare.ecdhx_params); + + ret = _gnutls_pk_generate_keys(group->pk, group->curve, + &session->key.kshare.ecdhx_params, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = + _gnutls_buffer_append_data_prefix(extdata, 16, + session->key.kshare.ecdhx_params.raw_pub.data, + session->key.kshare.ecdhx_params.raw_pub.size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + session->key.kshare.ecdhx_params.algo = group->pk; + session->key.kshare.ecdhx_params.curve = group->curve; + + ret = 0; + + } else if (group->pk == GNUTLS_PK_DH) { + /* we need to initialize the group parameters first */ + gnutls_pk_params_release(&session->key.kshare.dh_params); + gnutls_pk_params_init(&session->key.kshare.dh_params); + + ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_G], + group->generator->data, group->generator->size); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_P], + group->prime->data, group->prime->size); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_Q], + group->q->data, group->q->size); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + session->key.kshare.dh_params.algo = group->pk; + session->key.kshare.dh_params.dh_group = group->id; /* no curve in FFDH, we write the group */ + session->key.kshare.dh_params.qbits = *group->q_bits; + session->key.kshare.dh_params.params_nr = 3; + + ret = _gnutls_pk_generate_keys(group->pk, 0, &session->key.kshare.dh_params, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = + _gnutls_buffer_append_prefix(extdata, 16, group->prime->size); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_buffer_append_fixed_mpi(extdata, session->key.kshare.dh_params.params[DH_Y], + group->prime->size); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = 0; + } + + cleanup: + gnutls_free(tmp.data); + return ret; +} + +/* + * Sends server key exchange parameters + * + */ +static int server_gen_key_share(gnutls_session_t session, const gnutls_group_entry_st *group, gnutls_buffer_st *extdata) +{ + gnutls_datum_t tmp = {NULL, 0}; + int ret; + + if (group->pk != GNUTLS_PK_EC && group->pk != GNUTLS_PK_ECDH_X25519 && + group->pk != GNUTLS_PK_ECDH_X448 && + group->pk != GNUTLS_PK_DH) { + _gnutls_debug_log("Cannot send key share for group %s!\n", group->name); + return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + } + + _gnutls_handshake_log("EXT[%p]: sending key share for %s\n", session, group->name); + + ret = + _gnutls_buffer_append_prefix(extdata, 16, group->tls_id); + if (ret < 0) + return gnutls_assert_val(ret); + + if (group->pk == GNUTLS_PK_EC) { + ret = _gnutls_ecc_ansi_x962_export(group->curve, + session->key.kshare.ecdh_params.params[ECC_X], + session->key.kshare.ecdh_params.params[ECC_Y], + &tmp); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = + _gnutls_buffer_append_data_prefix(extdata, 16, tmp.data, tmp.size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = 0; + + } else if (group->pk == GNUTLS_PK_ECDH_X25519 || + group->pk == GNUTLS_PK_ECDH_X448) { + ret = + _gnutls_buffer_append_data_prefix(extdata, 16, + session->key.kshare.ecdhx_params.raw_pub.data, + session->key.kshare.ecdhx_params.raw_pub.size); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = 0; + + } else if (group->pk == GNUTLS_PK_DH) { + ret = + _gnutls_buffer_append_prefix(extdata, 16, group->prime->size); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_buffer_append_fixed_mpi(extdata, session->key.kshare.dh_params.params[DH_Y], + group->prime->size); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = 0; + } + + cleanup: + gnutls_free(tmp.data); + return ret; +} + +/* Generates shared key and stores it in session->key.key + */ +static int +server_use_key_share(gnutls_session_t session, const gnutls_group_entry_st *group, + const uint8_t * data, size_t data_size) +{ + const gnutls_ecc_curve_entry_st *curve; + int ret; + + if (group->pk == GNUTLS_PK_EC) { + gnutls_pk_params_st pub; + + gnutls_pk_params_release(&session->key.kshare.ecdh_params); + gnutls_pk_params_init(&session->key.kshare.ecdh_params); + + curve = _gnutls_ecc_curve_get_params(group->curve); + + gnutls_pk_params_init(&pub); + + if (curve->size*2+1 != data_size) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + /* generate our key */ + ret = _gnutls_pk_generate_keys(curve->pk, curve->id, &session->key.kshare.ecdh_params, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + /* read the public key */ + ret = _gnutls_ecc_ansi_x962_import(data, data_size, + &pub.params[ECC_X], + &pub.params[ECC_Y]); + if (ret < 0) + return gnutls_assert_val(ret); + + pub.algo = group->pk; + pub.curve = curve->id; + pub.params_nr = 2; + + /* generate shared */ + ret = _gnutls_pk_derive_tls13(curve->pk, &session->key.key, &session->key.kshare.ecdh_params, &pub); + gnutls_pk_params_release(&pub); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + ret = 0; + + } else if (group->pk == GNUTLS_PK_ECDH_X25519 || + group->pk == GNUTLS_PK_ECDH_X448) { + gnutls_pk_params_st pub; + + gnutls_pk_params_release(&session->key.kshare.ecdhx_params); + gnutls_pk_params_init(&session->key.kshare.ecdhx_params); + + curve = _gnutls_ecc_curve_get_params(group->curve); + + if (curve->size != data_size) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + /* generate our key */ + ret = _gnutls_pk_generate_keys(curve->pk, curve->id, &session->key.kshare.ecdhx_params, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + /* read the public key and generate shared */ + gnutls_pk_params_init(&pub); + + pub.algo = group->pk; + pub.curve = curve->id; + + pub.raw_pub.data = (void*)data; + pub.raw_pub.size = data_size; + + /* We don't mask the MSB in the final byte as required + * by RFC7748. This will be done internally by nettle 3.3 or later. + */ + ret = _gnutls_pk_derive_tls13(curve->pk, &session->key.key, &session->key.kshare.ecdhx_params, &pub); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + ret = 0; + + } else if (group->pk == GNUTLS_PK_DH) { + gnutls_pk_params_st pub; + + /* we need to initialize the group parameters first */ + gnutls_pk_params_release(&session->key.kshare.dh_params); + gnutls_pk_params_init(&session->key.kshare.dh_params); + + if (data_size != group->prime->size) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + /* set group params */ + ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_G], + group->generator->data, group->generator->size); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_P], + group->prime->data, group->prime->size); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + ret = _gnutls_mpi_init_scan_nz(&session->key.kshare.dh_params.params[DH_Q], + group->q->data, group->q->size); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + session->key.kshare.dh_params.algo = GNUTLS_PK_DH; + session->key.kshare.dh_params.qbits = *group->q_bits; + session->key.kshare.dh_params.params_nr = 3; + + /* generate our keys */ + ret = _gnutls_pk_generate_keys(group->pk, 0, &session->key.kshare.dh_params, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + /* read the public key and generate shared */ + gnutls_pk_params_init(&pub); + + ret = _gnutls_mpi_init_scan_nz(&pub.params[DH_Y], + data, data_size); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + pub.algo = group->pk; + + /* generate shared key */ + ret = _gnutls_pk_derive_tls13(GNUTLS_PK_DH, &session->key.key, &session->key.kshare.dh_params, &pub); + _gnutls_mpi_release(&pub.params[DH_Y]); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = 0; + } else { + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } + + _gnutls_debug_log("EXT[%p]: server generated %s shared key\n", session, group->name); + + return ret; +} + +/* Generates shared key and stores it in session->key.key + */ +static int +client_use_key_share(gnutls_session_t session, const gnutls_group_entry_st *group, + const uint8_t * data, size_t data_size) +{ + const gnutls_ecc_curve_entry_st *curve; + int ret; + + if (group->pk == GNUTLS_PK_EC) { + gnutls_pk_params_st pub; + + curve = _gnutls_ecc_curve_get_params(group->curve); + + gnutls_pk_params_init(&pub); + + if (session->key.kshare.ecdh_params.algo != group->pk || session->key.kshare.ecdh_params.curve != curve->id) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + if (curve->size*2+1 != data_size) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + /* read the server's public key */ + ret = _gnutls_ecc_ansi_x962_import(data, data_size, + &pub.params[ECC_X], + &pub.params[ECC_Y]); + if (ret < 0) + return gnutls_assert_val(ret); + + pub.algo = group->pk; + pub.curve = curve->id; + pub.params_nr = 2; + + /* generate shared key */ + ret = _gnutls_pk_derive_tls13(curve->pk, &session->key.key, &session->key.kshare.ecdh_params, &pub); + gnutls_pk_params_release(&pub); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + ret = 0; + + } else if (group->pk == GNUTLS_PK_ECDH_X25519 || + group->pk == GNUTLS_PK_ECDH_X448) { + gnutls_pk_params_st pub; + + curve = _gnutls_ecc_curve_get_params(group->curve); + + if (session->key.kshare.ecdhx_params.algo != group->pk || session->key.kshare.ecdhx_params.curve != curve->id) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + if (curve->size != data_size) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + /* read the public key and generate shared */ + gnutls_pk_params_init(&pub); + + pub.algo = group->pk; + pub.curve = curve->id; + + pub.raw_pub.data = (void*)data; + pub.raw_pub.size = data_size; + + /* We don't mask the MSB in the final byte as required + * by RFC7748. This will be done internally by nettle 3.3 or later. + */ + ret = _gnutls_pk_derive_tls13(curve->pk, &session->key.key, &session->key.kshare.ecdhx_params, &pub); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + ret = 0; + + } else if (group->pk == GNUTLS_PK_DH) { + gnutls_pk_params_st pub; + + if (session->key.kshare.dh_params.algo != group->pk || session->key.kshare.dh_params.dh_group != group->id) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + if (data_size != group->prime->size) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + /* read the public key and generate shared */ + gnutls_pk_params_init(&pub); + + ret = _gnutls_mpi_init_scan_nz(&pub.params[DH_Y], + data, data_size); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + pub.algo = group->pk; + + /* generate shared key */ + ret = _gnutls_pk_derive_tls13(GNUTLS_PK_DH, &session->key.key, &session->key.kshare.dh_params, &pub); + _gnutls_mpi_release(&pub.params[DH_Y]); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = 0; + } else { + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } + + _gnutls_debug_log("EXT[%p]: client generated %s shared key\n", session, group->name); + + return ret; +} + +static int +key_share_recv_params(gnutls_session_t session, + const uint8_t * data, size_t data_size) +{ + int ret; + size_t size; + unsigned gid; + const version_entry_st *ver; + const gnutls_group_entry_st *group; + unsigned used_share = 0; + + if (session->security_parameters.entity == GNUTLS_SERVER) { + ver = get_version(session); + if (ver == NULL || ver->key_shares == 0) + return gnutls_assert_val(0); + + DECR_LEN(data_size, 2); + size = _gnutls_read_uint16(data); + data += 2; + + if (data_size != size) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + /* if we do PSK without DH ignore that share */ + if ((session->internals.hsk_flags & HSK_PSK_SELECTED) && + (session->internals.hsk_flags & HSK_PSK_KE_MODE_PSK)) { + reset_cand_groups(session); + return 0; + } + + while(data_size > 0) { + DECR_LEN(data_size, 2); + gid = _gnutls_read_uint16(data); + data += 2; + + DECR_LEN(data_size, 2); + size = _gnutls_read_uint16(data); + data += 2; + + DECR_LEN(data_size, size); + + /* at this point we have already negotiated a group; + * find the group's share. */ + group = _gnutls_tls_id_to_group(gid); + + if (group != NULL) + _gnutls_handshake_log("EXT[%p]: Received key share for %s\n", session, group->name); + + if (group != NULL && group == session->internals.cand_group) { + _gnutls_session_group_set(session, group); + + ret = server_use_key_share(session, group, data, size); + if (ret < 0) + return gnutls_assert_val(ret); + + used_share = 1; + break; + + } + + data += size; + continue; + } + + /* we utilize GNUTLS_E_NO_COMMON_KEY_SHARE for: + * 1. signal for hello-retry-request in the handshake + * layer during first client hello parsing (server side - here). + * This does not result to error code being + * propagated to app layer. + * 2. Propagate to application error code that no + * common key share was found after an HRR was + * received (client side) + * 3. Propagate to application error code that no + * common key share was found after an HRR was + * sent (server side). + * In cases (2,3) the error is translated to illegal + * parameter alert. + */ + if (used_share == 0) { + return gnutls_assert_val(GNUTLS_E_NO_COMMON_KEY_SHARE); + } + + session->internals.hsk_flags |= HSK_KEY_SHARE_RECEIVED; + } else { /* Client */ + ver = get_version(session); + if (unlikely(ver == NULL || ver->key_shares == 0)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + if (_gnutls_ext_get_msg(session) == GNUTLS_EXT_FLAG_HRR) { + if (unlikely(!(session->internals.hsk_flags & HSK_HRR_RECEIVED))) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + DECR_LEN(data_size, 2); + gid = _gnutls_read_uint16(data); + + group = _gnutls_tls_id_to_group(gid); + if (group == NULL) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + _gnutls_handshake_log("EXT[%p]: HRR key share with %s\n", session, group->name); + + /* check if we support it */ + ret = _gnutls_session_supports_group(session, group->id); + if (ret < 0) { + _gnutls_handshake_log("EXT[%p]: received share for %s which is disabled\n", session, group->name); + return gnutls_assert_val(ret); + } + + _gnutls_session_group_set(session, group); + + return 0; + } + /* else */ + + DECR_LEN(data_size, 2); + gid = _gnutls_read_uint16(data); + data += 2; + + DECR_LEN(data_size, 2); + size = _gnutls_read_uint16(data); + data+=2; + + if (data_size != size) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + group = _gnutls_tls_id_to_group(gid); + if (group == NULL) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + /* check if we support it */ + ret = _gnutls_session_supports_group(session, group->id); + if (ret < 0) { + _gnutls_handshake_log("EXT[%p]: received share for %s which is disabled\n", session, group->name); + return gnutls_assert_val(ret); + } + + _gnutls_session_group_set(session, group); + session->internals.hsk_flags |= HSK_KEY_SHARE_RECEIVED; + + ret = client_use_key_share(session, group, data, size); + if (ret < 0) + return gnutls_assert_val(ret); + } + + return 0; +} + +/* returns data_size or a negative number on failure + */ +static int +key_share_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata) +{ + unsigned i; + int ret; + unsigned char *lengthp; + unsigned int cur_length; + unsigned int generated = 0; + const gnutls_group_entry_st *group; + const version_entry_st *ver; + + /* this extension is only being sent on client side */ + if (session->security_parameters.entity == GNUTLS_CLIENT) { + ver = _gnutls_version_max(session); + if (unlikely(ver == NULL || ver->key_shares == 0)) + return 0; + + if (!have_creds_for_tls13(session)) + return 0; + + /* write the total length later */ + lengthp = &extdata->data[extdata->length]; + + ret = + _gnutls_buffer_append_prefix(extdata, 16, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + cur_length = extdata->length; + + if (session->internals.hsk_flags & HSK_HRR_RECEIVED) { /* we know the group */ + group = get_group(session); + if (unlikely(group == NULL)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + ret = client_gen_key_share(session, group, extdata); + if (ret == GNUTLS_E_INT_RET_0) + return gnutls_assert_val(GNUTLS_E_NO_COMMON_KEY_SHARE); + if (ret < 0) + return gnutls_assert_val(ret); + } else { + gnutls_pk_algorithm_t selected_groups[3]; + unsigned max_groups = 2; /* GNUTLS_KEY_SHARE_TOP2 */ + + if (session->internals.flags & GNUTLS_KEY_SHARE_TOP) + max_groups = 1; + else if (session->internals.flags & GNUTLS_KEY_SHARE_TOP3) + max_groups = 3; + + assert(max_groups <= sizeof(selected_groups)/sizeof(selected_groups[0])); + + /* generate key shares for out top-(max_groups) groups + * if they are of different PK type. */ + for (i = 0; i < session->internals.priorities->groups.size; i++) { + group = session->internals.priorities->groups.entry[i]; + + if (generated == 1 && group->pk == selected_groups[0]) + continue; + else if (generated == 2 && (group->pk == selected_groups[1] || group->pk == selected_groups[0])) + continue; + + selected_groups[generated] = group->pk; + + ret = client_gen_key_share(session, group, extdata); + if (ret == GNUTLS_E_INT_RET_0) + continue; /* no key share for this algorithm */ + if (ret < 0) + return gnutls_assert_val(ret); + + generated++; + + if (generated >= max_groups) + break; + } + } + + /* copy actual length */ + _gnutls_write_uint16(extdata->length - cur_length, lengthp); + + } else { /* server */ + ver = get_version(session); + if (unlikely(ver == NULL || ver->key_shares == 0)) + return gnutls_assert_val(0); + + if (_gnutls_ext_get_msg(session) == GNUTLS_EXT_FLAG_HRR) { + group = session->internals.cand_group; + + if (group == NULL) + return gnutls_assert_val(GNUTLS_E_NO_COMMON_KEY_SHARE); + + _gnutls_session_group_set(session, group); + + _gnutls_handshake_log("EXT[%p]: requesting retry with group %s\n", session, group->name); + ret = + _gnutls_buffer_append_prefix(extdata, 16, group->tls_id); + if (ret < 0) + return gnutls_assert_val(ret); + } else { + /* if we are negotiating PSK without DH, do not send a key share */ + if ((session->internals.hsk_flags & HSK_PSK_SELECTED) && + (session->internals.hsk_flags & HSK_PSK_KE_MODE_PSK)) + return gnutls_assert_val(0); + + group = get_group(session); + if (unlikely(group == NULL)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + ret = server_gen_key_share(session, group, extdata); + if (ret < 0) + return gnutls_assert_val(ret); + } + + session->internals.hsk_flags |= HSK_KEY_SHARE_SENT; + } + + return 0; +} diff --git a/lib/ext/key_share.h b/lib/ext/key_share.h new file mode 100644 index 0000000000..ed9aa16800 --- /dev/null +++ b/lib/ext/key_share.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_EXT_KEY_SHARE_H +#define GNUTLS_LIB_EXT_KEY_SHARE_H + +#include + +extern const hello_ext_entry_st ext_mod_key_share; + +#endif /* GNUTLS_LIB_EXT_KEY_SHARE_H */ diff --git a/lib/ext/max_record.c b/lib/ext/max_record.c index 41880b6236..87302cbd4d 100644 --- a/lib/ext/max_record.c +++ b/lib/ext/max_record.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -26,7 +26,7 @@ #include "gnutls_int.h" #include "errors.h" #include "num.h" -#include +#include #include static int _gnutls_max_record_recv_params(gnutls_session_t session, @@ -35,11 +35,6 @@ static int _gnutls_max_record_recv_params(gnutls_session_t session, static int _gnutls_max_record_send_params(gnutls_session_t session, gnutls_buffer_st * extdata); -static int _gnutls_max_record_unpack(gnutls_buffer_st * ps, - extension_priv_data_t * _priv); -static int _gnutls_max_record_pack(extension_priv_data_t _priv, - gnutls_buffer_st * ps); - /* Maps record size to numbers according to the * extensions draft. */ @@ -47,16 +42,16 @@ static int _gnutls_mre_num2record(int num); static int _gnutls_mre_record2num(uint16_t record_size); -const extension_entry_st ext_mod_max_record_size = { +const hello_ext_entry_st ext_mod_max_record_size = { .name = "Maximum Record Size", - .type = GNUTLS_EXTENSION_MAX_RECORD_SIZE, - .parse_type = GNUTLS_EXT_TLS, - + .tls_id = 1, + .gid = GNUTLS_EXTENSION_MAX_RECORD_SIZE, + .client_parse_point = GNUTLS_EXT_TLS, + .server_parse_point = GNUTLS_EXT_TLS, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_EE | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, .recv_func = _gnutls_max_record_recv_params, - .send_func = _gnutls_max_record_send_params, - .pack_func = _gnutls_max_record_pack, - .unpack_func = _gnutls_max_record_unpack, - .deinit_func = NULL + .send_func = _gnutls_max_record_send_params }; /* @@ -71,12 +66,12 @@ const extension_entry_st ext_mod_max_record_size = { static int _gnutls_max_record_recv_params(gnutls_session_t session, - const uint8_t * data, size_t _data_size) + const uint8_t * data, size_t data_size) { ssize_t new_size; - ssize_t data_size = _data_size; - extension_priv_data_t epriv; - int ret; + + if (session->internals.hsk_flags & HSK_RECORD_SIZE_LIMIT_NEGOTIATED) + return 0; if (session->security_parameters.entity == GNUTLS_SERVER) { if (data_size > 0) { @@ -97,14 +92,6 @@ _gnutls_max_record_recv_params(gnutls_session_t session, } else { /* CLIENT SIDE - we must check if the sent record size is the right one */ if (data_size > 0) { - ret = _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_MAX_RECORD_SIZE, - &epriv); - if (ret < 0) { - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - if (data_size != 1) { gnutls_assert(); return GNUTLS_E_UNEXPECTED_PACKET_LENGTH; @@ -112,13 +99,20 @@ _gnutls_max_record_recv_params(gnutls_session_t session, new_size = _gnutls_mre_num2record(data[0]); - if (new_size < 0 - || new_size != (intptr_t) epriv) { + if (new_size < 0) { + gnutls_assert(); + return new_size; + } + + if (new_size != session->security_parameters. + max_user_record_send_size) { gnutls_assert(); return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; } else { session->security_parameters. - max_record_recv_size = (intptr_t)epriv; + max_record_send_size = new_size; + session->security_parameters. + max_record_recv_size = new_size; } } @@ -140,17 +134,25 @@ _gnutls_max_record_send_params(gnutls_session_t session, /* this function sends the client extension data (dnsname) */ if (session->security_parameters.entity == GNUTLS_CLIENT) { - extension_priv_data_t epriv; - - ret = _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_MAX_RECORD_SIZE, - &epriv); - if (ret < 0) { /* it is ok not to have it */ + /* if the user limits for sending and receiving are + * different, that means the programmer had chosen to + * use record_size_limit instead */ + if (session->security_parameters.max_user_record_send_size != + session->security_parameters.max_user_record_recv_size) return 0; - } - if ((intptr_t)epriv != DEFAULT_MAX_RECORD_SIZE) { - p = (uint8_t) _gnutls_mre_record2num((intptr_t)epriv); + if (session->security_parameters.max_user_record_send_size != + DEFAULT_MAX_RECORD_SIZE) { + ret = _gnutls_mre_record2num + (session->security_parameters. + max_user_record_send_size); + + /* it's not an error, as long as we send the + * record_size_limit extension with that value */ + if (ret < 0) + return 0; + + p = (uint8_t) ret; ret = _gnutls_buffer_append_data(extdata, &p, 1); if (ret < 0) return gnutls_assert_val(ret); @@ -160,13 +162,18 @@ _gnutls_max_record_send_params(gnutls_session_t session, } else { /* server side */ + if (session->internals.hsk_flags & HSK_RECORD_SIZE_LIMIT_SENT) + return 0; + if (session->security_parameters.max_record_recv_size != DEFAULT_MAX_RECORD_SIZE) { - p = (uint8_t) - _gnutls_mre_record2num - (session->security_parameters. - max_record_recv_size); + ret = _gnutls_mre_record2num + (session->security_parameters. + max_record_recv_size); + if (ret < 0) + return gnutls_assert_val(ret); + p = (uint8_t) ret; ret = _gnutls_buffer_append_data(extdata, &p, 1); if (ret < 0) return gnutls_assert_val(ret); @@ -179,34 +186,6 @@ _gnutls_max_record_send_params(gnutls_session_t session, } -static int -_gnutls_max_record_pack(extension_priv_data_t epriv, gnutls_buffer_st * ps) -{ - int ret; - - BUFFER_APPEND_NUM(ps, (intptr_t)epriv); - - return 0; - -} - -static int -_gnutls_max_record_unpack(gnutls_buffer_st * ps, - extension_priv_data_t * _priv) -{ - extension_priv_data_t epriv; - int ret; - - BUFFER_POP_CAST_NUM(ps, epriv); - - *_priv = epriv; - - ret = 0; - error: - return ret; -} - - /* Maps numbers to record sizes according to the * extensions draft. */ @@ -269,42 +248,70 @@ size_t gnutls_record_get_max_size(gnutls_session_t session) * @session: is a #gnutls_session_t type. * @size: is the new size * - * This function sets the maximum record packet size in this - * connection. This property can only be set to clients. The server - * may choose not to accept the requested size. + * This function sets the maximum amount of plaintext sent and + * received in a record in this connection. * - * Acceptable values are 512(=2^9), 1024(=2^10), 2048(=2^11) and - * 4096(=2^12). The requested record size does get in effect - * immediately only while sending data. The receive part will take - * effect after a successful handshake. + * Prior to 3.6.4, this function was implemented using a TLS extension + * called 'max fragment length', which limits the acceptable values to + * 512(=2^9), 1024(=2^10), 2048(=2^11) and 4096(=2^12). * - * This function uses a TLS extension called 'max record size'. Not - * all TLS implementations use or even understand this extension. + * Since 3.6.4, the limit is also negotiated through a new TLS + * extension called 'record size limit', which doesn't have the + * limitation, as long as the value ranges between 512 and 16384. + * Note that while the 'record size limit' extension is preferred, not + * all TLS implementations use or even understand the extension. + * + * Deprecated: if the client can assume that the 'record size limit' + * extension is supported by the server, we recommend using + * gnutls_record_set_max_recv_size() instead. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, * otherwise a negative error code is returned. **/ ssize_t gnutls_record_set_max_size(gnutls_session_t session, size_t size) { - ssize_t new_size; - extension_priv_data_t epriv; - - if (session->security_parameters.entity == GNUTLS_SERVER) + if (size < MIN_RECORD_SIZE || size > DEFAULT_MAX_RECORD_SIZE) return GNUTLS_E_INVALID_REQUEST; - new_size = _gnutls_mre_record2num(size); + if (session->internals.handshake_in_progress) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - if (new_size < 0) { - gnutls_assert(); - return new_size; - } + session->security_parameters.max_user_record_send_size = size; + session->security_parameters.max_user_record_recv_size = size; + + return 0; +} + +/** + * gnutls_record_set_max_recv_size: + * @session: is a #gnutls_session_t type. + * @size: is the new size + * + * This function sets the maximum amount of plaintext received in a + * record in this connection. + * + * The limit is also negotiated through a TLS extension called 'record + * size limit'. Note that while the 'record size limit' extension is + * preferred, not all TLS implementations use or even understand the + * extension. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, + * otherwise a negative error code is returned. + * + * Since: 3.6.8 + **/ +ssize_t gnutls_record_set_max_recv_size(gnutls_session_t session, size_t size) +{ + if (size < + (session->internals.allow_small_records ? + MIN_RECORD_SIZE_SMALL : MIN_RECORD_SIZE) || + size > DEFAULT_MAX_RECORD_SIZE) + return GNUTLS_E_INVALID_REQUEST; - session->security_parameters.max_record_send_size = size; - epriv = (void *)(intptr_t)size; + if (session->internals.handshake_in_progress) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - _gnutls_ext_set_session_data(session, - GNUTLS_EXTENSION_MAX_RECORD_SIZE, - epriv); + session->security_parameters.max_user_record_recv_size = size; return 0; } diff --git a/lib/ext/max_record.h b/lib/ext/max_record.h index 27e621e930..758c8e12c8 100644 --- a/lib/ext/max_record.h +++ b/lib/ext/max_record.h @@ -16,15 +16,15 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef EXT_MAX_RECORD_H -#define EXT_MAX_RECORD_H +#ifndef GNUTLS_LIB_EXT_MAX_RECORD_H +#define GNUTLS_LIB_EXT_MAX_RECORD_H -#include +#include -extern const extension_entry_st ext_mod_max_record_size; +extern const hello_ext_entry_st ext_mod_max_record_size; -#endif +#endif /* GNUTLS_LIB_EXT_MAX_RECORD_H */ diff --git a/lib/ext/post_handshake.c b/lib/ext/post_handshake.c new file mode 100644 index 0000000000..27fe1e7343 --- /dev/null +++ b/lib/ext/post_handshake.c @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* This file contains the code for the Post-Handshake TLS 1.3 extension. + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "num.h" +#include +#include +#include "auth/cert.h" + +static int _gnutls_post_handshake_recv_params(gnutls_session_t session, + const uint8_t * data, + size_t data_size); +static int _gnutls_post_handshake_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata); + +const hello_ext_entry_st ext_mod_post_handshake = { + .name = "Post Handshake Auth", + .tls_id = 49, + .gid = GNUTLS_EXTENSION_POST_HANDSHAKE, + .client_parse_point = GNUTLS_EXT_TLS, + .server_parse_point = GNUTLS_EXT_TLS, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_CLIENT_HELLO, + .recv_func = _gnutls_post_handshake_recv_params, + .send_func = _gnutls_post_handshake_send_params, + .pack_func = NULL, + .unpack_func = NULL, + .deinit_func = NULL, + .cannot_be_overriden = 1 +}; + +static int +_gnutls_post_handshake_recv_params(gnutls_session_t session, + const uint8_t * data, size_t _data_size) +{ + const version_entry_st *vers; + + if (session->security_parameters.entity == GNUTLS_SERVER) { + vers = get_version(session); + if (unlikely(vers == NULL)) + return 0; + + if ((session->internals.flags & GNUTLS_POST_HANDSHAKE_AUTH) && + vers->post_handshake_auth) + session->security_parameters.post_handshake_auth = 1; + } + + return 0; +} + +/* returns data_size or a negative number on failure + */ +static int +_gnutls_post_handshake_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata) +{ + gnutls_certificate_credentials_t cred; + const version_entry_st *max; + + if (session->security_parameters.entity != GNUTLS_CLIENT || + !(session->internals.flags & GNUTLS_POST_HANDSHAKE_AUTH)) { + /* not sent on server side */ + return 0; + } + + cred = (gnutls_certificate_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + if (cred == NULL) /* no certificate authentication */ + return gnutls_assert_val(0); + + max = _gnutls_version_max(session); + if (unlikely(max == NULL)) + return gnutls_assert_val(0); + + if (max->post_handshake_auth) + return GNUTLS_E_INT_RET_0; + else + return 0; +} diff --git a/lib/ext/post_handshake.h b/lib/ext/post_handshake.h new file mode 100644 index 0000000000..7a1cc7a367 --- /dev/null +++ b/lib/ext/post_handshake.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_EXT_POST_HANDSHAKE_H +#define GNUTLS_LIB_EXT_POST_HANDSHAKE_H + +#include + +extern const hello_ext_entry_st ext_mod_post_handshake; + +#endif /* GNUTLS_LIB_EXT_POST_HANDSHAKE_H */ diff --git a/lib/ext/pre_shared_key.c b/lib/ext/pre_shared_key.c new file mode 100644 index 0000000000..fef67d341c --- /dev/null +++ b/lib/ext/pre_shared_key.c @@ -0,0 +1,878 @@ +/* + * Copyright (C) 2017-2018 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Ander Juaristi, Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "auth/psk.h" +#include "handshake.h" +#include "kx.h" +#include "secrets.h" +#include "tls13/anti_replay.h" +#include "tls13/psk_ext_parser.h" +#include "tls13/finished.h" +#include "tls13/session_ticket.h" +#include "auth/psk_passwd.h" +#include +#include +#include + +static int +compute_psk_from_ticket(const tls13_ticket_st *ticket, gnutls_datum_t *key) +{ + int ret; + + if (unlikely(ticket->prf == NULL || ticket->prf->output_size == 0)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + key->data = gnutls_malloc(ticket->prf->output_size); + if (!key->data) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + key->size = ticket->prf->output_size; + + ret = _tls13_expand_secret2(ticket->prf, + RESUMPTION_LABEL, sizeof(RESUMPTION_LABEL)-1, + ticket->nonce, ticket->nonce_size, + ticket->resumption_master_secret, + key->size, + key->data); + if (ret < 0) + gnutls_assert(); + + return ret; +} + +static int +compute_binder_key(const mac_entry_st *prf, + const uint8_t *key, size_t keylen, + bool resuming, + void *out) +{ + int ret; + const char ext_label[] = EXT_BINDER_LABEL; + const size_t ext_label_len = sizeof(ext_label) - 1; + const char res_label[] = RES_BINDER_LABEL; + const size_t res_label_len = sizeof(res_label) - 1; + const char *label = resuming ? res_label : ext_label; + size_t label_len = resuming ? res_label_len : ext_label_len; + uint8_t tmp_key[MAX_HASH_SIZE]; + + /* Compute HKDF-Extract(0, psk) */ + ret = _tls13_init_secret2(prf, key, keylen, tmp_key); + if (ret < 0) + return ret; + + /* Compute Derive-Secret(secret, label, transcript_hash) */ + ret = _tls13_derive_secret2(prf, label, label_len, + NULL, 0, tmp_key, out); + if (ret < 0) + return ret; + + return 0; +} + +static int +compute_psk_binder(gnutls_session_t session, + const mac_entry_st *prf, unsigned binders_length, + int exts_length, int ext_offset, + const gnutls_datum_t *psk, const gnutls_datum_t *client_hello, + bool resuming, void *out) +{ + int ret; + unsigned client_hello_pos, extensions_len_pos; + gnutls_buffer_st handshake_buf; + uint8_t binder_key[MAX_HASH_SIZE]; + + _gnutls_buffer_init(&handshake_buf); + + if (session->security_parameters.entity == GNUTLS_CLIENT) { + if (session->internals.hsk_flags & HSK_HRR_RECEIVED) { + ret = gnutls_buffer_append_data(&handshake_buf, + (const void *) session->internals.handshake_hash_buffer.data, + session->internals.handshake_hash_buffer.length); + if (ret < 0) { + gnutls_assert(); + goto error; + } + } + + client_hello_pos = handshake_buf.length; + ret = gnutls_buffer_append_data(&handshake_buf, client_hello->data, + client_hello->size); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + /* This is a ClientHello message */ + handshake_buf.data[client_hello_pos] = GNUTLS_HANDSHAKE_CLIENT_HELLO; + + /* At this point we have not yet added the binders to the ClientHello, + * but we have to overwrite the size field, pretending as if binders + * of the correct length were present. + */ + _gnutls_write_uint24(handshake_buf.length - client_hello_pos + binders_length - 2, &handshake_buf.data[client_hello_pos + 1]); + _gnutls_write_uint16(handshake_buf.length - client_hello_pos + binders_length - ext_offset, + &handshake_buf.data[client_hello_pos + ext_offset]); + extensions_len_pos = handshake_buf.length - client_hello_pos - exts_length - 2; + _gnutls_write_uint16(exts_length + binders_length + 2, + &handshake_buf.data[client_hello_pos + extensions_len_pos]); + } else { + if (session->internals.hsk_flags & HSK_HRR_SENT) { + if (unlikely(session->internals.handshake_hash_buffer.length <= client_hello->size)) { + ret = gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + goto error; + } + + ret = gnutls_buffer_append_data(&handshake_buf, + session->internals.handshake_hash_buffer.data, + session->internals.handshake_hash_buffer.length - client_hello->size); + if (ret < 0) { + gnutls_assert(); + goto error; + } + } + + if (unlikely(client_hello->size <= binders_length)) { + ret = gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + goto error; + } + + ret = gnutls_buffer_append_data(&handshake_buf, + (const void *) client_hello->data, + client_hello->size - binders_length); + if (ret < 0) { + gnutls_assert(); + goto error; + } + } + + ret = compute_binder_key(prf, + psk->data, psk->size, resuming, + binder_key); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + ret = _gnutls13_compute_finished(prf, binder_key, + &handshake_buf, + out); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + ret = 0; +error: + _gnutls_buffer_clear(&handshake_buf); + return ret; +} + +static int +generate_early_secrets(gnutls_session_t session, + const mac_entry_st *prf) +{ + int ret; + + ret = _tls13_derive_secret2(prf, EARLY_TRAFFIC_LABEL, sizeof(EARLY_TRAFFIC_LABEL)-1, + session->internals.handshake_hash_buffer.data, + session->internals.handshake_hash_buffer_client_hello_len, + session->key.proto.tls13.temp_secret, + session->key.proto.tls13.e_ckey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_call_keylog_func(session, "CLIENT_EARLY_TRAFFIC_SECRET", + session->key.proto.tls13.e_ckey, + prf->output_size); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _tls13_derive_secret2(prf, EARLY_EXPORTER_MASTER_LABEL, sizeof(EARLY_EXPORTER_MASTER_LABEL)-1, + session->internals.handshake_hash_buffer.data, + session->internals.handshake_hash_buffer_client_hello_len, + session->key.proto.tls13.temp_secret, + session->key.proto.tls13.ap_expkey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_call_keylog_func(session, "EARLY_EXPORTER_SECRET", + session->key.proto.tls13.ap_expkey, + prf->output_size); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + +/* Calculate TLS 1.3 Early Secret and the derived secrets from the + * selected PSK. */ +int +_gnutls_generate_early_secrets_for_psk(gnutls_session_t session) +{ + const uint8_t *psk; + size_t psk_size; + const mac_entry_st *prf; + int ret; + + psk = session->key.binders[0].psk.data; + psk_size = session->key.binders[0].psk.size; + prf = session->key.binders[0].prf; + + if (unlikely(psk_size == 0)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ret = _tls13_init_secret2(prf, psk, psk_size, + session->key.proto.tls13.temp_secret); + if (ret < 0) + return gnutls_assert_val(ret); + + session->key.proto.tls13.temp_secret_size = prf->output_size; + + ret = generate_early_secrets(session, session->key.binders[0].prf); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + +static int +client_send_params(gnutls_session_t session, + gnutls_buffer_t extdata, + const gnutls_psk_client_credentials_t cred) +{ + int ret, ext_offset = 0; + uint8_t binder_value[MAX_HASH_SIZE]; + size_t spos; + gnutls_datum_t username = {NULL, 0}; + gnutls_datum_t user_key = {NULL, 0}, rkey = {NULL, 0}; + gnutls_datum_t client_hello; + unsigned next_idx; + const mac_entry_st *prf_res = NULL; + const mac_entry_st *prf_psk = NULL; + struct timespec cur_time; + uint32_t ticket_age, ob_ticket_age; + int free_username = 0; + psk_auth_info_t info = NULL; + unsigned psk_id_len = 0; + unsigned binders_len, binders_pos; + + if (((session->internals.flags & GNUTLS_NO_TICKETS) || + session->internals.tls13_ticket.ticket.data == NULL) && + (!cred || !_gnutls_have_psk_credentials(cred, session))) { + + return 0; + } + + binders_len = 0; + + /* placeholder to be filled later */ + spos = extdata->length; + ret = _gnutls_buffer_append_prefix(extdata, 16, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + /* First, let's see if we have a session ticket to send */ + if (!(session->internals.flags & GNUTLS_NO_TICKETS) && + session->internals.tls13_ticket.ticket.data != NULL) { + /* We found a session ticket */ + if (unlikely(session->internals.tls13_ticket.prf == NULL)) { + _gnutls13_session_ticket_unset(session); + ret = gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + goto cleanup; + } + + prf_res = session->internals.tls13_ticket.prf; + + gnutls_gettime(&cur_time); + if (unlikely(_gnutls_timespec_cmp(&cur_time, + &session->internals. + tls13_ticket. + arrival_time) < 0)) { + gnutls_assert(); + _gnutls13_session_ticket_unset(session); + goto ignore_ticket; + } + + /* Check whether the ticket is stale */ + ticket_age = timespec_sub_ms(&cur_time, + &session->internals.tls13_ticket. + arrival_time); + if (ticket_age / 1000 > session->internals.tls13_ticket.lifetime) { + _gnutls13_session_ticket_unset(session); + goto ignore_ticket; + } + + ret = compute_psk_from_ticket(&session->internals.tls13_ticket, &rkey); + if (ret < 0) { + _gnutls13_session_ticket_unset(session); + goto ignore_ticket; + } + + /* Calculate obfuscated ticket age, in milliseconds, mod 2^32 */ + ob_ticket_age = ticket_age + session->internals.tls13_ticket.age_add; + + if ((ret = _gnutls_buffer_append_data_prefix(extdata, 16, + session->internals.tls13_ticket.ticket.data, + session->internals.tls13_ticket.ticket.size)) < 0) { + gnutls_assert(); + goto cleanup; + } + + /* Now append the obfuscated ticket age */ + if ((ret = _gnutls_buffer_append_prefix(extdata, 32, ob_ticket_age)) < 0) { + gnutls_assert(); + goto cleanup; + } + + psk_id_len += 6 + session->internals.tls13_ticket.ticket.size; + binders_len += 1 + _gnutls_mac_get_algo_len(prf_res); + } + + ignore_ticket: + if (cred && _gnutls_have_psk_credentials(cred, session)) { + gnutls_datum_t tkey; + + if (cred->binder_algo == NULL) { + gnutls_assert(); + ret = gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + goto cleanup; + } + + prf_psk = cred->binder_algo; + + ret = _gnutls_find_psk_key(session, cred, &username, &tkey, &free_username); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (username.size == 0 || username.size > UINT16_MAX) { + ret = gnutls_assert_val(GNUTLS_E_INVALID_PASSWORD); + goto cleanup; + } + + if (!free_username) { + /* we need to copy the key */ + ret = _gnutls_set_datum(&user_key, tkey.data, tkey.size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } else { + user_key.data = tkey.data; + user_key.size = tkey.size; + } + + ret = _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + info = _gnutls_get_auth_info(session, GNUTLS_CRD_PSK); + assert(info != NULL); + + _gnutls_copy_psk_username(info, &username); + + if ((ret = _gnutls_buffer_append_data_prefix(extdata, 16, + username.data, + username.size)) < 0) { + gnutls_assert(); + goto cleanup; + } + + /* Now append the obfuscated ticket age */ + if ((ret = _gnutls_buffer_append_prefix(extdata, 32, 0)) < 0) { + gnutls_assert(); + goto cleanup; + } + + psk_id_len += 6 + username.size; + binders_len += 1 + _gnutls_mac_get_algo_len(prf_psk); + } + + /* if no tickets or identities to be sent */ + if (psk_id_len == 0) { + /* reset extensions buffer */ + extdata->length = spos; + return 0; + } + + _gnutls_write_uint16(psk_id_len, &extdata->data[spos]); + + binders_pos = extdata->length-spos; + ext_offset = _gnutls_ext_get_extensions_offset(session); + + /* Compute the binders. extdata->data points to the start + * of this client hello. */ + assert(extdata->length >= sizeof(mbuffer_st)); + assert(ext_offset >= (ssize_t)sizeof(mbuffer_st)); + ext_offset -= sizeof(mbuffer_st); + client_hello.data = extdata->data+sizeof(mbuffer_st); + client_hello.size = extdata->length-sizeof(mbuffer_st); + + next_idx = 0; + + ret = _gnutls_buffer_append_prefix(extdata, 16, binders_len); + if (ret < 0) { + gnutls_assert_val(ret); + goto cleanup; + } + + if (prf_res && rkey.size > 0) { + ret = compute_psk_binder(session, prf_res, + binders_len, binders_pos, + ext_offset, &rkey, &client_hello, 1, + binder_value); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + /* Associate the selected pre-shared key with the session */ + gnutls_free(session->key.binders[next_idx].psk.data); + session->key.binders[next_idx].psk.data = rkey.data; + session->key.binders[next_idx].psk.size = rkey.size; + rkey.data = NULL; + + session->key.binders[next_idx].prf = prf_res; + session->key.binders[next_idx].resumption = 1; + session->key.binders[next_idx].idx = next_idx; + + _gnutls_handshake_log("EXT[%p]: sent PSK resumption identity (%d)\n", session, next_idx); + + next_idx++; + + /* Add the binder */ + ret = _gnutls_buffer_append_data_prefix(extdata, 8, binder_value, prf_res->output_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + session->internals.hsk_flags |= HSK_TLS13_TICKET_SENT; + } + + if (prf_psk && user_key.size > 0 && info) { + ret = compute_psk_binder(session, prf_psk, + binders_len, binders_pos, + ext_offset, &user_key, &client_hello, 0, + binder_value); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + /* Associate the selected pre-shared key with the session */ + gnutls_free(session->key.binders[next_idx].psk.data); + session->key.binders[next_idx].psk.data = user_key.data; + session->key.binders[next_idx].psk.size = user_key.size; + user_key.data = NULL; + + session->key.binders[next_idx].prf = prf_psk; + session->key.binders[next_idx].resumption = 0; + session->key.binders[next_idx].idx = next_idx; + + _gnutls_handshake_log("EXT[%p]: sent PSK identity '%s' (%d)\n", session, info->username, next_idx); + + next_idx++; + + /* Add the binder */ + ret = _gnutls_buffer_append_data_prefix(extdata, 8, binder_value, prf_psk->output_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } + + ret = 0; + +cleanup: + if (free_username) + _gnutls_free_datum(&username); + + _gnutls_free_temp_key_datum(&user_key); + _gnutls_free_temp_key_datum(&rkey); + + return ret; +} + +static int +server_send_params(gnutls_session_t session, gnutls_buffer_t extdata) +{ + int ret; + + if (!(session->internals.hsk_flags & HSK_PSK_SELECTED)) + return 0; + + ret = _gnutls_buffer_append_prefix(extdata, 16, + session->key.binders[0].idx); + if (ret < 0) + return gnutls_assert_val(ret); + + return 2; +} + +static int server_recv_params(gnutls_session_t session, + const unsigned char *data, size_t len, + const gnutls_psk_server_credentials_t pskcred) +{ + int ret; + const mac_entry_st *prf; + gnutls_datum_t full_client_hello; + uint8_t binder_value[MAX_HASH_SIZE]; + uint16_t psk_index, i; + gnutls_datum_t binder_recvd = { NULL, 0 }; + gnutls_datum_t key = {NULL, 0}; + psk_ext_parser_st psk_parser; + psk_ext_iter_st psk_iter; + struct psk_st psk; + psk_auth_info_t info; + tls13_ticket_st ticket_data; + /* These values should be set properly when session ticket is accepted. */ + uint32_t ticket_age = UINT32_MAX; + struct timespec ticket_creation_time = { 0, 0 }; + bool resuming; + + ret = _gnutls13_psk_ext_parser_init(&psk_parser, data, len); + if (ret < 0) { + /* No PSKs advertised by client */ + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + return 0; + return gnutls_assert_val(ret); + } + + _gnutls13_psk_ext_iter_init(&psk_iter, &psk_parser); + for (psk_index = 0; ; psk_index++) { + ret = _gnutls13_psk_ext_iter_next_identity(&psk_iter, &psk); + if (ret < 0) { + /* We couldn't find any usable PSK */ + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + return 0; + return gnutls_assert_val(ret); + } + + /* This will unpack the session ticket if it is well + * formed and has the expected name */ + if (!(session->internals.flags & GNUTLS_NO_TICKETS) && + (ret = _gnutls13_unpack_session_ticket(session, &psk.identity, &ticket_data)) == 0) { + prf = ticket_data.prf; + + session->internals.resumption_requested = 1; + + /* Check whether ticket is stale or not */ + ticket_age = psk.ob_ticket_age - ticket_data.age_add; + if (ticket_age / 1000 > ticket_data.lifetime) { + gnutls_assert(); + tls13_ticket_deinit(&ticket_data); + continue; + } + + ret = compute_psk_from_ticket(&ticket_data, &key); + if (ret < 0) { + gnutls_assert(); + tls13_ticket_deinit(&ticket_data); + continue; + } + + memcpy(&ticket_creation_time, + &ticket_data.creation_time, + sizeof(struct timespec)); + + tls13_ticket_deinit(&ticket_data); + + resuming = 1; + break; + } else if (pskcred && + psk.ob_ticket_age == 0 && + psk.identity.size > 0 && psk.identity.size <= MAX_USERNAME_SIZE) { + prf = pskcred->binder_algo; + + /* this fails only on configuration errors; as such we always + * return its error code in that case */ + ret = _gnutls_psk_pwd_find_entry(session, (char *) psk.identity.data, psk.identity.size, &key); + if (ret < 0) + return gnutls_assert_val(ret); + + resuming = 0; + break; + } + } + + _gnutls13_psk_ext_iter_init(&psk_iter, &psk_parser); + for (i = 0; i <= psk_index; i++) { + ret = _gnutls13_psk_ext_iter_next_binder(&psk_iter, &binder_recvd); + if (ret < 0) { + gnutls_assert(); + /* We couldn't extract binder */ + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + goto fail; + } + } + + /* Get full ClientHello */ + if (!_gnutls_ext_get_full_client_hello(session, &full_client_hello)) { + ret = GNUTLS_E_INTERNAL_ERROR; + gnutls_assert(); + goto fail; + } + + /* Compute the binder value for this PSK */ + ret = compute_psk_binder(session, prf, psk_parser.binders_len+2, 0, 0, + &key, &full_client_hello, resuming, + binder_value); + if (ret < 0) { + gnutls_assert(); + goto fail; + } + + if (_gnutls_mac_get_algo_len(prf) != binder_recvd.size || + safe_memcmp(binder_value, binder_recvd.data, binder_recvd.size)) { + gnutls_assert(); + ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + goto fail; + } + + if (session->internals.hsk_flags & HSK_PSK_KE_MODE_DHE_PSK) + _gnutls_handshake_log("EXT[%p]: selected DHE-PSK mode\n", session); + else { + reset_cand_groups(session); + _gnutls_handshake_log("EXT[%p]: selected PSK mode\n", session); + } + + /* save the username in psk_auth_info to make it available + * using gnutls_psk_server_get_username() */ + if (!resuming) { + assert(psk.identity.size < sizeof(info->username)); + + ret = _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1); + if (ret < 0) { + gnutls_assert(); + goto fail; + } + + info = _gnutls_get_auth_info(session, GNUTLS_CRD_PSK); + assert(info != NULL); + + _gnutls_copy_psk_username(info, &psk.identity); + _gnutls_handshake_log("EXT[%p]: selected PSK identity: %s (%d)\n", session, info->username, psk_index); + } else { + if (session->internals.hsk_flags & HSK_EARLY_DATA_ACCEPTED) { + if (session->internals.anti_replay) { + ret = _gnutls_anti_replay_check(session->internals.anti_replay, + ticket_age, + &ticket_creation_time, + &binder_recvd); + if (ret < 0) { + session->internals.hsk_flags &= ~HSK_EARLY_DATA_ACCEPTED; + _gnutls_handshake_log("EXT[%p]: replay detected; rejecting early data\n", + session); + } + } else { + _gnutls_handshake_log("EXT[%p]: anti-replay is not enabled; rejecting early data\n", + session); + session->internals.hsk_flags &= ~HSK_EARLY_DATA_ACCEPTED; + } + } + + session->internals.resumed = RESUME_TRUE; + _gnutls_handshake_log("EXT[%p]: selected resumption PSK identity (%d)\n", session, psk_index); + } + + session->internals.hsk_flags |= HSK_PSK_SELECTED; + + /* Reference the selected pre-shared key */ + session->key.binders[0].psk.data = key.data; + session->key.binders[0].psk.size = key.size; + + session->key.binders[0].idx = psk_index; + session->key.binders[0].prf = prf; + session->key.binders[0].resumption = resuming; + + ret = _gnutls_generate_early_secrets_for_psk(session); + if (ret < 0) { + gnutls_assert(); + goto fail; + } + + return 0; + + fail: + gnutls_free(key.data); + return ret; +} + +/* + * Return values for this function: + * - 0 : Not applicable. + * - >0 : Ok. Return size of extension data. + * - GNUTLS_E_INT_RET_0 : Size of extension data is zero. + * - <0 : There's been an error. + * + * In the client, generates the PskIdentity and PskBinderEntry messages. + * + * PskIdentity identities<7..2^16-1>; + * PskBinderEntry binders<33..2^16-1>; + * + * struct { + * opaque identity<1..2^16-1>; + * uint32 obfuscated_ticket_age; + * } PskIdentity; + * + * opaque PskBinderEntry<32..255>; + * + * The server sends the selected identity, which is a zero-based index + * of the PSKs offered by the client: + * + * struct { + * uint16 selected_identity; + * } PreSharedKeyExtension; + */ +static int _gnutls_psk_send_params(gnutls_session_t session, + gnutls_buffer_t extdata) +{ + gnutls_psk_client_credentials_t cred = NULL; + const version_entry_st *vers; + + if (session->security_parameters.entity == GNUTLS_CLIENT) { + vers = _gnutls_version_max(session); + + if (!vers || !vers->tls13_sem) + return 0; + + if (session->internals.hsk_flags & HSK_PSK_KE_MODES_SENT) { + cred = (gnutls_psk_client_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_PSK); + } + + if ((session->internals.flags & GNUTLS_NO_TICKETS) && !session->internals.priorities->have_psk) + return 0; + + return client_send_params(session, extdata, cred); + } else { + vers = get_version(session); + + if (!vers || !vers->tls13_sem) + return 0; + + if ((session->internals.flags & GNUTLS_NO_TICKETS) && !session->internals.priorities->have_psk) + return 0; + + if (session->internals.hsk_flags & HSK_PSK_KE_MODES_RECEIVED) + return server_send_params(session, extdata); + else + return 0; + } +} + +static void swap_binders(gnutls_session_t session) +{ + struct binder_data_st tmp; + + memcpy(&tmp, &session->key.binders[0], sizeof(struct binder_data_st)); + memcpy(&session->key.binders[0], &session->key.binders[1], sizeof(struct binder_data_st)); + memcpy(&session->key.binders[1], &tmp, sizeof(struct binder_data_st)); +} + +/* + * Return values for this function: + * - 0 : Not applicable. + * - >0 : Ok. Return size of extension data. + * - <0 : There's been an error. + */ +static int _gnutls_psk_recv_params(gnutls_session_t session, + const unsigned char *data, size_t len) +{ + unsigned i; + gnutls_psk_server_credentials_t pskcred; + const version_entry_st *vers = get_version(session); + int ret; + + if (!vers || !vers->tls13_sem) + return 0; + + if (session->security_parameters.entity == GNUTLS_CLIENT) { + if (session->internals.hsk_flags & HSK_PSK_KE_MODES_SENT) { + uint16_t selected_identity = _gnutls_read_uint16(data); + + for (i=0;ikey.binders)/sizeof(session->key.binders[0]);i++) { + if (session->key.binders[i].prf != NULL && session->key.binders[i].idx == selected_identity) { + if (session->key.binders[i].resumption) { + session->internals.resumed = RESUME_TRUE; + _gnutls_handshake_log("EXT[%p]: selected PSK-resumption mode\n", session); + } else { + _gnutls_handshake_log("EXT[%p]: selected PSK mode\n", session); + } + + /* different PSK is selected, than the one we calculated early secrets */ + if (i != 0) { + /* ensure that selected binder is set on (our) index zero */ + swap_binders(session); + + ret = _gnutls_generate_early_secrets_for_psk(session); + if (ret < 0) + return gnutls_assert_val(ret); + } + session->internals.hsk_flags |= HSK_PSK_SELECTED; + } + } + + return 0; + } else { + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + } + } else { + if (session->internals.hsk_flags & HSK_PSK_KE_MODES_RECEIVED) { + if (session->internals.hsk_flags & HSK_PSK_KE_MODE_INVALID) { + /* We received a "psk_ke_modes" extension, but with a value we don't support */ + return 0; + } + + pskcred = (gnutls_psk_server_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_PSK); + + /* If there are no PSK credentials, this extension is not applicable, + * so we return zero. */ + if (pskcred == NULL && (session->internals.flags & GNUTLS_NO_TICKETS)) + return 0; + + return server_recv_params(session, data, len, pskcred); + } else { + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + } + } +} + +const hello_ext_entry_st ext_mod_pre_shared_key = { + .name = "Pre Shared Key", + .tls_id = PRE_SHARED_KEY_TLS_ID, + .gid = GNUTLS_EXTENSION_PRE_SHARED_KEY, + .client_parse_point = GNUTLS_EXT_TLS, + .server_parse_point = GNUTLS_EXT_TLS, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO, + .send_func = _gnutls_psk_send_params, + .recv_func = _gnutls_psk_recv_params +}; diff --git a/lib/ext/pre_shared_key.h b/lib/ext/pre_shared_key.h new file mode 100644 index 0000000000..f1ea62c9ce --- /dev/null +++ b/lib/ext/pre_shared_key.h @@ -0,0 +1,23 @@ +#ifndef GNUTLS_LIB_EXT_PRE_SHARED_KEY_H +#define GNUTLS_LIB_EXT_PRE_SHARED_KEY_H + +#include "auth/psk.h" +#include +#include "tls13/session_ticket.h" + +#define PRE_SHARED_KEY_TLS_ID 41 + +extern const hello_ext_entry_st ext_mod_pre_shared_key; + +inline static +unsigned _gnutls_have_psk_credentials(const gnutls_psk_client_credentials_t cred, gnutls_session_t session) +{ + if ((cred->get_function || cred->username.data) && session->internals.priorities->have_psk) + return 1; + else + return 0; +} + +int _gnutls_generate_early_secrets_for_psk(gnutls_session_t session); + +#endif /* GNUTLS_LIB_EXT_PRE_SHARED_KEY_H */ diff --git a/lib/ext/psk_ke_modes.c b/lib/ext/psk_ke_modes.c new file mode 100644 index 0000000000..b3d979cdf8 --- /dev/null +++ b/lib/ext/psk_ke_modes.c @@ -0,0 +1,205 @@ +/* + * Copyright (C) 2017 Free Software Foundation, Inc. + * + * Author: Ander Juaristi + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "ext/psk_ke_modes.h" +#include "ext/pre_shared_key.h" +#include + +#define PSK_KE 0 +#define PSK_DHE_KE 1 + +static int +psk_ke_modes_send_params(gnutls_session_t session, + gnutls_buffer_t extdata) +{ + int ret; + const version_entry_st *vers; + uint8_t data[2]; + unsigned pos, i; + unsigned have_dhpsk = 0; + unsigned have_psk = 0; + + /* Server doesn't send psk_key_exchange_modes */ + if (session->security_parameters.entity == GNUTLS_SERVER) + return 0; + + /* If session ticket is disabled and no PSK key exchange is + * enabled, don't send the extension */ + if ((session->internals.flags & GNUTLS_NO_TICKETS) && + !session->internals.priorities->have_psk) + return 0; + + vers = _gnutls_version_max(session); + if (!vers || !vers->tls13_sem) + return 0; + + /* We send the list prioritized according to our preferences as a convention + * (used throughout the protocol), even if the protocol doesn't mandate that + * for this particular message. That way we can keep the TLS 1.2 semantics/ + * prioritization when negotiating PSK or DHE-PSK. Receiving servers would + * very likely respect our prioritization if they parse the message serially. */ + pos = 0; + for (i=0;iinternals.priorities->_kx.num_priorities;i++) { + if (session->internals.priorities->_kx.priorities[i] == GNUTLS_KX_PSK && !have_psk) { + assert(pos <= 1); + data[pos++] = PSK_KE; + session->internals.hsk_flags |= HSK_PSK_KE_MODE_PSK; + have_psk = 1; + } else if ((session->internals.priorities->_kx.priorities[i] == GNUTLS_KX_DHE_PSK || + session->internals.priorities->_kx.priorities[i] == GNUTLS_KX_ECDHE_PSK) && !have_dhpsk) { + assert(pos <= 1); + data[pos++] = PSK_DHE_KE; + session->internals.hsk_flags |= HSK_PSK_KE_MODE_DHE_PSK; + have_dhpsk = 1; + } + + if (have_psk && have_dhpsk) + break; + } + + /* For session resumption we need to send at least one */ + if (pos == 0) { + if (session->internals.flags & GNUTLS_NO_TICKETS) + return 0; + + data[pos++] = PSK_DHE_KE; + data[pos++] = PSK_KE; + session->internals.hsk_flags |= HSK_PSK_KE_MODE_DHE_PSK; + session->internals.hsk_flags |= HSK_PSK_KE_MODE_PSK; + } + + ret = _gnutls_buffer_append_data_prefix(extdata, 8, data, pos); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.hsk_flags |= HSK_PSK_KE_MODES_SENT; + + return 0; +} + +#define MAX_POS INT_MAX + +/* + * Since we only support ECDHE-authenticated PSKs, the server + * just verifies that a "psk_key_exchange_modes" extension was received, + * and that it contains the value one. + */ +static int +psk_ke_modes_recv_params(gnutls_session_t session, + const unsigned char *data, size_t len) +{ + uint8_t ke_modes_len; + const version_entry_st *vers = get_version(session); + gnutls_psk_server_credentials_t cred; + int dhpsk_pos = MAX_POS; + int psk_pos = MAX_POS; + int cli_psk_pos = MAX_POS; + int cli_dhpsk_pos = MAX_POS; + unsigned i; + + /* Client doesn't receive psk_key_exchange_modes */ + if (session->security_parameters.entity == GNUTLS_CLIENT) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + + /* we set hsk_flags to HSK_PSK_KE_MODE_INVALID on failure to ensure that + * when we parse the pre-shared key extension we detect PSK_KE_MODES as + * received. */ + if (!vers || !vers->tls13_sem) { + session->internals.hsk_flags |= HSK_PSK_KE_MODE_INVALID; + return gnutls_assert_val(0); + } + + cred = (gnutls_psk_server_credentials_t)_gnutls_get_cred(session, GNUTLS_CRD_PSK); + if (cred == NULL && (session->internals.flags & GNUTLS_NO_TICKETS)) { + session->internals.hsk_flags |= HSK_PSK_KE_MODE_INVALID; + return gnutls_assert_val(0); + } + + DECR_LEN(len, 1); + ke_modes_len = *(data++); + + for (i=0;iinternals.priorities->_kx.num_priorities;i++) { + if (session->internals.priorities->_kx.priorities[i] == GNUTLS_KX_PSK && psk_pos == MAX_POS) { + psk_pos = i; + } else if ((session->internals.priorities->_kx.priorities[i] == GNUTLS_KX_DHE_PSK || + session->internals.priorities->_kx.priorities[i] == GNUTLS_KX_ECDHE_PSK) && + dhpsk_pos == MAX_POS) { + dhpsk_pos = i; + } + + if (dhpsk_pos != MAX_POS && psk_pos != MAX_POS) + break; + } + + if (psk_pos == MAX_POS && dhpsk_pos == MAX_POS) { + if (!(session->internals.flags & GNUTLS_NO_TICKETS)) + dhpsk_pos = 0; + else if (session->internals.priorities->groups.size == 0) + return gnutls_assert_val(0); + } + + for (i=0;iinternals.priorities->server_precedence) { + if (dhpsk_pos != MAX_POS && cli_dhpsk_pos != MAX_POS && dhpsk_pos < psk_pos) + session->internals.hsk_flags |= HSK_PSK_KE_MODE_DHE_PSK; + else if (psk_pos != MAX_POS && cli_psk_pos != MAX_POS && psk_pos < dhpsk_pos) + session->internals.hsk_flags |= HSK_PSK_KE_MODE_PSK; + } else { + if (dhpsk_pos != MAX_POS && cli_dhpsk_pos != MAX_POS && cli_dhpsk_pos < cli_psk_pos) + session->internals.hsk_flags |= HSK_PSK_KE_MODE_DHE_PSK; + else if (psk_pos != MAX_POS && cli_psk_pos != MAX_POS && cli_psk_pos < cli_dhpsk_pos) + session->internals.hsk_flags |= HSK_PSK_KE_MODE_PSK; + } + + if ((session->internals.hsk_flags & HSK_PSK_KE_MODE_PSK) || + (session->internals.hsk_flags & HSK_PSK_KE_MODE_DHE_PSK)) { + + return 0; + } else { + session->internals.hsk_flags |= HSK_PSK_KE_MODE_INVALID; + return gnutls_assert_val(0); + } +} + +const hello_ext_entry_st ext_mod_psk_ke_modes = { + .name = "PSK Key Exchange Modes", + .tls_id = 45, + .gid = GNUTLS_EXTENSION_PSK_KE_MODES, + .client_parse_point = GNUTLS_EXT_TLS, + .server_parse_point = GNUTLS_EXT_TLS, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO, + .send_func = psk_ke_modes_send_params, + .recv_func = psk_ke_modes_recv_params +}; diff --git a/lib/ext/psk_ke_modes.h b/lib/ext/psk_ke_modes.h new file mode 100644 index 0000000000..56876a97d8 --- /dev/null +++ b/lib/ext/psk_ke_modes.h @@ -0,0 +1,8 @@ +#ifndef GNUTLS_LIB_EXT_PSK_KE_MODES_H +#define GNUTLS_LIB_EXT_PSK_KE_MODES_H + +#include + +extern const hello_ext_entry_st ext_mod_psk_ke_modes; + +#endif /* GNUTLS_LIB_EXT_PSK_KE_MODES_H */ diff --git a/lib/ext/record_size_limit.c b/lib/ext/record_size_limit.c new file mode 100644 index 0000000000..9398b18882 --- /dev/null +++ b/lib/ext/record_size_limit.c @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* This file contains the code for the Record Size Limit TLS extension. + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "num.h" +#include +#include + +static int _gnutls_record_size_limit_recv_params(gnutls_session_t session, + const uint8_t * data, + size_t data_size); +static int _gnutls_record_size_limit_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata); + +const hello_ext_entry_st ext_mod_record_size_limit = { + .name = "Record Size Limit", + .tls_id = 28, + .gid = GNUTLS_EXTENSION_RECORD_SIZE_LIMIT, + .client_parse_point = GNUTLS_EXT_MANDATORY, + .server_parse_point = GNUTLS_EXT_MANDATORY, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_EE | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, + .recv_func = _gnutls_record_size_limit_recv_params, + .send_func = _gnutls_record_size_limit_send_params +}; + +static int +_gnutls_record_size_limit_recv_params(gnutls_session_t session, + const uint8_t * data, size_t data_size) +{ + ssize_t new_size; + const version_entry_st *vers; + + DECR_LEN(data_size, 2); + if (data_size != 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + new_size = _gnutls_read_uint16(data); + + /* protocol error */ + if (new_size < 64) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + session->internals.hsk_flags |= HSK_RECORD_SIZE_LIMIT_RECEIVED; + + /* we do not want to accept sizes outside of our supported range */ + if (new_size < + (session->internals.allow_small_records ? + MIN_RECORD_SIZE_SMALL : MIN_RECORD_SIZE)) { + /* for server, reject it by omitting the extension in the reply */ + if (session->security_parameters.entity == GNUTLS_SERVER) { + _gnutls_handshake_log("EXT[%p]: client requested too small record_size_limit %u; ignoring\n", + session, (unsigned)new_size); + return gnutls_assert_val(0); + } else { + _gnutls_handshake_log("EXT[%p]: server requested too small record_size_limit %u; closing the connection\n", + session, (unsigned)new_size); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } + } + + session->internals.hsk_flags |= HSK_RECORD_SIZE_LIMIT_NEGOTIATED; + + /* client uses the reception of this extension as an + * indication of the request was accepted by the server */ + if (session->security_parameters.entity == GNUTLS_CLIENT) + session->security_parameters.max_record_recv_size = + session->security_parameters.max_user_record_recv_size; + + _gnutls_handshake_log("EXT[%p]: record_size_limit %u negotiated\n", + session, (unsigned)new_size); + + /* subtract 1 octet for content type */ + vers = get_version(session); + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + session->security_parameters.max_record_send_size = + MIN(new_size - vers->tls13_sem, + session->security_parameters.max_user_record_send_size); + + return 0; +} + +/* returns data_size or a negative number on failure + */ +static int +_gnutls_record_size_limit_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata) +{ + int ret; + uint16_t send_size; + + assert(session->security_parameters.max_user_record_recv_size >= 64 && + session->security_parameters.max_user_record_recv_size <= + DEFAULT_MAX_RECORD_SIZE); + + send_size = session->security_parameters.max_user_record_recv_size; + + if (session->security_parameters.entity == GNUTLS_SERVER) { + const version_entry_st *vers; + + /* if we had received the extension and rejected, don't send it */ + if (session->internals.hsk_flags & HSK_RECORD_SIZE_LIMIT_RECEIVED && + !(session->internals.hsk_flags & HSK_RECORD_SIZE_LIMIT_NEGOTIATED)) + return gnutls_assert_val(0); + + /* add 1 octet for content type */ + vers = get_version(session); + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + session->security_parameters.max_record_recv_size = + send_size; + + send_size += vers->tls13_sem; + } else { + const version_entry_st *vers; + + /* add 1 octet for content type */ + vers = _gnutls_version_max(session); + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + send_size += vers->tls13_sem; + } + + ret = _gnutls_buffer_append_prefix(extdata, 16, send_size); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.hsk_flags |= HSK_RECORD_SIZE_LIMIT_SENT; + + return 2; +} diff --git a/lib/ext/record_size_limit.h b/lib/ext/record_size_limit.h new file mode 100644 index 0000000000..da7cade58d --- /dev/null +++ b/lib/ext/record_size_limit.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_EXT_RECORD_SIZE_LIMIT_H +#define GNUTLS_LIB_EXT_RECORD_SIZE_LIMIT_H + +#include + +extern const hello_ext_entry_st ext_mod_record_size_limit; + +#endif /* GNUTLS_LIB_EXT_RECORD_SIZE_LIMIT_H */ diff --git a/lib/ext/safe_renegotiation.c b/lib/ext/safe_renegotiation.c index d2579f3422..0b3d797bbd 100644 --- a/lib/ext/safe_renegotiation.c +++ b/lib/ext/safe_renegotiation.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -29,18 +29,22 @@ static int _gnutls_sr_recv_params(gnutls_session_t state, const uint8_t * data, size_t data_size); static int _gnutls_sr_send_params(gnutls_session_t state, gnutls_buffer_st *); -static void _gnutls_sr_deinit_data(extension_priv_data_t priv); +static void _gnutls_sr_deinit_data(gnutls_ext_priv_data_t priv); -const extension_entry_st ext_mod_sr = { +const hello_ext_entry_st ext_mod_sr = { .name = "Safe Renegotiation", - .type = GNUTLS_EXTENSION_SAFE_RENEGOTIATION, - .parse_type = GNUTLS_EXT_MANDATORY, - + .tls_id = 65281, + .gid = GNUTLS_EXTENSION_SAFE_RENEGOTIATION, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, + .client_parse_point = GNUTLS_EXT_MANDATORY, + .server_parse_point = GNUTLS_EXT_MANDATORY, .recv_func = _gnutls_sr_recv_params, .send_func = _gnutls_sr_send_params, .pack_func = NULL, .unpack_func = NULL, .deinit_func = _gnutls_sr_deinit_data, + .cannot_be_overriden = 1 }; int @@ -49,13 +53,14 @@ _gnutls_ext_sr_finished(gnutls_session_t session, void *vdata, { int ret; sr_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; - if (session->internals.priorities.sr == SR_DISABLED) { + if (session->internals.priorities->sr == SR_DISABLED || + session->internals.priorities->no_extensions) { return 0; } - ret = _gnutls_ext_get_session_data(session, + ret = _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, &epriv); if (ret < 0) { @@ -93,14 +98,14 @@ int _gnutls_ext_sr_verify(gnutls_session_t session) { int ret; sr_ext_st *priv = NULL; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; - if (session->internals.priorities.sr == SR_DISABLED) { + if (session->internals.priorities->sr == SR_DISABLED) { gnutls_assert(); return 0; } - ret = _gnutls_ext_get_session_data(session, + ret = _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, &epriv); if (ret >= 0) @@ -162,7 +167,7 @@ int _gnutls_ext_sr_verify(gnutls_session_t session) /* Clients can't tell if it's an initial negotiation */ if (session->internals.initial_negotiation_completed) { - if (session->internals.priorities.sr < SR_PARTIAL) { + if (session->internals.priorities->sr < SR_PARTIAL) { _gnutls_handshake_log ("HSK[%p]: Allowing unsafe (re)negotiation\n", session); @@ -175,7 +180,7 @@ int _gnutls_ext_sr_verify(gnutls_session_t session) GNUTLS_E_UNSAFE_RENEGOTIATION_DENIED; } } else { - if (session->internals.priorities.sr < SR_SAFE) { + if (session->internals.priorities->sr < SR_SAFE) { _gnutls_handshake_log ("HSK[%p]: Allowing unsafe initial negotiation\n", session); @@ -198,9 +203,9 @@ int _gnutls_ext_sr_recv_cs(gnutls_session_t session) { int ret, set = 0; sr_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; - ret = _gnutls_ext_get_session_data(session, + ret = _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, &epriv); if (ret < 0) { @@ -219,10 +224,10 @@ int _gnutls_ext_sr_recv_cs(gnutls_session_t session) priv->safe_renegotiation_received = 1; priv->connection_using_safe_renegotiation = 1; - _gnutls_extension_list_add(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION); + _gnutls_hello_ext_save_sr(session); if (set != 0) - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, epriv); @@ -233,9 +238,9 @@ int _gnutls_ext_sr_send_cs(gnutls_session_t session) { int ret, set = 0; sr_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; - ret = _gnutls_ext_get_session_data(session, + ret = _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, &epriv); if (ret < 0) { @@ -252,7 +257,7 @@ int _gnutls_ext_sr_send_cs(gnutls_session_t session) } if (set != 0) - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, epriv); @@ -261,12 +266,11 @@ int _gnutls_ext_sr_send_cs(gnutls_session_t session) static int _gnutls_sr_recv_params(gnutls_session_t session, - const uint8_t * data, size_t _data_size) + const uint8_t * data, size_t data_size) { unsigned int len; - ssize_t data_size = _data_size; sr_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; int set = 0, ret; if (data_size == 0) @@ -276,12 +280,12 @@ _gnutls_sr_recv_params(gnutls_session_t session, DECR_LEN(data_size, len + 1 /* count the first byte and payload */ ); - if (session->internals.priorities.sr == SR_DISABLED) { + if (session->internals.priorities->sr == SR_DISABLED) { gnutls_assert(); return 0; } - ret = _gnutls_ext_get_session_data(session, + ret = _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, &epriv); if (ret < 0 @@ -300,7 +304,7 @@ _gnutls_sr_recv_params(gnutls_session_t session, } epriv = priv; - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, epriv); } else { @@ -346,15 +350,15 @@ _gnutls_sr_send_params(gnutls_session_t session, */ sr_ext_st *priv; int ret, set = 0, len; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; size_t init_length = extdata->length; - if (session->internals.priorities.sr == SR_DISABLED) { + if (session->internals.priorities->sr == SR_DISABLED) { gnutls_assert(); return 0; } - ret = _gnutls_ext_get_session_data(session, + ret = _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, &epriv); if (ret < 0) { @@ -369,7 +373,7 @@ _gnutls_sr_send_params(gnutls_session_t session, } epriv = priv; - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, epriv); } else @@ -410,7 +414,7 @@ _gnutls_sr_send_params(gnutls_session_t session, return extdata->length - init_length; } -static void _gnutls_sr_deinit_data(extension_priv_data_t priv) +static void _gnutls_sr_deinit_data(gnutls_ext_priv_data_t priv) { gnutls_free(priv); } @@ -431,9 +435,9 @@ unsigned gnutls_safe_renegotiation_status(gnutls_session_t session) { int ret; sr_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; - ret = _gnutls_ext_get_session_data(session, + ret = _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, &epriv); if (ret < 0) { diff --git a/lib/ext/safe_renegotiation.h b/lib/ext/safe_renegotiation.h index 1838d5a08e..bc2024a9fc 100644 --- a/lib/ext/safe_renegotiation.h +++ b/lib/ext/safe_renegotiation.h @@ -16,14 +16,14 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef EXT_SAFE_RENEGOTIATION_H -#define EXT_SAFE_RENEGOTIATION_H +#ifndef GNUTLS_LIB_EXT_SAFE_RENEGOTIATION_H +#define GNUTLS_LIB_EXT_SAFE_RENEGOTIATION_H -#include +#include typedef struct { uint8_t client_verify_data[MAX_VERIFY_DATA_SIZE]; @@ -38,7 +38,7 @@ typedef struct { unsigned int connection_using_safe_renegotiation:1; } sr_ext_st; -extern const extension_entry_st ext_mod_sr; +extern const hello_ext_entry_st ext_mod_sr; int _gnutls_ext_sr_finished(gnutls_session_t session, void *vdata, size_t vdata_size, int dir); @@ -46,4 +46,4 @@ int _gnutls_ext_sr_recv_cs(gnutls_session_t session); int _gnutls_ext_sr_verify(gnutls_session_t session); int _gnutls_ext_sr_send_cs(gnutls_session_t); -#endif /* EXT_SAFE_RENEGOTIATION_H */ +#endif /* GNUTLS_LIB_EXT_SAFE_RENEGOTIATION_H */ diff --git a/lib/ext/server_cert_type.c b/lib/ext/server_cert_type.c new file mode 100644 index 0000000000..81294961e3 --- /dev/null +++ b/lib/ext/server_cert_type.c @@ -0,0 +1,358 @@ +/* + * Copyright (C) 2016 - 2018 ARPA2 project + * + * Author: Tom Vrancken (dev@tomvrancken.nl) + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + * This file is part of the server_certificate_type extension as + * defined in RFC7250 (https://tools.ietf.org/html/rfc7250). + * + * The server_certificate_type extension in the client hello indicates + * the types of certificates the client is able to process when provided + * by the server in a subsequent certificate payload. + */ + +#include +#include +#include "ext/cert_types.h" +#include "ext/server_cert_type.h" +#include "hello_ext.h" +#include "hello_ext_lib.h" +#include "errors.h" +#include "state.h" +#include "datum.h" + + +static int _gnutls_server_cert_type_recv_params(gnutls_session_t session, + const uint8_t* data, + size_t data_size); +static int _gnutls_server_cert_type_send_params(gnutls_session_t session, + gnutls_buffer_st* data); + + +const hello_ext_entry_st ext_mod_server_cert_type = { + .name = "Server Certificate Type", + .tls_id = 20, + .gid = GNUTLS_EXTENSION_SERVER_CERT_TYPE, + .client_parse_point = GNUTLS_EXT_TLS, + .server_parse_point = GNUTLS_EXT_TLS, + .validity = GNUTLS_EXT_FLAG_TLS | + GNUTLS_EXT_FLAG_DTLS | + GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO | + GNUTLS_EXT_FLAG_EE, + .recv_func = _gnutls_server_cert_type_recv_params, + .send_func = _gnutls_server_cert_type_send_params, + .pack_func = _gnutls_hello_ext_default_pack, + .unpack_func = _gnutls_hello_ext_default_unpack, + .deinit_func = _gnutls_hello_ext_default_deinit, + .cannot_be_overriden = 1 +}; + + +static int _gnutls_server_cert_type_recv_params(gnutls_session_t session, + const uint8_t* data, + size_t data_size) +{ + int ret; + gnutls_datum_t cert_types; // Holds the received cert types + gnutls_datum_t sent_cert_types; // Holds the previously sent cert types + gnutls_certificate_type_t cert_type; + + uint8_t i, found = 0; + const uint8_t* pdata = data; + + /* Only activate this extension if we have cert credentials set + * and alternative cert types are allowed */ + if (!are_alternative_cert_types_allowed(session) || + (_gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE) == NULL)) + return 0; + + if (!IS_SERVER(session)) { // client mode + + /* Compare packet length with expected packet length. For the + * client this is a single byte. */ + if (data_size != 1) { + return + gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + } + + /* The server picked one of the offered cert types if he supports + * at least one of them. If both parties play by the rules then we + * may only receive a cert type that we offered, i.e. one that we + * support. Because the world isn't as beautiful as it may seem, + * we're going to check it nevertheless. */ + cert_type = IANA2cert_type(pdata[0]); + + // Check validity of cert type + if (cert_type == GNUTLS_CRT_UNKNOWN) { + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE); + } + + /* Get the cert types that we sent to the server (they were stored + * in IANA representation. + */ + ret = _gnutls_hello_ext_get_datum(session, + GNUTLS_EXTENSION_SERVER_CERT_TYPE, + &sent_cert_types); + if (ret < 0) { + /* This should not happen and indicate a memory corruption! + * Assertion are always on in production code so execution + * will halt here. */ + assert(false); + } + + // Check whether what we got back is actually offered by us + for (i = 0; i < sent_cert_types.size; i++) { + if (IANA2cert_type(sent_cert_types.data[i]) == cert_type) + found = 1; + } + + if (found) { + // Everything OK, now set the server certificate type + _gnutls_session_server_cert_type_set(session, cert_type); + ret = GNUTLS_E_SUCCESS; + } else { + // No valid cert type found + ret = GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; + } + + return ret; + + } else { // server mode + // Compare packet length with expected packet length. + DECR_LEN(data_size, 1); + if (data[0] != data_size) { + return + gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + } + pdata += 1; + + // Assign the contents of our data buffer to a gnutls_datum_t + cert_types.data = (uint8_t*)pdata; // Need casting to get rid of 'discards const qualifier' warning + cert_types.size = data_size; + + // Store the server certificate types in our session + _gnutls_hello_ext_set_datum(session, + GNUTLS_EXTENSION_SERVER_CERT_TYPE, + &cert_types); + + /* We receive a list of supported certificate types that the client + * is able to process when offered by the server via a subsequent + * Certificate message. This list is sorted by order of preference. + * We now check in this order of preference whether we support any + * of these certificate types. + */ + for (i = 0; i < cert_types.size; i++) { + // Convert to internal representation + cert_type = IANA2cert_type(cert_types.data[i]); + + // If we have an invalid cert id then continue to the next + if (cert_type == GNUTLS_CRT_UNKNOWN) + continue; + + // Check for support of this cert type + if (_gnutls_session_cert_type_supported + (session, cert_type, true, GNUTLS_CTYPE_SERVER) == 0) { + found = 1; + break; + } + } + + // We found a matching ctype, we pick this one + if (found) { + _gnutls_session_server_cert_type_set(session, cert_type); + ret = GNUTLS_E_SUCCESS; + } else { + /* If no supported certificate type can be found we terminate + * with a fatal alert of type "unsupported_certificate" + * (according to specification rfc7250). + */ + ret = GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; + } + + return ret; + } +} + +static int _gnutls_server_cert_type_send_params(gnutls_session_t session, + gnutls_buffer_st* data) +{ + int ret; + uint8_t cert_type; // Holds an IANA cert type ID + uint8_t i = 0, num_cert_types = 0; + priority_st* cert_priorities; + gnutls_datum_t tmp_cert_types; // For type conversion + uint8_t cert_types[GNUTLS_CRT_MAX]; // The list with supported cert types. Inv: 0 <= cert type Id < 256 + + /* Only activate this extension if we have cert credentials set + * and alternative cert types are allowed */ + if (!are_alternative_cert_types_allowed(session) || + (_gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE) == NULL)) + return 0; + + if (!IS_SERVER(session)) { // Client mode + // For brevity + cert_priorities = + &session->internals.priorities->server_ctype; + + /* Retrieve server certificate type priorities if any. If no + * priorities are set then the default server certificate type + * initialization values apply. This default is currently set to + * X.509 in which case we don't enable this extension. + */ + if (cert_priorities->num_priorities > 0) { // Priorities are explicitly set + /* If the certificate priority is explicitly set to only + * X.509 (default) then, according to spec we don't send + * this extension. We check this here to avoid further work in + * this routine. We also check it below after pruning supported + * types. + */ + if (cert_priorities->num_priorities == 1 && + cert_priorities->priorities[0] == DEFAULT_CERT_TYPE) { + _gnutls_handshake_log + ("EXT[%p]: Server certificate type was set to default cert type (%s). " + "We therefore do not send this extension.\n", + session, + gnutls_certificate_type_get_name(DEFAULT_CERT_TYPE)); + + // Explicitly set but default ctype, so don't send anything + return 0; + } + + /* We are only allowed to send certificate types that we support. + * Therefore we check this here and prune our original list. + * This check might seem redundant now because we don't check for + * credentials (they are not needed for a client) and only check the + * priorities over which we already iterate. In the future, + * additional checks might be necessary and they can be easily + * added in the ..type_supported() routine without modifying the + * structure of the code here. + */ + for (i = 0; i < cert_priorities->num_priorities; i++) { + if (_gnutls_session_cert_type_supported + (session, cert_priorities->priorities[i], + false, GNUTLS_CTYPE_SERVER) == 0) { + /* Check whether we are allowed to store another cert type + * in our buffer. In other words, prevent a possible buffer + * overflow. This situation can occur when a user sets + * duplicate cert types in the priority strings. */ + if (num_cert_types >= GNUTLS_CRT_MAX) + return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER); + + // Convert to IANA representation + ret = cert_type2IANA(cert_priorities->priorities[i]); + + if (ret < 0) + return gnutls_assert_val(ret); + + cert_type = ret; // For readability + + // Add this cert type to our list with supported types + cert_types[num_cert_types] = cert_type; + num_cert_types++; + + _gnutls_handshake_log + ("EXT[%p]: Server certificate type %s (%d) was queued.\n", + session, + gnutls_certificate_type_get_name(cert_priorities->priorities[i]), + cert_type); + } + } + + /* Check whether there are any supported certificate types left + * after the previous pruning step. If not, we do not send this + * extension. Also, if the only supported type is the default type + * we do not send this extension (according to RFC7250). + */ + if (num_cert_types == 0) { // For now, this should not occur since we only check priorities while pruning. + _gnutls_handshake_log + ("EXT[%p]: Server certificate types were set but none of them is supported. " + "We do not send this extension.\n", + session); + + return 0; + } else if (num_cert_types == 1 && + IANA2cert_type(cert_types[0]) == DEFAULT_CERT_TYPE) { + _gnutls_handshake_log + ("EXT[%p]: The only supported server certificate type is (%s) which is the default. " + "We therefore do not send this extension.\n", + session, + gnutls_certificate_type_get_name(DEFAULT_CERT_TYPE)); + + return 0; + } + + /* We have data to send and store a copy internally. We convert + * our list with supported cert types to a datum_t in order to + * be able to make the ..._set_datum call. + */ + tmp_cert_types.data = cert_types; + tmp_cert_types.size = num_cert_types; + + _gnutls_hello_ext_set_datum(session, + GNUTLS_EXTENSION_SERVER_CERT_TYPE, + &tmp_cert_types); + + /* Serialize the certificate types into a sequence of octets + * uint8: length of sequence of cert types (1 octet) + * uint8: cert types (0 <= #octets <= 255) + */ + ret = _gnutls_buffer_append_data_prefix(data, 8, + cert_types, + num_cert_types); + + // Check for errors and cleanup in case of error + if (ret < 0) { + return gnutls_assert_val(ret); + } else { + // Number of bytes we are sending + return num_cert_types + 1; + } + } + } else { // Server mode + // Retrieve negotiated server certificate type and send it + ret = cert_type2IANA(get_certificate_type( + session, GNUTLS_CTYPE_SERVER)); + + if (ret < 0) + return gnutls_assert_val(ret); + + cert_type = ret; // For readability + + ret = gnutls_buffer_append_data(data, &cert_type, 1); + + if (ret < 0) + return gnutls_assert_val(ret); + + return 1; // sent one byte + } + + // In all other cases don't enable this extension + return 0; +} + + +/** Extension interface **/ + +/* The interface is defined in state.c: + * Public: + * - gnutls_certificate_type_get2 + * + * Private: + * - _gnutls_session_server_cert_type_set + */ diff --git a/lib/ext/server_cert_type.h b/lib/ext/server_cert_type.h new file mode 100644 index 0000000000..3c15b0b7b8 --- /dev/null +++ b/lib/ext/server_cert_type.h @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2016 - 2018 ARPA2 project + * + * Author: Tom Vrancken (dev@tomvrancken.nl) + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + * This file is part of the server_certificate_type extension as + * defined in RFC7250 (https://tools.ietf.org/html/rfc7250). + * + * The server_certificate_type extension in the client hello indicates + * the certificate types the client is able to process from the server + * in order to authenticate the server. + */ + +#ifndef GNUTLS_LIB_EXT_SERVER_CERT_TYPE_H +#define GNUTLS_LIB_EXT_SERVER_CERT_TYPE_H + +#include + +extern const hello_ext_entry_st ext_mod_server_cert_type; + +#endif /* GNUTLS_LIB_EXT_SERVER_CERT_TYPE_H */ diff --git a/lib/ext/server_name.c b/lib/ext/server_name.c index 93234f1c10..d52c8d074d 100644 --- a/lib/ext/server_name.c +++ b/lib/ext/server_name.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2002-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -26,6 +27,7 @@ #include "num.h" #include "str.h" #include +#include "hello_ext_lib.h" static int _gnutls_server_name_recv_params(gnutls_session_t session, const uint8_t * data, @@ -33,27 +35,25 @@ static int _gnutls_server_name_recv_params(gnutls_session_t session, static int _gnutls_server_name_send_params(gnutls_session_t session, gnutls_buffer_st * extdata); -static int _gnutls_server_name_unpack(gnutls_buffer_st * ps, - extension_priv_data_t * _priv); -static int _gnutls_server_name_pack(extension_priv_data_t _priv, - gnutls_buffer_st * ps); -static void _gnutls_server_name_deinit_data(extension_priv_data_t priv); - int _gnutls_server_name_set_raw(gnutls_session_t session, - gnutls_server_name_type_t type, - const void *name, size_t name_length); + gnutls_server_name_type_t type, + const void *name, size_t name_length); -const extension_entry_st ext_mod_server_name = { +const hello_ext_entry_st ext_mod_server_name = { .name = "Server Name Indication", - .type = GNUTLS_EXTENSION_SERVER_NAME, - .parse_type = GNUTLS_EXT_APPLICATION, - + .tls_id = 0, + .gid = GNUTLS_EXTENSION_SERVER_NAME, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_EE | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, + .client_parse_point = GNUTLS_EXT_MANDATORY, + .server_parse_point = GNUTLS_EXT_MANDATORY, .recv_func = _gnutls_server_name_recv_params, .send_func = _gnutls_server_name_send_params, - .pack_func = _gnutls_server_name_pack, - .unpack_func = _gnutls_server_name_unpack, - .deinit_func = _gnutls_server_name_deinit_data, + .pack_func = _gnutls_hello_ext_default_pack, + .unpack_func = _gnutls_hello_ext_default_unpack, + .deinit_func = _gnutls_hello_ext_default_deinit, + .cannot_be_overriden = 1 }; /* @@ -67,104 +67,63 @@ const extension_entry_st ext_mod_server_name = { */ static int _gnutls_server_name_recv_params(gnutls_session_t session, - const uint8_t * data, size_t _data_size) + const uint8_t * data, size_t data_size) { - int i, j; const unsigned char *p; uint16_t len, type; - ssize_t data_size = _data_size; - int server_names = 0; - server_name_ext_st *priv; - extension_priv_data_t epriv; + gnutls_datum_t name; if (session->security_parameters.entity == GNUTLS_SERVER) { - DECR_LENGTH_RET(data_size, 2, 0); + DECR_LENGTH_RET(data_size, 2, GNUTLS_E_UNEXPECTED_PACKET_LENGTH); len = _gnutls_read_uint16(data); + if (len == 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); if (len != data_size) { - /* This is unexpected packet length, but - * just ignore it, for now. - */ gnutls_assert(); - return 0; + return GNUTLS_E_UNEXPECTED_PACKET_LENGTH; } p = data + 2; - /* Count all server_names in the packet. */ while (data_size > 0) { - DECR_LENGTH_RET(data_size, 1, 0); + DECR_LEN(data_size, 1); + type = *p; p++; DECR_LEN(data_size, 2); len = _gnutls_read_uint16(p); p += 2; - if (len > 0) { - DECR_LENGTH_RET(data_size, len, 0); - server_names++; - p += len; - } else + if (len == 0) { _gnutls_handshake_log - ("HSK[%p]: Received (0) size server name (under attack?)\n", + ("HSK[%p]: Received server name size of zero\n", session); + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + } - } - - /* we cannot accept more server names. - */ - if (server_names > MAX_SERVER_NAME_EXTENSIONS) { - _gnutls_handshake_log - ("HSK[%p]: Too many server names received (under attack?)\n", - session); - server_names = MAX_SERVER_NAME_EXTENSIONS; - } - - if (server_names == 0) - return 0; /* no names found */ - - priv = gnutls_calloc(1, sizeof(*priv)); - if (priv == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } + DECR_LEN(data_size, len); - p = data + 2; - for (j = i = 0; i < server_names; i++) { - type = *p; - p++; + if (type == 0) { /* NAME_DNS */ + if (!_gnutls_dnsname_is_valid((char*)p, len)) { + _gnutls_handshake_log + ("HSK[%p]: Server name is not acceptable: '%.*s'\n", + session, (int) len, p); + return gnutls_assert_val(GNUTLS_E_RECEIVED_DISALLOWED_NAME); + } - len = _gnutls_read_uint16(p); - p += 2; + name.data = (void*)p; + name.size = len; - switch (type) { - case 0: /* NAME_DNS */ - if (len < MAX_SERVER_NAME_SIZE) { - memcpy(priv->server_names[j].name, - p, len); - priv->server_names[j].name[len] = 0; - priv->server_names[j].name_length = - strlen((char*)priv->server_names[j].name); - if (priv->server_names[j].name_length == len) { - /* valid ascii with no embedded NULL */ - priv->server_names[j].type = - GNUTLS_NAME_DNS; - j++; - } - break; - } + _gnutls_hello_ext_unset_priv(session, GNUTLS_EXTENSION_SERVER_NAME); + return _gnutls_hello_ext_set_datum(session, + GNUTLS_EXTENSION_SERVER_NAME, + &name); } - - /* move to next record */ p += len; - } - priv->server_names_size = j; + } - epriv = priv; - _gnutls_ext_set_session_data(session, - GNUTLS_EXTENSION_SERVER_NAME, - epriv); } @@ -177,39 +136,24 @@ static int _gnutls_server_name_send_params(gnutls_session_t session, gnutls_buffer_st * extdata) { - uint16_t len; - unsigned i; int total_size = 0, ret; - server_name_ext_st *priv; - extension_priv_data_t epriv; + gnutls_datum_t name; ret = - _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_SERVER_NAME, - &epriv); + _gnutls_hello_ext_get_datum(session, GNUTLS_EXTENSION_SERVER_NAME, + &name); if (ret < 0) return 0; /* this function sends the client extension data (dnsname) */ if (session->security_parameters.entity == GNUTLS_CLIENT) { - priv = epriv; - - if (priv->server_names_size == 0) + if (name.size == 0) return 0; - /* uint16_t + /* uint8_t + uint16_t + size */ - total_size = 2; - for (i = 0; i < priv->server_names_size; i++) { - /* count the total size - */ - len = priv->server_names[i].name_length; - - /* uint8_t + uint16_t + size - */ - total_size += 1 + 2 + len; - } + total_size = 2 + 1 + 2 + name.size; /* UINT16: write total size of all names */ @@ -219,39 +163,25 @@ _gnutls_server_name_send_params(gnutls_session_t session, if (ret < 0) return gnutls_assert_val(ret); - for (i = 0; i < priv->server_names_size; i++) { - - switch (priv->server_names[i].type) { - case GNUTLS_NAME_DNS: - len = priv->server_names[i].name_length; - if (len == 0) - break; - - /* UINT8: type of this extension - * UINT16: size of the first name - * LEN: the actual server name. - */ - ret = - _gnutls_buffer_append_prefix(extdata, - 8, 0); - if (ret < 0) - return gnutls_assert_val(ret); - - _gnutls_debug_log("HSK[%p]: sent server name: '%s'\n", session, priv->server_names[i].name); - - ret = - _gnutls_buffer_append_data_prefix - (extdata, 16, - priv->server_names[i].name, len); - if (ret < 0) - return gnutls_assert_val(ret); - - break; - default: - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - } + /* UINT8: type of this extension + * UINT16: size of the first name + * LEN: the actual server name. + */ + ret = + _gnutls_buffer_append_prefix(extdata, 8, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + _gnutls_debug_log("HSK[%p]: sent server name: '%.*s'\n", session, name.size, name.data); + + ret = + _gnutls_buffer_append_data_prefix + (extdata, 16, + name.data, name.size); + if (ret < 0) + return gnutls_assert_val(ret); + } else { + return 0; } return total_size; @@ -277,7 +207,7 @@ _gnutls_server_name_send_params(gnutls_session_t session, * GNUTLS_E_SHORT_MEMORY_BUFFER is returned, and @data_length will * hold the required size. * - * @index is used to retrieve more than one server names (if sent by + * @indx is used to retrieve more than one server names (if sent by * the client). The first server name has an index of 0, the second 1 * and so on. If no name with the given index exists * GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned. @@ -292,112 +222,69 @@ gnutls_server_name_get(gnutls_session_t session, void *data, unsigned int *type, unsigned int indx) { char *_data = data; - server_name_ext_st *priv; + gnutls_datum_t name; int ret; - gnutls_datum_t idn_name = {NULL,0}; - extension_priv_data_t epriv; if (session->security_parameters.entity == GNUTLS_CLIENT) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } + if (indx != 0) + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + ret = - _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_SERVER_NAME, - &epriv); + _gnutls_hello_ext_get_datum(session, GNUTLS_EXTENSION_SERVER_NAME, &name); if (ret < 0) { gnutls_assert(); return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; } - priv = epriv; - - if (indx + 1 > priv->server_names_size) { + if (name.size == 0) { return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; } - *type = priv->server_names[indx].type; - - ret = gnutls_idna_map((char*)priv->server_names[indx].name, priv->server_names[indx].name_length, &idn_name, 0); - if (ret < 0) { - _gnutls_debug_log("unable to convert name %s to IDNA2003 format\n", (char*)priv->server_names[indx].name); - return GNUTLS_E_IDNA_ERROR; - } + *type = GNUTLS_NAME_DNS; - if (*data_length > /* greater since we need one extra byte for the null */ - idn_name.size) { - *data_length = idn_name.size; - memcpy(data, idn_name.data, *data_length); + if (*data_length > name.size) { /* greater since we need one extra byte for the null */ + *data_length = name.size; + memcpy(data, name.data, *data_length); - if (*type == GNUTLS_NAME_DNS) /* null terminate */ - _data[(*data_length)] = 0; + /* null terminate */ + _data[(*data_length)] = 0; } else { - *data_length = idn_name.size + 1; + *data_length = name.size + 1; ret = GNUTLS_E_SHORT_MEMORY_BUFFER; goto cleanup; } ret = 0; cleanup: - gnutls_free(idn_name.data); return ret; } /* This does not do any conversion not perform any check */ int _gnutls_server_name_set_raw(gnutls_session_t session, - gnutls_server_name_type_t type, - const void *name, size_t name_length) + gnutls_server_name_type_t type, + const void *name, size_t name_length) { - int server_names, ret; - server_name_ext_st *priv; - extension_priv_data_t epriv; - int set = 0; - - if (name_length > MAX_SERVER_NAME_SIZE) { - return GNUTLS_E_SHORT_MEMORY_BUFFER; - } + int ret; + gnutls_datum_t dname; - ret = - _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_SERVER_NAME, - &epriv); - if (ret < 0) { - set = 1; + if (name_length >= MAX_SERVER_NAME_SIZE) { + return GNUTLS_E_INVALID_REQUEST; } - if (set != 0) { - priv = gnutls_calloc(1, sizeof(*priv)); - if (priv == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - epriv = priv; - } else - priv = epriv; - - server_names = priv->server_names_size + 1; + _gnutls_hello_ext_unset_priv(session, GNUTLS_EXTENSION_SERVER_NAME); - if (server_names > MAX_SERVER_NAME_EXTENSIONS) - server_names = MAX_SERVER_NAME_EXTENSIONS; + dname.data = (void*)name; + dname.size = name_length; - priv->server_names[server_names - 1].type = type; - - if (name_length > 0) { - memcpy(priv->server_names[server_names - 1].name, name, - name_length); - priv->server_names[server_names - 1].name[name_length] = 0; - } - priv->server_names[server_names - 1].name_length = name_length; - - priv->server_names_size = server_names; - - if (set != 0) - _gnutls_ext_set_session_data(session, - GNUTLS_EXTENSION_SERVER_NAME, - epriv); + ret = _gnutls_hello_ext_set_datum(session, GNUTLS_EXTENSION_SERVER_NAME, &dname); + if (ret < 0) + return gnutls_assert_val(ret); return 0; } @@ -407,7 +294,7 @@ _gnutls_server_name_set_raw(gnutls_session_t session, * @session: is a #gnutls_session_t type. * @type: specifies the indicator type * @name: is a string that contains the server name. - * @name_length: holds the length of name + * @name_length: holds the length of name excluding the terminating null byte * * This function is to be used by clients that want to inform (via a * TLS extension mechanism) the server of the name they connected to. @@ -439,13 +326,13 @@ gnutls_server_name_set(gnutls_session_t session, } if (name_length == 0) { /* unset extension */ - _gnutls_ext_unset_session_data(session, GNUTLS_EXTENSION_SERVER_NAME); + _gnutls_hello_ext_unset_priv(session, GNUTLS_EXTENSION_SERVER_NAME); return 0; } ret = gnutls_idna_map(name, name_length, &idn_name, 0); if (ret < 0) { - _gnutls_debug_log("unable to convert name %s to IDNA2003 format\n", (char*)name); + _gnutls_debug_log("unable to convert name %s to IDNA2008 format\n", (char*)name); return ret; } @@ -458,62 +345,41 @@ gnutls_server_name_set(gnutls_session_t session, return ret; } -static void _gnutls_server_name_deinit_data(extension_priv_data_t priv) -{ - gnutls_free(priv); -} - -static int -_gnutls_server_name_pack(extension_priv_data_t epriv, - gnutls_buffer_st * ps) +unsigned _gnutls_server_name_matches_resumed(gnutls_session_t session) { - server_name_ext_st *priv = epriv; - unsigned int i; + gnutls_datum_t name1, name2; int ret; - BUFFER_APPEND_NUM(ps, priv->server_names_size); - for (i = 0; i < priv->server_names_size; i++) { - BUFFER_APPEND_NUM(ps, priv->server_names[i].type); - BUFFER_APPEND_PFX4(ps, priv->server_names[i].name, - priv->server_names[i].name_length); + ret = + _gnutls_hello_ext_get_datum(session, + GNUTLS_EXTENSION_SERVER_NAME, + &name1); + if (ret < 0) { /* no server name in this session */ + name1.data = NULL; + name1.size = 0; } - return 0; -} -static int -_gnutls_server_name_unpack(gnutls_buffer_st * ps, - extension_priv_data_t * _priv) -{ - server_name_ext_st *priv; - unsigned int i; - int ret; - extension_priv_data_t epriv; - - priv = gnutls_calloc(1, sizeof(*priv)); - if (priv == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; + ret = + _gnutls_hello_ext_get_resumed_datum(session, + GNUTLS_EXTENSION_SERVER_NAME, + &name2); + if (ret < 0) { /* no server name in this session */ + name2.data = NULL; + name2.size = 0; } - BUFFER_POP_NUM(ps, priv->server_names_size); - for (i = 0; i < priv->server_names_size; i++) { - BUFFER_POP_NUM(ps, priv->server_names[i].type); - BUFFER_POP_NUM(ps, priv->server_names[i].name_length); - if (priv->server_names[i].name_length > - sizeof(priv->server_names[i].name)) { - gnutls_assert(); - return GNUTLS_E_PARSING_ERROR; - } - BUFFER_POP(ps, priv->server_names[i].name, - priv->server_names[i].name_length); + if (name1.data == NULL || name2.data == NULL) { + if (name1.data == name2.data) + return 1; + else + return 0; } - epriv = priv; - *_priv = epriv; + if (name1.size != name2.size) + return 0; - return 0; + if (memcmp(name1.data, name2.data, name1.size) != 0) + return 0; - error: - gnutls_free(priv); - return ret; + return 1; } diff --git a/lib/ext/server_name.h b/lib/ext/server_name.h index a079a62066..b5cdd0ea53 100644 --- a/lib/ext/server_name.h +++ b/lib/ext/server_name.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2000-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,28 +17,17 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef EXT_SERVER_NAME_H -#define EXT_SERVER_NAME_H -#include +#ifndef GNUTLS_LIB_EXT_SERVER_NAME_H +#define GNUTLS_LIB_EXT_SERVER_NAME_H -typedef struct { - uint8_t name[MAX_SERVER_NAME_SIZE+1]; - unsigned name_length; - gnutls_server_name_type_t type; -} server_name_st; +#include -#define MAX_SERVER_NAME_EXTENSIONS 3 +extern const hello_ext_entry_st ext_mod_server_name; -typedef struct { - server_name_st server_names[MAX_SERVER_NAME_EXTENSIONS]; - /* limit server_name extensions */ - unsigned server_names_size; -} server_name_ext_st; +unsigned _gnutls_server_name_matches_resumed(gnutls_session_t); -extern const extension_entry_st ext_mod_server_name; - -#endif +#endif /* GNUTLS_LIB_EXT_SERVER_NAME_H */ diff --git a/lib/ext/session_ticket.c b/lib/ext/session_ticket.c index 9747177b54..8d4595821a 100644 --- a/lib/ext/session_ticket.c +++ b/lib/ext/session_ticket.c @@ -1,7 +1,7 @@ /* - * Copyright (C) 2009-2016 Free Software Foundation, Inc. + * Copyright (C) 2009-2018 Free Software Foundation, Inc. * - * Author: Daiki Ueno + * Author: Daiki Ueno, Ander Juaristi * * This file is part of GnuTLS. * @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -31,68 +31,125 @@ #include #include #include -#include +#include #include #include +#include "stek.h" #include "db.h" -#ifdef ENABLE_SESSION_TICKETS - -#define KEY_NAME_SIZE 16 -#define CIPHER_KEY_SIZE 32 -#define CIPHER GNUTLS_CIPHER_AES_256_CBC -#define IV_SIZE 16 -#define BLOCK_SIZE 16 - -#define MAC_SECRET_SIZE 16 -#define MAC_ALGO GNUTLS_MAC_SHA1 -#define MAC_SIZE 20 /* HMAC-SHA1 */ - static int session_ticket_recv_params(gnutls_session_t session, const uint8_t * data, size_t data_size); static int session_ticket_send_params(gnutls_session_t session, gnutls_buffer_st * extdata); static int session_ticket_unpack(gnutls_buffer_st * ps, - extension_priv_data_t * _priv); -static int session_ticket_pack(extension_priv_data_t _priv, + gnutls_ext_priv_data_t * _priv); +static int session_ticket_pack(gnutls_ext_priv_data_t _priv, gnutls_buffer_st * ps); -static void session_ticket_deinit_data(extension_priv_data_t priv); +static void session_ticket_deinit_data(gnutls_ext_priv_data_t priv); -const extension_entry_st ext_mod_session_ticket = { +const hello_ext_entry_st ext_mod_session_ticket = { .name = "Session Ticket", - .type = GNUTLS_EXTENSION_SESSION_TICKET, - .parse_type = GNUTLS_EXT_TLS, - + .tls_id = 35, + .gid = GNUTLS_EXTENSION_SESSION_TICKET, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, + /* This extension must be parsed on session resumption as well; see + * https://gitlab.com/gnutls/gnutls/issues/841 */ + .client_parse_point = GNUTLS_EXT_MANDATORY, + /* on server side we want this parsed after normal handshake resumption + * actions are complete */ + .server_parse_point = GNUTLS_EXT_TLS, .recv_func = session_ticket_recv_params, .send_func = session_ticket_send_params, .pack_func = session_ticket_pack, .unpack_func = session_ticket_unpack, .deinit_func = session_ticket_deinit_data, + .cannot_be_overriden = 1 }; -#define SESSION_KEY_SIZE (KEY_NAME_SIZE+CIPHER_KEY_SIZE+MAC_SECRET_SIZE) -#define NAME_POS (0) -#define KEY_POS (KEY_NAME_SIZE) -#define MAC_SECRET_POS (KEY_NAME_SIZE+CIPHER_KEY_SIZE) - typedef struct { - int session_ticket_enable; - int session_ticket_renew; - uint8_t *session_ticket; int session_ticket_len; - - uint8_t key[SESSION_KEY_SIZE]; } session_ticket_ext_st; -struct ticket_st { - uint8_t key_name[KEY_NAME_SIZE]; - uint8_t IV[IV_SIZE]; - uint8_t *encrypted_state; - uint16_t encrypted_state_len; - uint8_t mac[MAC_SIZE]; -}; +static void +deinit_ticket(struct ticket_st *ticket) +{ + free(ticket->encrypted_state); +} + +static int +unpack_ticket(const gnutls_datum_t *ticket_data, struct ticket_st *ticket) +{ + const uint8_t * data = ticket_data->data; + size_t data_size = ticket_data->size; + const uint8_t *encrypted_state; + + /* Format: + * Key name + * IV + * data length + * encrypted data + * MAC + */ + DECR_LEN(data_size, TICKET_KEY_NAME_SIZE); + memcpy(ticket->key_name, data, TICKET_KEY_NAME_SIZE); + data += TICKET_KEY_NAME_SIZE; + + DECR_LEN(data_size, TICKET_IV_SIZE); + memcpy(ticket->IV, data, TICKET_IV_SIZE); + data += TICKET_IV_SIZE; + + DECR_LEN(data_size, 2); + ticket->encrypted_state_len = _gnutls_read_uint16(data); + data += 2; + + encrypted_state = data; + + DECR_LEN(data_size, ticket->encrypted_state_len); + data += ticket->encrypted_state_len; + + DECR_LEN(data_size, TICKET_MAC_SIZE); + memcpy(ticket->mac, data, TICKET_MAC_SIZE); + + ticket->encrypted_state = + gnutls_malloc(ticket->encrypted_state_len); + if (!ticket->encrypted_state) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + memcpy(ticket->encrypted_state, encrypted_state, + ticket->encrypted_state_len); + + return 0; +} + +static void +pack_ticket(const struct ticket_st *ticket, gnutls_datum_t *ticket_data) +{ + uint8_t *p; + + p = ticket_data->data; + + memcpy(p, ticket->key_name, TICKET_KEY_NAME_SIZE); + p += TICKET_KEY_NAME_SIZE; + + memcpy(p, ticket->IV, TICKET_IV_SIZE); + p += TICKET_IV_SIZE; + + _gnutls_write_uint16(ticket->encrypted_state_len, p); + p += 2; + + /* We use memmove instead of memcpy here because + * ticket->encrypted_state is allocated from + * ticket_data->data, and thus both memory areas may overlap. + */ + memmove(p, ticket->encrypted_state, ticket->encrypted_state_len); + p += ticket->encrypted_state_len; + + memcpy(p, ticket->mac, TICKET_MAC_SIZE); +} static int digest_ticket(const gnutls_datum_t * key, struct ticket_st *ticket, @@ -102,15 +159,15 @@ int digest_ticket(const gnutls_datum_t * key, struct ticket_st *ticket, uint16_t length16; int ret; - ret = _gnutls_mac_init(&digest_hd, mac_to_entry(MAC_ALGO), + ret = _gnutls_mac_init(&digest_hd, mac_to_entry(TICKET_MAC_ALGO), key->data, key->size); if (ret < 0) { gnutls_assert(); return ret; } - _gnutls_mac(&digest_hd, ticket->key_name, KEY_NAME_SIZE); - _gnutls_mac(&digest_hd, ticket->IV, IV_SIZE); + _gnutls_mac(&digest_hd, ticket->key_name, TICKET_KEY_NAME_SIZE); + _gnutls_mac(&digest_hd, ticket->IV, TICKET_IV_SIZE); length16 = _gnutls_conv_uint16(ticket->encrypted_state_len); _gnutls_mac(&digest_hd, &length16, 2); _gnutls_mac(&digest_hd, ticket->encrypted_state, @@ -120,121 +177,134 @@ int digest_ticket(const gnutls_datum_t * key, struct ticket_st *ticket, return 0; } -static int -decrypt_ticket(gnutls_session_t session, session_ticket_ext_st * priv, - struct ticket_st *ticket) +int +_gnutls_decrypt_session_ticket(gnutls_session_t session, + const gnutls_datum_t *ticket_data, + gnutls_datum_t *state) { cipher_hd_st cipher_hd; - gnutls_datum_t key, IV, state, mac_secret; - uint8_t cmac[MAC_SIZE]; - time_t timestamp = gnutls_time(0); + gnutls_datum_t IV; + gnutls_datum_t stek_key_name, stek_cipher_key, stek_mac_key; + uint8_t cmac[TICKET_MAC_SIZE]; + struct ticket_st ticket; int ret; - /* Check the integrity of ticket */ - mac_secret.data = (void *) &priv->key[MAC_SECRET_POS]; - mac_secret.size = MAC_SECRET_SIZE; - ret = digest_ticket(&mac_secret, ticket, cmac); - if (ret < 0) - return gnutls_assert_val(ret); - - if (memcmp(ticket->mac, cmac, MAC_SIZE)) - return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); + /* callers must have that checked */ + assert(!(session->internals.flags & GNUTLS_NO_TICKETS)); - if (ticket->encrypted_state_len % BLOCK_SIZE != 0) + /* Retrieve ticket decryption keys */ + if (_gnutls_get_session_ticket_decryption_key(session, + ticket_data, + &stek_key_name, + &stek_mac_key, + &stek_cipher_key) < 0) return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); - /* Decrypt encrypted_state */ - key.data = (void *) &priv->key[KEY_POS]; - key.size = CIPHER_KEY_SIZE; - IV.data = ticket->IV; - IV.size = IV_SIZE; - ret = - _gnutls_cipher_init(&cipher_hd, - cipher_to_entry(CIPHER), - &key, &IV, 0); - if (ret < 0) { - gnutls_assert(); + ret = unpack_ticket(ticket_data, &ticket); + if (ret < 0) return ret; + + /* If the key name of the ticket does not match the one that is currently active, + issue a new ticket. */ + if (memcmp + (ticket.key_name, stek_key_name.data, + stek_key_name.size)) { + ret = GNUTLS_E_DECRYPTION_FAILED; + goto cleanup; } - ret = _gnutls_cipher_decrypt(&cipher_hd, ticket->encrypted_state, - ticket->encrypted_state_len); + + /* Check the integrity of ticket */ + ret = digest_ticket(&stek_mac_key, &ticket, cmac); if (ret < 0) { gnutls_assert(); goto cleanup; } - /* Unpack security parameters. */ - state.data = ticket->encrypted_state; - state.size = ticket->encrypted_state_len; - ret = _gnutls_session_unpack(session, &state); - if (ret < 0) { - gnutls_assert(); + if (memcmp(ticket.mac, cmac, TICKET_MAC_SIZE)) { + ret = gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); goto cleanup; } - if (timestamp - - session->internals.resumed_security_parameters.timestamp > - session->internals.expire_time - || session->internals.resumed_security_parameters.timestamp > - timestamp) { - gnutls_assert(); - ret = GNUTLS_E_EXPIRED; + if (ticket.encrypted_state_len % TICKET_BLOCK_SIZE != 0) { + ret = gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); goto cleanup; } - ret = _gnutls_check_resumed_params(session); + /* Decrypt encrypted_state */ + IV.data = ticket.IV; + IV.size = TICKET_IV_SIZE; + ret = + _gnutls_cipher_init(&cipher_hd, + cipher_to_entry(TICKET_CIPHER), + &stek_cipher_key, &IV, 0); if (ret < 0) { gnutls_assert(); goto cleanup; } - session->internals.resumed = RESUME_TRUE; + ret = _gnutls_cipher_decrypt(&cipher_hd, ticket.encrypted_state, + ticket.encrypted_state_len); + if (ret < 0) { + gnutls_assert(); + goto cleanup2; + } + + state->data = ticket.encrypted_state; + state->size = ticket.encrypted_state_len; + + ticket.encrypted_state = NULL; ret = 0; -cleanup: + +cleanup2: _gnutls_cipher_deinit(&cipher_hd); +cleanup: + deinit_ticket(&ticket); + return ret; } -static int -encrypt_ticket(gnutls_session_t session, session_ticket_ext_st * priv, - struct ticket_st *ticket) +int +_gnutls_encrypt_session_ticket(gnutls_session_t session, + const gnutls_datum_t *state, + gnutls_datum_t *ticket_data) { cipher_hd_st cipher_hd; - gnutls_datum_t key, IV; - gnutls_datum_t state = {NULL,0}, encrypted_state = {NULL,0}; - uint8_t iv[IV_SIZE]; - gnutls_datum_t mac_secret; - uint32_t t; + gnutls_datum_t IV; + gnutls_datum_t encrypted_state = {NULL,0}; + uint8_t iv[TICKET_IV_SIZE]; + gnutls_datum_t stek_cipher_key, stek_mac_key, stek_key_name; + struct ticket_st ticket; int ret; - /* Pack security parameters. */ - ret = _gnutls_session_pack(session, &state); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - encrypted_state.size = ((state.size + BLOCK_SIZE - 1) / BLOCK_SIZE) * BLOCK_SIZE; - encrypted_state.data = gnutls_calloc(1, encrypted_state.size); - if (!encrypted_state.data) { + encrypted_state.size = ((state->size + TICKET_BLOCK_SIZE - 1) / TICKET_BLOCK_SIZE) * TICKET_BLOCK_SIZE; + ticket_data->size = TICKET_KEY_NAME_SIZE + TICKET_IV_SIZE + 2 + + encrypted_state.size + TICKET_MAC_SIZE; + ticket_data->data = gnutls_calloc(1, ticket_data->size); + if (!ticket_data->data) { gnutls_assert(); ret = GNUTLS_E_MEMORY_ERROR; goto cleanup; } - memcpy(encrypted_state.data, state.data, state.size); + encrypted_state.data = ticket_data->data + TICKET_KEY_NAME_SIZE + TICKET_IV_SIZE + 2; + memcpy(encrypted_state.data, state->data, state->size); + + /* Retrieve ticket encryption keys */ + if (_gnutls_get_session_ticket_encryption_key(session, + &stek_key_name, + &stek_mac_key, + &stek_cipher_key) < 0) { + ret = GNUTLS_E_ENCRYPTION_FAILED; + goto cleanup; + } /* Encrypt state */ - key.data = (void *) &priv->key[KEY_POS]; - key.size = CIPHER_KEY_SIZE; IV.data = iv; - IV.size = IV_SIZE; + IV.size = TICKET_IV_SIZE; - t = gnutls_time(0); - memcpy(iv, &t, 4); - ret = gnutls_rnd(GNUTLS_RND_NONCE, iv+4, IV_SIZE-4); + ret = gnutls_rnd(GNUTLS_RND_NONCE, iv, TICKET_IV_SIZE); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -242,8 +312,8 @@ encrypt_ticket(gnutls_session_t session, session_ticket_ext_st * priv, ret = _gnutls_cipher_init(&cipher_hd, - cipher_to_entry(CIPHER), - &key, &IV, 1); + cipher_to_entry(TICKET_CIPHER), + &stek_cipher_key, &IV, 1); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -258,14 +328,12 @@ encrypt_ticket(gnutls_session_t session, session_ticket_ext_st * priv, /* Fill the ticket structure to compute MAC. */ - memcpy(ticket->key_name, &priv->key[NAME_POS], KEY_NAME_SIZE); - memcpy(ticket->IV, IV.data, IV.size); - ticket->encrypted_state_len = encrypted_state.size; - ticket->encrypted_state = encrypted_state.data; - - mac_secret.data = &priv->key[MAC_SECRET_POS]; - mac_secret.size = MAC_SECRET_SIZE; - ret = digest_ticket(&mac_secret, ticket, ticket->mac); + memcpy(ticket.key_name, stek_key_name.data, stek_key_name.size); + memcpy(ticket.IV, IV.data, IV.size); + ticket.encrypted_state_len = encrypted_state.size; + ticket.encrypted_state = encrypted_state.data; + + ret = digest_ticket(&stek_mac_key, &ticket, ticket.mac); if (ret < 0) { gnutls_assert(); goto cleanup2; @@ -273,107 +341,73 @@ encrypt_ticket(gnutls_session_t session, session_ticket_ext_st * priv, encrypted_state.data = NULL; + pack_ticket(&ticket, ticket_data); + ret = 0; cleanup2: _gnutls_cipher_deinit(&cipher_hd); cleanup: - _gnutls_free_datum(&state); _gnutls_free_datum(&encrypted_state); return ret; } static int -session_ticket_recv_params(gnutls_session_t session, - const uint8_t * data, size_t _data_size) +unpack_session(gnutls_session_t session, const gnutls_datum_t *state) { - ssize_t data_size = _data_size; - session_ticket_ext_st *priv = NULL; - extension_priv_data_t epriv; int ret; - ret = - _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_SESSION_TICKET, - &epriv); - if (ret < 0) { - return 0; - } - priv = epriv; + if (unlikely(!state)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + ret = _gnutls_session_unpack(session, state); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_check_resumed_params(session); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.resumed = RESUME_TRUE; + return 0; +} + +static int +session_ticket_recv_params(gnutls_session_t session, + const uint8_t * data, size_t data_size) +{ + gnutls_datum_t ticket_data; + gnutls_datum_t state; + int ret; - if (!priv->session_ticket_enable) + if (session->internals.flags & GNUTLS_NO_TICKETS) return 0; if (session->security_parameters.entity == GNUTLS_SERVER) { - struct ticket_st ticket; - const uint8_t *encrypted_state; - /* The client requested a new session ticket. */ if (data_size == 0) { - priv->session_ticket_renew = 1; + session->internals.session_ticket_renew = 1; return 0; } - /* Format: - * Key name - * IV - * data length - * encrypted data - * MAC - */ - DECR_LEN(data_size, KEY_NAME_SIZE); - memcpy(ticket.key_name, data, KEY_NAME_SIZE); - data += KEY_NAME_SIZE; - - /* If the key name of the ticket does not match the one that we - hold, issue a new ticket. */ - if (memcmp - (ticket.key_name, &priv->key[NAME_POS], - KEY_NAME_SIZE)) { - priv->session_ticket_renew = 1; - return 0; - } - - DECR_LEN(data_size, IV_SIZE); - memcpy(ticket.IV, data, IV_SIZE); - data += IV_SIZE; - - DECR_LEN(data_size, 2); - ticket.encrypted_state_len = _gnutls_read_uint16(data); - data += 2; - - encrypted_state = data; - - DECR_LEN(data_size, ticket.encrypted_state_len); - data += ticket.encrypted_state_len; - - DECR_LEN(data_size, MAC_SIZE); - memcpy(ticket.mac, data, MAC_SIZE); + ticket_data.data = (void *)data; + ticket_data.size = data_size; + if ((ret = _gnutls_decrypt_session_ticket(session, &ticket_data, &state)) == 0) { + ret = unpack_session(session, &state); - ticket.encrypted_state = - gnutls_malloc(ticket.encrypted_state_len); - if (!ticket.encrypted_state) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; + _gnutls_free_datum(&state); } - memcpy(ticket.encrypted_state, encrypted_state, - ticket.encrypted_state_len); - - ret = decrypt_ticket(session, priv, &ticket); - - gnutls_free(ticket.encrypted_state); - ticket.encrypted_state = NULL; if (ret < 0) { - priv->session_ticket_renew = 1; + session->internals.session_ticket_renew = 1; return 0; } } else { /* Client */ if (data_size == 0) { - priv->session_ticket_renew = 1; + session->internals.session_ticket_renew = 1; return 0; } } @@ -389,26 +423,19 @@ session_ticket_send_params(gnutls_session_t session, gnutls_buffer_st * extdata) { session_ticket_ext_st *priv = NULL; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; int ret; - ret = - _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_SESSION_TICKET, - &epriv); - if (ret >= 0) - priv = epriv; - - if (priv == NULL || !priv->session_ticket_enable) + if (session->internals.flags & GNUTLS_NO_TICKETS) return 0; if (session->security_parameters.entity == GNUTLS_SERVER) { - if (priv && priv->session_ticket_renew) { + if (session->internals.session_ticket_renew) { return GNUTLS_E_INT_RET_0; } } else { ret = - _gnutls_ext_get_resumed_session_data(session, + _gnutls_hello_ext_get_resumed_priv(session, GNUTLS_EXTENSION_SESSION_TICKET, &epriv); if (ret >= 0) @@ -419,7 +446,7 @@ session_ticket_send_params(gnutls_session_t session, return GNUTLS_E_INT_RET_0; /* previous data had session tickets disabled. Don't advertize. Ignore. */ - if (!priv->session_ticket_enable) + if (session->internals.flags & GNUTLS_NO_TICKETS) return 0; if (priv->session_ticket_len > 0) { @@ -439,7 +466,7 @@ session_ticket_send_params(gnutls_session_t session, } -static void session_ticket_deinit_data(extension_priv_data_t epriv) +static void session_ticket_deinit_data(gnutls_ext_priv_data_t epriv) { session_ticket_ext_st *priv = epriv; @@ -448,24 +475,23 @@ static void session_ticket_deinit_data(extension_priv_data_t epriv) } static int -session_ticket_pack(extension_priv_data_t epriv, gnutls_buffer_st * ps) +session_ticket_pack(gnutls_ext_priv_data_t epriv, gnutls_buffer_st * ps) { session_ticket_ext_st *priv = epriv; int ret; BUFFER_APPEND_PFX4(ps, priv->session_ticket, priv->session_ticket_len); - BUFFER_APPEND_NUM(ps, priv->session_ticket_enable); return 0; } static int -session_ticket_unpack(gnutls_buffer_st * ps, extension_priv_data_t * _priv) +session_ticket_unpack(gnutls_buffer_st * ps, gnutls_ext_priv_data_t * _priv) { session_ticket_ext_st *priv = NULL; int ret; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; gnutls_datum_t ticket; priv = gnutls_calloc(1, sizeof(*priv)); @@ -477,7 +503,6 @@ session_ticket_unpack(gnutls_buffer_st * ps, extension_priv_data_t * _priv) BUFFER_POP_DATUM(ps, &ticket); priv->session_ticket = ticket.data; priv->session_ticket_len = ticket.size; - BUFFER_POP_NUM(ps, priv->session_ticket_enable); epriv = priv; *_priv = epriv; @@ -513,11 +538,11 @@ int gnutls_session_ticket_key_generate(gnutls_datum_t * key) * used. These limits do not affect this function as * it does not generate a "key" but rather key material * that includes nonces and other stuff. */ - key->data = gnutls_malloc(SESSION_KEY_SIZE); + key->data = gnutls_malloc(TICKET_MASTER_KEY_SIZE); if (key->data == NULL) return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - key->size = SESSION_KEY_SIZE; + key->size = TICKET_MASTER_KEY_SIZE; ret = gnutls_rnd(GNUTLS_RND_RANDOM, key->data, key->size); if (ret < 0) { gnutls_free(key->data); @@ -525,7 +550,7 @@ int gnutls_session_ticket_key_generate(gnutls_datum_t * key) } return 0; } else { - return gnutls_key_generate(key, SESSION_KEY_SIZE); + return gnutls_key_generate(key, TICKET_MASTER_KEY_SIZE); } } @@ -534,7 +559,8 @@ int gnutls_session_ticket_key_generate(gnutls_datum_t * key) * @session: is a #gnutls_session_t type. * * Request that the client should attempt session resumption using - * SessionTicket. + * SessionTicket. This call is typically unnecessary as session + * tickets are enabled by default. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, or an * error code. @@ -543,25 +569,12 @@ int gnutls_session_ticket_key_generate(gnutls_datum_t * key) **/ int gnutls_session_ticket_enable_client(gnutls_session_t session) { - session_ticket_ext_st *priv = NULL; - extension_priv_data_t epriv; - if (!session) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - priv = gnutls_calloc(1, sizeof(*priv)); - if (priv == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - priv->session_ticket_enable = 1; - epriv = priv; - - _gnutls_ext_set_session_data(session, - GNUTLS_EXTENSION_SESSION_TICKET, - epriv); + session->internals.flags &= ~GNUTLS_NO_TICKETS; return 0; } @@ -572,9 +585,13 @@ int gnutls_session_ticket_enable_client(gnutls_session_t session) * @key: key to encrypt session parameters. * * Request that the server should attempt session resumption using - * SessionTicket. @key must be initialized with - * gnutls_session_ticket_key_generate(), and should be overwritten - * using gnutls_memset() before being released. + * session tickets, i.e., by delegating storage to the client. + * @key must be initialized using gnutls_session_ticket_key_generate(). + * To avoid leaking that key, use gnutls_memset() prior to + * releasing it. + * + * The default ticket expiration time can be overridden using + * gnutls_db_set_cache_expiration(). * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, or an * error code. @@ -585,55 +602,44 @@ int gnutls_session_ticket_enable_server(gnutls_session_t session, const gnutls_datum_t * key) { - session_ticket_ext_st *priv = NULL; - extension_priv_data_t epriv; + int ret; - if (!session || !key || key->size != SESSION_KEY_SIZE) { + if (!session || !key || key->size != TICKET_MASTER_KEY_SIZE || !key->data) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - priv = gnutls_calloc(1, sizeof(*priv)); - if (priv == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - epriv = priv; - - memcpy(&priv->key, key->data, key->size); - priv->session_ticket_enable = 1; + ret = _gnutls_initialize_session_ticket_key_rotation(session, key); + if (ret < 0) + return gnutls_assert_val(ret); - _gnutls_ext_set_session_data(session, - GNUTLS_EXTENSION_SESSION_TICKET, - epriv); + session->internals.flags &= ~GNUTLS_NO_TICKETS; return 0; } +/* + * Return zero if session tickets haven't been enabled. + */ int _gnutls_send_new_session_ticket(gnutls_session_t session, int again) { mbuffer_st *bufel = NULL; uint8_t *data = NULL, *p; int data_size = 0; int ret; - struct ticket_st ticket; - uint16_t ticket_len; - session_ticket_ext_st *priv = NULL; - extension_priv_data_t epriv; + gnutls_datum_t state = { NULL, 0 }; uint16_t epoch_saved = session->security_parameters.epoch_write; + gnutls_datum_t ticket_data; if (again == 0) { - ret = - _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_SESSION_TICKET, - &epriv); - if (ret < 0) + if (session->internals.flags & GNUTLS_NO_TICKETS) return 0; - priv = epriv; - - if (!priv->session_ticket_renew) + if (!session->internals.session_ticket_renew) return 0; + _gnutls_handshake_log + ("HSK[%p]: sending session ticket\n", session); + /* XXX: Temporarily set write algorithms to be used. _gnutls_write_connection_state_init() does this job, but it also triggers encryption, while NewSessionTicket should not be @@ -641,32 +647,51 @@ int _gnutls_send_new_session_ticket(gnutls_session_t session, int again) ret = _gnutls_epoch_set_keys(session, session->security_parameters. - epoch_next); + epoch_next, 0); if (ret < 0) { gnutls_assert(); return ret; } + /* Under TLS1.2 with session tickets, the session ID is used for different + * purposes than the TLS1.0 session ID. Ensure that there is an internally + * set value which the server will see on the original and resumed sessions */ + if (session->internals.resumed != RESUME_TRUE) { + ret = _gnutls_generate_session_id(session->security_parameters. + session_id, + &session->security_parameters. + session_id_size); + if (ret < 0) { + gnutls_assert(); + return ret; + } + } + session->security_parameters.epoch_write = session->security_parameters.epoch_next; - ret = encrypt_ticket(session, priv, &ticket); - session->security_parameters.epoch_write = epoch_saved; + /* Pack security parameters. */ + ret = _gnutls_session_pack(session, &state); if (ret < 0) { gnutls_assert(); return ret; } - ticket_len = - KEY_NAME_SIZE + IV_SIZE + 2 + - ticket.encrypted_state_len + MAC_SIZE; + /* Generate an encrypted ticket */ + ret = _gnutls_encrypt_session_ticket(session, &state, &ticket_data); + session->security_parameters.epoch_write = epoch_saved; + _gnutls_free_datum(&state); + if (ret < 0) { + gnutls_assert(); + return ret; + } bufel = _gnutls_handshake_alloc(session, - 4 + 2 + ticket_len); + 4 + 2 + ticket_data.size); if (!bufel) { gnutls_assert(); - gnutls_free(ticket.encrypted_state); + _gnutls_free_datum(&ticket_data); return GNUTLS_E_MEMORY_ERROR; } @@ -676,33 +701,25 @@ int _gnutls_send_new_session_ticket(gnutls_session_t session, int again) _gnutls_write_uint32(session->internals.expire_time, p); p += 4; - _gnutls_write_uint16(ticket_len, p); + _gnutls_write_uint16(ticket_data.size, p); p += 2; - memcpy(p, ticket.key_name, KEY_NAME_SIZE); - p += KEY_NAME_SIZE; + memcpy(p, ticket_data.data, ticket_data.size); + p += ticket_data.size; - memcpy(p, ticket.IV, IV_SIZE); - p += IV_SIZE; - - _gnutls_write_uint16(ticket.encrypted_state_len, p); - p += 2; - - memcpy(p, ticket.encrypted_state, ticket.encrypted_state_len); - gnutls_free(ticket.encrypted_state); - p += ticket.encrypted_state_len; - - memcpy(p, ticket.mac, MAC_SIZE); - p += MAC_SIZE; + _gnutls_free_datum(&ticket_data); data_size = p - data; - session->internals.ticket_sent = 1; + session->internals.hsk_flags |= HSK_TLS12_TICKET_SENT; } return _gnutls_send_handshake(session, data_size ? bufel : NULL, GNUTLS_HANDSHAKE_NEW_SESSION_TICKET); } +/* + * Return zero if session tickets haven't been enabled. + */ int _gnutls_recv_new_session_ticket(gnutls_session_t session) { uint8_t *p; @@ -711,30 +728,32 @@ int _gnutls_recv_new_session_ticket(gnutls_session_t session) uint16_t ticket_len; int ret; session_ticket_ext_st *priv = NULL; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; - ret = - _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_SESSION_TICKET, - &epriv); - if (ret < 0) { - gnutls_assert(); + if (session->internals.flags & GNUTLS_NO_TICKETS) return 0; - } - priv = epriv; - - if (!priv->session_ticket_renew) + if (!session->internals.session_ticket_renew) return 0; /* This is the last flight and peer cannot be sure * we have received it unless we notify him. So we * wait for a message and retransmit if needed. */ - if (IS_DTLS(session) && !_dtls_is_async(session) && - (gnutls_record_check_pending(session) + - record_check_unprocessed(session)) == 0) { - ret = _dtls_wait_and_retransmit(session); - if (ret < 0) - return gnutls_assert_val(ret); + if (IS_DTLS(session) && !_dtls_is_async(session)) { + unsigned have; + mbuffer_st *bufel = NULL; + + have = gnutls_record_check_pending(session) + + record_check_unprocessed(session); + + if (have != 0) { + bufel = _mbuffer_head_get_first(&session->internals.record_buffer, NULL); + } + + if (have == 0 || (bufel && bufel->type != GNUTLS_HANDSHAKE)) { + ret = _dtls_wait_and_retransmit(session); + if (ret < 0) + return gnutls_assert_val(ret); + } } ret = _gnutls_recv_handshake(session, @@ -761,15 +780,26 @@ int _gnutls_recv_new_session_ticket(gnutls_session_t session) DECR_LENGTH_COM(data_size, ticket_len, ret = GNUTLS_E_UNEXPECTED_PACKET_LENGTH; goto error); - priv->session_ticket = - gnutls_realloc_fast(priv->session_ticket, ticket_len); - if (!priv->session_ticket) { + + priv = gnutls_calloc(1, sizeof(*priv)); + if (!priv) { gnutls_assert(); ret = GNUTLS_E_MEMORY_ERROR; goto error; } - memcpy(priv->session_ticket, p, ticket_len); + if (ticket_len > 0) { + priv->session_ticket = + gnutls_realloc_fast(priv->session_ticket, ticket_len); + if (!priv->session_ticket) { + gnutls_free(priv); + gnutls_assert(); + ret = GNUTLS_E_MEMORY_ERROR; + goto error; + } + memcpy(priv->session_ticket, p, ticket_len); + } priv->session_ticket_len = ticket_len; + epriv = priv; /* Discard the current session ID. (RFC5077 3.4) */ ret = @@ -779,17 +809,22 @@ int _gnutls_recv_new_session_ticket(gnutls_session_t session) session_id_size); if (ret < 0) { gnutls_assert(); - gnutls_free(priv->session_ticket); - priv->session_ticket = NULL; + session_ticket_deinit_data(epriv); ret = GNUTLS_E_INTERNAL_ERROR; goto error; } ret = 0; + _gnutls_handshake_log + ("HSK[%p]: received session ticket\n", session); + session->internals.hsk_flags |= HSK_TICKET_RECEIVED; + + _gnutls_hello_ext_set_priv(session, + GNUTLS_EXTENSION_SESSION_TICKET, + epriv); + error: _gnutls_buffer_clear(&buf); return ret; } - -#endif diff --git a/lib/ext/session_ticket.h b/lib/ext/session_ticket.h index 5c862d28d0..da804ec2f7 100644 --- a/lib/ext/session_ticket.h +++ b/lib/ext/session_ticket.h @@ -16,18 +16,25 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef EXT_SESSION_TICKET_H -#define EXT_SESSION_TICKET_H +#ifndef GNUTLS_LIB_EXT_SESSION_TICKET_H +#define GNUTLS_LIB_EXT_SESSION_TICKET_H -#include +#include -extern const extension_entry_st ext_mod_session_ticket; +extern const hello_ext_entry_st ext_mod_session_ticket; int _gnutls_send_new_session_ticket(gnutls_session_t session, int again); int _gnutls_recv_new_session_ticket(gnutls_session_t session); -#endif +int _gnutls_encrypt_session_ticket(gnutls_session_t session, + const gnutls_datum_t *state, + gnutls_datum_t *ticket_data); +int _gnutls_decrypt_session_ticket(gnutls_session_t session, + const gnutls_datum_t *ticket_data, + gnutls_datum_t *state); + +#endif /* GNUTLS_LIB_EXT_SESSION_TICKET_H */ diff --git a/lib/ext/signature.c b/lib/ext/signature.c index e5f1874fd0..bb350f5863 100644 --- a/lib/ext/signature.c +++ b/lib/ext/signature.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2002-2016 Free Software Foundation, Inc. - * Copyright (C) 2015-2016 Red Hat, Inc. + * Copyright (C) 2015-2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,11 +17,11 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -/* This file contains the code the Certificate Type TLS extension. +/* This file contains the code for the Signature Algorithms TLS extension. * This extension is currently gnutls specific. */ @@ -35,35 +35,45 @@ #include #include +/* + * Some (all SChannel) clients fail to send proper SigAlgs due to Micro$oft crazyness. + * Patch the extension for them. + */ +#ifdef ENABLE_GOST +#define GOST_SIG_FIXUP_SCHANNEL +#endif + static int _gnutls_signature_algorithm_recv_params(gnutls_session_t session, const uint8_t * data, size_t data_size); static int _gnutls_signature_algorithm_send_params(gnutls_session_t session, - gnutls_buffer_st * - extdata); -static void signature_algorithms_deinit_data(extension_priv_data_t priv); -static int signature_algorithms_pack(extension_priv_data_t epriv, + gnutls_buffer_st * extdata); +static void signature_algorithms_deinit_data(gnutls_ext_priv_data_t priv); +static int signature_algorithms_pack(gnutls_ext_priv_data_t epriv, gnutls_buffer_st * ps); static int signature_algorithms_unpack(gnutls_buffer_st * ps, - extension_priv_data_t * _priv); + gnutls_ext_priv_data_t * _priv); -const extension_entry_st ext_mod_sig = { +const hello_ext_entry_st ext_mod_sig = { .name = "Signature Algorithms", - .type = GNUTLS_EXTENSION_SIGNATURE_ALGORITHMS, - .parse_type = GNUTLS_EXT_TLS, - + .tls_id = 13, + .gid = GNUTLS_EXTENSION_SIGNATURE_ALGORITHMS, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO, + .client_parse_point = GNUTLS_EXT_TLS, + .server_parse_point = GNUTLS_EXT_TLS, .recv_func = _gnutls_signature_algorithm_recv_params, .send_func = _gnutls_signature_algorithm_send_params, .pack_func = signature_algorithms_pack, .unpack_func = signature_algorithms_unpack, .deinit_func = signature_algorithms_deinit_data, + .cannot_be_overriden = 1 }; typedef struct { /* TLS 1.2 signature algorithms */ - gnutls_sign_algorithm_t sign_algorithms[MAX_SIGNATURE_ALGORITHMS]; + gnutls_sign_algorithm_t sign_algorithms[MAX_ALGOS]; uint16_t sign_algorithms_size; } sig_ext_st; @@ -72,48 +82,54 @@ typedef struct { */ int _gnutls_sign_algorithm_write_params(gnutls_session_t session, - uint8_t * data, size_t max_data_size) + gnutls_buffer_st * extdata) { - uint8_t *p = data, *len_p; - unsigned int len, i, j; - const sign_algorithm_st *aid; - - if (max_data_size < - (session->internals.priorities.sign_algo.algorithms * 2) + 2) { - gnutls_assert(); - return GNUTLS_E_SHORT_MEMORY_BUFFER; - } + uint8_t *p; + unsigned int len, i; + const sign_algorithm_st *aid, *prev = NULL; + uint8_t buffer[MAX_ALGOS*2]; + p = buffer; len = 0; - len_p = p; - p += 2; + /* This generates a list of TLS signature algorithms. It has + * limited duplicate detection, and does not add twice the same + * AID */ - for (i = j = 0; - j < session->internals.priorities.sign_algo.algorithms; - i += 2, j++) { - aid = - _gnutls_sign_to_tls_aid(session->internals. - priorities.sign_algo. - priority[j]); + for (i=0;iinternals.priorities->sigalg.size;i++) { + aid = &session->internals.priorities->sigalg.entry[i]->aid; - if (aid == NULL) + if (HAVE_UNKNOWN_SIGAID(aid)) + continue; + + if (prev && prev->id[0] == aid->id[0] && prev->id[1] == aid->id[1]) + continue; + + /* Ignore non-GOST sign types for CertReq */ + if (session->security_parameters.cs && + _gnutls_kx_is_vko_gost(session->security_parameters.cs->kx_algorithm) && + !_sign_is_gost(session->internals.priorities->sigalg.entry[i])) continue; _gnutls_handshake_log ("EXT[%p]: sent signature algo (%d.%d) %s\n", session, - aid->hash_algorithm, aid->sign_algorithm, - gnutls_sign_get_name(session->internals.priorities. - sign_algo.priority[j])); - *p = aid->hash_algorithm; + (int)aid->id[0], (int)aid->id[1], + session->internals.priorities->sigalg.entry[i]->name); + + len += 2; + if (unlikely(len >= sizeof(buffer))) { + len -= 2; + break; + } + + *p = aid->id[0]; p++; - *p = aid->sign_algorithm; + *p = aid->id[1]; p++; - len += 2; + prev = aid; } - _gnutls_write_uint16(len, len_p); - return len + 2; + return _gnutls_buffer_append_data_prefix(extdata, 16, buffer, len); } @@ -126,11 +142,19 @@ _gnutls_sign_algorithm_parse_data(gnutls_session_t session, { unsigned int sig, i; sig_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; + const version_entry_st *ver = get_version(session); if (data_size == 0 || data_size % 2 != 0) return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + if (ver == NULL) { /* assume TLS 1.2 semantics */ + ver = version_to_entry(GNUTLS_TLS1_2); + if (unlikely(ver == NULL)) { + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + } + } + priv = gnutls_calloc(1, sizeof(*priv)); if (priv == NULL) { gnutls_assert(); @@ -138,30 +162,28 @@ _gnutls_sign_algorithm_parse_data(gnutls_session_t session, } for (i = 0; i < data_size; i += 2) { - sign_algorithm_st aid; + uint8_t id[2]; - aid.hash_algorithm = data[i]; - aid.sign_algorithm = data[i + 1]; + id[0] = data[i]; + id[1] = data[i + 1]; - sig = _gnutls_tls_aid_to_sign(&aid); + sig = _gnutls_tls_aid_to_sign(id[0], id[1], ver); _gnutls_handshake_log ("EXT[%p]: rcvd signature algo (%d.%d) %s\n", session, - aid.hash_algorithm, aid.sign_algorithm, + (int)id[0], (int)id[1], gnutls_sign_get_name(sig)); if (sig != GNUTLS_SIGN_UNKNOWN) { - if (priv->sign_algorithms_size == - MAX_SIGNATURE_ALGORITHMS) + if (priv->sign_algorithms_size == MAX_ALGOS) break; priv->sign_algorithms[priv-> - sign_algorithms_size++] = - sig; + sign_algorithms_size++] = sig; } } epriv = priv; - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_SIGNATURE_ALGORITHMS, epriv); @@ -180,9 +202,8 @@ _gnutls_sign_algorithm_parse_data(gnutls_session_t session, static int _gnutls_signature_algorithm_recv_params(gnutls_session_t session, const uint8_t * data, - size_t _data_size) + size_t data_size) { - ssize_t data_size = _data_size; int ret; if (session->security_parameters.entity == GNUTLS_CLIENT) { @@ -190,11 +211,11 @@ _gnutls_signature_algorithm_recv_params(gnutls_session_t session, gnutls_assert(); /* Although TLS 1.2 mandates that we must not accept reply * to this message, there are good reasons to just ignore it. Check - * http://www.ietf.org/mail-archive/web/tls/current/msg03880.html + * https://www.ietf.org/mail-archive/web/tls/current/msg03880.html */ /* return GNUTLS_E_UNEXPECTED_PACKET; */ } else { - /* SERVER SIDE - we must check if the sent cert type is the right one + /* SERVER SIDE */ if (data_size >= 2) { uint16_t len; @@ -238,16 +259,9 @@ _gnutls_signature_algorithm_send_params(gnutls_session_t session, /* this function sends the client extension data */ if (session->security_parameters.entity == GNUTLS_CLIENT && _gnutls_version_has_selectable_sighash(ver)) { - if (session->internals.priorities.sign_algo.algorithms > 0) { - uint8_t p[MAX_SIGN_ALGO_SIZE]; - + if (session->internals.priorities->sigalg.size > 0) { ret = - _gnutls_sign_algorithm_write_params(session, p, - sizeof(p)); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = _gnutls_buffer_append_data(extdata, p, ret); + _gnutls_sign_algorithm_write_params(session, extdata); if (ret < 0) return gnutls_assert_val(ret); @@ -259,8 +273,25 @@ _gnutls_signature_algorithm_send_params(gnutls_session_t session, return 0; } +#ifdef GOST_SIG_FIXUP_SCHANNEL +static bool +is_gost_sig_present(sig_ext_st *priv) +{ + unsigned i; + const gnutls_sign_entry_st *se; + + for (i = 0; i < priv->sign_algorithms_size; i++) { + se = _gnutls_sign_to_entry(priv->sign_algorithms[i]); + if (se != NULL && _sign_is_gost(se)) + return true; + } + + return false; +} +#endif + /* Returns a requested by the peer signature algorithm that - * matches the given certificate's public key algorithm. + * matches the given certificate's public key algorithm. * * When the @client_cert flag is not set, then this function will * also check whether the signature algorithm is allowed to be @@ -269,14 +300,18 @@ _gnutls_signature_algorithm_send_params(gnutls_session_t session, */ gnutls_sign_algorithm_t _gnutls_session_get_sign_algo(gnutls_session_t session, - gnutls_pcert_st * cert, unsigned client_cert) + gnutls_pcert_st * cert, + gnutls_privkey_t privkey, + unsigned client_cert, + gnutls_kx_algorithm_t kx_algorithm) { unsigned i; int ret; const version_entry_st *ver = get_version(session); sig_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; unsigned int cert_algo; + const gnutls_sign_entry_st *se; if (unlikely(ver == NULL)) return gnutls_assert_val(GNUTLS_SIGN_UNKNOWN); @@ -284,12 +319,48 @@ _gnutls_session_get_sign_algo(gnutls_session_t session, cert_algo = gnutls_pubkey_get_pk_algorithm(cert->pubkey, NULL); ret = - _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_SIGNATURE_ALGORITHMS, - &epriv); - priv = epriv; + _gnutls_hello_ext_get_priv(session, + GNUTLS_EXTENSION_SIGNATURE_ALGORITHMS, + &epriv); + if (ret < 0) + priv = NULL; + else + priv = epriv; + +#ifdef GOST_SIG_FIXUP_SCHANNEL + /* + * Some (all SChannel) clients fail to send proper SigAlgs due to Micro$oft crazyness. + * If we are negotiating GOST KX (because we have received GOST + * ciphersuites) and if we have received no GOST SignatureAlgorithms, + * assume that the client could not send them and continue negotiation + * as if correct algorithm was sent. + */ + if (_gnutls_kx_is_vko_gost(kx_algorithm) && + (!priv || + !is_gost_sig_present(priv) || + !_gnutls_version_has_selectable_sighash(ver))) { + gnutls_digest_algorithm_t dig; + + _gnutls_handshake_log("EXT[%p]: GOST KX, but no GOST SigAlgs received, patching up.", session); + + if (cert_algo == GNUTLS_PK_GOST_01) + dig = GNUTLS_DIG_GOSTR_94; + else if (cert_algo == GNUTLS_PK_GOST_12_256) + dig = GNUTLS_DIG_STREEBOG_256; + else if (cert_algo == GNUTLS_PK_GOST_12_512) + dig = GNUTLS_DIG_STREEBOG_512; + else + dig = GNUTLS_DIG_SHA1; + + ret = gnutls_pk_to_sign(cert_algo, dig); - if (ret < 0 || !_gnutls_version_has_selectable_sighash(ver)) { + if (!client_cert && _gnutls_session_sign_algo_enabled(session, ret) < 0) + goto fail; + return ret; + } +#endif + + if (!priv || !_gnutls_version_has_selectable_sighash(ver)) { /* none set, allow SHA-1 only */ ret = gnutls_pk_to_sign(cert_algo, GNUTLS_DIG_SHA1); @@ -298,22 +369,39 @@ _gnutls_session_get_sign_algo(gnutls_session_t session, return ret; } + + for (i = 0; i < priv->sign_algorithms_size; i++) { - if (gnutls_sign_get_pk_algorithm(priv->sign_algorithms[i]) - == cert_algo) { + se = _gnutls_sign_to_entry(priv->sign_algorithms[i]); + if (se == NULL) + continue; + + _gnutls_handshake_log("checking cert compat with %s\n", se->name); + + if (_gnutls_privkey_compatible_with_sig(privkey, priv->sign_algorithms[i]) == 0) + continue; + + if (sign_supports_cert_pk_algorithm(se, cert_algo) != 0) { if (_gnutls_pubkey_compatible_with_sig - (session, cert->pubkey, ver, - priv->sign_algorithms[i]) < 0) + (session, cert->pubkey, ver, se->id) < 0) continue; - if (!client_cert && _gnutls_session_sign_algo_enabled - (session, priv->sign_algorithms[i]) < 0) + if (_gnutls_session_sign_algo_enabled + (session, se->id) < 0) continue; - return priv->sign_algorithms[i]; + return se->id; } } + /* When having a legacy client certificate which can only be signed + * using algorithms we don't always enable by default (e.g., DSA-SHA1), + * continue and sign with it. */ + if (client_cert) { + _gnutls_audit_log(session, "No shared signature schemes with peer for client certificate (%s). Is the certificate a legacy one?\n", + gnutls_pk_get_name(cert_algo)); + } + fail: return GNUTLS_SIGN_UNKNOWN; } @@ -336,24 +424,35 @@ _gnutls_session_sign_algo_enabled(gnutls_session_t session, return 0; } - for (i = 0; i < session->internals.priorities.sign_algo.algorithms; - i++) { - if (session->internals.priorities.sign_algo.priority[i] == - sig) { + if (ver->tls13_sem) { + /* disallow RSA, DSA, and SHA1 */ + const gnutls_sign_entry_st *se; + + se = _gnutls_sign_to_entry(sig); + if (se == NULL || (se->flags & GNUTLS_SIGN_FLAG_TLS13_OK) == 0) { + gnutls_assert(); + goto disallowed; + } + } + + for (i = 0; i < session->internals.priorities->sigalg.size; i++) { + if (session->internals.priorities->sigalg.entry[i]->id == sig) { return 0; /* ok */ } } + disallowed: + _gnutls_handshake_log("Signature algorithm %s is not enabled\n", gnutls_sign_algorithm_get_name(sig)); return GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM; } -static void signature_algorithms_deinit_data(extension_priv_data_t priv) +static void signature_algorithms_deinit_data(gnutls_ext_priv_data_t priv) { gnutls_free(priv); } static int -signature_algorithms_pack(extension_priv_data_t epriv, +signature_algorithms_pack(gnutls_ext_priv_data_t epriv, gnutls_buffer_st * ps) { sig_ext_st *priv = epriv; @@ -368,11 +467,11 @@ signature_algorithms_pack(extension_priv_data_t epriv, static int signature_algorithms_unpack(gnutls_buffer_st * ps, - extension_priv_data_t * _priv) + gnutls_ext_priv_data_t * _priv) { sig_ext_st *priv; int i, ret; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; priv = gnutls_calloc(1, sizeof(*priv)); if (priv == NULL) { @@ -425,16 +524,16 @@ gnutls_sign_algorithm_get_requested(gnutls_session_t session, { const version_entry_st *ver = get_version(session); sig_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; int ret; if (unlikely(ver == NULL)) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); ret = - _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_SIGNATURE_ALGORITHMS, - &epriv); + _gnutls_hello_ext_get_priv(session, + GNUTLS_EXTENSION_SIGNATURE_ALGORITHMS, + &epriv); if (ret < 0) { gnutls_assert(); return ret; @@ -457,7 +556,7 @@ gnutls_sign_algorithm_get_requested(gnutls_session_t session, * gnutls_sign_algorithm_get: * @session: is a #gnutls_session_t type. * - * Returns the signature algorithm that is (or will be) used in this + * Returns the signature algorithm that is (or will be) used in this * session by the server to sign data. This function should be * used only with TLS 1.2 or later. * @@ -474,7 +573,7 @@ int gnutls_sign_algorithm_get(gnutls_session_t session) * gnutls_sign_algorithm_get_client: * @session: is a #gnutls_session_t type. * - * Returns the signature algorithm that is (or will be) used in this + * Returns the signature algorithm that is (or will be) used in this * session by the client to sign data. This function should be * used only with TLS 1.2 or later. * diff --git a/lib/ext/signature.h b/lib/ext/signature.h index 5e59cb3f4f..ef42763cfe 100644 --- a/lib/ext/signature.h +++ b/lib/ext/signature.h @@ -16,28 +16,31 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_EXT_SIGNATURE_H +#define GNUTLS_LIB_EXT_SIGNATURE_H + /* signature algorithms extension */ -#ifndef EXT_SIGNATURE_H -#define EXT_SIGNATURE_H -#include +#include -extern const extension_entry_st ext_mod_sig; +extern const hello_ext_entry_st ext_mod_sig; gnutls_sign_algorithm_t _gnutls_session_get_sign_algo(gnutls_session_t session, - gnutls_pcert_st * cert, unsigned client_cert); + gnutls_pcert_st * cert, + gnutls_privkey_t privkey, + unsigned client_cert, + gnutls_kx_algorithm_t kx_algorithm); int _gnutls_sign_algorithm_parse_data(gnutls_session_t session, const uint8_t * data, size_t data_size); int _gnutls_sign_algorithm_write_params(gnutls_session_t session, - uint8_t * data, - size_t max_data_size); + gnutls_buffer_st * extdata); int _gnutls_session_sign_algo_enabled(gnutls_session_t session, gnutls_sign_algorithm_t sig); @@ -54,4 +57,5 @@ gnutls_sign_algorithm_set_client(gnutls_session_t session, { session->security_parameters.client_sign_algo = sign; } -#endif + +#endif /* GNUTLS_LIB_EXT_SIGNATURE_H */ diff --git a/lib/ext/srp.c b/lib/ext/srp.c index 6a60586bce..26fa56e3aa 100644 --- a/lib/ext/srp.c +++ b/lib/ext/srp.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -30,38 +30,40 @@ #include "errors.h" #include "algorithms.h" #include -#include +#include static int _gnutls_srp_unpack(gnutls_buffer_st * ps, - extension_priv_data_t * _priv); -static int _gnutls_srp_pack(extension_priv_data_t epriv, + gnutls_ext_priv_data_t * _priv); +static int _gnutls_srp_pack(gnutls_ext_priv_data_t epriv, gnutls_buffer_st * ps); -static void _gnutls_srp_deinit_data(extension_priv_data_t epriv); +static void _gnutls_srp_deinit_data(gnutls_ext_priv_data_t epriv); static int _gnutls_srp_recv_params(gnutls_session_t state, const uint8_t * data, size_t data_size); static int _gnutls_srp_send_params(gnutls_session_t state, gnutls_buffer_st * extdata); -const extension_entry_st ext_mod_srp = { +const hello_ext_entry_st ext_mod_srp = { .name = "SRP", - .type = GNUTLS_EXTENSION_SRP, - .parse_type = GNUTLS_EXT_TLS, - + .tls_id = 12, + .gid = GNUTLS_EXTENSION_SRP, + .client_parse_point = GNUTLS_EXT_TLS, + .server_parse_point = GNUTLS_EXT_TLS, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO, .recv_func = _gnutls_srp_recv_params, .send_func = _gnutls_srp_send_params, .pack_func = _gnutls_srp_pack, .unpack_func = _gnutls_srp_unpack, - .deinit_func = _gnutls_srp_deinit_data + .deinit_func = _gnutls_srp_deinit_data, + .cannot_be_overriden = 1 }; static int _gnutls_srp_recv_params(gnutls_session_t session, const uint8_t * data, - size_t _data_size) + size_t data_size) { uint8_t len; - ssize_t data_size = _data_size; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; srp_ext_st *priv; if (session->security_parameters.entity == GNUTLS_SERVER) { @@ -90,7 +92,7 @@ _gnutls_srp_recv_params(gnutls_session_t session, const uint8_t * data, } epriv = priv; - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_SRP, epriv); } @@ -98,6 +100,20 @@ _gnutls_srp_recv_params(gnutls_session_t session, const uint8_t * data, return 0; } +static unsigned have_srp_ciphersuites(gnutls_session_t session) +{ + unsigned j; + unsigned kx; + + for (j = 0; j < session->internals.priorities->cs.size; j++) { + kx = session->internals.priorities->cs.entry[j]->kx_algorithm; + if (kx == GNUTLS_KX_SRP || kx == GNUTLS_KX_SRP_RSA || kx == GNUTLS_KX_SRP_DSS) + return 1; + } + + return 0; +} + /* returns data_size or a negative number on failure * data is allocated locally */ @@ -107,94 +123,90 @@ _gnutls_srp_send_params(gnutls_session_t session, { unsigned len; int ret; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; srp_ext_st *priv = NULL; char *username = NULL, *password = NULL; - - if (_gnutls_kx_priority(session, GNUTLS_KX_SRP) < 0 && - _gnutls_kx_priority(session, GNUTLS_KX_SRP_DSS) < 0 && - _gnutls_kx_priority(session, GNUTLS_KX_SRP_RSA) < 0) { - /* algorithm was not allowed in this session - */ - return 0; - } - - /* this function sends the client extension data (username) */ - if (session->security_parameters.entity == GNUTLS_CLIENT) { - gnutls_srp_client_credentials_t cred = + gnutls_srp_client_credentials_t cred = (gnutls_srp_client_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_SRP); - if (cred == NULL) - return 0; + if (session->security_parameters.entity != GNUTLS_CLIENT) + return 0; - priv = gnutls_calloc(1, sizeof(*priv)); - if (priv == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + if (cred == NULL) + return 0; - if (cred->username != NULL) { /* send username */ - len = MIN(strlen(cred->username), 255); + if (!have_srp_ciphersuites(session)) { + return 0; + } - ret = - _gnutls_buffer_append_data_prefix(extdata, 8, - cred-> - username, - len); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } + /* this function sends the client extension data (username) */ + priv = gnutls_calloc(1, sizeof(*priv)); + if (priv == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + if (cred->username != NULL) { /* send username */ + len = MIN(strlen(cred->username), 255); + + ret = + _gnutls_buffer_append_data_prefix(extdata, 8, + cred-> + username, + len); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } - priv->username = strdup(cred->username); - if (priv->username == NULL) { - gnutls_assert(); - goto cleanup; - } + priv->username = gnutls_strdup(cred->username); + if (priv->username == NULL) { + gnutls_assert(); + goto cleanup; + } - priv->password = strdup(cred->password); - if (priv->password == NULL) { - gnutls_assert(); - goto cleanup; - } + priv->password = gnutls_strdup(cred->password); + if (priv->password == NULL) { + gnutls_assert(); + goto cleanup; + } - epriv = priv; - _gnutls_ext_set_session_data(session, - GNUTLS_EXTENSION_SRP, - epriv); + epriv = priv; + _gnutls_hello_ext_set_priv(session, + GNUTLS_EXTENSION_SRP, + epriv); - return len + 1; - } else if (cred->get_function != NULL) { - /* Try the callback - */ + return len + 1; + } else if (cred->get_function != NULL) { + /* Try the callback + */ - if (cred-> - get_function(session, &username, &password) < 0 - || username == NULL || password == NULL) { - gnutls_assert(); - return GNUTLS_E_ILLEGAL_SRP_USERNAME; - } + if (cred-> + get_function(session, &username, &password) < 0 + || username == NULL || password == NULL) { + gnutls_assert(); + return GNUTLS_E_ILLEGAL_SRP_USERNAME; + } - len = MIN(strlen(username), 255); + len = MIN(strlen(username), 255); - priv->username = username; - priv->password = password; + priv->username = username; + priv->password = password; - ret = - _gnutls_buffer_append_data_prefix(extdata, 8, - username, - len); - if (ret < 0) { - ret = gnutls_assert_val(ret); - goto cleanup; - } + ret = + _gnutls_buffer_append_data_prefix(extdata, 8, + username, + len); + if (ret < 0) { + ret = gnutls_assert_val(ret); + goto cleanup; + } - epriv = priv; - _gnutls_ext_set_session_data(session, - GNUTLS_EXTENSION_SRP, - epriv); + epriv = priv; + _gnutls_hello_ext_set_priv(session, + GNUTLS_EXTENSION_SRP, + epriv); - return len + 1; - } + return len + 1; } return 0; @@ -206,7 +218,7 @@ _gnutls_srp_send_params(gnutls_session_t session, return ret; } -static void _gnutls_srp_deinit_data(extension_priv_data_t epriv) +static void _gnutls_srp_deinit_data(gnutls_ext_priv_data_t epriv) { srp_ext_st *priv = epriv; @@ -216,7 +228,7 @@ static void _gnutls_srp_deinit_data(extension_priv_data_t epriv) } static int -_gnutls_srp_pack(extension_priv_data_t epriv, gnutls_buffer_st * ps) +_gnutls_srp_pack(gnutls_ext_priv_data_t epriv, gnutls_buffer_st * ps) { srp_ext_st *priv = epriv; int ret; @@ -235,11 +247,11 @@ _gnutls_srp_pack(extension_priv_data_t epriv, gnutls_buffer_st * ps) } static int -_gnutls_srp_unpack(gnutls_buffer_st * ps, extension_priv_data_t * _priv) +_gnutls_srp_unpack(gnutls_buffer_st * ps, gnutls_ext_priv_data_t * _priv) { srp_ext_st *priv; int ret; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; gnutls_datum_t username = { NULL, 0 }; gnutls_datum_t password = { NULL, 0 }; diff --git a/lib/ext/srp.h b/lib/ext/srp.h index 00b8e2ba0e..fd7576fef7 100644 --- a/lib/ext/srp.h +++ b/lib/ext/srp.h @@ -16,21 +16,21 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef EXT_SRP_H -#define EXT_SRP_H +#ifndef GNUTLS_LIB_EXT_SRP_H +#define GNUTLS_LIB_EXT_SRP_H -#include - -#ifdef ENABLE_SRP +#include #define IS_SRP_KX(kx) ((kx == GNUTLS_KX_SRP || (kx == GNUTLS_KX_SRP_RSA) || \ kx == GNUTLS_KX_SRP_DSS)?1:0) -extern const extension_entry_st ext_mod_srp; +#ifdef ENABLE_SRP + +extern const hello_ext_entry_st ext_mod_srp; typedef struct { char *username; @@ -39,4 +39,4 @@ typedef struct { #endif -#endif +#endif /* GNUTLS_LIB_EXT_SRP_H */ diff --git a/lib/ext/srtp.c b/lib/ext/srtp.c index 421e09149c..b2e36b3a06 100644 --- a/lib/ext/srtp.c +++ b/lib/ext/srtp.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -33,22 +33,26 @@ static int _gnutls_srtp_send_params(gnutls_session_t session, gnutls_buffer_st * extdata); static int _gnutls_srtp_unpack(gnutls_buffer_st * ps, - extension_priv_data_t * _priv); -static int _gnutls_srtp_pack(extension_priv_data_t _priv, + gnutls_ext_priv_data_t * _priv); +static int _gnutls_srtp_pack(gnutls_ext_priv_data_t _priv, gnutls_buffer_st * ps); -static void _gnutls_srtp_deinit_data(extension_priv_data_t priv); +static void _gnutls_srtp_deinit_data(gnutls_ext_priv_data_t priv); -const extension_entry_st ext_mod_srtp = { +const hello_ext_entry_st ext_mod_srtp = { .name = "SRTP", - .type = GNUTLS_EXTENSION_SRTP, - .parse_type = GNUTLS_EXT_APPLICATION, - + .tls_id = 14, + .gid = GNUTLS_EXTENSION_SRTP, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_EE | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, + .client_parse_point = GNUTLS_EXT_APPLICATION, + .server_parse_point = GNUTLS_EXT_APPLICATION, .recv_func = _gnutls_srtp_recv_params, .send_func = _gnutls_srtp_send_params, .pack_func = _gnutls_srtp_pack, .unpack_func = _gnutls_srtp_unpack, .deinit_func = _gnutls_srtp_deinit_data, + .cannot_be_overriden = 1 }; typedef struct { @@ -159,19 +163,18 @@ const char *gnutls_srtp_get_profile_name(gnutls_srtp_profile_t profile) static int _gnutls_srtp_recv_params(gnutls_session_t session, - const uint8_t * data, size_t _data_size) + const uint8_t * data, size_t data_size) { unsigned int i; int ret; const uint8_t *p = data; - int len; - ssize_t data_size = _data_size; + size_t len; srtp_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; uint16_t profile; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_SRTP, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SRTP, &epriv); if (ret < 0) return 0; @@ -234,10 +237,10 @@ _gnutls_srtp_send_params(gnutls_session_t session, unsigned i; int total_size = 0, ret; srtp_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_SRTP, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SRTP, &epriv); if (ret < 0) return 0; @@ -308,10 +311,10 @@ gnutls_srtp_get_selected_profile(gnutls_session_t session, { srtp_ext_st *priv; int ret; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_SRTP, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SRTP, &epriv); if (ret < 0) { gnutls_assert(); @@ -347,10 +350,10 @@ int gnutls_srtp_get_mki(gnutls_session_t session, gnutls_datum_t * mki) { srtp_ext_st *priv; int ret; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_SRTP, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SRTP, &epriv); if (ret < 0) return @@ -388,10 +391,10 @@ gnutls_srtp_set_mki(gnutls_session_t session, const gnutls_datum_t * mki) { int ret; srtp_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_SRTP, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SRTP, &epriv); if (ret < 0) { priv = gnutls_calloc(1, sizeof(*priv)); @@ -400,7 +403,7 @@ gnutls_srtp_set_mki(gnutls_session_t session, const gnutls_datum_t * mki) return GNUTLS_E_MEMORY_ERROR; } epriv = priv; - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_SRTP, epriv); } else priv = epriv; @@ -433,10 +436,10 @@ gnutls_srtp_set_profile(gnutls_session_t session, { int ret; srtp_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_SRTP, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SRTP, &epriv); if (ret < 0) { priv = gnutls_calloc(1, sizeof(*priv)); @@ -445,7 +448,7 @@ gnutls_srtp_set_profile(gnutls_session_t session, return GNUTLS_E_MEMORY_ERROR; } epriv = priv; - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_SRTP, epriv); } else priv = epriv; @@ -478,13 +481,13 @@ gnutls_srtp_set_profile_direct(gnutls_session_t session, { int ret; srtp_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; int set = 0; const char *col; gnutls_srtp_profile_t id; ret = - _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_SRTP, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_SRTP, &epriv); if (ret < 0) { set = 1; @@ -518,7 +521,7 @@ gnutls_srtp_set_profile_direct(gnutls_session_t session, } while (col != NULL); if (set != 0) - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_SRTP, epriv); return 0; @@ -607,13 +610,13 @@ gnutls_srtp_get_keys(gnutls_session_t session, return msize; } -static void _gnutls_srtp_deinit_data(extension_priv_data_t priv) +static void _gnutls_srtp_deinit_data(gnutls_ext_priv_data_t priv) { gnutls_free(priv); } static int -_gnutls_srtp_pack(extension_priv_data_t epriv, gnutls_buffer_st * ps) +_gnutls_srtp_pack(gnutls_ext_priv_data_t epriv, gnutls_buffer_st * ps) { srtp_ext_st *priv = epriv; unsigned int i; @@ -633,12 +636,12 @@ _gnutls_srtp_pack(extension_priv_data_t epriv, gnutls_buffer_st * ps) } static int -_gnutls_srtp_unpack(gnutls_buffer_st * ps, extension_priv_data_t * _priv) +_gnutls_srtp_unpack(gnutls_buffer_st * ps, gnutls_ext_priv_data_t * _priv) { srtp_ext_st *priv; unsigned int i; int ret; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; priv = gnutls_calloc(1, sizeof(*priv)); if (priv == NULL) { diff --git a/lib/ext/srtp.h b/lib/ext/srtp.h index 7846fa2942..d05454a477 100644 --- a/lib/ext/srtp.h +++ b/lib/ext/srtp.h @@ -16,13 +16,16 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ + +#ifndef GNUTLS_LIB_EXT_SRTP_H +#define GNUTLS_LIB_EXT_SRTP_H #ifndef EXT_SRTP_H #define EXT_SRTP_H -#include +#include #define MAX_SRTP_PROFILES 4 @@ -35,6 +38,8 @@ typedef struct { unsigned int mki_received; } srtp_ext_st; -extern const extension_entry_st ext_mod_srtp; +extern const hello_ext_entry_st ext_mod_srtp; #endif + +#endif /* GNUTLS_LIB_EXT_SRTP_H */ diff --git a/lib/ext/status_request.c b/lib/ext/status_request.c index f5a46dca23..c9eb7d29f0 100644 --- a/lib/ext/status_request.c +++ b/lib/ext/status_request.c @@ -1,6 +1,6 @@ /* - * Copyright (C) 2012-2016 Free Software Foundation, Inc. - * Copyright (C) 2016 Red Hat, Inc. + * Copyright (C) 2012-2017 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Simon Josefsson, Nikos Mavrogiannopoulos * @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -28,7 +28,7 @@ #include "gnutls_int.h" #include "errors.h" -#include +#include #include #include #include @@ -38,10 +38,8 @@ #ifdef ENABLE_OCSP typedef struct { - gnutls_datum_t *responder_id; - size_t responder_id_size; - gnutls_datum_t request_extensions; - gnutls_datum_t response; + /* server response */ + gnutls_datum_t sresp; unsigned int expect_cstatus; } status_request_ext_st; @@ -67,74 +65,31 @@ typedef struct { opaque Extensions<0..2^16-1>; */ -static void deinit_responder_id(status_request_ext_st *priv) -{ -unsigned i; - - for (i = 0; i < priv->responder_id_size; i++) - gnutls_free(priv->responder_id[i].data); - - gnutls_free(priv->responder_id); - priv->responder_id = NULL; - priv->responder_id_size = 0; -} - static int client_send(gnutls_session_t session, gnutls_buffer_st * extdata, status_request_ext_st * priv) { - int ret_len = 1 + 2; + const uint8_t data[5] = "\x01\x00\x00\x00\x00"; + const int len = 5; int ret; - size_t i; - - ret = _gnutls_buffer_append_prefix(extdata, 8, 1); - if (ret < 0) - return gnutls_assert_val(ret); - ret = - _gnutls_buffer_append_prefix(extdata, 16, - priv->responder_id_size); - if (ret < 0) - return gnutls_assert_val(ret); - - for (i = 0; i < priv->responder_id_size; i++) { - if (priv->responder_id[i].size <= 0) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - - ret = _gnutls_buffer_append_data_prefix(extdata, 16, - priv-> - responder_id[i]. - data, - priv-> - responder_id[i]. - size); - if (ret < 0) - return gnutls_assert_val(ret); - - ret_len += 2 + priv->responder_id[i].size; - } + /* We do not support setting either ResponderID or Extensions */ - ret = _gnutls_buffer_append_data_prefix(extdata, 16, - priv->request_extensions. - data, - priv->request_extensions. - size); + ret = _gnutls_buffer_append_data(extdata, data, len); if (ret < 0) return gnutls_assert_val(ret); - ret_len += 2 + priv->request_extensions.size; + session->internals.hsk_flags |= HSK_OCSP_REQUESTED; - return ret_len; + return len; } static int server_recv(gnutls_session_t session, - status_request_ext_st * priv, - const uint8_t * data, size_t size) + const uint8_t * data, size_t data_size) { - size_t i; - ssize_t data_size = size; + unsigned rid_bytes = 0; /* minimum message is type (1) + responder_id_list (2) + request_extension (2) = 5 */ @@ -153,42 +108,19 @@ server_recv(gnutls_session_t session, DECR_LEN(data_size, 1); data++; - priv->responder_id_size = _gnutls_read_uint16(data); + rid_bytes = _gnutls_read_uint16(data); DECR_LEN(data_size, 2); - data += 2; + /*data += 2;*/ - if (data_size <= (ssize_t) (priv->responder_id_size * 2)) + /* sanity check only, we don't use any of the data below */ + + if (data_size < rid_bytes) return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); - if (priv->responder_id != NULL) - deinit_responder_id(priv); - - priv->responder_id = gnutls_calloc(1, priv->responder_id_size - * sizeof(*priv->responder_id)); - if (priv->responder_id == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - - for (i = 0; i < priv->responder_id_size; i++) { - size_t l; - - DECR_LEN(data_size, 2); - - l = _gnutls_read_uint16(data); - data += 2; - - DECR_LEN(data_size, l); - - priv->responder_id[i].data = gnutls_malloc(l); - if (priv->responder_id[i].data == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - - memcpy(priv->responder_id[i].data, data, l); - priv->responder_id[i].size = l; - - data += l; - } + _gnutls_handshake_log("EXT[%p]: OCSP status was requested\n", session); + session->internals.hsk_flags |= HSK_OCSP_REQUESTED; return 0; } @@ -237,30 +169,52 @@ server_send(gnutls_session_t session, gnutls_certificate_credentials_t cred; gnutls_status_request_ocsp_func func; void *func_ptr; + const version_entry_st *ver = get_version(session); cred = (gnutls_certificate_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); if (cred == NULL) /* no certificate authentication */ - return gnutls_assert_val(0); + return 0; - if (session->internals.selected_ocsp_func) { + /* no need to set sresp; responses are send during certificate sending and + * no response is required from server side. */ + if (ver && ver->multi_ocsp) + return 0; + + /* Under TLS1.2 we obtain the response at this point in order to respond + * appropriately (empty extension vs no response) */ + if (session->internals.selected_ocsp_length > 0) { + if (session->internals.selected_ocsp[0].response.data) { + if (session->internals.selected_ocsp[0].exptime != 0 && + (gnutls_time(0) >= session->internals.selected_ocsp[0].exptime)) { + gnutls_assert(); + return 0; + } + + ret = _gnutls_set_datum(&priv->sresp, + session->internals.selected_ocsp[0].response.data, + session->internals.selected_ocsp[0].response.size); + if (ret < 0) + return gnutls_assert_val(ret); + return GNUTLS_E_INT_RET_0; + } else { + return 0; + } + } else if (session->internals.selected_ocsp_func) { func = session->internals.selected_ocsp_func; func_ptr = session->internals.selected_ocsp_func_ptr; - } else if (cred->glob_ocsp_func) { - func = cred->glob_ocsp_func; - func_ptr = cred->glob_ocsp_func_ptr; - } else { - return 0; - } - if (func == NULL) - return 0; + if (func == NULL) + return 0; - ret = func(session, func_ptr, &priv->response); - if (ret == GNUTLS_E_NO_CERTIFICATE_STATUS) + ret = func(session, func_ptr, &priv->sresp); + if (ret == GNUTLS_E_NO_CERTIFICATE_STATUS) + return 0; + else if (ret < 0) + return gnutls_assert_val(ret); + } else { return 0; - else if (ret < 0) - return gnutls_assert_val(ret); + } return GNUTLS_E_INT_RET_0; } @@ -269,7 +223,7 @@ static int _gnutls_status_request_send_params(gnutls_session_t session, gnutls_buffer_st * extdata) { - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; status_request_ext_st *priv; int ret; @@ -278,11 +232,10 @@ _gnutls_status_request_send_params(gnutls_session_t session, if (_gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE) == NULL) return 0; - ret = _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_STATUS_REQUEST, - &epriv); - if (session->security_parameters.entity == GNUTLS_CLIENT) { + ret = _gnutls_hello_ext_get_priv(session, + GNUTLS_EXTENSION_STATUS_REQUEST, + &epriv); if (ret < 0 || epriv == NULL) /* it is ok not to have it */ return 0; priv = epriv; @@ -293,9 +246,9 @@ _gnutls_status_request_send_params(gnutls_session_t session, if (priv == NULL) return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - _gnutls_ext_set_session_data(session, - GNUTLS_EXTENSION_STATUS_REQUEST, - epriv); + _gnutls_hello_ext_set_priv(session, + GNUTLS_EXTENSION_STATUS_REQUEST, + epriv); return server_send(session, extdata, priv); } @@ -305,36 +258,39 @@ static int _gnutls_status_request_recv_params(gnutls_session_t session, const uint8_t * data, size_t size) { - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; status_request_ext_st *priv; int ret; - ret = _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_STATUS_REQUEST, - &epriv); - if (ret < 0 || epriv == NULL) /* it is ok not to have it */ - return 0; - - priv = epriv; + if (session->security_parameters.entity == GNUTLS_CLIENT) { + ret = _gnutls_hello_ext_get_priv(session, + GNUTLS_EXTENSION_STATUS_REQUEST, + &epriv); + if (ret < 0 || epriv == NULL) /* it is ok not to have it */ + return 0; + priv = epriv; - if (session->security_parameters.entity == GNUTLS_CLIENT) return client_recv(session, priv, data, size); - else - return server_recv(session, priv, data, size); + } else { + return server_recv(session, data, size); + } } /** * gnutls_ocsp_status_request_enable_client: * @session: is a #gnutls_session_t type. - * @responder_id: array with #gnutls_datum_t with DER data of responder id - * @responder_id_size: number of members in @responder_id array - * @extensions: a #gnutls_datum_t with DER encoded OCSP extensions + * @responder_id: ignored, must be %NULL + * @responder_id_size: ignored, must be zero + * @extensions: ignored, must be %NULL * * This function is to be used by clients to request OCSP response * from the server, using the "status_request" TLS extension. Only - * OCSP status type is supported. A typical server has a single - * OCSP response cached, so @responder_id and @extensions - * should be null. + * OCSP status type is supported. + * + * Previous versions of GnuTLS supported setting @responder_id and + * @extensions fields, but due to the difficult semantics of the + * parameter usage, and other issues, this support was removed + * since 3.6.0 and these parameters must be set to %NULL. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, * otherwise a negative error code is returned. @@ -348,7 +304,7 @@ gnutls_ocsp_status_request_enable_client(gnutls_session_t session, gnutls_datum_t * extensions) { status_request_ext_st *priv; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; if (session->security_parameters.entity == GNUTLS_SERVER) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); @@ -357,257 +313,37 @@ gnutls_ocsp_status_request_enable_client(gnutls_session_t session, if (priv == NULL) return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - priv->responder_id = responder_id; - priv->responder_id_size = responder_id_size; - if (extensions) { - priv->request_extensions.data = extensions->data; - priv->request_extensions.size = extensions->size; - } - - _gnutls_ext_set_session_data(session, + _gnutls_hello_ext_set_priv(session, GNUTLS_EXTENSION_STATUS_REQUEST, epriv); return 0; } -/** - * gnutls_ocsp_status_request_get: - * @session: is a #gnutls_session_t type. - * @response: a #gnutls_datum_t with DER encoded OCSP response - * - * This function returns the OCSP status response received - * from the TLS server. The @response should be treated as - * constant. If no OCSP response is available then - * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, - * otherwise a negative error code is returned. - * - * Since: 3.1.3 - **/ -int -gnutls_ocsp_status_request_get(gnutls_session_t session, - gnutls_datum_t * response) -{ - status_request_ext_st *priv; - extension_priv_data_t epriv; - int ret; - - if (session->security_parameters.entity == GNUTLS_SERVER) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - - ret = _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_STATUS_REQUEST, - &epriv); - if (ret < 0) - return gnutls_assert_val(ret); - - priv = epriv; - - if (priv == NULL || priv->response.data == NULL) - return - gnutls_assert_val - (GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); - - response->data = priv->response.data; - response->size = priv->response.size; - - return 0; -} - -/** - * gnutls_certificate_set_ocsp_status_request_function: - * @sc: is a #gnutls_certificate_credentials_t type. - * @ocsp_func: function pointer to OCSP status request callback. - * @ptr: opaque pointer passed to callback function - * - * This function is to be used by server to register a callback to - * handle OCSP status requests from the client. The callback will be - * invoked if the client supplied a status-request OCSP extension. - * The callback function prototype is: - * - * typedef int (*gnutls_status_request_ocsp_func) - * (gnutls_session_t session, void *ptr, gnutls_datum_t *ocsp_response); - * - * The callback will be invoked if the client requests an OCSP certificate - * status. The callback may return %GNUTLS_E_NO_CERTIFICATE_STATUS, if - * there is no recent OCSP response. If the callback returns %GNUTLS_E_SUCCESS, - * it is expected to have the @ocsp_response field set with a valid (DER-encoded) - * OCSP response. The response must be a value allocated using gnutls_malloc(), - * and will be deinitialized by the caller. - * - * It is possible to set a specific callback for each provided certificate - * using gnutls_certificate_set_ocsp_status_request_function2(). - * - * Since: 3.1.3 - **/ -void -gnutls_certificate_set_ocsp_status_request_function -(gnutls_certificate_credentials_t sc, -gnutls_status_request_ocsp_func ocsp_func, void *ptr) -{ - - sc->glob_ocsp_func = ocsp_func; - sc->glob_ocsp_func_ptr = ptr; -} -/** - * gnutls_certificate_set_ocsp_status_request_function2: - * @sc: is a #gnutls_certificate_credentials_t type. - * @idx: is a certificate index as returned by gnutls_certificate_set_key() and friends - * @ocsp_func: function pointer to OCSP status request callback. - * @ptr: opaque pointer passed to callback function - * - * This function is to be used by server to register a callback to - * handle OCSP status requests that correspond to the indexed certificate - * from the client. The callback will be invoked if the client supplied a - * status-request OCSP extension. - * - * The callback function prototype is: - * - * typedef int (*gnutls_status_request_ocsp_func) - * (gnutls_session_t session, void *ptr, gnutls_datum_t *ocsp_response); - * - * The callback will be invoked if the client requests an OCSP certificate - * status. The callback may return %GNUTLS_E_NO_CERTIFICATE_STATUS, if - * there is no recent OCSP response. If the callback returns %GNUTLS_E_SUCCESS, - * it is expected to have the @ocsp_response field set with a valid (DER-encoded) - * OCSP response. The response must be a value allocated using gnutls_malloc(), - * and will be deinitialized by the caller. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, - * otherwise a negative error code is returned. - * - * Since: 3.5.5 - **/ -int -gnutls_certificate_set_ocsp_status_request_function2 -(gnutls_certificate_credentials_t sc, unsigned idx, gnutls_status_request_ocsp_func ocsp_func, void *ptr) -{ - if (idx >= sc->ncerts) - return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); - - sc->certs[idx].ocsp_func = ocsp_func; - sc->certs[idx].ocsp_func_ptr = ptr; - - return 0; -} - -static int file_ocsp_func(gnutls_session_t session, void *ptr, - gnutls_datum_t * ocsp_response) -{ - int ret; - const char *file = ptr; - - ret = gnutls_load_file(file, ocsp_response); - if (ret < 0) - return gnutls_assert_val(GNUTLS_E_NO_CERTIFICATE_STATUS); - - return 0; -} - -/** - * gnutls_certificate_set_ocsp_status_request_file: - * @sc: is a credentials structure. - * @response_file: a filename of the OCSP response - * @idx: is a certificate index as returned by gnutls_certificate_set_key() and friends - * - * This function sets the filename of an OCSP response, that will be - * sent to the client if requests an OCSP certificate status for - * the certificate chain specified by @idx. - * - * This is a convenience function which may be inefficient on busy servers since - * the file is opened on every access. Use - * gnutls_certificate_set_ocsp_status_request_function2() to fine-tune - * file accesses. - * - * Note: the ability to set multiple OCSP responses per credential - * structure via @idx was added in version 3.5.6 with the - * %GNUTLS_CERTIFICATE_API_V2 flag. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, - * otherwise a negative error code is returned. - * - * Since: 3.1.3 - **/ -int -gnutls_certificate_set_ocsp_status_request_file -(gnutls_certificate_credentials_t sc, const char *response_file, - unsigned idx) -{ - if (idx >= sc->ncerts) - return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); - - gnutls_free(sc->certs[idx].ocsp_response_file); - sc->certs[idx].ocsp_response_file = gnutls_strdup(response_file); - if (sc->certs[idx].ocsp_response_file == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - - gnutls_certificate_set_ocsp_status_request_function2(sc, idx, file_ocsp_func, sc->certs[idx].ocsp_response_file); - - return 0; -} - -static void _gnutls_status_request_deinit_data(extension_priv_data_t epriv) +static void _gnutls_status_request_deinit_data(gnutls_ext_priv_data_t epriv) { status_request_ext_st *priv = epriv; if (priv == NULL) return; - deinit_responder_id(priv); - gnutls_free(priv->request_extensions.data); - gnutls_free(priv->response.data); - gnutls_free(priv); -} - -static int -_gnutls_status_request_pack(extension_priv_data_t epriv, - gnutls_buffer_st * ps) -{ - status_request_ext_st *priv = epriv; - int ret; - - BUFFER_APPEND_PFX4(ps, priv->response.data, priv->response.size); - - return 0; - -} - -static int -_gnutls_status_request_unpack(gnutls_buffer_st * ps, - extension_priv_data_t * epriv) -{ - status_request_ext_st *priv; - int ret; - - priv = gnutls_calloc(1, sizeof(*priv)); - if (priv == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - BUFFER_POP_DATUM(ps, &priv->response); - - *epriv = priv; - - return 0; - - error: + gnutls_free(priv->sresp.data); gnutls_free(priv); - return ret; } -const extension_entry_st ext_mod_status_request = { +const hello_ext_entry_st ext_mod_status_request = { .name = "OCSP Status Request", - .type = GNUTLS_EXTENSION_STATUS_REQUEST, - .parse_type = _GNUTLS_EXT_TLS_POST_CS, + .tls_id = STATUS_REQUEST_TLS_ID, + .gid = GNUTLS_EXTENSION_STATUS_REQUEST, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, + .client_parse_point = _GNUTLS_EXT_TLS_POST_CS, + .server_parse_point = _GNUTLS_EXT_TLS_POST_CS, .recv_func = _gnutls_status_request_recv_params, .send_func = _gnutls_status_request_send_params, - .pack_func = _gnutls_status_request_pack, - .unpack_func = _gnutls_status_request_unpack, - .deinit_func = _gnutls_status_request_deinit_data + .deinit_func = _gnutls_status_request_deinit_data, + .cannot_be_overriden = 1 }; /* Functions to be called from handshake */ @@ -619,54 +355,105 @@ _gnutls_send_server_certificate_status(gnutls_session_t session, int again) uint8_t *data; int data_size = 0; int ret; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; status_request_ext_st *priv; + if (!(session->internals.hsk_flags & HSK_OCSP_REQUESTED)) + return 0; + if (again == 0) { ret = - _gnutls_ext_get_session_data(session, - GNUTLS_EXTENSION_STATUS_REQUEST, - &epriv); + _gnutls_hello_ext_get_priv(session, + GNUTLS_EXTENSION_STATUS_REQUEST, + &epriv); if (ret < 0) return 0; priv = epriv; - if (!priv->response.size) + if (!priv->sresp.size) return 0; - data_size = priv->response.size + 4; + data_size = priv->sresp.size + 4; bufel = _gnutls_handshake_alloc(session, data_size); if (!bufel) { - _gnutls_free_datum(&priv->response); + _gnutls_free_datum(&priv->sresp); return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); } data = _mbuffer_get_udata_ptr(bufel); data[0] = 0x01; - _gnutls_write_uint24(priv->response.size, &data[1]); - memcpy(&data[4], priv->response.data, priv->response.size); + _gnutls_write_uint24(priv->sresp.size, &data[1]); + memcpy(&data[4], priv->sresp.data, priv->sresp.size); - _gnutls_free_datum(&priv->response); + _gnutls_free_datum(&priv->sresp); } return _gnutls_send_handshake(session, data_size ? bufel : NULL, GNUTLS_HANDSHAKE_CERTIFICATE_STATUS); } +int _gnutls_parse_ocsp_response(gnutls_session_t session, const uint8_t *data, ssize_t data_size, gnutls_datum_t *resp) +{ + int ret; + ssize_t r_size; + + resp->data = 0; + resp->size = 0; + + /* minimum message is type (1) + response (3) + data */ + if (data_size < 4) + return + gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + if (data[0] != 0x01) { + gnutls_assert(); + _gnutls_handshake_log("EXT[%p]: unknown status_type %d\n", + session, data[0]); + return 0; + } + + DECR_LENGTH_RET(data_size, 1, + GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + data++; + + DECR_LENGTH_RET(data_size, 3, + GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + r_size = _gnutls_read_uint24(data); + data += 3; + + DECR_LENGTH_RET(data_size, r_size, + GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + if (r_size < 1) + return + gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + ret = _gnutls_set_datum(resp, data, r_size); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + int _gnutls_recv_server_certificate_status(gnutls_session_t session) { uint8_t *data; - int data_size; - size_t r_size; + ssize_t data_size; gnutls_buffer_st buf; int ret; + gnutls_datum_t resp; status_request_ext_st *priv = NULL; - extension_priv_data_t epriv; + gnutls_ext_priv_data_t epriv; + cert_auth_info_t info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); + + if (info == NULL) + return 0; ret = - _gnutls_ext_get_session_data(session, + _gnutls_hello_ext_get_priv(session, GNUTLS_EXTENSION_STATUS_REQUEST, &epriv); if (ret < 0) @@ -688,42 +475,27 @@ int _gnutls_recv_server_certificate_status(gnutls_session_t session) data = buf.data; data_size = buf.length; - /* minimum message is type (1) + response (3) + data */ if (data_size == 0) { ret = 0; goto error; - } else if (data_size < 4) { - ret = - gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); - goto error; } - if (data[0] != 0x01) { + ret = _gnutls_parse_ocsp_response(session, data, data_size, &resp); + if (ret < 0) { gnutls_assert(); - _gnutls_handshake_log("EXT[%p]: unknown status_type %d\n", - session, data[0]); - ret = 0; goto error; } - DECR_LENGTH_COM(data_size, 1, ret = - GNUTLS_E_UNEXPECTED_PACKET_LENGTH; - goto error); - data++; - - DECR_LENGTH_COM(data_size, 3, ret = - GNUTLS_E_UNEXPECTED_PACKET_LENGTH; - goto error); - r_size = _gnutls_read_uint24(data); - data += 3; - - DECR_LENGTH_COM(data_size, r_size, ret = - GNUTLS_E_UNEXPECTED_PACKET_LENGTH; - goto error); - - ret = _gnutls_set_datum(&priv->response, data, r_size); - if (ret < 0) - goto error; + if (resp.data && resp.size > 0) { + info->raw_ocsp_list = gnutls_malloc(sizeof(gnutls_datum_t)); + if (info->raw_ocsp_list == NULL) { + ret = GNUTLS_E_MEMORY_ERROR; + goto error; + } + info->raw_ocsp_list[0].data = resp.data; + info->raw_ocsp_list[0].size = resp.size; + info->nocsp = 1; + } ret = 0; @@ -733,46 +505,4 @@ int _gnutls_recv_server_certificate_status(gnutls_session_t session) return ret; } -/** - * gnutls_ocsp_status_request_is_checked: - * @session: is a gnutls session - * @flags: should be zero or %GNUTLS_OCSP_SR_IS_AVAIL - * - * When flags are zero this function returns non-zero if a valid OCSP status - * response was included in the TLS handshake. That is, an OCSP status response - * which is not too old or superseded. It returns zero otherwise. - * - * When the flag %GNUTLS_OCSP_SR_IS_AVAIL is specified, the function - * returns non-zero if an OCSP status response was included in the handshake - * even if it was invalid. Otherwise, if no OCSP status response was included, - * it returns zero. The %GNUTLS_OCSP_SR_IS_AVAIL flag was introduced in GnuTLS 3.4.0. - * - * This is a helper function when needing to decide whether to perform an - * explicit OCSP validity check on the peer's certificate. Should be called after - * any of gnutls_certificate_verify_peers*() are called. - * - * Returns: non zero if the response was valid, or a zero if it wasn't sent, - * or sent and was invalid. - * - * Since: 3.1.4 - **/ -int -gnutls_ocsp_status_request_is_checked(gnutls_session_t session, - unsigned int flags) -{ - int ret; - gnutls_datum_t data; - - if (flags & GNUTLS_OCSP_SR_IS_AVAIL) { - ret = gnutls_ocsp_status_request_get(session, &data); - if (ret < 0) - return gnutls_assert_val(0); - - if (data.data == NULL) - return gnutls_assert_val(0); - return 1; - } - return session->internals.ocsp_check_ok; -} - #endif diff --git a/lib/ext/status_request.h b/lib/ext/status_request.h index 81809b1f65..dc1d233ea2 100644 --- a/lib/ext/status_request.h +++ b/lib/ext/status_request.h @@ -16,20 +16,26 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef EXT_STATUS_REQUEST_H -#define EXT_STATUS_REQUEST_H +#ifndef GNUTLS_LIB_EXT_STATUS_REQUEST_H +#define GNUTLS_LIB_EXT_STATUS_REQUEST_H -#include +#include -extern const extension_entry_st ext_mod_status_request; +#define STATUS_REQUEST_TLS_ID 5 + +extern const hello_ext_entry_st ext_mod_status_request; int _gnutls_send_server_certificate_status(gnutls_session_t session, int again); int _gnutls_recv_server_certificate_status(gnutls_session_t session); -#endif +int _gnutls_parse_ocsp_response(gnutls_session_t session, const uint8_t *data, + ssize_t data_size, + gnutls_datum_t *resp); + +#endif /* GNUTLS_LIB_EXT_STATUS_REQUEST_H */ diff --git a/lib/ext/supported_groups.c b/lib/ext/supported_groups.c new file mode 100644 index 0000000000..56e514a087 --- /dev/null +++ b/lib/ext/supported_groups.c @@ -0,0 +1,269 @@ +/* + * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* This file contains the code for the Supported Groups extension (rfc7919). + * This extension was previously named Supported Elliptic Curves under TLS 1.2. + */ + +#include "ext/supported_groups.h" +#include "str.h" +#include "num.h" +#include "auth/psk.h" +#include "auth/cert.h" +#include "auth/anon.h" +#include "algorithms.h" +#include + + +static int _gnutls_supported_groups_recv_params(gnutls_session_t session, + const uint8_t * data, + size_t data_size); +static int _gnutls_supported_groups_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata); + + +const hello_ext_entry_st ext_mod_supported_groups = { + .name = "Supported Groups", + .tls_id = 10, + .gid = GNUTLS_EXTENSION_SUPPORTED_GROUPS, + .client_parse_point = GNUTLS_EXT_TLS, + .server_parse_point = GNUTLS_EXT_TLS, + .validity = GNUTLS_EXT_FLAG_TLS | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_CLIENT_HELLO | + GNUTLS_EXT_FLAG_EE | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, + .recv_func = _gnutls_supported_groups_recv_params, + .send_func = _gnutls_supported_groups_send_params, + .pack_func = NULL, + .unpack_func = NULL, + .deinit_func = NULL, + .cannot_be_overriden = 1 +}; + + +static unsigned get_min_dh(gnutls_session_t session) +{ + gnutls_certificate_credentials_t cert_cred; + gnutls_psk_server_credentials_t psk_cred; + gnutls_anon_server_credentials_t anon_cred; + unsigned level = 0; + + cert_cred = (gnutls_certificate_credentials_t)_gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + psk_cred = (gnutls_psk_server_credentials_t)_gnutls_get_cred(session, GNUTLS_CRD_PSK); + anon_cred = (gnutls_anon_server_credentials_t)_gnutls_get_cred(session, GNUTLS_CRD_ANON); + + if (cert_cred) { + level = cert_cred->dh_sec_param; + } else if (psk_cred) { + level = psk_cred->dh_sec_param; + } else if (anon_cred) { + level = anon_cred->dh_sec_param; + } + + if (level) + return gnutls_sec_param_to_pk_bits(GNUTLS_PK_DH, level); + + return 0; +} + +/* + * In case of a server: if a SUPPORTED_GROUPS extension type is received then it stores + * into the session security parameters the new value. The server may use gnutls_session_certificate_type_get(), + * to access it. + * + * In case of a client: If supported_eccs have been specified then we send the extension. + * + */ +static int +_gnutls_supported_groups_recv_params(gnutls_session_t session, + const uint8_t * data, size_t data_size) +{ + int i; + uint16_t len; + const uint8_t *p = data; + const gnutls_group_entry_st *group = NULL; + unsigned have_ffdhe = 0; + unsigned tls_id; + unsigned min_dh; + unsigned j; + int serv_ec_idx, serv_dh_idx; /* index in server's priority listing */ + int cli_ec_pos, cli_dh_pos; /* position in listing sent by client */ + + if (session->security_parameters.entity == GNUTLS_CLIENT) { + /* A client shouldn't receive this extension in TLS1.2. It is + * possible to read that message under TLS1.3 as an encrypted + * extension. */ + return 0; + } else { /* SERVER SIDE - we must check if the sent supported ecc type is the right one + */ + if (data_size < 2) + return + gnutls_assert_val + (GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + + DECR_LEN(data_size, 2); + len = _gnutls_read_uint16(p); + p += 2; + + if (len % 2 != 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + DECR_LEN(data_size, len); + + /* we figure what is the minimum DH allowed for this session, if any */ + min_dh = get_min_dh(session); + + serv_ec_idx = serv_dh_idx = -1; + cli_ec_pos = cli_dh_pos = -1; + + /* This extension is being processed prior to a ciphersuite being selected, + * so we cannot rely on ciphersuite information. */ + for (i = 0; i < len; i += 2) { + if (have_ffdhe == 0 && p[i] == 0x01) + have_ffdhe = 1; + + tls_id = _gnutls_read_uint16(&p[i]); + group = _gnutls_tls_id_to_group(tls_id); + + _gnutls_handshake_log("EXT[%p]: Received group %s (0x%x)\n", session, group?group->name:"unknown", tls_id); + if (group == NULL) + continue; + + if (min_dh > 0 && group->prime && group->prime->size*8 < min_dh) + continue; + + /* we simulate _gnutls_session_supports_group, but we prioritize if + * %SERVER_PRECEDENCE is given */ + for (j = 0; j < session->internals.priorities->groups.size; j++) { + if (session->internals.priorities->groups.entry[j]->id == group->id) { + if (session->internals.priorities->server_precedence) { + if (group->pk == GNUTLS_PK_DH) { + if (serv_dh_idx != -1 && (int)j > serv_dh_idx) + break; + serv_dh_idx = j; + cli_dh_pos = i; + } else if (IS_EC(group->pk)) { + if (serv_ec_idx != -1 && (int)j > serv_ec_idx) + break; + serv_ec_idx = j; + cli_ec_pos = i; + } + } else { + if (group->pk == GNUTLS_PK_DH) { + if (cli_dh_pos != -1) + break; + cli_dh_pos = i; + serv_dh_idx = j; + } else if (IS_EC(group->pk)) { + if (cli_ec_pos != -1) + break; + cli_ec_pos = i; + serv_ec_idx = j; + } + } + break; + } + } + } + + /* serv_dh/ec_pos contain the index of the groups we want to use. + */ + if (serv_dh_idx != -1) { + session->internals.cand_dh_group = session->internals.priorities->groups.entry[serv_dh_idx]; + session->internals.cand_group = session->internals.cand_dh_group; + } + + if (serv_ec_idx != -1) { + session->internals.cand_ec_group = session->internals.priorities->groups.entry[serv_ec_idx]; + if (session->internals.cand_group == NULL || + (session->internals.priorities->server_precedence && serv_ec_idx < serv_dh_idx) || + (!session->internals.priorities->server_precedence && cli_ec_pos < cli_dh_pos)) { + session->internals.cand_group = session->internals.cand_ec_group; + } + } + + if (session->internals.cand_group) + _gnutls_handshake_log("EXT[%p]: Selected group %s\n", session, session->internals.cand_group->name); + + if (have_ffdhe) + session->internals.hsk_flags |= HSK_HAVE_FFDHE; + } + + return 0; +} + +/* returns data_size or a negative number on failure + */ +static int +_gnutls_supported_groups_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata) +{ + unsigned len, i; + int ret; + uint16_t p; + + /* this extension is only being sent on client side */ + if (session->security_parameters.entity == GNUTLS_CLIENT) { + + len = session->internals.priorities->groups.size; + if (len > 0) { + ret = + _gnutls_buffer_append_prefix(extdata, 16, + len * 2); + if (ret < 0) + return gnutls_assert_val(ret); + + for (i = 0; i < len; i++) { + p = session->internals.priorities->groups.entry[i]->tls_id; + + _gnutls_handshake_log("EXT[%p]: Sent group %s (0x%x)\n", session, + session->internals.priorities->groups.entry[i]->name, (unsigned)p); + + ret = + _gnutls_buffer_append_prefix(extdata, + 16, p); + if (ret < 0) + return gnutls_assert_val(ret); + } + return (len + 1) * 2; + } + + } + + return 0; +} + +/* Returns 0 if the given ECC curve is allowed in the current + * session. A negative error value is returned otherwise. + */ +int +_gnutls_session_supports_group(gnutls_session_t session, + unsigned int group) +{ + unsigned i; + + for (i = 0; i < session->internals.priorities->groups.size; i++) { + if (session->internals.priorities->groups.entry[i]->id == group) + return 0; + } + + return GNUTLS_E_ECC_UNSUPPORTED_CURVE; +} diff --git a/lib/ext/supported_groups.h b/lib/ext/supported_groups.h new file mode 100644 index 0000000000..769b3be8e1 --- /dev/null +++ b/lib/ext/supported_groups.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_EXT_SUPPORTED_GROUPS_H +#define GNUTLS_LIB_EXT_SUPPORTED_GROUPS_H + +#include + +extern const hello_ext_entry_st ext_mod_supported_groups; + +int +_gnutls_session_supports_group(gnutls_session_t session, + unsigned int group); + +#endif /* GNUTLS_LIB_EXT_SUPPORTED_GROUPS_H */ diff --git a/lib/ext/supported_versions.c b/lib/ext/supported_versions.c new file mode 100644 index 0000000000..69193b60a3 --- /dev/null +++ b/lib/ext/supported_versions.c @@ -0,0 +1,239 @@ +/* + * Copyright (C) 2001-2012 Free Software Foundation, Inc. + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* This file contains the code for the Max Record Size TLS extension. + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "num.h" +#include +#include +#include "handshake.h" + +static int supported_versions_recv_params(gnutls_session_t session, + const uint8_t * data, + size_t data_size); +static int supported_versions_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata); + +const hello_ext_entry_st ext_mod_supported_versions = { + .name = "Supported Versions", + .tls_id = 43, + .gid = GNUTLS_EXTENSION_SUPPORTED_VERSIONS, + .validity = GNUTLS_EXT_FLAG_CLIENT_HELLO | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO | + GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO | GNUTLS_EXT_FLAG_HRR|GNUTLS_EXT_FLAG_TLS, + .client_parse_point = GNUTLS_EXT_VERSION_NEG, /* force parsing prior to EXT_TLS extensions */ + .server_parse_point = GNUTLS_EXT_VERSION_NEG, + .recv_func = supported_versions_recv_params, + .send_func = supported_versions_send_params, + .pack_func = NULL, + .unpack_func = NULL, + .deinit_func = NULL, + .cannot_be_overriden = 1 +}; + +static int +supported_versions_recv_params(gnutls_session_t session, + const uint8_t * data, size_t data_size) +{ + const version_entry_st *vers; + uint8_t major, minor; + size_t bytes; + int ret; + + if (session->security_parameters.entity == GNUTLS_SERVER) { + const version_entry_st *old_vers; + const version_entry_st *cli_vers = NULL; + + vers = _gnutls_version_max(session); + old_vers = get_version(session); + + /* do not parse this extension when we haven't TLS1.3 + * enabled. That is because we cannot handle earlier protocol + * negotiotation (such as SSL3.0) with this */ + if (vers && !vers->tls13_sem) + return 0; + + DECR_LEN(data_size, 1); + bytes = data[0]; + data++; + + if (bytes % 2 == 1) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + DECR_LEN(data_size, bytes); + + if (data_size != 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + while (bytes > 0) { + major = data[0]; + minor = data[1]; + data += 2; + bytes -= 2; + + _gnutls_handshake_log("EXT[%p]: Found version: %d.%d\n", + session, (int)major, (int)minor); + + if (!_gnutls_nversion_is_supported(session, major, minor)) + continue; + + /* Prefer the latest possible version + * regardless of the client's precedence. See + * https://gitlab.com/gnutls/gnutls/issues/837 + * for the rationale. + */ + if (!cli_vers || + major > cli_vers->major || + (major == cli_vers->major && + minor > cli_vers->minor)) + cli_vers = nversion_to_entry(major, minor); + } + + if (!cli_vers) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + + session->security_parameters.pversion = cli_vers; + + _gnutls_handshake_log("EXT[%p]: Negotiated version: %d.%d\n", + session, + (int)cli_vers->major, + (int)cli_vers->minor); + + if (old_vers != cli_vers) { + /* regenerate the random value to set + * downgrade sentinel if necessary + */ + ret = _gnutls_gen_server_random(session, cli_vers->id); + if (ret < 0) + return gnutls_assert_val(ret); + } + + return 0; + } else { /* client */ + + if (!have_creds_for_tls13(session)) { + /* if we don't have certificate or PSK (which work under TLS1.3) + * don't try to negotiate version using the extension. We fallback + * instead to the normal TLS negotiation which has a cap on TLS1.2. + */ + return 0; + } + + DECR_LEN(data_size, 2); + + if (data_size != 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + major = data[0]; + minor = data[1]; + + vers = nversion_to_entry(major, minor); + if (!vers) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + + set_adv_version(session, major, minor); + + _gnutls_handshake_log("EXT[%p]: Negotiated version: %d.%d\n", + session, (int)major, (int)minor); + + if (!vers->tls13_sem) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + ret = _gnutls_negotiate_version(session, major, minor, 1); + if (ret < 0) { + gnutls_assert(); + return ret; + } + } + + return 0; +} + +/* returns data_size or a negative number on failure + */ +static int +supported_versions_send_params(gnutls_session_t session, + gnutls_buffer_st * extdata) +{ + uint8_t versions[32]; + size_t versions_size; + const version_entry_st *vers; + int ret; + + /* this function sends the client extension data (dnsname) */ + if (session->security_parameters.entity == GNUTLS_CLIENT) { + vers = _gnutls_version_max(session); + + /* Do not advertise this extension if we are not doing certificate + * or PSK authentication; i.e., do not try to do TLS1.3 if we have + * credentials which do not fit it. */ + if (!have_creds_for_tls13(session)) { + /* if we don't have certificate or PSK (which work under TLS1.3) + * don't try to negotiate version using the extension. We fallback + * instead to the normal TLS negotiation which has a cap on TLS1.2. + */ + return 0; + } + + /* do not advertise this extension when we haven't TLS1.3 + * enabled. */ + if (vers && !vers->tls13_sem) + return 0; + + ret = _gnutls_write_supported_versions(session, versions, sizeof(versions)); + if (ret <= 0) /* if this function doesn't succeed do not send anything */ + return 0; + + versions_size = ret; + + ret = _gnutls_buffer_append_data_prefix(extdata, 8, versions, versions_size); + if (ret < 0) + return gnutls_assert_val(ret); + + return versions_size+2; + } else { + vers = get_version(session); + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + /* don't use this extension to negotiate versions <= 1.2, + * pretend we don't support it, so that we use a single + * code path to negotiate these protocols. */ + if (!vers->tls13_sem) + return 0; + + ret = _gnutls_buffer_append_data(extdata, &vers->major, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_buffer_append_data(extdata, &vers->minor, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + return 2; + } + + return 0; +} diff --git a/lib/ext/supported_versions.h b/lib/ext/supported_versions.h new file mode 100644 index 0000000000..f7dfb9ebb9 --- /dev/null +++ b/lib/ext/supported_versions.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_EXT_SUPPORTED_VERSIONS_H +#define GNUTLS_LIB_EXT_SUPPORTED_VERSIONS_H + +#include + +extern const hello_ext_entry_st ext_mod_supported_versions; + +#endif /* GNUTLS_LIB_EXT_SUPPORTED_VERSIONS_H */ diff --git a/lib/extensions.c b/lib/extensions.c deleted file mode 100644 index a42c733615..0000000000 --- a/lib/extensions.c +++ /dev/null @@ -1,948 +0,0 @@ -/* - * Copyright (C) 2001-2016 Free Software Foundation, Inc. - * Copyright (C) 2015-2016 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos, Simon Josefsson - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* Functions that relate to the TLS hello extension parsing. - * Hello extensions are packets appended in the TLS hello packet, and - * allow for extra functionality. - */ - -#include "gnutls_int.h" -#include "extensions.h" -#include "errors.h" -#include "ext/max_record.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -static int ext_register(extension_entry_st * mod); -static void _gnutls_ext_unset_resumed_session_data(gnutls_session_t - session, uint16_t type); - -static extension_entry_st const *extfunc[MAX_EXT_TYPES+1] = { - &ext_mod_max_record_size, - &ext_mod_ext_master_secret, - &ext_mod_etm, -#ifdef ENABLE_OCSP - &ext_mod_status_request, -#endif -#ifdef ENABLE_OPENPGP - &ext_mod_cert_type, -#endif - &ext_mod_server_name, - &ext_mod_sr, -#ifdef ENABLE_SRP - &ext_mod_srp, -#endif -#ifdef ENABLE_HEARTBEAT - &ext_mod_heartbeat, -#endif -#ifdef ENABLE_SESSION_TICKETS - &ext_mod_session_ticket, -#endif - &ext_mod_supported_ecc, - &ext_mod_supported_ecc_pf, - &ext_mod_sig, -#ifdef ENABLE_DTLS_SRTP - &ext_mod_srtp, -#endif -#ifdef ENABLE_ALPN - &ext_mod_alpn, -#endif - /* This must be the last extension registered. - */ - &ext_mod_dumbfw, - NULL -}; - -static gnutls_ext_parse_type_t _gnutls_ext_parse_type(gnutls_session_t session, uint16_t type) -{ - size_t i; - - for (i=0;iinternals.rexts_size;i++) { - if (session->internals.rexts[i].type == type) - return session->internals.rexts[i].parse_type; - } - - for (i = 0; extfunc[i] != NULL; i++) { - if (extfunc[i]->type == type) - return extfunc[i]->parse_type; - } - - return GNUTLS_EXT_NONE; -} - -static gnutls_ext_recv_func -_gnutls_ext_func_recv(gnutls_session_t session, uint16_t type, gnutls_ext_parse_type_t parse_type) -{ - size_t i; - - for (i=0;iinternals.rexts_size;i++) { - if (session->internals.rexts[i].type == type) - if (parse_type == GNUTLS_EXT_ANY - || session->internals.rexts[i].parse_type == parse_type) - return session->internals.rexts[i].recv_func; - } - - for (i = 0; extfunc[i] != NULL; i++) - if (extfunc[i]->type == type) - if (parse_type == GNUTLS_EXT_ANY - || extfunc[i]->parse_type == parse_type) - return extfunc[i]->recv_func; - - return NULL; -} - -static gnutls_ext_deinit_data_func _gnutls_ext_func_deinit(gnutls_session_t session, uint16_t type) -{ - size_t i; - - for (i=0;iinternals.rexts_size;i++) { - if (session->internals.rexts[i].type == type) - return session->internals.rexts[i].deinit_func; - } - - for (i = 0; extfunc[i] != NULL; i++) - if (extfunc[i]->type == type) - return extfunc[i]->deinit_func; - - return NULL; -} - -static gnutls_ext_unpack_func _gnutls_ext_func_unpack(gnutls_session_t session, uint16_t type) -{ - size_t i; - - for (i=0;iinternals.rexts_size;i++) { - if (session->internals.rexts[i].type == type) - return session->internals.rexts[i].unpack_func; - } - - for (i = 0; extfunc[i] != NULL; i++) - if (extfunc[i]->type == type) - return extfunc[i]->unpack_func; - - return NULL; -} - - -/** - * gnutls_ext_get_name: - * @ext: is a TLS extension numeric ID - * - * Convert a TLS extension numeric ID to a printable string. - * - * Returns: a pointer to a string that contains the name of the - * specified cipher, or %NULL. - **/ -const char *gnutls_ext_get_name(unsigned int ext) -{ - size_t i; - - for (i = 0; extfunc[i] != NULL; i++) - if (extfunc[i]->type == ext) - return extfunc[i]->name; - - return NULL; -} - -/* Checks if the extension @type provided has been requested - * by us (in client side). In that case it returns zero, - * otherwise a negative error value. - */ -int -_gnutls_extension_list_check(gnutls_session_t session, uint16_t type) -{ - int i; - - for (i = 0; i < session->internals.extensions_sent_size; i++) { - if (type == session->internals.extensions_sent[i]) - return 0; /* ok found */ - } - - return GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION; -} - -int -_gnutls_parse_extensions(gnutls_session_t session, - gnutls_ext_parse_type_t parse_type, - const uint8_t * data, int data_size) -{ - int next, ret; - int pos = 0; - uint16_t type; - const uint8_t *sdata; - gnutls_ext_recv_func ext_recv; - uint16_t size; - -#ifdef DEBUG - int i; - - if (session->security_parameters.entity == GNUTLS_CLIENT) - for (i = 0; i < session->internals.extensions_sent_size; - i++) { - _gnutls_handshake_log - ("EXT[%d]: expecting extension '%s'\n", - session, - gnutls_ext_get_name(session->internals. - extensions_sent - [i])); - } -#endif - if (data_size == 0) - return 0; - - DECR_LENGTH_RET(data_size, 2, GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); - next = _gnutls_read_uint16(data); - pos += 2; - - DECR_LENGTH_RET(data_size, next, GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); - - if (next == 0 && data_size == 0) /* field is present, but has zero length? Ignore it. */ - return 0; - else if (data_size > 0) /* forbid unaccounted data */ - return gnutls_assert_val(GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); - - do { - DECR_LENGTH_RET(next, 2, GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); - type = _gnutls_read_uint16(&data[pos]); - pos += 2; - - if (session->security_parameters.entity == GNUTLS_CLIENT) { - if ((ret = - _gnutls_extension_list_check(session, type)) < 0) { - _gnutls_debug_log("EXT[%p]: Received unexpected extension '%s/%d'\n", session, - gnutls_ext_get_name(type), (int)type); - gnutls_assert(); - return ret; - } - } - - DECR_LENGTH_RET(next, 2, GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); - size = _gnutls_read_uint16(&data[pos]); - pos += 2; - - DECR_LENGTH_RET(next, size, GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); - sdata = &data[pos]; - pos += size; - - ext_recv = _gnutls_ext_func_recv(session, type, parse_type); - if (ext_recv == NULL) { - _gnutls_handshake_log - ("EXT[%p]: Found extension '%s/%d'\n", session, - gnutls_ext_get_name(type), type); - - continue; - } - - /* only store the extension number if we support it */ - if (session->security_parameters.entity == GNUTLS_SERVER) { - _gnutls_extension_list_add(session, type); - } - - _gnutls_handshake_log - ("EXT[%p]: Parsing extension '%s/%d' (%d bytes)\n", - session, gnutls_ext_get_name(type), type, - size); - - if ((ret = ext_recv(session, sdata, size)) < 0) { - gnutls_assert(); - return ret; - } - } - while (next > 2); - - /* forbid leftovers */ - if (next > 0) - return gnutls_assert_val(GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); - - return 0; - -} - -/* Adds the extension we want to send in the extensions list. - * This list is used in client side to check whether the (later) received - * extensions are the ones we requested. - * - * In server side, this list is used to ensure we don't send - * extensions that we didn't receive a corresponding value. - */ -void _gnutls_extension_list_add(gnutls_session_t session, uint16_t type) -{ - - if (session->internals.extensions_sent_size < - MAX_EXT_TYPES) { - session->internals.extensions_sent[session-> - internals.extensions_sent_size] - = type; - session->internals.extensions_sent_size++; - } else { - _gnutls_handshake_log - ("extensions: Increase MAX_EXT_TYPES\n"); - } -} - -static -int send_extension(gnutls_session_t session, const extension_entry_st *p, - gnutls_buffer_st *extdata, gnutls_ext_parse_type_t parse_type) -{ - int size_pos, size, ret; - - if (p->send_func == NULL) - return 0; - - if (parse_type != GNUTLS_EXT_ANY - && p->parse_type != parse_type) - return 0; - - /* ensure we are sending only what we received */ - if (session->security_parameters.entity == GNUTLS_SERVER) { - if ((ret = - _gnutls_extension_list_check(session, p->type)) < 0) { - return 0; - } - } - - ret = _gnutls_buffer_append_prefix(extdata, 16, p->type); - if (ret < 0) - return gnutls_assert_val(ret); - - size_pos = extdata->length; - ret = _gnutls_buffer_append_prefix(extdata, 16, 0); - if (ret < 0) - return gnutls_assert_val(ret); - - size = p->send_func(session, extdata); - /* returning GNUTLS_E_INT_RET_0 means to send an empty - * extension of this type. - */ - if (size > 0 || size == GNUTLS_E_INT_RET_0) { - if (size == GNUTLS_E_INT_RET_0) - size = 0; - - /* write the real size */ - _gnutls_write_uint16(size, - &extdata->data[size_pos]); - - /* add this extension to the extension list - */ - if (session->security_parameters.entity == GNUTLS_CLIENT) - _gnutls_extension_list_add(session, p->type); - - _gnutls_handshake_log - ("EXT[%p]: Sending extension %s (%d bytes)\n", - session, p->name, size); - } else if (size < 0) { - gnutls_assert(); - return size; - } else if (size == 0) - extdata->length -= 4; /* reset type and size */ - - return 0; -} - -int -_gnutls_gen_extensions(gnutls_session_t session, - gnutls_buffer_st * extdata, - gnutls_ext_parse_type_t parse_type) -{ - int size; - int pos, ret; - size_t i, init_size = extdata->length; - const extension_entry_st *extp; - - pos = extdata->length; /* we will store length later on */ - - ret = _gnutls_buffer_append_prefix(extdata, 16, 0); - if (ret < 0) - return gnutls_assert_val(ret); - - for (i=0;iinternals.rexts_size;i++) { - extp = &session->internals.rexts[i]; - - ret = send_extension(session, extp, extdata, parse_type); - if (ret < 0) - return gnutls_assert_val(ret); - } - - for (i = 0; extfunc[i] != NULL; i++) { - extp = extfunc[i]; - - ret = send_extension(session, extp, extdata, parse_type); - if (ret < 0) - return gnutls_assert_val(ret); - } - - /* remove any initial data, and the size of the header */ - size = extdata->length - init_size - 2; - - if (size > UINT16_MAX) /* sent too many extensions */ - return gnutls_assert_val(GNUTLS_E_HANDSHAKE_TOO_LARGE); - - if (size > 0) - _gnutls_write_uint16(size, &extdata->data[pos]); - else if (size == 0) - extdata->length -= 2; /* the length bytes */ - - return size; -} - -int _gnutls_ext_init(void) -{ - return GNUTLS_E_SUCCESS; -} - -void _gnutls_ext_deinit(void) -{ - unsigned i; - for (i = 0; extfunc[i] != NULL; i++) { - if (extfunc[i]->free_struct != 0) { - gnutls_free((void*)extfunc[i]->name); - gnutls_free((void*)extfunc[i]); - extfunc[i] = NULL; - } - } -} - -static -int ext_register(extension_entry_st * mod) -{ - unsigned i = 0; - - while(extfunc[i] != NULL) { - i++; - } - - if (i >= MAX_EXT_TYPES-1) { - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - } - - extfunc[i] = mod; - extfunc[i+1] = NULL; - return GNUTLS_E_SUCCESS; -} - -static int pack_extension(gnutls_session_t session, const extension_entry_st *extp, - gnutls_buffer_st *packed) -{ - int ret; - int size_offset; - int cur_size; - gnutls_ext_priv_data_t data; - int rval = 0; - - ret = - _gnutls_ext_get_session_data(session, extp->type, - &data); - if (ret >= 0 && extp->pack_func != NULL) { - BUFFER_APPEND_NUM(packed, extp->type); - - size_offset = packed->length; - BUFFER_APPEND_NUM(packed, 0); - - cur_size = packed->length; - - ret = extp->pack_func(data, packed); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - rval = 1; - /* write the actual size */ - _gnutls_write_uint32(packed->length - cur_size, - packed->data + size_offset); - } - - return rval; -} - -int _gnutls_ext_pack(gnutls_session_t session, gnutls_buffer_st *packed) -{ - unsigned int i; - int ret; - int total_exts_pos; - int exts = 0; - - total_exts_pos = packed->length; - BUFFER_APPEND_NUM(packed, 0); - - for (i = 0; i < session->internals.rexts_size; i++) { - ret = pack_extension(session, &session->internals.rexts[i], packed); - if (ret < 0) - return gnutls_assert_val(ret); - - if (ret > 0) - exts++; - } - - for (i = 0; extfunc[i] != NULL; i++) { - ret = pack_extension(session, extfunc[i], packed); - if (ret < 0) - return gnutls_assert_val(ret); - - if (ret > 0) - exts++; - } - - _gnutls_write_uint32(exts, packed->data + total_exts_pos); - - return 0; -} - -void _gnutls_ext_restore_resumed_session(gnutls_session_t session) -{ - int i; - - /* clear everything except MANDATORY extensions */ - for (i = 0; i < MAX_EXT_TYPES; i++) { - if (session->internals.extension_int_data[i].set != 0 && - _gnutls_ext_parse_type(session, session-> - internals.extension_int_data[i]. - type) != GNUTLS_EXT_MANDATORY) { - _gnutls_ext_unset_session_data(session, - session->internals. - extension_int_data - [i].type); - } - } - - /* copy resumed to main */ - for (i = 0; i < MAX_EXT_TYPES; i++) { - if (session->internals.resumed_extension_int_data[i].set != - 0 - && _gnutls_ext_parse_type(session, session->internals. - resumed_extension_int_data - [i].type) != - GNUTLS_EXT_MANDATORY) { - _gnutls_ext_set_session_data(session, - session->internals. - resumed_extension_int_data - [i].type, - session->internals. - resumed_extension_int_data - [i].priv); - session->internals.resumed_extension_int_data[i]. - set = 0; - } - } - -} - - -static void -_gnutls_ext_set_resumed_session_data(gnutls_session_t session, - uint16_t type, - gnutls_ext_priv_data_t data) -{ - int i; - - for (i = 0; i < MAX_EXT_TYPES; i++) { - if (session->internals.resumed_extension_int_data[i]. - type == type - || session->internals.resumed_extension_int_data[i]. - set == 0) { - - if (session->internals. - resumed_extension_int_data[i].set != 0) - _gnutls_ext_unset_resumed_session_data - (session, type); - - session->internals.resumed_extension_int_data[i]. - type = type; - session->internals.resumed_extension_int_data[i]. - priv = data; - session->internals.resumed_extension_int_data[i]. - set = 1; - return; - } - } -} - -int _gnutls_ext_unpack(gnutls_session_t session, gnutls_buffer_st * packed) -{ - int i, ret; - gnutls_ext_priv_data_t data; - gnutls_ext_unpack_func unpack; - int max_exts = 0; - uint16_t type; - int size_for_type, cur_pos; - - - BUFFER_POP_NUM(packed, max_exts); - for (i = 0; i < max_exts; i++) { - BUFFER_POP_NUM(packed, type); - BUFFER_POP_NUM(packed, size_for_type); - - cur_pos = packed->length; - - unpack = _gnutls_ext_func_unpack(session, type); - if (unpack == NULL) { - gnutls_assert(); - return GNUTLS_E_PARSING_ERROR; - } - - ret = unpack(packed, &data); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - /* verify that unpack read the correct bytes */ - cur_pos = cur_pos - packed->length; - if (cur_pos /* read length */ != size_for_type) { - gnutls_assert(); - return GNUTLS_E_PARSING_ERROR; - } - - _gnutls_ext_set_resumed_session_data(session, type, data); - } - - return 0; - - error: - return ret; -} - -void -_gnutls_ext_unset_session_data(gnutls_session_t session, uint16_t type) -{ - gnutls_ext_deinit_data_func deinit; - gnutls_ext_priv_data_t data; - int ret, i; - - deinit = _gnutls_ext_func_deinit(session, type); - ret = _gnutls_ext_get_session_data(session, type, &data); - - if (ret >= 0 && deinit != NULL) { - deinit(data); - } - - for (i = 0; i < MAX_EXT_TYPES; i++) { - if (session->internals.extension_int_data[i].type == type) { - session->internals.extension_int_data[i].set = 0; - return; - } - } - -} - -static void -_gnutls_ext_unset_resumed_session_data(gnutls_session_t session, - uint16_t type) -{ - gnutls_ext_deinit_data_func deinit; - gnutls_ext_priv_data_t data; - int ret, i; - - deinit = _gnutls_ext_func_deinit(session, type); - ret = _gnutls_ext_get_resumed_session_data(session, type, &data); - - if (ret >= 0 && deinit != NULL) { - deinit(data); - } - - for (i = 0; i < MAX_EXT_TYPES; i++) { - if (session->internals.resumed_extension_int_data[i]. - type == type) { - session->internals.resumed_extension_int_data[i]. - set = 0; - return; - } - } - -} - -/* Deinitializes all data that are associated with TLS extensions. - */ -void _gnutls_ext_free_session_data(gnutls_session_t session) -{ - unsigned int i; - - for (i = 0; i < session->internals.rexts_size; i++) { - _gnutls_ext_unset_session_data(session, session->internals.rexts[i].type); - _gnutls_ext_unset_resumed_session_data(session, - session->internals.rexts[i].type); - } - - for (i = 0; extfunc[i] != NULL; i++) { - _gnutls_ext_unset_session_data(session, extfunc[i]->type); - _gnutls_ext_unset_resumed_session_data(session, - extfunc[i]->type); - } - -} - -/* This function allows an extension to store data in the current session - * and retrieve them later on. We use functions instead of a pointer to a - * private pointer, to allow API additions by individual extensions. - */ -void -_gnutls_ext_set_session_data(gnutls_session_t session, uint16_t type, - gnutls_ext_priv_data_t data) -{ - unsigned int i; - gnutls_ext_deinit_data_func deinit; - - deinit = _gnutls_ext_func_deinit(session, type); - - for (i = 0; i < MAX_EXT_TYPES; i++) { - if (session->internals.extension_int_data[i].type == type - || session->internals.extension_int_data[i].set == 0) { - if (session->internals.extension_int_data[i].set != - 0) { - if (deinit) - deinit(session->internals. - extension_int_data[i].priv); - } - session->internals.extension_int_data[i].type = - type; - session->internals.extension_int_data[i].priv = - data; - session->internals.extension_int_data[i].set = 1; - return; - } - } -} - -int -_gnutls_ext_get_session_data(gnutls_session_t session, - uint16_t type, gnutls_ext_priv_data_t * data) -{ - int i; - - for (i = 0; i < MAX_EXT_TYPES; i++) { - if (session->internals.extension_int_data[i].set != 0 && - session->internals.extension_int_data[i].type == type) - { - *data = - session->internals.extension_int_data[i].priv; - return 0; - } - } - return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; -} - -int -_gnutls_ext_get_resumed_session_data(gnutls_session_t session, - uint16_t type, - gnutls_ext_priv_data_t * data) -{ - int i; - - for (i = 0; i < MAX_EXT_TYPES; i++) { - if (session->internals.resumed_extension_int_data[i].set != - 0 - && session->internals.resumed_extension_int_data[i]. - type == type) { - *data = - session->internals. - resumed_extension_int_data[i].priv; - return 0; - } - } - return GNUTLS_E_INVALID_REQUEST; -} - -/** - * gnutls_ext_register: - * @name: the name of the extension to register - * @type: the numeric id of the extension - * @parse_type: the parse type of the extension (see gnutls_ext_parse_type_t) - * @recv_func: a function to receive the data - * @send_func: a function to send the data - * @deinit_func: a function deinitialize any private data - * @pack_func: a function which serializes the extension's private data (used on session packing for resumption) - * @unpack_func: a function which will deserialize the extension's private data - * - * This function will register a new extension type. The extension will remain - * registered until gnutls_global_deinit() is called. If the extension type - * is already registered then %GNUTLS_E_ALREADY_REGISTERED will be returned. - * - * Each registered extension can store temporary data into the gnutls_session_t - * structure using gnutls_ext_set_data(), and they can be retrieved using - * gnutls_ext_get_data(). - * - * This function is not thread safe. - * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. - * - * Since: 3.4.0 - **/ -int -gnutls_ext_register(const char *name, int type, gnutls_ext_parse_type_t parse_type, - gnutls_ext_recv_func recv_func, gnutls_ext_send_func send_func, - gnutls_ext_deinit_data_func deinit_func, gnutls_ext_pack_func pack_func, - gnutls_ext_unpack_func unpack_func) -{ - extension_entry_st *tmp_mod; - int ret; - unsigned i; - - for (i = 0; extfunc[i] != NULL; i++) { - if (extfunc[i]->type == type) - return gnutls_assert_val(GNUTLS_E_ALREADY_REGISTERED); - } - - tmp_mod = gnutls_calloc(1, sizeof(*tmp_mod)); - if (tmp_mod == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - - tmp_mod->name = gnutls_strdup(name); - tmp_mod->free_struct = 1; - tmp_mod->type = type; - tmp_mod->parse_type = parse_type; - tmp_mod->recv_func = recv_func; - tmp_mod->send_func = send_func; - tmp_mod->deinit_func = deinit_func; - tmp_mod->pack_func = pack_func; - tmp_mod->unpack_func = unpack_func; - - ret = ext_register(tmp_mod); - if (ret < 0) { - gnutls_free((void*)tmp_mod->name); - gnutls_free(tmp_mod); - } - return ret; -} - -/** - * gnutls_session_ext_register: - * @session: the session for which this extension will be set - * @name: the name of the extension to register - * @type: the numeric id of the extension - * @parse_type: the parse type of the extension (see gnutls_ext_parse_type_t) - * @recv_func: a function to receive the data - * @send_func: a function to send the data - * @deinit_func: a function deinitialize any private data - * @pack_func: a function which serializes the extension's private data (used on session packing for resumption) - * @unpack_func: a function which will deserialize the extension's private data - * @flags: must be zero or flags from %gnutls_ext_flags_t - * - * This function will register a new extension type. The extension will be - * only usable within the registered session. If the extension type - * is already registered then %GNUTLS_E_ALREADY_REGISTERED will be returned, - * unless the flag %GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL is specified. The latter - * flag when specified can be used to override certain extensions introduced - * after 3.6.0. It is expected to be used by applications which handle - * custom extensions that are not currently supported in GnuTLS, but direct - * support for them may be added in the future. - * - * Each registered extension can store temporary data into the gnutls_session_t - * structure using gnutls_ext_set_data(), and they can be retrieved using - * gnutls_ext_get_data(). - * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. - * - * Since: 3.5.5 - **/ -int -gnutls_session_ext_register(gnutls_session_t session, - const char *name, int type, gnutls_ext_parse_type_t parse_type, - gnutls_ext_recv_func recv_func, gnutls_ext_send_func send_func, - gnutls_ext_deinit_data_func deinit_func, gnutls_ext_pack_func pack_func, - gnutls_ext_unpack_func unpack_func, unsigned flags) -{ - extension_entry_st tmp_mod; - extension_entry_st *exts; - unsigned i; - - /* FIXME: handle GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL for new exts */ - for (i = 0; extfunc[i] != NULL; i++) { - if (extfunc[i]->type == type) - return gnutls_assert_val(GNUTLS_E_ALREADY_REGISTERED); - } - - tmp_mod.name = NULL; - tmp_mod.free_struct = 1; - tmp_mod.type = type; - tmp_mod.parse_type = parse_type; - tmp_mod.recv_func = recv_func; - tmp_mod.send_func = send_func; - tmp_mod.deinit_func = deinit_func; - tmp_mod.pack_func = pack_func; - tmp_mod.unpack_func = unpack_func; - - exts = gnutls_realloc(session->internals.rexts, (session->internals.rexts_size+1)*sizeof(*exts)); - if (exts == NULL) { - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - } - - session->internals.rexts = exts; - - memcpy(&session->internals.rexts[session->internals.rexts_size], &tmp_mod, sizeof(extension_entry_st)); - session->internals.rexts_size++; - - return 0; -} - -/** - * gnutls_ext_set_data: - * @session: a #gnutls_session_t opaque pointer - * @type: the numeric id of the extension - * @data: the private data to set - * - * This function allows an extension handler to store data in the current session - * and retrieve them later on. The set data will be deallocated using - * the gnutls_ext_deinit_data_func. - * - * Since: 3.4.0 - **/ -void -gnutls_ext_set_data(gnutls_session_t session, unsigned type, - gnutls_ext_priv_data_t data) -{ - _gnutls_ext_set_session_data(session, type, data); -} - -/** - * gnutls_ext_get_data: - * @session: a #gnutls_session_t opaque pointer - * @type: the numeric id of the extension - * @data: a pointer to the private data to retrieve - * - * This function retrieves any data previously stored with gnutls_ext_set_data(). - * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. - * - * Since: 3.4.0 - **/ -int -gnutls_ext_get_data(gnutls_session_t session, - unsigned type, gnutls_ext_priv_data_t *data) -{ - return _gnutls_ext_get_session_data(session, type, data); -} diff --git a/lib/extensions.h b/lib/extensions.h deleted file mode 100644 index b531ebae30..0000000000 --- a/lib/extensions.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2000-2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifndef GNUTLS_EXTENSIONS_H -#define GNUTLS_EXTENSIONS_H - -#include - -int _gnutls_parse_extensions(gnutls_session_t session, - gnutls_ext_parse_type_t parse_type, - const uint8_t * data, int data_size); -int _gnutls_gen_extensions(gnutls_session_t session, - gnutls_buffer_st * extdata, - gnutls_ext_parse_type_t); -int _gnutls_ext_init(void); -void _gnutls_ext_deinit(void); - -void _gnutls_extension_list_add(gnutls_session_t session, uint16_t type); -int _gnutls_extension_list_check(gnutls_session_t session, uint16_t type); - -void _gnutls_ext_free_session_data(gnutls_session_t session); - -/* functions to be used by extensions internally - */ -void _gnutls_ext_unset_session_data(gnutls_session_t session, - uint16_t type); -void _gnutls_ext_set_session_data(gnutls_session_t session, uint16_t type, - gnutls_ext_priv_data_t); -int _gnutls_ext_get_session_data(gnutls_session_t session, uint16_t type, - gnutls_ext_priv_data_t *); -int _gnutls_ext_get_resumed_session_data(gnutls_session_t session, - uint16_t type, - gnutls_ext_priv_data_t * data); - -void _gnutls_ext_restore_resumed_session(gnutls_session_t session); - -/* for session packing */ -int _gnutls_ext_pack(gnutls_session_t session, gnutls_buffer_st * packed); -int _gnutls_ext_unpack(gnutls_session_t session, - gnutls_buffer_st * packed); - -typedef gnutls_ext_priv_data_t extension_priv_data_t; - -typedef struct extension_entry_st { - const char *name; /* const overriden when free_struct is set */ - unsigned free_struct; - - uint16_t type; - gnutls_ext_parse_type_t parse_type; - - /* this function must return 0 when Not Applicable - * size of extension data if ok - * < 0 on other error. - */ - gnutls_ext_recv_func recv_func; - - /* this function must return 0 when Not Applicable - * size of extension data if ok - * GNUTLS_E_INT_RET_0 if extension data size is zero - * < 0 on other error. - */ - gnutls_ext_send_func send_func; - - gnutls_ext_deinit_data_func deinit_func; /* this will be called to deinitialize - * internal data - */ - gnutls_ext_pack_func pack_func; /* packs internal data to machine independent format */ - gnutls_ext_unpack_func unpack_func; /* unpacks internal data */ -} extension_entry_st; - -int _gnutls_ext_register(extension_entry_st *); - -#endif diff --git a/lib/extras/Makefile.am b/lib/extras/Makefile.am index d9039f3d40..7e5274b264 100644 --- a/lib/extras/Makefile.am +++ b/lib/extras/Makefile.am @@ -16,7 +16,7 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see include $(top_srcdir)/lib/common.mk @@ -26,8 +26,7 @@ AM_CPPFLAGS = \ -I$(srcdir)/../includes \ -I$(builddir)/../includes \ -I$(builddir)/../../gl \ - -I$(srcdir)/.. \ - -I$(srcdir)/../opencdk + -I$(srcdir)/.. EXTRA_DIST = licenses/CC0 diff --git a/lib/extras/hex.h b/lib/extras/hex.h index e2ce3ff28a..5fcac98914 100644 --- a/lib/extras/hex.h +++ b/lib/extras/hex.h @@ -1,13 +1,15 @@ /* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_HEX_H -#define CCAN_HEX_H + +#ifndef GNUTLS_LIB_EXTRAS_HEX_H +#define GNUTLS_LIB_EXTRAS_HEX_H + #include "config.h" #include #include /** * hex_decode - Unpack a hex string. - * @str: the hexidecimal string + * @str: the hexadecimal string * @slen: the length of @str * @buf: the buffer to write the data into * @bufsize: the length of @buf @@ -21,6 +23,7 @@ * if (!hex_decode(argv[1], strlen(argv[1]), data, 20)) * printf("String is malformed!\n"); */ + bool hex_decode(const char *str, size_t slen, void *buf, size_t bufsize); /** @@ -70,4 +73,5 @@ static inline size_t hex_data_size(size_t slen) { return slen / 2; } -#endif /* PETTYCOIN_HEX_H */ + +#endif /* GNUTLS_LIB_EXTRAS_HEX_H */ diff --git a/lib/extras/randomart.h b/lib/extras/randomart.h index 4c5769334b..b468eb4e80 100644 --- a/lib/extras/randomart.h +++ b/lib/extras/randomart.h @@ -1,5 +1,10 @@ +#ifndef GNUTLS_LIB_EXTRAS_RANDOMART_H +#define GNUTLS_LIB_EXTRAS_RANDOMART_H + char *_gnutls_key_fingerprint_randomart(uint8_t * dgst_raw, u_int dgst_raw_len, const char *key_type, unsigned int key_size, const char *prefix); + +#endif /* GNUTLS_LIB_EXTRAS_RANDOMART_H */ diff --git a/lib/extv.c b/lib/extv.c new file mode 100644 index 0000000000..0c0c46f326 --- /dev/null +++ b/lib/extv.c @@ -0,0 +1,242 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "hello_ext.h" +#include "errors.h" +#include "extv.h" + +/* Iterates through all extensions found, and calls the cb() + * function with their data */ +int _gnutls_extv_parse(void *ctx, + gnutls_ext_raw_process_func cb, + const uint8_t * data, int data_size) +{ + int next, ret; + int pos = 0; + uint16_t tls_id; + const uint8_t *sdata; + uint16_t size; + + if (data_size == 0) + return 0; + + DECR_LENGTH_RET(data_size, 2, GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); + next = _gnutls_read_uint16(data); + pos += 2; + + DECR_LENGTH_RET(data_size, next, GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); + + if (next == 0 && data_size == 0) /* field is present, but has zero length? Ignore it. */ + return 0; + else if (data_size > 0) /* forbid unaccounted data */ + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); + + do { + DECR_LENGTH_RET(next, 2, GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); + tls_id = _gnutls_read_uint16(&data[pos]); + pos += 2; + + DECR_LENGTH_RET(next, 2, GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); + size = _gnutls_read_uint16(&data[pos]); + pos += 2; + + DECR_LENGTH_RET(next, size, GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); + sdata = &data[pos]; + pos += size; + + ret = cb(ctx, tls_id, sdata, size); + if (ret < 0) + return gnutls_assert_val(ret); + } + while (next > 2); + + /* forbid leftovers */ + if (next > 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); + + return 0; +} + +#define HANDSHAKE_SESSION_ID_POS (34) +/** + * gnutls_ext_raw_parse: + * @ctx: a pointer to pass to callback function + * @cb: callback function to process each extension found + * @data: TLS extension data + * @flags: should be zero or %GNUTLS_EXT_RAW_FLAG_TLS_CLIENT_HELLO or %GNUTLS_EXT_RAW_FLAG_DTLS_CLIENT_HELLO + * + * This function iterates through the TLS extensions as passed in + * @data, passing the individual extension data to callback. The + * @data must conform to Extension extensions<0..2^16-1> format. + * + * If flags is %GNUTLS_EXT_RAW_TLS_FLAG_CLIENT_HELLO then this function + * will parse the extension data from the position, as if the packet in + * @data is a client hello (without record or handshake headers) - + * as provided by gnutls_handshake_set_hook_function(). + * + * The return value of the callback will be propagated. + * + * Returns: %GNUTLS_E_SUCCESS on success, or an error code. On unknown + * flags it returns %GNUTLS_E_INVALID_REQUEST. + * + * Since: 3.6.3 + **/ +int gnutls_ext_raw_parse(void *ctx, gnutls_ext_raw_process_func cb, + const gnutls_datum_t *data, unsigned int flags) +{ + if (flags & GNUTLS_EXT_RAW_FLAG_TLS_CLIENT_HELLO) { + size_t size = data->size; + size_t len; + uint8_t *p = data->data; + + DECR_LEN(size, HANDSHAKE_SESSION_ID_POS); + + if (p[0] != 0x03) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + + p += HANDSHAKE_SESSION_ID_POS; + + /* skip session id */ + DECR_LEN(size, 1); + len = p[0]; + p++; + DECR_LEN(size, len); + p += len; + + /* CipherSuites */ + DECR_LEN(size, 2); + len = _gnutls_read_uint16(p); + p += 2; + DECR_LEN(size, len); + p += len; + + /* legacy_compression_methods */ + DECR_LEN(size, 1); + len = p[0]; + p++; + DECR_LEN(size, len); + p += len; + + if (size == 0) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + return _gnutls_extv_parse(ctx, cb, p, size); + } else if (flags & GNUTLS_EXT_RAW_FLAG_DTLS_CLIENT_HELLO) { + size_t size = data->size; + size_t len; + uint8_t *p = data->data; + + DECR_LEN(size, HANDSHAKE_SESSION_ID_POS); + + if (p[0] != 254) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + + p += HANDSHAKE_SESSION_ID_POS; + + /* skip session id */ + DECR_LEN(size, 1); + len = p[0]; + p++; + DECR_LEN(size, len); + p += len; + + /* skip cookie */ + DECR_LEN(size, 1); + len = p[0]; + p++; + DECR_LEN(size, len); + p += len; + + /* CipherSuites */ + DECR_LEN(size, 2); + len = _gnutls_read_uint16(p); + p += 2; + DECR_LEN(size, len); + p += len; + + /* legacy_compression_methods */ + DECR_LEN(size, 1); + len = p[0]; + p++; + DECR_LEN(size, len); + p += len; + + if (size == 0) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + return _gnutls_extv_parse(ctx, cb, p, size); + } + + if (flags != 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + return _gnutls_extv_parse(ctx, cb, data->data, data->size); +} + +/* Returns: + * * On success the number of bytes appended (always positive), or zero if not sent + * * On failure, a negative error code. + */ +int _gnutls_extv_append(gnutls_buffer_st *buf, + uint16_t tls_id, + void *ctx, + int (*cb)(void *ctx, gnutls_buffer_st *buf)) +{ + int size_pos, appended, ret; + size_t size_prev; + + ret = _gnutls_buffer_append_prefix(buf, 16, tls_id); + if (ret < 0) + return gnutls_assert_val(ret); + + size_pos = buf->length; + ret = _gnutls_buffer_append_prefix(buf, 16, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + size_prev = buf->length; + ret = cb(ctx, buf); + if (ret < 0 && ret != GNUTLS_E_INT_RET_0) { + return gnutls_assert_val(ret); + } + + /* returning GNUTLS_E_INT_RET_0 means to send an empty + * extension of this type. + */ + appended = buf->length - size_prev; + + if (appended > 0 || ret == GNUTLS_E_INT_RET_0) { + if (ret == GNUTLS_E_INT_RET_0) + appended = 0; + + /* write the real size */ + _gnutls_write_uint16(appended, + &buf->data[size_pos]); + } else if (appended == 0) { + buf->length -= 4; /* reset type and size */ + return 0; + } + + return appended + 4; +} + diff --git a/lib/extv.h b/lib/extv.h new file mode 100644 index 0000000000..3c0bd33598 --- /dev/null +++ b/lib/extv.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_EXTV_H +#define GNUTLS_LIB_EXTV_H + +#include +#include "str.h" + +/* Iterates through all TLS-type extensions in data, and + * calls the callback function for each of them. The ctx, flags + * and parse_type are passed verbatim to callback. */ +int _gnutls_extv_parse(void *ctx, + gnutls_ext_raw_process_func cb, + const uint8_t * data, int data_size); + +inline static +int _gnutls_extv_append_init(gnutls_buffer_st *buf) +{ + unsigned pos; + int ret; + + pos = buf->length; + + ret = _gnutls_buffer_append_prefix(buf, 16, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + return pos; +} + +/* its input is the buffer and the return value of _gnutls_extv_append_init() + * @is_hello: should be true for client and server hello messages. + */ +inline static +int _gnutls_extv_append_final(gnutls_buffer_st *buf, unsigned init, unsigned is_hello) +{ + unsigned size = buf->length - init - 2; + + if (size > UINT16_MAX) /* sent too many extensions */ + return gnutls_assert_val(GNUTLS_E_HANDSHAKE_TOO_LARGE); + + if (size > 0) + _gnutls_write_uint16(size, &buf->data[init]); + else if (is_hello && size == 0) { + /* there is no point to send empty extension bytes, and + * they are known to break certain clients */ + buf->length -= 2; + } + + return 0; +} + +typedef int (*extv_append_func)(void *ctx, gnutls_buffer_st *buf); + +int _gnutls_extv_append(gnutls_buffer_st *buf, + uint16_t tls_id, + void *ctx, + extv_append_func cb); + + +#endif /* GNUTLS_LIB_EXTV_H */ diff --git a/lib/file.c b/lib/file.c index a2b1595c8c..cec1281bd1 100644 --- a/lib/file.c +++ b/lib/file.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/file.h b/lib/file.h index 3529d6a494..98fb90ed0d 100644 --- a/lib/file.h +++ b/lib/file.h @@ -16,8 +16,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_FILE_H +#define GNUTLS_LIB_FILE_H + int _gnutls_file_exists(const char *file); + +#endif /* GNUTLS_LIB_FILE_H */ diff --git a/lib/fingerprint.c b/lib/fingerprint.c index 8f1bff696d..62e0783d36 100644 --- a/lib/fingerprint.c +++ b/lib/fingerprint.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/fips.c b/lib/fips.c index 9d0d9977ca..3c43250aaf 100644 --- a/lib/fips.c +++ b/lib/fips.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ #include "gnutls_int.h" @@ -30,7 +30,9 @@ #include #include -unsigned int _gnutls_lib_mode = LIB_STATE_POWERON; +#include "gthreads.h" + +unsigned int _gnutls_lib_state = LIB_STATE_POWERON; #ifdef ENABLE_FIPS140 #include @@ -38,22 +40,37 @@ unsigned int _gnutls_lib_mode = LIB_STATE_POWERON; #define FIPS_KERNEL_FILE "/proc/sys/crypto/fips_enabled" #define FIPS_SYSTEM_FILE "/etc/system-fips" -static int _fips_mode = -1; +/* We provide a per-thread FIPS-mode so that an application + * can use gnutls_fips140_set_mode() to override a specific + * operation on a thread */ +static gnutls_fips_mode_t _global_fips_mode = -1; +static _Thread_local gnutls_fips_mode_t _tfips_mode = -1; + static int _skip_integrity_checks = 0; /* Returns: - * 0 - FIPS mode disabled - * 1 - FIPS mode enabled and enforced - * 2 - FIPS in testing mode + * a gnutls_fips_mode_t value */ unsigned _gnutls_fips_mode_enabled(void) { -unsigned f1p = 0, f2p; -FILE* fd; -const char *p; + unsigned f1p = 0, f2p; + FILE* fd; + const char *p; + unsigned ret; + + /* We initialize this threads' mode, and + * the global mode if not already initialized. + * When the global mode is initialized, then + * the thread mode is copied from it. As this + * is called on library initialization, the + * _global_fips_mode is always set during app run. + */ + if (_tfips_mode != (gnutls_fips_mode_t)-1) + return _tfips_mode; - if (_fips_mode != -1) - return _fips_mode; + if (_global_fips_mode != (gnutls_fips_mode_t)-1) { + return _global_fips_mode; + } p = secure_getenv("GNUTLS_SKIP_FIPS_INTEGRITY_CHECKS"); if (p && p[0] == '1') { @@ -63,12 +80,17 @@ const char *p; p = secure_getenv("GNUTLS_FORCE_FIPS_MODE"); if (p) { if (p[0] == '1') - _fips_mode = 1; + ret = 1; else if (p[0] == '2') - _fips_mode = 2; + ret = GNUTLS_FIPS140_SELFTESTS; + else if (p[0] == '3') + ret = GNUTLS_FIPS140_LAX; + else if (p[0] == '4') + ret = GNUTLS_FIPS140_LOG; else - _fips_mode = 0; - return _fips_mode; + ret = GNUTLS_FIPS140_DISABLED; + + goto exit; } fd = fopen(FIPS_KERNEL_FILE, "r"); @@ -84,35 +106,41 @@ const char *p; if (f1p != 0 && f2p != 0) { _gnutls_debug_log("FIPS140-2 mode enabled\n"); - _fips_mode = 1; - return _fips_mode; + ret = GNUTLS_FIPS140_STRICT; + goto exit; } if (f2p != 0) { /* a funny state where self tests are performed * and ignored */ _gnutls_debug_log("FIPS140-2 ZOMBIE mode enabled\n"); - _fips_mode = 2; - return _fips_mode; + ret = GNUTLS_FIPS140_SELFTESTS; + goto exit; } - _fips_mode = 0; - return _fips_mode; + ret = GNUTLS_FIPS140_DISABLED; + goto exit; + + exit: + _global_fips_mode = ret; + return ret; } /* This _fips_mode == 2 is a strange mode where checks are being * performed, but its output is ignored. */ void _gnutls_fips_mode_reset_zombie(void) { - if (_fips_mode == 2) { - _fips_mode = 0; + if (_global_fips_mode == GNUTLS_FIPS140_SELFTESTS) { + _global_fips_mode = GNUTLS_FIPS140_DISABLED; } } -#define GNUTLS_LIBRARY_NAME "libgnutls.so.28" -#define NETTLE_LIBRARY_NAME "libnettle.so.4" -#define HOGWEED_LIBRARY_NAME "libhogweed.so.2" -#define GMP_LIBRARY_NAME "libgmp.so.10" +/* These only works with the platform where SONAME is part of the ABI. + * For example, *_SONAME will be set to "none" on Windows platforms. */ +#define GNUTLS_LIBRARY_NAME GNUTLS_LIBRARY_SONAME +#define NETTLE_LIBRARY_NAME NETTLE_LIBRARY_SONAME +#define HOGWEED_LIBRARY_NAME HOGWEED_LIBRARY_SONAME +#define GMP_LIBRARY_NAME GMP_LIBRARY_SONAME #define HMAC_SUFFIX ".hmac" #define HMAC_SIZE 32 @@ -224,6 +252,13 @@ static unsigned check_binary_integrity(const char* libname, const char* symbol) } hmac_size = hex_data_size(data.size); + + /* trim eventual newlines from the end of the data read from file */ + while ((data.size > 0) && (data.data[data.size - 1] == '\n')) { + data.data[data.size - 1] = 0; + data.size--; + } + ret = gnutls_hex_decode(&data, hmac, &hmac_size); gnutls_free(data.data); @@ -284,12 +319,55 @@ int _gnutls_fips_perform_self_checks2(void) goto error; } + ret = gnutls_cipher_self_test(0, GNUTLS_CIPHER_AES_256_CBC); + if (ret < 0) { + gnutls_assert(); + goto error; + } + ret = gnutls_cipher_self_test(0, GNUTLS_CIPHER_AES_256_GCM); if (ret < 0) { gnutls_assert(); goto error; } + ret = gnutls_cipher_self_test(0, GNUTLS_CIPHER_AES_256_XTS); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + ret = gnutls_cipher_self_test(0, GNUTLS_CIPHER_AES_256_CFB8); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + /* Digest tests */ + ret = gnutls_digest_self_test(0, GNUTLS_DIG_SHA3_224); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + ret = gnutls_digest_self_test(0, GNUTLS_DIG_SHA3_256); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + ret = gnutls_digest_self_test(0, GNUTLS_DIG_SHA3_384); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + ret = gnutls_digest_self_test(0, GNUTLS_DIG_SHA3_512); + if (ret < 0) { + gnutls_assert(); + goto error; + } + /* MAC (includes message digest test) */ ret = gnutls_mac_self_test(0, GNUTLS_MAC_SHA1); if (ret < 0) { @@ -397,7 +475,13 @@ int _gnutls_fips_perform_self_checks2(void) /** * gnutls_fips140_mode_enabled: * - * Checks whether this library is in FIPS140 mode. + * Checks whether this library is in FIPS140 mode. The returned + * value corresponds to the library mode as set with + * gnutls_fips140_set_mode(). + * + * If gnutls_fips140_set_mode() was called with %GNUTLS_FIPS140_SET_MODE_THREAD + * then this function will return the current thread's FIPS140 mode, otherwise + * the global value is returned. * * Returns: return non-zero if true or zero if false. * @@ -406,14 +490,71 @@ int _gnutls_fips_perform_self_checks2(void) unsigned gnutls_fips140_mode_enabled(void) { #ifdef ENABLE_FIPS140 -int ret = _gnutls_fips_mode_enabled(); + unsigned ret = _gnutls_fips_mode_enabled(); - if (ret == 1) + if (ret > GNUTLS_FIPS140_DISABLED) return ret; #endif return 0; } +/** + * gnutls_fips140_set_mode: + * @mode: the FIPS140-2 mode to switch to + * @flags: should be zero or %GNUTLS_FIPS140_SET_MODE_THREAD + * + * That function is not thread-safe when changing the mode with no flags + * (globally), and should be called prior to creating any threads. Its + * behavior with no flags after threads are created is undefined. + * + * When the flag %GNUTLS_FIPS140_SET_MODE_THREAD is specified + * then this call will change the FIPS140-2 mode for this particular + * thread and not for the whole process. That way an application + * can utilize this function to set and reset mode for specific + * operations. + * + * This function never fails but will be a no-op if used when + * the library is not in FIPS140-2 mode. When asked to switch to unknown + * values for @mode or to %GNUTLS_FIPS140_SELFTESTS mode, the library + * switches to %GNUTLS_FIPS140_STRICT mode. + * + * Since: 3.6.2 + **/ +void gnutls_fips140_set_mode(gnutls_fips_mode_t mode, unsigned flags) +{ +#ifdef ENABLE_FIPS140 + gnutls_fips_mode_t prev = _gnutls_fips_mode_enabled(); + if (prev == GNUTLS_FIPS140_DISABLED || prev == GNUTLS_FIPS140_SELFTESTS) { + /* we need to run self-tests first to be in FIPS140-2 mode */ + _gnutls_audit_log(NULL, "The library should be initialized in FIPS140-2 mode to do that operation\n"); + return; + } + + switch (mode) { + case GNUTLS_FIPS140_STRICT: + case GNUTLS_FIPS140_LAX: + case GNUTLS_FIPS140_LOG: + case GNUTLS_FIPS140_DISABLED: + break; + case GNUTLS_FIPS140_SELFTESTS: + _gnutls_audit_log(NULL, "Cannot switch library to FIPS140-2 self-tests mode; defaulting to strict\n"); + mode = GNUTLS_FIPS140_STRICT; + break; + default: + _gnutls_audit_log(NULL, "Cannot switch library to mode %u; defaulting to strict\n", (unsigned)mode); + mode = GNUTLS_FIPS140_STRICT; + break; + } + + if (flags & GNUTLS_FIPS140_SET_MODE_THREAD) + _tfips_mode = mode; + else { + _global_fips_mode = mode; + _tfips_mode = -1; + } +#endif +} + void _gnutls_lib_simulate_error(void) { _gnutls_switch_lib_state(LIB_STATE_ERROR); diff --git a/lib/fips.h b/lib/fips.h index 4de5ea2422..1464c9595b 100644 --- a/lib/fips.h +++ b/lib/fips.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef FIPS_H -# define FIPS_H +#ifndef GNUTLS_LIB_FIPS_H +#define GNUTLS_LIB_FIPS_H #include "gnutls_int.h" #include @@ -38,19 +38,19 @@ typedef enum { } gnutls_lib_state_t; /* do not access directly */ -extern unsigned int _gnutls_lib_mode; +extern unsigned int _gnutls_lib_state; extern gnutls_crypto_rnd_st _gnutls_fips_rnd_ops; inline static void _gnutls_switch_lib_state(gnutls_lib_state_t state) { /* Once into zombie state no errors can change us */ - _gnutls_lib_mode = state; + _gnutls_lib_state = state; } inline static gnutls_lib_state_t _gnutls_get_lib_state(void) { - return _gnutls_lib_mode; + return _gnutls_lib_state; } int _gnutls_fips_perform_self_checks1(void); @@ -73,4 +73,101 @@ void _gnutls_switch_lib_state(gnutls_lib_state_t state); void _gnutls_lib_simulate_error(void); void _gnutls_lib_force_operational(void); -#endif /* FIPS_H */ +#ifdef ENABLE_FIPS140 +/* This will test the condition when in FIPS140-2 mode + * and return an error if necessary or ignore */ +# define FIPS_RULE(condition, ret_error, ...) { \ + gnutls_fips_mode_t _mode = _gnutls_fips_mode_enabled(); \ + if (_mode != GNUTLS_FIPS140_DISABLED) { \ + if (condition) { \ + if (_mode == GNUTLS_FIPS140_LOG) { \ + _gnutls_audit_log(NULL, "fips140-2: allowing "__VA_ARGS__); \ + } else if (_mode != GNUTLS_FIPS140_LAX) { \ + _gnutls_debug_log("fips140-2: disallowing "__VA_ARGS__); \ + return ret_error; \ + } \ + } \ + }} + +inline +static unsigned is_mac_algo_forbidden(gnutls_mac_algorithm_t algo) +{ + gnutls_fips_mode_t mode = _gnutls_fips_mode_enabled(); + if (mode != GNUTLS_FIPS140_DISABLED && + _gnutls_get_lib_state() != LIB_STATE_SELFTEST) { + switch(algo) { + case GNUTLS_MAC_SHA1: + case GNUTLS_MAC_SHA256: + case GNUTLS_MAC_SHA384: + case GNUTLS_MAC_SHA512: + case GNUTLS_MAC_SHA224: + case GNUTLS_MAC_SHA3_224: + case GNUTLS_MAC_SHA3_256: + case GNUTLS_MAC_SHA3_384: + case GNUTLS_MAC_SHA3_512: + case GNUTLS_MAC_AES_CMAC_128: + case GNUTLS_MAC_AES_CMAC_256: + case GNUTLS_MAC_AES_GMAC_128: + case GNUTLS_MAC_AES_GMAC_192: + case GNUTLS_MAC_AES_GMAC_256: + return 0; + default: + if (mode == GNUTLS_FIPS140_LAX) + return 0; + else if (mode == GNUTLS_FIPS140_LOG) { + _gnutls_audit_log(NULL, "fips140-2: allowing access to %s\n", + gnutls_mac_get_name(algo)); + return 0; + } + return 1; + } + } + + return 0; +} + +inline +static unsigned is_cipher_algo_forbidden(gnutls_cipher_algorithm_t algo) +{ + gnutls_fips_mode_t mode = _gnutls_fips_mode_enabled(); + if (mode != GNUTLS_FIPS140_DISABLED && + _gnutls_get_lib_state() != LIB_STATE_SELFTEST) { + + switch(algo) { + case GNUTLS_CIPHER_AES_128_CBC: + case GNUTLS_CIPHER_AES_256_CBC: + case GNUTLS_CIPHER_AES_192_CBC: + case GNUTLS_CIPHER_AES_128_GCM: + case GNUTLS_CIPHER_AES_256_GCM: + case GNUTLS_CIPHER_AES_128_CCM: + case GNUTLS_CIPHER_AES_256_CCM: + case GNUTLS_CIPHER_3DES_CBC: + case GNUTLS_CIPHER_AES_128_CCM_8: + case GNUTLS_CIPHER_AES_256_CCM_8: + case GNUTLS_CIPHER_AES_128_CFB8: + case GNUTLS_CIPHER_AES_192_CFB8: + case GNUTLS_CIPHER_AES_256_CFB8: + case GNUTLS_CIPHER_AES_128_XTS: + case GNUTLS_CIPHER_AES_256_XTS: + return 0; + default: + if (mode == GNUTLS_FIPS140_LAX) + return 0; + else if (mode == GNUTLS_FIPS140_LOG) { + _gnutls_audit_log(NULL, "fips140-2: allowing access to %s\n", + gnutls_cipher_get_name(algo)); + return 0; + } + return 1; + } + } + + return 0; +} +#else +# define is_mac_algo_forbidden(x) 0 +# define is_cipher_algo_forbidden(x) 0 +# define FIPS_RULE(condition, ret_error, ...) +#endif + +#endif /* GNUTLS_LIB_FIPS_H */ diff --git a/lib/global.c b/lib/global.c index d31d5bcae9..9a65d114cc 100644 --- a/lib/global.c +++ b/lib/global.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . + * along with this program. If not, see . * */ @@ -28,7 +28,7 @@ #include #include -#include /* for _gnutls_ext_init */ +#include /* for _gnutls_hello_ext_init */ #include /* for _gnutls_supplemental_deinit */ #include #include @@ -79,6 +79,8 @@ gnutls_log_func _gnutls_log_func = NULL; gnutls_audit_log_func _gnutls_audit_log_func = NULL; int _gnutls_log_level = 0; /* default log level */ +unsigned int _gnutls_global_version = GNUTLS_VERSION_NUMBER; + static int _gnutls_global_init(unsigned constructor); static void _gnutls_global_deinit(unsigned destructor); @@ -209,7 +211,7 @@ static int _gnutls_init_ret = 0; * called as many times as gnutls_global_init(). This is useful when * GnuTLS is used by more than one library in an application. This * function can be called many times, but will only do something the - * first time. + * first time. It is thread safe since GnuTLS 3.3.0. * * A subsequent call of this function if the initial has failed will * return the same error code. @@ -310,7 +312,7 @@ static int _gnutls_global_init(unsigned constructor) } /* Initialize the default TLS extensions */ - ret = _gnutls_ext_init(); + ret = _gnutls_hello_ext_init(); if (ret < 0) { gnutls_assert(); goto out; @@ -366,11 +368,10 @@ static int _gnutls_global_init(unsigned constructor) _gnutls_register_accel_crypto(); _gnutls_cryptodev_init(); - _gnutls_load_system_priorities(); #ifdef ENABLE_FIPS140 - /* These self tests are performed on the overriden algorithms - * (e.g., AESNI overriden AES). They are after _gnutls_register_accel_crypto() + /* These self tests are performed on the overridden algorithms + * (e.g., AESNI overridden AES). They are after _gnutls_register_accel_crypto() * intentionally */ if (res != 0) { ret = _gnutls_fips_perform_self_checks2(); @@ -383,6 +384,7 @@ static int _gnutls_global_init(unsigned constructor) _gnutls_fips_mode_reset_zombie(); } #endif + _gnutls_load_system_priorities(); _gnutls_switch_lib_state(LIB_STATE_OPERATIONAL); ret = 0; @@ -412,7 +414,7 @@ static void _gnutls_global_deinit(unsigned destructor) _gnutls_system_key_deinit(); gnutls_crypto_deinit(); _gnutls_rnd_deinit(); - _gnutls_ext_deinit(); + _gnutls_hello_ext_deinit(); asn1_delete_structure(&_gnutls_gnutls_asn); asn1_delete_structure(&_gnutls_pkix1_asn); @@ -436,6 +438,8 @@ static void _gnutls_global_deinit(unsigned destructor) _gnutls_tpm_global_deinit(); #endif + _gnutls_nss_keylog_deinit(); + gnutls_mutex_deinit(&_gnutls_file_mutex); gnutls_mutex_deinit(&_gnutls_pkcs11_mutex); } else { diff --git a/lib/global.h b/lib/global.h index 45d8dcaff8..d9a09d8cdd 100644 --- a/lib/global.h +++ b/lib/global.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_GLOBAL_H -#define GNUTLS_GLOBAL_H +#ifndef GNUTLS_LIB_GLOBAL_H +#define GNUTLS_LIB_GLOBAL_H #include #include @@ -33,7 +33,7 @@ extern ASN1_TYPE _gnutls_gnutls_asn; /* removed const from node_asn* to * prevent warnings, since libtasn1 doesn't - * use the const keywork in its functions. + * use the const keyword in its functions. */ #define _gnutls_get_gnutls_asn() ((ASN1_TYPE) _gnutls_gnutls_asn) #define _gnutls_get_pkix() ((ASN1_TYPE) _gnutls_pkix1_asn) @@ -44,8 +44,9 @@ extern int _gnutls_log_level; extern int gnutls_crypto_init(void); extern void gnutls_crypto_deinit(void); extern void _gnutls_tpm_global_deinit(void); +extern void _gnutls_nss_keylog_deinit(void); extern void _gnutls_load_system_priorities(void); extern void _gnutls_unload_system_priorities(void); -#endif +#endif /* GNUTLS_LIB_GLOBAL_H */ diff --git a/lib/gnutls.asn b/lib/gnutls.asn index cce748d52b..aca39fd296 100644 --- a/lib/gnutls.asn +++ b/lib/gnutls.asn @@ -26,18 +26,14 @@ RSAPrivateKey ::= SEQUENCE { exponent1 INTEGER, -- (Usually large) d mod (p-1) exponent2 INTEGER, -- (Usually large) d mod (q-1) coefficient INTEGER, -- (Usually large) (inverse of q) mod p - otherInfo RSAOtherInfo OPTIONAL + otherPrimeInfos OtherPrimeInfos OPTIONAL } ProvableSeed ::= SEQUENCE { - algorithm OBJECT IDENTIFIER, + algorithm OBJECT IDENTIFIER, -- the hash algorithm OID used for FIPS186-4 generation seed OCTET STRING } -RSAOtherInfo ::= CHOICE { - otherPrimeInfos OtherPrimeInfos, -- the hash algorithm OID used for FIPS186-4 generation - seed [1] ProvableSeed -} OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo @@ -84,8 +80,7 @@ DSAPrivateKey ::= SEQUENCE { q INTEGER, g INTEGER, Y INTEGER, -- public - priv INTEGER, - seed [1] ProvableSeed OPTIONAL + priv INTEGER } -- from PKCS#3 @@ -95,6 +90,14 @@ DHParameter ::= SEQUENCE { privateValueLength INTEGER OPTIONAL } +-- From PKCS #11 3.0 +pkcs-11-ec-Parameters ::= CHOICE { + --ecParameters ECParameters, + oId OBJECT IDENTIFIER, + --implicitlyCA NULL, + curveName PrintableString +} + -- ECC from RFC5480 ECParameters ::= CHOICE { namedCurve OBJECT IDENTIFIER @@ -118,4 +121,57 @@ KRB5PrincipalName ::= SEQUENCE { principalName [1] PrincipalName } +-- from RFC4055 +RSAPSSParameters ::= SEQUENCE { + hashAlgorithm [0] AlgorithmIdentifier OPTIONAL, -- sha1Identifier + maskGenAlgorithm [1] AlgorithmIdentifier OPTIONAL, -- mgf1SHA1Identifier + saltLength [2] INTEGER DEFAULT 20, + trailerField [3] INTEGER DEFAULT 1 +} + +-- GOST R 34.10 +GOSTParameters ::= SEQUENCE { + publicKeyParamSet OBJECT IDENTIFIER, + digestParamSet OBJECT IDENTIFIER OPTIONAL +} + +GOSTParametersOld ::= SEQUENCE { + publicKeyParamSet OBJECT IDENTIFIER, + digestParamSet OBJECT IDENTIFIER, + encryptionParamSet OBJECT IDENTIFIER OPTIONAL +} + +GOSTPrivateKey ::= OCTET STRING +GOSTPrivateKeyOld ::= INTEGER + +-- GOST x509 Extensions +IssuerSignTool ::= SEQUENCE { + signTool UTF8String, -- (SIZE (1..200)) + cATool UTF8String, -- (SIZE (1..200)) + signToolCert UTF8String, -- (SIZE (1..100)) + cAToolCert UTF8String -- (SIZE (1..100)) +} + +Gost28147-89-EncryptedKey ::= SEQUENCE { + encryptedKey OCTET STRING, -- (SIZE (32)) + maskKey [0] IMPLICIT OCTET STRING OPTIONAL, + macKey OCTET STRING -- (SIZE (1..4)) +} + +SubjectPublicKeyInfo ::= SEQUENCE { + algorithm AlgorithmIdentifier, + subjectPublicKey BIT STRING +} + +GostR3410-TransportParameters ::= SEQUENCE { + encryptionParamSet OBJECT IDENTIFIER, + ephemeralPublicKey [0] IMPLICIT SubjectPublicKeyInfo OPTIONAL, + ukm OCTET STRING +} + +GostR3410-KeyTransport ::= SEQUENCE { + sessionEncryptedKey Gost28147-89-EncryptedKey, + transportParameters [0] IMPLICIT GostR3410-TransportParameters OPTIONAL +} + END diff --git a/lib/gnutls.pc.in b/lib/gnutls.pc.in index f656d12c41..46a1eb5d85 100644 --- a/lib/gnutls.pc.in +++ b/lib/gnutls.pc.in @@ -16,9 +16,9 @@ includedir=@includedir@ Name: GnuTLS Description: Transport Security Layer implementation for the GNU system -URL: http://www.gnutls.org/ +URL: https://www.gnutls.org/ Version: @VERSION@ Libs: -L${libdir} -lgnutls -Libs.private: @LIBZ_PC@ @LIBINTL@ @LIBSOCKET@ @LIBNSL@ @LIBPTHREAD@ @LIB_SELECT@ @TSS_LIBS@ @GMP_LIBS@ @LIBUNISTRING@ @LIBIDN2_LIBS@ +Libs.private: @LIBINTL@ @LIBSOCKET@ @INET_PTON_LIB@ @LIBPTHREAD@ @LIB_SELECT@ @TSS_LIBS@ @GMP_LIBS@ @LIBUNISTRING@ @LIBATOMIC_LIBS@ @LIB_CRYPT32@ @GNUTLS_REQUIRES_PRIVATE@ Cflags: -I${includedir} diff --git a/lib/gnutls_asn1_tab.c b/lib/gnutls_asn1_tab.c index 4d69728163..0f56619559 100644 --- a/lib/gnutls_asn1_tab.c +++ b/lib/gnutls_asn1_tab.c @@ -20,14 +20,10 @@ const asn1_static_node gnutls_asn1_tab[] = { { "exponent1", 1073741827, NULL }, { "exponent2", 1073741827, NULL }, { "coefficient", 1073741827, NULL }, - { "otherInfo", 16386, "RSAOtherInfo"}, + { "otherPrimeInfos", 16386, "OtherPrimeInfos"}, { "ProvableSeed", 1610612741, NULL }, { "algorithm", 1073741836, NULL }, { "seed", 7, NULL }, - { "RSAOtherInfo", 1610612754, NULL }, - { "otherPrimeInfos", 1073741826, "OtherPrimeInfos"}, - { "seed", 536879106, "ProvableSeed"}, - { NULL, 2056, "1"}, { "OtherPrimeInfos", 1612709899, NULL }, { "MAX", 1074266122, "1"}, { NULL, 2, "OtherPrimeInfo"}, @@ -57,13 +53,14 @@ const asn1_static_node gnutls_asn1_tab[] = { { "q", 1073741827, NULL }, { "g", 1073741827, NULL }, { "Y", 1073741827, NULL }, - { "priv", 1073741827, NULL }, - { "seed", 536895490, "ProvableSeed"}, - { NULL, 2056, "1"}, + { "priv", 3, NULL }, { "DHParameter", 1610612741, NULL }, { "prime", 1073741827, NULL }, { "base", 1073741827, NULL }, { "privateValueLength", 16387, NULL }, + { "pkcs-11-ec-Parameters", 1610612754, NULL }, + { "oId", 1073741836, NULL }, + { "curveName", 31, NULL }, { "ECParameters", 1610612754, NULL }, { "namedCurve", 12, NULL }, { "ECPrivateKey", 1610612741, NULL }, @@ -79,10 +76,52 @@ const asn1_static_node gnutls_asn1_tab[] = { { "name-string", 536879115, NULL }, { NULL, 1073743880, "1"}, { NULL, 27, NULL }, - { "KRB5PrincipalName", 536870917, NULL }, + { "KRB5PrincipalName", 1610612741, NULL }, { "realm", 1610620955, NULL }, { NULL, 2056, "0"}, { "principalName", 536879106, "PrincipalName"}, { NULL, 2056, "1"}, + { "RSAPSSParameters", 1610612741, NULL }, + { "hashAlgorithm", 1610637314, "AlgorithmIdentifier"}, + { NULL, 2056, "0"}, + { "maskGenAlgorithm", 1610637314, "AlgorithmIdentifier"}, + { NULL, 2056, "1"}, + { "saltLength", 1610653699, NULL }, + { NULL, 1073741833, "20"}, + { NULL, 2056, "2"}, + { "trailerField", 536911875, NULL }, + { NULL, 1073741833, "1"}, + { NULL, 2056, "3"}, + { "GOSTParameters", 1610612741, NULL }, + { "publicKeyParamSet", 1073741836, NULL }, + { "digestParamSet", 16396, NULL }, + { "GOSTParametersOld", 1610612741, NULL }, + { "publicKeyParamSet", 1073741836, NULL }, + { "digestParamSet", 1073741836, NULL }, + { "encryptionParamSet", 16396, NULL }, + { "GOSTPrivateKey", 1073741831, NULL }, + { "GOSTPrivateKeyOld", 1073741827, NULL }, + { "IssuerSignTool", 1610612741, NULL }, + { "signTool", 1073741858, NULL }, + { "cATool", 1073741858, NULL }, + { "signToolCert", 1073741858, NULL }, + { "cAToolCert", 34, NULL }, + { "Gost28147-89-EncryptedKey", 1610612741, NULL }, + { "encryptedKey", 1073741831, NULL }, + { "maskKey", 1610637319, NULL }, + { NULL, 4104, "0"}, + { "macKey", 7, NULL }, + { "SubjectPublicKeyInfo", 1610612741, NULL }, + { "algorithm", 1073741826, "AlgorithmIdentifier"}, + { "subjectPublicKey", 6, NULL }, + { "GostR3410-TransportParameters", 1610612741, NULL }, + { "encryptionParamSet", 1073741836, NULL }, + { "ephemeralPublicKey", 1610637314, "SubjectPublicKeyInfo"}, + { NULL, 4104, "0"}, + { "ukm", 7, NULL }, + { "GostR3410-KeyTransport", 536870917, NULL }, + { "sessionEncryptedKey", 1073741826, "Gost28147-89-EncryptedKey"}, + { "transportParameters", 536895490, "GostR3410-TransportParameters"}, + { NULL, 4104, "0"}, { NULL, 0, NULL } }; diff --git a/lib/gnutls_int.h b/lib/gnutls_int.h index 0aff2d28d5..9959c82202 100644 --- a/lib/gnutls_int.h +++ b/lib/gnutls_int.h @@ -1,6 +1,6 @@ /* * Copyright (C) 2000-2016 Free Software Foundation, Inc. - * Copyright (C) 2015-2016 Red Hat, Inc. + * Copyright (C) 2015-2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,12 +17,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_INT_H -#define GNUTLS_INT_H +#ifndef GNUTLS_LIB_GNUTLS_INT_H +#define GNUTLS_LIB_GNUTLS_INT_H #ifdef HAVE_CONFIG_H #include @@ -38,12 +38,6 @@ #include #include -/* For some reason gnulib likes to provide alternatives for - * functions it doesn't include. Even worse these functions seem - * to be available on the target systems. - */ -#undef strdup - #ifdef NO_SSIZE_T #define HAVE_SSIZE_T typedef int ssize_t; @@ -59,36 +53,48 @@ typedef int ssize_t; #endif #include -#ifdef HAVE_LIBNETTLE #include -#else -#include -#define memxor gl_memxor -#endif #define ENABLE_ALIGN16 +#ifdef __clang_major +# define _GNUTLS_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) +#else +# define _GNUTLS_CLANG_VERSION 0 +#endif + +/* clang also defines __GNUC__. It promotes a GCC version of 4.2.1. */ #ifdef __GNUC__ -#ifndef _GNUTLS_GCC_VERSION -#define _GNUTLS_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) +# define _GNUTLS_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) #endif + #if _GNUTLS_GCC_VERSION >= 30100 -#define likely(x) __builtin_expect((x), 1) -#define unlikely(x) __builtin_expect((x), 0) +# define likely(x) __builtin_expect((x), 1) +# define unlikely(x) __builtin_expect((x), 0) +#else +# define likely +# define unlikely #endif + +#if _GNUTLS_GCC_VERSION >= 30300 +# define attr_nonnull_all __attribute__ ((nonnull)) +# define attr_nonnull(a) __attribute__ ((nonnull a)) +#else +# define attr_nonnull_all +# define attr_nonnull(a) #endif -#ifndef likely -#define likely -#define unlikely +#if _GNUTLS_GCC_VERSION >= 30400 && (_GNUTLS_CLANG_VERSION == 0 || _GNUTLS_CLANG_VERSION >= 40000) +# define attr_warn_unused_result __attribute__((warn_unused_result)) +#else +# define attr_warn_unused_result #endif -/* some systems had problems with long long int, thus, - * it is not used. - */ -typedef struct { - unsigned char i[8]; -} gnutls_uint64; +#if _GNUTLS_GCC_VERSION >= 70100 +# define FALLTHROUGH __attribute__ ((fallthrough)) +#else +# define FALLTHROUGH +#endif #include #include @@ -108,13 +114,20 @@ typedef struct { */ #define MAX_HANDSHAKE_PACKET_SIZE 128*1024 -/* The maximum digest size of hash algorithms. +#define GNUTLS_DEF_SESSION_ID_SIZE 32 + +/* The maximum digest size of hash algorithms. */ #define MAX_FILENAME 512 #define MAX_HASH_SIZE 64 -#define MAX_CIPHER_BLOCK_SIZE 16 + +#define MAX_MAC_KEY_SIZE 64 + +#define MAX_CIPHER_BLOCK_SIZE 64 /* CHACHA20 */ #define MAX_CIPHER_KEY_SIZE 32 +#define MAX_CIPHER_IV_SIZE 16 + #define MAX_USERNAME_SIZE 128 #define MAX_SERVER_NAME_SIZE 256 @@ -124,13 +137,16 @@ typedef struct { #define GNUTLS_MASTER_SIZE 48 #define GNUTLS_RANDOM_SIZE 32 +/* Under TLS1.3 a hello retry request is sent as server hello */ +#define REAL_HSK_TYPE(t) ((t)==GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST?GNUTLS_HANDSHAKE_SERVER_HELLO:t) + /* DTLS */ #define DTLS_RETRANS_TIMEOUT 1000 /* TLS Extensions */ /* we can receive up to MAX_EXT_TYPES extensions. */ -#define MAX_EXT_TYPES 32 +#define MAX_EXT_TYPES 64 /* TLS-internal extension (will be parsed after a ciphersuite is selected). * This amends the gnutls_ext_parse_type_t. Not exported yet to allow more refining @@ -138,33 +154,63 @@ typedef struct { #define _GNUTLS_EXT_TLS_POST_CS 177 /* expire time for resuming sessions */ -#define DEFAULT_EXPIRE_TIME 3600 +#define DEFAULT_EXPIRE_TIME 21600 +#define STEK_ROTATION_PERIOD_PRODUCT 3 #define DEFAULT_HANDSHAKE_TIMEOUT_MS 40*1000 +/* The EC group to be used when the extension + * supported groups/curves is not present */ +#define DEFAULT_EC_GROUP GNUTLS_GROUP_SECP256R1 + typedef enum transport_t { GNUTLS_STREAM, GNUTLS_DGRAM } transport_t; -typedef enum record_flush_t { - RECORD_FLUSH = 0, - RECORD_CORKED, -} record_flush_t; +/* The TLS 1.3 stage of handshake */ +typedef enum hs_stage_t { + STAGE_HS, + STAGE_APP, + STAGE_UPD_OURS, + STAGE_UPD_PEERS, + STAGE_EARLY +} hs_stage_t; + +typedef enum record_send_state_t { + RECORD_SEND_NORMAL = 0, + RECORD_SEND_CORKED, /* corked and transition to NORMAL afterwards */ + RECORD_SEND_CORKED_TO_KU, /* corked but must transition to RECORD_SEND_KEY_UPDATE_1 */ + RECORD_SEND_KEY_UPDATE_1, + RECORD_SEND_KEY_UPDATE_2, + RECORD_SEND_KEY_UPDATE_3 +} record_send_state_t; + +/* The mode check occurs a lot throughout GnuTLS and can be replaced by + * the following shorter macro. Also easier to update one macro + * in the future when the internal structure changes than all the conditionals + * itself. + */ +#define IS_SERVER(session) (session->security_parameters.entity == GNUTLS_SERVER) -/* the maximum size of encrypted packets */ +/* To check whether we have a DTLS session */ #define IS_DTLS(session) (session->internals.transport == GNUTLS_DGRAM) +/* the maximum size of encrypted packets */ #define DEFAULT_MAX_RECORD_SIZE 16384 +#define DEFAULT_MAX_EARLY_DATA_SIZE 16384 #define TLS_RECORD_HEADER_SIZE 5 #define DTLS_RECORD_HEADER_SIZE (TLS_RECORD_HEADER_SIZE+8) #define RECORD_HEADER_SIZE(session) (IS_DTLS(session) ? DTLS_RECORD_HEADER_SIZE : TLS_RECORD_HEADER_SIZE) #define MAX_RECORD_HEADER_SIZE DTLS_RECORD_HEADER_SIZE +#define MIN_RECORD_SIZE 512 +#define MIN_RECORD_SIZE_SMALL 64 + /* The following macro is used to calculate the overhead when sending. * when receiving we use a different way as there are implementations that * store more data than allowed. */ -#define MAX_RECORD_SEND_OVERHEAD(session) (MAX_CIPHER_BLOCK_SIZE/*iv*/+MAX_PAD_SIZE+((gnutls_compression_get(session)!=GNUTLS_COMP_NULL)?(EXTRA_COMP_SIZE):(0))+MAX_HASH_SIZE/*MAC*/) +#define MAX_RECORD_SEND_OVERHEAD(session) (MAX_CIPHER_BLOCK_SIZE/*iv*/+MAX_PAD_SIZE+MAX_HASH_SIZE/*MAC*/) #define MAX_RECORD_SEND_SIZE(session) (IS_DTLS(session)? \ (MIN((size_t)gnutls_dtls_get_mtu(session), (size_t)session->security_parameters.max_record_send_size+MAX_RECORD_SEND_OVERHEAD(session))): \ ((size_t)session->security_parameters.max_record_send_size+MAX_RECORD_SEND_OVERHEAD(session))) @@ -202,24 +248,21 @@ typedef enum record_flush_t { #define MEMSUB(x,y) ((ssize_t)((ptrdiff_t)x-(ptrdiff_t)y)) -#define DECR_LEN(len, x) do { len-=x; if (len<0) {gnutls_assert(); return GNUTLS_E_UNEXPECTED_PACKET_LENGTH;} } while (0) +#define DECR_LEN(len, x) DECR_LENGTH_RET(len, x, GNUTLS_E_UNEXPECTED_PACKET_LENGTH) #define DECR_LEN_FINAL(len, x) do { \ - len-=x; \ - if (len != 0) \ + if (len != x) \ return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); \ + else \ + len = 0; \ } while (0) -#define DECR_LENGTH_RET(len, x, RET) do { len-=x; if (len<0) {gnutls_assert(); return RET;} } while (0) -#define DECR_LENGTH_COM(len, x, COM) do { len-=x; if (len<0) {gnutls_assert(); COM;} } while (0) +#define DECR_LENGTH_RET(len, x, RET) DECR_LENGTH_COM(len, x, return RET) +#define DECR_LENGTH_COM(len, x, COM) do { if (len typedef enum handshake_state_t { STATE0 = 0, STATE1, STATE2, @@ -227,14 +270,30 @@ typedef enum handshake_state_t { STATE0 = 0, STATE1, STATE2, STATE9, STATE10, STATE11, STATE12, STATE13, STATE14, STATE15, STATE16, STATE17, STATE18, STATE19, STATE20 = 20, STATE21, STATE22, - STATE30 = 30, STATE31, STATE40 = 40, STATE41, STATE50 = 50 + STATE30 = 30, STATE31, STATE40 = 40, STATE41, STATE50 = 50, + STATE90=90, STATE91, STATE92, STATE93, STATE94, STATE99=99, + STATE100=100, STATE101, STATE102, STATE103, STATE104, + STATE105, STATE106, STATE107, STATE108, STATE109, STATE110, + STATE111, STATE112, STATE113, STATE114, STATE115, + STATE150 /* key update */ } handshake_state_t; typedef enum bye_state_t { BYE_STATE0 = 0, BYE_STATE1, BYE_STATE2 } bye_state_t; +typedef enum send_ticket_state_t { + TICKET_STATE0 = 0, TICKET_STATE1 +} send_ticket_state_t; + +typedef enum reauth_state_t { + REAUTH_STATE0 = 0, REAUTH_STATE1, REAUTH_STATE2, REAUTH_STATE3, + REAUTH_STATE4, REAUTH_STATE5 +} reauth_state_t; + +#define TICKET_STATE session->internals.ticket_state #define BYE_STATE session->internals.bye_state +#define REAUTH_STATE session->internals.reauth_state typedef enum heartbeat_state_t { SHB_SEND1 = 0, @@ -245,8 +304,16 @@ typedef enum heartbeat_state_t { typedef enum recv_state_t { RECV_STATE_0 = 0, RECV_STATE_DTLS_RETRANSMIT, + /* client-side false start state */ RECV_STATE_FALSE_START_HANDLING, /* we are calling gnutls_handshake() within record_recv() */ - RECV_STATE_FALSE_START /* gnutls_record_recv() should complete the handshake */ + RECV_STATE_FALSE_START, /* gnutls_record_recv() should complete the handshake */ + /* async handshake msg state */ + RECV_STATE_ASYNC_HANDSHAKE, /* an incomplete async handshake message was seen */ + /* server-side early start under TLS1.3; enabled when no client cert is received */ + RECV_STATE_EARLY_START_HANDLING, /* we are calling gnutls_handshake() within record_recv() */ + RECV_STATE_EARLY_START, /* gnutls_record_recv() should complete the handshake */ + RECV_STATE_REHANDSHAKE, /* gnutls_record_recv() should complete any incoming re-handshake requests */ + RECV_STATE_REAUTH /* gnutls_record_recv() should complete any incoming reauthentication requests */ } recv_state_t; #include "str.h" @@ -256,27 +323,60 @@ typedef enum recv_state_t { */ #define MAX_ALGOS GNUTLS_MAX_ALGORITHM_NUM -/* http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml - */ +/* IDs are allocated in a way that all values fit in 64-bit integer as (1< + +verify(GNUTLS_EXTENSION_MAX < GNUTLS_EXTENSION_MAX_VALUE); +verify(GNUTLS_EXTENSION_MAX < MAX_EXT_TYPES); + +/* we must provide at least 16 extensions for users to register; + * increase GNUTLS_EXTENSION_MAX_VALUE, MAX_EXT_TYPES and used_exts + * type if this fails + */ +verify(GNUTLS_EXTENSION_MAX_VALUE - GNUTLS_EXTENSION_MAX >= 16); + +/* The 'verify' symbol from is used extensively in the + * code; undef it to avoid clash + */ +#undef verify + typedef enum { CIPHER_STREAM, CIPHER_BLOCK, CIPHER_AEAD } cipher_type_t; #define RESUME_TRUE 1 @@ -293,6 +393,8 @@ typedef enum content_type_t { #define GNUTLS_PK_ANY (gnutls_pk_algorithm_t)-1 #define GNUTLS_PK_NONE (gnutls_pk_algorithm_t)-2 +#define GNUTLS_PK_IS_RSA(pk) ((pk) == GNUTLS_PK_RSA || (pk) == GNUTLS_PK_RSA_PSS) + /* Message buffers (mbuffers) structures */ /* this is actually the maximum number of distinct handshake @@ -302,6 +404,10 @@ typedef enum content_type_t { typedef struct { /* Handshake layer type and sequence of message */ gnutls_handshake_description_t htype; + + /* The "real" type received; that is, it does not distinguish + * HRR from server hello, while htype does */ + gnutls_handshake_description_t rtype; uint32_t length; /* valid in DTLS */ @@ -346,7 +452,7 @@ typedef struct mbuffer_st { content_type_t type; /* record layer sequence */ - gnutls_uint64 record_sequence; + uint64_t record_sequence; /* Filled in by handshake layer on send: * type, epoch, htype, handshake_sequence @@ -368,59 +474,154 @@ typedef struct mbuffer_head_st { size_t byte_length; } mbuffer_head_st; -/* Store & Retrieve functions defines: +/* Store & Retrieve functions defines: */ typedef struct auth_cred_st { gnutls_credentials_type_t algorithm; - /* the type of credentials depends on algorithm + /* the type of credentials depends on algorithm */ void *credentials; struct auth_cred_st *next; } auth_cred_st; +/* session ticket definitions */ +#define TICKET_MASTER_KEY_SIZE (TICKET_KEY_NAME_SIZE+TICKET_CIPHER_KEY_SIZE+TICKET_MAC_SECRET_SIZE) +#define TICKET_KEY_NAME_SIZE 16 +#define TICKET_CIPHER_KEY_SIZE 32 +#define TICKET_MAC_SECRET_SIZE 16 + +/* These are restricted by TICKET_CIPHER_KEY_SIZE and TICKET_MAC_SECRET_SIZE */ +#define TICKET_CIPHER GNUTLS_CIPHER_AES_256_CBC +#define TICKET_IV_SIZE 16 +#define TICKET_BLOCK_SIZE 16 + +#define TICKET_MAC_ALGO GNUTLS_MAC_SHA1 +#define TICKET_MAC_SIZE 20 /* HMAC-SHA1 */ + +struct ticket_st { + uint8_t key_name[TICKET_KEY_NAME_SIZE]; + uint8_t IV[TICKET_IV_SIZE]; + uint8_t *encrypted_state; + uint16_t encrypted_state_len; + uint8_t mac[TICKET_MAC_SIZE]; +}; + +struct binder_data_st { + const struct mac_entry_st *prf; /* non-null if this struct is set */ + gnutls_datum_t psk; + + /* 0-based index of the selected PSK. + * This only applies if the HSK_PSK_SELECTED flag is set in internals.hsk_flags, + * which signals a PSK has indeed been selected. */ + uint8_t idx; + uint8_t resumption; /* whether it is a resumption binder */ +}; + +typedef void (* gnutls_stek_rotation_callback_t) (const gnutls_datum_t *prev_key, + const gnutls_datum_t *new_key, + uint64_t t); + struct gnutls_key_st { - /* For ECDH KX */ - gnutls_pk_params_st ecdh_params; /* private part */ - /* public part */ - bigint_t ecdh_x; - bigint_t ecdh_y; - gnutls_datum_t ecdhx; /* public key used in ECDHX (point) */ - - /* For DH KX */ + struct { /* These are kept outside the TLS1.3 union as they are + * negotiated via extension, even before protocol is negotiated */ + gnutls_pk_params_st ecdh_params; + gnutls_pk_params_st ecdhx_params; + gnutls_pk_params_st dh_params; + } kshare; + + /* The union contents depend on the negotiated protocol. + * It should not contain any values which are allocated + * prior to protocol negotiation, as it would be impossible + * to deinitialize. + */ + union { + struct { + /* the current (depending on state) secret, can be + * early_secret, client_early_traffic_secret, ... */ + uint8_t temp_secret[MAX_HASH_SIZE]; + unsigned temp_secret_size; /* depends on negotiated PRF size */ + uint8_t e_ckey[MAX_HASH_SIZE]; /* client_early_traffic_secret */ + uint8_t hs_ckey[MAX_HASH_SIZE]; /* client_hs_traffic_secret */ + uint8_t hs_skey[MAX_HASH_SIZE]; /* server_hs_traffic_secret */ + uint8_t ap_ckey[MAX_HASH_SIZE]; /* client_ap_traffic_secret */ + uint8_t ap_skey[MAX_HASH_SIZE]; /* server_ap_traffic_secret */ + uint8_t ap_expkey[MAX_HASH_SIZE]; /* {early_,}exporter_master_secret */ + uint8_t ap_rms[MAX_HASH_SIZE]; /* resumption_master_secret */ + } tls13; /* tls1.3 */ + + /* Folow the SSL3.0 and TLS1.2 key exchanges */ + struct { + /* For ECDH KX */ + struct { + gnutls_pk_params_st params; /* private part */ + /* public part */ + bigint_t x; + bigint_t y; + gnutls_datum_t raw; /* public key used in ECDHX (point) */ + } ecdh; + + /* For DH KX */ + struct { + gnutls_pk_params_st params; + bigint_t client_Y; + } dh; + + /* for SRP KX */ + struct { + bigint_t srp_key; + bigint_t srp_g; + bigint_t srp_p; + bigint_t A; + bigint_t B; + bigint_t u; + bigint_t b; + bigint_t a; + bigint_t x; + } srp; + } tls12; /* from ssl3.0 to tls12 */ + } proto; + + /* binders / pre-shared keys in use; temporary storage. + * On client side it will hold data for the resumption and external + * PSKs After server hello is received the selected binder is set on 0 position + * and HSK_PSK_SELECTED is set. + * + * On server side the first value is populated with + * the selected PSK data if HSK_PSK_SELECTED flag is set. */ + struct binder_data_st binders[2]; + + /* TLS pre-master key; applies to 1.2 and 1.3 */ gnutls_datum_t key; - - /* For DH KX */ - gnutls_pk_params_st dh_params; - bigint_t client_Y; - /* for SRP */ - - bigint_t srp_key; - bigint_t srp_g; - bigint_t srp_p; - bigint_t A; - bigint_t B; - bigint_t u; - bigint_t b; - bigint_t a; - bigint_t x; - - /* this is used to hold the peers authentication data + + uint8_t + /* The key to encrypt and decrypt session tickets */ + session_ticket_key[TICKET_MASTER_KEY_SIZE], + /* Static buffer for the previous key, whenever we need it */ + previous_ticket_key[TICKET_MASTER_KEY_SIZE], + /* Initial key supplied by the caller */ + initial_stek[TICKET_MASTER_KEY_SIZE]; + + /* this is used to hold the peers authentication data */ - /* auth_info_t structures SHOULD NOT contain malloced + /* auth_info_t structures SHOULD NOT contain malloced * elements. Check gnutls_session_pack.c, and gnutls_auth.c. * Remember that this should be calloced! */ void *auth_info; gnutls_credentials_type_t auth_info_type; - int auth_info_size; /* needed in order to store to db for restoring + int auth_info_size; /* needed in order to store to db for restoring */ - uint8_t crypt_algo; - auth_cred_st *cred; /* used to specify keys/certificates etc */ + struct { + uint64_t last_result; + uint8_t was_rotated; + gnutls_stek_rotation_callback_t cb; + } totp; }; + typedef struct gnutls_key_st gnutls_key_st; struct pin_info_st { @@ -434,6 +635,10 @@ typedef struct record_state_st record_state_st; struct record_parameters_st; typedef struct record_parameters_st record_parameters_st; +#define GNUTLS_CIPHER_FLAG_ONLY_AEAD (1 << 0) /* When set, this cipher is only available through the new AEAD API */ +#define GNUTLS_CIPHER_FLAG_XOR_NONCE (1 << 1) /* In this TLS AEAD cipher xor the implicit_iv with the nonce */ +#define GNUTLS_CIPHER_FLAG_NO_REKEY (1 << 2) /* whether this tls1.3 cipher doesn't need to rekey after 2^24 messages */ + /* cipher and mac parameters */ typedef struct cipher_entry_st { const char *name; @@ -445,7 +650,7 @@ typedef struct cipher_entry_st { uint16_t explicit_iv; /* the size of explicit IV - the IV stored in record */ uint16_t cipher_iv; /* the size of IV needed by the cipher */ uint16_t tagsize; - bool xor_nonce; /* In this TLS AEAD cipher xor the implicit_iv with the nonce */ + unsigned flags; } cipher_entry_st; typedef struct gnutls_cipher_suite_entry_st { @@ -457,10 +662,29 @@ typedef struct gnutls_cipher_suite_entry_st { gnutls_protocol_t min_version; /* this cipher suite is supported * from 'version' and above; */ + gnutls_protocol_t max_version; /* this cipher suite is not supported + * after 'version' and above; + */ gnutls_protocol_t min_dtls_version; /* DTLS min version */ + gnutls_protocol_t max_dtls_version; /* DTLS max version */ gnutls_mac_algorithm_t prf; } gnutls_cipher_suite_entry_st; + +typedef struct gnutls_group_entry_st { + const char *name; + gnutls_group_t id; + const gnutls_datum_t *prime; + const gnutls_datum_t *q; + const gnutls_datum_t *generator; + const unsigned *q_bits; + gnutls_ecc_curve_t curve; + gnutls_pk_algorithm_t pk; + unsigned tls_id; /* The RFC4492 namedCurve ID or TLS 1.3 group ID */ +} gnutls_group_entry_st; + +#define GNUTLS_MAC_FLAG_PREIMAGE_INSECURE 1 /* if this algorithm should not be trusted for pre-image attacks */ +#define GNUTLS_MAC_FLAG_CONTINUOUS_MAC (1 << 1) /* if this MAC should be used in a 'continuous' way in TLS */ /* This structure is used both for MACs and digests */ typedef struct mac_entry_st { @@ -472,8 +696,8 @@ typedef struct mac_entry_st { unsigned key_size; unsigned nonce_size; unsigned placeholder; /* if set, then not a real MAC */ - unsigned secure; /* must be set to zero if this hash is known to be broken */ unsigned block_size; /* internal block size for HMAC */ + unsigned flags; } mac_entry_st; typedef struct { @@ -492,7 +716,18 @@ typedef struct { /* if SSL3 is disabled this flag indicates that this protocol is a placeholder, * otherwise it prevents this protocol from being set as record version */ bool obsolete; + bool tls13_sem; /* The TLS 1.3 handshake semantics */ bool false_start; /* That version can be used with false start */ + bool only_extension; /* negotiated only with an extension */ + bool post_handshake_auth; /* Supports the TLS 1.3 post handshake auth */ + bool key_shares; /* TLS 1.3 key share key exchange */ + bool multi_ocsp; /* TLS 1.3 multiple OCSP responses */ + /* + * TLS versions modify the semantics of signature algorithms. This number + * is there to distinguish signature algorithms semantics between versions + * (maps to sign_algorithm_st->tls_sem) + */ + uint8_t tls_sig_sem; } version_entry_st; @@ -500,11 +735,10 @@ typedef struct { #include #include -#include typedef struct { - uint8_t hash_algorithm; - uint8_t sign_algorithm; /* pk algorithm actually */ + uint8_t id[2]; /* used to be (in TLS 1.2) hash algorithm , PK algorithm */ + uint8_t tls_sem; /* should match the protocol version's tls_sig_sem. */ } sign_algorithm_st; /* This structure holds parameters got from TLS extension @@ -512,18 +746,15 @@ typedef struct { * structures also - see SRP). */ -#define MAX_SIGNATURE_ALGORITHMS 16 -#define MAX_SIGN_ALGO_SIZE (2 + MAX_SIGNATURE_ALGORITHMS * 2) - #define MAX_VERIFY_DATA_SIZE 36 /* in SSL 3.0, 12 in TLS 1.0 */ -/* auth_info_t structures now MAY contain malloced +/* auth_info_t structures now MAY contain malloced * elements. */ /* This structure and auth_info_t, are stored in the resume database, * and are restored, in case of resume. - * Holds all the required parameters to resume the current + * Holds all the required parameters to resume the current * session. */ @@ -533,7 +764,6 @@ typedef struct { */ typedef struct { unsigned int entity; /* GNUTLS_SERVER or GNUTLS_CLIENT */ - gnutls_kx_algorithm_t kx_algorithm; /* The epoch used to read and write */ uint16_t epoch_read; @@ -545,13 +775,16 @@ typedef struct { /* The epoch at index 0 of record_parameters. */ uint16_t epoch_min; - /* this is the ciphersuite we are going to use + /* this is the ciphersuite we are going to use * moved here from internals in order to be restored * on resume; */ - uint8_t cipher_suite[2]; - gnutls_compression_method_t compression_method; - gnutls_mac_algorithm_t prf_mac; + const struct gnutls_cipher_suite_entry_st *cs; + + /* This is kept outside the ciphersuite entry as on certain + * TLS versions we need a separate PRF MAC, i.e., MD5_SHA1. */ + const mac_entry_st *prf; + uint8_t master_secret[GNUTLS_MASTER_SIZE]; uint8_t client_random[GNUTLS_RANDOM_SIZE]; uint8_t server_random[GNUTLS_RANDOM_SIZE]; @@ -559,17 +792,37 @@ typedef struct { uint8_t session_id_size; time_t timestamp; - /* The send size is the one requested by the programmer. - * The recv size is the one negotiated with the peer. + /* whether client has agreed in post handshake auth - only set on server side */ + uint8_t post_handshake_auth; + + /* The maximum amount of plaintext sent in a record, + * negotiated with the peer. */ uint16_t max_record_send_size; uint16_t max_record_recv_size; - /* holds the negotiated certificate type */ - gnutls_certificate_type_t cert_type; - gnutls_ecc_curve_t ecc_curve; /* holds the first supported ECC curve requested by client */ - /* Holds the signature algorithm used in this session - If any */ + /* The maximum amount of plaintext sent in a record, set by + * the programmer. + */ + uint16_t max_user_record_send_size; + uint16_t max_user_record_recv_size; + + /* The maximum amount of early data */ + uint32_t max_early_data_size; + + /* holds the negotiated certificate types */ + gnutls_certificate_type_t client_ctype; + gnutls_certificate_type_t server_ctype; + + /* The selected (after server hello EC or DH group */ + const gnutls_group_entry_st *grp; + + /* Holds the signature algorithm that will be used in this session, + * selected by the server at the time of Ciphersuite/certificate + * selection - see select_sign_algorithm() */ gnutls_sign_algorithm_t server_sign_algo; + + /* Holds the signature algorithm used in this session - If any */ gnutls_sign_algorithm_t client_sign_algo; /* Whether the master secret negotiation will be according to @@ -579,8 +832,11 @@ typedef struct { /* encrypt-then-mac -> rfc7366 */ uint8_t etm; + uint8_t client_auth_type; /* gnutls_credentials_type_t */ + uint8_t server_auth_type; + /* Note: if you add anything in Security_Parameters struct, then - * also modify CPY_COMMON in gnutls_constate.c, and gnutls_session_pack.c, + * also modify CPY_COMMON in constate.c, and session_pack.c, * in order to save it in the session storage. */ @@ -591,13 +847,28 @@ typedef struct { const version_entry_st *pversion; } security_parameters_st; +typedef struct api_aead_cipher_hd_st { + cipher_hd_st ctx_enc; +} api_aead_cipher_hd_st; + struct record_state_st { - gnutls_datum_t mac_secret; - gnutls_datum_t IV; - gnutls_datum_t key; - auth_cipher_hd_st cipher_state; - comp_hd_st compression_state; - gnutls_uint64 sequence_number; + /* mac keys can be as long as the hash size */ + uint8_t mac_key[MAX_HASH_SIZE]; + unsigned mac_key_size; + + uint8_t iv[MAX_CIPHER_IV_SIZE]; + unsigned iv_size; + + uint8_t key[MAX_CIPHER_KEY_SIZE]; + unsigned key_size; + + union { + auth_cipher_hd_st tls12; + api_aead_cipher_hd_st aead; + } ctx; + unsigned aead_tag_size; + unsigned is_aead; + uint64_t sequence_number; }; @@ -613,8 +884,6 @@ struct record_parameters_st { uint16_t epoch; int initialized; - gnutls_compression_method_t compression_algorithm; - const cipher_entry_st *cipher; bool etm; const mac_entry_st *mac; @@ -635,8 +904,8 @@ struct record_parameters_st { }; typedef struct { - unsigned int priority[MAX_ALGOS]; - unsigned int algorithms; + unsigned int priorities[MAX_ALGOS]; + unsigned int num_priorities; } priority_st; typedef enum { @@ -646,44 +915,85 @@ typedef enum { SR_SAFE } safe_renegotiation_t; +#define MAX_CIPHERSUITE_SIZE 256 + +typedef struct ciphersuite_list_st { + const gnutls_cipher_suite_entry_st *entry[MAX_CIPHERSUITE_SIZE]; + unsigned int size; +} ciphersuite_list_st; + +typedef struct group_list_st { + const gnutls_group_entry_st *entry[MAX_ALGOS]; + unsigned int size; + bool have_ffdhe; +} group_list_st; + +typedef struct sign_algo_list_st { + const struct gnutls_sign_entry_st *entry[MAX_ALGOS]; + unsigned int size; +} sign_algo_list_st; + +#include "atomic.h" + /* For the external api */ struct gnutls_priority_st { - priority_st cipher; - priority_st mac; - priority_st kx; - priority_st compression; priority_st protocol; - priority_st cert_type; - priority_st sign_algo; - priority_st supported_ecc; + priority_st client_ctype; + priority_st server_ctype; + + /* The following are not necessary to be stored in + * the structure; however they are required by the + * external APIs: gnutls_priority_*_list() */ + priority_st _cipher; + priority_st _mac; + priority_st _kx; + priority_st _sign_algo; + priority_st _supported_ecc; + + /* the supported groups */ + group_list_st groups; + + /* the supported signature algorithms */ + sign_algo_list_st sigalg; + + /* the supported ciphersuites */ + ciphersuite_list_st cs; /* to disable record padding */ bool no_extensions; - bool no_ext_master_secret; - bool allow_large_records; - unsigned int dumbfw; + + safe_renegotiation_t sr; bool min_record_version; bool server_precedence; - bool allow_key_usage_violation; bool allow_server_key_usage_violation; /* for test suite purposes only */ - bool allow_wrong_pms; bool no_tickets; - bool no_etm; bool have_cbc; - /* Whether stateless compression will be used */ - bool stateless_compression; + bool have_psk; + bool force_etm; unsigned int additional_verify_flags; + /* TLS_FALLBACK_SCSV */ + bool fallback; + /* The session's expected security level. * Will be used to determine the minimum DH bits, * (or the acceptable certificate security level). */ gnutls_sec_param_t level; - unsigned int dh_prime_bits; /* old (deprecated) variable */ - /* TLS_FALLBACK_SCSV */ - bool fallback; + /* these should be accessed from + * session->internals.VAR names */ + bool _allow_large_records; + bool _allow_small_records; + bool _no_etm; + bool _no_ext_master_secret; + bool _allow_key_usage_violation; + bool _allow_wrong_pms; + bool _dumbfw; + unsigned int _dh_prime_bits; /* old (deprecated) variable */ + + DEF_ATOMIC_INT(usage_cnt); }; /* Allow around 50KB of length-hiding padding @@ -693,33 +1003,51 @@ struct gnutls_priority_st { #define ENABLE_COMPAT(x) \ (x)->allow_large_records = 1; \ + (x)->allow_small_records = 1; \ (x)->no_etm = 1; \ (x)->no_ext_master_secret = 1; \ (x)->allow_key_usage_violation = 1; \ (x)->allow_wrong_pms = 1; \ (x)->dumbfw = 1 +#define ENABLE_PRIO_COMPAT(x) \ + (x)->_allow_large_records = 1; \ + (x)->_allow_small_records = 1; \ + (x)->_no_etm = 1; \ + (x)->_no_ext_master_secret = 1; \ + (x)->_allow_key_usage_violation = 1; \ + (x)->_allow_wrong_pms = 1; \ + (x)->_dumbfw = 1 + /* DH and RSA parameters types. */ typedef struct gnutls_dh_params_int { - /* [0] is the prime, [1] is the generator. + /* [0] is the prime, [1] is the generator, [2] is Q if available. */ - bigint_t params[2]; + bigint_t params[3]; int q_bits; /* length of q in bits. If zero then length is unknown. */ } dh_params_st; +/* TLS 1.3 session ticket + */ typedef struct { - gnutls_dh_params_t dh_params; - int free_dh_params; -} internal_params_st; + struct timespec arrival_time; + struct timespec creation_time; + uint32_t lifetime; + uint32_t age_add; + uint8_t nonce[255]; + size_t nonce_size; + const mac_entry_st *prf; + uint8_t resumption_master_secret[MAX_HASH_SIZE]; + gnutls_datum_t ticket; +} tls13_ticket_st; /* DTLS session state */ typedef struct { /* HelloVerifyRequest DOS prevention cookie */ - uint8_t cookie[DTLS_MAX_COOKIE_SIZE]; - uint8_t cookie_len; + gnutls_datum_t dcookie; /* For DTLS handshake fragmentation and reassembly. */ uint16_t hsk_write_seq; @@ -737,7 +1065,7 @@ typedef struct { unsigned int hsk_hello_verify_requests; - /* The actual retrans_timeout for the next message (e.g. doubled or so) + /* The actual retrans_timeout for the next message (e.g. doubled or so) */ unsigned int actual_retrans_timeout_ms; @@ -765,13 +1093,22 @@ typedef struct { int handshake_hash_buffer_prev_len; /* keeps the length of handshake_hash_buffer, excluding * the last received message */ + unsigned handshake_hash_buffer_client_hello_len; /* if non-zero it is the length of data until the client hello message */ unsigned handshake_hash_buffer_client_kx_len;/* if non-zero it is the length of data until the * the client key exchange message */ - gnutls_buffer_st handshake_hash_buffer; /* used to keep the last received handshake + unsigned handshake_hash_buffer_server_finished_len;/* if non-zero it is the length of data until the + * the server finished message */ + unsigned handshake_hash_buffer_client_finished_len;/* if non-zero it is the length of data until the + * the client finished message */ + gnutls_buffer_st handshake_hash_buffer; /* used to keep the last received handshake * message */ + bool resumable; /* TRUE or FALSE - if we can resume that session */ - bool ticket_sent; /* whether a session ticket was sent */ + + send_ticket_state_t ticket_state; /* used by gnutls_session_ticket_send() */ bye_state_t bye_state; /* used by gnutls_bye() */ + reauth_state_t reauth_state; /* used by gnutls_reauth() */ + handshake_state_t handshake_final_state; handshake_state_t handshake_state; /* holds * a number which indicates where @@ -782,7 +1119,7 @@ typedef struct { bool invalid_connection; /* true or FALSE - if this session is valid */ - bool may_not_read; /* if it's 0 then we can read/write, otherwise it's forbiden to read/write + bool may_not_read; /* if it's 0 then we can read/write, otherwise it's forbidden to read/write */ bool may_not_write; bool read_eof; /* non-zero if we have received a closure alert. */ @@ -795,11 +1132,31 @@ typedef struct { int last_handshake_out; /* priorities */ - struct gnutls_priority_st priorities; + struct gnutls_priority_st *priorities; + + /* variables directly set when setting the priorities above, or + * when overriding them */ + bool allow_large_records; + bool allow_small_records; + bool no_etm; + bool no_ext_master_secret; + bool allow_key_usage_violation; + bool allow_wrong_pms; + bool dumbfw; + + /* old (deprecated) variable. This is used for both srp_prime_bits + * and dh_prime_bits as they don't overlap */ + /* For SRP: minimum bits to allow for SRP + * use gnutls_srp_set_prime_bits() to adjust it. + */ + uint16_t dh_prime_bits; /* srp_prime_bits */ /* resumed session */ bool resumed; /* RESUME_TRUE or FALSE - if we are resuming a session */ - bool resumption_requested; /* non-zero if resumption was requested by client */ + + /* server side: non-zero if resumption was requested by client + * client side: non-zero if we set resumption parameters */ + bool resumption_requested; security_parameters_st resumed_security_parameters; gnutls_datum_t resumption_data; /* copy of input to gnutls_session_set_data() */ @@ -807,13 +1164,14 @@ typedef struct { * protocol only. freed using _gnutls_handshake_io_buffer_clear(); */ mbuffer_head_st handshake_send_buffer; + mbuffer_head_st handshake_header_recv_buffer; handshake_buffer_st handshake_recv_buffer[MAX_HANDSHAKE_MSGS]; int handshake_recv_buffer_size; /* this buffer holds a record packet -mostly used for * non blocking IO. */ - mbuffer_head_st record_recv_buffer; /* buffer holding the unparsed record that is currently + mbuffer_head_st record_recv_buffer; /* buffer holding the unparsed record that is currently * being received */ mbuffer_head_st record_send_buffer; /* holds cached data * for the gnutls_io_write_buffered() @@ -824,18 +1182,26 @@ typedef struct { * send. */ - record_flush_t record_flush_mode; /* GNUTLS_FLUSH or GNUTLS_CORKED */ + mbuffer_head_st early_data_recv_buffer; + gnutls_buffer_st early_data_presend_buffer; + + record_send_state_t rsend_state; + /* buffer used temporarily during key update */ + gnutls_buffer_st record_key_update_buffer; gnutls_buffer_st record_presend_buffer; /* holds cached data * for the gnutls_record_send() * function. */ + /* buffer used temporarily during TLS1.3 reauthentication */ + gnutls_buffer_st reauth_buffer; + time_t expire_time; /* after expire_time seconds this session will expire */ - struct mod_auth_st_int *auth_struct; /* used in handshake packets and KX algorithms */ + const struct mod_auth_st_int *auth_struct; /* used in handshake packets and KX algorithms */ /* this is the highest version available * to the peer. (advertized version). - * This is obtained by the Handshake Client Hello + * This is obtained by the Handshake Client Hello * message. (some implementations read the Record version) */ uint8_t adv_version_major; @@ -846,7 +1212,7 @@ typedef struct { * supports it. In server side it contains GNUTLS_CERT_REQUIRE * or similar. */ - unsigned send_cert_req; + gnutls_certificate_request_t send_cert_req; size_t max_handshake_data_buffer_size; @@ -879,27 +1245,27 @@ typedef struct { unsigned int h_type; /* the hooked type */ int16_t h_post; /* whether post-generation/receive */ + gnutls_keylog_func keylog_func; + /* holds the selected certificate and key. * use _gnutls_selected_certs_deinit() and _gnutls_selected_certs_set() * to change them. */ gnutls_pcert_st *selected_cert_list; - int16_t selected_cert_list_length; + uint16_t selected_cert_list_length; struct gnutls_privkey_st *selected_key; - bool selected_need_free; - gnutls_status_request_ocsp_func selected_ocsp_func; - void *selected_ocsp_func_ptr; - /* In case of a client holds the extensions we sent to the peer; - * otherwise the extensions we received from the client. + /* new callbacks such as gnutls_certificate_retrieve_function3 + * set the selected_ocsp datum values. The older OCSP callback-based + * functions, set the ocsp_func. The former takes precedence when + * set. */ - uint16_t extensions_sent[MAX_EXT_TYPES]; - uint16_t extensions_sent_size; + gnutls_ocsp_data_st *selected_ocsp; + uint16_t selected_ocsp_length; + gnutls_status_request_ocsp_func selected_ocsp_func; + void *selected_ocsp_func_ptr; + bool selected_need_free; - /* is 0 if we are to send the whole PGP key, or non zero - * if the fingerprint is to be sent. - */ - bool pgp_fingerprint; /* This holds the default version that our first * record packet will have. */ @@ -908,38 +1274,22 @@ typedef struct { void *user_ptr; - bool enable_private; /* non zero to - * enable cipher suites - * which have 0xFF status. - */ - /* Holds 0 if the last called function was interrupted while * receiving, and non zero otherwise. */ bool direction; - /* This callback will be used (if set) to receive an - * openpgp key. (if the peer sends a fingerprint) - */ - gnutls_openpgp_recv_key_func openpgp_recv_key_func; - /* If non zero the server will not advertise the CA's he * trusts (do not send an RDN sequence). */ bool ignore_rdn_sequence; - /* This is used to set an arbitary version in the RSA + /* This is used to set an arbitrary version in the RSA * PMS secret. Can be used by clients to test whether the * server checks that version. (** only used in gnutls-cli-debug) */ uint8_t rsa_pms_version[2]; - /* Here we cache the DH or RSA parameters got from the - * credentials structure, or from a callback. That is to - * minimize external calls. - */ - internal_params_st params; - /* To avoid using global variables, and especially on Windows where * the application may use a different errno variable than GnuTLS, * it is possible to use gnutls_transport_set_errno to set a @@ -950,25 +1300,12 @@ typedef struct { */ int errnum; - /* minimum bits to allow for SRP - * use gnutls_srp_set_prime_bits() to adjust it. - */ - uint16_t srp_prime_bits; - /* A handshake process has been completed */ bool initial_negotiation_completed; + void *post_negotiation_lock; /* protects access to the variable above + * in the cases where negotiation is incomplete + * after gnutls_handshake() - early/false start */ - struct { - uint16_t type; - gnutls_ext_priv_data_t priv; - bool set; - } extension_int_data[MAX_EXT_TYPES]; - - struct { - uint16_t type; - gnutls_ext_priv_data_t priv; - bool set; - } resumed_extension_int_data[MAX_EXT_TYPES]; /* The type of transport protocol; stream or datagram */ transport_t transport; @@ -990,14 +1327,77 @@ typedef struct { /* starting time of current handshake */ struct timespec handshake_start_time; - time_t handshake_endtime; /* end time in seconds */ + /* expected end time of current handshake (start+timeout); + * this is only filled if a handshake_time_ms is set. */ + struct timespec handshake_abs_timeout; + + /* An estimation of round-trip time under TLS1.3; populated in client side only */ + unsigned ertt; + unsigned int handshake_timeout_ms; /* timeout in milliseconds */ unsigned int record_timeout_ms; /* timeout in milliseconds */ - unsigned crt_requested; /* 1 if client auth was requested (i.e., client cert). - * In case of a server this holds 1 if we should wait - * for a client certificate verify - */ + /* saved context of post handshake certificate request. In + * client side is what we received in server's certificate request; + * in server side is what we sent to client. */ + gnutls_datum_t post_handshake_cr_context; + /* it is a copy of the handshake hash buffer if post handshake is used */ + gnutls_buffer_st post_handshake_hash_buffer; + +/* When either of PSK or DHE-PSK is received */ +#define HSK_PSK_KE_MODES_RECEIVED (HSK_PSK_KE_MODE_PSK|HSK_PSK_KE_MODE_DHE_PSK|HSK_PSK_KE_MODE_INVALID) + +#define HSK_CRT_VRFY_EXPECTED 1 +#define HSK_CRT_ASKED (1<<2) +#define HSK_HRR_SENT (1<<3) +#define HSK_HRR_RECEIVED (1<<4) +#define HSK_CRT_REQ_SENT (1<<5) +#define HSK_KEY_UPDATE_ASKED (1<<7) /* flag is not used during handshake */ +#define HSK_FALSE_START_USED (1<<8) /* TLS1.2 only */ +#define HSK_HAVE_FFDHE (1<<9) /* whether the peer has advertized at least an FFDHE group */ +#define HSK_USED_FFDHE (1<<10) /* whether ffdhe was actually negotiated and used */ +#define HSK_PSK_KE_MODES_SENT (1<<11) +#define HSK_PSK_KE_MODE_PSK (1<<12) /* client: whether PSK without DH is allowed, + * server: whether PSK without DH is selected. */ +#define HSK_PSK_KE_MODE_INVALID (1<<13) /* server: no compatible PSK modes were seen */ +#define HSK_PSK_KE_MODE_DHE_PSK (1<<14) /* server: whether PSK with DH is selected + * client: whether PSK with DH is allowed + */ +#define HSK_PSK_SELECTED (1<<15) /* server: whether PSK was selected, either for resumption or not; + * on resumption session->internals.resumed will be set as well. + * client: the same */ +#define HSK_KEY_SHARE_SENT (1<<16) /* server: key share was sent to client */ +#define HSK_KEY_SHARE_RECEIVED (1<<17) /* client: key share was received + * server: key share was received and accepted */ +#define HSK_TLS13_TICKET_SENT (1<<18) /* client: sent a ticket under TLS1.3; + * server: a ticket was sent to client. + */ +#define HSK_TLS12_TICKET_SENT (1<<19) /* client: sent a ticket under TLS1.2; + * server: a ticket was sent to client. + */ +#define HSK_TICKET_RECEIVED (1<<20) /* client: a session ticket was received */ +#define HSK_EARLY_START_USED (1<<21) +#define HSK_EARLY_DATA_IN_FLIGHT (1<<22) /* client: sent early_data extension in ClientHello + * server: early_data extension was seen in ClientHello + */ +#define HSK_EARLY_DATA_ACCEPTED (1<<23) /* client: early_data extension was seen in EncryptedExtensions + * server: intend to process early data + */ +#define HSK_RECORD_SIZE_LIMIT_NEGOTIATED (1<<24) +#define HSK_RECORD_SIZE_LIMIT_SENT (1<<25) /* record_size_limit extension was sent */ +#define HSK_RECORD_SIZE_LIMIT_RECEIVED (1<<26) /* server: record_size_limit extension was seen but not accepted yet */ +#define HSK_OCSP_REQUESTED (1<<27) /* server: client requested OCSP stapling */ +#define HSK_CLIENT_OCSP_REQUESTED (1<<28) /* client: server requested OCSP stapling */ + + /* The hsk_flags are for use within the ongoing handshake; + * they are reset to zero prior to handshake start by gnutls_handshake. */ + unsigned hsk_flags; + struct timespec last_key_update; + unsigned key_update_count; + /* Read-only pointer to the full ClientHello message */ + gnutls_buffer_st full_client_hello; + /* The offset at which extensions start in the ClientHello buffer */ + int extensions_offset; gnutls_buffer_st hb_local_data; gnutls_buffer_st hb_remote_data; @@ -1014,9 +1414,11 @@ typedef struct { recv_state_t recv_state; /* state of the receive function */ + /* if set, server and client random were set by the application */ bool sc_random_set; - unsigned flags; /* the flags in gnutls_init() */ +#define INT_FLAG_NO_TLS13 (1LL<<60) + uint64_t flags; /* the flags in gnutls_init() and GNUTLS_INT_FLAGS */ /* a verify callback to override the verify callback from the credentials * structure */ @@ -1043,9 +1445,7 @@ typedef struct { /* The saved username from PSK or SRP auth */ char saved_username[MAX_USERNAME_SIZE+1]; - bool saved_username_set; - - bool false_start_used; /* non-zero if false start was used for appdata */ + int saved_username_size; /* Needed for TCP Fast Open (TFO), set by gnutls_transport_set_fastopen() */ tfo_st tfo; @@ -1053,14 +1453,63 @@ typedef struct { struct gnutls_supplemental_entry_st *rsup; unsigned rsup_size; - struct extension_entry_st *rexts; + struct hello_ext_entry_st *rexts; unsigned rexts_size; + + struct { /* ext_data[id] contains data for extension_t id */ + gnutls_ext_priv_data_t priv; + gnutls_ext_priv_data_t resumed_priv; + uint8_t set; + uint8_t resumed_set; + } ext_data[MAX_EXT_TYPES]; + + /* In case of a client holds the extensions we sent to the peer; + * otherwise the extensions we received from the client. This is + * an OR of (1<internals.cand_ec_group = session->internals.cand_dh_group = \ + session->internals.cand_group = NULL struct gnutls_session_int { security_parameters_st security_parameters; @@ -1070,20 +1519,20 @@ struct gnutls_session_int { }; -/* functions +/* functions */ void _gnutls_free_auth_info(gnutls_session_t session); /* These two macros return the advertised TLS version of * the peer. */ -#define _gnutls_get_adv_version_major( session) \ +#define _gnutls_get_adv_version_major(session) \ session->internals.adv_version_major -#define _gnutls_get_adv_version_minor( session) \ +#define _gnutls_get_adv_version_minor(session) \ session->internals.adv_version_minor -#define set_adv_version( session, major, minor) \ +#define set_adv_version(session, major, minor) \ session->internals.adv_version_major = major; \ session->internals.adv_version_minor = minor @@ -1104,12 +1553,25 @@ inline static unsigned get_num_version(gnutls_session_t session) void _gnutls_priority_update_fips(void); void _gnutls_priority_update_non_aesni(void); +extern unsigned _gnutls_disable_tls13; #define timespec_sub_ms _gnutls_timespec_sub_ms unsigned int /* returns a-b in ms */ timespec_sub_ms(struct timespec *a, struct timespec *b); +inline static int _gnutls_timespec_cmp(struct timespec *a, struct timespec *b) { + if (a->tv_sec < b->tv_sec) + return -1; + if (a->tv_sec > b->tv_sec) + return 1; + if (a->tv_nsec < b->tv_nsec) + return -1; + if (a->tv_nsec > b->tv_nsec) + return 1; + return 0; +} + #include inline static int _gnutls_set_current_version(gnutls_session_t s, unsigned v) { @@ -1120,19 +1582,63 @@ inline static int _gnutls_set_current_version(gnutls_session_t s, unsigned v) return 0; } -inline static size_t max_user_send_size(gnutls_session_t session, - record_parameters_st * - record_params) +/* Returns the maximum amount of the plaintext to be sent, considering + * both user-specified/negotiated maximum values. + */ +inline static size_t max_record_send_size(gnutls_session_t session, + record_parameters_st * + record_params) { size_t max; - if (IS_DTLS(session)) { - max = MIN(gnutls_dtls_get_data_mtu(session), session->security_parameters.max_record_send_size); - } else { - max = session->security_parameters.max_record_send_size; - } + max = MIN(session->security_parameters.max_record_send_size, + session->security_parameters.max_user_record_send_size); + + if (IS_DTLS(session)) + max = MIN(gnutls_dtls_get_data_mtu(session), max); return max; } -#endif /* GNUTLS_INT_H */ +/* Returns the during the handshake negotiated certificate type(s). + * See state.c for the full function documentation. + * + * This function is made static inline for optimization reasons. + */ +inline static gnutls_certificate_type_t +get_certificate_type(gnutls_session_t session, + gnutls_ctype_target_t target) +{ + switch (target) { + case GNUTLS_CTYPE_CLIENT: + return session->security_parameters.client_ctype; + break; + case GNUTLS_CTYPE_SERVER: + return session->security_parameters.server_ctype; + break; + case GNUTLS_CTYPE_OURS: + if (IS_SERVER(session)) { + return session->security_parameters.server_ctype; + } else { + return session->security_parameters.client_ctype; + } + break; + case GNUTLS_CTYPE_PEERS: + if (IS_SERVER(session)) { + return session->security_parameters.client_ctype; + } else { + return session->security_parameters.server_ctype; + } + break; + default: // Illegal parameter passed + return GNUTLS_CRT_UNKNOWN; + } +} + +/* Macros to aide constant time/mem checks */ +#define CONSTCHECK_NOT_EQUAL(a, b) ((-((uint32_t)(a) ^ (uint32_t)(b))) >> 31) +#define CONSTCHECK_EQUAL(a, b) (1U - CONSTCHECK_NOT_EQUAL(a, b)) + +extern unsigned int _gnutls_global_version; + +#endif /* GNUTLS_LIB_GNUTLS_INT_H */ diff --git a/lib/gnutlsxx.cpp b/lib/gnutlsxx.cpp index b91c994436..ea1632174b 100644 --- a/lib/gnutlsxx.cpp +++ b/lib/gnutlsxx.cpp @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -46,6 +46,11 @@ namespace gnutls gnutls_deinit (s); } + gnutls_session_t session::ptr() + { + return s; + } + int session::bye (gnutls_close_request_t how) { return RETWRAP (gnutls_bye (s, how)); @@ -60,6 +65,11 @@ namespace gnutls { } + server_session::server_session (int flags):session (GNUTLS_SERVER | + (flags & ~GNUTLS_CLIENT)) + { + } + server_session::~server_session () { } @@ -277,11 +287,21 @@ namespace gnutls { } + client_session::client_session (int flags):session (GNUTLS_CLIENT | + (flags & ~GNUTLS_SERVER)) + { + } + client_session::~client_session () { } // client session + void client_session::set_verify_cert (const char *hostname, unsigned flags) + { + gnutls_session_set_verify_cert(s, hostname, flags); + } + void client_session::set_server_name (gnutls_server_name_type_t type, const void *name, size_t name_length) { @@ -459,6 +479,11 @@ namespace gnutls gnutls_transport_set_pull_function (s, pull_func); } + void session::set_transport_pull_timeout_function (gnutls_pull_timeout_func pull_timeout_func) + { + gnutls_transport_set_pull_timeout_function (s, pull_timeout_func); + } + void session::set_user_ptr (void *ptr) { gnutls_session_set_ptr (s, ptr); diff --git a/lib/gthreads.h b/lib/gthreads.h new file mode 100644 index 0000000000..72bdb56ae9 --- /dev/null +++ b/lib/gthreads.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_GTHREADS_H +#define GNUTLS_LIB_GTHREADS_H + +#include + +/* Using a C99-only compiler installed in parallel with modern C11 environment + * will see HAVE_THREADS_H, but won't be able to use _Thread_local. */ +#if __STDC_VERSION__ >= 201112 && !defined(__STDC_NO_THREADS__) && defined(HAVE_THREADS_H) +# include +#elif defined(__GNUC__) || defined(__SUNPRO_C) || defined(__xlC__) /* clang is covered by __GNUC__ */ +# define _Thread_local __thread +#elif defined(_MSC_VER) +# define _Thread_local __declspec(thread) +#else +# error Unsupported platform +#endif + +#endif /* GNUTLS_LIB_GTHREADS_H */ diff --git a/lib/handshake-checks.c b/lib/handshake-checks.c index 4a2fe427f9..b07b9680cb 100644 --- a/lib/handshake-checks.c +++ b/lib/handshake-checks.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -50,6 +50,7 @@ int _gnutls_check_id_for_change(gnutls_session_t session) cred_type = gnutls_auth_get_type(session); if (cred_type == GNUTLS_CRD_PSK || cred_type == GNUTLS_CRD_SRP) { const char *username = NULL; + int username_length; if (cred_type == GNUTLS_CRD_PSK) { psk_auth_info_t ai; @@ -59,6 +60,7 @@ int _gnutls_check_id_for_change(gnutls_session_t session) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); username = ai->username; + username_length = ai->username_len; #ifdef ENABLE_SRP } else { srp_server_auth_info_t ai = _gnutls_get_auth_info(session, GNUTLS_CRD_SRP); @@ -66,23 +68,23 @@ int _gnutls_check_id_for_change(gnutls_session_t session) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); username = ai->username; + username_length = strlen(ai->username); #endif } if (username == NULL) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - if (session->internals.saved_username_set) { - if (strcmp(session->internals.saved_username, username) != 0) { + if (session->internals.saved_username_size != -1) { + if (session->internals.saved_username_size == username_length && + strncmp(session->internals.saved_username, username, username_length) != 0) { _gnutls_debug_log("Session's PSK username changed during rehandshake; aborting!\n"); return gnutls_assert_val(GNUTLS_E_SESSION_USER_ID_CHANGED); } } else { - size_t len = strlen(username); - - memcpy(session->internals.saved_username, username, len); - session->internals.saved_username[len] = 0; - session->internals.saved_username_set = 1; + memcpy(session->internals.saved_username, username, username_length); + session->internals.saved_username[username_length] = 0; + session->internals.saved_username_size = username_length; } } diff --git a/lib/handshake-defs.h b/lib/handshake-defs.h new file mode 100644 index 0000000000..0b89cca608 --- /dev/null +++ b/lib/handshake-defs.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ +#ifndef HANDSHAKE_DEFS_H +#define HANDSHAKE_DEFS_H + +#define EARLY_TRAFFIC_LABEL "c e traffic" +#define EXT_BINDER_LABEL "ext binder" +#define RES_BINDER_LABEL "res binder" +#define EARLY_EXPORTER_MASTER_LABEL "e exp master" +#define HANDSHAKE_CLIENT_TRAFFIC_LABEL "c hs traffic" +#define HANDSHAKE_SERVER_TRAFFIC_LABEL "s hs traffic" +#define DERIVED_LABEL "derived" +#define APPLICATION_CLIENT_TRAFFIC_LABEL "c ap traffic" +#define APPLICATION_SERVER_TRAFFIC_LABEL "s ap traffic" +#define APPLICATION_TRAFFIC_UPDATE "traffic upd" +#define EXPORTER_MASTER_LABEL "exp master" +#define RMS_MASTER_LABEL "res master" +#define EXPORTER_LABEL "exporter" +#define RESUMPTION_LABEL "resumption" + +#define HRR_RANDOM \ + "\xCF\x21\xAD\x74\xE5\x9A\x61\x11\xBE\x1D\x8C\x02\x1E\x65\xB8\x91" \ + "\xC2\xA2\x11\x16\x7A\xBB\x8C\x5E\x07\x9E\x09\xE2\xC8\xA8\x33\x9C" + +#define TLS13_TICKETS_TO_SEND 2 + +/* Enable: Appendix D4. Middlebox Compatibility Mode */ +#define TLS13_APPENDIX_D4 1 + +#endif /* HANDSHAKE_DEFS_H */ diff --git a/lib/handshake-tls13.c b/lib/handshake-tls13.c new file mode 100644 index 0000000000..ea236c803c --- /dev/null +++ b/lib/handshake-tls13.c @@ -0,0 +1,786 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* Functions that relate to the TLS handshake procedure. + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "dh.h" +#include "debug.h" +#include "algorithms.h" +#include "cipher.h" +#include "buffers.h" +#include "mbuffers.h" +#include "kx.h" +#include "handshake.h" +#include "num.h" +#include "hash_int.h" +#include "db.h" +#include "hello_ext.h" +#include "supplemental.h" +#include "auth.h" +#include "sslv2_compat.h" +#include +#include "constate.h" +#include +#include +#include +#include +#include "secrets.h" +#include "tls13/hello_retry.h" +#include "tls13/encrypted_extensions.h" +#include "tls13/certificate_request.h" +#include "tls13/certificate_verify.h" +#include "tls13/certificate.h" +#include "tls13/early_data.h" +#include "tls13/finished.h" +#include "tls13/key_update.h" +#include "ext/pre_shared_key.h" +#include "locks.h" + +static int generate_rms_keys(gnutls_session_t session); +static int generate_hs_traffic_keys(gnutls_session_t session); +static int generate_ap_traffic_keys(gnutls_session_t session); + +#define SAVE_TRANSCRIPT \ + if (session->internals.flags & GNUTLS_POST_HANDSHAKE_AUTH) { \ + /* If post-handshake auth is in use we need a copy of the original \ + * handshake transcript */ \ + memcpy( &session->internals.post_handshake_hash_buffer, \ + &session->internals.handshake_hash_buffer, \ + sizeof(session->internals.handshake_hash_buffer)); \ + _gnutls_buffer_init(&session->internals.handshake_hash_buffer); \ + } + +/* + * _gnutls13_handshake_client + * This function performs the client side of the handshake of the TLS/SSL protocol. + */ +int _gnutls13_handshake_client(gnutls_session_t session) +{ + int ret = 0; + + switch (STATE) { + case STATE99: + case STATE100: +#ifdef TLS13_APPENDIX_D4 + /* We send it before keys are generated. That works because CCS + * is always being cached and queued and not being sent directly */ + ret = _gnutls_send_change_cipher_spec(session, AGAIN(STATE100)); + STATE = STATE100; + IMED_RET("send change cipher spec", ret, 0); +#endif + FALLTHROUGH; + case STATE101: + /* Note that we check IN_FLIGHT, not ACCEPTED + * here. This is because the client sends early data + * speculatively. */ + if (session->internals.hsk_flags & HSK_EARLY_DATA_IN_FLIGHT) { + ret = _tls13_write_connection_state_init(session, STAGE_EARLY); + if (ret == 0) { + _gnutls_epoch_bump(session); + ret = _gnutls_epoch_dup(session, EPOCH_WRITE_CURRENT); + } + STATE = STATE101; + IMED_RET_FATAL("set early traffic keys", ret, 0); + } + FALLTHROUGH; + case STATE102: + ret = _gnutls13_send_early_data(session); + STATE = STATE102; + IMED_RET("send early data", ret, 0); + FALLTHROUGH; + case STATE103: + STATE = STATE103; + ret = generate_hs_traffic_keys(session); + /* Note that we check IN_FLIGHT, not ACCEPTED + * here. This is because the client sends early data + * speculatively. */ + IMED_RET_FATAL("generate hs traffic keys", ret, 0); + if (session->internals.hsk_flags & HSK_EARLY_DATA_IN_FLIGHT) + ret = _tls13_read_connection_state_init(session, STAGE_HS); + else + ret = _tls13_connection_state_init(session, STAGE_HS); + IMED_RET_FATAL("set hs traffic keys", ret, 0); + FALLTHROUGH; + case STATE104: + ret = _gnutls13_recv_encrypted_extensions(session); + STATE = STATE104; + IMED_RET("recv encrypted extensions", ret, 0); + FALLTHROUGH; + case STATE105: + ret = _gnutls13_recv_certificate_request(session); + STATE = STATE105; + IMED_RET("recv certificate request", ret, 0); + FALLTHROUGH; + case STATE106: + ret = _gnutls13_recv_certificate(session); + STATE = STATE106; + IMED_RET("recv certificate", ret, 0); + FALLTHROUGH; + case STATE107: + ret = _gnutls13_recv_certificate_verify(session); + STATE = STATE107; + IMED_RET("recv server certificate verify", ret, 0); + FALLTHROUGH; + case STATE108: + ret = _gnutls_run_verify_callback(session, GNUTLS_CLIENT); + STATE = STATE108; + if (ret < 0) + return gnutls_assert_val(ret); + FALLTHROUGH; + case STATE109: + ret = _gnutls13_recv_finished(session); + STATE = STATE109; + IMED_RET("recv finished", ret, 0); + FALLTHROUGH; + case STATE110: + ret = _gnutls13_send_end_of_early_data(session, AGAIN(STATE110)); + STATE = STATE110; + IMED_RET("send end of early data", ret, 0); + + /* Note that we check IN_FLIGHT, not ACCEPTED + * here. This is because the client sends early data + * speculatively. */ + if (session->internals.hsk_flags & HSK_EARLY_DATA_IN_FLIGHT) { + session->internals.hsk_flags &= ~HSK_EARLY_DATA_IN_FLIGHT; + ret = _tls13_write_connection_state_init(session, STAGE_HS); + IMED_RET_FATAL("set hs traffic key after sending early data", ret, 0); + } + FALLTHROUGH; + case STATE111: + ret = _gnutls13_send_certificate(session, AGAIN(STATE111)); + STATE = STATE111; + IMED_RET("send certificate", ret, 0); + FALLTHROUGH; + case STATE112: + ret = _gnutls13_send_certificate_verify(session, AGAIN(STATE112)); + STATE = STATE112; + IMED_RET("send certificate verify", ret, 0); + FALLTHROUGH; + case STATE113: + ret = _gnutls13_send_finished(session, AGAIN(STATE113)); + STATE = STATE113; + IMED_RET("send finished", ret, 0); + FALLTHROUGH; + case STATE114: + STATE = STATE114; + + ret = + generate_ap_traffic_keys(session); + IMED_RET_FATAL("generate app keys", ret, 0); + + ret = generate_rms_keys(session); + IMED_RET_FATAL("generate rms keys", ret, 0); + + /* set traffic keys */ + ret = _tls13_connection_state_init(session, STAGE_APP); + IMED_RET_FATAL("set app keys", ret, 0); + + STATE = STATE0; + break; + default: + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + } + + /* no lock of post_negotiation_lock is required here as this is not run + * after handshake */ + session->internals.recv_state = RECV_STATE_0; + session->internals.initial_negotiation_completed = 1; + + SAVE_TRANSCRIPT; + + if (session->internals.resumed != RESUME_FALSE) + _gnutls_set_resumed_parameters(session); + + return 0; +} + +static int generate_non_auth_rms_keys(gnutls_session_t session) +{ + int ret; + /* we simulate client finished */ + uint8_t finished[MAX_HASH_SIZE+TLS_HANDSHAKE_HEADER_SIZE]; + unsigned spos; + + ret = _gnutls13_compute_finished(session->security_parameters.prf, + session->key.proto.tls13.hs_ckey, + &session->internals.handshake_hash_buffer, + finished+TLS_HANDSHAKE_HEADER_SIZE); + if (ret < 0) + return gnutls_assert_val(ret); + + spos = session->internals.handshake_hash_buffer.length; + + finished[0] = GNUTLS_HANDSHAKE_FINISHED; + _gnutls_write_uint24(session->security_parameters.prf->output_size, finished+1); + + ret = _gnutls_buffer_append_data(&session->internals.handshake_hash_buffer, finished, + TLS_HANDSHAKE_HEADER_SIZE+session->security_parameters.prf->output_size); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _tls13_derive_secret(session, RMS_MASTER_LABEL, sizeof(RMS_MASTER_LABEL)-1, + session->internals.handshake_hash_buffer.data, + session->internals.handshake_hash_buffer.length, + session->key.proto.tls13.temp_secret, + session->key.proto.tls13.ap_rms); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.handshake_hash_buffer.length = spos; + + return 0; +} + +static int generate_rms_keys(gnutls_session_t session) +{ + int ret; + + ret = _tls13_derive_secret(session, RMS_MASTER_LABEL, sizeof(RMS_MASTER_LABEL)-1, + session->internals.handshake_hash_buffer.data, + session->internals.handshake_hash_buffer_client_finished_len, + session->key.proto.tls13.temp_secret, + session->key.proto.tls13.ap_rms); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + +static int generate_ap_traffic_keys(gnutls_session_t session) +{ + int ret; + uint8_t zero[MAX_HASH_SIZE]; + + ret = _tls13_derive_secret(session, DERIVED_LABEL, sizeof(DERIVED_LABEL)-1, + NULL, 0, session->key.proto.tls13.temp_secret, + session->key.proto.tls13.temp_secret); + if (ret < 0) + return gnutls_assert_val(ret); + + memset(zero, 0, session->security_parameters.prf->output_size); + ret = _tls13_update_secret(session, zero, session->security_parameters.prf->output_size); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _tls13_derive_secret(session, EXPORTER_MASTER_LABEL, sizeof(EXPORTER_MASTER_LABEL)-1, + session->internals.handshake_hash_buffer.data, + session->internals.handshake_hash_buffer_server_finished_len, + session->key.proto.tls13.temp_secret, + session->key.proto.tls13.ap_expkey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_call_keylog_func(session, "EXPORTER_SECRET", + session->key.proto.tls13.ap_expkey, + session->security_parameters.prf->output_size); + if (ret < 0) + return gnutls_assert_val(ret); + + _gnutls_epoch_bump(session); + ret = _gnutls_epoch_dup(session, EPOCH_READ_CURRENT); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + +static int generate_hs_traffic_keys(gnutls_session_t session) +{ + int ret; + unsigned null_key = 0; + + if (unlikely(session->key.proto.tls13.temp_secret_size == 0)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + ret = _tls13_derive_secret(session, DERIVED_LABEL, sizeof(DERIVED_LABEL)-1, + NULL, 0, session->key.proto.tls13.temp_secret, + session->key.proto.tls13.temp_secret); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + if ((session->security_parameters.entity == GNUTLS_CLIENT && + (!(session->internals.hsk_flags & HSK_KEY_SHARE_RECEIVED) || + (!(session->internals.hsk_flags & HSK_PSK_KE_MODE_DHE_PSK) && + session->internals.resumed != RESUME_FALSE))) || + (session->security_parameters.entity == GNUTLS_SERVER && + !(session->internals.hsk_flags & HSK_KEY_SHARE_SENT))) { + + if ((session->internals.hsk_flags & HSK_PSK_SELECTED) && + (session->internals.hsk_flags & HSK_PSK_KE_MODE_PSK)) { + null_key = 1; + } + } + + if (null_key) { + uint8_t digest[MAX_HASH_SIZE]; + unsigned digest_size; + + if (unlikely(session->security_parameters.prf == NULL)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + digest_size = session->security_parameters.prf->output_size; + memset(digest, 0, digest_size); + + ret = _tls13_update_secret(session, digest, digest_size); + if (ret < 0) { + gnutls_assert(); + return ret; + } + } else { + if (unlikely(session->key.key.size == 0)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + ret = _tls13_update_secret(session, session->key.key.data, session->key.key.size); + if (ret < 0) { + gnutls_assert(); + return ret; + } + } + + return 0; +} + +/* + * _gnutls13_handshake_server + * This function does the server stuff of the handshake protocol. + */ +int _gnutls13_handshake_server(gnutls_session_t session) +{ + int ret = 0; + + switch (STATE) { + case STATE90: + ret = _gnutls13_handshake_hash_buffers_synth(session, session->security_parameters.prf, 0); + STATE = STATE90; + IMED_RET_FATAL("reset handshake buffers", ret, 0); + FALLTHROUGH; + case STATE91: + ret = _gnutls13_send_hello_retry_request(session, AGAIN(STATE91)); + STATE = STATE91; + IMED_RET("send hello retry request", ret, 0); + FALLTHROUGH; + case STATE92: +#ifdef TLS13_APPENDIX_D4 + ret = _gnutls_send_change_cipher_spec(session, AGAIN(STATE92)); + STATE = STATE92; + IMED_RET("send change cipher spec", ret, 0); +#endif + FALLTHROUGH; + case STATE93: + ret = + _gnutls_recv_handshake(session, + GNUTLS_HANDSHAKE_CLIENT_HELLO, + 0, NULL); + if (ret == GNUTLS_E_INT_RET_0) { + /* this is triggered by post_client_hello, and instructs the + * handshake to proceed but be put on hold */ + ret = GNUTLS_E_INTERRUPTED; + STATE = STATE94; /* hello already parsed -> move to next state */ + } else { + STATE = STATE93; + } + + IMED_RET("recv client hello", ret, 0); + FALLTHROUGH; + case STATE94: + ret = _gnutls_send_server_hello(session, AGAIN(STATE94)); + STATE = STATE94; + IMED_RET("send hello", ret, 0); + FALLTHROUGH; + case STATE99: + case STATE100: +#ifdef TLS13_APPENDIX_D4 + /* don't send CCS twice: when HRR has already been + * sent, CCS should have followed it (see above) */ + if (!(session->internals.hsk_flags & HSK_HRR_SENT)) { + ret = _gnutls_send_change_cipher_spec(session, AGAIN(STATE100)); + STATE = STATE100; + IMED_RET("send change cipher spec", ret, 0); + } +#endif + FALLTHROUGH; + case STATE101: + STATE = STATE101; + if (session->internals.hsk_flags & HSK_EARLY_DATA_ACCEPTED) { + ret = _tls13_read_connection_state_init(session, STAGE_EARLY); + if (ret == 0) { + _gnutls_epoch_bump(session); + ret = _gnutls_epoch_dup(session, EPOCH_READ_CURRENT); + } + IMED_RET_FATAL("set early traffic keys", ret, 0); + + ret = generate_hs_traffic_keys(session); + IMED_RET_FATAL("generate hs traffic keys", ret, 0); + + ret = _tls13_write_connection_state_init(session, STAGE_HS); + } else { + ret = generate_hs_traffic_keys(session); + IMED_RET_FATAL("generate hs traffic keys", ret, 0); + + ret = _tls13_connection_state_init(session, STAGE_HS); + } + IMED_RET_FATAL("set hs traffic keys", ret, 0); + FALLTHROUGH; + case STATE102: + ret = _gnutls13_send_encrypted_extensions(session, AGAIN(STATE102)); + STATE = STATE102; + IMED_RET("send encrypted extensions", ret, 0); + FALLTHROUGH; + case STATE103: + ret = _gnutls13_send_certificate_request(session, AGAIN(STATE103)); + STATE = STATE103; + IMED_RET("send certificate request", ret, 0); + FALLTHROUGH; + case STATE104: + ret = _gnutls13_send_certificate(session, AGAIN(STATE104)); + STATE = STATE104; + IMED_RET("send certificate", ret, 0); + FALLTHROUGH; + case STATE105: + ret = _gnutls13_send_certificate_verify(session, AGAIN(STATE105)); + STATE = STATE105; + IMED_RET("send certificate verify", ret, 0); + FALLTHROUGH; + case STATE106: + ret = _gnutls13_send_finished(session, AGAIN(STATE106)); + STATE = STATE106; + IMED_RET("send finished", ret, 0); + FALLTHROUGH; + case STATE107: + ret = _gnutls13_recv_end_of_early_data(session); + STATE = STATE107; + IMED_RET("recv end of early data", ret, 0); + + if (session->internals.hsk_flags & HSK_EARLY_DATA_ACCEPTED) { + ret = _tls13_read_connection_state_init(session, STAGE_HS); + IMED_RET_FATAL("set hs traffic key after receiving early data", ret, 0); + } + FALLTHROUGH; + case STATE108: + /* At this point our sending keys should be the app keys + * see 4.4.4 at draft-ietf-tls-tls13-28 */ + ret = + generate_ap_traffic_keys(session); + IMED_RET_FATAL("generate app keys", ret, 0); + + /* If the session is unauthenticated, try to optimize the handshake by + * sending the session ticket early. */ + if (!(session->internals.hsk_flags & (HSK_CRT_REQ_SENT|HSK_PSK_SELECTED))) { + STATE = STATE108; + + ret = generate_non_auth_rms_keys(session); + IMED_RET_FATAL("generate rms keys", ret, 0); + + session->internals.hsk_flags |= HSK_EARLY_START_USED; + _gnutls_handshake_log("HSK[%p]: unauthenticated session eligible for early start\n", session); + } + + ret = _tls13_write_connection_state_init(session, STAGE_APP); + IMED_RET_FATAL("set write app keys", ret, 0); + + _gnutls_handshake_log("HSK[%p]: switching early to application traffic keys\n", session); + + FALLTHROUGH; + case STATE109: + if (session->internals.resumed != RESUME_FALSE) + _gnutls_set_resumed_parameters(session); + + if (session->internals.hsk_flags & HSK_EARLY_START_USED) { + if (!(session->internals.flags & GNUTLS_NO_AUTO_SEND_TICKET)) + ret = _gnutls13_send_session_ticket(session, TLS13_TICKETS_TO_SEND, + AGAIN(STATE109)); + + STATE = STATE109; + IMED_RET("send session ticket", ret, 0); + + /* complete this phase of the handshake. We + * should be called again by gnutls_record_recv() + */ + + if (session->internals.flags & GNUTLS_ENABLE_EARLY_START) { + STATE = STATE113; /* finished */ + gnutls_assert(); + + session->internals.recv_state = RECV_STATE_EARLY_START; + return 0; + } + } + FALLTHROUGH; + case STATE110: + ret = _gnutls13_recv_certificate(session); + STATE = STATE110; + IMED_RET("recv certificate", ret, 0); + FALLTHROUGH; + case STATE111: + ret = _gnutls13_recv_certificate_verify(session); + STATE = STATE111; + IMED_RET("recv certificate verify", ret, 0); + FALLTHROUGH; + case STATE112: + ret = _gnutls_run_verify_callback(session, GNUTLS_CLIENT); + STATE = STATE112; + if (ret < 0) + return gnutls_assert_val(ret); + FALLTHROUGH; + case STATE113: /* can enter from STATE109 */ + ret = _gnutls13_recv_finished(session); + STATE = STATE113; + IMED_RET("recv finished", ret, 0); + FALLTHROUGH; + case STATE114: + /* If we did request a client certificate, then we can + * only send the tickets here */ + STATE = STATE114; + + if (!(session->internals.hsk_flags & HSK_EARLY_START_USED)) { + ret = generate_rms_keys(session); + IMED_RET_FATAL("generate rms keys", ret, 0); + } + + ret = _tls13_read_connection_state_init(session, STAGE_APP); + IMED_RET_FATAL("set read app keys", ret, 0); + + FALLTHROUGH; + case STATE115: + if (!(session->internals.hsk_flags & (HSK_TLS13_TICKET_SENT|HSK_EARLY_START_USED)) && + !(session->internals.flags & GNUTLS_NO_AUTO_SEND_TICKET)) { + ret = _gnutls13_send_session_ticket(session, TLS13_TICKETS_TO_SEND, + AGAIN(STATE115)); + STATE = STATE115; + IMED_RET("send session ticket", ret, 0); + } + + STATE = STATE0; + break; + default: + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + } + + /* explicitly reset any early start flags */ + gnutls_mutex_lock(&session->internals.post_negotiation_lock); + session->internals.recv_state = RECV_STATE_0; + session->internals.initial_negotiation_completed = 1; + gnutls_mutex_unlock(&session->internals.post_negotiation_lock); + + SAVE_TRANSCRIPT; + + + return 0; +} + +/* Processes handshake messages received asynchronously after initial handshake. + * + * It is called once per message and should return success, or a fatal error code. + */ +int +_gnutls13_recv_async_handshake(gnutls_session_t session) +{ + int ret; + handshake_buffer_st hsk; + recv_state_t next_state = RECV_STATE_0; + + /* The following messages are expected asynchronously after + * the handshake process is complete */ + if (unlikely(session->internals.handshake_in_progress)) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + + do { + _gnutls_handshake_buffer_init(&hsk); + + /* the received handshake message has already been pushed into + * handshake buffers. As we do not need to use the handshake hash + * buffers we call the lower level receive functions */ + ret = _gnutls_handshake_io_recv_int(session, GNUTLS_HANDSHAKE_ANY, &hsk, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + session->internals.last_handshake_in = hsk.htype; + + ret = _gnutls_call_hook_func(session, hsk.htype, GNUTLS_HOOK_PRE, 1, + hsk.data.data, hsk.data.length); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + switch(hsk.htype) { + case GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST: + if (!(session->security_parameters.entity == GNUTLS_CLIENT) || + !(session->internals.flags & GNUTLS_POST_HANDSHAKE_AUTH)) { + ret = gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + goto cleanup; + } + + _gnutls_buffer_reset(&session->internals.reauth_buffer); + + /* include the handshake headers in reauth buffer */ + ret = _gnutls_buffer_append_data(&session->internals.reauth_buffer, + hsk.header, hsk.header_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data(&session->internals.reauth_buffer, + hsk.data.data, hsk.data.length); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (session->internals.flags & GNUTLS_AUTO_REAUTH) { + ret = gnutls_reauth(session, 0); + if (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED) { + next_state = RECV_STATE_REAUTH; + } else if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } else { + /* Application is expected to handle re-authentication + * explicitly. */ + ret = GNUTLS_E_REAUTH_REQUEST; + } + + goto cleanup; + + case GNUTLS_HANDSHAKE_KEY_UPDATE: + ret = _gnutls13_recv_key_update(session, &hsk.data); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + /* Handshake messages MUST NOT span key changes, i.e., we + * should not have any other pending handshake messages from + * the same record. */ + if (session->internals.handshake_recv_buffer_size != 0) { + ret = gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + goto cleanup; + } + break; + case GNUTLS_HANDSHAKE_NEW_SESSION_TICKET: + if (session->security_parameters.entity != GNUTLS_CLIENT) { + ret = gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + goto cleanup; + } + + ret = _gnutls13_recv_session_ticket(session, &hsk.data); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + memcpy(session->internals.tls13_ticket.resumption_master_secret, + session->key.proto.tls13.ap_rms, + session->key.proto.tls13.temp_secret_size); + + session->internals.tls13_ticket.prf = session->security_parameters.prf; + session->internals.hsk_flags |= HSK_TICKET_RECEIVED; + break; + default: + gnutls_assert(); + ret = GNUTLS_E_UNEXPECTED_PACKET; + goto cleanup; + } + + ret = _gnutls_call_hook_func(session, hsk.htype, GNUTLS_HOOK_POST, 1, hsk.data.data, hsk.data.length); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + _gnutls_handshake_buffer_clear(&hsk); + + } while (_gnutls_record_buffer_get_size(session) > 0); + + session->internals.recv_state = next_state; + + return 0; + + cleanup: + /* if we have pending/partial handshake data in buffers, ensure that + * next read will read handshake data */ + if (_gnutls_record_buffer_get_size(session) > 0) + session->internals.recv_state = RECV_STATE_ASYNC_HANDSHAKE; + else + session->internals.recv_state = next_state; + + _gnutls_handshake_buffer_clear(&hsk); + return ret; +} + +/** + * gnutls_session_ticket_send: + * @session: is a #gnutls_session_t type. + * @nr: the number of tickets to send + * @flags: must be zero + * + * Sends a fresh session ticket to the peer. This is relevant only + * in server side under TLS1.3. This function may also return %GNUTLS_E_AGAIN + * or %GNUTLS_E_INTERRUPTED and in that case it must be called again. + * + * Returns: %GNUTLS_E_SUCCESS on success, or a negative error code. + **/ +int gnutls_session_ticket_send(gnutls_session_t session, unsigned nr, unsigned flags) +{ + int ret = 0; + const version_entry_st *vers = get_version(session); + + if (!vers->tls13_sem || session->security_parameters.entity == GNUTLS_CLIENT) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (nr == 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + switch (TICKET_STATE) { + case TICKET_STATE0: + ret = _gnutls_io_write_flush(session); + TICKET_STATE = TICKET_STATE0; + if (ret < 0) { + gnutls_assert(); + return ret; + } + FALLTHROUGH; + case TICKET_STATE1: + ret = + _gnutls13_send_session_ticket(session, nr, TICKET_STATE==TICKET_STATE1?1:0); + TICKET_STATE = TICKET_STATE1; + if (ret < 0) { + gnutls_assert(); + return ret; + } + break; + default: + gnutls_assert(); + return GNUTLS_E_INTERNAL_ERROR; + } + + TICKET_STATE = TICKET_STATE0; + + return 0; +} diff --git a/lib/handshake.c b/lib/handshake.c index 1c840c35a8..8d58fa48e7 100644 --- a/lib/handshake.c +++ b/lib/handshake.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2000-2016 Free Software Foundation, Inc. - * Copyright (C) 2015-2016 Red Hat, Inc. + * Copyright (C) 2015-2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -29,7 +29,6 @@ #include "dh.h" #include "debug.h" #include "algorithms.h" -#include "compress.h" #include "cipher.h" #include "buffers.h" #include "mbuffers.h" @@ -38,7 +37,7 @@ #include "num.h" #include "hash_int.h" #include "db.h" -#include "extensions.h" +#include "hello_ext.h" #include "supplemental.h" #include "auth.h" #include "sslv2_compat.h" @@ -46,6 +45,7 @@ #include "constate.h" #include #include +#include #include #include #include @@ -54,23 +54,24 @@ #include /* for gnutls_psk_server_credentials_t */ #include #include - -#ifdef HANDSHAKE_DEBUG -#define ERR(x, y) _gnutls_handshake_log("HSK[%p]: %s (%d)\n", session, x,y) -#else -#define ERR(x, y) +#include "secrets.h" +#include "tls13/session_ticket.h" +#include "locks.h" +#ifdef HAVE_VALGRIND_MEMCHECK_H +#include #endif #define TRUE 1 #define FALSE 0 -static int server_select_comp_method(gnutls_session_t session, +static int check_if_null_comp_present(gnutls_session_t session, uint8_t * data, int datalen); static int handshake_client(gnutls_session_t session); static int handshake_server(gnutls_session_t session); static int -recv_hello(gnutls_session_t session, uint8_t * data, int datalen); +read_server_hello(gnutls_session_t session, + uint8_t * data, int datalen); static int recv_handshake_final(gnutls_session_t session, int init); @@ -79,47 +80,91 @@ send_handshake_final(gnutls_session_t session, int init); /* Empties but does not free the buffer */ -static inline void -handshake_hash_buffer_empty(gnutls_session_t session) +inline static void +handshake_hash_buffer_reset(gnutls_session_t session) { - _gnutls_buffers_log("BUF[HSK]: Emptied buffer\n"); + session->internals.handshake_hash_buffer_client_hello_len = 0; + session->internals.handshake_hash_buffer_client_kx_len = 0; + session->internals.handshake_hash_buffer_server_finished_len = 0; + session->internals.handshake_hash_buffer_client_finished_len = 0; session->internals.handshake_hash_buffer_prev_len = 0; session->internals.handshake_hash_buffer.length = 0; + session->internals.full_client_hello.length = 0; return; } static int handshake_hash_add_recvd(gnutls_session_t session, - gnutls_handshake_description_t recv_type, - uint8_t * header, uint16_t header_size, - uint8_t * dataptr, uint32_t datalen); + gnutls_handshake_description_t recv_type, + uint8_t * header, uint16_t header_size, + uint8_t * dataptr, uint32_t datalen); static int handshake_hash_add_sent(gnutls_session_t session, - gnutls_handshake_description_t type, - uint8_t * dataptr, uint32_t datalen); + gnutls_handshake_description_t type, + uint8_t * dataptr, uint32_t datalen); static int recv_hello_verify_request(gnutls_session_t session, - uint8_t * data, int datalen); + uint8_t * data, int datalen); /* Clears the handshake hash buffers and handles. */ void _gnutls_handshake_hash_buffers_clear(gnutls_session_t session) { - session->internals.handshake_hash_buffer_prev_len = 0; - session->internals.handshake_hash_buffer_client_kx_len = 0; + handshake_hash_buffer_reset(session); _gnutls_buffer_clear(&session->internals.handshake_hash_buffer); + _gnutls_buffer_clear(&session->internals.full_client_hello); +} + +/* Replace handshake message buffer, with the special synthetic message + * needed by TLS1.3 when HRR is sent. */ +int _gnutls13_handshake_hash_buffers_synth(gnutls_session_t session, + const mac_entry_st *prf, + unsigned client) +{ + int ret; + uint8_t hdata[4+MAX_HASH_SIZE]; + size_t length; + + if (client) + length = session->internals.handshake_hash_buffer_prev_len; + else + length = session->internals.handshake_hash_buffer.length; + + /* calculate hash */ + hdata[0] = 254; + _gnutls_write_uint24(prf->output_size, &hdata[1]); + + ret = gnutls_hash_fast((gnutls_digest_algorithm_t)prf->id, + session->internals.handshake_hash_buffer.data, + length, hdata+4); + if (ret < 0) + return gnutls_assert_val(ret); + + handshake_hash_buffer_reset(session); + + ret = + _gnutls_buffer_append_data(&session->internals. + handshake_hash_buffer, + hdata, prf->output_size+4); + if (ret < 0) + return gnutls_assert_val(ret); + + _gnutls_buffers_log("BUF[HSK]: Replaced handshake buffer with synth message (%d bytes)\n", + prf->output_size+4); + + return 0; } /* this will copy the required values for resuming to * internals, and to security_parameters. * this will keep as less data to security_parameters. */ -static int resume_copy_required_values(gnutls_session_t session) +static int tls12_resume_copy_required_vals(gnutls_session_t session, unsigned ticket) { int ret; @@ -131,21 +176,14 @@ static int resume_copy_required_values(gnutls_session_t session) client_random, session->security_parameters.client_random, GNUTLS_RANDOM_SIZE); - /* keep the ciphersuite and compression + /* keep the ciphersuite and compression * That is because the client must see these in our * hello message. */ - ret = _gnutls_set_cipher_suite(session, + ret = _gnutls_set_cipher_suite2(session, session->internals. resumed_security_parameters. - cipher_suite); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = _gnutls_set_compression(session, - session->internals. - resumed_security_parameters. - compression_method); + cs); if (ret < 0) return gnutls_assert_val(ret); @@ -166,95 +204,137 @@ static int resume_copy_required_values(gnutls_session_t session) id) < 0) return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); - session->security_parameters.cert_type = - session->internals.resumed_security_parameters.cert_type; + session->security_parameters.client_ctype = + session->internals.resumed_security_parameters.client_ctype; + session->security_parameters.server_ctype = + session->internals.resumed_security_parameters.server_ctype; - memcpy(session->security_parameters.session_id, - session->internals.resumed_security_parameters.session_id, - sizeof(session->security_parameters.session_id)); - session->security_parameters.session_id_size = - session->internals.resumed_security_parameters.session_id_size; + if (!ticket) { + memcpy(session->security_parameters.session_id, + session->internals.resumed_security_parameters.session_id, + sizeof(session->security_parameters.session_id)); + session->security_parameters.session_id_size = + session->internals.resumed_security_parameters.session_id_size; + } return 0; } +void _gnutls_set_client_random(gnutls_session_t session, uint8_t * rnd) +{ + memcpy(session->security_parameters.client_random, rnd, + GNUTLS_RANDOM_SIZE); +} -/* this function will produce GNUTLS_RANDOM_SIZE==32 bytes of random data - * and put it to dst. - */ -static int create_tls_random(uint8_t * dst) +static +int _gnutls_gen_client_random(gnutls_session_t session) { - uint32_t tim; int ret; - /* Use weak random numbers for the most of the - * buffer except for the first 4 that are the - * system's time. - */ - - tim = gnutls_time(NULL); - /* generate server random value */ - _gnutls_write_uint32(tim, dst); - - ret = - gnutls_rnd(GNUTLS_RND_NONCE, &dst[3], GNUTLS_RANDOM_SIZE - 3); - if (ret < 0) { - gnutls_assert(); - return ret; + /* no random given, we generate. */ + if (session->internals.sc_random_set != 0) { + memcpy(session->security_parameters.client_random, + session->internals. + resumed_security_parameters.client_random, + GNUTLS_RANDOM_SIZE); + } else { + ret = gnutls_rnd(GNUTLS_RND_NONCE, + session->security_parameters.client_random, + GNUTLS_RANDOM_SIZE); + if (ret < 0) + return gnutls_assert_val(ret); } +#ifdef HAVE_VALGRIND_MEMCHECK_H + if (RUNNING_ON_VALGRIND) + VALGRIND_MAKE_MEM_DEFINED(session->security_parameters.client_random, + GNUTLS_RANDOM_SIZE); +#endif + return 0; } -int _gnutls_set_client_random(gnutls_session_t session, uint8_t * rnd) +static +int _gnutls_set_server_random(gnutls_session_t session, const version_entry_st *vers, uint8_t * rnd) { - int ret; + const version_entry_st *max; - if (rnd != NULL) - memcpy(session->security_parameters.client_random, rnd, - GNUTLS_RANDOM_SIZE); - else { - /* no random given, we generate. */ - if (session->internals.sc_random_set != 0) { - memcpy(session->security_parameters.client_random, - session->internals. - resumed_security_parameters.client_random, - GNUTLS_RANDOM_SIZE); - } else { - ret = - create_tls_random(session-> - security_parameters. - client_random); - if (ret < 0) - return gnutls_assert_val(ret); + memcpy(session->security_parameters.server_random, rnd, + GNUTLS_RANDOM_SIZE); + + /* check whether the server random value is set according to + * to TLS 1.3. p4.1.3 requirements */ + if (!IS_DTLS(session) && vers->id <= GNUTLS_TLS1_2 && have_creds_for_tls13(session)) { + + max = _gnutls_version_max(session); + if (max->id <= GNUTLS_TLS1_2) + return 0; + + if (vers->id == GNUTLS_TLS1_2 && + memcmp(&session->security_parameters.server_random[GNUTLS_RANDOM_SIZE-8], + "\x44\x4F\x57\x4E\x47\x52\x44\x01", 8) == 0) { + + _gnutls_audit_log(session, + "Detected downgrade to TLS 1.2 from TLS 1.3\n"); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } else if (vers->id <= GNUTLS_TLS1_1 && + memcmp(&session->security_parameters.server_random[GNUTLS_RANDOM_SIZE-8], + "\x44\x4F\x57\x4E\x47\x52\x44\x00", 8) == 0) { + + _gnutls_audit_log(session, + "Detected downgrade to TLS 1.1 or earlier from TLS 1.3\n"); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); } } + return 0; } -int _gnutls_set_server_random(gnutls_session_t session, uint8_t * rnd) +int _gnutls_gen_server_random(gnutls_session_t session, int version) { int ret; + const version_entry_st *max; - if (rnd != NULL) - memcpy(session->security_parameters.server_random, rnd, + if (session->internals.sc_random_set != 0) { + memcpy(session->security_parameters.server_random, + session->internals. + resumed_security_parameters.server_random, GNUTLS_RANDOM_SIZE); - else { - /* no random given, we generate. */ - if (session->internals.sc_random_set != 0) { - memcpy(session->security_parameters.server_random, - session->internals. - resumed_security_parameters.server_random, - GNUTLS_RANDOM_SIZE); + return 0; + } + + max = _gnutls_version_max(session); + if (max == NULL) + return gnutls_assert_val(GNUTLS_E_NO_CIPHER_SUITES); + + if (!IS_DTLS(session) && max->id >= GNUTLS_TLS1_3 && + version <= GNUTLS_TLS1_2) { + if (version == GNUTLS_TLS1_2) { + memcpy(&session->security_parameters.server_random[GNUTLS_RANDOM_SIZE-8], + "\x44\x4F\x57\x4E\x47\x52\x44\x01", 8); } else { - ret = - create_tls_random(session-> - security_parameters. - server_random); - if (ret < 0) - return gnutls_assert_val(ret); + memcpy(&session->security_parameters.server_random[GNUTLS_RANDOM_SIZE-8], + "\x44\x4F\x57\x4E\x47\x52\x44\x00", 8); } + ret = + gnutls_rnd(GNUTLS_RND_NONCE, session->security_parameters.server_random, GNUTLS_RANDOM_SIZE-8); + + } else { + ret = + gnutls_rnd(GNUTLS_RND_NONCE, session->security_parameters.server_random, GNUTLS_RANDOM_SIZE); + } + + if (ret < 0) { + gnutls_assert(); + return ret; } + +#ifdef HAVE_VALGRIND_MEMCHECK_H + if (RUNNING_ON_VALGRIND) + VALGRIND_MAKE_MEM_DEFINED(session->security_parameters.server_random, + GNUTLS_RANDOM_SIZE); +#endif + return 0; } @@ -344,7 +424,7 @@ _gnutls_finished(gnutls_session_t session, int type, void *ret, else len = session->internals.handshake_hash_buffer_prev_len; - algorithm = session->security_parameters.prf_mac; + algorithm = session->security_parameters.prf->id; rc = _gnutls_hash_fast(algorithm, session->internals. handshake_hash_buffer.data, len, @@ -352,7 +432,7 @@ _gnutls_finished(gnutls_session_t session, int type, void *ret, if (rc < 0) return gnutls_assert_val(rc); - hash_len = _gnutls_hash_get_algo_len(mac_to_entry(algorithm)); + hash_len = session->security_parameters.prf->output_size; if (type == GNUTLS_SERVER) { mesg = SERVER_MSG; @@ -371,13 +451,27 @@ _gnutls_finished(gnutls_session_t session, int type, void *ret, */ int _gnutls_negotiate_version(gnutls_session_t session, - gnutls_protocol_t adv_version, uint8_t major, uint8_t minor) + uint8_t major, uint8_t minor, unsigned allow_tls13) { - int ret; + const version_entry_st *vers; + const version_entry_st *aversion = nversion_to_entry(major, minor); + /* if we do not support that version, unless that version is TLS 1.2; + * TLS 1.2 is handled separately because it is always advertized under TLS 1.3 or later */ + if (aversion == NULL || + _gnutls_nversion_is_supported(session, major, minor) == 0) { + + if (aversion && aversion->id == GNUTLS_TLS1_2) { + vers = _gnutls_version_max(session); + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_NO_CIPHER_SUITES); + + if (vers->id >= GNUTLS_TLS1_2) { + session->security_parameters.pversion = aversion; + return 0; + } + } - /* if we do not support that version */ - if (adv_version == GNUTLS_VERSION_UNKNOWN || _gnutls_version_is_supported(session, adv_version) == 0) { /* if we get an unknown/unsupported version, then fail if the version we * got is too low to be supported */ if (!_gnutls_version_is_too_high(session, major, minor)) @@ -386,21 +480,28 @@ _gnutls_negotiate_version(gnutls_session_t session, /* If he requested something we do not support * then we send him the highest we support. */ - ret = _gnutls_version_max(session); - if (ret == GNUTLS_VERSION_UNKNOWN) { + vers = _gnutls_legacy_version_max(session); + if (vers == NULL) { /* this check is not really needed. */ gnutls_assert(); return GNUTLS_E_UNKNOWN_CIPHER_SUITE; } + + session->security_parameters.pversion = vers; + + return 0; } else { - ret = adv_version; - } + session->security_parameters.pversion = aversion; - if (_gnutls_set_current_version(session, ret) < 0) - return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + /* we do not allow TLS1.3 negotiation using this mechanism */ + if (aversion->tls13_sem && !allow_tls13) { + vers = _gnutls_legacy_version_max(session); + session->security_parameters.pversion = vers; + } - return ret; + return 0; + } } /* This function returns: @@ -410,9 +511,11 @@ _gnutls_negotiate_version(gnutls_session_t session, */ int _gnutls_user_hello_func(gnutls_session_t session, - gnutls_protocol_t adv_version, uint8_t major, uint8_t minor) + uint8_t major, uint8_t minor) { int ret, sret = 0; + const version_entry_st *vers, *old_vers; + const version_entry_st *new_max; if (session->internals.user_hello_func != NULL) { ret = session->internals.user_hello_func(session); @@ -425,19 +528,80 @@ _gnutls_user_hello_func(gnutls_session_t session, return ret; } - /* Here we need to renegotiate the version since the callee might - * have disabled some TLS versions. - */ - ret = _gnutls_negotiate_version(session, adv_version, major, minor); - if (ret < 0) { - gnutls_assert(); - return ret; + /* This callback is often used to switch the priority string of the + * server, and that includes switching version which we have already + * negotiated; note that this doesn't apply when resuming as the version + * negotiation is already complete. */ + if (session->internals.resumed != RESUME_TRUE) { + new_max = _gnutls_version_max(session); + old_vers = get_version(session); + + if (!old_vers->tls13_sem || (new_max && !new_max->tls13_sem)) { +#if GNUTLS_TLS_VERSION_MAX != GNUTLS_TLS1_3 +# error "Need to update the following logic" +#endif + /* Here we need to renegotiate the version since the callee might + * have disabled some TLS versions. This logic does not cope for + * protocols later than TLS1.3 if they have the tls13_sem set */ + ret = _gnutls_negotiate_version(session, major, minor, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + vers = get_version(session); + if (old_vers != vers) { + /* at this point we need to regenerate the random value to + * avoid the peer detecting this session as a rollback + * attempt. */ + ret = _gnutls_gen_server_random(session, vers->id); + if (ret < 0) + return gnutls_assert_val(ret); + } + } } } return sret; } -/* Read a client hello packet. +/* Associates the right credential types for the session, and + * performs sanity checks. */ +static int set_auth_types(gnutls_session_t session) +{ + const version_entry_st *ver = get_version(session); + gnutls_kx_algorithm_t kx; + + /* sanity check: + * we see TLS1.3 negotiated but no key share was sent */ + if (ver->tls13_sem) { + if (unlikely(!(session->internals.hsk_flags & HSK_PSK_KE_MODE_PSK) && + !(session->internals.hsk_flags & HSK_KEY_SHARE_RECEIVED))) { + return gnutls_assert_val(GNUTLS_E_MISSING_EXTENSION); + } + + /* Under TLS1.3 this returns a KX which matches the negotiated + * groups from the key shares; if we are resuming then the KX seen + * here doesn't match the original session. */ + if (session->internals.resumed == RESUME_FALSE) + kx = gnutls_kx_get(session); + else + kx = GNUTLS_KX_UNKNOWN; + } else { + /* TLS1.2 or earlier, kx is associated with ciphersuite */ + kx = session->security_parameters.cs->kx_algorithm; + } + + if (kx != GNUTLS_KX_UNKNOWN) { + session->security_parameters.server_auth_type = _gnutls_map_kx_get_cred(kx, 1); + session->security_parameters.client_auth_type = _gnutls_map_kx_get_cred(kx, 0); + } else if (unlikely(session->internals.resumed == RESUME_FALSE)) { + /* Here we can only arrive if something we received + * prevented the session from completing. */ + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + } + + return 0; +} + +/* Read a client hello packet. * A client hello must be a known version client hello * or version 2.0 client hello (only for compatibility * since SSL version 2.0 is not supported). @@ -450,43 +614,41 @@ read_client_hello(gnutls_session_t session, uint8_t * data, int pos = 0, ret; uint16_t suite_size, comp_size; int ext_size; - gnutls_protocol_t adv_version; int neg_version, sret = 0; int len = datalen; uint8_t major, minor; uint8_t *suite_ptr, *comp_ptr, *session_id, *ext_ptr; + const version_entry_st *vers; DECR_LEN(len, 2); _gnutls_handshake_log("HSK[%p]: Client's version: %d.%d\n", session, data[pos], data[pos + 1]); - adv_version = _gnutls_version_get(data[pos], data[pos + 1]); - major = data[pos]; minor = data[pos+1]; + set_adv_version(session, major, minor); - neg_version = _gnutls_negotiate_version(session, adv_version, major, minor); - if (neg_version < 0) { - gnutls_assert(); - return neg_version; - } + ret = _gnutls_negotiate_version(session, major, minor, 0); + if (ret < 0) + return gnutls_assert_val(ret); - pos += 2; + vers = get_version(session); + if (vers == NULL) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); - _gnutls_handshake_log("HSK[%p]: Selected version %s\n", - session, gnutls_protocol_get_name(neg_version)); + neg_version = vers->id; + + pos += 2; /* Read client random value. */ DECR_LEN(len, GNUTLS_RANDOM_SIZE); - ret = _gnutls_set_client_random(session, &data[pos]); - if (ret < 0) - return gnutls_assert_val(ret); + _gnutls_set_client_random(session, &data[pos]); pos += GNUTLS_RANDOM_SIZE; - ret = _gnutls_set_server_random(session, NULL); + ret = _gnutls_gen_server_random(session, neg_version); if (ret < 0) return gnutls_assert_val(ret); @@ -495,7 +657,7 @@ read_client_hello(gnutls_session_t session, uint8_t * data, DECR_LEN(len, 1); session_id_len = data[pos++]; - /* RESUME SESSION + /* RESUME SESSION */ if (session_id_len > GNUTLS_MAX_SESSION_ID_SIZE) { gnutls_assert(); @@ -539,41 +701,64 @@ read_client_hello(gnutls_session_t session, uint8_t * data, ext_ptr = &data[pos]; ext_size = len; - /* Parse only the mandatory to read extensions for resumption. - * We don't want to parse any other extensions since - * we don't want new extension values to override the - * resumed ones. - */ + /* Parse only the mandatory to read extensions for resumption + * and version negotiation. We don't want to parse any other + * extensions since we don't want new extension values to override + * the resumed ones. */ ret = - _gnutls_parse_extensions(session, GNUTLS_EXT_MANDATORY, - ext_ptr, ext_size); - if (ret < 0) { - gnutls_assert(); - return ret; - } + _gnutls_parse_hello_extensions(session, GNUTLS_EXT_FLAG_CLIENT_HELLO, + GNUTLS_EXT_VERSION_NEG, + ext_ptr, ext_size); + if (ret < 0) + return gnutls_assert_val(ret); ret = - _gnutls_server_restore_session(session, session_id, - session_id_len); + _gnutls_parse_hello_extensions(session, GNUTLS_EXT_FLAG_CLIENT_HELLO, + GNUTLS_EXT_MANDATORY, + ext_ptr, ext_size); + if (ret < 0) + return gnutls_assert_val(ret); - if (session_id_len > 0) - session->internals.resumption_requested = 1; + vers = get_version(session); + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); - if (ret == 0) { /* resumed using default TLS resumption! */ - ret = resume_copy_required_values(session); - if (ret < 0) - return gnutls_assert_val(ret); + if (!vers->tls13_sem) { + ret = + _gnutls_server_restore_session(session, session_id, + session_id_len); - session->internals.resumed = RESUME_TRUE; + if (session_id_len > 0) + session->internals.resumption_requested = 1; - return _gnutls_user_hello_func(session, adv_version, major, minor); - } else { - _gnutls_generate_session_id(session->security_parameters. - session_id, - &session->security_parameters. - session_id_size); + if (ret == 0) { /* resumed using default TLS resumption! */ + ret = _gnutls_server_select_suite(session, suite_ptr, suite_size, 1); + if (ret < 0) + return gnutls_assert_val(ret); - session->internals.resumed = RESUME_FALSE; + ret = tls12_resume_copy_required_vals(session, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.resumed = RESUME_TRUE; + + return _gnutls_user_hello_func(session, major, minor); + } else { + ret = _gnutls_generate_session_id(session->security_parameters. + session_id, + &session->security_parameters. + session_id_size); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.resumed = RESUME_FALSE; + } + } else { /* TLS1.3 */ + /* we echo client's session ID - length was checked previously */ + assert(session_id_len <= GNUTLS_MAX_SESSION_ID_SIZE); + if (session_id_len > 0) + memcpy(session->security_parameters.session_id, session_id, session_id_len); + session->security_parameters.session_id_size = session_id_len; } /* Parse the extensions (if any) @@ -581,8 +766,9 @@ read_client_hello(gnutls_session_t session, uint8_t * data, * Unconditionally try to parse extensions; safe renegotiation uses them in * sslv3 and higher, even though sslv3 doesn't officially support them. */ - ret = _gnutls_parse_extensions(session, GNUTLS_EXT_APPLICATION, - ext_ptr, ext_size); + ret = _gnutls_parse_hello_extensions(session, GNUTLS_EXT_FLAG_CLIENT_HELLO, + GNUTLS_EXT_APPLICATION, + ext_ptr, ext_size); /* len is the rest of the parsed length */ if (ret < 0) { gnutls_assert(); @@ -590,7 +776,7 @@ read_client_hello(gnutls_session_t session, uint8_t * data, } /* we cache this error code */ - sret = _gnutls_user_hello_func(session, adv_version, major, minor); + sret = _gnutls_user_hello_func(session, major, minor); if (sret < 0 && sret != GNUTLS_E_INT_RET_0) { gnutls_assert(); return sret; @@ -598,20 +784,15 @@ read_client_hello(gnutls_session_t session, uint8_t * data, /* Session tickets are parsed in this point */ ret = - _gnutls_parse_extensions(session, GNUTLS_EXT_TLS, ext_ptr, ext_size); + _gnutls_parse_hello_extensions(session, GNUTLS_EXT_FLAG_CLIENT_HELLO, + GNUTLS_EXT_TLS, ext_ptr, ext_size); if (ret < 0) { gnutls_assert(); return ret; } /* resumed by session_ticket extension */ - if (session->internals.resumed != RESUME_FALSE) { - /* to indicate the client that the current session is resumed */ - memcpy(session->internals.resumed_security_parameters. - session_id, session_id, session_id_len); - session->internals.resumed_security_parameters. - session_id_size = session_id_len; - + if (!vers->tls13_sem && session->internals.resumed != RESUME_FALSE) { session->internals.resumed_security_parameters. max_record_recv_size = session->security_parameters.max_record_recv_size; @@ -619,24 +800,34 @@ read_client_hello(gnutls_session_t session, uint8_t * data, max_record_send_size = session->security_parameters.max_record_send_size; - ret = resume_copy_required_values(session); + ret = _gnutls_server_select_suite(session, suite_ptr, suite_size, 1); if (ret < 0) return gnutls_assert_val(ret); + ret = tls12_resume_copy_required_vals(session, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + /* to indicate to the client that the current session is resumed */ + memcpy(session->security_parameters.session_id, session_id, session_id_len); + session->security_parameters.session_id_size = session_id_len; + return 0; } /* select an appropriate cipher suite (as well as certificate) */ - ret = _gnutls_server_select_suite(session, suite_ptr, suite_size); + ret = _gnutls_server_select_suite(session, suite_ptr, suite_size, 0); if (ret < 0) { gnutls_assert(); return ret; } + _gnutls_handshake_log("HSK[%p]: Selected version %s\n", session, session->security_parameters.pversion->name); + /* select appropriate compression method */ ret = - server_select_comp_method(session, comp_ptr, + check_if_null_comp_present(session, comp_ptr, comp_size); if (ret < 0) { gnutls_assert(); @@ -646,7 +837,22 @@ read_client_hello(gnutls_session_t session, uint8_t * data, /* call extensions that are intended to be parsed after the ciphersuite/cert * are known. */ ret = - _gnutls_parse_extensions(session, _GNUTLS_EXT_TLS_POST_CS, ext_ptr, ext_size); + _gnutls_parse_hello_extensions(session, GNUTLS_EXT_FLAG_CLIENT_HELLO, + _GNUTLS_EXT_TLS_POST_CS, ext_ptr, ext_size); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + /* Calculate TLS 1.3 Early Secret */ + if (session->security_parameters.pversion->tls13_sem && + !(session->internals.hsk_flags & HSK_PSK_SELECTED)) { + ret = _tls13_init_secret(session, NULL, 0); + if (ret < 0) + return gnutls_assert_val(ret); + } + + ret = set_auth_types(session); if (ret < 0) { gnutls_assert(); return ret; @@ -659,7 +865,7 @@ read_client_hello(gnutls_session_t session, uint8_t * data, * and initializing encryption. This is the first encrypted message * we send. */ -static int _gnutls_send_finished(gnutls_session_t session, int again) +int _gnutls_send_finished(gnutls_session_t session, int again) { mbuffer_st *bufel; uint8_t *data; @@ -669,7 +875,7 @@ static int _gnutls_send_finished(gnutls_session_t session, int again) if (again == 0) { bufel = - _gnutls_handshake_alloc(session, + _gnutls_handshake_alloc(session, MAX_VERIFY_DATA_SIZE); if (bufel == NULL) { gnutls_assert(); @@ -742,9 +948,9 @@ static int _gnutls_send_finished(gnutls_session_t session, int again) } /* This is to be called after sending our finished message. If everything - * went fine we have negotiated a secure connection + * went fine we have negotiated a secure connection */ -static int _gnutls_recv_finished(gnutls_session_t session) +int _gnutls_recv_finished(gnutls_session_t session) { uint8_t data[MAX_VERIFY_DATA_SIZE], *vrfy; gnutls_buffer_st buf; @@ -760,7 +966,6 @@ static int _gnutls_recv_finished(gnutls_session_t session) _gnutls_recv_handshake(session, GNUTLS_HANDSHAKE_FINISHED, 0, &buf); if (ret < 0) { - ERR("recv finished int", ret); gnutls_assert(); return ret; } @@ -799,11 +1004,19 @@ static int _gnutls_recv_finished(gnutls_session_t session) goto cleanup; } +#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) + /* When fuzzying allow to proceed without verifying the handshake + * consistency */ + (void) vrfy; +# warning This is unsafe for production builds + +#else if (memcmp(vrfy, data, data_size) != 0) { gnutls_assert(); ret = GNUTLS_E_ERROR_IN_FINISHED_PACKET; goto cleanup; } +#endif ret = _gnutls_ext_sr_finished(session, data, data_size, 1); if (ret < 0) { @@ -823,80 +1036,38 @@ static int _gnutls_recv_finished(gnutls_session_t session) } - session->internals.initial_negotiation_completed = 1; - cleanup: _gnutls_buffer_clear(&buf); return ret; } -/* returns PK_RSA if the given cipher suite list only supports, - * RSA algorithms, PK_DSA if DSS, and PK_ANY for both or PK_NONE for none. - */ -static int -server_find_pk_algos_in_ciphersuites(const uint8_t * - data, unsigned int datalen, - gnutls_pk_algorithm_t * algos, - size_t * algos_size) -{ - unsigned int j, x; - gnutls_kx_algorithm_t kx; - gnutls_pk_algorithm_t pk; - unsigned found; - unsigned int max = *algos_size; - - if (datalen % 2 != 0) { - gnutls_assert(); - return GNUTLS_E_UNEXPECTED_PACKET_LENGTH; - } - - *algos_size = 0; - for (j = 0; j < datalen; j += 2) { - kx = _gnutls_cipher_suite_get_kx_algo(&data[j]); - if (_gnutls_map_kx_get_cred(kx, 1) == - GNUTLS_CRD_CERTIFICATE) { - pk = _gnutls_map_kx_get_pk(kx); - found = 0; - for (x = 0; x < *algos_size; x++) { - if (algos[x] == pk) { - found = 1; - break; - } - } - - if (found == 0) { - algos[(*algos_size)++] = - _gnutls_map_kx_get_pk(kx); - if ((*algos_size) >= max) - return 0; - } - } - } - - return 0; -} - /* This selects the best supported ciphersuite from the given ones. Then * it adds the suite to the session and performs some checks. + * + * When @scsv_only is non-zero only the available SCSVs are parsed + * and acted upon. */ int _gnutls_server_select_suite(gnutls_session_t session, uint8_t * data, - unsigned int datalen) + unsigned int datalen, unsigned scsv_only) { int ret; - unsigned int i, j, cipher_suites_size; - size_t pk_algos_size; - uint8_t cipher_suites[MAX_CIPHERSUITE_SIZE]; + unsigned int i; + ciphersuite_list_st peer_clist; + const gnutls_cipher_suite_entry_st *selected; + gnutls_kx_algorithm_t kx; int retval; - gnutls_pk_algorithm_t pk_algos[MAX_ALGOS]; /* will hold the pk algorithms - * supported by the peer. - */ + const version_entry_st *vers = get_version(session); + + peer_clist.size = 0; for (i = 0; i < datalen; i += 2) { -#ifdef ENABLE_SSL3 /* No need to support certain SCSV's without SSL 3.0 */ + /* we support the TLS renegotiation SCSV, even if we are + * not under SSL 3.0, because openssl sends this SCSV + * on resumption unconditionally. */ /* TLS_RENEGO_PROTECTION_REQUEST = { 0x00, 0xff } */ - if (session->internals.priorities.sr != SR_DISABLED && + if (session->internals.priorities->sr != SR_DISABLED && data[i] == GNUTLS_RENEGO_PROTECTION_REQUEST_MAJOR && data[i + 1] == GNUTLS_RENEGO_PROTECTION_REQUEST_MINOR) { _gnutls_handshake_log @@ -908,217 +1079,86 @@ _gnutls_server_select_suite(gnutls_session_t session, uint8_t * data, return retval; } } -#endif /* TLS_FALLBACK_SCSV */ if (data[i] == GNUTLS_FALLBACK_SCSV_MAJOR && data[i + 1] == GNUTLS_FALLBACK_SCSV_MINOR) { - unsigned max = _gnutls_version_max(session); + const version_entry_st *max = _gnutls_version_max(session); + _gnutls_handshake_log ("HSK[%p]: Received fallback CS\n", session); - if (gnutls_protocol_get_version(session) != max) + if (vers != max) return gnutls_assert_val(GNUTLS_E_INAPPROPRIATE_FALLBACK); + } else if (!scsv_only) { + if (peer_clist.size < MAX_CIPHERSUITE_SIZE) { + peer_clist.entry[peer_clist.size] = ciphersuite_to_entry(&data[i]); + if (peer_clist.entry[peer_clist.size] != NULL) + peer_clist.size++; + } } } - pk_algos_size = MAX_ALGOS; - ret = - server_find_pk_algos_in_ciphersuites(data, datalen, pk_algos, - &pk_algos_size); - if (ret < 0) - return gnutls_assert_val(ret); + if (scsv_only) + return 0; - ret = - _gnutls_supported_ciphersuites(session, cipher_suites, - sizeof(cipher_suites)); - if (ret < 0) + ret = _gnutls_figure_common_ciphersuite(session, &peer_clist, &selected); + if (ret < 0) { return gnutls_assert_val(ret); - - cipher_suites_size = ret; - - /* Here we remove any ciphersuite that does not conform - * the certificate requested, or to the - * authentication requested (e.g. SRP). - */ - ret = - _gnutls_remove_unwanted_ciphersuites(session, cipher_suites, - cipher_suites_size, - pk_algos, pk_algos_size); - if (ret <= 0) { - gnutls_assert(); - if (ret < 0) - return ret; - else - return GNUTLS_E_UNKNOWN_CIPHER_SUITE; } - cipher_suites_size = ret; + _gnutls_handshake_log + ("HSK[%p]: Selected cipher suite: %s\n", session, selected->name); - /* Data length should be zero mod 2 since - * every ciphersuite is 2 bytes. (this check is needed - * see below). - */ - if (datalen % 2 != 0) { + ret = _gnutls_set_cipher_suite2(session, selected); + if (ret < 0) { gnutls_assert(); - return GNUTLS_E_UNEXPECTED_PACKET_LENGTH; + return ret; } - memset(session->security_parameters.cipher_suite, 0, 2); - - retval = GNUTLS_E_UNKNOWN_CIPHER_SUITE; - - _gnutls_handshake_log - ("HSK[%p]: Requested cipher suites[size: %d]: \n", session, - (int) datalen); - - if (session->internals.priorities.server_precedence == 0) { - for (j = 0; j < datalen; j += 2) { - _gnutls_handshake_log("\t0x%.2x, 0x%.2x %s\n", - data[j], data[j + 1], - _gnutls_cipher_suite_get_name - (&data[j])); - for (i = 0; i < cipher_suites_size; i += 2) { - if (memcmp(&cipher_suites[i], &data[j], 2) - == 0) { - _gnutls_handshake_log - ("HSK[%p]: Selected cipher suite: %s\n", - session, - _gnutls_cipher_suite_get_name - (&data[j])); - retval = _gnutls_set_cipher_suite - (session, &data[j]); - - goto finish; - } - } + if (!vers->tls13_sem) { + /* check if the credentials (username, public key etc.) are ok + */ + kx = selected->kx_algorithm; + if (_gnutls_get_kx_cred(session, kx) == NULL) { + gnutls_assert(); + return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } - } else { /* server selects */ - - for (i = 0; i < cipher_suites_size; i += 2) { - for (j = 0; j < datalen; j += 2) { - if (memcmp(&cipher_suites[i], &data[j], 2) - == 0) { - _gnutls_handshake_log - ("HSK[%p]: Selected cipher suite: %s\n", - session, - _gnutls_cipher_suite_get_name - (&data[j])); - retval = _gnutls_set_cipher_suite - (session, &data[j]); - - goto finish; - } - } + + /* set the mod_auth_st to the appropriate struct + * according to the KX algorithm. This is needed since all the + * handshake functions are read from there; + */ + session->internals.auth_struct = _gnutls_kx_auth_struct(kx); + if (session->internals.auth_struct == NULL) { + _gnutls_handshake_log + ("HSK[%p]: Cannot find the appropriate handler for the KX algorithm\n", + session); + gnutls_assert(); + return GNUTLS_E_INTERNAL_ERROR; } } - finish: - - if (retval != 0) { - gnutls_assert(); - return retval; - } - - /* check if the credentials (username, public key etc.) are ok - */ - if (_gnutls_get_kx_cred - (session, - _gnutls_cipher_suite_get_kx_algo(session->security_parameters. - cipher_suite)) == NULL) { - gnutls_assert(); - return GNUTLS_E_INSUFFICIENT_CREDENTIALS; - } - - - /* set the mod_auth_st to the appropriate struct - * according to the KX algorithm. This is needed since all the - * handshake functions are read from there; - */ - session->internals.auth_struct = - _gnutls_kx_auth_struct(_gnutls_cipher_suite_get_kx_algo - (session->security_parameters. - cipher_suite)); - if (session->internals.auth_struct == NULL) { - - _gnutls_handshake_log - ("HSK[%p]: Cannot find the appropriate handler for the KX algorithm\n", - session); - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } return 0; } -/* This selects the best supported compression method from the ones provided +/* This checks whether the null compression method is present. */ static int -server_select_comp_method(gnutls_session_t session, +check_if_null_comp_present(gnutls_session_t session, uint8_t * data, int datalen) { - int x, i, j; - uint8_t comps[MAX_ALGOS]; - int ret; - - x = _gnutls_supported_compression_methods(session, comps, - MAX_ALGOS); - if (x < 0) { - gnutls_assert(); - return x; - } - - if (session->internals.priorities.server_precedence == 0) { - for (j = 0; j < datalen; j++) { - for (i = 0; i < x; i++) { - if (comps[i] == data[j]) { - gnutls_compression_method_t method - = - _gnutls_compression_get_id - (comps[i]); - - ret = _gnutls_set_compression - (session, method); - if (ret < 0) - return gnutls_assert_val(ret); + int j; - _gnutls_handshake_log - ("HSK[%p]: Selected Compression Method: %s\n", - session, - gnutls_compression_get_name - (method)); - return 0; - } - } - } - } else { - for (i = 0; i < x; i++) { - for (j = 0; j < datalen; j++) { - if (comps[i] == data[j]) { - gnutls_compression_method_t method - = - _gnutls_compression_get_id - (comps[i]); - - ret = _gnutls_set_compression - (session, method); - if (ret < 0) - return gnutls_assert_val(ret); - - _gnutls_handshake_log - ("HSK[%p]: Selected Compression Method: %s\n", - session, - gnutls_compression_get_name - (method)); - return 0; - } - } - } + for (j = 0; j < datalen; j++) { + if (data[j] == 0) + return 0; } - /* we were not able to find a compatible compression + /* we were not able to find a the NULL compression * algorithm */ gnutls_assert(); @@ -1128,7 +1168,7 @@ server_select_comp_method(gnutls_session_t session, /* This function sends an empty handshake packet. (like hello request). * If the previous _gnutls_send_empty_handshake() returned - * GNUTLS_E_AGAIN or GNUTLS_E_INTERRUPTED, then it must be called again + * GNUTLS_E_AGAIN or GNUTLS_E_INTERRUPTED, then it must be called again * (until it returns ok), with NULL parameters. */ static int @@ -1150,11 +1190,10 @@ _gnutls_send_empty_handshake(gnutls_session_t session, return _gnutls_send_handshake(session, bufel, type); } -inline - static int call_hook_func(gnutls_session_t session, - gnutls_handshake_description_t type, - int post, unsigned incoming, - const uint8_t *data, unsigned data_size) +int _gnutls_call_hook_func(gnutls_session_t session, + gnutls_handshake_description_t type, + int post, unsigned incoming, + const uint8_t *data, unsigned data_size) { gnutls_datum_t msg = {(void*)data, data_size}; @@ -1162,26 +1201,54 @@ inline if ((session->internals.h_type == type || session->internals.h_type == GNUTLS_HANDSHAKE_ANY) && (session->internals.h_post == post - || session->internals.h_post == GNUTLS_HOOK_BOTH)) + || session->internals.h_post == GNUTLS_HOOK_BOTH)) { + + /* internal API for testing: when we are expected to + * wait for GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC, we + * do so, but not when doing for all messages. The + * reason is that change cipher specs are not handshake + * messages, and we don't support waiting for them + * consistently (only sending is tracked, not receiving). + */ + if (type == GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC && + session->internals.h_type != GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC) + return 0; + return session->internals.h_hook(session, type, post, incoming, &msg); + } } return 0; } +/* Note that the "New session ticket" handshake packet behaves differently under + * TLS 1.2 or 1.3. In 1.2 it is included in the handshake process, while in 1.3 + * it is sent asynchronously */ +#define IS_ASYNC(t, v) \ + (t == GNUTLS_HANDSHAKE_HELLO_REQUEST || t == GNUTLS_HANDSHAKE_KEY_UPDATE || \ + (t == GNUTLS_HANDSHAKE_NEW_SESSION_TICKET && v->tls13_sem)) + +int +_gnutls_send_handshake(gnutls_session_t session, mbuffer_st * bufel, + gnutls_handshake_description_t type) +{ + return _gnutls_send_handshake2(session, bufel, type, 0); +} + /* This function sends a handshake message of type 'type' containing the * data specified here. If the previous _gnutls_send_handshake() returned - * GNUTLS_E_AGAIN or GNUTLS_E_INTERRUPTED, then it must be called again + * GNUTLS_E_AGAIN or GNUTLS_E_INTERRUPTED, then it must be called again * (until it returns ok), with NULL parameters. */ int -_gnutls_send_handshake(gnutls_session_t session, mbuffer_st * bufel, - gnutls_handshake_description_t type) +_gnutls_send_handshake2(gnutls_session_t session, mbuffer_st * bufel, + gnutls_handshake_description_t type, unsigned queue_only) { int ret; uint8_t *data; uint32_t datasize, i_datasize; int pos = 0; + const version_entry_st *vers = get_version(session); if (bufel == NULL) { /* we are resuming a previously interrupted @@ -1197,7 +1264,7 @@ _gnutls_send_handshake(gnutls_session_t session, mbuffer_st * bufel, i_datasize = _mbuffer_get_udata_size(bufel); datasize = i_datasize + _mbuffer_get_uhead_size(bufel); - data[pos++] = (uint8_t) type; + data[pos++] = (uint8_t) REAL_HSK_TYPE(type); _gnutls_write_uint24(_mbuffer_get_udata_size(bufel), &data[pos]); pos += 3; @@ -1225,7 +1292,7 @@ _gnutls_send_handshake(gnutls_session_t session, mbuffer_st * bufel, /* Here we keep the handshake messages in order to hash them... */ - if (type != GNUTLS_HANDSHAKE_HELLO_REQUEST) + if (!IS_ASYNC(type, vers)) { if ((ret = handshake_hash_add_sent(session, type, data, datasize)) < 0) { @@ -1233,9 +1300,22 @@ _gnutls_send_handshake(gnutls_session_t session, mbuffer_st * bufel, _mbuffer_xfree(&bufel); return ret; } + /* If we are sending a PSK, generate early secrets here. + * This cannot be done in pre_shared_key.c, because it + * relies on transcript hash of a Client Hello. */ + if (type == GNUTLS_HANDSHAKE_CLIENT_HELLO && + session->key.binders[0].prf != NULL) { + ret = _gnutls_generate_early_secrets_for_psk(session); + if (ret < 0) { + gnutls_assert(); + _mbuffer_xfree(&bufel); + return ret; + } + } + } - ret = call_hook_func(session, type, GNUTLS_HOOK_PRE, 0, - _mbuffer_get_udata_ptr(bufel), _mbuffer_get_udata_size(bufel)); + ret = _gnutls_call_hook_func(session, type, GNUTLS_HOOK_PRE, 0, + _mbuffer_get_udata_ptr(bufel), _mbuffer_get_udata_size(bufel)); if (ret < 0) { gnutls_assert(); _mbuffer_xfree(&bufel); @@ -1251,39 +1331,69 @@ _gnutls_send_handshake(gnutls_session_t session, mbuffer_st * bufel, return ret; } - ret = call_hook_func(session, type, GNUTLS_HOOK_POST, 0, - _mbuffer_get_udata_ptr(bufel), _mbuffer_get_udata_size(bufel)); + ret = _gnutls_call_hook_func(session, type, GNUTLS_HOOK_POST, 0, + _mbuffer_get_udata_ptr(bufel), _mbuffer_get_udata_size(bufel)); if (ret < 0) { gnutls_assert(); return ret; } - /* The messages which are followed by another are not sent by default - * but are cached instead */ - switch (type) { - case GNUTLS_HANDSHAKE_CERTIFICATE_PKT: /* this one is followed by ServerHelloDone - * or ClientKeyExchange always. - */ - case GNUTLS_HANDSHAKE_CERTIFICATE_STATUS: - case GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE: /* as above */ - case GNUTLS_HANDSHAKE_SERVER_HELLO: /* as above */ - case GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST: /* as above */ - case GNUTLS_HANDSHAKE_NEW_SESSION_TICKET: /* followed by ChangeCipherSpec */ + if (queue_only) + return 0; - /* now for client Certificate, ClientKeyExchange and - * CertificateVerify are always followed by ChangeCipherSpec - */ - case GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY: - case GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE: - ret = 0; - break; - default: - /* send cached messages */ - ret = _gnutls_handshake_io_write_flush(session); - break; + /* Decide when to cache and when to send */ + if (vers && vers->tls13_sem) { + + if (session->internals.initial_negotiation_completed) { + /* we are under TLS1.3 in a re-authentication phase. + * we don't attempt to cache any messages */ + goto force_send; + } + + /* The messages which are followed by another are not sent by default + * but are cached instead */ + switch (type) { + case GNUTLS_HANDSHAKE_SERVER_HELLO: /* always followed by something */ + case GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS: /* followed by finished or cert */ + case GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST: /* followed by certificate */ + case GNUTLS_HANDSHAKE_CERTIFICATE_PKT: /* this one is followed by cert verify */ + case GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY: /* followed by finished */ + ret = 0; /* cache */ + break; + default: + /* send this and any cached messages */ + goto force_send; + } + } else { + /* The messages which are followed by another are not sent by default + * but are cached instead */ + switch (type) { + case GNUTLS_HANDSHAKE_CERTIFICATE_PKT: /* this one is followed by ServerHelloDone + * or ClientKeyExchange always. + */ + case GNUTLS_HANDSHAKE_CERTIFICATE_STATUS: + case GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE: /* as above */ + case GNUTLS_HANDSHAKE_SERVER_HELLO: /* as above */ + case GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST: /* as above */ + case GNUTLS_HANDSHAKE_NEW_SESSION_TICKET: /* followed by ChangeCipherSpec */ + + /* now for client Certificate, ClientKeyExchange and + * CertificateVerify are always followed by ChangeCipherSpec + */ + case GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY: + case GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE: + ret = 0; + break; + default: + /* send this and any cached messages */ + goto force_send; + } } return ret; + + force_send: + return _gnutls_handshake_io_write_flush(session); } #define CHECK_SIZE(ll) \ @@ -1294,6 +1404,7 @@ _gnutls_send_handshake(gnutls_session_t session, mbuffer_st * bufel, return gnutls_assert_val(GNUTLS_E_HANDSHAKE_TOO_LARGE); \ } + /* This function add the handshake headers and the * handshake data to the handshake hash buffers. Needed * for the finished messages calculations. @@ -1312,7 +1423,7 @@ handshake_hash_add_recvd(gnutls_session_t session, if ((vers->id != GNUTLS_DTLS0_9 && recv_type == GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST) || - recv_type == GNUTLS_HANDSHAKE_HELLO_REQUEST) + IS_ASYNC(recv_type, vers)) return 0; CHECK_SIZE(header_size + datalen); @@ -1340,9 +1451,18 @@ handshake_hash_add_recvd(gnutls_session_t session, /* save the size until client KX. That is because the TLS * session hash is calculated up to this message. */ + if (recv_type == GNUTLS_HANDSHAKE_CLIENT_HELLO) + session->internals.handshake_hash_buffer_client_hello_len = + session->internals.handshake_hash_buffer.length; if (recv_type == GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE) session->internals.handshake_hash_buffer_client_kx_len = session->internals.handshake_hash_buffer.length; + if (recv_type == GNUTLS_HANDSHAKE_FINISHED && session->security_parameters.entity == GNUTLS_CLIENT) + session->internals.handshake_hash_buffer_server_finished_len = + session->internals.handshake_hash_buffer.length; + if (recv_type == GNUTLS_HANDSHAKE_FINISHED && session->security_parameters.entity == GNUTLS_SERVER) + session->internals.handshake_hash_buffer_client_finished_len = + session->internals.handshake_hash_buffer.length; return 0; } @@ -1360,38 +1480,43 @@ handshake_hash_add_sent(gnutls_session_t session, if (unlikely(vers == NULL)) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - /* We don't check for GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST because it - * is not sent via that channel. - */ - if (type != GNUTLS_HANDSHAKE_HELLO_REQUEST) { - CHECK_SIZE(datalen); + if (IS_ASYNC(type, vers)) + return 0; - if (vers->id == GNUTLS_DTLS0_9) { - /* Old DTLS doesn't include the header in the MAC */ - if (datalen < 12) { - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - dataptr += 12; - datalen -= 12; + CHECK_SIZE(datalen); - if (datalen == 0) - return 0; + if (vers->id == GNUTLS_DTLS0_9) { + /* Old DTLS doesn't include the header in the MAC */ + if (datalen < 12) { + gnutls_assert(); + return GNUTLS_E_INTERNAL_ERROR; } + dataptr += 12; + datalen -= 12; - ret = - _gnutls_buffer_append_data(&session->internals. - handshake_hash_buffer, - dataptr, datalen); - if (ret < 0) - return gnutls_assert_val(ret); + if (datalen == 0) + return 0; + } - if (type == GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE) - session->internals.handshake_hash_buffer_client_kx_len = - session->internals.handshake_hash_buffer.length; + ret = + _gnutls_buffer_append_data(&session->internals. + handshake_hash_buffer, + dataptr, datalen); + if (ret < 0) + return gnutls_assert_val(ret); - return 0; - } + if (type == GNUTLS_HANDSHAKE_CLIENT_HELLO) + session->internals.handshake_hash_buffer_client_hello_len = + session->internals.handshake_hash_buffer.length; + if (type == GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE) + session->internals.handshake_hash_buffer_client_kx_len = + session->internals.handshake_hash_buffer.length; + if (type == GNUTLS_HANDSHAKE_FINISHED && session->security_parameters.entity == GNUTLS_SERVER) + session->internals.handshake_hash_buffer_server_finished_len = + session->internals.handshake_hash_buffer.length; + if (type == GNUTLS_HANDSHAKE_FINISHED && session->security_parameters.entity == GNUTLS_CLIENT) + session->internals.handshake_hash_buffer_client_finished_len = + session->internals.handshake_hash_buffer.length; return 0; } @@ -1420,16 +1545,15 @@ _gnutls_recv_handshake(gnutls_session_t session, return gnutls_assert_val_fatal(ret); } - session->internals.last_handshake_in = hsk.htype; - ret = call_hook_func(session, hsk.htype, GNUTLS_HOOK_PRE, 1, hsk.data.data, hsk.data.length); + ret = _gnutls_call_hook_func(session, hsk.htype, GNUTLS_HOOK_PRE, 1, hsk.data.data, hsk.data.length); if (ret < 0) { gnutls_assert(); goto cleanup; } - ret = handshake_hash_add_recvd(session, hsk.htype, + ret = handshake_hash_add_recvd(session, hsk.rtype, hsk.header, hsk.header_size, hsk.data.data, hsk.data.length); @@ -1441,7 +1565,11 @@ _gnutls_recv_handshake(gnutls_session_t session, switch (hsk.htype) { case GNUTLS_HANDSHAKE_CLIENT_HELLO_V2: case GNUTLS_HANDSHAKE_CLIENT_HELLO: - case GNUTLS_HANDSHAKE_SERVER_HELLO: + if (!(IS_SERVER(session))) { + ret = gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + goto cleanup; + } + #ifdef ENABLE_SSL2 if (hsk.htype == GNUTLS_HANDSHAKE_CLIENT_HELLO_V2) ret = @@ -1450,8 +1578,30 @@ _gnutls_recv_handshake(gnutls_session_t session, hsk.data.length); else #endif - ret = - recv_hello(session, hsk.data.data, + { + /* Reference the full ClientHello in case an extension needs it */ + ret = _gnutls_ext_set_full_client_hello(session, &hsk); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = read_client_hello(session, hsk.data.data, + hsk.data.length); + } + + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + break; + + case GNUTLS_HANDSHAKE_SERVER_HELLO: + if (IS_SERVER(session)) { + ret = gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + goto cleanup; + } + + ret = read_server_hello(session, hsk.data.data, hsk.data.length); if (ret < 0) { @@ -1461,6 +1611,11 @@ _gnutls_recv_handshake(gnutls_session_t session, break; case GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST: + if (IS_SERVER(session)) { + ret = gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + goto cleanup; + } + ret = recv_hello_verify_request(session, hsk.data.data, @@ -1475,6 +1630,40 @@ _gnutls_recv_handshake(gnutls_session_t session, } break; + case GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST: { + /* hash buffer synth message is generated during hello retry parsing */ + gnutls_datum_t hrr = {hsk.data.data, hsk.data.length}; + + if (IS_SERVER(session)) { + ret = gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + goto cleanup; + } + + ret = + _gnutls13_recv_hello_retry_request(session, + &hsk.data); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } else { + /* during hello retry parsing, we reset handshake hash buffer, + * re-add this message */ + ret = handshake_hash_add_recvd(session, hsk.htype, + hsk.header, hsk.header_size, + hrr.data, + hrr.size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + /* Signal our caller we have received a retry request + and ClientHello needs to be sent again. */ + ret = 1; + } + + break; + } case GNUTLS_HANDSHAKE_SERVER_HELLO_DONE: if (hsk.data.length == 0) ret = 0; @@ -1487,24 +1676,26 @@ _gnutls_recv_handshake(gnutls_session_t session, case GNUTLS_HANDSHAKE_CERTIFICATE_PKT: case GNUTLS_HANDSHAKE_CERTIFICATE_STATUS: case GNUTLS_HANDSHAKE_FINISHED: + case GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS: case GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE: case GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE: case GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST: case GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY: case GNUTLS_HANDSHAKE_SUPPLEMENTAL: case GNUTLS_HANDSHAKE_NEW_SESSION_TICKET: + case GNUTLS_HANDSHAKE_END_OF_EARLY_DATA: ret = hsk.data.length; break; default: gnutls_assert(); /* we shouldn't actually arrive here in any case . - * unexpected messages should be catched after _gnutls_handshake_io_recv_int() + * unexpected messages should be caught after _gnutls_handshake_io_recv_int() */ ret = GNUTLS_E_UNEXPECTED_HANDSHAKE_PACKET; goto cleanup; } - ret2 = call_hook_func(session, hsk.htype, GNUTLS_HOOK_POST, 1, hsk.data.data, hsk.data.length); + ret2 = _gnutls_call_hook_func(session, hsk.htype, GNUTLS_HOOK_POST, 1, hsk.data.data, hsk.data.length); if (ret2 < 0) { ret = ret2; gnutls_assert(); @@ -1527,132 +1718,86 @@ _gnutls_recv_handshake(gnutls_session_t session, static int set_client_ciphersuite(gnutls_session_t session, uint8_t suite[2]) { - uint8_t z; - uint8_t cipher_suites[MAX_CIPHERSUITE_SIZE]; - int cipher_suite_size; - int i; + unsigned j; int ret; + const gnutls_cipher_suite_entry_st *selected = NULL; + const version_entry_st *vers = get_version(session); + gnutls_kx_algorithm_t kx; - z = 1; - cipher_suite_size = - _gnutls_supported_ciphersuites(session, cipher_suites, - sizeof(cipher_suites)); - if (cipher_suite_size < 0) { - gnutls_assert(); - return cipher_suite_size; - } - - for (i = 0; i < cipher_suite_size; i += 2) { - if (memcmp(&cipher_suites[i], suite, 2) == 0) { - z = 0; + for (j = 0; j < session->internals.priorities->cs.size; j++) { + if (suite[0] == session->internals.priorities->cs.entry[j]->id[0] && + suite[1] == session->internals.priorities->cs.entry[j]->id[1]) { + selected = session->internals.priorities->cs.entry[j]; break; } } - if (z != 0) { + if (!selected) { gnutls_assert(); _gnutls_handshake_log - ("HSK[%p]: unsupported cipher suite %.2X.%.2X\n", + ("HSK[%p]: unsupported cipher suite %.2X.%.2X was negotiated\n", session, (unsigned int) suite[0], (unsigned int) suite[1]); return GNUTLS_E_UNKNOWN_CIPHER_SUITE; } - ret = _gnutls_set_cipher_suite(session, suite); + ret = _gnutls_set_cipher_suite2(session, selected); if (ret < 0) return gnutls_assert_val(ret); _gnutls_handshake_log("HSK[%p]: Selected cipher suite: %s\n", session, - _gnutls_cipher_suite_get_name - (session->security_parameters.cipher_suite)); - + selected->name); /* check if the credentials (username, public key etc.) are ok. * Actually checks if they exist. */ - if (!session->internals.premaster_set && - _gnutls_get_kx_cred - (session, - _gnutls_cipher_suite_get_kx_algo - (session->security_parameters.cipher_suite)) == NULL) { - gnutls_assert(); - return GNUTLS_E_INSUFFICIENT_CREDENTIALS; - } - - - /* set the mod_auth_st to the appropriate struct - * according to the KX algorithm. This is needed since all the - * handshake functions are read from there; - */ - session->internals.auth_struct = - _gnutls_kx_auth_struct(_gnutls_cipher_suite_get_kx_algo - (session->security_parameters. - cipher_suite)); - - if (session->internals.auth_struct == NULL) { + if (!vers->tls13_sem) { + kx = selected->kx_algorithm; - _gnutls_handshake_log - ("HSK[%p]: Cannot find the appropriate handler for the KX algorithm\n", - session); - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - - - return 0; -} - -/* This function sets the given comp method to the session. - */ -static int -set_client_comp_method(gnutls_session_t session, - uint8_t comp_method) -{ - int comp_methods_num; - uint8_t compression_methods[MAX_ALGOS]; - int id = _gnutls_compression_get_id(comp_method); - int i; - int ret; - - _gnutls_handshake_log - ("HSK[%p]: Selected compression method: %s (%d)\n", session, - gnutls_compression_get_name(id), (int) comp_method); + if (!session->internals.premaster_set && + _gnutls_get_kx_cred + (session, kx) == NULL) { + gnutls_assert(); + return GNUTLS_E_INSUFFICIENT_CREDENTIALS; + } - comp_methods_num = _gnutls_supported_compression_methods(session, - compression_methods, - MAX_ALGOS); - if (comp_methods_num < 0) { - gnutls_assert(); - return comp_methods_num; - } + /* set the mod_auth_st to the appropriate struct + * according to the KX algorithm. This is needed since all the + * handshake functions are read from there; + */ + session->internals.auth_struct = + _gnutls_kx_auth_struct(kx); - for (i = 0; i < comp_methods_num; i++) { - if (compression_methods[i] == comp_method) { - comp_methods_num = 0; - break; + if (session->internals.auth_struct == NULL) { + _gnutls_handshake_log + ("HSK[%p]: Cannot find the appropriate handler for the KX algorithm\n", + session); + gnutls_assert(); + return GNUTLS_E_INTERNAL_ERROR; + } + } else { + if (session->internals.hsk_flags & HSK_PSK_SELECTED) { + if (session->key.binders[0].prf->id != selected->prf) { + _gnutls_handshake_log + ("HSK[%p]: PRF of ciphersuite differs with the PSK identity (cs: %s, id: %s)\n", + session, selected->name, session->key.binders[0].prf->name); + gnutls_assert(); + return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + } } } - if (comp_methods_num != 0) { - gnutls_assert(); - return GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM; - } - - ret = _gnutls_set_compression(session, id); - if (ret < 0) - return gnutls_assert_val(ret); - return 0; } /* This function returns 0 if we are resuming a session or -1 otherwise. * This also sets the variables in the session. Used only while reading a server - * hello. + * hello. Only applicable to TLS1.2 or earlier. */ static int client_check_if_resuming(gnutls_session_t session, - uint8_t * session_id, int session_id_len) + uint8_t * session_id, int session_id_len) { char buf[2 * GNUTLS_MAX_SESSION_ID_SIZE + 1]; int ret; @@ -1681,18 +1826,10 @@ client_check_if_resuming(gnutls_session_t session, session->security_parameters.client_random, GNUTLS_RANDOM_SIZE); - ret = _gnutls_set_cipher_suite + ret = _gnutls_set_cipher_suite2 (session, session->internals.resumed_security_parameters. - cipher_suite); - if (ret < 0) { - gnutls_assert(); - goto no_resume; - } - ret = _gnutls_set_compression(session, - session->internals. - resumed_security_parameters. - compression_method); + cs); if (ret < 0) { gnutls_assert(); goto no_resume; @@ -1705,13 +1842,6 @@ client_check_if_resuming(gnutls_session_t session, no_resume: /* keep the new session id */ session->internals.resumed = RESUME_FALSE; /* we are not resuming */ - session->security_parameters.session_id_size = - session_id_len; - if (session_id_len > 0) { - memcpy(session->security_parameters.session_id, session_id, - session_id_len); - } - return -1; } } @@ -1723,15 +1853,19 @@ client_check_if_resuming(gnutls_session_t session, */ static int read_server_hello(gnutls_session_t session, - uint8_t * data, int datalen) + uint8_t * data, int datalen) { uint8_t session_id_len = 0; + uint8_t *session_id; + uint8_t *cs_pos, *comp_pos, *srandom_pos; + uint8_t major, minor; int pos = 0; - int ret = 0; - gnutls_protocol_t version; + int ret; int len = datalen; + unsigned ext_parse_flag = 0; + const version_entry_st *vers, *saved_vers; - if (datalen < 38) { + if (datalen < GNUTLS_RANDOM_SIZE+2) { gnutls_assert(); return GNUTLS_E_UNEXPECTED_PACKET_LENGTH; } @@ -1740,25 +1874,27 @@ read_server_hello(gnutls_session_t session, session, data[pos], data[pos + 1]); DECR_LEN(len, 2); - version = _gnutls_version_get(data[pos], data[pos + 1]); - if (_gnutls_version_is_supported(session, version) == 0) { - gnutls_assert(); - return GNUTLS_E_UNSUPPORTED_VERSION_PACKET; - } + major = data[pos]; + minor = data[pos+1]; - if (_gnutls_set_current_version(session, version) < 0) + saved_vers = get_version(session); /* will be non-null if HRR has been received */ + + vers = nversion_to_entry(major, minor); + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + + if (vers->tls13_sem) /* that shouldn't have been negotiated here */ + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + + if (_gnutls_set_current_version(session, vers->id) < 0) return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); pos += 2; DECR_LEN(len, GNUTLS_RANDOM_SIZE); - ret = _gnutls_set_server_random(session, &data[pos]); - if (ret < 0) - return gnutls_assert_val(ret); - + srandom_pos = &data[pos]; pos += GNUTLS_RANDOM_SIZE; - /* Read session ID */ DECR_LEN(len, 1); @@ -1766,162 +1902,171 @@ read_server_hello(gnutls_session_t session, if (len < session_id_len || session_id_len > GNUTLS_MAX_SESSION_ID_SIZE) { gnutls_assert(); - return GNUTLS_E_ILLEGAL_PARAMETER; + return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; } DECR_LEN(len, session_id_len); + session_id = &data[pos]; + pos += session_id_len; + + DECR_LEN(len, 2); + cs_pos = &data[pos]; + pos += 2; + + /* move to compression + */ + DECR_LEN(len, 1); + comp_pos = &data[pos]; + pos++; + + /* parse extensions to figure version */ + ret = + _gnutls_parse_hello_extensions(session, GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO| + GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO, + GNUTLS_EXT_VERSION_NEG, + &data[pos], len); + if (ret < 0) + return gnutls_assert_val(ret); + + vers = get_version(session); + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + if (vers->tls13_sem) { + if (major != 0x03 || minor != 0x03) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + } + + if (_gnutls_nversion_is_supported(session, vers->major, vers->minor) == 0) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + + /* set server random - done after final version is selected */ + ret = _gnutls_set_server_random(session, vers, srandom_pos); + if (ret < 0) + return gnutls_assert_val(ret); + + /* reset keys and binders if we are not using TLS 1.3 */ + if (!vers->tls13_sem) { + gnutls_memset(&session->key.proto.tls13, 0, + sizeof(session->key.proto.tls13)); + reset_binders(session); + } /* check if we are resuming and set the appropriate * values; */ - if (client_check_if_resuming - (session, &data[pos], session_id_len) == 0) { - pos += session_id_len + 2 + 1; - DECR_LEN(len, 2 + 1); - + if (!vers->tls13_sem && + client_check_if_resuming(session, session_id, session_id_len) == 0) { ret = - _gnutls_parse_extensions(session, GNUTLS_EXT_MANDATORY, - &data[pos], len); - if (ret < 0) { - gnutls_assert(); - return ret; - } + _gnutls_parse_hello_extensions(session, GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, + GNUTLS_EXT_MANDATORY, + &data[pos], len); + if (ret < 0) + return gnutls_assert_val(ret); + return 0; + } else { + session->security_parameters.session_id_size = session_id_len; + if (session_id_len > 0) + memcpy(session->security_parameters.session_id, session_id, + session_id_len); } - pos += session_id_len; - /* Check if the given cipher suite is supported and copy * it to the session. */ - - DECR_LEN(len, 2); - ret = set_client_ciphersuite(session, &data[pos]); + ret = set_client_ciphersuite(session, cs_pos); if (ret < 0) { gnutls_assert(); return ret; } - pos += 2; - /* move to compression - */ - DECR_LEN(len, 1); + if (session->internals.hsk_flags & HSK_HRR_RECEIVED) { + /* check if ciphersuite matches */ + if (memcmp(cs_pos, session->internals.hrr_cs, 2) != 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); - ret = set_client_comp_method(session, data[pos++]); - if (ret < 0) { - gnutls_assert(); - return GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM; + /* check if HRR version matches this version */ + if (vers != saved_vers) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); } - /* Parse extensions. + if (*comp_pos != 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + if (vers->tls13_sem) + ext_parse_flag |= GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO; + else + ext_parse_flag |= GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO; + + /* Parse extensions in order. */ ret = - _gnutls_parse_extensions(session, GNUTLS_EXT_ANY, &data[pos], - len); - if (ret < 0) { - gnutls_assert(); - return ret; - } + _gnutls_parse_hello_extensions(session, + ext_parse_flag, + GNUTLS_EXT_MANDATORY, + &data[pos], len); + if (ret < 0) + return gnutls_assert_val(ret); - return ret; -} + /* check if EtM is required */ + if (!vers->tls13_sem && session->internals.priorities->force_etm && !session->security_parameters.etm) { + const cipher_entry_st *cipher = cipher_to_entry(session->security_parameters.cs->block_algorithm); + if (_gnutls_cipher_type(cipher) == CIPHER_BLOCK) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); + } -#define RESERVED_CIPHERSUITES 4 -/* This function copies the appropriate ciphersuites to a locally allocated buffer - * Needed in client hello messages. Returns the new data length. If add_scsv is - * true, add the special safe renegotiation CS. - */ -static int -copy_ciphersuites(gnutls_session_t session, - gnutls_buffer_st * cdata, int add_scsv) -{ - int ret; - uint8_t cipher_suites[MAX_CIPHERSUITE_SIZE + RESERVED_CIPHERSUITES]; /* allow space for SCSV */ - int cipher_suites_size; - size_t init_length = cdata->length; ret = - _gnutls_supported_ciphersuites(session, cipher_suites, - sizeof(cipher_suites) - RESERVED_CIPHERSUITES); + _gnutls_parse_hello_extensions(session, + ext_parse_flag, + GNUTLS_EXT_APPLICATION, + &data[pos], len); if (ret < 0) return gnutls_assert_val(ret); - /* Here we remove any ciphersuite that does not conform - * the certificate requested, or to the - * authentication requested (eg SRP). - */ ret = - _gnutls_remove_unwanted_ciphersuites(session, cipher_suites, - ret, NULL, 0); + _gnutls_parse_hello_extensions(session, + ext_parse_flag, + GNUTLS_EXT_TLS, + &data[pos], len); if (ret < 0) return gnutls_assert_val(ret); - /* If no cipher suites were enabled. - */ - if (ret == 0) - return - gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); - - cipher_suites_size = ret; -#ifdef ENABLE_SSL3 - if (add_scsv) { - cipher_suites[cipher_suites_size] = 0x00; - cipher_suites[cipher_suites_size + 1] = 0xff; - cipher_suites_size += 2; + ret = + _gnutls_parse_hello_extensions(session, + ext_parse_flag, + _GNUTLS_EXT_TLS_POST_CS, + &data[pos], len); + if (ret < 0) + return gnutls_assert_val(ret); - ret = _gnutls_ext_sr_send_cs(session); + /* Calculate TLS 1.3 Early Secret */ + if (vers->tls13_sem && + !(session->internals.hsk_flags & HSK_PSK_SELECTED)) { + ret = _tls13_init_secret(session, NULL, 0); if (ret < 0) return gnutls_assert_val(ret); } -#endif - - if (session->internals.priorities.fallback) { - cipher_suites[cipher_suites_size] = - GNUTLS_FALLBACK_SCSV_MAJOR; - cipher_suites[cipher_suites_size + 1] = - GNUTLS_FALLBACK_SCSV_MINOR; - cipher_suites_size += 2; - } - ret = - _gnutls_buffer_append_data_prefix(cdata, 16, cipher_suites, - cipher_suites_size); + ret = set_auth_types(session); if (ret < 0) return gnutls_assert_val(ret); - ret = cdata->length - init_length; - - return ret; + return 0; } - -/* This function copies the appropriate compression methods, to a locally allocated buffer +/* This function copies the appropriate compression methods, to a locally allocated buffer * Needed in hello messages. Returns the new data length. */ static int -copy_comp_methods(gnutls_session_t session, +append_null_comp(gnutls_session_t session, gnutls_buffer_st * cdata) { - int ret; - uint8_t compression_methods[MAX_ALGOS], comp_num; + uint8_t compression_methods[2] = {0x01, 0x00}; size_t init_length = cdata->length; + int ret; ret = - _gnutls_supported_compression_methods(session, - compression_methods, - MAX_ALGOS); - if (ret < 0) - return gnutls_assert_val(ret); - - comp_num = ret; - - /* put the number of compression methods */ - ret = _gnutls_buffer_append_prefix(cdata, 8, comp_num); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = - _gnutls_buffer_append_data(cdata, compression_methods, - comp_num); + _gnutls_buffer_append_data(cdata, compression_methods, 2); if (ret < 0) return gnutls_assert_val(ret); @@ -1937,21 +2082,25 @@ static int send_client_hello(gnutls_session_t session, int again) mbuffer_st *bufel = NULL; int type; int ret = 0; - const version_entry_st *hver; + const version_entry_st *hver, *min_ver, *max_ver; uint8_t tver[2]; gnutls_buffer_st extdata; int rehandshake = 0; + unsigned add_sr_scsv = 0; uint8_t session_id_len = session->internals.resumed_security_parameters.session_id_size; - _gnutls_buffer_init(&extdata); - - /* note that rehandshake is different than resuming - */ - if (session->security_parameters.session_id_size) - rehandshake = 1; if (again == 0) { + /* note that rehandshake is different than resuming + */ + if (session->internals.initial_negotiation_completed) + rehandshake = 1; + + ret = _gnutls_buffer_init_handshake_mbuffer(&extdata); + if (ret < 0) + return gnutls_assert_val(ret); + /* if we are resuming a session then we set the * version number to the previously established. */ @@ -1960,19 +2109,24 @@ static int send_client_hello(gnutls_session_t session, int again) if (rehandshake) /* already negotiated version thus version_max == negotiated version */ hver = get_version(session); else /* new handshake. just get the max */ - hver = - version_to_entry(_gnutls_version_max - (session)); + hver = _gnutls_legacy_version_max(session); } else { /* we are resuming a session */ hver = session->internals.resumed_security_parameters. pversion; + + if (hver && hver->tls13_sem) + hver = _gnutls_legacy_version_max(session); } if (hver == NULL) { gnutls_assert(); - return GNUTLS_E_NO_PRIORITIES_WERE_SET; + if (session->internals.flags & INT_FLAG_NO_TLS13) + ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS; + else + ret = GNUTLS_E_NO_PRIORITIES_WERE_SET; + goto cleanup; } if (unlikely(session->internals.default_hello_version[0] != 0)) { @@ -1990,59 +2144,83 @@ static int send_client_hello(gnutls_session_t session, int again) _gnutls_handshake_log("HSK[%p]: Adv. version: %u.%u\n", session, (unsigned)tver[0], (unsigned)tver[1]); - /* Set the version we advertized as maximum - * (RSA uses it). - */ - set_adv_version(session, hver->major, hver->minor); - if (_gnutls_set_current_version(session, hver->id) < 0) - return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + min_ver = _gnutls_version_lowest(session); + max_ver = _gnutls_version_max(session); + if (min_ver == NULL || max_ver == NULL) { + gnutls_assert(); + ret = GNUTLS_E_NO_PRIORITIES_WERE_SET; + goto cleanup; + } + + /* if we are replying to an HRR the version is already negotiated */ + if (!(session->internals.hsk_flags & HSK_HRR_RECEIVED) || !get_version(session)) { + /* Set the version we advertized as maximum + * (RSA uses it). */ + set_adv_version(session, hver->major, hver->minor); + if (_gnutls_set_current_version(session, hver->id) < 0) { + ret = gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + goto cleanup; + } + } - if (session->internals.priorities.min_record_version != 0) { + if (session->internals.priorities->min_record_version != 0) { /* Advertize the lowest supported (SSL 3.0) record packet * version in record packets during the handshake. * That is to avoid confusing implementations * that do not support TLS 1.2 and don't know * how 3,3 version of record packets look like. */ - const version_entry_st *v = _gnutls_version_lowest(session); - - if (v == NULL) { - gnutls_assert(); - return GNUTLS_E_NO_PRIORITIES_WERE_SET; - } else { - _gnutls_record_set_default_version(session, - v->major, v->minor); - } + set_default_version(session, min_ver); + } else { + set_default_version(session, hver); } /* In order to know when this session was initiated. */ session->security_parameters.timestamp = gnutls_time(NULL); - /* Generate random data + /* Generate random data */ - if (!IS_DTLS(session) - || session->internals.dtls.hsk_hello_verify_requests == - 0) { - ret = _gnutls_set_client_random(session, NULL); - if (ret < 0) - return gnutls_assert_val(ret); + if (!(session->internals.hsk_flags & HSK_HRR_RECEIVED) && + !(IS_DTLS(session) && session->internals.dtls.hsk_hello_verify_requests != 0)) { + ret = _gnutls_gen_client_random(session); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } } ret = _gnutls_buffer_append_data(&extdata, - session->security_parameters.client_random, - GNUTLS_RANDOM_SIZE); + session->security_parameters.client_random, + GNUTLS_RANDOM_SIZE); if (ret < 0) { gnutls_assert(); goto cleanup; } - /* Copy the Session ID +#ifdef TLS13_APPENDIX_D4 + if (max_ver->tls13_sem && + session->security_parameters.session_id_size == 0) { + + /* Under TLS1.3 we generate a random session ID to make + * the TLS1.3 session look like a resumed TLS1.2 session */ + ret = _gnutls_generate_session_id(session->security_parameters. + session_id, + &session->security_parameters. + session_id_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } +#endif + + /* Copy the Session ID - if any */ - ret = _gnutls_buffer_append_data_prefix(&extdata, 8, - session->internals.resumed_security_parameters.session_id, - session_id_len); + ret = _gnutls_buffer_append_data_prefix(&extdata, 8, + session->internals.resumed_security_parameters.session_id, + session_id_len); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -2051,12 +2229,14 @@ static int send_client_hello(gnutls_session_t session, int again) /* Copy the DTLS cookie */ if (IS_DTLS(session)) { - ret = _gnutls_buffer_append_data_prefix(&extdata, 8, session->internals.dtls.cookie, - session->internals.dtls.cookie_len); + ret = _gnutls_buffer_append_data_prefix(&extdata, 8, + session->internals.dtls.dcookie.data, + session->internals.dtls.dcookie.size); if (ret < 0) { gnutls_assert(); goto cleanup; } + _gnutls_free_datum(&session->internals.dtls.dcookie); } /* Copy the ciphersuites. @@ -2069,19 +2249,11 @@ static int send_client_hello(gnutls_session_t session, int again) if (!session->internals.initial_negotiation_completed && session->security_parameters.entity == GNUTLS_CLIENT && (hver->id == GNUTLS_SSL3 && - session->internals.priorities.no_extensions != 0)) { - ret = - copy_ciphersuites(session, &extdata, - TRUE); - if (session->security_parameters.entity == GNUTLS_CLIENT) - _gnutls_extension_list_add(session, - GNUTLS_EXTENSION_SAFE_RENEGOTIATION); - } else + session->internals.priorities->no_extensions != 0)) { + add_sr_scsv = 1; + } #endif - ret = - copy_ciphersuites(session, &extdata, - FALSE); - + ret = _gnutls_get_client_ciphersuites(session, &extdata, min_ver, add_sr_scsv); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -2089,7 +2261,7 @@ static int send_client_hello(gnutls_session_t session, int again) /* Copy the compression methods. */ - ret = copy_comp_methods(session, &extdata); + ret = append_null_comp(session, &extdata); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -2097,7 +2269,7 @@ static int send_client_hello(gnutls_session_t session, int again) /* Generate and copy TLS extensions. */ - if (session->internals.priorities.no_extensions == 0) { + if (session->internals.priorities->no_extensions == 0) { if (_gnutls_version_has_extensions(hver)) { type = GNUTLS_EXT_ANY; } else { @@ -2105,171 +2277,142 @@ static int send_client_hello(gnutls_session_t session, int again) } ret = - _gnutls_gen_extensions(session, &extdata, - type); + _gnutls_gen_hello_extensions(session, &extdata, + GNUTLS_EXT_FLAG_CLIENT_HELLO, + type); if (ret < 0) { gnutls_assert(); goto cleanup; } } - bufel = - _gnutls_handshake_alloc(session, extdata.length); - if (bufel == NULL) { - gnutls_assert(); - ret = GNUTLS_E_MEMORY_ERROR; - goto cleanup; - } - _mbuffer_set_udata_size(bufel, 0); - - ret = - _mbuffer_append_data(bufel, extdata.data, - extdata.length); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } + bufel = _gnutls_buffer_to_mbuffer(&extdata); } - _gnutls_buffer_clear(&extdata); + ret = _gnutls_send_handshake(session, bufel, + GNUTLS_HANDSHAKE_CLIENT_HELLO); - return - _gnutls_send_handshake(session, bufel, - GNUTLS_HANDSHAKE_CLIENT_HELLO); + return ret; - cleanup: - _mbuffer_xfree(&bufel); + cleanup: _gnutls_buffer_clear(&extdata); return ret; } -static int send_server_hello(gnutls_session_t session, int again) +int _gnutls_send_server_hello(gnutls_session_t session, int again) { mbuffer_st *bufel = NULL; - uint8_t *data = NULL; - gnutls_buffer_st extdata; - int pos = 0; - int datalen, ret = 0; - uint8_t comp; + gnutls_buffer_st buf; + int ret; uint8_t session_id_len = session->security_parameters.session_id_size; - char buf[2 * GNUTLS_MAX_SESSION_ID_SIZE + 1]; + char tmpbuf[2 * GNUTLS_MAX_SESSION_ID_SIZE + 1]; const version_entry_st *vers; + uint8_t vbytes[2]; + unsigned extflag = 0; + gnutls_ext_parse_type_t etype; - _gnutls_buffer_init(&extdata); + _gnutls_buffer_init(&buf); if (again == 0) { - datalen = 2 + session_id_len + 1 + GNUTLS_RANDOM_SIZE + 3; - ret = - _gnutls_gen_extensions(session, &extdata, - (session->internals.resumed == - RESUME_TRUE) ? - GNUTLS_EXT_MANDATORY : - GNUTLS_EXT_ANY); + vers = get_version(session); + if (unlikely(vers == NULL || session->security_parameters.cs == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + if (vers->tls13_sem) { + vbytes[0] = 0x03; /* TLS1.2 */ + vbytes[1] = 0x03; + extflag |= GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO; + } else { + vbytes[0] = vers->major; + vbytes[1] = vers->minor; + extflag |= GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO; + } + + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); if (ret < 0) { gnutls_assert(); goto fail; } - bufel = - _gnutls_handshake_alloc(session, - datalen + extdata.length); - if (bufel == NULL) { + ret = _gnutls_buffer_append_data(&buf, vbytes, 2); + if (ret < 0) { gnutls_assert(); - ret = GNUTLS_E_MEMORY_ERROR; goto fail; } - data = _mbuffer_get_udata_ptr(bufel); - - vers = get_version(session); - if (unlikely(vers == NULL)) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - - data[pos++] = vers->major; - data[pos++] = vers->minor; - memcpy(&data[pos], - session->security_parameters.server_random, - GNUTLS_RANDOM_SIZE); - pos += GNUTLS_RANDOM_SIZE; + ret = _gnutls_buffer_append_data(&buf, + session->security_parameters.server_random, + GNUTLS_RANDOM_SIZE); + if (ret < 0) { + gnutls_assert(); + goto fail; + } - data[pos++] = session_id_len; - if (session_id_len > 0) { - memcpy(&data[pos], - session->security_parameters.session_id, - session_id_len); + ret = _gnutls_buffer_append_data_prefix(&buf, 8, + session->security_parameters.session_id, + session_id_len); + if (ret < 0) { + gnutls_assert(); + goto fail; } - pos += session_id_len; _gnutls_handshake_log("HSK[%p]: SessionID: %s\n", session, _gnutls_bin2hex(session-> security_parameters.session_id, - session_id_len, buf, - sizeof(buf), NULL)); + session_id_len, tmpbuf, + sizeof(tmpbuf), NULL)); - memcpy(&data[pos], - session->security_parameters.cipher_suite, 2); - pos += 2; - - comp = - _gnutls_compression_get_num(session-> - security_parameters. - compression_method); - data[pos++] = comp; - - if (extdata.length > 0) { - memcpy(&data[pos], extdata.data, extdata.length); + ret = _gnutls_buffer_append_data(&buf, + session->security_parameters.cs->id, + 2); + if (ret < 0) { + gnutls_assert(); + goto fail; } - } - - ret = - _gnutls_send_handshake(session, bufel, - GNUTLS_HANDSHAKE_SERVER_HELLO); - - fail: - _gnutls_buffer_clear(&extdata); - return ret; -} - -static int send_hello(gnutls_session_t session, int again) -{ - int ret; - - if (session->security_parameters.entity == GNUTLS_CLIENT) { - ret = send_client_hello(session, again); - - } else { /* SERVER */ - ret = send_server_hello(session, again); - } - - return ret; -} - -/* RECEIVE A HELLO MESSAGE. This should be called from gnutls_recv_handshake_int only if a - * hello message is expected. It uses the security_parameters.cipher_suite - * and internals.compression_method. - */ -static int -recv_hello(gnutls_session_t session, uint8_t * data, int datalen) -{ - int ret; - if (session->security_parameters.entity == GNUTLS_CLIENT) { - ret = read_server_hello(session, data, datalen); + /* compression */ + ret = _gnutls_buffer_append_prefix(&buf, 8, 0); if (ret < 0) { gnutls_assert(); - return ret; + goto fail; } - } else { /* Server side reading a client hello */ - ret = read_client_hello(session, data, datalen); + if (!vers->tls13_sem && session->internals.resumed != RESUME_FALSE) + etype = GNUTLS_EXT_MANDATORY; + else + etype = GNUTLS_EXT_ANY; + ret = + _gnutls_gen_hello_extensions(session, &buf, extflag, etype); if (ret < 0) { gnutls_assert(); - return ret; + goto fail; + } + + if (vers->tls13_sem) { + /* Under TLS1.3, the session ID is used for different purposes than + * the TLS1.0 session ID. Ensure that there is an internally set + * value which the server will see on the original and resumed sessions */ + ret = _gnutls_generate_session_id(session->security_parameters. + session_id, + &session->security_parameters. + session_id_size); + if (ret < 0) { + gnutls_assert(); + goto fail; + } } + + bufel = _gnutls_buffer_to_mbuffer(&buf); } - return 0; + ret = + _gnutls_send_handshake(session, bufel, + GNUTLS_HANDSHAKE_SERVER_HELLO); + +fail: + _gnutls_buffer_clear(&buf); + return ret; } static int @@ -2280,11 +2423,11 @@ recv_hello_verify_request(gnutls_session_t session, size_t pos = 0; uint8_t cookie_len; unsigned int nb_verifs; + int ret; - if (!IS_DTLS(session) - || session->security_parameters.entity == GNUTLS_SERVER) { + if (!IS_DTLS(session)) { gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; + return GNUTLS_E_UNEXPECTED_PACKET; } nb_verifs = ++session->internals.dtls.hsk_hello_verify_requests; @@ -2295,7 +2438,6 @@ recv_hello_verify_request(gnutls_session_t session, return GNUTLS_E_UNEXPECTED_PACKET; } - /* TODO: determine if we need to do anything with the server version field */ DECR_LEN(len, 2); pos += 2; @@ -2310,8 +2452,10 @@ recv_hello_verify_request(gnutls_session_t session, DECR_LEN(len, cookie_len); - session->internals.dtls.cookie_len = cookie_len; - memcpy(session->internals.dtls.cookie, &data[pos], cookie_len); + gnutls_free(session->internals.dtls.dcookie.data); + ret = _gnutls_set_datum(&session->internals.dtls.dcookie, &data[pos], cookie_len); + if (ret < 0) + return gnutls_assert_val(ret); if (len != 0) { gnutls_assert(); @@ -2319,7 +2463,9 @@ recv_hello_verify_request(gnutls_session_t session, } /* reset handshake hash buffers */ - handshake_hash_buffer_empty(session); + handshake_hash_buffer_reset(session); + /* reset extensions used in previous hello */ + session->internals.used_exts = 0; return 0; } @@ -2357,46 +2503,61 @@ recv_hello_verify_request(gnutls_session_t session, * <-------- Finished * [ChangeCipherSpec] * Finished --------> - * + * */ /** * gnutls_rehandshake: * @session: is a #gnutls_session_t type. * - * This function will renegotiate security parameters with the - * client. This should only be called in case of a server. + * This function can only be called in server side, and + * instructs a TLS 1.2 or earlier client to renegotiate + * parameters (perform a handshake), by sending a + * hello request message. * - * This message informs the peer that we want to renegotiate - * parameters (perform a handshake). + * If this function succeeds, the calling application + * should call gnutls_record_recv() until %GNUTLS_E_REHANDSHAKE + * is returned to clear any pending data. If the %GNUTLS_E_REHANDSHAKE + * error code is not seen, then the handshake request was + * not followed by the peer (the TLS protocol does not require + * the client to do, and such compliance should be handled + * by the application protocol). * - * If this function succeeds (returns 0), you must call the - * gnutls_handshake() function in order to negotiate the new + * Once the %GNUTLS_E_REHANDSHAKE error code is seen, the + * calling application should proceed to calling + * gnutls_handshake() to negotiate the new * parameters. * - * Since TLS is full duplex some application data might have been - * sent during peer's processing of this message. In that case - * one should call gnutls_record_recv() until GNUTLS_E_REHANDSHAKE - * is returned to clear any pending data. Care must be taken, if - * rehandshake is mandatory, to terminate if it does not start after - * some threshold. - * - * If the client does not wish to renegotiate parameters he - * should reply with an alert message, thus the return code will be - * %GNUTLS_E_WARNING_ALERT_RECEIVED and the alert will be + * If the client does not wish to renegotiate parameters he + * may reply with an alert message, and in that case the return code seen + * by subsequent gnutls_record_recv() will be + * %GNUTLS_E_WARNING_ALERT_RECEIVED with the specific alert being * %GNUTLS_A_NO_RENEGOTIATION. A client may also choose to ignore - * this message. + * this request. + * + * Under TLS 1.3 this function is equivalent to gnutls_session_key_update() + * with the %GNUTLS_KU_PEER flag. In that case subsequent calls to + * gnutls_record_recv() will not return %GNUTLS_E_REHANDSHAKE, and + * calls to gnutls_handshake() in server side are a no-op. + * + * This function always fails with %GNUTLS_E_INVALID_REQUEST when + * called in client side. * * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. **/ int gnutls_rehandshake(gnutls_session_t session) { int ret; + const version_entry_st *vers = get_version(session); /* only server sends that handshake packet */ if (session->security_parameters.entity == GNUTLS_CLIENT) return GNUTLS_E_INVALID_REQUEST; + if (vers->tls13_sem) { + return gnutls_session_key_update(session, GNUTLS_KU_PEER); + } + _dtls_async_timer_delete(session); ret = @@ -2427,44 +2588,31 @@ _gnutls_abort_handshake(gnutls_session_t session, int ret) } - static int _gnutls_send_supplemental(gnutls_session_t session, int again) { - mbuffer_st *bufel; + mbuffer_st *bufel = NULL; int ret = 0; _gnutls_debug_log("EXT[%p]: Sending supplemental data\n", session); - if (again) - ret = - _gnutls_send_handshake(session, NULL, - GNUTLS_HANDSHAKE_SUPPLEMENTAL); - else { + if (!again) { gnutls_buffer_st buf; - _gnutls_buffer_init(&buf); + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); ret = _gnutls_gen_supplemental(session, &buf); if (ret < 0) { gnutls_assert(); + _gnutls_buffer_clear(&buf); return ret; } - bufel = - _gnutls_handshake_alloc(session, - buf.length); - if (bufel == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - _mbuffer_set_udata(bufel, buf.data, buf.length); - _gnutls_buffer_clear(&buf); - - ret = _gnutls_send_handshake(session, bufel, - GNUTLS_HANDSHAKE_SUPPLEMENTAL); + bufel = _gnutls_buffer_to_mbuffer(&buf); } - return ret; + return _gnutls_send_handshake(session, bufel, + GNUTLS_HANDSHAKE_SUPPLEMENTAL); } static int _gnutls_recv_supplemental(gnutls_session_t session) @@ -2499,61 +2647,89 @@ static int _gnutls_recv_supplemental(gnutls_session_t session) * gnutls_handshake: * @session: is a #gnutls_session_t type. * - * This function does the handshake of the TLS/SSL protocol, and - * initializes the TLS connection. - * - * This function will fail if any problem is encountered, and will - * return a negative error code. In case of a client, if the client - * has asked to resume a session, but the server couldn't, then a - * full handshake will be performed. + * This function performs the handshake of the TLS/SSL protocol, and + * initializes the TLS session parameters. * * The non-fatal errors expected by this function are: - * %GNUTLS_E_INTERRUPTED, %GNUTLS_E_AGAIN, - * %GNUTLS_E_WARNING_ALERT_RECEIVED, and %GNUTLS_E_GOT_APPLICATION_DATA, - * the latter only in a case of rehandshake. + * %GNUTLS_E_INTERRUPTED, %GNUTLS_E_AGAIN, + * %GNUTLS_E_WARNING_ALERT_RECEIVED. When this function is called + * for re-handshake under TLS 1.2 or earlier, the non-fatal error code + * %GNUTLS_E_GOT_APPLICATION_DATA may also be returned. * - * The former two interrupt the handshake procedure due to the lower - * layer being interrupted, and the latter because of an alert that - * may be sent by a server (it is always a good idea to check any - * received alerts). On these errors call this function again, until it - * returns 0; cf. gnutls_record_get_direction() and + * The former two interrupt the handshake procedure due to the transport + * layer being interrupted, and the latter because of a "warning" alert that + * was sent by the peer (it is always a good idea to check any + * received alerts). On these non-fatal errors call this function again, + * until it returns 0; cf. gnutls_record_get_direction() and * gnutls_error_is_fatal(). In DTLS sessions the non-fatal error * %GNUTLS_E_LARGE_PACKET is also possible, and indicates that * the MTU should be adjusted. * - * If this function is called by a server after a rehandshake request - * then %GNUTLS_E_GOT_APPLICATION_DATA or - * %GNUTLS_E_WARNING_ALERT_RECEIVED may be returned. Note that these - * are non fatal errors, only in the specific case of a rehandshake. - * Their meaning is that the client rejected the rehandshake request or - * in the case of %GNUTLS_E_GOT_APPLICATION_DATA it could also mean that - * some data were pending. A client may receive that error code if - * it initiates the handshake and the server doesn't agreed. + * When this function is called by a server after a rehandshake request + * under TLS 1.2 or earlier the %GNUTLS_E_GOT_APPLICATION_DATA error code indicates + * that some data were pending prior to peer initiating the handshake. + * Under TLS 1.3 this function when called after a successful handshake, is a no-op + * and always succeeds in server side; in client side this function is + * equivalent to gnutls_session_key_update() with %GNUTLS_KU_PEER flag. * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * This function handles both full and abbreviated TLS handshakes (resumption). + * For abbreviated handshakes, in client side, the gnutls_session_set_data() + * should be called prior to this function to set parameters from a previous session. + * In server side, resumption is handled by either setting a DB back-end, or setting + * up keys for session tickets. + * + * Returns: %GNUTLS_E_SUCCESS on a successful handshake, otherwise a negative error code. **/ int gnutls_handshake(gnutls_session_t session) { + const version_entry_st *vers = get_version(session); int ret; - record_parameters_st *params; - /* sanity check. Verify that there are priorities setup. - */ + if (unlikely(session->internals.initial_negotiation_completed)) { + if (vers->tls13_sem) { + if (session->security_parameters.entity == GNUTLS_CLIENT) { + return gnutls_session_key_update(session, GNUTLS_KU_PEER); + } else { + /* This is a no-op for a server under TLS 1.3, as + * a server has already called gnutls_rehandshake() + * which performed a key update. + */ + return 0; + } + } + } if (STATE == STATE0) { + unsigned int tmo_ms; + struct timespec *end; + struct timespec *start; + /* first call */ - if (session->internals.priorities.protocol.algorithms == 0) + if (session->internals.priorities == NULL || + session->internals.priorities->cs.size == 0) return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET); - session->internals.extensions_sent_size = 0; - session->internals.crt_requested = 0; + ret = + _gnutls_epoch_setup_next(session, 0, NULL); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.used_exts = 0; + session->internals.hsk_flags = 0; session->internals.handshake_in_progress = 1; session->internals.vc_status = -1; - gettime(&session->internals.handshake_start_time); - if (session->internals.handshake_timeout_ms && - session->internals.handshake_endtime == 0) - session->internals.handshake_endtime = session->internals.handshake_start_time.tv_sec + - session->internals.handshake_timeout_ms / 1000; + gnutls_gettime(&session->internals.handshake_start_time); + + tmo_ms = session->internals.handshake_timeout_ms; + end = &session->internals.handshake_abs_timeout; + start = &session->internals.handshake_start_time; + + if (tmo_ms && end->tv_sec == 0 && end->tv_nsec == 0) { + end->tv_sec = + start->tv_sec + (start->tv_nsec + tmo_ms * 1000000LL) / 1000000000LL; + end->tv_nsec = + (start->tv_nsec + tmo_ms * 1000000LL) % 1000000000LL; + } } if (session->internals.recv_state == RECV_STATE_FALSE_START) { @@ -2561,20 +2737,6 @@ int gnutls_handshake(gnutls_session_t session) return gnutls_assert_val(GNUTLS_E_HANDSHAKE_DURING_FALSE_START); } - ret = - _gnutls_epoch_get(session, - session->security_parameters.epoch_next, - ¶ms); - if (ret < 0) { - /* We assume the epoch is not allocated if _gnutls_epoch_get fails. */ - ret = - _gnutls_epoch_alloc(session, - session->security_parameters. - epoch_next, NULL); - if (ret < 0) - return gnutls_assert_val(ret); - } - if (session->security_parameters.entity == GNUTLS_CLIENT) { do { ret = handshake_client(session); @@ -2582,6 +2744,7 @@ int gnutls_handshake(gnutls_session_t session) } else { ret = handshake_server(session); } + if (ret < 0) { /* In the case of a rehandshake abort * we should reset the handshake's internal state. @@ -2593,9 +2756,8 @@ int gnutls_handshake(gnutls_session_t session) } /* clear handshake buffer */ - if (session->security_parameters.entity != GNUTLS_CLIENT || - !(session->internals.flags & GNUTLS_ENABLE_FALSE_START) || - session->internals.recv_state != RECV_STATE_FALSE_START) { + if (session->internals.recv_state != RECV_STATE_FALSE_START && + session->internals.recv_state != RECV_STATE_EARLY_START) { _gnutls_handshake_hash_buffers_clear(session); @@ -2607,7 +2769,21 @@ int gnutls_handshake(gnutls_session_t session) _gnutls_handshake_internal_state_clear(session); - session->security_parameters.epoch_next++; + _gnutls_buffer_clear(&session->internals.record_presend_buffer); + + _gnutls_epoch_bump(session); + } + + /* Give an estimation of the round-trip under TLS1.3, used by gnutls_session_get_data2() */ + if (!IS_SERVER(session) && vers->tls13_sem) { + struct timespec handshake_finish_time; + gnutls_gettime(&handshake_finish_time); + + if (!(session->internals.hsk_flags & HSK_HRR_RECEIVED)) { + session->internals.ertt = timespec_sub_ms(&handshake_finish_time, &session->internals.handshake_start_time)/2; + } else { + session->internals.ertt = timespec_sub_ms(&handshake_finish_time, &session->internals.handshake_start_time)/4; + } } return 0; @@ -2648,43 +2824,18 @@ gnutls_handshake_set_timeout(gnutls_session_t session, unsigned int ms) session->internals.handshake_timeout_ms = ms; } - -#define IMED_RET( str, ret, allow_alert) do { \ - if (ret < 0) { \ - /* EAGAIN and INTERRUPTED are always non-fatal */ \ - if (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED) \ - return ret; \ - if (ret == GNUTLS_E_GOT_APPLICATION_DATA && session->internals.initial_negotiation_completed != 0) \ - return ret; \ - if (session->internals.handshake_suspicious_loops < 16) { \ - if (ret == GNUTLS_E_LARGE_PACKET) { \ - session->internals.handshake_suspicious_loops++; \ - return ret; \ - } \ - /* a warning alert might interrupt handshake */ \ - if (allow_alert != 0 && ret==GNUTLS_E_WARNING_ALERT_RECEIVED) { \ - session->internals.handshake_suspicious_loops++; \ - return ret; \ - } \ - } \ - gnutls_assert(); \ - ERR( str, ret); \ - /* do not allow non-fatal errors at this point */ \ - if (gnutls_error_is_fatal(ret) == 0) ret = gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); \ - session_invalidate(session); \ - _gnutls_handshake_hash_buffers_clear(session); \ - return ret; \ - } } while (0) - - /* Runs the certificate verification callback. - * side is either GNUTLS_CLIENT or GNUTLS_SERVER. + * side is the side that we verify the certificate + * from (either GNUTLS_CLIENT or GNUTLS_SERVER). */ -static int run_verify_callback(gnutls_session_t session, unsigned int side) +int _gnutls_run_verify_callback(gnutls_session_t session, unsigned int side) { gnutls_certificate_credentials_t cred; int ret, type; + if (session->internals.hsk_flags & HSK_PSK_SELECTED) + return 0; + cred = (gnutls_certificate_credentials_t) _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); @@ -2741,35 +2892,25 @@ static bool can_send_false_start(gnutls_session_t session) } /* - * handshake_client + * handshake_client * This function performs the client side of the handshake of the TLS/SSL protocol. */ static int handshake_client(gnutls_session_t session) { int ret = 0; + const version_entry_st *ver; + + reset: + if (STATE >= STATE99) + return _gnutls13_handshake_client(session); -#ifdef HANDSHAKE_DEBUG - char buf[64]; - - if (session->internals.resumed_security_parameters. - session_id_size > 0) - _gnutls_handshake_log("HSK[%p]: Ask to resume: %s\n", - session, - _gnutls_bin2hex(session->internals. - resumed_security_parameters. - session_id, - session->internals. - resumed_security_parameters. - session_id_size, buf, - sizeof(buf), NULL)); -#endif switch (STATE) { case STATE0: case STATE1: - ret = send_hello(session, AGAIN(STATE1)); + ret = send_client_hello(session, AGAIN(STATE1)); STATE = STATE1; IMED_RET("send hello", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE2: if (IS_DTLS(session)) { ret = @@ -2779,12 +2920,24 @@ static int handshake_client(gnutls_session_t session) STATE = STATE2; IMED_RET("recv hello verify", ret, 1); + if (ret == 1) { + STATE = STATE0; + return 1; + } + } else { + ret = + _gnutls_recv_handshake(session, + GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST, + 1, NULL); + STATE = STATE2; + IMED_RET("recv hello retry", ret, 1); + if (ret == 1) { STATE = STATE0; return 1; } } - /* fall through */ + FALLTHROUGH; case STATE3: /* receive the server hello */ ret = @@ -2793,26 +2946,32 @@ static int handshake_client(gnutls_session_t session) 0, NULL); STATE = STATE3; IMED_RET("recv hello", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE4: + ver = get_version(session); + if (ver->tls13_sem) { /* TLS 1.3 state machine */ + STATE = STATE99; + goto reset; + } + ret = _gnutls_ext_sr_verify(session); STATE = STATE4; - IMED_RET("recv hello", ret, 0); - /* fall through */ + IMED_RET_FATAL("recv hello", ret, 0); + FALLTHROUGH; case STATE5: if (session->security_parameters.do_recv_supplemental) { ret = _gnutls_recv_supplemental(session); STATE = STATE5; IMED_RET("recv supplemental", ret, 1); } - /* fall through */ + FALLTHROUGH; case STATE6: /* RECV CERTIFICATE */ if (session->internals.resumed == RESUME_FALSE) /* if we are not resuming */ ret = _gnutls_recv_server_certificate(session); STATE = STATE6; IMED_RET("recv server certificate", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE7: #ifdef ENABLE_OCSP /* RECV CERTIFICATE STATUS */ @@ -2823,21 +2982,23 @@ static int handshake_client(gnutls_session_t session) STATE = STATE7; IMED_RET("recv server certificate", ret, 1); #endif - /* fall through */ + FALLTHROUGH; case STATE8: - ret = run_verify_callback(session, GNUTLS_CLIENT); + ret = _gnutls_run_verify_callback(session, GNUTLS_CLIENT); STATE = STATE8; if (ret < 0) return gnutls_assert_val(ret); + + FALLTHROUGH; case STATE9: /* receive the server key exchange */ if (session->internals.resumed == RESUME_FALSE) /* if we are not resuming */ ret = _gnutls_recv_server_kx_message(session); STATE = STATE9; IMED_RET("recv server kx message", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE10: - /* receive the server certificate request - if any + /* receive the server certificate request - if any */ if (session->internals.resumed == RESUME_FALSE) /* if we are not resuming */ @@ -2845,7 +3006,7 @@ static int handshake_client(gnutls_session_t session) STATE = STATE10; IMED_RET("recv server certificate request message", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE11: /* receive the server hello done */ if (session->internals.resumed == RESUME_FALSE) /* if we are not resuming */ @@ -2855,7 +3016,7 @@ static int handshake_client(gnutls_session_t session) 0, NULL); STATE = STATE11; IMED_RET("recv server hello done", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE12: if (session->security_parameters.do_send_supplemental) { ret = @@ -2864,7 +3025,7 @@ static int handshake_client(gnutls_session_t session) STATE = STATE12; IMED_RET("send supplemental", ret, 0); } - /* fall through */ + FALLTHROUGH; case STATE13: /* send our certificate - if any and if requested */ @@ -2875,7 +3036,7 @@ static int handshake_client(gnutls_session_t session) (STATE13)); STATE = STATE13; IMED_RET("send client certificate", ret, 0); - /* fall through */ + FALLTHROUGH; case STATE14: if (session->internals.resumed == RESUME_FALSE) /* if we are not resuming */ ret = @@ -2883,7 +3044,7 @@ static int handshake_client(gnutls_session_t session) AGAIN(STATE14)); STATE = STATE14; IMED_RET("send client kx", ret, 0); - /* fall through */ + FALLTHROUGH; case STATE15: /* send client certificate verify */ if (session->internals.resumed == RESUME_FALSE) /* if we are not resuming */ @@ -2893,24 +3054,22 @@ static int handshake_client(gnutls_session_t session) (STATE15)); STATE = STATE15; IMED_RET("send client certificate verify", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE16: STATE = STATE16; if (session->internals.resumed == RESUME_FALSE) { ret = send_handshake_final(session, TRUE); IMED_RET("send handshake final 2", ret, 1); -#ifdef ENABLE_SESSION_TICKETS } else { ret = _gnutls_recv_new_session_ticket(session); IMED_RET("recv handshake new session ticket", ret, 1); -#endif } - /* fall through */ + FALLTHROUGH; case STATE17: STATE = STATE17; if (session->internals.resumed == RESUME_FALSE && (session->internals.flags & GNUTLS_ENABLE_FALSE_START) && can_send_false_start(session)) { - session->internals.false_start_used = 1; + session->internals.hsk_flags |= HSK_FALSE_START_USED; session->internals.recv_state = RECV_STATE_FALSE_START; /* complete this phase of the handshake. We * should be called again by gnutls_record_recv() @@ -2919,24 +3078,20 @@ static int handshake_client(gnutls_session_t session) gnutls_assert(); return 0; - } else { - session->internals.false_start_used = 0; } - /* fall through */ + FALLTHROUGH; case STATE18: STATE = STATE18; if (session->internals.resumed == RESUME_FALSE) { -#ifdef ENABLE_SESSION_TICKETS ret = _gnutls_recv_new_session_ticket(session); IMED_RET("recv handshake new session ticket", ret, 1); -#endif } else { ret = recv_handshake_final(session, TRUE); IMED_RET("recv handshake final", ret, 1); } - /* fall through */ + FALLTHROUGH; case STATE19: STATE = STATE19; if (session->internals.resumed == RESUME_FALSE) { @@ -2948,23 +3103,26 @@ static int handshake_client(gnutls_session_t session) } STATE = STATE0; - /* fall through */ + FALLTHROUGH; default: break; } /* explicitly reset any false start flags */ + gnutls_mutex_lock(&session->internals.post_negotiation_lock); + session->internals.initial_negotiation_completed = 1; session->internals.recv_state = RECV_STATE_0; + gnutls_mutex_unlock(&session->internals.post_negotiation_lock); return 0; } -/* This function is to be called if the handshake was successfully +/* This function is to be called if the handshake was successfully * completed. This sends a Change Cipher Spec packet to the peer. */ -static ssize_t send_change_cipher_spec(gnutls_session_t session, int again) +ssize_t _gnutls_send_change_cipher_spec(gnutls_session_t session, int again) { uint8_t *data; mbuffer_st *bufel; @@ -2972,7 +3130,7 @@ static ssize_t send_change_cipher_spec(gnutls_session_t session, int again) const version_entry_st *vers; if (again == 0) { - bufel = _gnutls_handshake_alloc(session, 1); + bufel = _gnutls_handshake_alloc(session, 3); /* max for DTLS0.9 */ if (bufel == NULL) return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); @@ -2995,6 +3153,13 @@ static ssize_t send_change_cipher_spec(gnutls_session_t session, int again) session->internals.dtls.hsk_write_seq++; } + ret = _gnutls_call_hook_func(session, GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC, GNUTLS_HOOK_PRE, 0, + data, 1); + if (ret < 0) { + _mbuffer_xfree(&bufel); + return gnutls_assert_val(ret); + } + ret = _gnutls_handshake_io_cache_int(session, GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC, @@ -3004,6 +3169,20 @@ static ssize_t send_change_cipher_spec(gnutls_session_t session, int again) return gnutls_assert_val(ret); } + ret = _gnutls_call_hook_func(session, GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC, GNUTLS_HOOK_POST, 0, + data, 1); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + /* under TLS 1.3, CCS may be immediately followed by + * receiving ClientHello thus cannot be cached */ + if (vers->tls13_sem) { + ret = _gnutls_handshake_io_write_flush(session); + if (ret < 0) + return gnutls_assert_val(ret); + } + _gnutls_handshake_log("REC[%p]: Sent ChangeCipherSpec\n", session); } @@ -3011,7 +3190,7 @@ static ssize_t send_change_cipher_spec(gnutls_session_t session, int again) return 0; } -/* This function sends the final handshake packets and initializes connection +/* This function sends the final handshake packets and initializes connection */ static int send_handshake_final(gnutls_session_t session, int init) { @@ -3022,15 +3201,14 @@ static int send_handshake_final(gnutls_session_t session, int init) switch (FINAL_STATE) { case STATE0: case STATE1: - ret = send_change_cipher_spec(session, FAGAIN(STATE1)); + ret = _gnutls_send_change_cipher_spec(session, FAGAIN(STATE1)); FINAL_STATE = STATE0; if (ret < 0) { - ERR("send ChangeCipherSpec", ret); gnutls_assert(); return ret; } - /* Initialize the connection session (start encryption) - in case of client + /* Initialize the connection session (start encryption) - in case of client */ if (init == TRUE) { ret = _gnutls_connection_state_init(session); @@ -3046,19 +3224,18 @@ static int send_handshake_final(gnutls_session_t session, int init) return ret; } - /* fall through */ + FALLTHROUGH; case STATE2: /* send the finished message */ ret = _gnutls_send_finished(session, FAGAIN(STATE2)); FINAL_STATE = STATE2; if (ret < 0) { - ERR("send Finished", ret); gnutls_assert(); return ret; } FINAL_STATE = STATE0; - /* fall through */ + FALLTHROUGH; default: break; } @@ -3066,7 +3243,7 @@ static int send_handshake_final(gnutls_session_t session, int init) return 0; } -/* This function receives the final handshake packets +/* This function receives the final handshake packets * And executes the appropriate function to initialize the * read session. */ @@ -3110,7 +3287,6 @@ static int recv_handshake_final(gnutls_session_t session, int init) _gnutls_recv_int(session, GNUTLS_CHANGE_CIPHER_SPEC, ccs, ccs_len, NULL, tleft); if (ret <= 0) { - ERR("recv ChangeCipherSpec", ret); gnutls_assert(); return (ret<0)?ret:GNUTLS_E_UNEXPECTED_PACKET; } @@ -3132,7 +3308,7 @@ static int recv_handshake_final(gnutls_session_t session, int init) gnutls_assert(); return ret; } - /* fall through */ + FALLTHROUGH; case STATE31: FINAL_STATE = STATE31; @@ -3146,17 +3322,15 @@ static int recv_handshake_final(gnutls_session_t session, int init) ret = _gnutls_recv_finished(session); if (ret < 0) { - ERR("recv finished", ret); gnutls_assert(); return ret; } FINAL_STATE = STATE0; - /* fall through */ + FALLTHROUGH; default: break; } - return 0; } @@ -3167,6 +3341,12 @@ static int recv_handshake_final(gnutls_session_t session, int init) static int handshake_server(gnutls_session_t session) { int ret = 0; + const version_entry_st *ver; + + reset: + + if (STATE >= STATE90) + return _gnutls13_handshake_server(session); switch (STATE) { case STATE0: @@ -3183,18 +3363,33 @@ static int handshake_server(gnutls_session_t session) } else { STATE = STATE1; } + + if (ret == GNUTLS_E_NO_COMMON_KEY_SHARE) { + STATE = STATE90; + session->internals.hsk_flags |= HSK_HRR_SENT; + goto reset; + } + IMED_RET("recv hello", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE2: + ret = _gnutls_ext_sr_verify(session); STATE = STATE2; - IMED_RET("recv hello", ret, 0); - /* fall through */ + IMED_RET_FATAL("recv hello", ret, 0); + FALLTHROUGH; case STATE3: - ret = send_hello(session, AGAIN(STATE3)); + ret = _gnutls_send_server_hello(session, AGAIN(STATE3)); STATE = STATE3; IMED_RET("send hello", ret, 1); - /* fall through */ + + ver = get_version(session); + if (ver->tls13_sem) { /* TLS 1.3 state machine */ + STATE = STATE99; + goto reset; + } + + FALLTHROUGH; case STATE4: if (session->security_parameters.do_send_supplemental) { ret = @@ -3204,7 +3399,7 @@ static int handshake_server(gnutls_session_t session) IMED_RET("send supplemental data", ret, 0); } /* SEND CERTIFICATE + KEYEXCHANGE + CERTIFICATE_REQUEST */ - /* fall through */ + FALLTHROUGH; case STATE5: /* NOTE: these should not be send if we are resuming */ @@ -3214,7 +3409,7 @@ static int handshake_server(gnutls_session_t session) AGAIN(STATE5)); STATE = STATE5; IMED_RET("send server certificate", ret, 0); - /* fall through */ + FALLTHROUGH; case STATE6: #ifdef ENABLE_OCSP if (session->internals.resumed == RESUME_FALSE) @@ -3225,7 +3420,7 @@ static int handshake_server(gnutls_session_t session) STATE = STATE6; IMED_RET("send server certificate status", ret, 0); #endif - /* fall through */ + FALLTHROUGH; case STATE7: /* send server key exchange (A) */ if (session->internals.resumed == RESUME_FALSE) @@ -3234,7 +3429,7 @@ static int handshake_server(gnutls_session_t session) AGAIN(STATE7)); STATE = STATE7; IMED_RET("send server kx", ret, 0); - /* fall through */ + FALLTHROUGH; case STATE8: /* Send certificate request - if requested to */ if (session->internals.resumed == RESUME_FALSE) @@ -3243,7 +3438,7 @@ static int handshake_server(gnutls_session_t session) AGAIN(STATE8)); STATE = STATE8; IMED_RET("send server cert request", ret, 0); - /* fall through */ + FALLTHROUGH; case STATE9: /* send the server hello done */ if (session->internals.resumed == RESUME_FALSE) /* if we are not resuming */ @@ -3253,7 +3448,7 @@ static int handshake_server(gnutls_session_t session) AGAIN(STATE9)); STATE = STATE9; IMED_RET("send server hello done", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE10: if (session->security_parameters.do_recv_supplemental) { ret = _gnutls_recv_supplemental(session); @@ -3261,27 +3456,27 @@ static int handshake_server(gnutls_session_t session) IMED_RET("recv client supplemental", ret, 1); } /* RECV CERTIFICATE + KEYEXCHANGE + CERTIFICATE_VERIFY */ - /* fall through */ + FALLTHROUGH; case STATE11: /* receive the client certificate message */ if (session->internals.resumed == RESUME_FALSE) /* if we are not resuming */ ret = _gnutls_recv_client_certificate(session); STATE = STATE11; IMED_RET("recv client certificate", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE12: - ret = run_verify_callback(session, GNUTLS_SERVER); + ret = _gnutls_run_verify_callback(session, GNUTLS_SERVER); STATE = STATE12; if (ret < 0) return gnutls_assert_val(ret); - /* fall through */ + FALLTHROUGH; case STATE13: /* receive the client key exchange message */ if (session->internals.resumed == RESUME_FALSE) /* if we are not resuming */ ret = _gnutls_recv_client_kx_message(session); STATE = STATE13; IMED_RET("recv client kx", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE14: /* receive the client certificate verify message */ if (session->internals.resumed == RESUME_FALSE) /* if we are not resuming */ @@ -3290,7 +3485,7 @@ static int handshake_server(gnutls_session_t session) (session); STATE = STATE14; IMED_RET("recv client certificate verify", ret, 1); - /* fall through */ + FALLTHROUGH; case STATE15: STATE = STATE15; if (session->internals.resumed == RESUME_FALSE) { /* if we are not resuming */ @@ -3300,16 +3495,14 @@ static int handshake_server(gnutls_session_t session) ret = send_handshake_final(session, TRUE); IMED_RET("send handshake final 2", ret, 1); } - /* fall through */ + FALLTHROUGH; case STATE16: -#ifdef ENABLE_SESSION_TICKETS ret = _gnutls_send_new_session_ticket(session, AGAIN(STATE16)); STATE = STATE16; IMED_RET("send handshake new session ticket", ret, 0); -#endif - /* fall through */ + FALLTHROUGH; case STATE17: STATE = STATE17; if (session->internals.resumed == RESUME_FALSE) { /* if we are not resuming */ @@ -3318,7 +3511,7 @@ static int handshake_server(gnutls_session_t session) if (session->security_parameters.entity == GNUTLS_SERVER - && session->internals.ticket_sent == 0) { + && !(session->internals.hsk_flags & HSK_TLS12_TICKET_SENT)) { /* if no ticket, save session data */ _gnutls_server_register_current_session (session); @@ -3329,23 +3522,27 @@ static int handshake_server(gnutls_session_t session) } STATE = STATE0; - /* fall through */ + FALLTHROUGH; default: break; } + /* no lock of post_negotiation_lock is required here as this is not run + * after handshake */ + session->internals.initial_negotiation_completed = 1; + return _gnutls_check_id_for_change(session); } -int _gnutls_generate_session_id(uint8_t * session_id, uint8_t * len) +int _gnutls_generate_session_id(uint8_t * session_id, uint8_t *len) { int ret; - *len = GNUTLS_MAX_SESSION_ID_SIZE; + *len = GNUTLS_DEF_SESSION_ID_SIZE; ret = gnutls_rnd(GNUTLS_RND_NONCE, session_id, - GNUTLS_MAX_SESSION_ID_SIZE); + GNUTLS_DEF_SESSION_ID_SIZE); if (ret < 0) { gnutls_assert(); return ret; @@ -3354,30 +3551,6 @@ int _gnutls_generate_session_id(uint8_t * session_id, uint8_t * len) return 0; } -int -_gnutls_recv_hello_request(gnutls_session_t session, void *data, - uint32_t data_size) -{ - uint8_t type; - - if (session->security_parameters.entity == GNUTLS_SERVER) { - gnutls_assert(); - return GNUTLS_E_UNEXPECTED_PACKET; - } - if (data_size < 1) { - gnutls_assert(); - return GNUTLS_E_UNEXPECTED_PACKET_LENGTH; - } - type = ((uint8_t *) data)[0]; - if (type == GNUTLS_HANDSHAKE_HELLO_REQUEST) { - if (IS_DTLS(session)) - session->internals.dtls.hsk_read_seq++; - return GNUTLS_E_REHANDSHAKE; - } else { - gnutls_assert(); - return GNUTLS_E_UNEXPECTED_PACKET; - } -} /** * gnutls_handshake_set_max_packet_length: @@ -3444,15 +3617,11 @@ gnutls_handshake_get_last_out(gnutls_session_t session) } /* This returns the session hash as in draft-ietf-tls-session-hash-02. - * - * FIXME: It duplicates some of the actions in _gnutls_handshake_sign_crt_vrfy*. - * See whether they can be merged. */ int _gnutls_handshake_get_session_hash(gnutls_session_t session, gnutls_datum_t *shash) { const version_entry_st *ver = get_version(session); int ret; - const mac_entry_st *me; uint8_t concat[2*MAX_HASH_SIZE]; if (unlikely(ver == NULL)) @@ -3464,12 +3633,8 @@ int _gnutls_handshake_get_session_hash(gnutls_session_t session, gnutls_datum_t return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); } - me = mac_to_entry(session->security_parameters.prf_mac); - if (me == NULL) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - ret = - _gnutls_hash_fast((gnutls_digest_algorithm_t)me->id, + _gnutls_hash_fast((gnutls_digest_algorithm_t)session->security_parameters.prf->id, session->internals.handshake_hash_buffer. data, session->internals.handshake_hash_buffer_client_kx_len, @@ -3477,5 +3642,5 @@ int _gnutls_handshake_get_session_hash(gnutls_session_t session, gnutls_datum_t if (ret < 0) return gnutls_assert_val(ret); - return _gnutls_set_datum(shash, concat, me->output_size); + return _gnutls_set_datum(shash, concat, session->security_parameters.prf->output_size); } diff --git a/lib/handshake.h b/lib/handshake.h index 3e24c2aeb2..8d858f4ef2 100644 --- a/lib/handshake.h +++ b/lib/handshake.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2000-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,37 +17,92 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef HANDSHAKE_H -#define HANDSHAKE_H +#ifndef GNUTLS_LIB_HANDSHAKE_H +#define GNUTLS_LIB_HANDSHAKE_H #include "errors.h" +#include "record.h" +#include + +/* The following two macros are used in the handshake state machines; the first + * (IMED_RET) accounts for non-fatal errors and re-entry to current state, while + * the latter invalidates the handshake on any error (to be used by functions + * that are not expected to return non-fatal errors). + */ +#define IMED_RET( str, ret, allow_alert) do { \ + if (ret < 0) { \ + /* EAGAIN and INTERRUPTED are always non-fatal */ \ + if (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED) \ + return ret; \ + if (ret == GNUTLS_E_GOT_APPLICATION_DATA && session->internals.initial_negotiation_completed != 0) \ + return ret; \ + if (session->internals.handshake_suspicious_loops < 16) { \ + if (ret == GNUTLS_E_LARGE_PACKET) { \ + session->internals.handshake_suspicious_loops++; \ + return ret; \ + } \ + /* a warning alert might interrupt handshake */ \ + if (allow_alert != 0 && ret==GNUTLS_E_WARNING_ALERT_RECEIVED) { \ + session->internals.handshake_suspicious_loops++; \ + return ret; \ + } \ + } \ + gnutls_assert(); \ + /* do not allow non-fatal errors at this point */ \ + if (gnutls_error_is_fatal(ret) == 0) ret = gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); \ + session_invalidate(session); \ + _gnutls_handshake_hash_buffers_clear(session); \ + return ret; \ + } } while (0) + +#define IMED_RET_FATAL( str, ret, allow_alert) do { \ + if (ret < 0) { \ + gnutls_assert(); \ + if (gnutls_error_is_fatal(ret) == 0) \ + ret = gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); \ + session_invalidate(session); \ + _gnutls_handshake_hash_buffers_clear(session); \ + return ret; \ + } } while (0) int _gnutls_send_handshake(gnutls_session_t session, mbuffer_st * bufel, gnutls_handshake_description_t type); -int _gnutls_recv_hello_request(gnutls_session_t session, void *data, - uint32_t data_size); int _gnutls_recv_handshake(gnutls_session_t session, gnutls_handshake_description_t type, unsigned int optional, gnutls_buffer_st * buf); + +int +_gnutls_send_handshake2(gnutls_session_t session, mbuffer_st * bufel, + gnutls_handshake_description_t type, unsigned queue_only); + int _gnutls_generate_session_id(uint8_t * session_id, uint8_t * len); -int _gnutls_set_server_random(gnutls_session_t session, uint8_t * rnd); -int _gnutls_set_client_random(gnutls_session_t session, uint8_t * rnd); +int _gnutls_gen_server_random(gnutls_session_t session, int version); +void _gnutls_set_client_random(gnutls_session_t session, uint8_t * rnd); + +ssize_t _gnutls_send_change_cipher_spec(gnutls_session_t session, int again); + +int _gnutls_send_server_hello(gnutls_session_t session, int again); int _gnutls_find_pk_algos_in_ciphersuites(uint8_t * data, int datalen); int _gnutls_server_select_suite(gnutls_session_t session, uint8_t * data, - unsigned int datalen); + unsigned int datalen, unsigned int scsv_only); int _gnutls_negotiate_version(gnutls_session_t session, - gnutls_protocol_t adv_version, uint8_t major, uint8_t minor); + uint8_t major, uint8_t minor, + unsigned allow_tls13); int _gnutls_user_hello_func(gnutls_session_t session, - gnutls_protocol_t adv_version, uint8_t major, uint8_t minor); + uint8_t major, uint8_t minor); void _gnutls_handshake_hash_buffers_clear(gnutls_session_t session); +int _gnutls13_handshake_hash_buffers_synth(gnutls_session_t session, + const mac_entry_st *prf, + unsigned client); + #define STATE session->internals.handshake_state #define FINAL_STATE session->internals.handshake_final_state /* This returns true if we have got there @@ -56,24 +112,66 @@ void _gnutls_handshake_hash_buffers_clear(gnutls_session_t session); #define FAGAIN(target) (FINAL_STATE==target?1:0) #define AGAIN2(state, target) (state==target?1:0) +/* return the remaining time in ms */ inline static int handshake_remaining_time(gnutls_session_t session) { - if (session->internals.handshake_endtime) { + struct timespec *end = &session->internals.handshake_abs_timeout; + + if (end->tv_sec || end->tv_nsec) { struct timespec now; - gettime(&now); + gnutls_gettime(&now); - if (now.tv_sec < session->internals.handshake_endtime) - return (session->internals.handshake_endtime - - now.tv_sec) * 1000; - else + if (now.tv_sec < end->tv_sec || + (now.tv_sec == end->tv_sec && now.tv_nsec < end->tv_nsec)) + { + long long now_ms = now.tv_sec * 1000LL + now.tv_nsec / 1000000; + long long end_ms = end->tv_sec * 1000LL + end->tv_nsec / 1000000; + + return end_ms - now_ms; + } else return gnutls_assert_val(GNUTLS_E_TIMEDOUT); } return 0; } +/* Returns non-zero if the present credentials are sufficient for TLS1.3 negotiation. + * This is to be used in client side only. On server side, it is allowed to start + * without credentials. + */ +inline static unsigned have_creds_for_tls13(gnutls_session_t session) +{ + assert(session->security_parameters.entity == GNUTLS_CLIENT); + if (_gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE) != NULL || + _gnutls_get_cred(session, GNUTLS_CRD_PSK) != NULL) + return 1; + + return 0; +} + int _gnutls_handshake_get_session_hash(gnutls_session_t session, gnutls_datum_t *shash); int _gnutls_check_id_for_change(gnutls_session_t session); int _gnutls_check_if_cert_hash_is_same(gnutls_session_t session, gnutls_certificate_credentials_t cred); -#endif +#include "handshake-defs.h" + +int _gnutls_call_hook_func(gnutls_session_t session, + gnutls_handshake_description_t type, + int post, unsigned incoming, + const uint8_t *data, unsigned data_size); + +int _gnutls_run_verify_callback(gnutls_session_t session, unsigned int side); +int _gnutls_recv_finished(gnutls_session_t session); +int _gnutls_send_finished(gnutls_session_t session, int again); + +int _gnutls13_handshake_client(gnutls_session_t session); +int _gnutls13_handshake_server(gnutls_session_t session); + +int +_gnutls13_recv_hello_retry_request(gnutls_session_t session, + gnutls_buffer_st *buf); + +int +_gnutls13_recv_async_handshake(gnutls_session_t session); + +#endif /* GNUTLS_LIB_HANDSHAKE_H */ diff --git a/lib/hash_int.c b/lib/hash_int.c index 024b41a6bb..d326960e80 100644 --- a/lib/hash_int.c +++ b/lib/hash_int.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -54,6 +54,7 @@ int _gnutls_hash_init(digest_hd_st * dig, const mac_entry_st * e) dig->hash = cc->hash; dig->output = cc->output; dig->deinit = cc->deinit; + dig->copy = cc->copy; return 0; } @@ -67,6 +68,7 @@ int _gnutls_hash_init(digest_hd_st * dig, const mac_entry_st * e) dig->hash = _gnutls_digest_ops.hash; dig->output = _gnutls_digest_ops.output; dig->deinit = _gnutls_digest_ops.deinit; + dig->copy = _gnutls_digest_ops.copy; return 0; } @@ -78,6 +80,9 @@ int _gnutls_digest_exists(gnutls_digest_algorithm_t algo) { const gnutls_crypto_digest_st *cc = NULL; + if (is_mac_algo_forbidden(algo)) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); + cc = _gnutls_get_crypto_digest(algo); if (cc != NULL) return 1; @@ -85,6 +90,20 @@ int _gnutls_digest_exists(gnutls_digest_algorithm_t algo) return _gnutls_digest_ops.exists(algo); } +int _gnutls_hash_copy(const digest_hd_st * handle, digest_hd_st * dst) +{ + if (handle->copy == NULL) + return gnutls_assert_val(GNUTLS_E_HASH_FAILED); + + *dst = *handle; /* copy data */ + dst->handle = handle->copy(handle->handle); + + if (dst->handle == NULL) + return GNUTLS_E_HASH_FAILED; + + return 0; +} + void _gnutls_hash_deinit(digest_hd_st * handle, void *digest) { if (handle->handle == NULL) { @@ -178,6 +197,9 @@ int _gnutls_mac_exists(gnutls_mac_algorithm_t algo) if (algo == GNUTLS_MAC_AEAD) return 1; + if (is_mac_algo_forbidden(algo)) + return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM); + cc = _gnutls_get_crypto_mac(algo); if (cc != NULL) return 1; @@ -219,6 +241,7 @@ _gnutls_mac_init(mac_hd_st * mac, const mac_entry_st * e, mac->setnonce = cc->setnonce; mac->output = cc->output; mac->deinit = cc->deinit; + mac->copy = cc->copy; return 0; } @@ -233,6 +256,7 @@ _gnutls_mac_init(mac_hd_st * mac, const mac_entry_st * e, mac->setnonce = _gnutls_mac_ops.setnonce; mac->output = _gnutls_mac_ops.output; mac->deinit = _gnutls_mac_ops.deinit; + mac->copy = _gnutls_mac_ops.copy; if (_gnutls_mac_ops.setkey(mac->handle, key, keylen) < 0) { gnutls_assert(); @@ -243,6 +267,20 @@ _gnutls_mac_init(mac_hd_st * mac, const mac_entry_st * e, return 0; } +int _gnutls_mac_copy(const mac_hd_st * handle, mac_hd_st * dst) +{ + if (handle->copy == NULL) + return gnutls_assert_val(GNUTLS_E_HASH_FAILED); + + *dst = *handle; /* copy data */ + dst->handle = handle->copy(handle->handle); + + if (dst->handle == NULL) + return GNUTLS_E_HASH_FAILED; + + return 0; +} + void _gnutls_mac_deinit(mac_hd_st * handle, void *digest) { if (handle->handle == NULL) { @@ -467,38 +505,6 @@ ssl3_md5(int i, uint8_t * secret, int secret_len, return 0; } -int -_gnutls_ssl3_hash_md5(const void *first, int first_len, - const void *second, int second_len, - int ret_len, uint8_t * ret) -{ - uint8_t digest[MAX_HASH_SIZE]; - digest_hd_st td; - int block = MD5_DIGEST_OUTPUT; - int rc; - - rc = _gnutls_hash_init(&td, mac_to_entry(GNUTLS_MAC_MD5)); - if (rc < 0) { - gnutls_assert(); - return rc; - } - - _gnutls_hash(&td, first, first_len); - _gnutls_hash(&td, second, second_len); - - _gnutls_hash_deinit(&td, digest); - - if (ret_len > block) { - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - - memcpy(ret, digest, ret_len); - - return 0; - -} - int _gnutls_ssl3_generate_random(void *secret, int secret_len, void *rnd, int rnd_len, diff --git a/lib/hash_int.h b/lib/hash_int.h index 4d0244e91a..9f6059da33 100644 --- a/lib/hash_int.h +++ b/lib/hash_int.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_HASH_INT_H -#define GNUTLS_HASH_INT_H +#ifndef GNUTLS_LIB_HASH_INT_H +#define GNUTLS_LIB_HASH_INT_H #include "gnutls_int.h" #include @@ -41,12 +41,14 @@ typedef int (*nonce_func) (void *handle, const void *text, size_t size); typedef int (*output_func) (void *src_ctx, void *digest, size_t digestsize); typedef void (*hash_deinit_func) (void *handle); +typedef void *(*copy_func) (const void *handle); typedef struct { const mac_entry_st *e; hash_func hash; output_func output; hash_deinit_func deinit; + copy_func copy; const void *key; /* esoteric use by SSL3 MAC functions */ int keysize; @@ -62,6 +64,7 @@ typedef struct { nonce_func setnonce; output_func output; hash_deinit_func deinit; + copy_func copy; void *handle; } mac_hd_st; @@ -73,6 +76,8 @@ int _gnutls_mac_exists(gnutls_mac_algorithm_t algorithm); int _gnutls_mac_init(mac_hd_st *, const mac_entry_st * e, const void *key, int keylen); +int _gnutls_mac_copy(const mac_hd_st * handle, mac_hd_st * dst); + int _gnutls_mac_fast(gnutls_mac_algorithm_t algorithm, const void *key, int keylen, const void *text, size_t textlen, void *digest); @@ -122,6 +127,8 @@ _gnutls_hash(digest_hd_st * handle, const void *text, size_t textlen) void _gnutls_hash_deinit(digest_hd_st * handle, void *digest); +int _gnutls_hash_copy(const digest_hd_st * handle, digest_hd_st * dst); + int _gnutls_hash_fast(gnutls_digest_algorithm_t algorithm, const void *text, size_t textlen, void *digest); @@ -136,9 +143,6 @@ int _gnutls_mac_output_ssl3(digest_hd_st * handle, void *digest); int _gnutls_ssl3_generate_random(void *secret, int secret_len, void *rnd, int random_len, int bytes, uint8_t * ret); -int _gnutls_ssl3_hash_md5(const void *first, int first_len, - const void *second, int second_len, - int ret_len, uint8_t * ret); int _gnutls_mac_deinit_ssl3_handshake(digest_hd_st * handle, void *digest, uint8_t * key, uint32_t key_size); @@ -153,4 +157,4 @@ inline static int IS_SHA(gnutls_digest_algorithm_t algo) return 0; } -#endif /* GNUTLS_HASH_INT_H */ +#endif /* GNUTLS_LIB_HASH_INT_H */ diff --git a/lib/hello_ext.c b/lib/hello_ext.c new file mode 100644 index 0000000000..dbe73fdeb3 --- /dev/null +++ b/lib/hello_ext.c @@ -0,0 +1,1027 @@ +/* + * Copyright (C) 2001-2018 Free Software Foundation, Inc. + * Copyright (C) 2015-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos, Simon Josefsson + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* Functions that relate to the TLS hello extension parsing. + * Hello extensions are packets appended in the TLS hello packet, and + * allow for extra functionality. + */ + +#include "gnutls_int.h" +#include "hello_ext.h" +#include "errors.h" +#include "ext/max_record.h" +#include +#include +#include +#include +#include +#include +#include +#include "ext/supported_groups.h" +#include "ext/ec_point_formats.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "extv.h" +#include +#include +#include + +static void +unset_ext_data(gnutls_session_t session, const struct hello_ext_entry_st *, unsigned idx); + +static void unset_resumed_ext_data(gnutls_session_t session, const struct hello_ext_entry_st *, unsigned idx); + +static hello_ext_entry_st const *extfunc[MAX_EXT_TYPES+1] = { + [GNUTLS_EXTENSION_EXT_MASTER_SECRET] = &ext_mod_ext_master_secret, + [GNUTLS_EXTENSION_SUPPORTED_VERSIONS] = &ext_mod_supported_versions, + [GNUTLS_EXTENSION_POST_HANDSHAKE] = &ext_mod_post_handshake, + [GNUTLS_EXTENSION_ETM] = &ext_mod_etm, +#ifdef ENABLE_OCSP + [GNUTLS_EXTENSION_STATUS_REQUEST] = &ext_mod_status_request, +#endif + [GNUTLS_EXTENSION_SERVER_NAME] = &ext_mod_server_name, + [GNUTLS_EXTENSION_SAFE_RENEGOTIATION] = &ext_mod_sr, +#ifdef ENABLE_SRP + [GNUTLS_EXTENSION_SRP] = &ext_mod_srp, +#endif +#ifdef ENABLE_HEARTBEAT + [GNUTLS_EXTENSION_HEARTBEAT] = &ext_mod_heartbeat, +#endif + [GNUTLS_EXTENSION_SESSION_TICKET] = &ext_mod_session_ticket, + [GNUTLS_EXTENSION_CLIENT_CERT_TYPE] = &ext_mod_client_cert_type, + [GNUTLS_EXTENSION_SERVER_CERT_TYPE] = &ext_mod_server_cert_type, + [GNUTLS_EXTENSION_SUPPORTED_GROUPS] = &ext_mod_supported_groups, + [GNUTLS_EXTENSION_SUPPORTED_EC_POINT_FORMATS] = &ext_mod_supported_ec_point_formats, + [GNUTLS_EXTENSION_SIGNATURE_ALGORITHMS] = &ext_mod_sig, + [GNUTLS_EXTENSION_KEY_SHARE] = &ext_mod_key_share, + [GNUTLS_EXTENSION_COOKIE] = &ext_mod_cookie, + [GNUTLS_EXTENSION_EARLY_DATA] = &ext_mod_early_data, +#ifdef ENABLE_DTLS_SRTP + [GNUTLS_EXTENSION_SRTP] = &ext_mod_srtp, +#endif +#ifdef ENABLE_ALPN + [GNUTLS_EXTENSION_ALPN] = &ext_mod_alpn, +#endif + [GNUTLS_EXTENSION_RECORD_SIZE_LIMIT] = &ext_mod_record_size_limit, + [GNUTLS_EXTENSION_MAX_RECORD_SIZE] = &ext_mod_max_record_size, + [GNUTLS_EXTENSION_PSK_KE_MODES] = &ext_mod_psk_ke_modes, + [GNUTLS_EXTENSION_PRE_SHARED_KEY] = &ext_mod_pre_shared_key, + /* This must be the last extension registered. + */ + [GNUTLS_EXTENSION_DUMBFW] = &ext_mod_dumbfw, +}; + +static const hello_ext_entry_st * +gid_to_ext_entry(gnutls_session_t session, extensions_t id) +{ + unsigned i; + + assert(id < MAX_EXT_TYPES); + + for (i=0;iinternals.rexts_size;i++) { + if (session->internals.rexts[i].gid == id) { + return &session->internals.rexts[i]; + } + } + + return extfunc[id]; +} + +static const hello_ext_entry_st * +tls_id_to_ext_entry(gnutls_session_t session, uint16_t tls_id, gnutls_ext_parse_type_t parse_point) +{ + unsigned i; + const hello_ext_entry_st *e; + + for (i=0;iinternals.rexts_size;i++) { + if (session->internals.rexts[i].tls_id == tls_id) { + e = &session->internals.rexts[i]; + goto done; + } + } + + for (i = 0; i < MAX_EXT_TYPES; i++) { + if (!extfunc[i]) + continue; + + if (extfunc[i]->tls_id == tls_id) { + e = extfunc[i]; + goto done; + } + } + + return NULL; +done: + if (parse_point == GNUTLS_EXT_ANY || (IS_SERVER(session) && e->server_parse_point == parse_point) || + (!IS_SERVER(session) && e->client_parse_point == parse_point)) { + return e; + } else { + return NULL; + } +} + + +/** + * gnutls_ext_get_name: + * @ext: is a TLS extension numeric ID + * + * Convert a TLS extension numeric ID to a printable string. + * + * Returns: a pointer to a string that contains the name of the + * specified cipher, or %NULL. + **/ +const char *gnutls_ext_get_name(unsigned int ext) +{ + size_t i; + + for (i = 0; i < MAX_EXT_TYPES; i++) { + if (!extfunc[i]) + continue; + + if (extfunc[i]->tls_id == ext) + return extfunc[i]->name; + } + + return NULL; +} + +/* Returns %GNUTLS_EXTENSION_INVALID on error + */ +static unsigned tls_id_to_gid(gnutls_session_t session, unsigned tls_id) +{ + unsigned i; + + for (i=0; i < session->internals.rexts_size; i++) { + if (session->internals.rexts[i].tls_id == tls_id) + return session->internals.rexts[i].gid; + } + + for (i = 0; i < MAX_EXT_TYPES; i++) { + if (!extfunc[i]) + continue; + + if (extfunc[i]->tls_id == tls_id) + return extfunc[i]->gid; + } + + return GNUTLS_EXTENSION_INVALID; +} + +typedef struct hello_ext_ctx_st { + gnutls_session_t session; + gnutls_ext_flags_t msg; + gnutls_ext_parse_type_t parse_point; + const hello_ext_entry_st *ext; /* used during send */ + unsigned seen_pre_shared_key; +} hello_ext_ctx_st; + +static +int hello_ext_parse(void *_ctx, unsigned tls_id, const uint8_t *data, unsigned data_size) +{ + hello_ext_ctx_st *ctx = _ctx; + gnutls_session_t session = ctx->session; + const hello_ext_entry_st *ext; + int ret; + + if (tls_id == PRE_SHARED_KEY_TLS_ID) { + ctx->seen_pre_shared_key = 1; + } else if (ctx->seen_pre_shared_key && session->security_parameters.entity == GNUTLS_SERVER) { + /* the pre-shared key extension must always be the last one, + * draft-ietf-tls-tls13-28: 4.2.11 */ + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } + + ext = tls_id_to_ext_entry(session, tls_id, ctx->parse_point); + if (ext == NULL || ext->recv_func == NULL) { + goto ignore; + } + + /* we do not hard fail when extensions defined for TLS are used for + * DTLS and vice-versa. They may extend their role in the future. */ + if (IS_DTLS(session)) { + if (!(ext->validity & GNUTLS_EXT_FLAG_DTLS)) { + gnutls_assert(); + goto ignore; + } + } else { + if (!(ext->validity & GNUTLS_EXT_FLAG_TLS)) { + gnutls_assert(); + goto ignore; + } + } + + if (session->security_parameters.entity == GNUTLS_CLIENT) { + if (!(ext->validity & GNUTLS_EXT_FLAG_IGNORE_CLIENT_REQUEST) && + !_gnutls_hello_ext_is_present(session, ext->gid)) { + _gnutls_debug_log("EXT[%p]: Received unexpected extension '%s/%d'\n", session, + ext->name, (int)tls_id); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + } + } + + if ((ext->validity & ctx->msg) == 0) { + _gnutls_debug_log("EXT[%p]: Received unexpected extension (%s/%d) for '%s'\n", session, + ext->name, (int)tls_id, + ext_msg_validity_to_str(ctx->msg)); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + } + + if (session->security_parameters.entity == GNUTLS_SERVER) { + ret = _gnutls_hello_ext_save(session, ext->gid, 1); + if (ret == 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + } + + _gnutls_handshake_log + ("EXT[%p]: Parsing extension '%s/%d' (%d bytes)\n", + session, ext->name, (int)tls_id, + data_size); + + _gnutls_ext_set_msg(session, ctx->msg); + if ((ret = ext->recv_func(session, data, data_size)) < 0) { + gnutls_assert(); + return ret; + } + + return 0; + + ignore: + if (ext) { + _gnutls_handshake_log + ("EXT[%p]: Ignoring extension '%s/%d'\n", session, + ext->name, (int)tls_id); + } + return 0; +} + +int +_gnutls_parse_hello_extensions(gnutls_session_t session, + gnutls_ext_flags_t msg, + gnutls_ext_parse_type_t parse_point, + const uint8_t * data, int data_size) +{ + int ret; + hello_ext_ctx_st ctx; + + msg &= GNUTLS_EXT_FLAG_SET_ONLY_FLAGS_MASK; + + ctx.session = session; + ctx.msg = msg; + ctx.parse_point = parse_point; + ctx.seen_pre_shared_key = 0; + + ret = _gnutls_extv_parse(&ctx, hello_ext_parse, data, data_size); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + +static +int hello_ext_send(void *_ctx, gnutls_buffer_st *buf) +{ + hello_ext_ctx_st *ctx = _ctx; + int ret; + const hello_ext_entry_st *p = ctx->ext; + gnutls_session_t session = ctx->session; + int appended; + size_t size_prev; + + if (unlikely(p->send_func == NULL)) + return 0; + + if (ctx->parse_point != GNUTLS_EXT_ANY && + ((IS_SERVER(session) && p->server_parse_point != ctx->parse_point) || + (!IS_SERVER(session) && p->client_parse_point != ctx->parse_point))) { + return 0; + } + + if (IS_DTLS(session)) { + if (!(p->validity & GNUTLS_EXT_FLAG_DTLS)) { + gnutls_assert(); + goto skip; + } + } else { + if (!(p->validity & GNUTLS_EXT_FLAG_TLS)) { + gnutls_assert(); + goto skip; + } + } + + if ((ctx->msg & p->validity) == 0) { + goto skip; + } else { + _gnutls_handshake_log("EXT[%p]: Preparing extension (%s/%d) for '%s'\n", session, + p->name, (int)p->tls_id, + ext_msg_validity_to_str(ctx->msg)); + } + + /* ensure we don't send something twice (i.e, overridden extensions in + * client), and ensure we are sending only what we received in server. */ + ret = _gnutls_hello_ext_is_present(session, p->gid); + + if (session->security_parameters.entity == GNUTLS_SERVER) { + /* if client didn't advertise and the override flag is not present */ + if (!(p->validity & GNUTLS_EXT_FLAG_IGNORE_CLIENT_REQUEST) && ret == 0) + return 0; + } else { + if (ret != 0) /* already sent */ + return 0; + } + + + size_prev = buf->length; + + _gnutls_ext_set_msg(session, ctx->msg); + ret = p->send_func(session, buf); + if (ret < 0 && ret != GNUTLS_E_INT_RET_0) { + return gnutls_assert_val(ret); + } + + appended = buf->length - size_prev; + + /* add this extension to the extension list, to know which extensions + * to expect. + */ + if ((appended > 0 || ret == GNUTLS_E_INT_RET_0) && + session->security_parameters.entity == GNUTLS_CLIENT) { + + _gnutls_hello_ext_save(session, p->gid, 0); + } + + return ret; + + skip: + _gnutls_handshake_log("EXT[%p]: Not sending extension (%s/%d) for '%s'\n", session, + p->name, (int)p->tls_id, + ext_msg_validity_to_str(ctx->msg)); + return 0; +} + +int +_gnutls_gen_hello_extensions(gnutls_session_t session, + gnutls_buffer_st * buf, + gnutls_ext_flags_t msg, + gnutls_ext_parse_type_t parse_point) +{ + int pos, ret; + size_t i; + hello_ext_ctx_st ctx; + + msg &= GNUTLS_EXT_FLAG_SET_ONLY_FLAGS_MASK; + + ctx.session = session; + ctx.msg = msg; + ctx.parse_point = parse_point; + + ret = _gnutls_extv_append_init(buf); + if (ret < 0) + return gnutls_assert_val(ret); + + pos = ret; + _gnutls_ext_set_extensions_offset(session, pos); + + for (i=0; i < session->internals.rexts_size; i++) { + ctx.ext = &session->internals.rexts[i]; + ret = _gnutls_extv_append(buf, session->internals.rexts[i].tls_id, + &ctx, hello_ext_send); + if (ret < 0) + return gnutls_assert_val(ret); + + if (ret > 0) + _gnutls_handshake_log + ("EXT[%p]: Sending extension %s/%d (%d bytes)\n", + session, ctx.ext->name, (int)ctx.ext->tls_id, ret-4); + } + + /* hello_ext_send() ensures we don't send duplicates, in case + * of overridden extensions */ + for (i = 0; i < MAX_EXT_TYPES; i++) { + if (!extfunc[i]) + continue; + + ctx.ext = extfunc[i]; + ret = _gnutls_extv_append(buf, extfunc[i]->tls_id, + &ctx, hello_ext_send); + if (ret < 0) + return gnutls_assert_val(ret); + + if (ret > 0) + _gnutls_handshake_log + ("EXT[%p]: Sending extension %s/%d (%d bytes)\n", + session, ctx.ext->name, (int)ctx.ext->tls_id, ret-4); + } + + ret = _gnutls_extv_append_final(buf, pos, !(msg & GNUTLS_EXT_FLAG_EE)); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + +/* Global deinit and init of global extensions */ +int _gnutls_hello_ext_init(void) +{ + return GNUTLS_E_SUCCESS; +} + +void _gnutls_hello_ext_deinit(void) +{ + unsigned i; + + for (i = 0; i < MAX_EXT_TYPES; i++) { + if (!extfunc[i]) + continue; + + if (extfunc[i]->free_struct != 0) { + gnutls_free(((hello_ext_entry_st *)extfunc[i])->name); + gnutls_free(extfunc[i]); + } + } +} + +/* Packing of extension data (for use in resumption) */ +static int pack_extension(gnutls_session_t session, const hello_ext_entry_st *extp, + gnutls_buffer_st *packed) +{ + int ret; + int size_offset; + int cur_size; + gnutls_ext_priv_data_t data; + int rval = 0; + + ret = + _gnutls_hello_ext_get_priv(session, extp->gid, + &data); + if (ret >= 0 && extp->pack_func != NULL) { + BUFFER_APPEND_NUM(packed, extp->gid); + + size_offset = packed->length; + BUFFER_APPEND_NUM(packed, 0); + + cur_size = packed->length; + + ret = extp->pack_func(data, packed); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + rval = 1; + /* write the actual size */ + _gnutls_write_uint32(packed->length - cur_size, + packed->data + size_offset); + } + + return rval; +} + +int _gnutls_hello_ext_pack(gnutls_session_t session, gnutls_buffer_st *packed) +{ + unsigned int i; + int ret; + int total_exts_pos; + int n_exts = 0; + const struct hello_ext_entry_st *ext; + + total_exts_pos = packed->length; + BUFFER_APPEND_NUM(packed, 0); + + for (i = 0; i <= GNUTLS_EXTENSION_MAX_VALUE; i++) { + if (session->internals.used_exts & ((ext_track_t)1 << i)) { + + ext = gid_to_ext_entry(session, i); + if (ext == NULL) + continue; + + ret = pack_extension(session, ext, packed); + if (ret < 0) + return gnutls_assert_val(ret); + + if (ret > 0) + n_exts++; + } + } + + _gnutls_write_uint32(n_exts, packed->data + total_exts_pos); + + return 0; +} + +int _gnutls_ext_set_full_client_hello(gnutls_session_t session, + handshake_buffer_st *recv_buf) +{ + int ret; + gnutls_buffer_st *buf = &session->internals.full_client_hello; + + _gnutls_buffer_clear(buf); + + if ((ret = _gnutls_buffer_append_prefix(buf, 8, recv_buf->htype)) < 0) + return gnutls_assert_val(ret); + if ((ret = _gnutls_buffer_append_prefix(buf, 24, recv_buf->data.length)) < 0) + return gnutls_assert_val(ret); + if ((ret = _gnutls_buffer_append_data(buf, recv_buf->data.data, recv_buf->data.length)) < 0) + return gnutls_assert_val(ret); + + return 0; +} + +unsigned _gnutls_ext_get_full_client_hello(gnutls_session_t session, + gnutls_datum_t *d) +{ + gnutls_buffer_st *buf = &session->internals.full_client_hello; + + if (!buf->length) + return 0; + + d->data = buf->data; + d->size = buf->length; + + return 1; +} + +static void +_gnutls_ext_set_resumed_session_data(gnutls_session_t session, + extensions_t id, + gnutls_ext_priv_data_t data) +{ + const struct hello_ext_entry_st *ext; + + /* If this happens we need to increase the max */ + assert(id < MAX_EXT_TYPES); + + ext = gid_to_ext_entry(session, id); + assert(ext != NULL); + + if (session->internals.ext_data[id].resumed_set != 0) + unset_resumed_ext_data(session, ext, id); + + session->internals.ext_data[id].resumed_priv = data; + session->internals.ext_data[id].resumed_set = 1; + return; +} + +int _gnutls_hello_ext_unpack(gnutls_session_t session, gnutls_buffer_st * packed) +{ + int i, ret; + gnutls_ext_priv_data_t data; + int max_exts = 0; + extensions_t id; + int size_for_id, cur_pos; + const struct hello_ext_entry_st *ext; + + BUFFER_POP_NUM(packed, max_exts); + for (i = 0; i < max_exts; i++) { + BUFFER_POP_NUM(packed, id); + BUFFER_POP_NUM(packed, size_for_id); + + cur_pos = packed->length; + + ext = gid_to_ext_entry(session, id); + if (ext == NULL || ext->unpack_func == NULL) { + gnutls_assert(); + return GNUTLS_E_PARSING_ERROR; + } + + ret = ext->unpack_func(packed, &data); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + /* verify that unpack read the correct bytes */ + cur_pos = cur_pos - packed->length; + if (cur_pos /* read length */ != size_for_id) { + gnutls_assert(); + return GNUTLS_E_PARSING_ERROR; + } + + _gnutls_ext_set_resumed_session_data(session, id, data); + } + + return 0; + + error: + return ret; +} + +static void +unset_ext_data(gnutls_session_t session, const struct hello_ext_entry_st *ext, unsigned idx) +{ + if (session->internals.ext_data[idx].set == 0) + return; + + if (ext && ext->deinit_func && session->internals.ext_data[idx].priv != NULL) + ext->deinit_func(session->internals.ext_data[idx].priv); + session->internals.ext_data[idx].set = 0; +} + +void +_gnutls_hello_ext_unset_priv(gnutls_session_t session, + extensions_t id) +{ + const struct hello_ext_entry_st *ext; + + ext = gid_to_ext_entry(session, id); + if (ext) + unset_ext_data(session, ext, id); +} + +static void unset_resumed_ext_data(gnutls_session_t session, const struct hello_ext_entry_st *ext, unsigned idx) +{ + if (session->internals.ext_data[idx].resumed_set == 0) + return; + + if (ext && ext->deinit_func && session->internals.ext_data[idx].resumed_priv) { + ext->deinit_func(session->internals.ext_data[idx].resumed_priv); + } + session->internals.ext_data[idx].resumed_set = 0; +} + +/* Deinitializes all data that are associated with TLS extensions. + */ +void _gnutls_hello_ext_priv_deinit(gnutls_session_t session) +{ + unsigned int i; + const struct hello_ext_entry_st *ext; + + for (i = 0; i < MAX_EXT_TYPES; i++) { + if (!session->internals.ext_data[i].set && !session->internals.ext_data[i].resumed_set) + continue; + + ext = gid_to_ext_entry(session, i); + if (ext) { + unset_ext_data(session, ext, i); + unset_resumed_ext_data(session, ext, i); + } + } +} + +/* This function allows an extension to store data in the current session + * and retrieve them later on. We use functions instead of a pointer to a + * private pointer, to allow API additions by individual extensions. + */ +void +_gnutls_hello_ext_set_priv(gnutls_session_t session, extensions_t id, + gnutls_ext_priv_data_t data) +{ + const struct hello_ext_entry_st *ext; + + assert(id < MAX_EXT_TYPES); + + ext = gid_to_ext_entry(session, id); + assert(ext != NULL); + + if (session->internals.ext_data[id].set != 0) { + unset_ext_data(session, ext, id); + } + session->internals.ext_data[id].priv = data; + session->internals.ext_data[id].set = 1; + + return; +} + +int +_gnutls_hello_ext_get_priv(gnutls_session_t session, + extensions_t id, gnutls_ext_priv_data_t * data) +{ + if (session->internals.ext_data[id].set != 0) { + *data = + session->internals.ext_data[id].priv; + return 0; + } + + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; +} + +int +_gnutls_hello_ext_get_resumed_priv(gnutls_session_t session, + extensions_t id, + gnutls_ext_priv_data_t * data) +{ + if (session->internals.ext_data[id].resumed_set != 0) { + *data = + session->internals.ext_data[id].resumed_priv; + return 0; + } + + return GNUTLS_E_INVALID_REQUEST; +} + +/** + * gnutls_ext_register: + * @name: the name of the extension to register + * @id: the numeric TLS id of the extension + * @parse_point: the parse type of the extension (see gnutls_ext_parse_type_t) + * @recv_func: a function to receive the data + * @send_func: a function to send the data + * @deinit_func: a function deinitialize any private data + * @pack_func: a function which serializes the extension's private data (used on session packing for resumption) + * @unpack_func: a function which will deserialize the extension's private data + * + * This function will register a new extension type. The extension will remain + * registered until gnutls_global_deinit() is called. If the extension type + * is already registered then %GNUTLS_E_ALREADY_REGISTERED will be returned. + * + * Each registered extension can store temporary data into the gnutls_session_t + * structure using gnutls_ext_set_data(), and they can be retrieved using + * gnutls_ext_get_data(). + * + * Any extensions registered with this function are valid for the client + * and TLS1.2 server hello (or encrypted extensions for TLS1.3). + * + * This function is not thread safe. + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.4.0 + **/ +int +gnutls_ext_register(const char *name, int id, gnutls_ext_parse_type_t parse_point, + gnutls_ext_recv_func recv_func, gnutls_ext_send_func send_func, + gnutls_ext_deinit_data_func deinit_func, gnutls_ext_pack_func pack_func, + gnutls_ext_unpack_func unpack_func) +{ + hello_ext_entry_st *tmp_mod; + unsigned i; + unsigned gid = GNUTLS_EXTENSION_MAX+1; + + for (i = 0; i < MAX_EXT_TYPES; i++) { + if (!extfunc[i]) + continue; + + if (extfunc[i]->tls_id == id) + return gnutls_assert_val(GNUTLS_E_ALREADY_REGISTERED); + + if (extfunc[i]->gid >= gid) + gid = extfunc[i]->gid + 1; + } + + if (gid > GNUTLS_EXTENSION_MAX_VALUE || gid >= sizeof(extfunc)/sizeof(extfunc[0])) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + tmp_mod = gnutls_calloc(1, sizeof(*tmp_mod)); + if (tmp_mod == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + tmp_mod->name = gnutls_strdup(name); + tmp_mod->free_struct = 1; + tmp_mod->tls_id = id; + tmp_mod->gid = gid; + tmp_mod->client_parse_point = parse_point; + tmp_mod->server_parse_point = parse_point; + tmp_mod->recv_func = recv_func; + tmp_mod->send_func = send_func; + tmp_mod->deinit_func = deinit_func; + tmp_mod->pack_func = pack_func; + tmp_mod->unpack_func = unpack_func; + tmp_mod->validity = GNUTLS_EXT_FLAG_CLIENT_HELLO | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO | + GNUTLS_EXT_FLAG_EE | GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_TLS; + + assert(extfunc[gid] == NULL); + extfunc[gid] = tmp_mod; + + return 0; +} + +#define VALIDITY_MASK (GNUTLS_EXT_FLAG_CLIENT_HELLO | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO | \ + GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO | \ + GNUTLS_EXT_FLAG_EE | GNUTLS_EXT_FLAG_HRR) + +/** + * gnutls_session_ext_register: + * @session: the session for which this extension will be set + * @name: the name of the extension to register + * @id: the numeric id of the extension + * @parse_point: the parse type of the extension (see gnutls_ext_parse_type_t) + * @recv_func: a function to receive the data + * @send_func: a function to send the data + * @deinit_func: a function deinitialize any private data + * @pack_func: a function which serializes the extension's private data (used on session packing for resumption) + * @unpack_func: a function which will deserialize the extension's private data + * @flags: must be zero or flags from %gnutls_ext_flags_t + * + * This function will register a new extension type. The extension will be + * only usable within the registered session. If the extension type + * is already registered then %GNUTLS_E_ALREADY_REGISTERED will be returned, + * unless the flag %GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL is specified. The latter + * flag when specified can be used to override certain extensions introduced + * after 3.6.0. It is expected to be used by applications which handle + * custom extensions that are not currently supported in GnuTLS, but direct + * support for them may be added in the future. + * + * Each registered extension can store temporary data into the gnutls_session_t + * structure using gnutls_ext_set_data(), and they can be retrieved using + * gnutls_ext_get_data(). + * + * The validity of the extension registered can be given by the appropriate flags + * of %gnutls_ext_flags_t. If no validity is given, then the registered extension + * will be valid for client and TLS1.2 server hello (or encrypted extensions for TLS1.3). + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.5.5 + **/ +int +gnutls_session_ext_register(gnutls_session_t session, + const char *name, int id, gnutls_ext_parse_type_t parse_point, + gnutls_ext_recv_func recv_func, gnutls_ext_send_func send_func, + gnutls_ext_deinit_data_func deinit_func, gnutls_ext_pack_func pack_func, + gnutls_ext_unpack_func unpack_func, unsigned flags) +{ + hello_ext_entry_st tmp_mod; + hello_ext_entry_st *exts; + unsigned i; + unsigned gid = GNUTLS_EXTENSION_MAX+1; + + /* reject handling any extensions which modify the TLS handshake + * in any way, or are mapped to an exported API. */ + for (i = 0; i < GNUTLS_EXTENSION_MAX; i++) { + if (!extfunc[i]) + continue; + + if (extfunc[i]->tls_id == id) { + if (!(flags & GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL)) { + return gnutls_assert_val(GNUTLS_E_ALREADY_REGISTERED); + } else if (extfunc[i]->cannot_be_overriden) { + return gnutls_assert_val(GNUTLS_E_ALREADY_REGISTERED); + } + break; + } + + if (extfunc[i]->gid >= gid) + gid = extfunc[i]->gid + 1; + } + + for (i=0;iinternals.rexts_size;i++) { + if (session->internals.rexts[i].tls_id == id) { + return gnutls_assert_val(GNUTLS_E_ALREADY_REGISTERED); + } + + if (session->internals.rexts[i].gid >= gid) + gid = session->internals.rexts[i].gid + 1; + } + + if (gid > GNUTLS_EXTENSION_MAX_VALUE) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + memset(&tmp_mod, 0, sizeof(hello_ext_entry_st)); + tmp_mod.name = gnutls_strdup(name); + tmp_mod.free_struct = 1; + tmp_mod.tls_id = id; + tmp_mod.gid = gid; + tmp_mod.client_parse_point = parse_point; + tmp_mod.server_parse_point = parse_point; + tmp_mod.recv_func = recv_func; + tmp_mod.send_func = send_func; + tmp_mod.deinit_func = deinit_func; + tmp_mod.pack_func = pack_func; + tmp_mod.unpack_func = unpack_func; + tmp_mod.validity = flags; + + if ((tmp_mod.validity & VALIDITY_MASK) == 0) { + tmp_mod.validity = GNUTLS_EXT_FLAG_CLIENT_HELLO | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO | + GNUTLS_EXT_FLAG_EE; + } + + if ((tmp_mod.validity & (GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_TLS)) == 0) { + if (IS_DTLS(session)) + tmp_mod.validity |= GNUTLS_EXT_FLAG_DTLS; + else + tmp_mod.validity |= GNUTLS_EXT_FLAG_TLS; + } + + exts = gnutls_realloc(session->internals.rexts, (session->internals.rexts_size+1)*sizeof(*exts)); + if (exts == NULL) { + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + + session->internals.rexts = exts; + + memcpy(&session->internals.rexts[session->internals.rexts_size], &tmp_mod, sizeof(hello_ext_entry_st)); + session->internals.rexts_size++; + + return 0; +} + +/** + * gnutls_ext_set_data: + * @session: a #gnutls_session_t opaque pointer + * @tls_id: the numeric id of the extension + * @data: the private data to set + * + * This function allows an extension handler to store data in the current session + * and retrieve them later on. The set data will be deallocated using + * the gnutls_ext_deinit_data_func. + * + * Since: 3.4.0 + **/ +void +gnutls_ext_set_data(gnutls_session_t session, unsigned tls_id, + gnutls_ext_priv_data_t data) +{ + unsigned id = tls_id_to_gid(session, tls_id); + if (id == GNUTLS_EXTENSION_INVALID) + return; + + _gnutls_hello_ext_set_priv(session, id, data); +} + +/** + * gnutls_ext_get_data: + * @session: a #gnutls_session_t opaque pointer + * @tls_id: the numeric id of the extension + * @data: a pointer to the private data to retrieve + * + * This function retrieves any data previously stored with gnutls_ext_set_data(). + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.4.0 + **/ +int +gnutls_ext_get_data(gnutls_session_t session, + unsigned tls_id, gnutls_ext_priv_data_t *data) +{ + unsigned id = tls_id_to_gid(session, tls_id); + if (id == GNUTLS_EXTENSION_INVALID) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + return _gnutls_hello_ext_get_priv(session, id, data); +} + +/** + * gnutls_ext_get_current_msg: + * @session: a #gnutls_session_t opaque pointer + * + * This function allows an extension handler to obtain the message + * this extension is being called from. The returned value is a single + * entry of the %gnutls_ext_flags_t enumeration. That is, if an + * extension was registered with the %GNUTLS_EXT_FLAG_HRR and + * %GNUTLS_EXT_FLAG_EE flags, the value when called during parsing of the + * encrypted extensions message will be %GNUTLS_EXT_FLAG_EE. + * + * If not called under an extension handler, its value is undefined. + * + * Since: 3.6.3 + **/ +unsigned gnutls_ext_get_current_msg(gnutls_session_t session) +{ + return _gnutls_ext_get_msg(session); +} + +/** + * gnutls_ext_get_name2: + * @session: a #gnutls_session_t opaque pointer + * @tls_id: is a TLS extension numeric ID + * @parse_point: the parse type of the extension + * + * Convert a TLS extension numeric ID to a printable string. + * + * Returns: a pointer to a string that contains the name of the + * specified cipher, or %NULL. + **/ +const char *gnutls_ext_get_name2(gnutls_session_t session, unsigned int tls_id, + gnutls_ext_parse_type_t parse_point) +{ + const struct hello_ext_entry_st *ext; + + ext = tls_id_to_ext_entry(session, tls_id, parse_point); + if (ext) + return ext->name; + + return NULL; +} + diff --git a/lib/hello_ext.h b/lib/hello_ext.h new file mode 100644 index 0000000000..a7b921875d --- /dev/null +++ b/lib/hello_ext.h @@ -0,0 +1,198 @@ +/* + * Copyright (C) 2000-2012 Free Software Foundation, Inc. + * Copyright (C) 2015-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_HELLO_EXT_H +#define GNUTLS_LIB_HELLO_EXT_H + +#include "gnutls_int.h" +#include +#include "str.h" + +/* Functions for hello extension parsing. + */ +int _gnutls_parse_hello_extensions(gnutls_session_t session, + gnutls_ext_flags_t msg, + gnutls_ext_parse_type_t parse_type, + const uint8_t * data, int data_size); +int _gnutls_gen_hello_extensions(gnutls_session_t session, + gnutls_buffer_st * extdata, + gnutls_ext_flags_t msg, + gnutls_ext_parse_type_t); +int _gnutls_hello_ext_init(void); +void _gnutls_hello_ext_deinit(void); + +void _gnutls_hello_ext_priv_deinit(gnutls_session_t session); + +/* functions to be used by extensions internally + */ +void _gnutls_hello_ext_unset_priv(gnutls_session_t session, + extensions_t ext); +void _gnutls_hello_ext_set_priv(gnutls_session_t session, extensions_t ext, + gnutls_ext_priv_data_t); +int _gnutls_hello_ext_get_priv(gnutls_session_t session, extensions_t ext, + gnutls_ext_priv_data_t *); +int _gnutls_hello_ext_get_resumed_priv(gnutls_session_t session, + extensions_t ext, + gnutls_ext_priv_data_t * data); + +#define GNUTLS_EXT_FLAG_MSG_MASK (GNUTLS_EXT_FLAG_CLIENT_HELLO | GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO| \ + GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO | GNUTLS_EXT_FLAG_EE | GNUTLS_EXT_FLAG_HRR) + +/* these flags can only be set in the extensions, but cannot be requested; + * they are handled internally by the hello parsing/generating functions. */ +#define GNUTLS_EXT_FLAG_SET_ONLY_FLAGS_MASK ~(GNUTLS_EXT_FLAG_DTLS | GNUTLS_EXT_FLAG_TLS) + +/* obtain the message this extension was received at */ +inline static gnutls_ext_flags_t _gnutls_ext_get_msg(gnutls_session_t session) +{ + return session->internals.ext_msg & GNUTLS_EXT_FLAG_MSG_MASK; +} + +inline static void _gnutls_ext_set_msg(gnutls_session_t session, gnutls_ext_flags_t msg) +{ + session->internals.ext_msg = msg; +} + +inline static void _gnutls_ext_set_extensions_offset(gnutls_session_t session, + int offset) +{ + session->internals.extensions_offset = offset; +} + +inline static int _gnutls_ext_get_extensions_offset(gnutls_session_t session) +{ + return session->internals.extensions_offset; +} + +int _gnutls_ext_set_full_client_hello(gnutls_session_t session, + handshake_buffer_st *recv_buf); +unsigned _gnutls_ext_get_full_client_hello(gnutls_session_t session, + gnutls_datum_t *datum); + +/* for session packing */ +int _gnutls_hello_ext_pack(gnutls_session_t session, gnutls_buffer_st * packed); +int _gnutls_hello_ext_unpack(gnutls_session_t session, + gnutls_buffer_st * packed); + +inline static const char *ext_msg_validity_to_str(gnutls_ext_flags_t msg) +{ + msg &= GNUTLS_EXT_FLAG_MSG_MASK; + + switch(msg) { + case GNUTLS_EXT_FLAG_CLIENT_HELLO: + return "client hello"; + case GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO: + return "TLS 1.2 server hello"; + case GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO: + return "TLS 1.3 server hello"; + case GNUTLS_EXT_FLAG_EE: + return "encrypted extensions"; + case GNUTLS_EXT_FLAG_HRR: + return "hello retry request"; + default: + return "(unknown)"; + } +} + +typedef struct hello_ext_entry_st { + const char *name; /* const overridden when free_struct is set */ + unsigned free_struct; + + uint16_t tls_id; + unsigned gid; /* gnutls internal ID */ + + gnutls_ext_parse_type_t client_parse_point; + gnutls_ext_parse_type_t server_parse_point; + unsigned validity; /* multiple items of gnutls_ext_flags_t */ + + /* this function must return 0 when Not Applicable + * size of extension data if ok + * < 0 on other error. + */ + gnutls_ext_recv_func recv_func; + + /* this function must return 0 when Not Applicable + * size of extension data if ok + * GNUTLS_E_INT_RET_0 if extension data size is zero + * < 0 on other error. + */ + gnutls_ext_send_func send_func; + + gnutls_ext_deinit_data_func deinit_func; /* this will be called to deinitialize + * internal data + */ + gnutls_ext_pack_func pack_func; /* packs internal data to machine independent format */ + gnutls_ext_unpack_func unpack_func; /* unpacks internal data */ + + /* non-zero if that extension cannot be overridden by the applications. + * That should be set to extensions which allocate data early, e.g., on + * gnutls_init(), or modify the TLS protocol in a way that the application + * cannot control. */ + unsigned cannot_be_overriden; +} hello_ext_entry_st; + +/* Checks if the extension @id provided has been requested + * by us (in client side).In server side it checks whether this + * extension was advertized by the client. + * + * It returns non-zero for true, otherwise zero. + */ +inline static unsigned +_gnutls_hello_ext_is_present(gnutls_session_t session, extensions_t id) +{ + if (session->internals.used_exts & ((ext_track_t)1 << id)) + return 1; + + return 0; +} + +/* Adds the extension we want to send in the extensions list. + * This list is used in client side to check whether the (later) received + * extensions are the ones we requested. + * + * In server side, this list is used to ensure we don't send + * extensions that we didn't receive a corresponding value. + * + * Returns zero if failed, non-zero on success. + */ +inline static +unsigned _gnutls_hello_ext_save(gnutls_session_t session, + extensions_t id, + unsigned check_dup) +{ + if (check_dup && _gnutls_hello_ext_is_present(session, id)) { + return 0; + } + + session->internals.used_exts |= ((ext_track_t)1 << id); + + return 1; +} + +inline static +void _gnutls_hello_ext_save_sr(gnutls_session_t session) +{ + _gnutls_hello_ext_save(session, GNUTLS_EXTENSION_SAFE_RENEGOTIATION, 1); +} + +#endif /* GNUTLS_LIB_HELLO_EXT_H */ diff --git a/lib/hello_ext_lib.c b/lib/hello_ext_lib.c new file mode 100644 index 0000000000..4f9b74d7f2 --- /dev/null +++ b/lib/hello_ext_lib.c @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* Internal API functions to be used by extension handlers. + */ + +#include "gnutls_int.h" +#include "hello_ext.h" +#include "hello_ext_lib.h" + +void _gnutls_hello_ext_default_deinit(gnutls_ext_priv_data_t priv) +{ + gnutls_free(priv); +} + +/* When this is used, the deinitialization function must be set to default: + * _gnutls_hello_ext_default_deinit. + * + * This also prevents and errors on duplicate entries. + */ +int +_gnutls_hello_ext_set_datum(gnutls_session_t session, + extensions_t id, const gnutls_datum_t *data) +{ + gnutls_ext_priv_data_t epriv; + + if (_gnutls_hello_ext_get_priv(session, id, &epriv) >= 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + if (data->size >= UINT16_MAX) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + epriv = gnutls_malloc(data->size+2); + if (epriv == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + _gnutls_write_uint16(data->size, epriv); + memcpy(((uint8_t*)epriv)+2, data->data, data->size); + + _gnutls_hello_ext_set_priv(session, id, epriv); + + return 0; +} + +int +_gnutls_hello_ext_get_datum(gnutls_session_t session, + extensions_t id, gnutls_datum_t *data /* constant contents */) +{ + gnutls_ext_priv_data_t epriv; + int ret; + + ret = _gnutls_hello_ext_get_priv(session, id, &epriv); + if (ret < 0 || epriv == NULL) + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + + data->size = _gnutls_read_uint16(epriv); + data->data = ((uint8_t*)epriv)+2; + + return 0; +} + +int +_gnutls_hello_ext_get_resumed_datum(gnutls_session_t session, + extensions_t id, gnutls_datum_t *data /* constant contents */) +{ + gnutls_ext_priv_data_t epriv; + int ret; + + ret = _gnutls_hello_ext_get_resumed_priv(session, id, &epriv); + if (ret < 0 || epriv == NULL) + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + + data->size = _gnutls_read_uint16(epriv); + data->data = ((uint8_t*)epriv)+2; + + return 0; +} + +int +_gnutls_hello_ext_default_pack(gnutls_ext_priv_data_t epriv, gnutls_buffer_st *ps) +{ + size_t size; + + size = _gnutls_read_uint16(epriv); + + return _gnutls_buffer_append_data(ps, epriv, size+2); +} + +int +_gnutls_hello_ext_default_unpack(gnutls_buffer_st *ps, gnutls_ext_priv_data_t *epriv) +{ + gnutls_datum_t data; + uint8_t *store; + int ret; + + ret = _gnutls_buffer_pop_datum_prefix16(ps, &data); + if (ret < 0) + return gnutls_assert_val(ret); + + store = gnutls_calloc(1, data.size+2); + if (store == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + _gnutls_write_uint16(data.size, store); + memcpy(store+2, data.data, data.size); + + *epriv = store; + return 0; +} diff --git a/lib/hello_ext_lib.h b/lib/hello_ext_lib.h new file mode 100644 index 0000000000..c1a79ec7e7 --- /dev/null +++ b/lib/hello_ext_lib.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_HELLO_EXT_LIB_H +#define GNUTLS_LIB_HELLO_EXT_LIB_H + +#include +#include "hello_ext.h" + +/* Functions to use at the send() or recv() extension function to temporarily + * store and retrieve data related to the extension. + */ +int +_gnutls_hello_ext_set_datum(gnutls_session_t session, + extensions_t id, const gnutls_datum_t *data); +int +_gnutls_hello_ext_get_datum(gnutls_session_t session, + extensions_t id, gnutls_datum_t *data /* constant contents */); + +int +_gnutls_hello_ext_get_resumed_datum(gnutls_session_t session, + extensions_t id, gnutls_datum_t *data /* constant contents */); + +/* clear up any set data for the extension */ +#if 0 /* defined in hello_ext.h */ +void +_gnutls_hello_ext_unset_priv(gnutls_session_t session, + extensions_t id); +#endif + +/* Function that will deinitialize the temporal data. Must be set + * as the deinit_func in the hello_ext_entry_st if the functions above + * are used. + */ +void _gnutls_hello_ext_default_deinit(gnutls_ext_priv_data_t priv); + +/* Functions to pack and unpack data if they need to be stored at + * session resumption data. Must be set as the pack_func and unpack_func + * of hello_ext_entry_st if the set and get functions above are used, + * and data must be accessible on resumed sessions. + */ +int +_gnutls_hello_ext_default_pack(gnutls_ext_priv_data_t epriv, gnutls_buffer_st *ps); + +int +_gnutls_hello_ext_default_unpack(gnutls_buffer_st *ps, gnutls_ext_priv_data_t *epriv); + +#endif /* GNUTLS_LIB_HELLO_EXT_LIB_H */ diff --git a/lib/includes/Makefile.am b/lib/includes/Makefile.am index 6319ddbc5a..42bec1c35e 100644 --- a/lib/includes/Makefile.am +++ b/lib/includes/Makefile.am @@ -16,7 +16,7 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see nobase_include_HEADERS = gnutls/x509.h gnutls/pkcs12.h gnutls/compat.h \ gnutls/openpgp.h gnutls/crypto.h gnutls/pkcs11.h \ diff --git a/lib/includes/gnutls/abstract.h b/lib/includes/gnutls/abstract.h index e4c3efd42c..386ae3e49f 100644 --- a/lib/includes/gnutls/abstract.h +++ b/lib/includes/gnutls/abstract.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2010-2012 Free Software Foundation, Inc. + * Copyright (C) 2015-2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -51,27 +52,79 @@ typedef enum gnutls_pubkey_flags { GNUTLS_PUBKEY_GET_OPENPGP_FINGERPRINT = 1 << 3 } gnutls_pubkey_flags_t; +/** + * gnutls_abstract_export_flags: + * @GNUTLS_EXPORT_FLAG_NO_LZ: do not prepend a leading zero to exported values + * + * Enumeration of different certificate import flags. + */ +typedef enum gnutls_abstract_export_flags { + GNUTLS_EXPORT_FLAG_NO_LZ = 1 +} gnutls_abstract_export_flags_t; + #define GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA GNUTLS_VERIFY_USE_TLS1_RSA typedef int (*gnutls_privkey_sign_func) (gnutls_privkey_t key, void *userdata, - const gnutls_datum_t * - raw_data, + const gnutls_datum_t *raw_data, gnutls_datum_t * signature); + + typedef int (*gnutls_privkey_decrypt_func) (gnutls_privkey_t key, void *userdata, - const gnutls_datum_t * - ciphertext, + const gnutls_datum_t *ciphertext, gnutls_datum_t * plaintext); +typedef int (*gnutls_privkey_decrypt_func2) (gnutls_privkey_t key, + void *userdata, + const gnutls_datum_t *ciphertext, + unsigned char * plaintext, + size_t plaintext_size); + +/* to be called to sign pre-hashed data. The input will be + * the output of the hash (such as SHA256) corresponding to + * the signature algorithm. The algorithm GNUTLS_SIGN_RSA_RAW + * will be provided when RSA PKCS#1 DigestInfo structure is provided + * as data (when this is called from a TLS 1.0 or 1.1 session). + */ +typedef int (*gnutls_privkey_sign_hash_func) (gnutls_privkey_t key, + gnutls_sign_algorithm_t algo, + void *userdata, + unsigned int flags, + const gnutls_datum_t *hash, + gnutls_datum_t * signature); + +/* to be called to sign data. The input data will be + * the data to be signed (and hashed), with the provided + * signature algorithm. This function is used for algorithms + * like ed25519 which cannot take pre-hashed data as input. + */ +typedef int (*gnutls_privkey_sign_data_func) (gnutls_privkey_t key, + gnutls_sign_algorithm_t algo, + void *userdata, + unsigned int flags, + const gnutls_datum_t *data, + gnutls_datum_t * signature); + typedef void (*gnutls_privkey_deinit_func) (gnutls_privkey_t key, void *userdata); + +#define GNUTLS_SIGN_ALGO_TO_FLAGS(sig) (unsigned int)((sig)<<20) +#define GNUTLS_FLAGS_TO_SIGN_ALGO(flags) (unsigned int)((flags)>>20) + /* Should return the public key algorithm (gnutls_pk_algorithm_t) */ #define GNUTLS_PRIVKEY_INFO_PK_ALGO 1 - /* Should return the preferred signature algorithm (gnutls_sign_algorithm_t) or 0. */ #define GNUTLS_PRIVKEY_INFO_SIGN_ALGO (1<<1) +/* Should return true (1) or false (0) if the provided sign algorithm + * (obtained with GNUTLS_FLAGS_TO_SIGN_ALGO) is supported. + */ +#define GNUTLS_PRIVKEY_INFO_HAVE_SIGN_ALGO (1<<2) +/* Should return the number of bits of the public key algorithm (required for RSA-PSS) + * It is the value that should be returned by gnutls_pubkey_get_pk_algorithm() */ +#define GNUTLS_PRIVKEY_INFO_PK_ALGO_BITS (1<<3) + /* returns information on the public key associated with userdata */ typedef int (*gnutls_privkey_info_func) (gnutls_privkey_t key, unsigned int flags, void *userdata); @@ -87,6 +140,16 @@ void gnutls_pubkey_set_pin_function(gnutls_pubkey_t key, int gnutls_pubkey_get_pk_algorithm(gnutls_pubkey_t key, unsigned int *bits); +int +gnutls_pubkey_set_spki(gnutls_pubkey_t key, + const gnutls_x509_spki_t spki, + unsigned int flags); + +int +gnutls_pubkey_get_spki(gnutls_pubkey_t key, + const gnutls_x509_spki_t spki, + unsigned int flags); + int gnutls_pubkey_import_x509(gnutls_pubkey_t key, gnutls_x509_crt_t crt, unsigned int flags); int gnutls_pubkey_import_x509_crq(gnutls_pubkey_t key, @@ -138,12 +201,34 @@ int gnutls_pubkey_get_preferred_hash_algorithm(gnutls_pubkey_t key, int gnutls_pubkey_export_rsa_raw(gnutls_pubkey_t key, gnutls_datum_t * m, gnutls_datum_t * e); +int gnutls_pubkey_export_rsa_raw2(gnutls_pubkey_t key, + gnutls_datum_t * m, gnutls_datum_t * e, + unsigned flags); + #define gnutls_pubkey_get_pk_dsa_raw gnutls_pubkey_export_dsa_raw int gnutls_pubkey_export_dsa_raw(gnutls_pubkey_t key, gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * g, gnutls_datum_t * y); +int gnutls_pubkey_export_dsa_raw2(gnutls_pubkey_t key, + gnutls_datum_t * p, + gnutls_datum_t * q, + gnutls_datum_t * g, gnutls_datum_t * y, + unsigned flags); + +int gnutls_pubkey_export_ecc_raw2(gnutls_pubkey_t key, + gnutls_ecc_curve_t * curve, + gnutls_datum_t * x, gnutls_datum_t * y, + unsigned flags); + +int gnutls_pubkey_export_gost_raw2(gnutls_pubkey_t key, + gnutls_ecc_curve_t * curve, + gnutls_digest_algorithm_t * digest, + gnutls_gost_paramset_t * paramset, + gnutls_datum_t * x, gnutls_datum_t * y, + unsigned int flags); + #define gnutls_pubkey_get_pk_ecc_raw gnutls_pubkey_export_ecc_raw int gnutls_pubkey_export_ecc_raw(gnutls_pubkey_t key, gnutls_ecc_curve_t * curve, @@ -204,6 +289,14 @@ gnutls_pubkey_import_ecc_raw(gnutls_pubkey_t key, const gnutls_datum_t * x, const gnutls_datum_t * y); +int +gnutls_pubkey_import_gost_raw(gnutls_pubkey_t key, + gnutls_ecc_curve_t curve, + gnutls_digest_algorithm_t digest, + gnutls_gost_paramset_t paramset, + const gnutls_datum_t * x, + const gnutls_datum_t * y); + int gnutls_pubkey_encrypt_data(gnutls_pubkey_t key, unsigned int flags, @@ -249,6 +342,16 @@ gnutls_privkey_generate2(gnutls_privkey_t pkey, gnutls_pk_algorithm_t algo, unsigned int bits, unsigned int flags, const gnutls_keygen_data_st *data, unsigned data_size); +int +gnutls_privkey_set_spki(gnutls_privkey_t key, + const gnutls_x509_spki_t spki, + unsigned int flags); + +int +gnutls_privkey_get_spki(gnutls_privkey_t key, + const gnutls_x509_spki_t spki, + unsigned int flags); + int gnutls_privkey_verify_seed(gnutls_privkey_t key, gnutls_digest_algorithm_t, const void *seed, size_t seed_size); int gnutls_privkey_get_seed(gnutls_privkey_t key, gnutls_digest_algorithm_t*, void *seed, size_t *seed_size); @@ -267,12 +370,21 @@ int gnutls_privkey_status(gnutls_privkey_t key); /** * gnutls_privkey_flags: * @GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA: Make an RSA signature on the hashed data as in the TLS protocol. + * @GNUTLS_PRIVKEY_SIGN_FLAG_RSA_PSS: Make an RSA signature on the hashed data with the PSS padding. + * @GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE: Make a signature on the hashed data with reproducible parameters. + * For RSA-PSS, that means to use empty salt instead of random value. To + * verify a signature created using this flag, the corresponding SPKI needs + * to be set on the public key. Use gnutls_pubkey_set_spki() for that. + * For ECDSA/DSA, it uses the deterministic construction of random parameter + * according to RFC 6979. Note that this only supports the NIST curves and DSA + * subgroup bits up to 512. * @GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE: When importing a private key, automatically * release it when the structure it was imported is released. * @GNUTLS_PRIVKEY_IMPORT_COPY: Copy required values during import. * @GNUTLS_PRIVKEY_DISABLE_CALLBACKS: The following flag disables call to PIN callbacks etc. * Only relevant to TPM keys. * @GNUTLS_PRIVKEY_FLAG_PROVABLE: When generating a key involving prime numbers, use provable primes; a seed may be required. + * @GNUTLS_PRIVKEY_FLAG_CA: The generated private key is going to be used as a CA (relevant for RSA-PSS keys). * @GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT: Keys generated or imported as provable require an extended format which cannot be read by previous versions * of gnutls or other applications. By setting this flag the key will be exported in a backwards compatible way, * even if the information about the seed used will be lost. @@ -285,7 +397,10 @@ typedef enum gnutls_privkey_flags { GNUTLS_PRIVKEY_DISABLE_CALLBACKS = 1 << 2, GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA = 1 << 4, GNUTLS_PRIVKEY_FLAG_PROVABLE = 1 << 5, - GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT = 1 << 6 + GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT = 1 << 6, + GNUTLS_PRIVKEY_SIGN_FLAG_RSA_PSS = 1 << 7, + GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE = 1 << 8, + GNUTLS_PRIVKEY_FLAG_CA = 1 << 9 } gnutls_privkey_flags_t; int gnutls_privkey_import_pkcs11(gnutls_privkey_t pkey, @@ -371,6 +486,16 @@ gnutls_privkey_import_ext3(gnutls_privkey_t pkey, gnutls_privkey_info_func info_func, unsigned int flags); +int +gnutls_privkey_import_ext4(gnutls_privkey_t pkey, + void *userdata, + gnutls_privkey_sign_data_func sign_data_func, + gnutls_privkey_sign_hash_func sign_hash_func, + gnutls_privkey_decrypt_func decrypt_func, + gnutls_privkey_deinit_func deinit_func, + gnutls_privkey_info_func info_func, + unsigned int flags); + int gnutls_privkey_import_dsa_raw(gnutls_privkey_t key, const gnutls_datum_t * p, const gnutls_datum_t * q, @@ -393,6 +518,14 @@ int gnutls_privkey_import_ecc_raw(gnutls_privkey_t key, const gnutls_datum_t * y, const gnutls_datum_t * k); +int gnutls_privkey_import_gost_raw(gnutls_privkey_t key, + gnutls_ecc_curve_t curve, + gnutls_digest_algorithm_t digest, + gnutls_gost_paramset_t paramset, + const gnutls_datum_t * x, + const gnutls_datum_t * y, + const gnutls_datum_t * k); + int gnutls_privkey_sign_data(gnutls_privkey_t signer, gnutls_digest_algorithm_t hash, @@ -400,6 +533,12 @@ int gnutls_privkey_sign_data(gnutls_privkey_t signer, const gnutls_datum_t * data, gnutls_datum_t * signature); +int gnutls_privkey_sign_data2(gnutls_privkey_t signer, + gnutls_sign_algorithm_t algo, + unsigned int flags, + const gnutls_datum_t * data, + gnutls_datum_t * signature); + #define gnutls_privkey_sign_raw_data(key, flags, data, sig) \ gnutls_privkey_sign_hash ( key, 0, GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, data, sig) @@ -409,12 +548,23 @@ int gnutls_privkey_sign_hash(gnutls_privkey_t signer, const gnutls_datum_t * hash_data, gnutls_datum_t * signature); +int gnutls_privkey_sign_hash2(gnutls_privkey_t signer, + gnutls_sign_algorithm_t algo, + unsigned int flags, + const gnutls_datum_t * hash_data, + gnutls_datum_t * signature); int gnutls_privkey_decrypt_data(gnutls_privkey_t key, unsigned int flags, const gnutls_datum_t * ciphertext, gnutls_datum_t * plaintext); +int gnutls_privkey_decrypt_data2(gnutls_privkey_t key, + unsigned int flags, + const gnutls_datum_t * ciphertext, + unsigned char * plaintext, + size_t plaintext_size); + int gnutls_privkey_export_rsa_raw(gnutls_privkey_t key, gnutls_datum_t * m, gnutls_datum_t * e, @@ -423,12 +573,26 @@ gnutls_privkey_export_rsa_raw(gnutls_privkey_t key, gnutls_datum_t * e1, gnutls_datum_t * e2); +int +gnutls_privkey_export_rsa_raw2(gnutls_privkey_t key, + gnutls_datum_t * m, gnutls_datum_t * e, + gnutls_datum_t * d, gnutls_datum_t * p, + gnutls_datum_t * q, gnutls_datum_t * u, + gnutls_datum_t * e1, + gnutls_datum_t * e2, unsigned flags); + int gnutls_privkey_export_dsa_raw(gnutls_privkey_t key, gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * g, gnutls_datum_t * y, gnutls_datum_t * x); +int +gnutls_privkey_export_dsa_raw2(gnutls_privkey_t key, + gnutls_datum_t * p, gnutls_datum_t * q, + gnutls_datum_t * g, gnutls_datum_t * y, + gnutls_datum_t * x, unsigned flags); + int gnutls_privkey_export_ecc_raw(gnutls_privkey_t key, gnutls_ecc_curve_t * curve, @@ -436,6 +600,24 @@ gnutls_privkey_export_ecc_raw(gnutls_privkey_t key, gnutls_datum_t * y, gnutls_datum_t * k); +int +gnutls_privkey_export_ecc_raw2(gnutls_privkey_t key, + gnutls_ecc_curve_t * curve, + gnutls_datum_t * x, + gnutls_datum_t * y, + gnutls_datum_t * k, + unsigned flags); + +int +gnutls_privkey_export_gost_raw2(gnutls_privkey_t key, + gnutls_ecc_curve_t * curve, + gnutls_digest_algorithm_t * digest, + gnutls_gost_paramset_t * paramset, + gnutls_datum_t * x, + gnutls_datum_t * y, + gnutls_datum_t * k, + unsigned flags); + int gnutls_x509_crt_privkey_sign(gnutls_x509_crt_t crt, gnutls_x509_crt_t issuer, @@ -468,8 +650,7 @@ typedef struct gnutls_pcert_st { gnutls_certificate_type_t type; } gnutls_pcert_st; -/* Do not initialize the "cert" element of - * the certificate */ +/* This flag is unused/ignored */ #define GNUTLS_PCERT_NO_CERT 1 int gnutls_pcert_import_x509(gnutls_pcert_st * pcert, @@ -489,6 +670,14 @@ gnutls_pcert_list_import_x509_raw(gnutls_pcert_st * pcerts, gnutls_x509_crt_fmt_t format, unsigned int flags); +int gnutls_pcert_list_import_x509_file(gnutls_pcert_st *pcert_list, + unsigned *pcert_list_size, + const char *file, + gnutls_x509_crt_fmt_t format, + gnutls_pin_callback_t pin_fn, + void *pin_fn_userdata, + unsigned int flags); + int gnutls_pcert_import_x509_raw(gnutls_pcert_st * pcert, const gnutls_datum_t * cert, gnutls_x509_crt_fmt_t format, @@ -510,6 +699,14 @@ int gnutls_pcert_export_openpgp(gnutls_pcert_st * pcert, void gnutls_pcert_deinit(gnutls_pcert_st * pcert); +int gnutls_pcert_import_rawpk(gnutls_pcert_st* pcert, + gnutls_pubkey_t key, unsigned int flags); + +int gnutls_pcert_import_rawpk_raw(gnutls_pcert_st* pcert, + const gnutls_datum_t* rawpubkey, + gnutls_x509_crt_fmt_t format, + unsigned int key_usage, unsigned int flags); + /* For certificate credentials */ /* This is the same as gnutls_certificate_retrieve_function() * but retrieves a gnutls_pcert_st which requires much less processing @@ -527,7 +724,38 @@ typedef int gnutls_certificate_retrieve_function2(gnutls_session_t, void gnutls_certificate_set_retrieve_function2 (gnutls_certificate_credentials_t cred, - gnutls_certificate_retrieve_function2 * func); + gnutls_certificate_retrieve_function2 *func); + +struct gnutls_cert_retr_st { + unsigned version; /* set to 1 */ + gnutls_certificate_credentials_t cred; + const gnutls_datum_t *req_ca_rdn; + unsigned nreqs; + const gnutls_pk_algorithm_t *pk_algos; + unsigned pk_algos_length; + + /* other fields may be added if version is > 1 */ + unsigned char padding[64]; +}; + +/* When the callback sets this value, gnutls will deinitialize the given + * values after use */ +#define GNUTLS_CERT_RETR_DEINIT_ALL 1 + +typedef int gnutls_certificate_retrieve_function3( + gnutls_session_t, + const struct gnutls_cert_retr_st *info, + gnutls_pcert_st **certs, + unsigned int *pcert_length, + gnutls_ocsp_data_st **ocsp, + unsigned int *ocsp_length, + gnutls_privkey_t *privkey, + unsigned int *flags); + + +void gnutls_certificate_set_retrieve_function3 + (gnutls_certificate_credentials_t cred, + gnutls_certificate_retrieve_function3 *func); int gnutls_certificate_set_key(gnutls_certificate_credentials_t res, diff --git a/lib/includes/gnutls/compat.h b/lib/includes/gnutls/compat.h index 1f4f6b3348..b2ebcb4075 100644 --- a/lib/includes/gnutls/compat.h +++ b/lib/includes/gnutls/compat.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -50,7 +50,7 @@ extern "C" { /* gnutls_connection_end_t was made redundant in 2.99.0 */ typedef unsigned int gnutls_connection_end_t _GNUTLS_GCC_ATTR_DEPRECATED; -/* Stuff deprected in 2.x */ +/* Stuff deprecated in 2.x */ typedef gnutls_cipher_algorithm_t gnutls_cipher_algorithm _GNUTLS_GCC_ATTR_DEPRECATED; typedef gnutls_kx_algorithm_t gnutls_kx_algorithm @@ -181,19 +181,6 @@ int gnutls_x509_crt_get_preferred_hash_algorithm(gnutls_x509_crt_t *mand) _GNUTLS_GCC_ATTR_DEPRECATED; - /* gnutls_x509_crq_privkey_sign() */ -int gnutls_x509_crq_sign(gnutls_x509_crq_t crq, - gnutls_x509_privkey_t key) - _GNUTLS_GCC_ATTR_DEPRECATED; - - - - /* gnutls_x509_crl_privkey_sign */ -int gnutls_x509_crl_sign(gnutls_x509_crl_t crl, - gnutls_x509_crt_t issuer, - gnutls_x509_privkey_t issuer_key) - _GNUTLS_GCC_ATTR_DEPRECATED; - /* use gnutls_privkey_sign_hash() with the GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA flag */ #ifdef _ISOC99_SOURCE @@ -233,6 +220,23 @@ gnutls_global_set_mem_functions(gnutls_alloc_function alloc_func, /* defined in old headers - unused nevertheless */ #define GNUTLS_SUPPLEMENTAL_USER_MAPPING_DATA 0 +/* old compression related functions */ +gnutls_compression_method_t +gnutls_compression_get(gnutls_session_t session) _GNUTLS_GCC_ATTR_DEPRECATED; + +const char * +gnutls_compression_get_name(gnutls_compression_method_t + algorithm) __GNUTLS_CONST__ _GNUTLS_GCC_ATTR_DEPRECATED; + +gnutls_compression_method_t + gnutls_compression_get_id(const char *name) __GNUTLS_CONST__ _GNUTLS_GCC_ATTR_DEPRECATED; + +const gnutls_compression_method_t * + gnutls_compression_list(void) __GNUTLS_PURE__ _GNUTLS_GCC_ATTR_DEPRECATED; + +int gnutls_priority_compression_list(gnutls_priority_t pcache, + const unsigned int **list) _GNUTLS_GCC_ATTR_DEPRECATED; + /* *INDENT-OFF* */ #ifdef __cplusplus } diff --git a/lib/includes/gnutls/crypto.h b/lib/includes/gnutls/crypto.h index 2590d758a3..c878d7dfac 100644 --- a/lib/includes/gnutls/crypto.h +++ b/lib/includes/gnutls/crypto.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -84,6 +84,28 @@ gnutls_aead_cipher_encrypt(gnutls_aead_cipher_hd_t handle, const void *ptext, size_t ptext_len, void *ctext, size_t *ctext_len); +int +gnutls_aead_cipher_encryptv(gnutls_aead_cipher_hd_t handle, + const void *nonce, size_t nonce_len, + const giovec_t *auth_iov, int auth_iovcnt, + size_t tag_size, + const giovec_t *iov, int iovcnt, + void *ctext, size_t *ctext_len); + +int +gnutls_aead_cipher_encryptv2(gnutls_aead_cipher_hd_t handle, + const void *nonce, size_t nonce_len, + const giovec_t *auth_iov, int auth_iovcnt, + const giovec_t *iov, int iovcnt, + void *tag, size_t *tag_size); + +int +gnutls_aead_cipher_decryptv2(gnutls_aead_cipher_hd_t handle, + const void *nonce, size_t nonce_len, + const giovec_t *auth_iov, int auth_iovcnt, + const giovec_t *iov, int iovcnt, + void *tag, size_t tag_size); + void gnutls_aead_cipher_deinit(gnutls_aead_cipher_hd_t handle); /* Hash - MAC API */ @@ -101,9 +123,11 @@ int gnutls_hmac(gnutls_hmac_hd_t handle, const void *text, size_t textlen); void gnutls_hmac_output(gnutls_hmac_hd_t handle, void *digest); void gnutls_hmac_deinit(gnutls_hmac_hd_t handle, void *digest); unsigned gnutls_hmac_get_len(gnutls_mac_algorithm_t algorithm) __GNUTLS_CONST__; +unsigned gnutls_hmac_get_key_size(gnutls_mac_algorithm_t algorithm) __GNUTLS_CONST__; int gnutls_hmac_fast(gnutls_mac_algorithm_t algorithm, const void *key, size_t keylen, const void *text, size_t textlen, void *digest); +gnutls_hmac_hd_t gnutls_hmac_copy(gnutls_hmac_hd_t handle); int gnutls_hash_init(gnutls_hash_hd_t * dig, gnutls_digest_algorithm_t algorithm); @@ -113,6 +137,25 @@ void gnutls_hash_deinit(gnutls_hash_hd_t handle, void *digest); unsigned gnutls_hash_get_len(gnutls_digest_algorithm_t algorithm) __GNUTLS_CONST__; int gnutls_hash_fast(gnutls_digest_algorithm_t algorithm, const void *text, size_t textlen, void *digest); +gnutls_hash_hd_t gnutls_hash_copy(gnutls_hash_hd_t handle); + +/* KDF API */ + +int gnutls_hkdf_extract(gnutls_mac_algorithm_t mac, + const gnutls_datum_t *key, + const gnutls_datum_t *salt, + void *output); + +int gnutls_hkdf_expand(gnutls_mac_algorithm_t mac, + const gnutls_datum_t *key, + const gnutls_datum_t *info, + void *output, size_t length); + +int gnutls_pbkdf2(gnutls_mac_algorithm_t mac, + const gnutls_datum_t *key, + const gnutls_datum_t *salt, + unsigned iter_count, + void *output, size_t length); /* register ciphers */ @@ -146,6 +189,7 @@ typedef int (*gnutls_cipher_init_func) (gnutls_cipher_algorithm_t, void **ctx, i typedef int (*gnutls_cipher_setkey_func) (void *ctx, const void *key, size_t keysize); /* old style ciphers */ typedef int (*gnutls_cipher_setiv_func) (void *ctx, const void *iv, size_t ivsize); +typedef int (*gnutls_cipher_getiv_func) (void *ctx, void *iv, size_t ivsize); typedef int (*gnutls_cipher_encrypt_func) (void *ctx, const void *plain, size_t plainsize, void *encr, size_t encrsize); typedef int (*gnutls_cipher_decrypt_func) (void *ctx, const void *encr, size_t encrsize, @@ -177,7 +221,8 @@ gnutls_crypto_register_cipher(gnutls_cipher_algorithm_t algorithm, gnutls_cipher_setiv_func setiv, gnutls_cipher_encrypt_func encrypt, gnutls_cipher_decrypt_func decrypt, - gnutls_cipher_deinit_func deinit); + gnutls_cipher_deinit_func deinit) + _GNUTLS_GCC_ATTR_DEPRECATED; int gnutls_crypto_register_aead_cipher(gnutls_cipher_algorithm_t algorithm, @@ -186,7 +231,8 @@ gnutls_crypto_register_aead_cipher(gnutls_cipher_algorithm_t algorithm, gnutls_cipher_setkey_func setkey, gnutls_cipher_aead_encrypt_func aead_encrypt, gnutls_cipher_aead_decrypt_func aead_decrypt, - gnutls_cipher_deinit_func deinit); + gnutls_cipher_deinit_func deinit) + _GNUTLS_GCC_ATTR_DEPRECATED; typedef int (*gnutls_mac_init_func) (gnutls_mac_algorithm_t, void **ctx); typedef int (*gnutls_mac_setkey_func) (void *ctx, const void *key, size_t keysize); @@ -197,6 +243,7 @@ typedef void (*gnutls_mac_deinit_func) (void *ctx); typedef int (*gnutls_mac_fast_func) (gnutls_mac_algorithm_t, const void *nonce, size_t nonce_size, const void *key, size_t keysize, const void *text, size_t textsize, void *digest); +typedef void *(*gnutls_mac_copy_func) (const void *ctx); int gnutls_crypto_register_mac(gnutls_mac_algorithm_t mac, @@ -207,7 +254,8 @@ gnutls_crypto_register_mac(gnutls_mac_algorithm_t mac, gnutls_mac_hash_func hash, gnutls_mac_output_func output, gnutls_mac_deinit_func deinit, - gnutls_mac_fast_func hash_fast); + gnutls_mac_fast_func hash_fast) + _GNUTLS_GCC_ATTR_DEPRECATED; typedef int (*gnutls_digest_init_func) (gnutls_digest_algorithm_t, void **ctx); typedef int (*gnutls_digest_hash_func) (void *ctx, const void *text, size_t textsize); @@ -215,6 +263,7 @@ typedef int (*gnutls_digest_output_func) (void *src_ctx, void *digest, size_t di typedef void (*gnutls_digest_deinit_func) (void *ctx); typedef int (*gnutls_digest_fast_func) (gnutls_digest_algorithm_t, const void *text, size_t textsize, void *digest); +typedef void *(*gnutls_digest_copy_func) (const void *ctx); int gnutls_crypto_register_digest(gnutls_digest_algorithm_t digest, @@ -223,7 +272,8 @@ gnutls_crypto_register_digest(gnutls_digest_algorithm_t digest, gnutls_digest_hash_func hash, gnutls_digest_output_func output, gnutls_digest_deinit_func deinit, - gnutls_digest_fast_func hash_fast); + gnutls_digest_fast_func hash_fast) + _GNUTLS_GCC_ATTR_DEPRECATED; /* RSA-PKCS#1 1.5 helper functions */ int @@ -236,6 +286,12 @@ gnutls_decode_ber_digest_info(const gnutls_datum_t * info, gnutls_digest_algorithm_t *hash, unsigned char *digest, unsigned int *digest_size); +int gnutls_decode_rs_value(const gnutls_datum_t * sig_value, gnutls_datum_t *r, gnutls_datum_t *s); +int gnutls_encode_rs_value(gnutls_datum_t * sig_value, const gnutls_datum_t * r, const gnutls_datum_t * s); + +int gnutls_encode_gost_rs_value(gnutls_datum_t * sig_value, const gnutls_datum_t * r, const gnutls_datum_t *s); +int gnutls_decode_gost_rs_value(const gnutls_datum_t * sig_value, gnutls_datum_t * r, gnutls_datum_t * s); + /* *INDENT-OFF* */ #ifdef __cplusplus } diff --git a/lib/includes/gnutls/dtls.h b/lib/includes/gnutls/dtls.h index 46d0b591fa..7e7133e6ae 100644 --- a/lib/includes/gnutls/dtls.h +++ b/lib/includes/gnutls/dtls.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/includes/gnutls/gnutls.h.in b/lib/includes/gnutls/gnutls.h.in index 580cf9f00c..7d9870996a 100644 --- a/lib/includes/gnutls/gnutls.h.in +++ b/lib/includes/gnutls/gnutls.h.in @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -37,15 +37,12 @@ #ifndef GNUTLS_H #define GNUTLS_H +/* Get ssize_t. */ +#include + /* Get size_t. */ #include -/* Get ssize_t. */ -#ifndef HAVE_SSIZE_T -#define HAVE_SSIZE_T -/* *INDENT-OFF* */ -@DEFINE_SSIZE_T@ -/* *INDENT-ON* */ -#endif + /* Get time_t. */ #include @@ -97,23 +94,40 @@ extern "C" { * @GNUTLS_CIPHER_AES_128_CBC: AES in CBC mode with 128-bit keys. * @GNUTLS_CIPHER_AES_192_CBC: AES in CBC mode with 192-bit keys. * @GNUTLS_CIPHER_AES_256_CBC: AES in CBC mode with 256-bit keys. + * @GNUTLS_CIPHER_AES_128_CFB8: AES in CFB8 mode with 128-bit keys. + * @GNUTLS_CIPHER_AES_192_CFB8: AES in CFB8 mode with 192-bit keys. + * @GNUTLS_CIPHER_AES_256_CFB8: AES in CFB8 mode with 256-bit keys. * @GNUTLS_CIPHER_ARCFOUR_40: ARCFOUR stream cipher with 40-bit keys. * @GNUTLS_CIPHER_CAMELLIA_128_CBC: Camellia in CBC mode with 128-bit keys. * @GNUTLS_CIPHER_CAMELLIA_192_CBC: Camellia in CBC mode with 192-bit keys. * @GNUTLS_CIPHER_CAMELLIA_256_CBC: Camellia in CBC mode with 256-bit keys. * @GNUTLS_CIPHER_RC2_40_CBC: RC2 in CBC mode with 40-bit keys. * @GNUTLS_CIPHER_DES_CBC: DES in CBC mode (56-bit keys). - * @GNUTLS_CIPHER_AES_128_GCM: AES in GCM mode with 128-bit keys. - * @GNUTLS_CIPHER_AES_256_GCM: AES in GCM mode with 256-bit keys. - * @GNUTLS_CIPHER_AES_128_CCM: AES in CCM mode with 128-bit keys. - * @GNUTLS_CIPHER_AES_256_CCM: AES in CCM mode with 256-bit keys. - * @GNUTLS_CIPHER_AES_128_CCM_8: AES in CCM mode with 64-bit tag and 128-bit keys. - * @GNUTLS_CIPHER_AES_256_CCM_8: AES in CCM mode with 64-bit tag and 256-bit keys. - * @GNUTLS_CIPHER_CAMELLIA_128_GCM: CAMELLIA in GCM mode with 128-bit keys. - * @GNUTLS_CIPHER_CAMELLIA_256_GCM: CAMELLIA in GCM mode with 256-bit keys. + * @GNUTLS_CIPHER_AES_128_GCM: AES in GCM mode with 128-bit keys (AEAD). + * @GNUTLS_CIPHER_AES_256_GCM: AES in GCM mode with 256-bit keys (AEAD). + * @GNUTLS_CIPHER_AES_128_CCM: AES in CCM mode with 128-bit keys (AEAD). + * @GNUTLS_CIPHER_AES_256_CCM: AES in CCM mode with 256-bit keys (AEAD). + * @GNUTLS_CIPHER_AES_128_CCM_8: AES in CCM mode with 64-bit tag and 128-bit keys (AEAD). + * @GNUTLS_CIPHER_AES_256_CCM_8: AES in CCM mode with 64-bit tag and 256-bit keys (AEAD). + * @GNUTLS_CIPHER_CAMELLIA_128_GCM: CAMELLIA in GCM mode with 128-bit keys (AEAD). + * @GNUTLS_CIPHER_CAMELLIA_256_GCM: CAMELLIA in GCM mode with 256-bit keys (AEAD). * @GNUTLS_CIPHER_SALSA20_256: Salsa20 with 256-bit keys. * @GNUTLS_CIPHER_ESTREAM_SALSA20_256: Estream's Salsa20 variant with 256-bit keys. + * @GNUTLS_CIPHER_CHACHA20_32: Chacha20 cipher with 96-bit nonces and 32-bit block counters. + * @GNUTLS_CIPHER_CHACHA20_64: Chacha20 cipher with 64-bit nonces and 64-bit block counters. * @GNUTLS_CIPHER_CHACHA20_POLY1305: The Chacha20 cipher with the Poly1305 authenticator (AEAD). + * @GNUTLS_CIPHER_GOST28147_TC26Z_CFB: GOST 28147-89 (Magma) cipher in CFB mode with TC26 Z S-box. + * @GNUTLS_CIPHER_GOST28147_CPA_CFB: GOST 28147-89 (Magma) cipher in CFB mode with CryptoPro A S-box. + * @GNUTLS_CIPHER_GOST28147_CPB_CFB: GOST 28147-89 (Magma) cipher in CFB mode with CryptoPro B S-box. + * @GNUTLS_CIPHER_GOST28147_CPC_CFB: GOST 28147-89 (Magma) cipher in CFB mode with CryptoPro C S-box. + * @GNUTLS_CIPHER_GOST28147_CPD_CFB: GOST 28147-89 (Magma) cipher in CFB mode with CryptoPro D S-box. + * @GNUTLS_CIPHER_AES_128_XTS: AES in XTS mode with 128-bit key + 128bit tweak key. + * @GNUTLS_CIPHER_AES_256_XTS: AES in XTS mode with 256-bit key + 256bit tweak key. + * Note that the XTS ciphers are message oriented. + * The whole message needs to be provided with a single call, because + * cipher-stealing requires to know where the message actually terminates + * in order to be able to compute where the stealing occurs. + * @GNUTLS_CIPHER_GOST28147_TC26Z_CNT: GOST 28147-89 (Magma) cipher in CNT mode with TC26 Z S-box. * @GNUTLS_CIPHER_IDEA_PGP_CFB: IDEA in CFB mode (placeholder - unsupported). * @GNUTLS_CIPHER_3DES_PGP_CFB: 3DES in CFB mode (placeholder - unsupported). * @GNUTLS_CIPHER_CAST5_PGP_CFB: CAST5 in CFB mode (placeholder - unsupported). @@ -123,6 +137,12 @@ extern "C" { * @GNUTLS_CIPHER_AES192_PGP_CFB: AES in CFB mode with 192-bit keys (placeholder - unsupported). * @GNUTLS_CIPHER_AES256_PGP_CFB: AES in CFB mode with 256-bit keys (placeholder - unsupported). * @GNUTLS_CIPHER_TWOFISH_PGP_CFB: Twofish in CFB mode (placeholder - unsupported). + * @GNUTLS_CIPHER_AES_128_SIV: AES in SIV mode with 128-bit key. + * @GNUTLS_CIPHER_AES_256_SIV: AES in SIV mode with 256-bit key. + * Note that the SIV ciphers can only be used with + * the AEAD interface, and the IV plays a role as + * the authentication tag while it is prepended to + * the cipher text. * * Enumeration of different symmetric encryption algorithms. */ @@ -151,6 +171,21 @@ typedef enum gnutls_cipher_algorithm { GNUTLS_CIPHER_AES_128_CCM_8 = 21, GNUTLS_CIPHER_AES_256_CCM_8 = 22, GNUTLS_CIPHER_CHACHA20_POLY1305 = 23, + GNUTLS_CIPHER_GOST28147_TC26Z_CFB = 24, + GNUTLS_CIPHER_GOST28147_CPA_CFB = 25, + GNUTLS_CIPHER_GOST28147_CPB_CFB = 26, + GNUTLS_CIPHER_GOST28147_CPC_CFB = 27, + GNUTLS_CIPHER_GOST28147_CPD_CFB = 28, + GNUTLS_CIPHER_AES_128_CFB8 = 29, + GNUTLS_CIPHER_AES_192_CFB8 = 30, + GNUTLS_CIPHER_AES_256_CFB8 = 31, + GNUTLS_CIPHER_AES_128_XTS = 32, + GNUTLS_CIPHER_AES_256_XTS = 33, + GNUTLS_CIPHER_GOST28147_TC26Z_CNT = 34, + GNUTLS_CIPHER_CHACHA20_64 = 35, + GNUTLS_CIPHER_CHACHA20_32 = 36, + GNUTLS_CIPHER_AES_128_SIV = 37, + GNUTLS_CIPHER_AES_256_SIV = 38, /* used only for PGP internals. Ignored in TLS/SSL */ @@ -183,6 +218,7 @@ typedef enum gnutls_cipher_algorithm { * @GNUTLS_KX_DHE_PSK: DHE-PSK key-exchange algorithm. * @GNUTLS_KX_ECDHE_PSK: ECDHE-PSK key-exchange algorithm. * @GNUTLS_KX_RSA_PSK: RSA-PSK key-exchange algorithm. + * @GNUTLS_KX_VKO_GOST_12: VKO GOST R 34.10-2012 key-exchange algorithm. * * Enumeration of different key exchange algorithms. */ @@ -202,7 +238,8 @@ typedef enum { GNUTLS_KX_ECDHE_RSA = 12, GNUTLS_KX_ECDHE_ECDSA = 13, GNUTLS_KX_ECDHE_PSK = 14, - GNUTLS_KX_RSA_PSK = 15 + GNUTLS_KX_RSA_PSK = 15, + GNUTLS_KX_VKO_GOST_12 = 16 } gnutls_kx_algorithm_t; /** @@ -253,9 +290,24 @@ typedef enum { * @GNUTLS_MAC_SHA512: HMAC-SHA-512 algorithm. * @GNUTLS_MAC_SHA224: HMAC-SHA-224 algorithm. * @GNUTLS_MAC_MD5_SHA1: Combined MD5+SHA1 MAC placeholder. + * @GNUTLS_MAC_GOSTR_94: HMAC GOST R 34.11-94 algorithm. + * @GNUTLS_MAC_STREEBOG_256: HMAC GOST R 34.11-2001 (Streebog) algorithm, 256 bit. + * @GNUTLS_MAC_STREEBOG_512: HMAC GOST R 34.11-2001 (Streebog) algorithm, 512 bit. * @GNUTLS_MAC_AEAD: MAC implicit through AEAD cipher. - * @GNUTLS_MAC_UMAC_96: The UMAC-96 MAC algorithm. - * @GNUTLS_MAC_UMAC_128: The UMAC-128 MAC algorithm. + * @GNUTLS_MAC_UMAC_96: The UMAC-96 MAC algorithm (requires nonce). + * @GNUTLS_MAC_UMAC_128: The UMAC-128 MAC algorithm (requires nonce). + * @GNUTLS_MAC_AES_CMAC_128: The AES-CMAC-128 MAC algorithm. + * @GNUTLS_MAC_AES_CMAC_256: The AES-CMAC-256 MAC algorithm. + * @GNUTLS_MAC_AES_GMAC_128: The AES-GMAC-128 MAC algorithm (requires nonce). + * @GNUTLS_MAC_AES_GMAC_192: The AES-GMAC-192 MAC algorithm (requires nonce). + * @GNUTLS_MAC_AES_GMAC_256: The AES-GMAC-256 MAC algorithm (requires nonce). + * @GNUTLS_MAC_SHA3_224: Reserved; unimplemented. + * @GNUTLS_MAC_SHA3_256: Reserved; unimplemented. + * @GNUTLS_MAC_SHA3_384: Reserved; unimplemented. + * @GNUTLS_MAC_SHA3_512: Reserved; unimplemented. + * @GNUTLS_MAC_GOST28147_TC26Z_IMIT: The GOST 28147-89 working in IMIT mode with TC26 Z S-box. + * @GNUTLS_MAC_SHAKE_128: Reserved; unimplemented. + * @GNUTLS_MAC_SHAKE_256: Reserved; unimplemented. * * Enumeration of different Message Authentication Code (MAC) * algorithms. @@ -276,11 +328,22 @@ typedef enum { GNUTLS_MAC_SHA3_384 = 12, /* reserved: no implementation */ GNUTLS_MAC_SHA3_512 = 13, /* reserved: no implementation */ GNUTLS_MAC_MD5_SHA1 = 14, /* reserved: no implementation */ + GNUTLS_MAC_GOSTR_94 = 15, + GNUTLS_MAC_STREEBOG_256 = 16, + GNUTLS_MAC_STREEBOG_512 = 17, /* If you add anything here, make sure you align with gnutls_digest_algorithm_t. */ GNUTLS_MAC_AEAD = 200, /* indicates that MAC is on the cipher */ GNUTLS_MAC_UMAC_96 = 201, - GNUTLS_MAC_UMAC_128 = 202 + GNUTLS_MAC_UMAC_128 = 202, + GNUTLS_MAC_AES_CMAC_128 = 203, + GNUTLS_MAC_AES_CMAC_256 = 204, + GNUTLS_MAC_AES_GMAC_128 = 205, + GNUTLS_MAC_AES_GMAC_192 = 206, + GNUTLS_MAC_AES_GMAC_256 = 207, + GNUTLS_MAC_GOST28147_TC26Z_IMIT = 208, + GNUTLS_MAC_SHAKE_128 = 209, + GNUTLS_MAC_SHAKE_256 = 210 } gnutls_mac_algorithm_t; /** @@ -300,6 +363,11 @@ typedef enum { * @GNUTLS_DIG_SHA3_384: SHA3-384 algorithm. * @GNUTLS_DIG_SHA3_512: SHA3-512 algorithm. * @GNUTLS_DIG_MD5_SHA1: Combined MD5+SHA1 algorithm. + * @GNUTLS_DIG_GOSTR_94: GOST R 34.11-94 algorithm. + * @GNUTLS_DIG_STREEBOG_256: GOST R 34.11-2001 (Streebog) algorithm, 256 bit. + * @GNUTLS_DIG_STREEBOG_512: GOST R 34.11-2001 (Streebog) algorithm, 512 bit. + * @GNUTLS_DIG_SHAKE_128: Reserved; unimplemented. + * @GNUTLS_DIG_SHAKE_256: Reserved; unimplemented. * * Enumeration of different digest (hash) algorithms. */ @@ -318,7 +386,12 @@ typedef enum { GNUTLS_DIG_SHA3_256 = GNUTLS_MAC_SHA3_256, GNUTLS_DIG_SHA3_384 = GNUTLS_MAC_SHA3_384, GNUTLS_DIG_SHA3_512 = GNUTLS_MAC_SHA3_512, - GNUTLS_DIG_MD5_SHA1 = GNUTLS_MAC_MD5_SHA1 + GNUTLS_DIG_MD5_SHA1 = GNUTLS_MAC_MD5_SHA1, + GNUTLS_DIG_GOSTR_94 = GNUTLS_MAC_GOSTR_94, + GNUTLS_DIG_STREEBOG_256 = GNUTLS_MAC_STREEBOG_256, + GNUTLS_DIG_STREEBOG_512 = GNUTLS_MAC_STREEBOG_512, + GNUTLS_DIG_SHAKE_128 = GNUTLS_MAC_SHAKE_128, + GNUTLS_DIG_SHAKE_256 = GNUTLS_MAC_SHAKE_256 /* If you add anything here, make sure you align with gnutls_mac_algorithm_t. */ } gnutls_digest_algorithm_t; @@ -355,16 +428,57 @@ typedef enum { * @GNUTLS_DATAGRAM: Connection is datagram oriented (DTLS). Since 3.0.0. * @GNUTLS_NONBLOCK: Connection should not block. Since 3.0.0. * @GNUTLS_NO_SIGNAL: In systems where SIGPIPE is delivered on send, it will be disabled. That flag has effect in systems which support the MSG_NOSIGNAL sockets flag (since 3.4.2). - * @GNUTLS_NO_EXTENSIONS: Do not enable any TLS extensions by default (since 3.1.2). + * @GNUTLS_NO_EXTENSIONS: Do not enable any TLS extensions by default (since 3.1.2). As TLS 1.2 and later require extensions this option is considered obsolete and should not be used. * @GNUTLS_NO_REPLAY_PROTECTION: Disable any replay protection in DTLS. This must only be used if replay protection is achieved using other means. Since 3.2.2. * @GNUTLS_ALLOW_ID_CHANGE: Allow the peer to replace its certificate, or change its ID during a rehandshake. This change is often used in attacks and thus prohibited by default. Since 3.5.0. * @GNUTLS_ENABLE_FALSE_START: Enable the TLS false start on client side if the negotiated ciphersuites allow it. This will enable sending data prior to the handshake being complete, and may introduce a risk of crypto failure when combined with certain key exchanged; for that GnuTLS may not enable that option in ciphersuites that are known to be not safe for false start. Since 3.5.0. - * @GNUTLS_FORCE_CLIENT_CERT: When in client side and only a single cert is specified, send that certificate irrespective of the issuers expectated by the server. Since 3.5.0. + * @GNUTLS_ENABLE_EARLY_START: Under TLS1.3 allow the server to return earlier than the full handshake + * finish; similarly to false start the handshake will be completed once data are received by the + * client, while the server is able to transmit sooner. This is not enabled by default as it could + * break certain existing server assumptions and use-cases. Since 3.6.4. + * @GNUTLS_ENABLE_EARLY_DATA: Under TLS1.3 allow the server to receive early data sent as part of the initial ClientHello (0-RTT). This is not enabled by default as early data has weaker security properties than other data. Since 3.6.5. + * @GNUTLS_FORCE_CLIENT_CERT: When in client side and only a single cert is specified, send that certificate irrespective of the issuers expected by the server. Since 3.5.0. * @GNUTLS_NO_TICKETS: Flag to indicate that the session should not use resumption with session tickets. + * @GNUTLS_KEY_SHARE_TOP3: Generate key shares for the top-3 different groups which are enabled. + * That is, as each group is associated with a key type (EC, finite field, x25519), generate + * three keys using %GNUTLS_PK_DH, %GNUTLS_PK_EC, %GNUTLS_PK_ECDH_X25519 if all of them are enabled. + * @GNUTLS_KEY_SHARE_TOP2: Generate key shares for the top-2 different groups which are enabled. + * For example (ECDH + x25519). This is the default. + * @GNUTLS_KEY_SHARE_TOP: Generate key share for the first group which is enabled. + * For example x25519. This option is the most performant for client (less CPU spent + * generating keys), but if the server doesn't support the advertized option it may + * result to more roundtrips needed to discover the server's choice. + * @GNUTLS_NO_AUTO_REKEY: Disable auto-rekeying under TLS1.3. If this option is not specified + * gnutls will force a rekey after 2^24 records have been sent. + * @GNUTLS_POST_HANDSHAKE_AUTH: Enable post handshake authentication for server and client. When set and + * a server requests authentication after handshake %GNUTLS_E_REAUTH_REQUEST will be returned + * by gnutls_record_recv(). A client should then call gnutls_reauth() to re-authenticate. + * @GNUTLS_SAFE_PADDING_CHECK: Flag to indicate that the TLS 1.3 padding check will be done in a + * safe way which doesn't leak the pad size based on GnuTLS processing time. This is of use to + * applications which hide the length of transferred data via the TLS1.3 padding mechanism and + * are already taking steps to hide the data processing time. This comes at a performance + * penalty. + * @GNUTLS_AUTO_REAUTH: Enable transparent re-authentication in client side when the server + * requests to. That is, reauthentication is handled within gnutls_record_recv(), and + * the %GNUTLS_E_REHANDSHAKE or %GNUTLS_E_REAUTH_REQUEST are not returned. This must be + * enabled with %GNUTLS_POST_HANDSHAKE_AUTH for TLS1.3. Enabling this flag requires to restore + * interrupted calls to gnutls_record_recv() based on the output of gnutls_record_get_direction(), + * since gnutls_record_recv() could be interrupted when sending when this flag is enabled. + * Note this flag may not be used if you are using the same session for sending and receiving + * in different threads. + * @GNUTLS_ENABLE_EARLY_DATA: Under TLS1.3 allow the server to receive early data sent as part of the initial ClientHello (0-RTT). + * This is not enabled by default as early data has weaker security properties than other data. Since 3.6.5. + * @GNUTLS_ENABLE_RAWPK: Allows raw public-keys to be negotiated during the handshake. Since 3.6.6. + * @GNUTLS_NO_AUTO_SEND_TICKET: Under TLS1.3 disable auto-sending of + * session tickets during the handshake. * * Enumeration of different flags for gnutls_init() function. All the flags * can be combined except @GNUTLS_SERVER and @GNUTLS_CLIENT which are mutually * exclusive. + * + * The key share options relate to the TLS 1.3 key share extension + * which is a speculative key generation expecting that the server + * would support the generated key. */ typedef enum { GNUTLS_SERVER = 1, @@ -377,7 +491,18 @@ typedef enum { GNUTLS_ALLOW_ID_CHANGE = (1<<7), GNUTLS_ENABLE_FALSE_START = (1<<8), GNUTLS_FORCE_CLIENT_CERT = (1<<9), - GNUTLS_NO_TICKETS = (1<<10) + GNUTLS_NO_TICKETS = (1<<10), + GNUTLS_KEY_SHARE_TOP = (1<<11), + GNUTLS_KEY_SHARE_TOP2 = (1<<12), + GNUTLS_KEY_SHARE_TOP3 = (1<<13), + GNUTLS_POST_HANDSHAKE_AUTH = (1<<14), + GNUTLS_NO_AUTO_REKEY = (1<<15), + GNUTLS_SAFE_PADDING_CHECK = (1<<16), + GNUTLS_ENABLE_EARLY_START = (1<<17), + GNUTLS_ENABLE_RAWPK = (1<<18), + GNUTLS_AUTO_REAUTH = (1<<19), + GNUTLS_ENABLE_EARLY_DATA = (1<<20), + GNUTLS_NO_AUTO_SEND_TICKET = (1<<21) } gnutls_init_flags_t; /* compatibility defines (previous versions of gnutls @@ -393,6 +518,8 @@ typedef enum { #define GNUTLS_ENABLE_FALSE_START (1<<8) #define GNUTLS_FORCE_CLIENT_CERT (1<<9) #define GNUTLS_NO_TICKETS (1<<10) +#define GNUTLS_ENABLE_CERT_TYPE_NEG 0 + // Here for compatibility reasons /** * gnutls_alert_level_t: @@ -429,18 +556,20 @@ typedef enum { * @GNUTLS_A_EXPORT_RESTRICTION: Export restriction. * @GNUTLS_A_PROTOCOL_VERSION: Error in protocol version. * @GNUTLS_A_INSUFFICIENT_SECURITY: Insufficient security. - * @GNUTLS_A_USER_CANCELED: User canceled. * @GNUTLS_A_INTERNAL_ERROR: Internal error. * @GNUTLS_A_INAPPROPRIATE_FALLBACK: Inappropriate fallback, + * @GNUTLS_A_USER_CANCELED: User canceled. * @GNUTLS_A_NO_RENEGOTIATION: No renegotiation is allowed. - * @GNUTLS_A_CERTIFICATE_UNOBTAINABLE: Could not retrieve the - * specified certificate. + * @GNUTLS_A_MISSING_EXTENSION: An extension was expected but was not seen * @GNUTLS_A_UNSUPPORTED_EXTENSION: An unsupported extension was * sent. + * @GNUTLS_A_CERTIFICATE_UNOBTAINABLE: Could not retrieve the + * specified certificate. * @GNUTLS_A_UNRECOGNIZED_NAME: The server name sent was not * recognized. * @GNUTLS_A_UNKNOWN_PSK_IDENTITY: The SRP/PSK username is missing * or not known. + * @GNUTLS_A_CERTIFICATE_REQUIRED: Certificate is required. * @GNUTLS_A_NO_APPLICATION_PROTOCOL: The ALPN protocol requested is * not supported by the peer. * @@ -472,10 +601,12 @@ typedef enum { GNUTLS_A_INAPPROPRIATE_FALLBACK = 86, GNUTLS_A_USER_CANCELED = 90, GNUTLS_A_NO_RENEGOTIATION = 100, + GNUTLS_A_MISSING_EXTENSION = 109, GNUTLS_A_UNSUPPORTED_EXTENSION = 110, GNUTLS_A_CERTIFICATE_UNOBTAINABLE = 111, GNUTLS_A_UNRECOGNIZED_NAME = 112, GNUTLS_A_UNKNOWN_PSK_IDENTITY = 115, + GNUTLS_A_CERTIFICATE_REQUIRED = 116, GNUTLS_A_NO_APPLICATION_PROTOCOL = 120, GNUTLS_A_MAX = GNUTLS_A_NO_APPLICATION_PROTOCOL } gnutls_alert_description_t; @@ -486,6 +617,8 @@ typedef enum { * @GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST: DTLS Hello verify request. * @GNUTLS_HANDSHAKE_CLIENT_HELLO: Client hello. * @GNUTLS_HANDSHAKE_SERVER_HELLO: Server hello. + * @GNUTLS_HANDSHAKE_END_OF_EARLY_DATA: End of early data. + * @GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST: Hello retry request. * @GNUTLS_HANDSHAKE_NEW_SESSION_TICKET: New session ticket. * @GNUTLS_HANDSHAKE_CERTIFICATE_PKT: Certificate packet. * @GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE: Server key exchange. @@ -495,9 +628,11 @@ typedef enum { * @GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE: Client key exchange. * @GNUTLS_HANDSHAKE_FINISHED: Finished. * @GNUTLS_HANDSHAKE_CERTIFICATE_STATUS: Certificate status (OCSP). + * @GNUTLS_HANDSHAKE_KEY_UPDATE: TLS1.3 key update message. * @GNUTLS_HANDSHAKE_SUPPLEMENTAL: Supplemental. * @GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC: Change Cipher Spec. * @GNUTLS_HANDSHAKE_CLIENT_HELLO_V2: SSLv2 Client Hello. + * @GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS: Encrypted extensions message. * * Enumeration of different TLS handshake packets. */ @@ -507,6 +642,8 @@ typedef enum { GNUTLS_HANDSHAKE_SERVER_HELLO = 2, GNUTLS_HANDSHAKE_HELLO_VERIFY_REQUEST = 3, GNUTLS_HANDSHAKE_NEW_SESSION_TICKET = 4, + GNUTLS_HANDSHAKE_END_OF_EARLY_DATA = 5, + GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS = 8, GNUTLS_HANDSHAKE_CERTIFICATE_PKT = 11, GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE = 12, GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST = 13, @@ -516,8 +653,10 @@ typedef enum { GNUTLS_HANDSHAKE_FINISHED = 20, GNUTLS_HANDSHAKE_CERTIFICATE_STATUS = 22, GNUTLS_HANDSHAKE_SUPPLEMENTAL = 23, + GNUTLS_HANDSHAKE_KEY_UPDATE = 24, GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC = 254, - GNUTLS_HANDSHAKE_CLIENT_HELLO_V2 = 1024 + GNUTLS_HANDSHAKE_CLIENT_HELLO_V2 = 1024, + GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST = 1025, } gnutls_handshake_description_t; #define GNUTLS_HANDSHAKE_ANY ((unsigned int)-1) @@ -537,7 +676,7 @@ const char * @GNUTLS_CERT_SIGNER_NOT_FOUND: The certificate's issuer is not known. * This is the case if the issuer is not included in the trusted certificate list. * @GNUTLS_CERT_SIGNER_NOT_CA: The certificate's signer was not a CA. This - * may happen if this was a version 1 certificate, which is common with + * may happen if this was a version 1 certificate, which is common with * some CAs, or a version 3 certificate without the basic constrains extension. * @GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE: The certificate's signer constraints were * violated. @@ -624,10 +763,12 @@ typedef enum { * @GNUTLS_TLS1: Same as %GNUTLS_TLS1_0. * @GNUTLS_TLS1_1: TLS version 1.1. * @GNUTLS_TLS1_2: TLS version 1.2. + * @GNUTLS_TLS1_3: TLS version 1.3. * @GNUTLS_DTLS1_0: DTLS version 1.0. * @GNUTLS_DTLS1_2: DTLS version 1.2. * @GNUTLS_DTLS0_9: DTLS version 0.9 (Cisco AnyConnect / OpenSSL 0.9.8e). - * @GNUTLS_VERSION_MAX: Maps to the highest supported TLS version. + * @GNUTLS_TLS_VERSION_MAX: Maps to the highest supported TLS version. + * @GNUTLS_DTLS_VERSION_MAX: Maps to the highest supported DTLS version. * @GNUTLS_VERSION_UNKNOWN: Unknown SSL/TLS version. * * Enumeration of different SSL/TLS protocol versions. @@ -638,22 +779,25 @@ typedef enum { GNUTLS_TLS1 = GNUTLS_TLS1_0, GNUTLS_TLS1_1 = 3, GNUTLS_TLS1_2 = 4, + GNUTLS_TLS1_3 = 5, GNUTLS_DTLS0_9 = 200, GNUTLS_DTLS1_0 = 201, /* 201 */ GNUTLS_DTLS1_2 = 202, GNUTLS_DTLS_VERSION_MIN = GNUTLS_DTLS0_9, GNUTLS_DTLS_VERSION_MAX = GNUTLS_DTLS1_2, - GNUTLS_TLS_VERSION_MAX = GNUTLS_TLS1_2, + GNUTLS_TLS_VERSION_MAX = GNUTLS_TLS1_3, GNUTLS_VERSION_UNKNOWN = 0xff /* change it to 0xffff */ } gnutls_protocol_t; +#define GNUTLS_CRT_RAW GNUTLS_CRT_RAWPK + /** * gnutls_certificate_type_t: * @GNUTLS_CRT_UNKNOWN: Unknown certificate type. * @GNUTLS_CRT_X509: X.509 Certificate. * @GNUTLS_CRT_OPENPGP: OpenPGP certificate. - * @GNUTLS_CRT_RAW: Raw public key (SubjectPublicKey) + * @GNUTLS_CRT_RAWPK: Raw public-key (SubjectPublicKeyInfo) * * Enumeration of different certificate types. */ @@ -661,7 +805,8 @@ typedef enum { GNUTLS_CRT_UNKNOWN = 0, GNUTLS_CRT_X509 = 1, GNUTLS_CRT_OPENPGP = 2, - GNUTLS_CRT_RAW = 3 + GNUTLS_CRT_RAWPK = 3, + GNUTLS_CRT_MAX = GNUTLS_CRT_RAWPK } gnutls_certificate_type_t; /** @@ -697,14 +842,22 @@ typedef enum gnutls_certificate_print_formats { #define GNUTLS_PK_ECC GNUTLS_PK_ECDSA #define GNUTLS_PK_EC GNUTLS_PK_ECDSA +#define GNUTLS_PK_ECDHX GNUTLS_PK_ECDH_X25519 /** * gnutls_pk_algorithm_t: * @GNUTLS_PK_UNKNOWN: Unknown public-key algorithm. * @GNUTLS_PK_RSA: RSA public-key algorithm. + * @GNUTLS_PK_RSA_PSS: RSA public-key algorithm, with PSS padding. * @GNUTLS_PK_DSA: DSA public-key algorithm. * @GNUTLS_PK_DH: Diffie-Hellman algorithm. Used to generate parameters. * @GNUTLS_PK_ECDSA: Elliptic curve algorithm. These parameters are compatible with the ECDSA and ECDH algorithm. - * @GNUTLS_PK_ECDHX: Elliptic curve algorithm, restricted to ECDH as per rfc7748. + * @GNUTLS_PK_ECDH_X25519: Elliptic curve algorithm, restricted to ECDH as per rfc7748. + * @GNUTLS_PK_EDDSA_ED25519: Edwards curve Digital signature algorithm. Used with SHA512 on signatures. + * @GNUTLS_PK_GOST_01: GOST R 34.10-2001 algorithm per rfc5832. + * @GNUTLS_PK_GOST_12_256: GOST R 34.10-2012 algorithm, 256-bit key per rfc7091. + * @GNUTLS_PK_GOST_12_512: GOST R 34.10-2012 algorithm, 512-bit key per rfc7091. + * @GNUTLS_PK_ECDH_X448: Elliptic curve algorithm, restricted to ECDH as per rfc7748. + * @GNUTLS_PK_EDDSA_ED448: Edwards curve Digital signature algorithm. Used with SHAKE256 on signatures. * * Enumeration of different public-key algorithms. */ @@ -714,8 +867,15 @@ typedef enum { GNUTLS_PK_DSA = 2, GNUTLS_PK_DH = 3, GNUTLS_PK_ECDSA = 4, - GNUTLS_PK_ECDHX = 5, - GNUTLS_PK_MAX = GNUTLS_PK_ECDHX + GNUTLS_PK_ECDH_X25519 = 5, + GNUTLS_PK_RSA_PSS = 6, + GNUTLS_PK_EDDSA_ED25519 = 7, + GNUTLS_PK_GOST_01 = 8, + GNUTLS_PK_GOST_12_256 = 9, + GNUTLS_PK_GOST_12_512 = 10, + GNUTLS_PK_ECDH_X448 = 11, + GNUTLS_PK_EDDSA_ED448 = 12, + GNUTLS_PK_MAX = GNUTLS_PK_EDDSA_ED448 } gnutls_pk_algorithm_t; @@ -724,6 +884,7 @@ const char *gnutls_pk_algorithm_get_name(gnutls_pk_algorithm_t algorithm); /** * gnutls_sign_algorithm_t: * @GNUTLS_SIGN_UNKNOWN: Unknown signature algorithm. + * @GNUTLS_SIGN_RSA_RAW: Digital signature algorithm RSA with DigestInfo formatted data * @GNUTLS_SIGN_RSA_SHA1: Digital signature algorithm RSA with SHA-1 * @GNUTLS_SIGN_RSA_SHA: Same as %GNUTLS_SIGN_RSA_SHA1. * @GNUTLS_SIGN_DSA_SHA1: Digital signature algorithm DSA with SHA-1 @@ -744,6 +905,9 @@ const char *gnutls_pk_algorithm_get_name(gnutls_pk_algorithm_t algorithm); * @GNUTLS_SIGN_ECDSA_SHA256: Digital signature algorithm ECDSA with SHA-256. * @GNUTLS_SIGN_ECDSA_SHA384: Digital signature algorithm ECDSA with SHA-384. * @GNUTLS_SIGN_ECDSA_SHA512: Digital signature algorithm ECDSA with SHA-512. + * @GNUTLS_SIGN_ECDSA_SECP256R1_SHA256: Digital signature algorithm ECDSA-SECP256R1 with SHA-256 (used in TLS 1.3 but not PKIX). + * @GNUTLS_SIGN_ECDSA_SECP384R1_SHA384: Digital signature algorithm ECDSA-SECP384R1 with SHA-384 (used in TLS 1.3 but not PKIX). + * @GNUTLS_SIGN_ECDSA_SECP521R1_SHA512: Digital signature algorithm ECDSA-SECP521R1 with SHA-512 (used in TLS 1.3 but not PKIX). * @GNUTLS_SIGN_ECDSA_SHA3_224: Digital signature algorithm ECDSA with SHA3-224. * @GNUTLS_SIGN_ECDSA_SHA3_256: Digital signature algorithm ECDSA with SHA3-256. * @GNUTLS_SIGN_ECDSA_SHA3_384: Digital signature algorithm ECDSA with SHA3-384. @@ -756,6 +920,26 @@ const char *gnutls_pk_algorithm_get_name(gnutls_pk_algorithm_t algorithm); * @GNUTLS_SIGN_RSA_SHA3_256: Digital signature algorithm RSA with SHA3-256. * @GNUTLS_SIGN_RSA_SHA3_384: Digital signature algorithm RSA with SHA3-384. * @GNUTLS_SIGN_RSA_SHA3_512: Digital signature algorithm RSA with SHA3-512. + * @GNUTLS_SIGN_RSA_PSS_RSAE_SHA256: Digital signature algorithm RSA with SHA-256, + * with PSS padding (RSA PKCS#1 1.5 certificate). This signature is identical + * to #GNUTLS_SIGN_RSA_PSS_SHA256, but they are distinct as the TLS1.3 protocol + * treats them differently. + * @GNUTLS_SIGN_RSA_PSS_RSAE_SHA384: Digital signature algorithm RSA with SHA-384, + * with PSS padding (RSA PKCS#1 1.5 certificate). This signature is identical + * to #GNUTLS_SIGN_RSA_PSS_SHA384, but they are distinct as the TLS1.3 protocol + * treats them differently. + * @GNUTLS_SIGN_RSA_PSS_RSAE_SHA512: Digital signature algorithm RSA with SHA-512, + * with PSS padding (RSA PKCS#1 1.5 certificate). This signature is identical + * to #GNUTLS_SIGN_RSA_PSS_SHA512, but they are distinct as the TLS1.3 protocol + * treats them differently. + * @GNUTLS_SIGN_RSA_PSS_SHA256: Digital signature algorithm RSA with SHA-256, with PSS padding (RSA-PSS certificate). + * @GNUTLS_SIGN_RSA_PSS_SHA384: Digital signature algorithm RSA with SHA-384, with PSS padding (RSA-PSS certificate). + * @GNUTLS_SIGN_RSA_PSS_SHA512: Digital signature algorithm RSA with SHA-512, with PSS padding (RSA-PSS certificate). + * @GNUTLS_SIGN_EDDSA_ED25519: Digital signature algorithm EdDSA with Ed25519 curve. + * @GNUTLS_SIGN_GOST_94: Digital signature algorithm GOST R 34.10-2001 with GOST R 34.11-94 + * @GNUTLS_SIGN_GOST_256: Digital signature algorithm GOST R 34.10-2012 with GOST R 34.11-2012 256 bit + * @GNUTLS_SIGN_GOST_512: Digital signature algorithm GOST R 34.10-2012 with GOST R 34.11-2012 512 bit + * @GNUTLS_SIGN_EDDSA_ED448: Digital signature algorithm EdDSA with Ed448 curve. * * Enumeration of different digital signature algorithms. */ @@ -794,7 +978,26 @@ typedef enum { GNUTLS_SIGN_RSA_SHA3_256 = 29, GNUTLS_SIGN_RSA_SHA3_384 = 30, GNUTLS_SIGN_RSA_SHA3_512 = 31, - GNUTLS_SIGN_MAX = GNUTLS_SIGN_RSA_SHA3_512 + + GNUTLS_SIGN_RSA_PSS_SHA256 = 32, + GNUTLS_SIGN_RSA_PSS_SHA384 = 33, + GNUTLS_SIGN_RSA_PSS_SHA512 = 34, + GNUTLS_SIGN_EDDSA_ED25519 = 35, + GNUTLS_SIGN_RSA_RAW = 36, + + GNUTLS_SIGN_ECDSA_SECP256R1_SHA256 = 37, + GNUTLS_SIGN_ECDSA_SECP384R1_SHA384 = 38, + GNUTLS_SIGN_ECDSA_SECP521R1_SHA512 = 39, + + GNUTLS_SIGN_RSA_PSS_RSAE_SHA256 = 40, + GNUTLS_SIGN_RSA_PSS_RSAE_SHA384 = 41, + GNUTLS_SIGN_RSA_PSS_RSAE_SHA512 = 42, + + GNUTLS_SIGN_GOST_94 = 43, + GNUTLS_SIGN_GOST_256 = 44, + GNUTLS_SIGN_GOST_512 = 45, + GNUTLS_SIGN_EDDSA_ED448 = 46, + GNUTLS_SIGN_MAX = GNUTLS_SIGN_EDDSA_ED448 } gnutls_sign_algorithm_t; /** @@ -806,6 +1009,21 @@ typedef enum { * @GNUTLS_ECC_CURVE_SECP384R1: the SECP384R1 curve * @GNUTLS_ECC_CURVE_SECP521R1: the SECP521R1 curve * @GNUTLS_ECC_CURVE_X25519: the X25519 curve (ECDH only) + * @GNUTLS_ECC_CURVE_ED25519: the Ed25519 curve + * @GNUTLS_ECC_CURVE_GOST256CPA: GOST R 34.10 CryptoPro 256 A curve + * @GNUTLS_ECC_CURVE_GOST256CPB: GOST R 34.10 CryptoPro 256 B curve + * @GNUTLS_ECC_CURVE_GOST256CPC: GOST R 34.10 CryptoPro 256 C curve + * @GNUTLS_ECC_CURVE_GOST256CPXA: GOST R 34.10 CryptoPro 256 XchA curve + * @GNUTLS_ECC_CURVE_GOST256CPXB: GOST R 34.10 CryptoPro 256 XchB curve + * @GNUTLS_ECC_CURVE_GOST512A: GOST R 34.10 TC26 512 A curve + * @GNUTLS_ECC_CURVE_GOST512B: GOST R 34.10 TC26 512 B curve + * @GNUTLS_ECC_CURVE_GOST512C: GOST R 34.10 TC26 512 C curve + * @GNUTLS_ECC_CURVE_GOST256A: GOST R 34.10 TC26 256 A curve + * @GNUTLS_ECC_CURVE_GOST256B: GOST R 34.10 TC26 256 B curve + * @GNUTLS_ECC_CURVE_GOST256C: GOST R 34.10 TC26 256 C curve + * @GNUTLS_ECC_CURVE_GOST256D: GOST R 34.10 TC26 256 D curve + * @GNUTLS_ECC_CURVE_X448: the X448 curve (ECDH only) + * @GNUTLS_ECC_CURVE_ED448: the Ed448 curve * * Enumeration of ECC curves. */ @@ -817,9 +1035,77 @@ typedef enum { GNUTLS_ECC_CURVE_SECP521R1, GNUTLS_ECC_CURVE_SECP192R1, GNUTLS_ECC_CURVE_X25519, - GNUTLS_ECC_CURVE_MAX = GNUTLS_ECC_CURVE_X25519 + GNUTLS_ECC_CURVE_ED25519, + GNUTLS_ECC_CURVE_GOST256CPA, + GNUTLS_ECC_CURVE_GOST256CPB, + GNUTLS_ECC_CURVE_GOST256CPC, + GNUTLS_ECC_CURVE_GOST256CPXA, + GNUTLS_ECC_CURVE_GOST256CPXB, + GNUTLS_ECC_CURVE_GOST512A, + GNUTLS_ECC_CURVE_GOST512B, + GNUTLS_ECC_CURVE_GOST512C, + GNUTLS_ECC_CURVE_GOST256A, + GNUTLS_ECC_CURVE_GOST256B, + GNUTLS_ECC_CURVE_GOST256C, + GNUTLS_ECC_CURVE_GOST256D, + GNUTLS_ECC_CURVE_X448, + GNUTLS_ECC_CURVE_ED448, + GNUTLS_ECC_CURVE_MAX = GNUTLS_ECC_CURVE_ED448 } gnutls_ecc_curve_t; +/** + * gnutls_group_t: + * @GNUTLS_GROUP_INVALID: Indicates unknown/invalid group + * @GNUTLS_GROUP_SECP192R1: the SECP192R1 curve group (legacy, only for TLS 1.2 compatibility) + * @GNUTLS_GROUP_SECP224R1: the SECP224R1 curve group (legacy, only for TLS 1.2 compatibility) + * @GNUTLS_GROUP_SECP256R1: the SECP256R1 curve group + * @GNUTLS_GROUP_SECP384R1: the SECP384R1 curve group + * @GNUTLS_GROUP_SECP521R1: the SECP521R1 curve group + * @GNUTLS_GROUP_X25519: the X25519 curve group + * @GNUTLS_GROUP_GC256A: the GOST R 34.10 TC26 256 A curve group + * @GNUTLS_GROUP_GC256B: the GOST R 34.10 TC26 256 B curve group + * @GNUTLS_GROUP_GC256C: the GOST R 34.10 TC26 256 C curve group + * @GNUTLS_GROUP_GC256D: the GOST R 34.10 TC26 256 D curve group + * @GNUTLS_GROUP_GC512A: the GOST R 34.10 TC26 512 A curve group + * @GNUTLS_GROUP_GC512B: the GOST R 34.10 TC26 512 B curve group + * @GNUTLS_GROUP_GC512C: the GOST R 34.10 TC26 512 C curve group + * @GNUTLS_GROUP_FFDHE2048: the FFDHE2048 group + * @GNUTLS_GROUP_FFDHE3072: the FFDHE3072 group + * @GNUTLS_GROUP_FFDHE4096: the FFDHE4096 group + * @GNUTLS_GROUP_FFDHE6144: the FFDHE6144 group + * @GNUTLS_GROUP_FFDHE8192: the FFDHE8192 group + * @GNUTLS_GROUP_X448: the X448 curve group + * + * Enumeration of supported groups. It is intended to be backwards + * compatible with the enumerations in %gnutls_ecc_curve_t for the groups + * which are valid elliptic curves. + */ +typedef enum { + GNUTLS_GROUP_INVALID = 0, + GNUTLS_GROUP_SECP192R1 = GNUTLS_ECC_CURVE_SECP192R1, + GNUTLS_GROUP_SECP224R1 = GNUTLS_ECC_CURVE_SECP224R1, + GNUTLS_GROUP_SECP256R1 = GNUTLS_ECC_CURVE_SECP256R1, + GNUTLS_GROUP_SECP384R1 = GNUTLS_ECC_CURVE_SECP384R1, + GNUTLS_GROUP_SECP521R1 = GNUTLS_ECC_CURVE_SECP521R1, + GNUTLS_GROUP_X25519 = GNUTLS_ECC_CURVE_X25519, + GNUTLS_GROUP_X448 = GNUTLS_ECC_CURVE_X448, + + GNUTLS_GROUP_GC256A = GNUTLS_ECC_CURVE_GOST256A, + GNUTLS_GROUP_GC256B = GNUTLS_ECC_CURVE_GOST256B, + GNUTLS_GROUP_GC256C = GNUTLS_ECC_CURVE_GOST256C, + GNUTLS_GROUP_GC256D = GNUTLS_ECC_CURVE_GOST256D, + GNUTLS_GROUP_GC512A = GNUTLS_ECC_CURVE_GOST512A, + GNUTLS_GROUP_GC512B = GNUTLS_ECC_CURVE_GOST512B, + GNUTLS_GROUP_GC512C = GNUTLS_ECC_CURVE_GOST512C, + + GNUTLS_GROUP_FFDHE2048 = 256, + GNUTLS_GROUP_FFDHE3072, + GNUTLS_GROUP_FFDHE4096, + GNUTLS_GROUP_FFDHE8192, + GNUTLS_GROUP_FFDHE6144, + GNUTLS_GROUP_MAX = GNUTLS_GROUP_FFDHE6144, +} gnutls_group_t; + /* macros to allow specifying a specific curve in gnutls_privkey_generate() * and gnutls_x509_privkey_generate() */ #define GNUTLS_CURVE_TO_BITS(curve) (unsigned int)(((unsigned int)1<<31)|((unsigned int)(curve))) @@ -870,6 +1156,43 @@ typedef enum { GNUTLS_CB_TLS_UNIQUE } gnutls_channel_binding_t; +/** + * gnutls_gost_paramset_t: + * @GNUTLS_GOST_PARAMSET_UNKNOWN: Unknown/default parameter set + * @GNUTLS_GOST_PARAMSET_TC26_Z: Specified by TC26, see rfc7836 + * @GNUTLS_GOST_PARAMSET_CP_A: CryptoPro-A, see rfc4357 + * @GNUTLS_GOST_PARAMSET_CP_B: CryptoPro-B, see rfc4357 + * @GNUTLS_GOST_PARAMSET_CP_C: CryptoPro-C, see rfc4357 + * @GNUTLS_GOST_PARAMSET_CP_D: CryptoPro-D, see rfc4357 + * + * Enumeration of different GOST 28147 parameter sets. + */ +typedef enum { + GNUTLS_GOST_PARAMSET_UNKNOWN = 0, + GNUTLS_GOST_PARAMSET_TC26_Z, + GNUTLS_GOST_PARAMSET_CP_A, + GNUTLS_GOST_PARAMSET_CP_B, + GNUTLS_GOST_PARAMSET_CP_C, + GNUTLS_GOST_PARAMSET_CP_D +} gnutls_gost_paramset_t; + +/** + * gnutls_ctype_target_t: + * @GNUTLS_CTYPE_CLIENT: for requesting client certificate type values. + * @GNUTLS_CTYPE_SERVER: for requesting server certificate type values. + * @GNUTLS_CTYPE_OURS: for requesting our certificate type values. + * @GNUTLS_CTYPE_PEERS: for requesting the peers' certificate type values. + * + * Enumeration of certificate type targets with respect to asymmetric + * certificate types as specified in RFC7250 and P2P connection set up + * as specified in draft-vanrein-tls-symmetry-02. + */ +typedef enum { + GNUTLS_CTYPE_CLIENT, + GNUTLS_CTYPE_SERVER, + GNUTLS_CTYPE_OURS, + GNUTLS_CTYPE_PEERS +} gnutls_ctype_target_t; /* If you want to change this, then also change the define in * gnutls_int.h, and recompile. @@ -917,12 +1240,17 @@ int gnutls_bye(gnutls_session_t session, gnutls_close_request_t how); int gnutls_handshake(gnutls_session_t session); +int gnutls_reauth(gnutls_session_t session, unsigned int flags); + #define GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT ((unsigned int)-1) #define GNUTLS_INDEFINITE_TIMEOUT ((unsigned int)-2) void gnutls_handshake_set_timeout(gnutls_session_t session, unsigned int ms); int gnutls_rehandshake(gnutls_session_t session); +#define GNUTLS_KU_PEER 1 +int gnutls_session_key_update(gnutls_session_t session, unsigned flags); + gnutls_alert_description_t gnutls_alert_get(gnutls_session_t session); int gnutls_alert_send(gnutls_session_t session, gnutls_alert_level_t level, @@ -945,18 +1273,25 @@ const char * const char * gnutls_ecc_curve_get_oid(gnutls_ecc_curve_t curve) __GNUTLS_CONST__; +const char * + gnutls_group_get_name(gnutls_group_t group) __GNUTLS_CONST__; + int gnutls_ecc_curve_get_size(gnutls_ecc_curve_t curve) __GNUTLS_CONST__; gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session); +gnutls_group_t gnutls_group_get(gnutls_session_t session); + /* get information on the current session */ gnutls_cipher_algorithm_t gnutls_cipher_get(gnutls_session_t session); gnutls_kx_algorithm_t gnutls_kx_get(gnutls_session_t session); gnutls_mac_algorithm_t gnutls_mac_get(gnutls_session_t session); -gnutls_compression_method_t -gnutls_compression_get(gnutls_session_t session); +gnutls_digest_algorithm_t gnutls_prf_hash_get(const gnutls_session_t session); gnutls_certificate_type_t gnutls_certificate_type_get(gnutls_session_t session); +gnutls_certificate_type_t +gnutls_certificate_type_get2(gnutls_session_t session, + gnutls_ctype_target_t target); int gnutls_sign_algorithm_get(gnutls_session_t session); int gnutls_sign_algorithm_get_client(gnutls_session_t session); @@ -976,9 +1311,6 @@ const char * const char * gnutls_digest_get_oid(gnutls_digest_algorithm_t algorithm) __GNUTLS_CONST__; -const char * -gnutls_compression_get_name(gnutls_compression_method_t - algorithm) __GNUTLS_CONST__; const char * gnutls_kx_get_name(gnutls_kx_algorithm_t algorithm) __GNUTLS_CONST__; const char * @@ -991,15 +1323,27 @@ const char * const char * gnutls_sign_get_name(gnutls_sign_algorithm_t algorithm) __GNUTLS_CONST__; + +const char *gnutls_sign_get_oid(gnutls_sign_algorithm_t sign) __GNUTLS_CONST__; + +const char * + gnutls_gost_paramset_get_name(gnutls_gost_paramset_t param) __GNUTLS_CONST__; const char * - gnutls_sign_get_oid(gnutls_sign_algorithm_t algorithm) __GNUTLS_CONST__; + gnutls_gost_paramset_get_oid(gnutls_gost_paramset_t param) __GNUTLS_CONST__; size_t gnutls_cipher_get_key_size(gnutls_cipher_algorithm_t algorithm) __GNUTLS_CONST__; size_t gnutls_mac_get_key_size(gnutls_mac_algorithm_t algorithm) __GNUTLS_CONST__; -int gnutls_sign_is_secure(gnutls_sign_algorithm_t algorithm) __GNUTLS_CONST__; +unsigned gnutls_sign_is_secure(gnutls_sign_algorithm_t algorithm) __GNUTLS_CONST__; + +/* It is possible that a signature algorithm is ok to use for short-lived + * data (e.g., to sign a TLS session), but not for data that are long-lived + * like certificates. This flag is about checking the security of the algorithm + * for long-lived data. */ +#define GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS 1 +unsigned gnutls_sign_is_secure2(gnutls_sign_algorithm_t algorithm, unsigned int flags) __GNUTLS_CONST__; gnutls_digest_algorithm_t gnutls_sign_get_hash_algorithm(gnutls_sign_algorithm_t sign) __GNUTLS_CONST__; @@ -1009,13 +1353,14 @@ gnutls_sign_algorithm_t gnutls_pk_to_sign(gnutls_pk_algorithm_t pk, gnutls_digest_algorithm_t hash) __GNUTLS_CONST__; +unsigned +gnutls_sign_supports_pk_algorithm(gnutls_sign_algorithm_t sign, gnutls_pk_algorithm_t pk) __GNUTLS_CONST__; + #define gnutls_sign_algorithm_get_name gnutls_sign_get_name gnutls_mac_algorithm_t gnutls_mac_get_id(const char *name) __GNUTLS_CONST__; gnutls_digest_algorithm_t gnutls_digest_get_id(const char *name) __GNUTLS_CONST__; -gnutls_compression_method_t - gnutls_compression_get_id(const char *name) __GNUTLS_CONST__; gnutls_cipher_algorithm_t gnutls_cipher_get_id(const char *name) __GNUTLS_CONST__; @@ -1031,6 +1376,7 @@ gnutls_sign_algorithm_t gnutls_sign_get_id(const char *name) __GNUTLS_CONST__; gnutls_ecc_curve_t gnutls_ecc_curve_get_id(const char *name) __GNUTLS_CONST__; gnutls_pk_algorithm_t gnutls_ecc_curve_get_pk(gnutls_ecc_curve_t curve) __GNUTLS_CONST__; +gnutls_group_t gnutls_group_get_id(const char *name); gnutls_digest_algorithm_t gnutls_oid_to_digest(const char *oid) __GNUTLS_CONST__; @@ -1042,18 +1388,20 @@ gnutls_sign_algorithm_t gnutls_oid_to_sign(const char *oid) __GNUTLS_CONST__; gnutls_ecc_curve_t gnutls_oid_to_ecc_curve(const char *oid) __GNUTLS_CONST__; +gnutls_gost_paramset_t + gnutls_oid_to_gost_paramset(const char *oid) __GNUTLS_CONST__; /* list supported algorithms */ const gnutls_ecc_curve_t * gnutls_ecc_curve_list(void) __GNUTLS_PURE__; +const gnutls_group_t * + gnutls_group_list(void) __GNUTLS_PURE__; const gnutls_cipher_algorithm_t * gnutls_cipher_list(void) __GNUTLS_PURE__; const gnutls_mac_algorithm_t * gnutls_mac_list(void) __GNUTLS_PURE__; const gnutls_digest_algorithm_t * gnutls_digest_list(void) __GNUTLS_PURE__; -const gnutls_compression_method_t * - gnutls_compression_list(void) __GNUTLS_PURE__; const gnutls_protocol_t * gnutls_protocol_list(void) __GNUTLS_PURE__; const gnutls_certificate_type_t * @@ -1118,7 +1466,7 @@ gnutls_record_get_state(gnutls_session_t session, int gnutls_record_set_state(gnutls_session_t session, unsigned read, - unsigned char seq_number[8]); + const unsigned char seq_number[8]); typedef struct { size_t low; @@ -1132,6 +1480,8 @@ int gnutls_range_split(gnutls_session_t session, ssize_t gnutls_record_send(gnutls_session_t session, const void *data, size_t data_size); +ssize_t gnutls_record_send2(gnutls_session_t session, const void *data, + size_t data_size, size_t pad, unsigned flags); ssize_t gnutls_record_send_range(gnutls_session_t session, const void *data, size_t data_size, const gnutls_range_st * range); @@ -1141,7 +1491,7 @@ ssize_t gnutls_record_recv(gnutls_session_t session, void *data, typedef struct mbuffer_st *gnutls_packet_t; ssize_t -gnutls_record_recv_packet(gnutls_session_t session, +gnutls_record_recv_packet(gnutls_session_t session, gnutls_packet_t *packet); void gnutls_packet_get(gnutls_packet_t packet, gnutls_datum_t *data, unsigned char *sequence); @@ -1164,16 +1514,26 @@ size_t void gnutls_session_enable_compatibility_mode(gnutls_session_t session); #define gnutls_record_set_max_empty_records(session, x) -int gnutls_record_can_use_length_hiding(gnutls_session_t session); +unsigned gnutls_record_can_use_length_hiding(gnutls_session_t session); int gnutls_record_get_direction(gnutls_session_t session); size_t gnutls_record_get_max_size(gnutls_session_t session); ssize_t gnutls_record_set_max_size(gnutls_session_t session, size_t size); +ssize_t gnutls_record_set_max_recv_size(gnutls_session_t session, size_t size); size_t gnutls_record_check_pending(gnutls_session_t session); size_t gnutls_record_check_corked(gnutls_session_t session); +size_t gnutls_record_get_max_early_data_size(gnutls_session_t session); +int gnutls_record_set_max_early_data_size(gnutls_session_t session, size_t size); +ssize_t gnutls_record_send_early_data(gnutls_session_t session, + const void *data, + size_t length); +ssize_t gnutls_record_recv_early_data(gnutls_session_t session, + void *data, + size_t data_size); + void gnutls_session_force_valid(gnutls_session_t session); int gnutls_prf(gnutls_session_t session, @@ -1185,6 +1545,10 @@ int gnutls_prf_rfc5705(gnutls_session_t session, size_t label_size, const char *label, size_t context_size, const char *context, size_t outsize, char *out); +int gnutls_prf_early(gnutls_session_t session, + size_t label_size, const char *label, + size_t context_size, const char *context, + size_t outsize, char *out); int gnutls_prf_raw(gnutls_session_t session, size_t label_size, const char *label, @@ -1233,9 +1597,16 @@ unsigned gnutls_session_etm_status(gnutls_session_t session); * @GNUTLS_SFLAGS_SAFE_RENEGOTIATION: Safe renegotiation (RFC5746) was used * @GNUTLS_SFLAGS_EXT_MASTER_SECRET: The extended master secret (RFC7627) extension was used * @GNUTLS_SFLAGS_ETM: The encrypt then MAC (RFC7366) extension was used + * @GNUTLS_SFLAGS_RFC7919: The RFC7919 Diffie-Hellman parameters were negotiated * @GNUTLS_SFLAGS_HB_LOCAL_SEND: The heartbeat negotiation allows the local side to send heartbeat messages * @GNUTLS_SFLAGS_HB_PEER_SEND: The heartbeat negotiation allows the peer to send heartbeat messages - * @GNUTLS_SFLAGS_FALSE_START: The appdata set with gnutls_handshake_set_appdata() were sent during handshake (false start) + * @GNUTLS_SFLAGS_FALSE_START: False start was used in this client session. + * @GNUTLS_SFLAGS_SESSION_TICKET: A session ticket has been received by the server. + * @GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH: Indicates client capability for post-handshake auth; set only on server side. + * @GNUTLS_SFLAGS_EARLY_START: The TLS1.3 server session returned early. + * @GNUTLS_SFLAGS_EARLY_DATA: The TLS1.3 early data has been received by the server. + * @GNUTLS_SFLAGS_CLI_REQUESTED_OCSP: Set when the client has requested OCSP staple during handshake. + * @GNUTLS_SFLAGS_SERV_REQUESTED_OCSP: Set when the server has requested OCSP staple during handshake. * * Enumeration of different session parameters. */ @@ -1245,7 +1616,14 @@ typedef enum { GNUTLS_SFLAGS_ETM = 1<<2, GNUTLS_SFLAGS_HB_LOCAL_SEND = 1<<3, GNUTLS_SFLAGS_HB_PEER_SEND = 1<<4, - GNUTLS_SFLAGS_FALSE_START = 1<<5 + GNUTLS_SFLAGS_FALSE_START = 1<<5, + GNUTLS_SFLAGS_RFC7919 = 1<<6, + GNUTLS_SFLAGS_SESSION_TICKET = 1<<7, + GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH = 1<<8, + GNUTLS_SFLAGS_EARLY_START = 1<<9, + GNUTLS_SFLAGS_EARLY_DATA = 1<<10, + GNUTLS_SFLAGS_CLI_REQUESTED_OCSP = 1<<11, + GNUTLS_SFLAGS_SERV_REQUESTED_OCSP = 1<<12 } gnutls_session_flags_t; unsigned gnutls_session_get_flags(gnutls_session_t session); @@ -1269,6 +1647,8 @@ int gnutls_session_ticket_enable_client(gnutls_session_t session); int gnutls_session_ticket_enable_server(gnutls_session_t session, const gnutls_datum_t * key); +int gnutls_session_ticket_send(gnutls_session_t session, unsigned nr, unsigned flags); + /* SRTP, RFC 5764 */ /** @@ -1335,11 +1715,13 @@ int gnutls_alpn_set_protocols(gnutls_session_t session, int gnutls_key_generate(gnutls_datum_t * key, unsigned int key_size); -/* if you just want some defaults, use the following. - */ +#define GNUTLS_PRIORITY_INIT_DEF_APPEND 1 int gnutls_priority_init(gnutls_priority_t * priority_cache, const char *priorities, const char **err_pos); +int gnutls_priority_init2(gnutls_priority_t * priority_cache, + const char *priorities, const char **err_pos, + unsigned flags); void gnutls_priority_deinit(gnutls_priority_t priority_cache); int gnutls_priority_get_cipher_suite_index(gnutls_priority_t pcache, unsigned int idx, @@ -1352,20 +1734,25 @@ gnutls_priority_string_list(unsigned iter, unsigned int flags); int gnutls_priority_set(gnutls_session_t session, gnutls_priority_t priority); + int gnutls_priority_set_direct(gnutls_session_t session, const char *priorities, const char **err_pos); int gnutls_priority_certificate_type_list(gnutls_priority_t pcache, const unsigned int **list); +int gnutls_priority_certificate_type_list2(gnutls_priority_t pcache, + const unsigned int **list, + gnutls_ctype_target_t target); int gnutls_priority_sign_list(gnutls_priority_t pcache, const unsigned int **list); int gnutls_priority_protocol_list(gnutls_priority_t pcache, const unsigned int **list); -int gnutls_priority_compression_list(gnutls_priority_t pcache, - const unsigned int **list); int gnutls_priority_ecc_curve_list(gnutls_priority_t pcache, const unsigned int **list); +int +gnutls_priority_group_list(gnutls_priority_t pcache, + const unsigned int **list); int gnutls_priority_kx_list(gnutls_priority_t pcache, const unsigned int **list); @@ -1374,9 +1761,13 @@ int gnutls_priority_cipher_list(gnutls_priority_t pcache, int gnutls_priority_mac_list(gnutls_priority_t pcache, const unsigned int **list); - /* for compatibility - */ +const char *gnutls_get_system_config_file(void); + int gnutls_set_default_priority(gnutls_session_t session); +int gnutls_set_default_priority_append(gnutls_session_t session, + const char *add_prio, + const char **err_pos, + unsigned flags); /* Returns the name of a cipher suite */ const char * @@ -1391,7 +1782,7 @@ const char * gnutls_protocol_get_name(gnutls_protocol_t version) __GNUTLS_CONST__; -/* get/set session +/* get/set session */ int gnutls_session_set_data(gnutls_session_t session, const void *session_data, @@ -1482,7 +1873,7 @@ int gnutls_session_channel_binding(gnutls_session_t session, gnutls_channel_binding_t cbtype, gnutls_datum_t * cb); -/* checks if this session is a resumed one +/* checks if this session is a resumed one */ int gnutls_session_is_resumed(gnutls_session_t session); int gnutls_session_resumption_requested(gnutls_session_t session); @@ -1507,12 +1898,13 @@ void *gnutls_db_get_ptr(gnutls_session_t session); int gnutls_db_check_entry(gnutls_session_t session, gnutls_datum_t session_entry); time_t gnutls_db_check_entry_time(gnutls_datum_t * entry); +time_t gnutls_db_check_entry_expire_time(gnutls_datum_t * entry); /** * gnutls_handshake_hook_func: * @session: the current session * @htype: the type of the handshake message (%gnutls_handshake_description_t) - * @post: non zero if this is a post-process/generation call and zero otherwise + * @when: non zero if this is a post-process/generation call and zero otherwise * @incoming: non zero if this is an incoming message and zero if this is an outgoing message * @msg: the (const) data of the handshake message without the handshake headers. * @@ -1527,11 +1919,11 @@ time_t gnutls_db_check_entry_time(gnutls_datum_t * entry); typedef int (*gnutls_handshake_hook_func) (gnutls_session_t, unsigned int htype, - unsigned post, + unsigned when, unsigned int incoming, const gnutls_datum_t *msg); void gnutls_handshake_set_hook_function(gnutls_session_t session, - unsigned int htype, int post, + unsigned int htype, int when, gnutls_handshake_hook_func func); #define gnutls_handshake_post_client_hello_func gnutls_handshake_simple_hook_func @@ -1650,17 +2042,6 @@ int gnutls_certificate_get_crt_raw(gnutls_certificate_credentials_t sc, unsigned idx1, unsigned idx2, gnutls_datum_t * cert); -int -gnutls_certificate_get_x509_crt(gnutls_certificate_credentials_t res, - unsigned index, - gnutls_x509_crt_t **crt_list, - unsigned *crt_list_size); - -int -gnutls_certificate_get_x509_key(gnutls_certificate_credentials_t res, - unsigned index, - gnutls_x509_privkey_t *key); - void gnutls_certificate_free_keys(gnutls_certificate_credentials_t sc); void gnutls_certificate_free_cas(gnutls_certificate_credentials_t sc); void gnutls_certificate_free_ca_names(gnutls_certificate_credentials_t sc); @@ -1680,12 +2061,18 @@ gnutls_certificate_get_verify_flags(gnutls_certificate_credentials_t res); * gnutls_certificate_flags: * @GNUTLS_CERTIFICATE_SKIP_KEY_CERT_MATCH: Skip the key and certificate matching check. * @GNUTLS_CERTIFICATE_API_V2: If set the gnutls_certificate_set_*key* functions will return an index of the added key pair instead of zero. + * @GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK: If set, the gnutls_certificate_set_ocsp_status_request_file + * function, will not check whether the response set matches any of the certificates. + * @GNUTLS_CERTIFICATE_VERIFY_CRLS: This will enable CRL verification when added in the certificate structure. + * When used, it requires CAs to be added before CRLs. * * Enumeration of different certificate credentials flags. */ typedef enum gnutls_certificate_flags { GNUTLS_CERTIFICATE_SKIP_KEY_CERT_MATCH = 1, - GNUTLS_CERTIFICATE_API_V2 = (1<<1) + GNUTLS_CERTIFICATE_API_V2 = (1<<1), + GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK = (1<<2), + GNUTLS_CERTIFICATE_VERIFY_CRLS = (1<<3) } gnutls_certificate_flags; void gnutls_certificate_set_flags(gnutls_certificate_credentials_t, @@ -1695,9 +2082,6 @@ void gnutls_certificate_set_verify_limits(gnutls_certificate_credentials_t res, unsigned int max_bits, unsigned int max_depth); -unsigned int -gnutls_certificate_get_verify_flags(gnutls_certificate_credentials_t); - int gnutls_certificate_set_x509_system_trust(gnutls_certificate_credentials_t cred); @@ -1785,7 +2169,7 @@ int gnutls_certificate_get_x509_crt(gnutls_certificate_credentials_t res, /* OCSP status request extension, RFC 6066 */ typedef int (*gnutls_status_request_ocsp_func) - (gnutls_session_t session, void *ptr, gnutls_datum_t * ocsp_response); + (gnutls_session_t session, void *ptr, gnutls_datum_t *ocsp_response); void gnutls_certificate_set_ocsp_status_request_function @@ -1802,6 +2186,29 @@ gnutls_certificate_set_ocsp_status_request_file (gnutls_certificate_credentials_t res, const char *response_file, unsigned idx); +int +gnutls_certificate_set_ocsp_status_request_file2 +(gnutls_certificate_credentials_t res, const char *response_file, + unsigned idx, gnutls_x509_crt_fmt_t fmt); + +int +gnutls_certificate_set_ocsp_status_request_mem +(gnutls_certificate_credentials_t res, const gnutls_datum_t *resp, + unsigned idx, gnutls_x509_crt_fmt_t fmt); + +typedef struct gnutls_ocsp_data_st { + unsigned int version; /* must be zero */ + gnutls_datum_t response; + time_t exptime; + unsigned char padding[32]; +} gnutls_ocsp_data_st; + +time_t +gnutls_certificate_get_ocsp_expiration(gnutls_certificate_credentials_t sc, + unsigned idx, + int oidx, + unsigned flags); + int gnutls_ocsp_status_request_enable_client(gnutls_session_t session, gnutls_datum_t * responder_id, size_t responder_id_size, @@ -1812,8 +2219,36 @@ int gnutls_ocsp_status_request_get(gnutls_session_t session, gnutls_datum_t * response); #define GNUTLS_OCSP_SR_IS_AVAIL 1 -int gnutls_ocsp_status_request_is_checked(gnutls_session_t session, - unsigned int flags); +unsigned gnutls_ocsp_status_request_is_checked(gnutls_session_t session, + unsigned int flags); + +int +gnutls_ocsp_status_request_get2(gnutls_session_t session, + unsigned idx, + gnutls_datum_t * response); + +/* RAW public key functions (RFC7250) */ +int gnutls_certificate_set_rawpk_key_mem(gnutls_certificate_credentials_t cred, + const gnutls_datum_t* spki, + const gnutls_datum_t* pkey, + gnutls_x509_crt_fmt_t format, + const char* pass, + unsigned int key_usage, + const char **names, + unsigned int names_length, + unsigned int flags); + +int gnutls_certificate_set_rawpk_key_file(gnutls_certificate_credentials_t cred, + const char* rawpkfile, + const char* privkeyfile, + gnutls_x509_crt_fmt_t format, + const char *pass, + unsigned int key_usage, + const char **names, + unsigned int names_length, + unsigned int privkey_flags, + unsigned int pkcs11_flags); + /* global state functions */ @@ -1855,6 +2290,10 @@ extern _SYM_EXPORT gnutls_realloc_function gnutls_realloc; extern _SYM_EXPORT gnutls_calloc_function gnutls_calloc; extern _SYM_EXPORT gnutls_free_function gnutls_free; +#ifdef GNUTLS_INTERNAL_BUILD +#define gnutls_free(a) gnutls_free((void *) (a)), a=NULL +#endif + extern _SYM_EXPORT char *(*gnutls_strdup) (const char *); /* a variant of memset that doesn't get optimized out */ @@ -1869,6 +2308,25 @@ void gnutls_global_set_log_function(gnutls_log_func log_func); void gnutls_global_set_audit_log_function(gnutls_audit_log_func log_func); void gnutls_global_set_log_level(int level); + /** + * gnutls_keylog_func: + * @session: the current session + * @label: the keylog label + * @secret: the (const) data of the derived secret. + * + * Function prototype for keylog hooks. It is set using + * gnutls_session_set_keylog_function(). + * + * Returns: Non zero on error. + * Since: 3.6.13 + */ +typedef int (*gnutls_keylog_func) (gnutls_session_t session, + const char *label, + const gnutls_datum_t *secret); +gnutls_keylog_func gnutls_session_get_keylog_function(const gnutls_session_t session); +void gnutls_session_set_keylog_function(gnutls_session_t session, + gnutls_keylog_func func); + /* Diffie-Hellman parameter handling. */ int gnutls_dh_params_init(gnutls_dh_params_t * dh_params); @@ -1881,6 +2339,10 @@ int gnutls_dh_params_import_raw2(gnutls_dh_params_t dh_params, const gnutls_datum_t * prime, const gnutls_datum_t * generator, unsigned key_bits); +int gnutls_dh_params_import_raw3(gnutls_dh_params_t dh_params, + const gnutls_datum_t * prime, + const gnutls_datum_t * q, + const gnutls_datum_t * generator); int gnutls_dh_params_import_pkcs3(gnutls_dh_params_t params, const gnutls_datum_t * pkcs3_params, gnutls_x509_crt_fmt_t format); @@ -1957,7 +2419,7 @@ void gnutls_transport_set_errno_function(gnutls_session_t session, void gnutls_transport_set_errno(gnutls_session_t session, int err); -/* session specific +/* session specific */ void gnutls_session_set_ptr(gnutls_session_t session, void *ptr); void *gnutls_session_get_ptr(gnutls_session_t session); @@ -1990,7 +2452,7 @@ int gnutls_random_art(gnutls_random_art_t type, int gnutls_idna_map(const char * input, unsigned ilen, gnutls_datum_t *out, unsigned flags); int gnutls_idna_reverse_map(const char *input, unsigned ilen, gnutls_datum_t *out, unsigned flags); -/* SRP +/* SRP */ typedef struct gnutls_srp_server_credentials_st @@ -2031,6 +2493,9 @@ int gnutls_srp_verifier(const char *username, /* The static parameters defined in draft-ietf-tls-srp-05 * Those should be used as input to gnutls_srp_verifier(). */ +extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_8192_group_prime; +extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_8192_group_generator; + extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_4096_group_prime; extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_4096_group_generator; @@ -2050,18 +2515,27 @@ extern _SYM_EXPORT const gnutls_datum_t gnutls_srp_1024_group_generator; */ extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_8192_group_prime; +extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_8192_group_q; extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_8192_group_generator; extern _SYM_EXPORT const unsigned int gnutls_ffdhe_8192_key_bits; +extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_6144_group_prime; +extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_6144_group_q; +extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_6144_group_generator; +extern _SYM_EXPORT const unsigned int gnutls_ffdhe_6144_key_bits; + extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_4096_group_prime; +extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_4096_group_q; extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_4096_group_generator; extern _SYM_EXPORT const unsigned int gnutls_ffdhe_4096_key_bits; extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_3072_group_prime; +extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_3072_group_q; extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_3072_group_generator; extern _SYM_EXPORT const unsigned int gnutls_ffdhe_3072_key_bits; extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_2048_group_prime; +extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_2048_group_q; extern _SYM_EXPORT const gnutls_datum_t gnutls_ffdhe_2048_group_generator; extern _SYM_EXPORT const unsigned int gnutls_ffdhe_2048_key_bits; @@ -2133,6 +2607,10 @@ int gnutls_psk_set_client_credentials(gnutls_psk_client_credentials_t res, const char *username, const gnutls_datum_t * key, gnutls_psk_key_flags flags); +int gnutls_psk_set_client_credentials2(gnutls_psk_client_credentials_t res, + const gnutls_datum_t *username, + const gnutls_datum_t *key, + gnutls_psk_key_flags flags); void gnutls_psk_free_server_credentials(gnutls_psk_server_credentials_t sc); @@ -2147,25 +2625,39 @@ gnutls_psk_set_server_credentials_hint(gnutls_psk_server_credentials_t res, const char *hint); const char *gnutls_psk_server_get_username(gnutls_session_t session); +int gnutls_psk_server_get_username2(gnutls_session_t session, + gnutls_datum_t *out); const char *gnutls_psk_client_get_hint(gnutls_session_t session); typedef int gnutls_psk_server_credentials_function(gnutls_session_t, const char *username, gnutls_datum_t * key); +typedef int gnutls_psk_server_credentials_function2(gnutls_session_t, + const gnutls_datum_t *username, + gnutls_datum_t *key); void gnutls_psk_set_server_credentials_function(gnutls_psk_server_credentials_t cred, gnutls_psk_server_credentials_function * func); +void +gnutls_psk_set_server_credentials_function2(gnutls_psk_server_credentials_t cred, + gnutls_psk_server_credentials_function2 *func); typedef int gnutls_psk_client_credentials_function(gnutls_session_t, char **username, gnutls_datum_t * key); +typedef int gnutls_psk_client_credentials_function2(gnutls_session_t, + gnutls_datum_t *username, + gnutls_datum_t *key); void gnutls_psk_set_client_credentials_function(gnutls_psk_client_credentials_t cred, gnutls_psk_client_credentials_function * func); +void +gnutls_psk_set_client_credentials_function2(gnutls_psk_client_credentials_t cred, + gnutls_psk_client_credentials_function2 *func); int gnutls_hex_encode(const gnutls_datum_t * data, char *result, size_t * result_size); @@ -2195,6 +2687,7 @@ gnutls_psk_set_server_params_function(gnutls_psk_server_credentials_t * @GNUTLS_SAN_IPADDRESS: IP address SAN. * @GNUTLS_SAN_OTHERNAME: OtherName SAN. * @GNUTLS_SAN_DN: DN SAN. + * @GNUTLS_SAN_REGISTERED_ID: RegisteredID. * @GNUTLS_SAN_OTHERNAME_XMPP: Virtual SAN, used by certain functions for convenience. * @GNUTLS_SAN_OTHERNAME_KRB5PRINCIPAL: Virtual SAN, used by certain functions for convenience. * @@ -2207,7 +2700,8 @@ typedef enum gnutls_x509_subject_alt_name_t { GNUTLS_SAN_IPADDRESS = 4, GNUTLS_SAN_OTHERNAME = 5, GNUTLS_SAN_DN = 6, - GNUTLS_SAN_MAX = GNUTLS_SAN_DN, + GNUTLS_SAN_REGISTERED_ID = 7, + GNUTLS_SAN_MAX = GNUTLS_SAN_REGISTERED_ID, /* The following are "virtual" subject alternative name types, in that they are represented by an otherName value and an OID. Used by gnutls_x509_crt_get_subject_alt_othername_oid. */ @@ -2334,7 +2828,7 @@ int gnutls_certificate_get_peers_subkey_id(gnutls_session_t session, time_t gnutls_certificate_activation_time_peers(gnutls_session_t session); time_t gnutls_certificate_expiration_time_peers(gnutls_session_t session); -int gnutls_certificate_client_get_request_status(gnutls_session_t session); +unsigned gnutls_certificate_client_get_request_status(gnutls_session_t session); int gnutls_certificate_verify_peers2(gnutls_session_t session, unsigned int *status); int gnutls_certificate_verify_peers3(gnutls_session_t session, @@ -2366,6 +2860,11 @@ int gnutls_pem_base64_decode2(const char *header, const gnutls_datum_t * b64_data, gnutls_datum_t * result); +int gnutls_base64_encode2(const gnutls_datum_t * data, + gnutls_datum_t * result); +int gnutls_base64_decode2(const gnutls_datum_t * b64_data, + gnutls_datum_t * result); + #define gnutls_pem_base64_encode_alloc gnutls_pem_base64_encode2 #define gnutls_pem_base64_decode_alloc gnutls_pem_base64_decode2 @@ -2555,6 +3054,8 @@ void gnutls_ext_set_data(gnutls_session_t session, unsigned type, int gnutls_ext_get_data(gnutls_session_t session, unsigned type, gnutls_ext_priv_data_t *); +unsigned gnutls_ext_get_current_msg(gnutls_session_t session); + typedef int (*gnutls_ext_recv_func) (gnutls_session_t session, const unsigned char *data, size_t len); @@ -2570,52 +3071,75 @@ typedef int (*gnutls_ext_pack_func) (gnutls_ext_priv_data_t data, typedef int (*gnutls_ext_unpack_func) (gnutls_buffer_t packed_data, gnutls_ext_priv_data_t *data); +#define GNUTLS_EXT_RAW_FLAG_TLS_CLIENT_HELLO 1 +#define GNUTLS_EXT_RAW_FLAG_DTLS_CLIENT_HELLO (1<<1) +typedef int (*gnutls_ext_raw_process_func)(void *ctx, unsigned tls_id, const unsigned char *data, unsigned data_size); +int gnutls_ext_raw_parse(void *ctx, gnutls_ext_raw_process_func cb, + const gnutls_datum_t *data, unsigned int flags); /** * gnutls_ext_parse_type_t: - * @GNUTLS_EXT_NONE: Never parsed - * @GNUTLS_EXT_ANY: Any extension type (internal use only). - * @GNUTLS_EXT_APPLICATION: Application extension. - * @GNUTLS_EXT_TLS: TLS-internal extension. - * @GNUTLS_EXT_MANDATORY: Extension parsed even if resuming (or extensions are disabled). + * @GNUTLS_EXT_NONE: Never to be parsed + * @GNUTLS_EXT_ANY: Any extension type (should not be used as it is used only internally). + * @GNUTLS_EXT_VERSION_NEG: Extensions to be parsed first for TLS version negotiation. + * @GNUTLS_EXT_MANDATORY: Parsed after @GNUTLS_EXT_VERSION_NEG and even when resuming. + * @GNUTLS_EXT_APPLICATION: Parsed after @GNUTLS_EXT_MANDATORY + * @GNUTLS_EXT_TLS: TLS-internal extensions, parsed after @GNUTLS_EXT_APPLICATION. + * + * Enumeration of different TLS extension parsing phases. The @gnutls_ext_parse_type_t + * indicates the time/phase an extension is parsed during Client or Server hello parsing. * - * Enumeration of different TLS extension types. This type is - * to indicate whether an extension is useful to application - * level or TLS level only. This is used to parse the - * application level extensions before the "client_hello" callback - * is called. */ typedef enum { GNUTLS_EXT_ANY = 0, GNUTLS_EXT_APPLICATION = 1, GNUTLS_EXT_TLS = 2, GNUTLS_EXT_MANDATORY = 3, - GNUTLS_EXT_NONE = 4 + GNUTLS_EXT_NONE = 4, + GNUTLS_EXT_VERSION_NEG = 5 } gnutls_ext_parse_type_t; /** * gnutls_ext_flags_t: * @GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL: If specified the extension registered will override the internal; this does not work with extensions existing prior to 3.6.0. + * @GNUTLS_EXT_FLAG_CLIENT_HELLO: This extension can be present in a client hello + * @GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO: This extension can be present in a TLS1.2 or earlier server hello + * @GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO: This extension can be present in a TLS1.3 server hello + * @GNUTLS_EXT_FLAG_EE: This extension can be present in encrypted extensions message + * @GNUTLS_EXT_FLAG_HRR: This extension can be present in hello retry request message + * @GNUTLS_EXT_FLAG_IGNORE_CLIENT_REQUEST: When flag is present, this extension will be send even if the client didn't advertise it. An extension of this type is the Cookie TLS1.3 extension. + * @GNUTLS_EXT_FLAG_DTLS: This extension can be present under DTLS; otherwise ignored. + * @GNUTLS_EXT_FLAG_TLS: This extension can be present under TLS; otherwise ignored. * * Enumeration of different TLS extension registration flags. */ typedef enum { - GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL = 1 + GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL = 1, + GNUTLS_EXT_FLAG_CLIENT_HELLO = (1<<1), + GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO = (1<<2), + GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO = (1<<3), + GNUTLS_EXT_FLAG_EE = (1<<4), /* ENCRYPTED */ + GNUTLS_EXT_FLAG_HRR = (1<<5), + GNUTLS_EXT_FLAG_IGNORE_CLIENT_REQUEST = (1<<6), + GNUTLS_EXT_FLAG_TLS = (1<<7), + GNUTLS_EXT_FLAG_DTLS = (1<<8) } gnutls_ext_flags_t; /* Register a custom tls extension */ -int gnutls_ext_register(const char *name, int type, gnutls_ext_parse_type_t parse_type, +int gnutls_ext_register(const char *name, int type, gnutls_ext_parse_type_t parse_point, gnutls_ext_recv_func recv_func, gnutls_ext_send_func send_func, gnutls_ext_deinit_data_func deinit_func, gnutls_ext_pack_func pack_func, gnutls_ext_unpack_func unpack_func); -int gnutls_session_ext_register(gnutls_session_t, const char *name, int type, gnutls_ext_parse_type_t parse_type, +int gnutls_session_ext_register(gnutls_session_t, const char *name, int type, gnutls_ext_parse_type_t parse_point, gnutls_ext_recv_func recv_func, gnutls_ext_send_func send_func, gnutls_ext_deinit_data_func deinit_func, gnutls_ext_pack_func pack_func, gnutls_ext_unpack_func unpack_func, unsigned flags); const char *gnutls_ext_get_name(unsigned int ext); +const char *gnutls_ext_get_name2(gnutls_session_t session, unsigned int tls_id, + gnutls_ext_parse_type_t parse_point); /* Public supplemental data related functions */ @@ -2624,13 +3148,13 @@ typedef int (*gnutls_supp_recv_func) (gnutls_session_t session, typedef int (*gnutls_supp_send_func) (gnutls_session_t session, gnutls_buffer_t buf); -int gnutls_supplemental_register(const char *name, - gnutls_supplemental_data_format_type_t type, +int gnutls_supplemental_register(const char *name, + gnutls_supplemental_data_format_type_t type, gnutls_supp_recv_func supp_recv_func, gnutls_supp_send_func supp_send_func); int gnutls_session_supplemental_register(gnutls_session_t session, const char *name, - gnutls_supplemental_data_format_type_t type, + gnutls_supplemental_data_format_type_t type, gnutls_supp_recv_func supp_recv_func, gnutls_supp_send_func supp_send_func, unsigned int flags); @@ -2639,9 +3163,67 @@ void gnutls_supplemental_recv(gnutls_session_t session, unsigned do_recv_supplem void gnutls_supplemental_send(gnutls_session_t session, unsigned do_send_supplemental); +/* Anti-replay related functions */ + +typedef struct gnutls_anti_replay_st *gnutls_anti_replay_t; + +int gnutls_anti_replay_init(gnutls_anti_replay_t *anti_replay); +void gnutls_anti_replay_deinit(gnutls_anti_replay_t anti_replay); +void gnutls_anti_replay_set_window(gnutls_anti_replay_t anti_replay, + unsigned int window); +void gnutls_anti_replay_enable(gnutls_session_t session, + gnutls_anti_replay_t anti_replay); + +typedef int (*gnutls_db_add_func) (void *, time_t exp_time, const gnutls_datum_t *key, + const gnutls_datum_t *data); + +void gnutls_anti_replay_set_add_function(gnutls_anti_replay_t, + gnutls_db_add_func add_func); + +void gnutls_anti_replay_set_ptr(gnutls_anti_replay_t, void *ptr); + + /* FIPS140-2 related functions */ unsigned gnutls_fips140_mode_enabled(void); +/** + * gnutls_fips_mode_t: + * @GNUTLS_FIPS140_DISABLED: The FIPS140-2 mode is disabled. + * @GNUTLS_FIPS140_STRICT: The default mode; all forbidden operations will cause an + * operation failure via error code. + * @GNUTLS_FIPS140_LAX: The library still uses the FIPS140-2 relevant algorithms but all + * forbidden by FIPS140-2 operations are allowed; this is useful when the + * application is aware of the followed security policy, and needs + * to utilize disallowed operations for other reasons (e.g., compatibility). + * @GNUTLS_FIPS140_LOG: Similarly to %GNUTLS_FIPS140_LAX, it allows forbidden operations; any use of them results + * to a message to the audit callback functions. + * @GNUTLS_FIPS140_SELFTESTS: A transient state during library initialization. That state + * cannot be set or seen by applications. + * + * Enumeration of different operational modes under FIPS140-2. + */ +typedef enum gnutls_fips_mode_t { + GNUTLS_FIPS140_DISABLED = 0, + GNUTLS_FIPS140_STRICT = 1, + GNUTLS_FIPS140_SELFTESTS = 2, + GNUTLS_FIPS140_LAX = 3, + GNUTLS_FIPS140_LOG = 4 +} gnutls_fips_mode_t; + +#define GNUTLS_FIPS140_SET_MODE_THREAD 1 + +void gnutls_fips140_set_mode(gnutls_fips_mode_t mode, unsigned flags); + +#define GNUTLS_FIPS140_SET_LAX_MODE() do { \ + if (gnutls_fips140_mode_enabled()) \ + gnutls_fips140_set_mode(GNUTLS_FIPS140_LAX, GNUTLS_FIPS140_SET_MODE_THREAD); \ + } while(0) + +#define GNUTLS_FIPS140_SET_STRICT_MODE() do { \ + if (gnutls_fips140_mode_enabled()) \ + gnutls_fips140_set_mode(GNUTLS_FIPS140_STRICT, GNUTLS_FIPS140_SET_MODE_THREAD); \ + } while(0) + /* Gnutls error codes. The mapping to a TLS alert is also shown in * comments. */ @@ -2669,7 +3251,8 @@ unsigned gnutls_fips140_mode_enabled(void); #define GNUTLS_E_AGAIN -28 #define GNUTLS_E_EXPIRED -29 #define GNUTLS_E_DB_ERROR -30 -#define GNUTLS_E_SRP_PWD_ERROR -31 +#define GNUTLS_E_SRP_PWD_ERROR GNUTLS_E_KEYFILE_ERROR +#define GNUTLS_E_KEYFILE_ERROR -31 #define GNUTLS_E_INSUFFICIENT_CREDENTIALS -32 #define GNUTLS_E_INSUFICIENT_CREDENTIALS GNUTLS_E_INSUFFICIENT_CREDENTIALS /* for backwards compatibility only */ #define GNUTLS_E_INSUFFICIENT_CRED GNUTLS_E_INSUFFICIENT_CREDENTIALS @@ -2705,6 +3288,8 @@ unsigned gnutls_fips140_mode_enabled(void); #define GNUTLS_E_TOO_MANY_EMPTY_PACKETS -78 #define GNUTLS_E_UNKNOWN_PK_ALGORITHM -80 #define GNUTLS_E_TOO_MANY_HANDSHAKE_PACKETS -81 +#define GNUTLS_E_RECEIVED_DISALLOWED_NAME -82 /* GNUTLS_A_ILLEGAL_PARAMETER */ +#define GNUTLS_E_CERTIFICATE_REQUIRED -112 /* GNUTLS_A_CERTIFICATE_REQUIRED */ /* returned if you need to generate temporary RSA * parameters. These are needed for export cipher suites. @@ -2718,7 +3303,8 @@ unsigned gnutls_fips140_mode_enabled(void); #define GNUTLS_E_PK_SIG_VERIFY_FAILED -89 #define GNUTLS_E_ILLEGAL_SRP_USERNAME -90 -#define GNUTLS_E_SRP_PWD_PARSING_ERROR -91 +#define GNUTLS_E_SRP_PWD_PARSING_ERROR GNUTLS_E_KEYFILE_PARSING_ERROR +#define GNUTLS_E_KEYFILE_PARSING_ERROR -91 #define GNUTLS_E_NO_TEMPORARY_DH_PARAMS -93 /* For certificate and key stuff @@ -2821,7 +3407,7 @@ unsigned gnutls_fips140_mode_enabled(void); #define GNUTLS_E_ECC_UNSUPPORTED_CURVE -322 #define GNUTLS_E_PKCS11_REQUESTED_OBJECT_NOT_AVAILBLE -323 #define GNUTLS_E_CERTIFICATE_LIST_UNSORTED -324 -#define GNUTLS_E_ILLEGAL_PARAMETER -325 +#define GNUTLS_E_ILLEGAL_PARAMETER -325 /* GNUTLS_A_ILLEGAL_PARAMETER */ #define GNUTLS_E_NO_PRIORITIES_WERE_SET -326 #define GNUTLS_E_X509_UNSUPPORTED_EXTENSION -327 #define GNUTLS_E_SESSION_EOF -328 @@ -2867,10 +3453,26 @@ unsigned gnutls_fips140_mode_enabled(void); #define GNUTLS_E_CERTIFICATE_TIME_ERROR -416 #define GNUTLS_E_RECORD_OVERFLOW -417 /* GNUTLS_A_RECORD_OVERFLOW */ #define GNUTLS_E_ASN1_TIME_ERROR -418 +#define GNUTLS_E_INCOMPATIBLE_SIG_WITH_KEY -419 +#define GNUTLS_E_PK_INVALID_PUBKEY_PARAMS -420 +#define GNUTLS_E_PK_NO_VALIDATION_PARAMS -421 +#define GNUTLS_E_OCSP_MISMATCH_WITH_CERTS -422 + +#define GNUTLS_E_NO_COMMON_KEY_SHARE -423 +#define GNUTLS_E_REAUTH_REQUEST -424 +#define GNUTLS_E_TOO_MANY_MATCHES -425 +#define GNUTLS_E_CRL_VERIFICATION_ERROR -426 +#define GNUTLS_E_MISSING_EXTENSION -427 +#define GNUTLS_E_DB_ENTRY_EXISTS -428 +#define GNUTLS_E_EARLY_DATA_REJECTED -429 +#define GNUTLS_E_X509_DUPLICATE_EXTENSION -430 #define GNUTLS_E_UNIMPLEMENTED_FEATURE -1250 - +/* Internal errors of the library; will never be returned + * to a calling application */ +#define GNUTLS_E_INT_RET_0 -1251 +#define GNUTLS_E_INT_CHECK_AGAIN -1252 #define GNUTLS_E_APPLICATION_ERROR_MAX -65000 #define GNUTLS_E_APPLICATION_ERROR_MIN -65500 diff --git a/lib/includes/gnutls/gnutlsxx.h b/lib/includes/gnutls/gnutlsxx.h index 1ed83fbd44..6140550789 100644 --- a/lib/includes/gnutls/gnutlsxx.h +++ b/lib/includes/gnutls/gnutlsxx.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -107,6 +107,7 @@ namespace gnutls { session(unsigned int); virtual ~ session(); + gnutls_session_t ptr(); int bye(gnutls_close_request_t how); int handshake(); @@ -189,6 +190,7 @@ namespace gnutls { vec_push_func); void set_transport_pull_function(gnutls_pull_func pull_func); + void set_transport_pull_timeout_function (gnutls_pull_timeout_func pull_timeout_func); void set_user_ptr(void *ptr); void *get_user_ptr() const; @@ -237,6 +239,7 @@ namespace gnutls { class server_session:public session { public: server_session(); + server_session(int flags); ~server_session(); void db_remove() const; @@ -261,8 +264,10 @@ namespace gnutls { class client_session:public session { public: client_session(); + client_session(int flags); ~client_session(); + void set_verify_cert(const char *hostname, unsigned flags); void set_server_name(gnutls_server_name_type_t type, const void *name, size_t name_length); @@ -304,7 +309,7 @@ namespace gnutls { gnutls_x509_crt_fmt_t type); void set_x509_trust(const gnutls_datum_t & CA, gnutls_x509_crt_fmt_t type); - // FIXME: use classes instead of gnutls_x509_crt_t + void set_x509_trust(gnutls_x509_crt_t * ca_list, int ca_list_size); @@ -321,7 +326,7 @@ namespace gnutls { void set_x509_key(const gnutls_datum_t & CERT, const gnutls_datum_t & KEY, gnutls_x509_crt_fmt_t type); - // FIXME: use classes + void set_x509_key(gnutls_x509_crt_t * cert_list, int cert_list_size, gnutls_x509_privkey_t key); diff --git a/lib/includes/gnutls/ocsp.h b/lib/includes/gnutls/ocsp.h index 8ade965dc0..ca085b5880 100644 --- a/lib/includes/gnutls/ocsp.h +++ b/lib/includes/gnutls/ocsp.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -114,6 +114,9 @@ typedef enum gnutls_x509_crl_reason_t { GNUTLS_X509_CRLREASON_AACOMPROMISE = 10 } gnutls_x509_crl_reason_t; +/* When adding a verify failure reason update: + * _gnutls_ocsp_verify_status_to_str() + */ /** * gnutls_ocsp_verify_reason_t: * @GNUTLS_OCSP_VERIFY_SIGNER_NOT_FOUND: Signer cert not found. @@ -139,20 +142,21 @@ typedef enum gnutls_ocsp_verify_reason_t { struct gnutls_ocsp_req_int; typedef struct gnutls_ocsp_req_int *gnutls_ocsp_req_t; +typedef const struct gnutls_ocsp_req_int *gnutls_ocsp_req_const_t; int gnutls_ocsp_req_init(gnutls_ocsp_req_t * req); void gnutls_ocsp_req_deinit(gnutls_ocsp_req_t req); int gnutls_ocsp_req_import(gnutls_ocsp_req_t req, const gnutls_datum_t * data); -int gnutls_ocsp_req_export(gnutls_ocsp_req_t req, gnutls_datum_t * data); -int gnutls_ocsp_req_print(gnutls_ocsp_req_t req, +int gnutls_ocsp_req_export(gnutls_ocsp_req_const_t req, gnutls_datum_t * data); +int gnutls_ocsp_req_print(gnutls_ocsp_req_const_t req, gnutls_ocsp_print_formats_t format, gnutls_datum_t * out); -int gnutls_ocsp_req_get_version(gnutls_ocsp_req_t req); +int gnutls_ocsp_req_get_version(gnutls_ocsp_req_const_t req); -int gnutls_ocsp_req_get_cert_id(gnutls_ocsp_req_t req, +int gnutls_ocsp_req_get_cert_id(gnutls_ocsp_req_const_t req, unsigned indx, gnutls_digest_algorithm_t * digest, gnutls_datum_t * issuer_name_hash, @@ -170,7 +174,7 @@ int gnutls_ocsp_req_add_cert(gnutls_ocsp_req_t req, gnutls_x509_crt_t issuer, gnutls_x509_crt_t cert); -int gnutls_ocsp_req_get_extension(gnutls_ocsp_req_t req, +int gnutls_ocsp_req_get_extension(gnutls_ocsp_req_const_t req, unsigned indx, gnutls_datum_t * oid, unsigned int *critical, @@ -180,7 +184,7 @@ int gnutls_ocsp_req_set_extension(gnutls_ocsp_req_t req, unsigned int critical, const gnutls_datum_t * data); -int gnutls_ocsp_req_get_nonce(gnutls_ocsp_req_t req, +int gnutls_ocsp_req_get_nonce(gnutls_ocsp_req_const_t req, unsigned int *critical, gnutls_datum_t * nonce); int gnutls_ocsp_req_set_nonce(gnutls_ocsp_req_t req, @@ -190,28 +194,35 @@ int gnutls_ocsp_req_randomize_nonce(gnutls_ocsp_req_t req); struct gnutls_ocsp_resp_int; typedef struct gnutls_ocsp_resp_int *gnutls_ocsp_resp_t; +typedef const struct gnutls_ocsp_resp_int *gnutls_ocsp_resp_const_t; int gnutls_ocsp_resp_init(gnutls_ocsp_resp_t * resp); void gnutls_ocsp_resp_deinit(gnutls_ocsp_resp_t resp); int gnutls_ocsp_resp_import(gnutls_ocsp_resp_t resp, const gnutls_datum_t * data); -int gnutls_ocsp_resp_export(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_import2(gnutls_ocsp_resp_t resp, + const gnutls_datum_t * data, + gnutls_x509_crt_fmt_t fmt); +int gnutls_ocsp_resp_export(gnutls_ocsp_resp_const_t resp, gnutls_datum_t * data); -int gnutls_ocsp_resp_print(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_export2(gnutls_ocsp_resp_const_t resp, + gnutls_datum_t * data, + gnutls_x509_crt_fmt_t fmt); +int gnutls_ocsp_resp_print(gnutls_ocsp_resp_const_t resp, gnutls_ocsp_print_formats_t format, gnutls_datum_t * out); -int gnutls_ocsp_resp_get_status(gnutls_ocsp_resp_t resp); -int gnutls_ocsp_resp_get_response(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_get_status(gnutls_ocsp_resp_const_t resp); +int gnutls_ocsp_resp_get_response(gnutls_ocsp_resp_const_t resp, gnutls_datum_t * response_type_oid, gnutls_datum_t * response); -int gnutls_ocsp_resp_get_version(gnutls_ocsp_resp_t resp); -int gnutls_ocsp_resp_get_responder(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_get_version(gnutls_ocsp_resp_const_t resp); +int gnutls_ocsp_resp_get_responder(gnutls_ocsp_resp_const_t resp, gnutls_datum_t * dn); -int gnutls_ocsp_resp_get_responder2(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_get_responder2(gnutls_ocsp_resp_const_t resp, gnutls_datum_t * dn, unsigned flags); @@ -220,12 +231,12 @@ int gnutls_ocsp_resp_get_responder2(gnutls_ocsp_resp_t resp, /* the raw DN of the responder */ #define GNUTLS_OCSP_RESP_ID_DN 2 int -gnutls_ocsp_resp_get_responder_raw_id(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_get_responder_raw_id(gnutls_ocsp_resp_const_t resp, unsigned type, gnutls_datum_t * raw); -time_t gnutls_ocsp_resp_get_produced(gnutls_ocsp_resp_t resp); -int gnutls_ocsp_resp_get_single(gnutls_ocsp_resp_t resp, +time_t gnutls_ocsp_resp_get_produced(gnutls_ocsp_resp_const_t resp); +int gnutls_ocsp_resp_get_single(gnutls_ocsp_resp_const_t resp, unsigned indx, gnutls_digest_algorithm_t * digest, gnutls_datum_t * issuer_name_hash, @@ -236,32 +247,39 @@ int gnutls_ocsp_resp_get_single(gnutls_ocsp_resp_t resp, time_t * next_update, time_t * revocation_time, unsigned int *revocation_reason); -int gnutls_ocsp_resp_get_extension(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_get_extension(gnutls_ocsp_resp_const_t resp, unsigned indx, gnutls_datum_t * oid, unsigned int *critical, gnutls_datum_t * data); -int gnutls_ocsp_resp_get_nonce(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_get_nonce(gnutls_ocsp_resp_const_t resp, unsigned int *critical, gnutls_datum_t * nonce); -int gnutls_ocsp_resp_get_signature_algorithm(gnutls_ocsp_resp_t resp); -int gnutls_ocsp_resp_get_signature(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_get_signature_algorithm(gnutls_ocsp_resp_const_t resp); +int gnutls_ocsp_resp_get_signature(gnutls_ocsp_resp_const_t resp, gnutls_datum_t * sig); -int gnutls_ocsp_resp_get_certs(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_get_certs(gnutls_ocsp_resp_const_t resp, gnutls_x509_crt_t ** certs, size_t * ncerts); -int gnutls_ocsp_resp_verify_direct(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_verify_direct(gnutls_ocsp_resp_const_t resp, gnutls_x509_crt_t issuer, unsigned int *verify, unsigned int flags); -int gnutls_ocsp_resp_verify(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_verify(gnutls_ocsp_resp_const_t resp, gnutls_x509_trust_list_t trustlist, unsigned int *verify, unsigned int flags); -int gnutls_ocsp_resp_check_crt(gnutls_ocsp_resp_t resp, +int gnutls_ocsp_resp_check_crt(gnutls_ocsp_resp_const_t resp, unsigned int indx, gnutls_x509_crt_t crt); +int +gnutls_ocsp_resp_list_import2(gnutls_ocsp_resp_t **ocsps, + unsigned int *size, + const gnutls_datum_t *resp_data, + gnutls_x509_crt_fmt_t format, + unsigned int flags); + /* *INDENT-OFF* */ #ifdef __cplusplus } diff --git a/lib/includes/gnutls/openpgp.h b/lib/includes/gnutls/openpgp.h index 69176c7814..01d01fdada 100644 --- a/lib/includes/gnutls/openpgp.h +++ b/lib/includes/gnutls/openpgp.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/includes/gnutls/pkcs11.h b/lib/includes/gnutls/pkcs11.h index 8741f96322..0c3d22be94 100644 --- a/lib/includes/gnutls/pkcs11.h +++ b/lib/includes/gnutls/pkcs11.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2010-2012 Free Software Foundation, Inc. + * Copyright (C) 2016-2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -65,6 +66,7 @@ typedef struct gnutls_pkcs11_obj_st *gnutls_pkcs11_obj_t; #define GNUTLS_PKCS11_FLAG_MANUAL 0 /* Manual loading of libraries */ #define GNUTLS_PKCS11_FLAG_AUTO 1 /* Automatically load libraries by reading /etc/gnutls/pkcs11.conf */ +#define GNUTLS_PKCS11_FLAG_AUTO_TRUSTED (1<<1) /* Automatically load trusted libraries by reading /etc/gnutls/pkcs11.conf */ /* pkcs11.conf format: * load = /lib/xxx-pkcs11.so @@ -94,7 +96,7 @@ void gnutls_pkcs11_obj_set_pin_function(gnutls_pkcs11_obj_t obj, * gnutls_pkcs11_obj_flags: * @GNUTLS_PKCS11_OBJ_FLAG_LOGIN: Force login in the token for the operation (seek+store). * @GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED: object marked as trusted (seek+store). - * @GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE: object marked as sensitive -unexportable (store). + * @GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE: object is explicitly marked as sensitive -unexportable (store). * @GNUTLS_PKCS11_OBJ_FLAG_LOGIN_SO: force login as a security officer in the token for the operation (seek+store). * @GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE: marked as private -requires PIN to access (store). * @GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_PRIVATE: marked as not private (store). @@ -116,6 +118,7 @@ void gnutls_pkcs11_obj_set_pin_function(gnutls_pkcs11_obj_t obj, * @GNUTLS_PKCS11_OBJ_FLAG_PUBKEY: When searching, restrict to public key objects only (seek). * @GNUTLS_PKCS11_OBJ_FLAG_PRIVKEY: When searching, restrict to private key objects only (seek). * @GNUTLS_PKCS11_OBJ_FLAG_NO_STORE_PUBKEY: When generating a keypair don't store the public key (store). + * @GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE: object marked as not sensitive -exportable (store). * * Enumeration of different PKCS #11 object flags. Some flags are used * to mark objects when storing, while others are also used while seeking @@ -146,6 +149,7 @@ typedef enum gnutls_pkcs11_obj_flags { GNUTLS_PKCS11_OBJ_FLAG_PUBKEY = (1<<20), GNUTLS_PKCS11_OBJ_FLAG_NO_STORE_PUBKEY = GNUTLS_PKCS11_OBJ_FLAG_PUBKEY, GNUTLS_PKCS11_OBJ_FLAG_PRIVKEY = (1<<21), + GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE = (1<<22), /* flags 1<<29 and later are reserved - see pkcs11_int.h */ } gnutls_pkcs11_obj_flags; @@ -291,6 +295,12 @@ typedef enum { GNUTLS_PKCS11_OBJ_LIBRARY_MANUFACTURER } gnutls_pkcs11_obj_info_t; +int +gnutls_pkcs11_obj_get_ptr(gnutls_pkcs11_obj_t obj, void **ptr, + void **session, void **ohandle, + unsigned long *slot_id, + unsigned int flags); + int gnutls_pkcs11_obj_get_info(gnutls_pkcs11_obj_t obj, gnutls_pkcs11_obj_info_t itype, void *output, size_t * output_size); @@ -314,7 +324,8 @@ int gnutls_pkcs11_obj_set_info(gnutls_pkcs11_obj_t obj, * @GNUTLS_PKCS11_TOKEN_SERIAL: The token's serial number (string) * @GNUTLS_PKCS11_TOKEN_MANUFACTURER: The token's manufacturer (string) * @GNUTLS_PKCS11_TOKEN_MODEL: The token's model (string) - * @GNUTLS_PKCS11_TOKEN_MODNAME: The token's module name (string - since 3.4.3) + * @GNUTLS_PKCS11_TOKEN_MODNAME: The token's module name (string - since 3.4.3). This value is + * unavailable for providers which were manually loaded. * * Enumeration of types for retrieving token information. */ @@ -352,11 +363,20 @@ int gnutls_pkcs11_token_init(const char *token_url, const char *so_pin, const char *label); +int +gnutls_pkcs11_token_get_ptr(const char *url, void **ptr, unsigned long *slot_id, + unsigned int flags); + int gnutls_pkcs11_token_get_mechanism(const char *url, unsigned int idx, unsigned long *mechanism); +unsigned +gnutls_pkcs11_token_check_mechanism(const char *url, + unsigned long mechanism, + void *ptr, unsigned psize, unsigned flags); + int gnutls_pkcs11_token_set_pin(const char *token_url, const char *oldpin, const char *newpin, unsigned int flags /*gnutls_pin_flag_t */); int gnutls_pkcs11_token_get_url(unsigned int seq, @@ -368,6 +388,19 @@ int gnutls_pkcs11_token_get_info(const char *url, #define GNUTLS_PKCS11_TOKEN_HW 1 #define GNUTLS_PKCS11_TOKEN_TRUSTED (1<<1) /* p11-kit trusted */ +#define GNUTLS_PKCS11_TOKEN_RNG (1<<2) /* CKF_RNG */ +#define GNUTLS_PKCS11_TOKEN_LOGIN_REQUIRED (1<<3) /* CKF_LOGIN_REQUIRED */ +#define GNUTLS_PKCS11_TOKEN_PROTECTED_AUTHENTICATION_PATH (1<<4) /* CKF_PROTECTED_AUTHENTICATION_PATH */ +#define GNUTLS_PKCS11_TOKEN_INITIALIZED (1<<5) /* CKF_TOKEN_INITIALIZED */ +#define GNUTLS_PKCS11_TOKEN_USER_PIN_COUNT_LOW (1<<6) /* CKF_USER_PIN_COUNT_LOW */ +#define GNUTLS_PKCS11_TOKEN_USER_PIN_FINAL_TRY (1<<7) /* CKF_USER_PIN_FINAL_TRY */ +#define GNUTLS_PKCS11_TOKEN_USER_PIN_LOCKED (1<<8) /* CKF_USER_PIN_LOCKED */ +#define GNUTLS_PKCS11_TOKEN_SO_PIN_COUNT_LOW (1<<9) /* CKF_SO_PIN_COUNT_LOW */ +#define GNUTLS_PKCS11_TOKEN_SO_PIN_FINAL_TRY (1<<10) /* CKF_SO_PIN_FINAL_TRY */ +#define GNUTLS_PKCS11_TOKEN_SO_PIN_LOCKED (1<<11) /* CKF_SO_PIN_LOCKED */ +#define GNUTLS_PKCS11_TOKEN_USER_PIN_INITIALIZED (1<<12) /* CKF_USER_PIN_INITIALIZED */ +#define GNUTLS_PKCS11_TOKEN_ERROR_STATE (1<<13) /* CKF_ERROR_STATE */ + int gnutls_pkcs11_token_get_flags(const char *url, unsigned int *flags); #define gnutls_pkcs11_obj_list_import_url(p_list, n_list, url, attrs, flags) gnutls_pkcs11_obj_list_import_url3(p_list, n_list, url, attrs|flags) diff --git a/lib/includes/gnutls/pkcs12.h b/lib/includes/gnutls/pkcs12.h index e7864c4f14..66308c9d88 100644 --- a/lib/includes/gnutls/pkcs12.h +++ b/lib/includes/gnutls/pkcs12.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/includes/gnutls/pkcs7.h b/lib/includes/gnutls/pkcs7.h index 376f2d1d4b..58ea4aaf81 100644 --- a/lib/includes/gnutls/pkcs7.h +++ b/lib/includes/gnutls/pkcs7.h @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -144,6 +144,10 @@ int gnutls_pkcs7_print(gnutls_pkcs7_t pkcs7, gnutls_certificate_print_formats_t format, gnutls_datum_t * out); +int gnutls_pkcs7_print_signature_info(gnutls_pkcs7_signature_info_st * info, + gnutls_certificate_print_formats_t format, + gnutls_datum_t * out); + /* *INDENT-OFF* */ #ifdef __cplusplus } diff --git a/lib/includes/gnutls/self-test.h b/lib/includes/gnutls/self-test.h index c3fd84cd06..8771749bf0 100644 --- a/lib/includes/gnutls/self-test.h +++ b/lib/includes/gnutls/self-test.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -27,9 +27,12 @@ /* Self checking functions */ -int gnutls_cipher_self_test(unsigned all, gnutls_cipher_algorithm_t cipher); -int gnutls_mac_self_test(unsigned all, gnutls_mac_algorithm_t mac); -int gnutls_digest_self_test(unsigned all, gnutls_digest_algorithm_t digest); -int gnutls_pk_self_test(unsigned all, gnutls_pk_algorithm_t pk); +#define GNUTLS_SELF_TEST_FLAG_ALL 1 +#define GNUTLS_SELF_TEST_FLAG_NO_COMPAT (1<<1) + +int gnutls_cipher_self_test(unsigned flags, gnutls_cipher_algorithm_t cipher); +int gnutls_mac_self_test(unsigned flags, gnutls_mac_algorithm_t mac); +int gnutls_digest_self_test(unsigned flags, gnutls_digest_algorithm_t digest); +int gnutls_pk_self_test(unsigned flags, gnutls_pk_algorithm_t pk); #endif diff --git a/lib/includes/gnutls/socket.h b/lib/includes/gnutls/socket.h index bbd3cb2926..03c5cef7b7 100644 --- a/lib/includes/gnutls/socket.h +++ b/lib/includes/gnutls/socket.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/includes/gnutls/system-keys.h b/lib/includes/gnutls/system-keys.h index 37f8cc36b5..68b8a20b4a 100644 --- a/lib/includes/gnutls/system-keys.h +++ b/lib/includes/gnutls/system-keys.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/includes/gnutls/tpm.h b/lib/includes/gnutls/tpm.h index 17becf33f3..82503c648e 100644 --- a/lib/includes/gnutls/tpm.h +++ b/lib/includes/gnutls/tpm.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/includes/gnutls/urls.h b/lib/includes/gnutls/urls.h index bbfc6211eb..6f67c251b4 100644 --- a/lib/includes/gnutls/urls.h +++ b/lib/includes/gnutls/urls.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/includes/gnutls/x509-ext.h b/lib/includes/gnutls/x509-ext.h index 8180c75bb0..170d02a48b 100644 --- a/lib/includes/gnutls/x509-ext.h +++ b/lib/includes/gnutls/x509-ext.h @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/includes/gnutls/x509.h b/lib/includes/gnutls/x509.h index 4646299368..6807271b2a 100644 --- a/lib/includes/gnutls/x509.h +++ b/lib/includes/gnutls/x509.h @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -148,7 +148,7 @@ typedef enum gnutls_x509_crt_flags { void gnutls_x509_crt_set_flags(gnutls_x509_crt_t cert, unsigned flags); unsigned gnutls_x509_crt_equals(gnutls_x509_crt_t cert1, gnutls_x509_crt_t cert2); -unsigned gnutls_x509_crt_equals2(gnutls_x509_crt_t cert1, gnutls_datum_t * der); +unsigned gnutls_x509_crt_equals2(gnutls_x509_crt_t cert1, const gnutls_datum_t * der); int gnutls_x509_crt_import(gnutls_x509_crt_t cert, const gnutls_datum_t * data, @@ -169,6 +169,14 @@ int gnutls_x509_crt_import_url(gnutls_x509_crt_t crt, /* GNUTLS_PKCS11_OBJ_FLAG_* */ ); +int +gnutls_x509_crt_list_import_url(gnutls_x509_crt_t **certs, + unsigned int *size, + const char *url, + gnutls_pin_callback_t pin_fn, + void *pin_fn_userdata, + unsigned int flags); + int gnutls_x509_crt_export(gnutls_x509_crt_t cert, gnutls_x509_crt_fmt_t format, void *output_data, size_t * output_data_size); @@ -233,6 +241,7 @@ int gnutls_x509_crt_get_signature_oid(gnutls_x509_crt_t cert, char *oid, size_t * gnutls_keyid_flags_t: * @GNUTLS_KEYID_USE_SHA1: Use SHA1 as the key ID algorithm (default). * @GNUTLS_KEYID_USE_SHA256: Use SHA256 as the key ID algorithm. + * @GNUTLS_KEYID_USE_SHA512: Use SHA512 as the key ID algorithm. * @GNUTLS_KEYID_USE_BEST_KNOWN: Use the best known algorithm to calculate key ID. Using that option will make your program behavior depend on the version of gnutls linked with. That option has a cap of 64-bytes key IDs. * * Enumeration of different flags for the key ID functions. @@ -241,6 +250,7 @@ int gnutls_x509_crt_get_signature_oid(gnutls_x509_crt_t cert, char *oid, size_t typedef enum { GNUTLS_KEYID_USE_SHA1 = 0, GNUTLS_KEYID_USE_SHA256 = (1<<0), + GNUTLS_KEYID_USE_SHA512 = (1<<1), GNUTLS_KEYID_USE_BEST_KNOWN = (1<<30) } gnutls_keyid_flags_t; int gnutls_x509_crt_get_key_id(gnutls_x509_crt_t crt, @@ -399,6 +409,10 @@ int gnutls_x509_crt_set_crl_dist_points(gnutls_x509_crt_t crt, int gnutls_x509_crt_cpy_crl_dist_points(gnutls_x509_crt_t dst, gnutls_x509_crt_t src); +int gnutls_x509_crl_sign(gnutls_x509_crl_t crl, + gnutls_x509_crt_t issuer, + gnutls_x509_privkey_t issuer_key); + int gnutls_x509_crl_sign2(gnutls_x509_crl_t crl, gnutls_x509_crt_t issuer, gnutls_x509_privkey_t issuer_key, @@ -407,14 +421,31 @@ int gnutls_x509_crl_sign2(gnutls_x509_crl_t crl, time_t gnutls_x509_crt_get_activation_time(gnutls_x509_crt_t cert); +/* This macro is deprecated and defunc; do not use */ #define GNUTLS_X509_NO_WELL_DEFINED_EXPIRATION ((time_t)4294197631) time_t gnutls_x509_crt_get_expiration_time(gnutls_x509_crt_t cert); int gnutls_x509_crt_get_serial(gnutls_x509_crt_t cert, void *result, size_t * result_size); +typedef struct gnutls_x509_spki_st *gnutls_x509_spki_t; + +int gnutls_x509_spki_init(gnutls_x509_spki_t *spki); +void gnutls_x509_spki_deinit(gnutls_x509_spki_t spki); + +int gnutls_x509_spki_get_rsa_pss_params(gnutls_x509_spki_t spki, + gnutls_digest_algorithm_t *dig, unsigned int *salt_size); + +void gnutls_x509_spki_set_rsa_pss_params(gnutls_x509_spki_t spki, + gnutls_digest_algorithm_t dig, unsigned int salt_size); + int gnutls_x509_crt_get_pk_algorithm(gnutls_x509_crt_t cert, unsigned int *bits); +int gnutls_x509_crt_set_spki(gnutls_x509_crt_t crt, const gnutls_x509_spki_t spki, + unsigned int flags); +int gnutls_x509_crt_get_spki(gnutls_x509_crt_t cert, gnutls_x509_spki_t spki, + unsigned int flags); + int gnutls_x509_crt_get_pk_rsa_raw(gnutls_x509_crt_t crt, gnutls_datum_t * m, gnutls_datum_t * e); int gnutls_x509_crt_get_pk_dsa_raw(gnutls_x509_crt_t crt, @@ -425,6 +456,11 @@ int gnutls_x509_crt_get_pk_ecc_raw(gnutls_x509_crt_t crt, gnutls_ecc_curve_t * curve, gnutls_datum_t * x, gnutls_datum_t * y); +int gnutls_x509_crt_get_pk_gost_raw(gnutls_x509_crt_t crt, + gnutls_ecc_curve_t * curve, + gnutls_digest_algorithm_t * digest, + gnutls_gost_paramset_t *paramset, + gnutls_datum_t * x, gnutls_datum_t * y); int gnutls_x509_crt_get_subject_alt_name(gnutls_x509_crt_t cert, unsigned int seq, @@ -944,7 +980,7 @@ typedef enum gnutls_certificate_verify_flags { GNUTLS_VERIFY_DO_NOT_ALLOW_WILDCARDS = 1 << 12, GNUTLS_VERIFY_USE_TLS1_RSA = 1 << 13, GNUTLS_VERIFY_IGNORE_UNKNOWN_CRIT_EXTENSIONS = 1 << 14, - GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1 = 1 << 15, + GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1 = 1 << 15 /* cannot exceed 2^24 due to GNUTLS_PROFILE_TO_VFLAGS() */ } gnutls_certificate_verify_flags; @@ -952,6 +988,7 @@ typedef enum gnutls_certificate_verify_flags { /** * gnutls_certificate_verification_profiles_t: + * @GNUTLS_PROFILE_UNKNOWN: An invalid/unknown profile. * @GNUTLS_PROFILE_VERY_WEAK: A verification profile that * corresponds to @GNUTLS_SEC_PARAM_VERY_WEAK (64 bits) * @GNUTLS_PROFILE_LOW: A verification profile that @@ -963,8 +1000,10 @@ typedef enum gnutls_certificate_verify_flags { * @GNUTLS_PROFILE_HIGH: A verification profile that * corresponds to @GNUTLS_SEC_PARAM_HIGH (128 bits) * @GNUTLS_PROFILE_ULTRA: A verification profile that - * corresponds to @GNUTLS_SEC_PARAM_ULTRA (256 bits) -% * @GNUTLS_PROFILE_SUITEB128: A verification profile that + * corresponds to @GNUTLS_SEC_PARAM_ULTRA (192 bits) + * @GNUTLS_PROFILE_FUTURE: A verification profile that + * corresponds to @GNUTLS_SEC_PARAM_FUTURE (256 bits) + * @GNUTLS_PROFILE_SUITEB128: A verification profile that * applies the SUITEB128 rules * @GNUTLS_PROFILE_SUITEB192: A verification profile that * applies the SUITEB192 rules @@ -972,12 +1011,14 @@ typedef enum gnutls_certificate_verify_flags { * Enumeration of different certificate verification profiles. */ typedef enum gnutls_certificate_verification_profiles_t { + GNUTLS_PROFILE_UNKNOWN = 0, GNUTLS_PROFILE_VERY_WEAK = 1, GNUTLS_PROFILE_LOW = 2, GNUTLS_PROFILE_LEGACY = 4, GNUTLS_PROFILE_MEDIUM = 5, GNUTLS_PROFILE_HIGH = 6, GNUTLS_PROFILE_ULTRA = 7, + GNUTLS_PROFILE_FUTURE = 8, GNUTLS_PROFILE_SUITEB128=32, GNUTLS_PROFILE_SUITEB192=33 @@ -992,6 +1033,9 @@ typedef enum gnutls_certificate_verification_profiles_t { #define GNUTLS_VFLAGS_TO_PROFILE(x) \ ((((unsigned)x)>>24)&0xff) +const char * + gnutls_certificate_verification_profile_get_name(gnutls_certificate_verification_profiles_t id) __GNUTLS_CONST__; +gnutls_certificate_verification_profiles_t gnutls_certificate_verification_profile_get_id(const char *name) __GNUTLS_CONST__; unsigned gnutls_x509_crt_check_issuer(gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer); @@ -1062,7 +1106,12 @@ unsigned gnutls_x509_crt_check_key_purpose(gnutls_x509_crt_t cert, * @GNUTLS_PKCS_PBES2_AES_192: PBES2 AES-192. * @GNUTLS_PKCS_PBES2_AES_256: PBES2 AES-256. * @GNUTLS_PKCS_PBES2_DES: PBES2 single DES. - * @GNUTLS_PKCS_PBES2_DES_MD5: PBES1 with single DES; for compatibility with openssl only. + * @GNUTLS_PKCS_PBES1_DES_MD5: PBES1 with single DES; for compatibility with openssl only. + * @GNUTLS_PKCS_PBES2_GOST_TC26Z: PBES2 GOST 28147-89 CFB with TC26-Z S-box. + * @GNUTLS_PKCS_PBES2_GOST_CPA: PBES2 GOST 28147-89 CFB with CryptoPro-A S-box. + * @GNUTLS_PKCS_PBES2_GOST_CPB: PBES2 GOST 28147-89 CFB with CryptoPro-B S-box. + * @GNUTLS_PKCS_PBES2_GOST_CPC: PBES2 GOST 28147-89 CFB with CryptoPro-C S-box. + * @GNUTLS_PKCS_PBES2_GOST_CPD: PBES2 GOST 28147-89 CFB with CryptoPro-D S-box. * * Enumeration of different PKCS encryption flags. */ @@ -1077,7 +1126,12 @@ typedef enum gnutls_pkcs_encrypt_flags_t { GNUTLS_PKCS_PBES2_AES_256 = 1<<7, GNUTLS_PKCS_NULL_PASSWORD = 1<<8, GNUTLS_PKCS_PBES2_DES = 1<<9, - GNUTLS_PKCS_PBES1_DES_MD5 = 1<<10 + GNUTLS_PKCS_PBES1_DES_MD5 = 1<<10, + GNUTLS_PKCS_PBES2_GOST_TC26Z = 1<<11, + GNUTLS_PKCS_PBES2_GOST_CPA = 1<<12, + GNUTLS_PKCS_PBES2_GOST_CPB = 1<<13, + GNUTLS_PKCS_PBES2_GOST_CPC = 1<<14, + GNUTLS_PKCS_PBES2_GOST_CPD = 1<<15 } gnutls_pkcs_encrypt_flags_t; #define GNUTLS_PKCS_CIPHER_MASK(x) ((x)&(~(GNUTLS_PKCS_NULL_PASSWORD))) @@ -1089,6 +1143,11 @@ typedef enum gnutls_pkcs_encrypt_flags_t { #define GNUTLS_PKCS_USE_PBES2_AES_128 GNUTLS_PKCS_PBES2_AES_128 #define GNUTLS_PKCS_USE_PBES2_AES_192 GNUTLS_PKCS_PBES2_AES_192 #define GNUTLS_PKCS_USE_PBES2_AES_256 GNUTLS_PKCS_PBES2_AES_256 +#define GNUTLS_PKCS_USE_PBES2_GOST_TC26Z GNUTLS_PKCS_PBES2_GOST_TC26Z +#define GNUTLS_PKCS_USE_PBES2_GOST_CPA GNUTLS_PKCS_PBES2_GOST_CPA +#define GNUTLS_PKCS_USE_PBES2_GOST_CPB GNUTLS_PKCS_PBES2_GOST_CPB +#define GNUTLS_PKCS_USE_PBES2_GOST_CPC GNUTLS_PKCS_PBES2_GOST_CPC +#define GNUTLS_PKCS_USE_PBES2_GOST_CPD GNUTLS_PKCS_PBES2_GOST_CPD const char *gnutls_pkcs_schema_get_name(unsigned int schema); const char *gnutls_pkcs_schema_get_oid(unsigned int schema); @@ -1148,6 +1207,13 @@ int gnutls_x509_privkey_import_ecc_raw(gnutls_x509_privkey_t key, const gnutls_datum_t * x, const gnutls_datum_t * y, const gnutls_datum_t * k); +int gnutls_x509_privkey_import_gost_raw(gnutls_x509_privkey_t key, + gnutls_ecc_curve_t curve, + gnutls_digest_algorithm_t digest, + gnutls_gost_paramset_t paramset, + const gnutls_datum_t * x, + const gnutls_datum_t * y, + const gnutls_datum_t * k); int gnutls_x509_privkey_fix(gnutls_x509_privkey_t key); @@ -1167,6 +1233,14 @@ int gnutls_x509_privkey_import_dsa_raw(gnutls_x509_privkey_t key, int gnutls_x509_privkey_get_pk_algorithm(gnutls_x509_privkey_t key); int gnutls_x509_privkey_get_pk_algorithm2(gnutls_x509_privkey_t key, unsigned int *bits); +int gnutls_x509_privkey_get_spki(gnutls_x509_privkey_t key, + gnutls_x509_spki_t spki, + unsigned int flags); +int +gnutls_x509_privkey_set_spki(gnutls_x509_privkey_t key, + const gnutls_x509_spki_t spki, + unsigned int flags); + int gnutls_x509_privkey_get_key_id(gnutls_x509_privkey_t key, unsigned int flags, unsigned char *output_data, @@ -1182,12 +1256,14 @@ void gnutls_x509_privkey_set_flags(gnutls_x509_privkey_t key, unsigned int flags * gnutls_keygen_types_t: * @GNUTLS_KEYGEN_SEED: Specifies the seed to be used in key generation. * @GNUTLS_KEYGEN_DIGEST: The size field specifies the hash algorithm to be used in key generation. + * @GNUTLS_KEYGEN_SPKI: data points to a %gnutls_x509_spki_t structure; it is not used after the key generation call. * - * Enumeration of different key exchange algorithms. + * Enumeration of different key generation data options. */ typedef enum { GNUTLS_KEYGEN_SEED = 1, GNUTLS_KEYGEN_DIGEST = 2, + GNUTLS_KEYGEN_SPKI = 3 } gnutls_keygen_types_t; typedef struct { @@ -1245,6 +1321,13 @@ int gnutls_x509_privkey_export_ecc_raw(gnutls_x509_privkey_t key, gnutls_datum_t * x, gnutls_datum_t * y, gnutls_datum_t * k); +int gnutls_x509_privkey_export_gost_raw(gnutls_x509_privkey_t key, + gnutls_ecc_curve_t * curve, + gnutls_digest_algorithm_t * digest, + gnutls_gost_paramset_t * paramset, + gnutls_datum_t * x, + gnutls_datum_t * y, + gnutls_datum_t * k); int gnutls_x509_privkey_sign_data(gnutls_x509_privkey_t key, gnutls_digest_algorithm_t digest, @@ -1255,6 +1338,8 @@ int gnutls_x509_privkey_sign_data(gnutls_x509_privkey_t key, /* Certificate request stuff. */ +int gnutls_x509_crq_sign(gnutls_x509_crq_t crq, + gnutls_x509_privkey_t key); int gnutls_x509_crq_sign2(gnutls_x509_crq_t crq, gnutls_x509_privkey_t key, @@ -1391,6 +1476,11 @@ int gnutls_x509_crq_get_attribute_info(gnutls_x509_crq_t crq, size_t * sizeof_oid); int gnutls_x509_crq_get_pk_algorithm(gnutls_x509_crq_t crq, unsigned int *bits); +int gnutls_x509_crq_get_spki(gnutls_x509_crq_t crq, gnutls_x509_spki_t spki, + unsigned int flags); + +int gnutls_x509_crq_set_spki(gnutls_x509_crq_t crq, const gnutls_x509_spki_t spki, + unsigned int flags); int gnutls_x509_crq_get_signature_oid(gnutls_x509_crq_t crq, char *oid, size_t *oid_size); int gnutls_x509_crq_get_pk_oid(gnutls_x509_crq_t crq, char *oid, size_t *oid_size); @@ -1481,6 +1571,8 @@ int gnutls_x509_trust_list_get_issuer_by_subject_key_id(gnutls_x509_trust_list_t * @GNUTLS_TL_GET_COPY: The semantics of this flag are documented to the functions which * are applicable. In general, on returned value, the function will provide a copy * if this flag is provided, rather than a pointer to internal data. + * @GNUTLS_TL_FAIL_ON_INVALID_CRL: If an CRL is added which cannot be validated return + * an error instead of ignoring (must be used with %GNUTLS_TL_VERIFY_CRL). * * Enumeration of different certificate trust list flags. */ @@ -1493,8 +1585,10 @@ typedef enum gnutls_trust_list_flags_t { #define GNUTLS_TL_NO_DUPLICATES (1<<2) GNUTLS_TL_NO_DUPLICATE_KEY = (1<<3), #define GNUTLS_TL_NO_DUPLICATE_KEY (1<<3) - GNUTLS_TL_GET_COPY = (1<<4) + GNUTLS_TL_GET_COPY = (1<<4), #define GNUTLS_TL_GET_COPY (1<<4) + GNUTLS_TL_FAIL_ON_INVALID_CRL = (1<<5) +#define GNUTLS_TL_FAIL_ON_INVALID_CRL (1<<5) } gnutls_trust_list_flags_t; int diff --git a/lib/inih/LICENSE.txt b/lib/inih/LICENSE.txt new file mode 100644 index 0000000000..cb7ee2d017 --- /dev/null +++ b/lib/inih/LICENSE.txt @@ -0,0 +1,27 @@ + +The "inih" library is distributed under the New BSD license: + +Copyright (c) 2009, Ben Hoyt +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 Ben Hoyt 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 BEN HOYT ''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 BEN HOYT 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. diff --git a/lib/inih/ini.c b/lib/inih/ini.c new file mode 100644 index 0000000000..81df6a037f --- /dev/null +++ b/lib/inih/ini.c @@ -0,0 +1,269 @@ +/* inih -- simple .INI file parser + +inih is released under the New BSD license (see LICENSE.txt). Go to the project +home page for more info: + +https://github.com/benhoyt/inih + +*/ + +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include +#include +#include + +#include "ini.h" + +#if !INI_USE_STACK +#include +#endif + +#define MAX_SECTION 50 +#define MAX_NAME 50 + +/* Used by ini_parse_string() to keep track of string parsing state. */ +typedef struct { + const char* ptr; + size_t num_left; +} ini_parse_string_ctx; + +/* Strip whitespace chars off end of given string, in place. Return s. */ +static char* rstrip(char* s) +{ + char* p = s + strlen(s); + while (p > s && isspace((unsigned char)(*--p))) + *p = '\0'; + return s; +} + +/* Return pointer to first non-whitespace char in given string. */ +static char* lskip(const char* s) +{ + while (*s && isspace((unsigned char)(*s))) + s++; + return (char*)s; +} + +/* Return pointer to first char (of chars) or inline comment in given string, + or pointer to null at end of string if neither found. Inline comment must + be prefixed by a whitespace character to register as a comment. */ +static char* find_chars_or_comment(const char* s, const char* chars) +{ +#if INI_ALLOW_INLINE_COMMENTS + int was_space = 0; + while (*s && (!chars || !strchr(chars, *s)) && + !(was_space && strchr(INI_INLINE_COMMENT_PREFIXES, *s))) { + was_space = isspace((unsigned char)(*s)); + s++; + } +#else + while (*s && (!chars || !strchr(chars, *s))) { + s++; + } +#endif + return (char*)s; +} + +/* Version of strncpy that ensures dest (size bytes) is null-terminated. */ +static char* strncpy0(char* dest, const char* src, size_t size) +{ + strncpy(dest, src, size - 1); + dest[size - 1] = '\0'; + return dest; +} + +/* See documentation in header file. */ +int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, + void* user) +{ + /* Uses a fair bit of stack (use heap instead if you need to) */ +#if INI_USE_STACK + char line[INI_MAX_LINE]; + int max_line = INI_MAX_LINE; +#else + char* line; + int max_line = INI_INITIAL_ALLOC; +#endif +#if INI_ALLOW_REALLOC && !INI_USE_STACK + char* new_line; + int offset; +#endif + char section[MAX_SECTION] = ""; + char prev_name[MAX_NAME] = ""; + + char* start; + char* end; + char* name; + char* value; + int lineno = 0; + int error = 0; + +#if !INI_USE_STACK + line = (char*)malloc(INI_INITIAL_ALLOC); + if (!line) { + return -2; + } +#endif + +#if INI_HANDLER_LINENO +#define HANDLER(u, s, n, v) handler(u, s, n, v, lineno) +#else +#define HANDLER(u, s, n, v) handler(u, s, n, v) +#endif + + /* Scan through stream line by line */ + while (reader(line, max_line, stream) != NULL) { +#if INI_ALLOW_REALLOC && !INI_USE_STACK + offset = strlen(line); + while (offset == max_line - 1 && line[offset - 1] != '\n') { + max_line *= 2; + if (max_line > INI_MAX_LINE) + max_line = INI_MAX_LINE; + new_line = realloc(line, max_line); + if (!new_line) { + free(line); + return -2; + } + line = new_line; + if (reader(line + offset, max_line - offset, stream) == NULL) + break; + if (max_line >= INI_MAX_LINE) + break; + offset += strlen(line + offset); + } +#endif + + lineno++; + + start = line; +#if INI_ALLOW_BOM + if (lineno == 1 && (unsigned char)start[0] == 0xEF && + (unsigned char)start[1] == 0xBB && + (unsigned char)start[2] == 0xBF) { + start += 3; + } +#endif + start = lskip(rstrip(start)); + + if (strchr(INI_START_COMMENT_PREFIXES, *start)) { + /* Start-of-line comment */ + } +#if INI_ALLOW_MULTILINE + else if (*prev_name && *start && start > line) { + /* Non-blank line with leading whitespace, treat as continuation + of previous name's value (as per Python configparser). */ + if (!HANDLER(user, section, prev_name, start) && !error) + error = lineno; + } +#endif + else if (*start == '[') { + /* A "[section]" line */ + end = find_chars_or_comment(start + 1, "]"); + if (*end == ']') { + *end = '\0'; + strncpy0(section, start + 1, sizeof(section)); + *prev_name = '\0'; + } + else if (!error) { + /* No ']' found on section line */ + error = lineno; + } + } + else if (*start) { + /* Not a comment, must be a name[=:]value pair */ + end = find_chars_or_comment(start, "=:"); + if (*end == '=' || *end == ':') { + *end = '\0'; + name = rstrip(start); + value = end + 1; +#if INI_ALLOW_INLINE_COMMENTS + end = find_chars_or_comment(value, NULL); + if (*end) + *end = '\0'; +#endif + value = lskip(value); + rstrip(value); + + /* Valid name[=:]value pair found, call handler */ + strncpy0(prev_name, name, sizeof(prev_name)); + if (!HANDLER(user, section, name, value) && !error) + error = lineno; + } + else if (!error) { + /* No '=' or ':' found on name[=:]value line */ + error = lineno; + } + } + +#if INI_STOP_ON_FIRST_ERROR + if (error) + break; +#endif + } + +#if !INI_USE_STACK + free(line); +#endif + + return error; +} + +/* See documentation in header file. */ +int ini_parse_file(FILE* file, ini_handler handler, void* user) +{ + return ini_parse_stream((ini_reader)fgets, file, handler, user); +} + +/* See documentation in header file. */ +int ini_parse(const char* filename, ini_handler handler, void* user) +{ + FILE* file; + int error; + + file = fopen(filename, "r"); + if (!file) + return -1; + error = ini_parse_file(file, handler, user); + fclose(file); + return error; +} + +/* An ini_reader function to read the next line from a string buffer. This + is the fgets() equivalent used by ini_parse_string(). */ +static char* ini_reader_string(char* str, int num, void* stream) { + ini_parse_string_ctx* ctx = (ini_parse_string_ctx*)stream; + const char* ctx_ptr = ctx->ptr; + size_t ctx_num_left = ctx->num_left; + char* strp = str; + char c; + + if (ctx_num_left == 0 || num < 2) + return NULL; + + while (num > 1 && ctx_num_left != 0) { + c = *ctx_ptr++; + ctx_num_left--; + *strp++ = c; + if (c == '\n') + break; + num--; + } + + *strp = '\0'; + ctx->ptr = ctx_ptr; + ctx->num_left = ctx_num_left; + return str; +} + +/* See documentation in header file. */ +int ini_parse_string(const char* string, ini_handler handler, void* user) { + ini_parse_string_ctx ctx; + + ctx.ptr = string; + ctx.num_left = strlen(string); + return ini_parse_stream((ini_reader)ini_reader_string, &ctx, handler, + user); +} diff --git a/lib/inih/ini.h b/lib/inih/ini.h new file mode 100644 index 0000000000..6c3d664d2e --- /dev/null +++ b/lib/inih/ini.h @@ -0,0 +1,131 @@ +/* inih -- simple .INI file parser + +inih is released under the New BSD license (see LICENSE.txt). Go to the project +home page for more info: + +https://github.com/benhoyt/inih + +*/ + +#ifndef __INI_H__ +#define __INI_H__ + +/* Make this header file easier to include in C++ code */ +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +/* Nonzero if ini_handler callback should accept lineno parameter. */ +#ifndef INI_HANDLER_LINENO +#define INI_HANDLER_LINENO 0 +#endif + +/* Typedef for prototype of handler function. */ +#if INI_HANDLER_LINENO +typedef int (*ini_handler)(void* user, const char* section, + const char* name, const char* value, + int lineno); +#else +typedef int (*ini_handler)(void* user, const char* section, + const char* name, const char* value); +#endif + +/* Typedef for prototype of fgets-style reader function. */ +typedef char* (*ini_reader)(char* str, int num, void* stream); + +/* Parse given INI-style file. May have [section]s, name=value pairs + (whitespace stripped), and comments starting with ';' (semicolon). Section + is "" if name=value pair parsed before any section heading. name:value + pairs are also supported as a concession to Python's configparser. + + For each name=value pair parsed, call handler function with given user + pointer as well as section, name, and value (data only valid for duration + of handler call). Handler should return nonzero on success, zero on error. + + Returns 0 on success, line number of first error on parse error (doesn't + stop on first error), -1 on file open error, or -2 on memory allocation + error (only when INI_USE_STACK is zero). +*/ +int ini_parse(const char* filename, ini_handler handler, void* user); + +/* Same as ini_parse(), but takes a FILE* instead of filename. This doesn't + close the file when it's finished -- the caller must do that. */ +int ini_parse_file(FILE* file, ini_handler handler, void* user); + +/* Same as ini_parse(), but takes an ini_reader function pointer instead of + filename. Used for implementing custom or string-based I/O (see also + ini_parse_string). */ +int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, + void* user); + +/* Same as ini_parse(), but takes a zero-terminated string with the INI data +instead of a file. Useful for parsing INI data from a network socket or +already in memory. */ +int ini_parse_string(const char* string, ini_handler handler, void* user); + +/* Nonzero to allow multi-line value parsing, in the style of Python's + configparser. If allowed, ini_parse() will call the handler with the same + name for each subsequent line parsed. */ +#ifndef INI_ALLOW_MULTILINE +#define INI_ALLOW_MULTILINE 1 +#endif + +/* Nonzero to allow a UTF-8 BOM sequence (0xEF 0xBB 0xBF) at the start of + the file. See https://github.com/benhoyt/inih/issues/21 */ +#ifndef INI_ALLOW_BOM +#define INI_ALLOW_BOM 1 +#endif + +/* Chars that begin a start-of-line comment. Per Python configparser, allow + both ; and # comments at the start of a line by default. */ +#ifndef INI_START_COMMENT_PREFIXES +#define INI_START_COMMENT_PREFIXES ";#" +#endif + +/* Nonzero to allow inline comments (with valid inline comment characters + specified by INI_INLINE_COMMENT_PREFIXES). Set to 0 to turn off and match + Python 3.2+ configparser behaviour. */ +#ifndef INI_ALLOW_INLINE_COMMENTS +#define INI_ALLOW_INLINE_COMMENTS 1 +#endif +#ifndef INI_INLINE_COMMENT_PREFIXES +#define INI_INLINE_COMMENT_PREFIXES ";" +#endif + +/* Nonzero to use stack for line buffer, zero to use heap (malloc/free). */ +#ifndef INI_USE_STACK +#define INI_USE_STACK 1 +#endif + +/* Maximum line length for any line in INI file (stack or heap). Note that + this must be 3 more than the longest line (due to '\r', '\n', and '\0'). */ +#ifndef INI_MAX_LINE +#define INI_MAX_LINE 200 +#endif + +/* Nonzero to allow heap line buffer to grow via realloc(), zero for a + fixed-size buffer of INI_MAX_LINE bytes. Only applies if INI_USE_STACK is + zero. */ +#ifndef INI_ALLOW_REALLOC +#define INI_ALLOW_REALLOC 0 +#endif + +/* Initial size in bytes for heap line buffer. Only applies if INI_USE_STACK + is zero. */ +#ifndef INI_INITIAL_ALLOC +#define INI_INITIAL_ALLOC 200 +#endif + +/* Stop parsing on first error (default is to keep parsing). */ +#ifndef INI_STOP_ON_FIRST_ERROR +#define INI_STOP_ON_FIRST_ERROR 0 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __INI_H__ */ diff --git a/lib/iov.c b/lib/iov.c new file mode 100644 index 0000000000..d148ac97e4 --- /dev/null +++ b/lib/iov.c @@ -0,0 +1,200 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "iov.h" + +/** + * _gnutls_iov_iter_init: + * @iter: the iterator + * @iov: the data buffers + * @iov_count: the number of data buffers + * @block_size: block size to iterate + * + * Initialize the iterator. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise + * an error code is returned + */ +int +_gnutls_iov_iter_init(struct iov_iter_st *iter, + const giovec_t *iov, size_t iov_count, + size_t block_size) +{ + if (unlikely(block_size > MAX_CIPHER_BLOCK_SIZE)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + iter->iov = iov; + iter->iov_count = iov_count; + iter->iov_index = 0; + iter->iov_offset = 0; + iter->block_size = block_size; + iter->block_offset = 0; + return 0; +} + +/** + * _gnutls_iov_iter_next: + * @iter: the iterator + * @data: the return location of extracted data + * + * Retrieve block(s) pointed by @iter and advance it to the next + * position. It returns the number of bytes in @data. At the end of + * iteration, 0 is returned. + * + * If the data stored in @iter is not multiple of the block size, the + * remaining data is stored in the "block" field of @iter with the + * size stored in the "block_offset" field. + * + * Returns: On success, a value greater than or equal to zero is + * returned, otherwise a negative error code is returned + */ +ssize_t +_gnutls_iov_iter_next(struct iov_iter_st *iter, uint8_t **data) +{ + while (iter->iov_index < iter->iov_count) { + const giovec_t *iov = &iter->iov[iter->iov_index]; + uint8_t *p = iov->iov_base; + size_t len = iov->iov_len; + size_t block_left; + + if (!p) { + // skip NULL iov entries, else we run into issues below + iter->iov_index++; + continue; + } + + if (unlikely(len < iter->iov_offset)) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + len -= iter->iov_offset; + p += iter->iov_offset; + + /* We have at least one full block, return a whole set + * of full blocks immediately. */ + if (iter->block_offset == 0 && len >= iter->block_size) { + if ((len % iter->block_size) == 0) { + iter->iov_index++; + iter->iov_offset = 0; + } else { + len -= (len % iter->block_size); + iter->iov_offset += len; + } + + /* Return the blocks. */ + *data = p; + return len; + } + + /* We can complete one full block to return. */ + block_left = iter->block_size - iter->block_offset; + if (len >= block_left) { + memcpy(iter->block + iter->block_offset, p, block_left); + if (len == block_left) { + iter->iov_index++; + iter->iov_offset = 0; + } else + iter->iov_offset += block_left; + iter->block_offset = 0; + + /* Return the filled block. */ + *data = iter->block; + return iter->block_size; + } + + /* Not enough data for a full block, store in temp + * memory and continue. */ + memcpy(iter->block + iter->block_offset, p, len); + iter->block_offset += len; + iter->iov_index++; + iter->iov_offset = 0; + } + + if (iter->block_offset > 0) { + size_t len = iter->block_offset; + + /* Return the incomplete block. */ + *data = iter->block; + iter->block_offset = 0; + return len; + } + + return 0; +} + +/** + * _gnutls_iov_iter_sync: + * @iter: the iterator + * @data: data returned by _gnutls_iov_iter_next + * @data_size: size of @data + * + * Flush the content of temp buffer (if any) to the data buffer. + */ +int +_gnutls_iov_iter_sync(struct iov_iter_st *iter, const uint8_t *data, + size_t data_size) +{ + size_t iov_index; + size_t iov_offset; + + /* We didn't return the cached block. */ + if (data != iter->block) + return 0; + + iov_index = iter->iov_index; + iov_offset = iter->iov_offset; + + /* When syncing a cache block we walk backwards because we only have a + * pointer to were the block ends in the iovec, walking backwards is + * fine as we are always writing a full block, so the whole content + * is written in the right places: + * iovec: |--0--|---1---|--2--|-3-| + * block: |-----------------------| + * 1st write |---| + * 2nd write |----- + * 3rd write |------- + * last write |----- + */ + while (data_size > 0) { + const giovec_t *iov; + uint8_t *p; + size_t to_write; + + while (iov_offset == 0) { + if (unlikely(iov_index == 0)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + iov_index--; + iov_offset = iter->iov[iov_index].iov_len; + } + + iov = &iter->iov[iov_index]; + p = iov->iov_base; + to_write = MIN(data_size, iov_offset); + + iov_offset -= to_write; + data_size -= to_write; + + memcpy(p + iov_offset, &iter->block[data_size], to_write); + } + + return 0; +} diff --git a/lib/iov.h b/lib/iov.h new file mode 100644 index 0000000000..5b99034607 --- /dev/null +++ b/lib/iov.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_IOV_H +#define GNUTLS_LIB_IOV_H + +#include "gnutls_int.h" + +struct iov_iter_st { + const giovec_t *iov; + size_t iov_count; /* the number of iov */ + size_t iov_index; /* index of the current buffer */ + size_t iov_offset; /* byte offset in the current buffer */ + + uint8_t block[MAX_CIPHER_BLOCK_SIZE]; /* incomplete block for reading */ + size_t block_size; /* actual block size of the cipher */ + size_t block_offset; /* offset in block */ +}; + +int _gnutls_iov_iter_init(struct iov_iter_st *iter, + const giovec_t *iov, size_t iov_count, + size_t block_size); + +ssize_t _gnutls_iov_iter_next(struct iov_iter_st *iter, uint8_t **data); + +int _gnutls_iov_iter_sync(struct iov_iter_st *iter, const uint8_t *data, + size_t data_size); + +#endif /* GNUTLS_LIB_IOV_H */ diff --git a/lib/kx.c b/lib/kx.c index ef19563191..a874f15114 100644 --- a/lib/kx.c +++ b/lib/kx.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -31,40 +31,12 @@ #include "errors.h" #include "algorithms.h" #include "debug.h" +#include "locks.h" #include "mpi.h" #include #include #include -/* This is a temporary function to be used before the generate_* - internal API is changed to use mbuffers. For now we don't avoid the - extra alloc + memcpy. */ -static int -send_handshake(gnutls_session_t session, uint8_t * data, size_t size, - gnutls_handshake_description_t type) -{ - mbuffer_st *bufel; - - if (data == NULL && size == 0) - return _gnutls_send_handshake(session, NULL, type); - - if (data == NULL && size > 0) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - bufel = _gnutls_handshake_alloc(session, size); - if (bufel == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - _mbuffer_set_udata(bufel, data, size); - - return _gnutls_send_handshake(session, bufel, type); -} - - /* This file contains important thing for the TLS handshake procedure. */ @@ -74,6 +46,9 @@ send_handshake(gnutls_session_t session, uint8_t * data, size_t size, #define EXT_MASTER_SECRET "extended master secret" #define EXT_MASTER_SECRET_SIZE (sizeof(EXT_MASTER_SECRET)-1) +GNUTLS_STATIC_MUTEX(keylog_mutex); +static FILE *keylog; + static int generate_normal_master(gnutls_session_t session, gnutls_datum_t *, int); @@ -95,34 +70,106 @@ int _gnutls_generate_master(gnutls_session_t session, int keep_premaster) return 0; } -static void write_nss_key_log(gnutls_session_t session, const gnutls_datum_t *premaster) +/** + * gnutls_session_get_keylog_function: + * @session: is #gnutls_session_t type + * + * This function will return the callback function set using + * gnutls_session_set_keylog_function(). + * + * Returns: The function set or %NULL otherwise. + * + * Since: 3.6.13 + */ +gnutls_keylog_func +gnutls_session_get_keylog_function(const gnutls_session_t session) +{ + return session->internals.keylog_func; +} + +/** + * gnutls_session_set_keylog_function: + * @session: is #gnutls_session_t type + * @func: is the function to be called + * + * This function will set a callback to be called when a new secret is + * derived and installed during handshake. + * + * Since: 3.6.13 + */ +void +gnutls_session_set_keylog_function(gnutls_session_t session, + gnutls_keylog_func func) +{ + session->internals.keylog_func = func; +} + +int +_gnutls_call_keylog_func(gnutls_session_t session, + const char *label, + const uint8_t *data, + unsigned size) +{ + if (session->internals.keylog_func) { + gnutls_datum_t secret = {(void*)data, size}; + return session->internals.keylog_func(session, label, &secret); + } + return 0; +} + +int +_gnutls_nss_keylog_func(gnutls_session_t session, + const char *label, + const gnutls_datum_t *secret) +{ + /* ignore subsequent traffic secrets that are calculated from + * the previous traffic secret + */ + if (!session->internals.handshake_in_progress) + return 0; + + _gnutls_nss_keylog_write(session, label, secret->data, secret->size); + return 0; +} + +void _gnutls_nss_keylog_write(gnutls_session_t session, + const char *label, + const uint8_t *secret, size_t secret_size) { - char buf[512]; - char buf2[512]; - FILE *fp; static const char *keylogfile = NULL; static unsigned checked_env = 0; if (!checked_env) { checked_env = 1; keylogfile = secure_getenv("SSLKEYLOGFILE"); + if (keylogfile != NULL) + keylog = fopen(keylogfile, "a"); } - if (keylogfile == NULL) - return; - - fp = fopen(keylogfile, "a"); - if (fp == NULL) - return; - - fprintf(fp, "CLIENT_RANDOM %s %s\n", - _gnutls_bin2hex(session->security_parameters. - client_random, 32, buf, - sizeof(buf), NULL), - _gnutls_bin2hex(session->security_parameters. - master_secret, GNUTLS_MASTER_SIZE, - buf2, sizeof(buf2), NULL)); - fclose(fp); + if (keylog) { + char client_random_hex[2*GNUTLS_RANDOM_SIZE+1]; + char secret_hex[2*MAX_HASH_SIZE+1]; + + GNUTLS_STATIC_MUTEX_LOCK(keylog_mutex); + fprintf(keylog, "%s %s %s\n", + label, + _gnutls_bin2hex(session->security_parameters. + client_random, GNUTLS_RANDOM_SIZE, + client_random_hex, + sizeof(client_random_hex), NULL), + _gnutls_bin2hex(secret, secret_size, + secret_hex, sizeof(secret_hex), NULL)); + fflush(keylog); + GNUTLS_STATIC_MUTEX_UNLOCK(keylog_mutex); + } +} + +void _gnutls_nss_keylog_deinit(void) +{ + if (keylog) { + fclose(keylog); + keylog = NULL; + } } /* here we generate the TLS Master secret. @@ -197,15 +244,20 @@ generate_normal_master(gnutls_session_t session, gnutls_free(shash.data); } - write_nss_key_log(session, premaster); - if (!keep_premaster) _gnutls_free_temp_key_datum(premaster); if (ret < 0) return ret; - _gnutls_hard_log("INT: MASTER SECRET: %s\n", + ret = _gnutls_call_keylog_func(session, "CLIENT_RANDOM", + session->security_parameters.master_secret, + GNUTLS_MASTER_SIZE); + if (ret < 0) + return gnutls_assert_val(ret); + + _gnutls_hard_log("INT: MASTER SECRET[%d]: %s\n", + GNUTLS_MASTER_SIZE, _gnutls_bin2hex(session->security_parameters. master_secret, GNUTLS_MASTER_SIZE, buf, sizeof(buf), NULL)); @@ -213,26 +265,29 @@ generate_normal_master(gnutls_session_t session, return ret; } - /* This is called when we want to receive the key exchange message of the * server. It does nothing if this type of message is not required * by the selected ciphersuite. */ int _gnutls_send_server_kx_message(gnutls_session_t session, int again) { - gnutls_buffer_st data; + gnutls_buffer_st buf; int ret = 0; + mbuffer_st *bufel = NULL; if (session->internals.auth_struct->gnutls_generate_server_kx == NULL) return 0; - _gnutls_buffer_init(&data); if (again == 0) { + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); + ret = session->internals.auth_struct-> - gnutls_generate_server_kx(session, &data); + gnutls_generate_server_kx(session, &buf); if (ret == GNUTLS_E_INT_RET_0) { gnutls_assert(); @@ -244,16 +299,14 @@ int _gnutls_send_server_kx_message(gnutls_session_t session, int again) gnutls_assert(); goto cleanup; } - } - ret = send_handshake(session, data.data, data.length, - GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE); - if (ret < 0) { - gnutls_assert(); + bufel = _gnutls_buffer_to_mbuffer(&buf); } - cleanup: - _gnutls_buffer_clear(&data); + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE); + + cleanup: + _gnutls_buffer_clear(&buf); return ret; } @@ -262,8 +315,9 @@ int _gnutls_send_server_kx_message(gnutls_session_t session, int again) */ int _gnutls_send_server_crt_request(gnutls_session_t session, int again) { - gnutls_buffer_st data; + gnutls_buffer_st buf; int ret = 0; + mbuffer_st *bufel = NULL; if (session->internals.auth_struct-> gnutls_generate_server_crt_request == NULL) @@ -272,27 +326,28 @@ int _gnutls_send_server_crt_request(gnutls_session_t session, int again) if (session->internals.send_cert_req <= 0) return 0; - _gnutls_buffer_init(&data); if (again == 0) { + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); + ret = session->internals.auth_struct-> - gnutls_generate_server_crt_request(session, &data); + gnutls_generate_server_crt_request(session, &buf); if (ret < 0) { gnutls_assert(); goto cleanup; } - } - ret = send_handshake(session, data.data, data.length, - GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST); - if (ret < 0) { - gnutls_assert(); + bufel = _gnutls_buffer_to_mbuffer(&buf); } - cleanup: - _gnutls_buffer_clear(&data); + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST); + + cleanup: + _gnutls_buffer_clear(&buf); return ret; } @@ -302,32 +357,34 @@ int _gnutls_send_server_crt_request(gnutls_session_t session, int again) */ int _gnutls_send_client_kx_message(gnutls_session_t session, int again) { - gnutls_buffer_st data; + gnutls_buffer_st buf; int ret = 0; + mbuffer_st *bufel = NULL; if (session->internals.auth_struct->gnutls_generate_client_kx == NULL) return 0; - _gnutls_buffer_init(&data); - if (again == 0) { + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); + ret = session->internals.auth_struct-> - gnutls_generate_client_kx(session, &data); + gnutls_generate_client_kx(session, &buf); if (ret < 0) { gnutls_assert(); goto cleanup; } - } - ret = send_handshake(session, data.data, data.length, - GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE); - if (ret < 0) { - gnutls_assert(); + + bufel = _gnutls_buffer_to_mbuffer(&buf); } - cleanup: - _gnutls_buffer_clear(&data); + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE); + + cleanup: + _gnutls_buffer_clear(&buf); return ret; } @@ -338,8 +395,9 @@ int _gnutls_send_client_kx_message(gnutls_session_t session, int again) int _gnutls_send_client_certificate_verify(gnutls_session_t session, int again) { - gnutls_buffer_st data; + gnutls_buffer_st buf; int ret = 0; + mbuffer_st *bufel = NULL; /* This is a packet that is only sent by the client */ @@ -348,7 +406,7 @@ _gnutls_send_client_certificate_verify(gnutls_session_t session, int again) /* if certificate verify is not needed just exit */ - if (session->internals.crt_requested == 0) + if (!(session->internals.hsk_flags & HSK_CRT_ASKED)) return 0; @@ -359,12 +417,14 @@ _gnutls_send_client_certificate_verify(gnutls_session_t session, int again) */ } - _gnutls_buffer_init(&data); - if (again == 0) { + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); + ret = session->internals.auth_struct-> - gnutls_generate_client_crt_vrfy(session, &data); + gnutls_generate_client_crt_vrfy(session, &buf); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -373,16 +433,14 @@ _gnutls_send_client_certificate_verify(gnutls_session_t session, int again) if (ret == 0) goto cleanup; - } - ret = send_handshake(session, data.data, data.length, - GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY); - if (ret < 0) { - gnutls_assert(); + bufel = _gnutls_buffer_to_mbuffer(&buf); } - cleanup: - _gnutls_buffer_clear(&data); + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY); + + cleanup: + _gnutls_buffer_clear(&buf); return ret; } @@ -390,20 +448,22 @@ _gnutls_send_client_certificate_verify(gnutls_session_t session, int again) */ int _gnutls_send_client_certificate(gnutls_session_t session, int again) { - gnutls_buffer_st data; + gnutls_buffer_st buf; int ret = 0; + mbuffer_st *bufel = NULL; - - if (session->internals.crt_requested == 0) + if (!(session->internals.hsk_flags & HSK_CRT_ASKED)) return 0; if (session->internals.auth_struct-> gnutls_generate_client_certificate == NULL) return 0; - _gnutls_buffer_init(&data); - if (again == 0) { + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); + #ifdef ENABLE_SSL3 if (get_num_version(session) != GNUTLS_SSL3 || session->internals.selected_cert_list_length > 0) @@ -414,13 +474,15 @@ int _gnutls_send_client_certificate(gnutls_session_t session, int again) ret = session->internals.auth_struct-> gnutls_generate_client_certificate(session, - &data); + &buf); if (ret < 0) { gnutls_assert(); goto cleanup; } } + + bufel = _gnutls_buffer_to_mbuffer(&buf); } #ifdef ENABLE_SSL3 @@ -430,18 +492,18 @@ int _gnutls_send_client_certificate(gnutls_session_t session, int again) */ if (get_num_version(session) == GNUTLS_SSL3 && session->internals.selected_cert_list_length == 0) { - ret = + _mbuffer_xfree(&bufel); + return gnutls_alert_send(session, GNUTLS_AL_WARNING, GNUTLS_A_SSL3_NO_CERTIFICATE); } else /* TLS 1.0 or SSL 3.0 with a valid certificate */ #endif - ret = send_handshake(session, data.data, data.length, - GNUTLS_HANDSHAKE_CERTIFICATE_PKT); + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_CERTIFICATE_PKT); - cleanup: - _gnutls_buffer_clear(&data); + cleanup: + _gnutls_buffer_clear(&buf); return ret; } @@ -450,34 +512,35 @@ int _gnutls_send_client_certificate(gnutls_session_t session, int again) */ int _gnutls_send_server_certificate(gnutls_session_t session, int again) { - gnutls_buffer_st data; + gnutls_buffer_st buf; int ret = 0; - + mbuffer_st *bufel = NULL; if (session->internals.auth_struct-> gnutls_generate_server_certificate == NULL) return 0; - _gnutls_buffer_init(&data); - if (again == 0) { + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); + ret = session->internals.auth_struct-> - gnutls_generate_server_certificate(session, &data); + gnutls_generate_server_certificate(session, &buf); if (ret < 0) { gnutls_assert(); goto cleanup; } - } - ret = send_handshake(session, data.data, data.length, - GNUTLS_HANDSHAKE_CERTIFICATE_PKT); - if (ret < 0) { - gnutls_assert(); + + bufel = _gnutls_buffer_to_mbuffer(&buf); } - cleanup: - _gnutls_buffer_clear(&data); + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_CERTIFICATE_PKT); + + cleanup: + _gnutls_buffer_clear(&buf); return ret; } @@ -663,7 +726,7 @@ int _gnutls_recv_client_certificate(gnutls_session_t session) if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND && optional != 0) ret = 0; else - session->internals.crt_requested = 1; + session->internals.hsk_flags |= HSK_CRT_VRFY_EXPECTED; cleanup: _gnutls_buffer_clear(&buf); @@ -717,7 +780,7 @@ _gnutls_recv_client_certificate_verify_message(gnutls_session_t session) return 0; if (session->internals.send_cert_req == 0 || - session->internals.crt_requested == 0) { + (!(session->internals.hsk_flags & HSK_CRT_VRFY_EXPECTED))) { return 0; } diff --git a/lib/kx.h b/lib/kx.h index 00bd22f1af..6b4a7fcae5 100644 --- a/lib/kx.h +++ b/lib/kx.h @@ -16,10 +16,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_KX_H +#define GNUTLS_LIB_KX_H + int _gnutls_send_server_kx_message(gnutls_session_t session, int again); int _gnutls_send_client_kx_message(gnutls_session_t session, int again); int _gnutls_recv_server_kx_message(gnutls_session_t session); @@ -35,3 +38,15 @@ int _gnutls_recv_server_crt_request(gnutls_session_t session); int _gnutls_send_server_crt_request(gnutls_session_t session, int again); int _gnutls_recv_client_certificate_verify_message(gnutls_session_t session); +int _gnutls_call_keylog_func(gnutls_session_t session, + const char *label, + const uint8_t *data, + unsigned size); +void _gnutls_nss_keylog_write(gnutls_session_t session, + const char *label, + const uint8_t *secret, size_t secret_size); +int _gnutls_nss_keylog_func(gnutls_session_t session, + const char *label, + const gnutls_datum_t *secret); + +#endif /* GNUTLS_LIB_KX_H */ diff --git a/lib/libgnutls.map b/lib/libgnutls.map index 61a4e98194..ac6be479f1 100644 --- a/lib/libgnutls.map +++ b/lib/libgnutls.map @@ -16,7 +16,12 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see + +# When new symbols are added in a release (x.y.z) they are added +# as GNUTLS_x_y_z { global: new_symbol } GNUTLS_prev_release_version +# That allows tools like rpm detect the correct library dependency of an application. +# See CONTRIBUTION.md symbol versioning section for more information. GNUTLS_3_4 { @@ -1134,17 +1139,200 @@ GNUTLS_3_4 gnutls_utf8_password_normalize; gnutls_idna_map; gnutls_idna_reverse_map; + local: + *; +}; + +GNUTLS_3_6_0 +{ + global: + gnutls_pubkey_export_rsa_raw2; + gnutls_pubkey_export_dsa_raw2; + gnutls_pubkey_export_ecc_raw2; + gnutls_privkey_export_rsa_raw2; + gnutls_privkey_export_dsa_raw2; + gnutls_privkey_export_ecc_raw2; gnutls_x509_crt_set_flags; gnutls_x509_crt_check_ip; gnutls_x509_ext_import_inhibit_anypolicy; gnutls_x509_ext_export_inhibit_anypolicy; gnutls_x509_crt_get_inhibit_anypolicy; gnutls_x509_crt_set_inhibit_anypolicy; + gnutls_decode_rs_value; + gnutls_encode_rs_value; + gnutls_x509_spki_init; + gnutls_x509_spki_deinit; + gnutls_x509_spki_get_rsa_pss_params; + gnutls_x509_spki_set_rsa_pss_params; + gnutls_x509_crt_get_spki; + gnutls_x509_crt_set_spki; + gnutls_x509_crq_get_spki; + gnutls_x509_crq_set_spki; + gnutls_x509_privkey_set_spki; + gnutls_x509_privkey_get_spki; + gnutls_pubkey_set_spki; + gnutls_pubkey_get_spki; + gnutls_privkey_set_spki; + gnutls_privkey_get_spki; + gnutls_sign_supports_pk_algorithm; + gnutls_privkey_sign_hash2; + gnutls_privkey_sign_data2; + gnutls_sign_is_secure2; + gnutls_group_get_name; + gnutls_group_get_id; + gnutls_group_list; + gnutls_group_get; + gnutls_priority_group_list; + gnutls_pkcs11_token_check_mechanism; + gnutls_base64_encode2; + gnutls_base64_decode2; + gnutls_privkey_import_ext4; local: *; -}; +} GNUTLS_3_4; + +GNUTLS_3_6_2 +{ + global: + gnutls_srp_8192_group_generator; + gnutls_srp_8192_group_prime; +} GNUTLS_3_6_0; + +GNUTLS_3_6_3 +{ + global: + gnutls_fips140_set_mode; + gnutls_session_key_update; + gnutls_ext_get_current_msg; + gnutls_reauth; + gnutls_ocsp_status_request_get2; + gnutls_ocsp_resp_import2; + gnutls_ocsp_resp_export2; + gnutls_ocsp_resp_list_import2; + gnutls_certificate_set_retrieve_function3; + gnutls_certificate_set_ocsp_status_request_file2; + gnutls_certificate_set_ocsp_status_request_mem; + gnutls_certificate_get_ocsp_expiration; + gnutls_record_send2; + gnutls_ext_raw_parse; + gnutls_x509_crt_list_import_url; + gnutls_pcert_list_import_x509_file; + gnutls_pkcs11_token_get_ptr; + gnutls_pkcs11_obj_get_ptr; + gnutls_session_ticket_send; + gnutls_aead_cipher_encryptv; + gnutls_gost_paramset_get_name; + gnutls_gost_paramset_get_oid; + gnutls_oid_to_gost_paramset; + gnutls_decode_gost_rs_value; + gnutls_encode_gost_rs_value; + gnutls_pubkey_export_gost_raw2; + gnutls_pubkey_import_gost_raw; + gnutls_x509_crt_get_pk_gost_raw; + gnutls_privkey_export_gost_raw2; + gnutls_privkey_import_gost_raw; + gnutls_x509_privkey_export_gost_raw; + gnutls_x509_privkey_import_gost_raw; + gnutls_set_default_priority_append; + gnutls_priority_init2; +} GNUTLS_3_6_2; + +GNUTLS_3_6_4 +{ + global: + gnutls_record_set_max_early_data_size; + gnutls_ffdhe_6144_group_prime; + gnutls_ffdhe_6144_group_generator; + gnutls_ffdhe_6144_key_bits; + gnutls_certificate_type_get2; + gnutls_priority_certificate_type_list2; +} GNUTLS_3_6_3; + +GNUTLS_3_6_5 +{ + global: + gnutls_record_get_max_early_data_size; + gnutls_record_send_early_data; + gnutls_record_recv_early_data; + gnutls_db_check_entry_expire_time; + gnutls_anti_replay_set_add_function; + gnutls_anti_replay_set_ptr; + gnutls_anti_replay_init; + gnutls_anti_replay_deinit; + gnutls_anti_replay_set_window; + gnutls_anti_replay_enable; + gnutls_privkey_decrypt_data2; +} GNUTLS_3_6_4; + +GNUTLS_3_6_6 +{ + global: + gnutls_certificate_set_rawpk_key_mem; + gnutls_certificate_set_rawpk_key_file; + gnutls_pcert_import_rawpk; + gnutls_pcert_import_rawpk_raw; +} GNUTLS_3_6_5; + +GNUTLS_3_6_8 +{ + global: + gnutls_prf_early; + gnutls_record_set_max_recv_size; + gnutls_dh_params_import_raw3; + gnutls_ffdhe_2048_group_q; + gnutls_ffdhe_3072_group_q; + gnutls_ffdhe_4096_group_q; + gnutls_ffdhe_6144_group_q; + gnutls_ffdhe_8192_group_q; +} GNUTLS_3_6_6; + +GNUTLS_3_6_9 +{ + global: + gnutls_get_system_config_file; + gnutls_hmac_copy; + gnutls_hash_copy; +} GNUTLS_3_6_8; + +GNUTLS_3_6_10 +{ + global: + gnutls_aead_cipher_encryptv2; + gnutls_aead_cipher_decryptv2; +} GNUTLS_3_6_9; + +GNUTLS_3_6_12 +{ + global: + gnutls_certificate_verification_profile_get_name; + gnutls_certificate_verification_profile_get_id; + gnutls_hmac_get_key_size; +} GNUTLS_3_6_10; + +GNUTLS_3_6_13 +{ + global: + gnutls_hkdf_extract; + gnutls_hkdf_expand; + gnutls_pbkdf2; + gnutls_session_get_keylog_function; + gnutls_session_set_keylog_function; + gnutls_prf_hash_get; + gnutls_psk_server_get_username2; + gnutls_psk_set_server_credentials_function2; + gnutls_psk_set_client_credentials2; + gnutls_psk_set_client_credentials_function2; +} GNUTLS_3_6_12; + +GNUTLS_3_6_14 +{ + global: + gnutls_ext_get_name2; + gnutls_pkcs7_print_signature_info; +} GNUTLS_3_6_13; GNUTLS_FIPS140_3_4 { + global: gnutls_cipher_self_test; gnutls_pk_self_test; gnutls_mac_self_test; @@ -1166,7 +1354,8 @@ GNUTLS_FIPS140_3_4 { _gnutls_dh_generate_key; _gnutls_ecdh_generate_key; _gnutls_ecdh_compute_key; -}; + _gnutls_cipher_get_iv; +} GNUTLS_3_4; GNUTLS_PRIVATE_3_4 { global: @@ -1183,6 +1372,11 @@ GNUTLS_PRIVATE_3_4 { _gnutls_digest_exists; _gnutls_log; + # PSK extension parser unit test + _gnutls13_psk_ext_parser_init; + _gnutls13_psk_ext_iter_next_identity; + _gnutls13_psk_ext_iter_next_binder; + # Internal symbols needed by gnutls-cli-debug: _gnutls_rsa_pms_set_version; _gnutls_record_set_default_version; @@ -1193,9 +1387,21 @@ GNUTLS_PRIVATE_3_4 { _gnutls_mpi_ops; _gnutls_mpi_log; _gnutls_mpi_release; + # tests/time.c + _gnutls_utcTime2gtime; + _gnutls_x509_generalTime2gtime; + # Internal symbols needed by tests/: + # by tests/tls13/prf-early.c + _gnutls_global_version; + _gnutls_default_priority_string; + _gnutls_supplemental_deinit; + _gnutls_record_overhead; + _gnutls_cipher_to_entry; + _gnutls_pkcs11_token_get_url; _gnutls_pkcs12_string_to_key; _gnutls_bin2hex; + _gnutls_version_to_entry; _gnutls_mac_to_entry; _gnutls_resolve_priorities; # Internal symbols needed by tests/name-constraints: @@ -1207,4 +1413,20 @@ GNUTLS_PRIVATE_3_4 { # Internal symbols needed by tests/name-constraints-merge: _gnutls_x509_name_constraints_merge; _gnutls_server_name_set_raw; -}; + # Internal symbols needed by tests/suite/resume-with-stek-expiration + _gnutls_set_session_ticket_key_rotation_callback; + # Internal symbols needed by tests/virt-time.h + _gnutls_global_set_gettime_function; + # Internal symbols needed by tests/tls13/anti_replay.c + _gnutls_anti_replay_check; + # needed by gnutls-strcodes.c + _gnutls_ecc_curve_is_supported; + # needed by tests/iov: + _gnutls_iov_iter_init; + _gnutls_iov_iter_next; + _gnutls_iov_iter_sync; + # needed by tests/buffer: + _gnutls_buffer_unescape; + _gnutls_buffer_pop_datum; + _gnutls_buffer_clear; +} GNUTLS_3_4; diff --git a/lib/locks.c b/lib/locks.c index 494199a5a1..d9ea4d77b5 100644 --- a/lib/locks.c +++ b/lib/locks.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/locks.h b/lib/locks.h index b1efbb52e8..63780bf571 100644 --- a/lib/locks.h +++ b/lib/locks.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_LOCKS_H -#define GNUTLS_LOCKS_H +#ifndef GNUTLS_LIB_LOCKS_H +#define GNUTLS_LIB_LOCKS_H #include #include "gnutls_int.h" @@ -40,7 +40,7 @@ extern mutex_unlock_func gnutls_mutex_unlock; # include /* Idea based based on comment 2 at: - * http://stackoverflow.com/questions/3555859/is-it-possible-to-do-static-initialization-of-mutexes-in-windows + * https://stackoverflow.com/questions/3555859/is-it-possible-to-do-static-initialization-of-mutexes-in-windows */ # define GNUTLS_STATIC_MUTEX(mutex) \ static CRITICAL_SECTION *mutex = NULL @@ -76,4 +76,4 @@ extern mutex_unlock_func gnutls_mutex_unlock; # define GNUTLS_STATIC_MUTEX_UNLOCK(mutex) #endif -#endif +#endif /* GNUTLS_LIB_LOCKS_H */ diff --git a/lib/mbuffers.c b/lib/mbuffers.c index 2bcd57e426..7f78425922 100644 --- a/lib/mbuffers.c +++ b/lib/mbuffers.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -126,6 +126,25 @@ mbuffer_st *_mbuffer_dequeue(mbuffer_head_st * buf, mbuffer_st * bufel) return ret; } +/* Append a segment to the beginning of this buffer. + * + * Cost: O(1) + */ +void _mbuffer_head_push_first(mbuffer_head_st * buf, mbuffer_st * bufel) +{ + bufel->prev = NULL; + bufel->next = buf->head; + + buf->length++; + buf->byte_length += bufel->msg.size - bufel->mark; + + if (buf->head != NULL) + buf->head->prev = bufel; + else + buf->tail = bufel; + buf->head = bufel; +} + /* Get a reference to the first segment of the buffer and * remove it from the list. * @@ -305,7 +324,7 @@ _mbuffer_append_data(mbuffer_st * bufel, void *newdata, #ifdef ENABLE_ALIGN16 # define ALIGN_SIZE 16 -/* Allocate a 16-byte alligned buffer segment. The segment is not initially "owned" by +/* Allocate a 16-byte aligned buffer segment. The segment is not initially "owned" by * any buffer. * * maximum_size: Amount of data that this segment can contain. diff --git a/lib/mbuffers.h b/lib/mbuffers.h index 4c68b55f98..a41850c504 100644 --- a/lib/mbuffers.h +++ b/lib/mbuffers.h @@ -16,15 +16,16 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_MBUFFERS_H -#define GNUTLS_MBUFFERS_H +#ifndef GNUTLS_LIB_MBUFFERS_H +#define GNUTLS_LIB_MBUFFERS_H #include "gnutls_int.h" #include "errors.h" +#include void _mbuffer_head_init(mbuffer_head_st * buf); void _mbuffer_head_clear(mbuffer_head_st * buf); @@ -38,6 +39,8 @@ mbuffer_st *_mbuffer_head_get_first(mbuffer_head_st * buf, gnutls_datum_t * msg); mbuffer_st *_mbuffer_head_get_next(mbuffer_st * cur, gnutls_datum_t * msg); +void _mbuffer_head_push_first(mbuffer_head_st * buf, mbuffer_st * bufel); + mbuffer_st *_mbuffer_head_pop_first(mbuffer_head_st * buf); /* This is dangerous since it will replace bufel with a new @@ -101,7 +104,62 @@ inline static void _mbuffer_set_uhead_size(mbuffer_st * bufel, size_t size) bufel->uhead_mark = size; } +inline static void _mbuffer_init(mbuffer_st *bufel, size_t max) +{ + memset(bufel, 0, sizeof(*bufel)); + bufel->maximum_size = max; + + /* payload points after the mbuffer_st structure */ + bufel->msg.data = (uint8_t *) bufel + sizeof(mbuffer_st); +} + +/* Helper functions to utilize a gnutls_buffer_st in order + * to generate a gnutls_mbuffer_st, without multiple allocations. + */ +inline static int _gnutls_buffer_init_mbuffer(gnutls_buffer_st * buf, size_t header_size) +{ + int ret; + mbuffer_st *bufel; + + _gnutls_buffer_init(buf); + + ret = _gnutls_buffer_resize(buf, sizeof(mbuffer_st)+header_size); + if (ret < 0) + return gnutls_assert_val(ret); + + /* we store the uhead size on the uninitialized bufel, only to read + * it back on _gnutls_buffer_to_mbuffer(). */ + bufel = (void*)buf->data; + _mbuffer_set_uhead_size(bufel, header_size); + + buf->length = sizeof(mbuffer_st)+header_size; + + return 0; +} +#define _gnutls_buffer_init_handshake_mbuffer(b) _gnutls_buffer_init_mbuffer(b, HANDSHAKE_HEADER_SIZE(session)) + + +/* Cannot fail */ +inline static mbuffer_st *_gnutls_buffer_to_mbuffer(gnutls_buffer_st * buf) +{ + mbuffer_st *bufel; + unsigned header_size; + + bufel = (void*)buf->data; + + header_size = _mbuffer_get_uhead_size(bufel); + assert(buf->length >= sizeof(mbuffer_st)+header_size); + + _mbuffer_init(bufel, buf->length - sizeof(mbuffer_st)); + + _mbuffer_set_udata_size(bufel, buf->length - sizeof(mbuffer_st)); + _mbuffer_set_uhead_size(bufel, header_size); + + _gnutls_buffer_init(buf); /* avoid double frees */ + + return bufel; +} inline static mbuffer_st *_gnutls_handshake_alloc(gnutls_session_t session, size_t maximum) @@ -140,4 +198,4 @@ int _mbuffer_linearize_align16(mbuffer_head_st * buf, unsigned align_pos); # define _mbuffer_linearize_align16(x,y) _mbuffer_linearize(x) #endif -#endif +#endif /* GNUTLS_LIB_MBUFFERS_H */ diff --git a/lib/mem.c b/lib/mem.c index 65f06588a3..32cab5a47c 100644 --- a/lib/mem.c +++ b/lib/mem.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/mem.h b/lib/mem.h index 8de248632f..dc838a2b4d 100644 --- a/lib/mem.h +++ b/lib/mem.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_MEM_H -#define GNUTLS_MEM_H +#ifndef GNUTLS_LIB_MEM_H +#define GNUTLS_LIB_MEM_H #include @@ -54,4 +54,4 @@ int safe_memcmp(const void *s1, const void *s2, size_t n) #define zeroize_temp_key zeroize_key #define zrelease_temp_mpi_key zrelease_mpi_key -#endif /* GNUTLS_MEM_H */ +#endif /* GNUTLS_LIB_MEM_H */ diff --git a/lib/minitasn1/.gitignore b/lib/minitasn1/.gitignore new file mode 100644 index 0000000000..68359a7869 --- /dev/null +++ b/lib/minitasn1/.gitignore @@ -0,0 +1,2 @@ +*.c +*.h diff --git a/lib/minitasn1/Makefile.am b/lib/minitasn1/Makefile.am index 9b6769746d..054de9e3d3 100644 --- a/lib/minitasn1/Makefile.am +++ b/lib/minitasn1/Makefile.am @@ -27,6 +27,10 @@ AM_CPPFLAGS = -DASN1_BUILDING \ -I$(builddir)/../../gl \ -I$(srcdir)/.. +# Too many warnings from gnulib macros +WARN_CFLAGS += \ + -Wno-type-limits + noinst_LTLIBRARIES = libminitasn1.la libminitasn1_la_SOURCES = libtasn1.h gstr.h int.h parser_aux.h \ diff --git a/lib/minitasn1/coding.c b/lib/minitasn1/coding.c deleted file mode 100644 index 7141df7b4e..0000000000 --- a/lib/minitasn1/coding.c +++ /dev/null @@ -1,1347 +0,0 @@ -/* - * Copyright (C) 2002-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - - -/*****************************************************/ -/* File: coding.c */ -/* Description: Functions to create a DER coding of */ -/* an ASN1 type. */ -/*****************************************************/ - -#include -#include "parser_aux.h" -#include -#include "element.h" -#include "minmax.h" -#include - -#define MAX_TAG_LEN 16 - -/******************************************************/ -/* Function : _asn1_error_description_value_not_found */ -/* Description: creates the ErrorDescription string */ -/* for the ASN1_VALUE_NOT_FOUND error. */ -/* Parameters: */ -/* node: node of the tree where the value is NULL. */ -/* ErrorDescription: string returned. */ -/* Return: */ -/******************************************************/ -static void -_asn1_error_description_value_not_found (asn1_node node, - char *ErrorDescription) -{ - - if (ErrorDescription == NULL) - return; - - Estrcpy (ErrorDescription, ":: value of element '"); - _asn1_hierarchical_name (node, ErrorDescription + strlen (ErrorDescription), - ASN1_MAX_ERROR_DESCRIPTION_SIZE - 40); - Estrcat (ErrorDescription, "' not found"); - -} - -/** - * asn1_length_der: - * @len: value to convert. - * @der: buffer to hold the returned encoding (may be %NULL). - * @der_len: number of meaningful bytes of ANS (der[0]..der[der_len-1]). - * - * Creates the DER encoding of the provided length value. - * The @der buffer must have enough room for the output. The maximum - * length this function will encode is %ASN1_MAX_LENGTH_SIZE. - * - * To know the size of the DER encoding use a %NULL value for @der. - **/ -void -asn1_length_der (unsigned long int len, unsigned char *der, int *der_len) -{ - int k; - unsigned char temp[ASN1_MAX_LENGTH_SIZE]; -#if SIZEOF_UNSIGNED_LONG_INT > 8 - len &= 0xFFFFFFFFFFFFFFFF; -#endif - - if (len < 128) - { - /* short form */ - if (der != NULL) - der[0] = (unsigned char) len; - *der_len = 1; - } - else - { - /* Long form */ - k = 0; - while (len) - { - temp[k++] = len & 0xFF; - len = len >> 8; - } - *der_len = k + 1; - if (der != NULL) - { - der[0] = ((unsigned char) k & 0x7F) + 128; - while (k--) - der[*der_len - 1 - k] = temp[k]; - } - } -} - -/******************************************************/ -/* Function : _asn1_tag_der */ -/* Description: creates the DER coding for the CLASS */ -/* and TAG parameters. */ -/* It is limited by the ASN1_MAX_TAG_SIZE variable */ -/* Parameters: */ -/* class: value to convert. */ -/* tag_value: value to convert. */ -/* ans: string returned. */ -/* ans_len: number of meaningful bytes of ANS */ -/* (ans[0]..ans[ans_len-1]). */ -/* Return: */ -/******************************************************/ -static void -_asn1_tag_der (unsigned char class, unsigned int tag_value, - unsigned char *ans, int *ans_len) -{ - int k; - unsigned char temp[ASN1_MAX_TAG_SIZE]; - - if (tag_value < 31) - { - /* short form */ - ans[0] = (class & 0xE0) + ((unsigned char) (tag_value & 0x1F)); - *ans_len = 1; - } - else - { - /* Long form */ - ans[0] = (class & 0xE0) + 31; - k = 0; - while (tag_value != 0) - { - temp[k++] = tag_value & 0x7F; - tag_value >>= 7; - - if (k > ASN1_MAX_TAG_SIZE - 1) - break; /* will not encode larger tags */ - } - *ans_len = k + 1; - while (k--) - ans[*ans_len - 1 - k] = temp[k] + 128; - ans[*ans_len - 1] -= 128; - } -} - -/** - * asn1_octet_der: - * @str: the input data. - * @str_len: STR length (str[0]..str[*str_len-1]). - * @der: encoded string returned. - * @der_len: number of meaningful bytes of DER (der[0]..der[der_len-1]). - * - * Creates a length-value DER encoding for the input data. - * The DER encoding of the input data will be placed in the @der variable. - * - * Note that the OCTET STRING tag is not included in the output. - * - * This function does not return any value because it is expected - * that @der_len will contain enough bytes to store the string - * plus the DER encoding. The DER encoding size can be obtained using - * asn1_length_der(). - **/ -void -asn1_octet_der (const unsigned char *str, int str_len, - unsigned char *der, int *der_len) -{ - int len_len; - - if (der == NULL || str_len < 0) - return; - - asn1_length_der (str_len, der, &len_len); - memcpy (der + len_len, str, str_len); - *der_len = str_len + len_len; -} - - -/** - * asn1_encode_simple_der: - * @etype: The type of the string to be encoded (ASN1_ETYPE_) - * @str: the string data. - * @str_len: the string length - * @tl: the encoded tag and length - * @tl_len: the bytes of the @tl field - * - * Creates the DER encoding for various simple ASN.1 types like strings etc. - * It stores the tag and length in @tl, which should have space for at least - * %ASN1_MAX_TL_SIZE bytes. Initially @tl_len should contain the size of @tl. - * - * The complete DER encoding should consist of the value in @tl appended - * with the provided @str. - * - * Returns: %ASN1_SUCCESS if successful or an error value. - **/ -int -asn1_encode_simple_der (unsigned int etype, const unsigned char *str, - unsigned int str_len, unsigned char *tl, - unsigned int *tl_len) -{ - int tag_len, len_len; - unsigned tlen; - unsigned char der_tag[ASN1_MAX_TAG_SIZE]; - unsigned char der_length[ASN1_MAX_LENGTH_SIZE]; - unsigned char *p; - - if (str == NULL) - return ASN1_VALUE_NOT_VALID; - - if (ETYPE_OK (etype) == 0) - return ASN1_VALUE_NOT_VALID; - - /* doesn't handle constructed classes */ - if (ETYPE_CLASS (etype) != ASN1_CLASS_UNIVERSAL) - return ASN1_VALUE_NOT_VALID; - - _asn1_tag_der (ETYPE_CLASS (etype), ETYPE_TAG (etype), der_tag, &tag_len); - - asn1_length_der (str_len, der_length, &len_len); - - if (tag_len <= 0 || len_len <= 0) - return ASN1_VALUE_NOT_VALID; - - tlen = tag_len + len_len; - - if (*tl_len < tlen) - return ASN1_MEM_ERROR; - - p = tl; - memcpy (p, der_tag, tag_len); - p += tag_len; - memcpy (p, der_length, len_len); - - *tl_len = tlen; - - return ASN1_SUCCESS; -} - -/******************************************************/ -/* Function : _asn1_time_der */ -/* Description: creates the DER coding for a TIME */ -/* type (length included). */ -/* Parameters: */ -/* str: TIME null-terminated string. */ -/* der: string returned. */ -/* der_len: number of meaningful bytes of DER */ -/* (der[0]..der[ans_len-1]). Initially it */ -/* if must store the lenght of DER. */ -/* Return: */ -/* ASN1_MEM_ERROR when DER isn't big enough */ -/* ASN1_SUCCESS otherwise */ -/******************************************************/ -static int -_asn1_time_der (unsigned char *str, int str_len, unsigned char *der, - int *der_len) -{ - int len_len; - int max_len; - - max_len = *der_len; - - asn1_length_der (str_len, (max_len > 0) ? der : NULL, &len_len); - - if ((len_len + str_len) <= max_len) - memcpy (der + len_len, str, str_len); - *der_len = len_len + str_len; - - if ((*der_len) > max_len) - return ASN1_MEM_ERROR; - - return ASN1_SUCCESS; -} - - -/* -void -_asn1_get_utctime_der(unsigned char *der,int *der_len,unsigned char *str) -{ - int len_len,str_len; - char temp[20]; - - if(str==NULL) return; - str_len=asn1_get_length_der(der,*der_len,&len_len); - if (str_len<0) return; - memcpy(temp,der+len_len,str_len); - *der_len=str_len+len_len; - switch(str_len){ - case 11: - temp[10]=0; - strcat(temp,"00+0000"); - break; - case 13: - temp[12]=0; - strcat(temp,"+0000"); - break; - case 15: - temp[15]=0; - memmove(temp+12,temp+10,6); - temp[10]=temp[11]='0'; - break; - case 17: - temp[17]=0; - break; - default: - return; - } - strcpy(str,temp); -} -*/ - -/******************************************************/ -/* Function : _asn1_objectid_der */ -/* Description: creates the DER coding for an */ -/* OBJECT IDENTIFIER type (length included). */ -/* Parameters: */ -/* str: OBJECT IDENTIFIER null-terminated string. */ -/* der: string returned. */ -/* der_len: number of meaningful bytes of DER */ -/* (der[0]..der[ans_len-1]). Initially it */ -/* must store the length of DER. */ -/* Return: */ -/* ASN1_MEM_ERROR when DER isn't big enough */ -/* ASN1_SUCCESS if succesful */ -/* or an error value. */ -/******************************************************/ -static int -_asn1_objectid_der (unsigned char *str, unsigned char *der, int *der_len) -{ - int len_len, counter, k, first, max_len; - char *temp, *n_end, *n_start; - unsigned char bit7; - uint64_t val, val1 = 0; - int str_len = _asn1_strlen (str); - - max_len = *der_len; - - temp = malloc (str_len + 2); - if (temp == NULL) - return ASN1_MEM_ALLOC_ERROR; - - memcpy (temp, str, str_len); - temp[str_len] = '.'; - temp[str_len + 1] = 0; - - counter = 0; - n_start = temp; - while ((n_end = strchr (n_start, '.'))) - { - *n_end = 0; - val = _asn1_strtou64 (n_start, NULL, 10); - counter++; - - if (counter == 1) - val1 = val; - else if (counter == 2) - { - if (max_len > 0) - der[0] = 40 * val1 + val; - *der_len = 1; - } - else - { - first = 0; - for (k = sizeof(val); k >= 0; k--) - { - bit7 = (val >> (k * 7)) & 0x7F; - if (bit7 || first || !k) - { - if (k) - bit7 |= 0x80; - if (max_len > (*der_len)) - der[*der_len] = bit7; - (*der_len)++; - first = 1; - } - } - - } - n_start = n_end + 1; - } - - asn1_length_der (*der_len, NULL, &len_len); - if (max_len >= (*der_len + len_len)) - { - memmove (der + len_len, der, *der_len); - asn1_length_der (*der_len, der, &len_len); - } - *der_len += len_len; - - free (temp); - - if (max_len < (*der_len)) - return ASN1_MEM_ERROR; - - return ASN1_SUCCESS; -} - - -static const unsigned char bit_mask[] = - { 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80 }; - -/** - * asn1_bit_der: - * @str: BIT string. - * @bit_len: number of meaningful bits in STR. - * @der: string returned. - * @der_len: number of meaningful bytes of DER - * (der[0]..der[ans_len-1]). - * - * Creates a length-value DER encoding for the input data - * as it would have been for a BIT STRING. - * The DER encoded data will be copied in @der. - * - * Note that the BIT STRING tag is not included in the output. - * - * This function does not return any value because it is expected - * that @der_len will contain enough bytes to store the string - * plus the DER encoding. The DER encoding size can be obtained using - * asn1_length_der(). - **/ -void -asn1_bit_der (const unsigned char *str, int bit_len, - unsigned char *der, int *der_len) -{ - int len_len, len_byte, len_pad; - - if (der == NULL) - return; - - len_byte = bit_len >> 3; - len_pad = 8 - (bit_len & 7); - if (len_pad == 8) - len_pad = 0; - else - len_byte++; - asn1_length_der (len_byte + 1, der, &len_len); - der[len_len] = len_pad; - - if (str) - memcpy (der + len_len + 1, str, len_byte); - der[len_len + len_byte] &= bit_mask[len_pad]; - *der_len = len_byte + len_len + 1; -} - - -/******************************************************/ -/* Function : _asn1_complete_explicit_tag */ -/* Description: add the length coding to the EXPLICIT */ -/* tags. */ -/* Parameters: */ -/* node: pointer to the tree element. */ -/* der: string with the DER coding of the whole tree*/ -/* counter: number of meaningful bytes of DER */ -/* (der[0]..der[*counter-1]). */ -/* max_len: size of der vector */ -/* Return: */ -/* ASN1_MEM_ERROR if der vector isn't big enough, */ -/* otherwise ASN1_SUCCESS. */ -/******************************************************/ -static int -_asn1_complete_explicit_tag (asn1_node node, unsigned char *der, - int *counter, int *max_len) -{ - asn1_node p; - int is_tag_implicit, len2, len3; - unsigned char temp[SIZEOF_UNSIGNED_INT]; - - is_tag_implicit = 0; - - if (node->type & CONST_TAG) - { - p = node->down; - if (p == NULL) - return ASN1_DER_ERROR; - /* When there are nested tags we must complete them reverse to - the order they were created. This is because completing a tag - modifies all data within it, including the incomplete tags - which store buffer positions -- simon@josefsson.org 2002-09-06 - */ - while (p->right) - p = p->right; - while (p && p != node->down->left) - { - if (type_field (p->type) == ASN1_ETYPE_TAG) - { - if (p->type & CONST_EXPLICIT) - { - len2 = strtol (p->name, NULL, 10); - _asn1_set_name (p, NULL); - - asn1_length_der (*counter - len2, temp, &len3); - if (len3 <= (*max_len)) - { - memmove (der + len2 + len3, der + len2, - *counter - len2); - memcpy (der + len2, temp, len3); - } - *max_len -= len3; - *counter += len3; - is_tag_implicit = 0; - } - else - { /* CONST_IMPLICIT */ - if (!is_tag_implicit) - { - is_tag_implicit = 1; - } - } - } - p = p->left; - } - } - - if (*max_len < 0) - return ASN1_MEM_ERROR; - - return ASN1_SUCCESS; -} - -const tag_and_class_st _asn1_tags[] = { - [ASN1_ETYPE_GENERALSTRING] = - {ASN1_TAG_GENERALSTRING, ASN1_CLASS_UNIVERSAL, "type:GENERALSTRING"}, - [ASN1_ETYPE_NUMERIC_STRING] = - {ASN1_TAG_NUMERIC_STRING, ASN1_CLASS_UNIVERSAL, "type:NUMERIC_STR"}, - [ASN1_ETYPE_IA5_STRING] = - {ASN1_TAG_IA5_STRING, ASN1_CLASS_UNIVERSAL, "type:IA5_STR"}, - [ASN1_ETYPE_TELETEX_STRING] = - {ASN1_TAG_TELETEX_STRING, ASN1_CLASS_UNIVERSAL, "type:TELETEX_STR"}, - [ASN1_ETYPE_PRINTABLE_STRING] = - {ASN1_TAG_PRINTABLE_STRING, ASN1_CLASS_UNIVERSAL, "type:PRINTABLE_STR"}, - [ASN1_ETYPE_UNIVERSAL_STRING] = - {ASN1_TAG_UNIVERSAL_STRING, ASN1_CLASS_UNIVERSAL, "type:UNIVERSAL_STR"}, - [ASN1_ETYPE_BMP_STRING] = - {ASN1_TAG_BMP_STRING, ASN1_CLASS_UNIVERSAL, "type:BMP_STR"}, - [ASN1_ETYPE_UTF8_STRING] = - {ASN1_TAG_UTF8_STRING, ASN1_CLASS_UNIVERSAL, "type:UTF8_STR"}, - [ASN1_ETYPE_VISIBLE_STRING] = - {ASN1_TAG_VISIBLE_STRING, ASN1_CLASS_UNIVERSAL, "type:VISIBLE_STR"}, - [ASN1_ETYPE_OCTET_STRING] = - {ASN1_TAG_OCTET_STRING, ASN1_CLASS_UNIVERSAL, "type:OCT_STR"}, - [ASN1_ETYPE_BIT_STRING] = - {ASN1_TAG_BIT_STRING, ASN1_CLASS_UNIVERSAL, "type:BIT_STR"}, - [ASN1_ETYPE_OBJECT_ID] = - {ASN1_TAG_OBJECT_ID, ASN1_CLASS_UNIVERSAL, "type:OBJ_ID"}, - [ASN1_ETYPE_NULL] = {ASN1_TAG_NULL, ASN1_CLASS_UNIVERSAL, "type:NULL"}, - [ASN1_ETYPE_BOOLEAN] = - {ASN1_TAG_BOOLEAN, ASN1_CLASS_UNIVERSAL, "type:BOOLEAN"}, - [ASN1_ETYPE_INTEGER] = - {ASN1_TAG_INTEGER, ASN1_CLASS_UNIVERSAL, "type:INTEGER"}, - [ASN1_ETYPE_ENUMERATED] = - {ASN1_TAG_ENUMERATED, ASN1_CLASS_UNIVERSAL, "type:ENUMERATED"}, - [ASN1_ETYPE_SEQUENCE] = - {ASN1_TAG_SEQUENCE, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, - "type:SEQUENCE"}, - [ASN1_ETYPE_SEQUENCE_OF] = - {ASN1_TAG_SEQUENCE, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, - "type:SEQ_OF"}, - [ASN1_ETYPE_SET] = - {ASN1_TAG_SET, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, "type:SET"}, - [ASN1_ETYPE_SET_OF] = - {ASN1_TAG_SET, ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED, - "type:SET_OF"}, - [ASN1_ETYPE_GENERALIZED_TIME] = - {ASN1_TAG_GENERALIZEDTime, ASN1_CLASS_UNIVERSAL, "type:GENERALIZED_TIME"}, - [ASN1_ETYPE_UTC_TIME] = - {ASN1_TAG_UTCTime, ASN1_CLASS_UNIVERSAL, "type:UTC_TIME"}, -}; - -unsigned int _asn1_tags_size = sizeof (_asn1_tags) / sizeof (_asn1_tags[0]); - -/******************************************************/ -/* Function : _asn1_insert_tag_der */ -/* Description: creates the DER coding of tags of one */ -/* NODE. */ -/* Parameters: */ -/* node: pointer to the tree element. */ -/* der: string returned */ -/* counter: number of meaningful bytes of DER */ -/* (counter[0]..der[*counter-1]). */ -/* max_len: size of der vector */ -/* Return: */ -/* ASN1_GENERIC_ERROR if the type is unknown, */ -/* ASN1_MEM_ERROR if der vector isn't big enough, */ -/* otherwise ASN1_SUCCESS. */ -/******************************************************/ -static int -_asn1_insert_tag_der (asn1_node node, unsigned char *der, int *counter, - int *max_len) -{ - asn1_node p; - int tag_len, is_tag_implicit; - unsigned char class, class_implicit = 0, temp[MAX(SIZEOF_UNSIGNED_INT * 3 + 1, LTOSTR_MAX_SIZE)]; - unsigned long tag_implicit = 0; - unsigned char tag_der[MAX_TAG_LEN]; - - is_tag_implicit = 0; - - if (node->type & CONST_TAG) - { - p = node->down; - while (p) - { - if (type_field (p->type) == ASN1_ETYPE_TAG) - { - if (p->type & CONST_APPLICATION) - class = ASN1_CLASS_APPLICATION; - else if (p->type & CONST_UNIVERSAL) - class = ASN1_CLASS_UNIVERSAL; - else if (p->type & CONST_PRIVATE) - class = ASN1_CLASS_PRIVATE; - else - class = ASN1_CLASS_CONTEXT_SPECIFIC; - - if (p->type & CONST_EXPLICIT) - { - if (is_tag_implicit) - _asn1_tag_der (class_implicit, tag_implicit, tag_der, - &tag_len); - else - _asn1_tag_der (class | ASN1_CLASS_STRUCTURED, - _asn1_strtoul (p->value, NULL, 10), - tag_der, &tag_len); - - *max_len -= tag_len; - if (der && *max_len >= 0) - memcpy (der + *counter, tag_der, tag_len); - *counter += tag_len; - - _asn1_ltostr (*counter, (char *) temp); - _asn1_set_name (p, (const char *) temp); - - is_tag_implicit = 0; - } - else - { /* CONST_IMPLICIT */ - if (!is_tag_implicit) - { - if ((type_field (node->type) == ASN1_ETYPE_SEQUENCE) || - (type_field (node->type) == ASN1_ETYPE_SEQUENCE_OF) - || (type_field (node->type) == ASN1_ETYPE_SET) - || (type_field (node->type) == ASN1_ETYPE_SET_OF)) - class |= ASN1_CLASS_STRUCTURED; - class_implicit = class; - tag_implicit = _asn1_strtoul (p->value, NULL, 10); - is_tag_implicit = 1; - } - } - } - p = p->right; - } - } - - if (is_tag_implicit) - { - _asn1_tag_der (class_implicit, tag_implicit, tag_der, &tag_len); - } - else - { - unsigned type = type_field (node->type); - switch (type) - { - CASE_HANDLED_ETYPES: - _asn1_tag_der (_asn1_tags[type].class, _asn1_tags[type].tag, - tag_der, &tag_len); - break; - case ASN1_ETYPE_TAG: - case ASN1_ETYPE_CHOICE: - case ASN1_ETYPE_ANY: - tag_len = 0; - break; - default: - return ASN1_GENERIC_ERROR; - } - } - - *max_len -= tag_len; - if (der && *max_len >= 0) - memcpy (der + *counter, tag_der, tag_len); - *counter += tag_len; - - if (*max_len < 0) - return ASN1_MEM_ERROR; - - return ASN1_SUCCESS; -} - -/******************************************************/ -/* Function : _asn1_ordering_set */ -/* Description: puts the elements of a SET type in */ -/* the correct order according to DER rules. */ -/* Parameters: */ -/* der: string with the DER coding. */ -/* node: pointer to the SET element. */ -/* Return: */ -/* ASN1_SUCCESS if successful */ -/* or an error value. */ -/******************************************************/ -static int -_asn1_ordering_set (unsigned char *der, int der_len, asn1_node node) -{ - struct vet - { - int end; - unsigned long value; - struct vet *next, *prev; - }; - - int counter, len, len2; - struct vet *first, *last, *p_vet, *p2_vet; - asn1_node p; - unsigned char class, *temp; - unsigned long tag, t; - int err; - - counter = 0; - - if (type_field (node->type) != ASN1_ETYPE_SET) - return ASN1_VALUE_NOT_VALID; - - p = node->down; - while (p && ((type_field (p->type) == ASN1_ETYPE_TAG) || - (type_field (p->type) == ASN1_ETYPE_SIZE))) - p = p->right; - - if ((p == NULL) || (p->right == NULL)) - return ASN1_SUCCESS; - - first = last = NULL; - while (p) - { - p_vet = malloc (sizeof (struct vet)); - if (p_vet == NULL) - { - err = ASN1_MEM_ALLOC_ERROR; - goto error; - } - - p_vet->next = NULL; - p_vet->prev = last; - if (first == NULL) - first = p_vet; - else - last->next = p_vet; - last = p_vet; - - /* tag value calculation */ - err = asn1_get_tag_der (der + counter, der_len - counter, &class, &len2, - &tag); - if (err != ASN1_SUCCESS) - goto error; - - t = ((unsigned int)class) << 24; - p_vet->value = t | tag; - counter += len2; - - /* extraction and length */ - len2 = asn1_get_length_der (der + counter, der_len - counter, &len); - if (len2 < 0) - { - err = ASN1_DER_ERROR; - goto error; - } - counter += len + len2; - - p_vet->end = counter; - p = p->right; - } - - p_vet = first; - - while (p_vet) - { - p2_vet = p_vet->next; - counter = 0; - while (p2_vet) - { - if (p_vet->value > p2_vet->value) - { - /* change position */ - temp = malloc (p_vet->end - counter); - if (temp == NULL) - { - err = ASN1_MEM_ALLOC_ERROR; - goto error; - } - - memcpy (temp, der + counter, p_vet->end - counter); - memcpy (der + counter, der + p_vet->end, - p2_vet->end - p_vet->end); - memcpy (der + counter + p2_vet->end - p_vet->end, temp, - p_vet->end - counter); - free (temp); - - tag = p_vet->value; - p_vet->value = p2_vet->value; - p2_vet->value = tag; - - p_vet->end = counter + (p2_vet->end - p_vet->end); - } - counter = p_vet->end; - - p2_vet = p2_vet->next; - p_vet = p_vet->next; - } - - if (p_vet != first) - p_vet->prev->next = NULL; - else - first = NULL; - free (p_vet); - p_vet = first; - } - return ASN1_SUCCESS; - -error: - while (first != NULL) - { - p_vet = first; - first = first->next; - free(p_vet); - } - return err; -} - -/******************************************************/ -/* Function : _asn1_ordering_set_of */ -/* Description: puts the elements of a SET OF type in */ -/* the correct order according to DER rules. */ -/* Parameters: */ -/* der: string with the DER coding. */ -/* node: pointer to the SET OF element. */ -/* Return: */ -/* ASN1_SUCCESS if successful */ -/* or an error value. */ -/******************************************************/ -static int -_asn1_ordering_set_of (unsigned char *der, int der_len, asn1_node node) -{ - struct vet - { - int end; - struct vet *next, *prev; - }; - - int counter, len, len2, change; - struct vet *first, *last, *p_vet, *p2_vet; - asn1_node p; - unsigned char *temp, class; - unsigned long k, length; - int err; - - counter = 0; - - if (type_field (node->type) != ASN1_ETYPE_SET_OF) - return ASN1_VALUE_NOT_VALID; - - p = node->down; - while (p && ((type_field (p->type) == ASN1_ETYPE_TAG) || - (type_field (p->type) == ASN1_ETYPE_SIZE))) - p = p->right; - if (p == NULL) - return ASN1_VALUE_NOT_VALID; - p = p->right; - - if ((p == NULL) || (p->right == NULL)) - return ASN1_SUCCESS; - - first = last = NULL; - while (p) - { - p_vet = malloc (sizeof (struct vet)); - if (p_vet == NULL) - { - err = ASN1_MEM_ALLOC_ERROR; - goto error; - } - - p_vet->next = NULL; - p_vet->prev = last; - if (first == NULL) - first = p_vet; - else - last->next = p_vet; - last = p_vet; - - /* extraction of tag and length */ - if (der_len - counter > 0) - { - - err = asn1_get_tag_der (der + counter, der_len - counter, &class, - &len, NULL); - if (err != ASN1_SUCCESS) - goto error; - counter += len; - - len2 = asn1_get_length_der (der + counter, der_len - counter, &len); - if (len2 < 0) - { - err = ASN1_DER_ERROR; - goto error; - } - counter += len + len2; - } - else - { - err = ASN1_DER_ERROR; - goto error; - } - - p_vet->end = counter; - p = p->right; - } - - p_vet = first; - - while (p_vet) - { - p2_vet = p_vet->next; - counter = 0; - while (p2_vet) - { - length = MIN(p_vet->end - counter, p2_vet->end - p_vet->end); - change = -1; - for (k = 0; k < length; k++) - if (der[counter + k] > der[p_vet->end + k]) - { - change = 1; - break; - } - else if (der[counter + k] < der[p_vet->end + k]) - { - change = 0; - break; - } - - if ((change == -1) - && ((p_vet->end - counter) > (p2_vet->end - p_vet->end))) - change = 1; - - if (change == 1) - { - /* change position */ - temp = malloc (p_vet->end - counter); - if (temp == NULL) - { - err = ASN1_MEM_ALLOC_ERROR; - goto error; - } - - memcpy (temp, der + counter, (p_vet->end) - counter); - memcpy (der + counter, der + (p_vet->end), - (p2_vet->end) - (p_vet->end)); - memcpy (der + counter + (p2_vet->end) - (p_vet->end), temp, - (p_vet->end) - counter); - free (temp); - - p_vet->end = counter + (p2_vet->end - p_vet->end); - } - counter = p_vet->end; - - p2_vet = p2_vet->next; - p_vet = p_vet->next; - } - - if (p_vet != first) - p_vet->prev->next = NULL; - else - first = NULL; - free (p_vet); - p_vet = first; - } - return ASN1_SUCCESS; - -error: - while (first != NULL) - { - p_vet = first; - first = first->next; - free(p_vet); - } - return err; -} - -/** - * asn1_der_coding: - * @element: pointer to an ASN1 element - * @name: the name of the structure you want to encode (it must be - * inside *POINTER). - * @ider: vector that will contain the DER encoding. DER must be a - * pointer to memory cells already allocated. - * @len: number of bytes of *@ider: @ider[0]..@ider[len-1], Initialy - * holds the sizeof of der vector. - * @ErrorDescription: return the error description or an empty - * string if success. - * - * Creates the DER encoding for the NAME structure (inside *POINTER - * structure). - * - * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND - * if @name is not a valid element, %ASN1_VALUE_NOT_FOUND if there - * is an element without a value, %ASN1_MEM_ERROR if the @ider - * vector isn't big enough and in this case @len will contain the - * length needed. - **/ -int -asn1_der_coding (asn1_node element, const char *name, void *ider, int *len, - char *ErrorDescription) -{ - asn1_node node, p, p2; - unsigned char temp[MAX(LTOSTR_MAX_SIZE, SIZEOF_UNSIGNED_LONG_INT * 3 + 1)]; - int counter, counter_old, len2, len3, move, max_len, max_len_old; - int err; - unsigned char *der = ider; - - if (ErrorDescription) - ErrorDescription[0] = 0; - - node = asn1_find_node (element, name); - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - /* Node is now a locally allocated variable. - * That is because in some point we modify the - * structure, and I don't know why! --nmav - */ - node = _asn1_copy_structure3 (node); - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - max_len = *len; - - counter = 0; - move = DOWN; - p = node; - - while (1) - { - - counter_old = counter; - max_len_old = max_len; - if (move != UP) - { - p->start = counter; - err = _asn1_insert_tag_der (p, der, &counter, &max_len); - if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR) - goto error; - } - switch (type_field (p->type)) - { - case ASN1_ETYPE_NULL: - max_len--; - if (max_len >= 0) - der[counter] = 0; - counter++; - move = RIGHT; - break; - case ASN1_ETYPE_BOOLEAN: - if ((p->type & CONST_DEFAULT) && (p->value == NULL)) - { - counter = counter_old; - max_len = max_len_old; - } - else - { - if (p->value == NULL) - { - _asn1_error_description_value_not_found (p, - ErrorDescription); - err = ASN1_VALUE_NOT_FOUND; - goto error; - } - max_len -= 2; - if (max_len >= 0) - { - der[counter++] = 1; - if (p->value[0] == 'F') - der[counter++] = 0; - else - der[counter++] = 0xFF; - } - else - counter += 2; - } - move = RIGHT; - break; - case ASN1_ETYPE_INTEGER: - case ASN1_ETYPE_ENUMERATED: - if ((p->type & CONST_DEFAULT) && (p->value == NULL)) - { - counter = counter_old; - max_len = max_len_old; - } - else - { - if (p->value == NULL) - { - _asn1_error_description_value_not_found (p, - ErrorDescription); - err = ASN1_VALUE_NOT_FOUND; - goto error; - } - len2 = asn1_get_length_der (p->value, p->value_len, &len3); - if (len2 < 0) - { - err = ASN1_DER_ERROR; - goto error; - } - max_len -= len2 + len3; - if (max_len >= 0) - memcpy (der + counter, p->value, len3 + len2); - counter += len3 + len2; - } - move = RIGHT; - break; - case ASN1_ETYPE_OBJECT_ID: - if ((p->type & CONST_DEFAULT) && (p->value == NULL)) - { - counter = counter_old; - max_len = max_len_old; - } - else - { - if (p->value == NULL) - { - _asn1_error_description_value_not_found (p, - ErrorDescription); - err = ASN1_VALUE_NOT_FOUND; - goto error; - } - len2 = max_len; - err = _asn1_objectid_der (p->value, der + counter, &len2); - if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR) - goto error; - - max_len -= len2; - counter += len2; - } - move = RIGHT; - break; - case ASN1_ETYPE_GENERALIZED_TIME: - case ASN1_ETYPE_UTC_TIME: - if (p->value == NULL) - { - _asn1_error_description_value_not_found (p, ErrorDescription); - err = ASN1_VALUE_NOT_FOUND; - goto error; - } - len2 = max_len; - err = _asn1_time_der (p->value, p->value_len, der + counter, &len2); - if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR) - goto error; - - max_len -= len2; - counter += len2; - move = RIGHT; - break; - case ASN1_ETYPE_OCTET_STRING: - case ASN1_ETYPE_GENERALSTRING: - case ASN1_ETYPE_NUMERIC_STRING: - case ASN1_ETYPE_IA5_STRING: - case ASN1_ETYPE_TELETEX_STRING: - case ASN1_ETYPE_PRINTABLE_STRING: - case ASN1_ETYPE_UNIVERSAL_STRING: - case ASN1_ETYPE_BMP_STRING: - case ASN1_ETYPE_UTF8_STRING: - case ASN1_ETYPE_VISIBLE_STRING: - case ASN1_ETYPE_BIT_STRING: - if (p->value == NULL) - { - _asn1_error_description_value_not_found (p, ErrorDescription); - err = ASN1_VALUE_NOT_FOUND; - goto error; - } - len2 = asn1_get_length_der (p->value, p->value_len, &len3); - if (len2 < 0) - { - err = ASN1_DER_ERROR; - goto error; - } - max_len -= len2 + len3; - if (max_len >= 0) - memcpy (der + counter, p->value, len3 + len2); - counter += len3 + len2; - move = RIGHT; - break; - case ASN1_ETYPE_SEQUENCE: - case ASN1_ETYPE_SET: - if (move != UP) - { - p->tmp_ival = counter; - if (p->down == NULL) - { - move = UP; - continue; - } - else - { - p2 = p->down; - while (p2 && (type_field (p2->type) == ASN1_ETYPE_TAG)) - p2 = p2->right; - if (p2) - { - p = p2; - move = RIGHT; - continue; - } - move = UP; - continue; - } - } - else - { /* move==UP */ - len2 = p->tmp_ival; - p->tmp_ival = 0; - if ((type_field (p->type) == ASN1_ETYPE_SET) && (max_len >= 0)) - { - err = _asn1_ordering_set (der + len2, counter - len2, p); - if (err != ASN1_SUCCESS) - goto error; - } - asn1_length_der (counter - len2, temp, &len3); - max_len -= len3; - if (max_len >= 0) - { - memmove (der + len2 + len3, der + len2, counter - len2); - memcpy (der + len2, temp, len3); - } - counter += len3; - move = RIGHT; - } - break; - case ASN1_ETYPE_SEQUENCE_OF: - case ASN1_ETYPE_SET_OF: - if (move != UP) - { - p->tmp_ival = counter; - p = p->down; - while ((type_field (p->type) == ASN1_ETYPE_TAG) - || (type_field (p->type) == ASN1_ETYPE_SIZE)) - p = p->right; - if (p->right) - { - p = p->right; - move = RIGHT; - continue; - } - else - p = _asn1_find_up (p); - move = UP; - } - if (move == UP) - { - len2 = p->tmp_ival; - p->tmp_ival = 0; - if ((type_field (p->type) == ASN1_ETYPE_SET_OF) - && (counter - len2 > 0) && (max_len >= 0)) - { - err = _asn1_ordering_set_of (der + len2, counter - len2, p); - if (err != ASN1_SUCCESS) - goto error; - } - asn1_length_der (counter - len2, temp, &len3); - max_len -= len3; - if (max_len >= 0) - { - memmove (der + len2 + len3, der + len2, counter - len2); - memcpy (der + len2, temp, len3); - } - counter += len3; - move = RIGHT; - } - break; - case ASN1_ETYPE_ANY: - if (p->value == NULL) - { - _asn1_error_description_value_not_found (p, ErrorDescription); - err = ASN1_VALUE_NOT_FOUND; - goto error; - } - len2 = asn1_get_length_der (p->value, p->value_len, &len3); - if (len2 < 0) - { - err = ASN1_DER_ERROR; - goto error; - } - max_len -= len2; - if (max_len >= 0) - memcpy (der + counter, p->value + len3, len2); - counter += len2; - move = RIGHT; - break; - default: - move = (move == UP) ? RIGHT : DOWN; - break; - } - - if ((move != DOWN) && (counter != counter_old)) - { - p->end = counter - 1; - err = _asn1_complete_explicit_tag (p, der, &counter, &max_len); - if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR) - goto error; - } - - if (p == node && move != DOWN) - break; - - if (move == DOWN) - { - if (p->down) - p = p->down; - else - move = RIGHT; - } - if (move == RIGHT) - { - if (p->right) - p = p->right; - else - move = UP; - } - if (move == UP) - p = _asn1_find_up (p); - } - - *len = counter; - - if (max_len < 0) - { - err = ASN1_MEM_ERROR; - goto error; - } - - err = ASN1_SUCCESS; - -error: - asn1_delete_structure (&node); - return err; -} diff --git a/lib/minitasn1/decoding.c b/lib/minitasn1/decoding.c deleted file mode 100644 index fcf3aff0a3..0000000000 --- a/lib/minitasn1/decoding.c +++ /dev/null @@ -1,2352 +0,0 @@ -/* - * Copyright (C) 2002-2016 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - - -/*****************************************************/ -/* File: decoding.c */ -/* Description: Functions to manage DER decoding */ -/*****************************************************/ - -#include -#include -#include -#include -#include -#include -#include - -#ifdef DEBUG -# define warn() fprintf(stderr, "%s: %d\n", __func__, __LINE__) -#else -# define warn() -#endif - -#define IS_ERR(len, flags) (len < -1 || ((flags & ASN1_DECODE_FLAG_STRICT_DER) && len < 0)) - -#define HAVE_TWO(x) (x>=2?1:0) - -#define DECODE_FLAG_HAVE_TAG 1 -#define DECODE_FLAG_INDEFINITE (1<<1) - -#define DECR_LEN(l, s) do { \ - l -= s; \ - if (l < 0) { \ - warn(); \ - result = ASN1_DER_ERROR; \ - goto cleanup; \ - } \ - } while (0) - -static int -_asn1_get_indefinite_length_string (const unsigned char *der, int der_len, int *len); - -static int -_asn1_decode_simple_ber (unsigned int etype, const unsigned char *der, - unsigned int _der_len, unsigned char **str, - unsigned int *str_len, unsigned int *ber_len, - unsigned dflags); - -static int -_asn1_decode_simple_der (unsigned int etype, const unsigned char *der, - unsigned int _der_len, const unsigned char **str, - unsigned int *str_len, unsigned dflags); - -static void -_asn1_error_description_tag_error (asn1_node node, char *ErrorDescription) -{ - - Estrcpy (ErrorDescription, ":: tag error near element '"); - _asn1_hierarchical_name (node, ErrorDescription + strlen (ErrorDescription), - ASN1_MAX_ERROR_DESCRIPTION_SIZE - 40); - Estrcat (ErrorDescription, "'"); - -} - -/** - * asn1_get_length_der: - * @der: DER data to decode. - * @der_len: Length of DER data to decode. - * @len: Output variable containing the length of the DER length field. - * - * Extract a length field from DER data. - * - * Returns: Return the decoded length value, or -1 on indefinite - * length, or -2 when the value was too big to fit in a int, or -4 - * when the decoded length value plus @len would exceed @der_len. - **/ -long -asn1_get_length_der (const unsigned char *der, int der_len, int *len) -{ - unsigned int ans; - int k, punt, sum; - - *len = 0; - if (der_len <= 0) - return 0; - - if (!(der[0] & 128)) - { - /* short form */ - *len = 1; - ans = der[0]; - } - else - { - /* Long form */ - k = der[0] & 0x7F; - punt = 1; - if (k) - { /* definite length method */ - ans = 0; - while (punt <= k && punt < der_len) - { - if (INT_MULTIPLY_OVERFLOW (ans, 256)) - return -2; - ans *= 256; - - if (INT_ADD_OVERFLOW (ans, ((unsigned) der[punt]))) - return -2; - ans += der[punt]; - punt++; - } - } - else - { /* indefinite length method */ - *len = punt; - return -1; - } - - *len = punt; - } - - sum = ans; - if (ans >= INT_MAX || INT_ADD_OVERFLOW (sum, (*len))) - return -2; - sum += *len; - - if (sum > der_len) - return -4; - - return ans; -} - -/** - * asn1_get_tag_der: - * @der: DER data to decode. - * @der_len: Length of DER data to decode. - * @cls: Output variable containing decoded class. - * @len: Output variable containing the length of the DER TAG data. - * @tag: Output variable containing the decoded tag (may be %NULL). - * - * Decode the class and TAG from DER code. - * - * Returns: Returns %ASN1_SUCCESS on success, or an error. - **/ -int -asn1_get_tag_der (const unsigned char *der, int der_len, - unsigned char *cls, int *len, unsigned long *tag) -{ - unsigned int ris; - int punt; - - if (der == NULL || der_len < 2 || len == NULL) - return ASN1_DER_ERROR; - - *cls = der[0] & 0xE0; - if ((der[0] & 0x1F) != 0x1F) - { - /* short form */ - *len = 1; - ris = der[0] & 0x1F; - } - else - { - /* Long form */ - punt = 1; - ris = 0; - while (punt < der_len && der[punt] & 128) - { - - if (INT_MULTIPLY_OVERFLOW (ris, 128)) - return ASN1_DER_ERROR; - ris *= 128; - - if (INT_ADD_OVERFLOW (ris, ((unsigned) (der[punt] & 0x7F)))) - return ASN1_DER_ERROR; - ris += (der[punt] & 0x7F); - punt++; - } - - if (punt >= der_len) - return ASN1_DER_ERROR; - - if (INT_MULTIPLY_OVERFLOW (ris, 128)) - return ASN1_DER_ERROR; - ris *= 128; - - if (INT_ADD_OVERFLOW (ris, ((unsigned) (der[punt] & 0x7F)))) - return ASN1_DER_ERROR; - ris += (der[punt] & 0x7F); - punt++; - - *len = punt; - } - - if (tag) - *tag = ris; - return ASN1_SUCCESS; -} - -/** - * asn1_get_length_ber: - * @ber: BER data to decode. - * @ber_len: Length of BER data to decode. - * @len: Output variable containing the length of the BER length field. - * - * Extract a length field from BER data. The difference to - * asn1_get_length_der() is that this function will return a length - * even if the value has indefinite encoding. - * - * Returns: Return the decoded length value, or negative value when - * the value was too big. - * - * Since: 2.0 - **/ -long -asn1_get_length_ber (const unsigned char *ber, int ber_len, int *len) -{ - int ret; - long err; - - ret = asn1_get_length_der (ber, ber_len, len); - if (ret == -1 && ber_len > 1) - { /* indefinite length method */ - err = _asn1_get_indefinite_length_string (ber + 1, ber_len-1, &ret); - if (err != ASN1_SUCCESS) - return -3; - } - - return ret; -} - -/** - * asn1_get_octet_der: - * @der: DER data to decode containing the OCTET SEQUENCE. - * @der_len: The length of the @der data to decode. - * @ret_len: Output variable containing the encoded length of the DER data. - * @str: Pre-allocated output buffer to put decoded OCTET SEQUENCE in. - * @str_size: Length of pre-allocated output buffer. - * @str_len: Output variable containing the length of the contents of the OCTET SEQUENCE. - * - * Extract an OCTET SEQUENCE from DER data. Note that this function - * expects the DER data past the tag field, i.e., the length and - * content octets. - * - * Returns: Returns %ASN1_SUCCESS on success, or an error. - **/ -int -asn1_get_octet_der (const unsigned char *der, int der_len, - int *ret_len, unsigned char *str, int str_size, - int *str_len) -{ - int len_len = 0; - - if (der_len <= 0) - return ASN1_GENERIC_ERROR; - - *str_len = asn1_get_length_der (der, der_len, &len_len); - - if (*str_len < 0) - return ASN1_DER_ERROR; - - *ret_len = *str_len + len_len; - if (str_size >= *str_len) - { - if (*str_len > 0 && str != NULL) - memcpy (str, der + len_len, *str_len); - } - else - { - return ASN1_MEM_ERROR; - } - - return ASN1_SUCCESS; -} - - -/*- - * _asn1_get_time_der: - * @type: %ASN1_ETYPE_GENERALIZED_TIME or %ASN1_ETYPE_UTC_TIME - * @der: DER data to decode containing the time - * @der_len: Length of DER data to decode. - * @ret_len: Output variable containing the length of the DER data. - * @str: Pre-allocated output buffer to put the textual time in. - * @str_size: Length of pre-allocated output buffer. - * @flags: Zero or %ASN1_DECODE_FLAG_STRICT_DER - * - * Performs basic checks in the DER encoded time object and returns its textual form. - * The textual form will be in the YYYYMMDD000000Z format for GeneralizedTime - * and YYMMDD000000Z for UTCTime. - * - * Returns: %ASN1_SUCCESS on success, or an error. - -*/ -static int -_asn1_get_time_der (unsigned type, const unsigned char *der, int der_len, int *ret_len, - char *str, int str_size, unsigned flags) -{ - int len_len, str_len; - unsigned i; - unsigned sign_count = 0; - unsigned dot_count = 0; - const unsigned char *p; - - if (der_len <= 0 || str == NULL) - return ASN1_DER_ERROR; - - str_len = asn1_get_length_der (der, der_len, &len_len); - if (str_len <= 0 || str_size < str_len) - return ASN1_DER_ERROR; - - /* perform some sanity checks on the data */ - if (str_len < 8) - { - warn(); - return ASN1_TIME_ENCODING_ERROR; - } - - if (flags & ASN1_DECODE_FLAG_STRICT_DER) - { - p = &der[len_len]; - for (i=0;i<(unsigned)(str_len-1);i++) - { - if (isdigit(p[i]) == 0) - { - if (type == ASN1_ETYPE_GENERALIZED_TIME) - { - /* tolerate lax encodings */ - if (p[i] == '.' && dot_count == 0) - { - dot_count++; - continue; - } - - /* This is not really valid DER, but there are - * structures using that */ - if (!(flags & ASN1_DECODE_FLAG_STRICT_DER) && - (p[i] == '+' || p[i] == '-') && sign_count == 0) - { - sign_count++; - continue; - } - } - - warn(); - return ASN1_TIME_ENCODING_ERROR; - } - } - - if (sign_count == 0 && p[str_len-1] != 'Z') - { - warn(); - return ASN1_TIME_ENCODING_ERROR; - } - } - memcpy (str, der + len_len, str_len); - str[str_len] = 0; - *ret_len = str_len + len_len; - - return ASN1_SUCCESS; -} - -/** - * asn1_get_objectid_der: - * @der: DER data to decode containing the OBJECT IDENTIFIER - * @der_len: Length of DER data to decode. - * @ret_len: Output variable containing the length of the DER data. - * @str: Pre-allocated output buffer to put the textual object id in. - * @str_size: Length of pre-allocated output buffer. - * - * Converts a DER encoded object identifier to its textual form. This - * function expects the DER object identifier without the tag. - * - * Returns: %ASN1_SUCCESS on success, or an error. - **/ -int -asn1_get_object_id_der (const unsigned char *der, int der_len, int *ret_len, - char *str, int str_size) -{ - int len_len, len, k; - int leading; - char temp[LTOSTR_MAX_SIZE]; - uint64_t val, val1; - - *ret_len = 0; - if (str && str_size > 0) - str[0] = 0; /* no oid */ - - if (str == NULL || der_len <= 0) - return ASN1_GENERIC_ERROR; - - len = asn1_get_length_der (der, der_len, &len_len); - - if (len <= 0 || len + len_len > der_len) - return ASN1_DER_ERROR; - - val1 = der[len_len] / 40; - val = der[len_len] - val1 * 40; - - _asn1_str_cpy (str, str_size, _asn1_ltostr (val1, temp)); - _asn1_str_cat (str, str_size, "."); - _asn1_str_cat (str, str_size, _asn1_ltostr (val, temp)); - - val = 0; - leading = 1; - for (k = 1; k < len; k++) - { - /* X.690 mandates that the leading byte must never be 0x80 - */ - if (leading != 0 && der[len_len + k] == 0x80) - return ASN1_DER_ERROR; - leading = 0; - - /* check for wrap around */ - if (INT_LEFT_SHIFT_OVERFLOW (val, 7)) - return ASN1_DER_ERROR; - - val = val << 7; - val |= der[len_len + k] & 0x7F; - - if (!(der[len_len + k] & 0x80)) - { - _asn1_str_cat (str, str_size, "."); - _asn1_str_cat (str, str_size, _asn1_ltostr (val, temp)); - val = 0; - leading = 1; - } - } - - if (INT_ADD_OVERFLOW (len, len_len)) - return ASN1_DER_ERROR; - - *ret_len = len + len_len; - - return ASN1_SUCCESS; -} - -/** - * asn1_get_bit_der: - * @der: DER data to decode containing the BIT SEQUENCE. - * @der_len: Length of DER data to decode. - * @ret_len: Output variable containing the length of the DER data. - * @str: Pre-allocated output buffer to put decoded BIT SEQUENCE in. - * @str_size: Length of pre-allocated output buffer. - * @bit_len: Output variable containing the size of the BIT SEQUENCE. - * - * Extract a BIT SEQUENCE from DER data. - * - * Returns: %ASN1_SUCCESS on success, or an error. - **/ -int -asn1_get_bit_der (const unsigned char *der, int der_len, - int *ret_len, unsigned char *str, int str_size, - int *bit_len) -{ - int len_len = 0, len_byte; - - if (der_len <= 0) - return ASN1_GENERIC_ERROR; - - len_byte = asn1_get_length_der (der, der_len, &len_len) - 1; - if (len_byte < 0) - return ASN1_DER_ERROR; - - *ret_len = len_byte + len_len + 1; - *bit_len = len_byte * 8 - der[len_len]; - - if (*bit_len < 0) - return ASN1_DER_ERROR; - - if (str_size >= len_byte) - { - if (len_byte > 0 && str) - memcpy (str, der + len_len + 1, len_byte); - } - else - { - return ASN1_MEM_ERROR; - } - - return ASN1_SUCCESS; -} - -/* tag_len: the total tag length (explicit+inner) - * inner_tag_len: the inner_tag length - */ -static int -_asn1_extract_tag_der (asn1_node node, const unsigned char *der, int der_len, - int *tag_len, int *inner_tag_len, unsigned flags) -{ - asn1_node p; - int counter, len2, len3, is_tag_implicit; - int result; - unsigned long tag, tag_implicit = 0; - unsigned char class, class2, class_implicit = 0; - - if (der_len <= 0) - return ASN1_GENERIC_ERROR; - - counter = is_tag_implicit = 0; - - if (node->type & CONST_TAG) - { - p = node->down; - while (p) - { - if (type_field (p->type) == ASN1_ETYPE_TAG) - { - if (p->type & CONST_APPLICATION) - class2 = ASN1_CLASS_APPLICATION; - else if (p->type & CONST_UNIVERSAL) - class2 = ASN1_CLASS_UNIVERSAL; - else if (p->type & CONST_PRIVATE) - class2 = ASN1_CLASS_PRIVATE; - else - class2 = ASN1_CLASS_CONTEXT_SPECIFIC; - - if (p->type & CONST_EXPLICIT) - { - if (asn1_get_tag_der - (der + counter, der_len, &class, &len2, - &tag) != ASN1_SUCCESS) - return ASN1_DER_ERROR; - - DECR_LEN(der_len, len2); - counter += len2; - - if (flags & ASN1_DECODE_FLAG_STRICT_DER) - len3 = - asn1_get_length_der (der + counter, der_len, - &len2); - else - len3 = - asn1_get_length_ber (der + counter, der_len, - &len2); - if (len3 < 0) - return ASN1_DER_ERROR; - - DECR_LEN(der_len, len2); - counter += len2; - - if (!is_tag_implicit) - { - if ((class != (class2 | ASN1_CLASS_STRUCTURED)) || - (tag != strtoul ((char *) p->value, NULL, 10))) - return ASN1_TAG_ERROR; - } - else - { /* ASN1_TAG_IMPLICIT */ - if ((class != class_implicit) || (tag != tag_implicit)) - return ASN1_TAG_ERROR; - } - is_tag_implicit = 0; - } - else - { /* ASN1_TAG_IMPLICIT */ - if (!is_tag_implicit) - { - if ((type_field (node->type) == ASN1_ETYPE_SEQUENCE) || - (type_field (node->type) == ASN1_ETYPE_SEQUENCE_OF) - || (type_field (node->type) == ASN1_ETYPE_SET) - || (type_field (node->type) == ASN1_ETYPE_SET_OF)) - class2 |= ASN1_CLASS_STRUCTURED; - class_implicit = class2; - tag_implicit = strtoul ((char *) p->value, NULL, 10); - is_tag_implicit = 1; - } - } - } - p = p->right; - } - } - - if (is_tag_implicit) - { - if (asn1_get_tag_der - (der + counter, der_len, &class, &len2, - &tag) != ASN1_SUCCESS) - return ASN1_DER_ERROR; - - DECR_LEN(der_len, len2); - - if ((class != class_implicit) || (tag != tag_implicit)) - { - if (type_field (node->type) == ASN1_ETYPE_OCTET_STRING) - { - class_implicit |= ASN1_CLASS_STRUCTURED; - if ((class != class_implicit) || (tag != tag_implicit)) - return ASN1_TAG_ERROR; - } - else - return ASN1_TAG_ERROR; - } - } - else - { - unsigned type = type_field (node->type); - if (type == ASN1_ETYPE_TAG) - { - *tag_len = 0; - if (inner_tag_len) - *inner_tag_len = 0; - return ASN1_SUCCESS; - } - - if (asn1_get_tag_der - (der + counter, der_len, &class, &len2, - &tag) != ASN1_SUCCESS) - return ASN1_DER_ERROR; - - DECR_LEN(der_len, len2); - - switch (type) - { - case ASN1_ETYPE_NULL: - case ASN1_ETYPE_BOOLEAN: - case ASN1_ETYPE_INTEGER: - case ASN1_ETYPE_ENUMERATED: - case ASN1_ETYPE_OBJECT_ID: - case ASN1_ETYPE_GENERALSTRING: - case ASN1_ETYPE_NUMERIC_STRING: - case ASN1_ETYPE_IA5_STRING: - case ASN1_ETYPE_TELETEX_STRING: - case ASN1_ETYPE_PRINTABLE_STRING: - case ASN1_ETYPE_UNIVERSAL_STRING: - case ASN1_ETYPE_BMP_STRING: - case ASN1_ETYPE_UTF8_STRING: - case ASN1_ETYPE_VISIBLE_STRING: - case ASN1_ETYPE_BIT_STRING: - case ASN1_ETYPE_SEQUENCE: - case ASN1_ETYPE_SEQUENCE_OF: - case ASN1_ETYPE_SET: - case ASN1_ETYPE_SET_OF: - case ASN1_ETYPE_GENERALIZED_TIME: - case ASN1_ETYPE_UTC_TIME: - if ((class != _asn1_tags[type].class) - || (tag != _asn1_tags[type].tag)) - return ASN1_DER_ERROR; - break; - - case ASN1_ETYPE_OCTET_STRING: - /* OCTET STRING is handled differently to allow - * BER encodings (structured class). */ - if (((class != ASN1_CLASS_UNIVERSAL) - && (class != (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED))) - || (tag != ASN1_TAG_OCTET_STRING)) - return ASN1_DER_ERROR; - break; - case ASN1_ETYPE_ANY: - counter -= len2; - break; - case ASN1_ETYPE_CHOICE: - counter -= len2; - break; - default: - return ASN1_DER_ERROR; - break; - } - } - - counter += len2; - *tag_len = counter; - if (inner_tag_len) - *inner_tag_len = len2; - return ASN1_SUCCESS; - -cleanup: - return result; -} - -static int -extract_tag_der_recursive(asn1_node node, const unsigned char *der, int der_len, - int *ret_len, int *inner_len, unsigned flags) -{ -asn1_node p; -int ris = ASN1_DER_ERROR; - - if (type_field (node->type) == ASN1_ETYPE_CHOICE) - { - p = node->down; - while (p) - { - ris = _asn1_extract_tag_der (p, der, der_len, ret_len, inner_len, flags); - if (ris == ASN1_SUCCESS) - break; - p = p->right; - } - - *ret_len = 0; - return ris; - } - else - return _asn1_extract_tag_der (node, der, der_len, ret_len, inner_len, flags); -} - -static int -_asn1_delete_not_used (asn1_node node) -{ - asn1_node p, p2; - - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - p = node; - while (p) - { - if (p->type & CONST_NOT_USED) - { - p2 = NULL; - if (p != node) - { - p2 = _asn1_find_left (p); - if (!p2) - p2 = _asn1_find_up (p); - } - asn1_delete_structure (&p); - p = p2; - } - - if (!p) - break; /* reach node */ - - if (p->down) - { - p = p->down; - } - else - { - if (p == node) - p = NULL; - else if (p->right) - p = p->right; - else - { - while (1) - { - p = _asn1_find_up (p); - if (p == node) - { - p = NULL; - break; - } - if (p->right) - { - p = p->right; - break; - } - } - } - } - } - return ASN1_SUCCESS; -} - -static int -_asn1_get_indefinite_length_string (const unsigned char *der, - int der_len, int *len) -{ - int len2, len3, counter, indefinite; - int result; - unsigned long tag; - unsigned char class; - - counter = indefinite = 0; - - while (1) - { - if (HAVE_TWO(der_len) && (der[counter] == 0) && (der[counter + 1] == 0)) - { - counter += 2; - DECR_LEN(der_len, 2); - - indefinite--; - if (indefinite <= 0) - break; - else - continue; - } - - if (asn1_get_tag_der - (der + counter, der_len, &class, &len2, - &tag) != ASN1_SUCCESS) - return ASN1_DER_ERROR; - - DECR_LEN(der_len, len2); - counter += len2; - - len2 = asn1_get_length_der (der + counter, der_len, &len3); - if (len2 < -1) - return ASN1_DER_ERROR; - - if (len2 == -1) - { - indefinite++; - counter += 1; - DECR_LEN(der_len, 1); - } - else - { - counter += len2 + len3; - DECR_LEN(der_len, len2+len3); - } - } - - *len = counter; - return ASN1_SUCCESS; - -cleanup: - return result; -} - -static void delete_unneeded_choice_fields(asn1_node p) -{ - asn1_node p2; - - while (p->right) - { - p2 = p->right; - asn1_delete_structure (&p2); - } -} - - -/** - * asn1_der_decoding2 - * @element: pointer to an ASN1 structure. - * @ider: vector that contains the DER encoding. - * @max_ider_len: pointer to an integer giving the information about the - * maximal number of bytes occupied by *@ider. The real size of the DER - * encoding is returned through this pointer. - * @flags: flags controlling the behaviour of the function. - * @errorDescription: null-terminated string contains details when an - * error occurred. - * - * Fill the structure *@element with values of a DER encoding string. The - * structure must just be created with function asn1_create_element(). - * - * If %ASN1_DECODE_FLAG_ALLOW_PADDING flag is set then the function will ignore - * padding after the decoded DER data. Upon a successful return the value of - * *@max_ider_len will be set to the number of bytes decoded. - * - * If %ASN1_DECODE_FLAG_STRICT_DER flag is set then the function will - * not decode any BER-encoded elements. - * - * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND - * if @ELEMENT is %NULL, and %ASN1_TAG_ERROR or - * %ASN1_DER_ERROR if the der encoding doesn't match the structure - * name (*@ELEMENT deleted). - **/ -int -asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, - unsigned int flags, char *errorDescription) -{ - asn1_node node, p, p2, p3; - char temp[128]; - int counter, len2, len3, len4, move, ris, tlen; - struct node_tail_cache_st tcache = {NULL, NULL}; - unsigned char class; - unsigned long tag; - int tag_len; - int indefinite, result, total_len = *max_ider_len, ider_len = *max_ider_len; - int inner_tag_len; - unsigned char *ptmp; - const unsigned char *ptag; - const unsigned char *der = ider; - - node = *element; - - if (errorDescription != NULL) - errorDescription[0] = 0; - - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - if (node->type & CONST_OPTION) - { - result = ASN1_GENERIC_ERROR; - warn(); - goto cleanup; - } - - counter = 0; - move = DOWN; - p = node; - while (1) - { - tag_len = 0; - inner_tag_len = 0; - ris = ASN1_SUCCESS; - if (move != UP) - { - if (p->type & CONST_SET) - { - p2 = _asn1_find_up (p); - len2 = p2->tmp_ival; - if (len2 == -1) - { - if (HAVE_TWO(ider_len) && !der[counter] && !der[counter + 1]) - { - p = p2; - move = UP; - counter += 2; - DECR_LEN(ider_len, 2); - continue; - } - } - else if (counter == len2) - { - p = p2; - move = UP; - continue; - } - else if (counter > len2) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - p2 = p2->down; - while (p2) - { - if ((p2->type & CONST_SET) && (p2->type & CONST_NOT_USED)) - { - ris = - extract_tag_der_recursive (p2, der + counter, - ider_len, &len2, NULL, flags); - if (ris == ASN1_SUCCESS) - { - p2->type &= ~CONST_NOT_USED; - p = p2; - break; - } - } - p2 = p2->right; - } - if (p2 == NULL) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - } - - /* the position in the DER structure this starts */ - p->start = counter; - p->end = total_len - 1; - - if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT)) - { - p2 = _asn1_find_up (p); - len2 = p2->tmp_ival; - if (counter == len2) - { - if (p->right) - { - p2 = p->right; - move = RIGHT; - } - else - move = UP; - - if (p->type & CONST_OPTION) - asn1_delete_structure (&p); - - p = p2; - continue; - } - } - - if (type_field (p->type) == ASN1_ETYPE_CHOICE) - { - while (p->down) - { - ris = - extract_tag_der_recursive (p->down, der + counter, - ider_len, &len2, NULL, flags); - - if (ris == ASN1_SUCCESS) - { - delete_unneeded_choice_fields(p->down); - break; - } - else if (ris == ASN1_ERROR_TYPE_ANY) - { - result = ASN1_ERROR_TYPE_ANY; - warn(); - goto cleanup; - } - else - { - p2 = p->down; - asn1_delete_structure (&p2); - } - } - - if (p->down == NULL) - { - if (!(p->type & CONST_OPTION)) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - } - else if (type_field (p->type) != ASN1_ETYPE_CHOICE) - p = p->down; - - p->start = counter; - } - - if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT)) - { - p2 = _asn1_find_up (p); - len2 = p2->tmp_ival; - - if ((len2 != -1) && (counter > len2)) - ris = ASN1_TAG_ERROR; - } - - if (ris == ASN1_SUCCESS) - ris = - extract_tag_der_recursive (p, der + counter, ider_len, - &tag_len, &inner_tag_len, flags); - - if (ris != ASN1_SUCCESS) - { - if (p->type & CONST_OPTION) - { - p->type |= CONST_NOT_USED; - move = RIGHT; - } - else if (p->type & CONST_DEFAULT) - { - _asn1_set_value (p, NULL, 0); - move = RIGHT; - } - else - { - if (errorDescription != NULL) - _asn1_error_description_tag_error (p, errorDescription); - - result = ASN1_TAG_ERROR; - warn(); - goto cleanup; - } - } - else - { - DECR_LEN(ider_len, tag_len); - counter += tag_len; - } - } - - if (ris == ASN1_SUCCESS) - { - switch (type_field (p->type)) - { - case ASN1_ETYPE_NULL: - DECR_LEN(ider_len, 1); - if (der[counter]) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - counter++; - move = RIGHT; - break; - case ASN1_ETYPE_BOOLEAN: - DECR_LEN(ider_len, 2); - - if (der[counter++] != 1) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - if (der[counter++] == 0) - _asn1_set_value (p, "F", 1); - else - _asn1_set_value (p, "T", 1); - move = RIGHT; - break; - case ASN1_ETYPE_INTEGER: - case ASN1_ETYPE_ENUMERATED: - len2 = - asn1_get_length_der (der + counter, ider_len, &len3); - if (len2 < 0) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - - DECR_LEN(ider_len, len3+len2); - - _asn1_set_value (p, der + counter, len3 + len2); - counter += len3 + len2; - move = RIGHT; - break; - case ASN1_ETYPE_OBJECT_ID: - result = - asn1_get_object_id_der (der + counter, ider_len, &len2, - temp, sizeof (temp)); - if (result != ASN1_SUCCESS) - { - warn(); - goto cleanup; - } - - DECR_LEN(ider_len, len2); - - tlen = strlen (temp); - if (tlen > 0) - _asn1_set_value (p, temp, tlen + 1); - - counter += len2; - move = RIGHT; - break; - case ASN1_ETYPE_GENERALIZED_TIME: - case ASN1_ETYPE_UTC_TIME: - result = - _asn1_get_time_der (type_field (p->type), der + counter, ider_len, &len2, temp, - sizeof (temp) - 1, flags); - if (result != ASN1_SUCCESS) - { - warn(); - goto cleanup; - } - - DECR_LEN(ider_len, len2); - - tlen = strlen (temp); - if (tlen > 0) - _asn1_set_value (p, temp, tlen); - - counter += len2; - move = RIGHT; - break; - case ASN1_ETYPE_OCTET_STRING: - if (counter < inner_tag_len) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - - ptag = der + counter - inner_tag_len; - if (flags & ASN1_DECODE_FLAG_STRICT_DER || !(ptag[0] & ASN1_CLASS_STRUCTURED)) - { - len2 = - asn1_get_length_der (der + counter, ider_len, &len3); - if (len2 < 0) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - - DECR_LEN(ider_len, len3+len2); - - _asn1_set_value (p, der + counter, len3 + len2); - counter += len3 + len2; - } - else - { - unsigned dflags = 0, vlen, ber_len; - - if (ptag[0] & ASN1_CLASS_STRUCTURED) - dflags |= DECODE_FLAG_INDEFINITE; - - result = _asn1_decode_simple_ber(type_field (p->type), der+counter, ider_len, &ptmp, &vlen, &ber_len, dflags); - if (result != ASN1_SUCCESS) - { - warn(); - goto cleanup; - } - - DECR_LEN(ider_len, ber_len); - - _asn1_set_value_lv (p, ptmp, vlen); - - counter += ber_len; - free(ptmp); - } - move = RIGHT; - break; - case ASN1_ETYPE_GENERALSTRING: - case ASN1_ETYPE_NUMERIC_STRING: - case ASN1_ETYPE_IA5_STRING: - case ASN1_ETYPE_TELETEX_STRING: - case ASN1_ETYPE_PRINTABLE_STRING: - case ASN1_ETYPE_UNIVERSAL_STRING: - case ASN1_ETYPE_BMP_STRING: - case ASN1_ETYPE_UTF8_STRING: - case ASN1_ETYPE_VISIBLE_STRING: - case ASN1_ETYPE_BIT_STRING: - len2 = - asn1_get_length_der (der + counter, ider_len, &len3); - if (len2 < 0) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - - DECR_LEN(ider_len, len3+len2); - - _asn1_set_value (p, der + counter, len3 + len2); - counter += len3 + len2; - move = RIGHT; - break; - case ASN1_ETYPE_SEQUENCE: - case ASN1_ETYPE_SET: - if (move == UP) - { - len2 = p->tmp_ival; - p->tmp_ival = 0; - if (len2 == -1) - { /* indefinite length method */ - DECR_LEN(ider_len, 2); - if ((der[counter]) || der[counter + 1]) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - counter += 2; - } - else - { /* definite length method */ - if (len2 != counter) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - } - move = RIGHT; - } - else - { /* move==DOWN || move==RIGHT */ - len3 = - asn1_get_length_der (der + counter, ider_len, &len2); - if (IS_ERR(len3, flags)) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - - DECR_LEN(ider_len, len2); - counter += len2; - - if (len3 > 0) - { - p->tmp_ival = counter + len3; - move = DOWN; - } - else if (len3 == 0) - { - p2 = p->down; - while (p2) - { - if (type_field (p2->type) != ASN1_ETYPE_TAG) - { - p3 = p2->right; - asn1_delete_structure (&p2); - p2 = p3; - } - else - p2 = p2->right; - } - move = RIGHT; - } - else - { /* indefinite length method */ - p->tmp_ival = -1; - move = DOWN; - } - } - break; - case ASN1_ETYPE_SEQUENCE_OF: - case ASN1_ETYPE_SET_OF: - if (move == UP) - { - len2 = p->tmp_ival; - if (len2 == -1) - { /* indefinite length method */ - if (!HAVE_TWO(ider_len) || ((der[counter]) || der[counter + 1])) - { - result = _asn1_append_sequence_set (p, &tcache); - if (result != 0) - { - warn(); - goto cleanup; - } - p = tcache.tail; - move = RIGHT; - continue; - } - - p->tmp_ival = 0; - tcache.tail = NULL; /* finished decoding this structure */ - tcache.head = NULL; - DECR_LEN(ider_len, 2); - counter += 2; - } - else - { /* definite length method */ - if (len2 > counter) - { - result = _asn1_append_sequence_set (p, &tcache); - if (result != 0) - { - warn(); - goto cleanup; - } - p = tcache.tail; - move = RIGHT; - continue; - } - - p->tmp_ival = 0; - tcache.tail = NULL; /* finished decoding this structure */ - tcache.head = NULL; - - if (len2 != counter) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - } - } - else - { /* move==DOWN || move==RIGHT */ - len3 = - asn1_get_length_der (der + counter, ider_len, &len2); - if (IS_ERR(len3, flags)) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - - DECR_LEN(ider_len, len2); - counter += len2; - if (len3) - { - if (len3 > 0) - { /* definite length method */ - p->tmp_ival = counter + len3; - } - else - { /* indefinite length method */ - p->tmp_ival = -1; - } - - p2 = p->down; - if (p2 == NULL) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - - while ((type_field (p2->type) == ASN1_ETYPE_TAG) - || (type_field (p2->type) == ASN1_ETYPE_SIZE)) - p2 = p2->right; - if (p2->right == NULL) - { - result = _asn1_append_sequence_set (p, &tcache); - if (result != 0) - { - warn(); - goto cleanup; - } - } - p = p2; - } - } - move = RIGHT; - break; - case ASN1_ETYPE_ANY: - /* Check indefinite lenth method in an EXPLICIT TAG */ - - if (!(flags & ASN1_DECODE_FLAG_STRICT_DER) && (p->type & CONST_TAG) && - tag_len == 2 && (der[counter - 1] == 0x80)) - indefinite = 1; - else - indefinite = 0; - - if (asn1_get_tag_der - (der + counter, ider_len, &class, &len2, - &tag) != ASN1_SUCCESS) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - - DECR_LEN(ider_len, len2); - - len4 = - asn1_get_length_der (der + counter + len2, - ider_len, &len3); - if (IS_ERR(len4, flags)) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - if (len4 != -1) /* definite */ - { - len2 += len4; - - DECR_LEN(ider_len, len4+len3); - _asn1_set_value_lv (p, der + counter, len2 + len3); - counter += len2 + len3; - } - else /* == -1 */ - { /* indefinite length */ - ider_len += len2; /* undo DECR_LEN */ - - if (counter == 0) - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - - result = - _asn1_get_indefinite_length_string (der + counter, ider_len, &len2); - if (result != ASN1_SUCCESS) - { - warn(); - goto cleanup; - } - - DECR_LEN(ider_len, len2); - _asn1_set_value_lv (p, der + counter, len2); - counter += len2; - - } - - /* Check if a couple of 0x00 are present due to an EXPLICIT TAG with - an indefinite length method. */ - if (indefinite) - { - DECR_LEN(ider_len, 2); - if (!der[counter] && !der[counter + 1]) - { - counter += 2; - } - else - { - result = ASN1_DER_ERROR; - warn(); - goto cleanup; - } - } - - move = RIGHT; - break; - default: - move = (move == UP) ? RIGHT : DOWN; - break; - } - } - - if (p) - { - p->end = counter - 1; - } - - if (p == node && move != DOWN) - break; - - if (move == DOWN) - { - if (p->down) - p = p->down; - else - move = RIGHT; - } - if ((move == RIGHT) && !(p->type & CONST_SET)) - { - if (p->right) - p = p->right; - else - move = UP; - } - if (move == UP) - p = _asn1_find_up (p); - } - - _asn1_delete_not_used (*element); - - if ((ider_len < 0) || - (!(flags & ASN1_DECODE_FLAG_ALLOW_PADDING) && (ider_len != 0))) - { - warn(); - result = ASN1_DER_ERROR; - goto cleanup; - } - - *max_ider_len = total_len - ider_len; - - return ASN1_SUCCESS; - -cleanup: - asn1_delete_structure (element); - return result; -} - - -/** - * asn1_der_decoding: - * @element: pointer to an ASN1 structure. - * @ider: vector that contains the DER encoding. - * @ider_len: number of bytes of *@ider: @ider[0]..@ider[len-1]. - * @errorDescription: null-terminated string contains details when an - * error occurred. - * - * Fill the structure *@element with values of a DER encoding - * string. The structure must just be created with function - * asn1_create_element(). - * - * Note that the *@element variable is provided as a pointer for - * historical reasons. - * - * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND - * if @ELEMENT is %NULL, and %ASN1_TAG_ERROR or - * %ASN1_DER_ERROR if the der encoding doesn't match the structure - * name (*@ELEMENT deleted). - **/ -int -asn1_der_decoding (asn1_node * element, const void *ider, int ider_len, - char *errorDescription) -{ - return asn1_der_decoding2 (element, ider, &ider_len, 0, errorDescription); -} - -/** - * asn1_der_decoding_element: - * @structure: pointer to an ASN1 structure - * @elementName: name of the element to fill - * @ider: vector that contains the DER encoding of the whole structure. - * @len: number of bytes of *der: der[0]..der[len-1] - * @errorDescription: null-terminated string contains details when an - * error occurred. - * - * Fill the element named @ELEMENTNAME with values of a DER encoding - * string. The structure must just be created with function - * asn1_create_element(). The DER vector must contain the encoding - * string of the whole @STRUCTURE. If an error occurs during the - * decoding procedure, the *@STRUCTURE is deleted and set equal to - * %NULL. - * - * This function is deprecated and may just be an alias to asn1_der_decoding - * in future versions. Use asn1_der_decoding() instead. - * - * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND - * if ELEMENT is %NULL or @elementName == NULL, and - * %ASN1_TAG_ERROR or %ASN1_DER_ERROR if the der encoding doesn't - * match the structure @structure (*ELEMENT deleted). - **/ -int -asn1_der_decoding_element (asn1_node * structure, const char *elementName, - const void *ider, int len, char *errorDescription) -{ - return asn1_der_decoding(structure, ider, len, errorDescription); -} - -/** - * asn1_der_decoding_startEnd: - * @element: pointer to an ASN1 element - * @ider: vector that contains the DER encoding. - * @ider_len: number of bytes of *@ider: @ider[0]..@ider[len-1] - * @name_element: an element of NAME structure. - * @start: the position of the first byte of NAME_ELEMENT decoding - * (@ider[*start]) - * @end: the position of the last byte of NAME_ELEMENT decoding - * (@ider[*end]) - * - * Find the start and end point of an element in a DER encoding - * string. I mean that if you have a der encoding and you have already - * used the function asn1_der_decoding() to fill a structure, it may - * happen that you want to find the piece of string concerning an - * element of the structure. - * - * One example is the sequence "tbsCertificate" inside an X509 - * certificate. - * - * Note that since libtasn1 3.7 the @ider and @ider_len parameters - * can be omitted, if the element is already decoded using asn1_der_decoding(). - * - * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND - * if ELEMENT is %asn1_node EMPTY or @name_element is not a valid - * element, %ASN1_TAG_ERROR or %ASN1_DER_ERROR if the der encoding - * doesn't match the structure ELEMENT. - **/ -int -asn1_der_decoding_startEnd (asn1_node element, const void *ider, int ider_len, - const char *name_element, int *start, int *end) -{ - asn1_node node, node_to_find; - int result = ASN1_DER_ERROR; - - node = element; - - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - node_to_find = asn1_find_node (node, name_element); - - if (node_to_find == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - *start = node_to_find->start; - *end = node_to_find->end; - - if (*start == 0 && *end == 0) - { - if (ider == NULL || ider_len == 0) - return ASN1_GENERIC_ERROR; - - /* it seems asn1_der_decoding() wasn't called before. Do it now */ - result = asn1_der_decoding (&node, ider, ider_len, NULL); - if (result != ASN1_SUCCESS) - { - warn(); - return result; - } - - node_to_find = asn1_find_node (node, name_element); - if (node_to_find == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - *start = node_to_find->start; - *end = node_to_find->end; - } - - if (*end < *start) - return ASN1_GENERIC_ERROR; - - return ASN1_SUCCESS; -} - -/** - * asn1_expand_any_defined_by: - * @definitions: ASN1 definitions - * @element: pointer to an ASN1 structure - * - * Expands every "ANY DEFINED BY" element of a structure created from - * a DER decoding process (asn1_der_decoding function). The element - * ANY must be defined by an OBJECT IDENTIFIER. The type used to - * expand the element ANY is the first one following the definition of - * the actual value of the OBJECT IDENTIFIER. - * - * Returns: %ASN1_SUCCESS if Substitution OK, %ASN1_ERROR_TYPE_ANY if - * some "ANY DEFINED BY" element couldn't be expanded due to a - * problem in OBJECT_ID -> TYPE association, or other error codes - * depending on DER decoding. - **/ -int -asn1_expand_any_defined_by (asn1_node definitions, asn1_node * element) -{ - char name[2 * ASN1_MAX_NAME_SIZE + 1], - value[ASN1_MAX_NAME_SIZE]; - int retCode = ASN1_SUCCESS, result; - int len, len2, len3; - asn1_node p, p2, p3, aux = NULL; - char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; - const char *definitionsName; - - if ((definitions == NULL) || (*element == NULL)) - return ASN1_ELEMENT_NOT_FOUND; - - definitionsName = definitions->name; - - p = *element; - while (p) - { - - switch (type_field (p->type)) - { - case ASN1_ETYPE_ANY: - if ((p->type & CONST_DEFINED_BY) && (p->value)) - { - /* search the "DEF_BY" element */ - p2 = p->down; - while ((p2) && (type_field (p2->type) != ASN1_ETYPE_CONSTANT)) - p2 = p2->right; - - if (!p2) - { - retCode = ASN1_ERROR_TYPE_ANY; - break; - } - - p3 = _asn1_find_up (p); - - if (!p3) - { - retCode = ASN1_ERROR_TYPE_ANY; - break; - } - - p3 = p3->down; - while (p3) - { - if (!(strcmp (p3->name, p2->name))) - break; - p3 = p3->right; - } - - if ((!p3) || (type_field (p3->type) != ASN1_ETYPE_OBJECT_ID) || - (p3->value == NULL)) - { - - p3 = _asn1_find_up (p); - p3 = _asn1_find_up (p3); - - if (!p3) - { - retCode = ASN1_ERROR_TYPE_ANY; - break; - } - - p3 = p3->down; - - while (p3) - { - if (!(strcmp (p3->name, p2->name))) - break; - p3 = p3->right; - } - - if ((!p3) || (type_field (p3->type) != ASN1_ETYPE_OBJECT_ID) - || (p3->value == NULL)) - { - retCode = ASN1_ERROR_TYPE_ANY; - break; - } - } - - /* search the OBJECT_ID into definitions */ - p2 = definitions->down; - while (p2) - { - if ((type_field (p2->type) == ASN1_ETYPE_OBJECT_ID) && - (p2->type & CONST_ASSIGN)) - { - snprintf(name, sizeof(name), "%s.%s", definitionsName, p2->name); - - len = ASN1_MAX_NAME_SIZE; - result = - asn1_read_value (definitions, name, value, &len); - - if ((result == ASN1_SUCCESS) - && (!_asn1_strcmp (p3->value, value))) - { - p2 = p2->right; /* pointer to the structure to - use for expansion */ - while ((p2) && (p2->type & CONST_ASSIGN)) - p2 = p2->right; - - if (p2) - { - snprintf(name, sizeof(name), "%s.%s", definitionsName, p2->name); - - result = - asn1_create_element (definitions, name, &aux); - if (result == ASN1_SUCCESS) - { - _asn1_cpy_name (aux, p); - len2 = - asn1_get_length_der (p->value, - p->value_len, &len3); - if (len2 < 0) - return ASN1_DER_ERROR; - - result = - asn1_der_decoding (&aux, p->value + len3, - len2, - errorDescription); - if (result == ASN1_SUCCESS) - { - - _asn1_set_right (aux, p->right); - _asn1_set_right (p, aux); - - result = asn1_delete_structure (&p); - if (result == ASN1_SUCCESS) - { - p = aux; - aux = NULL; - break; - } - else - { /* error with asn1_delete_structure */ - asn1_delete_structure (&aux); - retCode = result; - break; - } - } - else - { /* error with asn1_der_decoding */ - retCode = result; - break; - } - } - else - { /* error with asn1_create_element */ - retCode = result; - break; - } - } - else - { /* error with the pointer to the structure to exapand */ - retCode = ASN1_ERROR_TYPE_ANY; - break; - } - } - } - p2 = p2->right; - } /* end while */ - - if (!p2) - { - retCode = ASN1_ERROR_TYPE_ANY; - break; - } - - } - break; - default: - break; - } - - - if (p->down) - { - p = p->down; - } - else if (p == *element) - { - p = NULL; - break; - } - else if (p->right) - p = p->right; - else - { - while (1) - { - p = _asn1_find_up (p); - if (p == *element) - { - p = NULL; - break; - } - if (p->right) - { - p = p->right; - break; - } - } - } - } - - return retCode; -} - -/** - * asn1_expand_octet_string: - * @definitions: ASN1 definitions - * @element: pointer to an ASN1 structure - * @octetName: name of the OCTECT STRING field to expand. - * @objectName: name of the OBJECT IDENTIFIER field to use to define - * the type for expansion. - * - * Expands an "OCTET STRING" element of a structure created from a DER - * decoding process (the asn1_der_decoding() function). The type used - * for expansion is the first one following the definition of the - * actual value of the OBJECT IDENTIFIER indicated by OBJECTNAME. - * - * Returns: %ASN1_SUCCESS if substitution OK, %ASN1_ELEMENT_NOT_FOUND - * if @objectName or @octetName are not correct, - * %ASN1_VALUE_NOT_VALID if it wasn't possible to find the type to - * use for expansion, or other errors depending on DER decoding. - **/ -int -asn1_expand_octet_string (asn1_node definitions, asn1_node * element, - const char *octetName, const char *objectName) -{ - char name[2 * ASN1_MAX_NAME_SIZE + 1], value[ASN1_MAX_NAME_SIZE]; - int retCode = ASN1_SUCCESS, result; - int len, len2, len3; - asn1_node p2, aux = NULL; - asn1_node octetNode = NULL, objectNode = NULL; - char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; - - if ((definitions == NULL) || (*element == NULL)) - return ASN1_ELEMENT_NOT_FOUND; - - octetNode = asn1_find_node (*element, octetName); - if (octetNode == NULL) - return ASN1_ELEMENT_NOT_FOUND; - if (type_field (octetNode->type) != ASN1_ETYPE_OCTET_STRING) - return ASN1_ELEMENT_NOT_FOUND; - if (octetNode->value == NULL) - return ASN1_VALUE_NOT_FOUND; - - objectNode = asn1_find_node (*element, objectName); - if (objectNode == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - if (type_field (objectNode->type) != ASN1_ETYPE_OBJECT_ID) - return ASN1_ELEMENT_NOT_FOUND; - - if (objectNode->value == NULL) - return ASN1_VALUE_NOT_FOUND; - - - /* search the OBJECT_ID into definitions */ - p2 = definitions->down; - while (p2) - { - if ((type_field (p2->type) == ASN1_ETYPE_OBJECT_ID) && - (p2->type & CONST_ASSIGN)) - { - strcpy (name, definitions->name); - strcat (name, "."); - strcat (name, p2->name); - - len = sizeof (value); - result = asn1_read_value (definitions, name, value, &len); - - if ((result == ASN1_SUCCESS) - && (!_asn1_strcmp (objectNode->value, value))) - { - - p2 = p2->right; /* pointer to the structure to - use for expansion */ - while ((p2) && (p2->type & CONST_ASSIGN)) - p2 = p2->right; - - if (p2) - { - strcpy (name, definitions->name); - strcat (name, "."); - strcat (name, p2->name); - - result = asn1_create_element (definitions, name, &aux); - if (result == ASN1_SUCCESS) - { - _asn1_cpy_name (aux, octetNode); - len2 = - asn1_get_length_der (octetNode->value, - octetNode->value_len, &len3); - if (len2 < 0) - return ASN1_DER_ERROR; - - result = - asn1_der_decoding (&aux, octetNode->value + len3, - len2, errorDescription); - if (result == ASN1_SUCCESS) - { - - _asn1_set_right (aux, octetNode->right); - _asn1_set_right (octetNode, aux); - - result = asn1_delete_structure (&octetNode); - if (result == ASN1_SUCCESS) - { - aux = NULL; - break; - } - else - { /* error with asn1_delete_structure */ - asn1_delete_structure (&aux); - retCode = result; - break; - } - } - else - { /* error with asn1_der_decoding */ - retCode = result; - break; - } - } - else - { /* error with asn1_create_element */ - retCode = result; - break; - } - } - else - { /* error with the pointer to the structure to exapand */ - retCode = ASN1_VALUE_NOT_VALID; - break; - } - } - } - - p2 = p2->right; - - } - - if (!p2) - retCode = ASN1_VALUE_NOT_VALID; - - return retCode; -} - -/*- - * _asn1_decode_simple_der: - * @etype: The type of the string to be encoded (ASN1_ETYPE_) - * @der: the encoded string - * @_der_len: the bytes of the encoded string - * @str: a pointer to the data - * @str_len: the length of the data - * @dflags: DECODE_FLAG_* - * - * Decodes a simple DER encoded type (e.g. a string, which is not constructed). - * The output is a pointer inside the @der. - * - * Returns: %ASN1_SUCCESS if successful or an error value. - -*/ -static int -_asn1_decode_simple_der (unsigned int etype, const unsigned char *der, - unsigned int _der_len, const unsigned char **str, - unsigned int *str_len, unsigned dflags) -{ - int tag_len, len_len; - const unsigned char *p; - int der_len = _der_len; - unsigned char class; - unsigned long tag; - long ret; - - if (der == NULL || der_len == 0) - return ASN1_VALUE_NOT_VALID; - - if (ETYPE_OK (etype) == 0 || ETYPE_IS_STRING(etype) == 0) - return ASN1_VALUE_NOT_VALID; - - /* doesn't handle constructed classes */ - class = ETYPE_CLASS(etype); - if (class != ASN1_CLASS_UNIVERSAL) - return ASN1_VALUE_NOT_VALID; - - p = der; - - if (dflags & DECODE_FLAG_HAVE_TAG) - { - ret = asn1_get_tag_der (p, der_len, &class, &tag_len, &tag); - if (ret != ASN1_SUCCESS) - return ret; - - if (class != ETYPE_CLASS (etype) || tag != ETYPE_TAG (etype)) - { - warn(); - return ASN1_DER_ERROR; - } - - p += tag_len; - der_len -= tag_len; - if (der_len <= 0) - return ASN1_DER_ERROR; - } - - ret = asn1_get_length_der (p, der_len, &len_len); - if (ret < 0) - return ASN1_DER_ERROR; - - p += len_len; - der_len -= len_len; - if (der_len <= 0) - return ASN1_DER_ERROR; - - *str_len = ret; - *str = p; - - return ASN1_SUCCESS; -} - -/** - * asn1_decode_simple_der: - * @etype: The type of the string to be encoded (ASN1_ETYPE_) - * @der: the encoded string - * @_der_len: the bytes of the encoded string - * @str: a pointer to the data - * @str_len: the length of the data - * - * Decodes a simple DER encoded type (e.g. a string, which is not constructed). - * The output is a pointer inside the @der. - * - * Returns: %ASN1_SUCCESS if successful or an error value. - **/ -int -asn1_decode_simple_der (unsigned int etype, const unsigned char *der, - unsigned int _der_len, const unsigned char **str, - unsigned int *str_len) -{ - return _asn1_decode_simple_der(etype, der, _der_len, str, str_len, DECODE_FLAG_HAVE_TAG); -} - -static int append(uint8_t **dst, unsigned *dst_size, const unsigned char *src, unsigned src_size) -{ - *dst = _asn1_realloc(*dst, *dst_size+src_size); - if (*dst == NULL) - return ASN1_MEM_ERROR; - memcpy(*dst + *dst_size, src, src_size); - *dst_size += src_size; - return ASN1_SUCCESS; -} - -/*- - * _asn1_decode_simple_ber: - * @etype: The type of the string to be encoded (ASN1_ETYPE_) - * @der: the encoded string - * @_der_len: the bytes of the encoded string - * @str: a pointer to the data - * @str_len: the length of the data - * @ber_len: the total length occupied by BER (may be %NULL) - * @have_tag: whether a DER tag is included - * - * Decodes a BER encoded type. The output is an allocated value - * of the data. This decodes BER STRINGS only. Other types are - * decoded as DER. - * - * Returns: %ASN1_SUCCESS if successful or an error value. - -*/ -static int -_asn1_decode_simple_ber (unsigned int etype, const unsigned char *der, - unsigned int _der_len, unsigned char **str, - unsigned int *str_len, unsigned int *ber_len, - unsigned dflags) -{ - int tag_len, len_len; - const unsigned char *p; - int der_len = _der_len; - uint8_t *total = NULL; - unsigned total_size = 0; - unsigned char class; - unsigned long tag; - unsigned char *out = NULL; - const unsigned char *cout = NULL; - unsigned out_len; - long result; - - if (ber_len) *ber_len = 0; - - if (der == NULL || der_len == 0) - { - warn(); - return ASN1_VALUE_NOT_VALID; - } - - if (ETYPE_OK (etype) == 0) - { - warn(); - return ASN1_VALUE_NOT_VALID; - } - - /* doesn't handle constructed + definite classes */ - class = ETYPE_CLASS (etype); - if (class != ASN1_CLASS_UNIVERSAL) - { - warn(); - return ASN1_VALUE_NOT_VALID; - } - - p = der; - - if (dflags & DECODE_FLAG_HAVE_TAG) - { - result = asn1_get_tag_der (p, der_len, &class, &tag_len, &tag); - if (result != ASN1_SUCCESS) - { - warn(); - return result; - } - - if (tag != ETYPE_TAG (etype)) - { - warn(); - return ASN1_DER_ERROR; - } - - p += tag_len; - - DECR_LEN(der_len, tag_len); - - if (ber_len) *ber_len += tag_len; - } - - /* indefinite constructed */ - if (((dflags & DECODE_FLAG_INDEFINITE) || class == ASN1_CLASS_STRUCTURED) && ETYPE_IS_STRING(etype)) - { - len_len = 1; - - DECR_LEN(der_len, len_len); - if (p[0] != 0x80) - { - warn(); - result = ASN1_DER_ERROR; - goto cleanup; - } - - p += len_len; - - if (ber_len) *ber_len += len_len; - - /* decode the available octet strings */ - do - { - unsigned tmp_len; - - result = asn1_decode_simple_ber(etype, p, der_len, &out, &out_len, &tmp_len); - if (result != ASN1_SUCCESS) - { - warn(); - goto cleanup; - } - - p += tmp_len; - DECR_LEN(der_len, tmp_len); - - if (ber_len) *ber_len += tmp_len; - - DECR_LEN(der_len, 2); /* we need the EOC */ - - if (out_len > 0) - { - result = append(&total, &total_size, out, out_len); - if (result != ASN1_SUCCESS) - { - warn(); - goto cleanup; - } - } - - free(out); - out = NULL; - - if (p[0] == 0 && p[1] == 0) /* EOC */ - { - if (ber_len) *ber_len += 2; - break; - } - - /* no EOC */ - der_len += 2; - - if (der_len == 2) - { - warn(); - result = ASN1_DER_ERROR; - goto cleanup; - } - } - while(1); - } - else if (class == ETYPE_CLASS(etype)) - { - if (ber_len) - { - result = asn1_get_length_der (p, der_len, &len_len); - if (result < 0) - { - warn(); - result = ASN1_DER_ERROR; - goto cleanup; - } - *ber_len += result + len_len; - } - - /* non-string values are decoded as DER */ - result = _asn1_decode_simple_der(etype, der, _der_len, &cout, &out_len, dflags); - if (result != ASN1_SUCCESS) - { - warn(); - goto cleanup; - } - - result = append(&total, &total_size, cout, out_len); - if (result != ASN1_SUCCESS) - { - warn(); - goto cleanup; - } - } - else - { - warn(); - result = ASN1_DER_ERROR; - goto cleanup; - } - - *str = total; - *str_len = total_size; - - return ASN1_SUCCESS; -cleanup: - free(out); - free(total); - return result; -} - -/** - * asn1_decode_simple_ber: - * @etype: The type of the string to be encoded (ASN1_ETYPE_) - * @der: the encoded string - * @_der_len: the bytes of the encoded string - * @str: a pointer to the data - * @str_len: the length of the data - * @ber_len: the total length occupied by BER (may be %NULL) - * - * Decodes a BER encoded type. The output is an allocated value - * of the data. This decodes BER STRINGS only. Other types are - * decoded as DER. - * - * Returns: %ASN1_SUCCESS if successful or an error value. - **/ -int -asn1_decode_simple_ber (unsigned int etype, const unsigned char *der, - unsigned int _der_len, unsigned char **str, - unsigned int *str_len, unsigned int *ber_len) -{ - return _asn1_decode_simple_ber(etype, der, _der_len, str, str_len, ber_len, DECODE_FLAG_HAVE_TAG); -} diff --git a/lib/minitasn1/element.c b/lib/minitasn1/element.c deleted file mode 100644 index b09f82647f..0000000000 --- a/lib/minitasn1/element.c +++ /dev/null @@ -1,1111 +0,0 @@ -/* - * Copyright (C) 2000-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - -/*****************************************************/ -/* File: element.c */ -/* Description: Functions with the read and write */ -/* functions. */ -/*****************************************************/ - - -#include -#include "parser_aux.h" -#include -#include "structure.h" - -#include "element.h" - -void -_asn1_hierarchical_name (asn1_node node, char *name, int name_size) -{ - asn1_node p; - char tmp_name[64]; - - p = node; - - name[0] = 0; - - while (p != NULL) - { - if (p->name[0] != 0) - { - _asn1_str_cpy (tmp_name, sizeof (tmp_name), name), - _asn1_str_cpy (name, name_size, p->name); - _asn1_str_cat (name, name_size, "."); - _asn1_str_cat (name, name_size, tmp_name); - } - p = _asn1_find_up (p); - } - - if (name[0] == 0) - _asn1_str_cpy (name, name_size, "ROOT"); -} - - -/******************************************************************/ -/* Function : _asn1_convert_integer */ -/* Description: converts an integer from a null terminated string */ -/* to der decoding. The convertion from a null */ -/* terminated string to an integer is made with */ -/* the 'strtol' function. */ -/* Parameters: */ -/* value: null terminated string to convert. */ -/* value_out: convertion result (memory must be already */ -/* allocated). */ -/* value_out_size: number of bytes of value_out. */ -/* len: number of significant byte of value_out. */ -/* Return: ASN1_MEM_ERROR or ASN1_SUCCESS */ -/******************************************************************/ -int -_asn1_convert_integer (const unsigned char *value, unsigned char *value_out, - int value_out_size, int *len) -{ - char negative; - unsigned char val[SIZEOF_UNSIGNED_LONG_INT]; - long valtmp; - int k, k2; - - valtmp = _asn1_strtol (value, NULL, 10); - - for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT; k++) - { - val[SIZEOF_UNSIGNED_LONG_INT - k - 1] = (valtmp >> (8 * k)) & 0xFF; - } - - if (val[0] & 0x80) - negative = 1; - else - negative = 0; - - for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT - 1; k++) - { - if (negative && (val[k] != 0xFF)) - break; - else if (!negative && val[k]) - break; - } - - if ((negative && !(val[k] & 0x80)) || (!negative && (val[k] & 0x80))) - k--; - - *len = SIZEOF_UNSIGNED_LONG_INT - k; - - if (SIZEOF_UNSIGNED_LONG_INT - k > value_out_size) - /* VALUE_OUT is too short to contain the value conversion */ - return ASN1_MEM_ERROR; - - if (value_out != NULL) - { - for (k2 = k; k2 < SIZEOF_UNSIGNED_LONG_INT; k2++) - value_out[k2 - k] = val[k2]; - } - -#if 0 - printf ("_asn1_convert_integer: valueIn=%s, lenOut=%d", value, *len); - for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT; k++) - printf (", vOut[%d]=%d", k, value_out[k]); - printf ("\n"); -#endif - - return ASN1_SUCCESS; -} - -/* Appends a new element into the sequence (or set) defined by this - * node. The new element will have a name of '?number', where number - * is a monotonically increased serial number. - * - * The last element in the list may be provided in @pcache, to avoid - * traversing the list, an expensive operation in long lists. - * - * On success it returns in @pcache the added element (which is the - * tail in the list of added elements). - */ -int -_asn1_append_sequence_set (asn1_node node, struct node_tail_cache_st *pcache) -{ - asn1_node p, p2; - char temp[LTOSTR_MAX_SIZE]; - long n; - - if (!node || !(node->down)) - return ASN1_GENERIC_ERROR; - - p = node->down; - while ((type_field (p->type) == ASN1_ETYPE_TAG) - || (type_field (p->type) == ASN1_ETYPE_SIZE)) - p = p->right; - - p2 = _asn1_copy_structure3 (p); - if (p2 == NULL) - return ASN1_GENERIC_ERROR; - - if (pcache == NULL || pcache->tail == NULL || pcache->head != node) - { - while (p->right) - { - p = p->right; - } - } - else - { - p = pcache->tail; - } - - _asn1_set_right (p, p2); - if (pcache) - { - pcache->head = node; - pcache->tail = p2; - } - - if (p->name[0] == 0) - _asn1_str_cpy (temp, sizeof (temp), "?1"); - else - { - n = strtol (p->name + 1, NULL, 0); - n++; - temp[0] = '?'; - _asn1_ltostr (n, temp + 1); - } - _asn1_set_name (p2, temp); - /* p2->type |= CONST_OPTION; */ - - return ASN1_SUCCESS; -} - - -/** - * asn1_write_value: - * @node_root: pointer to a structure - * @name: the name of the element inside the structure that you want to set. - * @ivalue: vector used to specify the value to set. If len is >0, - * VALUE must be a two's complement form integer. if len=0 *VALUE - * must be a null terminated string with an integer value. - * @len: number of bytes of *value to use to set the value: - * value[0]..value[len-1] or 0 if value is a null terminated string - * - * Set the value of one element inside a structure. - * - * If an element is OPTIONAL and you want to delete it, you must use - * the value=NULL and len=0. Using "pkix.asn": - * - * result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID", - * NULL, 0); - * - * Description for each type: - * - * INTEGER: VALUE must contain a two's complement form integer. - * - * value[0]=0xFF , len=1 -> integer=-1. - * value[0]=0xFF value[1]=0xFF , len=2 -> integer=-1. - * value[0]=0x01 , len=1 -> integer= 1. - * value[0]=0x00 value[1]=0x01 , len=2 -> integer= 1. - * value="123" , len=0 -> integer= 123. - * - * ENUMERATED: As INTEGER (but only with not negative numbers). - * - * BOOLEAN: VALUE must be the null terminated string "TRUE" or - * "FALSE" and LEN != 0. - * - * value="TRUE" , len=1 -> boolean=TRUE. - * value="FALSE" , len=1 -> boolean=FALSE. - * - * OBJECT IDENTIFIER: VALUE must be a null terminated string with - * each number separated by a dot (e.g. "1.2.3.543.1"). LEN != 0. - * - * value="1 2 840 10040 4 3" , len=1 -> OID=dsa-with-sha. - * - * UTCTime: VALUE must be a null terminated string in one of these - * formats: "YYMMDDhhmmssZ", "YYMMDDhhmmssZ", - * "YYMMDDhhmmss+hh'mm'", "YYMMDDhhmmss-hh'mm'", - * "YYMMDDhhmm+hh'mm'", or "YYMMDDhhmm-hh'mm'". LEN != 0. - * - * value="9801011200Z" , len=1 -> time=Jannuary 1st, 1998 - * at 12h 00m Greenwich Mean Time - * - * GeneralizedTime: VALUE must be in one of this format: - * "YYYYMMDDhhmmss.sZ", "YYYYMMDDhhmmss.sZ", - * "YYYYMMDDhhmmss.s+hh'mm'", "YYYYMMDDhhmmss.s-hh'mm'", - * "YYYYMMDDhhmm+hh'mm'", or "YYYYMMDDhhmm-hh'mm'" where ss.s - * indicates the seconds with any precision like "10.1" or "01.02". - * LEN != 0 - * - * value="2001010112001.12-0700" , len=1 -> time=Jannuary - * 1st, 2001 at 12h 00m 01.12s Pacific Daylight Time - * - * OCTET STRING: VALUE contains the octet string and LEN is the - * number of octets. - * - * value="$\backslash$x01$\backslash$x02$\backslash$x03" , - * len=3 -> three bytes octet string - * - * GeneralString: VALUE contains the generalstring and LEN is the - * number of octets. - * - * value="$\backslash$x01$\backslash$x02$\backslash$x03" , - * len=3 -> three bytes generalstring - * - * BIT STRING: VALUE contains the bit string organized by bytes and - * LEN is the number of bits. - * - * value="$\backslash$xCF" , len=6 -> bit string="110011" (six - * bits) - * - * CHOICE: if NAME indicates a choice type, VALUE must specify one of - * the alternatives with a null terminated string. LEN != 0. Using - * "pkix.asn"\: - * - * result=asn1_write_value(cert, - * "certificate1.tbsCertificate.subject", "rdnSequence", - * 1); - * - * ANY: VALUE indicates the der encoding of a structure. LEN != 0. - * - * SEQUENCE OF: VALUE must be the null terminated string "NEW" and - * LEN != 0. With this instruction another element is appended in - * the sequence. The name of this element will be "?1" if it's the - * first one, "?2" for the second and so on. - * - * Using "pkix.asn"\: - * - * result=asn1_write_value(cert, - * "certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1); - * - * SET OF: the same as SEQUENCE OF. Using "pkix.asn": - * - * result=asn1_write_value(cert, - * "tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1); - * - * Returns: %ASN1_SUCCESS if the value was set, - * %ASN1_ELEMENT_NOT_FOUND if @name is not a valid element, and - * %ASN1_VALUE_NOT_VALID if @ivalue has a wrong format. - **/ -int -asn1_write_value (asn1_node node_root, const char *name, - const void *ivalue, int len) -{ - asn1_node node, p, p2; - unsigned char *temp, *value_temp = NULL, *default_temp = NULL; - int len2, k, k2, negative; - size_t i; - const unsigned char *value = ivalue; - unsigned int type; - - node = asn1_find_node (node_root, name); - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - if ((node->type & CONST_OPTION) && (value == NULL) && (len == 0)) - { - asn1_delete_structure (&node); - return ASN1_SUCCESS; - } - - type = type_field (node->type); - - if ((type == ASN1_ETYPE_SEQUENCE_OF || type == ASN1_ETYPE_SET_OF) && (value == NULL) && (len == 0)) - { - p = node->down; - while ((type_field (p->type) == ASN1_ETYPE_TAG) - || (type_field (p->type) == ASN1_ETYPE_SIZE)) - p = p->right; - - while (p->right) - asn1_delete_structure (&p->right); - - return ASN1_SUCCESS; - } - - /* Don't allow element deletion for other types */ - if (value == NULL) - { - return ASN1_VALUE_NOT_VALID; - } - - switch (type) - { - case ASN1_ETYPE_BOOLEAN: - if (!_asn1_strcmp (value, "TRUE")) - { - if (node->type & CONST_DEFAULT) - { - p = node->down; - while (type_field (p->type) != ASN1_ETYPE_DEFAULT) - p = p->right; - if (p->type & CONST_TRUE) - _asn1_set_value (node, NULL, 0); - else - _asn1_set_value (node, "T", 1); - } - else - _asn1_set_value (node, "T", 1); - } - else if (!_asn1_strcmp (value, "FALSE")) - { - if (node->type & CONST_DEFAULT) - { - p = node->down; - while (type_field (p->type) != ASN1_ETYPE_DEFAULT) - p = p->right; - if (p->type & CONST_FALSE) - _asn1_set_value (node, NULL, 0); - else - _asn1_set_value (node, "F", 1); - } - else - _asn1_set_value (node, "F", 1); - } - else - return ASN1_VALUE_NOT_VALID; - break; - case ASN1_ETYPE_INTEGER: - case ASN1_ETYPE_ENUMERATED: - if (len == 0) - { - if ((isdigit (value[0])) || (value[0] == '-')) - { - value_temp = malloc (SIZEOF_UNSIGNED_LONG_INT); - if (value_temp == NULL) - return ASN1_MEM_ALLOC_ERROR; - - _asn1_convert_integer (value, value_temp, - SIZEOF_UNSIGNED_LONG_INT, &len); - } - else - { /* is an identifier like v1 */ - if (!(node->type & CONST_LIST)) - return ASN1_VALUE_NOT_VALID; - p = node->down; - while (p) - { - if (type_field (p->type) == ASN1_ETYPE_CONSTANT) - { - if (!_asn1_strcmp (p->name, value)) - { - value_temp = malloc (SIZEOF_UNSIGNED_LONG_INT); - if (value_temp == NULL) - return ASN1_MEM_ALLOC_ERROR; - - _asn1_convert_integer (p->value, - value_temp, - SIZEOF_UNSIGNED_LONG_INT, - &len); - break; - } - } - p = p->right; - } - if (p == NULL) - return ASN1_VALUE_NOT_VALID; - } - } - else - { /* len != 0 */ - value_temp = malloc (len); - if (value_temp == NULL) - return ASN1_MEM_ALLOC_ERROR; - memcpy (value_temp, value, len); - } - - if (value_temp[0] & 0x80) - negative = 1; - else - negative = 0; - - if (negative && (type_field (node->type) == ASN1_ETYPE_ENUMERATED)) - { - free (value_temp); - return ASN1_VALUE_NOT_VALID; - } - - for (k = 0; k < len - 1; k++) - if (negative && (value_temp[k] != 0xFF)) - break; - else if (!negative && value_temp[k]) - break; - - if ((negative && !(value_temp[k] & 0x80)) || - (!negative && (value_temp[k] & 0x80))) - k--; - - _asn1_set_value_lv (node, value_temp + k, len - k); - - if (node->type & CONST_DEFAULT) - { - p = node->down; - while (type_field (p->type) != ASN1_ETYPE_DEFAULT) - p = p->right; - if ((isdigit (p->value[0])) || (p->value[0] == '-')) - { - default_temp = malloc (SIZEOF_UNSIGNED_LONG_INT); - if (default_temp == NULL) - { - free (value_temp); - return ASN1_MEM_ALLOC_ERROR; - } - - _asn1_convert_integer (p->value, default_temp, - SIZEOF_UNSIGNED_LONG_INT, &len2); - } - else - { /* is an identifier like v1 */ - if (!(node->type & CONST_LIST)) - { - free (value_temp); - return ASN1_VALUE_NOT_VALID; - } - p2 = node->down; - while (p2) - { - if (type_field (p2->type) == ASN1_ETYPE_CONSTANT) - { - if (!_asn1_strcmp (p2->name, p->value)) - { - default_temp = malloc (SIZEOF_UNSIGNED_LONG_INT); - if (default_temp == NULL) - { - free (value_temp); - return ASN1_MEM_ALLOC_ERROR; - } - - _asn1_convert_integer (p2->value, - default_temp, - SIZEOF_UNSIGNED_LONG_INT, - &len2); - break; - } - } - p2 = p2->right; - } - if (p2 == NULL) - { - free (value_temp); - return ASN1_VALUE_NOT_VALID; - } - } - - - if ((len - k) == len2) - { - for (k2 = 0; k2 < len2; k2++) - if (value_temp[k + k2] != default_temp[k2]) - { - break; - } - if (k2 == len2) - _asn1_set_value (node, NULL, 0); - } - free (default_temp); - } - free (value_temp); - break; - case ASN1_ETYPE_OBJECT_ID: - for (i = 0; i < _asn1_strlen (value); i++) - if ((!isdigit (value[i])) && (value[i] != '.') && (value[i] != '+')) - return ASN1_VALUE_NOT_VALID; - if (node->type & CONST_DEFAULT) - { - p = node->down; - while (type_field (p->type) != ASN1_ETYPE_DEFAULT) - p = p->right; - if (!_asn1_strcmp (value, p->value)) - { - _asn1_set_value (node, NULL, 0); - break; - } - } - _asn1_set_value (node, value, _asn1_strlen (value) + 1); - break; - case ASN1_ETYPE_UTC_TIME: - { - len = _asn1_strlen (value); - if (len < 11) - return ASN1_VALUE_NOT_VALID; - for (k = 0; k < 10; k++) - if (!isdigit (value[k])) - return ASN1_VALUE_NOT_VALID; - switch (len) - { - case 11: - if (value[10] != 'Z') - return ASN1_VALUE_NOT_VALID; - break; - case 13: - if ((!isdigit (value[10])) || (!isdigit (value[11])) || - (value[12] != 'Z')) - return ASN1_VALUE_NOT_VALID; - break; - case 15: - if ((value[10] != '+') && (value[10] != '-')) - return ASN1_VALUE_NOT_VALID; - for (k = 11; k < 15; k++) - if (!isdigit (value[k])) - return ASN1_VALUE_NOT_VALID; - break; - case 17: - if ((!isdigit (value[10])) || (!isdigit (value[11]))) - return ASN1_VALUE_NOT_VALID; - if ((value[12] != '+') && (value[12] != '-')) - return ASN1_VALUE_NOT_VALID; - for (k = 13; k < 17; k++) - if (!isdigit (value[k])) - return ASN1_VALUE_NOT_VALID; - break; - default: - return ASN1_VALUE_NOT_FOUND; - } - _asn1_set_value (node, value, len); - } - break; - case ASN1_ETYPE_GENERALIZED_TIME: - len = _asn1_strlen (value); - _asn1_set_value (node, value, len); - break; - case ASN1_ETYPE_OCTET_STRING: - case ASN1_ETYPE_GENERALSTRING: - case ASN1_ETYPE_NUMERIC_STRING: - case ASN1_ETYPE_IA5_STRING: - case ASN1_ETYPE_TELETEX_STRING: - case ASN1_ETYPE_PRINTABLE_STRING: - case ASN1_ETYPE_UNIVERSAL_STRING: - case ASN1_ETYPE_BMP_STRING: - case ASN1_ETYPE_UTF8_STRING: - case ASN1_ETYPE_VISIBLE_STRING: - if (len == 0) - len = _asn1_strlen (value); - _asn1_set_value_lv (node, value, len); - break; - case ASN1_ETYPE_BIT_STRING: - if (len == 0) - len = _asn1_strlen (value); - asn1_length_der ((len >> 3) + 2, NULL, &len2); - temp = malloc ((len >> 3) + 2 + len2); - if (temp == NULL) - return ASN1_MEM_ALLOC_ERROR; - - asn1_bit_der (value, len, temp, &len2); - _asn1_set_value_m (node, temp, len2); - temp = NULL; - break; - case ASN1_ETYPE_CHOICE: - p = node->down; - while (p) - { - if (!_asn1_strcmp (p->name, value)) - { - p2 = node->down; - while (p2) - { - if (p2 != p) - { - asn1_delete_structure (&p2); - p2 = node->down; - } - else - p2 = p2->right; - } - break; - } - p = p->right; - } - if (!p) - return ASN1_ELEMENT_NOT_FOUND; - break; - case ASN1_ETYPE_ANY: - _asn1_set_value_lv (node, value, len); - break; - case ASN1_ETYPE_SEQUENCE_OF: - case ASN1_ETYPE_SET_OF: - if (_asn1_strcmp (value, "NEW")) - return ASN1_VALUE_NOT_VALID; - _asn1_append_sequence_set (node, NULL); - break; - default: - return ASN1_ELEMENT_NOT_FOUND; - break; - } - - return ASN1_SUCCESS; -} - - -#define PUT_VALUE( ptr, ptr_size, data, data_size) \ - *len = data_size; \ - if (ptr_size < data_size) { \ - return ASN1_MEM_ERROR; \ - } else { \ - if (ptr && data_size > 0) \ - memcpy (ptr, data, data_size); \ - } - -#define PUT_STR_VALUE( ptr, ptr_size, data) \ - *len = _asn1_strlen (data) + 1; \ - if (ptr_size < *len) { \ - return ASN1_MEM_ERROR; \ - } else { \ - /* this strcpy is checked */ \ - if (ptr) { \ - _asn1_strcpy (ptr, data); \ - } \ - } - -#define PUT_AS_STR_VALUE( ptr, ptr_size, data, data_size) \ - *len = data_size + 1; \ - if (ptr_size < *len) { \ - return ASN1_MEM_ERROR; \ - } else { \ - /* this strcpy is checked */ \ - if (ptr) { \ - if (data_size > 0) \ - memcpy (ptr, data, data_size); \ - ptr[data_size] = 0; \ - } \ - } - -#define ADD_STR_VALUE( ptr, ptr_size, data) \ - *len += _asn1_strlen(data); \ - if (ptr_size < (int) *len) { \ - (*len)++; \ - return ASN1_MEM_ERROR; \ - } else { \ - /* this strcat is checked */ \ - if (ptr) _asn1_strcat (ptr, data); \ - } - -/** - * asn1_read_value: - * @root: pointer to a structure. - * @name: the name of the element inside a structure that you want to read. - * @ivalue: vector that will contain the element's content, must be a - * pointer to memory cells already allocated (may be %NULL). - * @len: number of bytes of *value: value[0]..value[len-1]. Initialy - * holds the sizeof value. - * - * Returns the value of one element inside a structure. - * If an element is OPTIONAL and this returns - * %ASN1_ELEMENT_NOT_FOUND, it means that this element wasn't present - * in the der encoding that created the structure. The first element - * of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and - * so on. If the @root provided is a node to specific sequence element, - * then the keyword "?CURRENT" is also acceptable and indicates the - * current sequence element of this node. - * - * Note that there can be valid values with length zero. In these case - * this function will succeed and @len will be zero. - * - * INTEGER: VALUE will contain a two's complement form integer. - * - * integer=-1 -> value[0]=0xFF , len=1. - * integer=1 -> value[0]=0x01 , len=1. - * - * ENUMERATED: As INTEGER (but only with not negative numbers). - * - * BOOLEAN: VALUE will be the null terminated string "TRUE" or - * "FALSE" and LEN=5 or LEN=6. - * - * OBJECT IDENTIFIER: VALUE will be a null terminated string with - * each number separated by a dot (i.e. "1.2.3.543.1"). - * - * LEN = strlen(VALUE)+1 - * - * UTCTime: VALUE will be a null terminated string in one of these - * formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". - * LEN=strlen(VALUE)+1. - * - * GeneralizedTime: VALUE will be a null terminated string in the - * same format used to set the value. - * - * OCTET STRING: VALUE will contain the octet string and LEN will be - * the number of octets. - * - * GeneralString: VALUE will contain the generalstring and LEN will - * be the number of octets. - * - * BIT STRING: VALUE will contain the bit string organized by bytes - * and LEN will be the number of bits. - * - * CHOICE: If NAME indicates a choice type, VALUE will specify the - * alternative selected. - * - * ANY: If NAME indicates an any type, VALUE will indicate the DER - * encoding of the structure actually used. - * - * Returns: %ASN1_SUCCESS if value is returned, - * %ASN1_ELEMENT_NOT_FOUND if @name is not a valid element, - * %ASN1_VALUE_NOT_FOUND if there isn't any value for the element - * selected, and %ASN1_MEM_ERROR if The value vector isn't big enough - * to store the result, and in this case @len will contain the number of - * bytes needed. On the occasion that the stored data are of zero-length - * this function may return %ASN1_SUCCESS even if the provided @len is zero. - **/ -int -asn1_read_value (asn1_node root, const char *name, void *ivalue, int *len) -{ - return asn1_read_value_type (root, name, ivalue, len, NULL); -} - -/** - * asn1_read_value_type: - * @root: pointer to a structure. - * @name: the name of the element inside a structure that you want to read. - * @ivalue: vector that will contain the element's content, must be a - * pointer to memory cells already allocated (may be %NULL). - * @len: number of bytes of *value: value[0]..value[len-1]. Initialy - * holds the sizeof value. - * @etype: The type of the value read (ASN1_ETYPE) - * - * Returns the type and value of one element inside a structure. - * If an element is OPTIONAL and this returns - * %ASN1_ELEMENT_NOT_FOUND, it means that this element wasn't present - * in the der encoding that created the structure. The first element - * of a SEQUENCE_OF or SET_OF is named "?1". The second one "?2" and - * so on. If the @root provided is a node to specific sequence element, - * then the keyword "?CURRENT" is also acceptable and indicates the - * current sequence element of this node. - * - * Note that there can be valid values with length zero. In these case - * this function will succeed and @len will be zero. - * - * - * INTEGER: VALUE will contain a two's complement form integer. - * - * integer=-1 -> value[0]=0xFF , len=1. - * integer=1 -> value[0]=0x01 , len=1. - * - * ENUMERATED: As INTEGER (but only with not negative numbers). - * - * BOOLEAN: VALUE will be the null terminated string "TRUE" or - * "FALSE" and LEN=5 or LEN=6. - * - * OBJECT IDENTIFIER: VALUE will be a null terminated string with - * each number separated by a dot (i.e. "1.2.3.543.1"). - * - * LEN = strlen(VALUE)+1 - * - * UTCTime: VALUE will be a null terminated string in one of these - * formats: "YYMMDDhhmmss+hh'mm'" or "YYMMDDhhmmss-hh'mm'". - * LEN=strlen(VALUE)+1. - * - * GeneralizedTime: VALUE will be a null terminated string in the - * same format used to set the value. - * - * OCTET STRING: VALUE will contain the octet string and LEN will be - * the number of octets. - * - * GeneralString: VALUE will contain the generalstring and LEN will - * be the number of octets. - * - * BIT STRING: VALUE will contain the bit string organized by bytes - * and LEN will be the number of bits. - * - * CHOICE: If NAME indicates a choice type, VALUE will specify the - * alternative selected. - * - * ANY: If NAME indicates an any type, VALUE will indicate the DER - * encoding of the structure actually used. - * - * Returns: %ASN1_SUCCESS if value is returned, - * %ASN1_ELEMENT_NOT_FOUND if @name is not a valid element, - * %ASN1_VALUE_NOT_FOUND if there isn't any value for the element - * selected, and %ASN1_MEM_ERROR if The value vector isn't big enough - * to store the result, and in this case @len will contain the number of - * bytes needed. On the occasion that the stored data are of zero-length - * this function may return %ASN1_SUCCESS even if the provided @len is zero. - **/ -int -asn1_read_value_type (asn1_node root, const char *name, void *ivalue, - int *len, unsigned int *etype) -{ - asn1_node node, p, p2; - int len2, len3, result; - int value_size = *len; - unsigned char *value = ivalue; - unsigned type; - - node = asn1_find_node (root, name); - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - type = type_field (node->type); - - if ((type != ASN1_ETYPE_NULL) && - (type != ASN1_ETYPE_CHOICE) && - !(node->type & CONST_DEFAULT) && !(node->type & CONST_ASSIGN) && - (node->value == NULL)) - return ASN1_VALUE_NOT_FOUND; - - if (etype) - *etype = type; - switch (type) - { - case ASN1_ETYPE_NULL: - PUT_STR_VALUE (value, value_size, "NULL"); - break; - case ASN1_ETYPE_BOOLEAN: - if ((node->type & CONST_DEFAULT) && (node->value == NULL)) - { - p = node->down; - while (type_field (p->type) != ASN1_ETYPE_DEFAULT) - p = p->right; - if (p->type & CONST_TRUE) - { - PUT_STR_VALUE (value, value_size, "TRUE"); - } - else - { - PUT_STR_VALUE (value, value_size, "FALSE"); - } - } - else if (node->value[0] == 'T') - { - PUT_STR_VALUE (value, value_size, "TRUE"); - } - else - { - PUT_STR_VALUE (value, value_size, "FALSE"); - } - break; - case ASN1_ETYPE_INTEGER: - case ASN1_ETYPE_ENUMERATED: - if ((node->type & CONST_DEFAULT) && (node->value == NULL)) - { - p = node->down; - while (type_field (p->type) != ASN1_ETYPE_DEFAULT) - p = p->right; - if ((isdigit (p->value[0])) || (p->value[0] == '-') - || (p->value[0] == '+')) - { - result = _asn1_convert_integer - (p->value, value, value_size, len); - if (result != ASN1_SUCCESS) - return result; - } - else - { /* is an identifier like v1 */ - p2 = node->down; - while (p2) - { - if (type_field (p2->type) == ASN1_ETYPE_CONSTANT) - { - if (!_asn1_strcmp (p2->name, p->value)) - { - result = _asn1_convert_integer - (p2->value, value, value_size, - len); - if (result != ASN1_SUCCESS) - return result; - break; - } - } - p2 = p2->right; - } - } - } - else - { - len2 = -1; - result = asn1_get_octet_der - (node->value, node->value_len, &len2, value, value_size, - len); - if (result != ASN1_SUCCESS) - return result; - } - break; - case ASN1_ETYPE_OBJECT_ID: - if (node->type & CONST_ASSIGN) - { - *len = 0; - if (value) - value[0] = 0; - p = node->down; - while (p) - { - if (type_field (p->type) == ASN1_ETYPE_CONSTANT) - { - ADD_STR_VALUE (value, value_size, p->value); - if (p->right) - { - ADD_STR_VALUE (value, value_size, "."); - } - } - p = p->right; - } - (*len)++; - } - else if ((node->type & CONST_DEFAULT) && (node->value == NULL)) - { - p = node->down; - while (type_field (p->type) != ASN1_ETYPE_DEFAULT) - p = p->right; - PUT_STR_VALUE (value, value_size, p->value); - } - else - { - PUT_STR_VALUE (value, value_size, node->value); - } - break; - case ASN1_ETYPE_GENERALIZED_TIME: - case ASN1_ETYPE_UTC_TIME: - PUT_AS_STR_VALUE (value, value_size, node->value, node->value_len); - break; - case ASN1_ETYPE_OCTET_STRING: - case ASN1_ETYPE_GENERALSTRING: - case ASN1_ETYPE_NUMERIC_STRING: - case ASN1_ETYPE_IA5_STRING: - case ASN1_ETYPE_TELETEX_STRING: - case ASN1_ETYPE_PRINTABLE_STRING: - case ASN1_ETYPE_UNIVERSAL_STRING: - case ASN1_ETYPE_BMP_STRING: - case ASN1_ETYPE_UTF8_STRING: - case ASN1_ETYPE_VISIBLE_STRING: - len2 = -1; - result = asn1_get_octet_der - (node->value, node->value_len, &len2, value, value_size, - len); - if (result != ASN1_SUCCESS) - return result; - break; - case ASN1_ETYPE_BIT_STRING: - len2 = -1; - result = asn1_get_bit_der - (node->value, node->value_len, &len2, value, value_size, - len); - if (result != ASN1_SUCCESS) - return result; - break; - case ASN1_ETYPE_CHOICE: - PUT_STR_VALUE (value, value_size, node->down->name); - break; - case ASN1_ETYPE_ANY: - len3 = -1; - len2 = asn1_get_length_der (node->value, node->value_len, &len3); - if (len2 < 0) - return ASN1_DER_ERROR; - PUT_VALUE (value, value_size, node->value + len3, len2); - break; - default: - return ASN1_ELEMENT_NOT_FOUND; - break; - } - return ASN1_SUCCESS; -} - - -/** - * asn1_read_tag: - * @root: pointer to a structure - * @name: the name of the element inside a structure. - * @tagValue: variable that will contain the TAG value. - * @classValue: variable that will specify the TAG type. - * - * Returns the TAG and the CLASS of one element inside a structure. - * CLASS can have one of these constants: %ASN1_CLASS_APPLICATION, - * %ASN1_CLASS_UNIVERSAL, %ASN1_CLASS_PRIVATE or - * %ASN1_CLASS_CONTEXT_SPECIFIC. - * - * Returns: %ASN1_SUCCESS if successful, %ASN1_ELEMENT_NOT_FOUND if - * @name is not a valid element. - **/ -int -asn1_read_tag (asn1_node root, const char *name, int *tagValue, - int *classValue) -{ - asn1_node node, p, pTag; - - node = asn1_find_node (root, name); - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - p = node->down; - - /* pTag will points to the IMPLICIT TAG */ - pTag = NULL; - if (node->type & CONST_TAG) - { - while (p) - { - if (type_field (p->type) == ASN1_ETYPE_TAG) - { - if ((p->type & CONST_IMPLICIT) && (pTag == NULL)) - pTag = p; - else if (p->type & CONST_EXPLICIT) - pTag = NULL; - } - p = p->right; - } - } - - if (pTag) - { - *tagValue = _asn1_strtoul (pTag->value, NULL, 10); - - if (pTag->type & CONST_APPLICATION) - *classValue = ASN1_CLASS_APPLICATION; - else if (pTag->type & CONST_UNIVERSAL) - *classValue = ASN1_CLASS_UNIVERSAL; - else if (pTag->type & CONST_PRIVATE) - *classValue = ASN1_CLASS_PRIVATE; - else - *classValue = ASN1_CLASS_CONTEXT_SPECIFIC; - } - else - { - unsigned type = type_field (node->type); - *classValue = ASN1_CLASS_UNIVERSAL; - - switch (type) - { - CASE_HANDLED_ETYPES: - *tagValue = _asn1_tags[type].tag; - break; - case ASN1_ETYPE_TAG: - case ASN1_ETYPE_CHOICE: - case ASN1_ETYPE_ANY: - *tagValue = -1; - break; - default: - break; - } - } - - return ASN1_SUCCESS; -} - -/** - * asn1_read_node_value: - * @node: pointer to a node. - * @data: a point to a asn1_data_node_st - * - * Returns the value a data node inside a asn1_node structure. - * The data returned should be handled as constant values. - * - * Returns: %ASN1_SUCCESS if the node exists. - **/ -int -asn1_read_node_value (asn1_node node, asn1_data_node_st * data) -{ - data->name = node->name; - data->value = node->value; - data->value_len = node->value_len; - data->type = type_field (node->type); - - return ASN1_SUCCESS; -} diff --git a/lib/minitasn1/element.h b/lib/minitasn1/element.h deleted file mode 100644 index 4e45367415..0000000000 --- a/lib/minitasn1/element.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2000-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - -#ifndef _ELEMENT_H -#define _ELEMENT_H - - -struct node_tail_cache_st -{ - asn1_node head; /* the first element of the sequence */ - asn1_node tail; -}; - -int _asn1_append_sequence_set (asn1_node node, struct node_tail_cache_st *pcached); - -int _asn1_convert_integer (const unsigned char *value, - unsigned char *value_out, - int value_out_size, int *len); - -void _asn1_hierarchical_name (asn1_node node, char *name, int name_size); - -#endif diff --git a/lib/minitasn1/errors.c b/lib/minitasn1/errors.c deleted file mode 100644 index fef45ae742..0000000000 --- a/lib/minitasn1/errors.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2002-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - -#include -#ifdef STDC_HEADERS -#include -#endif - -#define LIBTASN1_ERROR_ENTRY(name) { #name, name } - -struct libtasn1_error_entry -{ - const char *name; - int number; -}; -typedef struct libtasn1_error_entry libtasn1_error_entry; - -static const libtasn1_error_entry error_algorithms[] = { - LIBTASN1_ERROR_ENTRY (ASN1_SUCCESS), - LIBTASN1_ERROR_ENTRY (ASN1_FILE_NOT_FOUND), - LIBTASN1_ERROR_ENTRY (ASN1_ELEMENT_NOT_FOUND), - LIBTASN1_ERROR_ENTRY (ASN1_IDENTIFIER_NOT_FOUND), - LIBTASN1_ERROR_ENTRY (ASN1_DER_ERROR), - LIBTASN1_ERROR_ENTRY (ASN1_VALUE_NOT_FOUND), - LIBTASN1_ERROR_ENTRY (ASN1_GENERIC_ERROR), - LIBTASN1_ERROR_ENTRY (ASN1_VALUE_NOT_VALID), - LIBTASN1_ERROR_ENTRY (ASN1_TAG_ERROR), - LIBTASN1_ERROR_ENTRY (ASN1_TAG_IMPLICIT), - LIBTASN1_ERROR_ENTRY (ASN1_ERROR_TYPE_ANY), - LIBTASN1_ERROR_ENTRY (ASN1_SYNTAX_ERROR), - LIBTASN1_ERROR_ENTRY (ASN1_MEM_ERROR), - LIBTASN1_ERROR_ENTRY (ASN1_MEM_ALLOC_ERROR), - LIBTASN1_ERROR_ENTRY (ASN1_DER_OVERFLOW), - LIBTASN1_ERROR_ENTRY (ASN1_NAME_TOO_LONG), - LIBTASN1_ERROR_ENTRY (ASN1_ARRAY_ERROR), - LIBTASN1_ERROR_ENTRY (ASN1_ELEMENT_NOT_EMPTY), - LIBTASN1_ERROR_ENTRY (ASN1_TIME_ENCODING_ERROR), - {0, 0} -}; - -/** - * asn1_perror: - * @error: is an error returned by a libtasn1 function. - * - * Prints a string to stderr with a description of an error. This - * function is like perror(). The only difference is that it accepts - * an error returned by a libtasn1 function. - * - * Since: 1.6 - **/ -void -asn1_perror (int error) -{ - const char *str = asn1_strerror (error); - fprintf (stderr, "LIBTASN1 ERROR: %s\n", str ? str : "(null)"); -} - -/** - * asn1_strerror: - * @error: is an error returned by a libtasn1 function. - * - * Returns a string with a description of an error. This function is - * similar to strerror. The only difference is that it accepts an - * error (number) returned by a libtasn1 function. - * - * Returns: Pointer to static zero-terminated string describing error - * code. - * - * Since: 1.6 - **/ -const char * -asn1_strerror (int error) -{ - const libtasn1_error_entry *p; - - for (p = error_algorithms; p->name != NULL; p++) - if (p->number == error) - return p->name + sizeof ("ASN1_") - 1; - - return NULL; -} diff --git a/lib/minitasn1/gstr.c b/lib/minitasn1/gstr.c deleted file mode 100644 index e91a3a151c..0000000000 --- a/lib/minitasn1/gstr.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2002-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - -#include -#include "gstr.h" - -/* These function are like strcat, strcpy. They only - * do bounds checking (they shouldn't cause buffer overruns), - * and they always produce null terminated strings. - * - * They should be used only with null terminated strings. - */ -void -_asn1_str_cat (char *dest, size_t dest_tot_size, const char *src) -{ - size_t str_size = strlen (src); - size_t dest_size = strlen (dest); - - if (dest_tot_size - dest_size > str_size) - { - strcat (dest, src); - } - else - { - if (dest_tot_size - dest_size > 0) - { - strncat (dest, src, (dest_tot_size - dest_size) - 1); - dest[dest_tot_size - 1] = 0; - } - } -} - -/* Returns the bytes copied (not including the null terminator) */ -unsigned int -_asn1_str_cpy (char *dest, size_t dest_tot_size, const char *src) -{ - size_t str_size = strlen (src); - - if (dest_tot_size > str_size) - { - strcpy (dest, src); - return str_size; - } - else - { - if (dest_tot_size > 0) - { - str_size = dest_tot_size - 1; - memcpy (dest, src, str_size); - dest[str_size] = 0; - return str_size; - } - else - return 0; - } -} diff --git a/lib/minitasn1/gstr.h b/lib/minitasn1/gstr.h deleted file mode 100644 index 00c335ca93..0000000000 --- a/lib/minitasn1/gstr.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2002-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - -unsigned int _asn1_str_cpy (char *dest, size_t dest_tot_size, - const char *src); -void _asn1_str_cat (char *dest, size_t dest_tot_size, const char *src); - -#define Estrcpy(x,y) _asn1_str_cpy(x,ASN1_MAX_ERROR_DESCRIPTION_SIZE,y) -#define Estrcat(x,y) _asn1_str_cat(x,ASN1_MAX_ERROR_DESCRIPTION_SIZE,y) - -inline static -void safe_memset(void *data, int c, size_t size) -{ - volatile unsigned volatile_zero = 0; - volatile char *vdata = (volatile char*)data; - - /* This is based on a nice trick for safe memset, - * sent by David Jacobson in the openssl-dev mailing list. - */ - - if (size > 0) do { - memset(data, c, size); - } while(vdata[volatile_zero] != c); -} diff --git a/lib/minitasn1/int.h b/lib/minitasn1/int.h deleted file mode 100644 index 7d2eea379c..0000000000 --- a/lib/minitasn1/int.h +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright (C) 2002-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - -#ifndef INT_H -#define INT_H - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#include - -#define ASN1_SMALL_VALUE_SIZE 16 - -/* This structure is also in libtasn1.h, but then contains less - fields. You cannot make any modifications to these first fields - without breaking ABI. */ -struct asn1_node_st -{ - /* public fields: */ - char name[ASN1_MAX_NAME_SIZE + 1]; /* Node name */ - unsigned int name_hash; - unsigned int type; /* Node type */ - unsigned char *value; /* Node value */ - int value_len; - asn1_node down; /* Pointer to the son node */ - asn1_node right; /* Pointer to the brother node */ - asn1_node left; /* Pointer to the next list element */ - /* private fields: */ - unsigned char small_value[ASN1_SMALL_VALUE_SIZE]; /* For small values */ - - /* values used during decoding/coding */ - int tmp_ival; - unsigned start; /* the start of the DER sequence - if decoded */ - unsigned end; /* the end of the DER sequence - if decoded */ -}; - -typedef struct tag_and_class_st -{ - unsigned tag; - unsigned class; - const char *desc; -} tag_and_class_st; - -/* the types that are handled in _asn1_tags */ -#define CASE_HANDLED_ETYPES \ - case ASN1_ETYPE_NULL: \ - case ASN1_ETYPE_BOOLEAN: \ - case ASN1_ETYPE_INTEGER: \ - case ASN1_ETYPE_ENUMERATED: \ - case ASN1_ETYPE_OBJECT_ID: \ - case ASN1_ETYPE_OCTET_STRING: \ - case ASN1_ETYPE_GENERALSTRING: \ - case ASN1_ETYPE_NUMERIC_STRING: \ - case ASN1_ETYPE_IA5_STRING: \ - case ASN1_ETYPE_TELETEX_STRING: \ - case ASN1_ETYPE_PRINTABLE_STRING: \ - case ASN1_ETYPE_UNIVERSAL_STRING: \ - case ASN1_ETYPE_BMP_STRING: \ - case ASN1_ETYPE_UTF8_STRING: \ - case ASN1_ETYPE_VISIBLE_STRING: \ - case ASN1_ETYPE_BIT_STRING: \ - case ASN1_ETYPE_SEQUENCE: \ - case ASN1_ETYPE_SEQUENCE_OF: \ - case ASN1_ETYPE_SET: \ - case ASN1_ETYPE_UTC_TIME: \ - case ASN1_ETYPE_GENERALIZED_TIME: \ - case ASN1_ETYPE_SET_OF - -#define ETYPE_TAG(etype) (_asn1_tags[etype].tag) -#define ETYPE_CLASS(etype) (_asn1_tags[etype].class) -#define ETYPE_OK(etype) (((etype) != ASN1_ETYPE_INVALID && \ - (etype) <= _asn1_tags_size && \ - _asn1_tags[(etype)].desc != NULL)?1:0) - -#define ETYPE_IS_STRING(etype) ((etype == ASN1_ETYPE_GENERALSTRING || \ - etype == ASN1_ETYPE_NUMERIC_STRING || etype == ASN1_ETYPE_IA5_STRING || \ - etype == ASN1_ETYPE_TELETEX_STRING || etype == ASN1_ETYPE_PRINTABLE_STRING || \ - etype == ASN1_ETYPE_UNIVERSAL_STRING || etype == ASN1_ETYPE_BMP_STRING || \ - etype == ASN1_ETYPE_UTF8_STRING || etype == ASN1_ETYPE_VISIBLE_STRING || \ - etype == ASN1_ETYPE_OCTET_STRING)?1:0) - -extern unsigned int _asn1_tags_size; -extern const tag_and_class_st _asn1_tags[]; - -#define _asn1_strlen(s) strlen((const char *) s) -#define _asn1_strtol(n,e,b) strtol((const char *) n, e, b) -#define _asn1_strtoul(n,e,b) strtoul((const char *) n, e, b) -#define _asn1_strcmp(a,b) strcmp((const char *)a, (const char *)b) -#define _asn1_strcpy(a,b) strcpy((char *)a, (const char *)b) -#define _asn1_strcat(a,b) strcat((char *)a, (const char *)b) - -#if SIZEOF_UNSIGNED_LONG_INT == 8 -# define _asn1_strtou64(n,e,b) strtoul((const char *) n, e, b) -#else -# define _asn1_strtou64(n,e,b) strtoull((const char *) n, e, b) -#endif - -#define MAX_LOG_SIZE 1024 /* maximum number of characters of a log message */ - -/* Define used for visiting trees. */ -#define UP 1 -#define RIGHT 2 -#define DOWN 3 - -/***********************************************************************/ -/* List of constants to better specify the type of typedef asn1_node_st. */ -/***********************************************************************/ -/* Used with TYPE_TAG */ -#define CONST_UNIVERSAL (1<<8) -#define CONST_PRIVATE (1<<9) -#define CONST_APPLICATION (1<<10) -#define CONST_EXPLICIT (1<<11) -#define CONST_IMPLICIT (1<<12) - -#define CONST_TAG (1<<13) /* Used in ASN.1 assignement */ -#define CONST_OPTION (1<<14) -#define CONST_DEFAULT (1<<15) -#define CONST_TRUE (1<<16) -#define CONST_FALSE (1<<17) - -#define CONST_LIST (1<<18) /* Used with TYPE_INTEGER and TYPE_BIT_STRING */ -#define CONST_MIN_MAX (1<<19) - -#define CONST_1_PARAM (1<<20) - -#define CONST_SIZE (1<<21) - -#define CONST_DEFINED_BY (1<<22) - -/* Those two are deprecated and used for backwards compatibility */ -#define CONST_GENERALIZED (1<<23) -#define CONST_UTC (1<<24) - -/* #define CONST_IMPORTS (1<<25) */ - -#define CONST_NOT_USED (1<<26) -#define CONST_SET (1<<27) -#define CONST_ASSIGN (1<<28) - -#define CONST_DOWN (1<<29) -#define CONST_RIGHT (1<<30) - - -#define ASN1_ETYPE_TIME 17 -/****************************************/ -/* Returns the first 8 bits. */ -/* Used with the field type of asn1_node_st */ -/****************************************/ -inline static unsigned int -type_field (unsigned int ntype) -{ - return (ntype & 0xff); -} - -/* To convert old types from a static structure */ -inline static unsigned int -convert_old_type (unsigned int ntype) -{ - unsigned int type = ntype & 0xff; - if (type == ASN1_ETYPE_TIME) - { - if (ntype & CONST_UTC) - type = ASN1_ETYPE_UTC_TIME; - else - type = ASN1_ETYPE_GENERALIZED_TIME; - - ntype &= ~(CONST_UTC | CONST_GENERALIZED); - ntype &= 0xffffff00; - ntype |= type; - - return ntype; - } - else - return ntype; -} - -static inline -void *_asn1_realloc(void *ptr, size_t size) -{ - void *ret; - - if (size == 0) - return ptr; - - ret = realloc(ptr, size); - if (ret == NULL) - { - free(ptr); - } - return ret; -} - -#endif /* INT_H */ diff --git a/lib/minitasn1/libtasn1.h b/lib/minitasn1/libtasn1.h deleted file mode 100644 index 0d6203d273..0000000000 --- a/lib/minitasn1/libtasn1.h +++ /dev/null @@ -1,403 +0,0 @@ -/* - * Copyright (C) 2002-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * LIBTASN1 is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * LIBTASN1 is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with LIBTASN1; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - * - */ - -#ifndef LIBTASN1_H -#define LIBTASN1_H - -#ifndef ASN1_API -#if defined ASN1_BUILDING && defined HAVE_VISIBILITY && HAVE_VISIBILITY -#define ASN1_API __attribute__((__visibility__("default"))) -#elif defined ASN1_BUILDING && defined _MSC_VER && ! defined ASN1_STATIC -#define ASN1_API __declspec(dllexport) -#elif defined _MSC_VER && ! defined ASN1_STATIC -#define ASN1_API __declspec(dllimport) -#else -#define ASN1_API -#endif -#endif - -#include -#include -#include /* for FILE* */ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#define ASN1_VERSION "4.10" - -#if defined(__GNUC__) && !defined(ASN1_INTERNAL_BUILD) -# define _ASN1_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) -# if _ASN1_GCC_VERSION >= 30100 -# define _ASN1_GCC_ATTR_DEPRECATED __attribute__ ((__deprecated__)) -# endif -#endif - -#ifndef _ASN1_GCC_ATTR_DEPRECATED -#define _ASN1_GCC_ATTR_DEPRECATED -#endif - - /*****************************************/ - /* Errors returned by libtasn1 functions */ - /*****************************************/ -#define ASN1_SUCCESS 0 -#define ASN1_FILE_NOT_FOUND 1 -#define ASN1_ELEMENT_NOT_FOUND 2 -#define ASN1_IDENTIFIER_NOT_FOUND 3 -#define ASN1_DER_ERROR 4 -#define ASN1_VALUE_NOT_FOUND 5 -#define ASN1_GENERIC_ERROR 6 -#define ASN1_VALUE_NOT_VALID 7 -#define ASN1_TAG_ERROR 8 -#define ASN1_TAG_IMPLICIT 9 -#define ASN1_ERROR_TYPE_ANY 10 -#define ASN1_SYNTAX_ERROR 11 -#define ASN1_MEM_ERROR 12 -#define ASN1_MEM_ALLOC_ERROR 13 -#define ASN1_DER_OVERFLOW 14 -#define ASN1_NAME_TOO_LONG 15 -#define ASN1_ARRAY_ERROR 16 -#define ASN1_ELEMENT_NOT_EMPTY 17 -#define ASN1_TIME_ENCODING_ERROR 18 - - /*************************************/ - /* Constants used in asn1_visit_tree */ - /*************************************/ -#define ASN1_PRINT_NAME 1 -#define ASN1_PRINT_NAME_TYPE 2 -#define ASN1_PRINT_NAME_TYPE_VALUE 3 -#define ASN1_PRINT_ALL 4 - - /*****************************************/ - /* Constants returned by asn1_read_tag */ - /*****************************************/ -#define ASN1_CLASS_UNIVERSAL 0x00 /* old: 1 */ -#define ASN1_CLASS_APPLICATION 0x40 /* old: 2 */ -#define ASN1_CLASS_CONTEXT_SPECIFIC 0x80 /* old: 3 */ -#define ASN1_CLASS_PRIVATE 0xC0 /* old: 4 */ -#define ASN1_CLASS_STRUCTURED 0x20 - - /*****************************************/ - /* Constants returned by asn1_read_tag */ - /*****************************************/ -#define ASN1_TAG_BOOLEAN 0x01 -#define ASN1_TAG_INTEGER 0x02 -#define ASN1_TAG_SEQUENCE 0x10 -#define ASN1_TAG_SET 0x11 -#define ASN1_TAG_OCTET_STRING 0x04 -#define ASN1_TAG_BIT_STRING 0x03 -#define ASN1_TAG_UTCTime 0x17 -#define ASN1_TAG_GENERALIZEDTime 0x18 -#define ASN1_TAG_OBJECT_ID 0x06 -#define ASN1_TAG_ENUMERATED 0x0A -#define ASN1_TAG_NULL 0x05 -#define ASN1_TAG_GENERALSTRING 0x1B -#define ASN1_TAG_NUMERIC_STRING 0x12 -#define ASN1_TAG_IA5_STRING 0x16 -#define ASN1_TAG_TELETEX_STRING 0x14 -#define ASN1_TAG_PRINTABLE_STRING 0x13 -#define ASN1_TAG_UNIVERSAL_STRING 0x1C -#define ASN1_TAG_BMP_STRING 0x1E -#define ASN1_TAG_UTF8_STRING 0x0C -#define ASN1_TAG_VISIBLE_STRING 0x1A - - /******************************************************/ - /* Structure definition used for the node of the tree */ - /* that represent an ASN.1 DEFINITION. */ - /******************************************************/ - - typedef struct asn1_node_st asn1_node_st; - - typedef asn1_node_st *asn1_node; - - /* maximum number of characters of a name */ - /* inside a file with ASN1 definitons */ -#define ASN1_MAX_NAME_SIZE 64 - - - /*****************************************/ - /* For the on-disk format of ASN.1 trees */ - /*****************************************/ - struct asn1_static_node_st - { - const char *name; /* Node name */ - unsigned int type; /* Node type */ - const void *value; /* Node value */ - }; - typedef struct asn1_static_node_st asn1_static_node; - -/* List of constants for field type of node_asn */ -#define ASN1_ETYPE_INVALID 0 -#define ASN1_ETYPE_CONSTANT 1 -#define ASN1_ETYPE_IDENTIFIER 2 -#define ASN1_ETYPE_INTEGER 3 -#define ASN1_ETYPE_BOOLEAN 4 -#define ASN1_ETYPE_SEQUENCE 5 -#define ASN1_ETYPE_BIT_STRING 6 -#define ASN1_ETYPE_OCTET_STRING 7 -#define ASN1_ETYPE_TAG 8 -#define ASN1_ETYPE_DEFAULT 9 -#define ASN1_ETYPE_SIZE 10 -#define ASN1_ETYPE_SEQUENCE_OF 11 -#define ASN1_ETYPE_OBJECT_ID 12 -#define ASN1_ETYPE_ANY 13 -#define ASN1_ETYPE_SET 14 -#define ASN1_ETYPE_SET_OF 15 -#define ASN1_ETYPE_DEFINITIONS 16 -#define ASN1_ETYPE_CHOICE 18 -#define ASN1_ETYPE_IMPORTS 19 -#define ASN1_ETYPE_NULL 20 -#define ASN1_ETYPE_ENUMERATED 21 -#define ASN1_ETYPE_GENERALSTRING 27 -#define ASN1_ETYPE_NUMERIC_STRING 28 -#define ASN1_ETYPE_IA5_STRING 29 -#define ASN1_ETYPE_TELETEX_STRING 30 -#define ASN1_ETYPE_PRINTABLE_STRING 31 -#define ASN1_ETYPE_UNIVERSAL_STRING 32 -#define ASN1_ETYPE_BMP_STRING 33 -#define ASN1_ETYPE_UTF8_STRING 34 -#define ASN1_ETYPE_VISIBLE_STRING 35 -#define ASN1_ETYPE_UTC_TIME 36 -#define ASN1_ETYPE_GENERALIZED_TIME 37 - -/* Flags used by asn1_delete_structure2() */ - -/* makes sure the values are zeroized prior to deinitialization */ -#define ASN1_DELETE_FLAG_ZEROIZE 1 - -/* Flags used by asn1_der_decoding2(). */ - -/* This flag would allow arbitrary data past the DER data */ -#define ASN1_DECODE_FLAG_ALLOW_PADDING 1 -/* This flag would ensure that no BER decoding takes place */ -#define ASN1_DECODE_FLAG_STRICT_DER (1<<1) - - - struct asn1_data_node_st - { - const char *name; /* Node name */ - const void *value; /* Node value */ - unsigned int value_len; /* Node value size */ - unsigned int type; /* Node value type (ASN1_ETYPE_*) */ - }; - typedef struct asn1_data_node_st asn1_data_node_st; - - /***********************************/ - /* Fixed constants */ - /***********************************/ - - - /* maximum number of characters */ - /* of a description message */ - /* (null character included) */ -#define ASN1_MAX_ERROR_DESCRIPTION_SIZE 128 - - /***********************************/ - /* Functions definitions */ - /***********************************/ - - extern ASN1_API int - asn1_parser2tree (const char *file, - asn1_node * definitions, char *error_desc); - - extern ASN1_API int - asn1_parser2array (const char *inputFileName, - const char *outputFileName, - const char *vectorName, char *error_desc); - - extern ASN1_API int - asn1_array2tree (const asn1_static_node * array, - asn1_node * definitions, char *errorDescription); - - extern ASN1_API void - asn1_print_structure (FILE * out, asn1_node structure, - const char *name, int mode); - - extern ASN1_API int - asn1_create_element (asn1_node definitions, - const char *source_name, asn1_node * element); - - extern ASN1_API int asn1_delete_structure (asn1_node * structure); - - extern ASN1_API int asn1_delete_structure2 (asn1_node * structure, unsigned int flags); - - extern ASN1_API int - asn1_delete_element (asn1_node structure, const char *element_name); - - extern ASN1_API int - asn1_write_value (asn1_node node_root, const char *name, - const void *ivalue, int len); - - extern ASN1_API int - asn1_read_value (asn1_node root, const char *name, - void *ivalue, int *len); - - extern ASN1_API int - asn1_read_value_type (asn1_node root, const char *name, - void *ivalue, int *len, unsigned int *etype); - - extern ASN1_API int - asn1_read_node_value (asn1_node node, asn1_data_node_st * data); - - extern ASN1_API int - asn1_number_of_elements (asn1_node element, const char *name, int *num); - - extern ASN1_API int - asn1_der_coding (asn1_node element, const char *name, - void *ider, int *len, char *ErrorDescription); - - extern ASN1_API int - asn1_der_decoding2 (asn1_node *element, const void *ider, - int *max_ider_len, unsigned int flags, - char *errorDescription); - - extern ASN1_API int - asn1_der_decoding (asn1_node * element, const void *ider, - int len, char *errorDescription); - - /* Do not use. Use asn1_der_decoding() instead. */ - extern ASN1_API int - asn1_der_decoding_element (asn1_node * structure, - const char *elementName, - const void *ider, int len, - char *errorDescription) _ASN1_GCC_ATTR_DEPRECATED; - - extern ASN1_API int - asn1_der_decoding_startEnd (asn1_node element, - const void *ider, int len, - const char *name_element, - int *start, int *end); - - extern ASN1_API int - asn1_expand_any_defined_by (asn1_node definitions, asn1_node * element); - - extern ASN1_API int - asn1_expand_octet_string (asn1_node definitions, - asn1_node * element, - const char *octetName, const char *objectName); - - extern ASN1_API int - asn1_read_tag (asn1_node root, const char *name, - int *tagValue, int *classValue); - - extern ASN1_API const char *asn1_find_structure_from_oid (asn1_node - definitions, - const char - *oidValue); - - extern ASN1_API const char *asn1_check_version (const char *req_version); - - extern ASN1_API const char *asn1_strerror (int error); - - extern ASN1_API void asn1_perror (int error); - -#define ASN1_MAX_TAG_SIZE 4 -#define ASN1_MAX_LENGTH_SIZE 9 -#define ASN1_MAX_TL_SIZE (ASN1_MAX_TAG_SIZE+ASN1_MAX_LENGTH_SIZE) - extern ASN1_API long - asn1_get_length_der (const unsigned char *der, int der_len, int *len); - - extern ASN1_API long - asn1_get_length_ber (const unsigned char *ber, int ber_len, int *len); - - extern ASN1_API void - asn1_length_der (unsigned long int len, unsigned char *der, int *der_len); - - /* Other utility functions. */ - - extern ASN1_API - int asn1_decode_simple_der (unsigned int etype, const unsigned char *der, - unsigned int der_len, - const unsigned char **str, - unsigned int *str_len); - - extern ASN1_API - int asn1_decode_simple_ber (unsigned int etype, const unsigned char *der, - unsigned int der_len, - unsigned char **str, - unsigned int *str_len, - unsigned int *ber_len); - - extern ASN1_API int - asn1_encode_simple_der (unsigned int etype, const unsigned char *str, - unsigned int str_len, unsigned char *tl, - unsigned int *tl_len); - - extern ASN1_API asn1_node - asn1_find_node (asn1_node pointer, const char *name); - - extern ASN1_API int - asn1_copy_node (asn1_node dst, const char *dst_name, - asn1_node src, const char *src_name); - extern ASN1_API asn1_node - asn1_dup_node (asn1_node src, const char *src_name); - - /* Internal and low-level DER utility functions. */ - - extern ASN1_API int - asn1_get_tag_der (const unsigned char *der, int der_len, - unsigned char *cls, int *len, unsigned long *tag); - - extern ASN1_API void - asn1_octet_der (const unsigned char *str, int str_len, - unsigned char *der, int *der_len); - - extern ASN1_API int - asn1_get_octet_der (const unsigned char *der, int der_len, - int *ret_len, unsigned char *str, - int str_size, int *str_len); - - extern ASN1_API void asn1_bit_der (const unsigned char *str, int bit_len, - unsigned char *der, int *der_len); - - extern ASN1_API int - asn1_get_bit_der (const unsigned char *der, int der_len, - int *ret_len, unsigned char *str, - int str_size, int *bit_len); - - extern ASN1_API int - asn1_get_object_id_der (const unsigned char *der, - int der_len, int *ret_len, - char *str, int str_size); - -/* Compatibility types */ - - typedef int asn1_retCode; /* type returned by libtasn1 functions */ - -#define node_asn_struct asn1_node_st -#define node_asn asn1_node_st -#define ASN1_TYPE asn1_node -#define ASN1_TYPE_EMPTY NULL - -#define static_struct_asn asn1_static_node_st -#define ASN1_ARRAY_TYPE asn1_static_node -#define asn1_static_node_t asn1_static_node - -#define node_data_struct asn1_data_node_st -#define ASN1_DATA_NODE asn1_data_node_st - -#ifdef __cplusplus -} -#endif - -#endif /* LIBTASN1_H */ diff --git a/lib/minitasn1/parser_aux.c b/lib/minitasn1/parser_aux.c deleted file mode 100644 index b4a7370b9b..0000000000 --- a/lib/minitasn1/parser_aux.c +++ /dev/null @@ -1,1084 +0,0 @@ -/* - * Copyright (C) 2000-2016 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - -#include -#include -#include "parser_aux.h" -#include "gstr.h" -#include "structure.h" -#include "element.h" - -char _asn1_identifierMissing[ASN1_MAX_NAME_SIZE + 1]; /* identifier name not found */ - -/***********************************************/ -/* Type: list_type */ -/* Description: type used in the list during */ -/* the structure creation. */ -/***********************************************/ -typedef struct list_struct -{ - asn1_node node; - struct list_struct *next; -} list_type; - - -/* Pointer to the first element of the list */ -list_type *firstElement = NULL; - -/******************************************************/ -/* Function : _asn1_add_static_node */ -/* Description: creates a new NODE_ASN element and */ -/* puts it in the list pointed by firstElement. */ -/* Parameters: */ -/* type: type of the new element (see ASN1_ETYPE_ */ -/* and CONST_ constants). */ -/* Return: pointer to the new element. */ -/******************************************************/ -asn1_node -_asn1_add_static_node (unsigned int type) -{ - list_type *listElement; - asn1_node punt; - - punt = calloc (1, sizeof (struct asn1_node_st)); - if (punt == NULL) - return NULL; - - listElement = malloc (sizeof (list_type)); - if (listElement == NULL) - { - free (punt); - return NULL; - } - - listElement->node = punt; - listElement->next = firstElement; - firstElement = listElement; - - punt->type = type; - - return punt; -} - -/** - * asn1_find_node: - * @pointer: NODE_ASN element pointer. - * @name: null terminated string with the element's name to find. - * - * Searches for an element called @name starting from @pointer. The - * name is composed by different identifiers separated by dots. When - * *@pointer has a name, the first identifier must be the name of - * *@pointer, otherwise it must be the name of one child of *@pointer. - * - * Returns: the search result, or %NULL if not found. - **/ -asn1_node -asn1_find_node (asn1_node pointer, const char *name) -{ - asn1_node p; - char *n_end, n[ASN1_MAX_NAME_SIZE + 1]; - const char *n_start; - unsigned int nsize; - unsigned int nhash; - - if (pointer == NULL) - return NULL; - - if (name == NULL) - return NULL; - - p = pointer; - n_start = name; - - if (name[0] == '?' && name[1] == 'C' && p->name[0] == '?') - { /* ?CURRENT */ - n_start = strchr(n_start, '.'); - if (n_start) - n_start++; - } - else if (p->name[0] != 0) - { /* has *pointer got a name ? */ - n_end = strchr (n_start, '.'); /* search the first dot */ - if (n_end) - { - nsize = n_end - n_start; - memcpy (n, n_start, nsize); - n[nsize] = 0; - n_start = n_end; - n_start++; - - nhash = hash_pjw_bare (n, nsize); - } - else - { - nsize = _asn1_str_cpy (n, sizeof (n), n_start); - nhash = hash_pjw_bare (n, nsize); - - n_start = NULL; - } - - while (p) - { - if (nhash == p->name_hash && (!strcmp (p->name, n))) - break; - else - p = p->right; - } /* while */ - - if (p == NULL) - return NULL; - } - else - { /* *pointer doesn't have a name */ - if (n_start[0] == 0) - return p; - } - - while (n_start) - { /* Has the end of NAME been reached? */ - n_end = strchr (n_start, '.'); /* search the next dot */ - if (n_end) - { - nsize = n_end - n_start; - memcpy (n, n_start, nsize); - n[nsize] = 0; - n_start = n_end; - n_start++; - - nhash = hash_pjw_bare (n, nsize); - } - else - { - nsize = _asn1_str_cpy (n, sizeof (n), n_start); - nhash = hash_pjw_bare (n, nsize); - n_start = NULL; - } - - if (p->down == NULL) - return NULL; - - p = p->down; - if (p == NULL) - return NULL; - - /* The identifier "?LAST" indicates the last element - in the right chain. */ - if (n[0] == '?' && n[1] == 'L') /* ?LAST */ - { - while (p->right) - p = p->right; - } - else - { /* no "?LAST" */ - while (p) - { - if (p->name_hash == nhash && !strcmp (p->name, n)) - break; - else - p = p->right; - } - } - if (p == NULL) - return NULL; - } /* while */ - - return p; -} - - -/******************************************************************/ -/* Function : _asn1_set_value */ -/* Description: sets the field VALUE in a NODE_ASN element. The */ -/* previous value (if exist) will be lost */ -/* Parameters: */ -/* node: element pointer. */ -/* value: pointer to the value that you want to set. */ -/* len: character number of value. */ -/* Return: pointer to the NODE_ASN element. */ -/******************************************************************/ -asn1_node -_asn1_set_value (asn1_node node, const void *value, unsigned int len) -{ - if (node == NULL) - return node; - if (node->value) - { - if (node->value != node->small_value) - free (node->value); - node->value = NULL; - node->value_len = 0; - } - - if (!len) - return node; - - if (len < sizeof (node->small_value)) - { - node->value = node->small_value; - } - else - { - node->value = malloc (len); - if (node->value == NULL) - return NULL; - } - node->value_len = len; - - memcpy (node->value, value, len); - return node; -} - -/******************************************************************/ -/* Function : _asn1_set_value_lv */ -/* Description: sets the field VALUE in a NODE_ASN element. The */ -/* previous value (if exist) will be lost. The value */ -/* given is stored as an length-value format (LV */ -/* Parameters: */ -/* node: element pointer. */ -/* value: pointer to the value that you want to set. */ -/* len: character number of value. */ -/* Return: pointer to the NODE_ASN element. */ -/******************************************************************/ -asn1_node -_asn1_set_value_lv (asn1_node node, const void *value, unsigned int len) -{ - int len2; - void *temp; - - if (node == NULL) - return node; - - asn1_length_der (len, NULL, &len2); - temp = malloc (len + len2); - if (temp == NULL) - return NULL; - - asn1_octet_der (value, len, temp, &len2); - return _asn1_set_value_m (node, temp, len2); -} - -/* the same as _asn1_set_value except that it sets an already malloc'ed - * value. - */ -asn1_node -_asn1_set_value_m (asn1_node node, void *value, unsigned int len) -{ - if (node == NULL) - return node; - - if (node->value) - { - if (node->value != node->small_value) - free (node->value); - node->value = NULL; - node->value_len = 0; - } - - if (!len) - return node; - - node->value = value; - node->value_len = len; - - return node; -} - -/******************************************************************/ -/* Function : _asn1_append_value */ -/* Description: appends to the field VALUE in a NODE_ASN element. */ -/* */ -/* Parameters: */ -/* node: element pointer. */ -/* value: pointer to the value that you want to be appended. */ -/* len: character number of value. */ -/* Return: pointer to the NODE_ASN element. */ -/******************************************************************/ -asn1_node -_asn1_append_value (asn1_node node, const void *value, unsigned int len) -{ - if (node == NULL) - return node; - - if (node->value == NULL) - return _asn1_set_value (node, value, len); - - if (len == 0) - return node; - - if (node->value == node->small_value) - { - /* value is in node */ - int prev_len = node->value_len; - node->value_len += len; - node->value = malloc (node->value_len); - if (node->value == NULL) - { - node->value_len = 0; - return NULL; - } - - if (prev_len > 0) - memcpy (node->value, node->small_value, prev_len); - - memcpy (&node->value[prev_len], value, len); - - return node; - } - else /* if (node->value != NULL && node->value != node->small_value) */ - { - /* value is allocated */ - int prev_len = node->value_len; - node->value_len += len; - - node->value = _asn1_realloc (node->value, node->value_len); - if (node->value == NULL) - { - node->value_len = 0; - return NULL; - } - - memcpy (&node->value[prev_len], value, len); - - return node; - } -} - -/******************************************************************/ -/* Function : _asn1_set_name */ -/* Description: sets the field NAME in a NODE_ASN element. The */ -/* previous value (if exist) will be lost */ -/* Parameters: */ -/* node: element pointer. */ -/* name: a null terminated string with the name that you want */ -/* to set. */ -/* Return: pointer to the NODE_ASN element. */ -/******************************************************************/ -asn1_node -_asn1_set_name (asn1_node node, const char *name) -{ - unsigned int nsize; - - if (node == NULL) - return node; - - if (name == NULL) - { - node->name[0] = 0; - node->name_hash = hash_pjw_bare (node->name, 0); - return node; - } - - nsize = _asn1_str_cpy (node->name, sizeof (node->name), name); - node->name_hash = hash_pjw_bare (node->name, nsize); - - return node; -} - -/******************************************************************/ -/* Function : _asn1_cpy_name */ -/* Description: copies the field NAME in a NODE_ASN element. */ -/* Parameters: */ -/* dst: a dest element pointer. */ -/* src: a source element pointer. */ -/* Return: pointer to the NODE_ASN element. */ -/******************************************************************/ -asn1_node -_asn1_cpy_name (asn1_node dst, asn1_node src) -{ - if (dst == NULL) - return dst; - - if (src == NULL) - { - dst->name[0] = 0; - dst->name_hash = hash_pjw_bare (dst->name, 0); - return dst; - } - - _asn1_str_cpy (dst->name, sizeof (dst->name), src->name); - dst->name_hash = src->name_hash; - - return dst; -} - -/******************************************************************/ -/* Function : _asn1_set_right */ -/* Description: sets the field RIGHT in a NODE_ASN element. */ -/* Parameters: */ -/* node: element pointer. */ -/* right: pointer to a NODE_ASN element that you want be pointed*/ -/* by NODE. */ -/* Return: pointer to *NODE. */ -/******************************************************************/ -asn1_node -_asn1_set_right (asn1_node node, asn1_node right) -{ - if (node == NULL) - return node; - node->right = right; - if (right) - right->left = node; - return node; -} - - -/******************************************************************/ -/* Function : _asn1_get_last_right */ -/* Description: return the last element along the right chain. */ -/* Parameters: */ -/* node: starting element pointer. */ -/* Return: pointer to the last element along the right chain. */ -/******************************************************************/ -asn1_node -_asn1_get_last_right (asn1_node node) -{ - asn1_node p; - - if (node == NULL) - return NULL; - p = node; - while (p->right) - p = p->right; - return p; -} - -/******************************************************************/ -/* Function : _asn1_remove_node */ -/* Description: gets free the memory allocated for an NODE_ASN */ -/* element (not the elements pointed by it). */ -/* Parameters: */ -/* node: NODE_ASN element pointer. */ -/* flags: ASN1_DELETE_FLAG_* */ -/******************************************************************/ -void -_asn1_remove_node (asn1_node node, unsigned int flags) -{ - if (node == NULL) - return; - - if (node->value != NULL) - { - if (flags & ASN1_DELETE_FLAG_ZEROIZE) - { - safe_memset(node->value, 0, node->value_len); - } - - if (node->value != node->small_value) - free (node->value); - } - free (node); -} - -/******************************************************************/ -/* Function : _asn1_find_up */ -/* Description: return the father of the NODE_ASN element. */ -/* Parameters: */ -/* node: NODE_ASN element pointer. */ -/* Return: Null if not found. */ -/******************************************************************/ -asn1_node -_asn1_find_up (asn1_node node) -{ - asn1_node p; - - if (node == NULL) - return NULL; - - p = node; - - while ((p->left != NULL) && (p->left->right == p)) - p = p->left; - - return p->left; -} - -/******************************************************************/ -/* Function : _asn1_delete_list */ -/* Description: deletes the list elements (not the elements */ -/* pointed by them). */ -/******************************************************************/ -void -_asn1_delete_list (void) -{ - list_type *listElement; - - while (firstElement) - { - listElement = firstElement; - firstElement = firstElement->next; - free (listElement); - } -} - -/******************************************************************/ -/* Function : _asn1_delete_list_and nodes */ -/* Description: deletes the list elements and the elements */ -/* pointed by them. */ -/******************************************************************/ -void -_asn1_delete_list_and_nodes (void) -{ - list_type *listElement; - - while (firstElement) - { - listElement = firstElement; - firstElement = firstElement->next; - _asn1_remove_node (listElement->node, 0); - free (listElement); - } -} - - -char * -_asn1_ltostr (int64_t v, char str[LTOSTR_MAX_SIZE]) -{ - uint64_t d, r; - char temp[LTOSTR_MAX_SIZE]; - int count, k, start; - uint64_t val; - - if (v < 0) - { - str[0] = '-'; - start = 1; - val = -((uint64_t)v); - } - else - { - val = v; - start = 0; - } - - count = 0; - do - { - d = val / 10; - r = val - d * 10; - temp[start + count] = '0' + (char) r; - count++; - val = d; - } - while (val && ((start+count) < LTOSTR_MAX_SIZE-1)); - - for (k = 0; k < count; k++) - str[k + start] = temp[start + count - k - 1]; - str[count + start] = 0; - return str; -} - - -/******************************************************************/ -/* Function : _asn1_change_integer_value */ -/* Description: converts into DER coding the value assign to an */ -/* INTEGER constant. */ -/* Parameters: */ -/* node: root of an ASN1element. */ -/* Return: */ -/* ASN1_ELEMENT_NOT_FOUND if NODE is NULL, */ -/* otherwise ASN1_SUCCESS */ -/******************************************************************/ -int -_asn1_change_integer_value (asn1_node node) -{ - asn1_node p; - unsigned char val[SIZEOF_UNSIGNED_LONG_INT]; - unsigned char val2[SIZEOF_UNSIGNED_LONG_INT + 1]; - int len; - - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - p = node; - while (p) - { - if ((type_field (p->type) == ASN1_ETYPE_INTEGER) - && (p->type & CONST_ASSIGN)) - { - if (p->value) - { - _asn1_convert_integer (p->value, val, sizeof (val), &len); - asn1_octet_der (val, len, val2, &len); - _asn1_set_value (p, val2, len); - } - } - - if (p->down) - { - p = p->down; - } - else - { - if (p == node) - p = NULL; - else if (p->right) - p = p->right; - else - { - while (1) - { - p = _asn1_find_up (p); - if (p == node) - { - p = NULL; - break; - } - if (p && p->right) - { - p = p->right; - break; - } - } - } - } - } - - return ASN1_SUCCESS; -} - - -/******************************************************************/ -/* Function : _asn1_expand_object_id */ -/* Description: expand the IDs of an OBJECT IDENTIFIER constant. */ -/* Parameters: */ -/* node: root of an ASN1 element. */ -/* Return: */ -/* ASN1_ELEMENT_NOT_FOUND if NODE is NULL, */ -/* otherwise ASN1_SUCCESS */ -/******************************************************************/ -int -_asn1_expand_object_id (asn1_node node) -{ - asn1_node p, p2, p3, p4, p5; - char name_root[ASN1_MAX_NAME_SIZE], name2[2 * ASN1_MAX_NAME_SIZE + 1]; - int move, tlen; - - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - _asn1_str_cpy (name_root, sizeof (name_root), node->name); - - p = node; - move = DOWN; - - while (!((p == node) && (move == UP))) - { - if (move != UP) - { - if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) - && (p->type & CONST_ASSIGN)) - { - p2 = p->down; - if (p2 && (type_field (p2->type) == ASN1_ETYPE_CONSTANT)) - { - if (p2->value && !isdigit (p2->value[0])) - { - _asn1_str_cpy (name2, sizeof (name2), name_root); - _asn1_str_cat (name2, sizeof (name2), "."); - _asn1_str_cat (name2, sizeof (name2), - (char *) p2->value); - p3 = asn1_find_node (node, name2); - if (!p3 - || (type_field (p3->type) != ASN1_ETYPE_OBJECT_ID) - || !(p3->type & CONST_ASSIGN)) - return ASN1_ELEMENT_NOT_FOUND; - _asn1_set_down (p, p2->right); - _asn1_remove_node (p2, 0); - p2 = p; - p4 = p3->down; - while (p4) - { - if (type_field (p4->type) == ASN1_ETYPE_CONSTANT) - { - p5 = - _asn1_add_single_node (ASN1_ETYPE_CONSTANT); - _asn1_set_name (p5, p4->name); - if (p4->value) - { - tlen = _asn1_strlen (p4->value); - if (tlen > 0) - _asn1_set_value (p5, p4->value, tlen + 1); - } - if (p2 == p) - { - _asn1_set_right (p5, p->down); - _asn1_set_down (p, p5); - } - else - { - _asn1_set_right (p5, p2->right); - _asn1_set_right (p2, p5); - } - p2 = p5; - } - p4 = p4->right; - } - move = DOWN; - continue; - } - } - } - move = DOWN; - } - else - move = RIGHT; - - if (move == DOWN) - { - if (p->down) - p = p->down; - else - move = RIGHT; - } - - if (p == node) - { - move = UP; - continue; - } - - if (move == RIGHT) - { - if (p && p->right) - p = p->right; - else - move = UP; - } - if (move == UP) - p = _asn1_find_up (p); - } - - - /*******************************/ - /* expand DEFAULT */ - /*******************************/ - p = node; - move = DOWN; - - while (!((p == node) && (move == UP))) - { - if (move != UP) - { - if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) && - (p->type & CONST_DEFAULT)) - { - p2 = p->down; - if (p2 && (type_field (p2->type) == ASN1_ETYPE_DEFAULT)) - { - _asn1_str_cpy (name2, sizeof (name2), name_root); - _asn1_str_cat (name2, sizeof (name2), "."); - _asn1_str_cat (name2, sizeof (name2), (char *) p2->value); - p3 = asn1_find_node (node, name2); - if (!p3 || (type_field (p3->type) != ASN1_ETYPE_OBJECT_ID) - || !(p3->type & CONST_ASSIGN)) - return ASN1_ELEMENT_NOT_FOUND; - p4 = p3->down; - name2[0] = 0; - while (p4) - { - if (type_field (p4->type) == ASN1_ETYPE_CONSTANT) - { - if (p4->value == NULL) - return ASN1_VALUE_NOT_FOUND; - - if (name2[0]) - _asn1_str_cat (name2, sizeof (name2), "."); - _asn1_str_cat (name2, sizeof (name2), - (char *) p4->value); - } - p4 = p4->right; - } - tlen = strlen (name2); - if (tlen > 0) - _asn1_set_value (p2, name2, tlen + 1); - } - } - move = DOWN; - } - else - move = RIGHT; - - if (move == DOWN) - { - if (p->down) - p = p->down; - else - move = RIGHT; - } - - if (p == node) - { - move = UP; - continue; - } - - if (move == RIGHT) - { - if (p && p->right) - p = p->right; - else - move = UP; - } - if (move == UP) - p = _asn1_find_up (p); - } - - return ASN1_SUCCESS; -} - - -/******************************************************************/ -/* Function : _asn1_type_set_config */ -/* Description: sets the CONST_SET and CONST_NOT_USED properties */ -/* in the fields of the SET elements. */ -/* Parameters: */ -/* node: root of an ASN1 element. */ -/* Return: */ -/* ASN1_ELEMENT_NOT_FOUND if NODE is NULL, */ -/* otherwise ASN1_SUCCESS */ -/******************************************************************/ -int -_asn1_type_set_config (asn1_node node) -{ - asn1_node p, p2; - int move; - - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - p = node; - move = DOWN; - - while (!((p == node) && (move == UP))) - { - if (move != UP) - { - if (type_field (p->type) == ASN1_ETYPE_SET) - { - p2 = p->down; - while (p2) - { - if (type_field (p2->type) != ASN1_ETYPE_TAG) - p2->type |= CONST_SET | CONST_NOT_USED; - p2 = p2->right; - } - } - move = DOWN; - } - else - move = RIGHT; - - if (move == DOWN) - { - if (p->down) - p = p->down; - else - move = RIGHT; - } - - if (p == node) - { - move = UP; - continue; - } - - if (move == RIGHT) - { - if (p && p->right) - p = p->right; - else - move = UP; - } - if (move == UP) - p = _asn1_find_up (p); - } - - return ASN1_SUCCESS; -} - - -/******************************************************************/ -/* Function : _asn1_check_identifier */ -/* Description: checks the definitions of all the identifiers */ -/* and the first element of an OBJECT_ID (e.g. {pkix 0 4}). */ -/* The _asn1_identifierMissing global variable is filled if */ -/* necessary. */ -/* Parameters: */ -/* node: root of an ASN1 element. */ -/* Return: */ -/* ASN1_ELEMENT_NOT_FOUND if NODE is NULL, */ -/* ASN1_IDENTIFIER_NOT_FOUND if an identifier is not defined, */ -/* otherwise ASN1_SUCCESS */ -/******************************************************************/ -int -_asn1_check_identifier (asn1_node node) -{ - asn1_node p, p2; - char name2[ASN1_MAX_NAME_SIZE * 2 + 2]; - - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - p = node; - while (p) - { - if (p->value && type_field (p->type) == ASN1_ETYPE_IDENTIFIER) - { - _asn1_str_cpy (name2, sizeof (name2), node->name); - _asn1_str_cat (name2, sizeof (name2), "."); - _asn1_str_cat (name2, sizeof (name2), (char *) p->value); - p2 = asn1_find_node (node, name2); - if (p2 == NULL) - { - if (p->value) - _asn1_strcpy (_asn1_identifierMissing, p->value); - else - _asn1_strcpy (_asn1_identifierMissing, "(null)"); - return ASN1_IDENTIFIER_NOT_FOUND; - } - } - else if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) && - (p->type & CONST_DEFAULT)) - { - p2 = p->down; - if (p2 && (type_field (p2->type) == ASN1_ETYPE_DEFAULT)) - { - _asn1_str_cpy (name2, sizeof (name2), node->name); - _asn1_str_cat (name2, sizeof (name2), "."); - _asn1_str_cat (name2, sizeof (name2), (char *) p2->value); - _asn1_strcpy (_asn1_identifierMissing, p2->value); - p2 = asn1_find_node (node, name2); - if (!p2 || (type_field (p2->type) != ASN1_ETYPE_OBJECT_ID) || - !(p2->type & CONST_ASSIGN)) - return ASN1_IDENTIFIER_NOT_FOUND; - else - _asn1_identifierMissing[0] = 0; - } - } - else if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) && - (p->type & CONST_ASSIGN)) - { - p2 = p->down; - if (p2 && (type_field (p2->type) == ASN1_ETYPE_CONSTANT)) - { - if (p2->value && !isdigit (p2->value[0])) - { - _asn1_str_cpy (name2, sizeof (name2), node->name); - _asn1_str_cat (name2, sizeof (name2), "."); - _asn1_str_cat (name2, sizeof (name2), (char *) p2->value); - _asn1_strcpy (_asn1_identifierMissing, p2->value); - p2 = asn1_find_node (node, name2); - if (!p2 || (type_field (p2->type) != ASN1_ETYPE_OBJECT_ID) - || !(p2->type & CONST_ASSIGN)) - return ASN1_IDENTIFIER_NOT_FOUND; - else - _asn1_identifierMissing[0] = 0; - } - } - } - - if (p->down) - { - p = p->down; - } - else if (p->right) - p = p->right; - else - { - while (1) - { - p = _asn1_find_up (p); - if (p == node) - { - p = NULL; - break; - } - if (p && p->right) - { - p = p->right; - break; - } - } - } - } - - return ASN1_SUCCESS; -} - - -/******************************************************************/ -/* Function : _asn1_set_default_tag */ -/* Description: sets the default IMPLICIT or EXPLICIT property in */ -/* the tagged elements that don't have this declaration. */ -/* Parameters: */ -/* node: pointer to a DEFINITIONS element. */ -/* Return: */ -/* ASN1_ELEMENT_NOT_FOUND if NODE is NULL or not a pointer to */ -/* a DEFINITIONS element, */ -/* otherwise ASN1_SUCCESS */ -/******************************************************************/ -int -_asn1_set_default_tag (asn1_node node) -{ - asn1_node p; - - if ((node == NULL) || (type_field (node->type) != ASN1_ETYPE_DEFINITIONS)) - return ASN1_ELEMENT_NOT_FOUND; - - p = node; - while (p) - { - if ((type_field (p->type) == ASN1_ETYPE_TAG) && - !(p->type & CONST_EXPLICIT) && !(p->type & CONST_IMPLICIT)) - { - if (node->type & CONST_EXPLICIT) - p->type |= CONST_EXPLICIT; - else - p->type |= CONST_IMPLICIT; - } - - if (p->down) - { - p = p->down; - } - else if (p->right) - p = p->right; - else - { - while (1) - { - p = _asn1_find_up (p); - if (p == node) - { - p = NULL; - break; - } - if (p && p->right) - { - p = p->right; - break; - } - } - } - } - - return ASN1_SUCCESS; -} diff --git a/lib/minitasn1/parser_aux.h b/lib/minitasn1/parser_aux.h deleted file mode 100644 index 9f9183312e..0000000000 --- a/lib/minitasn1/parser_aux.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (C) 2000-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - -#ifndef _PARSER_AUX_H -#define _PARSER_AUX_H - -/***************************************/ -/* Functions used by ASN.1 parser */ -/***************************************/ -asn1_node _asn1_add_static_node (unsigned int type); - -asn1_node -_asn1_set_value (asn1_node node, const void *value, unsigned int len); - -asn1_node _asn1_set_value_m (asn1_node node, void *value, unsigned int len); - -asn1_node -_asn1_set_value_lv (asn1_node node, const void *value, unsigned int len); - -asn1_node -_asn1_append_value (asn1_node node, const void *value, unsigned int len); - -asn1_node _asn1_set_name (asn1_node node, const char *name); - -asn1_node _asn1_cpy_name (asn1_node dst, asn1_node src); - -asn1_node _asn1_set_right (asn1_node node, asn1_node right); - -asn1_node _asn1_get_last_right (asn1_node node); - -void _asn1_remove_node (asn1_node node, unsigned int flags); - -void _asn1_delete_list (void); - -void _asn1_delete_list_and_nodes (void); - -/* Max 64-bit integer length is 20 chars + 1 for sign + 1 for null termination */ -#define LTOSTR_MAX_SIZE 22 -char *_asn1_ltostr (int64_t v, char str[LTOSTR_MAX_SIZE]); - -asn1_node _asn1_find_up (asn1_node node); - -int _asn1_change_integer_value (asn1_node node); - -int _asn1_expand_object_id (asn1_node node); - -int _asn1_type_set_config (asn1_node node); - -int _asn1_check_identifier (asn1_node node); - -int _asn1_set_default_tag (asn1_node node); - -/******************************************************************/ -/* Function : _asn1_get_right */ -/* Description: returns the element pointed by the RIGHT field of */ -/* a NODE_ASN element. */ -/* Parameters: */ -/* node: NODE_ASN element pointer. */ -/* Return: field RIGHT of NODE. */ -/******************************************************************/ -inline static asn1_node -_asn1_get_right (asn1_node node) -{ - if (node == NULL) - return NULL; - return node->right; -} - -/******************************************************************/ -/* Function : _asn1_set_down */ -/* Description: sets the field DOWN in a NODE_ASN element. */ -/* Parameters: */ -/* node: element pointer. */ -/* down: pointer to a NODE_ASN element that you want be pointed */ -/* by NODE. */ -/* Return: pointer to *NODE. */ -/******************************************************************/ -inline static asn1_node -_asn1_set_down (asn1_node node, asn1_node down) -{ - if (node == NULL) - return node; - node->down = down; - if (down) - down->left = node; - return node; -} - -/******************************************************************/ -/* Function : _asn1_get_down */ -/* Description: returns the element pointed by the DOWN field of */ -/* a NODE_ASN element. */ -/* Parameters: */ -/* node: NODE_ASN element pointer. */ -/* Return: field DOWN of NODE. */ -/******************************************************************/ -inline static asn1_node -_asn1_get_down (asn1_node node) -{ - if (node == NULL) - return NULL; - return node->down; -} - -/******************************************************************/ -/* Function : _asn1_get_name */ -/* Description: returns the name of a NODE_ASN element. */ -/* Parameters: */ -/* node: NODE_ASN element pointer. */ -/* Return: a null terminated string. */ -/******************************************************************/ -inline static char * -_asn1_get_name (asn1_node node) -{ - if (node == NULL) - return NULL; - return node->name; -} - -/******************************************************************/ -/* Function : _asn1_mod_type */ -/* Description: change the field TYPE of an NODE_ASN element. */ -/* The new value is the old one | (bitwise or) the */ -/* paramener VALUE. */ -/* Parameters: */ -/* node: NODE_ASN element pointer. */ -/* value: the integer value that must be or-ed with the current */ -/* value of field TYPE. */ -/* Return: NODE pointer. */ -/******************************************************************/ -inline static asn1_node -_asn1_mod_type (asn1_node node, unsigned int value) -{ - if (node == NULL) - return node; - node->type |= value; - return node; -} - -#endif diff --git a/lib/minitasn1/structure.c b/lib/minitasn1/structure.c deleted file mode 100644 index 01715b138b..0000000000 --- a/lib/minitasn1/structure.c +++ /dev/null @@ -1,1197 +0,0 @@ -/* - * Copyright (C) 2002-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - - -/*****************************************************/ -/* File: structure.c */ -/* Description: Functions to create and delete an */ -/* ASN1 tree. */ -/*****************************************************/ - - -#include -#include -#include "parser_aux.h" -#include - - -extern char _asn1_identifierMissing[]; - - -/******************************************************/ -/* Function : _asn1_add_single_node */ -/* Description: creates a new NODE_ASN element. */ -/* Parameters: */ -/* type: type of the new element (see ASN1_ETYPE_ */ -/* and CONST_ constants). */ -/* Return: pointer to the new element. */ -/******************************************************/ -asn1_node -_asn1_add_single_node (unsigned int type) -{ - asn1_node punt; - - punt = calloc (1, sizeof (struct asn1_node_st)); - if (punt == NULL) - return NULL; - - punt->type = type; - - return punt; -} - - -/******************************************************************/ -/* Function : _asn1_find_left */ -/* Description: returns the NODE_ASN element with RIGHT field that*/ -/* points the element NODE. */ -/* Parameters: */ -/* node: NODE_ASN element pointer. */ -/* Return: NULL if not found. */ -/******************************************************************/ -asn1_node -_asn1_find_left (asn1_node node) -{ - if ((node == NULL) || (node->left == NULL) || (node->left->down == node)) - return NULL; - - return node->left; -} - - -int -_asn1_create_static_structure (asn1_node pointer, char *output_file_name, - char *vector_name) -{ - FILE *file; - asn1_node p; - unsigned long t; - - file = fopen (output_file_name, "w"); - - if (file == NULL) - return ASN1_FILE_NOT_FOUND; - - fprintf (file, "#if HAVE_CONFIG_H\n"); - fprintf (file, "# include \"config.h\"\n"); - fprintf (file, "#endif\n\n"); - - fprintf (file, "#include \n\n"); - - fprintf (file, "const asn1_static_node %s[] = {\n", vector_name); - - p = pointer; - - while (p) - { - fprintf (file, " { "); - - if (p->name[0] != 0) - fprintf (file, "\"%s\", ", p->name); - else - fprintf (file, "NULL, "); - - t = p->type; - if (p->down) - t |= CONST_DOWN; - if (p->right) - t |= CONST_RIGHT; - - fprintf (file, "%lu, ", t); - - if (p->value) - fprintf (file, "\"%s\"},\n", p->value); - else - fprintf (file, "NULL },\n"); - - if (p->down) - { - p = p->down; - } - else if (p->right) - { - p = p->right; - } - else - { - while (1) - { - p = _asn1_find_up (p); - if (p == pointer) - { - p = NULL; - break; - } - if (p->right) - { - p = p->right; - break; - } - } - } - } - - fprintf (file, " { NULL, 0, NULL }\n};\n"); - - fclose (file); - - return ASN1_SUCCESS; -} - - -/** - * asn1_array2tree: - * @array: specify the array that contains ASN.1 declarations - * @definitions: return the pointer to the structure created by - * *ARRAY ASN.1 declarations - * @errorDescription: return the error description. - * - * Creates the structures needed to manage the ASN.1 definitions. - * @array is a vector created by asn1_parser2array(). - * - * Returns: %ASN1_SUCCESS if structure was created correctly, - * %ASN1_ELEMENT_NOT_EMPTY if *@definitions not NULL, - * %ASN1_IDENTIFIER_NOT_FOUND if in the file there is an identifier - * that is not defined (see @errorDescription for more information), - * %ASN1_ARRAY_ERROR if the array pointed by @array is wrong. - **/ -int -asn1_array2tree (const asn1_static_node * array, asn1_node * definitions, - char *errorDescription) -{ - asn1_node p, p_last = NULL; - unsigned long k; - int move; - int result; - unsigned int type; - - if (errorDescription) - errorDescription[0] = 0; - - if (*definitions != NULL) - return ASN1_ELEMENT_NOT_EMPTY; - - move = UP; - - k = 0; - while (array[k].value || array[k].type || array[k].name) - { - type = convert_old_type (array[k].type); - - p = _asn1_add_static_node (type & (~CONST_DOWN)); - if (array[k].name) - _asn1_set_name (p, array[k].name); - if (array[k].value) - _asn1_set_value (p, array[k].value, strlen (array[k].value) + 1); - - if (*definitions == NULL) - *definitions = p; - - if (move == DOWN) - _asn1_set_down (p_last, p); - else if (move == RIGHT) - _asn1_set_right (p_last, p); - - p_last = p; - - if (type & CONST_DOWN) - move = DOWN; - else if (type & CONST_RIGHT) - move = RIGHT; - else - { - while (1) - { - if (p_last == *definitions) - break; - - p_last = _asn1_find_up (p_last); - - if (p_last == NULL) - break; - - if (p_last->type & CONST_RIGHT) - { - p_last->type &= ~CONST_RIGHT; - move = RIGHT; - break; - } - } /* while */ - } - k++; - } /* while */ - - if (p_last == *definitions) - { - result = _asn1_check_identifier (*definitions); - if (result == ASN1_SUCCESS) - { - _asn1_change_integer_value (*definitions); - _asn1_expand_object_id (*definitions); - } - } - else - { - result = ASN1_ARRAY_ERROR; - } - - if (errorDescription != NULL) - { - if (result == ASN1_IDENTIFIER_NOT_FOUND) - { - Estrcpy (errorDescription, ":: identifier '"); - Estrcat (errorDescription, _asn1_identifierMissing); - Estrcat (errorDescription, "' not found"); - } - else - errorDescription[0] = 0; - } - - if (result != ASN1_SUCCESS) - { - _asn1_delete_list_and_nodes (); - *definitions = NULL; - } - else - _asn1_delete_list (); - - return result; -} - -/** - * asn1_delete_structure: - * @structure: pointer to the structure that you want to delete. - * - * Deletes the structure *@structure. At the end, *@structure is set - * to NULL. - * - * Returns: %ASN1_SUCCESS if successful, %ASN1_ELEMENT_NOT_FOUND if - * *@structure was NULL. - **/ -int -asn1_delete_structure (asn1_node * structure) -{ - return asn1_delete_structure2(structure, 0); -} - -/** - * asn1_delete_structure2: - * @structure: pointer to the structure that you want to delete. - * @flags: additional flags (see %ASN1_DELETE_FLAG) - * - * Deletes the structure *@structure. At the end, *@structure is set - * to NULL. - * - * Returns: %ASN1_SUCCESS if successful, %ASN1_ELEMENT_NOT_FOUND if - * *@structure was NULL. - **/ -int -asn1_delete_structure2 (asn1_node * structure, unsigned int flags) -{ - asn1_node p, p2, p3; - - if (*structure == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - p = *structure; - while (p) - { - if (p->down) - { - p = p->down; - } - else - { /* no down */ - p2 = p->right; - if (p != *structure) - { - p3 = _asn1_find_up (p); - _asn1_set_down (p3, p2); - _asn1_remove_node (p, flags); - p = p3; - } - else - { /* p==root */ - p3 = _asn1_find_left (p); - if (!p3) - { - p3 = _asn1_find_up (p); - if (p3) - _asn1_set_down (p3, p2); - else - { - if (p->right) - p->right->left = NULL; - } - } - else - _asn1_set_right (p3, p2); - _asn1_remove_node (p, flags); - p = NULL; - } - } - } - - *structure = NULL; - return ASN1_SUCCESS; -} - - - -/** - * asn1_delete_element: - * @structure: pointer to the structure that contains the element you - * want to delete. - * @element_name: element's name you want to delete. - * - * Deletes the element named *@element_name inside *@structure. - * - * Returns: %ASN1_SUCCESS if successful, %ASN1_ELEMENT_NOT_FOUND if - * the @element_name was not found. - **/ -int -asn1_delete_element (asn1_node structure, const char *element_name) -{ - asn1_node p2, p3, source_node; - - source_node = asn1_find_node (structure, element_name); - - if (source_node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - p2 = source_node->right; - p3 = _asn1_find_left (source_node); - if (!p3) - { - p3 = _asn1_find_up (source_node); - if (p3) - _asn1_set_down (p3, p2); - else if (source_node->right) - source_node->right->left = NULL; - } - else - _asn1_set_right (p3, p2); - - return asn1_delete_structure (&source_node); -} - -asn1_node -_asn1_copy_structure3 (asn1_node source_node) -{ - asn1_node dest_node, p_s, p_d, p_d_prev; - int move; - - if (source_node == NULL) - return NULL; - - dest_node = _asn1_add_single_node (source_node->type); - - p_s = source_node; - p_d = dest_node; - - move = DOWN; - - do - { - if (move != UP) - { - if (p_s->name[0] != 0) - _asn1_cpy_name (p_d, p_s); - if (p_s->value) - _asn1_set_value (p_d, p_s->value, p_s->value_len); - if (p_s->down) - { - p_s = p_s->down; - p_d_prev = p_d; - p_d = _asn1_add_single_node (p_s->type); - _asn1_set_down (p_d_prev, p_d); - continue; - } - p_d->start = p_s->start; - p_d->end = p_s->end; - } - - if (p_s == source_node) - break; - - if (p_s->right) - { - move = RIGHT; - p_s = p_s->right; - p_d_prev = p_d; - p_d = _asn1_add_single_node (p_s->type); - _asn1_set_right (p_d_prev, p_d); - } - else - { - move = UP; - p_s = _asn1_find_up (p_s); - p_d = _asn1_find_up (p_d); - } - } - while (p_s != source_node); - - return dest_node; -} - - -static asn1_node -_asn1_copy_structure2 (asn1_node root, const char *source_name) -{ - asn1_node source_node; - - source_node = asn1_find_node (root, source_name); - - return _asn1_copy_structure3 (source_node); - -} - - -static int -_asn1_type_choice_config (asn1_node node) -{ - asn1_node p, p2, p3, p4; - int move, tlen; - - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - p = node; - move = DOWN; - - while (!((p == node) && (move == UP))) - { - if (move != UP) - { - if ((type_field (p->type) == ASN1_ETYPE_CHOICE) - && (p->type & CONST_TAG)) - { - p2 = p->down; - while (p2) - { - if (type_field (p2->type) != ASN1_ETYPE_TAG) - { - p2->type |= CONST_TAG; - p3 = _asn1_find_left (p2); - while (p3) - { - if (type_field (p3->type) == ASN1_ETYPE_TAG) - { - p4 = _asn1_add_single_node (p3->type); - tlen = _asn1_strlen (p3->value); - if (tlen > 0) - _asn1_set_value (p4, p3->value, tlen + 1); - _asn1_set_right (p4, p2->down); - _asn1_set_down (p2, p4); - } - p3 = _asn1_find_left (p3); - } - } - p2 = p2->right; - } - p->type &= ~(CONST_TAG); - p2 = p->down; - while (p2) - { - p3 = p2->right; - if (type_field (p2->type) == ASN1_ETYPE_TAG) - asn1_delete_structure (&p2); - p2 = p3; - } - } - move = DOWN; - } - else - move = RIGHT; - - if (move == DOWN) - { - if (p->down) - p = p->down; - else - move = RIGHT; - } - - if (p == node) - { - move = UP; - continue; - } - - if (move == RIGHT) - { - if (p->right) - p = p->right; - else - move = UP; - } - if (move == UP) - p = _asn1_find_up (p); - } - - return ASN1_SUCCESS; -} - - -static int -_asn1_expand_identifier (asn1_node * node, asn1_node root) -{ - asn1_node p, p2, p3; - char name2[ASN1_MAX_NAME_SIZE + 2]; - int move; - - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - p = *node; - move = DOWN; - - while (!((p == *node) && (move == UP))) - { - if (move != UP) - { - if (type_field (p->type) == ASN1_ETYPE_IDENTIFIER) - { - snprintf (name2, sizeof (name2), "%s.%s", root->name, p->value); - p2 = _asn1_copy_structure2 (root, name2); - if (p2 == NULL) - { - return ASN1_IDENTIFIER_NOT_FOUND; - } - _asn1_cpy_name (p2, p); - p2->right = p->right; - p2->left = p->left; - if (p->right) - p->right->left = p2; - p3 = p->down; - if (p3) - { - while (p3->right) - p3 = p3->right; - _asn1_set_right (p3, p2->down); - _asn1_set_down (p2, p->down); - } - - p3 = _asn1_find_left (p); - if (p3) - _asn1_set_right (p3, p2); - else - { - p3 = _asn1_find_up (p); - if (p3) - _asn1_set_down (p3, p2); - else - { - p2->left = NULL; - } - } - - if (p->type & CONST_SIZE) - p2->type |= CONST_SIZE; - if (p->type & CONST_TAG) - p2->type |= CONST_TAG; - if (p->type & CONST_OPTION) - p2->type |= CONST_OPTION; - if (p->type & CONST_DEFAULT) - p2->type |= CONST_DEFAULT; - if (p->type & CONST_SET) - p2->type |= CONST_SET; - if (p->type & CONST_NOT_USED) - p2->type |= CONST_NOT_USED; - - if (p == *node) - *node = p2; - _asn1_remove_node (p, 0); - p = p2; - move = DOWN; - continue; - } - move = DOWN; - } - else - move = RIGHT; - - if (move == DOWN) - { - if (p->down) - p = p->down; - else - move = RIGHT; - } - - if (p == *node) - { - move = UP; - continue; - } - - if (move == RIGHT) - { - if (p->right) - p = p->right; - else - move = UP; - } - if (move == UP) - p = _asn1_find_up (p); - } - - return ASN1_SUCCESS; -} - - -/** - * asn1_create_element: - * @definitions: pointer to the structure returned by "parser_asn1" function - * @source_name: the name of the type of the new structure (must be - * inside p_structure). - * @element: pointer to the structure created. - * - * Creates a structure of type @source_name. Example using - * "pkix.asn": - * - * rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr); - * - * Returns: %ASN1_SUCCESS if creation OK, %ASN1_ELEMENT_NOT_FOUND if - * @source_name is not known. - **/ -int -asn1_create_element (asn1_node definitions, const char *source_name, - asn1_node * element) -{ - asn1_node dest_node; - int res; - - dest_node = _asn1_copy_structure2 (definitions, source_name); - - if (dest_node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - _asn1_set_name (dest_node, ""); - - res = _asn1_expand_identifier (&dest_node, definitions); - _asn1_type_choice_config (dest_node); - - *element = dest_node; - - return res; -} - - -/** - * asn1_print_structure: - * @out: pointer to the output file (e.g. stdout). - * @structure: pointer to the structure that you want to visit. - * @name: an element of the structure - * @mode: specify how much of the structure to print, can be - * %ASN1_PRINT_NAME, %ASN1_PRINT_NAME_TYPE, - * %ASN1_PRINT_NAME_TYPE_VALUE, or %ASN1_PRINT_ALL. - * - * Prints on the @out file descriptor the structure's tree starting - * from the @name element inside the structure @structure. - **/ -void -asn1_print_structure (FILE * out, asn1_node structure, const char *name, - int mode) -{ - asn1_node p, root; - int k, indent = 0, len, len2, len3; - - if (out == NULL) - return; - - root = asn1_find_node (structure, name); - - if (root == NULL) - return; - - p = root; - while (p) - { - if (mode == ASN1_PRINT_ALL) - { - for (k = 0; k < indent; k++) - fprintf (out, " "); - fprintf (out, "name:"); - if (p->name[0] != 0) - fprintf (out, "%s ", p->name); - else - fprintf (out, "NULL "); - } - else - { - switch (type_field (p->type)) - { - case ASN1_ETYPE_CONSTANT: - case ASN1_ETYPE_TAG: - case ASN1_ETYPE_SIZE: - break; - default: - for (k = 0; k < indent; k++) - fprintf (out, " "); - fprintf (out, "name:"); - if (p->name[0] != 0) - fprintf (out, "%s ", p->name); - else - fprintf (out, "NULL "); - } - } - - if (mode != ASN1_PRINT_NAME) - { - unsigned type = type_field (p->type); - switch (type) - { - case ASN1_ETYPE_CONSTANT: - if (mode == ASN1_PRINT_ALL) - fprintf (out, "type:CONST"); - break; - case ASN1_ETYPE_TAG: - if (mode == ASN1_PRINT_ALL) - fprintf (out, "type:TAG"); - break; - case ASN1_ETYPE_SIZE: - if (mode == ASN1_PRINT_ALL) - fprintf (out, "type:SIZE"); - break; - case ASN1_ETYPE_DEFAULT: - fprintf (out, "type:DEFAULT"); - break; - case ASN1_ETYPE_IDENTIFIER: - fprintf (out, "type:IDENTIFIER"); - break; - case ASN1_ETYPE_ANY: - fprintf (out, "type:ANY"); - break; - case ASN1_ETYPE_CHOICE: - fprintf (out, "type:CHOICE"); - break; - case ASN1_ETYPE_DEFINITIONS: - fprintf (out, "type:DEFINITIONS"); - break; - CASE_HANDLED_ETYPES: - fprintf (out, "%s", _asn1_tags[type].desc); - break; - default: - break; - } - } - - if ((mode == ASN1_PRINT_NAME_TYPE_VALUE) || (mode == ASN1_PRINT_ALL)) - { - switch (type_field (p->type)) - { - case ASN1_ETYPE_CONSTANT: - if (mode == ASN1_PRINT_ALL) - if (p->value) - fprintf (out, " value:%s", p->value); - break; - case ASN1_ETYPE_TAG: - if (mode == ASN1_PRINT_ALL) - if (p->value) - fprintf (out, " value:%s", p->value); - break; - case ASN1_ETYPE_SIZE: - if (mode == ASN1_PRINT_ALL) - if (p->value) - fprintf (out, " value:%s", p->value); - break; - case ASN1_ETYPE_DEFAULT: - if (p->value) - fprintf (out, " value:%s", p->value); - else if (p->type & CONST_TRUE) - fprintf (out, " value:TRUE"); - else if (p->type & CONST_FALSE) - fprintf (out, " value:FALSE"); - break; - case ASN1_ETYPE_IDENTIFIER: - if (p->value) - fprintf (out, " value:%s", p->value); - break; - case ASN1_ETYPE_INTEGER: - if (p->value) - { - len2 = -1; - len = asn1_get_length_der (p->value, p->value_len, &len2); - fprintf (out, " value:0x"); - if (len > 0) - for (k = 0; k < len; k++) - fprintf (out, "%02x", (unsigned) (p->value)[k + len2]); - } - break; - case ASN1_ETYPE_ENUMERATED: - if (p->value) - { - len2 = -1; - len = asn1_get_length_der (p->value, p->value_len, &len2); - fprintf (out, " value:0x"); - if (len > 0) - for (k = 0; k < len; k++) - fprintf (out, "%02x", (unsigned) (p->value)[k + len2]); - } - break; - case ASN1_ETYPE_BOOLEAN: - if (p->value) - { - if (p->value[0] == 'T') - fprintf (out, " value:TRUE"); - else if (p->value[0] == 'F') - fprintf (out, " value:FALSE"); - } - break; - case ASN1_ETYPE_BIT_STRING: - if (p->value) - { - len2 = -1; - len = asn1_get_length_der (p->value, p->value_len, &len2); - if (len > 0) - { - fprintf (out, " value(%i):", - (len - 1) * 8 - (p->value[len2])); - for (k = 1; k < len; k++) - fprintf (out, "%02x", (unsigned) (p->value)[k + len2]); - } - } - break; - case ASN1_ETYPE_GENERALIZED_TIME: - case ASN1_ETYPE_UTC_TIME: - if (p->value) - { - fprintf (out, " value:"); - for (k = 0; k < p->value_len; k++) - fprintf (out, "%c", (p->value)[k]); - } - break; - case ASN1_ETYPE_GENERALSTRING: - case ASN1_ETYPE_NUMERIC_STRING: - case ASN1_ETYPE_IA5_STRING: - case ASN1_ETYPE_TELETEX_STRING: - case ASN1_ETYPE_PRINTABLE_STRING: - case ASN1_ETYPE_UNIVERSAL_STRING: - case ASN1_ETYPE_UTF8_STRING: - case ASN1_ETYPE_VISIBLE_STRING: - if (p->value) - { - len2 = -1; - len = asn1_get_length_der (p->value, p->value_len, &len2); - fprintf (out, " value:"); - if (len > 0) - for (k = 0; k < len; k++) - fprintf (out, "%c", (p->value)[k + len2]); - } - break; - case ASN1_ETYPE_BMP_STRING: - case ASN1_ETYPE_OCTET_STRING: - if (p->value) - { - len2 = -1; - len = asn1_get_length_der (p->value, p->value_len, &len2); - fprintf (out, " value:"); - if (len > 0) - for (k = 0; k < len; k++) - fprintf (out, "%02x", (unsigned) (p->value)[k + len2]); - } - break; - case ASN1_ETYPE_OBJECT_ID: - if (p->value) - fprintf (out, " value:%s", p->value); - break; - case ASN1_ETYPE_ANY: - if (p->value) - { - len3 = -1; - len2 = asn1_get_length_der (p->value, p->value_len, &len3); - fprintf (out, " value:"); - if (len2 > 0) - for (k = 0; k < len2; k++) - fprintf (out, "%02x", (unsigned) (p->value)[k + len3]); - } - break; - case ASN1_ETYPE_SET: - case ASN1_ETYPE_SET_OF: - case ASN1_ETYPE_CHOICE: - case ASN1_ETYPE_DEFINITIONS: - case ASN1_ETYPE_SEQUENCE_OF: - case ASN1_ETYPE_SEQUENCE: - case ASN1_ETYPE_NULL: - break; - default: - break; - } - } - - if (mode == ASN1_PRINT_ALL) - { - if (p->type & 0x1FFFFF00) - { - fprintf (out, " attr:"); - if (p->type & CONST_UNIVERSAL) - fprintf (out, "UNIVERSAL,"); - if (p->type & CONST_PRIVATE) - fprintf (out, "PRIVATE,"); - if (p->type & CONST_APPLICATION) - fprintf (out, "APPLICATION,"); - if (p->type & CONST_EXPLICIT) - fprintf (out, "EXPLICIT,"); - if (p->type & CONST_IMPLICIT) - fprintf (out, "IMPLICIT,"); - if (p->type & CONST_TAG) - fprintf (out, "TAG,"); - if (p->type & CONST_DEFAULT) - fprintf (out, "DEFAULT,"); - if (p->type & CONST_TRUE) - fprintf (out, "TRUE,"); - if (p->type & CONST_FALSE) - fprintf (out, "FALSE,"); - if (p->type & CONST_LIST) - fprintf (out, "LIST,"); - if (p->type & CONST_MIN_MAX) - fprintf (out, "MIN_MAX,"); - if (p->type & CONST_OPTION) - fprintf (out, "OPTION,"); - if (p->type & CONST_1_PARAM) - fprintf (out, "1_PARAM,"); - if (p->type & CONST_SIZE) - fprintf (out, "SIZE,"); - if (p->type & CONST_DEFINED_BY) - fprintf (out, "DEF_BY,"); - if (p->type & CONST_GENERALIZED) - fprintf (out, "GENERALIZED,"); - if (p->type & CONST_UTC) - fprintf (out, "UTC,"); - if (p->type & CONST_SET) - fprintf (out, "SET,"); - if (p->type & CONST_NOT_USED) - fprintf (out, "NOT_USED,"); - if (p->type & CONST_ASSIGN) - fprintf (out, "ASSIGNMENT,"); - } - } - - if (mode == ASN1_PRINT_ALL) - { - fprintf (out, "\n"); - } - else - { - switch (type_field (p->type)) - { - case ASN1_ETYPE_CONSTANT: - case ASN1_ETYPE_TAG: - case ASN1_ETYPE_SIZE: - break; - default: - fprintf (out, "\n"); - } - } - - if (p->down) - { - p = p->down; - indent += 2; - } - else if (p == root) - { - p = NULL; - break; - } - else if (p->right) - p = p->right; - else - { - while (1) - { - p = _asn1_find_up (p); - if (p == root) - { - p = NULL; - break; - } - indent -= 2; - if (p->right) - { - p = p->right; - break; - } - } - } - } -} - - - -/** - * asn1_number_of_elements: - * @element: pointer to the root of an ASN1 structure. - * @name: the name of a sub-structure of ROOT. - * @num: pointer to an integer where the result will be stored - * - * Counts the number of elements of a sub-structure called NAME with - * names equal to "?1","?2", ... - * - * Returns: %ASN1_SUCCESS if successful, %ASN1_ELEMENT_NOT_FOUND if - * @name is not known, %ASN1_GENERIC_ERROR if pointer @num is %NULL. - **/ -int -asn1_number_of_elements (asn1_node element, const char *name, int *num) -{ - asn1_node node, p; - - if (num == NULL) - return ASN1_GENERIC_ERROR; - - *num = 0; - - node = asn1_find_node (element, name); - if (node == NULL) - return ASN1_ELEMENT_NOT_FOUND; - - p = node->down; - - while (p) - { - if (p->name[0] == '?') - (*num)++; - p = p->right; - } - - return ASN1_SUCCESS; -} - - -/** - * asn1_find_structure_from_oid: - * @definitions: ASN1 definitions - * @oidValue: value of the OID to search (e.g. "1.2.3.4"). - * - * Search the structure that is defined just after an OID definition. - * - * Returns: %NULL when @oidValue not found, otherwise the pointer to a - * constant string that contains the element name defined just after - * the OID. - **/ -const char * -asn1_find_structure_from_oid (asn1_node definitions, const char *oidValue) -{ - char name[2 * ASN1_MAX_NAME_SIZE + 1]; - char value[ASN1_MAX_NAME_SIZE]; - asn1_node p; - int len; - int result; - const char *definitionsName; - - if ((definitions == NULL) || (oidValue == NULL)) - return NULL; /* ASN1_ELEMENT_NOT_FOUND; */ - - definitionsName = definitions->name; - - /* search the OBJECT_ID into definitions */ - p = definitions->down; - while (p) - { - if ((type_field (p->type) == ASN1_ETYPE_OBJECT_ID) && - (p->type & CONST_ASSIGN)) - { - snprintf(name, sizeof(name), "%s.%s", definitionsName, p->name); - - len = ASN1_MAX_NAME_SIZE; - result = asn1_read_value (definitions, name, value, &len); - - if ((result == ASN1_SUCCESS) && (!strcmp (oidValue, value))) - { - p = p->right; - if (p == NULL) /* reach the end of ASN1 definitions */ - return NULL; /* ASN1_ELEMENT_NOT_FOUND; */ - - return p->name; - } - } - p = p->right; - } - - return NULL; /* ASN1_ELEMENT_NOT_FOUND; */ -} - -/** - * asn1_copy_node: - * @dst: Destination asn1 node. - * @dst_name: Field name in destination node. - * @src: Source asn1 node. - * @src_name: Field name in source node. - * - * Create a deep copy of a asn1_node variable. That - * function requires @dst to be expanded using asn1_create_element(). - * - * Returns: Return %ASN1_SUCCESS on success. - **/ -int -asn1_copy_node (asn1_node dst, const char *dst_name, - asn1_node src, const char *src_name) -{ - int result; - asn1_node dst_node; - void *data = NULL; - int size = 0; - - result = asn1_der_coding (src, src_name, NULL, &size, NULL); - if (result != ASN1_MEM_ERROR) - return result; - - data = malloc (size); - if (data == NULL) - return ASN1_MEM_ERROR; - - result = asn1_der_coding (src, src_name, data, &size, NULL); - if (result != ASN1_SUCCESS) - { - free (data); - return result; - } - - dst_node = asn1_find_node (dst, dst_name); - if (dst_node == NULL) - { - free (data); - return ASN1_ELEMENT_NOT_FOUND; - } - - result = asn1_der_decoding (&dst_node, data, size, NULL); - - free (data); - - return result; -} - -/** - * asn1_dup_node: - * @src: Source asn1 node. - * @src_name: Field name in source node. - * - * Create a deep copy of a asn1_node variable. This function - * will return an exact copy of the provided structure. - * - * Returns: Return %NULL on failure. - **/ -asn1_node -asn1_dup_node (asn1_node src, const char *src_name) -{ - return _asn1_copy_structure2(src, src_name); -} diff --git a/lib/minitasn1/structure.h b/lib/minitasn1/structure.h deleted file mode 100644 index bb6e7a9b9a..0000000000 --- a/lib/minitasn1/structure.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2002-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - -/*************************************************/ -/* File: structure.h */ -/* Description: list of exported object by */ -/* "structure.c" */ -/*************************************************/ - -#ifndef _STRUCTURE_H -#define _STRUCTURE_H - -int _asn1_create_static_structure (asn1_node pointer, - char *output_file_name, char *vector_name); - -asn1_node _asn1_copy_structure3 (asn1_node source_node); - -asn1_node _asn1_add_single_node (unsigned int type); - -asn1_node _asn1_find_left (asn1_node node); - -#endif diff --git a/lib/minitasn1/version.c b/lib/minitasn1/version.c deleted file mode 100644 index 25f8a8f28e..0000000000 --- a/lib/minitasn1/version.c +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2000-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * The LIBTASN1 library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include /* for strverscmp */ - -#include "libtasn1.h" - -/** - * asn1_check_version: - * @req_version: Required version number, or %NULL. - * - * Check that the version of the library is at minimum the - * requested one and return the version string; return %NULL if the - * condition is not satisfied. If a %NULL is passed to this function, - * no check is done, but the version string is simply returned. - * - * See %ASN1_VERSION for a suitable @req_version string. - * - * Returns: Version string of run-time library, or %NULL if the - * run-time library does not meet the required version number. - */ -const char * -asn1_check_version (const char *req_version) -{ - if (!req_version || strverscmp (req_version, ASN1_VERSION) <= 0) - return ASN1_VERSION; - - return NULL; -} diff --git a/lib/mpi.c b/lib/mpi.c index b2079132c5..77ab8e5426 100644 --- a/lib/mpi.c +++ b/lib/mpi.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -88,7 +88,6 @@ _gnutls_mpi_random_modp(bigint_t r, bigint_t p, if (buf_release != 0) { gnutls_free(buf); - buf = NULL; } if (r != NULL) { @@ -153,19 +152,17 @@ _gnutls_mpi_init_scan_nz(bigint_t * ret_mpi, const void *buffer, size_t nbytes) return 0; } -#ifdef ENABLE_OPENPGP int -_gnutls_mpi_init_scan_pgp(bigint_t * ret_mpi, const void *buffer, size_t nbytes) +_gnutls_mpi_init_scan_le(bigint_t * ret_mpi, const void *buffer, size_t nbytes) { -bigint_t r; -int ret; + bigint_t r; + int ret; ret = _gnutls_mpi_init(&r); if (ret < 0) return gnutls_assert_val(ret); - ret = - _gnutls_mpi_scan_pgp(r, buffer, nbytes); + ret = _gnutls_mpi_scan_le(r, buffer, nbytes); if (ret < 0) { gnutls_assert(); _gnutls_mpi_release(&r); @@ -176,7 +173,32 @@ int ret; return 0; } -#endif + +int _gnutls_mpi_dprint_le(const bigint_t a, gnutls_datum_t * dest) +{ + int ret; + uint8_t *buf = NULL; + size_t bytes = 0; + + if (dest == NULL || a == NULL) + return GNUTLS_E_INVALID_REQUEST; + + _gnutls_mpi_print_le(a, NULL, &bytes); + if (bytes != 0) + buf = gnutls_malloc(bytes); + if (buf == NULL) + return GNUTLS_E_MEMORY_ERROR; + + ret = _gnutls_mpi_print_le(a, buf, &bytes); + if (ret < 0) { + gnutls_free(buf); + return ret; + } + + dest->data = buf; + dest->size = bytes; + return 0; +} /* Always has the first bit zero */ int _gnutls_mpi_dprint_lz(const bigint_t a, gnutls_datum_t * dest) @@ -273,13 +295,43 @@ _gnutls_mpi_dprint_size(const bigint_t a, gnutls_datum_t * dest, return 0; } +/* like _gnutls_mpi_dprint_size, but prints into preallocated byte buffer */ +int +_gnutls_mpi_bprint_size(const bigint_t a, uint8_t *buf, size_t size) +{ + int result; + size_t bytes = 0; + + result = _gnutls_mpi_print(a, NULL, &bytes); + if (result != GNUTLS_E_SHORT_MEMORY_BUFFER) + return gnutls_assert_val(result); + + if (bytes <= size) { + unsigned i; + size_t diff = size - bytes; + + for (i = 0; i < diff; i++) + buf[i] = 0; + result = _gnutls_mpi_print(a, &buf[diff], &bytes); + } else { + result = _gnutls_mpi_print(a, buf, &bytes); + } + + return result; +} + +/* Flags for __gnutls_x509_read_int() and __gnutls_x509_write_int */ +#define GNUTLS_X509_INT_OVERWRITE (1 << 0) +#define GNUTLS_X509_INT_LE (1 << 1) +#define GNUTLS_X509_INT_LZ (1 << 2) /* write only */ + /* this function reads an integer * from asn1 structs. Combines the read and mpi_scan * steps. */ static int __gnutls_x509_read_int(ASN1_TYPE node, const char *value, - bigint_t * ret_mpi, int overwrite) + bigint_t * ret_mpi, unsigned int flags) { int result; uint8_t *tmpstr = NULL; @@ -305,9 +357,14 @@ __gnutls_x509_read_int(ASN1_TYPE node, const char *value, return _gnutls_asn2err(result); } - result = _gnutls_mpi_init_scan(ret_mpi, tmpstr, tmpstr_size); + if (flags & GNUTLS_X509_INT_LE) + result = _gnutls_mpi_init_scan_le(ret_mpi, tmpstr, + tmpstr_size); + else + result = _gnutls_mpi_init_scan(ret_mpi, tmpstr, + tmpstr_size); - if (overwrite) + if (flags & GNUTLS_X509_INT_OVERWRITE) zeroize_key(tmpstr, tmpstr_size); gnutls_free(tmpstr); @@ -323,29 +380,42 @@ int _gnutls_x509_read_int(ASN1_TYPE node, const char *value, bigint_t * ret_mpi) { - return __gnutls_x509_read_int(node, value, ret_mpi, 0); + return __gnutls_x509_read_int(node, value, ret_mpi, + 0); } int _gnutls_x509_read_key_int(ASN1_TYPE node, const char *value, bigint_t * ret_mpi) { - return __gnutls_x509_read_int(node, value, ret_mpi, 1); + return __gnutls_x509_read_int(node, value, ret_mpi, + GNUTLS_X509_INT_OVERWRITE); +} + +int +_gnutls_x509_read_key_int_le(ASN1_TYPE node, const char *value, + bigint_t * ret_mpi) +{ + return __gnutls_x509_read_int(node, value, ret_mpi, + GNUTLS_X509_INT_OVERWRITE | + GNUTLS_X509_INT_LE); } /* Writes the specified integer into the specified node. */ static int __gnutls_x509_write_int(ASN1_TYPE node, const char *value, bigint_t mpi, - int lz, int overwrite) + unsigned int flags) { uint8_t *tmpstr; size_t s_len; int result; s_len = 0; - if (lz) + if (flags & GNUTLS_X509_INT_LZ) result = _gnutls_mpi_print_lz(mpi, NULL, &s_len); + else if (GNUTLS_X509_INT_LE) + result = _gnutls_mpi_print_le(mpi, NULL, &s_len); else result = _gnutls_mpi_print(mpi, NULL, &s_len); @@ -360,8 +430,10 @@ __gnutls_x509_write_int(ASN1_TYPE node, const char *value, bigint_t mpi, return GNUTLS_E_MEMORY_ERROR; } - if (lz) + if (flags & GNUTLS_X509_INT_LZ) result = _gnutls_mpi_print_lz(mpi, tmpstr, &s_len); + else if (GNUTLS_X509_INT_LE) + result = _gnutls_mpi_print_le(mpi, tmpstr, &s_len); else result = _gnutls_mpi_print(mpi, tmpstr, &s_len); @@ -372,8 +444,8 @@ __gnutls_x509_write_int(ASN1_TYPE node, const char *value, bigint_t mpi, } result = asn1_write_value(node, value, tmpstr, s_len); - - if (overwrite) + + if (flags & GNUTLS_X509_INT_OVERWRITE) zeroize_key(tmpstr, s_len); gnutls_free(tmpstr); @@ -390,12 +462,23 @@ int _gnutls_x509_write_int(ASN1_TYPE node, const char *value, bigint_t mpi, int lz) { - return __gnutls_x509_write_int(node, value, mpi, lz, 0); + return __gnutls_x509_write_int(node, value, mpi, + lz ? GNUTLS_X509_INT_LZ : 0); } int _gnutls_x509_write_key_int(ASN1_TYPE node, const char *value, bigint_t mpi, int lz) { - return __gnutls_x509_write_int(node, value, mpi, lz, 1); + return __gnutls_x509_write_int(node, value, mpi, + (lz ? GNUTLS_X509_INT_LZ : 0) | + GNUTLS_X509_INT_OVERWRITE); +} + +int +_gnutls_x509_write_key_int_le(ASN1_TYPE node, const char *value, bigint_t mpi) +{ + return __gnutls_x509_write_int(node, value, mpi, + GNUTLS_X509_INT_OVERWRITE | + GNUTLS_X509_INT_LE); } diff --git a/lib/mpi.h b/lib/mpi.h index 177c0480e7..a625094bbb 100644 --- a/lib/mpi.h +++ b/lib/mpi.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_MPI_H -#define GNUTLS_MPI_H +#ifndef GNUTLS_LIB_MPI_H +#define GNUTLS_LIB_MPI_H #include "gnutls_int.h" @@ -57,8 +57,10 @@ bigint_t _gnutls_mpi_random_modp(bigint_t, bigint_t p, #define _gnutls_prime_check _gnutls_mpi_ops.bigint_prime_check #define _gnutls_mpi_print(x,y,z) _gnutls_mpi_ops.bigint_print(x,y,z,GNUTLS_MPI_FORMAT_USG) #define _gnutls_mpi_print_lz(x,y,z) _gnutls_mpi_ops.bigint_print(x,y,z,GNUTLS_MPI_FORMAT_STD) +#define _gnutls_mpi_print_le(x,y,z) _gnutls_mpi_ops.bigint_print(x,y,z,GNUTLS_MPI_FORMAT_ULE) #define _gnutls_mpi_copy _gnutls_mpi_ops.bigint_copy #define _gnutls_mpi_scan(r, b, s) _gnutls_mpi_ops.bigint_scan(r, b, s, GNUTLS_MPI_FORMAT_USG) +#define _gnutls_mpi_scan_le(r, b, s) _gnutls_mpi_ops.bigint_scan(r, b, s, GNUTLS_MPI_FORMAT_ULE) inline static void _gnutls_mpi_release(bigint_t * x) @@ -74,19 +76,18 @@ int _gnutls_mpi_init_scan(bigint_t * ret_mpi, const void *buffer, size_t nbytes); int _gnutls_mpi_init_scan_nz(bigint_t * ret_mpi, const void *buffer, size_t nbytes); +int _gnutls_mpi_init_scan_le(bigint_t * ret_mpi, const void *buffer, + size_t nbytes); -#ifdef ENABLE_OPENPGP -#define _gnutls_mpi_print_pgp(x,y,z) _gnutls_mpi_ops.bigint_print(x,y,z,GNUTLS_MPI_FORMAT_PGP) -#define _gnutls_mpi_scan_pgp(r, b, s) _gnutls_mpi_ops.bigint_scan(r, b, s, GNUTLS_MPI_FORMAT_PGP) -int _gnutls_mpi_init_scan_pgp(bigint_t * ret_mpi, const void *buffer, - size_t nbytes); -#endif - +int _gnutls_mpi_dprint_le(const bigint_t a, gnutls_datum_t * dest); int _gnutls_mpi_dprint_lz(const bigint_t a, gnutls_datum_t * dest); int _gnutls_mpi_dprint(const bigint_t a, gnutls_datum_t * dest); int _gnutls_mpi_dprint_size(const bigint_t a, gnutls_datum_t * dest, size_t size); +int _gnutls_mpi_bprint_size(const bigint_t a, uint8_t *buf, size_t size); + +typedef int (*mpi_dprint_func)(const bigint_t a, gnutls_datum_t * dest); #define _gnutls_mpi_generate_group( gg, bits) _gnutls_mpi_ops.bigint_generate_group( gg, bits) -#endif +#endif /* GNUTLS_LIB_MPI_H */ diff --git a/lib/name_val_array.h b/lib/name_val_array.h new file mode 100644 index 0000000000..e4b3754df1 --- /dev/null +++ b/lib/name_val_array.h @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2011-2019 Free Software Foundation, Inc. + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_NAME_VAL_ARRAY_H +#define GNUTLS_NAME_VAL_ARRAY_H + +#include "gnutls_int.h" +#include "errors.h" + +/* Functionality to allow an array of strings. Strings + * are allowed to be added to the list and matched against it. + */ + +typedef struct name_val_array_st { + char *name; + unsigned name_size; + char *val; + struct name_val_array_st *next; +} *name_val_array_t; + +inline static void _name_val_array_init(name_val_array_t * head) +{ + *head = NULL; +} + +inline static void _name_val_array_clear(name_val_array_t * head) +{ + name_val_array_t prev, array = *head; + + while (array != NULL) { + prev = array; + array = prev->next; + gnutls_free(prev); + } + *head = NULL; +} + +inline static const char *_name_val_array_value(name_val_array_t head, + const char *name, unsigned name_size) +{ + name_val_array_t array = head; + + while (array != NULL) { + if (array->name_size == name_size && + memcmp(array->name, name, name_size) == 0) { + return array->val; + } + array = array->next; + } + + return NULL; +} + +inline static void append(name_val_array_t array, const char *name, + unsigned name_len, const char *val, + unsigned val_len) +{ + array->name = ((char *) array) + sizeof(struct name_val_array_st); + memcpy(array->name, name, name_len); + array->name[name_len] = 0; + array->name_size = name_len; + + array->val = ((char *) array) + name_len + 1 + sizeof(struct name_val_array_st); + if (val) + memcpy(array->val, val, val_len); + array->val[val_len] = 0; + + array->next = NULL; +} + +inline static int _name_val_array_append(name_val_array_t * head, + const char *name, + const char *val) +{ + name_val_array_t prev, array; + unsigned name_len = strlen(name); + unsigned val_len = (val==NULL)?0:strlen(val); + + if (*head == NULL) { + *head = + gnutls_malloc(val_len + name_len + 2 + + sizeof(struct name_val_array_st)); + if (*head == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + array = *head; + append(array, name, name_len, val, val_len); + } else { + array = *head; + prev = array; + + while (array != NULL) { + prev = array; + array = prev->next; + } + prev->next = + gnutls_malloc(name_len + val_len + 2 + + sizeof(struct name_val_array_st)); + array = prev->next; + + if (array == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + append(array, name, name_len, val, val_len); + } + + return 0; +} + +#endif diff --git a/lib/nettle/Makefile.am b/lib/nettle/Makefile.am index 1cc251c84e..936f20c6ad 100644 --- a/lib/nettle/Makefile.am +++ b/lib/nettle/Makefile.am @@ -16,7 +16,7 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see include $(top_srcdir)/lib/common.mk @@ -24,6 +24,7 @@ AM_CFLAGS += $(HOGWEED_CFLAGS) $(GMP_CFLAGS) AM_CPPFLAGS = \ -I$(srcdir)/int \ + -I$(srcdir)/backport \ -I$(srcdir)/../../gl \ -I$(builddir)/../../gl \ -I$(srcdir)/../includes \ @@ -38,9 +39,14 @@ endif noinst_LTLIBRARIES = libcrypto.la libcrypto_la_SOURCES = pk.c mpi.c mac.c cipher.c init.c \ - gnettle.h rnd-common.h \ + gnettle.h rnd-common.h prf.c \ rnd.c int/rsa-fips.h int/rsa-keygen-fips186.c int/provable-prime.c \ - int/dsa-fips.h int/dsa-keygen-fips186.c int/dsa-validate.c + int/dsa-fips.h int/dsa-keygen-fips186.c int/dsa-validate.c \ + int/tls1-prf.c int/tls1-prf.h \ + int/dsa-compute-k.c int/dsa-compute-k.h \ + int/ecdsa-compute-k.c int/ecdsa-compute-k.h \ + int/mpn-base256.c int/mpn-base256.h \ + int/block8.h backport/block-internal.h if WINDOWS libcrypto_la_SOURCES += sysrng-windows.c @@ -48,11 +54,145 @@ else if HAVE_GETENTROPY libcrypto_la_SOURCES += sysrng-getentropy.c else +if HAVE_KERN_ARND +libcrypto_la_SOURCES += sysrng-netbsd.c +else libcrypto_la_SOURCES += sysrng-linux.c endif endif +endif + +libcrypto_la_SOURCES += rnd-fuzzer.c if ENABLE_FIPS140 libcrypto_la_SOURCES += rnd-fips.c int/drbg-aes-self-test.c \ int/drbg-aes.c int/drbg-aes.h endif + +if ENABLE_GOST +libcrypto_la_SOURCES += \ + gost/nettle-write.h gost/write-le32.c \ + gost/gost28147.c gost/gost28147.h gost/gost-wrap.c \ + gost/gosthash94.c gost/gosthash94.h gost/gosthash94-meta.c \ + gost/streebog.c gost/streebog.h gost/streebog-meta.c \ + gost/hmac-gosthash94.c gost/hmac-streebog.c gost/hmac-gost.h + +libcrypto_la_SOURCES += \ + gost/bignum-le.c gost/bignum-le.h + +libcrypto_la_SOURCES += \ + gost/gostdsa-mask.c gost/gostdsa2.h + +libcrypto_la_SOURCES += gost_keywrap.c +endif + +if NEED_INT_ECC +ecc_generated_headers = \ + ecc/ecc-gost-gc256b-32.h ecc/ecc-gost-gc256b-64.h \ + ecc/ecc-gost-gc512a-32.h ecc/ecc-gost-gc512a-64.h \ + ecc/ecc-curve448-32.h ecc/ecc-curve448-64.h + +BUILT_SOURCES = $(ecc_generated_headers) +EXTRA_DIST = $(ecc_generated_headers) ecc/eccdata.stamp + +noinst_PROGRAMS = ecc/eccdata$(EXEEXT) + +ecc_eccdata_SOURCES = ecc/eccdata.c +ecc_eccdata_CFLAGS = $(GMP_CFLAGS) +ecc_eccdata_LDADD = $(GMP_LIBS) ../../gl/libgnu.la + +ecc/eccdata.stamp: $(ecc_eccdata_SOURCES) + $(AM_V_GEN)$(MAKE) $(AM_MAKEFLAGS) ecc/eccdata$(EXEEXT) && touch $@ + +ecc/ecc-curve448-32.h: ecc/eccdata.stamp + $(AM_V_GEN)ecc/eccdata$(EXEEXT) curve448 38 6 32 > $@T && mv $@T $@ + +ecc/ecc-curve448-64.h: ecc/eccdata.stamp + $(AM_V_GEN)ecc/eccdata$(EXEEXT) curve448 38 6 64 > $@T && mv $@T $@ + +ecc/ecc-gost-gc256b-32.h: ecc/eccdata.stamp + $(AM_V_GEN)ecc/eccdata$(EXEEXT) gost_gc256b 11 6 32 > $@T && mv $@T $@ + +ecc/ecc-gost-gc256b-64.h: ecc/eccdata.stamp + $(AM_V_GEN)ecc/eccdata$(EXEEXT) gost_gc256b 11 6 64 > $@T && mv $@T $@ + +ecc/ecc-gost-gc512a-32.h: ecc/eccdata.stamp + $(AM_V_GEN)ecc/eccdata$(EXEEXT) gost_gc512a 43 6 32 > $@T && mv $@T $@ + +ecc/ecc-gost-gc512a-64.h: ecc/eccdata.stamp + $(AM_V_GEN)ecc/eccdata$(EXEEXT) gost_gc512a 43 6 64 > $@T && mv $@T $@ + +libcrypto_la_SOURCES += \ + gost/ecc-gost-hash.c nettle-alloca.h ecc-gost-curve.h + +libcrypto_la_SOURCES += \ + ecc/write-le64.c \ + ecc/nettle-write.h ecc/gmp-glue.h ecc/gmp-glue.c + +libcrypto_la_SOURCES += \ + ecc/sha3.c ecc/sha3.h ecc/sha3-256.c \ + ecc/sha3-permute.c ecc/sha3-internal.h \ + ecc/shake256.c + +libcrypto_la_SOURCES += \ + ecc/ecc-internal.h \ + ecc/ecc-add-eh.c ecc/ecc-add-ehh.c ecc/ecc-dup-eh.c \ + ecc/ecc-eh-to-a.c ecc/ecc-mul-a-eh.c ecc/ecc-mul-g-eh.c \ + ecc/ecc-mul-m.c ecc/ecc-mod.c ecc/ecc-mod-arith.c \ + ecc/ecc-mod-inv.c \ + ecc/ecc-a-to-j.c \ + ecc/sec-tabselect.c ecc/cnd-copy.c ecc/sec-add-1.c \ + ecc/ecc-curve448.c $(ecc_genereated_headers) \ + ecc/curve448-eh-to-x.c ecc/curve448.h ecc/curve448-mul.c \ + ecc/curve448-mul-g.c + +libcrypto_la_SOURCES += \ + gost/gost-point.c gost/gost-point-mul-g.c gost/gostdsa-keygen.c \ + ecc/ecc-add-jja.c ecc/ecc-add-jjj.c ecc/ecc-dup-jj.c \ + ecc/ecc-mul-a.c ecc/ecc-mul-g.c \ + ecc/ecc-random.c \ + ecc/ecc-j-to-a.c \ + ecc/ecc-gost-gc256b.c ecc/ecc-gost-gc512a.c \ + ecc/ecc-gostdsa-sign.c ecc/ecc-gostdsa-verify.c \ + ecc/gostdsa.h ecc/gostdsa-sign.c ecc/gostdsa-verify.c ecc/gostdsa-vko.c + +libcrypto_la_SOURCES += \ + ecc/eddsa.h ecc/eddsa-compress.c ecc/eddsa-decompress.c \ + ecc/eddsa-expand.c ecc/eddsa-hash.c ecc/eddsa-internal.h \ + ecc/eddsa-pubkey.c ecc/eddsa-sign.c ecc/eddsa-verify.c \ + ecc/ed448-shake256.c ecc/ed448-shake256-pubkey.c \ + ecc/ed448-shake256-sign.c ecc/ed448-shake256-verify.c +endif + +if NEED_CFB +libcrypto_la_SOURCES += \ + backport/cfb.c backport/cfb.h +endif + +if NEED_CMAC +libcrypto_la_SOURCES += \ + backport/cmac.c backport/cmac.h \ + backport/cmac-aes128.c backport/cmac-aes256.c +endif + +if NEED_XTS +libcrypto_la_SOURCES += \ + backport/xts.c backport/xts.h \ + backport/xts-aes128.c backport/xts-aes256.c +endif + +if NEED_CHACHA +libcrypto_la_SOURCES += \ + backport/chacha-core-internal.c backport/chacha-crypt.c \ + backport/chacha-internal.h backport/chacha-poly1305.c \ + backport/chacha-poly1305.h backport/chacha-set-key.c \ + backport/chacha-set-nonce.c backport/chacha.h \ + backport/poly1305.h backport/poly1305-internal.c \ + backport/poly1305-internal.h +endif + +if NEED_SIV +libcrypto_la_SOURCES += \ + backport/siv-cmac-aes128.c backport/siv-cmac-aes256.c \ + backport/siv-cmac.c backport/siv-cmac.h +endif diff --git a/lib/nettle/cipher.c b/lib/nettle/cipher.c index 269001ae0c..70a6509f2b 100644 --- a/lib/nettle/cipher.c +++ b/lib/nettle/cipher.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -33,11 +33,40 @@ #include #include #include +#include +#if ENABLE_GOST +#ifndef HAVE_NETTLE_GOST28147_SET_KEY +#include "gost/gost28147.h" +#else +#include +#endif +#endif #include #include #include #include +#ifdef HAVE_NETTLE_CHACHA_SET_COUNTER +#include #include +#else +#include "chacha.h" +#include "chacha-poly1305.h" +#endif +#ifdef HAVE_NETTLE_CFB8_ENCRYPT +#include +#else +#include "cfb.h" +#endif /* HAVE_NETTLE_CFB8_ENCRYPT */ +#ifdef HAVE_NETTLE_XTS_ENCRYPT_MESSAGE +#include +#else +#include "xts.h" +#endif +#ifdef HAVE_NETTLE_SIV_CMAC_AES128_SET_KEY +#include +#else +#include "siv-cmac.h" +#endif #include struct nettle_cipher_ctx; @@ -87,12 +116,11 @@ struct nettle_cipher_st { nettle_set_key_func* set_decrypt_key; gen_setkey_func gen_set_key; /* for arcfour which has variable key size */ setiv_func set_iv; - unsigned fips_allowed; }; struct nettle_cipher_ctx { const struct nettle_cipher_st *cipher; - uint8_t *ctx_ptr; + void *ctx_ptr; /* always 16-aligned */ uint8_t iv[MAX_CIPHER_BLOCK_SIZE]; unsigned iv_size; @@ -131,6 +159,80 @@ _cbc_decrypt(struct nettle_cipher_ctx *ctx, size_t length, uint8_t * dst, length, dst, src); } +#if ENABLE_GOST +static void +_cfb_encrypt(struct nettle_cipher_ctx *ctx, size_t length, uint8_t * dst, + const uint8_t * src) +{ + cfb_encrypt(ctx->ctx_ptr, ctx->cipher->encrypt_block, + ctx->iv_size, ctx->iv, + length, dst, src); +} + +static void +_cfb_decrypt(struct nettle_cipher_ctx *ctx, size_t length, uint8_t * dst, + const uint8_t * src) +{ + cfb_decrypt(ctx->ctx_ptr, ctx->cipher->encrypt_block, + ctx->iv_size, ctx->iv, + length, dst, src); +} + +static void +_gost28147_set_key_tc26z(void *ctx, const uint8_t *key) +{ + gost28147_set_param(ctx, &gost28147_param_TC26_Z); + gost28147_set_key(ctx, key); +} + +static void +_gost28147_set_key_cpa(void *ctx, const uint8_t *key) +{ + gost28147_set_param(ctx, &gost28147_param_CryptoPro_A); + gost28147_set_key(ctx, key); +} + +static void +_gost28147_set_key_cpb(void *ctx, const uint8_t *key) +{ + gost28147_set_param(ctx, &gost28147_param_CryptoPro_B); + gost28147_set_key(ctx, key); +} + +static void +_gost28147_set_key_cpc(void *ctx, const uint8_t *key) +{ + gost28147_set_param(ctx, &gost28147_param_CryptoPro_C); + gost28147_set_key(ctx, key); +} + +static void +_gost28147_set_key_cpd(void *ctx, const uint8_t *key) +{ + gost28147_set_param(ctx, &gost28147_param_CryptoPro_D); + gost28147_set_key(ctx, key); +} + +static void +_gost28147_cnt_set_key_tc26z(void *ctx, const uint8_t *key) +{ + gost28147_cnt_init(ctx, key, &gost28147_param_TC26_Z); +} + +static void +_gost28147_cnt_set_nonce (void *ctx, size_t length, const uint8_t *nonce) +{ + gost28147_cnt_set_iv (ctx, nonce); +} + +static void +_gost28147_cnt_crypt(struct nettle_cipher_ctx *ctx, size_t length, uint8_t * dst, + const uint8_t * src) +{ + gost28147_cnt_crypt((void *)ctx->ctx_ptr, length, dst, src); +} +#endif + static void _ccm_encrypt(struct nettle_cipher_ctx *ctx, size_t nonce_size, const void *nonce, @@ -159,6 +261,78 @@ _ccm_decrypt(struct nettle_cipher_ctx *ctx, tag_size, length, dst, src); } +static void +_siv_cmac_aes128_encrypt_message(struct nettle_cipher_ctx *ctx, + size_t nonce_size, const void *nonce, + size_t auth_size, const void *auth, + size_t tag_size, + size_t length, uint8_t * dst, + const uint8_t * src) +{ + siv_cmac_aes128_encrypt_message((void*)ctx->ctx_ptr, + nonce_size, nonce, + auth_size, auth, + length, dst, src); +} + +static int +_siv_cmac_aes128_decrypt_message(struct nettle_cipher_ctx *ctx, + size_t nonce_size, const void *nonce, + size_t auth_size, const void *auth, + size_t tag_size, + size_t length, uint8_t * dst, + const uint8_t * src) +{ + return siv_cmac_aes128_decrypt_message((void*)ctx->ctx_ptr, + nonce_size, nonce, + auth_size, auth, + length, dst, src); +} + +static void +_siv_cmac_aes256_encrypt_message(struct nettle_cipher_ctx *ctx, + size_t nonce_size, const void *nonce, + size_t auth_size, const void *auth, + size_t tag_size, + size_t length, uint8_t * dst, + const uint8_t * src) +{ + siv_cmac_aes256_encrypt_message((void*)ctx->ctx_ptr, + nonce_size, nonce, + auth_size, auth, + length, dst, src); +} + +static int +_siv_cmac_aes256_decrypt_message(struct nettle_cipher_ctx *ctx, + size_t nonce_size, const void *nonce, + size_t auth_size, const void *auth, + size_t tag_size, + size_t length, uint8_t * dst, + const uint8_t * src) +{ + return siv_cmac_aes256_decrypt_message((void*)ctx->ctx_ptr, + nonce_size, nonce, + auth_size, auth, + length, dst, src); +} + +static void +_chacha_set_nonce(struct chacha_ctx *ctx, + size_t length, const uint8_t *nonce) +{ + chacha_set_nonce(ctx, nonce + CHACHA_COUNTER_SIZE); + chacha_set_counter(ctx, nonce); +} + +static void +_chacha_set_nonce96(struct chacha_ctx *ctx, + size_t length, const uint8_t *nonce) +{ + chacha_set_nonce96(ctx, nonce + CHACHA_COUNTER32_SIZE); + chacha_set_counter32(ctx, nonce); +} + static void _chacha_poly1305_set_nonce (struct chacha_poly1305_ctx *ctx, size_t length, const uint8_t *nonce) @@ -189,6 +363,106 @@ _gcm_decrypt(struct nettle_cipher_ctx *ctx, size_t length, uint8_t * dst, length, dst, src); } +static void _des_set_key(struct des_ctx *ctx, const uint8_t *key) +{ + des_set_key(ctx, key); +} + +static void _des3_set_key(struct des3_ctx *ctx, const uint8_t *key) +{ + des3_set_key(ctx, key); +} + +static void +_cfb8_encrypt(struct nettle_cipher_ctx *ctx, size_t length, uint8_t * dst, + const uint8_t * src) +{ + cfb8_encrypt(ctx->ctx_ptr, ctx->cipher->encrypt_block, + ctx->iv_size, ctx->iv, + length, dst, src); +} + +static void +_cfb8_decrypt(struct nettle_cipher_ctx *ctx, size_t length, uint8_t * dst, + const uint8_t * src) +{ + cfb8_decrypt(ctx->ctx_ptr, ctx->cipher->encrypt_block, + ctx->iv_size, ctx->iv, + length, dst, src); +} + +static void +_xts_aes128_set_encrypt_key(struct xts_aes128_key *xts_key, + const uint8_t *key) +{ + if (_gnutls_fips_mode_enabled() && + safe_memcmp(key, key + AES128_KEY_SIZE, AES128_KEY_SIZE) == 0) + _gnutls_switch_lib_state(LIB_STATE_ERROR); + + xts_aes128_set_encrypt_key(xts_key, key); +} + +static void +_xts_aes128_set_decrypt_key(struct xts_aes128_key *xts_key, + const uint8_t *key) +{ + if (_gnutls_fips_mode_enabled() && + safe_memcmp(key, key + AES128_KEY_SIZE, AES128_KEY_SIZE) == 0) + _gnutls_switch_lib_state(LIB_STATE_ERROR); + + xts_aes128_set_decrypt_key(xts_key, key); +} + +static void +_xts_aes256_set_encrypt_key(struct xts_aes256_key *xts_key, + const uint8_t *key) +{ + if (_gnutls_fips_mode_enabled() && + safe_memcmp(key, key + AES256_KEY_SIZE, AES256_KEY_SIZE) == 0) + _gnutls_switch_lib_state(LIB_STATE_ERROR); + + xts_aes256_set_encrypt_key(xts_key, key); +} + +static void +_xts_aes256_set_decrypt_key(struct xts_aes256_key *xts_key, + const uint8_t *key) +{ + if (_gnutls_fips_mode_enabled() && + safe_memcmp(key, key + AES256_KEY_SIZE, AES256_KEY_SIZE) == 0) + _gnutls_switch_lib_state(LIB_STATE_ERROR); + + xts_aes256_set_decrypt_key(xts_key, key); +} + +static void +_xts_aes128_encrypt(struct nettle_cipher_ctx *ctx, size_t length, uint8_t * dst, + const uint8_t * src) +{ + xts_aes128_encrypt_message(ctx->ctx_ptr, ctx->iv, length, dst, src); +} + +static void +_xts_aes128_decrypt(struct nettle_cipher_ctx *ctx, size_t length, uint8_t * dst, + const uint8_t * src) +{ + xts_aes128_decrypt_message(ctx->ctx_ptr, ctx->iv, length, dst, src); +} + +static void +_xts_aes256_encrypt(struct nettle_cipher_ctx *ctx, size_t length, uint8_t * dst, + const uint8_t * src) +{ + xts_aes256_encrypt_message(ctx->ctx_ptr, ctx->iv, length, dst, src); +} + +static void +_xts_aes256_decrypt(struct nettle_cipher_ctx *ctx, size_t length, uint8_t * dst, + const uint8_t * src) +{ + xts_aes256_decrypt_message(ctx->ctx_ptr, ctx->iv, length, dst, src); +} + static const struct nettle_cipher_st builtin_ciphers[] = { { .algo = GNUTLS_CIPHER_AES_128_GCM, .block_size = AES_BLOCK_SIZE, @@ -206,7 +480,6 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .auth = (nettle_hash_update_func*)gcm_aes128_update, .set_iv = (setiv_func)gcm_aes128_set_iv, .max_iv_size = GCM_IV_SIZE, - .fips_allowed = 1 }, { .algo = GNUTLS_CIPHER_AES_256_GCM, .block_size = AES_BLOCK_SIZE, @@ -224,7 +497,6 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .auth = (nettle_hash_update_func*)gcm_aes256_update, .set_iv = (setiv_func)gcm_aes256_set_iv, .max_iv_size = GCM_IV_SIZE, - .fips_allowed = 1 }, { .algo = GNUTLS_CIPHER_AES_128_CCM, .block_size = AES_BLOCK_SIZE, @@ -238,7 +510,6 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .set_encrypt_key = (nettle_set_key_func*)aes128_set_encrypt_key, .set_decrypt_key = (nettle_set_key_func*)aes128_set_encrypt_key, .max_iv_size = CCM_MAX_NONCE_SIZE, - .fips_allowed = 1 }, { .algo = GNUTLS_CIPHER_AES_128_CCM_8, .block_size = AES_BLOCK_SIZE, @@ -252,7 +523,6 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .set_encrypt_key = (nettle_set_key_func*)aes128_set_encrypt_key, .set_decrypt_key = (nettle_set_key_func*)aes128_set_encrypt_key, .max_iv_size = CCM_MAX_NONCE_SIZE, - .fips_allowed = 1 }, { .algo = GNUTLS_CIPHER_AES_256_CCM, .block_size = AES_BLOCK_SIZE, @@ -266,7 +536,6 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .set_encrypt_key = (nettle_set_key_func*)aes256_set_encrypt_key, .set_decrypt_key = (nettle_set_key_func*)aes256_set_encrypt_key, .max_iv_size = CCM_MAX_NONCE_SIZE, - .fips_allowed = 1 }, { .algo = GNUTLS_CIPHER_AES_256_CCM_8, .block_size = AES_BLOCK_SIZE, @@ -280,7 +549,6 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .set_encrypt_key = (nettle_set_key_func*)aes256_set_encrypt_key, .set_decrypt_key = (nettle_set_key_func*)aes256_set_encrypt_key, .max_iv_size = CCM_MAX_NONCE_SIZE, - .fips_allowed = 1 }, { .algo = GNUTLS_CIPHER_CAMELLIA_128_GCM, .block_size = CAMELLIA_BLOCK_SIZE, @@ -326,7 +594,6 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .set_encrypt_key = (nettle_set_key_func*)aes128_set_encrypt_key, .set_decrypt_key = (nettle_set_key_func*)aes128_set_decrypt_key, .max_iv_size = AES_BLOCK_SIZE, - .fips_allowed = 1 }, { .algo = GNUTLS_CIPHER_AES_192_CBC, .block_size = AES_BLOCK_SIZE, @@ -340,7 +607,6 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .set_encrypt_key = (nettle_set_key_func*)aes192_set_encrypt_key, .set_decrypt_key = (nettle_set_key_func*)aes192_set_decrypt_key, .max_iv_size = AES_BLOCK_SIZE, - .fips_allowed = 1 }, { .algo = GNUTLS_CIPHER_AES_256_CBC, .block_size = AES_BLOCK_SIZE, @@ -354,7 +620,6 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .set_encrypt_key = (nettle_set_key_func*)aes256_set_encrypt_key, .set_decrypt_key = (nettle_set_key_func*)aes256_set_decrypt_key, .max_iv_size = AES_BLOCK_SIZE, - .fips_allowed = 1 }, { .algo = GNUTLS_CIPHER_CAMELLIA_128_CBC, .block_size = CAMELLIA_BLOCK_SIZE, @@ -417,8 +682,8 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .ctx_size = sizeof(struct CBC_CTX(struct des_ctx, DES_BLOCK_SIZE)), .encrypt = _cbc_encrypt, .decrypt = _cbc_decrypt, - .set_encrypt_key = (nettle_set_key_func*)des_set_key, - .set_decrypt_key = (nettle_set_key_func*)des_set_key, + .set_encrypt_key = (nettle_set_key_func*)_des_set_key, + .set_decrypt_key = (nettle_set_key_func*)_des_set_key, .max_iv_size = DES_BLOCK_SIZE, }, { .algo = GNUTLS_CIPHER_3DES_CBC, @@ -430,10 +695,9 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .ctx_size = sizeof(struct CBC_CTX(struct des3_ctx, DES3_BLOCK_SIZE)), .encrypt = _cbc_encrypt, .decrypt = _cbc_decrypt, - .set_encrypt_key = (nettle_set_key_func*)des3_set_key, - .set_decrypt_key = (nettle_set_key_func*)des3_set_key, + .set_encrypt_key = (nettle_set_key_func*)_des3_set_key, + .set_decrypt_key = (nettle_set_key_func*)_des3_set_key, .max_iv_size = DES_BLOCK_SIZE, - .fips_allowed = 1 }, { .algo = GNUTLS_CIPHER_ARCFOUR_128, .block_size = 1, @@ -474,6 +738,36 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .set_decrypt_key = (nettle_set_key_func*)salsa20_256_set_key, .max_iv_size = SALSA20_NONCE_SIZE, }, + { .algo = GNUTLS_CIPHER_CHACHA20_32, + .block_size = 1, + .key_size = CHACHA_KEY_SIZE, + .encrypt_block = (nettle_cipher_func*)chacha_crypt32, + .decrypt_block = (nettle_cipher_func*)chacha_crypt32, + + .ctx_size = sizeof(struct chacha_ctx), + .encrypt = _stream_encrypt, + .decrypt = _stream_encrypt, + .set_encrypt_key = (nettle_set_key_func*)chacha_set_key, + .set_decrypt_key = (nettle_set_key_func*)chacha_set_key, + .set_iv = (setiv_func)_chacha_set_nonce96, + /* we allow setting the initial block counter as part of nonce */ + .max_iv_size = CHACHA_NONCE96_SIZE + CHACHA_COUNTER32_SIZE, + }, + { .algo = GNUTLS_CIPHER_CHACHA20_64, + .block_size = 1, + .key_size = CHACHA_KEY_SIZE, + .encrypt_block = (nettle_cipher_func*)chacha_crypt, + .decrypt_block = (nettle_cipher_func*)chacha_crypt, + + .ctx_size = sizeof(struct chacha_ctx), + .encrypt = _stream_encrypt, + .decrypt = _stream_encrypt, + .set_encrypt_key = (nettle_set_key_func*)chacha_set_key, + .set_decrypt_key = (nettle_set_key_func*)chacha_set_key, + .set_iv = (setiv_func)_chacha_set_nonce, + /* we allow setting the initial block counter as part of nonce */ + .max_iv_size = CHACHA_NONCE_SIZE + CHACHA_COUNTER_SIZE, + }, { .algo = GNUTLS_CIPHER_CHACHA20_POLY1305, .block_size = CHACHA_POLY1305_BLOCK_SIZE, .key_size = CHACHA_POLY1305_KEY_SIZE, @@ -490,6 +784,170 @@ static const struct nettle_cipher_st builtin_ciphers[] = { .set_iv = (setiv_func)_chacha_poly1305_set_nonce, .max_iv_size = CHACHA_POLY1305_NONCE_SIZE, }, +#if ENABLE_GOST + { + .algo = GNUTLS_CIPHER_GOST28147_TC26Z_CFB, + .block_size = GOST28147_BLOCK_SIZE, + .key_size = GOST28147_KEY_SIZE, + .encrypt_block = (nettle_cipher_func*)gost28147_encrypt_for_cfb, + .decrypt_block = (nettle_cipher_func*)gost28147_encrypt_for_cfb, + + .ctx_size = sizeof(struct CFB_CTX(struct gost28147_ctx, GOST28147_BLOCK_SIZE)), + .encrypt = _cfb_encrypt, + .decrypt = _cfb_decrypt, + .set_encrypt_key = _gost28147_set_key_tc26z, + .set_decrypt_key = _gost28147_set_key_tc26z, + }, + { + .algo = GNUTLS_CIPHER_GOST28147_CPA_CFB, + .block_size = GOST28147_BLOCK_SIZE, + .key_size = GOST28147_KEY_SIZE, + .encrypt_block = (nettle_cipher_func*)gost28147_encrypt_for_cfb, + .decrypt_block = (nettle_cipher_func*)gost28147_encrypt_for_cfb, + + .ctx_size = sizeof(struct CFB_CTX(struct gost28147_ctx, GOST28147_BLOCK_SIZE)), + .encrypt = _cfb_encrypt, + .decrypt = _cfb_decrypt, + .set_encrypt_key = _gost28147_set_key_cpa, + .set_decrypt_key = _gost28147_set_key_cpa, + }, + { + .algo = GNUTLS_CIPHER_GOST28147_CPB_CFB, + .block_size = GOST28147_BLOCK_SIZE, + .key_size = GOST28147_KEY_SIZE, + .encrypt_block = (nettle_cipher_func*)gost28147_encrypt_for_cfb, + .decrypt_block = (nettle_cipher_func*)gost28147_encrypt_for_cfb, + + .ctx_size = sizeof(struct CFB_CTX(struct gost28147_ctx, GOST28147_BLOCK_SIZE)), + .encrypt = _cfb_encrypt, + .decrypt = _cfb_decrypt, + .set_encrypt_key = _gost28147_set_key_cpb, + .set_decrypt_key = _gost28147_set_key_cpb, + }, + { + .algo = GNUTLS_CIPHER_GOST28147_CPC_CFB, + .block_size = GOST28147_BLOCK_SIZE, + .key_size = GOST28147_KEY_SIZE, + .encrypt_block = (nettle_cipher_func*)gost28147_encrypt_for_cfb, + .decrypt_block = (nettle_cipher_func*)gost28147_encrypt_for_cfb, + + .ctx_size = sizeof(struct CFB_CTX(struct gost28147_ctx, GOST28147_BLOCK_SIZE)), + .encrypt = _cfb_encrypt, + .decrypt = _cfb_decrypt, + .set_encrypt_key = _gost28147_set_key_cpc, + .set_decrypt_key = _gost28147_set_key_cpc, + }, + { + .algo = GNUTLS_CIPHER_GOST28147_CPD_CFB, + .block_size = GOST28147_BLOCK_SIZE, + .key_size = GOST28147_KEY_SIZE, + .encrypt_block = (nettle_cipher_func*)gost28147_encrypt_for_cfb, + .decrypt_block = (nettle_cipher_func*)gost28147_encrypt_for_cfb, + + .ctx_size = sizeof(struct CFB_CTX(struct gost28147_ctx, GOST28147_BLOCK_SIZE)), + .encrypt = _cfb_encrypt, + .decrypt = _cfb_decrypt, + .set_encrypt_key = _gost28147_set_key_cpd, + .set_decrypt_key = _gost28147_set_key_cpd, + }, + { + .algo = GNUTLS_CIPHER_GOST28147_TC26Z_CNT, + .block_size = GOST28147_BLOCK_SIZE, + .key_size = GOST28147_KEY_SIZE, + .encrypt_block = (nettle_cipher_func*)gost28147_encrypt, /* unused */ + .decrypt_block = (nettle_cipher_func*)gost28147_decrypt, /* unused */ + + .ctx_size = sizeof(struct gost28147_cnt_ctx), + .encrypt = _gost28147_cnt_crypt, + .decrypt = _gost28147_cnt_crypt, + .set_encrypt_key = _gost28147_cnt_set_key_tc26z, + .set_decrypt_key = _gost28147_cnt_set_key_tc26z, + .set_iv = (setiv_func)_gost28147_cnt_set_nonce, + }, +#endif + { .algo = GNUTLS_CIPHER_AES_128_CFB8, + .block_size = AES_BLOCK_SIZE, + .key_size = AES128_KEY_SIZE, + .encrypt_block = (nettle_cipher_func*)aes128_encrypt, + .decrypt_block = (nettle_cipher_func*)aes128_encrypt, + + .ctx_size = sizeof(struct CFB8_CTX(struct aes128_ctx, AES_BLOCK_SIZE)), + .encrypt = _cfb8_encrypt, + .decrypt = _cfb8_decrypt, + .set_encrypt_key = (nettle_set_key_func*)aes128_set_encrypt_key, + .set_decrypt_key = (nettle_set_key_func*)aes128_set_encrypt_key, + .max_iv_size = AES_BLOCK_SIZE, + }, + { .algo = GNUTLS_CIPHER_AES_192_CFB8, + .block_size = AES_BLOCK_SIZE, + .key_size = AES192_KEY_SIZE, + .encrypt_block = (nettle_cipher_func*)aes192_encrypt, + .decrypt_block = (nettle_cipher_func*)aes192_encrypt, + + .ctx_size = sizeof(struct CFB8_CTX(struct aes192_ctx, AES_BLOCK_SIZE)), + .encrypt = _cfb8_encrypt, + .decrypt = _cfb8_decrypt, + .set_encrypt_key = (nettle_set_key_func*)aes192_set_encrypt_key, + .set_decrypt_key = (nettle_set_key_func*)aes192_set_encrypt_key, + .max_iv_size = AES_BLOCK_SIZE, + }, + { .algo = GNUTLS_CIPHER_AES_256_CFB8, + .block_size = AES_BLOCK_SIZE, + .key_size = AES256_KEY_SIZE, + .encrypt_block = (nettle_cipher_func*)aes256_encrypt, + .decrypt_block = (nettle_cipher_func*)aes256_encrypt, + + .ctx_size = sizeof(struct CFB8_CTX(struct aes256_ctx, AES_BLOCK_SIZE)), + .encrypt = _cfb8_encrypt, + .decrypt = _cfb8_decrypt, + .set_encrypt_key = (nettle_set_key_func*)aes256_set_encrypt_key, + .set_decrypt_key = (nettle_set_key_func*)aes256_set_encrypt_key, + .max_iv_size = AES_BLOCK_SIZE, + }, + { .algo = GNUTLS_CIPHER_AES_128_XTS, + .block_size = AES_BLOCK_SIZE, + .key_size = AES128_KEY_SIZE * 2, + + .ctx_size = sizeof(struct xts_aes128_key), + .encrypt = _xts_aes128_encrypt, + .decrypt = _xts_aes128_decrypt, + .set_encrypt_key = (nettle_set_key_func*)_xts_aes128_set_encrypt_key, + .set_decrypt_key = (nettle_set_key_func*)_xts_aes128_set_decrypt_key, + .max_iv_size = AES_BLOCK_SIZE, + }, + { .algo = GNUTLS_CIPHER_AES_256_XTS, + .block_size = AES_BLOCK_SIZE, + .key_size = AES256_KEY_SIZE * 2, + + .ctx_size = sizeof(struct xts_aes256_key), + .encrypt = _xts_aes256_encrypt, + .decrypt = _xts_aes256_decrypt, + .set_encrypt_key = (nettle_set_key_func*)_xts_aes256_set_encrypt_key, + .set_decrypt_key = (nettle_set_key_func*)_xts_aes256_set_decrypt_key, + .max_iv_size = AES_BLOCK_SIZE, + }, + { .algo = GNUTLS_CIPHER_AES_128_SIV, + .block_size = SIV_BLOCK_SIZE, + .key_size = SIV_CMAC_AES128_KEY_SIZE, + + .ctx_size = sizeof(struct siv_cmac_aes128_ctx), + .aead_encrypt = (aead_encrypt_func)_siv_cmac_aes128_encrypt_message, + .aead_decrypt = (aead_decrypt_func)_siv_cmac_aes128_decrypt_message, + .set_encrypt_key = (nettle_set_key_func*)siv_cmac_aes128_set_key, + .set_decrypt_key = (nettle_set_key_func*)siv_cmac_aes128_set_key, + .max_iv_size = SIV_DIGEST_SIZE, + }, + { .algo = GNUTLS_CIPHER_AES_256_SIV, + .block_size = SIV_BLOCK_SIZE, + .key_size = SIV_CMAC_AES256_KEY_SIZE, + + .ctx_size = sizeof(struct siv_cmac_aes256_ctx), + .aead_encrypt = (aead_encrypt_func)_siv_cmac_aes256_encrypt_message, + .aead_decrypt = (aead_decrypt_func)_siv_cmac_aes256_decrypt_message, + .set_encrypt_key = (nettle_set_key_func*)siv_cmac_aes256_set_key, + .set_decrypt_key = (nettle_set_key_func*)siv_cmac_aes256_set_key, + .max_iv_size = SIV_DIGEST_SIZE, + }, }; static int wrap_nettle_cipher_exists(gnutls_cipher_algorithm_t algo) @@ -497,13 +955,7 @@ static int wrap_nettle_cipher_exists(gnutls_cipher_algorithm_t algo) unsigned i; for (i=0;ienc = enc; - ctx->ctx_ptr = ((uint8_t*)ctx) + sizeof(*ctx); + ctx_ptr = ((uint8_t*)ctx) + sizeof(*ctx); - cur_alignment = ((ptrdiff_t)ctx->ctx_ptr) % 16; + cur_alignment = ((ptrdiff_t)ctx_ptr) % 16; if (cur_alignment > 0) - ctx->ctx_ptr += 16 - cur_alignment; + ctx_ptr += 16 - cur_alignment; + ctx->ctx_ptr = ctx_ptr; ctx->cipher = &builtin_ciphers[idx]; *_ctx = ctx; @@ -580,8 +1031,7 @@ wrap_nettle_cipher_setiv(void *_ctx, const void *iv, size_t iv_size) switch (ctx->cipher->algo) { case GNUTLS_CIPHER_AES_128_GCM: case GNUTLS_CIPHER_AES_256_GCM: - if (_gnutls_fips_mode_enabled() != 0 && iv_size < GCM_IV_SIZE) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + FIPS_RULE(iv_size < GCM_IV_SIZE, GNUTLS_E_INVALID_REQUEST, "access to short GCM nonce size\n"); break; case GNUTLS_CIPHER_SALSA20_256: case GNUTLS_CIPHER_ESTREAM_SALSA20_256: @@ -610,6 +1060,19 @@ wrap_nettle_cipher_setiv(void *_ctx, const void *iv, size_t iv_size) return 0; } +static int +wrap_nettle_cipher_getiv(void *_ctx, void *iv, size_t iv_size) +{ + struct nettle_cipher_ctx *ctx = _ctx; + + if (iv_size < ctx->iv_size) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + memcpy(iv, ctx->iv, ctx->iv_size); + + return (int) ctx->iv_size; +} + static int wrap_nettle_cipher_decrypt(void *_ctx, const void *encr, size_t encr_size, void *plain, size_t plain_size) @@ -744,6 +1207,7 @@ gnutls_crypto_cipher_st _gnutls_cipher_ops = { .init = wrap_nettle_cipher_init, .exists = wrap_nettle_cipher_exists, .setiv = wrap_nettle_cipher_setiv, + .getiv = wrap_nettle_cipher_getiv, .setkey = wrap_nettle_cipher_setkey, .encrypt = wrap_nettle_cipher_encrypt, .decrypt = wrap_nettle_cipher_decrypt, diff --git a/lib/nettle/ecc-gost-curve.h b/lib/nettle/ecc-gost-curve.h new file mode 100644 index 0000000000..c2b989c48e --- /dev/null +++ b/lib/nettle/ecc-gost-curve.h @@ -0,0 +1,73 @@ +/* ecc-gost-curve.h + + Copyright (C) 2013 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +/* Development of Nettle's ECC support was funded by the .SE Internet Fund. */ + +#ifndef GNUTLS_LIB_NETTLE_GOST_ECC_GOST_CURVE_H +#define GNUTLS_LIB_NETTLE_GOST_ECC_GOST_CURVE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* The contents of this struct is internal. */ +struct ecc_curve; + +#ifndef NETTLE_PURE +#ifdef __GNUC__ +#define NETTLE_PURE __attribute__((pure)) +#else +#define NETTLE_PURE +#endif +#endif + +#define gost_point_mul_g _gnutls_nettle_ecc_gost_point_mul_g +#define gost_point_set _gnutls_nettle_ecc_gost_point_set +#define gostdsa_generate_keypair _gnutls_nettle_ecc_gostdsa_generate_keypair +void +gost_point_mul_g (struct ecc_point *r, const struct ecc_scalar *n); +int +gost_point_set (struct ecc_point *p, const mpz_t x, const mpz_t y); +void +gostdsa_generate_keypair (struct ecc_point *pub, + struct ecc_scalar *key, + void *random_ctx, nettle_random_func *random); + +#define nettle_get_gost_gc256b _gnutls_nettle_ecc_get_gost_gc256b +#define nettle_get_gost_gc512a _gnutls_nettle_ecc_get_gost_gc512a +const struct ecc_curve * NETTLE_PURE nettle_get_gost_gc256b(void); +const struct ecc_curve * NETTLE_PURE nettle_get_gost_gc512a(void); + +#ifdef __cplusplus +} +#endif + +#endif /* GNUTLS_LIB_NETTLE_GOST_ECC_GOST_CURVE_H */ diff --git a/lib/nettle/gnettle.h b/lib/nettle/gnettle.h index e27149c3ea..f47569bfc6 100644 --- a/lib/nettle/gnettle.h +++ b/lib/nettle/gnettle.h @@ -1,3 +1,8 @@ +#ifndef GNUTLS_LIB_NETTLE_GNETTLE_H +#define GNUTLS_LIB_NETTLE_GNETTLE_H + #define PRIME_CHECK_PARAM 8 #define TOMPZ(x) ((__mpz_struct*)(x)) #define SIZEOF_MPZT sizeof(__mpz_struct) + +#endif /* GNUTLS_LIB_NETTLE_GNETTLE_H */ diff --git a/lib/nettle/gost/bignum-le.c b/lib/nettle/gost/bignum-le.c new file mode 100644 index 0000000000..9faa2821a1 --- /dev/null +++ b/lib/nettle/gost/bignum-le.c @@ -0,0 +1,78 @@ +/* bignum.c + + Bignum operations that are missing from gmp. + + Copyright (C) 2001 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include + +#include +#include "bignum-le.h" + +void +nettle_mpz_get_str_256_u_le(size_t length, uint8_t *s, const mpz_t x) +{ + if (!length) + { + /* x must be zero */ + assert(!mpz_sgn(x)); + return; + } + + size_t count; + + assert(nettle_mpz_sizeinbase_256_u(x) <= length); + mpz_export(s, &count, -1, 1, 0, 0, x); + memset(s + count, 0, length - count); +} + +#define nettle_mpz_from_octets_le(x, length, s) \ + mpz_import((x), (length), -1, 1, 0, 0, (s)) + +void +nettle_mpz_set_str_256_u_le(mpz_t x, + size_t length, const uint8_t *s) +{ + nettle_mpz_from_octets_le(x, length, s); +} + +void +nettle_mpz_init_set_str_256_u_le(mpz_t x, + size_t length, const uint8_t *s) +{ + mpz_init(x); + nettle_mpz_from_octets_le(x, length, s); +} diff --git a/lib/nettle/gost/bignum-le.h b/lib/nettle/gost/bignum-le.h new file mode 100644 index 0000000000..3672ad2ef3 --- /dev/null +++ b/lib/nettle/gost/bignum-le.h @@ -0,0 +1,71 @@ +/* bignum.h + + Bignum operations that are missing from gmp. + + Copyright (C) 2001 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#ifndef GNUTLS_LIB_NETTLE_GOST_BIGNUM_LE_H +#define GNUTLS_LIB_NETTLE_GOST_BIGNUM_LE_H + +#include + +#include + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define nettle_mpz_sizeinbase_256_u_le nettle_mpz_sizeinbase_256_u + +#define nettle_mpz_get_str_256_u_le _gnutls_mpz_get_str_256_u_le +#define nettle_mpz_set_str_256_u_le _gnutls_mpz_set_str_256_u_le +#define nettle_mpz_init_set_str_256_u_le _gnutls_mpz_init_set_str_256_u_le + +/* Writes an integer as length octets, using big endian byte order, + * and unsigned number format. */ +void +nettle_mpz_get_str_256_u_le(size_t length, uint8_t *s, const mpz_t x); + + +void +nettle_mpz_set_str_256_u_le(mpz_t x, + size_t length, const uint8_t *s); + +void +nettle_mpz_init_set_str_256_u_le(mpz_t x, + size_t length, const uint8_t *s); + +#ifdef __cplusplus +} +#endif + +#endif /* GNUTLS_LIB_NETTLE_GOST_BIGNUM_LE_H */ diff --git a/lib/nettle/gost/ecc-gost-hash.c b/lib/nettle/gost/ecc-gost-hash.c new file mode 100644 index 0000000000..622556c360 --- /dev/null +++ b/lib/nettle/gost/ecc-gost-hash.c @@ -0,0 +1,66 @@ +/* ecdsa-hash.c + + Copyright (C) 2013 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +/* Development of Nettle's ECC support was funded by the .SE Internet Fund. */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "ecc/ecc-internal.h" + +/* Convert hash value to an integer. If the digest is larger than + the ecc bit size, then we must truncate it and use the leftmost + bits. */ + +/* NOTE: We don't considered the hash value to be secret, so it's ok + if the running time of this conversion depends on h. + + Requires m->size + 1 limbs, the extra limb may be needed for + unusual limb sizes. +*/ + +void +gost_hash (const struct ecc_modulo *m, + mp_limb_t *hp, + size_t length, const uint8_t *digest) +{ + if (length > ((size_t) m->bit_size + 7) / 8) + length = (m->bit_size + 7) / 8; + + mpn_set_base256_le (hp, m->size + 1, digest, length); + + if (8 * length > m->bit_size) + /* We got a few extra bits, at the low end. Discard them. */ + mpn_rshift (hp, hp, m->size + 1, 8*length - m->bit_size); +} diff --git a/lib/nettle/gost/gost-point-mul-g.c b/lib/nettle/gost/gost-point-mul-g.c new file mode 100644 index 0000000000..fd6c92dbd2 --- /dev/null +++ b/lib/nettle/gost/gost-point-mul-g.c @@ -0,0 +1,58 @@ +/* ecc-point-mul-g.c + + Copyright (C) 2013 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see http://www.gnu.org/licenses/. +*/ + +/* Development of Nettle's ECC support was funded by the .SE Internet Fund. */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include +#include "ecc/ecc-internal.h" +#include "ecc-gost-curve.h" + +void +gost_point_mul_g (struct ecc_point *r, const struct ecc_scalar *n) +{ + const struct ecc_curve *ecc = r->ecc; + mp_limb_t size = ecc->p.size; + mp_size_t itch = 3*size + ecc->mul_g_itch; + mp_limb_t *scratch = gmp_alloc_limbs (itch); + + assert (n->ecc == ecc); + assert (ecc->h_to_a_itch <= ecc->mul_g_itch); + + ecc->mul_g (ecc, scratch, n->p, scratch + 3*size); + ecc->h_to_a (ecc, 0, r->p, scratch, scratch + 3*size); + gmp_free_limbs (scratch, itch); +} diff --git a/lib/nettle/gost/gost-point.c b/lib/nettle/gost/gost-point.c new file mode 100644 index 0000000000..0e9938108c --- /dev/null +++ b/lib/nettle/gost/gost-point.c @@ -0,0 +1,112 @@ +/* ecc-point.c + + Copyright (C) 2013, 2014 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see http://www.gnu.org/licenses/. +*/ + +/* Development of Nettle's ECC support was funded by the .SE Internet Fund. */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include "ecc/ecc-internal.h" +#include "ecc-gost-curve.h" + +int +gost_point_set (struct ecc_point *p, const mpz_t x, const mpz_t y) +{ + mp_size_t size; + mpz_t lhs, rhs; + mpz_t t; + int res; + + size = p->ecc->p.size; + + if (mpz_sgn (x) < 0 || mpz_limbs_cmp (x, p->ecc->p.m, size) >= 0 + || mpz_sgn (y) < 0 || mpz_limbs_cmp (y, p->ecc->p.m, size) >= 0) + return 0; + + mpz_init (lhs); + mpz_init (rhs); + + mpz_mul (lhs, y, y); + + if (p->ecc->p.bit_size == 255) + { + /* ed25519 special case. FIXME: Do in some cleaner way? */ + mpz_t x2; + mpz_init (x2); + mpz_mul (x2, x, x); + mpz_mul (rhs, x2, lhs); + /* Check that -x^2 + y^2 = 1 - (121665/121666) x^2 y^2 + or 121666 (1 + x^2 - y^2) = 121665 x^2 y^2 */ + mpz_sub (lhs, x2, lhs); + mpz_add_ui (lhs, lhs, 1); + mpz_mul_ui (lhs, lhs, 121666); + mpz_mul_ui (rhs, rhs, 121665); + mpz_clear (x2); + } + else if (p->ecc->p.bit_size == 448) + { + /* curve448 special case. FIXME: Do in some cleaner way? */ + mpz_t x2, d; + mpz_init (x2); + mpz_init_set_ui (d, 39081); + mpz_mul (x2, x, x); /* x^2 */ + mpz_mul (d, d, x2); /* 39081 x^2 */ + mpz_set_ui (rhs, 1); + mpz_submul (rhs, d, lhs); /* 1 - 39081 x^2 y^2 */ + /* Check that x^2 + y^2 = 1 - 39081 x^2 y^2 */ + mpz_add (lhs, x2, lhs); /* x^2 + y^2 */ + mpz_clear (d); + mpz_clear (x2); + } + else + { + /* Check that y^2 = x^3 - 3*x + b (mod p) */ + mpz_mul (rhs, x, x); + mpz_sub_ui (rhs, rhs, 3); + mpz_mul (rhs, rhs, x); + mpz_add (rhs, rhs, mpz_roinit_n (t, p->ecc->b, size)); + } + + res = mpz_congruent_p (lhs, rhs, mpz_roinit_n (t, p->ecc->p.m, size)); + + mpz_clear (lhs); + mpz_clear (rhs); + + if (!res) + return 0; + + mpz_limbs_copy (p->p, x, size); + mpz_limbs_copy (p->p + size, y, size); + + return 1; +} diff --git a/lib/nettle/gost/gost-wrap.c b/lib/nettle/gost/gost-wrap.c new file mode 100644 index 0000000000..e4a616ed2c --- /dev/null +++ b/lib/nettle/gost/gost-wrap.c @@ -0,0 +1,130 @@ +/* GOST 28147-89 (Magma) implementation + * + * Copyright: 2015, 2016 Dmitry Eremin-Solenikov + * Copyright: 2009-2012 Aleksey Kravchenko + * + * 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. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include + +#include +#include "gost28147.h" +#include +#include + +void +gost28147_kdf_cryptopro(const struct gost28147_param *param, + const uint8_t *in, + const uint8_t *ukm, + uint8_t *out) +{ + struct gost28147_ctx ctx; + int i; + + memcpy(out, in, GOST28147_KEY_SIZE); + for (i = 0; i < 8; i++) { + uint8_t mask; + uint8_t *p; + uint8_t iv[GOST28147_BLOCK_SIZE]; + uint32_t block[2] = {0, 0}; + uint32_t t; + + for (p = out, mask = 1; mask; mask <<= 1) { + t = LE_READ_UINT32(p); + p += 4; + if (mask & ukm[i]) + block[0] += t; + else + block[1] += t; + } + + LE_WRITE_UINT32(iv + 0, block[0]); + LE_WRITE_UINT32(iv + 4, block[1]); + + gost28147_set_key(&ctx, out); + gost28147_set_param(&ctx, param); + cfb_encrypt(&ctx, + (nettle_cipher_func*)gost28147_encrypt_for_cfb, + GOST28147_BLOCK_SIZE, iv, + GOST28147_KEY_SIZE, out, out); + } +} + +void +gost28147_key_wrap_cryptopro(const struct gost28147_param *param, + const uint8_t *kek, + const uint8_t *ukm, size_t ukm_size, + const uint8_t *cek, + uint8_t *enc, + uint8_t *imit) +{ + uint8_t kd[GOST28147_KEY_SIZE]; + struct gost28147_ctx ctx; + struct gost28147_imit_ctx ictx; + + assert(ukm_size >= GOST28147_IMIT_BLOCK_SIZE); + + gost28147_kdf_cryptopro(param, kek, ukm, kd); + gost28147_set_key(&ctx, kd); + gost28147_set_param(&ctx, param); + gost28147_encrypt(&ctx, GOST28147_KEY_SIZE, enc, cek); + + gost28147_imit_set_key(&ictx, GOST28147_KEY_SIZE, kd); + gost28147_imit_set_param(&ictx, param); + gost28147_imit_set_nonce(&ictx, ukm); + gost28147_imit_update(&ictx, GOST28147_KEY_SIZE, cek); + gost28147_imit_digest(&ictx, GOST28147_IMIT_DIGEST_SIZE, imit); +} + +int +gost28147_key_unwrap_cryptopro(const struct gost28147_param *param, + const uint8_t *kek, + const uint8_t *ukm, size_t ukm_size, + const uint8_t *enc, + const uint8_t *imit, + uint8_t *cek) +{ + uint8_t kd[GOST28147_KEY_SIZE]; + uint8_t mac[GOST28147_IMIT_DIGEST_SIZE]; + struct gost28147_ctx ctx; + struct gost28147_imit_ctx ictx; + + assert(ukm_size >= GOST28147_IMIT_BLOCK_SIZE); + + gost28147_kdf_cryptopro(param, kek, ukm, kd); + gost28147_set_key(&ctx, kd); + gost28147_set_param(&ctx, param); + gost28147_decrypt(&ctx, GOST28147_KEY_SIZE, cek, enc); + + gost28147_imit_set_key(&ictx, GOST28147_KEY_SIZE, kd); + gost28147_imit_set_param(&ictx, param); + gost28147_imit_set_nonce(&ictx, ukm); + gost28147_imit_update(&ictx, GOST28147_KEY_SIZE, cek); + gost28147_imit_digest(&ictx, GOST28147_IMIT_DIGEST_SIZE, mac); + + return memeql_sec(mac, imit, GOST28147_IMIT_DIGEST_SIZE); +} diff --git a/lib/nettle/gost/gost28147.c b/lib/nettle/gost/gost28147.c new file mode 100644 index 0000000000..8d648c1045 --- /dev/null +++ b/lib/nettle/gost/gost28147.c @@ -0,0 +1,2547 @@ +/* gost28147.c - GOST 28147-89 (Magma) cipher implementation + * + * based on Russian standard GOST 28147-89 + * For English description, check RFC 5830. + * S-Boxes are expanded from the tables defined in RFC4357: + * https://tools.ietf.org/html/rfc4357 + * + * Copyright: 2015-2015 Dmitry Eremin-Solenikov + * Copyright: 2009-2012 Aleksey Kravchenko + * + * 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. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef HAVE_NETTLE_GOST28147_SET_KEY + +#include + +#include + +#include +#include "nettle-write.h" +#include "gost28147.h" +#include + +/* pre-initialized GOST lookup tables based on rotated S-Box */ +const struct gost28147_param gost28147_param_test_3411 = +{ + 0, + { + /* 0 */ + 0x00072000, 0x00075000, 0x00074800, 0x00071000, + 0x00076800, 0x00074000, 0x00070000, 0x00077000, + 0x00073000, 0x00075800, 0x00070800, 0x00076000, + 0x00073800, 0x00077800, 0x00072800, 0x00071800, + 0x0005a000, 0x0005d000, 0x0005c800, 0x00059000, + 0x0005e800, 0x0005c000, 0x00058000, 0x0005f000, + 0x0005b000, 0x0005d800, 0x00058800, 0x0005e000, + 0x0005b800, 0x0005f800, 0x0005a800, 0x00059800, + 0x00022000, 0x00025000, 0x00024800, 0x00021000, + 0x00026800, 0x00024000, 0x00020000, 0x00027000, + 0x00023000, 0x00025800, 0x00020800, 0x00026000, + 0x00023800, 0x00027800, 0x00022800, 0x00021800, + 0x00062000, 0x00065000, 0x00064800, 0x00061000, + 0x00066800, 0x00064000, 0x00060000, 0x00067000, + 0x00063000, 0x00065800, 0x00060800, 0x00066000, + 0x00063800, 0x00067800, 0x00062800, 0x00061800, + 0x00032000, 0x00035000, 0x00034800, 0x00031000, + 0x00036800, 0x00034000, 0x00030000, 0x00037000, + 0x00033000, 0x00035800, 0x00030800, 0x00036000, + 0x00033800, 0x00037800, 0x00032800, 0x00031800, + 0x0006a000, 0x0006d000, 0x0006c800, 0x00069000, + 0x0006e800, 0x0006c000, 0x00068000, 0x0006f000, + 0x0006b000, 0x0006d800, 0x00068800, 0x0006e000, + 0x0006b800, 0x0006f800, 0x0006a800, 0x00069800, + 0x0007a000, 0x0007d000, 0x0007c800, 0x00079000, + 0x0007e800, 0x0007c000, 0x00078000, 0x0007f000, + 0x0007b000, 0x0007d800, 0x00078800, 0x0007e000, + 0x0007b800, 0x0007f800, 0x0007a800, 0x00079800, + 0x00052000, 0x00055000, 0x00054800, 0x00051000, + 0x00056800, 0x00054000, 0x00050000, 0x00057000, + 0x00053000, 0x00055800, 0x00050800, 0x00056000, + 0x00053800, 0x00057800, 0x00052800, 0x00051800, + 0x00012000, 0x00015000, 0x00014800, 0x00011000, + 0x00016800, 0x00014000, 0x00010000, 0x00017000, + 0x00013000, 0x00015800, 0x00010800, 0x00016000, + 0x00013800, 0x00017800, 0x00012800, 0x00011800, + 0x0001a000, 0x0001d000, 0x0001c800, 0x00019000, + 0x0001e800, 0x0001c000, 0x00018000, 0x0001f000, + 0x0001b000, 0x0001d800, 0x00018800, 0x0001e000, + 0x0001b800, 0x0001f800, 0x0001a800, 0x00019800, + 0x00042000, 0x00045000, 0x00044800, 0x00041000, + 0x00046800, 0x00044000, 0x00040000, 0x00047000, + 0x00043000, 0x00045800, 0x00040800, 0x00046000, + 0x00043800, 0x00047800, 0x00042800, 0x00041800, + 0x0000a000, 0x0000d000, 0x0000c800, 0x00009000, + 0x0000e800, 0x0000c000, 0x00008000, 0x0000f000, + 0x0000b000, 0x0000d800, 0x00008800, 0x0000e000, + 0x0000b800, 0x0000f800, 0x0000a800, 0x00009800, + 0x00002000, 0x00005000, 0x00004800, 0x00001000, + 0x00006800, 0x00004000, 0x00000000, 0x00007000, + 0x00003000, 0x00005800, 0x00000800, 0x00006000, + 0x00003800, 0x00007800, 0x00002800, 0x00001800, + 0x0003a000, 0x0003d000, 0x0003c800, 0x00039000, + 0x0003e800, 0x0003c000, 0x00038000, 0x0003f000, + 0x0003b000, 0x0003d800, 0x00038800, 0x0003e000, + 0x0003b800, 0x0003f800, 0x0003a800, 0x00039800, + 0x0002a000, 0x0002d000, 0x0002c800, 0x00029000, + 0x0002e800, 0x0002c000, 0x00028000, 0x0002f000, + 0x0002b000, 0x0002d800, 0x00028800, 0x0002e000, + 0x0002b800, 0x0002f800, 0x0002a800, 0x00029800, + 0x0004a000, 0x0004d000, 0x0004c800, 0x00049000, + 0x0004e800, 0x0004c000, 0x00048000, 0x0004f000, + 0x0004b000, 0x0004d800, 0x00048800, 0x0004e000, + 0x0004b800, 0x0004f800, 0x0004a800, 0x00049800, + /* 1 */ + 0x03a80000, 0x03c00000, 0x03880000, 0x03e80000, + 0x03d00000, 0x03980000, 0x03a00000, 0x03900000, + 0x03f00000, 0x03f80000, 0x03e00000, 0x03b80000, + 0x03b00000, 0x03800000, 0x03c80000, 0x03d80000, + 0x06a80000, 0x06c00000, 0x06880000, 0x06e80000, + 0x06d00000, 0x06980000, 0x06a00000, 0x06900000, + 0x06f00000, 0x06f80000, 0x06e00000, 0x06b80000, + 0x06b00000, 0x06800000, 0x06c80000, 0x06d80000, + 0x05280000, 0x05400000, 0x05080000, 0x05680000, + 0x05500000, 0x05180000, 0x05200000, 0x05100000, + 0x05700000, 0x05780000, 0x05600000, 0x05380000, + 0x05300000, 0x05000000, 0x05480000, 0x05580000, + 0x00a80000, 0x00c00000, 0x00880000, 0x00e80000, + 0x00d00000, 0x00980000, 0x00a00000, 0x00900000, + 0x00f00000, 0x00f80000, 0x00e00000, 0x00b80000, + 0x00b00000, 0x00800000, 0x00c80000, 0x00d80000, + 0x00280000, 0x00400000, 0x00080000, 0x00680000, + 0x00500000, 0x00180000, 0x00200000, 0x00100000, + 0x00700000, 0x00780000, 0x00600000, 0x00380000, + 0x00300000, 0x00000000, 0x00480000, 0x00580000, + 0x04280000, 0x04400000, 0x04080000, 0x04680000, + 0x04500000, 0x04180000, 0x04200000, 0x04100000, + 0x04700000, 0x04780000, 0x04600000, 0x04380000, + 0x04300000, 0x04000000, 0x04480000, 0x04580000, + 0x04a80000, 0x04c00000, 0x04880000, 0x04e80000, + 0x04d00000, 0x04980000, 0x04a00000, 0x04900000, + 0x04f00000, 0x04f80000, 0x04e00000, 0x04b80000, + 0x04b00000, 0x04800000, 0x04c80000, 0x04d80000, + 0x07a80000, 0x07c00000, 0x07880000, 0x07e80000, + 0x07d00000, 0x07980000, 0x07a00000, 0x07900000, + 0x07f00000, 0x07f80000, 0x07e00000, 0x07b80000, + 0x07b00000, 0x07800000, 0x07c80000, 0x07d80000, + 0x07280000, 0x07400000, 0x07080000, 0x07680000, + 0x07500000, 0x07180000, 0x07200000, 0x07100000, + 0x07700000, 0x07780000, 0x07600000, 0x07380000, + 0x07300000, 0x07000000, 0x07480000, 0x07580000, + 0x02280000, 0x02400000, 0x02080000, 0x02680000, + 0x02500000, 0x02180000, 0x02200000, 0x02100000, + 0x02700000, 0x02780000, 0x02600000, 0x02380000, + 0x02300000, 0x02000000, 0x02480000, 0x02580000, + 0x03280000, 0x03400000, 0x03080000, 0x03680000, + 0x03500000, 0x03180000, 0x03200000, 0x03100000, + 0x03700000, 0x03780000, 0x03600000, 0x03380000, + 0x03300000, 0x03000000, 0x03480000, 0x03580000, + 0x06280000, 0x06400000, 0x06080000, 0x06680000, + 0x06500000, 0x06180000, 0x06200000, 0x06100000, + 0x06700000, 0x06780000, 0x06600000, 0x06380000, + 0x06300000, 0x06000000, 0x06480000, 0x06580000, + 0x05a80000, 0x05c00000, 0x05880000, 0x05e80000, + 0x05d00000, 0x05980000, 0x05a00000, 0x05900000, + 0x05f00000, 0x05f80000, 0x05e00000, 0x05b80000, + 0x05b00000, 0x05800000, 0x05c80000, 0x05d80000, + 0x01280000, 0x01400000, 0x01080000, 0x01680000, + 0x01500000, 0x01180000, 0x01200000, 0x01100000, + 0x01700000, 0x01780000, 0x01600000, 0x01380000, + 0x01300000, 0x01000000, 0x01480000, 0x01580000, + 0x02a80000, 0x02c00000, 0x02880000, 0x02e80000, + 0x02d00000, 0x02980000, 0x02a00000, 0x02900000, + 0x02f00000, 0x02f80000, 0x02e00000, 0x02b80000, + 0x02b00000, 0x02800000, 0x02c80000, 0x02d80000, + 0x01a80000, 0x01c00000, 0x01880000, 0x01e80000, + 0x01d00000, 0x01980000, 0x01a00000, 0x01900000, + 0x01f00000, 0x01f80000, 0x01e00000, 0x01b80000, + 0x01b00000, 0x01800000, 0x01c80000, 0x01d80000, + /* 2 */ + 0x30000002, 0x60000002, 0x38000002, 0x08000002, + 0x28000002, 0x78000002, 0x68000002, 0x40000002, + 0x20000002, 0x50000002, 0x48000002, 0x70000002, + 0x00000002, 0x18000002, 0x58000002, 0x10000002, + 0xb0000005, 0xe0000005, 0xb8000005, 0x88000005, + 0xa8000005, 0xf8000005, 0xe8000005, 0xc0000005, + 0xa0000005, 0xd0000005, 0xc8000005, 0xf0000005, + 0x80000005, 0x98000005, 0xd8000005, 0x90000005, + 0x30000005, 0x60000005, 0x38000005, 0x08000005, + 0x28000005, 0x78000005, 0x68000005, 0x40000005, + 0x20000005, 0x50000005, 0x48000005, 0x70000005, + 0x00000005, 0x18000005, 0x58000005, 0x10000005, + 0x30000000, 0x60000000, 0x38000000, 0x08000000, + 0x28000000, 0x78000000, 0x68000000, 0x40000000, + 0x20000000, 0x50000000, 0x48000000, 0x70000000, + 0x00000000, 0x18000000, 0x58000000, 0x10000000, + 0xb0000003, 0xe0000003, 0xb8000003, 0x88000003, + 0xa8000003, 0xf8000003, 0xe8000003, 0xc0000003, + 0xa0000003, 0xd0000003, 0xc8000003, 0xf0000003, + 0x80000003, 0x98000003, 0xd8000003, 0x90000003, + 0x30000001, 0x60000001, 0x38000001, 0x08000001, + 0x28000001, 0x78000001, 0x68000001, 0x40000001, + 0x20000001, 0x50000001, 0x48000001, 0x70000001, + 0x00000001, 0x18000001, 0x58000001, 0x10000001, + 0xb0000000, 0xe0000000, 0xb8000000, 0x88000000, + 0xa8000000, 0xf8000000, 0xe8000000, 0xc0000000, + 0xa0000000, 0xd0000000, 0xc8000000, 0xf0000000, + 0x80000000, 0x98000000, 0xd8000000, 0x90000000, + 0xb0000006, 0xe0000006, 0xb8000006, 0x88000006, + 0xa8000006, 0xf8000006, 0xe8000006, 0xc0000006, + 0xa0000006, 0xd0000006, 0xc8000006, 0xf0000006, + 0x80000006, 0x98000006, 0xd8000006, 0x90000006, + 0xb0000001, 0xe0000001, 0xb8000001, 0x88000001, + 0xa8000001, 0xf8000001, 0xe8000001, 0xc0000001, + 0xa0000001, 0xd0000001, 0xc8000001, 0xf0000001, + 0x80000001, 0x98000001, 0xd8000001, 0x90000001, + 0x30000003, 0x60000003, 0x38000003, 0x08000003, + 0x28000003, 0x78000003, 0x68000003, 0x40000003, + 0x20000003, 0x50000003, 0x48000003, 0x70000003, + 0x00000003, 0x18000003, 0x58000003, 0x10000003, + 0x30000004, 0x60000004, 0x38000004, 0x08000004, + 0x28000004, 0x78000004, 0x68000004, 0x40000004, + 0x20000004, 0x50000004, 0x48000004, 0x70000004, + 0x00000004, 0x18000004, 0x58000004, 0x10000004, + 0xb0000002, 0xe0000002, 0xb8000002, 0x88000002, + 0xa8000002, 0xf8000002, 0xe8000002, 0xc0000002, + 0xa0000002, 0xd0000002, 0xc8000002, 0xf0000002, + 0x80000002, 0x98000002, 0xd8000002, 0x90000002, + 0xb0000004, 0xe0000004, 0xb8000004, 0x88000004, + 0xa8000004, 0xf8000004, 0xe8000004, 0xc0000004, + 0xa0000004, 0xd0000004, 0xc8000004, 0xf0000004, + 0x80000004, 0x98000004, 0xd8000004, 0x90000004, + 0x30000006, 0x60000006, 0x38000006, 0x08000006, + 0x28000006, 0x78000006, 0x68000006, 0x40000006, + 0x20000006, 0x50000006, 0x48000006, 0x70000006, + 0x00000006, 0x18000006, 0x58000006, 0x10000006, + 0xb0000007, 0xe0000007, 0xb8000007, 0x88000007, + 0xa8000007, 0xf8000007, 0xe8000007, 0xc0000007, + 0xa0000007, 0xd0000007, 0xc8000007, 0xf0000007, + 0x80000007, 0x98000007, 0xd8000007, 0x90000007, + 0x30000007, 0x60000007, 0x38000007, 0x08000007, + 0x28000007, 0x78000007, 0x68000007, 0x40000007, + 0x20000007, 0x50000007, 0x48000007, 0x70000007, + 0x00000007, 0x18000007, 0x58000007, 0x10000007, + /* 3 */ + 0x000000e8, 0x000000d8, 0x000000a0, 0x00000088, + 0x00000098, 0x000000f8, 0x000000a8, 0x000000c8, + 0x00000080, 0x000000d0, 0x000000f0, 0x000000b8, + 0x000000b0, 0x000000c0, 0x00000090, 0x000000e0, + 0x000007e8, 0x000007d8, 0x000007a0, 0x00000788, + 0x00000798, 0x000007f8, 0x000007a8, 0x000007c8, + 0x00000780, 0x000007d0, 0x000007f0, 0x000007b8, + 0x000007b0, 0x000007c0, 0x00000790, 0x000007e0, + 0x000006e8, 0x000006d8, 0x000006a0, 0x00000688, + 0x00000698, 0x000006f8, 0x000006a8, 0x000006c8, + 0x00000680, 0x000006d0, 0x000006f0, 0x000006b8, + 0x000006b0, 0x000006c0, 0x00000690, 0x000006e0, + 0x00000068, 0x00000058, 0x00000020, 0x00000008, + 0x00000018, 0x00000078, 0x00000028, 0x00000048, + 0x00000000, 0x00000050, 0x00000070, 0x00000038, + 0x00000030, 0x00000040, 0x00000010, 0x00000060, + 0x000002e8, 0x000002d8, 0x000002a0, 0x00000288, + 0x00000298, 0x000002f8, 0x000002a8, 0x000002c8, + 0x00000280, 0x000002d0, 0x000002f0, 0x000002b8, + 0x000002b0, 0x000002c0, 0x00000290, 0x000002e0, + 0x000003e8, 0x000003d8, 0x000003a0, 0x00000388, + 0x00000398, 0x000003f8, 0x000003a8, 0x000003c8, + 0x00000380, 0x000003d0, 0x000003f0, 0x000003b8, + 0x000003b0, 0x000003c0, 0x00000390, 0x000003e0, + 0x00000568, 0x00000558, 0x00000520, 0x00000508, + 0x00000518, 0x00000578, 0x00000528, 0x00000548, + 0x00000500, 0x00000550, 0x00000570, 0x00000538, + 0x00000530, 0x00000540, 0x00000510, 0x00000560, + 0x00000268, 0x00000258, 0x00000220, 0x00000208, + 0x00000218, 0x00000278, 0x00000228, 0x00000248, + 0x00000200, 0x00000250, 0x00000270, 0x00000238, + 0x00000230, 0x00000240, 0x00000210, 0x00000260, + 0x000004e8, 0x000004d8, 0x000004a0, 0x00000488, + 0x00000498, 0x000004f8, 0x000004a8, 0x000004c8, + 0x00000480, 0x000004d0, 0x000004f0, 0x000004b8, + 0x000004b0, 0x000004c0, 0x00000490, 0x000004e0, + 0x00000168, 0x00000158, 0x00000120, 0x00000108, + 0x00000118, 0x00000178, 0x00000128, 0x00000148, + 0x00000100, 0x00000150, 0x00000170, 0x00000138, + 0x00000130, 0x00000140, 0x00000110, 0x00000160, + 0x000001e8, 0x000001d8, 0x000001a0, 0x00000188, + 0x00000198, 0x000001f8, 0x000001a8, 0x000001c8, + 0x00000180, 0x000001d0, 0x000001f0, 0x000001b8, + 0x000001b0, 0x000001c0, 0x00000190, 0x000001e0, + 0x00000768, 0x00000758, 0x00000720, 0x00000708, + 0x00000718, 0x00000778, 0x00000728, 0x00000748, + 0x00000700, 0x00000750, 0x00000770, 0x00000738, + 0x00000730, 0x00000740, 0x00000710, 0x00000760, + 0x00000368, 0x00000358, 0x00000320, 0x00000308, + 0x00000318, 0x00000378, 0x00000328, 0x00000348, + 0x00000300, 0x00000350, 0x00000370, 0x00000338, + 0x00000330, 0x00000340, 0x00000310, 0x00000360, + 0x000005e8, 0x000005d8, 0x000005a0, 0x00000588, + 0x00000598, 0x000005f8, 0x000005a8, 0x000005c8, + 0x00000580, 0x000005d0, 0x000005f0, 0x000005b8, + 0x000005b0, 0x000005c0, 0x00000590, 0x000005e0, + 0x00000468, 0x00000458, 0x00000420, 0x00000408, + 0x00000418, 0x00000478, 0x00000428, 0x00000448, + 0x00000400, 0x00000450, 0x00000470, 0x00000438, + 0x00000430, 0x00000440, 0x00000410, 0x00000460, + 0x00000668, 0x00000658, 0x00000620, 0x00000608, + 0x00000618, 0x00000678, 0x00000628, 0x00000648, + 0x00000600, 0x00000650, 0x00000670, 0x00000638, + 0x00000630, 0x00000640, 0x00000610, 0x00000660, + } +}; + +const struct gost28147_param gost28147_param_CryptoPro_3411 = +{ + 0, + { + /* 0 */ + 0x0002d000, 0x0002a000, 0x0002a800, 0x0002b000, + 0x0002c000, 0x00028800, 0x00029800, 0x0002b800, + 0x0002e800, 0x0002e000, 0x0002f000, 0x00028000, + 0x0002c800, 0x00029000, 0x0002d800, 0x0002f800, + 0x0007d000, 0x0007a000, 0x0007a800, 0x0007b000, + 0x0007c000, 0x00078800, 0x00079800, 0x0007b800, + 0x0007e800, 0x0007e000, 0x0007f000, 0x00078000, + 0x0007c800, 0x00079000, 0x0007d800, 0x0007f800, + 0x00025000, 0x00022000, 0x00022800, 0x00023000, + 0x00024000, 0x00020800, 0x00021800, 0x00023800, + 0x00026800, 0x00026000, 0x00027000, 0x00020000, + 0x00024800, 0x00021000, 0x00025800, 0x00027800, + 0x00005000, 0x00002000, 0x00002800, 0x00003000, + 0x00004000, 0x00000800, 0x00001800, 0x00003800, + 0x00006800, 0x00006000, 0x00007000, 0x00000000, + 0x00004800, 0x00001000, 0x00005800, 0x00007800, + 0x00015000, 0x00012000, 0x00012800, 0x00013000, + 0x00014000, 0x00010800, 0x00011800, 0x00013800, + 0x00016800, 0x00016000, 0x00017000, 0x00010000, + 0x00014800, 0x00011000, 0x00015800, 0x00017800, + 0x0006d000, 0x0006a000, 0x0006a800, 0x0006b000, + 0x0006c000, 0x00068800, 0x00069800, 0x0006b800, + 0x0006e800, 0x0006e000, 0x0006f000, 0x00068000, + 0x0006c800, 0x00069000, 0x0006d800, 0x0006f800, + 0x0005d000, 0x0005a000, 0x0005a800, 0x0005b000, + 0x0005c000, 0x00058800, 0x00059800, 0x0005b800, + 0x0005e800, 0x0005e000, 0x0005f000, 0x00058000, + 0x0005c800, 0x00059000, 0x0005d800, 0x0005f800, + 0x0004d000, 0x0004a000, 0x0004a800, 0x0004b000, + 0x0004c000, 0x00048800, 0x00049800, 0x0004b800, + 0x0004e800, 0x0004e000, 0x0004f000, 0x00048000, + 0x0004c800, 0x00049000, 0x0004d800, 0x0004f800, + 0x0000d000, 0x0000a000, 0x0000a800, 0x0000b000, + 0x0000c000, 0x00008800, 0x00009800, 0x0000b800, + 0x0000e800, 0x0000e000, 0x0000f000, 0x00008000, + 0x0000c800, 0x00009000, 0x0000d800, 0x0000f800, + 0x0003d000, 0x0003a000, 0x0003a800, 0x0003b000, + 0x0003c000, 0x00038800, 0x00039800, 0x0003b800, + 0x0003e800, 0x0003e000, 0x0003f000, 0x00038000, + 0x0003c800, 0x00039000, 0x0003d800, 0x0003f800, + 0x00035000, 0x00032000, 0x00032800, 0x00033000, + 0x00034000, 0x00030800, 0x00031800, 0x00033800, + 0x00036800, 0x00036000, 0x00037000, 0x00030000, + 0x00034800, 0x00031000, 0x00035800, 0x00037800, + 0x0001d000, 0x0001a000, 0x0001a800, 0x0001b000, + 0x0001c000, 0x00018800, 0x00019800, 0x0001b800, + 0x0001e800, 0x0001e000, 0x0001f000, 0x00018000, + 0x0001c800, 0x00019000, 0x0001d800, 0x0001f800, + 0x00065000, 0x00062000, 0x00062800, 0x00063000, + 0x00064000, 0x00060800, 0x00061800, 0x00063800, + 0x00066800, 0x00066000, 0x00067000, 0x00060000, + 0x00064800, 0x00061000, 0x00065800, 0x00067800, + 0x00075000, 0x00072000, 0x00072800, 0x00073000, + 0x00074000, 0x00070800, 0x00071800, 0x00073800, + 0x00076800, 0x00076000, 0x00077000, 0x00070000, + 0x00074800, 0x00071000, 0x00075800, 0x00077800, + 0x00055000, 0x00052000, 0x00052800, 0x00053000, + 0x00054000, 0x00050800, 0x00051800, 0x00053800, + 0x00056800, 0x00056000, 0x00057000, 0x00050000, + 0x00054800, 0x00051000, 0x00055800, 0x00057800, + 0x00045000, 0x00042000, 0x00042800, 0x00043000, + 0x00044000, 0x00040800, 0x00041800, 0x00043800, + 0x00046800, 0x00046000, 0x00047000, 0x00040000, + 0x00044800, 0x00041000, 0x00045800, 0x00047800, + /* 1 */ + 0x02380000, 0x02780000, 0x02600000, 0x02700000, + 0x02480000, 0x02200000, 0x02080000, 0x02000000, + 0x02180000, 0x02580000, 0x02280000, 0x02100000, + 0x02300000, 0x02500000, 0x02400000, 0x02680000, + 0x05380000, 0x05780000, 0x05600000, 0x05700000, + 0x05480000, 0x05200000, 0x05080000, 0x05000000, + 0x05180000, 0x05580000, 0x05280000, 0x05100000, + 0x05300000, 0x05500000, 0x05400000, 0x05680000, + 0x03b80000, 0x03f80000, 0x03e00000, 0x03f00000, + 0x03c80000, 0x03a00000, 0x03880000, 0x03800000, + 0x03980000, 0x03d80000, 0x03a80000, 0x03900000, + 0x03b00000, 0x03d00000, 0x03c00000, 0x03e80000, + 0x06380000, 0x06780000, 0x06600000, 0x06700000, + 0x06480000, 0x06200000, 0x06080000, 0x06000000, + 0x06180000, 0x06580000, 0x06280000, 0x06100000, + 0x06300000, 0x06500000, 0x06400000, 0x06680000, + 0x00380000, 0x00780000, 0x00600000, 0x00700000, + 0x00480000, 0x00200000, 0x00080000, 0x00000000, + 0x00180000, 0x00580000, 0x00280000, 0x00100000, + 0x00300000, 0x00500000, 0x00400000, 0x00680000, + 0x07b80000, 0x07f80000, 0x07e00000, 0x07f00000, + 0x07c80000, 0x07a00000, 0x07880000, 0x07800000, + 0x07980000, 0x07d80000, 0x07a80000, 0x07900000, + 0x07b00000, 0x07d00000, 0x07c00000, 0x07e80000, + 0x01380000, 0x01780000, 0x01600000, 0x01700000, + 0x01480000, 0x01200000, 0x01080000, 0x01000000, + 0x01180000, 0x01580000, 0x01280000, 0x01100000, + 0x01300000, 0x01500000, 0x01400000, 0x01680000, + 0x04380000, 0x04780000, 0x04600000, 0x04700000, + 0x04480000, 0x04200000, 0x04080000, 0x04000000, + 0x04180000, 0x04580000, 0x04280000, 0x04100000, + 0x04300000, 0x04500000, 0x04400000, 0x04680000, + 0x07380000, 0x07780000, 0x07600000, 0x07700000, + 0x07480000, 0x07200000, 0x07080000, 0x07000000, + 0x07180000, 0x07580000, 0x07280000, 0x07100000, + 0x07300000, 0x07500000, 0x07400000, 0x07680000, + 0x00b80000, 0x00f80000, 0x00e00000, 0x00f00000, + 0x00c80000, 0x00a00000, 0x00880000, 0x00800000, + 0x00980000, 0x00d80000, 0x00a80000, 0x00900000, + 0x00b00000, 0x00d00000, 0x00c00000, 0x00e80000, + 0x03380000, 0x03780000, 0x03600000, 0x03700000, + 0x03480000, 0x03200000, 0x03080000, 0x03000000, + 0x03180000, 0x03580000, 0x03280000, 0x03100000, + 0x03300000, 0x03500000, 0x03400000, 0x03680000, + 0x02b80000, 0x02f80000, 0x02e00000, 0x02f00000, + 0x02c80000, 0x02a00000, 0x02880000, 0x02800000, + 0x02980000, 0x02d80000, 0x02a80000, 0x02900000, + 0x02b00000, 0x02d00000, 0x02c00000, 0x02e80000, + 0x06b80000, 0x06f80000, 0x06e00000, 0x06f00000, + 0x06c80000, 0x06a00000, 0x06880000, 0x06800000, + 0x06980000, 0x06d80000, 0x06a80000, 0x06900000, + 0x06b00000, 0x06d00000, 0x06c00000, 0x06e80000, + 0x05b80000, 0x05f80000, 0x05e00000, 0x05f00000, + 0x05c80000, 0x05a00000, 0x05880000, 0x05800000, + 0x05980000, 0x05d80000, 0x05a80000, 0x05900000, + 0x05b00000, 0x05d00000, 0x05c00000, 0x05e80000, + 0x04b80000, 0x04f80000, 0x04e00000, 0x04f00000, + 0x04c80000, 0x04a00000, 0x04880000, 0x04800000, + 0x04980000, 0x04d80000, 0x04a80000, 0x04900000, + 0x04b00000, 0x04d00000, 0x04c00000, 0x04e80000, + 0x01b80000, 0x01f80000, 0x01e00000, 0x01f00000, + 0x01c80000, 0x01a00000, 0x01880000, 0x01800000, + 0x01980000, 0x01d80000, 0x01a80000, 0x01900000, + 0x01b00000, 0x01d00000, 0x01c00000, 0x01e80000, + /* 2 */ + 0xb8000003, 0xb0000003, 0xa0000003, 0xd8000003, + 0xc8000003, 0xe0000003, 0x90000003, 0xd0000003, + 0x88000003, 0xc0000003, 0x80000003, 0xf0000003, + 0xf8000003, 0xe8000003, 0x98000003, 0xa8000003, + 0x38000003, 0x30000003, 0x20000003, 0x58000003, + 0x48000003, 0x60000003, 0x10000003, 0x50000003, + 0x08000003, 0x40000003, 0x00000003, 0x70000003, + 0x78000003, 0x68000003, 0x18000003, 0x28000003, + 0x38000001, 0x30000001, 0x20000001, 0x58000001, + 0x48000001, 0x60000001, 0x10000001, 0x50000001, + 0x08000001, 0x40000001, 0x00000001, 0x70000001, + 0x78000001, 0x68000001, 0x18000001, 0x28000001, + 0x38000002, 0x30000002, 0x20000002, 0x58000002, + 0x48000002, 0x60000002, 0x10000002, 0x50000002, + 0x08000002, 0x40000002, 0x00000002, 0x70000002, + 0x78000002, 0x68000002, 0x18000002, 0x28000002, + 0xb8000006, 0xb0000006, 0xa0000006, 0xd8000006, + 0xc8000006, 0xe0000006, 0x90000006, 0xd0000006, + 0x88000006, 0xc0000006, 0x80000006, 0xf0000006, + 0xf8000006, 0xe8000006, 0x98000006, 0xa8000006, + 0xb8000004, 0xb0000004, 0xa0000004, 0xd8000004, + 0xc8000004, 0xe0000004, 0x90000004, 0xd0000004, + 0x88000004, 0xc0000004, 0x80000004, 0xf0000004, + 0xf8000004, 0xe8000004, 0x98000004, 0xa8000004, + 0xb8000007, 0xb0000007, 0xa0000007, 0xd8000007, + 0xc8000007, 0xe0000007, 0x90000007, 0xd0000007, + 0x88000007, 0xc0000007, 0x80000007, 0xf0000007, + 0xf8000007, 0xe8000007, 0x98000007, 0xa8000007, + 0x38000000, 0x30000000, 0x20000000, 0x58000000, + 0x48000000, 0x60000000, 0x10000000, 0x50000000, + 0x08000000, 0x40000000, 0x00000000, 0x70000000, + 0x78000000, 0x68000000, 0x18000000, 0x28000000, + 0x38000005, 0x30000005, 0x20000005, 0x58000005, + 0x48000005, 0x60000005, 0x10000005, 0x50000005, + 0x08000005, 0x40000005, 0x00000005, 0x70000005, + 0x78000005, 0x68000005, 0x18000005, 0x28000005, + 0xb8000000, 0xb0000000, 0xa0000000, 0xd8000000, + 0xc8000000, 0xe0000000, 0x90000000, 0xd0000000, + 0x88000000, 0xc0000000, 0x80000000, 0xf0000000, + 0xf8000000, 0xe8000000, 0x98000000, 0xa8000000, + 0xb8000002, 0xb0000002, 0xa0000002, 0xd8000002, + 0xc8000002, 0xe0000002, 0x90000002, 0xd0000002, + 0x88000002, 0xc0000002, 0x80000002, 0xf0000002, + 0xf8000002, 0xe8000002, 0x98000002, 0xa8000002, + 0xb8000005, 0xb0000005, 0xa0000005, 0xd8000005, + 0xc8000005, 0xe0000005, 0x90000005, 0xd0000005, + 0x88000005, 0xc0000005, 0x80000005, 0xf0000005, + 0xf8000005, 0xe8000005, 0x98000005, 0xa8000005, + 0x38000004, 0x30000004, 0x20000004, 0x58000004, + 0x48000004, 0x60000004, 0x10000004, 0x50000004, + 0x08000004, 0x40000004, 0x00000004, 0x70000004, + 0x78000004, 0x68000004, 0x18000004, 0x28000004, + 0x38000007, 0x30000007, 0x20000007, 0x58000007, + 0x48000007, 0x60000007, 0x10000007, 0x50000007, + 0x08000007, 0x40000007, 0x00000007, 0x70000007, + 0x78000007, 0x68000007, 0x18000007, 0x28000007, + 0x38000006, 0x30000006, 0x20000006, 0x58000006, + 0x48000006, 0x60000006, 0x10000006, 0x50000006, + 0x08000006, 0x40000006, 0x00000006, 0x70000006, + 0x78000006, 0x68000006, 0x18000006, 0x28000006, + 0xb8000001, 0xb0000001, 0xa0000001, 0xd8000001, + 0xc8000001, 0xe0000001, 0x90000001, 0xd0000001, + 0x88000001, 0xc0000001, 0x80000001, 0xf0000001, + 0xf8000001, 0xe8000001, 0x98000001, 0xa8000001, + /* 3 */ + 0x000000e8, 0x000000f0, 0x000000a0, 0x00000088, + 0x000000b8, 0x00000080, 0x000000a8, 0x000000d0, + 0x00000098, 0x000000e0, 0x000000c0, 0x000000f8, + 0x000000b0, 0x00000090, 0x000000c8, 0x000000d8, + 0x000001e8, 0x000001f0, 0x000001a0, 0x00000188, + 0x000001b8, 0x00000180, 0x000001a8, 0x000001d0, + 0x00000198, 0x000001e0, 0x000001c0, 0x000001f8, + 0x000001b0, 0x00000190, 0x000001c8, 0x000001d8, + 0x00000568, 0x00000570, 0x00000520, 0x00000508, + 0x00000538, 0x00000500, 0x00000528, 0x00000550, + 0x00000518, 0x00000560, 0x00000540, 0x00000578, + 0x00000530, 0x00000510, 0x00000548, 0x00000558, + 0x000004e8, 0x000004f0, 0x000004a0, 0x00000488, + 0x000004b8, 0x00000480, 0x000004a8, 0x000004d0, + 0x00000498, 0x000004e0, 0x000004c0, 0x000004f8, + 0x000004b0, 0x00000490, 0x000004c8, 0x000004d8, + 0x000002e8, 0x000002f0, 0x000002a0, 0x00000288, + 0x000002b8, 0x00000280, 0x000002a8, 0x000002d0, + 0x00000298, 0x000002e0, 0x000002c0, 0x000002f8, + 0x000002b0, 0x00000290, 0x000002c8, 0x000002d8, + 0x000005e8, 0x000005f0, 0x000005a0, 0x00000588, + 0x000005b8, 0x00000580, 0x000005a8, 0x000005d0, + 0x00000598, 0x000005e0, 0x000005c0, 0x000005f8, + 0x000005b0, 0x00000590, 0x000005c8, 0x000005d8, + 0x00000268, 0x00000270, 0x00000220, 0x00000208, + 0x00000238, 0x00000200, 0x00000228, 0x00000250, + 0x00000218, 0x00000260, 0x00000240, 0x00000278, + 0x00000230, 0x00000210, 0x00000248, 0x00000258, + 0x000007e8, 0x000007f0, 0x000007a0, 0x00000788, + 0x000007b8, 0x00000780, 0x000007a8, 0x000007d0, + 0x00000798, 0x000007e0, 0x000007c0, 0x000007f8, + 0x000007b0, 0x00000790, 0x000007c8, 0x000007d8, + 0x00000468, 0x00000470, 0x00000420, 0x00000408, + 0x00000438, 0x00000400, 0x00000428, 0x00000450, + 0x00000418, 0x00000460, 0x00000440, 0x00000478, + 0x00000430, 0x00000410, 0x00000448, 0x00000458, + 0x00000368, 0x00000370, 0x00000320, 0x00000308, + 0x00000338, 0x00000300, 0x00000328, 0x00000350, + 0x00000318, 0x00000360, 0x00000340, 0x00000378, + 0x00000330, 0x00000310, 0x00000348, 0x00000358, + 0x000003e8, 0x000003f0, 0x000003a0, 0x00000388, + 0x000003b8, 0x00000380, 0x000003a8, 0x000003d0, + 0x00000398, 0x000003e0, 0x000003c0, 0x000003f8, + 0x000003b0, 0x00000390, 0x000003c8, 0x000003d8, + 0x00000768, 0x00000770, 0x00000720, 0x00000708, + 0x00000738, 0x00000700, 0x00000728, 0x00000750, + 0x00000718, 0x00000760, 0x00000740, 0x00000778, + 0x00000730, 0x00000710, 0x00000748, 0x00000758, + 0x000006e8, 0x000006f0, 0x000006a0, 0x00000688, + 0x000006b8, 0x00000680, 0x000006a8, 0x000006d0, + 0x00000698, 0x000006e0, 0x000006c0, 0x000006f8, + 0x000006b0, 0x00000690, 0x000006c8, 0x000006d8, + 0x00000068, 0x00000070, 0x00000020, 0x00000008, + 0x00000038, 0x00000000, 0x00000028, 0x00000050, + 0x00000018, 0x00000060, 0x00000040, 0x00000078, + 0x00000030, 0x00000010, 0x00000048, 0x00000058, + 0x00000168, 0x00000170, 0x00000120, 0x00000108, + 0x00000138, 0x00000100, 0x00000128, 0x00000150, + 0x00000118, 0x00000160, 0x00000140, 0x00000178, + 0x00000130, 0x00000110, 0x00000148, 0x00000158, + 0x00000668, 0x00000670, 0x00000620, 0x00000608, + 0x00000638, 0x00000600, 0x00000628, 0x00000650, + 0x00000618, 0x00000660, 0x00000640, 0x00000678, + 0x00000630, 0x00000610, 0x00000648, 0x00000658, + } +}; + +const struct gost28147_param gost28147_param_Test_89 = +{ + 0, + { + /* 0 */ + 0x00062000, 0x00061000, 0x00067800, 0x00062800, + 0x00064800, 0x00060800, 0x00060000, 0x00064000, + 0x00067000, 0x00061800, 0x00065800, 0x00066000, + 0x00066800, 0x00063800, 0x00065000, 0x00063000, + 0x0004a000, 0x00049000, 0x0004f800, 0x0004a800, + 0x0004c800, 0x00048800, 0x00048000, 0x0004c000, + 0x0004f000, 0x00049800, 0x0004d800, 0x0004e000, + 0x0004e800, 0x0004b800, 0x0004d000, 0x0004b000, + 0x0007a000, 0x00079000, 0x0007f800, 0x0007a800, + 0x0007c800, 0x00078800, 0x00078000, 0x0007c000, + 0x0007f000, 0x00079800, 0x0007d800, 0x0007e000, + 0x0007e800, 0x0007b800, 0x0007d000, 0x0007b000, + 0x00072000, 0x00071000, 0x00077800, 0x00072800, + 0x00074800, 0x00070800, 0x00070000, 0x00074000, + 0x00077000, 0x00071800, 0x00075800, 0x00076000, + 0x00076800, 0x00073800, 0x00075000, 0x00073000, + 0x00042000, 0x00041000, 0x00047800, 0x00042800, + 0x00044800, 0x00040800, 0x00040000, 0x00044000, + 0x00047000, 0x00041800, 0x00045800, 0x00046000, + 0x00046800, 0x00043800, 0x00045000, 0x00043000, + 0x0000a000, 0x00009000, 0x0000f800, 0x0000a800, + 0x0000c800, 0x00008800, 0x00008000, 0x0000c000, + 0x0000f000, 0x00009800, 0x0000d800, 0x0000e000, + 0x0000e800, 0x0000b800, 0x0000d000, 0x0000b000, + 0x0001a000, 0x00019000, 0x0001f800, 0x0001a800, + 0x0001c800, 0x00018800, 0x00018000, 0x0001c000, + 0x0001f000, 0x00019800, 0x0001d800, 0x0001e000, + 0x0001e800, 0x0001b800, 0x0001d000, 0x0001b000, + 0x00052000, 0x00051000, 0x00057800, 0x00052800, + 0x00054800, 0x00050800, 0x00050000, 0x00054000, + 0x00057000, 0x00051800, 0x00055800, 0x00056000, + 0x00056800, 0x00053800, 0x00055000, 0x00053000, + 0x00012000, 0x00011000, 0x00017800, 0x00012800, + 0x00014800, 0x00010800, 0x00010000, 0x00014000, + 0x00017000, 0x00011800, 0x00015800, 0x00016000, + 0x00016800, 0x00013800, 0x00015000, 0x00013000, + 0x0003a000, 0x00039000, 0x0003f800, 0x0003a800, + 0x0003c800, 0x00038800, 0x00038000, 0x0003c000, + 0x0003f000, 0x00039800, 0x0003d800, 0x0003e000, + 0x0003e800, 0x0003b800, 0x0003d000, 0x0003b000, + 0x00022000, 0x00021000, 0x00027800, 0x00022800, + 0x00024800, 0x00020800, 0x00020000, 0x00024000, + 0x00027000, 0x00021800, 0x00025800, 0x00026000, + 0x00026800, 0x00023800, 0x00025000, 0x00023000, + 0x0006a000, 0x00069000, 0x0006f800, 0x0006a800, + 0x0006c800, 0x00068800, 0x00068000, 0x0006c000, + 0x0006f000, 0x00069800, 0x0006d800, 0x0006e000, + 0x0006e800, 0x0006b800, 0x0006d000, 0x0006b000, + 0x00032000, 0x00031000, 0x00037800, 0x00032800, + 0x00034800, 0x00030800, 0x00030000, 0x00034000, + 0x00037000, 0x00031800, 0x00035800, 0x00036000, + 0x00036800, 0x00033800, 0x00035000, 0x00033000, + 0x00002000, 0x00001000, 0x00007800, 0x00002800, + 0x00004800, 0x00000800, 0x00000000, 0x00004000, + 0x00007000, 0x00001800, 0x00005800, 0x00006000, + 0x00006800, 0x00003800, 0x00005000, 0x00003000, + 0x0005a000, 0x00059000, 0x0005f800, 0x0005a800, + 0x0005c800, 0x00058800, 0x00058000, 0x0005c000, + 0x0005f000, 0x00059800, 0x0005d800, 0x0005e000, + 0x0005e800, 0x0005b800, 0x0005d000, 0x0005b000, + 0x0002a000, 0x00029000, 0x0002f800, 0x0002a800, + 0x0002c800, 0x00028800, 0x00028000, 0x0002c000, + 0x0002f000, 0x00029800, 0x0002d800, 0x0002e000, + 0x0002e800, 0x0002b800, 0x0002d000, 0x0002b000, + /* 1 */ + 0x07680000, 0x07400000, 0x07700000, 0x07600000, + 0x07380000, 0x07180000, 0x07480000, 0x07500000, + 0x07080000, 0x07280000, 0x07100000, 0x07200000, + 0x07300000, 0x07780000, 0x07000000, 0x07580000, + 0x04e80000, 0x04c00000, 0x04f00000, 0x04e00000, + 0x04b80000, 0x04980000, 0x04c80000, 0x04d00000, + 0x04880000, 0x04a80000, 0x04900000, 0x04a00000, + 0x04b00000, 0x04f80000, 0x04800000, 0x04d80000, + 0x05e80000, 0x05c00000, 0x05f00000, 0x05e00000, + 0x05b80000, 0x05980000, 0x05c80000, 0x05d00000, + 0x05880000, 0x05a80000, 0x05900000, 0x05a00000, + 0x05b00000, 0x05f80000, 0x05800000, 0x05d80000, + 0x01680000, 0x01400000, 0x01700000, 0x01600000, + 0x01380000, 0x01180000, 0x01480000, 0x01500000, + 0x01080000, 0x01280000, 0x01100000, 0x01200000, + 0x01300000, 0x01780000, 0x01000000, 0x01580000, + 0x02e80000, 0x02c00000, 0x02f00000, 0x02e00000, + 0x02b80000, 0x02980000, 0x02c80000, 0x02d00000, + 0x02880000, 0x02a80000, 0x02900000, 0x02a00000, + 0x02b00000, 0x02f80000, 0x02800000, 0x02d80000, + 0x07e80000, 0x07c00000, 0x07f00000, 0x07e00000, + 0x07b80000, 0x07980000, 0x07c80000, 0x07d00000, + 0x07880000, 0x07a80000, 0x07900000, 0x07a00000, + 0x07b00000, 0x07f80000, 0x07800000, 0x07d80000, + 0x03e80000, 0x03c00000, 0x03f00000, 0x03e00000, + 0x03b80000, 0x03980000, 0x03c80000, 0x03d00000, + 0x03880000, 0x03a80000, 0x03900000, 0x03a00000, + 0x03b00000, 0x03f80000, 0x03800000, 0x03d80000, + 0x00e80000, 0x00c00000, 0x00f00000, 0x00e00000, + 0x00b80000, 0x00980000, 0x00c80000, 0x00d00000, + 0x00880000, 0x00a80000, 0x00900000, 0x00a00000, + 0x00b00000, 0x00f80000, 0x00800000, 0x00d80000, + 0x00680000, 0x00400000, 0x00700000, 0x00600000, + 0x00380000, 0x00180000, 0x00480000, 0x00500000, + 0x00080000, 0x00280000, 0x00100000, 0x00200000, + 0x00300000, 0x00780000, 0x00000000, 0x00580000, + 0x06e80000, 0x06c00000, 0x06f00000, 0x06e00000, + 0x06b80000, 0x06980000, 0x06c80000, 0x06d00000, + 0x06880000, 0x06a80000, 0x06900000, 0x06a00000, + 0x06b00000, 0x06f80000, 0x06800000, 0x06d80000, + 0x06680000, 0x06400000, 0x06700000, 0x06600000, + 0x06380000, 0x06180000, 0x06480000, 0x06500000, + 0x06080000, 0x06280000, 0x06100000, 0x06200000, + 0x06300000, 0x06780000, 0x06000000, 0x06580000, + 0x03680000, 0x03400000, 0x03700000, 0x03600000, + 0x03380000, 0x03180000, 0x03480000, 0x03500000, + 0x03080000, 0x03280000, 0x03100000, 0x03200000, + 0x03300000, 0x03780000, 0x03000000, 0x03580000, + 0x05680000, 0x05400000, 0x05700000, 0x05600000, + 0x05380000, 0x05180000, 0x05480000, 0x05500000, + 0x05080000, 0x05280000, 0x05100000, 0x05200000, + 0x05300000, 0x05780000, 0x05000000, 0x05580000, + 0x02680000, 0x02400000, 0x02700000, 0x02600000, + 0x02380000, 0x02180000, 0x02480000, 0x02500000, + 0x02080000, 0x02280000, 0x02100000, 0x02200000, + 0x02300000, 0x02780000, 0x02000000, 0x02580000, + 0x01e80000, 0x01c00000, 0x01f00000, 0x01e00000, + 0x01b80000, 0x01980000, 0x01c80000, 0x01d00000, + 0x01880000, 0x01a80000, 0x01900000, 0x01a00000, + 0x01b00000, 0x01f80000, 0x01800000, 0x01d80000, + 0x04680000, 0x04400000, 0x04700000, 0x04600000, + 0x04380000, 0x04180000, 0x04480000, 0x04500000, + 0x04080000, 0x04280000, 0x04100000, 0x04200000, + 0x04300000, 0x04780000, 0x04000000, 0x04580000, + /* 2 */ + 0x18000004, 0x70000004, 0x28000004, 0x48000004, + 0x30000004, 0x40000004, 0x00000004, 0x68000004, + 0x50000004, 0x58000004, 0x38000004, 0x60000004, + 0x10000004, 0x08000004, 0x78000004, 0x20000004, + 0x98000007, 0xf0000007, 0xa8000007, 0xc8000007, + 0xb0000007, 0xc0000007, 0x80000007, 0xe8000007, + 0xd0000007, 0xd8000007, 0xb8000007, 0xe0000007, + 0x90000007, 0x88000007, 0xf8000007, 0xa0000007, + 0x18000003, 0x70000003, 0x28000003, 0x48000003, + 0x30000003, 0x40000003, 0x00000003, 0x68000003, + 0x50000003, 0x58000003, 0x38000003, 0x60000003, + 0x10000003, 0x08000003, 0x78000003, 0x20000003, + 0x98000005, 0xf0000005, 0xa8000005, 0xc8000005, + 0xb0000005, 0xc0000005, 0x80000005, 0xe8000005, + 0xd0000005, 0xd8000005, 0xb8000005, 0xe0000005, + 0x90000005, 0x88000005, 0xf8000005, 0xa0000005, + 0x98000000, 0xf0000000, 0xa8000000, 0xc8000000, + 0xb0000000, 0xc0000000, 0x80000000, 0xe8000000, + 0xd0000000, 0xd8000000, 0xb8000000, 0xe0000000, + 0x90000000, 0x88000000, 0xf8000000, 0xa0000000, + 0x98000004, 0xf0000004, 0xa8000004, 0xc8000004, + 0xb0000004, 0xc0000004, 0x80000004, 0xe8000004, + 0xd0000004, 0xd8000004, 0xb8000004, 0xe0000004, + 0x90000004, 0x88000004, 0xf8000004, 0xa0000004, + 0x18000006, 0x70000006, 0x28000006, 0x48000006, + 0x30000006, 0x40000006, 0x00000006, 0x68000006, + 0x50000006, 0x58000006, 0x38000006, 0x60000006, + 0x10000006, 0x08000006, 0x78000006, 0x20000006, + 0x98000002, 0xf0000002, 0xa8000002, 0xc8000002, + 0xb0000002, 0xc0000002, 0x80000002, 0xe8000002, + 0xd0000002, 0xd8000002, 0xb8000002, 0xe0000002, + 0x90000002, 0x88000002, 0xf8000002, 0xa0000002, + 0x98000006, 0xf0000006, 0xa8000006, 0xc8000006, + 0xb0000006, 0xc0000006, 0x80000006, 0xe8000006, + 0xd0000006, 0xd8000006, 0xb8000006, 0xe0000006, + 0x90000006, 0x88000006, 0xf8000006, 0xa0000006, + 0x98000001, 0xf0000001, 0xa8000001, 0xc8000001, + 0xb0000001, 0xc0000001, 0x80000001, 0xe8000001, + 0xd0000001, 0xd8000001, 0xb8000001, 0xe0000001, + 0x90000001, 0x88000001, 0xf8000001, 0xa0000001, + 0x98000003, 0xf0000003, 0xa8000003, 0xc8000003, + 0xb0000003, 0xc0000003, 0x80000003, 0xe8000003, + 0xd0000003, 0xd8000003, 0xb8000003, 0xe0000003, + 0x90000003, 0x88000003, 0xf8000003, 0xa0000003, + 0x18000005, 0x70000005, 0x28000005, 0x48000005, + 0x30000005, 0x40000005, 0x00000005, 0x68000005, + 0x50000005, 0x58000005, 0x38000005, 0x60000005, + 0x10000005, 0x08000005, 0x78000005, 0x20000005, + 0x18000000, 0x70000000, 0x28000000, 0x48000000, + 0x30000000, 0x40000000, 0x00000000, 0x68000000, + 0x50000000, 0x58000000, 0x38000000, 0x60000000, + 0x10000000, 0x08000000, 0x78000000, 0x20000000, + 0x18000007, 0x70000007, 0x28000007, 0x48000007, + 0x30000007, 0x40000007, 0x00000007, 0x68000007, + 0x50000007, 0x58000007, 0x38000007, 0x60000007, + 0x10000007, 0x08000007, 0x78000007, 0x20000007, + 0x18000001, 0x70000001, 0x28000001, 0x48000001, + 0x30000001, 0x40000001, 0x00000001, 0x68000001, + 0x50000001, 0x58000001, 0x38000001, 0x60000001, + 0x10000001, 0x08000001, 0x78000001, 0x20000001, + 0x18000002, 0x70000002, 0x28000002, 0x48000002, + 0x30000002, 0x40000002, 0x00000002, 0x68000002, + 0x50000002, 0x58000002, 0x38000002, 0x60000002, + 0x10000002, 0x08000002, 0x78000002, 0x20000002, + /* 3 */ + 0x00000648, 0x00000658, 0x00000660, 0x00000600, + 0x00000618, 0x00000630, 0x00000638, 0x00000628, + 0x00000620, 0x00000640, 0x00000670, 0x00000678, + 0x00000608, 0x00000650, 0x00000610, 0x00000668, + 0x00000348, 0x00000358, 0x00000360, 0x00000300, + 0x00000318, 0x00000330, 0x00000338, 0x00000328, + 0x00000320, 0x00000340, 0x00000370, 0x00000378, + 0x00000308, 0x00000350, 0x00000310, 0x00000368, + 0x000002c8, 0x000002d8, 0x000002e0, 0x00000280, + 0x00000298, 0x000002b0, 0x000002b8, 0x000002a8, + 0x000002a0, 0x000002c0, 0x000002f0, 0x000002f8, + 0x00000288, 0x000002d0, 0x00000290, 0x000002e8, + 0x00000148, 0x00000158, 0x00000160, 0x00000100, + 0x00000118, 0x00000130, 0x00000138, 0x00000128, + 0x00000120, 0x00000140, 0x00000170, 0x00000178, + 0x00000108, 0x00000150, 0x00000110, 0x00000168, + 0x000005c8, 0x000005d8, 0x000005e0, 0x00000580, + 0x00000598, 0x000005b0, 0x000005b8, 0x000005a8, + 0x000005a0, 0x000005c0, 0x000005f0, 0x000005f8, + 0x00000588, 0x000005d0, 0x00000590, 0x000005e8, + 0x00000048, 0x00000058, 0x00000060, 0x00000000, + 0x00000018, 0x00000030, 0x00000038, 0x00000028, + 0x00000020, 0x00000040, 0x00000070, 0x00000078, + 0x00000008, 0x00000050, 0x00000010, 0x00000068, + 0x000004c8, 0x000004d8, 0x000004e0, 0x00000480, + 0x00000498, 0x000004b0, 0x000004b8, 0x000004a8, + 0x000004a0, 0x000004c0, 0x000004f0, 0x000004f8, + 0x00000488, 0x000004d0, 0x00000490, 0x000004e8, + 0x000006c8, 0x000006d8, 0x000006e0, 0x00000680, + 0x00000698, 0x000006b0, 0x000006b8, 0x000006a8, + 0x000006a0, 0x000006c0, 0x000006f0, 0x000006f8, + 0x00000688, 0x000006d0, 0x00000690, 0x000006e8, + 0x000001c8, 0x000001d8, 0x000001e0, 0x00000180, + 0x00000198, 0x000001b0, 0x000001b8, 0x000001a8, + 0x000001a0, 0x000001c0, 0x000001f0, 0x000001f8, + 0x00000188, 0x000001d0, 0x00000190, 0x000001e8, + 0x00000748, 0x00000758, 0x00000760, 0x00000700, + 0x00000718, 0x00000730, 0x00000738, 0x00000728, + 0x00000720, 0x00000740, 0x00000770, 0x00000778, + 0x00000708, 0x00000750, 0x00000710, 0x00000768, + 0x000003c8, 0x000003d8, 0x000003e0, 0x00000380, + 0x00000398, 0x000003b0, 0x000003b8, 0x000003a8, + 0x000003a0, 0x000003c0, 0x000003f0, 0x000003f8, + 0x00000388, 0x000003d0, 0x00000390, 0x000003e8, + 0x00000548, 0x00000558, 0x00000560, 0x00000500, + 0x00000518, 0x00000530, 0x00000538, 0x00000528, + 0x00000520, 0x00000540, 0x00000570, 0x00000578, + 0x00000508, 0x00000550, 0x00000510, 0x00000568, + 0x000007c8, 0x000007d8, 0x000007e0, 0x00000780, + 0x00000798, 0x000007b0, 0x000007b8, 0x000007a8, + 0x000007a0, 0x000007c0, 0x000007f0, 0x000007f8, + 0x00000788, 0x000007d0, 0x00000790, 0x000007e8, + 0x00000248, 0x00000258, 0x00000260, 0x00000200, + 0x00000218, 0x00000230, 0x00000238, 0x00000228, + 0x00000220, 0x00000240, 0x00000270, 0x00000278, + 0x00000208, 0x00000250, 0x00000210, 0x00000268, + 0x000000c8, 0x000000d8, 0x000000e0, 0x00000080, + 0x00000098, 0x000000b0, 0x000000b8, 0x000000a8, + 0x000000a0, 0x000000c0, 0x000000f0, 0x000000f8, + 0x00000088, 0x000000d0, 0x00000090, 0x000000e8, + 0x00000448, 0x00000458, 0x00000460, 0x00000400, + 0x00000418, 0x00000430, 0x00000438, 0x00000428, + 0x00000420, 0x00000440, 0x00000470, 0x00000478, + 0x00000408, 0x00000450, 0x00000410, 0x00000468, + } +}; + +const struct gost28147_param gost28147_param_CryptoPro_A = +{ + 1, + { + /* 0 */ + 0x0001c800, 0x0001b000, 0x00019800, 0x00019000, + 0x0001c000, 0x0001d800, 0x00018800, 0x0001b800, + 0x0001d000, 0x0001a000, 0x0001f000, 0x0001f800, + 0x0001e000, 0x00018000, 0x0001e800, 0x0001a800, + 0x0003c800, 0x0003b000, 0x00039800, 0x00039000, + 0x0003c000, 0x0003d800, 0x00038800, 0x0003b800, + 0x0003d000, 0x0003a000, 0x0003f000, 0x0003f800, + 0x0003e000, 0x00038000, 0x0003e800, 0x0003a800, + 0x00074800, 0x00073000, 0x00071800, 0x00071000, + 0x00074000, 0x00075800, 0x00070800, 0x00073800, + 0x00075000, 0x00072000, 0x00077000, 0x00077800, + 0x00076000, 0x00070000, 0x00076800, 0x00072800, + 0x0004c800, 0x0004b000, 0x00049800, 0x00049000, + 0x0004c000, 0x0004d800, 0x00048800, 0x0004b800, + 0x0004d000, 0x0004a000, 0x0004f000, 0x0004f800, + 0x0004e000, 0x00048000, 0x0004e800, 0x0004a800, + 0x00044800, 0x00043000, 0x00041800, 0x00041000, + 0x00044000, 0x00045800, 0x00040800, 0x00043800, + 0x00045000, 0x00042000, 0x00047000, 0x00047800, + 0x00046000, 0x00040000, 0x00046800, 0x00042800, + 0x00054800, 0x00053000, 0x00051800, 0x00051000, + 0x00054000, 0x00055800, 0x00050800, 0x00053800, + 0x00055000, 0x00052000, 0x00057000, 0x00057800, + 0x00056000, 0x00050000, 0x00056800, 0x00052800, + 0x0007c800, 0x0007b000, 0x00079800, 0x00079000, + 0x0007c000, 0x0007d800, 0x00078800, 0x0007b800, + 0x0007d000, 0x0007a000, 0x0007f000, 0x0007f800, + 0x0007e000, 0x00078000, 0x0007e800, 0x0007a800, + 0x00004800, 0x00003000, 0x00001800, 0x00001000, + 0x00004000, 0x00005800, 0x00000800, 0x00003800, + 0x00005000, 0x00002000, 0x00007000, 0x00007800, + 0x00006000, 0x00000000, 0x00006800, 0x00002800, + 0x0002c800, 0x0002b000, 0x00029800, 0x00029000, + 0x0002c000, 0x0002d800, 0x00028800, 0x0002b800, + 0x0002d000, 0x0002a000, 0x0002f000, 0x0002f800, + 0x0002e000, 0x00028000, 0x0002e800, 0x0002a800, + 0x00014800, 0x00013000, 0x00011800, 0x00011000, + 0x00014000, 0x00015800, 0x00010800, 0x00013800, + 0x00015000, 0x00012000, 0x00017000, 0x00017800, + 0x00016000, 0x00010000, 0x00016800, 0x00012800, + 0x00034800, 0x00033000, 0x00031800, 0x00031000, + 0x00034000, 0x00035800, 0x00030800, 0x00033800, + 0x00035000, 0x00032000, 0x00037000, 0x00037800, + 0x00036000, 0x00030000, 0x00036800, 0x00032800, + 0x00064800, 0x00063000, 0x00061800, 0x00061000, + 0x00064000, 0x00065800, 0x00060800, 0x00063800, + 0x00065000, 0x00062000, 0x00067000, 0x00067800, + 0x00066000, 0x00060000, 0x00066800, 0x00062800, + 0x0005c800, 0x0005b000, 0x00059800, 0x00059000, + 0x0005c000, 0x0005d800, 0x00058800, 0x0005b800, + 0x0005d000, 0x0005a000, 0x0005f000, 0x0005f800, + 0x0005e000, 0x00058000, 0x0005e800, 0x0005a800, + 0x00024800, 0x00023000, 0x00021800, 0x00021000, + 0x00024000, 0x00025800, 0x00020800, 0x00023800, + 0x00025000, 0x00022000, 0x00027000, 0x00027800, + 0x00026000, 0x00020000, 0x00026800, 0x00022800, + 0x0006c800, 0x0006b000, 0x00069800, 0x00069000, + 0x0006c000, 0x0006d800, 0x00068800, 0x0006b800, + 0x0006d000, 0x0006a000, 0x0006f000, 0x0006f800, + 0x0006e000, 0x00068000, 0x0006e800, 0x0006a800, + 0x0000c800, 0x0000b000, 0x00009800, 0x00009000, + 0x0000c000, 0x0000d800, 0x00008800, 0x0000b800, + 0x0000d000, 0x0000a000, 0x0000f000, 0x0000f800, + 0x0000e000, 0x00008000, 0x0000e800, 0x0000a800, + /* 1 */ + 0x07700000, 0x07200000, 0x07300000, 0x07100000, + 0x07580000, 0x07180000, 0x07680000, 0x07400000, + 0x07600000, 0x07780000, 0x07280000, 0x07500000, + 0x07000000, 0x07380000, 0x07080000, 0x07480000, + 0x03f00000, 0x03a00000, 0x03b00000, 0x03900000, + 0x03d80000, 0x03980000, 0x03e80000, 0x03c00000, + 0x03e00000, 0x03f80000, 0x03a80000, 0x03d00000, + 0x03800000, 0x03b80000, 0x03880000, 0x03c80000, + 0x05700000, 0x05200000, 0x05300000, 0x05100000, + 0x05580000, 0x05180000, 0x05680000, 0x05400000, + 0x05600000, 0x05780000, 0x05280000, 0x05500000, + 0x05000000, 0x05380000, 0x05080000, 0x05480000, + 0x06700000, 0x06200000, 0x06300000, 0x06100000, + 0x06580000, 0x06180000, 0x06680000, 0x06400000, + 0x06600000, 0x06780000, 0x06280000, 0x06500000, + 0x06000000, 0x06380000, 0x06080000, 0x06480000, + 0x06f00000, 0x06a00000, 0x06b00000, 0x06900000, + 0x06d80000, 0x06980000, 0x06e80000, 0x06c00000, + 0x06e00000, 0x06f80000, 0x06a80000, 0x06d00000, + 0x06800000, 0x06b80000, 0x06880000, 0x06c80000, + 0x00f00000, 0x00a00000, 0x00b00000, 0x00900000, + 0x00d80000, 0x00980000, 0x00e80000, 0x00c00000, + 0x00e00000, 0x00f80000, 0x00a80000, 0x00d00000, + 0x00800000, 0x00b80000, 0x00880000, 0x00c80000, + 0x01f00000, 0x01a00000, 0x01b00000, 0x01900000, + 0x01d80000, 0x01980000, 0x01e80000, 0x01c00000, + 0x01e00000, 0x01f80000, 0x01a80000, 0x01d00000, + 0x01800000, 0x01b80000, 0x01880000, 0x01c80000, + 0x04f00000, 0x04a00000, 0x04b00000, 0x04900000, + 0x04d80000, 0x04980000, 0x04e80000, 0x04c00000, + 0x04e00000, 0x04f80000, 0x04a80000, 0x04d00000, + 0x04800000, 0x04b80000, 0x04880000, 0x04c80000, + 0x00700000, 0x00200000, 0x00300000, 0x00100000, + 0x00580000, 0x00180000, 0x00680000, 0x00400000, + 0x00600000, 0x00780000, 0x00280000, 0x00500000, + 0x00000000, 0x00380000, 0x00080000, 0x00480000, + 0x01700000, 0x01200000, 0x01300000, 0x01100000, + 0x01580000, 0x01180000, 0x01680000, 0x01400000, + 0x01600000, 0x01780000, 0x01280000, 0x01500000, + 0x01000000, 0x01380000, 0x01080000, 0x01480000, + 0x05f00000, 0x05a00000, 0x05b00000, 0x05900000, + 0x05d80000, 0x05980000, 0x05e80000, 0x05c00000, + 0x05e00000, 0x05f80000, 0x05a80000, 0x05d00000, + 0x05800000, 0x05b80000, 0x05880000, 0x05c80000, + 0x02700000, 0x02200000, 0x02300000, 0x02100000, + 0x02580000, 0x02180000, 0x02680000, 0x02400000, + 0x02600000, 0x02780000, 0x02280000, 0x02500000, + 0x02000000, 0x02380000, 0x02080000, 0x02480000, + 0x07f00000, 0x07a00000, 0x07b00000, 0x07900000, + 0x07d80000, 0x07980000, 0x07e80000, 0x07c00000, + 0x07e00000, 0x07f80000, 0x07a80000, 0x07d00000, + 0x07800000, 0x07b80000, 0x07880000, 0x07c80000, + 0x04700000, 0x04200000, 0x04300000, 0x04100000, + 0x04580000, 0x04180000, 0x04680000, 0x04400000, + 0x04600000, 0x04780000, 0x04280000, 0x04500000, + 0x04000000, 0x04380000, 0x04080000, 0x04480000, + 0x02f00000, 0x02a00000, 0x02b00000, 0x02900000, + 0x02d80000, 0x02980000, 0x02e80000, 0x02c00000, + 0x02e00000, 0x02f80000, 0x02a80000, 0x02d00000, + 0x02800000, 0x02b80000, 0x02880000, 0x02c80000, + 0x03700000, 0x03200000, 0x03300000, 0x03100000, + 0x03580000, 0x03180000, 0x03680000, 0x03400000, + 0x03600000, 0x03780000, 0x03280000, 0x03500000, + 0x03000000, 0x03380000, 0x03080000, 0x03480000, + /* 2 */ + 0xd8000001, 0xa8000001, 0x88000001, 0xc8000001, + 0xc0000001, 0xe8000001, 0xf8000001, 0x80000001, + 0xf0000001, 0xa0000001, 0x90000001, 0x98000001, + 0xe0000001, 0xb8000001, 0xd0000001, 0xb0000001, + 0x58000005, 0x28000005, 0x08000005, 0x48000005, + 0x40000005, 0x68000005, 0x78000005, 0x00000005, + 0x70000005, 0x20000005, 0x10000005, 0x18000005, + 0x60000005, 0x38000005, 0x50000005, 0x30000005, + 0xd8000006, 0xa8000006, 0x88000006, 0xc8000006, + 0xc0000006, 0xe8000006, 0xf8000006, 0x80000006, + 0xf0000006, 0xa0000006, 0x90000006, 0x98000006, + 0xe0000006, 0xb8000006, 0xd0000006, 0xb0000006, + 0x58000006, 0x28000006, 0x08000006, 0x48000006, + 0x40000006, 0x68000006, 0x78000006, 0x00000006, + 0x70000006, 0x20000006, 0x10000006, 0x18000006, + 0x60000006, 0x38000006, 0x50000006, 0x30000006, + 0xd8000000, 0xa8000000, 0x88000000, 0xc8000000, + 0xc0000000, 0xe8000000, 0xf8000000, 0x80000000, + 0xf0000000, 0xa0000000, 0x90000000, 0x98000000, + 0xe0000000, 0xb8000000, 0xd0000000, 0xb0000000, + 0x58000001, 0x28000001, 0x08000001, 0x48000001, + 0x40000001, 0x68000001, 0x78000001, 0x00000001, + 0x70000001, 0x20000001, 0x10000001, 0x18000001, + 0x60000001, 0x38000001, 0x50000001, 0x30000001, + 0x58000000, 0x28000000, 0x08000000, 0x48000000, + 0x40000000, 0x68000000, 0x78000000, 0x00000000, + 0x70000000, 0x20000000, 0x10000000, 0x18000000, + 0x60000000, 0x38000000, 0x50000000, 0x30000000, + 0xd8000005, 0xa8000005, 0x88000005, 0xc8000005, + 0xc0000005, 0xe8000005, 0xf8000005, 0x80000005, + 0xf0000005, 0xa0000005, 0x90000005, 0x98000005, + 0xe0000005, 0xb8000005, 0xd0000005, 0xb0000005, + 0xd8000003, 0xa8000003, 0x88000003, 0xc8000003, + 0xc0000003, 0xe8000003, 0xf8000003, 0x80000003, + 0xf0000003, 0xa0000003, 0x90000003, 0x98000003, + 0xe0000003, 0xb8000003, 0xd0000003, 0xb0000003, + 0xd8000002, 0xa8000002, 0x88000002, 0xc8000002, + 0xc0000002, 0xe8000002, 0xf8000002, 0x80000002, + 0xf0000002, 0xa0000002, 0x90000002, 0x98000002, + 0xe0000002, 0xb8000002, 0xd0000002, 0xb0000002, + 0xd8000004, 0xa8000004, 0x88000004, 0xc8000004, + 0xc0000004, 0xe8000004, 0xf8000004, 0x80000004, + 0xf0000004, 0xa0000004, 0x90000004, 0x98000004, + 0xe0000004, 0xb8000004, 0xd0000004, 0xb0000004, + 0x58000002, 0x28000002, 0x08000002, 0x48000002, + 0x40000002, 0x68000002, 0x78000002, 0x00000002, + 0x70000002, 0x20000002, 0x10000002, 0x18000002, + 0x60000002, 0x38000002, 0x50000002, 0x30000002, + 0x58000004, 0x28000004, 0x08000004, 0x48000004, + 0x40000004, 0x68000004, 0x78000004, 0x00000004, + 0x70000004, 0x20000004, 0x10000004, 0x18000004, + 0x60000004, 0x38000004, 0x50000004, 0x30000004, + 0xd8000007, 0xa8000007, 0x88000007, 0xc8000007, + 0xc0000007, 0xe8000007, 0xf8000007, 0x80000007, + 0xf0000007, 0xa0000007, 0x90000007, 0x98000007, + 0xe0000007, 0xb8000007, 0xd0000007, 0xb0000007, + 0x58000007, 0x28000007, 0x08000007, 0x48000007, + 0x40000007, 0x68000007, 0x78000007, 0x00000007, + 0x70000007, 0x20000007, 0x10000007, 0x18000007, + 0x60000007, 0x38000007, 0x50000007, 0x30000007, + 0x58000003, 0x28000003, 0x08000003, 0x48000003, + 0x40000003, 0x68000003, 0x78000003, 0x00000003, + 0x70000003, 0x20000003, 0x10000003, 0x18000003, + 0x60000003, 0x38000003, 0x50000003, 0x30000003, + /* 3 */ + 0x00000588, 0x000005e8, 0x00000590, 0x000005c8, + 0x000005b8, 0x000005d0, 0x000005b0, 0x00000580, + 0x000005c0, 0x000005e0, 0x000005a0, 0x000005a8, + 0x000005f8, 0x00000598, 0x000005d8, 0x000005f0, + 0x00000508, 0x00000568, 0x00000510, 0x00000548, + 0x00000538, 0x00000550, 0x00000530, 0x00000500, + 0x00000540, 0x00000560, 0x00000520, 0x00000528, + 0x00000578, 0x00000518, 0x00000558, 0x00000570, + 0x00000788, 0x000007e8, 0x00000790, 0x000007c8, + 0x000007b8, 0x000007d0, 0x000007b0, 0x00000780, + 0x000007c0, 0x000007e0, 0x000007a0, 0x000007a8, + 0x000007f8, 0x00000798, 0x000007d8, 0x000007f0, + 0x00000288, 0x000002e8, 0x00000290, 0x000002c8, + 0x000002b8, 0x000002d0, 0x000002b0, 0x00000280, + 0x000002c0, 0x000002e0, 0x000002a0, 0x000002a8, + 0x000002f8, 0x00000298, 0x000002d8, 0x000002f0, + 0x00000008, 0x00000068, 0x00000010, 0x00000048, + 0x00000038, 0x00000050, 0x00000030, 0x00000000, + 0x00000040, 0x00000060, 0x00000020, 0x00000028, + 0x00000078, 0x00000018, 0x00000058, 0x00000070, + 0x00000608, 0x00000668, 0x00000610, 0x00000648, + 0x00000638, 0x00000650, 0x00000630, 0x00000600, + 0x00000640, 0x00000660, 0x00000620, 0x00000628, + 0x00000678, 0x00000618, 0x00000658, 0x00000670, + 0x00000708, 0x00000768, 0x00000710, 0x00000748, + 0x00000738, 0x00000750, 0x00000730, 0x00000700, + 0x00000740, 0x00000760, 0x00000720, 0x00000728, + 0x00000778, 0x00000718, 0x00000758, 0x00000770, + 0x00000408, 0x00000468, 0x00000410, 0x00000448, + 0x00000438, 0x00000450, 0x00000430, 0x00000400, + 0x00000440, 0x00000460, 0x00000420, 0x00000428, + 0x00000478, 0x00000418, 0x00000458, 0x00000470, + 0x00000308, 0x00000368, 0x00000310, 0x00000348, + 0x00000338, 0x00000350, 0x00000330, 0x00000300, + 0x00000340, 0x00000360, 0x00000320, 0x00000328, + 0x00000378, 0x00000318, 0x00000358, 0x00000370, + 0x00000108, 0x00000168, 0x00000110, 0x00000148, + 0x00000138, 0x00000150, 0x00000130, 0x00000100, + 0x00000140, 0x00000160, 0x00000120, 0x00000128, + 0x00000178, 0x00000118, 0x00000158, 0x00000170, + 0x00000188, 0x000001e8, 0x00000190, 0x000001c8, + 0x000001b8, 0x000001d0, 0x000001b0, 0x00000180, + 0x000001c0, 0x000001e0, 0x000001a0, 0x000001a8, + 0x000001f8, 0x00000198, 0x000001d8, 0x000001f0, + 0x00000488, 0x000004e8, 0x00000490, 0x000004c8, + 0x000004b8, 0x000004d0, 0x000004b0, 0x00000480, + 0x000004c0, 0x000004e0, 0x000004a0, 0x000004a8, + 0x000004f8, 0x00000498, 0x000004d8, 0x000004f0, + 0x00000088, 0x000000e8, 0x00000090, 0x000000c8, + 0x000000b8, 0x000000d0, 0x000000b0, 0x00000080, + 0x000000c0, 0x000000e0, 0x000000a0, 0x000000a8, + 0x000000f8, 0x00000098, 0x000000d8, 0x000000f0, + 0x00000388, 0x000003e8, 0x00000390, 0x000003c8, + 0x000003b8, 0x000003d0, 0x000003b0, 0x00000380, + 0x000003c0, 0x000003e0, 0x000003a0, 0x000003a8, + 0x000003f8, 0x00000398, 0x000003d8, 0x000003f0, + 0x00000688, 0x000006e8, 0x00000690, 0x000006c8, + 0x000006b8, 0x000006d0, 0x000006b0, 0x00000680, + 0x000006c0, 0x000006e0, 0x000006a0, 0x000006a8, + 0x000006f8, 0x00000698, 0x000006d8, 0x000006f0, + 0x00000208, 0x00000268, 0x00000210, 0x00000248, + 0x00000238, 0x00000250, 0x00000230, 0x00000200, + 0x00000240, 0x00000260, 0x00000220, 0x00000228, + 0x00000278, 0x00000218, 0x00000258, 0x00000270, + } +}; + +const struct gost28147_param gost28147_param_CryptoPro_B = +{ + 1, + { + /* 0 */ + 0x00004000, 0x00002000, 0x00005800, 0x00000800, + 0x00001800, 0x00002800, 0x00000000, 0x00004800, + 0x00001000, 0x00007000, 0x00005000, 0x00006000, + 0x00006800, 0x00003000, 0x00003800, 0x00007800, + 0x0000c000, 0x0000a000, 0x0000d800, 0x00008800, + 0x00009800, 0x0000a800, 0x00008000, 0x0000c800, + 0x00009000, 0x0000f000, 0x0000d000, 0x0000e000, + 0x0000e800, 0x0000b000, 0x0000b800, 0x0000f800, + 0x00014000, 0x00012000, 0x00015800, 0x00010800, + 0x00011800, 0x00012800, 0x00010000, 0x00014800, + 0x00011000, 0x00017000, 0x00015000, 0x00016000, + 0x00016800, 0x00013000, 0x00013800, 0x00017800, + 0x00054000, 0x00052000, 0x00055800, 0x00050800, + 0x00051800, 0x00052800, 0x00050000, 0x00054800, + 0x00051000, 0x00057000, 0x00055000, 0x00056000, + 0x00056800, 0x00053000, 0x00053800, 0x00057800, + 0x00024000, 0x00022000, 0x00025800, 0x00020800, + 0x00021800, 0x00022800, 0x00020000, 0x00024800, + 0x00021000, 0x00027000, 0x00025000, 0x00026000, + 0x00026800, 0x00023000, 0x00023800, 0x00027800, + 0x0006c000, 0x0006a000, 0x0006d800, 0x00068800, + 0x00069800, 0x0006a800, 0x00068000, 0x0006c800, + 0x00069000, 0x0006f000, 0x0006d000, 0x0006e000, + 0x0006e800, 0x0006b000, 0x0006b800, 0x0006f800, + 0x0002c000, 0x0002a000, 0x0002d800, 0x00028800, + 0x00029800, 0x0002a800, 0x00028000, 0x0002c800, + 0x00029000, 0x0002f000, 0x0002d000, 0x0002e000, + 0x0002e800, 0x0002b000, 0x0002b800, 0x0002f800, + 0x00064000, 0x00062000, 0x00065800, 0x00060800, + 0x00061800, 0x00062800, 0x00060000, 0x00064800, + 0x00061000, 0x00067000, 0x00065000, 0x00066000, + 0x00066800, 0x00063000, 0x00063800, 0x00067800, + 0x0004c000, 0x0004a000, 0x0004d800, 0x00048800, + 0x00049800, 0x0004a800, 0x00048000, 0x0004c800, + 0x00049000, 0x0004f000, 0x0004d000, 0x0004e000, + 0x0004e800, 0x0004b000, 0x0004b800, 0x0004f800, + 0x0003c000, 0x0003a000, 0x0003d800, 0x00038800, + 0x00039800, 0x0003a800, 0x00038000, 0x0003c800, + 0x00039000, 0x0003f000, 0x0003d000, 0x0003e000, + 0x0003e800, 0x0003b000, 0x0003b800, 0x0003f800, + 0x0001c000, 0x0001a000, 0x0001d800, 0x00018800, + 0x00019800, 0x0001a800, 0x00018000, 0x0001c800, + 0x00019000, 0x0001f000, 0x0001d000, 0x0001e000, + 0x0001e800, 0x0001b000, 0x0001b800, 0x0001f800, + 0x0007c000, 0x0007a000, 0x0007d800, 0x00078800, + 0x00079800, 0x0007a800, 0x00078000, 0x0007c800, + 0x00079000, 0x0007f000, 0x0007d000, 0x0007e000, + 0x0007e800, 0x0007b000, 0x0007b800, 0x0007f800, + 0x0005c000, 0x0005a000, 0x0005d800, 0x00058800, + 0x00059800, 0x0005a800, 0x00058000, 0x0005c800, + 0x00059000, 0x0005f000, 0x0005d000, 0x0005e000, + 0x0005e800, 0x0005b000, 0x0005b800, 0x0005f800, + 0x00044000, 0x00042000, 0x00045800, 0x00040800, + 0x00041800, 0x00042800, 0x00040000, 0x00044800, + 0x00041000, 0x00047000, 0x00045000, 0x00046000, + 0x00046800, 0x00043000, 0x00043800, 0x00047800, + 0x00034000, 0x00032000, 0x00035800, 0x00030800, + 0x00031800, 0x00032800, 0x00030000, 0x00034800, + 0x00031000, 0x00037000, 0x00035000, 0x00036000, + 0x00036800, 0x00033000, 0x00033800, 0x00037800, + 0x00074000, 0x00072000, 0x00075800, 0x00070800, + 0x00071800, 0x00072800, 0x00070000, 0x00074800, + 0x00071000, 0x00077000, 0x00075000, 0x00076000, + 0x00076800, 0x00073000, 0x00073800, 0x00077800, + /* 1 */ + 0x03f00000, 0x03e00000, 0x03800000, 0x03d00000, + 0x03c80000, 0x03900000, 0x03e80000, 0x03d80000, + 0x03b80000, 0x03a80000, 0x03c00000, 0x03f80000, + 0x03980000, 0x03b00000, 0x03880000, 0x03a00000, + 0x02f00000, 0x02e00000, 0x02800000, 0x02d00000, + 0x02c80000, 0x02900000, 0x02e80000, 0x02d80000, + 0x02b80000, 0x02a80000, 0x02c00000, 0x02f80000, + 0x02980000, 0x02b00000, 0x02880000, 0x02a00000, + 0x00700000, 0x00600000, 0x00000000, 0x00500000, + 0x00480000, 0x00100000, 0x00680000, 0x00580000, + 0x00380000, 0x00280000, 0x00400000, 0x00780000, + 0x00180000, 0x00300000, 0x00080000, 0x00200000, + 0x06f00000, 0x06e00000, 0x06800000, 0x06d00000, + 0x06c80000, 0x06900000, 0x06e80000, 0x06d80000, + 0x06b80000, 0x06a80000, 0x06c00000, 0x06f80000, + 0x06980000, 0x06b00000, 0x06880000, 0x06a00000, + 0x05f00000, 0x05e00000, 0x05800000, 0x05d00000, + 0x05c80000, 0x05900000, 0x05e80000, 0x05d80000, + 0x05b80000, 0x05a80000, 0x05c00000, 0x05f80000, + 0x05980000, 0x05b00000, 0x05880000, 0x05a00000, + 0x03700000, 0x03600000, 0x03000000, 0x03500000, + 0x03480000, 0x03100000, 0x03680000, 0x03580000, + 0x03380000, 0x03280000, 0x03400000, 0x03780000, + 0x03180000, 0x03300000, 0x03080000, 0x03200000, + 0x00f00000, 0x00e00000, 0x00800000, 0x00d00000, + 0x00c80000, 0x00900000, 0x00e80000, 0x00d80000, + 0x00b80000, 0x00a80000, 0x00c00000, 0x00f80000, + 0x00980000, 0x00b00000, 0x00880000, 0x00a00000, + 0x01700000, 0x01600000, 0x01000000, 0x01500000, + 0x01480000, 0x01100000, 0x01680000, 0x01580000, + 0x01380000, 0x01280000, 0x01400000, 0x01780000, + 0x01180000, 0x01300000, 0x01080000, 0x01200000, + 0x01f00000, 0x01e00000, 0x01800000, 0x01d00000, + 0x01c80000, 0x01900000, 0x01e80000, 0x01d80000, + 0x01b80000, 0x01a80000, 0x01c00000, 0x01f80000, + 0x01980000, 0x01b00000, 0x01880000, 0x01a00000, + 0x05700000, 0x05600000, 0x05000000, 0x05500000, + 0x05480000, 0x05100000, 0x05680000, 0x05580000, + 0x05380000, 0x05280000, 0x05400000, 0x05780000, + 0x05180000, 0x05300000, 0x05080000, 0x05200000, + 0x06700000, 0x06600000, 0x06000000, 0x06500000, + 0x06480000, 0x06100000, 0x06680000, 0x06580000, + 0x06380000, 0x06280000, 0x06400000, 0x06780000, + 0x06180000, 0x06300000, 0x06080000, 0x06200000, + 0x07f00000, 0x07e00000, 0x07800000, 0x07d00000, + 0x07c80000, 0x07900000, 0x07e80000, 0x07d80000, + 0x07b80000, 0x07a80000, 0x07c00000, 0x07f80000, + 0x07980000, 0x07b00000, 0x07880000, 0x07a00000, + 0x02700000, 0x02600000, 0x02000000, 0x02500000, + 0x02480000, 0x02100000, 0x02680000, 0x02580000, + 0x02380000, 0x02280000, 0x02400000, 0x02780000, + 0x02180000, 0x02300000, 0x02080000, 0x02200000, + 0x07700000, 0x07600000, 0x07000000, 0x07500000, + 0x07480000, 0x07100000, 0x07680000, 0x07580000, + 0x07380000, 0x07280000, 0x07400000, 0x07780000, + 0x07180000, 0x07300000, 0x07080000, 0x07200000, + 0x04f00000, 0x04e00000, 0x04800000, 0x04d00000, + 0x04c80000, 0x04900000, 0x04e80000, 0x04d80000, + 0x04b80000, 0x04a80000, 0x04c00000, 0x04f80000, + 0x04980000, 0x04b00000, 0x04880000, 0x04a00000, + 0x04700000, 0x04600000, 0x04000000, 0x04500000, + 0x04480000, 0x04100000, 0x04680000, 0x04580000, + 0x04380000, 0x04280000, 0x04400000, 0x04780000, + 0x04180000, 0x04300000, 0x04080000, 0x04200000, + /* 2 */ + 0x10000004, 0x38000004, 0x60000004, 0x78000004, + 0x48000004, 0x28000004, 0x50000004, 0x58000004, + 0x08000004, 0x20000004, 0x00000004, 0x68000004, + 0x30000004, 0x40000004, 0x70000004, 0x18000004, + 0x90000001, 0xb8000001, 0xe0000001, 0xf8000001, + 0xc8000001, 0xa8000001, 0xd0000001, 0xd8000001, + 0x88000001, 0xa0000001, 0x80000001, 0xe8000001, + 0xb0000001, 0xc0000001, 0xf0000001, 0x98000001, + 0x10000001, 0x38000001, 0x60000001, 0x78000001, + 0x48000001, 0x28000001, 0x50000001, 0x58000001, + 0x08000001, 0x20000001, 0x00000001, 0x68000001, + 0x30000001, 0x40000001, 0x70000001, 0x18000001, + 0x10000003, 0x38000003, 0x60000003, 0x78000003, + 0x48000003, 0x28000003, 0x50000003, 0x58000003, + 0x08000003, 0x20000003, 0x00000003, 0x68000003, + 0x30000003, 0x40000003, 0x70000003, 0x18000003, + 0x10000002, 0x38000002, 0x60000002, 0x78000002, + 0x48000002, 0x28000002, 0x50000002, 0x58000002, + 0x08000002, 0x20000002, 0x00000002, 0x68000002, + 0x30000002, 0x40000002, 0x70000002, 0x18000002, + 0x90000006, 0xb8000006, 0xe0000006, 0xf8000006, + 0xc8000006, 0xa8000006, 0xd0000006, 0xd8000006, + 0x88000006, 0xa0000006, 0x80000006, 0xe8000006, + 0xb0000006, 0xc0000006, 0xf0000006, 0x98000006, + 0x10000007, 0x38000007, 0x60000007, 0x78000007, + 0x48000007, 0x28000007, 0x50000007, 0x58000007, + 0x08000007, 0x20000007, 0x00000007, 0x68000007, + 0x30000007, 0x40000007, 0x70000007, 0x18000007, + 0x90000005, 0xb8000005, 0xe0000005, 0xf8000005, + 0xc8000005, 0xa8000005, 0xd0000005, 0xd8000005, + 0x88000005, 0xa0000005, 0x80000005, 0xe8000005, + 0xb0000005, 0xc0000005, 0xf0000005, 0x98000005, + 0x10000006, 0x38000006, 0x60000006, 0x78000006, + 0x48000006, 0x28000006, 0x50000006, 0x58000006, + 0x08000006, 0x20000006, 0x00000006, 0x68000006, + 0x30000006, 0x40000006, 0x70000006, 0x18000006, + 0x90000000, 0xb8000000, 0xe0000000, 0xf8000000, + 0xc8000000, 0xa8000000, 0xd0000000, 0xd8000000, + 0x88000000, 0xa0000000, 0x80000000, 0xe8000000, + 0xb0000000, 0xc0000000, 0xf0000000, 0x98000000, + 0x90000003, 0xb8000003, 0xe0000003, 0xf8000003, + 0xc8000003, 0xa8000003, 0xd0000003, 0xd8000003, + 0x88000003, 0xa0000003, 0x80000003, 0xe8000003, + 0xb0000003, 0xc0000003, 0xf0000003, 0x98000003, + 0x90000007, 0xb8000007, 0xe0000007, 0xf8000007, + 0xc8000007, 0xa8000007, 0xd0000007, 0xd8000007, + 0x88000007, 0xa0000007, 0x80000007, 0xe8000007, + 0xb0000007, 0xc0000007, 0xf0000007, 0x98000007, + 0x10000005, 0x38000005, 0x60000005, 0x78000005, + 0x48000005, 0x28000005, 0x50000005, 0x58000005, + 0x08000005, 0x20000005, 0x00000005, 0x68000005, + 0x30000005, 0x40000005, 0x70000005, 0x18000005, + 0x10000000, 0x38000000, 0x60000000, 0x78000000, + 0x48000000, 0x28000000, 0x50000000, 0x58000000, + 0x08000000, 0x20000000, 0x00000000, 0x68000000, + 0x30000000, 0x40000000, 0x70000000, 0x18000000, + 0x90000004, 0xb8000004, 0xe0000004, 0xf8000004, + 0xc8000004, 0xa8000004, 0xd0000004, 0xd8000004, + 0x88000004, 0xa0000004, 0x80000004, 0xe8000004, + 0xb0000004, 0xc0000004, 0xf0000004, 0x98000004, + 0x90000002, 0xb8000002, 0xe0000002, 0xf8000002, + 0xc8000002, 0xa8000002, 0xd0000002, 0xd8000002, + 0x88000002, 0xa0000002, 0x80000002, 0xe8000002, + 0xb0000002, 0xc0000002, 0xf0000002, 0x98000002, + /* 3 */ + 0x00000028, 0x00000010, 0x00000050, 0x00000058, + 0x00000048, 0x00000008, 0x00000060, 0x00000018, + 0x00000038, 0x00000020, 0x00000068, 0x00000000, + 0x00000030, 0x00000078, 0x00000040, 0x00000070, + 0x00000228, 0x00000210, 0x00000250, 0x00000258, + 0x00000248, 0x00000208, 0x00000260, 0x00000218, + 0x00000238, 0x00000220, 0x00000268, 0x00000200, + 0x00000230, 0x00000278, 0x00000240, 0x00000270, + 0x000005a8, 0x00000590, 0x000005d0, 0x000005d8, + 0x000005c8, 0x00000588, 0x000005e0, 0x00000598, + 0x000005b8, 0x000005a0, 0x000005e8, 0x00000580, + 0x000005b0, 0x000005f8, 0x000005c0, 0x000005f0, + 0x00000728, 0x00000710, 0x00000750, 0x00000758, + 0x00000748, 0x00000708, 0x00000760, 0x00000718, + 0x00000738, 0x00000720, 0x00000768, 0x00000700, + 0x00000730, 0x00000778, 0x00000740, 0x00000770, + 0x00000428, 0x00000410, 0x00000450, 0x00000458, + 0x00000448, 0x00000408, 0x00000460, 0x00000418, + 0x00000438, 0x00000420, 0x00000468, 0x00000400, + 0x00000430, 0x00000478, 0x00000440, 0x00000470, + 0x000001a8, 0x00000190, 0x000001d0, 0x000001d8, + 0x000001c8, 0x00000188, 0x000001e0, 0x00000198, + 0x000001b8, 0x000001a0, 0x000001e8, 0x00000180, + 0x000001b0, 0x000001f8, 0x000001c0, 0x000001f0, + 0x000003a8, 0x00000390, 0x000003d0, 0x000003d8, + 0x000003c8, 0x00000388, 0x000003e0, 0x00000398, + 0x000003b8, 0x000003a0, 0x000003e8, 0x00000380, + 0x000003b0, 0x000003f8, 0x000003c0, 0x000003f0, + 0x000000a8, 0x00000090, 0x000000d0, 0x000000d8, + 0x000000c8, 0x00000088, 0x000000e0, 0x00000098, + 0x000000b8, 0x000000a0, 0x000000e8, 0x00000080, + 0x000000b0, 0x000000f8, 0x000000c0, 0x000000f0, + 0x00000528, 0x00000510, 0x00000550, 0x00000558, + 0x00000548, 0x00000508, 0x00000560, 0x00000518, + 0x00000538, 0x00000520, 0x00000568, 0x00000500, + 0x00000530, 0x00000578, 0x00000540, 0x00000570, + 0x00000128, 0x00000110, 0x00000150, 0x00000158, + 0x00000148, 0x00000108, 0x00000160, 0x00000118, + 0x00000138, 0x00000120, 0x00000168, 0x00000100, + 0x00000130, 0x00000178, 0x00000140, 0x00000170, + 0x000004a8, 0x00000490, 0x000004d0, 0x000004d8, + 0x000004c8, 0x00000488, 0x000004e0, 0x00000498, + 0x000004b8, 0x000004a0, 0x000004e8, 0x00000480, + 0x000004b0, 0x000004f8, 0x000004c0, 0x000004f0, + 0x00000328, 0x00000310, 0x00000350, 0x00000358, + 0x00000348, 0x00000308, 0x00000360, 0x00000318, + 0x00000338, 0x00000320, 0x00000368, 0x00000300, + 0x00000330, 0x00000378, 0x00000340, 0x00000370, + 0x000007a8, 0x00000790, 0x000007d0, 0x000007d8, + 0x000007c8, 0x00000788, 0x000007e0, 0x00000798, + 0x000007b8, 0x000007a0, 0x000007e8, 0x00000780, + 0x000007b0, 0x000007f8, 0x000007c0, 0x000007f0, + 0x000006a8, 0x00000690, 0x000006d0, 0x000006d8, + 0x000006c8, 0x00000688, 0x000006e0, 0x00000698, + 0x000006b8, 0x000006a0, 0x000006e8, 0x00000680, + 0x000006b0, 0x000006f8, 0x000006c0, 0x000006f0, + 0x000002a8, 0x00000290, 0x000002d0, 0x000002d8, + 0x000002c8, 0x00000288, 0x000002e0, 0x00000298, + 0x000002b8, 0x000002a0, 0x000002e8, 0x00000280, + 0x000002b0, 0x000002f8, 0x000002c0, 0x000002f0, + 0x00000628, 0x00000610, 0x00000650, 0x00000658, + 0x00000648, 0x00000608, 0x00000660, 0x00000618, + 0x00000638, 0x00000620, 0x00000668, 0x00000600, + 0x00000630, 0x00000678, 0x00000640, 0x00000670, + } +}; + +const struct gost28147_param gost28147_param_CryptoPro_C = +{ + 1, + { + /* 0 */ + 0x00000800, 0x00005800, 0x00006000, 0x00001000, + 0x00004800, 0x00006800, 0x00000000, 0x00007800, + 0x00002000, 0x00002800, 0x00004000, 0x00007000, + 0x00005000, 0x00003800, 0x00003000, 0x00001800, + 0x00008800, 0x0000d800, 0x0000e000, 0x00009000, + 0x0000c800, 0x0000e800, 0x00008000, 0x0000f800, + 0x0000a000, 0x0000a800, 0x0000c000, 0x0000f000, + 0x0000d000, 0x0000b800, 0x0000b000, 0x00009800, + 0x00038800, 0x0003d800, 0x0003e000, 0x00039000, + 0x0003c800, 0x0003e800, 0x00038000, 0x0003f800, + 0x0003a000, 0x0003a800, 0x0003c000, 0x0003f000, + 0x0003d000, 0x0003b800, 0x0003b000, 0x00039800, + 0x00068800, 0x0006d800, 0x0006e000, 0x00069000, + 0x0006c800, 0x0006e800, 0x00068000, 0x0006f800, + 0x0006a000, 0x0006a800, 0x0006c000, 0x0006f000, + 0x0006d000, 0x0006b800, 0x0006b000, 0x00069800, + 0x00058800, 0x0005d800, 0x0005e000, 0x00059000, + 0x0005c800, 0x0005e800, 0x00058000, 0x0005f800, + 0x0005a000, 0x0005a800, 0x0005c000, 0x0005f000, + 0x0005d000, 0x0005b800, 0x0005b000, 0x00059800, + 0x00020800, 0x00025800, 0x00026000, 0x00021000, + 0x00024800, 0x00026800, 0x00020000, 0x00027800, + 0x00022000, 0x00022800, 0x00024000, 0x00027000, + 0x00025000, 0x00023800, 0x00023000, 0x00021800, + 0x00028800, 0x0002d800, 0x0002e000, 0x00029000, + 0x0002c800, 0x0002e800, 0x00028000, 0x0002f800, + 0x0002a000, 0x0002a800, 0x0002c000, 0x0002f000, + 0x0002d000, 0x0002b800, 0x0002b000, 0x00029800, + 0x00010800, 0x00015800, 0x00016000, 0x00011000, + 0x00014800, 0x00016800, 0x00010000, 0x00017800, + 0x00012000, 0x00012800, 0x00014000, 0x00017000, + 0x00015000, 0x00013800, 0x00013000, 0x00011800, + 0x00040800, 0x00045800, 0x00046000, 0x00041000, + 0x00044800, 0x00046800, 0x00040000, 0x00047800, + 0x00042000, 0x00042800, 0x00044000, 0x00047000, + 0x00045000, 0x00043800, 0x00043000, 0x00041800, + 0x00070800, 0x00075800, 0x00076000, 0x00071000, + 0x00074800, 0x00076800, 0x00070000, 0x00077800, + 0x00072000, 0x00072800, 0x00074000, 0x00077000, + 0x00075000, 0x00073800, 0x00073000, 0x00071800, + 0x00078800, 0x0007d800, 0x0007e000, 0x00079000, + 0x0007c800, 0x0007e800, 0x00078000, 0x0007f800, + 0x0007a000, 0x0007a800, 0x0007c000, 0x0007f000, + 0x0007d000, 0x0007b800, 0x0007b000, 0x00079800, + 0x00060800, 0x00065800, 0x00066000, 0x00061000, + 0x00064800, 0x00066800, 0x00060000, 0x00067800, + 0x00062000, 0x00062800, 0x00064000, 0x00067000, + 0x00065000, 0x00063800, 0x00063000, 0x00061800, + 0x00048800, 0x0004d800, 0x0004e000, 0x00049000, + 0x0004c800, 0x0004e800, 0x00048000, 0x0004f800, + 0x0004a000, 0x0004a800, 0x0004c000, 0x0004f000, + 0x0004d000, 0x0004b800, 0x0004b000, 0x00049800, + 0x00050800, 0x00055800, 0x00056000, 0x00051000, + 0x00054800, 0x00056800, 0x00050000, 0x00057800, + 0x00052000, 0x00052800, 0x00054000, 0x00057000, + 0x00055000, 0x00053800, 0x00053000, 0x00051800, + 0x00030800, 0x00035800, 0x00036000, 0x00031000, + 0x00034800, 0x00036800, 0x00030000, 0x00037800, + 0x00032000, 0x00032800, 0x00034000, 0x00037000, + 0x00035000, 0x00033800, 0x00033000, 0x00031800, + 0x00018800, 0x0001d800, 0x0001e000, 0x00019000, + 0x0001c800, 0x0001e800, 0x00018000, 0x0001f800, + 0x0001a000, 0x0001a800, 0x0001c000, 0x0001f000, + 0x0001d000, 0x0001b800, 0x0001b000, 0x00019800, + /* 1 */ + 0x01c00000, 0x01900000, 0x01a80000, 0x01800000, + 0x01a00000, 0x01c80000, 0x01f80000, 0x01d00000, + 0x01980000, 0x01b80000, 0x01e00000, 0x01e80000, + 0x01b00000, 0x01f00000, 0x01880000, 0x01d80000, + 0x03400000, 0x03100000, 0x03280000, 0x03000000, + 0x03200000, 0x03480000, 0x03780000, 0x03500000, + 0x03180000, 0x03380000, 0x03600000, 0x03680000, + 0x03300000, 0x03700000, 0x03080000, 0x03580000, + 0x00400000, 0x00100000, 0x00280000, 0x00000000, + 0x00200000, 0x00480000, 0x00780000, 0x00500000, + 0x00180000, 0x00380000, 0x00600000, 0x00680000, + 0x00300000, 0x00700000, 0x00080000, 0x00580000, + 0x00c00000, 0x00900000, 0x00a80000, 0x00800000, + 0x00a00000, 0x00c80000, 0x00f80000, 0x00d00000, + 0x00980000, 0x00b80000, 0x00e00000, 0x00e80000, + 0x00b00000, 0x00f00000, 0x00880000, 0x00d80000, + 0x02c00000, 0x02900000, 0x02a80000, 0x02800000, + 0x02a00000, 0x02c80000, 0x02f80000, 0x02d00000, + 0x02980000, 0x02b80000, 0x02e00000, 0x02e80000, + 0x02b00000, 0x02f00000, 0x02880000, 0x02d80000, + 0x06c00000, 0x06900000, 0x06a80000, 0x06800000, + 0x06a00000, 0x06c80000, 0x06f80000, 0x06d00000, + 0x06980000, 0x06b80000, 0x06e00000, 0x06e80000, + 0x06b00000, 0x06f00000, 0x06880000, 0x06d80000, + 0x05400000, 0x05100000, 0x05280000, 0x05000000, + 0x05200000, 0x05480000, 0x05780000, 0x05500000, + 0x05180000, 0x05380000, 0x05600000, 0x05680000, + 0x05300000, 0x05700000, 0x05080000, 0x05580000, + 0x04400000, 0x04100000, 0x04280000, 0x04000000, + 0x04200000, 0x04480000, 0x04780000, 0x04500000, + 0x04180000, 0x04380000, 0x04600000, 0x04680000, + 0x04300000, 0x04700000, 0x04080000, 0x04580000, + 0x05c00000, 0x05900000, 0x05a80000, 0x05800000, + 0x05a00000, 0x05c80000, 0x05f80000, 0x05d00000, + 0x05980000, 0x05b80000, 0x05e00000, 0x05e80000, + 0x05b00000, 0x05f00000, 0x05880000, 0x05d80000, + 0x01400000, 0x01100000, 0x01280000, 0x01000000, + 0x01200000, 0x01480000, 0x01780000, 0x01500000, + 0x01180000, 0x01380000, 0x01600000, 0x01680000, + 0x01300000, 0x01700000, 0x01080000, 0x01580000, + 0x04c00000, 0x04900000, 0x04a80000, 0x04800000, + 0x04a00000, 0x04c80000, 0x04f80000, 0x04d00000, + 0x04980000, 0x04b80000, 0x04e00000, 0x04e80000, + 0x04b00000, 0x04f00000, 0x04880000, 0x04d80000, + 0x03c00000, 0x03900000, 0x03a80000, 0x03800000, + 0x03a00000, 0x03c80000, 0x03f80000, 0x03d00000, + 0x03980000, 0x03b80000, 0x03e00000, 0x03e80000, + 0x03b00000, 0x03f00000, 0x03880000, 0x03d80000, + 0x07400000, 0x07100000, 0x07280000, 0x07000000, + 0x07200000, 0x07480000, 0x07780000, 0x07500000, + 0x07180000, 0x07380000, 0x07600000, 0x07680000, + 0x07300000, 0x07700000, 0x07080000, 0x07580000, + 0x07c00000, 0x07900000, 0x07a80000, 0x07800000, + 0x07a00000, 0x07c80000, 0x07f80000, 0x07d00000, + 0x07980000, 0x07b80000, 0x07e00000, 0x07e80000, + 0x07b00000, 0x07f00000, 0x07880000, 0x07d80000, + 0x06400000, 0x06100000, 0x06280000, 0x06000000, + 0x06200000, 0x06480000, 0x06780000, 0x06500000, + 0x06180000, 0x06380000, 0x06600000, 0x06680000, + 0x06300000, 0x06700000, 0x06080000, 0x06580000, + 0x02400000, 0x02100000, 0x02280000, 0x02000000, + 0x02200000, 0x02480000, 0x02780000, 0x02500000, + 0x02180000, 0x02380000, 0x02600000, 0x02680000, + 0x02300000, 0x02700000, 0x02080000, 0x02580000, + /* 2 */ + 0x40000006, 0x68000006, 0x58000006, 0x00000006, + 0x20000006, 0x28000006, 0x08000006, 0x10000006, + 0x48000006, 0x18000006, 0x60000006, 0x70000006, + 0x30000006, 0x78000006, 0x50000006, 0x38000006, + 0xc0000004, 0xe8000004, 0xd8000004, 0x80000004, + 0xa0000004, 0xa8000004, 0x88000004, 0x90000004, + 0xc8000004, 0x98000004, 0xe0000004, 0xf0000004, + 0xb0000004, 0xf8000004, 0xd0000004, 0xb8000004, + 0xc0000005, 0xe8000005, 0xd8000005, 0x80000005, + 0xa0000005, 0xa8000005, 0x88000005, 0x90000005, + 0xc8000005, 0x98000005, 0xe0000005, 0xf0000005, + 0xb0000005, 0xf8000005, 0xd0000005, 0xb8000005, + 0xc0000000, 0xe8000000, 0xd8000000, 0x80000000, + 0xa0000000, 0xa8000000, 0x88000000, 0x90000000, + 0xc8000000, 0x98000000, 0xe0000000, 0xf0000000, + 0xb0000000, 0xf8000000, 0xd0000000, 0xb8000000, + 0x40000004, 0x68000004, 0x58000004, 0x00000004, + 0x20000004, 0x28000004, 0x08000004, 0x10000004, + 0x48000004, 0x18000004, 0x60000004, 0x70000004, + 0x30000004, 0x78000004, 0x50000004, 0x38000004, + 0x40000007, 0x68000007, 0x58000007, 0x00000007, + 0x20000007, 0x28000007, 0x08000007, 0x10000007, + 0x48000007, 0x18000007, 0x60000007, 0x70000007, + 0x30000007, 0x78000007, 0x50000007, 0x38000007, + 0x40000001, 0x68000001, 0x58000001, 0x00000001, + 0x20000001, 0x28000001, 0x08000001, 0x10000001, + 0x48000001, 0x18000001, 0x60000001, 0x70000001, + 0x30000001, 0x78000001, 0x50000001, 0x38000001, + 0x40000002, 0x68000002, 0x58000002, 0x00000002, + 0x20000002, 0x28000002, 0x08000002, 0x10000002, + 0x48000002, 0x18000002, 0x60000002, 0x70000002, + 0x30000002, 0x78000002, 0x50000002, 0x38000002, + 0xc0000003, 0xe8000003, 0xd8000003, 0x80000003, + 0xa0000003, 0xa8000003, 0x88000003, 0x90000003, + 0xc8000003, 0x98000003, 0xe0000003, 0xf0000003, + 0xb0000003, 0xf8000003, 0xd0000003, 0xb8000003, + 0xc0000001, 0xe8000001, 0xd8000001, 0x80000001, + 0xa0000001, 0xa8000001, 0x88000001, 0x90000001, + 0xc8000001, 0x98000001, 0xe0000001, 0xf0000001, + 0xb0000001, 0xf8000001, 0xd0000001, 0xb8000001, + 0x40000003, 0x68000003, 0x58000003, 0x00000003, + 0x20000003, 0x28000003, 0x08000003, 0x10000003, + 0x48000003, 0x18000003, 0x60000003, 0x70000003, + 0x30000003, 0x78000003, 0x50000003, 0x38000003, + 0xc0000002, 0xe8000002, 0xd8000002, 0x80000002, + 0xa0000002, 0xa8000002, 0x88000002, 0x90000002, + 0xc8000002, 0x98000002, 0xe0000002, 0xf0000002, + 0xb0000002, 0xf8000002, 0xd0000002, 0xb8000002, + 0x40000005, 0x68000005, 0x58000005, 0x00000005, + 0x20000005, 0x28000005, 0x08000005, 0x10000005, + 0x48000005, 0x18000005, 0x60000005, 0x70000005, + 0x30000005, 0x78000005, 0x50000005, 0x38000005, + 0x40000000, 0x68000000, 0x58000000, 0x00000000, + 0x20000000, 0x28000000, 0x08000000, 0x10000000, + 0x48000000, 0x18000000, 0x60000000, 0x70000000, + 0x30000000, 0x78000000, 0x50000000, 0x38000000, + 0xc0000007, 0xe8000007, 0xd8000007, 0x80000007, + 0xa0000007, 0xa8000007, 0x88000007, 0x90000007, + 0xc8000007, 0x98000007, 0xe0000007, 0xf0000007, + 0xb0000007, 0xf8000007, 0xd0000007, 0xb8000007, + 0xc0000006, 0xe8000006, 0xd8000006, 0x80000006, + 0xa0000006, 0xa8000006, 0x88000006, 0x90000006, + 0xc8000006, 0x98000006, 0xe0000006, 0xf0000006, + 0xb0000006, 0xf8000006, 0xd0000006, 0xb8000006, + /* 3 */ + 0x000003d0, 0x000003c8, 0x000003b0, 0x000003c0, + 0x000003e8, 0x000003f0, 0x00000390, 0x00000380, + 0x000003f8, 0x00000398, 0x000003a8, 0x000003d8, + 0x000003a0, 0x00000388, 0x000003e0, 0x000003b8, + 0x00000250, 0x00000248, 0x00000230, 0x00000240, + 0x00000268, 0x00000270, 0x00000210, 0x00000200, + 0x00000278, 0x00000218, 0x00000228, 0x00000258, + 0x00000220, 0x00000208, 0x00000260, 0x00000238, + 0x00000050, 0x00000048, 0x00000030, 0x00000040, + 0x00000068, 0x00000070, 0x00000010, 0x00000000, + 0x00000078, 0x00000018, 0x00000028, 0x00000058, + 0x00000020, 0x00000008, 0x00000060, 0x00000038, + 0x000002d0, 0x000002c8, 0x000002b0, 0x000002c0, + 0x000002e8, 0x000002f0, 0x00000290, 0x00000280, + 0x000002f8, 0x00000298, 0x000002a8, 0x000002d8, + 0x000002a0, 0x00000288, 0x000002e0, 0x000002b8, + 0x00000550, 0x00000548, 0x00000530, 0x00000540, + 0x00000568, 0x00000570, 0x00000510, 0x00000500, + 0x00000578, 0x00000518, 0x00000528, 0x00000558, + 0x00000520, 0x00000508, 0x00000560, 0x00000538, + 0x00000150, 0x00000148, 0x00000130, 0x00000140, + 0x00000168, 0x00000170, 0x00000110, 0x00000100, + 0x00000178, 0x00000118, 0x00000128, 0x00000158, + 0x00000120, 0x00000108, 0x00000160, 0x00000138, + 0x000007d0, 0x000007c8, 0x000007b0, 0x000007c0, + 0x000007e8, 0x000007f0, 0x00000790, 0x00000780, + 0x000007f8, 0x00000798, 0x000007a8, 0x000007d8, + 0x000007a0, 0x00000788, 0x000007e0, 0x000007b8, + 0x00000750, 0x00000748, 0x00000730, 0x00000740, + 0x00000768, 0x00000770, 0x00000710, 0x00000700, + 0x00000778, 0x00000718, 0x00000728, 0x00000758, + 0x00000720, 0x00000708, 0x00000760, 0x00000738, + 0x00000650, 0x00000648, 0x00000630, 0x00000640, + 0x00000668, 0x00000670, 0x00000610, 0x00000600, + 0x00000678, 0x00000618, 0x00000628, 0x00000658, + 0x00000620, 0x00000608, 0x00000660, 0x00000638, + 0x00000350, 0x00000348, 0x00000330, 0x00000340, + 0x00000368, 0x00000370, 0x00000310, 0x00000300, + 0x00000378, 0x00000318, 0x00000328, 0x00000358, + 0x00000320, 0x00000308, 0x00000360, 0x00000338, + 0x000000d0, 0x000000c8, 0x000000b0, 0x000000c0, + 0x000000e8, 0x000000f0, 0x00000090, 0x00000080, + 0x000000f8, 0x00000098, 0x000000a8, 0x000000d8, + 0x000000a0, 0x00000088, 0x000000e0, 0x000000b8, + 0x000005d0, 0x000005c8, 0x000005b0, 0x000005c0, + 0x000005e8, 0x000005f0, 0x00000590, 0x00000580, + 0x000005f8, 0x00000598, 0x000005a8, 0x000005d8, + 0x000005a0, 0x00000588, 0x000005e0, 0x000005b8, + 0x000006d0, 0x000006c8, 0x000006b0, 0x000006c0, + 0x000006e8, 0x000006f0, 0x00000690, 0x00000680, + 0x000006f8, 0x00000698, 0x000006a8, 0x000006d8, + 0x000006a0, 0x00000688, 0x000006e0, 0x000006b8, + 0x000004d0, 0x000004c8, 0x000004b0, 0x000004c0, + 0x000004e8, 0x000004f0, 0x00000490, 0x00000480, + 0x000004f8, 0x00000498, 0x000004a8, 0x000004d8, + 0x000004a0, 0x00000488, 0x000004e0, 0x000004b8, + 0x000001d0, 0x000001c8, 0x000001b0, 0x000001c0, + 0x000001e8, 0x000001f0, 0x00000190, 0x00000180, + 0x000001f8, 0x00000198, 0x000001a8, 0x000001d8, + 0x000001a0, 0x00000188, 0x000001e0, 0x000001b8, + 0x00000450, 0x00000448, 0x00000430, 0x00000440, + 0x00000468, 0x00000470, 0x00000410, 0x00000400, + 0x00000478, 0x00000418, 0x00000428, 0x00000458, + 0x00000420, 0x00000408, 0x00000460, 0x00000438, + } +}; + +const struct gost28147_param gost28147_param_CryptoPro_D = +{ + 1, + { + /* 0 */ + 0x0005f800, 0x0005e000, 0x00059000, 0x0005d000, + 0x0005b000, 0x0005a000, 0x0005a800, 0x00058000, + 0x0005b800, 0x0005c800, 0x0005f000, 0x0005e800, + 0x00058800, 0x0005d800, 0x0005c000, 0x00059800, + 0x00037800, 0x00036000, 0x00031000, 0x00035000, + 0x00033000, 0x00032000, 0x00032800, 0x00030000, + 0x00033800, 0x00034800, 0x00037000, 0x00036800, + 0x00030800, 0x00035800, 0x00034000, 0x00031800, + 0x0001f800, 0x0001e000, 0x00019000, 0x0001d000, + 0x0001b000, 0x0001a000, 0x0001a800, 0x00018000, + 0x0001b800, 0x0001c800, 0x0001f000, 0x0001e800, + 0x00018800, 0x0001d800, 0x0001c000, 0x00019800, + 0x00027800, 0x00026000, 0x00021000, 0x00025000, + 0x00023000, 0x00022000, 0x00022800, 0x00020000, + 0x00023800, 0x00024800, 0x00027000, 0x00026800, + 0x00020800, 0x00025800, 0x00024000, 0x00021800, + 0x00067800, 0x00066000, 0x00061000, 0x00065000, + 0x00063000, 0x00062000, 0x00062800, 0x00060000, + 0x00063800, 0x00064800, 0x00067000, 0x00066800, + 0x00060800, 0x00065800, 0x00064000, 0x00061800, + 0x0007f800, 0x0007e000, 0x00079000, 0x0007d000, + 0x0007b000, 0x0007a000, 0x0007a800, 0x00078000, + 0x0007b800, 0x0007c800, 0x0007f000, 0x0007e800, + 0x00078800, 0x0007d800, 0x0007c000, 0x00079800, + 0x00077800, 0x00076000, 0x00071000, 0x00075000, + 0x00073000, 0x00072000, 0x00072800, 0x00070000, + 0x00073800, 0x00074800, 0x00077000, 0x00076800, + 0x00070800, 0x00075800, 0x00074000, 0x00071800, + 0x00017800, 0x00016000, 0x00011000, 0x00015000, + 0x00013000, 0x00012000, 0x00012800, 0x00010000, + 0x00013800, 0x00014800, 0x00017000, 0x00016800, + 0x00010800, 0x00015800, 0x00014000, 0x00011800, + 0x0003f800, 0x0003e000, 0x00039000, 0x0003d000, + 0x0003b000, 0x0003a000, 0x0003a800, 0x00038000, + 0x0003b800, 0x0003c800, 0x0003f000, 0x0003e800, + 0x00038800, 0x0003d800, 0x0003c000, 0x00039800, + 0x0006f800, 0x0006e000, 0x00069000, 0x0006d000, + 0x0006b000, 0x0006a000, 0x0006a800, 0x00068000, + 0x0006b800, 0x0006c800, 0x0006f000, 0x0006e800, + 0x00068800, 0x0006d800, 0x0006c000, 0x00069800, + 0x00047800, 0x00046000, 0x00041000, 0x00045000, + 0x00043000, 0x00042000, 0x00042800, 0x00040000, + 0x00043800, 0x00044800, 0x00047000, 0x00046800, + 0x00040800, 0x00045800, 0x00044000, 0x00041800, + 0x00007800, 0x00006000, 0x00001000, 0x00005000, + 0x00003000, 0x00002000, 0x00002800, 0x00000000, + 0x00003800, 0x00004800, 0x00007000, 0x00006800, + 0x00000800, 0x00005800, 0x00004000, 0x00001800, + 0x0002f800, 0x0002e000, 0x00029000, 0x0002d000, + 0x0002b000, 0x0002a000, 0x0002a800, 0x00028000, + 0x0002b800, 0x0002c800, 0x0002f000, 0x0002e800, + 0x00028800, 0x0002d800, 0x0002c000, 0x00029800, + 0x00057800, 0x00056000, 0x00051000, 0x00055000, + 0x00053000, 0x00052000, 0x00052800, 0x00050000, + 0x00053800, 0x00054800, 0x00057000, 0x00056800, + 0x00050800, 0x00055800, 0x00054000, 0x00051800, + 0x0004f800, 0x0004e000, 0x00049000, 0x0004d000, + 0x0004b000, 0x0004a000, 0x0004a800, 0x00048000, + 0x0004b800, 0x0004c800, 0x0004f000, 0x0004e800, + 0x00048800, 0x0004d800, 0x0004c000, 0x00049800, + 0x0000f800, 0x0000e000, 0x00009000, 0x0000d000, + 0x0000b000, 0x0000a000, 0x0000a800, 0x00008000, + 0x0000b800, 0x0000c800, 0x0000f000, 0x0000e800, + 0x00008800, 0x0000d800, 0x0000c000, 0x00009800, + /* 1 */ + 0x00880000, 0x00e00000, 0x00d80000, 0x00800000, + 0x00f80000, 0x00f00000, 0x00b00000, 0x00a80000, + 0x00d00000, 0x00e80000, 0x00a00000, 0x00c00000, + 0x00c80000, 0x00980000, 0x00b80000, 0x00900000, + 0x02880000, 0x02e00000, 0x02d80000, 0x02800000, + 0x02f80000, 0x02f00000, 0x02b00000, 0x02a80000, + 0x02d00000, 0x02e80000, 0x02a00000, 0x02c00000, + 0x02c80000, 0x02980000, 0x02b80000, 0x02900000, + 0x07080000, 0x07600000, 0x07580000, 0x07000000, + 0x07780000, 0x07700000, 0x07300000, 0x07280000, + 0x07500000, 0x07680000, 0x07200000, 0x07400000, + 0x07480000, 0x07180000, 0x07380000, 0x07100000, + 0x06080000, 0x06600000, 0x06580000, 0x06000000, + 0x06780000, 0x06700000, 0x06300000, 0x06280000, + 0x06500000, 0x06680000, 0x06200000, 0x06400000, + 0x06480000, 0x06180000, 0x06380000, 0x06100000, + 0x05080000, 0x05600000, 0x05580000, 0x05000000, + 0x05780000, 0x05700000, 0x05300000, 0x05280000, + 0x05500000, 0x05680000, 0x05200000, 0x05400000, + 0x05480000, 0x05180000, 0x05380000, 0x05100000, + 0x03880000, 0x03e00000, 0x03d80000, 0x03800000, + 0x03f80000, 0x03f00000, 0x03b00000, 0x03a80000, + 0x03d00000, 0x03e80000, 0x03a00000, 0x03c00000, + 0x03c80000, 0x03980000, 0x03b80000, 0x03900000, + 0x00080000, 0x00600000, 0x00580000, 0x00000000, + 0x00780000, 0x00700000, 0x00300000, 0x00280000, + 0x00500000, 0x00680000, 0x00200000, 0x00400000, + 0x00480000, 0x00180000, 0x00380000, 0x00100000, + 0x06880000, 0x06e00000, 0x06d80000, 0x06800000, + 0x06f80000, 0x06f00000, 0x06b00000, 0x06a80000, + 0x06d00000, 0x06e80000, 0x06a00000, 0x06c00000, + 0x06c80000, 0x06980000, 0x06b80000, 0x06900000, + 0x03080000, 0x03600000, 0x03580000, 0x03000000, + 0x03780000, 0x03700000, 0x03300000, 0x03280000, + 0x03500000, 0x03680000, 0x03200000, 0x03400000, + 0x03480000, 0x03180000, 0x03380000, 0x03100000, + 0x01080000, 0x01600000, 0x01580000, 0x01000000, + 0x01780000, 0x01700000, 0x01300000, 0x01280000, + 0x01500000, 0x01680000, 0x01200000, 0x01400000, + 0x01480000, 0x01180000, 0x01380000, 0x01100000, + 0x05880000, 0x05e00000, 0x05d80000, 0x05800000, + 0x05f80000, 0x05f00000, 0x05b00000, 0x05a80000, + 0x05d00000, 0x05e80000, 0x05a00000, 0x05c00000, + 0x05c80000, 0x05980000, 0x05b80000, 0x05900000, + 0x02080000, 0x02600000, 0x02580000, 0x02000000, + 0x02780000, 0x02700000, 0x02300000, 0x02280000, + 0x02500000, 0x02680000, 0x02200000, 0x02400000, + 0x02480000, 0x02180000, 0x02380000, 0x02100000, + 0x04880000, 0x04e00000, 0x04d80000, 0x04800000, + 0x04f80000, 0x04f00000, 0x04b00000, 0x04a80000, + 0x04d00000, 0x04e80000, 0x04a00000, 0x04c00000, + 0x04c80000, 0x04980000, 0x04b80000, 0x04900000, + 0x01880000, 0x01e00000, 0x01d80000, 0x01800000, + 0x01f80000, 0x01f00000, 0x01b00000, 0x01a80000, + 0x01d00000, 0x01e80000, 0x01a00000, 0x01c00000, + 0x01c80000, 0x01980000, 0x01b80000, 0x01900000, + 0x07880000, 0x07e00000, 0x07d80000, 0x07800000, + 0x07f80000, 0x07f00000, 0x07b00000, 0x07a80000, + 0x07d00000, 0x07e80000, 0x07a00000, 0x07c00000, + 0x07c80000, 0x07980000, 0x07b80000, 0x07900000, + 0x04080000, 0x04600000, 0x04580000, 0x04000000, + 0x04780000, 0x04700000, 0x04300000, 0x04280000, + 0x04500000, 0x04680000, 0x04200000, 0x04400000, + 0x04480000, 0x04180000, 0x04380000, 0x04100000, + /* 2 */ + 0x00000004, 0x60000004, 0x40000004, 0x48000004, + 0x68000004, 0x10000004, 0x50000004, 0x58000004, + 0x38000004, 0x18000004, 0x30000004, 0x28000004, + 0x20000004, 0x70000004, 0x78000004, 0x08000004, + 0x00000000, 0x60000000, 0x40000000, 0x48000000, + 0x68000000, 0x10000000, 0x50000000, 0x58000000, + 0x38000000, 0x18000000, 0x30000000, 0x28000000, + 0x20000000, 0x70000000, 0x78000000, 0x08000000, + 0x80000007, 0xe0000007, 0xc0000007, 0xc8000007, + 0xe8000007, 0x90000007, 0xd0000007, 0xd8000007, + 0xb8000007, 0x98000007, 0xb0000007, 0xa8000007, + 0xa0000007, 0xf0000007, 0xf8000007, 0x88000007, + 0x80000001, 0xe0000001, 0xc0000001, 0xc8000001, + 0xe8000001, 0x90000001, 0xd0000001, 0xd8000001, + 0xb8000001, 0x98000001, 0xb0000001, 0xa8000001, + 0xa0000001, 0xf0000001, 0xf8000001, 0x88000001, + 0x00000001, 0x60000001, 0x40000001, 0x48000001, + 0x68000001, 0x10000001, 0x50000001, 0x58000001, + 0x38000001, 0x18000001, 0x30000001, 0x28000001, + 0x20000001, 0x70000001, 0x78000001, 0x08000001, + 0x80000002, 0xe0000002, 0xc0000002, 0xc8000002, + 0xe8000002, 0x90000002, 0xd0000002, 0xd8000002, + 0xb8000002, 0x98000002, 0xb0000002, 0xa8000002, + 0xa0000002, 0xf0000002, 0xf8000002, 0x88000002, + 0x00000007, 0x60000007, 0x40000007, 0x48000007, + 0x68000007, 0x10000007, 0x50000007, 0x58000007, + 0x38000007, 0x18000007, 0x30000007, 0x28000007, + 0x20000007, 0x70000007, 0x78000007, 0x08000007, + 0x80000005, 0xe0000005, 0xc0000005, 0xc8000005, + 0xe8000005, 0x90000005, 0xd0000005, 0xd8000005, + 0xb8000005, 0x98000005, 0xb0000005, 0xa8000005, + 0xa0000005, 0xf0000005, 0xf8000005, 0x88000005, + 0x80000000, 0xe0000000, 0xc0000000, 0xc8000000, + 0xe8000000, 0x90000000, 0xd0000000, 0xd8000000, + 0xb8000000, 0x98000000, 0xb0000000, 0xa8000000, + 0xa0000000, 0xf0000000, 0xf8000000, 0x88000000, + 0x00000005, 0x60000005, 0x40000005, 0x48000005, + 0x68000005, 0x10000005, 0x50000005, 0x58000005, + 0x38000005, 0x18000005, 0x30000005, 0x28000005, + 0x20000005, 0x70000005, 0x78000005, 0x08000005, + 0x00000002, 0x60000002, 0x40000002, 0x48000002, + 0x68000002, 0x10000002, 0x50000002, 0x58000002, + 0x38000002, 0x18000002, 0x30000002, 0x28000002, + 0x20000002, 0x70000002, 0x78000002, 0x08000002, + 0x80000003, 0xe0000003, 0xc0000003, 0xc8000003, + 0xe8000003, 0x90000003, 0xd0000003, 0xd8000003, + 0xb8000003, 0x98000003, 0xb0000003, 0xa8000003, + 0xa0000003, 0xf0000003, 0xf8000003, 0x88000003, + 0x00000006, 0x60000006, 0x40000006, 0x48000006, + 0x68000006, 0x10000006, 0x50000006, 0x58000006, + 0x38000006, 0x18000006, 0x30000006, 0x28000006, + 0x20000006, 0x70000006, 0x78000006, 0x08000006, + 0x80000004, 0xe0000004, 0xc0000004, 0xc8000004, + 0xe8000004, 0x90000004, 0xd0000004, 0xd8000004, + 0xb8000004, 0x98000004, 0xb0000004, 0xa8000004, + 0xa0000004, 0xf0000004, 0xf8000004, 0x88000004, + 0x80000006, 0xe0000006, 0xc0000006, 0xc8000006, + 0xe8000006, 0x90000006, 0xd0000006, 0xd8000006, + 0xb8000006, 0x98000006, 0xb0000006, 0xa8000006, + 0xa0000006, 0xf0000006, 0xf8000006, 0x88000006, + 0x00000003, 0x60000003, 0x40000003, 0x48000003, + 0x68000003, 0x10000003, 0x50000003, 0x58000003, + 0x38000003, 0x18000003, 0x30000003, 0x28000003, + 0x20000003, 0x70000003, 0x78000003, 0x08000003, + /* 3 */ + 0x00000098, 0x00000080, 0x000000b0, 0x000000f8, + 0x00000088, 0x000000f0, 0x000000c8, 0x00000090, + 0x000000e8, 0x000000c0, 0x000000e0, 0x000000a0, + 0x000000d8, 0x000000d0, 0x000000a8, 0x000000b8, + 0x00000518, 0x00000500, 0x00000530, 0x00000578, + 0x00000508, 0x00000570, 0x00000548, 0x00000510, + 0x00000568, 0x00000540, 0x00000560, 0x00000520, + 0x00000558, 0x00000550, 0x00000528, 0x00000538, + 0x00000318, 0x00000300, 0x00000330, 0x00000378, + 0x00000308, 0x00000370, 0x00000348, 0x00000310, + 0x00000368, 0x00000340, 0x00000360, 0x00000320, + 0x00000358, 0x00000350, 0x00000328, 0x00000338, + 0x00000418, 0x00000400, 0x00000430, 0x00000478, + 0x00000408, 0x00000470, 0x00000448, 0x00000410, + 0x00000468, 0x00000440, 0x00000460, 0x00000420, + 0x00000458, 0x00000450, 0x00000428, 0x00000438, + 0x00000798, 0x00000780, 0x000007b0, 0x000007f8, + 0x00000788, 0x000007f0, 0x000007c8, 0x00000790, + 0x000007e8, 0x000007c0, 0x000007e0, 0x000007a0, + 0x000007d8, 0x000007d0, 0x000007a8, 0x000007b8, + 0x00000598, 0x00000580, 0x000005b0, 0x000005f8, + 0x00000588, 0x000005f0, 0x000005c8, 0x00000590, + 0x000005e8, 0x000005c0, 0x000005e0, 0x000005a0, + 0x000005d8, 0x000005d0, 0x000005a8, 0x000005b8, + 0x00000018, 0x00000000, 0x00000030, 0x00000078, + 0x00000008, 0x00000070, 0x00000048, 0x00000010, + 0x00000068, 0x00000040, 0x00000060, 0x00000020, + 0x00000058, 0x00000050, 0x00000028, 0x00000038, + 0x00000218, 0x00000200, 0x00000230, 0x00000278, + 0x00000208, 0x00000270, 0x00000248, 0x00000210, + 0x00000268, 0x00000240, 0x00000260, 0x00000220, + 0x00000258, 0x00000250, 0x00000228, 0x00000238, + 0x00000618, 0x00000600, 0x00000630, 0x00000678, + 0x00000608, 0x00000670, 0x00000648, 0x00000610, + 0x00000668, 0x00000640, 0x00000660, 0x00000620, + 0x00000658, 0x00000650, 0x00000628, 0x00000638, + 0x00000198, 0x00000180, 0x000001b0, 0x000001f8, + 0x00000188, 0x000001f0, 0x000001c8, 0x00000190, + 0x000001e8, 0x000001c0, 0x000001e0, 0x000001a0, + 0x000001d8, 0x000001d0, 0x000001a8, 0x000001b8, + 0x00000298, 0x00000280, 0x000002b0, 0x000002f8, + 0x00000288, 0x000002f0, 0x000002c8, 0x00000290, + 0x000002e8, 0x000002c0, 0x000002e0, 0x000002a0, + 0x000002d8, 0x000002d0, 0x000002a8, 0x000002b8, + 0x00000498, 0x00000480, 0x000004b0, 0x000004f8, + 0x00000488, 0x000004f0, 0x000004c8, 0x00000490, + 0x000004e8, 0x000004c0, 0x000004e0, 0x000004a0, + 0x000004d8, 0x000004d0, 0x000004a8, 0x000004b8, + 0x00000398, 0x00000380, 0x000003b0, 0x000003f8, + 0x00000388, 0x000003f0, 0x000003c8, 0x00000390, + 0x000003e8, 0x000003c0, 0x000003e0, 0x000003a0, + 0x000003d8, 0x000003d0, 0x000003a8, 0x000003b8, + 0x00000698, 0x00000680, 0x000006b0, 0x000006f8, + 0x00000688, 0x000006f0, 0x000006c8, 0x00000690, + 0x000006e8, 0x000006c0, 0x000006e0, 0x000006a0, + 0x000006d8, 0x000006d0, 0x000006a8, 0x000006b8, + 0x00000118, 0x00000100, 0x00000130, 0x00000178, + 0x00000108, 0x00000170, 0x00000148, 0x00000110, + 0x00000168, 0x00000140, 0x00000160, 0x00000120, + 0x00000158, 0x00000150, 0x00000128, 0x00000138, + 0x00000718, 0x00000700, 0x00000730, 0x00000778, + 0x00000708, 0x00000770, 0x00000748, 0x00000710, + 0x00000768, 0x00000740, 0x00000760, 0x00000720, + 0x00000758, 0x00000750, 0x00000728, 0x00000738, + } +}; + +const struct gost28147_param gost28147_param_TC26_Z = +{ + 1, + { + /* 0 */ + 0x00036000, 0x00032000, 0x00033000, 0x00031000, + 0x00035000, 0x00032800, 0x00035800, 0x00034800, + 0x00037000, 0x00034000, 0x00036800, 0x00033800, + 0x00030000, 0x00031800, 0x00037800, 0x00030800, + 0x00046000, 0x00042000, 0x00043000, 0x00041000, + 0x00045000, 0x00042800, 0x00045800, 0x00044800, + 0x00047000, 0x00044000, 0x00046800, 0x00043800, + 0x00040000, 0x00041800, 0x00047800, 0x00040800, + 0x00016000, 0x00012000, 0x00013000, 0x00011000, + 0x00015000, 0x00012800, 0x00015800, 0x00014800, + 0x00017000, 0x00014000, 0x00016800, 0x00013800, + 0x00010000, 0x00011800, 0x00017800, 0x00010800, + 0x0001e000, 0x0001a000, 0x0001b000, 0x00019000, + 0x0001d000, 0x0001a800, 0x0001d800, 0x0001c800, + 0x0001f000, 0x0001c000, 0x0001e800, 0x0001b800, + 0x00018000, 0x00019800, 0x0001f800, 0x00018800, + 0x0004e000, 0x0004a000, 0x0004b000, 0x00049000, + 0x0004d000, 0x0004a800, 0x0004d800, 0x0004c800, + 0x0004f000, 0x0004c000, 0x0004e800, 0x0004b800, + 0x00048000, 0x00049800, 0x0004f800, 0x00048800, + 0x00056000, 0x00052000, 0x00053000, 0x00051000, + 0x00055000, 0x00052800, 0x00055800, 0x00054800, + 0x00057000, 0x00054000, 0x00056800, 0x00053800, + 0x00050000, 0x00051800, 0x00057800, 0x00050800, + 0x0002e000, 0x0002a000, 0x0002b000, 0x00029000, + 0x0002d000, 0x0002a800, 0x0002d800, 0x0002c800, + 0x0002f000, 0x0002c000, 0x0002e800, 0x0002b800, + 0x00028000, 0x00029800, 0x0002f800, 0x00028800, + 0x00066000, 0x00062000, 0x00063000, 0x00061000, + 0x00065000, 0x00062800, 0x00065800, 0x00064800, + 0x00067000, 0x00064000, 0x00066800, 0x00063800, + 0x00060000, 0x00061800, 0x00067800, 0x00060800, + 0x0000e000, 0x0000a000, 0x0000b000, 0x00009000, + 0x0000d000, 0x0000a800, 0x0000d800, 0x0000c800, + 0x0000f000, 0x0000c000, 0x0000e800, 0x0000b800, + 0x00008000, 0x00009800, 0x0000f800, 0x00008800, + 0x00076000, 0x00072000, 0x00073000, 0x00071000, + 0x00075000, 0x00072800, 0x00075800, 0x00074800, + 0x00077000, 0x00074000, 0x00076800, 0x00073800, + 0x00070000, 0x00071800, 0x00077800, 0x00070800, + 0x00026000, 0x00022000, 0x00023000, 0x00021000, + 0x00025000, 0x00022800, 0x00025800, 0x00024800, + 0x00027000, 0x00024000, 0x00026800, 0x00023800, + 0x00020000, 0x00021800, 0x00027800, 0x00020800, + 0x0003e000, 0x0003a000, 0x0003b000, 0x00039000, + 0x0003d000, 0x0003a800, 0x0003d800, 0x0003c800, + 0x0003f000, 0x0003c000, 0x0003e800, 0x0003b800, + 0x00038000, 0x00039800, 0x0003f800, 0x00038800, + 0x0005e000, 0x0005a000, 0x0005b000, 0x00059000, + 0x0005d000, 0x0005a800, 0x0005d800, 0x0005c800, + 0x0005f000, 0x0005c000, 0x0005e800, 0x0005b800, + 0x00058000, 0x00059800, 0x0005f800, 0x00058800, + 0x0006e000, 0x0006a000, 0x0006b000, 0x00069000, + 0x0006d000, 0x0006a800, 0x0006d800, 0x0006c800, + 0x0006f000, 0x0006c000, 0x0006e800, 0x0006b800, + 0x00068000, 0x00069800, 0x0006f800, 0x00068800, + 0x00006000, 0x00002000, 0x00003000, 0x00001000, + 0x00005000, 0x00002800, 0x00005800, 0x00004800, + 0x00007000, 0x00004000, 0x00006800, 0x00003800, + 0x00000000, 0x00001800, 0x00007800, 0x00000800, + 0x0007e000, 0x0007a000, 0x0007b000, 0x00079000, + 0x0007d000, 0x0007a800, 0x0007d800, 0x0007c800, + 0x0007f000, 0x0007c000, 0x0007e800, 0x0007b800, + 0x00078000, 0x00079800, 0x0007f800, 0x00078800, + /* 1 */ + 0x06580000, 0x06180000, 0x06280000, 0x06400000, + 0x06100000, 0x06780000, 0x06500000, 0x06680000, + 0x06700000, 0x06080000, 0x06380000, 0x06200000, + 0x06600000, 0x06480000, 0x06300000, 0x06000000, + 0x04580000, 0x04180000, 0x04280000, 0x04400000, + 0x04100000, 0x04780000, 0x04500000, 0x04680000, + 0x04700000, 0x04080000, 0x04380000, 0x04200000, + 0x04600000, 0x04480000, 0x04300000, 0x04000000, + 0x01580000, 0x01180000, 0x01280000, 0x01400000, + 0x01100000, 0x01780000, 0x01500000, 0x01680000, + 0x01700000, 0x01080000, 0x01380000, 0x01200000, + 0x01600000, 0x01480000, 0x01300000, 0x01000000, + 0x00d80000, 0x00980000, 0x00a80000, 0x00c00000, + 0x00900000, 0x00f80000, 0x00d00000, 0x00e80000, + 0x00f00000, 0x00880000, 0x00b80000, 0x00a00000, + 0x00e00000, 0x00c80000, 0x00b00000, 0x00800000, + 0x06d80000, 0x06980000, 0x06a80000, 0x06c00000, + 0x06900000, 0x06f80000, 0x06d00000, 0x06e80000, + 0x06f00000, 0x06880000, 0x06b80000, 0x06a00000, + 0x06e00000, 0x06c80000, 0x06b00000, 0x06800000, + 0x02580000, 0x02180000, 0x02280000, 0x02400000, + 0x02100000, 0x02780000, 0x02500000, 0x02680000, + 0x02700000, 0x02080000, 0x02380000, 0x02200000, + 0x02600000, 0x02480000, 0x02300000, 0x02000000, + 0x07d80000, 0x07980000, 0x07a80000, 0x07c00000, + 0x07900000, 0x07f80000, 0x07d00000, 0x07e80000, + 0x07f00000, 0x07880000, 0x07b80000, 0x07a00000, + 0x07e00000, 0x07c80000, 0x07b00000, 0x07800000, + 0x03580000, 0x03180000, 0x03280000, 0x03400000, + 0x03100000, 0x03780000, 0x03500000, 0x03680000, + 0x03700000, 0x03080000, 0x03380000, 0x03200000, + 0x03600000, 0x03480000, 0x03300000, 0x03000000, + 0x03d80000, 0x03980000, 0x03a80000, 0x03c00000, + 0x03900000, 0x03f80000, 0x03d00000, 0x03e80000, + 0x03f00000, 0x03880000, 0x03b80000, 0x03a00000, + 0x03e00000, 0x03c80000, 0x03b00000, 0x03800000, + 0x00580000, 0x00180000, 0x00280000, 0x00400000, + 0x00100000, 0x00780000, 0x00500000, 0x00680000, + 0x00700000, 0x00080000, 0x00380000, 0x00200000, + 0x00600000, 0x00480000, 0x00300000, 0x00000000, + 0x05580000, 0x05180000, 0x05280000, 0x05400000, + 0x05100000, 0x05780000, 0x05500000, 0x05680000, + 0x05700000, 0x05080000, 0x05380000, 0x05200000, + 0x05600000, 0x05480000, 0x05300000, 0x05000000, + 0x02d80000, 0x02980000, 0x02a80000, 0x02c00000, + 0x02900000, 0x02f80000, 0x02d00000, 0x02e80000, + 0x02f00000, 0x02880000, 0x02b80000, 0x02a00000, + 0x02e00000, 0x02c80000, 0x02b00000, 0x02800000, + 0x01d80000, 0x01980000, 0x01a80000, 0x01c00000, + 0x01900000, 0x01f80000, 0x01d00000, 0x01e80000, + 0x01f00000, 0x01880000, 0x01b80000, 0x01a00000, + 0x01e00000, 0x01c80000, 0x01b00000, 0x01800000, + 0x07580000, 0x07180000, 0x07280000, 0x07400000, + 0x07100000, 0x07780000, 0x07500000, 0x07680000, + 0x07700000, 0x07080000, 0x07380000, 0x07200000, + 0x07600000, 0x07480000, 0x07300000, 0x07000000, + 0x04d80000, 0x04980000, 0x04a80000, 0x04c00000, + 0x04900000, 0x04f80000, 0x04d00000, 0x04e80000, + 0x04f00000, 0x04880000, 0x04b80000, 0x04a00000, + 0x04e00000, 0x04c80000, 0x04b00000, 0x04800000, + 0x05d80000, 0x05980000, 0x05a80000, 0x05c00000, + 0x05900000, 0x05f80000, 0x05d00000, 0x05e80000, + 0x05f00000, 0x05880000, 0x05b80000, 0x05a00000, + 0x05e00000, 0x05c80000, 0x05b00000, 0x05800000, + /* 2 */ + 0xb8000002, 0xf8000002, 0xa8000002, 0xd0000002, + 0xc0000002, 0x88000002, 0xb0000002, 0xe8000002, + 0x80000002, 0xc8000002, 0x98000002, 0xf0000002, + 0xd8000002, 0xa0000002, 0x90000002, 0xe0000002, + 0xb8000006, 0xf8000006, 0xa8000006, 0xd0000006, + 0xc0000006, 0x88000006, 0xb0000006, 0xe8000006, + 0x80000006, 0xc8000006, 0x98000006, 0xf0000006, + 0xd8000006, 0xa0000006, 0x90000006, 0xe0000006, + 0xb8000007, 0xf8000007, 0xa8000007, 0xd0000007, + 0xc0000007, 0x88000007, 0xb0000007, 0xe8000007, + 0x80000007, 0xc8000007, 0x98000007, 0xf0000007, + 0xd8000007, 0xa0000007, 0x90000007, 0xe0000007, + 0x38000003, 0x78000003, 0x28000003, 0x50000003, + 0x40000003, 0x08000003, 0x30000003, 0x68000003, + 0x00000003, 0x48000003, 0x18000003, 0x70000003, + 0x58000003, 0x20000003, 0x10000003, 0x60000003, + 0xb8000004, 0xf8000004, 0xa8000004, 0xd0000004, + 0xc0000004, 0x88000004, 0xb0000004, 0xe8000004, + 0x80000004, 0xc8000004, 0x98000004, 0xf0000004, + 0xd8000004, 0xa0000004, 0x90000004, 0xe0000004, + 0x38000001, 0x78000001, 0x28000001, 0x50000001, + 0x40000001, 0x08000001, 0x30000001, 0x68000001, + 0x00000001, 0x48000001, 0x18000001, 0x70000001, + 0x58000001, 0x20000001, 0x10000001, 0x60000001, + 0x38000006, 0x78000006, 0x28000006, 0x50000006, + 0x40000006, 0x08000006, 0x30000006, 0x68000006, + 0x00000006, 0x48000006, 0x18000006, 0x70000006, + 0x58000006, 0x20000006, 0x10000006, 0x60000006, + 0x38000005, 0x78000005, 0x28000005, 0x50000005, + 0x40000005, 0x08000005, 0x30000005, 0x68000005, + 0x00000005, 0x48000005, 0x18000005, 0x70000005, + 0x58000005, 0x20000005, 0x10000005, 0x60000005, + 0xb8000005, 0xf8000005, 0xa8000005, 0xd0000005, + 0xc0000005, 0x88000005, 0xb0000005, 0xe8000005, + 0x80000005, 0xc8000005, 0x98000005, 0xf0000005, + 0xd8000005, 0xa0000005, 0x90000005, 0xe0000005, + 0xb8000003, 0xf8000003, 0xa8000003, 0xd0000003, + 0xc0000003, 0x88000003, 0xb0000003, 0xe8000003, + 0x80000003, 0xc8000003, 0x98000003, 0xf0000003, + 0xd8000003, 0xa0000003, 0x90000003, 0xe0000003, + 0x38000004, 0x78000004, 0x28000004, 0x50000004, + 0x40000004, 0x08000004, 0x30000004, 0x68000004, + 0x00000004, 0x48000004, 0x18000004, 0x70000004, + 0x58000004, 0x20000004, 0x10000004, 0x60000004, + 0xb8000000, 0xf8000000, 0xa8000000, 0xd0000000, + 0xc0000000, 0x88000000, 0xb0000000, 0xe8000000, + 0x80000000, 0xc8000000, 0x98000000, 0xf0000000, + 0xd8000000, 0xa0000000, 0x90000000, 0xe0000000, + 0x38000002, 0x78000002, 0x28000002, 0x50000002, + 0x40000002, 0x08000002, 0x30000002, 0x68000002, + 0x00000002, 0x48000002, 0x18000002, 0x70000002, + 0x58000002, 0x20000002, 0x10000002, 0x60000002, + 0xb8000001, 0xf8000001, 0xa8000001, 0xd0000001, + 0xc0000001, 0x88000001, 0xb0000001, 0xe8000001, + 0x80000001, 0xc8000001, 0x98000001, 0xf0000001, + 0xd8000001, 0xa0000001, 0x90000001, 0xe0000001, + 0x38000007, 0x78000007, 0x28000007, 0x50000007, + 0x40000007, 0x08000007, 0x30000007, 0x68000007, + 0x00000007, 0x48000007, 0x18000007, 0x70000007, + 0x58000007, 0x20000007, 0x10000007, 0x60000007, + 0x38000000, 0x78000000, 0x28000000, 0x50000000, + 0x40000000, 0x08000000, 0x30000000, 0x68000000, + 0x00000000, 0x48000000, 0x18000000, 0x70000000, + 0x58000000, 0x20000000, 0x10000000, 0x60000000, + /* 3 */ + 0x000000c0, 0x000000f0, 0x00000090, 0x000000a8, + 0x000000b0, 0x000000c8, 0x00000088, 0x000000e0, + 0x000000f8, 0x000000a0, 0x000000d8, 0x00000080, + 0x000000e8, 0x000000d0, 0x00000098, 0x000000b8, + 0x000003c0, 0x000003f0, 0x00000390, 0x000003a8, + 0x000003b0, 0x000003c8, 0x00000388, 0x000003e0, + 0x000003f8, 0x000003a0, 0x000003d8, 0x00000380, + 0x000003e8, 0x000003d0, 0x00000398, 0x000003b8, + 0x00000740, 0x00000770, 0x00000710, 0x00000728, + 0x00000730, 0x00000748, 0x00000708, 0x00000760, + 0x00000778, 0x00000720, 0x00000758, 0x00000700, + 0x00000768, 0x00000750, 0x00000718, 0x00000738, + 0x000006c0, 0x000006f0, 0x00000690, 0x000006a8, + 0x000006b0, 0x000006c8, 0x00000688, 0x000006e0, + 0x000006f8, 0x000006a0, 0x000006d8, 0x00000680, + 0x000006e8, 0x000006d0, 0x00000698, 0x000006b8, + 0x00000040, 0x00000070, 0x00000010, 0x00000028, + 0x00000030, 0x00000048, 0x00000008, 0x00000060, + 0x00000078, 0x00000020, 0x00000058, 0x00000000, + 0x00000068, 0x00000050, 0x00000018, 0x00000038, + 0x000002c0, 0x000002f0, 0x00000290, 0x000002a8, + 0x000002b0, 0x000002c8, 0x00000288, 0x000002e0, + 0x000002f8, 0x000002a0, 0x000002d8, 0x00000280, + 0x000002e8, 0x000002d0, 0x00000298, 0x000002b8, + 0x00000440, 0x00000470, 0x00000410, 0x00000428, + 0x00000430, 0x00000448, 0x00000408, 0x00000460, + 0x00000478, 0x00000420, 0x00000458, 0x00000400, + 0x00000468, 0x00000450, 0x00000418, 0x00000438, + 0x000001c0, 0x000001f0, 0x00000190, 0x000001a8, + 0x000001b0, 0x000001c8, 0x00000188, 0x000001e0, + 0x000001f8, 0x000001a0, 0x000001d8, 0x00000180, + 0x000001e8, 0x000001d0, 0x00000198, 0x000001b8, + 0x00000240, 0x00000270, 0x00000210, 0x00000228, + 0x00000230, 0x00000248, 0x00000208, 0x00000260, + 0x00000278, 0x00000220, 0x00000258, 0x00000200, + 0x00000268, 0x00000250, 0x00000218, 0x00000238, + 0x000007c0, 0x000007f0, 0x00000790, 0x000007a8, + 0x000007b0, 0x000007c8, 0x00000788, 0x000007e0, + 0x000007f8, 0x000007a0, 0x000007d8, 0x00000780, + 0x000007e8, 0x000007d0, 0x00000798, 0x000007b8, + 0x00000540, 0x00000570, 0x00000510, 0x00000528, + 0x00000530, 0x00000548, 0x00000508, 0x00000560, + 0x00000578, 0x00000520, 0x00000558, 0x00000500, + 0x00000568, 0x00000550, 0x00000518, 0x00000538, + 0x00000340, 0x00000370, 0x00000310, 0x00000328, + 0x00000330, 0x00000348, 0x00000308, 0x00000360, + 0x00000378, 0x00000320, 0x00000358, 0x00000300, + 0x00000368, 0x00000350, 0x00000318, 0x00000338, + 0x000004c0, 0x000004f0, 0x00000490, 0x000004a8, + 0x000004b0, 0x000004c8, 0x00000488, 0x000004e0, + 0x000004f8, 0x000004a0, 0x000004d8, 0x00000480, + 0x000004e8, 0x000004d0, 0x00000498, 0x000004b8, + 0x00000640, 0x00000670, 0x00000610, 0x00000628, + 0x00000630, 0x00000648, 0x00000608, 0x00000660, + 0x00000678, 0x00000620, 0x00000658, 0x00000600, + 0x00000668, 0x00000650, 0x00000618, 0x00000638, + 0x000005c0, 0x000005f0, 0x00000590, 0x000005a8, + 0x000005b0, 0x000005c8, 0x00000588, 0x000005e0, + 0x000005f8, 0x000005a0, 0x000005d8, 0x00000580, + 0x000005e8, 0x000005d0, 0x00000598, 0x000005b8, + 0x00000140, 0x00000170, 0x00000110, 0x00000128, + 0x00000130, 0x00000148, 0x00000108, 0x00000160, + 0x00000178, 0x00000120, 0x00000158, 0x00000100, + 0x00000168, 0x00000150, 0x00000118, 0x00000138, + } +}; + +/* + * A macro that performs a full encryption round of GOST 28147-89. + * Temporary variables tmp assumed and variables r and l for left and right + * blocks. + */ +#define GOST_ENCRYPT_ROUND(key1, key2, sbox) \ + tmp = (key1) + r; \ + l ^= (sbox)[0*256 + (tmp & 0xff)] ^ (sbox)[1*256 + ((tmp >> 8) & 0xff)] ^ \ + (sbox)[2*256 + ((tmp >> 16) & 0xff)] ^ (sbox)[3*256 + (tmp >> 24)]; \ + tmp = (key2) + l; \ + r ^= (sbox)[0*256 + (tmp & 0xff)] ^ (sbox)[1*256 + ((tmp >> 8) & 0xff)] ^ \ + (sbox)[2*256 + ((tmp >> 16) & 0xff)] ^ (sbox)[3*256 + (tmp >> 24)]; + +/* encrypt a block with the given key */ +void gost28147_encrypt_simple (const uint32_t *key, const uint32_t *sbox, + const uint32_t *in, uint32_t *out) +{ + uint32_t l, r, tmp; + + r = in[0], l = in[1]; + GOST_ENCRYPT_ROUND(key[0], key[1], sbox) + GOST_ENCRYPT_ROUND(key[2], key[3], sbox) + GOST_ENCRYPT_ROUND(key[4], key[5], sbox) + GOST_ENCRYPT_ROUND(key[6], key[7], sbox) + GOST_ENCRYPT_ROUND(key[0], key[1], sbox) + GOST_ENCRYPT_ROUND(key[2], key[3], sbox) + GOST_ENCRYPT_ROUND(key[4], key[5], sbox) + GOST_ENCRYPT_ROUND(key[6], key[7], sbox) + GOST_ENCRYPT_ROUND(key[0], key[1], sbox) + GOST_ENCRYPT_ROUND(key[2], key[3], sbox) + GOST_ENCRYPT_ROUND(key[4], key[5], sbox) + GOST_ENCRYPT_ROUND(key[6], key[7], sbox) + GOST_ENCRYPT_ROUND(key[7], key[6], sbox) + GOST_ENCRYPT_ROUND(key[5], key[4], sbox) + GOST_ENCRYPT_ROUND(key[3], key[2], sbox) + GOST_ENCRYPT_ROUND(key[1], key[0], sbox) + *out = l, *(out + 1) = r; +} + +static void gost28147_decrypt_simple (const uint32_t *key, const uint32_t *sbox, + const uint32_t *in, uint32_t *out) +{ + uint32_t l, r, tmp; + + r = in[0], l = in[1]; + GOST_ENCRYPT_ROUND(key[0], key[1], sbox) + GOST_ENCRYPT_ROUND(key[2], key[3], sbox) + GOST_ENCRYPT_ROUND(key[4], key[5], sbox) + GOST_ENCRYPT_ROUND(key[6], key[7], sbox) + GOST_ENCRYPT_ROUND(key[7], key[6], sbox) + GOST_ENCRYPT_ROUND(key[5], key[4], sbox) + GOST_ENCRYPT_ROUND(key[3], key[2], sbox) + GOST_ENCRYPT_ROUND(key[1], key[0], sbox) + GOST_ENCRYPT_ROUND(key[7], key[6], sbox) + GOST_ENCRYPT_ROUND(key[5], key[4], sbox) + GOST_ENCRYPT_ROUND(key[3], key[2], sbox) + GOST_ENCRYPT_ROUND(key[1], key[0], sbox) + GOST_ENCRYPT_ROUND(key[7], key[6], sbox) + GOST_ENCRYPT_ROUND(key[5], key[4], sbox) + GOST_ENCRYPT_ROUND(key[3], key[2], sbox) + GOST_ENCRYPT_ROUND(key[1], key[0], sbox) + *out = l, *(out + 1) = r; +} + +static void gost28147_imit_simple (const uint32_t *key, const uint32_t *sbox, + const uint32_t *in, uint32_t *out) +{ + uint32_t l, r, tmp; + + r = in[0], l = in[1]; + GOST_ENCRYPT_ROUND(key[0], key[1], sbox) + GOST_ENCRYPT_ROUND(key[2], key[3], sbox) + GOST_ENCRYPT_ROUND(key[4], key[5], sbox) + GOST_ENCRYPT_ROUND(key[6], key[7], sbox) + GOST_ENCRYPT_ROUND(key[0], key[1], sbox) + GOST_ENCRYPT_ROUND(key[2], key[3], sbox) + GOST_ENCRYPT_ROUND(key[4], key[5], sbox) + GOST_ENCRYPT_ROUND(key[6], key[7], sbox) + *out = r, *(out + 1) = l; +} + +static const uint32_t gost28147_key_mesh_cryptopro_data[GOST28147_KEY_SIZE / 4] = { + 0x22720069, 0x2304c964, + 0x96db3a8d, 0xc42ae946, + 0x94acfe18, 0x1207ed00, + 0xc2dc86c0, 0x2ba94cef, +}; + +static void gost28147_key_mesh_cryptopro(struct gost28147_ctx *ctx) +{ + uint32_t newkey[GOST28147_KEY_SIZE/4]; + + gost28147_decrypt_simple(ctx->key, ctx->sbox, + &gost28147_key_mesh_cryptopro_data[0], + &newkey[0]); + + gost28147_decrypt_simple(ctx->key, ctx->sbox, + &gost28147_key_mesh_cryptopro_data[2], + &newkey[2]); + + gost28147_decrypt_simple(ctx->key, ctx->sbox, + &gost28147_key_mesh_cryptopro_data[4], + &newkey[4]); + + gost28147_decrypt_simple(ctx->key, ctx->sbox, + &gost28147_key_mesh_cryptopro_data[6], + &newkey[6]); + + memcpy(ctx->key, newkey, sizeof(newkey)); + ctx->key_count = 0; +} + +void +gost28147_set_key(struct gost28147_ctx *ctx, const uint8_t *key) +{ + unsigned i; + + assert(key); + for (i = 0; i < 8; i++, key += 4) + ctx->key[i] = LE_READ_UINT32(key); + ctx->key_count = 0; +} + +void +gost28147_set_param(struct gost28147_ctx *ctx, const struct gost28147_param *param) +{ + assert(param); + ctx->sbox = param->sbox; + ctx->key_meshing = param->key_meshing; +} + +void +gost28147_encrypt(const struct gost28147_ctx *ctx, + size_t length, uint8_t *dst, + const uint8_t *src) +{ + uint32_t block[2]; + + assert(!(length % GOST28147_BLOCK_SIZE)); + + while (length) + { + block[0] = LE_READ_UINT32(src); src += 4; + block[1] = LE_READ_UINT32(src); src += 4; + gost28147_encrypt_simple(ctx->key, ctx->sbox, block, block); + LE_WRITE_UINT32(dst, block[0]); dst += 4; + LE_WRITE_UINT32(dst, block[1]); dst += 4; + length -= GOST28147_BLOCK_SIZE; + } +} + +void +gost28147_decrypt(const struct gost28147_ctx *ctx, + size_t length, uint8_t *dst, + const uint8_t *src) +{ + uint32_t block[2]; + + assert(!(length % GOST28147_BLOCK_SIZE)); + + while (length) + { + block[0] = LE_READ_UINT32(src); src += 4; + block[1] = LE_READ_UINT32(src); src += 4; + gost28147_decrypt_simple(ctx->key, ctx->sbox, block, block); + LE_WRITE_UINT32(dst, block[0]); dst += 4; + LE_WRITE_UINT32(dst, block[1]); dst += 4; + length -= GOST28147_BLOCK_SIZE; + } +} + +void +gost28147_encrypt_for_cfb(struct gost28147_ctx *ctx, + size_t length, uint8_t *dst, + const uint8_t *src) +{ + uint32_t block[2]; + + assert(!(length % GOST28147_BLOCK_SIZE)); + + while (length) + { + block[0] = LE_READ_UINT32(src); src += 4; + block[1] = LE_READ_UINT32(src); src += 4; + if (ctx->key_meshing && ctx->key_count == 1024) + { + gost28147_key_mesh_cryptopro(ctx); + gost28147_encrypt_simple(ctx->key, ctx->sbox, block, block); + ctx->key_count = 0; + } + gost28147_encrypt_simple(ctx->key, ctx->sbox, block, block); + LE_WRITE_UINT32(dst, block[0]); dst += 4; + LE_WRITE_UINT32(dst, block[1]); dst += 4; + length -= GOST28147_BLOCK_SIZE; + ctx->key_count += GOST28147_BLOCK_SIZE; + } +} + +static void +gost28147_cnt_next_iv(struct gost28147_cnt_ctx *ctx, + uint8_t *out) +{ + uint32_t block[2]; + uint32_t temp; + + if (ctx->ctx.key_meshing && ctx->ctx.key_count == 1024) + { + gost28147_key_mesh_cryptopro(&ctx->ctx); + gost28147_encrypt_simple(ctx->ctx.key, ctx->ctx.sbox, ctx->iv, ctx->iv); + ctx->ctx.key_count = 0; + } + + ctx->iv[0] += 0x01010101; + temp = ctx->iv[1] + 0x01010104; + if (temp < ctx->iv[1]) + ctx->iv[1] = temp + 1; /* Overflow */ + else + ctx->iv[1] = temp; + + gost28147_encrypt_simple(ctx->ctx.key, ctx->ctx.sbox, ctx->iv, block); + + LE_WRITE_UINT32(out + 0, block[0]); + LE_WRITE_UINT32(out + 4, block[1]); + + ctx->ctx.key_count += GOST28147_BLOCK_SIZE; +} + +void +gost28147_cnt_init(struct gost28147_cnt_ctx *ctx, + const uint8_t *key, + const struct gost28147_param *param) +{ + gost28147_set_param(&ctx->ctx, param); + gost28147_set_key(&ctx->ctx, key); + ctx->bytes = 0; +} + +void +gost28147_cnt_set_iv(struct gost28147_cnt_ctx *ctx, + const uint8_t *iv) +{ + uint32_t block[2]; + + block[0] = LE_READ_UINT32(iv + 0); + block[1] = LE_READ_UINT32(iv + 4); + + gost28147_encrypt_simple(ctx->ctx.key, ctx->ctx.sbox, block, ctx->iv); +} + +void +gost28147_cnt_crypt(struct gost28147_cnt_ctx *ctx, + size_t length, uint8_t *dst, + const uint8_t *src) +{ + size_t block_size = GOST28147_BLOCK_SIZE; + + if (ctx->bytes) + { + size_t part = ctx->bytes < length ? ctx->bytes : length; + memxor3(dst, src, ctx->buffer + block_size - ctx->bytes, part); + dst += part; + src += part; + length -= part; + ctx->bytes -= part; + ctx->bytes %= block_size; + } + while (length >= block_size) + { + gost28147_cnt_next_iv(ctx, ctx->buffer); + memxor3(dst, src, ctx->buffer, block_size); + length -= block_size; + src += block_size; + dst += block_size; + } + + if (length != 0) + { + gost28147_cnt_next_iv(ctx, ctx->buffer); + memxor3(dst, src, ctx->buffer, length); + ctx->bytes = block_size - length; + } +} + +static void +_gost28147_imit_reinit(struct gost28147_imit_ctx *ctx) +{ + ctx->state[0] = 0; + ctx->state[1] = 0; + ctx->index = 0; + ctx->count = 0; +} + +void +gost28147_imit_set_key(struct gost28147_imit_ctx *ctx, + size_t length, + const uint8_t *key) +{ + assert(length == GOST28147_IMIT_KEY_SIZE); + assert(key); + + _gost28147_imit_reinit(ctx); + gost28147_set_key(&ctx->cctx, key); +} + +void +gost28147_imit_set_nonce(struct gost28147_imit_ctx *ctx, const uint8_t *nonce) +{ + ctx->state[0] = LE_READ_UINT32(nonce + 0); + ctx->state[1] = LE_READ_UINT32(nonce + 4); +} + +void +gost28147_imit_set_param(struct gost28147_imit_ctx *ctx, + const struct gost28147_param *param) +{ + assert(param); + gost28147_set_param(&ctx->cctx, param); +} + +static void +gost28147_imit_compress(struct gost28147_imit_ctx *ctx, + const uint8_t *data) +{ + uint32_t block[2]; + + if (ctx->cctx.key_meshing && ctx->cctx.key_count == 1024) + gost28147_key_mesh_cryptopro(&ctx->cctx); + + block[0] = LE_READ_UINT32(data + 0) ^ ctx->state[0]; + block[1] = LE_READ_UINT32(data + 4) ^ ctx->state[1]; + gost28147_imit_simple(ctx->cctx.key, ctx->cctx.sbox, block, ctx->state); + ctx->cctx.key_count += 8; +} + +void +gost28147_imit_update(struct gost28147_imit_ctx *ctx, + size_t length, + const uint8_t *data) +{ + MD_UPDATE(ctx, length, data, gost28147_imit_compress, ctx->count++); +} + +void +gost28147_imit_digest(struct gost28147_imit_ctx *ctx, + size_t length, + uint8_t *digest) +{ + assert(length <= GOST28147_IMIT_DIGEST_SIZE); + const uint8_t zero[GOST28147_IMIT_BLOCK_SIZE] = { 0 }; + + if (ctx->index) + { + assert(ctx->index < GOST28147_IMIT_BLOCK_SIZE); + gost28147_imit_update(ctx, GOST28147_IMIT_BLOCK_SIZE - ctx->index, zero); + } + + if (ctx->count == 1) + { + gost28147_imit_update(ctx, GOST28147_IMIT_BLOCK_SIZE, zero); + } + + _nettle_write_le32(length, digest, ctx->state); + _gost28147_imit_reinit(ctx); +} +#endif diff --git a/lib/nettle/gost/gost28147.h b/lib/nettle/gost/gost28147.h new file mode 100644 index 0000000000..14c865e6e6 --- /dev/null +++ b/lib/nettle/gost/gost28147.h @@ -0,0 +1,216 @@ +/* gost28147.h + + The GOST 28147-89 (MAGMA) cipher function, described in RFC 5831. + + Copyright (C) 2015 Dmitry Eremin-Solenikov + Copyright (C) 2012 Nikos Mavrogiannopoulos, Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#ifndef GNUTLS_LIB_NETTLE_GOST_GOST28147_H +#define GNUTLS_LIB_NETTLE_GOST_GOST28147_H + +#include "config.h" + +#ifndef HAVE_NETTLE_GOST28147_SET_KEY + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* S-Boxes & parameters */ +#define gost28147_param_test_3411 _gnutls_gost28147_param_test_3411 +#define gost28147_param_CryptoPro_3411 _gnutls_gost28147_param_CryptoPro_3411 +#define gost28147_param_Test_89 _gnutls_gost28147_param_Test_89 +#define gost28147_param_CryptoPro_A _gnutls_gost28147_param_CryptoPro_A +#define gost28147_param_CryptoPro_B _gnutls_gost28147_param_CryptoPro_B +#define gost28147_param_CryptoPro_C _gnutls_gost28147_param_CryptoPro_C +#define gost28147_param_CryptoPro_D _gnutls_gost28147_param_CryptoPro_D +#define gost28147_param_TC26_Z _gnutls_gost28147_param_TC26_Z + +/* Private */ +#define gost28147_encrypt_simple _gnutls_gost28147_encrypt_simple + +/* Public functions */ +#define gost28147_set_key _gnutls_gost28147_set_key +#define gost28147_set_param _gnutls_gost28147_set_param +#define gost28147_encrypt _gnutls_gost28147_encrypt +#define gost28147_encrypt_for_cfb _gnutls_gost28147_encrypt_for_cfb +#define gost28147_decrypt _gnutls_gost28147_decrypt + +#define gost28147_cnt_init _gnutls_gost28147_cnt_init +#define gost28147_cnt_set_iv _gnutls_gost28147_cnt_set_iv +#define gost28147_cnt_crypt _gnutls_gost28147_cnt_crypt + +#define gost28147_kdf_cryptopro _gnutls_gost28147_kdf_cryptopro +#define gost28147_key_wrap_cryptopro _gnutls_gost28147_key_wrap_cryptopro +#define gost28147_key_unwrap_cryptopro _gnutls_gost28147_key_unwrap_cryptopro + +#define gost28147_imit_set_key _gnutls_gost28147_imit_set_key +#define gost28147_imit_set_nonce _gnutls_gost28147_imit_set_nonce +#define gost28147_imit_set_param _gnutls_gost28147_imit_set_param +#define gost28147_imit_update _gnutls_gost28147_imit_update +#define gost28147_imit_digest _gnutls_gost28147_imit_digest + +#define GOST28147_KEY_SIZE 32 +#define GOST28147_BLOCK_SIZE 8 + +struct gost28147_ctx +{ + uint32_t key[GOST28147_KEY_SIZE/4]; + const uint32_t *sbox; + int key_meshing; + int key_count; /* Used for key meshing */ +}; + +struct gost28147_param +{ + int key_meshing; + uint32_t sbox[4*256]; +}; + +extern const struct gost28147_param gost28147_param_test_3411; +extern const struct gost28147_param gost28147_param_CryptoPro_3411; +extern const struct gost28147_param gost28147_param_Test_89; +extern const struct gost28147_param gost28147_param_CryptoPro_A; +extern const struct gost28147_param gost28147_param_CryptoPro_B; +extern const struct gost28147_param gost28147_param_CryptoPro_C; +extern const struct gost28147_param gost28147_param_CryptoPro_D; +extern const struct gost28147_param gost28147_param_TC26_Z; + +/* Internal interface for use by GOST R 34.11-94 */ +void gost28147_encrypt_simple (const uint32_t *key, const uint32_t *sbox, + const uint32_t *in, uint32_t *out); + +void +gost28147_set_key(struct gost28147_ctx *ctx, const uint8_t *key); + +void +gost28147_set_param(struct gost28147_ctx *ctx, + const struct gost28147_param *param); + +void +gost28147_encrypt(const struct gost28147_ctx *ctx, + size_t length, uint8_t *dst, + const uint8_t *src); +void +gost28147_decrypt(const struct gost28147_ctx *ctx, + size_t length, uint8_t *dst, + const uint8_t *src); +void +gost28147_encrypt_for_cfb(struct gost28147_ctx *ctx, + size_t length, uint8_t *dst, + const uint8_t *src); + +struct gost28147_cnt_ctx { + struct gost28147_ctx ctx; + size_t bytes; + uint32_t iv[2]; + uint8_t buffer[GOST28147_BLOCK_SIZE]; +}; + +void +gost28147_cnt_init(struct gost28147_cnt_ctx *ctx, + const uint8_t *key, + const struct gost28147_param *param); + +void +gost28147_cnt_set_iv(struct gost28147_cnt_ctx *ctx, + const uint8_t *iv); + +void +gost28147_cnt_crypt(struct gost28147_cnt_ctx *ctx, + size_t length, uint8_t *dst, + const uint8_t *src); + +void +gost28147_kdf_cryptopro(const struct gost28147_param *param, + const uint8_t *in, + const uint8_t *ukm, + uint8_t *out); +void +gost28147_key_wrap_cryptopro(const struct gost28147_param *param, + const uint8_t *kek, + const uint8_t *ukm, size_t ukm_size, + const uint8_t *cek, + uint8_t *enc, + uint8_t *imit); + +int +gost28147_key_unwrap_cryptopro(const struct gost28147_param *param, + const uint8_t *kek, + const uint8_t *ukm, size_t ukm_size, + const uint8_t *enc, + const uint8_t *imit, + uint8_t *cek); + +#define GOST28147_IMIT_DIGEST_SIZE 4 +#define GOST28147_IMIT_BLOCK_SIZE GOST28147_BLOCK_SIZE +#define GOST28147_IMIT_KEY_SIZE GOST28147_KEY_SIZE + +struct gost28147_imit_ctx +{ + struct gost28147_ctx cctx; + uint64_t count; /* Block count */ + uint8_t block[GOST28147_IMIT_BLOCK_SIZE]; /* Block buffer */ + unsigned index; /* Into buffer */ + uint32_t state[GOST28147_IMIT_BLOCK_SIZE/4]; +}; + +void +gost28147_imit_set_key(struct gost28147_imit_ctx *ctx, + size_t length, + const uint8_t *key); + +void +gost28147_imit_set_nonce(struct gost28147_imit_ctx *ctx, + const uint8_t *nonce); + +void +gost28147_imit_set_param(struct gost28147_imit_ctx *ctx, + const struct gost28147_param *param); + +void +gost28147_imit_update(struct gost28147_imit_ctx *ctx, + size_t length, + const uint8_t *data); + +void +gost28147_imit_digest(struct gost28147_imit_ctx *ctx, + size_t length, + uint8_t *digest); + +#ifdef __cplusplus +} +#endif + +#endif + +#endif /* GNUTLS_LIB_NETTLE_GOST_GOST28147_H */ diff --git a/lib/nettle/gost/gostdsa-keygen.c b/lib/nettle/gost/gostdsa-keygen.c new file mode 100644 index 0000000000..fa364be872 --- /dev/null +++ b/lib/nettle/gost/gostdsa-keygen.c @@ -0,0 +1,63 @@ +/* ecdsa-keygen.c + + Copyright (C) 2013 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see http://www.gnu.org/licenses/. +*/ + +/* Development of Nettle's ECC support was funded by the .SE Internet Fund. */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include +#include "ecc/ecc-internal.h" +#include "ecc-gost-curve.h" +#include "nettle-alloca.h" + +void +gostdsa_generate_keypair (struct ecc_point *pub, + struct ecc_scalar *key, + void *random_ctx, nettle_random_func *random) +{ + TMP_DECL(p, mp_limb_t, 3*ECC_MAX_SIZE + ECC_MUL_G_ITCH (ECC_MAX_SIZE)); + const struct ecc_curve *ecc = pub->ecc; + mp_size_t itch = 3*ecc->p.size + ecc->mul_g_itch; + + assert (key->ecc == ecc); + assert (ecc->h_to_a_itch <= ecc->mul_g_itch); + + TMP_ALLOC (p, itch); + + ecc_mod_random (&ecc->q, key->p, random_ctx, random, p); + ecc->mul_g (ecc, p, key->p, p + 3*ecc->p.size); + ecc->h_to_a (ecc, 0, pub->p, p, p + 3*ecc->p.size); +} diff --git a/lib/nettle/gost/gostdsa-mask.c b/lib/nettle/gost/gostdsa-mask.c new file mode 100644 index 0000000000..552e5fb9e6 --- /dev/null +++ b/lib/nettle/gost/gostdsa-mask.c @@ -0,0 +1,79 @@ +/* gostdsa-verify.c + + Copyright (C) 2018 Dmitry Eremin-Solenikov + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include + +#include "gostdsa2.h" +#include "ecc/ecc-internal.h" + +/* Key comes in form .... M_2 M_1 K_0, + unmask is K_i = K_i-1 * M_i mod Q */ +int +gostdsa_unmask_key (const struct ecc_curve *ecc, + mpz_t key) +{ + unsigned bits = ecc_bit_size (ecc); + unsigned keybits = mpz_sizeinbase (key, 2); + mpz_t unmasked, temp, temp2, q; + + if (keybits <= bits) + return 0; + + mpz_init (unmasked); + mpz_init (temp); + mpz_init (temp2); + mpz_roinit_n (q, ecc->q.m, ecc->q.size); + mpz_tdiv_r_2exp (unmasked, key, bits); + mpz_tdiv_q_2exp (key, key, bits); + keybits -= bits; + while (keybits > bits) + { + mpz_tdiv_r_2exp (temp2, key, bits); + mpz_tdiv_q_2exp (key, key, bits); + keybits -= bits; + mpz_mul (temp, unmasked, temp2); + mpz_mod (unmasked, temp, q); + } + mpz_mul (temp, unmasked, key); + mpz_mod (key, temp, q); + + mpz_clear (temp2); + mpz_clear (temp); + mpz_clear (unmasked); + + return 0; +} diff --git a/lib/nettle/gost/gostdsa2.h b/lib/nettle/gost/gostdsa2.h new file mode 100644 index 0000000000..9328a8af73 --- /dev/null +++ b/lib/nettle/gost/gostdsa2.h @@ -0,0 +1,59 @@ +/* gostdsa.h + + Copyright (C) 2015 Dmity Eremin-Solenikov + Copyright (C) 2013 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +/* Development of Nettle's ECC support was funded by the .SE Internet Fund. */ + +#ifndef GNUTLS_LIB_NETTLE_GOST_GOSTDSA2_H +#define GNUTLS_LIB_NETTLE_GOST_GOSTDSA2_H + +#include + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Name mangling */ +#define gostdsa_unmask_key _gnutls_gostdsa_unmask_key + +int +gostdsa_unmask_key (const struct ecc_curve *ecc, + mpz_t key); + +#ifdef __cplusplus +} +#endif + +#endif /* GNUTLS_LIB_NETTLE_GOST_GOSTDSA2_H */ diff --git a/lib/nettle/gost/gosthash94-meta.c b/lib/nettle/gost/gosthash94-meta.c new file mode 100644 index 0000000000..9cdbe8d566 --- /dev/null +++ b/lib/nettle/gost/gosthash94-meta.c @@ -0,0 +1,47 @@ +/* gosthash94-meta.c + + Copyright (C) 2012 Nikos Mavrogiannopoulos, Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#ifndef HAVE_NETTLE_GOSTHASH94CP_UPDATE + +#include + +#include + +#include "gosthash94.h" + +const struct nettle_hash nettle_gosthash94cp += _NETTLE_HASH(gosthash94cp, GOSTHASH94CP); + +#endif diff --git a/lib/nettle/gost/gosthash94.c b/lib/nettle/gost/gosthash94.c new file mode 100644 index 0000000000..ae96cd6a80 --- /dev/null +++ b/lib/nettle/gost/gosthash94.c @@ -0,0 +1,376 @@ +/* gosthash94.c - an implementation of GOST Hash Function + * + * based on the Russian Standard GOST R 34.11-94. + * English description in RFC 5831. + * See also RFC 4357. + * + * Copyright: 2009-2012 Aleksey Kravchenko + * + * 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. + */ + +/* + * Ported to nettle by Nikos Mavrogiannopoulos. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#ifndef HAVE_NETTLE_GOSTHASH94CP_UPDATE +#include + +#include + +#include +#include "nettle-write.h" +#include "gosthash94.h" +#include "gost28147.h" + +/** + * The core transformation. Process a 512-bit block. + * + * @param hash intermediate message hash + * @param block the message block to process + */ +static void +gost_block_compress (struct gosthash94_ctx *ctx, const uint32_t *block, + const uint32_t *sbox) +{ + unsigned i; + uint32_t key[8], u[8], v[8], w[8], s[8]; + + /* u := hash, v := <256-bit message block> */ + memcpy (u, ctx->hash, sizeof (u)); + memcpy (v, block, sizeof (v)); + + /* w := u xor v */ + w[0] = u[0] ^ v[0], w[1] = u[1] ^ v[1]; + w[2] = u[2] ^ v[2], w[3] = u[3] ^ v[3]; + w[4] = u[4] ^ v[4], w[5] = u[5] ^ v[5]; + w[6] = u[6] ^ v[6], w[7] = u[7] ^ v[7]; + + /* calculate keys, encrypt hash and store result to the s[] array */ + for (i = 0;; i += 2) + { + /* key generation: key_i := P(w) */ + key[0] = + (w[0] & 0x000000ff) | ((w[2] & 0x000000ff) << 8) | + ((w[4] & 0x000000ff) << 16) | ((w[6] & 0x000000ff) << 24); + key[1] = + ((w[0] & 0x0000ff00) >> 8) | (w[2] & 0x0000ff00) | + ((w[4] & 0x0000ff00) << 8) | ((w[6] & 0x0000ff00) << 16); + key[2] = + ((w[0] & 0x00ff0000) >> 16) | ((w[2] & 0x00ff0000) >> 8) | + (w[4] & 0x00ff0000) | ((w[6] & 0x00ff0000) << 8); + key[3] = + ((w[0] & 0xff000000) >> 24) | ((w[2] & 0xff000000) >> 16) | + ((w[4] & 0xff000000) >> 8) | (w[6] & 0xff000000); + key[4] = + (w[1] & 0x000000ff) | ((w[3] & 0x000000ff) << 8) | + ((w[5] & 0x000000ff) << 16) | ((w[7] & 0x000000ff) << 24); + key[5] = + ((w[1] & 0x0000ff00) >> 8) | (w[3] & 0x0000ff00) | + ((w[5] & 0x0000ff00) << 8) | ((w[7] & 0x0000ff00) << 16); + key[6] = + ((w[1] & 0x00ff0000) >> 16) | ((w[3] & 0x00ff0000) >> 8) | + (w[5] & 0x00ff0000) | ((w[7] & 0x00ff0000) << 8); + key[7] = + ((w[1] & 0xff000000) >> 24) | ((w[3] & 0xff000000) >> 16) | + ((w[5] & 0xff000000) >> 8) | (w[7] & 0xff000000); + + /* encryption: s_i := E_{key_i} (h_i) */ + gost28147_encrypt_simple (key, sbox, &ctx->hash[i], &s[i]); + + if (i == 0) + { + /* w:= A(u) ^ A^2(v) */ + w[0] = u[2] ^ v[4], w[1] = u[3] ^ v[5]; + w[2] = u[4] ^ v[6], w[3] = u[5] ^ v[7]; + w[4] = u[6] ^ (v[0] ^= v[2]); + w[5] = u[7] ^ (v[1] ^= v[3]); + w[6] = (u[0] ^= u[2]) ^ (v[2] ^= v[4]); + w[7] = (u[1] ^= u[3]) ^ (v[3] ^= v[5]); + } + else if ((i & 2) != 0) + { + if (i == 6) + break; + + /* w := A^2(u) xor A^4(v) xor C_3; u := A(u) xor C_3 */ + /* C_3=0xff00ffff000000ffff0000ff00ffff0000ff00ff00ff00ffff00ff00ff00ff00 */ + u[2] ^= u[4] ^ 0x000000ff; + u[3] ^= u[5] ^ 0xff00ffff; + u[4] ^= 0xff00ff00; + u[5] ^= 0xff00ff00; + u[6] ^= 0x00ff00ff; + u[7] ^= 0x00ff00ff; + u[0] ^= 0x00ffff00; + u[1] ^= 0xff0000ff; + + w[0] = u[4] ^ v[0]; + w[2] = u[6] ^ v[2]; + w[4] = u[0] ^ (v[4] ^= v[6]); + w[6] = u[2] ^ (v[6] ^= v[0]); + w[1] = u[5] ^ v[1]; + w[3] = u[7] ^ v[3]; + w[5] = u[1] ^ (v[5] ^= v[7]); + w[7] = u[3] ^ (v[7] ^= v[1]); + } + else + { + /* i==4 here */ + /* w:= A( A^2(u) xor C_3 ) xor A^6(v) */ + w[0] = u[6] ^ v[4], w[1] = u[7] ^ v[5]; + w[2] = u[0] ^ v[6], w[3] = u[1] ^ v[7]; + w[4] = u[2] ^ (v[0] ^= v[2]); + w[5] = u[3] ^ (v[1] ^= v[3]); + w[6] = (u[4] ^= u[6]) ^ (v[2] ^= v[4]); + w[7] = (u[5] ^= u[7]) ^ (v[3] ^= v[5]); + } + } + + /* step hash function: x(block, hash) := psi^61(hash xor psi(block xor psi^12(S))) */ + + /* 12 rounds of the LFSR and xor in */ + u[0] = block[0] ^ s[6]; + u[1] = block[1] ^ s[7]; + u[2] = + block[2] ^ (s[0] << 16) ^ (s[0] >> 16) ^ (s[0] & 0xffff) ^ (s[1] & + 0xffff) + ^ (s[1] >> 16) ^ (s[2] << 16) ^ s[6] ^ (s[6] << 16) ^ (s[7] & + 0xffff0000) + ^ (s[7] >> 16); + u[3] = + block[3] ^ (s[0] & 0xffff) ^ (s[0] << 16) ^ (s[1] & 0xffff) ^ (s[1] + << + 16) + ^ (s[1] >> 16) ^ (s[2] << 16) ^ (s[2] >> 16) ^ (s[3] << 16) ^ s[6] + ^ (s[6] << 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff) ^ (s[7] << 16) ^ + (s[7] >> 16); + u[4] = + block[4] ^ (s[0] & 0xffff0000) ^ (s[0] << 16) ^ (s[0] >> 16) ^ + (s[1] & 0xffff0000) ^ (s[1] >> 16) ^ (s[2] << 16) ^ (s[2] >> 16) ^ + (s[3] << 16) ^ (s[3] >> 16) ^ (s[4] << 16) ^ (s[6] << 16) ^ (s[6] + >> 16) + ^ (s[7] & 0xffff) ^ (s[7] << 16) ^ (s[7] >> 16); + u[5] = + block[5] ^ (s[0] << 16) ^ (s[0] >> 16) ^ (s[0] & 0xffff0000) ^ + (s[1] & 0xffff) ^ s[2] ^ (s[2] >> 16) ^ (s[3] << 16) ^ (s[3] >> 16) + ^ (s[4] << 16) ^ (s[4] >> 16) ^ (s[5] << 16) ^ (s[6] << 16) ^ (s[6] + >> + 16) + ^ (s[7] & 0xffff0000) ^ (s[7] << 16) ^ (s[7] >> 16); + u[6] = + block[6] ^ s[0] ^ (s[1] >> 16) ^ (s[2] << 16) ^ s[3] ^ (s[3] >> 16) + ^ (s[4] << 16) ^ (s[4] >> 16) ^ (s[5] << 16) ^ (s[5] >> 16) ^ s[6] + ^ (s[6] << 16) ^ (s[6] >> 16) ^ (s[7] << 16); + u[7] = + block[7] ^ (s[0] & 0xffff0000) ^ (s[0] << 16) ^ (s[1] & 0xffff) ^ + (s[1] << 16) ^ (s[2] >> 16) ^ (s[3] << 16) ^ s[4] ^ (s[4] >> 16) ^ + (s[5] << 16) ^ (s[5] >> 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff) ^ + (s[7] << 16) ^ (s[7] >> 16); + + /* 1 round of the LFSR (a mixing transformation) and xor with */ + v[0] = ctx->hash[0] ^ (u[1] << 16) ^ (u[0] >> 16); + v[1] = ctx->hash[1] ^ (u[2] << 16) ^ (u[1] >> 16); + v[2] = ctx->hash[2] ^ (u[3] << 16) ^ (u[2] >> 16); + v[3] = ctx->hash[3] ^ (u[4] << 16) ^ (u[3] >> 16); + v[4] = ctx->hash[4] ^ (u[5] << 16) ^ (u[4] >> 16); + v[5] = ctx->hash[5] ^ (u[6] << 16) ^ (u[5] >> 16); + v[6] = ctx->hash[6] ^ (u[7] << 16) ^ (u[6] >> 16); + v[7] = + ctx-> + hash[7] ^ (u[0] & 0xffff0000) ^ (u[0] << 16) ^ (u[1] & 0xffff0000) + ^ (u[1] << 16) ^ (u[6] << 16) ^ (u[7] & 0xffff0000) ^ (u[7] >> 16); + + /* 61 rounds of LFSR, mixing up hash */ + ctx->hash[0] = (v[0] & 0xffff0000) ^ (v[0] << 16) ^ (v[0] >> 16) ^ + (v[1] >> 16) ^ (v[1] & 0xffff0000) ^ (v[2] << 16) ^ + (v[3] >> 16) ^ (v[4] << 16) ^ (v[5] >> 16) ^ v[5] ^ + (v[6] >> 16) ^ (v[7] << 16) ^ (v[7] >> 16) ^ (v[7] & 0xffff); + ctx->hash[1] = (v[0] << 16) ^ (v[0] >> 16) ^ (v[0] & 0xffff0000) ^ + (v[1] & 0xffff) ^ v[2] ^ (v[2] >> 16) ^ (v[3] << 16) ^ + (v[4] >> 16) ^ (v[5] << 16) ^ (v[6] << 16) ^ v[6] ^ + (v[7] & 0xffff0000) ^ (v[7] >> 16); + ctx->hash[2] = (v[0] & 0xffff) ^ (v[0] << 16) ^ (v[1] << 16) ^ + (v[1] >> 16) ^ (v[1] & 0xffff0000) ^ (v[2] << 16) ^ (v[3] >> 16) ^ + v[3] ^ (v[4] << 16) ^ (v[5] >> 16) ^ v[6] ^ (v[6] >> 16) ^ + (v[7] & 0xffff) ^ (v[7] << 16) ^ (v[7] >> 16); + ctx->hash[3] = (v[0] << 16) ^ (v[0] >> 16) ^ (v[0] & 0xffff0000) ^ + (v[1] & 0xffff0000) ^ (v[1] >> 16) ^ (v[2] << 16) ^ + (v[2] >> 16) ^ v[2] ^ (v[3] << 16) ^ (v[4] >> 16) ^ v[4] ^ + (v[5] << 16) ^ (v[6] << 16) ^ (v[7] & 0xffff) ^ (v[7] >> 16); + ctx->hash[4] = + (v[0] >> 16) ^ (v[1] << 16) ^ v[1] ^ (v[2] >> 16) ^ v[2] ^ (v[3] << + 16) ^ + (v[3] >> 16) ^ v[3] ^ (v[4] << 16) ^ (v[5] >> 16) ^ v[5] ^ (v[6] << + 16) ^ + (v[6] >> 16) ^ (v[7] << 16); + ctx->hash[5] = + (v[0] << 16) ^ (v[0] & 0xffff0000) ^ (v[1] << 16) ^ (v[1] >> 16) ^ + (v[1] & 0xffff0000) ^ (v[2] << 16) ^ v[2] ^ (v[3] >> 16) ^ v[3] ^ + (v[4] << 16) ^ (v[4] >> 16) ^ v[4] ^ (v[5] << 16) ^ (v[6] << 16) ^ + (v[6] >> 16) ^ v[6] ^ (v[7] << 16) ^ (v[7] >> 16) ^ (v[7] & + 0xffff0000); + ctx->hash[6] = + v[0] ^ v[2] ^ (v[2] >> 16) ^ v[3] ^ (v[3] << 16) ^ v[4] ^ (v[4] >> + 16) ^ + (v[5] << 16) ^ (v[5] >> 16) ^ v[5] ^ (v[6] << 16) ^ (v[6] >> 16) ^ + v[6] ^ (v[7] << 16) ^ v[7]; + ctx->hash[7] = + v[0] ^ (v[0] >> 16) ^ (v[1] << 16) ^ (v[1] >> 16) ^ (v[2] << 16) ^ + (v[3] >> 16) ^ v[3] ^ (v[4] << 16) ^ v[4] ^ (v[5] >> 16) ^ v[5] ^ + (v[6] << 16) ^ (v[6] >> 16) ^ (v[7] << 16) ^ v[7]; +} + +/** + * This function calculates hash value by 256-bit blocks. + * It updates 256-bit check sum as follows: + * *(uint256_t)(ctx->sum) += *(uint256_t*)block; + * and then updates intermediate hash value ctx->hash + * by calling gost_block_compress(). + * + * @param ctx algorithm context + * @param block the 256-bit message block to process + */ +static void +gost_compute_sum_and_hash (struct gosthash94_ctx *ctx, const uint8_t *block, + const uint32_t *sbox) +{ + uint32_t block_le[8]; + unsigned i, carry; + + /* compute the 256-bit sum */ + for (i = carry = 0; i < 8; i++, block += 4) + { + block_le[i] = LE_READ_UINT32(block); + ctx->sum[i] += carry; + carry = (ctx->sum[i] < carry); + ctx->sum[i] += block_le[i]; + carry += (ctx->sum[i] < block_le[i]); + } + + /* update message hash */ + gost_block_compress (ctx, block_le, sbox); +} + +/** + * Calculate message hash. + * Can be called repeatedly with chunks of the message to be hashed. + * + * @param ctx the algorithm context containing current hashing state + * @param msg message chunk + * @param size length of the message chunk + */ +static void +gosthash94_update_int (struct gosthash94_ctx *ctx, + size_t length, const uint8_t *msg, + const uint32_t *sbox) +{ + unsigned index = (unsigned) ctx->length & 31; + ctx->length += length; + + /* fill partial block */ + if (index) + { + unsigned left = GOSTHASH94_BLOCK_SIZE - index; + memcpy (ctx->message + index, msg, (length < left ? length : left)); + if (length < left) + return; + + /* process partial block */ + gost_compute_sum_and_hash (ctx, ctx->message, sbox); + msg += left; + length -= left; + } + while (length >= GOSTHASH94_BLOCK_SIZE) + { + gost_compute_sum_and_hash (ctx, msg, sbox); + msg += GOSTHASH94_BLOCK_SIZE; + length -= GOSTHASH94_BLOCK_SIZE; + } + if (length) + { + /* save leftovers */ + memcpy (ctx->message, msg, length); + } +} + +/** + * Calculate message hash. + * Can be called repeatedly with chunks of the message to be hashed. + * + * @param ctx the algorithm context containing current hashing state + * @param msg message chunk + * @param size length of the message chunk + */ +void +gosthash94cp_update (struct gosthash94_ctx *ctx, + size_t length, const uint8_t *msg) +{ + gosthash94_update_int (ctx, length, msg, + gost28147_param_CryptoPro_3411.sbox); +} + +/** + * Finish hashing and store message digest into given array. + * + * @param ctx the algorithm context containing current hashing state + * @param result calculated hash in binary form + */ +static void +gosthash94_write_digest (struct gosthash94_ctx *ctx, + size_t length, uint8_t *result, + const uint32_t *sbox) +{ + unsigned index = ctx->length & 31; + uint32_t msg32[8]; + + assert(length <= GOSTHASH94_DIGEST_SIZE); + + /* pad the last block with zeroes and hash it */ + if (index > 0) + { + memset (ctx->message + index, 0, 32 - index); + gost_compute_sum_and_hash (ctx, ctx->message, sbox); + } + + /* hash the message length and the sum */ + msg32[0] = ctx->length << 3; + msg32[1] = ctx->length >> 29; + memset (msg32 + 2, 0, sizeof (uint32_t) * 6); + + gost_block_compress (ctx, msg32, sbox); + gost_block_compress (ctx, ctx->sum, sbox); + + /* convert hash state to result bytes */ + _nettle_write_le32(length, result, ctx->hash); + gosthash94_init (ctx); +} + +void +gosthash94cp_digest (struct gosthash94_ctx *ctx, + size_t length, uint8_t *result) +{ + gosthash94_write_digest (ctx, length, result, + gost28147_param_CryptoPro_3411.sbox); +} +#endif diff --git a/lib/nettle/gost/gosthash94.h b/lib/nettle/gost/gosthash94.h new file mode 100644 index 0000000000..c37701d620 --- /dev/null +++ b/lib/nettle/gost/gosthash94.h @@ -0,0 +1,101 @@ +/* gosthash94.h + + The GOST R 34.11-94 hash function, described in RFC 5831. + + Copyright (C) 2012 Nikos Mavrogiannopoulos, Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +/* Based on rhash gost.h. */ + +/* Copyright: 2009-2012 Aleksey Kravchenko + * + * 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. + */ + +/* + * Ported to nettle by Nikos Mavrogiannopoulos. + */ + +#ifndef GNUTLS_LIB_NETTLE_GOST_GOSTHASH94_H +#define GNUTLS_LIB_NETTLE_GOST_GOSTHASH94_H + +#include "config.h" + +#ifndef HAVE_NETTLE_GOSTHASH94CP_UPDATE + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define gosthash94cp_update _gnutls_gosthash94cp_update +#define gosthash94cp_digest _gnutls_gosthash94cp_digest + +#define GOSTHASH94CP_BLOCK_SIZE GOSTHASH94_BLOCK_SIZE +#define GOSTHASH94CP_DIGEST_SIZE GOSTHASH94_DIGEST_SIZE + +#define gosthash94cp_ctx gosthash94_ctx + +#define gosthash94cp_init gosthash94_init +void gosthash94cp_update(struct gosthash94_ctx *ctx, + size_t length, const uint8_t *msg); +void gosthash94cp_digest(struct gosthash94_ctx *ctx, + size_t length, uint8_t *result); + +#define nettle_gosthash94cp _gnutls_gosthash94cp +extern const struct nettle_hash _gnutls_gosthash94cp; + +#ifdef __cplusplus +} +#endif + +#endif + +#endif /* GNUTLS_LIB_NETTLE_GOST_GOSTHASH94_H */ diff --git a/lib/nettle/gost/hmac-gost.h b/lib/nettle/gost/hmac-gost.h new file mode 100644 index 0000000000..7b697183ec --- /dev/null +++ b/lib/nettle/gost/hmac-gost.h @@ -0,0 +1,117 @@ +/* hmac-gost.h + + HMAC message authentication code (RFC-2104). + + Copyright (C) 2001, 2002 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#ifndef GNUTLS_LIB_NETTLE_GOST_HMAC_GOST_H +#define GNUTLS_LIB_NETTLE_GOST_HMAC_GOST_H + +#include "config.h" + +#include + +#ifndef HAVE_NETTLE_GOSTHASH94CP_UPDATE +#include "gosthash94.h" +#endif +#ifndef HAVE_NETTLE_STREEBOG512_UPDATE +#include "streebog.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Namespace mangling */ +#ifndef HAVE_NETTLE_GOSTHASH94CP_UPDATE +#define hmac_gosthash94cp_set_key _gnutls_hmac_gosthash94cp_set_key +#define hmac_gosthash94cp_update _gnutls_hmac_gosthash94cp_update +#define hmac_gosthash94cp_digest _gnutls_hmac_gosthash94cp_digest +#endif +#ifndef HAVE_NETTLE_STREEBOG512_UPDATE +#define hmac_streebog256_set_key _gnutls_hmac_streebog256_set_key +#define hmac_streebog256_digest _gnutls_hmac_streebog256_digest +#define hmac_streebog512_set_key _gnutls_hmac_streebog512_set_key +#define hmac_streebog512_update _gnutls_hmac_streebog512_update +#define hmac_streebog512_digest _gnutls_hmac_streebog512_digest +#endif + +/* hmac-gosthash94 */ +#ifndef HAVE_NETTLE_GOSTHASH94CP_UPDATE +struct hmac_gosthash94cp_ctx HMAC_CTX(struct gosthash94cp_ctx); + +void +hmac_gosthash94cp_set_key(struct hmac_gosthash94cp_ctx *ctx, + size_t key_length, const uint8_t *key); + +void +hmac_gosthash94cp_update(struct hmac_gosthash94cp_ctx *ctx, + size_t length, const uint8_t *data); + +void +hmac_gosthash94cp_digest(struct hmac_gosthash94cp_ctx *ctx, + size_t length, uint8_t *digest); +#endif + + +/* hmac-streebog */ +#ifndef HAVE_NETTLE_STREEBOG512_UPDATE +struct hmac_streebog512_ctx HMAC_CTX(struct streebog512_ctx); + +void +hmac_streebog512_set_key(struct hmac_streebog512_ctx *ctx, + size_t key_length, const uint8_t *key); + +void +hmac_streebog512_update(struct hmac_streebog512_ctx *ctx, + size_t length, const uint8_t *data); + +void +hmac_streebog512_digest(struct hmac_streebog512_ctx *ctx, + size_t length, uint8_t *digest); + +#define hmac_streebog256_ctx hmac_streebog512_ctx + +void +hmac_streebog256_set_key(struct hmac_streebog256_ctx *ctx, + size_t key_length, const uint8_t *key); + +#define hmac_streebog256_update hmac_streebog512_update + +void +hmac_streebog256_digest(struct hmac_streebog256_ctx *ctx, + size_t length, uint8_t *digest); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* GNUTLS_LIB_NETTLE_GOST_HMAC_GOST_H */ diff --git a/lib/nettle/gost/hmac-gosthash94.c b/lib/nettle/gost/hmac-gosthash94.c new file mode 100644 index 0000000000..1fca292ba7 --- /dev/null +++ b/lib/nettle/gost/hmac-gosthash94.c @@ -0,0 +1,65 @@ +/* hmac-gosthash94.c + + HMAC-GOSTHASH94 message authentication code. + + Copyright (C) 2016 Dmitry Eremin-Solenikov + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#if HAVE_CONFIG_H +# include +#endif + +#ifndef HAVE_NETTLE_GOSTHASH94CP_UPDATE + +#include + +#include +#include "hmac-gost.h" +#include "gosthash94.h" + +void +hmac_gosthash94cp_set_key(struct hmac_gosthash94cp_ctx *ctx, + size_t key_length, const uint8_t *key) +{ + HMAC_SET_KEY(ctx, &nettle_gosthash94cp, key_length, key); +} + +void +hmac_gosthash94cp_update(struct hmac_gosthash94cp_ctx *ctx, + size_t length, const uint8_t *data) +{ + gosthash94cp_update(&ctx->state, length, data); +} +void +hmac_gosthash94cp_digest(struct hmac_gosthash94cp_ctx *ctx, + size_t length, uint8_t *digest) +{ + HMAC_DIGEST(ctx, &nettle_gosthash94cp, length, digest); +} +#endif diff --git a/lib/nettle/gost/hmac-streebog.c b/lib/nettle/gost/hmac-streebog.c new file mode 100644 index 0000000000..00fcdb9132 --- /dev/null +++ b/lib/nettle/gost/hmac-streebog.c @@ -0,0 +1,78 @@ +/* hmac-streebog.c + + HMAC-Streebog message authentication code. + + Copyright (C) 2016 Dmitry Eremin-Solenikov + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#if HAVE_CONFIG_H +# include +#endif + +#ifndef HAVE_NETTLE_STREEBOG512_UPDATE +#include + +#include +#include "hmac-gost.h" + +void +hmac_streebog512_set_key(struct hmac_streebog512_ctx *ctx, + size_t key_length, const uint8_t *key) +{ + HMAC_SET_KEY(ctx, &nettle_streebog512, key_length, key); +} + +void +hmac_streebog512_update(struct hmac_streebog512_ctx *ctx, + size_t length, const uint8_t *data) +{ + streebog512_update(&ctx->state, length, data); +} + +void +hmac_streebog512_digest(struct hmac_streebog512_ctx *ctx, + size_t length, uint8_t *digest) +{ + HMAC_DIGEST(ctx, &nettle_streebog512, length, digest); +} + +void +hmac_streebog256_set_key(struct hmac_streebog256_ctx *ctx, + size_t key_length, const uint8_t *key) +{ + HMAC_SET_KEY(ctx, &nettle_streebog256, key_length, key); +} + +void +hmac_streebog256_digest(struct hmac_streebog256_ctx *ctx, + size_t length, uint8_t *digest) +{ + HMAC_DIGEST(ctx, &nettle_streebog256, length, digest); +} +#endif diff --git a/lib/nettle/gost/nettle-write.h b/lib/nettle/gost/nettle-write.h new file mode 100644 index 0000000000..ca0c0843eb --- /dev/null +++ b/lib/nettle/gost/nettle-write.h @@ -0,0 +1,61 @@ +/* nettle-write.h + + Internal functions to write out word-sized data to byte arrays. + + Copyright (C) 2010 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#ifndef GNUTLS_LIB_NETTLE_GOST_NETTLE_WRITE_H +#define GNUTLS_LIB_NETTLE_GOST_NETTLE_WRITE_H + +/* For size_t */ +#include + +#include + +/* Write the word array at SRC to the byte array at DST, using little + endian (le) or big endian (be) byte order, and truncating the + result to LENGTH bytes. */ + +/* FIXME: Use a macro shortcut to memcpy for native endianness. */ +void +#define _nettle_write_be32 _gnutls_nettle_ecc_write_be32 +_nettle_write_be32(size_t length, uint8_t *dst, + const uint32_t *src); +void +#define _nettle_write_le32 _gnutls_nettle_ecc_write_le32 +_nettle_write_le32(size_t length, uint8_t *dst, + const uint32_t *src); + +void +#define _nettle_write_le64 _gnutls_nettle_ecc_write_le64 +_nettle_write_le64(size_t length, uint8_t *dst, + const uint64_t *src); + +#endif /* GNUTLS_LIB_NETTLE_GOST_NETTLE_WRITE_H */ diff --git a/lib/nettle/gost/streebog-meta.c b/lib/nettle/gost/streebog-meta.c new file mode 100644 index 0000000000..c64fa001c9 --- /dev/null +++ b/lib/nettle/gost/streebog-meta.c @@ -0,0 +1,48 @@ +/* streebog-meta.c + + Copyright (C) 2012 Nikos Mavrogiannopoulos, Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#ifndef HAVE_NETTLE_STREEBOG512_UPDATE +#include + +#include + +#include "streebog.h" + +const struct nettle_hash nettle_streebog512 += _NETTLE_HASH(streebog512, STREEBOG512); + +const struct nettle_hash nettle_streebog256 += _NETTLE_HASH(streebog256, STREEBOG256); +#endif diff --git a/lib/nettle/gost/streebog.c b/lib/nettle/gost/streebog.c new file mode 100644 index 0000000000..2799e9ea4a --- /dev/null +++ b/lib/nettle/gost/streebog.c @@ -0,0 +1,1337 @@ +/* streebog.c - GOST R 34.11-2012 (Streebog) hash function + + Copyright (C) 2013-2015 Dmitry Eremin-Solenikov + + Based on my code in libgcrypt. + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. + */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#ifndef HAVE_NETTLE_STREEBOG512_UPDATE +#include + +#include +#include + +#include "streebog.h" + +#include +#include "nettle-write.h" + + +/* Pre-computed results of multiplication of bytes on A and reordered with + Pi[]. */ +static const uint64_t streebog_table[8][256] = +{ + /* 0 */ + { 0xd01f715b5c7ef8e6ULL, 0x16fa240980778325ULL, + 0xa8a42e857ee049c8ULL, 0x6ac1068fa186465bULL, + 0x6e417bd7a2e9320bULL, 0x665c8167a437daabULL, + 0x7666681aa89617f6ULL, 0x4b959163700bdcf5ULL, + 0xf14be6b78df36248ULL, 0xc585bd689a625cffULL, + 0x9557d7fca67d82cbULL, 0x89f0b969af6dd366ULL, + 0xb0833d48749f6c35ULL, 0xa1998c23b1ecbc7cULL, + 0x8d70c431ac02a736ULL, 0xd6dfbc2fd0a8b69eULL, + 0x37aeb3e551fa198bULL, 0x0b7d128a40b5cf9cULL, + 0x5a8f2008b5780cbcULL, 0xedec882284e333e5ULL, + 0xd25fc177d3c7c2ceULL, 0x5e0f5d50b61778ecULL, + 0x1d873683c0c24cb9ULL, 0xad040bcbb45d208cULL, + 0x2f89a0285b853c76ULL, 0x5732fff6791b8d58ULL, + 0x3e9311439ef6ec3fULL, 0xc9183a809fd3c00fULL, + 0x83adf3f5260a01eeULL, 0xa6791941f4e8ef10ULL, + 0x103ae97d0ca1cd5dULL, 0x2ce948121dee1b4aULL, + 0x39738421dbf2bf53ULL, 0x093da2a6cf0cf5b4ULL, + 0xcd9847d89cbcb45fULL, 0xf9561c078b2d8ae8ULL, + 0x9c6a755a6971777fULL, 0xbc1ebaa0712ef0c5ULL, + 0x72e61542abf963a6ULL, 0x78bb5fde229eb12eULL, + 0x14ba94250fceb90dULL, 0x844d6697630e5282ULL, + 0x98ea08026a1e032fULL, 0xf06bbea144217f5cULL, + 0xdb6263d11ccb377aULL, 0x641c314b2b8ee083ULL, + 0x320e96ab9b4770cfULL, 0x1ee7deb986a96b85ULL, + 0xe96cf57a878c47b5ULL, 0xfdd6615f8842feb8ULL, + 0xc83862965601dd1bULL, 0x2ea9f83e92572162ULL, + 0xf876441142ff97fcULL, 0xeb2c455608357d9dULL, + 0x5612a7e0b0c9904cULL, 0x6c01cbfb2d500823ULL, + 0x4548a6a7fa037a2dULL, 0xabc4c6bf388b6ef4ULL, + 0xbade77d4fdf8bebdULL, 0x799b07c8eb4cac3aULL, + 0x0c9d87e805b19cf0ULL, 0xcb588aac106afa27ULL, + 0xea0c1d40c1e76089ULL, 0x2869354a1e816f1aULL, + 0xff96d17307fbc490ULL, 0x9f0a9d602f1a5043ULL, + 0x96373fc6e016a5f7ULL, 0x5292dab8b3a6e41cULL, + 0x9b8ae0382c752413ULL, 0x4f15ec3b7364a8a5ULL, + 0x3fb349555724f12bULL, 0xc7c50d4415db66d7ULL, + 0x92b7429ee379d1a7ULL, 0xd37f99611a15dfdaULL, + 0x231427c05e34a086ULL, 0xa439a96d7b51d538ULL, + 0xb403401077f01865ULL, 0xdda2aea5901d7902ULL, + 0x0a5d4a9c8967d288ULL, 0xc265280adf660f93ULL, + 0x8bb0094520d4e94eULL, 0x2a29856691385532ULL, + 0x42a833c5bf072941ULL, 0x73c64d54622b7eb2ULL, + 0x07e095624504536cULL, 0x8a905153e906f45aULL, + 0x6f6123c16b3b2f1fULL, 0xc6e55552dc097bc3ULL, + 0x4468feb133d16739ULL, 0xe211e7f0c7398829ULL, + 0xa2f96419f7879b40ULL, 0x19074bdbc3ad38e9ULL, + 0xf4ebc3f9474e0b0cULL, 0x43886bd376d53455ULL, + 0xd8028beb5aa01046ULL, 0x51f23282f5cdc320ULL, + 0xe7b1c2be0d84e16dULL, 0x081dfab006dee8a0ULL, + 0x3b33340d544b857bULL, 0x7f5bcabc679ae242ULL, + 0x0edd37c48a08a6d8ULL, 0x81ed43d9a9b33bc6ULL, + 0xb1a3655ebd4d7121ULL, 0x69a1eeb5e7ed6167ULL, + 0xf6ab73d5c8f73124ULL, 0x1a67a3e185c61fd5ULL, + 0x2dc91004d43c065eULL, 0x0240b02c8fb93a28ULL, + 0x90f7f2b26cc0eb8fULL, 0x3cd3a16f114fd617ULL, + 0xaae49ea9f15973e0ULL, 0x06c0cd748cd64e78ULL, + 0xda423bc7d5192a6eULL, 0xc345701c16b41287ULL, + 0x6d2193ede4821537ULL, 0xfcf639494190e3acULL, + 0x7c3b228621f1c57eULL, 0xfb16ac2b0494b0c0ULL, + 0xbf7e529a3745d7f9ULL, 0x6881b6a32e3f7c73ULL, + 0xca78d2bad9b8e733ULL, 0xbbfe2fc2342aa3a9ULL, + 0x0dbddffecc6381e4ULL, 0x70a6a56e2440598eULL, + 0xe4d12a844befc651ULL, 0x8c509c2765d0ba22ULL, + 0xee8c6018c28814d9ULL, 0x17da7c1f49a59e31ULL, + 0x609c4c1328e194d3ULL, 0xb3e3d57232f44b09ULL, + 0x91d7aaa4a512f69bULL, 0x0ffd6fd243dabbccULL, + 0x50d26a943c1fde34ULL, 0x6be15e9968545b4fULL, + 0x94778fea6faf9fdfULL, 0x2b09dd7058ea4826ULL, + 0x677cd9716de5c7bfULL, 0x49d5214fffb2e6ddULL, + 0x0360e83a466b273cULL, 0x1fc786af4f7b7691ULL, + 0xa0b9d435783ea168ULL, 0xd49f0c035f118cb6ULL, + 0x01205816c9d21d14ULL, 0xac2453dd7d8f3d98ULL, + 0x545217cc3f70aa64ULL, 0x26b4028e9489c9c2ULL, + 0xdec2469fd6765e3eULL, 0x04807d58036f7450ULL, + 0xe5f17292823ddb45ULL, 0xf30b569b024a5860ULL, + 0x62dcfc3fa758aefbULL, 0xe84cad6c4e5e5aa1ULL, + 0xccb81fce556ea94bULL, 0x53b282ae7a74f908ULL, + 0x1b47fbf74c1402c1ULL, 0x368eebf39828049fULL, + 0x7afbeff2ad278b06ULL, 0xbe5e0a8cfe97caedULL, + 0xcfd8f7f413058e77ULL, 0xf78b2bc301252c30ULL, + 0x4d555c17fcdd928dULL, 0x5f2f05467fc565f8ULL, + 0x24f4b2a21b30f3eaULL, 0x860dd6bbecb768aaULL, + 0x4c750401350f8f99ULL, 0x0000000000000000ULL, + 0xecccd0344d312ef1ULL, 0xb5231806be220571ULL, + 0xc105c030990d28afULL, 0x653c695de25cfd97ULL, + 0x159acc33c61ca419ULL, 0xb89ec7f872418495ULL, + 0xa9847693b73254dcULL, 0x58cf90243ac13694ULL, + 0x59efc832f3132b80ULL, 0x5c4fed7c39ae42c4ULL, + 0x828dabe3efd81cfaULL, 0xd13f294d95ace5f2ULL, + 0x7d1b7a90e823d86aULL, 0xb643f03cf849224dULL, + 0x3df3f979d89dcb03ULL, 0x7426d836272f2ddeULL, + 0xdfe21e891fa4432aULL, 0x3a136c1b9d99986fULL, + 0xfa36f43dcd46add4ULL, 0xc025982650df35bbULL, + 0x856d3e81aadc4f96ULL, 0xc4a5e57e53b041ebULL, + 0x4708168b75ba4005ULL, 0xaf44bbe73be41aa4ULL, + 0x971767d029c4b8e3ULL, 0xb9be9feebb939981ULL, + 0x215497ecd18d9aaeULL, 0x316e7e91dd2c57f3ULL, + 0xcef8afe2dad79363ULL, 0x3853dc371220a247ULL, + 0x35ee03c9de4323a3ULL, 0xe6919aa8c456fc79ULL, + 0xe05157dc4880b201ULL, 0x7bdbb7e464f59612ULL, + 0x127a59518318f775ULL, 0x332ecebd52956ddbULL, + 0x8f30741d23bb9d1eULL, 0xd922d3fd93720d52ULL, + 0x7746300c61440ae2ULL, 0x25d4eab4d2e2eefeULL, + 0x75068020eefd30caULL, 0x135a01474acaea61ULL, + 0x304e268714fe4ae7ULL, 0xa519f17bb283c82cULL, + 0xdc82f6b359cf6416ULL, 0x5baf781e7caa11a8ULL, + 0xb2c38d64fb26561dULL, 0x34ce5bdf17913eb7ULL, + 0x5d6fb56af07c5fd0ULL, 0x182713cd0a7f25fdULL, + 0x9e2ac576e6c84d57ULL, 0x9aaab82ee5a73907ULL, + 0xa3d93c0f3e558654ULL, 0x7e7b92aaae48ff56ULL, + 0x872d8ead256575beULL, 0x41c8dbfff96c0e7dULL, + 0x99ca5014a3cc1e3bULL, 0x40e883e930be1369ULL, + 0x1ca76e95091051adULL, 0x4e35b42dbab6b5b1ULL, + 0x05a0254ecabd6944ULL, 0xe1710fca8152af15ULL, + 0xf22b0e8dcb984574ULL, 0xb763a82a319b3f59ULL, + 0x63fca4296e8ab3efULL, 0x9d4a2d4ca0a36a6bULL, + 0xe331bfe60eeb953dULL, 0xd5bf541596c391a2ULL, + 0xf5cb9bef8e9c1618ULL, 0x46284e9dbc685d11ULL, + 0x2074cffa185f87baULL, 0xbd3ee2b6b8fcedd1ULL, + 0xae64e3f1f23607b0ULL, 0xfeb68965ce29d984ULL, + 0x55724fdaf6a2b770ULL, 0x29496d5cd753720eULL, + 0xa75941573d3af204ULL, 0x8e102c0bea69800aULL, + 0x111ab16bc573d049ULL, 0xd7ffe439197aab8aULL, + 0xefac380e0b5a09cdULL, 0x48f579593660fbc9ULL, + 0x22347fd697e6bd92ULL, 0x61bc1405e13389c7ULL, + 0x4ab5c975b9d9c1e1ULL, 0x80cd1bcf606126d2ULL, + 0x7186fd78ed92449aULL, 0x93971a882aabccb3ULL, + 0x88d0e17f66bfce72ULL, 0x27945a985d5bd4d6ULL }, + /* 1 */ + { 0xde553f8c05a811c8ULL, 0x1906b59631b4f565ULL, + 0x436e70d6b1964ff7ULL, 0x36d343cb8b1e9d85ULL, + 0x843dfacc858aab5aULL, 0xfdfc95c299bfc7f9ULL, + 0x0f634bdea1d51fa2ULL, 0x6d458b3b76efb3cdULL, + 0x85c3f77cf8593f80ULL, 0x3c91315fbe737cb2ULL, + 0x2148b03366ace398ULL, 0x18f8b8264c6761bfULL, + 0xc830c1c495c9fb0fULL, 0x981a76102086a0aaULL, + 0xaa16012142f35760ULL, 0x35cc54060c763cf6ULL, + 0x42907d66cc45db2dULL, 0x8203d44b965af4bcULL, + 0x3d6f3cefc3a0e868ULL, 0xbc73ff69d292bda7ULL, + 0x8722ed0102e20a29ULL, 0x8f8185e8cd34deb7ULL, + 0x9b0561dda7ee01d9ULL, 0x5335a0193227fad6ULL, + 0xc9cecc74e81a6fd5ULL, 0x54f5832e5c2431eaULL, + 0x99e47ba05d553470ULL, 0xf7bee756acd226ceULL, + 0x384e05a5571816fdULL, 0xd1367452a47d0e6aULL, + 0xf29fde1c386ad85bULL, 0x320c77316275f7caULL, + 0xd0c879e2d9ae9ab0ULL, 0xdb7406c69110ef5dULL, + 0x45505e51a2461011ULL, 0xfc029872e46c5323ULL, + 0xfa3cb6f5f7bc0cc5ULL, 0x031f17cd8768a173ULL, + 0xbd8df2d9af41297dULL, 0x9d3b4f5ab43e5e3fULL, + 0x4071671b36feee84ULL, 0x716207e7d3e3b83dULL, + 0x48d20ff2f9283a1aULL, 0x27769eb4757cbc7eULL, + 0x5c56ebc793f2e574ULL, 0xa48b474f9ef5dc18ULL, + 0x52cbada94ff46e0cULL, 0x60c7da982d8199c6ULL, + 0x0e9d466edc068b78ULL, 0x4eec2175eaf865fcULL, + 0x550b8e9e21f7a530ULL, 0x6b7ba5bc653fec2bULL, + 0x5eb7f1ba6949d0ddULL, 0x57ea94e3db4c9099ULL, + 0xf640eae6d101b214ULL, 0xdd4a284182c0b0bbULL, + 0xff1d8fbf6304f250ULL, 0xb8accb933bf9d7e8ULL, + 0xe8867c478eb68c4dULL, 0x3f8e2692391bddc1ULL, + 0xcb2fd60912a15a7cULL, 0xaec935dbab983d2fULL, + 0xf55ffd2b56691367ULL, 0x80e2ce366ce1c115ULL, + 0x179bf3f8edb27e1dULL, 0x01fe0db07dd394daULL, + 0xda8a0b76ecc37b87ULL, 0x44ae53e1df9584cbULL, + 0xb310b4b77347a205ULL, 0xdfab323c787b8512ULL, + 0x3b511268d070b78eULL, 0x65e6e3d2b9396753ULL, + 0x6864b271e2574d58ULL, 0x259784c98fc789d7ULL, + 0x02e11a7dfabb35a9ULL, 0x8841a6dfa337158bULL, + 0x7ade78c39b5dcdd0ULL, 0xb7cf804d9a2cc84aULL, + 0x20b6bd831b7f7742ULL, 0x75bd331d3a88d272ULL, + 0x418f6aab4b2d7a5eULL, 0xd9951cbb6babdaf4ULL, + 0xb6318dfde7ff5c90ULL, 0x1f389b112264aa83ULL, + 0x492c024284fbaec0ULL, 0xe33a0363c608f9a0ULL, + 0x2688930408af28a4ULL, 0xc7538a1a341ce4adULL, + 0x5da8e677ee2171aeULL, 0x8c9e92254a5c7fc4ULL, + 0x63d8cd55aae938b5ULL, 0x29ebd8daa97a3706ULL, + 0x959827b37be88aa1ULL, 0x1484e4356adadf6eULL, + 0xa7945082199d7d6bULL, 0xbf6ce8a455fa1cd4ULL, + 0x9cc542eac9edcae5ULL, 0x79c16f0e1c356ca3ULL, + 0x89bfab6fdee48151ULL, 0xd4174d1830c5f0ffULL, + 0x9258048415eb419dULL, 0x6139d72850520d1cULL, + 0x6a85a80c18ec78f1ULL, 0xcd11f88e0171059aULL, + 0xcceff53e7ca29140ULL, 0xd229639f2315af19ULL, + 0x90b91ef9ef507434ULL, 0x5977d28d074a1be1ULL, + 0x311360fce51d56b9ULL, 0xc093a92d5a1f2f91ULL, + 0x1a19a25bb6dc5416ULL, 0xeb996b8a09de2d3eULL, + 0xfee3820f1ed7668aULL, 0xd7085ad5b7ad518cULL, + 0x7fff41890fe53345ULL, 0xec5948bd67dde602ULL, + 0x2fd5f65dbaaa68e0ULL, 0xa5754affe32648c2ULL, + 0xf8ddac880d07396cULL, 0x6fa491468c548664ULL, + 0x0c7c5c1326bdbed1ULL, 0x4a33158f03930fb3ULL, + 0x699abfc19f84d982ULL, 0xe4fa2054a80b329cULL, + 0x6707f9af438252faULL, 0x08a368e9cfd6d49eULL, + 0x47b1442c58fd25b8ULL, 0xbbb3dc5ebc91769bULL, + 0x1665fe489061eac7ULL, 0x33f27a811fa66310ULL, + 0x93a609346838d547ULL, 0x30ed6d4c98cec263ULL, + 0x1dd9816cd8df9f2aULL, 0x94662a03063b1e7bULL, + 0x83fdd9fbeb896066ULL, 0x7b207573e68e590aULL, + 0x5f49fc0a149a4407ULL, 0x343259b671a5a82cULL, + 0xfbc2bb458a6f981fULL, 0xc272b350a0a41a38ULL, + 0x3aaf1fd8ada32354ULL, 0x6cbb868b0b3c2717ULL, + 0xa2b569c88d2583feULL, 0xf180c9d1bf027928ULL, + 0xaf37386bd64ba9f5ULL, 0x12bacab2790a8088ULL, + 0x4c0d3b0810435055ULL, 0xb2eeb9070e9436dfULL, + 0xc5b29067cea7d104ULL, 0xdcb425f1ff132461ULL, + 0x4f122cc5972bf126ULL, 0xac282fa651230886ULL, + 0xe7e537992f6393efULL, 0xe61b3a2952b00735ULL, + 0x709c0a57ae302ce7ULL, 0xe02514ae416058d3ULL, + 0xc44c9dd7b37445deULL, 0x5a68c5408022ba92ULL, + 0x1c278cdca50c0bf0ULL, 0x6e5a9cf6f18712beULL, + 0x86dce0b17f319ef3ULL, 0x2d34ec2040115d49ULL, + 0x4bcd183f7e409b69ULL, 0x2815d56ad4a9a3dcULL, + 0x24698979f2141d0dULL, 0x0000000000000000ULL, + 0x1ec696a15fb73e59ULL, 0xd86b110b16784e2eULL, + 0x8e7f8858b0e74a6dULL, 0x063e2e8713d05fe6ULL, + 0xe2c40ed3bbdb6d7aULL, 0xb1f1aeca89fc97acULL, + 0xe1db191e3cb3cc09ULL, 0x6418ee62c4eaf389ULL, + 0xc6ad87aa49cf7077ULL, 0xd6f65765ca7ec556ULL, + 0x9afb6c6dda3d9503ULL, 0x7ce05644888d9236ULL, + 0x8d609f95378feb1eULL, 0x23a9aa4e9c17d631ULL, + 0x6226c0e5d73aac6fULL, 0x56149953a69f0443ULL, + 0xeeb852c09d66d3abULL, 0x2b0ac2a753c102afULL, + 0x07c023376e03cb3cULL, 0x2ccae1903dc2c993ULL, + 0xd3d76e2f5ec63bc3ULL, 0x9e2458973356ff4cULL, + 0xa66a5d32644ee9b1ULL, 0x0a427294356de137ULL, + 0x783f62be61e6f879ULL, 0x1344c70204d91452ULL, + 0x5b96c8f0fdf12e48ULL, 0xa90916ecc59bf613ULL, + 0xbe92e5142829880eULL, 0x727d102a548b194eULL, + 0x1be7afebcb0fc0ccULL, 0x3e702b2244c8491bULL, + 0xd5e940a84d166425ULL, 0x66f9f41f3e51c620ULL, + 0xabe80c913f20c3baULL, 0xf07ec461c2d1edf2ULL, + 0xf361d3ac45b94c81ULL, 0x0521394a94b8fe95ULL, + 0xadd622162cf09c5cULL, 0xe97871f7f3651897ULL, + 0xf4a1f09b2bba87bdULL, 0x095d6559b2054044ULL, + 0x0bbc7f2448be75edULL, 0x2af4cf172e129675ULL, + 0x157ae98517094bb4ULL, 0x9fda55274e856b96ULL, + 0x914713499283e0eeULL, 0xb952c623462a4332ULL, + 0x74433ead475b46a8ULL, 0x8b5eb112245fb4f8ULL, + 0xa34b6478f0f61724ULL, 0x11a5dd7ffe6221fbULL, + 0xc16da49d27ccbb4bULL, 0x76a224d0bde07301ULL, + 0x8aa0bca2598c2022ULL, 0x4df336b86d90c48fULL, + 0xea67663a740db9e4ULL, 0xef465f70e0b54771ULL, + 0x39b008152acb8227ULL, 0x7d1e5bf4f55e06ecULL, + 0x105bd0cf83b1b521ULL, 0x775c2960c033e7dbULL, + 0x7e014c397236a79fULL, 0x811cc386113255cfULL, + 0xeda7450d1a0e72d8ULL, 0x5889df3d7a998f3bULL, + 0x2e2bfbedc779fc3aULL, 0xce0eef438619a4e9ULL, + 0x372d4e7bf6cd095fULL, 0x04df34fae96b6a4fULL, + 0xf923a13870d4adb6ULL, 0xa1aa7e050a4d228dULL, + 0xa8f71b5cb84862c9ULL, 0xb52e9a306097fde3ULL, + 0x0d8251a35b6e2a0bULL, 0x2257a7fee1c442ebULL, + 0x73831d9a29588d94ULL, 0x51d4ba64c89ccf7fULL, + 0x502ab7d4b54f5ba5ULL, 0x97793dce8153bf08ULL, + 0xe5042de4d5d8a646ULL, 0x9687307efc802bd2ULL, + 0xa05473b5779eb657ULL, 0xb4d097801d446939ULL, + 0xcff0e2f3fbca3033ULL, 0xc38cbee0dd778ee2ULL, + 0x464f499c252eb162ULL, 0xcad1dbb96f72cea6ULL, + 0xba4dd1eec142e241ULL, 0xb00fa37af42f0376ULL }, + /* 2 */ + { 0xcce4cd3aa968b245ULL, 0x089d5484e80b7fafULL, + 0x638246c1b3548304ULL, 0xd2fe0ec8c2355492ULL, + 0xa7fbdf7ff2374eeeULL, 0x4df1600c92337a16ULL, + 0x84e503ea523b12fbULL, 0x0790bbfd53ab0c4aULL, + 0x198a780f38f6ea9dULL, 0x2ab30c8f55ec48cbULL, + 0xe0f7fed6b2c49db5ULL, 0xb6ecf3f422cadbdcULL, + 0x409c9a541358df11ULL, 0xd3ce8a56dfde3fe3ULL, + 0xc3e9224312c8c1a0ULL, 0x0d6dfa58816ba507ULL, + 0xddf3e1b179952777ULL, 0x04c02a42748bb1d9ULL, + 0x94c2abff9f2decb8ULL, 0x4f91752da8f8acf4ULL, + 0x78682befb169bf7bULL, 0xe1c77a48af2ff6c4ULL, + 0x0c5d7ec69c80ce76ULL, 0x4cc1e4928fd81167ULL, + 0xfeed3d24d9997b62ULL, 0x518bb6dfc3a54a23ULL, + 0x6dbf2d26151f9b90ULL, 0xb5bc624b05ea664fULL, + 0xe86aaa525acfe21aULL, 0x4801ced0fb53a0beULL, + 0xc91463e6c00868edULL, 0x1027a815cd16fe43ULL, + 0xf67069a0319204cdULL, 0xb04ccc976c8abce7ULL, + 0xc0b9b3fc35e87c33ULL, 0xf380c77c58f2de65ULL, + 0x50bb3241de4e2152ULL, 0xdf93f490435ef195ULL, + 0xf1e0d25d62390887ULL, 0xaf668bfb1a3c3141ULL, + 0xbc11b251f00a7291ULL, 0x73a5eed47e427d47ULL, + 0x25bee3f6ee4c3b2eULL, 0x43cc0beb34786282ULL, + 0xc824e778dde3039cULL, 0xf97d86d98a327728ULL, + 0xf2b043e24519b514ULL, 0xe297ebf7880f4b57ULL, + 0x3a94a49a98fab688ULL, 0x868516cb68f0c419ULL, + 0xeffa11af0964ee50ULL, 0xa4ab4ec0d517f37dULL, + 0xa9c6b498547c567aULL, 0x8e18424f80fbbbb6ULL, + 0x0bcdc53bcf2bc23cULL, 0x137739aaea3643d0ULL, + 0x2c1333ec1bac2ff0ULL, 0x8d48d3f0a7db0625ULL, + 0x1e1ac3f26b5de6d7ULL, 0xf520f81f16b2b95eULL, + 0x9f0f6ec450062e84ULL, 0x0130849e1deb6b71ULL, + 0xd45e31ab8c7533a9ULL, 0x652279a2fd14e43fULL, + 0x3209f01e70f1c927ULL, 0xbe71a770cac1a473ULL, + 0x0e3d6be7a64b1894ULL, 0x7ec8148cff29d840ULL, + 0xcb7476c7fac3be0fULL, 0x72956a4a63a91636ULL, + 0x37f95ec21991138fULL, 0x9e3fea5a4ded45f5ULL, + 0x7b38ba50964902e8ULL, 0x222e580bbde73764ULL, + 0x61e253e0899f55e6ULL, 0xfc8d2805e352ad80ULL, + 0x35994be3235ac56dULL, 0x09add01af5e014deULL, + 0x5e8659a6780539c6ULL, 0xb17c48097161d796ULL, + 0x026015213acbd6e2ULL, 0xd1ae9f77e515e901ULL, + 0xb7dc776a3f21b0adULL, 0xaba6a1b96eb78098ULL, + 0x9bcf4486248d9f5dULL, 0x582666c536455efdULL, + 0xfdbdac9bfeb9c6f1ULL, 0xc47999be4163cdeaULL, + 0x765540081722a7efULL, 0x3e548ed8ec710751ULL, + 0x3d041f67cb51bac2ULL, 0x7958af71ac82d40aULL, + 0x36c9da5c047a78feULL, 0xed9a048e33af38b2ULL, + 0x26ee7249c96c86bdULL, 0x900281bdeba65d61ULL, + 0x11172c8bd0fd9532ULL, 0xea0abf73600434f8ULL, + 0x42fc8f75299309f3ULL, 0x34a9cf7d3eb1ae1cULL, + 0x2b838811480723baULL, 0x5ce64c8742ceef24ULL, + 0x1adae9b01fd6570eULL, 0x3c349bf9d6bad1b3ULL, + 0x82453c891c7b75c0ULL, 0x97923a40b80d512bULL, + 0x4a61dbf1c198765cULL, 0xb48ce6d518010d3eULL, + 0xcfb45c858e480fd6ULL, 0xd933cbf30d1e96aeULL, + 0xd70ea014ab558e3aULL, 0xc189376228031742ULL, + 0x9262949cd16d8b83ULL, 0xeb3a3bed7def5f89ULL, + 0x49314a4ee6b8cbcfULL, 0xdcc3652f647e4c06ULL, + 0xda635a4c2a3e2b3dULL, 0x470c21a940f3d35bULL, + 0x315961a157d174b4ULL, 0x6672e81dda3459acULL, + 0x5b76f77a1165e36eULL, 0x445cb01667d36ec8ULL, + 0xc5491d205c88a69bULL, 0x456c34887a3805b9ULL, + 0xffddb9bac4721013ULL, 0x99af51a71e4649bfULL, + 0xa15be01cbc7729d5ULL, 0x52db2760e485f7b0ULL, + 0x8c78576eba306d54ULL, 0xae560f6507d75a30ULL, + 0x95f22f6182c687c9ULL, 0x71c5fbf54489aba5ULL, + 0xca44f259e728d57eULL, 0x88b87d2ccebbdc8dULL, + 0xbab18d32be4a15aaULL, 0x8be8ec93e99b611eULL, + 0x17b713e89ebdf209ULL, 0xb31c5d284baa0174ULL, + 0xeeca9531148f8521ULL, 0xb8d198138481c348ULL, + 0x8988f9b2d350b7fcULL, 0xb9e11c8d996aa839ULL, + 0x5a4673e40c8e881fULL, 0x1687977683569978ULL, + 0xbf4123eed72acf02ULL, 0x4ea1f1b3b513c785ULL, + 0xe767452be16f91ffULL, 0x7505d1b730021a7cULL, + 0xa59bca5ec8fc980cULL, 0xad069eda20f7e7a3ULL, + 0x38f4b1bba231606aULL, 0x60d2d77e94743e97ULL, + 0x9affc0183966f42cULL, 0x248e6768f3a7505fULL, + 0xcdd449a4b483d934ULL, 0x87b59255751baf68ULL, + 0x1bea6d2e023d3c7fULL, 0x6b1f12455b5ffcabULL, + 0x743555292de9710dULL, 0xd8034f6d10f5fddfULL, + 0xc6198c9f7ba81b08ULL, 0xbb8109aca3a17edbULL, + 0xfa2d1766ad12cabbULL, 0xc729080166437079ULL, + 0x9c5fff7b77269317ULL, 0x0000000000000000ULL, + 0x15d706c9a47624ebULL, 0x6fdf38072fd44d72ULL, + 0x5fb6dd3865ee52b7ULL, 0xa33bf53d86bcff37ULL, + 0xe657c1b5fc84fa8eULL, 0xaa962527735cebe9ULL, + 0x39c43525bfda0b1bULL, 0x204e4d2a872ce186ULL, + 0x7a083ece8ba26999ULL, 0x554b9c9db72efbfaULL, + 0xb22cd9b656416a05ULL, 0x96a2bedea5e63a5aULL, + 0x802529a826b0a322ULL, 0x8115ad363b5bc853ULL, + 0x8375b81701901eb1ULL, 0x3069e53f4a3a1fc5ULL, + 0xbd2136cfede119e0ULL, 0x18bafc91251d81ecULL, + 0x1d4a524d4c7d5b44ULL, 0x05f0aedc6960daa8ULL, + 0x29e39d3072ccf558ULL, 0x70f57f6b5962c0d4ULL, + 0x989fd53903ad22ceULL, 0xf84d024797d91c59ULL, + 0x547b1803aac5908bULL, 0xf0d056c37fd263f6ULL, + 0xd56eb535919e58d8ULL, 0x1c7ad6d351963035ULL, + 0x2e7326cd2167f912ULL, 0xac361a443d1c8cd2ULL, + 0x697f076461942a49ULL, 0x4b515f6fdc731d2dULL, + 0x8ad8680df4700a6fULL, 0x41ac1eca0eb3b460ULL, + 0x7d988533d80965d3ULL, 0xa8f6300649973d0bULL, + 0x7765c4960ac9cc9eULL, 0x7ca801adc5e20ea2ULL, + 0xdea3700e5eb59ae4ULL, 0xa06b6482a19c42a4ULL, + 0x6a2f96db46b497daULL, 0x27def6d7d487edccULL, + 0x463ca5375d18b82aULL, 0xa6cb5be1efdc259fULL, + 0x53eba3fef96e9cc1ULL, 0xce84d81b93a364a7ULL, + 0xf4107c810b59d22fULL, 0x333974806d1aa256ULL, + 0x0f0def79bba073e5ULL, 0x231edc95a00c5c15ULL, + 0xe437d494c64f2c6cULL, 0x91320523f64d3610ULL, + 0x67426c83c7df32ddULL, 0x6eefbc99323f2603ULL, + 0x9d6f7be56acdf866ULL, 0x5916e25b2bae358cULL, + 0x7ff89012e2c2b331ULL, 0x035091bf2720bd93ULL, + 0x561b0d22900e4669ULL, 0x28d319ae6f279e29ULL, + 0x2f43a2533c8c9263ULL, 0xd09e1be9f8fe8270ULL, + 0xf740ed3e2c796fbcULL, 0xdb53ded237d5404cULL, + 0x62b2c25faebfe875ULL, 0x0afd41a5d2c0a94dULL, + 0x6412fd3ce0ff8f4eULL, 0xe3a76f6995e42026ULL, + 0x6c8fa9b808f4f0e1ULL, 0xc2d9a6dd0f23aad1ULL, + 0x8f28c6d19d10d0c7ULL, 0x85d587744fd0798aULL, + 0xa20b71a39b579446ULL, 0x684f83fa7c7f4138ULL, + 0xe507500adba4471dULL, 0x3f640a46f19a6c20ULL, + 0x1247bd34f7dd28a1ULL, 0x2d23b77206474481ULL, + 0x93521002cc86e0f2ULL, 0x572b89bc8de52d18ULL, + 0xfb1d93f8b0f9a1caULL, 0xe95a2ecc4724896bULL, + 0x3ba420048511ddf9ULL, 0xd63e248ab6bee54bULL, + 0x5dd6c8195f258455ULL, 0x06a03f634e40673bULL, + 0x1f2a476c76b68da6ULL, 0x217ec9b49ac78af7ULL, + 0xecaa80102e4453c3ULL, 0x14e78257b99d4f9aULL }, + /* 3 */ + { 0x20329b2cc87bba05ULL, 0x4f5eb6f86546a531ULL, + 0xd4f44775f751b6b1ULL, 0x8266a47b850dfa8bULL, + 0xbb986aa15a6ca985ULL, 0xc979eb08f9ae0f99ULL, + 0x2da6f447a2375ea1ULL, 0x1e74275dcd7d8576ULL, + 0xbc20180a800bc5f8ULL, 0xb4a2f701b2dc65beULL, + 0xe726946f981b6d66ULL, 0x48e6c453bf21c94cULL, + 0x42cad9930f0a4195ULL, 0xefa47b64aacccd20ULL, + 0x71180a8960409a42ULL, 0x8bb3329bf6a44e0cULL, + 0xd34c35de2d36daccULL, 0xa92f5b7cbc23dc96ULL, + 0xb31a85aa68bb09c3ULL, 0x13e04836a73161d2ULL, + 0xb24dfc4129c51d02ULL, 0x8ae44b70b7da5acdULL, + 0xe671ed84d96579a7ULL, 0xa4bb3417d66f3832ULL, + 0x4572ab38d56d2de8ULL, 0xb1b47761ea47215cULL, + 0xe81c09cf70aba15dULL, 0xffbdb872ce7f90acULL, + 0xa8782297fd5dc857ULL, 0x0d946f6b6a4ce4a4ULL, + 0xe4df1f4f5b995138ULL, 0x9ebc71edca8c5762ULL, + 0x0a2c1dc0b02b88d9ULL, 0x3b503c115d9d7b91ULL, + 0xc64376a8111ec3a2ULL, 0xcec199a323c963e4ULL, + 0xdc76a87ec58616f7ULL, 0x09d596e073a9b487ULL, + 0x14583a9d7d560dafULL, 0xf4c6dc593f2a0cb4ULL, + 0xdd21d19584f80236ULL, 0x4a4836983ddde1d3ULL, + 0xe58866a41ae745f9ULL, 0xf591a5b27e541875ULL, + 0x891dc05074586693ULL, 0x5b068c651810a89eULL, + 0xa30346bc0c08544fULL, 0x3dbf3751c684032dULL, + 0x2a1e86ec785032dcULL, 0xf73f5779fca830eaULL, + 0xb60c05ca30204d21ULL, 0x0cc316802b32f065ULL, + 0x8770241bdd96be69ULL, 0xb861e18199ee95dbULL, + 0xf805cad91418fcd1ULL, 0x29e70dccbbd20e82ULL, + 0xc7140f435060d763ULL, 0x0f3a9da0e8b0cc3bULL, + 0xa2543f574d76408eULL, 0xbd7761e1c175d139ULL, + 0x4b1f4f737ca3f512ULL, 0x6dc2df1f2fc137abULL, + 0xf1d05c3967b14856ULL, 0xa742bf3715ed046cULL, + 0x654030141d1697edULL, 0x07b872abda676c7dULL, + 0x3ce84eba87fa17ecULL, 0xc1fb0403cb79afdfULL, + 0x3e46bc7105063f73ULL, 0x278ae987121cd678ULL, + 0xa1adb4778ef47cd0ULL, 0x26dd906c5362c2b9ULL, + 0x05168060589b44e2ULL, 0xfbfc41f9d79ac08fULL, + 0x0e6de44ba9ced8faULL, 0x9feb08068bf243a3ULL, + 0x7b341749d06b129bULL, 0x229c69e74a87929aULL, + 0xe09ee6c4427c011bULL, 0x5692e30e725c4c3aULL, + 0xda99a33e5e9f6e4bULL, 0x353dd85af453a36bULL, + 0x25241b4c90e0fee7ULL, 0x5de987258309d022ULL, + 0xe230140fc0802984ULL, 0x93281e86a0c0b3c6ULL, + 0xf229d719a4337408ULL, 0x6f6c2dd4ad3d1f34ULL, + 0x8ea5b2fbae3f0aeeULL, 0x8331dd90c473ee4aULL, + 0x346aa1b1b52db7aaULL, 0xdf8f235e06042aa9ULL, + 0xcc6f6b68a1354b7bULL, 0x6c95a6f46ebf236aULL, + 0x52d31a856bb91c19ULL, 0x1a35ded6d498d555ULL, + 0xf37eaef2e54d60c9ULL, 0x72e181a9a3c2a61cULL, + 0x98537aad51952fdeULL, 0x16f6c856ffaa2530ULL, + 0xd960281e9d1d5215ULL, 0x3a0745fa1ce36f50ULL, + 0x0b7b642bf1559c18ULL, 0x59a87eae9aec8001ULL, + 0x5e100c05408bec7cULL, 0x0441f98b19e55023ULL, + 0xd70dcc5534d38aefULL, 0x927f676de1bea707ULL, + 0x9769e70db925e3e5ULL, 0x7a636ea29115065aULL, + 0x468b201816ef11b6ULL, 0xab81a9b73edff409ULL, + 0xc0ac7de88a07bb1eULL, 0x1f235eb68c0391b7ULL, + 0x6056b074458dd30fULL, 0xbe8eeac102f7ed67ULL, + 0xcd381283e04b5fbaULL, 0x5cbefecec277c4e3ULL, + 0xd21b4c356c48ce0dULL, 0x1019c31664b35d8cULL, + 0x247362a7d19eea26ULL, 0xebe582efb3299d03ULL, + 0x02aef2cb82fc289fULL, 0x86275df09ce8aaa8ULL, + 0x28b07427faac1a43ULL, 0x38a9b7319e1f47cfULL, + 0xc82e92e3b8d01b58ULL, 0x06ef0b409b1978bcULL, + 0x62f842bfc771fb90ULL, 0x9904034610eb3b1fULL, + 0xded85ab5477a3e68ULL, 0x90d195a663428f98ULL, + 0x5384636e2ac708d8ULL, 0xcbd719c37b522706ULL, + 0xae9729d76644b0ebULL, 0x7c8c65e20a0c7ee6ULL, + 0x80c856b007f1d214ULL, 0x8c0b40302cc32271ULL, + 0xdbcedad51fe17a8aULL, 0x740e8ae938dbdea0ULL, + 0xa615c6dc549310adULL, 0x19cc55f6171ae90bULL, + 0x49b1bdb8fe5fdd8dULL, 0xed0a89af2830e5bfULL, + 0x6a7aadb4f5a65bd6ULL, 0x7e22972988f05679ULL, + 0xf952b3325566e810ULL, 0x39fecedadf61530eULL, + 0x6101c99f04f3c7ceULL, 0x2e5f7f6761b562ffULL, + 0xf08725d226cf5c97ULL, 0x63af3b54860fef51ULL, + 0x8ff2cb10ef411e2fULL, 0x884ab9bb35267252ULL, + 0x4df04433e7ba8daeULL, 0x9afd8866d3690741ULL, + 0x66b9bb34de94abb3ULL, 0x9baaf18d92171380ULL, + 0x543c11c5f0a064a5ULL, 0x17a1b1bdbed431f1ULL, + 0xb5f58eeaf3a2717fULL, 0xc355f6c849858740ULL, + 0xec5df044694ef17eULL, 0xd83751f5dc6346d4ULL, + 0xfc4433520dfdacf2ULL, 0x0000000000000000ULL, + 0x5a51f58e596ebc5fULL, 0x3285aaf12e34cf16ULL, + 0x8d5c39db6dbd36b0ULL, 0x12b731dde64f7513ULL, + 0x94906c2d7aa7dfbbULL, 0x302b583aacc8e789ULL, + 0x9d45facd090e6b3cULL, 0x2165e2c78905aec4ULL, + 0x68d45f7f775a7349ULL, 0x189b2c1d5664fdcaULL, + 0xe1c99f2f030215daULL, 0x6983269436246788ULL, + 0x8489af3b1e148237ULL, 0xe94b702431d5b59cULL, + 0x33d2d31a6f4adbd7ULL, 0xbfd9932a4389f9a6ULL, + 0xb0e30e8aab39359dULL, 0xd1e2c715afcaf253ULL, + 0x150f43763c28196eULL, 0xc4ed846393e2eb3dULL, + 0x03f98b20c3823c5eULL, 0xfd134ab94c83b833ULL, + 0x556b682eb1de7064ULL, 0x36c4537a37d19f35ULL, + 0x7559f30279a5ca61ULL, 0x799ae58252973a04ULL, + 0x9c12832648707ffdULL, 0x78cd9c6913e92ec5ULL, + 0x1d8dac7d0effb928ULL, 0x439da0784e745554ULL, + 0x413352b3cc887dcbULL, 0xbacf134a1b12bd44ULL, + 0x114ebafd25cd494dULL, 0x2f08068c20cb763eULL, + 0x76a07822ba27f63fULL, 0xeab2fb04f25789c2ULL, + 0xe3676de481fe3d45ULL, 0x1b62a73d95e6c194ULL, + 0x641749ff5c68832cULL, 0xa5ec4dfc97112cf3ULL, + 0xf6682e92bdd6242bULL, 0x3f11c59a44782bb2ULL, + 0x317c21d1edb6f348ULL, 0xd65ab5be75ad9e2eULL, + 0x6b2dd45fb4d84f17ULL, 0xfaab381296e4d44eULL, + 0xd0b5befeeeb4e692ULL, 0x0882ef0b32d7a046ULL, + 0x512a91a5a83b2047ULL, 0x963e9ee6f85bf724ULL, + 0x4e09cf132438b1f0ULL, 0x77f701c9fb59e2feULL, + 0x7ddb1c094b726a27ULL, 0x5f4775ee01f5f8bdULL, + 0x9186ec4d223c9b59ULL, 0xfeeac1998f01846dULL, + 0xac39db1ce4b89874ULL, 0xb75b7c21715e59e0ULL, + 0xafc0503c273aa42aULL, 0x6e3b543fec430bf5ULL, + 0x704f7362213e8e83ULL, 0x58ff0745db9294c0ULL, + 0x67eec2df9feabf72ULL, 0xa0facd9ccf8a6811ULL, + 0xb936986ad890811aULL, 0x95c715c63bd9cb7aULL, + 0xca8060283a2c33c7ULL, 0x507de84ee9453486ULL, + 0x85ded6d05f6a96f6ULL, 0x1cdad5964f81ade9ULL, + 0xd5a33e9eb62fa270ULL, 0x40642b588df6690aULL, + 0x7f75eec2c98e42b8ULL, 0x2cf18dace3494a60ULL, + 0x23cb100c0bf9865bULL, 0xeef3028febb2d9e1ULL, + 0x4425d2d394133929ULL, 0xaad6d05c7fa1e0c8ULL, + 0xad6ea2f7a5c68cb5ULL, 0xc2028f2308fb9381ULL, + 0x819f2f5b468fc6d5ULL, 0xc5bafd88d29cfffcULL, + 0x47dc59f357910577ULL, 0x2b49ff07392e261dULL, + 0x57c59ae5332258fbULL, 0x73b6f842e2bcb2ddULL, + 0xcf96e04862b77725ULL, 0x4ca73dd8a6c4996fULL, + 0x015779eb417e14c1ULL, 0x37932a9176af8bf4ULL }, + /* 4 */ + { 0x190a2c9b249df23eULL, 0x2f62f8b62263e1e9ULL, + 0x7a7f754740993655ULL, 0x330b7ba4d5564d9fULL, + 0x4c17a16a46672582ULL, 0xb22f08eb7d05f5b8ULL, + 0x535f47f40bc148ccULL, 0x3aec5d27d4883037ULL, + 0x10ed0a1825438f96ULL, 0x516101f72c233d17ULL, + 0x13cc6f949fd04eaeULL, 0x739853c441474bfdULL, + 0x653793d90d3f5b1bULL, 0x5240647b96b0fc2fULL, + 0x0c84890ad27623e0ULL, 0xd7189b32703aaea3ULL, + 0x2685de3523bd9c41ULL, 0x99317c5b11bffefaULL, + 0x0d9baa854f079703ULL, 0x70b93648fbd48ac5ULL, + 0xa80441fce30bc6beULL, 0x7287704bdc36ff1eULL, + 0xb65384ed33dc1f13ULL, 0xd36417343ee34408ULL, + 0x39cd38ab6e1bf10fULL, 0x5ab861770a1f3564ULL, + 0x0ebacf09f594563bULL, 0xd04572b884708530ULL, + 0x3cae9722bdb3af47ULL, 0x4a556b6f2f5cbaf2ULL, + 0xe1704f1f76c4bd74ULL, 0x5ec4ed7144c6dfcfULL, + 0x16afc01d4c7810e6ULL, 0x283f113cd629ca7aULL, + 0xaf59a8761741ed2dULL, 0xeed5a3991e215facULL, + 0x3bf37ea849f984d4ULL, 0xe413e096a56ce33cULL, + 0x2c439d3a98f020d1ULL, 0x637559dc6404c46bULL, + 0x9e6c95d1e5f5d569ULL, 0x24bb9836045fe99aULL, + 0x44efa466dac8ecc9ULL, 0xc6eab2a5c80895d6ULL, + 0x803b50c035220cc4ULL, 0x0321658cba93c138ULL, + 0x8f9ebc465dc7ee1cULL, 0xd15a5137190131d3ULL, + 0x0fa5ec8668e5e2d8ULL, 0x91c979578d1037b1ULL, + 0x0642ca05693b9f70ULL, 0xefca80168350eb4fULL, + 0x38d21b24f36a45ecULL, 0xbeab81e1af73d658ULL, + 0x8cbfd9cae7542f24ULL, 0xfd19cc0d81f11102ULL, + 0x0ac6430fbb4dbc90ULL, 0x1d76a09d6a441895ULL, + 0x2a01573ff1cbbfa1ULL, 0xb572e161894fde2bULL, + 0x8124734fa853b827ULL, 0x614b1fdf43e6b1b0ULL, + 0x68ac395c4238cc18ULL, 0x21d837bfd7f7b7d2ULL, + 0x20c714304a860331ULL, 0x5cfaab726324aa14ULL, + 0x74c5ba4eb50d606eULL, 0xf3a3030474654739ULL, + 0x23e671bcf015c209ULL, 0x45f087e947b9582aULL, + 0xd8bd77b418df4c7bULL, 0xe06f6c90ebb50997ULL, + 0x0bd96080263c0873ULL, 0x7e03f9410e40dcfeULL, + 0xb8e94be4c6484928ULL, 0xfb5b0608e8ca8e72ULL, + 0x1a2b49179e0e3306ULL, 0x4e29e76961855059ULL, + 0x4f36c4e6fcf4e4baULL, 0x49740ee395cf7bcaULL, + 0xc2963ea386d17f7dULL, 0x90d65ad810618352ULL, + 0x12d34c1b02a1fa4dULL, 0xfa44258775bb3a91ULL, + 0x18150f14b9ec46ddULL, 0x1491861e6b9a653dULL, + 0x9a1019d7ab2c3fc2ULL, 0x3668d42d06fe13d7ULL, + 0xdcc1fbb25606a6d0ULL, 0x969490dd795a1c22ULL, + 0x3549b1a1bc6dd2efULL, 0xc94f5e23a0ed770eULL, + 0xb9f6686b5b39fdcbULL, 0xc4d4f4a6efeae00dULL, + 0xe732851a1fff2204ULL, 0x94aad6de5eb869f9ULL, + 0x3f8ff2ae07206e7fULL, 0xfe38a9813b62d03aULL, + 0xa7a1ad7a8bee2466ULL, 0x7b6056c8dde882b6ULL, + 0x302a1e286fc58ca7ULL, 0x8da0fa457a259bc7ULL, + 0xb3302b64e074415bULL, 0x5402ae7eff8b635fULL, + 0x08f8050c9cafc94bULL, 0xae468bf98a3059ceULL, + 0x88c355cca98dc58fULL, 0xb10e6d67c7963480ULL, + 0xbad70de7e1aa3cf3ULL, 0xbfb4a26e320262bbULL, + 0xcb711820870f02d5ULL, 0xce12b7a954a75c9dULL, + 0x563ce87dd8691684ULL, 0x9f73b65e7884618aULL, + 0x2b1e74b06cba0b42ULL, 0x47cec1ea605b2df1ULL, + 0x1c698312f735ac76ULL, 0x5fdbcefed9b76b2cULL, + 0x831a354c8fb1cdfcULL, 0x820516c312c0791fULL, + 0xb74ca762aeadabf0ULL, 0xfc06ef821c80a5e1ULL, + 0x5723cbf24518a267ULL, 0x9d4df05d5f661451ULL, + 0x588627742dfd40bfULL, 0xda8331b73f3d39a0ULL, + 0x17b0e392d109a405ULL, 0xf965400bcf28fba9ULL, + 0x7c3dbf4229a2a925ULL, 0x023e460327e275dbULL, + 0x6cd0b55a0ce126b3ULL, 0xe62da695828e96e7ULL, + 0x42ad6e63b3f373b9ULL, 0xe50cc319381d57dfULL, + 0xc5cbd729729b54eeULL, 0x46d1e265fd2a9912ULL, + 0x6428b056904eeff8ULL, 0x8be23040131e04b7ULL, + 0x6709d5da2add2ec0ULL, 0x075de98af44a2b93ULL, + 0x8447dcc67bfbe66fULL, 0x6616f655b7ac9a23ULL, + 0xd607b8bded4b1a40ULL, 0x0563af89d3a85e48ULL, + 0x3db1b4ad20c21ba4ULL, 0x11f22997b8323b75ULL, + 0x292032b34b587e99ULL, 0x7f1cdace9331681dULL, + 0x8e819fc9c0b65affULL, 0xa1e3677fe2d5bb16ULL, + 0xcd33d225ee349da5ULL, 0xd9a2543b85aef898ULL, + 0x795e10cbfa0af76dULL, 0x25a4bbb9992e5d79ULL, + 0x78413344677b438eULL, 0xf0826688cef68601ULL, + 0xd27b34bba392f0ebULL, 0x551d8df162fad7bcULL, + 0x1e57c511d0d7d9adULL, 0xdeffbdb171e4d30bULL, + 0xf4feea8e802f6caaULL, 0xa480c8f6317de55eULL, + 0xa0fc44f07fa40ff5ULL, 0x95b5f551c3c9dd1aULL, + 0x22f952336d6476eaULL, 0x0000000000000000ULL, + 0xa6be8ef5169f9085ULL, 0xcc2cf1aa73452946ULL, + 0x2e7ddb39bf12550aULL, 0xd526dd3157d8db78ULL, + 0x486b2d6c08becf29ULL, 0x9b0f3a58365d8b21ULL, + 0xac78cdfaadd22c15ULL, 0xbc95c7e28891a383ULL, + 0x6a927f5f65dab9c3ULL, 0xc3891d2c1ba0cb9eULL, + 0xeaa92f9f50f8b507ULL, 0xcf0d9426c9d6e87eULL, + 0xca6e3baf1a7eb636ULL, 0xab25247059980786ULL, + 0x69b31ad3df4978fbULL, 0xe2512a93cc577c4cULL, + 0xff278a0ea61364d9ULL, 0x71a615c766a53e26ULL, + 0x89dc764334fc716cULL, 0xf87a638452594f4aULL, + 0xf2bc208be914f3daULL, 0x8766b94ac1682757ULL, + 0xbbc82e687cdb8810ULL, 0x626a7a53f9757088ULL, + 0xa2c202f358467a2eULL, 0x4d0882e5db169161ULL, + 0x09e7268301de7da8ULL, 0xe897699c771ac0dcULL, + 0xc8507dac3d9cc3edULL, 0xc0a878a0a1330aa6ULL, + 0x978bb352e42ba8c1ULL, 0xe9884a13ea6b743fULL, + 0x279afdbabecc28a2ULL, 0x047c8c064ed9eaabULL, + 0x507e2278b15289f4ULL, 0x599904fbb08cf45cULL, + 0xbd8ae46d15e01760ULL, 0x31353da7f2b43844ULL, + 0x8558ff49e68a528cULL, 0x76fbfc4d92ef15b5ULL, + 0x3456922e211c660cULL, 0x86799ac55c1993b4ULL, + 0x3e90d1219a51da9cULL, 0x2d5cbeb505819432ULL, + 0x982e5fd48cce4a19ULL, 0xdb9c1238a24c8d43ULL, + 0xd439febecaa96f9bULL, 0x418c0bef0960b281ULL, + 0x158ea591f6ebd1deULL, 0x1f48e69e4da66d4eULL, + 0x8afd13cf8e6fb054ULL, 0xf5e1c9011d5ed849ULL, + 0xe34e091c5126c8afULL, 0xad67ee7530a398f6ULL, + 0x43b24dec2e82c75aULL, 0x75da99c1287cd48dULL, + 0x92e81cdb3783f689ULL, 0xa3dd217cc537cecdULL, + 0x60543c50de970553ULL, 0x93f73f54aaf2426aULL, + 0xa91b62737e7a725dULL, 0xf19d4507538732e2ULL, + 0x77e4dfc20f9ea156ULL, 0x7d229ccdb4d31dc6ULL, + 0x1b346a98037f87e5ULL, 0xedf4c615a4b29e94ULL, + 0x4093286094110662ULL, 0xb0114ee85ae78063ULL, + 0x6ff1d0d6b672e78bULL, 0x6dcf96d591909250ULL, + 0xdfe09e3eec9567e8ULL, 0x3214582b4827f97cULL, + 0xb46dc2ee143e6ac8ULL, 0xf6c0ac8da7cd1971ULL, + 0xebb60c10cd8901e4ULL, 0xf7df8f023abcad92ULL, + 0x9c52d3d2c217a0b2ULL, 0x6b8d5cd0f8ab0d20ULL, + 0x3777f7a29b8fa734ULL, 0x011f238f9d71b4e3ULL, + 0xc1b75b2f3c42be45ULL, 0x5de588fdfe551ef7ULL, + 0x6eeef3592b035368ULL, 0xaa3a07ffc4e9b365ULL, + 0xecebe59a39c32a77ULL, 0x5ba742f8976e8187ULL, + 0x4b4a48e0b22d0e11ULL, 0xddded83dcb771233ULL, + 0xa59feb79ac0c51bdULL, 0xc7f5912a55792135ULL }, + /* 5 */ + { 0x6d6ae04668a9b08aULL, 0x3ab3f04b0be8c743ULL, + 0xe51e166b54b3c908ULL, 0xbe90a9eb35c2f139ULL, + 0xb2c7066637f2bec1ULL, 0xaa6945613392202cULL, + 0x9a28c36f3b5201ebULL, 0xddce5a93ab536994ULL, + 0x0e34133ef6382827ULL, 0x52a02ba1ec55048bULL, + 0xa2f88f97c4b2a177ULL, 0x8640e513ca2251a5ULL, + 0xcdf1d36258137622ULL, 0xfe6cb708dedf8ddbULL, + 0x8a174a9ec8121e5dULL, 0x679896036b81560eULL, + 0x59ed033395795feeULL, 0x1dd778ab8b74edafULL, + 0xee533ef92d9f926dULL, 0x2a8c79baf8a8d8f5ULL, + 0x6bcf398e69b119f6ULL, 0xe20491742fafdd95ULL, + 0x276488e0809c2aecULL, 0xea955b82d88f5cceULL, + 0x7102c63a99d9e0c4ULL, 0xf9763017a5c39946ULL, + 0x429fa2501f151b3dULL, 0x4659c72bea05d59eULL, + 0x984b7fdccf5a6634ULL, 0xf742232953fbb161ULL, + 0x3041860e08c021c7ULL, 0x747bfd9616cd9386ULL, + 0x4bb1367192312787ULL, 0x1b72a1638a6c44d3ULL, + 0x4a0e68a6e8359a66ULL, 0x169a5039f258b6caULL, + 0xb98a2ef44edee5a4ULL, 0xd9083fe85e43a737ULL, + 0x967f6ce239624e13ULL, 0x8874f62d3c1a7982ULL, + 0x3c1629830af06e3fULL, 0x9165ebfd427e5a8eULL, + 0xb5dd81794ceeaa5cULL, 0x0de8f15a7834f219ULL, + 0x70bd98ede3dd5d25ULL, 0xaccc9ca9328a8950ULL, + 0x56664eda1945ca28ULL, 0x221db34c0f8859aeULL, + 0x26dbd637fa98970dULL, 0x1acdffb4f068f932ULL, + 0x4585254f64090fa0ULL, 0x72de245e17d53afaULL, + 0x1546b25d7c546cf4ULL, 0x207e0ffffb803e71ULL, + 0xfaaad2732bcf4378ULL, 0xb462dfae36ea17bdULL, + 0xcf926fd1ac1b11fdULL, 0xe0672dc7dba7ba4aULL, + 0xd3fa49ad5d6b41b3ULL, 0x8ba81449b216a3bcULL, + 0x14f9ec8a0650d115ULL, 0x40fc1ee3eb1d7ce2ULL, + 0x23a2ed9b758ce44fULL, 0x782c521b14fddc7eULL, + 0x1c68267cf170504eULL, 0xbcf31558c1ca96e6ULL, + 0xa781b43b4ba6d235ULL, 0xf6fd7dfe29ff0c80ULL, + 0xb0a4bad5c3fad91eULL, 0xd199f51ea963266cULL, + 0x414340349119c103ULL, 0x5405f269ed4dadf7ULL, + 0xabd61bb649969dcdULL, 0x6813dbeae7bdc3c8ULL, + 0x65fb2ab09f8931d1ULL, 0xf1e7fae152e3181dULL, + 0xc1a67cef5a2339daULL, 0x7a4feea8e0f5bba1ULL, + 0x1e0b9acf05783791ULL, 0x5b8ebf8061713831ULL, + 0x80e53cdbcb3af8d9ULL, 0x7e898bd315e57502ULL, + 0xc6bcfbf0213f2d47ULL, 0x95a38e86b76e942dULL, + 0x092e94218d243cbaULL, 0x8339debf453622e7ULL, + 0xb11be402b9fe64ffULL, 0x57d9100d634177c9ULL, + 0xcc4e8db52217cbc3ULL, 0x3b0cae9c71ec7aa2ULL, + 0xfb158ca451cbfe99ULL, 0x2b33276d82ac6514ULL, + 0x01bf5ed77a04bde1ULL, 0xc5601994af33f779ULL, + 0x75c4a3416cc92e67ULL, 0xf3844652a6eb7fc2ULL, + 0x3487e375fdd0ef64ULL, 0x18ae430704609eedULL, + 0x4d14efb993298efbULL, 0x815a620cb13e4538ULL, + 0x125c354207487869ULL, 0x9eeea614ce42cf48ULL, + 0xce2d3106d61fac1cULL, 0xbbe99247bad6827bULL, + 0x071a871f7b1c149dULL, 0x2e4a1cc10db81656ULL, + 0x77a71ff298c149b8ULL, 0x06a5d9c80118a97cULL, + 0xad73c27e488e34b1ULL, 0x443a7b981e0db241ULL, + 0xe3bbcfa355ab6074ULL, 0x0af276450328e684ULL, + 0x73617a896dd1871bULL, 0x58525de4ef7de20fULL, + 0xb7be3dcab8e6cd83ULL, 0x19111dd07e64230cULL, + 0x842359a03e2a367aULL, 0x103f89f1f3401fb6ULL, + 0xdc710444d157d475ULL, 0xb835702334da5845ULL, + 0x4320fc876511a6dcULL, 0xd026abc9d3679b8dULL, + 0x17250eee885c0b2bULL, 0x90dab52a387ae76fULL, + 0x31fed8d972c49c26ULL, 0x89cba8fa461ec463ULL, + 0x2ff5421677bcabb7ULL, 0x396f122f85e41d7dULL, + 0xa09b332430bac6a8ULL, 0xc888e8ced7070560ULL, + 0xaeaf201ac682ee8fULL, 0x1180d7268944a257ULL, + 0xf058a43628e7a5fcULL, 0xbd4c4b8fbbce2b07ULL, + 0xa1246df34abe7b49ULL, 0x7d5569b79be9af3cULL, + 0xa9b5a705bd9efa12ULL, 0xdb6b835baa4bc0e8ULL, + 0x05793bac8f147342ULL, 0x21c1512881848390ULL, + 0xfdb0556c50d357e5ULL, 0x613d4fcb6a99ff72ULL, + 0x03dce2648e0cda3eULL, 0xe949b9e6568386f0ULL, + 0xfc0f0bbb2ad7ea04ULL, 0x6a70675913b5a417ULL, + 0x7f36d5046fe1c8e3ULL, 0x0c57af8d02304ff8ULL, + 0x32223abdfcc84618ULL, 0x0891caf6f720815bULL, + 0xa63eeaec31a26fd4ULL, 0x2507345374944d33ULL, + 0x49d28ac266394058ULL, 0xf5219f9aa7f3d6beULL, + 0x2d96fea583b4cc68ULL, 0x5a31e1571b7585d0ULL, + 0x8ed12fe53d02d0feULL, 0xdfade6205f5b0e4bULL, + 0x4cabb16ee92d331aULL, 0x04c6657bf510cea3ULL, + 0xd73c2cd6a87b8f10ULL, 0xe1d87310a1a307abULL, + 0x6cd5be9112ad0d6bULL, 0x97c032354366f3f2ULL, + 0xd4e0ceb22677552eULL, 0x0000000000000000ULL, + 0x29509bde76a402cbULL, 0xc27a9e8bd42fe3e4ULL, + 0x5ef7842cee654b73ULL, 0xaf107ecdbc86536eULL, + 0x3fcacbe784fcb401ULL, 0xd55f90655c73e8cfULL, + 0xe6c2f40fdabf1336ULL, 0xe8f6e7312c873b11ULL, + 0xeb2a0555a28be12fULL, 0xe4a148bc2eb774e9ULL, + 0x9b979db84156bc0aULL, 0x6eb60222e6a56ab4ULL, + 0x87ffbbc4b026ec44ULL, 0xc703a5275b3b90a6ULL, + 0x47e699fc9001687fULL, 0x9c8d1aa73a4aa897ULL, + 0x7cea3760e1ed12ddULL, 0x4ec80ddd1d2554c5ULL, + 0x13e36b957d4cc588ULL, 0x5d2b66486069914dULL, + 0x92b90999cc7280b0ULL, 0x517cc9c56259deb5ULL, + 0xc937b619ad03b881ULL, 0xec30824ad997f5b2ULL, + 0xa45d565fc5aa080bULL, 0xd6837201d27f32f1ULL, + 0x635ef3789e9198adULL, 0x531f75769651b96aULL, + 0x4f77530a6721e924ULL, 0x486dd4151c3dfdb9ULL, + 0x5f48dafb9461f692ULL, 0x375b011173dc355aULL, + 0x3da9775470f4d3deULL, 0x8d0dcd81b30e0ac0ULL, + 0x36e45fc609d888bbULL, 0x55baacbe97491016ULL, + 0x8cb29356c90ab721ULL, 0x76184125e2c5f459ULL, + 0x99f4210bb55edbd5ULL, 0x6f095cf59ca1d755ULL, + 0x9f51f8c3b44672a9ULL, 0x3538bda287d45285ULL, + 0x50c39712185d6354ULL, 0xf23b1885dcefc223ULL, + 0x79930ccc6ef9619fULL, 0xed8fdc9da3934853ULL, + 0xcb540aaa590bdf5eULL, 0x5c94389f1a6d2cacULL, + 0xe77daad8a0bbaed7ULL, 0x28efc5090ca0bf2aULL, + 0xbf2ff73c4fc64cd8ULL, 0xb37858b14df60320ULL, + 0xf8c96ec0dfc724a7ULL, 0x828680683f329f06ULL, + 0x941cd051cd6a29ccULL, 0xc3c5c05cae2b5e05ULL, + 0xb601631dc2e27062ULL, 0xc01922382027843bULL, + 0x24b86a840e90f0d2ULL, 0xd245177a276ffc52ULL, + 0x0f8b4de98c3c95c6ULL, 0x3e759530fef809e0ULL, + 0x0b4d2892792c5b65ULL, 0xc4df4743d5374a98ULL, + 0xa5e20888bfaeb5eaULL, 0xba56cc90c0d23f9aULL, + 0x38d04cf8ffe0a09cULL, 0x62e1adafe495254cULL, + 0x0263bcb3f40867dfULL, 0xcaeb547d230f62bfULL, + 0x6082111c109d4293ULL, 0xdad4dd8cd04f7d09ULL, + 0xefec602e579b2f8cULL, 0x1fb4c4187f7c8a70ULL, + 0xffd3e9dfa4db303aULL, 0x7bf0b07f9af10640ULL, + 0xf49ec14dddf76b5fULL, 0x8f6e713247066d1fULL, + 0x339d646a86ccfbf9ULL, 0x64447467e58d8c30ULL, + 0x2c29a072f9b07189ULL, 0xd8b7613f24471ad6ULL, + 0x6627c8d41185ebefULL, 0xa347d140beb61c96ULL, + 0xde12b8f7255fb3aaULL, 0x9d324470404e1576ULL, + 0x9306574eb6763d51ULL, 0xa80af9d2c79a47f3ULL, + 0x859c0777442e8b9bULL, 0x69ac853d9db97e29ULL }, + /* 6 */ + { 0xc3407dfc2de6377eULL, 0x5b9e93eea4256f77ULL, + 0xadb58fdd50c845e0ULL, 0x5219ff11a75bed86ULL, + 0x356b61cfd90b1de9ULL, 0xfb8f406e25abe037ULL, + 0x7a5a0231c0f60796ULL, 0x9d3cd216e1f5020bULL, + 0x0c6550fb6b48d8f3ULL, 0xf57508c427ff1c62ULL, + 0x4ad35ffa71cb407dULL, 0x6290a2da1666aa6dULL, + 0xe284ec2349355f9fULL, 0xb3c307c53d7c84ecULL, + 0x05e23c0468365a02ULL, 0x190bac4d6c9ebfa8ULL, + 0x94bbbee9e28b80faULL, 0xa34fc777529cb9b5ULL, + 0xcc7b39f095bcd978ULL, 0x2426addb0ce532e3ULL, + 0x7e79329312ce4fc7ULL, 0xab09a72eebec2917ULL, + 0xf8d15499f6b9d6c2ULL, 0x1a55b8babf8c895dULL, + 0xdb8add17fb769a85ULL, 0xb57f2f368658e81bULL, + 0x8acd36f18f3f41f6ULL, 0x5ce3b7bba50f11d3ULL, + 0x114dcc14d5ee2f0aULL, 0xb91a7fcded1030e8ULL, + 0x81d5425fe55de7a1ULL, 0xb6213bc1554adeeeULL, + 0x80144ef95f53f5f2ULL, 0x1e7688186db4c10cULL, + 0x3b912965db5fe1bcULL, 0xc281715a97e8252dULL, + 0x54a5d7e21c7f8171ULL, 0x4b12535ccbc5522eULL, + 0x1d289cefbea6f7f9ULL, 0x6ef5f2217d2e729eULL, + 0xe6a7dc819b0d17ceULL, 0x1b94b41c05829b0eULL, + 0x33d7493c622f711eULL, 0xdcf7f942fa5ce421ULL, + 0x600fba8b7f7a8ecbULL, 0x46b60f011a83988eULL, + 0x235b898e0dcf4c47ULL, 0x957ab24f588592a9ULL, + 0x4354330572b5c28cULL, 0xa5f3ef84e9b8d542ULL, + 0x8c711e02341b2d01ULL, 0x0b1874ae6a62a657ULL, + 0x1213d8e306fc19ffULL, 0xfe6d7c6a4d9dba35ULL, + 0x65ed868f174cd4c9ULL, 0x88522ea0e6236550ULL, + 0x899322065c2d7703ULL, 0xc01e690bfef4018bULL, + 0x915982ed8abddaf8ULL, 0xbe675b98ec3a4e4cULL, + 0xa996bf7f82f00db1ULL, 0xe1daf8d49a27696aULL, + 0x2effd5d3dc8986e7ULL, 0xd153a51f2b1a2e81ULL, + 0x18caa0ebd690adfbULL, 0x390e3134b243c51aULL, + 0x2778b92cdff70416ULL, 0x029f1851691c24a6ULL, + 0x5e7cafeacc133575ULL, 0xfa4e4cc89fa5f264ULL, + 0x5a5f9f481e2b7d24ULL, 0x484c47ab18d764dbULL, + 0x400a27f2a1a7f479ULL, 0xaeeb9b2a83da7315ULL, + 0x721c626879869734ULL, 0x042330a2d2384851ULL, + 0x85f672fd3765aff0ULL, 0xba446b3a3e02061dULL, + 0x73dd6ecec3888567ULL, 0xffac70ccf793a866ULL, + 0xdfa9edb5294ed2d4ULL, 0x6c6aea7014325638ULL, + 0x834a5a0e8c41c307ULL, 0xcdba35562fb2cb2bULL, + 0x0ad97808d06cb404ULL, 0x0f3b440cb85aee06ULL, + 0xe5f9c876481f213bULL, 0x98deee1289c35809ULL, + 0x59018bbfcd394bd1ULL, 0xe01bf47220297b39ULL, + 0xde68e1139340c087ULL, 0x9fa3ca4788e926adULL, + 0xbb85679c840c144eULL, 0x53d8f3b71d55ffd5ULL, + 0x0da45c5dd146caa0ULL, 0x6f34fe87c72060cdULL, + 0x57fbc315cf6db784ULL, 0xcee421a1fca0fddeULL, + 0x3d2d0196607b8d4bULL, 0x642c8a29ad42c69aULL, + 0x14aff010bdd87508ULL, 0xac74837beac657b3ULL, + 0x3216459ad821634dULL, 0x3fb219c70967a9edULL, + 0x06bc28f3bb246cf7ULL, 0xf2082c9126d562c6ULL, + 0x66b39278c45ee23cULL, 0xbd394f6f3f2878b9ULL, + 0xfd33689d9e8f8cc0ULL, 0x37f4799eb017394fULL, + 0x108cc0b26fe03d59ULL, 0xda4bd1b1417888d6ULL, + 0xb09d1332ee6eb219ULL, 0x2f3ed975668794b4ULL, + 0x58c0871977375982ULL, 0x7561463d78ace990ULL, + 0x09876cff037e82f1ULL, 0x7fb83e35a8c05d94ULL, + 0x26b9b58a65f91645ULL, 0xef20b07e9873953fULL, + 0x3148516d0b3355b8ULL, 0x41cb2b541ba9e62aULL, + 0x790416c613e43163ULL, 0xa011d380818e8f40ULL, + 0x3a5025c36151f3efULL, 0xd57095bdf92266d0ULL, + 0x498d4b0da2d97688ULL, 0x8b0c3a57353153a5ULL, + 0x21c491df64d368e1ULL, 0x8f2f0af5e7091bf4ULL, + 0x2da1c1240f9bb012ULL, 0xc43d59a92ccc49daULL, + 0xbfa6573e56345c1fULL, 0x828b56a8364fd154ULL, + 0x9a41f643e0df7cafULL, 0xbcf843c985266aeaULL, + 0x2b1de9d7b4bfdce5ULL, 0x20059d79dedd7ab2ULL, + 0x6dabe6d6ae3c446bULL, 0x45e81bf6c991ae7bULL, + 0x6351ae7cac68b83eULL, 0xa432e32253b6c711ULL, + 0xd092a9b991143cd2ULL, 0xcac711032e98b58fULL, + 0xd8d4c9e02864ac70ULL, 0xc5fc550f96c25b89ULL, + 0xd7ef8dec903e4276ULL, 0x67729ede7e50f06fULL, + 0xeac28c7af045cf3dULL, 0xb15c1f945460a04aULL, + 0x9cfddeb05bfb1058ULL, 0x93c69abce3a1fe5eULL, + 0xeb0380dc4a4bdd6eULL, 0xd20db1e8f8081874ULL, + 0x229a8528b7c15e14ULL, 0x44291750739fbc28ULL, + 0xd3ccbd4e42060a27ULL, 0xf62b1c33f4ed2a97ULL, + 0x86a8660ae4779905ULL, 0xd62e814a2a305025ULL, + 0x477703a7a08d8addULL, 0x7b9b0e977af815c5ULL, + 0x78c51a60a9ea2330ULL, 0xa6adfb733aaae3b7ULL, + 0x97e5aa1e3199b60fULL, 0x0000000000000000ULL, + 0xf4b404629df10e31ULL, 0x5564db44a6719322ULL, + 0x9207961a59afec0dULL, 0x9624a6b88b97a45cULL, + 0x363575380a192b1cULL, 0x2c60cd82b595a241ULL, + 0x7d272664c1dc7932ULL, 0x7142769faa94a1c1ULL, + 0xa1d0df263b809d13ULL, 0x1630e841d4c451aeULL, + 0xc1df65ad44fa13d8ULL, 0x13d2d445bcf20bacULL, + 0xd915c546926abe23ULL, 0x38cf3d92084dd749ULL, + 0xe766d0272103059dULL, 0xc7634d5effde7f2fULL, + 0x077d2455012a7ea4ULL, 0xedbfa82ff16fb199ULL, + 0xaf2a978c39d46146ULL, 0x42953fa3c8bbd0dfULL, + 0xcb061da59496a7dcULL, 0x25e7a17db6eb20b0ULL, + 0x34aa6d6963050fbaULL, 0xa76cf7d580a4f1e4ULL, + 0xf7ea10954ee338c4ULL, 0xfcf2643b24819e93ULL, + 0xcf252d0746aeef8dULL, 0x4ef06f58a3f3082cULL, + 0x563acfb37563a5d7ULL, 0x5086e740ce47c920ULL, + 0x2982f186dda3f843ULL, 0x87696aac5e798b56ULL, + 0x5d22bb1d1f010380ULL, 0x035e14f7d31236f5ULL, + 0x3cec0d30da759f18ULL, 0xf3c920379cdb7095ULL, + 0xb8db736b571e22bbULL, 0xdd36f5e44052f672ULL, + 0xaac8ab8851e23b44ULL, 0xa857b3d938fe1fe2ULL, + 0x17f1e4e76eca43fdULL, 0xec7ea4894b61a3caULL, + 0x9e62c6e132e734feULL, 0xd4b1991b432c7483ULL, + 0x6ad6c283af163acfULL, 0x1ce9904904a8e5aaULL, + 0x5fbda34c761d2726ULL, 0xf910583f4cb7c491ULL, + 0xc6a241f845d06d7cULL, 0x4f3163fe19fd1a7fULL, + 0xe99c988d2357f9c8ULL, 0x8eee06535d0709a7ULL, + 0x0efa48aa0254fc55ULL, 0xb4be23903c56fa48ULL, + 0x763f52caabbedf65ULL, 0xeee1bcd8227d876cULL, + 0xe345e085f33b4dccULL, 0x3e731561b369bbbeULL, + 0x2843fd2067adea10ULL, 0x2adce5710eb1ceb6ULL, + 0xb7e03767ef44ccbdULL, 0x8db012a48e153f52ULL, + 0x61ceb62dc5749c98ULL, 0xe85d942b9959eb9bULL, + 0x4c6f7709caef2c8aULL, 0x84377e5b8d6bbda3ULL, + 0x30895dcbb13d47ebULL, 0x74a04a9bc2a2fbc3ULL, + 0x6b17ce251518289cULL, 0xe438c4d0f2113368ULL, + 0x1fb784bed7bad35fULL, 0x9b80fae55ad16efcULL, + 0x77fe5e6c11b0cd36ULL, 0xc858095247849129ULL, + 0x08466059b97090a2ULL, 0x01c10ca6ba0e1253ULL, + 0x6988d6747c040c3aULL, 0x6849dad2c60a1e69ULL, + 0x5147ebe67449db73ULL, 0xc99905f4fd8a837aULL, + 0x991fe2b433cd4a5aULL, 0xf09734c04fc94660ULL, + 0xa28ecbd1e892abe6ULL, 0xf1563866f5c75433ULL, + 0x4dae7baf70e13ed9ULL, 0x7ce62ac27bd26b61ULL, + 0x70837a39109ab392ULL, 0x90988e4b30b3c8abULL, + 0xb2020b63877296bfULL, 0x156efcb607d6675bULL }, + /* 7 */ + { 0xe63f55ce97c331d0ULL, 0x25b506b0015bba16ULL, + 0xc8706e29e6ad9ba8ULL, 0x5b43d3775d521f6aULL, + 0x0bfa3d577035106eULL, 0xab95fc172afb0e66ULL, + 0xf64b63979e7a3276ULL, 0xf58b4562649dad4bULL, + 0x48f7c3dbae0c83f1ULL, 0xff31916642f5c8c5ULL, + 0xcbb048dc1c4a0495ULL, 0x66b8f83cdf622989ULL, + 0x35c130e908e2b9b0ULL, 0x7c761a61f0b34fa1ULL, + 0x3601161cf205268dULL, 0x9e54ccfe2219b7d6ULL, + 0x8b7d90a538940837ULL, 0x9cd403588ea35d0bULL, + 0xbc3c6fea9ccc5b5aULL, 0xe5ff733b6d24aeedULL, + 0xceed22de0f7eb8d2ULL, 0xec8581cab1ab545eULL, + 0xb96105e88ff8e71dULL, 0x8ca03501871a5eadULL, + 0x76ccce65d6db2a2fULL, 0x5883f582a7b58057ULL, + 0x3f7be4ed2e8adc3eULL, 0x0fe7be06355cd9c9ULL, + 0xee054e6c1d11be83ULL, 0x1074365909b903a6ULL, + 0x5dde9f80b4813c10ULL, 0x4a770c7d02b6692cULL, + 0x5379c8d5d7809039ULL, 0xb4067448161ed409ULL, + 0x5f5e5026183bd6cdULL, 0xe898029bf4c29df9ULL, + 0x7fb63c940a54d09cULL, 0xc5171f897f4ba8bcULL, + 0xa6f28db7b31d3d72ULL, 0x2e4f3be7716eaa78ULL, + 0x0d6771a099e63314ULL, 0x82076254e41bf284ULL, + 0x2f0fd2b42733df98ULL, 0x5c9e76d3e2dc49f0ULL, + 0x7aeb569619606cdbULL, 0x83478b07b2468764ULL, + 0xcfadcb8d5923cd32ULL, 0x85dac7f05b95a41eULL, + 0xb5469d1b4043a1e9ULL, 0xb821ecbbd9a592fdULL, + 0x1b8e0b0e798c13c8ULL, 0x62a57b6d9a0be02eULL, + 0xfcf1b793b81257f8ULL, 0x9d94ea0bd8fe28ebULL, + 0x4cea408aeb654a56ULL, 0x23284a47e888996cULL, + 0x2d8f1d128b893545ULL, 0xf4cbac3132c0d8abULL, + 0xbd7c86b9ca912ebaULL, 0x3a268eef3dbe6079ULL, + 0xf0d62f6077a9110cULL, 0x2735c916ade150cbULL, + 0x89fd5f03942ee2eaULL, 0x1acee25d2fd16628ULL, + 0x90f39bab41181bffULL, 0x430dfe8cde39939fULL, + 0xf70b8ac4c8274796ULL, 0x1c53aeaac6024552ULL, + 0x13b410acf35e9c9bULL, 0xa532ab4249faa24fULL, + 0x2b1251e5625a163fULL, 0xd7e3e676da4841c7ULL, + 0xa7b264e4e5404892ULL, 0xda8497d643ae72d3ULL, + 0x861ae105a1723b23ULL, 0x38a6414991048aa4ULL, + 0x6578dec92585b6b4ULL, 0x0280cfa6acbaeaddULL, + 0x88bdb650c273970aULL, 0x9333bd5ebbff84c2ULL, + 0x4e6a8f2c47dfa08bULL, 0x321c954db76cef2aULL, + 0x418d312a72837942ULL, 0xb29b38bfffcdf773ULL, + 0x6c022c38f90a4c07ULL, 0x5a033a240b0f6a8aULL, + 0x1f93885f3ce5da6fULL, 0xc38a537e96988bc6ULL, + 0x39e6a81ac759ff44ULL, 0x29929e43cee0fce2ULL, + 0x40cdd87924de0ca2ULL, 0xe9d8ebc8a29fe819ULL, + 0x0c2798f3cfbb46f4ULL, 0x55e484223e53b343ULL, + 0x4650948ecd0d2fd8ULL, 0x20e86cb2126f0651ULL, + 0x6d42c56baf5739e7ULL, 0xa06fc1405ace1e08ULL, + 0x7babbfc54f3d193bULL, 0x424d17df8864e67fULL, + 0xd8045870ef14980eULL, 0xc6d7397c85ac3781ULL, + 0x21a885e1443273b1ULL, 0x67f8116f893f5c69ULL, + 0x24f5efe35706cff6ULL, 0xd56329d076f2ab1aULL, + 0x5e1eb9754e66a32dULL, 0x28d2771098bd8902ULL, + 0x8f6013f47dfdc190ULL, 0x17a993fdb637553cULL, + 0xe0a219397e1012aaULL, 0x786b9930b5da8606ULL, + 0x6e82e39e55b0a6daULL, 0x875a0856f72f4ec3ULL, + 0x3741ff4fa458536dULL, 0xac4859b3957558fcULL, + 0x7ef6d5c75c09a57cULL, 0xc04a758b6c7f14fbULL, + 0xf9acdd91ab26ebbfULL, 0x7391a467c5ef9668ULL, + 0x335c7c1ee1319acaULL, 0xa91533b18641e4bbULL, + 0xe4bf9a683b79db0dULL, 0x8e20faa72ba0b470ULL, + 0x51f907737b3a7ae4ULL, 0x2268a314bed5ec8cULL, + 0xd944b123b949edeeULL, 0x31dcb3b84d8b7017ULL, + 0xd3fe65279f218860ULL, 0x097af2f1dc8ffab3ULL, + 0x9b09a6fc312d0b91ULL, 0xcc6ded78a3c4520fULL, + 0x3481d9ba5ebfcc50ULL, 0x4f2a667f1182d56bULL, + 0xdfd9fdd4509ace94ULL, 0x26752045fbbc252bULL, + 0xbffc491f662bc467ULL, 0xdd593272fc202449ULL, + 0x3cbbc218d46d4303ULL, 0x91b372f817456e1fULL, + 0x681faf69bc6385a0ULL, 0xb686bbeebaa43ed4ULL, + 0x1469b5084cd0ca01ULL, 0x98c98009cbca94acULL, + 0x6438379a73d8c354ULL, 0xc2caba2dc0c5fe26ULL, + 0x3e3b0dbe78d7a9deULL, 0x50b9ee202d670f04ULL, + 0x4590b27b37eab0e5ULL, 0x6025b4cb36b10af3ULL, + 0xfb2c1237079c0162ULL, 0xa12f28130c936be8ULL, + 0x4b37e52e54eb1cccULL, 0x083a1ba28ad28f53ULL, + 0xc10a9cd83a22611bULL, 0x9f1425ad7444c236ULL, + 0x069d4cf7e9d3237aULL, 0xedc56899e7f621beULL, + 0x778c273680865fcfULL, 0x309c5aeb1bd605f7ULL, + 0x8de0dc52d1472b4dULL, 0xf8ec34c2fd7b9e5fULL, + 0xea18cd3d58787724ULL, 0xaad515447ca67b86ULL, + 0x9989695a9d97e14cULL, 0x0000000000000000ULL, + 0xf196c63321f464ecULL, 0x71116bc169557cb5ULL, + 0xaf887f466f92c7c1ULL, 0x972e3e0ffe964d65ULL, + 0x190ec4a8d536f915ULL, 0x95aef1a9522ca7b8ULL, + 0xdc19db21aa7d51a9ULL, 0x94ee18fa0471d258ULL, + 0x8087adf248a11859ULL, 0xc457f6da2916dd5cULL, + 0xfa6cfb6451c17482ULL, 0xf256e0c6db13fbd1ULL, + 0x6a9f60cf10d96f7dULL, 0x4daaa9d9bd383fb6ULL, + 0x03c026f5fae79f3dULL, 0xde99148706c7bb74ULL, + 0x2a52b8b6340763dfULL, 0x6fc20acd03edd33aULL, + 0xd423c08320afdefaULL, 0xbbe1ca4e23420dc0ULL, + 0x966ed75ca8cb3885ULL, 0xeb58246e0e2502c4ULL, + 0x055d6a021334bc47ULL, 0xa47242111fa7d7afULL, + 0xe3623fcc84f78d97ULL, 0x81c744a11efc6db9ULL, + 0xaec8961539cfb221ULL, 0xf31609958d4e8e31ULL, + 0x63e5923ecc5695ceULL, 0x47107ddd9b505a38ULL, + 0xa3afe7b5a0298135ULL, 0x792b7063e387f3e6ULL, + 0x0140e953565d75e0ULL, 0x12f4f9ffa503e97bULL, + 0x750ce8902c3cb512ULL, 0xdbc47e8515f30733ULL, + 0x1ed3610c6ab8af8fULL, 0x5239218681dde5d9ULL, + 0xe222d69fd2aaf877ULL, 0xfe71783514a8bd25ULL, + 0xcaf0a18f4a177175ULL, 0x61655d9860ec7f13ULL, + 0xe77fbc9dc19e4430ULL, 0x2ccff441ddd440a5ULL, + 0x16e97aaee06a20dcULL, 0xa855dae2d01c915bULL, + 0x1d1347f9905f30b2ULL, 0xb7c652bdecf94b34ULL, + 0xd03e43d265c6175dULL, 0xfdb15ec0ee4f2218ULL, + 0x57644b8492e9599eULL, 0x07dda5a4bf8e569aULL, + 0x54a46d71680ec6a3ULL, 0x5624a2d7c4b42c7eULL, + 0xbebca04c3076b187ULL, 0x7d36f332a6ee3a41ULL, + 0x3b6667bc6be31599ULL, 0x695f463aea3ef040ULL, + 0xad08b0e0c3282d1cULL, 0xb15b1e4a052a684eULL, + 0x44d05b2861b7c505ULL, 0x15295c5b1a8dbfe1ULL, + 0x744c01c37a61c0f2ULL, 0x59c31cd1f1e8f5b7ULL, + 0xef45a73f4b4ccb63ULL, 0x6bdf899c46841a9dULL, + 0x3dfb2b4b823036e3ULL, 0xa2ef0ee6f674f4d5ULL, + 0x184e2dfb836b8cf5ULL, 0x1134df0a5fe47646ULL, + 0xbaa1231d751f7820ULL, 0xd17eaa81339b62bdULL, + 0xb01bf71953771daeULL, 0x849a2ea30dc8d1feULL, + 0x705182923f080955ULL, 0x0ea757556301ac29ULL, + 0x041d83514569c9a7ULL, 0x0abad4042668658eULL, + 0x49b72a88f851f611ULL, 0x8a3d79f66ec97dd7ULL, + 0xcd2d042bf59927efULL, 0xc930877ab0f0ee48ULL, + 0x9273540deda2f122ULL, 0xc797d02fd3f14261ULL, + 0xe1e2f06a284d674aULL, 0xd2be8c74c97cfd80ULL, + 0x9a494faf67707e71ULL, 0xb3dbd1eca9908293ULL, + 0x72d14d3493b2e388ULL, 0xd6a30f258c153427ULL }, +}; + +static const uint64_t C16[12][8] = +{ + { 0xdd806559f2a64507ULL, 0x05767436cc744d23ULL, + 0xa2422a08a460d315ULL, 0x4b7ce09192676901ULL, + 0x714eb88d7585c4fcULL, 0x2f6a76432e45d016ULL, + 0xebcb2f81c0657c1fULL, 0xb1085bda1ecadae9ULL }, + { 0xe679047021b19bb7ULL, 0x55dda21bd7cbcd56ULL, + 0x5cb561c2db0aa7caULL, 0x9ab5176b12d69958ULL, + 0x61d55e0f16b50131ULL, 0xf3feea720a232b98ULL, + 0x4fe39d460f70b5d7ULL, 0x6fa3b58aa99d2f1aULL }, + { 0x991e96f50aba0ab2ULL, 0xc2b6f443867adb31ULL, + 0xc1c93a376062db09ULL, 0xd3e20fe490359eb1ULL, + 0xf2ea7514b1297b7bULL, 0x06f15e5f529c1f8bULL, + 0x0a39fc286a3d8435ULL, 0xf574dcac2bce2fc7ULL }, + { 0x220cbebc84e3d12eULL, 0x3453eaa193e837f1ULL, + 0xd8b71333935203beULL, 0xa9d72c82ed03d675ULL, + 0x9d721cad685e353fULL, 0x488e857e335c3c7dULL, + 0xf948e1a05d71e4ddULL, 0xef1fdfb3e81566d2ULL }, + { 0x601758fd7c6cfe57ULL, 0x7a56a27ea9ea63f5ULL, + 0xdfff00b723271a16ULL, 0xbfcd1747253af5a3ULL, + 0x359e35d7800fffbdULL, 0x7f151c1f1686104aULL, + 0x9a3f410c6ca92363ULL, 0x4bea6bacad474799ULL }, + { 0xfa68407a46647d6eULL, 0xbf71c57236904f35ULL, + 0x0af21f66c2bec6b6ULL, 0xcffaa6b71c9ab7b4ULL, + 0x187f9ab49af08ec6ULL, 0x2d66c4f95142a46cULL, + 0x6fa4c33b7a3039c0ULL, 0xae4faeae1d3ad3d9ULL }, + { 0x8886564d3a14d493ULL, 0x3517454ca23c4af3ULL, + 0x06476983284a0504ULL, 0x0992abc52d822c37ULL, + 0xd3473e33197a93c9ULL, 0x399ec6c7e6bf87c9ULL, + 0x51ac86febf240954ULL, 0xf4c70e16eeaac5ecULL }, + { 0xa47f0dd4bf02e71eULL, 0x36acc2355951a8d9ULL, + 0x69d18d2bd1a5c42fULL, 0xf4892bcb929b0690ULL, + 0x89b4443b4ddbc49aULL, 0x4eb7f8719c36de1eULL, + 0x03e7aa020c6e4141ULL, 0x9b1f5b424d93c9a7ULL }, + { 0x7261445183235adbULL, 0x0e38dc92cb1f2a60ULL, + 0x7b2b8a9aa6079c54ULL, 0x800a440bdbb2ceb1ULL, + 0x3cd955b7e00d0984ULL, 0x3a7d3a1b25894224ULL, + 0x944c9ad8ec165fdeULL, 0x378f5a541631229bULL }, + { 0x74b4c7fb98459cedULL, 0x3698fad1153bb6c3ULL, + 0x7a1e6c303b7652f4ULL, 0x9fe76702af69334bULL, + 0x1fffe18a1b336103ULL, 0x8941e71cff8a78dbULL, + 0x382ae548b2e4f3f3ULL, 0xabbedea680056f52ULL }, + { 0x6bcaa4cd81f32d1bULL, 0xdea2594ac06fd85dULL, + 0xefbacd1d7d476e98ULL, 0x8a1d71efea48b9caULL, + 0x2001802114846679ULL, 0xd8fa6bbbebab0761ULL, + 0x3002c6cd635afe94ULL, 0x7bcd9ed0efc889fbULL }, + { 0x48bc924af11bd720ULL, 0xfaf417d5d9b21b99ULL, + 0xe71da4aa88e12852ULL, 0x5d80ef9d1891cc86ULL, + 0xf82012d430219f9bULL, 0xcda43c32bcdf1d77ULL, + 0xd21380b00449b17aULL, 0x378ee767f11631baULL }, +}; + +#define strido(out, temp, i) do { \ + uint64_t t; \ + t = streebog_table[0][(temp[0] >> (i * 8)) & 0xff]; \ + t ^= streebog_table[1][(temp[1] >> (i * 8)) & 0xff]; \ + t ^= streebog_table[2][(temp[2] >> (i * 8)) & 0xff]; \ + t ^= streebog_table[3][(temp[3] >> (i * 8)) & 0xff]; \ + t ^= streebog_table[4][(temp[4] >> (i * 8)) & 0xff]; \ + t ^= streebog_table[5][(temp[5] >> (i * 8)) & 0xff]; \ + t ^= streebog_table[6][(temp[6] >> (i * 8)) & 0xff]; \ + t ^= streebog_table[7][(temp[7] >> (i * 8)) & 0xff]; \ + out[i] = t; } while(0) + +static void LPSX (uint64_t *out, const uint64_t *a, const uint64_t *b) +{ + uint64_t temp[8]; + temp[0] = a[0] ^ b[0]; + temp[1] = a[1] ^ b[1]; + temp[2] = a[2] ^ b[2]; + temp[3] = a[3] ^ b[3]; + temp[4] = a[4] ^ b[4]; + temp[5] = a[5] ^ b[5]; + temp[6] = a[6] ^ b[6]; + temp[7] = a[7] ^ b[7]; + strido (out, temp, 0); + strido (out, temp, 1); + strido (out, temp, 2); + strido (out, temp, 3); + strido (out, temp, 4); + strido (out, temp, 5); + strido (out, temp, 6); + strido (out, temp, 7); +} + +static inline void g (uint64_t *h, uint64_t *m, uint64_t *N) +{ + uint64_t K[8]; + uint64_t T[8]; + int i; + + LPSX (K, h, N); + + LPSX (T, K, m); + LPSX (K, K, C16[0]); + for (i = 1; i < 12; i++) + { + LPSX (T, K, T); + LPSX (K, K, C16[i]); + } + + h[0] ^= T[0] ^ K[0] ^ m[0]; + h[1] ^= T[1] ^ K[1] ^ m[1]; + h[2] ^= T[2] ^ K[2] ^ m[2]; + h[3] ^= T[3] ^ K[3] ^ m[3]; + h[4] ^= T[4] ^ K[4] ^ m[4]; + h[5] ^= T[5] ^ K[5] ^ m[5]; + h[6] ^= T[6] ^ K[6] ^ m[6]; + h[7] ^= T[7] ^ K[7] ^ m[7]; +} + + +static void +streebog512_compress (struct streebog512_ctx *ctx, const uint8_t *input, size_t count) +{ + uint64_t M[8]; + uint64_t l, cf; + int i; + + for (i = 0; i < 8; i++, input += 8) + M[i] = LE_READ_UINT64(input); + + g (ctx->state, M, ctx->count); + l = ctx->count[0]; + ctx->count[0] += count; + if (ctx->count[0] < l) + { /* overflow */ + for (i = 1; i < 8; i++) + { + ctx->count[i]++; + if (ctx->count[i] != 0) + break; + } + } + + cf = 0; + ctx->sigma[0] += M[0]; + for (i = 1; i < 8; i++) + { + if (ctx->sigma[i-1] != M[i-1]) + cf = (ctx->sigma[i-1] < M[i-1]); + ctx->sigma[i] += M[i] + cf; + } +} + +static void +streebog_final (struct streebog512_ctx *ctx) +{ + uint64_t Z[8] = {}; + unsigned int i; + + /* PAD. It does not count towards message length */ + i = ctx->index; + /* We have at least one byte free) */ + ctx->block[i++] = 1; + while (i < 64) + ctx->block[i++] = 0; + streebog512_compress (ctx, ctx->block, ctx->index * 8); + + g (ctx->state, ctx->count, Z); + g (ctx->state, ctx->sigma, Z); +} + +#define COMPRESS(ctx, data) (streebog512_compress((ctx), (data), 64 * 8)) + +void +streebog512_init(struct streebog512_ctx *ctx) +{ + memset(ctx->state, 0, sizeof(ctx->state)); + memset(ctx->count, 0, sizeof(ctx->count)); + memset(ctx->sigma, 0, sizeof(ctx->sigma)); + + /* Initialize buffer */ + ctx->index = 0; +} + +void +streebog512_update(struct streebog512_ctx *ctx, + size_t length, const uint8_t *data) +{ + MD_UPDATE (ctx, length, data, COMPRESS, (void)0); +} + +static void +streebog512_write_digest(struct streebog512_ctx *ctx, + size_t offset, size_t length, + uint8_t *digest) +{ + unsigned i; + unsigned words; + unsigned leftover; + + assert(offset + length <= STREEBOG512_DIGEST_SIZE); + + streebog_final(ctx); + + words = length / 8; + leftover = length % 8; + + for (i = 0; i < words; i++, digest += 8) + LE_WRITE_UINT64(digest, ctx->state[offset + i]); + + if (leftover) + { + /* Truncate to the right size */ + uint64_t word = ctx->state[offset + i] << (8*(8 - leftover)); + + do { + digest[--leftover] = (word >> 56) & 0xff; + word <<= 8; + } while (leftover); + } +} + +void +streebog512_digest(struct streebog512_ctx *ctx, + size_t length, + uint8_t *digest) +{ + assert(length <= STREEBOG512_DIGEST_SIZE); + + streebog512_write_digest(ctx, 0, length, digest); + streebog512_init(ctx); +} + +void +streebog256_init(struct streebog256_ctx *ctx) +{ + memset(ctx->state, 1, sizeof(ctx->state)); + memset(ctx->count, 0, sizeof(ctx->count)); + memset(ctx->sigma, 0, sizeof(ctx->sigma)); + + /* Initialize buffer */ + ctx->index = 0; +} + +void +streebog256_digest(struct streebog256_ctx *ctx, + size_t length, + uint8_t *digest) +{ + assert(length <= STREEBOG256_DIGEST_SIZE); + + streebog512_write_digest(ctx, + 4, + length, + digest); + streebog256_init(ctx); +} +#endif diff --git a/lib/nettle/gost/streebog.h b/lib/nettle/gost/streebog.h new file mode 100644 index 0000000000..e2348bbb41 --- /dev/null +++ b/lib/nettle/gost/streebog.h @@ -0,0 +1,109 @@ +/* streebog.h + + The Streebog family of hash functions. + + Copyright (C) 2015 Dmitry Eremin-Solenikov + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#ifndef GNUTLS_LIB_NETTLE_GOST_STREEBOG_H +#define GNUTLS_LIB_NETTLE_GOST_STREEBOG_H + +#include "config.h" + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef HAVE_NETTLE_STREEBOG512_UPDATE +/* Name mangling */ +#define streebog256_init _gnutls_streebog256_init +#define streebog256_digest _gnutls_streebog256_digest +#define streebog512_init _gnutls_streebog512_init +#define streebog512_update _gnutls_streebog512_update +#define streebog512_digest _gnutls_streebog512_digest + +/* STREEBOG512 */ + +#define STREEBOG512_DIGEST_SIZE 64 +#define STREEBOG512_BLOCK_SIZE 64 + +/* Digest is kept internally as 8 64-bit words. */ +#define _STREEBOG512_DIGEST_LENGTH 8 + +struct streebog512_ctx +{ + uint64_t state[_STREEBOG512_DIGEST_LENGTH]; /* State variables */ + uint64_t count[_STREEBOG512_DIGEST_LENGTH]; + uint64_t sigma[_STREEBOG512_DIGEST_LENGTH]; + uint8_t block[STREEBOG512_BLOCK_SIZE]; /* STREEBOG512 data buffer */ + unsigned int index; /* index into buffer */ +}; + +void +streebog512_init(struct streebog512_ctx *ctx); + +void +streebog512_update(struct streebog512_ctx *ctx, + size_t length, + const uint8_t *data); + +void +streebog512_digest(struct streebog512_ctx *ctx, + size_t length, + uint8_t *digest); + + +#define STREEBOG256_DIGEST_SIZE 32 +#define STREEBOG256_BLOCK_SIZE STREEBOG512_BLOCK_SIZE +#define streebog256_ctx streebog512_ctx + +void +streebog256_init(struct streebog256_ctx *ctx); + +#define streebog256_update _gnutls_streebog512_update + +void +streebog256_digest(struct streebog256_ctx *ctx, + size_t length, + uint8_t *digest); + +#define nettle_streebog256 _gnutls_streebog256 +#define nettle_streebog512 _gnutls_streebog512 +extern const struct nettle_hash _gnutls_streebog256; +extern const struct nettle_hash _gnutls_streebog512; +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* GNUTLS_LIB_NETTLE_GOST_STREEBOG_H */ diff --git a/lib/nettle/gost/write-le32.c b/lib/nettle/gost/write-le32.c new file mode 100644 index 0000000000..d9d0482424 --- /dev/null +++ b/lib/nettle/gost/write-le32.c @@ -0,0 +1,69 @@ +/* write-le32.c + + Copyright (C) 2001, 2011 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see http://www.gnu.org/licenses/. +*/ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "nettle-write.h" + +#include + +void +_nettle_write_le32(size_t length, uint8_t *dst, + const uint32_t *src) +{ + size_t i; + size_t words; + unsigned leftover; + + words = length / 4; + leftover = length % 4; + + for (i = 0; i < words; i++, dst += 4) + LE_WRITE_UINT32(dst, src[i]); + + if (leftover) + { + uint32_t word; + + word = src[i]; + + do + { + *dst++ = word & 0xff; + word >>= 8; + } + while (--leftover); + } +} diff --git a/lib/nettle/gost_keywrap.c b/lib/nettle/gost_keywrap.c new file mode 100644 index 0000000000..ca186702df --- /dev/null +++ b/lib/nettle/gost_keywrap.c @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2016 Dmitry Eremin-Solenikov + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#include "gnutls_int.h" +#include "gost/gost28147.h" + +static const struct gost28147_param * +_gnutls_gost_get_param(gnutls_gost_paramset_t param) +{ + if (param == GNUTLS_GOST_PARAMSET_TC26_Z) + return &gost28147_param_TC26_Z; + else if (param == GNUTLS_GOST_PARAMSET_CP_A) + return &gost28147_param_CryptoPro_A; + else if (param == GNUTLS_GOST_PARAMSET_CP_B) + return &gost28147_param_CryptoPro_B; + else if (param == GNUTLS_GOST_PARAMSET_CP_C) + return &gost28147_param_CryptoPro_C; + else if (param == GNUTLS_GOST_PARAMSET_CP_D) + return &gost28147_param_CryptoPro_D; + + gnutls_assert(); + + return NULL; +} + +int _gnutls_gost_key_wrap(gnutls_gost_paramset_t gost_params, + const gnutls_datum_t *kek, + const gnutls_datum_t *ukm, + const gnutls_datum_t *cek, + gnutls_datum_t *enc, + gnutls_datum_t *imit) +{ + const struct gost28147_param *gp; + + gp = _gnutls_gost_get_param(gost_params); + if (gp == NULL) { + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + } + + if (kek->size != GOST28147_KEY_SIZE || + cek->size != GOST28147_KEY_SIZE || + ukm->size < GOST28147_IMIT_BLOCK_SIZE) { + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + } + + enc->size = GOST28147_KEY_SIZE; + enc->data = gnutls_malloc(enc->size); + if (enc->data == NULL) { + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + + imit->size = GOST28147_IMIT_DIGEST_SIZE; + imit->data = gnutls_malloc(imit->size); + if (imit->data == NULL) { + _gnutls_free_datum(enc); + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + + gost28147_key_wrap_cryptopro(gp, kek->data, ukm->data, ukm->size, + cek->data, enc->data, imit->data); + + return 0; +} + +int _gnutls_gost_key_unwrap(gnutls_gost_paramset_t gost_params, + const gnutls_datum_t *kek, + const gnutls_datum_t *ukm, + const gnutls_datum_t *enc, + const gnutls_datum_t *imit, + gnutls_datum_t *cek) +{ + const struct gost28147_param *gp; + int ret; + + gp = _gnutls_gost_get_param(gost_params); + if (gp == NULL) { + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + } + + if (kek->size != GOST28147_KEY_SIZE || + enc->size != GOST28147_KEY_SIZE || + imit->size != GOST28147_IMIT_DIGEST_SIZE || + ukm->size < GOST28147_IMIT_BLOCK_SIZE) { + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + } + + cek->size = GOST28147_KEY_SIZE; + cek->data = gnutls_malloc(cek->size); + if (cek->data == NULL) { + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + + ret = gost28147_key_unwrap_cryptopro(gp, kek->data, + ukm->data, ukm->size, + enc->data, imit->data, + cek->data); + if (ret == 0) { + gnutls_assert(); + _gnutls_free_temp_key_datum(cek); + return GNUTLS_E_DECRYPTION_FAILED; + } + + return 0; +} diff --git a/lib/nettle/init.c b/lib/nettle/init.c index c2d488e743..895cda6d96 100644 --- a/lib/nettle/init.c +++ b/lib/nettle/init.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/nettle/int/block8.h b/lib/nettle/int/block8.h new file mode 100644 index 0000000000..a1f6efec20 --- /dev/null +++ b/lib/nettle/int/block8.h @@ -0,0 +1,61 @@ +/* nettle-types.h + + Copyright (C) 2005, 2014 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see http://www.gnu.org/licenses/. +*/ + +#ifndef GNUTLS_LIB_NETTLE_BLOCK8_H +#define GNUTLS_LIB_NETTLE_BLOCK8_H + +#include "config.h" + +#ifndef HAVE_UNION_NETTLE_BLOCK8 + +/* An aligned 16-byte block. */ +union gnutls_nettle_backport_nettle_block16 +{ + uint8_t b[16]; + unsigned long w[16 / sizeof(unsigned long)]; + uint64_t u64[2]; +}; + +union gnutls_nettle_backport_nettle_block8 +{ + uint8_t b[8]; + uint64_t u64; +}; + +#undef nettle_block16 +#undef nettle_block8 + +#define nettle_block16 gnutls_nettle_backport_nettle_block16 +#define nettle_block8 gnutls_nettle_backport_nettle_block8 + +#endif + +#endif /* GNUTLS_LIB_NETTLE_BLOCK8_H */ diff --git a/lib/nettle/int/drbg-aes-self-test.c b/lib/nettle/int/drbg-aes-self-test.c index d50ca19c3c..0ac1c1924f 100644 --- a/lib/nettle/int/drbg-aes-self-test.c +++ b/lib/nettle/int/drbg-aes-self-test.c @@ -14,7 +14,7 @@ * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, see . + * License along with this program; if not, see . */ /* This is a known-answer test for the DRBG-CTR-AES. @@ -28,8 +28,10 @@ struct self_test_st { const uint8_t entropy[DRBG_AES_SEED_SIZE]; - const char *pstring; - const uint8_t res[4][16]; + const uint8_t pstring[32]; + const uint8_t reseed[DRBG_AES_SEED_SIZE]; + const uint8_t addtl[3][32]; + const uint8_t res[64]; }; struct priv_st { @@ -40,64 +42,49 @@ struct priv_st { int drbg_aes_self_test(void) { static const struct self_test_st tv[] = { + /* + * Test vector from NIST ACVP test framework that was + * successfully validated by ACVP server. + */ { - .entropy = {0xb9, 0xca, 0x7f, 0xd6, 0xa0, 0xf5, 0xd3, 0x42, - 0x19, 0x6d, 0x84, 0x91, 0x76, 0x1c, 0x3b, 0xbe, - 0x48, 0xb2, 0x82, 0x98, 0x68, 0xc2, 0x80, 0x00, - 0x19, 0x6d, 0x84, 0x91, 0x76, 0x1c, 0x3b, 0xbe, - 0x48, 0xb2, 0x82, 0x98, 0x68, 0xc2, 0x80, 0x00, - 0x00, 0x00, 0x28, 0x18, 0x00, 0x00, 0x25, 0x00}, - .pstring = "test test test", - .res = { - {0xa4, 0xae, 0xb4, 0x51, 0xd0, 0x0d, 0x97, 0xcc, 0x46, - 0xbb, 0xc0, 0xec, 0x5c, 0xa1, 0xf0, 0x34}, - {0x68, 0xc4, 0x04, 0x63, 0x3d, 0x9e, 0x2c, 0x05, 0x18, - 0xcf, 0xde, 0x2a, 0x4c, 0x49, 0xc8, 0x2b}, - {0x60, 0x5a, 0xd6, 0x71, 0x5e, 0xb3, 0x86, 0x22, 0xd5, - 0x21, 0x7f, 0xd7, 0x1d, 0xa3, 0xff, 0xa6}, - {0xe0, 0xf8, 0x77, 0x2c, 0xcb, 0xa4, 0x52, 0xa5, 0x35, - 0xf5, 0x21, 0xb9, 0x20, 0x4e, 0xff, 0x3e}, - } - }, - { - .entropy = { - 0xb9, 0xca, 0x7f, 0xd6, 0xa0, 0xf5, 0xd3, 0x42, - 0x19, 0x6d, 0x84, 0x91, 0x76, 0x1c, 0x3b, 0xbe, - 0x48, 0xb2, 0x82, 0x98, 0x68, 0xc2, 0x80, 0x00, - 0x19, 0x6d, 0x84, 0x91, 0x76, 0x1c, 0x3b, 0xbe, - 0x48, 0xb2, 0x82, 0x98, 0x68, 0xc2, 0x80, 0x00, - 0x00, 0x00, 0x28, 0x18, 0x00, 0x00, 0x25, 0x00}, - .pstring = "tost tost test", - .res = { - {0x47, 0x2d, 0x1e, 0xa9, 0xe9, 0xed, 0x02, 0xba, 0x0b, - 0x8f, 0xc7, 0x59, 0x84, 0xe0, 0x7d, 0x6e}, - {0x4c, 0x63, 0xfd, 0xc9, 0x17, 0x1e, 0x09, 0xca, 0x62, - 0x72, 0x45, 0x4f, 0xeb, 0x5b, 0xd0, 0x02}, - {0x3e, 0x29, 0x1c, 0xde, 0xd9, 0xdd, 0x65, 0x4f, 0xfe, - 0xcd, 0x17, 0xa3, 0xa0, 0x23, 0x3b, 0xd5}, - {0x2b, 0x45, 0xd2, 0x4a, 0xf9, 0xd4, 0x91, 0xa4, 0x2e, - 0xaf, 0xe6, 0xb5, 0x40, 0xb4, 0xf5, 0xd7}, - } - }, - { - .entropy = { - 0x42, 0x9c, 0x08, 0x3d, 0x82, 0xf4, 0x8a, 0x40, - 0x66, 0xb5, 0x49, 0x27, 0xab, 0x42, 0xc7, 0xc3, - 0x0e, 0xb7, 0x61, 0x3c, 0xfe, 0xb0, 0xbe, 0x73, - 0xf7, 0x6e, 0x6d, 0x6f, 0x1d, 0xa3, 0x14, 0xfa, - 0xbb, 0x4b, 0xc1, 0x0e, 0xc5, 0xfb, 0xcd, 0x46, - 0xbe, 0x28, 0x61, 0xe7, 0x03, 0x2b, 0x37, 0x7d}, - .pstring = "one two", - .res = { - {0x6c, 0x29, 0x75, 0xdc, 0xd3, 0xaf, 0xfa, 0xf0, 0xe9, - 0xa8, 0xa4, 0xd8, 0x60, 0x62, 0xc9, 0xaa}, - {0x2b, 0xac, 0x71, 0x36, 0x42, 0xbf, 0x2a, 0xff, 0xa7, - 0xc7, 0xf6, 0x08, 0xa4, 0x3b, 0xe6, 0x00}, - {0x1d, 0x2c, 0x18, 0xbc, 0xc4, 0xbe, 0x64, 0x4b, 0x9a, - 0x6c, 0x45, 0xcb, 0x6b, 0xf2, 0xed, 0xc3}, - {0xe3, 0x41, 0x58, 0x24, 0x57, 0xa0, 0x60, 0xad, 0xb6, - 0x45, 0x8d, 0x8f, 0x32, 0x81, 0x77, 0xa9}, - } + .entropy = { 0xBE, 0x36, 0xDA, 0x22, 0xC5, 0xEE, 0xC2, 0x46, + 0x88, 0xAF, 0xD5, 0xFB, 0xC7, 0x12, 0x98, 0x58, + 0x32, 0xD0, 0x35, 0x89, 0x33, 0xF0, 0xFA, 0x2B, + 0x1B, 0x0D, 0x02, 0xE9, 0x3A, 0x28, 0x5F, 0x06, + 0x04, 0x3B, 0x97, 0x5F, 0xED, 0xD6, 0x2D, 0xC5, + 0xD9, 0x76, 0x42, 0x06, 0xEC, 0x80, 0x55, 0xFB }, + .pstring = { 0x50, 0xF9, 0x47, 0x14, 0x27, 0xF4, 0xA0, 0xAF, + 0x30, 0x08, 0x74, 0x85, 0xC7, 0x94, 0xA3, 0x5D, + 0x8F, 0x4F, 0x43, 0x52, 0x0C, 0xC0, 0x64, 0x47, + 0xF8, 0xAD, 0xC7, 0xB2, 0x6C, 0x7F, 0x26, 0x6E }, + .reseed = { 0x64, 0xDB, 0x9E, 0xC3, 0x45, 0x88, 0xED, 0x33, + 0xC8, 0x4C, 0xE2, 0x87, 0x12, 0x9C, 0xCA, 0x02, + 0x16, 0x41, 0xB5, 0x3B, 0xCB, 0x5F, 0x01, 0xAE, + 0xA0, 0x01, 0xBB, 0x16, 0x44, 0x1B, 0x99, 0x82, + 0x97, 0x84, 0x5B, 0x16, 0x58, 0xF3, 0xBD, 0xBE, + 0x9A, 0xAB, 0x9F, 0xB7, 0xB2, 0x93, 0xBE, 0xA5 }, + .addtl = { + { 0x10, 0xDD, 0xBC, 0x33, 0x29, 0x10, 0x53, 0x4C, + 0xA0, 0x10, 0x72, 0xBF, 0x4C, 0x55, 0xDD, 0x7C, + 0x08, 0x5F, 0xDF, 0x40, 0xB6, 0x03, 0xF2, 0xBC, + 0xEA, 0xAE, 0x08, 0x46, 0x61, 0x68, 0x91, 0xC9 }, + { 0x00, 0xB6, 0x84, 0xF7, 0xF3, 0x14, 0xC7, 0x80, + 0x57, 0xA4, 0x8F, 0x48, 0xE5, 0xC9, 0x7F, 0x8D, + 0x54, 0x88, 0x96, 0xDF, 0x94, 0x55, 0xB1, 0x1C, + 0xFA, 0xCF, 0xE0, 0x4D, 0xAA, 0x01, 0xFA, 0x25 }, + { 0x97, 0x02, 0xDB, 0xCB, 0x85, 0x2A, 0xAA, 0x55, + 0x96, 0xC7, 0xF8, 0xF3, 0xB3, 0x9B, 0xBC, 0xCA, + 0xB5, 0xC1, 0x7C, 0x1C, 0x0D, 0x2F, 0x5B, 0x0E, + 0x9B, 0xBA, 0xB4, 0xDD, 0x45, 0x90, 0xF2, 0x14 }, + }, + .res = { 0xfe, 0x78, 0x3c, 0x64, 0x98, 0xb8, 0x69, 0x1d, + 0xb7, 0xd4, 0xfb, 0x71, 0xdb, 0x58, 0xd2, 0xee, + 0x32, 0x63, 0xfd, 0xed, 0x78, 0xe7, 0x93, 0x13, + 0x65, 0xd7, 0xf8, 0x6b, 0x71, 0x90, 0xfc, 0xf4, + 0xa3, 0x29, 0xae, 0x0b, 0xca, 0x40, 0x23, 0x61, + 0x6c, 0xa3, 0xf8, 0xc6, 0x75, 0x15, 0x38, 0x36, + 0x11, 0x5c, 0xc0, 0x87, 0x8a, 0x9b, 0x91, 0xdb, + 0x56, 0xb9, 0x06, 0x98, 0xc5, 0x78, 0x1a, 0x3a } }, }; unsigned i, j; @@ -106,7 +93,7 @@ int drbg_aes_self_test(void) struct priv_st priv; int ret, saved; uint8_t *tmp; - unsigned char result[16]; + unsigned char result[64]; memset(&priv, 0, sizeof(priv)); priv.ctx = &test_ctx; @@ -127,38 +114,36 @@ int drbg_aes_self_test(void) } for (i = 0; i < sizeof(tv) / sizeof(tv[0]); i++) { - /* Setup the key. */ - ret = - drbg_aes_init(&test_ctx, DRBG_AES_SEED_SIZE, tv[i].entropy, - strlen(tv[i].pstring), (void *)tv[i].pstring); + /* CAVP test step 1: initialization with perso string */ + ret = drbg_aes_init(&test_ctx, + sizeof(tv[i].entropy), tv[i].entropy, + sizeof(tv[i].pstring), tv[i].pstring); if (ret == 0) goto fail; if (drbg_aes_is_seeded(&test_ctx) == 0) goto fail; - /* Get and compare the first three results. */ - for (j = 0; j < 3; j++) { - /* Compute the next value. */ - if (drbg_aes_random(&test_ctx, 16, result) == 0) - goto fail; - - /* Compare it to the known value. */ - if (memcmp(result, tv[i].res[j], 16) != 0) { - goto fail; - } - } - - ret = - drbg_aes_reseed(&test_ctx, DRBG_AES_SEED_SIZE, - tv[i].entropy, 0, NULL); + /* CAVP test step 2: reseed with addtl information */ + ret = drbg_aes_reseed(&test_ctx, + sizeof(tv[i].reseed), tv[i].reseed, + sizeof(tv[i].addtl[0]), tv[i].addtl[0]); if (ret == 0) goto fail; - if (drbg_aes_random(&test_ctx, 16, result) == 0) + /* CAVP test step 3: generate with addtl info, discard result */ + if (drbg_aes_generate(&test_ctx, sizeof(result), result, + sizeof(tv[i].addtl[1]), + tv[i].addtl[1]) == 0) + goto fail; + + /* CAVP test step 4: generate with addtl info */ + if (drbg_aes_generate(&test_ctx, sizeof(result), result, + sizeof(tv[i].addtl[2]), + tv[i].addtl[2]) == 0) goto fail; - if (memcmp(result, tv[i].res[3], 16) != 0) { + if (memcmp(result, tv[i].res, sizeof(result)) != 0) { goto fail; } diff --git a/lib/nettle/int/drbg-aes.c b/lib/nettle/int/drbg-aes.c index f8b693bcd1..af8b347a5a 100644 --- a/lib/nettle/int/drbg-aes.c +++ b/lib/nettle/int/drbg-aes.c @@ -1,6 +1,6 @@ /* drbg-aes.c */ -/* Copyright (C) 2013, 2014 Red Hat +/* Copyright (C) 2013-2018 Red Hat * * This file is part of GnuTLS. * @@ -15,9 +15,7 @@ * License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with the nettle library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02111-1301, USA. + * along with this program. If not, see */ #include @@ -28,18 +26,20 @@ #include #include #include +#include int drbg_aes_init(struct drbg_aes_ctx *ctx, unsigned entropy_size, const uint8_t * entropy, unsigned pstring_size, const uint8_t * pstring) { - uint8_t tmp[DRBG_AES_KEY_SIZE]; + uint8_t tmp[AES256_KEY_SIZE]; + assert(AES256_KEY_SIZE == DRBG_AES_KEY_SIZE); memset(ctx, 0, sizeof(*ctx)); memset(tmp, 0, sizeof(tmp)); - aes_set_encrypt_key(&ctx->key, DRBG_AES_KEY_SIZE, tmp); + aes256_set_encrypt_key(&ctx->key, tmp); return drbg_aes_reseed(ctx, entropy_size, entropy, pstring_size, pstring); @@ -56,14 +56,14 @@ drbg_aes_update(struct drbg_aes_ctx *ctx, while (len < DRBG_AES_SEED_SIZE) { INCREMENT(sizeof(ctx->v), ctx->v); - aes_encrypt(&ctx->key, AES_BLOCK_SIZE, t, ctx->v); + aes256_encrypt(&ctx->key, AES_BLOCK_SIZE, t, ctx->v); t += AES_BLOCK_SIZE; len += AES_BLOCK_SIZE; } memxor(tmp, pdata, DRBG_AES_SEED_SIZE); - aes_set_encrypt_key(&ctx->key, DRBG_AES_KEY_SIZE, tmp); + aes256_set_encrypt_key(&ctx->key, tmp); memcpy(ctx->v, &tmp[DRBG_AES_KEY_SIZE], AES_BLOCK_SIZE); @@ -143,44 +143,16 @@ int drbg_aes_generate(struct drbg_aes_ctx *ctx, unsigned length, uint8_t * dst, memset(seed, 0, DRBG_AES_SEED_SIZE); } - /* Throw the first block generated. FIPS 140-2 requirement (see - * the continuous random number generator test in 4.9.2) - */ - if (ctx->prev_block_present == 0) { - INCREMENT(sizeof(ctx->v), ctx->v); - aes_encrypt(&ctx->key, AES_BLOCK_SIZE, ctx->prev_block, ctx->v); - - ctx->prev_block_present = 1; - } - /* Perform the actual encryption */ for (left = length; left >= AES_BLOCK_SIZE; left -= AES_BLOCK_SIZE, dst += AES_BLOCK_SIZE) { - INCREMENT(sizeof(ctx->v), ctx->v); - aes_encrypt(&ctx->key, AES_BLOCK_SIZE, dst, ctx->v); - - /* if detected loop */ - if (memcmp(dst, ctx->prev_block, AES_BLOCK_SIZE) == 0) { - _gnutls_switch_lib_state(LIB_STATE_ERROR); - return gnutls_assert_val(0); - } - - memcpy(ctx->prev_block, dst, AES_BLOCK_SIZE); + aes256_encrypt(&ctx->key, AES_BLOCK_SIZE, dst, ctx->v); } if (left > 0) { /* partial fill */ - INCREMENT(sizeof(ctx->v), ctx->v); - aes_encrypt(&ctx->key, AES_BLOCK_SIZE, tmp, ctx->v); - - /* if detected loop */ - if (memcmp(tmp, ctx->prev_block, AES_BLOCK_SIZE) == 0) { - _gnutls_switch_lib_state(LIB_STATE_ERROR); - return gnutls_assert_val(0); - } - - memcpy(ctx->prev_block, tmp, AES_BLOCK_SIZE); + aes256_encrypt(&ctx->key, AES_BLOCK_SIZE, tmp, ctx->v); memcpy(dst, tmp, left); } diff --git a/lib/nettle/int/drbg-aes.h b/lib/nettle/int/drbg-aes.h index 72608defe8..ac2b85860f 100644 --- a/lib/nettle/int/drbg-aes.h +++ b/lib/nettle/int/drbg-aes.h @@ -21,8 +21,8 @@ * MA 02111-1301, USA. */ -#ifndef DRBG_AES_H_INCLUDED -#define DRBG_AES_H_INCLUDED +#ifndef GNUTLS_LIB_NETTLE_INT_DRBG_AES_H +#define GNUTLS_LIB_NETTLE_INT_DRBG_AES_H #include #include @@ -38,7 +38,7 @@ ; \ } while (0) -#define DRBG_AES_KEY_SIZE 32 +#define DRBG_AES_KEY_SIZE AES256_KEY_SIZE #define DRBG_AES_SEED_SIZE (AES_BLOCK_SIZE+DRBG_AES_KEY_SIZE) /* This is the CTR-AES-256-based random-number generator from SP800-90A. @@ -46,12 +46,10 @@ struct drbg_aes_ctx { unsigned seeded; /* The current key */ - struct aes_ctx key; + struct aes256_ctx key; uint8_t v[AES_BLOCK_SIZE]; - unsigned prev_block_present; - uint8_t prev_block[AES_BLOCK_SIZE]; unsigned reseed_counter; }; @@ -92,4 +90,4 @@ int drbg_aes_is_seeded(struct drbg_aes_ctx *ctx); int drbg_aes_self_test(void); -#endif /* DRBG_AES_H_INCLUDED */ +#endif /* GNUTLS_LIB_NETTLE_INT_DRBG_AES_H */ diff --git a/lib/nettle/int/dsa-compute-k.c b/lib/nettle/int/dsa-compute-k.c new file mode 100644 index 0000000000..17d63318c4 --- /dev/null +++ b/lib/nettle/int/dsa-compute-k.c @@ -0,0 +1,209 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GNUTLS. + * + * The GNUTLS library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include "dsa-compute-k.h" + +#include "gnutls_int.h" +#include "mem.h" +#include "mpn-base256.h" +#include + +#define BITS_TO_LIMBS(bits) (((bits) + GMP_NUMB_BITS - 1) / GMP_NUMB_BITS) + +/* The maximum size of q, choosen from the fact that we support + * 521-bit elliptic curve generator and 512-bit DSA subgroup at + * maximum. */ +#define MAX_Q_BITS 521 +#define MAX_Q_SIZE ((MAX_Q_BITS + 7) / 8) +#define MAX_Q_LIMBS BITS_TO_LIMBS(MAX_Q_BITS) + +#define MAX_HASH_BITS (MAX_HASH_SIZE * 8) +#define MAX_HASH_LIMBS BITS_TO_LIMBS(MAX_HASH_BITS) + +int +_gnutls_dsa_compute_k(mpz_t k, + const mpz_t q, + const mpz_t x, + gnutls_mac_algorithm_t mac, + const uint8_t *digest, + size_t length) +{ + uint8_t V[MAX_HASH_SIZE]; + uint8_t K[MAX_HASH_SIZE]; + uint8_t xp[MAX_Q_SIZE]; + uint8_t tp[MAX_Q_SIZE]; + mp_limb_t h[MAX(MAX_Q_LIMBS, MAX_HASH_LIMBS)]; + mp_bitcnt_t q_bits = mpz_sizeinbase (q, 2); + mp_size_t qn = mpz_size(q); + mp_bitcnt_t h_bits = length * 8; + mp_size_t hn = BITS_TO_LIMBS(h_bits); + size_t nbytes = (q_bits + 7) / 8; + const uint8_t c0 = 0x00; + const uint8_t c1 = 0x01; + mp_limb_t cy; + gnutls_hmac_hd_t hd; + int ret = 0; + + if (unlikely(q_bits > MAX_Q_BITS)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (unlikely(length > MAX_HASH_SIZE)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + /* int2octets(x) */ + mpn_get_base256(xp, nbytes, mpz_limbs_read(x), qn); + + /* bits2octets(h) */ + mpn_set_base256(h, hn, digest, length); + + if (hn < qn) + /* qlen > blen: add zero bits to the left */ + mpn_zero(&h[hn], qn - hn); + else if (h_bits > q_bits) { + /* qlen < blen: keep the leftmost qlen bits. We do this in 2 + * steps because mpn_rshift only accepts shift count in the + * range 1 to mp_bits_per_limb-1. + */ + mp_bitcnt_t shift = h_bits - q_bits; + + if (shift / GMP_NUMB_BITS > 0) { + mpn_copyi(h, &h[shift / GMP_NUMB_BITS], qn); + hn -= shift / GMP_NUMB_BITS; + } + + if (shift % GMP_NUMB_BITS > 0) + mpn_rshift(h, h, hn, shift % GMP_NUMB_BITS); + } + + cy = mpn_sub_n(h, h, mpz_limbs_read(q), qn); + /* Fall back to addmul_1, if nettle is linked with mini-gmp. */ +#ifdef mpn_cnd_add_n + mpn_cnd_add_n(cy, h, h, mpz_limbs_read(q), qn); +#else + mpn_addmul_1(h, mpz_limbs_read(q), qn, cy != 0); +#endif + mpn_get_base256(tp, nbytes, h, qn); + + /* Step b */ + memset(V, c1, length); + + /* Step c */ + memset(K, c0, length); + + /* Step d */ + ret = gnutls_hmac_init(&hd, mac, K, length); + if (ret < 0) + goto out; + ret = gnutls_hmac(hd, V, length); + if (ret < 0) + goto out; + ret = gnutls_hmac(hd, &c0, 1); + if (ret < 0) + goto out; + ret = gnutls_hmac(hd, xp, nbytes); + if (ret < 0) + goto out; + ret = gnutls_hmac(hd, tp, nbytes); + if (ret < 0) + goto out; + gnutls_hmac_deinit(hd, K); + + /* Step e */ + ret = gnutls_hmac_fast(mac, K, length, V, length, V); + if (ret < 0) + goto out; + + /* Step f */ + ret = gnutls_hmac_init(&hd, mac, K, length); + if (ret < 0) + goto out; + ret = gnutls_hmac(hd, V, length); + if (ret < 0) + goto out; + ret = gnutls_hmac(hd, &c1, 1); + if (ret < 0) + goto out; + ret = gnutls_hmac(hd, xp, nbytes); + if (ret < 0) + goto out; + ret = gnutls_hmac(hd, tp, nbytes); + if (ret < 0) + goto out; + gnutls_hmac_deinit(hd, K); + + /* Step g */ + ret = gnutls_hmac_fast(mac, K, length, V, length, V); + if (ret < 0) + goto out; + + /* Step h */ + for (;;) { + /* Step 1 */ + size_t tlen = 0; + + /* Step 2 */ + while (tlen < nbytes) { + size_t remaining = MIN(nbytes - tlen, length); + ret = gnutls_hmac_fast(mac, K, length, V, length, V); + if (ret < 0) + goto out; + memcpy (&tp[tlen], V, remaining); + tlen += remaining; + } + + /* Step 3 */ + mpn_set_base256 (h, qn, tp, tlen); + if (tlen * 8 > q_bits) + mpn_rshift (h, h, qn, tlen * 8 - q_bits); + /* Check if k is in [1,q-1] */ + if (!mpn_zero_p (h, qn) && + mpn_cmp (h, mpz_limbs_read(q), qn) < 0) { + mpn_copyi(mpz_limbs_write(k, qn), h, qn); + mpz_limbs_finish(k, qn); + break; + } + + ret = gnutls_hmac_init(&hd, mac, K, length); + if (ret < 0) + goto out; + ret = gnutls_hmac(hd, V, length); + if (ret < 0) + goto out; + ret = gnutls_hmac(hd, &c0, 1); + if (ret < 0) + goto out; + gnutls_hmac_deinit(hd, K); + + ret = gnutls_hmac_fast(mac, K, length, V, length, V); + if (ret < 0) + goto out; + } + + out: + zeroize_key(xp, sizeof(xp)); + zeroize_key(tp, sizeof(tp)); + + return ret; +} diff --git a/lib/nettle/int/dsa-compute-k.h b/lib/nettle/int/dsa-compute-k.h new file mode 100644 index 0000000000..64e90e0ca2 --- /dev/null +++ b/lib/nettle/int/dsa-compute-k.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_NETTLE_INT_DSA_COMPUTE_K_H +#define GNUTLS_LIB_NETTLE_INT_DSA_COMPUTE_K_H + +#include +#include /* includes gmp.h */ + +int +_gnutls_dsa_compute_k(mpz_t k, + const mpz_t q, + const mpz_t x, + gnutls_mac_algorithm_t mac, + const uint8_t *digest, + size_t length); + +#endif /* GNUTLS_LIB_NETTLE_INT_DSA_COMPUTE_K_H */ diff --git a/lib/nettle/int/dsa-fips.h b/lib/nettle/int/dsa-fips.h index 3d2fde4057..351e856f5d 100644 --- a/lib/nettle/int/dsa-fips.h +++ b/lib/nettle/int/dsa-fips.h @@ -21,8 +21,8 @@ * MA 02111-1301, USA. */ -#ifndef DSA_FIPS_H_INCLUDED -#define DSA_FIPS_H_INCLUDED +#ifndef GNUTLS_LIB_NETTLE_INT_DSA_FIPS_H +#define GNUTLS_LIB_NETTLE_INT_DSA_FIPS_H #include /* includes gmp.h */ #include @@ -125,4 +125,4 @@ hash (uint8_t digest[DIGEST_SIZE], unsigned length, void *data) unsigned mpz_seed_sizeinbase_256_u(mpz_t s, unsigned nominal); -#endif /* DSA_FIPS_H_INCLUDED */ +#endif /* GNUTLS_LIB_NETTLE_INT_DSA_FIPS_H */ diff --git a/lib/nettle/int/dsa-keygen-fips186.c b/lib/nettle/int/dsa-keygen-fips186.c index 0fc78d9250..69f7f8ceba 100644 --- a/lib/nettle/int/dsa-keygen-fips186.c +++ b/lib/nettle/int/dsa-keygen-fips186.c @@ -39,8 +39,7 @@ unsigned _dsa_check_qp_sizes(unsigned q_bits, unsigned p_bits, unsigned generate { switch (q_bits) { case 160: - if (_gnutls_fips_mode_enabled() != 0 && generate != 0) - return 0; + FIPS_RULE(generate != 0, 0, "DSA 160-bit generation\n"); if (p_bits != 1024) return 0; @@ -155,7 +154,7 @@ _dsa_generate_dss_pq(struct dsa_params *params, mpz_set_ui(r, 1); mpz_mul_2exp(r, r, p_bits - 1); - mpz_mod_2exp(tmp, tmp, p_bits - 1); + mpz_fdiv_r_2exp(tmp, tmp, p_bits - 1); mpz_add(tmp, tmp, r); /* Generate candidate prime p in [2^(bits-1), 2^bits] */ @@ -422,10 +421,7 @@ _dsa_generate_dss_pqg(struct dsa_params *params, if (_gnutls_fips_mode_enabled() != 0) { cert->seed_length = 2 * (q_bits / 8) + 1; - if (cert->seed_length != seed_size) { - _gnutls_debug_log("Seed length must be %d bytes (it is %d)\n", cert->seed_length, seed_size); - return 0; - } + FIPS_RULE(cert->seed_length != seed_size, 0, "unsupported DSA seed length (is %d, should be %d)\n", seed_size, cert->seed_length); } else { cert->seed_length = seed_size; } diff --git a/lib/nettle/int/ecdsa-compute-k.c b/lib/nettle/int/ecdsa-compute-k.c new file mode 100644 index 0000000000..94914ebdfa --- /dev/null +++ b/lib/nettle/int/ecdsa-compute-k.c @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GNUTLS. + * + * The GNUTLS library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include "ecdsa-compute-k.h" + +#include "dsa-compute-k.h" +#include "gnutls_int.h" + +static inline int +_gnutls_ecc_curve_to_dsa_q(mpz_t *q, gnutls_ecc_curve_t curve) +{ + switch (curve) { +#ifdef ENABLE_NON_SUITEB_CURVES + case GNUTLS_ECC_CURVE_SECP192R1: + mpz_init_set_str(*q, + "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836" + "146BC9B1B4D22831", + 16); + return 0; + case GNUTLS_ECC_CURVE_SECP224R1: + mpz_init_set_str(*q, + "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2" + "E0B8F03E13DD29455C5C2A3D", + 16); + return 0; +#endif + case GNUTLS_ECC_CURVE_SECP256R1: + mpz_init_set_str(*q, + "FFFFFFFF00000000FFFFFFFFFFFFFFFF" + "BCE6FAADA7179E84F3B9CAC2FC632551", + 16); + return 0; + case GNUTLS_ECC_CURVE_SECP384R1: + mpz_init_set_str(*q, + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFFC7634D81F4372DDF" + "581A0DB248B0A77AECEC196ACCC52973", + 16); + return 0; + case GNUTLS_ECC_CURVE_SECP521R1: + mpz_init_set_str(*q, + "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "FFA51868783BF2F966B7FCC0148F709A" + "5D03BB5C9B8899C47AEBB6FB71E91386" + "409", + 16); + return 0; + default: + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM); + } +} + +int +_gnutls_ecdsa_compute_k (mpz_t k, + gnutls_ecc_curve_t curve, + const mpz_t x, + gnutls_mac_algorithm_t mac, + const uint8_t *digest, + size_t length) +{ + mpz_t q; + int ret; + + ret = _gnutls_ecc_curve_to_dsa_q(&q, curve); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_dsa_compute_k (k, q, x, mac, digest, length); + mpz_clear(q); + return ret; +} diff --git a/lib/nettle/int/ecdsa-compute-k.h b/lib/nettle/int/ecdsa-compute-k.h new file mode 100644 index 0000000000..7ca401d6e4 --- /dev/null +++ b/lib/nettle/int/ecdsa-compute-k.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_NETTLE_INT_ECDSA_COMPUTE_K_H +#define GNUTLS_LIB_NETTLE_INT_ECDSA_COMPUTE_K_H + +#include +#include /* includes gmp.h */ + +int +_gnutls_ecdsa_compute_k (mpz_t k, + gnutls_ecc_curve_t curve, + const mpz_t x, + gnutls_mac_algorithm_t mac, + const uint8_t *digest, + size_t length); + +#endif /* GNUTLS_LIB_NETTLE_INT_ECDSA_COMPUTE_K_H */ diff --git a/lib/nettle/int/mpn-base256.c b/lib/nettle/int/mpn-base256.c new file mode 100644 index 0000000000..88dd00bd20 --- /dev/null +++ b/lib/nettle/int/mpn-base256.c @@ -0,0 +1,97 @@ +/* gmp-glue.c + + Copyright (C) 2013 Niels Möller + Copyright (C) 2013 Red Hat + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see http://www.gnu.org/licenses/. +*/ + +#if HAVE_CONFIG_H +# include "config.h" +#endif + +#include "mpn-base256.h" + +void +mpn_set_base256 (mp_limb_t *rp, mp_size_t rn, + const uint8_t *xp, size_t xn) +{ + size_t xi; + mp_limb_t out; + unsigned bits; + for (xi = xn, out = bits = 0; xi > 0 && rn > 0; ) + { + mp_limb_t in = xp[--xi]; + out |= (in << bits) & GMP_NUMB_MASK; + bits += 8; + if (bits >= GMP_NUMB_BITS) + { + *rp++ = out; + rn--; + + bits -= GMP_NUMB_BITS; + out = in >> (8 - bits); + } + } + if (rn > 0) + { + *rp++ = out; + if (--rn > 0) + mpn_zero (rp, rn); + } +} + +void +mpn_get_base256 (uint8_t *rp, size_t rn, + const mp_limb_t *xp, mp_size_t xn) +{ + unsigned bits; + mp_limb_t in; + for (bits = in = 0; xn > 0 && rn > 0; ) + { + if (bits >= 8) + { + rp[--rn] = in; + in >>= 8; + bits -= 8; + } + else + { + uint8_t old = in; + in = *xp++; + xn--; + rp[--rn] = old | (in << bits); + in >>= (8 - bits); + bits += GMP_NUMB_BITS - 8; + } + } + while (rn > 0) + { + rp[--rn] = in; + in >>= 8; + } +} diff --git a/lib/nettle/int/mpn-base256.h b/lib/nettle/int/mpn-base256.h new file mode 100644 index 0000000000..b5ca4af038 --- /dev/null +++ b/lib/nettle/int/mpn-base256.h @@ -0,0 +1,48 @@ +/* gmp-glue.h + + Copyright (C) 2013 Niels Möller + Copyright (C) 2013 Red Hat + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see http://www.gnu.org/licenses/. +*/ + +#ifndef NETTLE_GMP_GLUE_H_INCLUDED +#define NETTLE_GMP_GLUE_H_INCLUDED + +#include + +/* Like mpn_set_str, but always writes rn limbs. If input is larger, + higher bits are ignored. */ +void +mpn_set_base256 (mp_limb_t *rp, mp_size_t rn, + const uint8_t *xp, size_t xn); + +void +mpn_get_base256 (uint8_t *rp, size_t rn, + const mp_limb_t *xp, mp_size_t xn); + +#endif /* NETTLE_GMP_GLUE_H_INCLUDED */ diff --git a/lib/nettle/int/provable-prime.c b/lib/nettle/int/provable-prime.c index e4a4325dcb..585cd031e0 100644 --- a/lib/nettle/int/provable-prime.c +++ b/lib/nettle/int/provable-prime.c @@ -4,17 +4,17 @@ */ /* Copyright (C) 2013 Red Hat - * + * * The nettle library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at your * option) any later version. - * + * * The nettle library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. - * + * * You should have received a copy of the GNU Lesser General Public License * along with the nettle library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, @@ -1102,10 +1102,10 @@ static int st_provable_prime_small(mpz_t p, return 0; } -/* The Shawe-Taylor algorithm described in FIPS 186-4. - * +/* The Shawe-Taylor algorithm described in FIPS 186-4. + * * p: (output) the prime - * prime_seed_length: (output) the length of prime_seed. Initially + * prime_seed_length: (output) the length of prime_seed. Initially * must hold the maximum size of prime_seed. The size should be a * byte more than seed_length. * prime_seed: (output) the prime_seed (may be NULL) @@ -1113,7 +1113,7 @@ static int st_provable_prime_small(mpz_t p, * bits: The requested number of bits for prime * seed_length: The length of seed. It is limited by MAX_PVP_SEED_SIZE. * seed: The initial seed - * + * * Returns non zero on success. */ int @@ -1129,7 +1129,7 @@ st_provable_prime(mpz_t p, uint8_t tseed[MAX_PVP_SEED_SIZE+1]; int ret; unsigned pseed_length, iterations; - uint8_t pseed[seed_length + 2]; + uint8_t *pseed; unsigned old_counter, i; mpz_t s, tmp, r, dc0, c0, c, t, z; uint8_t *storage = NULL; @@ -1151,7 +1151,12 @@ st_provable_prime(mpz_t p, mpz_init(c0); mpz_init(dc0); - pseed_length = sizeof(pseed); + pseed_length = seed_length + 2; + + pseed = gnutls_malloc(pseed_length); + if (pseed == NULL) + goto fail; + ret = st_provable_prime(c0, &pseed_length, pseed, &gen_counter, 1+div_ceil(bits, 2), seed_length, seed, progress_ctx, progress); @@ -1191,7 +1196,7 @@ st_provable_prime(mpz_t p, mpz_set_ui(r, 1); mpz_mul_2exp(r, r, bits - 1); /* r = 2^(bits-1) */ - mpz_mod_2exp(tmp, tmp, bits - 1); + mpz_fdiv_r_2exp(tmp, tmp, bits - 1); mpz_add(tmp, tmp, r); /* tmp = x */ /* Generate candidate prime c in [2^(bits-1), 2^bits] */ @@ -1212,7 +1217,7 @@ st_provable_prime(mpz_t p, if (mpz_cmp(c, r) > 0) { /* t = 2^(bits-1)/2c0 */ - mpz_div_2exp(r, r, 1); /* r = 2^(bits-1) */ + mpz_fdiv_q_2exp(r, r, 1); /* r = 2^(bits-1) */ mpz_cdiv_q(t, r, dc0); /* c = t* 2c0 + 1 */ @@ -1302,6 +1307,7 @@ st_provable_prime(mpz_t p, mpz_clear(t); mpz_clear(tmp); mpz_clear(c); + free(pseed); free(storage); return ret; } diff --git a/lib/nettle/int/rsa-fips.h b/lib/nettle/int/rsa-fips.h index 7b1cf701d2..a2a418a788 100644 --- a/lib/nettle/int/rsa-fips.h +++ b/lib/nettle/int/rsa-fips.h @@ -21,8 +21,8 @@ * MA 02111-1301, USA. */ -#ifndef RSA_FIPS_H_INCLUDED -#define RSA_FIPS_H_INCLUDED +#ifndef GNUTLS_LIB_NETTLE_INT_RSA_FIPS_H +#define GNUTLS_LIB_NETTLE_INT_RSA_FIPS_H #include @@ -46,4 +46,4 @@ rsa_generate_fips186_4_keypair(struct rsa_public_key *pub, /* Desired size of modulo, in bits */ unsigned n_size); -#endif +#endif /* GNUTLS_LIB_NETTLE_INT_RSA_FIPS_H */ diff --git a/lib/nettle/int/rsa-keygen-fips186.c b/lib/nettle/int/rsa-keygen-fips186.c index 506f758dd1..438101ef1d 100644 --- a/lib/nettle/int/rsa-keygen-fips186.c +++ b/lib/nettle/int/rsa-keygen-fips186.c @@ -267,22 +267,9 @@ _rsa_generate_fips186_4_keypair(struct rsa_public_key *pub, struct dss_params_validation_seeds cert; unsigned l = n_size / 2; - if (_gnutls_fips_mode_enabled() != 0) { - if (n_size == 2048) { - if (seed_length != 14 * 2) { - _gnutls_debug_log("Seed length must be 28 bytes (it is %d)\n", seed_length); - return 0; - } - } else if (n_size == 3072) { - if (seed_length != 16 * 2) { - _gnutls_debug_log("Seed length must be 32 bytes (it is %d)\n", seed_length); - return 0; - } - } else { - _gnutls_debug_log("Unsupported size for modulus\n"); - return 0; - } - } + FIPS_RULE(n_size == 2048 && seed_length != 14 * 2, 0, "seed length other than 28 bytes\n"); + FIPS_RULE(n_size == 3072 && seed_length != 16 * 2, 0, "seed length other than 32 bytes\n"); + FIPS_RULE(n_size != 2048 && n_size != 3072, 0, "unsupported size for modulus\n"); if (!mpz_tstbit(pub->e, 0)) { _gnutls_debug_log("Unacceptable e (it is even)\n"); @@ -371,7 +358,7 @@ _rsa_generate_fips186_4_keypair(struct rsa_public_key *pub, goto cleanup; } - /* Done! Almost, we must compute the auxillary private values. */ + /* Done! Almost, we must compute the auxiliary private values. */ /* a = d % (p-1) */ mpz_fdiv_r(key->a, key->d, p1); @@ -420,12 +407,7 @@ rsa_generate_fips186_4_keypair(struct rsa_public_key *pub, unsigned seed_length; int ret; - if (_gnutls_fips_mode_enabled() != 0) { - if (n_size != 2048 && n_size != 3072) { - _gnutls_debug_log("The size of a prime can only be 2048 or 3072\n"); - return 0; - } - } + FIPS_RULE(n_size != 2048 && n_size != 3072, 0, "size of prime of other than 2048 or 3072\n"); seed_length = SEED_LENGTH(n_size); if (seed_length > sizeof(seed)) diff --git a/lib/nettle/int/tls1-prf.c b/lib/nettle/int/tls1-prf.c new file mode 100644 index 0000000000..6763d76cc9 --- /dev/null +++ b/lib/nettle/int/tls1-prf.c @@ -0,0 +1,169 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* Functions for the TLS PRF handling. + */ + +#if HAVE_CONFIG_H +# include +#endif + +#include + +#include +#include + +#include +#include +#include "int/tls1-prf.h" +#include +#include + + +/* The RFC2246 P_hash() function. The mac_ctx is expected to + * be initialized and key set to be the secret key. + */ +static void +P_hash( void *mac_ctx, + nettle_hash_update_func *update, + nettle_hash_digest_func *digest, + size_t digest_size, + size_t seed_size, const uint8_t *seed, + size_t dst_length, + uint8_t *dst) +{ + uint8_t Atmp[MAX_HASH_SIZE]; + ssize_t left; + unsigned started = 0; + + /* round up */ + left = dst_length; + + while(left > 0) { + if (started == 0) { /* A(0) */ + update(mac_ctx, seed_size, seed); + started = 1; + } else { + update(mac_ctx, digest_size, Atmp); + } + digest(mac_ctx, digest_size, Atmp); /* store A(i) */ + + update(mac_ctx, digest_size, Atmp); /* hash A(i) */ + update(mac_ctx, seed_size, seed); /* hash seed */ + + if (left < (ssize_t)digest_size) + digest_size = left; + + digest(mac_ctx, digest_size, dst); + + left -= digest_size; + dst += digest_size; + } + + return; +} + +int +tls10_prf(size_t secret_size, const uint8_t *secret, + size_t label_size, const char *label, + size_t seed_size, const uint8_t *seed, + size_t length, uint8_t *dst) +{ + int l_s, cseed_size = seed_size + label_size; + const uint8_t *s1, *s2; + struct hmac_md5_ctx md5_ctx; + struct hmac_sha1_ctx sha1_ctx; + uint8_t o1[MAX_PRF_BYTES]; + uint8_t cseed[MAX_SEED_SIZE]; + + if (cseed_size > MAX_SEED_SIZE || length > MAX_PRF_BYTES) + return 0; + + memcpy(cseed, label, label_size); + memcpy(&cseed[label_size], seed, seed_size); + + l_s = secret_size / 2; + s1 = &secret[0]; + s2 = &secret[l_s]; + if (secret_size % 2 != 0) { + l_s++; + } + + hmac_md5_set_key(&md5_ctx, l_s, s1); + + P_hash(&md5_ctx, (nettle_hash_update_func*)hmac_md5_update, + (nettle_hash_digest_func*)hmac_md5_digest, + MD5_DIGEST_SIZE, + cseed_size, cseed, length, o1); + + hmac_sha1_set_key(&sha1_ctx, l_s, s2); + + P_hash(&sha1_ctx, (nettle_hash_update_func*)hmac_sha1_update, + (nettle_hash_digest_func*)hmac_sha1_digest, + SHA1_DIGEST_SIZE, + cseed_size, cseed, length, dst); + + memxor(dst, o1, length); + + return 1; +} + +/*- + * tls12_prf: + * @mac_ctx: a MAC context initialized with key being the secret + * @update: a MAC update function + * @digest: a MAC digest function + * @digest_size: the MAC output size + * @label_size: the size of the label + * @label: the label to apply + * @seed_size: the seed size + * @seed: the seed + * @length: size of desired PRF output + * @dst: the location to store output + * + * The TLS 1.2 Pseudo-Random-Function (PRF). + * + * Returns: zero on failure, non zero on success. + -*/ +int +tls12_prf(void *mac_ctx, + nettle_hash_update_func *update, + nettle_hash_digest_func *digest, + size_t digest_size, + size_t label_size, const char *label, + size_t seed_size, const uint8_t *seed, + size_t length, uint8_t *dst) +{ + size_t cseed_size = seed_size + label_size; + uint8_t cseed[MAX_SEED_SIZE]; + + if (cseed_size > MAX_SEED_SIZE) + return 0; + + memcpy(cseed, label, label_size); + memcpy(&cseed[label_size], seed, seed_size); + + P_hash(mac_ctx, update, digest, digest_size, + cseed_size, cseed, length, dst); + + return 1; +} diff --git a/lib/nettle/int/tls1-prf.h b/lib/nettle/int/tls1-prf.h new file mode 100644 index 0000000000..f5d9c82702 --- /dev/null +++ b/lib/nettle/int/tls1-prf.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_NETTLE_INT_TLS1_PRF_H +#define GNUTLS_LIB_NETTLE_INT_TLS1_PRF_H + +#include + +#define MAX_SEED_SIZE 200 +#define MAX_PRF_BYTES 200 + +/* Namespace mangling */ +#define tls10_prf nettle_tls10_prf +#define tls12_prf nettle_tls12_prf + +int +tls10_prf(size_t secret_size, const uint8_t *secret, + size_t label_size, const char *label, + size_t seed_size, const uint8_t *seed, + size_t length, uint8_t *dst); + +int +tls12_prf(void *mac_ctx, + nettle_hash_update_func *update, + nettle_hash_digest_func *digest, + size_t digest_size, + size_t label_size, const char *label, + size_t seed_size, const uint8_t *seed, + size_t length, uint8_t *dst); + +#endif /* GNUTLS_LIB_NETTLE_INT_TLS1_PRF_H */ diff --git a/lib/nettle/mac.c b/lib/nettle/mac.c index e63ff6110b..4e14a9475b 100644 --- a/lib/nettle/mac.c +++ b/lib/nettle/mac.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -32,7 +32,26 @@ #include #include #include -#include +#include +#include +#if ENABLE_GOST +#include "gost/hmac-gost.h" +#ifndef HAVE_NETTLE_GOSTHASH94CP_UPDATE +#include "gost/gosthash94.h" +#endif +#ifndef HAVE_NETTLE_STREEBOG512_UPDATE +#include "gost/streebog.h" +#endif +#ifndef HAVE_NETTLE_GOST28147_SET_KEY +#include "gost/gost28147.h" +#endif +#endif +#ifdef HAVE_NETTLE_CMAC128_UPDATE +#include +#else +#include "cmac.h" +#endif /* HAVE_NETTLE_CMAC128_UPDATE */ +#include typedef void (*update_func) (void *, size_t, const uint8_t *); typedef void (*digest_func) (void *, size_t, uint8_t *); @@ -47,6 +66,19 @@ struct md5_sha1_ctx { struct sha1_ctx sha1; }; +struct gmac_ctx { + unsigned int pos; + uint8_t buffer[GCM_BLOCK_SIZE]; + struct gcm_key key; + struct gcm_ctx ctx; + nettle_cipher_func *encrypt; + union { + struct aes128_ctx aes128; + struct aes192_ctx aes192; + struct aes256_ctx aes256; + } cipher; +}; + struct nettle_hash_ctx { union { struct md5_ctx md5; @@ -61,6 +93,11 @@ struct nettle_hash_ctx { struct sha1_ctx sha1; struct md2_ctx md2; struct md5_sha1_ctx md5_sha1; +#if ENABLE_GOST + struct gosthash94cp_ctx gosthash94cp; + struct streebog256_ctx streebog256; + struct streebog512_ctx streebog512; +#endif } ctx; void *ctx_ptr; gnutls_digest_algorithm_t algo; @@ -77,8 +114,17 @@ struct nettle_mac_ctx { struct hmac_sha384_ctx sha384; struct hmac_sha512_ctx sha512; struct hmac_sha1_ctx sha1; +#if ENABLE_GOST + struct hmac_gosthash94cp_ctx gosthash94cp; + struct hmac_streebog256_ctx streebog256; + struct hmac_streebog512_ctx streebog512; + struct gost28147_imit_ctx gost28147_imit; +#endif struct umac96_ctx umac96; struct umac128_ctx umac128; + struct cmac_aes128_ctx cmac128; + struct cmac_aes256_ctx cmac256; + struct gmac_ctx gmac; } ctx; void *ctx_ptr; @@ -90,6 +136,15 @@ struct nettle_mac_ctx { set_nonce_func set_nonce; }; +#if ENABLE_GOST +static void +_wrap_gost28147_imit_set_key_tc26z(void *ctx, size_t len, const uint8_t * key) +{ + gost28147_imit_set_param(ctx, &gost28147_param_TC26_Z); + gost28147_imit_set_key(ctx, len, key); +} +#endif + static void _wrap_umac96_set_key(void *ctx, size_t len, const uint8_t * key) { @@ -106,9 +161,110 @@ _wrap_umac128_set_key(void *ctx, size_t len, const uint8_t * key) umac128_set_key(ctx, key); } +static void +_wrap_cmac128_set_key(void *ctx, size_t len, const uint8_t * key) +{ + if (unlikely(len != 16)) + abort(); + cmac_aes128_set_key(ctx, key); +} + +static void +_wrap_cmac256_set_key(void *ctx, size_t len, const uint8_t * key) +{ + if (unlikely(len != 32)) + abort(); + cmac_aes256_set_key(ctx, key); +} + +static void +_wrap_gmac_aes128_set_key(void *_ctx, size_t len, const uint8_t * key) +{ + struct gmac_ctx *ctx = _ctx; + + if (unlikely(len != 16)) + abort(); + aes128_set_encrypt_key(&ctx->cipher.aes128, key); + gcm_set_key(&ctx->key, &ctx->cipher, ctx->encrypt); + ctx->pos = 0; +} + +static void +_wrap_gmac_aes192_set_key(void *_ctx, size_t len, const uint8_t * key) +{ + struct gmac_ctx *ctx = _ctx; + + if (unlikely(len != 24)) + abort(); + aes192_set_encrypt_key(&ctx->cipher.aes192, key); + gcm_set_key(&ctx->key, &ctx->cipher, ctx->encrypt); + ctx->pos = 0; +} + +static void +_wrap_gmac_aes256_set_key(void *_ctx, size_t len, const uint8_t * key) +{ + struct gmac_ctx *ctx = _ctx; + + if (unlikely(len != 32)) + abort(); + aes256_set_encrypt_key(&ctx->cipher.aes256, key); + gcm_set_key(&ctx->key, &ctx->cipher, ctx->encrypt); + ctx->pos = 0; +} + +static void _wrap_gmac_set_nonce(void *_ctx, size_t nonce_length, const uint8_t *nonce) +{ + struct gmac_ctx *ctx = _ctx; + + gcm_set_iv(&ctx->ctx, &ctx->key, nonce_length, nonce); +} + +static void _wrap_gmac_update(void *_ctx, size_t length, const uint8_t *data) +{ + struct gmac_ctx *ctx = _ctx; + + if (ctx->pos + length < GCM_BLOCK_SIZE) { + memcpy(&ctx->buffer[ctx->pos], data, length); + ctx->pos += length; + return; + } + + if (ctx->pos) { + memcpy(&ctx->buffer[ctx->pos], data, GCM_BLOCK_SIZE - ctx->pos); + gcm_update(&ctx->ctx, &ctx->key, GCM_BLOCK_SIZE, ctx->buffer); + data += GCM_BLOCK_SIZE - ctx->pos; + length -= GCM_BLOCK_SIZE - ctx->pos; + } + + if (length >= GCM_BLOCK_SIZE) { + gcm_update(&ctx->ctx, &ctx->key, + length / GCM_BLOCK_SIZE * GCM_BLOCK_SIZE, + data); + data += length / GCM_BLOCK_SIZE * GCM_BLOCK_SIZE; + length %= GCM_BLOCK_SIZE; + } + + memcpy(ctx->buffer, data, length); + ctx->pos = length; +} + +static void _wrap_gmac_digest(void *_ctx, size_t length, uint8_t *digest) +{ + struct gmac_ctx *ctx = _ctx; + + if (ctx->pos) + gcm_update(&ctx->ctx, &ctx->key, ctx->pos, ctx->buffer); + gcm_digest(&ctx->ctx, &ctx->key, &ctx->cipher, ctx->encrypt, length, digest); + ctx->pos = 0; +} + static int _mac_ctx_init(gnutls_mac_algorithm_t algo, struct nettle_mac_ctx *ctx) { + /* Any FIPS140-2 related enforcement is performed on + * gnutls_hash_init() and gnutls_hmac_init() */ + ctx->set_nonce = NULL; switch (algo) { case GNUTLS_MAC_MD5: @@ -153,10 +309,37 @@ static int _mac_ctx_init(gnutls_mac_algorithm_t algo, ctx->ctx_ptr = &ctx->ctx.sha512; ctx->length = SHA512_DIGEST_SIZE; break; +#if ENABLE_GOST + case GNUTLS_MAC_GOSTR_94: + ctx->update = (update_func) hmac_gosthash94cp_update; + ctx->digest = (digest_func) hmac_gosthash94cp_digest; + ctx->set_key = (set_key_func) hmac_gosthash94cp_set_key; + ctx->ctx_ptr = &ctx->ctx.gosthash94cp; + ctx->length = GOSTHASH94CP_DIGEST_SIZE; + break; + case GNUTLS_MAC_STREEBOG_256: + ctx->update = (update_func) hmac_streebog256_update; + ctx->digest = (digest_func) hmac_streebog256_digest; + ctx->set_key = (set_key_func) hmac_streebog256_set_key; + ctx->ctx_ptr = &ctx->ctx.streebog256; + ctx->length = STREEBOG256_DIGEST_SIZE; + break; + case GNUTLS_MAC_STREEBOG_512: + ctx->update = (update_func) hmac_streebog512_update; + ctx->digest = (digest_func) hmac_streebog512_digest; + ctx->set_key = (set_key_func) hmac_streebog512_set_key; + ctx->ctx_ptr = &ctx->ctx.streebog512; + ctx->length = STREEBOG512_DIGEST_SIZE; + break; + case GNUTLS_MAC_GOST28147_TC26Z_IMIT: + ctx->update = (update_func) gost28147_imit_update; + ctx->digest = (digest_func) gost28147_imit_digest; + ctx->set_key = _wrap_gost28147_imit_set_key_tc26z; + ctx->ctx_ptr = &ctx->ctx.gost28147_imit; + ctx->length = GOST28147_IMIT_DIGEST_SIZE; + break; +#endif case GNUTLS_MAC_UMAC_96: - if (_gnutls_fips_mode_enabled() != 0) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - ctx->update = (update_func) umac96_update; ctx->digest = (digest_func) umac96_digest; ctx->set_key = _wrap_umac96_set_key; @@ -165,9 +348,6 @@ static int _mac_ctx_init(gnutls_mac_algorithm_t algo, ctx->length = 12; break; case GNUTLS_MAC_UMAC_128: - if (_gnutls_fips_mode_enabled() != 0) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - ctx->update = (update_func) umac128_update; ctx->digest = (digest_func) umac128_digest; ctx->set_key = _wrap_umac128_set_key; @@ -175,6 +355,47 @@ static int _mac_ctx_init(gnutls_mac_algorithm_t algo, ctx->ctx_ptr = &ctx->ctx.umac128; ctx->length = 16; break; + case GNUTLS_MAC_AES_CMAC_128: + ctx->update = (update_func) cmac_aes128_update; + ctx->digest = (digest_func) cmac_aes128_digest; + ctx->set_key = _wrap_cmac128_set_key; + ctx->ctx_ptr = &ctx->ctx.cmac128; + ctx->length = CMAC128_DIGEST_SIZE; + break; + case GNUTLS_MAC_AES_CMAC_256: + ctx->update = (update_func) cmac_aes256_update; + ctx->digest = (digest_func) cmac_aes256_digest; + ctx->set_key = _wrap_cmac256_set_key; + ctx->ctx_ptr = &ctx->ctx.cmac256; + ctx->length = CMAC128_DIGEST_SIZE; + break; + case GNUTLS_MAC_AES_GMAC_128: + ctx->set_key = _wrap_gmac_aes128_set_key; + ctx->set_nonce = _wrap_gmac_set_nonce; + ctx->update = _wrap_gmac_update; + ctx->digest = _wrap_gmac_digest; + ctx->ctx_ptr = &ctx->ctx.gmac; + ctx->length = GCM_DIGEST_SIZE; + ctx->ctx.gmac.encrypt = (nettle_cipher_func *)aes128_encrypt; + break; + case GNUTLS_MAC_AES_GMAC_192: + ctx->set_key = _wrap_gmac_aes192_set_key; + ctx->set_nonce = _wrap_gmac_set_nonce; + ctx->update = _wrap_gmac_update; + ctx->digest = _wrap_gmac_digest; + ctx->ctx_ptr = &ctx->ctx.gmac; + ctx->length = GCM_DIGEST_SIZE; + ctx->ctx.gmac.encrypt = (nettle_cipher_func *)aes192_encrypt; + break; + case GNUTLS_MAC_AES_GMAC_256: + ctx->set_key = _wrap_gmac_aes256_set_key; + ctx->set_nonce = _wrap_gmac_set_nonce; + ctx->update = _wrap_gmac_update; + ctx->digest = _wrap_gmac_digest; + ctx->ctx_ptr = &ctx->ctx.gmac; + ctx->length = GCM_DIGEST_SIZE; + ctx->ctx.gmac.encrypt = (nettle_cipher_func *)aes256_encrypt; + break; default: gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; @@ -196,9 +417,13 @@ static int wrap_nettle_mac_fast(gnutls_mac_algorithm_t algo, if (ret < 0) return gnutls_assert_val(ret); - if (ctx.set_nonce) - ctx.set_nonce(&ctx, nonce_size, nonce); ctx.set_key(&ctx, key_size, key); + if (ctx.set_nonce) { + if (nonce == NULL || nonce_size == 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ctx.set_nonce(&ctx, nonce_size, nonce); + } ctx.update(&ctx, text_size, text); ctx.digest(&ctx, ctx.length, digest); @@ -216,14 +441,20 @@ static int wrap_nettle_mac_exists(gnutls_mac_algorithm_t algo) case GNUTLS_MAC_SHA256: case GNUTLS_MAC_SHA384: case GNUTLS_MAC_SHA512: - return 1; - case GNUTLS_MAC_UMAC_96: case GNUTLS_MAC_UMAC_128: - if (_gnutls_fips_mode_enabled() != 0) - return 0; - else - return 1; + case GNUTLS_MAC_AES_CMAC_128: + case GNUTLS_MAC_AES_CMAC_256: + case GNUTLS_MAC_AES_GMAC_128: + case GNUTLS_MAC_AES_GMAC_192: + case GNUTLS_MAC_AES_GMAC_256: +#if ENABLE_GOST + case GNUTLS_MAC_GOSTR_94: + case GNUTLS_MAC_STREEBOG_256: + case GNUTLS_MAC_STREEBOG_512: + case GNUTLS_MAC_GOST28147_TC26Z_IMIT: +#endif + return 1; default: return 0; } @@ -253,6 +484,22 @@ static int wrap_nettle_mac_init(gnutls_mac_algorithm_t algo, void **_ctx) return 0; } +static void *wrap_nettle_mac_copy(const void *_ctx) +{ + const struct nettle_mac_ctx *ctx = _ctx; + struct nettle_mac_ctx *new_ctx; + ptrdiff_t off = (uint8_t *)ctx->ctx_ptr - (uint8_t *)(&ctx->ctx); + + new_ctx = gnutls_calloc(1, sizeof(struct nettle_mac_ctx)); + if (new_ctx == NULL) + return NULL; + + memcpy(new_ctx, ctx, sizeof(*ctx)); + new_ctx->ctx_ptr = (uint8_t *)&new_ctx->ctx + off; + + return new_ctx; +} + static int wrap_nettle_mac_set_key(void *_ctx, const void *key, size_t keylen) { @@ -268,7 +515,10 @@ wrap_nettle_mac_set_nonce(void *_ctx, const void *nonce, size_t noncelen) struct nettle_mac_ctx *ctx = _ctx; if (ctx->set_nonce == NULL) - return GNUTLS_E_INVALID_REQUEST; + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (nonce == NULL || noncelen == 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); ctx->set_nonce(ctx->ctx_ptr, noncelen, nonce); @@ -348,10 +598,12 @@ static int wrap_nettle_hash_exists(gnutls_digest_algorithm_t algo) return 0; #endif case GNUTLS_DIG_MD2: - if (_gnutls_fips_mode_enabled() != 0) - return 0; - else - return 1; +#if ENABLE_GOST + case GNUTLS_DIG_GOSTR_94: + case GNUTLS_DIG_STREEBOG_256: + case GNUTLS_DIG_STREEBOG_512: +#endif + return 1; default: return 0; } @@ -380,6 +632,8 @@ static void _md5_sha1_digest(void *_ctx, size_t len, uint8_t *digest) static int _ctx_init(gnutls_digest_algorithm_t algo, struct nettle_hash_ctx *ctx) { + /* Any FIPS140-2 related enforcement is performed on + * gnutls_hash_init() and gnutls_hmac_init() */ switch (algo) { case GNUTLS_DIG_MD5: md5_init(&ctx->ctx.md5); @@ -462,15 +716,35 @@ static int _ctx_init(gnutls_digest_algorithm_t algo, break; #endif case GNUTLS_DIG_MD2: - if (_gnutls_fips_mode_enabled() != 0) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - md2_init(&ctx->ctx.md2); ctx->update = (update_func) md2_update; ctx->digest = (digest_func) md2_digest; ctx->ctx_ptr = &ctx->ctx.md2; ctx->length = MD2_DIGEST_SIZE; break; +#if ENABLE_GOST + case GNUTLS_DIG_GOSTR_94: + gosthash94cp_init(&ctx->ctx.gosthash94cp); + ctx->update = (update_func) gosthash94cp_update; + ctx->digest = (digest_func) gosthash94cp_digest; + ctx->ctx_ptr = &ctx->ctx.gosthash94cp; + ctx->length = GOSTHASH94_DIGEST_SIZE; + break; + case GNUTLS_DIG_STREEBOG_256: + streebog256_init(&ctx->ctx.streebog256); + ctx->update = (update_func) streebog256_update; + ctx->digest = (digest_func) streebog256_digest; + ctx->ctx_ptr = &ctx->ctx.streebog256; + ctx->length = STREEBOG256_DIGEST_SIZE; + break; + case GNUTLS_DIG_STREEBOG_512: + streebog512_init(&ctx->ctx.streebog512); + ctx->update = (update_func) streebog512_update; + ctx->digest = (digest_func) streebog512_digest; + ctx->ctx_ptr = &ctx->ctx.streebog512; + ctx->length = STREEBOG512_DIGEST_SIZE; + break; +#endif default: gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; @@ -521,6 +795,22 @@ wrap_nettle_hash_init(gnutls_digest_algorithm_t algo, void **_ctx) return 0; } +static void *wrap_nettle_hash_copy(const void *_ctx) +{ + const struct nettle_hash_ctx *ctx = _ctx; + struct nettle_hash_ctx *new_ctx; + ptrdiff_t off = (uint8_t *)ctx->ctx_ptr - (uint8_t *)(&ctx->ctx); + + new_ctx = gnutls_calloc(1, sizeof(struct nettle_hash_ctx)); + if (new_ctx == NULL) + return NULL; + + memcpy(new_ctx, ctx, sizeof(*ctx)); + new_ctx->ctx_ptr = (uint8_t *)&new_ctx->ctx + off; + + return new_ctx; +} + static int wrap_nettle_hash_output(void *src_ctx, void *digest, size_t digestsize) { @@ -537,6 +827,69 @@ wrap_nettle_hash_output(void *src_ctx, void *digest, size_t digestsize) return 0; } +/* KDF functions based on MAC + */ +static int +wrap_nettle_hkdf_extract (gnutls_mac_algorithm_t mac, + const void *key, size_t keysize, + const void *salt, size_t saltsize, + void *output) +{ + struct nettle_mac_ctx ctx; + int ret; + + ret = _mac_ctx_init(mac, &ctx); + if (ret < 0) + return gnutls_assert_val(ret); + + ctx.set_key(&ctx, saltsize, salt); + hkdf_extract(&ctx.ctx, ctx.update, ctx.digest, ctx.length, + keysize, key, output); + + return 0; +} + +static int +wrap_nettle_hkdf_expand (gnutls_mac_algorithm_t mac, + const void *key, size_t keysize, + const void *info, size_t infosize, + void *output, size_t length) +{ + struct nettle_mac_ctx ctx; + int ret; + + ret = _mac_ctx_init(mac, &ctx); + if (ret < 0) + return gnutls_assert_val(ret); + + ctx.set_key(&ctx, keysize, key); + hkdf_expand(&ctx.ctx, ctx.update, ctx.digest, ctx.length, + infosize, info, length, output); + + return 0; +} + +static int +wrap_nettle_pbkdf2 (gnutls_mac_algorithm_t mac, + const void *key, size_t keysize, + const void *salt, size_t saltsize, + unsigned iter_count, + void *output, size_t length) +{ + struct nettle_mac_ctx ctx; + int ret; + + ret = _mac_ctx_init(mac, &ctx); + if (ret < 0) + return gnutls_assert_val(ret); + + ctx.set_key(&ctx, keysize, key); + pbkdf2(&ctx.ctx, ctx.update, ctx.digest, ctx.length, + iter_count, saltsize, salt, length, output); + + return 0; +} + gnutls_crypto_mac_st _gnutls_mac_ops = { .init = wrap_nettle_mac_init, .setkey = wrap_nettle_mac_set_key, @@ -546,6 +899,7 @@ gnutls_crypto_mac_st _gnutls_mac_ops = { .deinit = wrap_nettle_mac_deinit, .fast = wrap_nettle_mac_fast, .exists = wrap_nettle_mac_exists, + .copy = wrap_nettle_mac_copy, }; gnutls_crypto_digest_st _gnutls_digest_ops = { @@ -555,4 +909,15 @@ gnutls_crypto_digest_st _gnutls_digest_ops = { .deinit = wrap_nettle_hash_deinit, .fast = wrap_nettle_hash_fast, .exists = wrap_nettle_hash_exists, + .copy = wrap_nettle_hash_copy, +}; + +/* These names are clashing with nettle's name mangling. */ +#undef hkdf_extract +#undef hkdf_expand +#undef pbkdf2 +gnutls_crypto_kdf_st _gnutls_kdf_ops = { + .hkdf_extract = wrap_nettle_hkdf_extract, + .hkdf_expand = wrap_nettle_hkdf_expand, + .pbkdf2 = wrap_nettle_pbkdf2, }; diff --git a/lib/nettle/mpi.c b/lib/nettle/mpi.c index 24df1583fa..55086de603 100644 --- a/lib/nettle/mpi.c +++ b/lib/nettle/mpi.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -29,6 +29,9 @@ #include #include #include /* includes gmp.h */ +#if ENABLE_GOST +#include "gost/bignum-le.h" +#endif #include #include @@ -43,9 +46,9 @@ wrap_nettle_mpi_print(const bigint_t a, void *buffer, size_t * nbytes, size = nettle_mpz_sizeinbase_256_u(*p); } else if (format == GNUTLS_MPI_FORMAT_STD) { size = nettle_mpz_sizeinbase_256_s(*p); -#ifdef ENABLE_OPENPGP - } else if (format == GNUTLS_MPI_FORMAT_PGP) { - size = nettle_mpz_sizeinbase_256_u(*p) + 2; +#if ENABLE_GOST + } else if (format == GNUTLS_MPI_FORMAT_ULE) { + size = nettle_mpz_sizeinbase_256_u_le(*p); #endif } else { gnutls_assert(); @@ -54,21 +57,16 @@ wrap_nettle_mpi_print(const bigint_t a, void *buffer, size_t * nbytes, if (buffer == NULL || size > *nbytes) { *nbytes = size; + gnutls_assert(); return GNUTLS_E_SHORT_MEMORY_BUFFER; } -#ifdef ENABLE_OPENPGP - if (format == GNUTLS_MPI_FORMAT_PGP) { - uint8_t *buf = buffer; - unsigned int nbits = _gnutls_mpi_get_nbits(a); - buf[0] = (nbits >> 8) & 0xff; - buf[1] = (nbits) & 0xff; - nettle_mpz_get_str_256(size - 2, buf + 2, *p); - } else +#if ENABLE_GOST + if (format == GNUTLS_MPI_FORMAT_ULE) + nettle_mpz_get_str_256_u_le(size, buffer, *p); + else #endif - { nettle_mpz_get_str_256(size, buffer, *p); - } *nbytes = size; return 0; @@ -124,7 +122,6 @@ static int wrap_nettle_mpi_init_multi(bigint_t *w, ...) fail: mpz_clear(TOMPZ(*w)); gnutls_free(*w); - *w = NULL; va_start(args, w); @@ -133,7 +130,6 @@ static int wrap_nettle_mpi_init_multi(bigint_t *w, ...) if (next != last_failed) { mpz_clear(TOMPZ(*next)); gnutls_free(*next); - *next = NULL; } } while(next != last_failed); @@ -150,24 +146,9 @@ wrap_nettle_mpi_scan(bigint_t r, const void *buffer, size_t nbytes, nettle_mpz_set_str_256_u(TOMPZ(r), nbytes, buffer); } else if (format == GNUTLS_MPI_FORMAT_STD) { nettle_mpz_set_str_256_s(TOMPZ(r), nbytes, buffer); -#ifdef ENABLE_OPENPGP - } else if (format == GNUTLS_MPI_FORMAT_PGP) { - const uint8_t *buf = buffer; - size_t size; - - if (nbytes < 3) { - gnutls_assert(); - goto fail; - } - - size = (buf[0] << 8) | buf[1]; - size = (size + 7) / 8; - - if (size > nbytes - 2) { - gnutls_assert(); - goto fail; - } - nettle_mpz_set_str_256_u(TOMPZ(r), size, buf + 2); +#if ENABLE_GOST + } else if (format == GNUTLS_MPI_FORMAT_ULE) { + nettle_mpz_set_str_256_u_le(TOMPZ(r), nbytes, buffer); #endif } else { gnutls_assert(); diff --git a/lib/nettle/nettle-alloca.h b/lib/nettle/nettle-alloca.h new file mode 100644 index 0000000000..e91604358b --- /dev/null +++ b/lib/nettle/nettle-alloca.h @@ -0,0 +1,57 @@ +/* nettle-internal.h + + Things that are used only by the testsuite and benchmark, and + not included in the library. + + Copyright (C) 2002, 2014 Niels Möller + + This file is part of GNU Nettle. + + GNU Nettle is free software: you can redistribute it and/or + modify it under the terms of either: + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at your + option) any later version. + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your + option) any later version. + + or both in parallel, as here. + + GNU Nettle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see https://www.gnu.org/licenses/. +*/ + +#ifndef GNUTLS_LIB_NETTLE_GOST_NETTLE_INTERNAL_H +#define GNUTLS_LIB_NETTLE_GOST_NETTLE_INTERNAL_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* Temporary allocation, for systems that don't support alloca. Note + * that the allocation requests should always be reasonably small, so + * that they can fit on the stack. For non-alloca systems, we use a + * fix maximum size, and abort if we ever need anything larger. */ + +#if HAVE_ALLOCA +#include +# define TMP_DECL(name, type, max) type *name +# define TMP_ALLOC(name, size) (name = alloca(sizeof (*name) * (size))) +#else /* !HAVE_ALLOCA */ +# define TMP_DECL(name, type, max) type name[max] +# define TMP_ALLOC(name, size) \ + do { if ((size) > (sizeof(name) / sizeof(name[0]))) abort(); } while (0) +#endif + +#endif /* GNUTLS_LIB_NETTLE_GOST_NETTLE_INTERNAL_H */ diff --git a/lib/nettle/pk.c b/lib/nettle/pk.c index 0bbe45f126..ccf403b007 100644 --- a/lib/nettle/pk.c +++ b/lib/nettle/pk.c @@ -18,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -48,10 +48,32 @@ #include #include #include +#if !NEED_INT_ECC +#include +#else +#include "ecc/curve448.h" +#include "ecc/eddsa.h" +#endif +#include +#include +#if ENABLE_GOST +#if NEED_INT_ECC +#include "ecc/gostdsa.h" +#include "ecc-gost-curve.h" +#else +#include +#define gost_point_mul_g ecc_point_mul_g +#define gost_point_set ecc_point_set +#endif +#include "gost/gostdsa2.h" +#endif +#include "int/ecdsa-compute-k.h" +#include "int/dsa-compute-k.h" #include #include static inline const struct ecc_curve *get_supported_nist_curve(int curve); +static inline const struct ecc_curve *get_supported_gost_curve(int curve); /* When these callbacks are used for a nettle operation, the * caller must check the macro HAVE_LIB_ERROR() after the operation @@ -79,6 +101,21 @@ static void rnd_nonce_func(void *_ctx, size_t length, uint8_t * data) } } +static void rnd_mpz_func(void *_ctx, size_t length, uint8_t * data) +{ + mpz_t *k = _ctx; + nettle_mpz_get_str_256 (length, data, *k); +} + +static void rnd_nonce_func_fallback(void *_ctx, size_t length, uint8_t * data) +{ + if (unlikely(_gnutls_get_lib_state() != LIB_STATE_SELFTEST)) { + _gnutls_switch_lib_state(LIB_STATE_ERROR); + } + + memset(data, 0xAA, length); +} + static void ecc_scalar_zclear (struct ecc_scalar *s) { @@ -162,6 +199,36 @@ _ecc_params_to_pubkey(const gnutls_pk_params_st * pk_params, return 0; } +#if ENABLE_GOST +static int +_gost_params_to_privkey(const gnutls_pk_params_st * pk_params, + struct ecc_scalar *priv, + const struct ecc_curve *curve) +{ + ecc_scalar_init(priv, curve); + if (ecc_scalar_set(priv, pk_params->params[GOST_K]) == 0) { + ecc_scalar_clear(priv); + return gnutls_assert_val(GNUTLS_E_PK_INVALID_PRIVKEY); + } + + return 0; +} + +static int +_gost_params_to_pubkey(const gnutls_pk_params_st * pk_params, + struct ecc_point *pub, const struct ecc_curve *curve) +{ + ecc_point_init(pub, curve); + if (gost_point_set + (pub, pk_params->params[GOST_X], pk_params->params[GOST_Y]) == 0) { + ecc_point_clear(pub); + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } + + return 0; +} +#endif + static void ecc_shared_secret(struct ecc_scalar *private_key, struct ecc_point *public_key, void *out, unsigned size) @@ -190,27 +257,49 @@ ecc_shared_secret(struct ecc_scalar *private_key, */ #define DH_EXPONENT_SIZE(p_size) (2*_gnutls_pk_bits_to_subgroup_bits(p_size)) +static inline int +edwards_curve_mul(gnutls_pk_algorithm_t algo, + uint8_t *q, const uint8_t *n, const uint8_t *p) +{ + switch (algo) { + case GNUTLS_PK_ECDH_X25519: + curve25519_mul(q, n, p); + return 0; + case GNUTLS_PK_ECDH_X448: + curve448_mul(q, n, p); + return 0; + default: + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + } +} + /* This is used for DH or ECDH key derivation. In DH for example * it is given the peers Y and our x, and calculates Y^x */ static int _wrap_nettle_pk_derive(gnutls_pk_algorithm_t algo, gnutls_datum_t * out, const gnutls_pk_params_st * priv, - const gnutls_pk_params_st * pub) + const gnutls_pk_params_st * pub, + const gnutls_datum_t * nonce, + unsigned int flags) { int ret; switch (algo) { case GNUTLS_PK_DH: { - bigint_t f, x, prime; - bigint_t k = NULL, ff = NULL; + bigint_t f, x, q, prime; + bigint_t k = NULL, ff = NULL, r = NULL; unsigned int bits; + if (nonce != NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + f = pub->params[DH_Y]; x = priv->params[DH_X]; + q = priv->params[DH_Q]; prime = priv->params[DH_P]; - ret = _gnutls_mpi_init_multi(&k, &ff, NULL); + ret = _gnutls_mpi_init_multi(&k, &ff, &r, NULL); if (ret < 0) return gnutls_assert_val(ret); @@ -230,6 +319,26 @@ static int _wrap_nettle_pk_derive(gnutls_pk_algorithm_t algo, goto dh_cleanup; } + /* if we have Q check that y ^ q mod p == 1 */ + if (q != NULL) { + ret = _gnutls_mpi_powm(r, f, q, prime); + if (ret < 0) { + gnutls_assert(); + goto dh_cleanup; + } + ret = _gnutls_mpi_cmp_ui(r, 1); + if (ret != 0) { + gnutls_assert(); + ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + goto dh_cleanup; + } + } else if ((flags & PK_DERIVE_TLS13) && + _gnutls_fips_mode_enabled()) { + /* Mandatory in FIPS mode for TLS 1.3 */ + ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + goto dh_cleanup; + } + /* prevent denial of service */ bits = _gnutls_mpi_get_nbits(prime); if (bits == 0 || bits > MAX_DH_BITS) { @@ -245,7 +354,14 @@ static int _wrap_nettle_pk_derive(gnutls_pk_algorithm_t algo, goto dh_cleanup; } - ret = _gnutls_mpi_dprint(k, out); + if (flags & PK_DERIVE_TLS13) { + ret = + _gnutls_mpi_dprint_size(k, out, + (bits+7)/8); + } else { + ret = _gnutls_mpi_dprint(k, out); + } + if (ret < 0) { gnutls_assert(); goto dh_cleanup; @@ -253,6 +369,7 @@ static int _wrap_nettle_pk_derive(gnutls_pk_algorithm_t algo, ret = 0; dh_cleanup: + _gnutls_mpi_release(&r); _gnutls_mpi_release(&ff); zrelease_temp_mpi_key(&k); if (ret < 0) @@ -268,7 +385,10 @@ static int _wrap_nettle_pk_derive(gnutls_pk_algorithm_t algo, out->data = NULL; - curve = get_supported_nist_curve(priv->flags); + if (nonce != NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + curve = get_supported_nist_curve(priv->curve); if (curve == NULL) return gnutls_assert_val @@ -285,7 +405,7 @@ static int _wrap_nettle_pk_derive(gnutls_pk_algorithm_t algo, return gnutls_assert_val(ret); } - out->size = gnutls_ecc_curve_get_size(priv->flags); + out->size = gnutls_ecc_curve_get_size(priv->curve); /*ecc_size(curve)*sizeof(mp_limb_t); */ out->data = gnutls_malloc(out->size); if (out->data == NULL) { @@ -305,9 +425,13 @@ static int _wrap_nettle_pk_derive(gnutls_pk_algorithm_t algo, goto cleanup; break; } - case GNUTLS_PK_ECDHX: + case GNUTLS_PK_ECDH_X25519: + case GNUTLS_PK_ECDH_X448: { - unsigned size = gnutls_ecc_curve_get_size(priv->flags); + unsigned size = gnutls_ecc_curve_get_size(priv->curve); + + if (nonce != NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); /* The point is in pub, while the private part (scalar) in priv. */ @@ -322,17 +446,67 @@ static int _wrap_nettle_pk_derive(gnutls_pk_algorithm_t algo, out->size = size; - curve25519_mul(out->data, priv->raw_priv.data, pub->raw_pub.data); + ret = edwards_curve_mul(algo, out->data, priv->raw_priv.data, pub->raw_pub.data); + if (ret < 0) + goto cleanup; if (_gnutls_mem_is_zero(out->data, out->size)) { gnutls_free(out->data); - out->data = NULL; gnutls_assert(); ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; goto cleanup; } break; } +#if ENABLE_GOST + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + { + struct ecc_scalar ecc_priv; + struct ecc_point ecc_pub; + const struct ecc_curve *curve; + + out->data = NULL; + + curve = get_supported_gost_curve(priv->curve); + if (curve == NULL) + return + gnutls_assert_val + (GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + if (nonce == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ret = _gost_params_to_pubkey(pub, &ecc_pub, curve); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gost_params_to_privkey(priv, &ecc_priv, curve); + if (ret < 0) { + ecc_point_clear(&ecc_pub); + return gnutls_assert_val(ret); + } + + out->size = 2 * gnutls_ecc_curve_get_size(priv->curve); + out->data = gnutls_malloc(out->size); + if (out->data == NULL) { + ret = gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + goto gost_cleanup; + } + + gostdsa_vko(&ecc_priv, &ecc_pub, + nonce->size, nonce->data, + out->data); + + gost_cleanup: + ecc_point_clear(&ecc_pub); + ecc_scalar_zclear(&ecc_priv); + if (ret < 0) + goto cleanup; + break; + } +#endif default: gnutls_assert(); ret = GNUTLS_E_INTERNAL_ERROR; @@ -361,6 +535,7 @@ _wrap_nettle_pk_encrypt(gnutls_pk_algorithm_t algo, case GNUTLS_PK_RSA: { struct rsa_public_key pub; + nettle_random_func *random_func; ret = _rsa_params_to_pubkey(pk_params, &pub); if (ret < 0) { @@ -368,8 +543,12 @@ _wrap_nettle_pk_encrypt(gnutls_pk_algorithm_t algo, goto cleanup; } + if (_gnutls_get_lib_state() == LIB_STATE_SELFTEST) + random_func = rnd_nonce_func_fallback; + else + random_func = rnd_nonce_func; ret = - rsa_encrypt(&pub, NULL, rnd_nonce_func, + rsa_encrypt(&pub, NULL, random_func, plaintext->size, plaintext->data, p); if (ret == 0 || HAVE_LIB_ERROR()) { @@ -391,7 +570,7 @@ _wrap_nettle_pk_encrypt(gnutls_pk_algorithm_t algo, } default: gnutls_assert(); - ret = GNUTLS_E_INTERNAL_ERROR; + ret = GNUTLS_E_INVALID_REQUEST; goto cleanup; } @@ -422,6 +601,7 @@ _wrap_nettle_pk_decrypt(gnutls_pk_algorithm_t algo, struct rsa_public_key pub; size_t length; bigint_t c; + nettle_random_func *random_func; _rsa_params_to_privkey(pk_params, &priv); ret = _rsa_params_to_pubkey(pk_params, &pub); @@ -452,8 +632,12 @@ _wrap_nettle_pk_decrypt(gnutls_pk_algorithm_t algo, goto cleanup; } + if (_gnutls_get_lib_state() == LIB_STATE_SELFTEST) + random_func = rnd_nonce_func_fallback; + else + random_func = rnd_nonce_func; ret = - rsa_decrypt_tr(&pub, &priv, NULL, rnd_nonce_func, + rsa_decrypt_tr(&pub, &priv, NULL, random_func, &length, plaintext->data, TOMPZ(c)); _gnutls_mpi_release(&c); @@ -484,25 +668,293 @@ _wrap_nettle_pk_decrypt(gnutls_pk_algorithm_t algo, return ret; } -/* in case of DSA puts into data, r,s +/* Note: we do not allocate in this function to avoid asymettric + * unallocation (which creates a side channel) in case of failure + * */ +static int +_wrap_nettle_pk_decrypt2(gnutls_pk_algorithm_t algo, + const gnutls_datum_t * ciphertext, + unsigned char * plaintext, + size_t plaintext_size, + const gnutls_pk_params_st * pk_params) +{ + struct rsa_private_key priv; + struct rsa_public_key pub; + bigint_t c; + uint32_t is_err; + int ret; + nettle_random_func *random_func; + + if (algo != GNUTLS_PK_RSA || plaintext == NULL) { + gnutls_assert(); + return GNUTLS_E_INTERNAL_ERROR; + } + + _rsa_params_to_privkey(pk_params, &priv); + ret = _rsa_params_to_pubkey(pk_params, &pub); + if (ret < 0) + return gnutls_assert_val(ret); + + if (ciphertext->size != pub.size) + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); + + if (_gnutls_mpi_init_scan_nz(&c, ciphertext->data, + ciphertext->size) != 0) { + return gnutls_assert_val (GNUTLS_E_MPI_SCAN_FAILED); + } + + if (_gnutls_get_lib_state() == LIB_STATE_SELFTEST) + random_func = rnd_nonce_func_fallback; + else + random_func = rnd_nonce_func; + ret = rsa_sec_decrypt(&pub, &priv, NULL, random_func, + plaintext_size, plaintext, TOMPZ(c)); + /* after this point, any conditional on failure that cause differences + * in execution may create a timing or cache access pattern side + * channel that can be used as an oracle, so thread very carefully */ + _gnutls_mpi_release(&c); + /* Here HAVE_LIB_ERROR() should be fine as it doesn't have + * branches in it and returns a bool */ + is_err = HAVE_LIB_ERROR(); + /* if is_err != 0 */ + is_err = CONSTCHECK_NOT_EQUAL(is_err, 0); + /* or ret == 0 */ + is_err |= CONSTCHECK_EQUAL(ret, 0); + /* then return GNUTLS_E_DECRYPTION_FAILED */ + return (int)((is_err * UINT_MAX) & GNUTLS_E_DECRYPTION_FAILED); +} + +#define CHECK_INVALID_RSA_PSS_PARAMS(dig_size, salt_size, pub_size, err) \ + if (unlikely(dig_size + salt_size + 2 > pub_size)) \ + return gnutls_assert_val(err) + +static int +_rsa_pss_sign_digest_tr(gnutls_digest_algorithm_t dig, + const struct rsa_public_key *pub, + const struct rsa_private_key *priv, + void *rnd_ctx, nettle_random_func *rnd_func, + size_t salt_size, + const uint8_t *digest, + mpz_t s) +{ + int (*sign_func)(const struct rsa_public_key *, + const struct rsa_private_key *, + void *, nettle_random_func *, + size_t, const uint8_t *, + const uint8_t *, + mpz_t); + uint8_t *salt = NULL; + size_t hash_size; + int ret; + + switch (dig) { + case GNUTLS_DIG_SHA256: + sign_func = rsa_pss_sha256_sign_digest_tr; + hash_size = 32; + break; + case GNUTLS_DIG_SHA384: + sign_func = rsa_pss_sha384_sign_digest_tr; + hash_size = 48; + break; + case GNUTLS_DIG_SHA512: + sign_func = rsa_pss_sha512_sign_digest_tr; + hash_size = 64; + break; + default: + gnutls_assert(); + return GNUTLS_E_UNKNOWN_ALGORITHM; + } + + /* This is also checked in pss_encode_mgf1, but error out earlier. */ + CHECK_INVALID_RSA_PSS_PARAMS(hash_size, salt_size, pub->size, GNUTLS_E_PK_INVALID_PUBKEY_PARAMS); + + if (salt_size > 0) { + salt = gnutls_malloc(salt_size); + if (salt == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + ret = gnutls_rnd(GNUTLS_RND_NONCE, salt, salt_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } + + ret = sign_func(pub, priv, rnd_ctx, rnd_func, salt_size, salt, + digest, s); + if (ret == 0) { + gnutls_assert(); + ret = GNUTLS_E_PK_SIGN_FAILED; + } else + ret = 0; + + cleanup: + gnutls_free(salt); + return ret; +} + +static inline gnutls_ecc_curve_t +get_eddsa_curve(gnutls_pk_algorithm_t algo) +{ + switch (algo) { + case GNUTLS_PK_EDDSA_ED25519: + return GNUTLS_ECC_CURVE_ED25519; + case GNUTLS_PK_EDDSA_ED448: + return GNUTLS_ECC_CURVE_ED448; + default: + return gnutls_assert_val(GNUTLS_ECC_CURVE_INVALID); + } +} + +static inline int +eddsa_sign(gnutls_pk_algorithm_t algo, + const uint8_t *pub, + const uint8_t *priv, + size_t length, const uint8_t *msg, + uint8_t *signature) +{ + switch (algo) { + case GNUTLS_PK_EDDSA_ED25519: + ed25519_sha512_sign(pub, priv, length, msg, signature); + return 0; + case GNUTLS_PK_EDDSA_ED448: + ed448_shake256_sign(pub, priv, length, msg, signature); + return 0; + default: + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM); + } +} + +/* This is the lower-level part of privkey_sign_raw_data(). + * + * It accepts data in the appropriate hash form, i.e., DigestInfo + * for PK_RSA, hash for PK_ECDSA, PK_DSA, PK_RSA_PSS, and raw data + * for Ed25519 and Ed448. + * + * in case of EC/DSA, signed data are encoded into r,s values */ static int _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, gnutls_datum_t * signature, const gnutls_datum_t * vdata, - const gnutls_pk_params_st * pk_params) + const gnutls_pk_params_st * pk_params, + const gnutls_x509_spki_st * sign_params) { int ret; unsigned int hash_len; const mac_entry_st *me; + if (IS_EC(algo)) { + /* check if the curve relates to the algorithm used */ + if (gnutls_ecc_curve_get_pk(pk_params->curve) != algo) + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + } + + /* deterministic ECDSA/DSA is prohibited under FIPS except in + * the selftests */ + if (_gnutls_fips_mode_enabled() && + _gnutls_get_lib_state() != LIB_STATE_SELFTEST && + (algo == GNUTLS_PK_DSA || algo == GNUTLS_PK_ECDSA) && + (sign_params->flags & GNUTLS_PK_FLAG_REPRODUCIBLE)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + switch (algo) { - case GNUTLS_PK_EC: /* we do ECDSA */ + case GNUTLS_PK_EDDSA_ED25519: /* we do EdDSA */ + case GNUTLS_PK_EDDSA_ED448: + { + const gnutls_ecc_curve_entry_st *e; + + if (unlikely(get_eddsa_curve(algo) != pk_params->curve)) + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + e = _gnutls_ecc_curve_get_params(pk_params->curve); + if (e == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + signature->data = gnutls_malloc(e->sig_size); + if (signature->data == NULL) { + ret = gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + goto cleanup; + } + + signature->size = e->sig_size; + + if (pk_params->raw_pub.size != e->size || pk_params->raw_priv.size != e->size) { + ret = gnutls_assert_val(GNUTLS_E_PK_SIGN_FAILED); + goto cleanup; + } + + ret = eddsa_sign(algo, + pk_params->raw_pub.data, + pk_params->raw_priv.data, + vdata->size, vdata->data, + signature->data); + if (ret < 0) + goto cleanup; + + break; + } +#if ENABLE_GOST + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + { + struct ecc_scalar priv; + struct dsa_signature sig; + const struct ecc_curve *curve; + + curve = get_supported_gost_curve(pk_params->curve); + if (curve == NULL) + return + gnutls_assert_val + (GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + ret = + _ecc_params_to_privkey(pk_params, &priv, + curve); + if (ret < 0) + return gnutls_assert_val(ret); + + /* This call will return a valid MAC entry and + * getters will check that is not null anyway. */ + me = mac_to_entry(_gnutls_gost_digest(pk_params->algo)); + if (_gnutls_mac_get_algo_len(me) != vdata->size) { + gnutls_assert(); + _gnutls_debug_log + ("Security level of algorithm requires hash %s(%zd)\n", + _gnutls_mac_get_name(me), + _gnutls_mac_get_algo_len(me)); + return GNUTLS_E_INVALID_REQUEST; + } + + dsa_signature_init(&sig); + + gostdsa_sign(&priv, NULL, rnd_tmpkey_func, + vdata->size, vdata->data, &sig); + + ret = + _gnutls_encode_gost_rs(signature, &sig.r, &sig.s, + (ecc_bit_size(curve) + 7) / 8); + + dsa_signature_clear(&sig); + ecc_scalar_zclear(&priv); + + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + break; + } +#endif + case GNUTLS_PK_ECDSA: /* we do ECDSA */ { struct ecc_scalar priv; struct dsa_signature sig; - int curve_id = pk_params->flags; + int curve_id = pk_params->curve; const struct ecc_curve *curve; + mpz_t k; + void *random_ctx; + nettle_random_func *random_func; curve = get_supported_nist_curve(curve_id); if (curve == NULL) @@ -518,7 +970,7 @@ _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, dsa_signature_init(&sig); - me = _gnutls_dsa_q_to_hash(algo, pk_params, + me = _gnutls_dsa_q_to_hash(pk_params, &hash_len); if (hash_len > vdata->size) { @@ -529,7 +981,24 @@ _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, hash_len = vdata->size; } - ecdsa_sign(&priv, NULL, rnd_nonce_func, hash_len, + mpz_init(k); + if (_gnutls_get_lib_state() == LIB_STATE_SELFTEST || + (sign_params->flags & GNUTLS_PK_FLAG_REPRODUCIBLE)) { + ret = _gnutls_ecdsa_compute_k(k, + curve_id, + pk_params->params[ECC_K], + sign_params->dsa_dig, + vdata->data, + vdata->size); + if (ret < 0) + goto ecdsa_cleanup; + random_ctx = &k; + random_func = rnd_mpz_func; + } else { + random_ctx = NULL; + random_func = rnd_nonce_func; + } + ecdsa_sign(&priv, random_ctx, random_func, hash_len, vdata->data, &sig); /* prevent memory leaks */ @@ -545,6 +1014,7 @@ _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, ecdsa_cleanup: dsa_signature_clear(&sig); ecc_scalar_zclear(&priv); + mpz_clear(k); if (ret < 0) { gnutls_assert(); @@ -557,6 +1027,9 @@ _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, struct dsa_params pub; bigint_t priv; struct dsa_signature sig; + mpz_t k; + void *random_ctx; + nettle_random_func *random_func; memset(&priv, 0, sizeof(priv)); memset(&pub, 0, sizeof(pub)); @@ -566,7 +1039,7 @@ _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, dsa_signature_init(&sig); - me = _gnutls_dsa_q_to_hash(algo, pk_params, + me = _gnutls_dsa_q_to_hash(pk_params, &hash_len); if (hash_len > vdata->size) { @@ -577,8 +1050,27 @@ _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, hash_len = vdata->size; } + mpz_init(k); + if (_gnutls_get_lib_state() == LIB_STATE_SELFTEST || + (sign_params->flags & GNUTLS_PK_FLAG_REPRODUCIBLE)) { + ret = _gnutls_dsa_compute_k(k, + pub.q, + TOMPZ(priv), + sign_params->dsa_dig, + vdata->data, + vdata->size); + if (ret < 0) + goto dsa_fail; + /* cancel-out dsa_sign's addition of 1 to random data */ + mpz_sub_ui (k, k, 1); + random_ctx = &k; + random_func = rnd_mpz_func; + } else { + random_ctx = NULL; + random_func = rnd_nonce_func; + } ret = - dsa_sign(&pub, TOMPZ(priv), NULL, rnd_nonce_func, + dsa_sign(&pub, TOMPZ(priv), random_ctx, random_func, hash_len, vdata->data, &sig); if (ret == 0 || HAVE_LIB_ERROR()) { gnutls_assert(); @@ -592,6 +1084,7 @@ _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, dsa_fail: dsa_signature_clear(&sig); + mpz_clear(k); if (ret < 0) { gnutls_assert(); @@ -603,6 +1096,7 @@ _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, { struct rsa_private_key priv; struct rsa_public_key pub; + nettle_random_func *random_func; mpz_t s; _rsa_params_to_privkey(pk_params, &priv); @@ -613,8 +1107,12 @@ _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, mpz_init(s); + if (_gnutls_get_lib_state() == LIB_STATE_SELFTEST) + random_func = rnd_nonce_func_fallback; + else + random_func = rnd_nonce_func; ret = - rsa_pkcs1_sign_tr(&pub, &priv, NULL, rnd_nonce_func, + rsa_pkcs1_sign_tr(&pub, &priv, NULL, random_func, vdata->size, vdata->data, s); if (ret == 0 || HAVE_LIB_ERROR()) { gnutls_assert(); @@ -634,6 +1132,46 @@ _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, goto cleanup; } + break; + } + case GNUTLS_PK_RSA_PSS: + { + struct rsa_private_key priv; + struct rsa_public_key pub; + mpz_t s; + + _rsa_params_to_privkey(pk_params, &priv); + ret = _rsa_params_to_pubkey(pk_params, &pub); + if (ret < 0) + return + gnutls_assert_val(ret); + + mpz_init(s); + + ret = + _rsa_pss_sign_digest_tr(sign_params->rsa_pss_dig, + &pub, &priv, + NULL, rnd_nonce_func, + sign_params->salt_size, + vdata->data, s); + if (ret < 0) { + gnutls_assert(); + ret = GNUTLS_E_PK_SIGN_FAILED; + goto rsa_pss_fail; + } + + ret = + _gnutls_mpi_dprint_size(s, signature, + pub.size); + + rsa_pss_fail: + mpz_clear(s); + + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + break; } default: @@ -650,22 +1188,166 @@ _wrap_nettle_pk_sign(gnutls_pk_algorithm_t algo, return ret; } +static int +_rsa_pss_verify_digest(gnutls_digest_algorithm_t dig, + const struct rsa_public_key *pub, + size_t salt_size, + const uint8_t *digest, + size_t digest_size, + const mpz_t s) +{ + int (*verify_func) (const struct rsa_public_key *, + size_t, + const uint8_t *, + const mpz_t); + size_t hash_size; + + switch (dig) { + case GNUTLS_DIG_SHA256: + verify_func = rsa_pss_sha256_verify_digest; + hash_size = 32; + break; + case GNUTLS_DIG_SHA384: + verify_func = rsa_pss_sha384_verify_digest; + hash_size = 48; + break; + case GNUTLS_DIG_SHA512: + verify_func = rsa_pss_sha512_verify_digest; + hash_size = 64; + break; + default: + gnutls_assert(); + return 0; + } + + if (digest_size != hash_size) + return gnutls_assert_val(0); + + CHECK_INVALID_RSA_PSS_PARAMS(hash_size, salt_size, pub->size, 0); + + return verify_func(pub, salt_size, digest, s); +} + +static inline int +eddsa_verify(gnutls_pk_algorithm_t algo, + const uint8_t *pub, + size_t length, const uint8_t *msg, + const uint8_t *signature) +{ + int ret; + + switch (algo) { + case GNUTLS_PK_EDDSA_ED25519: + ret = ed25519_sha512_verify(pub, length, msg, signature); + if (ret == 0) + return gnutls_assert_val(GNUTLS_E_PK_SIG_VERIFY_FAILED); + return 0; + case GNUTLS_PK_EDDSA_ED448: + ret = ed448_shake256_verify(pub, length, msg, signature); + if (ret == 0) + return gnutls_assert_val(GNUTLS_E_PK_SIG_VERIFY_FAILED); + return 0; + default: + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM); + } +} + static int _wrap_nettle_pk_verify(gnutls_pk_algorithm_t algo, const gnutls_datum_t * vdata, const gnutls_datum_t * signature, - const gnutls_pk_params_st * pk_params) + const gnutls_pk_params_st * pk_params, + const gnutls_x509_spki_st * sign_params) { int ret; unsigned int hash_len; bigint_t tmp[2] = { NULL, NULL }; + if (IS_EC(algo)) { + /* check if the curve relates to the algorithm used */ + if (gnutls_ecc_curve_get_pk(pk_params->curve) != algo) + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + } + switch (algo) { - case GNUTLS_PK_EC: /* ECDSA */ + case GNUTLS_PK_EDDSA_ED25519: /* we do EdDSA */ + case GNUTLS_PK_EDDSA_ED448: + { + const gnutls_ecc_curve_entry_st *e; + + if (unlikely(get_eddsa_curve(algo) != pk_params->curve)) + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + e = _gnutls_ecc_curve_get_params(pk_params->curve); + if (e == NULL) + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + if (signature->size != e->sig_size) + return gnutls_assert_val(GNUTLS_E_PK_SIG_VERIFY_FAILED); + + if (pk_params->raw_pub.size != e->size) + return gnutls_assert_val(GNUTLS_E_PK_SIGN_FAILED); + + ret = eddsa_verify(algo, + pk_params->raw_pub.data, + vdata->size, vdata->data, + signature->data); + break; + } +#if ENABLE_GOST + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + { + struct ecc_point pub; + struct dsa_signature sig; + const struct ecc_curve *curve; + const mac_entry_st *me; + + curve = get_supported_gost_curve(pk_params->curve); + if (curve == NULL) + return + gnutls_assert_val + (GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + /* This call will return a valid MAC entry and + * getters will check that is not null anyway. */ + me = mac_to_entry(_gnutls_gost_digest(pk_params->algo)); + if (_gnutls_mac_get_algo_len(me) != vdata->size) + return gnutls_assert_val(GNUTLS_E_PK_SIG_VERIFY_FAILED); + + ret = + _gnutls_decode_gost_rs(signature, &tmp[0], + &tmp[1]); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = + _gost_params_to_pubkey(pk_params, &pub, curve); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + memcpy(sig.r, tmp[0], SIZEOF_MPZT); + memcpy(sig.s, tmp[1], SIZEOF_MPZT); + + ret = gostdsa_verify(&pub, vdata->size, vdata->data, &sig); + if (ret == 0) { + gnutls_assert(); + ret = GNUTLS_E_PK_SIG_VERIFY_FAILED; + } else + ret = 0; + + ecc_point_clear(&pub); + break; + } +#endif + case GNUTLS_PK_ECDSA: /* ECDSA */ { struct ecc_point pub; struct dsa_signature sig; - int curve_id = pk_params->flags; + int curve_id = pk_params->curve; const struct ecc_curve *curve; curve = get_supported_nist_curve(curve_id); @@ -690,7 +1372,7 @@ _wrap_nettle_pk_verify(gnutls_pk_algorithm_t algo, memcpy(sig.r, tmp[0], SIZEOF_MPZT); memcpy(sig.s, tmp[1], SIZEOF_MPZT); - _gnutls_dsa_q_to_hash(algo, pk_params, &hash_len); + _gnutls_dsa_q_to_hash(pk_params, &hash_len); if (hash_len > vdata->size) hash_len = vdata->size; @@ -727,7 +1409,7 @@ _wrap_nettle_pk_verify(gnutls_pk_algorithm_t algo, memcpy(sig.r, tmp[0], SIZEOF_MPZT); memcpy(sig.s, tmp[1], SIZEOF_MPZT); - _gnutls_dsa_q_to_hash(algo, pk_params, &hash_len); + _gnutls_dsa_q_to_hash(pk_params, &hash_len); if (hash_len > vdata->size) hash_len = vdata->size; @@ -742,7 +1424,41 @@ _wrap_nettle_pk_verify(gnutls_pk_algorithm_t algo, break; } - case GNUTLS_PK_RSA: + case GNUTLS_PK_RSA: + { + struct rsa_public_key pub; + + ret = _rsa_params_to_pubkey(pk_params, &pub); + if (ret < 0) + return + gnutls_assert_val(ret); + + if (signature->size != pub.size) + return + gnutls_assert_val + (GNUTLS_E_PK_SIG_VERIFY_FAILED); + + ret = + _gnutls_mpi_init_scan_nz(&tmp[0], signature->data, + signature->size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = + rsa_pkcs1_verify(&pub, vdata->size, + vdata->data, TOMPZ(tmp[0])); + if (ret == 0) + ret = + gnutls_assert_val + (GNUTLS_E_PK_SIG_VERIFY_FAILED); + else + ret = 0; + + break; + } + case GNUTLS_PK_RSA_PSS: { struct rsa_public_key pub; @@ -758,15 +1474,17 @@ _wrap_nettle_pk_verify(gnutls_pk_algorithm_t algo, ret = _gnutls_mpi_init_scan_nz(&tmp[0], signature->data, - signature->size); + signature->size); if (ret < 0) { gnutls_assert(); goto cleanup; } - ret = - rsa_pkcs1_verify(&pub, vdata->size, - vdata->data, TOMPZ(tmp[0])); + ret = _rsa_pss_verify_digest(sign_params->rsa_pss_dig, + &pub, + sign_params->salt_size, + vdata->data, vdata->size, + TOMPZ(tmp[0])); if (ret == 0) ret = gnutls_assert_val @@ -795,16 +1513,32 @@ static inline const struct ecc_curve *get_supported_nist_curve(int curve) switch (curve) { #ifdef ENABLE_NON_SUITEB_CURVES case GNUTLS_ECC_CURVE_SECP192R1: - return &nettle_secp_192r1; + return nettle_get_secp_192r1(); case GNUTLS_ECC_CURVE_SECP224R1: - return &nettle_secp_224r1; + return nettle_get_secp_224r1(); #endif case GNUTLS_ECC_CURVE_SECP256R1: - return &nettle_secp_256r1; + return nettle_get_secp_256r1(); case GNUTLS_ECC_CURVE_SECP384R1: - return &nettle_secp_384r1; + return nettle_get_secp_384r1(); case GNUTLS_ECC_CURVE_SECP521R1: - return &nettle_secp_521r1; + return nettle_get_secp_521r1(); + default: + return NULL; + } +} + +static inline const struct ecc_curve *get_supported_gost_curve(int curve) +{ + switch (curve) { +#if ENABLE_GOST + case GNUTLS_ECC_CURVE_GOST256CPA: + case GNUTLS_ECC_CURVE_GOST256CPXA: + case GNUTLS_ECC_CURVE_GOST256B: + return nettle_get_gost_gc256b(); + case GNUTLS_ECC_CURVE_GOST512A: + return nettle_get_gost_gc512a(); +#endif default: return NULL; } @@ -813,17 +1547,21 @@ static inline const struct ecc_curve *get_supported_nist_curve(int curve) static int _wrap_nettle_pk_curve_exists(gnutls_ecc_curve_t curve) { switch (curve) { + case GNUTLS_ECC_CURVE_ED25519: case GNUTLS_ECC_CURVE_X25519: + case GNUTLS_ECC_CURVE_ED448: + case GNUTLS_ECC_CURVE_X448: return 1; default: - return ((get_supported_nist_curve(curve)!=NULL)?1:0); + return ((get_supported_nist_curve(curve)!=NULL || + get_supported_gost_curve(curve)!=NULL)?1:0); } } /* Generates algorithm's parameters. That is: * For DSA: p, q, and g are generated. * For RSA: nothing - * For ECDSA: just checks the curve is ok + * For ECDSA/EDDSA: nothing */ static int wrap_nettle_pk_generate_params(gnutls_pk_algorithm_t algo, @@ -855,7 +1593,7 @@ wrap_nettle_pk_generate_params(gnutls_pk_algorithm_t algo, if (q_bits == 0) return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); - if (_gnutls_fips_mode_enabled() != 0 || params->flags & GNUTLS_PK_FLAG_PROVABLE) { + if (_gnutls_fips_mode_enabled() != 0 || params->pkflags & GNUTLS_PK_FLAG_PROVABLE) { if (algo==GNUTLS_PK_DSA) index = 1; else @@ -934,8 +1672,16 @@ wrap_nettle_pk_generate_params(gnutls_pk_algorithm_t algo, break; } + case GNUTLS_PK_RSA_PSS: case GNUTLS_PK_RSA: - case GNUTLS_PK_EC: + case GNUTLS_PK_ECDSA: + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: +#if ENABLE_GOST + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: +#endif break; default: gnutls_assert(); @@ -1043,6 +1789,8 @@ int _gnutls_dh_compute_key(gnutls_dh_params_t dh_params, priv.params[DH_P] = _gnutls_mpi_copy(dh_params->params[0]); priv.params[DH_G] = _gnutls_mpi_copy(dh_params->params[1]); + if (dh_params->params[2]) + priv.params[DH_Q] = _gnutls_mpi_copy(dh_params->params[2]); if (_gnutls_mpi_init_scan_nz (&priv.params[DH_X], priv_key->data, @@ -1052,7 +1800,7 @@ int _gnutls_dh_compute_key(gnutls_dh_params_t dh_params, goto cleanup; } - priv.params_nr = 3; /* include empty q */ + priv.params_nr = 3; /* include, possibly empty, q */ priv.algo = GNUTLS_PK_DH; Z->data = NULL; @@ -1078,14 +1826,14 @@ int _gnutls_ecdh_generate_key(gnutls_ecc_curve_t curve, int ret; gnutls_pk_params_init(¶ms); - params.flags = curve; - params.algo = GNUTLS_PK_EC; + params.curve = curve; + params.algo = GNUTLS_PK_ECDSA; x->data = NULL; y->data = NULL; k->data = NULL; - ret = _gnutls_pk_generate_keys(GNUTLS_PK_EC, curve, ¶ms, 0); + ret = _gnutls_pk_generate_keys(GNUTLS_PK_ECDSA, curve, ¶ms, 0); if (ret < 0) { return gnutls_assert_val(ret); } @@ -1134,8 +1882,8 @@ int _gnutls_ecdh_compute_key(gnutls_ecc_curve_t curve, gnutls_pk_params_init(&pub); gnutls_pk_params_init(&priv); - pub.algo = GNUTLS_PK_EC; - pub.flags = curve; + pub.algo = GNUTLS_PK_ECDSA; + pub.curve = curve; if (_gnutls_mpi_init_scan_nz (&pub.params[ECC_Y], peer_y->data, @@ -1181,12 +1929,12 @@ int _gnutls_ecdh_compute_key(gnutls_ecc_curve_t curve, priv.params_nr = 3; - priv.algo = GNUTLS_PK_EC; - priv.flags = curve; + priv.algo = GNUTLS_PK_ECDSA; + priv.curve = curve; Z->data = NULL; - ret = _gnutls_pk_derive(GNUTLS_PK_EC, Z, &priv, &pub); + ret = _gnutls_pk_derive(GNUTLS_PK_ECDSA, Z, &priv, &pub); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -1204,18 +1952,51 @@ static int pct_test(gnutls_pk_algorithm_t algo, const gnutls_pk_params_st* param int ret; gnutls_datum_t sig = {NULL, 0}; const char const_data[20] = "onetwothreefourfive"; +const char const_data_sha256[32] = "onetwothreefourfivesixseveneight"; +const char const_data_sha384[48] = "onetwothreefourfivesixseveneightnineteneleventwe"; +const char const_data_sha512[64] = "onetwothreefourfivesixseveneightnineteneleventwelvethirteenfourt"; gnutls_datum_t ddata, tmp = {NULL,0}; char* gen_data = NULL; +gnutls_x509_spki_st spki; + + memcpy(&spki, ¶ms->spki, sizeof(spki)); if (algo == GNUTLS_PK_DSA || algo == GNUTLS_PK_EC) { unsigned hash_len; - _gnutls_dsa_q_to_hash(algo, params, &hash_len); + _gnutls_dsa_q_to_hash(params, &hash_len); gen_data = gnutls_malloc(hash_len); gnutls_rnd(GNUTLS_RND_NONCE, gen_data, hash_len); ddata.data = (void*)gen_data; ddata.size = hash_len; + } else if (algo == GNUTLS_PK_GOST_01 || algo == GNUTLS_PK_GOST_12_256) { + ddata.data = (void*)const_data_sha256; + ddata.size = sizeof(const_data_sha256); + } else if (algo == GNUTLS_PK_GOST_12_512) { + ddata.data = (void*)const_data_sha512; + ddata.size = sizeof(const_data_sha512); + } else if (algo == GNUTLS_PK_RSA_PSS) { + if (spki.rsa_pss_dig == GNUTLS_DIG_UNKNOWN) + spki.rsa_pss_dig = GNUTLS_DIG_SHA256; + + switch (spki.rsa_pss_dig) { + case GNUTLS_DIG_SHA256: + ddata.data = (void*)const_data_sha256; + ddata.size = sizeof(const_data_sha256); + break; + case GNUTLS_DIG_SHA384: + ddata.data = (void*)const_data_sha384; + ddata.size = sizeof(const_data_sha384); + break; + case GNUTLS_DIG_SHA512: + ddata.data = (void*)const_data_sha512; + ddata.size = sizeof(const_data_sha512); + break; + default: + ret = gnutls_assert_val(GNUTLS_E_PK_GENERATION_ERROR); + goto cleanup; + } } else { ddata.data = (void*)const_data; ddata.size = sizeof(const_data); @@ -1251,18 +2032,22 @@ char* gen_data = NULL; free(sig.data); sig.data = NULL; - /* Here we don't know the purpose of the key. Check both - * signing and encryption. - */ + FALLTHROUGH; case GNUTLS_PK_EC: /* we only do keys for ECDSA */ + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: case GNUTLS_PK_DSA: - ret = _gnutls_pk_sign(algo, &sig, &ddata, params); + case GNUTLS_PK_RSA_PSS: + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + ret = _gnutls_pk_sign(algo, &sig, &ddata, params, &spki); if (ret < 0) { ret = gnutls_assert_val(GNUTLS_E_PK_GENERATION_ERROR); goto cleanup; } - ret = _gnutls_pk_verify(algo, &ddata, &sig, params); + ret = _gnutls_pk_verify(algo, &ddata, &sig, params, &spki); if (ret < 0) { ret = gnutls_assert_val(GNUTLS_E_PK_GENERATION_ERROR); gnutls_assert(); @@ -1270,7 +2055,8 @@ char* gen_data = NULL; } break; case GNUTLS_PK_DH: - case GNUTLS_PK_ECDHX: + case GNUTLS_PK_ECDH_X25519: + case GNUTLS_PK_ECDH_X448: ret = 0; goto cleanup; default: @@ -1290,6 +2076,38 @@ char* gen_data = NULL; } #endif +static inline int +eddsa_public_key(gnutls_pk_algorithm_t algo, + uint8_t *pub, const uint8_t *priv) +{ + switch (algo) { + case GNUTLS_PK_EDDSA_ED25519: + ed25519_sha512_public_key(pub, priv); + return 0; + case GNUTLS_PK_EDDSA_ED448: + ed448_shake256_public_key(pub, priv); + return 0; + default: + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM); + } +} + +static inline int +edwards_curve_mul_g(gnutls_pk_algorithm_t algo, + uint8_t *q, const uint8_t *n) +{ + switch (algo) { + case GNUTLS_PK_ECDH_X25519: + curve25519_mul_g(q, n); + return 0; + case GNUTLS_PK_ECDH_X448: + curve448_mul_g(q, n); + return 0; + default: + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + } +} + /* To generate a DH key either q must be set in the params or * level should be set to the number of required bits. */ @@ -1304,6 +2122,12 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, unsigned rnd_level; nettle_random_func *rnd_func; + if (IS_EC(algo)) { + /* check if the curve relates to the algorithm used */ + if (gnutls_ecc_curve_get_pk(level) != algo) + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + } + if (ephemeral) { rnd_level = GNUTLS_RND_RANDOM; rnd_func = rnd_tmpkey_func; @@ -1357,6 +2181,7 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, break; } #endif + FALLTHROUGH; case GNUTLS_PK_DH: { struct dsa_params pub; @@ -1436,6 +2261,7 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, break; } + case GNUTLS_PK_RSA_PSS: case GNUTLS_PK_RSA: { struct rsa_public_key pub; @@ -1446,8 +2272,8 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, mpz_set_ui(pub.e, 65537); - if ((params->flags & GNUTLS_PK_FLAG_PROVABLE) || _gnutls_fips_mode_enabled() != 0) { - params->flags |= GNUTLS_PK_FLAG_PROVABLE; + if ((params->pkflags & GNUTLS_PK_FLAG_PROVABLE) || _gnutls_fips_mode_enabled() != 0) { + params->pkflags |= GNUTLS_PK_FLAG_PROVABLE; if (params->palgo != 0 && params->palgo != GNUTLS_DIG_SHA384) { ret = GNUTLS_E_INVALID_REQUEST; goto rsa_fail; @@ -1460,12 +2286,21 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, params->seed_size, params->seed, NULL, NULL, level); } else { - params->seed_size = sizeof(params->seed); - ret = - rsa_generate_fips186_4_keypair(&pub, &priv, NULL, + unsigned retries = 0; + /* The provable RSA key generation process is deterministic + * but has an internal maximum iteration counter and when + * exceed will fail for certain random seeds. This is a very + * rare condition, but it nevertheless happens and even CI builds fail + * occasionally. When we generate the random seed internally, remediate + * by retrying a different seed on failure. */ + do { + params->seed_size = sizeof(params->seed); + ret = + rsa_generate_fips186_4_keypair(&pub, &priv, NULL, rnd_func, NULL, NULL, ¶ms->seed_size, params->seed, level); + } while (ret != 1 && ++retries < 3); } } else { ret = @@ -1509,8 +2344,50 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, break; } - case GNUTLS_PK_EC: - if (params->flags & GNUTLS_PK_FLAG_PROVABLE) + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: + { + unsigned size = gnutls_ecc_curve_get_size(level); + + if (params->pkflags & GNUTLS_PK_FLAG_PROVABLE) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (unlikely(get_eddsa_curve(algo) != level)) + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + if (size == 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + params->curve = level; + + params->raw_priv.data = gnutls_malloc(size); + if (params->raw_priv.data == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + params->raw_pub.data = gnutls_malloc(size); + if (params->raw_pub.data == NULL) { + ret = gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + goto fail; + } + + ret = gnutls_rnd(rnd_level, params->raw_priv.data, size); + if (ret < 0) { + ret = gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + goto fail; + } + params->raw_pub.size = size; + params->raw_priv.size = size; + + ret = eddsa_public_key(algo, + params->raw_pub.data, + params->raw_priv.data); + if (ret < 0) + goto fail; + + break; + } + case GNUTLS_PK_ECDSA: + if (params->pkflags & GNUTLS_PK_FLAG_PROVABLE) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); { @@ -1540,7 +2417,7 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, goto ecc_fail; } - params->flags = level; + params->curve = level; params->params_nr = ECC_PRIVATE_PARAMS; ecc_point_get(&pub, TOMPZ(params->params[ECC_X]), @@ -1558,14 +2435,74 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, break; } - case GNUTLS_PK_ECDHX: +#if ENABLE_GOST + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + if (params->pkflags & GNUTLS_PK_FLAG_PROVABLE) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + { + struct ecc_scalar key; + struct ecc_point pub; + const struct ecc_curve *curve; + const mac_entry_st *me; + + curve = get_supported_gost_curve(level); + if (curve == NULL) + return + gnutls_assert_val + (GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + me = hash_to_entry(_gnutls_gost_digest(algo)); + if (!me || me->output_size * 8 != ecc_bit_size(curve)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ecc_scalar_init(&key, curve); + ecc_point_init(&pub, curve); + + gostdsa_generate_keypair(&pub, &key, NULL, rnd_key_func); + if (HAVE_LIB_ERROR()) { + ret = gnutls_assert_val(GNUTLS_E_LIB_IN_ERROR_STATE); + goto ecc_fail; + } + + + ret = _gnutls_mpi_init_multi(¶ms->params[GOST_X], ¶ms->params[GOST_Y], + ¶ms->params[GOST_K], NULL); + if (ret < 0) { + gnutls_assert(); + goto gost_fail; + } + + params->curve = level; + params->params_nr = GOST_PRIVATE_PARAMS; + + ecc_point_get(&pub, TOMPZ(params->params[GOST_X]), + TOMPZ(params->params[GOST_Y])); + ecc_scalar_get(&key, TOMPZ(params->params[GOST_K])); + + ret = 0; + + gost_fail: + ecc_point_clear(&pub); + ecc_scalar_clear(&key); + + if (ret < 0) + goto fail; + + break; + } +#endif + case GNUTLS_PK_ECDH_X25519: + case GNUTLS_PK_ECDH_X448: { unsigned size = gnutls_ecc_curve_get_size(level); if (size == 0) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - params->flags = level; + params->curve = level; params->raw_priv.data = gnutls_malloc(size); if (params->raw_priv.data == NULL) @@ -1585,7 +2522,9 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, params->raw_pub.size = size; params->raw_priv.size = size; - curve25519_mul_g(params->raw_pub.data, params->raw_priv.data); + ret = edwards_curve_mul_g(algo, params->raw_pub.data, params->raw_priv.data); + if (ret < 0) + goto fail; break; } default: @@ -1593,6 +2532,8 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, return GNUTLS_E_INVALID_REQUEST; } + params->algo = algo; + #ifdef ENABLE_FIPS140 ret = pct_test(algo, params); if (ret < 0) { @@ -1612,8 +2553,6 @@ wrap_nettle_pk_generate_keys(gnutls_pk_algorithm_t algo, params->params_nr = 0; gnutls_free(params->raw_priv.data); gnutls_free(params->raw_pub.data); - params->raw_priv.data = NULL; - params->raw_pub.data = NULL; FAIL_IF_LIB_ERROR; return ret; @@ -1628,6 +2567,7 @@ wrap_nettle_pk_verify_priv_params(gnutls_pk_algorithm_t algo, switch (algo) { case GNUTLS_PK_RSA: + case GNUTLS_PK_RSA_PSS: { bigint_t t1 = NULL, t2 = NULL; @@ -1745,7 +2685,7 @@ wrap_nettle_pk_verify_priv_params(gnutls_pk_algorithm_t algo, } break; - case GNUTLS_PK_EC: + case GNUTLS_PK_ECDSA: { struct ecc_point r, pub; struct ecc_scalar priv; @@ -1757,7 +2697,7 @@ wrap_nettle_pk_verify_priv_params(gnutls_pk_algorithm_t algo, gnutls_assert_val (GNUTLS_E_INVALID_REQUEST); - curve = get_supported_nist_curve(params->flags); + curve = get_supported_nist_curve(params->curve); if (curve == NULL) return gnutls_assert_val @@ -1818,6 +2758,111 @@ wrap_nettle_pk_verify_priv_params(gnutls_pk_algorithm_t algo, mpz_clear(y2); } break; + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: { + gnutls_ecc_curve_t curve; + const gnutls_ecc_curve_entry_st *e; + uint8_t pub[57]; /* can accommodate both curves */ + + curve = get_eddsa_curve(algo); + e = _gnutls_ecc_curve_get_params(curve); + if (e == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (params->raw_pub.data == NULL) { + return 0; /* nothing to verify */ + } + + if (params->raw_pub.size != e->size) + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + + ret = eddsa_public_key(algo, pub, params->raw_priv.data); + if (ret < 0) + return ret; + + if (memcmp(params->raw_pub.data, pub, e->size) != 0) + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + + ret = 0; + break; + } +#if ENABLE_GOST + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + { + struct ecc_point r, pub; + struct ecc_scalar priv; + mpz_t x1, y1, x2, y2; + const struct ecc_curve *curve; + + if (params->params_nr != GOST_PRIVATE_PARAMS) + return + gnutls_assert_val + (GNUTLS_E_INVALID_REQUEST); + + curve = get_supported_gost_curve(params->curve); + if (curve == NULL) + return + gnutls_assert_val + (GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + ret = _gost_params_to_pubkey(params, &pub, curve); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gost_params_to_privkey(params, &priv, curve); + if (ret < 0) { + ecc_point_clear(&pub); + return gnutls_assert_val(ret); + } + + ecc_point_init(&r, curve); + /* verify that x,y lie on the curve */ + ret = + gost_point_set(&r, TOMPZ(params->params[GOST_X]), + TOMPZ(params->params[GOST_Y])); + if (ret == 0) { + ret = + gnutls_assert_val + (GNUTLS_E_ILLEGAL_PARAMETER); + goto gost_cleanup; + } + ecc_point_clear(&r); + + ecc_point_init(&r, curve); + gost_point_mul_g(&r, &priv); + + mpz_init(x1); + mpz_init(y1); + ecc_point_get(&r, x1, y1); + ecc_point_zclear(&r); + + mpz_init(x2); + mpz_init(y2); + ecc_point_get(&pub, x2, y2); + + /* verify that k*(Gx,Gy)=(x,y) */ + if (mpz_cmp(x1, x2) != 0 || mpz_cmp(y1, y2) != 0) { + ret = + gnutls_assert_val + (GNUTLS_E_ILLEGAL_PARAMETER); + goto gost_cleanup; + } + + ret = 0; + + gost_cleanup: + ecc_scalar_zclear(&priv); + ecc_point_clear(&pub); + + mpz_clear(x1); + mpz_clear(y1); + mpz_clear(x2); + mpz_clear(y2); + } + break; +#endif default: ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); } @@ -1833,9 +2878,12 @@ wrap_nettle_pk_verify_pub_params(gnutls_pk_algorithm_t algo, switch (algo) { case GNUTLS_PK_RSA: + case GNUTLS_PK_RSA_PSS: case GNUTLS_PK_DSA: + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: return 0; - case GNUTLS_PK_EC: + case GNUTLS_PK_ECDSA: { /* just verify that x and y lie on the curve */ struct ecc_point r, pub; @@ -1846,7 +2894,7 @@ wrap_nettle_pk_verify_pub_params(gnutls_pk_algorithm_t algo, gnutls_assert_val (GNUTLS_E_INVALID_REQUEST); - curve = get_supported_nist_curve(params->flags); + curve = get_supported_nist_curve(params->curve); if (curve == NULL) return gnutls_assert_val @@ -1875,6 +2923,50 @@ wrap_nettle_pk_verify_pub_params(gnutls_pk_algorithm_t algo, ecc_point_clear(&pub); } break; +#if ENABLE_GOST + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + { + /* just verify that x and y lie on the curve */ + struct ecc_point r, pub; + const struct ecc_curve *curve; + + if (params->params_nr != GOST_PUBLIC_PARAMS) + return + gnutls_assert_val + (GNUTLS_E_INVALID_REQUEST); + + curve = get_supported_gost_curve(params->curve); + if (curve == NULL) + return + gnutls_assert_val + (GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + ret = _gost_params_to_pubkey(params, &pub, curve); + if (ret < 0) + return gnutls_assert_val(ret); + + ecc_point_init(&r, curve); + /* verify that x,y lie on the curve */ + ret = + ecc_point_set(&r, TOMPZ(params->params[GOST_X]), + TOMPZ(params->params[GOST_Y])); + if (ret == 0) { + ret = + gnutls_assert_val + (GNUTLS_E_ILLEGAL_PARAMETER); + goto gost_cleanup; + } + ecc_point_clear(&r); + + ret = 0; + + gost_cleanup: + ecc_point_clear(&pub); + } + break; +#endif default: ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); } @@ -1943,7 +3035,7 @@ wrap_nettle_pk_fixup(gnutls_pk_algorithm_t algo, * keys were as old. */ if (params->params_nr < RSA_PRIVATE_PARAMS - 3) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + return gnutls_assert_val(GNUTLS_E_PK_INVALID_PRIVKEY); if (params->params[RSA_COEF] == NULL) { ret = _gnutls_mpi_init(¶ms->params[RSA_COEF]); @@ -1975,7 +3067,78 @@ wrap_nettle_pk_fixup(gnutls_pk_algorithm_t algo, if (ret == 0) { return gnutls_assert_val(GNUTLS_E_PK_INVALID_PRIVKEY); } + } else if (algo == GNUTLS_PK_EDDSA_ED25519 || + algo == GNUTLS_PK_EDDSA_ED448) { + if (unlikely(get_eddsa_curve(algo) != params->curve)) + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + if (params->raw_priv.data == NULL) + return gnutls_assert_val(GNUTLS_E_PK_INVALID_PRIVKEY); + + if (params->raw_pub.data == NULL) { + params->raw_pub.data = gnutls_malloc(params->raw_priv.size); + } + + if (params->raw_pub.data == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + ret = eddsa_public_key(algo, + params->raw_pub.data, + params->raw_priv.data); + if (ret < 0) { + gnutls_free(params->raw_pub.data); + return ret; + } + + params->raw_pub.size = params->raw_priv.size; + } else if (algo == GNUTLS_PK_RSA_PSS) { + if (params->params_nr < RSA_PRIVATE_PARAMS - 3) + return gnutls_assert_val(GNUTLS_E_PK_INVALID_PRIVKEY); + + if (params->spki.rsa_pss_dig != 0) { + unsigned pub_size = nettle_mpz_sizeinbase_256_u(TOMPZ(params->params[RSA_MODULUS])); + /* sanity check for private key */ + CHECK_INVALID_RSA_PSS_PARAMS(gnutls_hash_get_len(params->spki.rsa_pss_dig), + params->spki.salt_size, pub_size, + GNUTLS_E_PK_INVALID_PUBKEY_PARAMS); + } + + } +#if ENABLE_GOST + else if (algo == GNUTLS_PK_GOST_01 || + algo == GNUTLS_PK_GOST_12_256 || + algo == GNUTLS_PK_GOST_12_512) { + struct ecc_point r; + struct ecc_scalar priv; + const struct ecc_curve *curve; + + if (params->params_nr != GOST_PRIVATE_PARAMS) + return gnutls_assert_val + (GNUTLS_E_INVALID_REQUEST); + + curve = get_supported_gost_curve(params->curve); + if (curve == NULL) + return gnutls_assert_val + (GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + if (ecc_bit_size(curve) < _gnutls_mpi_get_nbits(params->params[GOST_K])) + gostdsa_unmask_key(curve, TOMPZ(params->params[GOST_K])); + + ret = _gost_params_to_privkey(params, &priv, curve); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + ecc_point_init(&r, curve); + gost_point_mul_g(&r, &priv); + + ecc_point_get(&r, params->params[GOST_X], + params->params[GOST_Y]); + + ecc_point_clear(&r); + ecc_scalar_clear(&priv); } +#endif return 0; } @@ -1985,6 +3148,7 @@ int crypto_pk_prio = INT_MAX; gnutls_crypto_pk_st _gnutls_pk_ops = { .encrypt = _wrap_nettle_pk_encrypt, .decrypt = _wrap_nettle_pk_decrypt, + .decrypt2 = _wrap_nettle_pk_decrypt2, .sign = _wrap_nettle_pk_sign, .verify = _wrap_nettle_pk_verify, .verify_priv_params = wrap_nettle_pk_verify_priv_params, diff --git a/lib/nettle/prf.c b/lib/nettle/prf.c new file mode 100644 index 0000000000..631ba3b8c0 --- /dev/null +++ b/lib/nettle/prf.c @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GNUTLS. + * + * The GNUTLS library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include +#include "int/tls1-prf.h" +#include +#if ENABLE_GOST +#include "gost/hmac-gost.h" +#endif + +/*- + * _gnutls_prf_raw: + * @mac: the MAC algorithm to use, set to %GNUTLS_MAC_MD5_SHA1 for the TLS1.0 mac + * @master_size: length of the @master variable. + * @master: the master secret used in PRF computation + * @label_size: length of the @label variable. + * @label: label used in PRF computation, typically a short string. + * @seed_size: length of the @seed variable. + * @seed: optional extra data to seed the PRF with. + * @outsize: size of pre-allocated output buffer to hold the output. + * @out: pre-allocated buffer to hold the generated data. + * + * Apply the TLS Pseudo-Random-Function (PRF) on the master secret + * and the provided data. + * + * Returns: %GNUTLS_E_SUCCESS on success, or an error code. + -*/ +int +_gnutls_prf_raw(gnutls_mac_algorithm_t mac, + size_t master_size, const void *master, + size_t label_size, const char *label, + size_t seed_size, const uint8_t *seed, size_t outsize, char *out) +{ + int ret; + + switch (mac) { + case GNUTLS_MAC_MD5_SHA1: + tls10_prf(master_size, (uint8_t*)master, label_size, label, + seed_size, seed, outsize, (uint8_t*)out); + return 0; + case GNUTLS_MAC_SHA256:{ + struct hmac_sha256_ctx ctx; + hmac_sha256_set_key(&ctx, master_size, (uint8_t*)master); + + ret = tls12_prf(&ctx, + (nettle_hash_update_func *) + hmac_sha256_update, + (nettle_hash_digest_func *) + hmac_sha256_digest, SHA256_DIGEST_SIZE, + label_size, label, seed_size, + seed, outsize, + (uint8_t*)out); + + if (unlikely(ret != 1)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + break; + } + case GNUTLS_MAC_SHA384:{ + struct hmac_sha384_ctx ctx; + hmac_sha384_set_key(&ctx, master_size, master); + + ret = tls12_prf(&ctx, + (nettle_hash_update_func *) + hmac_sha384_update, + (nettle_hash_digest_func *) + hmac_sha384_digest, SHA384_DIGEST_SIZE, + label_size, label, seed_size, + seed, outsize, + (uint8_t*)out); + + if (unlikely(ret != 1)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + break; + } +#if ENABLE_GOST + case GNUTLS_MAC_STREEBOG_256:{ + struct hmac_streebog256_ctx ctx; + hmac_streebog256_set_key(&ctx, master_size, master); + + ret = tls12_prf(&ctx, + (nettle_hash_update_func *) + hmac_streebog256_update, + (nettle_hash_digest_func *) + hmac_streebog256_digest, STREEBOG256_DIGEST_SIZE, + label_size, label, seed_size, + seed, outsize, + (uint8_t*)out); + + if (unlikely(ret != 1)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + break; + } + case GNUTLS_MAC_STREEBOG_512:{ + struct hmac_streebog512_ctx ctx; + hmac_streebog512_set_key(&ctx, master_size, master); + + ret = tls12_prf(&ctx, + (nettle_hash_update_func *) + hmac_streebog512_update, + (nettle_hash_digest_func *) + hmac_streebog512_digest, STREEBOG512_DIGEST_SIZE, + label_size, label, seed_size, + seed, outsize, + (uint8_t*)out); + + if (unlikely(ret != 1)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + break; + } +#endif + default: + gnutls_assert(); + _gnutls_debug_log("unhandled PRF %s\n", + gnutls_mac_get_name(mac)); + return GNUTLS_E_INVALID_REQUEST; + + } + + return 0; +} diff --git a/lib/nettle/rnd-common.h b/lib/nettle/rnd-common.h index cb4d4f0ddd..429ca017d3 100644 --- a/lib/nettle/rnd-common.h +++ b/lib/nettle/rnd-common.h @@ -17,10 +17,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_NETTLE_RND_COMMON_H +#define GNUTLS_LIB_NETTLE_RND_COMMON_H + #include "gnutls_int.h" #ifdef HAVE_GETPID # include /* getpid */ @@ -39,3 +42,5 @@ typedef int (*get_entropy_func)(void* rnd, size_t size); extern get_entropy_func _rnd_get_system_entropy; + +#endif /* GNUTLS_LIB_NETTLE_RND_COMMON_H */ diff --git a/lib/nettle/rnd-fips.c b/lib/nettle/rnd-fips.c index dbbb540400..ccb92d25a2 100644 --- a/lib/nettle/rnd-fips.c +++ b/lib/nettle/rnd-fips.c @@ -14,7 +14,7 @@ * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, see . + * License along with this program; if not, see . */ #include @@ -27,27 +27,28 @@ #include "gnutls_int.h" #include "errors.h" -#include -#include -#include +#include #include #include +/* The block size is chosen arbitrarily */ +#define ENTROPY_BLOCK_SIZE SHA256_DIGEST_SIZE + /* This provides a random generator for gnutls. It uses - * three instances of the DRBG-AES-CTR generator, one for - * each level of randomness. It uses /dev/urandom for their - * seeding. + * two instances of the DRBG-AES-CTR generator, one for + * nonce level and another for the other levels of randomness. */ - struct fips_ctx { struct drbg_aes_ctx nonce_context; struct drbg_aes_ctx normal_context; unsigned int forkid; + uint8_t entropy_hash[SHA256_DIGEST_SIZE]; }; static int _rngfips_ctx_reinit(struct fips_ctx *fctx); static int _rngfips_ctx_init(struct fips_ctx *fctx); -static int drbg_reseed(struct drbg_aes_ctx *ctx); +static int drbg_reseed(struct fips_ctx *fctx, struct drbg_aes_ctx *ctx); +static int get_entropy(struct fips_ctx *fctx, uint8_t *buffer, size_t length); static int get_random(struct drbg_aes_ctx *ctx, struct fips_ctx *fctx, void *buffer, size_t length) @@ -61,7 +62,7 @@ static int get_random(struct drbg_aes_ctx *ctx, struct fips_ctx *fctx, } if (ctx->reseed_counter > DRBG_AES_RESEED_TIME) { - ret = drbg_reseed(ctx); + ret = drbg_reseed(fctx, ctx); if (ret < 0) return gnutls_assert_val(ret); } @@ -73,54 +74,111 @@ static int get_random(struct drbg_aes_ctx *ctx, struct fips_ctx *fctx, return 0; } +static int get_entropy(struct fips_ctx *fctx, uint8_t *buffer, size_t length) +{ + int ret; + uint8_t block[ENTROPY_BLOCK_SIZE]; + uint8_t hash[SHA256_DIGEST_SIZE]; + struct sha256_ctx ctx; + size_t total = 0; + + /* For FIPS 140-2 4.9.2 continuous random number generator + * test, iteratively fetch fixed sized block from the system + * RNG and compare consecutive blocks. + * + * Note that we store the hash of the entropy block rather + * than the block itself for backward secrecy. + */ + while (total < length) { + ret = _rnd_get_system_entropy(block, ENTROPY_BLOCK_SIZE); + if (ret < 0) + return gnutls_assert_val(ret); + + sha256_init(&ctx); + sha256_update(&ctx, sizeof(block), block); + sha256_digest(&ctx, sizeof(hash), hash); + + if (memcmp(hash, fctx->entropy_hash, sizeof(hash)) == 0) { + _gnutls_switch_lib_state(LIB_STATE_ERROR); + return gnutls_assert_val(GNUTLS_E_RANDOM_FAILED); + } + memcpy(fctx->entropy_hash, hash, sizeof(hash)); + + memcpy(buffer, block, MIN(length - total, sizeof(block))); + total += sizeof(block); + buffer += sizeof(block); + } + zeroize_key(block, sizeof(block)); + + return 0; +} + #define PSTRING "gnutls-rng" #define PSTRING_SIZE (sizeof(PSTRING)-1) -static int drbg_init(struct drbg_aes_ctx *ctx) +static int drbg_init(struct fips_ctx *fctx, struct drbg_aes_ctx *ctx) { uint8_t buffer[DRBG_AES_SEED_SIZE]; int ret; - /* Get a key from the standard RNG or from the entropy source. */ - ret = _rnd_get_system_entropy(buffer, sizeof(buffer)); + ret = get_entropy(fctx, buffer, sizeof(buffer)); if (ret < 0) return gnutls_assert_val(ret); - ret = drbg_aes_init(ctx, sizeof(buffer), buffer, PSTRING_SIZE, (void*)PSTRING); + ret = drbg_aes_init(ctx, sizeof(buffer), buffer, + PSTRING_SIZE, (void*)PSTRING); + zeroize_key(buffer, sizeof(buffer)); if (ret == 0) return gnutls_assert_val(GNUTLS_E_RANDOM_FAILED); - zeroize_key(buffer, sizeof(buffer)); - - return 0; + return GNUTLS_E_SUCCESS; } /* Reseed a generator. */ -static int drbg_reseed(struct drbg_aes_ctx *ctx) +static int drbg_reseed(struct fips_ctx *fctx, struct drbg_aes_ctx *ctx) { uint8_t buffer[DRBG_AES_SEED_SIZE]; int ret; - /* The other two generators are seeded from /dev/random. */ - ret = _rnd_get_system_entropy(buffer, sizeof(buffer)); + ret = get_entropy(fctx, buffer, sizeof(buffer)); if (ret < 0) return gnutls_assert_val(ret); - drbg_aes_reseed(ctx, sizeof(buffer), buffer, 0, NULL); + ret = drbg_aes_reseed(ctx, sizeof(buffer), buffer, 0, NULL); + zeroize_key(buffer, sizeof(buffer)); + if (ret == 0) + return gnutls_assert_val(GNUTLS_E_RANDOM_FAILED); - return 0; + return GNUTLS_E_SUCCESS; } static int _rngfips_ctx_init(struct fips_ctx *fctx) { + uint8_t block[ENTROPY_BLOCK_SIZE]; + struct sha256_ctx ctx; int ret; + /* For FIPS 140-2 4.9.2 continuous random number generator + * test, get the initial entropy from the system RNG and keep + * it for comparison. + * + * Note that we store the hash of the entropy block rather + * than the block itself for backward secrecy. + */ + ret = _rnd_get_system_entropy(block, sizeof(block)); + if (ret < 0) + return gnutls_assert_val(ret); + sha256_init(&ctx); + sha256_update(&ctx, sizeof(block), block); + zeroize_key(block, sizeof(block)); + sha256_digest(&ctx, sizeof(fctx->entropy_hash), fctx->entropy_hash); + /* normal */ - ret = drbg_init(&fctx->normal_context); + ret = drbg_init(fctx, &fctx->normal_context); if (ret < 0) return gnutls_assert_val(ret); /* nonce */ - ret = drbg_init(&fctx->nonce_context); + ret = drbg_init(fctx, &fctx->nonce_context); if (ret < 0) return gnutls_assert_val(ret); @@ -134,12 +192,12 @@ static int _rngfips_ctx_reinit(struct fips_ctx *fctx) int ret; /* normal */ - ret = drbg_reseed(&fctx->normal_context); + ret = drbg_reseed(fctx, &fctx->normal_context); if (ret < 0) return gnutls_assert_val(ret); /* nonce */ - ret = drbg_reseed(&fctx->nonce_context); + ret = drbg_reseed(fctx, &fctx->nonce_context); if (ret < 0) return gnutls_assert_val(ret); diff --git a/lib/nettle/rnd-fuzzer.c b/lib/nettle/rnd-fuzzer.c new file mode 100644 index 0000000000..821eebc4ba --- /dev/null +++ b/lib/nettle/rnd-fuzzer.c @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2017 Red Hat + * Copyright (C) 1995-2017 Free Software Foundation, Inc. + * This file is part of the GNU C Library. + * Contributed by Ulrich Drepper , August 1995. + * + * This file is part of GnuTLS. + * + * Libgcrypt is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * Libgcrypt is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "gnutls_int.h" +#include "errors.h" +#include +#include + +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + +struct r48_rand_data { + unsigned short int __x[3]; /* Current state. */ + unsigned short int __old_x[3]; /* Old state. */ + unsigned short int __c; /* Additive const. in congruential formula. */ + unsigned short int __init; /* Flag for initializing. */ + __extension__ unsigned long long int __a; /* Factor in congruential + formula. */ +}; + +#ifdef __clang__ +__attribute__((no_sanitize("integer"))) +#endif +static int +__r48_rand_iterate(unsigned short int xsubi[3], struct r48_rand_data *buffer) +{ + uint64_t X; + uint64_t result; + + /* Initialize buffer, if not yet done. */ + if (unlikely(!buffer->__init)) { + buffer->__a = 0x5deece66dull; + buffer->__c = 0xb; + buffer->__init = 1; + } + + /* Do the real work. We choose a data type which contains at least + 48 bits. Because we compute the modulus it does not care how + many bits really are computed. */ + + X = (uint64_t) xsubi[2] << 32 | (uint32_t) xsubi[1] << 16 | xsubi[0]; + + result = X * buffer->__a + buffer->__c; + + xsubi[0] = result & 0xffff; + xsubi[1] = (result >> 16) & 0xffff; + xsubi[2] = (result >> 32) & 0xffff; + + return 0; +} + +#ifdef __clang__ +__attribute__((no_sanitize("integer"))) +#elif defined __GNUC__ +__attribute__((no_sanitize("shift-base"))) +#endif +static int +r48_r(unsigned short int xsubi[3], struct r48_rand_data *buffer, + long int *result) +{ + /* Compute next state. */ + if (__r48_rand_iterate(xsubi, buffer) < 0) + return -1; + + /* Store the result. */ + *result = (int32_t) ((xsubi[2] << 16) | xsubi[1]); + + return 0; +} + +static int r48(struct r48_rand_data *buffer, long int *result) +{ + return r48_r(buffer->__x, buffer, result); +} + +/* This is a dummy random generator intended to be reproducible + * for use in fuzzying targets. + */ + +static int _rngfuzz_init(void **_ctx) +{ + *_ctx = calloc(1, sizeof(struct r48_rand_data)); + + return 0; +} + +static int _rngfuzz_rnd(void *_ctx, int level, void *buffer, size_t length) +{ + struct r48_rand_data *ctx = _ctx; + uint8_t *p = buffer; + long r; + unsigned i; + + memset(ctx, 0, sizeof(*ctx)); + + for (i = 0; i < length; i++) { + r48(ctx, &r); + p[i] = r; + } + return 0; +} + +static void _rngfuzz_deinit(void *_ctx) +{ + struct r48_rand_data *ctx = _ctx; + + free(ctx); +} + +static void _rngfuzz_refresh(void *_ctx) +{ + /* this is predictable RNG. Don't refresh */ + return; +} + +gnutls_crypto_rnd_st _gnutls_fuzz_rnd_ops = { + .init = _rngfuzz_init, + .deinit = _rngfuzz_deinit, + .rnd = _rngfuzz_rnd, + .rnd_refresh = _rngfuzz_refresh, + .self_test = NULL, +}; + +#endif /* FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION */ diff --git a/lib/nettle/rnd.c b/lib/nettle/rnd.c index a02c72f519..0512af1cd1 100644 --- a/lib/nettle/rnd.c +++ b/lib/nettle/rnd.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -54,7 +54,7 @@ static const unsigned prng_reseed_limits[] = { [GNUTLS_RND_KEY] = 2*1024*1024 /* same as GNUTLS_RND_RANDOM - but we re-key on every operation */ }; -static const unsigned prng_reseed_time[] = { +static const time_t prng_reseed_time[] = { [GNUTLS_RND_NONCE] = 14400, /* 4 hours */ [GNUTLS_RND_RANDOM] = 7200, /* 2 hours */ [GNUTLS_RND_KEY] = 7200 /* same as RANDOM */ @@ -106,7 +106,7 @@ static int single_prng_init(struct prng_ctx_st *ctx, ctx->forkid = _gnutls_get_forkid(); - gettime(&now); + gnutls_gettime(&now); memcpy(nonce, &now, MIN(sizeof(nonce), sizeof(now))); ctx->last_reseed = now.tv_sec; } diff --git a/lib/nettle/sysrng-getentropy.c b/lib/nettle/sysrng-getentropy.c index 13aee36245..99e95ead8b 100644 --- a/lib/nettle/sysrng-getentropy.c +++ b/lib/nettle/sysrng-getentropy.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -34,6 +34,9 @@ #include #include #include +#ifdef __APPLE__ +#include +#endif /* gnulib wants to claim strerror even if it cannot provide it. WTF */ #undef strerror diff --git a/lib/nettle/sysrng-linux.c b/lib/nettle/sysrng-linux.c index 87786ce9fc..2e17ecdd0c 100644 --- a/lib/nettle/sysrng-linux.c +++ b/lib/nettle/sysrng-linux.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -53,15 +53,20 @@ static dev_t _gnutls_urandom_fd_rdev = 0; get_entropy_func _rnd_get_system_entropy = NULL; #if defined(__linux__) -# ifdef HAVE_LINUX_GETRANDOM -# include +# ifdef HAVE_GETRANDOM +# include # else # include # undef getrandom # if defined(SYS_getrandom) # define getrandom(dst,s,flags) syscall(SYS_getrandom, (void*)dst, (size_t)s, (unsigned int)flags) # else -# define getrandom(dst,s,flags) -1 +static ssize_t _getrandom0(void *buf, size_t buflen, unsigned int flags) +{ + errno = ENOSYS; + return -1; +} +# define getrandom(dst,s,flags) _getrandom0(dst,s,flags) # endif # endif diff --git a/lib/nettle/sysrng-netbsd.c b/lib/nettle/sysrng-netbsd.c new file mode 100644 index 0000000000..7fb3d8d326 --- /dev/null +++ b/lib/nettle/sysrng-netbsd.c @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2010-2016 Free Software Foundation, Inc. + * Copyright (C) 2015-2016 Red Hat, Inc. + * + * Author: Nia Alarie + * + * This file is part of GNUTLS. + * + * The GNUTLS library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* + * The *BSD sysctl-based system random generator. + * Used on NetBSD. + */ + +#include "gnutls_int.h" +#include "errors.h" +#include +#include +#include +#include + +#include + +#define ARRAY_SIZE(A) (sizeof(A)/sizeof((A)[0])) + +get_entropy_func _rnd_get_system_entropy = NULL; + +static int _rnd_get_system_entropy_sysctl(void* _rnd, size_t size) +{ + static int name[] = {CTL_KERN, KERN_ARND}; + size_t count, req; + unsigned char* p; + + p = _rnd; + while (size) { + req = size < 32 ? size : 32; + count = req; + + if (sysctl(name, ARRAY_SIZE(name), p, &count, NULL, 0) == -1) { + return GNUTLS_E_RANDOM_DEVICE_ERROR; + } + + if (count != req) { + return GNUTLS_E_RANDOM_DEVICE_ERROR; /* Can't happen. */ + } + + p += count; + size -= count; + } + + return 0; +} + +int _rnd_system_entropy_init(void) +{ + _rnd_get_system_entropy = _rnd_get_system_entropy_sysctl; + return 0; +} + +int _rnd_system_entropy_check(void) +{ + return 0; +} + +void _rnd_system_entropy_deinit(void) +{ + return; +} + diff --git a/lib/nettle/sysrng-windows.c b/lib/nettle/sysrng-windows.c index 1e1305b4bd..9d38e67ec1 100644 --- a/lib/nettle/sysrng-windows.c +++ b/lib/nettle/sysrng-windows.c @@ -18,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/num.c b/lib/num.c deleted file mode 100644 index 3b0b5b8511..0000000000 --- a/lib/num.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2000-2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* This file contains the functions needed for 64 bit integer support in - * TLS, and functions which ease the access to TLS vectors (data of given size). - */ - -#include "gnutls_int.h" -#include -#include "errors.h" - -/* This function will add one to uint64 x. - * Returns 0 on success, or -1 if the uint64 max limit - * has been reached. - */ -int _gnutls_uint64pp(gnutls_uint64 * x) -{ - register int i, y = 0; - - for (i = 7; i >= 0; i--) { - y = 0; - if (x->i[i] == 0xff) { - x->i[i] = 0; - y = 1; - } else - x->i[i]++; - - if (y == 0) - break; - } - if (y != 0) - return -1; /* over 64 bits! WOW */ - - return 0; -} - -/* This function will add one to uint48 x. - * Returns 0 on success, or -1 if the uint48 max limit - * has been reached. - */ -int _gnutls_uint48pp(gnutls_uint64 * x) -{ - register int i, y = 0; - - for (i = 7; i >= 3; i--) { - y = 0; - if (x->i[i] == 0xff) { - x->i[i] = 0; - y = 1; - } else - x->i[i]++; - - if (y == 0) - break; - } - if (y != 0) - return -1; /* over 48 bits */ - - return 0; -} diff --git a/lib/num.h b/lib/num.h index 28b86c8958..dd2ee41464 100644 --- a/lib/num.h +++ b/lib/num.h @@ -16,57 +16,31 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_NUM_H -#define GNUTLS_NUM_H +#ifndef GNUTLS_LIB_NUM_H +#define GNUTLS_LIB_NUM_H #include "gnutls_int.h" #include #include -int _gnutls_uint64pp(gnutls_uint64 *); -int _gnutls_uint48pp(gnutls_uint64 *); - -#define UINT64DATA(x) ((x).i) - -inline static uint32_t _gnutls_uint24touint32(uint24 num) -{ - uint32_t ret = 0; - - ((uint8_t *) & ret)[1] = num.pint[0]; - ((uint8_t *) & ret)[2] = num.pint[1]; - ((uint8_t *) & ret)[3] = num.pint[2]; - return ret; -} - -inline static uint24 _gnutls_uint32touint24(uint32_t num) -{ - uint24 ret; - - ret.pint[0] = ((uint8_t *) & num)[1]; - ret.pint[1] = ((uint8_t *) & num)[2]; - ret.pint[2] = ((uint8_t *) & num)[3]; - return ret; - -} - /* data should be at least 3 bytes */ inline static uint32_t _gnutls_read_uint24(const uint8_t * data) { - uint32_t res; - uint24 num; + return (data[0] << 16) | (data[1] << 8) | (data[2]); +} - num.pint[0] = data[0]; - num.pint[1] = data[1]; - num.pint[2] = data[2]; +inline static uint64_t _gnutls_read_uint64(const uint8_t * data) +{ + uint64_t res; - res = _gnutls_uint24touint32(num); + memcpy(&res, data, sizeof(uint64_t)); #ifndef WORDS_BIGENDIAN - res = bswap_32(res); + res = bswap_64(res); #endif return res; } @@ -81,16 +55,9 @@ inline static void _gnutls_write_uint64(uint64_t num, uint8_t * data) inline static void _gnutls_write_uint24(uint32_t num, uint8_t * data) { - uint24 tmp; - -#ifndef WORDS_BIGENDIAN - num = bswap_32(num); -#endif - tmp = _gnutls_uint32touint24(num); - - data[0] = tmp.pint[0]; - data[1] = tmp.pint[1]; - data[2] = tmp.pint[2]; + data[0] = num >> 16; + data[1] = num >> 8; + data[2] = num; } inline static uint32_t _gnutls_read_uint32(const uint8_t * data) @@ -150,16 +117,4 @@ inline static uint16_t _gnutls_conv_uint16(uint16_t data) #endif } -inline static uint32_t _gnutls_uint64touint32(const gnutls_uint64 * num) -{ - uint32_t ret; - - memcpy(&ret, &num->i[4], 4); -#ifndef WORDS_BIGENDIAN - ret = bswap_32(ret); -#endif - - return ret; -} - -#endif /* GNUTLS_NUM_H */ +#endif /* GNUTLS_LIB_NUM_H */ diff --git a/lib/ocsp-api.c b/lib/ocsp-api.c new file mode 100644 index 0000000000..28f7e05a26 --- /dev/null +++ b/lib/ocsp-api.c @@ -0,0 +1,640 @@ +/* + * Copyright (C) 2012-2017 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Simon Josefsson, Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* + * Status Request (OCSP) API. + */ + +#include "gnutls_int.h" +#include "errors.h" +#include +#include +#include +#include + +#ifdef ENABLE_OCSP + +#include +#include "x509/ocsp.h" + +/** + * gnutls_ocsp_status_request_get: + * @session: is a #gnutls_session_t type. + * @response: a #gnutls_datum_t with DER encoded OCSP response + * + * This function returns the OCSP status response received + * from the TLS server. The @response should be treated as + * constant. If no OCSP response is available then + * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, + * otherwise a negative error code is returned. + * + * Since: 3.1.3 + **/ +int +gnutls_ocsp_status_request_get(gnutls_session_t session, + gnutls_datum_t * response) +{ + return gnutls_ocsp_status_request_get2(session, 0, response); +} + +/** + * gnutls_ocsp_status_request_get2: + * @session: is a #gnutls_session_t type. + * @idx: the index of peer's certificate + * @response: a #gnutls_datum_t with DER encoded OCSP response + * + * This function returns the OCSP status response received + * from the TLS server for the certificate index provided. + * The index corresponds to certificates as returned by + * gnutls_certificate_get_peers. When index is zero this + * function operates identically to gnutls_ocsp_status_request_get(). + * + * The returned @response should be treated as + * constant. If no OCSP response is available for the + * given index then %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE + * is returned. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, + * otherwise a negative error code is returned. + * + * Since: 3.6.3 + **/ +int +gnutls_ocsp_status_request_get2(gnutls_session_t session, + unsigned idx, + gnutls_datum_t * response) +{ + const version_entry_st *ver = get_version(session); + cert_auth_info_t info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); + + if (!ver->tls13_sem && session->security_parameters.entity == GNUTLS_SERVER) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + if (info == NULL || info->raw_ocsp_list == NULL || + info->nocsp <= idx || info->raw_ocsp_list[idx].size == 0) + return + gnutls_assert_val + (GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + response->data = info->raw_ocsp_list[idx].data; + response->size = info->raw_ocsp_list[idx].size; + + return 0; +} + +/** + * gnutls_certificate_set_ocsp_status_request_function: + * @sc: is a #gnutls_certificate_credentials_t type. + * @ocsp_func: function pointer to OCSP status request callback. + * @ptr: opaque pointer passed to callback function + * + * This function is to be used by server to register a callback to + * handle OCSP status requests from the client. The callback will be + * invoked if the client supplied a status-request OCSP extension. + * The callback function prototype is: + * + * typedef int (*gnutls_status_request_ocsp_func) + * (gnutls_session_t session, void *ptr, gnutls_datum_t *ocsp_response); + * + * The callback will be invoked if the client requests an OCSP certificate + * status. The callback may return %GNUTLS_E_NO_CERTIFICATE_STATUS, if + * there is no recent OCSP response. If the callback returns %GNUTLS_E_SUCCESS, + * it is expected to have the @ocsp_response field set with a valid (DER-encoded) + * OCSP response. The response must be a value allocated using gnutls_malloc(), + * and will be deinitialized by the caller. + * + * It is possible to set a specific callback for each provided certificate + * using gnutls_certificate_set_ocsp_status_request_function2(). + * + * Since: 3.1.3 + **/ +void +gnutls_certificate_set_ocsp_status_request_function +(gnutls_certificate_credentials_t sc, +gnutls_status_request_ocsp_func ocsp_func, void *ptr) +{ + + sc->glob_ocsp_func = ocsp_func; + sc->glob_ocsp_func_ptr = ptr; +} + +/** + * gnutls_certificate_set_ocsp_status_request_function2: + * @sc: is a #gnutls_certificate_credentials_t type. + * @idx: is a certificate index as returned by gnutls_certificate_set_key() and friends + * @ocsp_func: function pointer to OCSP status request callback. + * @ptr: opaque pointer passed to callback function + * + * This function is to be used by server to register a callback to + * provide OCSP status requests that correspond to the indexed certificate chain + * from the client. The callback will be invoked if the client supplied a + * status-request OCSP extension. + * + * The callback function prototype is: + * + * typedef int (*gnutls_status_request_ocsp_func) + * (gnutls_session_t session, void *ptr, gnutls_datum_t *ocsp_response); + * + * The callback will be invoked if the client requests an OCSP certificate + * status. The callback may return %GNUTLS_E_NO_CERTIFICATE_STATUS, if + * there is no recent OCSP response. If the callback returns %GNUTLS_E_SUCCESS, + * it is expected to have the @ocsp_response field set with a valid (DER-encoded) + * OCSP response. The response must be a value allocated using gnutls_malloc(), + * and will be deinitialized by the caller. + * + * Note: the ability to set multiple OCSP responses per credential + * structure via the index @idx was added in version 3.5.6. To keep + * backwards compatibility, it requires using gnutls_certificate_set_flags() + * with the %GNUTLS_CERTIFICATE_API_V2 flag to make the set certificate + * functions return an index usable by this function. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, + * otherwise a negative error code is returned. + * + * Since: 3.5.5 + **/ +int +gnutls_certificate_set_ocsp_status_request_function2 +(gnutls_certificate_credentials_t sc, unsigned idx, gnutls_status_request_ocsp_func ocsp_func, void *ptr) +{ + if (idx >= sc->ncerts) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + sc->certs[idx].ocsp_func = ocsp_func; + sc->certs[idx].ocsp_func_ptr = ptr; + + return 0; +} + +static +unsigned resp_matches_pcert(gnutls_ocsp_resp_t resp, const gnutls_pcert_st *cert) +{ + gnutls_x509_crt_t crt; + int ret; + unsigned retval; + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) + return 0; + + ret = gnutls_x509_crt_import(crt, &cert->cert, GNUTLS_X509_FMT_DER); + if (ret < 0) { + gnutls_assert(); + retval = 0; + goto cleanup; + } + + ret = gnutls_ocsp_resp_check_crt(resp, 0, crt); + if (ret == 0) + retval = 1; + else + retval = 0; + + cleanup: + gnutls_x509_crt_deinit(crt); + return retval; +} + +/** + * gnutls_certificate_set_ocsp_status_request_file: + * @sc: is a credentials structure. + * @response_file: a filename of the OCSP response + * @idx: is a certificate index as returned by gnutls_certificate_set_key() and friends + * + * This function loads the provided OCSP response. It will be + * sent to the client if requests an OCSP certificate status for + * the certificate chain specified by @idx. + * + * Note: the ability to set multiple OCSP responses per credential + * structure via the index @idx was added in version 3.5.6. To keep + * backwards compatibility, it requires using gnutls_certificate_set_flags() + * with the %GNUTLS_CERTIFICATE_API_V2 flag to make the set certificate + * functions return an index usable by this function. + * + * This function can be called multiple times since GnuTLS 3.6.3 + * when multiple responses which apply to the chain are available. + * If the response provided does not match any certificates present + * in the chain, the code %GNUTLS_E_OCSP_MISMATCH_WITH_CERTS is returned. + * To revert to the previous behavior set the flag %GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK + * in the certificate credentials structure. In that case, only the + * end-certificate's OCSP response can be set. + * If the response is already expired at the time of loading the code + * %GNUTLS_E_EXPIRED is returned. + * + * To revert to the previous behavior of this function which does not return + * any errors, set the flag %GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, + * otherwise a negative error code is returned. + * + * Since: 3.1.3 + **/ +int +gnutls_certificate_set_ocsp_status_request_file(gnutls_certificate_credentials_t sc, + const char *response_file, + unsigned idx) +{ + int ret; + + ret = gnutls_certificate_set_ocsp_status_request_file2(sc, response_file, + idx, GNUTLS_X509_FMT_DER); + if (ret >= 0) + return 0; + else + return ret; +} + +static int append_response(gnutls_certificate_credentials_t sc, unsigned idx, + gnutls_ocsp_resp_t resp, const gnutls_datum_t *der) +{ + int ret; + unsigned i, found = 0; + unsigned try_already_set = 0; + time_t t; + + retry: + + /* iterate through all certificates in chain, and add the response + * to the certificate that it matches with. + */ + for (i=0;icerts[idx].cert_list_length, MAX_OCSP_RESPONSES);i++) { + if (!try_already_set && sc->certs[idx].ocsp_data[i].response.data) + continue; + + if (!resp_matches_pcert(resp, &sc->certs[idx].cert_list[i])) + continue; + + t = _gnutls_ocsp_get_validity(resp); + /* if already invalid */ + if (t == (time_t)-1) { + _gnutls_debug_log("the OCSP response associated with chain %d on pos %d, is invalid/expired\n", idx, i); + return GNUTLS_E_EXPIRED; + } else if (t == (time_t)-2) { + _gnutls_debug_log("the OCSP response associated with chain %d on pos %d, is too old (ignoring)\n", idx, i); + return 0; + } + + if (t >= 0) + sc->certs[idx].ocsp_data[i].exptime = t; + else + sc->certs[idx].ocsp_data[i].exptime = 0; + + _gnutls_debug_log("associating OCSP response with chain %d on pos %d\n", idx, i); + + gnutls_free(sc->certs[idx].ocsp_data[i].response.data); + + ret = _gnutls_set_datum(&sc->certs[idx].ocsp_data[i].response, + der->data, + der->size); + if (ret < 0) { + gnutls_assert(); + sc->certs[idx].ocsp_data[i].response.data = NULL; + sc->certs[idx].ocsp_data[i].response.size = 0; + return ret; + } + + if (sc->certs[idx].ocsp_data_length <= i) + sc->certs[idx].ocsp_data_length = i+1; + + found = 1; + break; + } + + if (!found) { + /* slow path; if we found no matching certificate for the OCSP + * response, try all the existing, even if a response is already + * given. */ + if (!try_already_set) { + try_already_set = 1; + goto retry; + } + ret = GNUTLS_E_OCSP_MISMATCH_WITH_CERTS; + } else { + ret = 0; + } + + return ret; +} + +/** + * gnutls_certificate_set_ocsp_status_request_file2: + * @sc: is a credentials structure. + * @response_file: a filename of the OCSP response + * @idx: is a certificate index as returned by gnutls_certificate_set_key() and friends + * @fmt: is PEM or DER + * + * This function loads the OCSP responses to be sent to the + * peer for the certificate chain specified by @idx. When @fmt is + * set to PEM, multiple responses can be loaded. + * + * This function must be called after setting any certificates, and + * cannot be used for certificates that are provided via a callback -- + * that is when gnutls_certificate_set_retrieve_function() is used. In + * that case consider using gnutls_certificate_set_retrieve_function3(). + * + * This function can be called multiple times when multiple responses + * applicable to the certificate chain are available. + * If the response provided does not match any certificates present + * in the chain, the code %GNUTLS_E_OCSP_MISMATCH_WITH_CERTS is returned. + * If the response is already expired at the time of loading the code + * %GNUTLS_E_EXPIRED is returned. + * + * Returns: On success, the number of loaded responses is returned, + * otherwise a negative error code. + * + * Since: 3.1.3 + **/ +int +gnutls_certificate_set_ocsp_status_request_file2(gnutls_certificate_credentials_t sc, + const char *response_file, + unsigned idx, + gnutls_x509_crt_fmt_t fmt) +{ + gnutls_datum_t raw = {NULL, 0}; + int ret; + + if (idx >= sc->ncerts) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + ret = gnutls_load_file(response_file, &raw); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_FILE_ERROR); + + ret = gnutls_certificate_set_ocsp_status_request_mem(sc, &raw, idx, fmt); + gnutls_free(raw.data); + return ret; +} + +#define PEM_OCSP_RESPONSE "OCSP RESPONSE" +#define FULL_PEM_OCSP_RESPONSE "-----BEGIN OCSP RESPONSE" + +/** + * gnutls_certificate_set_ocsp_status_request_mem: + * @sc: is a credentials structure. + * @resp_data: a memory buffer holding an OCSP response + * @idx: is a certificate index as returned by gnutls_certificate_set_key() and friends + * @fmt: is PEM or DER + * + * This function sets the OCSP responses to be sent to the + * peer for the certificate chain specified by @idx. When @fmt is set + * to PEM, multiple responses can be loaded. + * + * Note: the ability to set multiple OCSP responses per credential + * structure via the index @idx was added in version 3.5.6. To keep + * backwards compatibility, it requires using gnutls_certificate_set_flags() + * with the %GNUTLS_CERTIFICATE_API_V2 flag to make the set certificate + * functions return an index usable by this function. + * + * This function must be called after setting any certificates, and + * cannot be used for certificates that are provided via a callback -- + * that is when gnutls_certificate_set_retrieve_function() is used. + * + * This function can be called multiple times when multiple responses which + * apply to the certificate chain are available. + * If the response provided does not match any certificates present + * in the chain, the code %GNUTLS_E_OCSP_MISMATCH_WITH_CERTS is returned. + * If the response is already expired at the time of loading the code + * %GNUTLS_E_EXPIRED is returned. + * + * Returns: On success, the number of loaded responses is returned, + * otherwise a negative error code. + * + * Since: 3.6.3 + **/ +int +gnutls_certificate_set_ocsp_status_request_mem(gnutls_certificate_credentials_t sc, + const gnutls_datum_t *resp_data, + unsigned idx, + gnutls_x509_crt_fmt_t fmt) + +{ + gnutls_datum_t der = {NULL, 0}; + gnutls_ocsp_resp_t resp = NULL; + int ret; + unsigned int nresp = 0; + + ret = gnutls_ocsp_resp_init(&resp); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + if (fmt == GNUTLS_X509_FMT_PEM) { + /* load multiple responses */ + gnutls_datum_t p = {resp_data->data, resp_data->size}; + + p.data = memmem(p.data, p.size, FULL_PEM_OCSP_RESPONSE, + sizeof(FULL_PEM_OCSP_RESPONSE)-1); + if (p.data == NULL) { + ret = gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + goto cleanup; + } + + p.size -= p.data - resp_data->data; + if (p.size <= 0) { + ret = gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + goto cleanup; + } + + do { + ret = gnutls_pem_base64_decode2(PEM_OCSP_RESPONSE, &p, &der); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = gnutls_certificate_set_ocsp_status_request_mem(sc, &der, idx, + GNUTLS_X509_FMT_DER); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + nresp++; + + gnutls_free(der.data); + + p.data++; + p.size--; + + p.data = memmem(p.data, p.size, FULL_PEM_OCSP_RESPONSE, + sizeof(FULL_PEM_OCSP_RESPONSE)-1); + if (p.data == NULL) + break; + p.size = resp_data->size - (p.data - resp_data->data); + } while(p.size > 0); + + ret = nresp; + } else { + /* DER: load a single response */ + if (sc->flags & GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK) { + ret = gnutls_ocsp_resp_import2(resp, resp_data, GNUTLS_X509_FMT_DER); + if (ret >= 0) { + sc->certs[idx].ocsp_data[0].exptime = _gnutls_ocsp_get_validity(resp); + if (sc->certs[idx].ocsp_data[0].exptime <= 0) + sc->certs[idx].ocsp_data[0].exptime = 0; + } + + /* quick load of first response */ + gnutls_free(sc->certs[idx].ocsp_data[0].response.data); + + ret = _gnutls_set_datum(&sc->certs[idx].ocsp_data[0].response, + resp_data->data, + resp_data->size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + sc->certs[idx].ocsp_data_length = 1; + goto cleanup; + } + + ret = gnutls_ocsp_resp_import2(resp, resp_data, GNUTLS_X509_FMT_DER); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = append_response(sc, idx, resp, resp_data); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = 1; + } + cleanup: + gnutls_free(der.data); + if (resp) + gnutls_ocsp_resp_deinit(resp); + + return ret; +} + +/** + * gnutls_certificate_get_ocsp_expiration: + * @sc: is a credentials structure. + * @idx: is a certificate chain index as returned by gnutls_certificate_set_key() and friends + * @oidx: is an OCSP response index + * @flags: should be zero + * + * This function returns the validity of the loaded OCSP responses, + * to provide information on when to reload/refresh them. + * + * Note that the credentials structure should be read-only when in + * use, thus when reloading, either the credentials structure must not + * be in use by any sessions, or a new credentials structure should be + * allocated for new sessions. + * + * When @oidx is (-1) then the minimum refresh time for all responses + * is returned. Otherwise the index specifies the response corresponding + * to the @odix certificate in the certificate chain. + * + * Returns: On success, the expiration time of the OCSP response. Otherwise + * (time_t)(-1) on error, or (time_t)-2 on out of bounds. + * + * Since: 3.6.3 + **/ +time_t +gnutls_certificate_get_ocsp_expiration(gnutls_certificate_credentials_t sc, + unsigned idx, + int oidx, + unsigned flags) +{ + unsigned j; + + if (idx >= sc->ncerts) + return (time_t)-2; + + if (oidx == -1) { + time_t min = 0; + + for (j=0;jcerts[idx].cert_list_length, MAX_OCSP_RESPONSES);j++) { + if (min <= 0) + min = sc->certs[idx].ocsp_data[j].exptime; + else + if (sc->certs[idx].ocsp_data[j].exptime > 0 && + min >= sc->certs[idx].ocsp_data[j].exptime) + min = sc->certs[idx].ocsp_data[j].exptime; + } + return min; + } + + if (oidx >= MAX_OCSP_RESPONSES || (unsigned)oidx >= sc->certs[idx].cert_list_length) + return (time_t)-2; + + if (sc->certs[idx].ocsp_data[oidx].response.data == NULL) + return (time_t)-1; + + return sc->certs[idx].ocsp_data[oidx].exptime; +} + +/** + * gnutls_ocsp_status_request_is_checked: + * @session: is a gnutls session + * @flags: should be zero or %GNUTLS_OCSP_SR_IS_AVAIL + * + * When flags are zero this function returns non-zero if a valid OCSP status + * response was included in the TLS handshake. That is, an OCSP status response + * which is not too old, superseded or marks the certificate as revoked. + * It returns zero otherwise. + * + * When the flag %GNUTLS_OCSP_SR_IS_AVAIL is specified, the function + * returns non-zero if an OCSP status response was included in the handshake + * even if it was invalid. Otherwise, if no OCSP status response was included, + * it returns zero. The %GNUTLS_OCSP_SR_IS_AVAIL flag was introduced in GnuTLS 3.4.0. + * + * This is a helper function when needing to decide whether to perform an + * explicit OCSP validity check on the peer's certificate. Should be called after + * any of gnutls_certificate_verify_peers*() are called. + * + * This function is always usable on client side, but on server side only + * under TLS 1.3, which is the first version of TLS that allows cliend-side OCSP + * responses. + * + * Returns: Non-zero if the response was valid, or a zero if it wasn't sent, + * or sent and was invalid. + * + * Since: 3.1.4 + **/ +unsigned +gnutls_ocsp_status_request_is_checked(gnutls_session_t session, + unsigned int flags) +{ + int ret; + gnutls_datum_t data; + + if (flags & GNUTLS_OCSP_SR_IS_AVAIL) { + ret = gnutls_ocsp_status_request_get(session, &data); + if (ret < 0) + return gnutls_assert_val(0); + + if (data.data == NULL) + return gnutls_assert_val(0); + return 1; + } + return session->internals.ocsp_check_ok; +} + +#endif diff --git a/lib/opencdk/Makefile.am b/lib/opencdk/Makefile.am deleted file mode 100644 index 1503234952..0000000000 --- a/lib/opencdk/Makefile.am +++ /dev/null @@ -1,42 +0,0 @@ -## Process this file with automake to produce Makefile.in -# Copyright (C) 2004-2012 Free Software Foundation, Inc. -# -# Author: Nikos Mavroyanopoulos -# -# This file is part of GnuTLS. -# -# The GnuTLS is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public License -# as published by the Free Software Foundation; either version 3 of -# the License, or (at your option) any later version. -# -# The GnuTLS is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see - -include $(top_srcdir)/lib/common.mk - -AM_CPPFLAGS = \ - -I$(srcdir)/../../gl \ - -I$(builddir)/../../gl \ - -I$(srcdir)/../includes \ - -I$(builddir)/../includes \ - -I$(builddir)/../../gl \ - -I$(srcdir)/.. - -if ENABLE_MINITASN1 -AM_CPPFLAGS += -I$(srcdir)/../minitasn1 -endif - -noinst_LTLIBRARIES = libminiopencdk.la - -libminiopencdk_la_SOURCES = armor.c filters.h keydb.h types.h \ - kbnode.c main.h packet.h sig-check.c \ - keydb.c pubkey.c stream.c write-packet.c misc.c seskey.c \ - context.h literal.c new-packet.c read-packet.c stream.h opencdk.h - -EXTRA_DIST = README diff --git a/lib/opencdk/README b/lib/opencdk/README deleted file mode 100644 index 2cf780e04c..0000000000 --- a/lib/opencdk/README +++ /dev/null @@ -1,5 +0,0 @@ -This is a stripped down mirror of the files in OpenCDK -src/. To avoid to link proc-packets.c, dummy.c is included. - -In Makefile.am libminiopencdk_la_SOURCES contains the list -of all needed files. diff --git a/lib/opencdk/armor.c b/lib/opencdk/armor.c deleted file mode 100644 index e2c945b5f1..0000000000 --- a/lib/opencdk/armor.c +++ /dev/null @@ -1,495 +0,0 @@ -/* armor.c - Armor filters - * Copyright (C) 1998-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include - -#include "opencdk.h" -#include "main.h" -#include "filters.h" - -#ifdef _WIN32 -#define LF "\r\n" -#define ALTLF "\n" -#else -#define LF "\n" -#define ALTLF "\r\n" -#endif - -#define CRCINIT 0xB704CE - -static const u32 crc_table[] = { - 0x000000, 0x864CFB, 0x8AD50D, 0x0C99F6, 0x93E6E1, 0x15AA1A, - 0x1933EC, 0x9F7F17, 0xA18139, 0x27CDC2, 0x2B5434, 0xAD18CF, - 0x3267D8, 0xB42B23, 0xB8B2D5, 0x3EFE2E, 0xC54E89, 0x430272, - 0x4F9B84, 0xC9D77F, 0x56A868, 0xD0E493, 0xDC7D65, 0x5A319E, - 0x64CFB0, 0xE2834B, 0xEE1ABD, 0x685646, 0xF72951, 0x7165AA, - 0x7DFC5C, 0xFBB0A7, 0x0CD1E9, 0x8A9D12, 0x8604E4, 0x00481F, - 0x9F3708, 0x197BF3, 0x15E205, 0x93AEFE, 0xAD50D0, 0x2B1C2B, - 0x2785DD, 0xA1C926, 0x3EB631, 0xB8FACA, 0xB4633C, 0x322FC7, - 0xC99F60, 0x4FD39B, 0x434A6D, 0xC50696, 0x5A7981, 0xDC357A, - 0xD0AC8C, 0x56E077, 0x681E59, 0xEE52A2, 0xE2CB54, 0x6487AF, - 0xFBF8B8, 0x7DB443, 0x712DB5, 0xF7614E, 0x19A3D2, 0x9FEF29, - 0x9376DF, 0x153A24, 0x8A4533, 0x0C09C8, 0x00903E, 0x86DCC5, - 0xB822EB, 0x3E6E10, 0x32F7E6, 0xB4BB1D, 0x2BC40A, 0xAD88F1, - 0xA11107, 0x275DFC, 0xDCED5B, 0x5AA1A0, 0x563856, 0xD074AD, - 0x4F0BBA, 0xC94741, 0xC5DEB7, 0x43924C, 0x7D6C62, 0xFB2099, - 0xF7B96F, 0x71F594, 0xEE8A83, 0x68C678, 0x645F8E, 0xE21375, - 0x15723B, 0x933EC0, 0x9FA736, 0x19EBCD, 0x8694DA, 0x00D821, - 0x0C41D7, 0x8A0D2C, 0xB4F302, 0x32BFF9, 0x3E260F, 0xB86AF4, - 0x2715E3, 0xA15918, 0xADC0EE, 0x2B8C15, 0xD03CB2, 0x567049, - 0x5AE9BF, 0xDCA544, 0x43DA53, 0xC596A8, 0xC90F5E, 0x4F43A5, - 0x71BD8B, 0xF7F170, 0xFB6886, 0x7D247D, 0xE25B6A, 0x641791, - 0x688E67, 0xEEC29C, 0x3347A4, 0xB50B5F, 0xB992A9, 0x3FDE52, - 0xA0A145, 0x26EDBE, 0x2A7448, 0xAC38B3, 0x92C69D, 0x148A66, - 0x181390, 0x9E5F6B, 0x01207C, 0x876C87, 0x8BF571, 0x0DB98A, - 0xF6092D, 0x7045D6, 0x7CDC20, 0xFA90DB, 0x65EFCC, 0xE3A337, - 0xEF3AC1, 0x69763A, 0x578814, 0xD1C4EF, 0xDD5D19, 0x5B11E2, - 0xC46EF5, 0x42220E, 0x4EBBF8, 0xC8F703, 0x3F964D, 0xB9DAB6, - 0xB54340, 0x330FBB, 0xAC70AC, 0x2A3C57, 0x26A5A1, 0xA0E95A, - 0x9E1774, 0x185B8F, 0x14C279, 0x928E82, 0x0DF195, 0x8BBD6E, - 0x872498, 0x016863, 0xFAD8C4, 0x7C943F, 0x700DC9, 0xF64132, - 0x693E25, 0xEF72DE, 0xE3EB28, 0x65A7D3, 0x5B59FD, 0xDD1506, - 0xD18CF0, 0x57C00B, 0xC8BF1C, 0x4EF3E7, 0x426A11, 0xC426EA, - 0x2AE476, 0xACA88D, 0xA0317B, 0x267D80, 0xB90297, 0x3F4E6C, - 0x33D79A, 0xB59B61, 0x8B654F, 0x0D29B4, 0x01B042, 0x87FCB9, - 0x1883AE, 0x9ECF55, 0x9256A3, 0x141A58, 0xEFAAFF, 0x69E604, - 0x657FF2, 0xE33309, 0x7C4C1E, 0xFA00E5, 0xF69913, 0x70D5E8, - 0x4E2BC6, 0xC8673D, 0xC4FECB, 0x42B230, 0xDDCD27, 0x5B81DC, - 0x57182A, 0xD154D1, 0x26359F, 0xA07964, 0xACE092, 0x2AAC69, - 0xB5D37E, 0x339F85, 0x3F0673, 0xB94A88, 0x87B4A6, 0x01F85D, - 0x0D61AB, 0x8B2D50, 0x145247, 0x921EBC, 0x9E874A, 0x18CBB1, - 0xE37B16, 0x6537ED, 0x69AE1B, 0xEFE2E0, 0x709DF7, 0xF6D10C, - 0xFA48FA, 0x7C0401, 0x42FA2F, 0xC4B6D4, 0xC82F22, 0x4E63D9, - 0xD11CCE, 0x575035, 0x5BC9C3, 0xDD8538 -}; - -static const char *armor_begin[] = { - "BEGIN PGP MESSAGE", - "BEGIN PGP PUBLIC KEY BLOCK", - "BEGIN PGP PRIVATE KEY BLOCK", - "BEGIN PGP SIGNATURE", - NULL -}; - -static const char *armor_end[] = { - "END PGP MESSAGE", - "END PGP PUBLIC KEY BLOCK", - "END PGP PRIVATE KEY BLOCK", - "END PGP SIGNATURE", - NULL -}; - -static const char *valid_headers[] = { - "Comment", - "Version", - "MessageID", - "Hash", - "Charset", - NULL -}; - -static char b64chars[] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - -static u32 update_crc(u32 crc, const byte * buf, size_t buflen) -{ - unsigned int j; - - if (!crc) - crc = CRCINIT; - - for (j = 0; j < buflen; j++) - crc = - (crc << 8) ^ crc_table[0xff & ((crc >> 16) ^ buf[j])]; - crc &= 0xffffff; - return crc; -} - - -static cdk_error_t armor_encode(void *data, FILE * in, FILE * out) -{ - armor_filter_t *afx = data; - struct stat statbuf; - char crcbuf[5], buf[128], raw[49]; - byte crcbuf2[3]; - size_t nread = 0; - const char *lf; - - if (!afx) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (afx->idx < 0 || afx->idx >= (int) DIM(armor_begin) || - afx->idx2 < 0 || afx->idx2 >= (int) DIM(armor_end)) { - gnutls_assert(); - return CDK_Inv_Value; - } - - _gnutls_buffers_log("armor filter: encode\n"); - - memset(crcbuf, 0, sizeof(crcbuf)); - - lf = afx->le ? afx->le : LF; - fprintf(out, "-----%s-----%s", armor_begin[afx->idx], lf); - fprintf(out, "Version: OpenPrivacy " PACKAGE_VERSION "%s", lf); - if (afx->hdrlines) - fwrite(afx->hdrlines, 1, strlen(afx->hdrlines), out); - fprintf(out, "%s", lf); - - if (fstat(fileno(in), &statbuf)) { - gnutls_assert(); - return CDK_General_Error; - } - - while (!feof(in)) { - nread = fread(raw, 1, DIM(raw) - 1, in); - if (!nread) - break; - if (ferror(in)) { - gnutls_assert(); - return CDK_File_Error; - } - afx->crc = update_crc(afx->crc, (byte *) raw, nread); - if (DIM(buf)-1 < BASE64_ENCODE_RAW_LENGTH(nread)) { - gnutls_assert(); - return CDK_File_Error; - } - - base64_encode_raw((uint8_t*)buf, nread, (uint8_t*)raw); - buf[BASE64_ENCODE_RAW_LENGTH(nread)] = 0; - fprintf(out, "%s%s", buf, lf); - } - - crcbuf2[0] = afx->crc >> 16; - crcbuf2[1] = afx->crc >> 8; - crcbuf2[2] = afx->crc; - crcbuf[0] = b64chars[crcbuf2[0] >> 2]; - crcbuf[1] = - b64chars[((crcbuf2[0] << 4) & 0x30) | (crcbuf2[1] >> 4)]; - crcbuf[2] = - b64chars[((crcbuf2[1] << 2) & 0x3c) | (crcbuf2[2] >> 6)]; - crcbuf[3] = b64chars[crcbuf2[2] & 0x3f]; - fprintf(out, "=%s%s", crcbuf, lf); - fprintf(out, "-----%s-----%s", armor_end[afx->idx2], lf); - - return 0; -} - -static int search_header(const char *buf, const char **array) -{ - const char *s; - int i; - - if (strlen(buf) < 5 || strncmp(buf, "-----", 5)) { - return -1; - } - for (i = 0; (s = array[i]); i++) { - if (!strncmp(s, buf + 5, strlen(s))) - return i; - } - return -1; -} - -static cdk_error_t armor_decode(void *data, FILE * in, FILE * out) -{ - armor_filter_t *afx = data; - const char *s; - char buf[127]; - byte raw[128], crcbuf[4]; - u32 crc2 = 0; - int i, pgp_data = 0, ret; - cdk_error_t rc = 0; - int len; - size_t raw_size, crcbuf_size; - struct base64_decode_ctx ctx; - - if (!afx) { - gnutls_assert(); - return CDK_Inv_Value; - } - - _gnutls_buffers_log("armor filter: decode\n"); - - fseek(in, 0, SEEK_SET); - /* Search the begin of the message */ - while (!feof(in) && !pgp_data) { - s = fgets(buf, DIM(buf) - 1, in); - if (!s) - break; - afx->idx = search_header(buf, armor_begin); - if (afx->idx >= 0) - pgp_data = 1; - } - - if (feof(in) || !pgp_data) { - return CDK_Armor_Error; /* no data found */ - } - - /* Parse header until the empty line is reached */ - while (!feof(in)) { - s = fgets(buf, DIM(buf) - 1, in); - if (!s) - return CDK_EOF; - if (strcmp(s, LF) == 0 || strcmp(s, ALTLF) == 0) { - rc = 0; - break; /* empty line */ - } - /* From RFC2440: OpenPGP should consider improperly formatted Armor - Headers to be corruption of the ASCII Armor. A colon and a single - space separate the key and value. */ - if (!strstr(buf, ": ")) { - gnutls_assert(); - return CDK_Armor_Error; - } - rc = CDK_General_Error; - for (i = 0; (s = valid_headers[i]); i++) { - if (!strncmp(s, buf, strlen(s))) - rc = 0; - } - if (rc) { - /* From RFC2440: Unknown keys should be reported to the user, - but OpenPGP should continue to process the message. */ - _cdk_log_info("unknown header: `%s'\n", buf); - rc = 0; - } - } - - /* Read the data body */ - while (!feof(in)) { - s = fgets(buf, DIM(buf) - 1, in); - if (!s) - break; - - len = strlen(buf); - - if (len > 0 && buf[len - 1] == '\n') { - len--; - buf[len] = '\0'; - } - if (len > 0 && buf[len - 1] == '\r') { - len--; - buf[len] = '\0'; - } - if (buf[0] == '=' && strlen(s) == 5) { /* CRC */ - base64_decode_init(&ctx); - - memset(crcbuf, 0, sizeof(crcbuf)); - crcbuf_size = sizeof(crcbuf); - if ((ssize_t)crcbuf_size < BASE64_DECODE_LENGTH(len-1)) - return gnutls_assert_val(GNUTLS_E_BASE64_DECODING_ERROR); - - ret = base64_decode_update(&ctx, &crcbuf_size, crcbuf, - len-1, (uint8_t*)buf+1); - if (ret == 0) - return gnutls_assert_val(GNUTLS_E_BASE64_DECODING_ERROR); - - ret = base64_decode_final(&ctx); - if (ret != 1) - return gnutls_assert_val(GNUTLS_E_BASE64_DECODING_ERROR); - - crc2 = - (crcbuf[0] << 16) | (crcbuf[1] << 8) | - crcbuf[2]; - break; /* stop here */ - } else { - base64_decode_init(&ctx); - - raw_size = sizeof(raw); - if ((ssize_t)raw_size < BASE64_DECODE_LENGTH(len)) - return gnutls_assert_val(GNUTLS_E_BASE64_DECODING_ERROR); - ret = base64_decode_update(&ctx, &raw_size, raw, - len, (uint8_t*)buf); - if (ret == 0) - return gnutls_assert_val(GNUTLS_E_BASE64_DECODING_ERROR); - - ret = base64_decode_final(&ctx); - if (ret != 1) - return gnutls_assert_val(GNUTLS_E_BASE64_DECODING_ERROR); - - afx->crc = update_crc(afx->crc, raw, raw_size); - fwrite(raw, 1, raw_size, out); - } - } - - /* Search the tail of the message */ - s = fgets(buf, DIM(buf) - 1, in); - if (s) { - int buf_len = strlen(buf); - if (buf[buf_len - 1] == '\n') { - buf_len--; - buf[buf_len] = '\0'; - } - if (buf[buf_len - 1] == '\r') { - buf_len--; - buf[buf_len] = '\0'; - } - rc = CDK_General_Error; - afx->idx2 = search_header(buf, armor_end); - if (afx->idx2 >= 0) - rc = 0; - } - - /* This catches error when no tail was found or the header is - different then the tail line. */ - if (rc || afx->idx != afx->idx2) - rc = CDK_Armor_Error; - - afx->crc_okay = (afx->crc == crc2) ? 1 : 0; - if (!afx->crc_okay && !rc) { - _gnutls_buffers_log("file crc=%08X afx_crc=%08X\n", - (unsigned int) crc2, - (unsigned int) afx->crc); - rc = CDK_Armor_CRC_Error; - } - - return rc; -} - -int _cdk_filter_armor(void *data, int ctl, FILE * in, FILE * out) -{ - if (ctl == STREAMCTL_READ) - return armor_decode(data, in, out); - else if (ctl == STREAMCTL_WRITE) - return armor_encode(data, in, out); - else if (ctl == STREAMCTL_FREE) { - armor_filter_t *afx = data; - if (afx) { - _gnutls_buffers_log("free armor filter\n"); - afx->idx = afx->idx2 = 0; - afx->crc = afx->crc_okay = 0; - return 0; - } - } - - gnutls_assert(); - return CDK_Inv_Mode; -} - - -/** - * cdk_armor_encode_buffer: - * @inbuf: the raw input buffer - * @inlen: raw buffer len - * @outbuf: the destination buffer for the base64 output - * @outlen: destination buffer len - * @nwritten: actual length of the base64 data - * @type: the base64 file type. - * - * Encode the given buffer into base64 format. The base64 - * string will be null terminated but the null will - * not be contained in the size. - **/ -cdk_error_t -cdk_armor_encode_buffer(const byte * inbuf, size_t inlen, - char *outbuf, size_t outlen, - size_t * nwritten, int type) -{ - const char *head, *tail, *le; - char tempbuf[48]; - char tempout[128]; - size_t pos, off, len, rest; - - if (!inbuf || !nwritten) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (type > CDK_ARMOR_SIGNATURE) { - gnutls_assert(); - return CDK_Inv_Mode; - } - - head = armor_begin[type]; - tail = armor_end[type]; - le = LF; - pos = - strlen(head) + 10 + 2 + 2 + strlen(tail) + 10 + 2 + 5 + 2 + 1; - /* The output data is 4/3 times larger, plus a line end for each line. */ - pos += (4 * inlen / 3) + 2 * (4 * inlen / 3 / 64) + 1; - - if (outbuf && outlen < pos) { - gnutls_assert(); - *nwritten = pos; - return CDK_Too_Short; - } - - /* Only return the size of the output. */ - if (!outbuf) { - *nwritten = pos; - return 0; - } - - memset(outbuf, 0, outlen); - memcpy(outbuf, "-----", 5); - pos = 5; - memcpy(outbuf + pos, head, strlen(head)); - pos += strlen(head); - memcpy(outbuf + pos, "-----", 5); - pos += 5; - memcpy(outbuf + pos, le, strlen(le)); - pos += strlen(le); - memcpy(outbuf + pos, le, strlen(le)); - pos += strlen(le); - rest = inlen; - for (off = 0; off < inlen;) { - if (rest > 48) { - memcpy(tempbuf, inbuf + off, 48); - off += 48; - len = 48; - } else { - memcpy(tempbuf, inbuf + off, rest); - off += rest; - len = rest; - } - rest -= len; - - if (DIM(tempout)-1 < BASE64_ENCODE_RAW_LENGTH(len)) { - gnutls_assert(); - return CDK_File_Error; - } - - base64_encode_raw((uint8_t*)tempout, len, (uint8_t*)tempbuf); - tempout[BASE64_ENCODE_RAW_LENGTH(len)] = 0; - - memcpy(outbuf + pos, tempout, strlen(tempout)); - pos += strlen(tempout); - memcpy(outbuf + pos, le, strlen(le)); - pos += strlen(le); - } - - memcpy(outbuf + pos, "-----", 5); - pos += 5; - memcpy(outbuf + pos, tail, strlen(tail)); - pos += strlen(tail); - memcpy(outbuf + pos, "-----", 5); - pos += 5; - memcpy(outbuf + pos, le, strlen(le)); - pos += strlen(le); - outbuf[pos] = 0; - *nwritten = pos - 1; - return 0; -} diff --git a/lib/opencdk/context.h b/lib/opencdk/context.h deleted file mode 100644 index ba17d24d29..0000000000 --- a/lib/opencdk/context.h +++ /dev/null @@ -1,123 +0,0 @@ -/* context.h - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifndef CDK_CONTEXT_H -#define CDK_CONTEXT_H - -#include "types.h" - -struct cdk_listkey_s { - unsigned init:1; - cdk_stream_t inp; - cdk_keydb_hd_t db; - int type; - union { - char *patt; - cdk_strlist_t fpatt; - } u; - cdk_strlist_t t; -}; - - -struct cdk_s2k_s { - int mode; - byte hash_algo; - byte salt[8]; - u32 count; -}; - - -struct cdk_ctx_s { - int cipher_algo; - int digest_algo; - struct { - int algo; - int level; - } compress; - struct { - int mode; - int digest_algo; - } _s2k; - struct { - unsigned blockmode:1; - unsigned armor:1; - unsigned textmode:1; - unsigned compress:1; - unsigned mdc:1; - unsigned overwrite; - unsigned force_digest:1; - } opt; - struct { - cdk_pkt_seckey_t sk; - unsigned on:1; - } cache; - struct { - cdk_keydb_hd_t sec; - cdk_keydb_hd_t pub; - unsigned int close_db:1; - } db; - char *(*passphrase_cb) (void *uint8_t, const char *prompt); - void *passphrase_cb_value; -}; - -struct cdk_prefitem_s { - byte type; - byte value; -}; - -struct cdk_desig_revoker_s { - struct cdk_desig_revoker_s *next; - byte r_class; - byte algid; - byte fpr[KEY_FPR_LEN]; -}; - -struct cdk_subpkt_s { - struct cdk_subpkt_s *next; - u32 size; - byte type; - byte *d; -}; - -struct cdk_keylist_s { - struct cdk_keylist_s *next; - union { - cdk_pkt_pubkey_t pk; - cdk_pkt_seckey_t sk; - } key; - int version; - int type; -}; - -struct cdk_dek_s { - int algo; - int keylen; - int use_mdc; - byte key[32]; /* 256-bit */ -}; - -struct cdk_strlist_s { - struct cdk_strlist_s *next; - char *d; -}; - -#endif /* CDK_CONTEXT_H */ diff --git a/lib/opencdk/filters.h b/lib/opencdk/filters.h deleted file mode 100644 index e5a96d54ad..0000000000 --- a/lib/opencdk/filters.h +++ /dev/null @@ -1,102 +0,0 @@ -/* filters.h - Filter structs - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifndef CDK_FILTERS_H -#define CDK_FILTERS_H - -enum { - STREAMCTL_READ = 0, - STREAMCTL_WRITE = 1, - STREAMCTL_FREE = 2 -}; - -typedef struct { - cipher_hd_st hd; - digest_hd_st mdc; - int mdc_method; - u32 datalen; - struct { - size_t on; - off_t size; - off_t nleft; - } blkmode; - cdk_stream_t s; -} cipher_filter_t; - -typedef struct { - int digest_algo; - digest_hd_st md; - int md_initialized; -} md_filter_t; - -typedef struct { - const char *le; /* line endings */ - const char *hdrlines; - u32 crc; - int crc_okay; - int idx, idx2; -} armor_filter_t; - -typedef struct { - cdk_lit_format_t mode; - char *orig_filename; /* This original name of the input file. */ - char *filename; - digest_hd_st md; - int md_initialized; - struct { - size_t on; - off_t size; - } blkmode; -} literal_filter_t; - -typedef struct { - size_t inbufsize; - byte inbuf[8192]; - size_t outbufsize; - byte outbuf[8192]; - int algo; /* compress algo */ - int level; -} compress_filter_t; - -typedef struct { - const char *lf; -} text_filter_t; - - -/*-- armor.c -*/ -int _cdk_filter_armor(void *uint8_t, int ctl, FILE * in, FILE * out); - -/*-- cipher.c --*/ -cdk_error_t _cdk_filter_hash(void *uint8_t, int ctl, FILE * in, - FILE * out); -cdk_error_t _cdk_filter_cipher(void *uint8_t, int ctl, FILE * in, - FILE * out); - -/*-- literal.c --*/ -int _cdk_filter_literal(void *uint8_t, int ctl, FILE * in, FILE * out); -int _cdk_filter_text(void *uint8_t, int ctl, FILE * in, FILE * out); - -/*-- compress.c --*/ -cdk_error_t _cdk_filter_compress(void *uint8_t, int ctl, - FILE * in, FILE * out); - -#endif /* CDK_FILTERS_H */ diff --git a/lib/opencdk/kbnode.c b/lib/opencdk/kbnode.c deleted file mode 100644 index cad9beb882..0000000000 --- a/lib/opencdk/kbnode.c +++ /dev/null @@ -1,593 +0,0 @@ -/* kbnode.c - keyblock node utility functions - * Copyright (C) 1998-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - -#include "opencdk.h" -#include "main.h" -#include "packet.h" - - -/** - * cdk_kbnode_new: - * @pkt: the packet to add - * - * Allocates a new key node and adds a packet. - **/ -cdk_kbnode_t cdk_kbnode_new(cdk_packet_t pkt) -{ - cdk_kbnode_t n; - - n = cdk_calloc(1, sizeof *n); - if (!n) - return NULL; - n->pkt = pkt; - return n; -} - - -void _cdk_kbnode_clone(cdk_kbnode_t node) -{ - /* Mark the node as clone which means that the packet - will not be freed, just the node itself. */ - if (node) - node->is_cloned = 1; -} - - -/** - * cdk_kbnode_release: - * @n: the key node - * - * Releases the memory of the node. - **/ -void cdk_kbnode_release(cdk_kbnode_t node) -{ - cdk_kbnode_t n2; - - while (node) { - n2 = node->next; - if (!node->is_cloned) - cdk_pkt_release(node->pkt); - cdk_free(node); - node = n2; - } -} - - -/** - * cdk_kbnode_delete: - * @node: the key node - * - * Marks the given node as deleted. - **/ -void cdk_kbnode_delete(cdk_kbnode_t node) -{ - if (node) - node->is_deleted = 1; -} - - -/* Append NODE to ROOT. ROOT must exist! */ -void _cdk_kbnode_add(cdk_kbnode_t root, cdk_kbnode_t node) -{ - cdk_kbnode_t n1; - - for (n1 = root; n1->next; n1 = n1->next); - n1->next = node; -} - - -/** - * cdk_kbnode_insert: - * @root: the root key node - * @node: the node to add - * @pkttype: packet type - * - * Inserts @node into the list after @root but before a packet which is not of - * type @pkttype (only if @pkttype != 0). - **/ -void -cdk_kbnode_insert(cdk_kbnode_t root, cdk_kbnode_t node, - cdk_packet_type_t pkttype) -{ - if (!pkttype) { - node->next = root->next; - root->next = node; - } else { - cdk_kbnode_t n1; - - for (n1 = root; n1->next; n1 = n1->next) - if (pkttype != n1->next->pkt->pkttype) { - node->next = n1->next; - n1->next = node; - return; - } - /* No such packet, append */ - node->next = NULL; - n1->next = node; - } -} - - -/** - * cdk_kbnode_find_prev: - * @root: the root key node - * @node: the key node - * @pkttype: packet type - * - * Finds the previous node (if @pkttype = 0) or the previous node - * with pkttype @pkttype in the list starting with @root of @node. - **/ -cdk_kbnode_t -cdk_kbnode_find_prev(cdk_kbnode_t root, cdk_kbnode_t node, - cdk_packet_type_t pkttype) -{ - cdk_kbnode_t n1; - - for (n1 = NULL; root && root != node; root = root->next) { - if (!pkttype || root->pkt->pkttype == pkttype) - n1 = root; - } - return n1; -} - - -/** - * cdk_kbnode_find_next: - * @node: the key node - * @pkttype: packet type - * - * Ditto, but find the next packet. The behaviour is trivial if - * @pkttype is 0 but if it is specified, the next node with a packet - * of this type is returned. The function has some knowledge about - * the valid ordering of packets: e.g. if the next signature packet - * is requested, the function will not return one if it encounters - * a user-id. - **/ -cdk_kbnode_t -cdk_kbnode_find_next(cdk_kbnode_t node, cdk_packet_type_t pkttype) -{ - for (node = node->next; node; node = node->next) { - if (!pkttype) - return node; - else if (pkttype == CDK_PKT_USER_ID && - (node->pkt->pkttype == CDK_PKT_PUBLIC_KEY || - node->pkt->pkttype == CDK_PKT_SECRET_KEY)) - return NULL; - else if (pkttype == CDK_PKT_SIGNATURE && - (node->pkt->pkttype == CDK_PKT_USER_ID || - node->pkt->pkttype == CDK_PKT_PUBLIC_KEY || - node->pkt->pkttype == CDK_PKT_SECRET_KEY)) - return NULL; - else if (node->pkt->pkttype == pkttype) - return node; - } - return NULL; -} - - -/** - * cdk_kbnode_find: - * @node: the key node - * @pkttype: packet type - * - * Tries to find the next node with the packettype @pkttype. - **/ -cdk_kbnode_t cdk_kbnode_find(cdk_kbnode_t node, cdk_packet_type_t pkttype) -{ - for (; node; node = node->next) { - if (node->pkt->pkttype == pkttype) - return node; - } - return NULL; -} - - -/** - * cdk_kbnode_find_packet: - * @node: the key node - * @pkttype: packet type - * - * Same as cdk_kbnode_find but it returns the packet instead of the node. - **/ -cdk_packet_t -cdk_kbnode_find_packet(cdk_kbnode_t node, cdk_packet_type_t pkttype) -{ - cdk_kbnode_t res; - - res = cdk_kbnode_find(node, pkttype); - return res ? res->pkt : NULL; -} - - -/** - * cdk_kbnode_walk: - * - * Walks through a list of kbnodes. This function returns - * the next kbnode for each call; before using the function the first - * time, the caller must set CONTEXT to NULL (This has simply the effect - * to start with ROOT). - */ -cdk_kbnode_t -cdk_kbnode_walk(cdk_kbnode_t root, cdk_kbnode_t * ctx, int all) -{ - cdk_kbnode_t n; - - do { - if (!*ctx) { - *ctx = root; - n = root; - } else { - n = (*ctx)->next; - *ctx = n; - } - } - while (!all && n && n->is_deleted); - return n; -} - - -/** - * cdk_kbnode_commit: - * @root: the nodes - * - * Commits changes made to the kblist at ROOT. Note that ROOT my change, - * and it is therefore passed by reference. - * The function has the effect of removing all nodes marked as deleted. - * - * Returns: true if any node has been changed - */ -int cdk_kbnode_commit(cdk_kbnode_t * root) -{ - cdk_kbnode_t n, nl; - int changed = 0; - - for (n = *root, nl = NULL; n; n = nl->next) { - if (n->is_deleted) { - if (n == *root) - *root = nl = n->next; - else - nl->next = n->next; - if (!n->is_cloned) - cdk_pkt_release(n->pkt); - cdk_free(n); - changed = 1; - } else - nl = n; - } - return changed; -} - - -/** - * cdk_kbnode_remove: - * @root: the root node - * @node: the node to delete - * - * Removes a node from the root node. - */ -void cdk_kbnode_remove(cdk_kbnode_t * root, cdk_kbnode_t node) -{ - cdk_kbnode_t n, nl; - - for (n = *root, nl = NULL; n; n = nl->next) { - if (n == node) { - if (n == *root) - *root = nl = n->next; - else - nl->next = n->next; - if (!n->is_cloned) - cdk_pkt_release(n->pkt); - cdk_free(n); - } else - nl = n; - } -} - - - -/** - * cdk_cdknode_move: - * @root: root node - * @node: the node to move - * @where: destination place where to move the node. - * - * Moves NODE behind right after WHERE or to the beginning if WHERE is NULL. - */ -void -cdk_kbnode_move(cdk_kbnode_t * root, cdk_kbnode_t node, cdk_kbnode_t where) -{ - cdk_kbnode_t tmp, prev; - - if (!root || !*root || !node) - return; - for (prev = *root; prev && prev->next != node; prev = prev->next); - if (!prev) - return; /* Node is not in the list */ - - if (!where) { /* Move node before root */ - if (node == *root) - return; - prev->next = node->next; - node->next = *root; - *root = node; - return; - } - if (node == where) /* Move it after where. */ - return; - tmp = node->next; - node->next = where->next; - where->next = node; - prev->next = tmp; -} - - -/** - * cdk_kbnode_get_packet: - * @node: the key node - * - * Get packet in node. - * - * Returns: the packet which is stored inside the node in @node. - **/ -cdk_packet_t cdk_kbnode_get_packet(cdk_kbnode_t node) -{ - if (node) - return node->pkt; - return NULL; -} - - -/** - * cdk_kbnode_read_from_mem: - * @ret_node: the new key node - * @armor: whether base64 or not - * @buf: the buffer which stores the key sequence - * @buflen: the length of the buffer - * @public: non-zero if reading a public key - * - * Tries to read a key node from the memory buffer @buf. - **/ -cdk_error_t -cdk_kbnode_read_from_mem(cdk_kbnode_t * ret_node, - int armor, const byte * buf, size_t buflen, - unsigned public) -{ - cdk_stream_t inp; - cdk_error_t rc; - - if (!ret_node || !buf) - return CDK_Inv_Value; - - *ret_node = NULL; - if (!buflen) - return gnutls_assert_val(CDK_Too_Short); - - rc = cdk_stream_tmp_from_mem(buf, buflen, &inp); - if (rc) - return gnutls_assert_val(rc); - - if (armor) - cdk_stream_set_armor_flag(inp, 0); - - rc = cdk_keydb_get_keyblock(inp, ret_node, public); - if (rc) - gnutls_assert(); - cdk_stream_close(inp); - return rc; -} - - -/** - * cdk_kbnode_write_to_mem_alloc: - * @node: the key node - * @r_buf: buffer to hold the raw data - * @r_buflen: buffer length of the allocated raw data. - * - * The function acts similar to cdk_kbnode_write_to_mem but - * it allocates the buffer to avoid the lengthy second run. - */ -cdk_error_t -cdk_kbnode_write_to_mem_alloc(cdk_kbnode_t node, - byte ** r_buf, size_t * r_buflen) -{ - cdk_kbnode_t n; - cdk_stream_t s; - cdk_error_t rc; - ssize_t len; - - if (!node || !r_buf || !r_buflen) { - gnutls_assert(); - return CDK_Inv_Value; - } - - *r_buf = NULL; - *r_buflen = 0; - - rc = cdk_stream_tmp_new(&s); - if (rc) { - gnutls_assert(); - return rc; - } - - for (n = node; n; n = n->next) { - /* Skip all packets which cannot occur in a key composition. */ - if (n->pkt->pkttype != CDK_PKT_PUBLIC_KEY && - n->pkt->pkttype != CDK_PKT_PUBLIC_SUBKEY && - n->pkt->pkttype != CDK_PKT_SECRET_KEY && - n->pkt->pkttype != CDK_PKT_SECRET_SUBKEY && - n->pkt->pkttype != CDK_PKT_SIGNATURE && - n->pkt->pkttype != CDK_PKT_USER_ID && - n->pkt->pkttype != CDK_PKT_ATTRIBUTE) - continue; - rc = cdk_pkt_write(s, n->pkt); - if (rc) { - cdk_stream_close(s); - gnutls_assert(); - return rc; - } - } - - cdk_stream_seek(s, 0); - len = cdk_stream_get_length(s); - if (len == 0) - return gnutls_assert_val(CDK_General_Error); - - *r_buf = cdk_calloc(1, len); - *r_buflen = cdk_stream_read(s, *r_buf, len); - cdk_stream_close(s); - return 0; -} - - -/** - * cdk_kbnode_write_to_mem: - * @node: the key node - * @buf: the buffer to store the node data - * @r_nbytes: the new length of the buffer. - * - * Tries to write the contents of the key node to the buffer @buf and - * return the length of it in @r_nbytes. If buf is (0), only the - * length of the node is calculated and returned in @r_nbytes. - * Whenever it is possible, the cdk_kbnode_write_to_mem_alloc should be used. - **/ -cdk_error_t -cdk_kbnode_write_to_mem(cdk_kbnode_t node, byte * buf, size_t * r_nbytes) -{ - cdk_kbnode_t n; - cdk_stream_t s; - cdk_error_t rc; - ssize_t len; - - if (!node || !r_nbytes) { - gnutls_assert(); - return CDK_Inv_Value; - } - - rc = cdk_stream_tmp_new(&s); - if (rc) { - gnutls_assert(); - return rc; - } - - for (n = node; n; n = n->next) { - /* Skip all packets which cannot occur in a key composition. */ - if (n->pkt->pkttype != CDK_PKT_PUBLIC_KEY && - n->pkt->pkttype != CDK_PKT_PUBLIC_SUBKEY && - n->pkt->pkttype != CDK_PKT_SECRET_KEY && - n->pkt->pkttype != CDK_PKT_SECRET_SUBKEY && - n->pkt->pkttype != CDK_PKT_SIGNATURE && - n->pkt->pkttype != CDK_PKT_USER_ID && - n->pkt->pkttype != CDK_PKT_ATTRIBUTE) - continue; - rc = cdk_pkt_write(s, n->pkt); - if (rc) { - cdk_stream_close(s); - gnutls_assert(); - return rc; - } - } - - cdk_stream_seek(s, 0); - - len = cdk_stream_get_length(s); - if (len == 0) - return gnutls_assert_val(CDK_General_Error); - - if (!buf) { - *r_nbytes = len; /* Only return the length of the buffer */ - cdk_stream_close(s); - return 0; - } - if (*r_nbytes < (size_t)len) { - *r_nbytes = len; - rc = CDK_Too_Short; - } - if (!rc) - *r_nbytes = cdk_stream_read(s, buf, len); - else - gnutls_assert(); - cdk_stream_close(s); - return rc; -} - - -/** - * cdk_kbnode_hash: - * @node: the key node - * @hashctx: uint8_t pointer to the hash context - * @is_v4: OpenPGP signature (yes=1, no=0) - * @pkttype: packet type to hash (if (0) use the packet type from the node) - * @flags: flags which depend on the operation - * - * Hashes the key node contents. Two modes are supported. If the packet - * type is used (!= 0) then the function searches the first node with - * this type. Otherwise the node is seen as a single node and the type - * is extracted from it. - **/ -cdk_error_t -cdk_kbnode_hash(cdk_kbnode_t node, digest_hd_st * md, int is_v4, - cdk_packet_type_t pkttype, int flags) -{ - cdk_packet_t pkt; - - if (!node || !md) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (!pkttype) { - pkt = cdk_kbnode_get_packet(node); - pkttype = pkt->pkttype; - } else { - pkt = cdk_kbnode_find_packet(node, pkttype); - if (!pkt) { - gnutls_assert(); - return CDK_Inv_Packet; - } - } - - switch (pkttype) { - case CDK_PKT_PUBLIC_KEY: - case CDK_PKT_PUBLIC_SUBKEY: - _cdk_hash_pubkey(pkt->pkt.public_key, md, flags & 1); - break; - - case CDK_PKT_USER_ID: - _cdk_hash_userid(pkt->pkt.user_id, is_v4, md); - break; - - case CDK_PKT_SIGNATURE: - _cdk_hash_sig_data(pkt->pkt.signature, md); - break; - - default: - gnutls_assert(); - return CDK_Inv_Mode; - } - return 0; -} diff --git a/lib/opencdk/keydb.c b/lib/opencdk/keydb.c deleted file mode 100644 index 00351bc8d9..0000000000 --- a/lib/opencdk/keydb.c +++ /dev/null @@ -1,2073 +0,0 @@ -/* keydb.c - Key database routines - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include - -#include "opencdk.h" -#include "main.h" -#include "packet.h" -#include "filters.h" -#include "stream.h" -#include "keydb.h" - -#define KEYID_CMP(a, b) ((a[0]) == (b[0]) && (a[1]) == (b[1])) - -static int classify_data(const byte * buf, size_t len); -static cdk_kbnode_t find_selfsig_node(cdk_kbnode_t key, - cdk_pkt_pubkey_t pk); - -static char *keydb_idx_mkname(const char *file) -{ - static const char *fmt = "%s.idx"; - char *fname; - size_t len = strlen(file) + strlen(fmt); - - fname = cdk_calloc(1, len + 1); - if (!fname) - return NULL; - if (snprintf(fname, len, fmt, file) <= 0) - return NULL; - return fname; -} - - -/* This functions builds an index of the keyring into a separate file - with the name keyring.ext.idx. It contains the offset of all public- - and public subkeys. The format of the file is: - -------- - 4 octets offset of the packet - 8 octets keyid - 20 octets fingerprint - -------- - We store the keyid and the fingerprint due to the fact we can't get - the keyid from a v3 fingerprint directly. -*/ -static cdk_error_t keydb_idx_build(const char *file) -{ - cdk_packet_t pkt; - cdk_stream_t inp, out = NULL; - byte buf[4 + 8 + KEY_FPR_LEN]; - char *idx_name; - u32 keyid[2]; - cdk_error_t rc; - - if (!file) { - gnutls_assert(); - return CDK_Inv_Value; - } - - rc = cdk_stream_open(file, &inp); - if (rc) { - gnutls_assert(); - return rc; - } - - idx_name = keydb_idx_mkname(file); - if (!idx_name) { - cdk_stream_close(inp); - gnutls_assert(); - return CDK_Out_Of_Core; - } - rc = cdk_stream_create(idx_name, &out); - cdk_free(idx_name); - if (rc) { - cdk_stream_close(inp); - gnutls_assert(); - return rc; - } - - cdk_pkt_new(&pkt); - while (!cdk_stream_eof(inp)) { - off_t pos = cdk_stream_tell(inp); - - rc = cdk_pkt_read(inp, pkt, 1); - if (rc) { - _cdk_log_debug - ("index build failed packet off=%lu\n", - (unsigned long) pos); - /* FIXME: The index is incomplete */ - break; - } - if (pkt->pkttype == CDK_PKT_PUBLIC_KEY || - pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY) { - _cdk_u32tobuf(pos, buf); - cdk_pk_get_keyid(pkt->pkt.public_key, keyid); - _cdk_u32tobuf(keyid[0], buf + 4); - _cdk_u32tobuf(keyid[1], buf + 8); - cdk_pk_get_fingerprint(pkt->pkt.public_key, - buf + 12); - cdk_stream_write(out, buf, 4 + 8 + KEY_FPR_LEN); - } - cdk_pkt_free(pkt); - } - - cdk_pkt_release(pkt); - - cdk_stream_close(out); - cdk_stream_close(inp); - gnutls_assert(); - return rc; -} - - -/** - * cdk_keydb_idx_rebuild: - * @hd: key database handle - * - * Rebuild the key index files for the given key database. - **/ -cdk_error_t -cdk_keydb_idx_rebuild(cdk_keydb_hd_t db, cdk_keydb_search_t dbs) -{ - struct stat stbuf; - char *tmp_idx_name; - cdk_error_t rc; - int err; - - if (!db || !db->name || !dbs) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (db->secret) - return 0; - - tmp_idx_name = keydb_idx_mkname(db->name); - if (!tmp_idx_name) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - err = stat(tmp_idx_name, &stbuf); - cdk_free(tmp_idx_name); - /* This function expects an existing index which can be rebuild, - if no index exists we do not build one and just return. */ - if (err) - return 0; - - cdk_stream_close(dbs->idx); - dbs->idx = NULL; - if (!dbs->idx_name) { - dbs->idx_name = keydb_idx_mkname(db->name); - if (!dbs->idx_name) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - } - rc = keydb_idx_build(db->name); - if (!rc) - rc = cdk_stream_open(dbs->idx_name, &dbs->idx); - else - gnutls_assert(); - return rc; -} - - -/** - * cdk_keydb_new_from_mem: - * @r_hd: The keydb output handle. - * @secret: does the stream contain secret key data - * @armor: the stream is base64 - * @data: The raw key data. - * @datlen: The length of the raw data. - * - * Create a new keyring db handle from the contents of a buffer. - */ -cdk_error_t -cdk_keydb_new_from_mem(cdk_keydb_hd_t * r_db, int secret, int armor, - const void *data, size_t datlen) -{ - cdk_keydb_hd_t db; - cdk_error_t rc; - - if (!r_db) { - gnutls_assert(); - return CDK_Inv_Value; - } - *r_db = NULL; - db = calloc(1, sizeof *db); - rc = cdk_stream_tmp_from_mem(data, datlen, &db->fp); - if (!db->fp) { - cdk_free(db); - gnutls_assert(); - return rc; - } - - if (armor) - cdk_stream_set_armor_flag(db->fp, 0); - db->type = CDK_DBTYPE_DATA; - db->secret = secret; - *r_db = db; - return 0; -} - -/** - * cdk_keydb_free: - * @hd: the keydb object - * - * Free the keydb object. - **/ -void cdk_keydb_free(cdk_keydb_hd_t hd) -{ - if (!hd) - return; - - if (hd->name) { - cdk_free(hd->name); - hd->name = NULL; - } - - if (hd->fp && !hd->fp_ref) { - cdk_stream_close(hd->fp); - hd->fp = NULL; - } - - - hd->isopen = 0; - hd->secret = 0; - cdk_free(hd); -} - - -static cdk_error_t -_cdk_keydb_open(cdk_keydb_hd_t hd, cdk_stream_t * ret_kr) -{ - cdk_error_t rc; - cdk_stream_t kr; - - if (!hd || !ret_kr) { - gnutls_assert(); - return CDK_Inv_Value; - } - - rc = 0; - if ((hd->type == CDK_DBTYPE_DATA) - && hd->fp) { - kr = hd->fp; - cdk_stream_seek(kr, 0); - } else if (hd->type == CDK_DBTYPE_PK_KEYRING || - hd->type == CDK_DBTYPE_SK_KEYRING) { - rc = cdk_stream_open(hd->name, &kr); - - if (rc) - goto leave; - } else { - gnutls_assert(); - return CDK_Inv_Mode; - } - - leave: - - *ret_kr = kr; - return rc; -} - - -static int find_by_keyid(cdk_kbnode_t knode, cdk_keydb_search_t ks) -{ - cdk_kbnode_t node; - u32 keyid[2]; - - for (node = knode; node; node = node->next) { - if (node->pkt->pkttype == CDK_PKT_PUBLIC_KEY || - node->pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY || - node->pkt->pkttype == CDK_PKT_SECRET_KEY || - node->pkt->pkttype == CDK_PKT_SECRET_SUBKEY) { - _cdk_pkt_get_keyid(node->pkt, keyid); - switch (ks->type) { - case CDK_DBSEARCH_SHORT_KEYID: - if (keyid[1] == ks->u.keyid[1]) - return 1; - break; - - case CDK_DBSEARCH_KEYID: - if (KEYID_CMP(keyid, ks->u.keyid)) - return 1; - break; - - default: - _cdk_log_debug - ("find_by_keyid: invalid mode = %d\n", - ks->type); - return 0; - } - } - } - return 0; -} - - -static int find_by_fpr(cdk_kbnode_t knode, cdk_keydb_search_t ks) -{ - cdk_kbnode_t node; - byte fpr[KEY_FPR_LEN]; - - if (ks->type != CDK_DBSEARCH_FPR) - return 0; - - for (node = knode; node; node = node->next) { - if (node->pkt->pkttype == CDK_PKT_PUBLIC_KEY || - node->pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY || - node->pkt->pkttype == CDK_PKT_SECRET_KEY || - node->pkt->pkttype == CDK_PKT_SECRET_SUBKEY) { - _cdk_pkt_get_fingerprint(node->pkt, fpr); - if (!memcmp(ks->u.fpr, fpr, KEY_FPR_LEN)) - return 1; - break; - } - } - - return 0; -} - - -static int find_by_pattern(cdk_kbnode_t knode, cdk_keydb_search_t ks) -{ - cdk_kbnode_t node; - size_t uidlen; - char *name; - - for (node = knode; node; node = node->next) { - if (node->pkt->pkttype != CDK_PKT_USER_ID) - continue; - if (node->pkt->pkt.user_id->attrib_img != NULL) - continue; /* Skip attribute packets. */ - uidlen = node->pkt->pkt.user_id->len; - name = node->pkt->pkt.user_id->name; - switch (ks->type) { - case CDK_DBSEARCH_EXACT: - if (name && - (strlen(ks->u.pattern) == uidlen && - !strncmp(ks->u.pattern, name, uidlen))) - return 1; - break; - - case CDK_DBSEARCH_SUBSTR: - if (uidlen > 65536) - break; - if (name && strlen(ks->u.pattern) > uidlen) - break; - if (name - && _cdk_memistr(name, uidlen, ks->u.pattern)) - return 1; - break; - - default: /* Invalid mode */ - return 0; - } - } - return 0; -} - -static cdk_error_t idx_init(cdk_keydb_hd_t db, cdk_keydb_search_t dbs) -{ - cdk_error_t ec, rc = 0; - - if (cdk_stream_get_length(db->fp) < 524288) { - dbs->no_cache = 1; - goto leave; - } - - dbs->idx_name = keydb_idx_mkname(db->name); - if (!dbs->idx_name) { - rc = CDK_Out_Of_Core; - goto leave; - } - ec = cdk_stream_open(dbs->idx_name, &dbs->idx); - - if (ec && !db->secret) { - rc = keydb_idx_build(db->name); - if (!rc) - rc = cdk_stream_open(dbs->idx_name, &dbs->idx); - if (!rc) { - _cdk_log_debug("create key index table\n"); - } else { - /* This is no real error, it just means we can't create - the index at the given directory. maybe we've no write - access. in this case, we simply disable the index. */ - _cdk_log_debug("disable key index table err=%d\n", - rc); - rc = 0; - dbs->no_cache = 1; - } - } - - leave: - - return rc; -} - -/** - * cdk_keydb_search_start: - * @st: search handle - * @db: key database handle - * @type: specifies the search type - * @desc: description which depends on the type - * - * Create a new keydb search object. - **/ -cdk_error_t -cdk_keydb_search_start(cdk_keydb_search_t * st, cdk_keydb_hd_t db, - int type, void *desc) -{ - u32 *keyid; - char *p, tmp[3]; - int i; - cdk_error_t rc; - - if (!db) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (type != CDK_DBSEARCH_NEXT && !desc) { - gnutls_assert(); - return CDK_Inv_Mode; - } - - *st = cdk_calloc(1, sizeof(cdk_keydb_search_s)); - if (!(*st)) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - - rc = idx_init(db, *st); - if (rc != CDK_Success) { - free(*st); - gnutls_assert(); - return rc; - } - - (*st)->type = type; - switch (type) { - case CDK_DBSEARCH_EXACT: - case CDK_DBSEARCH_SUBSTR: - cdk_free((*st)->u.pattern); - (*st)->u.pattern = cdk_strdup(desc); - if (!(*st)->u.pattern) { - cdk_free(*st); - gnutls_assert(); - return CDK_Out_Of_Core; - } - break; - - case CDK_DBSEARCH_SHORT_KEYID: - keyid = desc; - (*st)->u.keyid[1] = keyid[0]; - break; - - case CDK_DBSEARCH_KEYID: - keyid = desc; - (*st)->u.keyid[0] = keyid[0]; - (*st)->u.keyid[1] = keyid[1]; - break; - - case CDK_DBSEARCH_FPR: - memcpy((*st)->u.fpr, desc, KEY_FPR_LEN); - break; - - case CDK_DBSEARCH_NEXT: - break; - - case CDK_DBSEARCH_AUTO: - /* Override the type with the actual db search type. */ - (*st)->type = classify_data(desc, strlen(desc)); - switch ((*st)->type) { - case CDK_DBSEARCH_SUBSTR: - case CDK_DBSEARCH_EXACT: - cdk_free((*st)->u.pattern); - p = (*st)->u.pattern = cdk_strdup(desc); - if (!p) { - cdk_free(*st); - gnutls_assert(); - return CDK_Out_Of_Core; - } - break; - - case CDK_DBSEARCH_SHORT_KEYID: - case CDK_DBSEARCH_KEYID: - p = desc; - if (!strncmp(p, "0x", 2)) - p += 2; - if (strlen(p) == 8) { - (*st)->u.keyid[0] = 0; - (*st)->u.keyid[1] = strtoul(p, NULL, 16); - } else if (strlen(p) == 16) { - (*st)->u.keyid[0] = strtoul(p, NULL, 16); - (*st)->u.keyid[1] = - strtoul(p + 8, NULL, 16); - } else { /* Invalid key ID object. */ - cdk_free(*st); - gnutls_assert(); - return CDK_Inv_Mode; - } - break; - - case CDK_DBSEARCH_FPR: - p = desc; - if (strlen(p) != 2 * KEY_FPR_LEN) { - cdk_free(*st); - gnutls_assert(); - return CDK_Inv_Mode; - } - for (i = 0; i < KEY_FPR_LEN; i++) { - tmp[0] = p[2 * i]; - tmp[1] = p[2 * i + 1]; - tmp[2] = 0x00; - (*st)->u.fpr[i] = strtoul(tmp, NULL, 16); - } - break; - } - break; - - default: - cdk_free(*st); - _cdk_log_debug - ("cdk_keydb_search_start: invalid mode = %d\n", type); - gnutls_assert(); - return CDK_Inv_Mode; - } - - return 0; -} - -void cdk_keydb_search_release(cdk_keydb_search_t st) -{ - if (st == NULL) - return; - - if (st->idx) - cdk_stream_close(st->idx); - - if (st->type == CDK_DBSEARCH_EXACT - || st->type == CDK_DBSEARCH_SUBSTR) - cdk_free(st->u.pattern); - - cdk_free(st); -} - -/** - * cdk_keydb_search: - * @st: the search handle - * @hd: the keydb object - * @ret_key: kbnode object to store the key - * - * Search for a key in the given keyring. The search mode is handled - * via @ks. If the key was found, @ret_key contains the key data. - **/ -cdk_error_t -cdk_keydb_search(cdk_keydb_search_t st, cdk_keydb_hd_t hd, - cdk_kbnode_t * ret_key) -{ - cdk_stream_t kr; - cdk_kbnode_t knode; - cdk_error_t rc = 0; - int key_found = 0; - - if (!hd || !ret_key || !st) { - gnutls_assert(); - return CDK_Inv_Value; - } - - *ret_key = NULL; - kr = NULL; - - rc = _cdk_keydb_open(hd, &kr); - if (rc) { - gnutls_assert(); - return rc; - } - - knode = NULL; - - while (!key_found && !rc) { - if (st->type == CDK_DBSEARCH_NEXT) - cdk_stream_seek(kr, st->off); - - rc = cdk_keydb_get_keyblock(kr, &knode, 1); - - if (rc) { - if (rc == CDK_EOF) - break; - else { - gnutls_assert(); - return rc; - } - } - - switch (st->type) { - case CDK_DBSEARCH_SHORT_KEYID: - case CDK_DBSEARCH_KEYID: - key_found = find_by_keyid(knode, st); - break; - - case CDK_DBSEARCH_FPR: - key_found = find_by_fpr(knode, st); - break; - - case CDK_DBSEARCH_EXACT: - case CDK_DBSEARCH_SUBSTR: - key_found = find_by_pattern(knode, st); - break; - - case CDK_DBSEARCH_NEXT: - st->off = cdk_stream_tell(kr); - key_found = knode ? 1 : 0; - break; - } - - if (key_found) { - break; - } - - cdk_kbnode_release(knode); - knode = NULL; - } - - if (key_found && rc == CDK_EOF) - rc = 0; - else if (rc == CDK_EOF && !key_found) { - gnutls_assert(); - rc = CDK_Error_No_Key; - } - *ret_key = key_found ? knode : NULL; - return rc; -} - -cdk_error_t -cdk_keydb_get_bykeyid(cdk_keydb_hd_t hd, u32 * keyid, - cdk_kbnode_t * ret_key) -{ - cdk_error_t rc; - cdk_keydb_search_t st; - - if (!hd || !keyid || !ret_key) { - gnutls_assert(); - return CDK_Inv_Value; - } - - rc = cdk_keydb_search_start(&st, hd, CDK_DBSEARCH_KEYID, keyid); - if (!rc) - rc = cdk_keydb_search(st, hd, ret_key); - - cdk_keydb_search_release(st); - return rc; -} - - -cdk_error_t -cdk_keydb_get_byfpr(cdk_keydb_hd_t hd, const byte * fpr, - cdk_kbnode_t * r_key) -{ - cdk_error_t rc; - cdk_keydb_search_t st; - - if (!hd || !fpr || !r_key) { - gnutls_assert(); - return CDK_Inv_Value; - } - - rc = cdk_keydb_search_start(&st, hd, CDK_DBSEARCH_FPR, - (byte *) fpr); - if (!rc) - rc = cdk_keydb_search(st, hd, r_key); - - cdk_keydb_search_release(st); - return rc; -} - - -cdk_error_t -cdk_keydb_get_bypattern(cdk_keydb_hd_t hd, const char *patt, - cdk_kbnode_t * ret_key) -{ - cdk_error_t rc; - cdk_keydb_search_t st; - - if (!hd || !patt || !ret_key) { - gnutls_assert(); - return CDK_Inv_Value; - } - - rc = cdk_keydb_search_start(&st, hd, CDK_DBSEARCH_SUBSTR, - (char *) patt); - if (!rc) - rc = cdk_keydb_search(st, hd, ret_key); - - if (rc) - gnutls_assert(); - - cdk_keydb_search_release(st); - return rc; -} - - -static int keydb_check_key(cdk_packet_t pkt) -{ - cdk_pkt_pubkey_t pk; - int is_sk, valid; - - if (pkt->pkttype == CDK_PKT_PUBLIC_KEY || - pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY) { - pk = pkt->pkt.public_key; - is_sk = 0; - } else if (pkt->pkttype == CDK_PKT_SECRET_KEY || - pkt->pkttype == CDK_PKT_SECRET_SUBKEY) { - pk = pkt->pkt.secret_key->pk; - is_sk = 1; - } else /* No key object. */ - return 0; - valid = !pk->is_revoked && !pk->has_expired; - if (is_sk) - return valid; - return valid && !pk->is_invalid; -} - - -/* Find the first kbnode with the requested packet type - that represents a valid key. */ -static cdk_kbnode_t -kbnode_find_valid(cdk_kbnode_t root, cdk_packet_type_t pkttype) -{ - cdk_kbnode_t n; - - for (n = root; n; n = n->next) { - if (n->pkt->pkttype != pkttype) - continue; - if (keydb_check_key(n->pkt)) - return n; - } - - return NULL; -} - - -static cdk_kbnode_t -keydb_find_byusage(cdk_kbnode_t root, int req_usage, int is_pk) -{ - cdk_kbnode_t node, key; - int req_type; - long timestamp; - - req_type = is_pk ? CDK_PKT_PUBLIC_KEY : CDK_PKT_SECRET_KEY; - if (!req_usage) - return kbnode_find_valid(root, req_type); - - node = cdk_kbnode_find(root, req_type); - if (node && !keydb_check_key(node->pkt)) - return NULL; - - key = NULL; - timestamp = 0; - /* We iteratre over the all nodes and search for keys or - subkeys which match the usage and which are not invalid. - A timestamp is used to figure out the newest valid key. */ - for (node = root; node; node = node->next) { - if (is_pk && (node->pkt->pkttype == CDK_PKT_PUBLIC_KEY || - node->pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY) - && keydb_check_key(node->pkt) - && (node->pkt->pkt.public_key-> - pubkey_usage & req_usage)) { - if (node->pkt->pkt.public_key->timestamp > - timestamp) - key = node; - } - if (!is_pk && (node->pkt->pkttype == CDK_PKT_SECRET_KEY || - node->pkt->pkttype == CDK_PKT_SECRET_SUBKEY) - && keydb_check_key(node->pkt) - && (node->pkt->pkt.secret_key->pk-> - pubkey_usage & req_usage)) { - if (node->pkt->pkt.secret_key->pk->timestamp > - timestamp) - key = node; - } - - } - return key; -} - - -static cdk_kbnode_t -keydb_find_bykeyid(cdk_kbnode_t root, const u32 * keyid, int search_mode) -{ - cdk_kbnode_t node; - u32 kid[2]; - - for (node = root; node; node = node->next) { - if (!_cdk_pkt_get_keyid(node->pkt, kid)) - continue; - if (search_mode == CDK_DBSEARCH_SHORT_KEYID - && kid[1] == keyid[1]) - return node; - else if (kid[0] == keyid[0] && kid[1] == keyid[1]) - return node; - } - return NULL; -} - - -cdk_error_t -_cdk_keydb_get_sk_byusage(cdk_keydb_hd_t hd, const char *name, - cdk_seckey_t * ret_sk, int usage) -{ - cdk_kbnode_t knode = NULL; - cdk_kbnode_t node, sk_node, pk_node; - cdk_pkt_seckey_t sk; - cdk_error_t rc; - const char *s; - int pkttype; - cdk_keydb_search_t st; - - if (!ret_sk || !usage) { - gnutls_assert(); - return CDK_Inv_Value; - } - - if (!hd) { - gnutls_assert(); - return CDK_Error_No_Keyring; - } - - *ret_sk = NULL; - rc = cdk_keydb_search_start(&st, hd, CDK_DBSEARCH_AUTO, - (char *) name); - if (rc) { - gnutls_assert(); - return rc; - } - - rc = cdk_keydb_search(st, hd, &knode); - if (rc) { - gnutls_assert(); - return rc; - } - - cdk_keydb_search_release(st); - - sk_node = keydb_find_byusage(knode, usage, 0); - if (!sk_node) { - cdk_kbnode_release(knode); - gnutls_assert(); - return CDK_Unusable_Key; - } - - /* We clone the node with the secret key to avoid that the - packet will be released. */ - _cdk_kbnode_clone(sk_node); - sk = sk_node->pkt->pkt.secret_key; - - for (node = knode; node; node = node->next) { - if (node->pkt->pkttype == CDK_PKT_USER_ID) { - s = node->pkt->pkt.user_id->name; - if (sk && !sk->pk->uid - && _cdk_memistr(s, strlen(s), name)) { - _cdk_copy_userid(&sk->pk->uid, - node->pkt->pkt.user_id); - break; - } - } - } - - /* To find the self signature, we need the primary public key because - the selected secret key might be different from the primary key. */ - pk_node = cdk_kbnode_find(knode, CDK_PKT_SECRET_KEY); - if (!pk_node) { - cdk_kbnode_release(knode); - gnutls_assert(); - return CDK_Unusable_Key; - } - node = find_selfsig_node(knode, pk_node->pkt->pkt.secret_key->pk); - if (sk && sk->pk && sk->pk->uid && node) - _cdk_copy_signature(&sk->pk->uid->selfsig, - node->pkt->pkt.signature); - - /* We only release the outer packet. */ - _cdk_pkt_detach_free(sk_node->pkt, &pkttype, (void *) &sk); - cdk_kbnode_release(knode); - *ret_sk = sk; - return rc; -} - - -cdk_error_t -_cdk_keydb_get_pk_byusage(cdk_keydb_hd_t hd, const char *name, - cdk_pubkey_t * ret_pk, int usage) -{ - cdk_kbnode_t knode, node, pk_node; - cdk_pkt_pubkey_t pk; - const char *s; - cdk_error_t rc; - cdk_keydb_search_t st; - - if (!ret_pk || !usage) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (!hd) { - gnutls_assert(); - return CDK_Error_No_Keyring; - } - - *ret_pk = NULL; - rc = cdk_keydb_search_start(&st, hd, CDK_DBSEARCH_AUTO, - (char *) name); - if (!rc) - rc = cdk_keydb_search(st, hd, &knode); - if (rc) { - gnutls_assert(); - return rc; - } - - cdk_keydb_search_release(st); - - node = keydb_find_byusage(knode, usage, 1); - if (!node) { - cdk_kbnode_release(knode); - gnutls_assert(); - return CDK_Unusable_Key; - } - - pk = NULL; - _cdk_copy_pubkey(&pk, node->pkt->pkt.public_key); - for (node = knode; node; node = node->next) { - if (node->pkt->pkttype == CDK_PKT_USER_ID) { - s = node->pkt->pkt.user_id->name; - if (pk && !pk->uid - && _cdk_memistr(s, strlen(s), name)) { - _cdk_copy_userid(&pk->uid, - node->pkt->pkt.user_id); - break; - } - } - } - - /* Same as in the sk code, the selected key can be a sub key - and thus we need the primary key to find the self sig. */ - pk_node = cdk_kbnode_find(knode, CDK_PKT_PUBLIC_KEY); - if (!pk_node) { - cdk_kbnode_release(knode); - gnutls_assert(); - return CDK_Unusable_Key; - } - node = find_selfsig_node(knode, pk_node->pkt->pkt.public_key); - if (pk && pk->uid && node) - _cdk_copy_signature(&pk->uid->selfsig, - node->pkt->pkt.signature); - cdk_kbnode_release(knode); - - *ret_pk = pk; - return rc; -} - - -/** - * cdk_keydb_get_pk: - * @hd: key db handle - * @keyid: keyid of the key - * @r_pk: the allocated public key - * - * Perform a key database search by keyid and return the raw public - * key without any signatures or user id's. - **/ -cdk_error_t -cdk_keydb_get_pk(cdk_keydb_hd_t hd, u32 * keyid, cdk_pubkey_t * r_pk) -{ - cdk_kbnode_t knode = NULL, node; - cdk_pubkey_t pk; - cdk_error_t rc; - size_t s_type; - int pkttype; - cdk_keydb_search_t st; - - if (!keyid || !r_pk) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (!hd) { - gnutls_assert(); - return CDK_Error_No_Keyring; - } - - *r_pk = NULL; - s_type = !keyid[0] ? CDK_DBSEARCH_SHORT_KEYID : CDK_DBSEARCH_KEYID; - rc = cdk_keydb_search_start(&st, hd, s_type, keyid); - if (rc) { - gnutls_assert(); - return rc; - } - rc = cdk_keydb_search(st, hd, &knode); - cdk_keydb_search_release(st); - if (rc) { - gnutls_assert(); - return rc; - } - - node = keydb_find_bykeyid(knode, keyid, s_type); - if (!node) { - cdk_kbnode_release(knode); - gnutls_assert(); - return CDK_Error_No_Key; - } - - /* See comment in cdk_keydb_get_sk() */ - _cdk_pkt_detach_free(node->pkt, &pkttype, (void *) &pk); - *r_pk = pk; - _cdk_kbnode_clone(node); - cdk_kbnode_release(knode); - - return rc; -} - - -/** - * cdk_keydb_get_sk: - * @hd: key db handle - * @keyid: the keyid of the key - * @ret_sk: the allocated secret key - * - * Perform a key database search by keyid and return - * only the raw secret key without the additional nodes, - * like the user id or the signatures. - **/ -cdk_error_t -cdk_keydb_get_sk(cdk_keydb_hd_t hd, u32 * keyid, cdk_seckey_t * ret_sk) -{ - cdk_kbnode_t snode, node; - cdk_seckey_t sk; - cdk_error_t rc; - int pkttype; - - if (!keyid || !ret_sk) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (!hd) { - gnutls_assert(); - return CDK_Error_No_Keyring; - } - - *ret_sk = NULL; - rc = cdk_keydb_get_bykeyid(hd, keyid, &snode); - if (rc) { - gnutls_assert(); - return rc; - } - - node = keydb_find_bykeyid(snode, keyid, CDK_DBSEARCH_KEYID); - if (!node) { - cdk_kbnode_release(snode); - gnutls_assert(); - return CDK_Error_No_Key; - } - - /* We need to release the packet itself but not its contents - and thus we detach the openpgp packet and release the structure. */ - _cdk_pkt_detach_free(node->pkt, &pkttype, (void *) &sk); - _cdk_kbnode_clone(node); - cdk_kbnode_release(snode); - - *ret_sk = sk; - return 0; -} - - -static int is_selfsig(cdk_kbnode_t node, const u32 * keyid) -{ - cdk_pkt_signature_t sig; - - if (node->pkt->pkttype != CDK_PKT_SIGNATURE) - return 0; - sig = node->pkt->pkt.signature; - if ((sig->sig_class >= 0x10 && sig->sig_class <= 0x13) && - sig->keyid[0] == keyid[0] && sig->keyid[1] == keyid[1]) - return 1; - - return 0; -} - - -/* Find the newest self signature for the public key @pk - and return the signature node. */ -static cdk_kbnode_t -find_selfsig_node(cdk_kbnode_t key, cdk_pkt_pubkey_t pk) -{ - cdk_kbnode_t n, sig; - unsigned int ts; - u32 keyid[2]; - - cdk_pk_get_keyid(pk, keyid); - sig = NULL; - ts = 0; - for (n = key; n; n = n->next) { - if (is_selfsig(n, keyid) - && n->pkt->pkt.signature->timestamp > ts) { - ts = n->pkt->pkt.signature->timestamp; - sig = n; - } - } - - return sig; -} - -static unsigned int key_usage_to_cdk_usage(unsigned int usage) -{ - unsigned key_usage = 0; - - if (usage & 0x01) /* cert + sign data */ - key_usage |= CDK_KEY_USG_CERT_SIGN; - if (usage & 0x02) /* cert + sign data */ - key_usage |= CDK_KEY_USG_DATA_SIGN; - if (usage & 0x04) /* encrypt comm. + storage */ - key_usage |= CDK_KEY_USG_COMM_ENCR; - if (usage & 0x08) /* encrypt comm. + storage */ - key_usage |= CDK_KEY_USG_STORAGE_ENCR; - if (usage & 0x10) /* encrypt comm. + storage */ - key_usage |= CDK_KEY_USG_SPLIT_KEY; - if (usage & 0x20) - key_usage |= CDK_KEY_USG_AUTH; - if (usage & 0x80) /* encrypt comm. + storage */ - key_usage |= CDK_KEY_USG_SHARED_KEY; - - return key_usage; -} - -static cdk_error_t keydb_merge_selfsig(cdk_kbnode_t key, u32 * keyid) -{ - cdk_kbnode_t node, kbnode, unode; - cdk_subpkt_t s = NULL; - cdk_pkt_signature_t sig = NULL; - cdk_pkt_userid_t uid = NULL; - const byte *symalg = NULL, *hashalg = NULL, *compalg = NULL; - size_t nsymalg = 0, nhashalg = 0, ncompalg = 0, n = 0; - size_t key_expire = 0; - - if (!key) { - gnutls_assert(); - return CDK_Inv_Value; - } - - for (node = key; node; node = node->next) { - if (!is_selfsig(node, keyid)) - continue; - unode = cdk_kbnode_find_prev(key, node, CDK_PKT_USER_ID); - if (!unode) { - gnutls_assert(); - return CDK_Error_No_Key; - } - uid = unode->pkt->pkt.user_id; - sig = node->pkt->pkt.signature; - s = cdk_subpkt_find(sig->hashed, - CDK_SIGSUBPKT_PRIMARY_UID); - if (s) - uid->is_primary = 1; - s = cdk_subpkt_find(sig->hashed, CDK_SIGSUBPKT_FEATURES); - if (s && s->size == 1 && s->d[0] & 0x01) - uid->mdc_feature = 1; - s = cdk_subpkt_find(sig->hashed, CDK_SIGSUBPKT_KEY_EXPIRE); - if (s && s->size == 4) - key_expire = _cdk_buftou32(s->d); - s = cdk_subpkt_find(sig->hashed, CDK_SIGSUBPKT_PREFS_SYM); - if (s) { - symalg = s->d; - nsymalg = s->size; - n += s->size + 1; - } - s = cdk_subpkt_find(sig->hashed, CDK_SIGSUBPKT_PREFS_HASH); - if (s) { - hashalg = s->d; - nhashalg = s->size; - n += s->size + 1; - } - s = cdk_subpkt_find(sig->hashed, CDK_SIGSUBPKT_PREFS_ZIP); - if (s) { - compalg = s->d; - ncompalg = s->size; - n += s->size + 1; - } - if (uid->prefs != NULL) - cdk_free(uid->prefs); - if (!n || !hashalg || !compalg || !symalg) - uid->prefs = NULL; - else { - uid->prefs = - cdk_calloc(1, sizeof(*uid->prefs) * (n + 1)); - if (!uid->prefs) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - n = 0; - for (; nsymalg; nsymalg--, n++) { - uid->prefs[n].type = CDK_PREFTYPE_SYM; - uid->prefs[n].value = *symalg++; - } - for (; nhashalg; nhashalg--, n++) { - uid->prefs[n].type = CDK_PREFTYPE_HASH; - uid->prefs[n].value = *hashalg++; - } - for (; ncompalg; ncompalg--, n++) { - uid->prefs[n].type = CDK_PREFTYPE_ZIP; - uid->prefs[n].value = *compalg++; - } - - uid->prefs[n].type = CDK_PREFTYPE_NONE; /* end of list marker */ - uid->prefs[n].value = 0; - uid->prefs_size = n; - } - } - - /* Now we add the extracted information to the primary key. */ - kbnode = cdk_kbnode_find(key, CDK_PKT_PUBLIC_KEY); - if (kbnode) { - cdk_pkt_pubkey_t pk = kbnode->pkt->pkt.public_key; - if (uid && uid->prefs && n) { - if (pk->prefs != NULL) - cdk_free(pk->prefs); - pk->prefs = _cdk_copy_prefs(uid->prefs); - pk->prefs_size = n; - } - if (key_expire) { - pk->expiredate = pk->timestamp + key_expire; - pk->has_expired = - pk->expiredate > - (u32) gnutls_time(NULL) ? 0 : 1; - } - - pk->is_invalid = 0; - } - - return 0; -} - - -static cdk_error_t -keydb_parse_allsigs(cdk_kbnode_t knode, cdk_keydb_hd_t hd, int check) -{ - cdk_kbnode_t node, kb; - cdk_pkt_signature_t sig; - cdk_pkt_pubkey_t pk; - cdk_subpkt_t s = NULL; - u32 expiredate = 0, curtime = (u32) gnutls_time(NULL); - u32 keyid[2]; - - if (!knode) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (check && !hd) { - gnutls_assert(); - return CDK_Inv_Mode; - } - - kb = cdk_kbnode_find(knode, CDK_PKT_SECRET_KEY); - if (kb) - return 0; - - /* Reset */ - for (node = knode; node; node = node->next) { - if (node->pkt->pkttype == CDK_PKT_USER_ID) - node->pkt->pkt.user_id->is_revoked = 0; - else if (node->pkt->pkttype == CDK_PKT_PUBLIC_KEY || - node->pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY) - node->pkt->pkt.public_key->is_revoked = 0; - } - - kb = cdk_kbnode_find(knode, CDK_PKT_PUBLIC_KEY); - if (!kb) { - gnutls_assert(); - return CDK_Wrong_Format; - } - cdk_pk_get_keyid(kb->pkt->pkt.public_key, keyid); - - for (node = knode; node; node = node->next) { - if (node->pkt->pkttype == CDK_PKT_SIGNATURE) { - sig = node->pkt->pkt.signature; - /* Revocation certificates for primary keys */ - if (sig->sig_class == 0x20) { - kb = cdk_kbnode_find_prev(knode, node, - CDK_PKT_PUBLIC_KEY); - if (kb) { - kb->pkt->pkt.public_key-> - is_revoked = 1; - if (check) - _cdk_pk_check_sig(hd, kb, - node, - NULL, - NULL); - } else { - gnutls_assert(); - return CDK_Error_No_Key; - } - } - /* Revocation certificates for subkeys */ - else if (sig->sig_class == 0x28) { - kb = cdk_kbnode_find_prev(knode, node, - CDK_PKT_PUBLIC_SUBKEY); - if (kb) { - kb->pkt->pkt.public_key-> - is_revoked = 1; - if (check) - _cdk_pk_check_sig(hd, kb, - node, - NULL, - NULL); - } else { - gnutls_assert(); - return CDK_Error_No_Key; - } - } - /* Revocation certificates for user ID's */ - else if (sig->sig_class == 0x30) { - if (sig->keyid[0] != keyid[0] - || sig->keyid[1] != keyid[1]) - continue; /* revokes an earlier signature, no userID. */ - kb = cdk_kbnode_find_prev(knode, node, - CDK_PKT_USER_ID); - if (kb) { - kb->pkt->pkt.user_id->is_revoked = - 1; - if (check) - _cdk_pk_check_sig(hd, kb, - node, - NULL, - NULL); - } else { - gnutls_assert(); - return CDK_Error_No_Key; - } - } - /* Direct certificates for primary keys */ - else if (sig->sig_class == 0x1F) { - kb = cdk_kbnode_find_prev(knode, node, - CDK_PKT_PUBLIC_KEY); - if (kb) { - pk = kb->pkt->pkt.public_key; - pk->is_invalid = 0; - s = cdk_subpkt_find(node->pkt->pkt. - signature-> - hashed, - CDK_SIGSUBPKT_KEY_EXPIRE); - if (s && s->size == 4) { - expiredate = - _cdk_buftou32(s->d); - pk->expiredate = - pk->timestamp + - expiredate; - pk->has_expired = - pk->expiredate > - curtime ? 0 : 1; - } - if (check) - _cdk_pk_check_sig(hd, kb, - node, - NULL, - NULL); - } else { - gnutls_assert(); - return CDK_Error_No_Key; - } - } - /* Direct certificates for subkeys */ - else if (sig->sig_class == 0x18) { - kb = cdk_kbnode_find_prev(knode, node, - CDK_PKT_PUBLIC_SUBKEY); - if (kb) { - pk = kb->pkt->pkt.public_key; - pk->is_invalid = 0; - s = cdk_subpkt_find(node->pkt->pkt. - signature-> - hashed, - CDK_SIGSUBPKT_KEY_EXPIRE); - if (s && s->size == 4) { - expiredate = - _cdk_buftou32(s->d); - pk->expiredate = - pk->timestamp + - expiredate; - pk->has_expired = - pk->expiredate > - curtime ? 0 : 1; - } - if (check) - _cdk_pk_check_sig(hd, kb, - node, - NULL, - NULL); - } else { - gnutls_assert(); - return CDK_Error_No_Key; - } - } - } - } - node = cdk_kbnode_find(knode, CDK_PKT_PUBLIC_KEY); - if (node && node->pkt->pkt.public_key->version == 3) { - /* v3 public keys have no additonal signatures for the key directly. - we say the key is valid when we have at least a self signature. */ - pk = node->pkt->pkt.public_key; - for (node = knode; node; node = node->next) { - if (is_selfsig(node, keyid)) { - pk->is_invalid = 0; - break; - } - } - } - if (node && (node->pkt->pkt.public_key->is_revoked || - node->pkt->pkt.public_key->has_expired)) { - /* If the primary key has been revoked, mark all subkeys as invalid - because without a primary key they are not useable */ - for (node = knode; node; node = node->next) { - if (node->pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY) - node->pkt->pkt.public_key->is_invalid = 1; - } - } - - return 0; -} - -static void -add_key_usage(cdk_kbnode_t knode, u32 keyid[2], unsigned int usage) -{ - cdk_kbnode_t p, ctx; - cdk_packet_t pkt; - - ctx = NULL; - while ((p = cdk_kbnode_walk(knode, &ctx, 0))) { - pkt = cdk_kbnode_get_packet(p); - if ((pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY - || pkt->pkttype == CDK_PKT_PUBLIC_KEY) - && pkt->pkt.public_key->keyid[0] == keyid[0] - && pkt->pkt.public_key->keyid[1] == keyid[1]) { - pkt->pkt.public_key->pubkey_usage = usage; - return; - } - } - return; -} - -cdk_error_t -cdk_keydb_get_keyblock(cdk_stream_t inp, cdk_kbnode_t * r_knode, unsigned public) -{ - cdk_packet_t pkt; - cdk_kbnode_t knode, node; - cdk_desig_revoker_t revkeys; - cdk_error_t rc; - u32 keyid[2], main_keyid[2]; - off_t old_off; - int key_seen, got_key; - - if (!inp || !r_knode) { - gnutls_assert(); - return CDK_Inv_Value; - } - - /* Reset all values. */ - keyid[0] = keyid[1] = 0; - main_keyid[0] = main_keyid[1] = 0; - revkeys = NULL; - knode = NULL; - key_seen = got_key = 0; - - *r_knode = NULL; - rc = CDK_EOF; - while (!cdk_stream_eof(inp)) { - cdk_pkt_new(&pkt); - old_off = cdk_stream_tell(inp); - rc = cdk_pkt_read(inp, pkt, public); - if (rc) { - cdk_pkt_release(pkt); - if (rc == CDK_EOF) - break; - else { /* Release all packets we reached so far. */ - _cdk_log_debug - ("keydb_get_keyblock: error %d\n", rc); - cdk_kbnode_release(knode); - gnutls_assert(); - return rc; - } - } - - if (pkt->pkttype == CDK_PKT_PUBLIC_KEY || - pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY || - pkt->pkttype == CDK_PKT_SECRET_KEY || - pkt->pkttype == CDK_PKT_SECRET_SUBKEY) { - if (key_seen - && (pkt->pkttype == CDK_PKT_PUBLIC_KEY - || pkt->pkttype == CDK_PKT_SECRET_KEY)) { - /* The next key starts here so set the file pointer - and leave the loop. */ - cdk_stream_seek(inp, old_off); - cdk_pkt_release(pkt); - break; - } - if (pkt->pkttype == CDK_PKT_PUBLIC_KEY || - pkt->pkttype == CDK_PKT_SECRET_KEY) { - _cdk_pkt_get_keyid(pkt, main_keyid); - key_seen = 1; - } else if (pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY || - pkt->pkttype == CDK_PKT_SECRET_SUBKEY) { - if (pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY) { - pkt->pkt.public_key-> - main_keyid[0] = main_keyid[0]; - pkt->pkt.public_key-> - main_keyid[1] = main_keyid[1]; - } else { - pkt->pkt.secret_key-> - main_keyid[0] = main_keyid[0]; - pkt->pkt.secret_key-> - main_keyid[1] = main_keyid[1]; - } - } - /* We save this for the signature */ - _cdk_pkt_get_keyid(pkt, keyid); - got_key = 1; - } else if (pkt->pkttype == CDK_PKT_USER_ID); - else if (pkt->pkttype == CDK_PKT_SIGNATURE) { - cdk_subpkt_t s; - - pkt->pkt.signature->key[0] = keyid[0]; - pkt->pkt.signature->key[1] = keyid[1]; - if (pkt->pkt.signature->sig_class == 0x1F && - pkt->pkt.signature->revkeys) - revkeys = pkt->pkt.signature->revkeys; - - s = cdk_subpkt_find(pkt->pkt.signature->hashed, - CDK_SIGSUBPKT_KEY_FLAGS); - if (s) { - unsigned int key_usage = - key_usage_to_cdk_usage(s->d[0]); - add_key_usage(knode, - pkt->pkt.signature->key, - key_usage); - } - } - node = cdk_kbnode_new(pkt); - if (!knode) - knode = node; - else - _cdk_kbnode_add(knode, node); - } - - if (got_key) { - keydb_merge_selfsig(knode, main_keyid); - rc = keydb_parse_allsigs(knode, NULL, 0); - if (revkeys) { - node = cdk_kbnode_find(knode, CDK_PKT_PUBLIC_KEY); - if (node) - node->pkt->pkt.public_key->revkeys = - revkeys; - } - } else - cdk_kbnode_release(knode); - *r_knode = got_key ? knode : NULL; - - /* It is possible that we are in an EOF condition after we - successfully read a keyblock. For example if the requested - key is the last in the file. */ - if (rc == CDK_EOF && got_key) - rc = 0; - return rc; -} - - -/* Return the type of the given data. In case it cannot be classified, - a substring search will be performed. */ -static int classify_data(const byte * buf, size_t len) -{ - int type; - unsigned int i; - - if (buf[0] == '0' && (buf[1] == 'x' || buf[1] == 'X')) { /* Skip hex prefix. */ - buf += 2; - len -= 2; - } - - /* The length of the data does not match either a keyid or a fingerprint. */ - if (len != 8 && len != 16 && len != 40) - return CDK_DBSEARCH_SUBSTR; - - for (i = 0; i < len; i++) { - if (!isxdigit(buf[i])) - return CDK_DBSEARCH_SUBSTR; - } - if (i != len) - return CDK_DBSEARCH_SUBSTR; - switch (len) { - case 8: - type = CDK_DBSEARCH_SHORT_KEYID; - break; - case 16: - type = CDK_DBSEARCH_KEYID; - break; - case 40: - type = CDK_DBSEARCH_FPR; - break; - default: - type = CDK_DBSEARCH_SUBSTR; - break; - } - - return type; -} - - -/** - * cdk_keydb_export: - * @hd: the keydb handle - * @out: the output stream - * @remusr: the list of key pattern to export - * - * Export a list of keys to the given output stream. - * Use string list with names for pattering searching. - * This procedure strips local signatures. - **/ -cdk_error_t -cdk_keydb_export(cdk_keydb_hd_t hd, cdk_stream_t out, cdk_strlist_t remusr) -{ - cdk_kbnode_t knode, node; - cdk_strlist_t r; - cdk_error_t rc; - int old_ctb; - cdk_keydb_search_t st; - - for (r = remusr; r; r = r->next) { - rc = cdk_keydb_search_start(&st, hd, CDK_DBSEARCH_AUTO, - r->d); - if (rc) { - gnutls_assert(); - return rc; - } - rc = cdk_keydb_search(st, hd, &knode); - cdk_keydb_search_release(st); - - if (rc) { - gnutls_assert(); - return rc; - } - - node = cdk_kbnode_find(knode, CDK_PKT_PUBLIC_KEY); - if (!node) { - gnutls_assert(); - return CDK_Error_No_Key; - } - - /* If the key is a version 3 key, use the old packet - format for the output. */ - if (node->pkt->pkt.public_key->version == 3) - old_ctb = 1; - else - old_ctb = 0; - - for (node = knode; node; node = node->next) { - /* No specified format; skip them */ - if (node->pkt->pkttype == CDK_PKT_RING_TRUST) - continue; - /* We never export local signed signatures */ - if (node->pkt->pkttype == CDK_PKT_SIGNATURE && - !node->pkt->pkt.signature->flags.exportable) - continue; - /* Filter out invalid signatures */ - if (node->pkt->pkttype == CDK_PKT_SIGNATURE && - (!KEY_CAN_SIGN - (node->pkt->pkt.signature->pubkey_algo))) - continue; - - /* Adjust the ctb flag if needed. */ - node->pkt->old_ctb = old_ctb; - rc = cdk_pkt_write(out, node->pkt); - if (rc) { - cdk_kbnode_release(knode); - gnutls_assert(); - return rc; - } - } - cdk_kbnode_release(knode); - knode = NULL; - } - return 0; -} - - -static cdk_packet_t find_key_packet(cdk_kbnode_t knode, int *r_is_sk) -{ - cdk_packet_t pkt; - - pkt = cdk_kbnode_find_packet(knode, CDK_PKT_PUBLIC_KEY); - if (!pkt) { - pkt = cdk_kbnode_find_packet(knode, CDK_PKT_SECRET_KEY); - if (r_is_sk) - *r_is_sk = pkt ? 1 : 0; - } - return pkt; -} - - -/* Return 1 if the is allowd in a key node. */ -static int is_key_node(cdk_kbnode_t node) -{ - switch (node->pkt->pkttype) { - case CDK_PKT_SIGNATURE: - case CDK_PKT_SECRET_KEY: - case CDK_PKT_PUBLIC_KEY: - case CDK_PKT_SECRET_SUBKEY: - case CDK_PKT_PUBLIC_SUBKEY: - case CDK_PKT_USER_ID: - case CDK_PKT_ATTRIBUTE: - return 1; - - default: - return 0; - } - - return 0; -} - - -cdk_error_t cdk_keydb_import(cdk_keydb_hd_t hd, cdk_kbnode_t knode) -{ - cdk_kbnode_t node, chk; - cdk_packet_t pkt; - cdk_stream_t out; - cdk_error_t rc; - u32 keyid[2]; - - if (!hd || !knode) { - gnutls_assert(); - return CDK_Inv_Value; - } - - pkt = find_key_packet(knode, NULL); - if (!pkt) { - gnutls_assert(); - return CDK_Inv_Packet; - } - - _cdk_pkt_get_keyid(pkt, keyid); - chk = NULL; - cdk_keydb_get_bykeyid(hd, keyid, &chk); - if (chk) { /* FIXME: search for new signatures */ - cdk_kbnode_release(chk); - return 0; - } - - /* We append data to the stream so we need to close - the stream here to re-open it later. */ - if (hd->fp) { - cdk_stream_close(hd->fp); - hd->fp = NULL; - } - - rc = _cdk_stream_append(hd->name, &out); - if (rc) { - gnutls_assert(); - return rc; - } - - for (node = knode; node; node = node->next) { - if (node->pkt->pkttype == CDK_PKT_RING_TRUST) - continue; /* No uniformed syntax for this packet */ - if (node->pkt->pkttype == CDK_PKT_SIGNATURE && - !node->pkt->pkt.signature->flags.exportable) { - _cdk_log_debug - ("key db import: skip local signature\n"); - continue; - } - - if (!is_key_node(node)) { - _cdk_log_debug - ("key db import: skip invalid node of type %d\n", - node->pkt->pkttype); - continue; - } - - rc = cdk_pkt_write(out, node->pkt); - if (rc) { - cdk_stream_close(out); - gnutls_assert(); - return rc; - } - } - - cdk_stream_close(out); - hd->stats.new_keys++; - - return 0; -} - - -cdk_error_t -_cdk_keydb_check_userid(cdk_keydb_hd_t hd, u32 * keyid, const char *id) -{ - cdk_kbnode_t knode = NULL, unode = NULL; - cdk_error_t rc; - int check; - cdk_keydb_search_t st; - - if (!hd) { - gnutls_assert(); - return CDK_Inv_Value; - } - - rc = cdk_keydb_search_start(&st, hd, CDK_DBSEARCH_KEYID, keyid); - if (rc) { - gnutls_assert(); - return rc; - } - rc = cdk_keydb_search(st, hd, &knode); - cdk_keydb_search_release(st); - - if (rc) { - gnutls_assert(); - return rc; - } - - rc = cdk_keydb_search_start(&st, hd, CDK_DBSEARCH_EXACT, - (char *) id); - if (!rc) { - rc = cdk_keydb_search(st, hd, &unode); - cdk_keydb_search_release(st); - } - if (rc) { - cdk_kbnode_release(knode); - gnutls_assert(); - return rc; - } - - check = 0; - rc = cdk_keydb_search_start(&st, hd, CDK_DBSEARCH_KEYID, keyid); - if (rc) { - cdk_kbnode_release(knode); - gnutls_assert(); - return rc; - } - - if (unode && find_by_keyid(unode, st)) - check++; - cdk_keydb_search_release(st); - cdk_kbnode_release(unode); - - rc = cdk_keydb_search_start(&st, hd, CDK_DBSEARCH_EXACT, - (char *) id); - if (rc) { - cdk_kbnode_release(knode); - gnutls_assert(); - return rc; - } - - if (knode && find_by_pattern(knode, st)) - check++; - cdk_keydb_search_release(st); - cdk_kbnode_release(knode); - - return check == 2 ? 0 : CDK_Inv_Value; -} - - -/** - * cdk_keydb_check_sk: - * @hd: the key db handle - * @keyid: the 64-bit keyid - * - * Check if a secret key with the given key ID is available - * in the key database. - **/ -cdk_error_t cdk_keydb_check_sk(cdk_keydb_hd_t hd, u32 * keyid) -{ - cdk_stream_t db; - cdk_packet_t pkt; - cdk_error_t rc; - u32 kid[2]; - - if (!hd || !keyid) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (!hd->secret) { - gnutls_assert(); - return CDK_Inv_Mode; - } - - rc = _cdk_keydb_open(hd, &db); - if (rc) { - gnutls_assert(); - return rc; - } - cdk_pkt_new(&pkt); - while (!cdk_pkt_read(db, pkt, 0)) { - if (pkt->pkttype != CDK_PKT_SECRET_KEY && - pkt->pkttype != CDK_PKT_SECRET_SUBKEY) { - cdk_pkt_free(pkt); - continue; - } - cdk_sk_get_keyid(pkt->pkt.secret_key, kid); - if (KEYID_CMP(kid, keyid)) { - cdk_pkt_release(pkt); - return 0; - } - cdk_pkt_free(pkt); - } - cdk_pkt_release(pkt); - gnutls_assert(); - return CDK_Error_No_Key; -} - - -/** - * cdk_listkey_start: - * @r_ctx: pointer to store the new context - * @db: the key database handle - * @patt: string pattern - * @fpatt: recipients from a stringlist to show - * - * Prepare a key listing with the given parameters. Two modes are supported. - * The first mode uses string pattern to determine if the key should be - * returned or not. The other mode uses a string list to request the key - * which should be listed. - **/ -cdk_error_t -cdk_listkey_start(cdk_listkey_t * r_ctx, cdk_keydb_hd_t db, - const char *patt, cdk_strlist_t fpatt) -{ - cdk_listkey_t ctx; - cdk_stream_t inp; - cdk_error_t rc; - - if (!r_ctx || !db) { - gnutls_assert(); - return CDK_Inv_Value; - } - if ((patt && fpatt) || (!patt && !fpatt)) { - gnutls_assert(); - return CDK_Inv_Mode; - } - rc = _cdk_keydb_open(db, &inp); - if (rc) { - gnutls_assert(); - return rc; - } - ctx = cdk_calloc(1, sizeof *ctx); - if (!ctx) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - ctx->db = db; - ctx->inp = inp; - if (patt) { - ctx->u.patt = cdk_strdup(patt); - if (!ctx->u.patt) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - } else if (fpatt) { - cdk_strlist_t l; - for (l = fpatt; l; l = l->next) - cdk_strlist_add(&ctx->u.fpatt, l->d); - } - ctx->type = patt ? 1 : 0; - ctx->init = 1; - *r_ctx = ctx; - return 0; -} - - -/** - * cdk_listkey_close: - * @ctx: the list key context - * - * Free the list key context. - **/ -void cdk_listkey_close(cdk_listkey_t ctx) -{ - if (!ctx) - return; - - if (ctx->type) - cdk_free(ctx->u.patt); - else - cdk_strlist_free(ctx->u.fpatt); - cdk_free(ctx); -} - - -/** - * cdk_listkey_next: - * @ctx: list key context - * @r_key: the pointer to the new key node object - * - * Retrieve the next key from the pattern of the key list context. - **/ -cdk_error_t cdk_listkey_next(cdk_listkey_t ctx, cdk_kbnode_t * ret_key) -{ - if (!ctx || !ret_key) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (!ctx->init) { - gnutls_assert(); - return CDK_Inv_Mode; - } - - if (ctx->type && ctx->u.patt[0] == '*') - return cdk_keydb_get_keyblock(ctx->inp, ret_key, 1); - else if (ctx->type) { - cdk_kbnode_t node; - struct cdk_keydb_search_s ks; - cdk_error_t rc; - - for (;;) { - rc = cdk_keydb_get_keyblock(ctx->inp, &node, 1); - if (rc) { - gnutls_assert(); - return rc; - } - memset(&ks, 0, sizeof(ks)); - ks.type = CDK_DBSEARCH_SUBSTR; - ks.u.pattern = ctx->u.patt; - if (find_by_pattern(node, &ks)) { - *ret_key = node; - return 0; - } - cdk_kbnode_release(node); - node = NULL; - } - } else { - if (!ctx->t) - ctx->t = ctx->u.fpatt; - else if (ctx->t->next) - ctx->t = ctx->t->next; - else - return CDK_EOF; - return cdk_keydb_get_bypattern(ctx->db, ctx->t->d, - ret_key); - } - gnutls_assert(); - return CDK_General_Error; -} - - -int _cdk_keydb_is_secret(cdk_keydb_hd_t db) -{ - return db->secret; -} diff --git a/lib/opencdk/keydb.h b/lib/opencdk/keydb.h deleted file mode 100644 index a7a12c1e85..0000000000 --- a/lib/opencdk/keydb.h +++ /dev/null @@ -1,68 +0,0 @@ -/* keydb.h - Key database routines - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* Internal key index structure. */ -struct key_idx_s { - off_t offset; - u32 keyid[2]; - byte fpr[KEY_FPR_LEN]; -}; -typedef struct key_idx_s *key_idx_t; - -/* Internal key cache to associate a key with an file offset. */ -struct key_table_s { - struct key_table_s *next; - off_t offset; -}; -typedef struct key_table_s *key_table_t; - -typedef struct cdk_keydb_search_s { - off_t off; /* last file offset */ - union { - char *pattern; /* A search is performed by pattern. */ - u32 keyid[2]; /* A search by keyid. */ - byte fpr[KEY_FPR_LEN]; /* A search by fingerprint. */ - } u; - int type; - struct key_table_s *cache; - size_t ncache; - unsigned int no_cache:1; /* disable the index cache. */ - - cdk_stream_t idx; - char *idx_name; /* name of the index file or NULL. */ - -} cdk_keydb_search_s; - -/* Internal key database handle. */ -struct cdk_keydb_hd_s { - int type; /* type of the key db handle. */ - int fp_ref; /* 1=means it is a reference and shall not be closed. */ - cdk_stream_t fp; - char *name; /* name of the underlying file or NULL. */ - unsigned int secret:1; /* contain secret keys. */ - unsigned int isopen:1; /* the underlying stream is opened. */ - - /* structure to store some stats about the keydb. */ - struct { - size_t new_keys; /* amount of new keys that were imported. */ - } stats; -}; diff --git a/lib/opencdk/literal.c b/lib/opencdk/literal.c deleted file mode 100644 index 7756bb33c7..0000000000 --- a/lib/opencdk/literal.c +++ /dev/null @@ -1,309 +0,0 @@ -/* literal.c - Literal packet filters - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include "gnutls_int.h" -#include - - -/* Duplicate the string @s but strip of possible - relative folder names of it. */ -static char *dup_trim_filename(const char *s) -{ - char *p = NULL; - - p = strrchr(s, '/'); - if (!p) - p = strrchr(s, '\\'); - if (!p) - return cdk_strdup(s); - return cdk_strdup(p + 1); -} - - -static cdk_error_t literal_decode(void *data, FILE * in, FILE * out) -{ - literal_filter_t *pfx = data; - cdk_stream_t si, so; - cdk_packet_t pkt; - cdk_pkt_literal_t pt; - byte buf[BUFSIZE]; - ssize_t nread; - int bufsize; - cdk_error_t rc; - - _cdk_log_debug("literal filter: decode\n"); - - if (!pfx || !in || !out) - return CDK_Inv_Value; - - rc = _cdk_stream_fpopen(in, STREAMCTL_READ, &si); - if (rc) - return rc; - - cdk_pkt_new(&pkt); - rc = cdk_pkt_read(si, pkt, 1); - if (rc || pkt->pkttype != CDK_PKT_LITERAL) { - cdk_pkt_release(pkt); - cdk_stream_close(si); - return !rc ? CDK_Inv_Packet : rc; - } - - rc = _cdk_stream_fpopen(out, STREAMCTL_WRITE, &so); - if (rc) { - cdk_pkt_release(pkt); - cdk_stream_close(si); - return rc; - } - - pt = pkt->pkt.literal; - pfx->mode = pt->mode; - - if (pfx->filename && pt->namelen > 0) { - /* The name in the literal packet is more authorative. */ - cdk_free(pfx->filename); - pfx->filename = dup_trim_filename(pt->name); - } else if (!pfx->filename && pt->namelen > 0) - pfx->filename = dup_trim_filename(pt->name); - else if (!pt->namelen && !pfx->filename && pfx->orig_filename) { - /* In this case, we need to derrive the output file name - from the original name and cut off the OpenPGP extension. - If this is not possible, we return an error. */ - if (!stristr(pfx->orig_filename, ".gpg") && - !stristr(pfx->orig_filename, ".pgp") && - !stristr(pfx->orig_filename, ".asc")) { - cdk_pkt_release(pkt); - cdk_stream_close(si); - cdk_stream_close(so); - _cdk_log_debug - ("literal filter: no file name and no PGP extension\n"); - return CDK_Inv_Mode; - } - _cdk_log_debug - ("literal filter: derrive file name from original\n"); - pfx->filename = dup_trim_filename(pfx->orig_filename); - pfx->filename[strlen(pfx->filename) - 4] = '\0'; - } - - while (!feof(in)) { - _cdk_log_debug("literal_decode: part on %d size %lu\n", - (int) pfx->blkmode.on, - (unsigned long) pfx->blkmode.size); - if (pfx->blkmode.on) - bufsize = pfx->blkmode.size; - else - bufsize = pt->len < DIM(buf) ? pt->len : DIM(buf); - nread = cdk_stream_read(pt->buf, buf, bufsize); - if (nread == EOF) { - rc = CDK_File_Error; - break; - } - if (pfx->md_initialized) - _gnutls_hash(&pfx->md, buf, nread); - cdk_stream_write(so, buf, nread); - pt->len -= nread; - if (pfx->blkmode.on) { - pfx->blkmode.size = - _cdk_pkt_read_len(in, &pfx->blkmode.on); - if ((ssize_t) pfx->blkmode.size == EOF) - return CDK_Inv_Packet; - } - if (pt->len <= 0 && !pfx->blkmode.on) - break; - } - - cdk_stream_close(si); - cdk_stream_close(so); - cdk_pkt_release(pkt); - return rc; -} - - -static char intmode_to_char(int mode) -{ - switch (mode) { - case CDK_LITFMT_BINARY: - return 'b'; - case CDK_LITFMT_TEXT: - return 't'; - case CDK_LITFMT_UNICODE: - return 'u'; - default: - return 'b'; - } - - return 'b'; -} - - -static cdk_error_t literal_encode(void *data, FILE * in, FILE * out) -{ - literal_filter_t *pfx = data; - cdk_pkt_literal_t pt; - cdk_stream_t si; - cdk_packet_t pkt; - size_t filelen; - cdk_error_t rc; - - _cdk_log_debug("literal filter: encode\n"); - - if (!pfx || !in || !out) - return CDK_Inv_Value; - if (!pfx->filename) { - pfx->filename = cdk_strdup("_CONSOLE"); - if (!pfx->filename) - return CDK_Out_Of_Core; - } - - rc = _cdk_stream_fpopen(in, STREAMCTL_READ, &si); - if (rc) - return rc; - - filelen = strlen(pfx->filename); - cdk_pkt_new(&pkt); - pt = pkt->pkt.literal = cdk_calloc(1, sizeof *pt + filelen); - if (pt == NULL) { - cdk_pkt_release(pkt); - cdk_stream_close(si); - return gnutls_assert_val(CDK_Out_Of_Core); - } - - pt->name = (char *) pt + sizeof(*pt); - - memcpy(pt->name, pfx->filename, filelen); - pt->namelen = filelen; - pt->name[pt->namelen] = '\0'; - pt->timestamp = (u32) gnutls_time(NULL); - pt->mode = intmode_to_char(pfx->mode); - pt->len = cdk_stream_get_length(si); - pt->buf = si; - pkt->old_ctb = 1; - pkt->pkttype = CDK_PKT_LITERAL; - rc = _cdk_pkt_write_fp(out, pkt); - - cdk_pkt_release(pkt); - cdk_stream_close(si); - return rc; -} - - -int _cdk_filter_literal(void *data, int ctl, FILE * in, FILE * out) -{ - if (ctl == STREAMCTL_READ) - return literal_decode(data, in, out); - else if (ctl == STREAMCTL_WRITE) - return literal_encode(data, in, out); - else if (ctl == STREAMCTL_FREE) { - literal_filter_t *pfx = data; - if (pfx) { - _cdk_log_debug("free literal filter\n"); - cdk_free(pfx->filename); - pfx->filename = NULL; - cdk_free(pfx->orig_filename); - pfx->orig_filename = NULL; - return 0; - } - } - return CDK_Inv_Mode; -} - -/* Remove all trailing white spaces from the string. */ -static void _cdk_trim_string(char *s) -{ - int len = strlen(s); - int i; - - for (i=len-1;i>=0;i--) { - if ((s[i] == '\t' || s[i] == '\r' || s[i] == '\n' || s[i] == ' ')) { - s[i] = 0; - } else { - break; - } - } -} - -static int text_encode(void *data, FILE * in, FILE * out) -{ - const char *s; - char buf[2048]; - - if (!in || !out) - return CDK_Inv_Value; - - /* FIXME: This code does not work for very long lines. */ - while (!feof(in)) { - /* give space for trim_string \r\n */ - s = fgets(buf, DIM(buf) - 3, in); - if (!s) - break; - _cdk_trim_string(buf); - _gnutls_str_cat(buf, sizeof(buf), "\r\n"); - fwrite(buf, 1, strlen(buf), out); - } - - return 0; -} - - -static int text_decode(void *data, FILE * in, FILE * out) -{ - text_filter_t *tfx = data; - const char *s; - char buf[2048]; - - if (!tfx || !in || !out) - return CDK_Inv_Value; - - while (!feof(in)) { - s = fgets(buf, DIM(buf) - 1, in); - if (!s) - break; - _cdk_trim_string(buf); - fwrite(buf, 1, strlen(buf), out); - fwrite(tfx->lf, 1, strlen(tfx->lf), out); - } - - return 0; -} - - -int _cdk_filter_text(void *data, int ctl, FILE * in, FILE * out) -{ - if (ctl == STREAMCTL_READ) - return text_encode(data, in, out); - else if (ctl == STREAMCTL_WRITE) - return text_decode(data, in, out); - else if (ctl == STREAMCTL_FREE) { - text_filter_t *tfx = data; - if (tfx) { - _cdk_log_debug("free text filter\n"); - tfx->lf = NULL; - } - } - return CDK_Inv_Mode; -} diff --git a/lib/opencdk/main.h b/lib/opencdk/main.h deleted file mode 100644 index d95f277862..0000000000 --- a/lib/opencdk/main.h +++ /dev/null @@ -1,176 +0,0 @@ -/* main.h - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifndef CDK_MAIN_H -#define CDK_MAIN_H - -#include "types.h" - -#define _cdk_log_debug _gnutls_hard_log -#define _cdk_log_info _gnutls_debug_log -#define _cdk_get_log_level() _gnutls_log_level - -#define cdk_malloc gnutls_malloc -#define cdk_free gnutls_free -#define cdk_calloc gnutls_calloc -#define cdk_realloc gnutls_realloc_fast -#define cdk_strdup gnutls_strdup -#define cdk_salloc gnutls_secure_calloc - -#define map_gnutls_error _cdk_map_gnutls_error - -cdk_error_t map_gnutls_error(int err); - -/* The general size of a buffer for the variou modules. */ -#define BUFSIZE 8192 - -/* This is the default block size for the partial length packet mode. */ -#define DEF_BLOCKSIZE 8192 -#define DEF_BLOCKBITS 13 /* 2^13 = 8192 */ - -/* For now SHA-1 is used to create fingerprint for keys. - But if this will ever change, it is a good idea to - have a constant for it to avoid to change it in all files. */ -#define KEY_FPR_LEN 20 - -#include "context.h" - -/* The maximal amount of bits a multi precsion integer can have. */ -#define MAX_MPI_BITS 16384 -#define MAX_MPI_BYTES (MAX_MPI_BITS/8) - - -/* Because newer DSA variants are not limited to SHA-1, we must consider - that SHA-512 is used and increase the buffer size of the digest. */ -#define MAX_DIGEST_LEN 64 - -/* Helper to find out if the signature were made over a user ID - or if the signature revokes a previous user ID. */ -#define IS_UID_SIG(s) (((s)->sig_class & ~3) == 0x10) -#define IS_UID_REV(s) ((s)->sig_class == 0x30) - -/* Helper to find out if a key has the requested capability. */ -#define KEY_CAN_ENCRYPT(a) ((_cdk_pk_algo_usage ((a))) & CDK_KEY_USG_ENCR) -#define KEY_CAN_SIGN(a) ((_cdk_pk_algo_usage ((a))) & CDK_KEY_USG_SIGN) -#define KEY_CAN_AUTH(a) ((_cdk_pk_algo_usage ((a))) & CDK_KEY_USG_AUTH) - -#define DEBUG_PKT 0 - -/*-- main.c --*/ -char *_cdk_passphrase_get(cdk_ctx_t hd, const char *prompt); - -/*-- misc.c --*/ -int _cdk_check_args(int overwrite, const char *in, const char *out); -u32 _cdk_buftou32(const byte * buf); -void _cdk_u32tobuf(u32 u, byte * buf); -const char *_cdk_memistr(const char *buf, size_t buflen, const char *sub); -FILE *_cdk_tmpfile(void); - -/* Helper to provide case insentensive strstr version. */ -#define stristr(haystack, needle) \ - _cdk_memistr((haystack), strlen (haystack), (needle)) - -/*-- proc-packet.c --*/ -cdk_error_t _cdk_pkt_write2(cdk_stream_t out, int pkttype, void *pktctx); - -/*-- pubkey.c --*/ -u32 _cdk_pkt_get_keyid(cdk_packet_t pkt, u32 * keyid); -cdk_error_t _cdk_pkt_get_fingerprint(cdk_packet_t pkt, byte * fpr); -int _cdk_pk_algo_usage(int algo); -int _cdk_pk_test_algo(int algo, unsigned int usage); -int _cdk_sk_get_csum(cdk_pkt_seckey_t sk); - -/*-- new-packet.c --*/ -byte *_cdk_subpkt_get_array(cdk_subpkt_t s, int count, size_t * r_nbytes); -cdk_error_t _cdk_subpkt_copy(cdk_subpkt_t * r_dst, cdk_subpkt_t src); -void _cdk_pkt_detach_free(cdk_packet_t pkt, int *r_pkttype, void **ctx); - -/*-- sig-check.c --*/ -cdk_error_t _cdk_sig_check(cdk_pkt_pubkey_t pk, cdk_pkt_signature_t sig, - digest_hd_st * digest, int *r_expired); -cdk_error_t _cdk_hash_sig_data(cdk_pkt_signature_t sig, digest_hd_st * hd); -cdk_error_t _cdk_hash_userid(cdk_pkt_userid_t uid, int sig_version, - digest_hd_st * md); -cdk_error_t _cdk_hash_pubkey(cdk_pkt_pubkey_t pk, digest_hd_st * md, - int use_fpr); -cdk_error_t _cdk_pk_check_sig(cdk_keydb_hd_t hd, cdk_kbnode_t knode, - cdk_kbnode_t snode, int *is_selfsig, - char **ret_uid); - -/*-- kbnode.c --*/ -void _cdk_kbnode_add(cdk_kbnode_t root, cdk_kbnode_t node); -void _cdk_kbnode_clone(cdk_kbnode_t node); - -/*-- sesskey.c --*/ -cdk_error_t _cdk_sk_unprotect_auto(cdk_ctx_t hd, cdk_pkt_seckey_t sk); - -/*-- keydb.c --*/ -int _cdk_keydb_is_secret(cdk_keydb_hd_t db); -cdk_error_t _cdk_keydb_get_pk_byusage(cdk_keydb_hd_t hd, const char *name, - cdk_pkt_pubkey_t * ret_pk, - int usage); -cdk_error_t _cdk_keydb_get_sk_byusage(cdk_keydb_hd_t hd, const char *name, - cdk_pkt_seckey_t * ret_sk, - int usage); -cdk_error_t _cdk_keydb_check_userid(cdk_keydb_hd_t hd, u32 * keyid, - const char *id); - -/*-- sign.c --*/ -int _cdk_sig_hash_for(cdk_pkt_pubkey_t pk); -cdk_error_t _cdk_sig_create(cdk_pkt_pubkey_t pk, cdk_pkt_signature_t sig); -cdk_error_t _cdk_sig_complete(cdk_pkt_signature_t sig, cdk_pkt_seckey_t sk, - digest_hd_st * hd); - -/*-- stream.c --*/ -void _cdk_stream_set_compress_algo(cdk_stream_t s, int algo); -cdk_error_t _cdk_stream_open_mode(const char *file, const char *mode, - cdk_stream_t * ret_s); -void *_cdk_stream_get_uint8_t(cdk_stream_t s, int fid); -const char *_cdk_stream_get_fname(cdk_stream_t s); -FILE *_cdk_stream_get_fp(cdk_stream_t s); -int _cdk_stream_gets(cdk_stream_t s, char *buf, size_t count); -cdk_error_t _cdk_stream_append(const char *file, cdk_stream_t * ret_s); -int _cdk_stream_get_errno(cdk_stream_t s); -cdk_error_t _cdk_stream_set_blockmode(cdk_stream_t s, size_t nbytes); -int _cdk_stream_get_blockmode(cdk_stream_t s); -int _cdk_stream_puts(cdk_stream_t s, const char *buf); -cdk_error_t _cdk_stream_fpopen(FILE * fp, unsigned write_mode, - cdk_stream_t * ret_out); - - -/*-- read-packet.c --*/ -size_t _cdk_pkt_read_len(FILE * inp, size_t * ret_partial); - -/*-- write-packet.c --*/ -cdk_error_t _cdk_pkt_write_fp(FILE * out, cdk_packet_t pkt); - -/*-- seskey.c --*/ -cdk_error_t _cdk_s2k_copy(cdk_s2k_t * r_dst, cdk_s2k_t src); - -#define _cdk_pub_algo_to_pgp(algo) (algo) -#define _pgp_pub_algo_to_cdk(algo) (algo) -int _gnutls_hash_algo_to_pgp(int algo); -int _pgp_hash_algo_to_gnutls(int algo); -int _gnutls_cipher_to_pgp(int cipher); -int _pgp_cipher_to_gnutls(int cipher); - -#endif /* CDK_MAIN_H */ diff --git a/lib/opencdk/misc.c b/lib/opencdk/misc.c deleted file mode 100644 index 7c411688a1..0000000000 --- a/lib/opencdk/misc.c +++ /dev/null @@ -1,301 +0,0 @@ -/* misc.c - * Copyright (C) 1998-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include "gnutls_int.h" -#include - - -u32 _cdk_buftou32(const byte * buf) -{ - u32 u; - - if (!buf) - return 0; - u = ((u32)buf[0]) << 24; - u |= buf[1] << 16; - u |= buf[2] << 8; - u |= buf[3]; - return u; -} - - -void _cdk_u32tobuf(u32 u, byte * buf) -{ - if (!buf) - return; - buf[0] = u >> 24; - buf[1] = u >> 16; - buf[2] = u >> 8; - buf[3] = u; -} - -/** - * cdk_strlist_free: - * @sl: the string list - * - * Release the string list object. - **/ -void cdk_strlist_free(cdk_strlist_t sl) -{ - cdk_strlist_t sl2; - - for (; sl; sl = sl2) { - sl2 = sl->next; - cdk_free(sl); - } -} - - -/** - * cdk_strlist_add: - * @list: destination string list - * @string: the string to add - * - * Add the given list to the string list. - **/ -cdk_strlist_t cdk_strlist_add(cdk_strlist_t * list, const char *string) -{ - if (!string) - return NULL; - - cdk_strlist_t sl; - int string_size = strlen(string); - - sl = cdk_calloc(1, sizeof *sl + string_size + 2); - if (!sl) - return NULL; - sl->d = (char *) sl + sizeof(*sl); - memcpy(sl->d, string, string_size + 1); - sl->next = *list; - *list = sl; - return sl; -} - -const char *_cdk_memistr(const char *buf, size_t buflen, const char *sub) -{ - const byte *t, *s; - size_t n; - - for (t = (byte *) buf, n = buflen, s = (byte *) sub; n; t++, n--) { - if (c_toupper(*t) == c_toupper(*s)) { - for (buf = (char *) t++, buflen = n--, s++; - n && c_toupper(*t) == c_toupper((byte) * s); - t++, s++, n--); - if (!*s) - return buf; - t = (byte *) buf; - n = buflen; - s = (byte *) sub; - } - } - - return NULL; -} - -cdk_error_t _cdk_map_gnutls_error(int err) -{ - switch (err) { - case 0: - return CDK_Success; - case GNUTLS_E_INVALID_REQUEST: - return CDK_Inv_Value; - default: - return CDK_General_Error; - } -} - - -int _cdk_check_args(int overwrite, const char *in, const char *out) -{ - struct stat stbuf; - - if (!in || !out) - return CDK_Inv_Value; - if (strlen(in) == strlen(out) && strcmp(in, out) == 0) - return CDK_Inv_Mode; - if (!overwrite && !stat(out, &stbuf)) - return CDK_Inv_Mode; - return 0; -} - -#ifdef _WIN32 -#include -#include - -FILE *_cdk_tmpfile(void) -{ - /* Because the tmpfile() version of wine is not really useful, - we implement our own version to avoid problems with 'make check'. */ - static const char *letters = "abcdefghijklmnopqrstuvwxyz"; - unsigned char buf[512], rnd[24]; - FILE *fp; - int fd, i; - - gnutls_rnd(GNUTLS_RND_NONCE, rnd, DIM(rnd)); - for (i = 0; i < DIM(rnd) - 1; i++) { - char c = letters[(unsigned char) rnd[i] % 26]; - rnd[i] = c; - } - rnd[DIM(rnd) - 1] = 0; - if (!GetTempPath(464, buf)) - return NULL; - _gnutls_str_cat(buf, sizeof(buf), "_cdk_"); - _gnutls_str_cat(buf, sizeof(buf), rnd); - - /* We need to make sure the file will be deleted when it is closed. */ - fd = _open(buf, _O_CREAT | _O_EXCL | _O_TEMPORARY | - _O_RDWR | _O_BINARY, _S_IREAD | _S_IWRITE); - if (fd == -1) - return NULL; - fp = fdopen(fd, "w+b"); - if (fp != NULL) - return fp; - _close(fd); - return NULL; -} -#else -FILE *_cdk_tmpfile(void) -{ - return tmpfile(); -} -#endif - -int _gnutls_hash_algo_to_pgp(int algo) -{ - switch (algo) { - case GNUTLS_DIG_MD5: - return 0x01; - case GNUTLS_DIG_MD2: - return 0x05; - case GNUTLS_DIG_SHA1: - return 0x02; - case GNUTLS_DIG_RMD160: - return 0x03; - case GNUTLS_DIG_SHA256: - return 0x08; - case GNUTLS_DIG_SHA384: - return 0x09; - case GNUTLS_DIG_SHA512: - return 0x0A; - case GNUTLS_DIG_SHA224: - return 0x0B; - default: - gnutls_assert(); - return 0x00; - } -} - -int _pgp_hash_algo_to_gnutls(int algo) -{ - switch (algo) { - case 0x01: - return GNUTLS_DIG_MD5; - case 0x02: - return GNUTLS_DIG_SHA1; - case 0x03: - return GNUTLS_DIG_RMD160; - case 0x05: - return GNUTLS_DIG_MD2; - case 0x08: - return GNUTLS_DIG_SHA256; - case 0x09: - return GNUTLS_DIG_SHA384; - case 0x0A: - return GNUTLS_DIG_SHA512; - case 0x0B: - return GNUTLS_DIG_SHA224; - default: - gnutls_assert(); - return GNUTLS_DIG_NULL; - } -} - -int _pgp_cipher_to_gnutls(int cipher) -{ - switch (cipher) { - case 0: - return GNUTLS_CIPHER_NULL; - case 1: - return GNUTLS_CIPHER_IDEA_PGP_CFB; - case 2: - return GNUTLS_CIPHER_3DES_PGP_CFB; - case 3: - return GNUTLS_CIPHER_CAST5_PGP_CFB; - case 4: - return GNUTLS_CIPHER_BLOWFISH_PGP_CFB; - case 5: - return GNUTLS_CIPHER_SAFER_SK128_PGP_CFB; - case 7: - return GNUTLS_CIPHER_AES128_PGP_CFB; - case 8: - return GNUTLS_CIPHER_AES192_PGP_CFB; - case 9: - return GNUTLS_CIPHER_AES256_PGP_CFB; - case 10: - return GNUTLS_CIPHER_TWOFISH_PGP_CFB; - - default: - gnutls_assert(); - _gnutls_debug_log("Unknown openpgp cipher %u\n", cipher); - return GNUTLS_CIPHER_UNKNOWN; - } -} - -int _gnutls_cipher_to_pgp(int cipher) -{ - switch (cipher) { - case GNUTLS_CIPHER_NULL: - return 0; - case GNUTLS_CIPHER_IDEA_PGP_CFB: - return 1; - case GNUTLS_CIPHER_3DES_PGP_CFB: - return 2; - case GNUTLS_CIPHER_CAST5_PGP_CFB: - return 3; - case GNUTLS_CIPHER_BLOWFISH_PGP_CFB: - return 4; - case GNUTLS_CIPHER_SAFER_SK128_PGP_CFB: - return 5; - case GNUTLS_CIPHER_AES128_PGP_CFB: - return 7; - case GNUTLS_CIPHER_AES192_PGP_CFB: - return 8; - case GNUTLS_CIPHER_AES256_PGP_CFB: - return 9; - case GNUTLS_CIPHER_TWOFISH_PGP_CFB: - return 10; - default: - gnutls_assert(); - return 0; - } -} diff --git a/lib/opencdk/new-packet.c b/lib/opencdk/new-packet.c deleted file mode 100644 index 1b35ef657f..0000000000 --- a/lib/opencdk/new-packet.c +++ /dev/null @@ -1,799 +0,0 @@ -/* new-packet.c - packet handling (freeing, copying, ...) - * Copyright (C) 2001-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include - -#include "opencdk.h" -#include "main.h" -#include "packet.h" - - -/* Release an array of MPI values. */ -void _cdk_free_mpibuf(size_t n, bigint_t * array) -{ - while (n--) { - _gnutls_mpi_release(&array[n]); - } -} - - -/** - * cdk_pkt_new: - * @r_pkt: the new packet - * - * Allocate a new packet. - **/ -cdk_error_t cdk_pkt_new(cdk_packet_t * r_pkt) -{ - cdk_packet_t pkt; - - if (!r_pkt) - return CDK_Inv_Value; - pkt = cdk_calloc(1, sizeof *pkt); - if (!pkt) - return CDK_Out_Of_Core; - *r_pkt = pkt; - return 0; -} - - -static void free_pubkey_enc(cdk_pkt_pubkey_enc_t enc) -{ - size_t nenc; - - if (!enc) - return; - - nenc = cdk_pk_get_nenc(enc->pubkey_algo); - _cdk_free_mpibuf(nenc, enc->mpi); - cdk_free(enc); -} - - -static void free_literal(cdk_pkt_literal_t pt) -{ - if (!pt) - return; - /* The buffer which is referenced in this packet is closed - elsewhere. To close it here would cause a double close. */ - cdk_free(pt); -} - - -void _cdk_free_userid(cdk_pkt_userid_t uid) -{ - if (!uid) - return; - - cdk_free(uid->prefs); - uid->prefs = NULL; - cdk_free(uid->attrib_img); - uid->attrib_img = NULL; - cdk_free(uid); -} - - -void _cdk_free_signature(cdk_pkt_signature_t sig) -{ - cdk_desig_revoker_t r; - size_t nsig; - - if (!sig) - return; - - nsig = cdk_pk_get_nsig(sig->pubkey_algo); - _cdk_free_mpibuf(nsig, sig->mpi); - - cdk_subpkt_free(sig->hashed); - sig->hashed = NULL; - cdk_subpkt_free(sig->unhashed); - sig->unhashed = NULL; - while (sig->revkeys) { - r = sig->revkeys->next; - cdk_free(sig->revkeys); - sig->revkeys = r; - } - cdk_free(sig); -} - - -void cdk_pk_release(cdk_pubkey_t pk) -{ - size_t npkey; - - if (!pk) - return; - - npkey = cdk_pk_get_npkey(pk->pubkey_algo); - _cdk_free_userid(pk->uid); - pk->uid = NULL; - cdk_free(pk->prefs); - pk->prefs = NULL; - _cdk_free_mpibuf(npkey, pk->mpi); - cdk_free(pk); -} - - -void cdk_sk_release(cdk_seckey_t sk) -{ - size_t nskey; - - if (!sk) - return; - - nskey = cdk_pk_get_nskey(sk->pubkey_algo); - _cdk_free_mpibuf(nskey, sk->mpi); - cdk_free(sk->encdata); - sk->encdata = NULL; - cdk_pk_release(sk->pk); - sk->pk = NULL; - cdk_s2k_free(sk->protect.s2k); - sk->protect.s2k = NULL; - cdk_free(sk); -} - - -/* Detach the openpgp packet from the packet structure - and release the packet structure itself. */ -void _cdk_pkt_detach_free(cdk_packet_t pkt, int *r_pkttype, void **ctx) -{ - /* For now we just allow this for keys. */ - switch (pkt->pkttype) { - case CDK_PKT_PUBLIC_KEY: - case CDK_PKT_PUBLIC_SUBKEY: - *ctx = pkt->pkt.public_key; - break; - - case CDK_PKT_SECRET_KEY: - case CDK_PKT_SECRET_SUBKEY: - *ctx = pkt->pkt.secret_key; - break; - - default: - *r_pkttype = 0; - return; - } - - /* The caller might expect a specific packet type and - is not interested to store it for later use. */ - if (r_pkttype) - *r_pkttype = pkt->pkttype; - - cdk_free(pkt); -} - - -void cdk_pkt_free(cdk_packet_t pkt) -{ - if (!pkt) - return; - - switch (pkt->pkttype) { - case CDK_PKT_ATTRIBUTE: - case CDK_PKT_USER_ID: - _cdk_free_userid(pkt->pkt.user_id); - break; - case CDK_PKT_PUBLIC_KEY: - case CDK_PKT_PUBLIC_SUBKEY: - cdk_pk_release(pkt->pkt.public_key); - break; - case CDK_PKT_SECRET_KEY: - case CDK_PKT_SECRET_SUBKEY: - cdk_sk_release(pkt->pkt.secret_key); - break; - case CDK_PKT_SIGNATURE: - _cdk_free_signature(pkt->pkt.signature); - break; - case CDK_PKT_PUBKEY_ENC: - free_pubkey_enc(pkt->pkt.pubkey_enc); - break; - case CDK_PKT_MDC: - cdk_free(pkt->pkt.mdc); - break; - case CDK_PKT_ONEPASS_SIG: - cdk_free(pkt->pkt.onepass_sig); - break; - case CDK_PKT_LITERAL: - free_literal(pkt->pkt.literal); - break; - case CDK_PKT_COMPRESSED: - cdk_free(pkt->pkt.compressed); - break; - default: - break; - } - - /* Reset the packet type to avoid, when cdk_pkt_release() will be - used, that the second cdk_pkt_free() call will double free the data. */ - pkt->pkttype = 0; -} - - -/** - * cdk_pkt_release: - * @pkt: the packet - * - * Free the contents of the given package and - * release the memory of the structure. - **/ -void cdk_pkt_release(cdk_packet_t pkt) -{ - if (!pkt) - return; - cdk_pkt_free(pkt); - cdk_free(pkt); -} - - -/** - * cdk_pkt_alloc: - * @r_pkt: output is the new packet - * @pkttype: the requested packet type - * - * Allocate a new packet structure with the given packet type. - **/ -cdk_error_t cdk_pkt_alloc(cdk_packet_t * r_pkt, cdk_packet_type_t pkttype) -{ - cdk_packet_t pkt; - int rc; - - if (!r_pkt) - return CDK_Inv_Value; - - rc = cdk_pkt_new(&pkt); - if (rc) - return rc; - - switch (pkttype) { - case CDK_PKT_USER_ID: - pkt->pkt.user_id = cdk_calloc(1, sizeof *pkt->pkt.user_id); - if (!pkt->pkt.user_id) - return CDK_Out_Of_Core; - pkt->pkt.user_id->name = NULL; - break; - - case CDK_PKT_PUBLIC_KEY: - case CDK_PKT_PUBLIC_SUBKEY: - pkt->pkt.public_key = - cdk_calloc(1, sizeof *pkt->pkt.public_key); - if (!pkt->pkt.public_key) - return CDK_Out_Of_Core; - break; - - case CDK_PKT_SECRET_KEY: - case CDK_PKT_SECRET_SUBKEY: - pkt->pkt.secret_key = - cdk_calloc(1, sizeof *pkt->pkt.secret_key); - if (!pkt->pkt.secret_key) - return CDK_Out_Of_Core; - - pkt->pkt.secret_key->pk = - cdk_calloc(1, sizeof *pkt->pkt.secret_key->pk); - if (!pkt->pkt.secret_key->pk) { - cdk_free(pkt->pkt.secret_key); - pkt->pkt.secret_key = NULL; - return CDK_Out_Of_Core; - } - break; - - case CDK_PKT_SIGNATURE: - pkt->pkt.signature = - cdk_calloc(1, sizeof *pkt->pkt.signature); - if (!pkt->pkt.signature) - return CDK_Out_Of_Core; - break; - - case CDK_PKT_PUBKEY_ENC: - pkt->pkt.pubkey_enc = - cdk_calloc(1, sizeof *pkt->pkt.pubkey_enc); - if (!pkt->pkt.pubkey_enc) - return CDK_Out_Of_Core; - break; - - case CDK_PKT_MDC: - pkt->pkt.mdc = cdk_calloc(1, sizeof *pkt->pkt.mdc); - if (!pkt->pkt.mdc) - return CDK_Out_Of_Core; - break; - - case CDK_PKT_ONEPASS_SIG: - pkt->pkt.onepass_sig = - cdk_calloc(1, sizeof *pkt->pkt.onepass_sig); - if (!pkt->pkt.onepass_sig) - return CDK_Out_Of_Core; - break; - - case CDK_PKT_LITERAL: - /* FIXME: We would need the size of the file name to allocate extra - bytes, otherwise the result would be useless. */ - pkt->pkt.literal = cdk_calloc(1, sizeof *pkt->pkt.literal); - if (!pkt->pkt.literal) - return CDK_Out_Of_Core; - pkt->pkt.literal->name = NULL; - break; - - default: - return CDK_Not_Implemented; - } - pkt->pkttype = pkttype; - *r_pkt = pkt; - return 0; -} - - -cdk_prefitem_t _cdk_copy_prefs(const cdk_prefitem_t prefs) -{ - size_t n = 0; - struct cdk_prefitem_s *new_prefs; - - if (!prefs) - return NULL; - - for (n = 0; prefs[n].type; n++); - new_prefs = cdk_calloc(1, sizeof *new_prefs * (n + 1)); - if (!new_prefs) - return NULL; - for (n = 0; prefs[n].type; n++) { - new_prefs[n].type = prefs[n].type; - new_prefs[n].value = prefs[n].value; - } - new_prefs[n].type = CDK_PREFTYPE_NONE; - new_prefs[n].value = 0; - return new_prefs; -} - - -cdk_error_t _cdk_copy_userid(cdk_pkt_userid_t * dst, cdk_pkt_userid_t src) -{ - cdk_pkt_userid_t u; - - if (!dst || !src) - return CDK_Inv_Value; - - *dst = NULL; - u = cdk_calloc(1, sizeof *u + strlen(src->name) + 2); - if (!u) - return CDK_Out_Of_Core; - u->name = (char *) u + sizeof(*u); - - memcpy(u, src, sizeof *u); - memcpy(u->name, src->name, strlen(src->name)); - u->prefs = _cdk_copy_prefs(src->prefs); - if (src->selfsig) - _cdk_copy_signature(&u->selfsig, src->selfsig); - *dst = u; - - return 0; -} - - -cdk_error_t _cdk_copy_pubkey(cdk_pkt_pubkey_t * dst, cdk_pkt_pubkey_t src) -{ - cdk_pkt_pubkey_t k; - int i; - - if (!dst || !src) - return CDK_Inv_Value; - - *dst = NULL; - k = cdk_calloc(1, sizeof *k); - if (!k) - return CDK_Out_Of_Core; - memcpy(k, src, sizeof *k); - if (src->uid) - _cdk_copy_userid(&k->uid, src->uid); - if (src->prefs) - k->prefs = _cdk_copy_prefs(src->prefs); - for (i = 0; i < cdk_pk_get_npkey(src->pubkey_algo); i++) - k->mpi[i] = _gnutls_mpi_copy(src->mpi[i]); - *dst = k; - - return 0; -} - - -cdk_error_t _cdk_copy_seckey(cdk_pkt_seckey_t * dst, cdk_pkt_seckey_t src) -{ - cdk_pkt_seckey_t k; - int i; - - if (!dst || !src) - return CDK_Inv_Value; - - *dst = NULL; - k = cdk_calloc(1, sizeof *k); - if (!k) - return CDK_Out_Of_Core; - memcpy(k, src, sizeof *k); - _cdk_copy_pubkey(&k->pk, src->pk); - - if (src->encdata) { - k->encdata = cdk_calloc(1, src->enclen + 1); - if (!k->encdata) - return CDK_Out_Of_Core; - memcpy(k->encdata, src->encdata, src->enclen); - } - - _cdk_s2k_copy(&k->protect.s2k, src->protect.s2k); - for (i = 0; i < cdk_pk_get_nskey(src->pubkey_algo); i++) { - k->mpi[i] = _gnutls_mpi_copy(src->mpi[i]); - } - - *dst = k; - return 0; -} - - -cdk_error_t _cdk_copy_pk_to_sk(cdk_pkt_pubkey_t pk, cdk_pkt_seckey_t sk) -{ - if (!pk || !sk) - return CDK_Inv_Value; - - sk->version = pk->version; - sk->expiredate = pk->expiredate; - sk->pubkey_algo = _pgp_pub_algo_to_cdk(pk->pubkey_algo); - sk->has_expired = pk->has_expired; - sk->is_revoked = pk->is_revoked; - sk->main_keyid[0] = pk->main_keyid[0]; - sk->main_keyid[1] = pk->main_keyid[1]; - sk->keyid[0] = pk->keyid[0]; - sk->keyid[1] = pk->keyid[1]; - - return 0; -} - - -cdk_error_t -_cdk_copy_signature(cdk_pkt_signature_t * dst, cdk_pkt_signature_t src) -{ - cdk_pkt_signature_t s; - - if (!dst || !src) - return CDK_Inv_Value; - - *dst = NULL; - s = cdk_calloc(1, sizeof *s); - if (!s) - return CDK_Out_Of_Core; - memcpy(s, src, sizeof *src); - _cdk_subpkt_copy(&s->hashed, src->hashed); - _cdk_subpkt_copy(&s->unhashed, src->unhashed); - /* FIXME: Copy MPI parts */ - *dst = s; - - return 0; -} - - -cdk_error_t _cdk_pubkey_compare(cdk_pkt_pubkey_t a, cdk_pkt_pubkey_t b) -{ - int na, nb, i; - - if (a->timestamp != b->timestamp - || a->pubkey_algo != b->pubkey_algo) - return -1; - if (a->version < 4 && a->expiredate != b->expiredate) - return -1; - na = cdk_pk_get_npkey(a->pubkey_algo); - nb = cdk_pk_get_npkey(b->pubkey_algo); - if (na != nb) - return -1; - - for (i = 0; i < na; i++) { - if (_gnutls_mpi_cmp(a->mpi[i], b->mpi[i])) - return -1; - } - - return 0; -} - - -/** - * cdk_subpkt_free: - * @ctx: the sub packet node to free - * - * Release the context. - **/ -void cdk_subpkt_free(cdk_subpkt_t ctx) -{ - cdk_subpkt_t s; - - while (ctx) { - s = ctx->next; - cdk_free(ctx); - ctx = s; - } -} - - -/** - * cdk_subpkt_find: - * @ctx: the sub packet node - * @type: the packet type to find - * - * Find the given packet type in the node. If no packet with this - * type was found, return null otherwise pointer to the node. - **/ -cdk_subpkt_t cdk_subpkt_find(cdk_subpkt_t ctx, size_t type) -{ - return cdk_subpkt_find_nth(ctx, type, 0); -} - -/** - * cdk_subpkt_type_count: - * @ctx: The sub packet context - * @type: The sub packet type. - * - * Return the amount of sub packets with this type. - **/ -size_t cdk_subpkt_type_count(cdk_subpkt_t ctx, size_t type) -{ - cdk_subpkt_t s; - size_t count; - - count = 0; - for (s = ctx; s; s = s->next) { - if (s->type == type) - count++; - } - - return count; -} - - -/** - * cdk_subpkt_find_nth: - * @ctx: The sub packet context - * @type: The sub packet type - * @index: The nth packet to retrieve, 0 means the first - * - * Return the nth sub packet of the given type. - **/ -cdk_subpkt_t cdk_subpkt_find_nth(cdk_subpkt_t ctx, size_t type, size_t idx) -{ - cdk_subpkt_t s; - size_t pos; - - pos = 0; - for (s = ctx; s; s = s->next) { - if (s->type == type && pos++ == idx) - return s; - } - - return NULL; -} - - -/** - * cdk_subpkt_new: - * @size: the size of the new context - * - * Create a new sub packet node with the size of @size. - **/ -cdk_subpkt_t cdk_subpkt_new(size_t size) -{ - cdk_subpkt_t s; - - if (!size) - return NULL; - s = cdk_calloc(1, sizeof *s + size + 2); - if (!s) - return NULL; - s->d = (byte *) s + sizeof(*s); - - return s; -} - - -/** - * cdk_subpkt_get_data: - * @ctx: the sub packet node - * @r_type: pointer store the packet type - * @r_nbytes: pointer to store the packet size - * - * Extract the data from the given sub packet. The type is returned - * in @r_type and the size in @r_nbytes. - **/ -const byte *cdk_subpkt_get_data(cdk_subpkt_t ctx, size_t * r_type, - size_t * r_nbytes) -{ - if (!ctx || !r_nbytes) - return NULL; - if (r_type) - *r_type = ctx->type; - *r_nbytes = ctx->size; - return ctx->d; -} - - -/** - * cdk_subpkt_add: - * @root: the root node - * @node: the node to add - * - * Add the node in @node to the root node @root. - **/ -cdk_error_t cdk_subpkt_add(cdk_subpkt_t root, cdk_subpkt_t node) -{ - cdk_subpkt_t n1; - - if (!root) - return CDK_Inv_Value; - for (n1 = root; n1->next; n1 = n1->next); - n1->next = node; - return 0; -} - - -byte *_cdk_subpkt_get_array(cdk_subpkt_t s, int count, size_t * r_nbytes) -{ - cdk_subpkt_t list; - byte *buf; - size_t n, nbytes; - - if (!s) { - if (r_nbytes) - *r_nbytes = 0; - return NULL; - } - - for (n = 0, list = s; list; list = list->next) { - n++; /* type */ - n += list->size; - if (list->size < 192) - n++; - else if (list->size < 8384) - n += 2; - else - n += 5; - } - buf = cdk_calloc(1, n + 1); - if (!buf) - return NULL; - - n = 0; - for (list = s; list; list = list->next) { - nbytes = 1 + list->size; /* type */ - if (nbytes < 192) - buf[n++] = nbytes; - else if (nbytes < 8384) { - nbytes -= 192; - buf[n++] = nbytes / 256 + 192; - buf[n++] = nbytes & 0xff; - } else { - buf[n++] = 0xFF; - buf[n++] = nbytes >> 24; - buf[n++] = nbytes >> 16; - buf[n++] = nbytes >> 8; - buf[n++] = nbytes; - } - - buf[n++] = list->type; - memcpy(buf + n, list->d, list->size); - n += list->size; - } - - if (count) { - cdk_free(buf); - buf = NULL; - } - if (r_nbytes) - *r_nbytes = n; - return buf; -} - - -cdk_error_t _cdk_subpkt_copy(cdk_subpkt_t * r_dst, cdk_subpkt_t src) -{ - cdk_subpkt_t root, p, node; - - if (!src || !r_dst) - return CDK_Inv_Value; - - root = NULL; - for (p = src; p; p = p->next) { - node = cdk_subpkt_new(p->size); - if (node) { - memcpy(node->d, p->d, p->size); - node->type = p->type; - node->size = p->size; - } - if (!root) - root = node; - else - cdk_subpkt_add(root, node); - } - *r_dst = root; - return 0; -} - - -/** - * cdk_subpkt_init: - * @node: the sub packet node - * @type: type of the packet which data should be initialized - * @buf: the buffer with the actual data - * @buflen: the size of the data - * - * Set the packet data of the given root and set the type of it. - **/ -void -cdk_subpkt_init(cdk_subpkt_t node, size_t type, - const void *buf, size_t buflen) -{ - if (!node) - return; - node->type = type; - node->size = buflen; - memcpy(node->d, buf, buflen); -} - - -/* FIXME: We need to think of a public interface for it. */ -const byte *cdk_key_desig_revoker_walk(cdk_desig_revoker_t root, - cdk_desig_revoker_t * ctx, - int *r_class, int *r_algid) -{ - cdk_desig_revoker_t n; - - if (!*ctx) { - *ctx = root; - n = root; - } else { - n = (*ctx)->next; - *ctx = n; - } - - if (n && r_class && r_algid) { - *r_class = n->r_class; - *r_algid = n->algid; - } - - return n ? n->fpr : NULL; -} - - -/** - * cdk_subpkt_find_next: - * @root: the base where to begin the iteration - * @type: the type to find or 0 for the next node. - * - * Try to find the next node after @root with type. - * If type is 0, the next node will be returned. - **/ -cdk_subpkt_t cdk_subpkt_find_next(cdk_subpkt_t root, size_t type) -{ - cdk_subpkt_t node; - - for (node = root->next; node; node = node->next) { - if (!type) - return node; - else if (node->type == type) - return node; - } - - return NULL; -} diff --git a/lib/opencdk/opencdk.h b/lib/opencdk/opencdk.h deleted file mode 100644 index 094a90ba47..0000000000 --- a/lib/opencdk/opencdk.h +++ /dev/null @@ -1,963 +0,0 @@ -/* opencdk.h - Open Crypto Development Kit (OpenCDK) - * Copyright (C) 2001-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifndef OPENCDK_H -#define OPENCDK_H - -#include -#include "gnutls_int.h" -#include /* for size_t */ -#include -#include -#include -#include "errors.h" -#include - -/* The OpenCDK version as a string. */ -#define OPENCDK_VERSION "0.6.6" - -/* The OpenCDK version as integer components major.minor.path */ -#define OPENCDK_VERSION_MAJOR 0 -#define OPENCDK_VERSION_MINOR 6 -#define OPENCDK_VERSION_PATCH 6 - -#ifdef __cplusplus -extern "C" { -#endif - -/* General contexts */ - -/* 'Session' handle to support the various options and run-time - information. */ - struct cdk_ctx_s; - typedef struct cdk_ctx_s *cdk_ctx_t; - -/* A generic context to store list of strings. */ - struct cdk_strlist_s; - typedef struct cdk_strlist_s *cdk_strlist_t; - -/* Context used to list keys of a keyring. */ - struct cdk_listkey_s; - typedef struct cdk_listkey_s *cdk_listkey_t; - -/* Opaque String to Key (S2K) handle. */ - struct cdk_s2k_s; - typedef struct cdk_s2k_s *cdk_s2k_t; - -/* Abstract I/O object, a stream, which is used for most operations. */ - struct cdk_stream_s; - typedef struct cdk_stream_s *cdk_stream_t; - -/* Opaque handle for the user ID preferences. */ - struct cdk_prefitem_s; - typedef struct cdk_prefitem_s *cdk_prefitem_t; - -/* Node to store a single key node packet. */ - struct cdk_kbnode_s; - typedef struct cdk_kbnode_s *cdk_kbnode_t; - -/* Key database handle. */ - struct cdk_keydb_hd_s; - typedef struct cdk_keydb_hd_s *cdk_keydb_hd_t; - - struct cdk_keydb_search_s; - typedef struct cdk_keydb_search_s *cdk_keydb_search_t; - -/* Context to store a list of recipient keys. */ - struct cdk_keylist_s; - typedef struct cdk_keylist_s *cdk_keylist_t; - -/* Context to encapsulate a single sub packet of a signature. */ - struct cdk_subpkt_s; - typedef struct cdk_subpkt_s *cdk_subpkt_t; - -/* Context used to generate key pairs. */ - struct cdk_keygen_ctx_s; - typedef struct cdk_keygen_ctx_s *cdk_keygen_ctx_t; - -/* Handle for a single designated revoker. */ - struct cdk_desig_revoker_s; - typedef struct cdk_desig_revoker_s *cdk_desig_revoker_t; - -/* Alias for backward compatibility. */ - typedef bigint_t cdk_mpi_t; - - -/* All valid error constants. */ - typedef enum { - CDK_EOF = -1, - CDK_Success = 0, - CDK_General_Error = 1, - CDK_File_Error = 2, - CDK_Bad_Sig = 3, - CDK_Inv_Packet = 4, - CDK_Inv_Algo = 5, - CDK_Not_Implemented = 6, - CDK_Armor_Error = 8, - CDK_Armor_CRC_Error = 9, - CDK_MPI_Error = 10, - CDK_Inv_Value = 11, - CDK_Error_No_Key = 12, - CDK_Chksum_Error = 13, - CDK_Time_Conflict = 14, - CDK_Zlib_Error = 15, - CDK_Weak_Key = 16, - CDK_Out_Of_Core = 17, - CDK_Wrong_Seckey = 18, - CDK_Bad_MDC = 19, - CDK_Inv_Mode = 20, - CDK_Error_No_Keyring = 21, - CDK_Wrong_Format = 22, - CDK_Inv_Packet_Ver = 23, - CDK_Too_Short = 24, - CDK_Unusable_Key = 25, - CDK_No_Data = 26, - CDK_No_Passphrase = 27, - CDK_Network_Error = 28 - } cdk_error_t; - - - enum cdk_control_flags { - CDK_CTLF_SET = 0, /* Value to set an option */ - CDK_CTLF_GET = 1, /* Value to get an option */ - CDK_CTL_DIGEST = 10, /* Option to set the digest algorithm. */ - CDK_CTL_ARMOR = 12, /* Option to enable armor output. */ - CDK_CTL_COMPRESS = 13, /* Option to enable compression. */ - CDK_CTL_COMPAT = 14, /* Option to switch in compat mode. */ - CDK_CTL_OVERWRITE = 15, /* Option to enable file overwritting. */ - CDK_CTL_S2K = 16, /* Option to set S2K values. */ - CDK_CTL_FORCE_DIGEST = 19, /* Force the use of a digest algorithm. */ - CDK_CTL_BLOCKMODE_ON = 20 /* Enable partial body lengths */ - }; - - -/* Specifies all valid log levels. */ - enum cdk_log_level_t { - CDK_LOG_NONE = 0, /* No log message will be shown. */ - CDK_LOG_INFO = 1, - CDK_LOG_DEBUG = 2, - CDK_LOG_DEBUG_PKT = 3 - }; - - -/* All valid compression algorithms in OpenPGP */ - enum cdk_compress_algo_t { - CDK_COMPRESS_NONE = 0, - CDK_COMPRESS_ZIP = 1, - CDK_COMPRESS_ZLIB = 2, - CDK_COMPRESS_BZIP2 = 3 /* Not supported in this version */ - }; - -/* All valid public key algorithms valid in OpenPGP */ - enum cdk_pubkey_algo_t { - CDK_PK_UNKNOWN = 0, - CDK_PK_RSA = 1, - CDK_PK_RSA_E = 2, /* RSA-E and RSA-S are deprecated use RSA instead */ - CDK_PK_RSA_S = 3, /* and use the key flags in the self signatures. */ - CDK_PK_ELG_E = 16, - CDK_PK_DSA = 17 - }; - -/* The valid 'String-To-Key' modes */ - enum cdk_s2k_type_t { - CDK_S2K_SIMPLE = 0, - CDK_S2K_SALTED = 1, - CDK_S2K_ITERSALTED = 3, - CDK_S2K_GNU_EXT = 101 - /* GNU extensions: refer to DETAILS from GnuPG: - http://cvs.gnupg.org/cgi-bin/viewcvs.cgi/trunk/doc/DETAILS?root=GnuPG - */ - }; - -/* The different kind of user ID preferences. */ - enum cdk_pref_type_t { - CDK_PREFTYPE_NONE = 0, - CDK_PREFTYPE_SYM = 1, /* Symmetric ciphers */ - CDK_PREFTYPE_HASH = 2, /* Message digests */ - CDK_PREFTYPE_ZIP = 3 /* Compression algorithms */ - }; - - -/* All valid sub packet types. */ - enum cdk_sig_subpacket_t { - CDK_SIGSUBPKT_NONE = 0, - CDK_SIGSUBPKT_SIG_CREATED = 2, - CDK_SIGSUBPKT_SIG_EXPIRE = 3, - CDK_SIGSUBPKT_EXPORTABLE = 4, - CDK_SIGSUBPKT_TRUST = 5, - CDK_SIGSUBPKT_REGEXP = 6, - CDK_SIGSUBPKT_REVOCABLE = 7, - CDK_SIGSUBPKT_KEY_EXPIRE = 9, - CDK_SIGSUBPKT_PREFS_SYM = 11, - CDK_SIGSUBPKT_REV_KEY = 12, - CDK_SIGSUBPKT_ISSUER = 16, - CDK_SIGSUBPKT_NOTATION = 20, - CDK_SIGSUBPKT_PREFS_HASH = 21, - CDK_SIGSUBPKT_PREFS_ZIP = 22, - CDK_SIGSUBPKT_KS_FLAGS = 23, - CDK_SIGSUBPKT_PREF_KS = 24, - CDK_SIGSUBPKT_PRIMARY_UID = 25, - CDK_SIGSUBPKT_POLICY = 26, - CDK_SIGSUBPKT_KEY_FLAGS = 27, - CDK_SIGSUBPKT_SIGNERS_UID = 28, - CDK_SIGSUBPKT_REVOC_REASON = 29, - CDK_SIGSUBPKT_FEATURES = 30 - }; - - -/* All valid armor types. */ - enum cdk_armor_type_t { - CDK_ARMOR_MESSAGE = 0, - CDK_ARMOR_PUBKEY = 1, - CDK_ARMOR_SECKEY = 2, - CDK_ARMOR_SIGNATURE = 3, - CDK_ARMOR_CLEARSIG = 4 - }; - - enum cdk_keydb_flag_t { - /* Valid database search modes */ - CDK_DBSEARCH_EXACT = 1, /* Exact string search */ - CDK_DBSEARCH_SUBSTR = 2, /* Sub string search */ - CDK_DBSEARCH_SHORT_KEYID = 3, /* 32-bit keyid search */ - CDK_DBSEARCH_KEYID = 4, /* 64-bit keyid search */ - CDK_DBSEARCH_FPR = 5, /* 160-bit fingerprint search */ - CDK_DBSEARCH_NEXT = 6, /* Enumerate all keys */ - CDK_DBSEARCH_AUTO = 7, /* Try to classify the string */ - /* Valid database types */ - CDK_DBTYPE_PK_KEYRING = 100, /* A file with one or more public keys */ - CDK_DBTYPE_SK_KEYRING = 101, /* A file with one or more secret keys */ - CDK_DBTYPE_DATA = 102, /* A buffer with at least one public key */ - }; - - -/* All valid modes for cdk_data_transform() */ - enum cdk_crypto_mode_t { - CDK_CRYPTYPE_NONE = 0, - CDK_CRYPTYPE_ENCRYPT = 1, - CDK_CRYPTYPE_DECRYPT = 2, - CDK_CRYPTYPE_SIGN = 3, - CDK_CRYPTYPE_VERIFY = 4, - CDK_CRYPTYPE_EXPORT = 5, - CDK_CRYPTYPE_IMPORT = 6 - }; - -#define CDK_KEY_USG_ENCR (CDK_KEY_USG_COMM_ENCR | CDK_KEY_USG_STORAGE_ENCR) -#define CDK_KEY_USG_SIGN (CDK_KEY_USG_DATA_SIGN | CDK_KEY_USG_CERT_SIGN) -/* A list of valid public key usages. */ - enum cdk_key_usage_t { - CDK_KEY_USG_CERT_SIGN = 1, - CDK_KEY_USG_DATA_SIGN = 2, - CDK_KEY_USG_COMM_ENCR = 4, - CDK_KEY_USG_STORAGE_ENCR = 8, - CDK_KEY_USG_SPLIT_KEY = 16, - CDK_KEY_USG_AUTH = 32, - CDK_KEY_USG_SHARED_KEY = 128 - }; - - -/* Valid flags for keys. */ - enum cdk_key_flag_t { - CDK_KEY_VALID = 0, - CDK_KEY_INVALID = 1, /* Missing or wrong self signature */ - CDK_KEY_EXPIRED = 2, /* Key is expired. */ - CDK_KEY_REVOKED = 4, /* Key has been revoked. */ - CDK_KEY_NOSIGNER = 8 - }; - - -/* Trust values and flags for keys and user IDs */ - enum cdk_trust_flag_t { - CDK_TRUST_UNKNOWN = 0, - CDK_TRUST_EXPIRED = 1, - CDK_TRUST_UNDEFINED = 2, - CDK_TRUST_NEVER = 3, - CDK_TRUST_MARGINAL = 4, - CDK_TRUST_FULLY = 5, - CDK_TRUST_ULTIMATE = 6, - /* trust flags */ - CDK_TFLAG_REVOKED = 32, - CDK_TFLAG_SUB_REVOKED = 64, - CDK_TFLAG_DISABLED = 128 - }; - - -/* Signature states and the signature modes. */ - enum cdk_signature_stat_t { - /* Signature status */ - CDK_SIGSTAT_NONE = 0, - CDK_SIGSTAT_GOOD = 1, - CDK_SIGSTAT_BAD = 2, - CDK_SIGSTAT_NOKEY = 3, - CDK_SIGSTAT_VALID = 4, /* True if made with a valid key. */ - /* FIXME: We need indicators for revoked/expires signatures. */ - - /* Signature modes */ - CDK_SIGMODE_NORMAL = 100, - CDK_SIGMODE_DETACHED = 101, - CDK_SIGMODE_CLEAR = 102 - }; - - -/* Key flags. */ - typedef enum { - CDK_FLAG_KEY_REVOKED = 256, - CDK_FLAG_KEY_EXPIRED = 512, - CDK_FLAG_SIG_EXPIRED = 1024 - } cdk_key_flags_t; - - -/* Possible format for the literal data. */ - typedef enum { - CDK_LITFMT_BINARY = 0, - CDK_LITFMT_TEXT = 1, - CDK_LITFMT_UNICODE = 2 - } cdk_lit_format_t; - -/* Valid OpenPGP packet types and their IDs */ - typedef enum { - CDK_PKT_RESERVED = 0, - CDK_PKT_PUBKEY_ENC = 1, - CDK_PKT_SIGNATURE = 2, - CDK_PKT_ONEPASS_SIG = 4, - CDK_PKT_SECRET_KEY = 5, - CDK_PKT_PUBLIC_KEY = 6, - CDK_PKT_SECRET_SUBKEY = 7, - CDK_PKT_COMPRESSED = 8, - CDK_PKT_MARKER = 10, - CDK_PKT_LITERAL = 11, - CDK_PKT_RING_TRUST = 12, - CDK_PKT_USER_ID = 13, - CDK_PKT_PUBLIC_SUBKEY = 14, - CDK_PKT_OLD_COMMENT = 16, - CDK_PKT_ATTRIBUTE = 17, - CDK_PKT_MDC = 19 - } cdk_packet_type_t; - -/* Define the maximal number of multiprecion integers for - a public key. */ -#define MAX_CDK_PK_PARTS 4 - -/* Define the maximal number of multiprecision integers for - a signature/encrypted blob issued by a secret key. */ -#define MAX_CDK_DATA_PARTS 2 - - -/* Helper macro to figure out if the packet is encrypted */ -#define CDK_PKT_IS_ENCRYPTED(pkttype) (\ - ((pkttype)==CDK_PKT_ENCRYPTED_MDC) \ - || ((pkttype)==CDK_PKT_ENCRYPTED)) - - - struct cdk_pkt_signature_s { - unsigned char version; - unsigned char sig_class; - unsigned int timestamp; - unsigned int expiredate; - unsigned int keyid[2]; - unsigned char pubkey_algo; - unsigned char digest_algo; - unsigned char digest_start[2]; - unsigned short hashed_size; - cdk_subpkt_t hashed; - unsigned short unhashed_size; - cdk_subpkt_t unhashed; - bigint_t mpi[MAX_CDK_DATA_PARTS]; - cdk_desig_revoker_t revkeys; - struct { - unsigned exportable:1; - unsigned revocable:1; - unsigned policy_url:1; - unsigned notation:1; - unsigned expired:1; - unsigned checked:1; - unsigned valid:1; - unsigned missing_key:1; - } flags; - unsigned int key[2]; /* only valid for key signatures */ - }; - typedef struct cdk_pkt_signature_s *cdk_pkt_signature_t; - - - struct cdk_pkt_userid_s { - unsigned int len; - unsigned is_primary:1; - unsigned is_revoked:1; - unsigned mdc_feature:1; - cdk_prefitem_t prefs; - size_t prefs_size; - unsigned char *attrib_img; /* Tag 17 if not null */ - size_t attrib_len; - cdk_pkt_signature_t selfsig; - char *name; - }; - typedef struct cdk_pkt_userid_s *cdk_pkt_userid_t; - - - struct cdk_pkt_pubkey_s { - unsigned char version; - unsigned char pubkey_algo; - unsigned char fpr[20]; - unsigned int keyid[2]; - unsigned int main_keyid[2]; - unsigned int timestamp; - unsigned int expiredate; - bigint_t mpi[MAX_CDK_PK_PARTS]; - unsigned is_revoked:1; - unsigned is_invalid:1; - unsigned has_expired:1; - int pubkey_usage; - cdk_pkt_userid_t uid; - cdk_prefitem_t prefs; - size_t prefs_size; - cdk_desig_revoker_t revkeys; - }; - typedef struct cdk_pkt_pubkey_s *cdk_pkt_pubkey_t; - -/* Alias to define a generic public key context. */ - typedef cdk_pkt_pubkey_t cdk_pubkey_t; - - - struct cdk_pkt_seckey_s { - cdk_pkt_pubkey_t pk; - unsigned int expiredate; - int version; - int pubkey_algo; - unsigned int keyid[2]; - unsigned int main_keyid[2]; - unsigned char s2k_usage; - struct { - unsigned char algo; - unsigned char sha1chk; /* SHA1 is used instead of a 16 bit checksum */ - cdk_s2k_t s2k; - unsigned char iv[16]; - unsigned char ivlen; - } protect; - unsigned short csum; - bigint_t mpi[MAX_CDK_PK_PARTS]; - unsigned char *encdata; - size_t enclen; - unsigned char is_protected; - unsigned is_primary:1; - unsigned has_expired:1; - unsigned is_revoked:1; - }; - typedef struct cdk_pkt_seckey_s *cdk_pkt_seckey_t; - -/* Alias to define a generic secret key context. */ - typedef cdk_pkt_seckey_t cdk_seckey_t; - - - struct cdk_pkt_onepass_sig_s { - unsigned char version; - unsigned int keyid[2]; - unsigned char sig_class; - unsigned char digest_algo; - unsigned char pubkey_algo; - unsigned char last; - }; - typedef struct cdk_pkt_onepass_sig_s *cdk_pkt_onepass_sig_t; - - - struct cdk_pkt_pubkey_enc_s { - unsigned char version; - unsigned int keyid[2]; - int throw_keyid; - unsigned char pubkey_algo; - bigint_t mpi[MAX_CDK_DATA_PARTS]; - }; - typedef struct cdk_pkt_pubkey_enc_s *cdk_pkt_pubkey_enc_t; - - struct cdk_pkt_encrypted_s { - unsigned int len; - int extralen; - unsigned char mdc_method; - cdk_stream_t buf; - }; - typedef struct cdk_pkt_encrypted_s *cdk_pkt_encrypted_t; - - - struct cdk_pkt_mdc_s { - unsigned char hash[20]; - }; - typedef struct cdk_pkt_mdc_s *cdk_pkt_mdc_t; - - - struct cdk_pkt_literal_s { - unsigned int len; - cdk_stream_t buf; - int mode; - unsigned int timestamp; - int namelen; - char *name; - }; - typedef struct cdk_pkt_literal_s *cdk_pkt_literal_t; - - - struct cdk_pkt_compressed_s { - unsigned int len; - int algorithm; - cdk_stream_t buf; - }; - typedef struct cdk_pkt_compressed_s *cdk_pkt_compressed_t; - - -/* Structure which represents a single OpenPGP packet. */ - struct cdk_packet_s { - size_t pktlen; /* real packet length */ - size_t pktsize; /* length with all headers */ - int old_ctb; /* 1 if RFC1991 mode is used */ - cdk_packet_type_t pkttype; - union { - cdk_pkt_mdc_t mdc; - cdk_pkt_userid_t user_id; - cdk_pkt_pubkey_t public_key; - cdk_pkt_seckey_t secret_key; - cdk_pkt_signature_t signature; - cdk_pkt_pubkey_enc_t pubkey_enc; - cdk_pkt_compressed_t compressed; - cdk_pkt_encrypted_t encrypted; - cdk_pkt_literal_t literal; - cdk_pkt_onepass_sig_t onepass_sig; - } pkt; - }; - typedef struct cdk_packet_s *cdk_packet_t; - -/* Allocate a new packet or a new packet with the given packet type. */ - cdk_error_t cdk_pkt_new(cdk_packet_t * r_pkt); - cdk_error_t cdk_pkt_alloc(cdk_packet_t * r_pkt, - cdk_packet_type_t pkttype); - -/* Only release the contents of the packet but not @PKT itself. */ - void cdk_pkt_free(cdk_packet_t pkt); - -/* Release the packet contents and the packet structure @PKT itself. */ - void cdk_pkt_release(cdk_packet_t pkt); - -/* Read or write the given output from or to the stream. */ - cdk_error_t cdk_pkt_read(cdk_stream_t inp, cdk_packet_t pkt, unsigned public); - cdk_error_t cdk_pkt_write(cdk_stream_t out, cdk_packet_t pkt); - -/* Sub packet routines */ - cdk_subpkt_t cdk_subpkt_new(size_t size); - void cdk_subpkt_free(cdk_subpkt_t ctx); - cdk_subpkt_t cdk_subpkt_find(cdk_subpkt_t ctx, size_t type); - cdk_subpkt_t cdk_subpkt_find_next(cdk_subpkt_t root, size_t type); - size_t cdk_subpkt_type_count(cdk_subpkt_t ctx, size_t type); - cdk_subpkt_t cdk_subpkt_find_nth(cdk_subpkt_t ctx, size_t type, - size_t index); - cdk_error_t cdk_subpkt_add(cdk_subpkt_t root, cdk_subpkt_t node); - const unsigned char *cdk_subpkt_get_data(cdk_subpkt_t ctx, - size_t * r_type, - size_t * r_nbytes); - void cdk_subpkt_init(cdk_subpkt_t node, size_t type, - const void *buf, size_t buflen); - -/* Designated Revoker routines */ - const unsigned char *cdk_key_desig_revoker_walk(cdk_desig_revoker_t - root, - cdk_desig_revoker_t - * ctx, - int *r_class, - int *r_algid); - -#define is_RSA(a) ((a) == CDK_PK_RSA \ - || (a) == CDK_PK_RSA_E \ - || (a) == CDK_PK_RSA_S) -#define is_ELG(a) ((a) == CDK_PK_ELG_E) -#define is_DSA(a) ((a) == CDK_PK_DSA) - -/* Encrypt the given session key @SK with the public key @PK - and write the contents into the packet @PKE. */ - cdk_error_t cdk_pk_encrypt(cdk_pubkey_t pk, - cdk_pkt_pubkey_enc_t pke, bigint_t sk); - -/* Decrypt the given encrypted session key in @PKE with the secret key - @SK and store it in @R_SK. */ - cdk_error_t cdk_pk_decrypt(cdk_seckey_t sk, - cdk_pkt_pubkey_enc_t pke, - bigint_t * r_sk); - -/* Sign the given message digest @MD with the secret key @SK and - store the signature in the packet @SIG. */ - cdk_error_t cdk_pk_sign(cdk_seckey_t sk, cdk_pkt_signature_t sig, - const unsigned char *md); - -/* Verify the given signature in @SIG with the public key @PK - and compare it against the message digest @MD. */ - cdk_error_t cdk_pk_verify(cdk_pubkey_t pk, cdk_pkt_signature_t sig, - const unsigned char *md); - -/* Use cdk_pk_get_npkey() and cdk_pk_get_nskey to find out how much - multiprecision integers a key consists of. */ - -/* Return a multi precision integer of the public key with the index @IDX - in the buffer @BUF. @R_NWRITTEN will contain the length in octets. - Optional @R_NBITS may contain the size in bits. */ - cdk_error_t cdk_pk_get_mpi(cdk_pubkey_t pk, size_t idx, - unsigned char *buf, size_t buflen, - size_t * r_nwritten, size_t * r_nbits); - -/* Same as the function above but of the secret key. */ - cdk_error_t cdk_sk_get_mpi(cdk_seckey_t sk, size_t idx, - unsigned char *buf, size_t buflen, - size_t * r_nwritten, size_t * r_nbits); - -/* Helper to get the exact number of multi precision integers - for the given object. */ - int cdk_pk_get_nbits(cdk_pubkey_t pk); - int cdk_pk_get_npkey(int algo); - int cdk_pk_get_nskey(int algo); - int cdk_pk_get_nsig(int algo); - int cdk_pk_get_nenc(int algo); - -/* Fingerprint and key ID routines. */ - -/* Calculate the fingerprint of the given public key. - the FPR parameter must be at least 20 octets to hold the SHA1 hash. */ - cdk_error_t cdk_pk_get_fingerprint(cdk_pubkey_t pk, - unsigned char *fpr); - -/* Same as above, but with additional sanity checks of the buffer size. */ - cdk_error_t cdk_pk_to_fingerprint(cdk_pubkey_t pk, - unsigned char *fpr, - size_t fprlen, size_t * r_nout); - -/* Derive the keyid from the fingerprint. This is only possible for - modern, version 4 keys. */ - unsigned int cdk_pk_fingerprint_get_keyid(const unsigned char *fpr, - size_t fprlen, - unsigned int *keyid); - -/* Various functions to get the keyid from the specific packet type. */ - unsigned int cdk_pk_get_keyid(cdk_pubkey_t pk, - unsigned int *keyid); - unsigned int cdk_sk_get_keyid(cdk_seckey_t sk, - unsigned int *keyid); - unsigned int cdk_sig_get_keyid(cdk_pkt_signature_t sig, - unsigned int *keyid); - -/* Key release functions. */ - void cdk_pk_release(cdk_pubkey_t pk); - void cdk_sk_release(cdk_seckey_t sk); - -/* Create a public key with the data from the secret key @SK. */ - cdk_error_t cdk_pk_from_secret_key(cdk_seckey_t sk, - cdk_pubkey_t * ret_pk); - -/* Sexp conversion of keys. */ - cdk_error_t cdk_pubkey_to_sexp(cdk_pubkey_t pk, char **sexp, - size_t * len); - cdk_error_t cdk_seckey_to_sexp(cdk_seckey_t sk, char **sexp, - size_t * len); - - -/* String to Key routines. */ - cdk_error_t cdk_s2k_new(cdk_s2k_t * ret_s2k, int mode, - int digest_algo, - const unsigned char *salt); - void cdk_s2k_free(cdk_s2k_t s2k); - -/* Protect the inbuf with ASCII armor of the specified type. - If @outbuf and @outlen are NULL, the function returns the calculated - size of the base64 encoded data in @nwritten. */ - cdk_error_t cdk_armor_encode_buffer(const unsigned char *inbuf, - size_t inlen, char *outbuf, - size_t outlen, - size_t * nwritten, int type); - - -/* This context contain user callbacks for different stream operations. - Some of these callbacks might be NULL to indicate that the callback - is not used. */ - struct cdk_stream_cbs_s { - cdk_error_t(*open) (void *); - cdk_error_t(*release) (void *); - int (*read) (void *, void *buf, size_t); - int (*write) (void *, const void *buf, size_t); - int (*seek) (void *, off_t); - }; - typedef struct cdk_stream_cbs_s *cdk_stream_cbs_t; - - int cdk_stream_is_compressed(cdk_stream_t s); - -/* Return a stream object which is associated to a socket. */ - cdk_error_t cdk_stream_sockopen(const char *host, - unsigned short port, - cdk_stream_t * ret_out); - -/* Return a stream object which is associated to an existing file. */ - cdk_error_t cdk_stream_open(const char *file, - cdk_stream_t * ret_s); - -/* Return a stream object which is associated to a file which will - be created when the stream is closed. */ - cdk_error_t cdk_stream_new(const char *file, cdk_stream_t * ret_s); - -/* Return a stream object with custom callback functions for the - various core operations. */ - cdk_error_t cdk_stream_new_from_cbs(cdk_stream_cbs_t cbs, - void *opa, - cdk_stream_t * ret_s); - cdk_error_t cdk_stream_create(const char *file, - cdk_stream_t * ret_s); - cdk_error_t cdk_stream_tmp_new(cdk_stream_t * r_out); - cdk_error_t cdk_stream_tmp_from_mem(const void *buf, size_t buflen, - cdk_stream_t * r_out); - void cdk_stream_tmp_set_mode(cdk_stream_t s, int val); - cdk_error_t cdk_stream_flush(cdk_stream_t s); - cdk_error_t cdk_stream_enable_cache(cdk_stream_t s, int val); - cdk_error_t cdk_stream_filter_disable(cdk_stream_t s, int type); - cdk_error_t cdk_stream_close(cdk_stream_t s); - off_t cdk_stream_get_length(cdk_stream_t s); - int cdk_stream_read(cdk_stream_t s, void *buf, size_t count); - int cdk_stream_write(cdk_stream_t s, const void *buf, - size_t count); - int cdk_stream_putc(cdk_stream_t s, int c); - int cdk_stream_getc(cdk_stream_t s); - int cdk_stream_eof(cdk_stream_t s); - off_t cdk_stream_tell(cdk_stream_t s); - cdk_error_t cdk_stream_seek(cdk_stream_t s, off_t offset); - cdk_error_t cdk_stream_set_armor_flag(cdk_stream_t s, int type); - -/* Push the literal filter for the given stream. */ - cdk_error_t cdk_stream_set_literal_flag(cdk_stream_t s, - cdk_lit_format_t mode, - const char *fname); - - cdk_error_t cdk_stream_set_compress_flag(cdk_stream_t s, int algo, - int level); - cdk_error_t cdk_stream_set_hash_flag(cdk_stream_t s, int algo); - cdk_error_t cdk_stream_set_text_flag(cdk_stream_t s, - const char *lf); - cdk_error_t cdk_stream_kick_off(cdk_stream_t inp, - cdk_stream_t out); - cdk_error_t cdk_stream_mmap(cdk_stream_t s, - unsigned char **ret_buf, - size_t * ret_buflen); - cdk_error_t cdk_stream_mmap_part(cdk_stream_t s, off_t off, - size_t len, - unsigned char **ret_buf, - size_t * ret_buflen); - -/* Read from the stream but restore the file pointer after reading - the requested amount of bytes. */ - int cdk_stream_peek(cdk_stream_t inp, unsigned char *buf, - size_t buflen); - -/* Create a new key db handle from a memory buffer. */ - cdk_error_t cdk_keydb_new_from_mem(cdk_keydb_hd_t * r_hd, - int secret, int armor, - const void *data, - size_t datlen); - -/* Check that a secret key with the given key ID is available. */ - cdk_error_t cdk_keydb_check_sk(cdk_keydb_hd_t hd, - unsigned int *keyid); - -/* Prepare the key db search. */ - cdk_error_t cdk_keydb_search_start(cdk_keydb_search_t * st, - cdk_keydb_hd_t db, int type, - void *desc); - - void cdk_keydb_search_release(cdk_keydb_search_t st); - -/* Return a key which matches a valid description given in - cdk_keydb_search_start(). */ - cdk_error_t cdk_keydb_search(cdk_keydb_search_t st, - cdk_keydb_hd_t hd, - cdk_kbnode_t * ret_key); - -/* Release the key db handle and all its resources. */ - void cdk_keydb_free(cdk_keydb_hd_t hd); - -/* The following functions will try to find a key in the given key - db handle either by keyid, by fingerprint or by some pattern. */ - cdk_error_t cdk_keydb_get_bykeyid(cdk_keydb_hd_t hd, - unsigned int *keyid, - cdk_kbnode_t * ret_pk); - cdk_error_t cdk_keydb_get_byfpr(cdk_keydb_hd_t hd, - const unsigned char *fpr, - cdk_kbnode_t * ret_pk); - cdk_error_t cdk_keydb_get_bypattern(cdk_keydb_hd_t hd, - const char *patt, - cdk_kbnode_t * ret_pk); - -/* These function, in contrast to most other key db functions, only - return the public or secret key packet without the additional - signatures and user IDs. */ - cdk_error_t cdk_keydb_get_pk(cdk_keydb_hd_t khd, - unsigned int *keyid, - cdk_pubkey_t * ret_pk); - cdk_error_t cdk_keydb_get_sk(cdk_keydb_hd_t khd, - unsigned int *keyid, - cdk_seckey_t * ret_sk); - -/* Try to read the next key block from the given input stream. - The key will be returned in @RET_KEY on success. */ - cdk_error_t cdk_keydb_get_keyblock(cdk_stream_t inp, - cdk_kbnode_t * ret_key, - unsigned public); - -/* Rebuild the key db index if possible. */ - cdk_error_t cdk_keydb_idx_rebuild(cdk_keydb_hd_t db, - cdk_keydb_search_t dbs); - -/* Export one or more keys from the given key db handle into - the stream @OUT. The export is done by substring search and - uses the string list @REMUSR for the pattern. */ - cdk_error_t cdk_keydb_export(cdk_keydb_hd_t hd, cdk_stream_t out, - cdk_strlist_t remusr); - -/* Import the given key node @knode into the key db. */ - cdk_error_t cdk_keydb_import(cdk_keydb_hd_t hd, - cdk_kbnode_t knode); - - -/* List or enumerate keys from a given key db handle. */ - -/* Start the key list process. Either use @PATT for a pattern search - or @FPATT for a list of pattern. */ - cdk_error_t cdk_listkey_start(cdk_listkey_t * r_ctx, - cdk_keydb_hd_t db, const char *patt, - cdk_strlist_t fpatt); - void cdk_listkey_close(cdk_listkey_t ctx); - -/* Return the next key which matches the pattern. */ - cdk_error_t cdk_listkey_next(cdk_listkey_t ctx, - cdk_kbnode_t * ret_key); - - cdk_kbnode_t cdk_kbnode_new(cdk_packet_t pkt); - cdk_error_t cdk_kbnode_read_from_mem(cdk_kbnode_t * ret_node, - int armor, - const unsigned char *buf, - size_t buflen, unsigned public); - cdk_error_t cdk_kbnode_write_to_mem(cdk_kbnode_t node, - unsigned char *buf, - size_t * r_nbytes); - cdk_error_t cdk_kbnode_write_to_mem_alloc(cdk_kbnode_t node, - unsigned char **r_buf, - size_t * r_buflen); - - void cdk_kbnode_release(cdk_kbnode_t node); - void cdk_kbnode_delete(cdk_kbnode_t node); - void cdk_kbnode_insert(cdk_kbnode_t root, cdk_kbnode_t node, - cdk_packet_type_t pkttype); - int cdk_kbnode_commit(cdk_kbnode_t * root); - void cdk_kbnode_remove(cdk_kbnode_t * root, cdk_kbnode_t node); - void cdk_kbnode_move(cdk_kbnode_t * root, cdk_kbnode_t node, - cdk_kbnode_t where); - cdk_kbnode_t cdk_kbnode_walk(cdk_kbnode_t root, cdk_kbnode_t * ctx, - int all); - cdk_packet_t cdk_kbnode_find_packet(cdk_kbnode_t node, - cdk_packet_type_t pkttype); - cdk_packet_t cdk_kbnode_get_packet(cdk_kbnode_t node); - cdk_kbnode_t cdk_kbnode_find(cdk_kbnode_t node, - cdk_packet_type_t pkttype); - cdk_kbnode_t cdk_kbnode_find_prev(cdk_kbnode_t root, - cdk_kbnode_t node, - cdk_packet_type_t pkttype); - cdk_kbnode_t cdk_kbnode_find_next(cdk_kbnode_t node, - cdk_packet_type_t pkttype); - cdk_error_t cdk_kbnode_hash(cdk_kbnode_t node, digest_hd_st * md, - int is_v4, cdk_packet_type_t pkttype, - int flags); - -/* Check each signature in the key node and return a summary of the - key status in @r_status. Values of cdk_key_flag_t are used. */ - cdk_error_t cdk_pk_check_sigs(cdk_kbnode_t knode, - cdk_keydb_hd_t hd, int *r_status); - -/* Check the self signature of the key to make sure it is valid. */ - cdk_error_t cdk_pk_check_self_sig(cdk_kbnode_t knode, - int *r_status); - -/* Return a matching algorithm from the given public key list. - @PREFTYPE can be either sym-cipher/compress/digest. */ - int cdk_pklist_select_algo(cdk_keylist_t pkl, int preftype); - -/* Return 0 or 1 if the given key list is able to understand the - MDC feature. */ - int cdk_pklist_use_mdc(cdk_keylist_t pkl); - cdk_error_t cdk_pklist_build(cdk_keylist_t * ret_pkl, - cdk_keydb_hd_t hd, - cdk_strlist_t remusr, int use); - void cdk_pklist_release(cdk_keylist_t pkl); - -/* Secret key lists */ - cdk_error_t cdk_sklist_build(cdk_keylist_t * ret_skl, - cdk_keydb_hd_t db, cdk_ctx_t hd, - cdk_strlist_t locusr, - int unlock, unsigned int use); - void cdk_sklist_release(cdk_keylist_t skl); - cdk_error_t cdk_sklist_write(cdk_keylist_t skl, cdk_stream_t outp, - digest_hd_st * mdctx, int sigclass, - int sigver); - cdk_error_t cdk_sklist_write_onepass(cdk_keylist_t skl, - cdk_stream_t outp, - int sigclass, int mdalgo); - -/* Encrypt the given stream @INP with the recipients given in @REMUSR. - If @REMUSR is NULL, symmetric encryption will be used. The output - will be written to @OUT. */ - cdk_error_t cdk_stream_encrypt(cdk_ctx_t hd, cdk_strlist_t remusr, - cdk_stream_t inp, cdk_stream_t out); - -/* Decrypt the @INP stream into @OUT. */ - cdk_error_t cdk_stream_decrypt(cdk_ctx_t hd, cdk_stream_t inp, - cdk_stream_t out); - -/* Same as the function above but it works on files. */ - cdk_error_t cdk_file_encrypt(cdk_ctx_t hd, cdk_strlist_t remusr, - const char *file, const char *output); - cdk_error_t cdk_file_decrypt(cdk_ctx_t hd, const char *file, - const char *output); - -/* Generic function to transform data. The mode can be either sign, - verify, encrypt, decrypt, import or export. The meanings of the - parameters are similar to the functions above. - @OUTBUF will contain the output and @OUTSIZE the length of it. */ - cdk_error_t cdk_data_transform(cdk_ctx_t hd, - enum cdk_crypto_mode_t mode, - cdk_strlist_t locusr, - cdk_strlist_t remusr, - const void *inbuf, size_t insize, - unsigned char **outbuf, - size_t * outsize, int modval); - - int cdk_trustdb_get_validity(cdk_stream_t inp, cdk_pkt_userid_t id, - int *r_val); - int cdk_trustdb_get_ownertrust(cdk_stream_t inp, cdk_pubkey_t pk, - int *r_val, int *r_flags); - - void cdk_strlist_free(cdk_strlist_t sl); - cdk_strlist_t cdk_strlist_add(cdk_strlist_t * list, - const char *string); - const char *cdk_check_version(const char *req_version); -/* UTF8 */ - char *cdk_utf8_encode(const char *string); - char *cdk_utf8_decode(const char *string, size_t length, - int delim); - -#ifdef __cplusplus -} -#endif -#endif /* OPENCDK_H */ diff --git a/lib/opencdk/packet.h b/lib/opencdk/packet.h deleted file mode 100644 index a5629ec44b..0000000000 --- a/lib/opencdk/packet.h +++ /dev/null @@ -1,46 +0,0 @@ -/* packet.h - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifndef CDK_PACKET_H -#define CDK_PACKET_H - -struct cdk_kbnode_s { - struct cdk_kbnode_s *next; - cdk_packet_t pkt; - unsigned int is_deleted:1; - unsigned int is_cloned:1; -}; - -/*-- new-packet.c --*/ -void _cdk_free_mpibuf(size_t n, bigint_t * array); -void _cdk_free_userid(cdk_pkt_userid_t uid); -void _cdk_free_signature(cdk_pkt_signature_t sig); -cdk_prefitem_t _cdk_copy_prefs(const cdk_prefitem_t prefs); -cdk_error_t _cdk_copy_userid(cdk_pkt_userid_t * dst, cdk_pkt_userid_t src); -cdk_error_t _cdk_copy_pubkey(cdk_pkt_pubkey_t * dst, cdk_pkt_pubkey_t src); -cdk_error_t _cdk_copy_seckey(cdk_pkt_seckey_t * dst, cdk_pkt_seckey_t src); -cdk_error_t _cdk_copy_pk_to_sk(cdk_pkt_pubkey_t pk, cdk_pkt_seckey_t sk); -cdk_error_t _cdk_copy_signature(cdk_pkt_signature_t * dst, - cdk_pkt_signature_t src); -cdk_error_t _cdk_pubkey_compare(cdk_pkt_pubkey_t a, cdk_pkt_pubkey_t b); - -#endif /* CDK_PACKET_H */ diff --git a/lib/opencdk/pubkey.c b/lib/opencdk/pubkey.c deleted file mode 100644 index 1c73433fd6..0000000000 --- a/lib/opencdk/pubkey.c +++ /dev/null @@ -1,652 +0,0 @@ -/* pubkey.c - Public key API - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include "gnutls_int.h" -#include -#include -#include -#include -#include "opencdk.h" -#include "main.h" -#include "packet.h" - -/* This function gets the signature parameters and encodes - * them into a way for _gnutls_pk_verify to use. - */ -static cdk_error_t -sig_to_datum(gnutls_datum_t * r_sig, cdk_pkt_signature_t sig) -{ - int err; - cdk_error_t rc; - - if (!r_sig || !sig) - return CDK_Inv_Value; - - rc = 0; - if (is_RSA(sig->pubkey_algo)) { - err = _gnutls_mpi_dprint(sig->mpi[0], r_sig); - if (err < 0) - rc = map_gnutls_error(err); - } else if (is_DSA(sig->pubkey_algo)) { - err = - _gnutls_encode_ber_rs(r_sig, sig->mpi[0], sig->mpi[1]); - if (err < 0) - rc = map_gnutls_error(err); - } else - rc = CDK_Inv_Algo; - return rc; -} - -/** - * cdk_pk_verify: - * @pk: the public key - * @sig: signature - * @md: the message digest - * - * Verify the signature in @sig and compare it with the message digest in @md. - **/ -cdk_error_t -cdk_pk_verify(cdk_pubkey_t pk, cdk_pkt_signature_t sig, const byte * md) -{ - gnutls_datum_t s_sig = { NULL, 0 }, di = { - NULL, 0}; - byte *encmd = NULL; - cdk_error_t rc; - int ret, algo; - unsigned int i; - gnutls_pk_params_st params; - const mac_entry_st *me; - - if (!pk || !sig || !md) { - gnutls_assert(); - return CDK_Inv_Value; - } - - if (is_DSA(pk->pubkey_algo)) - algo = GNUTLS_PK_DSA; - else if (is_RSA(pk->pubkey_algo)) - algo = GNUTLS_PK_RSA; - else { - gnutls_assert(); - return CDK_Inv_Value; - } - - rc = sig_to_datum(&s_sig, sig); - if (rc) { - gnutls_assert(); - goto leave; - } - - me = mac_to_entry(sig->digest_algo); - rc = _gnutls_set_datum(&di, md, _gnutls_hash_get_algo_len(me)); - if (rc < 0) { - rc = gnutls_assert_val(CDK_Out_Of_Core); - goto leave; - } - - rc = pk_prepare_hash(algo, me, &di); - if (rc < 0) { - rc = gnutls_assert_val(CDK_General_Error); - goto leave; - } - - params.params_nr = cdk_pk_get_npkey(pk->pubkey_algo); - for (i = 0; i < params.params_nr; i++) - params.params[i] = pk->mpi[i]; - params.flags = 0; - ret = _gnutls_pk_verify(algo, &di, &s_sig, ¶ms); - - if (ret < 0) { - gnutls_assert(); - rc = map_gnutls_error(ret); - goto leave; - } - - rc = 0; - - leave: - _gnutls_free_datum(&s_sig); - _gnutls_free_datum(&di); - cdk_free(encmd); - return rc; -} - - -/** - * cdk_pk_get_nbits: - * @pk: the public key - * - * Return the length of the public key in bits. - * The meaning of length is actually the size of the 'prime' - * object in the key. For RSA keys the modulus, for ElG/DSA - * the size of the public prime. - **/ -int cdk_pk_get_nbits(cdk_pubkey_t pk) -{ - if (!pk || !pk->mpi[0]) - return 0; - return _gnutls_mpi_get_nbits(pk->mpi[0]); -} - - -/** - * cdk_pk_get_npkey: - * @algo: The public key algorithm. - * - * Return the number of multiprecison integer forming an public - * key with the given algorithm. - */ -int cdk_pk_get_npkey(int algo) -{ - if (is_RSA(algo)) - return RSA_PUBLIC_PARAMS; - else if (is_DSA(algo)) - return DSA_PUBLIC_PARAMS; - else if (is_ELG(algo)) - return 3; - else { - gnutls_assert(); - return 0; - } -} - - -/** - * cdk_pk_get_nskey: - * @algo: the public key algorithm - * - * Return the number of multiprecision integers forming an - * secret key with the given algorithm. - **/ -int cdk_pk_get_nskey(int algo) -{ - int ret; - - if (is_RSA(algo)) - ret = RSA_PRIVATE_PARAMS - 2; /* we don't have exp1 and exp2 */ - else if (is_DSA(algo)) - ret = DSA_PRIVATE_PARAMS; - else if (is_ELG(algo)) - ret = 4; - else { - gnutls_assert(); - return 0; - } - - ret -= cdk_pk_get_npkey(algo); - return ret; -} - - -/** - * cdk_pk_get_nbits: - * @algo: the public key algorithm - * - * Return the number of MPIs a signature consists of. - **/ -int cdk_pk_get_nsig(int algo) -{ - if (is_RSA(algo)) - return 1; - else if (is_DSA(algo)) - return 2; - else - return 0; -} - - -/** - * cdk_pk_get_nenc: - * @algo: the public key algorithm - * - * Return the number of MPI's the encrypted data consists of. - **/ -int cdk_pk_get_nenc(int algo) -{ - if (is_RSA(algo)) - return 1; - else if (is_ELG(algo)) - return 2; - else - return 0; -} - - -int _cdk_pk_algo_usage(int algo) -{ - int usage; - - /* The ElGamal sign+encrypt algorithm is not supported any longer. */ - switch (algo) { - case CDK_PK_RSA: - usage = CDK_KEY_USG_SIGN | CDK_KEY_USG_ENCR; - break; - case CDK_PK_RSA_E: - usage = CDK_KEY_USG_ENCR; - break; - case CDK_PK_RSA_S: - usage = CDK_KEY_USG_SIGN; - break; - case CDK_PK_ELG_E: - usage = CDK_KEY_USG_ENCR; - break; - case CDK_PK_DSA: - usage = CDK_KEY_USG_SIGN; - break; - default: - usage = 0; - } - return usage; -} - -/* You can use a NULL buf to get the output size only - */ -static cdk_error_t -mpi_to_buffer(bigint_t a, byte * buf, size_t buflen, - size_t * r_nwritten, size_t * r_nbits) -{ - size_t nbits; - int err; - - if (!a || !r_nwritten) { - gnutls_assert(); - return CDK_Inv_Value; - } - - nbits = _gnutls_mpi_get_nbits(a); - if (r_nbits) - *r_nbits = nbits; - - if (r_nwritten) - *r_nwritten = (nbits + 7) / 8 + 2; - - if ((nbits + 7) / 8 + 2 > buflen) - return CDK_Too_Short; - - *r_nwritten = buflen; - err = _gnutls_mpi_print(a, buf, r_nwritten); - if (err < 0) { - gnutls_assert(); - return map_gnutls_error(err); - } - - return 0; -} - - -/** - * cdk_pk_get_mpi: - * @pk: public key - * @idx: index of the MPI to retrieve - * @buf: buffer to hold the raw data - * @r_nwritten: output how large the raw data is - * @r_nbits: size of the MPI in bits. - * - * Return the MPI with the given index of the public key. - **/ -cdk_error_t -cdk_pk_get_mpi(cdk_pubkey_t pk, size_t idx, - byte * buf, size_t buflen, size_t * r_nwritten, - size_t * r_nbits) -{ - if (!pk || !r_nwritten) - return CDK_Inv_Value; - - if ((ssize_t) idx > cdk_pk_get_npkey(pk->pubkey_algo)) - return CDK_Inv_Value; - return mpi_to_buffer(pk->mpi[idx], buf, buflen, r_nwritten, - r_nbits); -} - - -/** - * cdk_sk_get_mpi: - * @sk: secret key - * @idx: index of the MPI to retrieve - * @buf: buffer to hold the raw data - * @r_nwritten: output length of the raw data - * @r_nbits: length of the MPI data in bits. - * - * Return the MPI of the given secret key with the - * index @idx. It is important to check if the key - * is protected and thus no real MPI data will be returned then. - **/ -cdk_error_t -cdk_sk_get_mpi(cdk_pkt_seckey_t sk, size_t idx, - byte * buf, size_t buflen, size_t * r_nwritten, - size_t * r_nbits) -{ - if (!sk || !r_nwritten) - return CDK_Inv_Value; - - if ((ssize_t) idx > cdk_pk_get_nskey(sk->pubkey_algo)) - return CDK_Inv_Value; - return mpi_to_buffer(sk->mpi[idx], buf, buflen, r_nwritten, - r_nbits); -} - - -static u16 checksum_mpi(bigint_t m) -{ - byte buf[MAX_MPI_BYTES + 2]; - size_t nread; - unsigned int i; - u16 chksum = 0; - - if (!m) - return 0; - nread = DIM(buf); - if (_gnutls_mpi_print_pgp(m, buf, &nread) < 0) - return 0; - for (i = 0; i < nread; i++) - chksum += buf[i]; - return chksum; -} - -/** - * cdk_pk_from_secret_key: - * @sk: the secret key - * @ret_pk: the new public key - * - * Create a new public key from a secret key. - **/ -cdk_error_t -cdk_pk_from_secret_key(cdk_pkt_seckey_t sk, cdk_pubkey_t * ret_pk) -{ - if (!sk) - return CDK_Inv_Value; - return _cdk_copy_pubkey(ret_pk, sk->pk); -} - - -int _cdk_sk_get_csum(cdk_pkt_seckey_t sk) -{ - u16 csum = 0, i; - - if (!sk) - return 0; - for (i = 0; i < cdk_pk_get_nskey(sk->pubkey_algo); i++) - csum += checksum_mpi(sk->mpi[i]); - return csum; -} - - -/** - * cdk_pk_get_fingerprint: - * @pk: the public key - * @fpr: the buffer to hold the fingerprint - * - * Return the fingerprint of the given public key. - * The buffer must be at least 20 octets. - * This function should be considered deprecated and - * the new cdk_pk_to_fingerprint() should be used whenever - * possible to avoid overflows. - **/ -cdk_error_t cdk_pk_get_fingerprint(cdk_pubkey_t pk, byte * fpr) -{ - digest_hd_st hd; - int md_algo; - int dlen = 0; - int err; - const mac_entry_st *me; - - if (!pk || !fpr) - return CDK_Inv_Value; - - if (pk->version < 4 && is_RSA(pk->pubkey_algo)) - md_algo = GNUTLS_DIG_MD5; /* special */ - else - md_algo = GNUTLS_DIG_SHA1; - - me = mac_to_entry(md_algo); - - dlen = _gnutls_hash_get_algo_len(me); - err = _gnutls_hash_init(&hd, me); - if (err < 0) { - gnutls_assert(); - return map_gnutls_error(err); - } - _cdk_hash_pubkey(pk, &hd, 1); - _gnutls_hash_deinit(&hd, fpr); - if (dlen == 16) - memset(fpr + 16, 0, 4); - return 0; -} - - -/** - * cdk_pk_to_fingerprint: - * @pk: the public key - * @fprbuf: buffer to save the fingerprint - * @fprbuflen: buffer size - * @r_nout: actual length of the fingerprint. - * - * Calculate a fingerprint of the given key and - * return it in the given byte array. - **/ -cdk_error_t -cdk_pk_to_fingerprint(cdk_pubkey_t pk, - byte * fprbuf, size_t fprbuflen, size_t * r_nout) -{ - size_t key_fprlen; - cdk_error_t err; - - if (!pk) - return CDK_Inv_Value; - - if (pk->version < 4) - key_fprlen = 16; - else - key_fprlen = 20; - - /* Only return the required buffer size for the fingerprint. */ - if (!fprbuf && !fprbuflen && r_nout) { - *r_nout = key_fprlen; - return 0; - } - - if (!fprbuf || key_fprlen > fprbuflen) - return CDK_Too_Short; - - err = cdk_pk_get_fingerprint(pk, fprbuf); - if (r_nout) - *r_nout = key_fprlen; - - return err; -} - - -/** - * cdk_pk_fingerprint_get_keyid: - * @fpr: the key fingerprint - * @fprlen: the length of the fingerprint - * - * Derive the key ID from the key fingerprint. - * For version 3 keys, this is not working. - **/ -u32 -cdk_pk_fingerprint_get_keyid(const byte * fpr, size_t fprlen, u32 * keyid) -{ - u32 lowbits = 0; - - /* In this case we say the key is a V3 RSA key and we can't - use the fingerprint to get the keyid. */ - if (fpr && fprlen == 16) { - keyid[0] = 0; - keyid[1] = 0; - return 0; - } else if (keyid && fpr) { - keyid[0] = _cdk_buftou32(fpr + 12); - keyid[1] = _cdk_buftou32(fpr + 16); - lowbits = keyid[1]; - } else if (fpr) - lowbits = _cdk_buftou32(fpr + 16); - return lowbits; -} - - -/** - * cdk_pk_get_keyid: - * @pk: the public key - * @keyid: buffer to store the key ID - * - * Calculate the key ID of the given public key. - **/ -u32 cdk_pk_get_keyid(cdk_pubkey_t pk, u32 * keyid) -{ - u32 lowbits = 0; - byte buf[24]; - int rc; - - if (pk && (!pk->keyid[0] || !pk->keyid[1])) { - if (pk->version < 4 && is_RSA(pk->pubkey_algo)) { - byte p[MAX_MPI_BYTES]; - size_t n; - - n = MAX_MPI_BYTES; - rc = _gnutls_mpi_print(pk->mpi[0], p, &n); - if (rc < 0 || n < 8) { - keyid[0] = keyid[1] = (u32)-1; - return (u32)-1; - } - - pk->keyid[0] = - p[n - 8] << 24 | p[n - 7] << 16 | p[n - - 6] << 8 | - p[n - 5]; - pk->keyid[1] = - p[n - 4] << 24 | p[n - 3] << 16 | p[n - - 2] << 8 | - p[n - 1]; - } else if (pk->version == 4) { - cdk_pk_get_fingerprint(pk, buf); - pk->keyid[0] = _cdk_buftou32(buf + 12); - pk->keyid[1] = _cdk_buftou32(buf + 16); - } - } - lowbits = pk ? pk->keyid[1] : 0; - if (keyid && pk) { - keyid[0] = pk->keyid[0]; - keyid[1] = pk->keyid[1]; - } - - return lowbits; -} - - -/** - * cdk_sk_get_keyid: - * @sk: the secret key - * @keyid: buffer to hold the key ID - * - * Calculate the key ID of the secret key, actually the public key. - **/ -u32 cdk_sk_get_keyid(cdk_pkt_seckey_t sk, u32 * keyid) -{ - u32 lowbits = 0; - - if (sk && sk->pk) { - lowbits = cdk_pk_get_keyid(sk->pk, keyid); - sk->keyid[0] = sk->pk->keyid[0]; - sk->keyid[1] = sk->pk->keyid[1]; - } - - return lowbits; -} - - -/** - * cdk_sig_get_keyid: - * @sig: the signature - * @keyid: buffer to hold the key ID - * - * Retrieve the key ID from the given signature. - **/ -u32 cdk_sig_get_keyid(cdk_pkt_signature_t sig, u32 * keyid) -{ - u32 lowbits = sig ? sig->keyid[1] : 0; - - if (keyid && sig) { - keyid[0] = sig->keyid[0]; - keyid[1] = sig->keyid[1]; - } - return lowbits; -} - - -/* Return the key ID from the given packet. - If this is not possible, 0 is returned */ -u32 _cdk_pkt_get_keyid(cdk_packet_t pkt, u32 * keyid) -{ - u32 lowbits; - - if (!pkt) - return 0; - - switch (pkt->pkttype) { - case CDK_PKT_PUBLIC_KEY: - case CDK_PKT_PUBLIC_SUBKEY: - lowbits = cdk_pk_get_keyid(pkt->pkt.public_key, keyid); - break; - - case CDK_PKT_SECRET_KEY: - case CDK_PKT_SECRET_SUBKEY: - lowbits = cdk_sk_get_keyid(pkt->pkt.secret_key, keyid); - break; - - case CDK_PKT_SIGNATURE: - lowbits = cdk_sig_get_keyid(pkt->pkt.signature, keyid); - break; - - default: - lowbits = 0; - break; - } - - return lowbits; -} - - -/* Get the fingerprint of the packet if possible. */ -cdk_error_t _cdk_pkt_get_fingerprint(cdk_packet_t pkt, byte * fpr) -{ - if (!pkt || !fpr) - return CDK_Inv_Value; - - switch (pkt->pkttype) { - case CDK_PKT_PUBLIC_KEY: - case CDK_PKT_PUBLIC_SUBKEY: - return cdk_pk_get_fingerprint(pkt->pkt.public_key, fpr); - - case CDK_PKT_SECRET_KEY: - case CDK_PKT_SECRET_SUBKEY: - return cdk_pk_get_fingerprint(pkt->pkt.secret_key->pk, - fpr); - - default: - return CDK_Inv_Mode; - } - return 0; -} diff --git a/lib/opencdk/read-packet.c b/lib/opencdk/read-packet.c deleted file mode 100644 index f86659a023..0000000000 --- a/lib/opencdk/read-packet.c +++ /dev/null @@ -1,1180 +0,0 @@ -/* read-packet.c - Read OpenPGP packets - * Copyright (C) 2001-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include - -#include "opencdk.h" -#include "main.h" -#include "packet.h" -#include "types.h" -#include -#include -#include - -/* The version of the MDC packet considering the lastest OpenPGP draft. */ - -static int -stream_read(cdk_stream_t s, void *buf, size_t buflen, size_t * r_nread) -{ - int res = cdk_stream_read(s, buf, buflen); - - if (res > 0) { - *r_nread = res; - return 0; - } else { - return (cdk_stream_eof(s) ? EOF : _cdk_stream_get_errno(s)); - } -} - - -/* Try to read 4 octets from the stream. */ -static u32 read_32(cdk_stream_t s) -{ - byte buf[4]; - size_t nread = 0; - - assert(s != NULL); - - stream_read(s, buf, 4, &nread); - if (nread != 4) - return (u32) -1; - return buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3]; -} - - -/* Try to read 2 octets from a stream. */ -static u16 read_16(cdk_stream_t s) -{ - byte buf[2]; - size_t nread = 0; - - assert(s != NULL); - - stream_read(s, buf, 2, &nread); - if (nread != 2) - return (u16) - 1; - return buf[0] << 8 | buf[1]; -} - - -/* read about S2K at http://tools.ietf.org/html/rfc4880#section-3.7.1 */ -static cdk_error_t read_s2k(cdk_stream_t inp, cdk_s2k_t s2k) -{ - size_t nread = 0; - - s2k->mode = cdk_stream_getc(inp); - s2k->hash_algo = cdk_stream_getc(inp); - if (s2k->mode == CDK_S2K_SIMPLE) - return 0; - else if (s2k->mode == CDK_S2K_SALTED - || s2k->mode == CDK_S2K_ITERSALTED) { - if (stream_read(inp, s2k->salt, DIM(s2k->salt), &nread)) - return CDK_Inv_Packet; - if (nread != DIM(s2k->salt)) - return CDK_Inv_Packet; - - if (s2k->mode == CDK_S2K_ITERSALTED) - s2k->count = cdk_stream_getc(inp); - } else if (s2k->mode == CDK_S2K_GNU_EXT) { - /* GNU extensions to the S2K : read DETAILS from gnupg */ - return 0; - } else - return CDK_Not_Implemented; - - return 0; -} - - -static cdk_error_t read_mpi(cdk_stream_t inp, bigint_t * ret_m, int secure) -{ - bigint_t m; - int err; - byte buf[MAX_MPI_BYTES + 2]; - size_t nread, nbits; - cdk_error_t rc; - - if (!inp || !ret_m) - return CDK_Inv_Value; - - *ret_m = NULL; - nbits = read_16(inp); - nread = (nbits + 7) / 8; - - if (nbits > MAX_MPI_BITS || nbits == 0) { - _gnutls_write_log("read_mpi: too large %d bits\n", - (int) nbits); - return gnutls_assert_val(CDK_MPI_Error); /* Sanity check */ - } - - rc = stream_read(inp, buf + 2, nread, &nread); - if (!rc && nread != ((nbits + 7) / 8)) { - _gnutls_write_log("read_mpi: too short %d < %d\n", - (int) nread, (int) ((nbits + 7) / 8)); - return gnutls_assert_val(CDK_MPI_Error); - } - - buf[0] = nbits >> 8; - buf[1] = nbits >> 0; - nread += 2; - err = _gnutls_mpi_init_scan_pgp(&m, buf, nread); - if (err < 0) - return gnutls_assert_val(map_gnutls_error(err)); - - *ret_m = m; - return rc; -} - - -/* Read the encoded packet length directly from the file - object INP and return it. Reset RET_PARTIAL if this is - the last packet in block mode. */ -size_t _cdk_pkt_read_len(FILE * inp, size_t * ret_partial) -{ - int c1, c2; - size_t pktlen; - - c1 = fgetc(inp); - if (c1 == EOF) - return (size_t) EOF; - if (c1 < 224 || c1 == 255) - *ret_partial = 0; /* End of partial data */ - if (c1 < 192) - pktlen = c1; - else if (c1 >= 192 && c1 <= 223) { - c2 = fgetc(inp); - if (c2 == EOF) - return (size_t) EOF; - pktlen = ((c1 - 192) << 8) + c2 + 192; - } else if (c1 == 255) { - pktlen = fgetc(inp) << 24; - pktlen |= fgetc(inp) << 16; - pktlen |= fgetc(inp) << 8; - pktlen |= fgetc(inp) << 0; - } else - pktlen = 1 << (c1 & 0x1f); - return pktlen; -} - - -static cdk_error_t -read_pubkey_enc(cdk_stream_t inp, size_t pktlen, cdk_pkt_pubkey_enc_t pke) -{ - size_t i, nenc; - - if (!inp || !pke) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("read_pubkey_enc: %d octets\n", - (int) pktlen); - - if (pktlen < 12) - return CDK_Inv_Packet; - pke->version = cdk_stream_getc(inp); - if (pke->version < 2 || pke->version > 3) - return CDK_Inv_Packet; - pke->keyid[0] = read_32(inp); - pke->keyid[1] = read_32(inp); - if (!pke->keyid[0] && !pke->keyid[1]) - pke->throw_keyid = 1; /* RFC2440 "speculative" keyID */ - pke->pubkey_algo = _pgp_pub_algo_to_cdk(cdk_stream_getc(inp)); - nenc = cdk_pk_get_nenc(pke->pubkey_algo); - if (!nenc) - return CDK_Inv_Algo; - for (i = 0; i < nenc; i++) { - cdk_error_t rc = read_mpi(inp, &pke->mpi[i], 0); - if (rc) - return gnutls_assert_val(rc); - } - - return 0; -} - - - -static cdk_error_t read_mdc(cdk_stream_t inp, cdk_pkt_mdc_t mdc) -{ - size_t n = 0; - cdk_error_t rc; - - if (!inp || !mdc) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("read_mdc:\n"); - - rc = stream_read(inp, mdc->hash, DIM(mdc->hash), &n); - if (rc) - return rc; - - return n != DIM(mdc->hash) ? CDK_Inv_Packet : 0; -} - - -static cdk_error_t -read_compressed(cdk_stream_t inp, size_t pktlen, cdk_pkt_compressed_t c) -{ - if (!inp || !c) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("read_compressed: %d octets\n", - (int) pktlen); - - c->algorithm = cdk_stream_getc(inp); - if (c->algorithm > 3) - return CDK_Inv_Packet; - - /* don't know the size, so we read until EOF */ - if (!pktlen) { - c->len = 0; - c->buf = inp; - } - - /* FIXME: Support partial bodies. */ - return 0; -} - - -static cdk_error_t -read_public_key(cdk_stream_t inp, size_t pktlen, cdk_pkt_pubkey_t pk) -{ - size_t i, ndays, npkey; - - if (!inp || !pk) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("read_public_key: %d octets\n", - (int) pktlen); - - pk->is_invalid = 1; /* default to detect missing self signatures */ - pk->is_revoked = 0; - pk->has_expired = 0; - - pk->version = cdk_stream_getc(inp); - if (pk->version < 2 || pk->version > 4) - return CDK_Inv_Packet_Ver; - pk->timestamp = read_32(inp); - if (pk->version < 4) { - ndays = read_16(inp); - if (ndays) - pk->expiredate = pk->timestamp + ndays * 86400L; - } - - pk->pubkey_algo = _pgp_pub_algo_to_cdk(cdk_stream_getc(inp)); - npkey = cdk_pk_get_npkey(pk->pubkey_algo); - if (!npkey) { - gnutls_assert(); - _gnutls_write_log("invalid public key algorithm %d\n", - pk->pubkey_algo); - return CDK_Inv_Algo; - } - for (i = 0; i < npkey; i++) { - cdk_error_t rc = read_mpi(inp, &pk->mpi[i], 0); - if (rc) - return gnutls_assert_val(rc); - } - - /* This value is just for the first run and will be - replaced with the actual key flags from the self signature. */ - pk->pubkey_usage = 0; - return 0; -} - - -static cdk_error_t -read_public_subkey(cdk_stream_t inp, size_t pktlen, cdk_pkt_pubkey_t pk) -{ - if (!inp || !pk) - return CDK_Inv_Value; - return read_public_key(inp, pktlen, pk); -} - -static cdk_error_t -read_secret_key(cdk_stream_t inp, size_t pktlen, cdk_pkt_seckey_t sk) -{ - size_t p1, p2, nread = 0; - int i, nskey; - int rc; - - if (!inp || !sk || !sk->pk) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("read_secret_key: %d octets\n", - (int) pktlen); - - p1 = cdk_stream_tell(inp); - rc = read_public_key(inp, pktlen, sk->pk); - if (rc) - return rc; - - sk->s2k_usage = cdk_stream_getc(inp); - sk->protect.sha1chk = 0; - if (sk->s2k_usage == 254 || sk->s2k_usage == 255) { - sk->protect.sha1chk = (sk->s2k_usage == 254); - sk->protect.algo = - _pgp_cipher_to_gnutls(cdk_stream_getc(inp)); - if (sk->protect.algo == GNUTLS_CIPHER_UNKNOWN) - return gnutls_assert_val(CDK_Inv_Algo); - - sk->protect.s2k = cdk_calloc(1, sizeof *sk->protect.s2k); - if (!sk->protect.s2k) - return CDK_Out_Of_Core; - rc = read_s2k(inp, sk->protect.s2k); - if (rc) - return rc; - /* refer to --export-secret-subkeys in gpg(1) */ - if (sk->protect.s2k->mode == CDK_S2K_GNU_EXT) - sk->protect.ivlen = 0; - else { - sk->protect.ivlen = - gnutls_cipher_get_block_size(sk->protect.algo); - if (!sk->protect.ivlen) - return CDK_Inv_Packet; - rc = stream_read(inp, sk->protect.iv, - sk->protect.ivlen, &nread); - if (rc) - return rc; - if (nread != sk->protect.ivlen) - return CDK_Inv_Packet; - } - } else - sk->protect.algo = _pgp_cipher_to_gnutls(sk->s2k_usage); - if (sk->protect.algo == GNUTLS_CIPHER_UNKNOWN) - return gnutls_assert_val(CDK_Inv_Algo); - else if (sk->protect.algo == GNUTLS_CIPHER_NULL) { - sk->csum = 0; - nskey = cdk_pk_get_nskey(sk->pk->pubkey_algo); - if (!nskey) { - gnutls_assert(); - return CDK_Inv_Algo; - } - for (i = 0; i < nskey; i++) { - rc = read_mpi(inp, &sk->mpi[i], 1); - if (rc) - return gnutls_assert_val(rc); - } - sk->csum = read_16(inp); - sk->is_protected = 0; - } else if (sk->pk->version < 4) { - /* The length of each multiprecision integer is stored in plaintext. */ - nskey = cdk_pk_get_nskey(sk->pk->pubkey_algo); - if (!nskey) { - gnutls_assert(); - return CDK_Inv_Algo; - } - for (i = 0; i < nskey; i++) { - rc = read_mpi(inp, &sk->mpi[i], 1); - if (rc) - return gnutls_assert_val(rc); - } - sk->csum = read_16(inp); - sk->is_protected = 1; - } else { - /* We need to read the rest of the packet because we do not - have any information how long the encrypted mpi's are */ - p2 = cdk_stream_tell(inp); - p2 -= p1; - sk->enclen = pktlen - p2; - if (sk->enclen < 2) - return CDK_Inv_Packet; /* at least 16 bits for the checksum! */ - sk->encdata = cdk_calloc(1, sk->enclen + 1); - if (!sk->encdata) - return CDK_Out_Of_Core; - if (stream_read(inp, sk->encdata, sk->enclen, &nread)) - return CDK_Inv_Packet; - /* Handle the GNU S2K extensions we know (just gnu-dummy right now): */ - if (sk->protect.s2k->mode == CDK_S2K_GNU_EXT) { - unsigned char gnumode; - if ((sk->enclen < strlen("GNU") + 1) || - (0 != - memcmp("GNU", sk->encdata, strlen("GNU")))) - return CDK_Inv_Packet; - gnumode = sk->encdata[strlen("GNU")]; - /* we only handle gnu-dummy (mode 1). - mode 2 should refer to external smart cards. - */ - if (gnumode != 1) - return CDK_Inv_Packet; - /* gnu-dummy should have no more data */ - if (sk->enclen != strlen("GNU") + 1) - return CDK_Inv_Packet; - } - nskey = cdk_pk_get_nskey(sk->pk->pubkey_algo); - if (!nskey) { - gnutls_assert(); - return CDK_Inv_Algo; - } - /* We mark each MPI entry with NULL to indicate a protected key. */ - for (i = 0; i < nskey; i++) - sk->mpi[i] = NULL; - sk->is_protected = 1; - } - - sk->is_primary = 1; - _cdk_copy_pk_to_sk(sk->pk, sk); - return 0; -} - - -static cdk_error_t -read_secret_subkey(cdk_stream_t inp, size_t pktlen, cdk_pkt_seckey_t sk) -{ - cdk_error_t rc; - - if (!inp || !sk || !sk->pk) - return CDK_Inv_Value; - - rc = read_secret_key(inp, pktlen, sk); - sk->is_primary = 0; - return rc; -} - -#define ATTRIBUTE "[attribute]" - -static cdk_error_t -read_attribute(cdk_stream_t inp, size_t pktlen, cdk_pkt_userid_t attr, - int name_size) -{ - const byte *p; - byte *buf; - size_t len, nread; - cdk_error_t rc; - - if (!inp || !attr || !pktlen) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("read_attribute: %d octets\n", - (int) pktlen); - - _gnutls_str_cpy(attr->name, name_size, ATTRIBUTE); - attr->len = MIN(name_size, sizeof(ATTRIBUTE) - 1); - - buf = cdk_calloc(1, pktlen); - if (!buf) - return CDK_Out_Of_Core; - rc = stream_read(inp, buf, pktlen, &nread); - if (rc) { - gnutls_assert(); - rc = CDK_Inv_Packet; - goto error; - } - - p = buf; - len = *p++; - pktlen--; - - if (len == 255) { - if (pktlen < 4) { - gnutls_assert(); - rc = CDK_Inv_Packet; - goto error; - } - - len = _cdk_buftou32(p); - p += 4; - pktlen -= 4; - } else if (len >= 192) { - if (pktlen < 2) { - gnutls_assert(); - rc = CDK_Inv_Packet; - goto error; - } - - len = ((len - 192) << 8) + *p + 192; - p++; - pktlen--; - } - - if (!len || pktlen == 0 || *p != 1) { /* Currently only 1, meaning an image, is defined. */ - rc = CDK_Inv_Packet; - goto error; - } - - p++; - len--; - - if (len >= pktlen) { - rc = CDK_Inv_Packet; - goto error; - } - - attr->attrib_img = cdk_calloc(1, len); - if (!attr->attrib_img) { - rc = CDK_Out_Of_Core; - goto error; - } - - attr->attrib_len = len; - memcpy(attr->attrib_img, p, len); - cdk_free(buf); - return rc; - - error: - cdk_free(buf); - return rc; -} - - -static cdk_error_t -read_user_id(cdk_stream_t inp, size_t pktlen, cdk_pkt_userid_t user_id) -{ - size_t nread; - cdk_error_t rc; - - if (!inp || !user_id) - return CDK_Inv_Value; - if (!pktlen) - return CDK_Inv_Packet; - - if (DEBUG_PKT) - _gnutls_write_log("read_user_id: %lu octets\n", - (unsigned long) pktlen); - - user_id->len = pktlen; - rc = stream_read(inp, user_id->name, pktlen, &nread); - if (rc) - return rc; - if (nread != pktlen) - return CDK_Inv_Packet; - user_id->name[nread] = '\0'; - return rc; -} - - -#define MAX_PACKET_LEN (1<<24) - - -static cdk_error_t -read_subpkt(cdk_stream_t inp, cdk_subpkt_t * r_ctx, size_t * r_nbytes) -{ - int c, c1; - size_t size, nread = 0, n; - cdk_subpkt_t node; - cdk_error_t rc; - - if (!inp || !r_nbytes) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("read_subpkt:\n"); - - n = 0; - *r_nbytes = 0; - c = cdk_stream_getc(inp); - n++; - - if (c == 255) { - size = read_32(inp); - if (size == (u32)-1) - return CDK_Inv_Packet; - - n += 4; - } else if (c >= 192 && c < 255) { - c1 = cdk_stream_getc(inp); - if (c1 == EOF) - return CDK_Inv_Packet; - - n++; - if (c1 == 0) - return 0; - size = ((c - 192) << 8) + c1 + 192; - } else if (c < 192) - size = c; - else - return CDK_Inv_Packet; - - if (size >= MAX_PACKET_LEN) { - return CDK_Inv_Packet; - } - - node = cdk_subpkt_new(size); - if (!node) - return CDK_Out_Of_Core; - node->size = size; - node->type = cdk_stream_getc(inp); - if (DEBUG_PKT) - _gnutls_write_log(" %d octets %d type\n", node->size, - node->type); - n++; - node->size--; - rc = stream_read(inp, node->d, node->size, &nread); - if (rc) { - cdk_subpkt_free(node); - return rc; - } - - n += nread; - *r_nbytes = n; - if (!*r_ctx) - *r_ctx = node; - else - cdk_subpkt_add(*r_ctx, node); - return rc; -} - - -static cdk_error_t -read_onepass_sig(cdk_stream_t inp, size_t pktlen, - cdk_pkt_onepass_sig_t sig) -{ - if (!inp || !sig) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("read_onepass_sig: %d octets\n", - (int) pktlen); - - if (pktlen != 13) - return CDK_Inv_Packet; - sig->version = cdk_stream_getc(inp); - if (sig->version != 3) - return CDK_Inv_Packet_Ver; - sig->sig_class = cdk_stream_getc(inp); - sig->digest_algo = _pgp_hash_algo_to_gnutls(cdk_stream_getc(inp)); - sig->pubkey_algo = _pgp_pub_algo_to_cdk(cdk_stream_getc(inp)); - sig->keyid[0] = read_32(inp); - sig->keyid[1] = read_32(inp); - sig->last = cdk_stream_getc(inp); - return 0; -} - - -static cdk_error_t parse_sig_subpackets(cdk_pkt_signature_t sig) -{ - cdk_subpkt_t node; - - /* Setup the standard packet entries, so we can use V4 - signatures similar to V3. */ - for (node = sig->unhashed; node; node = node->next) { - if (node->type == CDK_SIGSUBPKT_ISSUER && node->size >= 8) { - sig->keyid[0] = _cdk_buftou32(node->d); - sig->keyid[1] = _cdk_buftou32(node->d + 4); - } else if (node->type == CDK_SIGSUBPKT_EXPORTABLE - && node->d[0] == 0) { - /* Sometimes this packet might be placed in the unhashed area */ - sig->flags.exportable = 0; - } - } - for (node = sig->hashed; node; node = node->next) { - if (node->type == CDK_SIGSUBPKT_SIG_CREATED - && node->size >= 4) - sig->timestamp = _cdk_buftou32(node->d); - else if (node->type == CDK_SIGSUBPKT_SIG_EXPIRE - && node->size >= 4) { - sig->expiredate = _cdk_buftou32(node->d); - if (sig->expiredate > 0 - && sig->expiredate < (u32) gnutls_time(NULL)) - sig->flags.expired = 1; - } else if (node->type == CDK_SIGSUBPKT_POLICY) - sig->flags.policy_url = 1; - else if (node->type == CDK_SIGSUBPKT_NOTATION) - sig->flags.notation = 1; - else if (node->type == CDK_SIGSUBPKT_REVOCABLE - && node->d[0] == 0) - sig->flags.revocable = 0; - else if (node->type == CDK_SIGSUBPKT_EXPORTABLE - && node->d[0] == 0) - sig->flags.exportable = 0; - } - if (sig->sig_class == 0x1F) { - cdk_desig_revoker_t r, rnode; - - for (node = sig->hashed; node; node = node->next) { - if (node->type == CDK_SIGSUBPKT_REV_KEY) { - if (node->size < 22) - continue; - rnode = cdk_calloc(1, sizeof *rnode); - if (!rnode) - return CDK_Out_Of_Core; - rnode->r_class = node->d[0]; - rnode->algid = node->d[1]; - memcpy(rnode->fpr, node->d + 2, - KEY_FPR_LEN); - if (!sig->revkeys) - sig->revkeys = rnode; - else { - for (r = sig->revkeys; r->next; - r = r->next); - r->next = rnode; - } - } - } - } - - return 0; -} - - -static cdk_error_t -read_signature(cdk_stream_t inp, size_t pktlen, cdk_pkt_signature_t sig) -{ - size_t nbytes; - size_t i, nsig; - ssize_t size; - cdk_error_t rc; - - if (!inp || !sig) - return gnutls_assert_val(CDK_Inv_Value); - - if (DEBUG_PKT) - _gnutls_write_log("read_signature: %d octets\n", - (int) pktlen); - - if (pktlen < 16) - return gnutls_assert_val(CDK_Inv_Packet); - sig->version = cdk_stream_getc(inp); - if (sig->version < 2 || sig->version > 4) - return gnutls_assert_val(CDK_Inv_Packet_Ver); - - sig->flags.exportable = 1; - sig->flags.revocable = 1; - - if (sig->version < 4) { - if (cdk_stream_getc(inp) != 5) - return gnutls_assert_val(CDK_Inv_Packet); - sig->sig_class = cdk_stream_getc(inp); - sig->timestamp = read_32(inp); - sig->keyid[0] = read_32(inp); - sig->keyid[1] = read_32(inp); - sig->pubkey_algo = - _pgp_pub_algo_to_cdk(cdk_stream_getc(inp)); - sig->digest_algo = - _pgp_hash_algo_to_gnutls(cdk_stream_getc(inp)); - sig->digest_start[0] = cdk_stream_getc(inp); - sig->digest_start[1] = cdk_stream_getc(inp); - nsig = cdk_pk_get_nsig(sig->pubkey_algo); - if (!nsig) - return gnutls_assert_val(CDK_Inv_Algo); - for (i = 0; i < nsig; i++) { - rc = read_mpi(inp, &sig->mpi[i], 0); - if (rc) - return gnutls_assert_val(rc); - } - } else { - sig->sig_class = cdk_stream_getc(inp); - sig->pubkey_algo = - _pgp_pub_algo_to_cdk(cdk_stream_getc(inp)); - sig->digest_algo = - _pgp_hash_algo_to_gnutls(cdk_stream_getc(inp)); - sig->hashed_size = read_16(inp); - size = sig->hashed_size; - sig->hashed = NULL; - while (size > 0) { - rc = read_subpkt(inp, &sig->hashed, &nbytes); - if (rc) - return gnutls_assert_val(rc); - size -= nbytes; - } - sig->unhashed_size = read_16(inp); - size = sig->unhashed_size; - sig->unhashed = NULL; - while (size > 0) { - rc = read_subpkt(inp, &sig->unhashed, &nbytes); - if (rc) - return gnutls_assert_val(rc); - size -= nbytes; - } - - rc = parse_sig_subpackets(sig); - if (rc) - return gnutls_assert_val(rc); - - sig->digest_start[0] = cdk_stream_getc(inp); - sig->digest_start[1] = cdk_stream_getc(inp); - nsig = cdk_pk_get_nsig(sig->pubkey_algo); - if (!nsig) - return gnutls_assert_val(CDK_Inv_Algo); - for (i = 0; i < nsig; i++) { - rc = read_mpi(inp, &sig->mpi[i], 0); - if (rc) - return gnutls_assert_val(rc); - } - } - - return 0; -} - - -static cdk_error_t -read_literal(cdk_stream_t inp, size_t pktlen, - cdk_pkt_literal_t * ret_pt, int is_partial) -{ - cdk_pkt_literal_t pt = *ret_pt; - size_t nread = 0; - cdk_error_t rc; - - if (!inp || !pt) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("read_literal: %d octets\n", - (int) pktlen); - - pt->mode = cdk_stream_getc(inp); - if (pt->mode != 0x62 && pt->mode != 0x74 && pt->mode != 0x75) - return CDK_Inv_Packet; - if (cdk_stream_eof(inp)) - return CDK_Inv_Packet; - - pt->namelen = cdk_stream_getc(inp); - if (pt->namelen > 0) { - *ret_pt = pt = - cdk_realloc(pt, sizeof *pt + pt->namelen + 2); - if (!pt) - return CDK_Out_Of_Core; - pt->name = (char *) pt + sizeof(*pt); - rc = stream_read(inp, pt->name, pt->namelen, &nread); - if (rc) - return rc; - if ((int) nread != pt->namelen) - return CDK_Inv_Packet; - pt->name[pt->namelen] = '\0'; - } - pt->timestamp = read_32(inp); - pktlen = pktlen - 6 - pt->namelen; - if (is_partial) - _cdk_stream_set_blockmode(inp, pktlen); - pt->buf = inp; - pt->len = pktlen; - return 0; -} - - -/* Read an old packet CTB and return the length of the body. */ -static void -read_old_length(cdk_stream_t inp, int ctb, size_t * r_len, size_t * r_size) -{ - int llen = ctb & 0x03; - int c; - - if (llen == 0) { - c = cdk_stream_getc(inp); - if (c == EOF) - goto fail; - - *r_len = c; - (*r_size)++; - } else if (llen == 1) { - *r_len = read_16(inp); - if (*r_len == (u16)-1) - goto fail; - (*r_size) += 2; - } else if (llen == 2) { - *r_len = read_32(inp); - if (*r_len == (u32)-1) { - goto fail; - } - - (*r_size) += 4; - } else { - fail: - *r_len = 0; - *r_size = 0; - } -} - - -/* Read a new CTB and decode the body length. */ -static void -read_new_length(cdk_stream_t inp, - size_t * r_len, size_t * r_size, size_t * r_partial) -{ - int c, c1; - - c = cdk_stream_getc(inp); - if (c == EOF) - return; - - (*r_size)++; - if (c < 192) - *r_len = c; - else if (c >= 192 && c <= 223) { - c1 = cdk_stream_getc(inp); - if (c1 == EOF) - return; - - (*r_size)++; - *r_len = ((c - 192) << 8) + c1 + 192; - } else if (c == 255) { - c1 = read_32(inp); - if (c1 == -1) { - return; - } - - *r_len = c1; - (*r_size) += 4; - } else { - *r_len = 1 << (c & 0x1f); - *r_partial = 1; - } -} - - -/* Skip the current packet body. */ -static cdk_error_t skip_packet(cdk_stream_t inp, size_t pktlen) -{ - byte buf[BUFSIZE]; - size_t nread = 0, buflen = DIM(buf); - - while (pktlen > 0) { - cdk_error_t rc; - rc = stream_read(inp, buf, pktlen > buflen ? buflen : pktlen, - &nread); - if (rc) - return rc; - pktlen -= nread; - } - - assert(pktlen == 0); - return 0; -} - -/** - * cdk_pkt_read: - * @inp: the input stream - * @pkt: allocated packet handle to store the packet - * - * Parse the next packet on the @inp stream and return its contents in @pkt. - **/ -cdk_error_t cdk_pkt_read(cdk_stream_t inp, cdk_packet_t pkt, unsigned public) -{ - int ctb, is_newctb; - int pkttype; - size_t pktlen = 0, pktsize = 0, is_partial = 0; - cdk_error_t rc; - - if (!inp || !pkt) - return CDK_Inv_Value; - - ctb = cdk_stream_getc(inp); - if (cdk_stream_eof(inp) || ctb == EOF) - return CDK_EOF; - else if (!ctb) - return gnutls_assert_val(CDK_Inv_Packet); - - pktsize++; - if (!(ctb & 0x80)) { - _cdk_log_info("cdk_pkt_read: no openpgp data found. " - "(ctb=%02X; fpos=%02X)\n", (int) ctb, - (int) cdk_stream_tell(inp)); - return gnutls_assert_val(CDK_Inv_Packet); - } - - if (ctb & 0x40) { /* RFC2440 packet format. */ - pkttype = ctb & 0x3f; - is_newctb = 1; - } else { /* the old RFC1991 packet format. */ - - pkttype = ctb & 0x3f; - pkttype >>= 2; - is_newctb = 0; - } - - if (pkttype > 63) { - _cdk_log_info("cdk_pkt_read: unknown type %d\n", pkttype); - return gnutls_assert_val(CDK_Inv_Packet); - } - - if (is_newctb) - read_new_length(inp, &pktlen, &pktsize, &is_partial); - else - read_old_length(inp, ctb, &pktlen, &pktsize); - - /* enforce limits to ensure that the following calculations - * do not overflow */ - if (pktlen >= MAX_PACKET_LEN || pktsize >= MAX_PACKET_LEN) { - _cdk_log_info("cdk_pkt_read: too long packet\n"); - return gnutls_assert_val(CDK_Inv_Packet); - } - - pkt->pkttype = pkttype; - pkt->pktlen = pktlen; - pkt->pktsize = pktsize + pktlen; - pkt->old_ctb = is_newctb ? 0 : 1; - - switch (pkt->pkttype) { - case CDK_PKT_ATTRIBUTE: -#define NAME_SIZE (pkt->pktlen + 16 + 1) - pkt->pkt.user_id = cdk_calloc(1, sizeof *pkt->pkt.user_id - + NAME_SIZE); - if (!pkt->pkt.user_id) - return gnutls_assert_val(CDK_Out_Of_Core); - pkt->pkt.user_id->name = - (char *) pkt->pkt.user_id + sizeof(*pkt->pkt.user_id); - - rc = read_attribute(inp, pktlen, pkt->pkt.user_id, - NAME_SIZE); - pkt->pkttype = CDK_PKT_ATTRIBUTE; - if (rc) - return gnutls_assert_val(rc); - break; - - case CDK_PKT_USER_ID: - - pkt->pkt.user_id = cdk_calloc(1, sizeof *pkt->pkt.user_id - + pkt->pktlen + 1); - if (!pkt->pkt.user_id) - return gnutls_assert_val(CDK_Out_Of_Core); - pkt->pkt.user_id->name = - (char *) pkt->pkt.user_id + sizeof(*pkt->pkt.user_id); - rc = read_user_id(inp, pktlen, pkt->pkt.user_id); - if (rc) - return gnutls_assert_val(rc); - break; - - case CDK_PKT_PUBLIC_KEY: - pkt->pkt.public_key = - cdk_calloc(1, sizeof *pkt->pkt.public_key); - if (!pkt->pkt.public_key) - return gnutls_assert_val(CDK_Out_Of_Core); - rc = read_public_key(inp, pktlen, pkt->pkt.public_key); - if (rc) - return gnutls_assert_val(rc); - break; - - case CDK_PKT_PUBLIC_SUBKEY: - pkt->pkt.public_key = - cdk_calloc(1, sizeof *pkt->pkt.public_key); - if (!pkt->pkt.public_key) - return gnutls_assert_val(CDK_Out_Of_Core); - rc = read_public_subkey(inp, pktlen, pkt->pkt.public_key); - if (rc) - return gnutls_assert_val(rc); - break; - - case CDK_PKT_SECRET_KEY: - if (public) { - /* read secret key when expecting public */ - return gnutls_assert_val(CDK_Inv_Packet); - } - pkt->pkt.secret_key = - cdk_calloc(1, sizeof *pkt->pkt.secret_key); - if (!pkt->pkt.secret_key) - return gnutls_assert_val(CDK_Out_Of_Core); - pkt->pkt.secret_key->pk = cdk_calloc(1, - sizeof *pkt->pkt. - secret_key->pk); - if (!pkt->pkt.secret_key->pk) - return gnutls_assert_val(CDK_Out_Of_Core); - rc = read_secret_key(inp, pktlen, pkt->pkt.secret_key); - if (rc) - return gnutls_assert_val(rc); - break; - - case CDK_PKT_SECRET_SUBKEY: - if (public) { - /* read secret key when expecting public */ - return gnutls_assert_val(CDK_Inv_Packet); - } - pkt->pkt.secret_key = - cdk_calloc(1, sizeof *pkt->pkt.secret_key); - if (!pkt->pkt.secret_key) - return gnutls_assert_val(CDK_Out_Of_Core); - pkt->pkt.secret_key->pk = cdk_calloc(1, - sizeof *pkt->pkt. - secret_key->pk); - if (!pkt->pkt.secret_key->pk) - return gnutls_assert_val(CDK_Out_Of_Core); - rc = read_secret_subkey(inp, pktlen, pkt->pkt.secret_key); - if (rc) - return gnutls_assert_val(rc); - break; - - case CDK_PKT_LITERAL: - pkt->pkt.literal = cdk_calloc(1, sizeof *pkt->pkt.literal); - if (!pkt->pkt.literal) - return gnutls_assert_val(CDK_Out_Of_Core); - rc = read_literal(inp, pktlen, &pkt->pkt.literal, - is_partial); - if (rc) - return gnutls_assert_val(rc); - break; - - case CDK_PKT_ONEPASS_SIG: - pkt->pkt.onepass_sig = - cdk_calloc(1, sizeof *pkt->pkt.onepass_sig); - if (!pkt->pkt.onepass_sig) - return gnutls_assert_val(CDK_Out_Of_Core); - rc = read_onepass_sig(inp, pktlen, pkt->pkt.onepass_sig); - if (rc) - return gnutls_assert_val(rc); - break; - - case CDK_PKT_SIGNATURE: - pkt->pkt.signature = - cdk_calloc(1, sizeof *pkt->pkt.signature); - if (!pkt->pkt.signature) - return gnutls_assert_val(CDK_Out_Of_Core); - rc = read_signature(inp, pktlen, pkt->pkt.signature); - if (rc) - return gnutls_assert_val(rc); - break; - - case CDK_PKT_PUBKEY_ENC: - pkt->pkt.pubkey_enc = - cdk_calloc(1, sizeof *pkt->pkt.pubkey_enc); - if (!pkt->pkt.pubkey_enc) - return gnutls_assert_val(CDK_Out_Of_Core); - rc = read_pubkey_enc(inp, pktlen, pkt->pkt.pubkey_enc); - if (rc) - return gnutls_assert_val(rc); - break; - - case CDK_PKT_COMPRESSED: - pkt->pkt.compressed = - cdk_calloc(1, sizeof *pkt->pkt.compressed); - if (!pkt->pkt.compressed) - return gnutls_assert_val(CDK_Out_Of_Core); - rc = read_compressed(inp, pktlen, pkt->pkt.compressed); - if (rc) - return gnutls_assert_val(rc); - break; - - case CDK_PKT_MDC: - pkt->pkt.mdc = cdk_calloc(1, sizeof *pkt->pkt.mdc); - if (!pkt->pkt.mdc) - return gnutls_assert_val(CDK_Out_Of_Core); - rc = read_mdc(inp, pkt->pkt.mdc); - if (rc) - return gnutls_assert_val(rc); - break; - - default: - /* Skip all packets we don't understand */ - rc = skip_packet(inp, pktlen); - if (rc) - return gnutls_assert_val(rc); - break; - } - - return rc; -} diff --git a/lib/opencdk/seskey.c b/lib/opencdk/seskey.c deleted file mode 100644 index 77fbd1f9d6..0000000000 --- a/lib/opencdk/seskey.c +++ /dev/null @@ -1,95 +0,0 @@ -/* seskey.c - Session key routines - * Copyright (C) 1998-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include - -#include "opencdk.h" -#include "main.h" -#include "packet.h" -#include - -/** - * cdk_s2k_new: - * @ret_s2k: output for the new S2K object - * @mode: the S2K mode (simple, salted, iter+salted) - * @digest_algo: the hash algorithm - * @salt: random salt - * - * Create a new S2K object with the given parameter. - * The @salt parameter must be always 8 octets. - **/ -cdk_error_t -cdk_s2k_new(cdk_s2k_t * ret_s2k, int mode, int digest_algo, - const byte * salt) -{ - cdk_s2k_t s2k; - - if (!ret_s2k) - return CDK_Inv_Value; - - if (mode != 0x00 && mode != 0x01 && mode != 0x03) - return CDK_Inv_Mode; - - if (_gnutls_hash_get_algo_len(mac_to_entry(digest_algo)) <= 0) - return CDK_Inv_Algo; - - s2k = cdk_calloc(1, sizeof *s2k); - if (!s2k) - return CDK_Out_Of_Core; - s2k->mode = mode; - s2k->hash_algo = digest_algo; - if (salt) - memcpy(s2k->salt, salt, 8); - *ret_s2k = s2k; - return 0; -} - - -/** - * cdk_s2k_free: - * @s2k: the S2K object - * - * Release the given S2K object. - **/ -void cdk_s2k_free(cdk_s2k_t s2k) -{ - cdk_free(s2k); -} - - -/* Make a copy of the source s2k into R_DST. */ -cdk_error_t _cdk_s2k_copy(cdk_s2k_t * r_dst, cdk_s2k_t src) -{ - cdk_s2k_t dst; - cdk_error_t err; - - err = cdk_s2k_new(&dst, src->mode, src->hash_algo, src->salt); - if (err) - return err; - dst->count = src->count; - *r_dst = dst; - - return 0; -} diff --git a/lib/opencdk/sig-check.c b/lib/opencdk/sig-check.c deleted file mode 100644 index 935895fc5f..0000000000 --- a/lib/opencdk/sig-check.c +++ /dev/null @@ -1,601 +0,0 @@ -/* sig-check.c - Check signatures - * Copyright (C) 1998-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include "gnutls_int.h" -#include - -#include "opencdk.h" -#include "main.h" -#include "packet.h" - -/* Hash all multi precision integers of the key PK with the given - message digest context MD. */ -static int hash_mpibuf(cdk_pubkey_t pk, digest_hd_st * md, int usefpr) -{ - byte buf[MAX_MPI_BYTES]; /* FIXME: do not use hardcoded length. */ - size_t nbytes; - size_t i, npkey; - int err; - - /* We have to differ between two modes for v3 keys. To form the - fingerprint, we hash the MPI values without the length prefix. - But if we calculate the hash for verifying/signing we use all data. */ - npkey = cdk_pk_get_npkey(pk->pubkey_algo); - for (i = 0; i < npkey; i++) { - nbytes = MAX_MPI_BYTES; - err = _gnutls_mpi_print_pgp(pk->mpi[i], buf, &nbytes); - - if (err < 0) { - gnutls_assert(); - return map_gnutls_error(err); - } - - if (!usefpr || pk->version == 4) - _gnutls_hash(md, buf, nbytes); - else /* without the prefix. */ - _gnutls_hash(md, buf + 2, nbytes - 2); - } - return 0; -} - - -/* Hash an entire public key PK with the given message digest context - MD. The @usefpr param is only valid for version 3 keys because of - the different way to calculate the fingerprint. */ -cdk_error_t -_cdk_hash_pubkey(cdk_pubkey_t pk, digest_hd_st * md, int usefpr) -{ - byte buf[12]; - size_t i, n, npkey; - - if (!pk || !md) - return CDK_Inv_Value; - - if (usefpr && pk->version < 4 && is_RSA(pk->pubkey_algo)) - return hash_mpibuf(pk, md, 1); - - /* The version 4 public key packet does not have the 2 octets for - the expiration date. */ - n = pk->version < 4 ? 8 : 6; - npkey = cdk_pk_get_npkey(pk->pubkey_algo); - for (i = 0; i < npkey; i++) - n = n + (_gnutls_mpi_get_nbits(pk->mpi[i]) + 7) / 8 + 2; - - i = 0; - buf[i++] = 0x99; - buf[i++] = n >> 8; - buf[i++] = n >> 0; - buf[i++] = pk->version; - buf[i++] = pk->timestamp >> 24; - buf[i++] = pk->timestamp >> 16; - buf[i++] = pk->timestamp >> 8; - buf[i++] = pk->timestamp >> 0; - - if (pk->version < 4) { - u16 a = 0; - - /* Convert the expiration date into days. */ - if (pk->expiredate) - a = (u16) ((pk->expiredate - - pk->timestamp) / 86400L); - buf[i++] = a >> 8; - buf[i++] = a; - } - buf[i++] = pk->pubkey_algo; - _gnutls_hash(md, buf, i); - return hash_mpibuf(pk, md, 0); -} - - -/* Hash the user ID @uid with the given message digest @md. - Use openpgp mode if @is_v4 is 1. */ -cdk_error_t -_cdk_hash_userid(cdk_pkt_userid_t uid, int is_v4, digest_hd_st * md) -{ - const byte *data; - byte buf[5]; - u32 dlen; - - if (!uid || !md) - return CDK_Inv_Value; - - if (!is_v4) { - _gnutls_hash(md, (byte *) uid->name, uid->len); - return 0; - } - - dlen = uid->attrib_img ? uid->attrib_len : uid->len; - data = uid->attrib_img ? uid->attrib_img : (byte *) uid->name; - buf[0] = uid->attrib_img ? 0xD1 : 0xB4; - buf[1] = dlen >> 24; - buf[2] = dlen >> 16; - buf[3] = dlen >> 8; - buf[4] = dlen >> 0; - _gnutls_hash(md, buf, 5); - _gnutls_hash(md, data, dlen); - return 0; -} - - -/* Hash all parts of the signature which are needed to derive - the correct message digest to verify the sig. */ -cdk_error_t _cdk_hash_sig_data(cdk_pkt_signature_t sig, digest_hd_st * md) -{ - byte buf[4]; - byte tmp; - - if (!sig || !md) - return CDK_Inv_Value; - - if (sig->version == 4) - _gnutls_hash(md, &sig->version, 1); - - _gnutls_hash(md, &sig->sig_class, 1); - if (sig->version < 4) { - buf[0] = sig->timestamp >> 24; - buf[1] = sig->timestamp >> 16; - buf[2] = sig->timestamp >> 8; - buf[3] = sig->timestamp >> 0; - _gnutls_hash(md, buf, 4); - } else { - size_t n; - - tmp = _cdk_pub_algo_to_pgp(sig->pubkey_algo); - _gnutls_hash(md, &tmp, 1); - tmp = _gnutls_hash_algo_to_pgp(sig->digest_algo); - _gnutls_hash(md, &tmp, 1); - if (sig->hashed != NULL) { - byte *p = - _cdk_subpkt_get_array(sig->hashed, 0, &n); - if (p == NULL) - return gnutls_assert_val(CDK_Inv_Value); - - buf[0] = n >> 8; - buf[1] = n >> 0; - _gnutls_hash(md, buf, 2); - _gnutls_hash(md, p, n); - cdk_free(p); - sig->hashed_size = n; - n = sig->hashed_size + 6; - } else { - tmp = 0x00; - _gnutls_hash(md, &tmp, 1); - _gnutls_hash(md, &tmp, 1); - n = 6; - } - _gnutls_hash(md, &sig->version, 1); - tmp = 0xff; - _gnutls_hash(md, &tmp, 1); - buf[0] = n >> 24; - buf[1] = n >> 16; - buf[2] = n >> 8; - buf[3] = n >> 0; - _gnutls_hash(md, buf, 4); - } - return 0; -} - - -/* Cache the signature result and store it inside the sig. */ -static void cache_sig_result(cdk_pkt_signature_t sig, int res) -{ - sig->flags.checked = 0; - sig->flags.valid = 0; - if (res == 0) { - sig->flags.checked = 1; - sig->flags.valid = 1; - } else if (res == CDK_Bad_Sig) { - sig->flags.checked = 1; - sig->flags.valid = 0; - } -} - - -/* Check the given signature @sig with the public key @pk. - Use the digest handle @digest. */ -cdk_error_t -_cdk_sig_check(cdk_pubkey_t pk, cdk_pkt_signature_t sig, - digest_hd_st * digest, int *r_expired) -{ - cdk_error_t rc; - byte md[MAX_DIGEST_LEN]; - time_t cur_time = (u32) gnutls_time(NULL); - - if (!pk || !sig || !digest) { - gnutls_assert(); - return CDK_Inv_Value; - } - - if (sig->flags.checked) - return sig->flags.valid ? 0 : CDK_Bad_Sig; - if (!KEY_CAN_SIGN(pk->pubkey_algo)) - return CDK_Inv_Algo; - if (pk->timestamp > sig->timestamp || pk->timestamp > cur_time) - return CDK_Time_Conflict; - - if (r_expired && pk->expiredate - && (pk->expiredate + pk->timestamp) > cur_time) - *r_expired = 1; - - _cdk_hash_sig_data(sig, digest); - _gnutls_hash_output(digest, md); - - if (md[0] != sig->digest_start[0] || md[1] != sig->digest_start[1]) { - gnutls_assert(); - return CDK_Chksum_Error; - } - - rc = cdk_pk_verify(pk, sig, md); - cache_sig_result(sig, rc); - return rc; -} - - -/* Check the given key signature. - @knode is the key node and @snode the signature node. */ -cdk_error_t -_cdk_pk_check_sig(cdk_keydb_hd_t keydb, - cdk_kbnode_t knode, cdk_kbnode_t snode, int *is_selfsig, - char **ret_uid) -{ - digest_hd_st md; - int err; - cdk_pubkey_t pk; - cdk_pkt_signature_t sig; - cdk_kbnode_t node; - cdk_error_t rc = 0; - int is_expired; - - if (!knode || !snode) { - gnutls_assert(); - return CDK_Inv_Value; - } - - if (is_selfsig) - *is_selfsig = 0; - if ((knode->pkt->pkttype != CDK_PKT_PUBLIC_KEY && - knode->pkt->pkttype != CDK_PKT_PUBLIC_SUBKEY) || - snode->pkt->pkttype != CDK_PKT_SIGNATURE) { - gnutls_assert(); - return CDK_Inv_Value; - } - pk = knode->pkt->pkt.public_key; - sig = snode->pkt->pkt.signature; - - err = _gnutls_hash_init(&md, mac_to_entry(sig->digest_algo)); - if (err < 0) { - gnutls_assert(); - return map_gnutls_error(err); - } - - is_expired = 0; - if (sig->sig_class == 0x20) { /* key revocation */ - cdk_kbnode_hash(knode, &md, 0, 0, 0); - rc = _cdk_sig_check(pk, sig, &md, &is_expired); - } else if (sig->sig_class == 0x28) { /* subkey revocation */ - node = - cdk_kbnode_find_prev(knode, snode, - CDK_PKT_PUBLIC_SUBKEY); - if (!node) { /* no subkey for subkey revocation packet */ - gnutls_assert(); - rc = CDK_Error_No_Key; - goto fail; - } - cdk_kbnode_hash(knode, &md, 0, 0, 0); - cdk_kbnode_hash(node, &md, 0, 0, 0); - rc = _cdk_sig_check(pk, sig, &md, &is_expired); - } else if (sig->sig_class == 0x18 || sig->sig_class == 0x19) { /* primary/secondary key binding */ - node = - cdk_kbnode_find_prev(knode, snode, - CDK_PKT_PUBLIC_SUBKEY); - if (!node) { /* no subkey for subkey binding packet */ - gnutls_assert(); - rc = CDK_Error_No_Key; - goto fail; - } - cdk_kbnode_hash(knode, &md, 0, 0, 0); - cdk_kbnode_hash(node, &md, 0, 0, 0); - rc = _cdk_sig_check(pk, sig, &md, &is_expired); - } else if (sig->sig_class == 0x1F) { /* direct key signature */ - cdk_kbnode_hash(knode, &md, 0, 0, 0); - rc = _cdk_sig_check(pk, sig, &md, &is_expired); - } else { /* all other classes */ - cdk_pkt_userid_t uid; - node = cdk_kbnode_find_prev(knode, snode, CDK_PKT_USER_ID); - if (!node) { /* no user ID for key signature packet */ - gnutls_assert(); - rc = CDK_Error_No_Key; - goto fail; - } - - uid = node->pkt->pkt.user_id; - if (ret_uid) { - *ret_uid = uid->name; - } - cdk_kbnode_hash(knode, &md, 0, 0, 0); - cdk_kbnode_hash(node, &md, sig->version == 4, 0, 0); - - if (pk->keyid[0] == sig->keyid[0] - && pk->keyid[1] == sig->keyid[1]) { - rc = _cdk_sig_check(pk, sig, &md, &is_expired); - if (is_selfsig) - *is_selfsig = 1; - } else if (keydb != NULL) { - cdk_pubkey_t sig_pk; - rc = cdk_keydb_get_pk(keydb, sig->keyid, &sig_pk); - if (!rc) - rc = _cdk_sig_check(sig_pk, sig, &md, - &is_expired); - cdk_pk_release(sig_pk); - } - } - fail: - _gnutls_hash_deinit(&md, NULL); - return rc; -} - -struct verify_uid { - const char *name; - int nsigs; - struct verify_uid *next; -}; - -static int -uid_list_add_sig(struct verify_uid **list, const char *uid, - unsigned int flag) -{ - if (*list == NULL) { - *list = cdk_calloc(1, sizeof(struct verify_uid)); - if (*list == NULL) - return CDK_Out_Of_Core; - (*list)->name = uid; - - if (flag != 0) - (*list)->nsigs++; - } else { - struct verify_uid *p, *prev_p = NULL; - int found = 0; - - p = *list; - - while (p != NULL) { - if (strcmp(uid, p->name) == 0) { - found = 1; - break; - } - prev_p = p; - p = p->next; - } - - if (found == 0) { /* not found add to the last */ - prev_p->next = - cdk_calloc(1, sizeof(struct verify_uid)); - if (prev_p->next == NULL) - return CDK_Out_Of_Core; - prev_p->next->name = uid; - if (flag != 0) - prev_p->next->nsigs++; - } else { /* found... increase sigs */ - if (flag != 0) - p->nsigs++; - } - } - - return CDK_Success; -} - -static void uid_list_free(struct verify_uid *list) -{ - struct verify_uid *p, *p1; - - p = list; - while (p != NULL) { - p1 = p->next; - cdk_free(p); - p = p1; - } -} - -/* returns non (0) if all UIDs in the list have at least one - * signature. If the list is empty or no signatures are present - * a (0) value is returned. - */ -static int uid_list_all_signed(struct verify_uid *list) -{ - struct verify_uid *p; - - if (list == NULL) - return 0; - - p = list; - while (p != NULL) { - if (p->nsigs == 0) { - return 0; - } - p = p->next; - } - return 1; /* all signed */ -} - -/** - * cdk_pk_check_sigs: - * @key: the public key - * @hd: an optinal key database handle - * @r_status: variable to store the status of the key - * - * Check all signatures. When no key is available for checking, the - * sigstat is marked as 'NOKEY'. The @r_status contains the key flags - * which are or-ed or (0) when there are no flags. - **/ -cdk_error_t -cdk_pk_check_sigs(cdk_kbnode_t key, cdk_keydb_hd_t keydb, int *r_status) -{ - cdk_pkt_signature_t sig; - cdk_kbnode_t node; - cdk_error_t rc; - u32 keyid; - int key_status, is_selfsig = 0; - struct verify_uid *uid_list = NULL; - char *uid_name = NULL; - - if (!key || !r_status) { - gnutls_assert(); - return CDK_Inv_Value; - } - - *r_status = 0; - node = cdk_kbnode_find(key, CDK_PKT_PUBLIC_KEY); - if (!node) { - gnutls_assert(); - return CDK_Error_No_Key; - } - - key_status = 0; - /* Continue with the signature check but adjust the - key status flags accordingly. */ - if (node->pkt->pkt.public_key->is_revoked) - key_status |= CDK_KEY_REVOKED; - if (node->pkt->pkt.public_key->has_expired) - key_status |= CDK_KEY_EXPIRED; - rc = 0; - - keyid = cdk_pk_get_keyid(node->pkt->pkt.public_key, NULL); - for (node = key; node; node = node->next) { - if (node->pkt->pkttype != CDK_PKT_SIGNATURE) - continue; - sig = node->pkt->pkt.signature; - rc = _cdk_pk_check_sig(keydb, key, node, &is_selfsig, - &uid_name); - - if (rc && rc != CDK_Error_No_Key) { - /* It might be possible that a single signature has been - corrupted, thus we do not consider it a problem when - one ore more signatures are bad. But at least the self - signature has to be valid. */ - if (is_selfsig) { - key_status |= CDK_KEY_INVALID; - break; - } - } - - _cdk_log_debug("signature %s: signer %08X keyid %08X\n", - rc == CDK_Bad_Sig ? "BAD" : "good", - (unsigned int) sig->keyid[1], - (unsigned int) keyid); - - if (IS_UID_SIG(sig) && uid_name != NULL) { - /* add every uid in the uid list. Only consider valid: - * - verification was ok - * - not a selfsig - */ - rc = uid_list_add_sig(&uid_list, uid_name, - (rc == CDK_Success - && is_selfsig == - 0) ? 1 : 0); - if (rc != CDK_Success) { - gnutls_assert(); - goto exit; - } - } - - } - - if (uid_list_all_signed(uid_list) == 0) - key_status |= CDK_KEY_NOSIGNER; - *r_status = key_status; - if (rc == CDK_Error_No_Key) - rc = 0; - - exit: - uid_list_free(uid_list); - return rc; -} - - -/** - * cdk_pk_check_self_sig: - * @key: the key node - * @r_status: output the status of the key. - * - * A convenient function to make sure the key is valid. - * Valid means the self signature is ok. - **/ -cdk_error_t cdk_pk_check_self_sig(cdk_kbnode_t key, int *r_status) -{ - cdk_pkt_signature_t sig; - cdk_kbnode_t node; - cdk_error_t rc; - u32 keyid[2], sigid[2]; - int is_selfsig, sig_ok; - cdk_kbnode_t p, ctx = NULL; - cdk_packet_t pkt; - - if (!key || !r_status) - return CDK_Inv_Value; - - cdk_pk_get_keyid(key->pkt->pkt.public_key, keyid); - - while ((p = cdk_kbnode_walk(key, &ctx, 0))) { - pkt = cdk_kbnode_get_packet(p); - if (pkt->pkttype != CDK_PKT_PUBLIC_SUBKEY - && pkt->pkttype != CDK_PKT_PUBLIC_KEY) - continue; - - /* FIXME: we should set expire/revoke here also but callers - expect CDK_KEY_VALID=0 if the key is okay. */ - sig_ok = 0; - for (node = p; node; node = node->next) { - if (node->pkt->pkttype != CDK_PKT_SIGNATURE) - continue; - sig = node->pkt->pkt.signature; - - cdk_sig_get_keyid(sig, sigid); - if (sigid[0] != keyid[0] || sigid[1] != keyid[1]) - continue; - /* FIXME: Now we check all self signatures. */ - rc = _cdk_pk_check_sig(NULL, p, node, &is_selfsig, - NULL); - if (rc) { - *r_status = CDK_KEY_INVALID; - return rc; - } else /* For each valid self sig we increase this counter. */ - sig_ok++; - } - - /* A key without a self signature is not valid. At least one - * signature for the given key has to be found. - */ - if (!sig_ok) { - *r_status = CDK_KEY_INVALID; - return CDK_General_Error; - } - } - - /* No flags indicate a valid key. */ - *r_status = CDK_KEY_VALID; - - return 0; -} diff --git a/lib/opencdk/stream.c b/lib/opencdk/stream.c deleted file mode 100644 index 496115aa3e..0000000000 --- a/lib/opencdk/stream.c +++ /dev/null @@ -1,1471 +0,0 @@ -/* stream.c - The stream implementation - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include -#include -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif - -#include "opencdk.h" -#include "main.h" -#include "filters.h" -#include "stream.h" -#include "types.h" - -/* This is the maximal amount of bytes we map. */ -#define MAX_MAP_SIZE 16777216 - -static cdk_error_t stream_flush(cdk_stream_t s); -static cdk_error_t stream_filter_write(cdk_stream_t s); -static int stream_cache_flush(cdk_stream_t s, FILE * fp); -struct stream_filter_s *filter_add(cdk_stream_t s, filter_fnct_t fnc, - int type); - - -/* FIXME: The read/write/putc/getc function cannot directly - return an error code. It is stored in an error variable - inside the string. Right now there is no code to - return the error code or to reset it. */ - -/** - * cdk_stream_open: - * @file: The file to open - * @ret_s: The new STREAM object - * - * Creates a new stream based on an existing file. The stream is - * opened in read-only mode. - **/ -cdk_error_t cdk_stream_open(const char *file, cdk_stream_t * ret_s) -{ - return _cdk_stream_open_mode(file, "rb", ret_s); -} - - -/* Helper function to allow to open a stream in different modes. */ -cdk_error_t -_cdk_stream_open_mode(const char *file, const char *mode, - cdk_stream_t * ret_s) -{ - cdk_stream_t s; - - if (!file || !ret_s) { - gnutls_assert(); - return CDK_Inv_Value; - } -#ifdef DEBUG_STREAM - _gnutls_read_log("open stream `%s'\n", file); -#endif - *ret_s = NULL; - s = cdk_calloc(1, sizeof *s); - if (!s) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - s->fname = cdk_strdup(file); - if (!s->fname) { - cdk_free(s); - gnutls_assert(); - return CDK_Out_Of_Core; - } - s->fp = fopen(file, mode); - if (!s->fp) { - cdk_free(s->fname); - cdk_free(s); - gnutls_assert(); - return CDK_File_Error; - } -#ifdef DEBUG_STREAM - _gnutls_read_log("open stream fd=%d\n", fileno(s->fp)); -#endif - s->flags.write = 0; - *ret_s = s; - return 0; -} - - -/** - * cdk_stream_new_from_cbs: - * @cbs: the callback context with all user callback functions - * @opa: uint8_t handle which is passed to all callbacks. - * @ret_s: the allocated stream - * - * This function creates a stream which uses user callback - * for the core operations (open, close, read, write, seek). - */ -cdk_error_t -cdk_stream_new_from_cbs(cdk_stream_cbs_t cbs, void *opa, - cdk_stream_t * ret_s) -{ - cdk_stream_t s; - - if (!cbs || !opa || !ret_s) { - gnutls_assert(); - return CDK_Inv_Value; - } - - *ret_s = NULL; - s = cdk_calloc(1, sizeof *s); - if (!s) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - - s->cbs.read = cbs->read; - s->cbs.write = cbs->write; - s->cbs.seek = cbs->seek; - s->cbs.release = cbs->release; - s->cbs.open = cbs->open; - s->cbs_hd = opa; - *ret_s = s; - - /* If there is a user callback for open, we need to call it - here because read/write expects an open stream. */ - if (s->cbs.open) - return s->cbs.open(s->cbs_hd); - return 0; -} - - -/** - * cdk_stream_new: - * @file: The name of the new file - * @ret_s: The new STREAM object - * - * Create a new stream into the given file. - **/ -cdk_error_t cdk_stream_new(const char *file, cdk_stream_t * ret_s) -{ - cdk_stream_t s; - - if (!ret_s) { - gnutls_assert(); - return CDK_Inv_Value; - } -#ifdef DEBUG_STREAM - _gnutls_read_log("new stream `%s'\n", file ? file : "[temp]"); -#endif - *ret_s = NULL; - s = cdk_calloc(1, sizeof *s); - if (!s) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - s->flags.write = 1; - if (!file) - s->flags.temp = 1; - else { - s->fname = cdk_strdup(file); - if (!s->fname) { - cdk_free(s); - gnutls_assert(); - return CDK_Out_Of_Core; - } - } - s->fp = _cdk_tmpfile(); - if (!s->fp) { - cdk_free(s->fname); - cdk_free(s); - gnutls_assert(); - return CDK_File_Error; - } -#ifdef DEBUG_STREAM - _gnutls_read_log("new stream fd=%d\n", fileno(s->fp)); -#endif - *ret_s = s; - return 0; -} - -/** - * cdk_stream_create: - * @file: the filename - * @ret_s: the object - * - * Creates a new stream. - * The difference to cdk_stream_new is, that no filtering can be used with - * this kind of stream and everything is written directly to the stream. - **/ -cdk_error_t cdk_stream_create(const char *file, cdk_stream_t * ret_s) -{ - cdk_stream_t s; - - if (!file || !ret_s) { - gnutls_assert(); - return CDK_Inv_Value; - } -#ifdef DEBUG_STREAM - _gnutls_read_log("create stream `%s'\n", file); -#endif - *ret_s = NULL; - s = cdk_calloc(1, sizeof *s); - if (!s) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - s->flags.write = 1; - s->flags.filtrated = 1; - s->fname = cdk_strdup(file); - if (!s->fname) { - cdk_free(s); - gnutls_assert(); - return CDK_Out_Of_Core; - } - s->fp = fopen(file, "w+b"); - if (!s->fp) { - cdk_free(s->fname); - cdk_free(s); - gnutls_assert(); - return CDK_File_Error; - } -#ifdef DEBUG_STREAM - _gnutls_read_log("stream create fd=%d\n", fileno(s->fp)); -#endif - *ret_s = s; - return 0; -} - - -/** - * cdk_stream_tmp_new: - * @r_out: the new temp stream. - * - * Allocates a new tempory stream which is not associated with a file. - */ -cdk_error_t cdk_stream_tmp_new(cdk_stream_t * r_out) -{ - return cdk_stream_new(NULL, r_out); -} - - - -/** - * cdk_stream_tmp_from_mem: - * @buf: the buffer which shall be written to the temp stream. - * @buflen: how large the buffer is - * @r_out: the new stream with the given contents. - * - * Creates a new tempory stream with the given contests. - */ -cdk_error_t -cdk_stream_tmp_from_mem(const void *buf, size_t buflen, - cdk_stream_t * r_out) -{ - cdk_stream_t s; - cdk_error_t rc; - int nwritten; - - *r_out = NULL; - rc = cdk_stream_tmp_new(&s); - if (rc) { - gnutls_assert(); - return rc; - } - - nwritten = cdk_stream_write(s, buf, buflen); - if (nwritten == EOF) { - cdk_stream_close(s); - gnutls_assert(); - return s->error; - } - cdk_stream_seek(s, 0); - *r_out = s; - return 0; -} - - -cdk_error_t -_cdk_stream_fpopen(FILE * fp, unsigned write_mode, cdk_stream_t * ret_out) -{ - cdk_stream_t s; - - *ret_out = NULL; - s = cdk_calloc(1, sizeof *s); - if (!s) { - gnutls_assert(); - return CDK_Out_Of_Core; - } -#ifdef DEBUG_STREAM - _gnutls_read_log("stream ref fd=%d\n", fileno(fp)); -#endif - s->fp = fp; - s->fp_ref = 1; - s->flags.filtrated = 1; - s->flags.write = write_mode; - - *ret_out = s; - return 0; -} - - -cdk_error_t _cdk_stream_append(const char *file, cdk_stream_t * ret_s) -{ - cdk_stream_t s; - cdk_error_t rc; - - if (!ret_s) { - gnutls_assert(); - return CDK_Inv_Value; - } - *ret_s = NULL; - - rc = _cdk_stream_open_mode(file, "a+b", &s); - if (rc) { - gnutls_assert(); - return rc; - } - - /* In the append mode, we need to write to the flag. */ - s->flags.write = 1; - *ret_s = s; - return 0; -} - -/** - * cdk_stream_is_compressed: - * @s: the stream - * - * Check whether stream is compressed. - * - * Returns: 0 if the stream is uncompressed, otherwise the compression - * algorithm. - */ -int cdk_stream_is_compressed(cdk_stream_t s) -{ - if (!s) - return 0; - return s->flags.compressed; -} - -void _cdk_stream_set_compress_algo(cdk_stream_t s, int algo) -{ - if (!s) - return; - s->flags.compressed = algo; -} - - -cdk_error_t cdk_stream_flush(cdk_stream_t s) -{ - cdk_error_t rc; - - if (!s) { - gnutls_assert(); - return CDK_Inv_Value; - } - - /* The user callback does not support flush */ - if (s->cbs_hd) - return 0; - - /* For read-only streams, no flush is needed. */ - if (!s->flags.write) - return 0; - - if (!s->flags.filtrated) { - if (!cdk_stream_get_length(s)) - return 0; - rc = cdk_stream_seek(s, 0); - if (!rc) - rc = stream_flush(s); - if (!rc) - rc = stream_filter_write(s); - s->flags.filtrated = 1; - if (rc) { - s->error = rc; - gnutls_assert(); - return rc; - } - } - return 0; -} - - -void cdk_stream_tmp_set_mode(cdk_stream_t s, int val) -{ - if (s && s->flags.temp) - s->fmode = val; -} - - -/** - * cdk_stream_close: - * @s: The STREAM object. - * - * Close a stream and flush all buffers. This function work different - * for read or write streams. When the stream is for reading, the - * filtering is already done and we can simply close the file and all - * buffers. But for the case it's a write stream, we need to apply - * all registered filters now. The file is closed in the filter - * function and not here. - **/ -cdk_error_t cdk_stream_close(cdk_stream_t s) -{ - struct stream_filter_s *f, *f2; - cdk_error_t rc; - - if (!s) { - gnutls_assert(); - return CDK_Inv_Value; - } -#ifdef DEBUG_STREAM - _gnutls_read_log("close stream ref=%d `%s'\n", - s->fp_ref, s->fname ? s->fname : "[temp]"); -#endif - - /* In the user callback mode, we call the release cb if possible - and just free the stream. */ - if (s->cbs_hd) { - if (s->cbs.release) - rc = s->cbs.release(s->cbs_hd); - else - rc = 0; - cdk_free(s); - gnutls_assert(); - return rc; - } - - - rc = 0; - if (!s->flags.filtrated && !s->error) - rc = cdk_stream_flush(s); - if (!s->fp_ref && (s->fname || s->flags.temp)) { - int err; - -#ifdef DEBUG_STREAM - _gnutls_read_log("close stream fd=%d\n", fileno(s->fp)); -#endif - err = fclose(s->fp); - s->fp = NULL; - if (err) - rc = CDK_File_Error; - } - - /* Iterate over the filter list and use the cleanup flag to - free the allocated internal structures. */ - f = s->filters; - while (f) { - f2 = f->next; - if (f->fnct) - f->fnct(f->uint8_t, STREAMCTL_FREE, NULL, NULL); - cdk_free(f); - f = f2; - } - - if (s->fname) { - cdk_free(s->fname); - s->fname = NULL; - } - - cdk_free(s->cache.buf); - s->cache.alloced = 0; - - cdk_free(s); - - if (rc) - gnutls_assert(); - - return rc; -} - - -/** - * cdk_stream_eof: - * @s: The STREAM object. - * - * Return if the associated file handle was set to EOF. This - * function will only work with read streams. - **/ -int cdk_stream_eof(cdk_stream_t s) -{ - return s ? s->flags.eof : -1; -} - - -const char *_cdk_stream_get_fname(cdk_stream_t s) -{ - if (!s) - return NULL; - if (s->flags.temp) - return NULL; - return s->fname ? s->fname : NULL; -} - - -/* Return the underlying FP of the stream. - WARNING: This handle should not be closed. */ -FILE *_cdk_stream_get_fp(cdk_stream_t s) -{ - return s ? s->fp : NULL; -} - - -int _cdk_stream_get_errno(cdk_stream_t s) -{ - return s ? s->error : CDK_Inv_Value; -} - - -/** - * cdk_stream_get_length: - * @s: The STREAM object. - * - * Return the length of the associated file handle. This function - * should work for both read and write streams. For write streams an - * additional flush is used to write possible pending data. - **/ -off_t cdk_stream_get_length(cdk_stream_t s) -{ - struct stat statbuf; - cdk_error_t rc; - - if (!s) { - gnutls_assert(); - return (off_t) 0; - } - - /* The user callback does not support stat. */ - if (s->cbs_hd) - return 0; - - rc = stream_flush(s); - if (rc) { - s->error = rc; - gnutls_assert(); - return (off_t) 0; - } - - if (fstat(fileno(s->fp), &statbuf)) { - s->error = CDK_File_Error; - gnutls_assert(); - return (off_t) 0; - } - - return statbuf.st_size; -} - - -static struct stream_filter_s *filter_add2(cdk_stream_t s) -{ - struct stream_filter_s *f; - - assert(s); - - f = cdk_calloc(1, sizeof *f); - if (!f) - return NULL; - f->next = s->filters; - s->filters = f; - return f; -} - - -static struct stream_filter_s *filter_search(cdk_stream_t s, - filter_fnct_t fnc) -{ - struct stream_filter_s *f; - - assert(s); - - for (f = s->filters; f; f = f->next) { - if (f->fnct == fnc) - return f; - } - - return NULL; -} - -static inline void set_uint8_t(struct stream_filter_s *f) -{ - switch (f->type) { - case fARMOR: - f->uint8_t = &f->u.afx; - break; - case fCIPHER: - f->uint8_t = &f->u.cfx; - break; - case fLITERAL: - f->uint8_t = &f->u.pfx; - break; - case fCOMPRESS: - f->uint8_t = &f->u.zfx; - break; - case fHASH: - f->uint8_t = &f->u.mfx; - break; - case fTEXT: - f->uint8_t = &f->u.tfx; - break; - default: - f->uint8_t = NULL; - } - -} - -struct stream_filter_s *filter_add(cdk_stream_t s, filter_fnct_t fnc, - int type) -{ - struct stream_filter_s *f; - - assert(s); - - s->flags.filtrated = 0; - f = filter_search(s, fnc); - if (f) - return f; - f = filter_add2(s); - if (!f) - return NULL; - f->fnct = fnc; - f->flags.enabled = 1; - f->tmp = NULL; - f->type = type; - - set_uint8_t(f); - - return f; -} - -static int stream_get_mode(cdk_stream_t s) -{ - assert(s); - - if (s->flags.temp) - return s->fmode; - return s->flags.write; -} - - -static filter_fnct_t stream_id_to_filter(int type) -{ - switch (type) { - case fARMOR: - return _cdk_filter_armor; - case fLITERAL: - return _cdk_filter_literal; - case fTEXT: - return _cdk_filter_text; -/* case fCIPHER : return _cdk_filter_cipher; */ -/* case fCOMPRESS: return _cdk_filter_compress; */ - default: - return NULL; - } -} - - -/** - * cdk_stream_filter_disable: - * @s: The STREAM object - * @type: The numberic filter ID. - * - * Disables the filter with the type 'type'. - **/ -cdk_error_t cdk_stream_filter_disable(cdk_stream_t s, int type) -{ - struct stream_filter_s *f; - filter_fnct_t fnc; - - if (!s) { - gnutls_assert(); - return CDK_Inv_Value; - } - - fnc = stream_id_to_filter(type); - if (!fnc) { - gnutls_assert(); - return CDK_Inv_Value; - } - f = filter_search(s, fnc); - if (f) - f->flags.enabled = 0; - return 0; -} - - -/* WARNING: tmp should not be closed by the caller. */ -static cdk_error_t stream_fp_replace(cdk_stream_t s, FILE ** tmp) -{ - int rc; - - assert(s); - -#ifdef DEBUG_STREAM - _gnutls_read_log("replace stream fd=%d with fd=%d\n", - fileno(s->fp), fileno(*tmp)); -#endif - rc = fclose(s->fp); - if (rc) { - s->fp = NULL; - gnutls_assert(); - return CDK_File_Error; - } - s->fp = *tmp; - *tmp = NULL; - return 0; -} - - -/* This function is exactly like filter_read, except the fact that we can't - use tmpfile () all the time. That's why we open the real file when there - is no last filter. */ -static cdk_error_t stream_filter_write(cdk_stream_t s) -{ - struct stream_filter_s *f; - cdk_error_t rc = 0; - - assert(s); - - if (s->flags.filtrated) { - gnutls_assert(); - return CDK_Inv_Value; - } - - for (f = s->filters; f; f = f->next) { - if (!f->flags.enabled) - continue; - /* if there is no next filter, create the final output file */ -#ifdef DEBUG_STREAM - _gnutls_read_log - ("filter [write]: last filter=%d fname=%s\n", - f->next ? 1 : 0, s->fname); -#endif - if (!f->next && s->fname) - f->tmp = fopen(s->fname, "w+b"); - else - f->tmp = _cdk_tmpfile(); - if (!f->tmp) { - rc = CDK_File_Error; - break; - } - /* If there is no next filter, flush the cache. We also do this - when the next filter is the armor filter because this filter - is special and before it starts, all data should be written. */ - if ((!f->next || f->next->type == fARMOR) && s->cache.size) { - rc = stream_cache_flush(s, f->tmp); - if (rc) - break; - } - rc = f->fnct(f->uint8_t, f->ctl, s->fp, f->tmp); -#ifdef DEBUG_STREAM - _gnutls_read_log("filter [write]: type=%d rc=%d\n", - f->type, rc); -#endif - if (!rc) - rc = stream_fp_replace(s, &f->tmp); - if (!rc) - rc = cdk_stream_seek(s, 0); - if (rc) { -#ifdef DEBUG_STREAM - _gnutls_read_log("filter [close]: fd=%d\n", - fileno(f->tmp)); -#endif - fclose(f->tmp); - f->tmp = NULL; - break; - } - } - return rc; -} - - -/* Here all data from the file handle is passed through all filters. - The scheme works like this: - Create a tempfile and use it for the output of the filter. Then the - original file handle will be closed and replace with the temp handle. - The file pointer will be set to the begin and the game starts again. */ -static cdk_error_t stream_filter_read(cdk_stream_t s) -{ - struct stream_filter_s *f; - cdk_error_t rc = 0; - - assert(s); - - if (s->flags.filtrated) - return 0; - - for (f = s->filters; f; f = f->next) { - if (!f->flags.enabled) - continue; - if (f->flags.error) { -#ifdef DEBUG_STREAM - _gnutls_read_log - ("filter %s [read]: has the error flag; skipped\n", - s->fname ? s->fname : "[temp]"); -#endif - continue; - } - - f->tmp = _cdk_tmpfile(); - if (!f->tmp) { - rc = CDK_File_Error; - break; - } - rc = f->fnct(f->uint8_t, f->ctl, s->fp, f->tmp); -#ifdef DEBUG_STREAM - _gnutls_read_log("filter %s [read]: type=%d rc=%d\n", - s->fname ? s->fname : "[temp]", f->type, - rc); -#endif - if (rc) { - f->flags.error = 1; - break; - } - - f->flags.error = 0; - /* If the filter is read-only, do not replace the FP because - the contents were not altered in any way. */ - if (!f->flags.rdonly) { - rc = stream_fp_replace(s, &f->tmp); - if (rc) - break; - } else { - fclose(f->tmp); - f->tmp = NULL; - } - rc = cdk_stream_seek(s, 0); - if (rc) - break; - /* Disable the filter after it was successfully used. The idea - is the following: let's say the armor filter was pushed and - later more filters were added. The second time the filter code - will be executed, only the new filter should be started but - not the old because we already used it. */ - f->flags.enabled = 0; - } - - return rc; -} - - -void *_cdk_stream_get_uint8_t(cdk_stream_t s, int fid) -{ - struct stream_filter_s *f; - - if (!s) - return NULL; - - for (f = s->filters; f; f = f->next) { - if ((int) f->type == fid) - return f->uint8_t; - } - return NULL; -} - - -/** - * cdk_stream_read: - * @s: The STREAM object. - * @buf: The buffer to insert the readed bytes. - * @count: Request so much bytes. - * - * Tries to read count bytes from the STREAM object. - * When this function is called the first time, it can take a while - * because all filters need to be processed. Please remember that you - * need to add the filters in reserved order. - **/ -int cdk_stream_read(cdk_stream_t s, void *buf, size_t buflen) -{ - int nread; - int rc; - - if (!s) { - gnutls_assert(); - return EOF; - } - - if (s->cbs_hd) { - if (s->cbs.read) - return s->cbs.read(s->cbs_hd, buf, buflen); - return 0; - } - - if (s->flags.write && !s->flags.temp) { - s->error = CDK_Inv_Mode; - gnutls_assert(); - return EOF; /* This is a write stream */ - } - - if (!s->flags.no_filter && !s->cache.on && !s->flags.filtrated) { - rc = stream_filter_read(s); - if (rc) { - s->error = rc; - if (s->fp && feof(s->fp)) - s->flags.eof = 1; - gnutls_assert(); - return EOF; - } - s->flags.filtrated = 1; - } - - if (!buf || !buflen) - return 0; - - nread = fread(buf, 1, buflen, s->fp); - if (!nread) - nread = EOF; - - if (feof(s->fp)) { - s->error = 0; - s->flags.eof = 1; - } - return nread; -} - - -int cdk_stream_getc(cdk_stream_t s) -{ - unsigned char buf[2] = {0}; - int nread; - - if (!s) { - gnutls_assert(); - return EOF; - } - nread = cdk_stream_read(s, buf, 1); - if (nread == EOF) { - s->error = CDK_File_Error; - gnutls_assert(); - return EOF; - } - return buf[0]; -} - - -/** - * cdk_stream_write: - * @s: The STREAM object - * @buf: The buffer with the values to write. - * @count: The size of the buffer. - * - * Tries to write count bytes into the stream. - * In this function we simply write the bytes to the stream. We can't - * use the filters here because it would mean they have to support - * partial flushing. - **/ -int cdk_stream_write(cdk_stream_t s, const void *buf, size_t count) -{ - int nwritten; - - if (!s) { - gnutls_assert(); - return EOF; - } - - if (s->cbs_hd) { - if (s->cbs.write) - return s->cbs.write(s->cbs_hd, buf, count); - return 0; - } - - if (!s->flags.write) { - s->error = CDK_Inv_Mode; /* this is a read stream */ - gnutls_assert(); - return EOF; - } - - if (!buf || !count) - return stream_flush(s); - - if (s->cache.on) { -#ifdef DEBUG_STREAM - _gnutls_read_log("stream[ref=%u]: written %d bytes\n", - s->fp_ref, (int) count); -#endif - - /* We need to resize the buffer if the additional data wouldn't - fit into it. We allocate more memory to avoid to resize it the - next time the function is used. */ - if (s->cache.size + count > s->cache.alloced) { - byte *old = s->cache.buf; - - s->cache.buf = - cdk_calloc(1, - s->cache.alloced + count + - STREAM_BUFSIZE); - s->cache.alloced += (count + STREAM_BUFSIZE); - memcpy(s->cache.buf, old, s->cache.size); - cdk_free(old); -#ifdef DEBUG_STREAM - _gnutls_read_log - ("stream: enlarge cache to %d octets\n", - (int) s->cache.alloced); -#endif - } - - memcpy(s->cache.buf + s->cache.size, buf, count); - s->cache.size += count; - return count; - } -#ifdef DEBUG_STREAM - _gnutls_read_log("stream[fd=%u]: written %d bytes\n", - fileno(s->fp), (int) count); -#endif - - nwritten = fwrite(buf, 1, count, s->fp); - if (!nwritten) - nwritten = EOF; - return nwritten; -} - - -int cdk_stream_putc(cdk_stream_t s, int c) -{ - byte buf[2]; - int nwritten; - - if (!s) { - gnutls_assert(); - return EOF; - } - buf[0] = c; - nwritten = cdk_stream_write(s, buf, 1); - if (nwritten == EOF) - return EOF; - return 0; -} - - -off_t cdk_stream_tell(cdk_stream_t s) -{ - return s ? ftell(s->fp) : (off_t) 0; -} - - -cdk_error_t cdk_stream_seek(cdk_stream_t s, off_t offset) -{ - off_t len; - - if (!s) { - gnutls_assert(); - return CDK_Inv_Value; - } - - if (s->cbs_hd) { - if (s->cbs.seek) - return s->cbs.seek(s->cbs_hd, offset); - return 0; - } - - /* Set or reset the EOF flag. */ - len = cdk_stream_get_length(s); - if (len == offset) - s->flags.eof = 1; - else - s->flags.eof = 0; - - if (fseek(s->fp, offset, SEEK_SET)) { - gnutls_assert(); - return CDK_File_Error; - } - return 0; -} - - -static cdk_error_t stream_flush(cdk_stream_t s) -{ - assert(s); - - /* For some constellations it cannot be assured that the - return value is defined, thus we ignore it for now. */ - (void) fflush(s->fp); - return 0; -} - - -/** - * cdk_stream_set_armor_flag: - * @s: the stream object - * @type: the type of armor to use - * - * If the file is in read-mode, no armor type needs to be - * defined (armor_type=0) because the armor filter will be - * used for decoding existing armor data. - * For the write mode, @armor_type can be set to any valid - * armor type (message, key, sig). - **/ -cdk_error_t cdk_stream_set_armor_flag(cdk_stream_t s, int armor_type) -{ - struct stream_filter_s *f; - - if (!s) { - gnutls_assert(); - return CDK_Inv_Value; - } - f = filter_add(s, _cdk_filter_armor, fARMOR); - if (!f) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - f->u.afx.idx = f->u.afx.idx2 = armor_type; - f->ctl = stream_get_mode(s); - return 0; -} - - -/** - * cdk_stream_set_literal_flag: - * @s: the stream object - * @mode: the mode to use (binary, text, unicode) - * @fname: the file name to store in the packet. - * - * In read mode it kicks off the literal decoding routine to - * unwrap the data from the packet. The @mode parameter is ignored. - * In write mode the function can be used to wrap the stream data - * into a literal packet with the given mode and file name. - **/ -cdk_error_t -cdk_stream_set_literal_flag(cdk_stream_t s, cdk_lit_format_t mode, - const char *fname) -{ - struct stream_filter_s *f; - const char *orig_fname; - -#ifdef DEBUG_STREAM - _gnutls_read_log("stream: enable literal mode.\n"); -#endif - - if (!s) { - gnutls_assert(); - return CDK_Inv_Value; - } - - orig_fname = _cdk_stream_get_fname(s); - f = filter_add(s, _cdk_filter_literal, fLITERAL); - if (!f) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - f->u.pfx.mode = mode; - f->u.pfx.filename = fname ? cdk_strdup(fname) : NULL; - f->u.pfx.orig_filename = - orig_fname ? cdk_strdup(orig_fname) : NULL; - f->ctl = stream_get_mode(s); - if (s->blkmode > 0) { - f->u.pfx.blkmode.on = 1; - f->u.pfx.blkmode.size = s->blkmode; - } - return 0; -} - - -/** - * cdk_stream_set_compress_flag: - * @s: the stream object - * @algo: the compression algo - * @level: level of compression (0..9) - * - * In read mode it kicks off the decompression filter to retrieve - * the uncompressed data. - * In write mode the stream data will be compressed with the - * given algorithm at the given level. - **/ -cdk_error_t -cdk_stream_set_compress_flag(cdk_stream_t s, int algo, int level) -{ - - gnutls_assert(); - return CDK_Not_Implemented; -} - - -/** - * cdk_stream_set_text_flag: - * @s: the stream object - * @lf: line ending - * - * Pushes the text filter to store the stream data in cannoncial format. - **/ -cdk_error_t cdk_stream_set_text_flag(cdk_stream_t s, const char *lf) -{ - struct stream_filter_s *f; - - if (!s) { - gnutls_assert(); - return CDK_Inv_Value; - } - f = filter_add(s, _cdk_filter_text, fTEXT); - if (!f) { - gnutls_assert(); - return CDK_Out_Of_Core; - } - f->ctl = stream_get_mode(s); - f->u.tfx.lf = lf; - return 0; -} - -/** - * cdk_stream_enable_cache: - * @s: the stream object - * @val: 1=on, 0=off - * - * Enables or disable the cache section of a stream object. - **/ -cdk_error_t cdk_stream_enable_cache(cdk_stream_t s, int val) -{ - if (!s) { - gnutls_assert(); - return CDK_Inv_Value; - } - if (!s->flags.write) { - gnutls_assert(); - return CDK_Inv_Mode; - } - s->cache.on = val; - if (!s->cache.buf) { - s->cache.buf = cdk_calloc(1, STREAM_BUFSIZE); - s->cache.alloced = STREAM_BUFSIZE; -#ifdef DEBUG_STREAM - _gnutls_read_log("stream: allocate cache of %d octets\n", - STREAM_BUFSIZE); -#endif - } - return 0; -} - - -static int stream_cache_flush(cdk_stream_t s, FILE * fp) -{ - int nwritten; - - assert(s); - - /* FIXME: We should find a way to use cdk_stream_write here. */ - if (s->cache.size > 0) { - nwritten = fwrite(s->cache.buf, 1, s->cache.size, fp); - if (!nwritten) { - gnutls_assert(); - return CDK_File_Error; - } - s->cache.size = 0; - s->cache.on = 0; - memset(s->cache.buf, 0, s->cache.alloced); - } - return 0; -} - - -/** - * cdk_stream_kick_off: - * @inp: the input stream - * @out: the output stream. - * - * Passes the entire data from @inp into the output stream @out - * with all the activated filters. - */ -cdk_error_t cdk_stream_kick_off(cdk_stream_t inp, cdk_stream_t out) -{ - byte buf[BUFSIZE]; - int nread, nwritten; - cdk_error_t rc; - - if (!inp || !out) { - gnutls_assert(); - return CDK_Inv_Value; - } - rc = CDK_Success; - while (!cdk_stream_eof(inp)) { - nread = cdk_stream_read(inp, buf, DIM(buf)); - if (!nread || nread == EOF) - break; - nwritten = cdk_stream_write(out, buf, nread); - if (!nwritten || nwritten == EOF) { /* In case of errors, we leave the loop. */ - rc = inp->error; - break; - } - } - - memset(buf, 0, sizeof(buf)); - return rc; -} - - -/** - * cdk_stream_mmap_part: - * @s: the stream - * @off: the offset where to start - * @len: how much bytes shall be mapped - * @ret_buf: the buffer to store the content - * @ret_buflen: length of the buffer - * - * Maps the data of the given stream into a memory section. @ret_count - * contains the length of the buffer. - **/ -cdk_error_t -cdk_stream_mmap_part(cdk_stream_t s, off_t off, size_t len, - byte ** ret_buf, size_t * ret_buflen) -{ - cdk_error_t rc; - off_t oldpos; - unsigned int n; - - if (!ret_buf || !ret_buflen) { - gnutls_assert(); - return CDK_Inv_Value; - } - *ret_buf = NULL; - *ret_buflen = 0; - - if (!s) { - gnutls_assert(); - return CDK_Inv_Value; - } - - /* Memory mapping is not supported on custom I/O objects. */ - if (s->cbs_hd) { -#ifdef DEBUG_STREAM - _gnutls_read_log - ("cdk_stream_mmap_part: not supported on callbacks\n"); -#endif - gnutls_assert(); - return CDK_Inv_Mode; - } - - oldpos = cdk_stream_tell(s); - rc = cdk_stream_flush(s); - if (rc) { - gnutls_assert(); - return rc; - } - rc = cdk_stream_seek(s, off); - if (rc) { - gnutls_assert(); - return rc; - } - if (!len) - len = cdk_stream_get_length(s); - if (!len) { - _gnutls_read_log - ("cdk_stream_mmap_part: invalid file size %lu\n", - (unsigned long) len); - gnutls_assert(); - return s->error; - } - if (len > MAX_MAP_SIZE) { - gnutls_assert(); - return CDK_Too_Short; - } - - *ret_buf = cdk_calloc(1, len + 1); - *ret_buflen = len; - n = cdk_stream_read(s, *ret_buf, len); - if (n != len) - *ret_buflen = n; - rc = cdk_stream_seek(s, oldpos); - if (rc) - gnutls_assert(); - return rc; -} - - -cdk_error_t cdk_stream_mmap(cdk_stream_t inp, byte ** buf, size_t * buflen) -{ - off_t len; - - /* We need to make sure all data is flushed before we retrieve the size. */ - cdk_stream_flush(inp); - len = cdk_stream_get_length(inp); - return cdk_stream_mmap_part(inp, 0, len, buf, buflen); -} - - -/** - * cdk_stream_peek: - * @inp: the input stream handle - * @s: buffer - * @count: number of bytes to peek - * - * The function acts like cdk_stream_read with the difference that - * the file pointer is moved to the old position after the bytes were read. - **/ -int cdk_stream_peek(cdk_stream_t inp, byte * buf, size_t buflen) -{ - off_t off; - int nbytes; - - if (!inp || !buf) - return 0; - if (inp->cbs_hd) - return 0; - - off = cdk_stream_tell(inp); - nbytes = cdk_stream_read(inp, buf, buflen); - if (nbytes == -1) - return 0; - if (cdk_stream_seek(inp, off)) - return 0; - return nbytes; -} - - -/* Try to read a line from the given stream. */ -int _cdk_stream_gets(cdk_stream_t s, char *buf, size_t count) -{ - int c, i; - - assert(s); - - i = 0; - while (!cdk_stream_eof(s) && count > 0) { - c = cdk_stream_getc(s); - if (c == EOF || c == '\r' || c == '\n') { - buf[i++] = '\0'; - break; - } - buf[i++] = c; - count--; - } - return i; -} - - -/* Try to write string into the stream @s. */ -int _cdk_stream_puts(cdk_stream_t s, const char *buf) -{ - return cdk_stream_write(s, buf, strlen(buf)); -} - - -/* Activate the block mode for the given stream. */ -cdk_error_t _cdk_stream_set_blockmode(cdk_stream_t s, size_t nbytes) -{ - assert(s); - -#ifdef DEBUG_STREAM - _gnutls_read_log("stream: activate block mode with blocksize %d\n", - (int) nbytes); -#endif - s->blkmode = nbytes; - return 0; -} - - -/* Return the block mode state of the given stream. */ -int _cdk_stream_get_blockmode(cdk_stream_t s) -{ - return s ? s->blkmode : 0; -} diff --git a/lib/opencdk/stream.h b/lib/opencdk/stream.h deleted file mode 100644 index ec912c505d..0000000000 --- a/lib/opencdk/stream.h +++ /dev/null @@ -1,95 +0,0 @@ -/* stream.h - internal definiton for the STREAM object - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifndef CDK_STREAM_H -#define CDK_STREAM_H - -/* The default buffer size for the stream. */ -#define STREAM_BUFSIZE 8192 - -enum { - fDUMMY = 0, - fARMOR = 1, - fCIPHER = 2, - fLITERAL = 3, - fCOMPRESS = 4, - fHASH = 5, - fTEXT = 6 -}; - -/* Type definition for the filter function. */ -typedef int(*filter_fnct_t) (void *uint8_t, int ctl, FILE * in, - FILE * out); - -/* The stream filter context structure. */ -struct stream_filter_s { - struct stream_filter_s *next; - filter_fnct_t fnct; - void *uint8_t; - FILE *tmp; - union { - armor_filter_t afx; - cipher_filter_t cfx; - literal_filter_t pfx; - compress_filter_t zfx; - text_filter_t tfx; - md_filter_t mfx; - } u; - struct { - unsigned enabled:1; - unsigned rdonly:1; - unsigned error:1; - } flags; - unsigned type; - unsigned ctl; -}; - - -/* The stream context structure. */ -struct cdk_stream_s { - struct stream_filter_s *filters; - int fmode; - int error; - size_t blkmode; - struct { - unsigned filtrated:1; - unsigned eof:1; - unsigned write:1; - unsigned temp:1; - unsigned reset:1; - unsigned no_filter:1; - unsigned compressed:3; - } flags; - struct { - unsigned char *buf; - unsigned on:1; - size_t size; - size_t alloced; - } cache; - char *fname; - FILE *fp; - unsigned int fp_ref:1; - struct cdk_stream_cbs_s cbs; - void *cbs_hd; -}; - -#endif /* CDK_STREAM_H */ diff --git a/lib/opencdk/types.h b/lib/opencdk/types.h deleted file mode 100644 index 8fae6ce629..0000000000 --- a/lib/opencdk/types.h +++ /dev/null @@ -1,49 +0,0 @@ -/* types.h - Some type definitions - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifndef CDK_TYPES_H -#define CDK_TYPES_H - -#ifndef HAVE_BYTE_TYPEDEF -#undef byte -typedef unsigned char byte; -#define HAVE_BYTE_TYPEDEF -#endif - -#ifndef HAVE_U16_TYPEDEF -#undef u16 -typedef unsigned short u16; -#define HAVE_U16_TYPEDEF -#endif - -#ifndef HAVE_U32_TYPEDEF -#undef u32 -typedef unsigned int u32; -#define HAVE_U32_TYPEDEF -#endif - -#ifndef DIM -#define DIM(v) (sizeof (v)/sizeof ((v)[0])) -#define DIMof(type, member) DIM(((type *)0)->member) -#endif - -#endif /* CDK_TYPES_H */ diff --git a/lib/opencdk/write-packet.c b/lib/opencdk/write-packet.c deleted file mode 100644 index b852e0e8d1..0000000000 --- a/lib/opencdk/write-packet.c +++ /dev/null @@ -1,898 +0,0 @@ -/* write-packet.c - Write OpenPGP packets - * Copyright (C) 2001-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz - * - * This file is part of OpenCDK. - * - * The OpenCDK library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include -#include -#include - -#include "opencdk.h" -#include "main.h" - - -static int stream_write(cdk_stream_t s, const void *buf, size_t buflen) -{ - int nwritten; - - nwritten = cdk_stream_write(s, buf, buflen); - if (nwritten == EOF) - return _cdk_stream_get_errno(s); - return 0; -} - - -static int -stream_read(cdk_stream_t s, void *buf, size_t buflen, size_t * r_nread) -{ - int nread; - - assert(r_nread); - - nread = cdk_stream_read(s, buf, buflen); - if (nread == EOF) - return _cdk_stream_get_errno(s); - *r_nread = nread; - return 0; -} - - -static int stream_putc(cdk_stream_t s, int c) -{ - int nwritten = cdk_stream_putc(s, c); - if (nwritten == EOF) - return _cdk_stream_get_errno(s); - return 0; -} - - -static int write_32(cdk_stream_t out, u32 u) -{ - byte buf[4]; - - buf[0] = u >> 24; - buf[1] = u >> 16; - buf[2] = u >> 8; - buf[3] = u; - return stream_write(out, buf, 4); -} - - -static int write_16(cdk_stream_t out, u16 u) -{ - byte buf[2]; - - buf[0] = u >> 8; - buf[1] = u; - return stream_write(out, buf, 2); -} - - -static size_t calc_mpisize(bigint_t mpi[MAX_CDK_PK_PARTS], size_t ncount) -{ - size_t size, i; - - size = 0; - for (i = 0; i < ncount; i++) - size += (_gnutls_mpi_get_nbits(mpi[i]) + 7) / 8 + 2; - return size; -} - - -static int write_mpi(cdk_stream_t out, bigint_t m) -{ - byte buf[MAX_MPI_BYTES + 2]; - size_t nbits, nread; - int err; - - if (!out || !m) - return CDK_Inv_Value; - nbits = _gnutls_mpi_get_nbits(m); - if (nbits > MAX_MPI_BITS || nbits < 1) - return CDK_MPI_Error; - - nread = MAX_MPI_BYTES + 2; - err = _gnutls_mpi_print_pgp(m, buf, &nread); - if (err < 0) - return map_gnutls_error(err); - return stream_write(out, buf, nread); -} - - -static cdk_error_t -write_mpibuf(cdk_stream_t out, bigint_t mpi[MAX_CDK_PK_PARTS], - size_t count) -{ - size_t i; - cdk_error_t rc; - - for (i = 0; i < count; i++) { - rc = write_mpi(out, mpi[i]); - if (rc) - return rc; - } - return 0; -} - - -static cdk_error_t pkt_encode_len(cdk_stream_t out, size_t pktlen) -{ - cdk_error_t rc; - - if (!out) - return CDK_Inv_Value; - - if (!pktlen) { - /* Block mode, partial bodies, with 'DEF_BLOCKSIZE' from main.h */ - rc = stream_putc(out, (0xE0 | DEF_BLOCKBITS)); - } else if (pktlen < 192) - rc = stream_putc(out, pktlen); - else if (pktlen < 8384) { - pktlen -= 192; - rc = stream_putc(out, (pktlen >> 8) + 192); - if (!rc) - rc = stream_putc(out, (pktlen & 0xff)); - } else { - rc = stream_putc(out, 255); - if (!rc) - rc = write_32(out, pktlen); - } - - return rc; -} - - -static cdk_error_t write_head_new(cdk_stream_t out, size_t size, int type) -{ - cdk_error_t rc; - - if (!out) - return CDK_Inv_Value; - - if (type < 0 || type > 63) - return CDK_Inv_Packet; - rc = stream_putc(out, (0xC0 | type)); - if (!rc) - rc = pkt_encode_len(out, size); - return rc; -} - - -static cdk_error_t write_head_old(cdk_stream_t out, size_t size, int type) -{ - cdk_error_t rc; - int ctb; - - if (!out) - return CDK_Inv_Value; - - if (type < 0 || type > 16) - return CDK_Inv_Packet; - ctb = 0x80 | (type << 2); - if (!size) - ctb |= 3; - else if (size < 256); - else if (size < 65536) - ctb |= 1; - else - ctb |= 2; - rc = stream_putc(out, ctb); - if (!size) - return rc; - if (!rc) { - if (size < 256) - rc = stream_putc(out, size); - else if (size < 65536) - rc = write_16(out, size); - else - rc = write_32(out, size); - } - - return rc; -} - - -/* Write special PGP2 packet header. PGP2 (wrongly) uses two byte header - length for signatures and keys even if the size is < 256. */ -static cdk_error_t pkt_write_head2(cdk_stream_t out, size_t size, int type) -{ - cdk_error_t rc; - - rc = cdk_stream_putc(out, 0x80 | (type << 2) | 1); - if (!rc) - rc = cdk_stream_putc(out, size >> 8); - if (!rc) - rc = cdk_stream_putc(out, size & 0xff); - return rc; -} - - -static int -pkt_write_head(cdk_stream_t out, int old_ctb, size_t size, int type) -{ - if (old_ctb) - return write_head_old(out, size, type); - return write_head_new(out, size, type); -} - - -static int -write_pubkey_enc(cdk_stream_t out, cdk_pkt_pubkey_enc_t pke, int old_ctb) -{ - size_t size; - int rc, nenc; - - if (!out || !pke) - return CDK_Inv_Value; - - if (pke->version < 2 || pke->version > 3) - return CDK_Inv_Packet; - if (!KEY_CAN_ENCRYPT(pke->pubkey_algo)) - return CDK_Inv_Algo; - - if (DEBUG_PKT) - _gnutls_write_log("write_pubkey_enc:\n"); - - nenc = cdk_pk_get_nenc(pke->pubkey_algo); - size = 10 + calc_mpisize(pke->mpi, nenc); - rc = pkt_write_head(out, old_ctb, size, CDK_PKT_PUBKEY_ENC); - if (rc) - return rc; - - rc = stream_putc(out, pke->version); - if (!rc) - rc = write_32(out, pke->keyid[0]); - if (!rc) - rc = write_32(out, pke->keyid[1]); - if (!rc) - rc = stream_putc(out, - _cdk_pub_algo_to_pgp(pke->pubkey_algo)); - if (!rc) - rc = write_mpibuf(out, pke->mpi, nenc); - return rc; -} - - -static cdk_error_t write_mdc(cdk_stream_t out, cdk_pkt_mdc_t mdc) -{ - cdk_error_t rc; - - if (!out || !mdc) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("write_mdc:\n"); - - /* This packet requires a fixed header encoding */ - rc = stream_putc(out, 0xD3); /* packet ID and 1 byte length */ - if (!rc) - rc = stream_putc(out, 0x14); - if (!rc) - rc = stream_write(out, mdc->hash, DIM(mdc->hash)); - return rc; -} - - -static size_t calc_subpktsize(cdk_subpkt_t s) -{ - size_t nbytes; - - /* In the count mode, no buffer is returned. */ - _cdk_subpkt_get_array(s, 1, &nbytes); - return nbytes; -} - - -static cdk_error_t -write_v3_sig(cdk_stream_t out, cdk_pkt_signature_t sig, int nsig) -{ - size_t size; - cdk_error_t rc; - - size = 19 + calc_mpisize(sig->mpi, nsig); - if (is_RSA(sig->pubkey_algo)) - rc = pkt_write_head2(out, size, CDK_PKT_SIGNATURE); - else - rc = pkt_write_head(out, 1, size, CDK_PKT_SIGNATURE); - if (!rc) - rc = stream_putc(out, sig->version); - if (!rc) - rc = stream_putc(out, 5); - if (!rc) - rc = stream_putc(out, sig->sig_class); - if (!rc) - rc = write_32(out, sig->timestamp); - if (!rc) - rc = write_32(out, sig->keyid[0]); - if (!rc) - rc = write_32(out, sig->keyid[1]); - if (!rc) - rc = stream_putc(out, - _cdk_pub_algo_to_pgp(sig->pubkey_algo)); - if (!rc) - rc = stream_putc(out, - _gnutls_hash_algo_to_pgp(sig-> - digest_algo)); - if (!rc) - rc = stream_putc(out, sig->digest_start[0]); - if (!rc) - rc = stream_putc(out, sig->digest_start[1]); - if (!rc) - rc = write_mpibuf(out, sig->mpi, nsig); - return rc; -} - - -static cdk_error_t -write_signature(cdk_stream_t out, cdk_pkt_signature_t sig, int old_ctb) -{ - byte *buf; - size_t nbytes, size, nsig; - cdk_error_t rc; - - if (!out || !sig) - return CDK_Inv_Value; - - if (!KEY_CAN_SIGN(sig->pubkey_algo)) - return gnutls_assert_val(CDK_Inv_Algo); - if (sig->version < 2 || sig->version > 4) - return gnutls_assert_val(CDK_Inv_Packet); - - if (DEBUG_PKT) - _gnutls_write_log("write_signature:\n"); - - nsig = cdk_pk_get_nsig(sig->pubkey_algo); - if (!nsig) - return gnutls_assert_val(CDK_Inv_Algo); - if (sig->version < 4) - return write_v3_sig(out, sig, nsig); - - size = 10 + calc_subpktsize(sig->hashed) - + calc_subpktsize(sig->unhashed) + calc_mpisize(sig->mpi, - nsig); - - rc = pkt_write_head(out, 0, size, CDK_PKT_SIGNATURE); - if (rc) - return gnutls_assert_val(rc); - - rc = stream_putc(out, 4); - if (rc) - return gnutls_assert_val(rc); - - rc = stream_putc(out, sig->sig_class); - if (rc) - return gnutls_assert_val(rc); - - rc = stream_putc(out, _cdk_pub_algo_to_pgp(sig->pubkey_algo)); - if (rc) - return gnutls_assert_val(rc); - - rc = stream_putc(out, _gnutls_hash_algo_to_pgp(sig->digest_algo)); - if (rc) - return gnutls_assert_val(rc); - - rc = write_16(out, sig->hashed_size); - if (rc) - return gnutls_assert_val(rc); - - buf = _cdk_subpkt_get_array(sig->hashed, 0, &nbytes); - if (!buf) - return gnutls_assert_val(CDK_Out_Of_Core); - - rc = stream_write(out, buf, nbytes); - cdk_free(buf); - if (rc) - return gnutls_assert_val(rc); - - rc = write_16(out, sig->unhashed_size); - if (rc) - return gnutls_assert_val(rc); - - buf = _cdk_subpkt_get_array(sig->unhashed, 0, &nbytes); - if (!buf) - return gnutls_assert_val(CDK_Out_Of_Core); - - rc = stream_write(out, buf, nbytes); - cdk_free(buf); - if (rc) - return gnutls_assert_val(rc); - - rc = stream_putc(out, sig->digest_start[0]); - if (rc) - return gnutls_assert_val(rc); - - rc = stream_putc(out, sig->digest_start[1]); - if (rc) - return gnutls_assert_val(rc); - - rc = write_mpibuf(out, sig->mpi, nsig); - if (rc) - return gnutls_assert_val(rc); - - return 0; -} - - -static cdk_error_t -write_public_key(cdk_stream_t out, cdk_pkt_pubkey_t pk, - int is_subkey, int old_ctb) -{ - int pkttype, ndays = 0; - size_t npkey = 0, size = 6; - cdk_error_t rc; - - if (!out || !pk) - return CDK_Inv_Value; - - if (pk->version < 2 || pk->version > 4) - return CDK_Inv_Packet; - - if (DEBUG_PKT) - _gnutls_write_log("write_public_key: subkey=%d\n", - is_subkey); - - pkttype = is_subkey ? CDK_PKT_PUBLIC_SUBKEY : CDK_PKT_PUBLIC_KEY; - npkey = cdk_pk_get_npkey(pk->pubkey_algo); - if (!npkey) - return CDK_Inv_Algo; - if (pk->version < 4) - size += 2; /* expire date */ - if (is_subkey) - old_ctb = 0; - size += calc_mpisize(pk->mpi, npkey); - if (old_ctb) - rc = pkt_write_head2(out, size, pkttype); - else - rc = pkt_write_head(out, old_ctb, size, pkttype); - if (!rc) - rc = stream_putc(out, pk->version); - if (!rc) - rc = write_32(out, pk->timestamp); - if (!rc && pk->version < 4) { - if (pk->expiredate) - ndays = - (u16) ((pk->expiredate - - pk->timestamp) / 86400L); - rc = write_16(out, ndays); - } - if (!rc) - rc = stream_putc(out, - _cdk_pub_algo_to_pgp(pk->pubkey_algo)); - if (!rc) - rc = write_mpibuf(out, pk->mpi, npkey); - return rc; -} - - -static int calc_s2ksize(cdk_pkt_seckey_t sk) -{ - size_t nbytes = 0; - - if (!sk->is_protected) - return 0; - switch (sk->protect.s2k->mode) { - case CDK_S2K_SIMPLE: - nbytes = 2; - break; - case CDK_S2K_SALTED: - nbytes = 10; - break; - case CDK_S2K_ITERSALTED: - nbytes = 11; - break; - case CDK_S2K_GNU_EXT: - nbytes = 2; - break; - } - nbytes += sk->protect.ivlen; - nbytes++; /* single cipher byte */ - return nbytes; -} - - -static cdk_error_t -write_secret_key(cdk_stream_t out, cdk_pkt_seckey_t sk, - int is_subkey, int old_ctb) -{ - cdk_pkt_pubkey_t pk = NULL; - size_t size = 6, npkey, nskey; - int pkttype, s2k_mode; - cdk_error_t rc; - - if (!out || !sk) - return CDK_Inv_Value; - - if (!sk->pk) - return CDK_Inv_Value; - pk = sk->pk; - if (pk->version < 2 || pk->version > 4) - return CDK_Inv_Packet; - - if (DEBUG_PKT) - _gnutls_write_log("write_secret_key:\n"); - - npkey = cdk_pk_get_npkey(pk->pubkey_algo); - nskey = cdk_pk_get_nskey(pk->pubkey_algo); - if (!npkey || !nskey) { - gnutls_assert(); - return CDK_Inv_Algo; - } - if (pk->version < 4) - size += 2; - /* If the key is unprotected, the 1 extra byte: - 1 octet - cipher algorithm byte (0x00) - the other bytes depend on the mode: - a) simple checksum - 2 octets - b) sha-1 checksum - 20 octets */ - size = !sk->is_protected ? size + 1 : size + 1 + calc_s2ksize(sk); - size += calc_mpisize(pk->mpi, npkey); - if (sk->version == 3 || !sk->is_protected) { - if (sk->version == 3) { - size += 2; /* force simple checksum */ - sk->protect.sha1chk = 0; - } else - size += sk->protect.sha1chk ? 20 : 2; - size += calc_mpisize(sk->mpi, nskey); - } else /* We do not know anything about the encrypted mpi's so we - treat the data as uint8_t. */ - size += sk->enclen; - - pkttype = is_subkey ? CDK_PKT_SECRET_SUBKEY : CDK_PKT_SECRET_KEY; - rc = pkt_write_head(out, old_ctb, size, pkttype); - if (!rc) - rc = stream_putc(out, pk->version); - if (!rc) - rc = write_32(out, pk->timestamp); - if (!rc && pk->version < 4) { - u16 ndays = 0; - if (pk->expiredate) - ndays = - (u16) ((pk->expiredate - - pk->timestamp) / 86400L); - rc = write_16(out, ndays); - } - if (!rc) - rc = stream_putc(out, - _cdk_pub_algo_to_pgp(pk->pubkey_algo)); - - if (!rc) - rc = write_mpibuf(out, pk->mpi, npkey); - - if (!rc) { - if (sk->is_protected == 0) - rc = stream_putc(out, 0x00); - else { - if (is_RSA(pk->pubkey_algo) && pk->version < 4) - rc = stream_putc(out, - _gnutls_cipher_to_pgp(sk-> - protect. - algo)); - else if (sk->protect.s2k) { - s2k_mode = sk->protect.s2k->mode; - rc = stream_putc(out, - sk->protect. - sha1chk ? 0xFE : 0xFF); - if (!rc) - rc = stream_putc(out, - _gnutls_cipher_to_pgp - (sk->protect. - algo)); - if (!rc) - rc = stream_putc(out, - sk->protect.s2k-> - mode); - if (!rc) - rc = stream_putc(out, - sk->protect.s2k-> - hash_algo); - if (!rc - && (s2k_mode == 1 || s2k_mode == 3)) { - rc = stream_write(out, - sk->protect.s2k-> - salt, 8); - if (!rc && s2k_mode == 3) - rc = stream_putc(out, - sk-> - protect. - s2k-> - count); - } - } else - return CDK_Inv_Value; - if (!rc) - rc = stream_write(out, sk->protect.iv, - sk->protect.ivlen); - } - } - if (!rc && sk->is_protected && pk->version == 4) { - if (sk->encdata && sk->enclen) - rc = stream_write(out, sk->encdata, sk->enclen); - } else { - if (!rc) - rc = write_mpibuf(out, sk->mpi, nskey); - if (!rc) { - if (!sk->csum) - sk->csum = _cdk_sk_get_csum(sk); - rc = write_16(out, sk->csum); - } - } - - return rc; -} - - -static cdk_error_t -write_compressed(cdk_stream_t out, cdk_pkt_compressed_t cd) -{ - cdk_error_t rc; - - if (!out || !cd) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("packet: write_compressed\n"); - - /* Use an old (RFC1991) header for this packet. */ - rc = pkt_write_head(out, 1, 0, CDK_PKT_COMPRESSED); - if (!rc) - rc = stream_putc(out, cd->algorithm); - return rc; -} - - -static cdk_error_t -write_literal(cdk_stream_t out, cdk_pkt_literal_t pt, int old_ctb) -{ - byte buf[BUFSIZE]; - size_t size; - cdk_error_t rc; - - if (!out || !pt) - return CDK_Inv_Value; - - /* We consider a packet without a body as an invalid packet. - At least one octet must be present. */ - if (!pt->len) - return CDK_Inv_Packet; - - if (DEBUG_PKT) - _gnutls_write_log("write_literal:\n"); - - size = 6 + pt->namelen + pt->len; - rc = pkt_write_head(out, old_ctb, size, CDK_PKT_LITERAL); - if (rc) - return rc; - - rc = stream_putc(out, pt->mode); - if (rc) - return rc; - rc = stream_putc(out, pt->namelen); - if (rc) - return rc; - - if (pt->namelen > 0) - rc = stream_write(out, pt->name, pt->namelen); - if (!rc) - rc = write_32(out, pt->timestamp); - if (rc) - return rc; - - while (!cdk_stream_eof(pt->buf) && !rc) { - rc = stream_read(pt->buf, buf, DIM(buf), &size); - if (!rc) - rc = stream_write(out, buf, size); - } - - memset(buf, 0, sizeof(buf)); - return rc; -} - - -static cdk_error_t -write_onepass_sig(cdk_stream_t out, cdk_pkt_onepass_sig_t sig) -{ - cdk_error_t rc; - - if (!out || !sig) - return CDK_Inv_Value; - - if (sig->version != 3) - return CDK_Inv_Packet; - - if (DEBUG_PKT) - _gnutls_write_log("write_onepass_sig:\n"); - - rc = pkt_write_head(out, 0, 13, CDK_PKT_ONEPASS_SIG); - if (!rc) - rc = stream_putc(out, sig->version); - if (!rc) - rc = stream_putc(out, sig->sig_class); - if (!rc) - rc = stream_putc(out, - _gnutls_hash_algo_to_pgp(sig-> - digest_algo)); - if (!rc) - rc = stream_putc(out, - _cdk_pub_algo_to_pgp(sig->pubkey_algo)); - if (!rc) - rc = write_32(out, sig->keyid[0]); - if (!rc) - rc = write_32(out, sig->keyid[1]); - if (!rc) - rc = stream_putc(out, sig->last); - return rc; -} - - -static cdk_error_t -write_user_id(cdk_stream_t out, cdk_pkt_userid_t id, int old_ctb, - int pkttype) -{ - cdk_error_t rc; - - if (!out || !id) - return CDK_Inv_Value; - - if (pkttype == CDK_PKT_ATTRIBUTE) { - if (!id->attrib_img) - return CDK_Inv_Value; - rc = pkt_write_head(out, old_ctb, id->attrib_len + 6, - CDK_PKT_ATTRIBUTE); - if (rc) - return rc; - /* Write subpacket part. */ - stream_putc(out, 255); - write_32(out, id->attrib_len + 1); - stream_putc(out, 1); - rc = stream_write(out, id->attrib_img, id->attrib_len); - } else { - if (!id->name) - return CDK_Inv_Value; - rc = pkt_write_head(out, old_ctb, id->len, - CDK_PKT_USER_ID); - if (!rc) - rc = stream_write(out, id->name, id->len); - } - - return rc; -} - - -/** - * cdk_pkt_write: - * @out: the output stream handle - * @pkt: the packet itself - * - * Write the contents of @pkt into the @out stream. - * Return 0 on success. - **/ -cdk_error_t cdk_pkt_write(cdk_stream_t out, cdk_packet_t pkt) -{ - cdk_error_t rc; - - if (!out || !pkt) - return CDK_Inv_Value; - - if (DEBUG_PKT) - _gnutls_write_log("write packet pkttype=%d\n", - pkt->pkttype); - - switch (pkt->pkttype) { - case CDK_PKT_LITERAL: - rc = write_literal(out, pkt->pkt.literal, pkt->old_ctb); - break; - case CDK_PKT_ONEPASS_SIG: - rc = write_onepass_sig(out, pkt->pkt.onepass_sig); - break; - case CDK_PKT_MDC: - rc = write_mdc(out, pkt->pkt.mdc); - break; - case CDK_PKT_PUBKEY_ENC: - rc = write_pubkey_enc(out, pkt->pkt.pubkey_enc, - pkt->old_ctb); - break; - case CDK_PKT_SIGNATURE: - rc = write_signature(out, pkt->pkt.signature, - pkt->old_ctb); - break; - case CDK_PKT_PUBLIC_KEY: - rc = write_public_key(out, pkt->pkt.public_key, 0, - pkt->old_ctb); - break; - case CDK_PKT_PUBLIC_SUBKEY: - rc = write_public_key(out, pkt->pkt.public_key, 1, - pkt->old_ctb); - break; - case CDK_PKT_COMPRESSED: - rc = write_compressed(out, pkt->pkt.compressed); - break; - case CDK_PKT_SECRET_KEY: - rc = write_secret_key(out, pkt->pkt.secret_key, 0, - pkt->old_ctb); - break; - case CDK_PKT_SECRET_SUBKEY: - rc = write_secret_key(out, pkt->pkt.secret_key, 1, - pkt->old_ctb); - break; - case CDK_PKT_USER_ID: - case CDK_PKT_ATTRIBUTE: - rc = write_user_id(out, pkt->pkt.user_id, pkt->old_ctb, - pkt->pkttype); - break; - default: - rc = CDK_Inv_Packet; - break; - } - - if (DEBUG_PKT) - _gnutls_write_log("write_packet rc=%d pkttype=%d\n", rc, - pkt->pkttype); - return rc; -} - - -cdk_error_t _cdk_pkt_write2(cdk_stream_t out, int pkttype, void *pktctx) -{ - cdk_packet_t pkt; - cdk_error_t rc; - - rc = cdk_pkt_new(&pkt); - if (rc) - return rc; - - switch (pkttype) { - case CDK_PKT_PUBLIC_KEY: - case CDK_PKT_PUBLIC_SUBKEY: - pkt->pkt.public_key = pktctx; - break; - case CDK_PKT_SIGNATURE: - pkt->pkt.signature = pktctx; - break; - case CDK_PKT_SECRET_KEY: - case CDK_PKT_SECRET_SUBKEY: - pkt->pkt.secret_key = pktctx; - break; - - case CDK_PKT_USER_ID: - pkt->pkt.user_id = pktctx; - break; - } - pkt->pkttype = pkttype; - rc = cdk_pkt_write(out, pkt); - cdk_free(pkt); - return rc; -} - - -cdk_error_t _cdk_pkt_write_fp(FILE * out, cdk_packet_t pkt) -{ - cdk_stream_t so; - cdk_error_t rc; - - rc = _cdk_stream_fpopen(out, 1, &so); - if (rc) - return rc; - rc = cdk_pkt_write(so, pkt); - cdk_stream_close(so); - return rc; -} diff --git a/lib/openpgp/Makefile.am b/lib/openpgp/Makefile.am deleted file mode 100644 index 532bd80a99..0000000000 --- a/lib/openpgp/Makefile.am +++ /dev/null @@ -1,41 +0,0 @@ -## Process this file with automake to produce Makefile.in -# Copyright (C) 2002-2012 Free Software Foundation, Inc. -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# The GnuTLS is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public License -# as published by the Free Software Foundation; either version 3 of -# the License, or (at your option) any later version. -# -# The GnuTLS is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see - -include $(top_srcdir)/lib/common.mk - -AM_CPPFLAGS = \ - -I$(srcdir)/../../gl \ - -I$(builddir)/../../gl \ - -I$(srcdir)/../includes \ - -I$(builddir)/../includes \ - -I$(builddir)/../../gl \ - -I$(srcdir)/.. \ - -I$(srcdir)/../opencdk - -if ENABLE_MINITASN1 -AM_CPPFLAGS += -I$(srcdir)/../minitasn1 -endif - -noinst_LTLIBRARIES = libgnutls_openpgp.la - -COBJECTS = pgp.c pgpverify.c extras.c compat.c privkey.c output.c \ - openpgp.c - -libgnutls_openpgp_la_SOURCES = $(COBJECTS) openpgp_int.h openpgp.h diff --git a/lib/openpgp/compat.c b/lib/openpgp/compat.c deleted file mode 100644 index cf39024c7a..0000000000 --- a/lib/openpgp/compat.c +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz, Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* Compatibility functions on OpenPGP key parsing. - */ - -#include "gnutls_int.h" -#include "errors.h" -#include -#include - -/*- - * gnutls_openpgp_verify_key: - * @hostname: the name of the certificate holder - * @cert_list: the structure that holds the certificates. - * @cert_list_lenght: the items in the cert_list. - * @status: the output of the verification function - * - * Verify all signatures in the certificate list. When the key - * is not available, the signature is skipped. - * - * Returns: a negative error code on error and %GNUTLS_E_SUCCESS (0) on success. - * - * NOTE: this function does not verify using any "web of trust". You - * may use GnuPG for that purpose, or any other external PGP application. - -*/ -int -_gnutls_openpgp_verify_key(const gnutls_certificate_credentials_t cred, - gnutls_x509_subject_alt_name_t type, - const char *hostname, - const gnutls_datum_t * cert_list, - int cert_list_length, - unsigned int verify_flags, - unsigned int *status) -{ - int ret = 0; - gnutls_openpgp_crt_t key = NULL; - unsigned int verify = 0, verify_self = 0; - - if (!cert_list || cert_list_length != 1) { - gnutls_assert(); - return GNUTLS_E_NO_CERTIFICATE_FOUND; - } - - ret = gnutls_openpgp_crt_init(&key); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - ret = - gnutls_openpgp_crt_import(key, &cert_list[0], - GNUTLS_OPENPGP_FMT_RAW); - if (ret < 0) { - gnutls_assert(); - goto leave; - } - - if (cred->keyring != NULL) { - ret = - gnutls_openpgp_crt_verify_ring(key, cred->keyring, 0, - &verify); - if (ret < 0) { - gnutls_assert(); - goto leave; - } - } - - /* Now try the self signature. */ - ret = gnutls_openpgp_crt_verify_self(key, 0, &verify_self); - if (ret < 0) { - gnutls_assert(); - goto leave; - } - - *status = verify_self | verify; - - /* If we only checked the self signature. */ - if (!cred->keyring) - *status |= GNUTLS_CERT_SIGNER_NOT_FOUND; - - if (hostname) { - ret = gnutls_openpgp_crt_check_hostname2(key, hostname, verify_flags); - if (ret == 0) - *status |= GNUTLS_CERT_UNEXPECTED_OWNER; - } - - ret = 0; - - leave: - gnutls_openpgp_crt_deinit(key); - - return ret; -} - -/*- - * gnutls_openpgp_fingerprint: - * @cert: the raw data that contains the OpenPGP public key. - * @fpr: the buffer to save the fingerprint. - * @fprlen: the integer to save the length of the fingerprint. - * - * Returns the fingerprint of the OpenPGP key. Depence on the algorithm, - * the fingerprint can be 16 or 20 bytes. - -*/ -int -_gnutls_openpgp_fingerprint(const gnutls_datum_t * cert, - unsigned char *fpr, size_t * fprlen) -{ - gnutls_openpgp_crt_t key; - int ret; - - ret = gnutls_openpgp_crt_init(&key); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - ret = gnutls_openpgp_crt_import(key, cert, GNUTLS_OPENPGP_FMT_RAW); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - ret = gnutls_openpgp_crt_get_fingerprint(key, fpr, fprlen); - gnutls_openpgp_crt_deinit(key); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return 0; -} - -/*- - * gnutls_openpgp_get_raw_key_creation_time: - * @cert: the raw data that contains the OpenPGP public key. - * - * Returns the timestamp when the OpenPGP key was created. - -*/ -time_t -_gnutls_openpgp_get_raw_key_creation_time(const gnutls_datum_t * cert) -{ - gnutls_openpgp_crt_t key; - int ret; - time_t tim; - - ret = gnutls_openpgp_crt_init(&key); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - ret = gnutls_openpgp_crt_import(key, cert, GNUTLS_OPENPGP_FMT_RAW); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - tim = gnutls_openpgp_crt_get_creation_time(key); - - gnutls_openpgp_crt_deinit(key); - - return tim; -} - - -/*- - * gnutls_openpgp_get_raw_key_expiration_time: - * @cert: the raw data that contains the OpenPGP public key. - * - * Returns the time when the OpenPGP key expires. A value of '0' means - * that the key doesn't expire at all. - -*/ -time_t -_gnutls_openpgp_get_raw_key_expiration_time(const gnutls_datum_t * cert) -{ - gnutls_openpgp_crt_t key; - int ret; - time_t tim; - - ret = gnutls_openpgp_crt_init(&key); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - ret = gnutls_openpgp_crt_import(key, cert, GNUTLS_OPENPGP_FMT_RAW); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - tim = gnutls_openpgp_crt_get_expiration_time(key); - - gnutls_openpgp_crt_deinit(key); - - return tim; -} diff --git a/lib/openpgp/extras.c b/lib/openpgp/extras.c deleted file mode 100644 index 6bc815d250..0000000000 --- a/lib/openpgp/extras.c +++ /dev/null @@ -1,315 +0,0 @@ -/* - * Copyright (C) 2003-2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos, Timo Schulz - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* Functions on keyring parsing - */ - -#include "gnutls_int.h" -#include -#include -#include "errors.h" -#include -#include -#include - -/* Keyring stuff. - */ - -/** - * gnutls_openpgp_keyring_init: - * @keyring: A pointer to the type to be initialized - * - * This function will initialize an keyring structure. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int gnutls_openpgp_keyring_init(gnutls_openpgp_keyring_t * keyring) -{ - *keyring = gnutls_calloc(1, sizeof(gnutls_openpgp_keyring_int)); - - if (*keyring) - return 0; /* success */ - return GNUTLS_E_MEMORY_ERROR; -} - - -/** - * gnutls_openpgp_keyring_deinit: - * @keyring: A pointer to the type to be initialized - * - * This function will deinitialize a keyring structure. - **/ -void gnutls_openpgp_keyring_deinit(gnutls_openpgp_keyring_t keyring) -{ - if (!keyring) - return; - - if (keyring->db) { - cdk_keydb_free(keyring->db); - keyring->db = NULL; - } - - gnutls_free(keyring); -} - -/** - * gnutls_openpgp_keyring_check_id: - * @ring: holds the keyring to check against - * @keyid: will hold the keyid to check for. - * @flags: unused (should be 0) - * - * Check if a given key ID exists in the keyring. - * - * Returns: %GNUTLS_E_SUCCESS on success (if keyid exists) and a - * negative error code on failure. - **/ -int -gnutls_openpgp_keyring_check_id(gnutls_openpgp_keyring_t ring, - const gnutls_openpgp_keyid_t keyid, - unsigned int flags) -{ - cdk_pkt_pubkey_t pk; - uint32_t id[2]; - - id[0] = _gnutls_read_uint32(keyid); - id[1] = _gnutls_read_uint32(&keyid[4]); - - if (!cdk_keydb_get_pk(ring->db, id, &pk)) { - cdk_pk_release(pk); - return 0; - } - - _gnutls_debug_log("PGP: key not found %08lX\n", - (unsigned long) id[1]); - return GNUTLS_E_NO_CERTIFICATE_FOUND; -} - -/** - * gnutls_openpgp_keyring_import: - * @keyring: The structure to store the parsed key. - * @data: The RAW or BASE64 encoded keyring. - * @format: One of #gnutls_openpgp_keyring_fmt elements. - * - * This function will convert the given RAW or Base64 encoded keyring - * to the native #gnutls_openpgp_keyring_t format. The output will be - * stored in 'keyring'. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int -gnutls_openpgp_keyring_import(gnutls_openpgp_keyring_t keyring, - const gnutls_datum_t * data, - gnutls_openpgp_crt_fmt_t format) -{ - cdk_error_t err; - cdk_stream_t input = NULL; - size_t raw_len = 0; - uint8_t *raw_data = NULL; - unsigned free_data = 0; - - if (data->data == NULL || data->size == 0) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - _gnutls_debug_log("PGP: keyring import format '%s'\n", - format == - GNUTLS_OPENPGP_FMT_RAW ? "raw" : "base64"); - - /* Create a new stream from the given data, decode it, and import - * the raw database. This to avoid using opencdk streams which are - * not thread safe. - */ - if (format == GNUTLS_OPENPGP_FMT_BASE64) { - size_t seen = 0; - - err = - cdk_stream_tmp_from_mem(data->data, data->size, - &input); - if (err == 0) - err = cdk_stream_set_armor_flag(input, 0); - if (err) { - gnutls_assert(); - err = _gnutls_map_cdk_rc(err); - goto error; - } - - raw_len = cdk_stream_get_length(input); - if (raw_len == 0) { - gnutls_assert(); - err = GNUTLS_E_BASE64_DECODING_ERROR; - goto error; - } - - raw_data = gnutls_malloc(raw_len); - if (raw_data == NULL) { - gnutls_assert(); - err = GNUTLS_E_MEMORY_ERROR; - goto error; - } - - do { - err = - cdk_stream_read(input, raw_data + seen, - raw_len - seen); - - if (err > 0) - seen += err; - } - while (seen < raw_len && err != EOF && err > 0); - - raw_len = seen; - if (raw_len == 0) { - gnutls_assert(); - err = GNUTLS_E_BASE64_DECODING_ERROR; - goto error; - } - - free_data = 1; - } else { /* RAW */ - raw_len = data->size; - raw_data = data->data; - } - - err = - cdk_keydb_new_from_mem(&keyring->db, 0, 0, raw_data, raw_len); - if (err) - gnutls_assert(); - - if (free_data) { - err = _gnutls_map_cdk_rc(err); - goto error; - } - - return _gnutls_map_cdk_rc(err); - - error: - gnutls_free(raw_data); - cdk_stream_close(input); - - return err; -} - -#define knode_is_pkey(node) \ - cdk_kbnode_find_packet (node, CDK_PKT_PUBLIC_KEY)!=NULL - -/** - * gnutls_openpgp_keyring_get_crt_count: - * @ring: is an OpenPGP key ring - * - * This function will return the number of OpenPGP certificates - * present in the given keyring. - * - * Returns: the number of subkeys, or a negative error code on error. - **/ -int gnutls_openpgp_keyring_get_crt_count(gnutls_openpgp_keyring_t ring) -{ - cdk_kbnode_t knode; - cdk_error_t err; - cdk_keydb_search_t st; - int ret = 0; - - err = - cdk_keydb_search_start(&st, ring->db, CDK_DBSEARCH_NEXT, NULL); - if (err != CDK_Success) { - gnutls_assert(); - return _gnutls_map_cdk_rc(err); - } - - do { - err = cdk_keydb_search(st, ring->db, &knode); - if (err != CDK_Error_No_Key && err != CDK_Success) { - gnutls_assert(); - cdk_keydb_search_release(st); - return _gnutls_map_cdk_rc(err); - } - - if (knode_is_pkey(knode)) - ret++; - - cdk_kbnode_release(knode); - - } - while (err != CDK_Error_No_Key); - - cdk_keydb_search_release(st); - return ret; -} - -/** - * gnutls_openpgp_keyring_get_crt: - * @ring: Holds the keyring. - * @idx: the index of the certificate to export - * @cert: An uninitialized #gnutls_openpgp_crt_t type - * - * This function will extract an OpenPGP certificate from the given - * keyring. If the index given is out of range - * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE will be returned. The - * returned structure needs to be deinited. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int -gnutls_openpgp_keyring_get_crt(gnutls_openpgp_keyring_t ring, - unsigned int idx, - gnutls_openpgp_crt_t * cert) -{ - cdk_kbnode_t knode; - cdk_error_t err; - int ret = 0; - unsigned int count = 0; - cdk_keydb_search_t st; - - err = - cdk_keydb_search_start(&st, ring->db, CDK_DBSEARCH_NEXT, NULL); - if (err != CDK_Success) { - gnutls_assert(); - return _gnutls_map_cdk_rc(err); - } - - do { - err = cdk_keydb_search(st, ring->db, &knode); - if (err != CDK_EOF && err != CDK_Success) { - gnutls_assert(); - cdk_keydb_search_release(st); - return _gnutls_map_cdk_rc(err); - } - - if (idx == count && err == CDK_Success) { - ret = gnutls_openpgp_crt_init(cert); - if (ret == 0) - (*cert)->knode = knode; - cdk_keydb_search_release(st); - return ret; - } - - if (knode_is_pkey(knode)) - count++; - - cdk_kbnode_release(knode); - - } - while (err != CDK_EOF); - - cdk_keydb_search_release(st); - return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; -} diff --git a/lib/openpgp/openpgp.c b/lib/openpgp/openpgp.c deleted file mode 100644 index fbec7448b5..0000000000 --- a/lib/openpgp/openpgp.c +++ /dev/null @@ -1,767 +0,0 @@ -/* - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz, Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#include "gnutls_int.h" -#include "errors.h" -#include "mpi.h" -#include "num.h" -#include "datum.h" -#include "global.h" -#include "openpgp.h" -#include "read-file.h" -#include -#include -#include -#include -#include - -/* Map an OpenCDK error type to a GnuTLS error type. */ -int _gnutls_map_cdk_rc(int rc) -{ - switch (rc) { - case CDK_Success: - return 0; - case CDK_EOF: - return GNUTLS_E_PARSING_ERROR; - case CDK_Too_Short: - return GNUTLS_E_SHORT_MEMORY_BUFFER; - case CDK_General_Error: - return GNUTLS_E_INTERNAL_ERROR; - case CDK_File_Error: - return GNUTLS_E_FILE_ERROR; - case CDK_MPI_Error: - return GNUTLS_E_MPI_SCAN_FAILED; - case CDK_Error_No_Key: - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - case CDK_Armor_Error: - return GNUTLS_E_BASE64_DECODING_ERROR; - case CDK_Inv_Value: - return GNUTLS_E_INVALID_REQUEST; - default: - return GNUTLS_E_INTERNAL_ERROR; - } -} - -/** - * gnutls_certificate_set_openpgp_key: - * @res: is a #gnutls_certificate_credentials_t type. - * @crt: contains an openpgp public key - * @pkey: is an openpgp private key - * - * This function sets a certificate/private key pair in the - * gnutls_certificate_credentials_t type. This function may be - * called more than once (in case multiple keys/certificates exist - * for the server). - * - * Note that this function requires that the preferred key ids have - * been set and be used. See gnutls_openpgp_crt_set_preferred_key_id(). - * Otherwise the master key will be used. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, - * otherwise a negative error code is returned. - **/ -int -gnutls_certificate_set_openpgp_key(gnutls_certificate_credentials_t res, - gnutls_openpgp_crt_t crt, - gnutls_openpgp_privkey_t pkey) -{ - int ret, ret2, i; - gnutls_privkey_t privkey; - gnutls_pcert_st *ccert = NULL; - char name[MAX_CN]; - size_t max_size; - gnutls_str_array_t names; - - _gnutls_str_array_init(&names); - - /* this should be first */ - - ret = gnutls_privkey_init(&privkey); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - ret = - gnutls_privkey_import_openpgp(privkey, pkey, - GNUTLS_PRIVKEY_IMPORT_COPY); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ccert = gnutls_calloc(1, sizeof(gnutls_pcert_st)); - if (ccert == NULL) { - gnutls_assert(); - ret = GNUTLS_E_MEMORY_ERROR; - goto cleanup; - } - - max_size = sizeof(name); - ret = 0; - for (i = 0; !(ret < 0); i++) { - ret = gnutls_openpgp_crt_get_name(crt, i, name, &max_size); - if (ret >= 0) { - ret2 = - _gnutls_str_array_append(&names, name, - max_size); - if (ret2 < 0) { - gnutls_assert(); - ret = ret2; - goto cleanup; - } - } - } - - ret = gnutls_pcert_import_openpgp(ccert, crt, 0); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = certificate_credentials_append_pkey(res, privkey); - if (ret >= 0) - ret = - certificate_credential_append_crt_list(res, names, - ccert, 1); - - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - res->ncerts++; - - ret = _gnutls_check_key_cert_match(res); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return 0; - - cleanup: - gnutls_privkey_deinit(privkey); - gnutls_free(ccert); - _gnutls_str_array_clear(&names); - return ret; -} - -/** - * gnutls_certificate_get_openpgp_key: - * @res: is a #gnutls_certificate_credentials_t type. - * @index: The index of the key to obtain. - * @key: Location to store the key. - * - * Obtains a OpenPGP private key that has been stored in @res with one of - * gnutls_certificate_set_openpgp_key(), - * gnutls_certificate_set_openpgp_key_file(), - * gnutls_certificate_set_openpgp_key_file2(), - * gnutls_certificate_set_openpgp_key_mem(), or - * gnutls_certificate_set_openpgp_key_mem2(). - * The returned key must be deallocated with gnutls_openpgp_privkey_deinit() - * when no longer needed. - * - * If there is no key with the given index, - * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned. If the key with the - * given index is not a X.509 key, %GNUTLS_E_INVALID_REQUEST is returned. - * - * Returns: %GNUTLS_E_SUCCESS (0) on success, or a negative error code. - * - * Since: 3.4.0 - */ -int -gnutls_certificate_get_openpgp_key(gnutls_certificate_credentials_t res, - unsigned index, - gnutls_openpgp_privkey_t *key) -{ - if (index >= res->ncerts) { - gnutls_assert(); - return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; - } - - return gnutls_privkey_export_openpgp(res->pkey[index], key); -} - -/** - * gnutls_certificate_get_openpgp_crt: - * @res: is a #gnutls_certificate_credentials_t type. - * @index: The index of the certificate list to obtain. - * @crt_list: Where to store the certificate list. - * @crt_list_size: Will hold the number of certificates. - * - * Obtains a X.509 certificate list that has been stored in @res with one of - * gnutls_certificate_set_openpgp_key(), - * gnutls_certificate_set_openpgp_key_file(), - * gnutls_certificate_set_openpgp_key_file2(), - * gnutls_certificate_set_openpgp_key_mem(), or - * gnutls_certificate_set_openpgp_key_mem2(). Each certificate in the - * returned certificate list must be deallocated with - * gnutls_openpgp_crt_deinit(), and the list itself must be freed with - * gnutls_free(). - * - * If there is no certificate with the given index, - * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned. If the certificate - * with the given index is not a X.509 certificate, %GNUTLS_E_INVALID_REQUEST - * is returned. - * - * Returns: %GNUTLS_E_SUCCESS (0) on success, or a negative error code. - * - * Since: 3.4.0 - */ -int -gnutls_certificate_get_openpgp_crt(gnutls_certificate_credentials_t res, - unsigned index, - gnutls_openpgp_crt_t **crt_list, - unsigned *crt_list_size) -{ - int ret; - unsigned i; - - if (index >= res->ncerts) { - gnutls_assert(); - return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; - } - - *crt_list_size = res->certs[index].cert_list_length; - *crt_list = gnutls_malloc( - res->certs[index].cert_list_length * sizeof (gnutls_openpgp_crt_t)); - if (*crt_list == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - for (i = 0; i < res->certs[index].cert_list_length; ++i) { - ret = gnutls_pcert_export_openpgp(&res->certs[index].cert_list[i], crt_list[i]); - if (ret < 0) { - while (i--) - gnutls_openpgp_crt_deinit(*crt_list[i]); - gnutls_free(*crt_list); - *crt_list = NULL; - - return gnutls_assert_val(ret); - } - } - - return 0; -} - -/*- - * gnutls_openpgp_get_key: - * @key: the destination context to save the key. - * @keyring: the datum struct that contains all keyring information. - * @attr: The attribute (keyid, fingerprint, ...). - * @by: What attribute is used. - * - * This function can be used to retrieve keys by different pattern - * from a binary or a file keyring. - -*/ -int -gnutls_openpgp_get_key(gnutls_datum_t * key, - gnutls_openpgp_keyring_t keyring, key_attr_t by, - uint8_t * pattern) -{ - cdk_kbnode_t knode = NULL; - unsigned long keyid[2]; - unsigned char *buf; - void *desc; - size_t len; - int rc = 0; - cdk_keydb_search_t st; - - if (!key || !keyring || by == KEY_ATTR_NONE) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - memset(key, 0, sizeof *key); - - if (by == KEY_ATTR_SHORT_KEYID) { - keyid[0] = _gnutls_read_uint32(pattern); - desc = keyid; - } else if (by == KEY_ATTR_KEYID) { - keyid[0] = _gnutls_read_uint32(pattern); - keyid[1] = _gnutls_read_uint32(pattern + 4); - desc = keyid; - } else - desc = pattern; - rc = cdk_keydb_search_start(&st, keyring->db, by, desc); - if (!rc) - rc = cdk_keydb_search(st, keyring->db, &knode); - - cdk_keydb_search_release(st); - - if (rc) { - rc = _gnutls_map_cdk_rc(rc); - goto leave; - } - - if (!cdk_kbnode_find(knode, CDK_PKT_PUBLIC_KEY)) { - rc = GNUTLS_E_OPENPGP_GETKEY_FAILED; - goto leave; - } - - /* We let the function allocate the buffer to avoid - to call the function twice. */ - rc = cdk_kbnode_write_to_mem_alloc(knode, &buf, &len); - if (!rc) - _gnutls_datum_append(key, buf, len); - gnutls_free(buf); - - leave: - cdk_kbnode_release(knode); - return rc; -} - -/** - * gnutls_certificate_set_openpgp_key_mem: - * @res: the destination context to save the data. - * @cert: the datum that contains the public key. - * @key: the datum that contains the secret key. - * @format: the format of the keys - * - * This function is used to load OpenPGP keys into the GnuTLS credential - * structure. The datum should contain at least one valid non encrypted subkey. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - **/ -int -gnutls_certificate_set_openpgp_key_mem(gnutls_certificate_credentials_t - res, const gnutls_datum_t * cert, - const gnutls_datum_t * key, - gnutls_openpgp_crt_fmt_t format) -{ - return gnutls_certificate_set_openpgp_key_mem2(res, cert, key, - NULL, format); -} - -/** - * gnutls_certificate_set_openpgp_key_file: - * @res: the destination context to save the data. - * @certfile: the file that contains the public key. - * @keyfile: the file that contains the secret key. - * @format: the format of the keys - * - * This function is used to load OpenPGP keys into the GnuTLS - * credentials structure. The file should contain at least one valid non encrypted subkey. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - **/ -int -gnutls_certificate_set_openpgp_key_file(gnutls_certificate_credentials_t - res, const char *certfile, - const char *keyfile, - gnutls_openpgp_crt_fmt_t format) -{ - return gnutls_certificate_set_openpgp_key_file2(res, certfile, - keyfile, NULL, - format); -} - -static int get_keyid(gnutls_openpgp_keyid_t keyid, const char *str) -{ - size_t keyid_size = GNUTLS_OPENPGP_KEYID_SIZE; - size_t len = strlen(str); - gnutls_datum_t tmp; - int ret; - - if (len != 16) { - _gnutls_debug_log - ("The OpenPGP subkey ID has to be 16 hexadecimal characters.\n"); - return GNUTLS_E_INVALID_REQUEST; - } - - tmp.data = (void*)str; - tmp.size = len; - ret = gnutls_hex_decode(&tmp, keyid, &keyid_size); - if (ret < 0) { - _gnutls_debug_log("Error converting hex string: %s.\n", - str); - return GNUTLS_E_INVALID_REQUEST; - } - - return 0; -} - -/** - * gnutls_certificate_set_openpgp_key_mem2: - * @res: the destination context to save the data. - * @cert: the datum that contains the public key. - * @key: the datum that contains the secret key. - * @subkey_id: a hex encoded subkey id - * @format: the format of the keys - * - * This function is used to load OpenPGP keys into the GnuTLS - * credentials structure. The datum should contain at least one valid non encrypted subkey. - * - * The special keyword "auto" is also accepted as @subkey_id. In that - * case the gnutls_openpgp_crt_get_auth_subkey() will be used to - * retrieve the subkey. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - * - * Since: 2.4.0 - **/ -int -gnutls_certificate_set_openpgp_key_mem2(gnutls_certificate_credentials_t - res, const gnutls_datum_t * cert, - const gnutls_datum_t * key, - const char *subkey_id, - gnutls_openpgp_crt_fmt_t format) -{ - gnutls_openpgp_privkey_t pkey; - gnutls_openpgp_crt_t crt; - int ret; - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - - ret = gnutls_openpgp_privkey_init(&pkey); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - ret = gnutls_openpgp_privkey_import(pkey, key, format, NULL, 0); - if (ret < 0) { - gnutls_assert(); - gnutls_openpgp_privkey_deinit(pkey); - return ret; - } - - ret = gnutls_openpgp_crt_init(&crt); - if (ret < 0) { - gnutls_assert(); - gnutls_openpgp_privkey_deinit(pkey); - return ret; - } - - ret = gnutls_openpgp_crt_import(crt, cert, format); - if (ret < 0) { - gnutls_assert(); - gnutls_openpgp_privkey_deinit(pkey); - gnutls_openpgp_crt_deinit(crt); - return ret; - } - - if (subkey_id != NULL) { - if (strcasecmp(subkey_id, "auto") == 0) - ret = - gnutls_openpgp_crt_get_auth_subkey(crt, keyid, - 1); - else - ret = get_keyid(keyid, subkey_id); - - if (ret < 0) - gnutls_assert(); - - if (ret >= 0) { - ret = - gnutls_openpgp_crt_set_preferred_key_id(crt, - keyid); - if (ret >= 0) - ret = - gnutls_openpgp_privkey_set_preferred_key_id - (pkey, keyid); - } - - if (ret < 0) { - gnutls_assert(); - gnutls_openpgp_privkey_deinit(pkey); - gnutls_openpgp_crt_deinit(crt); - return ret; - } - } - - ret = gnutls_certificate_set_openpgp_key(res, crt, pkey); - - gnutls_openpgp_crt_deinit(crt); - gnutls_openpgp_privkey_deinit(pkey); - - return ret; -} - -/** - * gnutls_certificate_set_openpgp_key_file2: - * @res: the destination context to save the data. - * @certfile: the file that contains the public key. - * @keyfile: the file that contains the secret key. - * @subkey_id: a hex encoded subkey id - * @format: the format of the keys - * - * This function is used to load OpenPGP keys into the GnuTLS credential - * structure. The file should contain at least one valid non encrypted subkey. - * - * The special keyword "auto" is also accepted as @subkey_id. In that - * case the gnutls_openpgp_crt_get_auth_subkey() will be used to - * retrieve the subkey. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - * - * Since: 2.4.0 - **/ -int -gnutls_certificate_set_openpgp_key_file2(gnutls_certificate_credentials_t - res, const char *certfile, - const char *keyfile, - const char *subkey_id, - gnutls_openpgp_crt_fmt_t format) -{ - struct stat statbuf; - gnutls_datum_t key, cert; - int rc; - size_t size; - - if (!res || !keyfile || !certfile) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (stat(certfile, &statbuf) || stat(keyfile, &statbuf)) { - gnutls_assert(); - return GNUTLS_E_FILE_ERROR; - } - - cert.data = (void *) read_binary_file(certfile, &size); - cert.size = (unsigned int) size; - if (cert.data == NULL) { - gnutls_assert(); - return GNUTLS_E_FILE_ERROR; - } - - key.data = (void *) read_binary_file(keyfile, &size); - key.size = (unsigned int) size; - if (key.data == NULL) { - gnutls_assert(); - free(cert.data); - return GNUTLS_E_FILE_ERROR; - } - - rc = gnutls_certificate_set_openpgp_key_mem2(res, &cert, &key, - subkey_id, format); - - free(cert.data); - free(key.data); - - if (rc < 0) { - gnutls_assert(); - return rc; - } - - return 0; -} - - -int gnutls_openpgp_count_key_names(const gnutls_datum_t * cert) -{ - cdk_kbnode_t knode, p, ctx; - cdk_packet_t pkt; - int nuids; - - if (cert == NULL) { - gnutls_assert(); - return 0; - } - - if (cdk_kbnode_read_from_mem(&knode, 0, cert->data, cert->size, 1)) { - gnutls_assert(); - return 0; - } - - ctx = NULL; - for (nuids = 0;;) { - p = cdk_kbnode_walk(knode, &ctx, 0); - if (!p) - break; - pkt = cdk_kbnode_get_packet(p); - if (pkt->pkttype == CDK_PKT_USER_ID) - nuids++; - } - - cdk_kbnode_release(knode); - return nuids; -} - -/** - * gnutls_certificate_set_openpgp_keyring_file: - * @c: A certificate credentials structure - * @file: filename of the keyring. - * @format: format of keyring. - * - * The function is used to set keyrings that will be used internally - * by various OpenPGP functions. For example to find a key when it - * is needed for an operations. The keyring will also be used at the - * verification functions. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - **/ -int -gnutls_certificate_set_openpgp_keyring_file -(gnutls_certificate_credentials_t c, const char *file, - gnutls_openpgp_crt_fmt_t format) -{ - gnutls_datum_t ring; - size_t size; - int rc; - - if (!c || !file) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - ring.data = (void *) read_binary_file(file, &size); - ring.size = (unsigned int) size; - if (ring.data == NULL) { - gnutls_assert(); - return GNUTLS_E_FILE_ERROR; - } - - rc = gnutls_certificate_set_openpgp_keyring_mem(c, ring.data, - ring.size, format); - - free(ring.data); - - return rc; -} - -/** - * gnutls_certificate_set_openpgp_keyring_mem: - * @c: A certificate credentials structure - * @data: buffer with keyring data. - * @dlen: length of data buffer. - * @format: the format of the keyring - * - * The function is used to set keyrings that will be used internally - * by various OpenPGP functions. For example to find a key when it - * is needed for an operations. The keyring will also be used at the - * verification functions. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - **/ -int -gnutls_certificate_set_openpgp_keyring_mem(gnutls_certificate_credentials_t - c, const uint8_t * data, - size_t dlen, - gnutls_openpgp_crt_fmt_t format) -{ - gnutls_datum_t ddata; - int rc; - - ddata.data = (void *) data; - ddata.size = dlen; - - if (!c || !data || !dlen) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - rc = gnutls_openpgp_keyring_init(&c->keyring); - if (rc < 0) { - gnutls_assert(); - return rc; - } - - rc = gnutls_openpgp_keyring_import(c->keyring, &ddata, format); - if (rc < 0) { - gnutls_assert(); - gnutls_openpgp_keyring_deinit(c->keyring); - return rc; - } - - return 0; -} - -/*- - * _gnutls_openpgp_request_key - Receives a key from a database, key server etc - * @ret - a pointer to gnutls_datum_t type. - * @cred - a gnutls_certificate_credentials_t type. - * @key_fingerprint - The keyFingerprint - * @key_fingerprint_size - the size of the fingerprint - * - * Retrieves a key from a local database, keyring, or a key server. The - * return value is locally allocated. - * - -*/ -int -_gnutls_openpgp_request_key(gnutls_session_t session, gnutls_datum_t * ret, - const gnutls_certificate_credentials_t cred, - uint8_t * key_fpr, int key_fpr_size) -{ - int rc = 0; - - if (!ret || !cred || !key_fpr) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (key_fpr_size != 16 && key_fpr_size != 20) - return GNUTLS_E_HASH_FAILED; /* only MD5 and SHA1 are supported */ - - rc = gnutls_openpgp_get_key(ret, cred->keyring, KEY_ATTR_FPR, - key_fpr); - - if (rc >= 0) { /* key was found */ - rc = 0; - goto error; - } else - rc = GNUTLS_E_OPENPGP_GETKEY_FAILED; - - /* If the callback function was set, then try this one. */ - if (session->internals.openpgp_recv_key_func != NULL) { - rc = session->internals.openpgp_recv_key_func(session, - key_fpr, - key_fpr_size, - ret); - if (rc < 0) { - gnutls_assert(); - rc = GNUTLS_E_OPENPGP_GETKEY_FAILED; - goto error; - } - } - - error: - - return rc; -} - -/** - * gnutls_openpgp_set_recv_key_function: - * @session: a TLS session - * @func: the callback - * - * This function will set a key retrieval function for OpenPGP keys. This - * callback is only useful in server side, and will be used if the peer - * sent a key fingerprint instead of a full key. - * - * The retrieved key must be allocated using gnutls_malloc(). - * - **/ -void -gnutls_openpgp_set_recv_key_function(gnutls_session_t session, - gnutls_openpgp_recv_key_func func) -{ - session->internals.openpgp_recv_key_func = func; -} diff --git a/lib/openpgp/openpgp.h b/lib/openpgp/openpgp.h deleted file mode 100644 index 3d37bdc314..0000000000 --- a/lib/openpgp/openpgp.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz, Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#include - -#ifdef ENABLE_OPENPGP - -#ifndef GNUTLS_OPENPGP_LOCAL_H -#define GNUTLS_OPENPGP_LOCAL_H - -#include -#include -#include - -/* OpenCDK compatible */ -typedef enum { - KEY_ATTR_NONE = 0, - KEY_ATTR_SHORT_KEYID = 3, - KEY_ATTR_KEYID = 4, - KEY_ATTR_FPR = 5 -} key_attr_t; - -int gnutls_openpgp_count_key_names(const gnutls_datum_t * cert); - -int gnutls_openpgp_get_key(gnutls_datum_t * key, - gnutls_openpgp_keyring_t keyring, - key_attr_t by, uint8_t * pattern); - -/* internal */ -int -_gnutls_openpgp_privkey_cpy(gnutls_openpgp_privkey_t dest, - gnutls_openpgp_privkey_t src); - -int -_gnutls_openpgp_request_key(gnutls_session_t, - gnutls_datum_t * ret, - const gnutls_certificate_credentials_t cred, - uint8_t * key_fpr, int key_fpr_size); - -int -_gnutls_openpgp_verify_key(const gnutls_certificate_credentials_t cred, - gnutls_x509_subject_alt_name_t type, - const char *hostname, - const gnutls_datum_t * cert_list, - int cert_list_length, - unsigned int verify_flags, - unsigned int *status); -int _gnutls_openpgp_fingerprint(const gnutls_datum_t * cert, - unsigned char *fpr, size_t * fprlen); -time_t _gnutls_openpgp_get_raw_key_creation_time(const gnutls_datum_t * - cert); -time_t _gnutls_openpgp_get_raw_key_expiration_time(const gnutls_datum_t * - cert); - -int -_gnutls_openpgp_privkey_sign_hash(gnutls_openpgp_privkey_t key, - const gnutls_datum_t * hash, - gnutls_datum_t * signature); - - -int -_gnutls_openpgp_privkey_decrypt_data(gnutls_openpgp_privkey_t key, - unsigned int flags, - const gnutls_datum_t * ciphertext, - gnutls_datum_t * plaintext); - -#endif /*GNUTLS_OPENPGP_LOCAL_H */ - -#endif /*ENABLE_OPENPGP */ diff --git a/lib/openpgp/openpgp_int.h b/lib/openpgp/openpgp_int.h deleted file mode 100644 index fa55e3e28f..0000000000 --- a/lib/openpgp/openpgp_int.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz, Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#ifndef OPENPGP_LOCAL_H -#define OPENPGP_LOCAL_H - -#ifdef HAVE_CONFIG_H -#include -#endif - -#ifdef ENABLE_OPENPGP - -#include -#include - -#define KEYID_IMPORT(dst, src) { \ - dst[0] = _gnutls_read_uint32( src); \ - dst[1] = _gnutls_read_uint32( src+4); } - -/* Internal context to store the OpenPGP key. */ -typedef struct gnutls_openpgp_crt_int { - cdk_kbnode_t knode; - uint8_t preferred_keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - int preferred_set; -} gnutls_openpgp_crt_int; - -/* Internal context to store the private OpenPGP key. */ -typedef struct gnutls_openpgp_privkey_int { - cdk_kbnode_t knode; - uint8_t preferred_keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - int preferred_set; -} gnutls_openpgp_privkey_int; - - -typedef struct gnutls_openpgp_keyring_int { - cdk_keydb_hd_t db; -} gnutls_openpgp_keyring_int; - -int _gnutls_map_cdk_rc(int rc); - -int _gnutls_openpgp_export(cdk_kbnode_t node, - gnutls_openpgp_crt_fmt_t format, - void *output_data, size_t * output_data_size, - int priv); - -int _gnutls_openpgp_export2(cdk_kbnode_t node, - gnutls_openpgp_crt_fmt_t format, - gnutls_datum_t * out, int priv); - -cdk_packet_t _gnutls_get_valid_subkey(cdk_kbnode_t knode, int key_type); - -unsigned int _gnutls_get_pgp_key_usage(unsigned int pgp_usage); - -int -_gnutls_openpgp_crt_get_mpis(gnutls_openpgp_crt_t cert, uint32_t keyid[2], - gnutls_pk_params_st * params); - -int -_gnutls_openpgp_privkey_get_mpis(gnutls_openpgp_privkey_t pkey, - uint32_t keyid[2], - gnutls_pk_params_st * params); - -cdk_packet_t _gnutls_openpgp_find_key(cdk_kbnode_t knode, - uint32_t keyid[2], - unsigned int priv); - -int _gnutls_read_pgp_mpi(cdk_packet_t pkt, unsigned int priv, size_t idx, - bigint_t * m); - -int _gnutls_openpgp_find_subkey_idx(cdk_kbnode_t knode, uint32_t keyid[2], - unsigned int priv); - -int _gnutls_openpgp_get_algo(int cdk_algo); - -#endif /* ENABLE_OPENPGP */ - -#endif /* OPENPGP_LOCAL_H */ diff --git a/lib/openpgp/output.c b/lib/openpgp/output.c deleted file mode 100644 index d9127c6150..0000000000 --- a/lib/openpgp/output.c +++ /dev/null @@ -1,589 +0,0 @@ -/* - * Copyright (C) 2007-2012 Free Software Foundation, Inc. - * - * Author: Simon Josefsson, Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* Functions for printing X.509 Certificate structures - */ - -#include "gnutls_int.h" -#include -#include "errors.h" -#include - -#define addf _gnutls_buffer_append_printf -#define adds _gnutls_buffer_append_str - -static void -print_key_usage(gnutls_buffer_st * str, gnutls_openpgp_crt_t cert, - unsigned int idx) -{ - unsigned int key_usage; - int err; - - adds(str, _("\t\tKey Usage:\n")); - - - if (idx == (unsigned int) -1) - err = gnutls_openpgp_crt_get_key_usage(cert, &key_usage); - else - err = - gnutls_openpgp_crt_get_subkey_usage(cert, idx, - &key_usage); - if (err < 0) { - addf(str, _("error: get_key_usage: %s\n"), - gnutls_strerror(err)); - return; - } - - if (key_usage & GNUTLS_KEY_DIGITAL_SIGNATURE) - adds(str, _("\t\t\tDigital signatures.\n")); - if (key_usage & GNUTLS_KEY_KEY_ENCIPHERMENT) - adds(str, _("\t\t\tCommunications encipherment.\n")); - if (key_usage & GNUTLS_KEY_DATA_ENCIPHERMENT) - adds(str, _("\t\t\tStorage data encipherment.\n")); - if (key_usage & GNUTLS_KEY_KEY_AGREEMENT) - adds(str, _("\t\t\tAuthentication.\n")); - if (key_usage & GNUTLS_KEY_KEY_CERT_SIGN) - adds(str, _("\t\t\tCertificate signing.\n")); -} - -/* idx == -1 indicates main key - * otherwise the subkey. - */ -static void -print_key_id(gnutls_buffer_st * str, gnutls_openpgp_crt_t cert, int idx) -{ - gnutls_openpgp_keyid_t id; - int err; - - if (idx < 0) - err = gnutls_openpgp_crt_get_key_id(cert, id); - else - err = gnutls_openpgp_crt_get_subkey_id(cert, idx, id); - - if (err < 0) - addf(str, "error: get_key_id: %s\n", gnutls_strerror(err)); - else { - adds(str, _("\tID (hex): ")); - _gnutls_buffer_hexprint(str, id, sizeof(id)); - addf(str, "\n"); - } - -} - -/* idx == -1 indicates main key - * otherwise the subkey. - */ -static void -print_key_fingerprint(gnutls_buffer_st * str, gnutls_openpgp_crt_t cert) -{ - uint8_t fpr[128]; - size_t fpr_size = sizeof(fpr); - int err; - const char *name; - char *p; - unsigned int bits; - - err = gnutls_openpgp_crt_get_fingerprint(cert, fpr, &fpr_size); - if (err < 0) - addf(str, "error: get_fingerprint: %s\n", - gnutls_strerror(err)); - else { - adds(str, _("\tFingerprint (hex): ")); - _gnutls_buffer_hexprint(str, fpr, fpr_size); - addf(str, "\n"); - } - - err = gnutls_openpgp_crt_get_pk_algorithm(cert, &bits); - if (err < 0) - return; - - name = gnutls_pk_get_name(err); - if (name == NULL) - return; - - p = _gnutls_key_fingerprint_randomart(fpr, fpr_size, name, bits, - "\t\t"); - if (p == NULL) - return; - - adds(str, _("\tFingerprint's random art:\n")); - adds(str, p); - adds(str, "\n"); - - gnutls_free(p); -} - -static void -print_key_revoked(gnutls_buffer_st * str, gnutls_openpgp_crt_t cert, - int idx) -{ - int err; - - if (idx < 0) - err = gnutls_openpgp_crt_get_revoked_status(cert); - else - err = - gnutls_openpgp_crt_get_subkey_revoked_status(cert, - idx); - - if (err != 0) - adds(str, _("\tRevoked: True\n")); - else - adds(str, _("\tRevoked: False\n")); -} - -static void -print_key_times(gnutls_buffer_st * str, gnutls_openpgp_crt_t cert, int idx) -{ - time_t tim; - - adds(str, _("\tTime stamps:\n")); - - if (idx == -1) - tim = gnutls_openpgp_crt_get_creation_time(cert); - else - tim = - gnutls_openpgp_crt_get_subkey_creation_time(cert, idx); - - { - char s[42]; - size_t max = sizeof(s); - struct tm t; - - if (gmtime_r(&tim, &t) == NULL) - addf(str, "error: gmtime_r (%ld)\n", - (unsigned long) tim); - else if (strftime(s, max, "%a %b %d %H:%M:%S UTC %Y", &t) - == 0) - addf(str, "error: strftime (%ld)\n", - (unsigned long) tim); - else - addf(str, _("\t\tCreation: %s\n"), s); - } - - if (idx == -1) - tim = gnutls_openpgp_crt_get_expiration_time(cert); - else - tim = - gnutls_openpgp_crt_get_subkey_expiration_time(cert, - idx); - { - char s[42]; - size_t max = sizeof(s); - struct tm t; - - if (tim == 0) { - adds(str, _("\t\tExpiration: Never\n")); - } else { - if (gmtime_r(&tim, &t) == NULL) - addf(str, "error: gmtime_r (%ld)\n", - (unsigned long) tim); - else if (strftime - (s, max, "%a %b %d %H:%M:%S UTC %Y", - &t) == 0) - addf(str, "error: strftime (%ld)\n", - (unsigned long) tim); - else - addf(str, _("\t\tExpiration: %s\n"), s); - } - } -} - -static void -print_key_info(gnutls_buffer_st * str, gnutls_openpgp_crt_t cert, int idx) -{ - int err; - unsigned int bits; - - if (idx == -1) - err = gnutls_openpgp_crt_get_pk_algorithm(cert, &bits); - else - err = - gnutls_openpgp_crt_get_subkey_pk_algorithm(cert, idx, - &bits); - - if (err < 0) - addf(str, "error: get_pk_algorithm: %s\n", - gnutls_strerror(err)); - else { - const char *name = gnutls_pk_algorithm_get_name(err); - if (name == NULL) - name = _("unknown"); - - addf(str, _("\tPublic Key Algorithm: %s\n"), name); - addf(str, _("\tKey Security Level: %s\n"), - gnutls_sec_param_get_name(gnutls_pk_bits_to_sec_param - (err, bits))); - - switch (err) { - case GNUTLS_PK_RSA: - { - gnutls_datum_t m, e; - - if (idx == -1) - err = - gnutls_openpgp_crt_get_pk_rsa_raw - (cert, &m, &e); - else - err = - gnutls_openpgp_crt_get_subkey_pk_rsa_raw - (cert, idx, &m, &e); - - if (err < 0) - addf(str, - "error: get_pk_rsa_raw: %s\n", - gnutls_strerror(err)); - else { - addf(str, - _("\t\tModulus (bits %d):\n"), - bits); - _gnutls_buffer_hexdump(str, m.data, - m.size, - "\t\t\t"); - adds(str, _("\t\tExponent:\n")); - _gnutls_buffer_hexdump(str, e.data, - e.size, - "\t\t\t"); - - gnutls_free(m.data); - gnutls_free(e.data); - } - - } - break; - - case GNUTLS_PK_DSA: - { - gnutls_datum_t p, q, g, y; - - if (idx == -1) - err = - gnutls_openpgp_crt_get_pk_dsa_raw - (cert, &p, &q, &g, &y); - else - err = - gnutls_openpgp_crt_get_subkey_pk_dsa_raw - (cert, idx, &p, &q, &g, &y); - if (err < 0) - addf(str, - "error: get_pk_dsa_raw: %s\n", - gnutls_strerror(err)); - else { - addf(str, - _ - ("\t\tPublic key (bits %d):\n"), - bits); - adds(str, _("\t\tY:\n")); - _gnutls_buffer_hexdump(str, y.data, - y.size, - "\t\t\t"); - adds(str, _("\t\tP:\n")); - _gnutls_buffer_hexdump(str, p.data, - p.size, - "\t\t\t"); - adds(str, _("\t\tQ:\n")); - _gnutls_buffer_hexdump(str, q.data, - q.size, - "\t\t\t"); - adds(str, _("\t\tG:\n")); - _gnutls_buffer_hexdump(str, g.data, - g.size, - "\t\t\t"); - - gnutls_free(p.data); - gnutls_free(q.data); - gnutls_free(g.data); - gnutls_free(y.data); - adds(str, "\n"); - } - } - break; - - default: - break; - } - } -} - -static void print_cert(gnutls_buffer_st * str, gnutls_openpgp_crt_t cert) -{ - int i, subkeys; - int err; - - print_key_revoked(str, cert, -1); - - /* Version. */ - { - int version = gnutls_openpgp_crt_get_version(cert); - if (version < 0) - addf(str, "error: get_version: %s\n", - gnutls_strerror(version)); - else - addf(str, _("\tVersion: %d\n"), version); - } - - /* ID. */ - print_key_id(str, cert, -1); - - print_key_fingerprint(str, cert); - - /* Names. */ - i = 0; - do { - char *dn; - size_t dn_size = 0; - - err = gnutls_openpgp_crt_get_name(cert, i, NULL, &dn_size); - if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) - break; - - if (err != GNUTLS_E_SHORT_MEMORY_BUFFER) { - addf(str, "error: get_name: %s\n", - gnutls_strerror(err)); - } else { - dn = gnutls_malloc(dn_size); - if (!dn) - addf(str, "error: malloc (%d): %s\n", - (int) dn_size, - gnutls_strerror - (GNUTLS_E_MEMORY_ERROR)); - else { - err = - gnutls_openpgp_crt_get_name(cert, i, - dn, - &dn_size); - if (err < 0 - && err != - GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE - && err != GNUTLS_E_OPENPGP_UID_REVOKED) - addf(str, "error: get_name: %s\n", - gnutls_strerror(err)); - else if (err >= 0) - addf(str, _("\tName[%d]: %s\n"), i, - dn); - else if (err == - GNUTLS_E_OPENPGP_UID_REVOKED) - addf(str, - _("\tRevoked Name[%d]: %s\n"), - i, dn); - - gnutls_free(dn); - } - } - - i++; - } - while (err >= 0); - - print_key_times(str, cert, -1); - - print_key_info(str, cert, -1); - print_key_usage(str, cert, -1); - - subkeys = gnutls_openpgp_crt_get_subkey_count(cert); - if (subkeys < 0) - return; - - for (i = 0; i < subkeys; i++) { - addf(str, _("\n\tSubkey[%d]:\n"), i); - - print_key_revoked(str, cert, i); - print_key_id(str, cert, i); - print_key_times(str, cert, i); - print_key_info(str, cert, i); - print_key_usage(str, cert, i); - } - -} - -static void -print_oneline(gnutls_buffer_st * str, gnutls_openpgp_crt_t cert) -{ - int err, i; - - i = 0; - do { - char *dn; - size_t dn_size = 0; - - err = gnutls_openpgp_crt_get_name(cert, i, NULL, &dn_size); - if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) - break; - - if (err != GNUTLS_E_SHORT_MEMORY_BUFFER) { - addf(str, "unknown name (%s), ", - gnutls_strerror(err)); - } else { - dn = gnutls_malloc(dn_size); - if (!dn) - addf(str, "unknown name (%s), ", - gnutls_strerror - (GNUTLS_E_MEMORY_ERROR)); - else { - err = - gnutls_openpgp_crt_get_name(cert, i, - dn, - &dn_size); - if (err < 0 - && err != - GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE - && err != GNUTLS_E_OPENPGP_UID_REVOKED) - addf(str, "unknown name (%s), ", - gnutls_strerror(err)); - else if (err >= 0) - addf(str, _("name[%d]: %s, "), i, - dn); - else if (err == - GNUTLS_E_OPENPGP_UID_REVOKED) - addf(str, - _("revoked name[%d]: %s, "), - i, dn); - - gnutls_free(dn); - } - } - - i++; - } - while (err >= 0); - - { - char fpr[128]; - size_t fpr_size = sizeof(fpr); - - err = - gnutls_openpgp_crt_get_fingerprint(cert, fpr, - &fpr_size); - if (err < 0) - addf(str, "error: get_fingerprint: %s\n", - gnutls_strerror(err)); - else { - adds(str, _("fingerprint: ")); - _gnutls_buffer_hexprint(str, fpr, fpr_size); - addf(str, ", "); - } - } - - { - time_t tim; - - tim = gnutls_openpgp_crt_get_creation_time(cert); - { - char s[42]; - size_t max = sizeof(s); - struct tm t; - - if (gmtime_r(&tim, &t) == NULL) - addf(str, "error: gmtime_r (%ld), ", - (unsigned long) tim); - else if (strftime - (s, max, "%Y-%m-%d %H:%M:%S UTC", - &t) == 0) - addf(str, "error: strftime (%ld), ", - (unsigned long) tim); - else - addf(str, _("created: %s, "), s); - } - - tim = gnutls_openpgp_crt_get_expiration_time(cert); - { - char s[42]; - size_t max = sizeof(s); - struct tm t; - - if (tim == 0) - adds(str, _("never expires, ")); - else { - if (gmtime_r(&tim, &t) == NULL) - addf(str, - "error: gmtime_r (%ld), ", - (unsigned long) tim); - else if (strftime - (s, max, "%Y-%m-%d %H:%M:%S UTC", - &t) == 0) - addf(str, - "error: strftime (%ld), ", - (unsigned long) tim); - else - addf(str, _("expires: %s, "), s); - } - } - } - - { - unsigned int bits = 0; - gnutls_pk_algorithm_t algo = - gnutls_openpgp_crt_get_pk_algorithm(cert, &bits); - const char *algostr = gnutls_pk_algorithm_get_name(algo); - - if (algostr) - addf(str, _("key algorithm %s (%d bits)"), algostr, - bits); - else - addf(str, _("unknown key algorithm (%d)"), algo); - } -} - -/** - * gnutls_openpgp_crt_print: - * @cert: The structure to be printed - * @format: Indicate the format to use - * @out: Newly allocated datum with (0) terminated string. - * - * This function will pretty print an OpenPGP certificate, suitable - * for display to a human. - * - * The format should be (0) for future compatibility. - * - * The output @out needs to be deallocate using gnutls_free(). - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int -gnutls_openpgp_crt_print(gnutls_openpgp_crt_t cert, - gnutls_certificate_print_formats_t format, - gnutls_datum_t * out) -{ - gnutls_buffer_st str; - int ret; - - _gnutls_buffer_init(&str); - - if (format == GNUTLS_CRT_PRINT_ONELINE) { - print_oneline(&str, cert); - } else if (format == GNUTLS_CRT_PRINT_COMPACT) { - print_oneline(&str, cert); - - ret = _gnutls_buffer_append_data(&str, "\n", 1); - if (ret < 0) - return gnutls_assert_val(ret); - - print_key_fingerprint(&str, cert); - } else { - _gnutls_buffer_append_str(&str, - _ - ("OpenPGP Certificate Information:\n")); - print_cert(&str, cert); - } - - return _gnutls_buffer_to_datum(&str, out, 1); -} diff --git a/lib/openpgp/pgp.c b/lib/openpgp/pgp.c deleted file mode 100644 index 03a507d4c4..0000000000 --- a/lib/openpgp/pgp.c +++ /dev/null @@ -1,1780 +0,0 @@ -/* - * Copyright (C) 2002-2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz, Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* Functions on OpenPGP key parsing - */ - -#include "gnutls_int.h" -#include -#include -#include "errors.h" -#include -#include -#include -#include - -/** - * gnutls_openpgp_crt_init: - * @key: A pointer to the type to be initialized - * - * This function will initialize an OpenPGP key structure. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int gnutls_openpgp_crt_init(gnutls_openpgp_crt_t * key) -{ - *key = gnutls_calloc(1, sizeof(gnutls_openpgp_crt_int)); - - if (*key) - return 0; /* success */ - return GNUTLS_E_MEMORY_ERROR; -} - -/** - * gnutls_openpgp_crt_deinit: - * @key: A pointer to the type to be initialized - * - * This function will deinitialize a key structure. - **/ -void gnutls_openpgp_crt_deinit(gnutls_openpgp_crt_t key) -{ - if (!key) - return; - - if (key->knode) { - cdk_kbnode_release(key->knode); - key->knode = NULL; - } - - gnutls_free(key); -} - -/** - * gnutls_openpgp_crt_import: - * @key: The structure to store the parsed key. - * @data: The RAW or BASE64 encoded key. - * @format: One of gnutls_openpgp_crt_fmt_t elements. - * - * This function will convert the given RAW or Base64 encoded key to - * the native #gnutls_openpgp_crt_t format. The output will be stored - * in 'key'. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int -gnutls_openpgp_crt_import(gnutls_openpgp_crt_t key, - const gnutls_datum_t * data, - gnutls_openpgp_crt_fmt_t format) -{ - cdk_packet_t pkt; - int rc, armor; - - if (data->data == NULL || data->size == 0) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - if (format == GNUTLS_OPENPGP_FMT_RAW) - armor = 0; - else - armor = 1; - - rc = cdk_kbnode_read_from_mem(&key->knode, armor, data->data, - data->size, 1); - if (rc) { - rc = _gnutls_map_cdk_rc(rc); - gnutls_assert(); - return rc; - } - - /* Test if the import was successful. */ - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_PUBLIC_KEY); - if (pkt == NULL) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - return 0; -} - -int _gnutls_openpgp_export2(cdk_kbnode_t node, - gnutls_openpgp_crt_fmt_t format, - gnutls_datum_t * out, int priv) -{ - int ret; - size_t size = 0; - - ret = _gnutls_openpgp_export(node, format, NULL, &size, priv); - if (ret == GNUTLS_E_SHORT_MEMORY_BUFFER) { - out->data = gnutls_malloc(size); - - ret = - _gnutls_openpgp_export(node, format, out->data, &size, - priv); - if (ret < 0) { - gnutls_free(out->data); - return gnutls_assert_val(ret); - } - out->size = size; - } else if (ret < 0) - return gnutls_assert_val(ret); - - return 0; -} - -/* internal version of export - */ -int -_gnutls_openpgp_export(cdk_kbnode_t node, - gnutls_openpgp_crt_fmt_t format, - void *output_data, - size_t * output_data_size, int priv) -{ - size_t input_data_size = *output_data_size; - size_t calc_size; - int rc; - - rc = cdk_kbnode_write_to_mem(node, output_data, output_data_size); - if (rc) { - rc = _gnutls_map_cdk_rc(rc); - gnutls_assert(); - return rc; - } - - /* If the caller uses output_data == NULL then return what he expects. - */ - if (!output_data && format != GNUTLS_OPENPGP_FMT_BASE64) { - gnutls_assert(); - return GNUTLS_E_SHORT_MEMORY_BUFFER; - } - - if (format == GNUTLS_OPENPGP_FMT_BASE64) { - unsigned char *in = gnutls_calloc(1, *output_data_size); - if (in == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - - rc = cdk_kbnode_write_to_mem(node, in, output_data_size); - if (rc) { - gnutls_free(in); - rc = _gnutls_map_cdk_rc(rc); - gnutls_assert(); - return rc; - } - - /* Calculate the size of the encoded data and check if the provided - buffer is large enough. */ - rc = cdk_armor_encode_buffer(in, *output_data_size, - NULL, 0, &calc_size, - priv ? CDK_ARMOR_SECKEY : - CDK_ARMOR_PUBKEY); - if (rc || calc_size > input_data_size) { - gnutls_free(in); - *output_data_size = calc_size; - gnutls_assert(); - return GNUTLS_E_SHORT_MEMORY_BUFFER; - } - - rc = cdk_armor_encode_buffer(in, *output_data_size, - output_data, input_data_size, - &calc_size, - priv ? CDK_ARMOR_SECKEY : - CDK_ARMOR_PUBKEY); - gnutls_free(in); - *output_data_size = calc_size; - - if (rc) { - rc = _gnutls_map_cdk_rc(rc); - gnutls_assert(); - return rc; - } - } - - return 0; - -} - -/** - * gnutls_openpgp_crt_export: - * @key: Holds the key. - * @format: One of gnutls_openpgp_crt_fmt_t elements. - * @output_data: will contain the raw or base64 encoded key - * @output_data_size: holds the size of output_data (and will - * be replaced by the actual size of parameters) - * - * This function will convert the given key to RAW or Base64 format. - * If the buffer provided is not long enough to hold the output, then - * %GNUTLS_E_SHORT_MEMORY_BUFFER will be returned. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int -gnutls_openpgp_crt_export(gnutls_openpgp_crt_t key, - gnutls_openpgp_crt_fmt_t format, - void *output_data, size_t * output_data_size) -{ - return _gnutls_openpgp_export(key->knode, format, output_data, - output_data_size, 0); -} - -/** - * gnutls_openpgp_crt_export2: - * @key: Holds the key. - * @format: One of gnutls_openpgp_crt_fmt_t elements. - * @out: will contain the raw or base64 encoded key - * - * This function will convert the given key to RAW or Base64 format. - * The output buffer is allocated using gnutls_malloc(). - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - * - * Since: 3.1.3 - **/ -int -gnutls_openpgp_crt_export2(gnutls_openpgp_crt_t key, - gnutls_openpgp_crt_fmt_t format, - gnutls_datum_t * out) -{ - return _gnutls_openpgp_export2(key->knode, format, out, 0); -} - -/** - * gnutls_openpgp_crt_get_fingerprint: - * @key: the raw data that contains the OpenPGP public key. - * @fpr: the buffer to save the fingerprint, must hold at least 20 bytes. - * @fprlen: the integer to save the length of the fingerprint. - * - * Get key fingerprint. Depending on the algorithm, the fingerprint - * can be 16 or 20 bytes. - * - * Returns: On success, 0 is returned. Otherwise, an error code. - **/ -int -gnutls_openpgp_crt_get_fingerprint(gnutls_openpgp_crt_t key, - void *fpr, size_t * fprlen) -{ - cdk_packet_t pkt; - cdk_pkt_pubkey_t pk = NULL; - - if (!fpr || !fprlen) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - *fprlen = 0; - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_PUBLIC_KEY); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - pk = pkt->pkt.public_key; - *fprlen = 20; - - /* FIXME: Check if the draft allows old PGP keys. */ - if (is_RSA(pk->pubkey_algo) && pk->version < 4) - *fprlen = 16; - cdk_pk_get_fingerprint(pk, fpr); - - return 0; -} - -static int _gnutls_openpgp_count_key_names(gnutls_openpgp_crt_t key) -{ - cdk_kbnode_t p, ctx; - cdk_packet_t pkt; - int nuids; - - if (key == NULL) { - gnutls_assert(); - return 0; - } - - ctx = NULL; - nuids = 0; - while ((p = cdk_kbnode_walk(key->knode, &ctx, 0))) { - pkt = cdk_kbnode_get_packet(p); - if (pkt->pkttype == CDK_PKT_USER_ID) - nuids++; - } - - return nuids; -} - - -/** - * gnutls_openpgp_crt_get_name: - * @key: the structure that contains the OpenPGP public key. - * @idx: the index of the ID to extract - * @buf: a pointer to a structure to hold the name, may be %NULL - * to only get the @sizeof_buf. - * @sizeof_buf: holds the maximum size of @buf, on return hold the - * actual/required size of @buf. - * - * Extracts the userID from the parsed OpenPGP key. - * - * Returns: %GNUTLS_E_SUCCESS on success, and if the index of the ID - * does not exist %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE, or an - * error code. - **/ -int -gnutls_openpgp_crt_get_name(gnutls_openpgp_crt_t key, - int idx, char *buf, size_t * sizeof_buf) -{ - cdk_kbnode_t ctx = NULL, p; - cdk_packet_t pkt = NULL; - cdk_pkt_userid_t uid = NULL; - int pos = 0; - - if (!key) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (idx < 0 || idx >= _gnutls_openpgp_count_key_names(key)) - return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; - - pos = 0; - while ((p = cdk_kbnode_walk(key->knode, &ctx, 0))) { - pkt = cdk_kbnode_get_packet(p); - if (pkt->pkttype == CDK_PKT_USER_ID) { - if (pos == idx) - break; - pos++; - } - } - - if (!pkt) { - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - - uid = pkt->pkt.user_id; - if (uid->len >= *sizeof_buf) { - gnutls_assert(); - *sizeof_buf = uid->len + 1; - return GNUTLS_E_SHORT_MEMORY_BUFFER; - } - - if (buf) { - memcpy(buf, uid->name, uid->len); - buf[uid->len] = '\0'; /* make sure it's a string */ - } - *sizeof_buf = uid->len + 1; - - if (uid->is_revoked) - return GNUTLS_E_OPENPGP_UID_REVOKED; - - return 0; -} - -/** - * gnutls_openpgp_crt_get_pk_algorithm: - * @key: is an OpenPGP key - * @bits: if bits is non null it will hold the size of the parameters' in bits - * - * This function will return the public key algorithm of an OpenPGP - * certificate. - * - * If bits is non null, it should have enough size to hold the parameters - * size in bits. For RSA the bits returned is the modulus. - * For DSA the bits returned are of the public exponent. - * - * Returns: a member of the #gnutls_pk_algorithm_t enumeration on - * success, or GNUTLS_PK_UNKNOWN on error. - **/ -gnutls_pk_algorithm_t -gnutls_openpgp_crt_get_pk_algorithm(gnutls_openpgp_crt_t key, - unsigned int *bits) -{ - cdk_packet_t pkt; - int algo = 0, ret; - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - - if (!key) { - gnutls_assert(); - return GNUTLS_PK_UNKNOWN; - } - - ret = gnutls_openpgp_crt_get_preferred_key_id(key, keyid); - if (ret == 0) { - int idx; - - idx = gnutls_openpgp_crt_get_subkey_idx(key, keyid); - if (idx != GNUTLS_OPENPGP_MASTER_KEYID_IDX) { - algo = - gnutls_openpgp_crt_get_subkey_pk_algorithm(key, - idx, - bits); - return algo; - } - } - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_PUBLIC_KEY); - if (pkt) { - if (bits) - *bits = cdk_pk_get_nbits(pkt->pkt.public_key); - algo = - _gnutls_openpgp_get_algo(pkt->pkt.public_key-> - pubkey_algo); - } - - return algo; -} - - -/** - * gnutls_openpgp_crt_get_version: - * @key: the structure that contains the OpenPGP public key. - * - * Extract the version of the OpenPGP key. - * - * Returns: the version number is returned, or a negative error code on errors. - **/ -int gnutls_openpgp_crt_get_version(gnutls_openpgp_crt_t key) -{ - cdk_packet_t pkt; - int version; - - if (!key) - return -1; - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_PUBLIC_KEY); - if (pkt) - version = pkt->pkt.public_key->version; - else - version = 0; - - return version; -} - - -/** - * gnutls_openpgp_crt_get_creation_time: - * @key: the structure that contains the OpenPGP public key. - * - * Get key creation time. - * - * Returns: the timestamp when the OpenPGP key was created. - **/ -time_t gnutls_openpgp_crt_get_creation_time(gnutls_openpgp_crt_t key) -{ - cdk_packet_t pkt; - time_t timestamp; - - if (!key) - return (time_t) - 1; - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_PUBLIC_KEY); - if (pkt) - timestamp = pkt->pkt.public_key->timestamp; - else - timestamp = 0; - - return timestamp; -} - - -/** - * gnutls_openpgp_crt_get_expiration_time: - * @key: the structure that contains the OpenPGP public key. - * - * Get key expiration time. A value of '0' means that the key doesn't - * expire at all. - * - * Returns: the time when the OpenPGP key expires. - **/ -time_t gnutls_openpgp_crt_get_expiration_time(gnutls_openpgp_crt_t key) -{ - cdk_packet_t pkt; - time_t expiredate; - - if (!key) - return (time_t) - 1; - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_PUBLIC_KEY); - if (pkt) - expiredate = pkt->pkt.public_key->expiredate; - else - expiredate = 0; - - return expiredate; -} - -/** - * gnutls_openpgp_crt_get_key_id: - * @key: the structure that contains the OpenPGP public key. - * @keyid: the buffer to save the keyid. - * - * Get key id string. - * - * Returns: the 64-bit keyID of the OpenPGP key. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_crt_get_key_id(gnutls_openpgp_crt_t key, - gnutls_openpgp_keyid_t keyid) -{ - cdk_packet_t pkt; - uint32_t kid[2]; - - if (!key || !keyid) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_PUBLIC_KEY); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - cdk_pk_get_keyid(pkt->pkt.public_key, kid); - _gnutls_write_uint32(kid[0], keyid); - _gnutls_write_uint32(kid[1], keyid + 4); - - return 0; -} - -/** - * gnutls_openpgp_crt_get_revoked_status: - * @key: the structure that contains the OpenPGP public key. - * - * Get revocation status of key. - * - * Returns: true (1) if the key has been revoked, or false (0) if it - * has not. - * - * Since: 2.4.0 - **/ -int gnutls_openpgp_crt_get_revoked_status(gnutls_openpgp_crt_t key) -{ - cdk_packet_t pkt; - - if (!key) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_PUBLIC_KEY); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - if (pkt->pkt.public_key->is_revoked != 0) - return 1; - return 0; -} - -/** - * gnutls_openpgp_crt_check_hostname: - * @key: should contain a #gnutls_openpgp_crt_t type - * @hostname: A null terminated string that contains a DNS name - * - * This function will check if the given key's owner matches the - * given hostname. This is a basic implementation of the matching - * described in RFC2818 (HTTPS), which takes into account wildcards. - * - * Returns: non-zero for a successful match, and zero on failure. - **/ -int -gnutls_openpgp_crt_check_hostname(gnutls_openpgp_crt_t key, - const char *hostname) -{ - return gnutls_openpgp_crt_check_hostname2(key, hostname, 0); -} - -/** - * gnutls_openpgp_crt_check_hostname2: - * @key: should contain a #gnutls_openpgp_crt_t type - * @hostname: A null terminated string that contains a DNS name - * @flags: gnutls_certificate_verify_flags - * - * This function will check if the given key's owner matches the - * given hostname. - * - * Unless, the flag %GNUTLS_VERIFY_DO_NOT_ALLOW_WILDCARDS is specified, - * wildcards are only considered if the domain name consists of three - * components or more, and the wildcard starts at the leftmost position. - * - * Returns: non-zero for a successful match, and zero on failure. - **/ -int -gnutls_openpgp_crt_check_hostname2(gnutls_openpgp_crt_t key, - const char *hostname, unsigned flags) -{ - char dnsname[MAX_CN]; - size_t dnsnamesize; - int ret = 0; - int i; - - /* Check through all included names. */ - for (i = 0; !(ret < 0); i++) { - dnsnamesize = sizeof(dnsname); - ret = - gnutls_openpgp_crt_get_name(key, i, dnsname, - &dnsnamesize); - - if (ret == 0) { - /* Length returned by gnutls_openpgp_crt_get_name includes - the terminating (0). */ - dnsnamesize--; - - if (_gnutls_hostname_compare - (dnsname, dnsnamesize, hostname, flags)) - return 1; - } - } - - /* not found a matching name */ - return 0; -} - -/** - * gnutls_openpgp_crt_check_email: - * @key: should contain a #gnutls_openpgp_crt_t type - * @email: A null terminated string that contains an RFC822 address (email) - * @flags: gnutls_certificate_verify_flags - * - * This function will check if the given key's owner matches the - * given email address. - * - * Returns: non-zero for a successful match, and zero on failure. - **/ -int -gnutls_openpgp_crt_check_email(gnutls_openpgp_crt_t key, - const char *email, unsigned flags) -{ - char rfc822name[MAX_CN]; - size_t rfc822name_size; - int ret = 0; - int i; - - /* Check through all included names. */ - for (i = 0; !(ret < 0); i++) { - rfc822name_size = sizeof(rfc822name); - ret = - gnutls_openpgp_crt_get_name(key, i, rfc822name, - &rfc822name_size); - - if (ret == 0) { - /* Length returned by gnutls_openpgp_crt_get_name includes - the terminating (0). */ - rfc822name_size--; - - if (_gnutls_hostname_compare - (rfc822name, rfc822name_size, email, GNUTLS_VERIFY_DO_NOT_ALLOW_WILDCARDS)) - return 1; - } - } - - /* not found a matching name */ - return 0; -} - -unsigned int _gnutls_get_pgp_key_usage(unsigned int cdk_usage) -{ - unsigned int usage = 0; - - if (cdk_usage & CDK_KEY_USG_CERT_SIGN) - usage |= GNUTLS_KEY_KEY_CERT_SIGN; - if (cdk_usage & CDK_KEY_USG_DATA_SIGN) - usage |= GNUTLS_KEY_DIGITAL_SIGNATURE; - if (cdk_usage & CDK_KEY_USG_COMM_ENCR) - usage |= GNUTLS_KEY_KEY_ENCIPHERMENT; - if (cdk_usage & CDK_KEY_USG_STORAGE_ENCR) - usage |= GNUTLS_KEY_DATA_ENCIPHERMENT; - if (cdk_usage & CDK_KEY_USG_AUTH) - usage |= GNUTLS_KEY_KEY_AGREEMENT; - - return usage; -} - -/** - * gnutls_openpgp_crt_get_key_usage: - * @key: should contain a gnutls_openpgp_crt_t type - * @key_usage: where the key usage bits will be stored - * - * This function will return certificate's key usage, by checking the - * key algorithm. The key usage value will ORed values of the: - * %GNUTLS_KEY_DIGITAL_SIGNATURE, %GNUTLS_KEY_KEY_ENCIPHERMENT. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - */ -int -gnutls_openpgp_crt_get_key_usage(gnutls_openpgp_crt_t key, - unsigned int *key_usage) -{ - cdk_packet_t pkt; - - if (!key) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_PUBLIC_KEY); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - *key_usage = - _gnutls_get_pgp_key_usage(pkt->pkt.public_key->pubkey_usage); - - return 0; -} - -/** - * gnutls_openpgp_crt_get_subkey_count: - * @key: is an OpenPGP key - * - * This function will return the number of subkeys present in the - * given OpenPGP certificate. - * - * Returns: the number of subkeys, or a negative error code on error. - * - * Since: 2.4.0 - **/ -int gnutls_openpgp_crt_get_subkey_count(gnutls_openpgp_crt_t key) -{ - cdk_kbnode_t p, ctx; - cdk_packet_t pkt; - int subkeys; - - if (key == NULL) { - gnutls_assert(); - return 0; - } - - ctx = NULL; - subkeys = 0; - while ((p = cdk_kbnode_walk(key->knode, &ctx, 0))) { - pkt = cdk_kbnode_get_packet(p); - if (pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY) - subkeys++; - } - - return subkeys; -} - -/* returns the subkey with the given index */ -static cdk_packet_t -_get_public_subkey(gnutls_openpgp_crt_t key, unsigned int indx) -{ - cdk_kbnode_t p, ctx; - cdk_packet_t pkt; - unsigned int subkeys; - - if (key == NULL) { - gnutls_assert(); - return NULL; - } - - ctx = NULL; - subkeys = 0; - while ((p = cdk_kbnode_walk(key->knode, &ctx, 0))) { - pkt = cdk_kbnode_get_packet(p); - if (pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY - && indx == subkeys++) - return pkt; - } - - return NULL; -} - -/* returns the key with the given keyid. It can be either key or subkey. - * depending on what requested: - * pkt->pkt.secret_key; - * pkt->pkt.public_key; - */ -cdk_packet_t -_gnutls_openpgp_find_key(cdk_kbnode_t knode, uint32_t keyid[2], - unsigned int priv) -{ - cdk_kbnode_t p, ctx; - cdk_packet_t pkt; - uint32_t local_keyid[2]; - - ctx = NULL; - while ((p = cdk_kbnode_walk(knode, &ctx, 0))) { - pkt = cdk_kbnode_get_packet(p); - - if ((priv == 0 - && (pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY - || pkt->pkttype == CDK_PKT_PUBLIC_KEY)) - || (priv != 0 - && (pkt->pkttype == CDK_PKT_SECRET_SUBKEY - || pkt->pkttype == CDK_PKT_SECRET_KEY))) { - if (priv == 0) - cdk_pk_get_keyid(pkt->pkt.public_key, - local_keyid); - else - cdk_pk_get_keyid(pkt->pkt.secret_key->pk, - local_keyid); - - if (local_keyid[0] == keyid[0] - && local_keyid[1] == keyid[1]) { - return pkt; - } - } - } - - gnutls_assert(); - return NULL; -} - -/* returns the key with the given keyid - * depending on what requested: - * pkt->pkt.secret_key; - * pkt->pkt.public_key; - */ -int -_gnutls_openpgp_find_subkey_idx(cdk_kbnode_t knode, uint32_t keyid[2], - unsigned int priv) -{ - cdk_kbnode_t p, ctx; - cdk_packet_t pkt; - int i = 0; - uint32_t local_keyid[2]; - - _gnutls_hard_log("Looking keyid: %x.%x\n", keyid[0], keyid[1]); - - ctx = NULL; - while ((p = cdk_kbnode_walk(knode, &ctx, 0))) { - pkt = cdk_kbnode_get_packet(p); - - if ((priv == 0 && (pkt->pkttype == CDK_PKT_PUBLIC_SUBKEY)) - || (priv != 0 - && (pkt->pkttype == CDK_PKT_SECRET_SUBKEY))) { - if (priv == 0) - cdk_pk_get_keyid(pkt->pkt.public_key, - local_keyid); - else - cdk_pk_get_keyid(pkt->pkt.secret_key->pk, - local_keyid); - - _gnutls_hard_log("Found keyid: %x.%x\n", - local_keyid[0], local_keyid[1]); - if (local_keyid[0] == keyid[0] - && local_keyid[1] == keyid[1]) { - return i; - } - i++; - } - } - - gnutls_assert(); - return GNUTLS_E_OPENPGP_SUBKEY_ERROR; -} - -/** - * gnutls_openpgp_crt_get_subkey_revoked_status: - * @key: the structure that contains the OpenPGP public key. - * @idx: is the subkey index - * - * Get subkey revocation status. A negative error code indicates an error. - * - * Returns: true (1) if the key has been revoked, or false (0) if it - * has not. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_crt_get_subkey_revoked_status(gnutls_openpgp_crt_t key, - unsigned int idx) -{ - cdk_packet_t pkt; - - if (!key) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_crt_get_revoked_status(key); - - pkt = _get_public_subkey(key, idx); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - if (pkt->pkt.public_key->is_revoked != 0) - return 1; - return 0; -} - -/** - * gnutls_openpgp_crt_get_subkey_pk_algorithm: - * @key: is an OpenPGP key - * @idx: is the subkey index - * @bits: if bits is non null it will hold the size of the parameters' in bits - * - * This function will return the public key algorithm of a subkey of an OpenPGP - * certificate. - * - * If bits is non null, it should have enough size to hold the - * parameters size in bits. For RSA the bits returned is the modulus. - * For DSA the bits returned are of the public exponent. - * - * Returns: a member of the #gnutls_pk_algorithm_t enumeration on - * success, or GNUTLS_PK_UNKNOWN on error. - * - * Since: 2.4.0 - **/ -gnutls_pk_algorithm_t -gnutls_openpgp_crt_get_subkey_pk_algorithm(gnutls_openpgp_crt_t key, - unsigned int idx, - unsigned int *bits) -{ - cdk_packet_t pkt; - int algo; - - if (!key) { - gnutls_assert(); - return GNUTLS_PK_UNKNOWN; - } - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_crt_get_pk_algorithm(key, bits); - - pkt = _get_public_subkey(key, idx); - - algo = 0; - if (pkt) { - if (bits) - *bits = cdk_pk_get_nbits(pkt->pkt.public_key); - algo = - _gnutls_openpgp_get_algo(pkt->pkt.public_key-> - pubkey_algo); - } - - return algo; -} - -/** - * gnutls_openpgp_crt_get_subkey_creation_time: - * @key: the structure that contains the OpenPGP public key. - * @idx: the subkey index - * - * Get subkey creation time. - * - * Returns: the timestamp when the OpenPGP sub-key was created. - * - * Since: 2.4.0 - **/ -time_t -gnutls_openpgp_crt_get_subkey_creation_time(gnutls_openpgp_crt_t key, - unsigned int idx) -{ - cdk_packet_t pkt; - time_t timestamp; - - if (!key) - return (time_t) - 1; - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_crt_get_creation_time(key); - - pkt = _get_public_subkey(key, idx); - if (pkt) - timestamp = pkt->pkt.public_key->timestamp; - else - timestamp = 0; - - return timestamp; -} - - -/** - * gnutls_openpgp_crt_get_subkey_expiration_time: - * @key: the structure that contains the OpenPGP public key. - * @idx: the subkey index - * - * Get subkey expiration time. A value of '0' means that the key - * doesn't expire at all. - * - * Returns: the time when the OpenPGP key expires. - * - * Since: 2.4.0 - **/ -time_t -gnutls_openpgp_crt_get_subkey_expiration_time(gnutls_openpgp_crt_t key, - unsigned int idx) -{ - cdk_packet_t pkt; - time_t expiredate; - - if (!key) - return (time_t) - 1; - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_crt_get_expiration_time(key); - - pkt = _get_public_subkey(key, idx); - if (pkt) - expiredate = pkt->pkt.public_key->expiredate; - else - expiredate = 0; - - return expiredate; -} - -/** - * gnutls_openpgp_crt_get_subkey_id: - * @key: the structure that contains the OpenPGP public key. - * @idx: the subkey index - * @keyid: the buffer to save the keyid. - * - * Get the subkey's key-id. - * - * Returns: the 64-bit keyID of the OpenPGP key. - **/ -int -gnutls_openpgp_crt_get_subkey_id(gnutls_openpgp_crt_t key, - unsigned int idx, - gnutls_openpgp_keyid_t keyid) -{ - cdk_packet_t pkt; - uint32_t kid[2]; - - if (!key || !keyid) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_crt_get_key_id(key, keyid); - - pkt = _get_public_subkey(key, idx); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - cdk_pk_get_keyid(pkt->pkt.public_key, kid); - _gnutls_write_uint32(kid[0], keyid); - _gnutls_write_uint32(kid[1], keyid + 4); - - return 0; -} - -/** - * gnutls_openpgp_crt_get_subkey_fingerprint: - * @key: the raw data that contains the OpenPGP public key. - * @idx: the subkey index - * @fpr: the buffer to save the fingerprint, must hold at least 20 bytes. - * @fprlen: the integer to save the length of the fingerprint. - * - * Get key fingerprint of a subkey. Depending on the algorithm, the - * fingerprint can be 16 or 20 bytes. - * - * Returns: On success, 0 is returned. Otherwise, an error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_crt_get_subkey_fingerprint(gnutls_openpgp_crt_t key, - unsigned int idx, - void *fpr, size_t * fprlen) -{ - cdk_packet_t pkt; - cdk_pkt_pubkey_t pk = NULL; - - if (!fpr || !fprlen) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_crt_get_fingerprint(key, fpr, - fprlen); - - *fprlen = 0; - - pkt = _get_public_subkey(key, idx); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - pk = pkt->pkt.public_key; - *fprlen = 20; - - /* FIXME: Check if the draft allows old PGP keys. */ - if (is_RSA(pk->pubkey_algo) && pk->version < 4) - *fprlen = 16; - cdk_pk_get_fingerprint(pk, fpr); - - return 0; -} - -/** - * gnutls_openpgp_crt_get_subkey_idx: - * @key: the structure that contains the OpenPGP public key. - * @keyid: the keyid. - * - * Get subkey's index. - * - * Returns: the index of the subkey or a negative error value. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_crt_get_subkey_idx(gnutls_openpgp_crt_t key, - const gnutls_openpgp_keyid_t keyid) -{ - int ret; - uint32_t kid[2]; - uint8_t master_id[GNUTLS_OPENPGP_KEYID_SIZE]; - - if (!key) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - ret = gnutls_openpgp_crt_get_key_id(key, master_id); - if (ret < 0) - return gnutls_assert_val(ret); - if (memcmp(master_id, keyid, GNUTLS_OPENPGP_KEYID_SIZE) == 0) - return GNUTLS_OPENPGP_MASTER_KEYID_IDX; - - KEYID_IMPORT(kid, keyid); - ret = _gnutls_openpgp_find_subkey_idx(key->knode, kid, 0); - - if (ret < 0) { - gnutls_assert(); - } - - return ret; -} - -/** - * gnutls_openpgp_crt_get_subkey_usage: - * @key: should contain a gnutls_openpgp_crt_t type - * @idx: the subkey index - * @key_usage: where the key usage bits will be stored - * - * This function will return certificate's key usage, by checking the - * key algorithm. The key usage value will ORed values of - * %GNUTLS_KEY_DIGITAL_SIGNATURE or %GNUTLS_KEY_KEY_ENCIPHERMENT. - * - * A negative error code may be returned in case of parsing error. - * - * Returns: key usage value. - * - * Since: 2.4.0 - */ -int -gnutls_openpgp_crt_get_subkey_usage(gnutls_openpgp_crt_t key, - unsigned int idx, - unsigned int *key_usage) -{ - cdk_packet_t pkt; - - if (!key) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_crt_get_key_usage(key, key_usage); - - pkt = _get_public_subkey(key, idx); - if (!pkt) - return GNUTLS_E_OPENPGP_SUBKEY_ERROR; - - *key_usage = - _gnutls_get_pgp_key_usage(pkt->pkt.public_key->pubkey_usage); - - return 0; -} - -int -_gnutls_read_pgp_mpi(cdk_packet_t pkt, unsigned int priv, size_t idx, - bigint_t * m) -{ - size_t buf_size = 512; - uint8_t *buf = gnutls_malloc(buf_size); - int err; - unsigned int max_pub_params = 0; - - if (priv != 0) - max_pub_params = - cdk_pk_get_npkey(pkt->pkt.secret_key->pk->pubkey_algo); - - if (buf == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - /* FIXME: Note that opencdk doesn't like the buf to be NULL. - */ - if (priv == 0) - err = - cdk_pk_get_mpi(pkt->pkt.public_key, idx, buf, buf_size, - &buf_size, NULL); - else { - if (idx < max_pub_params) - err = - cdk_pk_get_mpi(pkt->pkt.secret_key->pk, idx, - buf, buf_size, &buf_size, NULL); - else { - err = - cdk_sk_get_mpi(pkt->pkt.secret_key, - idx - max_pub_params, buf, - buf_size, &buf_size, NULL); - } - } - - if (err == CDK_Too_Short) { - buf = gnutls_realloc_fast(buf, buf_size); - if (buf == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - if (priv == 0) - err = - cdk_pk_get_mpi(pkt->pkt.public_key, idx, buf, - buf_size, &buf_size, NULL); - else { - if (idx < max_pub_params) - err = - cdk_pk_get_mpi(pkt->pkt.secret_key->pk, - idx, buf, buf_size, - &buf_size, NULL); - else { - err = - cdk_sk_get_mpi(pkt->pkt.secret_key, - idx - max_pub_params, - buf, buf_size, - &buf_size, NULL); - } - } - } - - if (err != CDK_Success) { - gnutls_assert(); - gnutls_free(buf); - return _gnutls_map_cdk_rc(err); - } - - err = _gnutls_mpi_init_scan(m, buf, buf_size); - gnutls_free(buf); - - if (err < 0) { - gnutls_assert(); - return err; - } - - return 0; -} - - -/* Extracts DSA and RSA parameters from a certificate. - */ -int -_gnutls_openpgp_crt_get_mpis(gnutls_openpgp_crt_t cert, - uint32_t * keyid /* [2] */ , - gnutls_pk_params_st * params) -{ - int result, i; - int pk_algorithm, local_params; - cdk_packet_t pkt; - - if (keyid == NULL) - pkt = - cdk_kbnode_find_packet(cert->knode, - CDK_PKT_PUBLIC_KEY); - else - pkt = _gnutls_openpgp_find_key(cert->knode, keyid, 0); - - if (pkt == NULL) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - pk_algorithm = - _gnutls_openpgp_get_algo(pkt->pkt.public_key->pubkey_algo); - - switch (pk_algorithm) { - case GNUTLS_PK_RSA: - local_params = RSA_PUBLIC_PARAMS; - break; - case GNUTLS_PK_DSA: - local_params = DSA_PUBLIC_PARAMS; - break; - default: - gnutls_assert(); - return GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; - } - - gnutls_pk_params_init(params); - - for (i = 0; i < local_params; i++) { - result = - _gnutls_read_pgp_mpi(pkt, 0, i, ¶ms->params[i]); - if (result < 0) { - gnutls_assert(); - goto error; - } - params->params_nr++; - } - - return 0; - - error: - gnutls_pk_params_release(params); - - return result; -} - -/* The internal version of export - */ -static int -_get_pk_rsa_raw(gnutls_openpgp_crt_t crt, gnutls_openpgp_keyid_t keyid, - gnutls_datum_t * m, gnutls_datum_t * e) -{ - int pk_algorithm, ret; - cdk_packet_t pkt; - uint32_t kid32[2]; - gnutls_pk_params_st params; - - gnutls_pk_params_init(¶ms); - - if (crt == NULL) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - KEYID_IMPORT(kid32, keyid); - - pkt = _gnutls_openpgp_find_key(crt->knode, kid32, 0); - if (pkt == NULL) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - pk_algorithm = - _gnutls_openpgp_get_algo(pkt->pkt.public_key->pubkey_algo); - - if (pk_algorithm != GNUTLS_PK_RSA) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - ret = _gnutls_openpgp_crt_get_mpis(crt, kid32, ¶ms); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - ret = _gnutls_mpi_dprint(params.params[0], m); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = _gnutls_mpi_dprint(params.params[1], e); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(m); - goto cleanup; - } - - ret = 0; - - cleanup: - gnutls_pk_params_release(¶ms); - return ret; -} - -static int -_get_pk_dsa_raw(gnutls_openpgp_crt_t crt, gnutls_openpgp_keyid_t keyid, - gnutls_datum_t * p, gnutls_datum_t * q, - gnutls_datum_t * g, gnutls_datum_t * y) -{ - int pk_algorithm, ret; - cdk_packet_t pkt; - uint32_t kid32[2]; - gnutls_pk_params_st params; - - gnutls_pk_params_init(¶ms); - - if (crt == NULL) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - KEYID_IMPORT(kid32, keyid); - - pkt = _gnutls_openpgp_find_key(crt->knode, kid32, 0); - if (pkt == NULL) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - pk_algorithm = - _gnutls_openpgp_get_algo(pkt->pkt.public_key->pubkey_algo); - - if (pk_algorithm != GNUTLS_PK_DSA) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - ret = _gnutls_openpgp_crt_get_mpis(crt, kid32, ¶ms); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - /* P */ - ret = _gnutls_mpi_dprint(params.params[0], p); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - /* Q */ - ret = _gnutls_mpi_dprint(params.params[1], q); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(p); - goto cleanup; - } - - - /* G */ - ret = _gnutls_mpi_dprint(params.params[2], g); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(p); - _gnutls_free_datum(q); - goto cleanup; - } - - - /* Y */ - ret = _gnutls_mpi_dprint(params.params[3], y); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(p); - _gnutls_free_datum(g); - _gnutls_free_datum(q); - goto cleanup; - } - - ret = 0; - - cleanup: - gnutls_pk_params_release(¶ms); - return ret; -} - - -/** - * gnutls_openpgp_crt_get_pk_rsa_raw: - * @crt: Holds the certificate - * @m: will hold the modulus - * @e: will hold the public exponent - * - * This function will export the RSA public key's parameters found in - * the given structure. The new parameters will be allocated using - * gnutls_malloc() and will be stored in the appropriate datum. - * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_crt_get_pk_rsa_raw(gnutls_openpgp_crt_t crt, - gnutls_datum_t * m, gnutls_datum_t * e) -{ - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - int ret; - - ret = gnutls_openpgp_crt_get_key_id(crt, keyid); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return _get_pk_rsa_raw(crt, keyid, m, e); -} - -/** - * gnutls_openpgp_crt_get_pk_dsa_raw: - * @crt: Holds the certificate - * @p: will hold the p - * @q: will hold the q - * @g: will hold the g - * @y: will hold the y - * - * This function will export the DSA public key's parameters found in - * the given certificate. The new parameters will be allocated using - * gnutls_malloc() and will be stored in the appropriate datum. - * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_crt_get_pk_dsa_raw(gnutls_openpgp_crt_t crt, - gnutls_datum_t * p, gnutls_datum_t * q, - gnutls_datum_t * g, gnutls_datum_t * y) -{ - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - int ret; - - ret = gnutls_openpgp_crt_get_key_id(crt, keyid); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return _get_pk_dsa_raw(crt, keyid, p, q, g, y); -} - -/** - * gnutls_openpgp_crt_get_subkey_pk_rsa_raw: - * @crt: Holds the certificate - * @idx: Is the subkey index - * @m: will hold the modulus - * @e: will hold the public exponent - * - * This function will export the RSA public key's parameters found in - * the given structure. The new parameters will be allocated using - * gnutls_malloc() and will be stored in the appropriate datum. - * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_crt_get_subkey_pk_rsa_raw(gnutls_openpgp_crt_t crt, - unsigned int idx, - gnutls_datum_t * m, - gnutls_datum_t * e) -{ - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - int ret; - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_crt_get_pk_rsa_raw(crt, m, e); - - ret = gnutls_openpgp_crt_get_subkey_id(crt, idx, keyid); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return _get_pk_rsa_raw(crt, keyid, m, e); -} - -/** - * gnutls_openpgp_crt_get_subkey_pk_dsa_raw: - * @crt: Holds the certificate - * @idx: Is the subkey index - * @p: will hold the p - * @q: will hold the q - * @g: will hold the g - * @y: will hold the y - * - * This function will export the DSA public key's parameters found in - * the given certificate. The new parameters will be allocated using - * gnutls_malloc() and will be stored in the appropriate datum. - * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_crt_get_subkey_pk_dsa_raw(gnutls_openpgp_crt_t crt, - unsigned int idx, - gnutls_datum_t * p, - gnutls_datum_t * q, - gnutls_datum_t * g, - gnutls_datum_t * y) -{ - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - int ret; - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_crt_get_pk_dsa_raw(crt, p, q, g, y); - - ret = gnutls_openpgp_crt_get_subkey_id(crt, idx, keyid); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return _get_pk_dsa_raw(crt, keyid, p, q, g, y); -} - -/** - * gnutls_openpgp_crt_get_preferred_key_id: - * @key: the structure that contains the OpenPGP public key. - * @keyid: the struct to save the keyid. - * - * Get preferred key id. If it hasn't been set it returns - * %GNUTLS_E_INVALID_REQUEST. - * - * Returns: the 64-bit preferred keyID of the OpenPGP key. - **/ -int -gnutls_openpgp_crt_get_preferred_key_id(gnutls_openpgp_crt_t key, - gnutls_openpgp_keyid_t keyid) -{ - if (!key || !keyid) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (!key->preferred_set) - return - gnutls_assert_val - (GNUTLS_E_OPENPGP_PREFERRED_KEY_ERROR); - - memcpy(keyid, key->preferred_keyid, GNUTLS_OPENPGP_KEYID_SIZE); - - return 0; -} - -/** - * gnutls_openpgp_crt_set_preferred_key_id: - * @key: the structure that contains the OpenPGP public key. - * @keyid: the selected keyid - * - * This allows setting a preferred key id for the given certificate. - * This key will be used by functions that involve key handling. - * - * If the provided @keyid is %NULL then the master key is - * set as preferred. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, - * otherwise a negative error code is returned. - **/ -int -gnutls_openpgp_crt_set_preferred_key_id(gnutls_openpgp_crt_t key, - const gnutls_openpgp_keyid_t keyid) -{ - int ret; - - if (!key) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (keyid == NULL) { /* set the master as preferred */ - uint8_t tmp[GNUTLS_OPENPGP_KEYID_SIZE]; - - ret = gnutls_openpgp_crt_get_key_id(key, tmp); - if (ret < 0) - return gnutls_assert_val(ret); - - key->preferred_set = 1; - memcpy(key->preferred_keyid, tmp, - GNUTLS_OPENPGP_KEYID_SIZE); - - return 0; - } - - /* check if the id is valid */ - ret = gnutls_openpgp_crt_get_subkey_idx(key, keyid); - if (ret < 0) { - _gnutls_debug_log("the requested subkey does not exist\n"); - gnutls_assert(); - return ret; - } - - key->preferred_set = 1; - memcpy(key->preferred_keyid, keyid, GNUTLS_OPENPGP_KEYID_SIZE); - - return 0; -} - -/** - * gnutls_openpgp_crt_get_auth_subkey: - * @crt: the structure that contains the OpenPGP public key. - * @keyid: the struct to save the keyid. - * @flag: Non-zero indicates that a valid subkey is always returned. - * - * Returns the 64-bit keyID of the first valid OpenPGP subkey marked - * for authentication. If flag is non-zero and no authentication - * subkey exists, then a valid subkey will be returned even if it is - * not marked for authentication. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int -gnutls_openpgp_crt_get_auth_subkey(gnutls_openpgp_crt_t crt, - gnutls_openpgp_keyid_t keyid, - unsigned int flag) -{ - int ret, subkeys, i; - unsigned int usage; - unsigned int keyid_init = 0; - - subkeys = gnutls_openpgp_crt_get_subkey_count(crt); - if (subkeys <= 0) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_SUBKEY_ERROR; - } - - /* Try to find a subkey with the authentication flag set. - * if none exists use the last one found - */ - for (i = 0; i < subkeys; i++) { - ret = - gnutls_openpgp_crt_get_subkey_pk_algorithm(crt, i, - NULL); - if (ret == GNUTLS_PK_UNKNOWN) - continue; - - ret = gnutls_openpgp_crt_get_subkey_revoked_status(crt, i); - if (ret != 0) /* it is revoked. ignore it */ - continue; - - if (keyid_init == 0) { /* keep the first valid subkey */ - ret = - gnutls_openpgp_crt_get_subkey_id(crt, i, - keyid); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - keyid_init = 1; - } - - ret = gnutls_openpgp_crt_get_subkey_usage(crt, i, &usage); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - if (usage & GNUTLS_KEY_KEY_AGREEMENT) { - ret = - gnutls_openpgp_crt_get_subkey_id(crt, i, - keyid); - if (ret < 0) { - gnutls_assert(); - return ret; - } - return 0; - } - } - - if (flag && keyid_init) - return 0; - else - return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; -} diff --git a/lib/openpgp/pgpverify.c b/lib/openpgp/pgpverify.c deleted file mode 100644 index f9083507d8..0000000000 --- a/lib/openpgp/pgpverify.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (C) 2002-2010, 2012 Free Software Foundation, Inc. - * - * Author: Timo Schulz, Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* Functions on OpenPGP key parsing - */ - -#include "gnutls_int.h" -#include -#include "errors.h" -#include -#include - -/** - * gnutls_openpgp_crt_verify_ring: - * @key: the structure that holds the key. - * @keyring: holds the keyring to check against - * @flags: unused (should be 0) - * @verify: will hold the certificate verification output. - * - * Verify all signatures in the key, using the given set of keys - * (keyring). - * - * The key verification output will be put in @verify and will be one - * or more of the #gnutls_certificate_status_t enumerated elements - * bitwise or'd. - * - * Note that this function does not verify using any "web of trust". - * You may use GnuPG for that purpose, or any other external PGP - * application. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int -gnutls_openpgp_crt_verify_ring(gnutls_openpgp_crt_t key, - gnutls_openpgp_keyring_t keyring, - unsigned int flags, unsigned int *verify) -{ - uint8_t id[GNUTLS_OPENPGP_KEYID_SIZE]; - cdk_error_t rc; - int status; - - if (!key || !keyring) { - gnutls_assert(); - return GNUTLS_E_NO_CERTIFICATE_FOUND; - } - - *verify = 0; - - rc = cdk_pk_check_sigs(key->knode, keyring->db, &status); - if (rc == CDK_Error_No_Key) { - rc = GNUTLS_E_NO_CERTIFICATE_FOUND; - gnutls_assert(); - return rc; - } else if (rc != CDK_Success) { - _gnutls_debug_log("cdk_pk_check_sigs: error %d\n", rc); - rc = _gnutls_map_cdk_rc(rc); - gnutls_assert(); - return rc; - } - _gnutls_debug_log("status: %x\n", status); - - if (status & CDK_KEY_INVALID) - *verify |= GNUTLS_CERT_SIGNATURE_FAILURE; - if (status & CDK_KEY_REVOKED) - *verify |= GNUTLS_CERT_REVOKED; - if (status & CDK_KEY_NOSIGNER) - *verify |= GNUTLS_CERT_SIGNER_NOT_FOUND; - - /* Check if the key is included in the ring. */ - if (!(flags & GNUTLS_VERIFY_DO_NOT_ALLOW_SAME)) { - rc = gnutls_openpgp_crt_get_key_id(key, id); - if (rc < 0) { - gnutls_assert(); - return rc; - } - - rc = gnutls_openpgp_keyring_check_id(keyring, id, 0); - /* If it exists in the keyring don't treat it as unknown. */ - if (rc == 0 && *verify & GNUTLS_CERT_SIGNER_NOT_FOUND) - *verify &= ~GNUTLS_CERT_SIGNER_NOT_FOUND; - } - - if (*verify != 0) - *verify |= GNUTLS_CERT_INVALID; - - return 0; -} - - -/** - * gnutls_openpgp_crt_verify_self: - * @key: the structure that holds the key. - * @flags: unused (should be 0) - * @verify: will hold the key verification output. - * - * Verifies the self signature in the key. The key verification - * output will be put in @verify and will be one or more of the - * gnutls_certificate_status_t enumerated elements bitwise or'd. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int -gnutls_openpgp_crt_verify_self(gnutls_openpgp_crt_t key, - unsigned int flags, unsigned int *verify) -{ - int status; - cdk_error_t rc; - - *verify = 0; - - rc = cdk_pk_check_self_sig(key->knode, &status); - if (rc || status != CDK_KEY_VALID) - *verify |= - GNUTLS_CERT_INVALID | GNUTLS_CERT_SIGNATURE_FAILURE; - else - *verify = 0; - - return 0; -} diff --git a/lib/openpgp/privkey.c b/lib/openpgp/privkey.c deleted file mode 100644 index a90541dae8..0000000000 --- a/lib/openpgp/privkey.c +++ /dev/null @@ -1,1446 +0,0 @@ -/* - * Copyright (C) 2003-2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -/* Functions on OpenPGP privkey parsing - */ - -#include "gnutls_int.h" -#include -#include -#include "errors.h" -#include -#include -#include -#include -#include - -/** - * gnutls_openpgp_privkey_init: - * @key: A pointer to the type to be initialized - * - * This function will initialize an OpenPGP key structure. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int gnutls_openpgp_privkey_init(gnutls_openpgp_privkey_t * key) -{ - *key = gnutls_calloc(1, sizeof(gnutls_openpgp_privkey_int)); - - if (*key) - return 0; /* success */ - return GNUTLS_E_MEMORY_ERROR; -} - -/** - * gnutls_openpgp_privkey_deinit: - * @key: A pointer to the type to be initialized - * - * This function will deinitialize a key structure. - **/ -void gnutls_openpgp_privkey_deinit(gnutls_openpgp_privkey_t key) -{ - if (!key) - return; - - if (key->knode) { - cdk_kbnode_release(key->knode); - key->knode = NULL; - } - - gnutls_free(key); -} - -/*- - * _gnutls_openpgp_privkey_cpy - This function copies a gnutls_openpgp_privkey_t type - * @dest: The structure where to copy - * @src: The structure to be copied - * - * This function will copy an X.509 certificate structure. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - -*/ -int -_gnutls_openpgp_privkey_cpy(gnutls_openpgp_privkey_t dest, - gnutls_openpgp_privkey_t src) -{ - int ret; - size_t raw_size = 0; - uint8_t *der; - gnutls_datum_t tmp; - - ret = - gnutls_openpgp_privkey_export(src, GNUTLS_OPENPGP_FMT_RAW, - NULL, 0, NULL, &raw_size); - if (ret != GNUTLS_E_SHORT_MEMORY_BUFFER) - return gnutls_assert_val(ret); - - der = gnutls_malloc(raw_size); - if (der == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - - ret = - gnutls_openpgp_privkey_export(src, GNUTLS_OPENPGP_FMT_RAW, - NULL, 0, der, &raw_size); - if (ret < 0) { - gnutls_assert(); - gnutls_free(der); - return ret; - } - - tmp.data = der; - tmp.size = raw_size; - ret = - gnutls_openpgp_privkey_import(dest, &tmp, - GNUTLS_OPENPGP_FMT_RAW, NULL, 0); - - gnutls_free(der); - - if (ret < 0) - return gnutls_assert_val(ret); - - memcpy(dest->preferred_keyid, src->preferred_keyid, - GNUTLS_OPENPGP_KEYID_SIZE); - dest->preferred_set = src->preferred_set; - - return 0; -} - -/** - * gnutls_openpgp_privkey_sec_param: - * @key: a key structure - * - * This function will return the security parameter appropriate with - * this private key. - * - * Returns: On success, a valid security parameter is returned otherwise - * %GNUTLS_SEC_PARAM_UNKNOWN is returned. - * - * Since: 2.12.0 - **/ -gnutls_sec_param_t -gnutls_openpgp_privkey_sec_param(gnutls_openpgp_privkey_t key) -{ - gnutls_pk_algorithm_t algo; - unsigned int bits; - - algo = gnutls_openpgp_privkey_get_pk_algorithm(key, &bits); - if (algo == GNUTLS_PK_UNKNOWN) { - gnutls_assert(); - return GNUTLS_SEC_PARAM_UNKNOWN; - } - - return gnutls_pk_bits_to_sec_param(algo, bits); -} - -/** - * gnutls_openpgp_privkey_import: - * @key: The structure to store the parsed key. - * @data: The RAW or BASE64 encoded key. - * @format: One of #gnutls_openpgp_crt_fmt_t elements. - * @password: not used for now - * @flags: should be (0) - * - * This function will convert the given RAW or Base64 encoded key to - * the native gnutls_openpgp_privkey_t format. The output will be - * stored in 'key'. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - **/ -int -gnutls_openpgp_privkey_import(gnutls_openpgp_privkey_t key, - const gnutls_datum_t * data, - gnutls_openpgp_crt_fmt_t format, - const char *password, unsigned int flags) -{ - cdk_packet_t pkt; - int rc, armor; - - if (data->data == NULL || data->size == 0) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - if (format == GNUTLS_OPENPGP_FMT_RAW) - armor = 0; - else - armor = 1; - - rc = cdk_kbnode_read_from_mem(&key->knode, armor, data->data, - data->size, 0); - if (rc != 0) { - rc = _gnutls_map_cdk_rc(rc); - gnutls_assert(); - return rc; - } - - /* Test if the import was successful. */ - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_SECRET_KEY); - if (pkt == NULL) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - return 0; -} - -/** - * gnutls_openpgp_privkey_export: - * @key: Holds the key. - * @format: One of gnutls_openpgp_crt_fmt_t elements. - * @password: the password that will be used to encrypt the key. (unused for now) - * @flags: (0) for future compatibility - * @output_data: will contain the key base64 encoded or raw - * @output_data_size: holds the size of output_data (and will be - * replaced by the actual size of parameters) - * - * This function will convert the given key to RAW or Base64 format. - * If the buffer provided is not long enough to hold the output, then - * GNUTLS_E_SHORT_MEMORY_BUFFER will be returned. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_privkey_export(gnutls_openpgp_privkey_t key, - gnutls_openpgp_crt_fmt_t format, - const char *password, unsigned int flags, - void *output_data, size_t * output_data_size) -{ - /* FIXME for now we do not export encrypted keys */ - return _gnutls_openpgp_export(key->knode, format, output_data, - output_data_size, 1); -} - -/** - * gnutls_openpgp_privkey_export2: - * @key: Holds the key. - * @format: One of gnutls_openpgp_crt_fmt_t elements. - * @password: the password that will be used to encrypt the key. (unused for now) - * @flags: (0) for future compatibility - * @out: will contain the raw or based64 encoded key - * - * This function will convert the given key to RAW or Base64 format. - * The output buffer is allocated using gnutls_malloc(). - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - * - * Since: 3.1.3 - **/ -int -gnutls_openpgp_privkey_export2(gnutls_openpgp_privkey_t key, - gnutls_openpgp_crt_fmt_t format, - const char *password, unsigned int flags, - gnutls_datum_t * out) -{ - /* FIXME for now we do not export encrypted keys */ - return _gnutls_openpgp_export2(key->knode, format, out, 1); -} - - -/** - * gnutls_openpgp_privkey_get_pk_algorithm: - * @key: is an OpenPGP key - * @bits: if bits is non null it will hold the size of the parameters' in bits - * - * This function will return the public key algorithm of an OpenPGP - * certificate. - * - * If bits is non null, it should have enough size to hold the parameters - * size in bits. For RSA the bits returned is the modulus. - * For DSA the bits returned are of the public exponent. - * - * Returns: a member of the #gnutls_pk_algorithm_t enumeration on - * success, or a negative error code on error. - * - * Since: 2.4.0 - **/ -gnutls_pk_algorithm_t -gnutls_openpgp_privkey_get_pk_algorithm(gnutls_openpgp_privkey_t key, - unsigned int *bits) -{ - cdk_packet_t pkt; - int algo = 0, ret; - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - - if (!key) { - gnutls_assert(); - return GNUTLS_PK_UNKNOWN; - } - - ret = gnutls_openpgp_privkey_get_preferred_key_id(key, keyid); - if (ret == 0) { - int idx; - - idx = gnutls_openpgp_privkey_get_subkey_idx(key, keyid); - if (idx != GNUTLS_OPENPGP_MASTER_KEYID_IDX) { - algo = - gnutls_openpgp_privkey_get_subkey_pk_algorithm - (key, idx, bits); - return algo; - } - } - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_SECRET_KEY); - if (pkt) { - if (bits) - *bits = cdk_pk_get_nbits(pkt->pkt.secret_key->pk); - algo = - _gnutls_openpgp_get_algo(pkt->pkt.secret_key->pk-> - pubkey_algo); - } - - return algo; -} - -int _gnutls_openpgp_get_algo(int cdk_algo) -{ - int algo; - - if (is_RSA(cdk_algo)) - algo = GNUTLS_PK_RSA; - else if (is_DSA(cdk_algo)) - algo = GNUTLS_PK_DSA; - else { - _gnutls_debug_log("Unknown OpenPGP algorithm %d\n", - cdk_algo); - algo = GNUTLS_PK_UNKNOWN; - } - - return algo; -} - -/** - * gnutls_openpgp_privkey_get_revoked_status: - * @key: the structure that contains the OpenPGP private key. - * - * Get revocation status of key. - * - * Returns: true (1) if the key has been revoked, or false (0) if it - * has not, or a negative error code indicates an error. - * - * Since: 2.4.0 - **/ -int gnutls_openpgp_privkey_get_revoked_status(gnutls_openpgp_privkey_t key) -{ - cdk_packet_t pkt; - - if (!key) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_SECRET_KEY); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - if (pkt->pkt.secret_key->is_revoked != 0) - return 1; - return 0; -} - -/** - * gnutls_openpgp_privkey_get_fingerprint: - * @key: the raw data that contains the OpenPGP secret key. - * @fpr: the buffer to save the fingerprint, must hold at least 20 bytes. - * @fprlen: the integer to save the length of the fingerprint. - * - * Get the fingerprint of the OpenPGP key. Depends on the - * algorithm, the fingerprint can be 16 or 20 bytes. - * - * Returns: On success, 0 is returned, or an error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_privkey_get_fingerprint(gnutls_openpgp_privkey_t key, - void *fpr, size_t * fprlen) -{ - cdk_packet_t pkt; - cdk_pkt_pubkey_t pk = NULL; - - if (!fpr || !fprlen) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - *fprlen = 0; - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_SECRET_KEY); - if (!pkt) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - pk = pkt->pkt.secret_key->pk; - *fprlen = 20; - - if (is_RSA(pk->pubkey_algo) && pk->version < 4) - *fprlen = 16; - - cdk_pk_get_fingerprint(pk, fpr); - - return 0; -} - -/** - * gnutls_openpgp_privkey_get_key_id: - * @key: the structure that contains the OpenPGP secret key. - * @keyid: the buffer to save the keyid. - * - * Get key-id. - * - * Returns: the 64-bit keyID of the OpenPGP key. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_privkey_get_key_id(gnutls_openpgp_privkey_t key, - gnutls_openpgp_keyid_t keyid) -{ - cdk_packet_t pkt; - uint32_t kid[2]; - - if (!key || !keyid) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - pkt = cdk_kbnode_find_packet(key->knode, CDK_PKT_SECRET_KEY); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - cdk_sk_get_keyid(pkt->pkt.secret_key, kid); - _gnutls_write_uint32(kid[0], keyid); - _gnutls_write_uint32(kid[1], keyid + 4); - - return 0; -} - -/** - * gnutls_openpgp_privkey_get_subkey_count: - * @key: is an OpenPGP key - * - * This function will return the number of subkeys present in the - * given OpenPGP certificate. - * - * Returns: the number of subkeys, or a negative error code on error. - * - * Since: 2.4.0 - **/ -int gnutls_openpgp_privkey_get_subkey_count(gnutls_openpgp_privkey_t key) -{ - cdk_kbnode_t p, ctx; - cdk_packet_t pkt; - int subkeys; - - if (key == NULL) { - gnutls_assert(); - return 0; - } - - ctx = NULL; - subkeys = 0; - while ((p = cdk_kbnode_walk(key->knode, &ctx, 0))) { - pkt = cdk_kbnode_get_packet(p); - if (pkt->pkttype == CDK_PKT_SECRET_SUBKEY) - subkeys++; - } - - return subkeys; -} - -/* returns the subkey with the given index */ -static cdk_packet_t -_get_secret_subkey(gnutls_openpgp_privkey_t key, unsigned int indx) -{ - cdk_kbnode_t p, ctx; - cdk_packet_t pkt; - unsigned int subkeys; - - ctx = NULL; - subkeys = 0; - while ((p = cdk_kbnode_walk(key->knode, &ctx, 0))) { - pkt = cdk_kbnode_get_packet(p); - if (pkt->pkttype == CDK_PKT_SECRET_SUBKEY - && indx == subkeys++) - return pkt; - } - - return NULL; -} - -/** - * gnutls_openpgp_privkey_get_subkey_revoked_status: - * @key: the structure that contains the OpenPGP private key. - * @idx: is the subkey index - * - * Get revocation status of key. - * - * Returns: true (1) if the key has been revoked, or false (0) if it - * has not, or a negative error code indicates an error. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_privkey_get_subkey_revoked_status(gnutls_openpgp_privkey_t - key, unsigned int idx) -{ - cdk_packet_t pkt; - - if (!key) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_privkey_get_revoked_status(key); - - pkt = _get_secret_subkey(key, idx); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - if (pkt->pkt.secret_key->is_revoked != 0) - return 1; - return 0; -} - -/** - * gnutls_openpgp_privkey_get_subkey_pk_algorithm: - * @key: is an OpenPGP key - * @idx: is the subkey index - * @bits: if bits is non null it will hold the size of the parameters' in bits - * - * This function will return the public key algorithm of a subkey of an OpenPGP - * certificate. - * - * If bits is non null, it should have enough size to hold the parameters - * size in bits. For RSA the bits returned is the modulus. - * For DSA the bits returned are of the public exponent. - * - * Returns: a member of the #gnutls_pk_algorithm_t enumeration on - * success, or a negative error code on error. - * - * Since: 2.4.0 - **/ -gnutls_pk_algorithm_t -gnutls_openpgp_privkey_get_subkey_pk_algorithm(gnutls_openpgp_privkey_t - key, unsigned int idx, - unsigned int *bits) -{ - cdk_packet_t pkt; - int algo; - - if (!key) { - gnutls_assert(); - return GNUTLS_PK_UNKNOWN; - } - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_privkey_get_pk_algorithm(key, bits); - - pkt = _get_secret_subkey(key, idx); - - algo = 0; - if (pkt) { - if (bits) - *bits = cdk_pk_get_nbits(pkt->pkt.secret_key->pk); - algo = pkt->pkt.secret_key->pubkey_algo; - if (is_RSA(algo)) - algo = GNUTLS_PK_RSA; - else if (is_DSA(algo)) - algo = GNUTLS_PK_DSA; - else - algo = GNUTLS_E_UNKNOWN_PK_ALGORITHM; - } - - return algo; -} - -/** - * gnutls_openpgp_privkey_get_subkey_idx: - * @key: the structure that contains the OpenPGP private key. - * @keyid: the keyid. - * - * Get index of subkey. - * - * Returns: the index of the subkey or a negative error value. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_privkey_get_subkey_idx(gnutls_openpgp_privkey_t key, - const gnutls_openpgp_keyid_t keyid) -{ - int ret; - uint32_t kid[2]; - uint8_t master_id[GNUTLS_OPENPGP_KEYID_SIZE]; - - if (!key) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - ret = gnutls_openpgp_privkey_get_key_id(key, master_id); - if (ret < 0) - return gnutls_assert_val(ret); - if (memcmp(master_id, keyid, GNUTLS_OPENPGP_KEYID_SIZE) == 0) - return GNUTLS_OPENPGP_MASTER_KEYID_IDX; - - KEYID_IMPORT(kid, keyid); - ret = _gnutls_openpgp_find_subkey_idx(key->knode, kid, 1); - - if (ret < 0) { - gnutls_assert(); - } - - return ret; -} - -/** - * gnutls_openpgp_privkey_get_subkey_creation_time: - * @key: the structure that contains the OpenPGP private key. - * @idx: the subkey index - * - * Get subkey creation time. - * - * Returns: the timestamp when the OpenPGP key was created. - * - * Since: 2.4.0 - **/ -time_t -gnutls_openpgp_privkey_get_subkey_creation_time(gnutls_openpgp_privkey_t - key, unsigned int idx) -{ - cdk_packet_t pkt; - time_t timestamp; - - if (!key) - return (time_t) - 1; - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - pkt = - cdk_kbnode_find_packet(key->knode, CDK_PKT_SECRET_KEY); - else - pkt = _get_secret_subkey(key, idx); - - if (pkt) - timestamp = pkt->pkt.secret_key->pk->timestamp; - else - timestamp = 0; - - return timestamp; -} - -/** - * gnutls_openpgp_privkey_get_subkey_expiration_time: - * @key: the structure that contains the OpenPGP private key. - * @idx: the subkey index - * - * Get subkey expiration time. A value of '0' means that the key - * doesn't expire at all. - * - * Returns: the time when the OpenPGP key expires. - * - * Since: 2.4.0 - **/ -time_t -gnutls_openpgp_privkey_get_subkey_expiration_time(gnutls_openpgp_privkey_t - key, unsigned int idx) -{ - cdk_packet_t pkt; - time_t timestamp; - - if (!key) - return (time_t) - 1; - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - pkt = - cdk_kbnode_find_packet(key->knode, CDK_PKT_SECRET_KEY); - else - pkt = _get_secret_subkey(key, idx); - - if (pkt) - timestamp = pkt->pkt.secret_key->pk->expiredate; - else - timestamp = 0; - - return timestamp; -} - -/** - * gnutls_openpgp_privkey_get_subkey_id: - * @key: the structure that contains the OpenPGP secret key. - * @idx: the subkey index - * @keyid: the buffer to save the keyid. - * - * Get the key-id for the subkey. - * - * Returns: the 64-bit keyID of the OpenPGP key. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_privkey_get_subkey_id(gnutls_openpgp_privkey_t key, - unsigned int idx, - gnutls_openpgp_keyid_t keyid) -{ - cdk_packet_t pkt; - uint32_t kid[2]; - - if (!key || !keyid) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_privkey_get_key_id(key, keyid); - - pkt = _get_secret_subkey(key, idx); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - cdk_sk_get_keyid(pkt->pkt.secret_key, kid); - _gnutls_write_uint32(kid[0], keyid); - _gnutls_write_uint32(kid[1], keyid + 4); - - return 0; -} - -/** - * gnutls_openpgp_privkey_get_subkey_fingerprint: - * @key: the raw data that contains the OpenPGP secret key. - * @idx: the subkey index - * @fpr: the buffer to save the fingerprint, must hold at least 20 bytes. - * @fprlen: the integer to save the length of the fingerprint. - * - * Get the fingerprint of an OpenPGP subkey. Depends on the - * algorithm, the fingerprint can be 16 or 20 bytes. - * - * Returns: On success, 0 is returned, or an error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_privkey_get_subkey_fingerprint(gnutls_openpgp_privkey_t key, - unsigned int idx, - void *fpr, size_t * fprlen) -{ - cdk_packet_t pkt; - cdk_pkt_pubkey_t pk = NULL; - - if (!fpr || !fprlen) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - return gnutls_openpgp_privkey_get_fingerprint(key, fpr, - fprlen); - - *fprlen = 0; - - pkt = _get_secret_subkey(key, idx); - if (!pkt) - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - - - pk = pkt->pkt.secret_key->pk; - *fprlen = 20; - - if (is_RSA(pk->pubkey_algo) && pk->version < 4) - *fprlen = 16; - - cdk_pk_get_fingerprint(pk, fpr); - - return 0; -} - -/* Extracts DSA and RSA parameters from a certificate. - */ -int -_gnutls_openpgp_privkey_get_mpis(gnutls_openpgp_privkey_t pkey, - uint32_t * keyid /*[2] */ , - gnutls_pk_params_st * params) -{ - int result; - unsigned int i, pk_algorithm; - cdk_packet_t pkt; - unsigned total; - - gnutls_pk_params_init(params); - - if (keyid == NULL) - pkt = - cdk_kbnode_find_packet(pkey->knode, - CDK_PKT_SECRET_KEY); - else - pkt = _gnutls_openpgp_find_key(pkey->knode, keyid, 1); - - if (pkt == NULL) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - pk_algorithm = - _gnutls_openpgp_get_algo(pkt->pkt.secret_key->pk->pubkey_algo); - params->algo = pk_algorithm; - - switch (pk_algorithm) { - case GNUTLS_PK_RSA: - /* openpgp does not hold all parameters as in PKCS #1 - */ - total = RSA_PRIVATE_PARAMS - 2; - break; - case GNUTLS_PK_DSA: - total = DSA_PRIVATE_PARAMS; - break; - default: - gnutls_assert(); - return GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; - } - - for (i = 0; i < total; i++) { - result = - _gnutls_read_pgp_mpi(pkt, 1, i, ¶ms->params[i]); - if (result < 0) { - gnutls_assert(); - goto error; - } - params->params_nr++; - } - - /* fixup will generate exp1 and exp2 that are not - * available here. - */ - result = _gnutls_pk_fixup(pk_algorithm, GNUTLS_IMPORT, params); - if (result < 0) { - gnutls_assert(); - goto error; - } - - return 0; - - error: - gnutls_pk_params_clear(params); - gnutls_pk_params_release(params); - - return result; -} - -/* The internal version of export - */ -static int -_get_sk_rsa_raw(gnutls_openpgp_privkey_t pkey, - gnutls_openpgp_keyid_t keyid, gnutls_datum_t * m, - gnutls_datum_t * e, gnutls_datum_t * d, gnutls_datum_t * p, - gnutls_datum_t * q, gnutls_datum_t * u) -{ - int pk_algorithm, ret; - cdk_packet_t pkt; - uint32_t kid32[2]; - gnutls_pk_params_st params; - - if (pkey == NULL) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - KEYID_IMPORT(kid32, keyid); - - pkt = _gnutls_openpgp_find_key(pkey->knode, kid32, 1); - if (pkt == NULL) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - pk_algorithm = - _gnutls_openpgp_get_algo(pkt->pkt.secret_key->pk->pubkey_algo); - - if (pk_algorithm != GNUTLS_PK_RSA) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - ret = _gnutls_openpgp_privkey_get_mpis(pkey, kid32, ¶ms); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - ret = _gnutls_mpi_dprint(params.params[0], m); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = _gnutls_mpi_dprint(params.params[1], e); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(m); - goto cleanup; - } - - ret = _gnutls_mpi_dprint(params.params[2], d); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(m); - _gnutls_free_datum(e); - goto cleanup; - } - - ret = _gnutls_mpi_dprint(params.params[3], p); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(m); - _gnutls_free_datum(e); - _gnutls_free_datum(d); - goto cleanup; - } - - ret = _gnutls_mpi_dprint(params.params[4], q); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(m); - _gnutls_free_datum(e); - _gnutls_free_datum(d); - _gnutls_free_datum(p); - goto cleanup; - } - - ret = _gnutls_mpi_dprint(params.params[5], u); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(q); - _gnutls_free_datum(m); - _gnutls_free_datum(e); - _gnutls_free_datum(d); - _gnutls_free_datum(p); - goto cleanup; - } - - ret = 0; - - cleanup: - gnutls_pk_params_clear(¶ms); - gnutls_pk_params_release(¶ms); - return ret; -} - -static int -_get_sk_dsa_raw(gnutls_openpgp_privkey_t pkey, - gnutls_openpgp_keyid_t keyid, gnutls_datum_t * p, - gnutls_datum_t * q, gnutls_datum_t * g, gnutls_datum_t * y, - gnutls_datum_t * x) -{ - int pk_algorithm, ret; - cdk_packet_t pkt; - uint32_t kid32[2]; - gnutls_pk_params_st params; - - if (pkey == NULL) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - KEYID_IMPORT(kid32, keyid); - - pkt = _gnutls_openpgp_find_key(pkey->knode, kid32, 1); - if (pkt == NULL) { - gnutls_assert(); - return GNUTLS_E_OPENPGP_GETKEY_FAILED; - } - - pk_algorithm = - _gnutls_openpgp_get_algo(pkt->pkt.secret_key->pk->pubkey_algo); - - if (pk_algorithm != GNUTLS_PK_DSA) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - ret = _gnutls_openpgp_privkey_get_mpis(pkey, kid32, ¶ms); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - /* P */ - ret = _gnutls_mpi_dprint(params.params[0], p); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - /* Q */ - ret = _gnutls_mpi_dprint(params.params[1], q); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(p); - goto cleanup; - } - - - /* G */ - ret = _gnutls_mpi_dprint(params.params[2], g); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(p); - _gnutls_free_datum(q); - goto cleanup; - } - - - /* Y */ - ret = _gnutls_mpi_dprint(params.params[3], y); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(p); - _gnutls_free_datum(g); - _gnutls_free_datum(q); - goto cleanup; - } - - ret = _gnutls_mpi_dprint(params.params[4], x); - if (ret < 0) { - gnutls_assert(); - _gnutls_free_datum(y); - _gnutls_free_datum(p); - _gnutls_free_datum(g); - _gnutls_free_datum(q); - goto cleanup; - } - - ret = 0; - - cleanup: - gnutls_pk_params_clear(¶ms); - gnutls_pk_params_release(¶ms); - return ret; -} - - -/** - * gnutls_openpgp_privkey_export_rsa_raw: - * @pkey: Holds the certificate - * @m: will hold the modulus - * @e: will hold the public exponent - * @d: will hold the private exponent - * @p: will hold the first prime (p) - * @q: will hold the second prime (q) - * @u: will hold the coefficient - * - * This function will export the RSA private key's parameters found in - * the given structure. The new parameters will be allocated using - * gnutls_malloc() and will be stored in the appropriate datum. - * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_privkey_export_rsa_raw(gnutls_openpgp_privkey_t pkey, - gnutls_datum_t * m, - gnutls_datum_t * e, - gnutls_datum_t * d, - gnutls_datum_t * p, - gnutls_datum_t * q, - gnutls_datum_t * u) -{ - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - int ret; - - ret = gnutls_openpgp_privkey_get_key_id(pkey, keyid); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return _get_sk_rsa_raw(pkey, keyid, m, e, d, p, q, u); -} - -/** - * gnutls_openpgp_privkey_export_dsa_raw: - * @pkey: Holds the certificate - * @p: will hold the p - * @q: will hold the q - * @g: will hold the g - * @y: will hold the y - * @x: will hold the x - * - * This function will export the DSA private key's parameters found in - * the given certificate. The new parameters will be allocated using - * gnutls_malloc() and will be stored in the appropriate datum. - * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_privkey_export_dsa_raw(gnutls_openpgp_privkey_t pkey, - gnutls_datum_t * p, - gnutls_datum_t * q, - gnutls_datum_t * g, - gnutls_datum_t * y, - gnutls_datum_t * x) -{ - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - int ret; - - ret = gnutls_openpgp_privkey_get_key_id(pkey, keyid); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return _get_sk_dsa_raw(pkey, keyid, p, q, g, y, x); -} - -/** - * gnutls_openpgp_privkey_export_subkey_rsa_raw: - * @pkey: Holds the certificate - * @idx: Is the subkey index - * @m: will hold the modulus - * @e: will hold the public exponent - * @d: will hold the private exponent - * @p: will hold the first prime (p) - * @q: will hold the second prime (q) - * @u: will hold the coefficient - * - * This function will export the RSA private key's parameters found in - * the given structure. The new parameters will be allocated using - * gnutls_malloc() and will be stored in the appropriate datum. - * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_privkey_export_subkey_rsa_raw(gnutls_openpgp_privkey_t pkey, - unsigned int idx, - gnutls_datum_t * m, - gnutls_datum_t * e, - gnutls_datum_t * d, - gnutls_datum_t * p, - gnutls_datum_t * q, - gnutls_datum_t * u) -{ - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - int ret; - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - ret = gnutls_openpgp_privkey_get_key_id(pkey, keyid); - else - ret = - gnutls_openpgp_privkey_get_subkey_id(pkey, idx, keyid); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return _get_sk_rsa_raw(pkey, keyid, m, e, d, p, q, u); -} - -/** - * gnutls_openpgp_privkey_export_subkey_dsa_raw: - * @pkey: Holds the certificate - * @idx: Is the subkey index - * @p: will hold the p - * @q: will hold the q - * @g: will hold the g - * @y: will hold the y - * @x: will hold the x - * - * This function will export the DSA private key's parameters found - * in the given certificate. The new parameters will be allocated - * using gnutls_malloc() and will be stored in the appropriate datum. - * - * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. - * - * Since: 2.4.0 - **/ -int -gnutls_openpgp_privkey_export_subkey_dsa_raw(gnutls_openpgp_privkey_t pkey, - unsigned int idx, - gnutls_datum_t * p, - gnutls_datum_t * q, - gnutls_datum_t * g, - gnutls_datum_t * y, - gnutls_datum_t * x) -{ - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - int ret; - - if (idx == GNUTLS_OPENPGP_MASTER_KEYID_IDX) - ret = gnutls_openpgp_privkey_get_key_id(pkey, keyid); - else - ret = - gnutls_openpgp_privkey_get_subkey_id(pkey, idx, keyid); - - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return _get_sk_dsa_raw(pkey, keyid, p, q, g, y, x); -} - -/** - * gnutls_openpgp_privkey_get_preferred_key_id: - * @key: the structure that contains the OpenPGP public key. - * @keyid: the struct to save the keyid. - * - * Get the preferred key-id for the key. - * - * Returns: the 64-bit preferred keyID of the OpenPGP key, or if it - * hasn't been set it returns %GNUTLS_E_INVALID_REQUEST. - **/ -int -gnutls_openpgp_privkey_get_preferred_key_id(gnutls_openpgp_privkey_t key, - gnutls_openpgp_keyid_t keyid) -{ - if (!key || !keyid) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (!key->preferred_set) - return - gnutls_assert_val - (GNUTLS_E_OPENPGP_PREFERRED_KEY_ERROR); - - memcpy(keyid, key->preferred_keyid, GNUTLS_OPENPGP_KEYID_SIZE); - - return 0; -} - -/** - * gnutls_openpgp_privkey_set_preferred_key_id: - * @key: the structure that contains the OpenPGP public key. - * @keyid: the selected keyid - * - * This allows setting a preferred key id for the given certificate. - * This key will be used by functions that involve key handling. - * - * If the provided @keyid is %NULL then the master key is - * set as preferred. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, - * otherwise a negative error code is returned. - **/ -int -gnutls_openpgp_privkey_set_preferred_key_id(gnutls_openpgp_privkey_t key, - const gnutls_openpgp_keyid_t - keyid) -{ - int ret; - - if (!key) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (keyid == NULL) { /* set the master as preferred */ - uint8_t tmp[GNUTLS_OPENPGP_KEYID_SIZE]; - - ret = gnutls_openpgp_privkey_get_key_id(key, tmp); - if (ret < 0) - return gnutls_assert_val(ret); - - key->preferred_set = 1; - memcpy(key->preferred_keyid, tmp, - GNUTLS_OPENPGP_KEYID_SIZE); - - return 0; - } - - /* check if the id is valid */ - ret = gnutls_openpgp_privkey_get_subkey_idx(key, keyid); - if (ret < 0) { - _gnutls_debug_log("the requested subkey does not exist\n"); - gnutls_assert(); - return ret; - } - - key->preferred_set = 1; - memcpy(key->preferred_keyid, keyid, GNUTLS_OPENPGP_KEYID_SIZE); - - return 0; -} - -/** - * gnutls_openpgp_privkey_sign_hash: - * @key: Holds the key - * @hash: holds the data to be signed - * @signature: will contain newly allocated signature - * - * This function will sign the given hash using the private key. You - * should use gnutls_openpgp_privkey_set_preferred_key_id() before - * calling this function to set the subkey to use. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - * - * Deprecated: Use gnutls_privkey_sign_hash() instead. - */ -int -gnutls_openpgp_privkey_sign_hash(gnutls_openpgp_privkey_t key, - const gnutls_datum_t * hash, - gnutls_datum_t * signature) -{ - int result; - gnutls_pk_params_st params; - int pk_algorithm; - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - char buf[2 * GNUTLS_OPENPGP_KEYID_SIZE + 1]; - - if (key == NULL) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - result = gnutls_openpgp_privkey_get_preferred_key_id(key, keyid); - if (result == 0) { - uint32_t kid[2]; - int idx; - - KEYID_IMPORT(kid, keyid); - - _gnutls_hard_log("Signing using PGP key ID %s\n", - _gnutls_bin2hex(keyid, - GNUTLS_OPENPGP_KEYID_SIZE, - buf, sizeof(buf), NULL)); - - idx = gnutls_openpgp_privkey_get_subkey_idx(key, keyid); - pk_algorithm = - gnutls_openpgp_privkey_get_subkey_pk_algorithm(key, - idx, - NULL); - result = - _gnutls_openpgp_privkey_get_mpis(key, kid, ¶ms); - } else { - _gnutls_hard_log("Signing using master PGP key\n"); - - pk_algorithm = - gnutls_openpgp_privkey_get_pk_algorithm(key, NULL); - result = - _gnutls_openpgp_privkey_get_mpis(key, NULL, ¶ms); - } - - if (result < 0) { - gnutls_assert(); - return result; - } - - - result = _gnutls_pk_sign(pk_algorithm, signature, hash, ¶ms); - - gnutls_pk_params_clear(¶ms); - gnutls_pk_params_release(¶ms); - - if (result < 0) { - gnutls_assert(); - return result; - } - - return 0; -} - -/*- - * _gnutls_openpgp_privkey_decrypt_data: - * @key: Holds the key - * @flags: (0) for now - * @ciphertext: holds the data to be decrypted - * @plaintext: will contain newly allocated plaintext - * - * This function will sign the given hash using the private key. You - * should use gnutls_openpgp_privkey_set_preferred_key_id() before - * calling this function to set the subkey to use. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - -*/ -int -_gnutls_openpgp_privkey_decrypt_data(gnutls_openpgp_privkey_t key, - unsigned int flags, - const gnutls_datum_t * ciphertext, - gnutls_datum_t * plaintext) -{ - int result, i; - gnutls_pk_params_st params; - int pk_algorithm; - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - char buf[2 * GNUTLS_OPENPGP_KEYID_SIZE + 1]; - - if (key == NULL) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - result = gnutls_openpgp_privkey_get_preferred_key_id(key, keyid); - if (result == 0) { - uint32_t kid[2]; - - KEYID_IMPORT(kid, keyid); - - _gnutls_hard_log("Decrypting using PGP key ID %s\n", - _gnutls_bin2hex(keyid, - GNUTLS_OPENPGP_KEYID_SIZE, - buf, sizeof(buf), NULL)); - - result = - _gnutls_openpgp_privkey_get_mpis(key, kid, ¶ms); - - i = gnutls_openpgp_privkey_get_subkey_idx(key, keyid); - - pk_algorithm = - gnutls_openpgp_privkey_get_subkey_pk_algorithm(key, i, - NULL); - } else { - _gnutls_hard_log("Decrypting using master PGP key\n"); - - pk_algorithm = - gnutls_openpgp_privkey_get_pk_algorithm(key, NULL); - - result = - _gnutls_openpgp_privkey_get_mpis(key, NULL, ¶ms); - - } - - if (result < 0) { - gnutls_assert(); - return result; - } - - result = - _gnutls_pk_decrypt(pk_algorithm, plaintext, ciphertext, - ¶ms); - - gnutls_pk_params_clear(¶ms); - gnutls_pk_params_release(¶ms); - - if (result < 0) - return gnutls_assert_val(result); - - return 0; -} diff --git a/lib/openpgp_compat.c b/lib/openpgp_compat.c index 2a0bb5fb42..d96ee8d8c6 100644 --- a/lib/openpgp_compat.c +++ b/lib/openpgp_compat.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -28,8 +28,6 @@ #include #include -#ifndef ENABLE_OPENPGP - int gnutls_openpgp_crt_init(gnutls_openpgp_crt_t * key) { return GNUTLS_E_UNIMPLEMENTED_FEATURE; @@ -605,6 +603,18 @@ int gnutls_certificate_set_openpgp_keyring_file return GNUTLS_E_UNIMPLEMENTED_FEATURE; } +/** + * gnutls_pubkey_import_openpgp: + * @key: The public key + * @crt: The certificate to be imported + * @flags: should be zero + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + * + * Since: 2.12.0 + **/ int gnutls_pubkey_import_openpgp(gnutls_pubkey_t key, gnutls_openpgp_crt_t crt, unsigned int flags) @@ -612,6 +622,20 @@ int gnutls_pubkey_import_openpgp(gnutls_pubkey_t key, return GNUTLS_E_UNIMPLEMENTED_FEATURE; } +/** + * gnutls_pubkey_import_openpgp_raw: + * @pkey: The public key + * @data: The public key data to be imported + * @format: The format of the public key + * @keyid: The key id to use (optional) + * @flags: Should be zero + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + * + * Since: 3.1.3 + **/ int gnutls_pubkey_import_openpgp_raw(gnutls_pubkey_t pkey, const gnutls_datum_t * data, gnutls_openpgp_crt_fmt_t @@ -622,6 +646,21 @@ int gnutls_pubkey_import_openpgp_raw(gnutls_pubkey_t pkey, return GNUTLS_E_UNIMPLEMENTED_FEATURE; } +/** + * gnutls_pubkey_get_key_id: + * @key: Holds the public key + * @flags: should be one of the flags from %gnutls_keyid_flags_t + * @output_data: will contain the key ID + * @output_data_size: holds the size of output_data (and will be + * replaced by the actual size of parameters) + * @subkey: ignored + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + * + * Since: 2.12.0 + **/ int gnutls_pubkey_get_openpgp_key_id(gnutls_pubkey_t key, unsigned int flags, @@ -632,6 +671,18 @@ gnutls_pubkey_get_openpgp_key_id(gnutls_pubkey_t key, return GNUTLS_E_UNIMPLEMENTED_FEATURE; } +/** + * gnutls_privkey_import_openpgp: + * @pkey: The private key + * @key: The private key to be imported + * @flags: Flags for the import + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + * + * Since: 2.12.0 + **/ int gnutls_privkey_import_openpgp(gnutls_privkey_t pkey, gnutls_openpgp_privkey_t key, unsigned int flags) @@ -639,12 +690,37 @@ int gnutls_privkey_import_openpgp(gnutls_privkey_t pkey, return GNUTLS_E_UNIMPLEMENTED_FEATURE; } +/** + * gnutls_privkey_export_openpgp: + * @pkey: The private key + * @key: Location for the key to be exported. + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + * + * Since: 3.4.0 + */ int gnutls_privkey_export_openpgp(gnutls_privkey_t pkey, gnutls_openpgp_privkey_t * key) { return GNUTLS_E_UNIMPLEMENTED_FEATURE; } +/** + * gnutls_privkey_import_openpgp_raw: + * @pkey: The private key + * @data: The private key data to be imported + * @format: The format of the private key + * @keyid: The key id to use (optional) + * @password: A password (optional) + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + * + * Since: 3.1.0 + **/ int gnutls_privkey_import_openpgp_raw(gnutls_privkey_t pkey, const gnutls_datum_t * data, gnutls_openpgp_crt_fmt_t @@ -655,6 +731,20 @@ int gnutls_privkey_import_openpgp_raw(gnutls_privkey_t pkey, return GNUTLS_E_UNIMPLEMENTED_FEATURE; } +/** + * gnutls_pcert_import_openpgp_raw: + * @pcert: The pcert structure + * @cert: The raw certificate to be imported + * @format: The format of the certificate + * @keyid: The key ID to use (NULL for the master key) + * @flags: zero for now + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + * + * Since: 3.0 + **/ int gnutls_pcert_import_openpgp_raw(gnutls_pcert_st * pcert, const gnutls_datum_t * cert, gnutls_openpgp_crt_fmt_t @@ -665,6 +755,18 @@ int gnutls_pcert_import_openpgp_raw(gnutls_pcert_st * pcert, return GNUTLS_E_UNIMPLEMENTED_FEATURE; } +/** + * gnutls_pcert_import_openpgp: + * @pcert: The pcert structure + * @crt: The raw certificate to be imported + * @flags: zero for now + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + * + * Since: 3.0 + **/ int gnutls_pcert_import_openpgp(gnutls_pcert_st * pcert, gnutls_openpgp_crt_t crt, unsigned int flags) @@ -672,12 +774,32 @@ int gnutls_pcert_import_openpgp(gnutls_pcert_st * pcert, return GNUTLS_E_UNIMPLEMENTED_FEATURE; } +/** + * gnutls_pcert_export_x509: + * @pcert: The pcert structure. + * @crt: An initialized #gnutls_openpgp_crt_t. + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + * + * Since: 3.4.0 + */ int gnutls_pcert_export_openpgp(gnutls_pcert_st * pcert, gnutls_openpgp_crt_t * crt) { return GNUTLS_E_UNIMPLEMENTED_FEATURE; } +/** + * gnutls_openpgp_privkey_sign_hash: + * @session: is a gnutls session + * @status: is ignored + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + */ void gnutls_openpgp_send_cert(gnutls_session_t session, gnutls_openpgp_crt_status_t status) @@ -685,12 +807,33 @@ gnutls_openpgp_send_cert(gnutls_session_t session, return; } +/** + * gnutls_certificate_get_peers_subkey_id: + * @session: is a gnutls session + * @id: will contain the ID + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + * + * Since: 3.1.3 + **/ int gnutls_certificate_get_peers_subkey_id(gnutls_session_t session, gnutls_datum_t * id) { return GNUTLS_E_UNIMPLEMENTED_FEATURE; } +/** + * gnutls_openpgp_privkey_sign_hash: + * @key: Holds the key + * @hash: holds the data to be signed + * @signature: will contain newly allocated signature + * + * This function is no-op. + * + * Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE. + */ int gnutls_openpgp_privkey_sign_hash(gnutls_openpgp_privkey_t key, const gnutls_datum_t * hash, @@ -699,4 +842,3 @@ gnutls_openpgp_privkey_sign_hash(gnutls_openpgp_privkey_t key, return GNUTLS_E_UNIMPLEMENTED_FEATURE; } -#endif diff --git a/lib/pcert.c b/lib/pcert.c index 3fdce92017..525baff6fc 100644 --- a/lib/pcert.c +++ b/lib/pcert.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -26,9 +26,8 @@ #include #include #include "x509/x509_int.h" -#ifdef ENABLE_OPENPGP -#include "openpgp/openpgp.h" -#endif +#include +#include "x509_b64.h" /** * gnutls_pcert_import_x509: @@ -87,14 +86,15 @@ int gnutls_pcert_import_x509(gnutls_pcert_st * pcert, /** * gnutls_pcert_import_x509_list: - * @pcert: The pcert structure + * @pcert_list: The structures to store the certificates; must not contain initialized #gnutls_pcert_st structures. * @crt: The certificates to be imported - * @ncrt: The number of certificates + * @ncrt: The number of certificates in @crt; will be updated if necessary * @flags: zero or %GNUTLS_X509_CRT_LIST_SORT * - * This convenience function will import the given certificate to a - * #gnutls_pcert_st structure. The structure must be deinitialized - * afterwards using gnutls_pcert_deinit(); + * This convenience function will import the given certificates to an + * already allocated set of #gnutls_pcert_st structures. The structures must + * be deinitialized afterwards using gnutls_pcert_deinit(). @pcert_list + * should contain space for at least @ncrt elements. * * In the case %GNUTLS_X509_CRT_LIST_SORT is specified and that * function cannot sort the list, %GNUTLS_E_CERTIFICATE_LIST_UNSORTED @@ -106,7 +106,7 @@ int gnutls_pcert_import_x509(gnutls_pcert_st * pcert, * * Since: 3.4.0 **/ -int gnutls_pcert_import_x509_list(gnutls_pcert_st * pcert, +int gnutls_pcert_import_x509_list(gnutls_pcert_st * pcert_list, gnutls_x509_crt_t *crt, unsigned *ncrt, unsigned int flags) { @@ -135,7 +135,7 @@ int gnutls_pcert_import_x509_list(gnutls_pcert_st * pcert, } for (i=0;i<*ncrt;i++) { - ret = gnutls_pcert_import_x509(&pcert[i], s[i], 0); + ret = gnutls_pcert_import_x509(&pcert_list[i], s[i], 0); if (ret < 0) { current = i; goto cleanup; @@ -146,7 +146,7 @@ int gnutls_pcert_import_x509_list(gnutls_pcert_st * pcert, cleanup: for (i=0;i= 0) ret = ret2; + } + + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + } else { /* file */ + ret = gnutls_load_file(file, &data); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = gnutls_x509_crt_list_import2(&crts, &crts_size, &data, format, flags|GNUTLS_X509_CRT_LIST_SORT); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } + + if (crts_size > *pcert_list_size) { + gnutls_assert(); + ret = GNUTLS_E_SHORT_MEMORY_BUFFER; + goto cleanup; + } + + ret = gnutls_pcert_import_x509_list(pcert_list, crts, &crts_size, flags); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + *pcert_list_size = crts_size; + + ret = 0; +cleanup: + for (i=0;itype = GNUTLS_CRT_OPENPGP; - pcert->cert.data = NULL; - - sz = 0; - ret = - gnutls_openpgp_crt_export(crt, GNUTLS_OPENPGP_FMT_RAW, NULL, - &sz); - if (ret < 0 && ret != GNUTLS_E_SHORT_MEMORY_BUFFER) { - ret = gnutls_assert_val(ret); - goto cleanup; - } - pcert->cert.data = gnutls_malloc(sz); - if (pcert->cert.data == NULL) { - ret = gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - goto cleanup; - } - - ret = - gnutls_openpgp_crt_export(crt, GNUTLS_OPENPGP_FMT_RAW, - pcert->cert.data, &sz); - if (ret < 0) { - ret = gnutls_assert_val(ret); - goto cleanup; + if (pubkey == NULL) { + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); } - pcert->cert.size = sz; - ret = gnutls_pubkey_init(&pcert->pubkey); - if (ret < 0) { - ret = gnutls_assert_val(ret); - goto cleanup; - } + memset(pcert, 0, sizeof(*pcert)); - ret = gnutls_pubkey_import_openpgp(pcert->pubkey, crt, 0); + /* A pcert struct holds a raw copy of the certificate data. + * Therefore we convert our gnutls_pubkey_t to its raw DER + * representation and copy it into our pcert. It is this raw data + * that will be transferred to the peer via a Certificate msg. + * According to the spec (RFC7250) a DER representation must be used. + */ + ret = gnutls_pubkey_export2(pubkey, GNUTLS_X509_FMT_DER, &pcert->cert); if (ret < 0) { - gnutls_pubkey_deinit(pcert->pubkey); - pcert->pubkey = NULL; - ret = gnutls_assert_val(ret); - goto cleanup; + return gnutls_assert_val(ret); } - return 0; + pcert->pubkey = pubkey; - cleanup: - _gnutls_free_datum(&pcert->cert); + pcert->type = GNUTLS_CRT_RAWPK; - return ret; + return GNUTLS_E_SUCCESS; } /** - * gnutls_pcert_import_openpgp_raw: - * @pcert: The pcert structure - * @cert: The raw certificate to be imported - * @format: The format of the certificate - * @keyid: The key ID to use (NULL for the master key) + * gnutls_pcert_import_rawpk_raw: + * @pcert: The pcert structure to import the data into. + * @rawpubkey: The raw public-key in #gnutls_datum_t format to be imported. + * @format: The format of the raw public-key. DER or PEM. + * @key_usage: An ORed sequence of %GNUTLS_KEY_* flags. * @flags: zero for now * - * This convenience function will import the given certificate to a - * #gnutls_pcert_st structure. The structure must be deinitialized - * afterwards using gnutls_pcert_deinit(); + * This convenience function will import (i.e. convert) the given raw + * public key @rawpubkey into a #gnutls_pcert_st structure. The structure + * must be deinitialized afterwards using gnutls_pcert_deinit(). + * Note that the caller is responsible for freeing @rawpubkey. All necessary + * values will be copied into @pcert. + * + * Key usage (as defined by X.509 extension (2.5.29.15)) can be explicitly + * set because there is no certificate structure around the key to define + * this value. See for more info gnutls_x509_crt_get_key_usage(). * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * - * Since: 3.0 + * Since: 3.6.6 **/ -int gnutls_pcert_import_openpgp_raw(gnutls_pcert_st * pcert, - const gnutls_datum_t * cert, - gnutls_openpgp_crt_fmt_t format, - gnutls_openpgp_keyid_t keyid, - unsigned int flags) +int gnutls_pcert_import_rawpk_raw(gnutls_pcert_st* pcert, + const gnutls_datum_t* rawpubkey, + gnutls_x509_crt_fmt_t format, + unsigned int key_usage, unsigned int flags) { int ret; - gnutls_openpgp_crt_t crt; - memset(pcert, 0, sizeof(*pcert)); - - pcert->cert.data = NULL; + if (rawpubkey == NULL) { + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } - ret = gnutls_openpgp_crt_init(&crt); - if (ret < 0) - return gnutls_assert_val(ret); + memset(pcert, 0, sizeof(*pcert)); - ret = gnutls_openpgp_crt_import(crt, cert, format); + ret = gnutls_pubkey_init(&pcert->pubkey); if (ret < 0) { - ret = gnutls_assert_val(ret); - goto cleanup; + return gnutls_assert_val(ret); } - ret = gnutls_openpgp_crt_set_preferred_key_id(crt, keyid); + // Convert our raw public-key to a gnutls_pubkey_t structure + ret = gnutls_pubkey_import(pcert->pubkey, rawpubkey, format); if (ret < 0) { - ret = gnutls_assert_val(ret); - goto cleanup; + return gnutls_assert_val(ret); } - ret = gnutls_pcert_import_openpgp(pcert, crt, flags); - if (ret < 0) { - ret = gnutls_assert_val(ret); - goto cleanup; + pcert->pubkey->key_usage = key_usage; + + /* A pcert struct holds a raw copy of the certificate data. + * It is this raw data that will be transferred to the peer via a + * Certificate message. According to the spec (RFC7250) a DER + * representation must be used. Therefore we check the format and + * convert if necessary. + */ + if (format == GNUTLS_X509_FMT_PEM) { + ret = _gnutls_fbase64_decode(PEM_PK, + rawpubkey->data, rawpubkey->size, + &pcert->cert); + + if (ret < 0) { + gnutls_pubkey_deinit(pcert->pubkey); + + return gnutls_assert_val(ret); + } + } else { + // Directly copy the raw DER data to our pcert + ret = _gnutls_set_datum(&pcert->cert, rawpubkey->data, rawpubkey->size); + + if (ret < 0) { + gnutls_pubkey_deinit(pcert->pubkey); + + return gnutls_assert_val(ret); + } } - ret = 0; - cleanup: - gnutls_openpgp_crt_deinit(crt); + pcert->type = GNUTLS_CRT_RAWPK; - return ret; + return GNUTLS_E_SUCCESS; } -#endif - /** * gnutls_pcert_export_x509: * @pcert: The pcert structure. @@ -446,50 +523,6 @@ int gnutls_pcert_export_x509(gnutls_pcert_st * pcert, return 0; } -#ifdef ENABLE_OPENPGP - -/** - * gnutls_pcert_export_x509: - * @pcert: The pcert structure. - * @crt: An initialized #gnutls_openpgp_crt_t. - * - * Converts the given #gnutls_pcert_t type into a #gnutls_openpgp_crt_t. - * This function only works if the type of @pcert is %GNUTLS_CRT_OPENPGP. - * When successful, the value written to @crt must be freed with - * gnutls_openpgp_crt_deinit() when no longer needed. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - * - * Since: 3.4.0 - */ -int gnutls_pcert_export_openpgp(gnutls_pcert_st * pcert, - gnutls_openpgp_crt_t * crt) -{ - int ret; - - if (pcert->type != GNUTLS_CRT_OPENPGP) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - ret = gnutls_openpgp_crt_init(crt); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = gnutls_openpgp_crt_import(*crt, &pcert->cert, GNUTLS_OPENPGP_FMT_RAW); - if (ret < 0) { - gnutls_openpgp_crt_deinit(*crt); - *crt = NULL; - - return gnutls_assert_val(ret); - } - - return 0; -} - -#endif - /** * gnutls_pcert_deinit: * @pcert: The structure to be deinitialized @@ -500,7 +533,8 @@ int gnutls_pcert_export_openpgp(gnutls_pcert_st * pcert, **/ void gnutls_pcert_deinit(gnutls_pcert_st * pcert) { - gnutls_pubkey_deinit(pcert->pubkey); + if (pcert->pubkey) + gnutls_pubkey_deinit(pcert->pubkey); pcert->pubkey = NULL; _gnutls_free_datum(&pcert->cert); } @@ -514,25 +548,17 @@ _gnutls_get_auth_info_pcert(gnutls_pcert_st * pcert, cert_auth_info_t info) { switch (type) { - case GNUTLS_CRT_X509: - return gnutls_pcert_import_x509_raw(pcert, - &info-> - raw_certificate_list - [0], - GNUTLS_X509_FMT_DER, - GNUTLS_PCERT_NO_CERT); -#ifdef ENABLE_OPENPGP - case GNUTLS_CRT_OPENPGP: - return gnutls_pcert_import_openpgp_raw(pcert, - &info-> - raw_certificate_list - [0], - GNUTLS_OPENPGP_FMT_RAW, - info->subkey_id, - GNUTLS_PCERT_NO_CERT); -#endif - default: - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; + case GNUTLS_CRT_X509: + return gnutls_pcert_import_x509_raw(pcert, + &info->raw_certificate_list[0], + GNUTLS_X509_FMT_DER, + 0); + case GNUTLS_CRT_RAWPK: + return gnutls_pcert_import_rawpk_raw(pcert, + &info->raw_certificate_list[0], + GNUTLS_X509_FMT_DER, + 0, 0); + default: + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); } } diff --git a/lib/pin.c b/lib/pin.c index 86903fd0b5..13069c5e19 100644 --- a/lib/pin.c +++ b/lib/pin.c @@ -15,7 +15,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ #include "gnutls_int.h" diff --git a/lib/pin.h b/lib/pin.h index 2721d04a0d..a21b185802 100644 --- a/lib/pin.h +++ b/lib/pin.h @@ -1,5 +1,5 @@ -#ifndef PIN_H -#define PIN_H +#ifndef GNUTLS_LIB_PIN_H +#define GNUTLS_LIB_PIN_H extern gnutls_pin_callback_t _gnutls_pin_func; extern void *_gnutls_pin_data; @@ -8,4 +8,4 @@ int _gnutls_retrieve_pin(struct pin_info_st *pin_info, const char *url, const char *label, unsigned pin_flags, char *pin, unsigned pin_size); -#endif /* PIN_H */ +#endif /* GNUTLS_LIB_PIN_H */ diff --git a/lib/pk.c b/lib/pk.c index aad135387e..24f808000a 100644 --- a/lib/pk.c +++ b/lib/pk.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2001-2014 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -37,7 +38,34 @@ #include #include -/* encodes the Dss-Sig-Value structure +/** + * gnutls_encode_rs_value: + * @sig_value: will hold a Dss-Sig-Value DER encoded structure + * @r: must contain the r value + * @s: must contain the s value + * + * This function will encode the provided r and s values, + * into a Dss-Sig-Value structure, used for DSA and ECDSA + * signatures. + * + * The output value should be deallocated using gnutls_free(). + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise + * an error code is returned. + * + * Since: 3.6.0 + * + **/ +int +gnutls_encode_rs_value(gnutls_datum_t * sig_value, + const gnutls_datum_t * r, + const gnutls_datum_t * s) +{ + return _gnutls_encode_ber_rs_raw(sig_value, r, s); +} + +/* same as gnutls_encode_rs_value(), but kept since it used + * to be exported for FIPS140 CAVS testing. */ int _gnutls_encode_ber_rs_raw(gnutls_datum_t * sig_value, @@ -161,6 +189,8 @@ _gnutls_decode_ber_rs(const gnutls_datum_t * sig_value, bigint_t * r, return _gnutls_asn2err(result); } + /* rfc3279 doesn't specify whether Dss-Sig-Value is encoded + * as DER or BER. As such we do not restrict to the DER subset. */ result = asn1_der_decoding(&sig, sig_value->data, sig_value->size, NULL); @@ -190,6 +220,35 @@ _gnutls_decode_ber_rs(const gnutls_datum_t * sig_value, bigint_t * r, return 0; } +/** + * gnutls_decode_rs_value: + * @sig_value: holds a Dss-Sig-Value DER or BER encoded structure + * @r: will contain the r value + * @s: will contain the s value + * + * This function will decode the provided @sig_value, + * into @r and @s elements. The Dss-Sig-Value is used for DSA and ECDSA + * signatures. + * + * The output values may be padded with a zero byte to prevent them + * from being interpreted as negative values. The value + * should be deallocated using gnutls_free(). + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise + * an error code is returned. + * + * Since: 3.6.0 + * + **/ +int gnutls_decode_rs_value(const gnutls_datum_t * sig_value, gnutls_datum_t *r, + gnutls_datum_t *s) +{ + return _gnutls_decode_ber_rs_raw(sig_value, r, s); +} + +/* same as gnutls_decode_rs_value(), but kept since it used + * to be exported for FIPS140 CAVS testing. + */ int _gnutls_decode_ber_rs_raw(const gnutls_datum_t * sig_value, gnutls_datum_t *r, gnutls_datum_t *s) @@ -205,6 +264,8 @@ _gnutls_decode_ber_rs_raw(const gnutls_datum_t * sig_value, gnutls_datum_t *r, return _gnutls_asn2err(result); } + /* rfc3279 doesn't specify whether Dss-Sig-Value is encoded + * as DER or BER. As such we do not restrict to the DER subset. */ result = asn1_der_decoding(&sig, sig_value->data, sig_value->size, NULL); @@ -234,6 +295,181 @@ _gnutls_decode_ber_rs_raw(const gnutls_datum_t * sig_value, gnutls_datum_t *r, return 0; } +int +_gnutls_encode_gost_rs(gnutls_datum_t * sig_value, bigint_t r, bigint_t s, + size_t intsize) +{ + uint8_t *data; + int result; + + data = gnutls_malloc(intsize * 2); + if (data == NULL) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + + if ((result = _gnutls_mpi_bprint_size(s, data, intsize)) < 0) { + gnutls_assert(); + gnutls_free(data); + return result; + } + + if ((result = _gnutls_mpi_bprint_size(r, data + intsize, intsize)) < 0) { + gnutls_assert(); + gnutls_free(data); + return result; + } + + sig_value->data = data; + sig_value->size = intsize * 2; + + return 0; +} + +int +_gnutls_decode_gost_rs(const gnutls_datum_t * sig_value, bigint_t * r, + bigint_t * s) +{ + int ret; + unsigned halfsize = sig_value->size >> 1; + + if (sig_value->size % 2 != 0) { + return gnutls_assert_val(GNUTLS_E_PARSING_ERROR); + } + + ret = _gnutls_mpi_init_scan(s, sig_value->data, halfsize); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + ret = _gnutls_mpi_init_scan(r, sig_value->data + halfsize, halfsize); + if (ret < 0) { + _gnutls_mpi_release(s); + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + + return 0; +} + +/** + * gnutls_encode_gost_rs_value: + * @sig_value: will hold a GOST signature according to RFC 4491 section 2.2.2 + * @r: must contain the r value + * @s: must contain the s value + * + * This function will encode the provided r and s values, into binary + * representation according to RFC 4491 section 2.2.2, used for GOST R + * 34.10-2001 (and thus also for GOST R 34.10-2012) signatures. + * + * The output value should be deallocated using gnutls_free(). + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise + * an error code is returned. + * + * Since: 3.6.0 + */ +int gnutls_encode_gost_rs_value(gnutls_datum_t * sig_value, const gnutls_datum_t * r, const gnutls_datum_t *s) +{ + uint8_t *data; + size_t intsize = r->size; + + if (s->size != intsize) { + gnutls_assert(); + return GNUTLS_E_ILLEGAL_PARAMETER; + } + + data = gnutls_malloc(intsize * 2); + if (data == NULL) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + + memcpy(data, s->data, intsize); + memcpy(data + intsize, r->data, intsize); + + sig_value->data = data; + sig_value->size = intsize * 2; + + return 0; +} + +/** + * gnutls_decode_gost_rs_value: + * @sig_value: will holds a GOST signature according to RFC 4491 section 2.2.2 + * @r: will contain the r value + * @s: will contain the s value + * + * This function will decode the provided @sig_value, into @r and @s elements. + * See RFC 4491 section 2.2.2 for the format of signature value. + * + * The output values may be padded with a zero byte to prevent them + * from being interpreted as negative values. The value + * should be deallocated using gnutls_free(). + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise + * an error code is returned. + * + * Since: 3.6.0 + */ +int gnutls_decode_gost_rs_value(const gnutls_datum_t * sig_value, gnutls_datum_t * r, gnutls_datum_t * s) +{ + int ret; + unsigned halfsize = sig_value->size >> 1; + + if (sig_value->size % 2 != 0) + return gnutls_assert_val(GNUTLS_E_PARSING_ERROR); + + ret = _gnutls_set_datum(s, sig_value->data, halfsize); + if (ret != 0) + return gnutls_assert_val(ret); + + ret = _gnutls_set_datum(r, sig_value->data + halfsize, halfsize); + if (ret != 0) { + _gnutls_free_datum(s); + return gnutls_assert_val(ret); + } + + return 0; +} + +gnutls_digest_algorithm_t _gnutls_gost_digest(gnutls_pk_algorithm_t pk) +{ + if (pk == GNUTLS_PK_GOST_01) + return GNUTLS_DIG_GOSTR_94; + else if (pk == GNUTLS_PK_GOST_12_256) + return GNUTLS_DIG_STREEBOG_256; + else if (pk == GNUTLS_PK_GOST_12_512) + return GNUTLS_DIG_STREEBOG_512; + + gnutls_assert(); + + return GNUTLS_DIG_UNKNOWN; +} + +gnutls_pk_algorithm_t _gnutls_digest_gost(gnutls_digest_algorithm_t digest) +{ + if (digest == GNUTLS_DIG_GOSTR_94) + return GNUTLS_PK_GOST_01; + else if (digest == GNUTLS_DIG_STREEBOG_256) + return GNUTLS_PK_GOST_12_256; + else if (digest == GNUTLS_DIG_STREEBOG_512) + return GNUTLS_PK_GOST_12_512; + + gnutls_assert(); + + return GNUTLS_PK_UNKNOWN; +} + +gnutls_gost_paramset_t _gnutls_gost_paramset_default(gnutls_pk_algorithm_t pk) +{ + if (pk == GNUTLS_PK_GOST_01) + return GNUTLS_GOST_PARAMSET_CP_A; + else if (pk == GNUTLS_PK_GOST_12_256 || + pk == GNUTLS_PK_GOST_12_512) + return GNUTLS_GOST_PARAMSET_TC26_Z; + else + return gnutls_assert_val(GNUTLS_GOST_PARAMSET_UNKNOWN); +} + /* some generic pk functions */ int _gnutls_pk_params_copy(gnutls_pk_params_st * dst, @@ -242,12 +478,15 @@ int _gnutls_pk_params_copy(gnutls_pk_params_st * dst, unsigned int i, j; dst->params_nr = 0; - if (src == NULL || src->params_nr == 0) { + if (src == NULL || (src->params_nr == 0 && src->raw_pub.size == 0)) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - dst->flags = src->flags; + dst->pkflags = src->pkflags; + dst->curve = src->curve; + dst->gost_params = src->gost_params; + dst->qbits = src->qbits; dst->algo = src->algo; for (i = 0; i < src->params_nr; i++) { @@ -275,6 +514,8 @@ int _gnutls_pk_params_copy(gnutls_pk_params_st * dst, } dst->palgo = src->palgo; + memcpy(&dst->spki, &src->spki, sizeof(gnutls_x509_spki_st)); + return 0; fail: @@ -296,8 +537,6 @@ void gnutls_pk_params_release(gnutls_pk_params_st * p) } gnutls_free(p->raw_priv.data); gnutls_free(p->raw_pub.data); - p->raw_priv.data = NULL; - p->raw_pub.data = NULL; p->params_nr = 0; } @@ -317,6 +556,34 @@ void gnutls_pk_params_clear(gnutls_pk_params_st * p) } } +int +_gnutls_find_rsa_pss_salt_size(unsigned bits, const mac_entry_st *me, + unsigned salt_size) +{ + unsigned digest_size; + int max_salt_size; + unsigned key_size; + + digest_size = _gnutls_hash_get_algo_len(me); + key_size = (bits + 7) / 8; + + if (key_size == 0) { + return gnutls_assert_val(GNUTLS_E_PK_INVALID_PUBKEY); + } else { + max_salt_size = key_size - digest_size - 2; + if (max_salt_size < 0) + return gnutls_assert_val(GNUTLS_E_CONSTRAINT_ERROR); + } + + if (salt_size < digest_size) + salt_size = digest_size; + + if (salt_size > (unsigned)max_salt_size) + salt_size = max_salt_size; + + return salt_size; +} + /* Writes the digest information and the digest in a DER encoded * structure. The digest info is allocated and stored into the info structure. */ @@ -331,6 +598,10 @@ encode_ber_digest_info(const mac_entry_st * e, uint8_t *tmp_output; int tmp_output_size; + /* prevent asn1_write_value() treating input as string */ + if (digest->size == 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + algo = _gnutls_x509_mac_to_oid(e); if (algo == NULL) { gnutls_assert(); @@ -467,6 +738,8 @@ gnutls_decode_ber_digest_info(const gnutls_datum_t * info, return _gnutls_asn2err(result); } + /* rfc2313 required BER encoding of that field, thus + * we don't restrict libtasn1 to DER subset */ result = asn1_der_decoding(&dinfo, info->data, info->size, NULL); if (result != ASN1_SUCCESS) { gnutls_assert(); @@ -530,22 +803,27 @@ _gnutls_params_get_rsa_raw(const gnutls_pk_params_st* params, gnutls_datum_t * d, gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * u, gnutls_datum_t * e1, - gnutls_datum_t * e2) + gnutls_datum_t * e2, + unsigned int flags) { int ret; + mpi_dprint_func dprint = _gnutls_mpi_dprint_lz; + + if (flags & GNUTLS_EXPORT_FLAG_NO_LZ) + dprint = _gnutls_mpi_dprint; if (params == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - if (params->algo != GNUTLS_PK_RSA) { + if (!GNUTLS_PK_IS_RSA(params->algo)) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } if (m) { - ret = _gnutls_mpi_dprint_lz(params->params[0], m); + ret = dprint(params->params[0], m); if (ret < 0) { gnutls_assert(); goto error; @@ -554,7 +832,7 @@ _gnutls_params_get_rsa_raw(const gnutls_pk_params_st* params, /* E */ if (e) { - ret = _gnutls_mpi_dprint_lz(params->params[1], e); + ret = dprint(params->params[1], e); if (ret < 0) { gnutls_assert(); goto error; @@ -563,7 +841,7 @@ _gnutls_params_get_rsa_raw(const gnutls_pk_params_st* params, /* D */ if (d && params->params[2]) { - ret = _gnutls_mpi_dprint_lz(params->params[2], d); + ret = dprint(params->params[2], d); if (ret < 0) { gnutls_assert(); goto error; @@ -575,7 +853,7 @@ _gnutls_params_get_rsa_raw(const gnutls_pk_params_st* params, /* P */ if (p && params->params[3]) { - ret = _gnutls_mpi_dprint_lz(params->params[3], p); + ret = dprint(params->params[3], p); if (ret < 0) { gnutls_assert(); goto error; @@ -587,7 +865,7 @@ _gnutls_params_get_rsa_raw(const gnutls_pk_params_st* params, /* Q */ if (q && params->params[4]) { - ret = _gnutls_mpi_dprint_lz(params->params[4], q); + ret = dprint(params->params[4], q); if (ret < 0) { gnutls_assert(); goto error; @@ -599,7 +877,7 @@ _gnutls_params_get_rsa_raw(const gnutls_pk_params_st* params, /* U */ if (u && params->params[5]) { - ret = _gnutls_mpi_dprint_lz(params->params[5], u); + ret = dprint(params->params[5], u); if (ret < 0) { gnutls_assert(); goto error; @@ -611,7 +889,7 @@ _gnutls_params_get_rsa_raw(const gnutls_pk_params_st* params, /* E1 */ if (e1 && params->params[6]) { - ret = _gnutls_mpi_dprint_lz(params->params[6], e1); + ret = dprint(params->params[6], e1); if (ret < 0) { gnutls_assert(); goto error; @@ -623,7 +901,7 @@ _gnutls_params_get_rsa_raw(const gnutls_pk_params_st* params, /* E2 */ if (e2 && params->params[7]) { - ret = _gnutls_mpi_dprint_lz(params->params[7], e2); + ret = dprint(params->params[7], e2); if (ret < 0) { gnutls_assert(); goto error; @@ -651,9 +929,13 @@ int _gnutls_params_get_dsa_raw(const gnutls_pk_params_st* params, gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * g, gnutls_datum_t * y, - gnutls_datum_t * x) + gnutls_datum_t * x, unsigned int flags) { int ret; + mpi_dprint_func dprint = _gnutls_mpi_dprint_lz; + + if (flags & GNUTLS_EXPORT_FLAG_NO_LZ) + dprint = _gnutls_mpi_dprint; if (params == NULL) { gnutls_assert(); @@ -667,7 +949,7 @@ _gnutls_params_get_dsa_raw(const gnutls_pk_params_st* params, /* P */ if (p) { - ret = _gnutls_mpi_dprint_lz(params->params[0], p); + ret = dprint(params->params[0], p); if (ret < 0) { gnutls_assert(); return ret; @@ -676,7 +958,7 @@ _gnutls_params_get_dsa_raw(const gnutls_pk_params_st* params, /* Q */ if (q) { - ret = _gnutls_mpi_dprint_lz(params->params[1], q); + ret = dprint(params->params[1], q); if (ret < 0) { gnutls_assert(); _gnutls_free_datum(p); @@ -687,7 +969,7 @@ _gnutls_params_get_dsa_raw(const gnutls_pk_params_st* params, /* G */ if (g) { - ret = _gnutls_mpi_dprint_lz(params->params[2], g); + ret = dprint(params->params[2], g); if (ret < 0) { gnutls_assert(); _gnutls_free_datum(p); @@ -699,7 +981,7 @@ _gnutls_params_get_dsa_raw(const gnutls_pk_params_st* params, /* Y */ if (y) { - ret = _gnutls_mpi_dprint_lz(params->params[3], y); + ret = dprint(params->params[3], y); if (ret < 0) { gnutls_assert(); _gnutls_free_datum(p); @@ -711,7 +993,7 @@ _gnutls_params_get_dsa_raw(const gnutls_pk_params_st* params, /* X */ if (x) { - ret = _gnutls_mpi_dprint_lz(params->params[4], x); + ret = dprint(params->params[4], x); if (ret < 0) { gnutls_assert(); _gnutls_free_datum(y); @@ -729,9 +1011,15 @@ int _gnutls_params_get_ecc_raw(const gnutls_pk_params_st* params, gnutls_ecc_curve_t * curve, gnutls_datum_t * x, gnutls_datum_t * y, - gnutls_datum_t * k) + gnutls_datum_t * k, + unsigned int flags) { int ret; + mpi_dprint_func dprint = _gnutls_mpi_dprint_lz; + const gnutls_ecc_curve_entry_st *e; + + if (flags & GNUTLS_EXPORT_FLAG_NO_LZ) + dprint = _gnutls_mpi_dprint; if (params == NULL) { gnutls_assert(); @@ -739,11 +1027,101 @@ int _gnutls_params_get_ecc_raw(const gnutls_pk_params_st* params, } if (curve) - *curve = params->flags; + *curve = params->curve; + + e = _gnutls_ecc_curve_get_params(params->curve); + + if (_curve_is_eddsa(e)) { + if (x) { + ret = _gnutls_set_datum(x, params->raw_pub.data, params->raw_pub.size); + if (ret < 0) { + return gnutls_assert_val(ret); + } + } + + if (y) { + y->data = NULL; + y->size = 0; + } + + if (k) { + ret = _gnutls_set_datum(k, params->raw_priv.data, params->raw_priv.size); + if (ret < 0) { + _gnutls_free_datum(x); + return gnutls_assert_val(ret); + } + } + + return 0; + } + + if (unlikely(e == NULL || e->pk != GNUTLS_PK_ECDSA)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + /* X */ + if (x) { + ret = dprint(params->params[ECC_X], x); + if (ret < 0) { + gnutls_assert(); + return ret; + } + } + + /* Y */ + if (y) { + ret = dprint(params->params[ECC_Y], y); + if (ret < 0) { + gnutls_assert(); + _gnutls_free_datum(x); + return ret; + } + } + + + /* K */ + if (k) { + ret = dprint(params->params[ECC_K], k); + if (ret < 0) { + gnutls_assert(); + _gnutls_free_datum(x); + _gnutls_free_datum(y); + return ret; + } + } + + return 0; + +} + +int _gnutls_params_get_gost_raw(const gnutls_pk_params_st* params, + gnutls_ecc_curve_t * curve, + gnutls_digest_algorithm_t * digest, + gnutls_gost_paramset_t * paramset, + gnutls_datum_t * x, + gnutls_datum_t * y, + gnutls_datum_t * k, + unsigned int flags) +{ + int ret; + mpi_dprint_func dprint = _gnutls_mpi_dprint_le; + + if (params == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + if (curve) + *curve = params->curve; + + if (digest) + *digest = _gnutls_gost_digest(params->algo); + + if (paramset) + *paramset = params->gost_params; /* X */ if (x) { - ret = _gnutls_mpi_dprint_lz(params->params[ECC_X], x); + ret = dprint(params->params[GOST_X], x); if (ret < 0) { gnutls_assert(); return ret; @@ -752,7 +1130,7 @@ int _gnutls_params_get_ecc_raw(const gnutls_pk_params_st* params, /* Y */ if (y) { - ret = _gnutls_mpi_dprint_lz(params->params[ECC_Y], y); + ret = dprint(params->params[GOST_Y], y); if (ret < 0) { gnutls_assert(); _gnutls_free_datum(x); @@ -763,7 +1141,7 @@ int _gnutls_params_get_ecc_raw(const gnutls_pk_params_st* params, /* K */ if (k) { - ret = _gnutls_mpi_dprint_lz(params->params[ECC_K], k); + ret = dprint(params->params[GOST_K], k); if (ret < 0) { gnutls_assert(); _gnutls_free_datum(x); @@ -833,8 +1211,14 @@ pk_prepare_hash(gnutls_pk_algorithm_t pk, _gnutls_free_datum(&old_digest); break; + case GNUTLS_PK_RSA_PSS: case GNUTLS_PK_DSA: - case GNUTLS_PK_EC: + case GNUTLS_PK_ECDSA: + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: break; default: gnutls_assert(); diff --git a/lib/pk.h b/lib/pk.h index c4a25bcd7c..cc61e08cef 100644 --- a/lib/pk.h +++ b/lib/pk.h @@ -16,23 +16,26 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_PK_H -#define GNUTLS_PK_H +#ifndef GNUTLS_LIB_PK_H +#define GNUTLS_LIB_PK_H extern int crypto_pk_prio; extern gnutls_crypto_pk_st _gnutls_pk_ops; #define _gnutls_pk_encrypt( algo, ciphertext, plaintext, params) _gnutls_pk_ops.encrypt( algo, ciphertext, plaintext, params) #define _gnutls_pk_decrypt( algo, ciphertext, plaintext, params) _gnutls_pk_ops.decrypt( algo, ciphertext, plaintext, params) -#define _gnutls_pk_sign( algo, sig, data, params) _gnutls_pk_ops.sign( algo, sig, data, params) -#define _gnutls_pk_verify( algo, data, sig, params) _gnutls_pk_ops.verify( algo, data, sig, params) +#define _gnutls_pk_decrypt2( algo, ciphertext, plaintext, size, params) _gnutls_pk_ops.decrypt2( algo, ciphertext, plaintext, size, params) +#define _gnutls_pk_sign( algo, sig, data, params, sign_params) _gnutls_pk_ops.sign( algo, sig, data, params, sign_params) +#define _gnutls_pk_verify( algo, data, sig, params, sign_params) _gnutls_pk_ops.verify( algo, data, sig, params, sign_params) #define _gnutls_pk_verify_priv_params( algo, params) _gnutls_pk_ops.verify_priv_params( algo, params) #define _gnutls_pk_verify_pub_params( algo, params) _gnutls_pk_ops.verify_pub_params( algo, params) -#define _gnutls_pk_derive( algo, out, pub, priv) _gnutls_pk_ops.derive( algo, out, pub, priv) +#define _gnutls_pk_derive( algo, out, pub, priv) _gnutls_pk_ops.derive( algo, out, pub, priv, NULL, 0) +#define _gnutls_pk_derive_nonce( algo, out, pub, priv, nonce) _gnutls_pk_ops.derive( algo, out, pub, priv, nonce, 0) +#define _gnutls_pk_derive_tls13( algo, out, pub, priv) _gnutls_pk_ops.derive( algo, out, pub, priv, NULL, PK_DERIVE_TLS13) #define _gnutls_pk_generate_keys( algo, bits, params, temporal) _gnutls_pk_ops.generate_keys( algo, bits, params, temporal) #define _gnutls_pk_generate_params( algo, bits, priv) _gnutls_pk_ops.generate_params( algo, bits, priv) #define _gnutls_pk_hash_algorithm( pk, sig, params, hash) _gnutls_pk_ops.hash_algorithm(pk, sig, params, hash) @@ -68,6 +71,18 @@ int _gnutls_decode_ber_rs_raw(const gnutls_datum_t * sig_value, gnutls_datum_t *r, gnutls_datum_t *s); +int +_gnutls_encode_gost_rs(gnutls_datum_t * sig_value, bigint_t r, bigint_t s, + size_t intsize); + +int +_gnutls_decode_gost_rs(const gnutls_datum_t * sig_value, bigint_t * r, + bigint_t * s); + +gnutls_digest_algorithm_t _gnutls_gost_digest(gnutls_pk_algorithm_t pk); +gnutls_pk_algorithm_t _gnutls_digest_gost(gnutls_digest_algorithm_t digest); +gnutls_gost_paramset_t _gnutls_gost_paramset_default(gnutls_pk_algorithm_t pk); + int encode_ber_digest_info(const mac_entry_st * e, const gnutls_datum_t * digest, @@ -81,19 +96,30 @@ _gnutls_params_get_rsa_raw(const gnutls_pk_params_st* params, gnutls_datum_t * d, gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * u, gnutls_datum_t * e1, - gnutls_datum_t * e2); + gnutls_datum_t * e2, + unsigned int flags); int _gnutls_params_get_dsa_raw(const gnutls_pk_params_st* params, gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * g, gnutls_datum_t * y, - gnutls_datum_t * x); + gnutls_datum_t * x, unsigned int flags); int _gnutls_params_get_ecc_raw(const gnutls_pk_params_st* params, gnutls_ecc_curve_t * curve, gnutls_datum_t * x, gnutls_datum_t * y, - gnutls_datum_t * k); + gnutls_datum_t * k, + unsigned int flags); + +int _gnutls_params_get_gost_raw(const gnutls_pk_params_st* params, + gnutls_ecc_curve_t * curve, + gnutls_digest_algorithm_t * digest, + gnutls_gost_paramset_t * paramset, + gnutls_datum_t * x, + gnutls_datum_t * y, + gnutls_datum_t * k, + unsigned int flags); int pk_prepare_hash(gnutls_pk_algorithm_t pk, const mac_entry_st * hash, gnutls_datum_t * output); @@ -101,4 +127,7 @@ int pk_hash_data(gnutls_pk_algorithm_t pk, const mac_entry_st * hash, gnutls_pk_params_st * params, const gnutls_datum_t * data, gnutls_datum_t * digest); -#endif /* GNUTLS_PK_H */ +int _gnutls_find_rsa_pss_salt_size(unsigned bits, const mac_entry_st *me, + unsigned salt_size); + +#endif /* GNUTLS_LIB_PK_H */ diff --git a/lib/pkcs11.c b/lib/pkcs11.c index 95b0cab13e..d03bf6e444 100644 --- a/lib/pkcs11.c +++ b/lib/pkcs11.c @@ -22,7 +22,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ #include "gnutls_int.h" @@ -35,10 +35,9 @@ #include #include -#include #include "pkcs11x.h" -#include #include +#include "x509/x509_int.h" #include @@ -59,16 +58,25 @@ struct gnutls_pkcs11_provider_st { struct find_flags_data_st { struct p11_kit_uri *info; - unsigned int slot_flags; + unsigned int slot_flags; /* Slot Information Flags */ + unsigned int token_flags; /* Token Information Flags */ unsigned int trusted; }; -struct find_url_data_st { +struct find_single_obj_st { gnutls_pkcs11_obj_t obj; bool overwrite_exts; /* only valid if looking for a certificate */ }; -struct find_obj_data_st { +struct find_obj_session_st { + gnutls_pkcs11_obj_t obj; + struct ck_function_list *ptr; + ck_session_handle_t pks; + ck_object_handle_t ohandle; + unsigned long slot_id; +}; + +struct find_multi_obj_st { gnutls_pkcs11_obj_t *p_list; unsigned int current; unsigned int flags; @@ -85,6 +93,8 @@ struct find_token_num { struct find_token_modname { struct p11_kit_uri *info; char *modname; + void *ptr; + unsigned long slot_id; }; struct find_pkey_list_st { @@ -107,7 +117,8 @@ struct find_cert_st { static struct gnutls_pkcs11_provider_st providers[MAX_PROVIDERS]; static unsigned int active_providers = 0; -static unsigned int providers_initialized = 0; + +static init_level_t providers_initialized = PROV_UNINITIALIZED; static unsigned int pkcs11_forkid = 0; static int _gnutls_pkcs11_reinit(void); @@ -115,6 +126,8 @@ static int _gnutls_pkcs11_reinit(void); gnutls_pkcs11_token_callback_t _gnutls_token_func; void *_gnutls_token_data; +static int auto_load(unsigned trusted); + int pkcs11_rv_to_err(ck_rv_t rv) { switch (rv) { @@ -231,7 +244,8 @@ pkcs11_add_module(const char* name, struct ck_function_list *module, unsigned cu /* initially check if this module is a duplicate */ for (i = 0; i < active_providers; i++) { /* already loaded, skip the rest */ - if (module == providers[i].module) { + if (module == providers[i].module || + memcmp(&info, &providers[i].info, sizeof(info)) == 0) { _gnutls_debug_log("p11: module %s is already loaded.\n", name); return GNUTLS_E_INT_RET_0; } @@ -260,22 +274,22 @@ pkcs11_add_module(const char* name, struct ck_function_list *module, unsigned cu * The output value of the callback will be returned if it is * a negative one (indicating failure). */ -int _gnutls_pkcs11_check_init(void *priv, pkcs11_reinit_function cb) +int _gnutls_pkcs11_check_init(init_level_t req_level, void *priv, pkcs11_reinit_function cb) { - int ret; + int ret, sret = 0; ret = gnutls_mutex_lock(&_gnutls_pkcs11_mutex); if (ret != 0) return gnutls_assert_val(GNUTLS_E_LOCKING_ERROR); - if (providers_initialized != 0) { + if (providers_initialized > PROV_UNINITIALIZED) { ret = 0; if (_gnutls_detect_fork(pkcs11_forkid)) { /* if we are initialized but a fork is detected */ ret = _gnutls_pkcs11_reinit(); if (ret == 0) { - ret = 1; + sret = 1; if (cb) { int ret2 = cb(priv); if (ret2 < 0) @@ -285,19 +299,60 @@ int _gnutls_pkcs11_check_init(void *priv, pkcs11_reinit_function cb) } } - gnutls_mutex_unlock(&_gnutls_pkcs11_mutex); - return ret; + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } } - _gnutls_debug_log("Initializing PKCS #11 modules\n"); - ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_AUTO, NULL); + /* Possible Transitions: PROV_UNINITIALIZED -> PROV_INIT_MANUAL -> PROV_INIT_MANUAL_TRUSTED + * PROV_UNINITIALIZED -> PROV_INIT_TRUSTED -> PROV_INIT_ALL + * + * request for PROV_INIT_TRUSTED may result to PROV_INIT_MANUAL_TRUSTED + * request for PROV_INIT_ALL may result to PROV_INIT_MANUAL or PROV_INIT_MANUAL_TRUSTED + */ + switch(req_level) { + case PROV_UNINITIALIZED: + case PROV_INIT_MANUAL: + break; + case PROV_INIT_TRUSTED: + case PROV_INIT_MANUAL_TRUSTED: + if (providers_initialized < PROV_INIT_MANUAL_TRUSTED) { + _gnutls_debug_log("Initializing needed PKCS #11 modules\n"); + ret = auto_load(1); + if (ret < 0) { + gnutls_assert(); + } - gnutls_mutex_unlock(&_gnutls_pkcs11_mutex); + if (providers_initialized == PROV_INIT_MANUAL) + providers_initialized = PROV_INIT_MANUAL_TRUSTED; + else + providers_initialized = PROV_INIT_TRUSTED; - if (ret < 0) - return gnutls_assert_val(ret); + goto cleanup; + } + break; + case PROV_INIT_ALL: + if (providers_initialized == PROV_INIT_TRUSTED || + providers_initialized == PROV_UNINITIALIZED) { + _gnutls_debug_log("Initializing all PKCS #11 modules\n"); + ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_AUTO, NULL); + if (ret < 0) { + gnutls_assert(); + } - return 0; + providers_initialized = PROV_INIT_ALL; + goto cleanup; + } + break; + } + + ret = sret; + + cleanup: + gnutls_mutex_unlock(&_gnutls_pkcs11_mutex); + + return ret; } @@ -511,7 +566,8 @@ gnutls_pkcs11_obj_set_info(gnutls_pkcs11_obj_t obj, } data = tmp; data_size = size; - /* fallthrough */ + + FALLTHROUGH; case GNUTLS_PKCS11_OBJ_ID: a[0].type = CKA_ID; a[0].value = (void*)data; @@ -556,12 +612,17 @@ gnutls_pkcs11_obj_set_info(gnutls_pkcs11_obj_t obj, * @obj: should contain a #gnutls_pkcs11_obj_t type * @itype: Denotes the type of information requested * @output: where output will be stored - * @output_size: contains the maximum size of the output and will be overwritten with actual + * @output_size: contains the maximum size of the output buffer and will be + * overwritten with the actual size. * * This function will return information about the PKCS11 certificate * such as the label, id as well as token information where the key is - * stored. When output is text it returns null terminated string - * although @output_size contains the size of the actual data only. + * stored. + * + * When output is text, a null terminated string is written to @output and its + * string length is written to @output_size (without null terminator). If the + * buffer is too small, @output_size will contain the expected buffer size + * (with null terminator for text) and return %GNUTLS_E_SHORT_MEMORY_BUFFER. * * In versions previously to 3.6.0 this function included the null terminator * to @output_size. After 3.6.0 the output size doesn't include the terminator character. @@ -578,6 +639,128 @@ gnutls_pkcs11_obj_get_info(gnutls_pkcs11_obj_t obj, return pkcs11_get_info(obj->info, itype, output, output_size); } +static int +find_obj_session_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo, + struct ck_token_info *tinfo, struct ck_info *lib_info, + void *input) +{ + struct find_obj_session_st *find_data = input; + struct ck_attribute a[4]; + ck_rv_t rv; + ck_object_handle_t ctx = CK_INVALID_HANDLE; + unsigned long count; + unsigned a_vals; + ck_certificate_type_t type; + ck_object_class_t class; + int found = 0, ret; + + if (tinfo == NULL) { /* we don't support multiple calls */ + gnutls_assert(); + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + } + + /* do not bother reading the token if basic fields do not match + */ + if (!p11_kit_uri_match_token_info(find_data->obj->info, tinfo) || + !p11_kit_uri_match_module_info(find_data->obj->info, + lib_info)) { + gnutls_assert(); + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + } + + ret = add_obj_attrs(find_data->obj->info, a, &a_vals, &class, &type); + if (ret < 0) + return gnutls_assert_val(ret); + + rv = pkcs11_find_objects_init(sinfo->module, sinfo->pks, a, + a_vals); + if (rv != CKR_OK) { + gnutls_assert(); + _gnutls_debug_log("p11: FindObjectsInit failed.\n"); + ret = pkcs11_rv_to_err(rv); + goto cleanup; + } + + if (pkcs11_find_objects(sinfo->module, sinfo->pks, &ctx, 1, &count) == CKR_OK && + count == 1) { + find_data->ptr = sinfo->module; + find_data->pks = sinfo->pks; + find_data->slot_id = sinfo->sid; + find_data->ohandle = ctx; + found = 1; + } + + if (found == 0) { + gnutls_assert(); + if (count > 1) + ret = GNUTLS_E_TOO_MANY_MATCHES; + else + ret = GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + + } else { + ret = 0; + } + + cleanup: + pkcs11_find_objects_final(sinfo); + + return ret; +} + + +/** + * gnutls_pkcs11_obj_get_ptr: + * @obj: should contain a #gnutls_pkcs11_obj_t type + * @ptr: will contain the CK_FUNCTION_LIST_PTR pointer (may be %NULL) + * @session: will contain the CK_SESSION_HANDLE of the object + * @ohandle: will contain the CK_OBJECT_HANDLE of the object + * @slot_id: the identifier of the slot (may be %NULL) + * @flags: Or sequence of GNUTLS_PKCS11_OBJ_* flags + * + * Obtains the PKCS#11 session handles of an object. @session and @ohandle + * must be deinitialized by the caller. The returned pointers are + * independent of the @obj lifetime. + * + * Returns: %GNUTLS_E_SUCCESS (0) on success or a negative error code + * on error. + * + * Since: 3.6.3 + **/ +int +gnutls_pkcs11_obj_get_ptr(gnutls_pkcs11_obj_t obj, void **ptr, + void **session, void **ohandle, + unsigned long *slot_id, + unsigned int flags) +{ + int ret; + struct find_obj_session_st find_data; + + PKCS11_CHECK_INIT; + memset(&find_data, 0, sizeof(find_data)); + + find_data.obj = obj; + + ret = + _pkcs11_traverse_tokens(find_obj_session_cb, &find_data, obj->info, + &obj->pin, + SESSION_NO_CLOSE|pkcs11_obj_flags_to_int(flags)); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + if (ptr) + *ptr = find_data.ptr; + + *ohandle = (void*)find_data.ohandle; + *session = (void*)find_data.pks; + + if (slot_id) + *slot_id = find_data.slot_id; + + return 0; +} + int pkcs11_get_info(struct p11_kit_uri *info, gnutls_pkcs11_obj_info_t itype, void *output, @@ -741,13 +924,13 @@ static void compat_load(const char *configfile) return; } -static int auto_load(void) +static int auto_load(unsigned trusted) { struct ck_function_list **modules; int i, ret; char* name; - modules = p11_kit_modules_load_and_initialize(0); + modules = p11_kit_modules_load_and_initialize(trusted?P11_KIT_MODULE_TRUSTED:0); if (modules == NULL) { gnutls_assert(); _gnutls_debug_log @@ -816,15 +999,21 @@ gnutls_pkcs11_init(unsigned int flags, const char *deprecated_config_file) if (flags == GNUTLS_PKCS11_FLAG_MANUAL) { /* if manual configuration is requested then don't * bother loading any other providers */ - providers_initialized = 1; + providers_initialized = PROV_INIT_MANUAL; return 0; } else if (flags & GNUTLS_PKCS11_FLAG_AUTO) { if (deprecated_config_file == NULL) - ret = auto_load(); + ret = auto_load(0); compat_load(deprecated_config_file); - providers_initialized = 1; + providers_initialized = PROV_INIT_ALL; + + return ret; + } else if (flags & GNUTLS_PKCS11_FLAG_AUTO_TRUSTED) { + ret = auto_load(1); + + providers_initialized = PROV_INIT_TRUSTED; return ret; } @@ -917,7 +1106,7 @@ void gnutls_pkcs11_deinit(void) p11_kit_module_release(providers[i].module); } active_providers = 0; - providers_initialized = 0; + providers_initialized = PROV_UNINITIALIZED; gnutls_pkcs11_set_pin_function(NULL, NULL); gnutls_pkcs11_set_token_function(NULL, NULL); @@ -1047,7 +1236,6 @@ int gnutls_pkcs11_obj_init(gnutls_pkcs11_obj_t * obj) (*obj)->info = p11_kit_uri_new(); if ((*obj)->info == NULL) { gnutls_free(*obj); - *obj = NULL; gnutls_assert(); return GNUTLS_E_MEMORY_ERROR; } @@ -1102,7 +1290,7 @@ void gnutls_pkcs11_obj_deinit(gnutls_pkcs11_obj_t obj) * replaced by the actual size of parameters) * * This function will export the PKCS11 object data. It is normal for - * data to be inaccesible and in that case %GNUTLS_E_INVALID_REQUEST + * data to be inaccessible and in that case %GNUTLS_E_INVALID_REQUEST * will be returned. * * If the buffer provided is not long enough to hold the output, then @@ -1140,7 +1328,7 @@ gnutls_pkcs11_obj_export(gnutls_pkcs11_obj_t obj, * @out: will contain the object data * * This function will export the PKCS11 object data. It is normal for - * data to be inaccesible and in that case %GNUTLS_E_INVALID_REQUEST + * data to be inaccessible and in that case %GNUTLS_E_INVALID_REQUEST * will be returned. * * The output buffer is allocated using gnutls_malloc(). @@ -1163,7 +1351,7 @@ gnutls_pkcs11_obj_export2(gnutls_pkcs11_obj_t obj, gnutls_datum_t * out) * @fmt: The format of the exported data * * This function will export the PKCS11 object data. It is normal for - * data to be inaccesible and in that case %GNUTLS_E_INVALID_REQUEST + * data to be inaccessible and in that case %GNUTLS_E_INVALID_REQUEST * will be returned. * * The output buffer is allocated using gnutls_malloc(). @@ -1343,15 +1531,13 @@ pkcs11_open_session(struct pkcs11_session_info *sinfo, sinfo->init = 1; memcpy(&sinfo->tinfo, &tinfo, sizeof(sinfo->tinfo)); - if (flags & SESSION_LOGIN) { - ret = - pkcs11_login(sinfo, pin_info, info, - (flags & SESSION_SO) ? 1 : 0, 0); - if (ret < 0) { - gnutls_assert(); - pkcs11_close_session(sinfo); - return ret; - } + ret = + pkcs11_login(sinfo, pin_info, info, + flags); + if (ret < 0) { + gnutls_assert(); + pkcs11_close_session(sinfo); + return ret; } return 0; @@ -1426,15 +1612,18 @@ _pkcs11_traverse_tokens(find_func_t find_func, void *input, memcpy(&sinfo.tinfo, &l_tinfo, sizeof(sinfo.tinfo)); memcpy(&sinfo.slot_info, &l_sinfo, sizeof(sinfo.slot_info)); - if (flags & SESSION_LOGIN) { - ret = - pkcs11_login(&sinfo, pin_info, - info, (flags & SESSION_SO) ? 1 : 0, - 0); - if (ret < 0) { - gnutls_assert(); + ret = + pkcs11_login(&sinfo, pin_info, + info, flags); + if (ret < 0) { + gnutls_assert(); + pkcs11_close_session(&sinfo); + + /* treat the error as fatal only if + * the token requires login */ + if (l_tinfo.flags & CKF_LOGIN_REQUIRED) return ret; - } + continue; } ret = @@ -1467,7 +1656,8 @@ _pkcs11_traverse_tokens(find_func_t find_func, void *input, } if (pks != 0 && module != NULL) { - pkcs11_close_session(&sinfo); + if (ret != 0 || !(flags & SESSION_NO_CLOSE)) + pkcs11_close_session(&sinfo); } return ret; @@ -1707,6 +1897,35 @@ int pkcs11_read_pubkey(struct ck_function_list *module, } break; +#ifdef HAVE_CKM_EDDSA + case CKK_EC_EDWARDS: + a[0].type = CKA_EC_PARAMS; + a[0].value = tmp1; + a[0].value_len = tmp1_size; + + a[1].type = CKA_EC_POINT; + a[1].value = tmp2; + a[1].value_len = tmp2_size; + + if ((rv = pkcs11_get_attribute_value(module, pks, ctx, a, 2)) == + CKR_OK) { + + pobj->pubkey[0].data = a[0].value; + pobj->pubkey[0].size = a[0].value_len; + + pobj->pubkey[1].data = a[1].value; + pobj->pubkey[1].size = a[1].value_len; + + pobj->pubkey_size = 2; + } else { + gnutls_assert(); + + ret = pkcs11_rv_to_err(rv); + goto cleanup; + } + + break; +#endif default: _gnutls_debug_log("requested reading public key of unsupported type %u\n", (unsigned)key_type); ret = gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); @@ -1875,8 +2094,12 @@ pkcs11_import_object(ck_object_handle_t ctx, ck_object_class_t class, a[0].value_len = sizeof(b); rv = pkcs11_get_attribute_value(sinfo->module, sinfo->pks, ctx, a, 1); - if (rv == CKR_OK && b != 0) - pobj->flags |= GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE; + if (rv == CKR_OK) { + if (b != 0) + pobj->flags |= GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE; + else + pobj->flags |= GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE; + } a[0].type = CKA_EXTRACTABLE; a[0].value = &b; @@ -1979,11 +2202,11 @@ pkcs11_import_object(ck_object_handle_t ctx, ck_object_class_t class, } static int -find_obj_url_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo, +find_single_obj_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo, struct ck_token_info *tinfo, struct ck_info *lib_info, void *input) { - struct find_url_data_st *find_data = input; + struct find_single_obj_st *find_data = input; struct ck_attribute a[4]; ck_certificate_type_t type; ck_object_class_t class; @@ -2009,10 +2232,8 @@ find_obj_url_cb(struct ck_function_list *module, struct pkcs11_session_info *sin } ret = add_obj_attrs(find_data->obj->info, a, &a_vals, &class, &type); - if (ret < 0) { - gnutls_assert(); - return ret; - } + if (ret < 0) + return gnutls_assert_val(ret); rv = pkcs11_find_objects_init(sinfo->module, sinfo->pks, a, a_vals); @@ -2065,9 +2286,11 @@ unsigned int pkcs11_obj_flags_to_int(unsigned int flags) unsigned int ret_flags = 0; if (flags & GNUTLS_PKCS11_OBJ_FLAG_LOGIN) - ret_flags |= SESSION_LOGIN; + ret_flags |= SESSION_LOGIN | SESSION_FORCE_LOGIN; + if (flags & GNUTLS_PKCS11_OBJ_FLAG_LOGIN_SO) - ret_flags |= SESSION_LOGIN | SESSION_SO; + ret_flags |= SESSION_LOGIN | SESSION_SO | SESSION_FORCE_LOGIN | SESSION_WRITE; + if (flags & GNUTLS_PKCS11_OBJ_FLAG_PRESENT_IN_TRUSTED_MODULE) ret_flags |= SESSION_TRUSTED; @@ -2099,7 +2322,7 @@ gnutls_pkcs11_obj_import_url(gnutls_pkcs11_obj_t obj, const char *url, unsigned int flags) { int ret; - struct find_url_data_st find_data; + struct find_single_obj_st find_data; PKCS11_CHECK_INIT; memset(&find_data, 0, sizeof(find_data)); @@ -2118,7 +2341,7 @@ gnutls_pkcs11_obj_import_url(gnutls_pkcs11_obj_t obj, const char *url, } ret = - _pkcs11_traverse_tokens(find_obj_url_cb, &find_data, obj->info, + _pkcs11_traverse_tokens(find_single_obj_cb, &find_data, obj->info, &obj->pin, pkcs11_obj_flags_to_int(flags)); if (ret < 0) { @@ -2176,14 +2399,23 @@ find_token_modname_cb(struct ck_function_list *module, struct pkcs11_session_inf } find_data->modname = p11_kit_config_option(module, "module"); + find_data->ptr = module; + find_data->slot_id = sinfo->sid; return 0; } +/* Internal symbol used by tests */ +int +_gnutls_pkcs11_token_get_url(unsigned int seq, + gnutls_pkcs11_url_type_t detailed, char **url, + unsigned flags); + /** - * gnutls_pkcs11_token_get_url: + * _gnutls_pkcs11_token_get_url: * @seq: sequence number starting from 0 * @detailed: non zero if a detailed URL is required * @url: will contain an allocated url + * @flags: zero or 1. When 1 no initialization is performed. * * This function will return the URL for each token available * in system. The url has to be released using gnutls_free() @@ -2192,16 +2424,18 @@ find_token_modname_cb(struct ck_function_list *module, struct pkcs11_session_inf * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if the sequence number * exceeds the available tokens, otherwise a negative error value. * - * Since: 2.12.0 **/ int -gnutls_pkcs11_token_get_url(unsigned int seq, - gnutls_pkcs11_url_type_t detailed, char **url) +_gnutls_pkcs11_token_get_url(unsigned int seq, + gnutls_pkcs11_url_type_t detailed, char **url, + unsigned flags) { int ret; struct find_token_num tn; - PKCS11_CHECK_INIT; + if (!(flags & 1)) { + PKCS11_CHECK_INIT; + } memset(&tn, 0, sizeof(tn)); tn.seq = seq; @@ -2225,16 +2459,44 @@ gnutls_pkcs11_token_get_url(unsigned int seq, return 0; } +/** + * gnutls_pkcs11_token_get_url: + * @seq: sequence number starting from 0 + * @detailed: non zero if a detailed URL is required + * @url: will contain an allocated url + * + * This function will return the URL for each token available + * in system. The url has to be released using gnutls_free() + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, + * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if the sequence number + * exceeds the available tokens, otherwise a negative error value. + * + * Since: 2.12.0 + **/ +int +gnutls_pkcs11_token_get_url(unsigned int seq, + gnutls_pkcs11_url_type_t detailed, char **url) +{ + return _gnutls_pkcs11_token_get_url(seq, detailed, url, 0); +} + /** * gnutls_pkcs11_token_get_info: * @url: should contain a PKCS 11 URL * @ttype: Denotes the type of information requested * @output: where output will be stored - * @output_size: contains the maximum size of the output and will be overwritten with actual + * @output_size: contains the maximum size of the output buffer and will be + * overwritten with the actual size. * * This function will return information about the PKCS 11 token such * as the label, id, etc. * + * When output is text, a null terminated string is written to @output and its + * string length is written to @output_size (without null terminator). If the + * buffer is too small, @output_size will contain the expected buffer size + * (with null terminator for text) and return %GNUTLS_E_SHORT_MEMORY_BUFFER. + * * Returns: %GNUTLS_E_SUCCESS (0) on success or a negative error code * on error. * @@ -2247,7 +2509,7 @@ gnutls_pkcs11_token_get_info(const char *url, { struct p11_kit_uri *info = NULL; const uint8_t *str; - size_t str_max; + char *temp_str = NULL; size_t len; int ret; @@ -2262,19 +2524,19 @@ gnutls_pkcs11_token_get_info(const char *url, switch (ttype) { case GNUTLS_PKCS11_TOKEN_LABEL: str = p11_kit_uri_get_token_info(info)->label; - str_max = 32; + len = p11_kit_space_strlen(str, 32); break; case GNUTLS_PKCS11_TOKEN_SERIAL: str = p11_kit_uri_get_token_info(info)->serial_number; - str_max = 16; + len = p11_kit_space_strlen(str, 16); break; case GNUTLS_PKCS11_TOKEN_MANUFACTURER: str = p11_kit_uri_get_token_info(info)->manufacturer_id; - str_max = 32; + len = p11_kit_space_strlen(str, 32); break; case GNUTLS_PKCS11_TOKEN_MODEL: str = p11_kit_uri_get_token_info(info)->model; - str_max = 16; + len = p11_kit_space_strlen(str, 16); break; case GNUTLS_PKCS11_TOKEN_MODNAME: { struct find_token_modname tn; @@ -2288,10 +2550,15 @@ gnutls_pkcs11_token_get_info(const char *url, goto cleanup; } - snprintf(output, *output_size, "%s", tn.modname); - *output_size = strlen(output); - ret = 0; - goto cleanup; + temp_str = tn.modname; + if (temp_str) { + str = (uint8_t *)temp_str; + len = strlen(temp_str); + } else { + gnutls_assert(); + len = 0; + } + break; } default: gnutls_assert(); @@ -2299,21 +2566,73 @@ gnutls_pkcs11_token_get_info(const char *url, goto cleanup; } - len = p11_kit_space_strlen(str, str_max); - - if (len + 1 > *output_size) { + if (len < *output_size) { + if (len) + memcpy(output, str, len); + ((char *) output)[len] = '\0'; + *output_size = len; + ret = 0; + } else { *output_size = len + 1; - return GNUTLS_E_SHORT_MEMORY_BUFFER; + ret = GNUTLS_E_SHORT_MEMORY_BUFFER; + } + + cleanup: + free(temp_str); + p11_kit_uri_free(info); + return ret; +} + +/** + * gnutls_pkcs11_token_get_ptr: + * @url: should contain a PKCS#11 URL identifying a token + * @ptr: will contain the CK_FUNCTION_LIST_PTR pointer + * @slot_id: will contain the slot_id (may be %NULL) + * @flags: should be zero + * + * This function will return the function pointer of the specified + * token by the URL. The returned pointers are valid until + * gnutls is deinitialized, c.f. _global_deinit(). + * + * Returns: %GNUTLS_E_SUCCESS (0) on success or a negative error code + * on error. + * + * Since: 3.6.3 + **/ +int +gnutls_pkcs11_token_get_ptr(const char *url, void **ptr, unsigned long *slot_id, + unsigned int flags) +{ + struct p11_kit_uri *info = NULL; + int ret; + struct find_token_modname tn; + + PKCS11_CHECK_INIT; + + ret = pkcs11_url_to_info(url, &info, 0); + if (ret < 0) { + gnutls_assert(); + return ret; } - memcpy(output, str, len); - ((char *) output)[len] = '\0'; + memset(&tn, 0, sizeof(tn)); + tn.info = info; - *output_size = len; + ret = _pkcs11_traverse_tokens(find_token_modname_cb, &tn, NULL, NULL, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (ptr) + *ptr = tn.ptr; + if (slot_id) + *slot_id = tn.slot_id; ret = 0; cleanup: + free(tn.modname); p11_kit_uri_free(info); return ret; } @@ -2509,10 +2828,10 @@ retrieve_pin_from_callback(const struct pin_info_st *pin_info, return 0; } -static int -retrieve_pin(struct pin_info_st *pin_info, struct p11_kit_uri *info, - struct ck_token_info *token_info, int attempts, - ck_user_type_t user_type, struct p11_kit_pin **pin) +int +pkcs11_retrieve_pin(struct pin_info_st *pin_info, struct p11_kit_uri *info, + struct ck_token_info *token_info, int attempts, + ck_user_type_t user_type, struct p11_kit_pin **pin) { const char *pinfile; int ret = GNUTLS_E_PKCS11_PIN_ERROR; @@ -2522,6 +2841,11 @@ retrieve_pin(struct pin_info_st *pin_info, struct p11_kit_uri *info, /* First check for pin-value field */ pinfile = p11_kit_uri_get_pin_value(info); if (pinfile != NULL) { + if (attempts > 0) { + _gnutls_debug_log("p11: refusing more than a single attempts with pin-value\n"); + return gnutls_assert_val(GNUTLS_E_PKCS11_PIN_ERROR); + } + _gnutls_debug_log("p11: Using pin-value to retrieve PIN\n"); *pin = p11_kit_pin_new_for_string(pinfile); if (*pin != NULL) @@ -2530,6 +2854,11 @@ retrieve_pin(struct pin_info_st *pin_info, struct p11_kit_uri *info, /* Check if a pinfile is specified, and use that if possible */ pinfile = p11_kit_uri_get_pin_source(info); if (pinfile != NULL) { + if (attempts > 0) { + _gnutls_debug_log("p11: refusing more than a single attempts with pin-source\n"); + return gnutls_assert_val(GNUTLS_E_PKCS11_PIN_ERROR); + } + _gnutls_debug_log("p11: Using pin-source to retrieve PIN\n"); ret = retrieve_pin_from_source(pinfile, token_info, attempts, @@ -2559,25 +2888,30 @@ int pkcs11_login(struct pkcs11_session_info *sinfo, struct pin_info_st *pin_info, struct p11_kit_uri *info, - unsigned so, - unsigned reauth) + unsigned flags) { struct ck_session_info session_info; int attempt = 0, ret; ck_user_type_t user_type; ck_rv_t rv; - if (so == 0) { - if (reauth == 0) - user_type = CKU_USER; - else - user_type = CKU_CONTEXT_SPECIFIC; - } else + if (!(flags & SESSION_LOGIN)) { + _gnutls_debug_log("p11: No login requested.\n"); + return 0; + } + + if (flags & SESSION_SO) { user_type = CKU_SO; + } else if (flags & SESSION_CONTEXT_SPECIFIC) { + user_type = CKU_CONTEXT_SPECIFIC; + } else { + user_type = CKU_USER; + } - if (so == 0 && (sinfo->tinfo.flags & CKF_LOGIN_REQUIRED) == 0) { + if (!(flags & (SESSION_FORCE_LOGIN|SESSION_SO)) && + !(sinfo->tinfo.flags & CKF_LOGIN_REQUIRED)) { gnutls_assert(); - _gnutls_debug_log("p11: No login required.\n"); + _gnutls_debug_log("p11: No login required in token.\n"); return 0; } @@ -2594,7 +2928,7 @@ pkcs11_login(struct pkcs11_session_info *sinfo, gnutls_assert(); _gnutls_debug_log ("p11: Protected login failed.\n"); - ret = GNUTLS_E_PKCS11_ERROR; + ret = pkcs11_rv_to_err(rv); goto cleanup; } } @@ -2605,35 +2939,46 @@ pkcs11_login(struct pkcs11_session_info *sinfo, memcpy(&tinfo, &sinfo->tinfo, sizeof(tinfo)); - /* Check whether the session is already logged in, and if so, just skip */ - rv = (sinfo->module)->C_GetSessionInfo(sinfo->pks, - &session_info); - if (rv == CKR_OK && reauth == 0 && - (session_info.state == CKS_RO_USER_FUNCTIONS - || session_info.state == CKS_RW_USER_FUNCTIONS)) { - ret = 0; - _gnutls_debug_log - ("p11: Already logged in\n"); - goto cleanup; + if (!(flags & SESSION_CONTEXT_SPECIFIC)) { + /* Check whether the session is already logged in, and if so, just skip */ + rv = (sinfo->module)->C_GetSessionInfo(sinfo->pks, + &session_info); + if (rv == CKR_OK) { + if (flags & SESSION_SO) { + if (session_info.state == CKS_RW_SO_FUNCTIONS) { + ret = 0; + _gnutls_debug_log + ("p11: Already logged in as SO\n"); + goto cleanup; + } + } else if (session_info.state == CKS_RO_USER_FUNCTIONS + || session_info.state == CKS_RW_USER_FUNCTIONS) { + ret = 0; + _gnutls_debug_log + ("p11: Already logged in as user\n"); + goto cleanup; + } + } } /* If login has been attempted once already, check the token * status again, the flags might change. */ if (attempt) { - if (pkcs11_get_token_info - (sinfo->module, sinfo->sid, - &tinfo) != CKR_OK) { + rv = pkcs11_get_token_info(sinfo->module, sinfo->sid, + &tinfo); + if (rv != CKR_OK) { gnutls_assert(); _gnutls_debug_log ("p11: GetTokenInfo failed\n"); - ret = GNUTLS_E_PKCS11_ERROR; + + ret = pkcs11_rv_to_err(rv); goto cleanup; } } ret = - retrieve_pin(pin_info, info, &tinfo, attempt++, - user_type, &pin); + pkcs11_retrieve_pin(pin_info, info, &tinfo, attempt++, + user_type, &pin); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -2651,12 +2996,10 @@ pkcs11_login(struct pkcs11_session_info *sinfo, _gnutls_debug_log("p11: Login result = %s (%lu)\n", (rv==0)?"ok":p11_kit_strerror(rv), rv); - - ret = (rv == CKR_OK - || rv == + ret = (rv == CKR_OK || rv == CKR_USER_ALREADY_LOGGED_IN) ? 0 : pkcs11_rv_to_err(rv); - cleanup: + cleanup: return ret; } @@ -2691,7 +3034,6 @@ find_privkeys(struct pkcs11_session_info *sinfo, /* Find an object with private key class and a certificate ID * which matches the certificate. */ - /* FIXME: also match the cert subject. */ a[0].type = CKA_CLASS; a[0].value = &class; a[0].value_len = sizeof class; @@ -2771,10 +3113,10 @@ find_privkeys(struct pkcs11_session_info *sinfo, #define OBJECTS_A_TIME 8*1024 static int -find_objs_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo, +find_multi_objs_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo, struct ck_token_info *tinfo, struct ck_info *lib_info, void *input) { - struct find_obj_data_st *find_data = input; + struct find_multi_obj_st *find_data = input; struct ck_attribute a[16]; struct ck_attribute *attr; ck_object_class_t class = (ck_object_class_t) -1; @@ -3159,9 +3501,9 @@ gnutls_pkcs11_obj_list_import_url4(gnutls_pkcs11_obj_t ** p_list, unsigned int flags) { int ret; - struct find_obj_data_st priv; + struct find_multi_obj_st priv; - PKCS11_CHECK_INIT; + PKCS11_CHECK_INIT_FLAGS(flags); memset(&priv, 0, sizeof(priv)); @@ -3183,7 +3525,7 @@ gnutls_pkcs11_obj_list_import_url4(gnutls_pkcs11_obj_t ** p_list, } ret = - _pkcs11_traverse_tokens(find_objs_cb, &priv, priv.info, + _pkcs11_traverse_tokens(find_multi_objs_cb, &priv, priv.info, NULL, pkcs11_obj_flags_to_int(flags)); p11_kit_uri_free(priv.info); @@ -3349,6 +3691,7 @@ find_flags_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo else find_data->trusted = 0; find_data->slot_flags = sinfo->slot_info.flags; + find_data->token_flags = sinfo->tinfo.flags; return 0; } @@ -3391,9 +3734,51 @@ int gnutls_pkcs11_token_get_flags(const char *url, unsigned int *flags) } *flags = 0; + + /* read slot flags */ if (find_data.slot_flags & CKF_HW_SLOT) *flags |= GNUTLS_PKCS11_TOKEN_HW; + /* read token flags */ + if (find_data.token_flags & CKF_RNG) + *flags |= GNUTLS_PKCS11_TOKEN_RNG; + + if (find_data.token_flags & CKF_LOGIN_REQUIRED) + *flags |= GNUTLS_PKCS11_TOKEN_LOGIN_REQUIRED; + + if (find_data.token_flags & CKF_PROTECTED_AUTHENTICATION_PATH) + *flags |= GNUTLS_PKCS11_TOKEN_PROTECTED_AUTHENTICATION_PATH; + + if (find_data.token_flags & CKF_TOKEN_INITIALIZED) + *flags |= GNUTLS_PKCS11_TOKEN_INITIALIZED; + + if (find_data.token_flags & CKF_USER_PIN_COUNT_LOW) + *flags |= GNUTLS_PKCS11_TOKEN_USER_PIN_COUNT_LOW; + + if (find_data.token_flags & CKF_USER_PIN_FINAL_TRY) + *flags |= GNUTLS_PKCS11_TOKEN_USER_PIN_FINAL_TRY; + + if (find_data.token_flags & CKF_USER_PIN_LOCKED) + *flags |= GNUTLS_PKCS11_TOKEN_USER_PIN_LOCKED; + + if (find_data.token_flags & CKF_SO_PIN_COUNT_LOW) + *flags |= GNUTLS_PKCS11_TOKEN_SO_PIN_COUNT_LOW; + + if (find_data.token_flags & CKF_SO_PIN_FINAL_TRY) + *flags |= GNUTLS_PKCS11_TOKEN_SO_PIN_FINAL_TRY; + + if (find_data.token_flags & CKF_SO_PIN_LOCKED) + *flags |= GNUTLS_PKCS11_TOKEN_SO_PIN_LOCKED; + + if (find_data.token_flags & CKF_USER_PIN_INITIALIZED) + *flags |= GNUTLS_PKCS11_TOKEN_USER_PIN_INITIALIZED; + +#ifdef CKF_ERROR_STATE + if (find_data.token_flags & CKF_ERROR_STATE) + *flags |= GNUTLS_PKCS11_TOKEN_ERROR_STATE; +#endif + + /* other flags */ if (find_data.trusted != 0) *flags |= GNUTLS_PKCS11_TOKEN_TRUSTED; @@ -3459,7 +3844,68 @@ gnutls_pkcs11_token_get_mechanism(const char *url, unsigned int idx, *mechanism = mlist[idx]; return 0; +} + +/** + * gnutls_pkcs11_token_check_mechanism: + * @url: should contain a PKCS 11 URL + * @mechanism: The PKCS #11 mechanism ID + * @ptr: if set it should point to a CK_MECHANISM_INFO struct + * @psize: the size of CK_MECHANISM_INFO struct (for safety) + * @flags: must be zero + * + * This function will return whether a mechanism is supported + * by the given token. If the mechanism is supported and + * @ptr is set, it will be updated with the token information. + * + * Returns: Non-zero if the mechanism is supported or zero otherwise. + * + * Since: 3.6.0 + **/ +unsigned +gnutls_pkcs11_token_check_mechanism(const char *url, + unsigned long mechanism, + void *ptr, unsigned psize, unsigned flags) +{ + int ret; + ck_rv_t rv; + struct ck_function_list *module; + ck_slot_id_t slot; + struct ck_token_info tinfo; + struct p11_kit_uri *info = NULL; + struct ck_mechanism_info minfo; + + PKCS11_CHECK_INIT; + + ret = pkcs11_url_to_info(url, &info, 0); + if (ret < 0) { + gnutls_assert(); + return ret; + } + ret = pkcs11_find_slot(&module, &slot, info, &tinfo, NULL, NULL); + p11_kit_uri_free(info); + + if (ret < 0) { + gnutls_assert(); + return ret; + } + + rv = pkcs11_get_mechanism_info(module, slot, mechanism, &minfo); + if (rv != CKR_OK) { + gnutls_assert(); + return 0; + } + + if (ptr) { + if (sizeof(minfo) > psize) + return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER); + else if (sizeof(minfo) < psize) + memset(ptr, 0, psize); + memcpy(ptr, &minfo, sizeof(minfo)); + } + + return 1; } /** @@ -3497,9 +3943,14 @@ const char *gnutls_pkcs11_type_get_name(gnutls_pkcs11_obj_type_t type) } static -int check_found_cert(struct find_cert_st *priv, gnutls_datum_t *data, time_t now) +int check_found_cert(struct find_cert_st *priv, + ck_object_handle_t ctx, + gnutls_datum_t *data, + time_t now, + ck_object_handle_t *cand_ctx) { gnutls_x509_crt_t tcrt = NULL; + unsigned has_ski; int ret; ret = gnutls_x509_crt_init(&tcrt); @@ -3514,14 +3965,6 @@ int check_found_cert(struct find_cert_st *priv, gnutls_datum_t *data, time_t now goto cleanup; } - if (priv->key_id.size > 0 && - !_gnutls_check_valid_key_id(&priv->key_id, tcrt, now)) { - gnutls_assert(); - _gnutls_debug_log("check_found_cert: cert has invalid key ID\n"); - ret = -1; - goto cleanup; - } - if (priv->flags & GNUTLS_PKCS11_OBJ_FLAG_COMPARE) { if (priv->crt == NULL) { gnutls_assert(); @@ -3552,6 +3995,20 @@ int check_found_cert(struct find_cert_st *priv, gnutls_datum_t *data, time_t now } } + if (priv->key_id.size > 0 && + !_gnutls_check_valid_key_id(&priv->key_id, tcrt, now, &has_ski)) { + gnutls_assert(); + if (has_ski) { + _gnutls_debug_log("check_found_cert: cert has invalid key ID\n"); + ret = -1; + } else { + /* That's a possible match; there can be CA certificates without + * an SKI, which match a cert which has AKI. */ + *cand_ctx = ctx; + } + goto cleanup; + } + ret = 0; cleanup: if (tcrt != NULL) @@ -3559,6 +4016,44 @@ int check_found_cert(struct find_cert_st *priv, gnutls_datum_t *data, time_t now return ret; } +static int get_data_and_attrs(struct pkcs11_session_info *sinfo, + ck_object_handle_t object, gnutls_datum_t *data, + char *label, size_t label_size, + uint8_t *id, size_t id_size, + gnutls_datum_t *o_label, gnutls_datum_t *o_id) +{ + ck_rv_t rv; + struct ck_attribute a[2]; + + /* data will contain the certificate */ + rv = pkcs11_get_attribute_avalue(sinfo->module, sinfo->pks, object, CKA_VALUE, data); + if (rv == CKR_OK) { + a[0].type = CKA_LABEL; + a[0].value = label; + a[0].value_len = label_size; + + a[1].type = CKA_ID; + a[1].value = id; + a[1].value_len = id_size; + + if (pkcs11_get_attribute_value(sinfo->module, sinfo->pks, object, a, + 2) == CKR_OK) { + o_label->data = a[0].value; + o_label->size = a[0].value_len; + o_id->data = a[1].value; + o_id->size = a[1].value_len; + + return 0; + } else { + _gnutls_free_datum(data); + _gnutls_debug_log + ("p11: Skipped cert, missing attrs.\n"); + } + } + + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; +} + static int find_cert_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo, struct ck_token_info *tinfo, struct ck_info *lib_info, void *input) @@ -3567,14 +4062,15 @@ find_cert_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo, ck_object_class_t class = -1; ck_certificate_type_t type = (ck_certificate_type_t) - 1; ck_rv_t rv; - ck_object_handle_t ctx; + ck_object_handle_t ctx, cand_ctx = CK_INVALID_HANDLE; unsigned long count, a_vals; int found = 0, ret; struct find_cert_st *priv = input; char label_tmp[PKCS11_LABEL_SIZE]; - char id_tmp[PKCS11_ID_SIZE]; + uint8_t id_tmp[PKCS11_ID_SIZE]; gnutls_datum_t data = {NULL, 0}; - unsigned tries, i, finalized; + unsigned finalized; + int i, tries; ck_bool_t trusted = 1; time_t now; gnutls_datum_t label = {NULL,0}, id = {NULL,0}; @@ -3645,6 +4141,8 @@ find_cert_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo, a_vals++; } + /* This doesn't do a proper comparison, see + * _gnutls_x509_compare_raw_dn() */ if (priv->dn.size > 0) { a[a_vals].type = CKA_SUBJECT; a[a_vals].value = priv->dn.data; @@ -3659,6 +4157,7 @@ find_cert_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo, a_vals++; } + /* Same problem as for priv->dn */ if (priv->issuer_dn.size > 0) { a[a_vals].type = CKA_ISSUER; a[a_vals].value = priv->issuer_dn.data; @@ -3687,38 +4186,38 @@ find_cert_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo, break; } - /* data will contain the certificate */ - rv = pkcs11_get_attribute_avalue(sinfo->module, sinfo->pks, ctx, CKA_VALUE, &data); - if (rv == CKR_OK) { - ret = check_found_cert(priv, &data, now); - if (ret < 0) { - _gnutls_free_datum(&data); - continue; - } + ret = get_data_and_attrs(sinfo, ctx, &data, + label_tmp, sizeof(label_tmp), + id_tmp, sizeof(id_tmp), + &label, + &id); + if (ret < 0) + continue; - a[0].type = CKA_LABEL; - a[0].value = label_tmp; - a[0].value_len = sizeof(label_tmp); + ret = check_found_cert(priv, ctx, &data, now, &cand_ctx); + if (ret < 0) { + _gnutls_free_datum(&data); + continue; + } - a[1].type = CKA_ID; - a[1].value = id_tmp; - a[1].value_len = sizeof(id_tmp); + found = 1; + break; + } - if (pkcs11_get_attribute_value(sinfo->module, sinfo->pks, ctx, a, - 2) == CKR_OK) { - label.data = a[0].value; - label.size = a[0].value_len; - id.data = a[1].value; - id.size = a[1].value_len; - - found = 1; - break; - } else { - _gnutls_free_datum(&data); - _gnutls_debug_log - ("p11: Skipped cert, missing attrs.\n"); - } - } + if (!found && cand_ctx != CK_INVALID_HANDLE) { + /* there was a possible match; let's retrieve that one instead of + * failing */ + ret = get_data_and_attrs(sinfo, cand_ctx, &data, + label_tmp, sizeof(label_tmp), + id_tmp, sizeof(id_tmp), + &label, + &id); + if (ret >= 0) + found = 1; + + /* we do not need to use check_found_cert() because + * in case we have a candidate, we already have checked it + */ } pkcs11_find_objects_final(sinfo); @@ -3779,7 +4278,7 @@ find_cert_cb(struct ck_function_list *module, struct pkcs11_session_info *sinfo, * * This function will return the issuer of a given certificate, if it * is stored in the token. By default only marked as trusted issuers - * are retuned. If any issuer should be returned specify + * are returned. If any issuer should be returned specify * %GNUTLS_PKCS11_OBJ_FLAG_RETRIEVE_ANY in @flags. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a @@ -3798,7 +4297,7 @@ int gnutls_pkcs11_get_raw_issuer(const char *url, gnutls_x509_crt_t cert, size_t id_size; struct p11_kit_uri *info = NULL; - PKCS11_CHECK_INIT; + PKCS11_CHECK_INIT_FLAGS(flags); memset(&priv, 0, sizeof(priv)); @@ -3833,11 +4332,23 @@ int gnutls_pkcs11_get_raw_issuer(const char *url, gnutls_x509_crt_t cert, gnutls_assert(); goto cleanup; } + + gnutls_pkcs11_obj_set_pin_function(priv.obj, cert->pin.cb, cert->pin.data); + priv.need_import = 1; ret = _pkcs11_traverse_tokens(find_cert_cb, &priv, info, - NULL, pkcs11_obj_flags_to_int(flags)); + &cert->pin, pkcs11_obj_flags_to_int(flags)); + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { + /* we have failed retrieving the right certificate; if there + * was a close match return that one. */ + priv.flags |= GNUTLS_PKCS11_OBJ_FLAG_FIRST_CLOSE_MATCH; + ret = + _pkcs11_traverse_tokens(find_cert_cb, &priv, info, + &cert->pin, pkcs11_obj_flags_to_int(flags)); + } + if (ret < 0) { gnutls_assert(); goto cleanup; @@ -3870,7 +4381,7 @@ int gnutls_pkcs11_get_raw_issuer(const char *url, gnutls_x509_crt_t cert, * * This function will return the certificate with the given DN, if it * is stored in the token. By default only marked as trusted issuers - * are retuned. If any issuer should be returned specify + * are returned. If any issuer should be returned specify * %GNUTLS_PKCS11_OBJ_FLAG_RETRIEVE_ANY in @flags. * * The name of the function includes issuer because it can @@ -3890,7 +4401,7 @@ int gnutls_pkcs11_get_raw_issuer_by_dn (const char *url, const gnutls_datum_t *d struct find_cert_st priv; struct p11_kit_uri *info = NULL; - PKCS11_CHECK_INIT; + PKCS11_CHECK_INIT_FLAGS(flags); memset(&priv, 0, sizeof(priv)); @@ -3955,7 +4466,7 @@ int gnutls_pkcs11_get_raw_issuer_by_dn (const char *url, const gnutls_datum_t *d * * This function will return the certificate with the given DN and @spki, if it * is stored in the token. By default only marked as trusted issuers - * are retuned. If any issuer should be returned specify + * are returned. If any issuer should be returned specify * %GNUTLS_PKCS11_OBJ_FLAG_RETRIEVE_ANY in @flags. * * The name of the function includes issuer because it can @@ -3977,7 +4488,7 @@ int gnutls_pkcs11_get_raw_issuer_by_subject_key_id (const char *url, struct find_cert_st priv; struct p11_kit_uri *info = NULL; - PKCS11_CHECK_INIT; + PKCS11_CHECK_INIT_FLAGS(flags); memset(&priv, 0, sizeof(priv)); @@ -4071,7 +4582,7 @@ unsigned gnutls_pkcs11_crt_is_known(const char *url, gnutls_x509_crt_t cert, size_t serial_size; struct p11_kit_uri *info = NULL; - PKCS11_CHECK_INIT_RET(0); + PKCS11_CHECK_INIT_FLAGS_RET(flags, 0); memset(&priv, 0, sizeof(priv)); diff --git a/lib/pkcs11_int.c b/lib/pkcs11_int.c index dce59475c7..c4e867ae76 100644 --- a/lib/pkcs11_int.c +++ b/lib/pkcs11_int.c @@ -20,7 +20,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ #include "gnutls_int.h" @@ -172,6 +172,16 @@ pkcs11_get_mechanism_list(struct ck_function_list * module, count); } +ck_rv_t +pkcs11_get_mechanism_info(struct ck_function_list *module, + ck_slot_id_t slot_id, + ck_mechanism_type_t mechanism, + struct ck_mechanism_info *ptr) +{ + return (module)->C_GetMechanismInfo(slot_id, mechanism, + ptr); +} + ck_rv_t pkcs11_sign_init(struct ck_function_list * module, ck_session_handle_t sess, diff --git a/lib/pkcs11_int.h b/lib/pkcs11_int.h index bcde4d8ce8..9d88807098 100644 --- a/lib/pkcs11_int.h +++ b/lib/pkcs11_int.h @@ -15,11 +15,11 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ -#ifndef PKCS11_INT_H -#define PKCS11_INT_H +#ifndef GNUTLS_LIB_PKCS11_INT_H +#define GNUTLS_LIB_PKCS11_INT_H #ifdef ENABLE_PKCS11 @@ -28,9 +28,16 @@ #include #include +/* Part of PKCS#11 3.0 interface, which was added in p11-kit 0.23.14 */ +#ifdef CKM_EDDSA +#define HAVE_CKM_EDDSA +#endif + #define PKCS11_ID_SIZE 128 #define PKCS11_LABEL_SIZE 128 +#include +#include #include typedef unsigned char ck_bool_t; @@ -61,11 +68,41 @@ struct gnutls_pkcs11_obj_st { struct pin_info_st pin; }; +struct gnutls_pkcs11_privkey_st { + gnutls_pk_algorithm_t pk_algorithm; + unsigned int rsa_pss_ok; /* if it is an RSA key, it can do RSA-PSS */ + unsigned int bits; + + unsigned int flags; + struct p11_kit_uri *uinfo; + char *url; + + struct pkcs11_session_info sinfo; + ck_object_handle_t ref; /* the key in the session */ + unsigned reauth; /* whether we need to login on each operation */ + + void *mutex; /* lock for operations requiring co-ordination */ + + struct pin_info_st pin; +}; + /* This must be called on every function that uses a PKCS #11 function * directly. It can be provided a callback function to run when a reinitialization * occurs. */ typedef int (*pkcs11_reinit_function)(void *priv); -int _gnutls_pkcs11_check_init(void *priv, pkcs11_reinit_function cb); + +typedef enum init_level_t { + PROV_UNINITIALIZED = 0, + PROV_INIT_MANUAL, + PROV_INIT_MANUAL_TRUSTED, + PROV_INIT_TRUSTED, + PROV_INIT_ALL +} init_level_t; + +/* See _gnutls_pkcs11_check_init() for possible Transitions. + */ + +int _gnutls_pkcs11_check_init(init_level_t req_level, void *priv, pkcs11_reinit_function cb); #define FIX_KEY_USAGE(pk, usage) \ if (usage == 0) { \ @@ -76,15 +113,26 @@ int _gnutls_pkcs11_check_init(void *priv, pkcs11_reinit_function cb); } #define PKCS11_CHECK_INIT \ - ret = _gnutls_pkcs11_check_init(NULL, NULL); \ + ret = _gnutls_pkcs11_check_init(PROV_INIT_ALL, NULL, NULL); \ if (ret < 0) \ return gnutls_assert_val(ret) #define PKCS11_CHECK_INIT_RET(x) \ - ret = _gnutls_pkcs11_check_init(NULL, NULL); \ + ret = _gnutls_pkcs11_check_init(PROV_INIT_ALL, NULL, NULL); \ + if (ret < 0) \ + return gnutls_assert_val(x) + +#define PKCS11_CHECK_INIT_FLAGS(f) \ + ret = _gnutls_pkcs11_check_init((f & GNUTLS_PKCS11_OBJ_FLAG_PRESENT_IN_TRUSTED_MODULE)?PROV_INIT_TRUSTED:PROV_INIT_ALL, NULL, NULL); \ + if (ret < 0) \ + return gnutls_assert_val(ret) + +#define PKCS11_CHECK_INIT_FLAGS_RET(f, x) \ + ret = _gnutls_pkcs11_check_init((f & GNUTLS_PKCS11_OBJ_FLAG_PRESENT_IN_TRUSTED_MODULE)?PROV_INIT_TRUSTED:PROV_INIT_ALL, NULL, NULL); \ if (ret < 0) \ return gnutls_assert_val(x) + /* thus function is called for every token in the traverse_tokens * function. Once everything is traversed it is called with NULL tinfo. * It should return 0 if found what it was looking for. @@ -111,8 +159,7 @@ int pkcs11_get_info(struct p11_kit_uri *info, size_t * output_size); int pkcs11_login(struct pkcs11_session_info *sinfo, struct pin_info_st *pin_info, - struct p11_kit_uri *info, unsigned so, - unsigned reauth); + struct p11_kit_uri *info, unsigned flags); int pkcs11_call_token_func(struct p11_kit_uri *info, const unsigned retry); @@ -131,6 +178,10 @@ _gnutls_x509_crt_import_pkcs11_url(gnutls_x509_crt_t crt, #define SESSION_LOGIN (1<<1) #define SESSION_SO (1<<2) /* security officer session */ #define SESSION_TRUSTED (1<<3) /* session on a marked as trusted (p11-kit) module */ +#define SESSION_FORCE_LOGIN (1<<4) /* force login even when CFK_LOGIN_REQUIRED is not set */ +#define SESSION_CONTEXT_SPECIFIC (1<<5) +#define SESSION_NO_CLOSE (1<<6) /* don't close session on success */ + int pkcs11_open_session(struct pkcs11_session_info *sinfo, struct pin_info_st *pin_info, struct p11_kit_uri *info, unsigned int flags); @@ -143,6 +194,7 @@ ck_object_class_t pkcs11_strtype_to_class(const char *type); /* Additional internal flags for gnutls_pkcs11_obj_flags */ /* @GNUTLS_PKCS11_OBJ_FLAG_EXPECT_CERT: When importing an object, provide a hint on the type, to allow incomplete URLs * @GNUTLS_PKCS11_OBJ_FLAG_EXPECT_PRIVKEY: Hint for private key */ +#define GNUTLS_PKCS11_OBJ_FLAG_FIRST_CLOSE_MATCH ((unsigned int)1<<28) #define GNUTLS_PKCS11_OBJ_FLAG_EXPECT_CERT (1<<29) #define GNUTLS_PKCS11_OBJ_FLAG_EXPECT_PRIVKEY (1<<30) #define GNUTLS_PKCS11_OBJ_FLAG_EXPECT_PUBKEY ((unsigned int)1<<31) @@ -154,9 +206,11 @@ int pkcs11_token_matches_info(struct p11_kit_uri *info, unsigned int pkcs11_obj_flags_to_int(unsigned int flags); int -_gnutls_pkcs11_privkey_sign_hash(gnutls_pkcs11_privkey_t key, - const gnutls_datum_t * hash, - gnutls_datum_t * signature); +_gnutls_pkcs11_privkey_sign(gnutls_pkcs11_privkey_t key, + const gnutls_sign_entry_st *se, + const gnutls_datum_t * hash, + gnutls_datum_t * signature, + gnutls_x509_spki_st *spki_params); int _gnutls_pkcs11_privkey_decrypt_data(gnutls_pkcs11_privkey_t key, @@ -164,6 +218,13 @@ _gnutls_pkcs11_privkey_decrypt_data(gnutls_pkcs11_privkey_t key, const gnutls_datum_t * ciphertext, gnutls_datum_t * plaintext); +int +_gnutls_pkcs11_privkey_decrypt_data2(gnutls_pkcs11_privkey_t key, + unsigned int flags, + const gnutls_datum_t * ciphertext, + unsigned char * plaintext, + size_t plaintext_size); + int _pkcs11_privkey_get_pubkey (gnutls_pkcs11_privkey_t pkey, gnutls_pubkey_t *pub, unsigned flags); @@ -173,8 +234,16 @@ static inline int pk_to_mech(gnutls_pk_algorithm_t pk) return CKM_DSA; else if (pk == GNUTLS_PK_EC) return CKM_ECDSA; - else + else if (pk == GNUTLS_PK_RSA) return CKM_RSA_PKCS; + else if (pk == GNUTLS_PK_RSA_PSS) + return CKM_RSA_PKCS_PSS; +#ifdef HAVE_CKM_EDDSA + else if (pk == GNUTLS_PK_EDDSA_ED25519) + return CKM_EDDSA; +#endif + else + return -1; } static inline int pk_to_key_type(gnutls_pk_algorithm_t pk) @@ -183,8 +252,14 @@ static inline int pk_to_key_type(gnutls_pk_algorithm_t pk) return CKK_DSA; else if (pk == GNUTLS_PK_EC) return CKK_ECDSA; - else + else if (pk == GNUTLS_PK_RSA_PSS || pk == GNUTLS_PK_RSA) return CKK_RSA; +#ifdef HAVE_CKM_EDDSA + else if (pk == GNUTLS_PK_EDDSA_ED25519) + return CKK_EC_EDWARDS; +#endif + else + return -1; } static inline gnutls_pk_algorithm_t key_type_to_pk(ck_key_type_t m) @@ -195,6 +270,10 @@ static inline gnutls_pk_algorithm_t key_type_to_pk(ck_key_type_t m) return GNUTLS_PK_DSA; else if (m == CKK_ECDSA) return GNUTLS_PK_EC; +#ifdef HAVE_CKM_EDDSA + else if (m == CKK_EC_EDWARDS) + return GNUTLS_PK_EDDSA_ED25519; +#endif else return GNUTLS_PK_UNKNOWN; } @@ -207,12 +286,25 @@ static inline int pk_to_genmech(gnutls_pk_algorithm_t pk, ck_key_type_t *type) } else if (pk == GNUTLS_PK_EC) { *type = CKK_ECDSA; return CKM_ECDSA_KEY_PAIR_GEN; - } else { + } else if (pk == GNUTLS_PK_RSA_PSS || pk == GNUTLS_PK_RSA) { *type = CKK_RSA; return CKM_RSA_PKCS_KEY_PAIR_GEN; +#ifdef HAVE_CKM_EDDSA + } else if (pk == GNUTLS_PK_EDDSA_ED25519) { + *type = CKK_EC_EDWARDS; + return CKM_EDDSA; +#endif + } else { + *type = -1; + return -1; } } +int +pkcs11_retrieve_pin(struct pin_info_st *pin_info, struct p11_kit_uri *info, + struct ck_token_info *token_info, int attempts, + ck_user_type_t user_type, struct p11_kit_pin **pin); + ck_object_class_t pkcs11_type_to_class(gnutls_pkcs11_obj_type_t type); ck_rv_t @@ -294,6 +386,12 @@ pkcs11_get_mechanism_list(struct ck_function_list *module, ck_mechanism_type_t * mechanism_list, unsigned long *count); +ck_rv_t +pkcs11_get_mechanism_info(struct ck_function_list *module, + ck_slot_id_t slot_id, + ck_mechanism_type_t mechanism, + struct ck_mechanism_info *ptr); + ck_rv_t pkcs11_sign_init(struct ck_function_list *module, ck_session_handle_t sess, @@ -364,4 +462,4 @@ inline static bool is_pkcs11_url_object(const char *url) #endif /* ENABLE_PKCS11 */ -#endif +#endif /* GNUTLS_LIB_PKCS11_INT_H */ diff --git a/lib/pkcs11_privkey.c b/lib/pkcs11_privkey.c index 4bf907ee6a..3ecd1837b4 100644 --- a/lib/pkcs11_privkey.c +++ b/lib/pkcs11_privkey.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ #include "gnutls_int.h" @@ -36,7 +36,7 @@ /* In case of a fork, it will invalidate the open session * in the privkey and start another */ #define PKCS11_CHECK_INIT_PRIVKEY(k) \ - ret = _gnutls_pkcs11_check_init(k, reopen_privkey_session); \ + ret = _gnutls_pkcs11_check_init(PROV_INIT_ALL, k, reopen_privkey_session); \ if (ret < 0) \ return gnutls_assert_val(ret) @@ -59,20 +59,6 @@ break; \ } while (1); -struct gnutls_pkcs11_privkey_st { - gnutls_pk_algorithm_t pk_algorithm; - unsigned int flags; - struct p11_kit_uri *uinfo; - char *url; - - struct pkcs11_session_info sinfo; - ck_object_handle_t ref; /* the key in the session */ - unsigned reauth; /* whether we need to login on each operation */ - - void *mutex; /* lock for operations requiring co-ordination */ - - struct pin_info_st pin; -}; /** * gnutls_pkcs11_privkey_init: @@ -170,7 +156,7 @@ gnutls_pkcs11_privkey_get_pk_algorithm(gnutls_pkcs11_privkey_t key, unsigned int *bits) { if (bits) - *bits = 0; /* FIXME */ + *bits = key->bits; return key->pk_algorithm; } @@ -266,23 +252,77 @@ static int reopen_privkey_session(void * _privkey) expr; \ } +struct hash_mappings_st { + gnutls_digest_algorithm_t id; + unsigned long phash; /* pkcs11 hash ID */ + unsigned long mgf_id; +}; + + +#ifndef CKG_MGF1_SHA224 +# define CKG_MGF1_SHA224 0x00000005UL +# define CKG_MGF1_SHA256 0x00000002UL +# define CKG_MGF1_SHA384 0x00000003UL +# define CKG_MGF1_SHA512 0x00000004UL + +struct ck_rsa_pkcs_pss_params { + ck_mechanism_type_t hash_alg; + /* ck_rsa_pkcs_mgf_type_t is not defined in old versions of p11-kit */ + unsigned long mgf; + unsigned long s_len; +}; +#endif + +static const struct hash_mappings_st hash_mappings[] = +{ + {.id = GNUTLS_DIG_SHA224, + .phash = CKM_SHA224, + .mgf_id = CKG_MGF1_SHA224 + }, + {.id = GNUTLS_DIG_SHA256, + .phash = CKM_SHA256, + .mgf_id = CKG_MGF1_SHA256 + }, + {.id = GNUTLS_DIG_SHA384, + .phash = CKM_SHA384, + .mgf_id = CKG_MGF1_SHA384 + }, + {.id = GNUTLS_DIG_SHA512, + .phash = CKM_SHA512, + .mgf_id = CKG_MGF1_SHA512 + } +}; + +static const struct hash_mappings_st *hash_to_map(gnutls_digest_algorithm_t hash) +{ + unsigned i; + for (i=0;isinfo; - mech.mechanism = pk_to_mech(key->pk_algorithm); - mech.parameter = NULL; - mech.parameter_len = 0; + if (se->pk == GNUTLS_PK_RSA_PSS) { + const struct hash_mappings_st *map = hash_to_map(se->hash); + + if (unlikely(map == NULL)) + return gnutls_assert_val(GNUTLS_E_UNKNOWN_PK_ALGORITHM); + + if (unlikely(!key->rsa_pss_ok)) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM); + + rsa_pss_params.hash_alg = map->phash; + rsa_pss_params.mgf = map->mgf_id; + rsa_pss_params.s_len = spki_params->salt_size; + + mech.mechanism = CKM_RSA_PKCS_PSS; + mech.parameter = &rsa_pss_params; + mech.parameter_len = sizeof(rsa_pss_params); + } else { + ret = pk_to_mech(se->pk); + + if (ret == -1) + return gnutls_assert_val(GNUTLS_E_UNKNOWN_PK_ALGORITHM); + + mech.mechanism = ret; + mech.parameter = NULL; + mech.parameter_len = 0; + } ret = gnutls_mutex_lock(&key->mutex); if (ret != 0) @@ -307,15 +373,19 @@ _gnutls_pkcs11_privkey_sign_hash(gnutls_pkcs11_privkey_t key, * earlier. */ REPEAT_ON_INVALID_HANDLE(rv = pkcs11_sign_init(sinfo->module, sinfo->pks, &mech, key->ref)); if (rv != CKR_OK) { + _gnutls_debug_log("p11: %s\n", pkcs11_strerror(rv)); gnutls_assert(); ret = pkcs11_rv_to_err(rv); goto cleanup; } - if (key->reauth) { + retry_login: + if (key->reauth || req_login) { + if (req_login) + login_flags = SESSION_FORCE_LOGIN|SESSION_LOGIN; ret = pkcs11_login(&key->sinfo, &key->pin, - key->uinfo, 0, 1); + key->uinfo, login_flags); if (ret < 0) { gnutls_assert(); _gnutls_debug_log("PKCS #11 login failed, trying operation anyway\n"); @@ -326,6 +396,11 @@ _gnutls_pkcs11_privkey_sign_hash(gnutls_pkcs11_privkey_t key, /* Work out how long the signature must be: */ rv = pkcs11_sign(sinfo->module, sinfo->pks, hash->data, hash->size, NULL, &siglen); + if (unlikely(rv == CKR_USER_NOT_LOGGED_IN && req_login == 0)) { + req_login = 1; + goto retry_login; + } + if (rv != CKR_OK) { gnutls_assert(); ret = pkcs11_rv_to_err(rv); @@ -344,7 +419,7 @@ _gnutls_pkcs11_privkey_sign_hash(gnutls_pkcs11_privkey_t key, } - if (key->pk_algorithm == GNUTLS_PK_EC + if (key->pk_algorithm == GNUTLS_PK_ECDSA || key->pk_algorithm == GNUTLS_PK_DSA) { unsigned int hlen = siglen / 2; gnutls_datum_t r, s; @@ -368,7 +443,6 @@ _gnutls_pkcs11_privkey_sign_hash(gnutls_pkcs11_privkey_t key, } gnutls_free(tmp.data); - tmp.data = NULL; } else { signature->size = siglen; signature->data = tmp.data; @@ -394,7 +468,7 @@ _gnutls_pkcs11_privkey_sign_hash(gnutls_pkcs11_privkey_t key, * * Returns: this function will return non-zero if the token * holding the private key is still available (inserted), and zero otherwise. - * + * * Since: 3.1.9 * **/ @@ -403,7 +477,7 @@ unsigned gnutls_pkcs11_privkey_status(gnutls_pkcs11_privkey_t key) ck_rv_t rv; int ret; struct ck_session_info session_info; - + PKCS11_CHECK_INIT_PRIVKEY(key); REPEAT_ON_INVALID_HANDLE(rv = (key->sinfo.module)->C_GetSessionInfo(key->sinfo.pks, &session_info)); @@ -446,10 +520,8 @@ gnutls_pkcs11_privkey_import_url(gnutls_pkcs11_privkey_t pkey, memset(&pkey->sinfo, 0, sizeof(pkey->sinfo)); - if (pkey->url) { + if (pkey->url) gnutls_free(pkey->url); - pkey->url = NULL; - } if (pkey->uinfo) { p11_kit_uri_free(pkey->uinfo); @@ -492,7 +564,6 @@ gnutls_pkcs11_privkey_import_url(gnutls_pkcs11_privkey_t pkey, a[0].type = CKA_KEY_TYPE; a[0].value = &key_type; a[0].value_len = sizeof(key_type); - if (pkcs11_get_attribute_value(pkey->sinfo.module, pkey->sinfo.pks, pkey->ref, a, 1) == CKR_OK) { pkey->pk_algorithm = key_type_to_pk(key_type); @@ -505,6 +576,29 @@ gnutls_pkcs11_privkey_import_url(gnutls_pkcs11_privkey_t pkey, goto cleanup; } + + if (pkey->pk_algorithm == GNUTLS_PK_RSA) { /* determine whether it can do rsa-pss */ + ck_bool_t tval = 0; + + a[0].type = CKA_MODULUS; + a[0].value = NULL; + a[0].value_len = 0; + a[1].type = CKA_SIGN; + a[1].value = &tval; + a[1].value_len = sizeof(tval); + if (pkcs11_get_attribute_value(pkey->sinfo.module, pkey->sinfo.pks, pkey->ref, a, 2) + == CKR_OK) { + pkey->bits = a[0].value_len*8; + } + + ret = gnutls_pkcs11_token_check_mechanism(url, CKM_RSA_PKCS_PSS, NULL, 0, 0); + if (ret != 0 && tval) { + pkey->rsa_pss_ok = 1; + } else { + _gnutls_debug_log("Detected incompatible with TLS1.3 RSA key! (%s)\n", url); + } + } + a[0].type = CKA_ALWAYS_AUTHENTICATE; a[0].value = &reauth; a[0].value_len = sizeof(reauth); @@ -524,7 +618,6 @@ gnutls_pkcs11_privkey_import_url(gnutls_pkcs11_privkey_t pkey, pkey->uinfo = NULL; } gnutls_free(pkey->url); - pkey->url = NULL; return ret; } @@ -537,7 +630,7 @@ gnutls_pkcs11_privkey_import_url(gnutls_pkcs11_privkey_t pkey, * @plaintext: will contain the plaintext, allocated with gnutls_malloc() * * This function will decrypt the given data using the public key algorithm - * supported by the private key. + * supported by the private key. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -552,6 +645,8 @@ _gnutls_pkcs11_privkey_decrypt_data(gnutls_pkcs11_privkey_t key, int ret; struct ck_mechanism mech; unsigned long siglen; + unsigned req_login = 0; + unsigned login_flags = SESSION_LOGIN|SESSION_CONTEXT_SPECIFIC; PKCS11_CHECK_INIT_PRIVKEY(key); @@ -575,10 +670,13 @@ _gnutls_pkcs11_privkey_decrypt_data(gnutls_pkcs11_privkey_t key, goto cleanup; } - if (key->reauth) { + retry_login: + if (key->reauth || req_login) { + if (req_login) + login_flags = SESSION_FORCE_LOGIN|SESSION_LOGIN; ret = pkcs11_login(&key->sinfo, &key->pin, - key->uinfo, 0, 1); + key->uinfo, login_flags); if (ret < 0) { gnutls_assert(); _gnutls_debug_log("PKCS #11 login failed, trying operation anyway\n"); @@ -589,6 +687,11 @@ _gnutls_pkcs11_privkey_decrypt_data(gnutls_pkcs11_privkey_t key, /* Work out how long the plaintext must be: */ rv = pkcs11_decrypt(key->sinfo.module, key->sinfo.pks, ciphertext->data, ciphertext->size, NULL, &siglen); + if (unlikely(rv == CKR_USER_NOT_LOGGED_IN && req_login == 0)) { + req_login = 1; + goto retry_login; + } + if (rv != CKR_OK) { gnutls_assert(); ret = pkcs11_rv_to_err(rv); @@ -616,6 +719,121 @@ _gnutls_pkcs11_privkey_decrypt_data(gnutls_pkcs11_privkey_t key, return ret; } +/*- + * _gnutls_pkcs11_privkey_decrypt_data2: + * @key: Holds the key + * @flags: should be 0 for now + * @ciphertext: holds the data to be signed + * @plaintext: a preallocated buffer that will be filled with the plaintext + * @plaintext_size: size of the plaintext + * + * This function will decrypt the given data using the public key algorithm + * supported by the private key. + * Unlike with _gnutls_pkcs11_privkey_decrypt_data the plaintext size is known + * and provided by the caller, if the plaintext size differs from the requested + * one, the operation fails and the provided buffer is left unchanged. + * NOTE: plaintext_size must be exactly the size of the payload in the + * ciphertext, otherwise an error is returned and the plaintext buffer is left + * unchanged. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + -*/ +int +_gnutls_pkcs11_privkey_decrypt_data2(gnutls_pkcs11_privkey_t key, + unsigned int flags, + const gnutls_datum_t * ciphertext, + unsigned char * plaintext, + size_t plaintext_size) +{ + ck_rv_t rv; + int ret; + struct ck_mechanism mech; + unsigned long siglen = ciphertext->size; + unsigned req_login = 0; + unsigned login_flags = SESSION_LOGIN|SESSION_CONTEXT_SPECIFIC; + unsigned char *buffer; + volatile unsigned char value; + unsigned char mask; + + PKCS11_CHECK_INIT_PRIVKEY(key); + + if (key->pk_algorithm != GNUTLS_PK_RSA) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + mech.mechanism = CKM_RSA_PKCS; + mech.parameter = NULL; + mech.parameter_len = 0; + + ret = gnutls_mutex_lock(&key->mutex); + if (ret != 0) + return gnutls_assert_val(GNUTLS_E_LOCKING_ERROR); + + buffer = gnutls_malloc(siglen); + if (!buffer) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + + /* Initialize signing operation; using the private key discovered + * earlier. */ + REPEAT_ON_INVALID_HANDLE( + rv = pkcs11_decrypt_init(key->sinfo.module, key->sinfo.pks, + &mech, key->ref) + ); + if (rv != CKR_OK) { + gnutls_assert(); + ret = pkcs11_rv_to_err(rv); + goto cleanup; + } + + retry_login: + if (key->reauth || req_login) { + if (req_login) + login_flags = SESSION_FORCE_LOGIN|SESSION_LOGIN; + ret = + pkcs11_login(&key->sinfo, &key->pin, + key->uinfo, login_flags); + if (ret < 0) { + gnutls_assert(); + _gnutls_debug_log("PKCS #11 login failed, trying operation anyway\n"); + /* let's try the operation anyway */ + } + } + + ret = 0; + siglen = ciphertext->size; + rv = pkcs11_decrypt(key->sinfo.module, key->sinfo.pks, + ciphertext->data, ciphertext->size, + buffer, &siglen); + if (unlikely(rv == CKR_USER_NOT_LOGGED_IN && req_login == 0)) { + req_login = 1; + goto retry_login; + } + + /* NOTE: These branches are not side-channel silent */ + if (rv != CKR_OK) { + gnutls_assert(); + ret = pkcs11_rv_to_err(rv); + } else if (siglen != plaintext_size) { + gnutls_assert(); + ret = GNUTLS_E_INVALID_REQUEST; + } + + /* conditionally copy buffer in a side-channel silent way */ + /* on success mask is 0xFF, on failure it is 0 */ + mask = ((uint32_t)ret >> 31) - 1U; + for (size_t i = 0; i < plaintext_size; i++) { + value = (buffer[i] & mask) + (plaintext[i] & ~mask); + plaintext[i] = value; + } + + cleanup: + gnutls_mutex_unlock(&key->mutex); + gnutls_free(buffer); + return ret; +} + /** * gnutls_pkcs11_privkey_export_url: * @key: Holds the PKCS 11 key @@ -682,7 +900,7 @@ gnutls_pkcs11_privkey_generate(const char *url, gnutls_pk_algorithm_t pk, * This function will generate a private key in the specified * by the @url token. The private key will be generate within * the token and will not be exportable. This function will - * store the DER-encoded public key in the SubjectPublicKeyInfo format + * store the DER-encoded public key in the SubjectPublicKeyInfo format * in @pubkey. The @pubkey should be deinitialized using gnutls_free(). * * Note that when generating an elliptic curve key, the curve @@ -781,6 +999,9 @@ _dsa_params_generate(struct ck_function_list *module, ck_session_handle_t sessio * can be substituted in the place of the bits parameter using the * GNUTLS_CURVE_TO_BITS() macro. * + * Since 3.6.3 the objects are marked as sensitive by default unless + * %GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE is specified. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * @@ -941,7 +1162,7 @@ gnutls_pkcs11_privkey_generate3(const char *url, gnutls_pk_algorithm_t pk, } break; - case GNUTLS_PK_EC: + case GNUTLS_PK_ECDSA: p[p_val].type = CKA_SIGN; if (key_usage & GNUTLS_KEY_DIGITAL_SIGNATURE) { p[p_val].value = (void *) &tval; @@ -960,7 +1181,7 @@ gnutls_pkcs11_privkey_generate3(const char *url, gnutls_pk_algorithm_t pk, if (GNUTLS_BITS_ARE_CURVE(bits)) { bits = GNUTLS_BITS_TO_CURVE(bits); } else { - bits = _gnutls_ecc_bits_to_curve(bits); + bits = _gnutls_ecc_bits_to_curve(pk, bits); } ret = _gnutls_x509_write_ecc_params(bits, &der); @@ -969,6 +1190,29 @@ gnutls_pkcs11_privkey_generate3(const char *url, gnutls_pk_algorithm_t pk, goto cleanup; } + a[a_val].type = CKA_EC_PARAMS; + a[a_val].value = der.data; + a[a_val].value_len = der.size; + a_val++; + + break; + case GNUTLS_PK_EDDSA_ED25519: + p[p_val].type = CKA_SIGN; + p[p_val].value = (void *) &tval; + p[p_val].value_len = sizeof(tval); + p_val++; + + a[a_val].type = CKA_VERIFY; + a[a_val].value = (void *) &tval; + a[a_val].value_len = sizeof(tval); + a_val++; + + ret = _gnutls_x509_write_ecc_params(GNUTLS_ECC_CURVE_ED25519, &der); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + a[a_val].type = CKA_EC_PARAMS; a[a_val].value = der.data; a[a_val].value_len = der.size; @@ -1025,7 +1269,7 @@ gnutls_pkcs11_privkey_generate3(const char *url, gnutls_pk_algorithm_t pk, a_val++; } - if (flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE) { + if (!(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE)) { p[p_val].type = CKA_SENSITIVE; p[p_val].value = (void *) &tval; p[p_val].value_len = sizeof(tval); diff --git a/lib/pkcs11_secret.c b/lib/pkcs11_secret.c index b9a88549ee..95bbfae757 100644 --- a/lib/pkcs11_secret.c +++ b/lib/pkcs11_secret.c @@ -15,7 +15,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ #include "gnutls_int.h" @@ -89,8 +89,8 @@ gnutls_pkcs11_copy_secret_key(const char *token_url, gnutls_datum_t * key, return ret; } - /* FIXME: copy key usage flags */ - + /* We do not copy key usage flags. + */ a[0].type = CKA_CLASS; a[0].value = &class; a[0].value_len = sizeof(class); @@ -119,7 +119,7 @@ gnutls_pkcs11_copy_secret_key(const char *token_url, gnutls_datum_t * key, a_val++; } - if (flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE) + if (!(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE)) tval = 1; else tval = 0; diff --git a/lib/pkcs11_write.c b/lib/pkcs11_write.c index 23a8521ed5..3ce794b076 100644 --- a/lib/pkcs11_write.c +++ b/lib/pkcs11_write.c @@ -15,7 +15,7 @@ * Library General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ #include "gnutls_int.h" @@ -27,6 +27,7 @@ #include #include "pkcs11x.h" #include +#include "pk.h" static const ck_bool_t tval = 1; static const ck_bool_t fval = 0; @@ -90,8 +91,8 @@ static void mark_flags(unsigned flags, struct ck_attribute *a, unsigned *a_val, * * This function will copy a certificate into a PKCS #11 token specified by * a URL. Valid flags to mark the certificate: %GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED, - * %GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE, %GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE, - * %GNUTLS_PKCS11_OBJ_FLAG_MARK_CA, %GNUTLS_PKCS11_OBJ_FLAG_MARK_ALWAYS_AUTH. + * %GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE, %GNUTLS_PKCS11_OBJ_FLAG_MARK_CA, + * %GNUTLS_PKCS11_OBJ_FLAG_MARK_ALWAYS_AUTH. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -186,6 +187,8 @@ gnutls_pkcs11_copy_x509_crt2(const char *token_url, a[1].value_len = cid->size; } + /* we do not use the key usage flags; these are apparent from + * the certificate itself. */ a[2].type = CKA_VALUE; a[2].value = der; a[2].value_len = der_size; @@ -195,7 +198,6 @@ gnutls_pkcs11_copy_x509_crt2(const char *token_url, a[4].type = CKA_CERTIFICATE_TYPE; a[4].value = &type; a[4].value_len = sizeof(type); - /* FIXME: copy key usage flags */ a_val = 5; @@ -204,10 +206,12 @@ gnutls_pkcs11_copy_x509_crt2(const char *token_url, a[a_val].value_len = crt->raw_dn.size; a_val++; - a[a_val].type = CKA_ISSUER; - a[a_val].value = crt->raw_issuer_dn.data; - a[a_val].value_len = crt->raw_issuer_dn.size; - a_val++; + if (crt->raw_issuer_dn.size > 0) { + a[a_val].type = CKA_ISSUER; + a[a_val].value = crt->raw_issuer_dn.data; + a[a_val].value_len = crt->raw_issuer_dn.size; + a_val++; + } serial_size = sizeof(serial); if (gnutls_x509_crt_get_serial(crt, serial, &serial_size) >= 0) { @@ -265,7 +269,6 @@ static void clean_pubkey(struct ck_attribute *a, unsigned a_val) case CKA_EC_PARAMS: case CKA_EC_POINT: gnutls_free(a[i].value); - a[i].value = NULL; break; } } @@ -279,15 +282,20 @@ static int add_pubkey(gnutls_pubkey_t pubkey, struct ck_attribute *a, unsigned * pk = gnutls_pubkey_get_pk_algorithm(pubkey, NULL); switch (pk) { + case GNUTLS_PK_RSA_PSS: case GNUTLS_PK_RSA: { gnutls_datum_t m, e; - ret = gnutls_pubkey_export_rsa_raw(pubkey, &m, &e); + /* PKCS#11 defines integers as unsigned having most significant byte + * first, e.g., 32768 = 0x80 0x00. This is interpreted literraly by + * some HSMs which do not accept an integer with a leading zero */ + ret = gnutls_pubkey_export_rsa_raw2(pubkey, &m, &e, GNUTLS_EXPORT_FLAG_NO_LZ); if (ret < 0) { gnutls_assert(); return ret; } + a[*a_val].type = CKA_MODULUS; a[*a_val].value = m.data; a[*a_val].value_len = m.size; @@ -302,7 +310,7 @@ static int add_pubkey(gnutls_pubkey_t pubkey, struct ck_attribute *a, unsigned * case GNUTLS_PK_DSA: { gnutls_datum_t p, q, g, y; - ret = gnutls_pubkey_export_dsa_raw(pubkey, &p, &q, &g, &y); + ret = gnutls_pubkey_export_dsa_raw2(pubkey, &p, &q, &g, &y, GNUTLS_EXPORT_FLAG_NO_LZ); if (ret < 0) { gnutls_assert(); return ret; @@ -349,6 +357,38 @@ static int add_pubkey(gnutls_pubkey_t pubkey, struct ck_attribute *a, unsigned * (*a_val)++; break; } + case GNUTLS_PK_EDDSA_ED25519: { + gnutls_datum_t params, ecpoint; + + ret = + _gnutls_x509_write_ecc_params(pubkey->params.curve, + ¶ms); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + a[*a_val].type = CKA_EC_PARAMS; + a[*a_val].value = params.data; + a[*a_val].value_len = params.size; + (*a_val)++; + + ret = _gnutls_x509_encode_string(ASN1_ETYPE_OCTET_STRING, + pubkey->params.raw_pub.data, + pubkey->params.raw_pub.size, + &ecpoint); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + a[*a_val].type = CKA_EC_POINT; + a[*a_val].value = ecpoint.data; + a[*a_val].value_len = ecpoint.size; + (*a_val)++; + break; + } + default: _gnutls_debug_log("requested writing public key of unsupported type %u\n", (unsigned)pk); return gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); @@ -368,8 +408,8 @@ static int add_pubkey(gnutls_pubkey_t pubkey, struct ck_attribute *a, unsigned * * * This function will copy a public key object into a PKCS #11 token specified by * a URL. Valid flags to mark the key: %GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED, - * %GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE, %GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE, - * %GNUTLS_PKCS11_OBJ_FLAG_MARK_CA, %GNUTLS_PKCS11_OBJ_FLAG_MARK_ALWAYS_AUTH. + * %GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE, %GNUTLS_PKCS11_OBJ_FLAG_MARK_CA, + * %GNUTLS_PKCS11_OBJ_FLAG_MARK_ALWAYS_AUTH. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -619,8 +659,10 @@ gnutls_pkcs11_copy_attached_extension(const char *token_url, * @flags: One of GNUTLS_PKCS11_OBJ_* flags * * This function will copy a private key into a PKCS #11 token specified by - * a URL. It is highly recommended flags to contain %GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE - * unless there is a strong reason not to. + * a URL. + * + * Since 3.6.3 the objects are marked as sensitive by default unless + * %GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE is specified. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -683,7 +725,6 @@ gnutls_pkcs11_copy_x509_privkey2(const char *token_url, pk = gnutls_x509_privkey_get_pk_algorithm(key); FIX_KEY_USAGE(pk, key_usage); - /* FIXME: copy key usage flags */ a_val = 0; a[a_val].type = CKA_CLASS; a[a_val].value = &class; @@ -720,7 +761,8 @@ gnutls_pkcs11_copy_x509_privkey2(const char *token_url, if (pk == GNUTLS_PK_RSA) { a[a_val].type = CKA_DECRYPT; - if (key_usage & (GNUTLS_KEY_ENCIPHER_ONLY|GNUTLS_KEY_DECIPHER_ONLY)) { + if ((key_usage & (GNUTLS_KEY_ENCIPHER_ONLY|GNUTLS_KEY_DECIPHER_ONLY)) || + (key_usage & GNUTLS_KEY_KEY_ENCIPHERMENT)) { a[a_val].value = (void*)&tval; a[a_val].value_len = sizeof(tval); } else { @@ -776,7 +818,7 @@ gnutls_pkcs11_copy_x509_privkey2(const char *token_url, a_val++; } - if (flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE) { + if (!(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE)) { a[a_val].type = CKA_SENSITIVE; a[a_val].value = (void *) &tval; a[a_val].value_len = sizeof(tval); @@ -790,14 +832,12 @@ gnutls_pkcs11_copy_x509_privkey2(const char *token_url, switch (pk) { case GNUTLS_PK_RSA: + case GNUTLS_PK_RSA_PSS: { - ret = - gnutls_x509_privkey_export_rsa_raw2(key, &m, - &e, &d, &p, - &q, &u, - &exp1, - &exp2); + ret = _gnutls_params_get_rsa_raw(&key->params, &m, &e, &d, &p, + &q, &u, &exp1, &exp2, + GNUTLS_EXPORT_FLAG_NO_LZ); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -849,9 +889,8 @@ gnutls_pkcs11_copy_x509_privkey2(const char *token_url, } case GNUTLS_PK_DSA: { - ret = - gnutls_x509_privkey_export_dsa_raw(key, &p, &q, - &g, &y, &x); + ret = _gnutls_params_get_dsa_raw(&key->params, &p, &q, &g, &y, &x, + GNUTLS_EXPORT_FLAG_NO_LZ); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -884,7 +923,7 @@ gnutls_pkcs11_copy_x509_privkey2(const char *token_url, case GNUTLS_PK_EC: { ret = - _gnutls_x509_write_ecc_params(key->params.flags, + _gnutls_x509_write_ecc_params(key->params.curve, &p); if (ret < 0) { gnutls_assert(); @@ -892,8 +931,8 @@ gnutls_pkcs11_copy_x509_privkey2(const char *token_url, } ret = - _gnutls_mpi_dprint_lz(key->params. - params[ECC_K], &x); + _gnutls_mpi_dprint(key->params. + params[ECC_K], &x); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -913,6 +952,32 @@ gnutls_pkcs11_copy_x509_privkey2(const char *token_url, break; } +#ifdef HAVE_CKM_EDDSA + case GNUTLS_PK_EDDSA_ED25519: + { + ret = + _gnutls_x509_write_ecc_params(key->params.curve, + &p); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + type = CKK_EC_EDWARDS; + + a[a_val].type = CKA_EC_PARAMS; + a[a_val].value = p.data; + a[a_val].value_len = p.size; + a_val++; + + a[a_val].type = CKA_VALUE; + a[a_val].value = key->params.raw_priv.data; + a[a_val].value_len = key->params.raw_priv.size; + a_val++; + + break; + } +#endif default: gnutls_assert(); ret = GNUTLS_E_INVALID_REQUEST; @@ -936,6 +1001,7 @@ gnutls_pkcs11_copy_x509_privkey2(const char *token_url, cleanup: switch (pk) { + case GNUTLS_PK_RSA_PSS: case GNUTLS_PK_RSA: { gnutls_free(m.data); @@ -958,6 +1024,7 @@ gnutls_pkcs11_copy_x509_privkey2(const char *token_url, break; } case GNUTLS_PK_EC: + case GNUTLS_PK_EDDSA_ED25519: { gnutls_free(p.data); gnutls_free(x.data); @@ -1185,6 +1252,8 @@ gnutls_pkcs11_token_init(const char *token_url, } +#define L(x) ((x==NULL)?0:strlen(x)) + /** * gnutls_pkcs11_token_set_pin: * @token_url: A PKCS #11 URL specifying a token @@ -1192,9 +1261,11 @@ gnutls_pkcs11_token_init(const char *token_url, * @newpin: new user's PIN * @flags: one of #gnutls_pin_flag_t. * - * This function will modify or set a user's PIN for the given token. - * If it is called to set a user pin for first time the oldpin must - * be NULL. + * This function will modify or set a user or administrator's PIN for + * the given token. If it is called to set a PIN for first time + * the oldpin must be %NULL. When setting the admin's PIN with the + * %GNUTLS_PIN_SO flag, the @oldpin value must be provided (this requirement + * is relaxed after GnuTLS 3.6.5 since which the PIN will be requested if missing). * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -1232,7 +1303,8 @@ gnutls_pkcs11_token_set_pin(const char *token_url, return ret; } - if (oldpin == NULL) { + if (oldpin == NULL && !(flags & GNUTLS_PIN_SO)) { + /* This changes only the user PIN */ rv = pkcs11_init_pin(sinfo.module, sinfo.pks, (uint8_t *) newpin, strlen(newpin)); if (rv != CKR_OK) { @@ -1243,9 +1315,32 @@ gnutls_pkcs11_token_set_pin(const char *token_url, goto finish; } } else { + struct p11_kit_pin *pin; + unsigned oldpin_size; + + oldpin_size = L(oldpin); + + if (!(sinfo.tinfo.flags & CKF_PROTECTED_AUTHENTICATION_PATH)) { + if (newpin == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (oldpin == NULL) { + struct pin_info_st pin_info; + memset(&pin_info, 0, sizeof(pin_info)); + + ret = pkcs11_retrieve_pin(&pin_info, info, &sinfo.tinfo, 0, CKU_SO, &pin); + if (ret < 0) { + gnutls_assert(); + goto finish; + } + oldpin = (const char*)p11_kit_pin_get_value(pin, NULL); + oldpin_size = p11_kit_pin_get_length(pin); + } + } + rv = pkcs11_set_pin(sinfo.module, sinfo.pks, - oldpin, strlen(oldpin), - newpin, strlen(newpin)); + oldpin, oldpin_size, + newpin, L(newpin)); if (rv != CKR_OK) { gnutls_assert(); _gnutls_debug_log("p11: %s\n", @@ -1352,8 +1447,10 @@ int gnutls_pkcs11_copy_x509_crt(const char *token_url, * @flags: One of GNUTLS_PKCS11_OBJ_* flags * * This function will copy a private key into a PKCS #11 token specified by - * a URL. It is highly recommended flags to contain %GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE - * unless there is a strong reason not to. + * a URL. + * + * Since 3.6.3 the objects are marked as sensitive by default unless + * %GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE is specified. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. diff --git a/lib/pkcs11x.c b/lib/pkcs11x.c index fc428e17a4..0041b924cb 100644 --- a/lib/pkcs11x.c +++ b/lib/pkcs11x.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ #include "gnutls_int.h" @@ -277,7 +277,7 @@ gnutls_pkcs11_obj_get_exts(gnutls_pkcs11_obj_t obj, spki.data = obj->raw.data; spki.size = obj->raw.size; } else { - ret = x509_raw_crt_to_raw_pubkey(&obj->raw, &spki); + ret = _gnutls_x509_raw_crt_to_raw_pubkey(&obj->raw, &spki); if (ret < 0) return gnutls_assert_val(ret); deinit_spki = 1; diff --git a/lib/pkcs11x.h b/lib/pkcs11x.h index 0aac3f6f10..6fb10cb4cf 100644 --- a/lib/pkcs11x.h +++ b/lib/pkcs11x.h @@ -15,12 +15,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ -#ifndef PKCS11X_H -#define PKCS11X_H +#ifndef GNUTLS_LIB_PKCS11X_H +#define GNUTLS_LIB_PKCS11X_H #include -#endif +#endif /* GNUTLS_LIB_PKCS11X_H */ diff --git a/lib/pkix.asn b/lib/pkix.asn index 1113355e0b..22b5b8d9f6 100644 --- a/lib/pkix.asn +++ b/lib/pkix.asn @@ -234,17 +234,6 @@ Dss-Sig-Value ::= SEQUENCE { s INTEGER } -DomainParameters ::= SEQUENCE { - p INTEGER, -- odd prime, p=jq +1 - g INTEGER, -- generator, g - q INTEGER, -- factor of p-1 - j INTEGER OPTIONAL, -- subgroup factor, j>= 2 - validationParms ValidationParms OPTIONAL } - -ValidationParms ::= SEQUENCE { - seed BIT STRING, - pgenCounter INTEGER } - Dss-Parms ::= SEQUENCE { p INTEGER, q INTEGER, @@ -362,8 +351,6 @@ pkcs-8-PrivateKeyInfo ::= SEQUENCE { privateKey OCTET STRING, attributes [0] Attributes OPTIONAL } -pkcs-8-Attributes ::= SET OF Attribute - -- Encrypted private-key information syntax pkcs-8-EncryptedPrivateKeyInfo ::= SEQUENCE { @@ -381,6 +368,12 @@ pkcs-5-aes128-CBC-params ::= OCTET STRING (SIZE(16)) pkcs-5-aes192-CBC-params ::= OCTET STRING (SIZE(16)) pkcs-5-aes256-CBC-params ::= OCTET STRING (SIZE(16)) +-- GOST extension +Gost28147-89-Parameters ::= SEQUENCE { + iv OCTET STRING, -- (SIZE (8)) + encryptionParamSet OBJECT IDENTIFIER +} + pkcs-5-PBE-params ::= SEQUENCE { salt OCTET STRING, iterationCount INTEGER } diff --git a/lib/pkix_asn1_tab.c b/lib/pkix_asn1_tab.c index e8719152a0..50f4196da0 100644 --- a/lib/pkix_asn1_tab.c +++ b/lib/pkix_asn1_tab.c @@ -172,15 +172,6 @@ const asn1_static_node pkix_asn1_tab[] = { { "Dss-Sig-Value", 1610612741, NULL }, { "r", 1073741827, NULL }, { "s", 3, NULL }, - { "DomainParameters", 1610612741, NULL }, - { "p", 1073741827, NULL }, - { "g", 1073741827, NULL }, - { "q", 1073741827, NULL }, - { "j", 1073758211, NULL }, - { "validationParms", 16386, "ValidationParms"}, - { "ValidationParms", 1610612741, NULL }, - { "seed", 1073741830, NULL }, - { "pgenCounter", 3, NULL }, { "Dss-Parms", 1610612741, NULL }, { "p", 1073741827, NULL }, { "q", 1073741827, NULL }, @@ -266,8 +257,6 @@ const asn1_static_node pkix_asn1_tab[] = { { "privateKey", 1073741831, NULL }, { "attributes", 536895490, "Attributes"}, { NULL, 4104, "0"}, - { "pkcs-8-Attributes", 1610612751, NULL }, - { NULL, 2, "Attribute"}, { "pkcs-8-EncryptedPrivateKeyInfo", 1610612741, NULL }, { "encryptionAlgorithm", 1073741826, "AlgorithmIdentifier"}, { "encryptedData", 2, "pkcs-8-EncryptedData"}, @@ -282,6 +271,9 @@ const asn1_static_node pkix_asn1_tab[] = { { NULL, 1048586, "16"}, { "pkcs-5-aes256-CBC-params", 1612709895, NULL }, { NULL, 1048586, "16"}, + { "Gost28147-89-Parameters", 1610612741, NULL }, + { "iv", 1073741831, NULL }, + { "encryptionParamSet", 12, NULL }, { "pkcs-5-PBE-params", 1610612741, NULL }, { "salt", 1073741831, NULL }, { "iterationCount", 3, NULL }, diff --git a/lib/prf.c b/lib/prf.c index 517fac90d9..bb76e2ed4e 100644 --- a/lib/prf.c +++ b/lib/prf.c @@ -1,6 +1,7 @@ /* * Copyright (C) 2002-2015 Free Software Foundation, Inc. * Copyright (C) 2014-2015 Nikos Mavrogiannopoulos + * Copyright (C) 2016-2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -26,236 +27,12 @@ #include "gnutls_int.h" #include "errors.h" +#include "handshake.h" +#include "secrets.h" #include #include #include -#define MAX_PRF_BYTES 200 -#define MAX_SEED_SIZE 200 - -inline static int -_gnutls_cal_PRF_A(const mac_entry_st * me, - const void *secret, int secret_size, - const void *seed, int seed_size, void *result) -{ - int ret; - - ret = - _gnutls_mac_fast(me->id, secret, secret_size, seed, seed_size, - result); - if (ret < 0) - return gnutls_assert_val(ret); - - return 0; -} - -/* Produces "total_bytes" bytes using the hash algorithm specified. - * (used in the PRF function) - */ -static int -P_hash(gnutls_mac_algorithm_t algorithm, - const uint8_t * secret, int secret_size, - const uint8_t * seed, int seed_size, int total_bytes, uint8_t * ret) -{ - - mac_hd_st td2; - int i, times, how, blocksize, A_size; - uint8_t final[MAX_HASH_SIZE], Atmp[MAX_SEED_SIZE]; - int output_bytes, result; - const mac_entry_st *me = mac_to_entry(algorithm); - - blocksize = _gnutls_mac_get_algo_len(me); - - if (seed_size > MAX_SEED_SIZE || total_bytes <= 0 || blocksize == 0) { - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - - output_bytes = 0; - do { - output_bytes += blocksize; - } - while (output_bytes < total_bytes); - - /* calculate A(0) */ - - memcpy(Atmp, seed, seed_size); - A_size = seed_size; - - times = output_bytes / blocksize; - - for (i = 0; i < times; i++) { - result = _gnutls_mac_init(&td2, me, secret, secret_size); - if (result < 0) { - gnutls_assert(); - return result; - } - - /* here we calculate A(i+1) */ - if ((result = - _gnutls_cal_PRF_A(me, secret, secret_size, Atmp, - A_size, Atmp)) < 0) { - gnutls_assert(); - _gnutls_mac_deinit(&td2, final); - return result; - } - - A_size = blocksize; - - _gnutls_mac(&td2, Atmp, A_size); - _gnutls_mac(&td2, seed, seed_size); - _gnutls_mac_deinit(&td2, final); - - if ((1 + i) * blocksize < total_bytes) { - how = blocksize; - } else { - how = total_bytes - (i) * blocksize; - } - - if (how > 0) { - memcpy(&ret[i * blocksize], final, how); - } - } - - return 0; -} - -/* This function operates as _gnutls_PRF(), but does not require - * a pointer to the current session. It takes the @mac algorithm - * explicitly. For legacy TLS/SSL sessions before TLS 1.2 the MAC - * must be set to %GNUTLS_MAC_MD5_SHA1. - */ -static int -_gnutls_PRF_raw(gnutls_mac_algorithm_t mac, - const uint8_t * secret, unsigned int secret_size, - const char *label, int label_size, const uint8_t * seed, - int seed_size, int total_bytes, void *ret) -{ - int l_s, s_seed_size; - const uint8_t *s1, *s2; - uint8_t s_seed[MAX_SEED_SIZE]; - uint8_t o1[MAX_PRF_BYTES], o2[MAX_PRF_BYTES]; - int result; - - if (total_bytes > MAX_PRF_BYTES) { - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - /* label+seed = s_seed */ - s_seed_size = seed_size + label_size; - - if (s_seed_size > MAX_SEED_SIZE) { - gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; - } - - memcpy(s_seed, label, label_size); - memcpy(&s_seed[label_size], seed, seed_size); - - if (mac != GNUTLS_MAC_MD5_SHA1) { - result = - P_hash(mac, secret, secret_size, - s_seed, s_seed_size, - total_bytes, ret); - if (result < 0) { - gnutls_assert(); - return result; - } - } else { - l_s = secret_size / 2; - - s1 = &secret[0]; - s2 = &secret[l_s]; - - if (secret_size % 2 != 0) { - l_s++; - } - - result = - P_hash(GNUTLS_MAC_MD5, s1, l_s, s_seed, s_seed_size, - total_bytes, o1); - if (result < 0) { - gnutls_assert(); - return result; - } - - result = - P_hash(GNUTLS_MAC_SHA1, s2, l_s, s_seed, s_seed_size, - total_bytes, o2); - if (result < 0) { - gnutls_assert(); - return result; - } - - memxor(o1, o2, total_bytes); - - memcpy(ret, o1, total_bytes); - } - - return 0; /* ok */ -} - - -/* The PRF function expands a given secret - * needed by the TLS specification. ret must have a least total_bytes - * available. - */ -int -_gnutls_PRF(gnutls_session_t session, - const uint8_t * secret, unsigned int secret_size, - const char *label, int label_size, const uint8_t * seed, - int seed_size, int total_bytes, void *ret) -{ - return _gnutls_PRF_raw( - session->security_parameters.prf_mac, - secret, secret_size, - label, label_size, - seed, seed_size, - total_bytes, - ret); -} - -#ifdef ENABLE_FIPS140 -int -_gnutls_prf_raw(gnutls_mac_algorithm_t mac, - size_t master_size, const void *master, - size_t label_size, const char *label, - size_t seed_size, const char *seed, size_t outsize, - char *out); - -/*- - * _gnutls_prf_raw: - * @mac: the MAC algorithm to use, set to %GNUTLS_MAC_MD5_SHA1 for the TLS1.0 mac - * @master_size: length of the @master variable. - * @master: the master secret used in PRF computation - * @label_size: length of the @label variable. - * @label: label used in PRF computation, typically a short string. - * @seed_size: length of the @seed variable. - * @seed: optional extra data to seed the PRF with. - * @outsize: size of pre-allocated output buffer to hold the output. - * @out: pre-allocated buffer to hold the generated data. - * - * Apply the TLS Pseudo-Random-Function (PRF) on the master secret - * and the provided data. - * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. - -*/ -int -_gnutls_prf_raw(gnutls_mac_algorithm_t mac, - size_t master_size, const void *master, - size_t label_size, const char *label, - size_t seed_size, const char *seed, size_t outsize, - char *out) -{ - return _gnutls_PRF_raw(mac, - master, master_size, - label, label_size, - (uint8_t *) seed, seed_size, - outsize, out); - -} -#endif - /** * gnutls_prf_raw: * @session: is a #gnutls_session_t type. @@ -283,6 +60,11 @@ _gnutls_prf_raw(gnutls_mac_algorithm_t mac, * client and server random fields directly, and is recommended if you * want to generate pseudo random data unique for each session. * + * Note: This function will only operate under TLS versions prior to 1.3. + * In TLS1.3 the use of PRF is replaced with HKDF and the generic + * exporters like gnutls_prf_rfc5705() should be used instead. Under + * TLS1.3 this function returns %GNUTLS_E_INVALID_REQUEST. + * * Returns: %GNUTLS_E_SUCCESS on success, or an error code. **/ int @@ -293,17 +75,53 @@ gnutls_prf_raw(gnutls_session_t session, char *out) { int ret; + const version_entry_st *vers = get_version(session); + + if (vers && vers->tls13_sem) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - ret = _gnutls_PRF(session, - session->security_parameters.master_secret, - GNUTLS_MASTER_SIZE, - label, - label_size, (uint8_t *) seed, seed_size, outsize, - out); + if (session->security_parameters.prf == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ret = _gnutls_prf_raw(session->security_parameters.prf->id, + GNUTLS_MASTER_SIZE, session->security_parameters.master_secret, + label_size, label, + seed_size, (uint8_t *) seed, + outsize, out); return ret; } +static int +_tls13_derive_exporter(const mac_entry_st *prf, + gnutls_session_t session, + size_t label_size, const char *label, + size_t context_size, const char *context, + size_t outsize, char *out, + bool early) +{ + uint8_t secret[MAX_HASH_SIZE]; + uint8_t digest[MAX_HASH_SIZE]; + unsigned digest_size = prf->output_size; + int ret; + + ret = _tls13_derive_secret2(prf, label, label_size, NULL, 0, + session->key.proto.tls13.ap_expkey, + secret); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = gnutls_hash_fast((gnutls_digest_algorithm_t)prf->id, + context, context_size, digest); + if (ret < 0) + return gnutls_assert_val(ret); + + return _tls13_expand_secret2(prf, + EXPORTER_LABEL, sizeof(EXPORTER_LABEL)-1, + digest, digest_size, + secret, outsize, out); +} + /** * gnutls_prf_rfc5705: * @session: is a #gnutls_session_t type. @@ -314,15 +132,18 @@ gnutls_prf_raw(gnutls_session_t session, * @outsize: size of pre-allocated output buffer to hold the output. * @out: pre-allocated buffer to hold the generated data. * - * Applies the TLS Pseudo-Random-Function (PRF) on the master secret - * and the provided data, seeded with the client and server random fields, - * as specified in RFC5705. + * Exports keying material from TLS/DTLS session to an application, as + * specified in RFC5705. + * + * In the TLS versions prior to 1.3, it applies the TLS + * Pseudo-Random-Function (PRF) on the master secret and the provided + * data, seeded with the client and server random fields. + * + * In TLS 1.3, it applies HKDF on the exporter master secret derived + * from the master secret. * * The @label variable usually contains a string denoting the purpose - * for the generated data. The @server_random_first indicates whether - * the client random field or the server random field should be first - * in the seed. Non-zero indicates that the server random field is first, - * 0 that the client random field is first. + * for the generated data. * * The @context variable can be used to add more data to the seed, after * the random variables. It can be used to make sure the @@ -344,33 +165,100 @@ gnutls_prf_rfc5705(gnutls_session_t session, size_t context_size, const char *context, size_t outsize, char *out) { - char *pctx = NULL; + const version_entry_st *vers = get_version(session); int ret; - if (context != NULL && context_size > 65535) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } + if (session->security_parameters.prf == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (vers && vers->tls13_sem) { + ret = _tls13_derive_exporter(session->security_parameters.prf, + session, + label_size, label, + context_size, context, + outsize, out, + 0); + } else { + char *pctx = NULL; - if (context != NULL) { - pctx = gnutls_malloc(context_size+2); - if (!pctx) { + if (context != NULL && context_size > 65535) { gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; + return GNUTLS_E_INVALID_REQUEST; } - memcpy(pctx+2, context, context_size); - _gnutls_write_uint16(context_size, (void*)pctx); - context_size += 2; - } + if (context != NULL) { + pctx = gnutls_malloc(context_size+2); + if (!pctx) { + gnutls_assert(); + return GNUTLS_E_MEMORY_ERROR; + } + + memcpy(pctx+2, context, context_size); + _gnutls_write_uint16(context_size, (void*)pctx); + context_size += 2; + } + + ret = gnutls_prf(session, label_size, label, 0, + context_size, pctx, outsize, out); - ret = gnutls_prf(session, label_size, label, 0, - context_size, pctx, outsize, out); + gnutls_free(pctx); + } - gnutls_free(pctx); return ret; } +/** + * gnutls_prf_early: + * @session: is a #gnutls_session_t type. + * @label_size: length of the @label variable. + * @label: label used in PRF computation, typically a short string. + * @context_size: length of the @extra variable. + * @context: optional extra data to seed the PRF with. + * @outsize: size of pre-allocated output buffer to hold the output. + * @out: pre-allocated buffer to hold the generated data. + * + * This function is similar to gnutls_prf_rfc5705(), but only works in + * TLS 1.3 or later to export early keying material. + * + * Note that the keying material is only available after the + * ClientHello message is processed and before the application traffic + * keys are established. Therefore this function shall be called in a + * handshake hook function for %GNUTLS_HANDSHAKE_CLIENT_HELLO. + * + * The @label variable usually contains a string denoting the purpose + * for the generated data. + * + * The @context variable can be used to add more data to the seed, after + * the random variables. It can be used to make sure the + * generated output is strongly connected to some additional data + * (e.g., a string used in user authentication). + * + * The output is placed in @out, which must be pre-allocated. + * + * Note that, to provide the RFC5705 context, the @context variable + * must be non-null. + * + * Returns: %GNUTLS_E_SUCCESS on success, or an error code. + * + * Since: 3.6.8 + **/ +int +gnutls_prf_early(gnutls_session_t session, + size_t label_size, const char *label, + size_t context_size, const char *context, + size_t outsize, char *out) +{ + if (session->internals.initial_negotiation_completed || + session->key.binders[0].prf == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + return _tls13_derive_exporter(session->key.binders[0].prf, session, + label_size, label, + context_size, context, + outsize, out, + 1); +} + /** * gnutls_prf: * @session: is a #gnutls_session_t type. @@ -400,7 +288,9 @@ gnutls_prf_rfc5705(gnutls_session_t session, * The output is placed in @out, which must be pre-allocated. * * Note: This function produces identical output with gnutls_prf_rfc5705() - * when @server_random_first is set to 0 and @extra is %NULL. + * when @server_random_first is set to 0 and @extra is %NULL. Under TLS1.3 + * this function will only operate when these conditions are true, or otherwise + * return %GNUTLS_E_INVALID_REQUEST. * * Returns: %GNUTLS_E_SUCCESS on success, or an error code. **/ @@ -414,8 +304,20 @@ gnutls_prf(gnutls_session_t session, { int ret; uint8_t *seed; + const version_entry_st *vers = get_version(session); size_t seedsize = 2 * GNUTLS_RANDOM_SIZE + extra_size; + if (vers && vers->tls13_sem) { + if (extra == NULL && server_random_first == 0) + return gnutls_prf_rfc5705(session, label_size, label, + extra_size, extra, outsize, out); + else + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } + + if (session->security_parameters.prf == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + seed = gnutls_malloc(seedsize); if (!seed) { gnutls_assert(); @@ -436,10 +338,11 @@ gnutls_prf(gnutls_session_t session, } ret = - _gnutls_PRF(session, - session->security_parameters.master_secret, - GNUTLS_MASTER_SIZE, label, label_size, seed, - seedsize, outsize, out); + _gnutls_prf_raw(session->security_parameters.prf->id, + GNUTLS_MASTER_SIZE, session->security_parameters.master_secret, + label_size, label, + seedsize, seed, + outsize, out); gnutls_free(seed); diff --git a/lib/priority.c b/lib/priority.c index 3c9265c08f..ad99459adb 100644 --- a/lib/priority.c +++ b/lib/priority.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2004-2015 Free Software Foundation, Inc. - * Copyright (C) 2015 Red Hat, Inc. + * Copyright (C) 2015-2019 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -30,14 +30,29 @@ #include #include #include -#include +#include +#include #include "fips.h" #include "errno.h" +#include "ext/srp.h" +#include +#include "profiles.h" +#include "c-strcase.h" +#include "inih/ini.h" +#include "profiles.h" +#include "name_val_array.h" #define MAX_ELEMENTS 64 +#define ENABLE_PROFILE(c, profile) do { \ + c->additional_verify_flags &= 0x00ffffff; \ + c->additional_verify_flags |= GNUTLS_PROFILE_TO_VFLAGS(profile); \ + c->level = _gnutls_profile_to_sec_level(profile); \ + } while(0) + /* This function is used by the test suite */ char *_gnutls_resolve_priorities(const char* priorities); +const char *_gnutls_default_priority_string = DEFAULT_PRIORITY_STRING; static void prio_remove(priority_st * priority_list, unsigned int algo); static void prio_add(priority_st * priority_list, unsigned int algo); @@ -55,10 +70,10 @@ inline static void _set_priority(priority_st * st, const int *list) num++; if (num > MAX_ALGOS) num = MAX_ALGOS; - st->algorithms = num; + st->num_priorities = num; for (i = 0; i < num; i++) { - st->priority[i] = list[i]; + st->priorities[i] = list[i]; } return; @@ -68,7 +83,7 @@ inline static void _add_priority(priority_st * st, const int *list) { int num, i, j, init; - init = i = st->algorithms; + init = i = st->num_priorities; for (num = 0; list[num] != 0; ++num) { if (i + 1 > MAX_ALGOS) { @@ -76,14 +91,14 @@ inline static void _add_priority(priority_st * st, const int *list) } for (j = 0; j < init; j++) { - if (st->priority[j] == (unsigned) list[num]) { + if (st->priorities[j] == (unsigned) list[num]) { break; } } if (j == init) { - st->priority[i++] = list[num]; - st->algorithms++; + st->priorities[i++] = list[num]; + st->num_priorities++; } } @@ -104,47 +119,95 @@ static void _clear_given_priorities(priority_st * st, const int *list) } } -static const int _supported_ecc_normal[] = { - GNUTLS_ECC_CURVE_SECP256R1, - GNUTLS_ECC_CURVE_SECP384R1, - GNUTLS_ECC_CURVE_SECP521R1, -#ifdef ENABLE_NON_SUITEB_CURVES - GNUTLS_ECC_CURVE_SECP224R1, - GNUTLS_ECC_CURVE_SECP192R1, +static const int _supported_groups_dh[] = { + GNUTLS_GROUP_FFDHE2048, + GNUTLS_GROUP_FFDHE3072, + GNUTLS_GROUP_FFDHE4096, + GNUTLS_GROUP_FFDHE6144, + GNUTLS_GROUP_FFDHE8192, + 0 +}; + +static const int _supported_groups_ecdh[] = { + GNUTLS_GROUP_SECP256R1, + GNUTLS_GROUP_SECP384R1, + GNUTLS_GROUP_SECP521R1, + GNUTLS_GROUP_X25519, /* RFC 8422 */ + GNUTLS_GROUP_X448, /* RFC 8422 */ + 0 +}; + +static const int _supported_groups_gost[] = { +#ifdef ENABLE_GOST + GNUTLS_GROUP_GC256A, + GNUTLS_GROUP_GC256B, + GNUTLS_GROUP_GC256C, + GNUTLS_GROUP_GC256D, + GNUTLS_GROUP_GC512A, + GNUTLS_GROUP_GC512B, + GNUTLS_GROUP_GC512C, #endif 0 }; -static const int* supported_ecc_normal = _supported_ecc_normal; -static const int _supported_ecc_secure128[] = { - GNUTLS_ECC_CURVE_SECP256R1, - GNUTLS_ECC_CURVE_SECP384R1, - GNUTLS_ECC_CURVE_SECP521R1, +static const int _supported_groups_normal[] = { + GNUTLS_GROUP_SECP256R1, + GNUTLS_GROUP_SECP384R1, + GNUTLS_GROUP_SECP521R1, + GNUTLS_GROUP_X25519, /* RFC 8422 */ + GNUTLS_GROUP_X448, /* RFC 8422 */ + + /* These should stay last as our default behavior + * is to send key shares for two top types (GNUTLS_KEY_SHARE_TOP2) + * and we wouldn't want to have these sent by all clients + * by default as they are quite expensive CPU-wise. */ + GNUTLS_GROUP_FFDHE2048, + GNUTLS_GROUP_FFDHE3072, + GNUTLS_GROUP_FFDHE4096, + GNUTLS_GROUP_FFDHE6144, + GNUTLS_GROUP_FFDHE8192, 0 }; -static const int* supported_ecc_secure128 = _supported_ecc_secure128; +static const int* supported_groups_normal = _supported_groups_normal; + +static const int _supported_groups_secure128[] = { + GNUTLS_GROUP_SECP256R1, + GNUTLS_GROUP_SECP384R1, + GNUTLS_GROUP_SECP521R1, + GNUTLS_GROUP_X25519, /* RFC 8422 */ + GNUTLS_GROUP_X448, /* RFC 8422 */ + GNUTLS_GROUP_FFDHE2048, + GNUTLS_GROUP_FFDHE3072, + GNUTLS_GROUP_FFDHE4096, + GNUTLS_GROUP_FFDHE6144, + GNUTLS_GROUP_FFDHE8192, + 0 +}; +static const int* supported_groups_secure128 = _supported_groups_secure128; -static const int _supported_ecc_suiteb128[] = { - GNUTLS_ECC_CURVE_SECP256R1, - GNUTLS_ECC_CURVE_SECP384R1, +static const int _supported_groups_suiteb128[] = { + GNUTLS_GROUP_SECP256R1, + GNUTLS_GROUP_SECP384R1, 0 }; -static const int* supported_ecc_suiteb128 = _supported_ecc_suiteb128; +static const int* supported_groups_suiteb128 = _supported_groups_suiteb128; -static const int _supported_ecc_suiteb192[] = { - GNUTLS_ECC_CURVE_SECP384R1, +static const int _supported_groups_suiteb192[] = { + GNUTLS_GROUP_SECP384R1, 0 }; -static const int* supported_ecc_suiteb192 = _supported_ecc_suiteb192; +static const int* supported_groups_suiteb192 = _supported_groups_suiteb192; -static const int _supported_ecc_secure192[] = { - GNUTLS_ECC_CURVE_SECP384R1, - GNUTLS_ECC_CURVE_SECP521R1, +static const int _supported_groups_secure192[] = { + GNUTLS_GROUP_SECP384R1, + GNUTLS_GROUP_SECP521R1, + GNUTLS_GROUP_FFDHE8192, 0 }; -static const int* supported_ecc_secure192 = _supported_ecc_secure192; +static const int* supported_groups_secure192 = _supported_groups_secure192; static const int protocol_priority[] = { + GNUTLS_TLS1_3, GNUTLS_TLS1_2, GNUTLS_TLS1_1, GNUTLS_TLS1_0, @@ -153,13 +216,18 @@ static const int protocol_priority[] = { 0 }; +/* contains all the supported TLS protocols, intended to be used for eliminating them + */ static const int stream_protocol_priority[] = { + GNUTLS_TLS1_3, GNUTLS_TLS1_2, GNUTLS_TLS1_1, GNUTLS_TLS1_0, 0 }; +/* contains all the supported DTLS protocols, intended to be used for eliminating them + */ static const int dgram_protocol_priority[] = { GNUTLS_DTLS1_2, GNUTLS_DTLS1_0, @@ -221,7 +289,7 @@ static const int _kx_priority_secure[] = { GNUTLS_KX_RSA, /* KX-RSA is now ahead of DHE-RSA and DHE-DSS due to the compatibility * issues the DHE ciphersuites have. That is, one cannot enforce a specific - * security level without dropping the connection. + * security level without dropping the connection. */ #ifdef ENABLE_DHE GNUTLS_KX_DHE_RSA, @@ -232,18 +300,20 @@ static const int _kx_priority_secure[] = { }; static const int* kx_priority_secure = _kx_priority_secure; +static const int _kx_priority_gost[] = { + GNUTLS_KX_VKO_GOST_12, + 0, +}; +static const int* kx_priority_gost = _kx_priority_gost; + static const int _cipher_priority_performance_default[] = { GNUTLS_CIPHER_AES_128_GCM, GNUTLS_CIPHER_AES_256_GCM, GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_CIPHER_AES_128_CCM, GNUTLS_CIPHER_AES_256_CCM, - GNUTLS_CIPHER_CAMELLIA_128_GCM, - GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_CIPHER_AES_128_CBC, GNUTLS_CIPHER_AES_256_CBC, - GNUTLS_CIPHER_CAMELLIA_128_CBC, - GNUTLS_CIPHER_CAMELLIA_256_CBC, 0 }; @@ -253,12 +323,8 @@ static const int _cipher_priority_performance_no_aesni[] = { GNUTLS_CIPHER_AES_256_GCM, GNUTLS_CIPHER_AES_128_CCM, GNUTLS_CIPHER_AES_256_CCM, - GNUTLS_CIPHER_CAMELLIA_128_GCM, - GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_CIPHER_AES_128_CBC, GNUTLS_CIPHER_AES_256_CBC, - GNUTLS_CIPHER_CAMELLIA_128_CBC, - GNUTLS_CIPHER_CAMELLIA_256_CBC, 0 }; @@ -269,19 +335,15 @@ static const int _cipher_priority_performance_no_aesni[] = { */ static const int _cipher_priority_normal_default[] = { GNUTLS_CIPHER_AES_256_GCM, - GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_CIPHER_AES_256_CCM, GNUTLS_CIPHER_AES_256_CBC, - GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_CIPHER_AES_128_GCM, - GNUTLS_CIPHER_CAMELLIA_128_GCM, GNUTLS_CIPHER_AES_128_CCM, GNUTLS_CIPHER_AES_128_CBC, - GNUTLS_CIPHER_CAMELLIA_128_CBC, 0 }; @@ -324,16 +386,12 @@ static const int* cipher_priority_suiteb192 = _cipher_priority_suiteb192; static const int _cipher_priority_secure128[] = { GNUTLS_CIPHER_AES_256_GCM, - GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_CIPHER_AES_256_CBC, - GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_CIPHER_AES_256_CCM, GNUTLS_CIPHER_AES_128_GCM, - GNUTLS_CIPHER_CAMELLIA_128_GCM, GNUTLS_CIPHER_AES_128_CBC, - GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_CIPHER_AES_128_CCM, 0 }; @@ -342,85 +400,119 @@ static const int *cipher_priority_secure128 = _cipher_priority_secure128; static const int _cipher_priority_secure192[] = { GNUTLS_CIPHER_AES_256_GCM, - GNUTLS_CIPHER_CAMELLIA_256_GCM, GNUTLS_CIPHER_CHACHA20_POLY1305, GNUTLS_CIPHER_AES_256_CBC, - GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_CIPHER_AES_256_CCM, 0 }; static const int* cipher_priority_secure192 = _cipher_priority_secure192; -static const int comp_priority[] = { - /* compression should be explicitly requested to be enabled */ - GNUTLS_COMP_NULL, - 0 -}; - static const int _sign_priority_default[] = { GNUTLS_SIGN_RSA_SHA256, + GNUTLS_SIGN_RSA_PSS_SHA256, + GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_ECDSA_SHA256, + GNUTLS_SIGN_ECDSA_SECP256R1_SHA256, + + GNUTLS_SIGN_EDDSA_ED25519, GNUTLS_SIGN_RSA_SHA384, + GNUTLS_SIGN_RSA_PSS_SHA384, + GNUTLS_SIGN_RSA_PSS_RSAE_SHA384, GNUTLS_SIGN_ECDSA_SHA384, + GNUTLS_SIGN_ECDSA_SECP384R1_SHA384, + + GNUTLS_SIGN_EDDSA_ED448, GNUTLS_SIGN_RSA_SHA512, - GNUTLS_SIGN_ECDSA_SHA512, + GNUTLS_SIGN_RSA_PSS_SHA512, + GNUTLS_SIGN_RSA_PSS_RSAE_SHA512, - GNUTLS_SIGN_RSA_SHA224, - GNUTLS_SIGN_ECDSA_SHA224, + GNUTLS_SIGN_ECDSA_SHA512, + GNUTLS_SIGN_ECDSA_SECP521R1_SHA512, GNUTLS_SIGN_RSA_SHA1, GNUTLS_SIGN_ECDSA_SHA1, + 0 }; static const int* sign_priority_default = _sign_priority_default; static const int _sign_priority_suiteb128[] = { GNUTLS_SIGN_ECDSA_SHA256, + GNUTLS_SIGN_ECDSA_SECP256R1_SHA256, GNUTLS_SIGN_ECDSA_SHA384, + GNUTLS_SIGN_ECDSA_SECP384R1_SHA384, 0 }; static const int* sign_priority_suiteb128 = _sign_priority_suiteb128; static const int _sign_priority_suiteb192[] = { GNUTLS_SIGN_ECDSA_SHA384, + GNUTLS_SIGN_ECDSA_SECP384R1_SHA384, 0 }; static const int* sign_priority_suiteb192 = _sign_priority_suiteb192; static const int _sign_priority_secure128[] = { GNUTLS_SIGN_RSA_SHA256, + GNUTLS_SIGN_RSA_PSS_SHA256, + GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_ECDSA_SHA256, + GNUTLS_SIGN_ECDSA_SECP256R1_SHA256, + + GNUTLS_SIGN_EDDSA_ED25519, + GNUTLS_SIGN_RSA_SHA384, + GNUTLS_SIGN_RSA_PSS_SHA384, + GNUTLS_SIGN_RSA_PSS_RSAE_SHA384, GNUTLS_SIGN_ECDSA_SHA384, + GNUTLS_SIGN_ECDSA_SECP384R1_SHA384, + + GNUTLS_SIGN_EDDSA_ED448, + GNUTLS_SIGN_RSA_SHA512, + GNUTLS_SIGN_RSA_PSS_SHA512, + GNUTLS_SIGN_RSA_PSS_RSAE_SHA512, GNUTLS_SIGN_ECDSA_SHA512, + GNUTLS_SIGN_ECDSA_SECP521R1_SHA512, + 0 }; static const int* sign_priority_secure128 = _sign_priority_secure128; static const int _sign_priority_secure192[] = { GNUTLS_SIGN_RSA_SHA384, + GNUTLS_SIGN_RSA_PSS_SHA384, + GNUTLS_SIGN_RSA_PSS_RSAE_SHA384, GNUTLS_SIGN_ECDSA_SHA384, + GNUTLS_SIGN_ECDSA_SECP384R1_SHA384, GNUTLS_SIGN_RSA_SHA512, + GNUTLS_SIGN_RSA_PSS_SHA512, + GNUTLS_SIGN_RSA_PSS_RSAE_SHA512, GNUTLS_SIGN_ECDSA_SHA512, + GNUTLS_SIGN_ECDSA_SECP521R1_SHA512, + 0 }; static const int* sign_priority_secure192 = _sign_priority_secure192; +static const int _sign_priority_gost[] = { + GNUTLS_SIGN_GOST_256, + GNUTLS_SIGN_GOST_512, + + 0 +}; +static const int* sign_priority_gost = _sign_priority_gost; + static const int mac_priority_normal_default[] = { GNUTLS_MAC_SHA1, - GNUTLS_MAC_SHA256, - GNUTLS_MAC_SHA384, GNUTLS_MAC_AEAD, 0 }; static const int mac_priority_normal_fips[] = { GNUTLS_MAC_SHA1, - GNUTLS_MAC_SHA256, - GNUTLS_MAC_SHA384, GNUTLS_MAC_AEAD, 0 }; @@ -429,6 +521,18 @@ static const int *cipher_priority_performance = _cipher_priority_performance_def static const int *cipher_priority_normal = _cipher_priority_normal_default; static const int *mac_priority_normal = mac_priority_normal_default; +static const int _cipher_priority_gost[] = { + GNUTLS_CIPHER_GOST28147_TC26Z_CNT, + 0 +}; +static const int *cipher_priority_gost = _cipher_priority_gost; + +static const int _mac_priority_gost[] = { + GNUTLS_MAC_GOST28147_TC26Z_IMIT, + 0 +}; +static const int *mac_priority_gost = _mac_priority_gost; + /* if called with replace the default priorities with the FIPS140 ones */ void _gnutls_priority_update_fips(void) { @@ -454,16 +558,12 @@ static const int* mac_priority_suiteb = _mac_priority_suiteb; static const int _mac_priority_secure128[] = { GNUTLS_MAC_SHA1, - GNUTLS_MAC_SHA256, - GNUTLS_MAC_SHA384, GNUTLS_MAC_AEAD, 0 }; static const int* mac_priority_secure128 = _mac_priority_secure128; static const int _mac_priority_secure192[] = { - GNUTLS_MAC_SHA256, - GNUTLS_MAC_SHA384, GNUTLS_MAC_AEAD, 0 }; @@ -476,7 +576,7 @@ static const int cert_type_priority_default[] = { static const int cert_type_priority_all[] = { GNUTLS_CRT_X509, - GNUTLS_CRT_OPENPGP, + GNUTLS_CRT_RAWPK, 0 }; @@ -486,18 +586,18 @@ static void prio_remove(priority_st * priority_list, unsigned int algo) { unsigned int i; - for (i = 0; i < priority_list->algorithms; i++) { - if (priority_list->priority[i] == algo) { - priority_list->algorithms--; - if ((priority_list->algorithms - i) > 0) - memmove(&priority_list->priority[i], - &priority_list->priority[i + 1], - (priority_list->algorithms - + for (i = 0; i < priority_list->num_priorities; i++) { + if (priority_list->priorities[i] == algo) { + priority_list->num_priorities--; + if ((priority_list->num_priorities - i) > 0) + memmove(&priority_list->priorities[i], + &priority_list->priorities[i + 1], + (priority_list->num_priorities - i) * sizeof(priority_list-> - priority[0])); - priority_list->priority[priority_list-> - algorithms] = 0; + priorities[0])); + priority_list->priorities[priority_list-> + num_priorities] = 0; break; } } @@ -507,18 +607,18 @@ static void prio_remove(priority_st * priority_list, unsigned int algo) static void prio_add(priority_st * priority_list, unsigned int algo) { - unsigned int i, l = priority_list->algorithms; + unsigned int i, l = priority_list->num_priorities; if (l >= MAX_ALGOS) return; /* can't add it anyway */ for (i = 0; i < l; ++i) { - if (algo == priority_list->priority[i]) + if (algo == priority_list->priorities[i]) return; /* if it exists */ } - priority_list->priority[l] = algo; - priority_list->algorithms++; + priority_list->priorities[l] = algo; + priority_list->num_priorities++; return; } @@ -530,46 +630,61 @@ static void prio_add(priority_st * priority_list, unsigned int algo) * @priority: is a #gnutls_priority_t type. * * Sets the priorities to use on the ciphers, key exchange methods, - * macs and compression methods. + * and macs. Note that this function is expected to be called once + * per session; when called multiple times (e.g., before a re-handshake, + * the caller should make sure that any new settings are not incompatible + * with the original session). * - * Returns: %GNUTLS_E_SUCCESS on success, or an error code. + * Returns: %GNUTLS_E_SUCCESS on success, or an error code on error. **/ int gnutls_priority_set(gnutls_session_t session, gnutls_priority_t priority) { - if (priority == NULL) { - gnutls_assert(); - return GNUTLS_E_NO_CIPHER_SUITES; - } + int ret; - memcpy(&session->internals.priorities, priority, - sizeof(struct gnutls_priority_st)); + if (priority == NULL || priority->protocol.num_priorities == 0 || + priority->cs.size == 0) + return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET); - /* set the current version to the first in the chain. - * This will be overridden later. - */ - if (session->internals.priorities.protocol.algorithms > 0) { - if (_gnutls_set_current_version(session, - session->internals.priorities. - protocol.priority[0]) < 0) { - return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); - } + /* set the current version to the first in the chain, if this is + * the call before the initial handshake. During a re-handshake + * we do not set the version to avoid overriding the currently + * negotiated version. */ + if (!session->internals.handshake_in_progress && + !session->internals.initial_negotiation_completed) { + ret = _gnutls_set_current_version(session, + priority->protocol.priorities[0]); + if (ret < 0) + return gnutls_assert_val(ret); } + /* At this point the provided priorities passed the sanity tests */ + + if (session->internals.priorities) + gnutls_priority_deinit(session->internals.priorities); + + gnutls_atomic_increment(&priority->usage_cnt); + session->internals.priorities = priority; + if (priority->no_tickets != 0) { /* when PFS is explicitly requested, disable session tickets */ - _gnutls_ext_unset_session_data(session, GNUTLS_EXTENSION_SESSION_TICKET); + session->internals.flags |= GNUTLS_NO_TICKETS; } - if (session->internals.priorities.protocol.algorithms == 0 || - session->internals.priorities.cipher.algorithms == 0 || - session->internals.priorities.mac.algorithms == 0 || - session->internals.priorities.kx.algorithms == 0 || - session->internals.priorities.compression.algorithms == 0) - return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET); - ADD_PROFILE_VFLAGS(session, priority->additional_verify_flags); + /* mirror variables */ +#undef COPY_TO_INTERNALS +#define COPY_TO_INTERNALS(xx) session->internals.xx = priority->_##xx + COPY_TO_INTERNALS(allow_large_records); + COPY_TO_INTERNALS(allow_small_records); + COPY_TO_INTERNALS(no_etm); + COPY_TO_INTERNALS(no_ext_master_secret); + COPY_TO_INTERNALS(allow_key_usage_violation); + COPY_TO_INTERNALS(allow_wrong_pms); + COPY_TO_INTERNALS(dumbfw); + COPY_TO_INTERNALS(dh_prime_bits); + return 0; } @@ -593,20 +708,20 @@ struct priority_groups_st { const int **mac_list; const int **kx_list; const int **sign_list; - const int **ecc_list; + const int **group_list; unsigned profile; int sec_param; bool no_tickets; }; -static const struct priority_groups_st pgroups[] = +static const struct priority_groups_st pgroups[] = { {.name = LEVEL_NORMAL, .cipher_list = &cipher_priority_normal, .mac_list = &mac_priority_normal, .kx_list = &kx_priority_secure, .sign_list = &sign_priority_default, - .ecc_list = &supported_ecc_normal, + .group_list = &supported_groups_normal, .profile = GNUTLS_PROFILE_LOW, .sec_param = GNUTLS_SEC_PARAM_WEAK }, @@ -615,7 +730,7 @@ static const struct priority_groups_st pgroups[] = .mac_list = &mac_priority_secure128, .kx_list = &kx_priority_pfs, .sign_list = &sign_priority_default, - .ecc_list = &supported_ecc_normal, + .group_list = &supported_groups_normal, .profile = GNUTLS_PROFILE_LOW, .sec_param = GNUTLS_SEC_PARAM_WEAK, .no_tickets = 1 @@ -626,7 +741,7 @@ static const struct priority_groups_st pgroups[] = .mac_list = &mac_priority_secure128, .kx_list = &kx_priority_secure, .sign_list = &sign_priority_secure128, - .ecc_list = &supported_ecc_secure128, + .group_list = &supported_groups_secure128, /* The profile should have been HIGH but if we don't allow * SHA-1 (80-bits) as signature algorithm we are not able * to connect anywhere with this level */ @@ -639,7 +754,7 @@ static const struct priority_groups_st pgroups[] = .mac_list = &mac_priority_secure192, .kx_list = &kx_priority_secure, .sign_list = &sign_priority_secure192, - .ecc_list = &supported_ecc_secure192, + .group_list = &supported_groups_secure192, .profile = GNUTLS_PROFILE_HIGH, .sec_param = GNUTLS_SEC_PARAM_HIGH }, @@ -649,7 +764,7 @@ static const struct priority_groups_st pgroups[] = .mac_list = &mac_priority_suiteb, .kx_list = &kx_priority_suiteb, .sign_list = &sign_priority_suiteb128, - .ecc_list = &supported_ecc_suiteb128, + .group_list = &supported_groups_suiteb128, .profile = GNUTLS_PROFILE_SUITEB128, .sec_param = GNUTLS_SEC_PARAM_HIGH }, @@ -659,7 +774,7 @@ static const struct priority_groups_st pgroups[] = .mac_list = &mac_priority_suiteb, .kx_list = &kx_priority_suiteb, .sign_list = &sign_priority_suiteb192, - .ecc_list = &supported_ecc_suiteb192, + .group_list = &supported_groups_suiteb192, .profile = GNUTLS_PROFILE_SUITEB192, .sec_param = GNUTLS_SEC_PARAM_ULTRA }, @@ -668,7 +783,7 @@ static const struct priority_groups_st pgroups[] = .mac_list = &mac_priority_normal, .kx_list = &kx_priority_secure, .sign_list = &sign_priority_default, - .ecc_list = &supported_ecc_normal, + .group_list = &supported_groups_normal, .sec_param = GNUTLS_SEC_PARAM_VERY_WEAK }, {.name = LEVEL_PERFORMANCE, @@ -676,7 +791,7 @@ static const struct priority_groups_st pgroups[] = .mac_list = &mac_priority_normal, .kx_list = &kx_priority_performance, .sign_list = &sign_priority_default, - .ecc_list = &supported_ecc_normal, + .group_list = &supported_groups_normal, .profile = GNUTLS_PROFILE_LOW, .sec_param = GNUTLS_SEC_PARAM_WEAK }, @@ -715,15 +830,15 @@ int check_level(const char *level, gnutls_priority_t priority_cache, if (pgroups[i].name == NULL) return 0; - if (strcasecmp(level, pgroups[i].name) == 0 || - (pgroups[i].alias != NULL && strcasecmp(level, pgroups[i].alias) == 0)) { + if (c_strcasecmp(level, pgroups[i].name) == 0 || + (pgroups[i].alias != NULL && c_strcasecmp(level, pgroups[i].alias) == 0)) { if (pgroups[i].proto_list != NULL) func(&priority_cache->protocol, *pgroups[i].proto_list); - func(&priority_cache->cipher, *pgroups[i].cipher_list); - func(&priority_cache->kx, *pgroups[i].kx_list); - func(&priority_cache->mac, *pgroups[i].mac_list); - func(&priority_cache->sign_algo, *pgroups[i].sign_list); - func(&priority_cache->supported_ecc, *pgroups[i].ecc_list); + func(&priority_cache->_cipher, *pgroups[i].cipher_list); + func(&priority_cache->_kx, *pgroups[i].kx_list); + func(&priority_cache->_mac, *pgroups[i].mac_list); + func(&priority_cache->_sign_algo, *pgroups[i].sign_list); + func(&priority_cache->_supported_ecc, *pgroups[i].group_list); if (pgroups[i].profile != 0) { SET_PROFILE(pgroups[i].profile); /* set certificate level */ @@ -746,15 +861,19 @@ int check_level(const char *level, gnutls_priority_t priority_cache, static void enable_compat(gnutls_priority_t c) { - ENABLE_COMPAT(c); + ENABLE_PRIO_COMPAT(c); } static void enable_server_key_usage_violations(gnutls_priority_t c) { c->allow_server_key_usage_violation = 1; } +static void enable_allow_small_records(gnutls_priority_t c) +{ + c->_allow_small_records = 1; +} static void enable_dumbfw(gnutls_priority_t c) { - c->dumbfw = 1; + c->_dumbfw = 1; } static void enable_no_extensions(gnutls_priority_t c) { @@ -762,19 +881,19 @@ static void enable_no_extensions(gnutls_priority_t c) } static void enable_no_ext_master_secret(gnutls_priority_t c) { - c->no_ext_master_secret = 1; + c->_no_ext_master_secret = 1; } static void enable_no_etm(gnutls_priority_t c) { - c->no_etm = 1; + c->_no_etm = 1; } -static void enable_no_tickets(gnutls_priority_t c) +static void enable_force_etm(gnutls_priority_t c) { - c->no_tickets = 1; + c->force_etm = 1; } -static void enable_stateless_compression(gnutls_priority_t c) +static void enable_no_tickets(gnutls_priority_t c) { - c->stateless_compression = 1; + c->no_tickets = 1; } static void disable_wildcards(gnutls_priority_t c) { @@ -782,51 +901,39 @@ static void disable_wildcards(gnutls_priority_t c) } static void enable_profile_very_weak(gnutls_priority_t c) { - c->additional_verify_flags &= 0x00ffffff; - c->additional_verify_flags |= GNUTLS_PROFILE_TO_VFLAGS(GNUTLS_PROFILE_VERY_WEAK); - c->level = GNUTLS_SEC_PARAM_VERY_WEAK; + ENABLE_PROFILE(c, GNUTLS_PROFILE_VERY_WEAK); } static void enable_profile_low(gnutls_priority_t c) { - c->additional_verify_flags &= 0x00ffffff; - c->additional_verify_flags |= GNUTLS_PROFILE_TO_VFLAGS(GNUTLS_PROFILE_LOW); - c->level = GNUTLS_SEC_PARAM_LOW; + ENABLE_PROFILE(c, GNUTLS_PROFILE_LOW); } static void enable_profile_legacy(gnutls_priority_t c) { - c->additional_verify_flags &= 0x00ffffff; - c->additional_verify_flags |= GNUTLS_PROFILE_TO_VFLAGS(GNUTLS_PROFILE_LEGACY); - c->level = GNUTLS_SEC_PARAM_LEGACY; + ENABLE_PROFILE(c, GNUTLS_PROFILE_LEGACY); +} +static void enable_profile_medium(gnutls_priority_t c) +{ + ENABLE_PROFILE(c, GNUTLS_PROFILE_MEDIUM); } static void enable_profile_high(gnutls_priority_t c) { - c->additional_verify_flags &= 0x00ffffff; - c->additional_verify_flags |= GNUTLS_PROFILE_TO_VFLAGS(GNUTLS_PROFILE_HIGH); - c->level = GNUTLS_SEC_PARAM_HIGH; + ENABLE_PROFILE(c, GNUTLS_PROFILE_HIGH); } static void enable_profile_ultra(gnutls_priority_t c) { - c->additional_verify_flags &= 0x00ffffff; - c->additional_verify_flags |= GNUTLS_PROFILE_TO_VFLAGS(GNUTLS_PROFILE_ULTRA); - c->level = GNUTLS_SEC_PARAM_ULTRA; + ENABLE_PROFILE(c, GNUTLS_PROFILE_ULTRA); } -static void enable_profile_medium(gnutls_priority_t c) +static void enable_profile_future(gnutls_priority_t c) { - c->additional_verify_flags &= 0x00ffffff; - c->additional_verify_flags |= GNUTLS_PROFILE_TO_VFLAGS(GNUTLS_PROFILE_MEDIUM); - c->level = GNUTLS_SEC_PARAM_MEDIUM; + ENABLE_PROFILE(c, GNUTLS_PROFILE_FUTURE); } static void enable_profile_suiteb128(gnutls_priority_t c) { - c->additional_verify_flags &= 0x00ffffff; - c->additional_verify_flags |= GNUTLS_PROFILE_TO_VFLAGS(GNUTLS_PROFILE_SUITEB128); - c->level = GNUTLS_SEC_PARAM_HIGH; + ENABLE_PROFILE(c, GNUTLS_PROFILE_SUITEB128); } static void enable_profile_suiteb192(gnutls_priority_t c) { - c->additional_verify_flags &= 0x00ffffff; - c->additional_verify_flags |= GNUTLS_PROFILE_TO_VFLAGS(GNUTLS_PROFILE_SUITEB192); - c->level = GNUTLS_SEC_PARAM_ULTRA; + ENABLE_PROFILE(c, GNUTLS_PROFILE_SUITEB128); } static void enable_safe_renegotiation(gnutls_priority_t c) { @@ -887,91 +994,347 @@ static void dummy_func(gnutls_priority_t c) #include -static char *check_str(char *line, size_t line_size, const char *needle, size_t needle_size) +static gnutls_certificate_verification_profiles_t system_wide_verification_profile = GNUTLS_PROFILE_UNKNOWN; +static name_val_array_t system_wide_priority_strings = NULL; +static unsigned system_wide_priority_strings_init = 0; +static unsigned system_wide_default_priority_string = 0; +static unsigned fail_on_invalid_config = 0; +static unsigned system_wide_disabled_ciphers[MAX_ALGOS+1] = {0}; +static unsigned system_wide_disabled_macs[MAX_ALGOS+1] = {0}; +static unsigned system_wide_disabled_groups[MAX_ALGOS+1] = {0}; +static unsigned system_wide_disabled_kxs[MAX_ALGOS+1] = {0}; + +static const char *system_priority_file = SYSTEM_PRIORITY_FILE; +static time_t system_priority_last_mod = 0; + +#define CUSTOM_PRIORITY_SECTION "priorities" +#define OVERRIDES_SECTION "overrides" +#define MAX_ALGO_NAME 2048 + +static void _clear_default_system_priority(void) { - char *p; - unsigned n; + if (system_wide_default_priority_string) { + gnutls_free(_gnutls_default_priority_string); + _gnutls_default_priority_string = DEFAULT_PRIORITY_STRING; + system_wide_default_priority_string = 0; + } + +} + +gnutls_certificate_verification_profiles_t _gnutls_get_system_wide_verification_profile(void) +{ + return system_wide_verification_profile; +} + +/* removes spaces */ +static char *clear_spaces(const char *str, char out[MAX_ALGO_NAME]) +{ + const char *p = str; + unsigned i = 0; + + while (c_isspace(*p)) + p++; + + while (!c_isspace(*p) && *p != 0) { + out[i++] = *p; + p++; - while (c_isspace(*line)) { - line++; - line_size--; + if (i >= MAX_ALGO_NAME-1) + break; } + out[i] = 0; + return out; +} - if (line[0] == '#' || needle_size >= line_size) - return NULL; +/* This function parses a gnutls configuration file and updates internal + * settings accordingly. + */ +static int cfg_ini_handler(void *_ctx, const char *section, const char *name, const char *value) +{ + char *p; + int ret, type; + unsigned i; + char str[MAX_ALGO_NAME]; - if (memcmp(line, needle, needle_size) == 0) { - p = &line[needle_size]; - while (c_isspace(*p)) { - p++; - } - if (*p != '=') { - return NULL; - } else - p++; + /* Note that we intentionally overwrite the value above; inih does + * not use that value after we handle it. */ - while (c_isspace(*p)) { - p++; + /* Parse sections */ + if (section == NULL || section[0] == 0 || c_strcasecmp(section, CUSTOM_PRIORITY_SECTION)==0) { + if (system_wide_priority_strings_init == 0) { + _name_val_array_init(&system_wide_priority_strings); + system_wide_priority_strings_init = 1; } - n = strlen(p); + _gnutls_debug_log("cfg: adding priority: %s -> %s\n", name, value); - if (n > 1 && p[n-1] == '\n') { - n--; - p[n] = 0; - } + ret = _name_val_array_append(&system_wide_priority_strings, name, value); + if (ret < 0) + return 0; + } else if (c_strcasecmp(section, OVERRIDES_SECTION)==0) { + if (c_strcasecmp(name, "default-priority-string")==0) { + _clear_default_system_priority(); + p = clear_spaces(value, str); + _gnutls_debug_log("cfg: setting default-priority-string to %s\n", p); + if (strlen(p) > 0) { + _gnutls_default_priority_string = gnutls_strdup(p); + if (!_gnutls_default_priority_string) { + _gnutls_default_priority_string = DEFAULT_PRIORITY_STRING; + _gnutls_debug_log("cfg: failed setting default-priority-string\n"); + return 0; + } + system_wide_default_priority_string = 1; + } else { + _gnutls_debug_log("cfg: empty default-priority-string, using default\n"); + if (fail_on_invalid_config) + return 0; + } + } else if (c_strcasecmp(name, "insecure-hash")==0) { + p = clear_spaces(value, str); + + _gnutls_debug_log("cfg: marking hash %s as insecure\n", + p); + + ret = _gnutls_digest_mark_insecure(p); + if (ret < 0) { + _gnutls_debug_log("cfg: found unknown hash %s in %s\n", + p, name); + if (fail_on_invalid_config) + return 0; + } + } else if (c_strcasecmp(name, "insecure-sig")==0 || c_strcasecmp(name, "insecure-sig-for-cert")==0) { + p = clear_spaces(value, str); + + if (c_strcasecmp(name, "insecure-sig")==0) { + type = _INSECURE; + _gnutls_debug_log("cfg: marking signature %s as insecure\n", + p); + } else { + _gnutls_debug_log("cfg: marking signature %s as insecure for certs\n", + p); + type = _INSECURE_FOR_CERTS; + } + + ret = _gnutls_sign_mark_insecure(p, type); + if (ret < 0) { + _gnutls_debug_log("cfg: found unknown signature algorithm %s in %s\n", + p, name); + if (fail_on_invalid_config) + return 0; + } + } else if (c_strcasecmp(name, "disabled-version")==0) { + p = clear_spaces(value, str); + + _gnutls_debug_log("cfg: disabling version %s\n", + p); + + ret = _gnutls_version_mark_disabled(p); + if (ret < 0) { + _gnutls_debug_log("cfg: found unknown version %s in %s\n", + p, name); + if (fail_on_invalid_config) + return 0; + } + } else if (c_strcasecmp(name, "disabled-curve")==0) { + p = clear_spaces(value, str); + + _gnutls_debug_log("cfg: disabling curve %s\n", + p); + + ret = _gnutls_ecc_curve_mark_disabled(p); + if (ret < 0) { + _gnutls_debug_log("cfg: found unknown curve %s in %s\n", + p, name); + if (fail_on_invalid_config) + return 0; + } + } else if (c_strcasecmp(name, "min-verification-profile")==0) { + gnutls_certificate_verification_profiles_t profile; + profile = gnutls_certificate_verification_profile_get_id(value); + + if (profile == GNUTLS_PROFILE_UNKNOWN) { + _gnutls_debug_log("cfg: found unknown profile %s in %s\n", + value, name); + if (fail_on_invalid_config) + return 0; + } + + system_wide_verification_profile = profile; + } else if (c_strcasecmp(name, "tls-disabled-cipher")==0) { + unsigned algo; - if (n > 1 && p[n-1] == '\r') { - n--; - p[n] = 0; + p = clear_spaces(value, str); + + _gnutls_debug_log("cfg: disabling cipher %s for TLS\n", + p); + + + algo = gnutls_cipher_get_id(p); + if (algo == 0) { + _gnutls_debug_log("cfg: unknown algorithm %s listed at %s\n", + p, name); + if (fail_on_invalid_config) + return 0; + } + + i = 0; + while (system_wide_disabled_ciphers[i] != 0) + i++; + + if (i > MAX_ALGOS-1) { + _gnutls_debug_log("cfg: too many (%d) disabled ciphers from %s\n", + i, name); + if (fail_on_invalid_config) + return 0; + goto exit; + } + system_wide_disabled_ciphers[i] = algo; + system_wide_disabled_ciphers[i+1] = 0; + + } else if (c_strcasecmp(name, "tls-disabled-mac")==0) { + unsigned algo; + + p = clear_spaces(value, str); + + _gnutls_debug_log("cfg: disabling MAC %s for TLS\n", + p); + + algo = gnutls_mac_get_id(p); + if (algo == 0) { + _gnutls_debug_log("cfg: unknown algorithm %s listed at %s\n", + p, name); + if (fail_on_invalid_config) + return 0; + goto exit; + } + + i = 0; + while (system_wide_disabled_macs[i] != 0) + i++; + + if (i > MAX_ALGOS-1) { + _gnutls_debug_log("cfg: too many (%d) disabled MACs from %s\n", + i, name); + if (fail_on_invalid_config) + return 0; + goto exit; + } + system_wide_disabled_macs[i] = algo; + system_wide_disabled_macs[i+1] = 0; + } else if (c_strcasecmp(name, "tls-disabled-group")==0) { + unsigned algo; + + p = clear_spaces(value, str); + + if (strlen(p) > 6) + p += 6; // skip GROUP- + + _gnutls_debug_log("cfg: disabling group %s for TLS\n", + p); + + algo = gnutls_group_get_id(p); + if (algo == 0) { + _gnutls_debug_log("cfg: unknown group %s listed at %s\n", + p, name); + if (fail_on_invalid_config) + return 0; + goto exit; + } + + i = 0; + while (system_wide_disabled_groups[i] != 0) + i++; + + if (i > MAX_ALGOS-1) { + _gnutls_debug_log("cfg: too many (%d) disabled groups from %s\n", + i, name); + if (fail_on_invalid_config) + return 0; + goto exit; + } + system_wide_disabled_groups[i] = algo; + system_wide_disabled_groups[i+1] = 0; + } else if (c_strcasecmp(name, "tls-disabled-kx")==0) { + unsigned algo; + + p = clear_spaces(value, str); + + _gnutls_debug_log("cfg: disabling key exchange %s for TLS\n", + p); + + algo = gnutls_kx_get_id(p); + if (algo == 0) { + _gnutls_debug_log("cfg: unknown key exchange %s listed at %s\n", + p, name); + if (fail_on_invalid_config) + return 0; + goto exit; + } + + i = 0; + while (system_wide_disabled_kxs[i] != 0) + i++; + + if (i > MAX_ALGOS-1) { + _gnutls_debug_log("cfg: too many (%d) disabled key exchanges from %s\n", + i, name); + if (fail_on_invalid_config) + return 0; + goto exit; + } + system_wide_disabled_kxs[i] = algo; + system_wide_disabled_kxs[i+1] = 0; + } else { + _gnutls_debug_log("unknown parameter %s\n", name); + if (fail_on_invalid_config) + return 0; } - return p; + } else { + _gnutls_debug_log("cfg: unknown section %s\n", + section); + if (fail_on_invalid_config) + return 0; } - return NULL; + exit: + return 1; } -static const char *system_priority_file = SYSTEM_PRIORITY_FILE; -static char *system_priority_buf = NULL; -static size_t system_priority_buf_size = 0; -static time_t system_priority_last_mod = 0; - - static void _gnutls_update_system_priorities(void) { -#ifdef HAVE_FMEMOPEN - gnutls_datum_t data; int ret; struct stat sb; if (stat(system_priority_file, &sb) < 0) { - _gnutls_debug_log("unable to access: %s: %d\n", + _gnutls_debug_log("cfg: unable to access: %s: %d\n", system_priority_file, errno); return; } - if (system_priority_buf != NULL && + if (system_wide_priority_strings_init != 0 && sb.st_mtime == system_priority_last_mod) { - _gnutls_debug_log("system priority %s has not changed\n", + _gnutls_debug_log("cfg: system priority %s has not changed\n", system_priority_file); return; } - ret = gnutls_load_file(system_priority_file, &data); - if (ret < 0) { - _gnutls_debug_log("unable to load: %s: %d\n", + if (system_wide_priority_strings_init != 0) + _name_val_array_clear(&system_wide_priority_strings); + + ret = ini_parse(system_priority_file, cfg_ini_handler, NULL); + if (ret != 0) { + _gnutls_debug_log("cfg: unable to parse: %s: %d\n", system_priority_file, ret); + if (fail_on_invalid_config) + exit(1); return; } - _gnutls_debug_log("cached system priority %s mtime %lld\n", + _gnutls_debug_log("cfg: loaded system priority %s mtime %lld\n", system_priority_file, (unsigned long long)sb.st_mtime); - gnutls_free(system_priority_buf); - system_priority_buf = (char*)data.data; - system_priority_buf_size = data.size; + system_priority_last_mod = sb.st_mtime; -#endif } void _gnutls_load_system_priorities(void) @@ -982,36 +1345,56 @@ void _gnutls_load_system_priorities(void) if (p != NULL) system_priority_file = p; + p = secure_getenv("GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID"); + if (p != NULL && p[0] == '1' && p[1] == 0) + fail_on_invalid_config = 1; + _gnutls_update_system_priorities(); } void _gnutls_unload_system_priorities(void) { -#ifdef HAVE_FMEMOPEN - gnutls_free(system_priority_buf); -#endif - system_priority_buf = NULL; - system_priority_buf_size = 0; + _name_val_array_clear(&system_wide_priority_strings); + _clear_default_system_priority(); system_priority_last_mod = 0; } +/** + * gnutls_get_system_config_file: + * + * Returns the filename of the system wide configuration + * file loaded by the library. The returned pointer is valid + * until the library is unloaded. + * + * Returns: a constant pointer to the config file loaded, or %NULL if none + * + * Since: 3.6.9 + **/ +const char *gnutls_get_system_config_file(void) +{ + if (system_wide_priority_strings_init) + return system_priority_file; + else + return NULL; +} + +#define S(str) ((str!=NULL)?str:"") + /* Returns the new priorities if a priority string prefixed * with '@' is provided, or just a copy of the provided * priorities, appended with any additional present in * the priorities string. * - * The returned string must be released using free(). + * The returned string must be released using gnutls_free(). */ char *_gnutls_resolve_priorities(const char* priorities) { -char *p = (char*)priorities; -char *additional = NULL; -char *ret = NULL; -char *ss, *ss_next, *line = NULL; -unsigned ss_len, ss_next_len; -int l; -FILE* fp = NULL; -size_t n, n2 = 0, line_size; + const char *p = priorities; + char *additional = NULL; + char *ret = NULL; + const char *ss, *ss_next; + unsigned ss_len, ss_next_len; + size_t n, n2 = 0; while (c_isspace(*p)) p++; @@ -1043,35 +1426,17 @@ size_t n, n2 = 0, line_size; ss_next_len = 0; } -#ifdef HAVE_FMEMOPEN /* Always try to refresh the cached data, to * allow it to be updated without restarting * all applications */ _gnutls_update_system_priorities(); - fp = fmemopen(system_priority_buf, system_priority_buf_size, "r"); -#else - fp = fopen(system_priority_file, "r"); -#endif - if (fp == NULL) {/* fail */ - ret = NULL; - goto finish; - } - do { - l = getline(&line, &line_size, fp); - if (l > 0) { - p = check_str(line, line_size, ss, ss_len); - if (p != NULL) - break; - } - } while (l>0); + p = _name_val_array_value(system_wide_priority_strings, ss, ss_len); _gnutls_debug_log("resolved '%.*s' to '%s', next '%.*s'\n", - ss_len, ss, p ? : "", ss_next_len, ss_next ? : ""); + ss_len, ss, S(p), ss_next_len, S(ss_next)); ss = ss_next; - fclose(fp); - fp = NULL; } while (ss && p == NULL); if (p == NULL) { @@ -1084,7 +1449,7 @@ size_t n, n2 = 0, line_size; if (additional) n2 = strlen(additional); - ret = malloc(n+n2+1+1); + ret = gnutls_malloc(n+n2+1+1); if (ret == NULL) { goto finish; } @@ -1098,28 +1463,343 @@ size_t n, n2 = 0, line_size; ret[n] = 0; } } else { - return strdup(p); + return gnutls_strdup(p); } finish: if (ret != NULL) { _gnutls_debug_log("selected priority string: %s\n", ret); } - free(line); - if (fp != NULL) - fclose(fp); return ret; } +static void add_ec(gnutls_priority_t priority_cache) +{ + const gnutls_group_entry_st *ge; + unsigned i; + + for (i = 0; i < priority_cache->_supported_ecc.num_priorities; i++) { + ge = _gnutls_id_to_group(priority_cache->_supported_ecc.priorities[i]); + if (ge != NULL && priority_cache->groups.size < sizeof(priority_cache->groups.entry)/sizeof(priority_cache->groups.entry[0])) { + /* do not add groups which do not correspond to enabled ciphersuites */ + if (!ge->curve) + continue; + priority_cache->groups.entry[priority_cache->groups.size++] = ge; + } + } +} + +static void add_dh(gnutls_priority_t priority_cache) +{ + const gnutls_group_entry_st *ge; + unsigned i; + + for (i = 0; i < priority_cache->_supported_ecc.num_priorities; i++) { + ge = _gnutls_id_to_group(priority_cache->_supported_ecc.priorities[i]); + if (ge != NULL && priority_cache->groups.size < sizeof(priority_cache->groups.entry)/sizeof(priority_cache->groups.entry[0])) { + /* do not add groups which do not correspond to enabled ciphersuites */ + if (!ge->prime) + continue; + priority_cache->groups.entry[priority_cache->groups.size++] = ge; + priority_cache->groups.have_ffdhe = 1; + } + } +} + +/* This function was originally precalculating ciphersuite-specific items, however + * it has now extended to much more than that. It provides a consistency check to + * set parameters, and in cases it applies policy specific items. + */ +static int set_ciphersuite_list(gnutls_priority_t priority_cache) +{ + unsigned i, j, z; + const gnutls_cipher_suite_entry_st *ce; + const gnutls_sign_entry_st *se; + unsigned have_ec = 0; + unsigned have_dh = 0; + unsigned tls_sig_sem = 0; + const version_entry_st *tlsmax = NULL, *vers; + const version_entry_st *dtlsmax = NULL; + const version_entry_st *tlsmin = NULL; + const version_entry_st *dtlsmin = NULL; + unsigned have_tls13 = 0, have_srp = 0; + unsigned have_pre_tls12 = 0, have_tls12 = 0; + unsigned have_psk = 0, have_null = 0, have_rsa_psk = 0; + + /* have_psk indicates that a PSK key exchange compatible + * with TLS1.3 is enabled. */ + + priority_cache->cs.size = 0; + priority_cache->sigalg.size = 0; + priority_cache->groups.size = 0; + priority_cache->groups.have_ffdhe = 0; + + /* disable key exchanges which are globally disabled */ + z = 0; + while (system_wide_disabled_kxs[z] != 0) { + for (i = j = 0; i < priority_cache->_kx.num_priorities; i++) { + if (priority_cache->_kx.priorities[i] != system_wide_disabled_kxs[z]) + priority_cache->_kx.priorities[j++] = priority_cache->_kx.priorities[i]; + } + priority_cache->_kx.num_priorities = j; + z++; + } + + /* disable groups which are globally disabled */ + z = 0; + while (system_wide_disabled_groups[z] != 0) { + for (i = j = 0; i < priority_cache->_supported_ecc.num_priorities; i++) { + if (priority_cache->_supported_ecc.priorities[i] != system_wide_disabled_groups[z]) + priority_cache->_supported_ecc.priorities[j++] = priority_cache->_supported_ecc.priorities[i]; + } + priority_cache->_supported_ecc.num_priorities = j; + z++; + } + + /* disable ciphers which are globally disabled */ + z = 0; + while (system_wide_disabled_ciphers[z] != 0) { + for (i = j = 0; i < priority_cache->_cipher.num_priorities; i++) { + if (priority_cache->_cipher.priorities[i] != system_wide_disabled_ciphers[z]) + priority_cache->_cipher.priorities[j++] = priority_cache->_cipher.priorities[i]; + } + priority_cache->_cipher.num_priorities = j; + z++; + } + + /* disable MACs which are globally disabled */ + z = 0; + while (system_wide_disabled_macs[z] != 0) { + for (i = j = 0; i < priority_cache->_mac.num_priorities; i++) { + if (priority_cache->_mac.priorities[i] != system_wide_disabled_macs[z]) + priority_cache->_mac.priorities[j++] = priority_cache->_mac.priorities[i]; + } + priority_cache->_mac.num_priorities = j; + z++; + } + + for (j=0;j_cipher.num_priorities;j++) { + if (priority_cache->_cipher.priorities[j] == GNUTLS_CIPHER_NULL) { + have_null = 1; + break; + } + } + + for (i = 0; i < priority_cache->_kx.num_priorities; i++) { + if (IS_SRP_KX(priority_cache->_kx.priorities[i])) { + have_srp = 1; + } else if (_gnutls_kx_is_psk(priority_cache->_kx.priorities[i])) { + if (priority_cache->_kx.priorities[i] == GNUTLS_KX_RSA_PSK) + have_rsa_psk = 1; + else + have_psk = 1; + } + } + + /* disable TLS versions which are added but are unsupported */ + for (i = j = 0; i < priority_cache->protocol.num_priorities; i++) { + vers = version_to_entry(priority_cache->protocol.priorities[i]); + if (!vers || vers->supported) + priority_cache->protocol.priorities[j++] = priority_cache->protocol.priorities[i]; + } + priority_cache->protocol.num_priorities = j; + + + /* if we have NULL ciphersuites, SRP, or RSA-PSK enabled remove TLS1.3+ + * protocol versions; they cannot be negotiated under TLS1.3. */ + if (have_null || have_srp || have_rsa_psk || priority_cache->no_extensions) { + for (i = j = 0; i < priority_cache->protocol.num_priorities; i++) { + vers = version_to_entry(priority_cache->protocol.priorities[i]); + if (!vers || !vers->tls13_sem) + priority_cache->protocol.priorities[j++] = priority_cache->protocol.priorities[i]; + } + priority_cache->protocol.num_priorities = j; + } + + for (i = 0; i < priority_cache->protocol.num_priorities; i++) { + vers = version_to_entry(priority_cache->protocol.priorities[i]); + if (!vers) + continue; + + if (vers->transport == GNUTLS_STREAM) { /* TLS */ + tls_sig_sem |= vers->tls_sig_sem; + if (vers->tls13_sem) + have_tls13 = 1; + + if (vers->id == GNUTLS_TLS1_2) + have_tls12 = 1; + else if (vers->id < GNUTLS_TLS1_2) + have_pre_tls12 = 1; + + if (tlsmax == NULL || vers->age > tlsmax->age) + tlsmax = vers; + if (tlsmin == NULL || vers->age < tlsmin->age) + tlsmin = vers; + } else { /* dtls */ + tls_sig_sem |= vers->tls_sig_sem; + + /* we need to introduce similar handling to above + * when DTLS1.3 is supported */ + + if (dtlsmax == NULL || vers->age > dtlsmax->age) + dtlsmax = vers; + if (dtlsmin == NULL || vers->age < dtlsmin->age) + dtlsmin = vers; + } + } + + /* DTLS or TLS protocols must be present */ + if ((!tlsmax || !tlsmin) && (!dtlsmax || !dtlsmin)) + return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET); + + + priority_cache->have_psk = have_psk; + + /* if we are have TLS1.3+ do not enable any key exchange algorithms, + * the protocol doesn't require any. */ + if (tlsmin && tlsmin->tls13_sem && !have_psk) { + if (!dtlsmin || (dtlsmin && dtlsmin->tls13_sem)) + priority_cache->_kx.num_priorities = 0; + } + + /* Add TLS 1.3 ciphersuites (no KX) */ + for (j=0;j_cipher.num_priorities;j++) { + for (z=0;z_mac.num_priorities;z++) { + ce = cipher_suite_get( + 0, priority_cache->_cipher.priorities[j], + priority_cache->_mac.priorities[z]); + + if (ce != NULL && priority_cache->cs.size < MAX_CIPHERSUITE_SIZE) { + priority_cache->cs.entry[priority_cache->cs.size++] = ce; + } + } + } + + for (i = 0; i < priority_cache->_kx.num_priorities; i++) { + for (j=0;j_cipher.num_priorities;j++) { + for (z=0;z_mac.num_priorities;z++) { + ce = cipher_suite_get( + priority_cache->_kx.priorities[i], + priority_cache->_cipher.priorities[j], + priority_cache->_mac.priorities[z]); + + if (ce != NULL && priority_cache->cs.size < MAX_CIPHERSUITE_SIZE) { + priority_cache->cs.entry[priority_cache->cs.size++] = ce; + if (!have_ec && (_gnutls_kx_is_ecc(ce->kx_algorithm) || + _gnutls_kx_is_vko_gost(ce->kx_algorithm))) { + have_ec = 1; + add_ec(priority_cache); + } + if (!have_dh && _gnutls_kx_is_dhe(ce->kx_algorithm)) { + have_dh = 1; + add_dh(priority_cache); + } + } + } + } + } + + if (have_tls13 && (!have_ec || !have_dh)) { + /* scan groups to determine have_ec and have_dh */ + for (i=0; i < priority_cache->_supported_ecc.num_priorities; i++) { + const gnutls_group_entry_st *ge; + ge = _gnutls_id_to_group(priority_cache->_supported_ecc.priorities[i]); + if (ge) { + if (ge->curve && !have_ec) { + add_ec(priority_cache); + have_ec = 1; + } else if (ge->prime && !have_dh) { + add_dh(priority_cache); + have_dh = 1; + } + + if (have_dh && have_ec) + break; + } + } + + } + + for (i = 0; i < priority_cache->_sign_algo.num_priorities; i++) { + se = _gnutls_sign_to_entry(priority_cache->_sign_algo.priorities[i]); + if (se != NULL && priority_cache->sigalg.size < sizeof(priority_cache->sigalg.entry)/sizeof(priority_cache->sigalg.entry[0])) { + /* if the signature algorithm semantics are not compatible with + * the protocol's, then skip. */ + if ((se->aid.tls_sem & tls_sig_sem) == 0) + continue; + priority_cache->sigalg.entry[priority_cache->sigalg.size++] = se; + } + } + + _gnutls_debug_log("added %d protocols, %d ciphersuites, %d sig algos and %d groups into priority list\n", + priority_cache->protocol.num_priorities, + priority_cache->cs.size, priority_cache->sigalg.size, + priority_cache->groups.size); + + if (priority_cache->sigalg.size == 0) { + /* no signature algorithms; eliminate TLS 1.2 or DTLS 1.2 and later */ + priority_st newp; + newp.num_priorities = 0; + + /* we need to eliminate TLS 1.2 or DTLS 1.2 and later protocols */ + for (i = 0; i < priority_cache->protocol.num_priorities; i++) { + if (priority_cache->protocol.priorities[i] < GNUTLS_TLS1_2) { + newp.priorities[newp.num_priorities++] = priority_cache->protocol.priorities[i]; + } else if (priority_cache->protocol.priorities[i] >= GNUTLS_DTLS_VERSION_MIN && + priority_cache->protocol.priorities[i] < GNUTLS_DTLS1_2) { + newp.priorities[newp.num_priorities++] = priority_cache->protocol.priorities[i]; + } + } + memcpy(&priority_cache->protocol, &newp, sizeof(newp)); + } + + if (unlikely(priority_cache->protocol.num_priorities == 0)) + return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET); +#ifndef ENABLE_SSL3 + else if (unlikely(priority_cache->protocol.num_priorities == 1 && priority_cache->protocol.priorities[0] == GNUTLS_SSL3)) + return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET); +#endif + + if (unlikely(priority_cache->cs.size == 0)) + return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET); + + /* when TLS 1.3 is available we must have groups set; additionally + * we require TLS1.2 to be enabled if TLS1.3 is asked for, and + * a pre-TLS1.2 protocol is there; that is because servers which + * do not support TLS1.3 will negotiate TLS1.2 if seen a TLS1.3 handshake */ + if (unlikely((!have_psk && tlsmax && tlsmax->id >= GNUTLS_TLS1_3 && priority_cache->groups.size == 0)) || + (!have_tls12 && have_pre_tls12 && have_tls13)) { + for (i = j = 0; i < priority_cache->protocol.num_priorities; i++) { + vers = version_to_entry(priority_cache->protocol.priorities[i]); + if (!vers || vers->transport != GNUTLS_STREAM || !vers->tls13_sem) + priority_cache->protocol.priorities[j++] = priority_cache->protocol.priorities[i]; + } + priority_cache->protocol.num_priorities = j; + } + + /* ensure that the verification profile is not lower from the configured */ + if (system_wide_verification_profile) { + gnutls_sec_param_t level = priority_cache->level; + gnutls_sec_param_t system_wide_level = _gnutls_profile_to_sec_level(system_wide_verification_profile); + + if (level < system_wide_level) { + ENABLE_PROFILE(priority_cache, system_wide_verification_profile); + } + } + + return 0; +} + /** - * gnutls_priority_init: + * gnutls_priority_init2: * @priority_cache: is a #gnutls_prioritity_t type. * @priorities: is a string describing priorities (may be %NULL) * @err_pos: In case of an error this will have the position in the string the error occurred + * @flags: zero or %GNUTLS_PRIORITY_INIT_DEF_APPEND * - * Sets priorities for the ciphers, key exchange methods, macs and - * compression methods. The @priority_cache should be deinitialized + * Sets priorities for the ciphers, key exchange methods, and macs. + * The @priority_cache should be deinitialized * using gnutls_priority_deinit(). * * The #priorities option allows you to specify a colon @@ -1127,6 +1807,9 @@ size_t n, n2 = 0, line_size; * Some keywords are defined to provide quick access * to common preferences. * + * When @flags is set to %GNUTLS_PRIORITY_INIT_DEF_APPEND then the @priorities + * specified will be appended to the default options. + * * Unless there is a special need, use the "NORMAL" keyword to * apply a reasonable security level, or "NORMAL:%%COMPAT" for compatibility. * @@ -1142,8 +1825,8 @@ size_t n, n2 = 0, line_size; * included as a fallback only. The ciphers are sorted by security * margin. * - * "PFS" means all "secure" ciphersuites that support perfect forward secrecy. - * The 256-bit ciphers are included as a fallback only. + * "PFS" means all "secure" ciphersuites that support perfect forward secrecy. + * The 256-bit ciphers are included as a fallback only. * The ciphers are sorted by security margin. * * "SECURE128" means all "secure" ciphersuites of security level 128-bit @@ -1158,12 +1841,11 @@ size_t n, n2 = 0, line_size; * "SUITEB192" means all the NSA SuiteB ciphersuites with security level * of 192. * - * "NONE" means nothing is enabled. This disables even protocols and - * compression methods. + * "NONE" means nothing is enabled. This disables everything, including protocols. * * "@@KEYWORD1,KEYWORD2,..." The system administrator imposed settings. * The provided keyword(s) will be expanded from a configuration-time - * provided file - default is: /etc/gnutls/default-priorities. + * provided file - default is: /etc/gnutls/config. * Any attributes that follow it, will be appended to the expanded * string. If multiple keywords are provided, separated by commas, * then the first keyword that exists in the configuration file @@ -1191,12 +1873,12 @@ size_t n, n2 = 0, line_size; * * "NORMAL:+ARCFOUR-128" means normal ciphers plus ARCFOUR-128. * - * "SECURE128:-VERS-SSL3.0:+COMP-DEFLATE" means that only secure ciphers are - * enabled, SSL3.0 is disabled, and libz compression enabled. + * "SECURE128:-VERS-SSL3.0" means that only secure ciphers are + * and enabled, SSL3.0 is disabled. * - * "NONE:+VERS-TLS-ALL:+AES-128-CBC:+RSA:+SHA1:+COMP-NULL:+SIGN-RSA-SHA1", + * "NONE:+VERS-TLS-ALL:+AES-128-CBC:+RSA:+SHA1:+COMP-NULL:+SIGN-RSA-SHA1", * - * "NONE:+VERS-TLS-ALL:+AES-128-CBC:+ECDHE-RSA:+SHA1:+COMP-NULL:+SIGN-RSA-SHA1:+CURVE-SECP256R1", + * "NONE:+VERS-TLS-ALL:+AES-128-CBC:+ECDHE-RSA:+SHA1:+COMP-NULL:+SIGN-RSA-SHA1:+CURVE-SECP256R1", * * "SECURE256:+SECURE128", * @@ -1207,6 +1889,82 @@ size_t n, n2 = 0, line_size; * * Returns: On syntax error %GNUTLS_E_INVALID_REQUEST is returned, * %GNUTLS_E_SUCCESS on success, or an error code. + * + * Since: 3.6.3 + **/ +int +gnutls_priority_init2(gnutls_priority_t * priority_cache, + const char *priorities, const char **err_pos, + unsigned flags) +{ + gnutls_buffer_st buf; + const char *ep; + int ret; + + if (flags & GNUTLS_PRIORITY_INIT_DEF_APPEND) { + if (priorities == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (err_pos) + *err_pos = priorities; + + _gnutls_buffer_init(&buf); + + ret = _gnutls_buffer_append_str(&buf, _gnutls_default_priority_string); + if (ret < 0) { + _gnutls_buffer_clear(&buf); + return gnutls_assert_val(ret); + } + + ret = _gnutls_buffer_append_str(&buf, ":"); + if (ret < 0) { + _gnutls_buffer_clear(&buf); + return gnutls_assert_val(ret); + } + + ret = _gnutls_buffer_append_str(&buf, priorities); + if (ret < 0) { + _gnutls_buffer_clear(&buf); + return gnutls_assert_val(ret); + } + + ret = gnutls_priority_init(priority_cache, (const char*)buf.data, &ep); + if (ret < 0 && ep != (const char*)buf.data && ep != NULL) { + ptrdiff_t diff = (ptrdiff_t)ep-(ptrdiff_t)buf.data; + unsigned hlen = strlen(_gnutls_default_priority_string)+1; + + if (err_pos && diff > hlen) { + *err_pos = priorities + diff - hlen; + } + } + _gnutls_buffer_clear(&buf); + return ret; + } else { + return gnutls_priority_init(priority_cache, priorities, err_pos); + } +} + +#define PRIO_MATCH(name) c_strncasecmp(&broken_list[i][1], name, sizeof(name) - 1) + +/** + * gnutls_priority_init: + * @priority_cache: is a #gnutls_prioritity_t type. + * @priorities: is a string describing priorities (may be %NULL) + * @err_pos: In case of an error this will have the position in the string the error occurred + * + * For applications that do not modify their crypto settings per release, consider + * using gnutls_priority_init2() with %GNUTLS_PRIORITY_INIT_DEF_APPEND flag + * instead. We suggest to use centralized crypto settings handled by the GnuTLS + * library, and applications modifying the default settings to their needs. + * + * This function is identical to gnutls_priority_init2() with zero + * flags. + * + * A %NULL @priorities string indicates the default priorities to be + * used (this is available since GnuTLS 3.3.0). + * + * Returns: On syntax error %GNUTLS_E_INVALID_REQUEST is returned, + * %GNUTLS_E_SUCCESS on success, or an error code. **/ int gnutls_priority_init(gnutls_priority_t * priority_cache, @@ -1217,10 +1975,12 @@ gnutls_priority_init(gnutls_priority_t * priority_cache, char *darg = NULL; unsigned ikeyword_set = 0; int algo; + int ret; rmadd_func *fn; bulk_rmadd_func *bulk_fn; bulk_rmadd_func *bulk_given_fn; const cipher_entry_st *centry; + unsigned resolved_match = 1; if (err_pos) *err_pos = priorities; @@ -1237,9 +1997,12 @@ gnutls_priority_init(gnutls_priority_t * priority_cache, */ (*priority_cache)->sr = SR_PARTIAL; (*priority_cache)->min_record_version = 1; + gnutls_atomic_init(&(*priority_cache)->usage_cnt); - if (priorities == NULL) - priorities = DEFAULT_PRIORITY_STRING; + if (priorities == NULL) { + priorities = _gnutls_default_priority_string; + resolved_match = 0; + } darg = _gnutls_resolve_priorities(priorities); if (darg == NULL) { @@ -1247,21 +2010,23 @@ gnutls_priority_init(gnutls_priority_t * priority_cache, goto error; } + if (strcmp(darg, priorities) != 0) + resolved_match = 0; + break_list(darg, broken_list, &broken_list_size); - /* This is our default set of protocol version, certificate types and - * compression methods. + /* This is our default set of protocol version, certificate types. */ - if (strcasecmp(broken_list[0], LEVEL_NONE) != 0) { + if (c_strcasecmp(broken_list[0], LEVEL_NONE) != 0) { _set_priority(&(*priority_cache)->protocol, protocol_priority); - _set_priority(&(*priority_cache)->compression, - comp_priority); - _set_priority(&(*priority_cache)->cert_type, + _set_priority(&(*priority_cache)->client_ctype, cert_type_priority_default); - _set_priority(&(*priority_cache)->sign_algo, + _set_priority(&(*priority_cache)->server_ctype, + cert_type_priority_default); + _set_priority(&(*priority_cache)->_sign_algo, sign_priority_default); - _set_priority(&(*priority_cache)->supported_ecc, - supported_ecc_normal); + _set_priority(&(*priority_cache)->_supported_ecc, + supported_groups_normal); i = 0; } else { ikeyword_set = 1; @@ -1292,10 +2057,10 @@ gnutls_priority_init(gnutls_priority_t * priority_cache, } else if ((algo = gnutls_mac_get_id(&broken_list[i][1])) != GNUTLS_MAC_UNKNOWN) { - fn(&(*priority_cache)->mac, algo); + fn(&(*priority_cache)->_mac, algo); } else if ((centry = cipher_name_to_entry(&broken_list[i][1])) != NULL) { if (_gnutls_cipher_exists(centry->id)) { - fn(&(*priority_cache)->cipher, centry->id); + fn(&(*priority_cache)->_cipher, centry->id); if (centry->type == CIPHER_BLOCK) (*priority_cache)->have_cbc = 1; } @@ -1303,24 +2068,17 @@ gnutls_priority_init(gnutls_priority_t * priority_cache, _gnutls_kx_get_id(&broken_list[i][1])) != GNUTLS_KX_UNKNOWN) { if (algo != GNUTLS_KX_INVALID) - fn(&(*priority_cache)->kx, algo); - } else if (strncasecmp - (&broken_list[i][1], "VERS-", 5) == 0) { - if (strncasecmp - (&broken_list[i][1], "VERS-TLS-ALL", - 12) == 0) { + fn(&(*priority_cache)->_kx, algo); + } else if (PRIO_MATCH("VERS-") == 0) { + if (PRIO_MATCH("VERS-TLS-ALL") == 0) { bulk_given_fn(&(*priority_cache)-> protocol, stream_protocol_priority); - } else if (strncasecmp - (&broken_list[i][1], - "VERS-DTLS-ALL", 13) == 0) { + } else if (PRIO_MATCH("VERS-DTLS-ALL") == 0) { bulk_given_fn(&(*priority_cache)-> protocol, (bulk_given_fn==_add_priority)?dtls_protocol_priority:dgram_protocol_priority); - } else if (strncasecmp - (&broken_list[i][1], - "VERS-ALL", 8) == 0) { + } else if (PRIO_MATCH("VERS-ALL") == 0) { bulk_fn(&(*priority_cache)-> protocol, protocol_priority); @@ -1328,105 +2086,154 @@ gnutls_priority_init(gnutls_priority_t * priority_cache, if ((algo = gnutls_protocol_get_id (&broken_list[i][6])) != - GNUTLS_VERSION_UNKNOWN) + GNUTLS_VERSION_UNKNOWN) { fn(&(*priority_cache)-> protocol, algo); - else + } else goto error; } } /* now check if the element is something like -ALGO */ - else if (strncasecmp - (&broken_list[i][1], "COMP-", 5) == 0) { - if (strncasecmp - (&broken_list[i][1], "COMP-ALL", - 8) == 0) { - bulk_fn(&(*priority_cache)-> - compression, - comp_priority); - } else { - if ((algo = - gnutls_compression_get_id - (&broken_list[i][6])) != - GNUTLS_COMP_UNKNOWN) - fn(&(*priority_cache)-> - compression, algo); - else - goto error; - } + else if (PRIO_MATCH("COMP-") == 0) { + /* ignore all compression methods */ + continue; } /* now check if the element is something like -ALGO */ - else if (strncasecmp - (&broken_list[i][1], "CURVE-", 6) == 0) { - if (strncasecmp - (&broken_list[i][1], "CURVE-ALL", - 9) == 0) { + else if (PRIO_MATCH("CURVE-") == 0) { + if (PRIO_MATCH("CURVE-ALL") == 0) { bulk_fn(&(*priority_cache)-> - supported_ecc, - supported_ecc_normal); + _supported_ecc, + supported_groups_normal); } else { if ((algo = gnutls_ecc_curve_get_id (&broken_list[i][7])) != GNUTLS_ECC_CURVE_INVALID) fn(&(*priority_cache)-> - supported_ecc, algo); + _supported_ecc, algo); else goto error; } - } /* now check if the element is something like -ALGO */ - else if (strncasecmp - (&broken_list[i][1], "CTYPE-", 6) == 0) { - if (strncasecmp - (&broken_list[i][1], "CTYPE-ALL", - 9) == 0) { + } else if (PRIO_MATCH("GROUP-") == 0) { + if (PRIO_MATCH("GROUP-ALL") == 0) { bulk_fn(&(*priority_cache)-> - cert_type, - cert_type_priority_all); + _supported_ecc, + supported_groups_normal); + } else if (PRIO_MATCH("GROUP-DH-ALL") == 0) { + bulk_given_fn(&(*priority_cache)-> + _supported_ecc, + _supported_groups_dh); + } else if (PRIO_MATCH("GROUP-EC-ALL") == 0) { + bulk_given_fn(&(*priority_cache)-> + _supported_ecc, + _supported_groups_ecdh); + } else if (PRIO_MATCH("GROUP-GOST-ALL") == 0) { + bulk_given_fn(&(*priority_cache)-> + _supported_ecc, + _supported_groups_gost); } else { if ((algo = - gnutls_certificate_type_get_id + gnutls_group_get_id (&broken_list[i][7])) != - GNUTLS_CRT_UNKNOWN) + GNUTLS_GROUP_INVALID) fn(&(*priority_cache)-> - cert_type, algo); + _supported_ecc, algo); else goto error; } - } /* now check if the element is something like -ALGO */ - else if (strncasecmp - (&broken_list[i][1], "SIGN-", 5) == 0) { - if (strncasecmp - (&broken_list[i][1], "SIGN-ALL", - 8) == 0) { + } else if (PRIO_MATCH("CTYPE-") == 0) { + // Certificate types + if (PRIO_MATCH("CTYPE-ALL") == 0) { + // Symmetric cert types, all types allowed + bulk_fn(&(*priority_cache)->client_ctype, + cert_type_priority_all); + bulk_fn(&(*priority_cache)->server_ctype, + cert_type_priority_all); + } else if (PRIO_MATCH("CTYPE-CLI-") == 0) { + // Client certificate types + if (PRIO_MATCH("CTYPE-CLI-ALL") == 0) { + // All client cert types allowed + bulk_fn(&(*priority_cache)->client_ctype, + cert_type_priority_all); + } else if ((algo = gnutls_certificate_type_get_id + (&broken_list[i][11])) != GNUTLS_CRT_UNKNOWN) { + // Specific client cert type allowed + fn(&(*priority_cache)->client_ctype, algo); + } else goto error; + } else if (PRIO_MATCH("CTYPE-SRV-") == 0) { + // Server certificate types + if (PRIO_MATCH("CTYPE-SRV-ALL") == 0) { + // All server cert types allowed + bulk_fn(&(*priority_cache)->server_ctype, + cert_type_priority_all); + } else if ((algo = gnutls_certificate_type_get_id + (&broken_list[i][11])) != GNUTLS_CRT_UNKNOWN) { + // Specific server cert type allowed + fn(&(*priority_cache)->server_ctype, algo); + } else goto error; + } else { // Symmetric certificate type + if ((algo = gnutls_certificate_type_get_id + (&broken_list[i][7])) != GNUTLS_CRT_UNKNOWN) { + fn(&(*priority_cache)->client_ctype, algo); + fn(&(*priority_cache)->server_ctype, algo); + } else if (PRIO_MATCH("CTYPE-OPENPGP") == 0) { + /* legacy openpgp option - ignore */ + continue; + } else goto error; + } + } else if (PRIO_MATCH("SIGN-") == 0) { + if (PRIO_MATCH("SIGN-ALL") == 0) { bulk_fn(&(*priority_cache)-> - sign_algo, + _sign_algo, sign_priority_default); + } else if (PRIO_MATCH("SIGN-GOST-ALL") == 0) { + bulk_fn(&(*priority_cache)-> + _sign_algo, + sign_priority_gost); } else { if ((algo = gnutls_sign_get_id (&broken_list[i][6])) != GNUTLS_SIGN_UNKNOWN) fn(&(*priority_cache)-> - sign_algo, algo); + _sign_algo, algo); else goto error; } - } else - if (strncasecmp - (&broken_list[i][1], "MAC-ALL", 7) == 0) { - bulk_fn(&(*priority_cache)->mac, - mac_priority_normal); - } else - if (strncasecmp - (&broken_list[i][1], "CIPHER-ALL", - 10) == 0) { - bulk_fn(&(*priority_cache)->cipher, - cipher_priority_normal); - } else - if (strncasecmp - (&broken_list[i][1], "KX-ALL", 6) == 0) { - bulk_fn(&(*priority_cache)->kx, - kx_priority_secure); + } else if (PRIO_MATCH("MAC-") == 0) { + if (PRIO_MATCH("MAC-ALL") == 0) { + bulk_fn(&(*priority_cache)->_mac, + mac_priority_normal); + } else if (PRIO_MATCH("MAC-GOST-ALL") == 0) { + bulk_fn(&(*priority_cache)->_mac, + mac_priority_gost); + } + } else if (PRIO_MATCH("CIPHER-") == 0) { + if (PRIO_MATCH("CIPHER-ALL") == 0) { + bulk_fn(&(*priority_cache)->_cipher, + cipher_priority_normal); + } else if (PRIO_MATCH("CIPHER-GOST-ALL") == 0) { + bulk_fn(&(*priority_cache)->_cipher, + cipher_priority_gost); + } + } else if (PRIO_MATCH("KX-") == 0) { + if (PRIO_MATCH("KX-ALL") == 0) { + bulk_fn(&(*priority_cache)->_kx, + kx_priority_secure); + } else if (PRIO_MATCH("KX-GOST-ALL") == 0) { + bulk_fn(&(*priority_cache)->_kx, + kx_priority_gost); + } + } else if (PRIO_MATCH("GOST") == 0) { + bulk_given_fn(&(*priority_cache)->_supported_ecc, + _supported_groups_gost); + bulk_fn(&(*priority_cache)->_sign_algo, + sign_priority_gost); + bulk_fn(&(*priority_cache)->_mac, + mac_priority_gost); + bulk_fn(&(*priority_cache)->_cipher, + cipher_priority_gost); + bulk_fn(&(*priority_cache)->_kx, + kx_priority_gost); } else goto error; } else if (broken_list[i][0] == '%') { @@ -1442,22 +2249,32 @@ gnutls_priority_init(gnutls_priority_t * priority_cache, goto error; } - free(darg); + ret = set_ciphersuite_list(*priority_cache); + if (ret < 0) { + if (err_pos) + *err_pos = priorities; + goto error_cleanup; + } + + gnutls_free(darg); + return 0; - error: - if (err_pos != NULL && i < broken_list_size) { + error: + if (err_pos != NULL && i < broken_list_size && resolved_match) { *err_pos = priorities; for (j = 0; j < i; j++) { (*err_pos) += strlen(broken_list[j]) + 1; } } + ret = GNUTLS_E_INVALID_REQUEST; + + error_cleanup: free(darg); - gnutls_free(*priority_cache); + gnutls_priority_deinit(*priority_cache); *priority_cache = NULL; - return GNUTLS_E_INVALID_REQUEST; - + return ret; } /** @@ -1468,7 +2285,24 @@ gnutls_priority_init(gnutls_priority_t * priority_cache, **/ void gnutls_priority_deinit(gnutls_priority_t priority_cache) { - gnutls_free(priority_cache); + if (priority_cache == NULL) + return; + + /* Note that here we care about the following two cases: + * 1. Multiple sessions or different threads holding a reference + a global reference + * 2. One session holding a reference with a possible global reference + * + * As such, it will never be that two threads reach the + * zero state at the same time, unless the global reference + * is cleared too, which is invalid state. + */ + if (gnutls_atomic_val(&priority_cache->usage_cnt) == 0) { + gnutls_atomic_deinit(&priority_cache->usage_cnt); + gnutls_free(priority_cache); + return; + } else { + gnutls_atomic_decrement(&priority_cache->usage_cnt); + } } @@ -1479,12 +2313,12 @@ void gnutls_priority_deinit(gnutls_priority_t priority_cache) * @err_pos: In case of an error this will have the position in the string the error occurred * * Sets the priorities to use on the ciphers, key exchange methods, - * macs and compression methods. This function avoids keeping a + * and macs. This function avoids keeping a * priority cache and is used to directly set string priorities to a * TLS session. For documentation check the gnutls_priority_init(). * * To use a reasonable default, consider using gnutls_set_default_priority(), - * instead of this function. + * or gnutls_set_default_priority_append() instead of this function. * * Returns: On syntax error %GNUTLS_E_INVALID_REQUEST is returned, * %GNUTLS_E_SUCCESS on success, or an error code. @@ -1508,6 +2342,7 @@ gnutls_priority_set_direct(gnutls_session_t session, return ret; } + /* ensure that the session holds the only reference for the struct */ gnutls_priority_deinit(prio); return 0; @@ -1547,13 +2382,16 @@ break_list(char *list, * @session: is a #gnutls_session_t type. * * Sets the default priority on the ciphers, key exchange methods, - * macs and compression methods. This is the recommended method of + * and macs. This is the recommended method of * setting the defaults, in order to promote consistency between applications * using GnuTLS, and to allow GnuTLS using applications to update settings * in par with the library. For client applications which require * maximum compatibility consider calling gnutls_session_enable_compatibility_mode() * after this function. * + * For an application to specify additional options to priority string + * consider using gnutls_set_default_priority_append(). + * * To allow a user to override the defaults (e.g., when a user interface * or configuration file is available), the functions * gnutls_priority_set_direct() or gnutls_priority_set() can @@ -1568,26 +2406,114 @@ int gnutls_set_default_priority(gnutls_session_t session) return gnutls_priority_set_direct(session, NULL, NULL); } +/** + * gnutls_set_default_priority_append: + * @session: is a #gnutls_session_t type. + * @add_prio: is a string describing priorities to be appended to default + * @err_pos: In case of an error this will have the position in the string the error occurred + * @flags: must be zero + * + * Sets the default priority on the ciphers, key exchange methods, + * and macs with the additional options in @add_prio. This is the recommended method of + * setting the defaults when only few additional options are to be added. This promotes + * consistency between applications using GnuTLS, and allows GnuTLS using applications + * to update settings in par with the library. + * + * The @add_prio string should start as a normal priority string, e.g., + * '-VERS-TLS-ALL:+VERS-TLS1.3:%%COMPAT' or '%%FORCE_ETM'. That is, it must not start + * with ':'. + * + * To allow a user to override the defaults (e.g., when a user interface + * or configuration file is available), the functions + * gnutls_priority_set_direct() or gnutls_priority_set() can + * be used. + * + * Returns: %GNUTLS_E_SUCCESS on success, or an error code. + * + * Since: 3.6.3 + **/ +int gnutls_set_default_priority_append(gnutls_session_t session, + const char *add_prio, + const char **err_pos, + unsigned flags) +{ + gnutls_priority_t prio; + int ret; + + ret = gnutls_priority_init2(&prio, add_prio, err_pos, GNUTLS_PRIORITY_INIT_DEF_APPEND); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + ret = gnutls_priority_set(session, prio); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + /* ensure that the session holds the only reference for the struct */ + gnutls_priority_deinit(prio); + + return 0; +} + /** * gnutls_priority_ecc_curve_list: * @pcache: is a #gnutls_prioritity_t type. * @list: will point to an integer list * * Get a list of available elliptic curves in the priority - * structure. + * structure. + * + * Deprecated: This function has been replaced by + * gnutls_priority_group_list() since 3.6.0. + * + * Returns: the number of items, or an error code. * - * Returns: the number of curves, or an error code. * Since: 3.0 **/ int gnutls_priority_ecc_curve_list(gnutls_priority_t pcache, const unsigned int **list) { - if (pcache->supported_ecc.algorithms == 0) + unsigned i; + + if (pcache->_supported_ecc.num_priorities == 0) return 0; - *list = pcache->supported_ecc.priority; - return pcache->supported_ecc.algorithms; + *list = pcache->_supported_ecc.priorities; + + /* to ensure we don't confuse the caller, we do not include + * any FFDHE groups. This may return an incomplete list. */ + for (i=0;i_supported_ecc.num_priorities;i++) + if (pcache->_supported_ecc.priorities[i] > GNUTLS_ECC_CURVE_MAX) + return i; + + return pcache->_supported_ecc.num_priorities; +} + +/** + * gnutls_priority_group_list: + * @pcache: is a #gnutls_prioritity_t type. + * @list: will point to an integer list + * + * Get a list of available groups in the priority + * structure. + * + * Returns: the number of items, or an error code. + * + * Since: 3.6.0 + **/ +int +gnutls_priority_group_list(gnutls_priority_t pcache, + const unsigned int **list) +{ + if (pcache->_supported_ecc.num_priorities == 0) + return 0; + + *list = pcache->_supported_ecc.priorities; + return pcache->_supported_ecc.num_priorities; } /** @@ -1596,20 +2522,20 @@ gnutls_priority_ecc_curve_list(gnutls_priority_t pcache, * @list: will point to an integer list * * Get a list of available key exchange methods in the priority - * structure. + * structure. * - * Returns: the number of curves, or an error code. + * Returns: the number of items, or an error code. * Since: 3.2.3 **/ int gnutls_priority_kx_list(gnutls_priority_t pcache, const unsigned int **list) { - if (pcache->kx.algorithms == 0) + if (pcache->_kx.num_priorities == 0) return 0; - *list = pcache->kx.priority; - return pcache->kx.algorithms; + *list = pcache->_kx.priorities; + return pcache->_kx.num_priorities; } /** @@ -1618,20 +2544,20 @@ gnutls_priority_kx_list(gnutls_priority_t pcache, * @list: will point to an integer list * * Get a list of available ciphers in the priority - * structure. + * structure. * - * Returns: the number of curves, or an error code. + * Returns: the number of items, or an error code. * Since: 3.2.3 **/ int gnutls_priority_cipher_list(gnutls_priority_t pcache, const unsigned int **list) { - if (pcache->cipher.algorithms == 0) + if (pcache->_cipher.num_priorities == 0) return 0; - *list = pcache->cipher.priority; - return pcache->cipher.algorithms; + *list = pcache->_cipher.priorities; + return pcache->_cipher.num_priorities; } /** @@ -1640,20 +2566,20 @@ gnutls_priority_cipher_list(gnutls_priority_t pcache, * @list: will point to an integer list * * Get a list of available MAC algorithms in the priority - * structure. + * structure. * - * Returns: the number of curves, or an error code. + * Returns: the number of items, or an error code. * Since: 3.2.3 **/ int gnutls_priority_mac_list(gnutls_priority_t pcache, const unsigned int **list) { - if (pcache->mac.algorithms == 0) + if (pcache->_mac.num_priorities == 0) return 0; - *list = pcache->mac.priority; - return pcache->mac.algorithms; + *list = pcache->_mac.priorities; + return pcache->_mac.num_priorities; } /** @@ -1662,7 +2588,7 @@ gnutls_priority_mac_list(gnutls_priority_t pcache, * @list: will point to an integer list * * Get a list of available compression method in the priority - * structure. + * structure. * * Returns: the number of methods, or an error code. * Since: 3.0 @@ -1671,11 +2597,10 @@ int gnutls_priority_compression_list(gnutls_priority_t pcache, const unsigned int **list) { - if (pcache->compression.algorithms == 0) - return 0; + static const unsigned int priority[1] = {GNUTLS_COMP_NULL}; - *list = pcache->compression.priority; - return pcache->compression.algorithms; + *list = priority; + return 1; } /** @@ -1684,7 +2609,7 @@ gnutls_priority_compression_list(gnutls_priority_t pcache, * @list: will point to an integer list * * Get a list of available TLS version numbers in the priority - * structure. + * structure. * * Returns: the number of protocols, or an error code. * Since: 3.0 @@ -1693,11 +2618,11 @@ int gnutls_priority_protocol_list(gnutls_priority_t pcache, const unsigned int **list) { - if (pcache->protocol.algorithms == 0) + if (pcache->protocol.num_priorities == 0) return 0; - *list = pcache->protocol.priority; - return pcache->protocol.algorithms; + *list = pcache->protocol.priorities; + return pcache->protocol.num_priorities; } /** @@ -1706,7 +2631,7 @@ gnutls_priority_protocol_list(gnutls_priority_t pcache, * @list: will point to an integer list * * Get a list of available signature algorithms in the priority - * structure. + * structure. * * Returns: the number of algorithms, or an error code. * Since: 3.0 @@ -1715,11 +2640,11 @@ int gnutls_priority_sign_list(gnutls_priority_t pcache, const unsigned int **list) { - if (pcache->sign_algo.algorithms == 0) + if (pcache->_sign_algo.num_priorities == 0) return 0; - *list = pcache->sign_algo.priority; - return pcache->sign_algo.algorithms; + *list = pcache->_sign_algo.priorities; + return pcache->_sign_algo.num_priorities; } /** @@ -1728,7 +2653,13 @@ gnutls_priority_sign_list(gnutls_priority_t pcache, * @list: will point to an integer list * * Get a list of available certificate types in the priority - * structure. + * structure. + * + * As of version 3.6.4 this function is an alias for + * gnutls_priority_certificate_type_list2 with the target parameter + * set to: + * - GNUTLS_CTYPE_SERVER, if the %SERVER_PRECEDENCE option is set + * - GNUTLS_CTYPE_CLIENT, otherwise. * * Returns: the number of certificate types, or an error code. * Since: 3.0 @@ -1737,11 +2668,50 @@ int gnutls_priority_certificate_type_list(gnutls_priority_t pcache, const unsigned int **list) { - if (pcache->cert_type.algorithms == 0) - return 0; + gnutls_ctype_target_t target = + pcache->server_precedence ? GNUTLS_CTYPE_SERVER : GNUTLS_CTYPE_CLIENT; - *list = pcache->cert_type.priority; - return pcache->cert_type.algorithms; + return gnutls_priority_certificate_type_list2(pcache, list, target); +} + +/** + * gnutls_priority_certificate_type_list2: + * @pcache: is a #gnutls_prioritity_t type. + * @list: will point to an integer list. + * @target: is a #gnutls_ctype_target_t type. Valid arguments are + * GNUTLS_CTYPE_CLIENT and GNUTLS_CTYPE_SERVER + * + * Get a list of available certificate types for the given target + * in the priority structure. + * + * Returns: the number of certificate types, or an error code. + * + * Since: 3.6.4 + **/ +int +gnutls_priority_certificate_type_list2(gnutls_priority_t pcache, + const unsigned int **list, gnutls_ctype_target_t target) +{ + switch (target) { + case GNUTLS_CTYPE_CLIENT: + if(pcache->client_ctype.num_priorities > 0) { + *list = pcache->client_ctype.priorities; + return pcache->client_ctype.num_priorities; + } + break; + case GNUTLS_CTYPE_SERVER: + if(pcache->server_ctype.num_priorities > 0) { + *list = pcache->server_ctype.priorities; + return pcache->server_ctype.num_priorities; + } + break; + default: + // Invalid target given + gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } + + // Found a matching target but non of them had any ctypes set + return 0; } /** diff --git a/lib/priority_options.gperf b/lib/priority_options.gperf index 9de43785bb..a81001dda1 100644 --- a/lib/priority_options.gperf +++ b/lib/priority_options.gperf @@ -1,6 +1,5 @@ %{ typedef void (*option_set_func)(gnutls_priority_t); -static const struct priority_options_st *in_word_set(register const char *str, register unsigned int len); %} %language=ANSI-C %readonly-tables @@ -11,8 +10,9 @@ DUMBFW, enable_dumbfw NO_EXTENSIONS, enable_no_extensions NO_TICKETS, enable_no_tickets NO_ETM, enable_no_etm +FORCE_ETM, enable_force_etm NO_SESSION_HASH, enable_no_ext_master_secret -STATELESS_COMPRESSION, enable_stateless_compression +STATELESS_COMPRESSION, dummy_func VERIFY_ALLOW_BROKEN, enable_verify_allow_broken VERIFY_ALLOW_SIGN_RSA_MD5, enable_verify_allow_rsa_md5 VERIFY_ALLOW_SIGN_WITH_SHA1, enable_verify_allow_sha1 @@ -33,7 +33,9 @@ PROFILE_LEGACY, enable_profile_legacy PROFILE_MEDIUM, enable_profile_medium PROFILE_HIGH, enable_profile_high PROFILE_ULTRA, enable_profile_ultra +PROFILE_FUTURE, enable_profile_future PROFILE_SUITEB128, enable_profile_suiteb128 PROFILE_SUITEB192, enable_profile_suiteb192 NEW_PADDING, dummy_func DEBUG_ALLOW_KEY_USAGE_VIOLATIONS, enable_server_key_usage_violations +ALLOW_SMALL_RECORDS, enable_allow_small_records diff --git a/lib/privkey.c b/lib/privkey.c index 1b4eb48208..4114e2ca18 100644 --- a/lib/privkey.c +++ b/lib/privkey.c @@ -2,6 +2,7 @@ * GnuTLS PKCS#11 support * Copyright (C) 2010-2014 Free Software Foundation, Inc. * Copyright (C) 2012-2015 Nikos Mavrogiannopoulos + * Copyright (C) 2016-2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ #include "gnutls_int.h" @@ -29,20 +30,20 @@ #include #include #include -#include -#include #include #include #include #include #include "urls.h" +#include "pkcs11_int.h" #include static int -_gnutls_privkey_sign_raw_data(gnutls_privkey_t key, - unsigned flags, - const gnutls_datum_t * data, - gnutls_datum_t * signature); +privkey_sign_prehashed(gnutls_privkey_t signer, + const gnutls_sign_entry_st *se, + const gnutls_datum_t * hash_data, + gnutls_datum_t * signature, + gnutls_x509_spki_st * params); /** * gnutls_privkey_get_type: @@ -123,25 +124,21 @@ int gnutls_privkey_verify_seed(gnutls_privkey_t key, gnutls_digest_algorithm_t d int gnutls_privkey_get_pk_algorithm(gnutls_privkey_t key, unsigned int *bits) { switch (key->type) { -#ifdef ENABLE_OPENPGP - case GNUTLS_PRIVKEY_OPENPGP: - return gnutls_openpgp_privkey_get_pk_algorithm(key->key.openpgp, - bits); -#endif #ifdef ENABLE_PKCS11 case GNUTLS_PRIVKEY_PKCS11: return gnutls_pkcs11_privkey_get_pk_algorithm(key->key.pkcs11, bits); #endif case GNUTLS_PRIVKEY_X509: - if (bits) - *bits = - _gnutls_mpi_get_nbits(key->key.x509-> - params.params[0]); + if (bits) { + *bits = pubkey_to_bits(&key->key.x509->params); + } + return gnutls_x509_privkey_get_pk_algorithm(key->key.x509); case GNUTLS_PRIVKEY_EXT: if (bits) - *bits = 0; + *bits = key->key.ext.bits; + return key->pk_algorithm; default: gnutls_assert(); @@ -157,9 +154,14 @@ privkey_to_pubkey(gnutls_pk_algorithm_t pk, int ret; pub->algo = priv->algo; - pub->flags = priv->flags; + pub->pkflags = priv->pkflags; + pub->curve = priv->curve; + pub->gost_params = priv->gost_params; + pub->qbits = priv->qbits; + memcpy(&pub->spki, &priv->spki, sizeof(gnutls_x509_spki_st)); switch (pk) { + case GNUTLS_PK_RSA_PSS: case GNUTLS_PK_RSA: pub->params[0] = _gnutls_mpi_copy(priv->params[0]); pub->params[1] = _gnutls_mpi_copy(priv->params[1]); @@ -189,7 +191,7 @@ privkey_to_pubkey(gnutls_pk_algorithm_t pk, } break; - case GNUTLS_PK_EC: + case GNUTLS_PK_ECDSA: pub->params[ECC_X] = _gnutls_mpi_copy(priv->params[ECC_X]); pub->params[ECC_Y] = _gnutls_mpi_copy(priv->params[ECC_Y]); @@ -201,6 +203,28 @@ privkey_to_pubkey(gnutls_pk_algorithm_t pk, goto cleanup; } + break; + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: + ret = _gnutls_set_datum(&pub->raw_pub, priv->raw_pub.data, priv->raw_pub.size); + if (ret < 0) + return gnutls_assert_val(ret); + + break; + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + pub->params[GOST_X] = _gnutls_mpi_copy(priv->params[GOST_X]); + pub->params[GOST_Y] = _gnutls_mpi_copy(priv->params[GOST_Y]); + + pub->params_nr = GOST_PUBLIC_PARAMS; + + if (pub->params[GOST_X] == NULL || pub->params[GOST_Y] == NULL) { + gnutls_assert(); + ret = GNUTLS_E_MEMORY_ERROR; + goto cleanup; + } + break; default: gnutls_assert(); @@ -221,33 +245,6 @@ _gnutls_privkey_get_mpis(gnutls_privkey_t key, gnutls_pk_params_st * params) int ret; switch (key->type) { -#ifdef ENABLE_OPENPGP - case GNUTLS_PRIVKEY_OPENPGP: - { - uint32_t kid[2]; - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - - ret = - gnutls_openpgp_privkey_get_preferred_key_id - (key->key.openpgp, keyid); - if (ret == 0) { - KEYID_IMPORT(kid, keyid); - ret = - _gnutls_openpgp_privkey_get_mpis - (key->key.openpgp, kid, params); - } else - ret = - _gnutls_openpgp_privkey_get_mpis - (key->key.openpgp, NULL, params); - - if (ret < 0) { - gnutls_assert(); - return ret; - } - } - - break; -#endif case GNUTLS_PRIVKEY_X509: ret = _gnutls_pk_params_copy(params, &key->key.x509->params); break; @@ -296,6 +293,96 @@ _gnutls_privkey_get_public_mpis(gnutls_privkey_t key, return ret; } +/* This function retrieves default sign parameters from KEY. */ +int +_gnutls_privkey_get_spki_params(gnutls_privkey_t key, + gnutls_x509_spki_st * params) +{ + switch (key->type) { +#ifdef ENABLE_PKCS11 + case GNUTLS_PRIVKEY_PKCS11: + break; +#endif + case GNUTLS_PRIVKEY_EXT: + break; + case GNUTLS_PRIVKEY_X509: + _gnutls_x509_privkey_get_spki_params(key->key.x509, params); + return 0; + default: + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + memset(params, 0, sizeof(gnutls_x509_spki_st)); + + return 0; +} + +/* This function fills in PARAMS with the necessary parameters to sign + * with PK and DIG. PARAMS must be initialized with + * _gnutls_privkey_get_spki_params in advance. + * + * After calling this function the params structure will + * be initialized even if the original SubjectPublicKeyInfo was empty. + */ +int +_gnutls_privkey_update_spki_params(gnutls_privkey_t key, + gnutls_pk_algorithm_t pk, + gnutls_digest_algorithm_t dig, + unsigned flags, + gnutls_x509_spki_st *params) +{ + unsigned salt_size = 0; + unsigned bits = 0; + gnutls_pk_algorithm_t key_pk; + + if (flags & GNUTLS_PRIVKEY_SIGN_FLAG_RSA_PSS) { + if (!GNUTLS_PK_IS_RSA(pk)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + pk = GNUTLS_PK_RSA_PSS; + } + + key_pk = gnutls_privkey_get_pk_algorithm(key, &bits); + if ((key_pk != pk) && + !(key_pk == GNUTLS_PK_RSA && pk == GNUTLS_PK_RSA_PSS)) { + gnutls_assert(); + return GNUTLS_E_CONSTRAINT_ERROR; + } + + if (pk == GNUTLS_PK_RSA_PSS) { + const mac_entry_st *me; + int ret; + + me = hash_to_entry(dig); + if (unlikely(me == NULL)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (params->pk == GNUTLS_PK_RSA) + salt_size = 0; + else if (params->pk == GNUTLS_PK_RSA_PSS) { + if (params->rsa_pss_dig != GNUTLS_DIG_UNKNOWN && dig != params->rsa_pss_dig) { + return gnutls_assert_val(GNUTLS_E_CONSTRAINT_ERROR); + } + + salt_size = params->salt_size; + } + + if (flags & GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE) + params->salt_size = 0; + else { + ret = _gnutls_find_rsa_pss_salt_size(bits, me, salt_size); + if (ret < 0) + return gnutls_assert_val(ret); + params->salt_size = ret; + } + params->rsa_pss_dig = dig; + } + + params->pk = pk; + + return 0; +} + /** * gnutls_privkey_init: * @key: A pointer to the type to be initialized @@ -345,11 +432,6 @@ void gnutls_privkey_deinit(gnutls_privkey_t key) if (key->flags & GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE || key->flags & GNUTLS_PRIVKEY_IMPORT_COPY) switch (key->type) { -#ifdef ENABLE_OPENPGP - case GNUTLS_PRIVKEY_OPENPGP: - gnutls_openpgp_privkey_deinit(key->key.openpgp); - break; -#endif #ifdef ENABLE_PKCS11 case GNUTLS_PRIVKEY_PKCS11: gnutls_pkcs11_privkey_deinit(key->key.pkcs11); @@ -575,6 +657,9 @@ gnutls_privkey_import_ext(gnutls_privkey_t pkey, decrypt_func, NULL, flags); } +#define PK_IS_OK_FOR_EXT2(pk) \ + ((pk == GNUTLS_PK_RSA) || (pk == GNUTLS_PK_ECDSA) || (pk == GNUTLS_PK_DSA)) + /** * gnutls_privkey_import_ext2: * @pkey: The private key @@ -619,6 +704,9 @@ gnutls_privkey_import_ext2(gnutls_privkey_t pkey, return ret; } + if (!PK_IS_OK_FOR_EXT2(pk)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (sign_fn == NULL && decrypt_fn == NULL) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); @@ -699,6 +787,101 @@ gnutls_privkey_import_ext3(gnutls_privkey_t pkey, pkey->pk_algorithm = pkey->key.ext.info_func(pkey, GNUTLS_PRIVKEY_INFO_PK_ALGO, pkey->key.ext.userdata); + if (!PK_IS_OK_FOR_EXT2(pkey->pk_algorithm)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + /* Ensure gnutls_privkey_deinit() calls the deinit_func */ + if (deinit_fn) + pkey->flags |= GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE; + + return 0; +} + +/** + * gnutls_privkey_import_ext4: + * @pkey: The private key + * @userdata: private data to be provided to the callbacks + * @sign_data_fn: callback for signature operations (may be %NULL) + * @sign_hash_fn: callback for signature operations (may be %NULL) + * @decrypt_fn: callback for decryption operations (may be %NULL) + * @deinit_fn: a deinitialization function + * @info_fn: returns info about the public key algorithm (should not be %NULL) + * @flags: Flags for the import + * + * This function will associate the given callbacks with the + * #gnutls_privkey_t type. At least one of the callbacks + * must be non-null. If a deinitialization function is provided + * then flags is assumed to contain %GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE. + * + * Note that in contrast with the signing function of + * gnutls_privkey_import_ext3(), the signing functions provided to this + * function take explicitly the signature algorithm as parameter and + * different functions are provided to sign the data and hashes. + * + * The @sign_hash_fn is to be called to sign pre-hashed data. The input + * to the callback is the output of the hash (such as SHA256) corresponding + * to the signature algorithm. For RSA PKCS#1 signatures, the signature + * algorithm can be set to %GNUTLS_SIGN_RSA_RAW, and in that case the data + * should be handled as if they were an RSA PKCS#1 DigestInfo structure. + * + * The @sign_data_fn is to be called to sign data. The input data will be + * he data to be signed (and hashed), with the provided signature + * algorithm. This function is to be used for signature algorithms like + * Ed25519 which cannot take pre-hashed data as input. + * + * When both @sign_data_fn and @sign_hash_fn functions are provided they + * must be able to operate on all the supported signature algorithms, + * unless prohibited by the type of the algorithm (e.g., as with Ed25519). + * + * The @info_fn must provide information on the signature algorithms supported by + * this private key, and should support the flags %GNUTLS_PRIVKEY_INFO_PK_ALGO, + * %GNUTLS_PRIVKEY_INFO_HAVE_SIGN_ALGO and %GNUTLS_PRIVKEY_INFO_PK_ALGO_BITS. + * It must return -1 on unknown flags. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.0 + **/ +int +gnutls_privkey_import_ext4(gnutls_privkey_t pkey, + void *userdata, + gnutls_privkey_sign_data_func sign_data_fn, + gnutls_privkey_sign_hash_func sign_hash_fn, + gnutls_privkey_decrypt_func decrypt_fn, + gnutls_privkey_deinit_func deinit_fn, + gnutls_privkey_info_func info_fn, + unsigned int flags) +{ + int ret; + + ret = check_if_clean(pkey); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + if (sign_data_fn == NULL && sign_hash_fn == NULL && decrypt_fn == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (info_fn == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + pkey->key.ext.sign_data_func = sign_data_fn; + pkey->key.ext.sign_hash_func = sign_hash_fn; + pkey->key.ext.decrypt_func = decrypt_fn; + pkey->key.ext.deinit_func = deinit_fn; + pkey->key.ext.info_func = info_fn; + pkey->key.ext.userdata = userdata; + pkey->type = GNUTLS_PRIVKEY_EXT; + pkey->flags = flags; + + pkey->pk_algorithm = pkey->key.ext.info_func(pkey, GNUTLS_PRIVKEY_INFO_PK_ALGO, pkey->key.ext.userdata); + + ret = pkey->key.ext.info_func(pkey, GNUTLS_PRIVKEY_INFO_PK_ALGO_BITS, pkey->key.ext.userdata); + if (ret >= 0) + pkey->key.ext.bits = ret; + /* Ensure gnutls_privkey_deinit() calls the deinit_func */ if (deinit_fn) pkey->flags |= GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE; @@ -807,9 +990,13 @@ gnutls_privkey_export_x509(gnutls_privkey_t pkey, * @flags: Must be zero or flags from #gnutls_privkey_flags_t. * * This function will generate a random private key. Note that this - * function must be called on an empty private key. The flag %GNUTLS_PRIVKEY_FLAG_PROVABLE - * instructs the key generation process to use algorithms which generate - * provable parameters out of a seed. + * function must be called on an initialized private key. + * + * The flag %GNUTLS_PRIVKEY_FLAG_PROVABLE + * instructs the key generation process to use algorithms like Shawe-Taylor + * (from FIPS PUB186-4) which generate provable parameters out of a seed + * for RSA and DSA keys. See gnutls_privkey_generate2() for more + * information. * * Note that when generating an elliptic curve key, the curve * can be substituted in the place of the bits parameter using the @@ -821,6 +1008,8 @@ gnutls_privkey_export_x509(gnutls_privkey_t pkey, * * It is recommended to do not set the number of @bits directly, use gnutls_sec_param_to_pk_bits() instead . * + * See also gnutls_privkey_generate2(). + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * @@ -844,15 +1033,30 @@ gnutls_privkey_generate(gnutls_privkey_t pkey, * @data_size: The number of @data available. * * This function will generate a random private key. Note that this - * function must be called on an empty private key. The flag %GNUTLS_PRIVKEY_FLAG_PROVABLE + * function must be called on an initialized private key. + * + * The flag %GNUTLS_PRIVKEY_FLAG_PROVABLE * instructs the key generation process to use algorithms like Shawe-Taylor - * which generate provable parameters out of a seed. + * (from FIPS PUB186-4) which generate provable parameters out of a seed + * for RSA and DSA keys. On DSA keys the PQG parameters are generated using the + * seed, while on RSA the two primes. To specify an explicit seed + * (by default a random seed is used), use the @data with a %GNUTLS_KEYGEN_SEED + * type. * * Note that when generating an elliptic curve key, the curve * can be substituted in the place of the bits parameter using the * GNUTLS_CURVE_TO_BITS() macro. * - * Do not set the number of bits directly, use gnutls_sec_param_to_pk_bits(). + * To export the generated keys in memory or in files it is recommended to use the + * PKCS#8 form as it can handle all key types, and can store additional parameters + * such as the seed, in case of provable RSA or DSA keys. + * Generated keys can be exported in memory using gnutls_privkey_export_x509(), + * and then with gnutls_x509_privkey_export2_pkcs8(). + * + * If key generation is part of your application, avoid setting the number + * of bits directly, and instead use gnutls_sec_param_to_pk_bits(). + * That way the generated keys will adapt to the security levels + * of the underlying GnuTLS library. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -884,225 +1088,212 @@ gnutls_privkey_generate2(gnutls_privkey_t pkey, return 0; } -#ifdef ENABLE_OPENPGP /** - * gnutls_privkey_import_openpgp: - * @pkey: The private key - * @key: The private key to be imported - * @flags: Flags for the import - * - * This function will import the given private key to the abstract - * #gnutls_privkey_t type. + * gnutls_privkey_sign_data: + * @signer: Holds the key + * @hash: should be a digest algorithm + * @flags: Zero or one of %gnutls_privkey_flags_t + * @data: holds the data to be signed + * @signature: will contain the signature allocated with gnutls_malloc() * - * The #gnutls_openpgp_privkey_t object must not be deallocated - * during the lifetime of this structure. The subkey set as - * preferred will be used, or the master key otherwise. + * This function will sign the given data using a signature algorithm + * supported by the private key. Signature algorithms are always used + * together with a hash functions. Different hash functions may be + * used for the RSA algorithm, but only the SHA family for the DSA keys. * - * @flags might be zero or one of %GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE - * and %GNUTLS_PRIVKEY_IMPORT_COPY. + * You may use gnutls_pubkey_get_preferred_hash_algorithm() to determine + * the hash algorithm. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. + * negative error value. * * Since: 2.12.0 **/ int -gnutls_privkey_import_openpgp(gnutls_privkey_t pkey, - gnutls_openpgp_privkey_t key, unsigned int flags) +gnutls_privkey_sign_data(gnutls_privkey_t signer, + gnutls_digest_algorithm_t hash, + unsigned int flags, + const gnutls_datum_t * data, + gnutls_datum_t * signature) { - int ret, idx; - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; + int ret; + gnutls_x509_spki_st params; - ret = check_if_clean(pkey); + if (flags & GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ret = _gnutls_privkey_get_spki_params(signer, ¶ms); if (ret < 0) { gnutls_assert(); return ret; } - if (flags & GNUTLS_PRIVKEY_IMPORT_COPY) { - ret = gnutls_openpgp_privkey_init(&pkey->key.openpgp); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = _gnutls_openpgp_privkey_cpy(pkey->key.openpgp, key); - if (ret < 0) { - gnutls_openpgp_privkey_deinit(pkey->key.openpgp); - return gnutls_assert_val(ret); - } - } else - pkey->key.openpgp = key; - - pkey->type = GNUTLS_PRIVKEY_OPENPGP; - - ret = gnutls_openpgp_privkey_get_preferred_key_id(key, keyid); - if (ret == GNUTLS_E_OPENPGP_PREFERRED_KEY_ERROR) { - pkey->pk_algorithm = - gnutls_openpgp_privkey_get_pk_algorithm(key, NULL); - } else { - if (ret < 0) - return gnutls_assert_val(ret); - - idx = gnutls_openpgp_privkey_get_subkey_idx(key, keyid); - - pkey->pk_algorithm = - gnutls_openpgp_privkey_get_subkey_pk_algorithm(key, - idx, NULL); + ret = _gnutls_privkey_update_spki_params(signer, signer->pk_algorithm, + hash, flags, ¶ms); + if (ret < 0) { + gnutls_assert(); + return ret; } - pkey->flags = flags; + FIX_SIGN_PARAMS(params, flags, hash); - return 0; + return privkey_sign_and_hash_data(signer, _gnutls_pk_to_sign_entry(params.pk, hash), data, signature, ¶ms); } /** - * gnutls_privkey_import_openpgp_raw: - * @pkey: The private key - * @data: The private key data to be imported - * @format: The format of the private key - * @keyid: The key id to use (optional) - * @password: A password (optional) + * gnutls_privkey_sign_data2: + * @signer: Holds the key + * @algo: The signature algorithm used + * @flags: Zero or one of %gnutls_privkey_flags_t + * @data: holds the data to be signed + * @signature: will contain the signature allocated with gnutls_malloc() * - * This function will import the given private key to the abstract - * #gnutls_privkey_t type. + * This function will sign the given data using the specified signature + * algorithm. This function is an enhancement of gnutls_privkey_sign_data(), + * as it allows utilizing a alternative signature algorithm where possible + * (e.g, use an RSA key with RSA-PSS). * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. + * negative error value. * - * Since: 3.1.0 + * Since: 3.6.0 **/ -int gnutls_privkey_import_openpgp_raw(gnutls_privkey_t pkey, - const gnutls_datum_t * data, - gnutls_openpgp_crt_fmt_t format, - const gnutls_openpgp_keyid_t keyid, - const char *password) +int +gnutls_privkey_sign_data2(gnutls_privkey_t signer, + gnutls_sign_algorithm_t algo, + unsigned int flags, + const gnutls_datum_t * data, + gnutls_datum_t * signature) { - gnutls_openpgp_privkey_t xpriv; int ret; + gnutls_x509_spki_st params; + const gnutls_sign_entry_st *se; - ret = gnutls_openpgp_privkey_init(&xpriv); - if (ret < 0) - return gnutls_assert_val(ret); + if (flags & GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + se = _gnutls_sign_to_entry(algo); + if (se == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - ret = gnutls_openpgp_privkey_import(xpriv, data, format, password, 0); + ret = _gnutls_privkey_get_spki_params(signer, ¶ms); if (ret < 0) { gnutls_assert(); - goto cleanup; - } - - if (keyid) { - ret = gnutls_openpgp_privkey_set_preferred_key_id(xpriv, keyid); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } + return ret; } - ret = - gnutls_privkey_import_openpgp(pkey, xpriv, - GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE); + ret = _gnutls_privkey_update_spki_params(signer, se->pk, se->hash, + flags, ¶ms); if (ret < 0) { gnutls_assert(); - goto cleanup; + return ret; } - return 0; - - cleanup: - gnutls_openpgp_privkey_deinit(xpriv); + FIX_SIGN_PARAMS(params, flags, se->hash); - return ret; + return privkey_sign_and_hash_data(signer, se, data, signature, ¶ms); } /** - * gnutls_privkey_export_openpgp: - * @pkey: The private key - * @key: Location for the key to be exported. + * gnutls_privkey_sign_hash2: + * @signer: Holds the signer's key + * @algo: The signature algorithm used + * @flags: Zero or one of %gnutls_privkey_flags_t + * @hash_data: holds the data to be signed + * @signature: will contain newly allocated signature * - * Converts the given abstract private key to a #gnutls_openpgp_privkey_t - * type. The key must be of type %GNUTLS_PRIVKEY_OPENPGP. The key - * returned in @key must be deinitialized with - * gnutls_openpgp_privkey_deinit(). + * This function will sign the given hashed data using the specified signature + * algorithm. This function is an enhancement of gnutls_privkey_sign_hash(), + * as it allows utilizing a alternative signature algorithm where possible + * (e.g, use an RSA key with RSA-PSS). + * + * The flags may be %GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA. + * In that case this function will ignore @hash_algo and perform a raw PKCS1 signature. + * Note that this flag is supported since 3.6.9. + * + * Note also that, not all algorithm support signing already hashed data. When + * signing with Ed25519, gnutls_privkey_sign_data2() should be used instead. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * - * Since: 3.4.0 - */ + * Since: 3.6.0 + **/ int -gnutls_privkey_export_openpgp(gnutls_privkey_t pkey, - gnutls_openpgp_privkey_t *key) +gnutls_privkey_sign_hash2(gnutls_privkey_t signer, + gnutls_sign_algorithm_t algo, + unsigned int flags, + const gnutls_datum_t * hash_data, + gnutls_datum_t * signature) { int ret; + gnutls_x509_spki_st params; + const gnutls_sign_entry_st *se; - if (pkey->type != GNUTLS_PRIVKEY_OPENPGP) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } + if (flags & GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA) { + /* the corresponding signature algorithm is SIGN_RSA_RAW, + * irrespective of hash algorithm. */ + se = _gnutls_sign_to_entry(GNUTLS_SIGN_RSA_RAW); + } else { + se = _gnutls_sign_to_entry(algo); + if (unlikely(se == NULL)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - ret = gnutls_openpgp_privkey_init(key); - if (ret < 0) - return gnutls_assert_val(ret); + } - ret = _gnutls_openpgp_privkey_cpy(*key, pkey->key.openpgp); + ret = _gnutls_privkey_get_spki_params(signer, ¶ms); if (ret < 0) { - gnutls_openpgp_privkey_deinit(*key); - *key = NULL; + gnutls_assert(); + return ret; + } - return gnutls_assert_val(ret); + ret = _gnutls_privkey_update_spki_params(signer, se->pk, se->hash, + flags, ¶ms); + if (ret < 0) { + gnutls_assert(); + return ret; } - return 0; + FIX_SIGN_PARAMS(params, flags, se->hash); + + return privkey_sign_prehashed(signer, se, hash_data, signature, ¶ms); } -#endif -/** - * gnutls_privkey_sign_data: - * @signer: Holds the key - * @hash: should be a digest algorithm - * @flags: Zero or one of %gnutls_privkey_flags_t - * @data: holds the data to be signed - * @signature: will contain the signature allocated with gnutls_malloc() - * - * This function will sign the given data using a signature algorithm - * supported by the private key. Signature algorithms are always used - * together with a hash functions. Different hash functions may be - * used for the RSA algorithm, but only the SHA family for the DSA keys. - * - * You may use gnutls_pubkey_get_preferred_hash_algorithm() to determine - * the hash algorithm. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - * - * Since: 2.12.0 - **/ int -gnutls_privkey_sign_data(gnutls_privkey_t signer, - gnutls_digest_algorithm_t hash, - unsigned int flags, - const gnutls_datum_t * data, - gnutls_datum_t * signature) +privkey_sign_and_hash_data(gnutls_privkey_t signer, + const gnutls_sign_entry_st *se, + const gnutls_datum_t * data, + gnutls_datum_t * signature, + gnutls_x509_spki_st * params) { int ret; gnutls_datum_t digest; - const mac_entry_st *me = hash_to_entry(hash); + const mac_entry_st *me; - if (flags & GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA) + if (unlikely(se == NULL)) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - ret = pk_hash_data(signer->pk_algorithm, me, NULL, data, &digest); + if (_gnutls_pk_is_not_prehashed(se->pk)) { + return privkey_sign_raw_data(signer, se, data, signature, params); + } + + me = hash_to_entry(se->hash); + if (me == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ret = pk_hash_data(se->pk, me, NULL, data, &digest); if (ret < 0) { gnutls_assert(); return ret; } - ret = pk_prepare_hash(signer->pk_algorithm, me, &digest); + ret = pk_prepare_hash(se->pk, me, &digest); if (ret < 0) { gnutls_assert(); goto cleanup; } - ret = _gnutls_privkey_sign_raw_data(signer, flags, &digest, signature); + ret = privkey_sign_raw_data(signer, se, &digest, signature, params); _gnutls_free_datum(&digest); if (ret < 0) { @@ -1117,6 +1308,7 @@ gnutls_privkey_sign_data(gnutls_privkey_t signer, return ret; } + /** * gnutls_privkey_sign_hash: * @signer: Holds the signer's key @@ -1133,8 +1325,12 @@ gnutls_privkey_sign_data(gnutls_privkey_t signer, * You may use gnutls_pubkey_get_preferred_hash_algorithm() to determine * the hash algorithm. * - * Note that if %GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA flag is specified this function - * will ignore @hash_algo and perform a raw PKCS1 signature. + * The flags may be %GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA or %GNUTLS_PRIVKEY_SIGN_FLAG_RSA_PSS. + * In the former case this function will ignore @hash_algo and perform a raw PKCS1 signature, + * and in the latter an RSA-PSS signature will be generated. + * + * Note that, not all algorithm support signing already hashed data. When + * signing with Ed25519, gnutls_privkey_sign_data() should be used. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -1147,13 +1343,71 @@ gnutls_privkey_sign_hash(gnutls_privkey_t signer, unsigned int flags, const gnutls_datum_t * hash_data, gnutls_datum_t * signature) +{ + int ret; + gnutls_x509_spki_st params; + const gnutls_sign_entry_st *se; + + ret = _gnutls_privkey_get_spki_params(signer, ¶ms); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + ret = _gnutls_privkey_update_spki_params(signer, signer->pk_algorithm, + hash_algo, flags, ¶ms); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + /* legacy callers of this API could use a hash algorithm of 0 (unknown) + * to indicate raw hashing. As we now always want to know the signing + * algorithm involved, we try discovering the hash algorithm. */ + if (hash_algo == 0 && (params.pk == GNUTLS_PK_DSA || params.pk == GNUTLS_PK_ECDSA)) { + hash_algo = _gnutls_hash_size_to_sha_hash(hash_data->size); + } + + if (params.pk == GNUTLS_PK_RSA && (flags & GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA)) { + /* the corresponding signature algorithm is SIGN_RSA_RAW, + * irrespective of hash algorithm. */ + se = _gnutls_sign_to_entry(GNUTLS_SIGN_RSA_RAW); + } else { + se = _gnutls_pk_to_sign_entry(params.pk, hash_algo); + } + + if (unlikely(se == NULL)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + FIX_SIGN_PARAMS(params, flags, hash_algo); + + return privkey_sign_prehashed(signer, se, + hash_data, signature, ¶ms); +} + +static int +privkey_sign_prehashed(gnutls_privkey_t signer, + const gnutls_sign_entry_st *se, + const gnutls_datum_t * hash_data, + gnutls_datum_t * signature, + gnutls_x509_spki_st * params) { int ret; gnutls_datum_t digest; - if (flags & GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA) - return _gnutls_privkey_sign_raw_data(signer, flags, - hash_data, signature); + if (unlikely(se == NULL)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (se->id == GNUTLS_SIGN_RSA_RAW) { + return privkey_sign_raw_data(signer, + se, + hash_data, signature, + params); + } + + if (_gnutls_pk_is_not_prehashed(signer->pk_algorithm)) { + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } digest.data = gnutls_malloc(hash_data->size); if (digest.data == NULL) { @@ -1163,15 +1417,16 @@ gnutls_privkey_sign_hash(gnutls_privkey_t signer, digest.size = hash_data->size; memcpy(digest.data, hash_data->data, digest.size); - ret = - pk_prepare_hash(signer->pk_algorithm, hash_to_entry(hash_algo), - &digest); + ret = pk_prepare_hash(se->pk, hash_to_entry(se->hash), &digest); if (ret < 0) { gnutls_assert(); goto cleanup; } - ret = _gnutls_privkey_sign_raw_data(signer, flags, &digest, signature); + ret = privkey_sign_raw_data(signer, + se, + &digest, signature, + params); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -1185,17 +1440,18 @@ gnutls_privkey_sign_hash(gnutls_privkey_t signer, } /*- - * gnutls_privkey_sign_raw_data: + * privkey_sign_raw_data: * @key: Holds the key - * @flags: should be zero * @data: holds the data to be signed * @signature: will contain the signature allocated with gnutls_malloc() + * @params: holds the signing parameters * * This function will sign the given data using a signature algorithm * supported by the private key. Note that this is a low-level function * and does not apply any preprocessing or hash on the signed data. * For example on an RSA key the input @data should be of the DigestInfo - * PKCS #1 1.5 format. Use it only if you know what are you doing. + * PKCS #1 1.5 format, on RSA-PSS, DSA or ECDSA the input should be a hash output + * and on Ed25519 the raw data to be signed. * * Note this function is equivalent to using the %GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA * flag with gnutls_privkey_sign_hash(). @@ -1205,31 +1461,58 @@ gnutls_privkey_sign_hash(gnutls_privkey_t signer, * * Since: 3.1.10 -*/ -static int -_gnutls_privkey_sign_raw_data(gnutls_privkey_t key, - unsigned flags, - const gnutls_datum_t * data, - gnutls_datum_t * signature) +int +privkey_sign_raw_data(gnutls_privkey_t key, + const gnutls_sign_entry_st *se, + const gnutls_datum_t * data, + gnutls_datum_t * signature, + gnutls_x509_spki_st * params) { + if (unlikely(se == NULL)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + switch (key->type) { -#ifdef ENABLE_OPENPGP - case GNUTLS_PRIVKEY_OPENPGP: - return gnutls_openpgp_privkey_sign_hash(key->key.openpgp, - data, signature); -#endif #ifdef ENABLE_PKCS11 case GNUTLS_PRIVKEY_PKCS11: - return _gnutls_pkcs11_privkey_sign_hash(key->key.pkcs11, - data, signature); + return _gnutls_pkcs11_privkey_sign(key->key.pkcs11, se, + data, signature, + params); #endif case GNUTLS_PRIVKEY_X509: - return _gnutls_pk_sign(key->key.x509->pk_algorithm, - signature, data, &key->key.x509->params); + return _gnutls_pk_sign(se->pk, signature, data, + &key->key.x509->params, params); case GNUTLS_PRIVKEY_EXT: - if (key->key.ext.sign_func == NULL) + if (unlikely(key->key.ext.sign_data_func == NULL && + key->key.ext.sign_hash_func == NULL && + key->key.ext.sign_func == NULL)) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - return key->key.ext.sign_func(key, key->key.ext.userdata, - data, signature); + + if (_gnutls_pk_is_not_prehashed(se->pk)) { + if (!key->key.ext.sign_data_func) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + return key->key.ext.sign_data_func(key, se->id, + key->key.ext.userdata, + 0, + data, signature); + } else if (key->key.ext.sign_hash_func) { + if (se->pk == GNUTLS_PK_RSA) { + se = _gnutls_sign_to_entry(GNUTLS_SIGN_RSA_RAW); + assert(se != NULL); + } + + /* se may not be set here if we are doing legacy RSA */ + return key->key.ext.sign_hash_func(key, se->id, + key->key.ext.userdata, + 0, + data, signature); + } else { + if (!PK_IS_OK_FOR_EXT2(se->pk)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + return key->key.ext.sign_func(key, key->key.ext.userdata, + data, signature); + } default: gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; @@ -1258,12 +1541,6 @@ gnutls_privkey_decrypt_data(gnutls_privkey_t key, gnutls_datum_t * plaintext) { switch (key->type) { -#ifdef ENABLE_OPENPGP - case GNUTLS_PRIVKEY_OPENPGP: - return _gnutls_openpgp_privkey_decrypt_data(key->key.openpgp, - flags, ciphertext, - plaintext); -#endif case GNUTLS_PRIVKEY_X509: return _gnutls_pk_decrypt(key->pk_algorithm, plaintext, ciphertext, &key->key.x509->params); @@ -1287,6 +1564,82 @@ gnutls_privkey_decrypt_data(gnutls_privkey_t key, } } +/** + * gnutls_privkey_decrypt_data2: + * @key: Holds the key + * @flags: zero for now + * @ciphertext: holds the data to be decrypted + * @plaintext: a preallocated buffer that will be filled with the plaintext + * @plaintext_size: in/out size of the plaintext + * + * This function will decrypt the given data using the algorithm + * supported by the private key. Unlike with gnutls_privkey_decrypt_data() + * this function operates in constant time and constant memory access. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.5 + **/ + +int +gnutls_privkey_decrypt_data2(gnutls_privkey_t key, + unsigned int flags, + const gnutls_datum_t * ciphertext, + unsigned char * plaintext, + size_t plaintext_size) +{ + /* Note: except for the backwards compatibility function, no + * conditional code should be called after the decryption + * function call, to avoid creating oracle attacks based + * on cache/timing side channels */ + + /* backwards compatibility */ + if (key->type == GNUTLS_PRIVKEY_EXT && + key->key.ext.decrypt_func2 == NULL && + key->key.ext.decrypt_func != NULL) { + gnutls_datum_t plain; + int ret; + ret = key->key.ext.decrypt_func(key, + key->key.ext.userdata, + ciphertext, + &plain); + if (plain.size != plaintext_size) { + ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } else { + memcpy(plaintext, plain.data, plain.size); + } + gnutls_free(plain.data); + return ret; + } + + switch (key->type) { + case GNUTLS_PRIVKEY_X509: + return _gnutls_pk_decrypt2(key->pk_algorithm, ciphertext, + plaintext, plaintext_size, + &key->key.x509->params); +#ifdef ENABLE_PKCS11 + case GNUTLS_PRIVKEY_PKCS11: + return _gnutls_pkcs11_privkey_decrypt_data2(key->key.pkcs11, + flags, + ciphertext, + plaintext, + plaintext_size); +#endif + case GNUTLS_PRIVKEY_EXT: + if (key->key.ext.decrypt_func2 == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + return key->key.ext.decrypt_func2(key, + key->key.ext.userdata, + ciphertext, plaintext, + plaintext_size); + default: + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } +} + /** * gnutls_privkey_import_x509_raw: * @pkey: The private key @@ -1509,24 +1862,116 @@ int gnutls_privkey_verify_params(gnutls_privkey_t key) return 0; } -/*- - * _gnutls_privkey_get_preferred_sign_algo: - * @key: should contain a #gnutls_privkey_t type +/** + * gnutls_privkey_get_spki: + * @privkey: a public key of type #gnutls_privkey_t + * @spki: a SubjectPublicKeyInfo structure of type #gnutls_privkey_spki_t + * @flags: must be zero * - * This function returns the preferred signature algorithm for this - * private key. + * This function will return the public key information if available. + * The provided @spki must be initialized. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * - * Since: 3.4.0 - -*/ -gnutls_sign_algorithm_t -_gnutls_privkey_get_preferred_sign_algo(gnutls_privkey_t key) + * Since: 3.6.0 + **/ +int +gnutls_privkey_get_spki(gnutls_privkey_t privkey, gnutls_x509_spki_t spki, unsigned int flags) +{ + if (privkey == NULL || privkey->type != GNUTLS_PRIVKEY_X509) { + gnutls_assert(); + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + } + + if (privkey->key.x509->params.spki.pk == GNUTLS_PK_UNKNOWN) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + memcpy(spki, &privkey->key.x509->params.spki, sizeof(gnutls_x509_spki_st)); + + return 0; +} + +/** + * gnutls_privkey_set_spki: + * @privkey: a public key of type #gnutls_privkey_t + * @spki: a SubjectPublicKeyInfo structure of type #gnutls_privkey_spki_t + * @flags: must be zero + * + * This function will set the public key information. + * The provided @spki must be initialized. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.0 + **/ +int +gnutls_privkey_set_spki(gnutls_privkey_t privkey, const gnutls_x509_spki_t spki, unsigned int flags) { - if (key->type == GNUTLS_PRIVKEY_EXT) { - if (key->key.ext.info_func) - return key->key.ext.info_func(key, GNUTLS_PRIVKEY_INFO_SIGN_ALGO, key->key.ext.userdata); + if (privkey == NULL || privkey->type != GNUTLS_PRIVKEY_X509) { + gnutls_assert(); + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + } + + return gnutls_x509_privkey_set_spki(privkey->key.x509, spki, flags); +} + +/* Checks whether the public key given is compatible with the + * signature algorithm used. The session is only used for audit logging, and + * it may be null. + */ +unsigned _gnutls_privkey_compatible_with_sig(gnutls_privkey_t privkey, + gnutls_sign_algorithm_t sign) +{ + const gnutls_sign_entry_st *se; + + se = _gnutls_sign_to_entry(sign); + if (unlikely(se == NULL)) + return gnutls_assert_val(0); + + /* Prevent RSA-PSS private keys from negotiating an RSA signature, + * and RSA keys which cannot do RSA-PSS (e.g., smart card) from + * negotiating RSA-PSS sig. + */ + + if (se->pk != privkey->pk_algorithm) { /* if the PK algorithm of the signature differs to the one on the pubkey */ + if (!sign_supports_priv_pk_algorithm(se, privkey->pk_algorithm)) { + _gnutls_handshake_log("cannot use privkey of %s with %s\n", + gnutls_pk_get_name(privkey->pk_algorithm), se->name); + return 0; + } } - return key->preferred_sign_algo; + + if (privkey->type == GNUTLS_PRIVKEY_EXT) { + if (privkey->key.ext.info_func) { + int ret; + + ret = privkey->key.ext.info_func(privkey, + GNUTLS_SIGN_ALGO_TO_FLAGS(sign)|GNUTLS_PRIVKEY_INFO_HAVE_SIGN_ALGO, + privkey->key.ext.userdata); + if (ret != -1) + return ret; + + /* use the old flag */ + ret = privkey->key.ext.info_func(privkey, GNUTLS_PRIVKEY_INFO_SIGN_ALGO, + privkey->key.ext.userdata); + if (ret == (int)sign) + return 1; + } + + /* This key type is very limited on what it can handle */ + if (!PK_IS_OK_FOR_EXT2(se->pk)) + return gnutls_assert_val(0); + } +#ifdef ENABLE_PKCS11 + else if (privkey->type == GNUTLS_PRIVKEY_PKCS11) { + if (privkey->pk_algorithm == GNUTLS_PK_RSA && se->pk == GNUTLS_PK_RSA_PSS) { + if (!privkey->key.pkcs11->rsa_pss_ok) + return 0; + } + } +#endif + + return 1; } diff --git a/lib/privkey_raw.c b/lib/privkey_raw.c index 49f2f3cf16..5f1dc8c26c 100644 --- a/lib/privkey_raw.c +++ b/lib/privkey_raw.c @@ -14,7 +14,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ #include "gnutls_int.h" @@ -27,8 +27,6 @@ #include #include #include -#include -#include #include #include #include @@ -48,7 +46,8 @@ * * This function will export the RSA private key's parameters found * in the given structure. The new parameters will be allocated using - * gnutls_malloc() and will be stored in the appropriate datum. + * gnutls_malloc() and will be stored in the appropriate datum. For + * EdDSA keys, the @y value should be %NULL. * * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. * @@ -61,6 +60,39 @@ gnutls_privkey_export_rsa_raw(gnutls_privkey_t key, gnutls_datum_t * q, gnutls_datum_t * u, gnutls_datum_t * e1, gnutls_datum_t * e2) +{ + return gnutls_privkey_export_rsa_raw2(key, m, e, d, p, q, u, e1, e2, 0); +} + +/** + * gnutls_privkey_export_rsa_raw2: + * @key: Holds the certificate + * @m: will hold the modulus + * @e: will hold the public exponent + * @d: will hold the private exponent + * @p: will hold the first prime (p) + * @q: will hold the second prime (q) + * @u: will hold the coefficient + * @e1: will hold e1 = d mod (p-1) + * @e2: will hold e2 = d mod (q-1) + * @flags: flags from %gnutls_abstract_export_flags_t + * + * This function will export the RSA private key's parameters found + * in the given structure. The new parameters will be allocated using + * gnutls_malloc() and will be stored in the appropriate datum. + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.6.0 + **/ +int +gnutls_privkey_export_rsa_raw2(gnutls_privkey_t key, + gnutls_datum_t * m, gnutls_datum_t * e, + gnutls_datum_t * d, gnutls_datum_t * p, + gnutls_datum_t * q, gnutls_datum_t * u, + gnutls_datum_t * e1, + gnutls_datum_t * e2, + unsigned int flags) { gnutls_pk_params_st params; int ret; @@ -76,7 +108,7 @@ int ret; if (ret < 0) return gnutls_assert_val(ret); - ret = _gnutls_params_get_rsa_raw(¶ms, m, e, d, p, q, u, e1, e2); + ret = _gnutls_params_get_rsa_raw(¶ms, m, e, d, p, q, u, e1, e2, flags); gnutls_pk_params_release(¶ms); @@ -105,6 +137,33 @@ gnutls_privkey_export_dsa_raw(gnutls_privkey_t key, gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * g, gnutls_datum_t * y, gnutls_datum_t * x) +{ + return gnutls_privkey_export_dsa_raw2(key, p, q, g, y, x, 0); +} + +/** + * gnutls_privkey_export_dsa_raw2: + * @key: Holds the public key + * @p: will hold the p + * @q: will hold the q + * @g: will hold the g + * @y: will hold the y + * @x: will hold the x + * @flags: flags from %gnutls_abstract_export_flags_t + * + * This function will export the DSA private key's parameters found + * in the given structure. The new parameters will be allocated using + * gnutls_malloc() and will be stored in the appropriate datum. + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.6.0 + **/ +int +gnutls_privkey_export_dsa_raw2(gnutls_privkey_t key, + gnutls_datum_t * p, gnutls_datum_t * q, + gnutls_datum_t * g, gnutls_datum_t * y, + gnutls_datum_t * x, unsigned int flags) { gnutls_pk_params_st params; int ret; @@ -120,7 +179,7 @@ int ret; if (ret < 0) return gnutls_assert_val(ret); - ret = _gnutls_params_get_dsa_raw(¶ms, p, q, g, y, x); + ret = _gnutls_params_get_dsa_raw(¶ms, p, q, g, y, x, flags); gnutls_pk_params_release(¶ms); @@ -132,14 +191,17 @@ int ret; * gnutls_privkey_export_ecc_raw: * @key: Holds the public key * @curve: will hold the curve - * @x: will hold the x coordinate - * @y: will hold the y coordinate + * @x: will hold the x-coordinate + * @y: will hold the y-coordinate * @k: will hold the private key * * This function will export the ECC private key's parameters found * in the given structure. The new parameters will be allocated using * gnutls_malloc() and will be stored in the appropriate datum. * + * In EdDSA curves the @y parameter will be %NULL and the other parameters + * will be in the native format for the curve. + * * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. * * Since: 3.3.0 @@ -150,6 +212,37 @@ gnutls_privkey_export_ecc_raw(gnutls_privkey_t key, gnutls_datum_t * x, gnutls_datum_t * y, gnutls_datum_t * k) +{ + return gnutls_privkey_export_ecc_raw2(key, curve, x, y, k, 0); +} + +/** + * gnutls_privkey_export_ecc_raw2: + * @key: Holds the public key + * @curve: will hold the curve + * @x: will hold the x-coordinate + * @y: will hold the y-coordinate + * @k: will hold the private key + * @flags: flags from %gnutls_abstract_export_flags_t + * + * This function will export the ECC private key's parameters found + * in the given structure. The new parameters will be allocated using + * gnutls_malloc() and will be stored in the appropriate datum. + * + * In EdDSA curves the @y parameter will be %NULL and the other parameters + * will be in the native format for the curve. + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.6.0 + **/ +int +gnutls_privkey_export_ecc_raw2(gnutls_privkey_t key, + gnutls_ecc_curve_t * curve, + gnutls_datum_t * x, + gnutls_datum_t * y, + gnutls_datum_t * k, + unsigned int flags) { gnutls_pk_params_st params; int ret; @@ -165,7 +258,61 @@ int ret; if (ret < 0) return gnutls_assert_val(ret); - ret = _gnutls_params_get_ecc_raw(¶ms, curve, x, y, k); + ret = _gnutls_params_get_ecc_raw(¶ms, curve, x, y, k, flags); + + gnutls_pk_params_release(¶ms); + + return ret; +} + +/** + * gnutls_privkey_export_gost_raw2: + * @key: Holds the public key + * @curve: will hold the curve + * @digest: will hold the digest + * @paramset: will hold the GOST parameter set ID + * @x: will hold the x-coordinate + * @y: will hold the y-coordinate + * @k: will hold the private key + * @flags: flags from %gnutls_abstract_export_flags_t + * + * This function will export the GOST private key's parameters found + * in the given structure. The new parameters will be allocated using + * gnutls_malloc() and will be stored in the appropriate datum. + * + * Note: parameters will be stored with least significant byte first. On + * version 3.6.3 this was incorrectly returned in big-endian format. + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.6.3 + **/ +int +gnutls_privkey_export_gost_raw2(gnutls_privkey_t key, + gnutls_ecc_curve_t * curve, + gnutls_digest_algorithm_t * digest, + gnutls_gost_paramset_t * paramset, + gnutls_datum_t * x, + gnutls_datum_t * y, + gnutls_datum_t * k, + unsigned int flags) +{ + gnutls_pk_params_st params; + int ret; + + if (key == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + gnutls_pk_params_init(¶ms); + + ret = _gnutls_privkey_get_mpis(key, ¶ms); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_params_get_gost_raw(¶ms, curve, digest, paramset, + x, y, k, flags); gnutls_pk_params_release(¶ms); @@ -282,14 +429,17 @@ gnutls_x509_privkey_t xkey; * gnutls_privkey_import_ecc_raw: * @key: The key * @curve: holds the curve - * @x: holds the x - * @y: holds the y - * @k: holds the k + * @x: holds the x-coordinate + * @y: holds the y-coordinate + * @k: holds the k (private key) * * This function will convert the given elliptic curve parameters to the * native #gnutls_privkey_t format. The output will be stored * in @key. * + * In EdDSA curves the @y parameter should be %NULL and the @x and @k parameters + * must be in the native format for the curve. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * @@ -297,10 +447,10 @@ gnutls_x509_privkey_t xkey; **/ int gnutls_privkey_import_ecc_raw(gnutls_privkey_t key, - gnutls_ecc_curve_t curve, - const gnutls_datum_t * x, - const gnutls_datum_t * y, - const gnutls_datum_t * k) + gnutls_ecc_curve_t curve, + const gnutls_datum_t * x, + const gnutls_datum_t * y, + const gnutls_datum_t * k) { int ret; gnutls_x509_privkey_t xkey; @@ -328,3 +478,62 @@ gnutls_x509_privkey_t xkey; return ret; } +/** + * gnutls_privkey_import_gost_raw: + * @key: The key + * @curve: holds the curve + * @digest: holds the digest + * @paramset: holds the GOST parameter set ID + * @x: holds the x-coordinate + * @y: holds the y-coordinate + * @k: holds the k (private key) + * + * This function will convert the given GOST private key's parameters to the + * native #gnutls_privkey_t format. The output will be stored + * in @key. @digest should be one of GNUTLS_DIG_GOSR_94, + * GNUTLS_DIG_STREEBOG_256 or GNUTLS_DIG_STREEBOG_512. If @paramset is set to + * GNUTLS_GOST_PARAMSET_UNKNOWN default one will be selected depending on + * @digest. + * + * Note: parameters should be stored with least significant byte first. On + * version 3.6.3 big-endian format was used incorrectly. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.3 + **/ +int +gnutls_privkey_import_gost_raw(gnutls_privkey_t key, + gnutls_ecc_curve_t curve, + gnutls_digest_algorithm_t digest, + gnutls_gost_paramset_t paramset, + const gnutls_datum_t * x, + const gnutls_datum_t * y, + const gnutls_datum_t * k) +{ + int ret; + gnutls_x509_privkey_t xkey; + + ret = gnutls_x509_privkey_init(&xkey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = gnutls_x509_privkey_import_gost_raw(xkey, curve, digest, paramset, x, y, k); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + ret = gnutls_privkey_import_x509(key, xkey, GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + return 0; + +error: + gnutls_x509_privkey_deinit(xkey); + return ret; +} diff --git a/lib/profiles.c b/lib/profiles.c new file mode 100644 index 0000000000..d74cc2caaa --- /dev/null +++ b/lib/profiles.c @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include +#include "errors.h" +#include +#include "c-strcase.h" +#include "profiles.h" + +typedef struct { + const char *name; + gnutls_certificate_verification_profiles_t profile; + gnutls_sec_param_t sec_param; +} gnutls_profile_entry; + +static const gnutls_profile_entry profiles[] = { + {"Very weak", GNUTLS_PROFILE_VERY_WEAK, GNUTLS_SEC_PARAM_VERY_WEAK}, + {"Low", GNUTLS_PROFILE_LOW, GNUTLS_SEC_PARAM_LOW}, + {"Legacy", GNUTLS_PROFILE_LEGACY, GNUTLS_SEC_PARAM_LEGACY}, + {"Medium", GNUTLS_PROFILE_MEDIUM, GNUTLS_SEC_PARAM_MEDIUM}, + {"High", GNUTLS_PROFILE_HIGH, GNUTLS_SEC_PARAM_HIGH}, + {"Ultra", GNUTLS_PROFILE_ULTRA, GNUTLS_SEC_PARAM_ULTRA}, + {"Future", GNUTLS_PROFILE_FUTURE, GNUTLS_SEC_PARAM_FUTURE}, + {"SuiteB128", GNUTLS_PROFILE_SUITEB128, GNUTLS_SEC_PARAM_HIGH}, + {"SuiteB192", GNUTLS_PROFILE_SUITEB192, GNUTLS_SEC_PARAM_ULTRA}, + {NULL, 0, 0} +}; + +gnutls_sec_param_t _gnutls_profile_to_sec_level(gnutls_certificate_verification_profiles_t profile) +{ + const gnutls_profile_entry *p; + + for(p = profiles; p->name != NULL; p++) { + if (profile == p->profile) + return p->sec_param; + } + + return GNUTLS_SEC_PARAM_UNKNOWN; +} + +/** + * gnutls_certificate_verification_profile_get_id: + * @name: is a profile name + * + * Convert a string to a #gnutls_certificate_verification_profiles_t value. The names are + * compared in a case insensitive way. + * + * Returns: a #gnutls_certificate_verification_profiles_t id of the specified profile, + * or %GNUTLS_PROFILE_UNKNOWN on failure. + **/ +gnutls_certificate_verification_profiles_t gnutls_certificate_verification_profile_get_id(const char *name) +{ + const gnutls_profile_entry *p; + + if (name == NULL) + return GNUTLS_PROFILE_UNKNOWN; + + for (p = profiles; p->name != NULL; p++) { + if (c_strcasecmp(p->name, name) == 0) + return p->profile; + } + + return GNUTLS_PROFILE_UNKNOWN; +} + +/** + * gnutls_certificate_verification_profile_get_name: + * @id: is a profile ID + * + * Convert a #gnutls_certificate_verification_profiles_t value to a string. + * + * Returns: a string that contains the name of the specified profile or %NULL. + **/ +const char * +gnutls_certificate_verification_profile_get_name(gnutls_certificate_verification_profiles_t id) +{ + const gnutls_profile_entry *p; + + for (p = profiles; p->name != NULL; p++) { + if (p->profile == id) + return p->name; + } + + return NULL; +} diff --git a/lib/profiles.h b/lib/profiles.h new file mode 100644 index 0000000000..ee49f9b08f --- /dev/null +++ b/lib/profiles.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_PROFILES_H +#define GNUTLS_LIB_PROFILES_H + +#include +#include + +gnutls_sec_param_t _gnutls_profile_to_sec_level(gnutls_certificate_verification_profiles_t profile) __GNUTLS_PURE__; + +gnutls_certificate_verification_profiles_t _gnutls_get_system_wide_verification_profile(void); + +#endif /* GNUTLS_LIB_PROFILES_H */ diff --git a/lib/psk.c b/lib/psk.c index ba2e4874d3..6ea3adb63c 100644 --- a/lib/psk.c +++ b/lib/psk.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -24,6 +24,7 @@ #include "gnutls_int.h" #include "errors.h" +#include #include #include @@ -67,6 +68,8 @@ gnutls_psk_allocate_client_credentials(gnutls_psk_client_credentials_t * if (*sc == NULL) return GNUTLS_E_MEMORY_ERROR; + /* TLS 1.3 - Default binder HMAC algorithm is SHA-256 */ + (*sc)->binder_algo = _gnutls_mac_to_entry(GNUTLS_MAC_SHA256); return 0; } @@ -81,9 +84,9 @@ gnutls_psk_allocate_client_credentials(gnutls_psk_client_credentials_t * * This function sets the username and password, in a * gnutls_psk_client_credentials_t type. Those will be used in * PSK authentication. @username should be an ASCII string or UTF-8 - * strings prepared using the "SASLprep" profile of "stringprep". The - * key can be either in raw byte format or in Hex format (without the - * 0x prefix). + * string. In case of a UTF-8 string it is recommended to be following + * the PRECIS framework for usernames (rfc8265). The key can be either + * in raw byte format or in Hex format (without the 0x prefix). * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise * an error code is returned. @@ -93,16 +96,47 @@ gnutls_psk_set_client_credentials(gnutls_psk_client_credentials_t res, const char *username, const gnutls_datum_t * key, gnutls_psk_key_flags flags) +{ + gnutls_datum_t dat; + + if (username == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + dat.data = (unsigned char *) username; + dat.size = strlen(username); + + return gnutls_psk_set_client_credentials2(res, &dat, key, flags); +} + +/** + * gnutls_psk_set_client_credentials2: + * @res: is a #gnutls_psk_client_credentials_t type. + * @username: is the userid + * @key: is the user's key + * @flags: indicate the format of the key, either + * %GNUTLS_PSK_KEY_RAW or %GNUTLS_PSK_KEY_HEX. + * + * This function is identical to gnutls_psk_set_client_credentials(), + * except that it allows a non-null-terminated username to be introduced. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise + * an error code is returned. + */ +int +gnutls_psk_set_client_credentials2(gnutls_psk_client_credentials_t res, + const gnutls_datum_t *username, + const gnutls_datum_t *key, + gnutls_psk_key_flags flags) { int ret; - if (username == NULL || key == NULL || key->data == NULL) { + if (username == NULL || username->data == NULL || key == NULL || key->data == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } ret = - _gnutls_set_datum(&res->username, username, strlen(username)); + _gnutls_set_datum(&res->username, username->data, username->size); if (ret < 0) return ret; @@ -182,6 +216,8 @@ gnutls_psk_allocate_server_credentials(gnutls_psk_server_credentials_t * if (*sc == NULL) return GNUTLS_E_MEMORY_ERROR; + /* TLS 1.3 - Default binder HMAC algorithm is SHA-256 */ + (*sc)->binder_algo = _gnutls_mac_to_entry(GNUTLS_MAC_SHA256); return 0; } @@ -251,6 +287,19 @@ gnutls_psk_set_server_credentials_hint(gnutls_psk_server_credentials_t res, return 0; } +static int call_server_callback_legacy(gnutls_session_t session, + const gnutls_datum_t *username, + gnutls_datum_t *key) +{ + gnutls_psk_server_credentials_t cred = + (gnutls_psk_server_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_PSK); + if (unlikely(cred == NULL)) + return gnutls_assert_val(-1); + + return cred->pwd_callback_legacy(session, (const char *) username->data, key); +} + /** * gnutls_psk_set_server_credentials_function: * @cred: is a #gnutls_psk_server_credentials_t type. @@ -276,8 +325,65 @@ gnutls_psk_set_server_credentials_function(gnutls_psk_server_credentials_t cred, gnutls_psk_server_credentials_function * func) +{ + cred->pwd_callback_legacy = func; + cred->pwd_callback = call_server_callback_legacy; +} + +/** + * gnutls_psk_set_server_credentials_function2: + * @cred: is a #gnutls_psk_server_credentials_t type. + * @func: is the callback function + * + * This function can be used to set a callback to retrieve the user's PSK credentials. + * The callback's function form is: + * int (*callback)(gnutls_session_t, const gnutls_datum_t* username, + * gnutls_datum_t* key); + * + * This callback function has the same semantics as that of gnutls_psk_set_server_credentials_function(), + * but it allows non-string usernames to be used. + * + * @username contains the actual username. + * The @key must be filled in using the gnutls_malloc(). + * + * In case the callback returned a negative number then gnutls will + * assume that the username does not exist. + * + * The callback function will only be called once per handshake. The + * callback function should return 0 on success, while -1 indicates + * an error. + **/ +void +gnutls_psk_set_server_credentials_function2(gnutls_psk_server_credentials_t cred, + gnutls_psk_server_credentials_function2 func) { cred->pwd_callback = func; + cred->pwd_callback_legacy = NULL; +} + +static int call_client_callback_legacy(gnutls_session_t session, + gnutls_datum_t *username, + gnutls_datum_t *key) +{ + int ret; + char *user_p; + gnutls_psk_client_credentials_t cred = + (gnutls_psk_client_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_PSK); + if (unlikely(cred == NULL)) + return gnutls_assert_val(-1); + + + ret = cred->get_function_legacy(session, &user_p, key); + + if (ret) + goto end; + + username->data = (uint8_t *) user_p; + username->size = strlen(user_p); + +end: + return ret; } /** @@ -292,8 +398,9 @@ gnutls_psk_set_server_credentials_function(gnutls_psk_server_credentials_t * gnutls_datum_t* key); * * The @username and @key->data must be allocated using gnutls_malloc(). - * @username should be ASCII strings or UTF-8 strings prepared using - * the "SASLprep" profile of "stringprep". + * The @username should be an ASCII string or UTF-8 + * string. In case of a UTF-8 string it is recommended to be following + * the PRECIS framework for usernames (rfc8265). * * The callback function will be called once per handshake. * @@ -305,8 +412,41 @@ gnutls_psk_set_client_credentials_function(gnutls_psk_client_credentials_t cred, gnutls_psk_client_credentials_function * func) +{ + cred->get_function = call_client_callback_legacy; + cred->get_function_legacy = func; +} + +/** + * gnutls_psk_set_client_credentials_function2: + * @cred: is a #gnutls_psk_server_credentials_t type. + * @func: is the callback function + * + * This function can be used to set a callback to retrieve the username and + * password for client PSK authentication. + * The callback's function form is: + * int (*callback)(gnutls_session_t, gnutls_datum_t* username, + * gnutls_datum_t* key); + * + * This callback function has the same semantics as that of gnutls_psk_set_client_credentials_function(), + * but it allows non-string usernames to be used. + * + * The @username and @key->data must be allocated using gnutls_malloc(). + * The @username should be an ASCII string or UTF-8 + * string. In case of a UTF-8 string it is recommended to be following + * the PRECIS framework for usernames (rfc8265). + * + * The callback function will be called once per handshake. + * + * The callback function should return 0 on success. + * -1 indicates an error. + **/ +void +gnutls_psk_set_client_credentials_function2(gnutls_psk_client_credentials_t cred, + gnutls_psk_client_credentials_function2 *func) { cred->get_function = func; + cred->get_function_legacy = NULL; } @@ -317,24 +457,66 @@ gnutls_psk_set_client_credentials_function(gnutls_psk_client_credentials_t * This should only be called in case of PSK authentication and in * case of a server. * - * Returns: the username of the peer, or %NULL in case of an error. + * The returned pointer should be considered constant (do not free) and valid + * for the lifetime of the session. + * + * This function will return %NULL if the username has embedded NULL bytes. + * In that case, gnutls_psk_server_get_username2() should be used to retrieve the username. + * + * Returns: the username of the peer, or %NULL in case of an error, + * or if the username has embedded NULLs. **/ const char *gnutls_psk_server_get_username(gnutls_session_t session) { psk_auth_info_t info; - CHECK_AUTH(GNUTLS_CRD_PSK, NULL); + CHECK_AUTH_TYPE(GNUTLS_CRD_PSK, NULL); info = _gnutls_get_auth_info(session, GNUTLS_CRD_PSK); if (info == NULL) return NULL; - if (info->username[0] != 0) + if (info->username[0] != 0 && !_gnutls_has_embedded_null(info->username, info->username_len)) return info->username; return NULL; } +/** + * gnutls_psk_server_get_username2: + * @session: is a gnutls session + * @username: a datum that will be filled in by this function + * + * Return a pointer to the username of the peer in the supplied datum. Does not + * need to be null-terminated. + * + * This should only be called in case of PSK authentication and in + * case of a server. + * + * The returned pointer should be considered constant (do not free) and valid + * for the lifetime of the session. + * + * Returns: %GNUTLS_E_SUCCESS, or a negative value in case of an error. + **/ +int gnutls_psk_server_get_username2(gnutls_session_t session, gnutls_datum_t *username) +{ + psk_auth_info_t info; + + CHECK_AUTH_TYPE(GNUTLS_CRD_PSK, GNUTLS_E_INVALID_REQUEST); + + info = _gnutls_get_auth_info(session, GNUTLS_CRD_PSK); + if (info == NULL) + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + + if (info->username_len > 0) { + username->data = (unsigned char *) info->username; + username->size = info->username_len; + return 0; + } + + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; +} + /** * gnutls_psk_client_get_hint: * @session: is a gnutls session @@ -343,7 +525,10 @@ const char *gnutls_psk_server_get_username(gnutls_session_t session) * username to use. This should only be called in case of PSK * authentication and in case of a client. * - * Returns: the identity hint of the peer, or %NULL in case of an error. + * Note: there is no hint in TLS 1.3, so this function will return %NULL + * if TLS 1.3 has been negotiated. + * + * Returns: the identity hint of the peer, or %NULL in case of an error or if TLS 1.3 is being used. * * Since: 2.4.0 **/ @@ -351,7 +536,7 @@ const char *gnutls_psk_client_get_hint(gnutls_session_t session) { psk_auth_info_t info; - CHECK_AUTH(GNUTLS_CRD_PSK, NULL); + CHECK_AUTH_TYPE(GNUTLS_CRD_PSK, NULL); info = _gnutls_get_auth_info(session, GNUTLS_CRD_PSK); if (info == NULL) @@ -371,12 +556,24 @@ const char *gnutls_psk_client_get_hint(gnutls_session_t session) * This function will set the Diffie-Hellman parameters for an * anonymous server to use. These parameters will be used in * Diffie-Hellman exchange with PSK cipher suites. + * + * Deprecated: This function is unnecessary and discouraged on GnuTLS 3.6.0 + * or later. Since 3.6.0, DH parameters are negotiated + * following RFC7919. + * **/ void gnutls_psk_set_server_dh_params(gnutls_psk_server_credentials_t res, gnutls_dh_params_t dh_params) { + if (res->deinit_dh_params) { + res->deinit_dh_params = 0; + gnutls_dh_params_deinit(res->dh_params); + res->dh_params = NULL; + } + res->dh_params = dh_params; + res->dh_sec_param = gnutls_pk_bits_to_sec_param(GNUTLS_PK_DH, _gnutls_mpi_get_nbits(dh_params->params[0])); } /** @@ -389,6 +586,10 @@ gnutls_psk_set_server_dh_params(gnutls_psk_server_credentials_t res, * Ephemeral Diffie-Hellman cipher suites and will be selected from * the FFDHE set of RFC7919 according to the security level provided. * + * Deprecated: This function is unnecessary and discouraged on GnuTLS 3.6.0 + * or later. Since 3.6.0, DH parameters are negotiated + * following RFC7919. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * @@ -398,19 +599,7 @@ int gnutls_psk_set_server_known_dh_params(gnutls_psk_server_credentials_t res, gnutls_sec_param_t sec_param) { - int ret; - - if (res->deinit_dh_params) { - res->deinit_dh_params = 0; - gnutls_dh_params_deinit(res->dh_params); - res->dh_params = NULL; - } - - ret = _gnutls_set_cred_dh_params(&res->dh_params, sec_param); - if (ret < 0) - return gnutls_assert_val(ret); - - res->deinit_dh_params = 1; + res->dh_sec_param = sec_param; return 0; } @@ -423,6 +612,11 @@ gnutls_psk_set_server_known_dh_params(gnutls_psk_server_credentials_t res, * This function will set a callback in order for the server to get * the Diffie-Hellman parameters for PSK authentication. The callback * should return %GNUTLS_E_SUCCESS (0) on success. + * + * Deprecated: This function is unnecessary and discouraged on GnuTLS 3.6.0 + * or later. Since 3.6.0, DH parameters are negotiated + * following RFC7919. + * **/ void gnutls_psk_set_server_params_function(gnutls_psk_server_credentials_t res, @@ -439,6 +633,11 @@ gnutls_psk_set_server_params_function(gnutls_psk_server_credentials_t res, * This function will set a callback in order for the server to get * the Diffie-Hellman or RSA parameters for PSK authentication. The * callback should return %GNUTLS_E_SUCCESS (0) on success. + * + * Deprecated: This function is unnecessary and discouraged on GnuTLS 3.6.0 + * or later. Since 3.6.0, DH parameters are negotiated + * following RFC7919. + * **/ void gnutls_psk_set_params_function(gnutls_psk_server_credentials_t res, diff --git a/lib/pubkey.c b/lib/pubkey.c index 7c42f67805..de95a04c37 100644 --- a/lib/pubkey.c +++ b/lib/pubkey.c @@ -1,6 +1,7 @@ /* * GnuTLS public key support * Copyright (C) 2010-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -15,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see */ #include "gnutls_int.h" @@ -29,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -38,16 +38,34 @@ #include "urls.h" #include +static int +pubkey_verify_hashed_data(const gnutls_sign_entry_st *se, + const mac_entry_st *me, + const gnutls_datum_t * hash, + const gnutls_datum_t * signature, + gnutls_pk_params_st * params, + gnutls_x509_spki_st * sign_params, + unsigned flags); -unsigned pubkey_to_bits(gnutls_pk_algorithm_t pk, gnutls_pk_params_st * params) +static +int pubkey_supports_sig(gnutls_pubkey_t pubkey, + const gnutls_sign_entry_st *se); + +unsigned pubkey_to_bits(const gnutls_pk_params_st * params) { - switch (pk) { + switch (params->algo) { case GNUTLS_PK_RSA: + case GNUTLS_PK_RSA_PSS: return _gnutls_mpi_get_nbits(params->params[RSA_MODULUS]); case GNUTLS_PK_DSA: return _gnutls_mpi_get_nbits(params->params[DSA_P]); - case GNUTLS_PK_EC: - return gnutls_ecc_curve_get_size(params->flags) * 8; + case GNUTLS_PK_ECDSA: + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + return gnutls_ecc_curve_get_size(params->curve) * 8; default: return 0; } @@ -72,7 +90,7 @@ int gnutls_pubkey_get_pk_algorithm(gnutls_pubkey_t key, unsigned int *bits) if (bits) *bits = key->bits; - return key->pk_algorithm; + return key->params.algo; } /** @@ -158,8 +176,11 @@ gnutls_pubkey_import_x509(gnutls_pubkey_t key, gnutls_x509_crt_t crt, gnutls_pk_params_release(&key->params); /* params initialized in _gnutls_x509_crt_get_mpis */ - key->pk_algorithm = - gnutls_x509_crt_get_pk_algorithm(crt, &key->bits); + ret = gnutls_x509_crt_get_pk_algorithm(crt, &key->bits); + if (ret < 0) + return gnutls_assert_val(ret); + + key->params.algo = ret; ret = gnutls_x509_crt_get_key_usage(crt, &key->key_usage, NULL); if (ret < 0) @@ -197,8 +218,7 @@ gnutls_pubkey_import_x509_crq(gnutls_pubkey_t key, gnutls_x509_crq_t crq, gnutls_pk_params_release(&key->params); /* params initialized in _gnutls_x509_crq_get_mpis */ - key->pk_algorithm = - gnutls_x509_crq_get_pk_algorithm(crq, &key->bits); + key->params.algo = gnutls_x509_crq_get_pk_algorithm(crq, &key->bits); ret = gnutls_x509_crq_get_key_usage(crq, &key->key_usage, NULL); if (ret < 0) @@ -238,10 +258,8 @@ gnutls_pubkey_import_privkey(gnutls_pubkey_t key, gnutls_privkey_t pkey, gnutls_pk_params_release(&key->params); gnutls_pk_params_init(&key->params); - key->pk_algorithm = - gnutls_privkey_get_pk_algorithm(pkey, &key->bits); - key->key_usage = usage; + key->params.algo = gnutls_privkey_get_pk_algorithm(pkey, &key->bits); return _gnutls_privkey_get_public_mpis(pkey, &key->params); } @@ -280,22 +298,57 @@ gnutls_pubkey_get_preferred_hash_algorithm(gnutls_pubkey_t key, if (mand) *mand = 0; - switch (key->pk_algorithm) { + switch (key->params.algo) { case GNUTLS_PK_DSA: if (mand) *mand = 1; - /* fallthrough */ - case GNUTLS_PK_EC: + FALLTHROUGH; + case GNUTLS_PK_ECDSA: - me = _gnutls_dsa_q_to_hash(key->pk_algorithm, &key->params, NULL); + me = _gnutls_dsa_q_to_hash(&key->params, NULL); if (hash) *hash = (gnutls_digest_algorithm_t)me->id; + ret = 0; + break; + case GNUTLS_PK_EDDSA_ED25519: + if (hash) + *hash = GNUTLS_DIG_SHA512; + + ret = 0; + break; + case GNUTLS_PK_EDDSA_ED448: + if (hash) + *hash = GNUTLS_DIG_SHAKE_256; + + ret = 0; + break; + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + if (hash) + *hash = _gnutls_gost_digest(key->params.algo); + if (mand) + *mand = 1; + + ret = 0; + break; + case GNUTLS_PK_RSA_PSS: + if (mand && key->params.spki.rsa_pss_dig) + *mand = 1; + + if (hash) { + if (key->params.spki.rsa_pss_dig) { + *hash = key->params.spki.rsa_pss_dig; + } else { + *hash = _gnutls_pk_bits_to_sha_hash(pubkey_to_bits(&key->params)); + } + } ret = 0; break; case GNUTLS_PK_RSA: if (hash) - *hash = GNUTLS_DIG_SHA256; + *hash = _gnutls_pk_bits_to_sha_hash(pubkey_to_bits(&key->params)); ret = 0; break; @@ -309,6 +362,141 @@ gnutls_pubkey_get_preferred_hash_algorithm(gnutls_pubkey_t key, #ifdef ENABLE_PKCS11 +/* The EC_PARAMS attribute can contain either printable string with curve name + * or OID defined in RFC 8410 */ +static int +gnutls_pubkey_parse_ecc_eddsa_params(const gnutls_datum_t *parameters, + gnutls_ecc_curve_t *outcurve) +{ + gnutls_ecc_curve_t curve = GNUTLS_ECC_CURVE_INVALID; + ASN1_TYPE asn1 = ASN1_TYPE_EMPTY; + unsigned int etype = ASN1_ETYPE_INVALID; + char str[MAX_OID_SIZE]; + int str_size; + int ret; + + ret = asn1_create_element(_gnutls_get_gnutls_asn(), + "GNUTLS.pkcs-11-ec-Parameters", &asn1); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(ret); + } + + ret = asn1_der_decoding(&asn1, parameters->data, parameters->size, + NULL); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } + + /* Read the type of choice. + */ + str_size = sizeof(str) - 1; + ret = asn1_read_value(asn1, "", str, &str_size); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } + str[str_size] = 0; + + /* Convert the choice to enum type */ + if (strcmp(str, "oId") == 0) { + etype = ASN1_ETYPE_OBJECT_ID; + } else if (strcmp(str, "curveName") == 0) { + etype = ASN1_ETYPE_PRINTABLE_STRING; + } + + str_size = sizeof(str) - 1; + switch (etype) { + case ASN1_ETYPE_OBJECT_ID: + ret = asn1_read_value(asn1, "oId", str, &str_size); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + break; + } + + curve = gnutls_oid_to_ecc_curve(str); + if (curve != GNUTLS_ECC_CURVE_ED25519 && + curve != GNUTLS_ECC_CURVE_ED448) { + _gnutls_debug_log("Curve %s is not supported for EdDSA\n", str); + gnutls_assert(); + curve = GNUTLS_ECC_CURVE_INVALID; + ret = GNUTLS_E_ECC_UNSUPPORTED_CURVE; + break; + } + + ret = GNUTLS_E_SUCCESS; + break; + + case ASN1_ETYPE_PRINTABLE_STRING: + ret = asn1_read_value(asn1, "curveName", str, &str_size); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + break; + } + + if (str_size == strlen("edwards25519") && + strncmp(str, "edwards25519", str_size) == 0) { + curve = GNUTLS_ECC_CURVE_ED25519; + ret = GNUTLS_E_SUCCESS; + break; + } else if (str_size == strlen("edwards448") && + strncmp(str, "edwards448", str_size) == 0) { + curve = GNUTLS_ECC_CURVE_ED448; + ret = GNUTLS_E_SUCCESS; + break; + } + /* FALLTHROUGH */ + + default: + /* Neither of CHOICEs found. Fail */ + gnutls_assert(); + ret = GNUTLS_E_ECC_UNSUPPORTED_CURVE; + curve = GNUTLS_ECC_CURVE_INVALID; + break; + } + + + cleanup: + asn1_delete_structure(&asn1); + *outcurve = curve; + return ret; +} + + +static int +gnutls_pubkey_import_ecc_eddsa(gnutls_pubkey_t key, + const gnutls_datum_t * parameters, + const gnutls_datum_t * ecpoint) +{ + int ret; + + gnutls_ecc_curve_t curve = GNUTLS_ECC_CURVE_INVALID; + gnutls_datum_t raw_point = {NULL, 0}; + + ret = gnutls_pubkey_parse_ecc_eddsa_params(parameters, &curve); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + ret = _gnutls_x509_decode_string(ASN1_ETYPE_OCTET_STRING, + ecpoint->data, ecpoint->size, + &raw_point, 0); + if (ret < 0) { + gnutls_assert(); + gnutls_free(raw_point.data); + return ret; + } + ret = gnutls_pubkey_import_ecc_raw(key, curve, &raw_point, NULL); + + gnutls_free(raw_point.data); + return ret; +} + /** * gnutls_pubkey_import_pkcs11: * @key: The public key @@ -371,6 +559,7 @@ gnutls_pubkey_import_pkcs11(gnutls_pubkey_t key, switch (obj->pk_algorithm) { case GNUTLS_PK_RSA: + case GNUTLS_PK_RSA_PSS: ret = gnutls_pubkey_import_rsa_raw(key, &obj->pubkey[0], &obj->pubkey[1]); break; @@ -384,6 +573,10 @@ gnutls_pubkey_import_pkcs11(gnutls_pubkey_t key, ret = gnutls_pubkey_import_ecc_x962(key, &obj->pubkey[0], &obj->pubkey[1]); break; + case GNUTLS_PK_EDDSA_ED25519: + ret = gnutls_pubkey_import_ecc_eddsa(key, &obj->pubkey[0], + &obj->pubkey[1]); + break; default: gnutls_assert(); return GNUTLS_E_UNIMPLEMENTED_FEATURE; @@ -399,239 +592,6 @@ gnutls_pubkey_import_pkcs11(gnutls_pubkey_t key, #endif /* ENABLE_PKCS11 */ -#ifdef ENABLE_OPENPGP - -#define OPENPGP_KEY_PRIMARY 2 -#define OPENPGP_KEY_SUBKEY 1 - - -/** - * gnutls_pubkey_import_openpgp: - * @key: The public key - * @crt: The certificate to be imported - * @flags: should be zero - * - * Imports a public key from an openpgp key. This function will import - * the given public key to the abstract #gnutls_pubkey_t - * type. The subkey set as preferred will be imported or the - * master key otherwise. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - * - * Since: 2.12.0 - **/ -int -gnutls_pubkey_import_openpgp(gnutls_pubkey_t key, - gnutls_openpgp_crt_t crt, unsigned int flags) -{ - int ret, idx; - uint32_t kid32[2]; - uint32_t *k; - uint8_t keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - size_t len; - - len = sizeof(key->openpgp_key_fpr); - ret = - gnutls_openpgp_crt_get_fingerprint(crt, key->openpgp_key_fpr, - &len); - if (ret < 0) - return gnutls_assert_val(ret); - key->openpgp_key_fpr_set = 1; - - ret = gnutls_openpgp_crt_get_preferred_key_id(crt, keyid); - if (ret == GNUTLS_E_OPENPGP_PREFERRED_KEY_ERROR) { - key->pk_algorithm = - gnutls_openpgp_crt_get_pk_algorithm(crt, &key->bits); - key->openpgp_key_id_set = OPENPGP_KEY_PRIMARY; - - ret = - gnutls_openpgp_crt_get_key_id(crt, - key->openpgp_key_id); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = - gnutls_openpgp_crt_get_key_usage(crt, &key->key_usage); - if (ret < 0) - key->key_usage = 0; - - k = NULL; - } else { - if (ret < 0) { - gnutls_assert(); - return ret; - } - key->openpgp_key_id_set = OPENPGP_KEY_SUBKEY; - - KEYID_IMPORT(kid32, keyid); - k = kid32; - - idx = gnutls_openpgp_crt_get_subkey_idx(crt, keyid); - - ret = - gnutls_openpgp_crt_get_subkey_id(crt, idx, - key->openpgp_key_id); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = - gnutls_openpgp_crt_get_subkey_usage(crt, idx, - &key->key_usage); - if (ret < 0) - key->key_usage = 0; - - key->pk_algorithm = - gnutls_openpgp_crt_get_subkey_pk_algorithm(crt, idx, - NULL); - } - - ret = _gnutls_openpgp_crt_get_mpis(crt, k, &key->params); - if (ret < 0) - return gnutls_assert_val(ret); - - return 0; -} - -/** - * gnutls_pubkey_get_openpgp_key_id: - * @key: Holds the public key - * @flags: should be 0 or %GNUTLS_PUBKEY_GET_OPENPGP_FINGERPRINT - * @output_data: will contain the key ID - * @output_data_size: holds the size of output_data (and will be - * replaced by the actual size of parameters) - * @subkey: Will be non zero if the key ID corresponds to a subkey - * - * This function returns the OpenPGP key ID of the corresponding key. - * The key is a unique ID that depends on the public - * key parameters. - * - * If the flag %GNUTLS_PUBKEY_GET_OPENPGP_FINGERPRINT is specified - * this function returns the fingerprint of the master key. - * - * If the buffer provided is not long enough to hold the output, then - * *output_data_size is updated and %GNUTLS_E_SHORT_MEMORY_BUFFER will - * be returned. The output is %GNUTLS_OPENPGP_KEYID_SIZE bytes long. - * - * Returns: In case of failure a negative error code will be - * returned, and 0 on success. - * - * Since: 3.0 - **/ -int -gnutls_pubkey_get_openpgp_key_id(gnutls_pubkey_t key, unsigned int flags, - unsigned char *output_data, - size_t * output_data_size, - unsigned int *subkey) -{ - if (key == NULL) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - if (flags & GNUTLS_PUBKEY_GET_OPENPGP_FINGERPRINT) { - if (*output_data_size < sizeof(key->openpgp_key_fpr)) { - *output_data_size = sizeof(key->openpgp_key_fpr); - return - gnutls_assert_val - (GNUTLS_E_SHORT_MEMORY_BUFFER); - } - - if (key->openpgp_key_fpr_set == 0) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - - if (output_data) - memcpy(output_data, key->openpgp_key_fpr, - sizeof(key->openpgp_key_fpr)); - *output_data_size = sizeof(key->openpgp_key_fpr); - - return 0; - } - - if (*output_data_size < sizeof(key->openpgp_key_id)) { - *output_data_size = sizeof(key->openpgp_key_id); - return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER); - } - - if (key->openpgp_key_id_set == 0) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - - if (subkey) { - if (key->openpgp_key_id_set == OPENPGP_KEY_SUBKEY) - *subkey = 1; - else - *subkey = 0; - } - - if (output_data) { - memcpy(output_data, key->openpgp_key_id, - sizeof(key->openpgp_key_id)); - } - *output_data_size = sizeof(key->openpgp_key_id); - - return 0; -} - -/** - * gnutls_pubkey_import_openpgp_raw: - * @pkey: The public key - * @data: The public key data to be imported - * @format: The format of the public key - * @keyid: The key id to use (optional) - * @flags: Should be zero - * - * This function will import the given public key to the abstract - * #gnutls_pubkey_t type. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - * - * Since: 3.1.3 - **/ -int gnutls_pubkey_import_openpgp_raw(gnutls_pubkey_t pkey, - const gnutls_datum_t * data, - gnutls_openpgp_crt_fmt_t format, - const gnutls_openpgp_keyid_t keyid, - unsigned int flags) -{ - gnutls_openpgp_crt_t xpriv; - int ret; - - ret = gnutls_openpgp_crt_init(&xpriv); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = gnutls_openpgp_crt_import(xpriv, data, format); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - if (keyid) { - ret = - gnutls_openpgp_crt_set_preferred_key_id(xpriv, keyid); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - } - - ret = gnutls_pubkey_import_openpgp(pkey, xpriv, flags); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = 0; - - cleanup: - gnutls_openpgp_crt_deinit(xpriv); - - return ret; -} - -#endif - /** * gnutls_pubkey_export: * @key: Holds the certificate @@ -678,7 +638,6 @@ gnutls_pubkey_export(gnutls_pubkey_t key, result = _gnutls_x509_encode_and_copy_PKI_params(spk, "", - key->pk_algorithm, &key->params); if (result < 0) { gnutls_assert(); @@ -743,7 +702,6 @@ gnutls_pubkey_export2(gnutls_pubkey_t key, result = _gnutls_x509_encode_and_copy_PKI_params(spk, "", - key->pk_algorithm, &key->params); if (result < 0) { gnutls_assert(); @@ -801,7 +759,7 @@ gnutls_pubkey_get_key_id(gnutls_pubkey_t key, unsigned int flags, } ret = - _gnutls_get_key_id(key->pk_algorithm, &key->params, + _gnutls_get_key_id(&key->params, output_data, output_data_size, flags); if (ret < 0) { gnutls_assert(); @@ -812,10 +770,11 @@ gnutls_pubkey_get_key_id(gnutls_pubkey_t key, unsigned int flags, } /** - * gnutls_pubkey_export_rsa_raw: + * gnutls_pubkey_export_rsa_raw2: * @key: Holds the certificate * @m: will hold the modulus (may be %NULL) * @e: will hold the public exponent (may be %NULL) + * @flags: flags from %gnutls_abstract_export_flags_t * * This function will export the RSA public key's parameters found in * the given structure. The new parameters will be allocated using @@ -825,26 +784,31 @@ gnutls_pubkey_get_key_id(gnutls_pubkey_t key, unsigned int flags, * * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. * - * Since: 3.3.0 + * Since: 3.6.0 **/ int -gnutls_pubkey_export_rsa_raw(gnutls_pubkey_t key, - gnutls_datum_t * m, gnutls_datum_t * e) +gnutls_pubkey_export_rsa_raw2(gnutls_pubkey_t key, + gnutls_datum_t * m, gnutls_datum_t * e, + unsigned flags) { int ret; + mpi_dprint_func dprint = _gnutls_mpi_dprint_lz; + + if (flags & GNUTLS_EXPORT_FLAG_NO_LZ) + dprint = _gnutls_mpi_dprint; if (key == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - if (key->pk_algorithm != GNUTLS_PK_RSA) { + if (!GNUTLS_PK_IS_RSA(key->params.algo)) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } if (m) { - ret = _gnutls_mpi_dprint_lz(key->params.params[0], m); + ret = dprint(key->params.params[0], m); if (ret < 0) { gnutls_assert(); return ret; @@ -852,7 +816,7 @@ gnutls_pubkey_export_rsa_raw(gnutls_pubkey_t key, } if (e) { - ret = _gnutls_mpi_dprint_lz(key->params.params[1], e); + ret = dprint(key->params.params[1], e); if (ret < 0) { gnutls_assert(); _gnutls_free_datum(m); @@ -863,6 +827,29 @@ gnutls_pubkey_export_rsa_raw(gnutls_pubkey_t key, return 0; } +/** + * gnutls_pubkey_export_rsa_raw: + * @key: Holds the certificate + * @m: will hold the modulus (may be %NULL) + * @e: will hold the public exponent (may be %NULL) + * + * This function will export the RSA public key's parameters found in + * the given structure. The new parameters will be allocated using + * gnutls_malloc() and will be stored in the appropriate datum. + * + * This function allows for %NULL parameters since 3.4.1. + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.3.0 + **/ +int +gnutls_pubkey_export_rsa_raw(gnutls_pubkey_t key, + gnutls_datum_t * m, gnutls_datum_t * e) +{ + return gnutls_pubkey_export_rsa_raw2(key, m, e, 0); +} + /** * gnutls_pubkey_export_dsa_raw: @@ -886,22 +873,54 @@ int gnutls_pubkey_export_dsa_raw(gnutls_pubkey_t key, gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * g, gnutls_datum_t * y) +{ + return gnutls_pubkey_export_dsa_raw2(key, p, q, g, y, 0); +} + +/** + * gnutls_pubkey_export_dsa_raw2: + * @key: Holds the public key + * @p: will hold the p (may be %NULL) + * @q: will hold the q (may be %NULL) + * @g: will hold the g (may be %NULL) + * @y: will hold the y (may be %NULL) + * @flags: flags from %gnutls_abstract_export_flags_t + * + * This function will export the DSA public key's parameters found in + * the given certificate. The new parameters will be allocated using + * gnutls_malloc() and will be stored in the appropriate datum. + * + * This function allows for %NULL parameters since 3.4.1. + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.6.0 + **/ +int +gnutls_pubkey_export_dsa_raw2(gnutls_pubkey_t key, + gnutls_datum_t * p, gnutls_datum_t * q, + gnutls_datum_t * g, gnutls_datum_t * y, + unsigned flags) { int ret; + mpi_dprint_func dprint = _gnutls_mpi_dprint_lz; + + if (flags & GNUTLS_EXPORT_FLAG_NO_LZ) + dprint = _gnutls_mpi_dprint; if (key == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - if (key->pk_algorithm != GNUTLS_PK_DSA) { + if (key->params.algo != GNUTLS_PK_DSA) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } /* P */ if (p) { - ret = _gnutls_mpi_dprint_lz(key->params.params[0], p); + ret = dprint(key->params.params[0], p); if (ret < 0) { gnutls_assert(); return ret; @@ -910,7 +929,7 @@ gnutls_pubkey_export_dsa_raw(gnutls_pubkey_t key, /* Q */ if (q) { - ret = _gnutls_mpi_dprint_lz(key->params.params[1], q); + ret = dprint(key->params.params[1], q); if (ret < 0) { gnutls_assert(); _gnutls_free_datum(p); @@ -920,7 +939,7 @@ gnutls_pubkey_export_dsa_raw(gnutls_pubkey_t key, /* G */ if (g) { - ret = _gnutls_mpi_dprint_lz(key->params.params[2], g); + ret = dprint(key->params.params[2], g); if (ret < 0) { gnutls_assert(); _gnutls_free_datum(p); @@ -931,7 +950,7 @@ gnutls_pubkey_export_dsa_raw(gnutls_pubkey_t key, /* Y */ if (y) { - ret = _gnutls_mpi_dprint_lz(key->params.params[3], y); + ret = dprint(key->params.params[3], y); if (ret < 0) { gnutls_assert(); _gnutls_free_datum(p); @@ -948,13 +967,16 @@ gnutls_pubkey_export_dsa_raw(gnutls_pubkey_t key, * gnutls_pubkey_export_ecc_raw: * @key: Holds the public key * @curve: will hold the curve (may be %NULL) - * @x: will hold x (may be %NULL) - * @y: will hold y (may be %NULL) + * @x: will hold x-coordinate (may be %NULL) + * @y: will hold y-coordinate (may be %NULL) * * This function will export the ECC public key's parameters found in * the given key. The new parameters will be allocated using * gnutls_malloc() and will be stored in the appropriate datum. * + * In EdDSA curves the @y parameter will be %NULL and the other parameters + * will be in the native format for the curve. + * * This function allows for %NULL parameters since 3.4.1. * * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. @@ -965,25 +987,75 @@ int gnutls_pubkey_export_ecc_raw(gnutls_pubkey_t key, gnutls_ecc_curve_t * curve, gnutls_datum_t * x, gnutls_datum_t * y) +{ + return gnutls_pubkey_export_ecc_raw2(key, curve, x, y, 0); +} + +/** + * gnutls_pubkey_export_ecc_raw2: + * @key: Holds the public key + * @curve: will hold the curve (may be %NULL) + * @x: will hold x-coordinate (may be %NULL) + * @y: will hold y-coordinate (may be %NULL) + * @flags: flags from %gnutls_abstract_export_flags_t + * + * This function will export the ECC public key's parameters found in + * the given key. The new parameters will be allocated using + * gnutls_malloc() and will be stored in the appropriate datum. + * + * In EdDSA curves the @y parameter will be %NULL and the other parameters + * will be in the native format for the curve. + * + * This function allows for %NULL parameters since 3.4.1. + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.6.0 + **/ +int +gnutls_pubkey_export_ecc_raw2(gnutls_pubkey_t key, + gnutls_ecc_curve_t * curve, + gnutls_datum_t * x, gnutls_datum_t * y, + unsigned int flags) { int ret; + mpi_dprint_func dprint = _gnutls_mpi_dprint_lz; + + if (flags & GNUTLS_EXPORT_FLAG_NO_LZ) + dprint = _gnutls_mpi_dprint; if (key == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - if (key->pk_algorithm != GNUTLS_PK_EC) { + if (!IS_EC(key->params.algo)) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } if (curve) - *curve = key->params.flags; + *curve = key->params.curve; + + if (key->params.algo == GNUTLS_PK_EDDSA_ED25519 || + key->params.algo == GNUTLS_PK_EDDSA_ED448) { + if (x) { + ret = _gnutls_set_datum(x, key->params.raw_pub.data, key->params.raw_pub.size); + if (ret < 0) + return gnutls_assert_val(ret); + } + if (y) { + y->data = NULL; + y->size = 0; + } + return 0; + } + + /* ECDSA */ /* X */ if (x) { - ret = _gnutls_mpi_dprint_lz(key->params.params[ECC_X], x); + ret = dprint(key->params.params[ECC_X], x); if (ret < 0) { gnutls_assert(); return ret; @@ -992,7 +1064,7 @@ gnutls_pubkey_export_ecc_raw(gnutls_pubkey_t key, /* Y */ if (y) { - ret = _gnutls_mpi_dprint_lz(key->params.params[ECC_Y], y); + ret = dprint(key->params.params[ECC_Y], y); if (ret < 0) { gnutls_assert(); _gnutls_free_datum(x); @@ -1022,33 +1094,109 @@ int gnutls_pubkey_export_ecc_x962(gnutls_pubkey_t key, gnutls_datum_t * ecpoint) { int ret; - gnutls_datum_t raw_point = {NULL,0}; - - if (key == NULL || key->pk_algorithm != GNUTLS_PK_EC) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + gnutls_datum_t raw_point = {NULL,0}; + + if (key == NULL || key->params.algo != GNUTLS_PK_EC) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ret = _gnutls_x509_write_ecc_pubkey(&key->params, &raw_point); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_x509_encode_string(ASN1_ETYPE_OCTET_STRING, + raw_point.data, raw_point.size, ecpoint); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_x509_write_ecc_params(key->params.curve, parameters); + if (ret < 0) { + _gnutls_free_datum(ecpoint); + gnutls_assert(); + goto cleanup; + } + + ret = 0; + cleanup: + gnutls_free(raw_point.data); + return ret; +} + +/** + * gnutls_pubkey_export_gost_raw2: + * @key: Holds the public key + * @curve: will hold the curve (may be %NULL) + * @digest: will hold the curve (may be %NULL) + * @paramset: will hold the parameters id (may be %NULL) + * @x: will hold the x-coordinate (may be %NULL) + * @y: will hold the y-coordinate (may be %NULL) + * @flags: flags from %gnutls_abstract_export_flags_t + * + * This function will export the GOST public key's parameters found in + * the given key. The new parameters will be allocated using + * gnutls_malloc() and will be stored in the appropriate datum. + * + * Note: parameters will be stored with least significant byte first. On + * version 3.6.3 this was incorrectly returned in big-endian format. + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.6.3 + **/ +int +gnutls_pubkey_export_gost_raw2(gnutls_pubkey_t key, + gnutls_ecc_curve_t * curve, + gnutls_digest_algorithm_t * digest, + gnutls_gost_paramset_t * paramset, + gnutls_datum_t * x, gnutls_datum_t * y, + unsigned int flags) +{ + int ret; - ret = _gnutls_x509_write_ecc_pubkey(&key->params, &raw_point); - if (ret < 0) - return gnutls_assert_val(ret); + mpi_dprint_func dprint = _gnutls_mpi_dprint_le; - ret = _gnutls_x509_encode_string(ASN1_ETYPE_OCTET_STRING, - raw_point.data, raw_point.size, ecpoint); - if (ret < 0) { + if (key == NULL) { gnutls_assert(); - goto cleanup; + return GNUTLS_E_INVALID_REQUEST; } - ret = _gnutls_x509_write_ecc_params(key->params.flags, parameters); - if (ret < 0) { - _gnutls_free_datum(ecpoint); + if (key->params.algo != GNUTLS_PK_GOST_01 && + key->params.algo != GNUTLS_PK_GOST_12_256 && + key->params.algo != GNUTLS_PK_GOST_12_512) { gnutls_assert(); - goto cleanup; + return GNUTLS_E_INVALID_REQUEST; } - ret = 0; - cleanup: - gnutls_free(raw_point.data); - return ret; + if (curve) + *curve = key->params.curve; + + if (digest) + *digest = _gnutls_gost_digest(key->params.algo); + + if (paramset) + *paramset = key->params.gost_params; + + /* X */ + if (x) { + ret = dprint(key->params.params[GOST_X], x); + if (ret < 0) { + gnutls_assert(); + return ret; + } + } + + /* Y */ + if (y) { + ret = dprint(key->params.params[GOST_Y], y); + if (ret < 0) { + gnutls_assert(); + _gnutls_free_datum(x); + return ret; + } + } + + return 0; } /** @@ -1109,7 +1257,7 @@ gnutls_pubkey_import(gnutls_pubkey_t key, goto cleanup; } - result = asn1_der_decoding(&spk, _data.data, _data.size, NULL); + result = _asn1_strict_der_decode(&spk, _data.data, _data.size, NULL); if (result != ASN1_SUCCESS) { gnutls_assert(); result = _gnutls_asn2err(result); @@ -1122,12 +1270,7 @@ gnutls_pubkey_import(gnutls_pubkey_t key, goto cleanup; } - /* this has already been called by get_asn_mpis() thus it cannot - * fail. - */ - key->pk_algorithm = _gnutls_x509_get_pk_algorithm(spk, "", NULL); - key->bits = pubkey_to_bits(key->pk_algorithm, &key->params); - + key->bits = pubkey_to_bits(&key->params); result = 0; cleanup: @@ -1162,7 +1305,6 @@ int gnutls_x509_crt_set_pubkey(gnutls_x509_crt_t crt, gnutls_pubkey_t key) result = _gnutls_x509_encode_and_copy_PKI_params(crt->cert, "tbsCertificate.subjectPublicKeyInfo", - key->pk_algorithm, &key->params); if (result < 0) { @@ -1201,7 +1343,7 @@ int gnutls_x509_crq_set_pubkey(gnutls_x509_crq_t crq, gnutls_pubkey_t key) result = _gnutls_x509_encode_and_copy_PKI_params (crq->crq, "certificationRequestInfo.subjectPKInfo", - key->pk_algorithm, &key->params); + &key->params); if (result < 0) { gnutls_assert(); @@ -1381,8 +1523,8 @@ gnutls_pubkey_import_rsa_raw(gnutls_pubkey_t key, } key->params.params_nr = RSA_PUBLIC_PARAMS; - key->pk_algorithm = GNUTLS_PK_RSA; - key->bits = pubkey_to_bits(GNUTLS_PK_RSA, &key->params); + key->params.algo = GNUTLS_PK_RSA; + key->bits = pubkey_to_bits(&key->params); return 0; } @@ -1391,12 +1533,15 @@ gnutls_pubkey_import_rsa_raw(gnutls_pubkey_t key, * gnutls_pubkey_import_ecc_raw: * @key: The structure to store the parsed key * @curve: holds the curve - * @x: holds the x - * @y: holds the y + * @x: holds the x-coordinate + * @y: holds the y-coordinate * * This function will convert the given elliptic curve parameters to a * #gnutls_pubkey_t. The output will be stored in @key. * + * In EdDSA curves the @y parameter should be %NULL and the @x parameter must + * be the value in the native format for the curve. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * @@ -1410,7 +1555,7 @@ gnutls_pubkey_import_ecc_raw(gnutls_pubkey_t key, { int ret; - if (key == NULL) { + if (key == NULL || x == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } @@ -1418,7 +1563,42 @@ gnutls_pubkey_import_ecc_raw(gnutls_pubkey_t key, gnutls_pk_params_release(&key->params); gnutls_pk_params_init(&key->params); - key->params.flags = curve; + if (curve_is_eddsa(curve)) { + unsigned size = gnutls_ecc_curve_get_size(curve); + if (x->size != size) { + ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + goto cleanup; + } + + ret = _gnutls_set_datum(&key->params.raw_pub, x->data, x->size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + switch (curve) { + case GNUTLS_ECC_CURVE_ED25519: + key->params.algo = GNUTLS_PK_EDDSA_ED25519; + break; + case GNUTLS_ECC_CURVE_ED448: + key->params.algo = GNUTLS_PK_EDDSA_ED448; + break; + default: + break; + } + key->params.curve = curve; + key->bits = pubkey_to_bits(&key->params); + + return 0; + } + + /* ECDSA */ + if (y == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + key->params.curve = curve; if (_gnutls_mpi_init_scan_nz (&key->params.params[ECC_X], x->data, x->size)) { @@ -1435,7 +1615,8 @@ gnutls_pubkey_import_ecc_raw(gnutls_pubkey_t key, goto cleanup; } key->params.params_nr++; - key->pk_algorithm = GNUTLS_PK_EC; + key->params.algo = GNUTLS_PK_ECDSA; + key->bits = pubkey_to_bits(&key->params); return 0; @@ -1478,7 +1659,7 @@ gnutls_pubkey_import_ecc_x962(gnutls_pubkey_t key, ret = _gnutls_x509_read_ecc_params(parameters->data, - parameters->size, &key->params.flags); + parameters->size, &key->params.curve); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -1491,7 +1672,7 @@ gnutls_pubkey_import_ecc_x962(gnutls_pubkey_t key, goto cleanup; } - ret = _gnutls_ecc_ansi_x963_import(raw_point.data, raw_point.size, + ret = _gnutls_ecc_ansi_x962_import(raw_point.data, raw_point.size, &key->params.params[ECC_X], &key->params.params[ECC_Y]); if (ret < 0) { @@ -1499,7 +1680,7 @@ gnutls_pubkey_import_ecc_x962(gnutls_pubkey_t key, goto cleanup; } key->params.params_nr += 2; - key->pk_algorithm = GNUTLS_PK_EC; + key->params.algo = GNUTLS_PK_EC; gnutls_free(raw_point.data); return 0; @@ -1510,6 +1691,82 @@ gnutls_pubkey_import_ecc_x962(gnutls_pubkey_t key, return ret; } +/** + * gnutls_pubkey_import_gost_raw: + * @key: The structure to store the parsed key + * @curve: holds the curve + * @digest: holds the digest + * @paramset: holds the parameters id + * @x: holds the x-coordinate + * @y: holds the y-coordinate + * + * This function will convert the given GOST public key's parameters to a + * #gnutls_pubkey_t. The output will be stored in @key. @digest should be + * one of GNUTLS_DIG_GOSR_94, GNUTLS_DIG_STREEBOG_256 or + * GNUTLS_DIG_STREEBOG_512. If @paramset is set to GNUTLS_GOST_PARAMSET_UNKNOWN + * default one will be selected depending on @digest. + * + * Note: parameters should be stored with least significant byte first. On + * version 3.6.3 big-endian format was used incorrectly. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.3 + **/ +int +gnutls_pubkey_import_gost_raw(gnutls_pubkey_t key, + gnutls_ecc_curve_t curve, + gnutls_digest_algorithm_t digest, + gnutls_gost_paramset_t paramset, + const gnutls_datum_t * x, + const gnutls_datum_t * y) +{ + int ret; + gnutls_pk_algorithm_t pk_algo; + + if (key == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + pk_algo = _gnutls_digest_gost(digest); + if (pk_algo == GNUTLS_PK_UNKNOWN) + return GNUTLS_E_ILLEGAL_PARAMETER; + + if (paramset == GNUTLS_GOST_PARAMSET_UNKNOWN) + paramset = _gnutls_gost_paramset_default(pk_algo); + + gnutls_pk_params_release(&key->params); + gnutls_pk_params_init(&key->params); + + key->params.curve = curve; + key->params.gost_params = paramset; + + if (_gnutls_mpi_init_scan_le + (&key->params.params[GOST_X], x->data, x->size)) { + gnutls_assert(); + ret = GNUTLS_E_MPI_SCAN_FAILED; + goto cleanup; + } + key->params.params_nr++; + + if (_gnutls_mpi_init_scan_le + (&key->params.params[GOST_Y], y->data, y->size)) { + gnutls_assert(); + ret = GNUTLS_E_MPI_SCAN_FAILED; + goto cleanup; + } + key->params.params_nr++; + key->params.algo = pk_algo; + + return 0; + + cleanup: + gnutls_pk_params_release(&key->params); + return ret; +} + /** * gnutls_pubkey_import_dsa_raw: * @key: The structure to store the parsed key @@ -1575,14 +1832,55 @@ gnutls_pubkey_import_dsa_raw(gnutls_pubkey_t key, } key->params.params_nr = DSA_PUBLIC_PARAMS; - key->pk_algorithm = GNUTLS_PK_DSA; - key->bits = pubkey_to_bits(GNUTLS_PK_DSA, &key->params); + key->params.algo = GNUTLS_PK_DSA; + key->bits = pubkey_to_bits(&key->params); return 0; } -#define OLD_PUBKEY_VERIFY_FLAG_TLS1_RSA 1 +/* Updates the gnutls_x509_spki_st parameters based on the signature + * information, and reports any incompatibilities between the existing + * parameters (if any) with the signature algorithm */ +static +int fixup_spki_params(const gnutls_pk_params_st *key_params, const gnutls_sign_entry_st *se, + const mac_entry_st *me, gnutls_x509_spki_st *params) +{ + unsigned bits; + + if (se->pk != key_params->algo) { + if (!sign_supports_priv_pk_algorithm(se, key_params->algo)) { + _gnutls_debug_log("have key: %s/%d, with sign %s/%d\n", + gnutls_pk_get_name(key_params->algo), key_params->algo, + se->name, se->id); + return gnutls_assert_val(GNUTLS_E_CONSTRAINT_ERROR); + } + } + + if (params->pk == GNUTLS_PK_RSA_PSS) { + int ret; + if (!GNUTLS_PK_IS_RSA(key_params->algo)) + return gnutls_assert_val(GNUTLS_E_CONSTRAINT_ERROR); + + /* The requested sign algorithm is RSA-PSS, while the + * pubkey doesn't include parameter information. Fill + * it with the same way as gnutls_privkey_sign*. */ + if (key_params->algo == GNUTLS_PK_RSA || params->rsa_pss_dig == 0) { + bits = pubkey_to_bits(key_params); + params->rsa_pss_dig = se->hash; + ret = _gnutls_find_rsa_pss_salt_size(bits, me, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + params->salt_size = ret; + } + + if (params->rsa_pss_dig != se->hash) + return gnutls_assert_val(GNUTLS_E_CONSTRAINT_ERROR); + } + + return 0; +} /** * gnutls_pubkey_verify_data2: @@ -1611,30 +1909,40 @@ gnutls_pubkey_verify_data2(gnutls_pubkey_t pubkey, { int ret; const mac_entry_st *me; + gnutls_x509_spki_st params; + const gnutls_sign_entry_st *se; if (pubkey == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - if (flags & OLD_PUBKEY_VERIFY_FLAG_TLS1_RSA || flags & GNUTLS_VERIFY_USE_TLS1_RSA) + if (flags & GNUTLS_VERIFY_USE_TLS1_RSA) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - me = hash_to_entry(gnutls_sign_get_hash_algorithm(algo)); - if (me == NULL) + memcpy(¶ms, &pubkey->params.spki, sizeof(gnutls_x509_spki_st)); + + se = _gnutls_sign_to_entry(algo); + if (se == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ret = pubkey_supports_sig(pubkey, se); + if (ret < 0) + return gnutls_assert_val(ret); + + params.pk = se->pk; + + me = hash_to_entry(se->hash); + if (me == NULL && !_gnutls_pk_is_not_prehashed(se->pk)) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - ret = pubkey_verify_data(pubkey->pk_algorithm, me, - data, signature, &pubkey->params); + ret = pubkey_verify_data(se, me, data, signature, &pubkey->params, + ¶ms, flags); if (ret < 0) { gnutls_assert(); return ret; } - if (gnutls_sign_is_secure(algo) == 0 && _gnutls_is_broken_sig_allowed(algo, flags) == 0) { - return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_SECURITY); - } - return 0; } @@ -1652,7 +1960,9 @@ gnutls_pubkey_verify_data2(gnutls_pubkey_t pubkey, * You can use gnutls_pk_to_sign() to get the appropriate value. * * Returns: In case of a verification failure %GNUTLS_E_PK_SIG_VERIFY_FAILED - * is returned, and zero or positive code on success. + * is returned, and zero or positive code on success. For known to be insecure + * signatures this function will return %GNUTLS_E_INSUFFICIENT_SECURITY unless + * the flag %GNUTLS_VERIFY_ALLOW_BROKEN is specified. * * Since: 3.0 **/ @@ -1664,21 +1974,53 @@ gnutls_pubkey_verify_hash2(gnutls_pubkey_t key, const gnutls_datum_t * signature) { const mac_entry_st *me; + gnutls_x509_spki_st params; + const gnutls_sign_entry_st *se; + int ret; if (key == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - if (flags & OLD_PUBKEY_VERIFY_FLAG_TLS1_RSA || flags & GNUTLS_VERIFY_USE_TLS1_RSA) { - return _gnutls_pk_verify(GNUTLS_PK_RSA, hash, signature, - &key->params); + if (_gnutls_pk_is_not_prehashed(key->params.algo)) { + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } + + memcpy(¶ms, &key->params.spki, sizeof(gnutls_x509_spki_st)); + + if (flags & GNUTLS_VERIFY_USE_TLS1_RSA) { + if (!GNUTLS_PK_IS_RSA(key->params.algo)) + return gnutls_assert_val(GNUTLS_E_INCOMPATIBLE_SIG_WITH_KEY); + params.pk = GNUTLS_PK_RSA; + /* we do not check for insecure algorithms with this flag */ + return _gnutls_pk_verify(params.pk, hash, signature, + &key->params, ¶ms); } else { - me = hash_to_entry(gnutls_sign_get_hash_algorithm(algo)); - return pubkey_verify_hashed_data(key->pk_algorithm, me, - hash, signature, - &key->params); + se = _gnutls_sign_to_entry(algo); + if (se == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ret = pubkey_supports_sig(key, se); + if (ret < 0) + return gnutls_assert_val(ret); + + params.pk = se->pk; + + me = hash_to_entry(se->hash); + if (me == NULL && !_gnutls_pk_is_not_prehashed(se->pk)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ret = pubkey_verify_hashed_data(se, me, hash, signature, + &key->params, + ¶ms, flags); + if (ret < 0) { + gnutls_assert(); + return ret; + } } + + return 0; } /** @@ -1706,10 +2048,37 @@ gnutls_pubkey_encrypt_data(gnutls_pubkey_t key, unsigned int flags, return GNUTLS_E_INVALID_REQUEST; } - return _gnutls_pk_encrypt(key->pk_algorithm, ciphertext, + return _gnutls_pk_encrypt(key->params.algo, ciphertext, plaintext, &key->params); } +static +int pubkey_supports_sig(gnutls_pubkey_t pubkey, + const gnutls_sign_entry_st *se) +{ + if (pubkey->params.algo == GNUTLS_PK_ECDSA && se->curve) { + gnutls_ecc_curve_t curve = pubkey->params.curve; + + if (curve != se->curve) { + _gnutls_handshake_log("have key: ECDSA with %s/%d, with sign %s/%d\n", + gnutls_ecc_curve_get_name(curve), (int)curve, + se->name, se->id); + return gnutls_assert_val(GNUTLS_E_INCOMPATIBLE_SIG_WITH_KEY); + } + } + + if (se->pk != pubkey->params.algo) { /* if the PK algorithm of the signature differs to the one on the pubkey */ + if (!sign_supports_priv_pk_algorithm(se, pubkey->params.algo)) { + _gnutls_handshake_log("have key: %s/%d, with sign %s/%d\n", + gnutls_pk_get_name(pubkey->params.algo), pubkey->params.algo, + se->name, se->id); + return gnutls_assert_val(GNUTLS_E_INCOMPATIBLE_SIG_WITH_KEY); + } + } + + return 0; +} + /* Checks whether the public key given is compatible with the * signature algorithm used. The session is only used for audit logging, and * it may be null. @@ -1722,10 +2091,14 @@ int _gnutls_pubkey_compatible_with_sig(gnutls_session_t session, unsigned int hash_size = 0; unsigned int sig_hash_size; const mac_entry_st *me; + const gnutls_sign_entry_st *se; + + se = _gnutls_sign_to_entry(sign); + if (se == NULL && _gnutls_version_has_selectable_sighash(ver)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - if (pubkey->pk_algorithm == GNUTLS_PK_DSA) { - me = _gnutls_dsa_q_to_hash(pubkey->pk_algorithm, - &pubkey->params, &hash_size); + if (pubkey->params.algo == GNUTLS_PK_DSA) { + me = _gnutls_dsa_q_to_hash(&pubkey->params, &hash_size); /* DSA keys over 1024 bits cannot be used with TLS 1.x, x<2 */ if (!_gnutls_version_has_selectable_sighash(ver)) { @@ -1733,9 +2106,9 @@ int _gnutls_pubkey_compatible_with_sig(gnutls_session_t session, return gnutls_assert_val (GNUTLS_E_INCOMPAT_DSA_KEY_WITH_TLS_PROTOCOL); - } else if (sign != GNUTLS_SIGN_UNKNOWN) { - me = hash_to_entry(gnutls_sign_get_hash_algorithm - (sign)); + } else if (se != NULL) { + me = hash_to_entry(se->hash); + sig_hash_size = _gnutls_hash_get_algo_len(me); if (sig_hash_size < hash_size) _gnutls_audit_log(session, @@ -1744,15 +2117,13 @@ int _gnutls_pubkey_compatible_with_sig(gnutls_session_t session, hash_size); } - } else if (pubkey->pk_algorithm == GNUTLS_PK_EC) { + } else if (pubkey->params.algo == GNUTLS_PK_ECDSA) { if (_gnutls_version_has_selectable_sighash(ver) - && sign != GNUTLS_SIGN_UNKNOWN) { - _gnutls_dsa_q_to_hash(pubkey->pk_algorithm, - &pubkey->params, - &hash_size); + && se != NULL) { + _gnutls_dsa_q_to_hash(&pubkey->params, &hash_size); + + me = hash_to_entry(se->hash); - me = hash_to_entry(gnutls_sign_get_hash_algorithm - (sign)); sig_hash_size = _gnutls_hash_get_algo_len(me); if (sig_hash_size < hash_size) @@ -1762,8 +2133,34 @@ int _gnutls_pubkey_compatible_with_sig(gnutls_session_t session, hash_size); } + } else if (pubkey->params.algo == GNUTLS_PK_GOST_01 || + pubkey->params.algo == GNUTLS_PK_GOST_12_256 || + pubkey->params.algo == GNUTLS_PK_GOST_12_512) { + if (_gnutls_version_has_selectable_sighash(ver) + && se != NULL) { + if (_gnutls_gost_digest(pubkey->params.algo) != se->hash) { + _gnutls_audit_log(session, + "The hash algo used in signature (%u) is not expected (%u)\n", + se->hash, _gnutls_gost_digest(pubkey->params.algo)); + return gnutls_assert_val(GNUTLS_E_CONSTRAINT_ERROR); + } + } + + } else if (pubkey->params.algo == GNUTLS_PK_RSA_PSS) { + if (!_gnutls_version_has_selectable_sighash(ver)) + /* this should not have happened */ + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + /* RSA PSS public keys are restricted to a single digest, i.e., signature */ + + if (pubkey->params.spki.rsa_pss_dig && pubkey->params.spki.rsa_pss_dig != se->hash) { + return gnutls_assert_val(GNUTLS_E_CONSTRAINT_ERROR); + } } + if (se != NULL) + return pubkey_supports_sig(pubkey, se); + return 0; } @@ -1781,17 +2178,22 @@ _gnutls_pubkey_get_mpis(gnutls_pubkey_t key, gnutls_pk_params_st * params) * params[1] is public key */ static int -_pkcs1_rsa_verify_sig(const mac_entry_st * me, +_pkcs1_rsa_verify_sig(gnutls_pk_algorithm_t pk, + const mac_entry_st * me, const gnutls_datum_t * text, const gnutls_datum_t * prehash, const gnutls_datum_t * signature, - gnutls_pk_params_st * params) + gnutls_pk_params_st * params, + gnutls_x509_spki_st * sign_params) { int ret; uint8_t md[MAX_HASH_SIZE], *cmp; unsigned int digest_size; gnutls_datum_t d, di; + if (unlikely(me == NULL)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + digest_size = _gnutls_hash_get_algo_len(me); if (prehash) { if (prehash->data == NULL || prehash->size != digest_size) @@ -1817,14 +2219,20 @@ _pkcs1_rsa_verify_sig(const mac_entry_st * me, d.data = cmp; d.size = digest_size; - /* decrypted is a BER encoded data of type DigestInfo - */ - ret = encode_ber_digest_info(me, &d, &di); - if (ret < 0) - return gnutls_assert_val(ret); + if (pk == GNUTLS_PK_RSA) { + /* decrypted is a BER encoded data of type DigestInfo + */ + ret = encode_ber_digest_info(me, &d, &di); + if (ret < 0) + return gnutls_assert_val(ret); - ret = _gnutls_pk_verify(GNUTLS_PK_RSA, &di, signature, params); - _gnutls_free_datum(&di); + ret = _gnutls_pk_verify(pk, &di, signature, params, + sign_params); + _gnutls_free_datum(&di); + } else { + ret = _gnutls_pk_verify(pk, &d, signature, params, + sign_params); + } return ret; } @@ -1836,13 +2244,14 @@ dsa_verify_hashed_data(gnutls_pk_algorithm_t pk, const mac_entry_st * algo, const gnutls_datum_t * hash, const gnutls_datum_t * signature, - gnutls_pk_params_st * params) + gnutls_pk_params_st * params, + gnutls_x509_spki_st * sign_params) { gnutls_datum_t digest; unsigned int hash_len; if (algo == NULL) - algo = _gnutls_dsa_q_to_hash(pk, params, &hash_len); + algo = _gnutls_dsa_q_to_hash(params, &hash_len); else hash_len = _gnutls_hash_get_algo_len(algo); @@ -1863,7 +2272,7 @@ dsa_verify_hashed_data(gnutls_pk_algorithm_t pk, digest.data = hash->data; digest.size = hash->size; - return _gnutls_pk_verify(pk, &digest, signature, params); + return _gnutls_pk_verify(pk, &digest, signature, params, sign_params); } static int @@ -1871,14 +2280,15 @@ dsa_verify_data(gnutls_pk_algorithm_t pk, const mac_entry_st * algo, const gnutls_datum_t * data, const gnutls_datum_t * signature, - gnutls_pk_params_st * params) + gnutls_pk_params_st * params, + gnutls_x509_spki_st * sign_params) { int ret; uint8_t _digest[MAX_HASH_SIZE]; gnutls_datum_t digest; if (algo == NULL) - algo = _gnutls_dsa_q_to_hash(pk, params, NULL); + algo = _gnutls_dsa_q_to_hash(params, NULL); ret = _gnutls_hash_fast((gnutls_digest_algorithm_t)algo->id, data->data, data->size, _digest); @@ -1888,101 +2298,144 @@ dsa_verify_data(gnutls_pk_algorithm_t pk, digest.data = _digest; digest.size = _gnutls_hash_get_algo_len(algo); - return _gnutls_pk_verify(pk, &digest, signature, params); + return _gnutls_pk_verify(pk, &digest, signature, params, sign_params); } /* Verifies the signature data, and returns GNUTLS_E_PK_SIG_VERIFY_FAILED if * not verified, or 1 otherwise. */ -int -pubkey_verify_hashed_data(gnutls_pk_algorithm_t pk, - const mac_entry_st * hash_algo, +static int +pubkey_verify_hashed_data(const gnutls_sign_entry_st *se, + const mac_entry_st *me, const gnutls_datum_t * hash, const gnutls_datum_t * signature, - gnutls_pk_params_st * issuer_params) + gnutls_pk_params_st * params, + gnutls_x509_spki_st * sign_params, + unsigned flags) { + int ret; + + if (unlikely(me==NULL)) + return gnutls_assert_val(GNUTLS_E_UNKNOWN_HASH_ALGORITHM); + + ret = fixup_spki_params(params, se, me, sign_params); + if (ret < 0) + return gnutls_assert_val(ret); - switch (pk) { + switch (se->pk) { case GNUTLS_PK_RSA: + case GNUTLS_PK_RSA_PSS: if (_pkcs1_rsa_verify_sig - (hash_algo, NULL, hash, signature, issuer_params) != 0) + (se->pk, me, NULL, hash, signature, params, sign_params) != 0) { gnutls_assert(); return GNUTLS_E_PK_SIG_VERIFY_FAILED; } - return 1; break; - case GNUTLS_PK_EC: + case GNUTLS_PK_ECDSA: + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: case GNUTLS_PK_DSA: if (dsa_verify_hashed_data - (pk, hash_algo, hash, signature, issuer_params) != 0) { + (se->pk, me, hash, signature, params, sign_params) != 0) { gnutls_assert(); return GNUTLS_E_PK_SIG_VERIFY_FAILED; } - return 1; break; default: gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; + return GNUTLS_E_INVALID_REQUEST; } + + if (_gnutls_sign_is_secure2(se, 0) == 0 && _gnutls_is_broken_sig_allowed(se, flags) == 0) { + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_SECURITY); + } + + return 1; } /* Verifies the signature data, and returns GNUTLS_E_PK_SIG_VERIFY_FAILED if * not verified, or 1 otherwise. */ int -pubkey_verify_data(gnutls_pk_algorithm_t pk, - const mac_entry_st * me, +pubkey_verify_data(const gnutls_sign_entry_st *se, + const mac_entry_st *me, const gnutls_datum_t * data, const gnutls_datum_t * signature, - gnutls_pk_params_st * issuer_params) + gnutls_pk_params_st * params, + gnutls_x509_spki_st * sign_params, + unsigned flags) { + int ret; - switch (pk) { - case GNUTLS_PK_RSA: + if (unlikely(me == NULL)) + return gnutls_assert_val(GNUTLS_E_UNKNOWN_HASH_ALGORITHM); + + ret = fixup_spki_params(params, se, me, sign_params); + if (ret < 0) + return gnutls_assert_val(ret); + switch (se->pk) { + case GNUTLS_PK_RSA: + case GNUTLS_PK_RSA_PSS: if (_pkcs1_rsa_verify_sig - (me, data, NULL, signature, issuer_params) != 0) { + (se->pk, me, data, NULL, signature, params, sign_params) != 0) { + gnutls_assert(); + return GNUTLS_E_PK_SIG_VERIFY_FAILED; + } + + break; + + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: + if (_gnutls_pk_verify(se->pk, data, signature, params, sign_params) != 0) { gnutls_assert(); return GNUTLS_E_PK_SIG_VERIFY_FAILED; } - return 1; break; case GNUTLS_PK_EC: case GNUTLS_PK_DSA: - if (dsa_verify_data(pk, me, data, signature, issuer_params) - != 0) { + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + if (dsa_verify_data + (se->pk, me, data, signature, params, sign_params) != 0) { gnutls_assert(); return GNUTLS_E_PK_SIG_VERIFY_FAILED; } - return 1; break; default: gnutls_assert(); - return GNUTLS_E_INTERNAL_ERROR; + return GNUTLS_E_INVALID_REQUEST; + + } + if (_gnutls_sign_is_secure2(se,0) == 0 && _gnutls_is_broken_sig_allowed(se, flags) == 0) { + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_SECURITY); } + + return 1; } -const mac_entry_st *_gnutls_dsa_q_to_hash(gnutls_pk_algorithm_t algo, - const gnutls_pk_params_st * +const mac_entry_st *_gnutls_dsa_q_to_hash(const gnutls_pk_params_st * params, unsigned int *hash_len) { int bits = 0; int ret; - if (algo == GNUTLS_PK_DSA) + if (params->algo == GNUTLS_PK_DSA) bits = _gnutls_mpi_get_nbits(params->params[1]); - else if (algo == GNUTLS_PK_EC) - bits = gnutls_ecc_curve_get_size(params->flags) * 8; + else if (params->algo == GNUTLS_PK_EC) + bits = gnutls_ecc_curve_get_size(params->curve) * 8; if (bits <= 160) { if (hash_len) @@ -2088,7 +2541,7 @@ int gnutls_pubkey_import_x509_raw(gnutls_pubkey_t pkey, * gnutls_pubkey_verify_params: * @key: should contain a #gnutls_pubkey_t type * - * This function will verify the private key parameters. + * This function will verify the public key parameters. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -2099,7 +2552,7 @@ int gnutls_pubkey_verify_params(gnutls_pubkey_t key) { int ret; - ret = _gnutls_pk_verify_pub_params(key->pk_algorithm, &key->params); + ret = _gnutls_pk_verify_pub_params(key->params.algo, &key->params); if (ret < 0) { gnutls_assert(); return ret; @@ -2107,3 +2560,65 @@ int gnutls_pubkey_verify_params(gnutls_pubkey_t key) return 0; } + +/** + * gnutls_pubkey_get_spki: + * @pubkey: a public key of type #gnutls_pubkey_t + * @spki: a SubjectPublicKeyInfo structure of type #gnutls_pubkey_spki_t + * @flags: must be zero + * + * This function will return the public key information if available. + * The provided @spki must be initialized. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.0 + **/ +int +gnutls_pubkey_get_spki(gnutls_pubkey_t pubkey, gnutls_x509_spki_t spki, unsigned int flags) +{ + if (pubkey == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + if (pubkey->params.spki.pk == GNUTLS_PK_UNKNOWN) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + memcpy(spki, &pubkey->params.spki, sizeof(gnutls_x509_spki_st)); + + return 0; +} + +/** + * gnutls_pubkey_set_spki: + * @pubkey: a public key of type #gnutls_pubkey_t + * @spki: a SubjectPublicKeyInfo structure of type #gnutls_pubkey_spki_t + * @flags: must be zero + * + * This function will set the public key information. + * The provided @spki must be initialized. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.0 + **/ +int +gnutls_pubkey_set_spki(gnutls_pubkey_t pubkey, const gnutls_x509_spki_t spki, unsigned int flags) +{ + if (pubkey == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + if (!_gnutls_pk_are_compat(pubkey->params.algo, spki->pk)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + memcpy(&pubkey->params.spki, spki, sizeof(gnutls_x509_spki_st)); + + pubkey->params.algo = spki->pk; + + return 0; +} diff --git a/lib/random.c b/lib/random.c index 2fe82adc7d..6462738416 100644 --- a/lib/random.c +++ b/lib/random.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -29,14 +29,11 @@ #include "locks.h" #include -#ifdef HAVE_THREADS_H -# include -#elif defined(__GNUC__) -# define _Thread_local __thread -#else -# error Unsupported platform -#endif +#include "gthreads.h" +#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) +extern gnutls_crypto_rnd_st _gnutls_fuzz_rnd_ops; +#endif /* Per thread context of random generator, and a flag to indicate initialization */ static _Thread_local void *gnutls_rnd_ctx; @@ -100,7 +97,13 @@ int _gnutls_rnd_preinit(void) { int ret; -#ifdef ENABLE_FIPS140 +#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) +# warning Insecure PRNG is enabled + ret = gnutls_crypto_rnd_register(100, &_gnutls_fuzz_rnd_ops); + if (ret < 0) + return ret; + +#elif defined(ENABLE_FIPS140) /* The FIPS140 random generator is only enabled when we are compiled * with FIPS support, _and_ the system requires FIPS140. */ diff --git a/lib/random.h b/lib/random.h index a76c8c07f6..62b4dc2a07 100644 --- a/lib/random.h +++ b/lib/random.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef RANDOM_H -#define RANDOM_H +#ifndef GNUTLS_LIB_RANDOM_H +#define GNUTLS_LIB_RANDOM_H #include #include @@ -38,4 +38,4 @@ inline static int _gnutls_rnd_check(void) return _rnd_system_entropy_check(); } -#endif +#endif /* GNUTLS_LIB_RANDOM_H */ diff --git a/lib/randomart.c b/lib/randomart.c index f83df71002..f300fab439 100644 --- a/lib/randomart.c +++ b/lib/randomart.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/range.c b/lib/range.c index 0b5655974f..041578c48b 100644 --- a/lib/range.c +++ b/lib/range.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -50,6 +50,10 @@ _gnutls_range_max_lh_pad(gnutls_session_t session, ssize_t data_length, ssize_t this_pad; ssize_t block_size; ssize_t tag_size, overflow; + const version_entry_st *vers = get_version(session); + + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); ret = _gnutls_epoch_get(session, EPOCH_WRITE_CURRENT, @@ -58,15 +62,23 @@ _gnutls_range_max_lh_pad(gnutls_session_t session, ssize_t data_length, return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); } - max_pad = MAX_PAD_SIZE; - fixed_pad = 1; + if (!vers->tls13_sem && record_params->write.is_aead) /* not yet ready */ + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + if (vers->tls13_sem) { + max_pad = max_record_send_size(session, record_params); + fixed_pad = 2; + } else { + max_pad = MAX_PAD_SIZE; + fixed_pad = 1; + } this_pad = MIN(max_pad, max_frag - data_length); block_size = _gnutls_cipher_get_block_size(record_params->cipher); tag_size = _gnutls_auth_cipher_tag_len(&record_params->write. - cipher_state); + ctx.tls12); switch (_gnutls_cipher_type(record_params->cipher)) { case CIPHER_AEAD: case CIPHER_STREAM: @@ -91,23 +103,30 @@ _gnutls_range_max_lh_pad(gnutls_session_t session, ssize_t data_length, * @session: is a #gnutls_session_t type. * * If the session supports length-hiding padding, you can - * invoke gnutls_range_send_message() to send a message whose + * invoke gnutls_record_send_range() to send a message whose * length is hidden in the given range. If the session does not * support length hiding padding, you can use the standard - * gnutls_record_send() function, or gnutls_range_send_message() + * gnutls_record_send() function, or gnutls_record_send_range() * making sure that the range is the same as the length of the * message you are trying to send. * * Returns: true (1) if the current session supports length-hiding * padding, false (0) if the current session does not. **/ -int gnutls_record_can_use_length_hiding(gnutls_session_t session) +unsigned gnutls_record_can_use_length_hiding(gnutls_session_t session) { int ret; record_parameters_st *record_params; + const version_entry_st *vers = get_version(session); + + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + if (vers->tls13_sem) + return 1; #ifdef ENABLE_SSL3 - if (get_num_version(session) == GNUTLS_SSL3) + if (vers->id == GNUTLS_SSL3) return 0; #endif @@ -163,7 +182,7 @@ gnutls_range_split(gnutls_session_t session, if (ret < 0) return gnutls_assert_val(ret); - max_frag = max_user_send_size(session, record_params); + max_frag = max_record_send_size(session, record_params); if (orig_high == orig_low) { int length = MIN(orig_high, max_frag); diff --git a/lib/record.c b/lib/record.c index e08598b829..af993fe6e5 100644 --- a/lib/record.c +++ b/lib/record.c @@ -1,6 +1,7 @@ /* - * Copyright (C) 2000-2016 Free Software Foundation, Inc. - * Copyright (C) 2012-2016 Nikos Mavrogiannopoulos + * Copyright (C) 2000-2018 Free Software Foundation, Inc. + * Copyright (C) 2012-2018 Nikos Mavrogiannopoulos + * Copyright (C) 2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -32,7 +33,6 @@ #include "gnutls_int.h" #include "errors.h" #include "debug.h" -#include "compress.h" #include "cipher.h" #include "buffers.h" #include "mbuffers.h" @@ -46,17 +46,19 @@ #include "record.h" #include "datum.h" #include "constate.h" -#include "ext/max_record.h" +#include "tls13/key_update.h" #include #include #include #include #include +#include +#include "locks.h" struct tls_record_st { uint16_t header_size; uint8_t version[2]; - gnutls_uint64 sequence; /* DTLS */ + uint64_t sequence; /* DTLS */ uint16_t length; uint16_t packet_size; /* header_size + length */ content_type_t type; @@ -68,7 +70,7 @@ struct tls_record_st { }; /** - * gnutls_record_disable_padding: + * gnutls_record_disable_padding: * @session: is a #gnutls_session_t type. * * Used to disabled padding in TLS 1.0 and above. Normally you do not @@ -76,8 +78,8 @@ struct tls_record_st { * complain if a server pads the encrypted data. This of course will * disable protection against statistical attacks on the data. * - * This functions is defunt since 3.1.7. Random padding is disabled - * by default unless requested using gnutls_range_send_message(). + * This function is defunct since 3.1.7. Random padding is disabled + * by default unless requested using gnutls_record_send_range(). * **/ void gnutls_record_disable_padding(gnutls_session_t session) @@ -93,7 +95,7 @@ void gnutls_record_disable_padding(gnutls_session_t session) * Used to set the first argument of the transport function (for push * and pull callbacks). In berkeley style sockets this function will set the * connection descriptor. - * + * **/ void gnutls_transport_set_ptr(gnutls_session_t session, @@ -164,7 +166,7 @@ gnutls_transport_set_int2(gnutls_session_t session, * with the descriptor, but requires no casts. * * Since: 3.1.9 - * + * **/ void gnutls_transport_set_int(gnutls_session_t session, int fd) { @@ -271,8 +273,8 @@ int gnutls_transport_get_int(gnutls_session_t session) * Note that not all implementations will properly terminate a TLS * connection. Some of them, usually for performance reasons, will * terminate only the underlying transport layer, and thus not - * distinguishing between a malicious party prematurely terminating - * the connection and normal termination. + * distinguishing between a malicious party prematurely terminating + * the connection and normal termination. * * This function may also return %GNUTLS_E_AGAIN or * %GNUTLS_E_INTERRUPTED; cf. gnutls_record_get_direction(). @@ -292,7 +294,7 @@ int gnutls_bye(gnutls_session_t session, gnutls_close_request_t how) gnutls_assert(); return ret; } - /* fall through */ + FALLTHROUGH; case BYE_STATE1: ret = gnutls_alert_send(session, GNUTLS_AL_WARNING, @@ -302,7 +304,7 @@ int gnutls_bye(gnutls_session_t session, gnutls_close_request_t how) gnutls_assert(); return ret; } - /* fall through */ + FALLTHROUGH; case BYE_STATE2: BYE_STATE = BYE_STATE2; if (how == GNUTLS_SHUT_RDWR) { @@ -352,45 +354,70 @@ inline static int session_is_valid(gnutls_session_t session) return 0; } -/* Copies the record version into the headers. The +/* Copies the record version into the headers. The * version must have 2 bytes at least. */ -inline static void +inline static int copy_record_version(gnutls_session_t session, gnutls_handshake_description_t htype, uint8_t version[2]) { const version_entry_st *lver; - if (session->internals.initial_negotiation_completed - || htype != GNUTLS_HANDSHAKE_CLIENT_HELLO - || session->internals.default_record_version[0] == 0) { - lver = get_version(session); + lver = get_version(session); + if (session->internals.initial_negotiation_completed || + htype != GNUTLS_HANDSHAKE_CLIENT_HELLO || + session->internals.default_record_version[0] == 0) { + + if (unlikely(lver == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - version[0] = lver->major; - version[1] = lver->minor; + if (lver->tls13_sem) { + version[0] = 0x03; + version[1] = 0x03; + } else { + version[0] = lver->major; + version[1] = lver->minor; + } } else { version[0] = session->internals.default_record_version[0]; version[1] = session->internals.default_record_version[1]; } + + return 0; } /* Increments the sequence value */ inline static int -sequence_increment(gnutls_session_t session, gnutls_uint64 * value) +sequence_increment(gnutls_session_t session, uint64_t * value) { + uint64_t snmax = UINT64_C(0xffffffffffffffff); + if (IS_DTLS(session)) { - return _gnutls_uint48pp(value); + uint64_t mask; + + snmax = UINT64_C(0xffffffffffff); + mask = snmax; + + if ((*value & mask) == snmax) + return -1; + + *value = ((*value & mask) + 1) | (*value & ~mask); } else { - return _gnutls_uint64pp(value); + if (*value == snmax) + return -1; + + (*value)++; } + + return 0; } /* This function behaves exactly like write(). The only difference is * that it accepts, the gnutls_session_t and the content_type_t of data to * send (if called by the user the Content is specific) - * It is intended to transfer data, under the current session. + * It is intended to transfer data, under the current session. * * @type: The content type to send * @htype: If this is a handshake message then the handshake type @@ -426,6 +453,7 @@ _gnutls_send_tlen_int(gnutls_session_t session, content_type_t type, record_parameters_st *record_params; size_t max_send_size; record_state_st *record_state; + const version_entry_st *vers = get_version(session); ret = _gnutls_epoch_get(session, epoch_rel, &record_params); if (ret < 0) @@ -454,7 +482,7 @@ _gnutls_send_tlen_int(gnutls_session_t session, content_type_t type, return GNUTLS_E_INVALID_SESSION; } - max_send_size = max_user_send_size(session, record_params); + max_send_size = max_record_send_size(session, record_params); if (data_size > max_send_size) { if (IS_DTLS(session)) @@ -464,7 +492,7 @@ _gnutls_send_tlen_int(gnutls_session_t session, content_type_t type, } else send_data_size = data_size; - /* Only encrypt if we don't have data to send + /* Only encrypt if we don't have data to send * from the previous run. - probably interrupted. */ if (mflags != 0 @@ -478,26 +506,32 @@ _gnutls_send_tlen_int(gnutls_session_t session, content_type_t type, retval = session->internals.record_send_buffer_user_size; } else { if (unlikely((send_data_size == 0 && min_pad == 0))) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); /* now proceed to packet encryption */ cipher_size = MAX_RECORD_SEND_SIZE(session); - bufel = _mbuffer_alloc_align16(cipher_size + CIPHER_SLACK_SIZE, + bufel = _mbuffer_alloc_align16(cipher_size + CIPHER_SLACK_SIZE, get_total_headers2(session, record_params)); if (bufel == NULL) return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); headers = _mbuffer_get_uhead_ptr(bufel); - headers[0] = type; + if (vers->tls13_sem && record_params->cipher->id != GNUTLS_CIPHER_NULL) + headers[0] = GNUTLS_APPLICATION_DATA; + else + headers[0] = type; + /* Use the default record version, if it is * set. */ - copy_record_version(session, htype, &headers[1]); + ret = copy_record_version(session, htype, &headers[1]); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + /* Adjust header length and add sequence for DTLS */ if (IS_DTLS(session)) - memcpy(&headers[3], - record_state->sequence_number.i, 8); + _gnutls_write_uint64(record_state->sequence_number, &headers[3]); _gnutls_record_log ("REC[%p]: Preparing Packet %s(%d) with length: %d and min pad: %d\n", @@ -557,12 +591,20 @@ _gnutls_send_tlen_int(gnutls_session_t session, content_type_t type, session->internals.record_send_buffer_user_size = 0; _gnutls_record_log - ("REC[%p]: Sent Packet[%d] %s(%d) in epoch %d and length: %d\n", - session, (unsigned int) - _gnutls_uint64touint32(&record_state->sequence_number), + ("REC[%p]: Sent Packet[%ld] %s(%d) in epoch %d and length: %d\n", + session, (unsigned long)(record_state->sequence_number), _gnutls_packet2str(type), type, (int) record_params->epoch, (int) cipher_size); + if (vers->tls13_sem && !(session->internals.flags & GNUTLS_NO_AUTO_REKEY) && + !(record_params->cipher->flags & GNUTLS_CIPHER_FLAG_NO_REKEY)) { + if (unlikely((record_state->sequence_number & UINT64_C(0xffffff)) == UINT64_C(0xfffffd))) { + /* After we have sent 2^24 messages, mark the session + * as needing a key update. */ + session->internals.rsend_state = RECORD_SEND_KEY_UPDATE_1; + } + } + return retval; } @@ -657,11 +699,18 @@ record_check_version(gnutls_session_t session, const version_entry_st *vers = get_version(session); int diff = 0; - if (vers->major != version[0] || vers->minor != version[1]) - diff = 1; + if (vers->tls13_sem) { + /* TLS 1.3 requires version to be 0x0303 */ + if (version[0] != 0x03 || version[1] != 0x03) + diff = 1; + } else { + if (vers->major != version[0] || vers->minor != version[1]) + diff = 1; + } if (!IS_DTLS(session)) { if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO || + htype == GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST || htype == GNUTLS_HANDSHAKE_SERVER_HELLO) { if (version[0] != 3) { gnutls_assert(); @@ -720,6 +769,37 @@ record_check_version(gnutls_session_t session, return 0; } +static int +recv_hello_request(gnutls_session_t session, void *data, + uint32_t data_size) +{ + uint8_t type; + + if (session->security_parameters.entity == GNUTLS_SERVER) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + + if (data_size < 1) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + if (session->internals.handshake_in_progress) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + + type = ((uint8_t *) data)[0]; + if (type == GNUTLS_HANDSHAKE_HELLO_REQUEST) { + if (IS_DTLS(session)) + session->internals.dtls.hsk_read_seq++; + if (session->internals.flags & GNUTLS_AUTO_REAUTH) { + session->internals.recv_state = RECV_STATE_REHANDSHAKE; + return GNUTLS_E_AGAIN; + } else { + return GNUTLS_E_REHANDSHAKE; + } + } else { + gnutls_assert(); + return GNUTLS_E_UNEXPECTED_PACKET; + } +} + /* This function will check if the received record type is * the one we actually expect and adds it to the proper * buffer. The bufel will be deinitialized after calling @@ -729,29 +809,53 @@ static int record_add_to_buffers(gnutls_session_t session, struct tls_record_st *recv, content_type_t type, gnutls_handshake_description_t htype, - gnutls_uint64 * seq, mbuffer_st * bufel) + uint64_t seq, mbuffer_st * bufel) { int ret; + const version_entry_st *ver = get_version(session); if ((recv->type == type) && (type == GNUTLS_APPLICATION_DATA || type == GNUTLS_CHANGE_CIPHER_SPEC || type == GNUTLS_HANDSHAKE)) { + if (bufel->msg.size == 0) { + if (type == GNUTLS_APPLICATION_DATA) { + /* this is needed to distinguish an empty + * message and EOF */ + ret = GNUTLS_E_AGAIN; + goto cleanup; + } else { + ret = + gnutls_assert_val + (GNUTLS_E_UNEXPECTED_PACKET); + goto unexpected_packet; + } + } + + /* application data cannot be inserted between (async) handshake + * messages */ + if (type == GNUTLS_APPLICATION_DATA && + (session->internals.handshake_recv_buffer_size != 0 || + session->internals.handshake_header_recv_buffer.length != 0)) { + ret = gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + goto unexpected_packet; + } + _gnutls_record_buffer_put(session, type, seq, bufel); /* if we received application data as expected then we * deactivate the async timer */ _dtls_async_timer_delete(session); } else { - /* if the expected type is different than the received + /* if the expected type is different than the received */ switch (recv->type) { case GNUTLS_ALERT: if (bufel->msg.size < 2) { ret = gnutls_assert_val - (GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + (GNUTLS_E_UNEXPECTED_PACKET); goto unexpected_packet; } @@ -775,18 +879,18 @@ record_add_to_buffers(gnutls_session_t session, */ if (bufel->msg.data[1] == GNUTLS_A_CLOSE_NOTIFY && bufel->msg.data[0] != GNUTLS_AL_FATAL) { - /* If we have been expecting for an alert do + /* If we have been expecting for an alert do */ session->internals.read_eof = 1; ret = GNUTLS_E_SESSION_EOF; goto cleanup; } else { /* if the alert is FATAL or WARNING - * return the apropriate message + * return the appropriate message */ gnutls_assert(); ret = GNUTLS_E_WARNING_ALERT_RECEIVED; - if (bufel->msg.data[0] == GNUTLS_AL_FATAL) { + if ((ver && ver->tls13_sem) || bufel->msg.data[0] == GNUTLS_AL_FATAL) { session_unresumable(session); session_invalidate(session); ret = @@ -823,13 +927,26 @@ record_add_to_buffers(gnutls_session_t session, goto unexpected_packet; } + /* In TLS1.3 post-handshake authentication allow application + * data error code. */ + if ((ver && ver->tls13_sem) && type == GNUTLS_HANDSHAKE && + htype == GNUTLS_HANDSHAKE_CERTIFICATE_PKT && + session->internals.initial_negotiation_completed) { + _gnutls_record_buffer_put(session, recv->type, + seq, bufel); + return + gnutls_assert_val + (GNUTLS_E_GOT_APPLICATION_DATA); + } - /* the got_application data is only returned + /* The got_application data is only returned * if expecting client hello (for rehandshake * reasons). Otherwise it is an unexpected packet */ if (type == GNUTLS_ALERT - || ((htype == GNUTLS_HANDSHAKE_SERVER_HELLO || htype == GNUTLS_HANDSHAKE_CLIENT_HELLO) + || ((htype == GNUTLS_HANDSHAKE_SERVER_HELLO || + htype == GNUTLS_HANDSHAKE_CLIENT_HELLO || + htype == GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST) && type == GNUTLS_HANDSHAKE)) { /* even if data is unexpected put it into the buffer */ _gnutls_record_buffer_put(session, recv->type, @@ -889,6 +1006,18 @@ record_add_to_buffers(gnutls_session_t session, } } + /* retrieve async handshake messages */ + if (ver && ver->tls13_sem) { + _gnutls_record_buffer_put(session, recv->type, seq, bufel); + + ret = _gnutls13_recv_async_handshake(session); + if (ret < 0) + return gnutls_assert_val(ret); + + /* bufel is now accounted */ + return GNUTLS_E_AGAIN; + } + /* This is legal if HELLO_REQUEST is received - and we are a client. * If we are a server, a client may initiate a renegotiation at any time. */ @@ -912,12 +1041,10 @@ record_add_to_buffers(gnutls_session_t session, /* So we accept it, if it is a Hello. If not, this will * fail and trigger flight retransmissions after some time. */ ret = - _gnutls_recv_hello_request(session, - bufel->msg.data, - bufel->msg.size); + recv_hello_request(session, + bufel->msg.data, + bufel->msg.size); goto unexpected_packet; - - break; default: _gnutls_record_log @@ -934,13 +1061,14 @@ record_add_to_buffers(gnutls_session_t session, return 0; - unexpected_packet: + unexpected_packet: + if (IS_DTLS(session) && ret != GNUTLS_E_REHANDSHAKE) { _mbuffer_xfree(&bufel); RETURN_DTLS_EAGAIN_OR_TIMEOUT(session, ret); } - cleanup: + cleanup: _mbuffer_xfree(&bufel); return ret; @@ -958,8 +1086,8 @@ record_read_headers(gnutls_session_t session, struct tls_record_st *record) { - /* Read the first two bytes to determine if this is a - * version 2 message + /* Read the first two bytes to determine if this is a + * version 2 message */ #ifdef ENABLE_SSL2 @@ -968,7 +1096,7 @@ record_read_headers(gnutls_session_t session, && !(IS_DTLS(session))) { /* if msb set and expecting handshake message - * it should be SSL 2 hello + * it should be SSL 2 hello */ record->version[0] = 3; /* assume SSL 3.0 */ record->version[1] = 0; @@ -1005,15 +1133,14 @@ record_read_headers(gnutls_session_t session, record->version[1] = headers[2]; if (IS_DTLS(session)) { - memcpy(record->sequence.i, &headers[3], 8); + record->sequence = _gnutls_read_uint64(&headers[3]); record->length = _gnutls_read_uint16(&headers[11]); - record->epoch = - _gnutls_read_uint16(record->sequence.i); + record->epoch = record->sequence >> 48; } else { memset(&record->sequence, 0, sizeof(record->sequence)); record->length = _gnutls_read_uint16(&headers[3]); - record->epoch = 0; + record->epoch = session->security_parameters.epoch_read; } _gnutls_record_log @@ -1029,7 +1156,7 @@ record_read_headers(gnutls_session_t session, } -static int recv_headers(gnutls_session_t session, +static int recv_headers(gnutls_session_t session, record_parameters_st *record_params, content_type_t type, gnutls_handshake_description_t htype, @@ -1056,7 +1183,7 @@ static int recv_headers(gnutls_session_t session, return gnutls_assert_val(ret); } - ret = _mbuffer_linearize_align16(&session->internals.record_recv_buffer, + ret = _mbuffer_linearize_align16(&session->internals.record_recv_buffer, get_total_headers2(session, record_params)); if (ret < 0) return gnutls_assert_val(ret); @@ -1073,14 +1200,9 @@ static int recv_headers(gnutls_session_t session, if (IS_DTLS(session)) { if (_gnutls_epoch_is_valid(session, record->epoch) == 0) { _gnutls_audit_log(session, - "Discarded message[%u] with invalid epoch %u.\n", - (unsigned int) - _gnutls_uint64touint32(&record-> - sequence), - (unsigned int) record->sequence. - i[0] * 256 + - (unsigned int) record->sequence. - i[1]); + "Discarded message[%lu] with invalid epoch %u.\n", + (unsigned long)record->sequence, + (unsigned int) (record->sequence >> 48)); gnutls_assert(); /* doesn't matter, just a fatal error */ return GNUTLS_E_UNEXPECTED_PACKET_LENGTH; @@ -1088,7 +1210,7 @@ static int recv_headers(gnutls_session_t session, } /* Here we check if the Type of the received packet is - * ok. + * ok. */ if ((ret = check_recv_type(session, record->type)) < 0) return gnutls_assert_val(ret); @@ -1100,10 +1222,20 @@ static int recv_headers(gnutls_session_t session, record_check_version(session, htype, record->version)) < 0) return gnutls_assert_val(ret); - if (record->length > max_record_recv_size(session)) { + if (record->length == 0 || record->length > max_record_recv_size(session)) { _gnutls_audit_log - (session, "Received packet with illegal length: %u\n", - (unsigned int) record->length); + (session, "Received packet with illegal length: %u (max: %u)\n", + (unsigned int) record->length, (unsigned)max_record_recv_size(session)); + + if (record->length == 0) { + /* Empty, unencrypted records are always unexpected. */ + if (record_params->cipher->id == GNUTLS_CIPHER_NULL) + return + gnutls_assert_val + (GNUTLS_E_UNEXPECTED_PACKET); + + return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED); + } return gnutls_assert_val(GNUTLS_E_RECORD_OVERFLOW); } @@ -1122,7 +1254,7 @@ static int recv_headers(gnutls_session_t session, /* @ms: is the number of milliseconds to wait for data. Use zero for indefinite. * - * This will receive record layer packets and add them to + * This will receive record layer packets and add them to * application_data_buffer and handshake_data_buffer. * * If the htype is not -1 then handshake timeouts @@ -1133,19 +1265,20 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, gnutls_handshake_description_t htype, unsigned int ms) { - gnutls_uint64 *packet_sequence; + uint64_t packet_sequence; gnutls_datum_t ciphertext; mbuffer_st *bufel = NULL, *decrypted = NULL; gnutls_datum_t t; int ret; - unsigned int empty_fragments = 0; + unsigned int n_retries = 0; record_parameters_st *record_params; record_state_st *record_state; struct tls_record_st record; + const version_entry_st *vers = get_version(session); - begin: + begin: - if (empty_fragments > DEFAULT_MAX_EMPTY_RECORDS) { + if (n_retries > DEFAULT_MAX_EMPTY_RECORDS) { gnutls_assert(); return GNUTLS_E_TOO_MANY_EMPTY_PACKETS; } @@ -1178,9 +1311,9 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, } if (IS_DTLS(session)) - packet_sequence = &record.sequence; + packet_sequence = record.sequence; else - packet_sequence = &record_state->sequence_number; + packet_sequence = record_state->sequence_number; /* Read the packet data and insert it to record_recv_buffer. */ @@ -1195,7 +1328,7 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, /* ok now we are sure that we have read all the data - so * move on ! */ - ret = _mbuffer_linearize_align16(&session->internals.record_recv_buffer, + ret = _mbuffer_linearize_align16(&session->internals.record_recv_buffer, get_total_headers2(session, record_params)); if (ret < 0) return gnutls_assert_val(ret); @@ -1206,6 +1339,25 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, if (bufel == NULL) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + if (vers && vers->tls13_sem && record.type == GNUTLS_CHANGE_CIPHER_SPEC) { + /* if the CCS has value other than 0x01, or arrives + * after Finished, abort the connection */ + if (record.length != 1 || + *((uint8_t *) _mbuffer_get_udata_ptr(bufel) + + record.header_size) != 0x01 || + !session->internals.handshake_in_progress) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + + _gnutls_read_log("discarding change cipher spec in TLS1.3\n"); + /* we use the same mechanism to retry as when + * receiving multiple empty TLS packets */ + bufel = + _mbuffer_head_pop_first(&session->internals. + record_recv_buffer); + _mbuffer_xfree(&bufel); + n_retries++; + goto begin; + } /* We allocate the maximum possible to allow few compressed bytes to expand to a * full record. Moreover we add space for any pad and the MAC (in case @@ -1221,24 +1373,109 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, (uint8_t *) _mbuffer_get_udata_ptr(bufel) + record.header_size; ciphertext.size = record.length; - /* decrypt the data we got. + /* decrypt the data we got. */ t.data = _mbuffer_get_udata_ptr(decrypted); t.size = _mbuffer_get_udata_size(decrypted); ret = _gnutls_decrypt(session, &ciphertext, &t, - record.type, record_params, packet_sequence); + &record.type, record_params, packet_sequence); if (ret >= 0) _mbuffer_set_udata_size(decrypted, ret); _mbuffer_head_remove_bytes(&session->internals.record_recv_buffer, record.header_size + record.length); + + if (session->security_parameters.entity == GNUTLS_SERVER && + session->internals.hsk_flags & HSK_EARLY_DATA_IN_FLIGHT) { + if (session->internals.hsk_flags & HSK_EARLY_DATA_ACCEPTED) { + if (ret < 0 || + /* early data must always be encrypted, treat it + * as decryption failure if otherwise */ + record_params->cipher->id == GNUTLS_CIPHER_NULL) { + _gnutls_record_log + ("REC[%p]: failed to decrypt early data, in epoch %d\n", + session, + record_params->epoch); + ret = GNUTLS_E_DECRYPTION_FAILED; + goto sanity_check_error; + } else if (record.type == GNUTLS_APPLICATION_DATA) { + size_t decrypted_length = + _mbuffer_get_udata_size(decrypted); + _gnutls_record_log + ("REC[%p]: decrypted early data with length: %d, in epoch %d\n", + session, + (int) decrypted_length, + record_params->epoch); + if (decrypted_length > + session->security_parameters.max_early_data_size - + session->internals.early_data_received) { + _gnutls_record_log + ("REC[%p]: max_early_data_size exceeded\n", + session); + ret = GNUTLS_E_UNEXPECTED_PACKET; + goto sanity_check_error; + } + + _mbuffer_enqueue(&session->internals.early_data_recv_buffer, decrypted); + session->internals.early_data_received += + decrypted_length; + + /* Increase sequence number. We do both for TLS and DTLS, since in + * DTLS we also rely on that number (roughly) since it may get reported + * to application via gnutls_record_get_state(). + */ + if (sequence_increment(session, &record_state->sequence_number) != 0) { + session_invalidate(session); + gnutls_assert(); + ret = GNUTLS_E_RECORD_LIMIT_REACHED; + goto sanity_check_error; + } + + /* decrypted is now accounted */ + return GNUTLS_E_AGAIN; + } + } else { + /* We do not accept early data: skip decryption + * failure up to max_early_data_size. Otherwise, + * if the record is properly decrypted, treat it as + * the start of client's second flight. + */ + if (record.type == GNUTLS_APPLICATION_DATA && + (ret < 0 || + /* early data must always be encrypted, treat it + * as decryption failure if otherwise */ + record_params->cipher->id == GNUTLS_CIPHER_NULL)) { + if (record.length > + session->security_parameters.max_early_data_size - + session->internals.early_data_received) { + _gnutls_record_log + ("REC[%p]: max_early_data_size exceeded\n", + session); + ret = GNUTLS_E_UNEXPECTED_PACKET; + goto sanity_check_error; + } + + _gnutls_record_log("REC[%p]: Discarded early data[%lu] due to invalid decryption, length: %u\n", + session, + (unsigned long)packet_sequence, + (unsigned int) + record.length); + session->internals.early_data_received += record.length; + /* silently discard received data */ + _mbuffer_xfree(&decrypted); + return gnutls_assert_val(GNUTLS_E_AGAIN); + } else { + session->internals.hsk_flags &= ~HSK_EARLY_DATA_IN_FLIGHT; + } + } + } + if (ret < 0) { gnutls_assert(); _gnutls_audit_log(session, - "Discarded message[%u] due to invalid decryption\n", - (unsigned int) - _gnutls_uint64touint32(packet_sequence)); + "Discarded message[%lu] due to invalid decryption\n", + (unsigned long)packet_sequence); goto sanity_check_error; } @@ -1250,36 +1487,31 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, ret = _dtls_record_check(record_params, packet_sequence); if (ret < 0) { _gnutls_record_log - ("REC[%p]: Discarded duplicate message[%u.%u]: %s\n", + ("REC[%p]: Discarded duplicate message[%u.%lu]: %s\n", session, - (unsigned int) record.sequence.i[0] * 256 + - (unsigned int) record.sequence.i[1], - (unsigned int) - _gnutls_uint64touint32(packet_sequence), + (unsigned int) (record.sequence >> 48), + (unsigned long) (packet_sequence), _gnutls_packet2str(record.type)); goto sanity_check_error; } } _gnutls_record_log - ("REC[%p]: Decrypted Packet[%u.%u] %s(%d) with length: %d\n", + ("REC[%p]: Decrypted Packet[%u.%lu] %s(%d) with length: %d\n", session, - (unsigned int) record.sequence.i[0] * 256 + - (unsigned int) record.sequence.i[1], - (unsigned int) - _gnutls_uint64touint32(packet_sequence), + (unsigned int) (record.sequence >> 48), + (unsigned long) packet_sequence, _gnutls_packet2str(record.type), record.type, (int) _mbuffer_get_udata_size(decrypted)); /* store the last valid sequence number. We don't use that internally but * callers of gnutls_record_get_state() could take advantage of it. */ - memcpy(&record_state->sequence_number, packet_sequence, 8); + record_state->sequence_number = record.sequence; } else { _gnutls_record_log - ("REC[%p]: Decrypted Packet[%u] %s(%d) with length: %d\n", + ("REC[%p]: Decrypted Packet[%lu] %s(%d) with length: %d\n", session, - (unsigned int) - _gnutls_uint64touint32(packet_sequence), + (unsigned long) packet_sequence, _gnutls_packet2str(record.type), record.type, (int) _mbuffer_get_udata_size(decrypted)); @@ -1296,19 +1528,35 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, goto sanity_check_error; } -/* (originally for) TLS 1.0 CBC protection. +/* (originally for) TLS 1.0 CBC protection. * Actually this code is called if we just received * an empty packet. An empty TLS packet is usually * sent to protect some vulnerabilities in the CBC mode. * In that case we go to the beginning and start reading * the next packet. */ - if (_mbuffer_get_udata_size(decrypted) == 0) { + if (_mbuffer_get_udata_size(decrypted) == 0 && + /* Under TLS 1.3, there are only AEAD ciphers and this + * logic is meaningless. Moreover, the implementation need + * to send correct alert upon receiving empty messages in + * certain occasions. Skip this and leave + * record_add_to_buffers() to handle the empty + * messages. */ + !(vers && vers->tls13_sem)) { _mbuffer_xfree(&decrypted); - empty_fragments++; + n_retries++; goto begin; } + if (_mbuffer_get_udata_size(decrypted) > max_decrypted_size(session)) { + _gnutls_audit_log + (session, "Received packet with illegal length: %u\n", + (unsigned int) ret); + + ret = gnutls_assert_val(GNUTLS_E_RECORD_OVERFLOW); + goto sanity_check_error; + } + #ifdef ENABLE_SSL2 if (record.v2) { decrypted->htype = GNUTLS_HANDSHAKE_CLIENT_HELLO_V2; @@ -1330,7 +1578,7 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, return ret; - discard: + discard: session->internals.dtls.packets_dropped++; /* discard the whole received fragment. */ @@ -1340,7 +1588,7 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, _mbuffer_xfree(&bufel); return gnutls_assert_val(GNUTLS_E_AGAIN); - sanity_check_error: + sanity_check_error: if (IS_DTLS(session)) { session->internals.dtls.packets_dropped++; ret = gnutls_assert_val(GNUTLS_E_AGAIN); @@ -1350,11 +1598,11 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, session_unresumable(session); session_invalidate(session); - cleanup: + cleanup: _mbuffer_xfree(&decrypted); return ret; - recv_error: + recv_error: if (ret < 0 && (gnutls_error_is_fatal(ret) == 0 || ret == GNUTLS_E_TIMEDOUT)) @@ -1388,7 +1636,7 @@ _gnutls_recv_in_buffers(gnutls_session_t session, content_type_t type, /* Returns a value greater than zero (>= 0) if buffers should be checked * for data. */ static ssize_t -check_session_status(gnutls_session_t session) +check_session_status(gnutls_session_t session, unsigned ms) { int ret; @@ -1403,37 +1651,89 @@ check_session_status(gnutls_session_t session) } switch (session->internals.recv_state) { + case RECV_STATE_REAUTH: + session->internals.recv_state = RECV_STATE_0; + + ret = gnutls_reauth(session, 0); + if (ret < 0) { + /* a temp or fatal error, make sure we reset the state + * so we can resume on temp errors */ + session->internals.recv_state = RECV_STATE_REAUTH; + return gnutls_assert_val(ret); + } + + return 1; + case RECV_STATE_REHANDSHAKE: + session->internals.recv_state = RECV_STATE_0; + + ret = gnutls_handshake(session); + if (ret < 0) { + /* a temp or fatal error, make sure we reset the state + * so we can resume on temp errors */ + session->internals.recv_state = RECV_STATE_REHANDSHAKE; + return gnutls_assert_val(ret); + } + + return 1; + case RECV_STATE_ASYNC_HANDSHAKE: + ret = _gnutls_recv_in_buffers(session, GNUTLS_HANDSHAKE, -1, ms); + if (ret < 0 && ret != GNUTLS_E_SESSION_EOF) + return gnutls_assert_val(ret); + + ret = _gnutls13_recv_async_handshake(session); + if (ret < 0) + return gnutls_assert_val(ret); + + return GNUTLS_E_AGAIN; + case RECV_STATE_EARLY_START_HANDLING: case RECV_STATE_FALSE_START_HANDLING: return 1; case RECV_STATE_FALSE_START: /* if false start is not complete we always expect for handshake packets * prior to anything else. */ - if (session->security_parameters.entity == GNUTLS_CLIENT && - (session->internals.flags & GNUTLS_ENABLE_FALSE_START)) { - /* Attempt to complete handshake */ + if (session->security_parameters.entity != GNUTLS_CLIENT || + !(session->internals.flags & GNUTLS_ENABLE_FALSE_START)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - session->internals.recv_state = RECV_STATE_FALSE_START_HANDLING; - ret = gnutls_handshake(session); - if (ret < 0) { - /* a temp or fatal error, make sure we reset the state - * so we can resume or temp errors */ - session->internals.recv_state = RECV_STATE_FALSE_START; - gnutls_assert(); - return ret; - } + /* Attempt to complete handshake - we only need to receive */ + session->internals.recv_state = RECV_STATE_FALSE_START_HANDLING; + ret = gnutls_handshake(session); + if (ret < 0) { + /* a temp or fatal error, make sure we reset the state + * so we can resume on temp errors */ + session->internals.recv_state = RECV_STATE_FALSE_START; + return gnutls_assert_val(ret); + } - session->internals.recv_state = RECV_STATE_0; - return 1; - } else { + session->internals.recv_state = RECV_STATE_0; + return 1; + case RECV_STATE_EARLY_START: + /* if early start is not complete we always expect for handshake packets + * prior to anything else. */ + if (session->security_parameters.entity != GNUTLS_SERVER || + !(session->internals.flags & GNUTLS_ENABLE_EARLY_START)) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + /* Attempt to complete handshake - we only need to receive */ + session->internals.recv_state = RECV_STATE_EARLY_START_HANDLING; + ret = gnutls_handshake(session); + if (ret < 0) { + /* a temp or fatal error, make sure we reset the state + * so we can resume on temp errors */ + session->internals.recv_state = RECV_STATE_EARLY_START; + return gnutls_assert_val(ret); } + + session->internals.recv_state = RECV_STATE_0; + return 1; case RECV_STATE_DTLS_RETRANSMIT: ret = _dtls_retransmit(session); if (ret < 0) return gnutls_assert_val(ret); session->internals.recv_state = RECV_STATE_0; - /* Fall through: */ + + FALLTHROUGH; case RECV_STATE_0: _dtls_async_timer_check(session); @@ -1459,7 +1759,7 @@ _gnutls_recv_int(gnutls_session_t session, content_type_t type, && (data_size == 0 || data == NULL)) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - ret = check_session_status(session); + ret = check_session_status(session, ms); if (ret <= 0) return ret; @@ -1500,8 +1800,10 @@ void gnutls_packet_get(gnutls_packet_t packet, gnutls_datum_t *data, unsigned ch } } + assert(packet != NULL); + if (sequence) { - memcpy(sequence, packet->record_sequence.i, 8); + _gnutls_write_uint64(packet->record_sequence, sequence); } if (data) { @@ -1528,9 +1830,13 @@ void gnutls_packet_deinit(gnutls_packet_t packet) * gnutls_record_discard_queued: * @session: is a #gnutls_session_t type. * - * This function discards all queued to be sent packets in a TLS or DTLS session. + * This function discards all queued to be sent packets in a DTLS session. * These are the packets queued after an interrupted gnutls_record_send(). * + * This function can only be used with transports where send() is + * an all-or-nothing operation (e.g., UDP). When partial writes are allowed + * this function will cause session errors. + * * Returns: The number of bytes discarded. * * Since: 3.4.0 @@ -1553,17 +1859,17 @@ gnutls_record_discard_queued(gnutls_session_t session) * memory copy, and is intended to be used by applications seeking high * performance. * - * The received packet is accessed using gnutls_packet_get() and + * The received packet is accessed using gnutls_packet_get() and * must be deinitialized using gnutls_packet_deinit(). The returned * packet will be %NULL if the return value is zero (EOF). * * Returns: The number of bytes received and zero on EOF (for stream - * connections). A negative error code is returned in case of an error. + * connections). A negative error code is returned in case of an error. * * Since: 3.3.5 **/ ssize_t -gnutls_record_recv_packet(gnutls_session_t session, +gnutls_record_recv_packet(gnutls_session_t session, gnutls_packet_t *packet) { int ret; @@ -1571,7 +1877,7 @@ gnutls_record_recv_packet(gnutls_session_t session, if (packet == NULL) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - ret = check_session_status(session); + ret = check_session_status(session, session->internals.record_timeout_ms); if (ret <= 0) return ret; @@ -1587,6 +1893,28 @@ gnutls_record_recv_packet(gnutls_session_t session, return get_packet_from_buffers(session, GNUTLS_APPLICATION_DATA, packet); } +static +ssize_t append_data_to_corked(gnutls_session_t session, const void *data, size_t data_size) +{ + int ret; + + if (IS_DTLS(session)) { + if (data_size + session->internals.record_presend_buffer.length > + gnutls_dtls_get_data_mtu(session)) { + return gnutls_assert_val(GNUTLS_E_LARGE_PACKET); + } + } + + ret = + _gnutls_buffer_append_data(&session->internals. + record_presend_buffer, data, + data_size); + if (ret < 0) + return gnutls_assert_val(ret); + + return data_size; +} + /** * gnutls_record_send: * @session: is a #gnutls_session_t type. @@ -1597,22 +1925,26 @@ gnutls_record_recv_packet(gnutls_session_t session, * difference is that it accepts a GnuTLS session, and uses different * error codes. * Note that if the send buffer is full, send() will block this - * function. See the send() documentation for more information. + * function. See the send() documentation for more information. * * You can replace the default push function which is send(), by using * gnutls_transport_set_push_function(). * - * If the EINTR is returned by the internal push function + * If the EINTR is returned by the internal push function * then %GNUTLS_E_INTERRUPTED will be returned. If * %GNUTLS_E_INTERRUPTED or %GNUTLS_E_AGAIN is returned, you must - * call this function again, with the exact same parameters; alternatively - * you could provide a %NULL pointer for data, and 0 for - * size. cf. gnutls_record_get_direction(). + * call this function again with the exact same parameters, or provide a + * %NULL pointer for @data and 0 for @data_size, in order to write the + * same data as before. If you wish to discard the previous data instead + * of retrying, you must call gnutls_record_discard_queued() before + * calling this function with different parameters. Note that the latter + * works only on special transports (e.g., UDP). + * cf. gnutls_record_get_direction(). * * Note that in DTLS this function will return the %GNUTLS_E_LARGE_PACKET * error code if the send data exceed the data MTU value - as returned * by gnutls_dtls_get_data_mtu(). The errno value EMSGSIZE - * also maps to %GNUTLS_E_LARGE_PACKET. + * also maps to %GNUTLS_E_LARGE_PACKET. * Note that since 3.2.13 this function can be called under cork in DTLS * mode, and will refuse to send data over the MTU size by returning * %GNUTLS_E_LARGE_PACKET. @@ -1626,40 +1958,209 @@ ssize_t gnutls_record_send(gnutls_session_t session, const void *data, size_t data_size) { + return gnutls_record_send2(session, data, data_size, 0, 0); +} + +/** + * gnutls_record_send2: + * @session: is a #gnutls_session_t type. + * @data: contains the data to send + * @data_size: is the length of the data + * @pad: padding to be added to the record + * @flags: must be zero + * + * This function is identical to gnutls_record_send() except that it + * takes an extra argument to specify padding to be added the record. + * To determine the maximum size of padding, use + * gnutls_record_get_max_size() and gnutls_record_overhead_size(). + * + * Note that in order for GnuTLS to provide constant time processing + * of padding and data in TLS1.3, the flag %GNUTLS_SAFE_PADDING_CHECK + * must be used in gnutls_init(). + * + * Returns: The number of bytes sent, or a negative error code. The + * number of bytes sent might be less than @data_size. The maximum + * number of bytes this function can send in a single call depends + * on the negotiated maximum record size. + * + * Since: 3.6.3 + **/ +ssize_t +gnutls_record_send2(gnutls_session_t session, const void *data, + size_t data_size, size_t pad, unsigned flags) +{ + const version_entry_st *vers = get_version(session); + size_t max_pad = 0; + int ret; + if (unlikely(!session->internals.initial_negotiation_completed)) { /* this is to protect buggy applications from sending unencrypted - * data. We allow sending however, if we are in false start handshake - * state. */ - if (session->internals.recv_state != RECV_STATE_FALSE_START) + * data. We allow sending however, if we are in false or early start + * handshake state. */ + gnutls_mutex_lock(&session->internals.post_negotiation_lock); + + /* we intentionally re-check the initial_negotation_completed variable + * to avoid locking during normal operation of gnutls_record_send2() */ + if (!session->internals.initial_negotiation_completed && + session->internals.recv_state != RECV_STATE_FALSE_START && + session->internals.recv_state != RECV_STATE_FALSE_START_HANDLING && + session->internals.recv_state != RECV_STATE_EARLY_START && + session->internals.recv_state != RECV_STATE_EARLY_START_HANDLING && + !(session->internals.hsk_flags & HSK_EARLY_DATA_IN_FLIGHT)) { + + gnutls_mutex_unlock(&session->internals.post_negotiation_lock); return gnutls_assert_val(GNUTLS_E_UNAVAILABLE_DURING_HANDSHAKE); + } + gnutls_mutex_unlock(&session->internals.post_negotiation_lock); } - if (session->internals.record_flush_mode == RECORD_FLUSH) { - return _gnutls_send_int(session, GNUTLS_APPLICATION_DATA, - -1, EPOCH_WRITE_CURRENT, data, - data_size, MBUFFER_FLUSH); - } else { /* GNUTLS_CORKED */ + if (unlikely(!vers)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - int ret; + if (vers->tls13_sem) + max_pad = gnutls_record_get_max_size(session) - gnutls_record_overhead_size(session); - if (IS_DTLS(session)) { - if (data_size + session->internals.record_presend_buffer.length > - gnutls_dtls_get_data_mtu(session)) { - return gnutls_assert_val(GNUTLS_E_LARGE_PACKET); - } - } + if (pad > max_pad) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - ret = - _gnutls_buffer_append_data(&session->internals. - record_presend_buffer, data, - data_size); - if (ret < 0) - return gnutls_assert_val(ret); + switch(session->internals.rsend_state) { + case RECORD_SEND_NORMAL: + return _gnutls_send_tlen_int(session, GNUTLS_APPLICATION_DATA, + -1, EPOCH_WRITE_CURRENT, data, + data_size, pad, MBUFFER_FLUSH); + case RECORD_SEND_CORKED: + case RECORD_SEND_CORKED_TO_KU: + return append_data_to_corked(session, data, data_size); + case RECORD_SEND_KEY_UPDATE_1: + _gnutls_buffer_reset(&session->internals.record_key_update_buffer); + + ret = _gnutls_buffer_append_data(&session->internals.record_key_update_buffer, + data, data_size); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.rsend_state = RECORD_SEND_KEY_UPDATE_2; + FALLTHROUGH; + case RECORD_SEND_KEY_UPDATE_2: + ret = gnutls_session_key_update(session, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.rsend_state = RECORD_SEND_KEY_UPDATE_3; + FALLTHROUGH; + case RECORD_SEND_KEY_UPDATE_3: + ret = _gnutls_send_int(session, GNUTLS_APPLICATION_DATA, + -1, EPOCH_WRITE_CURRENT, + session->internals.record_key_update_buffer.data, + session->internals.record_key_update_buffer.length, + MBUFFER_FLUSH); + _gnutls_buffer_clear(&session->internals.record_key_update_buffer); + session->internals.rsend_state = RECORD_SEND_NORMAL; + if (ret < 0) + gnutls_assert(); - return data_size; + return ret; + default: + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); } } +/** + * gnutls_record_send_early_data: + * @session: is a #gnutls_session_t type. + * @data: contains the data to send + * @data_size: is the length of the data + * + * This function can be used by a client to send data early in the + * handshake processes when resuming a session. This is used to + * implement a zero-roundtrip (0-RTT) mode. It has the same semantics + * as gnutls_record_send(). + * + * There may be a limit to the amount of data sent as early data. Use + * gnutls_record_get_max_early_data_size() to check the limit. If the + * limit exceeds, this function returns + * %GNUTLS_E_RECORD_LIMIT_REACHED. + * + * Returns: The number of bytes sent, or a negative error code. The + * number of bytes sent might be less than @data_size. The maximum + * number of bytes this function can send in a single call depends + * on the negotiated maximum record size. + * + * Since: 3.6.5 + **/ +ssize_t gnutls_record_send_early_data(gnutls_session_t session, + const void *data, + size_t data_size) +{ + int ret; + + if (session->security_parameters.entity != GNUTLS_CLIENT) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (xsum(session->internals. + early_data_presend_buffer.length, + data_size) > + session->security_parameters.max_early_data_size) + return gnutls_assert_val(GNUTLS_E_RECORD_LIMIT_REACHED); + + ret = + _gnutls_buffer_append_data(&session->internals. + early_data_presend_buffer, data, + data_size); + if (ret < 0) + return gnutls_assert_val(ret); + + return ret; +} + +/** + * gnutls_record_recv_early_data: + * @session: is a #gnutls_session_t type. + * @data: the buffer that the data will be read into + * @data_size: the number of requested bytes + * + * This function can be used by a searver to retrieve data sent early + * in the handshake processes when resuming a session. This is used + * to implement a zero-roundtrip (0-RTT) mode. It has the same + * semantics as gnutls_record_recv(). + * + * This function can be called either in a handshake hook, or after + * the handshake is complete. + * + * Returns: The number of bytes received and zero when early data + * reading is complete. A negative error code is returned in case of + * an error. If no early data is received during the handshake, this + * function returns %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE. The + * number of bytes received might be less than the requested + * @data_size. + * + * Since: 3.6.5 + **/ +ssize_t +gnutls_record_recv_early_data(gnutls_session_t session, void *data, size_t data_size) +{ + mbuffer_st *bufel; + gnutls_datum_t msg; + size_t length; + + if (session->security_parameters.entity != GNUTLS_SERVER) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + bufel = _mbuffer_head_get_first(&session->internals.early_data_recv_buffer, + &msg); + if (bufel == NULL) + return + gnutls_assert_val + (GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + length = MIN(msg.size, data_size); + memcpy(data, msg.data, length); + _mbuffer_head_remove_bytes(&session->internals.early_data_recv_buffer, + length); + + return length; +} + /** * gnutls_record_cork: * @session: is a #gnutls_session_t type. @@ -1673,7 +2174,7 @@ gnutls_record_send(gnutls_session_t session, const void *data, **/ void gnutls_record_cork(gnutls_session_t session) { - session->internals.record_flush_mode = RECORD_CORKED; + session->internals.rsend_state = RECORD_SEND_CORKED; } /** @@ -1692,8 +2193,8 @@ void gnutls_record_cork(gnutls_session_t session) * errors will be returned. To obtain the data left in the corked * buffer use gnutls_record_check_corked(). * - * Returns: On success the number of transmitted data is returned, or - * otherwise a negative error code. + * Returns: On success the number of transmitted data is returned, or + * otherwise a negative error code. * * Since: 3.1.9 **/ @@ -1701,12 +2202,15 @@ int gnutls_record_uncork(gnutls_session_t session, unsigned int flags) { int ret; ssize_t total = 0; + record_send_state_t orig_state = session->internals.rsend_state; - if (session->internals.record_flush_mode == RECORD_FLUSH) + if (orig_state == RECORD_SEND_CORKED) + session->internals.rsend_state = RECORD_SEND_NORMAL; + else if (orig_state == RECORD_SEND_CORKED_TO_KU) + session->internals.rsend_state = RECORD_SEND_KEY_UPDATE_1; + else return 0; /* nothing to be done */ - session->internals.record_flush_mode = RECORD_FLUSH; - while (session->internals.record_presend_buffer.length > 0) { if (flags == GNUTLS_RECORD_WAIT) { do { @@ -1740,7 +2244,7 @@ int gnutls_record_uncork(gnutls_session_t session, unsigned int flags) return total; fail: - session->internals.record_flush_mode = RECORD_CORKED; + session->internals.rsend_state = orig_state; return ret; } @@ -1767,7 +2271,7 @@ int gnutls_record_uncork(gnutls_session_t session, unsigned int flags) * gnutls_record_get_direction(). * * Returns: The number of bytes received and zero on EOF (for stream - * connections). A negative error code is returned in case of an error. + * connections). A negative error code is returned in case of an error. * The number of bytes received might be less than the requested @data_size. **/ ssize_t @@ -1777,7 +2281,8 @@ gnutls_record_recv(gnutls_session_t session, void *data, size_t data_size) /* this is to protect buggy applications from sending unencrypted * data. We allow sending however, if we are in false start handshake * state. */ - if (session->internals.recv_state != RECV_STATE_FALSE_START) + if (session->internals.recv_state != RECV_STATE_FALSE_START && + session->internals.recv_state != RECV_STATE_EARLY_START) return gnutls_assert_val(GNUTLS_E_UNAVAILABLE_DURING_HANDSHAKE); } @@ -1798,7 +2303,7 @@ gnutls_record_recv(gnutls_session_t session, void *data, size_t data_size) * This is useful in DTLS where record packets might be received * out-of-order. The returned 8-byte sequence number is an * integer in big-endian format and should be - * treated as a unique message identification. + * treated as a unique message identification. * * Returns: The number of bytes received and zero on EOF. A negative * error code is returned in case of an error. The number of bytes diff --git a/lib/record.h b/lib/record.h index f16df4769d..27aab48c7b 100644 --- a/lib/record.h +++ b/lib/record.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_RECORD_H -#define GNUTLS_RECORD_H +#ifndef GNUTLS_LIB_RECORD_H +#define GNUTLS_LIB_RECORD_H #include #include @@ -52,12 +52,13 @@ inline static unsigned max_record_recv_size(gnutls_session_t session) { unsigned size; - size = MAX_CIPHER_BLOCK_SIZE /*iv*/ + MAX_PAD_SIZE + MAX_HASH_SIZE/*MAC*/; - - if (gnutls_compression_get(session)!=GNUTLS_COMP_NULL || session->internals.priorities.allow_large_records != 0) - size += EXTRA_COMP_SIZE; - - size += session->security_parameters.max_record_recv_size + RECORD_HEADER_SIZE(session); + if (session->internals.max_recv_size == 0) { + size = session->security_parameters.max_record_recv_size + RECORD_HEADER_SIZE(session); + if (session->internals.allow_large_records != 0) + size += EXTRA_COMP_SIZE; + } else { + size = session->internals.max_recv_size; + } return size; } @@ -66,7 +67,7 @@ inline static unsigned max_decrypted_size(gnutls_session_t session) { unsigned size = 0; - if (session->internals.priorities.allow_large_records != 0) + if (session->internals.allow_large_records != 0) size += EXTRA_COMP_SIZE; size += session->security_parameters.max_record_recv_size; @@ -104,4 +105,4 @@ inline static void session_invalidate(gnutls_session_t session) session->internals.invalid_connection = 1; } -#endif +#endif /* GNUTLS_LIB_RECORD_H */ diff --git a/lib/safe-memfuncs.c b/lib/safe-memfuncs.c index e5673e5737..b957b432cd 100644 --- a/lib/safe-memfuncs.c +++ b/lib/safe-memfuncs.c @@ -14,15 +14,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifdef TEST_SAFE_MEMSET -# include -#else -# include "gnutls_int.h" -#endif +#include "gnutls_int.h" +#include /** * gnutls_memset: @@ -33,14 +30,19 @@ * This function will operate similarly to memset(), but will * not be optimized out by the compiler. * - * Returns: void. - * * Since: 3.4.0 **/ void gnutls_memset(void *data, int c, size_t size) { - volatile unsigned volatile_zero = 0; + volatile unsigned volatile_zero; volatile char *vdata = (volatile char*)data; +#ifdef HAVE_EXPLICIT_BZERO + if (c == 0) { + explicit_bzero(data, size); + return; + } +#endif + volatile_zero = 0; /* This is based on a nice trick for safe memset, * sent by David Jacobson in the openssl-dev mailing list. diff --git a/lib/secrets.c b/lib/secrets.c new file mode 100644 index 0000000000..7bd69bc7ef --- /dev/null +++ b/lib/secrets.c @@ -0,0 +1,202 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* TLS 1.3 secret key derivation handling. + */ + +#include +#include "gnutls_int.h" +#include "secrets.h" + +/* HKDF-Extract(0,0) or HKDF-Extract(0, PSK) */ +int _tls13_init_secret(gnutls_session_t session, const uint8_t *psk, size_t psk_size) +{ + session->key.proto.tls13.temp_secret_size = session->security_parameters.prf->output_size; + + return _tls13_init_secret2(session->security_parameters.prf, + psk, psk_size, + session->key.proto.tls13.temp_secret); +} + +int _tls13_init_secret2(const mac_entry_st *prf, + const uint8_t *psk, size_t psk_size, + void *out) +{ + char buf[128]; + + if (unlikely(prf == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + /* when no PSK, use the zero-value */ + if (psk == NULL) { + psk_size = prf->output_size; + if (unlikely(psk_size >= sizeof(buf))) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + memset(buf, 0, psk_size); + psk = (uint8_t*) buf; + } + + return gnutls_hmac_fast(prf->id, + "", 0, + psk, psk_size, + out); +} + +/* HKDF-Extract(Prev-Secret, key) */ +int _tls13_update_secret(gnutls_session_t session, const uint8_t *key, size_t key_size) +{ + gnutls_datum_t _key; + gnutls_datum_t salt; + + _key.data = (void *)key; + _key.size = key_size; + salt.data = (void *)session->key.proto.tls13.temp_secret; + salt.size = session->key.proto.tls13.temp_secret_size; + + return gnutls_hkdf_extract(session->security_parameters.prf->id, + &_key, &salt, + session->key.proto.tls13.temp_secret); +} + +/* Derive-Secret(Secret, Label, Messages) */ +int _tls13_derive_secret2(const mac_entry_st *prf, + const char *label, unsigned label_size, + const uint8_t *tbh, size_t tbh_size, + const uint8_t secret[MAX_HASH_SIZE], + void *out) +{ + uint8_t digest[MAX_HASH_SIZE]; + int ret; + unsigned digest_size; + + if (unlikely(prf == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + if (unlikely(label_size >= sizeof(digest))) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + digest_size = prf->output_size; + ret = gnutls_hash_fast((gnutls_digest_algorithm_t) prf->id, + tbh, tbh_size, digest); + if (ret < 0) + return gnutls_assert_val(ret); + + return _tls13_expand_secret2(prf, label, label_size, digest, digest_size, secret, digest_size, out); +} + +/* Derive-Secret(Secret, Label, Messages) */ +int _tls13_derive_secret(gnutls_session_t session, + const char *label, unsigned label_size, + const uint8_t *tbh, size_t tbh_size, + const uint8_t secret[MAX_HASH_SIZE], + void *out) +{ + if (unlikely(session->security_parameters.prf == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + return _tls13_derive_secret2(session->security_parameters.prf, label, label_size, tbh, tbh_size, + secret, + out); +} + +/* HKDF-Expand-Label(Secret, Label, HashValue, Length) */ +int _tls13_expand_secret2(const mac_entry_st *prf, + const char *label, unsigned label_size, + const uint8_t *msg, size_t msg_size, + const uint8_t secret[MAX_HASH_SIZE], + unsigned out_size, + void *out) +{ + uint8_t tmp[256] = "tls13 "; + gnutls_buffer_st str; + gnutls_datum_t key; + gnutls_datum_t info; + int ret; + + if (unlikely(label_size >= sizeof(tmp)-6)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + _gnutls_buffer_init(&str); + + ret = _gnutls_buffer_append_prefix(&str, 16, out_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + memcpy(&tmp[6], label, label_size); + ret = _gnutls_buffer_append_data_prefix(&str, 8, tmp, label_size+6); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data_prefix(&str, 8, msg, msg_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + key.data = (void *)secret; + key.size =_gnutls_mac_get_algo_len(mac_to_entry(prf->id)); + info.data = str.data; + info.size = str.length; + + ret = gnutls_hkdf_expand(prf->id, &key, &info, out, out_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + +#if 0 + _gnutls_hard_log("INT: hkdf label: %d,%s\n", + out_size, + _gnutls_bin2hex(str.data, str.length, + (char*)tmp, sizeof(tmp), NULL)); + _gnutls_hard_log("INT: secret expanded for '%.*s': %d,%s\n", + (int)label_size, label, out_size, + _gnutls_bin2hex(out, out_size, + (char*)tmp, sizeof(tmp), NULL)); +#endif + + ret = 0; + cleanup: + _gnutls_buffer_clear(&str); + return ret; +} + +int _tls13_expand_secret(gnutls_session_t session, + const char *label, unsigned label_size, + const uint8_t *msg, size_t msg_size, + const uint8_t secret[MAX_CIPHER_KEY_SIZE], + unsigned out_size, + void *out) +{ + if (unlikely(session->security_parameters.prf == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + return _tls13_expand_secret2(session->security_parameters.prf, + label, label_size, + msg, msg_size, secret, + out_size, out); +} + diff --git a/lib/secrets.h b/lib/secrets.h new file mode 100644 index 0000000000..13220264a3 --- /dev/null +++ b/lib/secrets.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_SECRETS_H +#define GNUTLS_LIB_SECRETS_H + +#include "gnutls_int.h" + +int _tls13_init_secret(gnutls_session_t session, const uint8_t *psk, size_t psk_size); +int _tls13_update_secret(gnutls_session_t session, const uint8_t *key, size_t key_size); + +int _tls13_init_secret2(const mac_entry_st *prf, + const uint8_t *psk, size_t psk_size, + void *out); + +int _tls13_derive_secret(gnutls_session_t session, + const char *label, unsigned label_size, + const uint8_t *msg, size_t msg_size, + const uint8_t secret[MAX_HASH_SIZE], + void *out /* of enough length to hold PRF MAC */); +int _tls13_derive_secret2(const mac_entry_st *prf, + const char *label, unsigned label_size, + const uint8_t *tbh, size_t tbh_size, + const uint8_t secret[MAX_CIPHER_KEY_SIZE], + void *out); + +int _tls13_expand_secret(gnutls_session_t session, + const char *label, unsigned label_size, + const uint8_t *msg, size_t msg_size, + const uint8_t secret[MAX_HASH_SIZE], + unsigned out_size, + void *out); +int _tls13_expand_secret2(const mac_entry_st *prf, + const char *label, unsigned label_size, + const uint8_t *msg, size_t msg_size, + const uint8_t secret[MAX_CIPHER_KEY_SIZE], + unsigned out_size, void *out); + +#endif /* GNUTLS_LIB_SECRETS_H */ diff --git a/lib/session.c b/lib/session.c index 755864d93b..71bcb40515 100644 --- a/lib/session.c +++ b/lib/session.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2000-2016 Free Software Foundation, Inc. - * Copyright (C) 2016 Red Hat, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ #include "gnutls_int.h" @@ -25,6 +25,10 @@ #include "debug.h" #include #include +#include "buffers.h" +#include "state.h" +#include "ext/cert_types.h" +#include /** * gnutls_session_get_data: @@ -32,13 +36,10 @@ * @session_data: is a pointer to space to hold the session. * @session_data_size: is the session_data's size, or it will be set by the function. * - * Returns all session parameters needed to be stored to support resumption. - * The client should call this, and store the returned session data. A session - * may be resumed later by calling gnutls_session_set_data(). + * Returns all session parameters needed to be stored to support resumption, + * in a pre-allocated buffer. * - * This function will fail if called prior to handshake completion. In - * case of false start TLS, the handshake completes only after data have - * been successfully received from the peer. + * See gnutls_session_get_data2() for more information. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise * an error code is returned. @@ -74,14 +75,20 @@ gnutls_session_get_data(gnutls_session_t session, return ret; } +#define EMPTY_DATA "\x00\x00\x00\x00" +#define EMPTY_DATA_SIZE 4 + /** * gnutls_session_get_data2: * @session: is a #gnutls_session_t type. * @data: is a pointer to a datum that will hold the session. * - * Returns all session parameters needed to be stored to support resumption. - * The client should call this, and store the returned session data. A session - * may be resumed later by calling gnutls_session_set_data(). + * Returns necessary parameters to support resumption. The client + * should call this function and store the returned session data. A session + * can be resumed later by calling gnutls_session_set_data() with the returned + * data. Note that under TLS 1.3, it is recommended for clients to use + * session parameters only once, to prevent passive-observers from correlating + * the different connections. * * The returned @data are allocated and must be released using gnutls_free(). * @@ -89,25 +96,74 @@ gnutls_session_get_data(gnutls_session_t session, * case of false start TLS, the handshake completes only after data have * been successfully received from the peer. * + * Under TLS1.3 session resumption is possible only after a session ticket + * is received by the client. To ensure that such a ticket has been received use + * gnutls_session_get_flags() and check for flag %GNUTLS_SFLAGS_SESSION_TICKET; + * if this flag is not set, this function will wait for a new ticket within + * an estimated rountrip, and if not received will return dummy data which + * cannot lead to resumption. + * + * To get notified when new tickets are received by the server + * use gnutls_handshake_set_hook_function() to wait for %GNUTLS_HANDSHAKE_NEW_SESSION_TICKET + * messages. Each call of gnutls_session_get_data2() after a ticket is + * received, will return session resumption data corresponding to the last + * received ticket. + * + * Note that this function under TLS1.3 requires a callback to be set with + * gnutls_transport_set_pull_timeout_function() for successful operation. There + * was a bug before 3.6.10 which could make this function fail if that callback + * was not set. On later versions if not set, the function will return a successful + * error code, but will return dummy data that cannot lead to a resumption. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise * an error code is returned. **/ int gnutls_session_get_data2(gnutls_session_t session, gnutls_datum_t *data) { - + const version_entry_st *vers = get_version(session); int ret; - if (data == NULL) { + if (data == NULL || vers == NULL) { return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); } - if (gnutls_session_is_resumed(session) && session->internals.resumption_data.data) { - ret = _gnutls_set_datum(data, session->internals.resumption_data.data, session->internals.resumption_data.size); - if (ret < 0) - return gnutls_assert_val(ret); - - return 0; + if (vers->tls13_sem && !(session->internals.hsk_flags & HSK_TICKET_RECEIVED)) { + unsigned ertt = session->internals.ertt; + /* use our estimation of round-trip + some time for the server to calculate + * the value(s). */ + ertt += 60; + + /* we cannot use a read with timeout if the caller has not set + * a callback with gnutls_transport_set_pull_timeout_function() */ + if (NO_TIMEOUT_FUNC_SET(session) || (session->internals.flags & GNUTLS_NONBLOCK)) { + if (!(session->internals.flags & GNUTLS_NONBLOCK)) + _gnutls_debug_log("TLS1.3 works efficiently if a callback with gnutls_transport_set_pull_timeout_function() is set\n"); + } else { + /* wait for a message with timeout */ + ret = _gnutls_recv_in_buffers(session, GNUTLS_APPLICATION_DATA, -1, ertt); + if (ret < 0 && (gnutls_error_is_fatal(ret) && ret != GNUTLS_E_TIMEDOUT)) { + return gnutls_assert_val(ret); + } + } + + if (!(session->internals.hsk_flags & HSK_TICKET_RECEIVED)) { + ret = _gnutls_set_datum(data, EMPTY_DATA, EMPTY_DATA_SIZE); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; + } + } else if (!vers->tls13_sem) { + /* under TLS1.3 we want to pack the latest ticket, while that's + * not the case in TLS1.2 or earlier. */ + if (gnutls_session_is_resumed(session) && session->internals.resumption_data.data) { + ret = _gnutls_set_datum(data, session->internals.resumption_data.data, session->internals.resumption_data.size); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; + } } if (session->internals.resumable == RESUME_FALSE) @@ -129,14 +185,23 @@ gnutls_session_get_data2(gnutls_session_t session, gnutls_datum_t *data) * @session_id: is a pointer to space to hold the session id. * @session_id_size: initially should contain the maximum @session_id size and will be updated. * - * Returns the current session ID. This can be used if you want to - * check if the next session you tried to resume was actually - * resumed. That is because resumed sessions share the same session ID - * with the original session. + * Returns the TLS session identifier. The session ID is selected by the + * server, and in older versions of TLS was a unique identifier shared + * between client and server which was persistent across resumption. + * In the latest version of TLS (1.3) or TLS with session tickets, the + * notion of session identifiers is undefined and cannot be relied for uniquely + * identifying sessions across client and server. + * + * In client side this function returns the identifier returned by the + * server, and cannot be assumed to have any relation to session resumption. + * In server side this function is guaranteed to return a persistent + * identifier of the session since GnuTLS 3.6.4, which may not necessarily + * map into the TLS session ID value. Prior to that version the value + * could only be considered a persistent identifier, under TLS1.2 or earlier + * and when no session tickets were in use. * - * The session ID is selected by the server, that identify the - * current session. In all supported TLS protocols, the session id - * is less than %GNUTLS_MAX_SESSION_ID_SIZE. + * The session identifier value returned is always less than + * %GNUTLS_MAX_SESSION_ID_SIZE. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise * an error code is returned. @@ -170,8 +235,23 @@ gnutls_session_get_id(gnutls_session_t session, * @session: is a #gnutls_session_t type. * @session_id: will point to the session ID. * - * Returns the current session ID. The returned data should be - * treated as constant. + * Returns the TLS session identifier. The session ID is selected by the + * server, and in older versions of TLS was a unique identifier shared + * between client and server which was persistent across resumption. + * In the latest version of TLS (1.3) or TLS 1.2 with session tickets, the + * notion of session identifiers is undefined and cannot be relied for uniquely + * identifying sessions across client and server. + * + * In client side this function returns the identifier returned by the + * server, and cannot be assumed to have any relation to session resumption. + * In server side this function is guaranteed to return a persistent + * identifier of the session since GnuTLS 3.6.4, which may not necessarily + * map into the TLS session ID value. Prior to that version the value + * could only be considered a persistent identifier, under TLS1.2 or earlier + * and when no session tickets were in use. + * + * The session identifier value returned is always less than + * %GNUTLS_MAX_SESSION_ID_SIZE and should be treated as constant. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise * an error code is returned. @@ -220,6 +300,14 @@ gnutls_session_set_data(gnutls_session_t session, gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } + + /* under TLS1.3 we always return some data on resumption when there + * is no ticket in order to keep compatibility with existing apps */ + if (session_data_size == EMPTY_DATA_SIZE && + memcmp(session_data, EMPTY_DATA, EMPTY_DATA_SIZE) == 0) { + return 0; + } + ret = _gnutls_session_unpack(session, &psession); if (ret < 0) { gnutls_assert(); @@ -230,7 +318,11 @@ gnutls_session_set_data(gnutls_session_t session, if (session->internals.resumption_data.data != NULL) gnutls_free(session->internals.resumption_data.data); - _gnutls_set_datum(&session->internals.resumption_data, session_data, session_data_size); + ret = _gnutls_set_datum(&session->internals.resumption_data, session_data, session_data_size); + if (ret < 0) { + gnutls_assert(); + return ret; + } return 0; } @@ -251,7 +343,7 @@ void gnutls_session_force_valid(gnutls_session_t session) session->internals.invalid_connection = 0; } -#define DESC_SIZE 64 +#define DESC_SIZE 96 /** * gnutls_session_get_desc: @@ -270,57 +362,114 @@ void gnutls_session_force_valid(gnutls_session_t session) char *gnutls_session_get_desc(gnutls_session_t session) { gnutls_kx_algorithm_t kx; - const char *kx_str; - unsigned type; - char kx_name[32]; + const char *kx_str, *sign_str; + gnutls_certificate_type_t ctype_client, ctype_server; + char kx_name[64] = ""; char proto_name[32]; - const char *curve_name = NULL; - unsigned dh_bits = 0; + char _group_name[24]; + const char *group_name = NULL; + int dh_bits = 0; unsigned mac_id; + unsigned sign_algo; char *desc; + const struct gnutls_group_entry_st *group = get_group(session); + const version_entry_st *ver = get_version(session); if (session->internals.initial_negotiation_completed == 0) return NULL; - kx = session->security_parameters.kx_algorithm; - - if (kx == GNUTLS_KX_ANON_ECDH || kx == GNUTLS_KX_ECDHE_PSK || - kx == GNUTLS_KX_ECDHE_RSA || kx == GNUTLS_KX_ECDHE_ECDSA) { - curve_name = - gnutls_ecc_curve_get_name(gnutls_ecc_curve_get - (session)); + kx = session->security_parameters.cs->kx_algorithm; + if (group) + group_name = group->name; #if defined(ENABLE_DHE) || defined(ENABLE_ANON) - } else if (kx == GNUTLS_KX_ANON_DH || kx == GNUTLS_KX_DHE_PSK - || kx == GNUTLS_KX_DHE_RSA || kx == GNUTLS_KX_DHE_DSS) { + if (group_name == NULL && _gnutls_kx_is_dhe(kx)) { dh_bits = gnutls_dh_get_prime_bits(session); -#endif + if (dh_bits > 0) + snprintf(_group_name, sizeof(_group_name), "CUSTOM%u", dh_bits); + else + snprintf(_group_name, sizeof(_group_name), "CUSTOM"); + group_name = _group_name; } +#endif - kx_str = gnutls_kx_get_name(kx); - if (kx_str) { - if (curve_name != NULL) - snprintf(kx_name, sizeof(kx_name), "%s-%s", - kx_str, curve_name); - else if (dh_bits != 0) - snprintf(kx_name, sizeof(kx_name), "%s-%u", - kx_str, dh_bits); - else - snprintf(kx_name, sizeof(kx_name), "%s", - kx_str); + /* Key exchange - Signature algorithm */ + /* DHE-3072 - RSA-PSS-2048 */ + /* ECDHE-SECP256R1 - ECDSA-SECP256R1 */ + + sign_algo = gnutls_sign_algorithm_get(session); + sign_str = gnutls_sign_get_name(sign_algo); + + if (kx == 0 && ver->tls13_sem) { /* TLS 1.3 */ + if (session->internals.hsk_flags & HSK_PSK_SELECTED) { + if (group) { + if (group->pk == GNUTLS_PK_DH) + snprintf(kx_name, sizeof(kx_name), "(DHE-PSK-%s)", + group_name); + else + snprintf(kx_name, sizeof(kx_name), "(ECDHE-PSK-%s)", + group_name); + } else { + snprintf(kx_name, sizeof(kx_name), "(PSK)"); + } + } else if (group && sign_str) { + if (group->curve) + snprintf(kx_name, sizeof(kx_name), "(ECDHE-%s)-(%s)", + group_name, sign_str); + else + snprintf(kx_name, sizeof(kx_name), "(DHE-%s)-(%s)", + group_name, sign_str); + } } else { - strcpy(kx_name, "NULL"); + kx_str = gnutls_kx_get_name(kx); + if (kx_str == NULL) { + gnutls_assert(); + return NULL; + } + + if ((kx == GNUTLS_KX_ECDHE_ECDSA || kx == GNUTLS_KX_ECDHE_RSA || + kx == GNUTLS_KX_ECDHE_PSK) && group_name) { + if (sign_str) + snprintf(kx_name, sizeof(kx_name), "(ECDHE-%s)-(%s)", + group_name, sign_str); + else + snprintf(kx_name, sizeof(kx_name), "(ECDHE-%s)", + group_name); + } else if ((kx == GNUTLS_KX_DHE_DSS || kx == GNUTLS_KX_DHE_RSA || + kx == GNUTLS_KX_DHE_PSK) && group_name) { + if (sign_str) + snprintf(kx_name, sizeof(kx_name), "(DHE-%s)-(%s)", group_name, sign_str); + else + snprintf(kx_name, sizeof(kx_name), "(DHE-%s)", group_name); + } else if (kx == GNUTLS_KX_RSA) { + /* Possible enhancement: include the certificate bits */ + snprintf(kx_name, sizeof(kx_name), "(RSA)"); + } else { + snprintf(kx_name, sizeof(kx_name), "(%s)", + kx_str); + } } - type = gnutls_certificate_type_get(session); - if (type == GNUTLS_CRT_X509) + if (are_alternative_cert_types_allowed(session)) { + // Get certificate types + ctype_client = get_certificate_type(session, GNUTLS_CTYPE_CLIENT); + ctype_server = get_certificate_type(session, GNUTLS_CTYPE_SERVER); + + if (ctype_client == ctype_server) { + // print proto version, client/server cert type + snprintf(proto_name, sizeof(proto_name), "%s-%s", + gnutls_protocol_get_name(get_num_version(session)), + gnutls_certificate_type_get_name(ctype_client)); + } else { + // print proto version, client cert type, server cert type + snprintf(proto_name, sizeof(proto_name), "%s-%s-%s", + gnutls_protocol_get_name(get_num_version(session)), + gnutls_certificate_type_get_name(ctype_client), + gnutls_certificate_type_get_name(ctype_server)); + } + } else { // Assumed default certificate type (X.509) snprintf(proto_name, sizeof(proto_name), "%s", - gnutls_protocol_get_name(get_num_version - (session))); - else - snprintf(proto_name, sizeof(proto_name), "%s-%s", - gnutls_protocol_get_name(get_num_version - (session)), - gnutls_certificate_type_get_name(type)); + gnutls_protocol_get_name(get_num_version(session))); + } desc = gnutls_malloc(DESC_SIZE); if (desc == NULL) @@ -329,13 +478,13 @@ char *gnutls_session_get_desc(gnutls_session_t session) mac_id = gnutls_mac_get(session); if (mac_id == GNUTLS_MAC_AEAD) { /* no need to print */ snprintf(desc, DESC_SIZE, - "(%s)-(%s)-(%s)", + "(%s)-%s-(%s)", proto_name, kx_name, gnutls_cipher_get_name(gnutls_cipher_get(session))); } else { snprintf(desc, DESC_SIZE, - "(%s)-(%s)-(%s)-(%s)", + "(%s)-%s-(%s)-(%s)", proto_name, kx_name, gnutls_cipher_get_name(gnutls_cipher_get(session)), diff --git a/lib/session_pack.c b/lib/session_pack.c index 39f0737042..a6d11c4cfc 100644 --- a/lib/session_pack.c +++ b/lib/session_pack.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2000-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -38,11 +39,12 @@ #include #include #include -#include +#include #include #include #include #include +#include "tls13/session_ticket.h" static int pack_certificate_auth_info(gnutls_session_t, gnutls_buffer_st * packed_session); @@ -68,6 +70,10 @@ static int unpack_security_parameters(gnutls_session_t session, gnutls_buffer_st * packed_session); static int pack_security_parameters(gnutls_session_t session, gnutls_buffer_st * packed_session); +static int tls13_unpack_security_parameters(gnutls_session_t session, + gnutls_buffer_st * packed_session); +static int tls13_pack_security_parameters(gnutls_session_t session, + gnutls_buffer_st * packed_session); /* Since auth_info structures contain malloced data, this function @@ -98,6 +104,7 @@ _gnutls_session_pack(gnutls_session_t session, BUFFER_APPEND_NUM(&sb, PACKED_SESSION_MAGIC); BUFFER_APPEND_NUM(&sb, session->security_parameters.timestamp); + BUFFER_APPEND_NUM(&sb, session->internals.expire_time); BUFFER_APPEND(&sb, &id, 1); switch (id) { @@ -136,7 +143,8 @@ _gnutls_session_pack(gnutls_session_t session, } break; default: - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + ret = gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + goto fail; } @@ -149,10 +157,22 @@ _gnutls_session_pack(gnutls_session_t session, goto fail; } - ret = _gnutls_ext_pack(session, &sb); - if (ret < 0) { - gnutls_assert(); - goto fail; + + if (session->security_parameters.pversion->tls13_sem) { + ret = tls13_pack_security_parameters(session, &sb); + if (ret < 0) { + gnutls_assert(); + goto fail; + } + } + + /* Extensions are re-negotiated in a resumed session under TLS 1.3 */ + if (!session->security_parameters.pversion->tls13_sem) { + ret = _gnutls_hello_ext_pack(session, &sb); + if (ret < 0) { + gnutls_assert(); + goto fail; + } } return _gnutls_buffer_to_datum(&sb, packed_session, 0); @@ -172,6 +192,7 @@ _gnutls_session_unpack(gnutls_session_t session, int ret; gnutls_buffer_st sb; uint32_t magic; + uint32_t expire_time; uint8_t id; _gnutls_buffer_init(&sb); @@ -202,6 +223,8 @@ _gnutls_session_unpack(gnutls_session_t session, BUFFER_POP_NUM(&sb, session->internals.resumed_security_parameters. timestamp); + BUFFER_POP_NUM(&sb, expire_time); + (void) expire_time; BUFFER_POP(&sb, &id, 1); switch (id) { @@ -255,10 +278,21 @@ _gnutls_session_unpack(gnutls_session_t session, goto error; } - ret = _gnutls_ext_unpack(session, &sb); - if (ret < 0) { - gnutls_assert(); - goto error; + if (session->internals.resumed_security_parameters.pversion->tls13_sem) { + /* 'prf' will not be NULL at this point, else unpack_security_parameters() would have failed */ + ret = tls13_unpack_security_parameters(session, &sb); + if (ret < 0) { + gnutls_assert(); + goto error; + } + } + + if (!session->internals.resumed_security_parameters.pversion->tls13_sem) { + ret = _gnutls_hello_ext_unpack(session, &sb); + if (ret < 0) { + gnutls_assert(); + goto error; + } } ret = 0; @@ -269,7 +303,115 @@ _gnutls_session_unpack(gnutls_session_t session, return ret; } +/* + * If we're using TLS 1.3 semantics, we might have TLS 1.3-specific data. + * Format: + * 4 bytes the total length + * 4 bytes the ticket lifetime + * 4 bytes the ticket age add value + * 1 byte the ticket nonce length + * x bytes the ticket nonce + * 4 bytes the ticket length + * x bytes the ticket + * 1 bytes the resumption master secret length + * x bytes the resumption master secret + * 12 bytes the ticket arrival time + * 4 bytes the max early data size + * + * We only store that info if we received a TLS 1.3 NewSessionTicket at some point. + * If we didn't receive any NST then we cannot resume a TLS 1.3 session and hence + * its nonsense to store all that info. + */ +static int +tls13_pack_security_parameters(gnutls_session_t session, gnutls_buffer_st *ps) +{ + int ret = 0; + uint32_t length = 0; + size_t length_pos; + tls13_ticket_st *ticket = &session->internals.tls13_ticket; + + length_pos = ps->length; + BUFFER_APPEND_NUM(ps, 0); + + if (ticket->ticket.data != NULL) { + BUFFER_APPEND_NUM(ps, ticket->lifetime); + length += 4; + BUFFER_APPEND_NUM(ps, ticket->age_add); + length += 4; + BUFFER_APPEND_PFX1(ps, + ticket->nonce, + ticket->nonce_size); + length += (1 + ticket->nonce_size); + BUFFER_APPEND_PFX4(ps, + ticket->ticket.data, + ticket->ticket.size); + length += (4 + ticket->ticket.size); + BUFFER_APPEND_PFX1(ps, + ticket->resumption_master_secret, + ticket->prf->output_size); + length += (1 + ticket->prf->output_size); + BUFFER_APPEND_TS(ps, ticket->arrival_time); + length += 12; + BUFFER_APPEND_NUM(ps, + session->security_parameters. + max_early_data_size); + length += 4; + + /* Overwrite the length field */ + _gnutls_write_uint32(length, ps->data + length_pos); + } + + return ret; +} + +static int +tls13_unpack_security_parameters(gnutls_session_t session, gnutls_buffer_st *ps) +{ + uint32_t ttl_len; + tls13_ticket_st *ticket = &session->internals.tls13_ticket; + gnutls_datum_t t; + int ret = 0; + + BUFFER_POP_NUM(ps, ttl_len); + + if (ttl_len > 0) { + BUFFER_POP_NUM(ps, ticket->lifetime); + BUFFER_POP_NUM(ps, ticket->age_add); + + ret = _gnutls_buffer_pop_datum_prefix8(ps, &t); + if (ret < 0 || t.size > sizeof(ticket->nonce)) { + ret = GNUTLS_E_PARSING_ERROR; + gnutls_assert(); + goto error; + } + ticket->nonce_size = t.size; + memcpy(ticket->nonce, t.data, t.size); + + BUFFER_POP_DATUM(ps, &ticket->ticket); + ret = _gnutls_buffer_pop_datum_prefix8(ps, &t); + if (ret < 0 || t.size > sizeof(ticket->resumption_master_secret)) { + ret = GNUTLS_E_PARSING_ERROR; + gnutls_assert(); + goto error; + } + memcpy(ticket->resumption_master_secret, t.data, t.size); + + if (unlikely(session->internals.resumed_security_parameters.prf == NULL || + session->internals.resumed_security_parameters.prf->output_size != t.size)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + ticket->prf = session->internals.resumed_security_parameters.prf; + + BUFFER_POP_TS(ps, ticket->arrival_time); + BUFFER_POP_NUM(ps, + session->security_parameters. + max_early_data_size); + } + +error: + return ret; +} /* Format: * 1 byte the credentials type @@ -317,12 +459,23 @@ pack_certificate_auth_info(gnutls_session_t session, gnutls_buffer_st * ps) BUFFER_APPEND_NUM(ps, info->ncerts); - for (i = 0; i < info->ncerts; i++) + for (i = 0; i < info->ncerts; i++) { BUFFER_APPEND_PFX4(ps, info->raw_certificate_list[i]. data, info->raw_certificate_list[i]. size); + } + + BUFFER_APPEND_NUM(ps, info->nocsp); + + for (i = 0; i < info->nocsp; i++) { + BUFFER_APPEND_PFX4(ps, + info->raw_ocsp_list[i]. + data, + info->raw_ocsp_list[i]. + size); + } } /* write the real size */ @@ -343,6 +496,8 @@ unpack_certificate_auth_info(gnutls_session_t session, unsigned int i = 0, j = 0; size_t pack_size; cert_auth_info_t info = NULL; + unsigned cur_ncerts = 0; + unsigned cur_nocsp = 0; BUFFER_POP_NUM(ps, pack_size); @@ -352,7 +507,7 @@ unpack_certificate_auth_info(gnutls_session_t session, /* client and server have the same auth_info here */ ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_CERTIFICATE, + _gnutls_auth_info_init(session, GNUTLS_CRD_CERTIFICATE, sizeof(cert_auth_info_st), 1); if (ret < 0) { gnutls_assert(); @@ -383,6 +538,25 @@ unpack_certificate_auth_info(gnutls_session_t session, for (i = 0; i < info->ncerts; i++) { BUFFER_POP_DATUM(ps, &info->raw_certificate_list[i]); + cur_ncerts++; + } + + /* read OCSP responses */ + BUFFER_POP_NUM(ps, info->nocsp); + + if (info->nocsp > 0) { + info->raw_ocsp_list = + gnutls_calloc(info->nocsp, sizeof(gnutls_datum_t)); + if (info->raw_ocsp_list == NULL) { + gnutls_assert(); + ret = GNUTLS_E_MEMORY_ERROR; + goto error; + } + } + + for (i = 0; i < info->nocsp; i++) { + BUFFER_POP_DATUM(ps, &info->raw_ocsp_list[i]); + cur_nocsp++; } return 0; @@ -393,10 +567,14 @@ unpack_certificate_auth_info(gnutls_session_t session, _gnutls_free_datum(&info->dh.generator); _gnutls_free_datum(&info->dh.public_key); - for (j = 0; j < i; j++) + for (j = 0; j < cur_ncerts; j++) _gnutls_free_datum(&info->raw_certificate_list[j]); + for (j = 0; j < cur_nocsp; j++) + _gnutls_free_datum(&info->raw_ocsp_list[j]); + gnutls_free(info->raw_certificate_list); + gnutls_free(info->raw_ocsp_list); } return ret; @@ -455,7 +633,7 @@ unpack_srp_auth_info(gnutls_session_t session, gnutls_buffer_st * ps) } ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_SRP, + _gnutls_auth_info_init(session, GNUTLS_CRD_SRP, sizeof(srp_server_auth_info_st), 1); if (ret < 0) { gnutls_assert(); @@ -537,7 +715,7 @@ unpack_anon_auth_info(gnutls_session_t session, gnutls_buffer_st * ps) /* client and server have the same auth_info here */ ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_ANON, + _gnutls_auth_info_init(session, GNUTLS_CRD_ANON, sizeof(anon_auth_info_st), 1); if (ret < 0) { gnutls_assert(); @@ -598,7 +776,7 @@ pack_psk_auth_info(gnutls_session_t session, gnutls_buffer_st * ps) if (info == NULL) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - username_len = strlen(info->username) + 1; /* include the terminating null */ + username_len = info->username_len; hint_len = strlen(info->hint) + 1; /* include the terminating null */ size_offset = ps->length; @@ -630,7 +808,7 @@ unpack_psk_auth_info(gnutls_session_t session, gnutls_buffer_st * ps) unsigned pack_size; ret = - _gnutls_auth_info_set(session, GNUTLS_CRD_PSK, + _gnutls_auth_info_init(session, GNUTLS_CRD_PSK, sizeof(psk_auth_info_st), 1); if (ret < 0) { gnutls_assert(); @@ -646,7 +824,7 @@ unpack_psk_auth_info(gnutls_session_t session, gnutls_buffer_st * ps) return GNUTLS_E_INVALID_REQUEST; BUFFER_POP_NUM(ps, username_size); - if (username_size > sizeof(info->username)) { + if (username_size > (sizeof(info->username) - 1)) { gnutls_assert(); return GNUTLS_E_INTERNAL_ERROR; } @@ -655,6 +833,10 @@ unpack_psk_auth_info(gnutls_session_t session, gnutls_buffer_st * ps) if (username_size == 0) info->username[0] = 0; + /* append a null terminator and set length */ + info->username[username_size] = 0; + info->username_len = username_size; + BUFFER_POP_NUM(ps, hint_size); if (hint_size > sizeof(info->hint)) { gnutls_assert(); @@ -684,38 +866,6 @@ unpack_psk_auth_info(gnutls_session_t session, gnutls_buffer_st * ps) /* Packs the security parameters. */ - -/* Format: - * 4 bytes the total security data size - * 1 byte the entity type (client/server) - * 1 byte the key exchange algorithm used - * 1 byte the read cipher algorithm - * 1 byte the read mac algorithm - * 1 byte the read compression algorithm - * - * 1 byte the write cipher algorithm - * 1 byte the write mac algorithm - * 1 byte the write compression algorithm - * - * 1 byte the certificate type - * 1 byte the protocol version - * - * 2 bytes the cipher suite - * - * 48 bytes the master secret - * - * 32 bytes the client random - * 32 bytes the server random - * - * 1 byte the session ID size - * x bytes the session ID (32 bytes max) - * - * 4 bytes the new record padding flag - * 4 bytes the ECC curve - * ------------------- - * MAX: 169 bytes - * - */ static int pack_security_parameters(gnutls_session_t session, gnutls_buffer_st * ps) { @@ -723,15 +873,15 @@ pack_security_parameters(gnutls_session_t session, gnutls_buffer_st * ps) int ret; int size_offset; size_t cur_size; - record_parameters_st *params; if (session->security_parameters.epoch_read - != session->security_parameters.epoch_write) { + != session->security_parameters.epoch_write && + !(session->internals.hsk_flags & HSK_EARLY_START_USED)) { gnutls_assert(); return GNUTLS_E_UNAVAILABLE_DURING_HANDSHAKE; } - ret = _gnutls_epoch_get(session, EPOCH_READ_CURRENT, ¶ms); + ret = _gnutls_epoch_get(session, EPOCH_READ_CURRENT, NULL); if (ret < 0) { gnutls_assert(); return ret; @@ -743,43 +893,70 @@ pack_security_parameters(gnutls_session_t session, gnutls_buffer_st * ps) BUFFER_APPEND_NUM(ps, 0); cur_size = ps->length; - BUFFER_APPEND_NUM(ps, session->security_parameters.entity); - BUFFER_APPEND_NUM(ps, session->security_parameters.kx_algorithm); - BUFFER_APPEND(ps, session->security_parameters.cipher_suite, 2); - BUFFER_APPEND_NUM(ps, - session->security_parameters.compression_method); - BUFFER_APPEND_NUM(ps, session->security_parameters.cert_type); - BUFFER_APPEND_NUM(ps, session->security_parameters.pversion->id); + BUFFER_APPEND_NUM(ps, session->security_parameters.prf->id); - BUFFER_APPEND(ps, session->security_parameters.master_secret, - GNUTLS_MASTER_SIZE); - BUFFER_APPEND(ps, session->security_parameters.client_random, - GNUTLS_RANDOM_SIZE); - BUFFER_APPEND(ps, session->security_parameters.server_random, - GNUTLS_RANDOM_SIZE); + BUFFER_APPEND_NUM(ps, + session->security_parameters.client_auth_type); + BUFFER_APPEND_NUM(ps, + session->security_parameters.server_auth_type); BUFFER_APPEND(ps, &session->security_parameters.session_id_size, 1); BUFFER_APPEND(ps, session->security_parameters.session_id, session->security_parameters.session_id_size); - BUFFER_APPEND_NUM(ps, - session->security_parameters. - max_record_send_size); - BUFFER_APPEND_NUM(ps, - session->security_parameters. - max_record_recv_size); - BUFFER_APPEND_NUM(ps, session->security_parameters.ecc_curve); + BUFFER_APPEND_NUM(ps, session->security_parameters.pversion->id); + + BUFFER_APPEND_NUM(ps, session->security_parameters.client_ctype); + BUFFER_APPEND_NUM(ps, session->security_parameters.server_ctype); + + /* if we are under TLS 1.3 do not pack keys or params negotiated using an extension + * they are not necessary */ + if (!session->security_parameters.pversion->tls13_sem) { + BUFFER_APPEND(ps, session->security_parameters.cs->id, 2); + + BUFFER_APPEND_PFX1(ps, session->security_parameters.master_secret, + GNUTLS_MASTER_SIZE); + BUFFER_APPEND_PFX1(ps, session->security_parameters.client_random, + GNUTLS_RANDOM_SIZE); + BUFFER_APPEND_PFX1(ps, session->security_parameters.server_random, + GNUTLS_RANDOM_SIZE); + + /* reset max_record_recv_size if it was negotiated + * using the record_size_limit extension */ + if (session->internals.hsk_flags & HSK_RECORD_SIZE_LIMIT_NEGOTIATED) { + BUFFER_APPEND_NUM(ps, + session->security_parameters. + max_user_record_send_size); + BUFFER_APPEND_NUM(ps, + session->security_parameters. + max_user_record_recv_size); + } else { + BUFFER_APPEND_NUM(ps, + session->security_parameters. + max_record_recv_size); + BUFFER_APPEND_NUM(ps, + session->security_parameters. + max_record_send_size); + } + + if (session->security_parameters.grp) { + BUFFER_APPEND_NUM(ps, session->security_parameters.grp->id); + } else { + BUFFER_APPEND_NUM(ps, 0); + } + + BUFFER_APPEND_NUM(ps, + session->security_parameters.server_sign_algo); + BUFFER_APPEND_NUM(ps, + session->security_parameters.client_sign_algo); + BUFFER_APPEND_NUM(ps, + session->security_parameters.ext_master_secret); + BUFFER_APPEND_NUM(ps, + session->security_parameters.etm); + } - BUFFER_APPEND_NUM(ps, - session->security_parameters.server_sign_algo); - BUFFER_APPEND_NUM(ps, - session->security_parameters.client_sign_algo); - BUFFER_APPEND_NUM(ps, - session->security_parameters.ext_master_secret); - BUFFER_APPEND_NUM(ps, - session->security_parameters.etm); _gnutls_write_uint32(ps->length - cur_size, ps->data + size_offset); @@ -793,7 +970,9 @@ unpack_security_parameters(gnutls_session_t session, gnutls_buffer_st * ps) size_t pack_size; int ret; unsigned version; + gnutls_datum_t t; time_t timestamp; + uint8_t cs[2]; BUFFER_POP_NUM(ps, pack_size); @@ -807,40 +986,22 @@ unpack_security_parameters(gnutls_session_t session, gnutls_buffer_st * ps) session->internals.resumed_security_parameters.timestamp = timestamp; - timestamp = gnutls_time(0); - BUFFER_POP_NUM(ps, session->internals.resumed_security_parameters. entity); + + BUFFER_POP_NUM(ps, version); + session->internals.resumed_security_parameters.prf = mac_to_entry(version); + if (session->internals.resumed_security_parameters.prf == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + BUFFER_POP_NUM(ps, session->internals.resumed_security_parameters. - kx_algorithm); - BUFFER_POP(ps, - session->internals.resumed_security_parameters. - cipher_suite, 2); - BUFFER_POP_NUM(ps, - session->internals.resumed_security_parameters. - compression_method); + client_auth_type); BUFFER_POP_NUM(ps, session->internals.resumed_security_parameters. - cert_type); - BUFFER_POP_NUM(ps, version); - session->internals.resumed_security_parameters.pversion = - version_to_entry(version); - if (session->internals.resumed_security_parameters.pversion == - NULL) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - - BUFFER_POP(ps, - session->internals.resumed_security_parameters. - master_secret, GNUTLS_MASTER_SIZE); + server_auth_type); - BUFFER_POP(ps, - session->internals.resumed_security_parameters. - client_random, GNUTLS_RANDOM_SIZE); - BUFFER_POP(ps, - session->internals.resumed_security_parameters. - server_random, GNUTLS_RANDOM_SIZE); BUFFER_POP(ps, &session->internals.resumed_security_parameters. session_id_size, 1); @@ -851,43 +1012,87 @@ unpack_security_parameters(gnutls_session_t session, gnutls_buffer_st * ps) session->internals.resumed_security_parameters. session_id_size); - BUFFER_POP_NUM(ps, - session->internals.resumed_security_parameters. - max_record_send_size); - BUFFER_POP_NUM(ps, - session->internals.resumed_security_parameters. - max_record_recv_size); + BUFFER_POP_NUM(ps, version); + session->internals.resumed_security_parameters.pversion = + version_to_entry(version); + if (session->internals.resumed_security_parameters.pversion == + NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); BUFFER_POP_NUM(ps, session->internals.resumed_security_parameters. - ecc_curve); + client_ctype); BUFFER_POP_NUM(ps, session->internals.resumed_security_parameters. - server_sign_algo); - BUFFER_POP_NUM(ps, - session->internals.resumed_security_parameters. - client_sign_algo); - BUFFER_POP_NUM(ps, - session->internals.resumed_security_parameters. - ext_master_secret); - BUFFER_POP_NUM(ps, - session->internals.resumed_security_parameters. - etm); + server_ctype); - if (session->internals.resumed_security_parameters. - max_record_recv_size == 0 - || session->internals.resumed_security_parameters. - max_record_send_size == 0) { - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - } + if (!session->internals.resumed_security_parameters.pversion->tls13_sem) { + BUFFER_POP(ps, cs, 2); + session->internals.resumed_security_parameters.cs = ciphersuite_to_entry(cs); + if (session->internals.resumed_security_parameters.cs == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - if (timestamp - - session->internals.resumed_security_parameters.timestamp > - session->internals.expire_time - || session->internals.resumed_security_parameters.timestamp > - timestamp) { - gnutls_assert(); - return GNUTLS_E_EXPIRED; + /* master secret */ + ret = _gnutls_buffer_pop_datum_prefix8(ps, &t); + if (ret < 0) { + ret = GNUTLS_E_PARSING_ERROR; + gnutls_assert(); + goto error; + } + if (t.size == GNUTLS_MASTER_SIZE) + memcpy(session->internals.resumed_security_parameters.master_secret, t.data, t.size); + + /* client random */ + ret = _gnutls_buffer_pop_datum_prefix8(ps, &t); + if (ret < 0) { + ret = GNUTLS_E_PARSING_ERROR; + gnutls_assert(); + goto error; + } + if (t.size == GNUTLS_RANDOM_SIZE) + memcpy(session->internals.resumed_security_parameters.client_random, t.data, t.size); + + /* server random */ + ret = _gnutls_buffer_pop_datum_prefix8(ps, &t); + if (ret < 0) { + ret = GNUTLS_E_PARSING_ERROR; + gnutls_assert(); + goto error; + } + if (t.size == GNUTLS_RANDOM_SIZE) + memcpy(session->internals.resumed_security_parameters.server_random, t.data, t.size); + + + BUFFER_POP_NUM(ps, + session->internals.resumed_security_parameters. + max_record_send_size); + BUFFER_POP_NUM(ps, + session->internals.resumed_security_parameters. + max_record_recv_size); + + BUFFER_POP_NUM(ps, ret); + session->internals.resumed_security_parameters.grp = _gnutls_id_to_group(ret); + /* it can be null */ + + BUFFER_POP_NUM(ps, + session->internals.resumed_security_parameters. + server_sign_algo); + BUFFER_POP_NUM(ps, + session->internals.resumed_security_parameters. + client_sign_algo); + BUFFER_POP_NUM(ps, + session->internals.resumed_security_parameters. + ext_master_secret); + BUFFER_POP_NUM(ps, + session->internals.resumed_security_parameters. + etm); + + if (session->internals.resumed_security_parameters. + max_record_recv_size == 0 + || session->internals.resumed_security_parameters. + max_record_send_size == 0) { + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + } } ret = 0; @@ -904,7 +1109,7 @@ unpack_security_parameters(gnutls_session_t session, gnutls_buffer_st * ps) * @kx: the key exchange method * @cipher: the cipher * @mac: the MAC algorithm - * @comp: the compression method + * @comp: the compression method (ignored) * @master: the master key to use * @session_id: the session identifier * @@ -927,32 +1132,39 @@ gnutls_session_set_premaster(gnutls_session_t session, unsigned int entity, const gnutls_datum_t * session_id) { int ret; + uint8_t cs[2]; memset(&session->internals.resumed_security_parameters, 0, sizeof(session->internals.resumed_security_parameters)); session->internals.resumed_security_parameters.entity = entity; - session->internals.resumed_security_parameters.kx_algorithm = kx; ret = - _gnutls_cipher_suite_get_id(kx, cipher, mac, - session->internals. - resumed_security_parameters. - cipher_suite); + _gnutls_cipher_suite_get_id(kx, cipher, mac, cs); if (ret < 0) return gnutls_assert_val(ret); - session->internals.resumed_security_parameters.compression_method = - comp; - session->internals.resumed_security_parameters.cert_type = - DEFAULT_CERT_TYPE; + session->internals.resumed_security_parameters.cs = ciphersuite_to_entry(cs); + if (session->internals.resumed_security_parameters.cs == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + session->internals.resumed_security_parameters.client_ctype = + DEFAULT_CERT_TYPE; + session->internals.resumed_security_parameters.server_ctype = + DEFAULT_CERT_TYPE; session->internals.resumed_security_parameters.pversion = version_to_entry(version); - if (session->internals.resumed_security_parameters.pversion == NULL) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (session->internals.resumed_security_parameters.pversion->selectable_prf) + session->internals.resumed_security_parameters.prf = mac_to_entry(session->internals.resumed_security_parameters.cs->prf); + else + session->internals.resumed_security_parameters.prf = mac_to_entry(GNUTLS_MAC_MD5_SHA1); + if (session->internals.resumed_security_parameters.prf == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (master->size != GNUTLS_MASTER_SIZE) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); @@ -975,8 +1187,9 @@ gnutls_session_set_premaster(gnutls_session_t session, unsigned int entity, session->internals.resumed_security_parameters.timestamp = gnutls_time(0); - session->internals.resumed_security_parameters.ecc_curve = - GNUTLS_ECC_CURVE_INVALID; + session->internals.resumed_security_parameters.grp = 0; + + session->internals.resumed_security_parameters.post_handshake_auth = 0; session->internals.premaster_set = 1; diff --git a/lib/session_pack.h b/lib/session_pack.h index efb6cda01b..20b3fbcd5e 100644 --- a/lib/session_pack.h +++ b/lib/session_pack.h @@ -16,11 +16,16 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_SESSION_PACK_H +#define GNUTLS_LIB_SESSION_PACK_H + int _gnutls_session_pack(gnutls_session_t session, gnutls_datum_t * packed_session); int _gnutls_session_unpack(gnutls_session_t session, const gnutls_datum_t * packed_session); + +#endif /* GNUTLS_LIB_SESSION_PACK_H */ diff --git a/lib/srp.c b/lib/srp.c index 868c7066a0..78bcbfd811 100644 --- a/lib/srp.c +++ b/lib/srp.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -459,10 +459,11 @@ gnutls_srp_allocate_client_credentials(gnutls_srp_client_credentials_t * * * This function sets the username and password, in a * #gnutls_srp_client_credentials_t type. Those will be used in - * SRP authentication. @username and @password should be ASCII - * strings or UTF-8 strings prepared using the "SASLprep" profile of - * "stringprep". - * + * SRP authentication. @username should be an ASCII string or UTF-8 + * string. In case of a UTF-8 string it is recommended to be following + * the PRECIS framework for usernames (rfc8265). The password can + * be in ASCII format, or normalized using gnutls_utf8_password_normalize(). + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, or an * error code. **/ @@ -500,7 +501,6 @@ void gnutls_srp_free_server_credentials(gnutls_srp_server_credentials_t sc) { gnutls_free(sc->password_file); gnutls_free(sc->password_conf_file); - _gnutls_free_datum(&sc->fake_salt_seed); gnutls_free(sc); } @@ -536,17 +536,9 @@ gnutls_srp_allocate_server_credentials(gnutls_srp_server_credentials_t * if (*sc == NULL) return GNUTLS_E_MEMORY_ERROR; - (*sc)->fake_salt_seed.size = DEFAULT_FAKE_SALT_SEED_SIZE; - (*sc)->fake_salt_seed.data = gnutls_malloc( - DEFAULT_FAKE_SALT_SEED_SIZE); - if ((*sc)->fake_salt_seed.data == NULL) { - ret = GNUTLS_E_MEMORY_ERROR; - gnutls_assert(); - goto cleanup; - } - - ret = gnutls_rnd(GNUTLS_RND_RANDOM, (*sc)->fake_salt_seed.data, - DEFAULT_FAKE_SALT_SEED_SIZE); + (*sc)->fake_salt_seed_size = DEFAULT_FAKE_SALT_SEED_SIZE; + ret = gnutls_rnd(GNUTLS_RND_RANDOM, (*sc)->fake_salt_seed, + DEFAULT_FAKE_SALT_SEED_SIZE); if (ret < 0) { gnutls_assert(); @@ -557,7 +549,6 @@ gnutls_srp_allocate_server_credentials(gnutls_srp_server_credentials_t * return 0; cleanup: - _gnutls_free_datum(&(*sc)->fake_salt_seed); gnutls_free(*sc); return ret; } @@ -608,7 +599,6 @@ gnutls_srp_set_server_credentials_file(gnutls_srp_server_credentials_t res, if (res->password_conf_file == NULL) { gnutls_assert(); gnutls_free(res->password_file); - res->password_file = NULL; return GNUTLS_E_MEMORY_ERROR; } @@ -671,9 +661,12 @@ gnutls_srp_set_server_credentials_function(gnutls_srp_server_credentials_t * int (*callback)(gnutls_session_t, char** username, char**password); * * The @username and @password must be allocated using - * gnutls_malloc(). @username and @password should be ASCII strings - * or UTF-8 strings prepared using the "SASLprep" profile of - * "stringprep". + * gnutls_malloc(). + * + * The @username should be an ASCII string or UTF-8 + * string. In case of a UTF-8 string it is recommended to be following + * the PRECIS framework for usernames (rfc8265). The password can + * be in ASCII format, or normalized using gnutls_utf8_password_normalize(). * * The callback function will be called once per handshake before the * initial hello message is sent. @@ -708,7 +701,7 @@ const char *gnutls_srp_server_get_username(gnutls_session_t session) { srp_server_auth_info_t info; - CHECK_AUTH(GNUTLS_CRD_SRP, NULL); + CHECK_AUTH_TYPE(GNUTLS_CRD_SRP, NULL); info = _gnutls_get_auth_info(session, GNUTLS_CRD_SRP); if (info == NULL) @@ -762,16 +755,22 @@ gnutls_srp_verifier(const char *username, const char *password, size = generator->size; if (_gnutls_mpi_init_scan_nz(&_g, generator->data, size)) { gnutls_assert(); + _gnutls_mpi_release(&_n); return GNUTLS_E_MPI_SCAN_FAILED; } ret = _gnutls_srp_gx(digest, 20, &res->data, _g, _n); if (ret < 0) { gnutls_assert(); + _gnutls_mpi_release(&_n); + _gnutls_mpi_release(&_g); return ret; } res->size = ret; + _gnutls_mpi_release(&_n); + _gnutls_mpi_release(&_g); + return 0; } @@ -794,7 +793,7 @@ gnutls_srp_verifier(const char *username, const char *password, **/ void gnutls_srp_set_prime_bits(gnutls_session_t session, unsigned int bits) { - session->internals.srp_prime_bits = bits; + session->internals.dh_prime_bits = bits; } /** @@ -832,8 +831,14 @@ gnutls_srp_set_server_fake_salt_seed(gnutls_srp_server_credentials_t cred, const gnutls_datum_t * seed, unsigned int salt_length) { - _gnutls_free_datum(&cred->fake_salt_seed); - _gnutls_set_datum(&cred->fake_salt_seed, seed->data, seed->size); + unsigned seed_size = seed->size; + const unsigned char *seed_data = seed->data; + + if (seed_size > sizeof(cred->fake_salt_seed)) + seed_size = sizeof(cred->fake_salt_seed); + + memcpy(cred->fake_salt_seed, seed_data, seed_size); + cred->fake_salt_seed_size = seed_size; /* Cap the salt length at the output size of the MAC algorithm * we are using to generate the fake salts. diff --git a/lib/srp.h b/lib/srp.h index 3120f4b5b9..ab5a184ac7 100644 --- a/lib/srp.h +++ b/lib/srp.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef _SRP_H -# define _SRP_H +#ifndef GNUTLS_LIB_SRP_H +#define GNUTLS_LIB_SRP_H #include @@ -44,4 +44,4 @@ int _gnutls_srp_gn(uint8_t ** ret_g, uint8_t ** ret_n, int bits); #endif -#endif +#endif /* GNUTLS_LIB_SRP_H */ diff --git a/lib/sslv2_compat.c b/lib/sslv2_compat.c index 8a875f503b..4dd62d01c1 100644 --- a/lib/sslv2_compat.c +++ b/lib/sslv2_compat.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -28,7 +28,6 @@ #include "dh.h" #include "debug.h" #include "algorithms.h" -#include "compress.h" #include "cipher.h" #include "buffers.h" #include "kx.h" @@ -36,7 +35,7 @@ #include "num.h" #include "hash_int.h" #include "db.h" -#include "extensions.h" +#include "hello_ext.h" #include "auth.h" #include "sslv2_compat.h" #include "constate.h" @@ -75,7 +74,7 @@ _gnutls_handshake_select_v2_suite(gnutls_session_t session, } } - ret = _gnutls_server_select_suite(session, _data, _datalen); + ret = _gnutls_server_select_suite(session, _data, _datalen, 0); gnutls_free(_data); return ret; @@ -88,15 +87,15 @@ _gnutls_handshake_select_v2_suite(gnutls_session_t session, */ int _gnutls_read_client_hello_v2(gnutls_session_t session, uint8_t * data, - unsigned int datalen) + unsigned int len) { uint16_t session_id_len = 0; int pos = 0; int ret = 0, sret = 0; uint16_t sizeOfSuites; - gnutls_protocol_t adv_version; uint8_t rnd[GNUTLS_RANDOM_SIZE], major, minor; - int len = datalen; + int neg_version; + const version_entry_st *vers; uint16_t challenge; uint8_t session_id[GNUTLS_MAX_SESSION_ID_SIZE]; @@ -110,14 +109,18 @@ _gnutls_read_client_hello_v2(gnutls_session_t session, uint8_t * data, minor = data[pos + 1]; set_adv_version(session, major, minor); - adv_version = _gnutls_version_get(major, minor); - - ret = _gnutls_negotiate_version(session, adv_version, major, minor); + ret = _gnutls_negotiate_version(session, major, minor, 0); if (ret < 0) { gnutls_assert(); return ret; } + vers = get_version(session); + if (vers == NULL) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + + neg_version = vers->id; + pos += 2; /* Read uint16_t cipher_spec_length */ @@ -147,7 +150,7 @@ _gnutls_read_client_hello_v2(gnutls_session_t session, uint8_t * data, /* call the user hello callback */ - ret = _gnutls_user_hello_func(session, adv_version, major, minor); + ret = _gnutls_user_hello_func(session, major, minor); if (ret < 0) { if (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED) { sret = GNUTLS_E_INT_RET_0; @@ -174,8 +177,7 @@ _gnutls_read_client_hello_v2(gnutls_session_t session, uint8_t * data, */ if (_gnutls_get_kx_cred (session, - _gnutls_cipher_suite_get_kx_algo(session->security_parameters. - cipher_suite)) == NULL) { + session->security_parameters.cs->kx_algorithm) == NULL) { gnutls_assert(); return GNUTLS_E_INSUFFICIENT_CREDENTIALS; } @@ -185,9 +187,8 @@ _gnutls_read_client_hello_v2(gnutls_session_t session, uint8_t * data, * handshake functions are read from there; */ session->internals.auth_struct = - _gnutls_kx_auth_struct(_gnutls_cipher_suite_get_kx_algo - (session->security_parameters. - cipher_suite)); + _gnutls_kx_auth_struct(session->security_parameters. + cs->kx_algorithm); if (session->internals.auth_struct == NULL) { _gnutls_handshake_log @@ -209,12 +210,10 @@ _gnutls_read_client_hello_v2(gnutls_session_t session, uint8_t * data, memcpy(&rnd[GNUTLS_RANDOM_SIZE - challenge], &data[pos], challenge); - ret = _gnutls_set_client_random(session, rnd); - if (ret < 0) - return gnutls_assert_val(ret); + _gnutls_set_client_random(session, rnd); /* generate server random value */ - ret = _gnutls_set_server_random(session, NULL); + ret = _gnutls_gen_server_random(session, neg_version); if (ret < 0) return gnutls_assert_val(ret); @@ -242,17 +241,15 @@ _gnutls_read_client_hello_v2(gnutls_session_t session, uint8_t * data, session->internals.resumed = RESUME_TRUE; return 0; } else { - _gnutls_generate_session_id(session->security_parameters. - session_id, - &session->security_parameters. - session_id_size); + ret = _gnutls_generate_session_id( + session->security_parameters.session_id, + &session->security_parameters.session_id_size); + if (ret < 0) + return gnutls_assert_val(ret); + session->internals.resumed = RESUME_FALSE; } - ret = _gnutls_set_compression(session, GNUTLS_COMP_NULL); - if (ret < 0) - return gnutls_assert_val(ret); - return sret; } #endif diff --git a/lib/sslv2_compat.h b/lib/sslv2_compat.h index fffd17e5e7..61b62cd650 100644 --- a/lib/sslv2_compat.h +++ b/lib/sslv2_compat.h @@ -16,9 +16,14 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_SSLV2_COMPAT_H +#define GNUTLS_LIB_SSLV2_COMPAT_H + int _gnutls_read_client_hello_v2(gnutls_session_t session, uint8_t * data, unsigned int datalen); + +#endif /* GNUTLS_LIB_SSLV2_COMPAT_H */ diff --git a/lib/state.c b/lib/state.c index b1cb578742..8ba2cc4a32 100644 --- a/lib/state.c +++ b/lib/state.c @@ -1,7 +1,7 @@ /* * Copyright (C) 2002-2016 Free Software Foundation, Inc. * Copyright (C) 2014-2016 Nikos Mavrogiannopoulos - * Copyright (C) 2015-2016 Red Hat, Inc. + * Copyright (C) 2015-2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -18,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -44,13 +44,24 @@ #include #include #include -#include +#include #include #include #include #include #include #include "dtls.h" +#include "tls13/session_ticket.h" +#include "ext/cert_types.h" +#include "locks.h" +#include "kx.h" +#ifdef HAVE_VALGRIND_MEMCHECK_H +#include +#endif + +/* to be used by supplemental data support to disable TLS1.3 + * when supplemental data have been globally registered */ +unsigned _gnutls_disable_tls13 = 0; /* These should really be static, but src/tests.c calls them. Make them public functions? */ @@ -58,30 +69,11 @@ void _gnutls_rsa_pms_set_version(gnutls_session_t session, unsigned char major, unsigned char minor); -void -_gnutls_session_cert_type_set(gnutls_session_t session, - gnutls_certificate_type_t ct) -{ - _gnutls_handshake_log - ("HSK[%p]: Selected certificate type %s (%d)\n", session, - gnutls_certificate_type_get_name(ct), ct); - session->security_parameters.cert_type = ct; -} - -void -_gnutls_session_ecc_curve_set(gnutls_session_t session, - gnutls_ecc_curve_t c) -{ - _gnutls_handshake_log("HSK[%p]: Selected ECC curve %s (%d)\n", - session, gnutls_ecc_curve_get_name(c), c); - session->security_parameters.ecc_curve = c; -} - /** * gnutls_cipher_get: * @session: is a #gnutls_session_t type. * - * Get currently used cipher. + * Get the currently used cipher. * * Returns: the currently used cipher, a #gnutls_cipher_algorithm_t * type. @@ -103,42 +95,112 @@ gnutls_cipher_algorithm_t gnutls_cipher_get(gnutls_session_t session) * gnutls_certificate_type_get: * @session: is a #gnutls_session_t type. * - * The certificate type is by default X.509, unless it is negotiated - * as a TLS extension. + * This function returns the type of the certificate that is negotiated + * for this side to send to the peer. The certificate type is by default + * X.509, unless an alternative certificate type is enabled by + * gnutls_init() and negotiated during the session. + * + * Resumed sessions will return the certificate type that was negotiated + * and used in the original session. + * + * As of version 3.6.4 it is recommended to use + * gnutls_certificate_type_get2() which is more fine-grained. * * Returns: the currently used #gnutls_certificate_type_t certificate - * type. + * type as negotiated for 'our' side of the connection. **/ gnutls_certificate_type_t gnutls_certificate_type_get(gnutls_session_t session) { - return session->security_parameters.cert_type; + return gnutls_certificate_type_get2(session, GNUTLS_CTYPE_OURS); +} + +/** + * gnutls_certificate_type_get2: + * @session: is a #gnutls_session_t type. + * @target: is a #gnutls_ctype_target_t type. + * + * This function returns the type of the certificate that a side + * is negotiated to use. The certificate type is by default X.509, + * unless an alternative certificate type is enabled by gnutls_init() and + * negotiated during the session. + * + * The @target parameter specifies whether to request the negotiated + * certificate type for the client (%GNUTLS_CTYPE_CLIENT), + * or for the server (%GNUTLS_CTYPE_SERVER). Additionally, in P2P mode + * connection set up where you don't know in advance who will be client + * and who will be server you can use the flag (%GNUTLS_CTYPE_OURS) and + * (%GNUTLS_CTYPE_PEERS) to retrieve the corresponding certificate types. + * + * Resumed sessions will return the certificate type that was negotiated + * and used in the original session. That is, this function can be used + * to reliably determine the type of the certificate returned by + * gnutls_certificate_get_peers(). + * + * Returns: the currently used #gnutls_certificate_type_t certificate + * type for the client or the server. + * + * Since: 3.6.4 + **/ +gnutls_certificate_type_t +gnutls_certificate_type_get2(gnutls_session_t session, + gnutls_ctype_target_t target) +{ + /* We want to inline this function so therefore + * we've defined it in gnutls_int.h */ + return get_certificate_type(session, target); } /** * gnutls_kx_get: * @session: is a #gnutls_session_t type. * - * Get currently used key exchange algorithm. + * Get the currently used key exchange algorithm. + * + * This function will return %GNUTLS_KX_ECDHE_RSA, or %GNUTLS_KX_DHE_RSA + * under TLS 1.3, to indicate an elliptic curve DH key exchange or + * a finite field one. The precise group used is available + * by calling gnutls_group_get() instead. * * Returns: the key exchange algorithm used in the last handshake, a * #gnutls_kx_algorithm_t value. **/ gnutls_kx_algorithm_t gnutls_kx_get(gnutls_session_t session) { - if (session->internals.handshake_in_progress) { - /* This allows early call during handshake */ - return _gnutls_cipher_suite_get_kx_algo(session->security_parameters.cipher_suite); - } else { - return session->security_parameters.kx_algorithm; + if (session->security_parameters.cs == 0) + return 0; + + if (session->security_parameters.cs->kx_algorithm == 0) { /* TLS 1.3 */ + const version_entry_st *ver = get_version(session); + const gnutls_group_entry_st *group = get_group(session); + + if (ver->tls13_sem) { + if (session->internals.hsk_flags & HSK_PSK_SELECTED) { + if (group) { + if (group->pk == GNUTLS_PK_DH) + return GNUTLS_KX_DHE_PSK; + else + return GNUTLS_KX_ECDHE_PSK; + } else { + return GNUTLS_KX_PSK; + } + } else if (group) { + if (group->pk == GNUTLS_PK_DH) + return GNUTLS_KX_DHE_RSA; + else + return GNUTLS_KX_ECDHE_RSA; + } + } } + + return session->security_parameters.cs->kx_algorithm; } /** * gnutls_mac_get: * @session: is a #gnutls_session_t type. * - * Get currently used MAC algorithm. + * Get the currently used MAC algorithm. * * Returns: the currently used mac algorithm, a * #gnutls_mac_algorithm_t value. @@ -160,7 +222,7 @@ gnutls_mac_algorithm_t gnutls_mac_get(gnutls_session_t session) * gnutls_compression_get: * @session: is a #gnutls_session_t type. * - * Get currently used compression algorithm. + * Get the currently used compression algorithm. * * Returns: the currently used compression method, a * #gnutls_compression_method_t value. @@ -168,63 +230,135 @@ gnutls_mac_algorithm_t gnutls_mac_get(gnutls_session_t session) gnutls_compression_method_t gnutls_compression_get(gnutls_session_t session) { - record_parameters_st *record_params; - int ret; + return GNUTLS_COMP_NULL; +} - ret = - _gnutls_epoch_get(session, EPOCH_READ_CURRENT, &record_params); - if (ret < 0) - return gnutls_assert_val(GNUTLS_COMP_NULL); +/** + * gnutls_prf_hash_get: + * @session: is a #gnutls_session_t type. + * + * Get the currently used hash algorithm. In TLS 1.3, the hash + * algorithm is used for both the key derivation function and + * handshake message authentication code. In TLS 1.2, it matches the + * hash algorithm used for PRF. + * + * Returns: the currently used hash algorithm, a + * #gnutls_digest_algorithm_t value. + * + * Since: 3.6.13 + **/ +gnutls_digest_algorithm_t +gnutls_prf_hash_get(const gnutls_session_t session) +{ + if (session->security_parameters.prf == NULL) + return gnutls_assert_val(GNUTLS_DIG_UNKNOWN); + + if (session->security_parameters.prf->id >= GNUTLS_MAC_AEAD) + return gnutls_assert_val(GNUTLS_DIG_UNKNOWN); - return record_params->compression_algorithm; + return (gnutls_digest_algorithm_t)session->security_parameters.prf->id; } -/* Check if the given certificate type is supported. - * This means that it is enabled by the priority functions, - * and a matching certificate exists. +void reset_binders(gnutls_session_t session) +{ + _gnutls_free_temp_key_datum(&session->key.binders[0].psk); + _gnutls_free_temp_key_datum(&session->key.binders[1].psk); + memset(session->key.binders, 0, sizeof(session->key.binders)); +} + +/* Check whether certificate credentials of type @cert_type are set + * for the current session. */ -int -_gnutls_session_cert_type_supported(gnutls_session_t session, - gnutls_certificate_type_t cert_type) +static bool _gnutls_has_cert_credentials(gnutls_session_t session, + gnutls_certificate_type_t cert_type) { unsigned i; unsigned cert_found = 0; gnutls_certificate_credentials_t cred; - if (session->security_parameters.entity == GNUTLS_SERVER) { - cred = (gnutls_certificate_credentials_t) - _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + /* First, check for certificate credentials. If we have no certificate + * credentials set then we don't support certificates at all. + */ + cred = (gnutls_certificate_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); - if (cred == NULL) - return GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; + if (cred == NULL) + return false; - if (cred->get_cert_callback == NULL && cred->get_cert_callback2 == NULL) { - for (i = 0; i < cred->ncerts; i++) { - if (cred->certs[i].cert_list[0].type == - cert_type) { - cert_found = 1; - break; - } + /* There are credentials initialized. Now check whether we can find + * pre-set certificates of the required type, but only if we don't + * use the callback functions. + */ + if (cred->get_cert_callback3 == NULL) { + for (i = 0; i < cred->ncerts; i++) { + if (cred->certs[i].cert_list[0].type == cert_type) { + cert_found = 1; + break; } + } - if (cert_found == 0) - /* no certificate is of that type. - */ - return - GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; + if (cert_found == 0) { + /* No matching certificate found. */ + return false; } } - if (session->internals.priorities.cert_type.algorithms == 0 + return true; // OK +} + +/* Check if the given certificate type is supported. + * This means that it is enabled by the priority functions, + * and in some cases a matching certificate exists. A check for + * the latter can be toggled via the parameter @check_credentials. + */ +int +_gnutls_session_cert_type_supported(gnutls_session_t session, + gnutls_certificate_type_t cert_type, + bool check_credentials, + gnutls_ctype_target_t target) +{ + unsigned i; + priority_st* ctype_priorities; + + // Check whether this cert type is enabled by the application + if (!is_cert_type_enabled(session, cert_type)) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE); + + // Perform a credentials check if requested + if (check_credentials) { + if (!_gnutls_has_cert_credentials(session, cert_type)) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE); + } + + /* So far so good. We have the required credentials (if needed). + * Now check whether we are allowed to use them according to our + * priorities. + */ + // Which certificate type should we query? + switch (target) { + case GNUTLS_CTYPE_CLIENT: + ctype_priorities = + &(session->internals.priorities->client_ctype); + break; + case GNUTLS_CTYPE_SERVER: + ctype_priorities = + &(session->internals.priorities->server_ctype); + break; + default: + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } + + // No explicit priorities set, and default ctype is asked + if (ctype_priorities->num_priorities == 0 && cert_type == DEFAULT_CERT_TYPE) return 0; - for (i = 0; i < session->internals.priorities.cert_type.algorithms; - i++) { - if (session->internals.priorities.cert_type.priority[i] == - cert_type) { - return 0; /* ok */ - } + /* Now lets find out whether our cert type is in our priority + * list, i.e. set of allowed cert types. + */ + for (i = 0; i < ctype_priorities->num_priorities; i++) { + if (ctype_priorities->priorities[i] == cert_type) + return 0; } return GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; @@ -232,52 +366,47 @@ _gnutls_session_cert_type_supported(gnutls_session_t session, static void deinit_keys(gnutls_session_t session) { - gnutls_pk_params_release(&session->key.ecdh_params); - gnutls_pk_params_release(&session->key.dh_params); - zrelease_temp_mpi_key(&session->key.ecdh_x); - zrelease_temp_mpi_key(&session->key.ecdh_y); - _gnutls_free_temp_key_datum(&session->key.ecdhx); - - zrelease_temp_mpi_key(&session->key.client_Y); - - /* SRP */ - zrelease_temp_mpi_key(&session->key.srp_p); - zrelease_temp_mpi_key(&session->key.srp_g); - zrelease_temp_mpi_key(&session->key.srp_key); - - zrelease_temp_mpi_key(&session->key.u); - zrelease_temp_mpi_key(&session->key.a); - zrelease_temp_mpi_key(&session->key.x); - zrelease_temp_mpi_key(&session->key.A); - zrelease_temp_mpi_key(&session->key.B); - zrelease_temp_mpi_key(&session->key.b); - - _gnutls_free_temp_key_datum(&session->key.key); - _gnutls_free_temp_key_datum(&session->key.key); -} + const version_entry_st *vers = get_version(session); -/* this function deinitializes all the internal parameters stored - * in a session struct. - */ -inline static void deinit_internal_params(gnutls_session_t session) -{ -#if defined(ENABLE_DHE) || defined(ENABLE_ANON) - if (session->internals.params.free_dh_params) - gnutls_dh_params_deinit(session->internals.params. - dh_params); -#endif + if (vers == NULL) + return; - _gnutls_handshake_hash_buffers_clear(session); + gnutls_pk_params_release(&session->key.kshare.ecdhx_params); + gnutls_pk_params_release(&session->key.kshare.ecdh_params); + gnutls_pk_params_release(&session->key.kshare.dh_params); + + if (!vers->tls13_sem && session->key.binders[0].prf == NULL) { + gnutls_pk_params_release(&session->key.proto.tls12.ecdh.params); + gnutls_pk_params_release(&session->key.proto.tls12.dh.params); + zrelease_temp_mpi_key(&session->key.proto.tls12.ecdh.x); + zrelease_temp_mpi_key(&session->key.proto.tls12.ecdh.y); + _gnutls_free_temp_key_datum(&session->key.proto.tls12.ecdh.raw); + + zrelease_temp_mpi_key(&session->key.proto.tls12.dh.client_Y); + + /* SRP */ + zrelease_temp_mpi_key(&session->key.proto.tls12.srp.srp_p); + zrelease_temp_mpi_key(&session->key.proto.tls12.srp.srp_g); + zrelease_temp_mpi_key(&session->key.proto.tls12.srp.srp_key); + + zrelease_temp_mpi_key(&session->key.proto.tls12.srp.u); + zrelease_temp_mpi_key(&session->key.proto.tls12.srp.a); + zrelease_temp_mpi_key(&session->key.proto.tls12.srp.x); + zrelease_temp_mpi_key(&session->key.proto.tls12.srp.A); + zrelease_temp_mpi_key(&session->key.proto.tls12.srp.B); + zrelease_temp_mpi_key(&session->key.proto.tls12.srp.b); + } else { + gnutls_memset(session->key.proto.tls13.temp_secret, 0, + sizeof(session->key.proto.tls13.temp_secret)); + } - memset(&session->internals.params, 0, - sizeof(session->internals.params)); + reset_binders(session); + _gnutls_free_temp_key_datum(&session->key.key); } -/* This function will clear all the variables in internals - * structure within the session, which depend on the current handshake. - * This is used to allow further handshakes. - */ -static void _gnutls_handshake_internal_state_init(gnutls_session_t session) +/* An internal version of _gnutls_handshake_internal_state_clear(), + * it will not attempt to deallocate, only initialize */ +static void handshake_internal_state_clear1(gnutls_session_t session) { /* by default no selected certificate */ session->internals.adv_version_major = 0; @@ -295,22 +424,34 @@ static void _gnutls_handshake_internal_state_init(gnutls_session_t session) session->internals.handshake_suspicious_loops = 0; session->internals.dtls.hsk_read_seq = 0; session->internals.dtls.hsk_write_seq = 0; + + session->internals.cand_ec_group = 0; + session->internals.cand_dh_group = 0; + + session->internals.hrr_cs[0] = CS_INVALID_MAJOR; + session->internals.hrr_cs[1] = CS_INVALID_MINOR; } +/* This function will clear all the variables in internals + * structure within the session, which depend on the current handshake. + * This is used to allow further handshakes. + */ void _gnutls_handshake_internal_state_clear(gnutls_session_t session) { - _gnutls_handshake_internal_state_init(session); + handshake_internal_state_clear1(session); - deinit_internal_params(session); + _gnutls_handshake_hash_buffers_clear(session); deinit_keys(session); _gnutls_epoch_gc(session); - session->internals.handshake_endtime = 0; + session->internals.handshake_abs_timeout.tv_sec = 0; + session->internals.handshake_abs_timeout.tv_nsec = 0; session->internals.handshake_in_progress = 0; session->internals.tfo.connect_addrlen = 0; session->internals.tfo.connect_only = 0; + session->internals.early_data_received = 0; } /** @@ -334,45 +475,66 @@ void _gnutls_handshake_internal_state_clear(gnutls_session_t session) int gnutls_init(gnutls_session_t * session, unsigned int flags) { int ret; - record_parameters_st *epoch; - + FAIL_IF_LIB_ERROR; *session = gnutls_calloc(1, sizeof(struct gnutls_session_int)); if (*session == NULL) return GNUTLS_E_MEMORY_ERROR; - ret = _gnutls_epoch_alloc(*session, 0, &epoch); + ret = gnutls_mutex_init(&(*session)->internals.post_negotiation_lock); if (ret < 0) { gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; + gnutls_free(*session); + return ret; } - /* Set all NULL algos on epoch 0 */ - _gnutls_epoch_set_null_algos(*session, epoch); + ret = gnutls_mutex_init(&(*session)->internals.epoch_lock); + if (ret < 0) { + gnutls_assert(); + gnutls_mutex_deinit(&(*session)->internals.post_negotiation_lock); + gnutls_free(*session); + return ret; + } - (*session)->security_parameters.epoch_next = 1; + ret = _gnutls_epoch_setup_next(*session, 1, NULL); + if (ret < 0) { + gnutls_mutex_deinit(&(*session)->internals.post_negotiation_lock); + gnutls_mutex_deinit(&(*session)->internals.epoch_lock); + gnutls_free(*session); + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + _gnutls_epoch_bump(*session); (*session)->security_parameters.entity = (flags & GNUTLS_SERVER ? GNUTLS_SERVER : GNUTLS_CLIENT); /* the default certificate type for TLS */ - (*session)->security_parameters.cert_type = DEFAULT_CERT_TYPE; + (*session)->security_parameters.client_ctype = DEFAULT_CERT_TYPE; + (*session)->security_parameters.server_ctype = DEFAULT_CERT_TYPE; /* Initialize buffers */ _gnutls_buffer_init(&(*session)->internals.handshake_hash_buffer); + _gnutls_buffer_init(&(*session)->internals.post_handshake_hash_buffer); _gnutls_buffer_init(&(*session)->internals.hb_remote_data); _gnutls_buffer_init(&(*session)->internals.hb_local_data); _gnutls_buffer_init(&(*session)->internals.record_presend_buffer); + _gnutls_buffer_init(&(*session)->internals.record_key_update_buffer); + _gnutls_buffer_init(&(*session)->internals.reauth_buffer); _mbuffer_head_init(&(*session)->internals.record_buffer); _mbuffer_head_init(&(*session)->internals.record_send_buffer); _mbuffer_head_init(&(*session)->internals.record_recv_buffer); + _mbuffer_head_init(&(*session)->internals.early_data_recv_buffer); + _gnutls_buffer_init(&(*session)->internals.early_data_presend_buffer); _mbuffer_head_init(&(*session)->internals.handshake_send_buffer); _gnutls_handshake_recv_buffer_init(*session); - (*session)->internals.expire_time = DEFAULT_EXPIRE_TIME; /* one hour default */ + (*session)->internals.expire_time = DEFAULT_EXPIRE_TIME; + + /* Ticket key rotation - set the default X to 3 times the ticket expire time */ + (*session)->key.totp.last_result = 0; gnutls_handshake_set_max_packet_length((*session), MAX_HANDSHAKE_PACKET_SIZE); @@ -390,19 +552,38 @@ int gnutls_init(gnutls_session_t * session, unsigned int flags) DEFAULT_MAX_RECORD_SIZE; (*session)->security_parameters.max_record_send_size = DEFAULT_MAX_RECORD_SIZE; + (*session)->security_parameters.max_user_record_recv_size = + DEFAULT_MAX_RECORD_SIZE; + (*session)->security_parameters.max_user_record_send_size = + DEFAULT_MAX_RECORD_SIZE; - /* everything else not initialized here is initialized - * as NULL or 0. This is why calloc is used. + /* set the default early data size for TLS */ + if ((*session)->security_parameters.entity == GNUTLS_SERVER) { + (*session)->security_parameters.max_early_data_size = + DEFAULT_MAX_EARLY_DATA_SIZE; + } else { + (*session)->security_parameters.max_early_data_size = + UINT32_MAX; + } - _gnutls_handshake_internal_state_init(*session); - - (*session)->internals.extensions_sent_size = 0; - - /* emulate old gnutls behavior for old applications that do not use the priority_* - * functions. + /* Everything else not initialized here is initialized as NULL + * or 0. This is why calloc is used. However, we want to + * ensure that certain portions of data are initialized at + * runtime before being used. Mark such regions with a + * valgrind client request as undefined. */ - (*session)->internals.priorities.sr = SR_PARTIAL; +#ifdef HAVE_VALGRIND_MEMCHECK_H + if (RUNNING_ON_VALGRIND) { + if (flags & GNUTLS_CLIENT) + VALGRIND_MAKE_MEM_UNDEFINED((*session)->security_parameters.client_random, + GNUTLS_RANDOM_SIZE); + if (flags & GNUTLS_SERVER) + VALGRIND_MAKE_MEM_UNDEFINED((*session)->security_parameters.server_random, + GNUTLS_RANDOM_SIZE); + } +#endif + handshake_internal_state_clear1(*session); #ifdef HAVE_WRITEV #ifdef MSG_NOSIGNAL @@ -418,6 +599,8 @@ int gnutls_init(gnutls_session_t * session, unsigned int flags) (*session)->internals.pull_func = system_read; (*session)->internals.errno_func = system_errno; + (*session)->internals.saved_username_size = -1; + /* heartbeat timeouts */ (*session)->internals.hb_retrans_timeout_ms = 1000; (*session)->internals.hb_total_timeout_ms = 60000; @@ -433,18 +616,24 @@ int gnutls_init(gnutls_session_t * session, unsigned int flags) /* Enable useful extensions */ if ((flags & GNUTLS_CLIENT) && !(flags & GNUTLS_NO_EXTENSIONS)) { -#ifdef ENABLE_SESSION_TICKETS - if (!(flags & GNUTLS_NO_TICKETS)) - gnutls_session_ticket_enable_client(*session); -#endif #ifdef ENABLE_OCSP gnutls_ocsp_status_request_enable_client(*session, NULL, 0, NULL); #endif } + /* session tickets in server side are enabled by setting a key */ + if (flags & GNUTLS_SERVER) + flags |= GNUTLS_NO_TICKETS; + (*session)->internals.flags = flags; + if (_gnutls_disable_tls13 != 0) + (*session)->internals.flags |= INT_FLAG_NO_TLS13; + + /* Install the default keylog function */ + gnutls_session_set_keylog_function(*session, _gnutls_nss_keylog_func); + return 0; } @@ -476,7 +665,7 @@ void gnutls_deinit(gnutls_session_t session) _gnutls_handshake_internal_state_clear(session); _gnutls_handshake_io_buffer_clear(session); - _gnutls_ext_free_session_data(session); + _gnutls_hello_ext_priv_deinit(session); for (i = 0; i < MAX_EPOCH_INDEX; i++) if (session->record_parameters[i] != NULL) { @@ -486,23 +675,45 @@ void gnutls_deinit(gnutls_session_t session) } _gnutls_buffer_clear(&session->internals.handshake_hash_buffer); + _gnutls_buffer_clear(&session->internals.post_handshake_hash_buffer); _gnutls_buffer_clear(&session->internals.hb_remote_data); _gnutls_buffer_clear(&session->internals.hb_local_data); _gnutls_buffer_clear(&session->internals.record_presend_buffer); + _gnutls_buffer_clear(&session->internals.record_key_update_buffer); + _gnutls_buffer_clear(&session->internals.reauth_buffer); _mbuffer_head_clear(&session->internals.record_buffer); _mbuffer_head_clear(&session->internals.record_recv_buffer); _mbuffer_head_clear(&session->internals.record_send_buffer); + _mbuffer_head_clear(&session->internals.early_data_recv_buffer); + _gnutls_buffer_clear(&session->internals.early_data_presend_buffer); + _gnutls_free_datum(&session->internals.resumption_data); + _gnutls_free_datum(&session->internals.dtls.dcookie); + for (i = 0; i < session->internals.rexts_size; i++) + gnutls_free(session->internals.rexts[i].name); gnutls_free(session->internals.rexts); + gnutls_free(session->internals.post_handshake_cr_context.data); gnutls_free(session->internals.rsup); gnutls_credentials_clear(session); _gnutls_selected_certs_deinit(session); + /* destroy any session ticket we may have received */ + _gnutls13_session_ticket_unset(session); + + /* we rely on priorities' internal reference counting */ + gnutls_priority_deinit(session->internals.priorities); + + /* overwrite any temp TLS1.3 keys */ + gnutls_memset(&session->key.proto, 0, sizeof(session->key.proto)); + + gnutls_mutex_deinit(&session->internals.post_negotiation_lock); + gnutls_mutex_deinit(&session->internals.epoch_lock); + gnutls_free(session); } @@ -601,7 +812,7 @@ int _gnutls_dh_set_secret_bits(gnutls_session_t session, unsigned bits) /* Sets the prime and the generator in the auth info structure. */ int -_gnutls_dh_set_group(gnutls_session_t session, bigint_t gen, +_gnutls_dh_save_group(gnutls_session_t session, bigint_t gen, bigint_t prime) { dh_info_st *dh; @@ -669,25 +880,6 @@ _gnutls_dh_set_group(gnutls_session_t session, bigint_t gen, return 0; } -#ifdef ENABLE_OPENPGP -/** - * gnutls_openpgp_send_cert: - * @session: a #gnutls_session_t type. - * @status: is one of GNUTLS_OPENPGP_CERT, or GNUTLS_OPENPGP_CERT_FINGERPRINT - * - * This function will order gnutls to send the key fingerprint - * instead of the key in the initial handshake procedure. This should - * be used with care and only when there is indication or knowledge - * that the server can obtain the client's key. - **/ -void -gnutls_openpgp_send_cert(gnutls_session_t session, - gnutls_openpgp_crt_status_t status) -{ - session->internals.pgp_fingerprint = status; -} -#endif - /** * gnutls_certificate_send_x509_rdn_sequence: * @session: a #gnutls_session_t type. @@ -709,13 +901,6 @@ gnutls_certificate_send_x509_rdn_sequence(gnutls_session_t session, session->internals.ignore_rdn_sequence = status; } -#ifdef ENABLE_OPENPGP -int _gnutls_openpgp_send_fingerprint(gnutls_session_t session) -{ - return session->internals.pgp_fingerprint; -} -#endif - /*- * _gnutls_record_set_default_version - Used to set the default version for the first record packet * @session: is a #gnutls_session_t type. @@ -773,7 +958,8 @@ void gnutls_handshake_set_private_extensions(gnutls_session_t session, int allow) { - session->internals.enable_private = allow; + /* we have no private extensions */ + return; } @@ -781,7 +967,8 @@ gnutls_handshake_set_private_extensions(gnutls_session_t session, * gnutls_session_is_resumed: * @session: is a #gnutls_session_t type. * - * Check whether session is resumed or not. + * Checks whether session is resumed or not. This is functional + * for both server and client side. * * Returns: non zero if this session is resumed, or a zero if this is * a new session. @@ -789,6 +976,11 @@ gnutls_handshake_set_private_extensions(gnutls_session_t session, int gnutls_session_is_resumed(gnutls_session_t session) { if (session->security_parameters.entity == GNUTLS_CLIENT) { + const version_entry_st *ver = get_version(session); + if (ver && ver->tls13_sem && + session->internals.resumed != RESUME_FALSE) + return 1; + if (session->security_parameters.session_id_size > 0 && session->security_parameters.session_id_size == session->internals.resumed_security_parameters. @@ -837,8 +1029,7 @@ int _gnutls_session_is_psk(gnutls_session_t session) { gnutls_kx_algorithm_t kx; - kx = _gnutls_cipher_suite_get_kx_algo(session->security_parameters. - cipher_suite); + kx = session->security_parameters.cs->kx_algorithm; if (kx == GNUTLS_KX_PSK || kx == GNUTLS_KX_DHE_PSK || kx == GNUTLS_KX_RSA_PSK) return 1; @@ -860,8 +1051,7 @@ int _gnutls_session_is_ecc(gnutls_session_t session) /* We get the key exchange algorithm through the ciphersuite because * the negotiated key exchange might not have been set yet. */ - kx = _gnutls_cipher_suite_get_kx_algo(session->security_parameters. - cipher_suite); + kx = session->security_parameters.cs->kx_algorithm; return _gnutls_kx_is_ecc(kx); } @@ -931,15 +1121,18 @@ void * gnutls_record_get_direction: * @session: is a #gnutls_session_t type. * - * This function provides information about the internals of the - * record protocol and is only useful if a prior gnutls function call, - * e.g. gnutls_handshake(), was interrupted for some reason. That - * is, if a function returned %GNUTLS_E_INTERRUPTED or - * %GNUTLS_E_AGAIN. In such a case, you might want to call select() - * or poll() before restoring the interrupted gnutls function. + * This function is useful to determine whether a GnuTLS function was interrupted + * while sending or receiving, so that select() or poll() may be called appropriately. + * + * It provides information about the internals of the record + * protocol and is only useful if a prior gnutls function call, + * e.g. gnutls_handshake(), was interrupted and returned + * %GNUTLS_E_INTERRUPTED or %GNUTLS_E_AGAIN. After such an interrupt + * applications may call select() or poll() before restoring the + * interrupted GnuTLS function. * * This function's output is unreliable if you are using the same - * @session in different threads, for sending and receiving. + * @session in different threads for sending and receiving. * * Returns: 0 if interrupted while trying to read data, or 1 while trying to write data. **/ @@ -966,6 +1159,24 @@ _gnutls_rsa_pms_set_version(gnutls_session_t session, session->internals.rsa_pms_version[1] = minor; } +void _gnutls_session_client_cert_type_set(gnutls_session_t session, + gnutls_certificate_type_t ct) +{ + _gnutls_handshake_log + ("HSK[%p]: Selected client certificate type %s (%d)\n", session, + gnutls_certificate_type_get_name(ct), ct); + session->security_parameters.client_ctype = ct; +} + +void _gnutls_session_server_cert_type_set(gnutls_session_t session, + gnutls_certificate_type_t ct) +{ + _gnutls_handshake_log + ("HSK[%p]: Selected server certificate type %s (%d)\n", session, + gnutls_certificate_type_get_name(ct), ct); + session->security_parameters.server_ctype = ct; +} + /** * gnutls_handshake_set_post_client_hello_function: * @session: is a #gnutls_session_t type. @@ -1019,7 +1230,7 @@ gnutls_handshake_set_post_client_hello_function(gnutls_session_t session, **/ void gnutls_session_enable_compatibility_mode(gnutls_session_t session) { - ENABLE_COMPAT(&session->internals.priorities); + ENABLE_COMPAT(&session->internals); } /** @@ -1063,7 +1274,7 @@ gnutls_session_channel_binding(gnutls_session_t session, * gnutls_ecc_curve_get: * @session: is a #gnutls_session_t type. * - * Returns the currently used elliptic curve. Only valid + * Returns the currently used elliptic curve for key exchange. Only valid * when using an elliptic curve ciphersuite. * * Returns: the currently used curve, a #gnutls_ecc_curve_t @@ -1073,7 +1284,34 @@ gnutls_session_channel_binding(gnutls_session_t session, **/ gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session) { - return _gnutls_session_ecc_curve_get(session); + const gnutls_group_entry_st *e; + + e = get_group(session); + if (e == NULL || e->curve == 0) + return 0; + return e->curve; +} + +/** + * gnutls_group_get: + * @session: is a #gnutls_session_t type. + * + * Returns the currently used group for key exchange. Only valid + * when using an elliptic curve or DH ciphersuite. + * + * Returns: the currently used group, a #gnutls_group_t + * type. + * + * Since: 3.6.0 + **/ +gnutls_group_t gnutls_group_get(gnutls_session_t session) +{ + const gnutls_group_entry_st *e; + + e = get_group(session); + if (e == NULL) + return 0; + return e->id; } /** @@ -1129,6 +1367,8 @@ gnutls_session_get_random(gnutls_session_t session, * This function returns pointers to the master secret * used in the TLS session. The pointers are not to be modified or deallocated. * + * This function is only applicable under TLS 1.2 or earlier versions. + * * Since: 3.5.0 **/ void @@ -1190,21 +1430,21 @@ gnutls_handshake_set_random(gnutls_session_t session, * gnutls_handshake_set_hook_function: * @session: is a #gnutls_session_t type * @htype: the %gnutls_handshake_description_t of the message to hook at - * @post: %GNUTLS_HOOK_* depending on when the hook function should be called + * @when: %GNUTLS_HOOK_* depending on when the hook function should be called * @func: is the function to be called * * This function will set a callback to be called after or before the specified * handshake message has been received or generated. This is a * generalization of gnutls_handshake_set_post_client_hello_function(). * - * To call the hook function prior to the message being sent/generated use - * %GNUTLS_HOOK_PRE as @post parameter, %GNUTLS_HOOK_POST to call + * To call the hook function prior to the message being generated or processed + * use %GNUTLS_HOOK_PRE as @when parameter, %GNUTLS_HOOK_POST to call * after, and %GNUTLS_HOOK_BOTH for both cases. * * This callback must return 0 on success or a gnutls error code to * terminate the handshake. * - * Note to hook at all handshake messages use an @htype of %GNUTLS_HANDSHAKE_ANY. + * To hook at all handshake messages use an @htype of %GNUTLS_HANDSHAKE_ANY. * * Warning: You should not use this function to terminate the * handshake based on client input unless you know what you are @@ -1214,12 +1454,12 @@ gnutls_handshake_set_random(gnutls_session_t session, void gnutls_handshake_set_hook_function(gnutls_session_t session, unsigned int htype, - int post, + int when, gnutls_handshake_hook_func func) { session->internals.h_hook = func; session->internals.h_type = htype; - session->internals.h_post = post; + session->internals.h_post = when; } /** @@ -1233,9 +1473,10 @@ gnutls_handshake_set_hook_function(gnutls_session_t session, * * This function will return the parameters of the current record state. * These are only useful to be provided to an external off-loading device - * or subsystem. + * or subsystem. The returned values should be considered constant + * and valid for the lifetime of the session. * - * In that case, to sync the state you must call gnutls_record_set_state(). + * In that case, to sync the state back you must call gnutls_record_set_state(). * * Returns: %GNUTLS_E_SUCCESS on success, or an error code. * @@ -1271,14 +1512,23 @@ gnutls_record_get_state(gnutls_session_t session, else record_state = &record_params->write; - if (mac_key) - memcpy(mac_key, &record_state->mac_secret, sizeof(gnutls_datum_t)); - if (IV) - memcpy(IV, &record_state->IV, sizeof(gnutls_datum_t)); - if (cipher_key) - memcpy(cipher_key, &record_state->key, sizeof(gnutls_datum_t)); + if (mac_key) { + mac_key->data = record_state->mac_key; + mac_key->size = record_state->mac_key_size; + } + + if (IV) { + IV->data = record_state->iv; + IV->size = record_state->iv_size; + } + + if (cipher_key) { + cipher_key->data = record_state->key; + cipher_key->size = record_state->key_size; + } + if (seq_number) - memcpy(seq_number, UINT64DATA(record_state->sequence_number), 8); + _gnutls_write_uint64(record_state->sequence_number, seq_number); return 0; } @@ -1299,7 +1549,7 @@ gnutls_record_get_state(gnutls_session_t session, int gnutls_record_set_state(gnutls_session_t session, unsigned read, - unsigned char seq_number[8]) + const unsigned char seq_number[8]) { record_parameters_st *record_params; record_state_st *record_state; @@ -1322,7 +1572,7 @@ gnutls_record_set_state(gnutls_session_t session, else record_state = &record_params->write; - memcpy(UINT64DATA(record_state->sequence_number), seq_number, 8); + record_state->sequence_number = _gnutls_read_uint64(seq_number); if (IS_DTLS(session)) { _dtls_reset_window(record_params); @@ -1360,8 +1610,23 @@ unsigned gnutls_session_get_flags(gnutls_session_t session) flags |= GNUTLS_SFLAGS_HB_LOCAL_SEND; if (gnutls_heartbeat_allowed(session, GNUTLS_HB_PEER_ALLOWED_TO_SEND)) flags |= GNUTLS_SFLAGS_HB_PEER_SEND; - if (session->internals.false_start_used) + if (session->internals.hsk_flags & HSK_FALSE_START_USED) flags |= GNUTLS_SFLAGS_FALSE_START; + if ((session->internals.hsk_flags & HSK_EARLY_START_USED) && + (session->internals.flags & GNUTLS_ENABLE_EARLY_START)) + flags |= GNUTLS_SFLAGS_EARLY_START; + if (session->internals.hsk_flags & HSK_USED_FFDHE) + flags |= GNUTLS_SFLAGS_RFC7919; + if (session->internals.hsk_flags & HSK_TICKET_RECEIVED) + flags |= GNUTLS_SFLAGS_SESSION_TICKET; + if (session->security_parameters.post_handshake_auth) + flags |= GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH; + if (session->internals.hsk_flags & HSK_EARLY_DATA_ACCEPTED) + flags |= GNUTLS_SFLAGS_EARLY_DATA; + if (session->internals.hsk_flags & HSK_OCSP_REQUESTED) + flags |= GNUTLS_SFLAGS_CLI_REQUESTED_OCSP; + if (session->internals.hsk_flags & HSK_CLIENT_OCSP_REQUESTED) + flags |= GNUTLS_SFLAGS_SERV_REQUESTED_OCSP; return flags; } diff --git a/lib/state.h b/lib/state.h index 9e5fff848a..819df21ec6 100644 --- a/lib/state.h +++ b/lib/state.h @@ -16,29 +16,48 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_STATE_H -#define GNUTLS_STATE_H +#ifndef GNUTLS_LIB_STATE_H +#define GNUTLS_LIB_STATE_H #include "gnutls_int.h" -void _gnutls_session_cert_type_set(gnutls_session_t session, - gnutls_certificate_type_t); +void _gnutls_session_client_cert_type_set(gnutls_session_t session, + gnutls_certificate_type_t); +void _gnutls_session_server_cert_type_set(gnutls_session_t session, + gnutls_certificate_type_t); -inline static gnutls_ecc_curve_t -_gnutls_session_ecc_curve_get(gnutls_session_t session) +inline static const gnutls_group_entry_st * +get_group(gnutls_session_t session) { - return session->security_parameters.ecc_curve; + return session->security_parameters.grp; } int _gnutls_session_is_ecc(gnutls_session_t session); -void -_gnutls_session_ecc_curve_set(gnutls_session_t session, - gnutls_ecc_curve_t c); +inline static void +_gnutls_session_group_set(gnutls_session_t session, + const gnutls_group_entry_st *e) +{ + _gnutls_handshake_log("HSK[%p]: Selected group %s (%d)\n", + session, e->name, e->id); + session->security_parameters.grp = e; +} + +inline static +void set_default_version(gnutls_session_t session, const version_entry_st *ver) +{ + if (ver->tls13_sem) { + session->internals.default_record_version[0] = 3; + session->internals.default_record_version[1] = 1; + } else { + session->internals.default_record_version[0] = ver->major; + session->internals.default_record_version[1] = ver->minor; + } +} void _gnutls_record_set_default_version(gnutls_session_t session, @@ -52,29 +71,30 @@ _gnutls_hello_set_default_version(gnutls_session_t session, #include -#define CHECK_AUTH(auth, ret) if (gnutls_auth_get_type(session) != auth) { \ +#define CHECK_AUTH_TYPE(auth, ret) if (gnutls_auth_get_type(session) != auth) { \ gnutls_assert(); \ return ret; \ } -#endif -int _gnutls_session_cert_type_supported(gnutls_session_t, - gnutls_certificate_type_t); +int _gnutls_session_cert_type_supported(gnutls_session_t session, + gnutls_certificate_type_t cert_type, + bool check_credentials, + gnutls_ctype_target_t target); int _gnutls_dh_set_secret_bits(gnutls_session_t session, unsigned bits); int _gnutls_dh_set_peer_public(gnutls_session_t session, bigint_t public); -int _gnutls_dh_set_group(gnutls_session_t session, bigint_t gen, +int _gnutls_dh_save_group(gnutls_session_t session, bigint_t gen, bigint_t prime); static inline int _gnutls_dh_get_min_prime_bits(gnutls_session_t session) { - if (session->internals.priorities.dh_prime_bits != 0) - return session->internals.priorities.dh_prime_bits; + if (session->internals.dh_prime_bits != 0) + return session->internals.dh_prime_bits; else return gnutls_sec_param_to_pk_bits(GNUTLS_PK_DH, session->internals. - priorities.level); + priorities->level); } void _gnutls_handshake_internal_state_clear(gnutls_session_t); @@ -85,10 +105,21 @@ int _gnutls_session_is_psk(gnutls_session_t session); int _gnutls_openpgp_send_fingerprint(gnutls_session_t session); -int _gnutls_PRF(gnutls_session_t session, - const uint8_t * secret, unsigned int secret_size, - const char *label, int label_size, - const uint8_t * seed, int seed_size, - int total_bytes, void *ret); +void reset_binders(gnutls_session_t session); + +inline static int +_gnutls_PRF(gnutls_session_t session, + const uint8_t * secret, unsigned int secret_size, + const char *label, int label_size, const uint8_t * seed, + int seed_size, int total_bytes, void *ret) +{ + return _gnutls_prf_raw(session->security_parameters.prf->id, + secret_size, secret, + label_size, label, + seed_size, seed, + total_bytes, ret); +} #define DEFAULT_CERT_TYPE GNUTLS_CRT_X509 + +#endif /* GNUTLS_LIB_STATE_H */ diff --git a/lib/stek.c b/lib/stek.c new file mode 100644 index 0000000000..2f885cee37 --- /dev/null +++ b/lib/stek.c @@ -0,0 +1,357 @@ +/* + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * Author: Ander Juaristi + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ +#include "gnutls_int.h" +#include "stek.h" + +#define NAME_POS (0) +#define KEY_POS (TICKET_KEY_NAME_SIZE) +#define MAC_SECRET_POS (TICKET_KEY_NAME_SIZE+TICKET_CIPHER_KEY_SIZE) + +static int totp_sha3(gnutls_session_t session, + uint64_t t, + const gnutls_datum_t *secret, + uint8_t out[TICKET_MASTER_KEY_SIZE]) +{ + int retval; + uint8_t t_be[8]; + digest_hd_st hd; + /* + * We choose SHA3-512 because it outputs 64 bytes, + * just the same length as the ticket key. + */ + const gnutls_digest_algorithm_t algo = GNUTLS_DIG_SHA3_512; +#if TICKET_MASTER_KEY_SIZE != 64 +#error "TICKET_MASTER_KEY_SIZE must be 64 bytes" +#endif + + if (unlikely(secret == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + if ((retval = _gnutls_hash_init(&hd, hash_to_entry(algo))) < 0) + return gnutls_assert_val(retval); + + _gnutls_write_uint64(t, t_be); + + if ((retval = _gnutls_hash(&hd, t_be, sizeof(t_be))) < 0) + return gnutls_assert_val(retval); + if ((retval = _gnutls_hash(&hd, secret->data, secret->size)) < 0) + return gnutls_assert_val(retval); + + _gnutls_hash_deinit(&hd, out); + return GNUTLS_E_SUCCESS; +} + +static uint64_t T(gnutls_session_t session, time_t t) +{ + uint64_t numeral = t; + unsigned int x = session->internals.expire_time * STEK_ROTATION_PERIOD_PRODUCT; + + if (numeral <= 0) + return 0; + + return (numeral / x); +} + +static int64_t totp_next(gnutls_session_t session) +{ + time_t t; + uint64_t result; + + t = gnutls_time(NULL); + if (unlikely(t == (time_t) -1)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + result = T(session, t); + if (result == 0) + return 0; + + if (result == session->key.totp.last_result) + return 0; + + return result; +} + +static int64_t totp_previous(gnutls_session_t session) +{ + uint64_t result; + + if (session->key.totp.last_result == 0) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + if (!session->key.totp.was_rotated) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + result = session->key.totp.last_result - 1; + if (result == 0) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + return result; +} + +static void call_rotation_callback(gnutls_session_t session, + uint8_t key[TICKET_MASTER_KEY_SIZE], uint64_t t) +{ + gnutls_datum_t prev_key, new_key; + + if (session->key.totp.cb) { + new_key.data = key; + new_key.size = TICKET_MASTER_KEY_SIZE; + prev_key.data = session->key.session_ticket_key; + prev_key.size = TICKET_MASTER_KEY_SIZE; + + session->key.totp.cb(&prev_key, &new_key, t); + } +} + +static int rotate(gnutls_session_t session) +{ + int64_t t; + gnutls_datum_t secret; + uint8_t key[TICKET_MASTER_KEY_SIZE]; + + /* Do we need to calculate new totp? */ + t = totp_next(session); + if (t > 0) { + secret.data = session->key.initial_stek; + secret.size = TICKET_MASTER_KEY_SIZE; + + /* Generate next key */ + if (totp_sha3(session, t, &secret, key) < 0) { + gnutls_assert(); + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + } + + /* Replace old key with new one, and call callback if provided */ + call_rotation_callback(session, key, t); + session->key.totp.last_result = t; + memcpy(session->key.session_ticket_key, key, sizeof(key)); + + session->key.totp.was_rotated = 1; + } else if (t < 0) { + return gnutls_assert_val(t); + } + + return GNUTLS_E_SUCCESS; +} + +static int rotate_back_and_peek(gnutls_session_t session, + uint8_t key[TICKET_MASTER_KEY_SIZE]) +{ + int64_t t; + gnutls_datum_t secret; + + /* Get the previous TOTP */ + t = totp_previous(session); + if (t < 0) + return gnutls_assert_val(t); + + secret.data = session->key.initial_stek; + secret.size = TICKET_MASTER_KEY_SIZE; + + if (totp_sha3(session, t, &secret, key) < 0) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + return 0; +} + +/* + * _gnutls_get_session_ticket_encryption_key: + * @key_name: an empty datum that will receive the key name part of the STEK + * @mac_key: an empty datum that will receive the MAC key part of the STEK + * @enc_key: an empty datum that will receive the encryption key part of the STEK + * + * Get the currently active session ticket encryption key (STEK). + * + * The STEK is a 64-byte blob which is further divided in three parts, + * and this function requires the caller to supply three separate datums for each one. + * Though the caller might omit one or more of those if not interested in that part of the STEK. + * + * These are the three parts the STEK is divided in: + * + * - Key name: 16 bytes + * - Encryption key: 32 bytes + * - MAC key: 16 bytes + * + * This function will transparently rotate the key, if the time has come for that, + * before returning it to the caller. + */ +int _gnutls_get_session_ticket_encryption_key(gnutls_session_t session, + gnutls_datum_t *key_name, + gnutls_datum_t *mac_key, + gnutls_datum_t *enc_key) +{ + int retval; + + if (unlikely(session == NULL)) { + gnutls_assert(); + return GNUTLS_E_INTERNAL_ERROR; + } + + if ((retval = rotate(session)) < 0) + return gnutls_assert_val(retval); + + /* Copy key parts to user-supplied datums (if provided) */ + if (key_name) { + key_name->data = &session->key.session_ticket_key[NAME_POS]; + key_name->size = TICKET_KEY_NAME_SIZE; + } + if (mac_key) { + mac_key->data = &session->key.session_ticket_key[MAC_SECRET_POS]; + mac_key->size = TICKET_MAC_SECRET_SIZE; + } + if (enc_key) { + enc_key->data = &session->key.session_ticket_key[KEY_POS]; + enc_key->size = TICKET_CIPHER_KEY_SIZE; + } + + return retval; +} + +/* + * _gnutls_get_session_ticket_decryption_key: + * @ticket_data: the bytes of a session ticket that must be decrypted + * @key_name: an empty datum that will receive the key name part of the STEK + * @mac_key: an empty datum that will receive the MAC key part of the STEK + * @enc_key: an empty datum that will receive the encryption key part of the STEK + * + * Get the key (STEK) the given session ticket was encrypted with. + * + * As with its encryption counterpart (%_gnutls_get_session_ticket_encryption_key), + * this function will also transparently rotate + * the currently active STEK if time has come for that, and it also requires the different + * parts of the STEK to be obtained in different datums. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, or a negative error code, such as + * %GNUTLS_E_REQUSTED_DATA_NOT_AVAILABLE if no key could be found for the supplied ticket. + */ +int _gnutls_get_session_ticket_decryption_key(gnutls_session_t session, + const gnutls_datum_t *ticket_data, + gnutls_datum_t *key_name, + gnutls_datum_t *mac_key, + gnutls_datum_t *enc_key) +{ + int retval; + gnutls_datum_t key = { + .data = session->key.session_ticket_key, + .size = TICKET_MASTER_KEY_SIZE + }; + + if (unlikely(session == NULL || ticket_data == NULL || ticket_data->data == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + if (ticket_data->size < TICKET_KEY_NAME_SIZE) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + if ((retval = rotate(session)) < 0) + return gnutls_assert_val(retval); + + /* + * Is current key valid? + * We compare the first 16 bytes --> The key_name field. + */ + if (memcmp(ticket_data->data, + &key.data[NAME_POS], + TICKET_KEY_NAME_SIZE) == 0) + goto key_found; + + key.size = TICKET_MASTER_KEY_SIZE; + key.data = session->key.previous_ticket_key; + + /* + * Current key is not valid. + * Compute previous key and see if that matches. + */ + if ((retval = rotate_back_and_peek(session, key.data)) < 0) + return gnutls_assert_val(retval); + + if (memcmp(ticket_data->data, + &key.data[NAME_POS], + TICKET_KEY_NAME_SIZE) == 0) + goto key_found; + + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + +key_found: + if (key_name) { + key_name->data = &key.data[NAME_POS]; + key_name->size = TICKET_KEY_NAME_SIZE; + } + if (mac_key) { + mac_key->data = &key.data[MAC_SECRET_POS]; + mac_key->size = TICKET_MAC_SECRET_SIZE; + } + if (enc_key) { + enc_key->data = &key.data[KEY_POS]; + enc_key->size = TICKET_CIPHER_KEY_SIZE; + } + + return GNUTLS_E_SUCCESS; +} + +/* + * _gnutls_initialize_session_ticket_key_rotation: + * @key: Initial session ticket key + * + * Initialize the session ticket key rotation. + * + * This function will not enable session ticket keys on the server side. That is done + * with the gnutls_session_ticket_enable_server() function. This function just initializes + * the internal state to support periodical rotation of the session ticket encryption key. + * + * Returns: %GNUTLS_E_SUCCESS (0) on success, or %GNUTLS_E_INVALID_REQUEST on error. + */ +int _gnutls_initialize_session_ticket_key_rotation(gnutls_session_t session, const gnutls_datum_t *key) +{ + if (unlikely(session == NULL || key == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + if (session->key.totp.last_result == 0) { + int64_t t; + memcpy(session->key.initial_stek, key->data, key->size); + t = totp_next(session); + if (t < 0) + return gnutls_assert_val(t); + + session->key.totp.last_result = t; + session->key.totp.was_rotated = 0; + + return GNUTLS_E_SUCCESS; + } + + return GNUTLS_E_INVALID_REQUEST; +} + +/* + * _gnutls_set_session_ticket_key_rotation_callback: + * @cb: the callback function + * + * Set a callback function that will be invoked every time the session ticket key + * is rotated. + * + * The function will take as arguments the previous key, the new key and the time + * step value that caused the key to rotate. + * + */ +void _gnutls_set_session_ticket_key_rotation_callback(gnutls_session_t session, gnutls_stek_rotation_callback_t cb) +{ + if (session) + session->key.totp.cb = cb; +} diff --git a/lib/stek.h b/lib/stek.h new file mode 100644 index 0000000000..284e6cbdb9 --- /dev/null +++ b/lib/stek.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * Author: Ander Juaristi + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_STEK_H +#define GNUTLS_LIB_STEK_H + +#include "gnutls_int.h" + +int _gnutls_get_session_ticket_encryption_key(gnutls_session_t session, + gnutls_datum_t *key_name, + gnutls_datum_t *mac_key, + gnutls_datum_t *enc_key); +int _gnutls_get_session_ticket_decryption_key(gnutls_session_t session, + const gnutls_datum_t *ticket_data, + gnutls_datum_t *key_name, + gnutls_datum_t *mac_key, + gnutls_datum_t *enc_key); + +void _gnutls_set_session_ticket_key_rotation_callback(gnutls_session_t session, + gnutls_stek_rotation_callback_t cb); + +int _gnutls_initialize_session_ticket_key_rotation(gnutls_session_t session, + const gnutls_datum_t *key); + +#endif /* GNUTLS_LIB_STEK_H */ diff --git a/lib/str-iconv.c b/lib/str-iconv.c index 67f4d3ff35..7786dc8cfa 100644 --- a/lib/str-iconv.c +++ b/lib/str-iconv.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -66,7 +66,7 @@ int _gnutls_ucs2_to_utf8(const void *data, size_t size, { int ret; size_t dstlen; - uint8_t *src; + void *src; uint8_t *tmp_dst = NULL; uint8_t *dst = NULL; @@ -117,9 +117,8 @@ int _gnutls_ucs2_to_utf8(const void *data, size_t size, return ret; } -/* This is big-endian output only */ int _gnutls_utf8_to_ucs2(const void *data, size_t size, - gnutls_datum_t * output) + gnutls_datum_t * output, unsigned be) { int ret; size_t dstlen, nrm_size = 0, tmp_size = 0; @@ -150,7 +149,7 @@ int _gnutls_utf8_to_ucs2(const void *data, size_t size, } /* convert to BE */ - change_u16_endianness(dst, (uint8_t*)tmp_dst, dstlen, 1); + change_u16_endianness(dst, (uint8_t*)tmp_dst, dstlen, be); dst[dstlen] = 0; dst[dstlen+1] = 0; diff --git a/lib/str-idna.c b/lib/str-idna.c index 8a1dce980a..74b8d220b9 100644 --- a/lib/str-idna.c +++ b/lib/str-idna.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -30,12 +30,7 @@ # include -#if IDN2_VERSION_NUMBER < 0x02000000 -# define idn2_to_ascii_8z idn2_lookup_u8 -# define ICAST uint8_t -#else # define ICAST char -#endif /** * gnutls_idna_map: @@ -69,17 +64,19 @@ int gnutls_idna_map(const char *input, unsigned ilen, gnutls_datum_t *out, unsig unsigned int idn2_flags = IDN2_NFC_INPUT; unsigned int idn2_tflags = IDN2_NFC_INPUT; -#if IDN2_VERSION_NUMBER >= 0x00140000 /* IDN2_NONTRANSITIONAL automatically converts to lowercase * IDN2_NFC_INPUT converts to NFC before toASCII conversion * - * Since IDN2_NONTRANSITIONAL implicitely does NFC conversion, we don't need + * Since IDN2_NONTRANSITIONAL implicitly does NFC conversion, we don't need * the additional IDN2_NFC_INPUT. But just for the unlikely case that the linked * library is not matching the headers when building and it doesn't support TR46, - * we provide IDN2_NFC_INPUT. */ - idn2_flags |= IDN2_NONTRANSITIONAL; - idn2_tflags |= IDN2_TRANSITIONAL; -#endif + * we provide IDN2_NFC_INPUT. + * + * Without IDN2_USE_STD3_ASCII_RULES, the result could contain any ASCII characters, + * e.g. 'evil.c\u2100.example.com' will be converted into + * 'evil.ca/c.example.com', which seems no good idea. */ + idn2_flags |= IDN2_NONTRANSITIONAL | IDN2_USE_STD3_ASCII_RULES; + idn2_tflags |= IDN2_TRANSITIONAL | IDN2_USE_STD3_ASCII_RULES; if (ilen == 0) { out->data = (uint8_t*)gnutls_strdup(""); @@ -126,73 +123,6 @@ int gnutls_idna_map(const char *input, unsigned ilen, gnutls_datum_t *out, unsig return ret; } -#if IDN2_VERSION_NUMBER < 0x02000000 -int _idn2_punycode_decode( - size_t input_length, - const char input[], - size_t *output_length, - uint32_t output[], - unsigned char case_flags[]); - -static int idn2_to_unicode_8z8z(const char *src, char **dst, unsigned flags) -{ - int rc, run; - size_t out_len = 0; - const char *e, *s; - char *p = NULL; - - for (run = 0; run < 2; run++) { - if (run) { - p = malloc(out_len + 1); - if (!p) - return IDN2_MALLOC; - *dst = p; - } - - out_len = 0; - for (e = s = src; *e; s = e) { - while (*e && *e != '.') - e++; - - if (e - s > 4 && (s[0] == 'x' || s[0] == 'X') && (s[1] == 'n' || s[1] == 'N') && s[2] == '-' && s[3] == '-') { - size_t u32len = IDN2_LABEL_MAX_LENGTH * 4; - uint32_t u32[IDN2_LABEL_MAX_LENGTH * 4]; - uint8_t u8[IDN2_LABEL_MAX_LENGTH + 1]; - size_t u8len; - - rc = _idn2_punycode_decode(e - s - 4, s + 4, &u32len, u32, NULL); - if (rc != IDN2_OK) - return rc; - - u8len = sizeof(u8); - if (u32_to_u8(u32, u32len, u8, &u8len) == NULL) - return IDN2_ENCODING_ERROR; - u8[u8len] = '\0'; - - if (run) - memcpy(*dst + out_len, u8, u8len); - out_len += u8len; - } else { - if (run) - memcpy(*dst + out_len, s, e - s); - out_len += e - s; - } - - if (*e) { - e++; - if (run) - (*dst)[out_len] = '.'; - out_len++; - } - } - } - - (*dst)[out_len] = 0; - - return IDN2_OK; -} -#endif - /** * gnutls_idna_reverse_map: * @input: contain the ACE (IDNA) formatted domain name diff --git a/lib/str-unicode.c b/lib/str-unicode.c index 8bbaa99ba6..d66710a5f2 100644 --- a/lib/str-unicode.c +++ b/lib/str-unicode.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -123,7 +123,7 @@ static int check_for_valid_freeformclass(uint32_t *ucs4, unsigned ucs4_size) /* Disallowed o Old Hangul Jamo characters, i.e., the OldHangulJamo ("I") category - [FIXME: not handled in this code] + (not handled in this code) o Control characters, i.e., the Controls ("L") category diff --git a/lib/str.c b/lib/str.c index 673caa9e7d..e31449937d 100644 --- a/lib/str.c +++ b/lib/str.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2002-2012 Free Software Foundation, Inc. + * Copyright (C) 2016-2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -28,7 +29,6 @@ #include #include #include -#include "vasprintf.h" #include "extras/hex.h" /* These functions are like strcat, strcpy. They only @@ -67,20 +67,6 @@ void _gnutls_str_cpy(char *dest, size_t dest_tot_size, const char *src) } } -void -_gnutls_mem_cpy(char *dest, size_t dest_tot_size, const char *src, - size_t src_size) -{ - - if (dest_tot_size >= src_size) { - memcpy(dest, src, src_size); - } else { - if (dest_tot_size > 0) { - memcpy(dest, src, dest_tot_size); - } - } -} - void _gnutls_buffer_init(gnutls_buffer_st * str) { str->data = str->allocd = NULL; @@ -88,21 +74,13 @@ void _gnutls_buffer_init(gnutls_buffer_st * str) str->length = 0; } -void _gnutls_buffer_replace_data(gnutls_buffer_st * buf, - gnutls_datum_t * data) -{ - gnutls_free(buf->allocd); - buf->allocd = buf->data = data->data; - buf->max_length = buf->length = data->size; -} - void _gnutls_buffer_clear(gnutls_buffer_st * str) { if (str == NULL || str->allocd == NULL) return; gnutls_free(str->allocd); - str->data = str->allocd = NULL; + str->data = NULL; str->max_length = 0; str->length = 0; } @@ -112,6 +90,7 @@ void _gnutls_buffer_clear(gnutls_buffer_st * str) static void align_allocd_with_data(gnutls_buffer_st * dest) { assert(dest->allocd != NULL); + assert(dest->data != NULL); if (dest->length) memmove(dest->allocd, dest->data, dest->length); dest->data = dest->allocd; @@ -136,6 +115,9 @@ gnutls_buffer_append_data(gnutls_buffer_t dest, const void *data, size_t const tot_len = data_size + dest->length; size_t const unused = MEMSUB(dest->data, dest->allocd); + if (unlikely(dest->data != NULL && dest->allocd == NULL)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (data_size == 0) return 0; @@ -164,6 +146,7 @@ gnutls_buffer_append_data(gnutls_buffer_t dest, const void *data, align_allocd_with_data(dest); } + assert(dest->data != NULL); memcpy(&dest->data[dest->length], data, data_size); dest->length = tot_len; @@ -173,6 +156,9 @@ gnutls_buffer_append_data(gnutls_buffer_t dest, const void *data, int _gnutls_buffer_resize(gnutls_buffer_st * dest, size_t new_size) { + if (unlikely(dest->data != NULL && dest->allocd == NULL)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (dest->max_length >= new_size) { size_t unused = MEMSUB(dest->data, dest->allocd); if (dest->max_length - unused <= new_size) { @@ -222,7 +208,6 @@ void _gnutls_buffer_pop_datum(gnutls_buffer_st * str, gnutls_datum_t * data, size_t req_size) { - if (str->length == 0) { data->data = NULL; data->size = 0; @@ -238,7 +223,7 @@ _gnutls_buffer_pop_datum(gnutls_buffer_st * str, gnutls_datum_t * data, str->data += req_size; str->length -= req_size; - /* if string becomes empty start from begining */ + /* if string becomes empty start from beginning */ if (str->length == 0) { str->data = str->allocd; } @@ -246,7 +231,7 @@ _gnutls_buffer_pop_datum(gnutls_buffer_st * str, gnutls_datum_t * data, return; } -/* converts the buffer to a datum if possible. After this call +/* converts the buffer to a datum if possible. After this call * (failed or not) the buffer should be considered deinitialized. */ int _gnutls_buffer_to_datum(gnutls_buffer_st * str, gnutls_datum_t * data, unsigned is_str) @@ -294,24 +279,23 @@ int _gnutls_buffer_to_datum(gnutls_buffer_st * str, gnutls_datum_t * data, unsig return ret; } -/* returns data from a string in a constant buffer. +/* returns data from a string in a constant buffer. Will + * fail with GNUTLS_E_PARSING_ERROR, if the string has not enough data. */ -void +int _gnutls_buffer_pop_data(gnutls_buffer_st * str, void *data, - size_t * req_size) + size_t req_size) { gnutls_datum_t tdata; - _gnutls_buffer_pop_datum(str, &tdata, *req_size); - if (tdata.data == NULL) { - *req_size = 0; - return; + _gnutls_buffer_pop_datum(str, &tdata, req_size); + if (tdata.data == NULL || tdata.size != req_size) { + return GNUTLS_E_PARSING_ERROR; } - *req_size = tdata.size; memcpy(data, tdata.data, tdata.size); - return; + return 0; } int @@ -415,20 +399,17 @@ int _gnutls_buffer_unescape(gnutls_buffer_st * dest) while (pos < dest->length) { if (dest->data[pos] == '%') { - char b[3]; - unsigned int u; - unsigned char x; - - b[0] = dest->data[pos + 1]; - b[1] = dest->data[pos + 2]; - b[2] = 0; + if (pos + 1 < dest->length && dest->data[pos + 1] == '%') { + // %% -> % + _gnutls_buffer_delete_data(dest, pos, 1); + } else if (pos + 2 < dest->length && c_isxdigit(dest->data[pos + 1]) && c_isxdigit(dest->data[pos + 2])) { + unsigned char x; - sscanf(b, "%02x", &u); + hex_decode((char *) dest->data + pos + 1, 2, &x, 1); - x = u; - - _gnutls_buffer_delete_data(dest, pos, 3); - _gnutls_buffer_insert_data(dest, pos, &x, 1); + _gnutls_buffer_delete_data(dest, pos, 3); + _gnutls_buffer_insert_data(dest, pos, &x, 1); + } } pos++; } @@ -672,7 +653,7 @@ gnutls_hex_encode2(const gnutls_datum_t * data, gnutls_datum_t *result) return GNUTLS_E_MEMORY_ERROR; } - ret = hex_encode((char*)data->data, data->size, (char*)result->data, size); + ret = hex_encode((char*)data->data, data->size, (char*)result->data, size); if (ret == 0) { gnutls_free(result->data); return gnutls_assert_val(GNUTLS_E_PARSING_ERROR); @@ -788,8 +769,8 @@ _gnutls_buffer_append_prefix(gnutls_buffer_st * buf, int pfx_size, * the number read, is less than the data in the buffer */ int -_gnutls_buffer_pop_prefix(gnutls_buffer_st * buf, size_t * data_size, - int check) +_gnutls_buffer_pop_prefix32(gnutls_buffer_st * buf, size_t * data_size, + int check) { size_t size; @@ -812,14 +793,59 @@ _gnutls_buffer_pop_prefix(gnutls_buffer_st * buf, size_t * data_size, return 0; } +int _gnutls_buffer_pop_prefix8(gnutls_buffer_st *buf, uint8_t *data, int check) +{ + if (buf->length < 1) { + gnutls_assert(); + return GNUTLS_E_PARSING_ERROR; + } + + *data = buf->data[0]; + + if (check && *data > buf->length - 1) { + gnutls_assert(); + return GNUTLS_E_PARSING_ERROR; + } + + buf->data++; + buf->length--; + + return 0; +} + +int +_gnutls_buffer_pop_prefix24(gnutls_buffer_st * buf, size_t * data_size, + int check) +{ + size_t size; + + if (buf->length < 3) { + gnutls_assert(); + return GNUTLS_E_PARSING_ERROR; + } + + size = _gnutls_read_uint24(buf->data); + if (check && size > buf->length - 3) { + gnutls_assert(); + return GNUTLS_E_PARSING_ERROR; + } + + buf->data += 3; + buf->length -= 3; + + *data_size = size; + + return 0; +} + int -_gnutls_buffer_pop_datum_prefix(gnutls_buffer_st * buf, - gnutls_datum_t * data) +_gnutls_buffer_pop_datum_prefix32(gnutls_buffer_st * buf, + gnutls_datum_t * data) { size_t size; int ret; - ret = _gnutls_buffer_pop_prefix(buf, &size, 1); + ret = _gnutls_buffer_pop_prefix32(buf, &size, 1); if (ret < 0) { gnutls_assert(); return ret; @@ -840,25 +866,86 @@ _gnutls_buffer_pop_datum_prefix(gnutls_buffer_st * buf, return 0; } +int +_gnutls_buffer_pop_datum_prefix16(gnutls_buffer_st * buf, + gnutls_datum_t * data) +{ + size_t size; + + if (buf->length < 2) { + gnutls_assert(); + return GNUTLS_E_PARSING_ERROR; + } + + size = _gnutls_read_uint16(buf->data); + + buf->data += 2; + buf->length -= 2; + + if (size > 0) { + size_t osize = size; + _gnutls_buffer_pop_datum(buf, data, size); + if (osize != data->size) { + gnutls_assert(); + return GNUTLS_E_PARSING_ERROR; + } + } else { + data->size = 0; + data->data = NULL; + } + + return 0; +} + +int +_gnutls_buffer_pop_datum_prefix8(gnutls_buffer_st * buf, + gnutls_datum_t * data) +{ + size_t size; + + if (buf->length < 1) { + gnutls_assert(); + return GNUTLS_E_PARSING_ERROR; + } + + size = buf->data[0]; + + buf->data++; + buf->length--; + + if (size > 0) { + size_t osize = size; + _gnutls_buffer_pop_datum(buf, data, size); + if (osize != data->size) { + gnutls_assert(); + return GNUTLS_E_PARSING_ERROR; + } + } else { + data->size = 0; + data->data = NULL; + } + + return 0; +} + int _gnutls_buffer_append_data_prefix(gnutls_buffer_st * buf, int pfx_size, const void *data, size_t data_size) { - int ret = 0, ret1; + int ret; - ret1 = _gnutls_buffer_append_prefix(buf, pfx_size, data_size); - if (ret1 < 0) - return gnutls_assert_val(ret1); + ret = _gnutls_buffer_append_prefix(buf, pfx_size, data_size); + if (ret < 0) + return gnutls_assert_val(ret); if (data_size > 0) { ret = _gnutls_buffer_append_data(buf, data, data_size); - if (ret < 0) return gnutls_assert_val(ret); } - return ret + ret1; + return 0; } int _gnutls_buffer_append_mpi(gnutls_buffer_st * buf, int pfx_size, @@ -884,23 +971,40 @@ int _gnutls_buffer_append_mpi(gnutls_buffer_st * buf, int pfx_size, return ret; } -int -_gnutls_buffer_pop_data_prefix(gnutls_buffer_st * buf, void *data, - size_t * data_size) +/* Appends an MPI of fixed-size in bytes left-padded with zeros if necessary */ +int _gnutls_buffer_append_fixed_mpi(gnutls_buffer_st * buf, + bigint_t mpi, unsigned size) { - size_t size; + gnutls_datum_t dd; + unsigned pad, i; int ret; - ret = _gnutls_buffer_pop_prefix(buf, &size, 1); - if (ret < 0) { - gnutls_assert(); - return ret; + ret = _gnutls_mpi_dprint(mpi, &dd); + if (ret < 0) + return gnutls_assert_val(ret); + + if (size < dd.size) { + ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + goto cleanup; } - if (size > 0) - _gnutls_buffer_pop_data(buf, data, data_size); + pad = size - dd.size; + for (i=0;idata[str->length], len, data); + base64_encode_raw((void*)&str->data[str->length], len, data); str->length += b64len; str->data[str->length] = 0; diff --git a/lib/str.h b/lib/str.h index e5af223f16..65d42081e8 100644 --- a/lib/str.h +++ b/lib/str.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2000-2012 Free Software Foundation, Inc. + * Copyright (C) 2016-2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,12 +17,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_STR_H -#define GNUTLS_STR_H +#ifndef GNUTLS_LIB_STR_H +#define GNUTLS_LIB_STR_H #include #include "gnutls_int.h" @@ -59,9 +60,24 @@ inline static unsigned _gnutls_str_is_print(const char *str, unsigned size) return 1; } +inline static unsigned _gnutls_dnsname_is_valid(const char *str, unsigned size) +{ + unsigned i; + for (i=0;i -void _gnutls_buffer_replace_data(gnutls_buffer_st * buf, - gnutls_datum_t * data); - int _gnutls_buffer_append_prefix(gnutls_buffer_st * buf, int pfx_size, size_t data_size); int _gnutls_buffer_append_mpi(gnutls_buffer_st * buf, int pfx_size, bigint_t, int lz); +int _gnutls_buffer_append_fixed_mpi(gnutls_buffer_st * buf, + bigint_t mpi, unsigned size); + int _gnutls_buffer_append_data_prefix(gnutls_buffer_st * buf, int pfx_size, const void *data, size_t data_size); -void _gnutls_buffer_pop_data(gnutls_buffer_st *, void *, size_t * size); +int _gnutls_buffer_pop_data(gnutls_buffer_st *, void *, size_t size); void _gnutls_buffer_pop_datum(gnutls_buffer_st *, gnutls_datum_t *, size_t max_size); -int _gnutls_buffer_pop_prefix(gnutls_buffer_st * buf, size_t * data_size, - int check); +int _gnutls_buffer_pop_prefix8(gnutls_buffer_st *, uint8_t *, int check); -int _gnutls_buffer_pop_data_prefix(gnutls_buffer_st * buf, void *data, - size_t * data_size); +/* 32-bit prefix */ +int _gnutls_buffer_pop_prefix32(gnutls_buffer_st * buf, size_t * data_size, + int check); + +int _gnutls_buffer_pop_prefix24(gnutls_buffer_st * buf, size_t * data_size, + int check); + +/* 32-bit prefix */ +int _gnutls_buffer_pop_datum_prefix32(gnutls_buffer_st * buf, + gnutls_datum_t * data); + +/* 16-bit prefix */ +int _gnutls_buffer_pop_datum_prefix16(gnutls_buffer_st * buf, + gnutls_datum_t * data); + +/* 8-bit prefix */ +int _gnutls_buffer_pop_datum_prefix8(gnutls_buffer_st * buf, + gnutls_datum_t * data); -int _gnutls_buffer_pop_datum_prefix(gnutls_buffer_st * buf, - gnutls_datum_t * data); int _gnutls_buffer_to_datum(gnutls_buffer_st * str, gnutls_datum_t * data, unsigned is_str); +inline static +void _gnutls_ro_buffer_from_datum(gnutls_buffer_st * str, gnutls_datum_t * data) +{ + _gnutls_buffer_init(str); + str->length = data->size; + str->max_length = data->size; + str->data = data->data; +} + int _gnutls_buffer_append_escape(gnutls_buffer_st * dest, const void *data, size_t data_size, const char *invalid_chars); @@ -202,10 +240,27 @@ int _gnutls_hostname_compare(const char *certname, size_t certnamesize, } \ } +#define BUFFER_APPEND_TS(b, s) { \ + ret = _gnutls_buffer_append_prefix(b, 32, (uint64_t) s.tv_sec >> 32); \ + if (ret < 0) { \ + gnutls_assert(); \ + return ret; \ + } \ + ret = _gnutls_buffer_append_prefix(b, 32, s.tv_sec & 0xFFFFFFFF); \ + if (ret < 0) { \ + gnutls_assert(); \ + return ret; \ + } \ + ret = _gnutls_buffer_append_prefix(b, 32, s.tv_nsec); \ + if (ret < 0) { \ + gnutls_assert(); \ + return ret; \ + } \ + } + #define BUFFER_POP(b, x, s) { \ - size_t is = s; \ - _gnutls_buffer_pop_data(b, x, &is); \ - if (is != s) { \ + ret = _gnutls_buffer_pop_data(b, x, s); \ + if (ret < 0) { \ ret = GNUTLS_E_PARSING_ERROR; \ gnutls_assert(); \ goto error; \ @@ -214,7 +269,7 @@ int _gnutls_hostname_compare(const char *certname, size_t certnamesize, #define BUFFER_POP_DATUM(b, o) { \ gnutls_datum_t d; \ - ret = _gnutls_buffer_pop_datum_prefix(b, &d); \ + ret = _gnutls_buffer_pop_datum_prefix32(b, &d); \ if (ret >= 0) \ ret = _gnutls_set_datum (o, d.data, d.size); \ if (ret < 0) { \ @@ -225,7 +280,7 @@ int _gnutls_hostname_compare(const char *certname, size_t certnamesize, #define BUFFER_POP_NUM(b, o) { \ size_t s; \ - ret = _gnutls_buffer_pop_prefix(b, &s, 0); \ + ret = _gnutls_buffer_pop_prefix32(b, &s, 0); \ if (ret < 0) { \ gnutls_assert(); \ goto error; \ @@ -235,7 +290,7 @@ int _gnutls_hostname_compare(const char *certname, size_t certnamesize, #define BUFFER_POP_CAST_NUM(b, o) { \ size_t s; \ - ret = _gnutls_buffer_pop_prefix(b, &s, 0); \ + ret = _gnutls_buffer_pop_prefix32(b, &s, 0); \ if (ret < 0) { \ gnutls_assert(); \ goto error; \ @@ -243,4 +298,28 @@ int _gnutls_hostname_compare(const char *certname, size_t certnamesize, o = (void *) (intptr_t)(s); \ } -#endif +#define BUFFER_POP_TS(b, o) { \ + size_t s; \ + uint64_t v; \ + ret = _gnutls_buffer_pop_prefix32(b, &s, 0); \ + if (ret < 0) { \ + gnutls_assert(); \ + goto error; \ + } \ + v = s; \ + ret = _gnutls_buffer_pop_prefix32(b, &s, 0); \ + if (ret < 0) { \ + gnutls_assert(); \ + goto error; \ + } \ + v = (v << 32) | s; \ + ret = _gnutls_buffer_pop_prefix32(b, &s, 0); \ + if (ret < 0) { \ + gnutls_assert(); \ + goto error; \ + } \ + o.tv_sec = v; \ + o.tv_nsec = s; \ + } + +#endif /* GNUTLS_LIB_STR_H */ diff --git a/lib/str_array.h b/lib/str_array.h index ef68783905..2a787233b8 100644 --- a/lib/str_array.h +++ b/lib/str_array.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_STR_ARRAY_H -#define GNUTLS_STR_ARRAY_H +#ifndef GNUTLS_LIB_STR_ARRAY_H +#define GNUTLS_LIB_STR_ARRAY_H #include "gnutls_int.h" #include "errors.h" @@ -112,4 +112,24 @@ inline static int _gnutls_str_array_append(gnutls_str_array_t * head, return 0; } -#endif +inline static int _gnutls_str_array_append_idna(gnutls_str_array_t * head, + const char *name, size_t size) +{ + int ret; + gnutls_datum_t ahost; + + /* convert the provided hostname to ACE-Labels domain. */ + ret = gnutls_idna_map(name, size, &ahost, 0); + if (ret < 0) { + _gnutls_debug_log("unable to convert hostname %s to IDNA format\n", name); + /* insert the raw name */ + return _gnutls_str_array_append(head, name, size); + } + + ret = _gnutls_str_array_append(head, (char*)ahost.data, ahost.size); + gnutls_free(ahost.data); + + return ret; +} + +#endif /* GNUTLS_LIB_STR_ARRAY_H */ diff --git a/lib/supplemental.c b/lib/supplemental.c index 3ef29f7c5a..07b38cc938 100644 --- a/lib/supplemental.c +++ b/lib/supplemental.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -153,6 +153,7 @@ _gnutls_gen_supplemental(gnutls_session_t session, gnutls_buffer_st * buf) { size_t i; int ret; + unsigned init_pos = buf->length; /* Make room for 3 byte length field. */ ret = _gnutls_buffer_append_data(buf, "\0\0\0", 3); @@ -173,15 +174,17 @@ _gnutls_gen_supplemental(gnutls_session_t session, gnutls_buffer_st * buf) return gnutls_assert_val(ret); } - buf->data[0] = ((buf->length - 3) >> 16) & 0xFF; - buf->data[1] = ((buf->length - 3) >> 8) & 0xFF; - buf->data[2] = (buf->length - 3) & 0xFF; + i = buf->length - init_pos - 3; + + buf->data[init_pos] = (i >> 16) & 0xFF; + buf->data[init_pos+1] = (i >> 8) & 0xFF; + buf->data[init_pos+2] = i & 0xFF; _gnutls_debug_log ("EXT[%p]: Sending %d bytes of supplemental data\n", session, (int) buf->length); - return buf->length; + return buf->length - init_pos; } int @@ -189,14 +192,14 @@ _gnutls_parse_supplemental(gnutls_session_t session, const uint8_t * data, int datalen) { const uint8_t *p = data; - ssize_t dsize = datalen; + size_t dsize = datalen; size_t total_size; DECR_LEN(dsize, 3); total_size = _gnutls_read_uint24(p); p += 3; - if (dsize != (ssize_t) total_size) { + if (dsize != total_size) { gnutls_assert(); return GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; } @@ -279,7 +282,8 @@ _gnutls_supplemental_register(gnutls_supplemental_entry_st *entry) * registered or handled by GnuTLS internally %GNUTLS_E_ALREADY_REGISTERED * will be returned. * - * This function is not thread safe. + * This function is not thread safe. As supplemental data are not defined under + * TLS 1.3, this function will disable TLS 1.3 support globally. * * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. * @@ -301,6 +305,9 @@ gnutls_supplemental_register(const char *name, gnutls_supplemental_data_format_t if (ret < 0) { gnutls_free(tmp_entry.name); } + + _gnutls_disable_tls13 = 1; + return ret; } @@ -321,6 +328,9 @@ gnutls_supplemental_register(const char *name, gnutls_supplemental_data_format_t * If the type is already registered or handled by GnuTLS internally * %GNUTLS_E_ALREADY_REGISTERED will be returned. * + * As supplemental data are not defined under TLS 1.3, this function will + * disable TLS 1.3 support for the given session. + * * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. * * Since: 3.5.5 @@ -356,6 +366,8 @@ gnutls_session_supplemental_register(gnutls_session_t session, const char *name, memcpy(&session->internals.rsup[session->internals.rsup_size], &tmp_entry, sizeof(tmp_entry)); session->internals.rsup_size++; + session->internals.flags |= INT_FLAG_NO_TLS13; + return GNUTLS_E_SUCCESS; } diff --git a/lib/supplemental.h b/lib/supplemental.h index e9ffd55c26..446d70927a 100644 --- a/lib/supplemental.h +++ b/lib/supplemental.h @@ -16,10 +16,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_SUPPLEMENTAL_H +#define GNUTLS_LIB_SUPPLEMENTAL_H + #include "gnutls_int.h" int _gnutls_parse_supplemental(gnutls_session_t session, @@ -28,3 +31,5 @@ int _gnutls_gen_supplemental(gnutls_session_t session, gnutls_buffer_st * buf); void _gnutls_supplemental_deinit(void); + +#endif /* GNUTLS_LIB_SUPPLEMENTAL_H */ diff --git a/lib/system-keys.h b/lib/system-keys.h index bc755e4c5b..ad3c411ca6 100644 --- a/lib/system-keys.h +++ b/lib/system-keys.h @@ -14,12 +14,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef SYSTEM_KEYS_H -# define SYSTEM_KEYS_H +#ifndef GNUTLS_LIB_SYSTEM_KEYS_H +#define GNUTLS_LIB_SYSTEM_KEYS_H #ifdef _WIN32 # define _gnutls_system_url_is_supported(x) 1 @@ -37,4 +37,4 @@ _gnutls_privkey_import_system_url(gnutls_privkey_t pkey, void _gnutls_system_key_deinit(void); int _gnutls_system_key_init(void); -#endif +#endif /* GNUTLS_LIB_SYSTEM_KEYS_H */ diff --git a/lib/system.c b/lib/system.c index 1a17974d58..f01669dff8 100644 --- a/lib/system.c +++ b/lib/system.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -44,13 +44,33 @@ static HMODULE Crypt32_dll; /* System specific function wrappers for certificate stores. */ gnutls_time_func gnutls_time; +gnutls_gettime_func gnutls_gettime; + +/* emulate gnulib's gettime using gettimeofday to avoid linking to + * librt */ +static void _gnutls_gettime(struct timespec *t) +{ +#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_REALTIME) + clock_gettime(CLOCK_REALTIME, t); +#else + struct timeval tv; + gettimeofday(&tv, NULL); + t->tv_sec = tv.tv_sec; + t->tv_nsec = tv.tv_usec * 1000; +#endif +} + +void _gnutls_global_set_gettime_function(gnutls_gettime_func gettime_func) +{ + gnutls_gettime = gettime_func; +} int gnutls_system_global_init(void) { #if defined(_WIN32) && defined(NEED_CERT_ENUM_CRLS) /* used in system/certs.c */ HMODULE crypto; - crypto = LoadLibraryA("Crypt32.dll"); + crypto = LoadLibrary(TEXT("Crypt32.dll")); if (crypto == NULL) return GNUTLS_E_CRYPTO_INIT_FAILED; @@ -66,6 +86,7 @@ int gnutls_system_global_init(void) Crypt32_dll = crypto; #endif gnutls_time = time; + gnutls_gettime = _gnutls_gettime; return 0; } @@ -75,6 +96,7 @@ void gnutls_system_global_deinit(void) FreeLibrary(Crypt32_dll); #endif gnutls_time = time; + gnutls_gettime = _gnutls_gettime; } diff --git a/lib/system.h b/lib/system.h index 0ae3c63b17..b7b964fe11 100644 --- a/lib/system.h +++ b/lib/system.h @@ -17,12 +17,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef SYSTEM_H -#define SYSTEM_H +#ifndef GNUTLS_LIB_SYSTEM_H +#define GNUTLS_LIB_SYSTEM_H #include "gnutls_int.h" #include @@ -77,7 +77,10 @@ ssize_t system_read(gnutls_transport_ptr_t ptr, void *data, # define HAVE_NO_LOCKS #endif +typedef void (*gnutls_gettime_func) (struct timespec *); + extern gnutls_time_func gnutls_time; +extern gnutls_gettime_func gnutls_gettime; static inline void millisleep(unsigned int ms) { @@ -93,51 +96,15 @@ static inline void millisleep(unsigned int ms) #endif } -/* emulate gnulib's gettime using gettimeofday to avoid linking to - * librt */ -inline static void gettime(struct timespec *t) -{ -#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_REALTIME) - clock_gettime(CLOCK_REALTIME, t); -#else - struct timeval tv; - gettimeofday(&tv, NULL); - t->tv_sec = tv.tv_sec; - t->tv_nsec = tv.tv_usec * 1000; -#endif -} - int _gnutls_find_config_path(char *path, size_t max_size); int _gnutls_ucs2_to_utf8(const void *data, size_t size, gnutls_datum_t * output, unsigned bigendian); int _gnutls_utf8_to_ucs2(const void *data, size_t size, - gnutls_datum_t * output); + gnutls_datum_t * output, unsigned be); + +void _gnutls_global_set_gettime_function(gnutls_gettime_func gettime_func); int gnutls_system_global_init(void); void gnutls_system_global_deinit(void); -#ifndef _WIN32 -# if defined(HAVE_NETINET_IN_H) -# include -# endif -# include -#else -# undef inet_aton -# define inet_aton _gnutls_inet_aton -int inet_aton(const char *cp, struct in_addr *inp); -#endif - -#ifndef HAVE_INET_PTON -# undef inet_pton -# define inet_pton _gnutls_inet_pton -int inet_pton(int af, const char *src, void *dst); -#endif - -#ifndef HAVE_INET_NTOP -# undef inet_ntop -# define inet_ntop _gnutls_inet_ntop -const char *inet_ntop(int af, const void *src, - char *dst, unsigned size); -#endif - -#endif /* SYSTEM_H */ +#endif /* GNUTLS_LIB_SYSTEM_H */ diff --git a/lib/system/certs.c b/lib/system/certs.c index 53eb561d00..611c645e05 100644 --- a/lib/system/certs.c +++ b/lib/system/certs.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -161,9 +161,9 @@ int add_system_trust(gnutls_x509_trust_list_t list, unsigned int tl_flags, gnutls_datum_t data; if (i == 0) - store = CertOpenSystemStore(0, "ROOT"); + store = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER , L"ROOT"); else - store = CertOpenSystemStore(0, "CA"); + store = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER, L"CA"); if (store == NULL) return GNUTLS_E_FILE_ERROR; diff --git a/lib/system/fastopen.c b/lib/system/fastopen.c index 18e82ee446..8d8409e482 100644 --- a/lib/system/fastopen.c +++ b/lib/system/fastopen.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -26,6 +26,7 @@ #include "errors.h" #include +#include /* IPPROTO_TCP */ #include #include #include @@ -83,7 +84,7 @@ tfo_writev(gnutls_transport_ptr_t ptr, const giovec_t * iovec, int iovec_cnt) tfo_st *p = ptr; int fd = p->fd; struct msghdr hdr; - int ret, on = 1; + int ret; memset(&hdr, 0, sizeof(hdr)); hdr.msg_iov = (struct iovec *)iovec; @@ -94,6 +95,8 @@ tfo_writev(gnutls_transport_ptr_t ptr, const giovec_t * iovec, int iovec_cnt) # if defined(TCP_FASTOPEN_LINUX) if (!p->connect_only) { + int on = 1; + if (setsockopt(fd, IPPROTO_TCP, TCP_FASTOPEN, &on, sizeof(on)) == -1) _gnutls_debug_log("Failed to set socket option FASTOPEN\n"); diff --git a/lib/system/inet_ntop.c b/lib/system/inet_ntop.c deleted file mode 100644 index 87760ebf11..0000000000 --- a/lib/system/inet_ntop.c +++ /dev/null @@ -1,250 +0,0 @@ -/* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form - - Copyright (C) 2005-2006, 2008-2015 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* - * Copyright (c) 1996-1999 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -#include - -#ifndef HAVE_INET_NTOP - -# include -# include -# include -# include -# include "system.h" - -# ifndef IF_LINT -# define IF_LINT -#endif - -# ifndef HAVE_IPV6 -# define HAVE_IPV6 1 -# endif - -# ifndef HAVE_IPV4 -# define HAVE_IPV4 1 -# endif - -# define NS_IN6ADDRSZ 16 -# define NS_INT16SZ 2 - -/* - * WARNING: Don't even consider trying to compile this on a system where - * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. - */ -typedef int verify_int_size[4 <= sizeof (int) ? 1 : -1]; - -static const char *inet_ntop4 (const unsigned char *src, char *dst, unsigned size); -# if HAVE_IPV6 -static const char *inet_ntop6 (const unsigned char *src, char *dst, unsigned size); -# endif - - -/* char * - * inet_ntop(af, src, dst, size) - * convert a network format address to presentation format. - * return: - * pointer to presentation format address ('dst'), or NULL (see errno). - * author: - * Paul Vixie, 1996. - */ -const char * -inet_ntop (int af, const void *restrict src, - char *restrict dst, unsigned cnt) -{ - switch (af) - { -# if HAVE_IPV4 - case AF_INET: - return (inet_ntop4 (src, dst, cnt)); -# endif - -# if HAVE_IPV6 - case AF_INET6: - return (inet_ntop6 (src, dst, cnt)); -# endif - - default: - errno = EAFNOSUPPORT; - return (NULL); - } - /* NOTREACHED */ -} - -/* const char * - * inet_ntop4(src, dst, size) - * format an IPv4 address - * return: - * 'dst' (as a const) - * notes: - * (1) uses no statics - * (2) takes a u_char* not an in_addr as input - * author: - * Paul Vixie, 1996. - */ -static const char * -inet_ntop4 (const unsigned char *src, char *dst, unsigned size) -{ - char tmp[sizeof "255.255.255.255"]; - int len; - - len = sprintf (tmp, "%u.%u.%u.%u", src[0], src[1], src[2], src[3]); - if (len < 0) - return NULL; - - if ((unsigned)len > size) - { - errno = ENOSPC; - return NULL; - } - - return strcpy (dst, tmp); -} - -# if HAVE_IPV6 - -/* const char * - * inet_ntop6(src, dst, size) - * convert IPv6 binary address into presentation (printable) format - * author: - * Paul Vixie, 1996. - */ -static const char * -inet_ntop6 (const unsigned char *src, char *dst, unsigned size) -{ - /* - * Note that int32_t and int16_t need only be "at least" large enough - * to contain a value of the specified size. On some systems, like - * Crays, there is no such thing as an integer variable with 16 bits. - * Keep this in mind if you think this function should have been coded - * to use pointer overlays. All the world's not a VAX. - */ - char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp; - struct - { - int base, len; - } best, cur; - unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ]; - int i; - - /* - * Preprocess: - * Copy the input (bytewise) array into a wordwise array. - * Find the longest run of 0x00's in src[] for :: shorthanding. - */ - memset (words, '\0', sizeof words); - for (i = 0; i < NS_IN6ADDRSZ; i += 2) - words[i / 2] = (src[i] << 8) | src[i + 1]; - best.base = -1; - cur.base = -1; - IF_LINT(best.len = 0); - IF_LINT(cur.len = 0); - for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) - { - if (words[i] == 0) - { - if (cur.base == -1) - cur.base = i, cur.len = 1; - else - cur.len++; - } - else - { - if (cur.base != -1) - { - if (best.base == -1 || cur.len > best.len) - best = cur; - cur.base = -1; - } - } - } - if (cur.base != -1) - { - if (best.base == -1 || cur.len > best.len) - best = cur; - } - if (best.base != -1 && best.len < 2) - best.base = -1; - - /* - * Format the result. - */ - tp = tmp; - for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) - { - /* Are we inside the best run of 0x00's? */ - if (best.base != -1 && i >= best.base && i < (best.base + best.len)) - { - if (i == best.base) - *tp++ = ':'; - continue; - } - /* Are we following an initial run of 0x00s or any real hex? */ - if (i != 0) - *tp++ = ':'; - /* Is this address an encapsulated IPv4? */ - if (i == 6 && best.base == 0 && - (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) - { - if (!inet_ntop4 (src + 12, tp, sizeof tmp - (tp - tmp))) - return (NULL); - tp += strlen (tp); - break; - } - { - int len = sprintf (tp, "%x", words[i]); - if (len < 0) - return NULL; - tp += len; - } - } - /* Was it a trailing run of 0x00's? */ - if (best.base != -1 && (best.base + best.len) == - (NS_IN6ADDRSZ / NS_INT16SZ)) - *tp++ = ':'; - *tp++ = '\0'; - - /* - * Check for overflow, copy, and we're done. - */ - if ((unsigned) (tp - tmp) > size) - { - errno = ENOSPC; - return NULL; - } - - return strcpy (dst, tmp); -} - -# endif - -#endif diff --git a/lib/system/inet_pton.c b/lib/system/inet_pton.c deleted file mode 100644 index cc9254fd4c..0000000000 --- a/lib/system/inet_pton.c +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright (c) 1996,1999 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -#include - -#ifdef HAVE_SYS_PARAM_H -#include -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#ifdef HAVE_SYS_SOCKET_H -#include /* needed to define AF_ values on UNIX */ -#endif - -#ifdef HAVE_WINSOCK2_H -#include /* needed to define AF_ values on Windows */ -#if _MSC_VER < 1600 /* errno.h defines EAFNOSUPPORT in Windows VC10 (and presumably eventually in VC11 ...) */ -#define EAFNOSUPPORT WSAEAFNOSUPPORT -#endif -#endif - -#ifdef HAVE_NETINET_IN_H -#include -#endif - -#ifdef HAVE_ARPA_INET_H -#include -#endif - -#ifdef HAVE_ARPA_NAMESER_H -#include -#endif - -#include -#include - -#include - -#ifndef HAVE_INET_PTON - -#ifndef NS_INADDRSZ -#define NS_INADDRSZ 4 -#endif -#ifndef NS_IN6ADDRSZ -#define NS_IN6ADDRSZ 16 -#endif -#ifndef NS_INT16SZ -#define NS_INT16SZ 2 -#endif - -/* - * WARNING: Don't even consider trying to compile this on a system where - * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. - */ - -static int inet_pton4 (const char *src, u_char *dst); -static int inet_pton6 (const char *src, u_char *dst); - -/* int - * inet_pton(af, src, dst) - * convert from presentation format (which usually means ASCII printable) - * to network format (which is usually some kind of binary format). - * return: - * 1 if the address was valid for the specified address family - * 0 if the address wasn't valid (`dst' is untouched in this case) - * -1 if some other error occurred (`dst' is untouched in this case, too) - * author: - * Paul Vixie, 1996. - */ -int -inet_pton(af, src, dst) - int af; - const char *src; - void *dst; -{ - switch (af) { - case AF_INET: - return (inet_pton4(src, dst)); - case AF_INET6: - return (inet_pton6(src, dst)); - default: - errno = EAFNOSUPPORT; - return (-1); - } - /* NOTREACHED */ -} -#endif - -#ifdef _WIN32 -int inet_aton(const char *cp, struct in_addr *inp) -{ - return inet_pton(AF_INET, cp, inp); -} -#endif - -#ifndef HAVE_INET_PTON -/* int - * inet_pton4(src, dst) - * like inet_aton() but without all the hexadecimal and shorthand. - * return: - * 1 if `src' is a valid dotted quad, else 0. - * notice: - * does not touch `dst' unless it's returning 1. - * author: - * Paul Vixie, 1996. - */ -static int -inet_pton4(src, dst) - const char *src; - u_char *dst; -{ - static const char digits[] = "0123456789"; - int saw_digit, octets, ch; - u_char tmp[NS_INADDRSZ], *tp; - - saw_digit = 0; - octets = 0; - *(tp = tmp) = 0; - while ((ch = *src++) != '\0') { - const char *pch; - - if ((pch = strchr(digits, ch)) != NULL) { - size_t new = *tp * 10 + (pch - digits); - - if (new > 255) - return (0); - *tp = (u_char) new; - if (! saw_digit) { - if (++octets > 4) - return (0); - saw_digit = 1; - } - } else if (ch == '.' && saw_digit) { - if (octets == 4) - return (0); - *++tp = 0; - saw_digit = 0; - } else - return (0); - } - if (octets < 4) - return (0); - memcpy(dst, tmp, NS_INADDRSZ); - return (1); -} - -/* int - * inet_pton6(src, dst) - * convert presentation level address to network order binary form. - * return: - * 1 if `src' is a valid [RFC1884 2.2] address, else 0. - * notice: - * (1) does not touch `dst' unless it's returning 1. - * (2) :: in a full address is silently ignored. - * credit: - * inspired by Mark Andrews. - * author: - * Paul Vixie, 1996. - */ -static int -inet_pton6(src, dst) - const char *src; - u_char *dst; -{ - static const char xdigits_l[] = "0123456789abcdef", - xdigits_u[] = "0123456789ABCDEF"; - u_char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp; - const char *xdigits, *curtok; - int ch, saw_xdigit; - u_int val; - - memset((tp = tmp), '\0', NS_IN6ADDRSZ); - endp = tp + NS_IN6ADDRSZ; - colonp = NULL; - /* Leading :: requires some special handling. */ - if (*src == ':') - if (*++src != ':') - return (0); - curtok = src; - saw_xdigit = 0; - val = 0; - while ((ch = *src++) != '\0') { - const char *pch; - - if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL) - pch = strchr((xdigits = xdigits_u), ch); - if (pch != NULL) { - val <<= 4; - val |= (pch - xdigits); - if (val > 0xffff) - return (0); - saw_xdigit = 1; - continue; - } - if (ch == ':') { - curtok = src; - if (!saw_xdigit) { - if (colonp) - return (0); - colonp = tp; - continue; - } else if (*src == '\0') { - return (0); - } - if (tp + NS_INT16SZ > endp) - return (0); - *tp++ = (u_char) (val >> 8) & 0xff; - *tp++ = (u_char) val & 0xff; - saw_xdigit = 0; - val = 0; - continue; - } - if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) && - inet_pton4(curtok, tp) > 0) { - tp += NS_INADDRSZ; - saw_xdigit = 0; - break; /* '\0' was seen by inet_pton4(). */ - } - return (0); - } - if (saw_xdigit) { - if (tp + NS_INT16SZ > endp) - return (0); - *tp++ = (u_char) (val >> 8) & 0xff; - *tp++ = (u_char) val & 0xff; - } - if (colonp != NULL) { - /* - * Since some memmove()'s erroneously fail to handle - * overlapping regions, we'll do the shift by hand. - */ - const int n = (int) (tp - colonp); - int i; - - if (tp == endp) - return (0); - for (i = 1; i <= n; i++) { - endp[- i] = colonp[n - i]; - colonp[n - i] = 0; - } - tp = endp; - } - if (tp != endp) - return (0); - memcpy(dst, tmp, NS_IN6ADDRSZ); - return (1); -} - -#endif /* HAVE_INET_PTON */ diff --git a/lib/system/keys-dummy.c b/lib/system/keys-dummy.c index 31acb4eccf..bd3fba47d4 100644 --- a/lib/system/keys-dummy.c +++ b/lib/system/keys-dummy.c @@ -14,7 +14,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/system/keys-win.c b/lib/system/keys-win.c index eac511b975..678a668e49 100644 --- a/lib/system/keys-win.c +++ b/lib/system/keys-win.c @@ -15,7 +15,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -43,6 +43,7 @@ #include #include +#include #define DYN_NCRYPT @@ -612,6 +613,9 @@ static int cng_info(gnutls_privkey_t key, unsigned int flags, void *userdata) -*/ int _gnutls_privkey_import_system_url(gnutls_privkey_t pkey, const char *url) { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) + return gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); +#else uint8_t id[MAX_WID_SIZE]; HCERTSTORE store = NULL; size_t id_size; @@ -647,7 +651,7 @@ int _gnutls_privkey_import_system_url(gnutls_privkey_t pkey, const char *url) blob.cbData = id_size; blob.pbData = id; - store = CertOpenSystemStore(0, "MY"); + store = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER, L"MY"); if (store == NULL) { gnutls_assert(); ret = GNUTLS_E_FILE_ERROR; @@ -861,6 +865,7 @@ int _gnutls_privkey_import_system_url(gnutls_privkey_t pkey, const char *url) CertCloseStore(store, 0); return ret; +#endif } int _gnutls_x509_crt_import_system_url(gnutls_x509_crt_t crt, const char *url) @@ -884,7 +889,7 @@ int _gnutls_x509_crt_import_system_url(gnutls_x509_crt_t crt, const char *url) blob.cbData = id_size; blob.pbData = id; - store = CertOpenSystemStore(0, "MY"); + store = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER, L"MY"); if (store == NULL) { gnutls_assert(); ret = GNUTLS_E_FILE_ERROR; @@ -1132,7 +1137,7 @@ gnutls_system_key_iter_get_info(gnutls_system_key_iter_t * iter, if (*iter == NULL) return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - (*iter)->store = CertOpenSystemStore(0, "MY"); + (*iter)->store = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER, L"MY"); if ((*iter)->store == NULL) { gnutls_free(*iter); *iter = NULL; @@ -1205,7 +1210,7 @@ int gnutls_system_key_delete(const char *cert_url, const char *key_url) blob.cbData = id_size; blob.pbData = id; - store = CertOpenSystemStore(0, "MY"); + store = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER, L"MY"); if (store != NULL) { do { cert = CertFindCertificateInStore(store, @@ -1426,7 +1431,7 @@ int _gnutls_system_key_init(void) int ret; #ifdef DYN_NCRYPT - ncrypt_lib = LoadLibraryA("ncrypt.dll"); + ncrypt_lib = LoadLibrary(TEXT("ncrypt.dll")); if (ncrypt_lib == NULL) { return gnutls_assert_val(GNUTLS_E_CRYPTO_INIT_FAILED); } diff --git a/lib/system/sockets.c b/lib/system/sockets.c index 15e23d84c9..a9c1c43985 100644 --- a/lib/system/sockets.c +++ b/lib/system/sockets.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -131,7 +131,7 @@ system_read(gnutls_transport_ptr_t ptr, void *data, size_t data_size) /** * gnutls_system_recv_timeout: - * @ptr: A gnutls_transport_ptr_t pointer + * @ptr: A file descriptor (wrapped in a gnutls_transport_ptr_t pointer) * @ms: The number of milliseconds to wait. * * Wait for data to be received from the provided socket (@ptr) within a diff --git a/lib/system/threads.c b/lib/system/threads.c index c25d6472e1..cbc7c920e9 100644 --- a/lib/system/threads.c +++ b/lib/system/threads.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/system/vasprintf.c b/lib/system/vasprintf.c deleted file mode 100644 index 8362942a20..0000000000 --- a/lib/system/vasprintf.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright © 2008-2014 Intel Corporation. - * - * Authors: David Woodhouse - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * version 2.1, as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - */ - -#include -#include -#include -#include -#include -#include "vasprintf.h" - -#ifndef HAVE_VASPRINTF - -int _gnutls_vasprintf(char **strp, const char *fmt, va_list ap) -{ - va_list ap2; - char *res = NULL; - int len = 160, len2; - int ret = 0; - int errno_save = -ENOMEM; - - res = malloc(160); - if (!res) - goto err; - - /* Use a copy of 'ap', preserving it in case we need to retry into - a larger buffer. 160 characters should be sufficient for most - strings in openconnect. */ -#ifdef HAVE_VA_COPY - va_copy(ap2, ap); -#elif defined(HAVE___VA_COPY) - __va_copy(ap2, ap); -#else -#error No va_copy()! - /* You could try this. */ - ap2 = ap; - /* Or this */ - *ap2 = *ap; -#endif - len = vsnprintf(res, 160, fmt, ap2); - va_end(ap2); - - if (len < 0) { - printf_err: - errno_save = errno; - free(res); - res = NULL; - goto err; - } - if (len >= 0 && len < 160) - goto out; - - free(res); - res = malloc(len+1); - if (!res) - goto err; - - len2 = vsnprintf(res, len+1, fmt, ap); - if (len2 < 0 || len2 > len) - goto printf_err; - - ret = 0; - goto out; - - err: - errno = errno_save; - ret = -1; - out: - *strp = res; - return ret; -} - -#endif diff --git a/lib/system_override.c b/lib/system_override.c index fdf766509c..9179bf5c8a 100644 --- a/lib/system_override.c +++ b/lib/system_override.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -55,6 +55,9 @@ * variable that is used by GnuTLS (e.g., the application is linked to * msvcr71.dll and gnutls is linked to msvcrt.dll). * + * This function is unreliable if you are using the same + * @session in different threads for sending and receiving. + * **/ void gnutls_transport_set_errno(gnutls_session_t session, int err) { @@ -103,15 +106,13 @@ gnutls_transport_set_pull_function(gnutls_session_t session, * int (*gnutls_pull_timeout_func)(gnutls_transport_ptr_t, unsigned int ms); * * This callback is necessary when gnutls_handshake_set_timeout() or - * gnutls_record_set_timeout() are set, and for calculating the DTLS mode - * timeouts. - * - * In short, this callback should be set when a custom pull function is - * registered. The callback will not be used when the session is in TLS mode with - * non-blocking sockets. That is, when %GNUTLS_NONBLOCK is specified for a TLS - * session in gnutls_init(). For compatibility with future GnuTLS versions - * it is recommended to always set this function when a custom pull function - * is registered. + * gnutls_record_set_timeout() are set, under TLS1.3 and for enforcing the DTLS + * mode timeouts when in blocking mode. + * + * For compatibility with future GnuTLS versions this callback must be set when + * a custom pull function is registered. The callback will not be used when the + * session is in TLS mode with non-blocking sockets. That is, when %GNUTLS_NONBLOCK + * is specified for a TLS session in gnutls_init(). * * The helper function gnutls_system_recv_timeout() is provided to * simplify writing callbacks. diff --git a/lib/tls-sig.c b/lib/tls-sig.c index a68176c0d5..779e02c18f 100644 --- a/lib/tls-sig.c +++ b/lib/tls-sig.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2001-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -39,52 +40,110 @@ #include #include -static int -sign_tls_hash(gnutls_session_t session, const mac_entry_st * hash_algo, - gnutls_pcert_st * cert, gnutls_privkey_t pkey, - const gnutls_datum_t * hash_concat, - gnutls_datum_t * signature); +int _gnutls_check_key_usage_for_sig(gnutls_session_t session, unsigned key_usage, unsigned our_cert) +{ + const char *lstr; + unsigned allow_key_usage_violation; + + if (our_cert) { + lstr = "Local"; + allow_key_usage_violation = session->internals.priorities->allow_server_key_usage_violation; + } else { + lstr = "Peer's"; + allow_key_usage_violation = session->internals.allow_key_usage_violation; + } + if (key_usage != 0) { + if (!(key_usage & GNUTLS_KEY_DIGITAL_SIGNATURE)) { + gnutls_assert(); + if (likely(allow_key_usage_violation == 0)) { + _gnutls_audit_log(session, + "%s certificate does not allow digital signatures. Key usage violation detected.\n", lstr); + return GNUTLS_E_KEY_USAGE_VIOLATION; + } else { + _gnutls_audit_log(session, + "%s certificate does not allow digital signatures. Key usage violation detected (ignored).\n", lstr); + } + } + } + return 0; +} /* Generates a signature of all the random data and the parameters. - * Used in DHE_* ciphersuites. + * Used in *DHE_* ciphersuites for TLS 1.2. */ -int -_gnutls_handshake_sign_data(gnutls_session_t session, +static int +_gnutls_handshake_sign_data12(gnutls_session_t session, gnutls_pcert_st * cert, gnutls_privkey_t pkey, gnutls_datum_t * params, gnutls_datum_t * signature, - gnutls_sign_algorithm_t * sign_algo) + gnutls_sign_algorithm_t sign_algo) { gnutls_datum_t dconcat; int ret; - digest_hd_st td_sha; - uint8_t concat[MAX_SIG_SIZE]; - const version_entry_st *ver = get_version(session); - const mac_entry_st *hash_algo; - *sign_algo = _gnutls_session_get_sign_algo(session, cert, 0); - if (*sign_algo == GNUTLS_SIGN_UNKNOWN) { + _gnutls_handshake_log + ("HSK[%p]: signing TLS 1.2 handshake data: using %s\n", session, + gnutls_sign_algorithm_get_name(sign_algo)); + + if (unlikely(gnutls_sign_supports_pk_algorithm(sign_algo, pkey->pk_algorithm) == 0)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + dconcat.size = GNUTLS_RANDOM_SIZE*2 + params->size; + dconcat.data = gnutls_malloc(dconcat.size); + if (dconcat.data == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + memcpy(dconcat.data, session->security_parameters.client_random, GNUTLS_RANDOM_SIZE); + memcpy(dconcat.data+GNUTLS_RANDOM_SIZE, session->security_parameters.server_random, GNUTLS_RANDOM_SIZE); + memcpy(dconcat.data+GNUTLS_RANDOM_SIZE*2, params->data, params->size); + + ret = gnutls_privkey_sign_data2(pkey, sign_algo, + 0, &dconcat, signature); + if (ret < 0) { gnutls_assert(); - return GNUTLS_E_UNKNOWN_PK_ALGORITHM; } + gnutls_free(dconcat.data); + + return ret; - gnutls_sign_algorithm_set_server(session, *sign_algo); +} + +static int +_gnutls_handshake_sign_data10(gnutls_session_t session, + gnutls_pcert_st * cert, gnutls_privkey_t pkey, + gnutls_datum_t * params, + gnutls_datum_t * signature, + gnutls_sign_algorithm_t sign_algo) +{ + gnutls_datum_t dconcat; + int ret; + digest_hd_st td_sha; + uint8_t concat[MAX_SIG_SIZE]; + const mac_entry_st *me; + gnutls_pk_algorithm_t pk_algo; - if (!_gnutls_version_has_selectable_sighash(ver) && - gnutls_privkey_get_pk_algorithm(pkey, NULL) == GNUTLS_PK_RSA) - hash_algo = hash_to_entry(GNUTLS_DIG_MD5_SHA1); + pk_algo = gnutls_privkey_get_pk_algorithm(pkey, NULL); + if (pk_algo == GNUTLS_PK_RSA) + me = hash_to_entry(GNUTLS_DIG_MD5_SHA1); else - hash_algo = hash_to_entry( - gnutls_sign_get_hash_algorithm(*sign_algo)); - if (hash_algo == NULL) + me = hash_to_entry( + gnutls_sign_get_hash_algorithm(sign_algo)); + if (me == NULL) return gnutls_assert_val(GNUTLS_E_UNKNOWN_HASH_ALGORITHM); + if (unlikely(gnutls_sign_supports_pk_algorithm(sign_algo, pk_algo) == 0)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + pk_algo = gnutls_sign_get_pk_algorithm(sign_algo); + if (pk_algo == GNUTLS_PK_UNKNOWN) + return gnutls_assert_val(GNUTLS_E_UNKNOWN_PK_ALGORITHM); + _gnutls_handshake_log ("HSK[%p]: signing handshake data: using %s\n", session, - gnutls_sign_algorithm_get_name(*sign_algo)); + gnutls_sign_algorithm_get_name(sign_algo)); - ret = _gnutls_hash_init(&td_sha, hash_algo); + ret = _gnutls_hash_init(&td_sha, me); if (ret < 0) { gnutls_assert(); return ret; @@ -99,127 +158,55 @@ _gnutls_handshake_sign_data(gnutls_session_t session, _gnutls_hash_deinit(&td_sha, concat); dconcat.data = concat; - dconcat.size = _gnutls_hash_get_algo_len(hash_algo); + dconcat.size = _gnutls_hash_get_algo_len(me); - ret = - sign_tls_hash(session, hash_algo, cert, pkey, &dconcat, - signature); + ret = gnutls_privkey_sign_hash(pkey, me->id, GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, + &dconcat, signature); if (ret < 0) { gnutls_assert(); } return ret; - -} - -static -int check_key_usage_for_sig(gnutls_session_t session, unsigned key_usage, unsigned our_cert) -{ - const char *lstr; - unsigned allow_key_usage_violation; - - if (our_cert) { - lstr = "Local"; - allow_key_usage_violation = session->internals.priorities.allow_server_key_usage_violation; - } else { - lstr = "Peer's"; - allow_key_usage_violation = session->internals.priorities.allow_key_usage_violation; - } - - if (key_usage != 0) { - if (!(key_usage & GNUTLS_KEY_DIGITAL_SIGNATURE)) { - gnutls_assert(); - if (likely(allow_key_usage_violation == 0)) { - _gnutls_audit_log(session, - "%s certificate does not allow digital signatures. Key usage violation detected.\n", lstr); - return GNUTLS_E_KEY_USAGE_VIOLATION; - } else { - _gnutls_audit_log(session, - "%s certificate does not allow digital signatures. Key usage violation detected (ignored).\n", lstr); - } - } - } - return 0; } -/* This will create a PKCS1 or DSA signature, as defined in the TLS protocol. - * Cert is the certificate of the corresponding private key. It is only checked if - * it supports signing. +/* Generates a signature of all the random data and the parameters. + * Used in DHE_* ciphersuites. */ -static int -sign_tls_hash(gnutls_session_t session, const mac_entry_st * hash_algo, - gnutls_pcert_st * cert, gnutls_privkey_t pkey, - const gnutls_datum_t * hash_concat, - gnutls_datum_t * signature) +int +_gnutls_handshake_sign_data(gnutls_session_t session, + gnutls_pcert_st * cert, gnutls_privkey_t pkey, + gnutls_datum_t * params, + gnutls_datum_t * signature, + gnutls_sign_algorithm_t * sign_algo) { const version_entry_st *ver = get_version(session); - unsigned int key_usage = 0; + unsigned key_usage = 0; int ret; - /* If our certificate supports signing - */ - if (cert != NULL) { - gnutls_pubkey_get_key_usage(cert->pubkey, &key_usage); - - ret = check_key_usage_for_sig(session, key_usage, 1); - if (ret < 0) - return gnutls_assert_val(ret); - } - - if (!_gnutls_version_has_selectable_sighash(ver)) { - return gnutls_privkey_sign_raw_data(pkey, 0, hash_concat, - signature); - } else { - assert(hash_algo != NULL); - return gnutls_privkey_sign_hash(pkey, - (gnutls_digest_algorithm_t)hash_algo->id, - 0, hash_concat, signature); - } -} - -static int -verify_tls_hash(gnutls_session_t session, - gnutls_pcert_st * cert, - const gnutls_datum_t * hash_concat, - gnutls_datum_t * signature, - gnutls_sign_algorithm_t sign_algo, - unsigned flags) -{ - int ret; - unsigned int key_usage = 0; - - if (cert == NULL) { + *sign_algo = session->security_parameters.server_sign_algo; + if (*sign_algo == GNUTLS_SIGN_UNKNOWN) { gnutls_assert(); - return GNUTLS_E_CERTIFICATE_ERROR; + return GNUTLS_E_UNWANTED_ALGORITHM; } gnutls_pubkey_get_key_usage(cert->pubkey, &key_usage); - ret = check_key_usage_for_sig(session, key_usage, 0); - if (ret < 0) - return gnutls_assert_val(ret); - - /* verify signature */ - - if (session->security_parameters.entity == GNUTLS_CLIENT) - gnutls_sign_algorithm_set_server(session, sign_algo); - - ret = gnutls_pubkey_verify_hash2(cert->pubkey, sign_algo, flags, - hash_concat, signature); - + ret = _gnutls_check_key_usage_for_sig(session, key_usage, 1); if (ret < 0) return gnutls_assert_val(ret); - - return 0; + if (_gnutls_version_has_selectable_sighash(ver)) + return _gnutls_handshake_sign_data12(session, cert, pkey, params, signature, *sign_algo); + else + return _gnutls_handshake_sign_data10(session, cert, pkey, params, signature, *sign_algo); } - /* Generates a signature of all the random data and the parameters. * Used in DHE_* ciphersuites. */ -int -_gnutls_handshake_verify_data(gnutls_session_t session, +static int +_gnutls_handshake_verify_data10(gnutls_session_t session, + unsigned verify_flags, gnutls_pcert_st * cert, const gnutls_datum_t * params, gnutls_datum_t * signature, @@ -229,38 +216,21 @@ _gnutls_handshake_verify_data(gnutls_session_t session, int ret; digest_hd_st td_sha; uint8_t concat[MAX_SIG_SIZE]; - const version_entry_st *ver = get_version(session); gnutls_digest_algorithm_t hash_algo; const mac_entry_st *me; gnutls_pk_algorithm_t pk_algo; - unsigned flags = 0; - - if (_gnutls_version_has_selectable_sighash(ver)) { - _gnutls_handshake_log - ("HSK[%p]: verify handshake data: using %s\n", session, - gnutls_sign_algorithm_get_name(sign_algo)); - - ret = - _gnutls_pubkey_compatible_with_sig(session, - cert->pubkey, ver, - sign_algo); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = - _gnutls_session_sign_algo_enabled(session, sign_algo); - if (ret < 0) - return gnutls_assert_val(ret); - hash_algo = gnutls_sign_get_hash_algorithm(sign_algo); + pk_algo = gnutls_pubkey_get_pk_algorithm(cert->pubkey, NULL); + if (pk_algo == GNUTLS_PK_RSA) { + hash_algo = GNUTLS_DIG_MD5_SHA1; + verify_flags |= GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA; } else { - pk_algo = gnutls_pubkey_get_pk_algorithm(cert->pubkey, NULL); - if (pk_algo == GNUTLS_PK_RSA) { - hash_algo = GNUTLS_DIG_MD5_SHA1; - flags = GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA; - } else - hash_algo = GNUTLS_DIG_SHA1; + hash_algo = GNUTLS_DIG_SHA1; + if (sign_algo == GNUTLS_SIGN_UNKNOWN) { + sign_algo = gnutls_pk_to_sign(pk_algo, hash_algo); + } } + me = hash_to_entry(hash_algo); ret = _gnutls_hash_init(&td_sha, me); @@ -280,60 +250,177 @@ _gnutls_handshake_verify_data(gnutls_session_t session, dconcat.data = concat; dconcat.size = _gnutls_hash_get_algo_len(me); - ret = verify_tls_hash(session, cert, &dconcat, signature, - sign_algo, flags); - if (ret < 0) { - gnutls_assert(); - return ret; + ret = gnutls_pubkey_verify_hash2(cert->pubkey, sign_algo, + GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1|verify_flags, + &dconcat, signature); + if (ret < 0) + return gnutls_assert_val(ret); + + return ret; +} + +static int +_gnutls_handshake_verify_data12(gnutls_session_t session, + unsigned verify_flags, + gnutls_pcert_st * cert, + const gnutls_datum_t * params, + gnutls_datum_t * signature, + gnutls_sign_algorithm_t sign_algo) +{ + gnutls_datum_t dconcat; + int ret; + const version_entry_st *ver = get_version(session); + const gnutls_sign_entry_st *se = _gnutls_sign_to_entry(sign_algo); + + _gnutls_handshake_log + ("HSK[%p]: verify TLS 1.2 handshake data: using %s\n", session, + se->name); + + ret = + _gnutls_pubkey_compatible_with_sig(session, + cert->pubkey, ver, + sign_algo); + if (ret < 0) + return gnutls_assert_val(ret); + + if (unlikely(sign_supports_cert_pk_algorithm(se, cert->pubkey->params.algo) == 0)) { + _gnutls_handshake_log("HSK[%p]: certificate of %s cannot be combined with %s sig\n", + session, gnutls_pk_get_name(cert->pubkey->params.algo), se->name); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); } + ret = + _gnutls_session_sign_algo_enabled(session, sign_algo); + if (ret < 0) + return gnutls_assert_val(ret); + + dconcat.size = GNUTLS_RANDOM_SIZE*2+params->size; + dconcat.data = gnutls_malloc(dconcat.size); + if (dconcat.data == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + memcpy(dconcat.data, session->security_parameters.client_random, GNUTLS_RANDOM_SIZE); + memcpy(dconcat.data+GNUTLS_RANDOM_SIZE, session->security_parameters.server_random, GNUTLS_RANDOM_SIZE); + memcpy(dconcat.data+GNUTLS_RANDOM_SIZE*2, params->data, params->size); + + /* Here we intentionally enable flag GNUTLS_VERIFY_ALLOW_BROKEN + * because we have checked whether the currently used signature + * algorithm is allowed in the session. */ + ret = gnutls_pubkey_verify_data2(cert->pubkey, sign_algo, verify_flags|GNUTLS_VERIFY_ALLOW_BROKEN, + &dconcat, signature); + if (ret < 0) + gnutls_assert(); + + gnutls_free(dconcat.data); + return ret; +} + +int +_gnutls_handshake_verify_data(gnutls_session_t session, + unsigned verify_flags, + gnutls_pcert_st * cert, + const gnutls_datum_t * params, + gnutls_datum_t * signature, + gnutls_sign_algorithm_t sign_algo) +{ + unsigned key_usage; + int ret; + const version_entry_st *ver = get_version(session); + + if (cert == NULL) { + gnutls_assert(); + return GNUTLS_E_CERTIFICATE_ERROR; + } + + gnutls_pubkey_get_key_usage(cert->pubkey, &key_usage); + + ret = _gnutls_check_key_usage_for_sig(session, key_usage, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + gnutls_sign_algorithm_set_server(session, sign_algo); + if (_gnutls_version_has_selectable_sighash(ver)) + return _gnutls_handshake_verify_data12(session, verify_flags, cert, params, signature, sign_algo); + else + return _gnutls_handshake_verify_data10(session, verify_flags, cert, params, signature, sign_algo); } + /* Client certificate verify calculations */ +static void +_gnutls_reverse_datum(gnutls_datum_t * d) +{ + unsigned i; + + for (i = 0; i < d->size / 2; i ++) { + uint8_t t = d->data[i]; + d->data[i] = d->data[d->size - 1 - i]; + d->data[d->size - 1 - i] = t; + } +} + +static int +_gnutls_create_reverse(const gnutls_datum_t *src, gnutls_datum_t *dst) +{ + unsigned int i; + + dst->size = src->size; + dst->data = gnutls_malloc(dst->size); + if (!dst->data) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + for (i = 0; i < dst->size; i++) + dst->data[i] = src->data[dst->size - 1 - i]; + + return 0; +} + /* this is _gnutls_handshake_verify_crt_vrfy for TLS 1.2 */ static int _gnutls_handshake_verify_crt_vrfy12(gnutls_session_t session, + unsigned verify_flags, gnutls_pcert_st * cert, gnutls_datum_t * signature, gnutls_sign_algorithm_t sign_algo) { int ret; - uint8_t concat[MAX_HASH_SIZE]; gnutls_datum_t dconcat; - const mac_entry_st *me; + const gnutls_sign_entry_st *se = _gnutls_sign_to_entry(sign_algo); + gnutls_datum_t sig_rev = {NULL, 0}; ret = _gnutls_session_sign_algo_enabled(session, sign_algo); if (ret < 0) return gnutls_assert_val(ret); - gnutls_sign_algorithm_set_client(session, sign_algo); - - me = hash_to_entry(gnutls_sign_get_hash_algorithm(sign_algo)); + if (unlikely(sign_supports_cert_pk_algorithm(se, cert->pubkey->params.algo) == 0)) { + _gnutls_handshake_log("HSK[%p]: certificate of %s cannot be combined with %s sig\n", + session, gnutls_pk_get_name(cert->pubkey->params.algo), se->name); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } - ret = - _gnutls_hash_fast((gnutls_digest_algorithm_t)me->id, - session->internals.handshake_hash_buffer. - data, - session->internals. - handshake_hash_buffer_prev_len, concat); - if (ret < 0) - return gnutls_assert_val(ret); + if (se->flags & GNUTLS_SIGN_FLAG_CRT_VRFY_REVERSE) { + ret = _gnutls_create_reverse(signature, &sig_rev); + if (ret < 0) + return gnutls_assert_val(ret); + } - dconcat.data = concat; - dconcat.size = _gnutls_hash_get_algo_len(me); + dconcat.data = session->internals.handshake_hash_buffer.data; + dconcat.size = session->internals.handshake_hash_buffer_prev_len; - ret = - verify_tls_hash(session, cert, &dconcat, signature, - sign_algo, 0); - if (ret < 0) { + /* Here we intentionally enable flag GNUTLS_VERIFY_ALLOW_BROKEN + * because we have checked whether the currently used signature + * algorithm is allowed in the session. */ + ret = gnutls_pubkey_verify_data2(cert->pubkey, sign_algo, verify_flags|GNUTLS_VERIFY_ALLOW_BROKEN, + &dconcat, + sig_rev.data ? &sig_rev : signature); + _gnutls_free_datum(&sig_rev); + if (ret < 0) gnutls_assert(); - return ret; - } return ret; @@ -345,6 +432,7 @@ _gnutls_handshake_verify_crt_vrfy12(gnutls_session_t session, #ifdef ENABLE_SSL3 static int _gnutls_handshake_verify_crt_vrfy3(gnutls_session_t session, + unsigned verify_flags, gnutls_pcert_st * cert, gnutls_datum_t * signature, gnutls_sign_algorithm_t sign_algo) @@ -383,6 +471,7 @@ _gnutls_handshake_verify_crt_vrfy3(gnutls_session_t session, if (ret < 0) return gnutls_assert_val(ret); + verify_flags |= GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA; dconcat.size = 16; } @@ -408,36 +497,88 @@ _gnutls_handshake_verify_crt_vrfy3(gnutls_session_t session, dconcat.size += 20; - ret = - verify_tls_hash(session, cert, &dconcat, signature, - GNUTLS_SIGN_UNKNOWN, - GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA); + ret = gnutls_pubkey_verify_hash2(cert->pubkey, GNUTLS_SIGN_UNKNOWN, + GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1|verify_flags, + &dconcat, signature); + if (ret < 0) + return gnutls_assert_val(ret); + + return ret; +} +#endif + +static int +_gnutls_handshake_verify_crt_vrfy10(gnutls_session_t session, + unsigned verify_flags, + gnutls_pcert_st * cert, + gnutls_datum_t * signature, + gnutls_sign_algorithm_t sign_algo) +{ + int ret; + uint8_t concat[MAX_SIG_SIZE]; + digest_hd_st td_sha; + gnutls_datum_t dconcat; + gnutls_pk_algorithm_t pk_algo; + const mac_entry_st *me; + + /* TLS 1.0 and TLS 1.1 */ + pk_algo = gnutls_pubkey_get_pk_algorithm(cert->pubkey, NULL); + if (pk_algo == GNUTLS_PK_RSA) { + me = hash_to_entry(GNUTLS_DIG_MD5_SHA1); + verify_flags |= GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA; + sign_algo = GNUTLS_SIGN_UNKNOWN; + } else { + me = hash_to_entry(GNUTLS_DIG_SHA1); + sign_algo = gnutls_pk_to_sign(pk_algo, GNUTLS_DIG_SHA1); + } + ret = _gnutls_hash_init(&td_sha, me); if (ret < 0) { gnutls_assert(); return ret; } + _gnutls_hash(&td_sha, + session->internals.handshake_hash_buffer.data, + session->internals.handshake_hash_buffer_prev_len); + + _gnutls_hash_deinit(&td_sha, concat); + + dconcat.data = concat; + dconcat.size = _gnutls_hash_get_algo_len(me); + + ret = gnutls_pubkey_verify_hash2(cert->pubkey, sign_algo, + GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1|verify_flags, + &dconcat, signature); + if (ret < 0) + gnutls_assert(); + return ret; } -#endif /* Verifies a TLS signature (like the one in the client certificate * verify message). */ int _gnutls_handshake_verify_crt_vrfy(gnutls_session_t session, + unsigned verify_flags, gnutls_pcert_st * cert, gnutls_datum_t * signature, gnutls_sign_algorithm_t sign_algo) { int ret; - uint8_t concat[MAX_SIG_SIZE]; - digest_hd_st td_sha; - gnutls_datum_t dconcat; const version_entry_st *ver = get_version(session); - gnutls_pk_algorithm_t pk_algo; - const mac_entry_st *me; - unsigned flags = 0; + unsigned key_usage; + + if (cert == NULL) { + gnutls_assert(); + return GNUTLS_E_CERTIFICATE_ERROR; + } + + gnutls_pubkey_get_key_usage(cert->pubkey, &key_usage); + + ret = _gnutls_check_key_usage_for_sig(session, key_usage, 0); + if (ret < 0) + return gnutls_assert_val(ret); _gnutls_handshake_log("HSK[%p]: verify cert vrfy: using %s\n", session, @@ -446,50 +587,34 @@ _gnutls_handshake_verify_crt_vrfy(gnutls_session_t session, if (unlikely(ver == NULL)) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + gnutls_sign_algorithm_set_client(session, sign_algo); + + /* TLS 1.2 */ if (_gnutls_version_has_selectable_sighash(ver)) - return _gnutls_handshake_verify_crt_vrfy12(session, cert, + return _gnutls_handshake_verify_crt_vrfy12(session, + verify_flags, + cert, signature, sign_algo); #ifdef ENABLE_SSL3 if (ver->id == GNUTLS_SSL3) - return _gnutls_handshake_verify_crt_vrfy3(session, cert, + return _gnutls_handshake_verify_crt_vrfy3(session, + verify_flags, + cert, signature, sign_algo); #endif - pk_algo = gnutls_pubkey_get_pk_algorithm(cert->pubkey, NULL); - if (pk_algo == GNUTLS_PK_RSA) { - me = hash_to_entry(GNUTLS_DIG_MD5_SHA1); - flags = GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA; - } else - me = hash_to_entry(GNUTLS_DIG_SHA1); - ret = _gnutls_hash_init(&td_sha, me); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - _gnutls_hash(&td_sha, - session->internals.handshake_hash_buffer.data, - session->internals.handshake_hash_buffer_prev_len); - - _gnutls_hash_deinit(&td_sha, concat); - - dconcat.data = concat; - dconcat.size = _gnutls_hash_get_algo_len(me); - - ret = - verify_tls_hash(session, cert, &dconcat, signature, - GNUTLS_SIGN_UNKNOWN, flags); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return ret; + /* TLS 1.0 and TLS 1.1 */ + return _gnutls_handshake_verify_crt_vrfy10(session, + verify_flags, + cert, + signature, + sign_algo); } -/* the same as _gnutls_handshake_sign_crt_vrfy except that it is made for TLS 1.2 +/* the same as _gnutls_handshake_sign_crt_vrfy except that it is made for TLS 1.2. + * Returns the used signature algorithm, or a negative error code. */ static int _gnutls_handshake_sign_crt_vrfy12(gnutls_session_t session, @@ -498,48 +623,41 @@ _gnutls_handshake_sign_crt_vrfy12(gnutls_session_t session, gnutls_datum_t * signature) { gnutls_datum_t dconcat; - int ret; - uint8_t concat[MAX_SIG_SIZE]; gnutls_sign_algorithm_t sign_algo; - const mac_entry_st *me; - - sign_algo = _gnutls_privkey_get_preferred_sign_algo(pkey); - if (sign_algo == GNUTLS_SIGN_UNKNOWN || - _gnutls_session_sign_algo_enabled(session, sign_algo) < 0) { + const gnutls_sign_entry_st *se; + int ret; - sign_algo = _gnutls_session_get_sign_algo(session, cert, 1); - if (sign_algo == GNUTLS_SIGN_UNKNOWN) { - gnutls_assert(); - return GNUTLS_E_UNKNOWN_PK_ALGORITHM; - } + sign_algo = _gnutls_session_get_sign_algo(session, cert, pkey, 1, GNUTLS_KX_UNKNOWN); + if (sign_algo == GNUTLS_SIGN_UNKNOWN) { + gnutls_assert(); + return GNUTLS_E_UNWANTED_ALGORITHM; } - gnutls_sign_algorithm_set_client(session, sign_algo); + se = _gnutls_sign_to_entry(sign_algo); + if (se == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - me = hash_to_entry(gnutls_sign_get_hash_algorithm(sign_algo)); + gnutls_sign_algorithm_set_client(session, sign_algo); - _gnutls_debug_log("sign handshake cert vrfy: picked %s with %s\n", - gnutls_sign_algorithm_get_name(sign_algo), - _gnutls_mac_get_name(me)); + if (unlikely(gnutls_sign_supports_pk_algorithm(sign_algo, pkey->pk_algorithm) == 0)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); - ret = - _gnutls_hash_fast((gnutls_digest_algorithm_t)me->id, - session->internals.handshake_hash_buffer. - data, - session->internals.handshake_hash_buffer. - length, concat); - if (ret < 0) - return gnutls_assert_val(ret); + _gnutls_debug_log("sign handshake cert vrfy: picked %s\n", + gnutls_sign_algorithm_get_name(sign_algo)); - dconcat.data = concat; - dconcat.size = _gnutls_hash_get_algo_len(me); + dconcat.data = session->internals.handshake_hash_buffer.data; + dconcat.size = session->internals.handshake_hash_buffer.length; - ret = sign_tls_hash(session, me, cert, pkey, &dconcat, signature); + ret = gnutls_privkey_sign_data2(pkey, sign_algo, + 0, &dconcat, signature); if (ret < 0) { gnutls_assert(); return ret; } + if (se->flags & GNUTLS_SIGN_FLAG_CRT_VRFY_REVERSE) + _gnutls_reverse_datum(signature); + return sign_algo; } @@ -547,6 +665,7 @@ _gnutls_handshake_sign_crt_vrfy12(gnutls_session_t session, static int _gnutls_handshake_sign_crt_vrfy3(gnutls_session_t session, gnutls_pcert_st * cert, + const version_entry_st *ver, gnutls_privkey_t pkey, gnutls_datum_t * signature) { @@ -554,16 +673,9 @@ _gnutls_handshake_sign_crt_vrfy3(gnutls_session_t session, int ret; uint8_t concat[MAX_SIG_SIZE]; digest_hd_st td_sha; - const version_entry_st *ver = get_version(session); gnutls_pk_algorithm_t pk = gnutls_privkey_get_pk_algorithm(pkey, NULL); - ret = _gnutls_generate_master(session, 1); - if (ret < 0) { - gnutls_assert(); - return ret; - } - /* ensure 1024 bit DSA keys are used */ ret = _gnutls_pubkey_compatible_with_sig(session, cert->pubkey, ver, @@ -571,6 +683,12 @@ _gnutls_handshake_sign_crt_vrfy3(gnutls_session_t session, if (ret < 0) return gnutls_assert_val(ret); + ret = _gnutls_generate_master(session, 1); + if (ret < 0) { + gnutls_assert(); + return ret; + } + dconcat.data = concat; dconcat.size = 0; @@ -618,50 +736,37 @@ _gnutls_handshake_sign_crt_vrfy3(gnutls_session_t session, dconcat.size += 20; - ret = sign_tls_hash(session, NULL, cert, pkey, &dconcat, signature); - if (ret < 0) { - gnutls_assert(); - } + ret = gnutls_privkey_sign_hash(pkey, GNUTLS_DIG_SHA1, + GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, + &dconcat, signature); + if (ret < 0) + return gnutls_assert_val(ret); - return ret; + return GNUTLS_SIGN_UNKNOWN; } #endif -/* Generates a signature of all the previous sent packets in the - * handshake procedure. - * 20040227: now it works for SSL 3.0 as well - * 20091031: works for TLS 1.2 too! - * - * For TLS1.x, x<2 returns negative for failure and zero or unspecified for success. - * For TLS1.2 returns the signature algorithm used on success, or a negative error code; - */ -int -_gnutls_handshake_sign_crt_vrfy(gnutls_session_t session, - gnutls_pcert_st * cert, - gnutls_privkey_t pkey, - gnutls_datum_t * signature) +static int +_gnutls_handshake_sign_crt_vrfy10(gnutls_session_t session, + gnutls_pcert_st * cert, + const version_entry_st *ver, + gnutls_privkey_t pkey, + gnutls_datum_t * signature) { gnutls_datum_t dconcat; int ret; uint8_t concat[MAX_SIG_SIZE]; digest_hd_st td_sha; - const version_entry_st *ver = get_version(session); gnutls_pk_algorithm_t pk = gnutls_privkey_get_pk_algorithm(pkey, NULL); const mac_entry_st *me; - if (unlikely(ver == NULL)) - return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - - if (_gnutls_version_has_selectable_sighash(ver)) - return _gnutls_handshake_sign_crt_vrfy12(session, cert, - pkey, signature); - -#ifdef ENABLE_SSL3 - if (ver->id == GNUTLS_SSL3) - return _gnutls_handshake_sign_crt_vrfy3(session, cert, - pkey, signature); -#endif + /* ensure 1024 bit DSA keys are used */ + ret = + _gnutls_pubkey_compatible_with_sig(session, cert->pubkey, ver, + GNUTLS_SIGN_UNKNOWN); + if (ret < 0) + return gnutls_assert_val(ret); if (pk == GNUTLS_PK_RSA) me = hash_to_entry(GNUTLS_DIG_MD5_SHA1); @@ -683,20 +788,57 @@ _gnutls_handshake_sign_crt_vrfy(gnutls_session_t session, dconcat.data = concat; dconcat.size = _gnutls_hash_get_algo_len(me); - - /* ensure 1024 bit DSA keys are used */ - ret = - _gnutls_pubkey_compatible_with_sig(session, cert->pubkey, ver, - GNUTLS_SIGN_UNKNOWN); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = - sign_tls_hash(session, NULL, cert, pkey, &dconcat, signature); + ret = gnutls_privkey_sign_hash(pkey, me->id, GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, + &dconcat, signature); if (ret < 0) { gnutls_assert(); + return ret; } - return ret; + return GNUTLS_SIGN_UNKNOWN; } +/* Generates a signature of all the previous sent packets in the + * handshake procedure. + * 20040227: now it works for SSL 3.0 as well + * 20091031: works for TLS 1.2 too! + * + * For TLS1.x, x<2 returns negative for failure and zero or unspecified for success. + * For TLS1.2 returns the signature algorithm used on success, or a negative error code; + * + * Returns the used signature algorithm, or a negative error code. + */ +int +_gnutls_handshake_sign_crt_vrfy(gnutls_session_t session, + gnutls_pcert_st * cert, + gnutls_privkey_t pkey, + gnutls_datum_t * signature) +{ + int ret; + const version_entry_st *ver = get_version(session); + unsigned key_usage = 0; + + if (unlikely(ver == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + gnutls_pubkey_get_key_usage(cert->pubkey, &key_usage); + + ret = _gnutls_check_key_usage_for_sig(session, key_usage, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + /* TLS 1.2 */ + if (_gnutls_version_has_selectable_sighash(ver)) + return _gnutls_handshake_sign_crt_vrfy12(session, cert, + pkey, signature); + + /* TLS 1.1 or earlier */ +#ifdef ENABLE_SSL3 + if (ver->id == GNUTLS_SSL3) + return _gnutls_handshake_sign_crt_vrfy3(session, cert, ver, + pkey, signature); +#endif + + return _gnutls_handshake_sign_crt_vrfy10(session, cert, ver, + pkey, signature); +} diff --git a/lib/tls-sig.h b/lib/tls-sig.h index 5ba37128be..e2635eece4 100644 --- a/lib/tls-sig.h +++ b/lib/tls-sig.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef GNUTLS_SIG_H -#define GNUTLS_SIG_H +#ifndef GNUTLS_LIB_TLS_SIG_H +#define GNUTLS_LIB_TLS_SIG_H #include @@ -32,6 +32,9 @@ */ #define MAX_SIG_SIZE (19 + MAX_HASH_SIZE) +int _gnutls_check_key_usage_for_sig(gnutls_session_t session, unsigned key_usage, + unsigned our_cert); + int _gnutls_handshake_sign_crt_vrfy(gnutls_session_t session, gnutls_pcert_st * cert, gnutls_privkey_t pkey, @@ -45,14 +48,16 @@ int _gnutls_handshake_sign_data(gnutls_session_t session, gnutls_sign_algorithm_t * algo); int _gnutls_handshake_verify_crt_vrfy(gnutls_session_t session, + unsigned verify_flags, gnutls_pcert_st * cert, gnutls_datum_t * signature, gnutls_sign_algorithm_t); int _gnutls_handshake_verify_data(gnutls_session_t session, + unsigned verify_flags, gnutls_pcert_st * cert, const gnutls_datum_t * params, gnutls_datum_t * signature, gnutls_sign_algorithm_t algo); -#endif +#endif /* GNUTLS_LIB_TLS_SIG_H */ diff --git a/lib/tls13-sig.c b/lib/tls13-sig.c new file mode 100644 index 0000000000..e15d8305e2 --- /dev/null +++ b/lib/tls13-sig.c @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2017-2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "errors.h" +#include +#include +#include +#include +#include "tls13-sig.h" +#include "tls-sig.h" +#include "hash_int.h" + +#undef PREFIX_SIZE +#define PREFIX_SIZE 64 +#if PREFIX_SIZE < MAX_HASH_SIZE +/* we assume later that prefix is sufficient to store hash output */ +# error Need to modify code +#endif + +int +_gnutls13_handshake_verify_data(gnutls_session_t session, + unsigned verify_flags, + gnutls_pcert_st *cert, + const gnutls_datum_t *context, + const gnutls_datum_t *signature, + const gnutls_sign_entry_st *se) +{ + int ret; + const version_entry_st *ver = get_version(session); + gnutls_buffer_st buf; + uint8_t prefix[PREFIX_SIZE]; + unsigned key_usage = 0; + gnutls_datum_t p; + + _gnutls_handshake_log + ("HSK[%p]: verifying TLS 1.3 handshake data using %s\n", session, + se->name); + + ret = + _gnutls_pubkey_compatible_with_sig(session, + cert->pubkey, ver, + se->id); + if (ret < 0) + return gnutls_assert_val(ret); + + if (unlikely(sign_supports_cert_pk_algorithm(se, cert->pubkey->params.algo) == 0)) { + _gnutls_handshake_log("HSK[%p]: certificate of %s cannot be combined with %s sig\n", + session, gnutls_pk_get_name(cert->pubkey->params.algo), se->name); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } + + ret = + _gnutls_session_sign_algo_enabled(session, se->id); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + if ((se->flags & GNUTLS_SIGN_FLAG_TLS13_OK) == 0) /* explicitly prohibited */ + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + gnutls_pubkey_get_key_usage(cert->pubkey, &key_usage); + + ret = _gnutls_check_key_usage_for_sig(session, key_usage, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + _gnutls_buffer_init(&buf); + + memset(prefix, 0x20, sizeof(prefix)); + ret = _gnutls_buffer_append_data(&buf, prefix, sizeof(prefix)); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data(&buf, context->data, context->size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data(&buf, "\x00", 1); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = gnutls_hash_fast(session->security_parameters.prf->id, + session->internals.handshake_hash_buffer.data, + session->internals.handshake_hash_buffer_prev_len, + prefix); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data(&buf, prefix, session->security_parameters.prf->output_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + p.data = buf.data; + p.size = buf.length; + + /* Here we intentionally enable flag GNUTLS_VERIFY_ALLOW_BROKEN + * because we have checked whether the currently used signature + * algorithm is allowed in the session. */ + ret = gnutls_pubkey_verify_data2(cert->pubkey, se->id, + verify_flags|GNUTLS_VERIFY_ALLOW_BROKEN, + &p, signature); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = 0; + cleanup: + _gnutls_buffer_clear(&buf); + + return ret; +} + +int +_gnutls13_handshake_sign_data(gnutls_session_t session, + gnutls_pcert_st * cert, gnutls_privkey_t pkey, + const gnutls_datum_t *context, + gnutls_datum_t * signature, + const gnutls_sign_entry_st *se) +{ + gnutls_datum_t p; + int ret; + gnutls_buffer_st buf; + uint8_t tmp[MAX_HASH_SIZE]; + + if (unlikely(se == NULL || (se->flags & GNUTLS_SIGN_FLAG_TLS13_OK) == 0)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + if (unlikely(sign_supports_priv_pk_algorithm(se, pkey->pk_algorithm) == 0)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + /* when we reach here we know we have a signing certificate */ + _gnutls_handshake_log + ("HSK[%p]: signing TLS 1.3 handshake data: using %s and PRF: %s\n", session, se->name, + session->security_parameters.prf->name); + + _gnutls_buffer_init(&buf); + + ret = _gnutls_buffer_resize(&buf, PREFIX_SIZE); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + memset(buf.data, 0x20, PREFIX_SIZE); + buf.length += PREFIX_SIZE; + + ret = _gnutls_buffer_append_data(&buf, context->data, context->size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data(&buf, "\x00", 1); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = gnutls_hash_fast(session->security_parameters.prf->id, + session->internals.handshake_hash_buffer.data, + session->internals.handshake_hash_buffer.length, + tmp); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data(&buf, tmp, session->security_parameters.prf->output_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + p.data = buf.data; + p.size = buf.length; + + ret = gnutls_privkey_sign_data2(pkey, se->id, 0, &p, signature); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = 0; + cleanup: + _gnutls_buffer_clear(&buf); + + return ret; + +} diff --git a/lib/tls13-sig.h b/lib/tls13-sig.h new file mode 100644 index 0000000000..a638420b45 --- /dev/null +++ b/lib/tls13-sig.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_TLS13_SIG_H +#define GNUTLS_LIB_TLS13_SIG_H + +#include "gnutls_int.h" + +int +_gnutls13_handshake_verify_data(gnutls_session_t session, + unsigned verify_flags, + gnutls_pcert_st *cert, + const gnutls_datum_t *context, + const gnutls_datum_t *signature, + const gnutls_sign_entry_st *se); + +int +_gnutls13_handshake_sign_data(gnutls_session_t session, + gnutls_pcert_st * cert, gnutls_privkey_t pkey, + const gnutls_datum_t *context, + gnutls_datum_t * signature, + const gnutls_sign_entry_st *se); + +#endif /* GNUTLS_LIB_TLS13_SIG_H */ diff --git a/lib/tls13/anti_replay.c b/lib/tls13/anti_replay.c new file mode 100644 index 0000000000..f8333c560c --- /dev/null +++ b/lib/tls13/anti_replay.c @@ -0,0 +1,266 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "db.h" +#include "system.h" +#include "tls13/anti_replay.h" + +/* The default time window in milliseconds; RFC8446 suggests the order + * of ten seconds is sufficient for the clients on the Internet. */ +#define DEFAULT_WINDOW_MS 10000 + +struct gnutls_anti_replay_st { + uint32_t window; + struct timespec start_time; + gnutls_db_add_func db_add_func; + void *db_ptr; +}; + +/** + * gnutls_anti_replay_init: + * @anti_replay: is a pointer to #gnutls_anti_replay_t type + * + * This function will allocate and initialize the @anti_replay context + * to be usable for detect replay attacks. The context can then be + * attached to a @gnutls_session_t with + * gnutls_anti_replay_enable(). + * + * Returns: Zero or a negative error code on error. + * + * Since: 3.6.5 + **/ +int +gnutls_anti_replay_init(gnutls_anti_replay_t *anti_replay) +{ + *anti_replay = gnutls_calloc(1, sizeof(struct gnutls_anti_replay_st)); + if (!*anti_replay) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + (*anti_replay)->window = DEFAULT_WINDOW_MS; + + gnutls_gettime(&(*anti_replay)->start_time); + + return 0; +} + +/** + * gnutls_anti_replay_set_window: + * @anti_replay: is a #gnutls_anti_replay_t type. + * @window: is the time window recording ClientHello, in milliseconds + * + * Sets the time window used for ClientHello recording. In order to + * protect against replay attacks, the server records ClientHello + * messages within this time period from the last update, and + * considers it a replay when a ClientHello outside of the period; if + * a ClientHello arrives within this period, the server checks the + * database and detects duplicates. + * + * For the details of the algorithm, see RFC 8446, section 8.2. + * + * Since: 3.6.5 + */ +void +gnutls_anti_replay_set_window(gnutls_anti_replay_t anti_replay, + unsigned int window) +{ + anti_replay->window = window; +} + +/** + * gnutls_anti_replay_deinit: + * @anti_replay: is a #gnutls_anti_replay type + * + * This function will deinitialize all resources occupied by the given + * anti-replay context. + * + * Since: 3.6.5 + **/ +void +gnutls_anti_replay_deinit(gnutls_anti_replay_t anti_replay) +{ + gnutls_free(anti_replay); +} + +/** + * gnutls_anti_replay_enable: + * @session: is a #gnutls_session_t type. + * @anti_replay: is a #gnutls_anti_replay_t type. + * + * Request that the server should use anti-replay mechanism. + * + * Since: 3.6.5 + **/ +void +gnutls_anti_replay_enable(gnutls_session_t session, + gnutls_anti_replay_t anti_replay) +{ + if (unlikely(session->security_parameters.entity != GNUTLS_SERVER)) { + gnutls_assert(); + return; + } + + session->internals.anti_replay = anti_replay; +} + +int +_gnutls_anti_replay_check(gnutls_anti_replay_t anti_replay, + uint32_t client_ticket_age, + struct timespec *ticket_creation_time, + gnutls_datum_t *id) +{ + struct timespec now; + time_t window; + uint32_t server_ticket_age, diff; + gnutls_datum_t key = { NULL, 0 }; + gnutls_datum_t entry = { NULL, 0 }; + unsigned char key_buffer[MAX_HASH_SIZE + 12]; + unsigned char entry_buffer[12]; /* magic + timestamp + expire_time */ + unsigned char *p; + int ret; + + if (unlikely(id->size > MAX_HASH_SIZE)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + gnutls_gettime(&now); + server_ticket_age = timespec_sub_ms(&now, ticket_creation_time); + + /* It shouldn't be possible that the server's view of ticket + * age is smaller than the client's view. + */ + if (unlikely(server_ticket_age < client_ticket_age)) + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + + /* If ticket is created before recording has started, discard + * reject early data. + */ + if (_gnutls_timespec_cmp(ticket_creation_time, + &anti_replay->start_time) < 0) { + _gnutls_handshake_log("anti_replay: ticket is created before recording has started\n"); + return gnutls_assert_val(GNUTLS_E_EARLY_DATA_REJECTED); + } + + /* If certain amount of time (window) has elapsed, rollover + * the recording. + */ + diff = timespec_sub_ms(&now, &anti_replay->start_time); + if (diff > anti_replay->window) + gnutls_gettime(&anti_replay->start_time); + + /* If expected_arrival_time is out of window, reject early + * data. + */ + if (server_ticket_age - client_ticket_age > anti_replay->window) { + _gnutls_handshake_log("anti_replay: server ticket age: %u, client ticket age: %u\n", + server_ticket_age, + client_ticket_age); + return gnutls_assert_val(GNUTLS_E_EARLY_DATA_REJECTED); + } + + /* Check if the ClientHello is stored in the database. + */ + if (!anti_replay->db_add_func) + return gnutls_assert_val(GNUTLS_E_EARLY_DATA_REJECTED); + + /* Create a key for database lookup, prefixing window start + * time to ID. Note that this shouldn't clash with session ID + * used in TLS 1.2, because such IDs are 32 octets, while here + * the key becomes 44+ octets. + */ + p = key_buffer; + _gnutls_write_uint32((uint64_t) anti_replay->start_time.tv_sec >> 32, p); + p += 4; + _gnutls_write_uint32(anti_replay->start_time.tv_sec & 0xFFFFFFFF, p); + p += 4; + _gnutls_write_uint32(anti_replay->start_time.tv_nsec, p); + p += 4; + memcpy(p, id->data, id->size); + p += id->size; + key.data = key_buffer; + key.size = p - key_buffer; + + /* Create an entry to be stored on database if the lookup + * failed. This is formatted so that + * gnutls_db_check_entry_expire_time() work. + */ + p = entry_buffer; + _gnutls_write_uint32(PACKED_SESSION_MAGIC, p); + p += 4; + _gnutls_write_uint32(now.tv_sec, p); + p += 4; + window = anti_replay->window / 1000; + _gnutls_write_uint32(window, p); + p += 4; + entry.data = entry_buffer; + entry.size = p - entry_buffer; + + ret = anti_replay->db_add_func(anti_replay->db_ptr, + (uint64_t)now.tv_sec+(uint64_t)window, &key, &entry); + if (ret < 0) { + _gnutls_handshake_log("anti_replay: duplicate ClientHello found\n"); + return gnutls_assert_val(GNUTLS_E_EARLY_DATA_REJECTED); + } + + return 0; +} + +/** + * gnutls_anti_replay_set_ptr: + * @anti_replay: is a #gnutls_anti_replay_t type. + * @ptr: is the pointer + * + * Sets the pointer that will be provided to db add function + * as the first argument. + **/ +void gnutls_anti_replay_set_ptr(gnutls_anti_replay_t anti_replay, void *ptr) +{ + anti_replay->db_ptr = ptr; +} + +/** + * gnutls_anti_replay_set_add_function: + * @anti_replay: is a #gnutls_anti_replay_t type. + * @add_func: is the function. + * + * Sets the function that will be used to store an entry if it is not + * already present in the resumed sessions database. This function returns 0 + * if the entry is successfully stored, and a negative error code + * otherwise. In particular, if the entry is found in the database, + * it returns %GNUTLS_E_DB_ENTRY_EXISTS. + * + * The arguments to the @add_func are: + * - %ptr: the pointer set with gnutls_anti_replay_set_ptr() + * - %exp_time: the expiration time of the entry + * - %key: a pointer to the key + * - %data: a pointer to data to store + * + * The data set by this function can be examined using + * gnutls_db_check_entry_expire_time() and gnutls_db_check_entry_time(). + * + * Since: 3.6.5 + **/ +void +gnutls_anti_replay_set_add_function(gnutls_anti_replay_t anti_replay, + gnutls_db_add_func add_func) +{ + anti_replay->db_add_func = add_func; +} diff --git a/lib/tls13/anti_replay.h b/lib/tls13/anti_replay.h new file mode 100644 index 0000000000..87726c3939 --- /dev/null +++ b/lib/tls13/anti_replay.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_TLS13_ANTI_REPLAY_H +#define GNUTLS_LIB_TLS13_ANTI_REPLAY_H + +int _gnutls_anti_replay_check(gnutls_anti_replay_t, + uint32_t client_ticket_age, + struct timespec *ticket_creation_time, + gnutls_datum_t *id); + +#endif /* GNUTLS_LIB_TLS13_ANTI_REPLAY_H */ diff --git a/lib/tls13/certificate.c b/lib/tls13/certificate.c new file mode 100644 index 0000000000..7483251a53 --- /dev/null +++ b/lib/tls13/certificate.c @@ -0,0 +1,525 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "extv.h" +#include "handshake.h" +#include "tls13/certificate.h" +#include "auth/cert.h" +#include "mbuffers.h" +#include "ext/status_request.h" + +static int parse_cert_extension(void *ctx, unsigned tls_id, const uint8_t *data, unsigned data_size); +static int parse_cert_list(gnutls_session_t session, uint8_t * data, size_t data_size); + +int _gnutls13_recv_certificate(gnutls_session_t session) +{ + int ret; + gnutls_buffer_st buf; + unsigned optional = 0; + + if (!session->internals.initial_negotiation_completed && + session->internals.hsk_flags & HSK_PSK_SELECTED) + return 0; + + if (session->security_parameters.entity == GNUTLS_SERVER) { + /* if we didn't request a certificate, there will not be any */ + if (session->internals.send_cert_req == 0) + return 0; + + if (session->internals.send_cert_req != GNUTLS_CERT_REQUIRE) + optional = 1; + } + + ret = _gnutls_recv_handshake(session, GNUTLS_HANDSHAKE_CERTIFICATE_PKT, 0, &buf); + if (ret < 0) { + if (ret == GNUTLS_E_UNEXPECTED_HANDSHAKE_PACKET && session->internals.send_cert_req) + return gnutls_assert_val(GNUTLS_E_NO_CERTIFICATE_FOUND); + + return gnutls_assert_val(ret); + } + + if (buf.length == 0) { + gnutls_assert(); + ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + goto cleanup; + } + + if (session->internals.initial_negotiation_completed && + session->internals.post_handshake_cr_context.size > 0) { + gnutls_datum_t context; + + /* verify whether the context matches */ + ret = _gnutls_buffer_pop_datum_prefix8(&buf, &context); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (context.size != session->internals.post_handshake_cr_context.size || + memcmp(context.data, session->internals.post_handshake_cr_context.data, + context.size) != 0) { + ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + gnutls_assert(); + goto cleanup; + } + } else { + if (buf.data[0] != 0) { + /* The context field must be empty during handshake */ + gnutls_assert(); + ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + goto cleanup; + } + + /* buf.length is positive */ + buf.data++; + buf.length--; + } + + _gnutls_handshake_log("HSK[%p]: parsing certificate message\n", session); + + ret = parse_cert_list(session, buf.data, buf.length); + if (ret < 0) { + if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND) { + if (optional) + ret = 0; + else if (session->security_parameters.entity == + GNUTLS_SERVER) + ret = GNUTLS_E_CERTIFICATE_REQUIRED; + } + gnutls_assert(); + goto cleanup; + } + + session->internals.hsk_flags |= HSK_CRT_VRFY_EXPECTED; + + ret = 0; +cleanup: + + _gnutls_buffer_clear(&buf); + return ret; +} + +struct ocsp_req_ctx_st { + gnutls_pcert_st *pcert; + unsigned cert_index; + gnutls_session_t session; + gnutls_certificate_credentials_t cred; +}; + +static +int append_status_request(void *_ctx, gnutls_buffer_st *buf) +{ + struct ocsp_req_ctx_st *ctx = _ctx; + gnutls_session_t session = ctx->session; + int ret; + gnutls_datum_t resp; + unsigned free_resp = 0; + + assert(session->internals.selected_ocsp_func != NULL || + session->internals.selected_ocsp_length != 0); + + /* The global ocsp callback function can only be used to return + * a single certificate request */ + if (session->internals.selected_ocsp_length == 1 && ctx->cert_index != 0) + return 0; + + if (session->internals.selected_ocsp_length > 0) { + if (ctx->cert_index < session->internals.selected_ocsp_length) { + if ((session->internals.selected_ocsp[ctx->cert_index].exptime != 0 && + gnutls_time(0) >= session->internals.selected_ocsp[ctx->cert_index].exptime) || + session->internals.selected_ocsp[ctx->cert_index].response.data == NULL) { + return 0; + } + + resp.data = session->internals.selected_ocsp[ctx->cert_index].response.data; + resp.size = session->internals.selected_ocsp[ctx->cert_index].response.size; + ret = 0; + } else { + return 0; + } + } else if (session->internals.selected_ocsp_func) { + if (ctx->cert_index == 0) { + ret = session->internals.selected_ocsp_func(session, session->internals.selected_ocsp_func_ptr, &resp); + free_resp = 1; + } else { + return 0; + } + } else + return 0; + + if (ret == GNUTLS_E_NO_CERTIFICATE_STATUS || resp.data == 0) { + return 0; + } else if (ret < 0) { + return gnutls_assert_val(ret); + } + + ret = _gnutls_buffer_append_data(buf, "\x01", 1); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data_prefix(buf, 24, resp.data, resp.size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = 0; + cleanup: + if (free_resp) + gnutls_free(resp.data); + return ret; +} + +int _gnutls13_send_certificate(gnutls_session_t session, unsigned again) +{ + int ret; + gnutls_pcert_st *apr_cert_list = NULL; + gnutls_privkey_t apr_pkey = NULL; + int apr_cert_list_length = 0; + mbuffer_st *bufel = NULL; + gnutls_buffer_st buf; + unsigned pos_mark, ext_pos_mark; + unsigned i; + struct ocsp_req_ctx_st ctx; + gnutls_certificate_credentials_t cred; + + if (again == 0) { + if (!session->internals.initial_negotiation_completed && + session->internals.hsk_flags & HSK_PSK_SELECTED) + return 0; + + if (session->security_parameters.entity == GNUTLS_SERVER && + session->internals.resumed) + return 0; + + cred = (gnutls_certificate_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + if (cred == NULL) { + gnutls_assert(); + return GNUTLS_E_INSUFFICIENT_CREDENTIALS; + } + + if (session->security_parameters.entity == GNUTLS_CLIENT && + !(session->internals.hsk_flags & HSK_CRT_ASKED)) { + return 0; + } + + ret = _gnutls_get_selected_cert(session, &apr_cert_list, + &apr_cert_list_length, &apr_pkey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); + + if (session->security_parameters.entity == GNUTLS_CLIENT) { + ret = _gnutls_buffer_append_data_prefix(&buf, 8, + session->internals.post_handshake_cr_context.data, + session->internals.post_handshake_cr_context.size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + } else { + ret = _gnutls_buffer_append_prefix(&buf, 8, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } + + /* mark total size */ + pos_mark = buf.length; + ret = _gnutls_buffer_append_prefix(&buf, 24, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + for (i=0;i<(unsigned)apr_cert_list_length;i++) { + ret = _gnutls_buffer_append_data_prefix(&buf, 24, + apr_cert_list[i].cert.data, + apr_cert_list[i].cert.size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + +#ifdef ENABLE_OCSP + if ((session->internals.selected_ocsp_length > 0 || + session->internals.selected_ocsp_func) && + (((session->internals.hsk_flags & HSK_OCSP_REQUESTED) && IS_SERVER(session)) || + ((session->internals.hsk_flags & HSK_CLIENT_OCSP_REQUESTED) && !IS_SERVER(session)))) { + /* append status response if available */ + ret = _gnutls_extv_append_init(&buf); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + ext_pos_mark = ret; + + ctx.pcert = &apr_cert_list[i]; + ctx.cert_index = i; + ctx.session = session; + ctx.cred = cred; + ret = _gnutls_extv_append(&buf, STATUS_REQUEST_TLS_ID, + &ctx, append_status_request); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_extv_append_final(&buf, ext_pos_mark, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } else +#endif + { + ret = _gnutls_buffer_append_prefix(&buf, 16, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } + } + + _gnutls_write_uint24(buf.length-pos_mark-3, &buf.data[pos_mark]); + + bufel = _gnutls_buffer_to_mbuffer(&buf); + } + + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_CERTIFICATE_PKT); + + cleanup: + _gnutls_buffer_clear(&buf); + return ret; +} + +typedef struct crt_cert_ctx_st { + gnutls_session_t session; + gnutls_datum_t *ocsp; + unsigned idx; +} crt_cert_ctx_st; + +static int parse_cert_extension(void *_ctx, unsigned tls_id, const uint8_t *data, unsigned data_size) +{ + crt_cert_ctx_st *ctx = _ctx; + gnutls_session_t session = ctx->session; + int ret; + + if (tls_id == STATUS_REQUEST_TLS_ID) { +#ifdef ENABLE_OCSP + if (!_gnutls_hello_ext_is_present(session, ext_mod_status_request.gid)) { + gnutls_assert(); + goto unexpected; + } + + _gnutls_handshake_log("Found OCSP response on cert %d\n", ctx->idx); + + ret = _gnutls_parse_ocsp_response(session, data, data_size, ctx->ocsp); + if (ret < 0) + return gnutls_assert_val(ret); +#endif + } else { + goto unexpected; + } + + return 0; + + unexpected: + _gnutls_debug_log("received unexpected certificate extension (%d)\n", (int)tls_id); + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); +} + +static int +parse_cert_list(gnutls_session_t session, uint8_t * data, size_t data_size) +{ + int ret; + size_t len; + uint8_t *p = data; + cert_auth_info_t info; + gnutls_certificate_credentials_t cred; + size_t size; + int i; + unsigned npeer_certs, npeer_ocsp, j; + crt_cert_ctx_st ctx; + gnutls_datum_t *peer_certs = NULL; + gnutls_datum_t *peer_ocsp = NULL; + unsigned nentries = 0; + + cred = (gnutls_certificate_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + if (cred == NULL) { + gnutls_assert(); + return GNUTLS_E_INSUFFICIENT_CREDENTIALS; + } + + if ((ret = + _gnutls_auth_info_init(session, GNUTLS_CRD_CERTIFICATE, + sizeof(cert_auth_info_st), 1)) < 0) { + gnutls_assert(); + return ret; + } + + if (data == NULL || data_size == 0) { + /* no certificate was sent */ + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + } + + info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); + if (info == NULL) + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + + DECR_LEN(data_size, 3); + size = _gnutls_read_uint24(p); + p += 3; + + if (size != data_size) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + if (size == 0) + return gnutls_assert_val(GNUTLS_E_NO_CERTIFICATE_FOUND); + + i = data_size; + + while (i > 0) { + DECR_LEN(data_size, 3); + len = _gnutls_read_uint24(p); + if (len == 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + DECR_LEN(data_size, len); + p += len + 3; + i -= len + 3; + + DECR_LEN(data_size, 2); + len = _gnutls_read_uint16(p); + DECR_LEN(data_size, len); + + i -= len + 2; + p += len + 2; + + nentries++; + } + + if (data_size != 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + /* this is unnecessary - keeping to avoid a regression due to a re-org + * of the loop above */ + if (nentries == 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + npeer_ocsp = 0; + npeer_certs = 0; + + /* Ok we now allocate the memory to hold the + * certificate list + */ + peer_certs = gnutls_calloc(nentries, sizeof(gnutls_datum_t)); + if (peer_certs == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + peer_ocsp = gnutls_calloc(nentries, sizeof(gnutls_datum_t)); + if (peer_ocsp == NULL) { + ret = gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + goto cleanup; + } + + p = data+3; + + /* Now we start parsing the list (again). + * We don't use DECR_LEN since the list has + * been parsed before. + */ + + ctx.session = session; + + for (j = 0; j < nentries; j++) { + len = _gnutls_read_uint24(p); + p += 3; + + ret = _gnutls_set_datum(&peer_certs[j], p, len); + if (ret < 0) { + gnutls_assert(); + ret = GNUTLS_E_CERTIFICATE_ERROR; + goto cleanup; + } + npeer_certs++; + + p += len; + + len = _gnutls_read_uint16(p); + + ctx.ocsp = &peer_ocsp[j]; + ctx.idx = j; + + ret = _gnutls_extv_parse(&ctx, parse_cert_extension, p, len+2); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + p += len+2; + npeer_ocsp++; + } + + /* The OCSP entries match the certificate entries, although + * the contents of each OCSP entry may be NULL. + */ + for(j=0;jncerts;j++) + gnutls_free(info->raw_certificate_list[j].data); + gnutls_free(info->raw_certificate_list); + + for(j=0;jnocsp;j++) + gnutls_free(info->raw_ocsp_list[j].data); + gnutls_free(info->raw_ocsp_list); + + + info->raw_certificate_list = peer_certs; + info->ncerts = npeer_certs; + + info->raw_ocsp_list = peer_ocsp; + info->nocsp = npeer_ocsp; + + return 0; + + cleanup: + for(j=0;j + * + */ + +#ifndef GNUTLS_LIB_TLS13_CERTIFICATE_H +#define GNUTLS_LIB_TLS13_CERTIFICATE_H + +int _gnutls13_recv_certificate(gnutls_session_t session); +int _gnutls13_send_certificate(gnutls_session_t session, unsigned again); + +#endif /* GNUTLS_LIB_TLS13_CERTIFICATE_H */ diff --git a/lib/tls13/certificate_request.c b/lib/tls13/certificate_request.c new file mode 100644 index 0000000000..37e7b41049 --- /dev/null +++ b/lib/tls13/certificate_request.c @@ -0,0 +1,378 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "extv.h" +#include "handshake.h" +#include "tls13/certificate_request.h" +#include "ext/signature.h" +#include "ext/status_request.h" +#include "mbuffers.h" +#include "algorithms.h" +#include "auth/cert.h" + +/* for tlist dereference */ +#include "x509/verify-high.h" + +#define EXTID_CERTIFICATE_AUTHORITIES 47 + +typedef struct crt_req_ctx_st { + gnutls_session_t session; + unsigned got_sig_algo; + gnutls_pk_algorithm_t pk_algos[MAX_ALGOS]; + unsigned pk_algos_length; + const uint8_t *rdn; /* pointer inside the message buffer */ + unsigned rdn_size; +} crt_req_ctx_st; + +static unsigned is_algo_in_list(gnutls_pk_algorithm_t algo, gnutls_pk_algorithm_t *list, unsigned list_size) +{ + unsigned j; + + for (j=0;jsession; + unsigned v; + int ret; + + /* Decide which certificate to use if the signature algorithms extension + * is present. + */ + if (tls_id == ext_mod_sig.tls_id) { + const version_entry_st *ver = get_version(session); + const gnutls_sign_entry_st *se; + /* signature algorithms; let's use it to decide the certificate to use */ + unsigned i; + + if (ctx->got_sig_algo) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + + ctx->got_sig_algo = 1; + + if (data_size < 2) + return gnutls_assert_val(GNUTLS_E_TLS_PACKET_DECODING_ERROR); + + v = _gnutls_read_uint16(data); + if (v != data_size-2) + return gnutls_assert_val(GNUTLS_E_TLS_PACKET_DECODING_ERROR); + + data += 2; + data_size -= 2; + + ret = _gnutls_sign_algorithm_parse_data(session, data, data_size); + if (ret < 0) + return gnutls_assert_val(ret); + + /* The APIs to retrieve a client certificate accept the public + * key algorithms instead of signatures. Get the public key algorithms + * from the signatures. + */ + for (i=0;i<(unsigned)data_size;i+=2) { + se = _gnutls_tls_aid_to_sign_entry(data[i], data[i+1], ver); + if (se == NULL) + continue; + + if (ctx->pk_algos_length >= sizeof(ctx->pk_algos)/sizeof(ctx->pk_algos[0])) + break; + + if (is_algo_in_list(se->pk, ctx->pk_algos, ctx->pk_algos_length)) + continue; + + ctx->pk_algos[ctx->pk_algos_length++] = se->pk; + } +#ifdef ENABLE_OCSP + } else if (tls_id == ext_mod_status_request.tls_id) { + if (data_size != 0) + return gnutls_assert_val(GNUTLS_E_TLS_PACKET_DECODING_ERROR); + + /* we are now allowed to send OCSP staples */ + session->internals.hsk_flags |= HSK_CLIENT_OCSP_REQUESTED; +#endif + } else if (tls_id == EXTID_CERTIFICATE_AUTHORITIES) { + if (data_size < 3) { + return gnutls_assert_val(GNUTLS_E_TLS_PACKET_DECODING_ERROR); + } + + v = _gnutls_read_uint16(data); + if (v != data_size-2) + return gnutls_assert_val(GNUTLS_E_TLS_PACKET_DECODING_ERROR); + + ctx->rdn = data+2; + ctx->rdn_size = v; + } + + return 0; +} + +int _gnutls13_recv_certificate_request_int(gnutls_session_t session, gnutls_buffer_st *buf) +{ + int ret; + crt_req_ctx_st ctx; + gnutls_pcert_st *apr_cert_list; + gnutls_privkey_t apr_pkey; + int apr_cert_list_length; + + _gnutls_handshake_log("HSK[%p]: parsing certificate request\n", session); + + if (unlikely(session->security_parameters.entity == GNUTLS_SERVER)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + /* if initial negotiation is complete, this is a post-handshake auth */ + if (!session->internals.initial_negotiation_completed) { + if (buf->data[0] != 0) { + /* The context field must be empty during handshake */ + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } + + /* buf->length is positive */ + buf->data++; + buf->length--; + } else { + gnutls_datum_t context; + + ret = _gnutls_buffer_pop_datum_prefix8(buf, &context); + if (ret < 0) + return gnutls_assert_val(ret); + + gnutls_free(session->internals.post_handshake_cr_context.data); + ret = _gnutls_set_datum(&session->internals.post_handshake_cr_context, + context.data, context.size); + if (ret < 0) + return gnutls_assert_val(ret); + } + + memset(&ctx, 0, sizeof(ctx)); + ctx.session = session; + + ret = _gnutls_extv_parse(&ctx, parse_cert_extension, buf->data, buf->length); + if (ret < 0) + return gnutls_assert_val(ret); + + /* The "signature_algorithms" extension MUST be specified */ + if (!ctx.got_sig_algo) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION); + + session->internals.hsk_flags |= HSK_CRT_ASKED; + + ret = _gnutls_select_client_cert(session, ctx.rdn, ctx.rdn_size, + ctx.pk_algos, ctx.pk_algos_length); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_get_selected_cert(session, &apr_cert_list, + &apr_cert_list_length, &apr_pkey); + if (ret < 0) + return gnutls_assert_val(ret); + + if (apr_cert_list_length > 0) { + gnutls_sign_algorithm_t algo; + + algo = _gnutls_session_get_sign_algo(session, &apr_cert_list[0], apr_pkey, 0, GNUTLS_KX_UNKNOWN); + if (algo == GNUTLS_SIGN_UNKNOWN) { + _gnutls_handshake_log("HSK[%p]: rejecting client auth because of no suitable signature algorithm\n", session); + _gnutls_selected_certs_deinit(session); + return gnutls_assert_val(0); + } + + gnutls_sign_algorithm_set_client(session, algo); + } + + return 0; +} + +int _gnutls13_recv_certificate_request(gnutls_session_t session) +{ + int ret; + gnutls_buffer_st buf; + + if (!session->internals.initial_negotiation_completed && + session->internals.hsk_flags & HSK_PSK_SELECTED) + return 0; + + if (unlikely(session->security_parameters.entity != GNUTLS_CLIENT)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + ret = _gnutls_recv_handshake(session, GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST, 1, &buf); + if (ret < 0) + return gnutls_assert_val(ret); + + /* if not received */ + if (buf.length == 0) { + _gnutls_buffer_clear(&buf); + return 0; + } + + ret = _gnutls13_recv_certificate_request_int(session, &buf); + + _gnutls_buffer_clear(&buf); + return ret; +} + +static +int write_certificate_authorities(void *ctx, gnutls_buffer_st *buf) +{ + gnutls_session_t session = ctx; + gnutls_certificate_credentials_t cred; + + if (session->internals.ignore_rdn_sequence != 0) + return 0; + + cred = (gnutls_certificate_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + if (cred == NULL) { + gnutls_assert(); + return GNUTLS_E_INSUFFICIENT_CREDENTIALS; + } + + if (cred->tlist->x509_rdn_sequence.size == 0) + return 0; + + return + _gnutls_buffer_append_data_prefix(buf, 16, + cred-> + tlist->x509_rdn_sequence. + data, + cred-> + tlist->x509_rdn_sequence. + size); +} + +static int append_empty_ext(void *ctx, gnutls_buffer_st *buf) +{ + return GNUTLS_E_INT_RET_0; +} + +int _gnutls13_send_certificate_request(gnutls_session_t session, unsigned again) +{ + gnutls_certificate_credentials_t cred; + int ret; + mbuffer_st *bufel = NULL; + gnutls_buffer_st buf; + unsigned init_pos; + + if (again == 0) { + unsigned char rnd[12]; + + if (!session->internals.initial_negotiation_completed && + session->internals.hsk_flags & HSK_PSK_SELECTED) + return 0; + + if (session->internals.send_cert_req == 0) + return 0; + + cred = (gnutls_certificate_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + if (cred == NULL) + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); + + if (session->internals.initial_negotiation_completed) { /* reauth */ + ret = gnutls_rnd(GNUTLS_RND_NONCE, rnd, sizeof(rnd)); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + gnutls_free(session->internals.post_handshake_cr_context.data); + ret = _gnutls_set_datum(&session->internals.post_handshake_cr_context, + rnd, sizeof(rnd)); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data_prefix(&buf, 8, + session->internals.post_handshake_cr_context.data, + session->internals.post_handshake_cr_context.size); + } else { + ret = _gnutls_buffer_append_prefix(&buf, 8, 0); + } + + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_extv_append_init(&buf); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + init_pos = ret; + + ret = _gnutls_extv_append(&buf, ext_mod_sig.tls_id, session, + (extv_append_func)_gnutls_sign_algorithm_write_params); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_extv_append(&buf, EXTID_CERTIFICATE_AUTHORITIES, session, + write_certificate_authorities); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + +#ifdef ENABLE_OCSP + /* We always advertise our support for OCSP stapling */ + ret = _gnutls_extv_append(&buf, ext_mod_status_request.tls_id, session, + append_empty_ext); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + session->internals.hsk_flags |= HSK_CLIENT_OCSP_REQUESTED; +#endif + + ret = _gnutls_extv_append_final(&buf, init_pos, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + bufel = _gnutls_buffer_to_mbuffer(&buf); + + session->internals.hsk_flags |= HSK_CRT_REQ_SENT; + } + + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST); + + cleanup: + _gnutls_buffer_clear(&buf); + return ret; + +} + diff --git a/lib/tls13/certificate_request.h b/lib/tls13/certificate_request.h new file mode 100644 index 0000000000..40ac9f2ca2 --- /dev/null +++ b/lib/tls13/certificate_request.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_TLS13_CERTIFICATE_REQUEST_H +#define GNUTLS_LIB_TLS13_CERTIFICATE_REQUEST_H + +int _gnutls13_recv_certificate_request(gnutls_session_t session); +int _gnutls13_recv_certificate_request_int(gnutls_session_t session, gnutls_buffer_st *buf); + +int _gnutls13_send_certificate_request(gnutls_session_t session, unsigned again); + +#endif /* GNUTLS_LIB_TLS13_CERTIFICATE_REQUEST_H */ diff --git a/lib/tls13/certificate_verify.c b/lib/tls13/certificate_verify.c new file mode 100644 index 0000000000..45ff6facfc --- /dev/null +++ b/lib/tls13/certificate_verify.c @@ -0,0 +1,241 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "handshake.h" +#include "auth/cert.h" +#include "ext/signature.h" +#include "algorithms.h" +#include "tls13-sig.h" +#include "mbuffers.h" +#include "tls13/certificate_verify.h" + +#define SRV_CTX "TLS 1.3, server CertificateVerify" +static const gnutls_datum_t srv_ctx = { + (void*)SRV_CTX, sizeof(SRV_CTX)-1 +}; + +#define CLI_CTX "TLS 1.3, client CertificateVerify" +static const gnutls_datum_t cli_ctx = { + (void*)CLI_CTX, sizeof(CLI_CTX)-1 +}; + +int _gnutls13_recv_certificate_verify(gnutls_session_t session) +{ + int ret; + gnutls_buffer_st buf; + const gnutls_sign_entry_st *se; + gnutls_datum_t sig_data; + gnutls_certificate_credentials_t cred; + unsigned vflags; + gnutls_pcert_st peer_cert; + cert_auth_info_t info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); + bool server = 0; + gnutls_certificate_type_t cert_type; + + memset(&peer_cert, 0, sizeof(peer_cert)); + + /* this message is only expected if we have received + * a certificate message */ + if (!(session->internals.hsk_flags & HSK_CRT_VRFY_EXPECTED)) + return 0; + + if (session->security_parameters.entity == GNUTLS_SERVER) + server = 1; + + cred = (gnutls_certificate_credentials_t) + _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); + if (unlikely(cred == NULL)) + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + if (unlikely(info == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + ret = _gnutls_recv_handshake(session, GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY, 0, &buf); + if (ret < 0) + return gnutls_assert_val(ret); + + _gnutls_handshake_log("HSK[%p]: Parsing certificate verify\n", session); + + if (buf.length < 2) { + gnutls_assert(); + ret = GNUTLS_E_UNEXPECTED_PACKET_LENGTH; + goto cleanup; + } + + se = _gnutls_tls_aid_to_sign_entry(buf.data[0], buf.data[1], get_version(session)); + if (se == NULL) { + _gnutls_handshake_log("Found unsupported signature (%d.%d)\n", (int)buf.data[0], (int)buf.data[1]); + ret = gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + goto cleanup; + } + + if (server) + gnutls_sign_algorithm_set_client(session, se->id); + else + gnutls_sign_algorithm_set_server(session, se->id); + + buf.data+=2; + buf.length-=2; + + /* we check during verification whether the algorithm is enabled */ + + ret = _gnutls_buffer_pop_datum_prefix16(&buf, &sig_data); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (sig_data.size == 0) { + gnutls_assert(); + ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + goto cleanup; + } + + /* We verify the certificate of the peer. Therefore we need to + * retrieve the negotiated certificate type for the peer. */ + cert_type = get_certificate_type(session, GNUTLS_CTYPE_PEERS); + + /* Verify the signature */ + ret = _gnutls_get_auth_info_pcert(&peer_cert, cert_type, info); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + vflags = cred->verify_flags | session->internals.additional_verify_flags; + + ret = _gnutls13_handshake_verify_data(session, vflags, &peer_cert, + server?(&cli_ctx):(&srv_ctx), + &sig_data, se); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (buf.length > 0) { + gnutls_assert(); + ret = GNUTLS_E_UNEXPECTED_PACKET_LENGTH; + goto cleanup; + } + + ret = 0; + cleanup: + gnutls_pcert_deinit(&peer_cert); + _gnutls_buffer_clear(&buf); + return ret; +} + +int _gnutls13_send_certificate_verify(gnutls_session_t session, unsigned again) +{ + int ret; + gnutls_pcert_st *apr_cert_list; + gnutls_privkey_t apr_pkey; + int apr_cert_list_length; + mbuffer_st *bufel = NULL; + gnutls_buffer_st buf; + gnutls_datum_t sig = {NULL, 0}; + gnutls_sign_algorithm_t algo; + const gnutls_sign_entry_st *se; + bool server = 0; + + if (again == 0) { + if (!session->internals.initial_negotiation_completed && + session->internals.hsk_flags & HSK_PSK_SELECTED) + return 0; + + if (session->security_parameters.entity == GNUTLS_SERVER && + session->internals.resumed) + return 0; + + if (session->security_parameters.entity == GNUTLS_SERVER) + server = 1; + + ret = _gnutls_get_selected_cert(session, &apr_cert_list, + &apr_cert_list_length, &apr_pkey); + if (ret < 0) + return gnutls_assert_val(ret); + + if (apr_cert_list_length == 0) { + if (server) { + return gnutls_assert_val(GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } else { + /* for client, this means either we + * didn't get a cert request or we are + * declining authentication; in either + * case we don't send a cert verify */ + return 0; + } + } + + if (server) { + algo = _gnutls_session_get_sign_algo(session, &apr_cert_list[0], apr_pkey, 0, GNUTLS_KX_UNKNOWN); + if (algo == GNUTLS_SIGN_UNKNOWN) + return gnutls_assert_val(GNUTLS_E_INCOMPATIBLE_SIG_WITH_KEY); + + gnutls_sign_algorithm_set_server(session, algo); + } else { + /* for client, signature algorithm is already + * determined from Certificate Request */ + algo = gnutls_sign_algorithm_get_client(session); + if (unlikely(algo == GNUTLS_SIGN_UNKNOWN)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + } + + se = _gnutls_sign_to_entry(algo); + + ret = _gnutls13_handshake_sign_data(session, &apr_cert_list[0], apr_pkey, + server?(&srv_ctx):(&cli_ctx), + &sig, se); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data(&buf, se->aid.id, 2); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data_prefix(&buf, 16, sig.data, sig.size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + bufel = _gnutls_buffer_to_mbuffer(&buf); + + gnutls_free(sig.data); + } + + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY); + + cleanup: + gnutls_free(sig.data); + _gnutls_buffer_clear(&buf); + return ret; +} diff --git a/lib/tls13/certificate_verify.h b/lib/tls13/certificate_verify.h new file mode 100644 index 0000000000..9d4ce3135f --- /dev/null +++ b/lib/tls13/certificate_verify.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_TLS13_CERTIFICATE_VERIFY_H +#define GNUTLS_LIB_TLS13_CERTIFICATE_VERIFY_H + +int _gnutls13_recv_certificate_verify(gnutls_session_t session); +int _gnutls13_send_certificate_verify(gnutls_session_t session, unsigned again); + +#endif /* GNUTLS_LIB_TLS13_CERTIFICATE_VERIFY_H */ diff --git a/lib/tls13/early_data.c b/lib/tls13/early_data.c new file mode 100644 index 0000000000..ccace901b9 --- /dev/null +++ b/lib/tls13/early_data.c @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "handshake.h" +#include "tls13/early_data.h" + +int _gnutls13_send_early_data(gnutls_session_t session) +{ + int ret; + + if (!(session->security_parameters.entity == GNUTLS_CLIENT && + session->internals.hsk_flags & HSK_EARLY_DATA_IN_FLIGHT)) + return 0; + + while (session->internals.early_data_presend_buffer.length > 0) { + ret = + gnutls_record_send(session, + session->internals. + early_data_presend_buffer.data, + session->internals. + early_data_presend_buffer. + length); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.early_data_presend_buffer.data += ret; + session->internals.early_data_presend_buffer.length -= ret; + } + + + return 0; +} + +int _gnutls13_send_end_of_early_data(gnutls_session_t session, unsigned again) +{ + int ret; + mbuffer_st *bufel = NULL; + gnutls_buffer_st buf; + + if (!(session->security_parameters.entity == GNUTLS_CLIENT && + session->internals.hsk_flags & HSK_EARLY_DATA_ACCEPTED)) + return 0; + + if (again == 0) { + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); + + bufel = _gnutls_buffer_to_mbuffer(&buf); + } + + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_END_OF_EARLY_DATA); +} + +int _gnutls13_recv_end_of_early_data(gnutls_session_t session) +{ + int ret; + gnutls_buffer_st buf; + + if (!(session->security_parameters.entity == GNUTLS_SERVER && + session->internals.hsk_flags & HSK_EARLY_DATA_ACCEPTED)) + return 0; + + ret = _gnutls_recv_handshake(session, GNUTLS_HANDSHAKE_END_OF_EARLY_DATA, 0, &buf); + if (ret < 0) + return gnutls_assert_val(ret); + + if (buf.length != 0) { + gnutls_assert(); + ret = GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER; + goto cleanup; + } + + session->internals.hsk_flags &= ~HSK_EARLY_DATA_IN_FLIGHT; + + ret = 0; +cleanup: + + _gnutls_buffer_clear(&buf); + return ret; +} diff --git a/lib/tls13/early_data.h b/lib/tls13/early_data.h new file mode 100644 index 0000000000..6fef12c107 --- /dev/null +++ b/lib/tls13/early_data.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_TLS13_EARLY_DATA_H +#define GNUTLS_LIB_TLS13_EARLY_DATA_H + +int _gnutls13_send_end_of_early_data(gnutls_session_t session, unsigned again); +int _gnutls13_recv_end_of_early_data(gnutls_session_t session); +int _gnutls13_send_early_data(gnutls_session_t session); + +#endif /* GNUTLS_LIB_TLS13_EARLY_DATA_H */ diff --git a/lib/tls13/encrypted_extensions.c b/lib/tls13/encrypted_extensions.c new file mode 100644 index 0000000000..84c328ff26 --- /dev/null +++ b/lib/tls13/encrypted_extensions.c @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "hello_ext.h" +#include "handshake.h" +#include "mbuffers.h" +#include "tls13/encrypted_extensions.h" + +int _gnutls13_recv_encrypted_extensions(gnutls_session_t session) +{ + int ret; + gnutls_buffer_st buf; + + ret = _gnutls_recv_handshake(session, GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS, 0, &buf); + if (ret < 0) + return gnutls_assert_val(ret); + + _gnutls_handshake_log("HSK[%p]: parsing encrypted extensions\n", session); + ret = _gnutls_parse_hello_extensions(session, GNUTLS_EXT_FLAG_EE, GNUTLS_EXT_ANY, + buf.data, buf.length); + _gnutls_buffer_clear(&buf); + + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + +int _gnutls13_send_encrypted_extensions(gnutls_session_t session, unsigned again) +{ + int ret; + mbuffer_st *bufel = NULL; + gnutls_buffer_st buf; + + if (again == 0) { + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_gen_hello_extensions(session, &buf, GNUTLS_EXT_FLAG_EE, GNUTLS_EXT_ANY); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + bufel = _gnutls_buffer_to_mbuffer(&buf); + } + + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS); + + cleanup: + _gnutls_buffer_clear(&buf); + return ret; +} diff --git a/lib/tls13/encrypted_extensions.h b/lib/tls13/encrypted_extensions.h new file mode 100644 index 0000000000..2c7cf7534a --- /dev/null +++ b/lib/tls13/encrypted_extensions.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_TLS13_ENCRYPTED_EXTENSIONS_H +#define GNUTLS_LIB_TLS13_ENCRYPTED_EXTENSIONS_H + +int _gnutls13_recv_encrypted_extensions(gnutls_session_t session); +int _gnutls13_send_encrypted_extensions(gnutls_session_t session, unsigned again); + +#endif /* GNUTLS_LIB_TLS13_ENCRYPTED_EXTENSIONS_H */ diff --git a/lib/tls13/finished.c b/lib/tls13/finished.c new file mode 100644 index 0000000000..35ab87f9af --- /dev/null +++ b/lib/tls13/finished.c @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "handshake.h" +#include "tls13/finished.h" +#include "mem.h" +#include "mbuffers.h" +#include "secrets.h" + +int _gnutls13_compute_finished(const mac_entry_st *prf, + const uint8_t *base_key, + gnutls_buffer_st *handshake_hash_buffer, + void *out) +{ + int ret; + uint8_t fkey[MAX_HASH_SIZE]; + uint8_t ts_hash[MAX_HASH_SIZE]; + + ret = _tls13_expand_secret2(prf, + "finished", 8, + NULL, 0, + base_key, + prf->output_size, fkey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = gnutls_hash_fast(prf->id, + handshake_hash_buffer->data, + handshake_hash_buffer->length, + ts_hash); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = gnutls_hmac_fast(prf->id, + fkey, prf->output_size, + ts_hash, prf->output_size, + out); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + +int _gnutls13_recv_finished(gnutls_session_t session) +{ + int ret; + gnutls_buffer_st buf; + uint8_t verifier[MAX_HASH_SIZE]; + const uint8_t *base_key; + unsigned hash_size; + + if (unlikely(session->security_parameters.prf == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + hash_size = session->security_parameters.prf->output_size; + + if (!session->internals.initial_negotiation_completed) { + if (session->security_parameters.entity == GNUTLS_CLIENT) + base_key = session->key.proto.tls13.hs_skey; + else + base_key = session->key.proto.tls13.hs_ckey; + } else { + if (session->security_parameters.entity == GNUTLS_CLIENT) + base_key = session->key.proto.tls13.ap_skey; + else + base_key = session->key.proto.tls13.ap_ckey; + } + + ret = _gnutls13_compute_finished(session->security_parameters.prf, + base_key, + &session->internals.handshake_hash_buffer, + verifier); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_recv_handshake(session, GNUTLS_HANDSHAKE_FINISHED, 0, &buf); + if (ret < 0) + return gnutls_assert_val(ret); + + _gnutls_handshake_log("HSK[%p]: parsing finished\n", session); + + if (buf.length != hash_size) { + gnutls_assert(); + ret = GNUTLS_E_UNEXPECTED_PACKET_LENGTH; + goto cleanup; + } + + +#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) +# warning This is unsafe for production builds +#else + if (safe_memcmp(verifier, buf.data, buf.length) != 0) { + gnutls_assert(); + ret = GNUTLS_E_ERROR_IN_FINISHED_PACKET; + goto cleanup; + } +#endif + + ret = 0; +cleanup: + + _gnutls_buffer_clear(&buf); + return ret; +} + +int _gnutls13_send_finished(gnutls_session_t session, unsigned again) +{ + int ret; + uint8_t verifier[MAX_HASH_SIZE]; + mbuffer_st *bufel = NULL; + const uint8_t *base_key; + unsigned hash_size; + + if (again == 0) { + if (unlikely(session->security_parameters.prf == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + hash_size = session->security_parameters.prf->output_size; + + if (!session->internals.initial_negotiation_completed) { + if (session->security_parameters.entity == GNUTLS_CLIENT) + base_key = session->key.proto.tls13.hs_ckey; + else + base_key = session->key.proto.tls13.hs_skey; + } else { + if (session->security_parameters.entity == GNUTLS_CLIENT) + base_key = session->key.proto.tls13.ap_ckey; + else + base_key = session->key.proto.tls13.ap_skey; + } + + ret = _gnutls13_compute_finished(session->security_parameters.prf, + base_key, + &session->internals.handshake_hash_buffer, + verifier); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + _gnutls_handshake_log("HSK[%p]: sending finished\n", session); + + bufel = _gnutls_handshake_alloc(session, hash_size); + if (bufel == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + _mbuffer_set_udata_size(bufel, 0); + ret = _mbuffer_append_data(bufel, verifier, hash_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } + + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_FINISHED); + +cleanup: + _mbuffer_xfree(&bufel); + return ret; +} diff --git a/lib/tls13/finished.h b/lib/tls13/finished.h new file mode 100644 index 0000000000..cf475b220f --- /dev/null +++ b/lib/tls13/finished.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_TLS13_FINISHED_H +#define GNUTLS_LIB_TLS13_FINISHED_H + +int _gnutls13_compute_finished(const mac_entry_st *prf, + const uint8_t *base_key, + gnutls_buffer_st *handshake_hash_buffer, + void *out); +int _gnutls13_recv_finished(gnutls_session_t session); +int _gnutls13_send_finished(gnutls_session_t session, unsigned again); + +#endif /* GNUTLS_LIB_TLS13_FINISHED_H */ diff --git a/lib/tls13/hello_retry.c b/lib/tls13/hello_retry.c new file mode 100644 index 0000000000..dd4cba576a --- /dev/null +++ b/lib/tls13/hello_retry.c @@ -0,0 +1,195 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "hello_ext.h" +#include "handshake.h" +#include "tls13/hello_retry.h" +#include "auth/cert.h" +#include "mbuffers.h" +#include "state.h" + +int _gnutls13_send_hello_retry_request(gnutls_session_t session, unsigned again) +{ + int ret; + mbuffer_st *bufel = NULL; + gnutls_buffer_st buf; + const version_entry_st *ver; + const uint8_t vbuf[2] = {0x03, 0x03}; + + if (again == 0) { + ver = get_version(session); + if (unlikely(ver == NULL || session->security_parameters.cs == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + ret = _gnutls_buffer_init_handshake_mbuffer(&buf); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_buffer_append_data(&buf, vbuf, 2); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_buffer_append_data(&buf, + HRR_RANDOM, + GNUTLS_RANDOM_SIZE); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data_prefix(&buf, 8, + session->security_parameters.session_id, + session->security_parameters.session_id_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_buffer_append_data(&buf, session->security_parameters.cs->id, 2); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + /* compression */ + ret = _gnutls_buffer_append_prefix(&buf, 8, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_gen_hello_extensions(session, &buf, + GNUTLS_EXT_FLAG_HRR, + GNUTLS_EXT_ANY); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + /* reset extensions sent by this session to allow re-sending them */ + session->internals.used_exts = 0; + + reset_binders(session); + + bufel = _gnutls_buffer_to_mbuffer(&buf); + } + + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST); + + cleanup: + _gnutls_buffer_clear(&buf); + return ret; +} + +int +_gnutls13_recv_hello_retry_request(gnutls_session_t session, + gnutls_buffer_st *buf) +{ + int ret; + uint8_t tmp[2]; + const gnutls_cipher_suite_entry_st *cs; + const mac_entry_st *prf; + gnutls_datum_t session_id; + uint8_t random[GNUTLS_RANDOM_SIZE]; + + /* only under TLS 1.3 */ + if (IS_DTLS(session)) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + + if (session->internals.hsk_flags & HSK_HRR_RECEIVED) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + + session->internals.hsk_flags |= HSK_HRR_RECEIVED; + + /* version */ + ret = _gnutls_buffer_pop_data(buf, tmp, 2); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + if (unlikely(tmp[0] != 0x03 || tmp[1] != 0x03)) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_VERSION_PACKET); + + ret = _gnutls_buffer_pop_data(buf, random, GNUTLS_RANDOM_SIZE); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + if (memcmp(random, HRR_RANDOM, GNUTLS_RANDOM_SIZE) != 0) { + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } + + ret = _gnutls_buffer_pop_datum_prefix8(buf, &session_id); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + /* read ciphersuites */ + ret = _gnutls_buffer_pop_data(buf, tmp, 2); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + cs = ciphersuite_to_entry(tmp); + if (unlikely(cs == NULL)) + return gnutls_assert_val(GNUTLS_E_UNKNOWN_CIPHER_SUITE); + + _gnutls_handshake_log("EXT[%p]: Hello Retry Request with %s\n", session, cs->name); + memcpy(session->internals.hrr_cs, cs->id, 2); + + prf = mac_to_entry(cs->prf); + if (unlikely(prf == NULL)) + return gnutls_assert_val(GNUTLS_E_UNKNOWN_CIPHER_SUITE); + + /* compression */ + ret = _gnutls_buffer_pop_data(buf, tmp, 1); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + if (unlikely(tmp[0] != 0)) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + ret = _gnutls13_handshake_hash_buffers_synth(session, prf, 1); + if (ret < 0) + return gnutls_assert_val(ret); + + if (buf->length <= 2) { + /* no extensions present */ + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_EXTENSIONS_LENGTH); + } + + /* figure version first */ + ret = + _gnutls_parse_hello_extensions(session, GNUTLS_EXT_FLAG_HRR, + GNUTLS_EXT_VERSION_NEG, + buf->data, buf->length); + if (ret < 0) + return gnutls_assert_val(ret); + + /* parse the rest of extensions */ + ret = _gnutls_parse_hello_extensions(session, GNUTLS_EXT_FLAG_HRR, GNUTLS_EXT_ANY, + buf->data, buf->length); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.used_exts = 0; + + return 0; +} diff --git a/lib/tls13/hello_retry.h b/lib/tls13/hello_retry.h new file mode 100644 index 0000000000..373670f208 --- /dev/null +++ b/lib/tls13/hello_retry.h @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_TLS13_HELLO_RETRY_H +#define GNUTLS_LIB_TLS13_HELLO_RETRY_H + +int _gnutls13_send_hello_retry_request(gnutls_session_t session, unsigned again); + +#endif /* GNUTLS_LIB_TLS13_HELLO_RETRY_H */ diff --git a/lib/tls13/key_update.c b/lib/tls13/key_update.c new file mode 100644 index 0000000000..c6f6e0aa11 --- /dev/null +++ b/lib/tls13/key_update.c @@ -0,0 +1,217 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "handshake.h" +#include "tls13/key_update.h" +#include "mem.h" +#include "mbuffers.h" +#include "secrets.h" + +#define KEY_UPDATES_WINDOW 1000 +#define KEY_UPDATES_PER_WINDOW 8 + +static int update_keys(gnutls_session_t session, hs_stage_t stage) +{ + int ret; + + ret = _tls13_update_secret(session, session->key.proto.tls13.temp_secret, + session->key.proto.tls13.temp_secret_size); + if (ret < 0) + return gnutls_assert_val(ret); + + _gnutls_epoch_bump(session); + ret = _gnutls_epoch_dup(session, EPOCH_READ_CURRENT); + if (ret < 0) + return gnutls_assert_val(ret); + + /* If we send a key update during early start, only update our + * write keys */ + if (session->internals.recv_state == RECV_STATE_EARLY_START) { + ret = _tls13_write_connection_state_init(session, stage); + } else { + ret = _tls13_connection_state_init(session, stage); + } + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + +int _gnutls13_recv_key_update(gnutls_session_t session, gnutls_buffer_st *buf) +{ + int ret; + struct timespec now; + + if (buf->length != 1) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET_LENGTH); + + gnutls_gettime(&now); + + /* Roll over the counter if the time window has elapsed */ + if (session->internals.key_update_count == 0 || + timespec_sub_ms(&now, &session->internals.last_key_update) > + KEY_UPDATES_WINDOW) { + session->internals.last_key_update = now; + session->internals.key_update_count = 0; + } + + if (unlikely(++session->internals.key_update_count > + KEY_UPDATES_PER_WINDOW)) { + _gnutls_debug_log("reached maximum number of key updates per %d milliseconds (%d)\n", + KEY_UPDATES_WINDOW, + KEY_UPDATES_PER_WINDOW); + return gnutls_assert_val(GNUTLS_E_TOO_MANY_HANDSHAKE_PACKETS); + } + + _gnutls_epoch_gc(session); + + _gnutls_handshake_log("HSK[%p]: received TLS 1.3 key update (%u)\n", + session, (unsigned)buf->data[0]); + + switch(buf->data[0]) { + case 0: + /* peer updated its key, not requested our key update */ + ret = update_keys(session, STAGE_UPD_PEERS); + if (ret < 0) + return gnutls_assert_val(ret); + + break; + case 1: + if (session->internals.hsk_flags & HSK_KEY_UPDATE_ASKED) { + /* if we had asked a key update we shouldn't get this + * reply */ + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + } + + /* peer updated its key, requested our key update */ + ret = update_keys(session, STAGE_UPD_PEERS); + if (ret < 0) + return gnutls_assert_val(ret); + + /* we mark that a key update is schedule, and it + * will be performed prior to sending the next application + * message. + */ + if (session->internals.rsend_state == RECORD_SEND_NORMAL) + session->internals.rsend_state = RECORD_SEND_KEY_UPDATE_1; + else if (session->internals.rsend_state == RECORD_SEND_CORKED) + session->internals.rsend_state = RECORD_SEND_CORKED_TO_KU; + + break; + default: + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + } + + session->internals.hsk_flags &= ~(unsigned)(HSK_KEY_UPDATE_ASKED); + + return 0; +} + +int _gnutls13_send_key_update(gnutls_session_t session, unsigned again, unsigned flags /* GNUTLS_KU_* */) +{ + int ret; + mbuffer_st *bufel = NULL; + uint8_t val; + + if (again == 0) { + if (flags & GNUTLS_KU_PEER) { + /* mark that we asked a key update to prevent an + * infinite ping pong when receiving the reply */ + session->internals.hsk_flags |= HSK_KEY_UPDATE_ASKED; + val = 0x01; + } else { + val = 0x00; + } + + _gnutls_handshake_log("HSK[%p]: sending key update (%u)\n", session, (unsigned)val); + + bufel = _gnutls_handshake_alloc(session, 1); + if (bufel == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + _mbuffer_set_udata_size(bufel, 0); + ret = _mbuffer_append_data(bufel, &val, 1); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + } + + return _gnutls_send_handshake(session, bufel, GNUTLS_HANDSHAKE_KEY_UPDATE); + +cleanup: + _mbuffer_xfree(&bufel); + return ret; +} + +/** + * gnutls_session_key_update: + * @session: is a #gnutls_session_t type. + * @flags: zero of %GNUTLS_KU_PEER + * + * This function will update/refresh the session keys when the + * TLS protocol is 1.3 or better. The peer is notified of the + * update by sending a message, so this function should be + * treated similarly to gnutls_record_send() --i.e., it may + * return %GNUTLS_E_AGAIN or %GNUTLS_E_INTERRUPTED. + * + * When this flag %GNUTLS_KU_PEER is specified, this function + * in addition to updating the local keys, will ask the peer to + * refresh its keys too. + * + * If the negotiated version is not TLS 1.3 or better this + * function will return %GNUTLS_E_INVALID_REQUEST. + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.6.3 + **/ +int gnutls_session_key_update(gnutls_session_t session, unsigned flags) +{ + int ret; + const version_entry_st *vers = get_version(session); + + if (!vers->tls13_sem) + return GNUTLS_E_INVALID_REQUEST; + + ret = + _gnutls13_send_key_update(session, AGAIN(STATE150), flags); + STATE = STATE150; + + if (ret < 0) { + gnutls_assert(); + return ret; + } + STATE = STATE0; + + _gnutls_epoch_gc(session); + + /* it was completely sent, update the keys */ + ret = update_keys(session, STAGE_UPD_OURS); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} diff --git a/lib/tls13/key_update.h b/lib/tls13/key_update.h new file mode 100644 index 0000000000..4a0123a1fb --- /dev/null +++ b/lib/tls13/key_update.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_TLS13_KEY_UPDATE_H +#define GNUTLS_LIB_TLS13_KEY_UPDATE_H + +int _gnutls13_recv_key_update(gnutls_session_t session, gnutls_buffer_st *buf); +int _gnutls13_send_key_update(gnutls_session_t session, unsigned again, unsigned flags); + +#endif /* GNUTLS_LIB_TLS13_KEY_UPDATE_H */ diff --git a/lib/tls13/post_handshake.c b/lib/tls13/post_handshake.c new file mode 100644 index 0000000000..97ca287db7 --- /dev/null +++ b/lib/tls13/post_handshake.c @@ -0,0 +1,252 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* Functions that relate to the TLS handshake procedure. + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "dh.h" +#include "debug.h" +#include "algorithms.h" +#include "cipher.h" +#include "buffers.h" +#include "mbuffers.h" +#include "kx.h" +#include "handshake.h" +#include "num.h" +#include "hash_int.h" +#include "db.h" +#include "hello_ext.h" +#include "supplemental.h" +#include "auth.h" +#include "sslv2_compat.h" +#include +#include "constate.h" +#include +#include +#include +#include +#include "tls13/certificate_request.h" +#include "tls13/certificate_verify.h" +#include "tls13/certificate.h" +#include "tls13/finished.h" + +#undef AGAIN +#define AGAIN(x) ((x)==(REAUTH_STATE)) + +/* + * _gnutls13_reauth_client + * This function performs the client side of the post-handshake authentication + */ +static +int _gnutls13_reauth_client(gnutls_session_t session) +{ + int ret = 0; + size_t tmp; + + if (!session->internals.initial_negotiation_completed) + return gnutls_assert_val(GNUTLS_E_UNAVAILABLE_DURING_HANDSHAKE); + + if (!(session->internals.flags & GNUTLS_POST_HANDSHAKE_AUTH)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (session->internals.reauth_buffer.length == 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + switch (REAUTH_STATE) { + case REAUTH_STATE0: + + /* restore handshake transcript */ + _gnutls_buffer_reset(&session->internals.handshake_hash_buffer); + ret = gnutls_buffer_append_data(&session->internals.handshake_hash_buffer, + session->internals.post_handshake_hash_buffer.data, + session->internals.post_handshake_hash_buffer.length); + if (ret < 0) + return gnutls_assert_val(ret); + + /* append the previously received certificate request message, to the + * transcript. */ + ret = gnutls_buffer_append_data(&session->internals.handshake_hash_buffer, + session->internals.reauth_buffer.data, + session->internals.reauth_buffer.length); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.handshake_hash_buffer_prev_len = session->internals.handshake_hash_buffer.length; + + /* skip the reauth buffer handshake message headers */ + ret = _gnutls_buffer_pop_prefix32(&session->internals.reauth_buffer, &tmp, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + FALLTHROUGH; + case REAUTH_STATE1: + ret = _gnutls13_recv_certificate_request_int(session, + &session->internals.reauth_buffer); + REAUTH_STATE = REAUTH_STATE1; + IMED_RET("recv certificate request", ret, 0); + FALLTHROUGH; + case REAUTH_STATE2: + ret = _gnutls13_send_certificate(session, AGAIN(REAUTH_STATE2)); + REAUTH_STATE = REAUTH_STATE2; + IMED_RET("send certificate", ret, 0); + FALLTHROUGH; + case REAUTH_STATE3: + ret = _gnutls13_send_certificate_verify(session, AGAIN(REAUTH_STATE3)); + REAUTH_STATE = REAUTH_STATE3; + IMED_RET("send certificate verify", ret, 0); + FALLTHROUGH; + case REAUTH_STATE4: + ret = _gnutls13_send_finished(session, AGAIN(REAUTH_STATE4)); + REAUTH_STATE = REAUTH_STATE4; + IMED_RET("send finished", ret, 0); + break; + default: + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + } + + _gnutls_handshake_hash_buffers_clear(session); + _gnutls_buffer_reset(&session->internals.reauth_buffer); + REAUTH_STATE = REAUTH_STATE0; + + return 0; +} + +/* + * _gnutls13_reauth_server + * This function does the server stuff of the post-handshake authentication. + */ +static +int _gnutls13_reauth_server(gnutls_session_t session) +{ + int ret = 0; + + if (session->security_parameters.post_handshake_auth == 0 || + (!(session->internals.flags & GNUTLS_POST_HANDSHAKE_AUTH))) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (session->internals.send_cert_req == 0) { + _gnutls_debug_log("You need to call gnutls_certificate_server_set_request to enable post handshake auth\n"); + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } + + switch (REAUTH_STATE) { + case REAUTH_STATE0: + /* restore handshake transcript */ + _gnutls_buffer_reset(&session->internals.handshake_hash_buffer); + ret = gnutls_buffer_append_data(&session->internals.handshake_hash_buffer, + session->internals.post_handshake_hash_buffer.data, + session->internals.post_handshake_hash_buffer.length); + if (ret < 0) + return gnutls_assert_val(ret); + + session->internals.handshake_hash_buffer_prev_len = session->internals.handshake_hash_buffer.length; + + FALLTHROUGH; + case REAUTH_STATE1: + ret = _gnutls13_send_certificate_request(session, AGAIN(REAUTH_STATE1)); + REAUTH_STATE = REAUTH_STATE1; + IMED_RET("send certificate request", ret, 0); + FALLTHROUGH; + case REAUTH_STATE2: + /* here we should tolerate application data */ + ret = _gnutls13_recv_certificate(session); + REAUTH_STATE = REAUTH_STATE2; + IMED_RET("recv certificate", ret, 0); + FALLTHROUGH; + case REAUTH_STATE3: + ret = _gnutls13_recv_certificate_verify(session); + REAUTH_STATE = REAUTH_STATE3; + IMED_RET("recv certificate verify", ret, 0); + FALLTHROUGH; + case REAUTH_STATE4: + ret = _gnutls_run_verify_callback(session, GNUTLS_CLIENT); + REAUTH_STATE = REAUTH_STATE4; + if (ret < 0) + return gnutls_assert_val(ret); + FALLTHROUGH; + case REAUTH_STATE5: + ret = _gnutls13_recv_finished(session); + REAUTH_STATE = REAUTH_STATE5; + IMED_RET("recv finished", ret, 0); + break; + default: + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + } + + _gnutls_handshake_hash_buffers_clear(session); + REAUTH_STATE = REAUTH_STATE0; + + return 0; +} + +/** + * gnutls_reauth: + * @session: is a #gnutls_session_t type. + * @flags: must be zero + * + * This function performs the post-handshake authentication + * for TLS 1.3. The post-handshake authentication is initiated by the server + * by calling this function. Clients respond when %GNUTLS_E_REAUTH_REQUEST + * has been seen while receiving data. + * + * The non-fatal errors expected by this function are: + * %GNUTLS_E_INTERRUPTED, %GNUTLS_E_AGAIN, as well as + * %GNUTLS_E_GOT_APPLICATION_DATA when called on server side. + * + * The former two interrupt the authentication procedure due to the transport + * layer being interrupted, and the latter because there were pending data prior + * to peer initiating the re-authentication. The server should read/process that + * data as unauthenticated and retry calling gnutls_reauth(). + * + * When this function is called under TLS1.2 or earlier or the peer didn't + * advertise post-handshake auth, it always fails with + * %GNUTLS_E_INVALID_REQUEST. The verification of the received peers certificate + * is delegated to the session or credentials verification callbacks. A + * server can check whether post handshake authentication is supported + * by the client by checking the session flags with gnutls_session_get_flags(). + * + * Prior to calling this function in server side, the function + * gnutls_certificate_server_set_request() must be called setting expectations + * for the received certificate (request or require). If none are set + * this function will return with %GNUTLS_E_INVALID_REQUEST. + * + * Note that post handshake authentication is available irrespective + * of the initial negotiation type (PSK or certificate). In all cases + * however, certificate credentials must be set to the session prior + * to calling this function. + * + * Returns: %GNUTLS_E_SUCCESS on a successful authentication, otherwise a negative error code. + **/ +int gnutls_reauth(gnutls_session_t session, unsigned int flags) +{ + const version_entry_st *vers = get_version(session); + + if (unlikely(!vers->tls13_sem)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (session->security_parameters.entity == GNUTLS_SERVER) + return _gnutls13_reauth_server(session); + else + return _gnutls13_reauth_client(session); +} diff --git a/lib/tls13/psk_ext_parser.c b/lib/tls13/psk_ext_parser.c new file mode 100644 index 0000000000..33ebc04615 --- /dev/null +++ b/lib/tls13/psk_ext_parser.c @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2017-2018 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Ander Juaristi, Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "tls13/psk_ext_parser.h" + +/* Returns GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE when no identities + * are present, or 0, on success. + */ +int _gnutls13_psk_ext_parser_init(psk_ext_parser_st *p, + const unsigned char *data, size_t len) +{ + if (!p || !data || !len) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + memset(p, 0, sizeof(*p)); + + DECR_LEN(len, 2); + p->identities_len = _gnutls_read_uint16(data); + data += 2; + + if (p->identities_len == 0) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + p->identities_data = (unsigned char *) data; + + DECR_LEN(len, p->identities_len); + data += p->identities_len; + + DECR_LEN(len, 2); + p->binders_len = _gnutls_read_uint16(data); + data += 2; + + p->binders_data = data; + DECR_LEN(len, p->binders_len); + + return 0; +} + +/* Extract PSK identity and move to the next iteration. + * + * Returns GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE when no more identities + * are present, or 0, on success. + */ +int _gnutls13_psk_ext_iter_next_identity(psk_ext_iter_st *iter, + struct psk_st *psk) +{ + if (iter->identities_len == 0) + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + + DECR_LEN(iter->identities_len, 2); + psk->identity.size = _gnutls_read_uint16(iter->identities_data); + if (psk->identity.size == 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + iter->identities_data += 2; + psk->identity.data = (void*)iter->identities_data; + + DECR_LEN(iter->identities_len, psk->identity.size); + iter->identities_data += psk->identity.size; + + DECR_LEN(iter->identities_len, 4); + psk->ob_ticket_age = _gnutls_read_uint32(iter->identities_data); + iter->identities_data += 4; + + return 0; +} + +/* Extract PSK binder and move to the next iteration. + * + * Returns GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE when no more identities + * are present, or 0, on success. + */ +int _gnutls13_psk_ext_iter_next_binder(psk_ext_iter_st *iter, + gnutls_datum_t *binder) +{ + if (iter->binders_len == 0) + return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + + DECR_LEN(iter->binders_len, 1); + binder->size = *iter->binders_data; + if (binder->size == 0) + return gnutls_assert_val(GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + iter->binders_data++; + binder->data = (uint8_t *)iter->binders_data; + DECR_LEN(iter->binders_len, binder->size); + iter->binders_data += binder->size; + + return 0; +} diff --git a/lib/tls13/psk_ext_parser.h b/lib/tls13/psk_ext_parser.h new file mode 100644 index 0000000000..f46b211e0a --- /dev/null +++ b/lib/tls13/psk_ext_parser.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2017 Free Software Foundation, Inc. + * + * Author: Ander Juaristi + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_TLS13_PSK_EXT_PARSER_H +#define GNUTLS_LIB_TLS13_PSK_EXT_PARSER_H + +struct psk_ext_parser_st { + const unsigned char *identities_data; + size_t identities_len; + + const unsigned char *binders_data; + size_t binders_len; +}; + +typedef struct psk_ext_parser_st psk_ext_parser_st; +typedef struct psk_ext_parser_st psk_ext_iter_st; + +struct psk_st { + /* constant values */ + gnutls_datum_t identity; + uint32_t ob_ticket_age; +}; + +int _gnutls13_psk_ext_parser_init(psk_ext_parser_st *p, + const unsigned char *data, size_t len); + +inline static +void _gnutls13_psk_ext_iter_init(psk_ext_iter_st *iter, + const psk_ext_parser_st *p) +{ + memcpy(iter, p, sizeof(*p)); +} + +int _gnutls13_psk_ext_iter_next_identity(psk_ext_iter_st *iter, + struct psk_st *psk); +int _gnutls13_psk_ext_iter_next_binder(psk_ext_iter_st *iter, + gnutls_datum_t *binder); + +#endif /* GNUTLS_LIB_TLS13_PSK_EXT_PARSER_H */ diff --git a/lib/tls13/session_ticket.c b/lib/tls13/session_ticket.c new file mode 100644 index 0000000000..072a56d9c1 --- /dev/null +++ b/lib/tls13/session_ticket.c @@ -0,0 +1,492 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos, Ander Juaristi + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "errors.h" +#include "extv.h" +#include "handshake.h" +#include "mbuffers.h" +#include "ext/pre_shared_key.h" +#include "ext/session_ticket.h" +#include "ext/early_data.h" +#include "auth/cert.h" +#include "tls13/session_ticket.h" +#include "session_pack.h" +#include "db.h" + +static int +pack_ticket(gnutls_session_t session, tls13_ticket_st *ticket, gnutls_datum_t *packed) +{ + uint8_t *p; + gnutls_datum_t state; + int ret; + + ret = _gnutls_session_pack(session, &state); + if (ret < 0) + return gnutls_assert_val(ret); + + packed->size = 2 + 4 + 4 + + 1 + ticket->prf->output_size + + 1 + ticket->nonce_size + 2 + state.size + 12; + + packed->data = gnutls_malloc(packed->size); + if (!packed->data) { + gnutls_assert(); + ret = GNUTLS_E_MEMORY_ERROR; + goto cleanup; + } + + p = packed->data; + + _gnutls_write_uint16(ticket->prf->id, p); + p += 2; + _gnutls_write_uint32(ticket->age_add, p); + p += 4; + _gnutls_write_uint32(ticket->lifetime, p); + p += 4; + *p = ticket->prf->output_size; + p += 1; + memcpy(p, ticket->resumption_master_secret, ticket->prf->output_size); + p += ticket->prf->output_size; + *p = ticket->nonce_size; + + p += 1; + memcpy(p, ticket->nonce, ticket->nonce_size); + p += ticket->nonce_size; + + _gnutls_write_uint16(state.size, p); + p += 2; + + memcpy(p, state.data, state.size); + p += state.size; + + _gnutls_write_uint32((uint64_t) ticket->creation_time.tv_sec >> 32, p); + p += 4; + _gnutls_write_uint32(ticket->creation_time.tv_sec & 0xFFFFFFFF, p); + p += 4; + _gnutls_write_uint32(ticket->creation_time.tv_nsec, p); + + ret = 0; + + cleanup: + gnutls_free(state.data); + return ret; +} + +static int +unpack_ticket(gnutls_session_t session, gnutls_datum_t *packed, tls13_ticket_st *data) +{ + uint32_t age_add, lifetime; + struct timespec creation_time; + uint8_t resumption_master_secret[MAX_HASH_SIZE]; + size_t resumption_master_secret_size; + uint8_t nonce[UINT8_MAX]; + size_t nonce_size; + gnutls_datum_t state; + gnutls_mac_algorithm_t kdf; + const mac_entry_st *prf; + uint8_t *p; + size_t len; + uint64_t v; + int ret; + + if (unlikely(packed == NULL || data == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + memset(data, 0, sizeof(*data)); + + p = packed->data; + len = packed->size; + + DECR_LEN(len, 2); + kdf = _gnutls_read_uint16(p); + p += 2; + + /* Check if the MAC ID we got is valid */ + prf = _gnutls_mac_to_entry(kdf); + if (prf == NULL) + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + + /* Read the ticket age add and the ticket lifetime */ + DECR_LEN(len, 4); + age_add = _gnutls_read_uint32(p); + p += 4; + + DECR_LEN(len, 4); + lifetime = _gnutls_read_uint32(p); + p += 4; + + /* + * Check if the whole ticket is large enough, + * and read the resumption master secret + */ + DECR_LEN(len, 1); + resumption_master_secret_size = *p; + p += 1; + + /* Check if the size of resumption_master_secret matches the PRF */ + if (resumption_master_secret_size != prf->output_size) + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + + DECR_LEN(len, resumption_master_secret_size); + memcpy(resumption_master_secret, p, resumption_master_secret_size); + p += resumption_master_secret_size; + + /* Read the ticket nonce */ + DECR_LEN(len, 1); + nonce_size = *p; + p += 1; + + DECR_LEN(len, nonce_size); + memcpy(nonce, p, nonce_size); + p += nonce_size; + + DECR_LEN(len, 2); + state.size = _gnutls_read_uint16(p); + p += 2; + + DECR_LEN(len, state.size); + state.data = p; + p += state.size; + + DECR_LEN(len, 12); + v = _gnutls_read_uint32(p); + p += 4; + creation_time.tv_sec = (v << 32) | _gnutls_read_uint32(p); + p += 4; + creation_time.tv_nsec = _gnutls_read_uint32(p); + + ret = _gnutls_session_unpack(session, &state); + if (ret < 0) + return gnutls_assert_val(ret); + + /* No errors - Now return all the data to the caller */ + data->prf = prf; + memcpy(data->resumption_master_secret, resumption_master_secret, + resumption_master_secret_size); + memcpy(data->nonce, nonce, nonce_size); + data->nonce_size = nonce_size; + data->age_add = age_add; + data->lifetime = lifetime; + memcpy(&data->creation_time, &creation_time, sizeof(struct timespec)); + + return 0; +} + +static int +generate_session_ticket(gnutls_session_t session, tls13_ticket_st *ticket) +{ + int ret; + gnutls_datum_t packed = { NULL, 0 }; + struct timespec now; + tls13_ticket_st ticket_data; + + gnutls_gettime(&now); + if (session->internals.resumed != RESUME_FALSE) { + /* If we are resuming ensure that we don't extend the lifetime + * of the ticket past the original session expiration time */ + if (now.tv_sec >= session->security_parameters.timestamp + session->internals.expire_time) + return GNUTLS_E_INT_RET_0; /* don't send ticket */ + else + ticket->lifetime = session->security_parameters.timestamp + + session->internals.expire_time - now.tv_sec; + } else { + /* Set ticket lifetime to the default expiration time */ + ticket->lifetime = session->internals.expire_time; + } + + /* Generate a random 32-bit ticket nonce */ + ticket->nonce_size = 4; + + if ((ret = gnutls_rnd(GNUTLS_RND_NONCE, + ticket->nonce, ticket->nonce_size)) < 0) + return gnutls_assert_val(ret); + + if ((ret = gnutls_rnd(GNUTLS_RND_NONCE, &ticket->age_add, sizeof(uint32_t))) < 0) + return gnutls_assert_val(ret); + /* This is merely to produce the same binder value on + * different endian architectures. */ +#ifdef WORDS_BIGENDIAN + ticket->age_add = bswap_32(ticket->age_add); +#endif + + ticket->prf = session->security_parameters.prf; + + /* Encrypt the ticket and place the result in ticket->ticket */ + ticket_data.lifetime = ticket->lifetime; + ticket_data.age_add = ticket->age_add; + memcpy(&ticket_data.creation_time, &now, sizeof(struct timespec)); + memcpy(ticket_data.nonce, ticket->nonce, ticket->nonce_size); + ticket_data.nonce_size = ticket->nonce_size; + ticket_data.prf = ticket->prf; + memcpy(&ticket_data.resumption_master_secret, + session->key.proto.tls13.ap_rms, + ticket->prf->output_size); + + ret = pack_ticket(session, &ticket_data, &packed); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = _gnutls_encrypt_session_ticket(session, &packed, &ticket->ticket); + _gnutls_free_datum(&packed); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + +static int append_nst_extension(void *ctx, gnutls_buffer_st *buf) +{ + gnutls_session_t session = ctx; + int ret; + + if (!(session->internals.flags & GNUTLS_ENABLE_EARLY_DATA)) + return 0; + + ret = _gnutls_buffer_append_prefix(buf, 32, + session->security_parameters. + max_early_data_size); + if (ret < 0) + gnutls_assert(); + + return ret; +} + +int _gnutls13_send_session_ticket(gnutls_session_t session, unsigned nr, unsigned again) +{ + int ret = 0; + mbuffer_st *bufel = NULL; + gnutls_buffer_st buf; + tls13_ticket_st ticket; + unsigned i; + + /* Client does not send a NewSessionTicket */ + if (unlikely(session->security_parameters.entity == GNUTLS_CLIENT)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + /* Session resumption has not been enabled */ + if (session->internals.flags & GNUTLS_NO_TICKETS) + return gnutls_assert_val(0); + + /* If we received the psk_key_exchange_modes extension which + * does not have overlap with the server configuration, don't + * send a session ticket */ + if (session->internals.hsk_flags & HSK_PSK_KE_MODE_INVALID) + return gnutls_assert_val(0); + + if (again == 0) { + for (i=0;iinternals.hsk_flags |= HSK_TLS13_TICKET_SENT; + } + } + + ret = _gnutls_handshake_io_write_flush(session); + + return ret; + +cleanup: + _gnutls_free_datum(&ticket.ticket); + _mbuffer_xfree(&bufel); + _gnutls_buffer_clear(&buf); + + return ret; +} + +static int parse_nst_extension(void *ctx, unsigned tls_id, const unsigned char *data, unsigned data_size) +{ + gnutls_session_t session = ctx; + if (tls_id == ext_mod_early_data.tls_id) { + if (data_size < 4) + return gnutls_assert_val(GNUTLS_E_TLS_PACKET_DECODING_ERROR); + session->security_parameters.max_early_data_size = + _gnutls_read_uint32(data); + } + return 0; +} + +int _gnutls13_recv_session_ticket(gnutls_session_t session, gnutls_buffer_st *buf) +{ + int ret; + uint8_t value; + tls13_ticket_st *ticket = &session->internals.tls13_ticket; + gnutls_datum_t t; + size_t val; + + if (unlikely(buf == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + _gnutls_free_datum(&ticket->ticket); + memset(ticket, 0, sizeof(tls13_ticket_st)); + + _gnutls_handshake_log("HSK[%p]: parsing session ticket message\n", session); + + /* ticket_lifetime */ + ret = _gnutls_buffer_pop_prefix32(buf, &val, 0); + if (ret < 0) + return gnutls_assert_val(ret); + ticket->lifetime = val; + + /* ticket_age_add */ + ret = _gnutls_buffer_pop_prefix32(buf, &val, 0); + if (ret < 0) + return gnutls_assert_val(ret); + ticket->age_add = val; + + /* ticket_nonce */ + ret = _gnutls_buffer_pop_prefix8(buf, &value, 0); + if (ret < 0) + return gnutls_assert_val(ret); + + ticket->nonce_size = value; + ret = _gnutls_buffer_pop_data(buf, ticket->nonce, ticket->nonce_size); + if (ret < 0) + return gnutls_assert_val(ret); + + /* ticket */ + ret = _gnutls_buffer_pop_datum_prefix16(buf, &t); + if (ret < 0) + return gnutls_assert_val(ret); + + gnutls_free(ticket->ticket.data); + ret = _gnutls_set_datum(&ticket->ticket, t.data, t.size); + if (ret < 0) + return gnutls_assert_val(ret); + + /* Extensions */ + ret = _gnutls_extv_parse(session, parse_nst_extension, buf->data, buf->length); + if (ret < 0) + return gnutls_assert_val(ret); + + /* Record the ticket arrival time */ + gnutls_gettime(&ticket->arrival_time); + + return 0; +} + +/* + * Parse the ticket in 'data' and return the resumption master secret + * and the KDF ID associated to it. + */ +int _gnutls13_unpack_session_ticket(gnutls_session_t session, + gnutls_datum_t *data, + tls13_ticket_st *ticket_data) +{ + int ret; + gnutls_datum_t decrypted = { NULL, 0 }; + + if (unlikely(data == NULL || ticket_data == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + /* Check MAC and decrypt ticket */ + ret = _gnutls_decrypt_session_ticket(session, data, &decrypted); + if (ret < 0) + return gnutls_assert_val(ret); + + /* Return ticket parameters */ + ret = unpack_ticket(session, &decrypted, ticket_data); + _gnutls_free_datum(&decrypted); + if (ret < 0) + return ret; + + ret = _gnutls_check_resumed_params(session); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} diff --git a/lib/tls13/session_ticket.h b/lib/tls13/session_ticket.h new file mode 100644 index 0000000000..cd65327e5a --- /dev/null +++ b/lib/tls13/session_ticket.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos, Ander Juaristi + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_TLS13_SESSION_TICKET_H +#define GNUTLS_LIB_TLS13_SESSION_TICKET_H + +int _gnutls13_recv_session_ticket(gnutls_session_t session, gnutls_buffer_st *buf); +int _gnutls13_send_session_ticket(gnutls_session_t session, unsigned nr, unsigned again); + +int _gnutls13_unpack_session_ticket(gnutls_session_t session, + gnutls_datum_t *data, + tls13_ticket_st *ticket_data); + +inline static +void tls13_ticket_deinit(tls13_ticket_st *ticket) +{ + if (ticket) { + zeroize_temp_key(&ticket->resumption_master_secret, + sizeof(ticket->resumption_master_secret)); + + _gnutls_free_datum(&ticket->ticket); + memset(ticket, 0, sizeof(tls13_ticket_st)); + } +} + +inline static +void _gnutls13_session_ticket_unset(gnutls_session_t session) +{ + if (session->internals.tls13_ticket.ticket.data != NULL) + tls13_ticket_deinit(&session->internals.tls13_ticket); +} + +#endif /* GNUTLS_LIB_TLS13_SESSION_TICKET_H */ diff --git a/lib/tpm.c b/lib/tpm.c index 1d63f83cb1..46b1ca970b 100644 --- a/lib/tpm.c +++ b/lib/tpm.c @@ -19,7 +19,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -72,7 +72,6 @@ typedef TSS_RESULT (*Tspi_Context_LoadKeyByBlob_func)(TSS_HCONTEXT, TSS_HKEY, UI typedef TSS_RESULT (*Tspi_Policy_AssignToObject_func)(TSS_HPOLICY, TSS_HOBJECT); typedef TSS_RESULT (*Tspi_GetAttribData_func)(TSS_HOBJECT, TSS_FLAG, TSS_FLAG, UINT32*, BYTE**); typedef TSS_RESULT (*Tspi_GetAttribUint32_func)(TSS_HOBJECT, TSS_FLAG, TSS_FLAG, UINT32*); -typedef TSS_RESULT (*Tspi_Context_GetTpmObject_func)(TSS_HCONTEXT, TSS_HTPM*); typedef TSS_RESULT (*Tspi_TPM_StirRandom_func)(TSS_HTPM, UINT32, BYTE*); typedef TSS_RESULT (*Tspi_SetAttribUint32_func)(TSS_HOBJECT, TSS_FLAG, TSS_FLAG, UINT32); typedef TSS_RESULT (*Tspi_EncodeDER_TssBlob_func)(UINT32, BYTE*, UINT32, UINT32*, BYTE*); @@ -422,6 +421,7 @@ static int tpm_open_session(struct tpm_ctx_st *s, const char *_srk_password, uns ret = tss_err(err); goto out_srkpol; } + gnutls_free(password); return 0; @@ -798,7 +798,11 @@ unescape_string(char *output, const char *input, size_t * size, return ret; } - _gnutls_buffer_pop_data(&str, output, size); + ret = _gnutls_buffer_pop_data(&str, output, str.length); + if (ret < 0) { + gnutls_assert(); + return ret; + } _gnutls_buffer_clear(&str); @@ -835,16 +839,11 @@ static int randomize_uuid(TSS_UUID * uuid) static int encode_tpmkey_url(char **url, const TSS_UUID * uuid, TSS_FLAG storage) { - size_t size = (UUID_SIZE * 2 + 4) * 2 + 32; uint8_t u1[UUID_SIZE]; gnutls_buffer_st buf; gnutls_datum_t dret; int ret; - *url = gnutls_malloc(size); - if (*url == NULL) - return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - _gnutls_buffer_init(&buf); memcpy(u1, &uuid->ulTimeLow, 4); @@ -1600,7 +1599,7 @@ gnutls_tpm_privkey_generate(gnutls_pk_algorithm_t pk, unsigned int bits, /* read the public key */ if (pubkey != NULL) { - size_t psize; + size_t psize = 0; ret = gnutls_pubkey_init(&pub); if (ret < 0) { @@ -1641,10 +1640,8 @@ gnutls_tpm_privkey_generate(gnutls_pk_algorithm_t pk, unsigned int bits, gnutls_pubkey_deinit(pub); privkey_cleanup: gnutls_free(privkey->data); - privkey->data = NULL; cleanup: gnutls_free(tmpkey.data); - tmpkey.data = NULL; err_sa: pTspi_Context_CloseObject(s.tpm_ctx, key_ctx); err_cc: diff --git a/lib/unistring/Makefile.am b/lib/unistring/Makefile.am deleted file mode 100644 index 537296abf1..0000000000 --- a/lib/unistring/Makefile.am +++ /dev/null @@ -1,1070 +0,0 @@ -## DO NOT EDIT! GENERATED AUTOMATICALLY! -## Process this file with automake to produce Makefile.in. -# Copyright (C) 2002-2016 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file. If not, see . -# -# As a special exception to the GNU General Public License, -# this file may be distributed as part of a program that -# contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --local-dir=lib/unistring/override --lib=libunistring --source-base=lib/unistring --m4-base=lib/unistring/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl=3orGPLv2 --no-conditional-dependencies --libtool --macro-prefix=unistring unictype/category-all unictype/property-default-ignorable-code-point unictype/property-join-control unictype/property-not-a-character uninorm/nfc uninorm/nfkc uninorm/u16-normalize uninorm/u32-normalize uninorm/u8-normalize unistr/u16-to-u8 unistr/u32-to-u8 unistr/u8-check unistr/u8-to-u16 unistr/u8-to-u32 - -AUTOMAKE_OPTIONS = 1.9.6 gnits subdir-objects - -SUBDIRS = -noinst_HEADERS = -noinst_LIBRARIES = -noinst_LTLIBRARIES = -EXTRA_DIST = -BUILT_SOURCES = -SUFFIXES = -MOSTLYCLEANFILES = core *.stackdump -MOSTLYCLEANDIRS = -CLEANFILES = -DISTCLEANFILES = -MAINTAINERCLEANFILES = -EXTRA_DIST += m4/gnulib-cache.m4 - -AM_CPPFLAGS = -AM_CFLAGS = - -noinst_LTLIBRARIES += libunistring.la - -libunistring_la_SOURCES = -libunistring_la_LIBADD = $(unistring_LTLIBOBJS) -libunistring_la_DEPENDENCIES = $(unistring_LTLIBOBJS) -EXTRA_libunistring_la_SOURCES = -libunistring_la_LDFLAGS = $(AM_LDFLAGS) -libunistring_la_LDFLAGS += -no-undefined - -## begin gnulib module absolute-header - -# Use this preprocessor expression to decide whether #include_next works. -# Do not rely on a 'configure'-time test for this, since the expression -# might appear in an installed header, which is used by some other compiler. -HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) - -## end gnulib module absolute-header - -## begin gnulib module array-mergesort - - -EXTRA_DIST += array-mergesort.h - -## end gnulib module array-mergesort - -## begin gnulib module gperf - -GPERF = gperf -V_GPERF = $(V_GPERF_@AM_V@) -V_GPERF_ = $(V_GPERF_@AM_DEFAULT_V@) -V_GPERF_0 = @echo " GPERF " $@; - -## end gnulib module gperf - -## begin gnulib module limits-h - -BUILT_SOURCES += $(LIMITS_H) - -# We need the following in order to create when the system -# doesn't have one that is compatible with GNU. -if GL_GENERATE_LIMITS_H -limits.h: limits.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL_UNISTRING|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ - < $(srcdir)/limits.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -limits.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += limits.h limits.h-t - -EXTRA_DIST += limits.in.h - -## end gnulib module limits-h - -## begin gnulib module snippet/unused-parameter - -# The BUILT_SOURCES created by this Makefile snippet are not used via #include -# statements but through direct file reference. Therefore this snippet must be -# present in all Makefile.am that need it. This is ensured by the applicability -# 'all' defined above. - -BUILT_SOURCES += unused-parameter.h -# The unused-parameter.h that gets inserted into generated .h files is the same -# as build-aux/snippet/unused-parameter.h, except that it has the copyright -# header cut off. -unused-parameter.h: $(top_srcdir)/build-aux/snippet/unused-parameter.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/GL_UNUSED_PARAMETER/,$$p' \ - < $(top_srcdir)/build-aux/snippet/unused-parameter.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += unused-parameter.h unused-parameter.h-t - -UNUSED_PARAMETER_H=unused-parameter.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/unused-parameter.h - -## end gnulib module snippet/unused-parameter - -## begin gnulib module stdbool - -BUILT_SOURCES += $(STDBOOL_H) - -# We need the following in order to create when the system -# doesn't have one that works. -if GL_GENERATE_STDBOOL_H -stdbool.h: stdbool.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -stdbool.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stdbool.h stdbool.h-t - -EXTRA_DIST += stdbool.in.h - -## end gnulib module stdbool - -## begin gnulib module stdint - -BUILT_SOURCES += $(STDINT_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -if GL_GENERATE_STDINT_H -stdint.h: stdint.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_UNISTRING|g' \ - -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ - -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ - -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ - -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ - -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ - -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ - -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ - -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ - -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ - -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ - -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ - -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ - -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ - -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ - -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ - -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ - -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ - -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ - -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ - < $(srcdir)/stdint.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -stdint.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stdint.h stdint.h-t - -EXTRA_DIST += stdint.in.h - -## end gnulib module stdint - -## begin gnulib module sys_types - -BUILT_SOURCES += sys/types.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -sys/types.h: sys_types.in.h $(top_builddir)/config.status - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_UNISTRING|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ - -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ - < $(srcdir)/sys_types.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += sys/types.h sys/types.h-t - -EXTRA_DIST += sys_types.in.h - -## end gnulib module sys_types - -## begin gnulib module unictype/base - -BUILT_SOURCES += $(LIBUNISTRING_UNICTYPE_H) - -unictype.h: unictype.in.h - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/unictype.in.h; \ - } > $@-t && \ - mv -f $@-t $@ -MOSTLYCLEANFILES += unictype.h unictype.h-t - -EXTRA_DIST += unictype.in.h - -## end gnulib module unictype/base - -## begin gnulib module unictype/category-C - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_C -libunistring_la_SOURCES += unictype/categ_C.c -endif - -EXTRA_DIST += unictype/categ_C.h - -## end gnulib module unictype/category-C - -## begin gnulib module unictype/category-Cc - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CC -libunistring_la_SOURCES += unictype/categ_Cc.c -endif - -EXTRA_DIST += unictype/categ_Cc.h - -## end gnulib module unictype/category-Cc - -## begin gnulib module unictype/category-Cf - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CF -libunistring_la_SOURCES += unictype/categ_Cf.c -endif - -EXTRA_DIST += unictype/categ_Cf.h - -## end gnulib module unictype/category-Cf - -## begin gnulib module unictype/category-Cn - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CN -libunistring_la_SOURCES += unictype/categ_Cn.c -endif - -EXTRA_DIST += unictype/categ_Cn.h - -## end gnulib module unictype/category-Cn - -## begin gnulib module unictype/category-Co - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CO -libunistring_la_SOURCES += unictype/categ_Co.c -endif - -EXTRA_DIST += unictype/categ_Co.h - -## end gnulib module unictype/category-Co - -## begin gnulib module unictype/category-Cs - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_CS -libunistring_la_SOURCES += unictype/categ_Cs.c -endif - -EXTRA_DIST += unictype/categ_Cs.h - -## end gnulib module unictype/category-Cs - -## begin gnulib module unictype/category-L - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_L -libunistring_la_SOURCES += unictype/categ_L.c -endif - -EXTRA_DIST += unictype/categ_L.h - -## end gnulib module unictype/category-L - -## begin gnulib module unictype/category-LC - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LC -libunistring_la_SOURCES += unictype/categ_LC.c -endif - -EXTRA_DIST += unictype/categ_LC.h - -## end gnulib module unictype/category-LC - -## begin gnulib module unictype/category-Ll - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LL -libunistring_la_SOURCES += unictype/categ_Ll.c -endif - -EXTRA_DIST += unictype/categ_Ll.h - -## end gnulib module unictype/category-Ll - -## begin gnulib module unictype/category-Lm - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LM -libunistring_la_SOURCES += unictype/categ_Lm.c -endif - -EXTRA_DIST += unictype/categ_Lm.h - -## end gnulib module unictype/category-Lm - -## begin gnulib module unictype/category-Lo - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LO -libunistring_la_SOURCES += unictype/categ_Lo.c -endif - -EXTRA_DIST += unictype/categ_Lo.h - -## end gnulib module unictype/category-Lo - -## begin gnulib module unictype/category-Lt - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LT -libunistring_la_SOURCES += unictype/categ_Lt.c -endif - -EXTRA_DIST += unictype/categ_Lt.h - -## end gnulib module unictype/category-Lt - -## begin gnulib module unictype/category-Lu - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LU -libunistring_la_SOURCES += unictype/categ_Lu.c -endif - -EXTRA_DIST += unictype/categ_Lu.h - -## end gnulib module unictype/category-Lu - -## begin gnulib module unictype/category-M - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_M -libunistring_la_SOURCES += unictype/categ_M.c -endif - -EXTRA_DIST += unictype/categ_M.h - -## end gnulib module unictype/category-M - -## begin gnulib module unictype/category-Mc - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_MC -libunistring_la_SOURCES += unictype/categ_Mc.c -endif - -EXTRA_DIST += unictype/categ_Mc.h - -## end gnulib module unictype/category-Mc - -## begin gnulib module unictype/category-Me - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ME -libunistring_la_SOURCES += unictype/categ_Me.c -endif - -EXTRA_DIST += unictype/categ_Me.h - -## end gnulib module unictype/category-Me - -## begin gnulib module unictype/category-Mn - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_MN -libunistring_la_SOURCES += unictype/categ_Mn.c -endif - -EXTRA_DIST += unictype/categ_Mn.h - -## end gnulib module unictype/category-Mn - -## begin gnulib module unictype/category-N - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_N -libunistring_la_SOURCES += unictype/categ_N.c -endif - -EXTRA_DIST += unictype/categ_N.h - -## end gnulib module unictype/category-N - -## begin gnulib module unictype/category-Nd - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ND -libunistring_la_SOURCES += unictype/categ_Nd.c -endif - -EXTRA_DIST += unictype/categ_Nd.h - -## end gnulib module unictype/category-Nd - -## begin gnulib module unictype/category-Nl - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NL -libunistring_la_SOURCES += unictype/categ_Nl.c -endif - -EXTRA_DIST += unictype/categ_Nl.h - -## end gnulib module unictype/category-Nl - -## begin gnulib module unictype/category-No - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NO -libunistring_la_SOURCES += unictype/categ_No.c -endif - -EXTRA_DIST += unictype/categ_No.h - -## end gnulib module unictype/category-No - -## begin gnulib module unictype/category-P - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_P -libunistring_la_SOURCES += unictype/categ_P.c -endif - -EXTRA_DIST += unictype/categ_P.h - -## end gnulib module unictype/category-P - -## begin gnulib module unictype/category-Pc - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PC -libunistring_la_SOURCES += unictype/categ_Pc.c -endif - -EXTRA_DIST += unictype/categ_Pc.h - -## end gnulib module unictype/category-Pc - -## begin gnulib module unictype/category-Pd - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PD -libunistring_la_SOURCES += unictype/categ_Pd.c -endif - -EXTRA_DIST += unictype/categ_Pd.h - -## end gnulib module unictype/category-Pd - -## begin gnulib module unictype/category-Pe - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PE -libunistring_la_SOURCES += unictype/categ_Pe.c -endif - -EXTRA_DIST += unictype/categ_Pe.h - -## end gnulib module unictype/category-Pe - -## begin gnulib module unictype/category-Pf - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PF -libunistring_la_SOURCES += unictype/categ_Pf.c -endif - -EXTRA_DIST += unictype/categ_Pf.h - -## end gnulib module unictype/category-Pf - -## begin gnulib module unictype/category-Pi - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PI -libunistring_la_SOURCES += unictype/categ_Pi.c -endif - -EXTRA_DIST += unictype/categ_Pi.h - -## end gnulib module unictype/category-Pi - -## begin gnulib module unictype/category-Po - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PO -libunistring_la_SOURCES += unictype/categ_Po.c -endif - -EXTRA_DIST += unictype/categ_Po.h - -## end gnulib module unictype/category-Po - -## begin gnulib module unictype/category-Ps - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_PS -libunistring_la_SOURCES += unictype/categ_Ps.c -endif - -EXTRA_DIST += unictype/categ_Ps.h - -## end gnulib module unictype/category-Ps - -## begin gnulib module unictype/category-S - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_S -libunistring_la_SOURCES += unictype/categ_S.c -endif - -EXTRA_DIST += unictype/categ_S.h - -## end gnulib module unictype/category-S - -## begin gnulib module unictype/category-Sc - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SC -libunistring_la_SOURCES += unictype/categ_Sc.c -endif - -EXTRA_DIST += unictype/categ_Sc.h - -## end gnulib module unictype/category-Sc - -## begin gnulib module unictype/category-Sk - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SK -libunistring_la_SOURCES += unictype/categ_Sk.c -endif - -EXTRA_DIST += unictype/categ_Sk.h - -## end gnulib module unictype/category-Sk - -## begin gnulib module unictype/category-Sm - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SM -libunistring_la_SOURCES += unictype/categ_Sm.c -endif - -EXTRA_DIST += unictype/categ_Sm.h - -## end gnulib module unictype/category-Sm - -## begin gnulib module unictype/category-So - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_SO -libunistring_la_SOURCES += unictype/categ_So.c -endif - -EXTRA_DIST += unictype/categ_So.h - -## end gnulib module unictype/category-So - -## begin gnulib module unictype/category-Z - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_Z -libunistring_la_SOURCES += unictype/categ_Z.c -endif - -EXTRA_DIST += unictype/categ_Z.h - -## end gnulib module unictype/category-Z - -## begin gnulib module unictype/category-Zl - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ZL -libunistring_la_SOURCES += unictype/categ_Zl.c -endif - -EXTRA_DIST += unictype/categ_Zl.h - -## end gnulib module unictype/category-Zl - -## begin gnulib module unictype/category-Zp - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ZP -libunistring_la_SOURCES += unictype/categ_Zp.c -endif - -EXTRA_DIST += unictype/categ_Zp.h - -## end gnulib module unictype/category-Zp - -## begin gnulib module unictype/category-Zs - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_ZS -libunistring_la_SOURCES += unictype/categ_Zs.c -endif - -EXTRA_DIST += unictype/categ_Zs.h - -## end gnulib module unictype/category-Zs - -## begin gnulib module unictype/category-and - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_AND -libunistring_la_SOURCES += unictype/categ_and.c -endif - -## end gnulib module unictype/category-and - -## begin gnulib module unictype/category-and-not - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_AND_NOT -libunistring_la_SOURCES += unictype/categ_and_not.c -endif - -## end gnulib module unictype/category-and-not - -## begin gnulib module unictype/category-byname - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_BYNAME -libunistring_la_SOURCES += unictype/categ_byname.c -endif - -unictype/categ_byname.h: unictype/categ_byname.gperf - $(V_GPERF)$(GPERF) -m 10 $(srcdir)/unictype/categ_byname.gperf > $(srcdir)/unictype/categ_byname.h-t && \ - mv $(srcdir)/unictype/categ_byname.h-t $(srcdir)/unictype/categ_byname.h -BUILT_SOURCES += unictype/categ_byname.h -MOSTLYCLEANFILES += unictype/categ_byname.h-t -MAINTAINERCLEANFILES += unictype/categ_byname.h -EXTRA_DIST += unictype/categ_byname.h - -EXTRA_DIST += unictype/categ_byname.gperf - -## end gnulib module unictype/category-byname - -## begin gnulib module unictype/category-longname - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_LONGNAME -libunistring_la_SOURCES += unictype/categ_longname.c -endif - -## end gnulib module unictype/category-longname - -## begin gnulib module unictype/category-name - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NAME -libunistring_la_SOURCES += unictype/categ_name.c -endif - -## end gnulib module unictype/category-name - -## begin gnulib module unictype/category-none - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_NONE -libunistring_la_SOURCES += unictype/categ_none.c -endif - -## end gnulib module unictype/category-none - -## begin gnulib module unictype/category-of - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_OF -libunistring_la_SOURCES += unictype/categ_of.c -endif - -EXTRA_DIST += unictype/categ_of.h - -## end gnulib module unictype/category-of - -## begin gnulib module unictype/category-or - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_OR -libunistring_la_SOURCES += unictype/categ_or.c -endif - -## end gnulib module unictype/category-or - -## begin gnulib module unictype/category-test - -if LIBUNISTRING_COMPILE_UNICTYPE_CATEGORY_TEST -libunistring_la_SOURCES += unictype/categ_test.c -endif - -EXTRA_DIST += unictype/bitmap.h - -## end gnulib module unictype/category-test - -## begin gnulib module unictype/combining-class - -if LIBUNISTRING_COMPILE_UNICTYPE_COMBINING_CLASS -libunistring_la_SOURCES += unictype/combiningclass.c -endif - -EXTRA_DIST += unictype/combiningclass.h - -## end gnulib module unictype/combining-class - -## begin gnulib module unictype/property-default-ignorable-code-point - -if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT -libunistring_la_SOURCES += unictype/pr_default_ignorable_code_point.c -endif - -EXTRA_DIST += unictype/bitmap.h unictype/pr_default_ignorable_code_point.h - -## end gnulib module unictype/property-default-ignorable-code-point - -## begin gnulib module unictype/property-join-control - -if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_JOIN_CONTROL -libunistring_la_SOURCES += unictype/pr_join_control.c -endif - -EXTRA_DIST += unictype/bitmap.h unictype/pr_join_control.h - -## end gnulib module unictype/property-join-control - -## begin gnulib module unictype/property-not-a-character - -if LIBUNISTRING_COMPILE_UNICTYPE_PROPERTY_NOT_A_CHARACTER -libunistring_la_SOURCES += unictype/pr_not_a_character.c -endif - -EXTRA_DIST += unictype/bitmap.h unictype/pr_not_a_character.h - -## end gnulib module unictype/property-not-a-character - -## begin gnulib module uninorm/base - -BUILT_SOURCES += $(LIBUNISTRING_UNINORM_H) - -uninorm.h: uninorm.in.h - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/uninorm.in.h; \ - } > $@-t && \ - mv -f $@-t $@ -MOSTLYCLEANFILES += uninorm.h uninorm.h-t - -EXTRA_DIST += uninorm.in.h - -## end gnulib module uninorm/base - -## begin gnulib module uninorm/canonical-decomposition - -if LIBUNISTRING_COMPILE_UNINORM_CANONICAL_DECOMPOSITION -libunistring_la_SOURCES += uninorm/canonical-decomposition.c -endif - -## end gnulib module uninorm/canonical-decomposition - -## begin gnulib module uninorm/compat-decomposition - -libunistring_la_SOURCES += uninorm/compat-decomposition.c - -EXTRA_DIST += uninorm/decompose-internal.h - -## end gnulib module uninorm/compat-decomposition - -## begin gnulib module uninorm/composition - -if LIBUNISTRING_COMPILE_UNINORM_COMPOSITION -libunistring_la_SOURCES += uninorm/composition.c -endif - -uninorm/composition-table.h: $(srcdir)/uninorm/composition-table.gperf - $(V_GPERF)$(GPERF) -m 1 $(srcdir)/uninorm/composition-table.gperf > $(srcdir)/uninorm/composition-table.h-t && \ - mv $(srcdir)/uninorm/composition-table.h-t $(srcdir)/uninorm/composition-table.h -BUILT_SOURCES += uninorm/composition-table.h -MOSTLYCLEANFILES += uninorm/composition-table.h-t -MAINTAINERCLEANFILES += uninorm/composition-table.h -EXTRA_DIST += uninorm/composition-table.h - -EXTRA_DIST += uninorm/composition-table.gperf - -## end gnulib module uninorm/composition - -## begin gnulib module uninorm/decompose-internal - -libunistring_la_SOURCES += uninorm/decompose-internal.c - -EXTRA_DIST += uninorm/decompose-internal.h - -## end gnulib module uninorm/decompose-internal - -## begin gnulib module uninorm/decomposition - -if LIBUNISTRING_COMPILE_UNINORM_DECOMPOSITION -libunistring_la_SOURCES += uninorm/decomposition.c -endif - -## end gnulib module uninorm/decomposition - -## begin gnulib module uninorm/decomposition-table - -libunistring_la_SOURCES += uninorm/decomposition-table.c - -EXTRA_DIST += uninorm/decomposition-table.h uninorm/decomposition-table1.h uninorm/decomposition-table2.h - -## end gnulib module uninorm/decomposition-table - -## begin gnulib module uninorm/nfc - -if LIBUNISTRING_COMPILE_UNINORM_NFC -libunistring_la_SOURCES += uninorm/nfc.c -endif - -EXTRA_DIST += uninorm/normalize-internal.h - -## end gnulib module uninorm/nfc - -## begin gnulib module uninorm/nfd - -if LIBUNISTRING_COMPILE_UNINORM_NFD -libunistring_la_SOURCES += uninorm/nfd.c -endif - -EXTRA_DIST += uninorm/normalize-internal.h - -## end gnulib module uninorm/nfd - -## begin gnulib module uninorm/nfkc - -if LIBUNISTRING_COMPILE_UNINORM_NFKC -libunistring_la_SOURCES += uninorm/nfkc.c -endif - -EXTRA_DIST += uninorm/normalize-internal.h - -## end gnulib module uninorm/nfkc - -## begin gnulib module uninorm/nfkd - -if LIBUNISTRING_COMPILE_UNINORM_NFKD -libunistring_la_SOURCES += uninorm/nfkd.c -endif - -EXTRA_DIST += uninorm/normalize-internal.h - -## end gnulib module uninorm/nfkd - -## begin gnulib module uninorm/u16-normalize - -if LIBUNISTRING_COMPILE_UNINORM_U16_NORMALIZE -libunistring_la_SOURCES += uninorm/u16-normalize.c -endif - -EXTRA_DIST += uninorm/normalize-internal.h uninorm/u-normalize-internal.h - -## end gnulib module uninorm/u16-normalize - -## begin gnulib module uninorm/u32-normalize - -if LIBUNISTRING_COMPILE_UNINORM_U32_NORMALIZE -libunistring_la_SOURCES += uninorm/u32-normalize.c -endif - -EXTRA_DIST += uninorm/normalize-internal.h uninorm/u-normalize-internal.h - -## end gnulib module uninorm/u32-normalize - -## begin gnulib module uninorm/u8-normalize - -if LIBUNISTRING_COMPILE_UNINORM_U8_NORMALIZE -libunistring_la_SOURCES += uninorm/u8-normalize.c -endif - -EXTRA_DIST += uninorm/normalize-internal.h uninorm/u-normalize-internal.h - -## end gnulib module uninorm/u8-normalize - -## begin gnulib module unistr/base - -BUILT_SOURCES += $(LIBUNISTRING_UNISTR_H) - -unistr.h: unistr.in.h - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/unistr.in.h; \ - } > $@-t && \ - mv -f $@-t $@ -MOSTLYCLEANFILES += unistr.h unistr.h-t - -EXTRA_DIST += unistr.in.h - -## end gnulib module unistr/base - -## begin gnulib module unistr/u16-cpy - -if LIBUNISTRING_COMPILE_UNISTR_U16_CPY -libunistring_la_SOURCES += unistr/u16-cpy.c -endif - -EXTRA_DIST += unistr/u-cpy.h - -## end gnulib module unistr/u16-cpy - -## begin gnulib module unistr/u16-mbtouc-unsafe - -if LIBUNISTRING_COMPILE_UNISTR_U16_MBTOUC_UNSAFE -libunistring_la_SOURCES += unistr/u16-mbtouc-unsafe.c unistr/u16-mbtouc-unsafe-aux.c -endif - -## end gnulib module unistr/u16-mbtouc-unsafe - -## begin gnulib module unistr/u16-mbtoucr - -if LIBUNISTRING_COMPILE_UNISTR_U16_MBTOUCR -libunistring_la_SOURCES += unistr/u16-mbtoucr.c -endif - -## end gnulib module unistr/u16-mbtoucr - -## begin gnulib module unistr/u16-to-u8 - -if LIBUNISTRING_COMPILE_UNISTR_U16_TO_U8 -libunistring_la_SOURCES += unistr/u16-to-u8.c -endif - -## end gnulib module unistr/u16-to-u8 - -## begin gnulib module unistr/u16-uctomb - -if LIBUNISTRING_COMPILE_UNISTR_U16_UCTOMB -libunistring_la_SOURCES += unistr/u16-uctomb.c unistr/u16-uctomb-aux.c -endif - -## end gnulib module unistr/u16-uctomb - -## begin gnulib module unistr/u32-cpy - -if LIBUNISTRING_COMPILE_UNISTR_U32_CPY -libunistring_la_SOURCES += unistr/u32-cpy.c -endif - -EXTRA_DIST += unistr/u-cpy.h - -## end gnulib module unistr/u32-cpy - -## begin gnulib module unistr/u32-mbtouc-unsafe - -if LIBUNISTRING_COMPILE_UNISTR_U32_MBTOUC_UNSAFE -libunistring_la_SOURCES += unistr/u32-mbtouc-unsafe.c -endif - -## end gnulib module unistr/u32-mbtouc-unsafe - -## begin gnulib module unistr/u32-to-u8 - -if LIBUNISTRING_COMPILE_UNISTR_U32_TO_U8 -libunistring_la_SOURCES += unistr/u32-to-u8.c -endif - -## end gnulib module unistr/u32-to-u8 - -## begin gnulib module unistr/u32-uctomb - -if LIBUNISTRING_COMPILE_UNISTR_U32_UCTOMB -libunistring_la_SOURCES += unistr/u32-uctomb.c -endif - -## end gnulib module unistr/u32-uctomb - -## begin gnulib module unistr/u8-check - -if LIBUNISTRING_COMPILE_UNISTR_U8_CHECK -libunistring_la_SOURCES += unistr/u8-check.c -endif - -## end gnulib module unistr/u8-check - -## begin gnulib module unistr/u8-cpy - -if LIBUNISTRING_COMPILE_UNISTR_U8_CPY -libunistring_la_SOURCES += unistr/u8-cpy.c -endif - -EXTRA_DIST += unistr/u-cpy.h - -## end gnulib module unistr/u8-cpy - -## begin gnulib module unistr/u8-mbtouc-unsafe - -if LIBUNISTRING_COMPILE_UNISTR_U8_MBTOUC_UNSAFE -libunistring_la_SOURCES += unistr/u8-mbtouc-unsafe.c unistr/u8-mbtouc-unsafe-aux.c -endif - -## end gnulib module unistr/u8-mbtouc-unsafe - -## begin gnulib module unistr/u8-mbtoucr - -if LIBUNISTRING_COMPILE_UNISTR_U8_MBTOUCR -libunistring_la_SOURCES += unistr/u8-mbtoucr.c -endif - -## end gnulib module unistr/u8-mbtoucr - -## begin gnulib module unistr/u8-to-u16 - -if LIBUNISTRING_COMPILE_UNISTR_U8_TO_U16 -libunistring_la_SOURCES += unistr/u8-to-u16.c -endif - -## end gnulib module unistr/u8-to-u16 - -## begin gnulib module unistr/u8-to-u32 - -if LIBUNISTRING_COMPILE_UNISTR_U8_TO_U32 -libunistring_la_SOURCES += unistr/u8-to-u32.c -endif - -## end gnulib module unistr/u8-to-u32 - -## begin gnulib module unistr/u8-uctomb - -if LIBUNISTRING_COMPILE_UNISTR_U8_UCTOMB -libunistring_la_SOURCES += unistr/u8-uctomb.c unistr/u8-uctomb-aux.c -endif - -## end gnulib module unistr/u8-uctomb - -## begin gnulib module unitypes - -BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H) - -unitypes.h: unitypes.in.h - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/unitypes.in.h; \ - } > $@-t && \ - mv -f $@-t $@ -MOSTLYCLEANFILES += unitypes.h unitypes.h-t - -EXTRA_DIST += unitypes.in.h - -## end gnulib module unitypes - - -mostlyclean-local: mostlyclean-generic - @for dir in '' $(MOSTLYCLEANDIRS); do \ - if test -n "$$dir" && test -d $$dir; then \ - echo "rmdir $$dir"; rmdir $$dir; \ - fi; \ - done; \ - : diff --git a/lib/unistring/array-mergesort.h b/lib/unistring/array-mergesort.h deleted file mode 100644 index ebe28ac703..0000000000 --- a/lib/unistring/array-mergesort.h +++ /dev/null @@ -1,284 +0,0 @@ -/* Stable-sorting of an array using mergesort. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -/* This file implements stable sorting of an array, using the mergesort - algorithm. - Worst-case running time for an array of length N is O(N log N). - Unlike the mpsort module, the algorithm here attempts to minimize not - only the number of comparisons, but also the number of copying operations. - - Before including this file, you need to define - ELEMENT The type of every array element. - COMPARE A two-argument macro that takes two 'const ELEMENT *' - pointers and returns a negative, zero, or positive 'int' - value if the element pointed to by the first argument is, - respectively, less, equal, or greater than the element - pointed to by the second argument. - STATIC The storage class of the functions being defined. - Before including this file, you also need to include: - #include - */ - -/* Merge the sorted arrays src1[0..n1-1] and src2[0..n2-1] into - dst[0..n1+n2-1]. In case of ambiguity, put the elements of src1 - before the elements of src2. - n1 and n2 must be > 0. - The arrays src1 and src2 must not overlap the dst array, except that - src1 may be dst[n2..n1+n2-1], or src2 may be dst[n1..n1+n2-1]. */ -static void -merge (const ELEMENT *src1, size_t n1, - const ELEMENT *src2, size_t n2, - ELEMENT *dst) -{ - for (;;) /* while (n1 > 0 && n2 > 0) */ - { - if (COMPARE (src1, src2) <= 0) - { - *dst++ = *src1++; - n1--; - if (n1 == 0) - break; - } - else - { - *dst++ = *src2++; - n2--; - if (n2 == 0) - break; - } - } - /* Here n1 == 0 || n2 == 0 but also n1 > 0 || n2 > 0. */ - if (n1 > 0) - { - if (dst != src1) - do - { - *dst++ = *src1++; - n1--; - } - while (n1 > 0); - } - else /* n2 > 0 */ - { - if (dst != src2) - do - { - *dst++ = *src2++; - n2--; - } - while (n2 > 0); - } -} - -/* Sort src[0..n-1] into dst[0..n-1], using tmp[0..n/2-1] as temporary - (scratch) storage. - The arrays src, dst, tmp must not overlap. */ -STATIC void -merge_sort_fromto (const ELEMENT *src, ELEMENT *dst, size_t n, ELEMENT *tmp) -{ - switch (n) - { - case 0: - return; - case 1: - /* Nothing to do. */ - dst[0] = src[0]; - return; - case 2: - /* Trivial case. */ - if (COMPARE (&src[0], &src[1]) <= 0) - { - /* src[0] <= src[1] */ - dst[0] = src[0]; - dst[1] = src[1]; - } - else - { - dst[0] = src[1]; - dst[1] = src[0]; - } - break; - case 3: - /* Simple case. */ - if (COMPARE (&src[0], &src[1]) <= 0) - { - if (COMPARE (&src[1], &src[2]) <= 0) - { - /* src[0] <= src[1] <= src[2] */ - dst[0] = src[0]; - dst[1] = src[1]; - dst[2] = src[2]; - } - else if (COMPARE (&src[0], &src[2]) <= 0) - { - /* src[0] <= src[2] < src[1] */ - dst[0] = src[0]; - dst[1] = src[2]; - dst[2] = src[1]; - } - else - { - /* src[2] < src[0] <= src[1] */ - dst[0] = src[2]; - dst[1] = src[0]; - dst[2] = src[1]; - } - } - else - { - if (COMPARE (&src[0], &src[2]) <= 0) - { - /* src[1] < src[0] <= src[2] */ - dst[0] = src[1]; - dst[1] = src[0]; - dst[2] = src[2]; - } - else if (COMPARE (&src[1], &src[2]) <= 0) - { - /* src[1] <= src[2] < src[0] */ - dst[0] = src[1]; - dst[1] = src[2]; - dst[2] = src[0]; - } - else - { - /* src[2] < src[1] < src[0] */ - dst[0] = src[2]; - dst[1] = src[1]; - dst[2] = src[0]; - } - } - break; - default: - { - size_t n1 = n / 2; - size_t n2 = (n + 1) / 2; - /* Note: n1 + n2 = n, n1 <= n2. */ - /* Sort src[n1..n-1] into dst[n1..n-1], scratching tmp[0..n2/2-1]. */ - merge_sort_fromto (src + n1, dst + n1, n2, tmp); - /* Sort src[0..n1-1] into tmp[0..n1-1], scratching dst[0..n1-1]. */ - merge_sort_fromto (src, tmp, n1, dst); - /* Merge the two half results. */ - merge (tmp, n1, dst + n1, n2, dst); - } - break; - } -} - -/* Sort src[0..n-1], using tmp[0..n-1] as temporary (scratch) storage. - The arrays src, tmp must not overlap. */ -STATIC void -merge_sort_inplace (ELEMENT *src, size_t n, ELEMENT *tmp) -{ - switch (n) - { - case 0: - case 1: - /* Nothing to do. */ - return; - case 2: - /* Trivial case. */ - if (COMPARE (&src[0], &src[1]) <= 0) - { - /* src[0] <= src[1] */ - } - else - { - ELEMENT t = src[0]; - src[0] = src[1]; - src[1] = t; - } - break; - case 3: - /* Simple case. */ - if (COMPARE (&src[0], &src[1]) <= 0) - { - if (COMPARE (&src[1], &src[2]) <= 0) - { - /* src[0] <= src[1] <= src[2] */ - } - else if (COMPARE (&src[0], &src[2]) <= 0) - { - /* src[0] <= src[2] < src[1] */ - ELEMENT t = src[1]; - src[1] = src[2]; - src[2] = t; - } - else - { - /* src[2] < src[0] <= src[1] */ - ELEMENT t = src[0]; - src[0] = src[2]; - src[2] = src[1]; - src[1] = t; - } - } - else - { - if (COMPARE (&src[0], &src[2]) <= 0) - { - /* src[1] < src[0] <= src[2] */ - ELEMENT t = src[0]; - src[0] = src[1]; - src[1] = t; - } - else if (COMPARE (&src[1], &src[2]) <= 0) - { - /* src[1] <= src[2] < src[0] */ - ELEMENT t = src[0]; - src[0] = src[1]; - src[1] = src[2]; - src[2] = t; - } - else - { - /* src[2] < src[1] < src[0] */ - ELEMENT t = src[0]; - src[0] = src[2]; - src[2] = t; - } - } - break; - default: - { - size_t n1 = n / 2; - size_t n2 = (n + 1) / 2; - /* Note: n1 + n2 = n, n1 <= n2. */ - /* Sort src[n1..n-1], scratching tmp[0..n2-1]. */ - merge_sort_inplace (src + n1, n2, tmp); - /* Sort src[0..n1-1] into tmp[0..n1-1], scratching tmp[n1..2*n1-1]. */ - merge_sort_fromto (src, tmp, n1, tmp + n1); - /* Merge the two half results. */ - merge (tmp, n1, src + n1, n2, src); - } - break; - } -} - -#undef ELEMENT -#undef COMPARE -#undef STATIC diff --git a/lib/unistring/limits.in.h b/lib/unistring/limits.in.h deleted file mode 100644 index d4be1c57a9..0000000000 --- a/lib/unistring/limits.in.h +++ /dev/null @@ -1,73 +0,0 @@ -/* A GNU-like . - - Copyright 2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or - modify it under the terms of either: - - * the GNU Lesser General Public License - as published by the Free Software Foundation; either version 3, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_LIMITS_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_LIMITS_H@ - -#ifndef _@GUARD_PREFIX@_LIMITS_H -#define _@GUARD_PREFIX@_LIMITS_H - -/* The number of usable bits in an unsigned or signed integer type - with minimum value MIN and maximum value MAX, as an int expression - suitable in #if. Cover all known practical hosts. This - implementation exploits the fact that MAX is 1 less than a power of - 2, and merely counts the number of 1 bits in MAX; "COBn" means - "count the number of 1 bits in the low-order n bits"). */ -#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) -#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) -#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) -#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) -#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) -#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) -#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) - -/* Macros specified by ISO/IEC TS 18661-1:2014. */ - -#if (! defined ULLONG_WIDTH \ - && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) -# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) -# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) -# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) -# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) -# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) -# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) -# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) -# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) -# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) -# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) -# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) -#endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ - -#endif /* _@GUARD_PREFIX@_LIMITS_H */ -#endif /* _@GUARD_PREFIX@_LIMITS_H */ diff --git a/lib/unistring/m4/00gnulib.m4 b/lib/unistring/m4/00gnulib.m4 deleted file mode 100644 index bb37e32aa3..0000000000 --- a/lib/unistring/m4/00gnulib.m4 +++ /dev/null @@ -1,46 +0,0 @@ -# 00gnulib.m4 serial 3 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl This file must be named something that sorts before all other -dnl gnulib-provided .m4 files. It is needed until such time as we can -dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and -dnl m4_divert semantics. - -# Until autoconf 2.63, handling of the diversion stack required m4_init -# to be called first; but this does not happen with aclocal. Wrapping -# the entire execution in another layer of the diversion stack fixes this. -# Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4 -# for whether it was FIFO or LIFO; in order to properly balance with -# m4_init, we need to undo our push just before anything wrapped within -# the m4_init body. The way to ensure this is to wrap both sides of -# m4_init with a one-shot macro that does the pop at the right time. -m4_ifndef([_m4_divert_diversion], -[m4_divert_push([KILL]) -m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])]) -m4_define([m4_init], - [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])]) - - -# AC_DEFUN_ONCE([NAME], VALUE) -# ---------------------------- -# Define NAME to expand to VALUE on the first use (whether by direct -# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. -# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This -# definition is slower than the version in Autoconf 2.64, because it -# can only use interfaces that existed since 2.59; but it achieves the -# same effect. Quoting is necessary to avoid confusing Automake. -m4_version_prereq([2.63.263], [], -[m4_define([AC][_DEFUN_ONCE], - [AC][_DEFUN([$1], - [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], - [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl -[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) - -# gl_00GNULIB -# ----------- -# Witness macro that this file has been included. Needed to force -# Automake to include this file prior to all other gnulib .m4 files. -AC_DEFUN([gl_00GNULIB]) diff --git a/lib/unistring/m4/absolute-header.m4 b/lib/unistring/m4/absolute-header.m4 deleted file mode 100644 index 7ffc38d7a2..0000000000 --- a/lib/unistring/m4/absolute-header.m4 +++ /dev/null @@ -1,102 +0,0 @@ -# absolute-header.m4 serial 16 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Derek Price. - -# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) -# --------------------------------------- -# Find the absolute name of a header file, testing first if the header exists. -# If the header were sys/inttypes.h, this macro would define -# ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h -# in config.h -# (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). -# The three "///" are to pacify Sun C 5.8, which otherwise would say -# "warning: #include of /usr/include/... may be non-portable". -# Use '""', not '<>', so that the /// cannot be confused with a C99 comment. -# Note: This macro assumes that the header file is not empty after -# preprocessing, i.e. it does not only define preprocessor macros but also -# provides some type/enum definitions or function/variable declarations. -AC_DEFUN([gl_ABSOLUTE_HEADER], -[AC_REQUIRE([AC_CANONICAL_HOST]) -AC_LANG_PREPROC_REQUIRE()dnl -dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted -dnl until we can assume autoconf 2.64 or newer. -m4_foreach_w([gl_HEADER_NAME], [$1], - [AS_VAR_PUSHDEF([gl_absolute_header], - [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl - AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], - m4_defn([gl_absolute_header]), - [AS_VAR_PUSHDEF([ac_header_exists], - [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl - AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl - if test AS_VAR_GET(ac_header_exists) = yes; then - gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) - fi - AS_VAR_POPDEF([ac_header_exists])dnl - ])dnl - AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), - ["AS_VAR_GET(gl_absolute_header)"], - [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) - AS_VAR_POPDEF([gl_absolute_header])dnl -])dnl -])# gl_ABSOLUTE_HEADER - -# gl_ABSOLUTE_HEADER_ONE(HEADER) -# ------------------------------ -# Like gl_ABSOLUTE_HEADER, except that: -# - it assumes that the header exists, -# - it uses the current CPPFLAGS, -# - it does not cache the result, -# - it is silent. -AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], -[ - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) - dnl AIX "xlc -E" and "cc -E" omit #line directives for header files - dnl that contain only a #include of other header files and no - dnl non-comment tokens of their own. This leads to a failure to - dnl detect the absolute name of , , - dnl and others. The workaround is to force preservation of comments - dnl through option -C. This ensures all necessary #line directives - dnl are present. GCC supports option -C as well. - case "$host_os" in - aix*) gl_absname_cpp="$ac_cpp -C" ;; - *) gl_absname_cpp="$ac_cpp" ;; - esac -changequote(,) - case "$host_os" in - mingw*) - dnl For the sake of native Windows compilers (excluding gcc), - dnl treat backslash as a directory separator, like /. - dnl Actually, these compilers use a double-backslash as - dnl directory separator, inside the - dnl # line "filename" - dnl directives. - gl_dirsep_regex='[/\\]' - ;; - *) - gl_dirsep_regex='\/' - ;; - esac - dnl A sed expression that turns a string into a basic regular - dnl expression, for use within "/.../". - gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo '$1' \ - | sed -e "$gl_make_literal_regex_sed"` - gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ - s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ - s|^/[^/]|//&| - p - q - }' -changequote([,]) - dnl eval is necessary to expand gl_absname_cpp. - dnl Ultrix and Pyramid sh refuse to redirect output of eval, - dnl so use subshell. - AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), -[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | - sed -n "$gl_absolute_header_sed"`]) -]) diff --git a/lib/unistring/m4/gnulib-cache.m4 b/lib/unistring/m4/gnulib-cache.m4 deleted file mode 100644 index 871fbf8455..0000000000 --- a/lib/unistring/m4/gnulib-cache.m4 +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (C) 2002-2016 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file. If not, see . -# -# As a special exception to the GNU General Public License, -# this file may be distributed as part of a program that -# contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. -# -# This file represents the specification of how gnulib-tool is used. -# It acts as a cache: It is written and read by gnulib-tool. -# In projects that use version control, this file is meant to be put under -# version control, like the configure.ac and various Makefile.am files. - - -# Specification in the form of a command-line invocation: -# gnulib-tool --import --local-dir=lib/unistring/override --lib=libunistring --source-base=lib/unistring --m4-base=lib/unistring/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl=3orGPLv2 --no-conditional-dependencies --libtool --macro-prefix=unistring unictype/category-all unictype/property-default-ignorable-code-point unictype/property-join-control unictype/property-not-a-character uninorm/nfc uninorm/nfkc uninorm/u16-normalize uninorm/u32-normalize uninorm/u8-normalize unistr/u16-to-u8 unistr/u32-to-u8 unistr/u8-check unistr/u8-to-u16 unistr/u8-to-u32 - -# Specification in the form of a few gnulib-tool.m4 macro invocations: -gl_LOCAL_DIR([lib/unistring/override]) -gl_MODULES([ - unictype/category-all - unictype/property-default-ignorable-code-point - unictype/property-join-control - unictype/property-not-a-character - uninorm/nfc - uninorm/nfkc - uninorm/u16-normalize - uninorm/u32-normalize - uninorm/u8-normalize - unistr/u16-to-u8 - unistr/u32-to-u8 - unistr/u8-check - unistr/u8-to-u16 - unistr/u8-to-u32 -]) -gl_AVOID([]) -gl_SOURCE_BASE([lib/unistring]) -gl_M4_BASE([lib/unistring/m4]) -gl_PO_BASE([]) -gl_DOC_BASE([doc]) -gl_TESTS_BASE([tests]) -gl_LIB([libunistring]) -gl_LGPL([3orGPLv2]) -gl_MAKEFILE_NAME([]) -gl_LIBTOOL -gl_MACRO_PREFIX([unistring]) -gl_PO_DOMAIN([]) -gl_WITNESS_C_MACRO([]) diff --git a/lib/unistring/m4/gnulib-common.m4 b/lib/unistring/m4/gnulib-common.m4 deleted file mode 100644 index f8454c8a01..0000000000 --- a/lib/unistring/m4/gnulib-common.m4 +++ /dev/null @@ -1,462 +0,0 @@ -# gnulib-common.m4 serial 36 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# gl_COMMON -# is expanded unconditionally through gnulib-tool magic. -AC_DEFUN([gl_COMMON], [ - dnl Use AC_REQUIRE here, so that the code is expanded once only. - AC_REQUIRE([gl_00GNULIB]) - AC_REQUIRE([gl_COMMON_BODY]) -]) -AC_DEFUN([gl_COMMON_BODY], [ - AH_VERBATIM([_Noreturn], -[/* The _Noreturn keyword of C11. */ -#if ! (defined _Noreturn \ - || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) -# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ - || 0x5110 <= __SUNPRO_C) -# define _Noreturn __attribute__ ((__noreturn__)) -# elif defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) -# else -# define _Noreturn -# endif -#endif -]) - AH_VERBATIM([isoc99_inline], -[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports - the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of - earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. - __APPLE__ && __MACH__ test for Mac OS X. - __APPLE_CC__ tests for the Apple compiler and its version. - __STDC_VERSION__ tests for the C99 mode. */ -#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ -# define __GNUC_STDC_INLINE__ 1 -#endif]) - AH_VERBATIM([unused_parameter], -[/* Define as a marker that can be attached to declarations that might not - be used. This helps to reduce warnings, such as from - GCC -Wunused-parameter. */ -#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_UNUSED __attribute__ ((__unused__)) -#else -# define _GL_UNUSED -#endif -/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name - is a misnomer outside of parameter lists. */ -#define _UNUSED_PARAMETER_ _GL_UNUSED - -/* gcc supports the "unused" attribute on possibly unused labels, and - g++ has since version 4.5. Note to support C++ as well as C, - _GL_UNUSED_LABEL should be used with a trailing ; */ -#if !defined __cplusplus || __GNUC__ > 4 \ - || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -# define _GL_UNUSED_LABEL _GL_UNUSED -#else -# define _GL_UNUSED_LABEL -#endif - -/* The __pure__ attribute was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ -#endif - -/* The __const__ attribute was added in gcc 2.95. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) -# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) -#else -# define _GL_ATTRIBUTE_CONST /* empty */ -#endif -]) - dnl Preparation for running test programs: - dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not - dnl to /dev/tty, so they can be redirected to log files. Such diagnostics - dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. - LIBC_FATAL_STDERR_=1 - export LIBC_FATAL_STDERR_ -]) - -# gl_MODULE_INDICATOR_CONDITION -# expands to a C preprocessor expression that evaluates to 1 or 0, depending -# whether a gnulib module that has been requested shall be considered present -# or not. -m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) - -# gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) -# sets the shell variable that indicates the presence of the given module to -# a C preprocessor expression that will evaluate to 1. -AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], -[ - gl_MODULE_INDICATOR_SET_VARIABLE_AUX( - [GNULIB_[]m4_translit([[$1]], - [abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], - [gl_MODULE_INDICATOR_CONDITION]) -]) - -# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) -# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. -# The shell variable's value is a C preprocessor expression that evaluates -# to 0 or 1. -AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], -[ - m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], - [ - dnl Simplify the expression VALUE || 1 to 1. - $1=1 - ], - [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], - [gl_MODULE_INDICATOR_CONDITION])]) -]) - -# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) -# modifies the shell variable to include the given condition. The shell -# variable's value is a C preprocessor expression that evaluates to 0 or 1. -AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], -[ - dnl Simplify the expression 1 || CONDITION to 1. - if test "$[]$1" != 1; then - dnl Simplify the expression 0 || CONDITION to CONDITION. - if test "$[]$1" = 0; then - $1=$2 - else - $1="($[]$1 || $2)" - fi - fi -]) - -# gl_MODULE_INDICATOR([modulename]) -# defines a C macro indicating the presence of the given module -# in a location where it can be used. -# | Value | Value | -# | in lib/ | in tests/ | -# --------------------------------------------+---------+-----------+ -# Module present among main modules: | 1 | 1 | -# --------------------------------------------+---------+-----------+ -# Module present among tests-related modules: | 0 | 1 | -# --------------------------------------------+---------+-----------+ -# Module not present at all: | 0 | 0 | -# --------------------------------------------+---------+-----------+ -AC_DEFUN([gl_MODULE_INDICATOR], -[ - AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], - [abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), - [gl_MODULE_INDICATOR_CONDITION], - [Define to a C preprocessor expression that evaluates to 1 or 0, - depending whether the gnulib module $1 shall be considered present.]) -]) - -# gl_MODULE_INDICATOR_FOR_TESTS([modulename]) -# defines a C macro indicating the presence of the given module -# in lib or tests. This is useful to determine whether the module -# should be tested. -# | Value | Value | -# | in lib/ | in tests/ | -# --------------------------------------------+---------+-----------+ -# Module present among main modules: | 1 | 1 | -# --------------------------------------------+---------+-----------+ -# Module present among tests-related modules: | 1 | 1 | -# --------------------------------------------+---------+-----------+ -# Module not present at all: | 0 | 0 | -# --------------------------------------------+---------+-----------+ -AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], -[ - AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], - [abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], - [Define to 1 when the gnulib module $1 should be tested.]) -]) - -# gl_ASSERT_NO_GNULIB_POSIXCHECK -# asserts that there will never be a need to #define GNULIB_POSIXCHECK. -# and thereby enables an optimization of configure and config.h. -# Used by Emacs. -AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], -[ - dnl Override gl_WARN_ON_USE_PREPARE. - dnl But hide this definition from 'aclocal'. - AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) -]) - -# gl_ASSERT_NO_GNULIB_TESTS -# asserts that there will be no gnulib tests in the scope of the configure.ac -# and thereby enables an optimization of config.h. -# Used by Emacs. -AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], -[ - dnl Override gl_MODULE_INDICATOR_FOR_TESTS. - AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) -]) - -# Test whether exists. -# Set HAVE_FEATURES_H. -AC_DEFUN([gl_FEATURES_H], -[ - AC_CHECK_HEADERS_ONCE([features.h]) - if test $ac_cv_header_features_h = yes; then - HAVE_FEATURES_H=1 - else - HAVE_FEATURES_H=0 - fi - AC_SUBST([HAVE_FEATURES_H]) -]) - -# m4_foreach_w -# is a backport of autoconf-2.59c's m4_foreach_w. -# Remove this macro when we can assume autoconf >= 2.60. -m4_ifndef([m4_foreach_w], - [m4_define([m4_foreach_w], - [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) - -# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) -# ---------------------------------------------------- -# Backport of autoconf-2.63b's macro. -# Remove this macro when we can assume autoconf >= 2.64. -m4_ifndef([AS_VAR_IF], -[m4_define([AS_VAR_IF], -[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])]) - -# gl_PROG_CC_C99 -# Modifies the value of the shell variable CC in an attempt to make $CC -# understand ISO C99 source code. -# This is like AC_PROG_CC_C99, except that -# - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60, -# - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC -# , -# but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 -# . -# Remaining problems: -# - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options -# to CC twice -# . -# - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard. -AC_DEFUN([gl_PROG_CC_C99], -[ - dnl Change that version number to the minimum Autoconf version that supports - dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. - m4_version_prereq([9.0], - [AC_REQUIRE([AC_PROG_CC_C99])], - [AC_REQUIRE([AC_PROG_CC_STDC])]) -]) - -# gl_PROG_AR_RANLIB -# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. -# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override -# the values. -AC_DEFUN([gl_PROG_AR_RANLIB], -[ - dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler - dnl as "cc", and GCC as "gcc". They have different object file formats and - dnl library formats. In particular, the GNU binutils programs ar and ranlib - dnl produce libraries that work only with gcc, not with cc. - AC_REQUIRE([AC_PROG_CC]) - AC_BEFORE([$0], [AM_PROG_AR]) - AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], - [ - AC_EGREP_CPP([Amsterdam], - [ -#ifdef __ACK__ -Amsterdam -#endif - ], - [gl_cv_c_amsterdam_compiler=yes], - [gl_cv_c_amsterdam_compiler=no]) - ]) - - dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not - dnl building with __ACK__. - if test $gl_cv_c_amsterdam_compiler = yes; then - if test -z "$AR"; then - AR='cc -c.a' - fi - if test -z "$ARFLAGS"; then - ARFLAGS='-o' - fi - else - dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST - dnl ARFLAGS variable (it is filed into Makefile.in directly by automake - dnl script on-demand, if not specified by ./configure of course). - dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above - dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block - dnl because AM_PROG_AR is written so it could re-set AR variable even for - dnl __ACK__. It may seem like its easier to avoid calling the macro here, - dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good - dnl default value and automake should usually know them). - m4_ifdef([AM_PROG_AR], [AM_PROG_AR], [:]) - fi - - dnl In case the code above has not helped with setting AR/ARFLAGS, use - dnl Automake-documented default values for AR and ARFLAGS, but prefer - dnl ${host}-ar over ar (useful for cross-compiling). - AC_CHECK_TOOL([AR], [ar], [ar]) - if test -z "$ARFLAGS"; then - ARFLAGS='cr' - fi - - AC_SUBST([AR]) - AC_SUBST([ARFLAGS]) - if test -z "$RANLIB"; then - if test $gl_cv_c_amsterdam_compiler = yes; then - RANLIB=':' - else - dnl Use the ranlib program if it is available. - AC_PROG_RANLIB - fi - fi - AC_SUBST([RANLIB]) -]) - -# AC_PROG_MKDIR_P -# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix -# for interoperability with automake-1.9.6 from autoconf-2.62. -# Remove this macro when we can assume autoconf >= 2.62 or -# autoconf >= 2.60 && automake >= 1.10. -# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness. -m4_ifndef([AC_AUTOCONF_VERSION],[ -m4_ifdef([AC_PROG_MKDIR_P], [ - dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed. - m4_define([AC_PROG_MKDIR_P], - m4_defn([AC_PROG_MKDIR_P])[ - AC_SUBST([MKDIR_P])])], [ - dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P. - AC_DEFUN_ONCE([AC_PROG_MKDIR_P], - [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake - MKDIR_P='$(mkdir_p)' - AC_SUBST([MKDIR_P])])]) -]) - -# AC_C_RESTRICT -# This definition is copied from post-2.69 Autoconf and overrides the -# AC_C_RESTRICT macro from autoconf 2.60..2.69. It can be removed -# once autoconf >= 2.70 can be assumed. It's painful to check version -# numbers, and in practice this macro is more up-to-date than Autoconf -# is, so override Autoconf unconditionally. -AC_DEFUN([AC_C_RESTRICT], -[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], - [ac_cv_c_restrict=no - # The order here caters to the fact that C++ does not require restrict. - for ac_kw in __restrict __restrict__ _Restrict restrict; do - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[typedef int *int_ptr; - int foo (int_ptr $ac_kw ip) { return ip[0]; } - int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ - int bar (int ip[$ac_kw]) { return ip[0]; } - ]], - [[int s[1]; - int *$ac_kw t = s; - t[0] = 0; - return foo (t) + bar (t); - ]])], - [ac_cv_c_restrict=$ac_kw]) - test "$ac_cv_c_restrict" != no && break - done - ]) - AH_VERBATIM([restrict], -[/* Define to the equivalent of the C99 'restrict' keyword, or to - nothing if this is not supported. Do not define if restrict is - supported directly. */ -#undef restrict -/* Work around a bug in Sun C++: it does not support _Restrict or - __restrict__, even though the corresponding Sun C compiler ends up with - "#define restrict _Restrict" or "#define restrict __restrict__" in the - previous line. Perhaps some future version of Sun C++ will work with - restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ -#if defined __SUNPRO_CC && !defined __RESTRICT -# define _Restrict -# define __restrict__ -#endif]) - case $ac_cv_c_restrict in - restrict) ;; - no) AC_DEFINE([restrict], []) ;; - *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; - esac -])# AC_C_RESTRICT - -# gl_BIGENDIAN -# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. -# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some -# macros invoke AC_C_BIGENDIAN with arguments. -AC_DEFUN([gl_BIGENDIAN], -[ - AC_C_BIGENDIAN -]) - -# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) -# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not -# output a spurious "(cached)" mark in the midst of other configure output. -# This macro should be used instead of AC_CACHE_VAL when it is not surrounded -# by an AC_MSG_CHECKING/AC_MSG_RESULT pair. -AC_DEFUN([gl_CACHE_VAL_SILENT], -[ - saved_as_echo_n="$as_echo_n" - as_echo_n=':' - AC_CACHE_VAL([$1], [$2]) - as_echo_n="$saved_as_echo_n" -]) - -# AS_VAR_COPY was added in autoconf 2.63b -m4_define_default([AS_VAR_COPY], -[AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])]) - -# AC_PROG_SED was added in autoconf 2.59b -m4_ifndef([AC_PROG_SED], -[AC_DEFUN([AC_PROG_SED], -[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED, - [dnl ac_script should not contain more than 99 commands (for HP-UX sed), - dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed. - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - AS_UNSET([ac_script]) - if test -z "$SED"; then - ac_path_SED_found=false - _AS_PATH_WALK([], [ - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - AS_EXECUTABLE_P(["$ac_path_SED"]) || continue - case `"$ac_path_SED" --version 2>&1` in - *GNU*) ac_cv_path_SED=$ac_path_SED ac_path_SED_found=:;; - *) - ac_count=0 - _AS_ECHO_N([0123456789]) >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >> conftest.nl - "$ac_path_SED" -f conftest.sed conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best so far, but keep looking for better - ac_cv_path_SED=$ac_path_SED - ac_path_SED_max=$ac_count - fi - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; - esac - $ac_path_SED_found && break 3 - done - done]) - if test -z "$ac_cv_path_SED"; then - AC_ERROR([no acceptable sed could be found in \$PATH]) - fi - else - ac_cv_path_SED=$SED - fi - SED="$ac_cv_path_SED" - AC_SUBST([SED])dnl - rm -f conftest.sed -])])]) diff --git a/lib/unistring/m4/gnulib-comp.m4 b/lib/unistring/m4/gnulib-comp.m4 deleted file mode 100644 index 690f4bfa8b..0000000000 --- a/lib/unistring/m4/gnulib-comp.m4 +++ /dev/null @@ -1,562 +0,0 @@ -# DO NOT EDIT! GENERATED AUTOMATICALLY! -# Copyright (C) 2002-2016 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file. If not, see . -# -# As a special exception to the GNU General Public License, -# this file may be distributed as part of a program that -# contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. -# -# This file represents the compiled summary of the specification in -# gnulib-cache.m4. It lists the computed macro invocations that need -# to be invoked from configure.ac. -# In projects that use version control, this file can be treated like -# other built files. - - -# This macro should be invoked from ./configure.ac, in the section -# "Checks for programs", right after AC_PROG_CC, and certainly before -# any checks for libraries, header files, types and library functions. -AC_DEFUN([unistring_EARLY], -[ - m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace - m4_pattern_allow([^gl_ES$])dnl a valid locale name - m4_pattern_allow([^gl_LIBOBJS$])dnl a variable - m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable - - # Pre-early section. - AC_REQUIRE([gl_PROG_AR_RANLIB]) - - AC_REQUIRE([AM_PROG_CC_C_O]) - # Code from module absolute-header: - # Code from module array-mergesort: - # Code from module gperf: - # Code from module include_next: - # Code from module inline: - # Code from module limits-h: - # Code from module multiarch: - # Code from module snippet/unused-parameter: - # Code from module ssize_t: - # Code from module stdbool: - # Code from module stdint: - # Code from module sys_types: - # Code from module unictype/base: - # Code from module unictype/category-C: - # Code from module unictype/category-Cc: - # Code from module unictype/category-Cf: - # Code from module unictype/category-Cn: - # Code from module unictype/category-Co: - # Code from module unictype/category-Cs: - # Code from module unictype/category-L: - # Code from module unictype/category-LC: - # Code from module unictype/category-Ll: - # Code from module unictype/category-Lm: - # Code from module unictype/category-Lo: - # Code from module unictype/category-Lt: - # Code from module unictype/category-Lu: - # Code from module unictype/category-M: - # Code from module unictype/category-Mc: - # Code from module unictype/category-Me: - # Code from module unictype/category-Mn: - # Code from module unictype/category-N: - # Code from module unictype/category-Nd: - # Code from module unictype/category-Nl: - # Code from module unictype/category-No: - # Code from module unictype/category-P: - # Code from module unictype/category-Pc: - # Code from module unictype/category-Pd: - # Code from module unictype/category-Pe: - # Code from module unictype/category-Pf: - # Code from module unictype/category-Pi: - # Code from module unictype/category-Po: - # Code from module unictype/category-Ps: - # Code from module unictype/category-S: - # Code from module unictype/category-Sc: - # Code from module unictype/category-Sk: - # Code from module unictype/category-Sm: - # Code from module unictype/category-So: - # Code from module unictype/category-Z: - # Code from module unictype/category-Zl: - # Code from module unictype/category-Zp: - # Code from module unictype/category-Zs: - # Code from module unictype/category-all: - # Code from module unictype/category-and: - # Code from module unictype/category-and-not: - # Code from module unictype/category-byname: - # Code from module unictype/category-longname: - # Code from module unictype/category-name: - # Code from module unictype/category-none: - # Code from module unictype/category-of: - # Code from module unictype/category-or: - # Code from module unictype/category-test: - # Code from module unictype/category-test-withtable: - # Code from module unictype/combining-class: - # Code from module unictype/property-default-ignorable-code-point: - # Code from module unictype/property-join-control: - # Code from module unictype/property-not-a-character: - # Code from module uninorm/base: - # Code from module uninorm/canonical-decomposition: - # Code from module uninorm/compat-decomposition: - # Code from module uninorm/composition: - # Code from module uninorm/decompose-internal: - # Code from module uninorm/decomposition: - # Code from module uninorm/decomposition-table: - # Code from module uninorm/nfc: - # Code from module uninorm/nfd: - # Code from module uninorm/nfkc: - # Code from module uninorm/nfkd: - # Code from module uninorm/u16-normalize: - # Code from module uninorm/u32-normalize: - # Code from module uninorm/u8-normalize: - # Code from module unistr/base: - # Code from module unistr/u16-cpy: - # Code from module unistr/u16-mbtouc-unsafe: - # Code from module unistr/u16-mbtoucr: - # Code from module unistr/u16-to-u8: - # Code from module unistr/u16-uctomb: - # Code from module unistr/u32-cpy: - # Code from module unistr/u32-mbtouc-unsafe: - # Code from module unistr/u32-to-u8: - # Code from module unistr/u32-uctomb: - # Code from module unistr/u8-check: - # Code from module unistr/u8-cpy: - # Code from module unistr/u8-mbtouc-unsafe: - # Code from module unistr/u8-mbtoucr: - # Code from module unistr/u8-to-u16: - # Code from module unistr/u8-to-u32: - # Code from module unistr/u8-uctomb: - # Code from module unitypes: -]) - -# This macro should be invoked from ./configure.ac, in the section -# "Check for header files, types and library functions". -AC_DEFUN([unistring_INIT], -[ - AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) - gl_cond_libtool=true - gl_m4_base='lib/unistring/m4' - m4_pushdef([AC_LIBOBJ], m4_defn([unistring_LIBOBJ])) - m4_pushdef([AC_REPLACE_FUNCS], m4_defn([unistring_REPLACE_FUNCS])) - m4_pushdef([AC_LIBSOURCES], m4_defn([unistring_LIBSOURCES])) - m4_pushdef([unistring_LIBSOURCES_LIST], []) - m4_pushdef([unistring_LIBSOURCES_DIR], []) - gl_COMMON - gl_source_base='lib/unistring' - gl_INLINE - gl_LIMITS_H - gl_MULTIARCH - gt_TYPE_SSIZE_T - AM_STDBOOL_H - gl_STDINT_H - gl_SYS_TYPES_H - AC_PROG_MKDIR_P - gl_LIBUNISTRING_LIBHEADER([0.9.4], [unictype.h]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-C]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Cc]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Cf]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Cn]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Co]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Cs]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-L]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-LC]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Ll]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Lm]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Lo]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Lt]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Lu]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-M]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Mc]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Me]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Mn]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-N]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Nd]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Nl]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-No]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-P]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Pc]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Pd]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Pe]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Pf]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Pi]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Po]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Ps]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-S]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Sc]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Sk]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Sm]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-So]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Z]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Zl]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Zp]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-Zs]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-and]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-and-not]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-byname]) - gl_LIBUNISTRING_MODULE([0.9.5], [unictype/category-longname]) - gl_LIBUNISTRING_MODULE([0.9], [unictype/category-name]) - gl_LIBUNISTRING_MODULE([0.9.5], [unictype/category-none]) - AC_REQUIRE([AC_C_INLINE]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-of]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/category-or]) - AC_REQUIRE([AC_C_INLINE]) - gl_LIBUNISTRING_MODULE([0.9.5], [unictype/category-test]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/combining-class]) - AC_REQUIRE([AC_C_INLINE]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/property-default-ignorable-code-point]) - AC_REQUIRE([AC_C_INLINE]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/property-join-control]) - AC_REQUIRE([AC_C_INLINE]) - gl_LIBUNISTRING_MODULE([0.9.6], [unictype/property-not-a-character]) - gl_LIBUNISTRING_LIBHEADER([0.9.4], [uninorm.h]) - gl_LIBUNISTRING_MODULE([0.9.6], [uninorm/canonical-decomposition]) - gl_LIBUNISTRING_MODULE([0.9.6], [uninorm/composition]) - gl_LIBUNISTRING_MODULE([0.9.6], [uninorm/decomposition]) - AC_REQUIRE([AC_C_INLINE]) - gl_LIBUNISTRING_MODULE([0.9.6], [uninorm/nfc]) - gl_LIBUNISTRING_MODULE([0.9.6], [uninorm/nfd]) - gl_LIBUNISTRING_MODULE([0.9.6], [uninorm/nfkc]) - gl_LIBUNISTRING_MODULE([0.9.6], [uninorm/nfkd]) - gl_MODULE_INDICATOR_FOR_TESTS([uninorm/u16-normalize]) - gl_LIBUNISTRING_MODULE([0.9.6], [uninorm/u16-normalize]) - gl_MODULE_INDICATOR_FOR_TESTS([uninorm/u32-normalize]) - gl_LIBUNISTRING_MODULE([0.9.6], [uninorm/u32-normalize]) - gl_MODULE_INDICATOR_FOR_TESTS([uninorm/u8-normalize]) - gl_LIBUNISTRING_MODULE([0.9.6], [uninorm/u8-normalize]) - gl_LIBUNISTRING_LIBHEADER([0.9.4], [unistr.h]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-cpy]) - gl_MODULE_INDICATOR([unistr/u16-mbtouc-unsafe]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-mbtouc-unsafe]) - gl_MODULE_INDICATOR([unistr/u16-mbtoucr]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-mbtoucr]) - gl_LIBUNISTRING_MODULE([0.9.3], [unistr/u16-to-u8]) - gl_MODULE_INDICATOR([unistr/u16-uctomb]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u16-uctomb]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-cpy]) - gl_MODULE_INDICATOR([unistr/u32-mbtouc-unsafe]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-mbtouc-unsafe]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-to-u8]) - gl_MODULE_INDICATOR([unistr/u32-uctomb]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u32-uctomb]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-check]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-cpy]) - gl_MODULE_INDICATOR([unistr/u8-mbtouc-unsafe]) - gl_LIBUNISTRING_MODULE([0.9.4], [unistr/u8-mbtouc-unsafe]) - gl_MODULE_INDICATOR([unistr/u8-mbtoucr]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-mbtoucr]) - gl_LIBUNISTRING_MODULE([0.9.3], [unistr/u8-to-u16]) - gl_LIBUNISTRING_MODULE([0.9.3], [unistr/u8-to-u32]) - gl_MODULE_INDICATOR([unistr/u8-uctomb]) - gl_LIBUNISTRING_MODULE([0.9], [unistr/u8-uctomb]) - gl_LIBUNISTRING_LIBHEADER([0.9.4], [unitypes.h]) - # End of code from modules - m4_ifval(unistring_LIBSOURCES_LIST, [ - m4_syscmd([test ! -d ]m4_defn([unistring_LIBSOURCES_DIR])[ || - for gl_file in ]unistring_LIBSOURCES_LIST[ ; do - if test ! -r ]m4_defn([unistring_LIBSOURCES_DIR])[/$gl_file ; then - echo "missing file ]m4_defn([unistring_LIBSOURCES_DIR])[/$gl_file" >&2 - exit 1 - fi - done])dnl - m4_if(m4_sysval, [0], [], - [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) - ]) - m4_popdef([unistring_LIBSOURCES_DIR]) - m4_popdef([unistring_LIBSOURCES_LIST]) - m4_popdef([AC_LIBSOURCES]) - m4_popdef([AC_REPLACE_FUNCS]) - m4_popdef([AC_LIBOBJ]) - AC_CONFIG_COMMANDS_PRE([ - unistring_libobjs= - unistring_ltlibobjs= - if test -n "$unistring_LIBOBJS"; then - # Remove the extension. - sed_drop_objext='s/\.o$//;s/\.obj$//' - for i in `for i in $unistring_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do - unistring_libobjs="$unistring_libobjs $i.$ac_objext" - unistring_ltlibobjs="$unistring_ltlibobjs $i.lo" - done - fi - AC_SUBST([unistring_LIBOBJS], [$unistring_libobjs]) - AC_SUBST([unistring_LTLIBOBJS], [$unistring_ltlibobjs]) - ]) - gltests_libdeps= - gltests_ltlibdeps= - m4_pushdef([AC_LIBOBJ], m4_defn([unistringtests_LIBOBJ])) - m4_pushdef([AC_REPLACE_FUNCS], m4_defn([unistringtests_REPLACE_FUNCS])) - m4_pushdef([AC_LIBSOURCES], m4_defn([unistringtests_LIBSOURCES])) - m4_pushdef([unistringtests_LIBSOURCES_LIST], []) - m4_pushdef([unistringtests_LIBSOURCES_DIR], []) - gl_COMMON - gl_source_base='tests' -changequote(,)dnl - unistringtests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS -changequote([, ])dnl - AC_SUBST([unistringtests_WITNESS]) - gl_module_indicator_condition=$unistringtests_WITNESS - m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) - m4_popdef([gl_MODULE_INDICATOR_CONDITION]) - m4_ifval(unistringtests_LIBSOURCES_LIST, [ - m4_syscmd([test ! -d ]m4_defn([unistringtests_LIBSOURCES_DIR])[ || - for gl_file in ]unistringtests_LIBSOURCES_LIST[ ; do - if test ! -r ]m4_defn([unistringtests_LIBSOURCES_DIR])[/$gl_file ; then - echo "missing file ]m4_defn([unistringtests_LIBSOURCES_DIR])[/$gl_file" >&2 - exit 1 - fi - done])dnl - m4_if(m4_sysval, [0], [], - [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) - ]) - m4_popdef([unistringtests_LIBSOURCES_DIR]) - m4_popdef([unistringtests_LIBSOURCES_LIST]) - m4_popdef([AC_LIBSOURCES]) - m4_popdef([AC_REPLACE_FUNCS]) - m4_popdef([AC_LIBOBJ]) - AC_CONFIG_COMMANDS_PRE([ - unistringtests_libobjs= - unistringtests_ltlibobjs= - if test -n "$unistringtests_LIBOBJS"; then - # Remove the extension. - sed_drop_objext='s/\.o$//;s/\.obj$//' - for i in `for i in $unistringtests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do - unistringtests_libobjs="$unistringtests_libobjs $i.$ac_objext" - unistringtests_ltlibobjs="$unistringtests_ltlibobjs $i.lo" - done - fi - AC_SUBST([unistringtests_LIBOBJS], [$unistringtests_libobjs]) - AC_SUBST([unistringtests_LTLIBOBJS], [$unistringtests_ltlibobjs]) - ]) -]) - -# Like AC_LIBOBJ, except that the module name goes -# into unistring_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([unistring_LIBOBJ], [ - AS_LITERAL_IF([$1], [unistring_LIBSOURCES([$1.c])])dnl - unistring_LIBOBJS="$unistring_LIBOBJS $1.$ac_objext" -]) - -# Like AC_REPLACE_FUNCS, except that the module name goes -# into unistring_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([unistring_REPLACE_FUNCS], [ - m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl - AC_CHECK_FUNCS([$1], , [unistring_LIBOBJ($ac_func)]) -]) - -# Like AC_LIBSOURCES, except the directory where the source file is -# expected is derived from the gnulib-tool parameterization, -# and alloca is special cased (for the alloca-opt module). -# We could also entirely rely on EXTRA_lib..._SOURCES. -AC_DEFUN([unistring_LIBSOURCES], [ - m4_foreach([_gl_NAME], [$1], [ - m4_if(_gl_NAME, [alloca.c], [], [ - m4_define([unistring_LIBSOURCES_DIR], [lib/unistring]) - m4_append([unistring_LIBSOURCES_LIST], _gl_NAME, [ ]) - ]) - ]) -]) - -# Like AC_LIBOBJ, except that the module name goes -# into unistringtests_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([unistringtests_LIBOBJ], [ - AS_LITERAL_IF([$1], [unistringtests_LIBSOURCES([$1.c])])dnl - unistringtests_LIBOBJS="$unistringtests_LIBOBJS $1.$ac_objext" -]) - -# Like AC_REPLACE_FUNCS, except that the module name goes -# into unistringtests_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([unistringtests_REPLACE_FUNCS], [ - m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl - AC_CHECK_FUNCS([$1], , [unistringtests_LIBOBJ($ac_func)]) -]) - -# Like AC_LIBSOURCES, except the directory where the source file is -# expected is derived from the gnulib-tool parameterization, -# and alloca is special cased (for the alloca-opt module). -# We could also entirely rely on EXTRA_lib..._SOURCES. -AC_DEFUN([unistringtests_LIBSOURCES], [ - m4_foreach([_gl_NAME], [$1], [ - m4_if(_gl_NAME, [alloca.c], [], [ - m4_define([unistringtests_LIBSOURCES_DIR], [tests]) - m4_append([unistringtests_LIBSOURCES_LIST], _gl_NAME, [ ]) - ]) - ]) -]) - -# This macro records the list of files which have been installed by -# gnulib-tool and may be removed by future gnulib-tool invocations. -AC_DEFUN([unistring_FILE_LIST], [ - build-aux/snippet/unused-parameter.h - lib/array-mergesort.h - lib/limits.in.h - lib/stdbool.in.h - lib/stdint.in.h - lib/sys_types.in.h - lib/unictype.in.h - lib/unictype/bitmap.h - lib/unictype/categ_C.c - lib/unictype/categ_C.h - lib/unictype/categ_Cc.c - lib/unictype/categ_Cc.h - lib/unictype/categ_Cf.c - lib/unictype/categ_Cf.h - lib/unictype/categ_Cn.c - lib/unictype/categ_Cn.h - lib/unictype/categ_Co.c - lib/unictype/categ_Co.h - lib/unictype/categ_Cs.c - lib/unictype/categ_Cs.h - lib/unictype/categ_L.c - lib/unictype/categ_L.h - lib/unictype/categ_LC.c - lib/unictype/categ_LC.h - lib/unictype/categ_Ll.c - lib/unictype/categ_Ll.h - lib/unictype/categ_Lm.c - lib/unictype/categ_Lm.h - lib/unictype/categ_Lo.c - lib/unictype/categ_Lo.h - lib/unictype/categ_Lt.c - lib/unictype/categ_Lt.h - lib/unictype/categ_Lu.c - lib/unictype/categ_Lu.h - lib/unictype/categ_M.c - lib/unictype/categ_M.h - lib/unictype/categ_Mc.c - lib/unictype/categ_Mc.h - lib/unictype/categ_Me.c - lib/unictype/categ_Me.h - lib/unictype/categ_Mn.c - lib/unictype/categ_Mn.h - lib/unictype/categ_N.c - lib/unictype/categ_N.h - lib/unictype/categ_Nd.c - lib/unictype/categ_Nd.h - lib/unictype/categ_Nl.c - lib/unictype/categ_Nl.h - lib/unictype/categ_No.c - lib/unictype/categ_No.h - lib/unictype/categ_P.c - lib/unictype/categ_P.h - lib/unictype/categ_Pc.c - lib/unictype/categ_Pc.h - lib/unictype/categ_Pd.c - lib/unictype/categ_Pd.h - lib/unictype/categ_Pe.c - lib/unictype/categ_Pe.h - lib/unictype/categ_Pf.c - lib/unictype/categ_Pf.h - lib/unictype/categ_Pi.c - lib/unictype/categ_Pi.h - lib/unictype/categ_Po.c - lib/unictype/categ_Po.h - lib/unictype/categ_Ps.c - lib/unictype/categ_Ps.h - lib/unictype/categ_S.c - lib/unictype/categ_S.h - lib/unictype/categ_Sc.c - lib/unictype/categ_Sc.h - lib/unictype/categ_Sk.c - lib/unictype/categ_Sk.h - lib/unictype/categ_Sm.c - lib/unictype/categ_Sm.h - lib/unictype/categ_So.c - lib/unictype/categ_So.h - lib/unictype/categ_Z.c - lib/unictype/categ_Z.h - lib/unictype/categ_Zl.c - lib/unictype/categ_Zl.h - lib/unictype/categ_Zp.c - lib/unictype/categ_Zp.h - lib/unictype/categ_Zs.c - lib/unictype/categ_Zs.h - lib/unictype/categ_and.c - lib/unictype/categ_and_not.c - lib/unictype/categ_byname.c - lib/unictype/categ_byname.gperf - lib/unictype/categ_longname.c - lib/unictype/categ_name.c - lib/unictype/categ_none.c - lib/unictype/categ_of.c - lib/unictype/categ_of.h - lib/unictype/categ_or.c - lib/unictype/categ_test.c - lib/unictype/combiningclass.c - lib/unictype/combiningclass.h - lib/unictype/pr_default_ignorable_code_point.c - lib/unictype/pr_default_ignorable_code_point.h - lib/unictype/pr_join_control.c - lib/unictype/pr_join_control.h - lib/unictype/pr_not_a_character.c - lib/unictype/pr_not_a_character.h - lib/uninorm.in.h - lib/uninorm/canonical-decomposition.c - lib/uninorm/compat-decomposition.c - lib/uninorm/composition-table.gperf - lib/uninorm/composition.c - lib/uninorm/decompose-internal.c - lib/uninorm/decompose-internal.h - lib/uninorm/decomposition-table.c - lib/uninorm/decomposition-table.h - lib/uninorm/decomposition-table1.h - lib/uninorm/decomposition-table2.h - lib/uninorm/decomposition.c - lib/uninorm/nfc.c - lib/uninorm/nfd.c - lib/uninorm/nfkc.c - lib/uninorm/nfkd.c - lib/uninorm/normalize-internal.h - lib/uninorm/u-normalize-internal.h - lib/uninorm/u16-normalize.c - lib/uninorm/u32-normalize.c - lib/uninorm/u8-normalize.c - lib/unistr.in.h - lib/unistr/u-cpy.h - lib/unistr/u16-cpy.c - lib/unistr/u16-mbtouc-unsafe-aux.c - lib/unistr/u16-mbtouc-unsafe.c - lib/unistr/u16-mbtoucr.c - lib/unistr/u16-to-u8.c - lib/unistr/u16-uctomb-aux.c - lib/unistr/u16-uctomb.c - lib/unistr/u32-cpy.c - lib/unistr/u32-mbtouc-unsafe.c - lib/unistr/u32-to-u8.c - lib/unistr/u32-uctomb.c - lib/unistr/u8-check.c - lib/unistr/u8-cpy.c - lib/unistr/u8-mbtouc-unsafe-aux.c - lib/unistr/u8-mbtouc-unsafe.c - lib/unistr/u8-mbtoucr.c - lib/unistr/u8-to-u16.c - lib/unistr/u8-to-u32.c - lib/unistr/u8-uctomb-aux.c - lib/unistr/u8-uctomb.c - lib/unitypes.in.h - m4/00gnulib.m4 - m4/absolute-header.m4 - m4/gnulib-common.m4 - m4/include_next.m4 - m4/inline.m4 - m4/libunistring-base.m4 - m4/limits-h.m4 - m4/longlong.m4 - m4/multiarch.m4 - m4/off_t.m4 - m4/ssize_t.m4 - m4/stdbool.m4 - m4/stdint.m4 - m4/sys_types_h.m4 -]) diff --git a/lib/unistring/m4/gnulib-tool.m4 b/lib/unistring/m4/gnulib-tool.m4 deleted file mode 100644 index 0d2ee444b4..0000000000 --- a/lib/unistring/m4/gnulib-tool.m4 +++ /dev/null @@ -1,57 +0,0 @@ -# gnulib-tool.m4 serial 2 -dnl Copyright (C) 2004-2005, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl The following macros need not be invoked explicitly. -dnl Invoking them does nothing except to declare default arguments -dnl for "gnulib-tool --import". - -dnl Usage: gl_LOCAL_DIR([DIR]) -AC_DEFUN([gl_LOCAL_DIR], []) - -dnl Usage: gl_MODULES([module1 module2 ...]) -AC_DEFUN([gl_MODULES], []) - -dnl Usage: gl_AVOID([module1 module2 ...]) -AC_DEFUN([gl_AVOID], []) - -dnl Usage: gl_SOURCE_BASE([DIR]) -AC_DEFUN([gl_SOURCE_BASE], []) - -dnl Usage: gl_M4_BASE([DIR]) -AC_DEFUN([gl_M4_BASE], []) - -dnl Usage: gl_PO_BASE([DIR]) -AC_DEFUN([gl_PO_BASE], []) - -dnl Usage: gl_DOC_BASE([DIR]) -AC_DEFUN([gl_DOC_BASE], []) - -dnl Usage: gl_TESTS_BASE([DIR]) -AC_DEFUN([gl_TESTS_BASE], []) - -dnl Usage: gl_WITH_TESTS -AC_DEFUN([gl_WITH_TESTS], []) - -dnl Usage: gl_LIB([LIBNAME]) -AC_DEFUN([gl_LIB], []) - -dnl Usage: gl_LGPL or gl_LGPL([VERSION]) -AC_DEFUN([gl_LGPL], []) - -dnl Usage: gl_MAKEFILE_NAME([FILENAME]) -AC_DEFUN([gl_MAKEFILE_NAME], []) - -dnl Usage: gl_LIBTOOL -AC_DEFUN([gl_LIBTOOL], []) - -dnl Usage: gl_MACRO_PREFIX([PREFIX]) -AC_DEFUN([gl_MACRO_PREFIX], []) - -dnl Usage: gl_PO_DOMAIN([DOMAIN]) -AC_DEFUN([gl_PO_DOMAIN], []) - -dnl Usage: gl_VC_FILES([BOOLEAN]) -AC_DEFUN([gl_VC_FILES], []) diff --git a/lib/unistring/m4/include_next.m4 b/lib/unistring/m4/include_next.m4 deleted file mode 100644 index db0f2c0795..0000000000 --- a/lib/unistring/m4/include_next.m4 +++ /dev/null @@ -1,223 +0,0 @@ -# include_next.m4 serial 23 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert and Derek Price. - -dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER. -dnl -dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to -dnl 'include' otherwise. -dnl -dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler -dnl supports it in the special case that it is the first include directive in -dnl the given file, or to 'include' otherwise. -dnl -dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, -dnl so as to avoid GCC warnings when the gcc option -pedantic is used. -dnl '#pragma GCC system_header' has the same effect as if the file was found -dnl through the include search path specified with '-isystem' options (as -dnl opposed to the search path specified with '-I' options). Namely, gcc -dnl does not warn about some things, and on some systems (Solaris and Interix) -dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side -dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead -dnl of plain '__STDC__'. -dnl -dnl PRAGMA_COLUMNS can be used in files that override system header files, so -dnl as to avoid compilation errors on HP NonStop systems when the gnulib file -dnl is included by a system header file that does a "#pragma COLUMNS 80" (which -dnl has the effect of truncating the lines of that file and all files that it -dnl includes to 80 columns) and the gnulib file has lines longer than 80 -dnl columns. - -AC_DEFUN([gl_INCLUDE_NEXT], -[ - AC_LANG_PREPROC_REQUIRE() - AC_CACHE_CHECK([whether the preprocessor supports include_next], - [gl_cv_have_include_next], - [rm -rf conftestd1a conftestd1b conftestd2 - mkdir conftestd1a conftestd1b conftestd2 - dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on - dnl AIX 6.1 support include_next when used as first preprocessor directive - dnl in a file, but not when preceded by another include directive. Check - dnl for this bug by including . - dnl Additionally, with this same compiler, include_next is a no-op when - dnl used in a header file that was included by specifying its absolute - dnl file name. Despite these two bugs, include_next is used in the - dnl compiler's . By virtue of the second bug, we need to use - dnl include_next as well in this case. - cat < conftestd1a/conftest.h -#define DEFINED_IN_CONFTESTD1 -#include_next -#ifdef DEFINED_IN_CONFTESTD2 -int foo; -#else -#error "include_next doesn't work" -#endif -EOF - cat < conftestd1b/conftest.h -#define DEFINED_IN_CONFTESTD1 -#include -#include_next -#ifdef DEFINED_IN_CONFTESTD2 -int foo; -#else -#error "include_next doesn't work" -#endif -EOF - cat < conftestd2/conftest.h -#ifndef DEFINED_IN_CONFTESTD1 -#error "include_next test doesn't work" -#endif -#define DEFINED_IN_CONFTESTD2 -EOF - gl_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" -dnl We intentionally avoid using AC_LANG_SOURCE here. - AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], - [gl_cv_have_include_next=yes], - [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" - AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], - [gl_cv_have_include_next=buggy], - [gl_cv_have_include_next=no]) - ]) - CPPFLAGS="$gl_save_CPPFLAGS" - rm -rf conftestd1a conftestd1b conftestd2 - ]) - PRAGMA_SYSTEM_HEADER= - if test $gl_cv_have_include_next = yes; then - INCLUDE_NEXT=include_next - INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next - if test -n "$GCC"; then - PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' - fi - else - if test $gl_cv_have_include_next = buggy; then - INCLUDE_NEXT=include - INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next - else - INCLUDE_NEXT=include - INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include - fi - fi - AC_SUBST([INCLUDE_NEXT]) - AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) - AC_SUBST([PRAGMA_SYSTEM_HEADER]) - AC_CACHE_CHECK([whether system header files limit the line length], - [gl_cv_pragma_columns], - [dnl HP NonStop systems, which define __TANDEM, have this misfeature. - AC_EGREP_CPP([choke me], - [ -#ifdef __TANDEM -choke me -#endif - ], - [gl_cv_pragma_columns=yes], - [gl_cv_pragma_columns=no]) - ]) - if test $gl_cv_pragma_columns = yes; then - PRAGMA_COLUMNS="#pragma COLUMNS 10000" - else - PRAGMA_COLUMNS= - fi - AC_SUBST([PRAGMA_COLUMNS]) -]) - -# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) -# ------------------------------------------ -# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be -# ''; otherwise define it to be -# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. -# Also, if #include_next works as first preprocessing directive in a file, -# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be ''; otherwise define it to -# be -# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. -# That way, a header file with the following line: -# #@INCLUDE_NEXT@ @NEXT_FOO_H@ -# or -# #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ -# behaves (after sed substitution) as if it contained -# #include_next -# even if the compiler does not support include_next. -# The three "///" are to pacify Sun C 5.8, which otherwise would say -# "warning: #include of /usr/include/... may be non-portable". -# Use '""', not '<>', so that the /// cannot be confused with a C99 comment. -# Note: This macro assumes that the header file is not empty after -# preprocessing, i.e. it does not only define preprocessor macros but also -# provides some type/enum definitions or function/variable declarations. -# -# This macro also checks whether each header exists, by invoking -# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. -AC_DEFUN([gl_CHECK_NEXT_HEADERS], -[ - gl_NEXT_HEADERS_INTERNAL([$1], [check]) -]) - -# gl_NEXT_HEADERS(HEADER1 HEADER2 ...) -# ------------------------------------ -# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. -# This is suitable for headers like that are standardized by C89 -# and therefore can be assumed to exist. -AC_DEFUN([gl_NEXT_HEADERS], -[ - gl_NEXT_HEADERS_INTERNAL([$1], [assume]) -]) - -# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. -AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], -[ - AC_REQUIRE([gl_INCLUDE_NEXT]) - AC_REQUIRE([AC_CANONICAL_HOST]) - - m4_if([$2], [check], - [AC_CHECK_HEADERS_ONCE([$1]) - ]) - -dnl FIXME: gl_next_header and gl_header_exists must be used unquoted -dnl until we can assume autoconf 2.64 or newer. - m4_foreach_w([gl_HEADER_NAME], [$1], - [AS_VAR_PUSHDEF([gl_next_header], - [gl_cv_next_]m4_defn([gl_HEADER_NAME])) - if test $gl_cv_have_include_next = yes; then - AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) - else - AC_CACHE_CHECK( - [absolute name of <]m4_defn([gl_HEADER_NAME])[>], - m4_defn([gl_next_header]), - [m4_if([$2], [check], - [AS_VAR_PUSHDEF([gl_header_exists], - [ac_cv_header_]m4_defn([gl_HEADER_NAME])) - if test AS_VAR_GET(gl_header_exists) = yes; then - AS_VAR_POPDEF([gl_header_exists]) - ]) - gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) - AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) - AS_VAR_SET(gl_next_header, ['"'$gl_header'"']) - m4_if([$2], [check], - [else - AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) - fi - ]) - ]) - fi - AC_SUBST( - AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), - [AS_VAR_GET(gl_next_header)]) - if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'gl_HEADER_NAME'>' - else - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=AS_VAR_GET(gl_next_header) - fi - AC_SUBST( - AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), - [$gl_next_as_first_directive]) - AS_VAR_POPDEF([gl_next_header])]) -]) - -# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; -# this fallback is safe for all earlier autoconf versions. -m4_define_default([AC_LANG_DEFINES_PROVIDED]) diff --git a/lib/unistring/m4/inline.m4 b/lib/unistring/m4/inline.m4 deleted file mode 100644 index 28fd2d091b..0000000000 --- a/lib/unistring/m4/inline.m4 +++ /dev/null @@ -1,40 +0,0 @@ -# inline.m4 serial 4 -dnl Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Test for the 'inline' keyword or equivalent. -dnl Define 'inline' to a supported equivalent, or to nothing if not supported, -dnl like AC_C_INLINE does. Also, define HAVE_INLINE if 'inline' or an -dnl equivalent is effectively supported, i.e. if the compiler is likely to -dnl drop unused 'static inline' functions. -AC_DEFUN([gl_INLINE], -[ - AC_REQUIRE([AC_C_INLINE]) - AC_CACHE_CHECK([whether the compiler generally respects inline], - [gl_cv_c_inline_effective], - [if test $ac_cv_c_inline = no; then - gl_cv_c_inline_effective=no - else - dnl GCC defines __NO_INLINE__ if not optimizing or if -fno-inline is - dnl specified. - dnl Use AC_COMPILE_IFELSE here, not AC_EGREP_CPP, because the result - dnl depends on optimization flags, which can be in CFLAGS. - dnl (AC_EGREP_CPP looks only at the CPPFLAGS.) - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[]], - [[#ifdef __NO_INLINE__ - #error "inline is not effective" - #endif]])], - [gl_cv_c_inline_effective=yes], - [gl_cv_c_inline_effective=no]) - fi - ]) - if test $gl_cv_c_inline_effective = yes; then - AC_DEFINE([HAVE_INLINE], [1], - [Define to 1 if the compiler supports one of the keywords - 'inline', '__inline__', '__inline' and effectively inlines - functions marked as such.]) - fi -]) diff --git a/lib/unistring/m4/libunistring-base.m4 b/lib/unistring/m4/libunistring-base.m4 deleted file mode 100644 index f911216b5f..0000000000 --- a/lib/unistring/m4/libunistring-base.m4 +++ /dev/null @@ -1,141 +0,0 @@ -# libunistring-base.m4 serial 5 -dnl Copyright (C) 2010-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paolo Bonzini and Bruno Haible. - -dnl gl_LIBUNISTRING_MODULE([VERSION], [Module]) -dnl Declares that the source files of Module should be compiled, unless we -dnl are linking with libunistring and its version is >= the given VERSION. -dnl Defines an automake conditional LIBUNISTRING_COMPILE_$MODULE that is -dnl true if the source files of Module should be compiled. -dnl This macro is to be used for public libunistring API, not for -dnl undocumented API. -dnl -dnl You have to bump the VERSION argument to the next projected version -dnl number each time you make a change that affects the behaviour of the -dnl functions defined in Module (even if the sources of Module itself do not -dnl change). - -AC_DEFUN([gl_LIBUNISTRING_MODULE], -[ - AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE]) - dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from - dnl gl_LIBUNISTRING_CORE if that macro has been run. - AM_CONDITIONAL(AS_TR_CPP([LIBUNISTRING_COMPILE_$2]), - [gl_LIBUNISTRING_VERSION_CMP([$1])]) -]) - -dnl gl_LIBUNISTRING_LIBHEADER([VERSION], [HeaderFile]) -dnl Declares that HeaderFile should be created, unless we are linking -dnl with libunistring and its version is >= the given VERSION. -dnl HeaderFile should be relative to the lib directory and end in '.h'. -dnl Prepares for substituting LIBUNISTRING_HEADERFILE (to HeaderFile or empty). -dnl -dnl When we are linking with the already installed libunistring and its version -dnl is < VERSION, we create HeaderFile here, because we may compile functions -dnl (via gl_LIBUNISTRING_MODULE above) that are not contained in the installed -dnl version. -dnl When we are linking with the already installed libunistring and its version -dnl is > VERSION, we don't create HeaderFile here: it could cause compilation -dnl errors in other libunistring header files if some types are missing. -dnl -dnl You have to bump the VERSION argument to the next projected version -dnl number each time you make a non-comment change to the HeaderFile. - -AC_DEFUN([gl_LIBUNISTRING_LIBHEADER], -[ - AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE]) - dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from - dnl gl_LIBUNISTRING_CORE if that macro has been run. - if gl_LIBUNISTRING_VERSION_CMP([$1]); then - LIBUNISTRING_[]AS_TR_CPP([$2])='$2' - else - LIBUNISTRING_[]AS_TR_CPP([$2])= - fi - AC_SUBST([LIBUNISTRING_]AS_TR_CPP([$2])) -]) - -dnl Miscellaneous preparations/initializations. - -AC_DEFUN([gl_LIBUNISTRING_LIB_PREPARE], -[ - dnl Ensure that HAVE_LIBUNISTRING is fully determined at this point. - m4_ifdef([gl_LIBUNISTRING], [AC_REQUIRE([gl_LIBUNISTRING])]) - - AC_REQUIRE([AC_PROG_AWK]) - -dnl Sed expressions to extract the parts of a version number. -changequote(,) -gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;} -i\ -0 -q -' -gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;} -i\ -0 -q -' -gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;} -i\ -0 -q -' -changequote([,]) - - if test "$HAVE_LIBUNISTRING" = yes; then - LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"` - LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"` - LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"` - fi -]) - -dnl gl_LIBUNISTRING_VERSION_CMP([VERSION]) -dnl Expands to a shell statement that evaluates to true if LIBUNISTRING_VERSION -dnl is less than the VERSION argument. -AC_DEFUN([gl_LIBUNISTRING_VERSION_CMP], -[ { test "$HAVE_LIBUNISTRING" != yes \ - || { - dnl AS_LITERAL_IF exists and works fine since autoconf-2.59 at least. - AS_LITERAL_IF([$1], - [dnl This is the optimized variant, that assumes the argument is a literal: - m4_pushdef([requested_version_major], - [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^\([0-9]*\).*], [\1]), [])]) - m4_pushdef([requested_version_minor], - [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.]\([0-9]*\).*], [\1]), [$1])]) - m4_pushdef([requested_version_subminor], - [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.][0-9]*[.]\([0-9]*\).*], [\1]), [$1])]) - test $LIBUNISTRING_VERSION_MAJOR -lt requested_version_major \ - || { test $LIBUNISTRING_VERSION_MAJOR -eq requested_version_major \ - && { test $LIBUNISTRING_VERSION_MINOR -lt requested_version_minor \ - || { test $LIBUNISTRING_VERSION_MINOR -eq requested_version_minor \ - && test $LIBUNISTRING_VERSION_SUBMINOR -lt requested_version_subminor - } - } - } - m4_popdef([requested_version_subminor]) - m4_popdef([requested_version_minor]) - m4_popdef([requested_version_major]) - ], - [dnl This is the unoptimized variant: - requested_version_major=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_major"` - requested_version_minor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_minor"` - requested_version_subminor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_subminor"` - test $LIBUNISTRING_VERSION_MAJOR -lt $requested_version_major \ - || { test $LIBUNISTRING_VERSION_MAJOR -eq $requested_version_major \ - && { test $LIBUNISTRING_VERSION_MINOR -lt $requested_version_minor \ - || { test $LIBUNISTRING_VERSION_MINOR -eq $requested_version_minor \ - && test $LIBUNISTRING_VERSION_SUBMINOR -lt $requested_version_subminor - } - } - } - ]) - } - }]) - -dnl gl_LIBUNISTRING_ARG_OR_ZERO([ARG], [ORIG]) expands to ARG if it is not the -dnl same as ORIG, otherwise to 0. -m4_define([gl_LIBUNISTRING_ARG_OR_ZERO], [m4_if([$1], [$2], [0], [$1])]) diff --git a/lib/unistring/m4/limits-h.m4 b/lib/unistring/m4/limits-h.m4 deleted file mode 100644 index 31fdf0a779..0000000000 --- a/lib/unistring/m4/limits-h.m4 +++ /dev/null @@ -1,31 +0,0 @@ -dnl Check whether limits.h has needed features. - -dnl Copyright 2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -AC_DEFUN_ONCE([gl_LIMITS_H], -[ - gl_CHECK_NEXT_HEADERS([limits.h]) - - AC_CACHE_CHECK([whether limits.h has ULLONG_WIDTH etc.], - [gl_cv_header_limits_width], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ - #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 - #endif - #include - int ullw = ULLONG_WIDTH;]])], - [gl_cv_header_limits_width=yes], - [gl_cv_header_limits_width=no])]) - if test "$gl_cv_header_limits_width" = yes; then - LIMITS_H= - else - LIMITS_H=limits.h - fi - AC_SUBST([LIMITS_H]) - AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) -]) diff --git a/lib/unistring/m4/longlong.m4 b/lib/unistring/m4/longlong.m4 deleted file mode 100644 index 36d8b12421..0000000000 --- a/lib/unistring/m4/longlong.m4 +++ /dev/null @@ -1,113 +0,0 @@ -# longlong.m4 serial 17 -dnl Copyright (C) 1999-2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_LONG_LONG_INT if 'long long int' works. -# This fixes a bug in Autoconf 2.61, and can be faster -# than what's in Autoconf 2.62 through 2.68. - -# Note: If the type 'long long int' exists but is only 32 bits large -# (as on some very old compilers), HAVE_LONG_LONG_INT will not be -# defined. In this case you can treat 'long long int' like 'long int'. - -AC_DEFUN([AC_TYPE_LONG_LONG_INT], -[ - AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) - AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], - [ac_cv_type_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int - if test $ac_cv_type_long_long_int = yes; then - dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. - dnl If cross compiling, assume the bug is not important, since - dnl nobody cross compiles for this platform as far as we know. - AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[@%:@include - @%:@ifndef LLONG_MAX - @%:@ define HALF \ - (1LL << (sizeof (long long int) * CHAR_BIT - 2)) - @%:@ define LLONG_MAX (HALF - 1 + HALF) - @%:@endif]], - [[long long int n = 1; - int i; - for (i = 0; ; i++) - { - long long int m = n << i; - if (m >> i != n) - return 1; - if (LLONG_MAX / 2 < m) - break; - } - return 0;]])], - [], - [ac_cv_type_long_long_int=no], - [:]) - fi - fi]) - if test $ac_cv_type_long_long_int = yes; then - AC_DEFINE([HAVE_LONG_LONG_INT], [1], - [Define to 1 if the system has the type 'long long int'.]) - fi -]) - -# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. -# This fixes a bug in Autoconf 2.61, and can be faster -# than what's in Autoconf 2.62 through 2.68. - -# Note: If the type 'unsigned long long int' exists but is only 32 bits -# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT -# will not be defined. In this case you can treat 'unsigned long long int' -# like 'unsigned long int'. - -AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], -[ - AC_CACHE_CHECK([for unsigned long long int], - [ac_cv_type_unsigned_long_long_int], - [ac_cv_type_unsigned_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - AC_LINK_IFELSE( - [_AC_TYPE_LONG_LONG_SNIPPET], - [], - [ac_cv_type_unsigned_long_long_int=no]) - fi]) - if test $ac_cv_type_unsigned_long_long_int = yes; then - AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], - [Define to 1 if the system has the type 'unsigned long long int'.]) - fi -]) - -# Expands to a C program that can be used to test for simultaneous support -# of 'long long' and 'unsigned long long'. We don't want to say that -# 'long long' is available if 'unsigned long long' is not, or vice versa, -# because too many programs rely on the symmetry between signed and unsigned -# integer types (excluding 'bool'). -AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], -[ - AC_LANG_PROGRAM( - [[/* For now, do not test the preprocessor; as of 2007 there are too many - implementations with broken preprocessors. Perhaps this can - be revisited in 2012. In the meantime, code should not expect - #if to work with literals wider than 32 bits. */ - /* Test literals. */ - long long int ll = 9223372036854775807ll; - long long int nll = -9223372036854775807LL; - unsigned long long int ull = 18446744073709551615ULL; - /* Test constant expressions. */ - typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) - ? 1 : -1)]; - typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 - ? 1 : -1)]; - int i = 63;]], - [[/* Test availability of runtime routines for shift and division. */ - long long int llmax = 9223372036854775807ll; - unsigned long long int ullmax = 18446744073709551615ull; - return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) - | (llmax / ll) | (llmax % ll) - | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) - | (ullmax / ull) | (ullmax % ull));]]) -]) diff --git a/lib/unistring/m4/multiarch.m4 b/lib/unistring/m4/multiarch.m4 deleted file mode 100644 index 43b5d05750..0000000000 --- a/lib/unistring/m4/multiarch.m4 +++ /dev/null @@ -1,62 +0,0 @@ -# multiarch.m4 serial 7 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Determine whether the compiler is or may be producing universal binaries. -# -# On Mac OS X 10.5 and later systems, the user can create libraries and -# executables that work on multiple system types--known as "fat" or -# "universal" binaries--by specifying multiple '-arch' options to the -# compiler but only a single '-arch' option to the preprocessor. Like -# this: -# -# ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ -# CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ -# CPP="gcc -E" CXXCPP="g++ -E" -# -# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. - -AC_DEFUN_ONCE([gl_MULTIARCH], -[ - dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. - gl_cv_c_multiarch=no - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - ]])], - [ - dnl Check for potential -arch flags. It is not universal unless - dnl there are at least two -arch flags with different values. - arch= - prev= - for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do - if test -n "$prev"; then - case $word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$arch" || test "$arch" = "$word"; then - arch="$word" - else - gl_cv_c_multiarch=yes - fi - ;; - esac - prev= - else - if test "x$word" = "x-arch"; then - prev=arch - fi - fi - done - ]) - if test $gl_cv_c_multiarch = yes; then - APPLE_UNIVERSAL_BUILD=1 - else - APPLE_UNIVERSAL_BUILD=0 - fi - AC_SUBST([APPLE_UNIVERSAL_BUILD]) -]) diff --git a/lib/unistring/m4/off_t.m4 b/lib/unistring/m4/off_t.m4 deleted file mode 100644 index 282751b47b..0000000000 --- a/lib/unistring/m4/off_t.m4 +++ /dev/null @@ -1,18 +0,0 @@ -# off_t.m4 serial 1 -dnl Copyright (C) 2012-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Check whether to override the 'off_t' type. -dnl Set WINDOWS_64_BIT_OFF_T. - -AC_DEFUN([gl_TYPE_OFF_T], -[ - m4_ifdef([gl_LARGEFILE], [ - AC_REQUIRE([gl_LARGEFILE]) - ], [ - WINDOWS_64_BIT_OFF_T=0 - ]) - AC_SUBST([WINDOWS_64_BIT_OFF_T]) -]) diff --git a/lib/unistring/m4/ssize_t.m4 b/lib/unistring/m4/ssize_t.m4 deleted file mode 100644 index 3e7b9e6e02..0000000000 --- a/lib/unistring/m4/ssize_t.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ssize_t.m4 serial 5 (gettext-0.18.2) -dnl Copyright (C) 2001-2003, 2006, 2010-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Test whether ssize_t is defined. - -AC_DEFUN([gt_TYPE_SSIZE_T], -[ - AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[int x = sizeof (ssize_t *) + sizeof (ssize_t); - return !x;]])], - [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) - if test $gt_cv_ssize_t = no; then - AC_DEFINE([ssize_t], [int], - [Define as a signed type of the same size as size_t.]) - fi -]) diff --git a/lib/unistring/m4/stdbool.m4 b/lib/unistring/m4/stdbool.m4 deleted file mode 100644 index 2a9b1db86f..0000000000 --- a/lib/unistring/m4/stdbool.m4 +++ /dev/null @@ -1,108 +0,0 @@ -# Check for stdbool.h that conforms to C99. - -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -#serial 7 - -# Prepare for substituting if it is not supported. - -AC_DEFUN([AM_STDBOOL_H], -[ - AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) - - # Define two additional variables used in the Makefile substitution. - - if test "$ac_cv_header_stdbool_h" = yes; then - STDBOOL_H='' - else - STDBOOL_H='stdbool.h' - fi - AC_SUBST([STDBOOL_H]) - AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) - - if test "$ac_cv_type__Bool" = yes; then - HAVE__BOOL=1 - else - HAVE__BOOL=0 - fi - AC_SUBST([HAVE__BOOL]) -]) - -# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. -AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) - -# This version of the macro is needed in autoconf <= 2.68. - -AC_DEFUN([AC_CHECK_HEADER_STDBOOL], - [AC_CACHE_CHECK([for stdbool.h that conforms to C99], - [ac_cv_header_stdbool_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ - #include - - #ifdef __cplusplus - typedef bool Bool; - #else - typedef _Bool Bool; - #ifndef bool - "error: bool is not defined" - #endif - #ifndef false - "error: false is not defined" - #endif - #if false - "error: false is not 0" - #endif - #ifndef true - "error: true is not defined" - #endif - #if true != 1 - "error: true is not 1" - #endif - #endif - - #ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" - #endif - - struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; - - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; - /* The following fails for - HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; - /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - */ - Bool q = true; - Bool *pq = &q; - bool *qq = &q; - ]], - [[ - bool e = &s; - *pq |= q; *pq |= ! q; - *qq |= q; *qq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq + !qq); - ]])], - [ac_cv_header_stdbool_h=yes], - [ac_cv_header_stdbool_h=no])]) - AC_CHECK_TYPES([_Bool]) -]) diff --git a/lib/unistring/m4/stdint.m4 b/lib/unistring/m4/stdint.m4 deleted file mode 100644 index 05b6ab7846..0000000000 --- a/lib/unistring/m4/stdint.m4 +++ /dev/null @@ -1,540 +0,0 @@ -# stdint.m4 serial 48 -dnl Copyright (C) 2001-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert and Bruno Haible. -dnl Test whether is supported or must be substituted. - -AC_DEFUN_ONCE([gl_STDINT_H], -[ - AC_PREREQ([2.59])dnl - - AC_REQUIRE([gl_LIMITS_H]) - - dnl Check for long long int and unsigned long long int. - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - if test $ac_cv_type_long_long_int = yes; then - HAVE_LONG_LONG_INT=1 - else - HAVE_LONG_LONG_INT=0 - fi - AC_SUBST([HAVE_LONG_LONG_INT]) - AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) - if test $ac_cv_type_unsigned_long_long_int = yes; then - HAVE_UNSIGNED_LONG_LONG_INT=1 - else - HAVE_UNSIGNED_LONG_LONG_INT=0 - fi - AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) - - dnl Check for , in the same way as gl_WCHAR_H does. - AC_CHECK_HEADERS_ONCE([wchar.h]) - if test $ac_cv_header_wchar_h = yes; then - HAVE_WCHAR_H=1 - else - HAVE_WCHAR_H=0 - fi - AC_SUBST([HAVE_WCHAR_H]) - - dnl Check for . - dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. - if test $ac_cv_header_inttypes_h = yes; then - HAVE_INTTYPES_H=1 - else - HAVE_INTTYPES_H=0 - fi - AC_SUBST([HAVE_INTTYPES_H]) - - dnl Check for . - dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. - if test $ac_cv_header_sys_types_h = yes; then - HAVE_SYS_TYPES_H=1 - else - HAVE_SYS_TYPES_H=0 - fi - AC_SUBST([HAVE_SYS_TYPES_H]) - - gl_CHECK_NEXT_HEADERS([stdint.h]) - if test $ac_cv_header_stdint_h = yes; then - HAVE_STDINT_H=1 - else - HAVE_STDINT_H=0 - fi - AC_SUBST([HAVE_STDINT_H]) - - dnl Now see whether we need a substitute . - if test $ac_cv_header_stdint_h = yes; then - AC_CACHE_CHECK([whether stdint.h conforms to C99], - [gl_cv_header_working_stdint_h], - [gl_cv_header_working_stdint_h=no - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#define __STDC_CONSTANT_MACROS 1 -#define __STDC_LIMIT_MACROS 1 -#include -/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ -#if !(defined WCHAR_MIN && defined WCHAR_MAX) -#error "WCHAR_MIN, WCHAR_MAX not defined in " -#endif -] -gl_STDINT_INCLUDES -[ -#ifdef INT8_MAX -int8_t a1 = INT8_MAX; -int8_t a1min = INT8_MIN; -#endif -#ifdef INT16_MAX -int16_t a2 = INT16_MAX; -int16_t a2min = INT16_MIN; -#endif -#ifdef INT32_MAX -int32_t a3 = INT32_MAX; -int32_t a3min = INT32_MIN; -#endif -#ifdef INT64_MAX -int64_t a4 = INT64_MAX; -int64_t a4min = INT64_MIN; -#endif -#ifdef UINT8_MAX -uint8_t b1 = UINT8_MAX; -#else -typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; -#endif -#ifdef UINT16_MAX -uint16_t b2 = UINT16_MAX; -#endif -#ifdef UINT32_MAX -uint32_t b3 = UINT32_MAX; -#endif -#ifdef UINT64_MAX -uint64_t b4 = UINT64_MAX; -#endif -int_least8_t c1 = INT8_C (0x7f); -int_least8_t c1max = INT_LEAST8_MAX; -int_least8_t c1min = INT_LEAST8_MIN; -int_least16_t c2 = INT16_C (0x7fff); -int_least16_t c2max = INT_LEAST16_MAX; -int_least16_t c2min = INT_LEAST16_MIN; -int_least32_t c3 = INT32_C (0x7fffffff); -int_least32_t c3max = INT_LEAST32_MAX; -int_least32_t c3min = INT_LEAST32_MIN; -int_least64_t c4 = INT64_C (0x7fffffffffffffff); -int_least64_t c4max = INT_LEAST64_MAX; -int_least64_t c4min = INT_LEAST64_MIN; -uint_least8_t d1 = UINT8_C (0xff); -uint_least8_t d1max = UINT_LEAST8_MAX; -uint_least16_t d2 = UINT16_C (0xffff); -uint_least16_t d2max = UINT_LEAST16_MAX; -uint_least32_t d3 = UINT32_C (0xffffffff); -uint_least32_t d3max = UINT_LEAST32_MAX; -uint_least64_t d4 = UINT64_C (0xffffffffffffffff); -uint_least64_t d4max = UINT_LEAST64_MAX; -int_fast8_t e1 = INT_FAST8_MAX; -int_fast8_t e1min = INT_FAST8_MIN; -int_fast16_t e2 = INT_FAST16_MAX; -int_fast16_t e2min = INT_FAST16_MIN; -int_fast32_t e3 = INT_FAST32_MAX; -int_fast32_t e3min = INT_FAST32_MIN; -int_fast64_t e4 = INT_FAST64_MAX; -int_fast64_t e4min = INT_FAST64_MIN; -uint_fast8_t f1 = UINT_FAST8_MAX; -uint_fast16_t f2 = UINT_FAST16_MAX; -uint_fast32_t f3 = UINT_FAST32_MAX; -uint_fast64_t f4 = UINT_FAST64_MAX; -#ifdef INTPTR_MAX -intptr_t g = INTPTR_MAX; -intptr_t gmin = INTPTR_MIN; -#endif -#ifdef UINTPTR_MAX -uintptr_t h = UINTPTR_MAX; -#endif -intmax_t i = INTMAX_MAX; -uintmax_t j = UINTMAX_MAX; - -/* Check that SIZE_MAX has the correct type, if possible. */ -#if 201112 <= __STDC_VERSION__ -int k = _Generic (SIZE_MAX, size_t: 0); -#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ - || (0x5110 <= __SUNPRO_C && !__STDC__)) -extern size_t k; -extern __typeof__ (SIZE_MAX) k; -#endif - -#include /* for CHAR_BIT */ -#define TYPE_MINIMUM(t) \ - ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) -#define TYPE_MAXIMUM(t) \ - ((t) ((t) 0 < (t) -1 \ - ? (t) -1 \ - : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) -struct s { - int check_PTRDIFF: - PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) - && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) - ? 1 : -1; - /* Detect bug in FreeBSD 6.0 / ia64. */ - int check_SIG_ATOMIC: - SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) - && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) - ? 1 : -1; - int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; - int check_WCHAR: - WCHAR_MIN == TYPE_MINIMUM (wchar_t) - && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) - ? 1 : -1; - /* Detect bug in mingw. */ - int check_WINT: - WINT_MIN == TYPE_MINIMUM (wint_t) - && WINT_MAX == TYPE_MAXIMUM (wint_t) - ? 1 : -1; - - /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ - int check_UINT8_C: - (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; - int check_UINT16_C: - (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; - - /* Detect bugs in OpenBSD 3.9 stdint.h. */ -#ifdef UINT8_MAX - int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; -#endif -#ifdef UINT16_MAX - int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; -#endif -#ifdef UINT32_MAX - int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; -#endif -#ifdef UINT64_MAX - int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; -#endif - int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; - int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; - int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; - int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; - int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; - int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; - int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; - int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; - int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; - int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; - int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; -}; - ]])], - [dnl Determine whether the various *_MIN, *_MAX macros are usable - dnl in preprocessor expression. We could do it by compiling a test - dnl program for each of these macros. It is faster to run a program - dnl that inspects the macro expansion. - dnl This detects a bug on HP-UX 11.23/ia64. - AC_RUN_IFELSE([ - AC_LANG_PROGRAM([[ -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#define __STDC_CONSTANT_MACROS 1 -#define __STDC_LIMIT_MACROS 1 -#include -] -gl_STDINT_INCLUDES -[ -#include -#include -#define MVAL(macro) MVAL1(macro) -#define MVAL1(expression) #expression -static const char *macro_values[] = - { -#ifdef INT8_MAX - MVAL (INT8_MAX), -#endif -#ifdef INT16_MAX - MVAL (INT16_MAX), -#endif -#ifdef INT32_MAX - MVAL (INT32_MAX), -#endif -#ifdef INT64_MAX - MVAL (INT64_MAX), -#endif -#ifdef UINT8_MAX - MVAL (UINT8_MAX), -#endif -#ifdef UINT16_MAX - MVAL (UINT16_MAX), -#endif -#ifdef UINT32_MAX - MVAL (UINT32_MAX), -#endif -#ifdef UINT64_MAX - MVAL (UINT64_MAX), -#endif - NULL - }; -]], [[ - const char **mv; - for (mv = macro_values; *mv != NULL; mv++) - { - const char *value = *mv; - /* Test whether it looks like a cast expression. */ - if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 - || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 - || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 - || strncmp (value, "((int)"/*)*/, 6) == 0 - || strncmp (value, "((signed short)"/*)*/, 15) == 0 - || strncmp (value, "((signed char)"/*)*/, 14) == 0) - return mv - macro_values + 1; - } - return 0; -]])], - [gl_cv_header_working_stdint_h=yes], - [], - [dnl When cross-compiling, assume it works. - gl_cv_header_working_stdint_h=yes - ]) - ]) - ]) - fi - - HAVE_C99_STDINT_H=0 - HAVE_SYS_BITYPES_H=0 - HAVE_SYS_INTTYPES_H=0 - STDINT_H=stdint.h - if test "$gl_cv_header_working_stdint_h" = yes; then - HAVE_C99_STDINT_H=1 - dnl Now see whether the system works without - dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. - AC_CACHE_CHECK([whether stdint.h predates C++11], - [gl_cv_header_stdint_predates_cxx11_h], - [gl_cv_header_stdint_predates_cxx11_h=yes - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#include -] -gl_STDINT_INCLUDES -[ -intmax_t im = INTMAX_MAX; -int32_t i32 = INT32_C (0x7fffffff); - ]])], - [gl_cv_header_stdint_predates_cxx11_h=no])]) - - if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then - AC_DEFINE([__STDC_CONSTANT_MACROS], [1], - [Define to 1 if the system predates C++11.]) - AC_DEFINE([__STDC_LIMIT_MACROS], [1], - [Define to 1 if the system predates C++11.]) - fi - AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], - [gl_cv_header_stdint_width], - [gl_cv_header_stdint_width=no - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ - /* Work if build is not clean. */ - #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 - #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ - #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 - #endif - #include - ]gl_STDINT_INCLUDES[ - int iw = UINTMAX_WIDTH; - ]])], - [gl_cv_header_stdint_width=yes])]) - if test "$gl_cv_header_stdint_width" = yes; then - STDINT_H= - fi - else - dnl Check for , and for - dnl (used in Linux libc4 >= 4.6.7 and libc5). - AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) - if test $ac_cv_header_sys_inttypes_h = yes; then - HAVE_SYS_INTTYPES_H=1 - fi - if test $ac_cv_header_sys_bitypes_h = yes; then - HAVE_SYS_BITYPES_H=1 - fi - gl_STDINT_TYPE_PROPERTIES - fi - - # The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. - LIMITS_H=limits.h - AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) - - AC_SUBST([HAVE_C99_STDINT_H]) - AC_SUBST([HAVE_SYS_BITYPES_H]) - AC_SUBST([HAVE_SYS_INTTYPES_H]) - AC_SUBST([STDINT_H]) - AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"]) -]) - -dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) -dnl Determine the size of each of the given types in bits. -AC_DEFUN([gl_STDINT_BITSIZEOF], -[ - dnl Use a shell loop, to avoid bloating configure, and - dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into - dnl config.h.in, - dnl - extra AC_SUBST calls, so that the right substitutions are made. - m4_foreach_w([gltype], [$1], - [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), - [Define to the number of bits in type ']gltype['.])]) - for gltype in $1 ; do - AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], - [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], - [$2 -#include ], [result=unknown]) - eval gl_cv_bitsizeof_${gltype}=\$result - ]) - eval result=\$gl_cv_bitsizeof_${gltype} - if test $result = unknown; then - dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, - dnl do a syntax check even on unused #if conditions and give an error - dnl on valid C code like this: - dnl #if 0 - dnl # if > 32 - dnl # endif - dnl #endif - result=0 - fi - GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) - eval BITSIZEOF_${GLTYPE}=\$result - done - m4_foreach_w([gltype], [$1], - [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) -]) - -dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) -dnl Determine the signedness of each of the given types. -dnl Define HAVE_SIGNED_TYPE if type is signed. -AC_DEFUN([gl_CHECK_TYPES_SIGNED], -[ - dnl Use a shell loop, to avoid bloating configure, and - dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into - dnl config.h.in, - dnl - extra AC_SUBST calls, so that the right substitutions are made. - m4_foreach_w([gltype], [$1], - [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), - [Define to 1 if ']gltype[' is a signed integer type.])]) - for gltype in $1 ; do - AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([$2[ - int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], - result=yes, result=no) - eval gl_cv_type_${gltype}_signed=\$result - ]) - eval result=\$gl_cv_type_${gltype}_signed - GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - if test "$result" = yes; then - AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) - eval HAVE_SIGNED_${GLTYPE}=1 - else - eval HAVE_SIGNED_${GLTYPE}=0 - fi - done - m4_foreach_w([gltype], [$1], - [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) -]) - -dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) -dnl Determine the suffix to use for integer constants of the given types. -dnl Define t_SUFFIX for each such type. -AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], -[ - dnl Use a shell loop, to avoid bloating configure, and - dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into - dnl config.h.in, - dnl - extra AC_SUBST calls, so that the right substitutions are made. - m4_foreach_w([gltype], [$1], - [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], - [Define to l, ll, u, ul, ull, etc., as suitable for - constants of type ']gltype['.])]) - for gltype in $1 ; do - AC_CACHE_CHECK([for $gltype integer literal suffix], - [gl_cv_type_${gltype}_suffix], - [eval gl_cv_type_${gltype}_suffix=no - eval result=\$gl_cv_type_${gltype}_signed - if test "$result" = yes; then - glsufu= - else - glsufu=u - fi - for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do - case $glsuf in - '') gltype1='int';; - l) gltype1='long int';; - ll) gltype1='long long int';; - i64) gltype1='__int64';; - u) gltype1='unsigned int';; - ul) gltype1='unsigned long int';; - ull) gltype1='unsigned long long int';; - ui64)gltype1='unsigned __int64';; - esac - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([$2[ - extern $gltype foo; - extern $gltype1 foo;]])], - [eval gl_cv_type_${gltype}_suffix=\$glsuf]) - eval result=\$gl_cv_type_${gltype}_suffix - test "$result" != no && break - done]) - GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - eval result=\$gl_cv_type_${gltype}_suffix - test "$result" = no && result= - eval ${GLTYPE}_SUFFIX=\$result - AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) - done - m4_foreach_w([gltype], [$1], - [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) -]) - -dnl gl_STDINT_INCLUDES -AC_DEFUN([gl_STDINT_INCLUDES], -[[ - /* BSD/OS 4.0.1 has a bug: , and must be - included before . */ - #include - #include - #if HAVE_WCHAR_H - # include - # include - # include - #endif -]]) - -dnl gl_STDINT_TYPE_PROPERTIES -dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t -dnl of interest to stdint.in.h. -AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], -[ - AC_REQUIRE([gl_MULTIARCH]) - if test $APPLE_UNIVERSAL_BUILD = 0; then - gl_STDINT_BITSIZEOF([ptrdiff_t size_t], - [gl_STDINT_INCLUDES]) - fi - gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], - [gl_STDINT_INCLUDES]) - gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], - [gl_STDINT_INCLUDES]) - gl_cv_type_ptrdiff_t_signed=yes - gl_cv_type_size_t_signed=no - if test $APPLE_UNIVERSAL_BUILD = 0; then - gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], - [gl_STDINT_INCLUDES]) - fi - gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], - [gl_STDINT_INCLUDES]) - - dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 - dnl requirement that wint_t is "unchanged by default argument promotions". - dnl In this case gnulib's and override wint_t. - dnl Set the variable BITSIZEOF_WINT_T accordingly. - if test $BITSIZEOF_WINT_T -lt 32; then - BITSIZEOF_WINT_T=32 - fi -]) - -dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. -dnl Remove this when we can assume autoconf >= 2.61. -m4_ifdef([AC_COMPUTE_INT], [], [ - AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) -]) diff --git a/lib/unistring/m4/sys_types_h.m4 b/lib/unistring/m4/sys_types_h.m4 deleted file mode 100644 index 159b005b3d..0000000000 --- a/lib/unistring/m4/sys_types_h.m4 +++ /dev/null @@ -1,49 +0,0 @@ -# sys_types_h.m4 serial 6 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN_ONCE([gl_SYS_TYPES_H], -[ - AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) - gl_NEXT_HEADERS([sys/types.h]) - - dnl Ensure the type pid_t gets defined. - AC_REQUIRE([AC_TYPE_PID_T]) - - dnl Ensure the type mode_t gets defined. - AC_REQUIRE([AC_TYPE_MODE_T]) - - dnl Whether to override the 'off_t' type. - AC_REQUIRE([gl_TYPE_OFF_T]) -]) - -AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], -[ -]) - -# This works around a buggy version in autoconf <= 2.69. -# See - -m4_version_prereq([2.70], [], [ - -# This is taken from the following Autoconf patch: -# http://git.sv.gnu.org/cgit/autoconf.git/commit/?id=e17a30e98 - -m4_undefine([AC_HEADER_MAJOR]) -AC_DEFUN([AC_HEADER_MAJOR], -[AC_CHECK_HEADERS_ONCE([sys/types.h]) -AC_CHECK_HEADER([sys/mkdev.h], - [AC_DEFINE([MAJOR_IN_MKDEV], [1], - [Define to 1 if `major', `minor', and `makedev' are declared in - .])]) -if test $ac_cv_header_sys_mkdev_h = no; then - AC_CHECK_HEADER([sys/sysmacros.h], - [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], - [Define to 1 if `major', `minor', and `makedev' are declared in - .])]) -fi -]) - -]) diff --git a/lib/unistring/stdbool.in.h b/lib/unistring/stdbool.in.h deleted file mode 100644 index c099d3b953..0000000000 --- a/lib/unistring/stdbool.in.h +++ /dev/null @@ -1,142 +0,0 @@ -/* Copyright (C) 2001-2003, 2006-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software; you can redistribute it and/or modify - it under the terms of either: - - * the GNU Lesser General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#ifndef _GL_STDBOOL_H -#define _GL_STDBOOL_H - -/* ISO C 99 for platforms that lack it. */ - -/* Usage suggestions: - - Programs that use should be aware of some limitations - and standards compliance issues. - - Standards compliance: - - - must be #included before 'bool', 'false', 'true' - can be used. - - - You cannot assume that sizeof (bool) == 1. - - - Programs should not undefine the macros bool, true, and false, - as C99 lists that as an "obsolescent feature". - - Limitations of this substitute, when used in a C89 environment: - - - must be #included before the '_Bool' type can be used. - - - You cannot assume that _Bool is a typedef; it might be a macro. - - - Bit-fields of type 'bool' are not supported. Portable code - should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. - - - In C99, casts and automatic conversions to '_Bool' or 'bool' are - performed in such a way that every nonzero value gets converted - to 'true', and zero gets converted to 'false'. This doesn't work - with this substitute. With this substitute, only the values 0 and 1 - give the expected result when converted to _Bool' or 'bool'. - - - C99 allows the use of (_Bool)0.0 in constant expressions, but - this substitute cannot always provide this property. - - Also, it is suggested that programs use 'bool' rather than '_Bool'; - this isn't required, but 'bool' is more common. */ - - -/* 7.16. Boolean type and values */ - -/* BeOS already #defines false 0, true 1. We use the same - definitions below, but temporarily we have to #undef them. */ -#if defined __BEOS__ && !defined __HAIKU__ -# include /* defines bool but not _Bool */ -# undef false -# undef true -#endif - -#ifdef __cplusplus -# define _Bool bool -# define bool bool -#else -# if defined __BEOS__ && !defined __HAIKU__ - /* A compiler known to have 'bool'. */ - /* If the compiler already has both 'bool' and '_Bool', we can assume they - are the same types. */ -# if !@HAVE__BOOL@ -typedef bool _Bool; -# endif -# else -# if !defined __GNUC__ - /* If @HAVE__BOOL@: - Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when - the built-in _Bool type is used. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html - Similar bugs are likely with other compilers as well; this file - wouldn't be used if was working. - So we override the _Bool type. - If !@HAVE__BOOL@: - Need to define _Bool ourselves. As 'signed char' or as an enum type? - Use of a typedef, with SunPRO C, leads to a stupid - "warning: _Bool is a keyword in ISO C99". - Use of an enum type, with IRIX cc, leads to a stupid - "warning(1185): enumerated type mixed with another type". - Even the existence of an enum type, without a typedef, - "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. - The only benefit of the enum, debuggability, is not important - with these compilers. So use 'signed char' and no enum. */ -# define _Bool signed char -# else - /* With this compiler, trust the _Bool type if the compiler has it. */ -# if !@HAVE__BOOL@ - /* For the sake of symbolic names in gdb, define true and false as - enum constants, not only as macros. - It is tempting to write - typedef enum { false = 0, true = 1 } _Bool; - so that gdb prints values of type 'bool' symbolically. But then - values of type '_Bool' might promote to 'int' or 'unsigned int' - (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' - (see ISO C 99 6.3.1.1.(2)). So add a negative value to the - enum; this ensures that '_Bool' promotes to 'int'. */ -typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; -# endif -# endif -# endif -# define bool _Bool -#endif - -/* The other macros must be usable in preprocessor directives. */ -#ifdef __cplusplus -# define false false -# define true true -#else -# define false 0 -# define true 1 -#endif - -#define __bool_true_false_are_defined 1 - -#endif /* _GL_STDBOOL_H */ diff --git a/lib/unistring/stdint.in.h b/lib/unistring/stdint.in.h deleted file mode 100644 index 1afed0bd41..0000000000 --- a/lib/unistring/stdint.in.h +++ /dev/null @@ -1,708 +0,0 @@ -/* Copyright (C) 2001-2002, 2004-2016 Free Software Foundation, Inc. - Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. - This file is part of gnulib. - - This program is free software; you can redistribute it and/or modify - it under the terms of either: - - * the GNU Lesser General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -/* - * ISO C 99 for platforms that lack it. - * - */ - -#ifndef _@GUARD_PREFIX@_STDINT_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* When including a system file that in turn includes , - use the system , not our substitute. This avoids - problems with (for example) VMS, whose includes - . */ -#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H - -/* On Android (Bionic libc), includes this file before - having defined 'time_t'. Therefore in this case avoid including - other system header files; just include the system's . - Ideally we should test __BIONIC__ here, but it is only defined after - has been included; hence test __ANDROID__ instead. */ -#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H -# @INCLUDE_NEXT@ @NEXT_STDINT_H@ -#else - -/* Get those types that are already defined in other system include - files, so that we can "#define int8_t signed char" below without - worrying about a later system include file containing a "typedef - signed char int8_t;" that will get messed up by our macro. Our - macros should all be consistent with the system versions, except - for the "fast" types and macros, which we recommend against using - in public interfaces due to compiler differences. */ - -#if @HAVE_STDINT_H@ -# if defined __sgi && ! defined __c99 - /* Bypass IRIX's if in C89 mode, since it merely annoys users - with "This header file is to be used only for c99 mode compilations" - diagnostics. */ -# define __STDINT_H__ -# endif - - /* Some pre-C++11 implementations need this. */ -# ifdef __cplusplus -# ifndef __STDC_CONSTANT_MACROS -# define __STDC_CONSTANT_MACROS 1 -# endif -# ifndef __STDC_LIMIT_MACROS -# define __STDC_LIMIT_MACROS 1 -# endif -# endif - - /* Other systems may have an incomplete or buggy . - Include it before , since any "#include " - in would reinclude us, skipping our contents because - _@GUARD_PREFIX@_STDINT_H is defined. - The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_STDINT_H@ -#endif - -#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H -#define _@GUARD_PREFIX@_STDINT_H - -/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, - LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ -#include - -#if ! @HAVE_C99_STDINT_H@ - -/* defines some of the stdint.h types as well, on glibc, - IRIX 6.5, and OpenBSD 3.8 (via ). - AIX 5.2 isn't needed and causes troubles. - Mac OS X 10.4.6 includes (which is us), but - relies on the system definitions, so include - after @NEXT_STDINT_H@. */ -# if @HAVE_SYS_TYPES_H@ && ! defined _AIX -# include -# endif - -# if @HAVE_INTTYPES_H@ - /* In OpenBSD 3.8, includes , which defines - int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. - also defines intptr_t and uintptr_t. */ -# include -# elif @HAVE_SYS_INTTYPES_H@ - /* Solaris 7 has the types except the *_fast*_t types, and - the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ -# include -# endif - -# if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ - /* Linux libc4 >= 4.6.7 and libc5 have a that defines - int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is - included by . */ -# include -# endif - -# undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H - -/* Minimum and maximum values for an integer type under the usual assumption. - Return an unspecified value if BITS == 0, adding a check to pacify - picky compilers. */ - -# define _STDINT_MIN(signed, bits, zero) \ - ((signed) ? ~ _STDINT_MAX (signed, bits, zero) : (zero)) - -# define _STDINT_MAX(signed, bits, zero) \ - (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) - -#if !GNULIB_defined_stdint_types - -/* 7.18.1.1. Exact-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. */ - -# undef int8_t -# undef uint8_t -typedef signed char gl_int8_t; -typedef unsigned char gl_uint8_t; -# define int8_t gl_int8_t -# define uint8_t gl_uint8_t - -# undef int16_t -# undef uint16_t -typedef short int gl_int16_t; -typedef unsigned short int gl_uint16_t; -# define int16_t gl_int16_t -# define uint16_t gl_uint16_t - -# undef int32_t -# undef uint32_t -typedef int gl_int32_t; -typedef unsigned int gl_uint32_t; -# define int32_t gl_int32_t -# define uint32_t gl_uint32_t - -/* If the system defines INT64_MAX, assume int64_t works. That way, - if the underlying platform defines int64_t to be a 64-bit long long - int, the code below won't mistakenly define it to be a 64-bit long - int, which would mess up C++ name mangling. We must use #ifdef - rather than #if, to avoid an error with HP-UX 10.20 cc. */ - -# ifdef INT64_MAX -# define GL_INT64_T -# else -/* Do not undefine int64_t if gnulib is not being used with 64-bit - types, since otherwise it breaks platforms like Tandem/NSK. */ -# if LONG_MAX >> 31 >> 31 == 1 -# undef int64_t -typedef long int gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T -# elif defined _MSC_VER -# undef int64_t -typedef __int64 gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T -# elif @HAVE_LONG_LONG_INT@ -# undef int64_t -typedef long long int gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T -# endif -# endif - -# ifdef UINT64_MAX -# define GL_UINT64_T -# else -# if ULONG_MAX >> 31 >> 31 >> 1 == 1 -# undef uint64_t -typedef unsigned long int gl_uint64_t; -# define uint64_t gl_uint64_t -# define GL_UINT64_T -# elif defined _MSC_VER -# undef uint64_t -typedef unsigned __int64 gl_uint64_t; -# define uint64_t gl_uint64_t -# define GL_UINT64_T -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ -# undef uint64_t -typedef unsigned long long int gl_uint64_t; -# define uint64_t gl_uint64_t -# define GL_UINT64_T -# endif -# endif - -/* Avoid collision with Solaris 2.5.1 etc. */ -# define _UINT8_T -# define _UINT32_T -# define _UINT64_T - - -/* 7.18.1.2. Minimum-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types - are the same as the corresponding N_t types. */ - -# undef int_least8_t -# undef uint_least8_t -# undef int_least16_t -# undef uint_least16_t -# undef int_least32_t -# undef uint_least32_t -# undef int_least64_t -# undef uint_least64_t -# define int_least8_t int8_t -# define uint_least8_t uint8_t -# define int_least16_t int16_t -# define uint_least16_t uint16_t -# define int_least32_t int32_t -# define uint_least32_t uint32_t -# ifdef GL_INT64_T -# define int_least64_t int64_t -# endif -# ifdef GL_UINT64_T -# define uint_least64_t uint64_t -# endif - -/* 7.18.1.3. Fastest minimum-width integer types */ - -/* Note: Other substitutes may define these types differently. - It is not recommended to use these types in public header files. */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types - are taken from the same list of types. The following code normally - uses types consistent with glibc, as that lessens the chance of - incompatibility with older GNU hosts. */ - -# undef int_fast8_t -# undef uint_fast8_t -# undef int_fast16_t -# undef uint_fast16_t -# undef int_fast32_t -# undef uint_fast32_t -# undef int_fast64_t -# undef uint_fast64_t -typedef signed char gl_int_fast8_t; -typedef unsigned char gl_uint_fast8_t; - -# ifdef __sun -/* Define types compatible with SunOS 5.10, so that code compiled under - earlier SunOS versions works with code compiled under SunOS 5.10. */ -typedef int gl_int_fast32_t; -typedef unsigned int gl_uint_fast32_t; -# else -typedef long int gl_int_fast32_t; -typedef unsigned long int gl_uint_fast32_t; -# endif -typedef gl_int_fast32_t gl_int_fast16_t; -typedef gl_uint_fast32_t gl_uint_fast16_t; - -# define int_fast8_t gl_int_fast8_t -# define uint_fast8_t gl_uint_fast8_t -# define int_fast16_t gl_int_fast16_t -# define uint_fast16_t gl_uint_fast16_t -# define int_fast32_t gl_int_fast32_t -# define uint_fast32_t gl_uint_fast32_t -# ifdef GL_INT64_T -# define int_fast64_t int64_t -# endif -# ifdef GL_UINT64_T -# define uint_fast64_t uint64_t -# endif - -/* 7.18.1.4. Integer types capable of holding object pointers */ - -/* kLIBC's stdint.h defines _INTPTR_T_DECLARED and needs its own - definitions of intptr_t and uintptr_t (which use int and unsigned) - to avoid clashes with declarations of system functions like sbrk. */ -# ifndef _INTPTR_T_DECLARED -# undef intptr_t -# undef uintptr_t -typedef long int gl_intptr_t; -typedef unsigned long int gl_uintptr_t; -# define intptr_t gl_intptr_t -# define uintptr_t gl_uintptr_t -# endif - -/* 7.18.1.5. Greatest-width integer types */ - -/* Note: These types are compiler dependent. It may be unwise to use them in - public header files. */ - -/* If the system defines INTMAX_MAX, assume that intmax_t works, and - similarly for UINTMAX_MAX and uintmax_t. This avoids problems with - assuming one type where another is used by the system. */ - -# ifndef INTMAX_MAX -# undef INTMAX_C -# undef intmax_t -# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 -typedef long long int gl_intmax_t; -# define intmax_t gl_intmax_t -# elif defined GL_INT64_T -# define intmax_t int64_t -# else -typedef long int gl_intmax_t; -# define intmax_t gl_intmax_t -# endif -# endif - -# ifndef UINTMAX_MAX -# undef UINTMAX_C -# undef uintmax_t -# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 -typedef unsigned long long int gl_uintmax_t; -# define uintmax_t gl_uintmax_t -# elif defined GL_UINT64_T -# define uintmax_t uint64_t -# else -typedef unsigned long int gl_uintmax_t; -# define uintmax_t gl_uintmax_t -# endif -# endif - -/* Verify that intmax_t and uintmax_t have the same size. Too much code - breaks if this is not the case. If this check fails, the reason is likely - to be found in the autoconf macros. */ -typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) - ? 1 : -1]; - -# define GNULIB_defined_stdint_types 1 -# endif /* !GNULIB_defined_stdint_types */ - -/* 7.18.2. Limits of specified-width integer types */ - -/* 7.18.2.1. Limits of exact-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. */ - -# undef INT8_MIN -# undef INT8_MAX -# undef UINT8_MAX -# define INT8_MIN (~ INT8_MAX) -# define INT8_MAX 127 -# define UINT8_MAX 255 - -# undef INT16_MIN -# undef INT16_MAX -# undef UINT16_MAX -# define INT16_MIN (~ INT16_MAX) -# define INT16_MAX 32767 -# define UINT16_MAX 65535 - -# undef INT32_MIN -# undef INT32_MAX -# undef UINT32_MAX -# define INT32_MIN (~ INT32_MAX) -# define INT32_MAX 2147483647 -# define UINT32_MAX 4294967295U - -# if defined GL_INT64_T && ! defined INT64_MAX -/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 - evaluates the latter incorrectly in preprocessor expressions. */ -# define INT64_MIN (- INTMAX_C (1) << 63) -# define INT64_MAX INTMAX_C (9223372036854775807) -# endif - -# if defined GL_UINT64_T && ! defined UINT64_MAX -# define UINT64_MAX UINTMAX_C (18446744073709551615) -# endif - -/* 7.18.2.2. Limits of minimum-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types - are the same as the corresponding N_t types. */ - -# undef INT_LEAST8_MIN -# undef INT_LEAST8_MAX -# undef UINT_LEAST8_MAX -# define INT_LEAST8_MIN INT8_MIN -# define INT_LEAST8_MAX INT8_MAX -# define UINT_LEAST8_MAX UINT8_MAX - -# undef INT_LEAST16_MIN -# undef INT_LEAST16_MAX -# undef UINT_LEAST16_MAX -# define INT_LEAST16_MIN INT16_MIN -# define INT_LEAST16_MAX INT16_MAX -# define UINT_LEAST16_MAX UINT16_MAX - -# undef INT_LEAST32_MIN -# undef INT_LEAST32_MAX -# undef UINT_LEAST32_MAX -# define INT_LEAST32_MIN INT32_MIN -# define INT_LEAST32_MAX INT32_MAX -# define UINT_LEAST32_MAX UINT32_MAX - -# undef INT_LEAST64_MIN -# undef INT_LEAST64_MAX -# ifdef GL_INT64_T -# define INT_LEAST64_MIN INT64_MIN -# define INT_LEAST64_MAX INT64_MAX -# endif - -# undef UINT_LEAST64_MAX -# ifdef GL_UINT64_T -# define UINT_LEAST64_MAX UINT64_MAX -# endif - -/* 7.18.2.3. Limits of fastest minimum-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types - are taken from the same list of types. */ - -# undef INT_FAST8_MIN -# undef INT_FAST8_MAX -# undef UINT_FAST8_MAX -# define INT_FAST8_MIN SCHAR_MIN -# define INT_FAST8_MAX SCHAR_MAX -# define UINT_FAST8_MAX UCHAR_MAX - -# undef INT_FAST16_MIN -# undef INT_FAST16_MAX -# undef UINT_FAST16_MAX -# define INT_FAST16_MIN INT_FAST32_MIN -# define INT_FAST16_MAX INT_FAST32_MAX -# define UINT_FAST16_MAX UINT_FAST32_MAX - -# undef INT_FAST32_MIN -# undef INT_FAST32_MAX -# undef UINT_FAST32_MAX -# ifdef __sun -# define INT_FAST32_MIN INT_MIN -# define INT_FAST32_MAX INT_MAX -# define UINT_FAST32_MAX UINT_MAX -# else -# define INT_FAST32_MIN LONG_MIN -# define INT_FAST32_MAX LONG_MAX -# define UINT_FAST32_MAX ULONG_MAX -# endif - -# undef INT_FAST64_MIN -# undef INT_FAST64_MAX -# ifdef GL_INT64_T -# define INT_FAST64_MIN INT64_MIN -# define INT_FAST64_MAX INT64_MAX -# endif - -# undef UINT_FAST64_MAX -# ifdef GL_UINT64_T -# define UINT_FAST64_MAX UINT64_MAX -# endif - -/* 7.18.2.4. Limits of integer types capable of holding object pointers */ - -# undef INTPTR_MIN -# undef INTPTR_MAX -# undef UINTPTR_MAX -# define INTPTR_MIN LONG_MIN -# define INTPTR_MAX LONG_MAX -# define UINTPTR_MAX ULONG_MAX - -/* 7.18.2.5. Limits of greatest-width integer types */ - -# ifndef INTMAX_MAX -# undef INTMAX_MIN -# ifdef INT64_MAX -# define INTMAX_MIN INT64_MIN -# define INTMAX_MAX INT64_MAX -# else -# define INTMAX_MIN INT32_MIN -# define INTMAX_MAX INT32_MAX -# endif -# endif - -# ifndef UINTMAX_MAX -# ifdef UINT64_MAX -# define UINTMAX_MAX UINT64_MAX -# else -# define UINTMAX_MAX UINT32_MAX -# endif -# endif - -/* 7.18.3. Limits of other integer types */ - -/* ptrdiff_t limits */ -# undef PTRDIFF_MIN -# undef PTRDIFF_MAX -# if @APPLE_UNIVERSAL_BUILD@ -# ifdef _LP64 -# define PTRDIFF_MIN _STDINT_MIN (1, 64, 0l) -# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) -# else -# define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) -# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) -# endif -# else -# define PTRDIFF_MIN \ - _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) -# define PTRDIFF_MAX \ - _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) -# endif - -/* sig_atomic_t limits */ -# undef SIG_ATOMIC_MIN -# undef SIG_ATOMIC_MAX -# define SIG_ATOMIC_MIN \ - _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ - 0@SIG_ATOMIC_T_SUFFIX@) -# define SIG_ATOMIC_MAX \ - _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ - 0@SIG_ATOMIC_T_SUFFIX@) - - -/* size_t limit */ -# undef SIZE_MAX -# if @APPLE_UNIVERSAL_BUILD@ -# ifdef _LP64 -# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) -# else -# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) -# endif -# else -# define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) -# endif - -/* wchar_t limits */ -/* Get WCHAR_MIN, WCHAR_MAX. - This include is not on the top, above, because on OSF/1 4.0 we have a - sequence of nested includes - -> -> -> , and the latter includes - and assumes its types are already defined. */ -# if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) - /* BSD/OS 4.0.1 has a bug: , and must be - included before . */ -# include -# include -# include -# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H -# include -# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H -# endif -# undef WCHAR_MIN -# undef WCHAR_MAX -# define WCHAR_MIN \ - _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) -# define WCHAR_MAX \ - _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) - -/* wint_t limits */ -# undef WINT_MIN -# undef WINT_MAX -# define WINT_MIN \ - _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) -# define WINT_MAX \ - _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) - -/* 7.18.4. Macros for integer constants */ - -/* 7.18.4.1. Macros for minimum-width integer constants */ -/* According to ISO C 99 Technical Corrigendum 1 */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ - -# undef INT8_C -# undef UINT8_C -# define INT8_C(x) x -# define UINT8_C(x) x - -# undef INT16_C -# undef UINT16_C -# define INT16_C(x) x -# define UINT16_C(x) x - -# undef INT32_C -# undef UINT32_C -# define INT32_C(x) x -# define UINT32_C(x) x ## U - -# undef INT64_C -# undef UINT64_C -# if LONG_MAX >> 31 >> 31 == 1 -# define INT64_C(x) x##L -# elif defined _MSC_VER -# define INT64_C(x) x##i64 -# elif @HAVE_LONG_LONG_INT@ -# define INT64_C(x) x##LL -# endif -# if ULONG_MAX >> 31 >> 31 >> 1 == 1 -# define UINT64_C(x) x##UL -# elif defined _MSC_VER -# define UINT64_C(x) x##ui64 -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ -# define UINT64_C(x) x##ULL -# endif - -/* 7.18.4.2. Macros for greatest-width integer constants */ - -# ifndef INTMAX_C -# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 -# define INTMAX_C(x) x##LL -# elif defined GL_INT64_T -# define INTMAX_C(x) INT64_C(x) -# else -# define INTMAX_C(x) x##L -# endif -# endif - -# ifndef UINTMAX_C -# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 -# define UINTMAX_C(x) x##ULL -# elif defined GL_UINT64_T -# define UINTMAX_C(x) UINT64_C(x) -# else -# define UINTMAX_C(x) x##UL -# endif -# endif - -#endif /* !@HAVE_C99_STDINT_H@ */ - -/* Macros specified by ISO/IEC TS 18661-1:2014. */ - -#if (!defined UINTMAX_WIDTH \ - && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) -# ifdef INT8_MAX -# define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) -# endif -# ifdef UINT8_MAX -# define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) -# endif -# ifdef INT16_MAX -# define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) -# endif -# ifdef UINT16_MAX -# define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) -# endif -# ifdef INT32_MAX -# define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) -# endif -# ifdef UINT32_MAX -# define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) -# endif -# ifdef INT64_MAX -# define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) -# endif -# ifdef UINT64_MAX -# define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) -# endif -# define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) -# define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) -# define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) -# define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) -# define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) -# define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) -# define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) -# define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) -# define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) -# define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) -# define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) -# define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) -# define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) -# define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) -# define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) -# define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) -# define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) -# define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) -# define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) -# define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) -# define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) -# define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) -# define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) -# ifdef WINT_MAX -# define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) -# endif -# ifdef SIG_ATOMIC_MAX -# define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) -# endif -#endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ - -#endif /* _@GUARD_PREFIX@_STDINT_H */ -#endif /* !(defined __ANDROID__ && ...) */ -#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/lib/unistring/sys_types.in.h b/lib/unistring/sys_types.in.h deleted file mode 100644 index 538539a8a0..0000000000 --- a/lib/unistring/sys_types.in.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Provide a more complete sys/types.h. - - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of either: - - * the GNU Lesser General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#ifndef _@GUARD_PREFIX@_SYS_TYPES_H - -/* The include_next requires a split double-inclusion guard. */ -# define _GL_INCLUDING_SYS_TYPES_H -#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ -# undef _GL_INCLUDING_SYS_TYPES_H - -#ifndef _@GUARD_PREFIX@_SYS_TYPES_H -#define _@GUARD_PREFIX@_SYS_TYPES_H - -/* Override off_t if Large File Support is requested on native Windows. */ -#if @WINDOWS_64_BIT_OFF_T@ -/* Same as int64_t in . */ -# if defined _MSC_VER -# define off_t __int64 -# else -# define off_t long long int -# endif -/* Indicator, for gnulib internal purposes. */ -# define _GL_WINDOWS_64_BIT_OFF_T 1 -#endif - -/* MSVC 9 defines size_t in , not in . */ -/* But avoid namespace pollution on glibc systems. */ -#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ - && ! defined __GLIBC__ -# include -#endif - -#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ -#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ diff --git a/lib/unistring/unicase/special-casing-table.h b/lib/unistring/unicase/special-casing-table.h deleted file mode 100644 index c25bb94ffc..0000000000 --- a/lib/unistring/unicase/special-casing-table.h +++ /dev/null @@ -1,339 +0,0 @@ -/* ANSI-C code produced by gperf version 3.0.4 */ -/* Command-line: gperf -m 10 ./unicase/special-casing-table.gperf */ -/* Computed positions: -k'1-3' */ - - -#define TOTAL_KEYWORDS 122 -#define MIN_WORD_LENGTH 3 -#define MAX_WORD_LENGTH 3 -#define MIN_HASH_VALUE 0 -#define MAX_HASH_VALUE 121 -/* maximum key range = 122, duplicates = 0 */ - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -/*ARGSUSED*/ -static unsigned int -gl_unicase_special_hash (register const char *str, register unsigned int len) -{ - static const unsigned char asso_values[] = - { - 2, 0, 4, 5, 37, 12, 121, 4, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 120, - 119, 118, 117, 116, 122, 122, 122, 122, 122, 122, - 5, 3, 122, 122, 122, 122, 122, 122, 122, 122, - 115, 122, 122, 122, 122, 122, 114, 122, 6, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 1, 111, 122, 122, 122, 122, 122, - 109, 122, 108, 122, 107, 122, 106, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 33, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 105, 104, - 103, 102, 101, 100, 99, 31, 98, 97, 96, 95, - 94, 93, 92, 91, 28, 90, 89, 88, 87, 86, - 27, 24, 23, 20, 19, 85, 84, 83, 16, 82, - 81, 80, 79, 15, 78, 77, 76, 75, 74, 73, - 72, 71, 70, 69, 68, 67, 64, 122, 65, 64, - 63, 122, 62, 61, 122, 122, 122, 122, 60, 122, - 122, 122, 122, 122, 59, 58, 57, 122, 56, 55, - 122, 122, 122, 122, 14, 55, 122, 122, 122, 122, - 53, 52, 122, 122, 51, 50, 122, 122, 122, 122, - 122, 122, 122, 50, 122, 122, 48, 47, 46, 122, - 45, 44, 122, 122, 122, 122, 122, 122, 122, 122, - 46, 122, 42, 41, 39, 122, 38, 35, 122, 122, - 122, 0, 33, 122, 122, 122, 122 - }; - return asso_values[(unsigned char)str[2]+1] + asso_values[(unsigned char)str[1]] + asso_values[(unsigned char)str[0]]; -} - -#ifdef __GNUC__ -__inline -#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ -__attribute__ ((__gnu_inline__)) -#endif -#endif -const struct special_casing_rule * -gl_unicase_special_lookup (register const char *str, register unsigned int len) -{ - static const unsigned char lengthtable[] = - { - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 - }; - static const struct special_casing_rule wordlist[] = - { -#line 126 "./unicase/special-casing-table.gperf" - {"\373\001\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0049, 0 }, { 0xFB01, 0, 0 }, { 0x0046, 0x0069, 0 }, { 0x0066, 0x0069, 0 }}, -#line 31 "./unicase/special-casing-table.gperf" - {"\001I\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x02BC, 0x004E, 0 }, { 0x0149, 0, 0 }, { 0x02BC, 0x004E, 0 }, { 0x02BC, 0x006E, 0 }}, -#line 125 "./unicase/special-casing-table.gperf" - {"\373\000\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0 }, { 0xFB00, 0, 0 }, { 0x0046, 0x0066, 0 }, { 0x0066, 0x0066, 0 }}, -#line 15 "./unicase/special-casing-table.gperf" - {"\000I\000", 1, SCC_MORE_ABOVE , { 'l', 't' }, { 0x0049, 0, 0 }, { 0x0069, 0x0307, 0 }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }}, -#line 127 "./unicase/special-casing-table.gperf" - {"\373\002\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x004C, 0 }, { 0xFB02, 0, 0 }, { 0x0046, 0x006C, 0 }, { 0x0066, 0x006C, 0 }}, -#line 128 "./unicase/special-casing-table.gperf" - {"\373\003\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0x0049 }, { 0xFB03, 0, 0 }, { 0x0046, 0x0066, 0x0069 }, { 0x0066, 0x0066, 0x0069 }}, -#line 28 "./unicase/special-casing-table.gperf" - {"\0010\000", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }}, -#line 16 "./unicase/special-casing-table.gperf" - {"\000I\001", 1, -SCC_BEFORE_DOT , { 't', 'r' }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }}, -#line 17 "./unicase/special-casing-table.gperf" - {"\000I\002", 1, -SCC_BEFORE_DOT , { 'a', 'z' }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }}, -#line 33 "./unicase/special-casing-table.gperf" - {"\003\007\000", 1, SCC_AFTER_SOFT_DOTTED, { 'l', 't' }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }}, -#line 29 "./unicase/special-casing-table.gperf" - {"\0010\001", 1, SCC_ALWAYS , { 'a', 'z' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }}, -#line 30 "./unicase/special-casing-table.gperf" - {"\0010\002", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0130, 0, 0 }, { 0x0069, 0x0307, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0x0307, 0 }}, -#line 130 "./unicase/special-casing-table.gperf" - {"\373\005\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0054, 0 }, { 0xFB05, 0, 0 }, { 0x0053, 0x0074, 0 }, { 0x0073, 0x0074, 0 }}, -#line 34 "./unicase/special-casing-table.gperf" - {"\003\007\001", 1, SCC_AFTER_I , { 't', 'r' }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0x0307, 0, 0 }}, -#line 35 "./unicase/special-casing-table.gperf" - {"\003\007\002", 0, SCC_AFTER_I , { 'a', 'z' }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0x0307, 0, 0 }}, -#line 19 "./unicase/special-casing-table.gperf" - {"\000I\004", 0, SCC_ALWAYS , { 'a', 'z' }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }}, -#line 23 "./unicase/special-casing-table.gperf" - {"\000\314\000", 0, SCC_ALWAYS , { 'l', 't' }, { 0x00CC, 0, 0 }, { 0x0069, 0x0307, 0x0300 }, { 0x00CC, 0, 0 }, { 0x00EC, 0, 0 }}, -#line 109 "./unicase/special-casing-table.gperf" - {"\037\314\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0399, 0 }, { 0x1FC3, 0, 0 }, { 0x1FCC, 0, 0 }, { 0x03B7, 0x03B9, 0 }}, -#line 85 "./unicase/special-casing-table.gperf" - {"\037\243\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6B, 0x0399, 0 }, { 0x1FA3, 0, 0 }, { 0x1FAB, 0, 0 }, { 0x1F63, 0x03B9, 0 }}, -#line 80 "./unicase/special-casing-table.gperf" - {"\037\236\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2E, 0x0399, 0 }, { 0x1F96, 0, 0 }, { 0x1F9E, 0, 0 }, { 0x1F26, 0x03B9, 0 }}, -#line 37 "./unicase/special-casing-table.gperf" - {"\003\243\000", 0, SCC_FINAL_SIGMA , { '\0', '\0' }, { 0x03A3, 0, 0 }, { 0x03C2, 0, 0 }, { 0x03A3, 0, 0 }, { 0x03C3, 0, 0 }}, -#line 45 "./unicase/special-casing-table.gperf" - {"\036\236\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1E9E, 0, 0 }, { 0x00DF, 0, 0 }, { 0x1E9E, 0, 0 }, { 0x0073, 0x0073, 0 }}, -#line 76 "./unicase/special-casing-table.gperf" - {"\037\232\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2A, 0x0399, 0 }, { 0x1F92, 0, 0 }, { 0x1F9A, 0, 0 }, { 0x1F22, 0x03B9, 0 }}, -#line 75 "./unicase/special-casing-table.gperf" - {"\037\231\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F29, 0x0399, 0 }, { 0x1F91, 0, 0 }, { 0x1F99, 0, 0 }, { 0x1F21, 0x03B9, 0 }}, -#line 44 "./unicase/special-casing-table.gperf" - {"\036\232\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0041, 0x02BE, 0 }, { 0x1E9A, 0, 0 }, { 0x0041, 0x02BE, 0 }, { 0x0061, 0x02BE, 0 }}, -#line 43 "./unicase/special-casing-table.gperf" - {"\036\231\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0059, 0x030A, 0 }, { 0x1E99, 0, 0 }, { 0x0059, 0x030A, 0 }, { 0x0079, 0x030A, 0 }}, -#line 74 "./unicase/special-casing-table.gperf" - {"\037\230\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F28, 0x0399, 0 }, { 0x1F90, 0, 0 }, { 0x1F98, 0, 0 }, { 0x1F20, 0x03B9, 0 }}, -#line 73 "./unicase/special-casing-table.gperf" - {"\037\227\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2F, 0x0399, 0 }, { 0x1F97, 0, 0 }, { 0x1F9F, 0, 0 }, { 0x1F27, 0x03B9, 0 }}, -#line 42 "./unicase/special-casing-table.gperf" - {"\036\230\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0057, 0x030A, 0 }, { 0x1E98, 0, 0 }, { 0x0057, 0x030A, 0 }, { 0x0077, 0x030A, 0 }}, -#line 41 "./unicase/special-casing-table.gperf" - {"\036\227\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0054, 0x0308, 0 }, { 0x1E97, 0, 0 }, { 0x0054, 0x0308, 0 }, { 0x0074, 0x0308, 0 }}, -#line 72 "./unicase/special-casing-table.gperf" - {"\037\226\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2E, 0x0399, 0 }, { 0x1F96, 0, 0 }, { 0x1F9E, 0, 0 }, { 0x1F26, 0x03B9, 0 }}, -#line 66 "./unicase/special-casing-table.gperf" - {"\037\220\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F28, 0x0399, 0 }, { 0x1F90, 0, 0 }, { 0x1F98, 0, 0 }, { 0x1F20, 0x03B9, 0 }}, -#line 40 "./unicase/special-casing-table.gperf" - {"\036\226\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0048, 0x0331, 0 }, { 0x1E96, 0, 0 }, { 0x0048, 0x0331, 0 }, { 0x0068, 0x0331, 0 }}, -#line 36 "./unicase/special-casing-table.gperf" - {"\003\220\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0301 }, { 0x0390, 0, 0 }, { 0x0399, 0x0308, 0x0301 }, { 0x03B9, 0x0308, 0x0301 }}, -#line 57 "./unicase/special-casing-table.gperf" - {"\037\207\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0F, 0x0399, 0 }, { 0x1F87, 0, 0 }, { 0x1F8F, 0, 0 }, { 0x1F07, 0x03B9, 0 }}, -#line 21 "./unicase/special-casing-table.gperf" - {"\000i\000", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }}, -#line 124 "./unicase/special-casing-table.gperf" - {"\037\374\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0399, 0 }, { 0x1FF3, 0, 0 }, { 0x1FFC, 0, 0 }, { 0x03C9, 0x03B9, 0 }}, -#line 129 "./unicase/special-casing-table.gperf" - {"\373\004\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0x004C }, { 0xFB04, 0, 0 }, { 0x0046, 0x0066, 0x006C }, { 0x0066, 0x0066, 0x006C }}, -#line 123 "./unicase/special-casing-table.gperf" - {"\037\367\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0342, 0x0399 }, { 0x1FF7, 0, 0 }, { 0x03A9, 0x0342, 0x0345 }, { 0x03C9, 0x0342, 0x03B9 }}, -#line 22 "./unicase/special-casing-table.gperf" - {"\000i\001", 0, SCC_ALWAYS , { 'a', 'z' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }}, -#line 18 "./unicase/special-casing-table.gperf" - {"\000I\003", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }}, -#line 122 "./unicase/special-casing-table.gperf" - {"\037\366\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0342, 0 }, { 0x1FF6, 0, 0 }, { 0x03A9, 0x0342, 0 }, { 0x03C9, 0x0342, 0 }}, -#line 121 "./unicase/special-casing-table.gperf" - {"\037\364\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x038F, 0x0399, 0 }, { 0x1FF4, 0, 0 }, { 0x038F, 0x0345, 0 }, { 0x03CE, 0x03B9, 0 }}, -#line 39 "./unicase/special-casing-table.gperf" - {"\005\207\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0535, 0x0552, 0 }, { 0x0587, 0, 0 }, { 0x0535, 0x0582, 0 }, { 0x0565, 0x0582, 0 }}, -#line 120 "./unicase/special-casing-table.gperf" - {"\037\363\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0399, 0 }, { 0x1FF3, 0, 0 }, { 0x1FFC, 0, 0 }, { 0x03C9, 0x03B9, 0 }}, -#line 119 "./unicase/special-casing-table.gperf" - {"\037\362\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FFA, 0x0399, 0 }, { 0x1FF2, 0, 0 }, { 0x1FFA, 0x0345, 0 }, { 0x1F7C, 0x03B9, 0 }}, -#line 32 "./unicase/special-casing-table.gperf" - {"\001\360\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x004A, 0x030C, 0 }, { 0x01F0, 0, 0 }, { 0x004A, 0x030C, 0 }, { 0x006A, 0x030C, 0 }}, -#line 118 "./unicase/special-casing-table.gperf" - {"\037\347\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0342 }, { 0x1FE7, 0, 0 }, { 0x03A5, 0x0308, 0x0342 }, { 0x03C5, 0x0308, 0x0342 }}, -#line 117 "./unicase/special-casing-table.gperf" - {"\037\346\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0342, 0 }, { 0x1FE6, 0, 0 }, { 0x03A5, 0x0342, 0 }, { 0x03C5, 0x0342, 0 }}, -#line 116 "./unicase/special-casing-table.gperf" - {"\037\344\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A1, 0x0313, 0 }, { 0x1FE4, 0, 0 }, { 0x03A1, 0x0313, 0 }, { 0x03C1, 0x0313, 0 }}, -#line 115 "./unicase/special-casing-table.gperf" - {"\037\343\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0301 }, { 0x1FE3, 0, 0 }, { 0x03A5, 0x0308, 0x0301 }, { 0x03C5, 0x0308, 0x0301 }}, -#line 114 "./unicase/special-casing-table.gperf" - {"\037\342\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0300 }, { 0x1FE2, 0, 0 }, { 0x03A5, 0x0308, 0x0300 }, { 0x03C5, 0x0308, 0x0300 }}, -#line 25 "./unicase/special-casing-table.gperf" - {"\000\337\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0053, 0 }, { 0x00DF, 0, 0 }, { 0x0053, 0x0073, 0 }, { 0x0073, 0x0073, 0 }}, -#line 113 "./unicase/special-casing-table.gperf" - {"\037\327\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0342 }, { 0x1FD7, 0, 0 }, { 0x0399, 0x0308, 0x0342 }, { 0x03B9, 0x0308, 0x0342 }}, -#line 112 "./unicase/special-casing-table.gperf" - {"\037\326\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0342, 0 }, { 0x1FD6, 0, 0 }, { 0x0399, 0x0342, 0 }, { 0x03B9, 0x0342, 0 }}, -#line 111 "./unicase/special-casing-table.gperf" - {"\037\323\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0301 }, { 0x1FD3, 0, 0 }, { 0x0399, 0x0308, 0x0301 }, { 0x03B9, 0x0308, 0x0301 }}, -#line 110 "./unicase/special-casing-table.gperf" - {"\037\322\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0300 }, { 0x1FD2, 0, 0 }, { 0x0399, 0x0308, 0x0300 }, { 0x03B9, 0x0308, 0x0300 }}, -#line 24 "./unicase/special-casing-table.gperf" - {"\000\315\000", 0, SCC_ALWAYS , { 'l', 't' }, { 0x00CD, 0, 0 }, { 0x0069, 0x0307, 0x0301 }, { 0x00CD, 0, 0 }, { 0x00ED, 0, 0 }}, -#line 108 "./unicase/special-casing-table.gperf" - {"\037\307\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0342, 0x0399 }, { 0x1FC7, 0, 0 }, { 0x0397, 0x0342, 0x0345 }, { 0x03B7, 0x0342, 0x03B9 }}, -#line 107 "./unicase/special-casing-table.gperf" - {"\037\306\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0342, 0 }, { 0x1FC6, 0, 0 }, { 0x0397, 0x0342, 0 }, { 0x03B7, 0x0342, 0 }}, -#line 106 "./unicase/special-casing-table.gperf" - {"\037\304\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0389, 0x0399, 0 }, { 0x1FC4, 0, 0 }, { 0x0389, 0x0345, 0 }, { 0x03AE, 0x03B9, 0 }}, -#line 105 "./unicase/special-casing-table.gperf" - {"\037\303\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0399, 0 }, { 0x1FC3, 0, 0 }, { 0x1FCC, 0, 0 }, { 0x03B7, 0x03B9, 0 }}, -#line 104 "./unicase/special-casing-table.gperf" - {"\037\302\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FCA, 0x0399, 0 }, { 0x1FC2, 0, 0 }, { 0x1FCA, 0x0345, 0 }, { 0x1F74, 0x03B9, 0 }}, -#line 103 "./unicase/special-casing-table.gperf" - {"\037\274\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0399, 0 }, { 0x1FB3, 0, 0 }, { 0x1FBC, 0, 0 }, { 0x03B1, 0x03B9, 0 }}, -#line 102 "./unicase/special-casing-table.gperf" - {"\037\267\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0342, 0x0399 }, { 0x1FB7, 0, 0 }, { 0x0391, 0x0342, 0x0345 }, { 0x03B1, 0x0342, 0x03B9 }}, -#line 101 "./unicase/special-casing-table.gperf" - {"\037\266\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0342, 0 }, { 0x1FB6, 0, 0 }, { 0x0391, 0x0342, 0 }, { 0x03B1, 0x0342, 0 }}, -#line 100 "./unicase/special-casing-table.gperf" - {"\037\264\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0386, 0x0399, 0 }, { 0x1FB4, 0, 0 }, { 0x0386, 0x0345, 0 }, { 0x03AC, 0x03B9, 0 }}, -#line 99 "./unicase/special-casing-table.gperf" - {"\037\263\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0399, 0 }, { 0x1FB3, 0, 0 }, { 0x1FBC, 0, 0 }, { 0x03B1, 0x03B9, 0 }}, -#line 98 "./unicase/special-casing-table.gperf" - {"\037\262\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FBA, 0x0399, 0 }, { 0x1FB2, 0, 0 }, { 0x1FBA, 0x0345, 0 }, { 0x1F70, 0x03B9, 0 }}, -#line 38 "./unicase/special-casing-table.gperf" - {"\003\260\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0301 }, { 0x03B0, 0, 0 }, { 0x03A5, 0x0308, 0x0301 }, { 0x03C5, 0x0308, 0x0301 }}, -#line 97 "./unicase/special-casing-table.gperf" - {"\037\257\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6F, 0x0399, 0 }, { 0x1FA7, 0, 0 }, { 0x1FAF, 0, 0 }, { 0x1F67, 0x03B9, 0 }}, -#line 96 "./unicase/special-casing-table.gperf" - {"\037\256\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6E, 0x0399, 0 }, { 0x1FA6, 0, 0 }, { 0x1FAE, 0, 0 }, { 0x1F66, 0x03B9, 0 }}, -#line 95 "./unicase/special-casing-table.gperf" - {"\037\255\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6D, 0x0399, 0 }, { 0x1FA5, 0, 0 }, { 0x1FAD, 0, 0 }, { 0x1F65, 0x03B9, 0 }}, -#line 94 "./unicase/special-casing-table.gperf" - {"\037\254\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6C, 0x0399, 0 }, { 0x1FA4, 0, 0 }, { 0x1FAC, 0, 0 }, { 0x1F64, 0x03B9, 0 }}, -#line 93 "./unicase/special-casing-table.gperf" - {"\037\253\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6B, 0x0399, 0 }, { 0x1FA3, 0, 0 }, { 0x1FAB, 0, 0 }, { 0x1F63, 0x03B9, 0 }}, -#line 92 "./unicase/special-casing-table.gperf" - {"\037\252\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6A, 0x0399, 0 }, { 0x1FA2, 0, 0 }, { 0x1FAA, 0, 0 }, { 0x1F62, 0x03B9, 0 }}, -#line 91 "./unicase/special-casing-table.gperf" - {"\037\251\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F69, 0x0399, 0 }, { 0x1FA1, 0, 0 }, { 0x1FA9, 0, 0 }, { 0x1F61, 0x03B9, 0 }}, -#line 90 "./unicase/special-casing-table.gperf" - {"\037\250\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F68, 0x0399, 0 }, { 0x1FA0, 0, 0 }, { 0x1FA8, 0, 0 }, { 0x1F60, 0x03B9, 0 }}, -#line 89 "./unicase/special-casing-table.gperf" - {"\037\247\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6F, 0x0399, 0 }, { 0x1FA7, 0, 0 }, { 0x1FAF, 0, 0 }, { 0x1F67, 0x03B9, 0 }}, -#line 88 "./unicase/special-casing-table.gperf" - {"\037\246\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6E, 0x0399, 0 }, { 0x1FA6, 0, 0 }, { 0x1FAE, 0, 0 }, { 0x1F66, 0x03B9, 0 }}, -#line 87 "./unicase/special-casing-table.gperf" - {"\037\245\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6D, 0x0399, 0 }, { 0x1FA5, 0, 0 }, { 0x1FAD, 0, 0 }, { 0x1F65, 0x03B9, 0 }}, -#line 86 "./unicase/special-casing-table.gperf" - {"\037\244\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6C, 0x0399, 0 }, { 0x1FA4, 0, 0 }, { 0x1FAC, 0, 0 }, { 0x1F64, 0x03B9, 0 }}, -#line 84 "./unicase/special-casing-table.gperf" - {"\037\242\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6A, 0x0399, 0 }, { 0x1FA2, 0, 0 }, { 0x1FAA, 0, 0 }, { 0x1F62, 0x03B9, 0 }}, -#line 83 "./unicase/special-casing-table.gperf" - {"\037\241\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F69, 0x0399, 0 }, { 0x1FA1, 0, 0 }, { 0x1FA9, 0, 0 }, { 0x1F61, 0x03B9, 0 }}, -#line 82 "./unicase/special-casing-table.gperf" - {"\037\240\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F68, 0x0399, 0 }, { 0x1FA0, 0, 0 }, { 0x1FA8, 0, 0 }, { 0x1F60, 0x03B9, 0 }}, -#line 81 "./unicase/special-casing-table.gperf" - {"\037\237\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2F, 0x0399, 0 }, { 0x1F97, 0, 0 }, { 0x1F9F, 0, 0 }, { 0x1F27, 0x03B9, 0 }}, -#line 79 "./unicase/special-casing-table.gperf" - {"\037\235\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2D, 0x0399, 0 }, { 0x1F95, 0, 0 }, { 0x1F9D, 0, 0 }, { 0x1F25, 0x03B9, 0 }}, -#line 78 "./unicase/special-casing-table.gperf" - {"\037\234\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2C, 0x0399, 0 }, { 0x1F94, 0, 0 }, { 0x1F9C, 0, 0 }, { 0x1F24, 0x03B9, 0 }}, -#line 77 "./unicase/special-casing-table.gperf" - {"\037\233\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2B, 0x0399, 0 }, { 0x1F93, 0, 0 }, { 0x1F9B, 0, 0 }, { 0x1F23, 0x03B9, 0 }}, -#line 71 "./unicase/special-casing-table.gperf" - {"\037\225\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2D, 0x0399, 0 }, { 0x1F95, 0, 0 }, { 0x1F9D, 0, 0 }, { 0x1F25, 0x03B9, 0 }}, -#line 70 "./unicase/special-casing-table.gperf" - {"\037\224\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2C, 0x0399, 0 }, { 0x1F94, 0, 0 }, { 0x1F9C, 0, 0 }, { 0x1F24, 0x03B9, 0 }}, -#line 69 "./unicase/special-casing-table.gperf" - {"\037\223\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2B, 0x0399, 0 }, { 0x1F93, 0, 0 }, { 0x1F9B, 0, 0 }, { 0x1F23, 0x03B9, 0 }}, -#line 68 "./unicase/special-casing-table.gperf" - {"\037\222\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2A, 0x0399, 0 }, { 0x1F92, 0, 0 }, { 0x1F9A, 0, 0 }, { 0x1F22, 0x03B9, 0 }}, -#line 67 "./unicase/special-casing-table.gperf" - {"\037\221\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F29, 0x0399, 0 }, { 0x1F91, 0, 0 }, { 0x1F99, 0, 0 }, { 0x1F21, 0x03B9, 0 }}, -#line 65 "./unicase/special-casing-table.gperf" - {"\037\217\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0F, 0x0399, 0 }, { 0x1F87, 0, 0 }, { 0x1F8F, 0, 0 }, { 0x1F07, 0x03B9, 0 }}, -#line 64 "./unicase/special-casing-table.gperf" - {"\037\216\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0E, 0x0399, 0 }, { 0x1F86, 0, 0 }, { 0x1F8E, 0, 0 }, { 0x1F06, 0x03B9, 0 }}, -#line 63 "./unicase/special-casing-table.gperf" - {"\037\215\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0D, 0x0399, 0 }, { 0x1F85, 0, 0 }, { 0x1F8D, 0, 0 }, { 0x1F05, 0x03B9, 0 }}, -#line 62 "./unicase/special-casing-table.gperf" - {"\037\214\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0C, 0x0399, 0 }, { 0x1F84, 0, 0 }, { 0x1F8C, 0, 0 }, { 0x1F04, 0x03B9, 0 }}, -#line 61 "./unicase/special-casing-table.gperf" - {"\037\213\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0B, 0x0399, 0 }, { 0x1F83, 0, 0 }, { 0x1F8B, 0, 0 }, { 0x1F03, 0x03B9, 0 }}, -#line 60 "./unicase/special-casing-table.gperf" - {"\037\212\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0A, 0x0399, 0 }, { 0x1F82, 0, 0 }, { 0x1F8A, 0, 0 }, { 0x1F02, 0x03B9, 0 }}, -#line 59 "./unicase/special-casing-table.gperf" - {"\037\211\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F09, 0x0399, 0 }, { 0x1F81, 0, 0 }, { 0x1F89, 0, 0 }, { 0x1F01, 0x03B9, 0 }}, -#line 58 "./unicase/special-casing-table.gperf" - {"\037\210\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F08, 0x0399, 0 }, { 0x1F80, 0, 0 }, { 0x1F88, 0, 0 }, { 0x1F00, 0x03B9, 0 }}, -#line 56 "./unicase/special-casing-table.gperf" - {"\037\206\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0E, 0x0399, 0 }, { 0x1F86, 0, 0 }, { 0x1F8E, 0, 0 }, { 0x1F06, 0x03B9, 0 }}, -#line 55 "./unicase/special-casing-table.gperf" - {"\037\205\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0D, 0x0399, 0 }, { 0x1F85, 0, 0 }, { 0x1F8D, 0, 0 }, { 0x1F05, 0x03B9, 0 }}, -#line 54 "./unicase/special-casing-table.gperf" - {"\037\204\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0C, 0x0399, 0 }, { 0x1F84, 0, 0 }, { 0x1F8C, 0, 0 }, { 0x1F04, 0x03B9, 0 }}, -#line 53 "./unicase/special-casing-table.gperf" - {"\037\203\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0B, 0x0399, 0 }, { 0x1F83, 0, 0 }, { 0x1F8B, 0, 0 }, { 0x1F03, 0x03B9, 0 }}, -#line 52 "./unicase/special-casing-table.gperf" - {"\037\202\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0A, 0x0399, 0 }, { 0x1F82, 0, 0 }, { 0x1F8A, 0, 0 }, { 0x1F02, 0x03B9, 0 }}, -#line 51 "./unicase/special-casing-table.gperf" - {"\037\201\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F09, 0x0399, 0 }, { 0x1F81, 0, 0 }, { 0x1F89, 0, 0 }, { 0x1F01, 0x03B9, 0 }}, -#line 50 "./unicase/special-casing-table.gperf" - {"\037\200\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F08, 0x0399, 0 }, { 0x1F80, 0, 0 }, { 0x1F88, 0, 0 }, { 0x1F00, 0x03B9, 0 }}, -#line 49 "./unicase/special-casing-table.gperf" - {"\037V\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0342 }, { 0x1F56, 0, 0 }, { 0x03A5, 0x0313, 0x0342 }, { 0x03C5, 0x0313, 0x0342 }}, -#line 48 "./unicase/special-casing-table.gperf" - {"\037T\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0301 }, { 0x1F54, 0, 0 }, { 0x03A5, 0x0313, 0x0301 }, { 0x03C5, 0x0313, 0x0301 }}, -#line 47 "./unicase/special-casing-table.gperf" - {"\037R\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0300 }, { 0x1F52, 0, 0 }, { 0x03A5, 0x0313, 0x0300 }, { 0x03C5, 0x0313, 0x0300 }}, -#line 46 "./unicase/special-casing-table.gperf" - {"\037P\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0 }, { 0x1F50, 0, 0 }, { 0x03A5, 0x0313, 0 }, { 0x03C5, 0x0313, 0 }}, -#line 20 "./unicase/special-casing-table.gperf" - {"\000J\000", 0, SCC_MORE_ABOVE , { 'l', 't' }, { 0x004A, 0, 0 }, { 0x006A, 0x0307, 0 }, { 0x004A, 0, 0 }, { 0x006A, 0, 0 }}, -#line 27 "./unicase/special-casing-table.gperf" - {"\001.\000", 0, SCC_MORE_ABOVE , { 'l', 't' }, { 0x012E, 0, 0 }, { 0x012F, 0x0307, 0 }, { 0x012E, 0, 0 }, { 0x012F, 0, 0 }}, -#line 26 "./unicase/special-casing-table.gperf" - {"\001(\000", 0, SCC_ALWAYS , { 'l', 't' }, { 0x0128, 0, 0 }, { 0x0069, 0x0307, 0x0303 }, { 0x0128, 0, 0 }, { 0x0129, 0, 0 }}, -#line 136 "./unicase/special-casing-table.gperf" - {"\373\027\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x053D, 0 }, { 0xFB17, 0, 0 }, { 0x0544, 0x056D, 0 }, { 0x0574, 0x056D, 0 }}, -#line 135 "./unicase/special-casing-table.gperf" - {"\373\026\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x054E, 0x0546, 0 }, { 0xFB16, 0, 0 }, { 0x054E, 0x0576, 0 }, { 0x057E, 0x0576, 0 }}, -#line 134 "./unicase/special-casing-table.gperf" - {"\373\025\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x053B, 0 }, { 0xFB15, 0, 0 }, { 0x0544, 0x056B, 0 }, { 0x0574, 0x056B, 0 }}, -#line 133 "./unicase/special-casing-table.gperf" - {"\373\024\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x0535, 0 }, { 0xFB14, 0, 0 }, { 0x0544, 0x0565, 0 }, { 0x0574, 0x0565, 0 }}, -#line 132 "./unicase/special-casing-table.gperf" - {"\373\023\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x0546, 0 }, { 0xFB13, 0, 0 }, { 0x0544, 0x0576, 0 }, { 0x0574, 0x0576, 0 }}, -#line 131 "./unicase/special-casing-table.gperf" - {"\373\006\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0054, 0 }, { 0xFB06, 0, 0 }, { 0x0053, 0x0074, 0 }, { 0x0073, 0x0074, 0 }} - }; - - if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) - { - register int key = gl_unicase_special_hash (str, len); - - if (key <= MAX_HASH_VALUE && key >= 0) - if (len == lengthtable[key]) - { - register const char *s = wordlist[key].code; - - if (*str == *s && !memcmp (str + 1, s + 1, len - 1)) - return &wordlist[key]; - } - } - return 0; -} diff --git a/lib/unistring/unictype.in.h b/lib/unistring/unictype.in.h deleted file mode 100644 index cd3535140f..0000000000 --- a/lib/unistring/unictype.in.h +++ /dev/null @@ -1,1060 +0,0 @@ -/* Unicode character classification and properties. - Copyright (C) 2002, 2005-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _UNICTYPE_H -#define _UNICTYPE_H - -#include "unitypes.h" - -/* Get bool. */ -#include - -/* Get size_t. */ -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* ========================================================================= */ - -/* Field 1 of Unicode Character Database: Character name. - See "uniname.h". */ - -/* ========================================================================= */ - -/* Field 2 of Unicode Character Database: General category. */ - -/* Data type denoting a General category value. This is not just a bitmask, - but rather a bitmask and a pointer to the lookup table, so that programs - that use only the predefined bitmasks (i.e. don't combine bitmasks with & - and |) don't have a link-time dependency towards the big general table. */ -typedef struct -{ - uint32_t bitmask : 31; - /*bool*/ unsigned int generic : 1; - union - { - const void *table; /* when generic is 0 */ - bool (*lookup_fn) (ucs4_t uc, uint32_t bitmask); /* when generic is 1 */ - } lookup; -} -uc_general_category_t; - -/* Bits and bit masks denoting General category values. UnicodeData-3.2.0.html - says a 32-bit integer will always suffice to represent them. - These bit masks can only be used with the uc_is_general_category_withtable - function. */ -enum -{ - UC_CATEGORY_MASK_L = 0x0000001f, - UC_CATEGORY_MASK_LC = 0x00000007, - UC_CATEGORY_MASK_Lu = 0x00000001, - UC_CATEGORY_MASK_Ll = 0x00000002, - UC_CATEGORY_MASK_Lt = 0x00000004, - UC_CATEGORY_MASK_Lm = 0x00000008, - UC_CATEGORY_MASK_Lo = 0x00000010, - UC_CATEGORY_MASK_M = 0x000000e0, - UC_CATEGORY_MASK_Mn = 0x00000020, - UC_CATEGORY_MASK_Mc = 0x00000040, - UC_CATEGORY_MASK_Me = 0x00000080, - UC_CATEGORY_MASK_N = 0x00000700, - UC_CATEGORY_MASK_Nd = 0x00000100, - UC_CATEGORY_MASK_Nl = 0x00000200, - UC_CATEGORY_MASK_No = 0x00000400, - UC_CATEGORY_MASK_P = 0x0003f800, - UC_CATEGORY_MASK_Pc = 0x00000800, - UC_CATEGORY_MASK_Pd = 0x00001000, - UC_CATEGORY_MASK_Ps = 0x00002000, - UC_CATEGORY_MASK_Pe = 0x00004000, - UC_CATEGORY_MASK_Pi = 0x00008000, - UC_CATEGORY_MASK_Pf = 0x00010000, - UC_CATEGORY_MASK_Po = 0x00020000, - UC_CATEGORY_MASK_S = 0x003c0000, - UC_CATEGORY_MASK_Sm = 0x00040000, - UC_CATEGORY_MASK_Sc = 0x00080000, - UC_CATEGORY_MASK_Sk = 0x00100000, - UC_CATEGORY_MASK_So = 0x00200000, - UC_CATEGORY_MASK_Z = 0x01c00000, - UC_CATEGORY_MASK_Zs = 0x00400000, - UC_CATEGORY_MASK_Zl = 0x00800000, - UC_CATEGORY_MASK_Zp = 0x01000000, - UC_CATEGORY_MASK_C = 0x3e000000, - UC_CATEGORY_MASK_Cc = 0x02000000, - UC_CATEGORY_MASK_Cf = 0x04000000, - UC_CATEGORY_MASK_Cs = 0x08000000, - UC_CATEGORY_MASK_Co = 0x10000000, - UC_CATEGORY_MASK_Cn = 0x20000000 -}; - -/* Predefined General category values. */ -extern const uc_general_category_t UC_CATEGORY_L; -extern const uc_general_category_t UC_CATEGORY_LC; -extern const uc_general_category_t UC_CATEGORY_Lu; -extern const uc_general_category_t UC_CATEGORY_Ll; -extern const uc_general_category_t UC_CATEGORY_Lt; -extern const uc_general_category_t UC_CATEGORY_Lm; -extern const uc_general_category_t UC_CATEGORY_Lo; -extern const uc_general_category_t UC_CATEGORY_M; -extern const uc_general_category_t UC_CATEGORY_Mn; -extern const uc_general_category_t UC_CATEGORY_Mc; -extern const uc_general_category_t UC_CATEGORY_Me; -extern const uc_general_category_t UC_CATEGORY_N; -extern const uc_general_category_t UC_CATEGORY_Nd; -extern const uc_general_category_t UC_CATEGORY_Nl; -extern const uc_general_category_t UC_CATEGORY_No; -extern const uc_general_category_t UC_CATEGORY_P; -extern const uc_general_category_t UC_CATEGORY_Pc; -extern const uc_general_category_t UC_CATEGORY_Pd; -extern const uc_general_category_t UC_CATEGORY_Ps; -extern const uc_general_category_t UC_CATEGORY_Pe; -extern const uc_general_category_t UC_CATEGORY_Pi; -extern const uc_general_category_t UC_CATEGORY_Pf; -extern const uc_general_category_t UC_CATEGORY_Po; -extern const uc_general_category_t UC_CATEGORY_S; -extern const uc_general_category_t UC_CATEGORY_Sm; -extern const uc_general_category_t UC_CATEGORY_Sc; -extern const uc_general_category_t UC_CATEGORY_Sk; -extern const uc_general_category_t UC_CATEGORY_So; -extern const uc_general_category_t UC_CATEGORY_Z; -extern const uc_general_category_t UC_CATEGORY_Zs; -extern const uc_general_category_t UC_CATEGORY_Zl; -extern const uc_general_category_t UC_CATEGORY_Zp; -extern const uc_general_category_t UC_CATEGORY_C; -extern const uc_general_category_t UC_CATEGORY_Cc; -extern const uc_general_category_t UC_CATEGORY_Cf; -extern const uc_general_category_t UC_CATEGORY_Cs; -extern const uc_general_category_t UC_CATEGORY_Co; -extern const uc_general_category_t UC_CATEGORY_Cn; -/* Non-public. */ -extern const uc_general_category_t _UC_CATEGORY_NONE; - -/* Alias names for predefined General category values. */ -#define UC_LETTER UC_CATEGORY_L -#define UC_CASED_LETTER UC_CATEGORY_LC -#define UC_UPPERCASE_LETTER UC_CATEGORY_Lu -#define UC_LOWERCASE_LETTER UC_CATEGORY_Ll -#define UC_TITLECASE_LETTER UC_CATEGORY_Lt -#define UC_MODIFIER_LETTER UC_CATEGORY_Lm -#define UC_OTHER_LETTER UC_CATEGORY_Lo -#define UC_MARK UC_CATEGORY_M -#define UC_NON_SPACING_MARK UC_CATEGORY_Mn -#define UC_COMBINING_SPACING_MARK UC_CATEGORY_Mc -#define UC_ENCLOSING_MARK UC_CATEGORY_Me -#define UC_NUMBER UC_CATEGORY_N -#define UC_DECIMAL_DIGIT_NUMBER UC_CATEGORY_Nd -#define UC_LETTER_NUMBER UC_CATEGORY_Nl -#define UC_OTHER_NUMBER UC_CATEGORY_No -#define UC_PUNCTUATION UC_CATEGORY_P -#define UC_CONNECTOR_PUNCTUATION UC_CATEGORY_Pc -#define UC_DASH_PUNCTUATION UC_CATEGORY_Pd -#define UC_OPEN_PUNCTUATION UC_CATEGORY_Ps /* a.k.a. UC_START_PUNCTUATION */ -#define UC_CLOSE_PUNCTUATION UC_CATEGORY_Pe /* a.k.a. UC_END_PUNCTUATION */ -#define UC_INITIAL_QUOTE_PUNCTUATION UC_CATEGORY_Pi -#define UC_FINAL_QUOTE_PUNCTUATION UC_CATEGORY_Pf -#define UC_OTHER_PUNCTUATION UC_CATEGORY_Po -#define UC_SYMBOL UC_CATEGORY_S -#define UC_MATH_SYMBOL UC_CATEGORY_Sm -#define UC_CURRENCY_SYMBOL UC_CATEGORY_Sc -#define UC_MODIFIER_SYMBOL UC_CATEGORY_Sk -#define UC_OTHER_SYMBOL UC_CATEGORY_So -#define UC_SEPARATOR UC_CATEGORY_Z -#define UC_SPACE_SEPARATOR UC_CATEGORY_Zs -#define UC_LINE_SEPARATOR UC_CATEGORY_Zl -#define UC_PARAGRAPH_SEPARATOR UC_CATEGORY_Zp -#define UC_OTHER UC_CATEGORY_C -#define UC_CONTROL UC_CATEGORY_Cc -#define UC_FORMAT UC_CATEGORY_Cf -#define UC_SURROGATE UC_CATEGORY_Cs /* all of them are invalid characters */ -#define UC_PRIVATE_USE UC_CATEGORY_Co -#define UC_UNASSIGNED UC_CATEGORY_Cn /* some of them are invalid characters */ - -/* Return the union of two general categories. - This corresponds to the unions of the two sets of characters. */ -extern uc_general_category_t - uc_general_category_or (uc_general_category_t category1, - uc_general_category_t category2); - -/* Return the intersection of two general categories as bit masks. - This *does*not* correspond to the intersection of the two sets of - characters. */ -extern uc_general_category_t - uc_general_category_and (uc_general_category_t category1, - uc_general_category_t category2); - -/* Return the intersection of a general category with the complement of a - second general category, as bit masks. - This *does*not* correspond to the intersection with complement, when - viewing the categories as sets of characters. */ -extern uc_general_category_t - uc_general_category_and_not (uc_general_category_t category1, - uc_general_category_t category2); - -/* Return the name of a general category. */ -extern const char * - uc_general_category_name (uc_general_category_t category) - _UC_ATTRIBUTE_PURE; - -/* Return the long name of a general category. */ -extern const char * - uc_general_category_long_name (uc_general_category_t category) - _UC_ATTRIBUTE_PURE; - -/* Return the general category given by name, e.g. "Lu", or by long name, - e.g. "Uppercase Letter". */ -extern uc_general_category_t - uc_general_category_byname (const char *category_name) - _UC_ATTRIBUTE_PURE; - -/* Return the general category of a Unicode character. */ -extern uc_general_category_t - uc_general_category (ucs4_t uc) - _UC_ATTRIBUTE_PURE; - -/* Test whether a Unicode character belongs to a given category. - The CATEGORY argument can be the combination of several predefined - general categories. */ -extern bool - uc_is_general_category (ucs4_t uc, uc_general_category_t category) - _UC_ATTRIBUTE_PURE; -/* Likewise. This function uses a big table comprising all categories. */ -extern bool - uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask) - _UC_ATTRIBUTE_CONST; - -/* ========================================================================= */ - -/* Field 3 of Unicode Character Database: Canonical combining class. */ - -/* The possible results of uc_combining_class (0..255) are described in - UCD.html. The list here is not definitive; more values can be added - in future versions. */ -enum -{ - UC_CCC_NR = 0, /* Not Reordered */ - UC_CCC_OV = 1, /* Overlay */ - UC_CCC_NK = 7, /* Nukta */ - UC_CCC_KV = 8, /* Kana Voicing */ - UC_CCC_VR = 9, /* Virama */ - UC_CCC_ATBL = 200, /* Attached Below Left */ - UC_CCC_ATB = 202, /* Attached Below */ - UC_CCC_ATA = 214, /* Attached Above */ - UC_CCC_ATAR = 216, /* Attached Above Right */ - UC_CCC_BL = 218, /* Below Left */ - UC_CCC_B = 220, /* Below */ - UC_CCC_BR = 222, /* Below Right */ - UC_CCC_L = 224, /* Left */ - UC_CCC_R = 226, /* Right */ - UC_CCC_AL = 228, /* Above Left */ - UC_CCC_A = 230, /* Above */ - UC_CCC_AR = 232, /* Above Right */ - UC_CCC_DB = 233, /* Double Below */ - UC_CCC_DA = 234, /* Double Above */ - UC_CCC_IS = 240 /* Iota Subscript */ -}; - -/* Return the canonical combining class of a Unicode character. */ -extern int - uc_combining_class (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Return the name of a canonical combining class. */ -extern const char * - uc_combining_class_name (int ccc) - _UC_ATTRIBUTE_CONST; - -/* Return the long name of a canonical combining class. */ -extern const char * - uc_combining_class_long_name (int ccc) - _UC_ATTRIBUTE_CONST; - -/* Return the canonical combining class given by name, e.g. "BL", or by long - name, e.g. "Below Left". */ -extern int - uc_combining_class_byname (const char *ccc_name) - _UC_ATTRIBUTE_PURE; - -/* ========================================================================= */ - -/* Field 4 of Unicode Character Database: Bidi class. - Before Unicode 4.0, this field was called "Bidirectional category". */ - -enum -{ - UC_BIDI_L, /* Left-to-Right */ - UC_BIDI_LRE, /* Left-to-Right Embedding */ - UC_BIDI_LRO, /* Left-to-Right Override */ - UC_BIDI_R, /* Right-to-Left */ - UC_BIDI_AL, /* Right-to-Left Arabic */ - UC_BIDI_RLE, /* Right-to-Left Embedding */ - UC_BIDI_RLO, /* Right-to-Left Override */ - UC_BIDI_PDF, /* Pop Directional Format */ - UC_BIDI_EN, /* European Number */ - UC_BIDI_ES, /* European Number Separator */ - UC_BIDI_ET, /* European Number Terminator */ - UC_BIDI_AN, /* Arabic Number */ - UC_BIDI_CS, /* Common Number Separator */ - UC_BIDI_NSM, /* Non-Spacing Mark */ - UC_BIDI_BN, /* Boundary Neutral */ - UC_BIDI_B, /* Paragraph Separator */ - UC_BIDI_S, /* Segment Separator */ - UC_BIDI_WS, /* Whitespace */ - UC_BIDI_ON, /* Other Neutral */ - UC_BIDI_LRI, /* Left-to-Right Isolate */ - UC_BIDI_RLI, /* Right-to-Left Isolate */ - UC_BIDI_FSI, /* First Strong Isolate */ - UC_BIDI_PDI /* Pop Directional Isolate */ -}; - -/* Return the name of a bidi class. */ -extern const char * - uc_bidi_class_name (int bidi_class) - _UC_ATTRIBUTE_CONST; -/* Same; obsolete function name. */ -extern const char * - uc_bidi_category_name (int category) - _UC_ATTRIBUTE_CONST; - -/* Return the long name of a bidi class. */ -extern const char * - uc_bidi_class_long_name (int bidi_class) - _UC_ATTRIBUTE_CONST; - -/* Return the bidi class given by name, e.g. "LRE", or by long name, e.g. - "Left-to-Right Embedding". */ -extern int - uc_bidi_class_byname (const char *bidi_class_name) - _UC_ATTRIBUTE_PURE; -/* Same; obsolete function name. */ -extern int - uc_bidi_category_byname (const char *category_name) - _UC_ATTRIBUTE_PURE; - -/* Return the bidi class of a Unicode character. */ -extern int - uc_bidi_class (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -/* Same; obsolete function name. */ -extern int - uc_bidi_category (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test whether a Unicode character belongs to a given bidi class. */ -extern bool - uc_is_bidi_class (ucs4_t uc, int bidi_class) - _UC_ATTRIBUTE_CONST; -/* Same; obsolete function name. */ -extern bool - uc_is_bidi_category (ucs4_t uc, int category) - _UC_ATTRIBUTE_CONST; - -/* ========================================================================= */ - -/* Field 5 of Unicode Character Database: Character decomposition mapping. - See "uninorm.h". */ - -/* ========================================================================= */ - -/* Field 6 of Unicode Character Database: Decimal digit value. */ - -/* Return the decimal digit value of a Unicode character. */ -extern int - uc_decimal_value (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* ========================================================================= */ - -/* Field 7 of Unicode Character Database: Digit value. */ - -/* Return the digit value of a Unicode character. */ -extern int - uc_digit_value (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* ========================================================================= */ - -/* Field 8 of Unicode Character Database: Numeric value. */ - -/* Return the numeric value of a Unicode character. */ -typedef struct -{ - int numerator; - int denominator; -} -uc_fraction_t; -extern uc_fraction_t - uc_numeric_value (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* ========================================================================= */ - -/* Field 9 of Unicode Character Database: Mirrored. */ - -/* Return the mirrored character of a Unicode character UC in *PUC. */ -extern bool - uc_mirror_char (ucs4_t uc, ucs4_t *puc); - -/* ========================================================================= */ - -/* Field 10 of Unicode Character Database: Unicode 1.0 Name. - Not available in this library. */ - -/* ========================================================================= */ - -/* Field 11 of Unicode Character Database: ISO 10646 comment. - Not available in this library. */ - -/* ========================================================================= */ - -/* Field 12, 13, 14 of Unicode Character Database: Uppercase mapping, - lowercase mapping, titlecase mapping. See "unicase.h". */ - -/* ========================================================================= */ - -/* Field 2 of the file ArabicShaping.txt in the Unicode Character Database. */ - -/* Possible joining types. */ -enum -{ - UC_JOINING_TYPE_U, /* Non_Joining */ - UC_JOINING_TYPE_T, /* Transparent */ - UC_JOINING_TYPE_C, /* Join_Causing */ - UC_JOINING_TYPE_L, /* Left_Joining */ - UC_JOINING_TYPE_R, /* Right_Joining */ - UC_JOINING_TYPE_D /* Dual_Joining */ -}; - -/* Return the name of a joining type. */ -extern const char * - uc_joining_type_name (int joining_type) - _UC_ATTRIBUTE_CONST; - -/* Return the long name of a joining type. */ -extern const char * - uc_joining_type_long_name (int joining_type) - _UC_ATTRIBUTE_CONST; - -/* Return the joining type given by name, e.g. "D", or by long name, e.g. - "Dual Joining". */ -extern int - uc_joining_type_byname (const char *joining_type_name) - _UC_ATTRIBUTE_PURE; - -/* Return the joining type of a Unicode character. */ -extern int - uc_joining_type (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* ========================================================================= */ - -/* Field 3 of the file ArabicShaping.txt in the Unicode Character Database. */ - -/* Possible joining groups. - This enumeration may be extended in the future. */ -enum -{ - UC_JOINING_GROUP_NONE, /* No_Joining_Group */ - UC_JOINING_GROUP_AIN, /* Ain */ - UC_JOINING_GROUP_ALAPH, /* Alaph */ - UC_JOINING_GROUP_ALEF, /* Alef */ - UC_JOINING_GROUP_BEH, /* Beh */ - UC_JOINING_GROUP_BETH, /* Beth */ - UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE, /* Burushaski_Yeh_Barree */ - UC_JOINING_GROUP_DAL, /* Dal */ - UC_JOINING_GROUP_DALATH_RISH, /* Dalath_Rish */ - UC_JOINING_GROUP_E, /* E */ - UC_JOINING_GROUP_FARSI_YEH, /* Farsi_Yeh */ - UC_JOINING_GROUP_FE, /* Fe */ - UC_JOINING_GROUP_FEH, /* Feh */ - UC_JOINING_GROUP_FINAL_SEMKATH, /* Final_Semkath */ - UC_JOINING_GROUP_GAF, /* Gaf */ - UC_JOINING_GROUP_GAMAL, /* Gamal */ - UC_JOINING_GROUP_HAH, /* Hah */ - UC_JOINING_GROUP_HE, /* He */ - UC_JOINING_GROUP_HEH, /* Heh */ - UC_JOINING_GROUP_HEH_GOAL, /* Heh_Goal */ - UC_JOINING_GROUP_HETH, /* Heth */ - UC_JOINING_GROUP_KAF, /* Kaf */ - UC_JOINING_GROUP_KAPH, /* Kaph */ - UC_JOINING_GROUP_KHAPH, /* Khaph */ - UC_JOINING_GROUP_KNOTTED_HEH, /* Knotted_Heh */ - UC_JOINING_GROUP_LAM, /* Lam */ - UC_JOINING_GROUP_LAMADH, /* Lamadh */ - UC_JOINING_GROUP_MEEM, /* Meem */ - UC_JOINING_GROUP_MIM, /* Mim */ - UC_JOINING_GROUP_NOON, /* Noon */ - UC_JOINING_GROUP_NUN, /* Nun */ - UC_JOINING_GROUP_NYA, /* Nya */ - UC_JOINING_GROUP_PE, /* Pe */ - UC_JOINING_GROUP_QAF, /* Qaf */ - UC_JOINING_GROUP_QAPH, /* Qaph */ - UC_JOINING_GROUP_REH, /* Reh */ - UC_JOINING_GROUP_REVERSED_PE, /* Reversed_Pe */ - UC_JOINING_GROUP_SAD, /* Sad */ - UC_JOINING_GROUP_SADHE, /* Sadhe */ - UC_JOINING_GROUP_SEEN, /* Seen */ - UC_JOINING_GROUP_SEMKATH, /* Semkath */ - UC_JOINING_GROUP_SHIN, /* Shin */ - UC_JOINING_GROUP_SWASH_KAF, /* Swash_Kaf */ - UC_JOINING_GROUP_SYRIAC_WAW, /* Syriac_Waw */ - UC_JOINING_GROUP_TAH, /* Tah */ - UC_JOINING_GROUP_TAW, /* Taw */ - UC_JOINING_GROUP_TEH_MARBUTA, /* Teh_Marbuta */ - UC_JOINING_GROUP_TEH_MARBUTA_GOAL, /* Teh_Marbuta_Goal */ - UC_JOINING_GROUP_TETH, /* Teth */ - UC_JOINING_GROUP_WAW, /* Waw */ - UC_JOINING_GROUP_YEH, /* Yeh */ - UC_JOINING_GROUP_YEH_BARREE, /* Yeh_Barree */ - UC_JOINING_GROUP_YEH_WITH_TAIL, /* Yeh_With_Tail */ - UC_JOINING_GROUP_YUDH, /* Yudh */ - UC_JOINING_GROUP_YUDH_HE, /* Yudh_He */ - UC_JOINING_GROUP_ZAIN, /* Zain */ - UC_JOINING_GROUP_ZHAIN, /* Zhain */ - UC_JOINING_GROUP_ROHINGYA_YEH, /* Rohingya_Yeh */ - UC_JOINING_GROUP_STRAIGHT_WAW, /* Straight_Waw */ - UC_JOINING_GROUP_MANICHAEAN_ALEPH, /* Manichaean_Aleph */ - UC_JOINING_GROUP_MANICHAEAN_BETH, /* Manichaean_Beth */ - UC_JOINING_GROUP_MANICHAEAN_GIMEL, /* Manichaean_Gimel */ - UC_JOINING_GROUP_MANICHAEAN_DALETH, /* Manichaean_Daleth */ - UC_JOINING_GROUP_MANICHAEAN_WAW, /* Manichaean_Waw */ - UC_JOINING_GROUP_MANICHAEAN_ZAYIN, /* Manichaean_Zayin */ - UC_JOINING_GROUP_MANICHAEAN_HETH, /* Manichaean_Heth */ - UC_JOINING_GROUP_MANICHAEAN_TETH, /* Manichaean_Teth */ - UC_JOINING_GROUP_MANICHAEAN_YODH, /* Manichaean_Yodh */ - UC_JOINING_GROUP_MANICHAEAN_KAPH, /* Manichaean_Kaph */ - UC_JOINING_GROUP_MANICHAEAN_LAMEDH, /* Manichaean_Lamedh */ - UC_JOINING_GROUP_MANICHAEAN_DHAMEDH, /* Manichaean_Dhamedh */ - UC_JOINING_GROUP_MANICHAEAN_THAMEDH, /* Manichaean_Thamedh */ - UC_JOINING_GROUP_MANICHAEAN_MEM, /* Manichaean_Mem */ - UC_JOINING_GROUP_MANICHAEAN_NUN, /* Manichaean_Nun */ - UC_JOINING_GROUP_MANICHAEAN_SAMEKH, /* Manichaean_Aleph */ - UC_JOINING_GROUP_MANICHAEAN_AYIN, /* Manichaean_Ayin */ - UC_JOINING_GROUP_MANICHAEAN_PE, /* Manichaean_Pe */ - UC_JOINING_GROUP_MANICHAEAN_SADHE, /* Manichaean_Sadhe */ - UC_JOINING_GROUP_MANICHAEAN_QOPH, /* Manichaean_Qoph */ - UC_JOINING_GROUP_MANICHAEAN_RESH, /* Manichaean_Resh */ - UC_JOINING_GROUP_MANICHAEAN_TAW, /* Manichaean_Taw */ - UC_JOINING_GROUP_MANICHAEAN_ONE, /* Manichaean_One */ - UC_JOINING_GROUP_MANICHAEAN_FIVE, /* Manichaean_Five */ - UC_JOINING_GROUP_MANICHAEAN_TEN, /* Manichaean_Ten */ - UC_JOINING_GROUP_MANICHAEAN_TWENTY, /* Manichaean_Twenty */ - UC_JOINING_GROUP_MANICHAEAN_HUNDRED /* Manichaean_Hundred */ -}; - -/* Return the name of a joining group. */ -extern const char * - uc_joining_group_name (int joining_group) - _UC_ATTRIBUTE_CONST; - -/* Return the joining group given by name, e.g. "Teh_Marbuta". */ -extern int - uc_joining_group_byname (const char *joining_group_name) - _UC_ATTRIBUTE_PURE; - -/* Return the joining group of a Unicode character. */ -extern int - uc_joining_group (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* ========================================================================= */ - -/* Common API for properties. */ - -/* Data type denoting a property. This is not just a number, but rather a - pointer to the test functions, so that programs that use only few of the - properties don't have a link-time dependency towards all the tables. */ -typedef struct -{ - bool (*test_fn) (ucs4_t uc); -} -uc_property_t; - -/* Predefined properties. */ -/* General. */ -extern const uc_property_t UC_PROPERTY_WHITE_SPACE; -extern const uc_property_t UC_PROPERTY_ALPHABETIC; -extern const uc_property_t UC_PROPERTY_OTHER_ALPHABETIC; -extern const uc_property_t UC_PROPERTY_NOT_A_CHARACTER; -extern const uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT; -extern const uc_property_t UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT; -extern const uc_property_t UC_PROPERTY_DEPRECATED; -extern const uc_property_t UC_PROPERTY_LOGICAL_ORDER_EXCEPTION; -extern const uc_property_t UC_PROPERTY_VARIATION_SELECTOR; -extern const uc_property_t UC_PROPERTY_PRIVATE_USE; -extern const uc_property_t UC_PROPERTY_UNASSIGNED_CODE_VALUE; -/* Case. */ -extern const uc_property_t UC_PROPERTY_UPPERCASE; -extern const uc_property_t UC_PROPERTY_OTHER_UPPERCASE; -extern const uc_property_t UC_PROPERTY_LOWERCASE; -extern const uc_property_t UC_PROPERTY_OTHER_LOWERCASE; -extern const uc_property_t UC_PROPERTY_TITLECASE; -extern const uc_property_t UC_PROPERTY_CASED; -extern const uc_property_t UC_PROPERTY_CASE_IGNORABLE; -extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_LOWERCASED; -extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_UPPERCASED; -extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_TITLECASED; -extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEFOLDED; -extern const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEMAPPED; -extern const uc_property_t UC_PROPERTY_SOFT_DOTTED; -/* Identifiers. */ -extern const uc_property_t UC_PROPERTY_ID_START; -extern const uc_property_t UC_PROPERTY_OTHER_ID_START; -extern const uc_property_t UC_PROPERTY_ID_CONTINUE; -extern const uc_property_t UC_PROPERTY_OTHER_ID_CONTINUE; -extern const uc_property_t UC_PROPERTY_XID_START; -extern const uc_property_t UC_PROPERTY_XID_CONTINUE; -extern const uc_property_t UC_PROPERTY_PATTERN_WHITE_SPACE; -extern const uc_property_t UC_PROPERTY_PATTERN_SYNTAX; -/* Shaping and rendering. */ -extern const uc_property_t UC_PROPERTY_JOIN_CONTROL; -extern const uc_property_t UC_PROPERTY_GRAPHEME_BASE; -extern const uc_property_t UC_PROPERTY_GRAPHEME_EXTEND; -extern const uc_property_t UC_PROPERTY_OTHER_GRAPHEME_EXTEND; -extern const uc_property_t UC_PROPERTY_GRAPHEME_LINK; -/* Bidi. */ -extern const uc_property_t UC_PROPERTY_BIDI_CONTROL; -extern const uc_property_t UC_PROPERTY_BIDI_LEFT_TO_RIGHT; -extern const uc_property_t UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT; -extern const uc_property_t UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT; -extern const uc_property_t UC_PROPERTY_BIDI_EUROPEAN_DIGIT; -extern const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR; -extern const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR; -extern const uc_property_t UC_PROPERTY_BIDI_ARABIC_DIGIT; -extern const uc_property_t UC_PROPERTY_BIDI_COMMON_SEPARATOR; -extern const uc_property_t UC_PROPERTY_BIDI_BLOCK_SEPARATOR; -extern const uc_property_t UC_PROPERTY_BIDI_SEGMENT_SEPARATOR; -extern const uc_property_t UC_PROPERTY_BIDI_WHITESPACE; -extern const uc_property_t UC_PROPERTY_BIDI_NON_SPACING_MARK; -extern const uc_property_t UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL; -extern const uc_property_t UC_PROPERTY_BIDI_PDF; -extern const uc_property_t UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE; -extern const uc_property_t UC_PROPERTY_BIDI_OTHER_NEUTRAL; -/* Numeric. */ -extern const uc_property_t UC_PROPERTY_HEX_DIGIT; -extern const uc_property_t UC_PROPERTY_ASCII_HEX_DIGIT; -/* CJK. */ -extern const uc_property_t UC_PROPERTY_IDEOGRAPHIC; -extern const uc_property_t UC_PROPERTY_UNIFIED_IDEOGRAPH; -extern const uc_property_t UC_PROPERTY_RADICAL; -extern const uc_property_t UC_PROPERTY_IDS_BINARY_OPERATOR; -extern const uc_property_t UC_PROPERTY_IDS_TRINARY_OPERATOR; -/* Misc. */ -extern const uc_property_t UC_PROPERTY_ZERO_WIDTH; -extern const uc_property_t UC_PROPERTY_SPACE; -extern const uc_property_t UC_PROPERTY_NON_BREAK; -extern const uc_property_t UC_PROPERTY_ISO_CONTROL; -extern const uc_property_t UC_PROPERTY_FORMAT_CONTROL; -extern const uc_property_t UC_PROPERTY_DASH; -extern const uc_property_t UC_PROPERTY_HYPHEN; -extern const uc_property_t UC_PROPERTY_PUNCTUATION; -extern const uc_property_t UC_PROPERTY_LINE_SEPARATOR; -extern const uc_property_t UC_PROPERTY_PARAGRAPH_SEPARATOR; -extern const uc_property_t UC_PROPERTY_QUOTATION_MARK; -extern const uc_property_t UC_PROPERTY_SENTENCE_TERMINAL; -extern const uc_property_t UC_PROPERTY_TERMINAL_PUNCTUATION; -extern const uc_property_t UC_PROPERTY_CURRENCY_SYMBOL; -extern const uc_property_t UC_PROPERTY_MATH; -extern const uc_property_t UC_PROPERTY_OTHER_MATH; -extern const uc_property_t UC_PROPERTY_PAIRED_PUNCTUATION; -extern const uc_property_t UC_PROPERTY_LEFT_OF_PAIR; -extern const uc_property_t UC_PROPERTY_COMBINING; -extern const uc_property_t UC_PROPERTY_COMPOSITE; -extern const uc_property_t UC_PROPERTY_DECIMAL_DIGIT; -extern const uc_property_t UC_PROPERTY_NUMERIC; -extern const uc_property_t UC_PROPERTY_DIACRITIC; -extern const uc_property_t UC_PROPERTY_EXTENDER; -extern const uc_property_t UC_PROPERTY_IGNORABLE_CONTROL; - -/* Return the property given by name, e.g. "White space". */ -extern uc_property_t - uc_property_byname (const char *property_name); - -/* Test whether a property is valid. */ -#define uc_property_is_valid(property) ((property).test_fn != NULL) - -/* Test whether a Unicode character has a given property. */ -extern bool - uc_is_property (ucs4_t uc, uc_property_t property); -extern bool uc_is_property_white_space (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_alphabetic (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_other_alphabetic (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_not_a_character (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_default_ignorable_code_point (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_other_default_ignorable_code_point (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_deprecated (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_logical_order_exception (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_variation_selector (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_private_use (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_unassigned_code_value (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_uppercase (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_other_uppercase (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_lowercase (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_other_lowercase (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_titlecase (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_cased (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_case_ignorable (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_changes_when_lowercased (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_changes_when_uppercased (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_changes_when_titlecased (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_changes_when_casefolded (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_changes_when_casemapped (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_soft_dotted (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_id_start (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_other_id_start (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_id_continue (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_other_id_continue (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_xid_start (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_xid_continue (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_pattern_white_space (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_pattern_syntax (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_join_control (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_grapheme_base (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_grapheme_extend (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_other_grapheme_extend (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_grapheme_link (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_control (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_left_to_right (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_arabic_right_to_left (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_european_digit (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_eur_num_separator (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_eur_num_terminator (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_arabic_digit (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_common_separator (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_block_separator (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_segment_separator (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_whitespace (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_non_spacing_mark (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_boundary_neutral (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_pdf (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_embedding_or_override (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_bidi_other_neutral (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_hex_digit (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_ascii_hex_digit (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_ideographic (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_unified_ideograph (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_radical (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_ids_binary_operator (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_ids_trinary_operator (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_zero_width (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_space (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_non_break (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_iso_control (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_format_control (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_dash (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_hyphen (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_punctuation (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_line_separator (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_paragraph_separator (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_quotation_mark (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_sentence_terminal (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_terminal_punctuation (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_currency_symbol (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_math (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_other_math (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_paired_punctuation (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_left_of_pair (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_combining (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_composite (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_decimal_digit (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_numeric (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_diacritic (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_extender (ucs4_t uc) - _UC_ATTRIBUTE_CONST; -extern bool uc_is_property_ignorable_control (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* ========================================================================= */ - -/* Subdivision of the Unicode characters into scripts. */ - -typedef struct -{ - unsigned int code : 21; - unsigned int start : 1; - unsigned int end : 1; -} -uc_interval_t; -typedef struct -{ - unsigned int nintervals; - const uc_interval_t *intervals; - const char *name; -} -uc_script_t; - -/* Return the script of a Unicode character. */ -extern const uc_script_t * - uc_script (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Return the script given by name, e.g. "HAN". */ -extern const uc_script_t * - uc_script_byname (const char *script_name) - _UC_ATTRIBUTE_PURE; - -/* Test whether a Unicode character belongs to a given script. */ -extern bool - uc_is_script (ucs4_t uc, const uc_script_t *script) - _UC_ATTRIBUTE_PURE; - -/* Get the list of all scripts. */ -extern void - uc_all_scripts (const uc_script_t **scripts, size_t *count); - -/* ========================================================================= */ - -/* Subdivision of the Unicode character range into blocks. */ - -typedef struct -{ - ucs4_t start; - ucs4_t end; - const char *name; -} -uc_block_t; - -/* Return the block a character belongs to. */ -extern const uc_block_t * - uc_block (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test whether a Unicode character belongs to a given block. */ -extern bool - uc_is_block (ucs4_t uc, const uc_block_t *block) - _UC_ATTRIBUTE_PURE; - -/* Get the list of all blocks. */ -extern void - uc_all_blocks (const uc_block_t **blocks, size_t *count); - -/* ========================================================================= */ - -/* Properties taken from language standards. */ - -/* Test whether a Unicode character is considered whitespace in ISO C 99. */ -extern bool - uc_is_c_whitespace (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test whether a Unicode character is considered whitespace in Java. */ -extern bool - uc_is_java_whitespace (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -enum -{ - UC_IDENTIFIER_START, /* valid as first or subsequent character */ - UC_IDENTIFIER_VALID, /* valid as subsequent character only */ - UC_IDENTIFIER_INVALID, /* not valid */ - UC_IDENTIFIER_IGNORABLE /* ignorable (Java only) */ -}; - -/* Return the categorization of a Unicode character w.r.t. the ISO C 99 - identifier syntax. */ -extern int - uc_c_ident_category (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Return the categorization of a Unicode character w.r.t. the Java - identifier syntax. */ -extern int - uc_java_ident_category (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* ========================================================================= */ - -/* Like ISO C and . These functions are deprecated, - because this set of functions was designed with ASCII in mind and cannot - reflect the more diverse reality of the Unicode character set. But they - can be a quick-and-dirty porting aid when migrating from wchar_t APIs - to Unicode strings. */ - -/* Test for any character for which 'uc_is_alpha' or 'uc_is_digit' is true. */ -extern bool - uc_is_alnum (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test for any character for which 'uc_is_upper' or 'uc_is_lower' is true, - or any character that is one of a locale-specific set of characters for - which none of 'uc_is_cntrl', 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' - is true. */ -extern bool - uc_is_alpha (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test for any control character. */ -extern bool - uc_is_cntrl (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test for any character that corresponds to a decimal-digit character. */ -extern bool - uc_is_digit (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test for any character for which 'uc_is_print' is true and 'uc_is_space' - is false. */ -extern bool - uc_is_graph (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test for any character that corresponds to a lowercase letter or is one - of a locale-specific set of characters for which none of 'uc_is_cntrl', - 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ -extern bool - uc_is_lower (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test for any printing character. */ -extern bool - uc_is_print (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test for any printing character that is one of a locale-specific set of - characters for which neither 'uc_is_space' nor 'uc_is_alnum' is true. */ -extern bool - uc_is_punct (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test for any character that corresponds to a locale-specific set of - characters for which none of 'uc_is_alnum', 'uc_is_graph', or 'uc_is_punct' - is true. */ -extern bool - uc_is_space (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test for any character that corresponds to an uppercase letter or is one - of a locale-specific set of character for which none of 'uc_is_cntrl', - 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ -extern bool - uc_is_upper (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* Test for any character that corresponds to a hexadecimal-digit - character. */ -extern bool - uc_is_xdigit (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* GNU extension. */ -/* Test for any character that corresponds to a standard blank character or - a locale-specific set of characters for which 'uc_is_alnum' is false. */ -extern bool - uc_is_blank (ucs4_t uc) - _UC_ATTRIBUTE_CONST; - -/* ========================================================================= */ - -#ifdef __cplusplus -} -#endif - -#endif /* _UNICTYPE_H */ diff --git a/lib/unistring/unictype/bitmap.h b/lib/unistring/unictype/bitmap.h deleted file mode 100644 index 60751ec6c4..0000000000 --- a/lib/unistring/unictype/bitmap.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Three-level bitmap lookup. - Copyright (C) 2000-2002, 2005-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2000-2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -static inline int bitmap_lookup (const void *table, ucs4_t uc); - -/* These values are currently hardcoded into gen-ctype.c. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 - -static inline int -bitmap_lookup (const void *table, ucs4_t uc) -{ - unsigned int index1 = uc >> header_0; - if (index1 < ((const int *) table)[0]) - { - int lookup1 = ((const int *) table)[1 + index1]; - if (lookup1 >= 0) - { - unsigned int index2 = (uc >> header_2) & header_3; - int lookup2 = ((const short *) table)[lookup1 + index2]; - if (lookup2 >= 0) - { - unsigned int index3 = (uc >> 5) & header_4; - unsigned int lookup3 = ((const int *) table)[lookup2 + index3]; - - return (lookup3 >> (uc & 0x1f)) & 1; - } - } - } - return 0; -} diff --git a/lib/unistring/unictype/categ_C.c b/lib/unistring/unictype/categ_C.c deleted file mode 100644 index b6bf5a4ee5..0000000000 --- a/lib/unistring/unictype/categ_C.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_C table. */ -#include "categ_C.h" - -const uc_general_category_t UC_CATEGORY_C = - { UC_CATEGORY_MASK_C, 0, { &u_categ_C } }; diff --git a/lib/unistring/unictype/categ_C.h b/lib/unistring/unictype/categ_C.h deleted file mode 100644 index 6f33609097..0000000000 --- a/lib/unistring/unictype/categ_C.h +++ /dev/null @@ -1,982 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[17]; - short level2[5 << 7]; - /*unsigned*/ int level3[75 << 4]; - } -u_categ_C = -{ - { 17 }, - { - 18 * sizeof (int) / sizeof (short) + 0, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 256, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 512, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384 - }, - { - 18 + 640 * sizeof (short) / sizeof (int) + 0, - 18 + 640 * sizeof (short) / sizeof (int) + 16, - 18 + 640 * sizeof (short) / sizeof (int) + 32, - 18 + 640 * sizeof (short) / sizeof (int) + 48, - 18 + 640 * sizeof (short) / sizeof (int) + 64, - 18 + 640 * sizeof (short) / sizeof (int) + 80, - 18 + 640 * sizeof (short) / sizeof (int) + 96, - 18 + 640 * sizeof (short) / sizeof (int) + 112, - 18 + 640 * sizeof (short) / sizeof (int) + 128, - 18 + 640 * sizeof (short) / sizeof (int) + 144, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 160, - 18 + 640 * sizeof (short) / sizeof (int) + 176, - 18 + 640 * sizeof (short) / sizeof (int) + 192, - 18 + 640 * sizeof (short) / sizeof (int) + 208, - 18 + 640 * sizeof (short) / sizeof (int) + 224, - 18 + 640 * sizeof (short) / sizeof (int) + 240, - 18 + 640 * sizeof (short) / sizeof (int) + 256, - 18 + 640 * sizeof (short) / sizeof (int) + 272, - -1, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 288, - 18 + 640 * sizeof (short) / sizeof (int) + 304, - 18 + 640 * sizeof (short) / sizeof (int) + 320, - 18 + 640 * sizeof (short) / sizeof (int) + 336, - 18 + 640 * sizeof (short) / sizeof (int) + 352, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 368, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 384, - -1, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 400, - 18 + 640 * sizeof (short) / sizeof (int) + 416, - 18 + 640 * sizeof (short) / sizeof (int) + 432, - 18 + 640 * sizeof (short) / sizeof (int) + 448, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 464, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 496, - 18 + 640 * sizeof (short) / sizeof (int) + 512, - 18 + 640 * sizeof (short) / sizeof (int) + 528, - 18 + 640 * sizeof (short) / sizeof (int) + 544, - 18 + 640 * sizeof (short) / sizeof (int) + 560, - 18 + 640 * sizeof (short) / sizeof (int) + 576, - 18 + 640 * sizeof (short) / sizeof (int) + 592, - 18 + 640 * sizeof (short) / sizeof (int) + 608, - 18 + 640 * sizeof (short) / sizeof (int) + 624, - 18 + 640 * sizeof (short) / sizeof (int) + 640, - 18 + 640 * sizeof (short) / sizeof (int) + 656, - 18 + 640 * sizeof (short) / sizeof (int) + 672, - 18 + 640 * sizeof (short) / sizeof (int) + 688, - 18 + 640 * sizeof (short) / sizeof (int) + 704, - 18 + 640 * sizeof (short) / sizeof (int) + 720, - 18 + 640 * sizeof (short) / sizeof (int) + 736, - 18 + 640 * sizeof (short) / sizeof (int) + 752, - 18 + 640 * sizeof (short) / sizeof (int) + 768, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 784, - 18 + 640 * sizeof (short) / sizeof (int) + 800, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - -1, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 816, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 832, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 848, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 864, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 880, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 896, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 912, - 18 + 640 * sizeof (short) / sizeof (int) + 928, - 18 + 640 * sizeof (short) / sizeof (int) + 944, - 18 + 640 * sizeof (short) / sizeof (int) + 960, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 976, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 992, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 1008, - 18 + 640 * sizeof (short) / sizeof (int) + 1024, - 18 + 640 * sizeof (short) / sizeof (int) + 1040, - 18 + 640 * sizeof (short) / sizeof (int) + 1056, - 18 + 640 * sizeof (short) / sizeof (int) + 1072, - 18 + 640 * sizeof (short) / sizeof (int) + 1088, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 1104, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 1120, - 18 + 640 * sizeof (short) / sizeof (int) + 1136, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 1152, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - -1, - 18 + 640 * sizeof (short) / sizeof (int) + 1168, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 1184, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480, - 18 + 640 * sizeof (short) / sizeof (int) + 480 - }, - { - 0xFFFFFFFF, 0x00000000, 0x00000000, 0x80000000, - 0xFFFFFFFF, 0x00002000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03000000, - 0x0000280F, 0x00000004, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00010000, 0x01800000, 0x00000001, - 0x00011900, 0x00000000, 0x0000FF00, 0xFFE0F800, - 0x3000003F, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x20000000, 0x00000000, - 0x0000C000, 0x00000000, 0x00001800, 0x00000000, - 0x00000000, 0xFFFC0000, 0x00000000, 0xF8000000, - 0x00000000, 0x8000C000, 0xB0000000, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFE00000, 0xFFFFFFFF, 0x00000007, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00066010, 0x0C3A0200, 0x4F7F8660, 0xF0000030, - 0x00067811, 0x2C920200, 0xA1FDC678, 0xFFC0003F, - 0x00044011, 0x0C120200, 0xFFFEC440, 0xFDFC0030, - 0x00066011, 0x0C120200, 0x4F3FC660, 0xFF000030, - 0x29C23813, 0x3C0038E7, 0xFF7EC238, 0xF800003F, - 0x00022010, 0x1C000200, 0xF89FC220, 0x00FF0030, - 0x00022011, 0x0C100200, 0xBF9FC220, 0xFFF90030, - 0x00022011, 0x18000000, 0x7F7F8220, 0x01C00030, - 0x03800013, 0xD0040000, 0x00A07B80, 0xFFE3003F, - 0x00000001, 0x78000000, 0xF0000000, 0xFFFFFFFF, - 0x010FDA69, 0xC4001351, 0x0C00C0A0, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000100, 0x0001E000, - 0x01000000, 0x20000000, 0xF8002000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000DF40, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xC280C200, 0x00000000, - 0x0000C200, 0x80C20000, 0x008000C2, 0x00000000, - 0x00C20000, 0x00000000, 0x18000000, 0xE0000000, - 0xFC000000, 0x00000000, 0x00000000, 0xC0C00000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xE0000000, 0x00000000, 0x00000000, 0xFE000000, - 0xFFE02000, 0xFF800000, 0xFFF00000, 0xFFF22000, - 0x00000000, 0x00000000, 0xC0000000, 0xFC00FC00, - 0xFC00C000, 0x00000000, 0x00000000, 0xFF000000, - 0x00000000, 0x0000F800, 0x00000000, 0xFFC00000, - 0x80000000, 0xF000F000, 0x0000000E, 0xFFE0C000, - 0x00000000, 0x0000F000, 0x3800FC00, 0x00000000, - 0x30000000, 0x00000000, 0x80000000, 0x60000000, - 0xFC00FC00, 0x8000C000, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x0000F000, 0xE0000000, - 0x00000000, 0x00000000, 0x00000000, 0x0FF00000, - 0x00000000, 0x07000000, 0x00001C00, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FF00, 0xFC800000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0FC00000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xC0C00000, 0x00000000, 0x5500C0C0, 0xC0000000, - 0x00000000, 0x00200000, 0x10300020, 0x80230000, - 0x0000F800, 0x00007C00, 0x00000000, 0x000CFFFF, - 0xE0008000, 0x80000000, 0x0000FFFF, 0xFFFE0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000F000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xF8000000, - 0x00000000, 0xFFFFFF80, 0xFFFFF800, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00300000, - 0x00C00000, 0x1C000000, 0xFFFC0200, 0xFFFF0FFF, - 0x00000000, 0x00008000, 0x80000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x01F00000, - 0x00000000, 0x0000DF40, 0x00000000, 0x7FFE7F00, - 0xFF800000, 0x80808080, 0x80808080, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFF8, 0xFFFFFFFF, - 0x04000000, 0x00000000, 0x00000000, 0xFFF00000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFC00000, 0xF000FFFF, - 0x00000000, 0x00000000, 0x00000001, 0x00000000, - 0x01800000, 0x00000000, 0x00000000, 0x00000000, - 0x0000001F, 0x0001C000, 0x00000000, 0x00000000, - 0x00008000, 0xF8000000, 0x00000000, 0x0000FFF0, - 0x80000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFC00000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFC00000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000E000, 0x00000000, 0x0000FF80, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFF000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFF000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFF00C000, 0xFFFFFFFF, 0x007FFFFF, - 0x00000000, 0xFC00F000, 0x00000000, 0xFF000000, - 0x00000000, 0x00000000, 0xFC003FE0, 0xC0000000, - 0x00000000, 0x00000000, 0x7FF00000, 0xE0000000, - 0x00000000, 0x00000000, 0x3C004000, 0x80000000, - 0x00000000, 0xFF800000, 0x0C00C000, 0x00000000, - 0x00000000, 0x00000000, 0x07FFFFF8, 0xFF800000, - 0xFF818181, 0x00008080, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0xFC00C000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x0000FFF0, 0x00000780, 0xF0000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0000C000, - 0x00000000, 0x00000000, 0xFC000000, 0xFFFFFFFF, - 0x1F07FF80, 0xA0800000, 0x00000024, 0x00000000, - 0x00000000, 0x00000000, 0x0007FFFC, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000FFFF, 0x00000000, - 0x00030000, 0x00000000, 0xFFFFFF00, 0xC000FFFF, - 0xFC000000, 0x00000000, 0x00080000, 0x0020F080, - 0x00000000, 0x00000000, 0x00000000, 0xE0000000, - 0x00000001, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x80000000, 0xE3030303, 0xCFFF8080, - 0x00001000, 0x48000080, 0xC000C000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0xF8000000, - 0x00000078, 0x00700000, 0x00000000, 0x00000000, - 0xF000E000, 0xFFFFFFFE, 0x0000FFFF, 0xC0000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xE0000000, 0x00000000, 0xFFFE0000, 0xF0000000, - 0x00000000, 0x0000FFF0, 0x0000F800, 0xF8000000, - 0x40000000, 0x00000000, 0xFFC000F0, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xC0000000, 0xFFFFFC00, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x0000FF00, 0x00000000, 0xFFFF7FF0, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFF800000, 0xFFC00000, 0xFFFFFF00, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x000002C0, 0x6E400000, 0x00400000, 0x00000000, - 0x80000000, 0xFFFF007F, 0xFFFFFFFF, 0x07C80000, - 0x70000000, 0x7C000000, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x0F000000, 0x00030000, 0x00000000, - 0x01100F90, 0x78F00000, 0xFE00FF00, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFF800780, - 0x00000000, 0x01C00000, 0x00C00000, 0x00F80000, - 0xE1FC0000, 0xFFFF01FF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0xFFFFFE00, 0xFFFFFFFF, - 0x00000000, 0xFFF80000, 0x00000000, 0x03F80000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x0003C000, 0x7FFF0000, - 0x00000000, 0x20000000, 0x0000FFFC, 0xFC00FE00, - 0x00000000, 0x00200000, 0x0000FFF0, 0xFF800000, - 0x00000000, 0x00000000, 0x0000C000, 0xFFE00001, - 0x00040000, 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, - 0x40004280, 0x0000FC00, 0x00000000, 0xFC00F800, - 0x00066010, 0x0C120200, 0x1F7EC660, 0xFFE0E030, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0xFC00FF00, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00C00000, 0xC0000000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0xFC00FFE0, 0xFFFFFFFF, - 0x00000000, 0xFF000000, 0xFFFFFC00, 0xFFFFFFFF, - 0x1C000000, 0x0000F000, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x00000000, 0x00000000, 0x7FF80000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFE000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFC000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0xFFE08000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFF0, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0xFFFF8000, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0xFFFFFF80, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0xFE000000, 0x80000000, 0xFFFF3C00, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFC0C000, - 0x00000000, 0x00000000, 0x0400FFC0, 0x1F000004, - 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x0000FFE0, 0x80000000, - 0x00007FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0xE000F800, - 0x0C00FE00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, - 0x00000000, 0x00000180, 0x00000000, 0x07F80000, - 0x00000000, 0x00000000, 0x00000000, 0xFFFFFE00, - 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0xFF800000, 0xFFFC0000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00200000, 0x00000000, - 0x20000000, 0x1400219B, 0x00000010, 0x00000000, - 0x20201840, 0x84000000, 0x000203A0, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x000000C0, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00003000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x07FFF000, 0xFFFF0001, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFF800060, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000010, 0xF5080169, 0x5569157B, 0xA1080869, - 0xF0000400, 0xF0000411, 0xFFFFFFFF, 0xFFFCFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x0000F000, 0x00000000, 0x00000000, - 0xFFF00000, 0x00018000, 0x00010001, 0xFFC00000, - 0x0000E000, 0x00008000, 0x00000000, 0x0000F000, - 0xF8000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, - 0x0000FFF8, 0xF8000000, 0xFFFCFE00, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x04000000, - 0x00000000, 0x00000010, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFE0000, 0xFFF0E000, - 0x00000000, 0x00000000, 0x00000000, 0xFFF00000, - 0x00000000, 0x00000000, 0xFFE00000, 0xFFFFFFFF, - 0x0000F000, 0x00000000, 0xFC00FF00, 0x00000000, - 0x0000FF00, 0xFFFFC000, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFE00FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFE0, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFF800000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFE00000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xC0000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000 - } -}; diff --git a/lib/unistring/unictype/categ_Cc.c b/lib/unistring/unictype/categ_Cc.c deleted file mode 100644 index 5aedceb509..0000000000 --- a/lib/unistring/unictype/categ_Cc.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Cc table. */ -#include "categ_Cc.h" - -const uc_general_category_t UC_CATEGORY_Cc = - { UC_CATEGORY_MASK_Cc, 0, { &u_categ_Cc } }; diff --git a/lib/unistring/unictype/categ_Cc.h b/lib/unistring/unictype/categ_Cc.h deleted file mode 100644 index eb118aa095..0000000000 --- a/lib/unistring/unictype/categ_Cc.h +++ /dev/null @@ -1,156 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[1 << 4]; - } -u_categ_Cc = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0xFFFFFFFF, 0x00000000, 0x00000000, 0x80000000, - 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Cf.c b/lib/unistring/unictype/categ_Cf.c deleted file mode 100644 index 1e2673847b..0000000000 --- a/lib/unistring/unictype/categ_Cf.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Cf table. */ -#include "categ_Cf.h" - -const uc_general_category_t UC_CATEGORY_Cf = - { UC_CATEGORY_MASK_Cf, 0, { &u_categ_Cf } }; diff --git a/lib/unistring/unictype/categ_Cf.h b/lib/unistring/unictype/categ_Cf.h deleted file mode 100644 index b59bd65243..0000000000 --- a/lib/unistring/unictype/categ_Cf.h +++ /dev/null @@ -1,460 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[15]; - short level2[3 << 7]; - /*unsigned*/ int level3[9 << 4]; - } -u_categ_Cf = -{ - { 15 }, - { - 16 * sizeof (int) / sizeof (short) + 0, - 16 * sizeof (int) / sizeof (short) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 * sizeof (int) / sizeof (short) + 256 - }, - { - 16 + 384 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 48, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 64, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 80, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 96, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 112, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00002000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x1000003F, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x20000000, 0x00000000, - 0x00008000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00004000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000F800, 0x00007C00, 0x00000000, 0x0000FFDF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0E000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x20000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x0000000F, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x07F80000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Cn.c b/lib/unistring/unictype/categ_Cn.c deleted file mode 100644 index 0af72b835d..0000000000 --- a/lib/unistring/unictype/categ_Cn.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Cn table. */ -#include "categ_Cn.h" - -const uc_general_category_t UC_CATEGORY_Cn = - { UC_CATEGORY_MASK_Cn, 0, { &u_categ_Cn } }; diff --git a/lib/unistring/unictype/categ_Cn.h b/lib/unistring/unictype/categ_Cn.h deleted file mode 100644 index 59f096c4bb..0000000000 --- a/lib/unistring/unictype/categ_Cn.h +++ /dev/null @@ -1,1106 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[17]; - short level2[6 << 7]; - /*unsigned*/ int level3[74 << 4]; - } -u_categ_Cn = -{ - { 17 }, - { - 18 * sizeof (int) / sizeof (short) + 0, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 256, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 384, - 18 * sizeof (int) / sizeof (short) + 512, - 18 * sizeof (int) / sizeof (short) + 640, - 18 * sizeof (int) / sizeof (short) + 640 - }, - { - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 0, - 18 + 768 * sizeof (short) / sizeof (int) + 16, - 18 + 768 * sizeof (short) / sizeof (int) + 32, - 18 + 768 * sizeof (short) / sizeof (int) + 48, - 18 + 768 * sizeof (short) / sizeof (int) + 64, - 18 + 768 * sizeof (short) / sizeof (int) + 80, - 18 + 768 * sizeof (short) / sizeof (int) + 96, - 18 + 768 * sizeof (short) / sizeof (int) + 112, - 18 + 768 * sizeof (short) / sizeof (int) + 128, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 144, - 18 + 768 * sizeof (short) / sizeof (int) + 160, - 18 + 768 * sizeof (short) / sizeof (int) + 176, - 18 + 768 * sizeof (short) / sizeof (int) + 192, - 18 + 768 * sizeof (short) / sizeof (int) + 208, - 18 + 768 * sizeof (short) / sizeof (int) + 224, - 18 + 768 * sizeof (short) / sizeof (int) + 240, - 18 + 768 * sizeof (short) / sizeof (int) + 256, - -1, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 272, - 18 + 768 * sizeof (short) / sizeof (int) + 288, - 18 + 768 * sizeof (short) / sizeof (int) + 304, - 18 + 768 * sizeof (short) / sizeof (int) + 320, - 18 + 768 * sizeof (short) / sizeof (int) + 336, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 352, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 368, - -1, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 384, - 18 + 768 * sizeof (short) / sizeof (int) + 400, - 18 + 768 * sizeof (short) / sizeof (int) + 416, - 18 + 768 * sizeof (short) / sizeof (int) + 432, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 448, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 464, - 18 + 768 * sizeof (short) / sizeof (int) + 480, - 18 + 768 * sizeof (short) / sizeof (int) + 496, - 18 + 768 * sizeof (short) / sizeof (int) + 512, - 18 + 768 * sizeof (short) / sizeof (int) + 528, - 18 + 768 * sizeof (short) / sizeof (int) + 544, - 18 + 768 * sizeof (short) / sizeof (int) + 560, - 18 + 768 * sizeof (short) / sizeof (int) + 576, - 18 + 768 * sizeof (short) / sizeof (int) + 592, - 18 + 768 * sizeof (short) / sizeof (int) + 608, - 18 + 768 * sizeof (short) / sizeof (int) + 624, - 18 + 768 * sizeof (short) / sizeof (int) + 640, - 18 + 768 * sizeof (short) / sizeof (int) + 656, - 18 + 768 * sizeof (short) / sizeof (int) + 672, - 18 + 768 * sizeof (short) / sizeof (int) + 688, - 18 + 768 * sizeof (short) / sizeof (int) + 704, - 18 + 768 * sizeof (short) / sizeof (int) + 720, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 752, - 18 + 768 * sizeof (short) / sizeof (int) + 768, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - -1, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 784, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 800, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 816, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 832, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 848, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 864, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 880, - 18 + 768 * sizeof (short) / sizeof (int) + 896, - 18 + 768 * sizeof (short) / sizeof (int) + 912, - 18 + 768 * sizeof (short) / sizeof (int) + 928, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 944, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 960, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 976, - 18 + 768 * sizeof (short) / sizeof (int) + 992, - 18 + 768 * sizeof (short) / sizeof (int) + 1008, - 18 + 768 * sizeof (short) / sizeof (int) + 1024, - 18 + 768 * sizeof (short) / sizeof (int) + 1040, - 18 + 768 * sizeof (short) / sizeof (int) + 1056, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 1072, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 1088, - 18 + 768 * sizeof (short) / sizeof (int) + 1104, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 1120, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 1136, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 1152, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - 18 + 768 * sizeof (short) / sizeof (int) + 736, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 768 * sizeof (short) / sizeof (int) + 1168 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03000000, - 0x0000280F, 0x00000004, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00010000, 0x01800000, 0x00000001, - 0x00011900, 0x00000000, 0x0000FF00, 0xFFE0F800, - 0x20000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00004000, 0x00000000, 0x00001800, 0x00000000, - 0x00000000, 0xFFFC0000, 0x00000000, 0xF8000000, - 0x00000000, 0x8000C000, 0xB0000000, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFE00000, 0xFFFFFFFF, 0x00000007, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00066010, 0x0C3A0200, 0x4F7F8660, 0xF0000030, - 0x00067811, 0x2C920200, 0xA1FDC678, 0xFFC0003F, - 0x00044011, 0x0C120200, 0xFFFEC440, 0xFDFC0030, - 0x00066011, 0x0C120200, 0x4F3FC660, 0xFF000030, - 0x29C23813, 0x3C0038E7, 0xFF7EC238, 0xF800003F, - 0x00022010, 0x1C000200, 0xF89FC220, 0x00FF0030, - 0x00022011, 0x0C100200, 0xBF9FC220, 0xFFF90030, - 0x00022011, 0x18000000, 0x7F7F8220, 0x01C00030, - 0x03800013, 0xD0040000, 0x00A07B80, 0xFFE3003F, - 0x00000001, 0x78000000, 0xF0000000, 0xFFFFFFFF, - 0x010FDA69, 0xC4001351, 0x0C00C0A0, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000100, 0x0001E000, - 0x01000000, 0x20000000, 0xF8002000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000DF40, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xC280C200, 0x00000000, - 0x0000C200, 0x80C20000, 0x008000C2, 0x00000000, - 0x00C20000, 0x00000000, 0x18000000, 0xE0000000, - 0xFC000000, 0x00000000, 0x00000000, 0xC0C00000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xE0000000, 0x00000000, 0x00000000, 0xFE000000, - 0xFFE02000, 0xFF800000, 0xFFF00000, 0xFFF22000, - 0x00000000, 0x00000000, 0xC0000000, 0xFC00FC00, - 0xFC008000, 0x00000000, 0x00000000, 0xFF000000, - 0x00000000, 0x0000F800, 0x00000000, 0xFFC00000, - 0x80000000, 0xF000F000, 0x0000000E, 0xFFE0C000, - 0x00000000, 0x0000F000, 0x3800FC00, 0x00000000, - 0x30000000, 0x00000000, 0x80000000, 0x60000000, - 0xFC00FC00, 0x8000C000, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x0000F000, 0xE0000000, - 0x00000000, 0x00000000, 0x00000000, 0x0FF00000, - 0x00000000, 0x07000000, 0x00001C00, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FF00, 0xFC800000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0FC00000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xC0C00000, 0x00000000, 0x5500C0C0, 0xC0000000, - 0x00000000, 0x00200000, 0x10300020, 0x80230000, - 0x00000000, 0x00000000, 0x00000000, 0x000C0020, - 0xE0008000, 0x80000000, 0x0000FFFF, 0xFFFE0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000F000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xF8000000, - 0x00000000, 0xFFFFFF80, 0xFFFFF800, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00300000, - 0x00C00000, 0x1C000000, 0xFFFC0200, 0xFFFF0FFF, - 0x00000000, 0x00008000, 0x80000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x01F00000, - 0x00000000, 0x0000DF40, 0x00000000, 0x7FFE7F00, - 0xFF800000, 0x80808080, 0x80808080, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFF8, 0xFFFFFFFF, - 0x04000000, 0x00000000, 0x00000000, 0xFFF00000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFC00000, 0xF000FFFF, - 0x00000000, 0x00000000, 0x00000001, 0x00000000, - 0x01800000, 0x00000000, 0x00000000, 0x00000000, - 0x0000001F, 0x0001C000, 0x00000000, 0x00000000, - 0x00008000, 0xF8000000, 0x00000000, 0x0000FFF0, - 0x80000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFC00000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFC00000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000E000, 0x00000000, 0x0000FF80, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFF000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFF000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFF00C000, 0xFFFFFFFF, 0x007FFFFF, - 0x00000000, 0xFC00F000, 0x00000000, 0xFF000000, - 0x00000000, 0x00000000, 0xFC003FE0, 0xC0000000, - 0x00000000, 0x00000000, 0x7FF00000, 0xE0000000, - 0x00000000, 0x00000000, 0x3C004000, 0x80000000, - 0x00000000, 0xFF800000, 0x0C00C000, 0x00000000, - 0x00000000, 0x00000000, 0x07FFFFF8, 0xFF800000, - 0xFF818181, 0x00008080, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0xFC00C000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x0000FFF0, 0x00000780, 0xF0000000, - 0x00000000, 0x00000000, 0x00000000, 0x0000C000, - 0x00000000, 0x00000000, 0xFC000000, 0xFFFFFFFF, - 0x1F07FF80, 0xA0800000, 0x00000024, 0x00000000, - 0x00000000, 0x00000000, 0x0007FFFC, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000FFFF, 0x00000000, - 0x00030000, 0x00000000, 0xFFFFFF00, 0xC000FFFF, - 0xFC000000, 0x00000000, 0x00080000, 0x0020F080, - 0x00000000, 0x00000000, 0x00000000, 0x60000000, - 0x00000001, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x80000000, 0xE3030303, 0xC1FF8080, - 0x00001000, 0x48000080, 0xC000C000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0xF8000000, - 0x00000078, 0x00700000, 0x00000000, 0x00000000, - 0xF000E000, 0xFFFFFFFE, 0x0000FFFF, 0xC0000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xE0000000, 0x00000000, 0xFFFE0000, 0xF0000000, - 0x00000000, 0x0000FFF0, 0x0000F800, 0xF8000000, - 0x40000000, 0x00000000, 0xFFC000F0, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xC0000000, 0xFFFFFC00, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x0000FF00, 0x00000000, 0xFFFF7FF0, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFF800000, 0xFFC00000, 0xFFFFFF00, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x000002C0, 0x6E400000, 0x00400000, 0x00000000, - 0x80000000, 0xFFFF007F, 0xFFFFFFFF, 0x07C80000, - 0x70000000, 0x7C000000, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x0F000000, 0x00030000, 0x00000000, - 0x01100F90, 0x78F00000, 0xFE00FF00, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0x00000000, 0xFF800780, - 0x00000000, 0x01C00000, 0x00C00000, 0x00F80000, - 0xE1FC0000, 0xFFFF01FF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0xFFFFFE00, 0xFFFFFFFF, - 0x00000000, 0xFFF80000, 0x00000000, 0x03F80000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x0003C000, 0x7FFF0000, - 0x00000000, 0x00000000, 0x0000FFFC, 0xFC00FE00, - 0x00000000, 0x00200000, 0x0000FFF0, 0xFF800000, - 0x00000000, 0x00000000, 0x0000C000, 0xFFE00001, - 0x00040000, 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, - 0x40004280, 0x0000FC00, 0x00000000, 0xFC00F800, - 0x00066010, 0x0C120200, 0x1F7EC660, 0xFFE0E030, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0xFC00FF00, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00C00000, 0xC0000000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0xFC00FFE0, 0xFFFFFFFF, - 0x00000000, 0xFF000000, 0xFFFFFC00, 0xFFFFFFFF, - 0x1C000000, 0x0000F000, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x00000000, 0x00000000, 0x7FF80000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFE000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFC000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0xFFE08000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFF0, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0xFFFF8000, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0xFFFFFF80, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0xFE000000, 0x80000000, 0xFFFF3C00, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xFFC0C000, - 0x00000000, 0x00000000, 0x0400FFC0, 0x1F000004, - 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x0000FFE0, 0x80000000, - 0x00007FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0xE000F800, - 0x0C00FE00, 0xFFFFFFF0, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, - 0x00000000, 0x00000180, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFFFFE00, - 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0xFF800000, 0xFFFC0000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00200000, 0x00000000, - 0x20000000, 0x1400219B, 0x00000010, 0x00000000, - 0x20201840, 0x84000000, 0x000203A0, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x000000C0, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00003000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x07FFF000, 0xFFFF0001, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFF800060, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000010, 0xF5080169, 0x5569157B, 0xA1080869, - 0xF0000400, 0xF0000411, 0xFFFFFFFF, 0xFFFCFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x0000F000, 0x00000000, 0x00000000, - 0xFFF00000, 0x00018000, 0x00010001, 0xFFC00000, - 0x0000E000, 0x00008000, 0x00000000, 0x0000F000, - 0xF8000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, - 0x0000FFF8, 0xF8000000, 0xFFFCFE00, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x04000000, - 0x00000000, 0x00000010, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFE0000, 0xFFF0E000, - 0x00000000, 0x00000000, 0x00000000, 0xFFF00000, - 0x00000000, 0x00000000, 0xFFE00000, 0xFFFFFFFF, - 0x0000F000, 0x00000000, 0xFC00FF00, 0x00000000, - 0x0000FF00, 0xFFFFC000, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFE00FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFE0, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFF800000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFE00000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xC0000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFD, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xC0000000 - } -}; diff --git a/lib/unistring/unictype/categ_Co.c b/lib/unistring/unictype/categ_Co.c deleted file mode 100644 index efbccf890e..0000000000 --- a/lib/unistring/unictype/categ_Co.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Co table. */ -#include "categ_Co.h" - -const uc_general_category_t UC_CATEGORY_Co = - { UC_CATEGORY_MASK_Co, 0, { &u_categ_Co } }; diff --git a/lib/unistring/unictype/categ_Co.h b/lib/unistring/unictype/categ_Co.h deleted file mode 100644 index 1a89443f66..0000000000 --- a/lib/unistring/unictype/categ_Co.h +++ /dev/null @@ -1,310 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[17]; - short level2[2 << 7]; - /*unsigned*/ int level3[3 << 4]; - } -u_categ_Co = -{ - { 17 }, - { - 18 * sizeof (int) / sizeof (short) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128 - }, - { - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 32 - }, - { - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF - } -}; diff --git a/lib/unistring/unictype/categ_Cs.c b/lib/unistring/unictype/categ_Cs.c deleted file mode 100644 index 25696cc9a9..0000000000 --- a/lib/unistring/unictype/categ_Cs.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -static bool -uc_is_category_Cs (ucs4_t uc) -{ - return (uc >= 0xd800 && uc < 0xe000); -} - -const uc_general_category_t UC_CATEGORY_Cs = - { UC_CATEGORY_MASK_Cs, 1, { &uc_is_category_Cs } }; diff --git a/lib/unistring/unictype/categ_Cs.h b/lib/unistring/unictype/categ_Cs.h deleted file mode 100644 index f4359209db..0000000000 --- a/lib/unistring/unictype/categ_Cs.h +++ /dev/null @@ -1,156 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[1 << 4]; - } -u_categ_Cs = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 0, - 2 + 128 * sizeof (short) / sizeof (int) + 0, - 2 + 128 * sizeof (short) / sizeof (int) + 0, - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF - } -}; diff --git a/lib/unistring/unictype/categ_L.c b/lib/unistring/unictype/categ_L.c deleted file mode 100644 index bf534f1d68..0000000000 --- a/lib/unistring/unictype/categ_L.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_L table. */ -#include "categ_L.h" - -const uc_general_category_t UC_CATEGORY_L = - { UC_CATEGORY_MASK_L, 0, { &u_categ_L } }; diff --git a/lib/unistring/unictype/categ_L.h b/lib/unistring/unictype/categ_L.h deleted file mode 100644 index 5e9d456c0a..0000000000 --- a/lib/unistring/unictype/categ_L.h +++ /dev/null @@ -1,660 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[3]; - short level2[3 << 7]; - /*unsigned*/ int level3[62 << 4]; - } -u_categ_L = -{ - { 3 }, - { - 4 * sizeof (int) / sizeof (short) + 0, - 4 * sizeof (int) / sizeof (short) + 128, - 4 * sizeof (int) / sizeof (short) + 256 - }, - { - 4 + 384 * sizeof (short) / sizeof (int) + 0, - 4 + 384 * sizeof (short) / sizeof (int) + 16, - 4 + 384 * sizeof (short) / sizeof (int) + 32, - 4 + 384 * sizeof (short) / sizeof (int) + 48, - 4 + 384 * sizeof (short) / sizeof (int) + 64, - 4 + 384 * sizeof (short) / sizeof (int) + 80, - 4 + 384 * sizeof (short) / sizeof (int) + 96, - 4 + 384 * sizeof (short) / sizeof (int) + 112, - 4 + 384 * sizeof (short) / sizeof (int) + 128, - 4 + 384 * sizeof (short) / sizeof (int) + 144, - 4 + 384 * sizeof (short) / sizeof (int) + 160, - 4 + 384 * sizeof (short) / sizeof (int) + 176, - 4 + 384 * sizeof (short) / sizeof (int) + 192, - 4 + 384 * sizeof (short) / sizeof (int) + 208, - 4 + 384 * sizeof (short) / sizeof (int) + 224, - 4 + 384 * sizeof (short) / sizeof (int) + 240, - 4 + 384 * sizeof (short) / sizeof (int) + 256, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 272, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 304, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 336, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 352, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 368, - 4 + 384 * sizeof (short) / sizeof (int) + 384, - 4 + 384 * sizeof (short) / sizeof (int) + 400, - 4 + 384 * sizeof (short) / sizeof (int) + 416, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 432, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 448, - 4 + 384 * sizeof (short) / sizeof (int) + 464, - 4 + 384 * sizeof (short) / sizeof (int) + 480, - 4 + 384 * sizeof (short) / sizeof (int) + 496, - 4 + 384 * sizeof (short) / sizeof (int) + 512, - 4 + 384 * sizeof (short) / sizeof (int) + 528, - 4 + 384 * sizeof (short) / sizeof (int) + 544, - 4 + 384 * sizeof (short) / sizeof (int) + 560, - 4 + 384 * sizeof (short) / sizeof (int) + 576, - 4 + 384 * sizeof (short) / sizeof (int) + 592, - 4 + 384 * sizeof (short) / sizeof (int) + 608, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 624, - 4 + 384 * sizeof (short) / sizeof (int) + 640, - 4 + 384 * sizeof (short) / sizeof (int) + 656, - 4 + 384 * sizeof (short) / sizeof (int) + 672, - 4 + 384 * sizeof (short) / sizeof (int) + 688, - 4 + 384 * sizeof (short) / sizeof (int) + 704, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 720, - 4 + 384 * sizeof (short) / sizeof (int) + 736, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 752, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 768, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 784, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 800, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 816, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 832, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 848, - 4 + 384 * sizeof (short) / sizeof (int) + 864, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 880, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 896, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 912, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 928, - 4 + 384 * sizeof (short) / sizeof (int) + 944, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 960, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 976, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, - 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, - 0x00000000, 0x00000000, 0x00000000, 0xBCDF0000, - 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFEFFFF, 0x027FFFFF, 0xFFFFFFFE, - 0x000000FF, 0x00000000, 0xFFFF0000, 0x000707FF, - 0x00000000, 0xFFFFFFFF, 0x000007FF, 0xFFFEC000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9C00C060, - 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, - 0xFFFFFFFF, 0x0002003F, 0xFFFFFC00, 0x043007FF, - 0x043FFFFF, 0x00000110, 0x01FFFFFF, 0x00000000, - 0x00000000, 0x001FFFFF, 0x00000000, 0x00000000, - 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xFFFE0003, - 0xFFF99FE1, 0x23C5FDFF, 0xB0004000, 0x00030003, - 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, - 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x02000003, - 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x00020003, - 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x00000000, - 0xFFFDDFE0, 0x23FFFDFF, 0x07000000, 0x00000003, - 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x00060003, - 0xFFFDDFE0, 0x27FFFFFF, 0x80004000, 0xFC000003, - 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, - 0xFFFFFFFE, 0x000DFFFF, 0x0000007F, 0x00000000, - 0xFEF02596, 0x200DECAE, 0xF000005F, 0x00000000, - 0x00000001, 0x00000000, 0xFFFFFEFF, 0x00001FFF, - 0x00001F00, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x800007FF, 0x3C3F0000, 0xFFE1C062, - 0x00004003, 0xFFFFFFFF, 0xFFFF20BF, 0xF7FFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, - 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, - 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, - 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, - 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF9FFF, - 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x01FE07FF, - 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, - 0xFFFFFFFF, 0x000FFFFF, 0x10800000, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, - 0xFFFFFFFF, 0xFFFF05FF, 0xFFFFFFFF, 0x003FFFFF, - 0x7FFFFFFF, 0x00000000, 0xFFFF0000, 0x001F3FFF, - 0xFFFFFFFF, 0xFFFF0FFF, 0x000003FF, 0x00000000, - 0x007FFFFF, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, - 0x00000000, 0x00000080, 0x00000000, 0x00000000, - 0xFFFFFFE0, 0x000FFFFF, 0x00000FE0, 0x00000000, - 0xFFFFFFF8, 0xFC00C001, 0xFFFFFFFF, 0x0000003F, - 0xFFFFFFFF, 0x0000000F, 0xFC00E000, 0x3FFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x0063DE00, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, - 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, - 0x00000000, 0x00000000, 0x00000000, 0x80020000, - 0x1FFF0000, 0x00000000, 0x00000000, 0x00000000, - 0x3E2FFC84, 0xF3FFBD50, 0x000043E0, 0x00000000, - 0x00000018, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000C781F, - 0xFFFFFFFF, 0xFFFF20BF, 0xFFFFFFFF, 0x000080FF, - 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, - 0x00000000, 0x00008000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000060, 0x183E0000, 0xFFFFFFFE, 0xFFFFFFFF, - 0xE07FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, - 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00007FFF, 0x07FFFFFF, 0x00000000, 0xFFFF0000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00001FFF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFF1FFF, 0x00000C00, 0xFFFFFFFF, 0x80007FFF, - 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, - 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFF9FF, 0x00FF3FFF, 0x00000000, 0xFF800000, - 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, - 0xFFFFFFFC, 0x000FFFFF, 0x00000000, 0x28FC0000, - 0xFFFFFC00, 0xFFFF003F, 0x0000007F, 0x1FFFFFFF, - 0xFFFFFFF0, 0x0007FFFF, 0x00008000, 0x7C00FFDF, - 0xFFFFFFFF, 0x000001FF, 0x00000FF7, 0xC47FFFFF, - 0xFFFFFFFF, 0x3E62FFFF, 0x38000005, 0x001C07FF, - 0x007E7E7E, 0xFFFF7F7F, 0xF7FFFFFF, 0xFFFF003F, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, - 0xA0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, - 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, - 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, - 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, - 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, - 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, - 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, - 0xFFFFFFFF, 0xFFFF0000, 0xFFFF03FD, 0x003FFFFF, - 0x3FFFFFFF, 0xFFFFFFFF, 0x0000FF0F, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFF00FF, 0xFFFFFFFF, 0x0000000F, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x007FFFFF, 0x003FFFFF, 0x000000FF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFD3F, 0x91BFFFFF, 0x003FFFFF, 0x007FFFFF, - 0x7FFFFFFF, 0x00000000, 0x00000000, 0x0037FFFF, - 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xC0FFFFFF, 0x00000000, 0x00000000, - 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x1FFFFFFF, - 0x1FFFFFFF, 0x00000000, 0xFFFFFEFF, 0x0000001F, - 0xFFFFFFFF, 0x003FFFFF, 0x003FFFFF, 0x0007FFFF, - 0x0003FFFF, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, - 0xFFFFFFFF, 0x0007FFFF, 0xFFFFFFFF, 0x0007FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFF8, 0x00FFFFFF, 0x00000000, 0x00000000, - 0xFFFFFFF8, 0x0000FFFF, 0xFFFF0000, 0x000001FF, - 0xFFFFFFF8, 0x0000007F, 0xFFFF0000, 0x0047FFFF, - 0xFFFFFFF8, 0x0007FFFF, 0x1400001E, 0x00000000, - 0xFFFBFFFF, 0x00000FFF, 0x00000000, 0x00000000, - 0xBFFFBD7F, 0xFFFF01FF, 0x7FFFFFFF, 0x00000000, - 0xFFF99FE0, 0x23EDFDFF, 0xE0010000, 0x00000003, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x0000FFFF, 0x000000B0, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x00007FFF, 0x0F000000, 0x00000000, - 0xFFFFFFFF, 0x0000FFFF, 0x00000010, 0x00000000, - 0xFFFFFFFF, 0x000007FF, 0x00000000, 0x00000000, - 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000007F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x01FFFFFF, 0x7FFFFFFF, 0x00000000, - 0x00000000, 0x00000000, 0xFFFF0000, 0x00003FFF, - 0xFFFFFFFF, 0x0000FFFF, 0x0000000F, 0xE0FFFFF8, - 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0001001F, 0x00000000, - 0xFFF80000, 0x00000000, 0x00000000, 0x00000000, - 0x00000003, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFF07FF, - 0x03FF01FF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, - 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, - 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, - 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, - 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFEF, 0x0AF7FE96, 0xAA96EA84, 0x5EF7F796, - 0x0FFFFBFF, 0x0FFFFBEE, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x00000003, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_LC.c b/lib/unistring/unictype/categ_LC.c deleted file mode 100644 index 9bcc578fbe..0000000000 --- a/lib/unistring/unictype/categ_LC.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2011-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2011. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_LC table. */ -#include "categ_LC.h" - -const uc_general_category_t UC_CATEGORY_LC = - { UC_CATEGORY_MASK_LC, 0, { &u_categ_LC } }; diff --git a/lib/unistring/unictype/categ_LC.h b/lib/unistring/unictype/categ_LC.h deleted file mode 100644 index aaba0d2b33..0000000000 --- a/lib/unistring/unictype/categ_LC.h +++ /dev/null @@ -1,355 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[18 << 4]; - } -u_categ_LC = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 240, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 256, - 3 + 256 * sizeof (short) / sizeof (int) + 272, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, - 0x00000000, 0x00200000, 0xFF7FFFFF, 0xFF7FFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFF0, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFEFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xB8CF0000, - 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFEFFFF, 0x007FFFFF, 0xFFFFFFFE, - 0x000000FF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0x000020BF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x3F3FFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFEFFF800, - 0x07FFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, - 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x3E2FFC84, 0xF21FBD50, 0x000043E0, 0x00000000, - 0x00000018, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0xCFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000C781F, - 0xFFFFFFFF, 0x000020BF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00003FFF, - 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFEFFFF, - 0xFFFF78FF, 0x00FF3FFF, 0x00000000, 0x04000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFF0000, 0x07FFFFFF, 0xFFFF003F, - 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x0007FFFF, 0xFFFFFFFF, 0x0007FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, - 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, - 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, - 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, - 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Ll.c b/lib/unistring/unictype/categ_Ll.c deleted file mode 100644 index bf27fc7dc3..0000000000 --- a/lib/unistring/unictype/categ_Ll.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Ll table. */ -#include "categ_Ll.h" - -const uc_general_category_t UC_CATEGORY_Ll = - { UC_CATEGORY_MASK_Ll, 0, { &u_categ_Ll } }; diff --git a/lib/unistring/unictype/categ_Ll.h b/lib/unistring/unictype/categ_Ll.h deleted file mode 100644 index 9a268aa858..0000000000 --- a/lib/unistring/unictype/categ_Ll.h +++ /dev/null @@ -1,351 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[17 << 4]; - } -u_categ_Ll = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 240, - 3 + 256 * sizeof (short) / sizeof (int) + 256, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, - 0x00000000, 0x00200000, 0x80000000, 0xFF7FFFFF, - 0xAAAAAAAA, 0x55AAAAAA, 0xAAAAAB55, 0xD4AAAAAA, - 0x4E243129, 0xE6512D2A, 0xB5555240, 0xAA29AAAA, - 0xAAAAAAAA, 0x93FAAAAA, 0xFFFFAA85, 0xFFFFFFFF, - 0xFFEFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x388A0000, - 0x00010000, 0xFFFFF000, 0xAAE37FFF, 0x192FAAAA, - 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xAAAAAAAA, - 0xAAAAA802, 0xAAAAAAAA, 0xAAAAD554, 0xAAAAAAAA, - 0xAAAAAAAA, 0x0000AAAA, 0x00000000, 0xFFFFFFFE, - 0x000000FF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x3F000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFEFFF800, - 0x07FFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, - 0xBFEAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, - 0x003F00FF, 0x00FF00FF, 0x00FF003F, 0x3FFF00FF, - 0x00FF00FF, 0x40DF00FF, 0x00CF00DC, 0x00DC00FF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0008C400, 0x32108000, 0x000043C0, 0x00000000, - 0x00000010, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFF0000, 0x7FFFFFFF, 0x0FDA1562, - 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x0008501A, - 0xFFFFFFFF, 0x000020BF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xAAAAAAAA, 0x00002AAA, - 0x0AAAAAAA, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xAAABAAA8, 0xAAAAAAAA, 0x95FEAAAA, - 0xAABA50AA, 0x00A002AA, 0x00000000, 0x04000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFF0000, 0x07FFFFFF, 0xFFFF003F, - 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFF00, 0x0000FFFF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0007FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFC000000, 0x000FFFFF, 0xFFDFC000, 0x000000FF, - 0x0FFFFFFC, 0xEBC00000, 0x0000FFEF, 0xFFFFFC00, - 0xC000000F, 0x00FFFFFF, 0xFFFC0000, 0x00000FFF, - 0xFFFFFFC0, 0xFC000000, 0x000FFFFF, 0xFFFFC000, - 0x000000FF, 0x0FFFFFFC, 0xFFC00000, 0x0000FFFF, - 0xFFFFFC00, 0x0000003F, 0xF7FFFFFC, 0xF0000003, - 0x0FDFFFFF, 0xFFC00000, 0x003F7FFF, 0xFFFF0000, - 0x0000FDFF, 0xFFFFFC00, 0x00000BF7, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Lm.c b/lib/unistring/unictype/categ_Lm.c deleted file mode 100644 index 567dffa464..0000000000 --- a/lib/unistring/unictype/categ_Lm.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Lm table. */ -#include "categ_Lm.h" - -const uc_general_category_t UC_CATEGORY_Lm = - { UC_CATEGORY_MASK_Lm, 0, { &u_categ_Lm } }; diff --git a/lib/unistring/unictype/categ_Lm.h b/lib/unistring/unictype/categ_Lm.h deleted file mode 100644 index c802768460..0000000000 --- a/lib/unistring/unictype/categ_Lm.h +++ /dev/null @@ -1,371 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[22 << 4]; - } -u_categ_Lm = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 0, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 240, - 3 + 256 * sizeof (short) / sizeof (int) + 256, - 3 + 256 * sizeof (short) / sizeof (int) + 272, - 3 + 256 * sizeof (short) / sizeof (int) + 288, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 304, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 320, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 336, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFF0000, 0x0003FFC3, 0x0000501F, - 0x00000000, 0x00000000, 0x00000000, 0x04100000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x02000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000001, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000060, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x04300000, - 0x04000000, 0x00000110, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00020000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000040, 0x00000000, - 0x00000000, 0x00000000, 0x00000040, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x10000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00800000, 0x00000000, - 0x00000000, 0x00000000, 0x00000008, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000080, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x3F000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFF000, 0xFFFFFFFF, 0x010007FF, - 0xF8000000, 0xFFFFFFFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x80020000, - 0x1FFF0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x30000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00008000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00008000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000020, 0x083E0000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x70000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00200000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x3F000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00001000, 0x00000000, 0x00000000, 0x80000000, - 0x30000000, 0x00000000, 0x00000000, 0x00000000, - 0xFF800000, 0x00000000, 0x00000000, 0x00010000, - 0x00000100, 0x00000000, 0x00000000, 0x03000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00008000, 0x00000040, - 0x00000000, 0x00000000, 0x00000000, 0x00010000, - 0x00000000, 0x00000000, 0x20000000, 0x00180000, - 0x00000000, 0x00000000, 0xF0000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00010000, - 0xC0000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000000F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFF80000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Lo.c b/lib/unistring/unictype/categ_Lo.c deleted file mode 100644 index f85356d58c..0000000000 --- a/lib/unistring/unictype/categ_Lo.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Lo table. */ -#include "categ_Lo.h" - -const uc_general_category_t UC_CATEGORY_Lo = - { UC_CATEGORY_MASK_Lo, 0, { &u_categ_Lo } }; diff --git a/lib/unistring/unictype/categ_Lo.h b/lib/unistring/unictype/categ_Lo.h deleted file mode 100644 index 6adc785518..0000000000 --- a/lib/unistring/unictype/categ_Lo.h +++ /dev/null @@ -1,648 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[3]; - short level2[3 << 7]; - /*unsigned*/ int level3[59 << 4]; - } -u_categ_Lo = -{ - { 3 }, - { - 4 * sizeof (int) / sizeof (short) + 0, - 4 * sizeof (int) / sizeof (short) + 128, - 4 * sizeof (int) / sizeof (short) + 256 - }, - { - 4 + 384 * sizeof (short) / sizeof (int) + 0, - 4 + 384 * sizeof (short) / sizeof (int) + 16, - 4 + 384 * sizeof (short) / sizeof (int) + 32, - 4 + 384 * sizeof (short) / sizeof (int) + 48, - 4 + 384 * sizeof (short) / sizeof (int) + 64, - 4 + 384 * sizeof (short) / sizeof (int) + 80, - 4 + 384 * sizeof (short) / sizeof (int) + 96, - 4 + 384 * sizeof (short) / sizeof (int) + 112, - 4 + 384 * sizeof (short) / sizeof (int) + 128, - 4 + 384 * sizeof (short) / sizeof (int) + 144, - 4 + 384 * sizeof (short) / sizeof (int) + 160, - 4 + 384 * sizeof (short) / sizeof (int) + 176, - 4 + 384 * sizeof (short) / sizeof (int) + 192, - 4 + 384 * sizeof (short) / sizeof (int) + 208, - 4 + 384 * sizeof (short) / sizeof (int) + 224, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 240, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 256, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 272, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 304, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 320, - 4 + 384 * sizeof (short) / sizeof (int) + 336, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 352, - 4 + 384 * sizeof (short) / sizeof (int) + 368, - 4 + 384 * sizeof (short) / sizeof (int) + 384, - 4 + 384 * sizeof (short) / sizeof (int) + 400, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 416, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 432, - 4 + 384 * sizeof (short) / sizeof (int) + 448, - 4 + 384 * sizeof (short) / sizeof (int) + 464, - 4 + 384 * sizeof (short) / sizeof (int) + 480, - 4 + 384 * sizeof (short) / sizeof (int) + 496, - 4 + 384 * sizeof (short) / sizeof (int) + 512, - 4 + 384 * sizeof (short) / sizeof (int) + 528, - 4 + 384 * sizeof (short) / sizeof (int) + 544, - 4 + 384 * sizeof (short) / sizeof (int) + 560, - 4 + 384 * sizeof (short) / sizeof (int) + 576, - 4 + 384 * sizeof (short) / sizeof (int) + 592, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 608, - 4 + 384 * sizeof (short) / sizeof (int) + 624, - 4 + 384 * sizeof (short) / sizeof (int) + 640, - 4 + 384 * sizeof (short) / sizeof (int) + 656, - 4 + 384 * sizeof (short) / sizeof (int) + 672, - 4 + 384 * sizeof (short) / sizeof (int) + 688, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 704, - 4 + 384 * sizeof (short) / sizeof (int) + 720, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 736, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 752, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 768, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 784, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 800, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 816, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 832, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 848, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 864, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 880, - 4 + 384 * sizeof (short) / sizeof (int) + 896, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 912, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4 + 384 * sizeof (short) / sizeof (int) + 288, - 4 + 384 * sizeof (short) / sizeof (int) + 928, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x04000400, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x08000000, 0x0000000F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00100000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFF0000, 0x000707FF, - 0x00000000, 0xFFFFFFFF, 0x000007FE, 0xFFFEC000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9C00C000, - 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, - 0xFFFFFFFF, 0x0002003F, 0xFFFFFC00, 0x000007FF, - 0x003FFFFF, 0x00000000, 0x01FFFFFF, 0x00000000, - 0x00000000, 0x001FFFFF, 0x00000000, 0x00000000, - 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xFFFC0003, - 0xFFF99FE1, 0x23C5FDFF, 0xB0004000, 0x00030003, - 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, - 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x02000003, - 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x00020003, - 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x00000000, - 0xFFFDDFE0, 0x23FFFDFF, 0x07000000, 0x00000003, - 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x00060003, - 0xFFFDDFE0, 0x27FFFFFF, 0x80004000, 0xFC000003, - 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, - 0xFFFFFFFE, 0x000DFFFF, 0x0000003F, 0x00000000, - 0xFEF02596, 0x200DECAE, 0xF000001F, 0x00000000, - 0x00000001, 0x00000000, 0xFFFFFEFF, 0x00001FFF, - 0x00001F00, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x800007FF, 0x3C3F0000, 0xFFE1C062, - 0x00004003, 0x00000000, 0xFFFF0000, 0xE7FFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, - 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, - 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, - 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF9FFF, - 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x01FE07FF, - 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, - 0xFFFFFFFF, 0x000FFFFF, 0x10000000, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0xFFFFFFF7, 0x00FFFFFF, - 0xFFFFFFFF, 0xFFFF05FF, 0xFFFFFFFF, 0x003FFFFF, - 0x7FFFFFFF, 0x00000000, 0xFFFF0000, 0x001F3FFF, - 0xFFFFFFFF, 0xFFFF0FFF, 0x000003FF, 0x00000000, - 0x007FFFFF, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFE0, 0x000FFFFF, 0x00000FE0, 0x00000000, - 0xFFFFFFF8, 0xFC00C001, 0xFFFFFFFF, 0x0000003F, - 0xFFFFFFFF, 0x0000000F, 0xFC00E000, 0x00FFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x0063DE00, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01E00000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0x000000FF, - 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, - 0x00000040, 0x10000000, 0xFFFFFFFE, 0xFFFFFFFF, - 0x807FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x87FFFFFF, - 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00007FFF, 0x07FFFFFF, 0x00000000, 0xFFFF0000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000, - 0xFFDFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00001FFF, 0x00000000, 0xFFFF0000, 0x00FFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFF0FFF, 0x00000C00, 0x00000000, 0x00004000, - 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00008000, 0x00000000, 0x00000000, 0xF8800000, - 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, - 0xFFFFFFFC, 0x000FFFFF, 0x00000000, 0x28FC0000, - 0xFFFFFC00, 0xFFFF003F, 0x0000007F, 0x1FFFFFFF, - 0xFFFFFFF0, 0x0007FFFF, 0x00000000, 0x7C00FF9F, - 0xFFFFFFFF, 0x000001FF, 0x00000FF7, 0xC47EFFFF, - 0xFFFFFFFF, 0x3E62FFFF, 0x18000005, 0x000407FF, - 0x007E7E7E, 0x00007F7F, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000007, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFF000F, 0xFFFFF87F, 0x0FFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF3FFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, - 0xA0000000, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, - 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, - 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, - 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0xFFFEFFC0, - 0x3FFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, - 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, - 0xFFFFFFFF, 0xFFFF0000, 0xFFFF03FD, 0x003FFFFF, - 0x3FFFFFFF, 0xFFFFFFFF, 0x0000FF0F, 0x00000000, - 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, - 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFF00FF, 0xFFFFFFFF, 0x0000000F, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x007FFFFF, 0x003FFFFF, 0x000000FF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFD3F, 0x91BFFFFF, 0x003FFFFF, 0x007FFFFF, - 0x7FFFFFFF, 0x00000000, 0x00000000, 0x0037FFFF, - 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xC0FFFFFF, 0x00000000, 0x00000000, - 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x1FFFFFFF, - 0x1FFFFFFF, 0x00000000, 0xFFFFFEFF, 0x0000001F, - 0xFFFFFFFF, 0x003FFFFF, 0x003FFFFF, 0x0007FFFF, - 0x0003FFFF, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x000001FF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFF8, 0x00FFFFFF, 0x00000000, 0x00000000, - 0xFFFFFFF8, 0x0000FFFF, 0xFFFF0000, 0x000001FF, - 0xFFFFFFF8, 0x0000007F, 0xFFFF0000, 0x0047FFFF, - 0xFFFFFFF8, 0x0007FFFF, 0x1400001E, 0x00000000, - 0xFFFBFFFF, 0x00000FFF, 0x00000000, 0x00000000, - 0xBFFFBD7F, 0xFFFF01FF, 0x7FFFFFFF, 0x00000000, - 0xFFF99FE0, 0x23EDFDFF, 0xE0010000, 0x00000003, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x0000FFFF, 0x000000B0, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x00007FFF, 0x0F000000, 0x00000000, - 0xFFFFFFFF, 0x0000FFFF, 0x00000010, 0x00000000, - 0xFFFFFFFF, 0x000007FF, 0x00000000, 0x00000000, - 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0x01FFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x03FFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000007F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x01FFFFFF, 0x7FFFFFFF, 0x00000000, - 0x00000000, 0x00000000, 0xFFFF0000, 0x00003FFF, - 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0xE0FFFFF8, - 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0001001F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000003, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFF07FF, - 0x03FF01FF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFEF, 0x0AF7FE96, 0xAA96EA84, 0x5EF7F796, - 0x0FFFFBFF, 0x0FFFFBEE, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0x00000003, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Lt.c b/lib/unistring/unictype/categ_Lt.c deleted file mode 100644 index 3b4250c9f7..0000000000 --- a/lib/unistring/unictype/categ_Lt.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Lt table. */ -#include "categ_Lt.h" - -const uc_general_category_t UC_CATEGORY_Lt = - { UC_CATEGORY_MASK_Lt, 0, { &u_categ_Lt } }; diff --git a/lib/unistring/unictype/categ_Lt.h b/lib/unistring/unictype/categ_Lt.h deleted file mode 100644 index 85f2867408..0000000000 --- a/lib/unistring/unictype/categ_Lt.h +++ /dev/null @@ -1,160 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[2 << 4]; - } -u_categ_Lt = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000920, 0x00040000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFF00FF00, 0x1000FF00, 0x00001000, 0x10000000 - } -}; diff --git a/lib/unistring/unictype/categ_Lu.c b/lib/unistring/unictype/categ_Lu.c deleted file mode 100644 index 8623fdb263..0000000000 --- a/lib/unistring/unictype/categ_Lu.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Lu table. */ -#include "categ_Lu.h" - -const uc_general_category_t UC_CATEGORY_Lu = - { UC_CATEGORY_MASK_Lu, 0, { &u_categ_Lu } }; diff --git a/lib/unistring/unictype/categ_Lu.h b/lib/unistring/unictype/categ_Lu.h deleted file mode 100644 index 8dfaa480ea..0000000000 --- a/lib/unistring/unictype/categ_Lu.h +++ /dev/null @@ -1,343 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[15 << 4]; - } -u_categ_Lu = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, - 0x00000000, 0x00000000, 0x7F7FFFFF, 0x00000000, - 0x55555555, 0xAA555555, 0x555554AA, 0x2B555555, - 0xB1DBCED6, 0x11AED2D5, 0x4AAAA490, 0x55D25555, - 0x55555555, 0x6C055555, 0x0000557A, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x80450000, - 0xFFFED740, 0x00000FFB, 0x551C8000, 0xE6905555, - 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x55555555, - 0x55555401, 0x55555555, 0x55552AAB, 0x55555555, - 0x55555555, 0xFFFE5555, 0x007FFFFF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0x000020BF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, - 0x55555555, 0x55555555, 0x55555555, 0x55555555, - 0x40155555, 0x55555555, 0x55555555, 0x55555555, - 0x3F00FF00, 0xFF00FF00, 0xAA003F00, 0x0000FF00, - 0x00000000, 0x0F000000, 0x0F000F00, 0x0F001F00, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x3E273884, 0xC00F3D50, 0x00000020, 0x00000000, - 0x00000008, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0xC025EA9D, - 0x55555555, 0x55555555, 0x55555555, 0x00042805, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x55555555, 0x00001555, - 0x05555555, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x55545554, 0x55555555, 0x6A005555, - 0x55452855, 0x005F3D55, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x000000FF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x0007FFFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03FFFFFF, 0xFFF00000, 0x00003FFF, 0xFFFFFF00, - 0xD0000003, 0x003FDE64, 0xFFFF0000, 0x000003FF, - 0x1FDFE7B0, 0x7B000000, 0x0001FC5F, 0xFFFFF000, - 0x0000003F, 0x03FFFFFF, 0xFFF00000, 0x00003FFF, - 0xFFFFFF00, 0xF0000003, 0x003FFFFF, 0xFFFF0000, - 0x000003FF, 0xFFFFFF00, 0x00000001, 0x07FFFFFC, - 0xF0000000, 0x001FFFFF, 0xFFC00000, 0x00007FFF, - 0xFFFF0000, 0x000001FF, 0x00000400, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_M.c b/lib/unistring/unictype/categ_M.c deleted file mode 100644 index 8762ec8c27..0000000000 --- a/lib/unistring/unictype/categ_M.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_M table. */ -#include "categ_M.h" - -const uc_general_category_t UC_CATEGORY_M = - { UC_CATEGORY_MASK_M, 0, { &u_categ_M } }; diff --git a/lib/unistring/unictype/categ_M.h b/lib/unistring/unictype/categ_M.h deleted file mode 100644 index d97c60403d..0000000000 --- a/lib/unistring/unictype/categ_M.h +++ /dev/null @@ -1,568 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[15]; - short level2[3 << 7]; - /*unsigned*/ int level3[36 << 4]; - } -u_categ_M = -{ - { 15 }, - { - 16 * sizeof (int) / sizeof (short) + 0, - 16 * sizeof (int) / sizeof (short) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 * sizeof (int) / sizeof (short) + 256 - }, - { - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 0, - 16 + 384 * sizeof (short) / sizeof (int) + 16, - 16 + 384 * sizeof (short) / sizeof (int) + 32, - 16 + 384 * sizeof (short) / sizeof (int) + 48, - 16 + 384 * sizeof (short) / sizeof (int) + 64, - 16 + 384 * sizeof (short) / sizeof (int) + 80, - 16 + 384 * sizeof (short) / sizeof (int) + 96, - 16 + 384 * sizeof (short) / sizeof (int) + 112, - 16 + 384 * sizeof (short) / sizeof (int) + 128, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 144, - 16 + 384 * sizeof (short) / sizeof (int) + 160, - 16 + 384 * sizeof (short) / sizeof (int) + 176, - 16 + 384 * sizeof (short) / sizeof (int) + 192, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 208, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 224, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 240, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 256, - 16 + 384 * sizeof (short) / sizeof (int) + 272, - 16 + 384 * sizeof (short) / sizeof (int) + 288, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 304, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 320, - 16 + 384 * sizeof (short) / sizeof (int) + 336, - 16 + 384 * sizeof (short) / sizeof (int) + 352, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 368, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 384, - 16 + 384 * sizeof (short) / sizeof (int) + 400, - 16 + 384 * sizeof (short) / sizeof (int) + 416, - 16 + 384 * sizeof (short) / sizeof (int) + 432, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 448, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 464, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 480, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 496, - 16 + 384 * sizeof (short) / sizeof (int) + 512, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 528, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 544, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 560, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x000003F8, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, - 0x07FF0000, 0x00000000, 0xFFFFF800, 0x00010000, - 0x00000000, 0x00000000, 0x9FC00000, 0x00003D9F, - 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, - 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, - 0xFBC00000, 0x00003EEF, 0x0E000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF8, - 0x0000000F, 0xDC000000, 0x00FEFFFF, 0x0000000C, - 0x0000000E, 0xD0000000, 0x0080399F, 0x0000000C, - 0x0000000E, 0xD0000000, 0x00023987, 0x00230000, - 0x0000000E, 0xD0000000, 0x00003BBF, 0x0000000C, - 0x0000000E, 0xD0000000, 0x00C0399F, 0x0000000C, - 0x00000004, 0xC0000000, 0x00803DC7, 0x00000000, - 0x0000000F, 0xC0000000, 0x00603DDF, 0x0000000C, - 0x0000000E, 0xD0000000, 0x00603DDF, 0x0000000C, - 0x0000000E, 0xC0000000, 0x00803DDF, 0x0000000C, - 0x0000000C, 0x00000000, 0xFF5F8400, 0x000C0000, - 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, - 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, - 0x03000000, 0xC2A00000, 0x00000000, 0xFFFE0000, - 0xFEFFE0DF, 0x1FFFFFFF, 0x00000040, 0x00000000, - 0x00000000, 0x7FFFF800, 0xC3C00000, 0x001E3F9D, - 0x3C00BFFC, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xE0000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, - 0x00000000, 0xFFF00000, 0x200FFFFF, 0x00000000, - 0x00003800, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000200, 0x00000000, 0x00000000, - 0x00000000, 0x0FFF0FFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0F800000, 0x00000000, 0x7FE00000, 0x9FFFFFFF, - 0x00000000, 0x7FFF0000, 0x00000000, 0x00000000, - 0x0000001F, 0xFFF00000, 0x0000001F, 0x000FF800, - 0x00000007, 0x00003FFE, 0x00000000, 0x000FFFC0, - 0x00000000, 0x00FFFFF0, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFF70000, 0x031C21FF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0xF03FFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFF0000, 0x0001FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00038000, - 0x00000000, 0x00000000, 0x00000000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, - 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, - 0x06000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x3FF78000, - 0xC0000000, 0x00000000, 0x00000000, 0x00030000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000844, 0x000000F8, 0x00000000, 0x00000000, - 0x00000003, 0xFFF00000, 0x0000001F, 0x0003FFFF, - 0x00000000, 0x00003FC0, 0x000FFF80, 0x00000000, - 0x0000000F, 0xFFF80000, 0x00000001, 0x00000020, - 0x00000000, 0x007FFE00, 0x00003008, 0x38000000, - 0x00000000, 0xC19D0000, 0x00000002, 0x0060F800, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000037F8, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x40000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000FFFF, 0x0000FFFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x20000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000001, - 0x00000000, 0x00000000, 0x00000000, 0x07C00000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000060, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000007, 0xFF000000, 0x0000007F, 0x80000000, - 0x00000007, 0x07FF0000, 0x00000000, 0x00000000, - 0x00000007, 0x001FFF80, 0x00000000, 0x00080000, - 0x00000007, 0xFFF80000, 0x00001C01, 0x00000000, - 0x00000000, 0x00FFF000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x80000000, 0x000007FF, - 0x0000000F, 0xD0000000, 0x0080399F, 0x001F1FCC, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFF0000, 0x0000000F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFF3F8000, 0x30000001, 0x00000000, - 0x00000000, 0xFFFF0000, 0x00000001, 0x00000000, - 0x00000000, 0x00FFF800, 0x00000000, 0x00000000, - 0xE0000000, 0x00000FFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x001F0000, - 0x00000000, 0x007F0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFE0000, 0x7FFFFFFF, - 0x00078000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xF807E3E0, - 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000001C, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xF87FFFFF, 0xFFFFFFFF, 0x00201FFF, - 0xF8000010, 0x0000FFFE, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x007F0000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF - } -}; diff --git a/lib/unistring/unictype/categ_Mc.c b/lib/unistring/unictype/categ_Mc.c deleted file mode 100644 index 3c30c5c8cc..0000000000 --- a/lib/unistring/unictype/categ_Mc.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Mc table. */ -#include "categ_Mc.h" - -const uc_general_category_t UC_CATEGORY_Mc = - { UC_CATEGORY_MASK_Mc, 0, { &u_categ_Mc } }; diff --git a/lib/unistring/unictype/categ_Mc.h b/lib/unistring/unictype/categ_Mc.h deleted file mode 100644 index 6bcc23a755..0000000000 --- a/lib/unistring/unictype/categ_Mc.h +++ /dev/null @@ -1,355 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[18 << 4]; - } -u_categ_Mc = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 0, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - 3 + 256 * sizeof (short) / sizeof (int) + 240, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 256, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 272, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000008, 0xC8000000, 0x0000DE01, 0x00000000, - 0x0000000C, 0xC0000000, 0x00801981, 0x00000000, - 0x00000008, 0xC0000000, 0x00000001, 0x00000000, - 0x00000008, 0xC0000000, 0x00001A01, 0x00000000, - 0x0000000C, 0x40000000, 0x00801981, 0x00000000, - 0x00000000, 0xC0000000, 0x00801DC6, 0x00000000, - 0x0000000E, 0x00000000, 0x0000001E, 0x00000000, - 0x0000000C, 0x40000000, 0x00600D9F, 0x00000000, - 0x0000000C, 0xC0000000, 0x00801DC1, 0x00000000, - 0x0000000C, 0x00000000, 0xFF038000, 0x000C0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xC0000000, 0x00000000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x19021800, 0x00C00000, 0x00003F9C, - 0x1C009F98, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xC0400000, 0x000001BF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01FB0E78, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x06000000, 0x00000000, 0x00A00000, 0x0007E01A, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000010, 0xE8200000, 0x0000001B, 0x00000000, - 0x00000004, 0x000004C2, 0x00000000, 0x000C5C80, - 0x00000000, 0x00300FF0, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000C0002, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x0000C000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000098, 0x00000000, 0x00000000, - 0x00000003, 0xFFF00000, 0x0000000F, 0x00000000, - 0x00000000, 0x00000000, 0x000C0000, 0x00000000, - 0x00000008, 0xEC300000, 0x00000001, 0x00000000, - 0x00000000, 0x00198000, 0x00002000, 0x28000000, - 0x00000000, 0x00000000, 0x00000000, 0x0020C800, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000016D8, - 0x00000005, 0x00000000, 0x00000000, 0x00000000, - 0x00000004, 0x01870000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00000000, 0x00000000, - 0x00000004, 0x80380000, 0x00000001, 0x00000000, - 0x00000000, 0x002C7000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000007, - 0x0000000C, 0xC0000000, 0x0080399E, 0x0000000C, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x7A070000, 0x00000002, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x4F038000, 0x00000000, 0x00000000, - 0x00000000, 0x58070000, 0x00000000, 0x00000000, - 0x00000000, 0x0040D000, 0x00000000, 0x00000000, - 0x00000000, 0x00000043, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFE0000, 0x7FFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0007E060, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Me.c b/lib/unistring/unictype/categ_Me.c deleted file mode 100644 index 8e562f6c9e..0000000000 --- a/lib/unistring/unictype/categ_Me.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Me table. */ -#include "categ_Me.h" - -const uc_general_category_t UC_CATEGORY_Me = - { UC_CATEGORY_MASK_Me, 0, { &u_categ_Me } }; diff --git a/lib/unistring/unictype/categ_Me.h b/lib/unistring/unictype/categ_Me.h deleted file mode 100644 index 22bd522432..0000000000 --- a/lib/unistring/unictype/categ_Me.h +++ /dev/null @@ -1,168 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[4 << 4]; - } -u_categ_Me = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 48, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000300, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x40000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xE0000000, 0x0000001D, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00070000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Mn.c b/lib/unistring/unictype/categ_Mn.c deleted file mode 100644 index 97576364c2..0000000000 --- a/lib/unistring/unictype/categ_Mn.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Mn table. */ -#include "categ_Mn.h" - -const uc_general_category_t UC_CATEGORY_Mn = - { UC_CATEGORY_MASK_Mn, 0, { &u_categ_Mn } }; diff --git a/lib/unistring/unictype/categ_Mn.h b/lib/unistring/unictype/categ_Mn.h deleted file mode 100644 index 200bcf84f7..0000000000 --- a/lib/unistring/unictype/categ_Mn.h +++ /dev/null @@ -1,568 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[15]; - short level2[3 << 7]; - /*unsigned*/ int level3[36 << 4]; - } -u_categ_Mn = -{ - { 15 }, - { - 16 * sizeof (int) / sizeof (short) + 0, - 16 * sizeof (int) / sizeof (short) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 * sizeof (int) / sizeof (short) + 256 - }, - { - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 0, - 16 + 384 * sizeof (short) / sizeof (int) + 16, - 16 + 384 * sizeof (short) / sizeof (int) + 32, - 16 + 384 * sizeof (short) / sizeof (int) + 48, - 16 + 384 * sizeof (short) / sizeof (int) + 64, - 16 + 384 * sizeof (short) / sizeof (int) + 80, - 16 + 384 * sizeof (short) / sizeof (int) + 96, - 16 + 384 * sizeof (short) / sizeof (int) + 112, - 16 + 384 * sizeof (short) / sizeof (int) + 128, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 144, - 16 + 384 * sizeof (short) / sizeof (int) + 160, - 16 + 384 * sizeof (short) / sizeof (int) + 176, - 16 + 384 * sizeof (short) / sizeof (int) + 192, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 208, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 224, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 240, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 256, - 16 + 384 * sizeof (short) / sizeof (int) + 272, - 16 + 384 * sizeof (short) / sizeof (int) + 288, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 304, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 320, - 16 + 384 * sizeof (short) / sizeof (int) + 336, - 16 + 384 * sizeof (short) / sizeof (int) + 352, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 368, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 384, - 16 + 384 * sizeof (short) / sizeof (int) + 400, - 16 + 384 * sizeof (short) / sizeof (int) + 416, - 16 + 384 * sizeof (short) / sizeof (int) + 432, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 448, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 464, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 480, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 496, - 16 + 384 * sizeof (short) / sizeof (int) + 512, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 528, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 544, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 560, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x000000F8, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, - 0x07FF0000, 0x00000000, 0xFFFFF800, 0x00010000, - 0x00000000, 0x00000000, 0x9FC00000, 0x00003D9F, - 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, - 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, - 0xFBC00000, 0x00003EEF, 0x0E000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFF8, - 0x00000007, 0x14000000, 0x00FE21FE, 0x0000000C, - 0x00000002, 0x10000000, 0x0000201E, 0x0000000C, - 0x00000006, 0x10000000, 0x00023986, 0x00230000, - 0x00000006, 0x10000000, 0x000021BE, 0x0000000C, - 0x00000002, 0x90000000, 0x0040201E, 0x0000000C, - 0x00000004, 0x00000000, 0x00002001, 0x00000000, - 0x00000001, 0xC0000000, 0x00603DC1, 0x0000000C, - 0x00000002, 0x90000000, 0x00003040, 0x0000000C, - 0x00000002, 0x00000000, 0x0000201E, 0x0000000C, - 0x00000000, 0x00000000, 0x005C0400, 0x00000000, - 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, - 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, - 0x03000000, 0x02A00000, 0x00000000, 0x7FFE0000, - 0xFEFFE0DF, 0x1FFFFFFF, 0x00000040, 0x00000000, - 0x00000000, 0x66FDE000, 0xC3000000, 0x001E0001, - 0x20002064, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xE0000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, - 0x00000000, 0x3FB00000, 0x200FFE40, 0x00000000, - 0x00003800, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000200, 0x00000000, 0x00000000, - 0x00000000, 0x0E040187, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x09800000, 0x00000000, 0x7F400000, 0x9FF81FE5, - 0x00000000, 0x3FFF0000, 0x00000000, 0x00000000, - 0x0000000F, 0x17D00000, 0x00000004, 0x000FF800, - 0x00000003, 0x00003B3C, 0x00000000, 0x0003A340, - 0x00000000, 0x00CFF000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFF70000, 0x031021FD, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0xF03FFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x1FFF0000, 0x0001FFE2, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00038000, - 0x00000000, 0x00000000, 0x00000000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, - 0x00000000, 0x00003C00, 0x00000000, 0x00000000, - 0x06000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x3FF08000, - 0xC0000000, 0x00000000, 0x00000000, 0x00030000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000844, 0x00000060, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000010, 0x0003FFFF, - 0x00000000, 0x00003FC0, 0x0003FF80, 0x00000000, - 0x00000007, 0x13C80000, 0x00000000, 0x00000020, - 0x00000000, 0x00667E00, 0x00001008, 0x10000000, - 0x00000000, 0xC19D0000, 0x00000002, 0x00403000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00002120, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x40000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000FFFF, 0x0000FFFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x20000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000001, - 0x00000000, 0x00000000, 0x00000000, 0x07C00000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000060, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000002, 0xFF000000, 0x0000007F, 0x80000000, - 0x00000003, 0x06780000, 0x00000000, 0x00000000, - 0x00000007, 0x001FEF80, 0x00000000, 0x00080000, - 0x00000003, 0x7FC00000, 0x00001C00, 0x00000000, - 0x00000000, 0x00D38000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x80000000, 0x000007F8, - 0x00000003, 0x10000000, 0x00000001, 0x001F1FC0, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x85F80000, 0x0000000D, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xB03C0000, 0x30000001, 0x00000000, - 0x00000000, 0xA7F80000, 0x00000001, 0x00000000, - 0x00000000, 0x00BF2800, 0x00000000, 0x00000000, - 0xE0000000, 0x00000FBC, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x001F0000, - 0x00000000, 0x007F0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00078000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xF8000380, - 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000001C, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xF87FFFFF, 0xFFFFFFFF, 0x00201FFF, - 0xF8000010, 0x0000FFFE, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x007F0000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF - } -}; diff --git a/lib/unistring/unictype/categ_N.c b/lib/unistring/unictype/categ_N.c deleted file mode 100644 index 0dc5c087c2..0000000000 --- a/lib/unistring/unictype/categ_N.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_N table. */ -#include "categ_N.h" - -const uc_general_category_t UC_CATEGORY_N = - { UC_CATEGORY_MASK_N, 0, { &u_categ_N } }; diff --git a/lib/unistring/unictype/categ_N.h b/lib/unistring/unictype/categ_N.h deleted file mode 100644 index caf3dcd69d..0000000000 --- a/lib/unistring/unictype/categ_N.h +++ /dev/null @@ -1,443 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[40 << 4]; - } -u_categ_N = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 240, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 256, - 3 + 256 * sizeof (short) / sizeof (int) + 272, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 288, - 3 + 256 * sizeof (short) / sizeof (int) + 304, - 3 + 256 * sizeof (short) / sizeof (int) + 320, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 336, - 3 + 256 * sizeof (short) / sizeof (int) + 352, - 3 + 256 * sizeof (short) / sizeof (int) + 368, - 3 + 256 * sizeof (short) / sizeof (int) + 384, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 400, - 3 + 256 * sizeof (short) / sizeof (int) + 416, - 3 + 256 * sizeof (short) / sizeof (int) + 432, - 3 + 256 * sizeof (short) / sizeof (int) + 448, - 3 + 256 * sizeof (short) / sizeof (int) + 464, - 3 + 256 * sizeof (short) / sizeof (int) + 480, - 3 + 256 * sizeof (short) / sizeof (int) + 496, - 3 + 256 * sizeof (short) / sizeof (int) + 512, - 3 + 256 * sizeof (short) / sizeof (int) + 528, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 544, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 560, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 576, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 592, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 608, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 624, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, - 0x00000000, 0x720C0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000003FF, - 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x000003FF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x03F0FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x00FCFFC0, - 0x00000000, 0x00000000, 0x00000000, 0x0007FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x7F00FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x003FFFC0, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x000FFFFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x000003FF, 0x00000000, - 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x1FFFFE00, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0001C000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, - 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, - 0x00000000, 0x00000000, 0x07FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03FF03FF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03F10000, - 0x000003FF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, - 0x000003E7, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, - 0x0FFFFFFF, 0x00000000, 0x00000000, 0xFFFFFC00, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, - 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x20000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000080, 0x070003FE, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x003C0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x000003FF, 0xFFFEFF00, 0x00000000, - 0x000003FF, 0xFFFE0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x000003FF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x003F0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x000003FF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x03FF0000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFF80, 0x000FFFFF, 0xFFFFFFFF, 0x01FFFFFF, - 0x00000C00, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0FFFFFFE, - 0x00000000, 0x0000000F, 0x00000402, 0x00000000, - 0x00000000, 0x00000000, 0x003E0000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x000003FF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFF000000, 0xFE000000, - 0x00000000, 0x0000FF80, 0x00000000, 0xF8000000, - 0x0FC00000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x30000000, 0xFFFCFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x000000FF, 0x60000000, - 0xE0000000, 0x00000000, 0x00000000, 0x0000F800, - 0x00000000, 0x00000000, 0xFF000000, 0xFF000000, - 0x00000000, 0x0000FE00, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFC000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x7FFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFC0000, 0x0000FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, - 0x00000000, 0xFFC00000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x001FFFFE, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x000003FF, 0x00000000, - 0x00000000, 0x0FFF0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0007FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000003FF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFBFF0000, 0x00000003, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0003FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000FF80, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Nd.c b/lib/unistring/unictype/categ_Nd.c deleted file mode 100644 index 9272a0074f..0000000000 --- a/lib/unistring/unictype/categ_Nd.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Nd table. */ -#include "categ_Nd.h" - -const uc_general_category_t UC_CATEGORY_Nd = - { UC_CATEGORY_MASK_Nd, 0, { &u_categ_Nd } }; diff --git a/lib/unistring/unictype/categ_Nd.h b/lib/unistring/unictype/categ_Nd.h deleted file mode 100644 index 78404db0ce..0000000000 --- a/lib/unistring/unictype/categ_Nd.h +++ /dev/null @@ -1,371 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[22 << 4]; - } -u_categ_Nd = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 240, - 3 + 256 * sizeof (short) / sizeof (int) + 256, - 3 + 256 * sizeof (short) / sizeof (int) + 272, - 3 + 256 * sizeof (short) / sizeof (int) + 288, - 3 + 256 * sizeof (short) / sizeof (int) + 304, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 320, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 336, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000003FF, - 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x000003FF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x000003FF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x000003FF, 0x00000000, - 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000003FF, - 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03FF03FF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x000003FF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x000003FF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x03FF0000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x000003FF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, - 0x00000000, 0xFFC00000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x000003FF, 0x00000000, - 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000003FF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000003FF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF - } -}; diff --git a/lib/unistring/unictype/categ_Nl.c b/lib/unistring/unictype/categ_Nl.c deleted file mode 100644 index 45a1639716..0000000000 --- a/lib/unistring/unictype/categ_Nl.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Nl table. */ -#include "categ_Nl.h" - -const uc_general_category_t UC_CATEGORY_Nl = - { UC_CATEGORY_MASK_Nl, 0, { &u_categ_Nl } }; diff --git a/lib/unistring/unictype/categ_Nl.h b/lib/unistring/unictype/categ_Nl.h deleted file mode 100644 index e2bd11758b..0000000000 --- a/lib/unistring/unictype/categ_Nl.h +++ /dev/null @@ -1,311 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[7 << 4]; - } -u_categ_Nl = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0001C000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, - 0x000001E7, 0x00000000, 0x00000000, 0x00000000, - 0x00000080, 0x070003FE, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000402, 0x00000000, - 0x00000000, 0x00000000, 0x003E0000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_No.c b/lib/unistring/unictype/categ_No.c deleted file mode 100644 index 02abebcba9..0000000000 --- a/lib/unistring/unictype/categ_No.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_No table. */ -#include "categ_No.h" - -const uc_general_category_t UC_CATEGORY_No = - { UC_CATEGORY_MASK_No, 0, { &u_categ_No } }; diff --git a/lib/unistring/unictype/categ_No.h b/lib/unistring/unictype/categ_No.h deleted file mode 100644 index 7a1d89ea5f..0000000000 --- a/lib/unistring/unictype/categ_No.h +++ /dev/null @@ -1,395 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[28 << 4]; - } -u_categ_No = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 240, - 3 + 256 * sizeof (short) / sizeof (int) + 256, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 272, - 3 + 256 * sizeof (short) / sizeof (int) + 288, - 3 + 256 * sizeof (short) / sizeof (int) + 304, - 3 + 256 * sizeof (short) / sizeof (int) + 320, - 3 + 256 * sizeof (short) / sizeof (int) + 336, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 352, - 3 + 256 * sizeof (short) / sizeof (int) + 368, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 384, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 400, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 416, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 432, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x720C0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03F00000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00FC0000, - 0x00000000, 0x00000000, 0x00000000, 0x00070000, - 0x00000000, 0x00000000, 0x00000000, 0x7F000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x003F0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x000FFC00, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x1FFFFE00, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x04000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03F10000, - 0x000003FF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFF0000, 0x00000000, - 0x00000200, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, - 0x0FFFFFFF, 0x00000000, 0x00000000, 0xFFFFFC00, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, - 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x20000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x003C0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x000003FF, 0xFFFEFF00, 0x00000000, - 0x000003FF, 0xFFFE0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x003F0000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFF80, 0x000FFFFF, 0x00000000, 0x01E00000, - 0x00000C00, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0FFFFFFE, - 0x00000000, 0x0000000F, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFF000000, 0xFE000000, - 0x00000000, 0x0000FF80, 0x00000000, 0xF8000000, - 0x0FC00000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x30000000, 0xFFFCFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x000000FF, 0x60000000, - 0xE0000000, 0x00000000, 0x00000000, 0x0000F800, - 0x00000000, 0x00000000, 0xFF000000, 0xFF000000, - 0x00000000, 0x0000FE00, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xFC000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x7FFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFC0000, 0x0000003F, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x001FFFFE, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x0C000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0007FC00, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xF8000000, 0x00000003, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0003FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000FF80, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_P.c b/lib/unistring/unictype/categ_P.c deleted file mode 100644 index c72d27c900..0000000000 --- a/lib/unistring/unictype/categ_P.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_P table. */ -#include "categ_P.h" - -const uc_general_category_t UC_CATEGORY_P = - { UC_CATEGORY_MASK_P, 0, { &u_categ_P } }; diff --git a/lib/unistring/unictype/categ_P.h b/lib/unistring/unictype/categ_P.h deleted file mode 100644 index d528d15f5e..0000000000 --- a/lib/unistring/unictype/categ_P.h +++ /dev/null @@ -1,447 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[41 << 4]; - } -u_categ_P = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 240, - 3 + 256 * sizeof (short) / sizeof (int) + 256, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 272, - 3 + 256 * sizeof (short) / sizeof (int) + 288, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 304, - 3 + 256 * sizeof (short) / sizeof (int) + 320, - 3 + 256 * sizeof (short) / sizeof (int) + 336, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 352, - 3 + 256 * sizeof (short) / sizeof (int) + 368, - 3 + 256 * sizeof (short) / sizeof (int) + 384, - 3 + 256 * sizeof (short) / sizeof (int) + 400, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 416, - 3 + 256 * sizeof (short) / sizeof (int) + 432, - 3 + 256 * sizeof (short) / sizeof (int) + 448, - 3 + 256 * sizeof (short) / sizeof (int) + 464, - 3 + 256 * sizeof (short) / sizeof (int) + 480, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 496, - 3 + 256 * sizeof (short) / sizeof (int) + 512, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 528, - 3 + 256 * sizeof (short) / sizeof (int) + 544, - 3 + 256 * sizeof (short) / sizeof (int) + 560, - 3 + 256 * sizeof (short) / sizeof (int) + 576, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 592, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 608, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 624, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 640, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x8C00F7EE, 0xB8000001, 0x28000000, - 0x00000000, 0x88C00882, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x40000000, - 0x00000080, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFC000000, 0x00000000, - 0x00000600, 0x40000000, 0x00000049, 0x00180000, - 0xC8003600, 0x00000000, 0x00000000, 0x00003C00, - 0x00000000, 0x00000000, 0x00100000, 0x00000000, - 0x00003FFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03800000, - 0x00000000, 0x7FFF0000, 0x40000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00010030, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00010000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00100000, - 0x00000000, 0x00000000, 0x0C008000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0017FFF0, 0x3C000000, 0x00000000, 0x00000000, - 0x00000020, 0x00000000, 0x061F0000, 0x00000000, - 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x08000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000001FF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000001, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00006000, - 0x18000000, 0x00000000, 0x00000000, 0x00003800, - 0x00000000, 0x00600000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x07700000, 0x00000000, - 0x000007FF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000030, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xC0000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00003F7F, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFC000000, 0x00000001, - 0x00000000, 0x00000000, 0x00000000, 0xF0000000, - 0x00000000, 0xF8000000, 0x00000000, 0xC0000000, - 0x00000000, 0x00000000, 0x000800FF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFF0000, 0xFFFF00FF, 0x7FFBFFEF, 0x60000000, - 0x00006000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000F00, 0x00000600, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x003FFF00, - 0x00000000, 0x00000000, 0x00000060, 0x0000FFC0, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x01FFFFF8, 0x00000000, 0x0F000000, 0x30000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xDE000000, - 0x00000000, 0x00000000, 0x00000000, 0x00010000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFF7FFF, 0x00000007, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFF3FF0E, 0x20010000, 0x00000000, 0x00000000, - 0x00000000, 0x00000001, 0x00000000, 0x08000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xC0000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000E000, 0x00000000, 0x00000000, 0x40080000, - 0x00000000, 0x00000000, 0x00000000, 0x00FC0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00F00000, - 0x00000000, 0x00000000, 0x0000C000, 0x17000000, - 0x00000000, 0x0000C000, 0x80000000, 0x00000000, - 0x00000000, 0x00000000, 0xC0003FFE, 0x00000000, - 0x00000000, 0x00000000, 0xF0000000, 0x00000000, - 0x00000000, 0x00000000, 0xC0000000, 0x00030000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000800, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xC0000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03FF0000, 0xFFFF0000, 0xFFF7FFFF, 0x00000D0B, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x8C00F7EE, 0xB8000001, 0xA8000000, 0x0000003F, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000007, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x80000000, 0x00000000, 0x00010000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00008000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00800000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x80000000, 0x80000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x01FF0000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0x007F0000, - 0x00000000, 0xFE000000, 0x00000000, 0x00000000, - 0x1E000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00003F80, 0x00000000, - 0x00000000, 0xD8000000, 0x00000003, 0x00000000, - 0x00000000, 0x00000000, 0x0000000F, 0x00300000, - 0x00000000, 0x00000000, 0xE80023E0, 0x00000000, - 0x00000000, 0x3F000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000200, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000040, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00FFFFFE, 0x00000000, - 0x00000000, 0x00000000, 0x0000000E, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x70000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x001F0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0000C000, - 0x00000000, 0x00000000, 0x00000000, 0x00200000, - 0x00000000, 0x0F800000, 0x00000010, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x80000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000F80, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Pc.c b/lib/unistring/unictype/categ_Pc.c deleted file mode 100644 index 90cd5418e5..0000000000 --- a/lib/unistring/unictype/categ_Pc.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Pc table. */ -#include "categ_Pc.h" - -const uc_general_category_t UC_CATEGORY_Pc = - { UC_CATEGORY_MASK_Pc, 0, { &u_categ_Pc } }; diff --git a/lib/unistring/unictype/categ_Pc.h b/lib/unistring/unictype/categ_Pc.h deleted file mode 100644 index 0cc4d8cbf7..0000000000 --- a/lib/unistring/unictype/categ_Pc.h +++ /dev/null @@ -1,164 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[3 << 4]; - } -u_categ_Pc = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 32 - }, - { - 0x00000000, 0x00000000, 0x80000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x80000000, 0x00100001, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00180000, 0x0000E000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x80000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Pd.c b/lib/unistring/unictype/categ_Pd.c deleted file mode 100644 index 641319ec11..0000000000 --- a/lib/unistring/unictype/categ_Pd.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Pd table. */ -#include "categ_Pd.h" - -const uc_general_category_t UC_CATEGORY_Pd = - { UC_CATEGORY_MASK_Pd, 0, { &u_categ_Pd } }; diff --git a/lib/unistring/unictype/categ_Pd.h b/lib/unistring/unictype/categ_Pd.h deleted file mode 100644 index 1317375cb2..0000000000 --- a/lib/unistring/unictype/categ_Pd.h +++ /dev/null @@ -1,184 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[8 << 4]; - } -u_categ_Pd = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 32, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 48, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 64, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 80, - 2 + 128 * sizeof (short) / sizeof (int) + 96, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 112 - }, - { - 0x00000000, 0x00002000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000400, 0x40000000, 0x00000000, 0x00000000, - 0x00000001, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000040, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x003F0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x04800000, 0x0C000000, 0x00000001, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x10000000, 0x00010000, 0x00000000, 0x00000000, - 0x00000000, 0x00000001, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00060000, 0x01000000, 0x00000008, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00002000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Pe.c b/lib/unistring/unictype/categ_Pe.c deleted file mode 100644 index 09cf30dcd7..0000000000 --- a/lib/unistring/unictype/categ_Pe.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Pe table. */ -#include "categ_Pe.h" - -const uc_general_category_t UC_CATEGORY_Pe = - { UC_CATEGORY_MASK_Pe, 0, { &u_categ_Pe } }; diff --git a/lib/unistring/unictype/categ_Pe.h b/lib/unistring/unictype/categ_Pe.h deleted file mode 100644 index 3a4556d431..0000000000 --- a/lib/unistring/unictype/categ_Pe.h +++ /dev/null @@ -1,196 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[11 << 4]; - } -u_categ_Pe = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 48, - 2 + 128 * sizeof (short) / sizeof (int) + 64, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 80, - 2 + 128 * sizeof (short) / sizeof (int) + 96, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 112, - 2 + 128 * sizeof (short) / sizeof (int) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 144, - 2 + 128 * sizeof (short) / sizeof (int) + 160 - }, - { - 0x00000000, 0x00000200, 0x20000000, 0x20000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x28000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x10000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000040, 0x40000000, - 0x00004000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000A00, 0x00000400, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x002AAA00, - 0x00000000, 0x00000000, 0x00000040, 0x0000AA80, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x01555550, 0x00000000, 0x0A000000, 0x20000000, - 0x00000000, 0x000002A8, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xCAA2AA00, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x40000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x01000000, 0x55400000, 0x54000115, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000200, 0x20000000, 0x20000000, 0x00000009, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Pf.c b/lib/unistring/unictype/categ_Pf.c deleted file mode 100644 index bca6a0f2f4..0000000000 --- a/lib/unistring/unictype/categ_Pf.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Pf table. */ -#include "categ_Pf.h" - -const uc_general_category_t UC_CATEGORY_Pf = - { UC_CATEGORY_MASK_Pf, 0, { &u_categ_Pf } }; diff --git a/lib/unistring/unictype/categ_Pf.h b/lib/unistring/unictype/categ_Pf.h deleted file mode 100644 index a4e33ed823..0000000000 --- a/lib/unistring/unictype/categ_Pf.h +++ /dev/null @@ -1,164 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[3 << 4]; - } -u_categ_Pf = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x08000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x22000000, 0x04000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x20002428, 0x00000002, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Pi.c b/lib/unistring/unictype/categ_Pi.c deleted file mode 100644 index a296c19633..0000000000 --- a/lib/unistring/unictype/categ_Pi.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Pi table. */ -#include "categ_Pi.h" - -const uc_general_category_t UC_CATEGORY_Pi = - { UC_CATEGORY_MASK_Pi, 0, { &u_categ_Pi } }; diff --git a/lib/unistring/unictype/categ_Pi.h b/lib/unistring/unictype/categ_Pi.h deleted file mode 100644 index 71e9c1d2c3..0000000000 --- a/lib/unistring/unictype/categ_Pi.h +++ /dev/null @@ -1,164 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[3 << 4]; - } -u_categ_Pi = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000800, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x99000000, 0x02000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x10001214, 0x00000001, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Po.c b/lib/unistring/unictype/categ_Po.c deleted file mode 100644 index 9be3563677..0000000000 --- a/lib/unistring/unictype/categ_Po.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Po table. */ -#include "categ_Po.h" - -const uc_general_category_t UC_CATEGORY_Po = - { UC_CATEGORY_MASK_Po, 0, { &u_categ_Po } }; diff --git a/lib/unistring/unictype/categ_Po.h b/lib/unistring/unictype/categ_Po.h deleted file mode 100644 index e13bbff30a..0000000000 --- a/lib/unistring/unictype/categ_Po.h +++ /dev/null @@ -1,427 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[36 << 4]; - } -u_categ_Po = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 240, - 3 + 256 * sizeof (short) / sizeof (int) + 256, - 3 + 256 * sizeof (short) / sizeof (int) + 272, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 288, - 3 + 256 * sizeof (short) / sizeof (int) + 304, - 3 + 256 * sizeof (short) / sizeof (int) + 320, - 3 + 256 * sizeof (short) / sizeof (int) + 336, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 352, - 3 + 256 * sizeof (short) / sizeof (int) + 368, - 3 + 256 * sizeof (short) / sizeof (int) + 384, - 3 + 256 * sizeof (short) / sizeof (int) + 400, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 416, - 3 + 256 * sizeof (short) / sizeof (int) + 432, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 448, - 3 + 256 * sizeof (short) / sizeof (int) + 464, - 3 + 256 * sizeof (short) / sizeof (int) + 480, - 3 + 256 * sizeof (short) / sizeof (int) + 496, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 512, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 528, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 544, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 560, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x8C00D4EE, 0x10000001, 0x00000000, - 0x00000000, 0x80C00082, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x40000000, - 0x00000080, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFC000000, 0x00000000, - 0x00000200, 0x00000000, 0x00000049, 0x00180000, - 0xC8003600, 0x00000000, 0x00000000, 0x00003C00, - 0x00000000, 0x00000000, 0x00100000, 0x00000000, - 0x00003FFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03800000, - 0x00000000, 0x7FFF0000, 0x40000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00010030, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00010000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00100000, - 0x00000000, 0x00000000, 0x0C008000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0017FFF0, 0x00000000, 0x00000000, 0x00000000, - 0x00000020, 0x00000000, 0x061F0000, 0x00000000, - 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x08000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000001FF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00006000, - 0x00000000, 0x00000000, 0x00000000, 0x00003800, - 0x00000000, 0x00600000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x07700000, 0x00000000, - 0x000007BF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000030, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xC0000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00003F7F, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFC000000, 0x00000001, - 0x00000000, 0x00000000, 0x00000000, 0xF0000000, - 0x00000000, 0xF8000000, 0x00000000, 0xC0000000, - 0x00000000, 0x00000000, 0x000800FF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00C00000, 0x79FF00FF, 0x7FEBFF8E, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xDE000000, - 0x00000000, 0x00000000, 0x00000000, 0x00010000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xCB7FC9C3, 0xF3FF7C00, 0x00000002, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000000E, 0x20000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x08000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xC0000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000E000, 0x00000000, 0x00000000, 0x40080000, - 0x00000000, 0x00000000, 0x00000000, 0x00FC0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00F00000, - 0x00000000, 0x00000000, 0x0000C000, 0x17000000, - 0x00000000, 0x0000C000, 0x80000000, 0x00000000, - 0x00000000, 0x00000000, 0xC0003FFE, 0x00000000, - 0x00000000, 0x00000000, 0xF0000000, 0x00000000, - 0x00000000, 0x00000000, 0xC0000000, 0x00030000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000800, - 0x027F0000, 0x00010000, 0x80F71E60, 0x00000D03, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x8C00D4EE, 0x10000001, 0x00000000, 0x00000032, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000007, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x80000000, 0x00000000, 0x00010000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00008000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00800000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x80000000, 0x80000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x01FF0000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0x007F0000, - 0x00000000, 0xFE000000, 0x00000000, 0x00000000, - 0x1E000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00003F80, 0x00000000, - 0x00000000, 0xD8000000, 0x00000003, 0x00000000, - 0x00000000, 0x00000000, 0x0000000F, 0x00300000, - 0x00000000, 0x00000000, 0xE80023E0, 0x00000000, - 0x00000000, 0x3F000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000200, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000040, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00FFFFFE, 0x00000000, - 0x00000000, 0x00000000, 0x0000000E, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x70000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x001F0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0000C000, - 0x00000000, 0x00000000, 0x00000000, 0x00200000, - 0x00000000, 0x0F800000, 0x00000010, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x80000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000F80, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Ps.c b/lib/unistring/unictype/categ_Ps.c deleted file mode 100644 index 6b9893eb75..0000000000 --- a/lib/unistring/unictype/categ_Ps.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Ps table. */ -#include "categ_Ps.h" - -const uc_general_category_t UC_CATEGORY_Ps = - { UC_CATEGORY_MASK_Ps, 0, { &u_categ_Ps } }; diff --git a/lib/unistring/unictype/categ_Ps.h b/lib/unistring/unictype/categ_Ps.h deleted file mode 100644 index c1204ef81a..0000000000 --- a/lib/unistring/unictype/categ_Ps.h +++ /dev/null @@ -1,196 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[11 << 4]; - } -u_categ_Ps = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 48, - 2 + 128 * sizeof (short) / sizeof (int) + 64, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 80, - 2 + 128 * sizeof (short) / sizeof (int) + 96, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 112, - 2 + 128 * sizeof (short) / sizeof (int) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 144, - 2 + 128 * sizeof (short) / sizeof (int) + 160 - }, - { - 0x00000000, 0x00000100, 0x08000000, 0x08000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x14000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x08000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x44000000, 0x00000000, 0x00000020, 0x20000000, - 0x00002000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000500, 0x00000200, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00155500, - 0x00000000, 0x00000000, 0x00000020, 0x00005540, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00AAAAA8, 0x00000000, 0x05000000, 0x10000000, - 0x00000000, 0x00000154, 0x00000004, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x25515500, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x80000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00800000, 0xAAA00000, 0x2A00008A, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000100, 0x08000000, 0x88000000, 0x00000004, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_S.c b/lib/unistring/unictype/categ_S.c deleted file mode 100644 index 38aafdf26c..0000000000 --- a/lib/unistring/unictype/categ_S.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_S table. */ -#include "categ_S.h" - -const uc_general_category_t UC_CATEGORY_S = - { UC_CATEGORY_MASK_S, 0, { &u_categ_S } }; diff --git a/lib/unistring/unictype/categ_S.h b/lib/unistring/unictype/categ_S.h deleted file mode 100644 index 9a70acef18..0000000000 --- a/lib/unistring/unictype/categ_S.h +++ /dev/null @@ -1,479 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[49 << 4]; - } -u_categ_S = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - 3 + 256 * sizeof (short) / sizeof (int) + 240, - 3 + 256 * sizeof (short) / sizeof (int) + 256, - 3 + 256 * sizeof (short) / sizeof (int) + 272, - 3 + 256 * sizeof (short) / sizeof (int) + 288, - 3 + 256 * sizeof (short) / sizeof (int) + 304, - 3 + 256 * sizeof (short) / sizeof (int) + 320, - 3 + 256 * sizeof (short) / sizeof (int) + 336, - 3 + 256 * sizeof (short) / sizeof (int) + 352, - 3 + 256 * sizeof (short) / sizeof (int) + 368, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 384, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 400, - 3 + 256 * sizeof (short) / sizeof (int) + 416, - 3 + 256 * sizeof (short) / sizeof (int) + 432, - 3 + 256 * sizeof (short) / sizeof (int) + 448, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 464, - 3 + 256 * sizeof (short) / sizeof (int) + 480, - 3 + 256 * sizeof (short) / sizeof (int) + 496, - 3 + 256 * sizeof (short) / sizeof (int) + 512, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 528, - 3 + 256 * sizeof (short) / sizeof (int) + 544, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 560, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 576, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 592, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 608, - 3 + 256 * sizeof (short) / sizeof (int) + 624, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 640, - 3 + 256 * sizeof (short) / sizeof (int) + 656, - 3 + 256 * sizeof (short) / sizeof (int) + 672, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 688, - 3 + 256 * sizeof (short) / sizeof (int) + 704, - 3 + 256 * sizeof (short) / sizeof (int) + 720, - 3 + 256 * sizeof (short) / sizeof (int) + 736, - 3 + 256 * sizeof (short) / sizeof (int) + 752, - 3 + 256 * sizeof (short) / sizeof (int) + 768, - -1, - -1, - -1 - }, - { - 0x00000000, 0x70000810, 0x40000000, 0x50000001, - 0x00000000, 0x0113D37C, 0x00800000, 0x00800000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFC003C, 0xFFFFAFE0, - 0x00000000, 0x00000000, 0x00000000, 0x00200000, - 0x00000030, 0x00000000, 0x00000000, 0x00400000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000004, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000E000, 0x00000000, 0x00000000, 0x00000000, - 0x0000C9C0, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x40000000, 0x60000200, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00400000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0C0C0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00020000, - 0x00000000, 0x00000000, 0x00000000, 0x00010000, - 0x00000000, 0x00000000, 0x00000000, 0x07F80000, - 0x00000000, 0x00000000, 0x00000000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x02000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x80000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFCE8000E, 0x01500000, 0x00000000, 0x00000000, - 0x00000000, 0xC0000000, 0x01E0DFBF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xC0000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x08000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000001, 0x00000000, - 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x1FF007FE, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, - 0x00000000, 0x00000000, 0x00040010, 0x1C000000, - 0x00001C00, 0x7FFFFFFF, 0x00000000, 0x00000000, - 0xC1D0037B, 0x0C0042AF, 0x0000BC1F, 0x00000000, - 0xFFFF0C00, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFF0FF, 0xFFFFF9FF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, - 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0x00000000, - 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF, - 0xFFF00000, 0xFFFFFFFF, 0xFFFFFF9F, 0xFFFF003F, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFE000007, 0xFFFFFFFF, 0xF0FFFFFF, 0xCFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFCFFFFF, - 0xFF3FFFFF, 0xE3FFFFFF, 0x0003FDFF, 0x0000F000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000007E0, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, - 0x000C0010, 0xC0C00001, 0x00000000, 0x00000000, - 0x18000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFC30000, 0x00000000, 0xFFFFFFFF, 0x0000000F, - 0x7FFFFFFF, 0xFFFFFC00, 0x000100FF, 0xFFFFFFFF, - 0xFFFFFC00, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFF0000, 0xFFFFFFFF, 0x0000007F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x007FFFFF, 0x00000003, 0x00000000, 0x00000000, - 0x00000600, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x03C00F00, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03800000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x08000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000200, 0x00000000, 0x00000000, - 0x00000000, 0xFFFC0000, 0x00000003, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x30000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000274, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x70000810, 0x40000000, 0x50000001, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x30007F7F, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFF800000, 0x00000000, 0xFE000000, - 0x0FFF13FF, 0x00000001, 0xFFFF0000, 0x1FFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x01800000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000100, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x80000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xF0000000, 0x00000020, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x10000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, - 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0x00001C1F, - 0xFFFFF018, 0xFFFFC3FF, 0xFFFFFFFF, 0x000001FF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x00000023, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x08000002, 0x08000000, - 0x00200000, 0x00200000, 0x00008000, 0x00008000, - 0x00000200, 0x00000200, 0x00000008, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x07800000, 0x00000000, 0xFFDFE000, - 0x0000006F, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00030000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x000FFFFF, 0xFFFE7FFF, 0xFFFEFFFE, 0x003FFFFF, - 0xFFFF0000, 0xFFFF7FFF, 0xFFFFFFFF, 0xFFFF0FFF, - 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, - 0xFFFF0007, 0x07FFFFFF, 0x000301FF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFBFFFFFF, - 0xFFFFFFFF, 0xFFFFFFEF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x000F1FFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, - 0xFFFF0FFF, 0xFFFFFFFF, 0x03FF00FF, 0xFFFFFFFF, - 0xFFFF00FF, 0x00003FFF, 0x00000000, 0x00000000, - 0x01FF0000, 0x00000000, 0x00000000, 0x00000000, - 0x0000001F, 0x00000000, 0x00000001, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Sc.c b/lib/unistring/unictype/categ_Sc.c deleted file mode 100644 index eeb7769a19..0000000000 --- a/lib/unistring/unictype/categ_Sc.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Sc table. */ -#include "categ_Sc.h" - -const uc_general_category_t UC_CATEGORY_Sc = - { UC_CATEGORY_MASK_Sc, 0, { &u_categ_Sc } }; diff --git a/lib/unistring/unictype/categ_Sc.h b/lib/unistring/unictype/categ_Sc.h deleted file mode 100644 index 9711ec448c..0000000000 --- a/lib/unistring/unictype/categ_Sc.h +++ /dev/null @@ -1,196 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[11 << 4]; - } -u_categ_Sc = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 16, - 2 + 128 * sizeof (short) / sizeof (int) + 32, - 2 + 128 * sizeof (short) / sizeof (int) + 48, - 2 + 128 * sizeof (short) / sizeof (int) + 64, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 80, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 96, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 112, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 144, - 2 + 128 * sizeof (short) / sizeof (int) + 160 - }, - { - 0x00000000, 0x00000010, 0x00000000, 0x00000000, - 0x00000000, 0x0000003C, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00008000, 0x00000000, 0x00000000, 0x00000000, - 0x00000800, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x080C0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00020000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x02000000, - 0x00000000, 0x80000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x08000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x7FFFFFFF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x10000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000200, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000010, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000063 - } -}; diff --git a/lib/unistring/unictype/categ_Sk.c b/lib/unistring/unictype/categ_Sk.c deleted file mode 100644 index d448cb701d..0000000000 --- a/lib/unistring/unictype/categ_Sk.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Sk table. */ -#include "categ_Sk.h" - -const uc_general_category_t UC_CATEGORY_Sk = - { UC_CATEGORY_MASK_Sk, 0, { &u_categ_Sk } }; diff --git a/lib/unistring/unictype/categ_Sk.h b/lib/unistring/unictype/categ_Sk.h deleted file mode 100644 index afb9ed150e..0000000000 --- a/lib/unistring/unictype/categ_Sk.h +++ /dev/null @@ -1,319 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[9 << 4]; - } -u_categ_Sk = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x40000000, 0x00000001, - 0x00000000, 0x01108100, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFC003C, 0xFFFFAFE0, - 0x00000000, 0x00000000, 0x00000000, 0x00200000, - 0x00000030, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x18000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x007FFFFF, 0x00000003, 0x00000000, 0x00000000, - 0x00000600, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x08000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFFFC0000, 0x00000003, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x40000000, 0x00000001, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000008, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xF8000000 - } -}; diff --git a/lib/unistring/unictype/categ_Sm.c b/lib/unistring/unictype/categ_Sm.c deleted file mode 100644 index c19a6b1b11..0000000000 --- a/lib/unistring/unictype/categ_Sm.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Sm table. */ -#include "categ_Sm.h" - -const uc_general_category_t UC_CATEGORY_Sm = - { UC_CATEGORY_MASK_Sm, 0, { &u_categ_Sm } }; diff --git a/lib/unistring/unictype/categ_Sm.h b/lib/unistring/unictype/categ_Sm.h deleted file mode 100644 index 0003f177b0..0000000000 --- a/lib/unistring/unictype/categ_Sm.h +++ /dev/null @@ -1,335 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[13 << 4]; - } -u_categ_Sm = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x70000800, 0x00000000, 0x50000000, - 0x00000000, 0x00021000, 0x00800000, 0x00800000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00400000, - 0x000001C0, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00040010, 0x1C000000, - 0x00001C00, 0x00000000, 0x00000000, 0x00000000, - 0x01000000, 0x00000000, 0x0000081F, 0x00000000, - 0x0C1F0000, 0x00004049, 0x0014C000, 0xFFF00000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000003, 0x00000000, 0x10000000, - 0xF8000000, 0x000FFFFF, 0xF0000000, 0x00000003, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00800000, 0x00000002, 0xFF000000, - 0x00000000, 0x00000000, 0x00000000, 0x00008000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFF9F, 0xFFFF003F, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFE000007, 0xFFFFFFFF, 0xF0FFFFFF, 0xCFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0xFFFF0000, 0x00001F9F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000200, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000074, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x70000800, 0x00000000, 0x50000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00001E04, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x08000002, 0x08000000, - 0x00200000, 0x00200000, 0x00008000, 0x00008000, - 0x00000200, 0x00000200, 0x00000008, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00030000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_So.c b/lib/unistring/unictype/categ_So.c deleted file mode 100644 index 81487e9b31..0000000000 --- a/lib/unistring/unictype/categ_So.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_So table. */ -#include "categ_So.h" - -const uc_general_category_t UC_CATEGORY_So = - { UC_CATEGORY_MASK_So, 0, { &u_categ_So } }; diff --git a/lib/unistring/unictype/categ_So.h b/lib/unistring/unictype/categ_So.h deleted file mode 100644 index 86f4e4d967..0000000000 --- a/lib/unistring/unictype/categ_So.h +++ /dev/null @@ -1,451 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[2]; - short level2[2 << 7]; - /*unsigned*/ int level3[42 << 4]; - } -u_categ_So = -{ - { 2 }, - { - 3 * sizeof (int) / sizeof (short) + 0, - 3 * sizeof (int) / sizeof (short) + 128 - }, - { - 3 + 256 * sizeof (short) / sizeof (int) + 0, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 16, - 3 + 256 * sizeof (short) / sizeof (int) + 32, - 3 + 256 * sizeof (short) / sizeof (int) + 48, - 3 + 256 * sizeof (short) / sizeof (int) + 64, - 3 + 256 * sizeof (short) / sizeof (int) + 80, - 3 + 256 * sizeof (short) / sizeof (int) + 96, - 3 + 256 * sizeof (short) / sizeof (int) + 112, - 3 + 256 * sizeof (short) / sizeof (int) + 128, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 144, - 3 + 256 * sizeof (short) / sizeof (int) + 160, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 176, - 3 + 256 * sizeof (short) / sizeof (int) + 192, - 3 + 256 * sizeof (short) / sizeof (int) + 208, - 3 + 256 * sizeof (short) / sizeof (int) + 224, - 3 + 256 * sizeof (short) / sizeof (int) + 240, - 3 + 256 * sizeof (short) / sizeof (int) + 256, - 3 + 256 * sizeof (short) / sizeof (int) + 272, - 3 + 256 * sizeof (short) / sizeof (int) + 288, - 3 + 256 * sizeof (short) / sizeof (int) + 304, - 3 + 256 * sizeof (short) / sizeof (int) + 320, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 336, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 352, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 368, - 3 + 256 * sizeof (short) / sizeof (int) + 384, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 400, - 3 + 256 * sizeof (short) / sizeof (int) + 416, - 3 + 256 * sizeof (short) / sizeof (int) + 432, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 448, - 3 + 256 * sizeof (short) / sizeof (int) + 464, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 480, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 496, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 512, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 528, - 3 + 256 * sizeof (short) / sizeof (int) + 544, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 560, - 3 + 256 * sizeof (short) / sizeof (int) + 576, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3 + 256 * sizeof (short) / sizeof (int) + 592, - 3 + 256 * sizeof (short) / sizeof (int) + 608, - 3 + 256 * sizeof (short) / sizeof (int) + 624, - 3 + 256 * sizeof (short) / sizeof (int) + 640, - 3 + 256 * sizeof (short) / sizeof (int) + 656, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00014240, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000004, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00006000, 0x00000000, 0x00000000, 0x00000000, - 0x0000C000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x40000000, 0x60000200, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00400000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x04000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00010000, - 0x00000000, 0x00000000, 0x00000000, 0x05F80000, - 0x00000000, 0x00000000, 0x00000000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x02000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFCE8000E, 0x01500000, 0x00000000, 0x00000000, - 0x00000000, 0xC0000000, 0x01E0DFBF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xC0000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000001, 0x00000000, - 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x1FF007FE, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xC0D0037B, 0x0C0042AF, 0x0000B400, 0x00000000, - 0xF3E00C00, 0xFFFFBFB6, 0xFFEB3FFF, 0x000FFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFF0FF, 0xFFFFF9FC, 0xFFFFFFFF, 0xEFFFFFFF, - 0x07FFFFFF, 0xFFF00000, 0x0FFFFFFF, 0x07FFFFFC, - 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0x00000000, - 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFF7FFFFF, 0xFFFFFFFD, 0x00FFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF7FFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF, - 0xFFF00000, 0xFFFFFFFF, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0x0000FFFF, 0xFFFFE060, 0xFFCFFFFF, - 0xFF3FFFFF, 0xE3FFFFFF, 0x0003FDFF, 0x0000F000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x000007E0, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, - 0x000C0010, 0xC0C00001, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFC30000, 0x00000000, 0xFFFFFFFF, 0x0000000F, - 0x7FFFFFFF, 0xFFFFFC00, 0x000100FF, 0xFFFFFFFF, - 0xFFFFFC00, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFF0000, 0xFFFFFFFF, 0x0000007F, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x02C00F00, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x03800000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x20000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x30006110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFF800000, 0x00000000, 0xFE000000, - 0x0FFF13FF, 0x00000001, 0xFFFF0000, 0x1FFFFFFF, - 0x00000000, 0x00000000, 0x00000000, 0x01800000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000100, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x80000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xF0000000, 0x00000020, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x10000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, - 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0x00001C1F, - 0xFFFFF018, 0xFFFFC3FF, 0xFFFFFFFF, 0x000001FF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x00000023, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x00000000, 0x07800000, 0x00000000, 0xFFDFE000, - 0x0000006F, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0x000FFFFF, 0xFFFE7FFF, 0xFFFEFFFE, 0x003FFFFF, - 0xFFFF0000, 0xFFFF7FFF, 0xFFFFFFFF, 0xFFFF0FFF, - 0x07FFFFFF, 0x00000000, 0x00000000, 0xFFFFFFC0, - 0xFFFF0007, 0x07FFFFFF, 0x000301FF, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFBFFFFFF, - 0xFFFFFFFF, 0xFFFFFFEF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x000F1FFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, 0x00000000, - 0xFFFF0FFF, 0xFFFFFFFF, 0x03FF00FF, 0xFFFFFFFF, - 0xFFFF00FF, 0x00003FFF, 0x00000000, 0x00000000, - 0x01FF0000, 0x00000000, 0x00000000, 0x00000000, - 0x0000001F, 0x00000000, 0x00000001, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Z.c b/lib/unistring/unictype/categ_Z.c deleted file mode 100644 index b90b05b4de..0000000000 --- a/lib/unistring/unictype/categ_Z.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Z table. */ -#include "categ_Z.h" - -const uc_general_category_t UC_CATEGORY_Z = - { UC_CATEGORY_MASK_Z, 0, { &u_categ_Z } }; diff --git a/lib/unistring/unictype/categ_Z.h b/lib/unistring/unictype/categ_Z.h deleted file mode 100644 index 85f9fe9714..0000000000 --- a/lib/unistring/unictype/categ_Z.h +++ /dev/null @@ -1,168 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[4 << 4]; - } -u_categ_Z = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 48, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000001, 0x00000000, 0x00000000, - 0x00000000, 0x00000001, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000001, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x000007FF, 0x00008300, 0x80000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000001, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Zl.c b/lib/unistring/unictype/categ_Zl.c deleted file mode 100644 index 3fb8e47864..0000000000 --- a/lib/unistring/unictype/categ_Zl.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -static bool -uc_is_category_Zl (ucs4_t uc) -{ - return (uc == 0x2028); -} - -const uc_general_category_t UC_CATEGORY_Zl = - { UC_CATEGORY_MASK_Zl, 1, { &uc_is_category_Zl } }; diff --git a/lib/unistring/unictype/categ_Zl.h b/lib/unistring/unictype/categ_Zl.h deleted file mode 100644 index f257d47924..0000000000 --- a/lib/unistring/unictype/categ_Zl.h +++ /dev/null @@ -1,156 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[1 << 4]; - } -u_categ_Zl = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000100, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Zp.c b/lib/unistring/unictype/categ_Zp.c deleted file mode 100644 index 1d1c9f6d70..0000000000 --- a/lib/unistring/unictype/categ_Zp.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -static bool -uc_is_category_Zp (ucs4_t uc) -{ - return (uc == 0x2029); -} - -const uc_general_category_t UC_CATEGORY_Zp = - { UC_CATEGORY_MASK_Zp, 1, { &uc_is_category_Zp } }; diff --git a/lib/unistring/unictype/categ_Zp.h b/lib/unistring/unictype/categ_Zp.h deleted file mode 100644 index 66deca7b20..0000000000 --- a/lib/unistring/unictype/categ_Zp.h +++ /dev/null @@ -1,156 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[1 << 4]; - } -u_categ_Zp = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000200, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_Zs.c b/lib/unistring/unictype/categ_Zs.c deleted file mode 100644 index 7cb5542f22..0000000000 --- a/lib/unistring/unictype/categ_Zs.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_categ_Zs table. */ -#include "categ_Zs.h" - -const uc_general_category_t UC_CATEGORY_Zs = - { UC_CATEGORY_MASK_Zs, 0, { &u_categ_Zs } }; diff --git a/lib/unistring/unictype/categ_Zs.h b/lib/unistring/unictype/categ_Zs.h deleted file mode 100644 index e442025fc7..0000000000 --- a/lib/unistring/unictype/categ_Zs.h +++ /dev/null @@ -1,168 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[4 << 4]; - } -u_categ_Zs = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 48, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000001, 0x00000000, 0x00000000, - 0x00000000, 0x00000001, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000001, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x000007FF, 0x00008000, 0x80000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000001, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/categ_and.c b/lib/unistring/unictype/categ_and.c deleted file mode 100644 index e3e8279acf..0000000000 --- a/lib/unistring/unictype/categ_and.c +++ /dev/null @@ -1,55 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2007. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -uc_general_category_t -uc_general_category_and (uc_general_category_t category1, - uc_general_category_t category2) -{ - uint32_t bitmask; - uc_general_category_t result; - - bitmask = category1.bitmask & category2.bitmask; - - if (bitmask == category1.bitmask) - return category1; - - if (bitmask == category2.bitmask) - return category2; - - if (bitmask == 0) - return _UC_CATEGORY_NONE; - - result.bitmask = bitmask; - result.generic = 1; - result.lookup.lookup_fn = &uc_is_general_category_withtable; - return result; -} diff --git a/lib/unistring/unictype/categ_and_not.c b/lib/unistring/unictype/categ_and_not.c deleted file mode 100644 index 2e98ca314d..0000000000 --- a/lib/unistring/unictype/categ_and_not.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2007. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -uc_general_category_t -uc_general_category_and_not (uc_general_category_t category1, - uc_general_category_t category2) -{ - uint32_t bitmask; - uc_general_category_t result; - - bitmask = category1.bitmask & ~category2.bitmask; - - if (bitmask == category1.bitmask) - return category1; - - if (bitmask == 0) - return _UC_CATEGORY_NONE; - - result.bitmask = bitmask; - result.generic = 1; - result.lookup.lookup_fn = &uc_is_general_category_withtable; - return result; -} diff --git a/lib/unistring/unictype/categ_byname.c b/lib/unistring/unictype/categ_byname.c deleted file mode 100644 index 96382e6206..0000000000 --- a/lib/unistring/unictype/categ_byname.c +++ /dev/null @@ -1,201 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2011-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -#include -#include - -/* Indices stored in the 'struct named_category' elements of the perfect hash - table. We don't use uc_general_category_t values or their addresses - directly, because this would introduce load-time relocations. */ -enum -{ - UC_CATEGORY_INDEX_L, - UC_CATEGORY_INDEX_LC, - UC_CATEGORY_INDEX_Lu, - UC_CATEGORY_INDEX_Ll, - UC_CATEGORY_INDEX_Lt, - UC_CATEGORY_INDEX_Lm, - UC_CATEGORY_INDEX_Lo, - UC_CATEGORY_INDEX_M, - UC_CATEGORY_INDEX_Mn, - UC_CATEGORY_INDEX_Mc, - UC_CATEGORY_INDEX_Me, - UC_CATEGORY_INDEX_N, - UC_CATEGORY_INDEX_Nd, - UC_CATEGORY_INDEX_Nl, - UC_CATEGORY_INDEX_No, - UC_CATEGORY_INDEX_P, - UC_CATEGORY_INDEX_Pc, - UC_CATEGORY_INDEX_Pd, - UC_CATEGORY_INDEX_Ps, - UC_CATEGORY_INDEX_Pe, - UC_CATEGORY_INDEX_Pi, - UC_CATEGORY_INDEX_Pf, - UC_CATEGORY_INDEX_Po, - UC_CATEGORY_INDEX_S, - UC_CATEGORY_INDEX_Sm, - UC_CATEGORY_INDEX_Sc, - UC_CATEGORY_INDEX_Sk, - UC_CATEGORY_INDEX_So, - UC_CATEGORY_INDEX_Z, - UC_CATEGORY_INDEX_Zs, - UC_CATEGORY_INDEX_Zl, - UC_CATEGORY_INDEX_Zp, - UC_CATEGORY_INDEX_C, - UC_CATEGORY_INDEX_Cc, - UC_CATEGORY_INDEX_Cf, - UC_CATEGORY_INDEX_Cs, - UC_CATEGORY_INDEX_Co, - UC_CATEGORY_INDEX_Cn -}; - -#include "unictype/categ_byname.h" - -uc_general_category_t -uc_general_category_byname (const char *category_name) -{ - size_t len; - - len = strlen (category_name); - if (len <= MAX_WORD_LENGTH) - { - char buf[MAX_WORD_LENGTH + 1]; - const struct named_category *found; - - /* Copy category_name into buf, converting '_' and '-' to ' '. */ - { - const char *p = category_name; - char *q = buf; - - for (;; p++, q++) - { - char c = *p; - - if (c == '_' || c == '-') - c = ' '; - *q = c; - if (c == '\0') - break; - } - } - /* Here q == buf + len. */ - - /* Do a hash table lookup, with case-insensitive comparison. */ - found = uc_general_category_lookup (buf, len); - if (found != NULL) - /* Use a 'switch' statement here, because a table would introduce - load-time relocations. */ - switch (found->category_index) - { - case UC_CATEGORY_INDEX_L: - return UC_CATEGORY_L; - case UC_CATEGORY_INDEX_LC: - return UC_CATEGORY_LC; - case UC_CATEGORY_INDEX_Lu: - return UC_CATEGORY_Lu; - case UC_CATEGORY_INDEX_Ll: - return UC_CATEGORY_Ll; - case UC_CATEGORY_INDEX_Lt: - return UC_CATEGORY_Lt; - case UC_CATEGORY_INDEX_Lm: - return UC_CATEGORY_Lm; - case UC_CATEGORY_INDEX_Lo: - return UC_CATEGORY_Lo; - case UC_CATEGORY_INDEX_M: - return UC_CATEGORY_M; - case UC_CATEGORY_INDEX_Mn: - return UC_CATEGORY_Mn; - case UC_CATEGORY_INDEX_Mc: - return UC_CATEGORY_Mc; - case UC_CATEGORY_INDEX_Me: - return UC_CATEGORY_Me; - case UC_CATEGORY_INDEX_N: - return UC_CATEGORY_N; - case UC_CATEGORY_INDEX_Nd: - return UC_CATEGORY_Nd; - case UC_CATEGORY_INDEX_Nl: - return UC_CATEGORY_Nl; - case UC_CATEGORY_INDEX_No: - return UC_CATEGORY_No; - case UC_CATEGORY_INDEX_P: - return UC_CATEGORY_P; - case UC_CATEGORY_INDEX_Pc: - return UC_CATEGORY_Pc; - case UC_CATEGORY_INDEX_Pd: - return UC_CATEGORY_Pd; - case UC_CATEGORY_INDEX_Ps: - return UC_CATEGORY_Ps; - case UC_CATEGORY_INDEX_Pe: - return UC_CATEGORY_Pe; - case UC_CATEGORY_INDEX_Pi: - return UC_CATEGORY_Pi; - case UC_CATEGORY_INDEX_Pf: - return UC_CATEGORY_Pf; - case UC_CATEGORY_INDEX_Po: - return UC_CATEGORY_Po; - case UC_CATEGORY_INDEX_S: - return UC_CATEGORY_S; - case UC_CATEGORY_INDEX_Sm: - return UC_CATEGORY_Sm; - case UC_CATEGORY_INDEX_Sc: - return UC_CATEGORY_Sc; - case UC_CATEGORY_INDEX_Sk: - return UC_CATEGORY_Sk; - case UC_CATEGORY_INDEX_So: - return UC_CATEGORY_So; - case UC_CATEGORY_INDEX_Z: - return UC_CATEGORY_Z; - case UC_CATEGORY_INDEX_Zs: - return UC_CATEGORY_Zs; - case UC_CATEGORY_INDEX_Zl: - return UC_CATEGORY_Zl; - case UC_CATEGORY_INDEX_Zp: - return UC_CATEGORY_Zp; - case UC_CATEGORY_INDEX_C: - return UC_CATEGORY_C; - case UC_CATEGORY_INDEX_Cc: - return UC_CATEGORY_Cc; - case UC_CATEGORY_INDEX_Cf: - return UC_CATEGORY_Cf; - case UC_CATEGORY_INDEX_Cs: - return UC_CATEGORY_Cs; - case UC_CATEGORY_INDEX_Co: - return UC_CATEGORY_Co; - case UC_CATEGORY_INDEX_Cn: - return UC_CATEGORY_Cn; - default: - abort (); - } - } - /* Invalid category name. */ - return _UC_CATEGORY_NONE; -} diff --git a/lib/unistring/unictype/categ_byname.gperf b/lib/unistring/unictype/categ_byname.gperf deleted file mode 100644 index 54d1996ef7..0000000000 --- a/lib/unistring/unictype/categ_byname.gperf +++ /dev/null @@ -1,116 +0,0 @@ -/* Categories of Unicode characters. */ -struct named_category { int name; unsigned int category_index; }; -%struct-type -%ignore-case -%language=ANSI-C -%define hash-function-name general_category_hash -%define lookup-function-name uc_general_category_lookup -%readonly-tables -%global-table -%define word-array-name general_category_names -%pic -%define string-pool-name general_category_stringpool -%% -L, UC_CATEGORY_INDEX_L -LC, UC_CATEGORY_INDEX_LC -Lu, UC_CATEGORY_INDEX_Lu -Ll, UC_CATEGORY_INDEX_Ll -Lt, UC_CATEGORY_INDEX_Lt -Lm, UC_CATEGORY_INDEX_Lm -Lo, UC_CATEGORY_INDEX_Lo -M, UC_CATEGORY_INDEX_M -Mn, UC_CATEGORY_INDEX_Mn -Mc, UC_CATEGORY_INDEX_Mc -Me, UC_CATEGORY_INDEX_Me -N, UC_CATEGORY_INDEX_N -Nd, UC_CATEGORY_INDEX_Nd -Nl, UC_CATEGORY_INDEX_Nl -No, UC_CATEGORY_INDEX_No -P, UC_CATEGORY_INDEX_P -Pc, UC_CATEGORY_INDEX_Pc -Pd, UC_CATEGORY_INDEX_Pd -Ps, UC_CATEGORY_INDEX_Ps -Pe, UC_CATEGORY_INDEX_Pe -Pi, UC_CATEGORY_INDEX_Pi -Pf, UC_CATEGORY_INDEX_Pf -Po, UC_CATEGORY_INDEX_Po -S, UC_CATEGORY_INDEX_S -Sm, UC_CATEGORY_INDEX_Sm -Sc, UC_CATEGORY_INDEX_Sc -Sk, UC_CATEGORY_INDEX_Sk -So, UC_CATEGORY_INDEX_So -Z, UC_CATEGORY_INDEX_Z -Zs, UC_CATEGORY_INDEX_Zs -Zl, UC_CATEGORY_INDEX_Zl -Zp, UC_CATEGORY_INDEX_Zp -C, UC_CATEGORY_INDEX_C -Cc, UC_CATEGORY_INDEX_Cc -Cf, UC_CATEGORY_INDEX_Cf -Cs, UC_CATEGORY_INDEX_Cs -Co, UC_CATEGORY_INDEX_Co -Cn, UC_CATEGORY_INDEX_Cn -Letter, UC_CATEGORY_INDEX_L -Cased Letter, UC_CATEGORY_INDEX_LC -CasedLetter, UC_CATEGORY_INDEX_LC -Uppercase Letter, UC_CATEGORY_INDEX_Lu -UppercaseLetter, UC_CATEGORY_INDEX_Lu -Lowercase Letter, UC_CATEGORY_INDEX_Ll -LowercaseLetter, UC_CATEGORY_INDEX_Ll -Titlecase Letter, UC_CATEGORY_INDEX_Lt -TitlecaseLetter, UC_CATEGORY_INDEX_Lt -Modifier Letter, UC_CATEGORY_INDEX_Lm -ModifierLetter, UC_CATEGORY_INDEX_Lm -Other Letter, UC_CATEGORY_INDEX_Lo -OtherLetter, UC_CATEGORY_INDEX_Lo -Mark, UC_CATEGORY_INDEX_M -Nonspacing Mark, UC_CATEGORY_INDEX_Mn -NonspacingMark, UC_CATEGORY_INDEX_Mn -Spacing Mark, UC_CATEGORY_INDEX_Mc -SpacingMark, UC_CATEGORY_INDEX_Mc -Enclosing Mark, UC_CATEGORY_INDEX_Me -EnclosingMark, UC_CATEGORY_INDEX_Me -Number, UC_CATEGORY_INDEX_N -Decimal Number, UC_CATEGORY_INDEX_Nd -DecimalNumber, UC_CATEGORY_INDEX_Nd -Letter Number, UC_CATEGORY_INDEX_Nl -LetterNumber, UC_CATEGORY_INDEX_Nl -Other Number, UC_CATEGORY_INDEX_No -OtherNumber, UC_CATEGORY_INDEX_No -Punctuation, UC_CATEGORY_INDEX_P -Connector Punctuation, UC_CATEGORY_INDEX_Pc -ConnectorPunctuation, UC_CATEGORY_INDEX_Pc -Dash Punctuation, UC_CATEGORY_INDEX_Pd -DashPunctuation, UC_CATEGORY_INDEX_Pd -Open Punctuation, UC_CATEGORY_INDEX_Ps -OpenPunctuation, UC_CATEGORY_INDEX_Ps -Close Punctuation, UC_CATEGORY_INDEX_Pe -ClosePunctuation, UC_CATEGORY_INDEX_Pe -Initial Punctuation, UC_CATEGORY_INDEX_Pi -InitialPunctuation, UC_CATEGORY_INDEX_Pi -Final Punctuation, UC_CATEGORY_INDEX_Pf -FinalPunctuation, UC_CATEGORY_INDEX_Pf -Other Punctuation, UC_CATEGORY_INDEX_Po -OtherPunctuation, UC_CATEGORY_INDEX_Po -Symbol, UC_CATEGORY_INDEX_S -Math Symbol, UC_CATEGORY_INDEX_Sm -MathSymbol, UC_CATEGORY_INDEX_Sm -Currency Symbol, UC_CATEGORY_INDEX_Sc -CurrencySymbol, UC_CATEGORY_INDEX_Sc -Modifier Symbol, UC_CATEGORY_INDEX_Sk -ModifierSymbol, UC_CATEGORY_INDEX_Sk -Other Symbol, UC_CATEGORY_INDEX_So -OtherSymbol, UC_CATEGORY_INDEX_So -Separator, UC_CATEGORY_INDEX_Z -Space Separator, UC_CATEGORY_INDEX_Zs -SpaceSeparator, UC_CATEGORY_INDEX_Zs -Line Separator, UC_CATEGORY_INDEX_Zl -LineSeparator, UC_CATEGORY_INDEX_Zl -Paragraph Separator, UC_CATEGORY_INDEX_Zp -ParagraphSeparator, UC_CATEGORY_INDEX_Zp -Other, UC_CATEGORY_INDEX_C -Control, UC_CATEGORY_INDEX_Cc -Format, UC_CATEGORY_INDEX_Cf -Surrogate, UC_CATEGORY_INDEX_Cs -Private Use, UC_CATEGORY_INDEX_Co -PrivateUse, UC_CATEGORY_INDEX_Co -Unassigned, UC_CATEGORY_INDEX_Cn diff --git a/lib/unistring/unictype/categ_longname.c b/lib/unistring/unictype/categ_longname.c deleted file mode 100644 index 219ed240cf..0000000000 --- a/lib/unistring/unictype/categ_longname.c +++ /dev/null @@ -1,116 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2011-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2011. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -static const char u_category_long_name[30][22] = -{ - "Uppercase Letter", - "Lowercase Letter", - "Titlecase Letter", - "Modifier Letter", - "Other Letter", - "Nonspacing Mark", - "Spacing Mark", - "Enclosing Mark", - "Decimal Number", - "Letter Number", - "Other Number", - "Connector Punctuation", - "Dash Punctuation", - "Open Punctuation", - "Close Punctuation", - "Initial Punctuation", - "Final Punctuation", - "Other Punctuation", - "Math Symbol", - "Currency Symbol", - "Modifier Symbol", - "Other Symbol", - "Space Separator", - "Line Separator", - "Paragraph Separator", - "Control", - "Format", - "Surrogate", - "Private Use", - "Unassigned" -}; - -const char * -uc_general_category_long_name (uc_general_category_t category) -{ - uint32_t bitmask = category.bitmask; - /* bitmask should consist of a single bit. */ - if (bitmask != 0) - { - if ((bitmask & (bitmask - 1)) == 0) - { - int bit; - /* Take log2 using a variant of Robert Harley's method. - Found by Bruno Haible 1996. */ - uint32_t n = bitmask; - static const char ord2_tab[64] = - { - -1, 0, 1, 12, 2, 6, -1, 13, 3, -1, 7, -1, -1, -1, -1, 14, - 10, 4, -1, -1, 8, -1, -1, 25, -1, -1, -1, -1, -1, 21, 27, 15, - 31, 11, 5, -1, -1, -1, -1, -1, 9, -1, -1, 24, -1, -1, 20, 26, - 30, -1, -1, -1, -1, 23, -1, 19, 29, -1, 22, 18, 28, 17, 16, -1 - }; - n += n << 4; - n += n << 6; - n = (n << 16) - n; - bit = ord2_tab[n >> 26]; - - if (bit < sizeof (u_category_long_name) / sizeof (u_category_long_name[0])) - return u_category_long_name[bit]; - } - else - { - if (bitmask == UC_CATEGORY_MASK_L) - return "Letter"; - if (bitmask == UC_CATEGORY_MASK_LC) - return "Cased Letter"; - if (bitmask == UC_CATEGORY_MASK_M) - return "Mark"; - if (bitmask == UC_CATEGORY_MASK_N) - return "Number"; - if (bitmask == UC_CATEGORY_MASK_P) - return "Punctuation"; - if (bitmask == UC_CATEGORY_MASK_S) - return "Symbol"; - if (bitmask == UC_CATEGORY_MASK_Z) - return "Separator"; - if (bitmask == UC_CATEGORY_MASK_C) - return "Other"; - } - } - return NULL; -} diff --git a/lib/unistring/unictype/categ_name.c b/lib/unistring/unictype/categ_name.c deleted file mode 100644 index 8ab69a2eed..0000000000 --- a/lib/unistring/unictype/categ_name.c +++ /dev/null @@ -1,89 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2011-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -static const char u_category_name[30][3] = -{ - "Lu", "Ll", "Lt", "Lm", "Lo", "Mn", "Mc", "Me", "Nd", "Nl", - "No", "Pc", "Pd", "Ps", "Pe", "Pi", "Pf", "Po", "Sm", "Sc", - "Sk", "So", "Zs", "Zl", "Zp", "Cc", "Cf", "Cs", "Co", "Cn" -}; - -const char * -uc_general_category_name (uc_general_category_t category) -{ - uint32_t bitmask = category.bitmask; - /* bitmask should consist of a single bit. */ - if (bitmask != 0) - { - if ((bitmask & (bitmask - 1)) == 0) - { - int bit; - /* Take log2 using a variant of Robert Harley's method. - Found by Bruno Haible 1996. */ - uint32_t n = bitmask; - static const char ord2_tab[64] = - { - -1, 0, 1, 12, 2, 6, -1, 13, 3, -1, 7, -1, -1, -1, -1, 14, - 10, 4, -1, -1, 8, -1, -1, 25, -1, -1, -1, -1, -1, 21, 27, 15, - 31, 11, 5, -1, -1, -1, -1, -1, 9, -1, -1, 24, -1, -1, 20, 26, - 30, -1, -1, -1, -1, 23, -1, 19, 29, -1, 22, 18, 28, 17, 16, -1 - }; - n += n << 4; - n += n << 6; - n = (n << 16) - n; - bit = ord2_tab[n >> 26]; - - if (bit < sizeof (u_category_name) / sizeof (u_category_name[0])) - return u_category_name[bit]; - } - else - { - if (bitmask == UC_CATEGORY_MASK_L) - return "L"; - if (bitmask == UC_CATEGORY_MASK_LC) - return "LC"; - if (bitmask == UC_CATEGORY_MASK_M) - return "M"; - if (bitmask == UC_CATEGORY_MASK_N) - return "N"; - if (bitmask == UC_CATEGORY_MASK_P) - return "P"; - if (bitmask == UC_CATEGORY_MASK_S) - return "S"; - if (bitmask == UC_CATEGORY_MASK_Z) - return "Z"; - if (bitmask == UC_CATEGORY_MASK_C) - return "C"; - } - } - return NULL; -} diff --git a/lib/unistring/unictype/categ_none.c b/lib/unistring/unictype/categ_none.c deleted file mode 100644 index d68b04d3f4..0000000000 --- a/lib/unistring/unictype/categ_none.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2007. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -static bool -always_false (ucs4_t uc, uint32_t bitmask) -{ - return false; -} - -const uc_general_category_t _UC_CATEGORY_NONE = - { 0, 1, { &always_false } }; diff --git a/lib/unistring/unictype/categ_of.c b/lib/unistring/unictype/categ_of.c deleted file mode 100644 index 2c8c90c16d..0000000000 --- a/lib/unistring/unictype/categ_of.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_category table. */ -#include "categ_of.h" - -static inline int -lookup_withtable (ucs4_t uc) -{ - unsigned int index1 = uc >> category_header_0; - if (index1 < category_header_1) - { - int lookup1 = u_category.level1[index1]; - if (lookup1 >= 0) - { - unsigned int index2 = (uc >> category_header_2) & category_header_3; - int lookup2 = u_category.level2[lookup1 + index2]; - if (lookup2 >= 0) - { - unsigned int index3 = ((uc & category_header_4) + lookup2) * 5; - /* level3 contains 5-bit values, packed into 16-bit words. */ - unsigned int lookup3 = - ((u_category.level3[index3>>4] - | ((unsigned int) u_category.level3[(index3>>4)+1] << 16)) - >> (index3 % 16)) - & 0x1f; - - return lookup3; - } - } - return 29; /* = log2(UC_CATEGORY_MASK_Cn) */ - } - return -1; -} - -bool -uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask) -{ - int bit = lookup_withtable (uc); - - if (bit >= 0) - return ((bitmask >> bit) & 1); - else - return false; -} - -uc_general_category_t -uc_general_category (ucs4_t uc) -{ - int bit = lookup_withtable (uc); - uc_general_category_t result; - - if (bit >= 0) - { - result.bitmask = 1 << bit; - result.generic = 1; - result.lookup.lookup_fn = &uc_is_general_category_withtable; - return result; - } - else - return _UC_CATEGORY_NONE; -} diff --git a/lib/unistring/unictype/categ_of.h b/lib/unistring/unictype/categ_of.h deleted file mode 100644 index 85408c389f..0000000000 --- a/lib/unistring/unictype/categ_of.h +++ /dev/null @@ -1,1403 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Categories of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define category_header_0 16 -#define category_header_1 17 -#define category_header_2 7 -#define category_header_3 511 -#define category_header_4 127 -static const -struct - { - int level1[17]; - short level2[5 << 9]; - unsigned short level3[211 * 40 + 1]; - } -u_category = -{ - { - 0, 512, 1024, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1536, 2048, - 2048 - }, - { - 0, 128, 256, 384, 512, 640, 768, 896, - 1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, - 2048, 2176, 2304, 2432, 2560, 2688, 2816, 2944, - 3072, 3200, 3328, 3456, 3584, 3712, 3840, 3968, - 4096, 4224, 4352, 4352, 4480, 4608, 4736, 4864, - 4992, 4352, 4352, 4352, 5120, 5248, 5376, 5504, - 5632, 5760, 5888, 6016, 6144, 6272, 6400, 6528, - 6656, 6784, 6912, 7040, 7168, 7296, 7424, 7552, - 7680, 7808, 7936, 8064, 8192, 8192, 8320, 8448, - 8576, 8704, 8832, 8960, 9088, 8832, 9216, 9344, - 8832, 8832, 8192, 9472, 8192, 8192, 9600, 9728, - 9856, 9984, 10112, 10240, 10368, 10496, 8832, 10624, - 10752, 10880, 11008, 11136, 11264, 11392, 8832, 8832, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 11520, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 11648, - 11776, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 11904, 4352, 4352, 12032, 12160, 12288, 12416, - 12544, 12672, 12800, 12928, 13056, 13184, 13312, 13440, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 13568, - 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13696, - 13696, 13696, 13696, 13696, 13696, 13696, 13696, 13696, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 4352, 4352, 13952, 14080, 14208, 14336, - 4352, 4352, 14464, 14592, 14720, 14848, 14976, 15104, - 15232, 15360, 15488, 15616, -1, 15744, 15872, 16000, - 16128, 16256, 16384, -1, 4352, 4352, 16512, -1, - 16640, 16768, 16896, 17024, 17152, 17280, 17408, 17536, - 17664, 17792, -1, -1, 17920, -1, -1, -1, - 18048, 18176, 18304, 18432, 18560, 18688, 18816, -1, - -1, 18944, -1, 19072, 19200, 19328, 19456, -1, - -1, 19584, -1, -1, -1, 19712, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 19840, - 19968, 4352, 20096, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 20224, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 4352, 4352, 4352, 4352, 20352, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 4352, 4352, 4352, 4352, 20480, 20608, 20736, 20864, - -1, -1, -1, -1, -1, -1, 20992, 21120, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 21248, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 21376, 21504, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 8832, 21632, 21760, 21888, 22016, -1, 22144, -1, - 22272, 22400, 22528, 22656, 22784, 22912, 23040, 23168, - 8832, 8832, 8832, 8832, 23296, 23424, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 4352, 23552, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 23680, 23808, -1, -1, - 23936, 24064, 24192, 24320, 24448, -1, 8832, 24576, - 8832, 8832, 24704, 24832, 8832, 24960, 25088, 25216, - 25344, 25472, 25600, 25728, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 25856, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 25984, 4352, - 26112, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 4352, 4352, 4352, - 4352, 4352, 4352, 4352, 4352, 26240, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 4352, 4352, 4352, 4352, 26368, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 26496, -1, 26624, 26752, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 13824, - 13824, 13824, 13824, 13824, 13824, 13824, 13824, 26880 - }, - { - 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, - 0x9ce7, 0xce73, 0xc636, 0x6338, 0xcd8c, 0x1945, 0x8c59, 0x2108, - 0x1084, 0x0842, 0x28c5, 0x8ca5, 0x0011, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x1680, 0x5d1d, 0x8434, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x2684, 0xcc9d, - 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, - 0x9ce7, 0xce73, 0xce36, 0x6739, 0xb48d, 0x2792, 0xa575, 0x2a55, - 0x4345, 0x548c, 0xa811, 0x8a94, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0090, 0x0000, 0x0800, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2190, 0x1084, 0x0842, - 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, - 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, - 0x0200, 0x0108, 0x1004, 0x0040, 0x0401, 0x4010, 0x2100, 0x0080, - 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, - 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x0008, 0x1004, 0x0840, - 0x8001, 0x0200, 0x0100, 0x1000, 0x0002, 0x0400, 0x0200, 0x2000, - 0x0084, 0x0040, 0x8020, 0x0200, 0x0100, 0x0084, 0x0002, 0x0001, - 0x4010, 0x2000, 0x0204, 0x0842, 0x1084, 0x4402, 0x2200, 0x1100, - 0x0040, 0x0401, 0x4010, 0x0100, 0x1004, 0x0802, 0x8020, 0x0200, - 0x2008, 0x0080, 0x0802, 0x8801, 0x0200, 0x2000, 0x0080, 0x0802, - 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, - 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, - 0x4210, 0x2108, 0x1000, 0x0800, 0x0401, 0x0000, 0x2008, 0x0080, - 0x0802, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4240, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8c63, - 0xc631, 0x6318, 0x318c, 0x18c6, 0x5063, 0xe94a, 0x6318, 0x318c, - 0x18c6, 0x5063, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x8c63, 0x2831, - 0x94a5, 0x3a52, 0xa0e8, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, - 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, - 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, - 0xa529, 0x5294, 0x294a, 0x8020, 0x2830, 0xbd08, 0x108f, 0x0442, - 0xf7bd, 0x294e, 0x0088, 0x0e80, 0x003a, 0x0001, 0x0000, 0x0000, - 0x0000, 0x0000, 0x7400, 0x0000, 0x0000, 0x1000, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0042, 0x0021, 0x4200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, - 0x2008, 0x0080, 0x0802, 0x8421, 0x8200, 0x0104, 0x1080, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8020, 0x0200, - 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, - 0xd420, 0x4a52, 0xe729, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, - 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, - 0x0200, 0x2008, 0x0080, 0x0802, 0x0400, 0x4010, 0x0100, 0x1004, - 0x0840, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, - 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, - 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, - 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x001d, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x7de8, 0x18c4, 0x8c63, 0x843d, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x3d08, 0xdeb2, 0x9d6b, 0x94bd, 0x4a52, 0xa529, - 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x2b0a, 0x94b1, 0x4a58, 0xbd2c, 0xdef7, - 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0xde90, 0xef7b, 0x9084, 0x7b18, 0xbdef, 0xdef7, 0xef7b, - 0x6b5a, 0xb5ad, 0x3294, 0x19c6, 0xad63, 0x94a5, 0x4a52, 0xa529, - 0xa894, 0x8c7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1083, 0x0842, 0x8421, 0x5290, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x2108, 0x1084, - 0x0842, 0x18c5, 0x2123, 0x1085, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x4912, 0xa529, 0x5294, 0x2d74, 0x94a5, 0xc652, - 0xa528, 0x5296, 0x210a, 0x2108, 0x1084, 0x0842, 0x4211, 0x256a, - 0xc631, 0x6318, 0x318c, 0x18c6, 0xd763, 0x10a4, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xde94, - 0x2109, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x4842, 0xa529, 0x5294, 0x294a, 0xf485, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x2108, 0x1084, 0x0842, 0x4211, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x5290, 0x294a, 0x94a5, 0x4632, 0x318d, 0xde8e, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xa529, - 0x528c, 0x294a, 0x94a5, 0x4a32, 0xa329, 0x5294, 0xef4a, 0xc631, - 0x6318, 0x318c, 0x18c6, 0xec63, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0xa421, 0xd294, 0xec7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, - 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x7a42, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x4a52, - 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, - 0x14a5, 0x0843, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x5314, 0x3188, 0x94a6, 0x4a52, 0xc529, 0x6318, - 0x318a, 0x94a4, 0x4a52, 0x8429, 0x4210, 0x2108, 0x9484, 0x2312, - 0x0842, 0x8421, 0x4210, 0x1071, 0x0842, 0x8421, 0x4210, 0x2108, - 0x18a4, 0x09d3, 0x8421, 0x4210, 0x277a, 0x77a4, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x93a4, - 0x3bde, 0x8421, 0x5ef4, 0x3188, 0x94a6, 0x7a52, 0xa637, 0x6377, - 0xe90a, 0xf7bd, 0x7bde, 0xbd37, 0x4ef7, 0x2748, 0x9484, 0x3bd2, - 0x0842, 0x8421, 0x4210, 0xcc84, 0x94a9, 0x4a52, 0xd9d5, 0xef7b, - 0x14bd, 0x09d3, 0x8421, 0xde90, 0x277b, 0x77a4, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x13a4, - 0x09d2, 0x84e9, 0x5ef4, 0x31ba, 0x94a6, 0x7bde, 0xa52f, 0x52f7, - 0xef4a, 0xf4bd, 0x7bde, 0x9def, 0x4210, 0xe93a, 0xf7bd, 0x3bde, - 0x0842, 0x8421, 0x4210, 0x10a5, 0x4a42, 0xbdef, 0xdef7, 0xef7b, - 0x14bd, 0x09d3, 0x8421, 0x4210, 0x2748, 0x7484, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x13a4, - 0x09d2, 0x8421, 0x5ef4, 0x3188, 0x94a6, 0x4a52, 0xc52f, 0x6374, - 0xef4a, 0xf7a4, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x9484, 0x3bd2, - 0x0842, 0x8421, 0x4210, 0xf671, 0x7bde, 0x9def, 0xdef4, 0xef7b, - 0x18bd, 0x09d3, 0x8421, 0x4210, 0x277a, 0x77a4, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x13a4, - 0x09d2, 0x8421, 0x5ef4, 0x2988, 0x94a6, 0x7a52, 0xa637, 0x6377, - 0xef4a, 0xf7bd, 0x7bde, 0xbd31, 0x4ef7, 0x2748, 0x9484, 0x3bd2, - 0x0842, 0x8421, 0x4210, 0x2895, 0x94a5, 0xbd52, 0xdef7, 0xef7b, - 0x17bd, 0x09d2, 0x8421, 0xde90, 0x213b, 0x13a4, 0x4842, 0x9def, - 0x4e90, 0x213a, 0x77bd, 0x7a42, 0x84ef, 0xde90, 0x213b, 0x1084, - 0x0842, 0x8421, 0xdef4, 0x31bb, 0x98c5, 0xbbde, 0xa631, 0x631b, - 0xef4a, 0xf7a4, 0x7bde, 0xbd37, 0xdef7, 0xef7b, 0xf7bd, 0x3bde, - 0x0842, 0x8421, 0x4210, 0xa94a, 0x6b5a, 0x75ad, 0xded6, 0xef7b, - 0x18c5, 0x09d3, 0x8421, 0x4210, 0x213a, 0x13a4, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x1084, - 0x0842, 0x8421, 0xdef4, 0x2949, 0x18c5, 0x7a63, 0xa529, 0x5297, - 0xef4a, 0xf7bd, 0x4bde, 0x84e9, 0xde90, 0xef7b, 0x9484, 0x3bd2, - 0x0842, 0x8421, 0x4210, 0xf7bd, 0x7bde, 0x4aef, 0xa529, 0xaa94, - 0x18bd, 0x09d3, 0x8421, 0x4210, 0x213a, 0x13a4, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x1084, - 0x09d2, 0x8421, 0x5ef4, 0x2988, 0x18c6, 0x7a63, 0xa631, 0x531b, - 0xef4a, 0xf7bd, 0x8dde, 0xbde9, 0xdef7, 0xe93b, 0x9484, 0x3bd2, - 0x0842, 0x8421, 0x4210, 0x909d, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x18bd, 0x09d3, 0x8421, 0x4210, 0x213a, 0x13a4, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0xde90, 0x3189, 0x94a6, 0xba52, 0xa631, 0x631b, - 0xe90a, 0xf7bd, 0x7bde, 0xbd37, 0xdef7, 0x277b, 0x9484, 0x3bd2, - 0x0842, 0x8421, 0x4210, 0x294a, 0x54a5, 0xbdef, 0x4212, 0x2108, - 0x1bbd, 0x09d3, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, - 0x4213, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x7484, - 0x0842, 0x8421, 0xd210, 0xef49, 0x1084, 0x0842, 0xbde9, 0xde97, - 0x377b, 0x94c6, 0x7a52, 0xc6e9, 0x6318, 0x318c, 0xf7bd, 0x3bde, - 0x0842, 0x8421, 0x4210, 0x1bbd, 0x7b13, 0xbdef, 0xdef7, 0xef7b, - 0x109d, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x10a4, - 0x4a52, 0xa529, 0xde94, 0x9f7b, 0x1084, 0xc842, 0xa528, 0x5294, - 0x894a, 0x2108, 0x1084, 0x0842, 0xd8c5, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x909d, 0x7a4e, 0xa427, 0xde93, 0xef49, 0xf7bd, 0x084e, 0x9d21, - 0x4210, 0x2108, 0x109d, 0x49d2, 0xbd27, 0xd213, 0x2109, 0x10a4, - 0x4a52, 0xa529, 0x52f4, 0xef48, 0x1084, 0xfa42, 0xa5e8, 0x5294, - 0xef4a, 0x2108, 0x1084, 0x0842, 0x4ef5, 0x2108, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xd6a4, 0x631a, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6b1a, 0xa5ad, - 0x5ad4, 0xad6b, 0x2108, 0x1084, 0x0842, 0xa529, 0x5294, 0x294a, - 0x4b55, 0xb52d, 0xd734, 0x319c, 0x1084, 0x0842, 0x9d21, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0xef7a, 0x94bd, 0x4a52, 0xa529, 0x5294, 0x314a, - 0x94a5, 0x6252, 0x8429, 0x4210, 0x294a, 0x94a5, 0x4a52, 0xbd29, - 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0xad7a, 0xd6b5, 0x6b5a, 0xb5a9, 0x5ad6, - 0xad7b, 0xc631, 0x6b18, 0x35ad, 0xdec6, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x6310, 0x294a, 0x94c5, - 0x4a52, 0xa629, 0x6314, 0x214a, 0x2108, 0x1084, 0x0842, 0x18c5, - 0x8c63, 0x1084, 0x8842, 0xa531, 0x4210, 0x2948, 0x1885, 0x0863, - 0xc631, 0x6318, 0x210c, 0x94a4, 0x0852, 0x8421, 0x4210, 0x2108, - 0x1484, 0x4a63, 0xc631, 0x6318, 0x310a, 0x2108, 0x1084, 0x0842, - 0x6319, 0xad4a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0xbd07, 0xdef7, - 0xef41, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x3890, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, - 0xef48, 0x1084, 0x0842, 0xa4e9, 0x4213, 0xef48, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0xa421, 0x4213, 0xef48, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x13a4, - 0x4842, 0x84ef, 0x4210, 0xe908, 0x13a4, 0x4842, 0x84ef, 0x4210, - 0x2108, 0x1084, 0x0842, 0x84e9, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x13a4, 0x4842, 0x84ef, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0xde90, 0x294b, 0xc631, 0x6318, - 0x518c, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xef7a, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xd6b5, 0x6b5a, 0xb5ad, - 0xdef6, 0xef7b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x21ef, 0x1084, 0xef42, - 0x108c, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2462, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1096, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0xe690, 0xef7a, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x1890, 0x4a63, 0x1089, 0x0842, 0xa421, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x213a, 0x9484, 0x7a52, 0xbdef, - 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9484, - 0x6252, 0xbdec, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x9484, 0x7bd2, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, - 0x8421, 0x4210, 0x213a, 0x97a4, 0x7bd2, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x8a52, 0xa529, 0x5294, 0x318a, 0x18c6, 0x4c63, 0xa631, 0x5294, - 0x294a, 0x94a5, 0x6312, 0x311c, 0x49c6, 0xef4a, 0x2108, 0x1084, - 0x0842, 0xdef5, 0xef7b, 0x294a, 0x94a5, 0x4a52, 0xdef5, 0xef7b, - 0xc631, 0x2318, 0x318b, 0x52c6, 0xee8a, 0x2108, 0x1084, 0x0842, - 0xdef5, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x9084, 0x0841, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0xde90, 0xef7b, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0xe908, 0x14a5, 0x8c63, 0xc529, 0xd318, 0xef7b, 0x14c6, - 0x8c63, 0xa631, 0xd294, 0xef7b, 0xf7b5, 0x231e, 0x0842, 0x8421, - 0x4210, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0xef48, 0x1084, 0x7a42, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xd210, 0xef7b, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, - 0xef7b, 0x2108, 0x1084, 0x0842, 0xdea9, 0xad7b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xc529, - 0xd298, 0x8c7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x4c42, 0xa531, 0x5294, 0xe94a, 0x14c5, 0x4a63, - 0xa529, 0x5294, 0x318c, 0x98c6, 0x4a52, 0xa529, 0x5294, 0x2f7a, - 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0x2108, 0x1084, 0x0842, - 0xdef5, 0xef7b, 0xc631, 0x6318, 0x311c, 0x18c6, 0xef63, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0xe9ca, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x94a5, 0x0862, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x4c52, 0xa529, 0x5314, 0x318c, 0x14c6, 0x0863, 0x8421, 0xd210, - 0xef7b, 0x2108, 0x1084, 0x0842, 0x18c5, 0x8c63, 0xd6b1, 0x6b5a, - 0xb5ad, 0x52d6, 0x294a, 0x94a5, 0x6b52, 0xb5ad, 0x5ad6, 0xef7b, - 0x18a5, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x94c4, 0x8a52, 0xa531, 0x5298, 0x210a, 0x2108, - 0x1084, 0x0842, 0x4211, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, - 0xa531, 0x6318, 0x298a, 0x18a5, 0x7bd3, 0xbdef, 0x1ef7, 0x8c63, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x8c62, 0xc631, 0x5318, 0x294a, 0x94a5, - 0x4c62, 0xbd29, 0x18f7, 0x8c63, 0x2108, 0x1084, 0x0842, 0xdef5, - 0x2109, 0x2108, 0x1084, 0x0842, 0x4211, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x6321, 0x318c, 0x8c46, - 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, - 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xc631, 0x6318, 0xbd8c, 0xdef7, - 0xef7b, 0x94a5, 0x4a58, 0xa529, 0x5294, 0x294a, 0x94c5, 0x4a52, - 0x8529, 0x4210, 0x210a, 0x1884, 0x0853, 0xa5e9, 0xdef4, 0xef7b, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x3084, 0x18c6, 0x8c63, - 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, - 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, - 0x6318, 0x108c, 0x0842, 0x8421, 0x4210, 0x2308, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x3184, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, - 0xc631, 0x6318, 0x318c, 0x18c6, 0x94a5, 0x4a52, 0xa529, 0x5294, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, - 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xbdef, 0x5ef7, 0x294a, - 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, - 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, - 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, - 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, - 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, - 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x4200, 0x2108, - 0x1084, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, - 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, - 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, - 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, - 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x8421, 0x4210, 0x00ef, - 0x0000, 0xef40, 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x8421, - 0x4210, 0x0008, 0x0000, 0x0000, 0x8421, 0x4210, 0x00ef, 0x0000, - 0xef40, 0x8421, 0x4210, 0x1d08, 0xd074, 0x0741, 0x8421, 0x4210, - 0x0008, 0x0000, 0x0000, 0x8421, 0x4210, 0x2108, 0x1084, 0xef42, - 0x8421, 0x4210, 0x4208, 0x2108, 0x1084, 0x8421, 0x4210, 0x4208, - 0x2108, 0x1084, 0x8421, 0x4210, 0x4208, 0x2108, 0x1084, 0x8421, - 0x7a10, 0x0008, 0x2000, 0xa068, 0x8694, 0x7a10, 0x0008, 0x2000, - 0xa528, 0x8421, 0x7bd0, 0x0008, 0xd000, 0xa529, 0x8421, 0x4210, - 0x0008, 0x0000, 0xa528, 0x87bd, 0x7a10, 0x0008, 0x2000, 0xed28, - 0x5ad6, 0xad6b, 0xd6b5, 0xad5a, 0xd6b5, 0x318c, 0x58c6, 0x0f8c, - 0xf7b6, 0x7b60, 0xc631, 0x6318, 0x178c, 0xad6b, 0xb6b5, 0xc631, - 0x6318, 0xf18c, 0x18c1, 0x5c63, 0xc62b, 0x9b28, 0x318b, 0x18c6, - 0x8c63, 0xca31, 0x62b8, 0x318c, 0x18c6, 0xb463, 0x6b5a, 0xbbad, - 0x5ad6, 0xad6b, 0xd6b5, 0xf46a, 0x94ae, 0x4a52, 0x2949, 0x1b9b, - 0x294a, 0x94a5, 0x4a52, 0x2949, 0xeb9b, 0x8c63, 0xc631, 0x6318, - 0x318c, 0xef7a, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, - 0xe739, 0x739c, 0x39ce, 0xece7, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x39ce, 0x9ca7, 0x4a73, - 0xa529, 0x5294, 0x294a, 0xf7a5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x82b5, 0x6b5a, 0xb505, 0x0006, 0x0840, 0x8000, 0x4150, 0x12ad, - 0x0000, 0xad40, 0xd6b5, 0x2a0a, 0xa0a8, 0x0002, 0x0d40, 0x0000, - 0x0810, 0x2421, 0x1ad4, 0x0002, 0x4a52, 0x4129, 0x2108, 0x5954, - 0xa86b, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xa529, 0x5294, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, - 0x2529, 0x5210, 0x494a, 0xdad5, 0xef7b, 0x4a52, 0x6b29, 0xb5ad, - 0x594a, 0xad6b, 0x56b2, 0xab59, 0xb5ac, 0x5ad6, 0xacab, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0x94ab, 0xcab5, 0x6b2a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0xa52a, 0x5294, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, - 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, - 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, - 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, - 0xd6b5, 0x6b5a, 0xcdad, 0x5735, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd652, 0x6b5a, 0xb5ad, 0x5ab9, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x2ad6, 0xad6b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x2956, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, - 0x6b59, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x2ad6, 0x94a5, 0xd652, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xded6, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xded6, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, - 0x5529, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0xa52a, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb595, 0x5ad6, 0xad6b, 0xd655, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x52ad, 0x294a, 0x94a5, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0x956b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xcdad, 0xd735, 0x735c, 0x35cd, 0x9cd7, 0x4a52, 0xa529, 0x5294, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x6b55, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x4a52, 0x9b29, 0x5293, 0x294a, - 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x6529, - 0xcd73, 0xd735, 0x735c, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, - 0xca52, 0x9ae6, 0xae6b, 0xe6b9, 0x6b9a, 0xb9ae, 0x9ae6, 0x4e6b, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, - 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, - 0x94a5, 0x4a52, 0xa529, 0xcd94, 0x2735, 0x94a5, 0x4a52, 0xa529, - 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xd94a, 0x949c, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x4a52, - 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x6b29, 0x5295, 0x294a, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xb5ad, 0x5ad6, 0xad6b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ef, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0xdef6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad7, - 0xad6b, 0xf6b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0x5ef7, 0xad6b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe800, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0xe842, 0x0020, 0x4200, - 0x0100, 0x1004, 0x0000, 0x8020, 0x4010, 0x2108, 0x3084, 0x0006, - 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, - 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, - 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, - 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x6a10, - 0xb5ad, 0x1056, 0x2840, 0x80a5, 0x7bd0, 0x3def, 0x18c6, 0x8c55, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0xbd0f, 0xdef7, 0xef43, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0xbd21, 0xdef7, 0x1f7b, 0xf7b1, 0x7bde, 0xbdef, 0xdef7, 0x2f7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, - 0xdef7, 0xef7b, 0x1084, 0x0842, 0x84e9, 0x4210, 0xe908, 0x1084, - 0x0842, 0x84e9, 0x4210, 0xe908, 0x1084, 0x0842, 0x84e9, 0x4210, - 0xe908, 0x1084, 0x0842, 0x84e9, 0x4210, 0xe908, 0x94a5, 0x4a52, - 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, - 0x3e31, 0x60f8, 0xf18c, 0xf8c1, 0x8c60, 0xc631, 0x6318, 0x3164, - 0xf8b2, 0x8c60, 0x360f, 0x5cd7, 0xcd73, 0x18c5, 0x1c63, 0xc631, - 0x6318, 0x318c, 0x1632, 0x8c63, 0xb62c, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5af6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, - 0xc636, 0x0758, 0xcd49, 0xd735, 0x735c, 0xd5cd, 0x5cda, 0xcd73, - 0xc735, 0x739a, 0xa535, 0x5294, 0x294a, 0x5295, 0x318a, 0x8c6c, - 0x4631, 0x29ad, 0x41a5, 0xad62, 0x109d, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, - 0x4a14, 0x20c7, 0x108c, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x3890, 0x20c6, - 0xf7bd, 0x09de, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0x109d, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0xe908, 0x2ab5, 0x54a5, 0xb5ad, - 0x5ad6, 0xad6b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0xde90, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, - 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xed6b, 0x294a, 0x94a5, 0x4a52, 0x5ad5, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x4aad, 0xa529, - 0x5294, 0x2955, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0x294a, 0x94a5, 0x4a52, 0x5ad5, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x2955, - 0x94a5, 0x4a52, 0xa529, 0x5294, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x4842, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x4842, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0642, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0xef7a, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0xdef7, - 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x6321, 0x318c, 0x8c46, - 0x1084, 0x0842, 0x8421, 0x3210, 0x8c62, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x2108, 0x1084, 0x0842, 0xd211, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x8020, 0x0200, 0x2008, 0x0080, - 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, - 0x2008, 0x0080, 0x2902, 0x9ce7, 0x4a58, 0xa529, 0x5294, 0x1c4a, - 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, - 0x3080, 0x2946, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, - 0x294a, 0x94a5, 0x4a52, 0xc4a5, 0x6318, 0xbd8c, 0xdef7, 0xef7b, - 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x631d, - 0x318c, 0x18c6, 0x8294, 0x0200, 0x2008, 0x0080, 0x0802, 0x8021, - 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, - 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, - 0x2008, 0x0080, 0x0802, 0x8423, 0x4210, 0x0108, 0x1004, 0x0800, - 0x8020, 0x0200, 0x8308, 0x1052, 0x2040, 0x8020, 0x0210, 0x2008, - 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0000, 0xef40, 0x0000, - 0x0200, 0xbd08, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0x6327, 0x4204, 0x2108, - 0x1484, 0x4842, 0x8421, 0x4290, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x4a63, 0xb531, 0xdad6, 0xef7b, 0x294a, - 0x54a5, 0xb3ad, 0xdef6, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x6312, 0xbd8c, 0xdef7, 0xef7b, - 0x10c6, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x8c62, 0xc631, 0x6318, 0x318c, 0x18c6, 0x7a53, 0xbdef, 0xdef7, - 0x8c7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0x94a5, 0x4a52, - 0xa529, 0x5294, 0x294a, 0x10a5, 0x0842, 0x3121, 0x1246, 0xef49, - 0x2108, 0x1084, 0x0842, 0x4211, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x4842, 0xa529, 0x5294, 0x8c4a, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa529, 0x5294, - 0x294a, 0x18a5, 0x7bd3, 0xbdef, 0xdef7, 0x8f7b, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef7a, - 0x14a5, 0x0843, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9084, - 0x4c62, 0xa529, 0x5318, 0x318c, 0xc626, 0x6318, 0x318c, 0x18c6, - 0x1f63, 0x2108, 0x1084, 0x0842, 0xdef5, 0x8c7b, 0x1084, 0xca42, - 0x8420, 0x4210, 0x2108, 0x2108, 0x1084, 0x0842, 0x4211, 0xe908, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x5294, 0x314a, 0x14a6, - 0x4a63, 0xbde9, 0xdef7, 0xef7b, 0x9084, 0x0842, 0x8421, 0x5210, - 0xef4c, 0x2108, 0x1084, 0x0842, 0x1ef5, 0x8c63, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1083, 0x0842, 0xb5a9, 0x5312, 0x210c, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9485, - 0x0852, 0x8529, 0x4210, 0x2948, 0x90a4, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0x4277, 0x8c46, 0x1084, 0x0842, - 0x8421, 0x5310, 0x318a, 0x9231, 0x4c31, 0xbde9, 0xdef7, 0xef7b, - 0x109d, 0x0842, 0x9de9, 0x4210, 0xe908, 0x109d, 0x0842, 0xbde9, - 0xdef7, 0xef7b, 0x1084, 0x0842, 0x84e9, 0x4210, 0xe908, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x3a04, 0x18c6, 0x8421, 0x4210, - 0xbdef, 0xdef7, 0xef7b, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x8a63, - 0xc531, 0x6898, 0xef4a, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x7bd2, 0xbdef, 0xdef7, 0xef7b, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, 0x4277, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xd210, 0xef7b, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, - 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, - 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, - 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, - 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, - 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0xef48, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x8421, 0x4210, 0xbde8, 0xdef7, 0xef7b, 0xf7bd, 0x4210, 0xbd08, - 0xdef7, 0x2149, 0x1084, 0x0842, 0x4421, 0x4212, 0x2108, 0x1084, - 0x0842, 0x84e9, 0x4210, 0xe93a, 0x7484, 0x3a42, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x5084, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0xf694, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0x77bd, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x6b88, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x13bd, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x3210, 0xef6b, - 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0xc631, 0x6318, 0x2e6c, - 0xdef6, 0xef7b, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0xb191, - 0x9ab5, 0xae6b, 0xe6b9, 0x6b9a, 0xb9ae, 0x62e6, 0x2e6c, 0x18c6, - 0x5ad7, 0xc631, 0x631e, 0xac8c, 0xe6b9, 0x8b9a, 0x4a31, 0xa526, - 0x71ec, 0xd8c6, 0xef7b, 0x1084, 0x3a42, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xd77a, - 0xc63d, 0x6338, 0xcd8c, 0x1945, 0x8c59, 0x2108, 0x1084, 0x0842, - 0x28c5, 0x8ca5, 0x0011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1680, 0x5d1d, 0x8434, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x2684, 0x6c9d, 0x362e, 0x2317, - 0x8421, 0x4210, 0x2108, 0x1083, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x18c8, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0xe908, 0x13bd, 0x0842, 0xbd21, 0x4213, - 0x2108, 0x13bd, 0x0842, 0xbd21, 0x4213, 0xef7a, 0x4a73, 0xe75a, - 0x55ec, 0x294a, 0xed6b, 0xf7bd, 0x7bde, 0x5def, 0x5d6b, 0xef6b, - 0x1084, 0x0842, 0x8421, 0xd210, 0x2109, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x84e9, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4e90, 0x2748, 0x1084, 0x0842, 0x8421, 0x4210, - 0xef48, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xde90, 0xef7b, - 0xc631, 0x7bde, 0x4a57, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, - 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, - 0x7bd5, 0xb5af, 0x5ad6, 0xad6b, 0xa529, 0x5294, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x9494, 0xaa52, 0x5ad6, 0xad6b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x552a, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, - 0xdad6, 0xef7b, 0xf7b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xef4b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0xef7a, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0xf7a4, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x2945, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xd529, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x294a, 0x7bd5, 0xbdef, 0xdef7, 0xef7b, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1124, 0x0842, 0x8421, 0xdea4, - 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, 0xa529, 0xde94, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x8f48, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7bd2, 0x84ef, 0x4210, - 0x2108, 0xa531, 0x5294, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x2100, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0xef48, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xdef7, 0xef7b, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7bd2, - 0xbdef, 0xdef7, 0x8f7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0xbde9, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x4842, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, - 0xbd21, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x4842, 0xa4ef, 0x4213, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x4842, 0xa427, 0x4ef7, 0x277a, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x4842, 0x4a8f, 0xa529, 0x5294, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x55a9, 0xa529, 0x5294, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0xe908, 0xf7bd, 0x7bde, 0x4a57, 0xa529, 0x5294, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x9084, 0x484e, 0xbdef, 0xa577, 0x5294, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x8842, 0x4a52, - 0xd529, 0x8f7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0xdef4, 0x8f7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0xbd21, 0xaef7, 0x2114, 0x294a, 0x94a5, 0x4a52, 0xa529, - 0x5294, 0x2bbd, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, - 0x94a4, 0x4bd2, 0xbde9, 0x5ef7, 0x294a, 0x1084, 0x09d2, 0x9d21, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x7bd2, 0xa5ef, 0xde94, 0x2f7b, 0x294a, 0x94a5, 0xbd52, 0xdef7, - 0xef7b, 0xc631, 0x6318, 0xb18c, 0xdef7, 0xef7b, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x8a94, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x5294, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x9521, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4a42, - 0xbde9, 0xa577, 0x5294, 0xc631, 0x6318, 0xbdec, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x4842, 0x3def, 0x18c6, 0x8c63, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x4842, 0x4aef, 0xa529, 0x5294, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x9084, 0x7bde, 0x4aef, 0xa529, 0x5294, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xf484, 0x7bde, 0x3def, - 0x18c6, 0xef7b, 0xf7bd, 0x7bde, 0x5def, 0xa529, 0x5294, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x7bde, 0xbdef, 0xa52b, 0x5294, - 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, - 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xea94, - 0x18a6, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0xa521, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x3189, 0x18c6, - 0xef63, 0x2bbd, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x14a5, - 0x0842, 0x8421, 0x4210, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0x2f7b, - 0x18a5, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x98c6, - 0x4a52, 0xa631, 0x1894, 0x8c75, 0xf631, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0xa421, 0xdef7, 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, - 0x14a5, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0xa529, 0x6294, 0x294a, 0x94a5, - 0x3a52, 0x0842, 0x8421, 0x4210, 0xc631, 0x7bd8, 0xbdef, 0xdef7, - 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x9084, 0x2312, 0xbde9, 0xdef7, 0xef7b, - 0x18a5, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x4c63, 0xa529, 0x5294, 0x314a, 0x1086, 0x6242, 0x318c, 0x5296, - 0xef62, 0x2108, 0x1084, 0x0842, 0x4891, 0x8c62, 0x295d, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x7aa5, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x7484, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x6210, 0x298c, 0x18a5, - 0x4c53, 0x3129, 0x18c6, 0xef63, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0xa4e9, 0x4213, 0x2748, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2748, 0x1084, 0x0842, 0x2421, 0xdef6, 0xef7b, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2908, 0x98c6, 0x4a52, - 0xa529, 0xde94, 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, - 0x18a5, 0x09d3, 0x8421, 0x4210, 0x277a, 0x77a4, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x13a4, - 0x09d2, 0x8421, 0x5ef4, 0x3188, 0x18c5, 0x7a63, 0xa637, 0x6377, - 0xef4c, 0xf7a4, 0x7bde, 0xbd37, 0xdef7, 0x2109, 0x1884, 0x7bd3, - 0xa529, 0x5294, 0xef7a, 0x94a5, 0x7a52, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x98c6, - 0x4a52, 0xc529, 0x6314, 0x298c, 0x94c5, 0x4842, 0xbd24, 0xdef7, - 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x3108, 0x94c6, - 0x4a52, 0xc6ef, 0x5318, 0x298a, 0xc625, 0x6318, 0x318c, 0x18c6, - 0x8c63, 0xc631, 0x6318, 0x848c, 0x5210, 0xef4a, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x98c6, - 0x4a52, 0xa529, 0x6314, 0x298a, 0xc625, 0x7a48, 0xbdef, 0xdef7, - 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x6290, 0x318a, 0x94a5, - 0x8a52, 0xbd29, 0xdef7, 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0xdef4, 0x294b, 0x94c6, 0x8a52, 0xa529, 0xd294, 0xef7b, 0x2108, - 0x1084, 0x0842, 0x1529, 0xac63, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, - 0xdef7, 0xef7b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x2108, 0x1084, - 0x0842, 0xa529, 0x5294, 0xa94a, 0x7bde, 0xbdef, 0xdef7, 0x277b, - 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, - 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0xdef4, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, - 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, - 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, - 0x294a, 0x94a5, 0xea52, 0xc631, 0x7b18, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7bd2, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xe908, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0xa421, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xe908, 0x2108, 0x1084, - 0x0842, 0xdef5, 0x8c7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, - 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0xef48, 0x94a5, 0x6252, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x94a5, - 0x4a52, 0x3189, 0x58c6, 0xad6b, 0x8c63, 0x6b11, 0xbdef, 0xdef7, - 0xef7b, 0x2108, 0x1084, 0x0842, 0xa575, 0x5294, 0x754a, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xdef7, 0x2109, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xf7bd, 0x7bde, 0xbdef, - 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7a42, 0xbdef, 0xdef7, - 0xef7b, 0x18c4, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, - 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0xe98c, - 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0x2f7b, 0x94a5, 0xc631, 0x6318, - 0x318c, 0x18c6, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xf484, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, - 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0xde90, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0xef7a, - 0x1084, 0x0842, 0xa421, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, - 0x5ef4, 0x894b, 0x6b5a, 0x7bdd, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x8d5a, - 0xa529, 0x5ad4, 0x318d, 0x18c6, 0xb5ad, 0x5ad6, 0x52eb, 0x294a, - 0x94a5, 0x4b5a, 0xa529, 0x5294, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5296, 0xad4a, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x96b5, 0x6a52, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0xdef7, 0xef7b, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0xf54a, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0840, 0x8421, 0x7a10, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x8400, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x0084, 0x003a, 0x83bd, 0x01de, 0x1de8, 0x0000, 0x003a, 0x0000, - 0x4000, 0x2108, 0xd0f4, 0x0843, 0x8421, 0x43d0, 0x2108, 0x1084, - 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4000, 0x0007, 0xde80, 0x0001, 0x0000, 0x3a00, 0x0000, - 0x0000, 0x087a, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x0008, 0x0074, 0xe800, 0x0000, 0x3a00, 0xbde8, 0x0003, - 0x0000, 0x87a0, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x0084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x4000, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0840, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x8400, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x0084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x4000, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x00ef, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x8640, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1904, 0x0842, 0x0021, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1900, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x6410, 0x2108, - 0x0084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x6400, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x9042, 0x8421, 0x0210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x9000, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x4108, 0x1086, 0x0842, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x1086, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x0421, 0x4219, 0x2108, 0xd080, - 0x423b, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, - 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, - 0x4a52, 0xb5a9, 0x52d6, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, - 0xa529, 0x5294, 0xad6a, 0xd6b5, 0x4b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0xd6b5, 0x6a5a, 0x318d, 0xd8c6, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, - 0x52f7, 0x294a, 0x94bd, 0x4a52, 0xa529, 0x5294, 0x294a, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7a42, 0x4a57, 0xa529, - 0x5294, 0x94a5, 0x4a52, 0xbde9, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x09d2, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x909d, 0x7a4e, 0x9d27, 0x4210, 0x2108, 0x9084, - 0x084e, 0x9d21, 0xd274, 0xef7b, 0x93bd, 0x7bde, 0x9d27, 0xd274, - 0x2109, 0x909d, 0x7a4e, 0x9d27, 0xd274, 0x2749, 0x909d, 0x7a4e, - 0x8427, 0x4e90, 0x2108, 0x9084, 0x084e, 0x9d21, 0x4210, 0xe93a, - 0x1084, 0x0842, 0x8421, 0x4274, 0x2108, 0x1084, 0x0842, 0x8421, - 0xd210, 0xef7b, 0x109d, 0x09d2, 0x8421, 0x4274, 0x2108, 0x1084, - 0x0842, 0x8421, 0xd210, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf652, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xbdef, - 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0xd6bd, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6bd, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6bd, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbdef, 0xdef7, 0xef7b, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0xef7a, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0xdad6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0xded6, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0xd6b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0xded6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdef7, - 0xef7b, 0xf6b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x4a56, 0xa529, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5af6, 0xad6b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6bda, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xf7b5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xef7b, 0xd6b5, 0x7bda, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, - 0xad6b, 0xd6b5, 0x7b5a, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbdad, 0xdef7, - 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdef6, 0xef7b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0xd6b5, 0x6b5a, 0xbdad, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xef6b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, - 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xd6b5, 0x7b5a, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, - 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7b5, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0xbde9, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x7a42, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0xef48, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, - 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, - 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, - 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0x2108, 0xf484, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, - 0x4210, 0xef48, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, - 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, - 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, - 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0xf75d, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, - 0xdef7, 0xef7b, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, - 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, - 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, - 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, - 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, - 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, - 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, - 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, - 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, - 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, - 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, - 0xa529, 0x5294, 0x294a, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, - 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, - 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, - 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, - 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, - 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xef79, - 0x0000 - } -}; diff --git a/lib/unistring/unictype/categ_or.c b/lib/unistring/unictype/categ_or.c deleted file mode 100644 index 6bad952b55..0000000000 --- a/lib/unistring/unictype/categ_or.c +++ /dev/null @@ -1,52 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2007. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -uc_general_category_t -uc_general_category_or (uc_general_category_t category1, - uc_general_category_t category2) -{ - uint32_t bitmask; - uc_general_category_t result; - - bitmask = category1.bitmask | category2.bitmask; - - if (bitmask == category1.bitmask) - return category1; - - if (bitmask == category2.bitmask) - return category2; - - result.bitmask = bitmask; - result.generic = 1; - result.lookup.lookup_fn = &uc_is_general_category_withtable; - return result; -} diff --git a/lib/unistring/unictype/categ_test.c b/lib/unistring/unictype/categ_test.c deleted file mode 100644 index 0a9f53cc68..0000000000 --- a/lib/unistring/unictype/categ_test.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Categories of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -#include "bitmap.h" - -bool -uc_is_general_category (ucs4_t uc, uc_general_category_t category) -{ - if (category.generic) - return category.lookup.lookup_fn (uc, category.bitmask); - else - return bitmap_lookup (category.lookup.table, uc); -} diff --git a/lib/unistring/unictype/combiningclass.c b/lib/unistring/unictype/combiningclass.c deleted file mode 100644 index 239eb94ff5..0000000000 --- a/lib/unistring/unictype/combiningclass.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Combining classes of Unicode characters. - Copyright (C) 2002, 2006, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -/* Define u_combclass table. */ -#include "combiningclass.h" - -int -uc_combining_class (ucs4_t uc) -{ - unsigned int index1 = uc >> combclass_header_0; - if (index1 < combclass_header_1) - { - int lookup1 = u_combclass.level1[index1]; - if (lookup1 >= 0) - { - unsigned int index2 = (uc >> combclass_header_2) & combclass_header_3; - int lookup2 = u_combclass.level2[lookup1 + index2]; - if (lookup2 >= 0) - { - unsigned int index3 = (uc & combclass_header_4); - unsigned int lookup3 = u_combclass.level3[lookup2 + index3]; - - return lookup3; - } - } - } - return 0; -} diff --git a/lib/unistring/unictype/combiningclass.h b/lib/unistring/unictype/combiningclass.h deleted file mode 100644 index 4c91aa6f97..0000000000 --- a/lib/unistring/unictype/combiningclass.h +++ /dev/null @@ -1,1303 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Combining class of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define combclass_header_0 16 -#define combclass_header_1 2 -#define combclass_header_2 7 -#define combclass_header_3 511 -#define combclass_header_4 127 -static const -struct - { - int level1[2]; - short level2[2 << 9]; - unsigned char level3[72 << 7]; - } -u_combclass = -{ - { 0, 512 }, - { - -1, -1, -1, -1, -1, -1, 0, -1, - -1, 128, -1, 256, 384, 512, 640, 768, - 896, 1024, 1152, 1280, 1280, 1280, 1280, 1408, - 1536, 1280, 1408, 1664, 1792, 1920, 2048, 2176, - 2304, 2432, -1, -1, -1, -1, 2560, -1, - -1, -1, -1, -1, -1, -1, 2688, 2816, - -1, 2944, 3072, -1, 3200, 3328, 3456, 3584, - 3712, 3840, -1, 3968, -1, -1, -1, -1, - -1, 4096, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 4224, 4352, 4480, -1, -1, -1, -1, - 4608, 4736, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 4864, 4992, -1, -1, - 5120, 5248, 5376, 5504, -1, 5632, -1, 5760, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 5888, -1, - -1, -1, -1, -1, 6016, -1, -1, -1, - -1, -1, -1, 6144, -1, 6272, 6400, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 6528, 6656, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 6784, 6912, 7040, 7168, 7296, 7424, 7552, -1, - -1, 7680, -1, 7808, 7936, 8064, 8192, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 8320, 8448, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 8576, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 8704, 8832, 8960, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 9088, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 - }, - { - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 232, 220, 220, - 220, 220, 232, 216, 220, 220, 220, 220, - 220, 202, 202, 220, 220, 220, 220, 202, - 202, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 220, 1, 1, 1, 1, - 1, 220, 220, 220, 220, 230, 230, 230, - 230, 230, 230, 230, 230, 240, 230, 220, - 220, 220, 230, 230, 230, 220, 220, 0, - 230, 230, 230, 220, 220, 220, 220, 230, - 232, 220, 220, 230, 233, 234, 234, 233, - 234, 234, 233, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 230, 230, 230, 230, 230, - 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, - 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, - 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, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 220, 230, 230, 230, 230, 220, 230, - 230, 230, 222, 220, 230, 230, 230, 230, - 230, 230, 220, 220, 220, 220, 220, 220, - 230, 230, 220, 230, 230, 222, 228, 230, - 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 19, 20, 21, 22, 0, 23, - 0, 24, 25, 0, 230, 220, 0, 18, - 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, - 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, - 230, 230, 230, 230, 230, 230, 230, 230, - 30, 31, 32, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 28, 29, 30, 31, - 32, 33, 34, 230, 230, 220, 220, 230, - 230, 230, 230, 230, 220, 230, 230, 220, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 35, 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, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 230, 230, - 230, 230, 230, 230, 230, 0, 0, 230, - 230, 230, 230, 220, 230, 0, 0, 230, - 230, 0, 220, 230, 230, 220, 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, 36, 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, - 230, 220, 230, 230, 220, 230, 230, 220, - 220, 220, 230, 220, 220, 230, 220, 230, - 230, 230, 220, 230, 220, 230, 220, 230, - 220, 230, 230, 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, 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, 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, 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, 230, 230, 230, 230, 230, - 230, 230, 220, 230, 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, 230, 230, - 230, 230, 0, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 0, 230, 230, 230, - 0, 230, 230, 230, 230, 230, 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, 0, 0, - 0, 220, 220, 220, 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, 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, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 220, 230, 230, 220, 230, - 230, 220, 230, 230, 230, 220, 220, 220, - 27, 28, 29, 230, 230, 230, 220, 230, - 230, 220, 220, 230, 230, 230, 230, 230, - 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, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 0, 0, - 0, 230, 220, 230, 230, 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, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 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, 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, 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, 0, 0, - 0, 0, 0, 0, 0, 9, 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, 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, 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, 0, 0, - 0, 0, 0, 0, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 84, 91, 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, 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, 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, 9, 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, 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, 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, - 103, 103, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 107, 107, 107, 107, 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, 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, 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, - 118, 118, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 122, 122, 122, 122, 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, 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, - 220, 220, 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, 220, 0, 220, - 0, 216, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 129, 130, 0, 132, 0, 0, 0, - 0, 0, 130, 130, 130, 130, 0, 0, - 130, 0, 230, 230, 9, 0, 230, 230, - 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, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 220, 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, 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, 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, 7, - 0, 9, 9, 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, 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, 0, 0, 220, 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, 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, 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, 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, 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, 0, 0, - 0, 0, 0, 0, 0, 230, 230, 230, - 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, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 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, 9, 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, 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, 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, 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, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 230, 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, 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, 228, 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, 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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 222, 230, 220, 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, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 230, - 220, 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, 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, - 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 230, 230, 230, - 230, 230, 230, 230, 230, 0, 0, 220, - 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, - 0, 0, 0, 0, 0, 0, 0, 0, - 230, 230, 230, 230, 230, 220, 220, 220, - 220, 220, 220, 230, 230, 220, 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, 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, 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, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 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, 230, 220, 230, 230, 230, - 230, 230, 230, 230, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9, 9, 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, 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, 7, - 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, - 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, - 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, - 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, - 230, 230, 230, 0, 1, 220, 220, 220, - 220, 220, 230, 230, 220, 220, 220, 220, - 230, 0, 1, 1, 1, 1, 1, 1, - 1, 0, 0, 0, 0, 220, 0, 0, - 0, 0, 0, 0, 230, 0, 0, 0, - 230, 230, 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, 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, - 230, 230, 220, 230, 230, 230, 230, 230, - 230, 230, 220, 230, 230, 234, 214, 220, - 202, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 0, 0, - 0, 0, 0, 0, 233, 220, 230, 220, - 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, - 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, - 230, 230, 1, 1, 230, 230, 230, 230, - 1, 1, 1, 230, 230, 0, 0, 0, - 0, 230, 0, 0, 0, 1, 1, 230, - 220, 230, 1, 1, 220, 220, 220, 220, - 230, 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, 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, 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, 0, 0, 0, 0, 0, 0, 230, - 230, 230, 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, 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, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, - 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, - 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, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 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, - 0, 0, 218, 228, 232, 222, 224, 224, - 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, - 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, - 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, 8, 8, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 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, 230, 230, - 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, - 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, - 230, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 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, 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, 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, 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, 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, 9, 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, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 220, 220, 220, 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, 9, 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, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 9, 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, 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, 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, - 230, 0, 230, 230, 220, 0, 0, 230, - 230, 0, 0, 0, 0, 0, 230, 230, - 0, 230, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 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, 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, 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, 9, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 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, 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, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 230, 230, 230, 230, 230, 230, 230, 220, - 220, 220, 220, 220, 220, 220, 230, 230, - 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, - 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, - 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, - 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, - 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, - 0, 0, 0, 0, 0, 220, 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, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 220, 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, 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, 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, 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, 230, 230, - 230, 230, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 220, 0, 230, - 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, - 230, 1, 220, 0, 0, 0, 0, 9, - 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, - 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, - 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, - 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, - 0, 0, 0, 0, 0, 230, 220, 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, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 9, - 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, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 7, 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, 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, - 230, 230, 230, 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, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 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, 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, - 9, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 7, 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, 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, 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, 9, 7, 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, 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, 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, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 9, 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, 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, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 230, 230, - 230, 230, 230, 230, 230, 0, 0, 0, - 230, 230, 230, 230, 230, 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, 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, 9, 7, 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, 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, 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, 0, 0, 0, 9, - 7, 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, 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, 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, 0, 0, 0, 0, 0, 0, 9, - 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, - 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, - 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, 9, 7, - 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, - 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, - 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, 9, 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, 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, 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, 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, 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, - 1, 1, 1, 1, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 230, 230, 230, 230, 230, 230, 230, 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, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 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, 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, 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, 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, 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, 216, 216, 1, - 1, 1, 0, 0, 0, 226, 216, 216, - 216, 216, 216, 0, 0, 0, 0, 0, - 0, 0, 0, 220, 220, 220, 220, 220, - 220, 220, 220, 0, 0, 230, 230, 230, - 230, 230, 220, 220, 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, 230, 230, 230, 230, 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, 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, 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, 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, 230, 230, 230, 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, 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, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 220, 220, 220, 220, 220, 220, 220, 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, 0 - } -}; diff --git a/lib/unistring/unictype/pr_default_ignorable_code_point.c b/lib/unistring/unictype/pr_default_ignorable_code_point.c deleted file mode 100644 index d83f7585f8..0000000000 --- a/lib/unistring/unictype/pr_default_ignorable_code_point.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Properties of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -#include "bitmap.h" - -/* Define u_property_default_ignorable_code_point table. */ -#include "pr_default_ignorable_code_point.h" - -bool -uc_is_property_default_ignorable_code_point (ucs4_t uc) -{ - return bitmap_lookup (&u_property_default_ignorable_code_point, uc); -} - -const uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT = - { &uc_is_property_default_ignorable_code_point }; diff --git a/lib/unistring/unictype/pr_default_ignorable_code_point.h b/lib/unistring/unictype/pr_default_ignorable_code_point.h deleted file mode 100644 index 9200d79028..0000000000 --- a/lib/unistring/unictype/pr_default_ignorable_code_point.h +++ /dev/null @@ -1,472 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Properties of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[15]; - short level2[3 << 7]; - /*unsigned*/ int level3[12 << 4]; - } -u_property_default_ignorable_code_point = -{ - { 15 }, - { - 16 * sizeof (int) / sizeof (short) + 0, - 16 * sizeof (int) / sizeof (short) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 * sizeof (int) / sizeof (short) + 256 - }, - { - 16 + 384 * sizeof (short) / sizeof (int) + 0, - 16 + 384 * sizeof (short) / sizeof (int) + 16, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 32, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 48, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 64, - 16 + 384 * sizeof (short) / sizeof (int) + 80, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 96, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 112, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 128, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 144, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 160, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 16 + 384 * sizeof (short) / sizeof (int) + 176, - 16 + 384 * sizeof (short) / sizeof (int) + 176, - 16 + 384 * sizeof (short) / sizeof (int) + 176, - 16 + 384 * sizeof (short) / sizeof (int) + 176, - 16 + 384 * sizeof (short) / sizeof (int) + 176, - 16 + 384 * sizeof (short) / sizeof (int) + 176, - 16 + 384 * sizeof (short) / sizeof (int) + 176, - 16 + 384 * sizeof (short) / sizeof (int) + 176, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00002000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00008000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x10000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x80000000, 0x00000001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00300000, 0x00000000, 0x00000000, - 0x00007800, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000F800, 0x00007C00, 0x00000000, 0x0000FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000010, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x80000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000001, 0x00000000, 0x01FF0000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x0000000F, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x07F80000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, - 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF - } -}; diff --git a/lib/unistring/unictype/pr_join_control.c b/lib/unistring/unictype/pr_join_control.c deleted file mode 100644 index b060931ef7..0000000000 --- a/lib/unistring/unictype/pr_join_control.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Properties of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -#if 0 - -#include "bitmap.h" - -/* Define u_property_join_control table. */ -#include "pr_join_control.h" - -bool -uc_is_property_join_control (ucs4_t uc) -{ - return bitmap_lookup (&u_property_join_control, uc); -} - -#else - -bool -uc_is_property_join_control (ucs4_t uc) -{ - return (uc >= 0x200C && uc <= 0x200D); -} - -#endif - -const uc_property_t UC_PROPERTY_JOIN_CONTROL = - { &uc_is_property_join_control }; diff --git a/lib/unistring/unictype/pr_join_control.h b/lib/unistring/unictype/pr_join_control.h deleted file mode 100644 index db6c9b3305..0000000000 --- a/lib/unistring/unictype/pr_join_control.h +++ /dev/null @@ -1,156 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Properties of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[1]; - short level2[1 << 7]; - /*unsigned*/ int level3[1 << 4]; - } -u_property_join_control = -{ - { 1 }, - { 2 * sizeof (int) / sizeof (short) + 0 }, - { - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2 + 128 * sizeof (short) / sizeof (int) + 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1 - }, - { - 0x00003000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 - } -}; diff --git a/lib/unistring/unictype/pr_not_a_character.c b/lib/unistring/unictype/pr_not_a_character.c deleted file mode 100644 index 113544be3e..0000000000 --- a/lib/unistring/unictype/pr_not_a_character.c +++ /dev/null @@ -1,45 +0,0 @@ -/* Properties of Unicode characters. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unictype.h" - -#include "bitmap.h" - -/* Define u_property_not_a_character table. */ -#include "pr_not_a_character.h" - -bool -uc_is_property_not_a_character (ucs4_t uc) -{ - return bitmap_lookup (&u_property_not_a_character, uc); -} - -const uc_property_t UC_PROPERTY_NOT_A_CHARACTER = - { &uc_is_property_not_a_character }; diff --git a/lib/unistring/unictype/pr_not_a_character.h b/lib/unistring/unictype/pr_not_a_character.h deleted file mode 100644 index 1148566c77..0000000000 --- a/lib/unistring/unictype/pr_not_a_character.h +++ /dev/null @@ -1,306 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Properties of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ -#define header_0 16 -#define header_2 9 -#define header_3 127 -#define header_4 15 -static const -struct - { - int header[1]; - int level1[17]; - short level2[2 << 7]; - /*unsigned*/ int level3[2 << 4]; - } -u_property_not_a_character = -{ - { 17 }, - { - 18 * sizeof (int) / sizeof (short) + 0, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128, - 18 * sizeof (int) / sizeof (short) + 128 - }, - { - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 256 * sizeof (short) / sizeof (int) + 0, - 18 + 256 * sizeof (short) / sizeof (int) + 16, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 18 + 256 * sizeof (short) / sizeof (int) + 16 - }, - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFFFF0000, 0x0000FFFF, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0xC0000000 - } -}; diff --git a/lib/unistring/uninorm.in.h b/lib/unistring/uninorm.in.h deleted file mode 100644 index 9c15471ebd..0000000000 --- a/lib/unistring/uninorm.in.h +++ /dev/null @@ -1,258 +0,0 @@ -/* Normalization forms (composition and decomposition) of Unicode strings. - Copyright (C) 2001-2002, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _UNINORM_H -#define _UNINORM_H - -/* Get size_t. */ -#include - -#include "unitypes.h" - - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Conventions: - - All functions prefixed with u8_ operate on UTF-8 encoded strings. - Their unit is an uint8_t (1 byte). - - All functions prefixed with u16_ operate on UTF-16 encoded strings. - Their unit is an uint16_t (a 2-byte word). - - All functions prefixed with u32_ operate on UCS-4 encoded strings. - Their unit is an uint32_t (a 4-byte word). - - All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly - n units. - - Functions returning a string result take a (resultbuf, lengthp) argument - pair. If resultbuf is not NULL and the result fits into *lengthp units, - it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly - allocated string is returned. In both cases, *lengthp is set to the - length (number of units) of the returned string. In case of error, - NULL is returned and errno is set. */ - - -enum -{ - UC_DECOMP_CANONICAL,/* Canonical decomposition. */ - UC_DECOMP_FONT, /* A font variant (e.g. a blackletter form). */ - UC_DECOMP_NOBREAK, /* A no-break version of a space or hyphen. */ - UC_DECOMP_INITIAL, /* An initial presentation form (Arabic). */ - UC_DECOMP_MEDIAL, /* A medial presentation form (Arabic). */ - UC_DECOMP_FINAL, /* A final presentation form (Arabic). */ - UC_DECOMP_ISOLATED,/* An isolated presentation form (Arabic). */ - UC_DECOMP_CIRCLE, /* An encircled form. */ - UC_DECOMP_SUPER, /* A superscript form. */ - UC_DECOMP_SUB, /* A subscript form. */ - UC_DECOMP_VERTICAL,/* A vertical layout presentation form. */ - UC_DECOMP_WIDE, /* A wide (or zenkaku) compatibility character. */ - UC_DECOMP_NARROW, /* A narrow (or hankaku) compatibility character. */ - UC_DECOMP_SMALL, /* A small variant form (CNS compatibility). */ - UC_DECOMP_SQUARE, /* A CJK squared font variant. */ - UC_DECOMP_FRACTION,/* A vulgar fraction form. */ - UC_DECOMP_COMPAT /* Otherwise unspecified compatibility character. */ -}; - -/* Maximum size of decomposition of a single Unicode character. */ -#define UC_DECOMPOSITION_MAX_LENGTH 32 - -/* Return the character decomposition mapping of a Unicode character. - DECOMPOSITION must point to an array of at least UC_DECOMPOSITION_MAX_LENGTH - ucs_t elements. - When a decomposition exists, DECOMPOSITION[0..N-1] and *DECOMP_TAG are - filled and N is returned. Otherwise -1 is returned. */ -extern int - uc_decomposition (ucs4_t uc, int *decomp_tag, ucs4_t *decomposition); - -/* Return the canonical character decomposition mapping of a Unicode character. - DECOMPOSITION must point to an array of at least UC_DECOMPOSITION_MAX_LENGTH - ucs_t elements. - When a decomposition exists, DECOMPOSITION[0..N-1] is filled and N is - returned. Otherwise -1 is returned. */ -extern int - uc_canonical_decomposition (ucs4_t uc, ucs4_t *decomposition); - - -/* Attempt to combine the Unicode characters uc1, uc2. - uc1 is known to have canonical combining class 0. - Return the combination of uc1 and uc2, if it exists. - Return 0 otherwise. - Not all decompositions can be recombined using this function. See the - Unicode file CompositionExclusions.txt for details. */ -extern ucs4_t - uc_composition (ucs4_t uc1, ucs4_t uc2) - _UC_ATTRIBUTE_CONST; - - -/* An object of type uninorm_t denotes a Unicode normalization form. */ -struct unicode_normalization_form; -typedef const struct unicode_normalization_form *uninorm_t; - -/* UNINORM_NFD: Normalization form D: canonical decomposition. */ -extern const struct unicode_normalization_form uninorm_nfd; -#define UNINORM_NFD (&uninorm_nfd) - -/* UNINORM_NFC: Normalization form C: canonical decomposition, then - canonical composition. */ -extern const struct unicode_normalization_form uninorm_nfc; -#define UNINORM_NFC (&uninorm_nfc) - -/* UNINORM_NFKD: Normalization form KD: compatibility decomposition. */ -extern const struct unicode_normalization_form uninorm_nfkd; -#define UNINORM_NFKD (&uninorm_nfkd) - -/* UNINORM_NFKC: Normalization form KC: compatibility decomposition, then - canonical composition. */ -extern const struct unicode_normalization_form uninorm_nfkc; -#define UNINORM_NFKC (&uninorm_nfkc) - -/* Test whether a normalization form does compatibility decomposition. */ -#define uninorm_is_compat_decomposing(nf) \ - ((* (const unsigned int *) (nf) >> 0) & 1) - -/* Test whether a normalization form includes canonical composition. */ -#define uninorm_is_composing(nf) \ - ((* (const unsigned int *) (nf) >> 1) & 1) - -/* Return the decomposing variant of a normalization form. - This maps NFC,NFD -> NFD and NFKC,NFKD -> NFKD. */ -extern uninorm_t - uninorm_decomposing_form (uninorm_t nf) - _UC_ATTRIBUTE_PURE; - - -/* Return the specified normalization form of a string. */ -extern uint8_t * - u8_normalize (uninorm_t nf, const uint8_t *s, size_t n, - uint8_t *resultbuf, size_t *lengthp); -extern uint16_t * - u16_normalize (uninorm_t nf, const uint16_t *s, size_t n, - uint16_t *resultbuf, size_t *lengthp); -extern uint32_t * - u32_normalize (uninorm_t nf, const uint32_t *s, size_t n, - uint32_t *resultbuf, size_t *lengthp); - - -/* Compare S1 and S2, ignoring differences in normalization. - NF must be either UNINORM_NFD or UNINORM_NFKD. - If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and - return 0. Upon failure, return -1 with errno set. */ -extern int - u8_normcmp (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, - uninorm_t nf, int *resultp); -extern int - u16_normcmp (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, - uninorm_t nf, int *resultp); -extern int - u32_normcmp (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, - uninorm_t nf, int *resultp); - - -/* Converts the string S of length N to a NUL-terminated byte sequence, in such - a way that comparing uN_normxfrm (S1) and uN_normxfrm (S2) with uN_cmp2() is - equivalent to comparing S1 and S2 with uN_normcoll(). - NF must be either UNINORM_NFC or UNINORM_NFKC. */ -extern char * - u8_normxfrm (const uint8_t *s, size_t n, uninorm_t nf, - char *resultbuf, size_t *lengthp); -extern char * - u16_normxfrm (const uint16_t *s, size_t n, uninorm_t nf, - char *resultbuf, size_t *lengthp); -extern char * - u32_normxfrm (const uint32_t *s, size_t n, uninorm_t nf, - char *resultbuf, size_t *lengthp); - - -/* Compare S1 and S2, ignoring differences in normalization, using the - collation rules of the current locale. - NF must be either UNINORM_NFC or UNINORM_NFKC. - If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and - return 0. Upon failure, return -1 with errno set. */ -extern int - u8_normcoll (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, - uninorm_t nf, int *resultp); -extern int - u16_normcoll (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, - uninorm_t nf, int *resultp); -extern int - u32_normcoll (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, - uninorm_t nf, int *resultp); - - -/* Normalization of a stream of Unicode characters. - - A "stream of Unicode characters" is essentially a function that accepts an - ucs4_t argument repeatedly, optionally combined with a function that - "flushes" the stream. */ - -/* Data type of a stream of Unicode characters that normalizes its input - according to a given normalization form and passes the normalized character - sequence to the encapsulated stream of Unicode characters. */ -struct uninorm_filter; - -/* Create and return a normalization filter for Unicode characters. - The pair (stream_func, stream_data) is the encapsulated stream. - stream_func (stream_data, uc) receives the Unicode character uc - and returns 0 if successful, or -1 with errno set upon failure. - Return the new filter, or NULL with errno set upon failure. */ -extern struct uninorm_filter * - uninorm_filter_create (uninorm_t nf, - int (*stream_func) (void *stream_data, ucs4_t uc), - void *stream_data); - -/* Stuff a Unicode character into a normalizing filter. - Return 0 if successful, or -1 with errno set upon failure. */ -extern int - uninorm_filter_write (struct uninorm_filter *filter, ucs4_t uc); - -/* Bring data buffered in the filter to its destination, the encapsulated - stream. - Return 0 if successful, or -1 with errno set upon failure. - Note! If after calling this function, additional characters are written - into the filter, the resulting character sequence in the encapsulated stream - will not necessarily be normalized. */ -extern int - uninorm_filter_flush (struct uninorm_filter *filter); - -/* Bring data buffered in the filter to its destination, the encapsulated - stream, then close and free the filter. - Return 0 if successful, or -1 with errno set upon failure. */ -extern int - uninorm_filter_free (struct uninorm_filter *filter); - - -#ifdef __cplusplus -} -#endif - - -#endif /* _UNINORM_H */ diff --git a/lib/unistring/uninorm/canonical-decomposition.c b/lib/unistring/uninorm/canonical-decomposition.c deleted file mode 100644 index 55b9cddc92..0000000000 --- a/lib/unistring/uninorm/canonical-decomposition.c +++ /dev/null @@ -1,117 +0,0 @@ -/* Canonical decomposition of Unicode characters. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "uninorm.h" - -#include - -#include "decomposition-table.h" - -int -uc_canonical_decomposition (ucs4_t uc, ucs4_t *decomposition) -{ - if (uc >= 0xAC00 && uc < 0xD7A4) - { - /* Hangul syllable. See Unicode standard, chapter 3, section - "Hangul Syllable Decomposition", See also the clarification at - , section - "Clarification of Hangul Jamo Handling". */ - unsigned int t; - - uc -= 0xAC00; - t = uc % 28; - - if (t == 0) - { - unsigned int v, l; - - uc = uc / 28; - v = uc % 21; - l = uc / 21; - - decomposition[0] = 0x1100 + l; - decomposition[1] = 0x1161 + v; - return 2; - } - else - { -#if 1 /* Return the pairwise decomposition, not the full decomposition. */ - decomposition[0] = 0xAC00 + uc - t; /* = 0xAC00 + (l * 21 + v) * 28; */ - decomposition[1] = 0x11A7 + t; - return 2; -#else - unsigned int v, l; - - uc = uc / 28; - v = uc % 21; - l = uc / 21; - - decomposition[0] = 0x1100 + l; - decomposition[1] = 0x1161 + v; - decomposition[2] = 0x11A7 + t; - return 3; -#endif - } - } - else if (uc < 0x110000) - { - unsigned short entry = decomp_index (uc); - /* An entry of (unsigned short)(-1) denotes an absent entry. - Otherwise, bit 15 of the entry tells whether the decomposition - is a canonical one. */ - if (entry < 0x8000) - { - const unsigned char *p; - unsigned int element; - unsigned int length; - - p = &gl_uninorm_decomp_chars_table[3 * entry]; - element = (p[0] << 16) | (p[1] << 8) | p[2]; - /* The first element has 5 bits for the decomposition type. */ - if (((element >> 18) & 0x1f) != UC_DECOMP_CANONICAL) - abort (); - length = 1; - for (;;) - { - /* Every element has an 18 bits wide Unicode code point. */ - *decomposition = element & 0x3ffff; - /* Bit 23 tells whether there are more elements, */ - if ((element & (1 << 23)) == 0) - break; - p += 3; - element = (p[0] << 16) | (p[1] << 8) | p[2]; - decomposition++; - length++; - } - return length; - } - } - return -1; -} diff --git a/lib/unistring/uninorm/compat-decomposition.c b/lib/unistring/uninorm/compat-decomposition.c deleted file mode 100644 index d3637b92db..0000000000 --- a/lib/unistring/uninorm/compat-decomposition.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Compatibility decomposition of Unicode characters. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "decompose-internal.h" - -#include "uninorm.h" - -int -uc_compat_decomposition (ucs4_t uc, ucs4_t *decomposition) -{ - int tag; - - return uc_decomposition (uc, &tag, decomposition); -} diff --git a/lib/unistring/uninorm/composition-table.gperf b/lib/unistring/uninorm/composition-table.gperf deleted file mode 100644 index c76c1018f8..0000000000 --- a/lib/unistring/uninorm/composition-table.gperf +++ /dev/null @@ -1,980 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Canonical composition of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ - -/* Copyright (C) 2009 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of either: - - * the GNU Lesser General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -struct composition_rule { char codes[6]; }; -%struct-type -%language=ANSI-C -%define slot-name codes -%define hash-function-name gl_uninorm_compose_hash -%define lookup-function-name gl_uninorm_compose_lookup -%compare-lengths -%compare-strncmp -%readonly-tables -%omit-struct-type -%% -"\x00\x00\x41\x00\x03\x00", 0x00c0 -"\x00\x00\x41\x00\x03\x01", 0x00c1 -"\x00\x00\x41\x00\x03\x02", 0x00c2 -"\x00\x00\x41\x00\x03\x03", 0x00c3 -"\x00\x00\x41\x00\x03\x08", 0x00c4 -"\x00\x00\x41\x00\x03\x0a", 0x00c5 -"\x00\x00\x43\x00\x03\x27", 0x00c7 -"\x00\x00\x45\x00\x03\x00", 0x00c8 -"\x00\x00\x45\x00\x03\x01", 0x00c9 -"\x00\x00\x45\x00\x03\x02", 0x00ca -"\x00\x00\x45\x00\x03\x08", 0x00cb -"\x00\x00\x49\x00\x03\x00", 0x00cc -"\x00\x00\x49\x00\x03\x01", 0x00cd -"\x00\x00\x49\x00\x03\x02", 0x00ce -"\x00\x00\x49\x00\x03\x08", 0x00cf -"\x00\x00\x4e\x00\x03\x03", 0x00d1 -"\x00\x00\x4f\x00\x03\x00", 0x00d2 -"\x00\x00\x4f\x00\x03\x01", 0x00d3 -"\x00\x00\x4f\x00\x03\x02", 0x00d4 -"\x00\x00\x4f\x00\x03\x03", 0x00d5 -"\x00\x00\x4f\x00\x03\x08", 0x00d6 -"\x00\x00\x55\x00\x03\x00", 0x00d9 -"\x00\x00\x55\x00\x03\x01", 0x00da -"\x00\x00\x55\x00\x03\x02", 0x00db -"\x00\x00\x55\x00\x03\x08", 0x00dc -"\x00\x00\x59\x00\x03\x01", 0x00dd -"\x00\x00\x61\x00\x03\x00", 0x00e0 -"\x00\x00\x61\x00\x03\x01", 0x00e1 -"\x00\x00\x61\x00\x03\x02", 0x00e2 -"\x00\x00\x61\x00\x03\x03", 0x00e3 -"\x00\x00\x61\x00\x03\x08", 0x00e4 -"\x00\x00\x61\x00\x03\x0a", 0x00e5 -"\x00\x00\x63\x00\x03\x27", 0x00e7 -"\x00\x00\x65\x00\x03\x00", 0x00e8 -"\x00\x00\x65\x00\x03\x01", 0x00e9 -"\x00\x00\x65\x00\x03\x02", 0x00ea -"\x00\x00\x65\x00\x03\x08", 0x00eb -"\x00\x00\x69\x00\x03\x00", 0x00ec -"\x00\x00\x69\x00\x03\x01", 0x00ed -"\x00\x00\x69\x00\x03\x02", 0x00ee -"\x00\x00\x69\x00\x03\x08", 0x00ef -"\x00\x00\x6e\x00\x03\x03", 0x00f1 -"\x00\x00\x6f\x00\x03\x00", 0x00f2 -"\x00\x00\x6f\x00\x03\x01", 0x00f3 -"\x00\x00\x6f\x00\x03\x02", 0x00f4 -"\x00\x00\x6f\x00\x03\x03", 0x00f5 -"\x00\x00\x6f\x00\x03\x08", 0x00f6 -"\x00\x00\x75\x00\x03\x00", 0x00f9 -"\x00\x00\x75\x00\x03\x01", 0x00fa -"\x00\x00\x75\x00\x03\x02", 0x00fb -"\x00\x00\x75\x00\x03\x08", 0x00fc -"\x00\x00\x79\x00\x03\x01", 0x00fd -"\x00\x00\x79\x00\x03\x08", 0x00ff -"\x00\x00\x41\x00\x03\x04", 0x0100 -"\x00\x00\x61\x00\x03\x04", 0x0101 -"\x00\x00\x41\x00\x03\x06", 0x0102 -"\x00\x00\x61\x00\x03\x06", 0x0103 -"\x00\x00\x41\x00\x03\x28", 0x0104 -"\x00\x00\x61\x00\x03\x28", 0x0105 -"\x00\x00\x43\x00\x03\x01", 0x0106 -"\x00\x00\x63\x00\x03\x01", 0x0107 -"\x00\x00\x43\x00\x03\x02", 0x0108 -"\x00\x00\x63\x00\x03\x02", 0x0109 -"\x00\x00\x43\x00\x03\x07", 0x010a -"\x00\x00\x63\x00\x03\x07", 0x010b -"\x00\x00\x43\x00\x03\x0c", 0x010c -"\x00\x00\x63\x00\x03\x0c", 0x010d -"\x00\x00\x44\x00\x03\x0c", 0x010e -"\x00\x00\x64\x00\x03\x0c", 0x010f -"\x00\x00\x45\x00\x03\x04", 0x0112 -"\x00\x00\x65\x00\x03\x04", 0x0113 -"\x00\x00\x45\x00\x03\x06", 0x0114 -"\x00\x00\x65\x00\x03\x06", 0x0115 -"\x00\x00\x45\x00\x03\x07", 0x0116 -"\x00\x00\x65\x00\x03\x07", 0x0117 -"\x00\x00\x45\x00\x03\x28", 0x0118 -"\x00\x00\x65\x00\x03\x28", 0x0119 -"\x00\x00\x45\x00\x03\x0c", 0x011a -"\x00\x00\x65\x00\x03\x0c", 0x011b -"\x00\x00\x47\x00\x03\x02", 0x011c -"\x00\x00\x67\x00\x03\x02", 0x011d -"\x00\x00\x47\x00\x03\x06", 0x011e -"\x00\x00\x67\x00\x03\x06", 0x011f -"\x00\x00\x47\x00\x03\x07", 0x0120 -"\x00\x00\x67\x00\x03\x07", 0x0121 -"\x00\x00\x47\x00\x03\x27", 0x0122 -"\x00\x00\x67\x00\x03\x27", 0x0123 -"\x00\x00\x48\x00\x03\x02", 0x0124 -"\x00\x00\x68\x00\x03\x02", 0x0125 -"\x00\x00\x49\x00\x03\x03", 0x0128 -"\x00\x00\x69\x00\x03\x03", 0x0129 -"\x00\x00\x49\x00\x03\x04", 0x012a -"\x00\x00\x69\x00\x03\x04", 0x012b -"\x00\x00\x49\x00\x03\x06", 0x012c -"\x00\x00\x69\x00\x03\x06", 0x012d -"\x00\x00\x49\x00\x03\x28", 0x012e -"\x00\x00\x69\x00\x03\x28", 0x012f -"\x00\x00\x49\x00\x03\x07", 0x0130 -"\x00\x00\x4a\x00\x03\x02", 0x0134 -"\x00\x00\x6a\x00\x03\x02", 0x0135 -"\x00\x00\x4b\x00\x03\x27", 0x0136 -"\x00\x00\x6b\x00\x03\x27", 0x0137 -"\x00\x00\x4c\x00\x03\x01", 0x0139 -"\x00\x00\x6c\x00\x03\x01", 0x013a -"\x00\x00\x4c\x00\x03\x27", 0x013b -"\x00\x00\x6c\x00\x03\x27", 0x013c -"\x00\x00\x4c\x00\x03\x0c", 0x013d -"\x00\x00\x6c\x00\x03\x0c", 0x013e -"\x00\x00\x4e\x00\x03\x01", 0x0143 -"\x00\x00\x6e\x00\x03\x01", 0x0144 -"\x00\x00\x4e\x00\x03\x27", 0x0145 -"\x00\x00\x6e\x00\x03\x27", 0x0146 -"\x00\x00\x4e\x00\x03\x0c", 0x0147 -"\x00\x00\x6e\x00\x03\x0c", 0x0148 -"\x00\x00\x4f\x00\x03\x04", 0x014c -"\x00\x00\x6f\x00\x03\x04", 0x014d -"\x00\x00\x4f\x00\x03\x06", 0x014e -"\x00\x00\x6f\x00\x03\x06", 0x014f -"\x00\x00\x4f\x00\x03\x0b", 0x0150 -"\x00\x00\x6f\x00\x03\x0b", 0x0151 -"\x00\x00\x52\x00\x03\x01", 0x0154 -"\x00\x00\x72\x00\x03\x01", 0x0155 -"\x00\x00\x52\x00\x03\x27", 0x0156 -"\x00\x00\x72\x00\x03\x27", 0x0157 -"\x00\x00\x52\x00\x03\x0c", 0x0158 -"\x00\x00\x72\x00\x03\x0c", 0x0159 -"\x00\x00\x53\x00\x03\x01", 0x015a -"\x00\x00\x73\x00\x03\x01", 0x015b -"\x00\x00\x53\x00\x03\x02", 0x015c -"\x00\x00\x73\x00\x03\x02", 0x015d -"\x00\x00\x53\x00\x03\x27", 0x015e -"\x00\x00\x73\x00\x03\x27", 0x015f -"\x00\x00\x53\x00\x03\x0c", 0x0160 -"\x00\x00\x73\x00\x03\x0c", 0x0161 -"\x00\x00\x54\x00\x03\x27", 0x0162 -"\x00\x00\x74\x00\x03\x27", 0x0163 -"\x00\x00\x54\x00\x03\x0c", 0x0164 -"\x00\x00\x74\x00\x03\x0c", 0x0165 -"\x00\x00\x55\x00\x03\x03", 0x0168 -"\x00\x00\x75\x00\x03\x03", 0x0169 -"\x00\x00\x55\x00\x03\x04", 0x016a -"\x00\x00\x75\x00\x03\x04", 0x016b -"\x00\x00\x55\x00\x03\x06", 0x016c -"\x00\x00\x75\x00\x03\x06", 0x016d -"\x00\x00\x55\x00\x03\x0a", 0x016e -"\x00\x00\x75\x00\x03\x0a", 0x016f -"\x00\x00\x55\x00\x03\x0b", 0x0170 -"\x00\x00\x75\x00\x03\x0b", 0x0171 -"\x00\x00\x55\x00\x03\x28", 0x0172 -"\x00\x00\x75\x00\x03\x28", 0x0173 -"\x00\x00\x57\x00\x03\x02", 0x0174 -"\x00\x00\x77\x00\x03\x02", 0x0175 -"\x00\x00\x59\x00\x03\x02", 0x0176 -"\x00\x00\x79\x00\x03\x02", 0x0177 -"\x00\x00\x59\x00\x03\x08", 0x0178 -"\x00\x00\x5a\x00\x03\x01", 0x0179 -"\x00\x00\x7a\x00\x03\x01", 0x017a -"\x00\x00\x5a\x00\x03\x07", 0x017b -"\x00\x00\x7a\x00\x03\x07", 0x017c -"\x00\x00\x5a\x00\x03\x0c", 0x017d -"\x00\x00\x7a\x00\x03\x0c", 0x017e -"\x00\x00\x4f\x00\x03\x1b", 0x01a0 -"\x00\x00\x6f\x00\x03\x1b", 0x01a1 -"\x00\x00\x55\x00\x03\x1b", 0x01af -"\x00\x00\x75\x00\x03\x1b", 0x01b0 -"\x00\x00\x41\x00\x03\x0c", 0x01cd -"\x00\x00\x61\x00\x03\x0c", 0x01ce -"\x00\x00\x49\x00\x03\x0c", 0x01cf -"\x00\x00\x69\x00\x03\x0c", 0x01d0 -"\x00\x00\x4f\x00\x03\x0c", 0x01d1 -"\x00\x00\x6f\x00\x03\x0c", 0x01d2 -"\x00\x00\x55\x00\x03\x0c", 0x01d3 -"\x00\x00\x75\x00\x03\x0c", 0x01d4 -"\x00\x00\xdc\x00\x03\x04", 0x01d5 -"\x00\x00\xfc\x00\x03\x04", 0x01d6 -"\x00\x00\xdc\x00\x03\x01", 0x01d7 -"\x00\x00\xfc\x00\x03\x01", 0x01d8 -"\x00\x00\xdc\x00\x03\x0c", 0x01d9 -"\x00\x00\xfc\x00\x03\x0c", 0x01da -"\x00\x00\xdc\x00\x03\x00", 0x01db -"\x00\x00\xfc\x00\x03\x00", 0x01dc -"\x00\x00\xc4\x00\x03\x04", 0x01de -"\x00\x00\xe4\x00\x03\x04", 0x01df -"\x00\x02\x26\x00\x03\x04", 0x01e0 -"\x00\x02\x27\x00\x03\x04", 0x01e1 -"\x00\x00\xc6\x00\x03\x04", 0x01e2 -"\x00\x00\xe6\x00\x03\x04", 0x01e3 -"\x00\x00\x47\x00\x03\x0c", 0x01e6 -"\x00\x00\x67\x00\x03\x0c", 0x01e7 -"\x00\x00\x4b\x00\x03\x0c", 0x01e8 -"\x00\x00\x6b\x00\x03\x0c", 0x01e9 -"\x00\x00\x4f\x00\x03\x28", 0x01ea -"\x00\x00\x6f\x00\x03\x28", 0x01eb -"\x00\x01\xea\x00\x03\x04", 0x01ec -"\x00\x01\xeb\x00\x03\x04", 0x01ed -"\x00\x01\xb7\x00\x03\x0c", 0x01ee -"\x00\x02\x92\x00\x03\x0c", 0x01ef -"\x00\x00\x6a\x00\x03\x0c", 0x01f0 -"\x00\x00\x47\x00\x03\x01", 0x01f4 -"\x00\x00\x67\x00\x03\x01", 0x01f5 -"\x00\x00\x4e\x00\x03\x00", 0x01f8 -"\x00\x00\x6e\x00\x03\x00", 0x01f9 -"\x00\x00\xc5\x00\x03\x01", 0x01fa -"\x00\x00\xe5\x00\x03\x01", 0x01fb -"\x00\x00\xc6\x00\x03\x01", 0x01fc -"\x00\x00\xe6\x00\x03\x01", 0x01fd -"\x00\x00\xd8\x00\x03\x01", 0x01fe -"\x00\x00\xf8\x00\x03\x01", 0x01ff -"\x00\x00\x41\x00\x03\x0f", 0x0200 -"\x00\x00\x61\x00\x03\x0f", 0x0201 -"\x00\x00\x41\x00\x03\x11", 0x0202 -"\x00\x00\x61\x00\x03\x11", 0x0203 -"\x00\x00\x45\x00\x03\x0f", 0x0204 -"\x00\x00\x65\x00\x03\x0f", 0x0205 -"\x00\x00\x45\x00\x03\x11", 0x0206 -"\x00\x00\x65\x00\x03\x11", 0x0207 -"\x00\x00\x49\x00\x03\x0f", 0x0208 -"\x00\x00\x69\x00\x03\x0f", 0x0209 -"\x00\x00\x49\x00\x03\x11", 0x020a -"\x00\x00\x69\x00\x03\x11", 0x020b -"\x00\x00\x4f\x00\x03\x0f", 0x020c -"\x00\x00\x6f\x00\x03\x0f", 0x020d -"\x00\x00\x4f\x00\x03\x11", 0x020e -"\x00\x00\x6f\x00\x03\x11", 0x020f -"\x00\x00\x52\x00\x03\x0f", 0x0210 -"\x00\x00\x72\x00\x03\x0f", 0x0211 -"\x00\x00\x52\x00\x03\x11", 0x0212 -"\x00\x00\x72\x00\x03\x11", 0x0213 -"\x00\x00\x55\x00\x03\x0f", 0x0214 -"\x00\x00\x75\x00\x03\x0f", 0x0215 -"\x00\x00\x55\x00\x03\x11", 0x0216 -"\x00\x00\x75\x00\x03\x11", 0x0217 -"\x00\x00\x53\x00\x03\x26", 0x0218 -"\x00\x00\x73\x00\x03\x26", 0x0219 -"\x00\x00\x54\x00\x03\x26", 0x021a -"\x00\x00\x74\x00\x03\x26", 0x021b -"\x00\x00\x48\x00\x03\x0c", 0x021e -"\x00\x00\x68\x00\x03\x0c", 0x021f -"\x00\x00\x41\x00\x03\x07", 0x0226 -"\x00\x00\x61\x00\x03\x07", 0x0227 -"\x00\x00\x45\x00\x03\x27", 0x0228 -"\x00\x00\x65\x00\x03\x27", 0x0229 -"\x00\x00\xd6\x00\x03\x04", 0x022a -"\x00\x00\xf6\x00\x03\x04", 0x022b -"\x00\x00\xd5\x00\x03\x04", 0x022c -"\x00\x00\xf5\x00\x03\x04", 0x022d -"\x00\x00\x4f\x00\x03\x07", 0x022e -"\x00\x00\x6f\x00\x03\x07", 0x022f -"\x00\x02\x2e\x00\x03\x04", 0x0230 -"\x00\x02\x2f\x00\x03\x04", 0x0231 -"\x00\x00\x59\x00\x03\x04", 0x0232 -"\x00\x00\x79\x00\x03\x04", 0x0233 -"\x00\x00\xa8\x00\x03\x01", 0x0385 -"\x00\x03\x91\x00\x03\x01", 0x0386 -"\x00\x03\x95\x00\x03\x01", 0x0388 -"\x00\x03\x97\x00\x03\x01", 0x0389 -"\x00\x03\x99\x00\x03\x01", 0x038a -"\x00\x03\x9f\x00\x03\x01", 0x038c -"\x00\x03\xa5\x00\x03\x01", 0x038e -"\x00\x03\xa9\x00\x03\x01", 0x038f -"\x00\x03\xca\x00\x03\x01", 0x0390 -"\x00\x03\x99\x00\x03\x08", 0x03aa -"\x00\x03\xa5\x00\x03\x08", 0x03ab -"\x00\x03\xb1\x00\x03\x01", 0x03ac -"\x00\x03\xb5\x00\x03\x01", 0x03ad -"\x00\x03\xb7\x00\x03\x01", 0x03ae -"\x00\x03\xb9\x00\x03\x01", 0x03af -"\x00\x03\xcb\x00\x03\x01", 0x03b0 -"\x00\x03\xb9\x00\x03\x08", 0x03ca -"\x00\x03\xc5\x00\x03\x08", 0x03cb -"\x00\x03\xbf\x00\x03\x01", 0x03cc -"\x00\x03\xc5\x00\x03\x01", 0x03cd -"\x00\x03\xc9\x00\x03\x01", 0x03ce -"\x00\x03\xd2\x00\x03\x01", 0x03d3 -"\x00\x03\xd2\x00\x03\x08", 0x03d4 -"\x00\x04\x15\x00\x03\x00", 0x0400 -"\x00\x04\x15\x00\x03\x08", 0x0401 -"\x00\x04\x13\x00\x03\x01", 0x0403 -"\x00\x04\x06\x00\x03\x08", 0x0407 -"\x00\x04\x1a\x00\x03\x01", 0x040c -"\x00\x04\x18\x00\x03\x00", 0x040d -"\x00\x04\x23\x00\x03\x06", 0x040e -"\x00\x04\x18\x00\x03\x06", 0x0419 -"\x00\x04\x38\x00\x03\x06", 0x0439 -"\x00\x04\x35\x00\x03\x00", 0x0450 -"\x00\x04\x35\x00\x03\x08", 0x0451 -"\x00\x04\x33\x00\x03\x01", 0x0453 -"\x00\x04\x56\x00\x03\x08", 0x0457 -"\x00\x04\x3a\x00\x03\x01", 0x045c -"\x00\x04\x38\x00\x03\x00", 0x045d -"\x00\x04\x43\x00\x03\x06", 0x045e -"\x00\x04\x74\x00\x03\x0f", 0x0476 -"\x00\x04\x75\x00\x03\x0f", 0x0477 -"\x00\x04\x16\x00\x03\x06", 0x04c1 -"\x00\x04\x36\x00\x03\x06", 0x04c2 -"\x00\x04\x10\x00\x03\x06", 0x04d0 -"\x00\x04\x30\x00\x03\x06", 0x04d1 -"\x00\x04\x10\x00\x03\x08", 0x04d2 -"\x00\x04\x30\x00\x03\x08", 0x04d3 -"\x00\x04\x15\x00\x03\x06", 0x04d6 -"\x00\x04\x35\x00\x03\x06", 0x04d7 -"\x00\x04\xd8\x00\x03\x08", 0x04da -"\x00\x04\xd9\x00\x03\x08", 0x04db -"\x00\x04\x16\x00\x03\x08", 0x04dc -"\x00\x04\x36\x00\x03\x08", 0x04dd -"\x00\x04\x17\x00\x03\x08", 0x04de -"\x00\x04\x37\x00\x03\x08", 0x04df -"\x00\x04\x18\x00\x03\x04", 0x04e2 -"\x00\x04\x38\x00\x03\x04", 0x04e3 -"\x00\x04\x18\x00\x03\x08", 0x04e4 -"\x00\x04\x38\x00\x03\x08", 0x04e5 -"\x00\x04\x1e\x00\x03\x08", 0x04e6 -"\x00\x04\x3e\x00\x03\x08", 0x04e7 -"\x00\x04\xe8\x00\x03\x08", 0x04ea -"\x00\x04\xe9\x00\x03\x08", 0x04eb -"\x00\x04\x2d\x00\x03\x08", 0x04ec -"\x00\x04\x4d\x00\x03\x08", 0x04ed -"\x00\x04\x23\x00\x03\x04", 0x04ee -"\x00\x04\x43\x00\x03\x04", 0x04ef -"\x00\x04\x23\x00\x03\x08", 0x04f0 -"\x00\x04\x43\x00\x03\x08", 0x04f1 -"\x00\x04\x23\x00\x03\x0b", 0x04f2 -"\x00\x04\x43\x00\x03\x0b", 0x04f3 -"\x00\x04\x27\x00\x03\x08", 0x04f4 -"\x00\x04\x47\x00\x03\x08", 0x04f5 -"\x00\x04\x2b\x00\x03\x08", 0x04f8 -"\x00\x04\x4b\x00\x03\x08", 0x04f9 -"\x00\x06\x27\x00\x06\x53", 0x0622 -"\x00\x06\x27\x00\x06\x54", 0x0623 -"\x00\x06\x48\x00\x06\x54", 0x0624 -"\x00\x06\x27\x00\x06\x55", 0x0625 -"\x00\x06\x4a\x00\x06\x54", 0x0626 -"\x00\x06\xd5\x00\x06\x54", 0x06c0 -"\x00\x06\xc1\x00\x06\x54", 0x06c2 -"\x00\x06\xd2\x00\x06\x54", 0x06d3 -"\x00\x09\x28\x00\x09\x3c", 0x0929 -"\x00\x09\x30\x00\x09\x3c", 0x0931 -"\x00\x09\x33\x00\x09\x3c", 0x0934 -"\x00\x09\xc7\x00\x09\xbe", 0x09cb -"\x00\x09\xc7\x00\x09\xd7", 0x09cc -"\x00\x0b\x47\x00\x0b\x56", 0x0b48 -"\x00\x0b\x47\x00\x0b\x3e", 0x0b4b -"\x00\x0b\x47\x00\x0b\x57", 0x0b4c -"\x00\x0b\x92\x00\x0b\xd7", 0x0b94 -"\x00\x0b\xc6\x00\x0b\xbe", 0x0bca -"\x00\x0b\xc7\x00\x0b\xbe", 0x0bcb -"\x00\x0b\xc6\x00\x0b\xd7", 0x0bcc -"\x00\x0c\x46\x00\x0c\x56", 0x0c48 -"\x00\x0c\xbf\x00\x0c\xd5", 0x0cc0 -"\x00\x0c\xc6\x00\x0c\xd5", 0x0cc7 -"\x00\x0c\xc6\x00\x0c\xd6", 0x0cc8 -"\x00\x0c\xc6\x00\x0c\xc2", 0x0cca -"\x00\x0c\xca\x00\x0c\xd5", 0x0ccb -"\x00\x0d\x46\x00\x0d\x3e", 0x0d4a -"\x00\x0d\x47\x00\x0d\x3e", 0x0d4b -"\x00\x0d\x46\x00\x0d\x57", 0x0d4c -"\x00\x0d\xd9\x00\x0d\xca", 0x0dda -"\x00\x0d\xd9\x00\x0d\xcf", 0x0ddc -"\x00\x0d\xdc\x00\x0d\xca", 0x0ddd -"\x00\x0d\xd9\x00\x0d\xdf", 0x0dde -"\x00\x10\x25\x00\x10\x2e", 0x1026 -"\x00\x1b\x05\x00\x1b\x35", 0x1b06 -"\x00\x1b\x07\x00\x1b\x35", 0x1b08 -"\x00\x1b\x09\x00\x1b\x35", 0x1b0a -"\x00\x1b\x0b\x00\x1b\x35", 0x1b0c -"\x00\x1b\x0d\x00\x1b\x35", 0x1b0e -"\x00\x1b\x11\x00\x1b\x35", 0x1b12 -"\x00\x1b\x3a\x00\x1b\x35", 0x1b3b -"\x00\x1b\x3c\x00\x1b\x35", 0x1b3d -"\x00\x1b\x3e\x00\x1b\x35", 0x1b40 -"\x00\x1b\x3f\x00\x1b\x35", 0x1b41 -"\x00\x1b\x42\x00\x1b\x35", 0x1b43 -"\x00\x00\x41\x00\x03\x25", 0x1e00 -"\x00\x00\x61\x00\x03\x25", 0x1e01 -"\x00\x00\x42\x00\x03\x07", 0x1e02 -"\x00\x00\x62\x00\x03\x07", 0x1e03 -"\x00\x00\x42\x00\x03\x23", 0x1e04 -"\x00\x00\x62\x00\x03\x23", 0x1e05 -"\x00\x00\x42\x00\x03\x31", 0x1e06 -"\x00\x00\x62\x00\x03\x31", 0x1e07 -"\x00\x00\xc7\x00\x03\x01", 0x1e08 -"\x00\x00\xe7\x00\x03\x01", 0x1e09 -"\x00\x00\x44\x00\x03\x07", 0x1e0a -"\x00\x00\x64\x00\x03\x07", 0x1e0b -"\x00\x00\x44\x00\x03\x23", 0x1e0c -"\x00\x00\x64\x00\x03\x23", 0x1e0d -"\x00\x00\x44\x00\x03\x31", 0x1e0e -"\x00\x00\x64\x00\x03\x31", 0x1e0f -"\x00\x00\x44\x00\x03\x27", 0x1e10 -"\x00\x00\x64\x00\x03\x27", 0x1e11 -"\x00\x00\x44\x00\x03\x2d", 0x1e12 -"\x00\x00\x64\x00\x03\x2d", 0x1e13 -"\x00\x01\x12\x00\x03\x00", 0x1e14 -"\x00\x01\x13\x00\x03\x00", 0x1e15 -"\x00\x01\x12\x00\x03\x01", 0x1e16 -"\x00\x01\x13\x00\x03\x01", 0x1e17 -"\x00\x00\x45\x00\x03\x2d", 0x1e18 -"\x00\x00\x65\x00\x03\x2d", 0x1e19 -"\x00\x00\x45\x00\x03\x30", 0x1e1a -"\x00\x00\x65\x00\x03\x30", 0x1e1b -"\x00\x02\x28\x00\x03\x06", 0x1e1c -"\x00\x02\x29\x00\x03\x06", 0x1e1d -"\x00\x00\x46\x00\x03\x07", 0x1e1e -"\x00\x00\x66\x00\x03\x07", 0x1e1f -"\x00\x00\x47\x00\x03\x04", 0x1e20 -"\x00\x00\x67\x00\x03\x04", 0x1e21 -"\x00\x00\x48\x00\x03\x07", 0x1e22 -"\x00\x00\x68\x00\x03\x07", 0x1e23 -"\x00\x00\x48\x00\x03\x23", 0x1e24 -"\x00\x00\x68\x00\x03\x23", 0x1e25 -"\x00\x00\x48\x00\x03\x08", 0x1e26 -"\x00\x00\x68\x00\x03\x08", 0x1e27 -"\x00\x00\x48\x00\x03\x27", 0x1e28 -"\x00\x00\x68\x00\x03\x27", 0x1e29 -"\x00\x00\x48\x00\x03\x2e", 0x1e2a -"\x00\x00\x68\x00\x03\x2e", 0x1e2b -"\x00\x00\x49\x00\x03\x30", 0x1e2c -"\x00\x00\x69\x00\x03\x30", 0x1e2d -"\x00\x00\xcf\x00\x03\x01", 0x1e2e -"\x00\x00\xef\x00\x03\x01", 0x1e2f -"\x00\x00\x4b\x00\x03\x01", 0x1e30 -"\x00\x00\x6b\x00\x03\x01", 0x1e31 -"\x00\x00\x4b\x00\x03\x23", 0x1e32 -"\x00\x00\x6b\x00\x03\x23", 0x1e33 -"\x00\x00\x4b\x00\x03\x31", 0x1e34 -"\x00\x00\x6b\x00\x03\x31", 0x1e35 -"\x00\x00\x4c\x00\x03\x23", 0x1e36 -"\x00\x00\x6c\x00\x03\x23", 0x1e37 -"\x00\x1e\x36\x00\x03\x04", 0x1e38 -"\x00\x1e\x37\x00\x03\x04", 0x1e39 -"\x00\x00\x4c\x00\x03\x31", 0x1e3a -"\x00\x00\x6c\x00\x03\x31", 0x1e3b -"\x00\x00\x4c\x00\x03\x2d", 0x1e3c -"\x00\x00\x6c\x00\x03\x2d", 0x1e3d -"\x00\x00\x4d\x00\x03\x01", 0x1e3e -"\x00\x00\x6d\x00\x03\x01", 0x1e3f -"\x00\x00\x4d\x00\x03\x07", 0x1e40 -"\x00\x00\x6d\x00\x03\x07", 0x1e41 -"\x00\x00\x4d\x00\x03\x23", 0x1e42 -"\x00\x00\x6d\x00\x03\x23", 0x1e43 -"\x00\x00\x4e\x00\x03\x07", 0x1e44 -"\x00\x00\x6e\x00\x03\x07", 0x1e45 -"\x00\x00\x4e\x00\x03\x23", 0x1e46 -"\x00\x00\x6e\x00\x03\x23", 0x1e47 -"\x00\x00\x4e\x00\x03\x31", 0x1e48 -"\x00\x00\x6e\x00\x03\x31", 0x1e49 -"\x00\x00\x4e\x00\x03\x2d", 0x1e4a -"\x00\x00\x6e\x00\x03\x2d", 0x1e4b -"\x00\x00\xd5\x00\x03\x01", 0x1e4c -"\x00\x00\xf5\x00\x03\x01", 0x1e4d -"\x00\x00\xd5\x00\x03\x08", 0x1e4e -"\x00\x00\xf5\x00\x03\x08", 0x1e4f -"\x00\x01\x4c\x00\x03\x00", 0x1e50 -"\x00\x01\x4d\x00\x03\x00", 0x1e51 -"\x00\x01\x4c\x00\x03\x01", 0x1e52 -"\x00\x01\x4d\x00\x03\x01", 0x1e53 -"\x00\x00\x50\x00\x03\x01", 0x1e54 -"\x00\x00\x70\x00\x03\x01", 0x1e55 -"\x00\x00\x50\x00\x03\x07", 0x1e56 -"\x00\x00\x70\x00\x03\x07", 0x1e57 -"\x00\x00\x52\x00\x03\x07", 0x1e58 -"\x00\x00\x72\x00\x03\x07", 0x1e59 -"\x00\x00\x52\x00\x03\x23", 0x1e5a -"\x00\x00\x72\x00\x03\x23", 0x1e5b -"\x00\x1e\x5a\x00\x03\x04", 0x1e5c -"\x00\x1e\x5b\x00\x03\x04", 0x1e5d -"\x00\x00\x52\x00\x03\x31", 0x1e5e -"\x00\x00\x72\x00\x03\x31", 0x1e5f -"\x00\x00\x53\x00\x03\x07", 0x1e60 -"\x00\x00\x73\x00\x03\x07", 0x1e61 -"\x00\x00\x53\x00\x03\x23", 0x1e62 -"\x00\x00\x73\x00\x03\x23", 0x1e63 -"\x00\x01\x5a\x00\x03\x07", 0x1e64 -"\x00\x01\x5b\x00\x03\x07", 0x1e65 -"\x00\x01\x60\x00\x03\x07", 0x1e66 -"\x00\x01\x61\x00\x03\x07", 0x1e67 -"\x00\x1e\x62\x00\x03\x07", 0x1e68 -"\x00\x1e\x63\x00\x03\x07", 0x1e69 -"\x00\x00\x54\x00\x03\x07", 0x1e6a -"\x00\x00\x74\x00\x03\x07", 0x1e6b -"\x00\x00\x54\x00\x03\x23", 0x1e6c -"\x00\x00\x74\x00\x03\x23", 0x1e6d -"\x00\x00\x54\x00\x03\x31", 0x1e6e -"\x00\x00\x74\x00\x03\x31", 0x1e6f -"\x00\x00\x54\x00\x03\x2d", 0x1e70 -"\x00\x00\x74\x00\x03\x2d", 0x1e71 -"\x00\x00\x55\x00\x03\x24", 0x1e72 -"\x00\x00\x75\x00\x03\x24", 0x1e73 -"\x00\x00\x55\x00\x03\x30", 0x1e74 -"\x00\x00\x75\x00\x03\x30", 0x1e75 -"\x00\x00\x55\x00\x03\x2d", 0x1e76 -"\x00\x00\x75\x00\x03\x2d", 0x1e77 -"\x00\x01\x68\x00\x03\x01", 0x1e78 -"\x00\x01\x69\x00\x03\x01", 0x1e79 -"\x00\x01\x6a\x00\x03\x08", 0x1e7a -"\x00\x01\x6b\x00\x03\x08", 0x1e7b -"\x00\x00\x56\x00\x03\x03", 0x1e7c -"\x00\x00\x76\x00\x03\x03", 0x1e7d -"\x00\x00\x56\x00\x03\x23", 0x1e7e -"\x00\x00\x76\x00\x03\x23", 0x1e7f -"\x00\x00\x57\x00\x03\x00", 0x1e80 -"\x00\x00\x77\x00\x03\x00", 0x1e81 -"\x00\x00\x57\x00\x03\x01", 0x1e82 -"\x00\x00\x77\x00\x03\x01", 0x1e83 -"\x00\x00\x57\x00\x03\x08", 0x1e84 -"\x00\x00\x77\x00\x03\x08", 0x1e85 -"\x00\x00\x57\x00\x03\x07", 0x1e86 -"\x00\x00\x77\x00\x03\x07", 0x1e87 -"\x00\x00\x57\x00\x03\x23", 0x1e88 -"\x00\x00\x77\x00\x03\x23", 0x1e89 -"\x00\x00\x58\x00\x03\x07", 0x1e8a -"\x00\x00\x78\x00\x03\x07", 0x1e8b -"\x00\x00\x58\x00\x03\x08", 0x1e8c -"\x00\x00\x78\x00\x03\x08", 0x1e8d -"\x00\x00\x59\x00\x03\x07", 0x1e8e -"\x00\x00\x79\x00\x03\x07", 0x1e8f -"\x00\x00\x5a\x00\x03\x02", 0x1e90 -"\x00\x00\x7a\x00\x03\x02", 0x1e91 -"\x00\x00\x5a\x00\x03\x23", 0x1e92 -"\x00\x00\x7a\x00\x03\x23", 0x1e93 -"\x00\x00\x5a\x00\x03\x31", 0x1e94 -"\x00\x00\x7a\x00\x03\x31", 0x1e95 -"\x00\x00\x68\x00\x03\x31", 0x1e96 -"\x00\x00\x74\x00\x03\x08", 0x1e97 -"\x00\x00\x77\x00\x03\x0a", 0x1e98 -"\x00\x00\x79\x00\x03\x0a", 0x1e99 -"\x00\x01\x7f\x00\x03\x07", 0x1e9b -"\x00\x00\x41\x00\x03\x23", 0x1ea0 -"\x00\x00\x61\x00\x03\x23", 0x1ea1 -"\x00\x00\x41\x00\x03\x09", 0x1ea2 -"\x00\x00\x61\x00\x03\x09", 0x1ea3 -"\x00\x00\xc2\x00\x03\x01", 0x1ea4 -"\x00\x00\xe2\x00\x03\x01", 0x1ea5 -"\x00\x00\xc2\x00\x03\x00", 0x1ea6 -"\x00\x00\xe2\x00\x03\x00", 0x1ea7 -"\x00\x00\xc2\x00\x03\x09", 0x1ea8 -"\x00\x00\xe2\x00\x03\x09", 0x1ea9 -"\x00\x00\xc2\x00\x03\x03", 0x1eaa -"\x00\x00\xe2\x00\x03\x03", 0x1eab -"\x00\x1e\xa0\x00\x03\x02", 0x1eac -"\x00\x1e\xa1\x00\x03\x02", 0x1ead -"\x00\x01\x02\x00\x03\x01", 0x1eae -"\x00\x01\x03\x00\x03\x01", 0x1eaf -"\x00\x01\x02\x00\x03\x00", 0x1eb0 -"\x00\x01\x03\x00\x03\x00", 0x1eb1 -"\x00\x01\x02\x00\x03\x09", 0x1eb2 -"\x00\x01\x03\x00\x03\x09", 0x1eb3 -"\x00\x01\x02\x00\x03\x03", 0x1eb4 -"\x00\x01\x03\x00\x03\x03", 0x1eb5 -"\x00\x1e\xa0\x00\x03\x06", 0x1eb6 -"\x00\x1e\xa1\x00\x03\x06", 0x1eb7 -"\x00\x00\x45\x00\x03\x23", 0x1eb8 -"\x00\x00\x65\x00\x03\x23", 0x1eb9 -"\x00\x00\x45\x00\x03\x09", 0x1eba -"\x00\x00\x65\x00\x03\x09", 0x1ebb -"\x00\x00\x45\x00\x03\x03", 0x1ebc -"\x00\x00\x65\x00\x03\x03", 0x1ebd -"\x00\x00\xca\x00\x03\x01", 0x1ebe -"\x00\x00\xea\x00\x03\x01", 0x1ebf -"\x00\x00\xca\x00\x03\x00", 0x1ec0 -"\x00\x00\xea\x00\x03\x00", 0x1ec1 -"\x00\x00\xca\x00\x03\x09", 0x1ec2 -"\x00\x00\xea\x00\x03\x09", 0x1ec3 -"\x00\x00\xca\x00\x03\x03", 0x1ec4 -"\x00\x00\xea\x00\x03\x03", 0x1ec5 -"\x00\x1e\xb8\x00\x03\x02", 0x1ec6 -"\x00\x1e\xb9\x00\x03\x02", 0x1ec7 -"\x00\x00\x49\x00\x03\x09", 0x1ec8 -"\x00\x00\x69\x00\x03\x09", 0x1ec9 -"\x00\x00\x49\x00\x03\x23", 0x1eca -"\x00\x00\x69\x00\x03\x23", 0x1ecb -"\x00\x00\x4f\x00\x03\x23", 0x1ecc -"\x00\x00\x6f\x00\x03\x23", 0x1ecd -"\x00\x00\x4f\x00\x03\x09", 0x1ece -"\x00\x00\x6f\x00\x03\x09", 0x1ecf -"\x00\x00\xd4\x00\x03\x01", 0x1ed0 -"\x00\x00\xf4\x00\x03\x01", 0x1ed1 -"\x00\x00\xd4\x00\x03\x00", 0x1ed2 -"\x00\x00\xf4\x00\x03\x00", 0x1ed3 -"\x00\x00\xd4\x00\x03\x09", 0x1ed4 -"\x00\x00\xf4\x00\x03\x09", 0x1ed5 -"\x00\x00\xd4\x00\x03\x03", 0x1ed6 -"\x00\x00\xf4\x00\x03\x03", 0x1ed7 -"\x00\x1e\xcc\x00\x03\x02", 0x1ed8 -"\x00\x1e\xcd\x00\x03\x02", 0x1ed9 -"\x00\x01\xa0\x00\x03\x01", 0x1eda -"\x00\x01\xa1\x00\x03\x01", 0x1edb -"\x00\x01\xa0\x00\x03\x00", 0x1edc -"\x00\x01\xa1\x00\x03\x00", 0x1edd -"\x00\x01\xa0\x00\x03\x09", 0x1ede -"\x00\x01\xa1\x00\x03\x09", 0x1edf -"\x00\x01\xa0\x00\x03\x03", 0x1ee0 -"\x00\x01\xa1\x00\x03\x03", 0x1ee1 -"\x00\x01\xa0\x00\x03\x23", 0x1ee2 -"\x00\x01\xa1\x00\x03\x23", 0x1ee3 -"\x00\x00\x55\x00\x03\x23", 0x1ee4 -"\x00\x00\x75\x00\x03\x23", 0x1ee5 -"\x00\x00\x55\x00\x03\x09", 0x1ee6 -"\x00\x00\x75\x00\x03\x09", 0x1ee7 -"\x00\x01\xaf\x00\x03\x01", 0x1ee8 -"\x00\x01\xb0\x00\x03\x01", 0x1ee9 -"\x00\x01\xaf\x00\x03\x00", 0x1eea -"\x00\x01\xb0\x00\x03\x00", 0x1eeb -"\x00\x01\xaf\x00\x03\x09", 0x1eec -"\x00\x01\xb0\x00\x03\x09", 0x1eed -"\x00\x01\xaf\x00\x03\x03", 0x1eee -"\x00\x01\xb0\x00\x03\x03", 0x1eef -"\x00\x01\xaf\x00\x03\x23", 0x1ef0 -"\x00\x01\xb0\x00\x03\x23", 0x1ef1 -"\x00\x00\x59\x00\x03\x00", 0x1ef2 -"\x00\x00\x79\x00\x03\x00", 0x1ef3 -"\x00\x00\x59\x00\x03\x23", 0x1ef4 -"\x00\x00\x79\x00\x03\x23", 0x1ef5 -"\x00\x00\x59\x00\x03\x09", 0x1ef6 -"\x00\x00\x79\x00\x03\x09", 0x1ef7 -"\x00\x00\x59\x00\x03\x03", 0x1ef8 -"\x00\x00\x79\x00\x03\x03", 0x1ef9 -"\x00\x03\xb1\x00\x03\x13", 0x1f00 -"\x00\x03\xb1\x00\x03\x14", 0x1f01 -"\x00\x1f\x00\x00\x03\x00", 0x1f02 -"\x00\x1f\x01\x00\x03\x00", 0x1f03 -"\x00\x1f\x00\x00\x03\x01", 0x1f04 -"\x00\x1f\x01\x00\x03\x01", 0x1f05 -"\x00\x1f\x00\x00\x03\x42", 0x1f06 -"\x00\x1f\x01\x00\x03\x42", 0x1f07 -"\x00\x03\x91\x00\x03\x13", 0x1f08 -"\x00\x03\x91\x00\x03\x14", 0x1f09 -"\x00\x1f\x08\x00\x03\x00", 0x1f0a -"\x00\x1f\x09\x00\x03\x00", 0x1f0b -"\x00\x1f\x08\x00\x03\x01", 0x1f0c -"\x00\x1f\x09\x00\x03\x01", 0x1f0d -"\x00\x1f\x08\x00\x03\x42", 0x1f0e -"\x00\x1f\x09\x00\x03\x42", 0x1f0f -"\x00\x03\xb5\x00\x03\x13", 0x1f10 -"\x00\x03\xb5\x00\x03\x14", 0x1f11 -"\x00\x1f\x10\x00\x03\x00", 0x1f12 -"\x00\x1f\x11\x00\x03\x00", 0x1f13 -"\x00\x1f\x10\x00\x03\x01", 0x1f14 -"\x00\x1f\x11\x00\x03\x01", 0x1f15 -"\x00\x03\x95\x00\x03\x13", 0x1f18 -"\x00\x03\x95\x00\x03\x14", 0x1f19 -"\x00\x1f\x18\x00\x03\x00", 0x1f1a -"\x00\x1f\x19\x00\x03\x00", 0x1f1b -"\x00\x1f\x18\x00\x03\x01", 0x1f1c -"\x00\x1f\x19\x00\x03\x01", 0x1f1d -"\x00\x03\xb7\x00\x03\x13", 0x1f20 -"\x00\x03\xb7\x00\x03\x14", 0x1f21 -"\x00\x1f\x20\x00\x03\x00", 0x1f22 -"\x00\x1f\x21\x00\x03\x00", 0x1f23 -"\x00\x1f\x20\x00\x03\x01", 0x1f24 -"\x00\x1f\x21\x00\x03\x01", 0x1f25 -"\x00\x1f\x20\x00\x03\x42", 0x1f26 -"\x00\x1f\x21\x00\x03\x42", 0x1f27 -"\x00\x03\x97\x00\x03\x13", 0x1f28 -"\x00\x03\x97\x00\x03\x14", 0x1f29 -"\x00\x1f\x28\x00\x03\x00", 0x1f2a -"\x00\x1f\x29\x00\x03\x00", 0x1f2b -"\x00\x1f\x28\x00\x03\x01", 0x1f2c -"\x00\x1f\x29\x00\x03\x01", 0x1f2d -"\x00\x1f\x28\x00\x03\x42", 0x1f2e -"\x00\x1f\x29\x00\x03\x42", 0x1f2f -"\x00\x03\xb9\x00\x03\x13", 0x1f30 -"\x00\x03\xb9\x00\x03\x14", 0x1f31 -"\x00\x1f\x30\x00\x03\x00", 0x1f32 -"\x00\x1f\x31\x00\x03\x00", 0x1f33 -"\x00\x1f\x30\x00\x03\x01", 0x1f34 -"\x00\x1f\x31\x00\x03\x01", 0x1f35 -"\x00\x1f\x30\x00\x03\x42", 0x1f36 -"\x00\x1f\x31\x00\x03\x42", 0x1f37 -"\x00\x03\x99\x00\x03\x13", 0x1f38 -"\x00\x03\x99\x00\x03\x14", 0x1f39 -"\x00\x1f\x38\x00\x03\x00", 0x1f3a -"\x00\x1f\x39\x00\x03\x00", 0x1f3b -"\x00\x1f\x38\x00\x03\x01", 0x1f3c -"\x00\x1f\x39\x00\x03\x01", 0x1f3d -"\x00\x1f\x38\x00\x03\x42", 0x1f3e -"\x00\x1f\x39\x00\x03\x42", 0x1f3f -"\x00\x03\xbf\x00\x03\x13", 0x1f40 -"\x00\x03\xbf\x00\x03\x14", 0x1f41 -"\x00\x1f\x40\x00\x03\x00", 0x1f42 -"\x00\x1f\x41\x00\x03\x00", 0x1f43 -"\x00\x1f\x40\x00\x03\x01", 0x1f44 -"\x00\x1f\x41\x00\x03\x01", 0x1f45 -"\x00\x03\x9f\x00\x03\x13", 0x1f48 -"\x00\x03\x9f\x00\x03\x14", 0x1f49 -"\x00\x1f\x48\x00\x03\x00", 0x1f4a -"\x00\x1f\x49\x00\x03\x00", 0x1f4b -"\x00\x1f\x48\x00\x03\x01", 0x1f4c -"\x00\x1f\x49\x00\x03\x01", 0x1f4d -"\x00\x03\xc5\x00\x03\x13", 0x1f50 -"\x00\x03\xc5\x00\x03\x14", 0x1f51 -"\x00\x1f\x50\x00\x03\x00", 0x1f52 -"\x00\x1f\x51\x00\x03\x00", 0x1f53 -"\x00\x1f\x50\x00\x03\x01", 0x1f54 -"\x00\x1f\x51\x00\x03\x01", 0x1f55 -"\x00\x1f\x50\x00\x03\x42", 0x1f56 -"\x00\x1f\x51\x00\x03\x42", 0x1f57 -"\x00\x03\xa5\x00\x03\x14", 0x1f59 -"\x00\x1f\x59\x00\x03\x00", 0x1f5b -"\x00\x1f\x59\x00\x03\x01", 0x1f5d -"\x00\x1f\x59\x00\x03\x42", 0x1f5f -"\x00\x03\xc9\x00\x03\x13", 0x1f60 -"\x00\x03\xc9\x00\x03\x14", 0x1f61 -"\x00\x1f\x60\x00\x03\x00", 0x1f62 -"\x00\x1f\x61\x00\x03\x00", 0x1f63 -"\x00\x1f\x60\x00\x03\x01", 0x1f64 -"\x00\x1f\x61\x00\x03\x01", 0x1f65 -"\x00\x1f\x60\x00\x03\x42", 0x1f66 -"\x00\x1f\x61\x00\x03\x42", 0x1f67 -"\x00\x03\xa9\x00\x03\x13", 0x1f68 -"\x00\x03\xa9\x00\x03\x14", 0x1f69 -"\x00\x1f\x68\x00\x03\x00", 0x1f6a -"\x00\x1f\x69\x00\x03\x00", 0x1f6b -"\x00\x1f\x68\x00\x03\x01", 0x1f6c -"\x00\x1f\x69\x00\x03\x01", 0x1f6d -"\x00\x1f\x68\x00\x03\x42", 0x1f6e -"\x00\x1f\x69\x00\x03\x42", 0x1f6f -"\x00\x03\xb1\x00\x03\x00", 0x1f70 -"\x00\x03\xb5\x00\x03\x00", 0x1f72 -"\x00\x03\xb7\x00\x03\x00", 0x1f74 -"\x00\x03\xb9\x00\x03\x00", 0x1f76 -"\x00\x03\xbf\x00\x03\x00", 0x1f78 -"\x00\x03\xc5\x00\x03\x00", 0x1f7a -"\x00\x03\xc9\x00\x03\x00", 0x1f7c -"\x00\x1f\x00\x00\x03\x45", 0x1f80 -"\x00\x1f\x01\x00\x03\x45", 0x1f81 -"\x00\x1f\x02\x00\x03\x45", 0x1f82 -"\x00\x1f\x03\x00\x03\x45", 0x1f83 -"\x00\x1f\x04\x00\x03\x45", 0x1f84 -"\x00\x1f\x05\x00\x03\x45", 0x1f85 -"\x00\x1f\x06\x00\x03\x45", 0x1f86 -"\x00\x1f\x07\x00\x03\x45", 0x1f87 -"\x00\x1f\x08\x00\x03\x45", 0x1f88 -"\x00\x1f\x09\x00\x03\x45", 0x1f89 -"\x00\x1f\x0a\x00\x03\x45", 0x1f8a -"\x00\x1f\x0b\x00\x03\x45", 0x1f8b -"\x00\x1f\x0c\x00\x03\x45", 0x1f8c -"\x00\x1f\x0d\x00\x03\x45", 0x1f8d -"\x00\x1f\x0e\x00\x03\x45", 0x1f8e -"\x00\x1f\x0f\x00\x03\x45", 0x1f8f -"\x00\x1f\x20\x00\x03\x45", 0x1f90 -"\x00\x1f\x21\x00\x03\x45", 0x1f91 -"\x00\x1f\x22\x00\x03\x45", 0x1f92 -"\x00\x1f\x23\x00\x03\x45", 0x1f93 -"\x00\x1f\x24\x00\x03\x45", 0x1f94 -"\x00\x1f\x25\x00\x03\x45", 0x1f95 -"\x00\x1f\x26\x00\x03\x45", 0x1f96 -"\x00\x1f\x27\x00\x03\x45", 0x1f97 -"\x00\x1f\x28\x00\x03\x45", 0x1f98 -"\x00\x1f\x29\x00\x03\x45", 0x1f99 -"\x00\x1f\x2a\x00\x03\x45", 0x1f9a -"\x00\x1f\x2b\x00\x03\x45", 0x1f9b -"\x00\x1f\x2c\x00\x03\x45", 0x1f9c -"\x00\x1f\x2d\x00\x03\x45", 0x1f9d -"\x00\x1f\x2e\x00\x03\x45", 0x1f9e -"\x00\x1f\x2f\x00\x03\x45", 0x1f9f -"\x00\x1f\x60\x00\x03\x45", 0x1fa0 -"\x00\x1f\x61\x00\x03\x45", 0x1fa1 -"\x00\x1f\x62\x00\x03\x45", 0x1fa2 -"\x00\x1f\x63\x00\x03\x45", 0x1fa3 -"\x00\x1f\x64\x00\x03\x45", 0x1fa4 -"\x00\x1f\x65\x00\x03\x45", 0x1fa5 -"\x00\x1f\x66\x00\x03\x45", 0x1fa6 -"\x00\x1f\x67\x00\x03\x45", 0x1fa7 -"\x00\x1f\x68\x00\x03\x45", 0x1fa8 -"\x00\x1f\x69\x00\x03\x45", 0x1fa9 -"\x00\x1f\x6a\x00\x03\x45", 0x1faa -"\x00\x1f\x6b\x00\x03\x45", 0x1fab -"\x00\x1f\x6c\x00\x03\x45", 0x1fac -"\x00\x1f\x6d\x00\x03\x45", 0x1fad -"\x00\x1f\x6e\x00\x03\x45", 0x1fae -"\x00\x1f\x6f\x00\x03\x45", 0x1faf -"\x00\x03\xb1\x00\x03\x06", 0x1fb0 -"\x00\x03\xb1\x00\x03\x04", 0x1fb1 -"\x00\x1f\x70\x00\x03\x45", 0x1fb2 -"\x00\x03\xb1\x00\x03\x45", 0x1fb3 -"\x00\x03\xac\x00\x03\x45", 0x1fb4 -"\x00\x03\xb1\x00\x03\x42", 0x1fb6 -"\x00\x1f\xb6\x00\x03\x45", 0x1fb7 -"\x00\x03\x91\x00\x03\x06", 0x1fb8 -"\x00\x03\x91\x00\x03\x04", 0x1fb9 -"\x00\x03\x91\x00\x03\x00", 0x1fba -"\x00\x03\x91\x00\x03\x45", 0x1fbc -"\x00\x00\xa8\x00\x03\x42", 0x1fc1 -"\x00\x1f\x74\x00\x03\x45", 0x1fc2 -"\x00\x03\xb7\x00\x03\x45", 0x1fc3 -"\x00\x03\xae\x00\x03\x45", 0x1fc4 -"\x00\x03\xb7\x00\x03\x42", 0x1fc6 -"\x00\x1f\xc6\x00\x03\x45", 0x1fc7 -"\x00\x03\x95\x00\x03\x00", 0x1fc8 -"\x00\x03\x97\x00\x03\x00", 0x1fca -"\x00\x03\x97\x00\x03\x45", 0x1fcc -"\x00\x1f\xbf\x00\x03\x00", 0x1fcd -"\x00\x1f\xbf\x00\x03\x01", 0x1fce -"\x00\x1f\xbf\x00\x03\x42", 0x1fcf -"\x00\x03\xb9\x00\x03\x06", 0x1fd0 -"\x00\x03\xb9\x00\x03\x04", 0x1fd1 -"\x00\x03\xca\x00\x03\x00", 0x1fd2 -"\x00\x03\xb9\x00\x03\x42", 0x1fd6 -"\x00\x03\xca\x00\x03\x42", 0x1fd7 -"\x00\x03\x99\x00\x03\x06", 0x1fd8 -"\x00\x03\x99\x00\x03\x04", 0x1fd9 -"\x00\x03\x99\x00\x03\x00", 0x1fda -"\x00\x1f\xfe\x00\x03\x00", 0x1fdd -"\x00\x1f\xfe\x00\x03\x01", 0x1fde -"\x00\x1f\xfe\x00\x03\x42", 0x1fdf -"\x00\x03\xc5\x00\x03\x06", 0x1fe0 -"\x00\x03\xc5\x00\x03\x04", 0x1fe1 -"\x00\x03\xcb\x00\x03\x00", 0x1fe2 -"\x00\x03\xc1\x00\x03\x13", 0x1fe4 -"\x00\x03\xc1\x00\x03\x14", 0x1fe5 -"\x00\x03\xc5\x00\x03\x42", 0x1fe6 -"\x00\x03\xcb\x00\x03\x42", 0x1fe7 -"\x00\x03\xa5\x00\x03\x06", 0x1fe8 -"\x00\x03\xa5\x00\x03\x04", 0x1fe9 -"\x00\x03\xa5\x00\x03\x00", 0x1fea -"\x00\x03\xa1\x00\x03\x14", 0x1fec -"\x00\x00\xa8\x00\x03\x00", 0x1fed -"\x00\x1f\x7c\x00\x03\x45", 0x1ff2 -"\x00\x03\xc9\x00\x03\x45", 0x1ff3 -"\x00\x03\xce\x00\x03\x45", 0x1ff4 -"\x00\x03\xc9\x00\x03\x42", 0x1ff6 -"\x00\x1f\xf6\x00\x03\x45", 0x1ff7 -"\x00\x03\x9f\x00\x03\x00", 0x1ff8 -"\x00\x03\xa9\x00\x03\x00", 0x1ffa -"\x00\x03\xa9\x00\x03\x45", 0x1ffc -"\x00\x21\x90\x00\x03\x38", 0x219a -"\x00\x21\x92\x00\x03\x38", 0x219b -"\x00\x21\x94\x00\x03\x38", 0x21ae -"\x00\x21\xd0\x00\x03\x38", 0x21cd -"\x00\x21\xd4\x00\x03\x38", 0x21ce -"\x00\x21\xd2\x00\x03\x38", 0x21cf -"\x00\x22\x03\x00\x03\x38", 0x2204 -"\x00\x22\x08\x00\x03\x38", 0x2209 -"\x00\x22\x0b\x00\x03\x38", 0x220c -"\x00\x22\x23\x00\x03\x38", 0x2224 -"\x00\x22\x25\x00\x03\x38", 0x2226 -"\x00\x22\x3c\x00\x03\x38", 0x2241 -"\x00\x22\x43\x00\x03\x38", 0x2244 -"\x00\x22\x45\x00\x03\x38", 0x2247 -"\x00\x22\x48\x00\x03\x38", 0x2249 -"\x00\x00\x3d\x00\x03\x38", 0x2260 -"\x00\x22\x61\x00\x03\x38", 0x2262 -"\x00\x22\x4d\x00\x03\x38", 0x226d -"\x00\x00\x3c\x00\x03\x38", 0x226e -"\x00\x00\x3e\x00\x03\x38", 0x226f -"\x00\x22\x64\x00\x03\x38", 0x2270 -"\x00\x22\x65\x00\x03\x38", 0x2271 -"\x00\x22\x72\x00\x03\x38", 0x2274 -"\x00\x22\x73\x00\x03\x38", 0x2275 -"\x00\x22\x76\x00\x03\x38", 0x2278 -"\x00\x22\x77\x00\x03\x38", 0x2279 -"\x00\x22\x7a\x00\x03\x38", 0x2280 -"\x00\x22\x7b\x00\x03\x38", 0x2281 -"\x00\x22\x82\x00\x03\x38", 0x2284 -"\x00\x22\x83\x00\x03\x38", 0x2285 -"\x00\x22\x86\x00\x03\x38", 0x2288 -"\x00\x22\x87\x00\x03\x38", 0x2289 -"\x00\x22\xa2\x00\x03\x38", 0x22ac -"\x00\x22\xa8\x00\x03\x38", 0x22ad -"\x00\x22\xa9\x00\x03\x38", 0x22ae -"\x00\x22\xab\x00\x03\x38", 0x22af -"\x00\x22\x7c\x00\x03\x38", 0x22e0 -"\x00\x22\x7d\x00\x03\x38", 0x22e1 -"\x00\x22\x91\x00\x03\x38", 0x22e2 -"\x00\x22\x92\x00\x03\x38", 0x22e3 -"\x00\x22\xb2\x00\x03\x38", 0x22ea -"\x00\x22\xb3\x00\x03\x38", 0x22eb -"\x00\x22\xb4\x00\x03\x38", 0x22ec -"\x00\x22\xb5\x00\x03\x38", 0x22ed -"\x00\x30\x4b\x00\x30\x99", 0x304c -"\x00\x30\x4d\x00\x30\x99", 0x304e -"\x00\x30\x4f\x00\x30\x99", 0x3050 -"\x00\x30\x51\x00\x30\x99", 0x3052 -"\x00\x30\x53\x00\x30\x99", 0x3054 -"\x00\x30\x55\x00\x30\x99", 0x3056 -"\x00\x30\x57\x00\x30\x99", 0x3058 -"\x00\x30\x59\x00\x30\x99", 0x305a -"\x00\x30\x5b\x00\x30\x99", 0x305c -"\x00\x30\x5d\x00\x30\x99", 0x305e -"\x00\x30\x5f\x00\x30\x99", 0x3060 -"\x00\x30\x61\x00\x30\x99", 0x3062 -"\x00\x30\x64\x00\x30\x99", 0x3065 -"\x00\x30\x66\x00\x30\x99", 0x3067 -"\x00\x30\x68\x00\x30\x99", 0x3069 -"\x00\x30\x6f\x00\x30\x99", 0x3070 -"\x00\x30\x6f\x00\x30\x9a", 0x3071 -"\x00\x30\x72\x00\x30\x99", 0x3073 -"\x00\x30\x72\x00\x30\x9a", 0x3074 -"\x00\x30\x75\x00\x30\x99", 0x3076 -"\x00\x30\x75\x00\x30\x9a", 0x3077 -"\x00\x30\x78\x00\x30\x99", 0x3079 -"\x00\x30\x78\x00\x30\x9a", 0x307a -"\x00\x30\x7b\x00\x30\x99", 0x307c -"\x00\x30\x7b\x00\x30\x9a", 0x307d -"\x00\x30\x46\x00\x30\x99", 0x3094 -"\x00\x30\x9d\x00\x30\x99", 0x309e -"\x00\x30\xab\x00\x30\x99", 0x30ac -"\x00\x30\xad\x00\x30\x99", 0x30ae -"\x00\x30\xaf\x00\x30\x99", 0x30b0 -"\x00\x30\xb1\x00\x30\x99", 0x30b2 -"\x00\x30\xb3\x00\x30\x99", 0x30b4 -"\x00\x30\xb5\x00\x30\x99", 0x30b6 -"\x00\x30\xb7\x00\x30\x99", 0x30b8 -"\x00\x30\xb9\x00\x30\x99", 0x30ba -"\x00\x30\xbb\x00\x30\x99", 0x30bc -"\x00\x30\xbd\x00\x30\x99", 0x30be -"\x00\x30\xbf\x00\x30\x99", 0x30c0 -"\x00\x30\xc1\x00\x30\x99", 0x30c2 -"\x00\x30\xc4\x00\x30\x99", 0x30c5 -"\x00\x30\xc6\x00\x30\x99", 0x30c7 -"\x00\x30\xc8\x00\x30\x99", 0x30c9 -"\x00\x30\xcf\x00\x30\x99", 0x30d0 -"\x00\x30\xcf\x00\x30\x9a", 0x30d1 -"\x00\x30\xd2\x00\x30\x99", 0x30d3 -"\x00\x30\xd2\x00\x30\x9a", 0x30d4 -"\x00\x30\xd5\x00\x30\x99", 0x30d6 -"\x00\x30\xd5\x00\x30\x9a", 0x30d7 -"\x00\x30\xd8\x00\x30\x99", 0x30d9 -"\x00\x30\xd8\x00\x30\x9a", 0x30da -"\x00\x30\xdb\x00\x30\x99", 0x30dc -"\x00\x30\xdb\x00\x30\x9a", 0x30dd -"\x00\x30\xa6\x00\x30\x99", 0x30f4 -"\x00\x30\xef\x00\x30\x99", 0x30f7 -"\x00\x30\xf0\x00\x30\x99", 0x30f8 -"\x00\x30\xf1\x00\x30\x99", 0x30f9 -"\x00\x30\xf2\x00\x30\x99", 0x30fa -"\x00\x30\xfd\x00\x30\x99", 0x30fe -"\x01\x10\x99\x01\x10\xba", 0x1109a -"\x01\x10\x9b\x01\x10\xba", 0x1109c -"\x01\x10\xa5\x01\x10\xba", 0x110ab -"\x01\x11\x31\x01\x11\x27", 0x1112e -"\x01\x11\x32\x01\x11\x27", 0x1112f -"\x01\x13\x47\x01\x13\x3e", 0x1134b -"\x01\x13\x47\x01\x13\x57", 0x1134c -"\x01\x14\xb9\x01\x14\xba", 0x114bb -"\x01\x14\xb9\x01\x14\xb0", 0x114bc -"\x01\x14\xb9\x01\x14\xbd", 0x114be -"\x01\x15\xb8\x01\x15\xaf", 0x115ba -"\x01\x15\xb9\x01\x15\xaf", 0x115bb diff --git a/lib/unistring/uninorm/composition-table.h b/lib/unistring/uninorm/composition-table.h deleted file mode 100644 index dcf293d2fd..0000000000 --- a/lib/unistring/uninorm/composition-table.h +++ /dev/null @@ -1,2203 +0,0 @@ -/* ANSI-C code produced by gperf version 3.0.4 */ -/* Command-line: gperf -m 1 ./uninorm/composition-table.gperf */ -/* Computed positions: -k'2-3,6' */ - - -#define TOTAL_KEYWORDS 940 -#define MIN_WORD_LENGTH 6 -#define MAX_WORD_LENGTH 6 -#define MIN_HASH_VALUE 1 -#define MAX_HASH_VALUE 1565 -/* maximum key range = 1565, duplicates = 0 */ - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -/*ARGSUSED*/ -static unsigned int -gl_uninorm_compose_hash (register const char *str, register unsigned int len) -{ - static const unsigned short asso_values[] = - { - 7, 1, 0, 3, 58, 132, 531, 62, 4, 33, - 117, 268, 476, 135, 509, 481, 103, 265, 249, 495, - 61, 124, 336, 409, 703, 241, 435, 462, 738, 1566, - 48, 13, 901, 766, 322, 635, 192, 621, 846, 13, - 337, 65, 161, 130, 103, 28, 255, 640, 133, 342, - 172, 52, 1566, 818, 201, 34, 695, 50, 31, 1566, - 16, 35, 438, 139, 63, 89, 272, 2, 588, 167, - 12, 375, 289, 61, 44, 548, 431, 452, 395, 180, - 794, 853, 362, 561, 456, 202, 677, 360, 195, 300, - 572, 715, 1566, 291, 1566, 276, 814, 26, 634, 579, - 270, 98, 423, 415, 323, 42, 862, 657, 559, 324, - 262, 124, 863, 1566, 251, 538, 236, 133, 47, 406, - 691, 219, 590, 5, 56, 83, 1566, 1, 1566, 1566, - 65, 39, 1566, 1566, 37, 35, 1566, 1566, 1566, 1566, - 1566, 1566, 1566, 1566, 4, 527, 18, 1566, 0, 849, - 1566, 781, 1566, 572, 59, 73, 1566, 204, 1566, 417, - 618, 511, 20, 1566, 1566, 708, 167, 1566, 855, 685, - 1566, 333, 73, 136, 71, 625, 611, 523, 12, 311, - 11, 649, 10, 505, 62, 482, 1566, 113, 1566, 126, - 7, 476, 1566, 614, 853, 1, 41, 560, 553, 261, - 104, 719, 668, 854, 19, 10, 9, 728, 31, 1566, - 442, 1566, 749, 313, 12, 0, 659, 3, 1566, 329, - 37, 1566, 1566, 1566, 44, 1566, 847, 1566, 33, 4, - 23, 1, 33, 24, 757, 4, 1566, 1566, 1566, 3, - 93, 73, 72, 1566, 824, 20, 17, 1566, 0, 1566, - 1566, 1566, 77, 46, 460, 1566, 1566 - }; - return asso_values[(unsigned char)str[5]+1] + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[1]]; -} - -#ifdef __GNUC__ -__inline -#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ -__attribute__ ((__gnu_inline__)) -#endif -#endif -const struct composition_rule * -gl_uninorm_compose_lookup (register const char *str, register unsigned int len) -{ - static const unsigned char lengthtable[] = - { - 0, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, - 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, - 0, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, - 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 0, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 0, 6, 6, 0, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 0, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, - 0, 6, 0, 6, 0, 6, 6, 6, 6, 0, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 0, 6, - 6, 6, 0, 6, 0, 6, 6, 6, 6, 0, 6, 6, 0, 6, - 6, 6, 0, 6, 0, 0, 0, 6, 0, 6, 0, 6, 6, 6, - 6, 0, 6, 6, 6, 6, 6, 0, 6, 0, 6, 0, 0, 6, - 6, 6, 6, 0, 6, 0, 0, 6, 6, 0, 6, 6, 6, 0, - 6, 0, 0, 0, 6, 0, 6, 6, 0, 6, 6, 0, 0, 0, - 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0, - 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 6, 6, 6, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, - 0, 0, 0, 0, 0, 0, 6, 6, 0, 6, 6, 6, 0, 6, - 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 6, 0, 0, 0, 6, 0, 0, 6, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 6, 6, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 6, 6, 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, 6, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, - 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, 0, 6, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 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, 6, 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, 6, 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, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 6, 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, 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, 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, 6, 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, 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, 0, 0, 0, 0, 6 - }; - static const struct composition_rule wordlist[] = - { - {""}, -#line 572 "./uninorm/composition-table.gperf" - {"\000\001\002\000\003\001", 0x1eae}, -#line 574 "./uninorm/composition-table.gperf" - {"\000\001\002\000\003\000", 0x1eb0}, - {""}, -#line 573 "./uninorm/composition-table.gperf" - {"\000\001\003\000\003\001", 0x1eaf}, -#line 575 "./uninorm/composition-table.gperf" - {"\000\001\003\000\003\000", 0x1eb1}, -#line 557 "./uninorm/composition-table.gperf" - {"\000\001\177\000\003\007", 0x1e9b}, -#line 238 "./uninorm/composition-table.gperf" - {"\000\000\370\000\003\001", 0x01ff}, -#line 412 "./uninorm/composition-table.gperf" - {"\000\000\347\000\003\001", 0x1e09}, -#line 90 "./uninorm/composition-table.gperf" - {"\000\000C\000\003\001", 0x0106}, -#line 450 "./uninorm/composition-table.gperf" - {"\000\000\357\000\003\001", 0x1e2f}, -#line 234 "./uninorm/composition-table.gperf" - {"\000\000\345\000\003\001", 0x01fb}, -#line 92 "./uninorm/composition-table.gperf" - {"\000\000C\000\003\002", 0x0108}, -#line 94 "./uninorm/composition-table.gperf" - {"\000\000C\000\003\007", 0x010a}, -#line 653 "./uninorm/composition-table.gperf" - {"\000\037\001\000\003\001", 0x1f05}, -#line 651 "./uninorm/composition-table.gperf" - {"\000\037\001\000\003\000", 0x1f03}, -#line 655 "./uninorm/composition-table.gperf" - {"\000\037\001\000\003B", 0x1f07}, -#line 660 "./uninorm/composition-table.gperf" - {"\000\037\010\000\003\001", 0x1f0c}, -#line 658 "./uninorm/composition-table.gperf" - {"\000\037\010\000\003\000", 0x1f0a}, -#line 662 "./uninorm/composition-table.gperf" - {"\000\037\010\000\003B", 0x1f0e}, -#line 652 "./uninorm/composition-table.gperf" - {"\000\037\000\000\003\001", 0x1f04}, -#line 650 "./uninorm/composition-table.gperf" - {"\000\037\000\000\003\000", 0x1f02}, -#line 654 "./uninorm/composition-table.gperf" - {"\000\037\000\000\003B", 0x1f06}, -#line 433 "./uninorm/composition-table.gperf" - {"\000\000F\000\003\007", 0x1e1e}, -#line 851 "./uninorm/composition-table.gperf" - {"\000\003\316\000\003E", 0x1ff4}, -#line 757 "./uninorm/composition-table.gperf" - {"\000\037\002\000\003E", 0x1f82}, -#line 756 "./uninorm/composition-table.gperf" - {"\000\037\001\000\003E", 0x1f81}, -#line 480 "./uninorm/composition-table.gperf" - {"\000\000\365\000\003\001", 0x1e4d}, -#line 758 "./uninorm/composition-table.gperf" - {"\000\037\003\000\003E", 0x1f83}, -#line 763 "./uninorm/composition-table.gperf" - {"\000\037\010\000\003E", 0x1f88}, -#line 236 "./uninorm/composition-table.gperf" - {"\000\000\346\000\003\001", 0x01fd}, -#line 506 "./uninorm/composition-table.gperf" - {"\000\001a\000\003\007", 0x1e67}, -#line 755 "./uninorm/composition-table.gperf" - {"\000\037\000\000\003E", 0x1f80}, -#line 58 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\001", 0x00e1}, -#line 57 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\000", 0x00e0}, -#line 809 "./uninorm/composition-table.gperf" - {"\000\037\266\000\003E", 0x1fb7}, -#line 59 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\002", 0x00e2}, -#line 270 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\007", 0x0227}, -#line 778 "./uninorm/composition-table.gperf" - {"\000\037'\000\003E", 0x1f97}, -#line 737 "./uninorm/composition-table.gperf" - {"\000\037a\000\003\001", 0x1f65}, -#line 735 "./uninorm/composition-table.gperf" - {"\000\037a\000\003\000", 0x1f63}, -#line 739 "./uninorm/composition-table.gperf" - {"\000\037a\000\003B", 0x1f67}, -#line 853 "./uninorm/composition-table.gperf" - {"\000\037\366\000\003E", 0x1ff7}, -#line 524 "./uninorm/composition-table.gperf" - {"\000\001i\000\003\001", 0x1e79}, -#line 206 "./uninorm/composition-table.gperf" - {"\000\000\334\000\003\001", 0x01d7}, -#line 210 "./uninorm/composition-table.gperf" - {"\000\000\334\000\003\000", 0x01db}, -#line 661 "./uninorm/composition-table.gperf" - {"\000\037\011\000\003\001", 0x1f0d}, -#line 659 "./uninorm/composition-table.gperf" - {"\000\037\011\000\003\000", 0x1f0b}, -#line 663 "./uninorm/composition-table.gperf" - {"\000\037\011\000\003B", 0x1f0f}, -#line 69 "./uninorm/composition-table.gperf" - {"\000\000i\000\003\001", 0x00ed}, -#line 68 "./uninorm/composition-table.gperf" - {"\000\000i\000\003\000", 0x00ec}, -#line 788 "./uninorm/composition-table.gperf" - {"\000\037a\000\003E", 0x1fa1}, -#line 70 "./uninorm/composition-table.gperf" - {"\000\000i\000\003\002", 0x00ee}, -#line 784 "./uninorm/composition-table.gperf" - {"\000\037-\000\003E", 0x1f9d}, -#line 129 "./uninorm/composition-table.gperf" - {"\000\000J\000\003\002", 0x0134}, -#line 745 "./uninorm/composition-table.gperf" - {"\000\037i\000\003\001", 0x1f6d}, -#line 743 "./uninorm/composition-table.gperf" - {"\000\037i\000\003\000", 0x1f6b}, -#line 747 "./uninorm/composition-table.gperf" - {"\000\037i\000\003B", 0x1f6f}, -#line 764 "./uninorm/composition-table.gperf" - {"\000\037\011\000\003E", 0x1f89}, -#line 578 "./uninorm/composition-table.gperf" - {"\000\001\002\000\003\003", 0x1eb4}, -#line 482 "./uninorm/composition-table.gperf" - {"\000\000\365\000\003\010", 0x1e4f}, -#line 615 "./uninorm/composition-table.gperf" - {"\000\036\315\000\003\002", 0x1ed9}, -#line 579 "./uninorm/composition-table.gperf" - {"\000\001\003\000\003\003", 0x1eb5}, -#line 705 "./uninorm/composition-table.gperf" - {"\000\0379\000\003\001", 0x1f3d}, -#line 703 "./uninorm/composition-table.gperf" - {"\000\0379\000\003\000", 0x1f3b}, -#line 707 "./uninorm/composition-table.gperf" - {"\000\0379\000\003B", 0x1f3f}, -#line 61 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\010", 0x00e4}, -#line 796 "./uninorm/composition-table.gperf" - {"\000\037i\000\003E", 0x1fa9}, -#line 43 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\001", 0x00cd}, -#line 42 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\000", 0x00cc}, -#line 614 "./uninorm/composition-table.gperf" - {"\000\036\314\000\003\002", 0x1ed8}, -#line 44 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\002", 0x00ce}, -#line 128 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\007", 0x0130}, -#line 875 "./uninorm/composition-table.gperf" - {"\000\000<\000\0038", 0x226e}, -#line 719 "./uninorm/composition-table.gperf" - {"\000\037I\000\003\001", 0x1f4d}, -#line 717 "./uninorm/composition-table.gperf" - {"\000\037I\000\003\000", 0x1f4b}, -#line 712 "./uninorm/composition-table.gperf" - {"\000\037@\000\003\001", 0x1f44}, -#line 710 "./uninorm/composition-table.gperf" - {"\000\037@\000\003\000", 0x1f42}, -#line 689 "./uninorm/composition-table.gperf" - {"\000\037)\000\003\001", 0x1f2d}, -#line 687 "./uninorm/composition-table.gperf" - {"\000\037)\000\003\000", 0x1f2b}, -#line 691 "./uninorm/composition-table.gperf" - {"\000\037)\000\003B", 0x1f2f}, -#line 849 "./uninorm/composition-table.gperf" - {"\000\037|\000\003E", 0x1ff2}, -#line 71 "./uninorm/composition-table.gperf" - {"\000\000i\000\003\010", 0x00ef}, -#line 759 "./uninorm/composition-table.gperf" - {"\000\037\004\000\003E", 0x1f84}, -#line 207 "./uninorm/composition-table.gperf" - {"\000\000\374\000\003\001", 0x01d8}, -#line 211 "./uninorm/composition-table.gperf" - {"\000\000\374\000\003\000", 0x01dc}, -#line 817 "./uninorm/composition-table.gperf" - {"\000\003\256\000\003E", 0x1fc4}, -#line 762 "./uninorm/composition-table.gperf" - {"\000\037\007\000\003E", 0x1f87}, -#line 807 "./uninorm/composition-table.gperf" - {"\000\003\254\000\003E", 0x1fb4}, -#line 319 "./uninorm/composition-table.gperf" - {"\000\004:\000\003\001", 0x045c}, -#line 780 "./uninorm/composition-table.gperf" - {"\000\037)\000\003E", 0x1f99}, -#line 60 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\003", 0x00e3}, -#line 872 "./uninorm/composition-table.gperf" - {"\000\000=\000\0038", 0x2260}, -#line 351 "./uninorm/composition-table.gperf" - {"\000\004C\000\003\010", 0x04f1}, -#line 333 "./uninorm/composition-table.gperf" - {"\000\004\331\000\003\010", 0x04db}, -#line 87 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\006", 0x0103}, -#line 32 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\001", 0x00c1}, -#line 31 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\000", 0x00c0}, -#line 89 "./uninorm/composition-table.gperf" - {"\000\000a\000\003(", 0x0105}, -#line 33 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\002", 0x00c2}, -#line 269 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\007", 0x0226}, -#line 45 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\010", 0x00cf}, -#line 713 "./uninorm/composition-table.gperf" - {"\000\037A\000\003\001", 0x1f45}, -#line 711 "./uninorm/composition-table.gperf" - {"\000\037A\000\003\000", 0x1f43}, -#line 354 "./uninorm/composition-table.gperf" - {"\000\004'\000\003\010", 0x04f4}, -#line 65 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\001", 0x00e9}, -#line 64 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\000", 0x00e8}, -#line 121 "./uninorm/composition-table.gperf" - {"\000\000i\000\003\003", 0x0129}, -#line 66 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\002", 0x00ea}, -#line 105 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\007", 0x0117}, -#line 317 "./uninorm/composition-table.gperf" - {"\000\0043\000\003\001", 0x0453}, -#line 125 "./uninorm/composition-table.gperf" - {"\000\000i\000\003\006", 0x012d}, -#line 528 "./uninorm/composition-table.gperf" - {"\000\000v\000\003\003", 0x1e7d}, -#line 596 "./uninorm/composition-table.gperf" - {"\000\036\270\000\003\002", 0x1ec6}, -#line 127 "./uninorm/composition-table.gperf" - {"\000\000i\000\003(", 0x012f}, -#line 345 "./uninorm/composition-table.gperf" - {"\000\004\351\000\003\010", 0x04eb}, -#line 668 "./uninorm/composition-table.gperf" - {"\000\037\020\000\003\001", 0x1f14}, -#line 666 "./uninorm/composition-table.gperf" - {"\000\037\020\000\003\000", 0x1f12}, -#line 576 "./uninorm/composition-table.gperf" - {"\000\001\002\000\003\011", 0x1eb2}, -#line 346 "./uninorm/composition-table.gperf" - {"\000\004-\000\003\010", 0x04ec}, -#line 368 "./uninorm/composition-table.gperf" - {"\000\0113\000\011<", 0x0934}, -#line 577 "./uninorm/composition-table.gperf" - {"\000\001\003\000\003\011", 0x1eb3}, -#line 321 "./uninorm/composition-table.gperf" - {"\000\004C\000\003\006", 0x045e}, -#line 792 "./uninorm/composition-table.gperf" - {"\000\037e\000\003E", 0x1fa5}, -#line 344 "./uninorm/composition-table.gperf" - {"\000\004\350\000\003\010", 0x04ea}, -#line 337 "./uninorm/composition-table.gperf" - {"\000\0047\000\003\010", 0x04df}, -#line 120 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\003", 0x0128}, -#line 432 "./uninorm/composition-table.gperf" - {"\000\002)\000\003\006", 0x1e1d}, -#line 783 "./uninorm/composition-table.gperf" - {"\000\037,\000\003E", 0x1f9c}, -#line 35 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\010", 0x00c4}, -#line 124 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\006", 0x012c}, -#line 74 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\001", 0x00f3}, -#line 73 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\000", 0x00f2}, -#line 126 "./uninorm/composition-table.gperf" - {"\000\000I\000\003(", 0x012e}, -#line 75 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\002", 0x00f4}, -#line 278 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\007", 0x022f}, -#line 240 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\017", 0x0201}, -#line 225 "./uninorm/composition-table.gperf" - {"\000\001\353\000\003\004", 0x01ed}, -#line 67 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\010", 0x00eb}, -#line 342 "./uninorm/composition-table.gperf" - {"\000\004\036\000\003\010", 0x04e6}, -#line 79 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\001", 0x00fa}, -#line 78 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\000", 0x00f9}, -#line 765 "./uninorm/composition-table.gperf" - {"\000\037\012\000\003E", 0x1f8a}, -#line 80 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\002", 0x00fb}, -#line 96 "./uninorm/composition-table.gperf" - {"\000\000C\000\003\014", 0x010c}, -#line 215 "./uninorm/composition-table.gperf" - {"\000\002'\000\003\004", 0x01e1}, -#line 696 "./uninorm/composition-table.gperf" - {"\000\0370\000\003\001", 0x1f34}, -#line 694 "./uninorm/composition-table.gperf" - {"\000\0370\000\003\000", 0x1f32}, -#line 698 "./uninorm/composition-table.gperf" - {"\000\0370\000\003B", 0x1f36}, -#line 802 "./uninorm/composition-table.gperf" - {"\000\037o\000\003E", 0x1faf}, -#line 561 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\011", 0x1ea3}, -#line 273 "./uninorm/composition-table.gperf" - {"\000\000\326\000\003\004", 0x022a}, -#line 248 "./uninorm/composition-table.gperf" - {"\000\000i\000\003\017", 0x0209}, -#line 227 "./uninorm/composition-table.gperf" - {"\000\002\222\000\003\014", 0x01ef}, -#line 34 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\003", 0x00c3}, -#line 782 "./uninorm/composition-table.gperf" - {"\000\037+\000\003E", 0x1f9b}, -#line 274 "./uninorm/composition-table.gperf" - {"\000\000\366\000\003\004", 0x022b}, -#line 760 "./uninorm/composition-table.gperf" - {"\000\037\005\000\003E", 0x1f85}, -#line 86 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\006", 0x0102}, -#line 276 "./uninorm/composition-table.gperf" - {"\000\000\365\000\003\004", 0x022d}, -#line 768 "./uninorm/composition-table.gperf" - {"\000\037\015\000\003E", 0x1f8d}, -#line 88 "./uninorm/composition-table.gperf" - {"\000\000A\000\003(", 0x0104}, -#line 217 "./uninorm/composition-table.gperf" - {"\000\000\346\000\003\004", 0x01e3}, -#line 587 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\003", 0x1ebd}, -#line 77 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\010", 0x00f6}, -#line 85 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\004", 0x0101}, -#line 599 "./uninorm/composition-table.gperf" - {"\000\000i\000\003\011", 0x1ec9}, -#line 103 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\006", 0x0115}, -#line 197 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\014", 0x01ce}, -#line 388 "./uninorm/composition-table.gperf" - {"\000\015\331\000\015\317", 0x0ddc}, -#line 107 "./uninorm/composition-table.gperf" - {"\000\000e\000\003(", 0x0119}, -#line 247 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\017", 0x0208}, -#line 213 "./uninorm/composition-table.gperf" - {"\000\000\344\000\003\004", 0x01df}, -#line 81 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\010", 0x00fc}, -#line 39 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\001", 0x00c9}, -#line 38 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\000", 0x00c8}, -#line 204 "./uninorm/composition-table.gperf" - {"\000\000\334\000\003\004", 0x01d5}, -#line 40 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\002", 0x00ca}, -#line 104 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\007", 0x0116}, -#line 208 "./uninorm/composition-table.gperf" - {"\000\000\334\000\003\014", 0x01d9}, -#line 212 "./uninorm/composition-table.gperf" - {"\000\000\304\000\003\004", 0x01de}, -#line 123 "./uninorm/composition-table.gperf" - {"\000\000i\000\003\004", 0x012b}, -#line 390 "./uninorm/composition-table.gperf" - {"\000\015\331\000\015\337", 0x0dde}, -#line 306 "./uninorm/composition-table.gperf" - {"\000\004\025\000\003\000", 0x0400}, -#line 199 "./uninorm/composition-table.gperf" - {"\000\000i\000\003\014", 0x01d0}, -#line 598 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\011", 0x1ec8}, -#line 781 "./uninorm/composition-table.gperf" - {"\000\037*\000\003E", 0x1f9a}, -#line 48 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\001", 0x00d3}, -#line 47 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\000", 0x00d2}, -#line 76 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\003", 0x00f5}, -#line 49 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\002", 0x00d4}, -#line 277 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\007", 0x022e}, -#line 349 "./uninorm/composition-table.gperf" - {"\000\004C\000\003\004", 0x04ef}, -#line 148 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\006", 0x014f}, -#line 328 "./uninorm/composition-table.gperf" - {"\000\004\020\000\003\010", 0x04d2}, -#line 954 "./uninorm/composition-table.gperf" - {"\0000\357\0000\231", 0x30f7}, -#line 223 "./uninorm/composition-table.gperf" - {"\000\000o\000\003(", 0x01eb}, -#line 924 "./uninorm/composition-table.gperf" - {"\0000{\0000\231", 0x307c}, -#line 170 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\003", 0x0169}, -#line 239 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\017", 0x0200}, -#line 122 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\004", 0x012a}, -#line 367 "./uninorm/composition-table.gperf" - {"\000\0110\000\011<", 0x0931}, -#line 174 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\006", 0x016d}, -#line 198 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\014", 0x01cf}, -#line 926 "./uninorm/composition-table.gperf" - {"\0000F\0000\231", 0x3094}, -#line 180 "./uninorm/composition-table.gperf" - {"\000\000u\000\003(", 0x0173}, -#line 541 "./uninorm/composition-table.gperf" - {"\000\000X\000\003\007", 0x1e8a}, -#line 41 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\010", 0x00cb}, -#line 244 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\017", 0x0205}, -#line 53 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\001", 0x00da}, -#line 52 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\000", 0x00d9}, -#line 925 "./uninorm/composition-table.gperf" - {"\0000{\0000\232", 0x307d}, -#line 54 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\002", 0x00db}, -#line 560 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\011", 0x1ea2}, -#line 460 "./uninorm/composition-table.gperf" - {"\000\0367\000\003\004", 0x1e39}, -#line 307 "./uninorm/composition-table.gperf" - {"\000\004\025\000\003\010", 0x0401}, -#line 205 "./uninorm/composition-table.gperf" - {"\000\000\374\000\003\004", 0x01d6}, -#line 775 "./uninorm/composition-table.gperf" - {"\000\037$\000\003E", 0x1f94}, -#line 912 "./uninorm/composition-table.gperf" - {"\0000a\0000\231", 0x3062}, -#line 209 "./uninorm/composition-table.gperf" - {"\000\000\374\000\003\014", 0x01da}, -#line 51 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\010", 0x00d6}, -#line 356 "./uninorm/composition-table.gperf" - {"\000\004+\000\003\010", 0x04f8}, -#line 585 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\011", 0x1ebb}, -#line 326 "./uninorm/composition-table.gperf" - {"\000\004\020\000\003\006", 0x04d0}, -#line 329 "./uninorm/composition-table.gperf" - {"\000\0040\000\003\010", 0x04d3}, -#line 559 "./uninorm/composition-table.gperf" - {"\000\000a\000\003#", 0x1ea1}, -#line 82 "./uninorm/composition-table.gperf" - {"\000\000y\000\003\001", 0x00fd}, -#line 641 "./uninorm/composition-table.gperf" - {"\000\000y\000\003\000", 0x1ef3}, -#line 84 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\004", 0x0100}, -#line 184 "./uninorm/composition-table.gperf" - {"\000\000y\000\003\002", 0x0177}, -#line 546 "./uninorm/composition-table.gperf" - {"\000\000y\000\003\007", 0x1e8f}, -#line 196 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\014", 0x01cd}, -#line 586 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\003", 0x1ebc}, -#line 940 "./uninorm/composition-table.gperf" - {"\0000\304\0000\231", 0x30c5}, -#line 252 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\017", 0x020d}, -#line 543 "./uninorm/composition-table.gperf" - {"\000\000X\000\003\010", 0x1e8c}, -#line 102 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\006", 0x0114}, -#line 101 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\004", 0x0113}, -#line 958 "./uninorm/composition-table.gperf" - {"\0000\375\0000\231", 0x30fe}, -#line 106 "./uninorm/composition-table.gperf" - {"\000\000E\000\003(", 0x0118}, -#line 109 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\014", 0x011b}, -#line 601 "./uninorm/composition-table.gperf" - {"\000\000i\000\003#", 0x1ecb}, -#line 55 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\010", 0x00dc}, -#line 260 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\017", 0x0215}, -#line 330 "./uninorm/composition-table.gperf" - {"\000\004\025\000\003\006", 0x04d6}, -#line 50 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\003", 0x00d5}, -#line 530 "./uninorm/composition-table.gperf" - {"\000\000v\000\003#", 0x1e7f}, -#line 510 "./uninorm/composition-table.gperf" - {"\000\000t\000\003\007", 0x1e6b}, -#line 605 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\011", 0x1ecf}, -#line 147 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\006", 0x014e}, -#line 425 "./uninorm/composition-table.gperf" - {"\000\001\022\000\003\001", 0x1e16}, -#line 423 "./uninorm/composition-table.gperf" - {"\000\001\022\000\003\000", 0x1e14}, -#line 222 "./uninorm/composition-table.gperf" - {"\000\000O\000\003(", 0x01ea}, -#line 327 "./uninorm/composition-table.gperf" - {"\000\0040\000\003\006", 0x04d1}, -#line 675 "./uninorm/composition-table.gperf" - {"\000\037\031\000\003\001", 0x1f1d}, -#line 673 "./uninorm/composition-table.gperf" - {"\000\037\031\000\003\000", 0x1f1b}, -#line 266 "./uninorm/composition-table.gperf" - {"\000\000t\000\003&", 0x021b}, -#line 629 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\011", 0x1ee7}, -#line 152 "./uninorm/composition-table.gperf" - {"\000\000r\000\003\001", 0x0155}, -#line 83 "./uninorm/composition-table.gperf" - {"\000\000y\000\003\010", 0x00ff}, -#line 600 "./uninorm/composition-table.gperf" - {"\000\000I\000\003#", 0x1eca}, -#line 815 "./uninorm/composition-table.gperf" - {"\000\037t\000\003E", 0x1fc2}, -#line 492 "./uninorm/composition-table.gperf" - {"\000\000r\000\003\007", 0x1e59}, -#line 146 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\004", 0x014d}, -#line 957 "./uninorm/composition-table.gperf" - {"\0000\362\0000\231", 0x30fa}, -#line 956 "./uninorm/composition-table.gperf" - {"\0000\361\0000\231", 0x30f9}, -#line 201 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\014", 0x01d2}, -#line 169 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\003", 0x0168}, -#line 411 "./uninorm/composition-table.gperf" - {"\000\000\307\000\003\001", 0x1e08}, -#line 140 "./uninorm/composition-table.gperf" - {"\000\000n\000\003\001", 0x0144}, -#line 232 "./uninorm/composition-table.gperf" - {"\000\000n\000\003\000", 0x01f9}, -#line 173 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\006", 0x016c}, -#line 172 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\004", 0x016b}, -#line 472 "./uninorm/composition-table.gperf" - {"\000\000n\000\003\007", 0x1e45}, -#line 179 "./uninorm/composition-table.gperf" - {"\000\000U\000\003(", 0x0172}, -#line 203 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\014", 0x01d4}, -#line 554 "./uninorm/composition-table.gperf" - {"\000\000t\000\003\010", 0x1e97}, -#line 243 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\017", 0x0204}, -#line 669 "./uninorm/composition-table.gperf" - {"\000\037\021\000\003\001", 0x1f15}, -#line 667 "./uninorm/composition-table.gperf" - {"\000\037\021\000\003\000", 0x1f13}, -#line 785 "./uninorm/composition-table.gperf" - {"\000\037.\000\003E", 0x1f9e}, -#line 414 "./uninorm/composition-table.gperf" - {"\000\000d\000\003\007", 0x1e0b}, -#line 242 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\021", 0x0203}, -#line 405 "./uninorm/composition-table.gperf" - {"\000\000B\000\003\007", 0x1e02}, -#line 647 "./uninorm/composition-table.gperf" - {"\000\000y\000\003\003", 0x1ef9}, -#line 955 "./uninorm/composition-table.gperf" - {"\0000\360\0000\231", 0x30f8}, -#line 384 "./uninorm/composition-table.gperf" - {"\000\015F\000\015>", 0x0d4a}, -#line 801 "./uninorm/composition-table.gperf" - {"\000\037n\000\003E", 0x1fae}, -#line 558 "./uninorm/composition-table.gperf" - {"\000\000A\000\003#", 0x1ea0}, -#line 960 "./uninorm/composition-table.gperf" - {"\001\020\233\001\020\272", 0x1109c}, -#line 251 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\017", 0x020c}, -#line 584 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\011", 0x1eba}, -#line 335 "./uninorm/composition-table.gperf" - {"\000\0046\000\003\010", 0x04dd}, -#line 766 "./uninorm/composition-table.gperf" - {"\000\037\013\000\003E", 0x1f8b}, -#line 323 "./uninorm/composition-table.gperf" - {"\000\004u\000\003\017", 0x0477}, -#line 791 "./uninorm/composition-table.gperf" - {"\000\037d\000\003E", 0x1fa4}, -#line 942 "./uninorm/composition-table.gperf" - {"\0000\310\0000\231", 0x30c9}, -#line 583 "./uninorm/composition-table.gperf" - {"\000\000e\000\003#", 0x1eb9}, -#line 250 "./uninorm/composition-table.gperf" - {"\000\000i\000\003\021", 0x020b}, -#line 118 "./uninorm/composition-table.gperf" - {"\000\000H\000\003\002", 0x0124}, -#line 437 "./uninorm/composition-table.gperf" - {"\000\000H\000\003\007", 0x1e22}, -#line 62 "./uninorm/composition-table.gperf" - {"\000\000a\000\003\012", 0x00e5}, -#line 718 "./uninorm/composition-table.gperf" - {"\000\037H\000\003\001", 0x1f4c}, -#line 716 "./uninorm/composition-table.gperf" - {"\000\037H\000\003\000", 0x1f4a}, -#line 604 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\011", 0x1ece}, -#line 936 "./uninorm/composition-table.gperf" - {"\0000\273\0000\231", 0x30bc}, -#line 100 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\004", 0x0112}, -#line 56 "./uninorm/composition-table.gperf" - {"\000\000Y\000\003\001", 0x00dd}, -#line 640 "./uninorm/composition-table.gperf" - {"\000\000Y\000\003\000", 0x1ef2}, -#line 108 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\014", 0x011a}, -#line 183 "./uninorm/composition-table.gperf" - {"\000\000Y\000\003\002", 0x0176}, -#line 545 "./uninorm/composition-table.gperf" - {"\000\000Y\000\003\007", 0x1e8e}, -#line 259 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\017", 0x0214}, -#line 730 "./uninorm/composition-table.gperf" - {"\000\037Y\000\003\001", 0x1f5d}, -#line 729 "./uninorm/composition-table.gperf" - {"\000\037Y\000\003\000", 0x1f5b}, -#line 731 "./uninorm/composition-table.gperf" - {"\000\037Y\000\003B", 0x1f5f}, -#line 916 "./uninorm/composition-table.gperf" - {"\0000o\0000\231", 0x3070}, -#line 249 "./uninorm/composition-table.gperf" - {"\000\000I\000\003\021", 0x020a}, -#line 937 "./uninorm/composition-table.gperf" - {"\0000\275\0000\231", 0x30be}, -#line 145 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\004", 0x014c}, -#line 479 "./uninorm/composition-table.gperf" - {"\000\000\325\000\003\001", 0x1e4c}, -#line 325 "./uninorm/composition-table.gperf" - {"\000\0046\000\003\006", 0x04c2}, -#line 200 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\014", 0x01d1}, -#line 603 "./uninorm/composition-table.gperf" - {"\000\000o\000\003#", 0x1ecd}, -#line 523 "./uninorm/composition-table.gperf" - {"\000\001h\000\003\001", 0x1e78}, -#line 920 "./uninorm/composition-table.gperf" - {"\0000u\0000\231", 0x3076}, -#line 628 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\011", 0x1ee6}, -#line 72 "./uninorm/composition-table.gperf" - {"\000\000n\000\003\003", 0x00f1}, -#line 929 "./uninorm/composition-table.gperf" - {"\0000\255\0000\231", 0x30ae}, -#line 441 "./uninorm/composition-table.gperf" - {"\000\000H\000\003\010", 0x1e26}, -#line 917 "./uninorm/composition-table.gperf" - {"\0000o\0000\232", 0x3071}, -#line 466 "./uninorm/composition-table.gperf" - {"\000\000m\000\003\001", 0x1e3f}, -#line 627 "./uninorm/composition-table.gperf" - {"\000\000u\000\003#", 0x1ee5}, -#line 119 "./uninorm/composition-table.gperf" - {"\000\000h\000\003\002", 0x0125}, -#line 438 "./uninorm/composition-table.gperf" - {"\000\000h\000\003\007", 0x1e23}, -#line 468 "./uninorm/composition-table.gperf" - {"\000\000m\000\003\007", 0x1e41}, -#line 744 "./uninorm/composition-table.gperf" - {"\000\037h\000\003\001", 0x1f6c}, -#line 742 "./uninorm/composition-table.gperf" - {"\000\037h\000\003\000", 0x1f6a}, -#line 746 "./uninorm/composition-table.gperf" - {"\000\037h\000\003B", 0x1f6e}, -#line 921 "./uninorm/composition-table.gperf" - {"\0000u\0000\232", 0x3077}, -#line 185 "./uninorm/composition-table.gperf" - {"\000\000Y\000\003\010", 0x0178}, -#line 171 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\004", 0x016a}, -#line 386 "./uninorm/composition-table.gperf" - {"\000\015F\000\015W", 0x0d4c}, -#line 645 "./uninorm/composition-table.gperf" - {"\000\000y\000\003\011", 0x1ef7}, -#line 202 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\014", 0x01d3}, -#line 241 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\021", 0x0202}, -#line 37 "./uninorm/composition-table.gperf" - {"\000\000C\000\003'", 0x00c7}, -#line 773 "./uninorm/composition-table.gperf" - {"\000\037\"\000\003E", 0x1f92}, -#line 795 "./uninorm/composition-table.gperf" - {"\000\037h\000\003E", 0x1fa8}, -#line 800 "./uninorm/composition-table.gperf" - {"\000\037m\000\003E", 0x1fad}, -#line 688 "./uninorm/composition-table.gperf" - {"\000\037(\000\003\001", 0x1f2c}, -#line 686 "./uninorm/composition-table.gperf" - {"\000\037(\000\003\000", 0x1f2a}, -#line 690 "./uninorm/composition-table.gperf" - {"\000\037(\000\003B", 0x1f2e}, -#line 481 "./uninorm/composition-table.gperf" - {"\000\000\325\000\003\010", 0x1e4e}, -#line 246 "./uninorm/composition-table.gperf" - {"\000\000e\000\003\021", 0x0207}, -#line 697 "./uninorm/composition-table.gperf" - {"\000\0371\000\003\001", 0x1f35}, -#line 695 "./uninorm/composition-table.gperf" - {"\000\0371\000\003\000", 0x1f33}, -#line 699 "./uninorm/composition-table.gperf" - {"\000\0371\000\003B", 0x1f37}, -#line 282 "./uninorm/composition-table.gperf" - {"\000\000y\000\003\004", 0x0233}, -#line 953 "./uninorm/composition-table.gperf" - {"\0000\246\0000\231", 0x30f4}, -#line 428 "./uninorm/composition-table.gperf" - {"\000\000e\000\003-", 0x1e19}, -#line 256 "./uninorm/composition-table.gperf" - {"\000\000r\000\003\017", 0x0211}, -#line 779 "./uninorm/composition-table.gperf" - {"\000\037(\000\003E", 0x1f98}, -#line 442 "./uninorm/composition-table.gperf" - {"\000\000h\000\003\010", 0x1e27}, -#line 36 "./uninorm/composition-table.gperf" - {"\000\000A\000\003\012", 0x00c5}, -#line 646 "./uninorm/composition-table.gperf" - {"\000\000Y\000\003\003", 0x1ef8}, -#line 582 "./uninorm/composition-table.gperf" - {"\000\000E\000\003#", 0x1eb8}, -#line 533 "./uninorm/composition-table.gperf" - {"\000\000W\000\003\001", 0x1e82}, -#line 531 "./uninorm/composition-table.gperf" - {"\000\000W\000\003\000", 0x1e80}, -#line 151 "./uninorm/composition-table.gperf" - {"\000\000R\000\003\001", 0x0154}, -#line 181 "./uninorm/composition-table.gperf" - {"\000\000W\000\003\002", 0x0174}, -#line 537 "./uninorm/composition-table.gperf" - {"\000\000W\000\003\007", 0x1e86}, -#line 903 "./uninorm/composition-table.gperf" - {"\0000O\0000\231", 0x3050}, -#line 491 "./uninorm/composition-table.gperf" - {"\000\000R\000\003\007", 0x1e58}, -#line 869 "./uninorm/composition-table.gperf" - {"\000\"C\000\0038", 0x2244}, -#line 863 "./uninorm/composition-table.gperf" - {"\000\"\003\000\0038", 0x2204}, -#line 864 "./uninorm/composition-table.gperf" - {"\000\"\010\000\0038", 0x2209}, -#line 884 "./uninorm/composition-table.gperf" - {"\000\"{\000\0038", 0x2281}, -#line 168 "./uninorm/composition-table.gperf" - {"\000\000t\000\003\014", 0x0165}, -#line 602 "./uninorm/composition-table.gperf" - {"\000\000O\000\003#", 0x1ecc}, -#line 254 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\021", 0x020f}, -#line 459 "./uninorm/composition-table.gperf" - {"\000\0366\000\003\004", 0x1e38}, -#line 229 "./uninorm/composition-table.gperf" - {"\000\000G\000\003\001", 0x01f4}, -#line 899 "./uninorm/composition-table.gperf" - {"\000\"\264\000\0038", 0x22ec}, -#line 897 "./uninorm/composition-table.gperf" - {"\000\"\262\000\0038", 0x22ea}, -#line 110 "./uninorm/composition-table.gperf" - {"\000\000G\000\003\002", 0x011c}, -#line 114 "./uninorm/composition-table.gperf" - {"\000\000G\000\003\007", 0x0120}, -#line 279 "./uninorm/composition-table.gperf" - {"\000\002.\000\003\004", 0x0230}, -#line 868 "./uninorm/composition-table.gperf" - {"\000\"<\000\0038", 0x2241}, -#line 262 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\021", 0x0217}, -#line 896 "./uninorm/composition-table.gperf" - {"\000\"\222\000\0038", 0x22e3}, -#line 448 "./uninorm/composition-table.gperf" - {"\000\000i\000\0030", 0x1e2d}, -#line 889 "./uninorm/composition-table.gperf" - {"\000\"\242\000\0038", 0x22ac}, -#line 156 "./uninorm/composition-table.gperf" - {"\000\000r\000\003\014", 0x0159}, -#line 906 "./uninorm/composition-table.gperf" - {"\0000U\0000\231", 0x3056}, -#line 522 "./uninorm/composition-table.gperf" - {"\000\000u\000\003-", 0x1e77}, -#line 927 "./uninorm/composition-table.gperf" - {"\0000\235\0000\231", 0x309e}, -#line 322 "./uninorm/composition-table.gperf" - {"\000\004t\000\003\017", 0x0476}, -#line 873 "./uninorm/composition-table.gperf" - {"\000\"a\000\0038", 0x2262}, -#line 431 "./uninorm/composition-table.gperf" - {"\000\002(\000\003\006", 0x1e1c}, -#line 535 "./uninorm/composition-table.gperf" - {"\000\000W\000\003\010", 0x1e84}, -#line 626 "./uninorm/composition-table.gperf" - {"\000\000U\000\003#", 0x1ee4}, -#line 139 "./uninorm/composition-table.gperf" - {"\000\000N\000\003\001", 0x0143}, -#line 231 "./uninorm/composition-table.gperf" - {"\000\000N\000\003\000", 0x01f8}, -#line 144 "./uninorm/composition-table.gperf" - {"\000\000n\000\003\014", 0x0148}, -#line 366 "./uninorm/composition-table.gperf" - {"\000\011(\000\011<", 0x0929}, -#line 471 "./uninorm/composition-table.gperf" - {"\000\000N\000\003\007", 0x1e44}, -#line 888 "./uninorm/composition-table.gperf" - {"\000\"\207\000\0038", 0x2289}, -#line 176 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\012", 0x016f}, -#line 887 "./uninorm/composition-table.gperf" - {"\000\"\206\000\0038", 0x2288}, -#line 447 "./uninorm/composition-table.gperf" - {"\000\000I\000\0030", 0x1e2c}, -#line 886 "./uninorm/composition-table.gperf" - {"\000\"\203\000\0038", 0x2285}, -#line 99 "./uninorm/composition-table.gperf" - {"\000\000d\000\003\014", 0x010f}, -#line 534 "./uninorm/composition-table.gperf" - {"\000\000w\000\003\001", 0x1e83}, -#line 532 "./uninorm/composition-table.gperf" - {"\000\000w\000\003\000", 0x1e81}, -#line 514 "./uninorm/composition-table.gperf" - {"\000\000t\000\0031", 0x1e6f}, -#line 182 "./uninorm/composition-table.gperf" - {"\000\000w\000\003\002", 0x0175}, -#line 538 "./uninorm/composition-table.gperf" - {"\000\000w\000\003\007", 0x1e87}, -#line 643 "./uninorm/composition-table.gperf" - {"\000\000y\000\003#", 0x1ef5}, -#line 881 "./uninorm/composition-table.gperf" - {"\000\"v\000\0038", 0x2278}, -#line 288 "./uninorm/composition-table.gperf" - {"\000\003\237\000\003\001", 0x038c}, -#line 854 "./uninorm/composition-table.gperf" - {"\000\003\237\000\003\000", 0x1ff8}, -#line 230 "./uninorm/composition-table.gperf" - {"\000\000g\000\003\001", 0x01f5}, -#line 245 "./uninorm/composition-table.gperf" - {"\000\000E\000\003\021", 0x0206}, -#line 644 "./uninorm/composition-table.gperf" - {"\000\000Y\000\003\011", 0x1ef6}, -#line 111 "./uninorm/composition-table.gperf" - {"\000\000g\000\003\002", 0x011d}, -#line 115 "./uninorm/composition-table.gperf" - {"\000\000g\000\003\007", 0x0121}, -#line 334 "./uninorm/composition-table.gperf" - {"\000\004\026\000\003\010", 0x04dc}, -#line 893 "./uninorm/composition-table.gperf" - {"\000\"|\000\0038", 0x22e0}, -#line 427 "./uninorm/composition-table.gperf" - {"\000\000E\000\003-", 0x1e18}, -#line 498 "./uninorm/composition-table.gperf" - {"\000\000r\000\0031", 0x1e5f}, -#line 267 "./uninorm/composition-table.gperf" - {"\000\000H\000\003\014", 0x021e}, -#line 485 "./uninorm/composition-table.gperf" - {"\000\001L\000\003\001", 0x1e52}, -#line 483 "./uninorm/composition-table.gperf" - {"\000\001L\000\003\000", 0x1e50}, -#line 434 "./uninorm/composition-table.gperf" - {"\000\000f\000\003\007", 0x1e1f}, -#line 512 "./uninorm/composition-table.gperf" - {"\000\000t\000\003#", 0x1e6d}, -#line 253 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\021", 0x020e}, -#line 885 "./uninorm/composition-table.gperf" - {"\000\"\202\000\0038", 0x2284}, -#line 133 "./uninorm/composition-table.gperf" - {"\000\000L\000\003\001", 0x0139}, -#line 281 "./uninorm/composition-table.gperf" - {"\000\000Y\000\003\004", 0x0232}, -#line 794 "./uninorm/composition-table.gperf" - {"\000\037g\000\003E", 0x1fa7}, -#line 476 "./uninorm/composition-table.gperf" - {"\000\000n\000\0031", 0x1e49}, -#line 272 "./uninorm/composition-table.gperf" - {"\000\000e\000\003'", 0x0229}, -#line 918 "./uninorm/composition-table.gperf" - {"\0000r\0000\231", 0x3073}, -#line 112 "./uninorm/composition-table.gperf" - {"\000\000G\000\003\006", 0x011e}, -#line 304 "./uninorm/composition-table.gperf" - {"\000\003\322\000\003\001", 0x03d3}, -#line 536 "./uninorm/composition-table.gperf" - {"\000\000w\000\003\010", 0x1e85}, -#line 430 "./uninorm/composition-table.gperf" - {"\000\000e\000\0030", 0x1e1b}, -#line 793 "./uninorm/composition-table.gperf" - {"\000\037f\000\003E", 0x1fa6}, -#line 418 "./uninorm/composition-table.gperf" - {"\000\000d\000\0031", 0x1e0f}, -#line 494 "./uninorm/composition-table.gperf" - {"\000\000r\000\003#", 0x1e5b}, -#line 409 "./uninorm/composition-table.gperf" - {"\000\000B\000\0031", 0x1e06}, -#line 275 "./uninorm/composition-table.gperf" - {"\000\000\325\000\003\004", 0x022c}, -#line 486 "./uninorm/composition-table.gperf" - {"\000\001M\000\003\001", 0x1e53}, -#line 484 "./uninorm/composition-table.gperf" - {"\000\001M\000\003\000", 0x1e51}, -#line 894 "./uninorm/composition-table.gperf" - {"\000\"}\000\0038", 0x22e1}, -#line 324 "./uninorm/composition-table.gperf" - {"\000\004\026\000\003\006", 0x04c1}, -#line 919 "./uninorm/composition-table.gperf" - {"\0000r\0000\232", 0x3074}, -#line 261 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\021", 0x0216}, -#line 465 "./uninorm/composition-table.gperf" - {"\000\000M\000\003\001", 0x1e3e}, -#line 46 "./uninorm/composition-table.gperf" - {"\000\000N\000\003\003", 0x00d1}, -#line 474 "./uninorm/composition-table.gperf" - {"\000\000n\000\003#", 0x1e47}, -#line 913 "./uninorm/composition-table.gperf" - {"\0000d\0000\231", 0x3065}, -#line 467 "./uninorm/composition-table.gperf" - {"\000\000M\000\003\007", 0x1e40}, -#line 521 "./uninorm/composition-table.gperf" - {"\000\000U\000\003-", 0x1e76}, -#line 268 "./uninorm/composition-table.gperf" - {"\000\000h\000\003\014", 0x021f}, -#line 355 "./uninorm/composition-table.gperf" - {"\000\004G\000\003\010", 0x04f5}, -#line 509 "./uninorm/composition-table.gperf" - {"\000\000T\000\003\007", 0x1e6a}, -#line 911 "./uninorm/composition-table.gperf" - {"\0000_\0000\231", 0x3060}, -#line 416 "./uninorm/composition-table.gperf" - {"\000\000d\000\003#", 0x1e0d}, -#line 878 "./uninorm/composition-table.gperf" - {"\000\"e\000\0038", 0x2271}, -#line 407 "./uninorm/composition-table.gperf" - {"\000\000B\000\003#", 0x1e04}, -#line 255 "./uninorm/composition-table.gperf" - {"\000\000R\000\003\017", 0x0210}, -#line 835 "./uninorm/composition-table.gperf" - {"\000\037\376\000\003\001", 0x1fde}, -#line 834 "./uninorm/composition-table.gperf" - {"\000\037\376\000\003\000", 0x1fdd}, -#line 836 "./uninorm/composition-table.gperf" - {"\000\037\376\000\003B", 0x1fdf}, -#line 265 "./uninorm/composition-table.gperf" - {"\000\000T\000\003&", 0x021a}, -#line 175 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\012", 0x016e}, -#line 305 "./uninorm/composition-table.gperf" - {"\000\003\322\000\003\010", 0x03d4}, -#line 301 "./uninorm/composition-table.gperf" - {"\000\003\277\000\003\001", 0x03cc}, -#line 752 "./uninorm/composition-table.gperf" - {"\000\003\277\000\003\000", 0x1f78}, -#line 714 "./uninorm/composition-table.gperf" - {"\000\003\237\000\003\023", 0x1f48}, -#line 520 "./uninorm/composition-table.gperf" - {"\000\000u\000\0030", 0x1e75}, -#line 910 "./uninorm/composition-table.gperf" - {"\0000]\0000\231", 0x305e}, -#line 113 "./uninorm/composition-table.gperf" - {"\000\000g\000\003\006", 0x011f}, -#line 297 "./uninorm/composition-table.gperf" - {"\000\003\271\000\003\001", 0x03af}, -#line 751 "./uninorm/composition-table.gperf" - {"\000\003\271\000\003\000", 0x1f76}, -#line 829 "./uninorm/composition-table.gperf" - {"\000\003\271\000\003B", 0x1fd6}, -#line 439 "./uninorm/composition-table.gperf" - {"\000\000H\000\003#", 0x1e24}, -#line 824 "./uninorm/composition-table.gperf" - {"\000\037\277\000\003\001", 0x1fce}, -#line 823 "./uninorm/composition-table.gperf" - {"\000\037\277\000\003\000", 0x1fcd}, -#line 825 "./uninorm/composition-table.gperf" - {"\000\037\277\000\003B", 0x1fcf}, -#line 908 "./uninorm/composition-table.gperf" - {"\0000Y\0000\231", 0x305a}, -#line 310 "./uninorm/composition-table.gperf" - {"\000\004\032\000\003\001", 0x040c}, -#line 556 "./uninorm/composition-table.gperf" - {"\000\000y\000\003\012", 0x1e99}, -#line 876 "./uninorm/composition-table.gperf" - {"\000\000>\000\0038", 0x226f}, -#line 426 "./uninorm/composition-table.gperf" - {"\000\001\023\000\003\001", 0x1e17}, -#line 424 "./uninorm/composition-table.gperf" - {"\000\001\023\000\003\000", 0x1e15}, -#line 516 "./uninorm/composition-table.gperf" - {"\000\000t\000\003-", 0x1e71}, -#line 642 "./uninorm/composition-table.gperf" - {"\000\000Y\000\003#", 0x1ef4}, -#line 336 "./uninorm/composition-table.gperf" - {"\000\004\027\000\003\010", 0x04de}, -#line 767 "./uninorm/composition-table.gperf" - {"\000\037\014\000\003E", 0x1f8c}, -#line 553 "./uninorm/composition-table.gperf" - {"\000\000h\000\0031", 0x1e96}, -#line 932 "./uninorm/composition-table.gperf" - {"\0000\263\0000\231", 0x30b4}, -#line 155 "./uninorm/composition-table.gperf" - {"\000\000R\000\003\014", 0x0158}, -#line 947 "./uninorm/composition-table.gperf" - {"\0000\325\0000\231", 0x30d6}, -#line 770 "./uninorm/composition-table.gperf" - {"\000\037\017\000\003E", 0x1f8f}, -#line 258 "./uninorm/composition-table.gperf" - {"\000\000r\000\003\021", 0x0213}, -#line 296 "./uninorm/composition-table.gperf" - {"\000\003\267\000\003\001", 0x03ae}, -#line 750 "./uninorm/composition-table.gperf" - {"\000\003\267\000\003\000", 0x1f74}, -#line 818 "./uninorm/composition-table.gperf" - {"\000\003\267\000\003B", 0x1fc6}, -#line 271 "./uninorm/composition-table.gperf" - {"\000\000E\000\003'", 0x0228}, -#line 617 "./uninorm/composition-table.gperf" - {"\000\001\241\000\003\001", 0x1edb}, -#line 619 "./uninorm/composition-table.gperf" - {"\000\001\241\000\003\000", 0x1edd}, -#line 435 "./uninorm/composition-table.gperf" - {"\000\000G\000\003\004", 0x1e20}, -#line 915 "./uninorm/composition-table.gperf" - {"\0000h\0000\231", 0x3069}, -#line 429 "./uninorm/composition-table.gperf" - {"\000\000E\000\0030", 0x1e1a}, -#line 218 "./uninorm/composition-table.gperf" - {"\000\000G\000\003\014", 0x01e6}, -#line 299 "./uninorm/composition-table.gperf" - {"\000\003\271\000\003\010", 0x03ca}, -#line 948 "./uninorm/composition-table.gperf" - {"\0000\325\0000\232", 0x30d7}, -#line 816 "./uninorm/composition-table.gperf" - {"\000\003\267\000\003E", 0x1fc3}, -#line 951 "./uninorm/composition-table.gperf" - {"\0000\333\0000\231", 0x30dc}, -#line 440 "./uninorm/composition-table.gperf" - {"\000\000h\000\003#", 0x1e25}, -#line 470 "./uninorm/composition-table.gperf" - {"\000\000m\000\003#", 0x1e43}, -#line 478 "./uninorm/composition-table.gperf" - {"\000\000n\000\003-", 0x1e4b}, -#line 928 "./uninorm/composition-table.gperf" - {"\0000\253\0000\231", 0x30ac}, -#line 294 "./uninorm/composition-table.gperf" - {"\000\003\261\000\003\001", 0x03ac}, -#line 748 "./uninorm/composition-table.gperf" - {"\000\003\261\000\003\000", 0x1f70}, -#line 808 "./uninorm/composition-table.gperf" - {"\000\003\261\000\003B", 0x1fb6}, -#line 343 "./uninorm/composition-table.gperf" - {"\000\004>\000\003\010", 0x04e7}, -#line 284 "./uninorm/composition-table.gperf" - {"\000\003\221\000\003\001", 0x0386}, -#line 812 "./uninorm/composition-table.gperf" - {"\000\003\221\000\003\000", 0x1fba}, -#line 422 "./uninorm/composition-table.gperf" - {"\000\000d\000\003-", 0x1e13}, -#line 597 "./uninorm/composition-table.gperf" - {"\000\036\271\000\003\002", 0x1ec7}, -#line 769 "./uninorm/composition-table.gperf" - {"\000\037\016\000\003E", 0x1f8e}, -#line 952 "./uninorm/composition-table.gperf" - {"\0000\333\0000\232", 0x30dd}, -#line 353 "./uninorm/composition-table.gperf" - {"\000\004C\000\003\013", 0x04f3}, -#line 143 "./uninorm/composition-table.gperf" - {"\000\000N\000\003\014", 0x0147}, -#line 806 "./uninorm/composition-table.gperf" - {"\000\003\261\000\003E", 0x1fb3}, -#line 870 "./uninorm/composition-table.gperf" - {"\000\"E\000\0038", 0x2247}, -#line 708 "./uninorm/composition-table.gperf" - {"\000\003\277\000\003\023", 0x1f40}, -#line 497 "./uninorm/composition-table.gperf" - {"\000\000R\000\0031", 0x1e5e}, -#line 813 "./uninorm/composition-table.gperf" - {"\000\003\221\000\003E", 0x1fbc}, -#line 347 "./uninorm/composition-table.gperf" - {"\000\004M\000\003\010", 0x04ed}, -#line 715 "./uninorm/composition-table.gperf" - {"\000\003\237\000\003\024", 0x1f49}, -#line 158 "./uninorm/composition-table.gperf" - {"\000\000s\000\003\001", 0x015b}, -#line 692 "./uninorm/composition-table.gperf" - {"\000\003\271\000\003\023", 0x1f30}, -#line 826 "./uninorm/composition-table.gperf" - {"\000\003\271\000\003\006", 0x1fd0}, -#line 160 "./uninorm/composition-table.gperf" - {"\000\000s\000\003\002", 0x015d}, -#line 500 "./uninorm/composition-table.gperf" - {"\000\000s\000\003\007", 0x1e61}, -#line 968 "./uninorm/composition-table.gperf" - {"\001\024\271\001\024\275", 0x114be}, -#line 519 "./uninorm/composition-table.gperf" - {"\000\000U\000\0030", 0x1e74}, -#line 907 "./uninorm/composition-table.gperf" - {"\0000W\0000\231", 0x3058}, -#line 308 "./uninorm/composition-table.gperf" - {"\000\004\023\000\003\001", 0x0403}, -#line 436 "./uninorm/composition-table.gperf" - {"\000\000g\000\003\004", 0x1e21}, -#line 451 "./uninorm/composition-table.gperf" - {"\000\000K\000\003\001", 0x1e30}, -#line 761 "./uninorm/composition-table.gperf" - {"\000\037\006\000\003E", 0x1f86}, -#line 219 "./uninorm/composition-table.gperf" - {"\000\000g\000\003\014", 0x01e7}, -#line 264 "./uninorm/composition-table.gperf" - {"\000\000s\000\003&", 0x0219}, -#line 539 "./uninorm/composition-table.gperf" - {"\000\000W\000\003#", 0x1e88}, -#line 235 "./uninorm/composition-table.gperf" - {"\000\000\306\000\003\001", 0x01fc}, -#line 493 "./uninorm/composition-table.gperf" - {"\000\000R\000\003#", 0x1e5a}, -#line 571 "./uninorm/composition-table.gperf" - {"\000\036\241\000\003\002", 0x1ead}, -#line 302 "./uninorm/composition-table.gperf" - {"\000\003\305\000\003\001", 0x03cd}, -#line 753 "./uninorm/composition-table.gperf" - {"\000\003\305\000\003\000", 0x1f7a}, -#line 842 "./uninorm/composition-table.gperf" - {"\000\003\305\000\003B", 0x1fe6}, -#line 134 "./uninorm/composition-table.gperf" - {"\000\000l\000\003\001", 0x013a}, -#line 233 "./uninorm/composition-table.gperf" - {"\000\000\305\000\003\001", 0x01fa}, -#line 157 "./uninorm/composition-table.gperf" - {"\000\000S\000\003\001", 0x015a}, -#line 676 "./uninorm/composition-table.gperf" - {"\000\003\267\000\003\023", 0x1f20}, -#line 623 "./uninorm/composition-table.gperf" - {"\000\001\241\000\003\003", 0x1ee1}, -#line 159 "./uninorm/composition-table.gperf" - {"\000\000S\000\003\002", 0x015c}, -#line 499 "./uninorm/composition-table.gperf" - {"\000\000S\000\003\007", 0x1e60}, -#line 137 "./uninorm/composition-table.gperf" - {"\000\000L\000\003\014", 0x013d}, -#line 475 "./uninorm/composition-table.gperf" - {"\000\000N\000\0031", 0x1e48}, -#line 287 "./uninorm/composition-table.gperf" - {"\000\003\231\000\003\001", 0x038a}, -#line 833 "./uninorm/composition-table.gperf" - {"\000\003\231\000\003\000", 0x1fda}, -#line 503 "./uninorm/composition-table.gperf" - {"\000\001Z\000\003\007", 0x1e64}, -#line 819 "./uninorm/composition-table.gperf" - {"\000\037\306\000\003E", 0x1fc7}, -#line 186 "./uninorm/composition-table.gperf" - {"\000\000Z\000\003\001", 0x0179}, -#line 166 "./uninorm/composition-table.gperf" - {"\000\000t\000\003'", 0x0163}, -#line 263 "./uninorm/composition-table.gperf" - {"\000\000S\000\003&", 0x0218}, -#line 547 "./uninorm/composition-table.gperf" - {"\000\000Z\000\003\002", 0x1e90}, -#line 188 "./uninorm/composition-table.gperf" - {"\000\000Z\000\003\007", 0x017b}, -#line 799 "./uninorm/composition-table.gperf" - {"\000\037l\000\003E", 0x1fac}, - {""}, -#line 91 "./uninorm/composition-table.gperf" - {"\000\000c\000\003\001", 0x0107}, -#line 648 "./uninorm/composition-table.gperf" - {"\000\003\261\000\003\023", 0x1f00}, -#line 803 "./uninorm/composition-table.gperf" - {"\000\003\261\000\003\006", 0x1fb0}, -#line 93 "./uninorm/composition-table.gperf" - {"\000\000c\000\003\002", 0x0109}, -#line 95 "./uninorm/composition-table.gperf" - {"\000\000c\000\003\007", 0x010b}, -#line 656 "./uninorm/composition-table.gperf" - {"\000\003\221\000\003\023", 0x1f08}, -#line 810 "./uninorm/composition-table.gperf" - {"\000\003\221\000\003\006", 0x1fb8}, - {""}, -#line 473 "./uninorm/composition-table.gperf" - {"\000\000N\000\003#", 0x1e46}, -#line 154 "./uninorm/composition-table.gperf" - {"\000\000r\000\003'", 0x0157}, -#line 300 "./uninorm/composition-table.gperf" - {"\000\003\305\000\003\010", 0x03cb}, -#line 187 "./uninorm/composition-table.gperf" - {"\000\000z\000\003\001", 0x017a}, -#line 167 "./uninorm/composition-table.gperf" - {"\000\000T\000\003\014", 0x0164}, -#line 413 "./uninorm/composition-table.gperf" - {"\000\000D\000\003\007", 0x1e0a}, -#line 548 "./uninorm/composition-table.gperf" - {"\000\000z\000\003\002", 0x1e91}, -#line 189 "./uninorm/composition-table.gperf" - {"\000\000z\000\003\007", 0x017c}, - {""}, -#line 709 "./uninorm/composition-table.gperf" - {"\000\003\277\000\003\024", 0x1f41}, -#line 790 "./uninorm/composition-table.gperf" - {"\000\037c\000\003E", 0x1fa3}, -#line 540 "./uninorm/composition-table.gperf" - {"\000\000w\000\003#", 0x1e89}, -#line 142 "./uninorm/composition-table.gperf" - {"\000\000n\000\003'", 0x0146}, -#line 150 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\013", 0x0151}, -#line 292 "./uninorm/composition-table.gperf" - {"\000\003\231\000\003\010", 0x03aa}, -#line 693 "./uninorm/composition-table.gperf" - {"\000\003\271\000\003\024", 0x1f31}, -#line 461 "./uninorm/composition-table.gperf" - {"\000\000L\000\0031", 0x1e3a}, - {""}, -#line 631 "./uninorm/composition-table.gperf" - {"\000\001\260\000\003\001", 0x1ee9}, -#line 633 "./uninorm/composition-table.gperf" - {"\000\001\260\000\003\000", 0x1eeb}, -#line 420 "./uninorm/composition-table.gperf" - {"\000\000d\000\003'", 0x1e11}, -#line 914 "./uninorm/composition-table.gperf" - {"\0000f\0000\231", 0x3067}, -#line 178 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\013", 0x0171}, -#line 827 "./uninorm/composition-table.gperf" - {"\000\003\271\000\003\004", 0x1fd1}, -#line 257 "./uninorm/composition-table.gperf" - {"\000\000R\000\003\021", 0x0212}, -#line 616 "./uninorm/composition-table.gperf" - {"\000\001\240\000\003\001", 0x1eda}, -#line 618 "./uninorm/composition-table.gperf" - {"\000\001\240\000\003\000", 0x1edc}, -#line 581 "./uninorm/composition-table.gperf" - {"\000\036\241\000\003\006", 0x1eb7}, -#line 309 "./uninorm/composition-table.gperf" - {"\000\004\006\000\003\010", 0x0407}, -#line 879 "./uninorm/composition-table.gperf" - {"\000\"r\000\0038", 0x2274}, -#line 720 "./uninorm/composition-table.gperf" - {"\000\003\305\000\003\023", 0x1f50}, -#line 837 "./uninorm/composition-table.gperf" - {"\000\003\305\000\003\006", 0x1fe0}, -#line 630 "./uninorm/composition-table.gperf" - {"\000\001\257\000\003\001", 0x1ee8}, -#line 632 "./uninorm/composition-table.gperf" - {"\000\001\257\000\003\000", 0x1eea}, - {""}, -#line 621 "./uninorm/composition-table.gperf" - {"\000\001\241\000\003\011", 0x1edf}, -#line 457 "./uninorm/composition-table.gperf" - {"\000\000L\000\003#", 0x1e36}, -#line 508 "./uninorm/composition-table.gperf" - {"\000\036c\000\003\007", 0x1e69}, -#line 677 "./uninorm/composition-table.gperf" - {"\000\003\267\000\003\024", 0x1f21}, -#line 443 "./uninorm/composition-table.gperf" - {"\000\000H\000\003'", 0x1e28}, -#line 945 "./uninorm/composition-table.gperf" - {"\0000\322\0000\231", 0x30d3}, -#line 513 "./uninorm/composition-table.gperf" - {"\000\000T\000\0031", 0x1e6e}, -#line 700 "./uninorm/composition-table.gperf" - {"\000\003\231\000\003\023", 0x1f38}, -#line 831 "./uninorm/composition-table.gperf" - {"\000\003\231\000\003\006", 0x1fd8}, -#line 847 "./uninorm/composition-table.gperf" - {"\000\003\241\000\003\024", 0x1fec}, -#line 357 "./uninorm/composition-table.gperf" - {"\000\004K\000\003\010", 0x04f9}, -#line 865 "./uninorm/composition-table.gperf" - {"\000\"\013\000\0038", 0x220c}, -#line 226 "./uninorm/composition-table.gperf" - {"\000\001\267\000\003\014", 0x01ee}, -#line 877 "./uninorm/composition-table.gperf" - {"\000\"d\000\0038", 0x2270}, - {""}, -#line 902 "./uninorm/composition-table.gperf" - {"\0000M\0000\231", 0x304e}, -#line 406 "./uninorm/composition-table.gperf" - {"\000\000b\000\003\007", 0x1e03}, -#line 776 "./uninorm/composition-table.gperf" - {"\000\037%\000\003E", 0x1f95}, - {""}, -#line 946 "./uninorm/composition-table.gperf" - {"\0000\322\0000\232", 0x30d4}, -#line 385 "./uninorm/composition-table.gperf" - {"\000\015G\000\015>", 0x0d4b}, -#line 649 "./uninorm/composition-table.gperf" - {"\000\003\261\000\003\024", 0x1f01}, -#line 469 "./uninorm/composition-table.gperf" - {"\000\000M\000\003#", 0x1e42}, -#line 295 "./uninorm/composition-table.gperf" - {"\000\003\265\000\003\001", 0x03ad}, -#line 749 "./uninorm/composition-table.gperf" - {"\000\003\265\000\003\000", 0x1f72}, -#line 657 "./uninorm/composition-table.gperf" - {"\000\003\221\000\003\024", 0x1f09}, -#line 511 "./uninorm/composition-table.gperf" - {"\000\000T\000\003#", 0x1e6c}, -#line 966 "./uninorm/composition-table.gperf" - {"\001\024\271\001\024\272", 0x114bb}, -#line 477 "./uninorm/composition-table.gperf" - {"\000\000N\000\003-", 0x1e4a}, -#line 804 "./uninorm/composition-table.gperf" - {"\000\003\261\000\003\004", 0x1fb1}, -#line 789 "./uninorm/composition-table.gperf" - {"\000\037b\000\003E", 0x1fa2}, -#line 774 "./uninorm/composition-table.gperf" - {"\000\037#\000\003E", 0x1f93}, -#line 871 "./uninorm/composition-table.gperf" - {"\000\"H\000\0038", 0x2249}, -#line 811 "./uninorm/composition-table.gperf" - {"\000\003\221\000\003\004", 0x1fb9}, -#line 149 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\013", 0x0150}, -#line 452 "./uninorm/composition-table.gperf" - {"\000\000k\000\003\001", 0x1e31}, -#line 786 "./uninorm/composition-table.gperf" - {"\000\037/\000\003E", 0x1f9f}, -#line 237 "./uninorm/composition-table.gperf" - {"\000\000\330\000\003\001", 0x01fe}, -#line 444 "./uninorm/composition-table.gperf" - {"\000\000h\000\003'", 0x1e29}, -#line 938 "./uninorm/composition-table.gperf" - {"\0000\277\0000\231", 0x30c0}, -#line 570 "./uninorm/composition-table.gperf" - {"\000\036\240\000\003\002", 0x1eac}, -#line 637 "./uninorm/composition-table.gperf" - {"\000\001\260\000\003\003", 0x1eef}, -#line 291 "./uninorm/composition-table.gperf" - {"\000\003\312\000\003\001", 0x0390}, -#line 828 "./uninorm/composition-table.gperf" - {"\000\003\312\000\003\000", 0x1fd2}, -#line 830 "./uninorm/composition-table.gperf" - {"\000\003\312\000\003B", 0x1fd7}, -#line 935 "./uninorm/composition-table.gperf" - {"\0000\271\0000\231", 0x30ba}, -#line 588 "./uninorm/composition-table.gperf" - {"\000\000\312\000\003\001", 0x1ebe}, -#line 590 "./uninorm/composition-table.gperf" - {"\000\000\312\000\003\000", 0x1ec0}, -#line 622 "./uninorm/composition-table.gperf" - {"\000\001\240\000\003\003", 0x1ee0}, -#line 840 "./uninorm/composition-table.gperf" - {"\000\003\301\000\003\023", 0x1fe4}, -#line 399 "./uninorm/composition-table.gperf" - {"\000\033<\000\0335", 0x1b3d}, -#line 164 "./uninorm/composition-table.gperf" - {"\000\000s\000\003\014", 0x0161}, -#line 555 "./uninorm/composition-table.gperf" - {"\000\000w\000\003\012", 0x1e98}, -#line 798 "./uninorm/composition-table.gperf" - {"\000\037k\000\003E", 0x1fab}, -#line 898 "./uninorm/composition-table.gperf" - {"\000\"\263\000\0038", 0x22eb}, -#line 636 "./uninorm/composition-table.gperf" - {"\000\001\257\000\003\003", 0x1eee}, -#line 177 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\013", 0x0170}, -#line 507 "./uninorm/composition-table.gperf" - {"\000\036b\000\003\007", 0x1e68}, -#line 721 "./uninorm/composition-table.gperf" - {"\000\003\305\000\003\024", 0x1f51}, -#line 290 "./uninorm/composition-table.gperf" - {"\000\003\251\000\003\001", 0x038f}, -#line 855 "./uninorm/composition-table.gperf" - {"\000\003\251\000\003\000", 0x1ffa}, -#line 220 "./uninorm/composition-table.gperf" - {"\000\000K\000\003\014", 0x01e8}, -#line 526 "./uninorm/composition-table.gperf" - {"\000\001k\000\003\010", 0x1e7b}, -#line 216 "./uninorm/composition-table.gperf" - {"\000\000\306\000\003\004", 0x01e2}, -#line 463 "./uninorm/composition-table.gperf" - {"\000\000L\000\003-", 0x1e3c}, -#line 398 "./uninorm/composition-table.gperf" - {"\000\033:\000\0335", 0x1b3b}, -#line 838 "./uninorm/composition-table.gperf" - {"\000\003\305\000\003\004", 0x1fe1}, -#line 394 "./uninorm/composition-table.gperf" - {"\000\033\011\000\0335", 0x1b0a}, -#line 934 "./uninorm/composition-table.gperf" - {"\0000\267\0000\231", 0x30b8}, - {""}, -#line 701 "./uninorm/composition-table.gperf" - {"\000\003\231\000\003\024", 0x1f39}, -#line 856 "./uninorm/composition-table.gperf" - {"\000\003\251\000\003E", 0x1ffc}, -#line 138 "./uninorm/composition-table.gperf" - {"\000\000l\000\003\014", 0x013e}, -#line 542 "./uninorm/composition-table.gperf" - {"\000\000x\000\003\007", 0x1e8b}, -#line 163 "./uninorm/composition-table.gperf" - {"\000\000S\000\003\014", 0x0160}, -#line 625 "./uninorm/composition-table.gperf" - {"\000\001\241\000\003#", 0x1ee3}, -#line 892 "./uninorm/composition-table.gperf" - {"\000\"\253\000\0038", 0x22af}, -#line 153 "./uninorm/composition-table.gperf" - {"\000\000R\000\003'", 0x0156}, -#line 832 "./uninorm/composition-table.gperf" - {"\000\003\231\000\003\004", 0x1fd9}, -#line 704 "./uninorm/composition-table.gperf" - {"\000\0378\000\003\001", 0x1f3c}, -#line 702 "./uninorm/composition-table.gperf" - {"\000\0378\000\003\000", 0x1f3a}, -#line 706 "./uninorm/composition-table.gperf" - {"\000\0378\000\003B", 0x1f3e}, -#line 289 "./uninorm/composition-table.gperf" - {"\000\003\245\000\003\001", 0x038e}, -#line 846 "./uninorm/composition-table.gperf" - {"\000\003\245\000\003\000", 0x1fea}, -#line 664 "./uninorm/composition-table.gperf" - {"\000\003\265\000\003\023", 0x1f10}, -#line 190 "./uninorm/composition-table.gperf" - {"\000\000Z\000\003\014", 0x017d}, -#line 931 "./uninorm/composition-table.gperf" - {"\0000\261\0000\231", 0x30b2}, -#line 674 "./uninorm/composition-table.gperf" - {"\000\037\030\000\003\001", 0x1f1c}, -#line 672 "./uninorm/composition-table.gperf" - {"\000\037\030\000\003\000", 0x1f1a}, -#line 515 "./uninorm/composition-table.gperf" - {"\000\000T\000\003-", 0x1e70}, -#line 116 "./uninorm/composition-table.gperf" - {"\000\000G\000\003'", 0x0122}, -#line 504 "./uninorm/composition-table.gperf" - {"\000\001[\000\003\007", 0x1e65}, -#line 97 "./uninorm/composition-table.gperf" - {"\000\000c\000\003\014", 0x010d}, -#line 303 "./uninorm/composition-table.gperf" - {"\000\003\311\000\003\001", 0x03ce}, -#line 754 "./uninorm/composition-table.gperf" - {"\000\003\311\000\003\000", 0x1f7c}, -#line 852 "./uninorm/composition-table.gperf" - {"\000\003\311\000\003B", 0x1ff6}, -#line 393 "./uninorm/composition-table.gperf" - {"\000\033\007\000\0335", 0x1b08}, -#line 350 "./uninorm/composition-table.gperf" - {"\000\004#\000\003\010", 0x04f0}, -#line 455 "./uninorm/composition-table.gperf" - {"\000\000K\000\0031", 0x1e34}, -#line 580 "./uninorm/composition-table.gperf" - {"\000\036\240\000\003\006", 0x1eb6}, -#line 635 "./uninorm/composition-table.gperf" - {"\000\001\260\000\003\011", 0x1eed}, -#line 98 "./uninorm/composition-table.gperf" - {"\000\000D\000\003\014", 0x010e}, -#line 544 "./uninorm/composition-table.gperf" - {"\000\000x\000\003\010", 0x1e8d}, -#line 191 "./uninorm/composition-table.gperf" - {"\000\000z\000\003\014", 0x017e}, -#line 594 "./uninorm/composition-table.gperf" - {"\000\000\312\000\003\003", 0x1ec4}, -#line 850 "./uninorm/composition-table.gperf" - {"\000\003\311\000\003E", 0x1ff3}, -#line 449 "./uninorm/composition-table.gperf" - {"\000\000\317\000\003\001", 0x1e2e}, -#line 620 "./uninorm/composition-table.gperf" - {"\000\001\240\000\003\011", 0x1ede}, -#line 502 "./uninorm/composition-table.gperf" - {"\000\000s\000\003#", 0x1e63}, -#line 462 "./uninorm/composition-table.gperf" - {"\000\000l\000\0031", 0x1e3b}, -#line 141 "./uninorm/composition-table.gperf" - {"\000\000N\000\003'", 0x0145}, -#line 901 "./uninorm/composition-table.gperf" - {"\0000K\0000\231", 0x304c}, -#line 841 "./uninorm/composition-table.gperf" - {"\000\003\301\000\003\024", 0x1fe5}, -#line 527 "./uninorm/composition-table.gperf" - {"\000\000V\000\003\003", 0x1e7c}, -#line 634 "./uninorm/composition-table.gperf" - {"\000\001\257\000\003\011", 0x1eec}, -#line 293 "./uninorm/composition-table.gperf" - {"\000\003\245\000\003\010", 0x03ab}, -#line 941 "./uninorm/composition-table.gperf" - {"\0000\306\0000\231", 0x30c7}, -#line 359 "./uninorm/composition-table.gperf" - {"\000\006'\000\006T", 0x0623}, -#line 453 "./uninorm/composition-table.gperf" - {"\000\000K\000\003#", 0x1e32}, - {""}, -#line 740 "./uninorm/composition-table.gperf" - {"\000\003\251\000\003\023", 0x1f68}, -#line 332 "./uninorm/composition-table.gperf" - {"\000\004\330\000\003\010", 0x04da}, -#line 551 "./uninorm/composition-table.gperf" - {"\000\000Z\000\0031", 0x1e94}, -#line 495 "./uninorm/composition-table.gperf" - {"\000\036Z\000\003\004", 0x1e5c}, -#line 905 "./uninorm/composition-table.gperf" - {"\0000S\0000\231", 0x3054}, -#line 320 "./uninorm/composition-table.gperf" - {"\000\0048\000\003\000", 0x045d}, -#line 312 "./uninorm/composition-table.gperf" - {"\000\004#\000\003\006", 0x040e}, -#line 606 "./uninorm/composition-table.gperf" - {"\000\000\324\000\003\001", 0x1ed0}, -#line 608 "./uninorm/composition-table.gperf" - {"\000\000\324\000\003\000", 0x1ed2}, -#line 458 "./uninorm/composition-table.gperf" - {"\000\000l\000\003#", 0x1e37}, -#line 117 "./uninorm/composition-table.gperf" - {"\000\000g\000\003'", 0x0123}, -#line 501 "./uninorm/composition-table.gperf" - {"\000\000S\000\003#", 0x1e62}, -#line 518 "./uninorm/composition-table.gperf" - {"\000\000u\000\003$", 0x1e73}, -#line 311 "./uninorm/composition-table.gperf" - {"\000\004\030\000\003\000", 0x040d}, - {""}, -#line 589 "./uninorm/composition-table.gperf" - {"\000\000\352\000\003\001", 0x1ebf}, -#line 591 "./uninorm/composition-table.gperf" - {"\000\000\352\000\003\000", 0x1ec1}, - {""}, -#line 417 "./uninorm/composition-table.gperf" - {"\000\000D\000\0031", 0x1e0e}, -#line 318 "./uninorm/composition-table.gperf" - {"\000\004V\000\003\010", 0x0457}, -#line 552 "./uninorm/composition-table.gperf" - {"\000\000z\000\0031", 0x1e95}, -#line 369 "./uninorm/composition-table.gperf" - {"\000\011\307\000\011\276", 0x09cb}, -#line 549 "./uninorm/composition-table.gperf" - {"\000\000Z\000\003#", 0x1e92}, -#line 280 "./uninorm/composition-table.gperf" - {"\000\002/\000\003\004", 0x0231}, -#line 844 "./uninorm/composition-table.gperf" - {"\000\003\245\000\003\006", 0x1fe8}, -#line 963 "./uninorm/composition-table.gperf" - {"\001\0212\001\021'", 0x1112f}, -#line 135 "./uninorm/composition-table.gperf" - {"\000\000L\000\003'", 0x013b}, -#line 665 "./uninorm/composition-table.gperf" - {"\000\003\265\000\003\024", 0x1f11}, -#line 362 "./uninorm/composition-table.gperf" - {"\000\006J\000\006T", 0x0626}, -#line 882 "./uninorm/composition-table.gperf" - {"\000\"w\000\0038", 0x2279}, -#line 681 "./uninorm/composition-table.gperf" - {"\000\037!\000\003\001", 0x1f25}, -#line 679 "./uninorm/composition-table.gperf" - {"\000\037!\000\003\000", 0x1f23}, -#line 683 "./uninorm/composition-table.gperf" - {"\000\037!\000\003B", 0x1f27}, -#line 372 "./uninorm/composition-table.gperf" - {"\000\013G\000\013>", 0x0b4b}, -#line 732 "./uninorm/composition-table.gperf" - {"\000\003\311\000\003\023", 0x1f60}, -#line 286 "./uninorm/composition-table.gperf" - {"\000\003\227\000\003\001", 0x0389}, -#line 821 "./uninorm/composition-table.gperf" - {"\000\003\227\000\003\000", 0x1fca}, -#line 341 "./uninorm/composition-table.gperf" - {"\000\0048\000\003\010", 0x04e5}, -#line 415 "./uninorm/composition-table.gperf" - {"\000\000D\000\003#", 0x1e0c}, -#line 959 "./uninorm/composition-table.gperf" - {"\001\020\231\001\020\272", 0x1109a}, -#line 550 "./uninorm/composition-table.gperf" - {"\000\000z\000\003#", 0x1e93}, - {""}, -#line 772 "./uninorm/composition-table.gperf" - {"\000\037!\000\003E", 0x1f91}, -#line 592 "./uninorm/composition-table.gperf" - {"\000\000\312\000\003\011", 0x1ec2}, - {""}, -#line 340 "./uninorm/composition-table.gperf" - {"\000\004\030\000\003\010", 0x04e4}, -#line 392 "./uninorm/composition-table.gperf" - {"\000\033\005\000\0335", 0x1b06}, -#line 822 "./uninorm/composition-table.gperf" - {"\000\003\227\000\003E", 0x1fcc}, -#line 969 "./uninorm/composition-table.gperf" - {"\001\025\270\001\025\257", 0x115ba}, -#line 396 "./uninorm/composition-table.gperf" - {"\000\033\015\000\0335", 0x1b0e}, -#line 221 "./uninorm/composition-table.gperf" - {"\000\000k\000\003\014", 0x01e9}, -#line 165 "./uninorm/composition-table.gperf" - {"\000\000T\000\003'", 0x0162}, -#line 487 "./uninorm/composition-table.gperf" - {"\000\000P\000\003\001", 0x1e54}, -#line 401 "./uninorm/composition-table.gperf" - {"\000\033?\000\0335", 0x1b41}, - {""}, -#line 639 "./uninorm/composition-table.gperf" - {"\000\001\260\000\003#", 0x1ef1}, -#line 489 "./uninorm/composition-table.gperf" - {"\000\000P\000\003\007", 0x1e56}, -#line 939 "./uninorm/composition-table.gperf" - {"\0000\301\0000\231", 0x30c2}, -#line 724 "./uninorm/composition-table.gperf" - {"\000\037P\000\003\001", 0x1f54}, -#line 722 "./uninorm/composition-table.gperf" - {"\000\037P\000\003\000", 0x1f52}, -#line 726 "./uninorm/composition-table.gperf" - {"\000\037P\000\003B", 0x1f56}, - {""}, -#line 624 "./uninorm/composition-table.gperf" - {"\000\001\240\000\003#", 0x1ee2}, -#line 741 "./uninorm/composition-table.gperf" - {"\000\003\251\000\003\024", 0x1f69}, -#line 410 "./uninorm/composition-table.gperf" - {"\000\000b\000\0031", 0x1e07}, -#line 612 "./uninorm/composition-table.gperf" - {"\000\000\324\000\003\003", 0x1ed6}, -#line 314 "./uninorm/composition-table.gperf" - {"\000\0048\000\003\006", 0x0439}, -#line 859 "./uninorm/composition-table.gperf" - {"\000!\224\000\0038", 0x21ae}, -#line 930 "./uninorm/composition-table.gperf" - {"\0000\257\0000\231", 0x30b0}, -#line 638 "./uninorm/composition-table.gperf" - {"\000\001\257\000\003#", 0x1ef0}, -#line 505 "./uninorm/composition-table.gperf" - {"\000\001`\000\003\007", 0x1e66}, -#line 857 "./uninorm/composition-table.gperf" - {"\000!\220\000\0038", 0x219a}, -#line 464 "./uninorm/composition-table.gperf" - {"\000\000l\000\003-", 0x1e3d}, -#line 595 "./uninorm/composition-table.gperf" - {"\000\000\352\000\003\003", 0x1ec5}, -#line 313 "./uninorm/composition-table.gperf" - {"\000\004\030\000\003\006", 0x0419}, -#line 874 "./uninorm/composition-table.gperf" - {"\000\"M\000\0038", 0x226d}, -#line 348 "./uninorm/composition-table.gperf" - {"\000\004#\000\003\004", 0x04ee}, - {""}, -#line 736 "./uninorm/composition-table.gperf" - {"\000\037`\000\003\001", 0x1f64}, -#line 734 "./uninorm/composition-table.gperf" - {"\000\037`\000\003\000", 0x1f62}, -#line 738 "./uninorm/composition-table.gperf" - {"\000\037`\000\003B", 0x1f66}, -#line 517 "./uninorm/composition-table.gperf" - {"\000\000U\000\003$", 0x1e72}, -#line 607 "./uninorm/composition-table.gperf" - {"\000\000\364\000\003\001", 0x1ed1}, -#line 609 "./uninorm/composition-table.gperf" - {"\000\000\364\000\003\000", 0x1ed3}, -#line 408 "./uninorm/composition-table.gperf" - {"\000\000b\000\003#", 0x1e05}, -#line 858 "./uninorm/composition-table.gperf" - {"\000!\222\000\0038", 0x219b}, -#line 728 "./uninorm/composition-table.gperf" - {"\000\003\245\000\003\024", 0x1f59}, -#line 456 "./uninorm/composition-table.gperf" - {"\000\000k\000\0031", 0x1e35}, - {""}, -#line 373 "./uninorm/composition-table.gperf" - {"\000\013G\000\013W", 0x0b4c}, -#line 787 "./uninorm/composition-table.gperf" - {"\000\037`\000\003E", 0x1fa0}, - {""}, -#line 933 "./uninorm/composition-table.gperf" - {"\0000\265\0000\231", 0x30b6}, - {""}, -#line 845 "./uninorm/composition-table.gperf" - {"\000\003\245\000\003\004", 0x1fe9}, - {""}, -#line 684 "./uninorm/composition-table.gperf" - {"\000\003\227\000\003\023", 0x1f28}, -#line 733 "./uninorm/composition-table.gperf" - {"\000\003\311\000\003\024", 0x1f61}, -#line 860 "./uninorm/composition-table.gperf" - {"\000!\320\000\0038", 0x21cd}, -#line 378 "./uninorm/composition-table.gperf" - {"\000\014F\000\014V", 0x0c48}, - {""}, -#line 421 "./uninorm/composition-table.gperf" - {"\000\000D\000\003-", 0x1e12}, -#line 949 "./uninorm/composition-table.gperf" - {"\0000\330\0000\231", 0x30d9}, -#line 285 "./uninorm/composition-table.gperf" - {"\000\003\225\000\003\001", 0x0388}, -#line 820 "./uninorm/composition-table.gperf" - {"\000\003\225\000\003\000", 0x1fc8}, -#line 563 "./uninorm/composition-table.gperf" - {"\000\000\342\000\003\001", 0x1ea5}, -#line 565 "./uninorm/composition-table.gperf" - {"\000\000\342\000\003\000", 0x1ea7}, -#line 454 "./uninorm/composition-table.gperf" - {"\000\000k\000\003#", 0x1e33}, -#line 298 "./uninorm/composition-table.gperf" - {"\000\003\313\000\003\001", 0x03b0}, -#line 839 "./uninorm/composition-table.gperf" - {"\000\003\313\000\003\000", 0x1fe2}, -#line 843 "./uninorm/composition-table.gperf" - {"\000\003\313\000\003B", 0x1fe7}, -#line 562 "./uninorm/composition-table.gperf" - {"\000\000\302\000\003\001", 0x1ea4}, -#line 564 "./uninorm/composition-table.gperf" - {"\000\000\302\000\003\000", 0x1ea6}, -#line 283 "./uninorm/composition-table.gperf" - {"\000\000\250\000\003\001", 0x0385}, -#line 848 "./uninorm/composition-table.gperf" - {"\000\000\250\000\003\000", 0x1fed}, -#line 814 "./uninorm/composition-table.gperf" - {"\000\000\250\000\003B", 0x1fc1}, -#line 950 "./uninorm/composition-table.gperf" - {"\0000\330\0000\232", 0x30da}, -#line 725 "./uninorm/composition-table.gperf" - {"\000\037Q\000\003\001", 0x1f55}, -#line 723 "./uninorm/composition-table.gperf" - {"\000\037Q\000\003\000", 0x1f53}, -#line 727 "./uninorm/composition-table.gperf" - {"\000\037Q\000\003B", 0x1f57}, -#line 193 "./uninorm/composition-table.gperf" - {"\000\000o\000\003\033", 0x01a1}, -#line 488 "./uninorm/composition-table.gperf" - {"\000\000p\000\003\001", 0x1e55}, -#line 777 "./uninorm/composition-table.gperf" - {"\000\037&\000\003E", 0x1f96}, -#line 130 "./uninorm/composition-table.gperf" - {"\000\000j\000\003\002", 0x0135}, -#line 610 "./uninorm/composition-table.gperf" - {"\000\000\324\000\003\011", 0x1ed4}, -#line 490 "./uninorm/composition-table.gperf" - {"\000\000p\000\003\007", 0x1e57}, - {""}, -#line 529 "./uninorm/composition-table.gperf" - {"\000\000V\000\003#", 0x1e7e}, -#line 315 "./uninorm/composition-table.gperf" - {"\000\0045\000\003\000", 0x0450}, -#line 195 "./uninorm/composition-table.gperf" - {"\000\000u\000\003\033", 0x01b0}, -#line 404 "./uninorm/composition-table.gperf" - {"\000\000a\000\003%", 0x1e01}, - {""}, -#line 593 "./uninorm/composition-table.gperf" - {"\000\000\352\000\003\011", 0x1ec3}, -#line 162 "./uninorm/composition-table.gperf" - {"\000\000s\000\003'", 0x015f}, -#line 922 "./uninorm/composition-table.gperf" - {"\0000x\0000\231", 0x3079}, - {""}, -#line 339 "./uninorm/composition-table.gperf" - {"\000\0048\000\003\004", 0x04e3}, - {""}, -#line 797 "./uninorm/composition-table.gperf" - {"\000\037j\000\003E", 0x1faa}, -#line 805 "./uninorm/composition-table.gperf" - {"\000\037p\000\003E", 0x1fb2}, -#line 613 "./uninorm/composition-table.gperf" - {"\000\000\364\000\003\003", 0x1ed7}, -#line 224 "./uninorm/composition-table.gperf" - {"\000\001\352\000\003\004", 0x01ec}, - {""}, -#line 131 "./uninorm/composition-table.gperf" - {"\000\000K\000\003'", 0x0136}, -#line 338 "./uninorm/composition-table.gperf" - {"\000\004\030\000\003\004", 0x04e2}, - {""}, -#line 496 "./uninorm/composition-table.gperf" - {"\000\036[\000\003\004", 0x1e5d}, -#line 525 "./uninorm/composition-table.gperf" - {"\000\001j\000\003\010", 0x1e7a}, -#line 923 "./uninorm/composition-table.gperf" - {"\0000x\0000\232", 0x307a}, - {""}, -#line 895 "./uninorm/composition-table.gperf" - {"\000\"\221\000\0038", 0x22e2}, - {""}, {""}, {""}, -#line 136 "./uninorm/composition-table.gperf" - {"\000\000l\000\003'", 0x013c}, - {""}, -#line 161 "./uninorm/composition-table.gperf" - {"\000\000S\000\003'", 0x015e}, - {""}, -#line 909 "./uninorm/composition-table.gperf" - {"\0000[\0000\231", 0x305c}, -#line 685 "./uninorm/composition-table.gperf" - {"\000\003\227\000\003\024", 0x1f29}, -#line 316 "./uninorm/composition-table.gperf" - {"\000\0045\000\003\010", 0x0451}, -#line 880 "./uninorm/composition-table.gperf" - {"\000\"s\000\0038", 0x2275}, - {""}, -#line 569 "./uninorm/composition-table.gperf" - {"\000\000\342\000\003\003", 0x1eab}, -#line 670 "./uninorm/composition-table.gperf" - {"\000\003\225\000\003\023", 0x1f18}, -#line 680 "./uninorm/composition-table.gperf" - {"\000\037 \000\003\001", 0x1f24}, -#line 678 "./uninorm/composition-table.gperf" - {"\000\037 \000\003\000", 0x1f22}, -#line 682 "./uninorm/composition-table.gperf" - {"\000\037 \000\003B", 0x1f26}, - {""}, -#line 568 "./uninorm/composition-table.gperf" - {"\000\000\302\000\003\003", 0x1eaa}, - {""}, -#line 943 "./uninorm/composition-table.gperf" - {"\0000\317\0000\231", 0x30d0}, - {""}, {""}, -#line 63 "./uninorm/composition-table.gperf" - {"\000\000c\000\003'", 0x00e7}, -#line 961 "./uninorm/composition-table.gperf" - {"\001\020\245\001\020\272", 0x110ab}, -#line 192 "./uninorm/composition-table.gperf" - {"\000\000O\000\003\033", 0x01a0}, -#line 771 "./uninorm/composition-table.gperf" - {"\000\037 \000\003E", 0x1f90}, - {""}, -#line 397 "./uninorm/composition-table.gperf" - {"\000\033\021\000\0335", 0x1b12}, - {""}, {""}, -#line 395 "./uninorm/composition-table.gperf" - {"\000\033\013\000\0335", 0x1b0c}, -#line 419 "./uninorm/composition-table.gperf" - {"\000\000D\000\003'", 0x1e10}, - {""}, -#line 944 "./uninorm/composition-table.gperf" - {"\0000\317\0000\232", 0x30d1}, -#line 402 "./uninorm/composition-table.gperf" - {"\000\033B\000\0335", 0x1b43}, -#line 445 "./uninorm/composition-table.gperf" - {"\000\000H\000\003.", 0x1e2a}, - {""}, -#line 331 "./uninorm/composition-table.gperf" - {"\000\0045\000\003\006", 0x04d7}, - {""}, {""}, {""}, -#line 403 "./uninorm/composition-table.gperf" - {"\000\000A\000\003%", 0x1e00}, - {""}, -#line 962 "./uninorm/composition-table.gperf" - {"\001\0211\001\021'", 0x1112e}, -#line 374 "./uninorm/composition-table.gperf" - {"\000\013\222\000\013\327", 0x0b94}, - {""}, -#line 194 "./uninorm/composition-table.gperf" - {"\000\000U\000\003\033", 0x01af}, -#line 611 "./uninorm/composition-table.gperf" - {"\000\000\364\000\003\011", 0x1ed5}, - {""}, {""}, {""}, {""}, -#line 370 "./uninorm/composition-table.gperf" - {"\000\011\307\000\011\327", 0x09cc}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 883 "./uninorm/composition-table.gperf" - {"\000\"z\000\0038", 0x2280}, - {""}, -#line 379 "./uninorm/composition-table.gperf" - {"\000\014\277\000\014\325", 0x0cc0}, - {""}, {""}, {""}, {""}, {""}, -#line 446 "./uninorm/composition-table.gperf" - {"\000\000h\000\003.", 0x1e2b}, -#line 567 "./uninorm/composition-table.gperf" - {"\000\000\342\000\003\011", 0x1ea9}, - {""}, {""}, {""}, {""}, -#line 671 "./uninorm/composition-table.gperf" - {"\000\003\225\000\003\024", 0x1f19}, -#line 566 "./uninorm/composition-table.gperf" - {"\000\000\302\000\003\011", 0x1ea8}, -#line 214 "./uninorm/composition-table.gperf" - {"\000\002&\000\003\004", 0x01e0}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, -#line 387 "./uninorm/composition-table.gperf" - {"\000\015\331\000\015\312", 0x0dda}, -#line 867 "./uninorm/composition-table.gperf" - {"\000\"%\000\0038", 0x2226}, - {""}, {""}, {""}, {""}, {""}, {""}, -#line 358 "./uninorm/composition-table.gperf" - {"\000\006'\000\006S", 0x0622}, -#line 132 "./uninorm/composition-table.gperf" - {"\000\000k\000\003'", 0x0137}, - {""}, -#line 371 "./uninorm/composition-table.gperf" - {"\000\013G\000\013V", 0x0b48}, -#line 228 "./uninorm/composition-table.gperf" - {"\000\000j\000\003\014", 0x01f0}, -#line 376 "./uninorm/composition-table.gperf" - {"\000\013\307\000\013\276", 0x0bcb}, - {""}, -#line 866 "./uninorm/composition-table.gperf" - {"\000\"#\000\0038", 0x2224}, - {""}, -#line 964 "./uninorm/composition-table.gperf" - {"\001\023G\001\023>", 0x1134b}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, -#line 900 "./uninorm/composition-table.gperf" - {"\000\"\265\000\0038", 0x22ed}, -#line 360 "./uninorm/composition-table.gperf" - {"\000\006H\000\006T", 0x0624}, - {""}, {""}, {""}, -#line 389 "./uninorm/composition-table.gperf" - {"\000\015\334\000\015\312", 0x0ddd}, - {""}, {""}, -#line 381 "./uninorm/composition-table.gperf" - {"\000\014\306\000\014\326", 0x0cc8}, -#line 382 "./uninorm/composition-table.gperf" - {"\000\014\306\000\014\302", 0x0cca}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, -#line 380 "./uninorm/composition-table.gperf" - {"\000\014\306\000\014\325", 0x0cc7}, - {""}, {""}, {""}, -#line 904 "./uninorm/composition-table.gperf" - {"\0000Q\0000\231", 0x3052}, -#line 363 "./uninorm/composition-table.gperf" - {"\000\006\325\000\006T", 0x06c0}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, -#line 891 "./uninorm/composition-table.gperf" - {"\000\"\251\000\0038", 0x22ae}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 965 "./uninorm/composition-table.gperf" - {"\001\023G\001\023W", 0x1134c}, -#line 967 "./uninorm/composition-table.gperf" - {"\001\024\271\001\024\260", 0x114bc}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 400 "./uninorm/composition-table.gperf" - {"\000\033>\000\0335", 0x1b40}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 383 "./uninorm/composition-table.gperf" - {"\000\014\312\000\014\325", 0x0ccb}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, -#line 352 "./uninorm/composition-table.gperf" - {"\000\004#\000\003\013", 0x04f2}, - {""}, {""}, {""}, {""}, {""}, -#line 365 "./uninorm/composition-table.gperf" - {"\000\006\322\000\006T", 0x06d3}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, -#line 970 "./uninorm/composition-table.gperf" - {"\001\025\271\001\025\257", 0x115bb}, - {""}, {""}, {""}, -#line 361 "./uninorm/composition-table.gperf" - {"\000\006'\000\006U", 0x0625}, - {""}, {""}, {""}, {""}, {""}, -#line 890 "./uninorm/composition-table.gperf" - {"\000\"\250\000\0038", 0x22ad}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, -#line 862 "./uninorm/composition-table.gperf" - {"\000!\322\000\0038", 0x21cf}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, -#line 375 "./uninorm/composition-table.gperf" - {"\000\013\306\000\013\276", 0x0bca}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, -#line 364 "./uninorm/composition-table.gperf" - {"\000\006\301\000\006T", 0x06c2}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 391 "./uninorm/composition-table.gperf" - {"\000\020%\000\020.", 0x1026}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, -#line 377 "./uninorm/composition-table.gperf" - {"\000\013\306\000\013\327", 0x0bcc}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, -#line 861 "./uninorm/composition-table.gperf" - {"\000!\324\000\0038", 0x21ce} - }; - - if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) - { - register int key = gl_uninorm_compose_hash (str, len); - - if (key <= MAX_HASH_VALUE && key >= 0) - if (len == lengthtable[key]) - { - register const char *s = wordlist[key].codes; - - if (*str == *s && !memcmp (str + 1, s + 1, len - 1)) - return &wordlist[key]; - } - } - return 0; -} diff --git a/lib/unistring/uninorm/composition.c b/lib/unistring/uninorm/composition.c deleted file mode 100644 index 326d11b28c..0000000000 --- a/lib/unistring/uninorm/composition.c +++ /dev/null @@ -1,97 +0,0 @@ -/* Canonical composition of Unicode characters. - Copyright (C) 2002, 2006, 2009, 2011-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "uninorm.h" - -#include - -struct composition_rule { char codes[6]; unsigned int combined; }; - -#include "composition-table.h" - -ucs4_t -uc_composition (ucs4_t uc1, ucs4_t uc2) -{ - if (uc1 < 0x12000 && uc2 < 0x12000) - { - if (uc2 >= 0x1161 && uc2 < 0x1161 + 21 - && uc1 >= 0x1100 && uc1 < 0x1100 + 19) - { - /* Hangul: Combine single letter L and single letter V to form - two-letter syllable LV. */ - return 0xAC00 + ((uc1 - 0x1100) * 21 + (uc2 - 0x1161)) * 28; - } - else if (uc2 > 0x11A7 && uc2 < 0x11A7 + 28 - && uc1 >= 0xAC00 && uc1 < 0xD7A4 && ((uc1 - 0xAC00) % 28) == 0) - { - /* Hangul: Combine two-letter syllable LV with single-letter T - to form three-letter syllable LVT. */ - return uc1 + (uc2 - 0x11A7); - } - else - { -#if 0 - unsigned int uc = MUL1 * uc1 * MUL2 * uc2; - unsigned int index1 = uc >> composition_header_0; - if (index1 < composition_header_1) - { - int lookup1 = u_composition.level1[index1]; - if (lookup1 >= 0) - { - unsigned int index2 = (uc >> composition_header_2) & composition_header_3; - int lookup2 = u_composition.level2[lookup1 + index2]; - if (lookup2 >= 0) - { - unsigned int index3 = (uc & composition_header_4); - unsigned int lookup3 = u_composition.level3[lookup2 + index3]; - if ((lookup3 >> 16) == uc2) - return lookup3 & ((1U << 16) - 1); - } - } - } -#else - char codes[6]; - const struct composition_rule *rule; - - codes[0] = (uc1 >> 16) & 0xff; - codes[1] = (uc1 >> 8) & 0xff; - codes[2] = uc1 & 0xff; - codes[3] = (uc2 >> 16) & 0xff; - codes[4] = (uc2 >> 8) & 0xff; - codes[5] = uc2 & 0xff; - - rule = gl_uninorm_compose_lookup (codes, 6); - if (rule != NULL) - return rule->combined; -#endif - } - } - return 0; -} diff --git a/lib/unistring/uninorm/decompose-internal.c b/lib/unistring/uninorm/decompose-internal.c deleted file mode 100644 index 1798474ef4..0000000000 --- a/lib/unistring/uninorm/decompose-internal.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Decomposition of Unicode strings. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "decompose-internal.h" - -#define ELEMENT struct ucs4_with_ccc -#define COMPARE(a,b) ((a)->ccc - (b)->ccc) -#define STATIC -#define merge_sort_fromto gl_uninorm_decompose_merge_sort_fromto -#define merge_sort_inplace gl_uninorm_decompose_merge_sort_inplace -#include "array-mergesort.h" diff --git a/lib/unistring/uninorm/decompose-internal.h b/lib/unistring/uninorm/decompose-internal.h deleted file mode 100644 index 5e5bceb8f0..0000000000 --- a/lib/unistring/uninorm/decompose-internal.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Decomposition of Unicode strings. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#include "unitypes.h" - -/* Variant of uc_decomposition that does not produce the 'tag'. */ -extern int - uc_compat_decomposition (ucs4_t uc, ucs4_t *decomposition); - -/* A Unicode character together with its canonical combining class. */ -struct ucs4_with_ccc -{ - ucs4_t code; - int ccc; /* range 0..255 */ -}; - -/* Stable-sort an array of 'struct ucs4_with_ccc'. */ -extern void - gl_uninorm_decompose_merge_sort_inplace (struct ucs4_with_ccc *src, size_t n, - struct ucs4_with_ccc *tmp); diff --git a/lib/unistring/uninorm/decomposition-table.c b/lib/unistring/uninorm/decomposition-table.c deleted file mode 100644 index b691de70a4..0000000000 --- a/lib/unistring/uninorm/decomposition-table.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Decomposition of Unicode characters. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "uninorm/decomposition-table.h" - -#include "uninorm/decomposition-table2.h" diff --git a/lib/unistring/uninorm/decomposition-table.h b/lib/unistring/uninorm/decomposition-table.h deleted file mode 100644 index 53ef6088d6..0000000000 --- a/lib/unistring/uninorm/decomposition-table.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Decomposition of Unicode characters. - Copyright (C) 2001-2003, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - - -#include "unitypes.h" - -/* The decomposition table is made of two parts: - - A table containing the actual arrays of decomposed equivalents. - (This table is separate because the maximum length of a decomposition - is 18, much larger than than the average length 1.497 of a decomposition). - - A 3-level table of indices into this array. */ - -#include "decomposition-table1.h" - -static inline unsigned short -decomp_index (ucs4_t uc) -{ - unsigned int index1 = uc >> decomp_header_0; - if (index1 < decomp_header_1) - { - int lookup1 = gl_uninorm_decomp_index_table.level1[index1]; - if (lookup1 >= 0) - { - unsigned int index2 = (uc >> decomp_header_2) & decomp_header_3; - int lookup2 = gl_uninorm_decomp_index_table.level2[lookup1 + index2]; - if (lookup2 >= 0) - { - unsigned int index3 = uc & decomp_header_4; - return gl_uninorm_decomp_index_table.level3[lookup2 + index3]; - } - } - } - return (unsigned short)(-1); -} diff --git a/lib/unistring/uninorm/decomposition-table1.h b/lib/unistring/uninorm/decomposition-table1.h deleted file mode 100644 index c3a691afba..0000000000 --- a/lib/unistring/uninorm/decomposition-table1.h +++ /dev/null @@ -1,20 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Decomposition of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ - -extern const unsigned char gl_uninorm_decomp_chars_table[]; - -#define decomp_header_0 10 -#define decomp_header_1 191 -#define decomp_header_2 5 -#define decomp_header_3 31 -#define decomp_header_4 31 - -typedef struct - { - int level1[191]; - int level2[23 << 5]; - unsigned short level3[277 << 5]; - } -decomp_index_table_t; -extern const decomp_index_table_t gl_uninorm_decomp_index_table; diff --git a/lib/unistring/uninorm/decomposition-table2.h b/lib/unistring/uninorm/decomposition-table2.h deleted file mode 100644 index 1be5674ee4..0000000000 --- a/lib/unistring/uninorm/decomposition-table2.h +++ /dev/null @@ -1,3372 +0,0 @@ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ -/* Decomposition of Unicode characters. */ -/* Generated automatically by gen-uni-tables.c for Unicode 8.0.0. */ - -const unsigned char gl_uninorm_decomp_chars_table[] = -{ - 0x08, 0x00, 0x20, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x08, 0x20, 0x00, 0x61, - 0xC0, 0x00, 0x20, 0x00, 0x03, 0x04, 0x20, 0x00, 0x32, 0x20, 0x00, 0x33, - 0xC0, 0x00, 0x20, 0x00, 0x03, 0x01, 0x40, 0x03, 0xBC, 0xC0, 0x00, 0x20, - 0x00, 0x03, 0x27, 0x20, 0x00, 0x31, 0x20, 0x00, 0x6F, 0xBC, 0x00, 0x31, - 0x80, 0x20, 0x44, 0x00, 0x00, 0x34, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, - 0x00, 0x00, 0x32, 0xBC, 0x00, 0x33, 0x80, 0x20, 0x44, 0x00, 0x00, 0x34, - 0x80, 0x00, 0x41, 0x00, 0x03, 0x00, 0x80, 0x00, 0x41, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x41, 0x00, 0x03, 0x02, 0x80, 0x00, 0x41, 0x00, 0x03, 0x03, - 0x80, 0x00, 0x41, 0x00, 0x03, 0x08, 0x80, 0x00, 0x41, 0x00, 0x03, 0x0A, - 0x80, 0x00, 0x43, 0x00, 0x03, 0x27, 0x80, 0x00, 0x45, 0x00, 0x03, 0x00, - 0x80, 0x00, 0x45, 0x00, 0x03, 0x01, 0x80, 0x00, 0x45, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x45, 0x00, 0x03, 0x08, 0x80, 0x00, 0x49, 0x00, 0x03, 0x00, - 0x80, 0x00, 0x49, 0x00, 0x03, 0x01, 0x80, 0x00, 0x49, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x49, 0x00, 0x03, 0x08, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x03, - 0x80, 0x00, 0x4F, 0x00, 0x03, 0x00, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x4F, 0x00, 0x03, 0x02, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x03, - 0x80, 0x00, 0x4F, 0x00, 0x03, 0x08, 0x80, 0x00, 0x55, 0x00, 0x03, 0x00, - 0x80, 0x00, 0x55, 0x00, 0x03, 0x01, 0x80, 0x00, 0x55, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x55, 0x00, 0x03, 0x08, 0x80, 0x00, 0x59, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x61, 0x00, 0x03, 0x00, 0x80, 0x00, 0x61, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x61, 0x00, 0x03, 0x02, 0x80, 0x00, 0x61, 0x00, 0x03, 0x03, - 0x80, 0x00, 0x61, 0x00, 0x03, 0x08, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0A, - 0x80, 0x00, 0x63, 0x00, 0x03, 0x27, 0x80, 0x00, 0x65, 0x00, 0x03, 0x00, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x01, 0x80, 0x00, 0x65, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x08, 0x80, 0x00, 0x69, 0x00, 0x03, 0x00, - 0x80, 0x00, 0x69, 0x00, 0x03, 0x01, 0x80, 0x00, 0x69, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x69, 0x00, 0x03, 0x08, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x03, - 0x80, 0x00, 0x6F, 0x00, 0x03, 0x00, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x6F, 0x00, 0x03, 0x02, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x03, - 0x80, 0x00, 0x6F, 0x00, 0x03, 0x08, 0x80, 0x00, 0x75, 0x00, 0x03, 0x00, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x01, 0x80, 0x00, 0x75, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x08, 0x80, 0x00, 0x79, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x79, 0x00, 0x03, 0x08, 0x80, 0x00, 0x41, 0x00, 0x03, 0x04, - 0x80, 0x00, 0x61, 0x00, 0x03, 0x04, 0x80, 0x00, 0x41, 0x00, 0x03, 0x06, - 0x80, 0x00, 0x61, 0x00, 0x03, 0x06, 0x80, 0x00, 0x41, 0x00, 0x03, 0x28, - 0x80, 0x00, 0x61, 0x00, 0x03, 0x28, 0x80, 0x00, 0x43, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x63, 0x00, 0x03, 0x01, 0x80, 0x00, 0x43, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x63, 0x00, 0x03, 0x02, 0x80, 0x00, 0x43, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x63, 0x00, 0x03, 0x07, 0x80, 0x00, 0x43, 0x00, 0x03, 0x0C, - 0x80, 0x00, 0x63, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x44, 0x00, 0x03, 0x0C, - 0x80, 0x00, 0x64, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x45, 0x00, 0x03, 0x04, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x04, 0x80, 0x00, 0x45, 0x00, 0x03, 0x06, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x06, 0x80, 0x00, 0x45, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x07, 0x80, 0x00, 0x45, 0x00, 0x03, 0x28, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x28, 0x80, 0x00, 0x45, 0x00, 0x03, 0x0C, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x47, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x67, 0x00, 0x03, 0x02, 0x80, 0x00, 0x47, 0x00, 0x03, 0x06, - 0x80, 0x00, 0x67, 0x00, 0x03, 0x06, 0x80, 0x00, 0x47, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x67, 0x00, 0x03, 0x07, 0x80, 0x00, 0x47, 0x00, 0x03, 0x27, - 0x80, 0x00, 0x67, 0x00, 0x03, 0x27, 0x80, 0x00, 0x48, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x68, 0x00, 0x03, 0x02, 0x80, 0x00, 0x49, 0x00, 0x03, 0x03, - 0x80, 0x00, 0x69, 0x00, 0x03, 0x03, 0x80, 0x00, 0x49, 0x00, 0x03, 0x04, - 0x80, 0x00, 0x69, 0x00, 0x03, 0x04, 0x80, 0x00, 0x49, 0x00, 0x03, 0x06, - 0x80, 0x00, 0x69, 0x00, 0x03, 0x06, 0x80, 0x00, 0x49, 0x00, 0x03, 0x28, - 0x80, 0x00, 0x69, 0x00, 0x03, 0x28, 0x80, 0x00, 0x49, 0x00, 0x03, 0x07, - 0xC0, 0x00, 0x49, 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x69, 0x00, 0x00, 0x6A, - 0x80, 0x00, 0x4A, 0x00, 0x03, 0x02, 0x80, 0x00, 0x6A, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x4B, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6B, 0x00, 0x03, 0x27, - 0x80, 0x00, 0x4C, 0x00, 0x03, 0x01, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x4C, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x27, - 0x80, 0x00, 0x4C, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x0C, - 0xC0, 0x00, 0x4C, 0x00, 0x00, 0xB7, 0xC0, 0x00, 0x6C, 0x00, 0x00, 0xB7, - 0x80, 0x00, 0x4E, 0x00, 0x03, 0x01, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x4E, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x27, - 0x80, 0x00, 0x4E, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x0C, - 0xC0, 0x02, 0xBC, 0x00, 0x00, 0x6E, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x04, - 0x80, 0x00, 0x6F, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x06, - 0x80, 0x00, 0x6F, 0x00, 0x03, 0x06, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x0B, - 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0B, 0x80, 0x00, 0x52, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x72, 0x00, 0x03, 0x01, 0x80, 0x00, 0x52, 0x00, 0x03, 0x27, - 0x80, 0x00, 0x72, 0x00, 0x03, 0x27, 0x80, 0x00, 0x52, 0x00, 0x03, 0x0C, - 0x80, 0x00, 0x72, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x53, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x73, 0x00, 0x03, 0x01, 0x80, 0x00, 0x53, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x73, 0x00, 0x03, 0x02, 0x80, 0x00, 0x53, 0x00, 0x03, 0x27, - 0x80, 0x00, 0x73, 0x00, 0x03, 0x27, 0x80, 0x00, 0x53, 0x00, 0x03, 0x0C, - 0x80, 0x00, 0x73, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x54, 0x00, 0x03, 0x27, - 0x80, 0x00, 0x74, 0x00, 0x03, 0x27, 0x80, 0x00, 0x54, 0x00, 0x03, 0x0C, - 0x80, 0x00, 0x74, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x55, 0x00, 0x03, 0x03, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x03, 0x80, 0x00, 0x55, 0x00, 0x03, 0x04, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x04, 0x80, 0x00, 0x55, 0x00, 0x03, 0x06, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x06, 0x80, 0x00, 0x55, 0x00, 0x03, 0x0A, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x0A, 0x80, 0x00, 0x55, 0x00, 0x03, 0x0B, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x0B, 0x80, 0x00, 0x55, 0x00, 0x03, 0x28, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x28, 0x80, 0x00, 0x57, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x77, 0x00, 0x03, 0x02, 0x80, 0x00, 0x59, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x79, 0x00, 0x03, 0x02, 0x80, 0x00, 0x59, 0x00, 0x03, 0x08, - 0x80, 0x00, 0x5A, 0x00, 0x03, 0x01, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x5A, 0x00, 0x03, 0x07, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x5A, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x0C, - 0x40, 0x00, 0x73, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x1B, 0x80, 0x00, 0x6F, - 0x00, 0x03, 0x1B, 0x80, 0x00, 0x55, 0x00, 0x03, 0x1B, 0x80, 0x00, 0x75, - 0x00, 0x03, 0x1B, 0xC0, 0x00, 0x44, 0x00, 0x01, 0x7D, 0xC0, 0x00, 0x44, - 0x00, 0x01, 0x7E, 0xC0, 0x00, 0x64, 0x00, 0x01, 0x7E, 0xC0, 0x00, 0x4C, - 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x4C, 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x6C, - 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x4E, 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x4E, - 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x6E, 0x00, 0x00, 0x6A, 0x80, 0x00, 0x41, - 0x00, 0x03, 0x0C, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x49, - 0x00, 0x03, 0x0C, 0x80, 0x00, 0x69, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4F, - 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x55, - 0x00, 0x03, 0x0C, 0x80, 0x00, 0x75, 0x00, 0x03, 0x0C, 0x80, 0x00, 0xDC, - 0x00, 0x03, 0x04, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x04, 0x80, 0x00, 0xDC, - 0x00, 0x03, 0x01, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x01, 0x80, 0x00, 0xDC, - 0x00, 0x03, 0x0C, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x0C, 0x80, 0x00, 0xDC, - 0x00, 0x03, 0x00, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC4, - 0x00, 0x03, 0x04, 0x80, 0x00, 0xE4, 0x00, 0x03, 0x04, 0x80, 0x02, 0x26, - 0x00, 0x03, 0x04, 0x80, 0x02, 0x27, 0x00, 0x03, 0x04, 0x80, 0x00, 0xC6, - 0x00, 0x03, 0x04, 0x80, 0x00, 0xE6, 0x00, 0x03, 0x04, 0x80, 0x00, 0x47, - 0x00, 0x03, 0x0C, 0x80, 0x00, 0x67, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4B, - 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6B, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4F, - 0x00, 0x03, 0x28, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x28, 0x80, 0x01, 0xEA, - 0x00, 0x03, 0x04, 0x80, 0x01, 0xEB, 0x00, 0x03, 0x04, 0x80, 0x01, 0xB7, - 0x00, 0x03, 0x0C, 0x80, 0x02, 0x92, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6A, - 0x00, 0x03, 0x0C, 0xC0, 0x00, 0x44, 0x00, 0x00, 0x5A, 0xC0, 0x00, 0x44, - 0x00, 0x00, 0x7A, 0xC0, 0x00, 0x64, 0x00, 0x00, 0x7A, 0x80, 0x00, 0x47, - 0x00, 0x03, 0x01, 0x80, 0x00, 0x67, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4E, - 0x00, 0x03, 0x00, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC5, - 0x00, 0x03, 0x01, 0x80, 0x00, 0xE5, 0x00, 0x03, 0x01, 0x80, 0x00, 0xC6, - 0x00, 0x03, 0x01, 0x80, 0x00, 0xE6, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD8, - 0x00, 0x03, 0x01, 0x80, 0x00, 0xF8, 0x00, 0x03, 0x01, 0x80, 0x00, 0x41, - 0x00, 0x03, 0x0F, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x41, - 0x00, 0x03, 0x11, 0x80, 0x00, 0x61, 0x00, 0x03, 0x11, 0x80, 0x00, 0x45, - 0x00, 0x03, 0x0F, 0x80, 0x00, 0x65, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x45, - 0x00, 0x03, 0x11, 0x80, 0x00, 0x65, 0x00, 0x03, 0x11, 0x80, 0x00, 0x49, - 0x00, 0x03, 0x0F, 0x80, 0x00, 0x69, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x49, - 0x00, 0x03, 0x11, 0x80, 0x00, 0x69, 0x00, 0x03, 0x11, 0x80, 0x00, 0x4F, - 0x00, 0x03, 0x0F, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x4F, - 0x00, 0x03, 0x11, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x11, 0x80, 0x00, 0x52, - 0x00, 0x03, 0x0F, 0x80, 0x00, 0x72, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x52, - 0x00, 0x03, 0x11, 0x80, 0x00, 0x72, 0x00, 0x03, 0x11, 0x80, 0x00, 0x55, - 0x00, 0x03, 0x0F, 0x80, 0x00, 0x75, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x55, - 0x00, 0x03, 0x11, 0x80, 0x00, 0x75, 0x00, 0x03, 0x11, 0x80, 0x00, 0x53, - 0x00, 0x03, 0x26, 0x80, 0x00, 0x73, 0x00, 0x03, 0x26, 0x80, 0x00, 0x54, - 0x00, 0x03, 0x26, 0x80, 0x00, 0x74, 0x00, 0x03, 0x26, 0x80, 0x00, 0x48, - 0x00, 0x03, 0x0C, 0x80, 0x00, 0x68, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x41, - 0x00, 0x03, 0x07, 0x80, 0x00, 0x61, 0x00, 0x03, 0x07, 0x80, 0x00, 0x45, - 0x00, 0x03, 0x27, 0x80, 0x00, 0x65, 0x00, 0x03, 0x27, 0x80, 0x00, 0xD6, - 0x00, 0x03, 0x04, 0x80, 0x00, 0xF6, 0x00, 0x03, 0x04, 0x80, 0x00, 0xD5, - 0x00, 0x03, 0x04, 0x80, 0x00, 0xF5, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4F, - 0x00, 0x03, 0x07, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x07, 0x80, 0x02, 0x2E, - 0x00, 0x03, 0x04, 0x80, 0x02, 0x2F, 0x00, 0x03, 0x04, 0x80, 0x00, 0x59, - 0x00, 0x03, 0x04, 0x80, 0x00, 0x79, 0x00, 0x03, 0x04, 0x20, 0x00, 0x68, - 0x20, 0x02, 0x66, 0x20, 0x00, 0x6A, 0x20, 0x00, 0x72, 0x20, 0x02, 0x79, - 0x20, 0x02, 0x7B, 0x20, 0x02, 0x81, 0x20, 0x00, 0x77, 0x20, 0x00, 0x79, - 0xC0, 0x00, 0x20, 0x00, 0x03, 0x06, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x07, - 0xC0, 0x00, 0x20, 0x00, 0x03, 0x0A, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x28, - 0xC0, 0x00, 0x20, 0x00, 0x03, 0x03, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x0B, - 0x20, 0x02, 0x63, 0x20, 0x00, 0x6C, 0x20, 0x00, 0x73, 0x20, 0x00, 0x78, - 0x20, 0x02, 0x95, 0x00, 0x03, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x13, - 0x80, 0x03, 0x08, 0x00, 0x03, 0x01, 0x00, 0x02, 0xB9, 0xC0, 0x00, 0x20, - 0x00, 0x03, 0x45, 0x00, 0x00, 0x3B, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x01, - 0x80, 0x00, 0xA8, 0x00, 0x03, 0x01, 0x80, 0x03, 0x91, 0x00, 0x03, 0x01, - 0x00, 0x00, 0xB7, 0x80, 0x03, 0x95, 0x00, 0x03, 0x01, 0x80, 0x03, 0x97, - 0x00, 0x03, 0x01, 0x80, 0x03, 0x99, 0x00, 0x03, 0x01, 0x80, 0x03, 0x9F, - 0x00, 0x03, 0x01, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x01, 0x80, 0x03, 0xA9, - 0x00, 0x03, 0x01, 0x80, 0x03, 0xCA, 0x00, 0x03, 0x01, 0x80, 0x03, 0x99, - 0x00, 0x03, 0x08, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x08, 0x80, 0x03, 0xB1, - 0x00, 0x03, 0x01, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x01, 0x80, 0x03, 0xB7, - 0x00, 0x03, 0x01, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x01, 0x80, 0x03, 0xCB, - 0x00, 0x03, 0x01, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x08, 0x80, 0x03, 0xC5, - 0x00, 0x03, 0x08, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x01, 0x80, 0x03, 0xC5, - 0x00, 0x03, 0x01, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x01, 0x40, 0x03, 0xB2, - 0x40, 0x03, 0xB8, 0x40, 0x03, 0xA5, 0x80, 0x03, 0xD2, 0x00, 0x03, 0x01, - 0x80, 0x03, 0xD2, 0x00, 0x03, 0x08, 0x40, 0x03, 0xC6, 0x40, 0x03, 0xC0, - 0x40, 0x03, 0xBA, 0x40, 0x03, 0xC1, 0x40, 0x03, 0xC2, 0x40, 0x03, 0x98, - 0x40, 0x03, 0xB5, 0x40, 0x03, 0xA3, 0x80, 0x04, 0x15, 0x00, 0x03, 0x00, - 0x80, 0x04, 0x15, 0x00, 0x03, 0x08, 0x80, 0x04, 0x13, 0x00, 0x03, 0x01, - 0x80, 0x04, 0x06, 0x00, 0x03, 0x08, 0x80, 0x04, 0x1A, 0x00, 0x03, 0x01, - 0x80, 0x04, 0x18, 0x00, 0x03, 0x00, 0x80, 0x04, 0x23, 0x00, 0x03, 0x06, - 0x80, 0x04, 0x18, 0x00, 0x03, 0x06, 0x80, 0x04, 0x38, 0x00, 0x03, 0x06, - 0x80, 0x04, 0x35, 0x00, 0x03, 0x00, 0x80, 0x04, 0x35, 0x00, 0x03, 0x08, - 0x80, 0x04, 0x33, 0x00, 0x03, 0x01, 0x80, 0x04, 0x56, 0x00, 0x03, 0x08, - 0x80, 0x04, 0x3A, 0x00, 0x03, 0x01, 0x80, 0x04, 0x38, 0x00, 0x03, 0x00, - 0x80, 0x04, 0x43, 0x00, 0x03, 0x06, 0x80, 0x04, 0x74, 0x00, 0x03, 0x0F, - 0x80, 0x04, 0x75, 0x00, 0x03, 0x0F, 0x80, 0x04, 0x16, 0x00, 0x03, 0x06, - 0x80, 0x04, 0x36, 0x00, 0x03, 0x06, 0x80, 0x04, 0x10, 0x00, 0x03, 0x06, - 0x80, 0x04, 0x30, 0x00, 0x03, 0x06, 0x80, 0x04, 0x10, 0x00, 0x03, 0x08, - 0x80, 0x04, 0x30, 0x00, 0x03, 0x08, 0x80, 0x04, 0x15, 0x00, 0x03, 0x06, - 0x80, 0x04, 0x35, 0x00, 0x03, 0x06, 0x80, 0x04, 0xD8, 0x00, 0x03, 0x08, - 0x80, 0x04, 0xD9, 0x00, 0x03, 0x08, 0x80, 0x04, 0x16, 0x00, 0x03, 0x08, - 0x80, 0x04, 0x36, 0x00, 0x03, 0x08, 0x80, 0x04, 0x17, 0x00, 0x03, 0x08, - 0x80, 0x04, 0x37, 0x00, 0x03, 0x08, 0x80, 0x04, 0x18, 0x00, 0x03, 0x04, - 0x80, 0x04, 0x38, 0x00, 0x03, 0x04, 0x80, 0x04, 0x18, 0x00, 0x03, 0x08, - 0x80, 0x04, 0x38, 0x00, 0x03, 0x08, 0x80, 0x04, 0x1E, 0x00, 0x03, 0x08, - 0x80, 0x04, 0x3E, 0x00, 0x03, 0x08, 0x80, 0x04, 0xE8, 0x00, 0x03, 0x08, - 0x80, 0x04, 0xE9, 0x00, 0x03, 0x08, 0x80, 0x04, 0x2D, 0x00, 0x03, 0x08, - 0x80, 0x04, 0x4D, 0x00, 0x03, 0x08, 0x80, 0x04, 0x23, 0x00, 0x03, 0x04, - 0x80, 0x04, 0x43, 0x00, 0x03, 0x04, 0x80, 0x04, 0x23, 0x00, 0x03, 0x08, - 0x80, 0x04, 0x43, 0x00, 0x03, 0x08, 0x80, 0x04, 0x23, 0x00, 0x03, 0x0B, - 0x80, 0x04, 0x43, 0x00, 0x03, 0x0B, 0x80, 0x04, 0x27, 0x00, 0x03, 0x08, - 0x80, 0x04, 0x47, 0x00, 0x03, 0x08, 0x80, 0x04, 0x2B, 0x00, 0x03, 0x08, - 0x80, 0x04, 0x4B, 0x00, 0x03, 0x08, 0xC0, 0x05, 0x65, 0x00, 0x05, 0x82, - 0x80, 0x06, 0x27, 0x00, 0x06, 0x53, 0x80, 0x06, 0x27, 0x00, 0x06, 0x54, - 0x80, 0x06, 0x48, 0x00, 0x06, 0x54, 0x80, 0x06, 0x27, 0x00, 0x06, 0x55, - 0x80, 0x06, 0x4A, 0x00, 0x06, 0x54, 0xC0, 0x06, 0x27, 0x00, 0x06, 0x74, - 0xC0, 0x06, 0x48, 0x00, 0x06, 0x74, 0xC0, 0x06, 0xC7, 0x00, 0x06, 0x74, - 0xC0, 0x06, 0x4A, 0x00, 0x06, 0x74, 0x80, 0x06, 0xD5, 0x00, 0x06, 0x54, - 0x80, 0x06, 0xC1, 0x00, 0x06, 0x54, 0x80, 0x06, 0xD2, 0x00, 0x06, 0x54, - 0x80, 0x09, 0x28, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x30, 0x00, 0x09, 0x3C, - 0x80, 0x09, 0x33, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x15, 0x00, 0x09, 0x3C, - 0x80, 0x09, 0x16, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x17, 0x00, 0x09, 0x3C, - 0x80, 0x09, 0x1C, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x21, 0x00, 0x09, 0x3C, - 0x80, 0x09, 0x22, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x2B, 0x00, 0x09, 0x3C, - 0x80, 0x09, 0x2F, 0x00, 0x09, 0x3C, 0x80, 0x09, 0xC7, 0x00, 0x09, 0xBE, - 0x80, 0x09, 0xC7, 0x00, 0x09, 0xD7, 0x80, 0x09, 0xA1, 0x00, 0x09, 0xBC, - 0x80, 0x09, 0xA2, 0x00, 0x09, 0xBC, 0x80, 0x09, 0xAF, 0x00, 0x09, 0xBC, - 0x80, 0x0A, 0x32, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x38, 0x00, 0x0A, 0x3C, - 0x80, 0x0A, 0x16, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x17, 0x00, 0x0A, 0x3C, - 0x80, 0x0A, 0x1C, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x2B, 0x00, 0x0A, 0x3C, - 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x56, 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x3E, - 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x57, 0x80, 0x0B, 0x21, 0x00, 0x0B, 0x3C, - 0x80, 0x0B, 0x22, 0x00, 0x0B, 0x3C, 0x80, 0x0B, 0x92, 0x00, 0x0B, 0xD7, - 0x80, 0x0B, 0xC6, 0x00, 0x0B, 0xBE, 0x80, 0x0B, 0xC7, 0x00, 0x0B, 0xBE, - 0x80, 0x0B, 0xC6, 0x00, 0x0B, 0xD7, 0x80, 0x0C, 0x46, 0x00, 0x0C, 0x56, - 0x80, 0x0C, 0xBF, 0x00, 0x0C, 0xD5, 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xD5, - 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xD6, 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xC2, - 0x80, 0x0C, 0xCA, 0x00, 0x0C, 0xD5, 0x80, 0x0D, 0x46, 0x00, 0x0D, 0x3E, - 0x80, 0x0D, 0x47, 0x00, 0x0D, 0x3E, 0x80, 0x0D, 0x46, 0x00, 0x0D, 0x57, - 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xCA, 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xCF, - 0x80, 0x0D, 0xDC, 0x00, 0x0D, 0xCA, 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xDF, - 0xC0, 0x0E, 0x4D, 0x00, 0x0E, 0x32, 0xC0, 0x0E, 0xCD, 0x00, 0x0E, 0xB2, - 0xC0, 0x0E, 0xAB, 0x00, 0x0E, 0x99, 0xC0, 0x0E, 0xAB, 0x00, 0x0E, 0xA1, - 0x08, 0x0F, 0x0B, 0x80, 0x0F, 0x42, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x4C, - 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x51, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x56, - 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x5B, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x40, - 0x00, 0x0F, 0xB5, 0x80, 0x0F, 0x71, 0x00, 0x0F, 0x72, 0x80, 0x0F, 0x71, - 0x00, 0x0F, 0x74, 0x80, 0x0F, 0xB2, 0x00, 0x0F, 0x80, 0xC0, 0x0F, 0xB2, - 0x00, 0x0F, 0x81, 0x80, 0x0F, 0xB3, 0x00, 0x0F, 0x80, 0xC0, 0x0F, 0xB3, - 0x00, 0x0F, 0x81, 0x80, 0x0F, 0x71, 0x00, 0x0F, 0x80, 0x80, 0x0F, 0x92, - 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x9C, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xA1, - 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xA6, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xAB, - 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x90, 0x00, 0x0F, 0xB5, 0x80, 0x10, 0x25, - 0x00, 0x10, 0x2E, 0x20, 0x10, 0xDC, 0x80, 0x1B, 0x05, 0x00, 0x1B, 0x35, - 0x80, 0x1B, 0x07, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x09, 0x00, 0x1B, 0x35, - 0x80, 0x1B, 0x0B, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x0D, 0x00, 0x1B, 0x35, - 0x80, 0x1B, 0x11, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x3A, 0x00, 0x1B, 0x35, - 0x80, 0x1B, 0x3C, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x3E, 0x00, 0x1B, 0x35, - 0x80, 0x1B, 0x3F, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x42, 0x00, 0x1B, 0x35, - 0x20, 0x00, 0x41, 0x20, 0x00, 0xC6, 0x20, 0x00, 0x42, 0x20, 0x00, 0x44, - 0x20, 0x00, 0x45, 0x20, 0x01, 0x8E, 0x20, 0x00, 0x47, 0x20, 0x00, 0x48, - 0x20, 0x00, 0x49, 0x20, 0x00, 0x4A, 0x20, 0x00, 0x4B, 0x20, 0x00, 0x4C, - 0x20, 0x00, 0x4D, 0x20, 0x00, 0x4E, 0x20, 0x00, 0x4F, 0x20, 0x02, 0x22, - 0x20, 0x00, 0x50, 0x20, 0x00, 0x52, 0x20, 0x00, 0x54, 0x20, 0x00, 0x55, - 0x20, 0x00, 0x57, 0x20, 0x00, 0x61, 0x20, 0x02, 0x50, 0x20, 0x02, 0x51, - 0x20, 0x1D, 0x02, 0x20, 0x00, 0x62, 0x20, 0x00, 0x64, 0x20, 0x00, 0x65, - 0x20, 0x02, 0x59, 0x20, 0x02, 0x5B, 0x20, 0x02, 0x5C, 0x20, 0x00, 0x67, - 0x20, 0x00, 0x6B, 0x20, 0x00, 0x6D, 0x20, 0x01, 0x4B, 0x20, 0x00, 0x6F, - 0x20, 0x02, 0x54, 0x20, 0x1D, 0x16, 0x20, 0x1D, 0x17, 0x20, 0x00, 0x70, - 0x20, 0x00, 0x74, 0x20, 0x00, 0x75, 0x20, 0x1D, 0x1D, 0x20, 0x02, 0x6F, - 0x20, 0x00, 0x76, 0x20, 0x1D, 0x25, 0x20, 0x03, 0xB2, 0x20, 0x03, 0xB3, - 0x20, 0x03, 0xB4, 0x20, 0x03, 0xC6, 0x20, 0x03, 0xC7, 0x24, 0x00, 0x69, - 0x24, 0x00, 0x72, 0x24, 0x00, 0x75, 0x24, 0x00, 0x76, 0x24, 0x03, 0xB2, - 0x24, 0x03, 0xB3, 0x24, 0x03, 0xC1, 0x24, 0x03, 0xC6, 0x24, 0x03, 0xC7, - 0x20, 0x04, 0x3D, 0x20, 0x02, 0x52, 0x20, 0x00, 0x63, 0x20, 0x02, 0x55, - 0x20, 0x00, 0xF0, 0x20, 0x02, 0x5C, 0x20, 0x00, 0x66, 0x20, 0x02, 0x5F, - 0x20, 0x02, 0x61, 0x20, 0x02, 0x65, 0x20, 0x02, 0x68, 0x20, 0x02, 0x69, - 0x20, 0x02, 0x6A, 0x20, 0x1D, 0x7B, 0x20, 0x02, 0x9D, 0x20, 0x02, 0x6D, - 0x20, 0x1D, 0x85, 0x20, 0x02, 0x9F, 0x20, 0x02, 0x71, 0x20, 0x02, 0x70, - 0x20, 0x02, 0x72, 0x20, 0x02, 0x73, 0x20, 0x02, 0x74, 0x20, 0x02, 0x75, - 0x20, 0x02, 0x78, 0x20, 0x02, 0x82, 0x20, 0x02, 0x83, 0x20, 0x01, 0xAB, - 0x20, 0x02, 0x89, 0x20, 0x02, 0x8A, 0x20, 0x1D, 0x1C, 0x20, 0x02, 0x8B, - 0x20, 0x02, 0x8C, 0x20, 0x00, 0x7A, 0x20, 0x02, 0x90, 0x20, 0x02, 0x91, - 0x20, 0x02, 0x92, 0x20, 0x03, 0xB8, 0x80, 0x00, 0x41, 0x00, 0x03, 0x25, - 0x80, 0x00, 0x61, 0x00, 0x03, 0x25, 0x80, 0x00, 0x42, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x62, 0x00, 0x03, 0x07, 0x80, 0x00, 0x42, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x62, 0x00, 0x03, 0x23, 0x80, 0x00, 0x42, 0x00, 0x03, 0x31, - 0x80, 0x00, 0x62, 0x00, 0x03, 0x31, 0x80, 0x00, 0xC7, 0x00, 0x03, 0x01, - 0x80, 0x00, 0xE7, 0x00, 0x03, 0x01, 0x80, 0x00, 0x44, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x64, 0x00, 0x03, 0x07, 0x80, 0x00, 0x44, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x64, 0x00, 0x03, 0x23, 0x80, 0x00, 0x44, 0x00, 0x03, 0x31, - 0x80, 0x00, 0x64, 0x00, 0x03, 0x31, 0x80, 0x00, 0x44, 0x00, 0x03, 0x27, - 0x80, 0x00, 0x64, 0x00, 0x03, 0x27, 0x80, 0x00, 0x44, 0x00, 0x03, 0x2D, - 0x80, 0x00, 0x64, 0x00, 0x03, 0x2D, 0x80, 0x01, 0x12, 0x00, 0x03, 0x00, - 0x80, 0x01, 0x13, 0x00, 0x03, 0x00, 0x80, 0x01, 0x12, 0x00, 0x03, 0x01, - 0x80, 0x01, 0x13, 0x00, 0x03, 0x01, 0x80, 0x00, 0x45, 0x00, 0x03, 0x2D, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x45, 0x00, 0x03, 0x30, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x30, 0x80, 0x02, 0x28, 0x00, 0x03, 0x06, - 0x80, 0x02, 0x29, 0x00, 0x03, 0x06, 0x80, 0x00, 0x46, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x66, 0x00, 0x03, 0x07, 0x80, 0x00, 0x47, 0x00, 0x03, 0x04, - 0x80, 0x00, 0x67, 0x00, 0x03, 0x04, 0x80, 0x00, 0x48, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x68, 0x00, 0x03, 0x07, 0x80, 0x00, 0x48, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x68, 0x00, 0x03, 0x23, 0x80, 0x00, 0x48, 0x00, 0x03, 0x08, - 0x80, 0x00, 0x68, 0x00, 0x03, 0x08, 0x80, 0x00, 0x48, 0x00, 0x03, 0x27, - 0x80, 0x00, 0x68, 0x00, 0x03, 0x27, 0x80, 0x00, 0x48, 0x00, 0x03, 0x2E, - 0x80, 0x00, 0x68, 0x00, 0x03, 0x2E, 0x80, 0x00, 0x49, 0x00, 0x03, 0x30, - 0x80, 0x00, 0x69, 0x00, 0x03, 0x30, 0x80, 0x00, 0xCF, 0x00, 0x03, 0x01, - 0x80, 0x00, 0xEF, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x6B, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x6B, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x31, - 0x80, 0x00, 0x6B, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x6C, 0x00, 0x03, 0x23, 0x80, 0x1E, 0x36, 0x00, 0x03, 0x04, - 0x80, 0x1E, 0x37, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x31, - 0x80, 0x00, 0x6C, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x2D, - 0x80, 0x00, 0x6C, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x6D, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x6D, 0x00, 0x03, 0x07, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x6D, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x6E, 0x00, 0x03, 0x07, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x6E, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x31, - 0x80, 0x00, 0x6E, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x2D, - 0x80, 0x00, 0x6E, 0x00, 0x03, 0x2D, 0x80, 0x00, 0xD5, 0x00, 0x03, 0x01, - 0x80, 0x00, 0xF5, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD5, 0x00, 0x03, 0x08, - 0x80, 0x00, 0xF5, 0x00, 0x03, 0x08, 0x80, 0x01, 0x4C, 0x00, 0x03, 0x00, - 0x80, 0x01, 0x4D, 0x00, 0x03, 0x00, 0x80, 0x01, 0x4C, 0x00, 0x03, 0x01, - 0x80, 0x01, 0x4D, 0x00, 0x03, 0x01, 0x80, 0x00, 0x50, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x70, 0x00, 0x03, 0x01, 0x80, 0x00, 0x50, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x70, 0x00, 0x03, 0x07, 0x80, 0x00, 0x52, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x72, 0x00, 0x03, 0x07, 0x80, 0x00, 0x52, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x72, 0x00, 0x03, 0x23, 0x80, 0x1E, 0x5A, 0x00, 0x03, 0x04, - 0x80, 0x1E, 0x5B, 0x00, 0x03, 0x04, 0x80, 0x00, 0x52, 0x00, 0x03, 0x31, - 0x80, 0x00, 0x72, 0x00, 0x03, 0x31, 0x80, 0x00, 0x53, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x73, 0x00, 0x03, 0x07, 0x80, 0x00, 0x53, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x73, 0x00, 0x03, 0x23, 0x80, 0x01, 0x5A, 0x00, 0x03, 0x07, - 0x80, 0x01, 0x5B, 0x00, 0x03, 0x07, 0x80, 0x01, 0x60, 0x00, 0x03, 0x07, - 0x80, 0x01, 0x61, 0x00, 0x03, 0x07, 0x80, 0x1E, 0x62, 0x00, 0x03, 0x07, - 0x80, 0x1E, 0x63, 0x00, 0x03, 0x07, 0x80, 0x00, 0x54, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x74, 0x00, 0x03, 0x07, 0x80, 0x00, 0x54, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x74, 0x00, 0x03, 0x23, 0x80, 0x00, 0x54, 0x00, 0x03, 0x31, - 0x80, 0x00, 0x74, 0x00, 0x03, 0x31, 0x80, 0x00, 0x54, 0x00, 0x03, 0x2D, - 0x80, 0x00, 0x74, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x55, 0x00, 0x03, 0x24, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x24, 0x80, 0x00, 0x55, 0x00, 0x03, 0x30, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x30, 0x80, 0x00, 0x55, 0x00, 0x03, 0x2D, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x2D, 0x80, 0x01, 0x68, 0x00, 0x03, 0x01, - 0x80, 0x01, 0x69, 0x00, 0x03, 0x01, 0x80, 0x01, 0x6A, 0x00, 0x03, 0x08, - 0x80, 0x01, 0x6B, 0x00, 0x03, 0x08, 0x80, 0x00, 0x56, 0x00, 0x03, 0x03, - 0x80, 0x00, 0x76, 0x00, 0x03, 0x03, 0x80, 0x00, 0x56, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x76, 0x00, 0x03, 0x23, 0x80, 0x00, 0x57, 0x00, 0x03, 0x00, - 0x80, 0x00, 0x77, 0x00, 0x03, 0x00, 0x80, 0x00, 0x57, 0x00, 0x03, 0x01, - 0x80, 0x00, 0x77, 0x00, 0x03, 0x01, 0x80, 0x00, 0x57, 0x00, 0x03, 0x08, - 0x80, 0x00, 0x77, 0x00, 0x03, 0x08, 0x80, 0x00, 0x57, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x77, 0x00, 0x03, 0x07, 0x80, 0x00, 0x57, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x77, 0x00, 0x03, 0x23, 0x80, 0x00, 0x58, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x78, 0x00, 0x03, 0x07, 0x80, 0x00, 0x58, 0x00, 0x03, 0x08, - 0x80, 0x00, 0x78, 0x00, 0x03, 0x08, 0x80, 0x00, 0x59, 0x00, 0x03, 0x07, - 0x80, 0x00, 0x79, 0x00, 0x03, 0x07, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x02, - 0x80, 0x00, 0x7A, 0x00, 0x03, 0x02, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x7A, 0x00, 0x03, 0x23, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x31, - 0x80, 0x00, 0x7A, 0x00, 0x03, 0x31, 0x80, 0x00, 0x68, 0x00, 0x03, 0x31, - 0x80, 0x00, 0x74, 0x00, 0x03, 0x08, 0x80, 0x00, 0x77, 0x00, 0x03, 0x0A, - 0x80, 0x00, 0x79, 0x00, 0x03, 0x0A, 0xC0, 0x00, 0x61, 0x00, 0x02, 0xBE, - 0x80, 0x01, 0x7F, 0x00, 0x03, 0x07, 0x80, 0x00, 0x41, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x61, 0x00, 0x03, 0x23, 0x80, 0x00, 0x41, 0x00, 0x03, 0x09, - 0x80, 0x00, 0x61, 0x00, 0x03, 0x09, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x01, - 0x80, 0x00, 0xE2, 0x00, 0x03, 0x01, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x00, - 0x80, 0x00, 0xE2, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x09, - 0x80, 0x00, 0xE2, 0x00, 0x03, 0x09, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x03, - 0x80, 0x00, 0xE2, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xA0, 0x00, 0x03, 0x02, - 0x80, 0x1E, 0xA1, 0x00, 0x03, 0x02, 0x80, 0x01, 0x02, 0x00, 0x03, 0x01, - 0x80, 0x01, 0x03, 0x00, 0x03, 0x01, 0x80, 0x01, 0x02, 0x00, 0x03, 0x00, - 0x80, 0x01, 0x03, 0x00, 0x03, 0x00, 0x80, 0x01, 0x02, 0x00, 0x03, 0x09, - 0x80, 0x01, 0x03, 0x00, 0x03, 0x09, 0x80, 0x01, 0x02, 0x00, 0x03, 0x03, - 0x80, 0x01, 0x03, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xA0, 0x00, 0x03, 0x06, - 0x80, 0x1E, 0xA1, 0x00, 0x03, 0x06, 0x80, 0x00, 0x45, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x23, 0x80, 0x00, 0x45, 0x00, 0x03, 0x09, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x09, 0x80, 0x00, 0x45, 0x00, 0x03, 0x03, - 0x80, 0x00, 0x65, 0x00, 0x03, 0x03, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x01, - 0x80, 0x00, 0xEA, 0x00, 0x03, 0x01, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x00, - 0x80, 0x00, 0xEA, 0x00, 0x03, 0x00, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x09, - 0x80, 0x00, 0xEA, 0x00, 0x03, 0x09, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x03, - 0x80, 0x00, 0xEA, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xB8, 0x00, 0x03, 0x02, - 0x80, 0x1E, 0xB9, 0x00, 0x03, 0x02, 0x80, 0x00, 0x49, 0x00, 0x03, 0x09, - 0x80, 0x00, 0x69, 0x00, 0x03, 0x09, 0x80, 0x00, 0x49, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x69, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x6F, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x09, - 0x80, 0x00, 0x6F, 0x00, 0x03, 0x09, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x01, - 0x80, 0x00, 0xF4, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x00, - 0x80, 0x00, 0xF4, 0x00, 0x03, 0x00, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x09, - 0x80, 0x00, 0xF4, 0x00, 0x03, 0x09, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x03, - 0x80, 0x00, 0xF4, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xCC, 0x00, 0x03, 0x02, - 0x80, 0x1E, 0xCD, 0x00, 0x03, 0x02, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x01, - 0x80, 0x01, 0xA1, 0x00, 0x03, 0x01, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x00, - 0x80, 0x01, 0xA1, 0x00, 0x03, 0x00, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x09, - 0x80, 0x01, 0xA1, 0x00, 0x03, 0x09, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x03, - 0x80, 0x01, 0xA1, 0x00, 0x03, 0x03, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x23, - 0x80, 0x01, 0xA1, 0x00, 0x03, 0x23, 0x80, 0x00, 0x55, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x23, 0x80, 0x00, 0x55, 0x00, 0x03, 0x09, - 0x80, 0x00, 0x75, 0x00, 0x03, 0x09, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x01, - 0x80, 0x01, 0xB0, 0x00, 0x03, 0x01, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x00, - 0x80, 0x01, 0xB0, 0x00, 0x03, 0x00, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x09, - 0x80, 0x01, 0xB0, 0x00, 0x03, 0x09, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x03, - 0x80, 0x01, 0xB0, 0x00, 0x03, 0x03, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x23, - 0x80, 0x01, 0xB0, 0x00, 0x03, 0x23, 0x80, 0x00, 0x59, 0x00, 0x03, 0x00, - 0x80, 0x00, 0x79, 0x00, 0x03, 0x00, 0x80, 0x00, 0x59, 0x00, 0x03, 0x23, - 0x80, 0x00, 0x79, 0x00, 0x03, 0x23, 0x80, 0x00, 0x59, 0x00, 0x03, 0x09, - 0x80, 0x00, 0x79, 0x00, 0x03, 0x09, 0x80, 0x00, 0x59, 0x00, 0x03, 0x03, - 0x80, 0x00, 0x79, 0x00, 0x03, 0x03, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x13, - 0x80, 0x03, 0xB1, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x01, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x01, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x42, - 0x80, 0x1F, 0x01, 0x00, 0x03, 0x42, 0x80, 0x03, 0x91, 0x00, 0x03, 0x13, - 0x80, 0x03, 0x91, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x09, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x09, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x42, - 0x80, 0x1F, 0x09, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x13, - 0x80, 0x03, 0xB5, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x10, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x11, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x10, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x11, 0x00, 0x03, 0x01, 0x80, 0x03, 0x95, 0x00, 0x03, 0x13, - 0x80, 0x03, 0x95, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x18, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x19, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x18, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x19, 0x00, 0x03, 0x01, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x13, - 0x80, 0x03, 0xB7, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x21, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x21, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x42, - 0x80, 0x1F, 0x21, 0x00, 0x03, 0x42, 0x80, 0x03, 0x97, 0x00, 0x03, 0x13, - 0x80, 0x03, 0x97, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x29, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x29, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x42, - 0x80, 0x1F, 0x29, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x13, - 0x80, 0x03, 0xB9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x31, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x31, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x42, - 0x80, 0x1F, 0x31, 0x00, 0x03, 0x42, 0x80, 0x03, 0x99, 0x00, 0x03, 0x13, - 0x80, 0x03, 0x99, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x39, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x39, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x42, - 0x80, 0x1F, 0x39, 0x00, 0x03, 0x42, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x13, - 0x80, 0x03, 0xBF, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x40, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x41, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x40, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x41, 0x00, 0x03, 0x01, 0x80, 0x03, 0x9F, 0x00, 0x03, 0x13, - 0x80, 0x03, 0x9F, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x48, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x49, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x48, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x49, 0x00, 0x03, 0x01, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x13, - 0x80, 0x03, 0xC5, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x51, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x51, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x42, - 0x80, 0x1F, 0x51, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x14, - 0x80, 0x1F, 0x59, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x59, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x59, 0x00, 0x03, 0x42, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x13, - 0x80, 0x03, 0xC9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x61, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x61, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x42, - 0x80, 0x1F, 0x61, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA9, 0x00, 0x03, 0x13, - 0x80, 0x03, 0xA9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x00, - 0x80, 0x1F, 0x69, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x01, - 0x80, 0x1F, 0x69, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x42, - 0x80, 0x1F, 0x69, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x00, - 0x00, 0x03, 0xAC, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x00, 0x00, 0x03, 0xAD, - 0x80, 0x03, 0xB7, 0x00, 0x03, 0x00, 0x00, 0x03, 0xAE, 0x80, 0x03, 0xB9, - 0x00, 0x03, 0x00, 0x00, 0x03, 0xAF, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x00, - 0x00, 0x03, 0xCC, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x00, 0x00, 0x03, 0xCD, - 0x80, 0x03, 0xC9, 0x00, 0x03, 0x00, 0x00, 0x03, 0xCE, 0x80, 0x1F, 0x00, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x01, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x02, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x03, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x04, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x05, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x06, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x07, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x08, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x09, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0A, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0C, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0E, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0F, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x20, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x21, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x22, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x23, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x24, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x25, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x26, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x27, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x28, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x29, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2A, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2C, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2E, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2F, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x60, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x61, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x62, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x63, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x64, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x65, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x66, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x67, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x68, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x69, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6A, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6C, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6E, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6F, 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, - 0x00, 0x03, 0x06, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x04, 0x80, 0x1F, 0x70, - 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x45, 0x80, 0x03, 0xAC, - 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xB6, - 0x00, 0x03, 0x45, 0x80, 0x03, 0x91, 0x00, 0x03, 0x06, 0x80, 0x03, 0x91, - 0x00, 0x03, 0x04, 0x80, 0x03, 0x91, 0x00, 0x03, 0x00, 0x00, 0x03, 0x86, - 0x80, 0x03, 0x91, 0x00, 0x03, 0x45, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x13, - 0x00, 0x03, 0xB9, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x13, 0xC0, 0x00, 0x20, - 0x00, 0x03, 0x42, 0x80, 0x00, 0xA8, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x74, - 0x00, 0x03, 0x45, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x45, 0x80, 0x03, 0xAE, - 0x00, 0x03, 0x45, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xC6, - 0x00, 0x03, 0x45, 0x80, 0x03, 0x95, 0x00, 0x03, 0x00, 0x00, 0x03, 0x88, - 0x80, 0x03, 0x97, 0x00, 0x03, 0x00, 0x00, 0x03, 0x89, 0x80, 0x03, 0x97, - 0x00, 0x03, 0x45, 0x80, 0x1F, 0xBF, 0x00, 0x03, 0x00, 0x80, 0x1F, 0xBF, - 0x00, 0x03, 0x01, 0x80, 0x1F, 0xBF, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB9, - 0x00, 0x03, 0x06, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x04, 0x80, 0x03, 0xCA, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x90, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x42, - 0x80, 0x03, 0xCA, 0x00, 0x03, 0x42, 0x80, 0x03, 0x99, 0x00, 0x03, 0x06, - 0x80, 0x03, 0x99, 0x00, 0x03, 0x04, 0x80, 0x03, 0x99, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x8A, 0x80, 0x1F, 0xFE, 0x00, 0x03, 0x00, 0x80, 0x1F, 0xFE, - 0x00, 0x03, 0x01, 0x80, 0x1F, 0xFE, 0x00, 0x03, 0x42, 0x80, 0x03, 0xC5, - 0x00, 0x03, 0x06, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x04, 0x80, 0x03, 0xCB, - 0x00, 0x03, 0x00, 0x00, 0x03, 0xB0, 0x80, 0x03, 0xC1, 0x00, 0x03, 0x13, - 0x80, 0x03, 0xC1, 0x00, 0x03, 0x14, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x42, - 0x80, 0x03, 0xCB, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x06, - 0x80, 0x03, 0xA5, 0x00, 0x03, 0x04, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x00, - 0x00, 0x03, 0x8E, 0x80, 0x03, 0xA1, 0x00, 0x03, 0x14, 0x80, 0x00, 0xA8, - 0x00, 0x03, 0x00, 0x00, 0x03, 0x85, 0x00, 0x00, 0x60, 0x80, 0x1F, 0x7C, - 0x00, 0x03, 0x45, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x45, 0x80, 0x03, 0xCE, - 0x00, 0x03, 0x45, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xF6, - 0x00, 0x03, 0x45, 0x80, 0x03, 0x9F, 0x00, 0x03, 0x00, 0x00, 0x03, 0x8C, - 0x80, 0x03, 0xA9, 0x00, 0x03, 0x00, 0x00, 0x03, 0x8F, 0x80, 0x03, 0xA9, - 0x00, 0x03, 0x45, 0x00, 0x00, 0xB4, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x14, - 0x00, 0x20, 0x02, 0x00, 0x20, 0x03, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, - 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x08, 0x00, 0x20, - 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x08, 0x20, 0x10, - 0xC0, 0x00, 0x20, 0x00, 0x03, 0x33, 0x40, 0x00, 0x2E, 0xC0, 0x00, 0x2E, - 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x2E, 0x80, 0x00, 0x2E, 0x00, 0x00, 0x2E, - 0x08, 0x00, 0x20, 0xC0, 0x20, 0x32, 0x00, 0x20, 0x32, 0xC0, 0x20, 0x32, - 0x80, 0x20, 0x32, 0x00, 0x20, 0x32, 0xC0, 0x20, 0x35, 0x00, 0x20, 0x35, - 0xC0, 0x20, 0x35, 0x80, 0x20, 0x35, 0x00, 0x20, 0x35, 0xC0, 0x00, 0x21, - 0x00, 0x00, 0x21, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x05, 0xC0, 0x00, 0x3F, - 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x21, 0xC0, 0x00, 0x21, - 0x00, 0x00, 0x3F, 0xC0, 0x20, 0x32, 0x80, 0x20, 0x32, 0x80, 0x20, 0x32, - 0x00, 0x20, 0x32, 0x40, 0x00, 0x20, 0x20, 0x00, 0x30, 0x20, 0x00, 0x69, - 0x20, 0x00, 0x34, 0x20, 0x00, 0x35, 0x20, 0x00, 0x36, 0x20, 0x00, 0x37, - 0x20, 0x00, 0x38, 0x20, 0x00, 0x39, 0x20, 0x00, 0x2B, 0x20, 0x22, 0x12, - 0x20, 0x00, 0x3D, 0x20, 0x00, 0x28, 0x20, 0x00, 0x29, 0x20, 0x00, 0x6E, - 0x24, 0x00, 0x30, 0x24, 0x00, 0x31, 0x24, 0x00, 0x32, 0x24, 0x00, 0x33, - 0x24, 0x00, 0x34, 0x24, 0x00, 0x35, 0x24, 0x00, 0x36, 0x24, 0x00, 0x37, - 0x24, 0x00, 0x38, 0x24, 0x00, 0x39, 0x24, 0x00, 0x2B, 0x24, 0x22, 0x12, - 0x24, 0x00, 0x3D, 0x24, 0x00, 0x28, 0x24, 0x00, 0x29, 0x24, 0x00, 0x61, - 0x24, 0x00, 0x65, 0x24, 0x00, 0x6F, 0x24, 0x00, 0x78, 0x24, 0x02, 0x59, - 0x24, 0x00, 0x68, 0x24, 0x00, 0x6B, 0x24, 0x00, 0x6C, 0x24, 0x00, 0x6D, - 0x24, 0x00, 0x6E, 0x24, 0x00, 0x70, 0x24, 0x00, 0x73, 0x24, 0x00, 0x74, - 0xC0, 0x00, 0x52, 0x00, 0x00, 0x73, 0xC0, 0x00, 0x61, 0x80, 0x00, 0x2F, - 0x00, 0x00, 0x63, 0xC0, 0x00, 0x61, 0x80, 0x00, 0x2F, 0x00, 0x00, 0x73, - 0x04, 0x00, 0x43, 0xC0, 0x00, 0xB0, 0x00, 0x00, 0x43, 0xC0, 0x00, 0x63, - 0x80, 0x00, 0x2F, 0x00, 0x00, 0x6F, 0xC0, 0x00, 0x63, 0x80, 0x00, 0x2F, - 0x00, 0x00, 0x75, 0x40, 0x01, 0x90, 0xC0, 0x00, 0xB0, 0x00, 0x00, 0x46, - 0x04, 0x00, 0x67, 0x04, 0x00, 0x48, 0x04, 0x00, 0x48, 0x04, 0x00, 0x48, - 0x04, 0x00, 0x68, 0x04, 0x01, 0x27, 0x04, 0x00, 0x49, 0x04, 0x00, 0x49, - 0x04, 0x00, 0x4C, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x4E, 0xC0, 0x00, 0x4E, - 0x00, 0x00, 0x6F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, - 0x04, 0x00, 0x52, 0x04, 0x00, 0x52, 0xA0, 0x00, 0x53, 0x00, 0x00, 0x4D, - 0xC0, 0x00, 0x54, 0x80, 0x00, 0x45, 0x00, 0x00, 0x4C, 0xA0, 0x00, 0x54, - 0x00, 0x00, 0x4D, 0x04, 0x00, 0x5A, 0x00, 0x03, 0xA9, 0x04, 0x00, 0x5A, - 0x00, 0x00, 0x4B, 0x00, 0x00, 0xC5, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x4D, - 0x04, 0x00, 0x6F, 0x40, 0x05, 0xD0, 0x40, 0x05, 0xD1, 0x40, 0x05, 0xD2, - 0x40, 0x05, 0xD3, 0x04, 0x00, 0x69, 0xC0, 0x00, 0x46, 0x80, 0x00, 0x41, - 0x00, 0x00, 0x58, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xB3, 0x04, 0x03, 0x93, - 0x04, 0x03, 0xA0, 0x04, 0x22, 0x11, 0x04, 0x00, 0x44, 0x04, 0x00, 0x64, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0xBC, 0x00, 0x31, - 0x80, 0x20, 0x44, 0x00, 0x00, 0x37, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, - 0x00, 0x00, 0x39, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x80, 0x00, 0x31, - 0x00, 0x00, 0x30, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x33, - 0xBC, 0x00, 0x32, 0x80, 0x20, 0x44, 0x00, 0x00, 0x33, 0xBC, 0x00, 0x31, - 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, 0xBC, 0x00, 0x32, 0x80, 0x20, 0x44, - 0x00, 0x00, 0x35, 0xBC, 0x00, 0x33, 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, - 0xBC, 0x00, 0x34, 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, 0xBC, 0x00, 0x31, - 0x80, 0x20, 0x44, 0x00, 0x00, 0x36, 0xBC, 0x00, 0x35, 0x80, 0x20, 0x44, - 0x00, 0x00, 0x36, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, - 0xBC, 0x00, 0x33, 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, 0xBC, 0x00, 0x35, - 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, 0xBC, 0x00, 0x37, 0x80, 0x20, 0x44, - 0x00, 0x00, 0x38, 0xBC, 0x00, 0x31, 0x00, 0x20, 0x44, 0x40, 0x00, 0x49, - 0xC0, 0x00, 0x49, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x49, 0x80, 0x00, 0x49, - 0x00, 0x00, 0x49, 0xC0, 0x00, 0x49, 0x00, 0x00, 0x56, 0x40, 0x00, 0x56, - 0xC0, 0x00, 0x56, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x56, 0x80, 0x00, 0x49, - 0x00, 0x00, 0x49, 0xC0, 0x00, 0x56, 0x80, 0x00, 0x49, 0x80, 0x00, 0x49, - 0x00, 0x00, 0x49, 0xC0, 0x00, 0x49, 0x00, 0x00, 0x58, 0x40, 0x00, 0x58, - 0xC0, 0x00, 0x58, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x58, 0x80, 0x00, 0x49, - 0x00, 0x00, 0x49, 0x40, 0x00, 0x4C, 0x40, 0x00, 0x43, 0x40, 0x00, 0x44, - 0x40, 0x00, 0x4D, 0x40, 0x00, 0x69, 0xC0, 0x00, 0x69, 0x00, 0x00, 0x69, - 0xC0, 0x00, 0x69, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x69, - 0x00, 0x00, 0x76, 0x40, 0x00, 0x76, 0xC0, 0x00, 0x76, 0x00, 0x00, 0x69, - 0xC0, 0x00, 0x76, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x76, - 0x80, 0x00, 0x69, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x69, - 0x00, 0x00, 0x78, 0x40, 0x00, 0x78, 0xC0, 0x00, 0x78, 0x00, 0x00, 0x69, - 0xC0, 0x00, 0x78, 0x80, 0x00, 0x69, 0x00, 0x00, 0x69, 0x40, 0x00, 0x6C, - 0x40, 0x00, 0x63, 0x40, 0x00, 0x64, 0x40, 0x00, 0x6D, 0xBC, 0x00, 0x30, - 0x80, 0x20, 0x44, 0x00, 0x00, 0x33, 0x80, 0x21, 0x90, 0x00, 0x03, 0x38, - 0x80, 0x21, 0x92, 0x00, 0x03, 0x38, 0x80, 0x21, 0x94, 0x00, 0x03, 0x38, - 0x80, 0x21, 0xD0, 0x00, 0x03, 0x38, 0x80, 0x21, 0xD4, 0x00, 0x03, 0x38, - 0x80, 0x21, 0xD2, 0x00, 0x03, 0x38, 0x80, 0x22, 0x03, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x08, 0x00, 0x03, 0x38, 0x80, 0x22, 0x0B, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x23, 0x00, 0x03, 0x38, 0x80, 0x22, 0x25, 0x00, 0x03, 0x38, - 0xC0, 0x22, 0x2B, 0x00, 0x22, 0x2B, 0xC0, 0x22, 0x2B, 0x80, 0x22, 0x2B, - 0x00, 0x22, 0x2B, 0xC0, 0x22, 0x2E, 0x00, 0x22, 0x2E, 0xC0, 0x22, 0x2E, - 0x80, 0x22, 0x2E, 0x00, 0x22, 0x2E, 0x80, 0x22, 0x3C, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x43, 0x00, 0x03, 0x38, 0x80, 0x22, 0x45, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x48, 0x00, 0x03, 0x38, 0x80, 0x00, 0x3D, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x61, 0x00, 0x03, 0x38, 0x80, 0x22, 0x4D, 0x00, 0x03, 0x38, - 0x80, 0x00, 0x3C, 0x00, 0x03, 0x38, 0x80, 0x00, 0x3E, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x64, 0x00, 0x03, 0x38, 0x80, 0x22, 0x65, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x72, 0x00, 0x03, 0x38, 0x80, 0x22, 0x73, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x76, 0x00, 0x03, 0x38, 0x80, 0x22, 0x77, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x7A, 0x00, 0x03, 0x38, 0x80, 0x22, 0x7B, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x82, 0x00, 0x03, 0x38, 0x80, 0x22, 0x83, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x86, 0x00, 0x03, 0x38, 0x80, 0x22, 0x87, 0x00, 0x03, 0x38, - 0x80, 0x22, 0xA2, 0x00, 0x03, 0x38, 0x80, 0x22, 0xA8, 0x00, 0x03, 0x38, - 0x80, 0x22, 0xA9, 0x00, 0x03, 0x38, 0x80, 0x22, 0xAB, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x7C, 0x00, 0x03, 0x38, 0x80, 0x22, 0x7D, 0x00, 0x03, 0x38, - 0x80, 0x22, 0x91, 0x00, 0x03, 0x38, 0x80, 0x22, 0x92, 0x00, 0x03, 0x38, - 0x80, 0x22, 0xB2, 0x00, 0x03, 0x38, 0x80, 0x22, 0xB3, 0x00, 0x03, 0x38, - 0x80, 0x22, 0xB4, 0x00, 0x03, 0x38, 0x80, 0x22, 0xB5, 0x00, 0x03, 0x38, - 0x00, 0x30, 0x08, 0x00, 0x30, 0x09, 0x1C, 0x00, 0x31, 0x1C, 0x00, 0x32, - 0x1C, 0x00, 0x33, 0x1C, 0x00, 0x34, 0x1C, 0x00, 0x35, 0x1C, 0x00, 0x36, - 0x1C, 0x00, 0x37, 0x1C, 0x00, 0x38, 0x1C, 0x00, 0x39, 0x9C, 0x00, 0x31, - 0x00, 0x00, 0x30, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x31, 0x9C, 0x00, 0x31, - 0x00, 0x00, 0x32, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x31, - 0x00, 0x00, 0x34, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x35, 0x9C, 0x00, 0x31, - 0x00, 0x00, 0x36, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x31, - 0x00, 0x00, 0x38, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x32, - 0x00, 0x00, 0x30, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x32, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x33, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x34, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x35, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x36, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x37, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x38, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x39, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x33, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x36, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x37, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x32, 0x80, 0x00, 0x30, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x31, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x32, 0x00, 0x00, 0x2E, - 0xC0, 0x00, 0x33, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x34, 0x00, 0x00, 0x2E, - 0xC0, 0x00, 0x35, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x36, 0x00, 0x00, 0x2E, - 0xC0, 0x00, 0x37, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x38, 0x00, 0x00, 0x2E, - 0xC0, 0x00, 0x39, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, - 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x00, 0x2E, - 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, - 0x80, 0x00, 0x33, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x34, - 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x00, 0x2E, - 0xC0, 0x00, 0x31, 0x80, 0x00, 0x36, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, - 0x80, 0x00, 0x37, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x38, - 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x00, 0x2E, - 0xC0, 0x00, 0x32, 0x80, 0x00, 0x30, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x62, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x63, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x64, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x65, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x66, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x67, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x68, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x69, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6A, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6B, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x6D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6E, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6F, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x70, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x71, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x72, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x73, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x74, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x75, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x76, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x77, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x78, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x79, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x7A, - 0x00, 0x00, 0x29, 0x1C, 0x00, 0x41, 0x1C, 0x00, 0x42, 0x1C, 0x00, 0x43, - 0x1C, 0x00, 0x44, 0x1C, 0x00, 0x45, 0x1C, 0x00, 0x46, 0x1C, 0x00, 0x47, - 0x1C, 0x00, 0x48, 0x1C, 0x00, 0x49, 0x1C, 0x00, 0x4A, 0x1C, 0x00, 0x4B, - 0x1C, 0x00, 0x4C, 0x1C, 0x00, 0x4D, 0x1C, 0x00, 0x4E, 0x1C, 0x00, 0x4F, - 0x1C, 0x00, 0x50, 0x1C, 0x00, 0x51, 0x1C, 0x00, 0x52, 0x1C, 0x00, 0x53, - 0x1C, 0x00, 0x54, 0x1C, 0x00, 0x55, 0x1C, 0x00, 0x56, 0x1C, 0x00, 0x57, - 0x1C, 0x00, 0x58, 0x1C, 0x00, 0x59, 0x1C, 0x00, 0x5A, 0x1C, 0x00, 0x61, - 0x1C, 0x00, 0x62, 0x1C, 0x00, 0x63, 0x1C, 0x00, 0x64, 0x1C, 0x00, 0x65, - 0x1C, 0x00, 0x66, 0x1C, 0x00, 0x67, 0x1C, 0x00, 0x68, 0x1C, 0x00, 0x69, - 0x1C, 0x00, 0x6A, 0x1C, 0x00, 0x6B, 0x1C, 0x00, 0x6C, 0x1C, 0x00, 0x6D, - 0x1C, 0x00, 0x6E, 0x1C, 0x00, 0x6F, 0x1C, 0x00, 0x70, 0x1C, 0x00, 0x71, - 0x1C, 0x00, 0x72, 0x1C, 0x00, 0x73, 0x1C, 0x00, 0x74, 0x1C, 0x00, 0x75, - 0x1C, 0x00, 0x76, 0x1C, 0x00, 0x77, 0x1C, 0x00, 0x78, 0x1C, 0x00, 0x79, - 0x1C, 0x00, 0x7A, 0x1C, 0x00, 0x30, 0xC0, 0x22, 0x2B, 0x80, 0x22, 0x2B, - 0x80, 0x22, 0x2B, 0x00, 0x22, 0x2B, 0xC0, 0x00, 0x3A, 0x80, 0x00, 0x3A, - 0x00, 0x00, 0x3D, 0xC0, 0x00, 0x3D, 0x00, 0x00, 0x3D, 0xC0, 0x00, 0x3D, - 0x80, 0x00, 0x3D, 0x00, 0x00, 0x3D, 0x80, 0x2A, 0xDD, 0x00, 0x03, 0x38, - 0x24, 0x00, 0x6A, 0x20, 0x00, 0x56, 0x20, 0x2D, 0x61, 0x40, 0x6B, 0xCD, - 0x40, 0x9F, 0x9F, 0x40, 0x4E, 0x00, 0x40, 0x4E, 0x28, 0x40, 0x4E, 0x36, - 0x40, 0x4E, 0x3F, 0x40, 0x4E, 0x59, 0x40, 0x4E, 0x85, 0x40, 0x4E, 0x8C, - 0x40, 0x4E, 0xA0, 0x40, 0x4E, 0xBA, 0x40, 0x51, 0x3F, 0x40, 0x51, 0x65, - 0x40, 0x51, 0x6B, 0x40, 0x51, 0x82, 0x40, 0x51, 0x96, 0x40, 0x51, 0xAB, - 0x40, 0x51, 0xE0, 0x40, 0x51, 0xF5, 0x40, 0x52, 0x00, 0x40, 0x52, 0x9B, - 0x40, 0x52, 0xF9, 0x40, 0x53, 0x15, 0x40, 0x53, 0x1A, 0x40, 0x53, 0x38, - 0x40, 0x53, 0x41, 0x40, 0x53, 0x5C, 0x40, 0x53, 0x69, 0x40, 0x53, 0x82, - 0x40, 0x53, 0xB6, 0x40, 0x53, 0xC8, 0x40, 0x53, 0xE3, 0x40, 0x56, 0xD7, - 0x40, 0x57, 0x1F, 0x40, 0x58, 0xEB, 0x40, 0x59, 0x02, 0x40, 0x59, 0x0A, - 0x40, 0x59, 0x15, 0x40, 0x59, 0x27, 0x40, 0x59, 0x73, 0x40, 0x5B, 0x50, - 0x40, 0x5B, 0x80, 0x40, 0x5B, 0xF8, 0x40, 0x5C, 0x0F, 0x40, 0x5C, 0x22, - 0x40, 0x5C, 0x38, 0x40, 0x5C, 0x6E, 0x40, 0x5C, 0x71, 0x40, 0x5D, 0xDB, - 0x40, 0x5D, 0xE5, 0x40, 0x5D, 0xF1, 0x40, 0x5D, 0xFE, 0x40, 0x5E, 0x72, - 0x40, 0x5E, 0x7A, 0x40, 0x5E, 0x7F, 0x40, 0x5E, 0xF4, 0x40, 0x5E, 0xFE, - 0x40, 0x5F, 0x0B, 0x40, 0x5F, 0x13, 0x40, 0x5F, 0x50, 0x40, 0x5F, 0x61, - 0x40, 0x5F, 0x73, 0x40, 0x5F, 0xC3, 0x40, 0x62, 0x08, 0x40, 0x62, 0x36, - 0x40, 0x62, 0x4B, 0x40, 0x65, 0x2F, 0x40, 0x65, 0x34, 0x40, 0x65, 0x87, - 0x40, 0x65, 0x97, 0x40, 0x65, 0xA4, 0x40, 0x65, 0xB9, 0x40, 0x65, 0xE0, - 0x40, 0x65, 0xE5, 0x40, 0x66, 0xF0, 0x40, 0x67, 0x08, 0x40, 0x67, 0x28, - 0x40, 0x6B, 0x20, 0x40, 0x6B, 0x62, 0x40, 0x6B, 0x79, 0x40, 0x6B, 0xB3, - 0x40, 0x6B, 0xCB, 0x40, 0x6B, 0xD4, 0x40, 0x6B, 0xDB, 0x40, 0x6C, 0x0F, - 0x40, 0x6C, 0x14, 0x40, 0x6C, 0x34, 0x40, 0x70, 0x6B, 0x40, 0x72, 0x2A, - 0x40, 0x72, 0x36, 0x40, 0x72, 0x3B, 0x40, 0x72, 0x3F, 0x40, 0x72, 0x47, - 0x40, 0x72, 0x59, 0x40, 0x72, 0x5B, 0x40, 0x72, 0xAC, 0x40, 0x73, 0x84, - 0x40, 0x73, 0x89, 0x40, 0x74, 0xDC, 0x40, 0x74, 0xE6, 0x40, 0x75, 0x18, - 0x40, 0x75, 0x1F, 0x40, 0x75, 0x28, 0x40, 0x75, 0x30, 0x40, 0x75, 0x8B, - 0x40, 0x75, 0x92, 0x40, 0x76, 0x76, 0x40, 0x76, 0x7D, 0x40, 0x76, 0xAE, - 0x40, 0x76, 0xBF, 0x40, 0x76, 0xEE, 0x40, 0x77, 0xDB, 0x40, 0x77, 0xE2, - 0x40, 0x77, 0xF3, 0x40, 0x79, 0x3A, 0x40, 0x79, 0xB8, 0x40, 0x79, 0xBE, - 0x40, 0x7A, 0x74, 0x40, 0x7A, 0xCB, 0x40, 0x7A, 0xF9, 0x40, 0x7C, 0x73, - 0x40, 0x7C, 0xF8, 0x40, 0x7F, 0x36, 0x40, 0x7F, 0x51, 0x40, 0x7F, 0x8A, - 0x40, 0x7F, 0xBD, 0x40, 0x80, 0x01, 0x40, 0x80, 0x0C, 0x40, 0x80, 0x12, - 0x40, 0x80, 0x33, 0x40, 0x80, 0x7F, 0x40, 0x80, 0x89, 0x40, 0x81, 0xE3, - 0x40, 0x81, 0xEA, 0x40, 0x81, 0xF3, 0x40, 0x81, 0xFC, 0x40, 0x82, 0x0C, - 0x40, 0x82, 0x1B, 0x40, 0x82, 0x1F, 0x40, 0x82, 0x6E, 0x40, 0x82, 0x72, - 0x40, 0x82, 0x78, 0x40, 0x86, 0x4D, 0x40, 0x86, 0x6B, 0x40, 0x88, 0x40, - 0x40, 0x88, 0x4C, 0x40, 0x88, 0x63, 0x40, 0x89, 0x7E, 0x40, 0x89, 0x8B, - 0x40, 0x89, 0xD2, 0x40, 0x8A, 0x00, 0x40, 0x8C, 0x37, 0x40, 0x8C, 0x46, - 0x40, 0x8C, 0x55, 0x40, 0x8C, 0x78, 0x40, 0x8C, 0x9D, 0x40, 0x8D, 0x64, - 0x40, 0x8D, 0x70, 0x40, 0x8D, 0xB3, 0x40, 0x8E, 0xAB, 0x40, 0x8E, 0xCA, - 0x40, 0x8F, 0x9B, 0x40, 0x8F, 0xB0, 0x40, 0x8F, 0xB5, 0x40, 0x90, 0x91, - 0x40, 0x91, 0x49, 0x40, 0x91, 0xC6, 0x40, 0x91, 0xCC, 0x40, 0x91, 0xD1, - 0x40, 0x95, 0x77, 0x40, 0x95, 0x80, 0x40, 0x96, 0x1C, 0x40, 0x96, 0xB6, - 0x40, 0x96, 0xB9, 0x40, 0x96, 0xE8, 0x40, 0x97, 0x51, 0x40, 0x97, 0x5E, - 0x40, 0x97, 0x62, 0x40, 0x97, 0x69, 0x40, 0x97, 0xCB, 0x40, 0x97, 0xED, - 0x40, 0x97, 0xF3, 0x40, 0x98, 0x01, 0x40, 0x98, 0xA8, 0x40, 0x98, 0xDB, - 0x40, 0x98, 0xDF, 0x40, 0x99, 0x96, 0x40, 0x99, 0x99, 0x40, 0x99, 0xAC, - 0x40, 0x9A, 0xA8, 0x40, 0x9A, 0xD8, 0x40, 0x9A, 0xDF, 0x40, 0x9B, 0x25, - 0x40, 0x9B, 0x2F, 0x40, 0x9B, 0x32, 0x40, 0x9B, 0x3C, 0x40, 0x9B, 0x5A, - 0x40, 0x9C, 0xE5, 0x40, 0x9E, 0x75, 0x40, 0x9E, 0x7F, 0x40, 0x9E, 0xA5, - 0x40, 0x9E, 0xBB, 0x40, 0x9E, 0xC3, 0x40, 0x9E, 0xCD, 0x40, 0x9E, 0xD1, - 0x40, 0x9E, 0xF9, 0x40, 0x9E, 0xFD, 0x40, 0x9F, 0x0E, 0x40, 0x9F, 0x13, - 0x40, 0x9F, 0x20, 0x40, 0x9F, 0x3B, 0x40, 0x9F, 0x4A, 0x40, 0x9F, 0x52, - 0x40, 0x9F, 0x8D, 0x40, 0x9F, 0x9C, 0x40, 0x9F, 0xA0, 0x2C, 0x00, 0x20, - 0x40, 0x30, 0x12, 0x40, 0x53, 0x41, 0x40, 0x53, 0x44, 0x40, 0x53, 0x45, - 0x80, 0x30, 0x4B, 0x00, 0x30, 0x99, 0x80, 0x30, 0x4D, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x4F, 0x00, 0x30, 0x99, 0x80, 0x30, 0x51, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x53, 0x00, 0x30, 0x99, 0x80, 0x30, 0x55, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x57, 0x00, 0x30, 0x99, 0x80, 0x30, 0x59, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x5B, 0x00, 0x30, 0x99, 0x80, 0x30, 0x5D, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x5F, 0x00, 0x30, 0x99, 0x80, 0x30, 0x61, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x64, 0x00, 0x30, 0x99, 0x80, 0x30, 0x66, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x68, 0x00, 0x30, 0x99, 0x80, 0x30, 0x6F, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x6F, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x72, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x72, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x75, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x75, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x78, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x78, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x7B, 0x00, 0x30, 0x99, - 0x80, 0x30, 0x7B, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x46, 0x00, 0x30, 0x99, - 0xC0, 0x00, 0x20, 0x00, 0x30, 0x99, 0xC0, 0x00, 0x20, 0x00, 0x30, 0x9A, - 0x80, 0x30, 0x9D, 0x00, 0x30, 0x99, 0xA8, 0x30, 0x88, 0x00, 0x30, 0x8A, - 0x80, 0x30, 0xAB, 0x00, 0x30, 0x99, 0x80, 0x30, 0xAD, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xAF, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB1, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xB3, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB5, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xB7, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB9, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xBB, 0x00, 0x30, 0x99, 0x80, 0x30, 0xBD, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xBF, 0x00, 0x30, 0x99, 0x80, 0x30, 0xC1, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xC4, 0x00, 0x30, 0x99, 0x80, 0x30, 0xC6, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xC8, 0x00, 0x30, 0x99, 0x80, 0x30, 0xCF, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xCF, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD2, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xD2, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD5, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xD5, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD8, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xD8, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xDB, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xDB, 0x00, 0x30, 0x9A, 0x80, 0x30, 0xA6, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xEF, 0x00, 0x30, 0x99, 0x80, 0x30, 0xF0, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xF1, 0x00, 0x30, 0x99, 0x80, 0x30, 0xF2, 0x00, 0x30, 0x99, - 0x80, 0x30, 0xFD, 0x00, 0x30, 0x99, 0xA8, 0x30, 0xB3, 0x00, 0x30, 0xC8, - 0x40, 0x11, 0x00, 0x40, 0x11, 0x01, 0x40, 0x11, 0xAA, 0x40, 0x11, 0x02, - 0x40, 0x11, 0xAC, 0x40, 0x11, 0xAD, 0x40, 0x11, 0x03, 0x40, 0x11, 0x04, - 0x40, 0x11, 0x05, 0x40, 0x11, 0xB0, 0x40, 0x11, 0xB1, 0x40, 0x11, 0xB2, - 0x40, 0x11, 0xB3, 0x40, 0x11, 0xB4, 0x40, 0x11, 0xB5, 0x40, 0x11, 0x1A, - 0x40, 0x11, 0x06, 0x40, 0x11, 0x07, 0x40, 0x11, 0x08, 0x40, 0x11, 0x21, - 0x40, 0x11, 0x09, 0x40, 0x11, 0x0A, 0x40, 0x11, 0x0B, 0x40, 0x11, 0x0C, - 0x40, 0x11, 0x0D, 0x40, 0x11, 0x0E, 0x40, 0x11, 0x0F, 0x40, 0x11, 0x10, - 0x40, 0x11, 0x11, 0x40, 0x11, 0x12, 0x40, 0x11, 0x61, 0x40, 0x11, 0x62, - 0x40, 0x11, 0x63, 0x40, 0x11, 0x64, 0x40, 0x11, 0x65, 0x40, 0x11, 0x66, - 0x40, 0x11, 0x67, 0x40, 0x11, 0x68, 0x40, 0x11, 0x69, 0x40, 0x11, 0x6A, - 0x40, 0x11, 0x6B, 0x40, 0x11, 0x6C, 0x40, 0x11, 0x6D, 0x40, 0x11, 0x6E, - 0x40, 0x11, 0x6F, 0x40, 0x11, 0x70, 0x40, 0x11, 0x71, 0x40, 0x11, 0x72, - 0x40, 0x11, 0x73, 0x40, 0x11, 0x74, 0x40, 0x11, 0x75, 0x40, 0x11, 0x60, - 0x40, 0x11, 0x14, 0x40, 0x11, 0x15, 0x40, 0x11, 0xC7, 0x40, 0x11, 0xC8, - 0x40, 0x11, 0xCC, 0x40, 0x11, 0xCE, 0x40, 0x11, 0xD3, 0x40, 0x11, 0xD7, - 0x40, 0x11, 0xD9, 0x40, 0x11, 0x1C, 0x40, 0x11, 0xDD, 0x40, 0x11, 0xDF, - 0x40, 0x11, 0x1D, 0x40, 0x11, 0x1E, 0x40, 0x11, 0x20, 0x40, 0x11, 0x22, - 0x40, 0x11, 0x23, 0x40, 0x11, 0x27, 0x40, 0x11, 0x29, 0x40, 0x11, 0x2B, - 0x40, 0x11, 0x2C, 0x40, 0x11, 0x2D, 0x40, 0x11, 0x2E, 0x40, 0x11, 0x2F, - 0x40, 0x11, 0x32, 0x40, 0x11, 0x36, 0x40, 0x11, 0x40, 0x40, 0x11, 0x47, - 0x40, 0x11, 0x4C, 0x40, 0x11, 0xF1, 0x40, 0x11, 0xF2, 0x40, 0x11, 0x57, - 0x40, 0x11, 0x58, 0x40, 0x11, 0x59, 0x40, 0x11, 0x84, 0x40, 0x11, 0x85, - 0x40, 0x11, 0x88, 0x40, 0x11, 0x91, 0x40, 0x11, 0x92, 0x40, 0x11, 0x94, - 0x40, 0x11, 0x9E, 0x40, 0x11, 0xA1, 0x20, 0x4E, 0x00, 0x20, 0x4E, 0x8C, - 0x20, 0x4E, 0x09, 0x20, 0x56, 0xDB, 0x20, 0x4E, 0x0A, 0x20, 0x4E, 0x2D, - 0x20, 0x4E, 0x0B, 0x20, 0x75, 0x32, 0x20, 0x4E, 0x59, 0x20, 0x4E, 0x19, - 0x20, 0x4E, 0x01, 0x20, 0x59, 0x29, 0x20, 0x57, 0x30, 0x20, 0x4E, 0xBA, - 0xC0, 0x00, 0x28, 0x80, 0x11, 0x00, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x11, 0x02, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x03, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x05, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x11, 0x06, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x11, 0x07, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x09, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x11, 0x0E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0F, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x10, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x11, 0x11, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x11, 0x12, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x00, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x02, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x03, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x05, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x06, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x07, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x09, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0C, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0E, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0F, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x10, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x11, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x12, - 0x80, 0x11, 0x61, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0C, - 0x80, 0x11, 0x6E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, - 0x80, 0x11, 0x69, 0x80, 0x11, 0x0C, 0x80, 0x11, 0x65, 0x80, 0x11, 0xAB, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x80, 0x11, 0x69, - 0x80, 0x11, 0x12, 0x80, 0x11, 0x6E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x4E, 0x00, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x8C, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x09, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x56, 0xDB, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x4E, 0x94, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x51, 0x6D, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x03, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x51, 0x6B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x4E, 0x5D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x53, 0x41, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x67, 0x08, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x70, 0x6B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x6C, 0x34, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x67, 0x28, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x91, 0xD1, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x57, 0x1F, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x65, 0xE5, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x68, 0x2A, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x67, 0x09, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x79, 0x3E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x54, 0x0D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x72, 0x79, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x8C, 0xA1, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x79, 0x5D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x52, 0xB4, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0xE3, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x54, 0x7C, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x5B, 0x66, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x76, 0xE3, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4F, 0x01, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x8C, 0xC7, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x53, 0x54, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x79, 0x6D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4F, 0x11, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x81, 0xEA, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x81, 0xF3, 0x00, 0x00, 0x29, 0x1C, 0x55, 0x4F, - 0x1C, 0x5E, 0x7C, 0x1C, 0x65, 0x87, 0x1C, 0x7B, 0x8F, 0xB8, 0x00, 0x50, - 0x80, 0x00, 0x54, 0x00, 0x00, 0x45, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x31, - 0x9C, 0x00, 0x32, 0x00, 0x00, 0x32, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x33, - 0x9C, 0x00, 0x32, 0x00, 0x00, 0x34, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x35, - 0x9C, 0x00, 0x32, 0x00, 0x00, 0x36, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x37, - 0x9C, 0x00, 0x32, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x39, - 0x9C, 0x00, 0x33, 0x00, 0x00, 0x30, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x31, - 0x9C, 0x00, 0x33, 0x00, 0x00, 0x32, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x33, - 0x9C, 0x00, 0x33, 0x00, 0x00, 0x34, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x35, - 0x1C, 0x11, 0x00, 0x1C, 0x11, 0x02, 0x1C, 0x11, 0x03, 0x1C, 0x11, 0x05, - 0x1C, 0x11, 0x06, 0x1C, 0x11, 0x07, 0x1C, 0x11, 0x09, 0x1C, 0x11, 0x0B, - 0x1C, 0x11, 0x0C, 0x1C, 0x11, 0x0E, 0x1C, 0x11, 0x0F, 0x1C, 0x11, 0x10, - 0x1C, 0x11, 0x11, 0x1C, 0x11, 0x12, 0x9C, 0x11, 0x00, 0x00, 0x11, 0x61, - 0x9C, 0x11, 0x02, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x03, 0x00, 0x11, 0x61, - 0x9C, 0x11, 0x05, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x06, 0x00, 0x11, 0x61, - 0x9C, 0x11, 0x07, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x09, 0x00, 0x11, 0x61, - 0x9C, 0x11, 0x0B, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0C, 0x00, 0x11, 0x61, - 0x9C, 0x11, 0x0E, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0F, 0x00, 0x11, 0x61, - 0x9C, 0x11, 0x10, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x11, 0x00, 0x11, 0x61, - 0x9C, 0x11, 0x12, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0E, 0x80, 0x11, 0x61, - 0x80, 0x11, 0xB7, 0x80, 0x11, 0x00, 0x00, 0x11, 0x69, 0x9C, 0x11, 0x0C, - 0x80, 0x11, 0x6E, 0x80, 0x11, 0x0B, 0x00, 0x11, 0x74, 0x9C, 0x11, 0x0B, - 0x00, 0x11, 0x6E, 0x1C, 0x4E, 0x00, 0x1C, 0x4E, 0x8C, 0x1C, 0x4E, 0x09, - 0x1C, 0x56, 0xDB, 0x1C, 0x4E, 0x94, 0x1C, 0x51, 0x6D, 0x1C, 0x4E, 0x03, - 0x1C, 0x51, 0x6B, 0x1C, 0x4E, 0x5D, 0x1C, 0x53, 0x41, 0x1C, 0x67, 0x08, - 0x1C, 0x70, 0x6B, 0x1C, 0x6C, 0x34, 0x1C, 0x67, 0x28, 0x1C, 0x91, 0xD1, - 0x1C, 0x57, 0x1F, 0x1C, 0x65, 0xE5, 0x1C, 0x68, 0x2A, 0x1C, 0x67, 0x09, - 0x1C, 0x79, 0x3E, 0x1C, 0x54, 0x0D, 0x1C, 0x72, 0x79, 0x1C, 0x8C, 0xA1, - 0x1C, 0x79, 0x5D, 0x1C, 0x52, 0xB4, 0x1C, 0x79, 0xD8, 0x1C, 0x75, 0x37, - 0x1C, 0x59, 0x73, 0x1C, 0x90, 0x69, 0x1C, 0x51, 0x2A, 0x1C, 0x53, 0x70, - 0x1C, 0x6C, 0xE8, 0x1C, 0x98, 0x05, 0x1C, 0x4F, 0x11, 0x1C, 0x51, 0x99, - 0x1C, 0x6B, 0x63, 0x1C, 0x4E, 0x0A, 0x1C, 0x4E, 0x2D, 0x1C, 0x4E, 0x0B, - 0x1C, 0x5D, 0xE6, 0x1C, 0x53, 0xF3, 0x1C, 0x53, 0x3B, 0x1C, 0x5B, 0x97, - 0x1C, 0x5B, 0x66, 0x1C, 0x76, 0xE3, 0x1C, 0x4F, 0x01, 0x1C, 0x8C, 0xC7, - 0x1C, 0x53, 0x54, 0x1C, 0x59, 0x1C, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x36, - 0x9C, 0x00, 0x33, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x38, - 0x9C, 0x00, 0x33, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x30, - 0x9C, 0x00, 0x34, 0x00, 0x00, 0x31, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x32, - 0x9C, 0x00, 0x34, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x34, - 0x9C, 0x00, 0x34, 0x00, 0x00, 0x35, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x36, - 0x9C, 0x00, 0x34, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x38, - 0x9C, 0x00, 0x34, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x35, 0x00, 0x00, 0x30, - 0xC0, 0x00, 0x31, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x32, 0x00, 0x67, 0x08, - 0xC0, 0x00, 0x33, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x34, 0x00, 0x67, 0x08, - 0xC0, 0x00, 0x35, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x36, 0x00, 0x67, 0x08, - 0xC0, 0x00, 0x37, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x38, 0x00, 0x67, 0x08, - 0xC0, 0x00, 0x39, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, - 0x00, 0x67, 0x08, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x67, 0x08, - 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x67, 0x08, 0xB8, 0x00, 0x48, - 0x00, 0x00, 0x67, 0xB8, 0x00, 0x65, 0x80, 0x00, 0x72, 0x00, 0x00, 0x67, - 0xB8, 0x00, 0x65, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x4C, 0x80, 0x00, 0x54, - 0x00, 0x00, 0x44, 0x1C, 0x30, 0xA2, 0x1C, 0x30, 0xA4, 0x1C, 0x30, 0xA6, - 0x1C, 0x30, 0xA8, 0x1C, 0x30, 0xAA, 0x1C, 0x30, 0xAB, 0x1C, 0x30, 0xAD, - 0x1C, 0x30, 0xAF, 0x1C, 0x30, 0xB1, 0x1C, 0x30, 0xB3, 0x1C, 0x30, 0xB5, - 0x1C, 0x30, 0xB7, 0x1C, 0x30, 0xB9, 0x1C, 0x30, 0xBB, 0x1C, 0x30, 0xBD, - 0x1C, 0x30, 0xBF, 0x1C, 0x30, 0xC1, 0x1C, 0x30, 0xC4, 0x1C, 0x30, 0xC6, - 0x1C, 0x30, 0xC8, 0x1C, 0x30, 0xCA, 0x1C, 0x30, 0xCB, 0x1C, 0x30, 0xCC, - 0x1C, 0x30, 0xCD, 0x1C, 0x30, 0xCE, 0x1C, 0x30, 0xCF, 0x1C, 0x30, 0xD2, - 0x1C, 0x30, 0xD5, 0x1C, 0x30, 0xD8, 0x1C, 0x30, 0xDB, 0x1C, 0x30, 0xDE, - 0x1C, 0x30, 0xDF, 0x1C, 0x30, 0xE0, 0x1C, 0x30, 0xE1, 0x1C, 0x30, 0xE2, - 0x1C, 0x30, 0xE4, 0x1C, 0x30, 0xE6, 0x1C, 0x30, 0xE8, 0x1C, 0x30, 0xE9, - 0x1C, 0x30, 0xEA, 0x1C, 0x30, 0xEB, 0x1C, 0x30, 0xEC, 0x1C, 0x30, 0xED, - 0x1C, 0x30, 0xEF, 0x1C, 0x30, 0xF0, 0x1C, 0x30, 0xF1, 0x1C, 0x30, 0xF2, - 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xD1, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC8, - 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xEB, 0x80, 0x30, 0xD5, 0x00, 0x30, 0xA1, - 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xF3, 0x80, 0x30, 0xDA, 0x00, 0x30, 0xA2, - 0xB8, 0x30, 0xA2, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xA4, - 0x80, 0x30, 0xCB, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB0, 0xB8, 0x30, 0xA4, - 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC1, 0xB8, 0x30, 0xA6, 0x80, 0x30, 0xA9, - 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xA8, 0x80, 0x30, 0xB9, 0x80, 0x30, 0xAF, - 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xA8, 0x80, 0x30, 0xFC, - 0x80, 0x30, 0xAB, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAA, 0x80, 0x30, 0xF3, - 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xAA, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xE0, - 0xB8, 0x30, 0xAB, 0x80, 0x30, 0xA4, 0x00, 0x30, 0xEA, 0xB8, 0x30, 0xAB, - 0x80, 0x30, 0xE9, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xAB, - 0x80, 0x30, 0xED, 0x80, 0x30, 0xEA, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAC, - 0x80, 0x30, 0xED, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xAC, 0x80, 0x30, 0xF3, - 0x00, 0x30, 0xDE, 0xB8, 0x30, 0xAE, 0x00, 0x30, 0xAC, 0xB8, 0x30, 0xAE, - 0x80, 0x30, 0xCB, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xE5, - 0x80, 0x30, 0xEA, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAE, 0x80, 0x30, 0xEB, - 0x80, 0x30, 0xC0, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAD, 0x00, 0x30, 0xED, - 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xED, 0x80, 0x30, 0xB0, 0x80, 0x30, 0xE9, - 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xED, 0x80, 0x30, 0xE1, - 0x80, 0x30, 0xFC, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xAD, - 0x80, 0x30, 0xED, 0x80, 0x30, 0xEF, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, - 0xB8, 0x30, 0xB0, 0x80, 0x30, 0xE9, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xB0, - 0x80, 0x30, 0xE9, 0x80, 0x30, 0xE0, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xF3, - 0xB8, 0x30, 0xAF, 0x80, 0x30, 0xEB, 0x80, 0x30, 0xBC, 0x80, 0x30, 0xA4, - 0x00, 0x30, 0xED, 0xB8, 0x30, 0xAF, 0x80, 0x30, 0xED, 0x80, 0x30, 0xFC, - 0x00, 0x30, 0xCD, 0xB8, 0x30, 0xB1, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xB9, - 0xB8, 0x30, 0xB3, 0x80, 0x30, 0xEB, 0x00, 0x30, 0xCA, 0xB8, 0x30, 0xB3, - 0x80, 0x30, 0xFC, 0x00, 0x30, 0xDD, 0xB8, 0x30, 0xB5, 0x80, 0x30, 0xA4, - 0x80, 0x30, 0xAF, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xB5, 0x80, 0x30, 0xF3, - 0x80, 0x30, 0xC1, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xB7, - 0x80, 0x30, 0xEA, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB0, 0xB8, 0x30, 0xBB, - 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC1, 0xB8, 0x30, 0xBB, 0x80, 0x30, 0xF3, - 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xC0, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xB9, - 0xB8, 0x30, 0xC7, 0x00, 0x30, 0xB7, 0xB8, 0x30, 0xC9, 0x00, 0x30, 0xEB, - 0xB8, 0x30, 0xC8, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xCA, 0x00, 0x30, 0xCE, - 0xB8, 0x30, 0xCE, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xCF, - 0x80, 0x30, 0xA4, 0x00, 0x30, 0xC4, 0xB8, 0x30, 0xD1, 0x80, 0x30, 0xFC, - 0x80, 0x30, 0xBB, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xD1, - 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC4, 0xB8, 0x30, 0xD0, 0x80, 0x30, 0xFC, - 0x80, 0x30, 0xEC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD4, 0x80, 0x30, 0xA2, - 0x80, 0x30, 0xB9, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD4, - 0x80, 0x30, 0xAF, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD4, 0x00, 0x30, 0xB3, - 0xB8, 0x30, 0xD3, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD5, 0x80, 0x30, 0xA1, - 0x80, 0x30, 0xE9, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xD5, - 0x80, 0x30, 0xA3, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xD6, - 0x80, 0x30, 0xC3, 0x80, 0x30, 0xB7, 0x80, 0x30, 0xA7, 0x00, 0x30, 0xEB, - 0xB8, 0x30, 0xD5, 0x80, 0x30, 0xE9, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xD8, - 0x80, 0x30, 0xAF, 0x80, 0x30, 0xBF, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, - 0xB8, 0x30, 0xDA, 0x00, 0x30, 0xBD, 0xB8, 0x30, 0xDA, 0x80, 0x30, 0xCB, - 0x00, 0x30, 0xD2, 0xB8, 0x30, 0xD8, 0x80, 0x30, 0xEB, 0x00, 0x30, 0xC4, - 0xB8, 0x30, 0xDA, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xDA, - 0x80, 0x30, 0xFC, 0x00, 0x30, 0xB8, 0xB8, 0x30, 0xD9, 0x80, 0x30, 0xFC, - 0x00, 0x30, 0xBF, 0xB8, 0x30, 0xDD, 0x80, 0x30, 0xA4, 0x80, 0x30, 0xF3, - 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xDC, 0x80, 0x30, 0xEB, 0x00, 0x30, 0xC8, - 0xB8, 0x30, 0xDB, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDD, 0x80, 0x30, 0xF3, - 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xDB, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, - 0xB8, 0x30, 0xDB, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDE, - 0x80, 0x30, 0xA4, 0x80, 0x30, 0xAF, 0x00, 0x30, 0xED, 0xB8, 0x30, 0xDE, - 0x80, 0x30, 0xA4, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xC3, - 0x00, 0x30, 0xCF, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xEB, 0x00, 0x30, 0xAF, - 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xF3, 0x80, 0x30, 0xB7, 0x80, 0x30, 0xE7, - 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDF, 0x80, 0x30, 0xAF, 0x80, 0x30, 0xED, - 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDF, 0x00, 0x30, 0xEA, 0xB8, 0x30, 0xDF, - 0x80, 0x30, 0xEA, 0x80, 0x30, 0xD0, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, - 0xB8, 0x30, 0xE1, 0x00, 0x30, 0xAC, 0xB8, 0x30, 0xE1, 0x80, 0x30, 0xAC, - 0x80, 0x30, 0xC8, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xE1, 0x80, 0x30, 0xFC, - 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xE4, 0x80, 0x30, 0xFC, - 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xE4, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, - 0xB8, 0x30, 0xE6, 0x80, 0x30, 0xA2, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xEA, - 0x80, 0x30, 0xC3, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xEA, - 0x00, 0x30, 0xE9, 0xB8, 0x30, 0xEB, 0x80, 0x30, 0xD4, 0x00, 0x30, 0xFC, - 0xB8, 0x30, 0xEB, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xD6, 0x00, 0x30, 0xEB, - 0xB8, 0x30, 0xEC, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xEC, 0x80, 0x30, 0xF3, - 0x80, 0x30, 0xC8, 0x80, 0x30, 0xB2, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xEF, - 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, 0xC0, 0x00, 0x30, 0x00, 0x70, 0xB9, - 0xC0, 0x00, 0x31, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x00, 0x70, 0xB9, - 0xC0, 0x00, 0x33, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x34, 0x00, 0x70, 0xB9, - 0xC0, 0x00, 0x35, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x36, 0x00, 0x70, 0xB9, - 0xC0, 0x00, 0x37, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x38, 0x00, 0x70, 0xB9, - 0xC0, 0x00, 0x39, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, - 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x70, 0xB9, - 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, - 0x80, 0x00, 0x33, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x34, - 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x70, 0xB9, - 0xC0, 0x00, 0x31, 0x80, 0x00, 0x36, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, - 0x80, 0x00, 0x37, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x38, - 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x70, 0xB9, - 0xC0, 0x00, 0x32, 0x80, 0x00, 0x30, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, - 0x80, 0x00, 0x31, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x32, - 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x33, 0x00, 0x70, 0xB9, - 0xC0, 0x00, 0x32, 0x80, 0x00, 0x34, 0x00, 0x70, 0xB9, 0xB8, 0x00, 0x68, - 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x64, 0x00, 0x00, 0x61, - 0xB8, 0x00, 0x41, 0x00, 0x00, 0x55, 0xB8, 0x00, 0x62, 0x80, 0x00, 0x61, - 0x00, 0x00, 0x72, 0xB8, 0x00, 0x6F, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x70, - 0x00, 0x00, 0x63, 0xB8, 0x00, 0x64, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x64, - 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x64, 0x80, 0x00, 0x6D, - 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x49, 0x00, 0x00, 0x55, 0xB8, 0x5E, 0x73, - 0x00, 0x62, 0x10, 0xB8, 0x66, 0x2D, 0x00, 0x54, 0x8C, 0xB8, 0x59, 0x27, - 0x00, 0x6B, 0x63, 0xB8, 0x66, 0x0E, 0x00, 0x6C, 0xBB, 0xB8, 0x68, 0x2A, - 0x80, 0x5F, 0x0F, 0x80, 0x4F, 0x1A, 0x00, 0x79, 0x3E, 0xB8, 0x00, 0x70, - 0x00, 0x00, 0x41, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x41, 0xB8, 0x03, 0xBC, - 0x00, 0x00, 0x41, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x41, 0xB8, 0x00, 0x6B, - 0x00, 0x00, 0x41, 0xB8, 0x00, 0x4B, 0x00, 0x00, 0x42, 0xB8, 0x00, 0x4D, - 0x00, 0x00, 0x42, 0xB8, 0x00, 0x47, 0x00, 0x00, 0x42, 0xB8, 0x00, 0x63, - 0x80, 0x00, 0x61, 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x63, - 0x80, 0x00, 0x61, 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x46, - 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x46, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x46, - 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x67, - 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x48, 0x00, 0x00, 0x7A, - 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x4D, - 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x47, 0x80, 0x00, 0x48, - 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x54, 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, - 0xB8, 0x03, 0xBC, 0x00, 0x21, 0x13, 0xB8, 0x00, 0x6D, 0x00, 0x21, 0x13, - 0xB8, 0x00, 0x64, 0x00, 0x21, 0x13, 0xB8, 0x00, 0x6B, 0x00, 0x21, 0x13, - 0xB8, 0x00, 0x66, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x6D, - 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x6D, - 0xB8, 0x00, 0x63, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x6D, - 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x63, - 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0xB2, - 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x6D, - 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x63, 0x80, 0x00, 0x6D, - 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x6B, - 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x6D, 0x80, 0x22, 0x15, - 0x00, 0x00, 0x73, 0xB8, 0x00, 0x6D, 0x80, 0x22, 0x15, 0x80, 0x00, 0x73, - 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x6B, - 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x4D, 0x80, 0x00, 0x50, - 0x00, 0x00, 0x61, 0xB8, 0x00, 0x47, 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, - 0xB8, 0x00, 0x72, 0x80, 0x00, 0x61, 0x00, 0x00, 0x64, 0xB8, 0x00, 0x72, - 0x80, 0x00, 0x61, 0x80, 0x00, 0x64, 0x80, 0x22, 0x15, 0x00, 0x00, 0x73, - 0xB8, 0x00, 0x72, 0x80, 0x00, 0x61, 0x80, 0x00, 0x64, 0x80, 0x22, 0x15, - 0x80, 0x00, 0x73, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x73, - 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x73, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x73, - 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x56, - 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x56, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x56, - 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x56, - 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x57, - 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x57, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x57, - 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x57, - 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6B, 0x00, 0x03, 0xA9, - 0xB8, 0x00, 0x4D, 0x00, 0x03, 0xA9, 0xB8, 0x00, 0x61, 0x80, 0x00, 0x2E, - 0x80, 0x00, 0x6D, 0x00, 0x00, 0x2E, 0xB8, 0x00, 0x42, 0x00, 0x00, 0x71, - 0xB8, 0x00, 0x63, 0x00, 0x00, 0x63, 0xB8, 0x00, 0x63, 0x00, 0x00, 0x64, - 0xB8, 0x00, 0x43, 0x80, 0x22, 0x15, 0x80, 0x00, 0x6B, 0x00, 0x00, 0x67, - 0xB8, 0x00, 0x43, 0x80, 0x00, 0x6F, 0x00, 0x00, 0x2E, 0xB8, 0x00, 0x64, - 0x00, 0x00, 0x42, 0xB8, 0x00, 0x47, 0x00, 0x00, 0x79, 0xB8, 0x00, 0x68, - 0x00, 0x00, 0x61, 0xB8, 0x00, 0x48, 0x00, 0x00, 0x50, 0xB8, 0x00, 0x69, - 0x00, 0x00, 0x6E, 0xB8, 0x00, 0x4B, 0x00, 0x00, 0x4B, 0xB8, 0x00, 0x4B, - 0x00, 0x00, 0x4D, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x74, 0xB8, 0x00, 0x6C, - 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6C, 0x00, 0x00, 0x6E, 0xB8, 0x00, 0x6C, - 0x80, 0x00, 0x6F, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x6C, 0x00, 0x00, 0x78, - 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x62, 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x69, - 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x6F, 0x00, 0x00, 0x6C, - 0xB8, 0x00, 0x50, 0x00, 0x00, 0x48, 0xB8, 0x00, 0x70, 0x80, 0x00, 0x2E, - 0x80, 0x00, 0x6D, 0x00, 0x00, 0x2E, 0xB8, 0x00, 0x50, 0x80, 0x00, 0x50, - 0x00, 0x00, 0x4D, 0xB8, 0x00, 0x50, 0x00, 0x00, 0x52, 0xB8, 0x00, 0x73, - 0x00, 0x00, 0x72, 0xB8, 0x00, 0x53, 0x00, 0x00, 0x76, 0xB8, 0x00, 0x57, - 0x00, 0x00, 0x62, 0xB8, 0x00, 0x56, 0x80, 0x22, 0x15, 0x00, 0x00, 0x6D, - 0xB8, 0x00, 0x41, 0x80, 0x22, 0x15, 0x00, 0x00, 0x6D, 0xC0, 0x00, 0x31, - 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x33, - 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x34, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x35, - 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x36, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x37, - 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x38, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x39, - 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x65, 0xE5, - 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, - 0x80, 0x00, 0x32, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x33, - 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x65, 0xE5, - 0xC0, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, - 0x80, 0x00, 0x36, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x37, - 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x65, 0xE5, - 0xC0, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, - 0x80, 0x00, 0x30, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x31, - 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x32, 0x00, 0x65, 0xE5, - 0xC0, 0x00, 0x32, 0x80, 0x00, 0x33, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, - 0x80, 0x00, 0x34, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x35, - 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x36, 0x00, 0x65, 0xE5, - 0xC0, 0x00, 0x32, 0x80, 0x00, 0x37, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, - 0x80, 0x00, 0x38, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x39, - 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x33, 0x80, 0x00, 0x30, 0x00, 0x65, 0xE5, - 0xC0, 0x00, 0x33, 0x80, 0x00, 0x31, 0x00, 0x65, 0xE5, 0xB8, 0x00, 0x67, - 0x80, 0x00, 0x61, 0x00, 0x00, 0x6C, 0x20, 0x04, 0x4A, 0x20, 0x04, 0x4C, - 0x20, 0xA7, 0x6F, 0x20, 0x01, 0x26, 0x20, 0x01, 0x53, 0x20, 0xA7, 0x27, - 0x20, 0xAB, 0x37, 0x20, 0x02, 0x6B, 0x20, 0xAB, 0x52, 0x00, 0x8C, 0x48, - 0x00, 0x66, 0xF4, 0x00, 0x8E, 0xCA, 0x00, 0x8C, 0xC8, 0x00, 0x6E, 0xD1, - 0x00, 0x4E, 0x32, 0x00, 0x53, 0xE5, 0x00, 0x9F, 0x9C, 0x00, 0x9F, 0x9C, - 0x00, 0x59, 0x51, 0x00, 0x91, 0xD1, 0x00, 0x55, 0x87, 0x00, 0x59, 0x48, - 0x00, 0x61, 0xF6, 0x00, 0x76, 0x69, 0x00, 0x7F, 0x85, 0x00, 0x86, 0x3F, - 0x00, 0x87, 0xBA, 0x00, 0x88, 0xF8, 0x00, 0x90, 0x8F, 0x00, 0x6A, 0x02, - 0x00, 0x6D, 0x1B, 0x00, 0x70, 0xD9, 0x00, 0x73, 0xDE, 0x00, 0x84, 0x3D, - 0x00, 0x91, 0x6A, 0x00, 0x99, 0xF1, 0x00, 0x4E, 0x82, 0x00, 0x53, 0x75, - 0x00, 0x6B, 0x04, 0x00, 0x72, 0x1B, 0x00, 0x86, 0x2D, 0x00, 0x9E, 0x1E, - 0x00, 0x5D, 0x50, 0x00, 0x6F, 0xEB, 0x00, 0x85, 0xCD, 0x00, 0x89, 0x64, - 0x00, 0x62, 0xC9, 0x00, 0x81, 0xD8, 0x00, 0x88, 0x1F, 0x00, 0x5E, 0xCA, - 0x00, 0x67, 0x17, 0x00, 0x6D, 0x6A, 0x00, 0x72, 0xFC, 0x00, 0x90, 0xCE, - 0x00, 0x4F, 0x86, 0x00, 0x51, 0xB7, 0x00, 0x52, 0xDE, 0x00, 0x64, 0xC4, - 0x00, 0x6A, 0xD3, 0x00, 0x72, 0x10, 0x00, 0x76, 0xE7, 0x00, 0x80, 0x01, - 0x00, 0x86, 0x06, 0x00, 0x86, 0x5C, 0x00, 0x8D, 0xEF, 0x00, 0x97, 0x32, - 0x00, 0x9B, 0x6F, 0x00, 0x9D, 0xFA, 0x00, 0x78, 0x8C, 0x00, 0x79, 0x7F, - 0x00, 0x7D, 0xA0, 0x00, 0x83, 0xC9, 0x00, 0x93, 0x04, 0x00, 0x9E, 0x7F, - 0x00, 0x8A, 0xD6, 0x00, 0x58, 0xDF, 0x00, 0x5F, 0x04, 0x00, 0x7C, 0x60, - 0x00, 0x80, 0x7E, 0x00, 0x72, 0x62, 0x00, 0x78, 0xCA, 0x00, 0x8C, 0xC2, - 0x00, 0x96, 0xF7, 0x00, 0x58, 0xD8, 0x00, 0x5C, 0x62, 0x00, 0x6A, 0x13, - 0x00, 0x6D, 0xDA, 0x00, 0x6F, 0x0F, 0x00, 0x7D, 0x2F, 0x00, 0x7E, 0x37, - 0x00, 0x96, 0x4B, 0x00, 0x52, 0xD2, 0x00, 0x80, 0x8B, 0x00, 0x51, 0xDC, - 0x00, 0x51, 0xCC, 0x00, 0x7A, 0x1C, 0x00, 0x7D, 0xBE, 0x00, 0x83, 0xF1, - 0x00, 0x96, 0x75, 0x00, 0x8B, 0x80, 0x00, 0x62, 0xCF, 0x00, 0x6A, 0x02, - 0x00, 0x8A, 0xFE, 0x00, 0x4E, 0x39, 0x00, 0x5B, 0xE7, 0x00, 0x60, 0x12, - 0x00, 0x73, 0x87, 0x00, 0x75, 0x70, 0x00, 0x53, 0x17, 0x00, 0x78, 0xFB, - 0x00, 0x4F, 0xBF, 0x00, 0x5F, 0xA9, 0x00, 0x4E, 0x0D, 0x00, 0x6C, 0xCC, - 0x00, 0x65, 0x78, 0x00, 0x7D, 0x22, 0x00, 0x53, 0xC3, 0x00, 0x58, 0x5E, - 0x00, 0x77, 0x01, 0x00, 0x84, 0x49, 0x00, 0x8A, 0xAA, 0x00, 0x6B, 0xBA, - 0x00, 0x8F, 0xB0, 0x00, 0x6C, 0x88, 0x00, 0x62, 0xFE, 0x00, 0x82, 0xE5, - 0x00, 0x63, 0xA0, 0x00, 0x75, 0x65, 0x00, 0x4E, 0xAE, 0x00, 0x51, 0x69, - 0x00, 0x51, 0xC9, 0x00, 0x68, 0x81, 0x00, 0x7C, 0xE7, 0x00, 0x82, 0x6F, - 0x00, 0x8A, 0xD2, 0x00, 0x91, 0xCF, 0x00, 0x52, 0xF5, 0x00, 0x54, 0x42, - 0x00, 0x59, 0x73, 0x00, 0x5E, 0xEC, 0x00, 0x65, 0xC5, 0x00, 0x6F, 0xFE, - 0x00, 0x79, 0x2A, 0x00, 0x95, 0xAD, 0x00, 0x9A, 0x6A, 0x00, 0x9E, 0x97, - 0x00, 0x9E, 0xCE, 0x00, 0x52, 0x9B, 0x00, 0x66, 0xC6, 0x00, 0x6B, 0x77, - 0x00, 0x8F, 0x62, 0x00, 0x5E, 0x74, 0x00, 0x61, 0x90, 0x00, 0x62, 0x00, - 0x00, 0x64, 0x9A, 0x00, 0x6F, 0x23, 0x00, 0x71, 0x49, 0x00, 0x74, 0x89, - 0x00, 0x79, 0xCA, 0x00, 0x7D, 0xF4, 0x00, 0x80, 0x6F, 0x00, 0x8F, 0x26, - 0x00, 0x84, 0xEE, 0x00, 0x90, 0x23, 0x00, 0x93, 0x4A, 0x00, 0x52, 0x17, - 0x00, 0x52, 0xA3, 0x00, 0x54, 0xBD, 0x00, 0x70, 0xC8, 0x00, 0x88, 0xC2, - 0x00, 0x8A, 0xAA, 0x00, 0x5E, 0xC9, 0x00, 0x5F, 0xF5, 0x00, 0x63, 0x7B, - 0x00, 0x6B, 0xAE, 0x00, 0x7C, 0x3E, 0x00, 0x73, 0x75, 0x00, 0x4E, 0xE4, - 0x00, 0x56, 0xF9, 0x00, 0x5B, 0xE7, 0x00, 0x5D, 0xBA, 0x00, 0x60, 0x1C, - 0x00, 0x73, 0xB2, 0x00, 0x74, 0x69, 0x00, 0x7F, 0x9A, 0x00, 0x80, 0x46, - 0x00, 0x92, 0x34, 0x00, 0x96, 0xF6, 0x00, 0x97, 0x48, 0x00, 0x98, 0x18, - 0x00, 0x4F, 0x8B, 0x00, 0x79, 0xAE, 0x00, 0x91, 0xB4, 0x00, 0x96, 0xB8, - 0x00, 0x60, 0xE1, 0x00, 0x4E, 0x86, 0x00, 0x50, 0xDA, 0x00, 0x5B, 0xEE, - 0x00, 0x5C, 0x3F, 0x00, 0x65, 0x99, 0x00, 0x6A, 0x02, 0x00, 0x71, 0xCE, - 0x00, 0x76, 0x42, 0x00, 0x84, 0xFC, 0x00, 0x90, 0x7C, 0x00, 0x9F, 0x8D, - 0x00, 0x66, 0x88, 0x00, 0x96, 0x2E, 0x00, 0x52, 0x89, 0x00, 0x67, 0x7B, - 0x00, 0x67, 0xF3, 0x00, 0x6D, 0x41, 0x00, 0x6E, 0x9C, 0x00, 0x74, 0x09, - 0x00, 0x75, 0x59, 0x00, 0x78, 0x6B, 0x00, 0x7D, 0x10, 0x00, 0x98, 0x5E, - 0x00, 0x51, 0x6D, 0x00, 0x62, 0x2E, 0x00, 0x96, 0x78, 0x00, 0x50, 0x2B, - 0x00, 0x5D, 0x19, 0x00, 0x6D, 0xEA, 0x00, 0x8F, 0x2A, 0x00, 0x5F, 0x8B, - 0x00, 0x61, 0x44, 0x00, 0x68, 0x17, 0x00, 0x73, 0x87, 0x00, 0x96, 0x86, - 0x00, 0x52, 0x29, 0x00, 0x54, 0x0F, 0x00, 0x5C, 0x65, 0x00, 0x66, 0x13, - 0x00, 0x67, 0x4E, 0x00, 0x68, 0xA8, 0x00, 0x6C, 0xE5, 0x00, 0x74, 0x06, - 0x00, 0x75, 0xE2, 0x00, 0x7F, 0x79, 0x00, 0x88, 0xCF, 0x00, 0x88, 0xE1, - 0x00, 0x91, 0xCC, 0x00, 0x96, 0xE2, 0x00, 0x53, 0x3F, 0x00, 0x6E, 0xBA, - 0x00, 0x54, 0x1D, 0x00, 0x71, 0xD0, 0x00, 0x74, 0x98, 0x00, 0x85, 0xFA, - 0x00, 0x96, 0xA3, 0x00, 0x9C, 0x57, 0x00, 0x9E, 0x9F, 0x00, 0x67, 0x97, - 0x00, 0x6D, 0xCB, 0x00, 0x81, 0xE8, 0x00, 0x7A, 0xCB, 0x00, 0x7B, 0x20, - 0x00, 0x7C, 0x92, 0x00, 0x72, 0xC0, 0x00, 0x70, 0x99, 0x00, 0x8B, 0x58, - 0x00, 0x4E, 0xC0, 0x00, 0x83, 0x36, 0x00, 0x52, 0x3A, 0x00, 0x52, 0x07, - 0x00, 0x5E, 0xA6, 0x00, 0x62, 0xD3, 0x00, 0x7C, 0xD6, 0x00, 0x5B, 0x85, - 0x00, 0x6D, 0x1E, 0x00, 0x66, 0xB4, 0x00, 0x8F, 0x3B, 0x00, 0x88, 0x4C, - 0x00, 0x96, 0x4D, 0x00, 0x89, 0x8B, 0x00, 0x5E, 0xD3, 0x00, 0x51, 0x40, - 0x00, 0x55, 0xC0, 0x00, 0x58, 0x5A, 0x00, 0x66, 0x74, 0x00, 0x51, 0xDE, - 0x00, 0x73, 0x2A, 0x00, 0x76, 0xCA, 0x00, 0x79, 0x3C, 0x00, 0x79, 0x5E, - 0x00, 0x79, 0x65, 0x00, 0x79, 0x8F, 0x00, 0x97, 0x56, 0x00, 0x7C, 0xBE, - 0x00, 0x7F, 0xBD, 0x00, 0x86, 0x12, 0x00, 0x8A, 0xF8, 0x00, 0x90, 0x38, - 0x00, 0x90, 0xFD, 0x00, 0x98, 0xEF, 0x00, 0x98, 0xFC, 0x00, 0x99, 0x28, - 0x00, 0x9D, 0xB4, 0x00, 0x90, 0xDE, 0x00, 0x96, 0xB7, 0x00, 0x4F, 0xAE, - 0x00, 0x50, 0xE7, 0x00, 0x51, 0x4D, 0x00, 0x52, 0xC9, 0x00, 0x52, 0xE4, - 0x00, 0x53, 0x51, 0x00, 0x55, 0x9D, 0x00, 0x56, 0x06, 0x00, 0x56, 0x68, - 0x00, 0x58, 0x40, 0x00, 0x58, 0xA8, 0x00, 0x5C, 0x64, 0x00, 0x5C, 0x6E, - 0x00, 0x60, 0x94, 0x00, 0x61, 0x68, 0x00, 0x61, 0x8E, 0x00, 0x61, 0xF2, - 0x00, 0x65, 0x4F, 0x00, 0x65, 0xE2, 0x00, 0x66, 0x91, 0x00, 0x68, 0x85, - 0x00, 0x6D, 0x77, 0x00, 0x6E, 0x1A, 0x00, 0x6F, 0x22, 0x00, 0x71, 0x6E, - 0x00, 0x72, 0x2B, 0x00, 0x74, 0x22, 0x00, 0x78, 0x91, 0x00, 0x79, 0x3E, - 0x00, 0x79, 0x49, 0x00, 0x79, 0x48, 0x00, 0x79, 0x50, 0x00, 0x79, 0x56, - 0x00, 0x79, 0x5D, 0x00, 0x79, 0x8D, 0x00, 0x79, 0x8E, 0x00, 0x7A, 0x40, - 0x00, 0x7A, 0x81, 0x00, 0x7B, 0xC0, 0x00, 0x7D, 0xF4, 0x00, 0x7E, 0x09, - 0x00, 0x7E, 0x41, 0x00, 0x7F, 0x72, 0x00, 0x80, 0x05, 0x00, 0x81, 0xED, - 0x00, 0x82, 0x79, 0x00, 0x82, 0x79, 0x00, 0x84, 0x57, 0x00, 0x89, 0x10, - 0x00, 0x89, 0x96, 0x00, 0x8B, 0x01, 0x00, 0x8B, 0x39, 0x00, 0x8C, 0xD3, - 0x00, 0x8D, 0x08, 0x00, 0x8F, 0xB6, 0x00, 0x90, 0x38, 0x00, 0x96, 0xE3, - 0x00, 0x97, 0xFF, 0x00, 0x98, 0x3B, 0x00, 0x60, 0x75, 0x02, 0x42, 0xEE, - 0x00, 0x82, 0x18, 0x00, 0x4E, 0x26, 0x00, 0x51, 0xB5, 0x00, 0x51, 0x68, - 0x00, 0x4F, 0x80, 0x00, 0x51, 0x45, 0x00, 0x51, 0x80, 0x00, 0x52, 0xC7, - 0x00, 0x52, 0xFA, 0x00, 0x55, 0x9D, 0x00, 0x55, 0x55, 0x00, 0x55, 0x99, - 0x00, 0x55, 0xE2, 0x00, 0x58, 0x5A, 0x00, 0x58, 0xB3, 0x00, 0x59, 0x44, - 0x00, 0x59, 0x54, 0x00, 0x5A, 0x62, 0x00, 0x5B, 0x28, 0x00, 0x5E, 0xD2, - 0x00, 0x5E, 0xD9, 0x00, 0x5F, 0x69, 0x00, 0x5F, 0xAD, 0x00, 0x60, 0xD8, - 0x00, 0x61, 0x4E, 0x00, 0x61, 0x08, 0x00, 0x61, 0x8E, 0x00, 0x61, 0x60, - 0x00, 0x61, 0xF2, 0x00, 0x62, 0x34, 0x00, 0x63, 0xC4, 0x00, 0x64, 0x1C, - 0x00, 0x64, 0x52, 0x00, 0x65, 0x56, 0x00, 0x66, 0x74, 0x00, 0x67, 0x17, - 0x00, 0x67, 0x1B, 0x00, 0x67, 0x56, 0x00, 0x6B, 0x79, 0x00, 0x6B, 0xBA, - 0x00, 0x6D, 0x41, 0x00, 0x6E, 0xDB, 0x00, 0x6E, 0xCB, 0x00, 0x6F, 0x22, - 0x00, 0x70, 0x1E, 0x00, 0x71, 0x6E, 0x00, 0x77, 0xA7, 0x00, 0x72, 0x35, - 0x00, 0x72, 0xAF, 0x00, 0x73, 0x2A, 0x00, 0x74, 0x71, 0x00, 0x75, 0x06, - 0x00, 0x75, 0x3B, 0x00, 0x76, 0x1D, 0x00, 0x76, 0x1F, 0x00, 0x76, 0xCA, - 0x00, 0x76, 0xDB, 0x00, 0x76, 0xF4, 0x00, 0x77, 0x4A, 0x00, 0x77, 0x40, - 0x00, 0x78, 0xCC, 0x00, 0x7A, 0xB1, 0x00, 0x7B, 0xC0, 0x00, 0x7C, 0x7B, - 0x00, 0x7D, 0x5B, 0x00, 0x7D, 0xF4, 0x00, 0x7F, 0x3E, 0x00, 0x80, 0x05, - 0x00, 0x83, 0x52, 0x00, 0x83, 0xEF, 0x00, 0x87, 0x79, 0x00, 0x89, 0x41, - 0x00, 0x89, 0x86, 0x00, 0x89, 0x96, 0x00, 0x8A, 0xBF, 0x00, 0x8A, 0xF8, - 0x00, 0x8A, 0xCB, 0x00, 0x8B, 0x01, 0x00, 0x8A, 0xFE, 0x00, 0x8A, 0xED, - 0x00, 0x8B, 0x39, 0x00, 0x8B, 0x8A, 0x00, 0x8D, 0x08, 0x00, 0x8F, 0x38, - 0x00, 0x90, 0x72, 0x00, 0x91, 0x99, 0x00, 0x92, 0x76, 0x00, 0x96, 0x7C, - 0x00, 0x96, 0xE3, 0x00, 0x97, 0x56, 0x00, 0x97, 0xDB, 0x00, 0x97, 0xFF, - 0x00, 0x98, 0x0B, 0x00, 0x98, 0x3B, 0x00, 0x9B, 0x12, 0x00, 0x9F, 0x9C, - 0x02, 0x28, 0x4A, 0x02, 0x28, 0x44, 0x02, 0x33, 0xD5, 0x00, 0x3B, 0x9D, - 0x00, 0x40, 0x18, 0x00, 0x40, 0x39, 0x02, 0x52, 0x49, 0x02, 0x5C, 0xD0, - 0x02, 0x7E, 0xD3, 0x00, 0x9F, 0x43, 0x00, 0x9F, 0x8E, 0xC0, 0x00, 0x66, - 0x00, 0x00, 0x66, 0xC0, 0x00, 0x66, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x66, - 0x00, 0x00, 0x6C, 0xC0, 0x00, 0x66, 0x80, 0x00, 0x66, 0x00, 0x00, 0x69, - 0xC0, 0x00, 0x66, 0x80, 0x00, 0x66, 0x00, 0x00, 0x6C, 0xC0, 0x01, 0x7F, - 0x00, 0x00, 0x74, 0xC0, 0x00, 0x73, 0x00, 0x00, 0x74, 0xC0, 0x05, 0x74, - 0x00, 0x05, 0x76, 0xC0, 0x05, 0x74, 0x00, 0x05, 0x65, 0xC0, 0x05, 0x74, - 0x00, 0x05, 0x6B, 0xC0, 0x05, 0x7E, 0x00, 0x05, 0x76, 0xC0, 0x05, 0x74, - 0x00, 0x05, 0x6D, 0x80, 0x05, 0xD9, 0x00, 0x05, 0xB4, 0x80, 0x05, 0xF2, - 0x00, 0x05, 0xB7, 0x04, 0x05, 0xE2, 0x04, 0x05, 0xD0, 0x04, 0x05, 0xD3, - 0x04, 0x05, 0xD4, 0x04, 0x05, 0xDB, 0x04, 0x05, 0xDC, 0x04, 0x05, 0xDD, - 0x04, 0x05, 0xE8, 0x04, 0x05, 0xEA, 0x04, 0x00, 0x2B, 0x80, 0x05, 0xE9, - 0x00, 0x05, 0xC1, 0x80, 0x05, 0xE9, 0x00, 0x05, 0xC2, 0x80, 0xFB, 0x49, - 0x00, 0x05, 0xC1, 0x80, 0xFB, 0x49, 0x00, 0x05, 0xC2, 0x80, 0x05, 0xD0, - 0x00, 0x05, 0xB7, 0x80, 0x05, 0xD0, 0x00, 0x05, 0xB8, 0x80, 0x05, 0xD0, - 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD1, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD2, - 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD3, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD4, - 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD5, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD6, - 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD8, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD9, - 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDA, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDB, - 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDC, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDE, - 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE0, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE1, - 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE3, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE4, - 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE6, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE7, - 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE8, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE9, - 0x00, 0x05, 0xBC, 0x80, 0x05, 0xEA, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD5, - 0x00, 0x05, 0xB9, 0x80, 0x05, 0xD1, 0x00, 0x05, 0xBF, 0x80, 0x05, 0xDB, - 0x00, 0x05, 0xBF, 0x80, 0x05, 0xE4, 0x00, 0x05, 0xBF, 0xC0, 0x05, 0xD0, - 0x00, 0x05, 0xDC, 0x18, 0x06, 0x71, 0x14, 0x06, 0x71, 0x18, 0x06, 0x7B, - 0x14, 0x06, 0x7B, 0x0C, 0x06, 0x7B, 0x10, 0x06, 0x7B, 0x18, 0x06, 0x7E, - 0x14, 0x06, 0x7E, 0x0C, 0x06, 0x7E, 0x10, 0x06, 0x7E, 0x18, 0x06, 0x80, - 0x14, 0x06, 0x80, 0x0C, 0x06, 0x80, 0x10, 0x06, 0x80, 0x18, 0x06, 0x7A, - 0x14, 0x06, 0x7A, 0x0C, 0x06, 0x7A, 0x10, 0x06, 0x7A, 0x18, 0x06, 0x7F, - 0x14, 0x06, 0x7F, 0x0C, 0x06, 0x7F, 0x10, 0x06, 0x7F, 0x18, 0x06, 0x79, - 0x14, 0x06, 0x79, 0x0C, 0x06, 0x79, 0x10, 0x06, 0x79, 0x18, 0x06, 0xA4, - 0x14, 0x06, 0xA4, 0x0C, 0x06, 0xA4, 0x10, 0x06, 0xA4, 0x18, 0x06, 0xA6, - 0x14, 0x06, 0xA6, 0x0C, 0x06, 0xA6, 0x10, 0x06, 0xA6, 0x18, 0x06, 0x84, - 0x14, 0x06, 0x84, 0x0C, 0x06, 0x84, 0x10, 0x06, 0x84, 0x18, 0x06, 0x83, - 0x14, 0x06, 0x83, 0x0C, 0x06, 0x83, 0x10, 0x06, 0x83, 0x18, 0x06, 0x86, - 0x14, 0x06, 0x86, 0x0C, 0x06, 0x86, 0x10, 0x06, 0x86, 0x18, 0x06, 0x87, - 0x14, 0x06, 0x87, 0x0C, 0x06, 0x87, 0x10, 0x06, 0x87, 0x18, 0x06, 0x8D, - 0x14, 0x06, 0x8D, 0x18, 0x06, 0x8C, 0x14, 0x06, 0x8C, 0x18, 0x06, 0x8E, - 0x14, 0x06, 0x8E, 0x18, 0x06, 0x88, 0x14, 0x06, 0x88, 0x18, 0x06, 0x98, - 0x14, 0x06, 0x98, 0x18, 0x06, 0x91, 0x14, 0x06, 0x91, 0x18, 0x06, 0xA9, - 0x14, 0x06, 0xA9, 0x0C, 0x06, 0xA9, 0x10, 0x06, 0xA9, 0x18, 0x06, 0xAF, - 0x14, 0x06, 0xAF, 0x0C, 0x06, 0xAF, 0x10, 0x06, 0xAF, 0x18, 0x06, 0xB3, - 0x14, 0x06, 0xB3, 0x0C, 0x06, 0xB3, 0x10, 0x06, 0xB3, 0x18, 0x06, 0xB1, - 0x14, 0x06, 0xB1, 0x0C, 0x06, 0xB1, 0x10, 0x06, 0xB1, 0x18, 0x06, 0xBA, - 0x14, 0x06, 0xBA, 0x18, 0x06, 0xBB, 0x14, 0x06, 0xBB, 0x0C, 0x06, 0xBB, - 0x10, 0x06, 0xBB, 0x18, 0x06, 0xC0, 0x14, 0x06, 0xC0, 0x18, 0x06, 0xC1, - 0x14, 0x06, 0xC1, 0x0C, 0x06, 0xC1, 0x10, 0x06, 0xC1, 0x18, 0x06, 0xBE, - 0x14, 0x06, 0xBE, 0x0C, 0x06, 0xBE, 0x10, 0x06, 0xBE, 0x18, 0x06, 0xD2, - 0x14, 0x06, 0xD2, 0x18, 0x06, 0xD3, 0x14, 0x06, 0xD3, 0x18, 0x06, 0xAD, - 0x14, 0x06, 0xAD, 0x0C, 0x06, 0xAD, 0x10, 0x06, 0xAD, 0x18, 0x06, 0xC7, - 0x14, 0x06, 0xC7, 0x18, 0x06, 0xC6, 0x14, 0x06, 0xC6, 0x18, 0x06, 0xC8, - 0x14, 0x06, 0xC8, 0x18, 0x06, 0x77, 0x18, 0x06, 0xCB, 0x14, 0x06, 0xCB, - 0x18, 0x06, 0xC5, 0x14, 0x06, 0xC5, 0x18, 0x06, 0xC9, 0x14, 0x06, 0xC9, - 0x18, 0x06, 0xD0, 0x14, 0x06, 0xD0, 0x0C, 0x06, 0xD0, 0x10, 0x06, 0xD0, - 0x0C, 0x06, 0x49, 0x10, 0x06, 0x49, 0x98, 0x06, 0x26, 0x00, 0x06, 0x27, - 0x94, 0x06, 0x26, 0x00, 0x06, 0x27, 0x98, 0x06, 0x26, 0x00, 0x06, 0xD5, - 0x94, 0x06, 0x26, 0x00, 0x06, 0xD5, 0x98, 0x06, 0x26, 0x00, 0x06, 0x48, - 0x94, 0x06, 0x26, 0x00, 0x06, 0x48, 0x98, 0x06, 0x26, 0x00, 0x06, 0xC7, - 0x94, 0x06, 0x26, 0x00, 0x06, 0xC7, 0x98, 0x06, 0x26, 0x00, 0x06, 0xC6, - 0x94, 0x06, 0x26, 0x00, 0x06, 0xC6, 0x98, 0x06, 0x26, 0x00, 0x06, 0xC8, - 0x94, 0x06, 0x26, 0x00, 0x06, 0xC8, 0x98, 0x06, 0x26, 0x00, 0x06, 0xD0, - 0x94, 0x06, 0x26, 0x00, 0x06, 0xD0, 0x8C, 0x06, 0x26, 0x00, 0x06, 0xD0, - 0x98, 0x06, 0x26, 0x00, 0x06, 0x49, 0x94, 0x06, 0x26, 0x00, 0x06, 0x49, - 0x8C, 0x06, 0x26, 0x00, 0x06, 0x49, 0x18, 0x06, 0xCC, 0x14, 0x06, 0xCC, - 0x0C, 0x06, 0xCC, 0x10, 0x06, 0xCC, 0x98, 0x06, 0x26, 0x00, 0x06, 0x2C, - 0x98, 0x06, 0x26, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x26, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x26, 0x00, 0x06, 0x49, 0x98, 0x06, 0x26, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x28, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x28, 0x00, 0x06, 0x2D, - 0x98, 0x06, 0x28, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x28, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x28, 0x00, 0x06, 0x49, 0x98, 0x06, 0x28, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2D, - 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x2A, 0x00, 0x06, 0x49, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x2B, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x2B, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x2B, 0x00, 0x06, 0x49, 0x98, 0x06, 0x2B, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x2C, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x2D, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x2E, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x2D, - 0x98, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x98, 0x06, 0x33, 0x00, 0x06, 0x2C, - 0x98, 0x06, 0x33, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x33, 0x00, 0x06, 0x2E, - 0x98, 0x06, 0x33, 0x00, 0x06, 0x45, 0x98, 0x06, 0x35, 0x00, 0x06, 0x2D, - 0x98, 0x06, 0x35, 0x00, 0x06, 0x45, 0x98, 0x06, 0x36, 0x00, 0x06, 0x2C, - 0x98, 0x06, 0x36, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x36, 0x00, 0x06, 0x2E, - 0x98, 0x06, 0x36, 0x00, 0x06, 0x45, 0x98, 0x06, 0x37, 0x00, 0x06, 0x2D, - 0x98, 0x06, 0x37, 0x00, 0x06, 0x45, 0x98, 0x06, 0x38, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x39, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x39, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x3A, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x3A, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x41, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x41, 0x00, 0x06, 0x2D, - 0x98, 0x06, 0x41, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x41, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x41, 0x00, 0x06, 0x49, 0x98, 0x06, 0x41, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x42, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x42, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x42, 0x00, 0x06, 0x49, 0x98, 0x06, 0x42, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x43, 0x00, 0x06, 0x27, 0x98, 0x06, 0x43, 0x00, 0x06, 0x2C, - 0x98, 0x06, 0x43, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x43, 0x00, 0x06, 0x2E, - 0x98, 0x06, 0x43, 0x00, 0x06, 0x44, 0x98, 0x06, 0x43, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x43, 0x00, 0x06, 0x49, 0x98, 0x06, 0x43, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x44, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x44, 0x00, 0x06, 0x2D, - 0x98, 0x06, 0x44, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x44, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x44, 0x00, 0x06, 0x49, 0x98, 0x06, 0x44, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x45, 0x00, 0x06, 0x2D, - 0x98, 0x06, 0x45, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x45, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x45, 0x00, 0x06, 0x49, 0x98, 0x06, 0x45, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x46, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x46, 0x00, 0x06, 0x2D, - 0x98, 0x06, 0x46, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x46, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x46, 0x00, 0x06, 0x49, 0x98, 0x06, 0x46, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x47, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x47, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x47, 0x00, 0x06, 0x49, 0x98, 0x06, 0x47, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2D, - 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x4A, 0x00, 0x06, 0x49, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x4A, - 0x98, 0x06, 0x30, 0x00, 0x06, 0x70, 0x98, 0x06, 0x31, 0x00, 0x06, 0x70, - 0x98, 0x06, 0x49, 0x00, 0x06, 0x70, 0x98, 0x00, 0x20, 0x80, 0x06, 0x4C, - 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x4D, 0x00, 0x06, 0x51, - 0x98, 0x00, 0x20, 0x80, 0x06, 0x4E, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, - 0x80, 0x06, 0x4F, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x50, - 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x51, 0x00, 0x06, 0x70, - 0x94, 0x06, 0x26, 0x00, 0x06, 0x31, 0x94, 0x06, 0x26, 0x00, 0x06, 0x32, - 0x94, 0x06, 0x26, 0x00, 0x06, 0x45, 0x94, 0x06, 0x26, 0x00, 0x06, 0x46, - 0x94, 0x06, 0x26, 0x00, 0x06, 0x49, 0x94, 0x06, 0x26, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x28, 0x00, 0x06, 0x31, 0x94, 0x06, 0x28, 0x00, 0x06, 0x32, - 0x94, 0x06, 0x28, 0x00, 0x06, 0x45, 0x94, 0x06, 0x28, 0x00, 0x06, 0x46, - 0x94, 0x06, 0x28, 0x00, 0x06, 0x49, 0x94, 0x06, 0x28, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x2A, 0x00, 0x06, 0x31, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x32, - 0x94, 0x06, 0x2A, 0x00, 0x06, 0x45, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x46, - 0x94, 0x06, 0x2A, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x2B, 0x00, 0x06, 0x31, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x32, - 0x94, 0x06, 0x2B, 0x00, 0x06, 0x45, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x46, - 0x94, 0x06, 0x2B, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x41, 0x00, 0x06, 0x49, 0x94, 0x06, 0x41, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x42, 0x00, 0x06, 0x49, 0x94, 0x06, 0x42, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x43, 0x00, 0x06, 0x27, 0x94, 0x06, 0x43, 0x00, 0x06, 0x44, - 0x94, 0x06, 0x43, 0x00, 0x06, 0x45, 0x94, 0x06, 0x43, 0x00, 0x06, 0x49, - 0x94, 0x06, 0x43, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, 0x00, 0x06, 0x45, - 0x94, 0x06, 0x44, 0x00, 0x06, 0x49, 0x94, 0x06, 0x44, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x45, 0x00, 0x06, 0x27, 0x94, 0x06, 0x45, 0x00, 0x06, 0x45, - 0x94, 0x06, 0x46, 0x00, 0x06, 0x31, 0x94, 0x06, 0x46, 0x00, 0x06, 0x32, - 0x94, 0x06, 0x46, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x00, 0x06, 0x46, - 0x94, 0x06, 0x46, 0x00, 0x06, 0x49, 0x94, 0x06, 0x46, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x49, 0x00, 0x06, 0x70, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x31, - 0x94, 0x06, 0x4A, 0x00, 0x06, 0x32, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x45, - 0x94, 0x06, 0x4A, 0x00, 0x06, 0x46, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x49, - 0x94, 0x06, 0x4A, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2C, - 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2E, - 0x8C, 0x06, 0x26, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x47, - 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x28, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2C, - 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2E, - 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x47, - 0x8C, 0x06, 0x2B, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2C, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2D, 0x00, 0x06, 0x2C, - 0x8C, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2E, 0x00, 0x06, 0x2C, - 0x8C, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2C, - 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2E, - 0x8C, 0x06, 0x33, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x35, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x35, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x35, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x36, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x37, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x38, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x39, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x39, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x3A, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x3A, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x41, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x42, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x42, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x44, - 0x8C, 0x06, 0x43, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2C, - 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2E, - 0x8C, 0x06, 0x44, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x47, - 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x45, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x46, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x47, 0x00, 0x06, 0x2C, - 0x8C, 0x06, 0x47, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x47, 0x00, 0x06, 0x70, - 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x47, 0x90, 0x06, 0x26, 0x00, 0x06, 0x45, - 0x90, 0x06, 0x26, 0x00, 0x06, 0x47, 0x90, 0x06, 0x28, 0x00, 0x06, 0x45, - 0x90, 0x06, 0x28, 0x00, 0x06, 0x47, 0x90, 0x06, 0x2A, 0x00, 0x06, 0x45, - 0x90, 0x06, 0x2A, 0x00, 0x06, 0x47, 0x90, 0x06, 0x2B, 0x00, 0x06, 0x45, - 0x90, 0x06, 0x2B, 0x00, 0x06, 0x47, 0x90, 0x06, 0x33, 0x00, 0x06, 0x45, - 0x90, 0x06, 0x33, 0x00, 0x06, 0x47, 0x90, 0x06, 0x34, 0x00, 0x06, 0x45, - 0x90, 0x06, 0x34, 0x00, 0x06, 0x47, 0x90, 0x06, 0x43, 0x00, 0x06, 0x44, - 0x90, 0x06, 0x43, 0x00, 0x06, 0x45, 0x90, 0x06, 0x44, 0x00, 0x06, 0x45, - 0x90, 0x06, 0x46, 0x00, 0x06, 0x45, 0x90, 0x06, 0x46, 0x00, 0x06, 0x47, - 0x90, 0x06, 0x4A, 0x00, 0x06, 0x45, 0x90, 0x06, 0x4A, 0x00, 0x06, 0x47, - 0x90, 0x06, 0x40, 0x80, 0x06, 0x4E, 0x00, 0x06, 0x51, 0x90, 0x06, 0x40, - 0x80, 0x06, 0x4F, 0x00, 0x06, 0x51, 0x90, 0x06, 0x40, 0x80, 0x06, 0x50, - 0x00, 0x06, 0x51, 0x98, 0x06, 0x37, 0x00, 0x06, 0x49, 0x98, 0x06, 0x37, - 0x00, 0x06, 0x4A, 0x98, 0x06, 0x39, 0x00, 0x06, 0x49, 0x98, 0x06, 0x39, - 0x00, 0x06, 0x4A, 0x98, 0x06, 0x3A, 0x00, 0x06, 0x49, 0x98, 0x06, 0x3A, - 0x00, 0x06, 0x4A, 0x98, 0x06, 0x33, 0x00, 0x06, 0x49, 0x98, 0x06, 0x33, - 0x00, 0x06, 0x4A, 0x98, 0x06, 0x34, 0x00, 0x06, 0x49, 0x98, 0x06, 0x34, - 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x98, 0x06, 0x2D, - 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x98, 0x06, 0x2C, - 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x49, 0x98, 0x06, 0x2E, - 0x00, 0x06, 0x4A, 0x98, 0x06, 0x35, 0x00, 0x06, 0x49, 0x98, 0x06, 0x35, - 0x00, 0x06, 0x4A, 0x98, 0x06, 0x36, 0x00, 0x06, 0x49, 0x98, 0x06, 0x36, - 0x00, 0x06, 0x4A, 0x98, 0x06, 0x34, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x34, - 0x00, 0x06, 0x2D, 0x98, 0x06, 0x34, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x34, - 0x00, 0x06, 0x45, 0x98, 0x06, 0x34, 0x00, 0x06, 0x31, 0x98, 0x06, 0x33, - 0x00, 0x06, 0x31, 0x98, 0x06, 0x35, 0x00, 0x06, 0x31, 0x98, 0x06, 0x36, - 0x00, 0x06, 0x31, 0x94, 0x06, 0x37, 0x00, 0x06, 0x49, 0x94, 0x06, 0x37, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x39, 0x00, 0x06, 0x49, 0x94, 0x06, 0x39, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x3A, 0x00, 0x06, 0x49, 0x94, 0x06, 0x3A, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x33, 0x00, 0x06, 0x49, 0x94, 0x06, 0x33, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, 0x00, 0x06, 0x49, 0x94, 0x06, 0x34, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2D, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2C, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2E, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2E, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x35, 0x00, 0x06, 0x49, 0x94, 0x06, 0x35, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x36, 0x00, 0x06, 0x49, 0x94, 0x06, 0x36, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, 0x00, 0x06, 0x2C, 0x94, 0x06, 0x34, - 0x00, 0x06, 0x2D, 0x94, 0x06, 0x34, 0x00, 0x06, 0x2E, 0x94, 0x06, 0x34, - 0x00, 0x06, 0x45, 0x94, 0x06, 0x34, 0x00, 0x06, 0x31, 0x94, 0x06, 0x33, - 0x00, 0x06, 0x31, 0x94, 0x06, 0x35, 0x00, 0x06, 0x31, 0x94, 0x06, 0x36, - 0x00, 0x06, 0x31, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x34, - 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x34, - 0x00, 0x06, 0x45, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x34, - 0x00, 0x06, 0x47, 0x8C, 0x06, 0x37, 0x00, 0x06, 0x45, 0x90, 0x06, 0x33, - 0x00, 0x06, 0x2C, 0x90, 0x06, 0x33, 0x00, 0x06, 0x2D, 0x90, 0x06, 0x33, - 0x00, 0x06, 0x2E, 0x90, 0x06, 0x34, 0x00, 0x06, 0x2C, 0x90, 0x06, 0x34, - 0x00, 0x06, 0x2D, 0x90, 0x06, 0x34, 0x00, 0x06, 0x2E, 0x90, 0x06, 0x37, - 0x00, 0x06, 0x45, 0x90, 0x06, 0x38, 0x00, 0x06, 0x45, 0x94, 0x06, 0x27, - 0x00, 0x06, 0x4B, 0x98, 0x06, 0x27, 0x00, 0x06, 0x4B, 0x8C, 0x06, 0x2A, - 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2D, - 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, - 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2A, - 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2E, 0x94, 0x06, 0x2C, - 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x2C, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x2D, 0x94, 0x06, 0x2D, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x2D, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x8C, 0x06, 0x33, - 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x2C, - 0x00, 0x06, 0x2D, 0x94, 0x06, 0x33, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x49, - 0x94, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x33, - 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x2C, 0x94, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x35, - 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x35, 0x80, 0x06, 0x2D, - 0x00, 0x06, 0x2D, 0x94, 0x06, 0x35, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, - 0x94, 0x06, 0x34, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x34, - 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x94, 0x06, 0x34, 0x80, 0x06, 0x2C, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2E, - 0x8C, 0x06, 0x34, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2E, 0x94, 0x06, 0x34, - 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x34, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x45, 0x94, 0x06, 0x36, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, - 0x94, 0x06, 0x36, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x36, - 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x94, 0x06, 0x37, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x37, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x37, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x37, - 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x39, 0x80, 0x06, 0x2C, - 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x39, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, - 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x3A, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x45, 0x94, 0x06, 0x3A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x3A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x41, - 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x41, 0x80, 0x06, 0x2E, - 0x00, 0x06, 0x45, 0x94, 0x06, 0x42, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, - 0x94, 0x06, 0x42, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, - 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2D, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, - 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2C, 0x94, 0x06, 0x44, - 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2C, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2E, - 0x00, 0x06, 0x45, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, - 0x94, 0x06, 0x44, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x44, - 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2D, - 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, - 0x94, 0x06, 0x45, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x45, - 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2C, - 0x00, 0x06, 0x45, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x2C, - 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x45, - 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x47, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x47, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x46, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, - 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, - 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, - 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x94, 0x06, 0x46, - 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x46, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x49, 0x94, 0x06, 0x4A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x4A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x28, - 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2C, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x49, - 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, - 0x80, 0x06, 0x2E, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, - 0x94, 0x06, 0x2C, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2C, - 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x49, 0x94, 0x06, 0x33, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x49, - 0x94, 0x06, 0x35, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, - 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x36, 0x80, 0x06, 0x2D, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x44, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x4A, - 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x4A, 0x80, 0x06, 0x2C, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x4A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x45, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x42, - 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2D, - 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x42, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, - 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, - 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x43, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, - 0x94, 0x06, 0x45, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x44, - 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x43, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, - 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x2C, - 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2D, 0x80, 0x06, 0x2C, - 0x00, 0x06, 0x4A, 0x94, 0x06, 0x45, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, - 0x94, 0x06, 0x41, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x28, - 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x43, 0x80, 0x06, 0x45, - 0x00, 0x06, 0x45, 0x8C, 0x06, 0x39, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, - 0x8C, 0x06, 0x35, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x33, - 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, - 0x00, 0x06, 0x4A, 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, 0x00, 0x06, 0xD2, - 0x98, 0x06, 0x42, 0x80, 0x06, 0x44, 0x00, 0x06, 0xD2, 0x98, 0x06, 0x27, - 0x80, 0x06, 0x44, 0x80, 0x06, 0x44, 0x00, 0x06, 0x47, 0x98, 0x06, 0x27, - 0x80, 0x06, 0x43, 0x80, 0x06, 0x28, 0x00, 0x06, 0x31, 0x98, 0x06, 0x45, - 0x80, 0x06, 0x2D, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2F, 0x98, 0x06, 0x35, - 0x80, 0x06, 0x44, 0x80, 0x06, 0x39, 0x00, 0x06, 0x45, 0x98, 0x06, 0x31, - 0x80, 0x06, 0x33, 0x80, 0x06, 0x48, 0x00, 0x06, 0x44, 0x98, 0x06, 0x39, - 0x80, 0x06, 0x44, 0x80, 0x06, 0x4A, 0x00, 0x06, 0x47, 0x98, 0x06, 0x48, - 0x80, 0x06, 0x33, 0x80, 0x06, 0x44, 0x00, 0x06, 0x45, 0x98, 0x06, 0x35, - 0x80, 0x06, 0x44, 0x00, 0x06, 0x49, 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, - 0x80, 0x06, 0x49, 0x80, 0x00, 0x20, 0x80, 0x06, 0x27, 0x80, 0x06, 0x44, - 0x80, 0x06, 0x44, 0x80, 0x06, 0x47, 0x80, 0x00, 0x20, 0x80, 0x06, 0x39, - 0x80, 0x06, 0x44, 0x80, 0x06, 0x4A, 0x80, 0x06, 0x47, 0x80, 0x00, 0x20, - 0x80, 0x06, 0x48, 0x80, 0x06, 0x33, 0x80, 0x06, 0x44, 0x00, 0x06, 0x45, - 0x98, 0x06, 0x2C, 0x80, 0x06, 0x44, 0x80, 0x00, 0x20, 0x80, 0x06, 0x2C, - 0x80, 0x06, 0x44, 0x80, 0x06, 0x27, 0x80, 0x06, 0x44, 0x00, 0x06, 0x47, - 0x98, 0x06, 0x31, 0x80, 0x06, 0xCC, 0x80, 0x06, 0x27, 0x00, 0x06, 0x44, - 0x28, 0x00, 0x2C, 0x28, 0x30, 0x01, 0x28, 0x30, 0x02, 0x28, 0x00, 0x3A, - 0x28, 0x00, 0x3B, 0x28, 0x00, 0x21, 0x28, 0x00, 0x3F, 0x28, 0x30, 0x16, - 0x28, 0x30, 0x17, 0x28, 0x20, 0x26, 0x28, 0x20, 0x25, 0x28, 0x20, 0x14, - 0x28, 0x20, 0x13, 0x28, 0x00, 0x5F, 0x28, 0x00, 0x5F, 0x28, 0x00, 0x28, - 0x28, 0x00, 0x29, 0x28, 0x00, 0x7B, 0x28, 0x00, 0x7D, 0x28, 0x30, 0x14, - 0x28, 0x30, 0x15, 0x28, 0x30, 0x10, 0x28, 0x30, 0x11, 0x28, 0x30, 0x0A, - 0x28, 0x30, 0x0B, 0x28, 0x30, 0x08, 0x28, 0x30, 0x09, 0x28, 0x30, 0x0C, - 0x28, 0x30, 0x0D, 0x28, 0x30, 0x0E, 0x28, 0x30, 0x0F, 0x28, 0x00, 0x5B, - 0x28, 0x00, 0x5D, 0x40, 0x20, 0x3E, 0x40, 0x20, 0x3E, 0x40, 0x20, 0x3E, - 0x40, 0x20, 0x3E, 0x40, 0x00, 0x5F, 0x40, 0x00, 0x5F, 0x40, 0x00, 0x5F, - 0x34, 0x00, 0x2C, 0x34, 0x30, 0x01, 0x34, 0x00, 0x2E, 0x34, 0x00, 0x3B, - 0x34, 0x00, 0x3A, 0x34, 0x00, 0x3F, 0x34, 0x00, 0x21, 0x34, 0x20, 0x14, - 0x34, 0x00, 0x28, 0x34, 0x00, 0x29, 0x34, 0x00, 0x7B, 0x34, 0x00, 0x7D, - 0x34, 0x30, 0x14, 0x34, 0x30, 0x15, 0x34, 0x00, 0x23, 0x34, 0x00, 0x26, - 0x34, 0x00, 0x2A, 0x34, 0x00, 0x2B, 0x34, 0x00, 0x2D, 0x34, 0x00, 0x3C, - 0x34, 0x00, 0x3E, 0x34, 0x00, 0x3D, 0x34, 0x00, 0x5C, 0x34, 0x00, 0x24, - 0x34, 0x00, 0x25, 0x34, 0x00, 0x40, 0x98, 0x00, 0x20, 0x00, 0x06, 0x4B, - 0x90, 0x06, 0x40, 0x00, 0x06, 0x4B, 0x98, 0x00, 0x20, 0x00, 0x06, 0x4C, - 0x98, 0x00, 0x20, 0x00, 0x06, 0x4D, 0x98, 0x00, 0x20, 0x00, 0x06, 0x4E, - 0x90, 0x06, 0x40, 0x00, 0x06, 0x4E, 0x98, 0x00, 0x20, 0x00, 0x06, 0x4F, - 0x90, 0x06, 0x40, 0x00, 0x06, 0x4F, 0x98, 0x00, 0x20, 0x00, 0x06, 0x50, - 0x90, 0x06, 0x40, 0x00, 0x06, 0x50, 0x98, 0x00, 0x20, 0x00, 0x06, 0x51, - 0x90, 0x06, 0x40, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x00, 0x06, 0x52, - 0x90, 0x06, 0x40, 0x00, 0x06, 0x52, 0x18, 0x06, 0x21, 0x18, 0x06, 0x22, - 0x14, 0x06, 0x22, 0x18, 0x06, 0x23, 0x14, 0x06, 0x23, 0x18, 0x06, 0x24, - 0x14, 0x06, 0x24, 0x18, 0x06, 0x25, 0x14, 0x06, 0x25, 0x18, 0x06, 0x26, - 0x14, 0x06, 0x26, 0x0C, 0x06, 0x26, 0x10, 0x06, 0x26, 0x18, 0x06, 0x27, - 0x14, 0x06, 0x27, 0x18, 0x06, 0x28, 0x14, 0x06, 0x28, 0x0C, 0x06, 0x28, - 0x10, 0x06, 0x28, 0x18, 0x06, 0x29, 0x14, 0x06, 0x29, 0x18, 0x06, 0x2A, - 0x14, 0x06, 0x2A, 0x0C, 0x06, 0x2A, 0x10, 0x06, 0x2A, 0x18, 0x06, 0x2B, - 0x14, 0x06, 0x2B, 0x0C, 0x06, 0x2B, 0x10, 0x06, 0x2B, 0x18, 0x06, 0x2C, - 0x14, 0x06, 0x2C, 0x0C, 0x06, 0x2C, 0x10, 0x06, 0x2C, 0x18, 0x06, 0x2D, - 0x14, 0x06, 0x2D, 0x0C, 0x06, 0x2D, 0x10, 0x06, 0x2D, 0x18, 0x06, 0x2E, - 0x14, 0x06, 0x2E, 0x0C, 0x06, 0x2E, 0x10, 0x06, 0x2E, 0x18, 0x06, 0x2F, - 0x14, 0x06, 0x2F, 0x18, 0x06, 0x30, 0x14, 0x06, 0x30, 0x18, 0x06, 0x31, - 0x14, 0x06, 0x31, 0x18, 0x06, 0x32, 0x14, 0x06, 0x32, 0x18, 0x06, 0x33, - 0x14, 0x06, 0x33, 0x0C, 0x06, 0x33, 0x10, 0x06, 0x33, 0x18, 0x06, 0x34, - 0x14, 0x06, 0x34, 0x0C, 0x06, 0x34, 0x10, 0x06, 0x34, 0x18, 0x06, 0x35, - 0x14, 0x06, 0x35, 0x0C, 0x06, 0x35, 0x10, 0x06, 0x35, 0x18, 0x06, 0x36, - 0x14, 0x06, 0x36, 0x0C, 0x06, 0x36, 0x10, 0x06, 0x36, 0x18, 0x06, 0x37, - 0x14, 0x06, 0x37, 0x0C, 0x06, 0x37, 0x10, 0x06, 0x37, 0x18, 0x06, 0x38, - 0x14, 0x06, 0x38, 0x0C, 0x06, 0x38, 0x10, 0x06, 0x38, 0x18, 0x06, 0x39, - 0x14, 0x06, 0x39, 0x0C, 0x06, 0x39, 0x10, 0x06, 0x39, 0x18, 0x06, 0x3A, - 0x14, 0x06, 0x3A, 0x0C, 0x06, 0x3A, 0x10, 0x06, 0x3A, 0x18, 0x06, 0x41, - 0x14, 0x06, 0x41, 0x0C, 0x06, 0x41, 0x10, 0x06, 0x41, 0x18, 0x06, 0x42, - 0x14, 0x06, 0x42, 0x0C, 0x06, 0x42, 0x10, 0x06, 0x42, 0x18, 0x06, 0x43, - 0x14, 0x06, 0x43, 0x0C, 0x06, 0x43, 0x10, 0x06, 0x43, 0x18, 0x06, 0x44, - 0x14, 0x06, 0x44, 0x0C, 0x06, 0x44, 0x10, 0x06, 0x44, 0x18, 0x06, 0x45, - 0x14, 0x06, 0x45, 0x0C, 0x06, 0x45, 0x10, 0x06, 0x45, 0x18, 0x06, 0x46, - 0x14, 0x06, 0x46, 0x0C, 0x06, 0x46, 0x10, 0x06, 0x46, 0x18, 0x06, 0x47, - 0x14, 0x06, 0x47, 0x0C, 0x06, 0x47, 0x10, 0x06, 0x47, 0x18, 0x06, 0x48, - 0x14, 0x06, 0x48, 0x18, 0x06, 0x49, 0x14, 0x06, 0x49, 0x18, 0x06, 0x4A, - 0x14, 0x06, 0x4A, 0x0C, 0x06, 0x4A, 0x10, 0x06, 0x4A, 0x98, 0x06, 0x44, - 0x00, 0x06, 0x22, 0x94, 0x06, 0x44, 0x00, 0x06, 0x22, 0x98, 0x06, 0x44, - 0x00, 0x06, 0x23, 0x94, 0x06, 0x44, 0x00, 0x06, 0x23, 0x98, 0x06, 0x44, - 0x00, 0x06, 0x25, 0x94, 0x06, 0x44, 0x00, 0x06, 0x25, 0x98, 0x06, 0x44, - 0x00, 0x06, 0x27, 0x94, 0x06, 0x44, 0x00, 0x06, 0x27, 0x2C, 0x00, 0x21, - 0x2C, 0x00, 0x22, 0x2C, 0x00, 0x23, 0x2C, 0x00, 0x24, 0x2C, 0x00, 0x25, - 0x2C, 0x00, 0x26, 0x2C, 0x00, 0x27, 0x2C, 0x00, 0x28, 0x2C, 0x00, 0x29, - 0x2C, 0x00, 0x2A, 0x2C, 0x00, 0x2B, 0x2C, 0x00, 0x2C, 0x2C, 0x00, 0x2D, - 0x2C, 0x00, 0x2E, 0x2C, 0x00, 0x2F, 0x2C, 0x00, 0x30, 0x2C, 0x00, 0x31, - 0x2C, 0x00, 0x32, 0x2C, 0x00, 0x33, 0x2C, 0x00, 0x34, 0x2C, 0x00, 0x35, - 0x2C, 0x00, 0x36, 0x2C, 0x00, 0x37, 0x2C, 0x00, 0x38, 0x2C, 0x00, 0x39, - 0x2C, 0x00, 0x3A, 0x2C, 0x00, 0x3B, 0x2C, 0x00, 0x3C, 0x2C, 0x00, 0x3D, - 0x2C, 0x00, 0x3E, 0x2C, 0x00, 0x3F, 0x2C, 0x00, 0x40, 0x2C, 0x00, 0x41, - 0x2C, 0x00, 0x42, 0x2C, 0x00, 0x43, 0x2C, 0x00, 0x44, 0x2C, 0x00, 0x45, - 0x2C, 0x00, 0x46, 0x2C, 0x00, 0x47, 0x2C, 0x00, 0x48, 0x2C, 0x00, 0x49, - 0x2C, 0x00, 0x4A, 0x2C, 0x00, 0x4B, 0x2C, 0x00, 0x4C, 0x2C, 0x00, 0x4D, - 0x2C, 0x00, 0x4E, 0x2C, 0x00, 0x4F, 0x2C, 0x00, 0x50, 0x2C, 0x00, 0x51, - 0x2C, 0x00, 0x52, 0x2C, 0x00, 0x53, 0x2C, 0x00, 0x54, 0x2C, 0x00, 0x55, - 0x2C, 0x00, 0x56, 0x2C, 0x00, 0x57, 0x2C, 0x00, 0x58, 0x2C, 0x00, 0x59, - 0x2C, 0x00, 0x5A, 0x2C, 0x00, 0x5B, 0x2C, 0x00, 0x5C, 0x2C, 0x00, 0x5D, - 0x2C, 0x00, 0x5E, 0x2C, 0x00, 0x5F, 0x2C, 0x00, 0x60, 0x2C, 0x00, 0x61, - 0x2C, 0x00, 0x62, 0x2C, 0x00, 0x63, 0x2C, 0x00, 0x64, 0x2C, 0x00, 0x65, - 0x2C, 0x00, 0x66, 0x2C, 0x00, 0x67, 0x2C, 0x00, 0x68, 0x2C, 0x00, 0x69, - 0x2C, 0x00, 0x6A, 0x2C, 0x00, 0x6B, 0x2C, 0x00, 0x6C, 0x2C, 0x00, 0x6D, - 0x2C, 0x00, 0x6E, 0x2C, 0x00, 0x6F, 0x2C, 0x00, 0x70, 0x2C, 0x00, 0x71, - 0x2C, 0x00, 0x72, 0x2C, 0x00, 0x73, 0x2C, 0x00, 0x74, 0x2C, 0x00, 0x75, - 0x2C, 0x00, 0x76, 0x2C, 0x00, 0x77, 0x2C, 0x00, 0x78, 0x2C, 0x00, 0x79, - 0x2C, 0x00, 0x7A, 0x2C, 0x00, 0x7B, 0x2C, 0x00, 0x7C, 0x2C, 0x00, 0x7D, - 0x2C, 0x00, 0x7E, 0x2C, 0x29, 0x85, 0x2C, 0x29, 0x86, 0x30, 0x30, 0x02, - 0x30, 0x30, 0x0C, 0x30, 0x30, 0x0D, 0x30, 0x30, 0x01, 0x30, 0x30, 0xFB, - 0x30, 0x30, 0xF2, 0x30, 0x30, 0xA1, 0x30, 0x30, 0xA3, 0x30, 0x30, 0xA5, - 0x30, 0x30, 0xA7, 0x30, 0x30, 0xA9, 0x30, 0x30, 0xE3, 0x30, 0x30, 0xE5, - 0x30, 0x30, 0xE7, 0x30, 0x30, 0xC3, 0x30, 0x30, 0xFC, 0x30, 0x30, 0xA2, - 0x30, 0x30, 0xA4, 0x30, 0x30, 0xA6, 0x30, 0x30, 0xA8, 0x30, 0x30, 0xAA, - 0x30, 0x30, 0xAB, 0x30, 0x30, 0xAD, 0x30, 0x30, 0xAF, 0x30, 0x30, 0xB1, - 0x30, 0x30, 0xB3, 0x30, 0x30, 0xB5, 0x30, 0x30, 0xB7, 0x30, 0x30, 0xB9, - 0x30, 0x30, 0xBB, 0x30, 0x30, 0xBD, 0x30, 0x30, 0xBF, 0x30, 0x30, 0xC1, - 0x30, 0x30, 0xC4, 0x30, 0x30, 0xC6, 0x30, 0x30, 0xC8, 0x30, 0x30, 0xCA, - 0x30, 0x30, 0xCB, 0x30, 0x30, 0xCC, 0x30, 0x30, 0xCD, 0x30, 0x30, 0xCE, - 0x30, 0x30, 0xCF, 0x30, 0x30, 0xD2, 0x30, 0x30, 0xD5, 0x30, 0x30, 0xD8, - 0x30, 0x30, 0xDB, 0x30, 0x30, 0xDE, 0x30, 0x30, 0xDF, 0x30, 0x30, 0xE0, - 0x30, 0x30, 0xE1, 0x30, 0x30, 0xE2, 0x30, 0x30, 0xE4, 0x30, 0x30, 0xE6, - 0x30, 0x30, 0xE8, 0x30, 0x30, 0xE9, 0x30, 0x30, 0xEA, 0x30, 0x30, 0xEB, - 0x30, 0x30, 0xEC, 0x30, 0x30, 0xED, 0x30, 0x30, 0xEF, 0x30, 0x30, 0xF3, - 0x30, 0x30, 0x99, 0x30, 0x30, 0x9A, 0x30, 0x31, 0x64, 0x30, 0x31, 0x31, - 0x30, 0x31, 0x32, 0x30, 0x31, 0x33, 0x30, 0x31, 0x34, 0x30, 0x31, 0x35, - 0x30, 0x31, 0x36, 0x30, 0x31, 0x37, 0x30, 0x31, 0x38, 0x30, 0x31, 0x39, - 0x30, 0x31, 0x3A, 0x30, 0x31, 0x3B, 0x30, 0x31, 0x3C, 0x30, 0x31, 0x3D, - 0x30, 0x31, 0x3E, 0x30, 0x31, 0x3F, 0x30, 0x31, 0x40, 0x30, 0x31, 0x41, - 0x30, 0x31, 0x42, 0x30, 0x31, 0x43, 0x30, 0x31, 0x44, 0x30, 0x31, 0x45, - 0x30, 0x31, 0x46, 0x30, 0x31, 0x47, 0x30, 0x31, 0x48, 0x30, 0x31, 0x49, - 0x30, 0x31, 0x4A, 0x30, 0x31, 0x4B, 0x30, 0x31, 0x4C, 0x30, 0x31, 0x4D, - 0x30, 0x31, 0x4E, 0x30, 0x31, 0x4F, 0x30, 0x31, 0x50, 0x30, 0x31, 0x51, - 0x30, 0x31, 0x52, 0x30, 0x31, 0x53, 0x30, 0x31, 0x54, 0x30, 0x31, 0x55, - 0x30, 0x31, 0x56, 0x30, 0x31, 0x57, 0x30, 0x31, 0x58, 0x30, 0x31, 0x59, - 0x30, 0x31, 0x5A, 0x30, 0x31, 0x5B, 0x30, 0x31, 0x5C, 0x30, 0x31, 0x5D, - 0x30, 0x31, 0x5E, 0x30, 0x31, 0x5F, 0x30, 0x31, 0x60, 0x30, 0x31, 0x61, - 0x30, 0x31, 0x62, 0x30, 0x31, 0x63, 0x2C, 0x00, 0xA2, 0x2C, 0x00, 0xA3, - 0x2C, 0x00, 0xAC, 0x2C, 0x00, 0xAF, 0x2C, 0x00, 0xA6, 0x2C, 0x00, 0xA5, - 0x2C, 0x20, 0xA9, 0x30, 0x25, 0x02, 0x30, 0x21, 0x90, 0x30, 0x21, 0x91, - 0x30, 0x21, 0x92, 0x30, 0x21, 0x93, 0x30, 0x25, 0xA0, 0x30, 0x25, 0xCB, - 0x81, 0x10, 0x99, 0x01, 0x10, 0xBA, 0x81, 0x10, 0x9B, 0x01, 0x10, 0xBA, - 0x81, 0x10, 0xA5, 0x01, 0x10, 0xBA, 0x81, 0x11, 0x31, 0x01, 0x11, 0x27, - 0x81, 0x11, 0x32, 0x01, 0x11, 0x27, 0x81, 0x13, 0x47, 0x01, 0x13, 0x3E, - 0x81, 0x13, 0x47, 0x01, 0x13, 0x57, 0x81, 0x14, 0xB9, 0x01, 0x14, 0xBA, - 0x81, 0x14, 0xB9, 0x01, 0x14, 0xB0, 0x81, 0x14, 0xB9, 0x01, 0x14, 0xBD, - 0x81, 0x15, 0xB8, 0x01, 0x15, 0xAF, 0x81, 0x15, 0xB9, 0x01, 0x15, 0xAF, - 0x81, 0xD1, 0x57, 0x01, 0xD1, 0x65, 0x81, 0xD1, 0x58, 0x01, 0xD1, 0x65, - 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x6E, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x6F, - 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x70, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x71, - 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x72, 0x81, 0xD1, 0xB9, 0x01, 0xD1, 0x65, - 0x81, 0xD1, 0xBA, 0x01, 0xD1, 0x65, 0x81, 0xD1, 0xBB, 0x01, 0xD1, 0x6E, - 0x81, 0xD1, 0xBC, 0x01, 0xD1, 0x6E, 0x81, 0xD1, 0xBB, 0x01, 0xD1, 0x6F, - 0x81, 0xD1, 0xBC, 0x01, 0xD1, 0x6F, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, - 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, - 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, - 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, - 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, - 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, - 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, - 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, - 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, - 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, - 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, - 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, - 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, - 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, - 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, - 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, - 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, - 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, - 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, - 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x69, - 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, - 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, - 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, - 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, - 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, - 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, - 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, - 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, - 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, - 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, - 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, - 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, - 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, - 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, - 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, - 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, - 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, - 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, - 0x04, 0x00, 0x47, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4E, - 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x53, - 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, - 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, - 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x66, - 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, - 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x70, - 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, - 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, - 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, - 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, - 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, - 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, - 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, - 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, - 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, - 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, - 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, - 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, - 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, - 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, - 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, - 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, - 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, - 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, - 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, - 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x61, - 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, - 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, - 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, - 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, - 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, - 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, - 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x44, - 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x49, - 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, - 0x04, 0x00, 0x4F, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, - 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, - 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, - 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, - 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, - 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, - 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, - 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, - 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, - 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, - 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, - 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, - 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, - 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, - 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, - 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, - 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, - 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, - 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, - 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, - 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, - 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, - 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, - 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, - 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, - 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, - 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, - 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, - 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, - 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, - 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, - 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, - 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, - 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, - 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, - 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, - 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, - 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, - 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, - 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, - 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, - 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, - 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, - 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, - 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, - 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, - 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, - 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, - 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, - 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, - 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, - 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, - 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, - 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, - 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, - 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, - 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, - 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, - 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, - 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, - 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, - 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, - 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, - 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, - 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, - 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, - 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, - 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, - 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, - 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, - 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, - 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, - 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, - 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, - 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, - 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, - 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, - 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, - 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, - 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, - 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x01, 0x31, 0x04, 0x02, 0x37, - 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, - 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, - 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, - 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, - 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, - 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, - 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, - 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, - 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, - 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, - 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, - 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, - 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, - 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, - 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, - 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, - 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, - 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, - 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, - 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, - 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, - 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, - 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, - 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, - 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, - 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, - 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, - 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, - 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, - 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, - 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, - 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, - 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, - 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, - 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, - 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, - 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, - 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, - 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, - 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, - 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, - 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, - 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, - 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, - 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, - 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, - 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, - 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, - 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, - 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, - 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, - 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, - 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, - 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, - 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, - 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, - 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, - 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, - 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, - 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, - 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, - 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, - 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, - 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, - 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, - 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, - 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, - 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, - 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, - 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, - 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, - 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, - 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0xDC, 0x04, 0x03, 0xDD, - 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, - 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, - 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, - 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, - 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, - 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, - 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, - 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, - 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, - 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, - 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, - 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, - 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x06, 0x27, 0x04, 0x06, 0x28, - 0x04, 0x06, 0x2C, 0x04, 0x06, 0x2F, 0x04, 0x06, 0x48, 0x04, 0x06, 0x32, - 0x04, 0x06, 0x2D, 0x04, 0x06, 0x37, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x43, - 0x04, 0x06, 0x44, 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, - 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, - 0x04, 0x06, 0x31, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, - 0x04, 0x06, 0x2E, 0x04, 0x06, 0x30, 0x04, 0x06, 0x36, 0x04, 0x06, 0x38, - 0x04, 0x06, 0x3A, 0x04, 0x06, 0x6E, 0x04, 0x06, 0xBA, 0x04, 0x06, 0xA1, - 0x04, 0x06, 0x6F, 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x47, - 0x04, 0x06, 0x2D, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x43, 0x04, 0x06, 0x44, - 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, - 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x34, - 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x36, - 0x04, 0x06, 0x3A, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x4A, - 0x04, 0x06, 0x44, 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, - 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2E, - 0x04, 0x06, 0x36, 0x04, 0x06, 0x3A, 0x04, 0x06, 0xBA, 0x04, 0x06, 0x6F, - 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x47, 0x04, 0x06, 0x2D, - 0x04, 0x06, 0x37, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x43, 0x04, 0x06, 0x45, - 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, - 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, - 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x36, 0x04, 0x06, 0x38, - 0x04, 0x06, 0x3A, 0x04, 0x06, 0x6E, 0x04, 0x06, 0xA1, 0x04, 0x06, 0x27, - 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, 0x04, 0x06, 0x2F, 0x04, 0x06, 0x47, - 0x04, 0x06, 0x48, 0x04, 0x06, 0x32, 0x04, 0x06, 0x2D, 0x04, 0x06, 0x37, - 0x04, 0x06, 0x4A, 0x04, 0x06, 0x44, 0x04, 0x06, 0x45, 0x04, 0x06, 0x46, - 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, 0x04, 0x06, 0x35, - 0x04, 0x06, 0x42, 0x04, 0x06, 0x31, 0x04, 0x06, 0x34, 0x04, 0x06, 0x2A, - 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x30, 0x04, 0x06, 0x36, - 0x04, 0x06, 0x38, 0x04, 0x06, 0x3A, 0x04, 0x06, 0x28, 0x04, 0x06, 0x2C, - 0x04, 0x06, 0x2F, 0x04, 0x06, 0x48, 0x04, 0x06, 0x32, 0x04, 0x06, 0x2D, - 0x04, 0x06, 0x37, 0x04, 0x06, 0x4A, 0x04, 0x06, 0x44, 0x04, 0x06, 0x45, - 0x04, 0x06, 0x46, 0x04, 0x06, 0x33, 0x04, 0x06, 0x39, 0x04, 0x06, 0x41, - 0x04, 0x06, 0x35, 0x04, 0x06, 0x42, 0x04, 0x06, 0x31, 0x04, 0x06, 0x34, - 0x04, 0x06, 0x2A, 0x04, 0x06, 0x2B, 0x04, 0x06, 0x2E, 0x04, 0x06, 0x30, - 0x04, 0x06, 0x36, 0x04, 0x06, 0x38, 0x04, 0x06, 0x3A, 0xC0, 0x00, 0x30, - 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x30, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x31, - 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x32, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x33, - 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x34, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x35, - 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x36, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x37, - 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x38, 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x39, - 0x00, 0x00, 0x2C, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x41, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x42, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x43, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x44, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x45, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x46, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x47, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x48, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x49, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4A, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x4B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4C, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4D, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x4E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x4F, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x50, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x51, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x52, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x53, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x54, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x55, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x56, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, - 0x80, 0x00, 0x57, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x58, - 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x59, 0x00, 0x00, 0x29, - 0xC0, 0x00, 0x28, 0x80, 0x00, 0x5A, 0x00, 0x00, 0x29, 0xC0, 0x30, 0x14, - 0x80, 0x00, 0x53, 0x00, 0x30, 0x15, 0x1C, 0x00, 0x43, 0x1C, 0x00, 0x52, - 0x9C, 0x00, 0x43, 0x00, 0x00, 0x44, 0x9C, 0x00, 0x57, 0x00, 0x00, 0x5A, - 0x38, 0x00, 0x41, 0x38, 0x00, 0x42, 0x38, 0x00, 0x43, 0x38, 0x00, 0x44, - 0x38, 0x00, 0x45, 0x38, 0x00, 0x46, 0x38, 0x00, 0x47, 0x38, 0x00, 0x48, - 0x38, 0x00, 0x49, 0x38, 0x00, 0x4A, 0x38, 0x00, 0x4B, 0x38, 0x00, 0x4C, - 0x38, 0x00, 0x4D, 0x38, 0x00, 0x4E, 0x38, 0x00, 0x4F, 0x38, 0x00, 0x50, - 0x38, 0x00, 0x51, 0x38, 0x00, 0x52, 0x38, 0x00, 0x53, 0x38, 0x00, 0x54, - 0x38, 0x00, 0x55, 0x38, 0x00, 0x56, 0x38, 0x00, 0x57, 0x38, 0x00, 0x58, - 0x38, 0x00, 0x59, 0x38, 0x00, 0x5A, 0xB8, 0x00, 0x48, 0x00, 0x00, 0x56, - 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x53, 0x00, 0x00, 0x44, - 0xB8, 0x00, 0x53, 0x00, 0x00, 0x53, 0xB8, 0x00, 0x50, 0x80, 0x00, 0x50, - 0x00, 0x00, 0x56, 0xB8, 0x00, 0x57, 0x00, 0x00, 0x43, 0xA0, 0x00, 0x4D, - 0x00, 0x00, 0x43, 0xA0, 0x00, 0x4D, 0x00, 0x00, 0x44, 0xB8, 0x00, 0x44, - 0x00, 0x00, 0x4A, 0xB8, 0x30, 0x7B, 0x00, 0x30, 0x4B, 0xB8, 0x30, 0xB3, - 0x00, 0x30, 0xB3, 0x38, 0x30, 0xB5, 0x38, 0x62, 0x4B, 0x38, 0x5B, 0x57, - 0x38, 0x53, 0xCC, 0x38, 0x30, 0xC7, 0x38, 0x4E, 0x8C, 0x38, 0x59, 0x1A, - 0x38, 0x89, 0xE3, 0x38, 0x59, 0x29, 0x38, 0x4E, 0xA4, 0x38, 0x66, 0x20, - 0x38, 0x71, 0x21, 0x38, 0x65, 0x99, 0x38, 0x52, 0x4D, 0x38, 0x5F, 0x8C, - 0x38, 0x51, 0x8D, 0x38, 0x65, 0xB0, 0x38, 0x52, 0x1D, 0x38, 0x7D, 0x42, - 0x38, 0x75, 0x1F, 0x38, 0x8C, 0xA9, 0x38, 0x58, 0xF0, 0x38, 0x54, 0x39, - 0x38, 0x6F, 0x14, 0x38, 0x62, 0x95, 0x38, 0x63, 0x55, 0x38, 0x4E, 0x00, - 0x38, 0x4E, 0x09, 0x38, 0x90, 0x4A, 0x38, 0x5D, 0xE6, 0x38, 0x4E, 0x2D, - 0x38, 0x53, 0xF3, 0x38, 0x63, 0x07, 0x38, 0x8D, 0x70, 0x38, 0x62, 0x53, - 0x38, 0x79, 0x81, 0x38, 0x7A, 0x7A, 0x38, 0x54, 0x08, 0x38, 0x6E, 0x80, - 0x38, 0x67, 0x09, 0x38, 0x67, 0x08, 0x38, 0x75, 0x33, 0x38, 0x52, 0x72, - 0x38, 0x55, 0xB6, 0xC0, 0x30, 0x14, 0x80, 0x67, 0x2C, 0x00, 0x30, 0x15, - 0xC0, 0x30, 0x14, 0x80, 0x4E, 0x09, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, - 0x80, 0x4E, 0x8C, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x5B, 0x89, - 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x70, 0xB9, 0x00, 0x30, 0x15, - 0xC0, 0x30, 0x14, 0x80, 0x62, 0x53, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, - 0x80, 0x76, 0xD7, 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x52, 0xDD, - 0x00, 0x30, 0x15, 0xC0, 0x30, 0x14, 0x80, 0x65, 0x57, 0x00, 0x30, 0x15, - 0x1C, 0x5F, 0x97, 0x1C, 0x53, 0xEF, 0x00, 0x4E, 0x3D, 0x00, 0x4E, 0x38, - 0x00, 0x4E, 0x41, 0x02, 0x01, 0x22, 0x00, 0x4F, 0x60, 0x00, 0x4F, 0xAE, - 0x00, 0x4F, 0xBB, 0x00, 0x50, 0x02, 0x00, 0x50, 0x7A, 0x00, 0x50, 0x99, - 0x00, 0x50, 0xE7, 0x00, 0x50, 0xCF, 0x00, 0x34, 0x9E, 0x02, 0x06, 0x3A, - 0x00, 0x51, 0x4D, 0x00, 0x51, 0x54, 0x00, 0x51, 0x64, 0x00, 0x51, 0x77, - 0x02, 0x05, 0x1C, 0x00, 0x34, 0xB9, 0x00, 0x51, 0x67, 0x00, 0x51, 0x8D, - 0x02, 0x05, 0x4B, 0x00, 0x51, 0x97, 0x00, 0x51, 0xA4, 0x00, 0x4E, 0xCC, - 0x00, 0x51, 0xAC, 0x00, 0x51, 0xB5, 0x02, 0x91, 0xDF, 0x00, 0x51, 0xF5, - 0x00, 0x52, 0x03, 0x00, 0x34, 0xDF, 0x00, 0x52, 0x3B, 0x00, 0x52, 0x46, - 0x00, 0x52, 0x72, 0x00, 0x52, 0x77, 0x00, 0x35, 0x15, 0x00, 0x52, 0xC7, - 0x00, 0x52, 0xC9, 0x00, 0x52, 0xE4, 0x00, 0x52, 0xFA, 0x00, 0x53, 0x05, - 0x00, 0x53, 0x06, 0x00, 0x53, 0x17, 0x00, 0x53, 0x49, 0x00, 0x53, 0x51, - 0x00, 0x53, 0x5A, 0x00, 0x53, 0x73, 0x00, 0x53, 0x7D, 0x00, 0x53, 0x7F, - 0x00, 0x53, 0x7F, 0x00, 0x53, 0x7F, 0x02, 0x0A, 0x2C, 0x00, 0x70, 0x70, - 0x00, 0x53, 0xCA, 0x00, 0x53, 0xDF, 0x02, 0x0B, 0x63, 0x00, 0x53, 0xEB, - 0x00, 0x53, 0xF1, 0x00, 0x54, 0x06, 0x00, 0x54, 0x9E, 0x00, 0x54, 0x38, - 0x00, 0x54, 0x48, 0x00, 0x54, 0x68, 0x00, 0x54, 0xA2, 0x00, 0x54, 0xF6, - 0x00, 0x55, 0x10, 0x00, 0x55, 0x53, 0x00, 0x55, 0x63, 0x00, 0x55, 0x84, - 0x00, 0x55, 0x84, 0x00, 0x55, 0x99, 0x00, 0x55, 0xAB, 0x00, 0x55, 0xB3, - 0x00, 0x55, 0xC2, 0x00, 0x57, 0x16, 0x00, 0x56, 0x06, 0x00, 0x57, 0x17, - 0x00, 0x56, 0x51, 0x00, 0x56, 0x74, 0x00, 0x52, 0x07, 0x00, 0x58, 0xEE, - 0x00, 0x57, 0xCE, 0x00, 0x57, 0xF4, 0x00, 0x58, 0x0D, 0x00, 0x57, 0x8B, - 0x00, 0x58, 0x32, 0x00, 0x58, 0x31, 0x00, 0x58, 0xAC, 0x02, 0x14, 0xE4, - 0x00, 0x58, 0xF2, 0x00, 0x58, 0xF7, 0x00, 0x59, 0x06, 0x00, 0x59, 0x1A, - 0x00, 0x59, 0x22, 0x00, 0x59, 0x62, 0x02, 0x16, 0xA8, 0x02, 0x16, 0xEA, - 0x00, 0x59, 0xEC, 0x00, 0x5A, 0x1B, 0x00, 0x5A, 0x27, 0x00, 0x59, 0xD8, - 0x00, 0x5A, 0x66, 0x00, 0x36, 0xEE, 0x00, 0x36, 0xFC, 0x00, 0x5B, 0x08, - 0x00, 0x5B, 0x3E, 0x00, 0x5B, 0x3E, 0x02, 0x19, 0xC8, 0x00, 0x5B, 0xC3, - 0x00, 0x5B, 0xD8, 0x00, 0x5B, 0xE7, 0x00, 0x5B, 0xF3, 0x02, 0x1B, 0x18, - 0x00, 0x5B, 0xFF, 0x00, 0x5C, 0x06, 0x00, 0x5F, 0x53, 0x00, 0x5C, 0x22, - 0x00, 0x37, 0x81, 0x00, 0x5C, 0x60, 0x00, 0x5C, 0x6E, 0x00, 0x5C, 0xC0, - 0x00, 0x5C, 0x8D, 0x02, 0x1D, 0xE4, 0x00, 0x5D, 0x43, 0x02, 0x1D, 0xE6, - 0x00, 0x5D, 0x6E, 0x00, 0x5D, 0x6B, 0x00, 0x5D, 0x7C, 0x00, 0x5D, 0xE1, - 0x00, 0x5D, 0xE2, 0x00, 0x38, 0x2F, 0x00, 0x5D, 0xFD, 0x00, 0x5E, 0x28, - 0x00, 0x5E, 0x3D, 0x00, 0x5E, 0x69, 0x00, 0x38, 0x62, 0x02, 0x21, 0x83, - 0x00, 0x38, 0x7C, 0x00, 0x5E, 0xB0, 0x00, 0x5E, 0xB3, 0x00, 0x5E, 0xB6, - 0x00, 0x5E, 0xCA, 0x02, 0xA3, 0x92, 0x00, 0x5E, 0xFE, 0x02, 0x23, 0x31, - 0x02, 0x23, 0x31, 0x00, 0x82, 0x01, 0x00, 0x5F, 0x22, 0x00, 0x5F, 0x22, - 0x00, 0x38, 0xC7, 0x02, 0x32, 0xB8, 0x02, 0x61, 0xDA, 0x00, 0x5F, 0x62, - 0x00, 0x5F, 0x6B, 0x00, 0x38, 0xE3, 0x00, 0x5F, 0x9A, 0x00, 0x5F, 0xCD, - 0x00, 0x5F, 0xD7, 0x00, 0x5F, 0xF9, 0x00, 0x60, 0x81, 0x00, 0x39, 0x3A, - 0x00, 0x39, 0x1C, 0x00, 0x60, 0x94, 0x02, 0x26, 0xD4, 0x00, 0x60, 0xC7, - 0x00, 0x61, 0x48, 0x00, 0x61, 0x4C, 0x00, 0x61, 0x4E, 0x00, 0x61, 0x4C, - 0x00, 0x61, 0x7A, 0x00, 0x61, 0x8E, 0x00, 0x61, 0xB2, 0x00, 0x61, 0xA4, - 0x00, 0x61, 0xAF, 0x00, 0x61, 0xDE, 0x00, 0x61, 0xF2, 0x00, 0x61, 0xF6, - 0x00, 0x62, 0x10, 0x00, 0x62, 0x1B, 0x00, 0x62, 0x5D, 0x00, 0x62, 0xB1, - 0x00, 0x62, 0xD4, 0x00, 0x63, 0x50, 0x02, 0x2B, 0x0C, 0x00, 0x63, 0x3D, - 0x00, 0x62, 0xFC, 0x00, 0x63, 0x68, 0x00, 0x63, 0x83, 0x00, 0x63, 0xE4, - 0x02, 0x2B, 0xF1, 0x00, 0x64, 0x22, 0x00, 0x63, 0xC5, 0x00, 0x63, 0xA9, - 0x00, 0x3A, 0x2E, 0x00, 0x64, 0x69, 0x00, 0x64, 0x7E, 0x00, 0x64, 0x9D, - 0x00, 0x64, 0x77, 0x00, 0x3A, 0x6C, 0x00, 0x65, 0x4F, 0x00, 0x65, 0x6C, - 0x02, 0x30, 0x0A, 0x00, 0x65, 0xE3, 0x00, 0x66, 0xF8, 0x00, 0x66, 0x49, - 0x00, 0x3B, 0x19, 0x00, 0x66, 0x91, 0x00, 0x3B, 0x08, 0x00, 0x3A, 0xE4, - 0x00, 0x51, 0x92, 0x00, 0x51, 0x95, 0x00, 0x67, 0x00, 0x00, 0x66, 0x9C, - 0x00, 0x80, 0xAD, 0x00, 0x43, 0xD9, 0x00, 0x67, 0x17, 0x00, 0x67, 0x1B, - 0x00, 0x67, 0x21, 0x00, 0x67, 0x5E, 0x00, 0x67, 0x53, 0x02, 0x33, 0xC3, - 0x00, 0x3B, 0x49, 0x00, 0x67, 0xFA, 0x00, 0x67, 0x85, 0x00, 0x68, 0x52, - 0x00, 0x68, 0x85, 0x02, 0x34, 0x6D, 0x00, 0x68, 0x8E, 0x00, 0x68, 0x1F, - 0x00, 0x69, 0x14, 0x00, 0x3B, 0x9D, 0x00, 0x69, 0x42, 0x00, 0x69, 0xA3, - 0x00, 0x69, 0xEA, 0x00, 0x6A, 0xA8, 0x02, 0x36, 0xA3, 0x00, 0x6A, 0xDB, - 0x00, 0x3C, 0x18, 0x00, 0x6B, 0x21, 0x02, 0x38, 0xA7, 0x00, 0x6B, 0x54, - 0x00, 0x3C, 0x4E, 0x00, 0x6B, 0x72, 0x00, 0x6B, 0x9F, 0x00, 0x6B, 0xBA, - 0x00, 0x6B, 0xBB, 0x02, 0x3A, 0x8D, 0x02, 0x1D, 0x0B, 0x02, 0x3A, 0xFA, - 0x00, 0x6C, 0x4E, 0x02, 0x3C, 0xBC, 0x00, 0x6C, 0xBF, 0x00, 0x6C, 0xCD, - 0x00, 0x6C, 0x67, 0x00, 0x6D, 0x16, 0x00, 0x6D, 0x3E, 0x00, 0x6D, 0x77, - 0x00, 0x6D, 0x41, 0x00, 0x6D, 0x69, 0x00, 0x6D, 0x78, 0x00, 0x6D, 0x85, - 0x02, 0x3D, 0x1E, 0x00, 0x6D, 0x34, 0x00, 0x6E, 0x2F, 0x00, 0x6E, 0x6E, - 0x00, 0x3D, 0x33, 0x00, 0x6E, 0xCB, 0x00, 0x6E, 0xC7, 0x02, 0x3E, 0xD1, - 0x00, 0x6D, 0xF9, 0x00, 0x6F, 0x6E, 0x02, 0x3F, 0x5E, 0x02, 0x3F, 0x8E, - 0x00, 0x6F, 0xC6, 0x00, 0x70, 0x39, 0x00, 0x70, 0x1E, 0x00, 0x70, 0x1B, - 0x00, 0x3D, 0x96, 0x00, 0x70, 0x4A, 0x00, 0x70, 0x7D, 0x00, 0x70, 0x77, - 0x00, 0x70, 0xAD, 0x02, 0x05, 0x25, 0x00, 0x71, 0x45, 0x02, 0x42, 0x63, - 0x00, 0x71, 0x9C, 0x02, 0x43, 0xAB, 0x00, 0x72, 0x28, 0x00, 0x72, 0x35, - 0x00, 0x72, 0x50, 0x02, 0x46, 0x08, 0x00, 0x72, 0x80, 0x00, 0x72, 0x95, - 0x02, 0x47, 0x35, 0x02, 0x48, 0x14, 0x00, 0x73, 0x7A, 0x00, 0x73, 0x8B, - 0x00, 0x3E, 0xAC, 0x00, 0x73, 0xA5, 0x00, 0x3E, 0xB8, 0x00, 0x3E, 0xB8, - 0x00, 0x74, 0x47, 0x00, 0x74, 0x5C, 0x00, 0x74, 0x71, 0x00, 0x74, 0x85, - 0x00, 0x74, 0xCA, 0x00, 0x3F, 0x1B, 0x00, 0x75, 0x24, 0x02, 0x4C, 0x36, - 0x00, 0x75, 0x3E, 0x02, 0x4C, 0x92, 0x00, 0x75, 0x70, 0x02, 0x21, 0x9F, - 0x00, 0x76, 0x10, 0x02, 0x4F, 0xA1, 0x02, 0x4F, 0xB8, 0x02, 0x50, 0x44, - 0x00, 0x3F, 0xFC, 0x00, 0x40, 0x08, 0x00, 0x76, 0xF4, 0x02, 0x50, 0xF3, - 0x02, 0x50, 0xF2, 0x02, 0x51, 0x19, 0x02, 0x51, 0x33, 0x00, 0x77, 0x1E, - 0x00, 0x77, 0x1F, 0x00, 0x77, 0x1F, 0x00, 0x77, 0x4A, 0x00, 0x40, 0x39, - 0x00, 0x77, 0x8B, 0x00, 0x40, 0x46, 0x00, 0x40, 0x96, 0x02, 0x54, 0x1D, - 0x00, 0x78, 0x4E, 0x00, 0x78, 0x8C, 0x00, 0x78, 0xCC, 0x00, 0x40, 0xE3, - 0x02, 0x56, 0x26, 0x00, 0x79, 0x56, 0x02, 0x56, 0x9A, 0x02, 0x56, 0xC5, - 0x00, 0x79, 0x8F, 0x00, 0x79, 0xEB, 0x00, 0x41, 0x2F, 0x00, 0x7A, 0x40, - 0x00, 0x7A, 0x4A, 0x00, 0x7A, 0x4F, 0x02, 0x59, 0x7C, 0x02, 0x5A, 0xA7, - 0x02, 0x5A, 0xA7, 0x00, 0x7A, 0xEE, 0x00, 0x42, 0x02, 0x02, 0x5B, 0xAB, - 0x00, 0x7B, 0xC6, 0x00, 0x7B, 0xC9, 0x00, 0x42, 0x27, 0x02, 0x5C, 0x80, - 0x00, 0x7C, 0xD2, 0x00, 0x42, 0xA0, 0x00, 0x7C, 0xE8, 0x00, 0x7C, 0xE3, - 0x00, 0x7D, 0x00, 0x02, 0x5F, 0x86, 0x00, 0x7D, 0x63, 0x00, 0x43, 0x01, - 0x00, 0x7D, 0xC7, 0x00, 0x7E, 0x02, 0x00, 0x7E, 0x45, 0x00, 0x43, 0x34, - 0x02, 0x62, 0x28, 0x02, 0x62, 0x47, 0x00, 0x43, 0x59, 0x02, 0x62, 0xD9, - 0x00, 0x7F, 0x7A, 0x02, 0x63, 0x3E, 0x00, 0x7F, 0x95, 0x00, 0x7F, 0xFA, - 0x00, 0x80, 0x05, 0x02, 0x64, 0xDA, 0x02, 0x65, 0x23, 0x00, 0x80, 0x60, - 0x02, 0x65, 0xA8, 0x00, 0x80, 0x70, 0x02, 0x33, 0x5F, 0x00, 0x43, 0xD5, - 0x00, 0x80, 0xB2, 0x00, 0x81, 0x03, 0x00, 0x44, 0x0B, 0x00, 0x81, 0x3E, - 0x00, 0x5A, 0xB5, 0x02, 0x67, 0xA7, 0x02, 0x67, 0xB5, 0x02, 0x33, 0x93, - 0x02, 0x33, 0x9C, 0x00, 0x82, 0x01, 0x00, 0x82, 0x04, 0x00, 0x8F, 0x9E, - 0x00, 0x44, 0x6B, 0x00, 0x82, 0x91, 0x00, 0x82, 0x8B, 0x00, 0x82, 0x9D, - 0x00, 0x52, 0xB3, 0x00, 0x82, 0xB1, 0x00, 0x82, 0xB3, 0x00, 0x82, 0xBD, - 0x00, 0x82, 0xE6, 0x02, 0x6B, 0x3C, 0x00, 0x82, 0xE5, 0x00, 0x83, 0x1D, - 0x00, 0x83, 0x63, 0x00, 0x83, 0xAD, 0x00, 0x83, 0x23, 0x00, 0x83, 0xBD, - 0x00, 0x83, 0xE7, 0x00, 0x84, 0x57, 0x00, 0x83, 0x53, 0x00, 0x83, 0xCA, - 0x00, 0x83, 0xCC, 0x00, 0x83, 0xDC, 0x02, 0x6C, 0x36, 0x02, 0x6D, 0x6B, - 0x02, 0x6C, 0xD5, 0x00, 0x45, 0x2B, 0x00, 0x84, 0xF1, 0x00, 0x84, 0xF3, - 0x00, 0x85, 0x16, 0x02, 0x73, 0xCA, 0x00, 0x85, 0x64, 0x02, 0x6F, 0x2C, - 0x00, 0x45, 0x5D, 0x00, 0x45, 0x61, 0x02, 0x6F, 0xB1, 0x02, 0x70, 0xD2, - 0x00, 0x45, 0x6B, 0x00, 0x86, 0x50, 0x00, 0x86, 0x5C, 0x00, 0x86, 0x67, - 0x00, 0x86, 0x69, 0x00, 0x86, 0xA9, 0x00, 0x86, 0x88, 0x00, 0x87, 0x0E, - 0x00, 0x86, 0xE2, 0x00, 0x87, 0x79, 0x00, 0x87, 0x28, 0x00, 0x87, 0x6B, - 0x00, 0x87, 0x86, 0x00, 0x45, 0xD7, 0x00, 0x87, 0xE1, 0x00, 0x88, 0x01, - 0x00, 0x45, 0xF9, 0x00, 0x88, 0x60, 0x00, 0x88, 0x63, 0x02, 0x76, 0x67, - 0x00, 0x88, 0xD7, 0x00, 0x88, 0xDE, 0x00, 0x46, 0x35, 0x00, 0x88, 0xFA, - 0x00, 0x34, 0xBB, 0x02, 0x78, 0xAE, 0x02, 0x79, 0x66, 0x00, 0x46, 0xBE, - 0x00, 0x46, 0xC7, 0x00, 0x8A, 0xA0, 0x00, 0x8A, 0xED, 0x00, 0x8B, 0x8A, - 0x00, 0x8C, 0x55, 0x02, 0x7C, 0xA8, 0x00, 0x8C, 0xAB, 0x00, 0x8C, 0xC1, - 0x00, 0x8D, 0x1B, 0x00, 0x8D, 0x77, 0x02, 0x7F, 0x2F, 0x02, 0x08, 0x04, - 0x00, 0x8D, 0xCB, 0x00, 0x8D, 0xBC, 0x00, 0x8D, 0xF0, 0x02, 0x08, 0xDE, - 0x00, 0x8E, 0xD4, 0x00, 0x8F, 0x38, 0x02, 0x85, 0xD2, 0x02, 0x85, 0xED, - 0x00, 0x90, 0x94, 0x00, 0x90, 0xF1, 0x00, 0x91, 0x11, 0x02, 0x87, 0x2E, - 0x00, 0x91, 0x1B, 0x00, 0x92, 0x38, 0x00, 0x92, 0xD7, 0x00, 0x92, 0xD8, - 0x00, 0x92, 0x7C, 0x00, 0x93, 0xF9, 0x00, 0x94, 0x15, 0x02, 0x8B, 0xFA, - 0x00, 0x95, 0x8B, 0x00, 0x49, 0x95, 0x00, 0x95, 0xB7, 0x02, 0x8D, 0x77, - 0x00, 0x49, 0xE6, 0x00, 0x96, 0xC3, 0x00, 0x5D, 0xB2, 0x00, 0x97, 0x23, - 0x02, 0x91, 0x45, 0x02, 0x92, 0x1A, 0x00, 0x4A, 0x6E, 0x00, 0x4A, 0x76, - 0x00, 0x97, 0xE0, 0x02, 0x94, 0x0A, 0x00, 0x4A, 0xB2, 0x02, 0x94, 0x96, - 0x00, 0x98, 0x0B, 0x00, 0x98, 0x0B, 0x00, 0x98, 0x29, 0x02, 0x95, 0xB6, - 0x00, 0x98, 0xE2, 0x00, 0x4B, 0x33, 0x00, 0x99, 0x29, 0x00, 0x99, 0xA7, - 0x00, 0x99, 0xC2, 0x00, 0x99, 0xFE, 0x00, 0x4B, 0xCE, 0x02, 0x9B, 0x30, - 0x00, 0x9B, 0x12, 0x00, 0x9C, 0x40, 0x00, 0x9C, 0xFD, 0x00, 0x4C, 0xCE, - 0x00, 0x4C, 0xED, 0x00, 0x9D, 0x67, 0x02, 0xA0, 0xCE, 0x00, 0x4C, 0xF8, - 0x02, 0xA1, 0x05, 0x02, 0xA2, 0x0E, 0x02, 0xA2, 0x91, 0x00, 0x9E, 0xBB, - 0x00, 0x4D, 0x56, 0x00, 0x9E, 0xF9, 0x00, 0x9E, 0xFE, 0x00, 0x9F, 0x05, - 0x00, 0x9F, 0x0F, 0x00, 0x9F, 0x16, 0x00, 0x9F, 0x3B, 0x02, 0xA6, 0x00 -}; - -const decomp_index_table_t gl_uninorm_decomp_index_table = -{ - { - 0, 32, 64, 96, 128, -1, 160, 192, - 224, 256, 288, 320, 352, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 384, 416, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 448, 480, - -1, -1, -1, -1, 512, 544, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 576, 608, -1, -1, - -1, -1, -1, 640, 672, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 704 - }, - { - -1, -1, -1, -1, -1, 0, 32, 64, - 96, 128, 160, 192, -1, 224, 256, 288, - 320, 352, -1, -1, -1, 384, 416, 448, - -1, -1, 480, 512, 544, 576, 608, 640, - 672, 704, 736, 768, -1, -1, 800, 832, - -1, -1, -1, -1, 864, -1, -1, -1, - -1, 896, -1, 928, -1, -1, 960, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 992, 1024, -1, -1, -1, 1056, -1, - -1, 1088, 1120, -1, -1, -1, -1, -1, - -1, -1, 1152, -1, 1184, -1, 1216, -1, - -1, -1, 1248, -1, -1, -1, 1280, -1, - -1, -1, 1312, -1, -1, -1, 1344, -1, - -1, 1376, -1, -1, -1, 1408, 1440, -1, - 1472, -1, 1504, 1536, 1568, 1600, -1, -1, - -1, 1632, -1, -1, -1, -1, -1, 1664, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 1696, 1728, 1760, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 1792, 1824, 1856, 1888, 1920, -1, -1, - 1952, 1984, 2016, 2048, 2080, 2112, 2144, 2176, - 2208, 2240, 2272, 2304, 2336, 2368, 2400, 2432, - 2464, 2496, 2528, 2560, 2592, 2624, -1, -1, - 2656, 2688, 2720, 2752, 2784, 2816, 2848, -1, - 2880, 2912, 2944, 2976, 3008, 3040, -1, 3072, - -1, 3104, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 3136, 3168, 3200, 3232, 3264, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 3296, -1, -1, 3328, -1, -1, 3360, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 3392, -1, -1, -1, -1, - -1, -1, -1, 3424, -1, -1, -1, -1, - -1, -1, -1, -1, 3456, -1, -1, 3488, - 3520, 3552, 3584, 3616, 3648, 3680, 3712, -1, - 3744, 3776, 3808, 3840, 3872, 3904, 3936, 3968, - -1, 4000, 4032, 4064, 4096, -1, -1, -1, - 4128, 4160, 4192, 4224, 4256, 4288, 4320, 4352, - 4384, 4416, 4448, 4480, 4512, 4544, 4576, 4608, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 4640, -1, -1, -1, - -1, -1, -1, 4672, -1, -1, -1, 4704, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 4736, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 4768, 4800, 4832, 4864, 4896, 4928, 4960, 4992, - 5024, 5056, 5088, 5120, 5152, 5184, 5216, -1, - 5248, 5280, 5312, 5344, 5376, 5408, 5440, 5472, - 5504, 5536, 5568, 5600, 5632, 5664, 5696, 5728, - 5760, 5792, 5824, 5856, 5888, 5920, 5952, 5984, - 6016, 6048, 6080, 6112, 6144, 6176, 6208, 6240, - 6272, 6304, 6336, 6368, 6400, 6432, 6464, 6496, - -1, -1, -1, -1, 6528, 6560, -1, -1, - -1, 6592, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 6624, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 6656, -1, -1, - -1, -1, -1, -1, -1, 6688, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 6720, 6752, -1, 6784, 6816, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 6848, 6880, 6912, 6944, 6976, 7008, 7040, 7072, - 7104, 7136, 7168, 7200, 7232, 7264, 7296, 7328, - 7360, 7392, 7424, 7456, 7488, 7520, 7552, 7584, - 7616, 7648, 7680, 7712, 7744, 7776, 7808, 7840, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 7872, 7904, 7936, 7968, 8000, 8032, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 8064, 8096, 8128, 8160, 8192, -1, -1, -1, - 8224, 8256, 8288, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 8320, 8352, 8384, 8416, 8448, 8480, 8512, 8544, - 8576, 8608, 8640, 8672, 8704, 8736, 8768, 8800, - 8832, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 - }, - { - 32768, -1, -1, -1, -1, -1, -1, -1, - 32769, -1, 32771, -1, -1, -1, -1, 32772, - -1, -1, 32774, 32775, 32776, 32778, -1, -1, - 32779, 32781, 32782, -1, 32783, 32786, 32789, -1, - 24, 26, 28, 30, 32, 34, -1, 36, - 38, 40, 42, 44, 46, 48, 50, 52, - -1, 54, 56, 58, 60, 62, 64, -1, - -1, 66, 68, 70, 72, 74, -1, -1, - 76, 78, 80, 82, 84, 86, -1, 88, - 90, 92, 94, 96, 98, 100, 102, 104, - -1, 106, 108, 110, 112, 114, 116, -1, - -1, 118, 120, 122, 124, 126, -1, 128, - 130, 132, 134, 136, 138, 140, 142, 144, - 146, 148, 150, 152, 154, 156, 158, 160, - -1, -1, 162, 164, 166, 168, 170, 172, - 174, 176, 178, 180, 182, 184, 186, 188, - 190, 192, 194, 196, 198, 200, -1, -1, - 202, 204, 206, 208, 210, 212, 214, 216, - 218, -1, 32988, 32990, 224, 226, 228, 230, - -1, 232, 234, 236, 238, 240, 242, 33012, - 33014, -1, -1, 248, 250, 252, 254, 256, - 258, 33028, -1, -1, 262, 264, 266, 268, - 270, 272, -1, -1, 274, 276, 278, 280, - 282, 284, 286, 288, 290, 292, 294, 296, - 298, 300, 302, 304, 306, 308, -1, -1, - 310, 312, 314, 316, 318, 320, 322, 324, - 326, 328, 330, 332, 334, 336, 338, 340, - 342, 344, 346, 348, 350, 352, 354, 33124, - 357, 359, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 361, - 363, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33133, 33135, 33137, 33139, - 33141, 33143, 33145, 33147, 33149, 383, 385, 387, - 389, 391, 393, 395, 397, 399, 401, 403, - 405, 407, 409, 411, 413, -1, 415, 417, - 419, 421, 423, 425, -1, -1, 427, 429, - 431, 433, 435, 437, 439, 441, 443, 445, - 447, 33217, 33219, 33221, 455, 457, -1, -1, - 459, 461, 463, 465, 467, 469, 471, 473, - 475, 477, 479, 481, 483, 485, 487, 489, - 491, 493, 495, 497, 499, 501, 503, 505, - 507, 509, 511, 513, 515, 517, 519, 521, - 523, 525, 527, 529, -1, -1, 531, 533, - -1, -1, -1, -1, -1, -1, 535, 537, - 539, 541, 543, 545, 547, 549, 551, 553, - 555, 557, 559, 561, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 33331, 33332, 33333, 33334, 33335, 33336, 33337, 33338, - 33339, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 33340, 33342, 33344, 33346, 33348, 33350, -1, -1, - 33352, 33353, 33354, 33355, 33356, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 589, 590, -1, 591, 592, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 594, -1, -1, -1, - -1, -1, 33363, -1, -1, -1, 597, -1, - -1, -1, -1, -1, 33366, 600, 602, 604, - 605, 607, 609, -1, 611, -1, 613, 615, - 617, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 619, 621, 623, 625, 627, 629, - 631, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 633, 635, 637, 639, 641, -1, - 33411, 33412, 33413, 646, 648, 33418, 33419, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 33420, 33421, 33422, -1, 33423, 33424, -1, -1, - -1, 33425, -1, -1, -1, -1, -1, -1, - 658, 660, -1, 662, -1, -1, -1, 664, - -1, -1, -1, -1, 666, 668, 670, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 672, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 674, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 676, 678, -1, 680, -1, -1, -1, 682, - -1, -1, -1, -1, 684, 686, 688, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 690, 692, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 694, 696, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 698, 700, 702, 704, -1, -1, 706, 708, - -1, -1, 710, 712, 714, 716, 718, 720, - -1, -1, 722, 724, 726, 728, 730, 732, - -1, -1, 734, 736, 738, 740, 742, 744, - 746, 748, 750, 752, 754, 756, -1, -1, - 758, 760, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 33530, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 764, 766, 768, 770, 772, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 33542, 33544, 33546, - 33548, -1, -1, -1, -1, -1, -1, -1, - 782, -1, 784, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 786, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 788, -1, -1, -1, -1, -1, -1, - -1, 790, -1, -1, 792, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 794, 796, 798, 800, 802, 804, 806, 808, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 810, 812, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 814, 816, -1, 818, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 820, -1, -1, 822, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 824, 826, 828, -1, -1, 830, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 832, -1, -1, 834, 836, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 838, 840, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 842, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 844, 846, 848, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 850, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 852, -1, -1, -1, -1, -1, -1, 854, - 856, -1, 858, 860, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 862, 864, 866, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 868, -1, 870, 872, 874, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 33644, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 33646, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33648, 33650, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33652, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 885, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 887, -1, -1, - -1, -1, 889, -1, -1, -1, -1, 891, - -1, -1, -1, -1, 893, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 895, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 897, -1, 899, 901, 33671, - 905, 33675, -1, -1, -1, -1, -1, -1, - -1, 909, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 911, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 913, -1, -1, - -1, -1, 915, -1, -1, -1, -1, 917, - -1, -1, -1, -1, 919, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 921, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 923, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33693, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 926, -1, - 928, -1, 930, -1, 932, -1, 934, -1, - -1, -1, 936, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 938, -1, 940, -1, -1, - 942, 944, -1, 946, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33716, 33717, 33718, -1, - 33719, 33720, 33721, 33722, 33723, 33724, 33725, 33726, - 33727, 33728, 33729, -1, 33730, 33731, 33732, 33733, - 33734, 33735, 33736, 33737, 33738, 33739, 33740, 33741, - 33742, 33743, 33744, 33745, 33746, 33747, -1, 33748, - 33749, 33750, 33751, 33752, 33753, 33754, 33755, 33756, - 33757, 33758, 33759, 33760, 33761, 33762, 33763, 33764, - 33765, 33766, 33767, 33768, 33769, 33770, 33771, 33772, - 33773, 33774, 33775, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 33776, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 33777, 33778, 33779, 33780, 33781, - 33782, 33783, 33784, 33785, 33786, 33787, 33788, 33789, - 33790, 33791, 33792, 33793, 33794, 33795, 33796, 33797, - 33798, 33799, 33800, 33801, 33802, 33803, 33804, 33805, - 33806, 33807, 33808, 33809, 33810, 33811, 33812, 33813, - 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, - 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, - 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, - 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, - 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, - 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, - 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, - 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, - 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, - 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, - 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, - 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, - 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, - 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, - 1270, 1272, 1274, 1276, 1278, 1280, 1282, 1284, - 1286, 1288, 1290, 1292, 1294, 1296, 1298, 1300, - 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, - 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, - 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, - 1350, 1352, 34122, 1356, -1, -1, -1, -1, - 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, - 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, - 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, - 1406, 1408, 1410, 1412, 1414, 1416, 1418, 1420, - 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, - 1438, 1440, 1442, 1444, 1446, 1448, 1450, 1452, - 1454, 1456, 1458, 1460, 1462, 1464, 1466, 1468, - 1470, 1472, 1474, 1476, 1478, 1480, 1482, 1484, - 1486, 1488, 1490, 1492, 1494, 1496, 1498, 1500, - 1502, 1504, 1506, 1508, 1510, 1512, 1514, 1516, - 1518, 1520, 1522, 1524, 1526, 1528, 1530, 1532, - 1534, 1536, -1, -1, -1, -1, -1, -1, - 1538, 1540, 1542, 1544, 1546, 1548, 1550, 1552, - 1554, 1556, 1558, 1560, 1562, 1564, 1566, 1568, - 1570, 1572, 1574, 1576, 1578, 1580, -1, -1, - 1582, 1584, 1586, 1588, 1590, 1592, -1, -1, - 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, - 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, - 1626, 1628, 1630, 1632, 1634, 1636, 1638, 1640, - 1642, 1644, 1646, 1648, 1650, 1652, 1654, 1656, - 1658, 1660, 1662, 1664, 1666, 1668, -1, -1, - 1670, 1672, 1674, 1676, 1678, 1680, -1, -1, - 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, - -1, 1698, -1, 1700, -1, 1702, -1, 1704, - 1706, 1708, 1710, 1712, 1714, 1716, 1718, 1720, - 1722, 1724, 1726, 1728, 1730, 1732, 1734, 1736, - 1738, 1740, 1741, 1743, 1744, 1746, 1747, 1749, - 1750, 1752, 1753, 1755, 1756, 1758, -1, -1, - 1759, 1761, 1763, 1765, 1767, 1769, 1771, 1773, - 1775, 1777, 1779, 1781, 1783, 1785, 1787, 1789, - 1791, 1793, 1795, 1797, 1799, 1801, 1803, 1805, - 1807, 1809, 1811, 1813, 1815, 1817, 1819, 1821, - 1823, 1825, 1827, 1829, 1831, 1833, 1835, 1837, - 1839, 1841, 1843, 1845, 1847, 1849, 1851, 1853, - 1855, 1857, 1859, 1861, 1863, -1, 1865, 1867, - 1869, 1871, 1873, 1875, 1876, 34646, 1880, 34649, - 34651, 1885, 1887, 1889, 1891, -1, 1893, 1895, - 1897, 1899, 1900, 1902, 1903, 1905, 1907, 1909, - 1911, 1913, 1915, 1917, -1, -1, 1918, 1920, - 1922, 1924, 1926, 1928, -1, 1929, 1931, 1933, - 1935, 1937, 1939, 1941, 1942, 1944, 1946, 1948, - 1950, 1952, 1954, 1956, 1957, 1959, 1961, 1962, - -1, -1, 1963, 1965, 1967, -1, 1969, 1971, - 1973, 1975, 1976, 1978, 1979, 1981, 34750, -1, - 1984, 1985, 34754, 34755, 34756, 34757, 34758, 34759, - 34760, 34761, 34762, -1, -1, -1, -1, -1, - -1, 34763, -1, -1, -1, -1, -1, 34764, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 34766, 34767, 34769, -1, - -1, -1, -1, -1, -1, -1, -1, 34772, - -1, -1, -1, 34773, 34775, -1, 34778, 34780, - -1, -1, -1, -1, 34783, -1, 34785, -1, - -1, -1, -1, -1, -1, -1, -1, 34787, - 34789, 34791, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 34793, - -1, -1, -1, -1, -1, -1, -1, 34797, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 34798, 34799, -1, -1, 34800, 34801, 34802, 34803, - 34804, 34805, 34806, 34807, 34808, 34809, 34810, 34811, - 34812, 34813, 34814, 34815, 34816, 34817, 34818, 34819, - 34820, 34821, 34822, 34823, 34824, 34825, 34826, -1, - 34827, 34828, 34829, 34830, 34831, 34832, 34833, 34834, - 34835, 34836, 34837, 34838, 34839, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 34840, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 34842, 34845, 34848, 34849, -1, 34851, 34854, 34857, - -1, 34858, 34860, 34861, 34862, 34863, 34864, 34865, - 34866, 34867, 34868, 34869, -1, 34870, 34871, -1, - -1, 34873, 34874, 34875, 34876, 34877, -1, -1, - 34878, 34880, 34883, -1, 34885, -1, 2118, -1, - 34887, -1, 2120, 2121, 34890, 34891, -1, 34892, - 34893, 34894, -1, 34895, 34896, 34897, 34898, 34899, - 34900, 34901, -1, 34902, 34905, 34906, 34907, 34908, - 34909, -1, -1, -1, -1, 34910, 34911, 34912, - 34913, 34914, -1, -1, -1, -1, -1, -1, - 34915, 34918, 34921, 34925, 34928, 34931, 34934, 34937, - 34940, 34943, 34946, 34949, 34952, 34955, 34958, 34961, - 34963, 34964, 34966, 34969, 34971, 34972, 34974, 34977, - 34981, 34983, 34984, 34986, 34989, 34990, 34991, 34992, - 34993, 34994, 34996, 34999, 35001, 35002, 35004, 35007, - 35011, 35013, 35014, 35016, 35019, 35020, 35021, 35022, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 35023, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 2258, 2260, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 2262, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2264, 2266, 2268, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 2270, -1, -1, -1, - -1, 2272, -1, -1, 2274, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 2276, -1, 2278, -1, - -1, -1, -1, -1, 35048, 35050, -1, 35053, - 35055, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 2290, -1, -1, 2292, -1, -1, 2294, - -1, 2296, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 2298, -1, 2300, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 2302, 2304, 2306, - 2308, 2310, -1, -1, 2312, 2314, -1, -1, - 2316, 2318, -1, -1, -1, -1, -1, -1, - 2320, 2322, -1, -1, 2324, 2326, -1, -1, - 2328, 2330, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 2332, 2334, 2336, 2338, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 2340, 2342, 2344, 2346, -1, -1, -1, -1, - -1, -1, 2348, 2350, 2352, 2354, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 2356, 2357, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 35126, 35127, 35128, 35129, 35130, 35131, 35132, 35133, - 35134, 35135, 35137, 35139, 35141, 35143, 35145, 35147, - 35149, 35151, 35153, 35155, 35157, 35160, 35163, 35166, - 35169, 35172, 35175, 35178, 35181, 35184, 35188, 35192, - 35196, 35200, 35204, 35208, 35212, 35216, 35220, 35224, - 35228, 35230, 35232, 35234, 35236, 35238, 35240, 35242, - 35244, 35246, 35249, 35252, 35255, 35258, 35261, 35264, - 35267, 35270, 35273, 35276, 35279, 35282, 35285, 35288, - 35291, 35294, 35297, 35300, 35303, 35306, 35309, 35312, - 35315, 35318, 35321, 35324, 35327, 35330, 35333, 35336, - 35339, 35342, 35345, 35348, 35351, 35354, 35357, 35358, - 35359, 35360, 35361, 35362, 35363, 35364, 35365, 35366, - 35367, 35368, 35369, 35370, 35371, 35372, 35373, 35374, - 35375, 35376, 35377, 35378, 35379, 35380, 35381, 35382, - 35383, 35384, 35385, 35386, 35387, 35388, 35389, 35390, - 35391, 35392, 35393, 35394, 35395, 35396, 35397, 35398, - 35399, 35400, 35401, 35402, 35403, 35404, 35405, 35406, - 35407, 35408, 35409, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 35410, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 35414, 35417, 35419, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 2654, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 35424, 35425, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 35426, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 35427, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 35428, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 35429, 35430, 35431, 35432, 35433, 35434, 35435, 35436, - 35437, 35438, 35439, 35440, 35441, 35442, 35443, 35444, - 35445, 35446, 35447, 35448, 35449, 35450, 35451, 35452, - 35453, 35454, 35455, 35456, 35457, 35458, 35459, 35460, - 35461, 35462, 35463, 35464, 35465, 35466, 35467, 35468, - 35469, 35470, 35471, 35472, 35473, 35474, 35475, 35476, - 35477, 35478, 35479, 35480, 35481, 35482, 35483, 35484, - 35485, 35486, 35487, 35488, 35489, 35490, 35491, 35492, - 35493, 35494, 35495, 35496, 35497, 35498, 35499, 35500, - 35501, 35502, 35503, 35504, 35505, 35506, 35507, 35508, - 35509, 35510, 35511, 35512, 35513, 35514, 35515, 35516, - 35517, 35518, 35519, 35520, 35521, 35522, 35523, 35524, - 35525, 35526, 35527, 35528, 35529, 35530, 35531, 35532, - 35533, 35534, 35535, 35536, 35537, 35538, 35539, 35540, - 35541, 35542, 35543, 35544, 35545, 35546, 35547, 35548, - 35549, 35550, 35551, 35552, 35553, 35554, 35555, 35556, - 35557, 35558, 35559, 35560, 35561, 35562, 35563, 35564, - 35565, 35566, 35567, 35568, 35569, 35570, 35571, 35572, - 35573, 35574, 35575, 35576, 35577, 35578, 35579, 35580, - 35581, 35582, 35583, 35584, 35585, 35586, 35587, 35588, - 35589, 35590, 35591, 35592, 35593, 35594, 35595, 35596, - 35597, 35598, 35599, 35600, 35601, 35602, 35603, 35604, - 35605, 35606, 35607, 35608, 35609, 35610, 35611, 35612, - 35613, 35614, 35615, 35616, 35617, 35618, 35619, 35620, - 35621, 35622, 35623, 35624, 35625, 35626, 35627, 35628, - 35629, 35630, 35631, 35632, 35633, 35634, 35635, 35636, - 35637, 35638, 35639, 35640, 35641, 35642, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 35643, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 35644, -1, - 35645, 35646, 35647, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 2880, -1, 2882, -1, - 2884, -1, 2886, -1, 2888, -1, 2890, -1, - 2892, -1, 2894, -1, 2896, -1, 2898, -1, - 2900, -1, 2902, -1, -1, 2904, -1, 2906, - -1, 2908, -1, -1, -1, -1, -1, -1, - 2910, 2912, -1, 2914, 2916, -1, 2918, 2920, - -1, 2922, 2924, -1, 2926, 2928, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 2930, -1, -1, -1, - -1, -1, -1, 35700, 35702, -1, 2936, 35706, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 2940, -1, 2942, -1, - 2944, -1, 2946, -1, 2948, -1, 2950, -1, - 2952, -1, 2954, -1, 2956, -1, 2958, -1, - 2960, -1, 2962, -1, -1, 2964, -1, 2966, - -1, 2968, -1, -1, -1, -1, -1, -1, - 2970, 2972, -1, 2974, 2976, -1, 2978, 2980, - -1, 2982, 2984, -1, 2986, 2988, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 2990, -1, -1, 2992, - 2994, 2996, 2998, -1, -1, -1, 3000, 35770, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, 35772, 35773, 35774, 35775, 35776, 35777, 35778, - 35779, 35780, 35781, 35782, 35783, 35784, 35785, 35786, - 35787, 35788, 35789, 35790, 35791, 35792, 35793, 35794, - 35795, 35796, 35797, 35798, 35799, 35800, 35801, 35802, - 35803, 35804, 35805, 35806, 35807, 35808, 35809, 35810, - 35811, 35812, 35813, 35814, 35815, 35816, 35817, 35818, - 35819, 35820, 35821, 35822, 35823, 35824, 35825, 35826, - 35827, 35828, 35829, 35830, 35831, 35832, 35833, 35834, - 35835, 35836, 35837, 35838, 35839, 35840, 35841, 35842, - 35843, 35844, 35845, 35846, 35847, 35848, 35849, 35850, - 35851, 35852, 35853, 35854, 35855, 35856, 35857, 35858, - 35859, 35860, 35861, 35862, 35863, 35864, 35865, -1, - -1, -1, 35866, 35867, 35868, 35869, 35870, 35871, - 35872, 35873, 35874, 35875, 35876, 35877, 35878, 35879, - 35880, 35883, 35886, 35889, 35892, 35895, 35898, 35901, - 35904, 35907, 35910, 35913, 35916, 35919, 35922, 35926, - 35930, 35934, 35938, 35942, 35946, 35950, 35954, 35958, - 35962, 35966, 35970, 35974, 35978, 35982, 35989, -1, - 35995, 35998, 36001, 36004, 36007, 36010, 36013, 36016, - 36019, 36022, 36025, 36028, 36031, 36034, 36037, 36040, - 36043, 36046, 36049, 36052, 36055, 36058, 36061, 36064, - 36067, 36070, 36073, 36076, 36079, 36082, 36085, 36088, - 36091, 36094, 36097, 36100, 36103, 36104, 36105, 36106, - -1, -1, -1, -1, -1, -1, -1, -1, - 36107, 36110, 36112, 36114, 36116, 36118, 36120, 36122, - 36124, 36126, 36128, 36130, 36132, 36134, 36136, 36138, - 36140, 36141, 36142, 36143, 36144, 36145, 36146, 36147, - 36148, 36149, 36150, 36151, 36152, 36153, 36154, 36156, - 36158, 36160, 36162, 36164, 36166, 36168, 36170, 36172, - 36174, 36176, 36178, 36180, 36182, 36187, 36191, -1, - 36193, 36194, 36195, 36196, 36197, 36198, 36199, 36200, - 36201, 36202, 36203, 36204, 36205, 36206, 36207, 36208, - 36209, 36210, 36211, 36212, 36213, 36214, 36215, 36216, - 36217, 36218, 36219, 36220, 36221, 36222, 36223, 36224, - 36225, 36226, 36227, 36228, 36229, 36230, 36231, 36232, - 36233, 36234, 36235, 36236, 36237, 36238, 36239, 36240, - 36241, 36242, 36244, 36246, 36248, 36250, 36252, 36254, - 36256, 36258, 36260, 36262, 36264, 36266, 36268, 36270, - 36272, 36274, 36276, 36278, 36280, 36282, 36284, 36286, - 36288, 36290, 36293, 36296, 36299, 36301, 36304, 36306, - 36309, 36310, 36311, 36312, 36313, 36314, 36315, 36316, - 36317, 36318, 36319, 36320, 36321, 36322, 36323, 36324, - 36325, 36326, 36327, 36328, 36329, 36330, 36331, 36332, - 36333, 36334, 36335, 36336, 36337, 36338, 36339, 36340, - 36341, 36342, 36343, 36344, 36345, 36346, 36347, 36348, - 36349, 36350, 36351, 36352, 36353, 36354, 36355, -1, - 36356, 36360, 36364, 36368, 36371, 36375, 36378, 36381, - 36386, 36390, 36393, 36396, 36399, 36403, 36407, 36410, - 36413, 36415, 36418, 36422, 36426, 36428, 36433, 36439, - 36444, 36447, 36452, 36457, 36461, 36464, 36467, 36470, - 36474, 36479, 36483, 36486, 36489, 36492, 36494, 36496, - 36498, 36500, 36503, 36506, 36511, 36514, 36518, 36523, - 36526, 36528, 36530, 36535, 36539, 36544, 36547, 36552, - 36554, 36557, 36560, 36563, 36566, 36569, 36573, 36576, - 36578, 36581, 36584, 36587, 36591, 36594, 36597, 36600, - 36605, 36609, 36611, 36616, 36618, 36622, 36626, 36629, - 36632, 36635, 36639, 36641, 36644, 36648, 36650, 36655, - 36658, 36660, 36662, 36664, 36666, 36668, 36670, 36672, - 36674, 36676, 36678, 36681, 36684, 36687, 36690, 36693, - 36696, 36699, 36702, 36705, 36708, 36711, 36714, 36717, - 36720, 36723, 36726, 36728, 36730, 36733, 36735, 36737, - 36739, 36742, 36745, 36747, 36749, 36751, 36753, 36755, - 36759, 36761, 36763, 36765, 36767, 36769, 36771, 36773, - 36775, 36778, 36782, 36784, 36786, 36788, 36790, 36792, - 36794, 36796, 36799, 36802, 36805, 36808, 36810, 36812, - 36814, 36816, 36818, 36820, 36822, 36824, 36826, 36828, - 36831, 36834, 36836, 36839, 36842, 36845, 36847, 36850, - 36853, 36857, 36859, 36862, 36865, 36868, 36871, 36876, - 36882, 36884, 36886, 36888, 36890, 36892, 36894, 36896, - 36898, 36900, 36902, 36904, 36906, 36908, 36910, 36912, - 36914, 36916, 36918, 36922, 36924, 36926, 36928, 36932, - 36935, 36937, 36939, 36941, 36943, 36945, 36947, 36949, - 36951, 36953, 36955, 36958, 36960, 36962, 36965, 36968, - 36970, 36974, 36977, 36979, 36981, 36983, 36985, 36988, - 36991, 36993, 36995, 36997, 36999, 37001, 37003, 37005, - 37007, 37009, 37012, 37015, 37018, 37021, 37024, 37027, - 37030, 37033, 37036, 37039, 37042, 37045, 37048, 37051, - 37054, 37057, 37060, 37063, 37066, 37069, 37072, 37075, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 37078, 37079, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 37080, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 37081, 37082, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 37083, 37084, 37085, 37086, - 4319, 4320, 4321, 4322, 4323, 4324, 4325, 4326, - 4327, 4328, 4329, 4330, 4331, 4332, 4333, 4334, - 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4342, - 4343, 4344, 4345, 4346, 4347, 4348, 4349, 4350, - 4351, 4352, 4353, 4354, 4355, 4356, 4357, 4358, - 4359, 4360, 4361, 4362, 4363, 4364, 4365, 4366, - 4367, 4368, 4369, 4370, 4371, 4372, 4373, 4374, - 4375, 4376, 4377, 4378, 4379, 4380, 4381, 4382, - 4383, 4384, 4385, 4386, 4387, 4388, 4389, 4390, - 4391, 4392, 4393, 4394, 4395, 4396, 4397, 4398, - 4399, 4400, 4401, 4402, 4403, 4404, 4405, 4406, - 4407, 4408, 4409, 4410, 4411, 4412, 4413, 4414, - 4415, 4416, 4417, 4418, 4419, 4420, 4421, 4422, - 4423, 4424, 4425, 4426, 4427, 4428, 4429, 4430, - 4431, 4432, 4433, 4434, 4435, 4436, 4437, 4438, - 4439, 4440, 4441, 4442, 4443, 4444, 4445, 4446, - 4447, 4448, 4449, 4450, 4451, 4452, 4453, 4454, - 4455, 4456, 4457, 4458, 4459, 4460, 4461, 4462, - 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4470, - 4471, 4472, 4473, 4474, 4475, 4476, 4477, 4478, - 4479, 4480, 4481, 4482, 4483, 4484, 4485, 4486, - 4487, 4488, 4489, 4490, 4491, 4492, 4493, 4494, - 4495, 4496, 4497, 4498, 4499, 4500, 4501, 4502, - 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, - 4511, 4512, 4513, 4514, 4515, 4516, 4517, 4518, - 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, - 4527, 4528, 4529, 4530, 4531, 4532, 4533, 4534, - 4535, 4536, 4537, 4538, 4539, 4540, 4541, 4542, - 4543, 4544, 4545, 4546, 4547, 4548, 4549, 4550, - 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, - 4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, - 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4574, - 4575, 4576, 4577, 4578, 4579, 4580, 4581, 4582, - 4583, 4584, 4585, 4586, 4587, 4588, -1, -1, - 4589, -1, 4590, -1, -1, 4591, 4592, 4593, - 4594, 4595, 4596, 4597, 4598, 4599, 4600, -1, - 4601, -1, 4602, -1, -1, 4603, 4604, -1, - -1, -1, 4605, 4606, 4607, 4608, 4609, 4610, - 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, - 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, - 4627, 4628, 4629, 4630, 4631, 4632, 4633, 4634, - 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, - 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4650, - 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, - 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, - 4667, 4668, 4669, 4670, 4671, 4672, -1, -1, - 4673, 4674, 4675, 4676, 4677, 4678, 4679, 4680, - 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, - 4689, 4690, 4691, 4692, 4693, 4694, 4695, 4696, - 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704, - 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, - 4713, 4714, 4715, 4716, 4717, 4718, 4719, 4720, - 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, - 4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, - 4737, 4738, 4739, 4740, 4741, 4742, 4743, 4744, - 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, - 4753, 4754, 4755, 4756, 4757, 4758, 4759, 4760, - 4761, 4762, 4763, 4764, 4765, 4766, 4767, 4768, - 4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776, - 4777, 4778, -1, -1, -1, -1, -1, -1, - 37547, 37549, 37551, 37553, 37556, 37559, 37561, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 37563, 37565, 37567, 37569, 37571, - -1, -1, -1, -1, -1, 4805, -1, 4807, - 37577, 37578, 37579, 37580, 37581, 37582, 37583, 37584, - 37585, 37586, 4819, 4821, 4823, 4825, 4827, 4829, - 4831, 4833, 4835, 4837, 4839, 4841, 4843, -1, - 4845, 4847, 4849, 4851, 4853, -1, 4855, -1, - 4857, 4859, -1, 4861, 4863, -1, 4865, 4867, - 4869, 4871, 4873, 4875, 4877, 4879, 4881, 37651, - 37653, 37654, 37655, 37656, 37657, 37658, 37659, 37660, - 37661, 37662, 37663, 37664, 37665, 37666, 37667, 37668, - 37669, 37670, 37671, 37672, 37673, 37674, 37675, 37676, - 37677, 37678, 37679, 37680, 37681, 37682, 37683, 37684, - 37685, 37686, 37687, 37688, 37689, 37690, 37691, 37692, - 37693, 37694, 37695, 37696, 37697, 37698, 37699, 37700, - 37701, 37702, 37703, 37704, 37705, 37706, 37707, 37708, - 37709, 37710, 37711, 37712, 37713, 37714, 37715, 37716, - 37717, 37718, 37719, 37720, 37721, 37722, 37723, 37724, - 37725, 37726, 37727, 37728, 37729, 37730, 37731, 37732, - 37733, 37734, 37735, 37736, 37737, 37738, 37739, 37740, - 37741, 37742, 37743, 37744, 37745, 37746, 37747, 37748, - 37749, 37750, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 37751, 37752, 37753, 37754, 37755, - 37756, 37757, 37758, 37759, 37760, 37761, 37762, 37763, - 37764, 37765, 37766, 37767, 37768, 37769, 37770, 37771, - 37772, 37773, 37774, 37776, 37778, 37780, 37782, 37784, - 37786, 37788, 37790, 37792, 37794, 37796, 37798, 37800, - 37802, 37804, 37806, 37808, 37810, 37811, 37812, 37813, - 37814, 37816, 37818, 37820, 37822, 37824, 37826, 37828, - 37830, 37832, 37834, 37836, 37838, 37840, 37842, 37844, - 37846, 37848, 37850, 37852, 37854, 37856, 37858, 37860, - 37862, 37864, 37866, 37868, 37870, 37872, 37874, 37876, - 37878, 37880, 37882, 37884, 37886, 37888, 37890, 37892, - 37894, 37896, 37898, 37900, 37902, 37904, 37906, 37908, - 37910, 37912, 37914, 37916, 37918, 37920, 37922, 37924, - 37926, 37928, 37930, 37932, 37934, 37936, 37938, 37940, - 37942, 37944, 37946, 37948, 37950, 37952, 37954, 37956, - 37958, 37960, 37962, 37964, 37966, 37968, 37970, 37972, - 37974, 37976, 37978, 37980, 37982, 37984, 37986, 37988, - 37990, 37992, 37994, 37996, 37998, 38000, 38002, 38005, - 38008, 38011, 38014, 38017, 38020, 38022, 38024, 38026, - 38028, 38030, 38032, 38034, 38036, 38038, 38040, 38042, - 38044, 38046, 38048, 38050, 38052, 38054, 38056, 38058, - 38060, 38062, 38064, 38066, 38068, 38070, 38072, 38074, - 38076, 38078, 38080, 38082, 38084, 38086, 38088, 38090, - 38092, 38094, 38096, 38098, 38100, 38102, 38104, 38106, - 38108, 38110, 38112, 38114, 38116, 38118, 38120, 38122, - 38124, 38126, 38128, 38130, 38132, 38134, 38136, 38138, - 38140, 38142, 38144, 38146, 38148, 38150, 38152, 38154, - 38156, 38158, 38160, 38162, 38164, 38166, 38168, 38170, - 38172, 38174, 38176, 38178, 38180, 38182, 38184, 38186, - 38188, 38190, 38192, 38194, 38196, 38198, 38200, 38202, - 38204, 38206, 38208, 38210, 38212, 38214, 38216, 38218, - 38220, 38222, 38224, 38226, 38228, 38230, 38232, 38234, - 38236, 38238, 38240, 38242, 38244, 38246, 38248, 38250, - 38252, 38254, 38256, 38258, 38260, 38262, 38264, 38266, - 38268, 38270, 38272, 38274, 38276, 38278, 38280, 38282, - 38284, 38286, 38288, 38290, 38292, 38294, 38296, 38298, - 38300, 38302, 38304, 38307, 38310, 38313, 38315, 38317, - 38319, 38321, 38323, 38325, 38327, 38329, 38331, 38333, - 38335, 38337, 38339, 38341, 38343, 38345, 38347, 38349, - 38351, 38353, 38355, 38357, 38359, 38361, 38363, 38365, - 38367, 38369, 38371, 38373, 38375, 38377, 38379, 38381, - 38383, 38385, 38387, 38389, 38391, 38393, 38395, 38397, - 38399, 38401, 38403, 38405, 38407, 38409, 38411, 38413, - 38415, 38417, 38419, 38421, 38423, 38425, 38427, 38429, - 38431, 38433, 38435, 38437, 38439, 38441, 38443, 38445, - 38447, 38449, 38451, 38453, 38455, 38457, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 38459, 38462, 38465, 38468, 38471, 38474, 38477, 38480, - 38483, 38486, 38489, 38492, 38495, 38498, 38501, 38504, - 38507, 38510, 38513, 38516, 38519, 38522, 38525, 38528, - 38531, 38534, 38537, 38540, 38543, 38546, 38549, 38552, - 38555, 38558, 38561, 38564, 38567, 38570, 38573, 38576, - 38579, 38582, 38585, 38588, 38591, 38594, 38597, 38600, - 38603, 38606, 38609, 38612, 38615, 38618, 38621, 38624, - 38627, 38630, 38633, 38636, 38639, 38642, 38645, 38648, - -1, -1, 38651, 38654, 38657, 38660, 38663, 38666, - 38669, 38672, 38675, 38678, 38681, 38684, 38687, 38690, - 38693, 38696, 38699, 38702, 38705, 38708, 38711, 38714, - 38717, 38720, 38723, 38726, 38729, 38732, 38735, 38738, - 38741, 38744, 38747, 38750, 38753, 38756, 38759, 38762, - 38765, 38768, 38771, 38774, 38777, 38780, 38783, 38786, - 38789, 38792, 38795, 38798, 38801, 38804, 38807, 38810, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 38813, 38816, 38819, 38823, 38827, 38831, 38835, 38839, - 38843, 38847, 38850, 38868, 38876, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 38880, 38881, 38882, 38883, 38884, 38885, 38886, 38887, - 38888, 38889, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 38890, 38891, 38892, 38893, 38894, 38895, 38896, 38897, - 38898, 38899, 38900, 38901, 38902, 38903, 38904, 38905, - 38906, 38907, 38908, 38909, 38910, -1, -1, 38911, - 38912, 38913, 38914, 38915, 38916, 38917, 38918, 38919, - 38920, 38921, 38922, -1, 38923, 38924, 38925, 38926, - 38927, 38928, 38929, 38930, 38931, 38932, 38933, 38934, - 38935, 38936, 38937, 38938, 38939, 38940, 38941, -1, - 38942, 38943, 38944, 38945, -1, -1, -1, -1, - 38946, 38948, 38950, -1, 38952, -1, 38954, 38956, - 38958, 38960, 38962, 38964, 38966, 38968, 38970, 38972, - 38974, 38975, 38976, 38977, 38978, 38979, 38980, 38981, - 38982, 38983, 38984, 38985, 38986, 38987, 38988, 38989, - 38990, 38991, 38992, 38993, 38994, 38995, 38996, 38997, - 38998, 38999, 39000, 39001, 39002, 39003, 39004, 39005, - 39006, 39007, 39008, 39009, 39010, 39011, 39012, 39013, - 39014, 39015, 39016, 39017, 39018, 39019, 39020, 39021, - 39022, 39023, 39024, 39025, 39026, 39027, 39028, 39029, - 39030, 39031, 39032, 39033, 39034, 39035, 39036, 39037, - 39038, 39039, 39040, 39041, 39042, 39043, 39044, 39045, - 39046, 39047, 39048, 39049, 39050, 39051, 39052, 39053, - 39054, 39055, 39056, 39057, 39058, 39059, 39060, 39061, - 39062, 39063, 39064, 39065, 39066, 39067, 39068, 39069, - 39070, 39071, 39072, 39073, 39074, 39075, 39076, 39077, - 39078, 39079, 39080, 39081, 39082, 39083, 39084, 39085, - 39086, 39087, 39088, 39089, 39090, 39091, 39093, 39095, - 39097, 39099, 39101, 39103, 39105, -1, -1, -1, - -1, 39107, 39108, 39109, 39110, 39111, 39112, 39113, - 39114, 39115, 39116, 39117, 39118, 39119, 39120, 39121, - 39122, 39123, 39124, 39125, 39126, 39127, 39128, 39129, - 39130, 39131, 39132, 39133, 39134, 39135, 39136, 39137, - 39138, 39139, 39140, 39141, 39142, 39143, 39144, 39145, - 39146, 39147, 39148, 39149, 39150, 39151, 39152, 39153, - 39154, 39155, 39156, 39157, 39158, 39159, 39160, 39161, - 39162, 39163, 39164, 39165, 39166, 39167, 39168, 39169, - 39170, 39171, 39172, 39173, 39174, 39175, 39176, 39177, - 39178, 39179, 39180, 39181, 39182, 39183, 39184, 39185, - 39186, 39187, 39188, 39189, 39190, 39191, 39192, 39193, - 39194, 39195, 39196, 39197, 39198, 39199, 39200, 39201, - 39202, 39203, 39204, 39205, 39206, 39207, 39208, 39209, - 39210, 39211, 39212, 39213, 39214, 39215, 39216, 39217, - 39218, 39219, 39220, 39221, 39222, 39223, 39224, 39225, - 39226, 39227, 39228, 39229, 39230, 39231, 39232, 39233, - 39234, 39235, 39236, 39237, 39238, 39239, 39240, 39241, - 39242, 39243, 39244, 39245, 39246, 39247, 39248, 39249, - 39250, 39251, 39252, 39253, 39254, 39255, 39256, 39257, - 39258, 39259, 39260, 39261, 39262, 39263, 39264, 39265, - 39266, 39267, 39268, 39269, 39270, 39271, 39272, 39273, - 39274, 39275, 39276, 39277, 39278, 39279, 39280, 39281, - 39282, 39283, 39284, 39285, 39286, 39287, 39288, 39289, - 39290, 39291, 39292, 39293, 39294, 39295, 39296, -1, - -1, -1, 39297, 39298, 39299, 39300, 39301, 39302, - -1, -1, 39303, 39304, 39305, 39306, 39307, 39308, - -1, -1, 39309, 39310, 39311, 39312, 39313, 39314, - -1, -1, 39315, 39316, 39317, -1, -1, -1, - 39318, 39319, 39320, 39321, 39322, 39323, 39324, -1, - 39325, 39326, 39327, 39328, 39329, 39330, 39331, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 6564, -1, 6566, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 6568, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 6570, 6572, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 6574, 6576, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 6578, 6580, -1, 6582, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 6584, 6586, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 6588, 6590, - 6592, 6594, 6596, 6598, 6600, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 6602, 6604, 6606, 6608, 6610, - 6612, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 39382, 39383, 39384, 39385, 39386, 39387, 39388, 39389, - 39390, 39391, 39392, 39393, 39394, 39395, 39396, 39397, - 39398, 39399, 39400, 39401, 39402, 39403, 39404, 39405, - 39406, 39407, 39408, 39409, 39410, 39411, 39412, 39413, - 39414, 39415, 39416, 39417, 39418, 39419, 39420, 39421, - 39422, 39423, 39424, 39425, 39426, 39427, 39428, 39429, - 39430, 39431, 39432, 39433, 39434, 39435, 39436, 39437, - 39438, 39439, 39440, 39441, 39442, 39443, 39444, 39445, - 39446, 39447, 39448, 39449, 39450, 39451, 39452, 39453, - 39454, 39455, 39456, 39457, 39458, 39459, 39460, 39461, - 39462, 39463, 39464, 39465, 39466, -1, 39467, 39468, - 39469, 39470, 39471, 39472, 39473, 39474, 39475, 39476, - 39477, 39478, 39479, 39480, 39481, 39482, 39483, 39484, - 39485, 39486, 39487, 39488, 39489, 39490, 39491, 39492, - 39493, 39494, 39495, 39496, 39497, 39498, 39499, 39500, - 39501, 39502, 39503, 39504, 39505, 39506, 39507, 39508, - 39509, 39510, 39511, 39512, 39513, 39514, 39515, 39516, - 39517, 39518, 39519, 39520, 39521, 39522, 39523, 39524, - 39525, 39526, 39527, 39528, 39529, 39530, 39531, 39532, - 39533, 39534, 39535, 39536, 39537, -1, 39538, 39539, - -1, -1, 39540, -1, -1, 39541, 39542, -1, - -1, 39543, 39544, 39545, 39546, -1, 39547, 39548, - 39549, 39550, 39551, 39552, 39553, 39554, 39555, 39556, - 39557, 39558, -1, 39559, -1, 39560, 39561, 39562, - 39563, 39564, 39565, 39566, -1, 39567, 39568, 39569, - 39570, 39571, 39572, 39573, 39574, 39575, 39576, 39577, - 39578, 39579, 39580, 39581, 39582, 39583, 39584, 39585, - 39586, 39587, 39588, 39589, 39590, 39591, 39592, 39593, - 39594, 39595, 39596, 39597, 39598, 39599, 39600, 39601, - 39602, 39603, 39604, 39605, 39606, 39607, 39608, 39609, - 39610, 39611, 39612, 39613, 39614, 39615, 39616, 39617, - 39618, 39619, 39620, 39621, 39622, 39623, 39624, 39625, - 39626, 39627, 39628, 39629, 39630, 39631, -1, 39632, - 39633, 39634, 39635, -1, -1, 39636, 39637, 39638, - 39639, 39640, 39641, 39642, 39643, -1, 39644, 39645, - 39646, 39647, 39648, 39649, 39650, -1, 39651, 39652, - 39653, 39654, 39655, 39656, 39657, 39658, 39659, 39660, - 39661, 39662, 39663, 39664, 39665, 39666, 39667, 39668, - 39669, 39670, 39671, 39672, 39673, 39674, 39675, 39676, - 39677, 39678, -1, 39679, 39680, 39681, 39682, -1, - 39683, 39684, 39685, 39686, 39687, -1, 39688, -1, - -1, -1, 39689, 39690, 39691, 39692, 39693, 39694, - 39695, -1, 39696, 39697, 39698, 39699, 39700, 39701, - 39702, 39703, 39704, 39705, 39706, 39707, 39708, 39709, - 39710, 39711, 39712, 39713, 39714, 39715, 39716, 39717, - 39718, 39719, 39720, 39721, 39722, 39723, 39724, 39725, - 39726, 39727, 39728, 39729, 39730, 39731, 39732, 39733, - 39734, 39735, 39736, 39737, 39738, 39739, 39740, 39741, - 39742, 39743, 39744, 39745, 39746, 39747, 39748, 39749, - 39750, 39751, 39752, 39753, 39754, 39755, 39756, 39757, - 39758, 39759, 39760, 39761, 39762, 39763, 39764, 39765, - 39766, 39767, 39768, 39769, 39770, 39771, 39772, 39773, - 39774, 39775, 39776, 39777, 39778, 39779, 39780, 39781, - 39782, 39783, 39784, 39785, 39786, 39787, 39788, 39789, - 39790, 39791, 39792, 39793, 39794, 39795, 39796, 39797, - 39798, 39799, 39800, 39801, 39802, 39803, 39804, 39805, - 39806, 39807, 39808, 39809, 39810, 39811, 39812, 39813, - 39814, 39815, 39816, 39817, 39818, 39819, 39820, 39821, - 39822, 39823, 39824, 39825, 39826, 39827, 39828, 39829, - 39830, 39831, 39832, 39833, 39834, 39835, 39836, 39837, - 39838, 39839, 39840, 39841, 39842, 39843, 39844, 39845, - 39846, 39847, 39848, 39849, 39850, 39851, 39852, 39853, - 39854, 39855, 39856, 39857, 39858, 39859, 39860, 39861, - 39862, 39863, 39864, 39865, 39866, 39867, 39868, 39869, - 39870, 39871, 39872, 39873, 39874, 39875, 39876, 39877, - 39878, 39879, 39880, 39881, 39882, 39883, 39884, 39885, - 39886, 39887, 39888, 39889, 39890, 39891, 39892, 39893, - 39894, 39895, 39896, 39897, 39898, 39899, 39900, 39901, - 39902, 39903, 39904, 39905, 39906, 39907, 39908, 39909, - 39910, 39911, 39912, 39913, 39914, 39915, 39916, 39917, - 39918, 39919, 39920, 39921, 39922, 39923, 39924, 39925, - 39926, 39927, 39928, 39929, 39930, 39931, 39932, 39933, - 39934, 39935, 39936, 39937, 39938, 39939, 39940, 39941, - 39942, 39943, 39944, 39945, 39946, 39947, 39948, 39949, - 39950, 39951, 39952, 39953, 39954, 39955, 39956, 39957, - 39958, 39959, 39960, 39961, 39962, 39963, 39964, 39965, - 39966, 39967, 39968, 39969, 39970, 39971, 39972, 39973, - 39974, 39975, 39976, 39977, 39978, 39979, 39980, 39981, - 39982, 39983, 39984, 39985, 39986, 39987, 39988, 39989, - 39990, 39991, 39992, 39993, 39994, 39995, 39996, 39997, - 39998, 39999, 40000, 40001, 40002, 40003, 40004, 40005, - 40006, 40007, 40008, 40009, 40010, 40011, 40012, 40013, - 40014, 40015, 40016, 40017, 40018, 40019, 40020, 40021, - 40022, 40023, 40024, 40025, 40026, 40027, 40028, 40029, - 40030, 40031, 40032, 40033, 40034, 40035, -1, -1, - 40036, 40037, 40038, 40039, 40040, 40041, 40042, 40043, - 40044, 40045, 40046, 40047, 40048, 40049, 40050, 40051, - 40052, 40053, 40054, 40055, 40056, 40057, 40058, 40059, - 40060, 40061, 40062, 40063, 40064, 40065, 40066, 40067, - 40068, 40069, 40070, 40071, 40072, 40073, 40074, 40075, - 40076, 40077, 40078, 40079, 40080, 40081, 40082, 40083, - 40084, 40085, 40086, 40087, 40088, 40089, 40090, 40091, - 40092, 40093, 40094, 40095, 40096, 40097, 40098, 40099, - 40100, 40101, 40102, 40103, 40104, 40105, 40106, 40107, - 40108, 40109, 40110, 40111, 40112, 40113, 40114, 40115, - 40116, 40117, 40118, 40119, 40120, 40121, 40122, 40123, - 40124, 40125, 40126, 40127, 40128, 40129, 40130, 40131, - 40132, 40133, 40134, 40135, 40136, 40137, 40138, 40139, - 40140, 40141, 40142, 40143, 40144, 40145, 40146, 40147, - 40148, 40149, 40150, 40151, 40152, 40153, 40154, 40155, - 40156, 40157, 40158, 40159, 40160, 40161, 40162, 40163, - 40164, 40165, 40166, 40167, 40168, 40169, 40170, 40171, - 40172, 40173, 40174, 40175, 40176, 40177, 40178, 40179, - 40180, 40181, 40182, 40183, 40184, 40185, 40186, 40187, - 40188, 40189, 40190, 40191, 40192, 40193, 40194, 40195, - 40196, 40197, 40198, 40199, 40200, 40201, 40202, 40203, - 40204, 40205, 40206, 40207, 40208, 40209, 40210, 40211, - 40212, 40213, 40214, 40215, 40216, 40217, 40218, 40219, - 40220, 40221, 40222, 40223, 40224, 40225, 40226, 40227, - 40228, 40229, 40230, 40231, 40232, 40233, 40234, 40235, - 40236, 40237, 40238, 40239, 40240, 40241, 40242, 40243, - 40244, 40245, 40246, 40247, 40248, 40249, 40250, 40251, - 40252, 40253, 40254, 40255, 40256, 40257, 40258, 40259, - 40260, 40261, 40262, 40263, 40264, 40265, 40266, 40267, - 40268, 40269, 40270, 40271, 40272, 40273, 40274, 40275, - 40276, 40277, 40278, 40279, 40280, 40281, 40282, 40283, - 40284, 40285, 40286, 40287, 40288, 40289, 40290, 40291, - 40292, 40293, 40294, 40295, 40296, 40297, 40298, 40299, - 40300, 40301, 40302, 40303, 40304, 40305, 40306, 40307, - 40308, 40309, 40310, 40311, 40312, 40313, 40314, 40315, - 40316, 40317, 40318, 40319, 40320, 40321, 40322, 40323, - 40324, 40325, 40326, 40327, -1, -1, 40328, 40329, - 40330, 40331, 40332, 40333, 40334, 40335, 40336, 40337, - 40338, 40339, 40340, 40341, 40342, 40343, 40344, 40345, - 40346, 40347, 40348, 40349, 40350, 40351, 40352, 40353, - 40354, 40355, 40356, 40357, 40358, 40359, 40360, 40361, - 40362, 40363, 40364, 40365, 40366, 40367, 40368, 40369, - 40370, 40371, 40372, 40373, 40374, 40375, 40376, 40377, - 40378, 40379, 40380, 40381, -1, 40382, 40383, 40384, - 40385, 40386, 40387, 40388, 40389, 40390, 40391, 40392, - 40393, 40394, 40395, 40396, 40397, 40398, 40399, 40400, - 40401, 40402, 40403, 40404, 40405, 40406, 40407, 40408, - -1, 40409, 40410, -1, 40411, -1, -1, 40412, - -1, 40413, 40414, 40415, 40416, 40417, 40418, 40419, - 40420, 40421, 40422, -1, 40423, 40424, 40425, 40426, - -1, 40427, -1, 40428, -1, -1, -1, -1, - -1, -1, 40429, -1, -1, -1, -1, 40430, - -1, 40431, -1, 40432, -1, 40433, 40434, 40435, - -1, 40436, 40437, -1, 40438, -1, -1, 40439, - -1, 40440, -1, 40441, -1, 40442, -1, 40443, - -1, 40444, 40445, -1, 40446, -1, -1, 40447, - 40448, 40449, 40450, -1, 40451, 40452, 40453, 40454, - 40455, 40456, 40457, -1, 40458, 40459, 40460, 40461, - -1, 40462, 40463, 40464, 40465, -1, 40466, -1, - 40467, 40468, 40469, 40470, 40471, 40472, 40473, 40474, - 40475, 40476, -1, 40477, 40478, 40479, 40480, 40481, - 40482, 40483, 40484, 40485, 40486, 40487, 40488, 40489, - 40490, 40491, 40492, 40493, -1, -1, -1, -1, - -1, 40494, 40495, 40496, -1, 40497, 40498, 40499, - 40500, 40501, -1, 40502, 40503, 40504, 40505, 40506, - 40507, 40508, 40509, 40510, 40511, 40512, 40513, 40514, - 40515, 40516, 40517, 40518, -1, -1, -1, -1, - 40519, 40521, 40523, 40525, 40527, 40529, 40531, 40533, - 40535, 40537, 40539, -1, -1, -1, -1, -1, - 40541, 40544, 40547, 40550, 40553, 40556, 40559, 40562, - 40565, 40568, 40571, 40574, 40577, 40580, 40583, 40586, - 40589, 40592, 40595, 40598, 40601, 40604, 40607, 40610, - 40613, 40616, 40619, 40622, 40623, 40624, 40626, -1, - 40628, 40629, 40630, 40631, 40632, 40633, 40634, 40635, - 40636, 40637, 40638, 40639, 40640, 40641, 40642, 40643, - 40644, 40645, 40646, 40647, 40648, 40649, 40650, 40651, - 40652, 40653, 40654, 40656, 40658, 40660, 40662, 40665, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 40667, 40669, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 40671, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 40673, 40675, 40677, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 40678, 40679, 40680, 40681, 40682, 40683, 40684, 40685, - 40686, 40687, 40688, 40689, 40690, 40691, 40692, 40693, - 40694, 40695, 40696, 40697, 40698, 40699, 40700, 40701, - 40702, 40703, 40704, 40705, 40706, 40707, 40708, 40709, - 40710, 40711, 40712, 40713, 40714, 40715, 40716, 40717, - 40718, 40719, 40720, -1, -1, -1, -1, -1, - 40721, 40724, 40727, 40730, 40733, 40736, 40739, 40742, - 40745, -1, -1, -1, -1, -1, -1, -1, - 40748, 40749, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 7982, 7983, 7984, 7985, 7986, 7987, 7988, 7989, - 7990, 7991, 7992, 7993, 7994, 7995, 7996, 7997, - 7998, 7999, 8000, 8001, 8002, 8003, 8004, 8005, - 8006, 8007, 8008, 8009, 8010, 8011, 8012, 8013, - 8014, 8015, 8016, 8017, 8018, 8019, 8020, 8021, - 8022, 8023, 8024, 8025, 8026, 8027, 8028, 8029, - 8030, 8031, 8032, 8033, 8034, 8035, 8036, 8037, - 8038, 8039, 8040, 8041, 8042, 8043, 8044, 8045, - 8046, 8047, 8048, 8049, 8050, 8051, 8052, 8053, - 8054, 8055, 8056, 8057, 8058, 8059, 8060, 8061, - 8062, 8063, 8064, 8065, 8066, 8067, 8068, 8069, - 8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077, - 8078, 8079, 8080, 8081, 8082, 8083, 8084, 8085, - 8086, 8087, 8088, 8089, 8090, 8091, 8092, 8093, - 8094, 8095, 8096, 8097, 8098, 8099, 8100, 8101, - 8102, 8103, 8104, 8105, 8106, 8107, 8108, 8109, - 8110, 8111, 8112, 8113, 8114, 8115, 8116, 8117, - 8118, 8119, 8120, 8121, 8122, 8123, 8124, 8125, - 8126, 8127, 8128, 8129, 8130, 8131, 8132, 8133, - 8134, 8135, 8136, 8137, 8138, 8139, 8140, 8141, - 8142, 8143, 8144, 8145, 8146, 8147, 8148, 8149, - 8150, 8151, 8152, 8153, 8154, 8155, 8156, 8157, - 8158, 8159, 8160, 8161, 8162, 8163, 8164, 8165, - 8166, 8167, 8168, 8169, 8170, 8171, 8172, 8173, - 8174, 8175, 8176, 8177, 8178, 8179, 8180, 8181, - 8182, 8183, 8184, 8185, 8186, 8187, 8188, 8189, - 8190, 8191, 8192, 8193, 8194, 8195, 8196, 8197, - 8198, 8199, 8200, 8201, 8202, 8203, 8204, 8205, - 8206, 8207, 8208, 8209, 8210, 8211, 8212, 8213, - 8214, 8215, 8216, 8217, 8218, 8219, 8220, 8221, - 8222, 8223, 8224, 8225, 8226, 8227, 8228, 8229, - 8230, 8231, 8232, 8233, 8234, 8235, 8236, 8237, - 8238, 8239, 8240, 8241, 8242, 8243, 8244, 8245, - 8246, 8247, 8248, 8249, 8250, 8251, 8252, 8253, - 8254, 8255, 8256, 8257, 8258, 8259, 8260, 8261, - 8262, 8263, 8264, 8265, 8266, 8267, 8268, 8269, - 8270, 8271, 8272, 8273, 8274, 8275, 8276, 8277, - 8278, 8279, 8280, 8281, 8282, 8283, 8284, 8285, - 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8293, - 8294, 8295, 8296, 8297, 8298, 8299, 8300, 8301, - 8302, 8303, 8304, 8305, 8306, 8307, 8308, 8309, - 8310, 8311, 8312, 8313, 8314, 8315, 8316, 8317, - 8318, 8319, 8320, 8321, 8322, 8323, 8324, 8325, - 8326, 8327, 8328, 8329, 8330, 8331, 8332, 8333, - 8334, 8335, 8336, 8337, 8338, 8339, 8340, 8341, - 8342, 8343, 8344, 8345, 8346, 8347, 8348, 8349, - 8350, 8351, 8352, 8353, 8354, 8355, 8356, 8357, - 8358, 8359, 8360, 8361, 8362, 8363, 8364, 8365, - 8366, 8367, 8368, 8369, 8370, 8371, 8372, 8373, - 8374, 8375, 8376, 8377, 8378, 8379, 8380, 8381, - 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, - 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, - 8398, 8399, 8400, 8401, 8402, 8403, 8404, 8405, - 8406, 8407, 8408, 8409, 8410, 8411, 8412, 8413, - 8414, 8415, 8416, 8417, 8418, 8419, 8420, 8421, - 8422, 8423, 8424, 8425, 8426, 8427, 8428, 8429, - 8430, 8431, 8432, 8433, 8434, 8435, 8436, 8437, - 8438, 8439, 8440, 8441, 8442, 8443, 8444, 8445, - 8446, 8447, 8448, 8449, 8450, 8451, 8452, 8453, - 8454, 8455, 8456, 8457, 8458, 8459, 8460, 8461, - 8462, 8463, 8464, 8465, 8466, 8467, 8468, 8469, - 8470, 8471, 8472, 8473, 8474, 8475, 8476, 8477, - 8478, 8479, 8480, 8481, 8482, 8483, 8484, 8485, - 8486, 8487, 8488, 8489, 8490, 8491, 8492, 8493, - 8494, 8495, 8496, 8497, 8498, 8499, 8500, 8501, - 8502, 8503, 8504, 8505, 8506, 8507, 8508, 8509, - 8510, 8511, 8512, 8513, 8514, 8515, 8516, 8517, - 8518, 8519, 8520, 8521, 8522, 8523, -1, -1 - } -}; diff --git a/lib/unistring/uninorm/decomposition.c b/lib/unistring/uninorm/decomposition.c deleted file mode 100644 index daf6113537..0000000000 --- a/lib/unistring/uninorm/decomposition.c +++ /dev/null @@ -1,112 +0,0 @@ -/* Decomposition of Unicode characters. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "uninorm.h" - -#include "decomposition-table.h" - -int -uc_decomposition (ucs4_t uc, int *decomp_tag, ucs4_t *decomposition) -{ - if (uc >= 0xAC00 && uc < 0xD7A4) - { - /* Hangul syllable. See Unicode standard, chapter 3, section - "Hangul Syllable Decomposition", See also the clarification at - , section - "Clarification of Hangul Jamo Handling". */ - unsigned int t; - - uc -= 0xAC00; - t = uc % 28; - - *decomp_tag = UC_DECOMP_CANONICAL; - if (t == 0) - { - unsigned int v, l; - - uc = uc / 28; - v = uc % 21; - l = uc / 21; - - decomposition[0] = 0x1100 + l; - decomposition[1] = 0x1161 + v; - return 2; - } - else - { -#if 1 /* Return the pairwise decomposition, not the full decomposition. */ - decomposition[0] = 0xAC00 + uc - t; /* = 0xAC00 + (l * 21 + v) * 28; */ - decomposition[1] = 0x11A7 + t; - return 2; -#else - unsigned int v, l; - - uc = uc / 28; - v = uc % 21; - l = uc / 21; - - decomposition[0] = 0x1100 + l; - decomposition[1] = 0x1161 + v; - decomposition[2] = 0x11A7 + t; - return 3; -#endif - } - } - else if (uc < 0x110000) - { - unsigned short entry = decomp_index (uc); - if (entry != (unsigned short)(-1)) - { - const unsigned char *p; - unsigned int element; - unsigned int length; - - p = &gl_uninorm_decomp_chars_table[3 * (entry & 0x7FFF)]; - element = (p[0] << 16) | (p[1] << 8) | p[2]; - /* The first element has 5 bits for the decomposition type. */ - *decomp_tag = (element >> 18) & 0x1f; - length = 1; - for (;;) - { - /* Every element has an 18 bits wide Unicode code point. */ - *decomposition = element & 0x3ffff; - /* Bit 23 tells whether there are more elements, */ - if ((element & (1 << 23)) == 0) - break; - p += 3; - element = (p[0] << 16) | (p[1] << 8) | p[2]; - decomposition++; - length++; - } - return length; - } - } - return -1; -} diff --git a/lib/unistring/uninorm/nfc.c b/lib/unistring/uninorm/nfc.c deleted file mode 100644 index b74fb39571..0000000000 --- a/lib/unistring/uninorm/nfc.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Unicode Normalization Form C. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "uninorm.h" - -#include "normalize-internal.h" - -const struct unicode_normalization_form uninorm_nfc = - { - NF_IS_COMPOSING, - uc_canonical_decomposition, - uc_composition, - &uninorm_nfd - }; diff --git a/lib/unistring/uninorm/nfd.c b/lib/unistring/uninorm/nfd.c deleted file mode 100644 index 8438b0d2ad..0000000000 --- a/lib/unistring/uninorm/nfd.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Unicode Normalization Form D. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "uninorm.h" - -#include "normalize-internal.h" - -const struct unicode_normalization_form uninorm_nfd = - { - 0, - uc_canonical_decomposition, - NULL, - &uninorm_nfd - }; diff --git a/lib/unistring/uninorm/nfkc.c b/lib/unistring/uninorm/nfkc.c deleted file mode 100644 index c4a07e389c..0000000000 --- a/lib/unistring/uninorm/nfkc.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Unicode Normalization Form KC. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "uninorm.h" - -#include "normalize-internal.h" -#include "decompose-internal.h" - -const struct unicode_normalization_form uninorm_nfkc = - { - NF_IS_COMPAT_DECOMPOSING | NF_IS_COMPOSING, - uc_compat_decomposition, - uc_composition, - &uninorm_nfkd - }; diff --git a/lib/unistring/uninorm/nfkd.c b/lib/unistring/uninorm/nfkd.c deleted file mode 100644 index 28e167786b..0000000000 --- a/lib/unistring/uninorm/nfkd.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Unicode Normalization Form KD. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "uninorm.h" - -#include "normalize-internal.h" -#include "decompose-internal.h" - -const struct unicode_normalization_form uninorm_nfkd = - { - NF_IS_COMPAT_DECOMPOSING, - uc_compat_decomposition, - NULL, - &uninorm_nfkd - }; diff --git a/lib/unistring/uninorm/normalize-internal.h b/lib/unistring/uninorm/normalize-internal.h deleted file mode 100644 index 3589e2a8e6..0000000000 --- a/lib/unistring/uninorm/normalize-internal.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Normalization of Unicode strings. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include "unitypes.h" - -/* Complete definition of normalization form descriptor. */ -struct unicode_normalization_form -{ - /* Bit mask containing meta-information. - This must be the first field. */ - unsigned int description; - #define NF_IS_COMPAT_DECOMPOSING (1 << 0) - #define NF_IS_COMPOSING (1 << 1) - /* Function that decomposes a Unicode character. */ - int (*decomposer) (ucs4_t uc, ucs4_t *decomposition); - /* Function that combines two Unicode characters, a starter and another - character. */ - ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2); - /* Decomposing variant. */ - const struct unicode_normalization_form *decomposing_variant; -}; diff --git a/lib/unistring/uninorm/u-normalize-internal.h b/lib/unistring/uninorm/u-normalize-internal.h deleted file mode 100644 index a50ca98074..0000000000 --- a/lib/unistring/uninorm/u-normalize-internal.h +++ /dev/null @@ -1,390 +0,0 @@ -/* Decomposition and composition of Unicode strings. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -UNIT * -FUNC (uninorm_t nf, const UNIT *s, size_t n, - UNIT *resultbuf, size_t *lengthp) -{ - int (*decomposer) (ucs4_t uc, ucs4_t *decomposition) = nf->decomposer; - ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2) = nf->composer; - - /* The result being accumulated. */ - UNIT *result; - size_t length; - size_t allocated; - /* The buffer for sorting. */ - #define SORTBUF_PREALLOCATED 64 - struct ucs4_with_ccc sortbuf_preallocated[2 * SORTBUF_PREALLOCATED]; - struct ucs4_with_ccc *sortbuf; /* array of size 2 * sortbuf_allocated */ - size_t sortbuf_allocated; - size_t sortbuf_count; - - /* Initialize the accumulator. */ - if (resultbuf == NULL) - { - result = NULL; - allocated = 0; - } - else - { - result = resultbuf; - allocated = *lengthp; - } - length = 0; - - /* Initialize the buffer for sorting. */ - sortbuf = sortbuf_preallocated; - sortbuf_allocated = SORTBUF_PREALLOCATED; - sortbuf_count = 0; - - { - const UNIT *s_end = s + n; - - for (;;) - { - int count; - ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; - int decomposed_count; - int i; - - if (s < s_end) - { - /* Fetch the next character. */ - count = U_MBTOUC_UNSAFE (&decomposed[0], s, s_end - s); - decomposed_count = 1; - - /* Decompose it, recursively. - It would be possible to precompute the recursive decomposition - and store it in a table. But this would significantly increase - the size of the decomposition tables, because for example for - U+1FC1 the recursive canonical decomposition and the recursive - compatibility decomposition are different. */ - { - int curr; - - for (curr = 0; curr < decomposed_count; ) - { - /* Invariant: decomposed[0..curr-1] is fully decomposed, i.e. - all elements are atomic. */ - ucs4_t curr_decomposed[UC_DECOMPOSITION_MAX_LENGTH]; - int curr_decomposed_count; - - curr_decomposed_count = decomposer (decomposed[curr], curr_decomposed); - if (curr_decomposed_count >= 0) - { - /* Move curr_decomposed[0..curr_decomposed_count-1] over - decomposed[curr], making room. It's not worth using - memcpy() here, since the counts are so small. */ - int shift = curr_decomposed_count - 1; - - if (shift < 0) - abort (); - if (shift > 0) - { - int j; - - decomposed_count += shift; - if (decomposed_count > UC_DECOMPOSITION_MAX_LENGTH) - abort (); - for (j = decomposed_count - 1 - shift; j > curr; j--) - decomposed[j + shift] = decomposed[j]; - } - for (; shift >= 0; shift--) - decomposed[curr + shift] = curr_decomposed[shift]; - } - else - { - /* decomposed[curr] is atomic. */ - curr++; - } - } - } - } - else - { - count = 0; - decomposed_count = 0; - } - - i = 0; - for (;;) - { - ucs4_t uc; - int ccc; - - if (s < s_end) - { - /* Fetch the next character from the decomposition. */ - if (i == decomposed_count) - break; - uc = decomposed[i]; - ccc = uc_combining_class (uc); - } - else - { - /* End of string reached. */ - uc = 0; - ccc = 0; - } - - if (ccc == 0) - { - size_t j; - - /* Apply the canonical ordering algorithm to the accumulated - sequence of characters. */ - if (sortbuf_count > 1) - gl_uninorm_decompose_merge_sort_inplace (sortbuf, sortbuf_count, - sortbuf + sortbuf_count); - - if (composer != NULL) - { - /* Attempt to combine decomposed characters, as specified - in the Unicode Standard Annex #15 "Unicode Normalization - Forms". We need to check - 1. whether the first accumulated character is a - "starter" (i.e. has ccc = 0). This is usually the - case. But when the string starts with a - non-starter, the sortbuf also starts with a - non-starter. Btw, this check could also be - omitted, because the composition table has only - entries (code1, code2) for which code1 is a - starter; if the first accumulated character is not - a starter, no lookup will succeed. - 2. If the sortbuf has more than one character, check - for each of these characters that are not "blocked" - from the starter (i.e. have a ccc that is higher - than the ccc of the previous character) whether it - can be combined with the first character. - 3. If only one character is left in sortbuf, check - whether it can be combined with the next character - (also a starter). */ - if (sortbuf_count > 0 && sortbuf[0].ccc == 0) - { - for (j = 1; j < sortbuf_count; ) - { - if (sortbuf[j].ccc > sortbuf[j - 1].ccc) - { - ucs4_t combined = - composer (sortbuf[0].code, sortbuf[j].code); - if (combined) - { - size_t k; - - sortbuf[0].code = combined; - /* sortbuf[0].ccc = 0, still valid. */ - for (k = j + 1; k < sortbuf_count; k++) - sortbuf[k - 1] = sortbuf[k]; - sortbuf_count--; - continue; - } - } - j++; - } - if (s < s_end && sortbuf_count == 1) - { - ucs4_t combined = - composer (sortbuf[0].code, uc); - if (combined) - { - uc = combined; - ccc = 0; - /* uc could be further combined with subsequent - characters. So don't put it into sortbuf[0] in - this round, only in the next round. */ - sortbuf_count = 0; - } - } - } - } - - for (j = 0; j < sortbuf_count; j++) - { - ucs4_t muc = sortbuf[j].code; - - /* Append muc to the result accumulator. */ - if (length < allocated) - { - int ret = - U_UCTOMB (result + length, muc, allocated - length); - if (ret == -1) - { - errno = EINVAL; - goto fail; - } - if (ret >= 0) - { - length += ret; - goto done_appending; - } - } - { - size_t old_allocated = allocated; - size_t new_allocated = 2 * old_allocated; - if (new_allocated < 64) - new_allocated = 64; - if (new_allocated < old_allocated) /* integer overflow? */ - abort (); - { - UNIT *larger_result; - if (result == NULL) - { - larger_result = - (UNIT *) malloc (new_allocated * sizeof (UNIT)); - if (larger_result == NULL) - { - errno = ENOMEM; - goto fail; - } - } - else if (result == resultbuf) - { - larger_result = - (UNIT *) malloc (new_allocated * sizeof (UNIT)); - if (larger_result == NULL) - { - errno = ENOMEM; - goto fail; - } - U_CPY (larger_result, resultbuf, length); - } - else - { - larger_result = - (UNIT *) realloc (result, new_allocated * sizeof (UNIT)); - if (larger_result == NULL) - { - errno = ENOMEM; - goto fail; - } - } - result = larger_result; - allocated = new_allocated; - { - int ret = - U_UCTOMB (result + length, muc, allocated - length); - if (ret == -1) - { - errno = EINVAL; - goto fail; - } - if (ret < 0) - abort (); - length += ret; - goto done_appending; - } - } - } - done_appending: ; - } - - /* sortbuf is now empty. */ - sortbuf_count = 0; - } - - if (!(s < s_end)) - /* End of string reached. */ - break; - - /* Append (uc, ccc) to sortbuf. */ - if (sortbuf_count == sortbuf_allocated) - { - struct ucs4_with_ccc *new_sortbuf; - - sortbuf_allocated = 2 * sortbuf_allocated; - if (sortbuf_allocated < sortbuf_count) /* integer overflow? */ - abort (); - new_sortbuf = - (struct ucs4_with_ccc *) malloc (2 * sortbuf_allocated * sizeof (struct ucs4_with_ccc)); - if (new_sortbuf == NULL) - { - errno = ENOMEM; - goto fail; - } - memcpy (new_sortbuf, sortbuf, - sortbuf_count * sizeof (struct ucs4_with_ccc)); - if (sortbuf != sortbuf_preallocated) - free (sortbuf); - sortbuf = new_sortbuf; - } - sortbuf[sortbuf_count].code = uc; - sortbuf[sortbuf_count].ccc = ccc; - sortbuf_count++; - - i++; - } - - if (!(s < s_end)) - /* End of string reached. */ - break; - - s += count; - } - } - - if (length == 0) - { - if (result == NULL) - { - /* Return a non-NULL value. NULL means error. */ - result = (UNIT *) malloc (1); - if (result == NULL) - { - errno = ENOMEM; - goto fail; - } - } - } - else if (result != resultbuf && length < allocated) - { - /* Shrink the allocated memory if possible. */ - UNIT *memory; - - memory = (UNIT *) realloc (result, length * sizeof (UNIT)); - if (memory != NULL) - result = memory; - } - - if (sortbuf_count > 0) - abort (); - if (sortbuf != sortbuf_preallocated) - free (sortbuf); - - *lengthp = length; - return result; - - fail: - { - int saved_errno = errno; - if (sortbuf != sortbuf_preallocated) - free (sortbuf); - if (result != resultbuf) - free (result); - errno = saved_errno; - } - return NULL; -} diff --git a/lib/unistring/uninorm/u16-normalize.c b/lib/unistring/uninorm/u16-normalize.c deleted file mode 100644 index 7272e266dc..0000000000 --- a/lib/unistring/uninorm/u16-normalize.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Normalization of UTF-16 strings. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "uninorm.h" - -#include -#include -#include -#include - -#include "unistr.h" -#include "unictype.h" -#include "normalize-internal.h" -#include "decompose-internal.h" - -#define FUNC u16_normalize -#define UNIT uint16_t -#define U_MBTOUC_UNSAFE u16_mbtouc_unsafe -#define U_UCTOMB u16_uctomb -#define U_CPY u16_cpy -#include "u-normalize-internal.h" diff --git a/lib/unistring/uninorm/u32-normalize.c b/lib/unistring/uninorm/u32-normalize.c deleted file mode 100644 index ce584d5966..0000000000 --- a/lib/unistring/uninorm/u32-normalize.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Normalization of UTF-32 strings. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "uninorm.h" - -#include -#include -#include -#include - -#include "unistr.h" -#include "unictype.h" -#include "normalize-internal.h" -#include "decompose-internal.h" - -#define FUNC u32_normalize -#define UNIT uint32_t -#define U_MBTOUC_UNSAFE u32_mbtouc_unsafe -#define U_UCTOMB u32_uctomb -#define U_CPY u32_cpy -#include "u-normalize-internal.h" diff --git a/lib/unistring/uninorm/u8-normalize.c b/lib/unistring/uninorm/u8-normalize.c deleted file mode 100644 index f2dc4d6935..0000000000 --- a/lib/unistring/uninorm/u8-normalize.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Normalization of UTF-8 strings. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "uninorm.h" - -#include -#include -#include -#include - -#include "unistr.h" -#include "unictype.h" -#include "normalize-internal.h" -#include "decompose-internal.h" - -#define FUNC u8_normalize -#define UNIT uint8_t -#define U_MBTOUC_UNSAFE u8_mbtouc_unsafe -#define U_UCTOMB u8_uctomb -#define U_CPY u8_cpy -#include "u-normalize-internal.h" diff --git a/lib/unistring/unistr.in.h b/lib/unistring/unistr.in.h deleted file mode 100644 index 4619fa889c..0000000000 --- a/lib/unistring/unistr.in.h +++ /dev/null @@ -1,756 +0,0 @@ -/* Elementary Unicode string functions. - Copyright (C) 2001-2002, 2005-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _UNISTR_H -#define _UNISTR_H - -#include "unitypes.h" - -/* Get common macros for C. */ -#include "unused-parameter.h" - -/* Get bool. */ -#include - -/* Get size_t. */ -#include - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Conventions: - - All functions prefixed with u8_ operate on UTF-8 encoded strings. - Their unit is an uint8_t (1 byte). - - All functions prefixed with u16_ operate on UTF-16 encoded strings. - Their unit is an uint16_t (a 2-byte word). - - All functions prefixed with u32_ operate on UCS-4 encoded strings. - Their unit is an uint32_t (a 4-byte word). - - All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly - n units. - - All arguments starting with "str" and the arguments of functions starting - with u8_str/u16_str/u32_str denote a NUL terminated string, i.e. a string - which terminates at the first NUL unit. This termination unit is - considered part of the string for all memory allocation purposes, but - is not considered part of the string for all other logical purposes. - - Functions returning a string result take a (resultbuf, lengthp) argument - pair. If resultbuf is not NULL and the result fits into *lengthp units, - it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly - allocated string is returned. In both cases, *lengthp is set to the - length (number of units) of the returned string. In case of error, - NULL is returned and errno is set. */ - - -/* Elementary string checks. */ - -/* Check whether an UTF-8 string is well-formed. - Return NULL if valid, or a pointer to the first invalid unit otherwise. */ -extern const uint8_t * - u8_check (const uint8_t *s, size_t n) - _UC_ATTRIBUTE_PURE; - -/* Check whether an UTF-16 string is well-formed. - Return NULL if valid, or a pointer to the first invalid unit otherwise. */ -extern const uint16_t * - u16_check (const uint16_t *s, size_t n) - _UC_ATTRIBUTE_PURE; - -/* Check whether an UCS-4 string is well-formed. - Return NULL if valid, or a pointer to the first invalid unit otherwise. */ -extern const uint32_t * - u32_check (const uint32_t *s, size_t n) - _UC_ATTRIBUTE_PURE; - - -/* Elementary string conversions. */ - -/* Convert an UTF-8 string to an UTF-16 string. */ -extern uint16_t * - u8_to_u16 (const uint8_t *s, size_t n, uint16_t *resultbuf, - size_t *lengthp); - -/* Convert an UTF-8 string to an UCS-4 string. */ -extern uint32_t * - u8_to_u32 (const uint8_t *s, size_t n, uint32_t *resultbuf, - size_t *lengthp); - -/* Convert an UTF-16 string to an UTF-8 string. */ -extern uint8_t * - u16_to_u8 (const uint16_t *s, size_t n, uint8_t *resultbuf, - size_t *lengthp); - -/* Convert an UTF-16 string to an UCS-4 string. */ -extern uint32_t * - u16_to_u32 (const uint16_t *s, size_t n, uint32_t *resultbuf, - size_t *lengthp); - -/* Convert an UCS-4 string to an UTF-8 string. */ -extern uint8_t * - u32_to_u8 (const uint32_t *s, size_t n, uint8_t *resultbuf, - size_t *lengthp); - -/* Convert an UCS-4 string to an UTF-16 string. */ -extern uint16_t * - u32_to_u16 (const uint32_t *s, size_t n, uint16_t *resultbuf, - size_t *lengthp); - - -/* Elementary string functions. */ - -/* Return the length (number of units) of the first character in S, which is - no longer than N. Return 0 if it is the NUL character. Return -1 upon - failure. */ -/* Similar to mblen(), except that s must not be NULL. */ -extern int - u8_mblen (const uint8_t *s, size_t n) - _UC_ATTRIBUTE_PURE; -extern int - u16_mblen (const uint16_t *s, size_t n) - _UC_ATTRIBUTE_PURE; -extern int - u32_mblen (const uint32_t *s, size_t n) - _UC_ATTRIBUTE_PURE; - -/* Return the length (number of units) of the first character in S, putting - its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd, - and an appropriate number of units is returned. - The number of available units, N, must be > 0. */ -/* Similar to mbtowc(), except that puc and s must not be NULL, n must be > 0, - and the NUL character is not treated specially. */ -/* The variants with _safe suffix are safe, even if the library is compiled - without --enable-safety. */ - -#if GNULIB_UNISTR_U8_MBTOUC_UNSAFE || HAVE_LIBUNISTRING -# if !HAVE_INLINE -extern int - u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n); -# else -extern int - u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n); -static inline int -u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n) -{ - uint8_t c = *s; - - if (c < 0x80) - { - *puc = c; - return 1; - } - else - return u8_mbtouc_unsafe_aux (puc, s, n); -} -# endif -#endif - -#if GNULIB_UNISTR_U16_MBTOUC_UNSAFE || HAVE_LIBUNISTRING -# if !HAVE_INLINE -extern int - u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n); -# else -extern int - u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n); -static inline int -u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n) -{ - uint16_t c = *s; - - if (c < 0xd800 || c >= 0xe000) - { - *puc = c; - return 1; - } - else - return u16_mbtouc_unsafe_aux (puc, s, n); -} -# endif -#endif - -#if GNULIB_UNISTR_U32_MBTOUC_UNSAFE || HAVE_LIBUNISTRING -# if !HAVE_INLINE -extern int - u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n); -# else -static inline int -u32_mbtouc_unsafe (ucs4_t *puc, - const uint32_t *s, size_t n _GL_UNUSED_PARAMETER) -{ - uint32_t c = *s; - - if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) - *puc = c; - else - /* invalid multibyte character */ - *puc = 0xfffd; - return 1; -} -# endif -#endif - -#if GNULIB_UNISTR_U8_MBTOUC || HAVE_LIBUNISTRING -# if !HAVE_INLINE -extern int - u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n); -# else -extern int - u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n); -static inline int -u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n) -{ - uint8_t c = *s; - - if (c < 0x80) - { - *puc = c; - return 1; - } - else - return u8_mbtouc_aux (puc, s, n); -} -# endif -#endif - -#if GNULIB_UNISTR_U16_MBTOUC || HAVE_LIBUNISTRING -# if !HAVE_INLINE -extern int - u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n); -# else -extern int - u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n); -static inline int -u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n) -{ - uint16_t c = *s; - - if (c < 0xd800 || c >= 0xe000) - { - *puc = c; - return 1; - } - else - return u16_mbtouc_aux (puc, s, n); -} -# endif -#endif - -#if GNULIB_UNISTR_U32_MBTOUC || HAVE_LIBUNISTRING -# if !HAVE_INLINE -extern int - u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n); -# else -static inline int -u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n _GL_UNUSED_PARAMETER) -{ - uint32_t c = *s; - - if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) - *puc = c; - else - /* invalid multibyte character */ - *puc = 0xfffd; - return 1; -} -# endif -#endif - -/* Return the length (number of units) of the first character in S, putting - its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd, - and -1 is returned for an invalid sequence of units, -2 is returned for an - incomplete sequence of units. - The number of available units, N, must be > 0. */ -/* Similar to u*_mbtouc(), except that the return value gives more details - about the failure, similar to mbrtowc(). */ - -#if GNULIB_UNISTR_U8_MBTOUCR || HAVE_LIBUNISTRING -extern int - u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n); -#endif - -#if GNULIB_UNISTR_U16_MBTOUCR || HAVE_LIBUNISTRING -extern int - u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n); -#endif - -#if GNULIB_UNISTR_U32_MBTOUCR || HAVE_LIBUNISTRING -extern int - u32_mbtoucr (ucs4_t *puc, const uint32_t *s, size_t n); -#endif - -/* Put the multibyte character represented by UC in S, returning its - length. Return -1 upon failure, -2 if the number of available units, N, - is too small. The latter case cannot occur if N >= 6/2/1, respectively. */ -/* Similar to wctomb(), except that s must not be NULL, and the argument n - must be specified. */ - -#if GNULIB_UNISTR_U8_UCTOMB || HAVE_LIBUNISTRING -/* Auxiliary function, also used by u8_chr, u8_strchr, u8_strrchr. */ -extern int - u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n); -# if !HAVE_INLINE -extern int - u8_uctomb (uint8_t *s, ucs4_t uc, int n); -# else -static inline int -u8_uctomb (uint8_t *s, ucs4_t uc, int n) -{ - if (uc < 0x80 && n > 0) - { - s[0] = uc; - return 1; - } - else - return u8_uctomb_aux (s, uc, n); -} -# endif -#endif - -#if GNULIB_UNISTR_U16_UCTOMB || HAVE_LIBUNISTRING -/* Auxiliary function, also used by u16_chr, u16_strchr, u16_strrchr. */ -extern int - u16_uctomb_aux (uint16_t *s, ucs4_t uc, int n); -# if !HAVE_INLINE -extern int - u16_uctomb (uint16_t *s, ucs4_t uc, int n); -# else -static inline int -u16_uctomb (uint16_t *s, ucs4_t uc, int n) -{ - if (uc < 0xd800 && n > 0) - { - s[0] = uc; - return 1; - } - else - return u16_uctomb_aux (s, uc, n); -} -# endif -#endif - -#if GNULIB_UNISTR_U32_UCTOMB || HAVE_LIBUNISTRING -# if !HAVE_INLINE -extern int - u32_uctomb (uint32_t *s, ucs4_t uc, int n); -# else -static inline int -u32_uctomb (uint32_t *s, ucs4_t uc, int n) -{ - if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000)) - { - if (n > 0) - { - *s = uc; - return 1; - } - else - return -2; - } - else - return -1; -} -# endif -#endif - -/* Copy N units from SRC to DEST. */ -/* Similar to memcpy(). */ -extern uint8_t * - u8_cpy (uint8_t *dest, const uint8_t *src, size_t n); -extern uint16_t * - u16_cpy (uint16_t *dest, const uint16_t *src, size_t n); -extern uint32_t * - u32_cpy (uint32_t *dest, const uint32_t *src, size_t n); - -/* Copy N units from SRC to DEST, guaranteeing correct behavior for - overlapping memory areas. */ -/* Similar to memmove(). */ -extern uint8_t * - u8_move (uint8_t *dest, const uint8_t *src, size_t n); -extern uint16_t * - u16_move (uint16_t *dest, const uint16_t *src, size_t n); -extern uint32_t * - u32_move (uint32_t *dest, const uint32_t *src, size_t n); - -/* Set the first N characters of S to UC. UC should be a character that - occupies only 1 unit. */ -/* Similar to memset(). */ -extern uint8_t * - u8_set (uint8_t *s, ucs4_t uc, size_t n); -extern uint16_t * - u16_set (uint16_t *s, ucs4_t uc, size_t n); -extern uint32_t * - u32_set (uint32_t *s, ucs4_t uc, size_t n); - -/* Compare S1 and S2, each of length N. */ -/* Similar to memcmp(). */ -extern int - u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n) - _UC_ATTRIBUTE_PURE; -extern int - u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n) - _UC_ATTRIBUTE_PURE; -extern int - u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n) - _UC_ATTRIBUTE_PURE; - -/* Compare S1 and S2. */ -/* Similar to the gnulib function memcmp2(). */ -extern int - u8_cmp2 (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2) - _UC_ATTRIBUTE_PURE; -extern int - u16_cmp2 (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2) - _UC_ATTRIBUTE_PURE; -extern int - u32_cmp2 (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2) - _UC_ATTRIBUTE_PURE; - -/* Search the string at S for UC. */ -/* Similar to memchr(). */ -extern uint8_t * - u8_chr (const uint8_t *s, size_t n, ucs4_t uc) - _UC_ATTRIBUTE_PURE; -extern uint16_t * - u16_chr (const uint16_t *s, size_t n, ucs4_t uc) - _UC_ATTRIBUTE_PURE; -extern uint32_t * - u32_chr (const uint32_t *s, size_t n, ucs4_t uc) - _UC_ATTRIBUTE_PURE; - -/* Count the number of Unicode characters in the N units from S. */ -/* Similar to mbsnlen(). */ -extern size_t - u8_mbsnlen (const uint8_t *s, size_t n) - _UC_ATTRIBUTE_PURE; -extern size_t - u16_mbsnlen (const uint16_t *s, size_t n) - _UC_ATTRIBUTE_PURE; -extern size_t - u32_mbsnlen (const uint32_t *s, size_t n) - _UC_ATTRIBUTE_PURE; - -/* Elementary string functions with memory allocation. */ - -/* Make a freshly allocated copy of S, of length N. */ -extern uint8_t * - u8_cpy_alloc (const uint8_t *s, size_t n); -extern uint16_t * - u16_cpy_alloc (const uint16_t *s, size_t n); -extern uint32_t * - u32_cpy_alloc (const uint32_t *s, size_t n); - -/* Elementary string functions on NUL terminated strings. */ - -/* Return the length (number of units) of the first character in S. - Return 0 if it is the NUL character. Return -1 upon failure. */ -extern int - u8_strmblen (const uint8_t *s) - _UC_ATTRIBUTE_PURE; -extern int - u16_strmblen (const uint16_t *s) - _UC_ATTRIBUTE_PURE; -extern int - u32_strmblen (const uint32_t *s) - _UC_ATTRIBUTE_PURE; - -/* Return the length (number of units) of the first character in S, putting - its 'ucs4_t' representation in *PUC. Return 0 if it is the NUL - character. Return -1 upon failure. */ -extern int - u8_strmbtouc (ucs4_t *puc, const uint8_t *s); -extern int - u16_strmbtouc (ucs4_t *puc, const uint16_t *s); -extern int - u32_strmbtouc (ucs4_t *puc, const uint32_t *s); - -/* Forward iteration step. Advances the pointer past the next character, - or returns NULL if the end of the string has been reached. Puts the - character's 'ucs4_t' representation in *PUC. */ -extern const uint8_t * - u8_next (ucs4_t *puc, const uint8_t *s); -extern const uint16_t * - u16_next (ucs4_t *puc, const uint16_t *s); -extern const uint32_t * - u32_next (ucs4_t *puc, const uint32_t *s); - -/* Backward iteration step. Advances the pointer to point to the previous - character, or returns NULL if the beginning of the string had been reached. - Puts the character's 'ucs4_t' representation in *PUC. */ -extern const uint8_t * - u8_prev (ucs4_t *puc, const uint8_t *s, const uint8_t *start); -extern const uint16_t * - u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start); -extern const uint32_t * - u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start); - -/* Return the number of units in S. */ -/* Similar to strlen(), wcslen(). */ -extern size_t - u8_strlen (const uint8_t *s) - _UC_ATTRIBUTE_PURE; -extern size_t - u16_strlen (const uint16_t *s) - _UC_ATTRIBUTE_PURE; -extern size_t - u32_strlen (const uint32_t *s) - _UC_ATTRIBUTE_PURE; - -/* Return the number of units in S, but at most MAXLEN. */ -/* Similar to strnlen(), wcsnlen(). */ -extern size_t - u8_strnlen (const uint8_t *s, size_t maxlen) - _UC_ATTRIBUTE_PURE; -extern size_t - u16_strnlen (const uint16_t *s, size_t maxlen) - _UC_ATTRIBUTE_PURE; -extern size_t - u32_strnlen (const uint32_t *s, size_t maxlen) - _UC_ATTRIBUTE_PURE; - -/* Copy SRC to DEST. */ -/* Similar to strcpy(), wcscpy(). */ -extern uint8_t * - u8_strcpy (uint8_t *dest, const uint8_t *src); -extern uint16_t * - u16_strcpy (uint16_t *dest, const uint16_t *src); -extern uint32_t * - u32_strcpy (uint32_t *dest, const uint32_t *src); - -/* Copy SRC to DEST, returning the address of the terminating NUL in DEST. */ -/* Similar to stpcpy(). */ -extern uint8_t * - u8_stpcpy (uint8_t *dest, const uint8_t *src); -extern uint16_t * - u16_stpcpy (uint16_t *dest, const uint16_t *src); -extern uint32_t * - u32_stpcpy (uint32_t *dest, const uint32_t *src); - -/* Copy no more than N units of SRC to DEST. */ -/* Similar to strncpy(), wcsncpy(). */ -extern uint8_t * - u8_strncpy (uint8_t *dest, const uint8_t *src, size_t n); -extern uint16_t * - u16_strncpy (uint16_t *dest, const uint16_t *src, size_t n); -extern uint32_t * - u32_strncpy (uint32_t *dest, const uint32_t *src, size_t n); - -/* Copy no more than N units of SRC to DEST. Return a pointer past the last - non-NUL unit written into DEST. */ -/* Similar to stpncpy(). */ -extern uint8_t * - u8_stpncpy (uint8_t *dest, const uint8_t *src, size_t n); -extern uint16_t * - u16_stpncpy (uint16_t *dest, const uint16_t *src, size_t n); -extern uint32_t * - u32_stpncpy (uint32_t *dest, const uint32_t *src, size_t n); - -/* Append SRC onto DEST. */ -/* Similar to strcat(), wcscat(). */ -extern uint8_t * - u8_strcat (uint8_t *dest, const uint8_t *src); -extern uint16_t * - u16_strcat (uint16_t *dest, const uint16_t *src); -extern uint32_t * - u32_strcat (uint32_t *dest, const uint32_t *src); - -/* Append no more than N units of SRC onto DEST. */ -/* Similar to strncat(), wcsncat(). */ -extern uint8_t * - u8_strncat (uint8_t *dest, const uint8_t *src, size_t n); -extern uint16_t * - u16_strncat (uint16_t *dest, const uint16_t *src, size_t n); -extern uint32_t * - u32_strncat (uint32_t *dest, const uint32_t *src, size_t n); - -/* Compare S1 and S2. */ -/* Similar to strcmp(), wcscmp(). */ -#ifdef __sun -/* Avoid a collision with the u8_strcmp() function in Solaris 11 libc. */ -extern int - u8_strcmp_gnu (const uint8_t *s1, const uint8_t *s2) - _UC_ATTRIBUTE_PURE; -# define u8_strcmp u8_strcmp_gnu -#else -extern int - u8_strcmp (const uint8_t *s1, const uint8_t *s2) - _UC_ATTRIBUTE_PURE; -#endif -extern int - u16_strcmp (const uint16_t *s1, const uint16_t *s2) - _UC_ATTRIBUTE_PURE; -extern int - u32_strcmp (const uint32_t *s1, const uint32_t *s2) - _UC_ATTRIBUTE_PURE; - -/* Compare S1 and S2 using the collation rules of the current locale. - Return -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2. - Upon failure, set errno and return any value. */ -/* Similar to strcoll(), wcscoll(). */ -extern int - u8_strcoll (const uint8_t *s1, const uint8_t *s2); -extern int - u16_strcoll (const uint16_t *s1, const uint16_t *s2); -extern int - u32_strcoll (const uint32_t *s1, const uint32_t *s2); - -/* Compare no more than N units of S1 and S2. */ -/* Similar to strncmp(), wcsncmp(). */ -extern int - u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n) - _UC_ATTRIBUTE_PURE; -extern int - u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n) - _UC_ATTRIBUTE_PURE; -extern int - u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n) - _UC_ATTRIBUTE_PURE; - -/* Duplicate S, returning an identical malloc'd string. */ -/* Similar to strdup(), wcsdup(). */ -extern uint8_t * - u8_strdup (const uint8_t *s); -extern uint16_t * - u16_strdup (const uint16_t *s); -extern uint32_t * - u32_strdup (const uint32_t *s); - -/* Find the first occurrence of UC in STR. */ -/* Similar to strchr(), wcschr(). */ -extern uint8_t * - u8_strchr (const uint8_t *str, ucs4_t uc) - _UC_ATTRIBUTE_PURE; -extern uint16_t * - u16_strchr (const uint16_t *str, ucs4_t uc) - _UC_ATTRIBUTE_PURE; -extern uint32_t * - u32_strchr (const uint32_t *str, ucs4_t uc) - _UC_ATTRIBUTE_PURE; - -/* Find the last occurrence of UC in STR. */ -/* Similar to strrchr(), wcsrchr(). */ -extern uint8_t * - u8_strrchr (const uint8_t *str, ucs4_t uc) - _UC_ATTRIBUTE_PURE; -extern uint16_t * - u16_strrchr (const uint16_t *str, ucs4_t uc) - _UC_ATTRIBUTE_PURE; -extern uint32_t * - u32_strrchr (const uint32_t *str, ucs4_t uc) - _UC_ATTRIBUTE_PURE; - -/* Return the length of the initial segment of STR which consists entirely - of Unicode characters not in REJECT. */ -/* Similar to strcspn(), wcscspn(). */ -extern size_t - u8_strcspn (const uint8_t *str, const uint8_t *reject) - _UC_ATTRIBUTE_PURE; -extern size_t - u16_strcspn (const uint16_t *str, const uint16_t *reject) - _UC_ATTRIBUTE_PURE; -extern size_t - u32_strcspn (const uint32_t *str, const uint32_t *reject) - _UC_ATTRIBUTE_PURE; - -/* Return the length of the initial segment of STR which consists entirely - of Unicode characters in ACCEPT. */ -/* Similar to strspn(), wcsspn(). */ -extern size_t - u8_strspn (const uint8_t *str, const uint8_t *accept) - _UC_ATTRIBUTE_PURE; -extern size_t - u16_strspn (const uint16_t *str, const uint16_t *accept) - _UC_ATTRIBUTE_PURE; -extern size_t - u32_strspn (const uint32_t *str, const uint32_t *accept) - _UC_ATTRIBUTE_PURE; - -/* Find the first occurrence in STR of any character in ACCEPT. */ -/* Similar to strpbrk(), wcspbrk(). */ -extern uint8_t * - u8_strpbrk (const uint8_t *str, const uint8_t *accept) - _UC_ATTRIBUTE_PURE; -extern uint16_t * - u16_strpbrk (const uint16_t *str, const uint16_t *accept) - _UC_ATTRIBUTE_PURE; -extern uint32_t * - u32_strpbrk (const uint32_t *str, const uint32_t *accept) - _UC_ATTRIBUTE_PURE; - -/* Find the first occurrence of NEEDLE in HAYSTACK. */ -/* Similar to strstr(), wcsstr(). */ -extern uint8_t * - u8_strstr (const uint8_t *haystack, const uint8_t *needle) - _UC_ATTRIBUTE_PURE; -extern uint16_t * - u16_strstr (const uint16_t *haystack, const uint16_t *needle) - _UC_ATTRIBUTE_PURE; -extern uint32_t * - u32_strstr (const uint32_t *haystack, const uint32_t *needle) - _UC_ATTRIBUTE_PURE; - -/* Test whether STR starts with PREFIX. */ -extern bool - u8_startswith (const uint8_t *str, const uint8_t *prefix) - _UC_ATTRIBUTE_PURE; -extern bool - u16_startswith (const uint16_t *str, const uint16_t *prefix) - _UC_ATTRIBUTE_PURE; -extern bool - u32_startswith (const uint32_t *str, const uint32_t *prefix) - _UC_ATTRIBUTE_PURE; - -/* Test whether STR ends with SUFFIX. */ -extern bool - u8_endswith (const uint8_t *str, const uint8_t *suffix) - _UC_ATTRIBUTE_PURE; -extern bool - u16_endswith (const uint16_t *str, const uint16_t *suffix) - _UC_ATTRIBUTE_PURE; -extern bool - u32_endswith (const uint32_t *str, const uint32_t *suffix) - _UC_ATTRIBUTE_PURE; - -/* Divide STR into tokens separated by characters in DELIM. - This interface is actually more similar to wcstok than to strtok. */ -/* Similar to strtok_r(), wcstok(). */ -extern uint8_t * - u8_strtok (uint8_t *str, const uint8_t *delim, uint8_t **ptr); -extern uint16_t * - u16_strtok (uint16_t *str, const uint16_t *delim, uint16_t **ptr); -extern uint32_t * - u32_strtok (uint32_t *str, const uint32_t *delim, uint32_t **ptr); - - -#ifdef __cplusplus -} -#endif - -#endif /* _UNISTR_H */ diff --git a/lib/unistring/unistr/u-cpy.h b/lib/unistring/unistr/u-cpy.h deleted file mode 100644 index 4d3c9a20c5..0000000000 --- a/lib/unistring/unistr/u-cpy.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Copy piece of UTF-8/UTF-16/UTF-32 string. - Copyright (C) 1999, 2002, 2006, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -UNIT * -FUNC (UNIT *dest, const UNIT *src, size_t n) -{ -#if 0 - UNIT *destptr = dest; - - for (; n > 0; n--) - *destptr++ = *src++; -#else - memcpy ((char *) dest, (const char *) src, n * sizeof (UNIT)); -#endif - return dest; -} diff --git a/lib/unistring/unistr/u16-cpy.c b/lib/unistring/unistr/u16-cpy.c deleted file mode 100644 index 8ba0be25e8..0000000000 --- a/lib/unistring/unistr/u16-cpy.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copy piece of UTF-16 string. - Copyright (C) 1999, 2002, 2006, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -#define FUNC u16_cpy -#define UNIT uint16_t -#include "u-cpy.h" diff --git a/lib/unistring/unistr/u16-mbtouc-unsafe-aux.c b/lib/unistring/unistr/u16-mbtouc-unsafe-aux.c deleted file mode 100644 index 752f6d69d9..0000000000 --- a/lib/unistring/unistr/u16-mbtouc-unsafe-aux.c +++ /dev/null @@ -1,61 +0,0 @@ -/* Conversion UTF-16 to UCS-4. - Copyright (C) 2001-2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -#if defined IN_LIBUNISTRING || HAVE_INLINE - -int -u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n) -{ - uint16_t c = *s; - - if (c < 0xdc00) - { - if (n >= 2) - { - if (s[1] >= 0xdc00 && s[1] < 0xe000) - { - *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); - return 2; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - } - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 1; -} - -#endif diff --git a/lib/unistring/unistr/u16-mbtouc-unsafe.c b/lib/unistring/unistr/u16-mbtouc-unsafe.c deleted file mode 100644 index 27bd934f83..0000000000 --- a/lib/unistring/unistr/u16-mbtouc-unsafe.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Look at first character in UTF-16 string. - Copyright (C) 1999-2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#if defined IN_LIBUNISTRING -/* Tell unistr.h to declare u16_mbtouc_unsafe as 'extern', not - 'static inline'. */ -# include "unistring-notinline.h" -#endif - -/* Specification. */ -#include "unistr.h" - -#if !HAVE_INLINE - -int -u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n) -{ - uint16_t c = *s; - - if (c < 0xd800 || c >= 0xe000) - { - *puc = c; - return 1; - } - if (c < 0xdc00) - { - if (n >= 2) - { - if (s[1] >= 0xdc00 && s[1] < 0xe000) - { - *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); - return 2; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - } - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 1; -} - -#endif diff --git a/lib/unistring/unistr/u16-mbtoucr.c b/lib/unistring/unistr/u16-mbtoucr.c deleted file mode 100644 index fb5ddbe54a..0000000000 --- a/lib/unistring/unistr/u16-mbtoucr.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Look at first character in UTF-16 string, returning an error code. - Copyright (C) 1999-2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -int -u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n) -{ - uint16_t c = *s; - - if (c < 0xd800 || c >= 0xe000) - { - *puc = c; - return 1; - } - if (c < 0xdc00) - { - if (n >= 2) - { - if (s[1] >= 0xdc00 && s[1] < 0xe000) - { - *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); - return 2; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - return -2; - } - } - /* invalid multibyte character */ - *puc = 0xfffd; - return -1; -} diff --git a/lib/unistring/unistr/u16-to-u8.c b/lib/unistring/unistr/u16-to-u8.c deleted file mode 100644 index 6fe9e6cd66..0000000000 --- a/lib/unistring/unistr/u16-to-u8.c +++ /dev/null @@ -1,146 +0,0 @@ -/* Convert UTF-16 string to UTF-8 string. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -#define FUNC u16_to_u8 -#define SRC_UNIT uint16_t -#define DST_UNIT uint8_t - -#include -#include -#include - -DST_UNIT * -FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) -{ - const SRC_UNIT *s_end = s + n; - /* Output string accumulator. */ - DST_UNIT *result; - size_t allocated; - size_t length; - - if (resultbuf != NULL) - { - result = resultbuf; - allocated = *lengthp; - } - else - { - result = NULL; - allocated = 0; - } - length = 0; - /* Invariants: - result is either == resultbuf or == NULL or malloc-allocated. - If length > 0, then result != NULL. */ - - while (s < s_end) - { - ucs4_t uc; - int count; - - /* Fetch a Unicode character from the input string. */ - count = u16_mbtoucr (&uc, s, s_end - s); - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - errno = EILSEQ; - return NULL; - } - s += count; - - /* Store it in the output string. */ - count = u8_uctomb (result + length, uc, allocated - length); - if (count == -1) - { - if (!(result == resultbuf || result == NULL)) - free (result); - errno = EILSEQ; - return NULL; - } - if (count == -2) - { - DST_UNIT *memory; - - allocated = (allocated > 0 ? 2 * allocated : 12); - if (length + 6 > allocated) - allocated = length + 6; - if (result == resultbuf || result == NULL) - memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); - else - memory = - (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); - - if (memory == NULL) - { - if (!(result == resultbuf || result == NULL)) - free (result); - errno = ENOMEM; - return NULL; - } - if (result == resultbuf && length > 0) - memcpy ((char *) memory, (char *) result, - length * sizeof (DST_UNIT)); - result = memory; - count = u8_uctomb (result + length, uc, allocated - length); - if (count < 0) - abort (); - } - length += count; - } - - if (length == 0) - { - if (result == NULL) - { - /* Return a non-NULL value. NULL means error. */ - result = (DST_UNIT *) malloc (1); - if (result == NULL) - { - errno = ENOMEM; - return NULL; - } - } - } - else if (result != resultbuf && length < allocated) - { - /* Shrink the allocated memory if possible. */ - DST_UNIT *memory; - - memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); - if (memory != NULL) - result = memory; - } - - *lengthp = length; - return result; -} diff --git a/lib/unistring/unistr/u16-uctomb-aux.c b/lib/unistring/unistr/u16-uctomb-aux.c deleted file mode 100644 index 55f14d8ea4..0000000000 --- a/lib/unistring/unistr/u16-uctomb-aux.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Conversion UCS-4 to UTF-16. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -int -u16_uctomb_aux (uint16_t *s, ucs4_t uc, int n) -{ - if (uc < 0xd800) - { - /* The case n >= 1 is already handled by the caller. */ - } - else if (uc < 0x10000) - { - if (uc >= 0xe000) - { - if (n >= 1) - { - s[0] = uc; - return 1; - } - } - else - return -1; - } - else - { - if (uc < 0x110000) - { - if (n >= 2) - { - s[0] = 0xd800 + ((uc - 0x10000) >> 10); - s[1] = 0xdc00 + ((uc - 0x10000) & 0x3ff); - return 2; - } - } - else - return -1; - } - return -2; -} diff --git a/lib/unistring/unistr/u16-uctomb.c b/lib/unistring/unistr/u16-uctomb.c deleted file mode 100644 index e53e87ccbf..0000000000 --- a/lib/unistring/unistr/u16-uctomb.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Store a character in UTF-16 string. - Copyright (C) 2002, 2005-2006, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#if defined IN_LIBUNISTRING -/* Tell unistr.h to declare u16_uctomb as 'extern', not 'static inline'. */ -# include "unistring-notinline.h" -#endif - -/* Specification. */ -#include "unistr.h" - -#if !HAVE_INLINE - -int -u16_uctomb (uint16_t *s, ucs4_t uc, int n) -{ - if (uc < 0xd800) - { - if (n > 0) - { - s[0] = uc; - return 1; - } - /* else return -2, below. */ - } - else if (uc < 0x10000) - { - if (uc >= 0xe000) - { - if (n >= 1) - { - s[0] = uc; - return 1; - } - } - else - return -1; - } - else - { - if (uc < 0x110000) - { - if (n >= 2) - { - s[0] = 0xd800 + ((uc - 0x10000) >> 10); - s[1] = 0xdc00 + ((uc - 0x10000) & 0x3ff); - return 2; - } - } - else - return -1; - } - return -2; -} - -#endif diff --git a/lib/unistring/unistr/u32-cpy.c b/lib/unistring/unistr/u32-cpy.c deleted file mode 100644 index 2edab0652f..0000000000 --- a/lib/unistring/unistr/u32-cpy.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copy piece of UTF-32 string. - Copyright (C) 1999, 2002, 2006, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -#define FUNC u32_cpy -#define UNIT uint32_t -#include "u-cpy.h" diff --git a/lib/unistring/unistr/u32-mbtouc-unsafe.c b/lib/unistring/unistr/u32-mbtouc-unsafe.c deleted file mode 100644 index c08b640bdc..0000000000 --- a/lib/unistring/unistr/u32-mbtouc-unsafe.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Look at first character in UTF-32 string. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#if defined IN_LIBUNISTRING -/* Tell unistr.h to declare u32_mbtouc_unsafe as 'extern', not - 'static inline'. */ -# include "unistring-notinline.h" -#endif - -/* Specification. */ -#include "unistr.h" - -#if !HAVE_INLINE - -int -u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n) -{ - uint32_t c = *s; - - if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) - *puc = c; - else - /* invalid multibyte character */ - *puc = 0xfffd; - return 1; -} - -#endif diff --git a/lib/unistring/unistr/u32-to-u8.c b/lib/unistring/unistr/u32-to-u8.c deleted file mode 100644 index d24b777075..0000000000 --- a/lib/unistring/unistr/u32-to-u8.c +++ /dev/null @@ -1,140 +0,0 @@ -/* Convert UTF-32 string to UTF-8 string. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -#define FUNC u32_to_u8 -#define SRC_UNIT uint32_t -#define DST_UNIT uint8_t - -#include -#include -#include - -DST_UNIT * -FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) -{ - const SRC_UNIT *s_end = s + n; - /* Output string accumulator. */ - DST_UNIT *result; - size_t allocated; - size_t length; - - if (resultbuf != NULL) - { - result = resultbuf; - allocated = *lengthp; - } - else - { - result = NULL; - allocated = 0; - } - length = 0; - /* Invariants: - result is either == resultbuf or == NULL or malloc-allocated. - If length > 0, then result != NULL. */ - - while (s < s_end) - { - ucs4_t uc; - int count; - - /* Fetch a Unicode character from the input string. */ - uc = *s++; - /* No need to call the safe variant u32_mbtouc, because - u8_uctomb will verify uc anyway. */ - - /* Store it in the output string. */ - count = u8_uctomb (result + length, uc, allocated - length); - if (count == -1) - { - if (!(result == resultbuf || result == NULL)) - free (result); - errno = EILSEQ; - return NULL; - } - if (count == -2) - { - DST_UNIT *memory; - - allocated = (allocated > 0 ? 2 * allocated : 12); - if (length + 6 > allocated) - allocated = length + 6; - if (result == resultbuf || result == NULL) - memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); - else - memory = - (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); - - if (memory == NULL) - { - if (!(result == resultbuf || result == NULL)) - free (result); - errno = ENOMEM; - return NULL; - } - if (result == resultbuf && length > 0) - memcpy ((char *) memory, (char *) result, - length * sizeof (DST_UNIT)); - result = memory; - count = u8_uctomb (result + length, uc, allocated - length); - if (count < 0) - abort (); - } - length += count; - } - - if (length == 0) - { - if (result == NULL) - { - /* Return a non-NULL value. NULL means error. */ - result = (DST_UNIT *) malloc (1); - if (result == NULL) - { - errno = ENOMEM; - return NULL; - } - } - } - else if (result != resultbuf && length < allocated) - { - /* Shrink the allocated memory if possible. */ - DST_UNIT *memory; - - memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); - if (memory != NULL) - result = memory; - } - - *lengthp = length; - return result; -} diff --git a/lib/unistring/unistr/u32-uctomb.c b/lib/unistring/unistr/u32-uctomb.c deleted file mode 100644 index 0ab77400c9..0000000000 --- a/lib/unistring/unistr/u32-uctomb.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Store a character in UTF-32 string. - Copyright (C) 2002, 2005-2006, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#if defined IN_LIBUNISTRING -/* Tell unistr.h to declare u32_uctomb as 'extern', not 'static inline'. */ -# include "unistring-notinline.h" -#endif - -/* Specification. */ -#include "unistr.h" - -#if !HAVE_INLINE - -int -u32_uctomb (uint32_t *s, ucs4_t uc, int n) -{ - if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000)) - { - if (n > 0) - { - *s = uc; - return 1; - } - else - return -2; - } - else - return -1; -} - -#endif diff --git a/lib/unistring/unistr/u8-check.c b/lib/unistring/unistr/u8-check.c deleted file mode 100644 index c62fa7d81e..0000000000 --- a/lib/unistring/unistr/u8-check.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Check UTF-8 string. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -const uint8_t * -u8_check (const uint8_t *s, size_t n) -{ - const uint8_t *s_end = s + n; - - while (s < s_end) - { - /* Keep in sync with unistr.h and u8-mbtouc-aux.c. */ - uint8_t c = *s; - - if (c < 0x80) - { - s++; - continue; - } - if (c >= 0xc2) - { - if (c < 0xe0) - { - if (s + 2 <= s_end - && (s[1] ^ 0x80) < 0x40) - { - s += 2; - continue; - } - } - else if (c < 0xf0) - { - if (s + 3 <= s_end - && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 - && (c >= 0xe1 || s[1] >= 0xa0) - && (c != 0xed || s[1] < 0xa0)) - { - s += 3; - continue; - } - } - else if (c < 0xf8) - { - if (s + 4 <= s_end - && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 - && (s[3] ^ 0x80) < 0x40 - && (c >= 0xf1 || s[1] >= 0x90) - && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))) - { - s += 4; - continue; - } - } - } - /* invalid or incomplete multibyte character */ - return s; - } - return NULL; -} diff --git a/lib/unistring/unistr/u8-cpy.c b/lib/unistring/unistr/u8-cpy.c deleted file mode 100644 index 4a94a21ace..0000000000 --- a/lib/unistring/unistr/u8-cpy.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Copy piece of UTF-8 string. - Copyright (C) 2002, 2006, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -#define FUNC u8_cpy -#define UNIT uint8_t -#include "u-cpy.h" diff --git a/lib/unistring/unistr/u8-mbtouc-unsafe-aux.c b/lib/unistring/unistr/u8-mbtouc-unsafe-aux.c deleted file mode 100644 index 8ec7911782..0000000000 --- a/lib/unistring/unistr/u8-mbtouc-unsafe-aux.c +++ /dev/null @@ -1,149 +0,0 @@ -/* Conversion UTF-8 to UCS-4. - Copyright (C) 2001-2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -#if defined IN_LIBUNISTRING || HAVE_INLINE - -int -u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n) -{ - uint8_t c = *s; - - if (c >= 0xc2) - { - if (c < 0xe0) - { - if (n >= 2) - { - if ((s[1] ^ 0x80) < 0x40) - { - *puc = ((unsigned int) (c & 0x1f) << 6) - | (unsigned int) (s[1] ^ 0x80); - return 2; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - return 1; - } - } - else if (c < 0xf0) - { - if (n >= 3) - { - if ((s[1] ^ 0x80) < 0x40) - { - if ((s[2] ^ 0x80) < 0x40) - { - if ((c >= 0xe1 || s[1] >= 0xa0) - && (c != 0xed || s[1] < 0xa0)) - { - *puc = ((unsigned int) (c & 0x0f) << 12) - | ((unsigned int) (s[1] ^ 0x80) << 6) - | (unsigned int) (s[2] ^ 0x80); - return 3; - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 3; - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 2; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - if (n == 1 || (s[1] ^ 0x80) >= 0x40) - return 1; - else - return 2; - } - } - else if (c < 0xf8) - { - if (n >= 4) - { - if ((s[1] ^ 0x80) < 0x40) - { - if ((s[2] ^ 0x80) < 0x40) - { - if ((s[3] ^ 0x80) < 0x40) - { - if ((c >= 0xf1 || s[1] >= 0x90) - && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) - ) - { - *puc = ((unsigned int) (c & 0x07) << 18) - | ((unsigned int) (s[1] ^ 0x80) << 12) - | ((unsigned int) (s[2] ^ 0x80) << 6) - | (unsigned int) (s[3] ^ 0x80); - return 4; - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 4; - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 3; - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 2; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - if (n == 1 || (s[1] ^ 0x80) >= 0x40) - return 1; - else if (n == 2 || (s[2] ^ 0x80) >= 0x40) - return 2; - else - return 3; - } - } - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 1; -} - -#endif diff --git a/lib/unistring/unistr/u8-mbtouc-unsafe.c b/lib/unistring/unistr/u8-mbtouc-unsafe.c deleted file mode 100644 index b3c02e75bb..0000000000 --- a/lib/unistring/unistr/u8-mbtouc-unsafe.c +++ /dev/null @@ -1,160 +0,0 @@ -/* Look at first character in UTF-8 string. - Copyright (C) 1999-2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#if defined IN_LIBUNISTRING -/* Tell unistr.h to declare u8_mbtouc_unsafe as 'extern', not - 'static inline'. */ -# include "unistring-notinline.h" -#endif - -/* Specification. */ -#include "unistr.h" - -#if !HAVE_INLINE - -int -u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n) -{ - uint8_t c = *s; - - if (c < 0x80) - { - *puc = c; - return 1; - } - else if (c >= 0xc2) - { - if (c < 0xe0) - { - if (n >= 2) - { - if ((s[1] ^ 0x80) < 0x40) - { - *puc = ((unsigned int) (c & 0x1f) << 6) - | (unsigned int) (s[1] ^ 0x80); - return 2; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - return 1; - } - } - else if (c < 0xf0) - { - if (n >= 3) - { - if ((s[1] ^ 0x80) < 0x40) - { - if ((s[2] ^ 0x80) < 0x40) - { - if ((c >= 0xe1 || s[1] >= 0xa0) - && (c != 0xed || s[1] < 0xa0)) - { - *puc = ((unsigned int) (c & 0x0f) << 12) - | ((unsigned int) (s[1] ^ 0x80) << 6) - | (unsigned int) (s[2] ^ 0x80); - return 3; - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 3; - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 2; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - if (n == 1 || (s[1] ^ 0x80) >= 0x40) - return 1; - else - return 2; - } - } - else if (c < 0xf8) - { - if (n >= 4) - { - if ((s[1] ^ 0x80) < 0x40) - { - if ((s[2] ^ 0x80) < 0x40) - { - if ((s[3] ^ 0x80) < 0x40) - { - if ((c >= 0xf1 || s[1] >= 0x90) - && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) - ) - { - *puc = ((unsigned int) (c & 0x07) << 18) - | ((unsigned int) (s[1] ^ 0x80) << 12) - | ((unsigned int) (s[2] ^ 0x80) << 6) - | (unsigned int) (s[3] ^ 0x80); - return 4; - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 4; - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 3; - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 2; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - if (n == 1 || (s[1] ^ 0x80) >= 0x40) - return 1; - else if (n == 2 || (s[2] ^ 0x80) >= 0x40) - return 2; - else - return 3; - } - } - } - /* invalid multibyte character */ - *puc = 0xfffd; - return 1; -} - -#endif diff --git a/lib/unistring/unistr/u8-mbtoucr.c b/lib/unistring/unistr/u8-mbtoucr.c deleted file mode 100644 index d4125bf9e7..0000000000 --- a/lib/unistring/unistr/u8-mbtoucr.c +++ /dev/null @@ -1,152 +0,0 @@ -/* Look at first character in UTF-8 string, returning an error code. - Copyright (C) 1999-2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -int -u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n) -{ - uint8_t c = *s; - - if (c < 0x80) - { - *puc = c; - return 1; - } - else if (c >= 0xc2) - { - if (c < 0xe0) - { - if (n >= 2) - { - if ((s[1] ^ 0x80) < 0x40) - { - *puc = ((unsigned int) (c & 0x1f) << 6) - | (unsigned int) (s[1] ^ 0x80); - return 2; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - return -2; - } - } - else if (c < 0xf0) - { - if (n >= 2) - { - if ((s[1] ^ 0x80) < 0x40 - && (c >= 0xe1 || s[1] >= 0xa0) - && (c != 0xed || s[1] < 0xa0)) - { - if (n >= 3) - { - if ((s[2] ^ 0x80) < 0x40) - { - *puc = ((unsigned int) (c & 0x0f) << 12) - | ((unsigned int) (s[1] ^ 0x80) << 6) - | (unsigned int) (s[2] ^ 0x80); - return 3; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - return -2; - } - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - return -2; - } - } - else if (c < 0xf8) - { - if (n >= 2) - { - if ((s[1] ^ 0x80) < 0x40 - && (c >= 0xf1 || s[1] >= 0x90) - && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90))) - { - if (n >= 3) - { - if ((s[2] ^ 0x80) < 0x40) - { - if (n >= 4) - { - if ((s[3] ^ 0x80) < 0x40) - { - *puc = ((unsigned int) (c & 0x07) << 18) - | ((unsigned int) (s[1] ^ 0x80) << 12) - | ((unsigned int) (s[2] ^ 0x80) << 6) - | (unsigned int) (s[3] ^ 0x80); - return 4; - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - return -2; - } - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - return -2; - } - } - /* invalid multibyte character */ - } - else - { - /* incomplete multibyte character */ - *puc = 0xfffd; - return -2; - } - } - } - /* invalid multibyte character */ - *puc = 0xfffd; - return -1; -} diff --git a/lib/unistring/unistr/u8-to-u16.c b/lib/unistring/unistr/u8-to-u16.c deleted file mode 100644 index 881ce264be..0000000000 --- a/lib/unistring/unistr/u8-to-u16.c +++ /dev/null @@ -1,146 +0,0 @@ -/* Convert UTF-8 string to UTF-16 string. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -#define FUNC u8_to_u16 -#define SRC_UNIT uint8_t -#define DST_UNIT uint16_t - -#include -#include -#include - -DST_UNIT * -FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) -{ - const SRC_UNIT *s_end = s + n; - /* Output string accumulator. */ - DST_UNIT *result; - size_t allocated; - size_t length; - - if (resultbuf != NULL) - { - result = resultbuf; - allocated = *lengthp; - } - else - { - result = NULL; - allocated = 0; - } - length = 0; - /* Invariants: - result is either == resultbuf or == NULL or malloc-allocated. - If length > 0, then result != NULL. */ - - while (s < s_end) - { - ucs4_t uc; - int count; - - /* Fetch a Unicode character from the input string. */ - count = u8_mbtoucr (&uc, s, s_end - s); - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - errno = EILSEQ; - return NULL; - } - s += count; - - /* Store it in the output string. */ - count = u16_uctomb (result + length, uc, allocated - length); - if (count == -1) - { - if (!(result == resultbuf || result == NULL)) - free (result); - errno = EILSEQ; - return NULL; - } - if (count == -2) - { - DST_UNIT *memory; - - allocated = (allocated > 0 ? 2 * allocated : 12); - if (length + 2 > allocated) - allocated = length + 2; - if (result == resultbuf || result == NULL) - memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); - else - memory = - (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); - - if (memory == NULL) - { - if (!(result == resultbuf || result == NULL)) - free (result); - errno = ENOMEM; - return NULL; - } - if (result == resultbuf && length > 0) - memcpy ((char *) memory, (char *) result, - length * sizeof (DST_UNIT)); - result = memory; - count = u16_uctomb (result + length, uc, allocated - length); - if (count < 0) - abort (); - } - length += count; - } - - if (length == 0) - { - if (result == NULL) - { - /* Return a non-NULL value. NULL means error. */ - result = (DST_UNIT *) malloc (1); - if (result == NULL) - { - errno = ENOMEM; - return NULL; - } - } - } - else if (result != resultbuf && length < allocated) - { - /* Shrink the allocated memory if possible. */ - DST_UNIT *memory; - - memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); - if (memory != NULL) - result = memory; - } - - *lengthp = length; - return result; -} diff --git a/lib/unistring/unistr/u8-to-u32.c b/lib/unistring/unistr/u8-to-u32.c deleted file mode 100644 index 7ca226a237..0000000000 --- a/lib/unistring/unistr/u8-to-u32.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Convert UTF-8 string to UTF-32 string. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -#define FUNC u8_to_u32 -#define SRC_UNIT uint8_t -#define DST_UNIT uint32_t - -#include -#include -#include - -DST_UNIT * -FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) -{ - const SRC_UNIT *s_end = s + n; - /* Output string accumulator. */ - DST_UNIT *result; - size_t allocated; - size_t length; - - if (resultbuf != NULL) - { - result = resultbuf; - allocated = *lengthp; - } - else - { - result = NULL; - allocated = 0; - } - length = 0; - /* Invariants: - result is either == resultbuf or == NULL or malloc-allocated. - If length > 0, then result != NULL. */ - - while (s < s_end) - { - ucs4_t uc; - int count; - - /* Fetch a Unicode character from the input string. */ - count = u8_mbtoucr (&uc, s, s_end - s); - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - errno = EILSEQ; - return NULL; - } - s += count; - - /* Store it in the output string. */ - if (length + 1 > allocated) - { - DST_UNIT *memory; - - allocated = (allocated > 0 ? 2 * allocated : 12); - if (length + 1 > allocated) - allocated = length + 1; - if (result == resultbuf || result == NULL) - memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); - else - memory = - (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); - - if (memory == NULL) - { - if (!(result == resultbuf || result == NULL)) - free (result); - errno = ENOMEM; - return NULL; - } - if (result == resultbuf && length > 0) - memcpy ((char *) memory, (char *) result, - length * sizeof (DST_UNIT)); - result = memory; - } - result[length++] = uc; - } - - if (length == 0) - { - if (result == NULL) - { - /* Return a non-NULL value. NULL means error. */ - result = (DST_UNIT *) malloc (1); - if (result == NULL) - { - errno = ENOMEM; - return NULL; - } - } - } - else if (result != resultbuf && length < allocated) - { - /* Shrink the allocated memory if possible. */ - DST_UNIT *memory; - - memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); - if (memory != NULL) - result = memory; - } - - *lengthp = length; - return result; -} diff --git a/lib/unistring/unistr/u8-uctomb-aux.c b/lib/unistring/unistr/u8-uctomb-aux.c deleted file mode 100644 index 94eaf07c7d..0000000000 --- a/lib/unistring/unistr/u8-uctomb-aux.c +++ /dev/null @@ -1,68 +0,0 @@ -/* Conversion UCS-4 to UTF-8. - Copyright (C) 2002, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "unistr.h" - -int -u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n) -{ - int count; - - if (uc < 0x80) - /* The case n >= 1 is already handled by the caller. */ - return -2; - else if (uc < 0x800) - count = 2; - else if (uc < 0x10000) - { - if (uc < 0xd800 || uc >= 0xe000) - count = 3; - else - return -1; - } - else if (uc < 0x110000) - count = 4; - else - return -1; - - if (n < count) - return -2; - - switch (count) /* note: code falls through cases! */ - { - case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000; - /* fallthrough */ - case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800; - /* fallthrough */ - case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0; - /*case 1:*/ s[0] = uc; - } - return count; -} diff --git a/lib/unistring/unistr/u8-uctomb.c b/lib/unistring/unistr/u8-uctomb.c deleted file mode 100644 index 2693dc2942..0000000000 --- a/lib/unistring/unistr/u8-uctomb.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Store a character in UTF-8 string. - Copyright (C) 2002, 2005-2006, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2002. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#include - -#if defined IN_LIBUNISTRING -/* Tell unistr.h to declare u8_uctomb as 'extern', not 'static inline'. */ -# include "unistring-notinline.h" -#endif - -/* Specification. */ -#include "unistr.h" - -#if !HAVE_INLINE - -int -u8_uctomb (uint8_t *s, ucs4_t uc, int n) -{ - if (uc < 0x80) - { - if (n > 0) - { - s[0] = uc; - return 1; - } - /* else return -2, below. */ - } - else - { - int count; - - if (uc < 0x800) - count = 2; - else if (uc < 0x10000) - { - if (uc < 0xd800 || uc >= 0xe000) - count = 3; - else - return -1; - } - else if (uc < 0x110000) - count = 4; - else - return -1; - - if (n >= count) - { - switch (count) /* note: code falls through cases! */ - { - case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000; - case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800; - case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0; - /*case 1:*/ s[0] = uc; - } - return count; - } - } - return -2; -} - -#endif diff --git a/lib/unistring/unitypes.in.h b/lib/unistring/unitypes.in.h deleted file mode 100644 index 7380d5cf1d..0000000000 --- a/lib/unistring/unitypes.in.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Elementary types and macros for the GNU UniString library. - Copyright (C) 2002, 2005-2006, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of either: - - * the GNU Lesser General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - or - - * the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or - (at your option) any later version. - - or both in parallel, as here. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ - -#ifndef _UNITYPES_H -#define _UNITYPES_H - -/* Get uint8_t, uint16_t, uint32_t. */ -#include - -/* Type representing a Unicode character. */ -typedef uint32_t ucs4_t; - -/* Attribute of a function whose result depends only on the arguments - (not pointers!) and which has no side effects. */ -#ifndef _UC_ATTRIBUTE_CONST -# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) -# define _UC_ATTRIBUTE_CONST __attribute__ ((__const__)) -# else -# define _UC_ATTRIBUTE_CONST -# endif -#endif - -/* Attribute of a function whose result depends only on the arguments - (possibly pointers) and global memory, and which has no side effects. */ -#ifndef _UC_ATTRIBUTE_PURE -# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__)) -# else -# define _UC_ATTRIBUTE_PURE -# endif -#endif - -#endif /* _UNITYPES_H */ diff --git a/lib/urls.c b/lib/urls.c index 2861c31d28..7a797ee1f8 100644 --- a/lib/urls.c +++ b/lib/urls.c @@ -14,7 +14,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -23,6 +23,7 @@ #include "str.h" #include "urls.h" #include "system-keys.h" +#include #define MAX_CUSTOM_URLS 8 @@ -46,19 +47,19 @@ unsigned gnutls_url_is_supported(const char *url) unsigned i; for (i=0;i<_gnutls_custom_urls_size;i++) { - if (strncmp(url, _gnutls_custom_urls[i].name, _gnutls_custom_urls[i].name_size) == 0) + if (c_strncasecmp(url, _gnutls_custom_urls[i].name, _gnutls_custom_urls[i].name_size) == 0) return 1; } #ifdef ENABLE_PKCS11 - if (strncmp(url, PKCS11_URL, sizeof(PKCS11_URL)-1) == 0) + if (c_strncasecmp(url, PKCS11_URL, sizeof(PKCS11_URL)-1) == 0) return 1; #endif #ifdef HAVE_TROUSERS - if (strncmp(url, TPMKEY_URL, sizeof(TPMKEY_URL)-1) == 0) + if (c_strncasecmp(url, TPMKEY_URL, sizeof(TPMKEY_URL)-1) == 0) return 1; #endif - if (strncmp(url, SYSTEM_URL, sizeof(SYSTEM_URL)-1) == 0) + if (c_strncasecmp(url, SYSTEM_URL, sizeof(SYSTEM_URL)-1) == 0) return _gnutls_system_url_is_supported(url); return 0; @@ -68,15 +69,15 @@ int _gnutls_url_is_known(const char *url) { unsigned i; - if (strncmp(url, PKCS11_URL, sizeof(PKCS11_URL)-1) == 0) + if (c_strncasecmp(url, PKCS11_URL, sizeof(PKCS11_URL)-1) == 0) return 1; - else if (strncmp(url, TPMKEY_URL, sizeof(TPMKEY_URL)-1) == 0) + else if (c_strncasecmp(url, TPMKEY_URL, sizeof(TPMKEY_URL)-1) == 0) return 1; - else if (strncmp(url, SYSTEM_URL, sizeof(SYSTEM_URL)-1) == 0) + else if (c_strncasecmp(url, SYSTEM_URL, sizeof(SYSTEM_URL)-1) == 0) return 1; else { for (i=0;i<_gnutls_custom_urls_size;i++) { - if (strncmp(url, _gnutls_custom_urls[i].name, _gnutls_custom_urls[i].name_size) == 0) + if (c_strncasecmp(url, _gnutls_custom_urls[i].name, _gnutls_custom_urls[i].name_size) == 0) return 1; } @@ -147,12 +148,12 @@ int _gnutls_get_raw_issuer(const char *url, gnutls_x509_crt_t cert, unsigned i; #ifdef ENABLE_PKCS11 - if (strncmp(url, PKCS11_URL, PKCS11_URL_SIZE) == 0) { - return gnutls_pkcs11_get_raw_issuer(url, cert, issuer, GNUTLS_X509_FMT_DER, 0); + if (c_strncasecmp(url, PKCS11_URL, PKCS11_URL_SIZE) == 0) { + return gnutls_pkcs11_get_raw_issuer(url, cert, issuer, GNUTLS_X509_FMT_DER, flags); } #endif for (i=0;i<_gnutls_custom_urls_size;i++) { - if (strncmp(url, _gnutls_custom_urls[i].name, _gnutls_custom_urls[i].name_size) == 0) { + if (c_strncasecmp(url, _gnutls_custom_urls[i].name, _gnutls_custom_urls[i].name_size) == 0) { if (_gnutls_custom_urls[i].get_issuer) { return _gnutls_custom_urls[i].get_issuer(url, cert, issuer, flags); } diff --git a/lib/urls.h b/lib/urls.h index 79ce75c591..636592c45a 100644 --- a/lib/urls.h +++ b/lib/urls.h @@ -14,10 +14,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_URLS_H +#define GNUTLS_LIB_URLS_H + #define PKCS11_URL "pkcs11:" #define SYSTEM_URL "system:" #define TPMKEY_URL "tpmkey:" @@ -36,3 +39,5 @@ int _gnutls_url_is_known(const char *url); int _gnutls_get_raw_issuer(const char *url, gnutls_x509_crt_t cert, gnutls_datum_t * issuer, unsigned int flags); + +#endif /* GNUTLS_LIB_URLS_H */ diff --git a/lib/vasprintf.h b/lib/vasprintf.h deleted file mode 100644 index 70574806bc..0000000000 --- a/lib/vasprintf.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef VASPRINTF_H -#define VASPRINTF_H -#include - -#ifndef HAVE_VASPRINTF - -int _gnutls_vasprintf(char **strp, const char *fmt, va_list ap); -#define vasprintf _gnutls_vasprintf - -#endif - -#endif diff --git a/lib/verify-tofu.c b/lib/verify-tofu.c index 02b427c508..36328e04af 100644 --- a/lib/verify-tofu.c +++ b/lib/verify-tofu.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -43,8 +43,6 @@ struct gnutls_tdb_int { static int raw_pubkey_to_base64(const gnutls_datum_t * raw, gnutls_datum_t * b64); -static int pgp_crt_to_raw_pubkey(const gnutls_datum_t * cert, - gnutls_datum_t * rpubkey); static int verify_pubkey(const char *file, const char *host, const char *service, const gnutls_datum_t * skey); @@ -79,11 +77,11 @@ struct gnutls_tdb_int default_tdb = { * @cert: The raw (der) data of the certificate * @flags: should be 0. * - * This function will try to verify the provided (raw or DER-encoded) certificate - * using a list of stored public keys. The @service field if non-NULL should - * be a port number. + * This function will try to verify a raw public-key or a public-key provided via + * a raw (DER-encoded) certificate using a list of stored public keys. + * The @service field if non-NULL should be a port number. * - * The @retrieve variable if non-null specifies a custom backend for + * The @db_name variable if non-null specifies a custom backend for * the retrieval of entries. If it is NULL then the * default file backend will be used. In POSIX-like systems the * file backend uses the $HOME/.gnutls/known_hosts file. @@ -95,10 +93,12 @@ struct gnutls_tdb_int default_tdb = { * the given key is found, and 0 if it was found. The storage * function should return 0 on success. * + * As of GnuTLS 3.6.6 this function also verifies raw public keys. + * * Returns: If no associated public key is found * then %GNUTLS_E_NO_CERTIFICATE_FOUND will be returned. If a key * is found but does not match %GNUTLS_E_CERTIFICATE_KEY_MISMATCH - * is returned. On success, %GNUTLS_E_SUCCESS (0) is returned, + * is returned. On success, %GNUTLS_E_SUCCESS (0) is returned, * or a negative error value on other errors. * * Since: 3.0.13 @@ -112,15 +112,11 @@ gnutls_verify_stored_pubkey(const char *db_name, const gnutls_datum_t * cert, unsigned int flags) { - gnutls_datum_t pubkey = { NULL, 0 }; + gnutls_datum_t pubkey = { NULL, 0 }; // Holds the pubkey in subjectPublicKeyInfo format (DER encoded) int ret; char local_file[MAX_FILENAME]; + bool need_free; - if (cert_type != GNUTLS_CRT_X509 - && cert_type != GNUTLS_CRT_OPENPGP) - return - gnutls_assert_val - (GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE); if (db_name == NULL && tdb == NULL) { ret = find_config_file(local_file, sizeof(local_file)); @@ -132,22 +128,38 @@ gnutls_verify_stored_pubkey(const char *db_name, if (tdb == NULL) tdb = &default_tdb; - if (cert_type == GNUTLS_CRT_X509) - ret = x509_raw_crt_to_raw_pubkey(cert, &pubkey); - else - ret = pgp_crt_to_raw_pubkey(cert, &pubkey); - - if (ret < 0) { - gnutls_assert(); - goto cleanup; + /* Import the public key depending on the provided certificate type */ + switch (cert_type) { + case GNUTLS_CRT_X509: + /* Extract the pubkey from the cert. This function does a malloc + * deep down the call chain. We are responsible for freeing. */ + ret = _gnutls_x509_raw_crt_to_raw_pubkey(cert, &pubkey); + + if (ret < 0) { + _gnutls_free_datum(&pubkey); + return gnutls_assert_val(ret); + } + + need_free = true; + break; + case GNUTLS_CRT_RAWPK: + pubkey.data = cert->data; + pubkey.size = cert->size; + need_free = false; + break; + default: + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE); } + // Verify our pubkey against the database ret = tdb->verify(db_name, host, service, &pubkey); if (ret < 0 && ret != GNUTLS_E_CERTIFICATE_KEY_MISMATCH) ret = gnutls_assert_val(GNUTLS_E_NO_CERTIFICATE_FOUND); - cleanup: - gnutls_free(pubkey.data); + if (need_free) { + _gnutls_free_datum(&pubkey); + } + return ret; } @@ -210,7 +222,7 @@ static int parse_commitment_line(char *line, /* hash and hex encode */ ret = - _gnutls_hash_fast((gnutls_digest_algorithm_t)hash_algo->id, + _gnutls_hash_fast((gnutls_digest_algorithm_t)hash_algo->id, skey->data, skey->size, phash); if (ret < 0) return gnutls_assert_val(ret); @@ -308,7 +320,7 @@ static int parse_line(char *line, return 0; } -/* Returns the base64 key if found +/* Returns the base64 key if found */ static int verify_pubkey(const char *file, const char *host, const char *service, @@ -377,80 +389,12 @@ static int raw_pubkey_to_base64(const gnutls_datum_t * raw, if (b64->data == NULL) return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); - base64_encode_raw(b64->data, raw->size, raw->data); + base64_encode_raw((void*)b64->data, raw->size, raw->data); b64->size = size; return 0; } -static int pgp_crt_to_raw_pubkey(const gnutls_datum_t * cert, - gnutls_datum_t * rpubkey) -{ -#ifdef ENABLE_OPENPGP - gnutls_openpgp_crt_t crt = NULL; - gnutls_pubkey_t pubkey = NULL; - size_t size; - int ret; - - ret = gnutls_openpgp_crt_init(&crt); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = gnutls_pubkey_init(&pubkey); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = gnutls_openpgp_crt_import(crt, cert, GNUTLS_OPENPGP_FMT_RAW); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = gnutls_pubkey_import_openpgp(pubkey, crt, 0); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - size = 0; - ret = - gnutls_pubkey_export(pubkey, GNUTLS_X509_FMT_DER, NULL, &size); - if (ret < 0 && ret != GNUTLS_E_SHORT_MEMORY_BUFFER) { - gnutls_assert(); - goto cleanup; - } - - rpubkey->data = gnutls_malloc(size); - if (rpubkey->data == NULL) { - ret = GNUTLS_E_MEMORY_ERROR; - gnutls_assert(); - goto cleanup; - } - - ret = - gnutls_pubkey_export(pubkey, GNUTLS_X509_FMT_DER, - rpubkey->data, &size); - if (ret < 0) { - gnutls_free(rpubkey->data); - gnutls_assert(); - goto cleanup; - } - - rpubkey->size = size; - ret = 0; - - cleanup: - gnutls_openpgp_crt_deinit(crt); - gnutls_pubkey_deinit(pubkey); - - return ret; -#else - return GNUTLS_E_UNIMPLEMENTED_FEATURE; -#endif -} - static int store_pubkey(const char *db_name, const char *host, const char *service, time_t expiration, @@ -535,11 +479,11 @@ int store_commitment(const char *db_name, const char *host, * @expiration: The expiration time (use 0 to disable expiration) * @flags: should be 0. * - * This function will store the provided (raw or DER-encoded) certificate to - * the list of stored public keys. The key will be considered valid until - * the provided expiration time. + * This function will store a raw public-key or a public-key provided via + * a raw (DER-encoded) certificate to the list of stored public keys. The key + * will be considered valid until the provided expiration time. * - * The @store variable if non-null specifies a custom backend for + * The @tdb variable if non-null specifies a custom backend for * the storage of entries. If it is NULL then the * default file backend will be used. * @@ -550,6 +494,8 @@ int store_commitment(const char *db_name, const char *host, * time in seconds since the epoch (0 for no expiration), and a base64 * encoding of the raw (DER) public key information (SPKI) of the peer. * + * As of GnuTLS 3.6.6 this function also accepts raw public keys. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * @@ -564,15 +510,11 @@ gnutls_store_pubkey(const char *db_name, const gnutls_datum_t * cert, time_t expiration, unsigned int flags) { - gnutls_datum_t pubkey = { NULL, 0 }; + gnutls_datum_t pubkey = { NULL, 0 }; // Holds the pubkey in subjectPublicKeyInfo format (DER encoded) int ret; char local_file[MAX_FILENAME]; + bool need_free; - if (cert_type != GNUTLS_CRT_X509 - && cert_type != GNUTLS_CRT_OPENPGP) - return - gnutls_assert_val - (GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE); if (db_name == NULL && tdb == NULL) { ret = @@ -593,25 +535,38 @@ gnutls_store_pubkey(const char *db_name, if (tdb == NULL) tdb = &default_tdb; - if (cert_type == GNUTLS_CRT_X509) - ret = x509_raw_crt_to_raw_pubkey(cert, &pubkey); - else - ret = pgp_crt_to_raw_pubkey(cert, &pubkey); - if (ret < 0) { - gnutls_assert(); - goto cleanup; + /* Import the public key depending on the provided certificate type */ + switch (cert_type) { + case GNUTLS_CRT_X509: + /* Extract the pubkey from the cert. This function does a malloc + * deep down the call chain. We are responsible for freeing. */ + ret = _gnutls_x509_raw_crt_to_raw_pubkey(cert, &pubkey); + + if (ret < 0) { + _gnutls_free_datum(&pubkey); + return gnutls_assert_val(ret); + } + + need_free = true; + break; + case GNUTLS_CRT_RAWPK: + pubkey.data = cert->data; + pubkey.size = cert->size; + need_free = false; + break; + default: + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE); } _gnutls_debug_log("Configuration file: %s\n", db_name); tdb->store(db_name, host, service, expiration, &pubkey); - ret = 0; - - cleanup: - gnutls_free(pubkey.data); + if (need_free) { + _gnutls_free_datum(&pubkey); + } - return ret; + return GNUTLS_E_SUCCESS; } /** @@ -625,11 +580,11 @@ gnutls_store_pubkey(const char *db_name, * @expiration: The expiration time (use 0 to disable expiration) * @flags: should be 0 or %GNUTLS_SCOMMIT_FLAG_ALLOW_BROKEN. * - * This function will store the provided hash commitment to + * This function will store the provided hash commitment to * the list of stored public keys. The key with the given * hash will be considered valid until the provided expiration time. * - * The @store variable if non-null specifies a custom backend for + * The @tdb variable if non-null specifies a custom backend for * the storage of entries. If it is NULL then the * default file backend will be used. * @@ -683,12 +638,10 @@ gnutls_store_commitment(const char *db_name, _gnutls_debug_log("Configuration file: %s\n", db_name); - tdb->cstore(db_name, host, service, expiration, + tdb->cstore(db_name, host, service, expiration, (gnutls_digest_algorithm_t)me->id, hash); - ret = 0; - - return ret; + return 0; } #define CONFIG_FILE "known_hosts" diff --git a/lib/vko.c b/lib/vko.c new file mode 100644 index 0000000000..f8aa80dfc7 --- /dev/null +++ b/lib/vko.c @@ -0,0 +1,301 @@ +/* + * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2016 Dmitry Eremin-Solenikov + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* + * This is split from main TLS key exchange, because it might be useful in + * future for S/MIME support. For the definition of the algorithm see RFC 4357, + * section 5.2. + */ +#include "gnutls_int.h" +#include "vko.h" +#include "pk.h" +#include "common.h" + +static int +_gnutls_gost_vko_key(gnutls_pk_params_st *pub, + gnutls_pk_params_st *priv, + gnutls_datum_t *ukm, + gnutls_digest_algorithm_t digalg, + gnutls_datum_t *kek) +{ + gnutls_datum_t tmp_vko_key; + int ret; + + ret = _gnutls_pk_derive_nonce(pub->algo, &tmp_vko_key, + priv, pub, ukm); + if (ret < 0) + return gnutls_assert_val(ret); + + kek->size = gnutls_hash_get_len(digalg); + kek->data = gnutls_malloc(kek->size); + if (kek->data == NULL) { + gnutls_assert(); + ret = GNUTLS_E_MEMORY_ERROR; + goto cleanup; + } + + ret = gnutls_hash_fast(digalg, tmp_vko_key.data, tmp_vko_key.size, kek->data); + if (ret < 0) { + gnutls_assert(); + _gnutls_free_datum(kek); + goto cleanup; + } + + ret = 0; + +cleanup: + _gnutls_free_temp_key_datum(&tmp_vko_key); + + return ret; +} + +static const gnutls_datum_t zero_data = { NULL, 0 }; + +int +_gnutls_gost_keytrans_encrypt(gnutls_pk_params_st *pub, + gnutls_pk_params_st *priv, + gnutls_datum_t *cek, + gnutls_datum_t *ukm, + gnutls_datum_t *out) +{ + int ret; + gnutls_datum_t kek; + gnutls_datum_t enc, imit; + gnutls_digest_algorithm_t digalg; + ASN1_TYPE kx; + + if (pub->algo == GNUTLS_PK_GOST_01) + digalg = GNUTLS_DIG_GOSTR_94; + else + digalg = GNUTLS_DIG_STREEBOG_256; + + ret = _gnutls_gost_vko_key(pub, priv, ukm, digalg, &kek); + if (ret < 0) { + gnutls_assert(); + + return ret; + } + + ret = _gnutls_gost_key_wrap(pub->gost_params, &kek, ukm, cek, + &enc, &imit); + _gnutls_free_key_datum(&kek); + if (ret < 0) { + gnutls_assert(); + + return ret; + } + + ret = asn1_create_element(_gnutls_get_gnutls_asn(), + "GNUTLS.GostR3410-KeyTransport", + &kx); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + _gnutls_free_datum(&enc); + _gnutls_free_datum(&imit); + + return ret; + } + + ret = _gnutls_x509_write_value(kx, "transportParameters.ukm", ukm); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_x509_encode_and_copy_PKI_params(kx, + "transportParameters.ephemeralPublicKey", + priv); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if ((ret = asn1_write_value(kx, "transportParameters.encryptionParamSet", + gnutls_gost_paramset_get_oid(pub->gost_params), + 1)) != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } + + ret = _gnutls_x509_write_value(kx, "sessionEncryptedKey.encryptedKey", &enc); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_x509_write_value(kx, "sessionEncryptedKey.maskKey", &zero_data); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + ret = _gnutls_x509_write_value(kx, "sessionEncryptedKey.macKey", &imit); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_x509_der_encode(kx, "", out, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = 0; + +cleanup: + asn1_delete_structure(&kx); + _gnutls_free_datum(&enc); + _gnutls_free_datum(&imit); + + return ret; +} + +int +_gnutls_gost_keytrans_decrypt(gnutls_pk_params_st *priv, + gnutls_datum_t *cek, + gnutls_datum_t *ukm, + gnutls_datum_t *out) +{ + int ret; + ASN1_TYPE kx; + gnutls_pk_params_st pub; + gnutls_datum_t kek; + gnutls_datum_t ukm2, enc, imit; + char oid[MAX_OID_SIZE]; + int oid_size; + gnutls_digest_algorithm_t digalg; + + if ((ret = asn1_create_element(_gnutls_get_gnutls_asn(), + "GNUTLS.GostR3410-KeyTransport", + &kx)) != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + + return ret; + } + + ret = _asn1_strict_der_decode(&kx, cek->data, cek->size, NULL); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + asn1_delete_structure(&kx); + + return ret; + } + + ret = _gnutls_get_asn_mpis(kx, + "transportParameters.ephemeralPublicKey", + &pub); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (pub.algo != priv->algo || + pub.gost_params != priv->gost_params || + pub.curve != priv->curve) { + gnutls_assert(); + ret = GNUTLS_E_ILLEGAL_PARAMETER; + goto cleanup; + } + + oid_size = sizeof(oid); + ret = asn1_read_value(kx, "transportParameters.encryptionParamSet", oid, &oid_size); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } + + if (gnutls_oid_to_gost_paramset(oid) != priv->gost_params) { + gnutls_assert(); + ret = GNUTLS_E_ASN1_DER_ERROR; + goto cleanup; + } + + ret = _gnutls_x509_read_value(kx, "transportParameters.ukm", &ukm2); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + /* Kind of strange design. For TLS UKM is calculated as a hash of + * client and server random. At the same time UKM is transmitted as a + * part of KeyTransport structure. At this point we have to compare + * them to check that they are equal. This does not result in an oracle + * of any kind as all values are transmitted in cleartext. Returning + * that this point won't give any information to the attacker. + */ + if (ukm2.size != ukm->size || memcmp(ukm2.data, ukm->data, ukm->size) != 0) { + gnutls_assert(); + _gnutls_free_datum(&ukm2); + ret = GNUTLS_E_DECRYPTION_FAILED; + goto cleanup; + } + _gnutls_free_datum(&ukm2); + + ret = _gnutls_x509_read_value(kx, "sessionEncryptedKey.encryptedKey", + &enc); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_x509_read_value(kx, "sessionEncryptedKey.macKey", + &imit); + if (ret < 0) { + gnutls_assert(); + _gnutls_free_datum(&enc); + goto cleanup; + } + + if (pub.algo == GNUTLS_PK_GOST_01) + digalg = GNUTLS_DIG_GOSTR_94; + else + digalg = GNUTLS_DIG_STREEBOG_256; + + ret = _gnutls_gost_vko_key(&pub, priv, ukm, digalg, &kek); + if (ret < 0) { + gnutls_assert(); + goto cleanup2; + } + + ret = _gnutls_gost_key_unwrap(pub.gost_params, &kek, ukm, + &enc, &imit, out); + _gnutls_free_key_datum(&kek); + + if (ret < 0) { + gnutls_assert(); + goto cleanup2; + } + + ret = 0; + +cleanup2: + _gnutls_free_datum(&imit); + _gnutls_free_datum(&enc); +cleanup: + gnutls_pk_params_release(&pub); + asn1_delete_structure(&kx); + + return ret; +} diff --git a/lib/vko.h b/lib/vko.h new file mode 100644 index 0000000000..d4ff3891d9 --- /dev/null +++ b/lib/vko.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2016 Dmitry Eremin-Solenikov + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_VKO_H +#define GNUTLS_LIB_VKO_H + +int +_gnutls_gost_keytrans_encrypt(gnutls_pk_params_st *pub, + gnutls_pk_params_st *priv, + gnutls_datum_t *cek, + gnutls_datum_t *ukm, + gnutls_datum_t *out); + +int +_gnutls_gost_keytrans_decrypt(gnutls_pk_params_st *priv, + gnutls_datum_t *cek, + gnutls_datum_t *ukm, + gnutls_datum_t *out); + +#endif /* GNUTLS_LIB_VKO_H */ diff --git a/lib/x509.c b/lib/x509.c deleted file mode 100644 index af231441bf..0000000000 --- a/lib/x509.c +++ /dev/null @@ -1,2144 +0,0 @@ -/* - * Copyright (C) 2002-2016 Free Software Foundation, Inc. - * Copyright (C) 2016 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * The GnuTLS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see - * - */ - -#include "gnutls_int.h" -#include "auth.h" -#include "errors.h" -#include "extensions.h" -#include -#include "dh.h" -#include "num.h" -#include "datum.h" -#include -#include -#include -#include -#include -#include -#include -#include "str.h" -#include -#include -#include -#include -#include "x509/common.h" -#include "x509/x509_int.h" -#include -#include -#include "read-file.h" -#include "system-keys.h" -#include "urls.h" -#ifdef _WIN32 -#include -#endif - -/* - * some x509 certificate parsing functions. - */ - -#define CRED_RET_SUCCESS(cred) \ - if (cred->flags & GNUTLS_CERTIFICATE_API_V2) { \ - return cred->ncerts-1; \ - } else { \ - return 0; \ - } - -/* fifteen days */ -#define MAX_OCSP_VALIDITY_SECS (15*60*60*24) -#ifdef ENABLE_OCSP -/* If the certificate is revoked status will be GNUTLS_CERT_REVOKED. - * - * Returns: - * Zero on success, a negative error code otherwise. - */ -static int -check_ocsp_response(gnutls_session_t session, gnutls_x509_crt_t cert, - gnutls_x509_trust_list_t tl, - unsigned verify_flags, - gnutls_x509_crt_t *cand_issuers, unsigned cand_issuers_size, - gnutls_datum_t * data, unsigned int *ostatus) -{ - gnutls_ocsp_resp_t resp; - int ret; - unsigned int status, cert_status; - time_t rtime, vtime, ntime, now; - int check_failed = 0; - - now = gnutls_time(0); - - ret = gnutls_ocsp_resp_init(&resp); - if (ret < 0) - return gnutls_assert_val(ret); - - ret = gnutls_ocsp_resp_import(resp, data); - if (ret < 0) { - _gnutls_audit_log(session, - "There was an error parsing the OCSP response: %s.\n", - gnutls_strerror(ret)); - ret = gnutls_assert_val(0); - check_failed = 1; - *ostatus |= GNUTLS_CERT_INVALID_OCSP_STATUS; - goto cleanup; - } - - ret = gnutls_ocsp_resp_check_crt(resp, 0, cert); - if (ret < 0) { - ret = gnutls_assert_val(0); - _gnutls_audit_log(session, - "Got OCSP response with an unrelated certificate.\n"); - check_failed = 1; - *ostatus |= GNUTLS_CERT_INVALID_OCSP_STATUS; - goto cleanup; - } - - /* Attempt to verify against our trusted list */ - ret = gnutls_ocsp_resp_verify(resp, tl, &status, verify_flags); - if ((ret < 0 || status != 0) && cand_issuers_size > 0) { - /* Attempt to verify against the certificate list provided by the server */ - - ret = gnutls_ocsp_resp_verify_direct(resp, cand_issuers[0], &status, verify_flags); - /* if verification fails attempt to find whether any of the other - * bundled CAs is an issuer of the OCSP response */ - if ((ret < 0 || status != 0) && cand_issuers_size > 1) { - int ret2; - unsigned status2, i; - - for (i=1;i= 0 && status2 == 0) { - status = status2; - ret = ret2; - break; - } - } - } - } - - if (ret < 0) { - ret = gnutls_assert_val(0); - gnutls_assert(); - check_failed = 1; - *ostatus |= GNUTLS_CERT_INVALID_OCSP_STATUS; - goto cleanup; - } - - /* do not consider revocation data if response was not verified */ - if (status != 0) { - ret = gnutls_assert_val(0); - check_failed = 1; - *ostatus |= GNUTLS_CERT_INVALID_OCSP_STATUS; - goto cleanup; - } - - ret = gnutls_ocsp_resp_get_single(resp, 0, NULL, NULL, NULL, NULL, - &cert_status, &vtime, &ntime, - &rtime, NULL); - if (ret < 0) { - _gnutls_audit_log(session, - "There was an error parsing the OCSP response: %s.\n", - gnutls_strerror(ret)); - ret = gnutls_assert_val(0); - check_failed = 1; - *ostatus |= GNUTLS_CERT_INVALID_OCSP_STATUS; - goto cleanup; - } - - if (cert_status == GNUTLS_OCSP_CERT_REVOKED) { - _gnutls_audit_log(session, - "The certificate was revoked via OCSP\n"); - check_failed = 1; - *ostatus |= GNUTLS_CERT_REVOKED; - ret = gnutls_assert_val(0); - goto cleanup; - } - - /* Report but do not fail on the following errors. That is - * because including the OCSP response in the handshake shouldn't - * cause more problems that not including it. - */ - if (ntime == -1) { - if (now - vtime > MAX_OCSP_VALIDITY_SECS) { - _gnutls_audit_log(session, - "The OCSP response is old\n"); - check_failed = 1; - *ostatus |= GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED; - goto cleanup; - } - } else { - /* there is a newer OCSP answer, don't trust this one */ - if (ntime < now) { - _gnutls_audit_log(session, - "There is a newer OCSP response but was not provided by the server\n"); - check_failed = 1; - *ostatus |= GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED; - goto cleanup; - } - } - - ret = 0; - cleanup: - if (check_failed == 0) - session->internals.ocsp_check_ok = 1; - - gnutls_ocsp_resp_deinit(resp); - - return ret; -} - -#endif - -#define CLEAR_CERTS for(x=0;xinternals.ocsp_check_ok = 0; - - CHECK_AUTH(GNUTLS_CRD_CERTIFICATE, GNUTLS_E_INVALID_REQUEST); - - info = _gnutls_get_auth_info(session, GNUTLS_CRD_CERTIFICATE); - if (info == NULL) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - cred = (gnutls_certificate_credentials_t) - _gnutls_get_cred(session, GNUTLS_CRD_CERTIFICATE); - if (cred == NULL) { - gnutls_assert(); - return GNUTLS_E_INSUFFICIENT_CREDENTIALS; - } - - if (info->raw_certificate_list == NULL || info->ncerts == 0) - return GNUTLS_E_NO_CERTIFICATE_FOUND; - - if (info->ncerts > cred->verify_depth && cred->verify_depth > 0) { - gnutls_assert(); - return GNUTLS_E_CONSTRAINT_ERROR; - } - - verify_flags = - cred->verify_flags | session->internals.additional_verify_flags; - /* generate a list of gnutls_certs based on the auth info - * raw certs. - */ - peer_certificate_list_size = info->ncerts; - peer_certificate_list = - gnutls_calloc(peer_certificate_list_size, - sizeof(gnutls_x509_crt_t)); - if (peer_certificate_list == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - for (i = 0; i < peer_certificate_list_size; i++) { - ret = gnutls_x509_crt_init(&peer_certificate_list[i]); - if (ret < 0) { - gnutls_assert(); - CLEAR_CERTS; - return ret; - } - - ret = - gnutls_x509_crt_import(peer_certificate_list[i], - &info->raw_certificate_list[i], - GNUTLS_X509_FMT_DER); - if (ret < 0) { - gnutls_assert(); - CLEAR_CERTS; - return ret; - } - } - - /* Use the OCSP extension if any */ -#ifdef ENABLE_OCSP - if (verify_flags & GNUTLS_VERIFY_DISABLE_CRL_CHECKS) - goto skip_ocsp; - - ret = gnutls_ocsp_status_request_get(session, &resp); - if (ret < 0) { - ret = _gnutls_ocsp_verify_mandatory_stapling(session, peer_certificate_list[0], &ocsp_status); - if (ret < 0) { - gnutls_assert(); - CLEAR_CERTS; - return ret; - } - - goto skip_ocsp; - } - - if (peer_certificate_list_size > 1) { - cand_issuers = &peer_certificate_list[1]; - cand_issuers_size = peer_certificate_list_size-1; - } - - ret = - check_ocsp_response(session, peer_certificate_list[0], cred->tlist, - verify_flags, cand_issuers, - cand_issuers_size, &resp, &ocsp_status); - - if (ret < 0) { - CLEAR_CERTS; - return gnutls_assert_val(ret); - } -#endif - - skip_ocsp: - /* Verify certificate - */ - ret = - gnutls_x509_trust_list_verify_crt2(cred->tlist, - peer_certificate_list, - peer_certificate_list_size, - data, elements, - verify_flags, status, NULL); - - if (ret < 0) { - gnutls_assert(); - CLEAR_CERTS; - return ret; - } - - CLEAR_CERTS; - - *status |= ocsp_status; - - return 0; -} - -static int str_array_append_idna(gnutls_str_array_t * head, const char *name, size_t size) -{ - int ret; - gnutls_datum_t ahost; - - /* convert the provided hostname to ACE-Labels domain. */ - ret = gnutls_idna_map(name, size, &ahost, 0); - if (ret < 0) { - _gnutls_debug_log("unable to convert hostname %s to IDNA format\n", name); - /* insert the raw name */ - return _gnutls_str_array_append(head, name, size); - } - - ret = _gnutls_str_array_append(head, (char*)ahost.data, ahost.size); - gnutls_free(ahost.data); - - return ret; -} - -/* Returns the name of the certificate of a null name - */ -static int get_x509_name(gnutls_x509_crt_t crt, gnutls_str_array_t * names) -{ - size_t max_size; - int i, ret = 0, ret2; - char name[MAX_CN]; - unsigned have_dns_name = 0; - - for (i = 0; !(ret < 0); i++) { - max_size = sizeof(name); - - ret = - gnutls_x509_crt_get_subject_alt_name(crt, i, name, - &max_size, NULL); - if (ret == GNUTLS_SAN_DNSNAME) { - have_dns_name = 1; - - ret2 = - str_array_append_idna(names, name, - max_size); - if (ret2 < 0) { - _gnutls_str_array_clear(names); - return gnutls_assert_val(ret2); - } - } - } - - if (have_dns_name == 0) { - max_size = sizeof(name); - ret = - gnutls_x509_crt_get_dn_by_oid(crt, OID_X520_COMMON_NAME, 0, 0, - name, &max_size); - if (ret >= 0) { - ret = str_array_append_idna(names, name, max_size); - if (ret < 0) { - _gnutls_str_array_clear(names); - return gnutls_assert_val(ret); - } - } - } - - return 0; -} - -/* Reads a DER encoded certificate list from memory and stores it to a - * gnutls_cert structure. Returns the number of certificates parsed. - */ -static int -parse_der_cert_mem(gnutls_certificate_credentials_t res, - const void *input_cert, int input_cert_size) -{ - gnutls_datum_t tmp; - gnutls_x509_crt_t crt; - gnutls_pcert_st *ccert; - int ret; - gnutls_str_array_t names; - - _gnutls_str_array_init(&names); - - ccert = gnutls_malloc(sizeof(*ccert)); - if (ccert == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - ret = gnutls_x509_crt_init(&crt); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - tmp.data = (uint8_t *) input_cert; - tmp.size = input_cert_size; - - ret = gnutls_x509_crt_import(crt, &tmp, GNUTLS_X509_FMT_DER); - if (ret < 0) { - gnutls_assert(); - gnutls_x509_crt_deinit(crt); - goto cleanup; - } - - ret = get_x509_name(crt, &names); - if (ret < 0) { - gnutls_assert(); - gnutls_x509_crt_deinit(crt); - goto cleanup; - } - - ret = gnutls_pcert_import_x509(ccert, crt, 0); - gnutls_x509_crt_deinit(crt); - - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = certificate_credential_append_crt_list(res, names, ccert, 1); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - return ret; - - cleanup: - _gnutls_str_array_clear(&names); - gnutls_free(ccert); - return ret; -} - -/* Reads a base64 encoded certificate list from memory and stores it to - * a gnutls_cert structure. Returns the number of certificate parsed. - */ -static int -parse_pem_cert_mem(gnutls_certificate_credentials_t res, - const char *input_cert, int input_cert_size) -{ - int size; - const char *ptr; - gnutls_datum_t tmp; - int ret, count, i; - unsigned ncerts = 0; - gnutls_pcert_st *pcerts = NULL; - gnutls_str_array_t names; - gnutls_x509_crt_t unsorted[DEFAULT_MAX_VERIFY_DEPTH]; - - _gnutls_str_array_init(&names); - - /* move to the certificate - */ - ptr = memmem(input_cert, input_cert_size, - PEM_CERT_SEP, sizeof(PEM_CERT_SEP) - 1); - if (ptr == NULL) - ptr = memmem(input_cert, input_cert_size, - PEM_CERT_SEP2, sizeof(PEM_CERT_SEP2) - 1); - - if (ptr == NULL) { - gnutls_assert(); - return GNUTLS_E_BASE64_DECODING_ERROR; - } - size = input_cert_size - (ptr - input_cert); - - count = 0; - - do { - tmp.data = (void *) ptr; - tmp.size = size; - - ret = gnutls_x509_crt_init(&unsorted[count]); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = gnutls_x509_crt_import(unsorted[count], &tmp, GNUTLS_X509_FMT_PEM); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - count++; - - /* now we move ptr after the pem header - */ - ptr++; - /* find the next certificate (if any) - */ - size = input_cert_size - (ptr - input_cert); - - if (size > 0) { - char *ptr3; - - ptr3 = - memmem(ptr, size, PEM_CERT_SEP, - sizeof(PEM_CERT_SEP) - 1); - if (ptr3 == NULL) - ptr3 = memmem(ptr, size, PEM_CERT_SEP2, - sizeof(PEM_CERT_SEP2) - 1); - - ptr = ptr3; - } else - ptr = NULL; - - } - while (ptr != NULL && count < DEFAULT_MAX_VERIFY_DEPTH); - - ret = - get_x509_name(unsorted[0], &names); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - pcerts = gnutls_malloc(sizeof(gnutls_pcert_st) * count); - if (pcerts == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - ncerts = count; - ret = - gnutls_pcert_import_x509_list(pcerts, unsorted, &ncerts, GNUTLS_X509_CRT_LIST_SORT); - if (ret < 0) { - gnutls_free(pcerts); - pcerts = NULL; - gnutls_assert(); - goto cleanup; - } - - ret = - certificate_credential_append_crt_list(res, names, pcerts, - ncerts); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - for (i = 0; i < count; i++) - gnutls_x509_crt_deinit(unsorted[i]); - - return ncerts; - - cleanup: - _gnutls_str_array_clear(&names); - for (i = 0; i < count; i++) - gnutls_x509_crt_deinit(unsorted[i]); - if (pcerts) { - for (i = 0; i < count; i++) - gnutls_pcert_deinit(&pcerts[i]); - gnutls_free(pcerts); - } - return ret; -} - - - -/* Reads a DER or PEM certificate from memory - */ -static int -read_cert_mem(gnutls_certificate_credentials_t res, const void *cert, - int cert_size, gnutls_x509_crt_fmt_t type) -{ - int ret; - - if (type == GNUTLS_X509_FMT_DER) - ret = parse_der_cert_mem(res, cert, cert_size); - else - ret = parse_pem_cert_mem(res, cert, cert_size); - - if (ret < 0) { - gnutls_assert(); - return ret; - } - - return ret; -} - -static int tmp_pin_cb(void *userdata, int attempt, const char *token_url, - const char *token_label, unsigned int flags, - char *pin, size_t pin_max) -{ - const char *tmp_pin = userdata; - - if (attempt == 0) { - snprintf(pin, pin_max, "%s", tmp_pin); - return 0; - } - - return -1; -} - -/* Reads a PEM encoded PKCS-1 RSA/DSA private key from memory. Type - * indicates the certificate format. KEY can be NULL, to indicate - * that GnuTLS doesn't know the private key. - */ -static int -read_key_mem(gnutls_certificate_credentials_t res, - const void *key, int key_size, gnutls_x509_crt_fmt_t type, - const char *pass, unsigned int flags) -{ - int ret; - gnutls_datum_t tmp; - gnutls_privkey_t privkey; - - if (key) { - tmp.data = (uint8_t *) key; - tmp.size = key_size; - - ret = gnutls_privkey_init(&privkey); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - if (res->pin.cb) { - gnutls_privkey_set_pin_function(privkey, - res->pin.cb, - res->pin.data); - } else if (pass != NULL) { - snprintf(res->pin_tmp, sizeof(res->pin_tmp), "%s", - pass); - gnutls_privkey_set_pin_function(privkey, - tmp_pin_cb, - res->pin_tmp); - } - - ret = - gnutls_privkey_import_x509_raw(privkey, &tmp, type, - pass, flags); - if (ret < 0) { - gnutls_assert(); - gnutls_privkey_deinit(privkey); - return ret; - } - - ret = certificate_credentials_append_pkey(res, privkey); - if (ret < 0) { - gnutls_assert(); - gnutls_privkey_deinit(privkey); - return ret; - } - - } else { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - - return 0; -} - - -/* Reads a private key from a token. - */ -static int -read_key_url(gnutls_certificate_credentials_t res, const char *url) -{ - int ret; - gnutls_privkey_t pkey = NULL; - - /* allocate space for the pkey list - */ - ret = gnutls_privkey_init(&pkey); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - if (res->pin.cb) - gnutls_privkey_set_pin_function(pkey, res->pin.cb, - res->pin.data); - - ret = gnutls_privkey_import_url(pkey, url, 0); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = certificate_credentials_append_pkey(res, pkey); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - return 0; - - cleanup: - if (pkey) - gnutls_privkey_deinit(pkey); - - return ret; -} - - -#define MAX_PKCS11_CERT_CHAIN 8 -/* Reads a certificate key from a token. - */ -static int -read_cert_url(gnutls_certificate_credentials_t res, const char *url) -{ - int ret; - gnutls_x509_crt_t crt = NULL; - gnutls_pcert_st *ccert = NULL; - gnutls_str_array_t names; - gnutls_datum_t t = {NULL, 0}; - unsigned i, count = 0; - - _gnutls_str_array_init(&names); - - ccert = gnutls_malloc(sizeof(*ccert)*MAX_PKCS11_CERT_CHAIN); - if (ccert == NULL) { - gnutls_assert(); - ret = GNUTLS_E_MEMORY_ERROR; - goto cleanup; - } - - ret = gnutls_x509_crt_init(&crt); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - if (res->pin.cb) - gnutls_x509_crt_set_pin_function(crt, res->pin.cb, - res->pin.data); - - ret = gnutls_x509_crt_import_url(crt, url, 0); - if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) - ret = - gnutls_x509_crt_import_url(crt, url, - GNUTLS_PKCS11_OBJ_FLAG_LOGIN); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = get_x509_name(crt, &names); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - /* Try to load the whole certificate chain from the PKCS #11 token */ - for (i=0;i 0 && ret != 0) { - /* self signed */ - break; - } - - ret = gnutls_pcert_import_x509(&ccert[i], crt, 0); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - count++; - - ret = _gnutls_get_raw_issuer(url, crt, &t, 0); - if (ret < 0) - break; - - gnutls_x509_crt_deinit(crt); - crt = NULL; - ret = gnutls_x509_crt_init(&crt); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = gnutls_x509_crt_import(crt, &t, GNUTLS_X509_FMT_DER); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - gnutls_free(t.data); - t.data = NULL; - } - - ret = certificate_credential_append_crt_list(res, names, ccert, count); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - if (crt != NULL) - gnutls_x509_crt_deinit(crt); - - return 0; -cleanup: - if (crt != NULL) - gnutls_x509_crt_deinit(crt); - gnutls_free(t.data); - _gnutls_str_array_clear(&names); - gnutls_free(ccert); - return ret; -} - -/* Reads a certificate file - */ -static int -read_cert_file(gnutls_certificate_credentials_t res, - const char *certfile, gnutls_x509_crt_fmt_t type) -{ - int ret; - size_t size; - char *data; - - if (gnutls_url_is_supported(certfile)) { - return read_cert_url(res, certfile); - } - - data = read_binary_file(certfile, &size); - - if (data == NULL) { - gnutls_assert(); - return GNUTLS_E_FILE_ERROR; - } - - ret = read_cert_mem(res, data, size, type); - free(data); - - return ret; - -} - - - -/* Reads PKCS-1 RSA private key file or a DSA file (in the format openssl - * stores it). - */ -static int -read_key_file(gnutls_certificate_credentials_t res, - const char *keyfile, gnutls_x509_crt_fmt_t type, - const char *pass, unsigned int flags) -{ - int ret; - size_t size; - char *data; - - if (_gnutls_url_is_known(keyfile)) { - if (gnutls_url_is_supported(keyfile)) { - /* if no PIN function is specified, and we have a PIN, - * specify one */ - if (pass != NULL && res->pin.cb == NULL) { - snprintf(res->pin_tmp, sizeof(res->pin_tmp), "%s", pass); - gnutls_certificate_set_pin_function(res, tmp_pin_cb, res->pin_tmp); - } - - return read_key_url(res, keyfile); - } else - return - gnutls_assert_val - (GNUTLS_E_UNIMPLEMENTED_FEATURE); - } - - data = read_binary_file(keyfile, &size); - - if (data == NULL) { - gnutls_assert(); - return GNUTLS_E_FILE_ERROR; - } - - ret = read_key_mem(res, data, size, type, pass, flags); - free(data); - - return ret; -} - -/** - * gnutls_certificate_set_x509_key_mem: - * @res: is a #gnutls_certificate_credentials_t type. - * @cert: contains a certificate list (path) for the specified private key - * @key: is the private key, or %NULL - * @type: is PEM or DER - * - * This function sets a certificate/private key pair in the - * gnutls_certificate_credentials_t type. This function may be called - * more than once, in case multiple keys/certificates exist for the - * server. - * - * Note that the keyUsage (2.5.29.15) PKIX extension in X.509 certificates - * is supported. This means that certificates intended for signing cannot - * be used for ciphersuites that require encryption. - * - * If the certificate and the private key are given in PEM encoding - * then the strings that hold their values must be null terminated. - * - * The @key may be %NULL if you are using a sign callback, see - * gnutls_sign_callback_set(). - * - * Note that, this function by default returns zero on success and a negative value on error. - * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() - * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. - * - * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). - * - **/ -int -gnutls_certificate_set_x509_key_mem(gnutls_certificate_credentials_t res, - const gnutls_datum_t * cert, - const gnutls_datum_t * key, - gnutls_x509_crt_fmt_t type) -{ - return gnutls_certificate_set_x509_key_mem2(res, cert, key, type, - NULL, 0); -} - -/** - * gnutls_certificate_set_x509_key_mem2: - * @res: is a #gnutls_certificate_credentials_t type. - * @cert: contains a certificate list (path) for the specified private key - * @key: is the private key, or %NULL - * @type: is PEM or DER - * @pass: is the key's password - * @flags: an ORed sequence of gnutls_pkcs_encrypt_flags_t - * - * This function sets a certificate/private key pair in the - * gnutls_certificate_credentials_t type. This function may be called - * more than once, in case multiple keys/certificates exist for the - * server. - * - * Note that the keyUsage (2.5.29.15) PKIX extension in X.509 certificates - * is supported. This means that certificates intended for signing cannot - * be used for ciphersuites that require encryption. - * - * If the certificate and the private key are given in PEM encoding - * then the strings that hold their values must be null terminated. - * - * The @key may be %NULL if you are using a sign callback, see - * gnutls_sign_callback_set(). - * - * Note that, this function by default returns zero on success and a negative value on error. - * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() - * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. - * - * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). - **/ -int -gnutls_certificate_set_x509_key_mem2(gnutls_certificate_credentials_t res, - const gnutls_datum_t * cert, - const gnutls_datum_t * key, - gnutls_x509_crt_fmt_t type, - const char *pass, unsigned int flags) -{ - int ret; - - /* this should be first - */ - if ((ret = read_key_mem(res, key ? key->data : NULL, - key ? key->size : 0, type, pass, - flags)) < 0) - return ret; - - if ((ret = read_cert_mem(res, cert->data, cert->size, type)) < 0) { - gnutls_privkey_deinit(res->pkey[res->ncerts]); - return ret; - } - - res->ncerts++; - - if (key && (ret = _gnutls_check_key_cert_match(res)) < 0) { - gnutls_assert(); - return ret; - } - - CRED_RET_SUCCESS(res); -} - -int -certificate_credential_append_crt_list(gnutls_certificate_credentials_t - res, gnutls_str_array_t names, - gnutls_pcert_st * crt, int nr) -{ - res->certs = gnutls_realloc_fast(res->certs, - (1 + res->ncerts) * - sizeof(certs_st)); - if (res->certs == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - memset(&res->certs[res->ncerts], 0, sizeof(res->certs[0])); - - res->certs[res->ncerts].cert_list = crt; - res->certs[res->ncerts].cert_list_length = nr; - res->certs[res->ncerts].names = names; - - return 0; - -} - -int -certificate_credentials_append_pkey(gnutls_certificate_credentials_t res, - gnutls_privkey_t pkey) -{ - res->pkey = gnutls_realloc_fast(res->pkey, - (1 + res->ncerts) * - sizeof(gnutls_privkey_t)); - if (res->pkey == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - res->pkey[res->ncerts] = pkey; - return 0; - -} - -/** - * gnutls_certificate_set_x509_key: - * @res: is a #gnutls_certificate_credentials_t type. - * @cert_list: contains a certificate list (path) for the specified private key - * @cert_list_size: holds the size of the certificate list - * @key: is a #gnutls_x509_privkey_t key - * - * This function sets a certificate/private key pair in the - * gnutls_certificate_credentials_t type. This function may be - * called more than once, in case multiple keys/certificates exist for - * the server. For clients that wants to send more than their own end - * entity certificate (e.g., also an intermediate CA cert) then put - * the certificate chain in @cert_list. - * - * Note that the certificates and keys provided, can be safely deinitialized - * after this function is called. - * - * If that function fails to load the @res type is at an undefined state, it must - * not be reused to load other keys or certificates. - * - * Note that, this function by default returns zero on success and a negative value on error. - * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() - * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. - * - * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). - * - * Since: 2.4.0 - **/ -int -gnutls_certificate_set_x509_key(gnutls_certificate_credentials_t res, - gnutls_x509_crt_t * cert_list, - int cert_list_size, - gnutls_x509_privkey_t key) -{ - int ret; - gnutls_privkey_t pkey; - gnutls_pcert_st *pcerts = NULL; - gnutls_str_array_t names; - - _gnutls_str_array_init(&names); - - /* this should be first - */ - ret = gnutls_privkey_init(&pkey); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - if (res->pin.cb) - gnutls_privkey_set_pin_function(pkey, res->pin.cb, - res->pin.data); - - ret = - gnutls_privkey_import_x509(pkey, key, - GNUTLS_PRIVKEY_IMPORT_COPY); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - ret = certificate_credentials_append_pkey(res, pkey); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - /* load certificates */ - pcerts = gnutls_malloc(sizeof(gnutls_pcert_st) * cert_list_size); - if (pcerts == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - ret = get_x509_name(cert_list[0], &names); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = - gnutls_pcert_import_x509_list(pcerts, cert_list, (unsigned int*)&cert_list_size, - GNUTLS_X509_CRT_LIST_SORT); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = - certificate_credential_append_crt_list(res, names, pcerts, - cert_list_size); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - res->ncerts++; - - /* after this point we do not deinitialize anything on failure to avoid - * double freeing. We intentionally keep everything as the credentials state - * is documented to be on undefined state. */ - if ((ret = _gnutls_check_key_cert_match(res)) < 0) { - gnutls_assert(); - return ret; - } - - CRED_RET_SUCCESS(res); - - cleanup: - gnutls_free(pcerts); - _gnutls_str_array_clear(&names); - return ret; -} - -/** - * gnutls_certificate_get_x509_key: - * @res: is a #gnutls_certificate_credentials_t type. - * @index: The index of the key to obtain. - * @key: Location to store the key. - * - * Obtains a X.509 private key that has been stored in @res with one of - * gnutls_certificate_set_x509_key(), gnutls_certificate_set_key(), - * gnutls_certificate_set_x509_key_file(), - * gnutls_certificate_set_x509_key_file2(), - * gnutls_certificate_set_x509_key_mem(), or - * gnutls_certificate_set_x509_key_mem2(). The returned key must be deallocated - * with gnutls_x509_privkey_deinit() when no longer needed. - * - * The @index matches the return value of gnutls_certificate_set_x509_key() and friends - * functions, when the %GNUTLS_CERTIFICATE_API_V2 flag is set. - * - * If there is no key with the given index, - * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned. If the key with the - * given index is not a X.509 key, %GNUTLS_E_INVALID_REQUEST is returned. - * - * Returns: %GNUTLS_E_SUCCESS (0) on success, or a negative error code. - * - * Since: 3.4.0 - */ -int -gnutls_certificate_get_x509_key(gnutls_certificate_credentials_t res, - unsigned index, - gnutls_x509_privkey_t *key) -{ - if (index >= res->ncerts) { - gnutls_assert(); - return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; - } - - return gnutls_privkey_export_x509(res->pkey[index], key); -} - -/** - * gnutls_certificate_get_x509_crt: - * @res: is a #gnutls_certificate_credentials_t type. - * @index: The index of the certificate list to obtain. - * @crt_list: Where to store the certificate list. - * @crt_list_size: Will hold the number of certificates. - * - * Obtains a X.509 certificate list that has been stored in @res with one of - * gnutls_certificate_set_x509_key(), gnutls_certificate_set_key(), - * gnutls_certificate_set_x509_key_file(), - * gnutls_certificate_set_x509_key_file2(), - * gnutls_certificate_set_x509_key_mem(), or - * gnutls_certificate_set_x509_key_mem2(). Each certificate in the returned - * certificate list must be deallocated with gnutls_x509_crt_deinit(), and the - * list itself must be freed with gnutls_free(). - * - * The @index matches the return value of gnutls_certificate_set_x509_key() and friends - * functions, when the %GNUTLS_CERTIFICATE_API_V2 flag is set. - * - * If there is no certificate with the given index, - * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned. If the certificate - * with the given index is not a X.509 certificate, %GNUTLS_E_INVALID_REQUEST - * is returned. The returned certificates must be deinitialized after - * use, and the @crt_list pointer must be freed using gnutls_free(). - * - * Returns: %GNUTLS_E_SUCCESS (0) on success, or a negative error code. - * - * Since: 3.4.0 - */ -int -gnutls_certificate_get_x509_crt(gnutls_certificate_credentials_t res, - unsigned index, - gnutls_x509_crt_t **crt_list, - unsigned *crt_list_size) -{ - int ret; - unsigned i; - - if (index >= res->ncerts) { - gnutls_assert(); - return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; - } - - *crt_list_size = res->certs[index].cert_list_length; - *crt_list = gnutls_malloc( - res->certs[index].cert_list_length * sizeof (gnutls_x509_crt_t)); - if (*crt_list == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - - for (i = 0; i < res->certs[index].cert_list_length; ++i) { - ret = gnutls_pcert_export_x509(&res->certs[index].cert_list[i], &(*crt_list)[i]); - if (ret < 0) { - while (i--) - gnutls_x509_crt_deinit((*crt_list)[i]); - gnutls_free(*crt_list); - *crt_list = NULL; - - return gnutls_assert_val(ret); - } - } - - return 0; -} - -/** - * gnutls_certificate_set_key: - * @res: is a #gnutls_certificate_credentials_t type. - * @names: is an array of DNS name of the certificate (NULL if none) - * @names_size: holds the size of the names list - * @pcert_list: contains a certificate list (path) for the specified private key - * @pcert_list_size: holds the size of the certificate list - * @key: is a #gnutls_privkey_t key - * - * This function sets a certificate/private key pair in the - * gnutls_certificate_credentials_t type. This function may be - * called more than once, in case multiple keys/certificates exist for - * the server. For clients that want to send more than their own end- - * entity certificate (e.g., also an intermediate CA cert), the full - * certificate chain must be provided in @pcert_list. - * - * Note that the @key and the elements of @pcert_list will become part of the credentials - * structure and must not be deallocated. They will be automatically deallocated - * when the @res structure is deinitialized. - * - * If that function fails to load the @res structure is at an undefined state, it must - * not be reused to load other keys or certificates. - * - * Note that, this function by default returns zero on success and a negative value on error. - * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() - * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. - * - * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). - * - * Since: 3.0 - **/ -int -gnutls_certificate_set_key(gnutls_certificate_credentials_t res, - const char **names, - int names_size, - gnutls_pcert_st * pcert_list, - int pcert_list_size, gnutls_privkey_t key) -{ - int ret, i; - gnutls_str_array_t str_names; - gnutls_pcert_st *new_pcert_list; - - _gnutls_str_array_init(&str_names); - - if (names != NULL && names_size > 0) { - for (i = 0; i < names_size; i++) { - ret = - str_array_append_idna(&str_names, names[i], - strlen(names[i])); - if (ret < 0) { - ret = gnutls_assert_val(ret); - goto cleanup; - } - } - } else if (names == NULL && pcert_list[0].type == GNUTLS_CRT_X509) { - gnutls_x509_crt_t crt; - - ret = gnutls_x509_crt_init(&crt); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = gnutls_x509_crt_import(crt, &pcert_list[0].cert, GNUTLS_X509_FMT_DER); - if (ret < 0) { - gnutls_assert(); - gnutls_x509_crt_deinit(crt); - goto cleanup; - } - - ret = get_x509_name(crt, &str_names); - gnutls_x509_crt_deinit(crt); - - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - } - - if (res->pin.cb) - gnutls_privkey_set_pin_function(key, res->pin.cb, - res->pin.data); - - ret = certificate_credentials_append_pkey(res, key); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - new_pcert_list = gnutls_malloc(sizeof(gnutls_pcert_st) * pcert_list_size); - if (new_pcert_list == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - memcpy(new_pcert_list, pcert_list, sizeof(gnutls_pcert_st) * pcert_list_size); - - ret = - certificate_credential_append_crt_list(res, str_names, - new_pcert_list, - pcert_list_size); - if (ret < 0) { - gnutls_assert(); - gnutls_free(new_pcert_list); - goto cleanup; - } - - res->ncerts++; - - /* Unlike gnutls_certificate_set_x509_key, we deinitialize everything - * local after a failure. That is because the caller is responsible for - * freeing these values after a failure, and if we keep references we - * lead to double freeing */ - if ((ret = _gnutls_check_key_cert_match(res)) < 0) { - gnutls_assert(); - gnutls_free(new_pcert_list); - res->ncerts--; - goto cleanup; - } - - CRED_RET_SUCCESS(res); - - cleanup: - _gnutls_str_array_clear(&str_names); - return ret; -} - -/** - * gnutls_certificate_set_trust_list: - * @res: is a #gnutls_certificate_credentials_t type. - * @tlist: is a #gnutls_x509_trust_list_t type - * @flags: must be zero - * - * This function sets a trust list in the gnutls_certificate_credentials_t type. - * - * Note that the @tlist will become part of the credentials - * structure and must not be deallocated. It will be automatically deallocated - * when the @res structure is deinitialized. - * - * Returns: %GNUTLS_E_SUCCESS (0) on success, or a negative error code. - * - * Since: 3.2.2 - **/ -void -gnutls_certificate_set_trust_list(gnutls_certificate_credentials_t res, - gnutls_x509_trust_list_t tlist, - unsigned flags) -{ - gnutls_x509_trust_list_deinit(res->tlist, 1); - - res->tlist = tlist; -} - -/** - * gnutls_certificate_get_trust_list: - * @res: is a #gnutls_certificate_credentials_t type. - * @tlist: Location where to store the trust list. - * - * Obtains the list of trusted certificates stored in @res and writes a - * pointer to it to the location @tlist. The pointer will point to memory - * internal to @res, and must not be deinitialized. It will be automatically - * deallocated when the @res structure is deinitialized. - * - * Since: 3.4.0 - **/ -void -gnutls_certificate_get_trust_list(gnutls_certificate_credentials_t res, - gnutls_x509_trust_list_t *tlist) -{ - *tlist = res->tlist; -} - -/** - * gnutls_certificate_set_x509_key_file: - * @res: is a #gnutls_certificate_credentials_t type. - * @certfile: is a file that containing the certificate list (path) for - * the specified private key, in PKCS7 format, or a list of certificates - * @keyfile: is a file that contains the private key - * @type: is PEM or DER - * - * This function sets a certificate/private key pair in the - * gnutls_certificate_credentials_t type. This function may be - * called more than once, in case multiple keys/certificates exist for - * the server. For clients that need to send more than its own end - * entity certificate, e.g., also an intermediate CA cert, then the - * @certfile must contain the ordered certificate chain. - * - * Note that the names in the certificate provided will be considered - * when selecting the appropriate certificate to use (in case of multiple - * certificate/key pairs). - * - * This function can also accept URLs at @keyfile and @certfile. In that case it - * will use the private key and certificate indicated by the URLs. Note - * that the supported URLs are the ones indicated by gnutls_url_is_supported(). - * - * In case the @certfile is provided as a PKCS #11 URL, then the certificate, and its - * present issuers in the token are imported (i.e., forming the required trust chain). - * - * If that function fails to load the @res structure is at an undefined state, it must - * not be reused to load other keys or certificates. - * - * Note that, this function by default returns zero on success and a negative value on error. - * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() - * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. - * - * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). - * - * Since: 3.1.11 - **/ -int -gnutls_certificate_set_x509_key_file(gnutls_certificate_credentials_t res, - const char *certfile, - const char *keyfile, - gnutls_x509_crt_fmt_t type) -{ - return gnutls_certificate_set_x509_key_file2(res, certfile, - keyfile, type, NULL, - 0); -} - -/** - * gnutls_certificate_set_x509_key_file2: - * @res: is a #gnutls_certificate_credentials_t type. - * @certfile: is a file that containing the certificate list (path) for - * the specified private key, in PKCS7 format, or a list of certificates - * @keyfile: is a file that contains the private key - * @type: is PEM or DER - * @pass: is the password of the key - * @flags: an ORed sequence of gnutls_pkcs_encrypt_flags_t - * - * This function sets a certificate/private key pair in the - * gnutls_certificate_credentials_t type. This function may be - * called more than once, in case multiple keys/certificates exist for - * the server. For clients that need to send more than its own end - * entity certificate, e.g., also an intermediate CA cert, then the - * @certfile must contain the ordered certificate chain. - * - * Note that the names in the certificate provided will be considered - * when selecting the appropriate certificate to use (in case of multiple - * certificate/key pairs). - * - * This function can also accept URLs at @keyfile and @certfile. In that case it - * will use the private key and certificate indicated by the URLs. Note - * that the supported URLs are the ones indicated by gnutls_url_is_supported(). - * Before GnuTLS 3.4.0 when a URL was specified, the @pass part was ignored and a - * PIN callback had to be registered, this is no longer the case in current releases. - * - * In case the @certfile is provided as a PKCS #11 URL, then the certificate, and its - * present issuers in the token are imported (i.e., forming the required trust chain). - * - * If that function fails to load the @res structure is at an undefined state, it must - * not be reused to load other keys or certificates. - * - * Note that, this function by default returns zero on success and a negative value on error. - * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() - * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. - * - * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). - * - **/ -int -gnutls_certificate_set_x509_key_file2(gnutls_certificate_credentials_t res, - const char *certfile, - const char *keyfile, - gnutls_x509_crt_fmt_t type, - const char *pass, unsigned int flags) -{ - int ret; - - /* this should be first - */ - if ((ret = read_key_file(res, keyfile, type, pass, flags)) < 0) - return ret; - - - if ((ret = read_cert_file(res, certfile, type)) < 0) { - gnutls_privkey_deinit(res->pkey[res->ncerts]); - return ret; - } - - res->ncerts++; - - if ((ret = _gnutls_check_key_cert_match(res)) < 0) { - gnutls_assert(); - return ret; - } - - CRED_RET_SUCCESS(res); -} - -/** - * gnutls_certificate_set_x509_trust_mem: - * @res: is a #gnutls_certificate_credentials_t type. - * @ca: is a list of trusted CAs or a DER certificate - * @type: is DER or PEM - * - * This function adds the trusted CAs in order to verify client or - * server certificates. In case of a client this is not required to be - * called if the certificates are not verified using - * gnutls_certificate_verify_peers2(). This function may be called - * multiple times. - * - * In case of a server the CAs set here will be sent to the client if - * a certificate request is sent. This can be disabled using - * gnutls_certificate_send_x509_rdn_sequence(). - * - * Returns: the number of certificates processed or a negative error code - * on error. - **/ -int -gnutls_certificate_set_x509_trust_mem(gnutls_certificate_credentials_t res, - const gnutls_datum_t * ca, - gnutls_x509_crt_fmt_t type) -{ -int ret; - - ret = gnutls_x509_trust_list_add_trust_mem(res->tlist, ca, NULL, - type, GNUTLS_TL_USE_IN_TLS, 0); - if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND) - return 0; - - return ret; -} - -/** - * gnutls_certificate_set_x509_trust: - * @res: is a #gnutls_certificate_credentials_t type. - * @ca_list: is a list of trusted CAs - * @ca_list_size: holds the size of the CA list - * - * This function adds the trusted CAs in order to verify client - * or server certificates. In case of a client this is not required - * to be called if the certificates are not verified using - * gnutls_certificate_verify_peers2(). - * This function may be called multiple times. - * - * In case of a server the CAs set here will be sent to the client if - * a certificate request is sent. This can be disabled using - * gnutls_certificate_send_x509_rdn_sequence(). - * - * Returns: the number of certificates processed or a negative error code - * on error. - * - * Since: 2.4.0 - **/ -int -gnutls_certificate_set_x509_trust(gnutls_certificate_credentials_t res, - gnutls_x509_crt_t * ca_list, - int ca_list_size) -{ - int ret, i, j; - gnutls_x509_crt_t new_list[ca_list_size]; - - for (i = 0; i < ca_list_size; i++) { - ret = gnutls_x509_crt_init(&new_list[i]); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = _gnutls_x509_crt_cpy(new_list[i], ca_list[i]); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - } - - ret = - gnutls_x509_trust_list_add_cas(res->tlist, new_list, - ca_list_size, GNUTLS_TL_USE_IN_TLS); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - return ret; - - cleanup: - for (j = 0; j < i; j++) - gnutls_x509_crt_deinit(new_list[j]); - - return ret; -} - - -/** - * gnutls_certificate_set_x509_trust_file: - * @cred: is a #gnutls_certificate_credentials_t type. - * @cafile: is a file containing the list of trusted CAs (DER or PEM list) - * @type: is PEM or DER - * - * This function adds the trusted CAs in order to verify client or - * server certificates. In case of a client this is not required to - * be called if the certificates are not verified using - * gnutls_certificate_verify_peers2(). This function may be called - * multiple times. - * - * In case of a server the names of the CAs set here will be sent to - * the client if a certificate request is sent. This can be disabled - * using gnutls_certificate_send_x509_rdn_sequence(). - * - * This function can also accept URLs. In that case it - * will import all certificates that are marked as trusted. Note - * that the supported URLs are the ones indicated by gnutls_url_is_supported(). - * - * Returns: the number of certificates processed - **/ -int -gnutls_certificate_set_x509_trust_file(gnutls_certificate_credentials_t - cred, const char *cafile, - gnutls_x509_crt_fmt_t type) -{ -int ret; - - ret = gnutls_x509_trust_list_add_trust_file(cred->tlist, cafile, NULL, - type, GNUTLS_TL_USE_IN_TLS, 0); - if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND) - return 0; - - return ret; -} - -/** - * gnutls_certificate_set_x509_trust_dir: - * @cred: is a #gnutls_certificate_credentials_t type. - * @ca_dir: is a directory containing the list of trusted CAs (DER or PEM list) - * @type: is PEM or DER - * - * This function adds the trusted CAs present in the directory in order to - * verify client or server certificates. This function is identical - * to gnutls_certificate_set_x509_trust_file() but loads all certificates - * in a directory. - * - * Returns: the number of certificates processed - * - * Since: 3.3.6 - * - **/ -int -gnutls_certificate_set_x509_trust_dir(gnutls_certificate_credentials_t cred, - const char *ca_dir, - gnutls_x509_crt_fmt_t type) -{ -int ret; - - ret = gnutls_x509_trust_list_add_trust_dir(cred->tlist, ca_dir, NULL, - type, GNUTLS_TL_USE_IN_TLS, 0); - if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND) - return 0; - - return ret; -} - -/** - * gnutls_certificate_set_x509_system_trust: - * @cred: is a #gnutls_certificate_credentials_t type. - * - * This function adds the system's default trusted CAs in order to - * verify client or server certificates. - * - * In the case the system is currently unsupported %GNUTLS_E_UNIMPLEMENTED_FEATURE - * is returned. - * - * Returns: the number of certificates processed or a negative error code - * on error. - * - * Since: 3.0.20 - **/ -int -gnutls_certificate_set_x509_system_trust(gnutls_certificate_credentials_t - cred) -{ - return gnutls_x509_trust_list_add_system_trust(cred->tlist, - GNUTLS_TL_USE_IN_TLS, 0); -} - -/** - * gnutls_certificate_set_x509_crl_mem: - * @res: is a #gnutls_certificate_credentials_t type. - * @CRL: is a list of trusted CRLs. They should have been verified before. - * @type: is DER or PEM - * - * This function adds the trusted CRLs in order to verify client or - * server certificates. In case of a client this is not required to - * be called if the certificates are not verified using - * gnutls_certificate_verify_peers2(). This function may be called - * multiple times. - * - * Returns: number of CRLs processed, or a negative error code on error. - **/ -int -gnutls_certificate_set_x509_crl_mem(gnutls_certificate_credentials_t res, - const gnutls_datum_t * CRL, - gnutls_x509_crt_fmt_t type) -{ -int ret; - - ret = gnutls_x509_trust_list_add_trust_mem(res->tlist, NULL, CRL, - type, GNUTLS_TL_USE_IN_TLS, 0); - if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND) - return 0; - - return ret; -} - -/** - * gnutls_certificate_set_x509_crl: - * @res: is a #gnutls_certificate_credentials_t type. - * @crl_list: is a list of trusted CRLs. They should have been verified before. - * @crl_list_size: holds the size of the crl_list - * - * This function adds the trusted CRLs in order to verify client or - * server certificates. In case of a client this is not required to - * be called if the certificates are not verified using - * gnutls_certificate_verify_peers2(). This function may be called - * multiple times. - * - * Returns: number of CRLs processed, or a negative error code on error. - * - * Since: 2.4.0 - **/ -int -gnutls_certificate_set_x509_crl(gnutls_certificate_credentials_t res, - gnutls_x509_crl_t * crl_list, - int crl_list_size) -{ - int ret, i, j; - gnutls_x509_crl_t new_crl[crl_list_size]; - - for (i = 0; i < crl_list_size; i++) { - ret = gnutls_x509_crl_init(&new_crl[i]); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = _gnutls_x509_crl_cpy(new_crl[i], crl_list[i]); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - } - - ret = - gnutls_x509_trust_list_add_crls(res->tlist, new_crl, - crl_list_size, GNUTLS_TL_USE_IN_TLS, 0); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - return ret; - - cleanup: - for (j = 0; j < i; j++) - gnutls_x509_crl_deinit(new_crl[j]); - - return ret; -} - -/** - * gnutls_certificate_set_x509_crl_file: - * @res: is a #gnutls_certificate_credentials_t type. - * @crlfile: is a file containing the list of verified CRLs (DER or PEM list) - * @type: is PEM or DER - * - * This function adds the trusted CRLs in order to verify client or server - * certificates. In case of a client this is not required - * to be called if the certificates are not verified using - * gnutls_certificate_verify_peers2(). - * This function may be called multiple times. - * - * Returns: number of CRLs processed or a negative error code on error. - **/ -int -gnutls_certificate_set_x509_crl_file(gnutls_certificate_credentials_t res, - const char *crlfile, - gnutls_x509_crt_fmt_t type) -{ -int ret; - - ret = gnutls_x509_trust_list_add_trust_file(res->tlist, NULL, crlfile, - type, GNUTLS_TL_USE_IN_TLS, 0); - if (ret == GNUTLS_E_NO_CERTIFICATE_FOUND) - return 0; - - return ret; -} - -#include - - -/** - * gnutls_certificate_set_x509_simple_pkcs12_file: - * @res: is a #gnutls_certificate_credentials_t type. - * @pkcs12file: filename of file containing PKCS#12 blob. - * @type: is PEM or DER of the @pkcs12file. - * @password: optional password used to decrypt PKCS#12 file, bags and keys. - * - * This function sets a certificate/private key pair and/or a CRL in - * the gnutls_certificate_credentials_t type. This function may - * be called more than once (in case multiple keys/certificates exist - * for the server). - * - * PKCS#12 files with a MAC, encrypted bags and PKCS #8 - * private keys are supported. However, - * only password based security, and the same password for all - * operations, are supported. - * - * PKCS#12 file may contain many keys and/or certificates, and this - * function will try to auto-detect based on the key ID the certificate - * and key pair to use. If the PKCS#12 file contain the issuer of - * the selected certificate, it will be appended to the certificate - * to form a chain. - * - * If more than one private keys are stored in the PKCS#12 file, - * then only one key will be read (and it is undefined which one). - * - * It is believed that the limitations of this function is acceptable - * for most usage, and that any more flexibility would introduce - * complexity that would make it harder to use this functionality at - * all. - * - * Note that, this function by default returns zero on success and a negative value on error. - * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() - * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. - * - * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). - * - **/ -int - gnutls_certificate_set_x509_simple_pkcs12_file - (gnutls_certificate_credentials_t res, const char *pkcs12file, - gnutls_x509_crt_fmt_t type, const char *password) { - gnutls_datum_t p12blob; - size_t size; - int ret; - - p12blob.data = (void *) read_binary_file(pkcs12file, &size); - p12blob.size = (unsigned int) size; - if (p12blob.data == NULL) { - gnutls_assert(); - return GNUTLS_E_FILE_ERROR; - } - - ret = - gnutls_certificate_set_x509_simple_pkcs12_mem(res, &p12blob, - type, password); - free(p12blob.data); - - return ret; -} - -/** - * gnutls_certificate_set_x509_simple_pkcs12_mem: - * @res: is a #gnutls_certificate_credentials_t type. - * @p12blob: the PKCS#12 blob. - * @type: is PEM or DER of the @pkcs12file. - * @password: optional password used to decrypt PKCS#12 file, bags and keys. - * - * This function sets a certificate/private key pair and/or a CRL in - * the gnutls_certificate_credentials_t type. This function may - * be called more than once (in case multiple keys/certificates exist - * for the server). - * - * Encrypted PKCS#12 bags and PKCS#8 private keys are supported. However, - * only password based security, and the same password for all - * operations, are supported. - * - * PKCS#12 file may contain many keys and/or certificates, and this - * function will try to auto-detect based on the key ID the certificate - * and key pair to use. If the PKCS#12 file contain the issuer of - * the selected certificate, it will be appended to the certificate - * to form a chain. - * - * If more than one private keys are stored in the PKCS#12 file, - * then only one key will be read (and it is undefined which one). - * - * It is believed that the limitations of this function is acceptable - * for most usage, and that any more flexibility would introduce - * complexity that would make it harder to use this functionality at - * all. - * - * Note that, this function by default returns zero on success and a negative value on error. - * Since 3.5.6, when the flag %GNUTLS_CERTIFICATE_API_V2 is set using gnutls_certificate_set_flags() - * it returns an index (greater or equal to zero). That index can be used to other functions to refer to the added key-pair. - * - * Returns: On success this functions returns zero, and otherwise a negative value on error (see above for modifying that behavior). - * - * Since: 2.8.0 - **/ -int - gnutls_certificate_set_x509_simple_pkcs12_mem - (gnutls_certificate_credentials_t res, const gnutls_datum_t * p12blob, - gnutls_x509_crt_fmt_t type, const char *password) { - gnutls_pkcs12_t p12; - gnutls_x509_privkey_t key = NULL; - gnutls_x509_crt_t *chain = NULL; - gnutls_x509_crl_t crl = NULL; - unsigned int chain_size = 0, i; - int ret, idx; - - ret = gnutls_pkcs12_init(&p12); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - ret = gnutls_pkcs12_import(p12, p12blob, type, 0); - if (ret < 0) { - gnutls_assert(); - gnutls_pkcs12_deinit(p12); - return ret; - } - - if (password) { - ret = gnutls_pkcs12_verify_mac(p12, password); - if (ret < 0) { - gnutls_assert(); - gnutls_pkcs12_deinit(p12); - return ret; - } - } - - ret = - gnutls_pkcs12_simple_parse(p12, password, &key, &chain, - &chain_size, NULL, NULL, &crl, 0); - gnutls_pkcs12_deinit(p12); - if (ret < 0) { - gnutls_assert(); - return ret; - } - - if (key && chain) { - ret = - gnutls_certificate_set_x509_key(res, chain, chain_size, - key); - if (ret < 0) { - gnutls_assert(); - goto done; - } - - idx = ret; - } else { - gnutls_assert(); - ret = GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; - goto done; - } - - if (crl) { - ret = gnutls_certificate_set_x509_crl(res, &crl, 1); - if (ret < 0) { - gnutls_assert(); - goto done; - } - } - - if (res->flags & GNUTLS_CERTIFICATE_API_V2) - ret = idx; - else - ret = 0; - - done: - if (chain) { - for (i = 0; i < chain_size; i++) - gnutls_x509_crt_deinit(chain[i]); - gnutls_free(chain); - } - if (key) - gnutls_x509_privkey_deinit(key); - if (crl) - gnutls_x509_crl_deinit(crl); - - return ret; -} - - - -/** - * gnutls_certificate_free_crls: - * @sc: is a #gnutls_certificate_credentials_t type. - * - * This function will delete all the CRLs associated - * with the given credentials. - **/ -void gnutls_certificate_free_crls(gnutls_certificate_credentials_t sc) -{ - /* do nothing for now */ - return; -} - -/** - * gnutls_certificate_credentials_t: - * @cred: is a #gnutls_certificate_credentials_t type. - * @fn: A PIN callback - * @userdata: Data to be passed in the callback - * - * This function will set a callback function to be used when - * required to access a protected object. This function overrides any other - * global PIN functions. - * - * Note that this function must be called right after initialization - * to have effect. - * - * Since: 3.1.0 - **/ -void gnutls_certificate_set_pin_function(gnutls_certificate_credentials_t - cred, gnutls_pin_callback_t fn, - void *userdata) -{ - cred->pin.cb = fn; - cred->pin.data = userdata; -} diff --git a/lib/x509.h b/lib/x509.h index 4da17761cd..3ad21f519a 100644 --- a/lib/x509.h +++ b/lib/x509.h @@ -16,12 +16,15 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_X509_H +#define GNUTLS_LIB_X509_H + #include -#include + int _gnutls_x509_cert_verify_peers(gnutls_session_t session, gnutls_typed_vdata_st * data, @@ -30,9 +33,14 @@ int _gnutls_x509_cert_verify_peers(gnutls_session_t session, #define PEM_CERT_SEP2 "-----BEGIN X509 CERTIFICATE" #define PEM_CERT_SEP "-----BEGIN CERTIFICATE" +#define PEM_OCSP_RESPONSE "-----BEGIN OCSP RESPONSE" +#define BARE_PEM_OCSP_RESPONSE "OCSP RESPONSE" #define PEM_CRL_SEP "-----BEGIN X509 CRL" + int _gnutls_x509_raw_privkey_to_gkey(gnutls_privkey_t * privkey, const gnutls_datum_t * raw_key, gnutls_x509_crt_fmt_t type); + +#endif /* GNUTLS_LIB_X509_H */ diff --git a/lib/x509/Makefile.am b/lib/x509/Makefile.am index f4d9463c55..63b2b849b4 100644 --- a/lib/x509/Makefile.am +++ b/lib/x509/Makefile.am @@ -14,7 +14,7 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see include $(top_srcdir)/lib/common.mk @@ -23,8 +23,7 @@ AM_CPPFLAGS = \ -I$(builddir)/../../gl \ -I$(srcdir)/../includes \ -I$(builddir)/../includes \ - -I$(srcdir)/.. \ - $(LIBOPENCDK_CFLAGS) + -I$(srcdir)/.. if ENABLE_MINITASN1 AM_CPPFLAGS += -I$(srcdir)/../minitasn1 @@ -43,6 +42,10 @@ libgnutls_x509_la_SOURCES = \ crl_write.c \ crq.c \ dn.c \ + attributes.c \ + attributes.h \ + prov-seed.c \ + prov-seed.h \ extensions.c \ mpi.c \ output.c \ @@ -71,15 +74,18 @@ libgnutls_x509_la_SOURCES = \ pkcs7-output.c \ virt-san.c \ virt-san.h \ + spki.c \ x509_ext_int.h \ tls_features.c \ krb5.c krb5.h \ ip.c ip.h ip-in-cidr.h \ - supported_exts.h + supported_exts.h ocsp.h if ENABLE_OCSP libgnutls_x509_la_SOURCES += ocsp.c ocsp_output.c endif supported_exts.h: $(srcdir)/supported_exts.gperf - -gperf --global-table -t $^ > $@-tmp && mv $@-tmp $@ + -gperf --global-table -t $^ > $@-tmp \ + && sed 's/^const struct supported_exts_st \*/static const struct supported_exts_st \*/' <$@-tmp >$@ \ + && rm -f $@-tmp diff --git a/lib/x509/attributes.c b/lib/x509/attributes.c new file mode 100644 index 0000000000..969dc9b80d --- /dev/null +++ b/lib/x509/attributes.c @@ -0,0 +1,299 @@ +/* + * Copyright (C) 2003-2016 Free Software Foundation, Inc. + * Copyright (C) 2012-2016 Nikos Mavrogiannopoulos + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" + +#include +#include "errors.h" +#include +#include +#include "x509_int.h" +#include "attributes.h" + +/* Functions to parse and set the PKIX1 Attributes structure. + */ + +/* Overwrite the given attribute (using the index) + * index here starts from one. + */ +static int +overwrite_attribute(ASN1_TYPE asn, const char *root, unsigned indx, + const gnutls_datum_t * ext_data) +{ + char name[MAX_NAME_SIZE], name2[MAX_NAME_SIZE]; + int result; + + snprintf(name, sizeof(name), "%s.?%u", root, indx); + + _gnutls_str_cpy(name2, sizeof(name2), name); + _gnutls_str_cat(name2, sizeof(name2), ".values.?LAST"); + + result = _gnutls_x509_write_value(asn, name2, ext_data); + if (result < 0) { + gnutls_assert(); + return result; + } + + + return 0; +} + +/* Parses an Attribute list in the asn1_struct, and searches for the + * given OID. The index indicates the attribute value to be returned. + * + * If raw==0 only printable data are returned, or + * GNUTLS_E_X509_UNSUPPORTED_ATTRIBUTE. + * + * asn1_attr_name must be a string in the form + * "certificationRequestInfo.attributes" + * + */ +int +_x509_parse_attribute(ASN1_TYPE asn1_struct, + const char *attr_name, const char *given_oid, unsigned indx, + int raw, gnutls_datum_t * out) +{ + int k1, result; + char tmpbuffer1[MAX_NAME_SIZE]; + char tmpbuffer3[MAX_NAME_SIZE]; + char value[200]; + gnutls_datum_t td; + char oid[MAX_OID_SIZE]; + int len; + + k1 = 0; + do { + + k1++; + /* create a string like "attribute.?1" + */ + if (attr_name[0] != 0) + snprintf(tmpbuffer1, sizeof(tmpbuffer1), "%s.?%u", + attr_name, k1); + else + snprintf(tmpbuffer1, sizeof(tmpbuffer1), "?%u", + k1); + + len = sizeof(value) - 1; + result = + asn1_read_value(asn1_struct, tmpbuffer1, value, &len); + + if (result == ASN1_ELEMENT_NOT_FOUND) { + gnutls_assert(); + break; + } + + if (result != ASN1_VALUE_NOT_FOUND) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + /* Move to the attribute type and values + */ + /* Read the OID + */ + _gnutls_str_cpy(tmpbuffer3, sizeof(tmpbuffer3), + tmpbuffer1); + _gnutls_str_cat(tmpbuffer3, sizeof(tmpbuffer3), ".type"); + + len = sizeof(oid) - 1; + result = + asn1_read_value(asn1_struct, tmpbuffer3, oid, &len); + + if (result == ASN1_ELEMENT_NOT_FOUND) + break; + else if (result != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + if (strcmp(oid, given_oid) == 0) { /* Found the OID */ + + /* Read the Value + */ + snprintf(tmpbuffer3, sizeof(tmpbuffer3), + "%s.values.?%u", tmpbuffer1, indx + 1); + + len = sizeof(value) - 1; + result = + _gnutls_x509_read_value(asn1_struct, + tmpbuffer3, &td); + + if (result != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + if (raw == 0) { + result = + _gnutls_x509_dn_to_string + (oid, td.data, td.size, out); + + _gnutls_free_datum(&td); + + if (result < 0) { + gnutls_assert(); + goto cleanup; + } + return 0; + } else { /* raw!=0 */ + out->data = td.data; + out->size = td.size; + + return 0; + } + } + + } + while (1); + + gnutls_assert(); + + result = GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; + + cleanup: + return result; +} + +/* This function will attempt to set the requested attribute in + * the given X509v3 certificate. + * + * Critical will be either 0 or 1. + */ +static int +add_attribute(ASN1_TYPE asn, const char *root, const char *attribute_id, + const gnutls_datum_t * ext_data) +{ + int result; + char name[MAX_NAME_SIZE]; + + snprintf(name, sizeof(name), "%s", root); + + /* Add a new attribute in the list. + */ + result = asn1_write_value(asn, name, "NEW", 1); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + snprintf(name, sizeof(name), "%s.?LAST.type", root); + + result = asn1_write_value(asn, name, attribute_id, 1); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + snprintf(name, sizeof(name), "%s.?LAST.values", root); + + result = asn1_write_value(asn, name, "NEW", 1); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + snprintf(name, sizeof(name), "%s.?LAST.values.?LAST", root); + + result = _gnutls_x509_write_value(asn, name, ext_data); + if (result < 0) { + gnutls_assert(); + return result; + } + + return 0; +} + + +int +_x509_set_attribute(ASN1_TYPE asn, const char *root, + const char *ext_id, const gnutls_datum_t * ext_data) +{ + int result; + int k, len; + char name[MAX_NAME_SIZE], name2[MAX_NAME_SIZE]; + char extnID[MAX_OID_SIZE]; + + /* Find the index of the given attribute. + */ + k = 0; + do { + k++; + + snprintf(name, sizeof(name), "%s.?%u", root, k); + + len = sizeof(extnID) - 1; + result = asn1_read_value(asn, name, extnID, &len); + + /* move to next + */ + + if (result == ASN1_ELEMENT_NOT_FOUND) { + break; + } + + do { + + _gnutls_str_cpy(name2, sizeof(name2), name); + _gnutls_str_cat(name2, sizeof(name2), ".type"); + + len = sizeof(extnID) - 1; + result = asn1_read_value(asn, name2, extnID, &len); + + if (result == ASN1_ELEMENT_NOT_FOUND) { + gnutls_assert(); + break; + } else if (result != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + /* Handle Extension + */ + if (strcmp(extnID, ext_id) == 0) { + /* attribute was found + */ + return overwrite_attribute(asn, root, k, + ext_data); + } + + + } + while (0); + } + while (1); + + if (result == ASN1_ELEMENT_NOT_FOUND) { + return add_attribute(asn, root, ext_id, ext_data); + } else { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + + return 0; +} diff --git a/lib/x509/attributes.h b/lib/x509/attributes.h new file mode 100644 index 0000000000..c148935b75 --- /dev/null +++ b/lib/x509/attributes.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_X509_ATTRIBUTES_H +#define GNUTLS_LIB_X509_ATTRIBUTES_H + +int +_x509_parse_attribute(ASN1_TYPE asn1_struct, + const char *attr_name, const char *given_oid, unsigned indx, + int raw, gnutls_datum_t * out); + +int +_x509_set_attribute(ASN1_TYPE asn, const char *root, + const char *ext_id, const gnutls_datum_t * ext_data); + +#endif /* GNUTLS_LIB_X509_ATTRIBUTES_H */ diff --git a/lib/x509/common.c b/lib/x509/common.c index 38425bde4c..a1f6d62e13 100644 --- a/lib/x509/common.c +++ b/lib/x509/common.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -30,6 +30,7 @@ #include #include #include +#include #include "x509_int.h" #include "extras/hex.h" #include @@ -38,19 +39,9 @@ static int data2hex(const void *data, size_t data_size, gnutls_datum_t *out); -struct oid_to_string { - const char *oid; - unsigned oid_size; - const char *ldap_desc; - unsigned ldap_desc_size; - const char *asn_desc; /* description in the pkix file if complex type */ - unsigned int etype; /* the libtasn1 ASN1_ETYPE or INVALID - * if cannot be simply parsed */ -}; - #define ENTRY(oid, ldap, asn, etype) {oid, sizeof(oid)-1, ldap, sizeof(ldap)-1, asn, etype} -/* when there is no ldap description */ +/* when there is no name description */ #define ENTRY_ND(oid, asn, etype) {oid, sizeof(oid)-1, NULL, 0, asn, etype} /* This list contains all the OIDs that may be @@ -130,21 +121,31 @@ static const struct oid_to_string _oid2str[] = { /* rfc3920 section 5.1.1 */ ENTRY("1.3.6.1.5.5.7.8.5", "XmppAddr", NULL, ASN1_ETYPE_UTF8_STRING), + /* Russian things: https://cdnimg.rg.ru/pril/66/91/91/23041_pril.pdf */ + /* Main state registration number */ + ENTRY("1.2.643.100.1", "OGRN", NULL, ASN1_ETYPE_NUMERIC_STRING), + /* Individual insurance account number */ + ENTRY("1.2.643.100.3", "SNILS", NULL, ASN1_ETYPE_NUMERIC_STRING), + /* Main state registration number for individual enterpreneurs */ + ENTRY("1.2.643.100.5", "OGRNIP", NULL, ASN1_ETYPE_NUMERIC_STRING), + /* VAT identification number */ + ENTRY("1.2.643.3.131.1.1", "INN", NULL, ASN1_ETYPE_NUMERIC_STRING), + {NULL, 0, NULL, 0, NULL, 0} }; -static const struct oid_to_string *get_oid_entry(const char *oid) +const struct oid_to_string *_gnutls_oid_get_entry(const struct oid_to_string *ots, const char *oid) { unsigned int i = 0; unsigned len = strlen(oid); do { - if (len == _oid2str[i].oid_size && - strcmp(_oid2str[i].oid, oid) == 0) - return &_oid2str[i]; + if (len == ots[i].oid_size && + strcmp(ots[i].oid, oid) == 0) + return &ots[i]; i++; } - while (_oid2str[i].oid != NULL); + while (ots[i].oid != NULL); return NULL; } @@ -154,9 +155,9 @@ const char *_gnutls_ldap_string_to_oid(const char *str, unsigned str_len) unsigned int i = 0; do { - if ((_oid2str[i].ldap_desc != NULL) && - (str_len == _oid2str[i].ldap_desc_size) && - (strncasecmp(_oid2str[i].ldap_desc, str, str_len) == + if ((_oid2str[i].name_desc != NULL) && + (str_len == _oid2str[i].name_desc_size) && + (c_strncasecmp(_oid2str[i].name_desc, str, str_len) == 0)) return _oid2str[i].oid; i++; @@ -231,18 +232,7 @@ static int str_escape(const gnutls_datum_t * str, gnutls_datum_t * escaped) **/ int gnutls_x509_dn_oid_known(const char *oid) { - unsigned int i = 0; - unsigned len = strlen(oid); - - do { - if (len == _oid2str[i].oid_size && - strcmp(_oid2str[i].oid, oid) == 0) - return 1; - i++; - } - while (_oid2str[i].oid != NULL); - - return 0; + return _gnutls_oid_get_entry(_oid2str, oid) != NULL; } /** @@ -261,17 +251,10 @@ int gnutls_x509_dn_oid_known(const char *oid) **/ const char *gnutls_x509_dn_oid_name(const char *oid, unsigned int flags) { - unsigned int i = 0; - unsigned len = strlen(oid); - - do { - if ((_oid2str[i].oid_size == len) && - strcmp(_oid2str[i].oid, oid) == 0 && _oid2str[i].ldap_desc != NULL) - return _oid2str[i].ldap_desc; - i++; - } - while (_oid2str[i].oid != NULL); + const struct oid_to_string *entry =_gnutls_oid_get_entry(_oid2str, oid); + if (entry && entry->name_desc) + return entry->name_desc; if (flags & GNUTLS_X509_DN_OID_RETURN_OID) return oid; else @@ -432,14 +415,14 @@ _gnutls_x509_dn_to_string(const char *oid, void *value, { const struct oid_to_string *oentry; int ret; - gnutls_datum_t tmp; + gnutls_datum_t tmp = {NULL, 0}; if (value == NULL || value_size <= 0) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - oentry = get_oid_entry(oid); + oentry = _gnutls_oid_get_entry(_oid2str, oid); if (oentry == NULL) { /* unknown OID -> hex */ unknown_oid: ret = data2hex(value, value_size, str); @@ -528,6 +511,9 @@ gnutls_x509_subject_alt_name_t _gnutls_x509_san_find_type(char *str_type) return GNUTLS_SAN_OTHERNAME; if (strcmp(str_type, "directoryName") == 0) return GNUTLS_SAN_DN; + if (strcmp(str_type, "registeredID") == 0) + return GNUTLS_SAN_REGISTERED_ID; + return (gnutls_x509_subject_alt_name_t) - 1; } @@ -624,6 +610,9 @@ _gnutls_x509_decode_string(unsigned int etype, unsigned int str_size, len; gnutls_datum_t td; + output->data = NULL; + output->size = 0; + if (allow_ber) ret = asn1_decode_simple_ber(etype, der, der_size, &str, &str_size, NULL); @@ -691,11 +680,12 @@ x509_read_value(ASN1_TYPE c, const char *root, if (result == 0 && allow_null == 0 && len == 0) { /* don't allow null strings */ return gnutls_assert_val(GNUTLS_E_ASN1_DER_ERROR); + } else if (result == 0 && allow_null == 0 && etype == ASN1_ETYPE_OBJECT_ID && len == 1) { + return gnutls_assert_val(GNUTLS_E_ASN1_DER_ERROR); } if (result != ASN1_MEM_ERROR) { if (result != ASN1_SUCCESS || allow_null == 0 || len != 0) { - gnutls_assert(); result = _gnutls_asn2err(result); return result; } @@ -961,7 +951,7 @@ _gnutls_x509_der_encode_and_copy(ASN1_TYPE src, const char *src_name, return 0; } -/* Writes the value of the datum in the given ASN1_TYPE. +/* Writes the value of the datum in the given ASN1_TYPE. */ int _gnutls_x509_write_value(ASN1_TYPE c, const char *root, @@ -980,7 +970,7 @@ _gnutls_x509_write_value(ASN1_TYPE c, const char *root, return 0; } -/* Writes the value of the datum in the given ASN1_TYPE as a string. +/* Writes the value of the datum in the given ASN1_TYPE as a string. */ int _gnutls_x509_write_string(ASN1_TYPE c, const char *root, @@ -1032,17 +1022,15 @@ _asnstr_append_name(char *name, size_t name_size, const char *part1, int _gnutls_x509_encode_and_copy_PKI_params(ASN1_TYPE dst, const char *dst_name, - gnutls_pk_algorithm_t - pk_algorithm, - gnutls_pk_params_st * params) + const gnutls_pk_params_st * params) { - const char *pk; + const char *oid; gnutls_datum_t der = { NULL, 0 }; int result; char name[128]; - pk = gnutls_pk_get_oid(pk_algorithm); - if (pk == NULL) { + oid = gnutls_pk_get_oid(params->algo); + if (oid == NULL) { gnutls_assert(); return GNUTLS_E_UNKNOWN_PK_ALGORITHM; } @@ -1052,14 +1040,14 @@ _gnutls_x509_encode_and_copy_PKI_params(ASN1_TYPE dst, _asnstr_append_name(name, sizeof(name), dst_name, ".algorithm.algorithm"); - result = asn1_write_value(dst, name, pk, 1); + result = asn1_write_value(dst, name, oid, 1); if (result != ASN1_SUCCESS) { gnutls_assert(); return _gnutls_asn2err(result); } result = - _gnutls_x509_write_pubkey_params(pk_algorithm, params, &der); + _gnutls_x509_write_pubkey_params(params, &der); if (result < 0) { gnutls_assert(); return result; @@ -1076,7 +1064,7 @@ _gnutls_x509_encode_and_copy_PKI_params(ASN1_TYPE dst, return _gnutls_asn2err(result); } - result = _gnutls_x509_write_pubkey(pk_algorithm, params, &der); + result = _gnutls_x509_write_pubkey(params, &der); if (result < 0) { gnutls_assert(); return result; @@ -1102,8 +1090,7 @@ _gnutls_x509_encode_and_copy_PKI_params(ASN1_TYPE dst, */ int _gnutls_x509_encode_PKI_params(gnutls_datum_t * der, - gnutls_pk_algorithm_t - pk_algorithm, gnutls_pk_params_st * params) + const gnutls_pk_params_st * params) { int ret; ASN1_TYPE tmp; @@ -1117,7 +1104,6 @@ _gnutls_x509_encode_PKI_params(gnutls_datum_t * der, ret = _gnutls_x509_encode_and_copy_PKI_params(tmp, "tbsCertificate.subjectPublicKeyInfo", - pk_algorithm, params); if (ret != ASN1_SUCCESS) { gnutls_assert(); @@ -1141,17 +1127,16 @@ _gnutls_x509_encode_PKI_params(gnutls_datum_t * der, */ int _gnutls_x509_get_pk_algorithm(ASN1_TYPE src, const char *src_name, + gnutls_ecc_curve_t *curve, unsigned int *bits) { int result; int algo; char oid[64]; int len; - gnutls_pk_params_st params; + gnutls_ecc_curve_t lcurve = GNUTLS_ECC_CURVE_INVALID; char name[128]; - gnutls_pk_params_init(¶ms); - _asnstr_append_name(name, sizeof(name), src_name, ".algorithm.algorithm"); len = sizeof(oid); @@ -1162,26 +1147,36 @@ _gnutls_x509_get_pk_algorithm(ASN1_TYPE src, const char *src_name, return _gnutls_asn2err(result); } - algo = gnutls_oid_to_pk(oid); + algo = _gnutls_oid_to_pk_and_curve(oid, &lcurve); if (algo == GNUTLS_PK_UNKNOWN) { _gnutls_debug_log ("%s: unknown public key algorithm: %s\n", __func__, oid); } + if (curve) + *curve = lcurve; + if (bits == NULL) { return algo; } - /* Now read the parameters' bits + /* Now read the parameters' bits */ - result = _gnutls_get_asn_mpis(src, src_name, ¶ms); - if (result < 0) - return gnutls_assert_val(result); + if (lcurve != GNUTLS_ECC_CURVE_INVALID) { /* curve present */ + bits[0] = gnutls_ecc_curve_get_size(lcurve)*8; + } else { + gnutls_pk_params_st params; + gnutls_pk_params_init(¶ms); + + result = _gnutls_get_asn_mpis(src, src_name, ¶ms); + if (result < 0) + return gnutls_assert_val(result); - bits[0] = pubkey_to_bits(algo, ¶ms); + bits[0] = pubkey_to_bits(¶ms); + gnutls_pk_params_release(¶ms); + } - gnutls_pk_params_release(¶ms); return algo; } @@ -1240,22 +1235,54 @@ int _gnutls_x509_get_signature_algorithm(ASN1_TYPE src, const char *src_name) { int result; + char name[128]; gnutls_datum_t sa = {NULL, 0}; - /* Read the signature algorithm. Note that parameters are not - * read. They will be read from the issuer's certificate if needed. - */ - result = _gnutls_x509_read_value(src, src_name, &sa); + _gnutls_str_cpy(name, sizeof(name), src_name); + _gnutls_str_cat(name, sizeof(name), ".algorithm"); + + /* Read the signature algorithm */ + result = _gnutls_x509_read_value(src, name, &sa); if (result < 0) { gnutls_assert(); return result; } - result = gnutls_oid_to_sign((char *) sa.data); + /* Read the signature parameters. Unless the algorithm is + * RSA-PSS, parameters are not read. They will be read from + * the issuer's certificate if needed. + */ + if (sa.data && strcmp ((char *) sa.data, PK_PKIX1_RSA_PSS_OID) == 0) { + gnutls_datum_t der = {NULL, 0}; + gnutls_x509_spki_st params; + + _gnutls_str_cpy(name, sizeof(name), src_name); + _gnutls_str_cat(name, sizeof(name), ".parameters"); + + result = _gnutls_x509_read_value(src, name, &der); + if (result < 0) { + _gnutls_free_datum(&sa); + return gnutls_assert_val(result); + } + + result = _gnutls_x509_read_rsa_pss_params(der.data, der.size, + ¶ms); + _gnutls_free_datum(&der); + + if (result == 0) + result = gnutls_pk_to_sign(params.pk, params.rsa_pss_dig); + } else if (sa.data) { + result = gnutls_oid_to_sign((char *) sa.data); + } else { + result = GNUTLS_E_UNKNOWN_ALGORITHM; + } _gnutls_free_datum(&sa); + if (result == GNUTLS_SIGN_UNKNOWN) + result = GNUTLS_E_UNKNOWN_ALGORITHM; + return result; } @@ -1273,7 +1300,7 @@ _gnutls_x509_get_signature(ASN1_TYPE src, const char *src_name, signature->data = NULL; signature->size = 0; - /* Read the signature + /* Read the signature */ len = 0; result = asn1_read_value(src, src_name, NULL, &len); @@ -1414,7 +1441,7 @@ _gnutls_x509_encode_and_write_attribute(const char *given_oid, int result; const struct oid_to_string *oentry; - oentry = get_oid_entry(given_oid); + oentry = _gnutls_oid_get_entry(_oid2str, given_oid); if (oentry == NULL) { gnutls_assert(); _gnutls_debug_log("Cannot find OID: %s\n", given_oid); @@ -1509,7 +1536,7 @@ int _gnutls_strdatum_to_buf(gnutls_datum_t * d, void *buf, } int -_gnutls_x509_get_raw_field2(ASN1_TYPE c2, gnutls_datum_t * raw, +_gnutls_x509_get_raw_field2(ASN1_TYPE c2, const gnutls_datum_t * raw, const char *whom, gnutls_datum_t * dn) { int result, len1; @@ -1534,7 +1561,7 @@ _gnutls_x509_get_raw_field2(ASN1_TYPE c2, gnutls_datum_t * raw, return result; } -int _gnutls_copy_string(gnutls_datum_t* str, uint8_t *out, size_t *out_size) +int _gnutls_copy_string(const gnutls_datum_t* str, uint8_t *out, size_t *out_size) { unsigned size_to_check; @@ -1557,7 +1584,7 @@ unsigned size_to_check; return 0; } -int _gnutls_copy_data(gnutls_datum_t* str, uint8_t *out, size_t *out_size) +int _gnutls_copy_data(const gnutls_datum_t* str, uint8_t *out, size_t *out_size) { if ((unsigned) str->size > *out_size) { gnutls_assert(); @@ -1605,7 +1632,7 @@ int x509_crt_to_raw_pubkey(gnutls_x509_crt_t crt, } /* Converts an X.509 certificate to subjectPublicKeyInfo */ -int x509_raw_crt_to_raw_pubkey(const gnutls_datum_t * cert, +int _gnutls_x509_raw_crt_to_raw_pubkey(const gnutls_datum_t * cert, gnutls_datum_t * rpubkey) { gnutls_x509_crt_t crt = NULL; @@ -1629,13 +1656,17 @@ int x509_raw_crt_to_raw_pubkey(const gnutls_datum_t * cert, } unsigned -_gnutls_check_valid_key_id(gnutls_datum_t *key_id, - gnutls_x509_crt_t cert, time_t now) +_gnutls_check_valid_key_id(const gnutls_datum_t *key_id, + gnutls_x509_crt_t cert, time_t now, + unsigned *has_ski) { uint8_t id[MAX_KEY_ID_SIZE]; size_t id_size; unsigned result = 0; + if (has_ski) + *has_ski = 0; + if (now > gnutls_x509_crt_get_expiration_time(cert) || now < gnutls_x509_crt_get_activation_time(cert)) { /* don't bother, certificate is not yet activated or expired */ @@ -1649,6 +1680,9 @@ _gnutls_check_valid_key_id(gnutls_datum_t *key_id, goto out; } + if (has_ski) + *has_ski = 1; + if (id_size == key_id->size && !memcmp(id, key_id->data, id_size)) result = 1; @@ -1747,29 +1781,20 @@ gnutls_x509_crt_t *_gnutls_sort_clist(gnutls_x509_crt_t int _gnutls_check_if_sorted(gnutls_x509_crt_t * crt, int nr) { - void *prev_dn = NULL; - void *dn; - size_t prev_dn_size = 0, dn_size; int i, ret; /* check if the X.509 list is ordered */ if (nr > 1) { for (i = 0; i < nr; i++) { if (i > 0) { - dn = crt[i]->raw_dn.data; - dn_size = crt[i]->raw_dn.size; - - if (dn_size != prev_dn_size - || memcmp(dn, prev_dn, dn_size) != 0) { + if (!_gnutls_x509_compare_raw_dn(&crt[i]->raw_dn, + &crt[i-1]->raw_issuer_dn)) { ret = gnutls_assert_val (GNUTLS_E_CERTIFICATE_LIST_UNSORTED); goto cleanup; } } - - prev_dn = crt[i]->raw_issuer_dn.data; - prev_dn_size = crt[i]->raw_issuer_dn.size; } } ret = 0; @@ -1777,3 +1802,110 @@ int _gnutls_check_if_sorted(gnutls_x509_crt_t * crt, int nr) cleanup: return ret; } + +/** + * gnutls_gost_paramset_get_name: + * @param: is a GOST 28147 param set + * + * Convert a #gnutls_gost_paramset_t value to a string. + * + * Returns: a string that contains the name of the specified GOST param set, + * or %NULL. + * + * Since: 3.6.3 + **/ +const char *gnutls_gost_paramset_get_name(gnutls_gost_paramset_t param) +{ + switch(param) { + case GNUTLS_GOST_PARAMSET_TC26_Z: + return "TC26-Z"; + case GNUTLS_GOST_PARAMSET_CP_A: + return "CryptoPro-A"; + case GNUTLS_GOST_PARAMSET_CP_B: + return "CryptoPro-B"; + case GNUTLS_GOST_PARAMSET_CP_C: + return "CryptoPro-C"; + case GNUTLS_GOST_PARAMSET_CP_D: + return "CryptoPro-D"; + default: + gnutls_assert(); + return "Unknown"; + } +} + +/** + * gnutls_gost_paramset_get_oid: + * @param: is a GOST 28147 param set + * + * Convert a #gnutls_gost_paramset_t value to its object identifier. + * + * Returns: a string that contains the object identifier of the specified GOST + * param set, or %NULL. + * + * Since: 3.6.3 + **/ +const char *gnutls_gost_paramset_get_oid(gnutls_gost_paramset_t param) +{ + switch(param) { + case GNUTLS_GOST_PARAMSET_TC26_Z: + return GOST28147_89_TC26Z_OID; + case GNUTLS_GOST_PARAMSET_CP_A: + return GOST28147_89_CPA_OID; + case GNUTLS_GOST_PARAMSET_CP_B: + return GOST28147_89_CPB_OID; + case GNUTLS_GOST_PARAMSET_CP_C: + return GOST28147_89_CPC_OID; + case GNUTLS_GOST_PARAMSET_CP_D: + return GOST28147_89_CPD_OID; + default: + gnutls_assert(); + return NULL; + } +} + +/** + * gnutls_oid_to_gost_paramset: + * @oid: is an object identifier + * + * Converts a textual object identifier to a #gnutls_gost_paramset_t value. + * + * Returns: a #gnutls_gost_paramset_get_oid of the specified GOST 28147 + * param st, or %GNUTLS_GOST_PARAMSET_UNKNOWN on failure. + * + * Since: 3.6.3 + **/ +gnutls_gost_paramset_t gnutls_oid_to_gost_paramset(const char *oid) +{ + if (!strcmp(oid, GOST28147_89_TC26Z_OID)) + return GNUTLS_GOST_PARAMSET_TC26_Z; + else if (!strcmp(oid, GOST28147_89_CPA_OID)) + return GNUTLS_GOST_PARAMSET_CP_A; + else if (!strcmp(oid, GOST28147_89_CPB_OID)) + return GNUTLS_GOST_PARAMSET_CP_B; + else if (!strcmp(oid, GOST28147_89_CPC_OID)) + return GNUTLS_GOST_PARAMSET_CP_C; + else if (!strcmp(oid, GOST28147_89_CPD_OID)) + return GNUTLS_GOST_PARAMSET_CP_D; + else + return gnutls_assert_val(GNUTLS_GOST_PARAMSET_UNKNOWN); +} + +int _gnutls_x509_get_version(ASN1_TYPE root, const char *name) +{ + uint8_t version[8]; + int len, result; + + len = sizeof(version); + result = asn1_read_value(root, name, version, &len); + if (result != ASN1_SUCCESS) { + if (result == ASN1_ELEMENT_NOT_FOUND) + return 1; /* the DEFAULT version */ + gnutls_assert(); + return _gnutls_asn2err(result); + } + + if (len != 1 || version[0] >= 0x80) + return gnutls_assert_val(GNUTLS_E_ASN1_DER_ERROR); + + return (int) version[0] + 1; +} diff --git a/lib/x509/common.h b/lib/x509/common.h index b0c1c5e29f..483bd1de6c 100644 --- a/lib/x509/common.h +++ b/lib/x509/common.h @@ -17,12 +17,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef COMMON_H -#define COMMON_H +#ifndef GNUTLS_LIB_X509_COMMON_H +#define GNUTLS_LIB_X509_COMMON_H #include #include @@ -30,9 +30,14 @@ #include #define MAX_STRING_LEN 512 + +#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) +# define MAX_ITER_COUNT 10*1024 +#else /* Set a maximum iteration count over which we refuse to * decode a file. That is to prevent DoS. */ -#define MAX_ITER_COUNT (10*1024*1024) +# define MAX_ITER_COUNT (10*1024*1024) +#endif #define GNUTLS_XML_SHOW_ALL 1 @@ -46,10 +51,13 @@ /* public key algorithm's OIDs */ #define PK_PKIX1_RSA_OID "1.2.840.113549.1.1.1" +#define PK_PKIX1_RSA_PSS_OID "1.2.840.113549.1.1.10" #define PK_X509_RSA_OID "2.5.8.1.1" #define PK_DSA_OID "1.2.840.10040.4.1" #define PK_GOST_R3410_94_OID "1.2.643.2.2.20" #define PK_GOST_R3410_2001_OID "1.2.643.2.2.19" +#define PK_GOST_R3410_2012_256_OID "1.2.643.7.1.1.1.1" +#define PK_GOST_R3410_2012_512_OID "1.2.643.7.1.1.1.2" /* signature OIDs */ @@ -70,6 +78,8 @@ #define SIG_RSA_RMD160_OID "1.3.36.3.3.1.2" #define SIG_GOST_R3410_94_OID "1.2.643.2.2.4" #define SIG_GOST_R3410_2001_OID "1.2.643.2.2.3" +#define SIG_GOST_R3410_2012_256_OID "1.2.643.7.1.1.3.2" +#define SIG_GOST_R3410_2012_512_OID "1.2.643.7.1.1.3.3" #define ISO_SIG_RSA_SHA1_OID "1.3.14.3.2.29" #define SIG_DSA_SHA3_224_OID "2.16.840.1.101.3.4.3.5" @@ -87,12 +97,35 @@ #define SIG_RSA_SHA3_384_OID "2.16.840.1.101.3.4.3.15" #define SIG_RSA_SHA3_512_OID "2.16.840.1.101.3.4.3.16" +#define SIG_EDDSA_SHA512_OID "1.3.101.112" +#define SIG_ED448_OID "1.3.101.113" + #define XMPP_OID "1.3.6.1.5.5.7.8.5" #define KRB5_PRINCIPAL_OID "1.3.6.1.5.2.2" +#define PKIX1_RSA_PSS_MGF1_OID "1.2.840.113549.1.1.8" + +#define GOST28147_89_OID "1.2.643.2.2.21" +#define GOST28147_89_TC26Z_OID "1.2.643.7.1.2.5.1.1" +#define GOST28147_89_CPA_OID "1.2.643.2.2.31.1" +#define GOST28147_89_CPB_OID "1.2.643.2.2.31.2" +#define GOST28147_89_CPC_OID "1.2.643.2.2.31.3" +#define GOST28147_89_CPD_OID "1.2.643.2.2.31.4" #define ASN1_NULL "\x05\x00" #define ASN1_NULL_SIZE 2 +struct oid_to_string { + const char *oid; + unsigned oid_size; + const char *name_desc; + unsigned name_desc_size; + const char *asn_desc; /* description in the pkix file if complex type */ + unsigned int etype; /* the libtasn1 ASN1_ETYPE or INVALID + * if cannot be simply parsed */ +}; + +const struct oid_to_string *_gnutls_oid_get_entry(const struct oid_to_string *ots, const char *oid); + int _gnutls_x509_set_time(ASN1_TYPE c2, const char *where, time_t tim, int force_general); int @@ -163,6 +196,7 @@ int _gnutls_x509_decode_and_read_attribute(ASN1_TYPE asn1_struct, int multi, int octet); int _gnutls_x509_get_pk_algorithm(ASN1_TYPE src, const char *src_name, + gnutls_ecc_curve_t *curve, unsigned int *bits); int @@ -170,12 +204,9 @@ _gnutls_x509_get_signature_algorithm(ASN1_TYPE src, const char *src_name); int _gnutls_x509_encode_and_copy_PKI_params(ASN1_TYPE dst, const char *dst_name, - gnutls_pk_algorithm_t - pk_algorithm, - gnutls_pk_params_st * params); + const gnutls_pk_params_st * params); int _gnutls_x509_encode_PKI_params(gnutls_datum_t * der, - gnutls_pk_algorithm_t, - gnutls_pk_params_st * params); + const gnutls_pk_params_st * params); int _gnutls_asn1_copy_node(ASN1_TYPE * dst, const char *dst_name, ASN1_TYPE src, const char *src_name); @@ -189,7 +220,7 @@ int _gnutls_x509_get_signature(ASN1_TYPE src, const char *src_name, int _gnutls_get_asn_mpis(ASN1_TYPE asn, const char *root, gnutls_pk_params_st * params); -int _gnutls_get_key_id(gnutls_pk_algorithm_t pk, gnutls_pk_params_st *, +int _gnutls_get_key_id(gnutls_pk_params_st *, unsigned char *output_data, size_t * output_data_size, unsigned flags); @@ -204,7 +235,7 @@ _gnutls_x509_get_raw_field(ASN1_TYPE c2, const char *whom, gnutls_datum_t *out) } int -_gnutls_x509_get_raw_field2(ASN1_TYPE c2, gnutls_datum_t * raw, +_gnutls_x509_get_raw_field2(ASN1_TYPE c2, const gnutls_datum_t * raw, const char *whom, gnutls_datum_t * dn); unsigned @@ -217,8 +248,9 @@ _gnutls_check_if_same_key2(gnutls_x509_crt_t cert1, gnutls_datum_t *cert2bin); unsigned -_gnutls_check_valid_key_id(gnutls_datum_t *key_id, - gnutls_x509_crt_t cert, time_t now); +_gnutls_check_valid_key_id(const gnutls_datum_t *key_id, + gnutls_x509_crt_t cert, time_t now, + unsigned *has_ski); unsigned _gnutls_check_key_purpose(gnutls_x509_crt_t cert, const char *purpose, unsigned no_any); @@ -237,13 +269,15 @@ int _gnutls_strdatum_to_buf(gnutls_datum_t * d, void *buf, unsigned _gnutls_is_same_dn(gnutls_x509_crt_t cert1, gnutls_x509_crt_t cert2); -int _gnutls_copy_string(gnutls_datum_t* str, uint8_t *out, size_t *out_size); -int _gnutls_copy_data(gnutls_datum_t* str, uint8_t *out, size_t *out_size); +int _gnutls_copy_string(const gnutls_datum_t* str, uint8_t *out, size_t *out_size); +int _gnutls_copy_data(const gnutls_datum_t* str, uint8_t *out, size_t *out_size); int _gnutls_x509_decode_ext(const gnutls_datum_t *der, gnutls_x509_ext_st *out); -int x509_raw_crt_to_raw_pubkey(const gnutls_datum_t * cert, +int _gnutls_x509_raw_crt_to_raw_pubkey(const gnutls_datum_t * cert, gnutls_datum_t * rpubkey); +int _gnutls_x509_get_version(ASN1_TYPE root, const char *name); + int x509_crt_to_raw_pubkey(gnutls_x509_crt_t crt, gnutls_datum_t * rpubkey); @@ -260,7 +294,12 @@ int _gnutls_check_if_sorted(gnutls_x509_crt_t * crt, int nr); inline static int _asn1_strict_der_decode (asn1_node * element, const void *ider, int len, char *errorDescription) { - return asn1_der_decoding2(element, ider, &len, ASN1_DECODE_FLAG_STRICT_DER, errorDescription); +#if defined(STRICT_DER_TIME) || !defined(ASN1_DECODE_FLAG_ALLOW_INCORRECT_TIME) +# define _ASN1_DER_FLAGS ASN1_DECODE_FLAG_STRICT_DER +#else +# define _ASN1_DER_FLAGS (ASN1_DECODE_FLAG_ALLOW_INCORRECT_TIME|ASN1_DECODE_FLAG_STRICT_DER) +#endif + return asn1_der_decoding2(element, ider, &len, _ASN1_DER_FLAGS, errorDescription); } -#endif +#endif /* GNUTLS_LIB_X509_COMMON_H */ diff --git a/lib/x509/crl.c b/lib/x509/crl.c index bd307ca42a..76d90925e8 100644 --- a/lib/x509/crl.c +++ b/lib/x509/crl.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -204,7 +204,7 @@ gnutls_x509_crl_import(gnutls_x509_crl_t crl, * **/ int -gnutls_x509_crl_get_issuer_dn(const gnutls_x509_crl_t crl, char *buf, +gnutls_x509_crl_get_issuer_dn(gnutls_x509_crl_t crl, char *buf, size_t * sizeof_buf) { if (crl == NULL) { @@ -368,37 +368,16 @@ gnutls_x509_crl_get_issuer_dn3(gnutls_x509_crl_t crl, gnutls_datum_t * dn, unsig * This function will return a value of the #gnutls_sign_algorithm_t * enumeration that is the signature algorithm. * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. + * Since 3.6.0 this function never returns a negative error code. + * Error cases and unknown/unsupported signature algorithms are + * mapped to %GNUTLS_SIGN_UNKNOWN. + * + * Returns: a #gnutls_sign_algorithm_t value **/ int gnutls_x509_crl_get_signature_algorithm(gnutls_x509_crl_t crl) { - int result; - gnutls_datum_t sa; - - if (crl == NULL) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - /* Read the signature algorithm. Note that parameters are not - * read. They will be read from the issuer's certificate if needed. - */ - - result = - _gnutls_x509_read_value(crl->crl, - "signatureAlgorithm.algorithm", &sa); - - if (result < 0) { - gnutls_assert(); - return result; - } - - result = gnutls_oid_to_sign((const char *) sa.data); - - _gnutls_free_datum(&sa); - - return result; + return map_errs_to_zero(_gnutls_x509_get_signature_algorithm(crl->crl, + "signatureAlgorithm")); } /** @@ -505,23 +484,12 @@ gnutls_x509_crl_get_signature(gnutls_x509_crl_t crl, **/ int gnutls_x509_crl_get_version(gnutls_x509_crl_t crl) { - uint8_t version[8]; - int len, result; - if (crl == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - len = sizeof(version); - if ((result = - asn1_read_value(crl->crl, "tbsCertList.version", version, - &len)) != ASN1_SUCCESS) { - gnutls_assert(); - return _gnutls_asn2err(result); - } - - return (int) version[0] + 1; + return _gnutls_x509_get_version(crl->crl, "tbsCertList.version"); } /** @@ -1397,10 +1365,13 @@ gnutls_x509_crl_list_import(gnutls_x509_crl_t * crls, if (count >= *crl_max) { if (! (flags & - GNUTLS_X509_CRT_LIST_IMPORT_FAIL_IF_EXCEED)) + GNUTLS_X509_CRT_LIST_IMPORT_FAIL_IF_EXCEED)) { break; - else + } else if (nocopy == 0) { + for (j = 0; j < count; j++) + gnutls_x509_crl_deinit(crls[j]); nocopy = 1; + } } if (!nocopy) { @@ -1413,12 +1384,12 @@ gnutls_x509_crl_list_import(gnutls_x509_crl_t * crls, tmp.data = (void *) ptr; tmp.size = data->size - (ptr - (char *) data->data); - ret = gnutls_x509_crl_import(crls[count], &tmp, GNUTLS_X509_FMT_PEM); if (ret < 0) { gnutls_assert(); + count++; goto error; } } diff --git a/lib/x509/crl_write.c b/lib/x509/crl_write.c index 6e5cfc9f28..36ca452488 100644 --- a/lib/x509/crl_write.c +++ b/lib/x509/crl_write.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -91,6 +91,9 @@ gnutls_x509_crl_set_version(gnutls_x509_crl_t crl, unsigned int version) * be fully functional (e.g., for signature verification), until it * is exported an re-imported. * + * After GnuTLS 3.6.1 the value of @dig may be %GNUTLS_DIG_UNKNOWN, + * and in that case, a suitable but reasonable for the key algorithm will be selected. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * @@ -141,20 +144,20 @@ gnutls_x509_crl_sign2(gnutls_x509_crl_t crl, gnutls_x509_crt_t issuer, * @issuer: is the certificate of the certificate issuer * @issuer_key: holds the issuer's private key * - * This function is the same a gnutls_x509_crl_sign2() with no flags, and - * SHA1 as the hash algorithm. + * This function is the same a gnutls_x509_crl_sign2() with no flags, + * and an appropriate hash algorithm. The hash algorithm used may + * vary between versions of GnuTLS, and it is tied to the security + * level of the issuer's public key. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. - * - * Deprecated: Use gnutls_x509_crl_privkey_sign(). */ int gnutls_x509_crl_sign(gnutls_x509_crl_t crl, gnutls_x509_crt_t issuer, gnutls_x509_privkey_t issuer_key) { return gnutls_x509_crl_sign2(crl, issuer, issuer_key, - GNUTLS_DIG_SHA1, 0); + 0, 0); } /** @@ -475,6 +478,9 @@ gnutls_x509_crl_set_number(gnutls_x509_crl_t crl, * be fully functional (e.g., for signature verification), until it * is exported an re-imported. * + * After GnuTLS 3.6.1 the value of @dig may be %GNUTLS_DIG_UNKNOWN, + * and in that case, a suitable but reasonable for the key algorithm will be selected. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * @@ -494,12 +500,18 @@ gnutls_x509_crl_privkey_sign(gnutls_x509_crl_t crl, return GNUTLS_E_INVALID_REQUEST; } + if (dig == 0) { + result = gnutls_x509_crt_get_preferred_hash_algorithm(issuer, &dig, NULL); + if (result < 0) + return gnutls_assert_val(result); + } + /* disable all the unneeded OPTIONAL fields. */ disable_optional_stuff(crl); result = _gnutls_x509_pkix_sign(crl->crl, "tbsCertList", - dig, issuer, issuer_key); + dig, 0, issuer, issuer_key); if (result < 0) { gnutls_assert(); return result; diff --git a/lib/x509/crq.c b/lib/x509/crq.c index 13978baa40..afebca2012 100644 --- a/lib/x509/crq.c +++ b/lib/x509/crq.c @@ -1,6 +1,7 @@ /* * Copyright (C) 2003-2016 Free Software Foundation, Inc. * Copyright (C) 2012-2016 Nikos Mavrogiannopoulos + * Copyright (C) 2016-2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -36,6 +37,8 @@ #include #include "x509_int.h" #include +#include +#include "attributes.h" /** * gnutls_x509_crq_init: @@ -167,15 +170,18 @@ gnutls_x509_crq_import(gnutls_x509_crq_t crq, * enumeration that is the signature algorithm that has been used to * sign this certificate request. * - * Returns: a #gnutls_sign_algorithm_t value, or a negative error code on - * error. + * Since 3.6.0 this function never returns a negative error code. + * Error cases and unknown/unsupported signature algorithms are + * mapped to %GNUTLS_SIGN_UNKNOWN. + * + * Returns: a #gnutls_sign_algorithm_t value * * Since: 3.4.0 **/ int gnutls_x509_crq_get_signature_algorithm(gnutls_x509_crq_t crq) { - return _gnutls_x509_get_signature_algorithm(crq->crq, - "signatureAlgorithm.algorithm"); + return map_errs_to_zero(_gnutls_x509_get_signature_algorithm(crq->crq, + "signatureAlgorithm")); } /** @@ -413,126 +419,6 @@ gnutls_x509_crq_get_dn_oid(gnutls_x509_crq_t crq, indx, oid, sizeof_oid); } -/* Parses an Attribute list in the asn1_struct, and searches for the - * given OID. The index indicates the attribute value to be returned. - * - * If raw==0 only printable data are returned, or - * GNUTLS_E_X509_UNSUPPORTED_ATTRIBUTE. - * - * asn1_attr_name must be a string in the form - * "certificationRequestInfo.attributes" - * - */ -static int -parse_attribute(ASN1_TYPE asn1_struct, - const char *attr_name, const char *given_oid, unsigned indx, - int raw, gnutls_datum_t * out) -{ - int k1, result; - char tmpbuffer1[MAX_NAME_SIZE]; - char tmpbuffer3[MAX_NAME_SIZE]; - char value[200]; - gnutls_datum_t td; - char oid[MAX_OID_SIZE]; - int len; - - k1 = 0; - do { - - k1++; - /* create a string like "attribute.?1" - */ - if (attr_name[0] != 0) - snprintf(tmpbuffer1, sizeof(tmpbuffer1), "%s.?%u", - attr_name, k1); - else - snprintf(tmpbuffer1, sizeof(tmpbuffer1), "?%u", - k1); - - len = sizeof(value) - 1; - result = - asn1_read_value(asn1_struct, tmpbuffer1, value, &len); - - if (result == ASN1_ELEMENT_NOT_FOUND) { - gnutls_assert(); - break; - } - - if (result != ASN1_VALUE_NOT_FOUND) { - gnutls_assert(); - result = _gnutls_asn2err(result); - goto cleanup; - } - - /* Move to the attibute type and values - */ - /* Read the OID - */ - _gnutls_str_cpy(tmpbuffer3, sizeof(tmpbuffer3), - tmpbuffer1); - _gnutls_str_cat(tmpbuffer3, sizeof(tmpbuffer3), ".type"); - - len = sizeof(oid) - 1; - result = - asn1_read_value(asn1_struct, tmpbuffer3, oid, &len); - - if (result == ASN1_ELEMENT_NOT_FOUND) - break; - else if (result != ASN1_SUCCESS) { - gnutls_assert(); - result = _gnutls_asn2err(result); - goto cleanup; - } - - if (strcmp(oid, given_oid) == 0) { /* Found the OID */ - - /* Read the Value - */ - snprintf(tmpbuffer3, sizeof(tmpbuffer3), - "%s.values.?%u", tmpbuffer1, indx + 1); - - len = sizeof(value) - 1; - result = - _gnutls_x509_read_value(asn1_struct, - tmpbuffer3, &td); - - if (result != ASN1_SUCCESS) { - gnutls_assert(); - result = _gnutls_asn2err(result); - goto cleanup; - } - - if (raw == 0) { - result = - _gnutls_x509_dn_to_string - (oid, td.data, td.size, out); - - _gnutls_free_datum(&td); - - if (result < 0) { - gnutls_assert(); - goto cleanup; - } - return 0; - } else { /* raw!=0 */ - out->data = td.data; - out->size = td.size; - - return 0; - } - } - - } - while (1); - - gnutls_assert(); - - result = GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; - - cleanup: - return result; -} - /** * gnutls_x509_crq_get_challenge_password: * @crq: should contain a #gnutls_x509_crq_t type @@ -559,7 +445,7 @@ gnutls_x509_crq_get_challenge_password(gnutls_x509_crq_t crq, } ret = - parse_attribute(crq->crq, + _x509_parse_attribute(crq->crq, "certificationRequestInfo.attributes", "1.2.840.113549.1.9.7", 0, 0, &td); if (ret < 0) @@ -568,149 +454,6 @@ gnutls_x509_crq_get_challenge_password(gnutls_x509_crq_t crq, return _gnutls_strdatum_to_buf(&td, pass, pass_size); } -/* This function will attempt to set the requested attribute in - * the given X509v3 certificate. - * - * Critical will be either 0 or 1. - */ -static int -add_attribute(ASN1_TYPE asn, const char *root, const char *attribute_id, - const gnutls_datum_t * ext_data) -{ - int result; - char name[MAX_NAME_SIZE]; - - snprintf(name, sizeof(name), "%s", root); - - /* Add a new attribute in the list. - */ - result = asn1_write_value(asn, name, "NEW", 1); - if (result != ASN1_SUCCESS) { - gnutls_assert(); - return _gnutls_asn2err(result); - } - - snprintf(name, sizeof(name), "%s.?LAST.type", root); - - result = asn1_write_value(asn, name, attribute_id, 1); - if (result != ASN1_SUCCESS) { - gnutls_assert(); - return _gnutls_asn2err(result); - } - - snprintf(name, sizeof(name), "%s.?LAST.values", root); - - result = asn1_write_value(asn, name, "NEW", 1); - if (result != ASN1_SUCCESS) { - gnutls_assert(); - return _gnutls_asn2err(result); - } - - snprintf(name, sizeof(name), "%s.?LAST.values.?LAST", root); - - result = _gnutls_x509_write_value(asn, name, ext_data); - if (result < 0) { - gnutls_assert(); - return result; - } - - return 0; -} - -/* Overwrite the given attribute (using the index) - * index here starts from one. - */ -static int -overwrite_attribute(ASN1_TYPE asn, const char *root, unsigned indx, - const gnutls_datum_t * ext_data) -{ - char name[MAX_NAME_SIZE], name2[MAX_NAME_SIZE]; - int result; - - snprintf(name, sizeof(name), "%s.?%u", root, indx); - - _gnutls_str_cpy(name2, sizeof(name2), name); - _gnutls_str_cat(name2, sizeof(name2), ".values.?LAST"); - - result = _gnutls_x509_write_value(asn, name2, ext_data); - if (result < 0) { - gnutls_assert(); - return result; - } - - - return 0; -} - -static int -set_attribute(ASN1_TYPE asn, const char *root, - const char *ext_id, const gnutls_datum_t * ext_data) -{ - int result; - int k, len; - char name[MAX_NAME_SIZE], name2[MAX_NAME_SIZE]; - char extnID[MAX_OID_SIZE]; - - /* Find the index of the given attribute. - */ - k = 0; - do { - k++; - - snprintf(name, sizeof(name), "%s.?%u", root, k); - - len = sizeof(extnID) - 1; - result = asn1_read_value(asn, name, extnID, &len); - - /* move to next - */ - - if (result == ASN1_ELEMENT_NOT_FOUND) { - break; - } - - do { - - _gnutls_str_cpy(name2, sizeof(name2), name); - _gnutls_str_cat(name2, sizeof(name2), ".type"); - - len = sizeof(extnID) - 1; - result = asn1_read_value(asn, name2, extnID, &len); - - if (result == ASN1_ELEMENT_NOT_FOUND) { - gnutls_assert(); - break; - } else if (result != ASN1_SUCCESS) { - gnutls_assert(); - return _gnutls_asn2err(result); - } - - /* Handle Extension - */ - if (strcmp(extnID, ext_id) == 0) { - /* attribute was found - */ - return overwrite_attribute(asn, root, k, - ext_data); - } - - - } - while (0); - } - while (1); - - if (result == ASN1_ELEMENT_NOT_FOUND) { - return add_attribute(asn, root, ext_id, ext_data); - } else { - gnutls_assert(); - return _gnutls_asn2err(result); - } - - - return 0; -} - /** * gnutls_x509_crq_set_attribute_by_oid: * @crq: should contain a #gnutls_x509_crq_t type @@ -743,7 +486,7 @@ gnutls_x509_crq_set_attribute_by_oid(gnutls_x509_crq_t crq, return GNUTLS_E_INVALID_REQUEST; } - return set_attribute(crq->crq, + return _x509_set_attribute(crq->crq, "certificationRequestInfo.attributes", oid, &data); } @@ -781,7 +524,7 @@ gnutls_x509_crq_get_attribute_by_oid(gnutls_x509_crq_t crq, } ret = - parse_attribute(crq->crq, + _x509_parse_attribute(crq->crq, "certificationRequestInfo.attributes", oid, indx, 1, &td); if (ret < 0) @@ -919,7 +662,7 @@ gnutls_x509_crq_set_key(gnutls_x509_crq_t crq, gnutls_x509_privkey_t key) result = _gnutls_x509_encode_and_copy_PKI_params (crq->crq, "certificationRequestInfo.subjectPKInfo", - key->pk_algorithm, &key->params); + &key->params); if (result < 0) { gnutls_assert(); @@ -1037,11 +780,12 @@ gnutls_x509_crq_set_key_rsa_raw(gnutls_x509_crq_t crq, } temp_params.params_nr = RSA_PUBLIC_PARAMS; + temp_params.algo = GNUTLS_PK_RSA; result = _gnutls_x509_encode_and_copy_PKI_params (crq->crq, "certificationRequestInfo.subjectPKInfo", - GNUTLS_PK_RSA, &temp_params); + &temp_params); if (result < 0) { gnutls_assert(); @@ -1121,7 +865,7 @@ gnutls_x509_crq_set_challenge_password(gnutls_x509_crq_t crq, * gnutls_x509_crq_sign2: * @crq: should contain a #gnutls_x509_crq_t type * @key: holds a private key - * @dig: The message digest to use, i.e., %GNUTLS_DIG_SHA1 + * @dig: The message digest to use, i.e., %GNUTLS_DIG_SHA256 * @flags: must be 0 * * This function will sign the certificate request with a private key. @@ -1132,6 +876,13 @@ gnutls_x509_crq_set_challenge_password(gnutls_x509_crq_t crq, * This must be the last step in a certificate request generation * since all the previously set parameters are now signed. * + * A known limitation of this function is, that a newly-signed request will not + * be fully functional (e.g., for signature verification), until it + * is exported an re-imported. + * + * After GnuTLS 3.6.1 the value of @dig may be %GNUTLS_DIG_UNKNOWN, + * and in that case, a suitable but reasonable for the key algorithm will be selected. + * * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. * %GNUTLS_E_ASN1_VALUE_NOT_FOUND is returned if you didn't set all * information in the certificate request (e.g., the version using @@ -1182,16 +933,20 @@ gnutls_x509_crq_sign2(gnutls_x509_crq_t crq, gnutls_x509_privkey_t key, * @key: holds a private key * * This function is the same a gnutls_x509_crq_sign2() with no flags, - * and SHA1 as the hash algorithm. + * and an appropriate hash algorithm. The hash algorithm used may + * vary between versions of GnuTLS, and it is tied to the security + * level of the issuer's public key. + * + * A known limitation of this function is, that a newly-signed request will not + * be fully functional (e.g., for signature verification), until it + * is exported an re-imported. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. - * - * Deprecated: Use gnutls_x509_crq_privkey_sign() instead. */ int gnutls_x509_crq_sign(gnutls_x509_crq_t crq, gnutls_x509_privkey_t key) { - return gnutls_x509_crq_sign2(crq, key, GNUTLS_DIG_SHA1, 0); + return gnutls_x509_crq_sign2(crq, key, 0, 0); } /** @@ -1286,14 +1041,58 @@ gnutls_x509_crq_get_pk_algorithm(gnutls_x509_crq_t crq, unsigned int *bits) } result = _gnutls_x509_get_pk_algorithm - (crq->crq, "certificationRequestInfo.subjectPKInfo", bits); + (crq->crq, "certificationRequestInfo.subjectPKInfo", NULL, bits); if (result < 0) { gnutls_assert(); + return result; } return result; } +/** + * gnutls_x509_crq_get_spki; + * @crq: should contain a #gnutls_x509_crq_t type + * @spki: a SubjectPublicKeyInfo structure of type #gnutls_x509_spki_t + * @flags: must be zero + * + * This function will return the public key information of a PKCS#10 + * certificate request. The provided @spki must be initialized. + * + * Returns: Zero on success, or a negative error code on error. + **/ +int +gnutls_x509_crq_get_spki(gnutls_x509_crq_t crq, + gnutls_x509_spki_t spki, + unsigned int flags) +{ + int result; + gnutls_x509_spki_st params; + + if (crq == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + memset(¶ms, 0, sizeof(params)); + + spki->pk = gnutls_x509_crq_get_pk_algorithm(crq, NULL); + + result = _gnutls_x509_crq_read_spki_params(crq, ¶ms); + if (result < 0) { + gnutls_assert(); + return result; + } + + if (params.pk == GNUTLS_PK_UNKNOWN) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + spki->rsa_pss_dig = params.rsa_pss_dig; + spki->salt_size = params.salt_size; + + return 0; +} + /** * gnutls_x509_crq_get_signature_oid: * @crq: should contain a #gnutls_x509_crq_t type @@ -1301,7 +1100,7 @@ gnutls_x509_crq_get_pk_algorithm(gnutls_x509_crq_t crq, unsigned int *bits) * @oid_size: initially holds the size of @oid * * This function will return the OID of the signature algorithm - * that has been used to sign this certificate request. This is function + * that has been used to sign this certificate request. This function * is useful in the case gnutls_x509_crq_get_signature_algorithm() * returned %GNUTLS_SIGN_UNKNOWN. * @@ -1341,7 +1140,7 @@ int gnutls_x509_crq_get_signature_oid(gnutls_x509_crq_t crq, char *oid, size_t * * @oid_size: initially holds the size of @oid * * This function will return the OID of the public key algorithm - * on that certificate request. This is function + * on that certificate request. This function * is useful in the case gnutls_x509_crq_get_pk_algorithm() * returned %GNUTLS_PK_UNKNOWN. * @@ -2716,7 +2515,7 @@ gnutls_x509_crq_get_key_id(gnutls_x509_crq_t crq, unsigned int flags, unsigned char *output_data, size_t * output_data_size) { - int pk, ret = 0; + int ret = 0; gnutls_pk_params_st params; if (crq == NULL) { @@ -2724,12 +2523,6 @@ gnutls_x509_crq_get_key_id(gnutls_x509_crq_t crq, unsigned int flags, return GNUTLS_E_INVALID_REQUEST; } - pk = gnutls_x509_crq_get_pk_algorithm(crq, NULL); - if (pk < 0) { - gnutls_assert(); - return pk; - } - ret = _gnutls_x509_crq_get_mpis(crq, ¶ms); if (ret < 0) { gnutls_assert(); @@ -2737,7 +2530,7 @@ gnutls_x509_crq_get_key_id(gnutls_x509_crq_t crq, unsigned int flags, } ret = - _gnutls_get_key_id(pk, ¶ms, output_data, output_data_size, flags); + _gnutls_get_key_id(¶ms, output_data, output_data_size, flags); gnutls_pk_params_release(¶ms); @@ -2759,6 +2552,13 @@ gnutls_x509_crq_get_key_id(gnutls_x509_crq_t crq, unsigned int flags, * This must be the last step in a certificate request generation * since all the previously set parameters are now signed. * + * A known limitation of this function is, that a newly-signed request will not + * be fully functional (e.g., for signature verification), until it + * is exported an re-imported. + * + * After GnuTLS 3.6.1 the value of @dig may be %GNUTLS_DIG_UNKNOWN, + * and in that case, a suitable but reasonable for the key algorithm will be selected. + * * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. * %GNUTLS_E_ASN1_VALUE_NOT_FOUND is returned if you didn't set all * information in the certificate request (e.g., the version using @@ -2774,6 +2574,9 @@ gnutls_x509_crq_privkey_sign(gnutls_x509_crq_t crq, gnutls_privkey_t key, int result; gnutls_datum_t signature; gnutls_datum_t tbs; + gnutls_pk_algorithm_t pk; + gnutls_x509_spki_st params; + const gnutls_sign_entry_st *se; if (crq == NULL) { gnutls_assert(); @@ -2790,6 +2593,40 @@ gnutls_x509_crq_privkey_sign(gnutls_x509_crq_t crq, gnutls_privkey_t key, } } + if (dig == 0) { + /* attempt to find a reasonable choice */ + gnutls_pubkey_t pubkey; + int ret; + + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = gnutls_pubkey_import_privkey(pubkey, key, 0, 0); + if (ret < 0) { + gnutls_pubkey_deinit(pubkey); + return gnutls_assert_val(ret); + } + ret = gnutls_pubkey_get_preferred_hash_algorithm(pubkey, &dig, NULL); + gnutls_pubkey_deinit(pubkey); + + if (ret < 0) + return gnutls_assert_val(ret); + } + + result = _gnutls_privkey_get_spki_params(key, ¶ms); + if (result < 0) { + gnutls_assert(); + return result; + } + + pk = gnutls_privkey_get_pk_algorithm(key, NULL); + result = _gnutls_privkey_update_spki_params(key, pk, dig, 0, ¶ms); + if (result < 0) { + gnutls_assert(); + return result; + } + /* Step 1. Self sign the request. */ result = @@ -2801,7 +2638,14 @@ gnutls_x509_crq_privkey_sign(gnutls_x509_crq_t crq, gnutls_privkey_t key, return result; } - result = gnutls_privkey_sign_data(key, dig, 0, &tbs, &signature); + se = _gnutls_pk_to_sign_entry(params.pk, dig); + if (se == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + FIX_SIGN_PARAMS(params, flags, dig); + + result = privkey_sign_and_hash_data(key, se, + &tbs, &signature, ¶ms); gnutls_free(tbs.data); if (result < 0) { @@ -2825,9 +2669,8 @@ gnutls_x509_crq_privkey_sign(gnutls_x509_crq_t crq, gnutls_privkey_t key, /* Step 3. Write the signatureAlgorithm field. */ result = - _gnutls_x509_write_sig_params(crq->crq, "signatureAlgorithm", - gnutls_privkey_get_pk_algorithm - (key, NULL), dig, 0); + _gnutls_x509_write_sign_params(crq->crq, "signatureAlgorithm", + se, ¶ms); if (result < 0) { gnutls_assert(); return result; @@ -2855,7 +2698,8 @@ int gnutls_x509_crq_verify(gnutls_x509_crq_t crq, unsigned int flags) gnutls_datum_t data = { NULL, 0 }; gnutls_datum_t signature = { NULL, 0 }; gnutls_pk_params_st params; - gnutls_digest_algorithm_t algo; + gnutls_x509_spki_st sign_params; + const gnutls_sign_entry_st *se; int ret; gnutls_pk_params_init(¶ms); @@ -2871,13 +2715,18 @@ int gnutls_x509_crq_verify(gnutls_x509_crq_t crq, unsigned int flags) ret = _gnutls_x509_get_signature_algorithm(crq->crq, - "signatureAlgorithm.algorithm"); + "signatureAlgorithm"); if (ret < 0) { gnutls_assert(); goto cleanup; } - algo = gnutls_sign_get_hash_algorithm(ret); + se = _gnutls_sign_to_entry(ret); + if (se == NULL) { + gnutls_assert(); + ret = GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM; + goto cleanup; + } ret = _gnutls_x509_get_signature(crq->crq, "signature", &signature); @@ -2892,10 +2741,17 @@ int gnutls_x509_crq_verify(gnutls_x509_crq_t crq, unsigned int flags) goto cleanup; } + ret = _gnutls_x509_read_sign_params(crq->crq, + "signatureAlgorithm", + &sign_params); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + ret = - pubkey_verify_data(gnutls_x509_crq_get_pk_algorithm(crq, NULL), - hash_to_entry(algo), &data, &signature, - ¶ms); + pubkey_verify_data(se, hash_to_entry(se->hash), &data, &signature, + ¶ms, &sign_params, flags); if (ret < 0) { gnutls_assert(); goto cleanup; @@ -3004,7 +2860,7 @@ int gnutls_x509_crq_get_tlsfeatures(gnutls_x509_crq_t crq, unsigned int *critical) { int ret; - gnutls_datum_t der; + gnutls_datum_t der = {NULL, 0}; if (crq == NULL) { gnutls_assert(); @@ -3120,3 +2976,124 @@ gnutls_x509_crq_set_extension_by_oid(gnutls_x509_crq_t crq, return 0; } + +/** + * gnutls_x509_crq_set_spki: + * @crq: a certificate request of type #gnutls_x509_crq_t + * @spki: a SubjectPublicKeyInfo structure of type #gnutls_x509_spki_t + * @flags: must be zero + * + * This function will set the certificate request's subject public key + * information explicitly. This is intended to be used in the cases + * where a single public key (e.g., RSA) can be used for multiple + * signature algorithms (RSA PKCS1-1.5, and RSA-PSS). + * + * To export the public key (i.e., the SubjectPublicKeyInfo part), check + * gnutls_pubkey_import_x509(). + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.0 + **/ +int +gnutls_x509_crq_set_spki(gnutls_x509_crq_t crq, + const gnutls_x509_spki_t spki, + unsigned int flags) +{ + int ret; + gnutls_pk_algorithm_t crq_pk; + gnutls_x509_spki_st tpki; + gnutls_pk_params_st params; + unsigned bits; + + if (crq == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + ret = _gnutls_x509_crq_get_mpis(crq, ¶ms); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + bits = pubkey_to_bits(¶ms); + crq_pk = params.algo; + + if (!_gnutls_pk_are_compat(crq_pk, spki->pk)) { + ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + goto cleanup; + } + + if (spki->pk != GNUTLS_PK_RSA_PSS) { + if (crq_pk == spki->pk) { + ret = 0; + goto cleanup; + } + + gnutls_assert(); + ret = GNUTLS_E_INVALID_REQUEST; + goto cleanup; + } + + memset(&tpki, 0, sizeof(gnutls_x509_spki_st)); + + if (crq_pk == GNUTLS_PK_RSA) { + const mac_entry_st *me; + + me = hash_to_entry(spki->rsa_pss_dig); + if (unlikely(me == NULL)) { + gnutls_assert(); + ret = GNUTLS_E_INVALID_REQUEST; + goto cleanup; + } + + tpki.pk = spki->pk; + tpki.rsa_pss_dig = spki->rsa_pss_dig; + + /* If salt size is zero, find the optimal salt size. */ + if (spki->salt_size == 0) { + ret = + _gnutls_find_rsa_pss_salt_size(bits, me, + spki->salt_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + tpki.salt_size = ret; + } else + tpki.salt_size = spki->salt_size; + } else if (crq_pk == GNUTLS_PK_RSA_PSS) { + ret = _gnutls_x509_crq_read_spki_params(crq, &tpki); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + tpki.salt_size = spki->salt_size; + tpki.rsa_pss_dig = spki->rsa_pss_dig; + } + + memcpy(¶ms.spki, &tpki, sizeof(tpki)); + ret = _gnutls_x509_check_pubkey_params(¶ms); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_x509_write_spki_params(crq->crq, + "certificationRequestInfo." + "subjectPKInfo." + "algorithm", + &tpki); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = 0; + cleanup: + gnutls_pk_params_release(¶ms); + return ret; +} diff --git a/lib/x509/dn.c b/lib/x509/dn.c index 04ae1825b2..33739e2271 100644 --- a/lib/x509/dn.c +++ b/lib/x509/dn.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -74,7 +74,7 @@ static int append_elements(ASN1_TYPE asn1_struct, const char *asn1_rdn_name, gnu goto cleanup; } - do { /* Move to the attibute type and values + do { /* Move to the attribute type and values */ k2++; @@ -286,6 +286,8 @@ _gnutls_x509_parse_dn(ASN1_TYPE asn1_struct, goto cleanup; } + assert(dn.data != NULL); + if (buf) { memcpy(buf, dn.data, dn.size); buf[dn.size] = 0; @@ -357,7 +359,7 @@ _gnutls_x509_parse_dn_oid(ASN1_TYPE asn1_struct, k2 = 0; - do { /* Move to the attibute type and values + do { /* Move to the attribute type and values */ k2++; @@ -517,7 +519,7 @@ _gnutls_x509_get_dn_oid(ASN1_TYPE asn1_struct, k2 = 0; - do { /* Move to the attibute type and values + do { /* Move to the attribute type and values */ k2++; @@ -980,14 +982,56 @@ int _gnutls_x509_compare_raw_dn(const gnutls_datum_t * dn1, const gnutls_datum_t * dn2) { + int ret; + gnutls_datum_t str1, str2; + + /* Simple case of completely identical? */ + + if (dn1->size == dn2->size) { + if (memcmp(dn1->data, dn2->data, dn2->size) == 0) { + return 1; + } + } - if (dn1->size != dn2->size) { + /* RFC5280 (https://tools.ietf.org/html/rfc5280#section-7.1) + * requires that the LDAP StringPrep profile and caseIgnoreMatch + * must be used for this comparison. We do not use that but + * instead we do a simpler comparison that ignores the tags used + * such as `UTF8String` and `PrintableString`. */ + + if ((dn1->size == 0) || (dn2->size == 0)) { + gnutls_assert(); + return 0; + } + + ret = gnutls_x509_rdn_get2(dn1, &str1, 0); + if (ret < 0) { gnutls_assert(); return 0; } - if (memcmp(dn1->data, dn2->data, dn2->size) != 0) { + + ret = gnutls_x509_rdn_get2(dn2, &str2, 0); + if (ret < 0) { gnutls_assert(); + _gnutls_free_datum(&str1); return 0; } - return 1; /* they match */ + + if (str1.size != str2.size) { + ret = 0; + goto cleanup; + } + if (memcmp(str1.data, str2.data, str2.size) != 0) { + gnutls_assert(); + ret = 0; + goto cleanup; + } + + ret = 1; /* they match */ + +cleanup: + _gnutls_free_datum(&str1); + _gnutls_free_datum(&str2); + + return ret; } diff --git a/lib/x509/email-verify.c b/lib/x509/email-verify.c index bb37db09e3..053e512872 100644 --- a/lib/x509/email-verify.c +++ b/lib/x509/email-verify.c @@ -15,7 +15,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -26,13 +26,6 @@ #include "errors.h" #include -static int has_embedded_null(const char *str, unsigned size) -{ - if (strlen(str) != size) - return 1; - return 0; -} - /** * gnutls_x509_crt_check_email: * @cert: should contain an gnutls_x509_crt_t type @@ -88,7 +81,7 @@ gnutls_x509_crt_check_email(gnutls_x509_crt_t cert, if (ret == GNUTLS_SAN_RFC822NAME) { found_rfc822name = 1; - if (has_embedded_null(rfc822name, rfc822namesize)) { + if (_gnutls_has_embedded_null(rfc822name, rfc822namesize)) { _gnutls_debug_log("certificate has %s with embedded null in rfc822name\n", rfc822name); continue; } @@ -130,7 +123,7 @@ gnutls_x509_crt_check_email(gnutls_x509_crt_t cert, goto cleanup; } - if (has_embedded_null(rfc822name, rfc822namesize)) { + if (_gnutls_has_embedded_null(rfc822name, rfc822namesize)) { _gnutls_debug_log("certificate has EMAIL %s with embedded null in name\n", rfc822name); ret = 0; goto cleanup; diff --git a/lib/x509/extensions.c b/lib/x509/extensions.c index 2a983db9ab..c9fef21a12 100644 --- a/lib/x509/extensions.c +++ b/lib/x509/extensions.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -62,7 +62,6 @@ _gnutls_get_extension(ASN1_TYPE asn, const char *root, result = asn1_read_value(asn, name2, extnID, &len); if (result == ASN1_ELEMENT_NOT_FOUND) { - gnutls_assert(); break; } else if (result != ASN1_SUCCESS) { gnutls_assert(); @@ -716,6 +715,9 @@ _gnutls_write_general_name(ASN1_TYPE ext, const char *ext_name, case GNUTLS_SAN_IPADDRESS: str = "iPAddress"; break; + case GNUTLS_SAN_REGISTERED_ID: + str = "registeredID"; + break; default: gnutls_assert(); return GNUTLS_E_INTERNAL_ERROR; diff --git a/lib/x509/hostname-verify.c b/lib/x509/hostname-verify.c index c043ff5bff..6ef8ba0303 100644 --- a/lib/x509/hostname-verify.c +++ b/lib/x509/hostname-verify.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -26,6 +26,8 @@ #include #include "errors.h" #include +#include +#include /** * gnutls_x509_crt_check_hostname: @@ -84,13 +86,6 @@ check_ip(gnutls_x509_crt_t cert, const void *ip, unsigned ip_size) return 0; } -static int has_embedded_null(const char *str, unsigned size) -{ - if (strlen(str) != size) - return 1; - return 0; -} - /** * gnutls_x509_crt_check_ip: * @cert: should contain an gnutls_x509_crt_t type @@ -170,7 +165,7 @@ gnutls_x509_crt_check_hostname2(gnutls_x509_crt_t cert, /* check whether @hostname is an ip address */ if (!(flags & GNUTLS_VERIFY_DO_NOT_ALLOW_IP_MATCHES) && - ((p=strchr(hostname, ':')) != NULL || inet_aton(hostname, &ipv4) != 0)) { + ((p=strchr(hostname, ':')) != NULL || inet_pton(AF_INET, hostname, &ipv4) != 0)) { if (p != NULL) { struct in6_addr ipv6; @@ -225,7 +220,7 @@ gnutls_x509_crt_check_hostname2(gnutls_x509_crt_t cert, if (ret == GNUTLS_SAN_DNSNAME) { found_dnsname = 1; - if (has_embedded_null(dnsname, dnsnamesize)) { + if (_gnutls_has_embedded_null(dnsname, dnsnamesize)) { _gnutls_debug_log("certificate has %s with embedded null in name\n", dnsname); continue; } @@ -273,7 +268,7 @@ gnutls_x509_crt_check_hostname2(gnutls_x509_crt_t cert, goto cleanup; } - if (has_embedded_null(dnsname, dnsnamesize)) { + if (_gnutls_has_embedded_null(dnsname, dnsnamesize)) { _gnutls_debug_log("certificate has CN %s with embedded null in name\n", dnsname); ret = 0; goto cleanup; diff --git a/lib/x509/ip-in-cidr.h b/lib/x509/ip-in-cidr.h index 7613de9c09..d5e26eb948 100644 --- a/lib/x509/ip-in-cidr.h +++ b/lib/x509/ip-in-cidr.h @@ -17,10 +17,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_X509_IP_IN_CIDR_H +#define GNUTLS_LIB_X509_IP_IN_CIDR_H + /*- * ip_in_cidr: * @ip: IP datum (IPv4 or IPv6) @@ -30,24 +33,26 @@ * The @ip version must match the @cidr version (v4/v6), * (this is not checked). * - * Returns: 1 if @ip lies withing @cidr, 0 otherwise + * Returns: 1 if @ip lies within @cidr, 0 otherwise -*/ static unsigned ip_in_cidr(const gnutls_datum_t *ip, const gnutls_datum_t *cidr) { + unsigned byte; +#ifndef BUILD_IN_TESTS char str_ip[48]; char str_cidr[97]; - unsigned byte; _gnutls_hard_log("matching %.*s with CIDR constraint %.*s\n", (int) sizeof(str_ip), _gnutls_ip_to_string(ip->data, ip->size, str_ip, sizeof(str_ip)), (int) sizeof(str_cidr), _gnutls_cidr_to_string(cidr->data, cidr->size, str_cidr, sizeof(str_cidr))); - - unsigned ipsize = ip->size; - for (byte = 0; byte < ipsize; byte++) - if (((ip->data[byte] ^ cidr->data[byte]) & cidr->data[ipsize+byte]) != 0) +#endif + for (byte = 0; byte < ip->size; byte++) + if (((ip->data[byte] ^ cidr->data[byte]) & cidr->data[ip->size+byte]) != 0) return 0; return 1; /* match */ } + +#endif /* GNUTLS_LIB_X509_IP_IN_CIDR_H */ diff --git a/lib/x509/ip.c b/lib/x509/ip.c index b4b31a4f94..c4cb008314 100644 --- a/lib/x509/ip.c +++ b/lib/x509/ip.c @@ -17,17 +17,14 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ #include "gnutls_int.h" #include "ip.h" #include - -#ifdef HAVE_INET_NTOP -# include -#endif +#include /*- * _gnutls_mask_to_prefix: diff --git a/lib/x509/ip.h b/lib/x509/ip.h index 8cd686107d..2c8569b889 100644 --- a/lib/x509/ip.h +++ b/lib/x509/ip.h @@ -17,12 +17,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef IP_H -#define IP_H +#ifndef GNUTLS_LIB_X509_IP_H +#define GNUTLS_LIB_X509_IP_H // for documentation, see the definition int _gnutls_mask_to_prefix(const unsigned char *mask, unsigned mask_size); @@ -36,4 +36,4 @@ const char *_gnutls_cidr_to_string(const void *_ip, unsigned int ip_size, char * // for documentation, see the definition int _gnutls_mask_ip(unsigned char *ip, const unsigned char *mask, unsigned ipsize); -#endif // IP_H +#endif /* GNUTLS_LIB_X509_IP_H */ diff --git a/lib/x509/key_decode.c b/lib/x509/key_decode.c index 1e5cc43c3a..c79f6eee37 100644 --- a/lib/x509/key_decode.c +++ b/lib/x509/key_decode.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. - * Copyright (C) 2013 Red Hat + * Copyright (C) 2013-2017 Red Hat * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -28,6 +28,7 @@ #include #include "common.h" #include "x509_int.h" +#include "pk.h" #include #include @@ -37,6 +38,11 @@ static int _gnutls_x509_read_dsa_pubkey(uint8_t * der, int dersize, gnutls_pk_params_st * params); static int _gnutls_x509_read_ecc_pubkey(uint8_t * der, int dersize, gnutls_pk_params_st * params); +static int _gnutls_x509_read_eddsa_pubkey(gnutls_ecc_curve_t curve, + uint8_t * der, int dersize, + gnutls_pk_params_st * params); +static int _gnutls_x509_read_gost_pubkey(uint8_t * der, int dersize, + gnutls_pk_params_st * params); static int _gnutls_x509_read_dsa_params(uint8_t * der, int dersize, @@ -104,11 +110,62 @@ _gnutls_x509_read_ecc_pubkey(uint8_t * der, int dersize, /* RFC5480 defines the public key to be an ECPoint (i.e. OCTET STRING), * Then it says that the OCTET STRING _value_ is converted to BIT STRING. * That means that the value we place there is the raw X9.62 one. */ - return _gnutls_ecc_ansi_x963_import(der, dersize, + return _gnutls_ecc_ansi_x962_import(der, dersize, ¶ms->params[ECC_X], ¶ms->params[ECC_Y]); } +int _gnutls_x509_read_eddsa_pubkey(gnutls_ecc_curve_t curve, + uint8_t * der, int dersize, + gnutls_pk_params_st * params) +{ + int size = gnutls_ecc_curve_get_size(curve); + if (dersize != size) + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + + return _gnutls_set_datum(¶ms->raw_pub, der, dersize); +} + +/* Pubkey is a concatenation of X (in little endian) and Y (also LE) + * encoded into OCTET STRING. */ +static int +_gnutls_x509_read_gost_pubkey(uint8_t * der, int dersize, + gnutls_pk_params_st * params) +{ + int ret; + int len; + bigint_t *x = ¶ms->params[GOST_X]; + bigint_t *y = ¶ms->params[GOST_Y]; + + /* Quick and dirty parsing of OCTET STRING of 0x40 or 0x80 bytes */ + if (dersize < 1 || der[0] != ASN1_TAG_OCTET_STRING) { + return gnutls_assert_val(GNUTLS_E_PARSING_ERROR); + } + + der++; + dersize--; + + ret = asn1_get_length_der(der, dersize, &len); + if (ret <= 0 || ret % 2 != 0 || dersize != len + ret) { + return gnutls_assert_val(GNUTLS_E_PARSING_ERROR); + } + + der += len; + dersize -= len; + + /* read data */ + ret = _gnutls_mpi_init_scan_le(x, der, dersize / 2); + if (ret < 0) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + ret = _gnutls_mpi_init_scan_le(y, der + dersize / 2, dersize / 2); + if (ret < 0) { + _gnutls_mpi_release(y); + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + } + + return 0; +} /* reads p,q and g * from the certificate (subjectPublicKey BIT STRING). @@ -136,9 +193,9 @@ _gnutls_x509_read_dsa_params(uint8_t * der, int dersize, return _gnutls_asn2err(result); } - /* FIXME: If the parameters are not included in the certificate + /* If the parameters are not included in the certificate * then the issuer's parameters should be used. This is not - * done yet. + * implemented, and is not used in practice (along with DSA). */ /* Read p */ @@ -234,6 +291,244 @@ _gnutls_x509_read_ecc_params(uint8_t * der, int dersize, } +/* Reads RSA-PSS parameters. + */ +int +_gnutls_x509_read_rsa_pss_params(uint8_t * der, int dersize, + gnutls_x509_spki_st * params) +{ + int result; + ASN1_TYPE spk = ASN1_TYPE_EMPTY; + ASN1_TYPE c2 = ASN1_TYPE_EMPTY; + gnutls_digest_algorithm_t digest; + char oid[MAX_OID_SIZE] = ""; + int size; + unsigned int trailer; + gnutls_datum_t value = { NULL, 0 }; + + if ((result = asn1_create_element + (_gnutls_get_gnutls_asn(), "GNUTLS.RSAPSSParameters", &spk)) + != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + result = _asn1_strict_der_decode(&spk, der, dersize, NULL); + + if (result != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + size = sizeof(oid); + result = asn1_read_value(spk, "hashAlgorithm.algorithm", oid, &size); + if (result == ASN1_SUCCESS) + digest = gnutls_oid_to_digest(oid); + else if (result == ASN1_ELEMENT_NOT_FOUND) + /* The default hash algorithm is SHA-1 */ + digest = GNUTLS_DIG_SHA1; + else { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + if (digest == GNUTLS_DIG_UNKNOWN) { + gnutls_assert(); + _gnutls_debug_log("Unknown RSA-PSS hash: %s\n", oid); + result = GNUTLS_E_UNKNOWN_HASH_ALGORITHM; + goto cleanup; + } + + size = sizeof(oid); + result = asn1_read_value(spk, "maskGenAlgorithm.algorithm", oid, &size); + if (result == ASN1_SUCCESS) { + gnutls_digest_algorithm_t digest2; + + /* Error out if algorithm other than mgf1 is specified */ + if (strcmp(oid, PKIX1_RSA_PSS_MGF1_OID) != 0) { + gnutls_assert(); + _gnutls_debug_log("Unknown mask algorithm: %s\n", oid); + result = GNUTLS_E_UNKNOWN_ALGORITHM; + goto cleanup; + } + + /* Check if maskGenAlgorithm.parameters does exist and + * is identical to hashAlgorithm */ + result = _gnutls_x509_read_value(spk, "maskGenAlgorithm.parameters", &value); + if (result < 0) { + gnutls_assert(); + goto cleanup; + } + + if ((result = asn1_create_element + (_gnutls_get_pkix(), "PKIX1.AlgorithmIdentifier", &c2)) + != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + result = _asn1_strict_der_decode(&c2, value.data, value.size, NULL); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + size = sizeof(oid); + result = asn1_read_value(c2, "algorithm", oid, &size); + if (result == ASN1_SUCCESS) + digest2 = gnutls_oid_to_digest(oid); + else if (result == ASN1_ELEMENT_NOT_FOUND) + /* The default hash algorithm for mgf1 is SHA-1 */ + digest2 = GNUTLS_DIG_SHA1; + else { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + if (digest != digest2) { + gnutls_assert(); + result = GNUTLS_E_CONSTRAINT_ERROR; + goto cleanup; + } + } else if (result != ASN1_ELEMENT_NOT_FOUND) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + memset(params, 0, sizeof(gnutls_x509_spki_st)); + params->pk = GNUTLS_PK_RSA_PSS; + params->rsa_pss_dig = digest; + + result = _gnutls_x509_read_uint(spk, "saltLength", ¶ms->salt_size); + if (result == GNUTLS_E_ASN1_ELEMENT_NOT_FOUND || + result == GNUTLS_E_ASN1_VALUE_NOT_FOUND) + params->salt_size = 20; + else if (result < 0) { + gnutls_assert(); + goto cleanup; + } + + result = _gnutls_x509_read_uint(spk, "trailerField", &trailer); + if (result == GNUTLS_E_ASN1_VALUE_NOT_FOUND || + result == GNUTLS_E_ASN1_ELEMENT_NOT_FOUND) + trailer = 1; + else if (result < 0) { + gnutls_assert(); + goto cleanup; + } + if (trailer != 1) { + gnutls_assert(); + result = GNUTLS_E_CERTIFICATE_ERROR; + goto cleanup; + } + + result = 0; + cleanup: + _gnutls_free_datum(&value); + asn1_delete_structure(&c2); + asn1_delete_structure(&spk); + return result; +} + +/* reads the curve from the certificate. + * It does NOT set params_nr. + */ +int +_gnutls_x509_read_gost_params(uint8_t * der, int dersize, + gnutls_pk_params_st * params, + gnutls_pk_algorithm_t algo) +{ + int ret; + ASN1_TYPE spk = ASN1_TYPE_EMPTY; + char oid[MAX_OID_SIZE]; + int oid_size; + gnutls_ecc_curve_t curve; + gnutls_gost_paramset_t param; + + if ((ret = asn1_create_element(_gnutls_get_gnutls_asn(), + algo == GNUTLS_PK_GOST_01 ? + "GNUTLS.GOSTParametersOld" : + "GNUTLS.GOSTParameters", + &spk)) != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(ret); + } + + ret = _asn1_strict_der_decode(&spk, der, dersize, NULL); + + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } + + /* read the curve */ + oid_size = sizeof(oid); + ret = asn1_read_value(spk, "publicKeyParamSet", oid, &oid_size); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } + + curve = gnutls_oid_to_ecc_curve(oid); + if (curve == GNUTLS_ECC_CURVE_INVALID) { + _gnutls_debug_log("Curve %s is not supported\n", oid); + gnutls_assert(); + ret = GNUTLS_E_ECC_UNSUPPORTED_CURVE; + goto cleanup; + } + + /* Read the digest */ + oid_size = sizeof(oid); + ret = asn1_read_value(spk, "digestParamSet", oid, &oid_size); + if (ret != ASN1_SUCCESS && + ret != ASN1_ELEMENT_NOT_FOUND) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } + /* For now ignore the OID: we use pk OID instead */ + + oid_size = sizeof(oid); + ret = asn1_read_value(spk, "encryptionParamSet", oid, &oid_size); + if (ret != ASN1_SUCCESS && + ret != ASN1_ELEMENT_NOT_FOUND) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } + + if (ret != ASN1_ELEMENT_NOT_FOUND) + param = gnutls_oid_to_gost_paramset(oid); + else + param = _gnutls_gost_paramset_default(algo); + + if (param == GNUTLS_GOST_PARAMSET_UNKNOWN) { + gnutls_assert(); + ret = param; + goto cleanup; + } + + params->curve = curve; + params->gost_params = param; + ret = 0; + + cleanup: + + asn1_delete_structure(&spk); + + return ret; + +} + /* This function must be called after _gnutls_x509_read_params() */ int _gnutls_x509_read_pubkey(gnutls_pk_algorithm_t algo, uint8_t * der, @@ -243,9 +538,10 @@ int _gnutls_x509_read_pubkey(gnutls_pk_algorithm_t algo, uint8_t * der, switch (algo) { case GNUTLS_PK_RSA: + case GNUTLS_PK_RSA_PSS: ret = _gnutls_x509_read_rsa_pubkey(der, dersize, params); if (ret >= 0) { - params->algo = GNUTLS_PK_RSA; + params->algo = algo; params->params_nr = RSA_PUBLIC_PARAMS; } break; @@ -259,13 +555,28 @@ int _gnutls_x509_read_pubkey(gnutls_pk_algorithm_t algo, uint8_t * der, params->params_nr = DSA_PUBLIC_PARAMS; } break; - case GNUTLS_PK_EC: + case GNUTLS_PK_ECDSA: ret = _gnutls_x509_read_ecc_pubkey(der, dersize, params); if (ret >= 0) { params->algo = GNUTLS_PK_ECDSA; params->params_nr = ECC_PUBLIC_PARAMS; } break; + case GNUTLS_PK_EDDSA_ED25519: + ret = _gnutls_x509_read_eddsa_pubkey(GNUTLS_ECC_CURVE_ED25519, der, dersize, params); + break; + case GNUTLS_PK_EDDSA_ED448: + ret = _gnutls_x509_read_eddsa_pubkey(GNUTLS_ECC_CURVE_ED448, der, dersize, params); + break; + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + ret = _gnutls_x509_read_gost_pubkey(der, dersize, params); + if (ret >= 0) { + params->algo = algo; + params->params_nr = GOST_PUBLIC_PARAMS; + } + break; default: ret = gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); break; @@ -281,11 +592,57 @@ int _gnutls_x509_read_pubkey_params(gnutls_pk_algorithm_t algo, { switch (algo) { case GNUTLS_PK_RSA: + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: return 0; + case GNUTLS_PK_RSA_PSS: + return _gnutls_x509_read_rsa_pss_params(der, dersize, ¶ms->spki); case GNUTLS_PK_DSA: return _gnutls_x509_read_dsa_params(der, dersize, params); case GNUTLS_PK_EC: - return _gnutls_x509_read_ecc_params(der, dersize, ¶ms->flags); + return _gnutls_x509_read_ecc_params(der, dersize, ¶ms->curve); + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + return _gnutls_x509_read_gost_params(der, dersize, params, algo); + default: + return gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); + } +} + +/* This function must be called after _gnutls_x509_read_pubkey() + */ +int _gnutls_x509_check_pubkey_params(gnutls_pk_params_st * params) +{ + switch (params->algo) { + case GNUTLS_PK_RSA_PSS: { + unsigned bits; + const mac_entry_st *me; + size_t hash_size; + + if (params->spki.pk == GNUTLS_PK_UNKNOWN) /* no params present */ + return 0; + + bits = pubkey_to_bits(params); + + me = hash_to_entry(params->spki.rsa_pss_dig); + if (unlikely(me == NULL)) + return gnutls_assert_val(GNUTLS_E_PK_INVALID_PUBKEY_PARAMS); + + hash_size = _gnutls_hash_get_algo_len(me); + if (hash_size + params->spki.salt_size + 2 > (bits + 7) / 8) + return gnutls_assert_val(GNUTLS_E_PK_INVALID_PUBKEY_PARAMS); + return 0; + } + case GNUTLS_PK_RSA: + case GNUTLS_PK_DSA: + case GNUTLS_PK_ECDSA: + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + return 0; default: return gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); } diff --git a/lib/x509/key_encode.c b/lib/x509/key_encode.c index 3277ca2476..18668c8ad2 100644 --- a/lib/x509/key_encode.c +++ b/lib/x509/key_encode.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. - * Copyright (C) 2013 Red Hat + * Copyright (C) 2013-2017 Red Hat * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -33,11 +33,15 @@ #include #include -static int _gnutls_x509_write_rsa_pubkey(gnutls_pk_params_st * params, +static int _gnutls_x509_write_rsa_pubkey(const gnutls_pk_params_st * params, gnutls_datum_t * der); -static int _gnutls_x509_write_dsa_params(gnutls_pk_params_st * params, +static int _gnutls_x509_write_dsa_params(const gnutls_pk_params_st * params, gnutls_datum_t * der); -static int _gnutls_x509_write_dsa_pubkey(gnutls_pk_params_st * params, +static int _gnutls_x509_write_dsa_pubkey(const gnutls_pk_params_st * params, + gnutls_datum_t * der); +static int _gnutls_x509_write_gost_params(const gnutls_pk_params_st * params, + gnutls_datum_t * der); +static int _gnutls_x509_write_gost_pubkey(const gnutls_pk_params_st * params, gnutls_datum_t * der); /* @@ -48,7 +52,7 @@ static int _gnutls_x509_write_dsa_pubkey(gnutls_pk_params_st * params, * Allocates the space used to store the DER data. */ static int -_gnutls_x509_write_rsa_pubkey(gnutls_pk_params_st * params, +_gnutls_x509_write_rsa_pubkey(const gnutls_pk_params_st * params, gnutls_datum_t * der) { int result; @@ -106,7 +110,7 @@ _gnutls_x509_write_rsa_pubkey(gnutls_pk_params_st * params, * Allocates the space used to store the DER data. */ int -_gnutls_x509_write_ecc_pubkey(gnutls_pk_params_st * params, +_gnutls_x509_write_ecc_pubkey(const gnutls_pk_params_st * params, gnutls_datum_t * der) { int result; @@ -118,7 +122,7 @@ _gnutls_x509_write_ecc_pubkey(gnutls_pk_params_st * params, return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); result = - _gnutls_ecc_ansi_x963_export(params->flags, + _gnutls_ecc_ansi_x962_export(params->curve, params->params[ECC_X], params->params[ECC_Y], /*&out */ der); @@ -128,12 +132,112 @@ _gnutls_x509_write_ecc_pubkey(gnutls_pk_params_st * params, return 0; } +/* + * some x509 certificate functions that relate to MPI parameter + * setting. This writes a raw public key. + * + * Allocates the space used to store the data. + */ +int +_gnutls_x509_write_eddsa_pubkey(const gnutls_pk_params_st * params, + gnutls_datum_t * raw) +{ + int ret; + + raw->data = NULL; + raw->size = 0; + + if (params->raw_pub.size == 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (params->curve != GNUTLS_ECC_CURVE_ED25519 && + params->curve != GNUTLS_ECC_CURVE_ED448) + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + + ret = _gnutls_set_datum(raw, params->raw_pub.data, params->raw_pub.size); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} + int -_gnutls_x509_write_pubkey_params(gnutls_pk_algorithm_t algo, - gnutls_pk_params_st * params, +_gnutls_x509_write_gost_pubkey(const gnutls_pk_params_st * params, + gnutls_datum_t * der) +{ + bigint_t x, y; + int numlen; + int byte_size, ret; + size_t size; + int pos; + + der->data = NULL; + der->size = 0; + + if (params->params_nr < GOST_PUBLIC_PARAMS) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + x = params->params[GOST_X]; + y = params->params[GOST_Y]; + numlen = gnutls_ecc_curve_get_size(params->curve); + + if (numlen == 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + der->size = 1 + ASN1_MAX_LENGTH_SIZE + 2 * numlen; + + der->data = gnutls_malloc(der->size); + if (der->data == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + memset(der->data, 0, der->size); + + der->data[0] = ASN1_TAG_OCTET_STRING; + asn1_length_der(2 * numlen, &der->data[1], &pos); + pos += 1; + + /* pad and store x */ + byte_size = (_gnutls_mpi_get_nbits(x) + 7) / 8; + if (numlen < byte_size) { + ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + goto cleanup; + } + + size = numlen; + ret = _gnutls_mpi_print_le(x, &der->data[pos], &size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + /* pad and store y */ + byte_size = (_gnutls_mpi_get_nbits(y) + 7) / 8; + if (numlen < byte_size) { + ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + goto cleanup; + } + + size = numlen; + ret = _gnutls_mpi_print_le(y, &der->data[pos + numlen], &size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + der->size = pos + 2 * numlen; + + return 0; + + cleanup: + _gnutls_free_datum(der); + return ret; +} + +int +_gnutls_x509_write_pubkey_params(const gnutls_pk_params_st * params, gnutls_datum_t * der) { - switch (algo) { + switch (params->algo) { case GNUTLS_PK_DSA: return _gnutls_x509_write_dsa_params(params, der); case GNUTLS_PK_RSA: @@ -144,25 +248,44 @@ _gnutls_x509_write_pubkey_params(gnutls_pk_algorithm_t algo, memcpy(der->data, ASN1_NULL, ASN1_NULL_SIZE); der->size = ASN1_NULL_SIZE; return 0; - case GNUTLS_PK_EC: - return _gnutls_x509_write_ecc_params(params->flags, der); + case GNUTLS_PK_RSA_PSS: + return _gnutls_x509_write_rsa_pss_params(¶ms->spki, der); + case GNUTLS_PK_ECDSA: + return _gnutls_x509_write_ecc_params(params->curve, der); + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: + der->data = NULL; + der->size = 0; + + return 0; + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + return _gnutls_x509_write_gost_params(params, der); default: return gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); } } int -_gnutls_x509_write_pubkey(gnutls_pk_algorithm_t algo, - gnutls_pk_params_st * params, +_gnutls_x509_write_pubkey(const gnutls_pk_params_st * params, gnutls_datum_t * der) { - switch (algo) { + switch (params->algo) { case GNUTLS_PK_DSA: return _gnutls_x509_write_dsa_pubkey(params, der); case GNUTLS_PK_RSA: + case GNUTLS_PK_RSA_PSS: return _gnutls_x509_write_rsa_pubkey(params, der); - case GNUTLS_PK_EC: + case GNUTLS_PK_ECDSA: return _gnutls_x509_write_ecc_pubkey(params, der); + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: + return _gnutls_x509_write_eddsa_pubkey(params, der); + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + return _gnutls_x509_write_gost_pubkey(params, der); default: return gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); } @@ -175,7 +298,7 @@ _gnutls_x509_write_pubkey(gnutls_pk_algorithm_t algo, * Allocates the space used to store the DER data. */ static int -_gnutls_x509_write_dsa_params(gnutls_pk_params_st * params, +_gnutls_x509_write_dsa_params(const gnutls_pk_params_st * params, gnutls_datum_t * der) { int result; @@ -235,7 +358,7 @@ _gnutls_x509_write_dsa_params(gnutls_pk_params_st * params, * Allocates the space used to store the DER data. */ int -_gnutls_x509_write_ecc_params(gnutls_ecc_curve_t curve, +_gnutls_x509_write_ecc_params(const gnutls_ecc_curve_t curve, gnutls_datum_t * der) { int result; @@ -285,6 +408,216 @@ _gnutls_x509_write_ecc_params(gnutls_ecc_curve_t curve, return result; } +int +_gnutls_x509_write_rsa_pss_params(const gnutls_x509_spki_st *params, + gnutls_datum_t *der) +{ + int result; + ASN1_TYPE spk = ASN1_TYPE_EMPTY; + ASN1_TYPE c2 = ASN1_TYPE_EMPTY; + const char *oid; + gnutls_datum_t tmp = { NULL, 0 }; + + der->data = NULL; + der->size = 0; + + if (params->pk != GNUTLS_PK_RSA_PSS) + return 0; + + /* refuse to write parameters we cannot read */ + if (gnutls_pk_to_sign(GNUTLS_PK_RSA_PSS, params->rsa_pss_dig) == GNUTLS_SIGN_UNKNOWN) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if ((result = asn1_create_element + (_gnutls_get_gnutls_asn(), "GNUTLS.RSAPSSParameters", &spk)) + != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + oid = gnutls_digest_get_oid(params->rsa_pss_dig); + + if ((result = asn1_write_value(spk, "hashAlgorithm.algorithm", oid, 1)) + != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + if ((result = asn1_write_value(spk, "hashAlgorithm.parameters", NULL, 0)) + != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + if ((result = + asn1_write_value(spk, "maskGenAlgorithm.algorithm", + PKIX1_RSA_PSS_MGF1_OID, 1)) + != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + if ((result = asn1_create_element + (_gnutls_get_pkix(), "PKIX1.AlgorithmIdentifier", &c2)) + != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + if ((result = asn1_write_value(c2, "algorithm", oid, 1)) + != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + if ((result = asn1_write_value(c2, "parameters", NULL, 0)) + != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + result = _gnutls_x509_der_encode(c2, "", &tmp, 0); + if (result < 0) { + gnutls_assert(); + goto cleanup; + } + + if ((result = + asn1_write_value(spk, "maskGenAlgorithm.parameters", + tmp.data, tmp.size)) + != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + result = _gnutls_x509_write_uint32(spk, "saltLength", + params->salt_size); + if (result < 0) { + gnutls_assert(); + goto cleanup; + } + + result = _gnutls_x509_write_uint32(spk, "trailerField", 1); + if (result < 0) { + gnutls_assert(); + goto cleanup; + } + + result = _gnutls_x509_der_encode(spk, "", der, 0); + if (result < 0) { + gnutls_assert(); + goto cleanup; + } + + result = 0; + + cleanup: + _gnutls_free_datum(&tmp); + asn1_delete_structure(&c2); + asn1_delete_structure(&spk); + return result; +} + +static int +_gnutls_x509_write_gost_params(const gnutls_pk_params_st * params, + gnutls_datum_t * der) +{ + int result; + ASN1_TYPE spk = ASN1_TYPE_EMPTY; + const char *oid; + + der->data = NULL; + der->size = 0; + + oid = gnutls_ecc_curve_get_oid(params->curve); + if (oid == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + + if ((result = asn1_create_element + (_gnutls_get_gnutls_asn(), + params->algo == GNUTLS_PK_GOST_01 ? + "GNUTLS.GOSTParametersOld" : + "GNUTLS.GOSTParameters", &spk)) + != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + if ((result = + asn1_write_value(spk, "publicKeyParamSet", oid, + 1)) != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + /* For compatibility per R 1323565.1.023—2018 provide digest OID only + * for GOST-2001 keys or GOST-2012 keys with CryptoPro curves. Do not + * set this optional paramter for TC26 curves */ + if (params->algo == GNUTLS_PK_GOST_01) + oid = HASH_OID_GOST_R_3411_94_CRYPTOPRO_PARAMS; + else if (params->algo == GNUTLS_PK_GOST_12_256 && + (params->curve == GNUTLS_ECC_CURVE_GOST256CPA || + params->curve == GNUTLS_ECC_CURVE_GOST256CPB || + params->curve == GNUTLS_ECC_CURVE_GOST256CPC || + params->curve == GNUTLS_ECC_CURVE_GOST256CPXA || + params->curve == GNUTLS_ECC_CURVE_GOST256CPXB)) + oid = HASH_OID_STREEBOG_256; + else if (params->algo == GNUTLS_PK_GOST_12_512 && + (params->curve == GNUTLS_ECC_CURVE_GOST512A || + params->curve == GNUTLS_ECC_CURVE_GOST512B)) + oid = HASH_OID_STREEBOG_512; + else + oid = NULL; + + if ((result = asn1_write_value(spk, "digestParamSet", oid, oid ? 1 : 0)) != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + + oid = gnutls_gost_paramset_get_oid(params->gost_params); + if (oid == NULL) { + gnutls_assert(); + result = GNUTLS_E_INVALID_REQUEST; + goto cleanup; + } + + if (params->algo == GNUTLS_PK_GOST_01) { + if (params->gost_params == _gnutls_gost_paramset_default(params->algo)) + oid = NULL; + + if ((result = + asn1_write_value(spk, "encryptionParamSet", oid, + oid ? 1 : 0)) != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto cleanup; + } + } + + result = _gnutls_x509_der_encode(spk, "", der, 0); + if (result < 0) { + gnutls_assert(); + goto cleanup; + } + + result = 0; + + cleanup: + asn1_delete_structure(&spk); + return result; +} + /* * This function writes the public parameters for DSS keys. * Needs 1 parameter (y). @@ -292,7 +625,7 @@ _gnutls_x509_write_ecc_params(gnutls_ecc_curve_t curve, * Allocates the space used to store the DER data. */ static int -_gnutls_x509_write_dsa_pubkey(gnutls_pk_params_st * params, +_gnutls_x509_write_dsa_pubkey(const gnutls_pk_params_st * params, gnutls_datum_t * der) { int result; @@ -336,7 +669,7 @@ _gnutls_x509_write_dsa_pubkey(gnutls_pk_params_st * params, /* Encodes the RSA parameters into an ASN.1 RSA private key structure. */ static int -_gnutls_asn1_encode_rsa(ASN1_TYPE * c2, gnutls_pk_params_st * params, unsigned compat) +_gnutls_asn1_encode_rsa(ASN1_TYPE * c2, gnutls_pk_params_st * params) { int result, ret; uint8_t null = '\0'; @@ -376,7 +709,7 @@ _gnutls_asn1_encode_rsa(ASN1_TYPE * c2, gnutls_pk_params_st * params, unsigned c goto cleanup; } - /* Write PRIME + /* Write PRIME */ ret = _gnutls_x509_write_int(*c2, "modulus", @@ -442,34 +775,11 @@ _gnutls_asn1_encode_rsa(ASN1_TYPE * c2, gnutls_pk_params_st * params, unsigned c goto cleanup; } - if (compat == 0 && (params->flags & GNUTLS_PK_FLAG_PROVABLE) && params->seed_size > 0) { - if ((result = asn1_write_value(*c2, "otherInfo", - "seed", 1)) != ASN1_SUCCESS) { - gnutls_assert(); - ret = _gnutls_asn2err(result); - goto cleanup; - } - - if ((result = asn1_write_value(*c2, "otherInfo.seed.seed", - params->seed, params->seed_size)) != ASN1_SUCCESS) { - gnutls_assert(); - ret = _gnutls_asn2err(result); - goto cleanup; - } - - if ((result = asn1_write_value(*c2, "otherInfo.seed.algorithm", - gnutls_digest_get_oid(params->palgo), 1)) != ASN1_SUCCESS) { - gnutls_assert(); - ret = _gnutls_asn2err(result); - goto cleanup; - } - } else { - if ((result = asn1_write_value(*c2, "otherInfo", - NULL, 0)) != ASN1_SUCCESS) { - gnutls_assert(); - ret = _gnutls_asn2err(result); - goto cleanup; - } + if ((result = asn1_write_value(*c2, "otherPrimeInfos", + NULL, 0)) != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(result); + goto cleanup; } if ((result = @@ -500,21 +810,10 @@ _gnutls_asn1_encode_ecc(ASN1_TYPE * c2, gnutls_pk_params_st * params) gnutls_datum_t pubkey = { NULL, 0 }; const char *oid; - oid = gnutls_ecc_curve_get_oid(params->flags); - - if (params->params_nr != ECC_PRIVATE_PARAMS || oid == NULL) + oid = gnutls_ecc_curve_get_oid(params->curve); + if (oid == NULL) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); - ret = - _gnutls_ecc_ansi_x963_export(params->flags, - params->params[ECC_X], - params->params[ECC_Y], &pubkey); - if (ret < 0) - return gnutls_assert_val(ret); - - /* Ok. Now we have the data. Create the asn1 structures - */ - /* first make sure that no previously allocated data are leaked */ if (*c2 != ASN1_TYPE_EMPTY) { asn1_delete_structure(c2); @@ -536,20 +835,50 @@ _gnutls_asn1_encode_ecc(ASN1_TYPE * c2, gnutls_pk_params_st * params) goto cleanup; } - ret = - _gnutls_x509_write_key_int(*c2, "privateKey", - params->params[ECC_K], 1); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } + if (curve_is_eddsa(params->curve)) { + if (params->raw_pub.size == 0 || params->raw_priv.size == 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + ret = + asn1_write_value(*c2, "privateKey", params->raw_priv.data, params->raw_priv.size); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } - if ((ret = - asn1_write_value(*c2, "publicKey", pubkey.data, - pubkey.size * 8)) != ASN1_SUCCESS) { - gnutls_assert(); - ret = _gnutls_asn2err(ret); - goto cleanup; + ret = + asn1_write_value(*c2, "publicKey", params->raw_pub.data, params->raw_pub.size*8); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } + } else { + if (params->params_nr != ECC_PRIVATE_PARAMS) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ret = + _gnutls_ecc_ansi_x962_export(params->curve, + params->params[ECC_X], + params->params[ECC_Y], &pubkey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = + _gnutls_x509_write_key_int(*c2, "privateKey", + params->params[ECC_K], 1); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if ((ret = + asn1_write_value(*c2, "publicKey", pubkey.data, + pubkey.size * 8)) != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } } /* write our choice */ @@ -579,11 +908,51 @@ _gnutls_asn1_encode_ecc(ASN1_TYPE * c2, gnutls_pk_params_st * params) return ret; } +static int +_gnutls_asn1_encode_gost(ASN1_TYPE * c2, gnutls_pk_params_st * params) +{ + int ret; + const char *oid; + + oid = gnutls_pk_get_oid(params->algo); + + if (params->params_nr != GOST_PRIVATE_PARAMS || oid == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + /* first make sure that no previously allocated data are leaked */ + if (*c2 != ASN1_TYPE_EMPTY) { + asn1_delete_structure(c2); + *c2 = ASN1_TYPE_EMPTY; + } + + if ((ret = asn1_create_element + (_gnutls_get_gnutls_asn(), "GNUTLS.GOSTPrivateKey", c2)) + != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto cleanup; + } + + ret = + _gnutls_x509_write_key_int_le(*c2, "", params->params[GOST_K]); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + + return 0; + +cleanup: + asn1_delete_structure2(c2, ASN1_DELETE_FLAG_ZEROIZE); + + return ret; +} /* Encodes the DSA parameters into an ASN.1 DSAPrivateKey structure. */ static int -_gnutls_asn1_encode_dsa(ASN1_TYPE * c2, gnutls_pk_params_st * params, unsigned compat) +_gnutls_asn1_encode_dsa(ASN1_TYPE * c2, gnutls_pk_params_st * params) { int result, ret; const uint8_t null = '\0'; @@ -601,7 +970,7 @@ _gnutls_asn1_encode_dsa(ASN1_TYPE * c2, gnutls_pk_params_st * params, unsigned c return _gnutls_asn2err(result); } - /* Write PRIME + /* Write PRIME */ ret = _gnutls_x509_write_int(*c2, "p", @@ -643,24 +1012,6 @@ _gnutls_asn1_encode_dsa(ASN1_TYPE * c2, gnutls_pk_params_st * params, unsigned c goto cleanup; } - if (params->seed_size > 0 && compat == 0) { - if ((result = asn1_write_value(*c2, "seed.seed", - params->seed, params->seed_size)) != ASN1_SUCCESS) { - gnutls_assert(); - ret = _gnutls_asn2err(result); - goto cleanup; - } - - if ((result = asn1_write_value(*c2, "seed.algorithm", - gnutls_digest_get_oid(params->palgo), 1)) != ASN1_SUCCESS) { - gnutls_assert(); - ret = _gnutls_asn2err(result); - goto cleanup; - } - } else { - (void)asn1_write_value(*c2, "seed", NULL, 0); - } - if ((result = asn1_write_value(*c2, "version", &null, 1)) != ASN1_SUCCESS) { gnutls_assert(); @@ -676,16 +1027,23 @@ _gnutls_asn1_encode_dsa(ASN1_TYPE * c2, gnutls_pk_params_st * params, unsigned c return ret; } -int _gnutls_asn1_encode_privkey(gnutls_pk_algorithm_t pk, ASN1_TYPE * c2, - gnutls_pk_params_st * params, unsigned compat) +int _gnutls_asn1_encode_privkey(ASN1_TYPE * c2, + gnutls_pk_params_st * params) { - switch (pk) { + switch (params->algo) { case GNUTLS_PK_RSA: - return _gnutls_asn1_encode_rsa(c2, params, compat); + case GNUTLS_PK_RSA_PSS: + return _gnutls_asn1_encode_rsa(c2, params); case GNUTLS_PK_DSA: - return _gnutls_asn1_encode_dsa(c2, params, compat); - case GNUTLS_PK_EC: + return _gnutls_asn1_encode_dsa(c2, params); + case GNUTLS_PK_ECDSA: + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: return _gnutls_asn1_encode_ecc(c2, params); + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + return _gnutls_asn1_encode_gost(c2, params); default: return GNUTLS_E_UNIMPLEMENTED_FEATURE; } diff --git a/lib/x509/krb5.c b/lib/x509/krb5.c index dc8351f6fe..7fe84e651d 100644 --- a/lib/x509/krb5.c +++ b/lib/x509/krb5.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include diff --git a/lib/x509/krb5.h b/lib/x509/krb5.h index 58fb9ff4c2..d8926af67a 100644 --- a/lib/x509/krb5.h +++ b/lib/x509/krb5.h @@ -15,8 +15,13 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ +#ifndef GNUTLS_LIB_X509_KRB5_H +#define GNUTLS_LIB_X509_KRB5_H + int _gnutls_krb5_principal_to_der(const char *name, gnutls_datum_t * der); int _gnutls_krb5_der_to_principal(const gnutls_datum_t * der, gnutls_datum_t *name); + +#endif /* GNUTLS_LIB_X509_KRB5_H */ diff --git a/lib/x509/mpi.c b/lib/x509/mpi.c index 2bb3e54aaa..a0bdfab9f7 100644 --- a/lib/x509/mpi.c +++ b/lib/x509/mpi.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2003-2012 Free Software Foundation, Inc. + * Copyright (C) 2015-2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -114,28 +115,34 @@ _gnutls_get_asn_mpis(ASN1_TYPE asn, const char *root, char name[256]; gnutls_datum_t tmp = { NULL, 0 }; gnutls_pk_algorithm_t pk_algorithm; + gnutls_ecc_curve_t curve; gnutls_pk_params_init(params); - result = _gnutls_x509_get_pk_algorithm(asn, root, NULL); + result = _gnutls_x509_get_pk_algorithm(asn, root, &curve, NULL); if (result < 0) { gnutls_assert(); return result; } pk_algorithm = result; + params->curve = curve; + params->algo = pk_algorithm; /* Read the algorithm's parameters */ _asnstr_append_name(name, sizeof(name), root, ".algorithm.parameters"); - /* FIXME: If the parameters are not included in the certificate - * then the issuer's parameters should be used. This is not - * done yet. - */ - if (pk_algorithm != GNUTLS_PK_RSA) { /* RSA doesn't use parameters */ + if (pk_algorithm != GNUTLS_PK_RSA && + pk_algorithm != GNUTLS_PK_EDDSA_ED25519 && pk_algorithm != GNUTLS_PK_ECDH_X25519 && + pk_algorithm != GNUTLS_PK_EDDSA_ED448 && pk_algorithm != GNUTLS_PK_ECDH_X448) { + /* RSA and EdDSA do not use parameters */ result = _gnutls_x509_read_value(asn, name, &tmp); + if (pk_algorithm == GNUTLS_PK_RSA_PSS && + (result == GNUTLS_E_ASN1_VALUE_NOT_FOUND || result == GNUTLS_E_ASN1_ELEMENT_NOT_FOUND)) { + goto skip_params; + } if (result < 0) { gnutls_assert(); goto error; @@ -153,6 +160,7 @@ _gnutls_get_asn_mpis(ASN1_TYPE asn, const char *root, _gnutls_free_datum(&tmp); } + skip_params: /* Now read the public key */ _asnstr_append_name(name, sizeof(name), root, ".subjectPublicKey"); @@ -169,6 +177,12 @@ _gnutls_get_asn_mpis(ASN1_TYPE asn, const char *root, goto error; } + result = _gnutls_x509_check_pubkey_params(params); + if (result < 0) { + gnutls_assert(); + goto error; + } + result = 0; error: @@ -205,36 +219,77 @@ _gnutls_x509_crq_get_mpis(gnutls_x509_crq_t cert, } /* - * This function writes and encodes the parameters for DSS or RSA keys. + * This function reads and decodes the parameters for DSS or RSA keys. * This is the "signatureAlgorithm" fields. - * - * If @legacy is non-zero then the legacy value for PKCS#7 signatures - * will be written for RSA signatures. */ int -_gnutls_x509_write_sig_params(ASN1_TYPE dst, const char *dst_name, - gnutls_pk_algorithm_t pk_algorithm, - gnutls_digest_algorithm_t dig, unsigned legacy) +_gnutls_x509_read_pkalgo_params(ASN1_TYPE src, const char *src_name, + gnutls_x509_spki_st *spki, unsigned is_sig) { int result; char name[128]; - const char *oid; + char oid[MAX_OID_SIZE]; + int oid_size; - _gnutls_str_cpy(name, sizeof(name), dst_name); + memset(spki, 0, sizeof(*spki)); + + _gnutls_str_cpy(name, sizeof(name), src_name); _gnutls_str_cat(name, sizeof(name), ".algorithm"); - if (legacy && pk_algorithm == GNUTLS_PK_RSA) - oid = PK_PKIX1_RSA_OID; - else - oid = gnutls_sign_get_oid(gnutls_pk_to_sign(pk_algorithm, dig)); - if (oid == NULL) { + oid_size = sizeof(oid); + result = asn1_read_value(src, name, oid, &oid_size); + + if (result != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + if (strcmp (oid, PK_PKIX1_RSA_PSS_OID) == 0) { + gnutls_datum_t tmp = { NULL, 0 }; + + _gnutls_str_cpy(name, sizeof(name), src_name); + _gnutls_str_cat(name, sizeof(name), ".parameters"); + + result = _gnutls_x509_read_value(src, name, &tmp); + if (result < 0) { + if (!is_sig) { + if (result == GNUTLS_E_ASN1_ELEMENT_NOT_FOUND || + result != GNUTLS_E_ASN1_VALUE_NOT_FOUND) { + /* it is ok to not have parameters in SPKI, but + * not in signatures */ + return 0; + } + } + + return gnutls_assert_val(result); + } + + result = _gnutls_x509_read_rsa_pss_params(tmp.data, tmp.size, + spki); + _gnutls_free_datum(&tmp); + + if (result < 0) + gnutls_assert(); + + return result; + } + + return 0; +} + +static int write_oid_and_params(ASN1_TYPE dst, const char *dst_name, const char *oid, gnutls_x509_spki_st *params) +{ + int result; + char name[128]; + + if (params == NULL) { gnutls_assert(); - _gnutls_debug_log - ("Cannot find OID for sign algorithm pk: %d dig: %d\n", - (int) pk_algorithm, (int) dig); return GNUTLS_E_INVALID_REQUEST; } + _gnutls_str_cpy(name, sizeof(name), dst_name); + _gnutls_str_cat(name, sizeof(name), ".algorithm"); + /* write the OID. */ result = asn1_write_value(dst, name, oid, 1); @@ -243,14 +298,22 @@ _gnutls_x509_write_sig_params(ASN1_TYPE dst, const char *dst_name, return _gnutls_asn2err(result); } - _gnutls_str_cpy(name, sizeof(name), dst_name); _gnutls_str_cat(name, sizeof(name), ".parameters"); - if (pk_algorithm == GNUTLS_PK_RSA) + if (params->pk == GNUTLS_PK_RSA) result = asn1_write_value(dst, name, ASN1_NULL, ASN1_NULL_SIZE); - else + else if (params->pk == GNUTLS_PK_RSA_PSS) { + gnutls_datum_t tmp = { NULL, 0 }; + + result = _gnutls_x509_write_rsa_pss_params(params, &tmp); + if (result < 0) + return gnutls_assert_val(result); + + result = asn1_write_value(dst, name, tmp.data, tmp.size); + _gnutls_free_datum(&tmp); + } else result = asn1_write_value(dst, name, NULL, 0); if (result != ASN1_SUCCESS && result != ASN1_ELEMENT_NOT_FOUND) { @@ -264,8 +327,56 @@ _gnutls_x509_write_sig_params(ASN1_TYPE dst, const char *dst_name, return 0; } +int +_gnutls_x509_write_spki_params(ASN1_TYPE dst, const char *dst_name, + gnutls_x509_spki_st *params) +{ + const char *oid; + + if (params->legacy && params->pk == GNUTLS_PK_RSA) + oid = PK_PKIX1_RSA_OID; + else if (params->pk == GNUTLS_PK_RSA_PSS) + oid = PK_PKIX1_RSA_PSS_OID; + else + oid = gnutls_pk_get_oid(params->pk); + + if (oid == NULL) { + gnutls_assert(); + _gnutls_debug_log + ("Cannot find OID for public key algorithm %s\n", + gnutls_pk_get_name(params->pk)); + return GNUTLS_E_INVALID_REQUEST; + } + + return write_oid_and_params(dst, dst_name, oid, params); +} + +int +_gnutls_x509_write_sign_params(ASN1_TYPE dst, const char *dst_name, + const gnutls_sign_entry_st *se, gnutls_x509_spki_st *params) +{ + const char *oid; + + if (params->legacy && params->pk == GNUTLS_PK_RSA) + oid = PK_PKIX1_RSA_OID; + else if (params->pk == GNUTLS_PK_RSA_PSS) + oid = PK_PKIX1_RSA_PSS_OID; + else + oid = se->oid; + + if (oid == NULL) { + gnutls_assert(); + _gnutls_debug_log + ("Cannot find OID for sign algorithm %s\n", + se->name); + return GNUTLS_E_INVALID_REQUEST; + } + + return write_oid_and_params(dst, dst_name, oid, params); +} + /* this function reads a (small) unsigned integer - * from asn1 structs. Combines the read and the convertion + * from asn1 structs. Combines the read and the conversion * steps. */ int @@ -278,7 +389,6 @@ _gnutls_x509_read_uint(ASN1_TYPE node, const char *value, len = 0; result = asn1_read_value(node, value, NULL, &len); if (result != ASN1_MEM_ERROR) { - gnutls_assert(); return _gnutls_asn2err(result); } diff --git a/lib/x509/name_constraints.c b/lib/x509/name_constraints.c index c4d78026fe..dba2fd4b9f 100644 --- a/lib/x509/name_constraints.c +++ b/lib/x509/name_constraints.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -116,7 +116,7 @@ int _gnutls_extract_name_constraints(ASN1_TYPE c2, const char *vstr, { int ret; char tmpstr[128]; - unsigned indx = 0; + unsigned indx; gnutls_datum_t tmp = { NULL, 0 }; unsigned int type; struct name_constraints_node_st *nc, *prev; @@ -127,8 +127,7 @@ int _gnutls_extract_name_constraints(ASN1_TYPE c2, const char *vstr, prev = prev->next; } - do { - indx++; + for (indx=1;;indx++) { snprintf(tmpstr, sizeof(tmpstr), "%s.?%u.base", vstr, indx); ret = @@ -164,7 +163,7 @@ int _gnutls_extract_name_constraints(ASN1_TYPE c2, const char *vstr, } tmp.data = NULL; - } while (ret >= 0); + } if (ret < 0 && ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { gnutls_assert(); @@ -242,7 +241,7 @@ static name_constraints_node_st* name_constraints_node_new(unsigned type, * @_nc_excluded: Corresponding excluded name constraints list * * This function finds the intersection of @_nc and @_nc2. The result is placed in @_nc, - * the original @_nc is deallocated. @_nc2 is not chenged. If necessary, a universal + * the original @_nc is deallocated. @_nc2 is not changed. If necessary, a universal * excluded name constraint node of the right type is added to the list provided * in @_nc_excluded. * @@ -1071,13 +1070,12 @@ static unsigned check_unsupported_constraint2(gnutls_x509_crt_t cert, unsigned san_type; int ret; - idx = 0; found_one = 0; - do { + for (idx=0;;idx++) { name_size = sizeof(name); ret = gnutls_x509_crt_get_subject_alt_name2(cert, - idx++, name, &name_size, &san_type, NULL); + idx, name, &name_size, &san_type, NULL); if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) break; else if (ret < 0) @@ -1088,7 +1086,7 @@ static unsigned check_unsupported_constraint2(gnutls_x509_crt_t cert, found_one = 1; break; - } while(ret >= 0); + } if (found_one != 0) return check_unsupported_constraint(nc, type); @@ -1129,11 +1127,11 @@ unsigned found_one; return 1; /* shortcut; no constraints to check */ if (type == GNUTLS_SAN_RFC822NAME) { - idx = found_one = 0; - do { + found_one = 0; + for (idx=0;;idx++) { name_size = sizeof(name); ret = gnutls_x509_crt_get_subject_alt_name2(cert, - idx++, name, &name_size, &san_type, NULL); + idx, name, &name_size, &san_type, NULL); if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) break; else if (ret < 0) @@ -1149,7 +1147,7 @@ unsigned found_one; &n); if (t == 0) return gnutls_assert_val(t); - } while(ret >= 0); + } /* there is at least a single e-mail. That means that the EMAIL field will * not be used for verifying the identity of the holder. */ @@ -1190,11 +1188,11 @@ unsigned found_one; return gnutls_assert_val(1); } } else if (type == GNUTLS_SAN_DNSNAME) { - idx = found_one = 0; - do { + found_one = 0; + for (idx=0;;idx++) { name_size = sizeof(name); ret = gnutls_x509_crt_get_subject_alt_name2(cert, - idx++, name, &name_size, &san_type, NULL); + idx, name, &name_size, &san_type, NULL); if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) break; else if (ret < 0) @@ -1210,7 +1208,7 @@ unsigned found_one; &n); if (t == 0) return gnutls_assert_val(t); - } while(ret >= 0); + } /* there is at least a single DNS name. That means that the CN will * not be used for verifying the identity of the holder. */ @@ -1256,11 +1254,11 @@ unsigned found_one; return gnutls_assert_val(1); } } else if (type == GNUTLS_SAN_IPADDRESS) { - idx = found_one = 0; - do { + found_one = 0; + for (idx=0;;idx++) { name_size = sizeof(name); ret = gnutls_x509_crt_get_subject_alt_name2(cert, - idx++, name, &name_size, &san_type, NULL); + idx, name, &name_size, &san_type, NULL); if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) break; else if (ret < 0) @@ -1275,7 +1273,7 @@ unsigned found_one; t = gnutls_x509_name_constraints_check(nc, GNUTLS_SAN_IPADDRESS, &n); if (t == 0) return gnutls_assert_val(t); - } while(ret >= 0); + } /* there is at least a single IP address. */ diff --git a/lib/x509/ocsp.c b/lib/x509/ocsp.c index 12de6c07f0..caa511e9db 100644 --- a/lib/x509/ocsp.c +++ b/lib/x509/ocsp.c @@ -1,6 +1,8 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. - * Author: Simon Josefsson + * Copyright (C) 2016-2017 Red Hat, Inc. + * + * Author: Simon Josefsson, Nikos Mavrogiannopoulos * * This file is part of GnuTLS. * @@ -15,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -29,10 +31,14 @@ #include #include "common.h" #include "verify-high.h" +#include "x509.h" +#include "ocsp.h" #include #include +#include + typedef struct gnutls_ocsp_req_int { ASN1_TYPE req; unsigned init; @@ -156,7 +162,6 @@ void gnutls_ocsp_resp_deinit(gnutls_ocsp_resp_t resp) asn1_delete_structure(&resp->basicresp); resp->resp = NULL; - resp->response_type_oid.data = NULL; resp->basicresp = NULL; gnutls_free(resp->der.data); @@ -224,14 +229,48 @@ gnutls_ocsp_req_import(gnutls_ocsp_req_t req, const gnutls_datum_t * data) int gnutls_ocsp_resp_import(gnutls_ocsp_resp_t resp, const gnutls_datum_t * data) +{ + return gnutls_ocsp_resp_import2(resp, data, GNUTLS_X509_FMT_DER); +} + +/** + * gnutls_ocsp_resp_import2: + * @resp: The data to store the parsed response. + * @data: DER or PEM encoded OCSP response. + * @fmt: DER or PEM + * + * This function will convert the given OCSP response to + * the native #gnutls_ocsp_resp_t format. It also decodes the Basic + * OCSP Response part, if any. The output will be stored in @resp. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.3 + **/ +int +gnutls_ocsp_resp_import2(gnutls_ocsp_resp_t resp, + const gnutls_datum_t *data, + gnutls_x509_crt_fmt_t fmt) { int ret = 0; + gnutls_datum_t der; if (resp == NULL || data == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } + der.data = data->data; + der.size = data->size; + + if (fmt == GNUTLS_X509_FMT_PEM) { + ret = gnutls_pem_base64_decode2(BARE_PEM_OCSP_RESPONSE, data, &der); + if (ret < 0) { + return gnutls_assert_val(ret); + } + } + if (resp->init != 0) { /* Any earlier _asn1_strict_der_decode will modify the ASN.1 structure, so we need to replace it with a fresh @@ -245,7 +284,8 @@ gnutls_ocsp_resp_import(gnutls_ocsp_resp_t resp, &resp->resp); if (ret != ASN1_SUCCESS) { gnutls_assert(); - return _gnutls_asn2err(ret); + ret = _gnutls_asn2err(ret); + goto cleanup; } ret = asn1_create_element(_gnutls_get_pkix(), @@ -253,23 +293,26 @@ gnutls_ocsp_resp_import(gnutls_ocsp_resp_t resp, &resp->basicresp); if (ret != ASN1_SUCCESS) { gnutls_assert(); - return _gnutls_asn2err(ret); + ret = _gnutls_asn2err(ret); + goto cleanup; } gnutls_free(resp->der.data); - resp->der.data = NULL; } resp->init = 1; - ret = _asn1_strict_der_decode(&resp->resp, data->data, data->size, NULL); + ret = _asn1_strict_der_decode(&resp->resp, der.data, der.size, NULL); if (ret != ASN1_SUCCESS) { gnutls_assert(); - return _gnutls_asn2err(ret); + ret = _gnutls_asn2err(ret); + goto cleanup; } if (gnutls_ocsp_resp_get_status(resp) != - GNUTLS_OCSP_RESP_SUCCESSFUL) - return GNUTLS_E_SUCCESS; + GNUTLS_OCSP_RESP_SUCCESSFUL) { + ret = GNUTLS_E_SUCCESS; + goto cleanup; + } ret = _gnutls_x509_read_value(resp->resp, @@ -277,7 +320,7 @@ gnutls_ocsp_resp_import(gnutls_ocsp_resp_t resp, &resp->response_type_oid); if (ret < 0) { gnutls_assert(); - return ret; + goto cleanup; } #define OCSP_BASIC "1.3.6.1.5.5.7.48.1.1" @@ -290,7 +333,7 @@ gnutls_ocsp_resp_import(gnutls_ocsp_resp_t resp, "responseBytes.response", &resp->der); if (ret < 0) { gnutls_assert(); - return ret; + goto cleanup; } ret = @@ -298,14 +341,19 @@ gnutls_ocsp_resp_import(gnutls_ocsp_resp_t resp, NULL); if (ret != ASN1_SUCCESS) { gnutls_assert(); - return _gnutls_asn2err(ret); + ret = _gnutls_asn2err(ret); + goto cleanup; } } else { asn1_delete_structure(&resp->basicresp); resp->basicresp = NULL; } - return GNUTLS_E_SUCCESS; + ret = GNUTLS_E_SUCCESS; +cleanup: + if (der.data != data->data) + gnutls_free(der.data); + return ret; } /** @@ -318,7 +366,7 @@ gnutls_ocsp_resp_import(gnutls_ocsp_resp_t resp, * Returns: In case of failure a negative error code will be * returned, and 0 on success. **/ -int gnutls_ocsp_req_export(gnutls_ocsp_req_t req, gnutls_datum_t * data) +int gnutls_ocsp_req_export(gnutls_ocsp_req_const_t req, gnutls_datum_t * data) { int ret; @@ -350,14 +398,51 @@ int gnutls_ocsp_req_export(gnutls_ocsp_req_t req, gnutls_datum_t * data) * Returns: In case of failure a negative error code will be * returned, and 0 on success. **/ -int gnutls_ocsp_resp_export(gnutls_ocsp_resp_t resp, gnutls_datum_t * data) +int gnutls_ocsp_resp_export(gnutls_ocsp_resp_const_t resp, gnutls_datum_t * data) +{ + return gnutls_ocsp_resp_export2(resp, data, GNUTLS_X509_FMT_DER); +} + +/** + * gnutls_ocsp_resp_export2: + * @resp: Holds the OCSP response + * @data: newly allocate buffer holding DER or PEM encoded OCSP response + * @fmt: DER or PEM + * + * This function will export the OCSP response to DER or PEM format. + * + * Returns: In case of failure a negative error code will be + * returned, and 0 on success. + * + * Since: 3.6.3 + **/ +int gnutls_ocsp_resp_export2(gnutls_ocsp_resp_const_t resp, gnutls_datum_t * data, + gnutls_x509_crt_fmt_t fmt) { + int ret; + gnutls_datum_t der; + if (resp == NULL || data == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - return _gnutls_x509_get_raw_field(resp->resp, "", data); + ret = _gnutls_x509_get_raw_field(resp->resp, "", &der); + if (ret < 0) + return gnutls_assert_val(ret); + + if (fmt == GNUTLS_X509_FMT_DER) { + data->data = der.data; + data->size = der.size; + return ret; + } else { + ret = gnutls_pem_base64_encode2("OCSP RESPONSE", &der, data); + gnutls_free(der.data); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; + } } /** @@ -369,27 +454,14 @@ int gnutls_ocsp_resp_export(gnutls_ocsp_resp_t resp, gnutls_datum_t * data) * * Returns: version of OCSP request, or a negative error code on error. **/ -int gnutls_ocsp_req_get_version(gnutls_ocsp_req_t req) +int gnutls_ocsp_req_get_version(gnutls_ocsp_req_const_t req) { - uint8_t version[8]; - int len, ret; - if (req == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - len = sizeof(version); - ret = - asn1_read_value(req->req, "tbsRequest.version", version, &len); - if (ret != ASN1_SUCCESS) { - if (ret == ASN1_ELEMENT_NOT_FOUND) - return 1; /* the DEFAULT version */ - gnutls_assert(); - return _gnutls_asn2err(ret); - } - - return (int) version[0] + 1; + return _gnutls_x509_get_version(req->req, "tbsRequest.version"); } /** @@ -422,7 +494,7 @@ int gnutls_ocsp_req_get_version(gnutls_ocsp_req_t req) * returned. **/ int -gnutls_ocsp_req_get_cert_id(gnutls_ocsp_req_t req, +gnutls_ocsp_req_get_cert_id(gnutls_ocsp_req_const_t req, unsigned indx, gnutls_digest_algorithm_t * digest, gnutls_datum_t * issuer_name_hash, @@ -729,7 +801,7 @@ gnutls_ocsp_req_add_cert(gnutls_ocsp_req_t req, * be returned. **/ int -gnutls_ocsp_req_get_extension(gnutls_ocsp_req_t req, +gnutls_ocsp_req_get_extension(gnutls_ocsp_req_const_t req, unsigned indx, gnutls_datum_t * oid, unsigned int *critical, @@ -834,7 +906,7 @@ gnutls_ocsp_req_set_extension(gnutls_ocsp_req_t req, * negative error code is returned. **/ int -gnutls_ocsp_req_get_nonce(gnutls_ocsp_req_t req, +gnutls_ocsp_req_get_nonce(gnutls_ocsp_req_const_t req, unsigned int *critical, gnutls_datum_t * nonce) { int ret; @@ -964,7 +1036,7 @@ int gnutls_ocsp_req_randomize_nonce(gnutls_ocsp_req_t req) * Returns: status of OCSP request as a #gnutls_ocsp_resp_status_t, or * a negative error code on error. **/ -int gnutls_ocsp_resp_get_status(gnutls_ocsp_resp_t resp) +int gnutls_ocsp_resp_get_status(gnutls_ocsp_resp_const_t resp) { uint8_t str[1]; int len, ret; @@ -981,6 +1053,9 @@ int gnutls_ocsp_resp_get_status(gnutls_ocsp_resp_t resp) return _gnutls_asn2err(ret); } + if (len != 1) + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); + switch (str[0]) { case GNUTLS_OCSP_RESP_SUCCESSFUL: case GNUTLS_OCSP_RESP_MALFORMEDREQUEST: @@ -990,7 +1065,7 @@ int gnutls_ocsp_resp_get_status(gnutls_ocsp_resp_t resp) case GNUTLS_OCSP_RESP_UNAUTHORIZED: break; default: - return GNUTLS_E_UNEXPECTED_PACKET; + return gnutls_assert_val(GNUTLS_E_UNEXPECTED_PACKET); } return (int) str[0]; @@ -1017,7 +1092,7 @@ int gnutls_ocsp_resp_get_status(gnutls_ocsp_resp_t resp) * negative error value. **/ int -gnutls_ocsp_resp_get_response(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_get_response(gnutls_ocsp_resp_const_t resp, gnutls_datum_t * response_type_oid, gnutls_datum_t * response) { @@ -1063,28 +1138,14 @@ gnutls_ocsp_resp_get_response(gnutls_ocsp_resp_t resp, * Returns: version of Basic OCSP response, or a negative error code * on error. **/ -int gnutls_ocsp_resp_get_version(gnutls_ocsp_resp_t resp) +int gnutls_ocsp_resp_get_version(gnutls_ocsp_resp_const_t resp) { - uint8_t version[8]; - int len, ret; - if (resp == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - len = sizeof(version); - ret = - asn1_read_value(resp->resp, "tbsResponseData.version", version, - &len); - if (ret != ASN1_SUCCESS) { - if (ret == ASN1_ELEMENT_NOT_FOUND) - return 1; /* the DEFAULT version */ - gnutls_assert(); - return _gnutls_asn2err(ret); - } - - return (int) version[0] + 1; + return _gnutls_x509_get_version(resp->resp, "tbsResponseData.version"); } /** @@ -1111,7 +1172,7 @@ int gnutls_ocsp_resp_get_version(gnutls_ocsp_resp_t resp) * return success and set @dn elements to zero. **/ int -gnutls_ocsp_resp_get_responder(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_get_responder(gnutls_ocsp_resp_const_t resp, gnutls_datum_t * dn) { int ret; @@ -1152,7 +1213,7 @@ gnutls_ocsp_resp_get_responder(gnutls_ocsp_resp_t resp, * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE. **/ int -gnutls_ocsp_resp_get_responder2(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_get_responder2(gnutls_ocsp_resp_const_t resp, gnutls_datum_t * dn, unsigned flags) { if (resp == NULL || dn == NULL) { @@ -1185,7 +1246,7 @@ gnutls_ocsp_resp_get_responder2(gnutls_ocsp_resp_t resp, * negative error code is returned. **/ int -gnutls_ocsp_resp_get_responder_raw_id(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_get_responder_raw_id(gnutls_ocsp_resp_const_t resp, unsigned type, gnutls_datum_t * raw) { @@ -1253,7 +1314,7 @@ gnutls_ocsp_resp_get_responder_raw_id(gnutls_ocsp_resp_t resp, * * Returns: signing time, or (time_t)-1 on error. **/ -time_t gnutls_ocsp_resp_get_produced(gnutls_ocsp_resp_t resp) +time_t gnutls_ocsp_resp_get_produced(gnutls_ocsp_resp_const_t resp) { char ttime[MAX_TIME]; int len, ret; @@ -1293,7 +1354,7 @@ time_t gnutls_ocsp_resp_get_produced(gnutls_ocsp_resp_t resp) * Since: 3.1.3 **/ int -gnutls_ocsp_resp_check_crt(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_check_crt(gnutls_ocsp_resp_const_t resp, unsigned int indx, gnutls_x509_crt_t crt) { int ret; @@ -1304,6 +1365,9 @@ gnutls_ocsp_resp_check_crt(gnutls_ocsp_resp_t resp, gnutls_datum_t dn = { NULL, 0 }; uint8_t cdn_hash[MAX_HASH_SIZE]; size_t t, hash_len; + + if (resp == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); ret = gnutls_ocsp_resp_get_single(resp, indx, &digest, &rdn_hash, @@ -1402,7 +1466,7 @@ gnutls_ocsp_resp_check_crt(gnutls_ocsp_resp_t resp, * returned. **/ int -gnutls_ocsp_resp_get_single(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_get_single(gnutls_ocsp_resp_const_t resp, unsigned indx, gnutls_digest_algorithm_t * digest, gnutls_datum_t * issuer_name_hash, @@ -1578,18 +1642,12 @@ gnutls_ocsp_resp_get_single(gnutls_ocsp_resp_t resp, return GNUTLS_E_SUCCESS; fail: - if (issuer_name_hash) { + if (issuer_name_hash) gnutls_free(issuer_name_hash->data); - issuer_name_hash->data = NULL; - } - if (issuer_key_hash) { + if (issuer_key_hash) gnutls_free(issuer_key_hash->data); - issuer_key_hash->data = NULL; - } - if (serial_number) { + if (serial_number) gnutls_free(serial_number->data); - serial_number->data = NULL; - } return ret; } @@ -1617,7 +1675,7 @@ gnutls_ocsp_resp_get_single(gnutls_ocsp_resp_t resp, * be returned. **/ int -gnutls_ocsp_resp_get_extension(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_get_extension(gnutls_ocsp_resp_const_t resp, unsigned indx, gnutls_datum_t * oid, unsigned int *critical, @@ -1695,7 +1753,7 @@ gnutls_ocsp_resp_get_extension(gnutls_ocsp_resp_t resp, * negative error code is returned. **/ int -gnutls_ocsp_resp_get_nonce(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_get_nonce(gnutls_ocsp_resp_const_t resp, unsigned int *critical, gnutls_datum_t * nonce) { int ret; @@ -1735,7 +1793,7 @@ gnutls_ocsp_resp_get_nonce(gnutls_ocsp_resp_t resp, * Returns: a #gnutls_sign_algorithm_t value, or a negative error code * on error. **/ -int gnutls_ocsp_resp_get_signature_algorithm(gnutls_ocsp_resp_t resp) +int gnutls_ocsp_resp_get_signature_algorithm(gnutls_ocsp_resp_const_t resp) { int ret; gnutls_datum_t sa; @@ -1765,7 +1823,7 @@ int gnutls_ocsp_resp_get_signature_algorithm(gnutls_ocsp_resp_t resp) * negative error value. **/ int -gnutls_ocsp_resp_get_signature(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_get_signature(gnutls_ocsp_resp_const_t resp, gnutls_datum_t * sig) { int ret; @@ -1807,7 +1865,7 @@ gnutls_ocsp_resp_get_signature(gnutls_ocsp_resp_t resp, * negative error value. **/ int -gnutls_ocsp_resp_get_certs(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_get_certs(gnutls_ocsp_resp_const_t resp, gnutls_x509_crt_t ** certs, size_t * ncerts) { int ret; @@ -1865,7 +1923,6 @@ gnutls_ocsp_resp_get_certs(gnutls_ocsp_resp_t resp, } gnutls_free(c.data); - c.data = NULL; } tmpcerts[ctr] = NULL; @@ -1892,7 +1949,7 @@ gnutls_ocsp_resp_get_certs(gnutls_ocsp_resp_t resp, /* Search the OCSP response for a certificate matching the responderId mentioned in the OCSP response. */ -static gnutls_x509_crt_t find_signercert(gnutls_ocsp_resp_t resp) +static gnutls_x509_crt_t find_signercert(gnutls_ocsp_resp_const_t resp) { int rc; gnutls_x509_crt_t *certs = NULL; @@ -1919,28 +1976,64 @@ static gnutls_x509_crt_t find_signercert(gnutls_ocsp_resp_t resp) } for (i = 0; i < ncerts; i++) { + assert(certs[i] != NULL); + _gnutls_cert_log("checking whether signed against", certs[i]); if (keyid.data != NULL) { - uint8_t digest[20]; + uint8_t digest[64]; /* to support longer key IDs */ gnutls_datum_t spki; + size_t digest_size = sizeof(digest); + int len; + + _gnutls_debug_log("checking key ID against SPK identifier\n"); + + /* check subject key identifier as well, some certificates + * match that, but not the hash */ + rc = gnutls_x509_crt_get_subject_key_id(certs[i], digest, &digest_size, NULL); + if (rc >= 0 && digest_size == keyid.size && + memcmp(keyid.data, digest, digest_size) == 0) { + signercert = certs[i]; + goto quit; + } + _gnutls_debug_log("checking key ID against SPKI hash\n"); + + /* continue with checking the hash */ rc = _gnutls_x509_get_raw_field2(certs[i]->cert, &certs[i]->der, "tbsCertificate.subjectPublicKeyInfo.subjectPublicKey", &spki); if (rc < 0 || spki.size < 6) { + gnutls_assert(); signercert = NULL; - goto quit; + continue; } /* For some reason the protocol requires we skip the * tag, length and number of unused bits. */ - spki.data += 5; - spki.size -= 5; - rc = gnutls_hash_fast(GNUTLS_DIG_SHA1, spki.data, spki.size, digest); + if (spki.data[0] != 0x03) { /* bit string */ + gnutls_assert(); + signercert = NULL; + continue; + } + + rc = asn1_get_length_der(spki.data+1, spki.size-1, &len); + if (rc <= 0) { + gnutls_assert(); + signercert = NULL; + continue; + } + len += 1+1; /* skip unused bits as well */ + if (len >= (int)spki.size) { + gnutls_assert(); + signercert = NULL; + continue; + } + + rc = gnutls_hash_fast(GNUTLS_DIG_SHA1, spki.data+len, spki.size-len, digest); if (rc < 0) { gnutls_assert(); signercert = NULL; - goto quit; + continue; } if ((20 == keyid.size) && @@ -1948,13 +2041,17 @@ static gnutls_x509_crt_t find_signercert(gnutls_ocsp_resp_t resp) signercert = certs[i]; goto quit; } + gnutls_assert(); } else { + _gnutls_debug_log("checking issuer DN\n"); + assert(riddn.data != NULL); if ((certs[i]->raw_dn.size == riddn.size) && memcmp(riddn.data, certs[i]->raw_dn.data, riddn.size) == 0) { signercert = certs[i]; goto quit; } + gnutls_assert(); } } @@ -1972,7 +2069,7 @@ static gnutls_x509_crt_t find_signercert(gnutls_ocsp_resp_t resp) } static int -_ocsp_resp_verify_direct(gnutls_ocsp_resp_t resp, +_ocsp_resp_verify_direct(gnutls_ocsp_resp_const_t resp, gnutls_x509_crt_t signercert, unsigned int *verify, unsigned int flags) { @@ -2006,6 +2103,8 @@ _ocsp_resp_verify_direct(gnutls_ocsp_resp_t resp, goto done; } + _gnutls_cert_log("ocsp signer", signercert); \ + rc = gnutls_pubkey_import_x509(pubkey, signercert, 0); if (rc != GNUTLS_E_SUCCESS) { gnutls_assert(); @@ -2110,7 +2209,7 @@ static int check_ocsp_purpose(gnutls_x509_crt_t signercert) * negative error value. **/ int -gnutls_ocsp_resp_verify_direct(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_verify_direct(gnutls_ocsp_resp_const_t resp, gnutls_x509_crt_t issuer, unsigned int *verify, unsigned int flags) { @@ -2139,6 +2238,7 @@ gnutls_ocsp_resp_verify_direct(gnutls_ocsp_resp_t resp, } if (vtmp != 0) { + _gnutls_reason_log("cert verification", vtmp); *verify = vstatus_to_ocsp_status(vtmp); gnutls_assert(); rc = GNUTLS_E_SUCCESS; @@ -2194,7 +2294,7 @@ gnutls_ocsp_resp_verify_direct(gnutls_ocsp_resp_t resp, * negative error value. **/ int -gnutls_ocsp_resp_verify(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_verify(gnutls_ocsp_resp_const_t resp, gnutls_x509_trust_list_t trustlist, unsigned int *verify, unsigned int flags) { @@ -2280,3 +2380,244 @@ gnutls_ocsp_resp_verify(gnutls_ocsp_resp_t resp, return rc; } + +/** + * gnutls_x509_ocsp_resp_list_import2: + * @ocsps: Will hold the parsed OCSP response list. + * @size: It will contain the size of the list. + * @resp_data: The PEM encoded OCSP list. + * @format: One of %GNUTLS_X509_FMT_PEM or %GNUTLS_X509_FMT_DER + * @flags: must be (0) or an OR'd sequence of gnutls_certificate_import_flags. + * + * This function will convert the given PEM encoded OCSP response list + * to the native gnutls_ocsp_resp_t format. The output will be stored + * in @ocsps which will be allocated and initialized. + * + * The OCSP responses should have a header of "OCSP RESPONSE". + * + * To deinitialize responses, you need to deinitialize each %gnutls_ocsp_resp_t + * structure independently, and use gnutls_free() at @ocsps. + * + * In PEM files, when no OCSP responses are detected + * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE will be returned. + * + * Returns: the number of responses read or a negative error value. + * + * Since: 3.6.3 + **/ +int +gnutls_ocsp_resp_list_import2(gnutls_ocsp_resp_t **ocsps, + unsigned int *size, + const gnutls_datum_t *resp_data, + gnutls_x509_crt_fmt_t format, + unsigned int flags) +{ + gnutls_ocsp_resp_t resp = NULL; + gnutls_ocsp_resp_t *new_ocsps; + int ret; + unsigned i; + + + if (format == GNUTLS_X509_FMT_PEM) { + /* load multiple responses */ + gnutls_datum_t p = {resp_data->data, resp_data->size}; + + *size = 0; + *ocsps = NULL; + + p.data = memmem(p.data, p.size, PEM_OCSP_RESPONSE, + sizeof(PEM_OCSP_RESPONSE)-1); + if (p.data == NULL) { + ret = gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + goto cleanup; + } + + p.size -= p.data - resp_data->data; + if (p.size <= 0) { + ret = gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + goto cleanup; + } + + do { + ret = gnutls_ocsp_resp_init(&resp); + if (ret < 0) { + gnutls_assert(); + goto fail; + } + + ret = gnutls_ocsp_resp_import2(resp, &p, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + gnutls_assert(); + goto fail; + } + + new_ocsps = gnutls_realloc(*ocsps, (*size + 1)*sizeof(gnutls_ocsp_resp_t)); + if (new_ocsps == NULL) { + resp = NULL; + gnutls_assert(); + goto fail; + } + + new_ocsps[*size] = resp; + resp = NULL; + (*size)++; + *ocsps = new_ocsps; + + p.data++; + p.size--; + + p.data = memmem(p.data, p.size, PEM_OCSP_RESPONSE, + sizeof(PEM_OCSP_RESPONSE)-1); + if (p.data == NULL) + break; + p.size = resp_data->size - (p.data - resp_data->data); + } while(p.size > 0); + } else { + /* DER: load a single response */ + ret = gnutls_ocsp_resp_init(&resp); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + ret = gnutls_ocsp_resp_import2(resp, resp_data, GNUTLS_X509_FMT_DER); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + *ocsps = gnutls_malloc(1*sizeof(gnutls_ocsp_resp_t)); + if (*ocsps == NULL) { + gnutls_assert(); + ret = GNUTLS_E_MEMORY_ERROR; + goto cleanup; + } + + (*ocsps)[0] = resp; + resp = NULL; + *size = 1; + } + + ret = 0; + goto cleanup; + + fail: + for (i=0;i<*size;i++) { + gnutls_ocsp_resp_deinit((*ocsps)[i]); + } + gnutls_free(*ocsps); + + cleanup: + if (resp) + gnutls_ocsp_resp_deinit(resp); + return ret; +} + +/* This returns -1 if the OCSP response is invalid (revoked) or its + * data are too old. It returns -2 if it cannot determine the expiration + * time, and would otherwise treat it as too old. + * Otherwise it returns the time after which that data is invalid. + */ +time_t _gnutls_ocsp_get_validity(gnutls_ocsp_resp_const_t resp) +{ + unsigned int cert_status; + time_t rtime, vtime, ntime, now; + int ret; + + ret = gnutls_ocsp_resp_get_single(resp, 0, NULL, NULL, NULL, NULL, + &cert_status, &vtime, &ntime, + &rtime, NULL); + if (ret < 0) { + _gnutls_debug_log("There was an error parsing the OCSP response: %s\n", + gnutls_strerror(ret)); + return gnutls_assert_val(-1); + } + + if (cert_status != GNUTLS_OCSP_CERT_GOOD && + cert_status != GNUTLS_OCSP_CERT_UNKNOWN) { + _gnutls_debug_log("The OCSP response status (%d) is invalid\n", + cert_status); + return gnutls_assert_val(-1); + } + + now = gnutls_time(0); + + if (ntime == -1) { + /* This is a problematic case, and there is no consensus on how + * to treat these responses. It doesn't contain the time after which + * the response is invalid, thus it is an OCSP response effectively + * valid forever defeating the purpose of OCSP. We set here the same + * limit we apply when verifying responses. */ + if (now - vtime > MAX_OCSP_VALIDITY_SECS) { + _gnutls_debug_log("The OCSP response is old\n"); + return gnutls_assert_val(-2); + } + + return now + MAX_OCSP_VALIDITY_SECS; + } else { + /* there is a newer OCSP answer, don't trust this one */ + if (ntime < now) { + _gnutls_debug_log("There is a newer OCSP response\n"); + return gnutls_assert_val(-1); + } + + return ntime; + } +} + +const char *_gnutls_ocsp_verify_status_to_str(gnutls_ocsp_verify_reason_t r, char out[MAX_OCSP_MSG_SIZE]) +{ + gnutls_buffer_st str; + gnutls_datum_t buf; + int ret; + + _gnutls_buffer_init(&str); + + if (r == 0) + _gnutls_buffer_append_str(&str, + _ + ("The OCSP response is trusted. ")); + + if (r & GNUTLS_OCSP_VERIFY_SIGNER_NOT_FOUND) + _gnutls_buffer_append_str(&str, + _ + ("The OCSP response's signer could not be found. ")); + + if (r & GNUTLS_OCSP_VERIFY_SIGNER_KEYUSAGE_ERROR) + _gnutls_buffer_append_str(&str, + _ + ("Error in the signer's key usageflags. ")); + + if (r & GNUTLS_OCSP_VERIFY_UNTRUSTED_SIGNER) + _gnutls_buffer_append_str(&str, + _ + ("The OCSP response's signer is not trusted. ")); + + if (r & GNUTLS_OCSP_VERIFY_INSECURE_ALGORITHM) + _gnutls_buffer_append_str(&str, + _ + ("The OCSP response depends on insecure algorithms. ")); + + if (r & GNUTLS_OCSP_VERIFY_SIGNATURE_FAILURE) + _gnutls_buffer_append_str(&str, + _ + ("The OCSP response's signature cannot be validated. ")); + + if (r & GNUTLS_OCSP_VERIFY_CERT_NOT_ACTIVATED) + _gnutls_buffer_append_str(&str, + _ + ("The OCSP response's signer's certificate is not activated. ")); + + if (r & GNUTLS_OCSP_VERIFY_CERT_EXPIRED) + _gnutls_buffer_append_str(&str, + _ + ("The OCSP response's signer's certificate is expired. ")); + + ret = _gnutls_buffer_to_datum(&str, &buf, 1); + if (ret < 0) + return _("Memory error"); + + snprintf(out, MAX_OCSP_MSG_SIZE, "%s", buf.data); + gnutls_free(buf.data); + + return out; +} diff --git a/lib/x509/ocsp.h b/lib/x509/ocsp.h new file mode 100644 index 0000000000..b9c47570a2 --- /dev/null +++ b/lib/x509/ocsp.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_X509_OCSP_H +#define GNUTLS_LIB_X509_OCSP_H + +/* Online Certificate Status Protocol - RFC 2560 + */ +#include + +/* fifteen days */ +#define MAX_OCSP_VALIDITY_SECS (15*60*60*24) + +time_t _gnutls_ocsp_get_validity(gnutls_ocsp_resp_const_t resp); +#define MAX_OCSP_MSG_SIZE 128 +const char *_gnutls_ocsp_verify_status_to_str(gnutls_ocsp_verify_reason_t r, char out[MAX_OCSP_MSG_SIZE]); + +#endif /* GNUTLS_LIB_X509_OCSP_H */ diff --git a/lib/x509/ocsp_output.c b/lib/x509/ocsp_output.c index d5f3ee70a9..7f31e583b2 100644 --- a/lib/x509/ocsp_output.c +++ b/lib/x509/ocsp_output.c @@ -15,7 +15,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -35,7 +35,7 @@ #define addf _gnutls_buffer_append_printf #define adds _gnutls_buffer_append_str -static void print_req(gnutls_buffer_st * str, gnutls_ocsp_req_t req) +static void print_req(gnutls_buffer_st * str, gnutls_ocsp_req_const_t req) { int ret; unsigned indx; @@ -169,7 +169,7 @@ static void print_req(gnutls_buffer_st * str, gnutls_ocsp_req_t req) * negative error value. **/ int -gnutls_ocsp_req_print(gnutls_ocsp_req_t req, +gnutls_ocsp_req_print(gnutls_ocsp_req_const_t req, gnutls_ocsp_print_formats_t format, gnutls_datum_t * out) { @@ -197,7 +197,7 @@ gnutls_ocsp_req_print(gnutls_ocsp_req_t req, } static void -print_resp(gnutls_buffer_st * str, gnutls_ocsp_resp_t resp, +print_resp(gnutls_buffer_st * str, gnutls_ocsp_resp_const_t resp, gnutls_ocsp_print_formats_t format) { int ret; @@ -510,28 +510,30 @@ print_resp(gnutls_buffer_st * str, gnutls_ocsp_resp_t resp, gnutls_free(oid.data); gnutls_free(data.data); + + } + + ret = gnutls_ocsp_resp_get_signature_algorithm(resp); + if (ret < 0) + addf(str, "error: get_signature_algorithm: %s\n", + gnutls_strerror(ret)); + else { + const char *name = + gnutls_sign_algorithm_get_name(ret); + if (name == NULL) + name = _("unknown"); + addf(str, _("\tSignature Algorithm: %s\n"), name); + } + if (ret != GNUTLS_SIGN_UNKNOWN && gnutls_sign_is_secure(ret) == 0) { + adds(str, + _("warning: signed using a broken signature " + "algorithm that can be forged.\n")); } /* Signature. */ if (format == GNUTLS_OCSP_PRINT_FULL) { gnutls_datum_t sig; - ret = gnutls_ocsp_resp_get_signature_algorithm(resp); - if (ret < 0) - addf(str, "error: get_signature_algorithm: %s\n", - gnutls_strerror(ret)); - else { - const char *name = - gnutls_sign_algorithm_get_name(ret); - if (name == NULL) - name = _("unknown"); - addf(str, _("\tSignature Algorithm: %s\n"), name); - } - if (ret != GNUTLS_SIGN_UNKNOWN && gnutls_sign_is_secure(ret) == 0) { - adds(str, - _("warning: signed using a broken signature " - "algorithm that can be forged.\n")); - } ret = gnutls_ocsp_resp_get_signature(resp, &sig); if (ret < 0) @@ -637,7 +639,7 @@ print_resp(gnutls_buffer_st * str, gnutls_ocsp_resp_t resp, * negative error value. **/ int -gnutls_ocsp_resp_print(gnutls_ocsp_resp_t resp, +gnutls_ocsp_resp_print(gnutls_ocsp_resp_const_t resp, gnutls_ocsp_print_formats_t format, gnutls_datum_t * out) { diff --git a/lib/x509/output.c b/lib/x509/output.c index 8ebb998ed2..705e8babfa 100644 --- a/lib/x509/output.c +++ b/lib/x509/output.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2007-2016 Free Software Foundation, Inc. - * Copyright (C) 2015-2016 Red Hat, Inc. + * Copyright (C) 2015-2017 Red Hat, Inc. * * Author: Simon Josefsson, Nikos Mavrogiannopoulos * @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -30,7 +30,7 @@ #include #include #include "errors.h" -#include "extensions.h" +#include "hello_ext.h" #include "ip.h" #define addf _gnutls_buffer_append_printf @@ -144,6 +144,10 @@ print_name(gnutls_buffer_st *str, const char *prefix, unsigned type, gnutls_datu addf(str, _("%sdirectoryName: %.*s\n"), prefix, name->size, NON_NULL(name->data)); break; + case GNUTLS_SAN_REGISTERED_ID: + addf(str, _("%sRegistered ID: %.*s\n"), prefix, name->size, NON_NULL(name->data)); + break; + case GNUTLS_SAN_OTHERNAME_XMPP: addf(str, _("%sXMPP Address: %.*s\n"), prefix, name->size, NON_NULL(name->data)); break; @@ -369,7 +373,7 @@ static void print_aia(gnutls_buffer_st * str, const gnutls_datum_t *der) gnutls_datum_t san = { NULL, 0 }, oid = {NULL, 0}; gnutls_x509_aia_t aia; unsigned int san_type; - + err = gnutls_x509_aia_init(&aia); if (err < 0) return; @@ -444,7 +448,9 @@ print_aki_gn_serial(gnutls_buffer_st * str, gnutls_x509_aki_t aki) err = gnutls_x509_aki_get_cert_issuer(aki, 0, &alt_type, &san, &other_oid, &serial); - if (err < 0) { + if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { + return; + } else if (err < 0) { addf(str, "error: gnutls_x509_aki_get_cert_issuer: %s\n", gnutls_strerror(err)); return; @@ -477,17 +483,18 @@ static void print_aki(gnutls_buffer_st * str, gnutls_datum_t *der) goto cleanup; } + /* Check if an alternative name is there */ + print_aki_gn_serial(str, aki); + err = gnutls_x509_aki_get_id(aki, &id); if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { - /* Check if an alternative name is there */ - print_aki_gn_serial(str, aki); goto cleanup; } else if (err < 0) { addf(str, "error: gnutls_x509_aki_get_id: %s\n", gnutls_strerror(err)); goto cleanup; } - + adds(str, "\t\t\t"); _gnutls_buffer_hexprint(str, id.data, id.size); adds(str, "\n"); @@ -620,7 +627,7 @@ print_key_purpose(gnutls_buffer_st * str, const char *prefix, gnutls_datum_t *de char *p; int err; gnutls_x509_key_purposes_t purposes; - + err = gnutls_x509_key_purpose_init(&purposes); if (err < 0) { addf(str, "error: gnutls_x509_key_purpose_init: %s\n", @@ -866,6 +873,116 @@ static void print_tlsfeatures(gnutls_buffer_st * str, const char *prefix, const gnutls_x509_tlsfeatures_deinit(features); } +static void print_subject_sign_tool(gnutls_buffer_st * str, const char *prefix, const gnutls_datum_t *der) +{ + int ret; + gnutls_datum_t tmp = {NULL, 0}; + + ret = _gnutls_x509_decode_string(ASN1_ETYPE_UTF8_STRING, der->data, der->size, &tmp, 0); + if (ret < 0) { + addf(str, _("%s\t\t\tASCII: "), prefix); + _gnutls_buffer_asciiprint(str, (char*)der->data, der->size); + + addf(str, "\n"); + addf(str, _("%s\t\t\tHexdump: "), prefix); + _gnutls_buffer_hexprint(str, (char*)der->data, der->size); + adds(str, "\n"); + + return; + } + + addf(str, _("%s\t\t\t%.*s\n"), prefix, tmp.size, NON_NULL(tmp.data)); + _gnutls_free_datum(&tmp); +} + +static void print_issuer_sign_tool(gnutls_buffer_st * str, const char *prefix, const gnutls_datum_t *der) +{ + int ret, result; + ASN1_TYPE tmpasn = ASN1_TYPE_EMPTY; + char asn1_err[ASN1_MAX_ERROR_DESCRIPTION_SIZE] = ""; + gnutls_datum_t tmp; + + if ((result = asn1_create_element(_gnutls_get_gnutls_asn(), "GNUTLS.IssuerSignTool", + &tmpasn)) != ASN1_SUCCESS) { + gnutls_assert(); + goto hexdump; + } + + if ((result = _asn1_strict_der_decode(&tmpasn, der->data, der->size, asn1_err)) != ASN1_SUCCESS) { + gnutls_assert(); + _gnutls_debug_log("_asn1_strict_der_decode: %s\n", asn1_err); + goto hexdump; + } + + ret = _gnutls_x509_read_value(tmpasn, "signTool", &tmp); + if (ret < 0) { + gnutls_assert(); + goto hexdump; + } + addf(str, _("%s\t\t\tSignTool: %.*s\n"), prefix, tmp.size, NON_NULL(tmp.data)); + _gnutls_free_datum(&tmp); + + ret = _gnutls_x509_read_value(tmpasn, "cATool", &tmp); + if (ret < 0) { + gnutls_assert(); + goto hexdump; + } + addf(str, _("%s\t\t\tCATool: %.*s\n"), prefix, tmp.size, NON_NULL(tmp.data)); + _gnutls_free_datum(&tmp); + + ret = _gnutls_x509_read_value(tmpasn, "signToolCert", &tmp); + if (ret < 0) { + gnutls_assert(); + goto hexdump; + } + addf(str, _("%s\t\t\tSignToolCert: %.*s\n"), prefix, tmp.size, NON_NULL(tmp.data)); + _gnutls_free_datum(&tmp); + + ret = _gnutls_x509_read_value(tmpasn, "cAToolCert", &tmp); + if (ret < 0) { + gnutls_assert(); + goto hexdump; + } + addf(str, _("%s\t\t\tCAToolCert: %.*s\n"), prefix, tmp.size, NON_NULL(tmp.data)); + _gnutls_free_datum(&tmp); + + asn1_delete_structure(&tmpasn); + + return; + +hexdump: + asn1_delete_structure(&tmpasn); + + addf(str, _("%s\t\t\tASCII: "), prefix); + _gnutls_buffer_asciiprint(str, (char*)der->data, der->size); + + addf(str, "\n"); + addf(str, _("%s\t\t\tHexdump: "), prefix); + _gnutls_buffer_hexprint(str, (char*)der->data, der->size); + adds(str, "\n"); +} + +#define ENTRY(oid, name) {oid, sizeof(oid)-1, name, sizeof(name)-1, NULL, 0} + +static const struct oid_to_string cp_oid2str[] = { + ENTRY("2.5.29.32.0", "anyPolicy"), + + ENTRY("2.23.140.1.2.1", "CA/B Domain Validated"), + ENTRY("2.23.140.1.2.2", "CA/B Organization Validated"), + ENTRY("2.23.140.1.2.3", "CA/B Individual Validated"), + ENTRY("2.23.140.1.1", "CA/B Extended Validation"), + + /* draft-deremin-rfc4491-bis */ + ENTRY("1.2.643.100.113.1", "Russian security class KC1"), + ENTRY("1.2.643.100.113.2", "Russian security class KC2"), + ENTRY("1.2.643.100.113.3", "Russian security class KC3"), + ENTRY("1.2.643.100.113.4", "Russian security class KB1"), + ENTRY("1.2.643.100.113.5", "Russian security class KB2"), + ENTRY("1.2.643.100.113.6", "Russian security class KA1"), + + {NULL, 0, NULL, 0}, +}; + struct ext_indexes_st { int san; int ian; @@ -918,6 +1035,7 @@ static void print_extension(gnutls_buffer_st * str, const char *prefix, struct gnutls_x509_policy_st policy; gnutls_x509_policies_t policies; const char *name; + const struct oid_to_string *entry; int x; err = gnutls_x509_policies_init(&policies); @@ -957,7 +1075,11 @@ static void print_extension(gnutls_buffer_st * str, const char *prefix, critical ? _("critical") : _("not critical")); - addf(str, "%s\t\t\t%s\n", prefix, policy.oid); + entry = _gnutls_oid_get_entry(cp_oid2str, policy.oid); + if (entry != NULL && entry->name_desc != NULL) + addf(str, "%s\t\t\t%s (%s)\n", prefix, policy.oid, entry->name_desc); + else + addf(str, "%s\t\t\t%s\n", prefix, policy.oid); for (j = 0; j < policy.qualifiers; j++) { if (policy.qualifier[j].type == GNUTLS_X509_QUALIFIER_URI) @@ -1128,6 +1250,34 @@ static void print_extension(gnutls_buffer_st * str, const char *prefix, print_tlsfeatures(str, prefix, der); idx->tlsfeatures++; + } else if (strcmp(oid, "1.2.643.100.111") == 0) { + addf(str, _("%s\t\tSubject Signing Tool(%s):\n"), + prefix, + critical ? _("critical") : _("not critical")); + + print_subject_sign_tool(str, prefix, der); + } else if (strcmp(oid, "1.2.643.100.112") == 0) { + addf(str, _("%s\t\tIssuer Signing Tool(%s):\n"), + prefix, + critical ? _("critical") : _("not critical")); + + print_issuer_sign_tool(str, prefix, der); + } else if (strcmp(oid, "2.5.4.3") == 0) { + int ret; + gnutls_datum_t tmp = {NULL, 0}; + + addf(str, _("%s\t\tCommon Name (%s):\n"), + prefix, + critical ? _("critical") : _("not critical")); + + ret = _gnutls_x509_decode_string(ASN1_ETYPE_PRINTABLE_STRING, der->data, der->size, &tmp, 0); + if (ret < 0) { + addf(str, "error: x509_decode_string: %s\n", + gnutls_strerror(ret)); + } else { + addf(str, "%s\t\t\t%s\n", prefix, tmp.data); + gnutls_free(tmp.data); + } } else { addf(str, _("%s\t\tUnknown extension %s (%s):\n"), prefix, oid, @@ -1177,12 +1327,12 @@ print_extensions(gnutls_buffer_st * str, const char *prefix, int type, return; } + if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + break; if (err < 0) { - if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) - break; addf(str, "error: get_extension_info: %s\n", gnutls_strerror(err)); - continue; + break; } if (i == 0) @@ -1203,14 +1353,27 @@ print_extensions(gnutls_buffer_st * str, const char *prefix, int type, } } +static void reverse_datum(gnutls_datum_t *d) +{ + unsigned int i; + unsigned char c; + + for (i = 0; i < d->size / 2; i++) { + c = d->data[i]; + d->data[i] = d->data[d->size - i - 1]; + d->data[d->size - i - 1] = c; + } +} + static void print_pubkey(gnutls_buffer_st * str, const char *key_name, - gnutls_pubkey_t pubkey, + gnutls_pubkey_t pubkey, gnutls_x509_spki_st *spki, gnutls_certificate_print_formats_t format) { - int err, pk; + int err; const char *name; unsigned bits; + unsigned pk; err = gnutls_pubkey_get_pk_algorithm(pubkey, &bits); if (err < 0) { @@ -1219,18 +1382,28 @@ print_pubkey(gnutls_buffer_st * str, const char *key_name, return; } - name = gnutls_pk_algorithm_get_name(err); + pk = err; + + name = gnutls_pk_algorithm_get_name(pk); if (name == NULL) name = _("unknown"); - pk = err; - addf(str, _("\t%sPublic Key Algorithm: %s\n"), key_name, name); + addf(str, _("\tAlgorithm Security Level: %s (%d bits)\n"), gnutls_sec_param_get_name(gnutls_pk_bits_to_sec_param (err, bits)), bits); + + if (spki && pk == GNUTLS_PK_RSA_PSS && spki->pk == pk) { + addf(str, _("\t\tParameters:\n")); + addf(str, "\t\t\tHash Algorithm: %s\n", + gnutls_digest_get_name(spki->rsa_pss_dig)); + addf(str, "\t\t\tSalt Length: %d\n", spki->salt_size); + } + switch (pk) { case GNUTLS_PK_RSA: + case GNUTLS_PK_RSA_PSS: { gnutls_datum_t m, e; @@ -1278,7 +1451,9 @@ print_pubkey(gnutls_buffer_st * str, const char *key_name, } break; - case GNUTLS_PK_EC: + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: + case GNUTLS_PK_ECDSA: { gnutls_datum_t x, y; gnutls_ecc_curve_t curve; @@ -1286,10 +1461,10 @@ print_pubkey(gnutls_buffer_st * str, const char *key_name, err = gnutls_pubkey_get_pk_ecc_raw(pubkey, &curve, &x, &y); - if (err < 0) + if (err < 0) { addf(str, "error: get_pk_ecc_raw: %s\n", gnutls_strerror(err)); - else { + } else { addf(str, _("\t\tCurve:\t%s\n"), gnutls_ecc_curve_get_name(curve)); if (format == @@ -1299,20 +1474,24 @@ print_pubkey(gnutls_buffer_st * str, const char *key_name, x.data, x.size); adds(str, "\n"); - adds(str, _("\t\tY: ")); - _gnutls_buffer_hexprint(str, - y.data, - y.size); - adds(str, "\n"); + if (y.size > 0) { + adds(str, _("\t\tY: ")); + _gnutls_buffer_hexprint(str, + y.data, + y.size); + adds(str, "\n"); + } } else { adds(str, _("\t\tX:\n")); _gnutls_buffer_hexdump(str, x.data, x.size, "\t\t\t"); - adds(str, _("\t\tY:\n")); - _gnutls_buffer_hexdump(str, y.data, - y.size, - "\t\t\t"); + if (y.size > 0) { + adds(str, _("\t\tY:\n")); + _gnutls_buffer_hexdump(str, y.data, + y.size, + "\t\t\t"); + } } gnutls_free(x.data); @@ -1388,45 +1567,147 @@ print_pubkey(gnutls_buffer_st * str, const char *key_name, } break; + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + { + gnutls_datum_t x, y; + gnutls_ecc_curve_t curve; + gnutls_digest_algorithm_t digest; + gnutls_gost_paramset_t param; + + err = + gnutls_pubkey_export_gost_raw2(pubkey, &curve, + &digest, + ¶m, + &x, &y, 0); + if (err < 0) + addf(str, "error: get_pk_gost_raw: %s\n", + gnutls_strerror(err)); + else { + addf(str, _("\t\tCurve:\t%s\n"), + gnutls_ecc_curve_get_name(curve)); + addf(str, _("\t\tDigest:\t%s\n"), + gnutls_digest_get_name(digest)); + addf(str, _("\t\tParamSet: %s\n"), + gnutls_gost_paramset_get_name(param)); + reverse_datum(&x); + reverse_datum(&y); + if (format == + GNUTLS_CRT_PRINT_FULL_NUMBERS) { + adds(str, _("\t\tX: ")); + _gnutls_buffer_hexprint(str, + x.data, + x.size); + adds(str, "\n"); + adds(str, _("\t\tY: ")); + _gnutls_buffer_hexprint(str, + y.data, + y.size); + adds(str, "\n"); + } else { + adds(str, _("\t\tX:\n")); + _gnutls_buffer_hexdump(str, x.data, + x.size, + "\t\t\t"); + adds(str, _("\t\tY:\n")); + _gnutls_buffer_hexdump(str, y.data, + y.size, + "\t\t\t"); + } + + gnutls_free(x.data); + gnutls_free(y.data); + + } + } + break; + default: break; } } +static int +print_crt_sig_params(gnutls_buffer_st * str, gnutls_x509_crt_t crt, + gnutls_certificate_print_formats_t format) +{ + int ret; + gnutls_pk_algorithm_t pk; + gnutls_x509_spki_st params; + gnutls_sign_algorithm_t sign; + + sign = gnutls_x509_crt_get_signature_algorithm(crt); + pk = gnutls_sign_get_pk_algorithm(sign); + if (pk == GNUTLS_PK_RSA_PSS) { + ret = _gnutls_x509_read_sign_params(crt->cert, + "signatureAlgorithm", + ¶ms); + if (ret < 0) { + addf(str, "error: read_pss_params: %s\n", + gnutls_strerror(ret)); + } else + addf(str, "\t\tSalt Length: %d\n", params.salt_size); + } + + return 0; +} + +static void print_pk_name(gnutls_buffer_st * str, gnutls_x509_crt_t crt) +{ + const char *p; + char *name = get_pk_name(crt, NULL); + if (name == NULL) + p = _("unknown"); + else + p = name; + + addf(str, "\tSubject Public Key Algorithm: %s\n", p); + gnutls_free(name); +} + static int print_crt_pubkey(gnutls_buffer_st * str, gnutls_x509_crt_t crt, gnutls_certificate_print_formats_t format) { - gnutls_pubkey_t pubkey; - int ret; + gnutls_pubkey_t pubkey = NULL; + gnutls_x509_spki_st params; + int ret, pk; + + ret = _gnutls_x509_crt_read_spki_params(crt, ¶ms); + if (ret < 0) + return ret; + + pk = gnutls_x509_crt_get_pk_algorithm(crt, NULL); + if (pk < 0) { + gnutls_assert(); + pk = GNUTLS_PK_UNKNOWN; + } + + if (pk == GNUTLS_PK_UNKNOWN) { + print_pk_name(str, crt); /* print basic info only */ + return 0; + } ret = gnutls_pubkey_init(&pubkey); if (ret < 0) return ret; ret = gnutls_pubkey_import_x509(pubkey, crt, 0); - if (ret < 0) + if (ret < 0) { + if (ret != GNUTLS_E_UNIMPLEMENTED_FEATURE) + addf(str, "error importing public key: %s\n", gnutls_strerror(ret)); + print_pk_name(str, crt); /* print basic info only */ + ret = 0; goto cleanup; + } - print_pubkey(str, _("Subject "), pubkey, format); + print_pubkey(str, _("Subject "), pubkey, ¶ms, format); ret = 0; - cleanup: + cleanup: gnutls_pubkey_deinit(pubkey); - if (ret < 0) { /* print only name */ - const char *p; - char *name = get_pk_name(crt, NULL); - if (name == NULL) - p = _("unknown"); - else - p = name; - - addf(str, "\tSubject Public Key Algorithm: %s\n", p); - gnutls_free(name); - ret = 0; - } - return ret; } @@ -1573,7 +1854,9 @@ print_cert(gnutls_buffer_st * str, gnutls_x509_crt_t cert, addf(str, _("\tSignature Algorithm: %s\n"), p); gnutls_free(name); - if (err != GNUTLS_SIGN_UNKNOWN && gnutls_sign_is_secure(err) == 0) { + print_crt_sig_params(str, cert, format); + + if (err != GNUTLS_SIGN_UNKNOWN && gnutls_sign_is_secure2(err, GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS) == 0) { adds(str, _("warning: signed using a broken signature " "algorithm that can be forged.\n")); @@ -1690,19 +1973,28 @@ static void print_keyid(gnutls_buffer_st * str, gnutls_x509_crt_t cert) unsigned char sha1_buffer[MAX_HASH_SIZE]; size_t sha1_size; - print_obj_id(str, "\t", cert, (get_id_func*)gnutls_x509_crt_get_key_id); - err = gnutls_x509_crt_get_pk_algorithm(cert, &bits); if (err < 0) return; - if (err == GNUTLS_PK_EC) { + print_obj_id(str, "\t", cert, (get_id_func*)gnutls_x509_crt_get_key_id); + + if (IS_EC(err)) { gnutls_ecc_curve_t curve; err = gnutls_x509_crt_get_pk_ecc_raw(cert, &curve, NULL, NULL); if (err < 0) return; + name = gnutls_ecc_curve_get_name(curve); + bits = 0; + } else if (IS_GOSTEC(err)) { + gnutls_ecc_curve_t curve; + + err = gnutls_x509_crt_get_pk_gost_raw(cert, &curve, NULL, NULL, NULL, NULL); + if (err < 0) + return; + name = gnutls_ecc_curve_get_name(curve); bits = 0; } else { @@ -1800,7 +2092,7 @@ static void print_oneline(gnutls_buffer_st * str, gnutls_x509_crt_t cert) else p = name; - if (err != GNUTLS_SIGN_UNKNOWN && gnutls_sign_is_secure( err) == 0) + if (err != GNUTLS_SIGN_UNKNOWN && gnutls_sign_is_secure2(err, GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS) == 0) addf(str, _("signed using %s (broken!), "), p); else addf(str, _("signed using %s, "), p); @@ -1880,10 +2172,7 @@ static void print_oneline(gnutls_buffer_st * str, gnutls_x509_crt_t cert) err = gnutls_x509_crt_get_key_id(cert, GNUTLS_KEYID_USE_SHA256, buffer, &size); - if (err < 0) { - addf(str, "key PIN error (%s)", - gnutls_strerror(err)); - } else { + if (err >= 0) { addf(str, "pin-sha256=\""); _gnutls_buffer_base64print(str, buffer, size); adds(str, "\""); @@ -1960,9 +2249,7 @@ print_crl(gnutls_buffer_st * str, gnutls_x509_crl_t crl, int notsigned) /* Version. */ { int version = gnutls_x509_crl_get_version(crl); - if (version == GNUTLS_E_ASN1_ELEMENT_NOT_FOUND) - adds(str, _("\tVersion: 1 (default)\n")); - else if (version < 0) + if (version < 0) addf(str, "error: get_version: %s\n", gnutls_strerror(version)); else @@ -2047,14 +2334,13 @@ print_crl(gnutls_buffer_st * str, gnutls_x509_crl_t crl, int notsigned) oid, &sizeof_oid, &critical); + if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + break; if (err < 0) { - if (err == - GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) - break; addf(str, "error: get_extension_info: %s\n", gnutls_strerror(err)); - continue; + break; } if (i == 0) @@ -2220,7 +2506,7 @@ print_crl(gnutls_buffer_st * str, gnutls_x509_crl_t crl, int notsigned) addf(str, _("\tSignature Algorithm: %s\n"), p); gnutls_free(name); - if (err != GNUTLS_SIGN_UNKNOWN && gnutls_sign_is_secure(err) == 0) { + if (err != GNUTLS_SIGN_UNKNOWN && gnutls_sign_is_secure2(err, GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS) == 0) { adds(str, _("warning: signed using a broken signature " "algorithm that can be forged.\n")); @@ -2286,13 +2572,43 @@ gnutls_x509_crl_print(gnutls_x509_crl_t crl, return _gnutls_buffer_to_datum(&str, out, 1); } +static int +print_crq_sig_params(gnutls_buffer_st * str, gnutls_x509_crq_t crt, + gnutls_certificate_print_formats_t format) +{ + int ret; + gnutls_pk_algorithm_t pk; + gnutls_x509_spki_st params; + gnutls_sign_algorithm_t sign; + + sign = gnutls_x509_crq_get_signature_algorithm(crt); + pk = gnutls_sign_get_pk_algorithm(sign); + if (pk == GNUTLS_PK_RSA_PSS) { + ret = _gnutls_x509_read_sign_params(crt->crq, + "signatureAlgorithm", + ¶ms); + if (ret < 0) { + addf(str, "error: read_pss_params: %s\n", + gnutls_strerror(ret)); + } else + addf(str, "\t\tSalt Length: %d\n", params.salt_size); + } + + return 0; +} + static int print_crq_pubkey(gnutls_buffer_st * str, gnutls_x509_crq_t crq, gnutls_certificate_print_formats_t format) { gnutls_pubkey_t pubkey; + gnutls_x509_spki_st params; int ret; + ret = _gnutls_x509_crq_read_spki_params(crq, ¶ms); + if (ret < 0) + return ret; + ret = gnutls_pubkey_init(&pubkey); if (ret < 0) return ret; @@ -2301,7 +2617,7 @@ print_crq_pubkey(gnutls_buffer_st * str, gnutls_x509_crq_t crq, if (ret < 0) goto cleanup; - print_pubkey(str, _("Subject "), pubkey, format); + print_pubkey(str, _("Subject "), pubkey, ¶ms, format); ret = 0; cleanup: @@ -2369,6 +2685,8 @@ print_crq(gnutls_buffer_st * str, gnutls_x509_crq_t cert, addf(str, _("\tSignature Algorithm: %s\n"), p); gnutls_free(name); + + print_crq_sig_params(str, cert, format); } /* parse attributes */ @@ -2386,14 +2704,13 @@ print_crq(gnutls_buffer_st * str, gnutls_x509_crq_t cert, gnutls_x509_crq_get_attribute_info(cert, i, oid, &sizeof_oid); + if (err == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + break; if (err < 0) { - if (err == - GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) - break; addf(str, "error: get_extension_info: %s\n", gnutls_strerror(err)); - continue; + break; } if (i == 0) @@ -2514,6 +2831,13 @@ print_crq(gnutls_buffer_st * str, gnutls_x509_crq_t cert, static void print_crq_other(gnutls_buffer_st * str, gnutls_x509_crq_t crq) { + int ret; + + /* on unknown public key algorithms don't print the key ID */ + ret = gnutls_x509_crq_get_pk_algorithm(crq, NULL); + if (ret < 0) + return; + print_obj_id(str, "\t", crq, (get_id_func*)gnutls_x509_crq_get_key_id); } @@ -2574,6 +2898,11 @@ print_pubkey_other(gnutls_buffer_st * str, gnutls_pubkey_t pubkey, print_key_usage2(str, "\t", pubkey->key_usage); } + /* on unknown public key algorithms don't print the key ID */ + ret = gnutls_pubkey_get_pk_algorithm(pubkey, NULL); + if (ret < 0) + return; + print_obj_id(str, "", pubkey, (get_id_func*)gnutls_pubkey_get_key_id); } @@ -2607,7 +2936,7 @@ gnutls_pubkey_print(gnutls_pubkey_t pubkey, _gnutls_buffer_append_str(&str, _("Public Key Information:\n")); - print_pubkey(&str, "", pubkey, format); + print_pubkey(&str, "", pubkey, NULL, format); print_pubkey_other(&str, pubkey, format); return _gnutls_buffer_to_datum(&str, out, 1); @@ -2620,7 +2949,7 @@ gnutls_pubkey_print(gnutls_pubkey_t pubkey, * @format: Indicate the format to use * @out: Newly allocated datum with null terminated string. * - * This function will pretty print X.509 certificate extensions, + * This function will pretty print X.509 certificate extensions, * suitable for display to a human. * * The output @out needs to be deallocated using gnutls_free(). diff --git a/lib/x509/pkcs12.c b/lib/x509/pkcs12.c index 2b7b8d6402..cdb284026a 100644 --- a/lib/x509/pkcs12.c +++ b/lib/x509/pkcs12.c @@ -18,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -442,16 +442,17 @@ _pkcs12_decode_safe_contents(const gnutls_datum_t * content, || bag_type == GNUTLS_BAG_CRL || bag_type == GNUTLS_BAG_SECRET) { gnutls_datum_t tmp = bag->element[i].data; + bag->element[i].data.data = NULL; + bag->element[i].data.size = 0; result = _pkcs12_decode_crt_bag(bag_type, &tmp, &bag->element[i].data); + _gnutls_free_datum(&tmp); if (result < 0) { gnutls_assert(); goto cleanup; } - - _gnutls_free_datum(&tmp); } /* read the bag attributes @@ -822,7 +823,7 @@ int gnutls_pkcs12_set_bag(gnutls_pkcs12_t pkcs12, gnutls_pkcs12_bag_t bag) asn1_delete_structure(&safe_cont); - /* Step 5. Reencode and copy the AuthenticatedSafe into the pkcs12 + /* Step 5. Re-encode and copy the AuthenticatedSafe into the pkcs12 * structure. */ result = @@ -843,6 +844,46 @@ int gnutls_pkcs12_set_bag(gnutls_pkcs12_t pkcs12, gnutls_pkcs12_bag_t bag) return result; } +#if ENABLE_GOST +/* + * Russian differs from PKCS#12 here. It described proprietary way + * to obtain MAC key instead of using standard mechanism. + * + * See https://wwwold.tc26.ru/standard/rs/%D0%A0%2050.1.112-2016.pdf + * section 5. + */ +static int +_gnutls_pkcs12_gost_string_to_key(gnutls_mac_algorithm_t algo, + const uint8_t * salt, + unsigned int salt_size, unsigned int iter, + const char *pass, unsigned int req_keylen, + uint8_t * keybuf) +{ + uint8_t temp[96]; + size_t temp_len = sizeof(temp); + gnutls_datum_t key; + gnutls_datum_t _salt; + int ret; + + if (iter == 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + key.data = (void *)pass; + key.size = pass ? strlen(pass) : 0; + + _salt.data = (void *)salt; + _salt.size = salt_size; + + ret = gnutls_pbkdf2(algo, &key, &_salt, iter, temp, temp_len); + if (ret < 0) + return gnutls_assert_val(ret); + + memcpy(keybuf, temp + temp_len - req_keylen, req_keylen); + + return 0; +} +#endif + /** * gnutls_pkcs12_generate_mac2: * @pkcs12: A pkcs12 type @@ -861,7 +902,7 @@ int gnutls_pkcs12_generate_mac2(gnutls_pkcs12_t pkcs12, gnutls_mac_algorithm_t m const int iter = 10*1024; mac_hd_st td1; gnutls_datum_t tmp = { NULL, 0 }; - unsigned mac_size; + unsigned mac_size, key_len; uint8_t mac_out[MAX_HASH_SIZE]; const mac_entry_st *me = mac_to_entry(mac); @@ -872,6 +913,7 @@ int gnutls_pkcs12_generate_mac2(gnutls_pkcs12_t pkcs12, gnutls_mac_algorithm_t m return gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); mac_size = _gnutls_mac_get_algo_len(me); + key_len = mac_size; /* Generate the salt. */ @@ -907,9 +949,24 @@ int gnutls_pkcs12_generate_mac2(gnutls_pkcs12_t pkcs12, gnutls_mac_algorithm_t m /* Generate the key. */ - result = - _gnutls_pkcs12_string_to_key(me, 3 /*MAC*/, salt, sizeof(salt), - iter, pass, mac_size, key); +#if ENABLE_GOST + if (me->id == GNUTLS_MAC_GOSTR_94 || + me->id == GNUTLS_MAC_STREEBOG_256 || + me->id == GNUTLS_MAC_STREEBOG_512) { + key_len = 32; + result = _gnutls_pkcs12_gost_string_to_key(me->id, + salt, + sizeof(salt), + iter, + pass, + key_len, + key); + } else +#endif + result = _gnutls_pkcs12_string_to_key(me, 3 /*MAC*/, + salt, sizeof(salt), + iter, pass, + mac_size, key); if (result < 0) { gnutls_assert(); goto cleanup; @@ -926,7 +983,7 @@ int gnutls_pkcs12_generate_mac2(gnutls_pkcs12_t pkcs12, gnutls_mac_algorithm_t m /* MAC the data */ result = _gnutls_mac_init(&td1, me, - key, mac_size); + key, key_len); if (result < 0) { gnutls_assert(); goto cleanup; @@ -1014,6 +1071,9 @@ int gnutls_pkcs12_verify_mac(gnutls_pkcs12_t pkcs12, const char *pass) gnutls_mac_algorithm_t algo; unsigned mac_len, key_len; const mac_entry_st *entry; +#if ENABLE_GOST + int gost_retry = 0; +#endif if (pkcs12 == NULL) { gnutls_assert(); @@ -1064,16 +1124,15 @@ int gnutls_pkcs12_verify_mac(gnutls_pkcs12_t pkcs12, const char *pass) /* Generate the key. */ - result = - _gnutls_pkcs12_string_to_key(entry, 3 /*MAC*/, salt.data, salt.size, - iter, pass, key_len, key); + result = _gnutls_pkcs12_string_to_key(entry, 3 /*MAC*/, + salt.data, salt.size, + iter, pass, + key_len, key); if (result < 0) { gnutls_assert(); goto cleanup; } - _gnutls_free_datum(&salt); - /* Get the data to be MACed */ result = _decode_pkcs12_auth_safe(pkcs12->pkcs12, NULL, &tmp); @@ -1082,6 +1141,12 @@ int gnutls_pkcs12_verify_mac(gnutls_pkcs12_t pkcs12, const char *pass) goto cleanup; } +#if ENABLE_GOST + /* GOST PKCS#12 files use either PKCS#12 scheme or proprietary + * HMAC-based scheme to generate MAC key. */ +pkcs12_try_gost: +#endif + /* MAC the data */ result = _gnutls_mac_init(&td1, entry, key, key_len); @@ -1091,7 +1156,6 @@ int gnutls_pkcs12_verify_mac(gnutls_pkcs12_t pkcs12, const char *pass) } _gnutls_mac(&td1, tmp.data, tmp.size); - _gnutls_free_datum(&tmp); _gnutls_mac_deinit(&td1, mac_output); @@ -1107,13 +1171,39 @@ int gnutls_pkcs12_verify_mac(gnutls_pkcs12_t pkcs12, const char *pass) if ((unsigned)len != mac_len || memcmp(mac_output_orig, mac_output, len) != 0) { + +#if ENABLE_GOST + /* It is possible that GOST files use proprietary + * key generation scheme */ + if (!gost_retry && + (algo == GNUTLS_MAC_GOSTR_94 || + algo == GNUTLS_MAC_STREEBOG_256 || + algo == GNUTLS_MAC_STREEBOG_512)) { + gost_retry = 1; + key_len = 32; + result = _gnutls_pkcs12_gost_string_to_key(algo, + salt.data, + salt.size, + iter, + pass, + key_len, + key); + if (result < 0) { + gnutls_assert(); + goto cleanup; + } + + goto pkcs12_try_gost; + } +#endif + gnutls_assert(); - return GNUTLS_E_MAC_VERIFY_FAILED; + result = GNUTLS_E_MAC_VERIFY_FAILED; + goto cleanup; } - return 0; - - cleanup: + result = 0; + cleanup: _gnutls_free_datum(&tmp); _gnutls_free_datum(&salt); return result; @@ -1541,7 +1631,7 @@ gnutls_pkcs12_simple_parse(gnutls_pkcs12_t p12, goto done; } - /* fallthrough */ + FALLTHROUGH; case GNUTLS_BAG_PKCS8_KEY: if (*key != NULL) { /* too simple to continue */ gnutls_assert(); @@ -1920,12 +2010,13 @@ gnutls_pkcs12_mac_info(gnutls_pkcs12_t pkcs12, unsigned int *mac, memcpy(salt, dsalt.data, dsalt.size); } else { *salt_size = dsalt.size; - return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER); + ret = gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER); + goto cleanup; } } ret = 0; - cleanup: + cleanup: _gnutls_free_datum(&tmp); _gnutls_free_datum(&dsalt); return ret; diff --git a/lib/x509/pkcs12_bag.c b/lib/x509/pkcs12_bag.c index 26d2142ea0..163b0fadb6 100644 --- a/lib/x509/pkcs12_bag.c +++ b/lib/x509/pkcs12_bag.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -62,7 +62,6 @@ static inline void _pkcs12_bag_free_data(gnutls_pkcs12_bag_t bag) _gnutls_free_datum(&bag->element[i].data); _gnutls_free_datum(&bag->element[i].local_key_id); gnutls_free(bag->element[i].friendly_name); - bag->element[i].friendly_name = NULL; bag->element[i].type = 0; } diff --git a/lib/x509/pkcs12_encr.c b/lib/x509/pkcs12_encr.c index 5faf75f69c..0327982232 100644 --- a/lib/x509/pkcs12_encr.c +++ b/lib/x509/pkcs12_encr.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -61,9 +61,14 @@ _gnutls_pkcs12_string_to_key(const mac_entry_st * me, unsigned v_size = 0; switch (me->id) { + case GNUTLS_DIG_GOSTR_94: + v_size = 32; + break; case GNUTLS_DIG_SHA1: case GNUTLS_DIG_SHA224: case GNUTLS_DIG_SHA256: + case GNUTLS_DIG_STREEBOG_256: + case GNUTLS_DIG_STREEBOG_512: v_size = 64; break; case GNUTLS_DIG_SHA384: @@ -91,7 +96,7 @@ _gnutls_pkcs12_string_to_key(const mac_entry_st * me, return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); ucs2.size = 2; } else { - rc = _gnutls_utf8_to_ucs2(pw, pwlen, &ucs2); + rc = _gnutls_utf8_to_ucs2(pw, pwlen, &ucs2, 1); if (rc < 0) return gnutls_assert_val(rc); diff --git a/lib/x509/pkcs7-attrs.c b/lib/x509/pkcs7-attrs.c index c948bca224..25f947276f 100644 --- a/lib/x509/pkcs7-attrs.c +++ b/lib/x509/pkcs7-attrs.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/x509/pkcs7-crypt.c b/lib/x509/pkcs7-crypt.c index 1f6298d36c..274ac14248 100644 --- a/lib/x509/pkcs7-crypt.c +++ b/lib/x509/pkcs7-crypt.c @@ -18,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -36,7 +36,6 @@ #include #include #include -#include #define PBES1_DES_MD5_OID "1.2.840.113549.1.5.3" @@ -63,6 +62,7 @@ static const struct pkcs_cipher_schema_st avail_pkcs_cipher_schemas[] = { .cipher_oid = PBES1_DES_MD5_OID, .write_oid = PBES1_DES_MD5_OID, .desc = NULL, + .iv_name = NULL, .decrypt_only = 1}, { .schema = PBES2_3DES, @@ -73,6 +73,7 @@ static const struct pkcs_cipher_schema_st avail_pkcs_cipher_schemas[] = { .cipher_oid = DES_EDE3_CBC_OID, .write_oid = PBES2_OID, .desc = "PKIX1.pkcs-5-des-EDE3-CBC-params", + .iv_name = "", .decrypt_only = 0}, { .schema = PBES2_DES, @@ -83,6 +84,7 @@ static const struct pkcs_cipher_schema_st avail_pkcs_cipher_schemas[] = { .cipher_oid = DES_CBC_OID, .write_oid = PBES2_OID, .desc = "PKIX1.pkcs-5-des-CBC-params", + .iv_name = "", .decrypt_only = 0}, { .schema = PBES2_AES_128, @@ -93,6 +95,7 @@ static const struct pkcs_cipher_schema_st avail_pkcs_cipher_schemas[] = { .cipher_oid = AES_128_CBC_OID, .write_oid = PBES2_OID, .desc = "PKIX1.pkcs-5-aes128-CBC-params", + .iv_name = "", .decrypt_only = 0}, { .schema = PBES2_AES_192, @@ -103,6 +106,7 @@ static const struct pkcs_cipher_schema_st avail_pkcs_cipher_schemas[] = { .cipher_oid = AES_192_CBC_OID, .write_oid = PBES2_OID, .desc = "PKIX1.pkcs-5-aes192-CBC-params", + .iv_name = "", .decrypt_only = 0}, { .schema = PBES2_AES_256, @@ -113,6 +117,62 @@ static const struct pkcs_cipher_schema_st avail_pkcs_cipher_schemas[] = { .cipher_oid = AES_256_CBC_OID, .write_oid = PBES2_OID, .desc = "PKIX1.pkcs-5-aes256-CBC-params", + .iv_name = "", + .decrypt_only = 0}, + { + .schema = PBES2_GOST28147_89_TC26Z, + .name = "PBES2-GOST28147-89-TC26Z", + .flag = GNUTLS_PKCS_PBES2_GOST_TC26Z, + .cipher = GNUTLS_CIPHER_GOST28147_TC26Z_CFB, + .pbes2 = 1, + .cipher_oid = GOST28147_89_TC26Z_OID, + .write_oid = PBES2_OID, + .desc = "PKIX1.Gost28147-89-Parameters", + .iv_name = "iv", + .decrypt_only = 0}, + { + .schema = PBES2_GOST28147_89_CPA, + .name = "PBES2-GOST28147-89-CPA", + .flag = GNUTLS_PKCS_PBES2_GOST_CPA, + .cipher = GNUTLS_CIPHER_GOST28147_CPA_CFB, + .pbes2 = 1, + .cipher_oid = GOST28147_89_CPA_OID, + .write_oid = PBES2_OID, + .desc = "PKIX1.Gost28147-89-Parameters", + .iv_name = "iv", + .decrypt_only = 0}, + { + .schema = PBES2_GOST28147_89_CPB, + .name = "PBES2-GOST28147-89-CPB", + .flag = GNUTLS_PKCS_PBES2_GOST_CPB, + .cipher = GNUTLS_CIPHER_GOST28147_CPB_CFB, + .pbes2 = 1, + .cipher_oid = GOST28147_89_CPB_OID, + .write_oid = PBES2_OID, + .desc = "PKIX1.Gost28147-89-Parameters", + .iv_name = "iv", + .decrypt_only = 0}, + { + .schema = PBES2_GOST28147_89_CPC, + .name = "PBES2-GOST28147-89-CPC", + .flag = GNUTLS_PKCS_PBES2_GOST_CPC, + .cipher = GNUTLS_CIPHER_GOST28147_CPC_CFB, + .pbes2 = 1, + .cipher_oid = GOST28147_89_CPC_OID, + .write_oid = PBES2_OID, + .desc = "PKIX1.Gost28147-89-Parameters", + .iv_name = "iv", + .decrypt_only = 0}, + { + .schema = PBES2_GOST28147_89_CPD, + .name = "PBES2-GOST28147-89-CPD", + .flag = GNUTLS_PKCS_PBES2_GOST_CPD, + .cipher = GNUTLS_CIPHER_GOST28147_CPD_CFB, + .pbes2 = 1, + .cipher_oid = GOST28147_89_CPD_OID, + .write_oid = PBES2_OID, + .desc = "PKIX1.Gost28147-89-Parameters", + .iv_name = "iv", .decrypt_only = 0}, { .schema = PKCS12_ARCFOUR_SHA1, @@ -123,6 +183,7 @@ static const struct pkcs_cipher_schema_st avail_pkcs_cipher_schemas[] = { .cipher_oid = PKCS12_PBE_ARCFOUR_SHA1_OID, .write_oid = PKCS12_PBE_ARCFOUR_SHA1_OID, .desc = NULL, + .iv_name = NULL, .decrypt_only = 0}, { .schema = PKCS12_RC2_40_SHA1, @@ -133,6 +194,7 @@ static const struct pkcs_cipher_schema_st avail_pkcs_cipher_schemas[] = { .cipher_oid = PKCS12_PBE_RC2_40_SHA1_OID, .write_oid = PKCS12_PBE_RC2_40_SHA1_OID, .desc = NULL, + .iv_name = NULL, .decrypt_only = 0}, { .schema = PKCS12_3DES_SHA1, @@ -143,6 +205,7 @@ static const struct pkcs_cipher_schema_st avail_pkcs_cipher_schemas[] = { .cipher_oid = PKCS12_PBE_3DES_SHA1_OID, .write_oid = PKCS12_PBE_3DES_SHA1_OID, .desc = NULL, + .iv_name = NULL, .decrypt_only = 0}, {0, 0, 0, 0, 0} }; @@ -784,6 +847,42 @@ write_pkcs12_kdf_params(ASN1_TYPE pasn, const struct pbkdf2_params *kdf_params) } +static int +read_pbes2_gost_oid(uint8_t *der, size_t len, char *oid, int oid_size) +{ + int result; + ASN1_TYPE pbe_asn = ASN1_TYPE_EMPTY; + + if ((result = + asn1_create_element(_gnutls_get_pkix(), + "PKIX1.Gost28147-89-Parameters", &pbe_asn)) != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + result = + _asn1_strict_der_decode(&pbe_asn, der, len, NULL); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto error; + } + + result = asn1_read_value(pbe_asn, "encryptionParamSet", + oid, &oid_size); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto error; + } + + result = 0; + + error: + asn1_delete_structure(&pbe_asn); + return result; +} + static int read_pbes2_enc_params(ASN1_TYPE pasn, const gnutls_datum_t * der, struct pbe_enc_params *params) @@ -805,11 +904,6 @@ read_pbes2_enc_params(ASN1_TYPE pasn, } _gnutls_hard_log("encryptionScheme.algorithm: %s\n", params->pbes2_oid); - if ((result = pbes2_cipher_oid_to_algo(params->pbes2_oid, ¶ms->cipher)) < 0) { - gnutls_assert(); - return result; - } - result = asn1_der_decoding_startEnd(pasn, der->data, der->size, "encryptionScheme.parameters", @@ -820,6 +914,22 @@ read_pbes2_enc_params(ASN1_TYPE pasn, } params_len = params_end - params_start + 1; + /* For GOST we have to read params to determine actual cipher */ + if (!strcmp(params->pbes2_oid, GOST28147_89_OID)) { + len = sizeof(params->pbes2_oid); + result = read_pbes2_gost_oid(&der->data[params_start], + params_len, params->pbes2_oid, len); + if (result < 0) { + gnutls_assert(); + return result; + } + } + + if ((result = pbes2_cipher_oid_to_algo(params->pbes2_oid, ¶ms->cipher)) < 0) { + gnutls_assert(); + return result; + } + /* Now check the encryption parameters. */ p = algo_to_pbes2_cipher_schema(params->cipher); @@ -846,7 +956,9 @@ read_pbes2_enc_params(ASN1_TYPE pasn, /* read the IV */ params->iv_size = sizeof(params->iv); - result = asn1_read_value(pbe_asn, "", params->iv, ¶ms->iv_size); + result = asn1_read_value(pbe_asn, + p->iv_name, + params->iv, ¶ms->iv_size); if (result != ASN1_SUCCESS) { gnutls_assert(); result = _gnutls_asn2err(result); @@ -991,6 +1103,23 @@ _gnutls_read_pkcs_schema_params(schema_id * schema, const char *password, return result; } +static int +_gnutls_pbes2_string_to_key(unsigned int pass_len, const char *password, + const struct pbkdf2_params *kdf_params, + int key_size, uint8_t *key) +{ + gnutls_datum_t _key; + gnutls_datum_t salt; + + _key.data = (void *)password; + _key.size = pass_len; + salt.data = (void *)kdf_params->salt; + salt.size = kdf_params->salt_size; + + return gnutls_pbkdf2(kdf_params->mac, &_key, &salt, + kdf_params->iter_count, key, key_size); +} + int _gnutls_pkcs_raw_decrypt_data(schema_id schema, ASN1_TYPE pkcs8_asn, const char *root, const char *_password, @@ -1056,19 +1185,11 @@ _gnutls_pkcs_raw_decrypt_data(schema_id schema, ASN1_TYPE pkcs8_asn, */ p = _gnutls_pkcs_schema_get(schema); if (p != NULL && p->pbes2 != 0) { /* PBES2 */ - if (kdf_params->mac == GNUTLS_MAC_SHA1) - pbkdf2_hmac_sha1(pass_len, (uint8_t *) password, - kdf_params->iter_count, - kdf_params->salt_size, - kdf_params->salt, key_size, key); - else if (kdf_params->mac == GNUTLS_MAC_SHA256) - pbkdf2_hmac_sha256(pass_len, (uint8_t *) password, - kdf_params->iter_count, - kdf_params->salt_size, - kdf_params->salt, key_size, key); - else { - ret = - gnutls_assert_val(GNUTLS_E_UNKNOWN_HASH_ALGORITHM); + ret = _gnutls_pbes2_string_to_key(pass_len, password, + kdf_params, + key_size, key); + if (ret < 0) { + gnutls_assert(); goto error; } } else if (p != NULL) { /* PKCS 12 schema */ @@ -1120,7 +1241,6 @@ _gnutls_pkcs_raw_decrypt_data(schema_id schema, ASN1_TYPE pkcs8_asn, _gnutls_cipher_init(&ch, ce, &dkey, &d_iv, 0); gnutls_free(key); - key = NULL; if (ret < 0) { gnutls_assert(); @@ -1187,6 +1307,7 @@ write_pbkdf2_params(ASN1_TYPE pasn, const struct pbkdf2_params *kdf_params) int result; ASN1_TYPE pbkdf2_asn = ASN1_TYPE_EMPTY; uint8_t tmp[MAX_OID_SIZE]; + const mac_entry_st *me; /* Write the key derivation algorithm */ @@ -1249,9 +1370,22 @@ write_pbkdf2_params(ASN1_TYPE pasn, const struct pbkdf2_params *kdf_params) goto error; } - /* We write an emptry prf. - */ - result = asn1_write_value(pbkdf2_asn, "prf", NULL, 0); + me = _gnutls_mac_to_entry(kdf_params->mac); + if (!me || !me->mac_oid) { + gnutls_assert(); + result = GNUTLS_E_INTERNAL_ERROR; + goto error; + } + + result = asn1_write_value(pbkdf2_asn, "prf.algorithm", + me->mac_oid, strlen(me->mac_oid)); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto error; + } + + result = asn1_write_value(pbkdf2_asn, "prf.parameters", NULL, 0); if (result != ASN1_SUCCESS) { gnutls_assert(); result = _gnutls_asn2err(result); @@ -1284,6 +1418,7 @@ write_pbes2_enc_params(ASN1_TYPE pasn, const struct pbe_enc_params *params) int result; ASN1_TYPE pbe_asn = ASN1_TYPE_EMPTY; const struct pkcs_cipher_schema_st *p; + const char *cipher_oid; /* Write the encryption algorithm */ @@ -1293,15 +1428,6 @@ write_pbes2_enc_params(ASN1_TYPE pasn, const struct pbe_enc_params *params) return GNUTLS_E_INVALID_REQUEST; } - result = - asn1_write_value(pasn, "encryptionScheme.algorithm", p->cipher_oid, - 1); - if (result != ASN1_SUCCESS) { - gnutls_assert(); - goto error; - } - _gnutls_hard_log("encryptionScheme.algorithm: %s\n", p->cipher_oid); - /* Now check the encryption parameters. */ if ((result = @@ -1311,8 +1437,36 @@ write_pbes2_enc_params(ASN1_TYPE pasn, const struct pbe_enc_params *params) return _gnutls_asn2err(result); } + if (p->schema == PBES2_GOST28147_89_TC26Z || + p->schema == PBES2_GOST28147_89_CPA || + p->schema == PBES2_GOST28147_89_CPB || + p->schema == PBES2_GOST28147_89_CPC || + p->schema == PBES2_GOST28147_89_CPD) { + cipher_oid = GOST28147_89_OID; + result = asn1_write_value(pbe_asn, "encryptionParamSet", + p->cipher_oid, 1); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto error; + } + } else { + cipher_oid = p->cipher_oid; + } + + result = + asn1_write_value(pasn, "encryptionScheme.algorithm", + cipher_oid, + 1); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + goto error; + } + _gnutls_hard_log("encryptionScheme.algorithm: %s\n", cipher_oid); + /* read the salt */ - result = asn1_write_value(pbe_asn, "", params->iv, params->iv_size); + result = asn1_write_value(pbe_asn, p->iv_name, + params->iv, params->iv_size); if (result != ASN1_SUCCESS) { gnutls_assert(); result = _gnutls_asn2err(result); @@ -1414,10 +1568,23 @@ _gnutls_pkcs_generate_key(schema_id schema, */ if (p->pbes2 != 0) { - pbkdf2_hmac_sha1(pass_len, (uint8_t *) password, - kdf_params->iter_count, - kdf_params->salt_size, kdf_params->salt, - kdf_params->key_size, key->data); + if (p->schema == PBES2_GOST28147_89_TC26Z) + kdf_params->mac = GNUTLS_MAC_STREEBOG_256; + else if (p->schema == PBES2_GOST28147_89_CPA || + p->schema == PBES2_GOST28147_89_CPB || + p->schema == PBES2_GOST28147_89_CPC || + p->schema == PBES2_GOST28147_89_CPD) + kdf_params->mac = GNUTLS_MAC_GOSTR_94; + else + kdf_params->mac = GNUTLS_MAC_SHA1; + ret = _gnutls_pbes2_string_to_key(pass_len, password, + kdf_params, + kdf_params->key_size, + key->data); + if (ret < 0) { + gnutls_assert(); + return ret; + } if (enc_params->iv_size) { ret = gnutls_rnd(GNUTLS_RND_NONCE, @@ -1552,7 +1719,7 @@ _gnutls_pkcs_write_schema_params(schema_id schema, ASN1_TYPE pkcs8_asn, int _gnutls_pkcs_raw_encrypt_data(const gnutls_datum_t * plain, const struct pbe_enc_params *enc_params, - gnutls_datum_t * key, gnutls_datum_t * encrypted) + const gnutls_datum_t * key, gnutls_datum_t * encrypted) { int result; int data_size; @@ -1561,10 +1728,12 @@ _gnutls_pkcs_raw_encrypt_data(const gnutls_datum_t * plain, cipher_hd_st ch; int ch_init = 0; uint8_t pad, pad_size; + const cipher_entry_st *ce; - pad_size = gnutls_cipher_get_block_size(enc_params->cipher); + ce = cipher_to_entry(enc_params->cipher); + pad_size = _gnutls_cipher_get_block_size(ce); - if (pad_size == 1) /* stream */ + if (pad_size == 1 || ce->type == CIPHER_STREAM) /* stream */ pad_size = 0; data = gnutls_malloc(plain->size + pad_size); diff --git a/lib/x509/pkcs7-output.c b/lib/x509/pkcs7-output.c index 6c3055fa64..3d686df228 100644 --- a/lib/x509/pkcs7-output.c +++ b/lib/x509/pkcs7-output.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -64,6 +64,31 @@ static void print_dn(gnutls_buffer_st * str, const char *prefix, gnutls_free(output.data); } +/* Do not encode ASN1 and type for now */ +#define ENTRY(oid, name, type) {oid, sizeof(oid)-1, name, sizeof(name)-1, NULL, type} +#define ENTRY2(oid, name) {oid, sizeof(oid)-1, name, sizeof(name)-1, NULL, ASN1_ETYPE_INVALID} + +static const struct oid_to_string pkcs7_attrs[] = { + ENTRY ("1.2.840.113549.1.9.3", "contentType", ASN1_ETYPE_OBJECT_ID), + ENTRY ("1.2.840.113549.1.9.4", "messageDigest", ASN1_ETYPE_OCTET_STRING), + ENTRY ("1.2.840.113549.1.9.5", "signingTime", ASN1_ETYPE_INVALID), + ENTRY2("1.2.840.113549.1.9.6", "countersignature"), + ENTRY2("1.2.840.113549.1.9.15", "smimeCapabilities"), + + ENTRY2("1.2.840.113549.1.9.16.2.1", "aa-receiptRequest"), + ENTRY2("1.2.840.113549.1.9.16.2.2", "aa-securityLabel"), + ENTRY2("1.2.840.113549.1.9.16.2.3", "aa-mlExpandHistory"), + ENTRY2("1.2.840.113549.1.9.16.2.4", "aa-contentHint"), + ENTRY2("1.2.840.113549.1.9.16.2.9", "aa-equivalentLabels"), + ENTRY2("1.2.840.113549.1.9.16.2.10", "aa-contentReference"), + ENTRY2("1.2.840.113549.1.9.16.2.11", "aa-encrypKeyPref"), + ENTRY2("1.2.840.113549.1.9.16.2.12", "aa-signingCertificate"), + ENTRY2("1.2.840.113549.1.9.16.2.19", "aa-ets-otherSigCert"), + ENTRY2("1.2.840.113549.1.9.16.2.47", "aa-signingCertificateV2"), + + {NULL, 0, NULL, 0, NULL, 0} +}; + static void print_raw(gnutls_buffer_st * str, const char *prefix, const gnutls_datum_t * raw) { @@ -94,6 +119,7 @@ static void print_pkcs7_info(gnutls_pkcs7_signature_info_st * info, char s[42]; size_t max; int ret; + const struct oid_to_string * entry; if (info->issuer_dn.size > 0) print_dn(str, "\tSigner's issuer DN", &info->issuer_dn); @@ -130,7 +156,9 @@ static void print_pkcs7_info(gnutls_pkcs7_signature_info_st * info, if (i == 0) addf(str, "\tSigned Attributes:\n"); - snprintf(prefix, sizeof(prefix), "\t\t%s", oid); + entry = _gnutls_oid_get_entry(pkcs7_attrs, oid); + snprintf(prefix, sizeof(prefix), "\t\t%s", + (entry && entry->name_desc) ? entry->name_desc : oid); print_raw(str, prefix, &data); gnutls_free(data.data); } @@ -145,7 +173,9 @@ static void print_pkcs7_info(gnutls_pkcs7_signature_info_st * info, if (i == 0) addf(str, "\tUnsigned Attributes:\n"); - snprintf(prefix, sizeof(prefix), "\t\t%s", oid); + entry = _gnutls_oid_get_entry(pkcs7_attrs, oid); + snprintf(prefix, sizeof(prefix), "\t\t%s", + (entry && entry->name_desc) ? entry->name_desc : oid); print_raw(str, prefix, &data); gnutls_free(data.data); } @@ -154,6 +184,37 @@ static void print_pkcs7_info(gnutls_pkcs7_signature_info_st * info, adds(str, "\n"); } +/** + * gnutls_pkcs7_print_signature_info: + * @info: The PKCS7 signature info struct to be printed + * @format: Indicate the format to use + * @out: Newly allocated datum with null terminated string. + * + * This function will pretty print a PKCS #7 signature info structure, suitable + * for display to a human. + * + * Currently the supported formats are %GNUTLS_CRT_PRINT_FULL and + * %GNUTLS_CRT_PRINT_COMPACT. + * + * The output @out needs to be deallocated using gnutls_free(). + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.14 + **/ +int gnutls_pkcs7_print_signature_info(gnutls_pkcs7_signature_info_st * info, + gnutls_certificate_print_formats_t format, + gnutls_datum_t * out) +{ + gnutls_buffer_st str; + + _gnutls_buffer_init(&str); + print_pkcs7_info(info, &str, format); + + return _gnutls_buffer_to_datum(&str, out, 1); +} + /** * gnutls_pkcs7_crt_print: * @pkcs7: The PKCS7 struct to be printed diff --git a/lib/x509/pkcs7.c b/lib/x509/pkcs7.c index e285546060..98669e8879 100644 --- a/lib/x509/pkcs7.c +++ b/lib/x509/pkcs7.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -111,7 +111,7 @@ static int _decode_pkcs7_signed_data(gnutls_pkcs7_t pkcs7) /* Try reading as octet string according to rfc5652. If that fails, attempt * a raw read according to rfc2315 */ - result = _gnutls_x509_read_string(c2, "encapContentInfo.eContent", &pkcs7->der_signed_data, ASN1_ETYPE_OCTET_STRING, 0); + result = _gnutls_x509_read_string(c2, "encapContentInfo.eContent", &pkcs7->der_signed_data, ASN1_ETYPE_OCTET_STRING, 1); if (result < 0) { result = _gnutls_x509_read_value(c2, "encapContentInfo.eContent", &pkcs7->der_signed_data); if (result < 0) { @@ -130,7 +130,7 @@ static int _decode_pkcs7_signed_data(gnutls_pkcs7_t pkcs7) goto cleanup; } - result = asn1_get_length_der(pkcs7->der_signed_data.data+tag_len, pkcs7->der_signed_data.size-tag_len, &len_len); + result = asn1_get_length_ber(pkcs7->der_signed_data.data+tag_len, pkcs7->der_signed_data.size-tag_len, &len_len); if (result < 0) { gnutls_assert(); result = GNUTLS_E_ASN1_DER_ERROR; @@ -256,7 +256,7 @@ gnutls_pkcs7_import(gnutls_pkcs7_t pkcs7, const gnutls_datum_t * data, _gnutls_fbase64_decode(PEM_PKCS7, data->data, data->size, &_data); - if (result <= 0) { + if (result < 0) { gnutls_assert(); return result; } @@ -692,7 +692,6 @@ int gnutls_pkcs7_get_signature_info(gnutls_pkcs7_t pkcs7, unsigned idx, ret = gnutls_pkcs7_add_attr(&info->signed_attrs, oid, &tmp, 0); gnutls_free(tmp.data); - tmp.data = NULL; if (ret < 0) { gnutls_assert(); @@ -730,7 +729,6 @@ int gnutls_pkcs7_get_signature_info(gnutls_pkcs7_t pkcs7, unsigned idx, ret = gnutls_pkcs7_add_attr(&info->unsigned_attrs, oid, &tmp, 0); gnutls_free(tmp.data); - tmp.data = NULL; if (ret < 0) { gnutls_assert(); @@ -842,9 +840,7 @@ static int verify_hash_attr(gnutls_pkcs7_t pkcs7, const char *root, } gnutls_free(tmp.data); - tmp.data = NULL; gnutls_free(tmp2.data); - tmp2.data = NULL; } if (msg_digest_ok) @@ -1087,7 +1083,6 @@ static gnutls_x509_crt_t find_verified_issuer_of(gnutls_pkcs7_t pkcs7, gnutls_x509_crt_deinit(issuer); issuer = NULL; gnutls_free(tmp.data); - tmp.data = NULL; continue; } @@ -1204,7 +1199,6 @@ static gnutls_x509_crt_t find_child_of_with_serial(gnutls_pkcs7_t pkcs7, gnutls_x509_crt_deinit(crt); crt = NULL; gnutls_free(tmpdata.data); - tmpdata.data = NULL; continue; } } else { @@ -2348,6 +2342,8 @@ int gnutls_pkcs7_sign(gnutls_pkcs7_t pkcs7, gnutls_datum_t signature = { NULL, 0 }; const mac_entry_st *me = hash_to_entry(dig); unsigned pk, sigalgo; + gnutls_x509_spki_st key_params, params; + const gnutls_sign_entry_st *se; if (pkcs7 == NULL || me == NULL) return GNUTLS_E_INVALID_REQUEST; @@ -2384,7 +2380,7 @@ int gnutls_pkcs7_sign(gnutls_pkcs7_t pkcs7, goto cleanup; } - if (flags & GNUTLS_PKCS7_EMBED_DATA && data->data) { /* embed data */ + if ((flags & GNUTLS_PKCS7_EMBED_DATA) && data->data) { /* embed data */ ret = _gnutls_x509_write_string(pkcs7->signed_data, "encapContentInfo.eContent", data, @@ -2485,26 +2481,47 @@ int gnutls_pkcs7_sign(gnutls_pkcs7_t pkcs7, /* write the signature algorithm */ pk = gnutls_x509_crt_get_pk_algorithm(signer, NULL); + ret = _gnutls_privkey_get_spki_params(signer_key, &key_params); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_x509_crt_get_spki_params(signer, &key_params, ¶ms); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_privkey_update_spki_params(signer_key, pk, dig, 0, + ¶ms); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + se = _gnutls_pk_to_sign_entry(params.pk, dig); + if (se == NULL) { + ret = gnutls_assert_val(GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM); + goto cleanup; + } + /* RFC5652 is silent on what the values would be and initially I assumed that * typical signature algorithms should be set. However RFC2315 (PKCS#7) mentions * that a generic RSA OID should be used. We switch to this "unexpected" value * because some implementations cannot cope with the "expected" signature values. */ + params.legacy = 1; ret = - _gnutls_x509_write_sig_params(pkcs7->signed_data, - "signerInfos.?LAST.signatureAlgorithm", - pk, dig, 1); + _gnutls_x509_write_sign_params(pkcs7->signed_data, + "signerInfos.?LAST.signatureAlgorithm", + se, ¶ms); if (ret < 0) { gnutls_assert(); goto cleanup; } - sigalgo = gnutls_pk_to_sign(pk, dig); - if (sigalgo == GNUTLS_SIGN_UNKNOWN) { - gnutls_assert(); - ret = GNUTLS_E_INVALID_REQUEST; - goto cleanup; - } + sigalgo = se->id; /* sign the data */ ret = @@ -2515,8 +2532,10 @@ int gnutls_pkcs7_sign(gnutls_pkcs7_t pkcs7, goto cleanup; } - ret = - gnutls_privkey_sign_data(signer_key, dig, 0, &sigdata, &signature); + FIX_SIGN_PARAMS(params, flags, dig); + + ret = privkey_sign_and_hash_data(signer_key, se, + &sigdata, &signature, ¶ms); if (ret < 0) { gnutls_assert(); goto cleanup; diff --git a/lib/x509/pkcs7_int.h b/lib/x509/pkcs7_int.h index 9d3ea24e31..46c7b62fb5 100644 --- a/lib/x509/pkcs7_int.h +++ b/lib/x509/pkcs7_int.h @@ -17,12 +17,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef PKCS7_INT_H -#define PKCS7_INT_H +#ifndef GNUTLS_LIB_X509_PKCS7_INT_H +#define GNUTLS_LIB_X509_PKCS7_INT_H #include @@ -42,6 +42,11 @@ typedef enum schema_id { PBES2_AES_128, PBES2_AES_192, PBES2_AES_256, + PBES2_GOST28147_89_TC26Z, + PBES2_GOST28147_89_CPA, + PBES2_GOST28147_89_CPB, + PBES2_GOST28147_89_CPC, + PBES2_GOST28147_89_CPD, PKCS12_3DES_SHA1, /* the stuff in PKCS #12 */ PKCS12_ARCFOUR_SHA1, PKCS12_RC2_40_SHA1, @@ -57,6 +62,7 @@ struct pkcs_cipher_schema_st { const char *cipher_oid; const char *write_oid; const char *desc; + const char *iv_name; unsigned decrypt_only; }; @@ -74,7 +80,7 @@ _gnutls_decrypt_pbes1_des_md5_data(const char *password, unsigned password_len, const struct pbkdf2_params *kdf_params, const struct pbe_enc_params *enc_params, - gnutls_datum_t *encrypted_data, /* overwritten */ + const gnutls_datum_t *encrypted_data, gnutls_datum_t *decrypted_data); int _gnutls_check_pkcs_cipher_schema(const char *oid); @@ -89,7 +95,7 @@ _gnutls_pkcs_raw_decrypt_data(schema_id schema, ASN1_TYPE pkcs8_asn, int _gnutls_pkcs_raw_encrypt_data(const gnutls_datum_t * plain, const struct pbe_enc_params *enc_params, - gnutls_datum_t * key, gnutls_datum_t * encrypted); + const gnutls_datum_t * key, gnutls_datum_t * encrypted); int _gnutls_pkcs7_decrypt_data(const gnutls_datum_t * data, const char *password, gnutls_datum_t * dec); @@ -125,4 +131,4 @@ int _gnutls_pkcs7_data_enc_info(const gnutls_datum_t * data, const struct pkcs_cipher_schema_st **p, struct pbkdf2_params *kdf_params, char **oid); -#endif +#endif /* GNUTLS_LIB_X509_PKCS7_INT_H */ diff --git a/lib/x509/privkey.c b/lib/x509/privkey.c index 1c40615a5a..b26295e51b 100644 --- a/lib/x509/privkey.c +++ b/lib/x509/privkey.c @@ -1,7 +1,7 @@ /* * Copyright (C) 2003-2016 Free Software Foundation, Inc. * Copyright (C) 2012-2016 Nikos Mavrogiannopoulos - * Copyright (C) 2015-2016 Red Hat, Inc. + * Copyright (C) 2015-2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -18,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -53,7 +53,6 @@ int gnutls_x509_privkey_init(gnutls_x509_privkey_t * key) if (*key) { (*key)->key = ASN1_TYPE_EMPTY; - (*key)->pk_algorithm = GNUTLS_PK_UNKNOWN; return 0; /* success */ } @@ -64,7 +63,11 @@ void _gnutls_x509_privkey_reinit(gnutls_x509_privkey_t key) { gnutls_pk_params_clear(&key->params); gnutls_pk_params_release(&key->params); - asn1_delete_structure2(&key->key, ASN1_DELETE_FLAG_ZEROIZE); + /* avoid re-use of fields which may have had some sensible value */ + memset(&key->params, 0, sizeof(key->params)); + + if (key->key) + asn1_delete_structure2(&key->key, ASN1_DELETE_FLAG_ZEROIZE); key->key = ASN1_TYPE_EMPTY; } @@ -103,16 +106,14 @@ gnutls_x509_privkey_cpy(gnutls_x509_privkey_t dst, if (!src || !dst) return GNUTLS_E_INVALID_REQUEST; - dst->pk_algorithm = src->pk_algorithm; - ret = _gnutls_pk_params_copy(&dst->params, &src->params); if (ret < 0) { return gnutls_assert_val(ret); } ret = - _gnutls_asn1_encode_privkey(dst->pk_algorithm, &dst->key, - &dst->params, src->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT); + _gnutls_asn1_encode_privkey(&dst->key, + &dst->params); if (ret < 0) { gnutls_assert(); gnutls_pk_params_release(&dst->params); @@ -131,8 +132,6 @@ _gnutls_privkey_decode_pkcs1_rsa_key(const gnutls_datum_t * raw_key, { int result; ASN1_TYPE pkey_asn; - char tmp[64]; - int tmp_size; gnutls_pk_params_init(&pkey->params); @@ -219,29 +218,6 @@ _gnutls_privkey_decode_pkcs1_rsa_key(const gnutls_datum_t * raw_key, pkey->params.params_nr = RSA_PRIVATE_PARAMS; pkey->params.algo = GNUTLS_PK_RSA; - tmp_size = sizeof(tmp); - result = asn1_read_value(pkey_asn, "otherInfo", tmp, &tmp_size); - if (result == ASN1_SUCCESS && strcmp(tmp, "seed") == 0) { - gnutls_datum_t v; - char oid[MAX_OID_SIZE]; - int oid_size; - - oid_size = sizeof(oid); - result = asn1_read_value(pkey_asn, "otherInfo.seed.algorithm", oid, &oid_size); - if (result == ASN1_SUCCESS) { - pkey->params.palgo = gnutls_oid_to_digest(oid); - } - - result = _gnutls_x509_read_value(pkey_asn, "otherInfo.seed.seed", &v); - if (result >= 0) { - if (v.size <= sizeof(pkey->params.seed)) { - memcpy(pkey->params.seed, v.data, v.size); - pkey->params.seed_size = v.size; - } - gnutls_free(v.data); - } - } - return pkey_asn; error: @@ -249,7 +225,6 @@ _gnutls_privkey_decode_pkcs1_rsa_key(const gnutls_datum_t * raw_key, gnutls_pk_params_clear(&pkey->params); gnutls_pk_params_release(&pkey->params); return NULL; - } /* Converts an ECC key to @@ -265,6 +240,10 @@ _gnutls_privkey_decode_ecc_key(ASN1_TYPE* pkey_asn, const gnutls_datum_t * raw_k int oid_size; gnutls_datum_t out; + if (curve_is_eddsa(curve)) { + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } + gnutls_pk_params_init(&pkey->params); if ((ret = @@ -311,16 +290,16 @@ _gnutls_privkey_decode_ecc_key(ASN1_TYPE* pkey_asn, const gnutls_datum_t * raw_k goto error; } - pkey->params.flags = gnutls_oid_to_ecc_curve(oid); + pkey->params.curve = gnutls_oid_to_ecc_curve(oid); - if (pkey->params.flags == GNUTLS_ECC_CURVE_INVALID) { + if (pkey->params.curve == GNUTLS_ECC_CURVE_INVALID) { _gnutls_debug_log("Curve %s is not supported\n", oid); gnutls_assert(); ret = GNUTLS_E_ECC_UNSUPPORTED_CURVE; goto error; } } else { - pkey->params.flags = curve; + pkey->params.curve = curve; } @@ -332,7 +311,7 @@ _gnutls_privkey_decode_ecc_key(ASN1_TYPE* pkey_asn, const gnutls_datum_t * raw_k } ret = - _gnutls_ecc_ansi_x963_import(out.data, out.size, + _gnutls_ecc_ansi_x962_import(out.data, out.size, &pkey->params.params[ECC_X], &pkey->params.params[ECC_Y]); @@ -462,18 +441,16 @@ decode_dsa_key(const gnutls_datum_t * raw_key, gnutls_x509_privkey_t pkey) #define PEM_KEY_DSA "DSA PRIVATE KEY" #define PEM_KEY_RSA "RSA PRIVATE KEY" -#define PEM_KEY_DSA_PROVABLE "FIPS186-4 DSA PRIVATE KEY" -#define PEM_KEY_RSA_PROVABLE "FIPS186-4 RSA PRIVATE KEY" #define PEM_KEY_ECC "EC PRIVATE KEY" #define PEM_KEY_PKCS8 "PRIVATE KEY" #define MAX_PEM_HEADER_SIZE 25 -#define IF_CHECK_FOR(pemstr, algo, cptr, bptr, size, key) \ +#define IF_CHECK_FOR(pemstr, _algo, cptr, bptr, size, key) \ if (left > sizeof(pemstr) && memcmp(cptr, pemstr, sizeof(pemstr)-1) == 0) { \ result = _gnutls_fbase64_decode(pemstr, bptr, size, &_data); \ if (result >= 0) \ - key->pk_algorithm = algo; \ + key->params.algo = _algo; \ } /** @@ -509,7 +486,7 @@ gnutls_x509_privkey_import(gnutls_x509_privkey_t key, _data.data = data->data; _data.size = data->size; - key->pk_algorithm = GNUTLS_PK_UNKNOWN; + key->params.algo = GNUTLS_PK_UNKNOWN; /* If the Certificate is in PEM format then decode it */ @@ -543,17 +520,15 @@ gnutls_x509_privkey_import(gnutls_x509_privkey_t key, IF_CHECK_FOR(PEM_KEY_RSA, GNUTLS_PK_RSA, ptr, begin_ptr, left, key) else IF_CHECK_FOR(PEM_KEY_ECC, GNUTLS_PK_EC, ptr, begin_ptr, left, key) else IF_CHECK_FOR(PEM_KEY_DSA, GNUTLS_PK_DSA, ptr, begin_ptr, left, key) - else IF_CHECK_FOR(PEM_KEY_RSA_PROVABLE, GNUTLS_PK_RSA, ptr, begin_ptr, left, key) - else IF_CHECK_FOR(PEM_KEY_DSA_PROVABLE, GNUTLS_PK_DSA, ptr, begin_ptr, left, key) - if (key->pk_algorithm == GNUTLS_PK_UNKNOWN && left >= sizeof(PEM_KEY_PKCS8)) { + if (key->params.algo == GNUTLS_PK_UNKNOWN && left >= sizeof(PEM_KEY_PKCS8)) { if (memcmp(ptr, PEM_KEY_PKCS8, sizeof(PEM_KEY_PKCS8)-1) == 0) { result = _gnutls_fbase64_decode(PEM_KEY_PKCS8, begin_ptr, left, &_data); if (result >= 0) { /* signal for PKCS #8 keys */ - key->pk_algorithm = -1; + key->params.algo = -1; } } } @@ -574,7 +549,7 @@ gnutls_x509_privkey_import(gnutls_x509_privkey_t key, } key->expanded = 1; - if (key->pk_algorithm == (gnutls_pk_algorithm_t)-1) { + if (key->params.algo == (gnutls_pk_algorithm_t)-1) { result = gnutls_x509_privkey_import_pkcs8(key, data, format, NULL, @@ -582,17 +557,21 @@ gnutls_x509_privkey_import(gnutls_x509_privkey_t key, if (result < 0) { gnutls_assert(); key->key = NULL; + goto cleanup; + } else { + /* some keys under PKCS#8 don't set key->key */ + goto finish; } - } else if (key->pk_algorithm == GNUTLS_PK_RSA) { + } else if (key->params.algo == GNUTLS_PK_RSA) { key->key = _gnutls_privkey_decode_pkcs1_rsa_key(&_data, key); if (key->key == NULL) gnutls_assert(); - } else if (key->pk_algorithm == GNUTLS_PK_DSA) { + } else if (key->params.algo == GNUTLS_PK_DSA) { key->key = decode_dsa_key(&_data, key); if (key->key == NULL) gnutls_assert(); - } else if (key->pk_algorithm == GNUTLS_PK_EC) { + } else if (key->params.algo == GNUTLS_PK_EC) { result = _gnutls_privkey_decode_ecc_key(&key->key, &_data, key, 0); if (result < 0) { gnutls_assert(); @@ -602,15 +581,15 @@ gnutls_x509_privkey_import(gnutls_x509_privkey_t key, /* Try decoding each of the keys, and accept the one that * succeeds. */ - key->pk_algorithm = GNUTLS_PK_RSA; + key->params.algo = GNUTLS_PK_RSA; key->key = _gnutls_privkey_decode_pkcs1_rsa_key(&_data, key); if (key->key == NULL) { - key->pk_algorithm = GNUTLS_PK_DSA; + key->params.algo = GNUTLS_PK_DSA; key->key = decode_dsa_key(&_data, key); if (key->key == NULL) { - key->pk_algorithm = GNUTLS_PK_EC; + key->params.algo = GNUTLS_PK_EC; result = _gnutls_privkey_decode_ecc_key(&key->key, &_data, key, 0); if (result < 0) { @@ -618,12 +597,18 @@ gnutls_x509_privkey_import(gnutls_x509_privkey_t key, gnutls_x509_privkey_import_pkcs8(key, data, format, NULL, GNUTLS_PKCS_PLAIN); - if (result < 0) { - gnutls_assert(); - key->key = NULL; + if (result >= 0) { + /* there are keys (ed25519) which leave key->key NULL */ + goto finish; } - } + /* result < 0 */ + gnutls_assert(); + key->key = NULL; + + if (result == GNUTLS_E_PK_INVALID_PRIVKEY) + goto cleanup; + } } } } @@ -634,8 +619,9 @@ gnutls_x509_privkey_import(gnutls_x509_privkey_t key, goto cleanup; } + finish: result = - _gnutls_pk_fixup(key->pk_algorithm, GNUTLS_IMPORT, &key->params); + _gnutls_pk_fixup(key->params.algo, GNUTLS_IMPORT, &key->params); if (result < 0) { gnutls_assert(); } @@ -968,24 +954,25 @@ gnutls_x509_privkey_import_rsa_raw2(gnutls_x509_privkey_t key, key->params.params_nr++; } + key->params.algo = GNUTLS_PK_RSA; + ret = _gnutls_pk_fixup(GNUTLS_PK_RSA, GNUTLS_IMPORT, &key->params); if (ret < 0) { gnutls_assert(); goto cleanup; } + key->params.params_nr = RSA_PRIVATE_PARAMS; + key->params.algo = GNUTLS_PK_RSA; + ret = - _gnutls_asn1_encode_privkey(GNUTLS_PK_RSA, &key->key, - &key->params, key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT); + _gnutls_asn1_encode_privkey(&key->key, + &key->params); if (ret < 0) { gnutls_assert(); goto cleanup; } - key->params.params_nr = RSA_PRIVATE_PARAMS; - key->pk_algorithm = GNUTLS_PK_RSA; - key->params.algo = key->pk_algorithm; - return 0; cleanup: @@ -1027,6 +1014,8 @@ gnutls_x509_privkey_import_dsa_raw(gnutls_x509_privkey_t key, return GNUTLS_E_INVALID_REQUEST; } + gnutls_pk_params_init(&key->params); + siz = p->size; if (_gnutls_mpi_init_scan_nz(&key->params.params[0], p->data, siz)) { gnutls_assert(); @@ -1069,18 +1058,17 @@ gnutls_x509_privkey_import_dsa_raw(gnutls_x509_privkey_t key, goto cleanup; } + key->params.algo = GNUTLS_PK_DSA; + key->params.params_nr = DSA_PRIVATE_PARAMS; + ret = - _gnutls_asn1_encode_privkey(GNUTLS_PK_DSA, &key->key, - &key->params, key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT); + _gnutls_asn1_encode_privkey(&key->key, + &key->params); if (ret < 0) { gnutls_assert(); goto cleanup; } - key->params.params_nr = DSA_PRIVATE_PARAMS; - key->pk_algorithm = GNUTLS_PK_DSA; - key->params.algo = key->pk_algorithm; - return 0; cleanup: @@ -1094,13 +1082,14 @@ gnutls_x509_privkey_import_dsa_raw(gnutls_x509_privkey_t key, * gnutls_x509_privkey_import_ecc_raw: * @key: The data to store the parsed key * @curve: holds the curve - * @x: holds the x - * @y: holds the y + * @x: holds the x-coordinate + * @y: holds the y-coordinate * @k: holds the k * * This function will convert the given elliptic curve parameters to the * native #gnutls_x509_privkey_t format. The output will be stored - * in @key. + * in @key. For EdDSA keys, the @x and @k values must be in the + * native to curve format. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -1121,7 +1110,44 @@ gnutls_x509_privkey_import_ecc_raw(gnutls_x509_privkey_t key, return GNUTLS_E_INVALID_REQUEST; } - key->params.flags = curve; + gnutls_pk_params_init(&key->params); + + key->params.curve = curve; + + if (curve_is_eddsa(curve)) { + unsigned size; + switch (curve) { + case GNUTLS_ECC_CURVE_ED25519: + key->params.algo = GNUTLS_PK_EDDSA_ED25519; + break; + case GNUTLS_ECC_CURVE_ED448: + key->params.algo = GNUTLS_PK_EDDSA_ED448; + break; + default: + ret = gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + goto cleanup; + } + + size = gnutls_ecc_curve_get_size(curve); + if (x->size != size || k->size != size) { + ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + goto cleanup; + } + + ret = _gnutls_set_datum(&key->params.raw_pub, x->data, x->size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_set_datum(&key->params.raw_priv, k->data, k->size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + return 0; + } if (_gnutls_mpi_init_scan_nz (&key->params.params[ECC_X], x->data, x->size)) { @@ -1147,6 +1173,8 @@ gnutls_x509_privkey_import_ecc_raw(gnutls_x509_privkey_t key, } key->params.params_nr++; + key->params.algo = GNUTLS_PK_EC; + ret = _gnutls_pk_fixup(GNUTLS_PK_EC, GNUTLS_IMPORT, &key->params); if (ret < 0) { @@ -1154,8 +1182,102 @@ gnutls_x509_privkey_import_ecc_raw(gnutls_x509_privkey_t key, goto cleanup; } - key->pk_algorithm = GNUTLS_PK_EC; - key->params.algo = key->pk_algorithm; + ret = + _gnutls_asn1_encode_privkey(&key->key, + &key->params); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + return 0; + + cleanup: + gnutls_pk_params_clear(&key->params); + gnutls_pk_params_release(&key->params); + return ret; + +} + +/** + * gnutls_x509_privkey_import_gost_raw: + * @key: The data to store the parsed key + * @curve: holds the curve + * @digest: will hold the digest + * @paramset: will hold the GOST parameter set ID + * @x: holds the x-coordinate + * @y: holds the y-coordinate + * @k: holds the k (private key) + * + * This function will convert the given GOST private key's parameters to the + * native #gnutls_x509_privkey_t format. The output will be stored + * in @key. @digest should be one of GNUTLS_DIG_GOSR_94, + * GNUTLS_DIG_STREEBOG_256 or GNUTLS_DIG_STREEBOG_512. If @paramset is set to + * GNUTLS_GOST_PARAMSET_UNKNOWN default one will be selected depending on + * @digest. + * + * Note: parameters should be stored with least significant byte first. On + * version 3.6.3 big-endian format was used incorrectly. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.3 + **/ +int +gnutls_x509_privkey_import_gost_raw(gnutls_x509_privkey_t key, + gnutls_ecc_curve_t curve, + gnutls_digest_algorithm_t digest, + gnutls_gost_paramset_t paramset, + const gnutls_datum_t * x, + const gnutls_datum_t * y, + const gnutls_datum_t * k) +{ + int ret; + + if (key == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + key->params.curve = curve; + key->params.algo = _gnutls_digest_gost(digest); + + if (paramset == GNUTLS_GOST_PARAMSET_UNKNOWN) + paramset = _gnutls_gost_paramset_default(key->params.algo); + + key->params.gost_params = paramset; + + if (_gnutls_mpi_init_scan_le + (&key->params.params[GOST_X], x->data, x->size)) { + gnutls_assert(); + ret = GNUTLS_E_MPI_SCAN_FAILED; + goto cleanup; + } + key->params.params_nr++; + + if (_gnutls_mpi_init_scan_le + (&key->params.params[GOST_Y], y->data, y->size)) { + gnutls_assert(); + ret = GNUTLS_E_MPI_SCAN_FAILED; + goto cleanup; + } + key->params.params_nr++; + + if (_gnutls_mpi_init_scan_le + (&key->params.params[GOST_K], k->data, k->size)) { + gnutls_assert(); + ret = GNUTLS_E_MPI_SCAN_FAILED; + goto cleanup; + } + key->params.params_nr++; + + ret = + _gnutls_pk_fixup(key->params.algo, GNUTLS_IMPORT, &key->params); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } return 0; @@ -1184,7 +1306,7 @@ int gnutls_x509_privkey_get_pk_algorithm(gnutls_x509_privkey_t key) return GNUTLS_E_INVALID_REQUEST; } - return key->pk_algorithm; + return key->params.algo; } /** @@ -1210,28 +1332,94 @@ gnutls_x509_privkey_get_pk_algorithm2(gnutls_x509_privkey_t key, } if (bits) { - ret = pubkey_to_bits(key->pk_algorithm, &key->params); + ret = pubkey_to_bits(&key->params); if (ret < 0) ret = 0; *bits = ret; } - return key->pk_algorithm; + return key->params.algo; +} + +void +_gnutls_x509_privkey_get_spki_params(gnutls_x509_privkey_t key, + gnutls_x509_spki_st *params) +{ + memcpy(params, &key->params.spki, sizeof(gnutls_x509_spki_st)); +} + +/** + * gnutls_x509_privkey_get_spki: + * @key: should contain a #gnutls_x509_privkey_t type + * @spki: a SubjectPublicKeyInfo structure of type #gnutls_x509_spki_t + * @flags: must be zero + * + * This function will return the public key information of a private + * key. The provided @spki must be initialized. + * + * Returns: Zero on success, or a negative error code on error. + **/ +int +gnutls_x509_privkey_get_spki(gnutls_x509_privkey_t key, gnutls_x509_spki_t spki, unsigned int flags) +{ + if (key == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + if (key->params.spki.pk == GNUTLS_PK_UNKNOWN) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + _gnutls_x509_privkey_get_spki_params(key, spki); + + return 0; +} + +/** + * gnutls_x509_privkey_set_spki: + * @key: should contain a #gnutls_x509_privkey_t type + * @spki: a SubjectPublicKeyInfo structure of type #gnutls_x509_spki_t + * @flags: must be zero + * + * This function will return the public key information of a private + * key. The provided @spki must be initialized. + * + * Returns: Zero on success, or a negative error code on error. + **/ +int +gnutls_x509_privkey_set_spki(gnutls_x509_privkey_t key, const gnutls_x509_spki_t spki, unsigned int flags) +{ + gnutls_pk_params_st tparams; + int ret; + + if (key == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + if (!_gnutls_pk_are_compat(key->params.algo, spki->pk)) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + memcpy(&tparams, &key->params, sizeof(gnutls_pk_params_st)); + memcpy(&tparams.spki, spki, sizeof (gnutls_x509_spki_st)); + ret = _gnutls_x509_check_pubkey_params(&tparams); + if (ret < 0) + return gnutls_assert_val(ret); + + memcpy(&key->params.spki, spki, sizeof (gnutls_x509_spki_st)); + + key->params.algo = spki->pk; + + return 0; } static const char *set_msg(gnutls_x509_privkey_t key) { - if (key->pk_algorithm == GNUTLS_PK_RSA) { - if (key->params.seed_size > 0 && !(key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT)) - return PEM_KEY_RSA_PROVABLE; - else - return PEM_KEY_RSA; - } else if (key->pk_algorithm == GNUTLS_PK_DSA) { - if (key->params.seed_size > 0 && !(key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT)) - return PEM_KEY_DSA_PROVABLE; - else - return PEM_KEY_DSA; - } else if (key->pk_algorithm == GNUTLS_PK_EC) + if (GNUTLS_PK_IS_RSA(key->params.algo)) { + return PEM_KEY_RSA; + } else if (key->params.algo == GNUTLS_PK_DSA) { + return PEM_KEY_DSA; + } else if (key->params.algo == GNUTLS_PK_EC) return PEM_KEY_ECC; else return "UNKNOWN"; @@ -1245,17 +1433,16 @@ static const char *set_msg(gnutls_x509_privkey_t key) * @output_data_size: holds the size of output_data (and will be * replaced by the actual size of parameters) * - * This function will export the private key to a PKCS1 structure for - * RSA keys, or an integer sequence for DSA keys. The DSA keys are in - * the same format with the parameters used by openssl. - * - * If the buffer provided is not long enough to hold the output, then - * *@output_data_size is updated and %GNUTLS_E_SHORT_MEMORY_BUFFER - * will be returned. + * This function will export the private key to a PKCS#1 structure for + * RSA or RSA-PSS keys, and integer sequence for DSA keys. Other keys types + * will be exported in PKCS#8 form. * * If the structure is PEM encoded, it will have a header * of "BEGIN RSA PRIVATE KEY". * + * It is recommended to use gnutls_x509_privkey_export_pkcs8() instead + * of this function, when a consistent output format is required. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. **/ @@ -1264,24 +1451,20 @@ gnutls_x509_privkey_export(gnutls_x509_privkey_t key, gnutls_x509_crt_fmt_t format, void *output_data, size_t * output_data_size) { - const char *msg; + gnutls_datum_t out; int ret; - if (key == NULL) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } - - msg = set_msg(key); + ret = gnutls_x509_privkey_export2(key, format, &out); + if (ret < 0) + return gnutls_assert_val(ret); - if (key->flags & GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT) { - ret = gnutls_x509_privkey_fix(key); - if (ret < 0) - return gnutls_assert_val(ret); - } + if (format == GNUTLS_X509_FMT_PEM) + ret = _gnutls_copy_string(&out, output_data, output_data_size); + else + ret = _gnutls_copy_data(&out, output_data, output_data_size); + gnutls_free(out.data); - return _gnutls_x509_export_int(key->key, format, msg, - output_data, output_data_size); + return ret; } /** @@ -1290,14 +1473,14 @@ gnutls_x509_privkey_export(gnutls_x509_privkey_t key, * @format: the format of output params. One of PEM or DER. * @out: will contain a private key PEM or DER encoded * - * This function will export the private key to a PKCS1 structure for - * RSA keys, or an integer sequence for DSA keys. The DSA keys are in - * the same format with the parameters used by openssl. + * This function will export the private key to a PKCS#1 structure for + * RSA or RSA-PSS keys, and integer sequence for DSA keys. Other keys types + * will be exported in PKCS#8 form. * * The output buffer is allocated using gnutls_malloc(). * - * If the structure is PEM encoded, it will have a header - * of "BEGIN RSA PRIVATE KEY". + * It is recommended to use gnutls_x509_privkey_export2_pkcs8() instead + * of this function, when a consistent output format is required. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -1317,6 +1500,10 @@ gnutls_x509_privkey_export2(gnutls_x509_privkey_t key, return GNUTLS_E_INVALID_REQUEST; } + if (key->key == NULL) { /* can only export in PKCS#8 form */ + return gnutls_x509_privkey_export2_pkcs8(key, format, NULL, 0, out); + } + msg = set_msg(key); if (key->flags & GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT) { @@ -1344,42 +1531,84 @@ gnutls_sec_param_t gnutls_x509_privkey_sec_param(gnutls_x509_privkey_t key) { int bits; - bits = pubkey_to_bits(key->pk_algorithm, &key->params); + bits = pubkey_to_bits(&key->params); if (bits <= 0) return GNUTLS_SEC_PARAM_UNKNOWN; - return gnutls_pk_bits_to_sec_param(key->pk_algorithm, bits); + return gnutls_pk_bits_to_sec_param(key->params.algo, bits); } /** * gnutls_x509_privkey_export_ecc_raw: * @key: a key * @curve: will hold the curve - * @x: will hold the x coordinate - * @y: will hold the y coordinate + * @x: will hold the x-coordinate + * @y: will hold the y-coordinate * @k: will hold the private key * * This function will export the ECC private key's parameters found * in the given structure. The new parameters will be allocated using * gnutls_malloc() and will be stored in the appropriate datum. * + * In EdDSA curves the @y parameter will be %NULL and the other parameters + * will be in the native format for the curve. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * * Since: 3.0 **/ int gnutls_x509_privkey_export_ecc_raw(gnutls_x509_privkey_t key, - gnutls_ecc_curve_t * curve, - gnutls_datum_t * x, - gnutls_datum_t * y, - gnutls_datum_t * k) + gnutls_ecc_curve_t *curve, + gnutls_datum_t *x, + gnutls_datum_t *y, + gnutls_datum_t *k) { if (key == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - return _gnutls_params_get_ecc_raw(&key->params, curve, x, y, k); + return _gnutls_params_get_ecc_raw(&key->params, curve, x, y, k, 0); +} + +/** + * gnutls_x509_privkey_export_gost_raw: + * @key: a key + * @curve: will hold the curve + * @digest: will hold the digest + * @paramset: will hold the GOST parameter set ID + * @x: will hold the x-coordinate + * @y: will hold the y-coordinate + * @k: will hold the private key + * + * This function will export the GOST private key's parameters found + * in the given structure. The new parameters will be allocated using + * gnutls_malloc() and will be stored in the appropriate datum. + * + * Note: parameters will be stored with least significant byte first. On + * version 3.6.3 this was incorrectly returned in big-endian format. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.3 + **/ +int gnutls_x509_privkey_export_gost_raw(gnutls_x509_privkey_t key, + gnutls_ecc_curve_t * curve, + gnutls_digest_algorithm_t * digest, + gnutls_gost_paramset_t * paramset, + gnutls_datum_t * x, + gnutls_datum_t * y, + gnutls_datum_t * k) +{ + if (key == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + return _gnutls_params_get_gost_raw(&key->params, curve, digest, paramset, + x, y, k, 0); } /** @@ -1405,7 +1634,7 @@ gnutls_x509_privkey_export_rsa_raw(gnutls_x509_privkey_t key, gnutls_datum_t * d, gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * u) { - return _gnutls_params_get_rsa_raw(&key->params, m, e, d, p, q, u, NULL, NULL); + return _gnutls_params_get_rsa_raw(&key->params, m, e, d, p, q, u, NULL, NULL, 0); } /** @@ -1437,7 +1666,7 @@ gnutls_x509_privkey_export_rsa_raw2(gnutls_x509_privkey_t key, gnutls_datum_t * e1, gnutls_datum_t * e2) { - return _gnutls_params_get_rsa_raw(&key->params, m, e, d, p, q, u, e1, e2); + return _gnutls_params_get_rsa_raw(&key->params, m, e, d, p, q, u, e1, e2, 0); } /** @@ -1462,7 +1691,7 @@ gnutls_x509_privkey_export_dsa_raw(gnutls_x509_privkey_t key, gnutls_datum_t * g, gnutls_datum_t * y, gnutls_datum_t * x) { - return _gnutls_params_get_dsa_raw(&key->params, p, q, g, y, x); + return _gnutls_params_get_dsa_raw(&key->params, p, q, g, y, x, 0); } /** @@ -1473,9 +1702,13 @@ gnutls_x509_privkey_export_dsa_raw(gnutls_x509_privkey_t key, * @flags: Must be zero or flags from #gnutls_privkey_flags_t. * * This function will generate a random private key. Note that this - * function must be called on an empty private key. The flag %GNUTLS_PRIVKEY_FLAG_PROVABLE + * function must be called on an initialized private key. + * + * The flag %GNUTLS_PRIVKEY_FLAG_PROVABLE * instructs the key generation process to use algorithms like Shawe-Taylor - * which generate provable parameters out of a seed. + * (from FIPS PUB186-4) which generate provable parameters out of a seed + * for RSA and DSA keys. See gnutls_x509_privkey_generate2() for more + * information. * * Note that when generating an elliptic curve key, the curve * can be substituted in the place of the bits parameter using the @@ -1487,6 +1720,8 @@ gnutls_x509_privkey_export_dsa_raw(gnutls_x509_privkey_t key, * * It is recommended to do not set the number of @bits directly, use gnutls_sec_param_to_pk_bits() instead . * + * See also gnutls_privkey_generate(), gnutls_x509_privkey_generate2(). + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. **/ @@ -1508,18 +1743,32 @@ gnutls_x509_privkey_generate(gnutls_x509_privkey_t key, * @data_size: The number of @data available. * * This function will generate a random private key. Note that this - * function must be called on an empty private key. The flag %GNUTLS_PRIVKEY_FLAG_PROVABLE - * instructs the key generation process to use algorithms which generate - * provable parameters out of a seed. + * function must be called on an initialized private key. + * + * The flag %GNUTLS_PRIVKEY_FLAG_PROVABLE + * instructs the key generation process to use algorithms like Shawe-Taylor + * (from FIPS PUB186-4) which generate provable parameters out of a seed + * for RSA and DSA keys. On DSA keys the PQG parameters are generated using the + * seed, while on RSA the two primes. To specify an explicit seed + * (by default a random seed is used), use the @data with a %GNUTLS_KEYGEN_SEED + * type. * * Note that when generating an elliptic curve key, the curve * can be substituted in the place of the bits parameter using the * GNUTLS_CURVE_TO_BITS() macro. * - * For DSA keys, if the subgroup size needs to be specified check - * the GNUTLS_SUBGROUP_TO_BITS() macro. + * To export the generated keys in memory or in files it is recommended to use the + * PKCS#8 form as it can handle all key types, and can store additional parameters + * such as the seed, in case of provable RSA or DSA keys. + * Generated keys can be exported in memory using gnutls_privkey_export_x509(), + * and then with gnutls_x509_privkey_export2_pkcs8(). + * + * If key generation is part of your application, avoid setting the number + * of bits directly, and instead use gnutls_sec_param_to_pk_bits(). + * That way the generated keys will adapt to the security levels + * of the underlying GnuTLS library. * - * Do not set the number of bits directly, use gnutls_sec_param_to_pk_bits(). + * See also gnutls_privkey_generate2(). * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -1531,6 +1780,7 @@ gnutls_x509_privkey_generate2(gnutls_x509_privkey_t key, { int ret; unsigned i; + gnutls_x509_spki_t tpki = NULL; if (key == NULL) { gnutls_assert(); @@ -1545,26 +1795,78 @@ gnutls_x509_privkey_generate2(gnutls_x509_privkey_t key, memcpy(key->params.seed, data[i].data, data[i].size); } else if (data[i].type == GNUTLS_KEYGEN_DIGEST) { key->params.palgo = data[i].size; + } else if (data[i].type == GNUTLS_KEYGEN_SPKI) { + tpki = (void*)data[i].data; } } - if (algo == GNUTLS_PK_EC) { + if (IS_EC(algo)) { if (GNUTLS_BITS_ARE_CURVE(bits)) bits = GNUTLS_BITS_TO_CURVE(bits); else - bits = _gnutls_ecc_bits_to_curve(bits); + bits = _gnutls_ecc_bits_to_curve(algo, bits); + + if (gnutls_ecc_curve_get_pk(bits) != algo) { + _gnutls_debug_log("curve is incompatible with public key algorithm\n"); + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } + } + + if (IS_GOSTEC(algo)) { + int size; + + if (GNUTLS_BITS_ARE_CURVE(bits)) + bits = GNUTLS_BITS_TO_CURVE(bits); + else + bits = _gnutls_ecc_bits_to_curve(algo, bits); + + size = gnutls_ecc_curve_get_size(bits); + + if ((algo == GNUTLS_PK_GOST_01 && size != 32) || + (algo == GNUTLS_PK_GOST_12_256 && size != 32) || + (algo == GNUTLS_PK_GOST_12_512 && size != 64)) { + _gnutls_debug_log("curve is incompatible with public key algorithm\n"); + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + } + + key->params.gost_params = _gnutls_gost_paramset_default(algo); } if (flags & GNUTLS_PRIVKEY_FLAG_PROVABLE) { - key->params.flags |= GNUTLS_PK_FLAG_PROVABLE; + key->params.pkflags |= GNUTLS_PK_FLAG_PROVABLE; } + key->params.algo = algo; + ret = _gnutls_pk_generate_params(algo, bits, &key->params); if (ret < 0) { gnutls_assert(); return ret; } + if (algo == GNUTLS_PK_RSA_PSS && (flags & GNUTLS_PRIVKEY_FLAG_CA) && + !key->params.spki.pk) { + const mac_entry_st *me; + key->params.spki.pk = GNUTLS_PK_RSA_PSS; + + key->params.spki.rsa_pss_dig = _gnutls_pk_bits_to_sha_hash(bits); + + me = hash_to_entry(key->params.spki.rsa_pss_dig); + if (unlikely(me == NULL)) { + gnutls_assert(); + ret = GNUTLS_E_INVALID_REQUEST; + goto cleanup; + } + + ret = _gnutls_find_rsa_pss_salt_size(bits, me, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + key->params.spki.salt_size = ret; + } + ret = _gnutls_pk_generate_keys(algo, bits, &key->params, 0); if (ret < 0) { gnutls_assert(); @@ -1577,17 +1879,24 @@ gnutls_x509_privkey_generate2(gnutls_x509_privkey_t key, goto cleanup; } - ret = _gnutls_asn1_encode_privkey(algo, &key->key, &key->params, key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT); + if (tpki) { + ret = gnutls_x509_privkey_set_spki(key, tpki, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } + + ret = _gnutls_asn1_encode_privkey(&key->key, &key->params); if (ret < 0) { gnutls_assert(); goto cleanup; } - key->pk_algorithm = algo; return 0; cleanup: - key->pk_algorithm = GNUTLS_PK_UNKNOWN; + key->params.algo = GNUTLS_PK_UNKNOWN; gnutls_pk_params_clear(&key->params); gnutls_pk_params_release(&key->params); @@ -1775,8 +2084,8 @@ int gnutls_x509_privkey_verify_seed(gnutls_x509_privkey_t key, gnutls_digest_alg return GNUTLS_E_INVALID_REQUEST; } - if (key->pk_algorithm != GNUTLS_PK_RSA && key->pk_algorithm != GNUTLS_PK_DSA) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + if (key->params.algo != GNUTLS_PK_RSA && key->params.algo != GNUTLS_PK_DSA) + return gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); ret = gnutls_x509_privkey_get_pk_algorithm2(key, &bits); if (ret < 0) @@ -1792,20 +2101,20 @@ int gnutls_x509_privkey_verify_seed(gnutls_x509_privkey_t key, gnutls_digest_alg } if (seed == NULL || seed_size == 0) - return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + return gnutls_assert_val(GNUTLS_E_PK_NO_VALIDATION_PARAMS); data.type = GNUTLS_KEYGEN_SEED; data.data = (void*)seed; data.size = seed_size; - ret = gnutls_x509_privkey_generate2(okey, key->pk_algorithm, bits, + ret = gnutls_x509_privkey_generate2(okey, key->params.algo, bits, GNUTLS_PRIVKEY_FLAG_PROVABLE, &data, 1); if (ret < 0) { gnutls_assert(); goto cleanup; } - if (key->pk_algorithm == GNUTLS_PK_RSA) + if (key->params.algo == GNUTLS_PK_RSA) ret = cmp_rsa_key(key, okey); else ret = cmp_dsa_key(key, okey); @@ -1829,7 +2138,7 @@ int gnutls_x509_privkey_verify_params(gnutls_x509_privkey_t key) { int ret; - ret = _gnutls_pk_verify_priv_params(key->pk_algorithm, &key->params); + ret = _gnutls_pk_verify_priv_params(key->params.algo, &key->params); if (ret < 0) { gnutls_assert(); return ret; @@ -1872,7 +2181,7 @@ gnutls_x509_privkey_get_key_id(gnutls_x509_privkey_t key, } ret = - _gnutls_get_key_id(key->pk_algorithm, &key->params, + _gnutls_get_key_id(&key->params, output_data, output_data_size, flags); if (ret < 0) { gnutls_assert(); @@ -1882,68 +2191,6 @@ gnutls_x509_privkey_get_key_id(gnutls_x509_privkey_t key, } -/*- - * _gnutls_x509_privkey_sign_hash2: - * @signer: Holds the signer's key - * @hash_algo: The hash algorithm used - * @hash_data: holds the data to be signed - * @signature: will contain newly allocated signature - * @flags: (0) for now - * - * This function will sign the given hashed data using a signature algorithm - * supported by the private key. Signature algorithms are always used - * together with a hash functions. Different hash functions may be - * used for the RSA algorithm, but only SHA-1,SHA-224 and SHA-256 - * for the DSA keys, depending on their bit size. - * - * Use gnutls_x509_crt_get_preferred_hash_algorithm() to determine - * the hash algorithm. - * - * The RSA algorithm is used in PKCS #1 v1.5 mode. - * - * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a - * negative error value. - -*/ -static int -_gnutls_x509_privkey_sign_hash2(gnutls_x509_privkey_t signer, - const mac_entry_st * me, - unsigned int flags, - const gnutls_datum_t * hash_data, - gnutls_datum_t * signature) -{ - int ret; - gnutls_datum_t digest; - - digest.data = gnutls_malloc(hash_data->size); - if (digest.data == NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - digest.size = hash_data->size; - memcpy(digest.data, hash_data->data, digest.size); - - ret = pk_prepare_hash(signer->pk_algorithm, me, &digest); - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = - _gnutls_pk_sign(signer->pk_algorithm, signature, &digest, - &signer->params); - - if (ret < 0) { - gnutls_assert(); - goto cleanup; - } - - ret = 0; - - cleanup: - _gnutls_free_datum(&digest); - return ret; -} - /** * gnutls_x509_privkey_sign_hash: * @key: a key @@ -1955,6 +2202,10 @@ _gnutls_x509_privkey_sign_hash2(gnutls_x509_privkey_t signer, * requires the data to be hashed and stored in special formats * (e.g. BER Digest-Info for RSA). * + * This API is provided only for backwards compatibility, and thus + * restricted to RSA, DSA and ECDSA key types. For other key types please + * use gnutls_privkey_sign_hash() and gnutls_privkey_sign_data(). + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. * @@ -1972,9 +2223,16 @@ gnutls_x509_privkey_sign_hash(gnutls_x509_privkey_t key, return GNUTLS_E_INVALID_REQUEST; } + if (key->params.algo != GNUTLS_PK_RSA && key->params.algo != GNUTLS_PK_ECDSA && + key->params.algo != GNUTLS_PK_DSA) { + /* too primitive API - use only with legacy types */ + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + result = - _gnutls_pk_sign(key->pk_algorithm, signature, hash, - &key->params); + _gnutls_pk_sign(key->params.algo, signature, hash, + &key->params, &key->params.spki); if (result < 0) { gnutls_assert(); @@ -1987,7 +2245,7 @@ gnutls_x509_privkey_sign_hash(gnutls_x509_privkey_t key, /** * gnutls_x509_privkey_sign_data: * @key: a key - * @digest: should be MD5 or SHA1 + * @digest: should be a digest algorithm * @flags: should be 0 for now * @data: holds the data to be signed * @signature: will contain the signature @@ -2016,48 +2274,41 @@ gnutls_x509_privkey_sign_data(gnutls_x509_privkey_t key, const gnutls_datum_t * data, void *signature, size_t * signature_size) { - int result; - gnutls_datum_t sig = { NULL, 0 }; - gnutls_datum_t hash; - const mac_entry_st *me = hash_to_entry(digest); + gnutls_privkey_t privkey; + gnutls_datum_t sig = {NULL, 0}; + int ret; - if (key == NULL) { - gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; - } + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + return gnutls_assert_val(ret); - result = - pk_hash_data(key->pk_algorithm, me, &key->params, data, &hash); - if (result < 0) { + ret = gnutls_privkey_import_x509(privkey, key, 0); + if (ret < 0) { gnutls_assert(); - return result; + goto cleanup; } - result = - _gnutls_x509_privkey_sign_hash2(key, me, flags, &hash, &sig); - - _gnutls_free_datum(&hash); - - if (result < 0) { + ret = gnutls_privkey_sign_data(privkey, digest, flags, data, &sig); + if (ret < 0) { gnutls_assert(); - return result; + goto cleanup; } if (*signature_size < sig.size) { *signature_size = sig.size; - _gnutls_free_datum(&sig); - return GNUTLS_E_SHORT_MEMORY_BUFFER; + ret = GNUTLS_E_SHORT_MEMORY_BUFFER; + goto cleanup; } *signature_size = sig.size; memcpy(signature, sig.data, sig.size); +cleanup: _gnutls_free_datum(&sig); - - return 0; + gnutls_privkey_deinit(privkey); + return ret; } - /** * gnutls_x509_privkey_fix: * @key: a key @@ -2077,14 +2328,16 @@ int gnutls_x509_privkey_fix(gnutls_x509_privkey_t key) return GNUTLS_E_INVALID_REQUEST; } - asn1_delete_structure2(&key->key, ASN1_DELETE_FLAG_ZEROIZE); + if (key->key) { + asn1_delete_structure2(&key->key, ASN1_DELETE_FLAG_ZEROIZE); - ret = - _gnutls_asn1_encode_privkey(key->pk_algorithm, &key->key, - &key->params, key->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT); - if (ret < 0) { - gnutls_assert(); - return ret; + ret = + _gnutls_asn1_encode_privkey(&key->key, + &key->params); + if (ret < 0) { + gnutls_assert(); + return ret; + } } return 0; @@ -2130,3 +2383,4 @@ void gnutls_x509_privkey_set_flags(gnutls_x509_privkey_t key, { key->flags |= flags; } + diff --git a/lib/x509/privkey_openssl.c b/lib/x509/privkey_openssl.c index 1e826ed68e..9fc70e0322 100644 --- a/lib/x509/privkey_openssl.c +++ b/lib/x509/privkey_openssl.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/x509/privkey_pkcs8.c b/lib/x509/privkey_pkcs8.c index 0f1863d160..4ffb219759 100644 --- a/lib/x509/privkey_pkcs8.c +++ b/lib/x509/privkey_pkcs8.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2003-2016 Free Software Foundation, Inc. - * Copyright (C) 2014-2016 Red Hat + * Copyright (C) 2014-2017 Red Hat * Copyright (C) 2014-2016 Nikos Mavrogiannopoulos * * Author: Nikos Mavrogiannopoulos @@ -18,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -36,7 +36,8 @@ #include #include #include -#include +#include "attributes.h" +#include "prov-seed.h" static int _decode_pkcs8_ecc_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey); @@ -65,12 +66,50 @@ _encode_privkey(gnutls_x509_privkey_t pkey, gnutls_datum_t * raw) int ret; ASN1_TYPE spk = ASN1_TYPE_EMPTY; - switch (pkey->pk_algorithm) { + switch (pkey->params.algo) { + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: + /* we encode as octet string (which is going to be stored inside + * another octet string). No comments. */ + ret = _gnutls_x509_encode_string(ASN1_ETYPE_OCTET_STRING, + pkey->params.raw_priv.data, pkey->params.raw_priv.size, + raw); + if (ret < 0) + gnutls_assert(); + return ret; + + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + if ((ret = asn1_create_element + (_gnutls_get_gnutls_asn(), "GNUTLS.GOSTPrivateKey", &spk)) + != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto error; + } + + ret = _gnutls_x509_write_key_int_le(spk, "", pkey->params.params[GOST_K]); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + ret = _gnutls_x509_der_encode(spk, "", raw, 0); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + asn1_delete_structure2(&spk, ASN1_DELETE_FLAG_ZEROIZE); + break; + case GNUTLS_PK_RSA: - case GNUTLS_PK_EC: + case GNUTLS_PK_RSA_PSS: + case GNUTLS_PK_ECDSA: ret = - gnutls_x509_privkey_export2(pkey, GNUTLS_X509_FMT_DER, - raw); + _gnutls_x509_export_int2(pkey->key, GNUTLS_X509_FMT_DER, + "", raw); if (ret < 0) { gnutls_assert(); goto error; @@ -132,15 +171,14 @@ encode_to_private_key_info(gnutls_x509_privkey_t pkey, gnutls_datum_t algo_params = { NULL, 0 }; gnutls_datum_t algo_privkey = { NULL, 0 }; - oid = gnutls_pk_get_oid(pkey->pk_algorithm); + oid = gnutls_pk_get_oid(pkey->params.algo); if (oid == NULL) { gnutls_assert(); return GNUTLS_E_UNIMPLEMENTED_FEATURE; } result = - _gnutls_x509_write_pubkey_params(pkey->pk_algorithm, - &pkey->params, &algo_params); + _gnutls_x509_write_pubkey_params(&pkey->params, &algo_params); if (result < 0) { gnutls_assert(); return result; @@ -207,13 +245,31 @@ encode_to_private_key_info(gnutls_x509_privkey_t pkey, goto error; } - /* Append an empty Attributes field. - */ - result = asn1_write_value(*pkey_info, "attributes", NULL, 0); - if (result != ASN1_SUCCESS) { - gnutls_assert(); - result = _gnutls_asn2err(result); - goto error; + if ((pkey->params.pkflags & GNUTLS_PK_FLAG_PROVABLE) && pkey->params.seed_size > 0) { + gnutls_datum_t seed_info; + /* rfc8479 attribute encoding */ + + result = _x509_encode_provable_seed(pkey, &seed_info); + if (result < 0) { + gnutls_assert(); + goto error; + } + + result = _x509_set_attribute(*pkey_info, "attributes", OID_ATTR_PROV_SEED, &seed_info); + gnutls_free(seed_info.data); + if (result < 0) { + gnutls_assert(); + goto error; + } + } else { + /* Append an empty Attributes field. + */ + result = asn1_write_value(*pkey_info, "attributes", NULL, 0); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + result = _gnutls_asn2err(result); + goto error; + } } /* DER Encode the generated private key info. @@ -385,7 +441,7 @@ gnutls_x509_privkey_export_pkcs8(gnutls_x509_privkey_t key, { ASN1_TYPE pkcs8_asn = NULL, pkey_info; int ret; - gnutls_datum_t tmp; + gnutls_datum_t tmp = {NULL, 0}; schema_id schema; if (key == NULL) { @@ -545,7 +601,6 @@ gnutls_pkcs8_info(const gnutls_datum_t * data, gnutls_x509_crt_fmt_t format, cleanup: if (ret != GNUTLS_E_UNKNOWN_CIPHER_TYPE && oid) { gnutls_free(*oid); - *oid = NULL; } if (need_free) _gnutls_free_datum(&_data); @@ -587,7 +642,7 @@ gnutls_x509_privkey_export2_pkcs8(gnutls_x509_privkey_t key, { ASN1_TYPE pkcs8_asn = NULL, pkey_info; int ret; - gnutls_datum_t tmp; + gnutls_datum_t tmp = {NULL, 0}; schema_id schema; if (key == NULL) { @@ -665,7 +720,7 @@ static int pkcs8_key_decrypt(const gnutls_datum_t * raw_key, { int result, len; char enc_oid[MAX_OID_SIZE]; - gnutls_datum_t tmp; + gnutls_datum_t tmp = {NULL, 0}; int params_start, params_end, params_len; struct pbkdf2_params kdf_params; struct pbe_enc_params enc_params; @@ -917,7 +972,7 @@ static int _decode_pkcs8_rsa_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey) { int ret; - gnutls_datum_t tmp; + gnutls_datum_t tmp = {NULL, 0}; ret = _gnutls_x509_read_value(pkcs8_asn, "privateKey", &tmp); if (ret < 0) { @@ -929,6 +984,7 @@ _decode_pkcs8_rsa_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey) _gnutls_free_key_datum(&tmp); if (pkey->key == NULL) { + ret = GNUTLS_E_PK_INVALID_PRIVKEY; gnutls_assert(); goto error; } @@ -939,13 +995,58 @@ _decode_pkcs8_rsa_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey) return ret; } +/* Decodes an RSA-PSS privateKey from a PKCS8 structure. + */ +static int +_decode_pkcs8_rsa_pss_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey) +{ + int ret; + gnutls_datum_t tmp = {NULL, 0}; + gnutls_x509_spki_st params; + + memset(¶ms, 0, sizeof(params)); + + ret = _gnutls_x509_read_value(pkcs8_asn, + "privateKeyAlgorithm.parameters", &tmp); + if (ret < 0) { + if (ret == GNUTLS_E_ASN1_VALUE_NOT_FOUND || ret == GNUTLS_E_ASN1_ELEMENT_NOT_FOUND) + goto skip_params; + + gnutls_assert(); + goto error; + } + + ret = _gnutls_x509_read_rsa_pss_params(tmp.data, tmp.size, ¶ms); + _gnutls_free_key_datum(&tmp); + + if (ret < 0) { + gnutls_assert(); + goto error; + } + + skip_params: + ret = _decode_pkcs8_rsa_key(pkcs8_asn, pkey); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + pkey->params.algo = GNUTLS_PK_RSA_PSS; + memcpy(&pkey->params.spki, ¶ms, sizeof(gnutls_x509_spki_st)); + + ret = 0; + + error: + return ret; +} + /* Decodes an ECC privateKey from a PKCS8 structure. */ static int _decode_pkcs8_ecc_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey) { int ret; - gnutls_datum_t tmp; + gnutls_datum_t tmp = {NULL, 0}; unsigned char oid[MAX_OID_SIZE]; unsigned curve = GNUTLS_ECC_CURVE_INVALID; int len, result; @@ -960,6 +1061,7 @@ _decode_pkcs8_ecc_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey) if (result == ASN1_SUCCESS) { ret = _gnutls_x509_read_ecc_params(oid, len, &curve); if (ret < 0) { + _gnutls_debug_log("PKCS#8: unknown curve OID %s\n", oid); curve = GNUTLS_ECC_CURVE_INVALID; } } @@ -984,13 +1086,238 @@ _decode_pkcs8_ecc_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey) return ret; } +static int +_decode_pkcs8_eddsa_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey, const char *oid) +{ + int ret; + gnutls_datum_t tmp; + gnutls_ecc_curve_t curve = GNUTLS_ECC_CURVE_INVALID; + const gnutls_ecc_curve_entry_st *ce; + + gnutls_pk_params_init(&pkey->params); + + curve = gnutls_oid_to_ecc_curve(oid); + if (curve == GNUTLS_ECC_CURVE_INVALID) { + _gnutls_debug_log("PKCS#8: unknown curve OID %s\n", oid); + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + } + + ce = _gnutls_ecc_curve_get_params(curve); + if (_curve_is_eddsa(ce)) { + ret = _gnutls_x509_read_string(pkcs8_asn, "privateKey", &tmp, ASN1_ETYPE_OCTET_STRING, 1); + if (ret < 0) { + gnutls_assert(); + return gnutls_assert_val(ret); + } + + if (tmp.size != ce->size) { + gnutls_free(tmp.data); + return gnutls_assert_val(GNUTLS_E_ILLEGAL_PARAMETER); + } + gnutls_free(pkey->params.raw_priv.data); + switch (curve) { + case GNUTLS_ECC_CURVE_ED25519: + pkey->params.algo = GNUTLS_PK_EDDSA_ED25519; + break; + case GNUTLS_ECC_CURVE_ED448: + pkey->params.algo = GNUTLS_PK_EDDSA_ED448; + break; + default: + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + } + pkey->params.raw_priv.data = tmp.data; + pkey->params.raw_priv.size = tmp.size; + pkey->params.curve = curve; + + tmp.data = NULL; + return 0; + } else { + return gnutls_assert_val(GNUTLS_E_ECC_UNSUPPORTED_CURVE); + } +} + +/* Converts a GOST key to + * an internal structure (gnutls_private_key) + */ +static int +_privkey_decode_gost_key(const gnutls_datum_t * raw_key, + gnutls_x509_privkey_t pkey) +{ + int ret; + int ecc_size = gnutls_ecc_curve_get_size(pkey->params.curve); + + /* Just to be sure here */ + if (ecc_size <= 0) { + gnutls_assert(); + ret = GNUTLS_E_ECC_UNSUPPORTED_CURVE; + goto error; + } + + /* Private key form described in R 50.1.112-2016. + * Private key can come up as masked value concatenated with several masks. + * each part is of ecc_size bytes. Key will be unmasked in pk_fixup */ + if (raw_key->size % ecc_size == 0) { + ret = _gnutls_mpi_init_scan_le(&pkey->params.params[GOST_K], + raw_key->data, raw_key->size); + if (ret < 0) { + gnutls_assert(); + goto error; + } + } else if (raw_key->data[0] == ASN1_TAG_INTEGER) { + ASN1_TYPE pkey_asn; + + /* Very old format: INTEGER packed in OCTET STRING */ + if ((ret = asn1_create_element(_gnutls_get_gnutls_asn(), + "GNUTLS.GOSTPrivateKeyOld", + &pkey_asn)) != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto error; + } + + ret = _asn1_strict_der_decode(&pkey_asn, + raw_key->data, raw_key->size, + NULL); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + asn1_delete_structure2(&pkey_asn, ASN1_DELETE_FLAG_ZEROIZE); + goto error; + } + + ret = _gnutls_x509_read_key_int(pkey_asn, "", + &pkey->params.params[GOST_K]); + if (ret < 0) { + gnutls_assert(); + asn1_delete_structure2(&pkey_asn, ASN1_DELETE_FLAG_ZEROIZE); + goto error; + } + asn1_delete_structure2(&pkey_asn, ASN1_DELETE_FLAG_ZEROIZE); + } else if (raw_key->data[0] == ASN1_TAG_OCTET_STRING) { + ASN1_TYPE pkey_asn; + + /* format: OCTET STRING packed in OCTET STRING */ + if ((ret = asn1_create_element(_gnutls_get_gnutls_asn(), + "GNUTLS.GOSTPrivateKey", + &pkey_asn)) != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + goto error; + } + + ret = _asn1_strict_der_decode(&pkey_asn, + raw_key->data, raw_key->size, + NULL); + if (ret != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(ret); + asn1_delete_structure2(&pkey_asn, ASN1_DELETE_FLAG_ZEROIZE); + goto error; + } + + ret = _gnutls_x509_read_key_int_le(pkey_asn, "", + &pkey->params.params[GOST_K]); + if (ret < 0) { + gnutls_assert(); + asn1_delete_structure2(&pkey_asn, ASN1_DELETE_FLAG_ZEROIZE); + goto error; + } + asn1_delete_structure2(&pkey_asn, ASN1_DELETE_FLAG_ZEROIZE); + } else { + gnutls_assert(); + ret = GNUTLS_E_PARSING_ERROR; + goto error; + } + + pkey->params.params_nr++; + + return 0; + + error: + return ret; + +} + +/* Decodes a GOST privateKey from a PKCS8 structure. + */ +static int +_decode_pkcs8_gost_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey, + gnutls_pk_algorithm_t algo) +{ + int ret; + gnutls_datum_t tmp; + unsigned char oid[3 * MAX_OID_SIZE]; /* GOST parameters can have 3 OIDs at most */ + int len, result; + + gnutls_pk_params_init(&pkey->params); + + len = sizeof(oid); + result = asn1_read_value(pkcs8_asn, "privateKeyAlgorithm.parameters", + oid, &len); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + ret = GNUTLS_E_PARSING_ERROR; + goto error; + } else { + ret = _gnutls_x509_read_gost_params(oid, len, &pkey->params, algo); + if (ret < 0) { + gnutls_assert(); + goto error; + } + } + + /* Will be fixed later by pk_fixup */ + ret = _gnutls_mpi_init(&pkey->params.params[GOST_X]); + if (ret < 0) { + gnutls_assert(); + goto error; + } + pkey->params.params_nr++; + + ret = _gnutls_mpi_init(&pkey->params.params[GOST_Y]); + if (ret < 0) { + gnutls_assert(); + goto error; + } + pkey->params.params_nr++; + + _gnutls_mpi_set_ui(pkey->params.params[GOST_X], 0); + _gnutls_mpi_set_ui(pkey->params.params[GOST_Y], 0); + + ret = _gnutls_x509_read_value(pkcs8_asn, "privateKey", &tmp); + if (ret < 0) { + gnutls_assert(); + goto error; + } + + ret = _privkey_decode_gost_key(&tmp, pkey); + _gnutls_free_key_datum(&tmp); + + if (ret < 0) { + gnutls_assert(); + goto error; + } + + pkey->params.algo = algo; + + return 0; + +error: + gnutls_pk_params_clear(&pkey->params); + gnutls_pk_params_release(&pkey->params); + + return ret; +} + /* Decodes an DSA privateKey and params from a PKCS8 structure. */ static int _decode_pkcs8_dsa_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey) { int ret; - gnutls_datum_t tmp; + gnutls_datum_t tmp = {NULL, 0}; + + gnutls_pk_params_init(&pkey->params); ret = _gnutls_x509_read_value(pkcs8_asn, "privateKey", &tmp); if (ret < 0) { @@ -1050,8 +1377,8 @@ _decode_pkcs8_dsa_key(ASN1_TYPE pkcs8_asn, gnutls_x509_privkey_t pkey) pkey->params.params_nr = DSA_PRIVATE_PARAMS; ret = - _gnutls_asn1_encode_privkey(GNUTLS_PK_DSA, &pkey->key, - &pkey->params, pkey->flags&GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT); + _gnutls_asn1_encode_privkey(&pkey->key, + &pkey->params); if (ret < 0) { gnutls_assert(); goto error; @@ -1073,6 +1400,8 @@ decode_private_key_info(const gnutls_datum_t * der, int result, len; char oid[MAX_OID_SIZE]; ASN1_TYPE pkcs8_asn = ASN1_TYPE_EMPTY; + gnutls_datum_t sder; + int ret; if ((result = asn1_create_element(_gnutls_get_pkix(), @@ -1102,11 +1431,8 @@ decode_private_key_info(const gnutls_datum_t * der, goto error; } - /* we only support RSA and DSA private keys. - */ - - pkey->pk_algorithm = gnutls_oid_to_pk(oid); - if (pkey->pk_algorithm == GNUTLS_PK_UNKNOWN) { + pkey->params.algo = gnutls_oid_to_pk(oid); + if (pkey->params.algo == GNUTLS_PK_UNKNOWN) { gnutls_assert(); _gnutls_debug_log ("PKCS #8 private key OID '%s' is unsupported.\n", @@ -1118,15 +1444,32 @@ decode_private_key_info(const gnutls_datum_t * der, /* Get the DER encoding of the actual private key. */ - if (pkey->pk_algorithm == GNUTLS_PK_RSA) - result = _decode_pkcs8_rsa_key(pkcs8_asn, pkey); - else if (pkey->pk_algorithm == GNUTLS_PK_DSA) - result = _decode_pkcs8_dsa_key(pkcs8_asn, pkey); - else if (pkey->pk_algorithm == GNUTLS_PK_EC) - result = _decode_pkcs8_ecc_key(pkcs8_asn, pkey); - else { - result = gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); - goto error; + switch(pkey->params.algo) { + case GNUTLS_PK_RSA: + result = _decode_pkcs8_rsa_key(pkcs8_asn, pkey); + break; + case GNUTLS_PK_RSA_PSS: + result = _decode_pkcs8_rsa_pss_key(pkcs8_asn, pkey); + break; + case GNUTLS_PK_DSA: + result = _decode_pkcs8_dsa_key(pkcs8_asn, pkey); + break; + case GNUTLS_PK_ECDSA: + result = _decode_pkcs8_ecc_key(pkcs8_asn, pkey); + break; + case GNUTLS_PK_EDDSA_ED25519: + case GNUTLS_PK_EDDSA_ED448: + result = _decode_pkcs8_eddsa_key(pkcs8_asn, pkey, oid); + break; + case GNUTLS_PK_GOST_01: + case GNUTLS_PK_GOST_12_256: + case GNUTLS_PK_GOST_12_512: + result = _decode_pkcs8_gost_key(pkcs8_asn, + pkey, pkey->params.algo); + break; + default: + result = gnutls_assert_val(GNUTLS_E_UNIMPLEMENTED_FEATURE); + goto error; } if (result < 0) { @@ -1134,11 +1477,20 @@ decode_private_key_info(const gnutls_datum_t * der, goto error; } + /* check for provable parameters attribute */ + ret = _x509_parse_attribute(pkcs8_asn, "attributes", OID_ATTR_PROV_SEED, 0, 1, &sder); + if (ret >= 0) { /* ignore it when not being present */ + ret = _x509_decode_provable_seed(pkey, &sder); + gnutls_free(sder.data); + if (ret < 0) { + gnutls_assert(); + } + } + result = 0; error: asn1_delete_structure2(&pkcs8_asn, ASN1_DELETE_FLAG_ZEROIZE); - return result; } @@ -1188,7 +1540,7 @@ gnutls_x509_privkey_import_pkcs8(gnutls_x509_privkey_t key, _data.data = data->data; _data.size = data->size; - key->pk_algorithm = GNUTLS_PK_UNKNOWN; + key->params.algo = GNUTLS_PK_UNKNOWN; /* If the Certificate is in PEM format then decode it */ @@ -1239,8 +1591,10 @@ gnutls_x509_privkey_import_pkcs8(gnutls_x509_privkey_t key, goto cleanup; } + /* This part is necessary to get the public key on certain algorithms. + * In the import above we only get the private key. */ result = - _gnutls_pk_fixup(key->pk_algorithm, GNUTLS_IMPORT, &key->params); + _gnutls_pk_fixup(key->params.algo, GNUTLS_IMPORT, &key->params); if (result < 0) { gnutls_assert(); goto cleanup; @@ -1253,8 +1607,9 @@ gnutls_x509_privkey_import_pkcs8(gnutls_x509_privkey_t key, */ return 0; - cleanup: - key->pk_algorithm = GNUTLS_PK_UNKNOWN; + cleanup: + asn1_delete_structure2(&key->key, ASN1_DELETE_FLAG_ZEROIZE); + key->params.algo = GNUTLS_PK_UNKNOWN; if (need_free) _gnutls_free_datum(&_data); return result; diff --git a/lib/x509/privkey_pkcs8_pbes1.c b/lib/x509/privkey_pkcs8_pbes1.c index 1e4ba60aa1..7d977a3350 100644 --- a/lib/x509/privkey_pkcs8_pbes1.c +++ b/lib/x509/privkey_pkcs8_pbes1.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -135,7 +135,7 @@ _gnutls_decrypt_pbes1_des_md5_data(const char *password, unsigned password_len, const struct pbkdf2_params *kdf_params, const struct pbe_enc_params *enc_params, - gnutls_datum_t *encrypted_data, /* we re-use it */ + const gnutls_datum_t *encrypted_data, gnutls_datum_t *decrypted_data) { int result; diff --git a/lib/x509/prov-seed.c b/lib/x509/prov-seed.c new file mode 100644 index 0000000000..5ce17a7dfa --- /dev/null +++ b/lib/x509/prov-seed.c @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include +#include +#include "errors.h" +#include +#include +#include +#include +#include "prov-seed.h" + +/* This function encodes a seed value and a hash algorithm OID to the format + * described in RFC8479. The output is the DER encoded form. + */ +int _x509_encode_provable_seed(gnutls_x509_privkey_t pkey, gnutls_datum_t *der) +{ + + ASN1_TYPE c2; + int ret, result; + const char *oid; + + oid = gnutls_digest_get_oid(pkey->params.palgo); + if (oid == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if ((result = + asn1_create_element(_gnutls_get_gnutls_asn(), + "GNUTLS.ProvableSeed", + &c2)) != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + result = asn1_write_value(c2, "seed", pkey->params.seed, pkey->params.seed_size); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(result); + goto cleanup; + } + + result = asn1_write_value(c2, "algorithm", oid, 1); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(result); + goto cleanup; + } + + ret = _gnutls_x509_der_encode(c2, "", der, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = 0; + + cleanup: + asn1_delete_structure2(&c2, ASN1_DELETE_FLAG_ZEROIZE); + return ret; +} + +/* This function decodes a DER encoded form of seed and a hash algorithm, as in + * RFC8479. + */ +int _x509_decode_provable_seed(gnutls_x509_privkey_t pkey, const gnutls_datum_t *der) +{ + + ASN1_TYPE c2; + int ret, result; + char oid[MAX_OID_SIZE]; + int oid_size; + gnutls_datum_t seed = {NULL, 0}; + + if ((result = + asn1_create_element(_gnutls_get_gnutls_asn(), + "GNUTLS.ProvableSeed", + &c2)) != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + result = _asn1_strict_der_decode(&c2, der->data, der->size, NULL); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(result); + goto cleanup; + } + + ret = _gnutls_x509_read_value(c2, "seed", &seed); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + if (seed.size <= sizeof(pkey->params.seed)) { + memcpy(pkey->params.seed, seed.data, seed.size); + pkey->params.seed_size = seed.size; + } else { + ret = 0; /* ignore struct */ + _gnutls_debug_log("%s: ignoring ProvableSeed due to very long params\n", __func__); + goto cleanup; + } + + oid_size = sizeof(oid); + result = asn1_read_value(c2, "algorithm", oid, &oid_size); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + ret = _gnutls_asn2err(result); + goto cleanup; + } + + pkey->params.palgo = gnutls_oid_to_digest(oid); + pkey->params.pkflags |= GNUTLS_PK_FLAG_PROVABLE; + + ret = 0; + + cleanup: + gnutls_free(seed.data); + asn1_delete_structure2(&c2, ASN1_DELETE_FLAG_ZEROIZE); + return ret; +} diff --git a/lib/x509/prov-seed.h b/lib/x509/prov-seed.h new file mode 100644 index 0000000000..a7753ccb50 --- /dev/null +++ b/lib/x509/prov-seed.h @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_LIB_X509_PROV_SEED_H +#define GNUTLS_LIB_X509_PROV_SEED_H + +int _x509_encode_provable_seed(gnutls_x509_privkey_t pkey, gnutls_datum_t *der); +int _x509_decode_provable_seed(gnutls_x509_privkey_t pkey, const gnutls_datum_t *der); + +#endif /* GNUTLS_LIB_X509_PROV_SEED_H */ diff --git a/lib/x509/sign.c b/lib/x509/sign.c index 35e57f01a2..461524f5bf 100644 --- a/lib/x509/sign.c +++ b/lib/x509/sign.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -36,6 +36,7 @@ #include #include #include +#include /* This is the same as the _gnutls_x509_sign, but this one will decode * the ASN1_TYPE given, and sign the DER data. Actually used to get the DER @@ -48,6 +49,43 @@ _gnutls_x509_get_tbs(ASN1_TYPE cert, const char *tbs_name, return _gnutls_x509_der_encode(cert, tbs_name, tbs, 0); } +int +_gnutls_x509_crt_get_spki_params(gnutls_x509_crt_t crt, + const gnutls_x509_spki_st *key_params, + gnutls_x509_spki_st *params) +{ + int result; + gnutls_x509_spki_st crt_params; + + result = _gnutls_x509_crt_read_spki_params(crt, &crt_params); + if (result < 0) { + gnutls_assert(); + return result; + } + + if (crt_params.pk == GNUTLS_PK_RSA_PSS) { + if (key_params->pk == GNUTLS_PK_RSA_PSS) { + if (crt_params.rsa_pss_dig != key_params->rsa_pss_dig) { + gnutls_assert(); + return GNUTLS_E_CERTIFICATE_ERROR; + } + + if (crt_params.salt_size < key_params->salt_size) { + gnutls_assert(); + return GNUTLS_E_CERTIFICATE_ERROR; + } + } else if (key_params->pk != GNUTLS_PK_RSA && key_params->pk != GNUTLS_PK_UNKNOWN) { + gnutls_assert(); + return GNUTLS_E_CERTIFICATE_ERROR; + } + memcpy(params, &crt_params, sizeof(gnutls_x509_spki_st)); + } else { + memcpy(params, key_params, sizeof(gnutls_x509_spki_st)); + } + + return 0; +} + /*- * _gnutls_x509_pkix_sign - This function will sign a CRL or a certificate with a key * @src: should contain an ASN1_TYPE @@ -63,6 +101,7 @@ _gnutls_x509_get_tbs(ASN1_TYPE cert, const char *tbs_name, int _gnutls_x509_pkix_sign(ASN1_TYPE src, const char *src_name, gnutls_digest_algorithm_t dig, + unsigned int flags, gnutls_x509_crt_t issuer, gnutls_privkey_t issuer_key) { @@ -70,6 +109,32 @@ _gnutls_x509_pkix_sign(ASN1_TYPE src, const char *src_name, gnutls_datum_t signature; gnutls_datum_t tbs; char name[128]; + gnutls_pk_algorithm_t pk; + gnutls_x509_spki_st key_params, params; + const gnutls_sign_entry_st *se; + + pk = gnutls_x509_crt_get_pk_algorithm(issuer, NULL); + if (pk == GNUTLS_PK_UNKNOWN) + pk = gnutls_privkey_get_pk_algorithm(issuer_key, NULL); + + result = _gnutls_privkey_get_spki_params(issuer_key, &key_params); + if (result < 0) { + gnutls_assert(); + return result; + } + + result = _gnutls_x509_crt_get_spki_params(issuer, &key_params, ¶ms); + if (result < 0) { + gnutls_assert(); + return result; + } + + result = _gnutls_privkey_update_spki_params(issuer_key, pk, dig, flags, + ¶ms); + if (result < 0) { + gnutls_assert(); + return result; + } /* Step 1. Copy the issuer's name into the certificate. */ @@ -89,9 +154,13 @@ _gnutls_x509_pkix_sign(ASN1_TYPE src, const char *src_name, _gnutls_str_cpy(name, sizeof(name), src_name); _gnutls_str_cat(name, sizeof(name), ".signature"); - result = _gnutls_x509_write_sig_params(src, name, - gnutls_privkey_get_pk_algorithm - (issuer_key, NULL), dig, 0); + se = _gnutls_pk_to_sign_entry(params.pk, dig); + if (se == NULL) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM); + + _gnutls_debug_log("signing structure using %s\n", se->name); + + result = _gnutls_x509_write_sign_params(src, name, se, ¶ms); if (result < 0) { gnutls_assert(); return result; @@ -106,8 +175,14 @@ _gnutls_x509_pkix_sign(ASN1_TYPE src, const char *src_name, return result; } - result = - gnutls_privkey_sign_data(issuer_key, dig, 0, &tbs, &signature); + FIX_SIGN_PARAMS(params, flags, dig); + + if (_gnutls_pk_is_not_prehashed(params.pk)) { + result = privkey_sign_raw_data(issuer_key, se, &tbs, &signature, ¶ms); + } else { + result = privkey_sign_and_hash_data(issuer_key, se, + &tbs, &signature, ¶ms); + } gnutls_free(tbs.data); if (result < 0) { @@ -132,9 +207,8 @@ _gnutls_x509_pkix_sign(ASN1_TYPE src, const char *src_name, * the same. */ - result = _gnutls_x509_write_sig_params(src, "signatureAlgorithm", - gnutls_privkey_get_pk_algorithm - (issuer_key, NULL), dig, 0); + result = _gnutls_x509_write_sign_params(src, "signatureAlgorithm", + se, ¶ms); if (result < 0) { gnutls_assert(); return result; diff --git a/lib/x509/spki.c b/lib/x509/spki.c new file mode 100644 index 0000000000..c87ff1b3b2 --- /dev/null +++ b/lib/x509/spki.c @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Authors: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "gnutls_int.h" +#include "errors.h" +#include +#include +#include + +/** + * gnutls_x509_spki_init: + * @spki: A pointer to the type to be initialized + * + * This function will initialize a SubjectPublicKeyInfo structure used + * in PKIX. The structure is used to set additional parameters + * in the public key information field of a certificate. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.0 + * + **/ +int +gnutls_x509_spki_init(gnutls_x509_spki_t *spki) +{ + gnutls_x509_spki_t tmp; + + FAIL_IF_LIB_ERROR; + + tmp = + gnutls_calloc(1, sizeof(gnutls_x509_spki_st)); + + if (!tmp) + return GNUTLS_E_MEMORY_ERROR; + + *spki = tmp; + + return 0; /* success */ +} + +/** + * gnutls_x509_spki_deinit: + * @spki: the SubjectPublicKeyInfo structure + * + * This function will deinitialize a SubjectPublicKeyInfo structure. + * + * Since: 3.6.0 + * + **/ +void +gnutls_x509_spki_deinit(gnutls_x509_spki_t spki) +{ + gnutls_free(spki); +} + +/** + * gnutls_x509_spki_set_rsa_pss_params: + * @spki: the SubjectPublicKeyInfo structure + * @dig: a digest algorithm of type #gnutls_digest_algorithm_t + * @salt_size: the size of salt string + * + * This function will set the public key parameters for + * an RSA-PSS algorithm, in the SubjectPublicKeyInfo structure. + * + * Since: 3.6.0 + * + **/ +void +gnutls_x509_spki_set_rsa_pss_params(gnutls_x509_spki_t spki, + gnutls_digest_algorithm_t dig, + unsigned int salt_size) +{ + spki->pk = GNUTLS_PK_RSA_PSS; + spki->rsa_pss_dig = dig; + spki->salt_size = salt_size; +} + +/** + * gnutls_x509_spki_get_rsa_pss_params: + * @spki: the SubjectPublicKeyInfo structure + * @dig: if non-NULL, it will hold the digest algorithm + * @salt_size: if non-NULL, it will hold the salt size + * + * This function will get the public key algorithm parameters + * of RSA-PSS type. + * + * Returns: zero if the parameters are present or a negative + * value on error. + * + * Since: 3.6.0 + * + **/ +int +gnutls_x509_spki_get_rsa_pss_params(gnutls_x509_spki_t spki, + gnutls_digest_algorithm_t *dig, + unsigned int *salt_size) +{ + if (spki->pk == 0) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + if (spki->pk != GNUTLS_PK_RSA_PSS) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + if (dig) + *dig = spki->rsa_pss_dig; + if (salt_size) + *salt_size = spki->salt_size; + + return 0; +} diff --git a/lib/x509/time.c b/lib/x509/time.c index 4d2b789268..fa10a91002 100644 --- a/lib/x509/time.c +++ b/lib/x509/time.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -33,9 +33,12 @@ #include "x509_int.h" #include "extras/hex.h" #include +#include -/* TIME functions - * Convertions between generalized or UTC time to time_t +time_t _gnutls_utcTime2gtime(const char *ttime); + +/* TIME functions + * Conversions between generalized or UTC time to time_t * */ @@ -56,7 +59,7 @@ typedef struct fake_tm { * who placed it under public domain: */ -/* The number of days in each month. +/* The number of days in each month. */ static const int MONTHDAYS[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 @@ -69,7 +72,7 @@ static const int MONTHDAYS[] = { /* ** Given a struct tm representing a calendar time in UTC, convert it to ** seconds since epoch. Returns (time_t) -1 if the time is not - ** convertable. Note that this function does not canonicalize the provided + ** convertible. Note that this function does not canonicalize the provided ** struct tm, nor does it allow out of range values or years before 1970. */ static time_t mktime_utc(const struct fake_tm *tm) @@ -80,7 +83,7 @@ static time_t mktime_utc(const struct fake_tm *tm) /* We do allow some ill-formed dates, but we don't do anything special * with them and our callers really shouldn't pass them to us. Do * explicitly disallow the ones that would cause invalid array accesses - * or other algorithm problems. + * or other algorithm problems. */ if (tm->tm_mon < 0 || tm->tm_mon > 11 || tm->tm_year < 1970) return (time_t) - 1; @@ -89,7 +92,7 @@ static time_t mktime_utc(const struct fake_tm *tm) if (tm->tm_sec > 60 || tm->tm_min > 59 || tm->tm_mday > 31 || tm->tm_mday < 1 || tm->tm_hour > 23) return (time_t) - 1; -/* Convert to a time_t. +/* Convert to a time_t. */ for (i = 1970; i < tm->tm_year; i++) result += 365 + ISLEAP(i); @@ -171,16 +174,27 @@ static time_t time2gtime(const char *ttime, int year) * * (seconds are optional) */ -static time_t utcTime2gtime(const char *ttime) +time_t _gnutls_utcTime2gtime(const char *ttime) { char xx[3]; - int year; + int year, i; + int len = strlen(ttime); - if (strlen(ttime) < 10) { + if (len < 10) { gnutls_assert(); return (time_t) - 1; } + +#ifdef STRICT_DER_TIME + /* Make sure everything else is digits. */ + for (i = 0; i < len - 1; i++) { + if (c_isdigit(ttime[i])) + continue; + return gnutls_assert_val((time_t)-1); + } +#endif xx[2] = 0; + /* get the year */ memcpy(xx, ttime, 2); /* year */ @@ -263,6 +277,7 @@ gtime_to_suitable_time(time_t gtime, char *str_time, size_t str_time_size, unsig *tag = ASN1_TAG_UTCTime; ret = strftime(str_time, str_time_size, "%y%m%d%H%M%SZ", &_tm); } + if (!ret) { gnutls_assert(); return GNUTLS_E_SHORT_MEMORY_BUFFER; @@ -276,7 +291,7 @@ gtime_to_generalTime(time_t gtime, char *str_time, size_t str_time_size) { size_t ret; struct tm _tm; - + if (gtime == (time_t)-1 #if SIZEOF_LONG == 8 || gtime >= 253402210800 @@ -345,7 +360,7 @@ time_t _gnutls_x509_get_time(ASN1_TYPE c2, const char *where, int force_general) len = sizeof(ttime) - 1; result = asn1_read_value(c2, name, ttime, &len); if (result == ASN1_SUCCESS) - c_time = utcTime2gtime(ttime); + c_time = _gnutls_utcTime2gtime(ttime); } /* We cannot handle dates after 2031 in 32 bit machines. diff --git a/lib/x509/tls_features.c b/lib/x509/tls_features.c index d6055fa28a..bbb9896f99 100644 --- a/lib/x509/tls_features.c +++ b/lib/x509/tls_features.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/x509/verify-high.c b/lib/x509/verify-high.c index d78a2d4b7b..b1421ef17a 100644 --- a/lib/x509/verify-high.c +++ b/lib/x509/verify-high.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -186,14 +186,6 @@ add_new_ca_to_rdn_seq(gnutls_x509_trust_list_t list, * This will be sent to clients when a certificate * request message is sent. */ - - /* FIXME: in case of a client it is not needed - * to do that. This would save time and memory. - * However we don't have that information available - * here. - * Further, this function is now much more efficient, - * so optimizing that is less important. - */ tmp.data = ca->raw_dn.data; tmp.size = ca->raw_dn.size; @@ -256,14 +248,23 @@ trust_list_add_compat(gnutls_x509_trust_list_t list, * @flags: flags from %gnutls_trust_list_flags_t * * This function will add the given certificate authorities - * to the trusted list. The list of CAs must not be deinitialized - * during this structure's lifetime. + * to the trusted list. The CAs in @clist must not be deinitialized + * during the lifetime of @list. * * If the flag %GNUTLS_TL_NO_DUPLICATES is specified, then - * the provided @clist entries that are duplicates will not be - * added to the list and will be deinitialized. + * this function will ensure that no duplicates will be + * present in the final trust list. + * + * If the flag %GNUTLS_TL_NO_DUPLICATE_KEY is specified, then + * this function will ensure that no certificates with the + * same key are present in the final trust list. + * + * If either %GNUTLS_TL_NO_DUPLICATE_KEY or %GNUTLS_TL_NO_DUPLICATES + * are given, gnutls_x509_trust_list_deinit() must be called with parameter + * @all being 1. * - * Returns: The number of added elements is returned. + * Returns: The number of added elements is returned; that includes + * duplicate entries. * * Since: 3.0.0 **/ @@ -273,7 +274,7 @@ gnutls_x509_trust_list_add_cas(gnutls_x509_trust_list_t list, unsigned clist_size, unsigned int flags) { unsigned i, j; - uint32_t hash; + size_t hash; int ret; unsigned exists; @@ -335,7 +336,7 @@ gnutls_x509_trust_list_add_cas(gnutls_x509_trust_list_t list, ret = add_new_ca_to_rdn_seq(list, clist[i]); if (ret < 0) { gnutls_assert(); - return i; + return i+1; } } } @@ -347,8 +348,6 @@ static int advance_iter(gnutls_x509_trust_list_t list, gnutls_x509_trust_list_iter_t iter) { - int ret; - if (iter->node_index < list->size) { ++iter->ca_index; @@ -366,8 +365,8 @@ advance_iter(gnutls_x509_trust_list_t list, #ifdef ENABLE_PKCS11 if (list->pkcs11_token != NULL) { if (iter->pkcs11_list == NULL) { - ret = gnutls_pkcs11_obj_list_import_url2(&iter->pkcs11_list, &iter->pkcs11_size, - list->pkcs11_token, (GNUTLS_PKCS11_OBJ_FLAG_CRT|GNUTLS_PKCS11_OBJ_FLAG_MARK_CA|GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED), 0); + int ret = gnutls_pkcs11_obj_list_import_url2(&iter->pkcs11_list, &iter->pkcs11_size, + list->pkcs11_token, (GNUTLS_PKCS11_OBJ_FLAG_PRESENT_IN_TRUSTED_MODULE|GNUTLS_PKCS11_OBJ_FLAG_CRT|GNUTLS_PKCS11_OBJ_FLAG_MARK_CA|GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED), 0); if (ret < 0) return gnutls_assert_val(ret); @@ -397,8 +396,11 @@ advance_iter(gnutls_x509_trust_list_t list, * When past the last element is accessed %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE * is returned and the iterator is reset. * - * After use, the iterator must be deinitialized usin - * gnutls_x509_trust_list_iter_deinit(). + * The iterator is deinitialized and reset to %NULL automatically by this + * function after iterating through all elements until + * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned. If the iteration is + * aborted early, it must be manually deinitialized using + * gnutls_x509_trust_list_iter_deinit(). * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -563,7 +565,7 @@ gnutls_x509_trust_list_remove_cas(gnutls_x509_trust_list_t list, { int r = 0; unsigned j, i; - uint32_t hash; + size_t hash; for (i = 0; i < clist_size; i++) { hash = @@ -628,8 +630,8 @@ gnutls_x509_trust_list_remove_cas(gnutls_x509_trust_list_t list, * certificates that are trusted by the user for that specific server * but for no other purposes. * - * The certificate must not be deinitialized during the lifetime - * of the trusted list. + * The certificate @cert must not be deinitialized during the lifetime + * of the @list. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -642,7 +644,7 @@ gnutls_x509_trust_list_add_named_crt(gnutls_x509_trust_list_t list, const void *name, size_t name_size, unsigned int flags) { - uint32_t hash; + size_t hash; if (name_size >= MAX_SERVER_NAME_SIZE) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); @@ -683,18 +685,21 @@ gnutls_x509_trust_list_add_named_crt(gnutls_x509_trust_list_t list, * @verification_flags: gnutls_certificate_verify_flags if flags specifies GNUTLS_TL_VERIFY_CRL * * This function will add the given certificate revocation lists - * to the trusted list. The list of CRLs must not be deinitialized - * during this structure's lifetime. + * to the trusted list. The CRLs in @crl_list must not be deinitialized + * during the lifetime of @list. * * This function must be called after gnutls_x509_trust_list_add_cas() * to allow verifying the CRLs for validity. If the flag %GNUTLS_TL_NO_DUPLICATES - * is given, then any provided CRLs that are a duplicate, will be deinitialized - * and not added to the list (that assumes that gnutls_x509_trust_list_deinit() - * will be called with all=1). + * is given, then the final CRL list will not contain duplicate entries. + * + * If the flag %GNUTLS_TL_NO_DUPLICATES is given, gnutls_x509_trust_list_deinit() must be + * called with parameter @all being 1. * - * If GNUTLS_TL_VERIFY_CRL is given the CRLs will be verified before being added. + * If flag %GNUTLS_TL_VERIFY_CRL is given the CRLs will be verified before being added, + * and if verification fails, they will be skipped. * - * Returns: The number of added elements is returned. + * Returns: The number of added elements is returned; that includes + * duplicate entries. * * Since: 3.0 **/ @@ -707,7 +712,8 @@ gnutls_x509_trust_list_add_crls(gnutls_x509_trust_list_t list, int ret; unsigned x, i, j = 0; unsigned int vret = 0; - uint32_t hash; + size_t hash; + gnutls_x509_crl_t *tmp; /* Probably we can optimize things such as removing duplicates * etc. @@ -733,6 +739,10 @@ gnutls_x509_trust_list_add_crls(gnutls_x509_trust_list_t list, &vret); if (ret < 0 || vret != 0) { _gnutls_debug_log("CRL verification failed, not adding it\n"); + if (flags & GNUTLS_TL_NO_DUPLICATES) + gnutls_x509_crl_deinit(crl_list[i]); + if (flags & GNUTLS_TL_FAIL_ON_INVALID_CRL) + return gnutls_assert_val(GNUTLS_E_CRL_VERIFICATION_ERROR); continue; } } @@ -752,22 +762,28 @@ gnutls_x509_trust_list_add_crls(gnutls_x509_trust_list_t list, } else { /* The new is older, discard it */ gnutls_x509_crl_deinit(crl_list[i]); - continue; + goto next; } } } } - list->node[hash].crls = - gnutls_realloc_fast(list->node[hash].crls, + tmp = + gnutls_realloc(list->node[hash].crls, (list->node[hash].crl_size + 1) * sizeof(list->node[hash]. - trusted_cas[0])); - if (list->node[hash].crls == NULL) { + crls[0])); + if (tmp == NULL) { + ret = i; gnutls_assert(); - return i; + if (flags & GNUTLS_TL_NO_DUPLICATES) + while (i < crl_size) + gnutls_x509_crl_deinit(crl_list[i++]); + return ret; } + list->node[hash].crls = tmp; + list->node[hash].crls[list->node[hash].crl_size] = crl_list[i]; @@ -790,7 +806,7 @@ static int shorten_clist(gnutls_x509_trust_list_t list, unsigned int clist_size) { unsigned int j, i; - uint32_t hash; + size_t hash; if (clist_size > 1) { /* Check if the last certificate in the path is self signed. @@ -843,7 +859,7 @@ int trust_list_get_issuer(gnutls_x509_trust_list_t list, { int ret; unsigned int i; - uint32_t hash; + size_t hash; hash = hash_pjw_bare(cert->raw_issuer_dn.data, @@ -877,7 +893,7 @@ int trust_list_get_issuer_by_dn(gnutls_x509_trust_list_t list, { int ret; unsigned int i, j; - uint32_t hash; + size_t hash; uint8_t tmp[256]; size_t tmp_size; @@ -963,7 +979,7 @@ int gnutls_x509_trust_list_get_issuer(gnutls_x509_trust_list_t list, gnutls_datum_t der = {NULL, 0}; /* use the token for verification */ ret = gnutls_pkcs11_get_raw_issuer(list->pkcs11_token, cert, &der, - GNUTLS_X509_FMT_DER, 0); + GNUTLS_X509_FMT_DER, GNUTLS_PKCS11_OBJ_FLAG_PRESENT_IN_TRUSTED_MODULE); if (ret < 0) { gnutls_assert(); return ret; @@ -1035,7 +1051,7 @@ int gnutls_x509_trust_list_get_issuer_by_dn(gnutls_x509_trust_list_t list, gnutls_datum_t der = {NULL, 0}; /* use the token for verification */ ret = gnutls_pkcs11_get_raw_issuer_by_dn(list->pkcs11_token, dn, &der, - GNUTLS_X509_FMT_DER, 0); + GNUTLS_X509_FMT_DER, GNUTLS_PKCS11_OBJ_FLAG_PRESENT_IN_TRUSTED_MODULE); if (ret < 0) { gnutls_assert(); return ret; @@ -1096,7 +1112,7 @@ int gnutls_x509_trust_list_get_issuer_by_subject_key_id(gnutls_x509_trust_list_t gnutls_datum_t der = {NULL, 0}; /* use the token for verification */ ret = gnutls_pkcs11_get_raw_issuer_by_subject_key_id(list->pkcs11_token, dn, spki, &der, - GNUTLS_X509_FMT_DER, 0); + GNUTLS_X509_FMT_DER, GNUTLS_PKCS11_OBJ_FLAG_PRESENT_IN_TRUSTED_MODULE); if (ret < 0) { gnutls_assert(); return ret; @@ -1179,7 +1195,7 @@ gnutls_x509_trust_list_verify_crt(gnutls_x509_trust_list_t list, /* This macro is introduced to detect a verification output * which indicates an unknown signer, or a signer which uses * an insecure algorithm (e.g., sha1), something that indicates - * a superceded signer */ + * a superseded signer */ #define SIGNER_OLD_OR_UNKNOWN(output) ((output & GNUTLS_CERT_SIGNER_NOT_FOUND) || (output & GNUTLS_CERT_INSECURE_ALGORITHM)) #define SIGNER_WAS_KNOWN(output) (!(output & GNUTLS_CERT_SIGNER_NOT_FOUND)) @@ -1241,7 +1257,7 @@ gnutls_x509_trust_list_verify_crt2(gnutls_x509_trust_list_t list, { int ret; unsigned int i; - uint32_t hash; + size_t hash; gnutls_x509_crt_t sorted[DEFAULT_MAX_VERIFY_DEPTH]; const char *hostname = NULL, *purpose = NULL, *email = NULL; unsigned hostname_size = 0; @@ -1485,7 +1501,7 @@ gnutls_x509_trust_list_verify_named_crt(gnutls_x509_trust_list_t list, { int ret; unsigned int i; - uint32_t hash; + size_t hash; hash = @@ -1542,7 +1558,7 @@ _gnutls_trustlist_inlist(gnutls_x509_trust_list_t list, { int ret; unsigned int i; - uint32_t hash; + size_t hash; hash = hash_pjw_bare(cert->raw_dn.data, cert->raw_dn.size); hash %= list->size; diff --git a/lib/x509/verify-high.h b/lib/x509/verify-high.h index 3d70573011..ca1f98b831 100644 --- a/lib/x509/verify-high.h +++ b/lib/x509/verify-high.h @@ -16,12 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef VERIFY_HIGH_H -# define VERIFY_HIGH_H +#ifndef GNUTLS_LIB_X509_VERIFY_HIGH_H +#define GNUTLS_LIB_X509_VERIFY_HIGH_H struct gnutls_x509_trust_list_st { unsigned int size; @@ -46,4 +46,4 @@ struct gnutls_x509_trust_list_st { int _gnutls_trustlist_inlist(gnutls_x509_trust_list_t list, gnutls_x509_crt_t cert); -#endif +#endif /* GNUTLS_LIB_X509_VERIFY_HIGH_H */ diff --git a/lib/x509/verify-high2.c b/lib/x509/verify-high2.c index fb9f9ce101..50020d074c 100644 --- a/lib/x509/verify-high2.c +++ b/lib/x509/verify-high2.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -28,12 +28,14 @@ #include #include #include +#include #include #include "x509_int.h" #include #include "verify-high.h" #include "read-file.h" #include +#include "urls.h" #include @@ -43,6 +45,10 @@ # endif #endif +#ifdef _WIN32 +# include +#endif + /* Convenience functions for verify-high functionality */ @@ -58,6 +64,9 @@ * This function will add the given certificate authorities * to the trusted list. * + * If this function is used gnutls_x509_trust_list_deinit() must be called + * with parameter @all being 1. + * * Returns: The number of added elements is returned. * * Since: 3.1 @@ -76,6 +85,9 @@ gnutls_x509_trust_list_add_trust_mem(gnutls_x509_trust_list_t list, unsigned int x509_ncas, x509_ncrls; unsigned int r = 0; + /* When adding CAs or CRLs, we use the GNUTLS_TL_NO_DUPLICATES flag to ensure + * that unaccounted certificates/CRLs are deinitialized. */ + if (cas != NULL && cas->data != NULL) { ret = gnutls_x509_crt_list_import2(&x509_ca_list, &x509_ncas, @@ -85,7 +97,7 @@ gnutls_x509_trust_list_add_trust_mem(gnutls_x509_trust_list_t list, ret = gnutls_x509_trust_list_add_cas(list, x509_ca_list, - x509_ncas, tl_flags); + x509_ncas, tl_flags|GNUTLS_TL_NO_DUPLICATES); gnutls_free(x509_ca_list); if (ret < 0) @@ -172,7 +184,6 @@ int remove_pkcs11_url(gnutls_x509_trust_list_t list, const char *ca_file) { if (strcmp(ca_file, list->pkcs11_token) == 0) { gnutls_free(list->pkcs11_token); - list->pkcs11_token = NULL; } return 0; } @@ -188,6 +199,10 @@ int add_trust_list_pkcs11_object_url(gnutls_x509_trust_list_t list, const char * gnutls_pkcs11_obj_t *pcrt_list = NULL; unsigned int pcrt_list_size = 0, i; int ret; + + /* here we don't use the flag GNUTLS_PKCS11_OBJ_FLAG_PRESENT_IN_TRUSTED_MODULE, + * as we want to explicitly load from any module available in the system. + */ ret = gnutls_pkcs11_obj_list_import_url2(&pcrt_list, &pcrt_list_size, url, @@ -315,7 +330,7 @@ gnutls_x509_trust_list_add_trust_file(gnutls_x509_trust_list_t list, if (ca_file != NULL) { #ifdef ENABLE_PKCS11 - if (strncmp(ca_file, "pkcs11:", 7) == 0) { + if (c_strncasecmp(ca_file, PKCS11_URL, PKCS11_URL_SIZE) == 0) { unsigned pcrt_list_size = 0; /* in case of a token URL import it as a PKCS #11 token, @@ -323,7 +338,7 @@ gnutls_x509_trust_list_add_trust_file(gnutls_x509_trust_list_t list, */ if (is_pkcs11_url_object(ca_file) != 0) { return add_trust_list_pkcs11_object_url(list, ca_file, tl_flags); - } else { /* token */ + } else { /* trusted token */ if (list->pkcs11_token != NULL) return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); list->pkcs11_token = gnutls_strdup(ca_file); @@ -331,7 +346,7 @@ gnutls_x509_trust_list_add_trust_file(gnutls_x509_trust_list_t list, /* enumerate the certificates */ ret = gnutls_pkcs11_obj_list_import_url(NULL, &pcrt_list_size, ca_file, - (GNUTLS_PKCS11_OBJ_FLAG_CRT|GNUTLS_PKCS11_OBJ_FLAG_MARK_CA|GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED), + (GNUTLS_PKCS11_OBJ_FLAG_PRESENT_IN_TRUSTED_MODULE|GNUTLS_PKCS11_OBJ_FLAG_CRT|GNUTLS_PKCS11_OBJ_FLAG_MARK_CA|GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED), 0); if (ret < 0 && ret != GNUTLS_E_SHORT_MEMORY_BUFFER) return gnutls_assert_val(ret); @@ -374,21 +389,21 @@ int load_dir_certs(const char *dirname, unsigned int tl_flags, unsigned int tl_vflags, unsigned type, unsigned crl) { - DIR *dirp; - struct dirent *d; int ret; int r = 0; char path[GNUTLS_PATH_MAX]; +#if !defined(_WIN32) || !defined(_UNICODE) + DIR *dirp; + struct dirent *d; + dirp = opendir(dirname); if (dirp != NULL) { - do { - d = readdir(dirp); - if (d != NULL + while ((d = readdir(dirp)) != NULL) { #ifdef _DIRENT_HAVE_D_TYPE - && (d->d_type == DT_REG || d->d_type == DT_LNK || d->d_type == DT_UNKNOWN) + if (d->d_type == DT_REG || d->d_type == DT_LNK || d->d_type == DT_UNKNOWN) #endif - ) { + { snprintf(path, sizeof(path), "%s/%s", dirname, d->d_name); @@ -407,10 +422,50 @@ int load_dir_certs(const char *dirname, r += ret; } } - while (d != NULL); closedir(dirp); } +#else /* _WIN32 */ + + _TDIR *dirp; + struct _tdirent *d; + gnutls_datum_t utf16 = {NULL, 0}; + +#ifdef WORDS_BIGENDIAN + r = _gnutls_utf8_to_ucs2(dirname, strlen(dirname), &utf16, 1); +#else + r = _gnutls_utf8_to_ucs2(dirname, strlen(dirname), &utf16, 0); +#endif + if (r < 0) + return gnutls_assert_val(r); + dirp = _topendir((_TCHAR*)utf16.data); + gnutls_free(utf16.data); + if (dirp != NULL) { + while ((d = _treaddir(dirp)) != NULL) { +#ifdef _DIRENT_HAVE_D_TYPE + if (d->d_type == DT_REG || d->d_type == DT_LNK || d->d_type == DT_UNKNOWN) +#endif + { + snprintf(path, sizeof(path), "%s/%ls", + dirname, d->d_name); + if (crl != 0) { + ret = + gnutls_x509_trust_list_add_trust_file + (list, NULL, path, type, tl_flags, + tl_vflags); + } else { + ret = + gnutls_x509_trust_list_add_trust_file + (list, path, NULL, type, tl_flags, + tl_vflags); + } + if (ret >= 0) + r += ret; + } + } + _tclosedir(dirp); + } +#endif /* _WIN32 */ return r; } @@ -487,7 +542,7 @@ gnutls_x509_trust_list_remove_trust_file(gnutls_x509_trust_list_t list, int ret; #ifdef ENABLE_PKCS11 - if (strncmp(ca_file, "pkcs11:", 7) == 0) { + if (c_strncasecmp(ca_file, PKCS11_URL, PKCS11_URL_SIZE) == 0) { if (is_pkcs11_url_object(ca_file) != 0) { return remove_pkcs11_object_url(list, ca_file); } else { /* token */ diff --git a/lib/x509/verify.c b/lib/x509/verify.c index 041c22066b..d202670198 100644 --- a/lib/x509/verify.c +++ b/lib/x509/verify.c @@ -18,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -38,6 +38,7 @@ #include #include #include "supported_exts.h" +#include "profiles.h" /* Checks if two certs have the same name and the same key. Return 1 on match. * If @is_ca is zero then this function is identical to gnutls_x509_crt_equals() @@ -387,7 +388,7 @@ static unsigned int check_time_status(gnutls_x509_crt_t crt, time_t now) return 0; } -unsigned _gnutls_is_broken_sig_allowed(gnutls_sign_algorithm_t sig, unsigned int flags) +unsigned _gnutls_is_broken_sig_allowed(const gnutls_sign_entry_st *se, unsigned int flags) { gnutls_digest_algorithm_t hash; @@ -396,14 +397,14 @@ unsigned _gnutls_is_broken_sig_allowed(gnutls_sign_algorithm_t sig, unsigned int return 1; /* the first two are for backwards compatibility */ - if ((sig == GNUTLS_SIGN_RSA_MD2) + if ((se->id == GNUTLS_SIGN_RSA_MD2) && (flags & GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD2)) return 1; - if ((sig == GNUTLS_SIGN_RSA_MD5) + if ((se->id == GNUTLS_SIGN_RSA_MD5) && (flags & GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD5)) return 1; - hash = gnutls_sign_get_hash_algorithm(sig); + hash = se->hash; if (hash == GNUTLS_DIG_SHA1 && (flags & GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1)) return 1; @@ -420,9 +421,9 @@ unsigned _gnutls_is_broken_sig_allowed(gnutls_sign_algorithm_t sig, unsigned int _gnutls_debug_log(#level": certificate's signature hash is unknown\n"); \ return gnutls_assert_val(0); \ } \ - if (entry->output_size*8/2 < sym_bits) { \ + if (_gnutls_sign_get_hash_strength(sigalg) < sym_bits) { \ _gnutls_cert_log("cert", crt); \ - _gnutls_debug_log(#level": certificate's signature hash strength is unacceptable (is %u bits, needed %u)\n", entry->output_size*8/2, sym_bits); \ + _gnutls_debug_log(#level": certificate's signature hash strength is unacceptable (is %u bits, needed %u)\n", _gnutls_sign_get_hash_strength(sigalg), sym_bits); \ return gnutls_assert_val(0); \ } \ sp = gnutls_pk_bits_to_sec_param(pkalg, bits); \ @@ -431,11 +432,13 @@ unsigned _gnutls_is_broken_sig_allowed(gnutls_sign_algorithm_t sig, unsigned int _gnutls_debug_log(#level": certificate's security level is unacceptable\n"); \ return gnutls_assert_val(0); \ } \ - sp = gnutls_pk_bits_to_sec_param(issuer_pkalg, issuer_bits); \ - if (sp < level) { \ - _gnutls_cert_log("issuer", issuer); \ - _gnutls_debug_log(#level": certificate's issuer security level is unacceptable\n"); \ - return gnutls_assert_val(0); \ + if (issuer) { \ + sp = gnutls_pk_bits_to_sec_param(issuer_pkalg, issuer_bits); \ + if (sp < level) { \ + _gnutls_cert_log("issuer", issuer); \ + _gnutls_debug_log(#level": certificate's issuer security level is unacceptable\n"); \ + return gnutls_assert_val(0); \ + } \ } \ break; @@ -458,9 +461,20 @@ static unsigned is_level_acceptable( gnutls_pk_params_st params; gnutls_sec_param_t sp; int hash; + gnutls_certificate_verification_profiles_t min_profile; + + min_profile = _gnutls_get_system_wide_verification_profile(); - if (profile == 0) + if (min_profile) { + if (profile < min_profile) { + gnutls_assert(); + profile = min_profile; + } + } + + if (profile == GNUTLS_PROFILE_UNKNOWN) { return 1; + } pkalg = gnutls_x509_crt_get_pk_algorithm(crt, &bits); if (pkalg < 0) @@ -479,6 +493,7 @@ static unsigned is_level_acceptable( CASE_SEC_PARAM(GNUTLS_PROFILE_MEDIUM, GNUTLS_SEC_PARAM_MEDIUM); CASE_SEC_PARAM(GNUTLS_PROFILE_HIGH, GNUTLS_SEC_PARAM_HIGH); CASE_SEC_PARAM(GNUTLS_PROFILE_ULTRA, GNUTLS_SEC_PARAM_ULTRA); + CASE_SEC_PARAM(GNUTLS_PROFILE_FUTURE, GNUTLS_SEC_PARAM_FUTURE); case GNUTLS_PROFILE_SUITEB128: case GNUTLS_PROFILE_SUITEB192: { unsigned curve, issuer_curve; @@ -511,7 +526,7 @@ static unsigned is_level_acceptable( return gnutls_assert_val(0); } - curve = params.flags; + curve = params.curve; gnutls_pk_params_release(¶ms); if (curve != GNUTLS_ECC_CURVE_SECP256R1 && @@ -539,7 +554,7 @@ static unsigned is_level_acceptable( return gnutls_assert_val(0); } - issuer_curve = params.flags; + issuer_curve = params.curve; gnutls_pk_params_release(¶ms); if (issuer_curve != GNUTLS_ECC_CURVE_SECP256R1 && @@ -561,6 +576,8 @@ static unsigned is_level_acceptable( } break; + case GNUTLS_PROFILE_UNKNOWN: /* already checked; avoid compiler warnings */ + _gnutls_debug_log("An unknown profile (%d) was encountered\n", (int)profile); } } @@ -579,12 +596,19 @@ typedef struct verify_state_st { out |= (x|GNUTLS_CERT_INVALID); \ result = 0; } +static int _gnutls_x509_verify_data(gnutls_sign_algorithm_t sign, + const gnutls_datum_t * data, + const gnutls_datum_t * signature, + gnutls_x509_crt_t cert, + gnutls_x509_crt_t issuer, + unsigned vflags); + /* * Verifies the given certificate against a certificate list of * trusted CAs. * * Returns only 0 or 1. If 1 it means that the certificate - * was successfuly verified. + * was successfully verified. * * 'flags': an OR of the gnutls_certificate_verify_flags enumeration. * @@ -602,11 +626,11 @@ verify_crt(gnutls_x509_crt_t cert, gnutls_datum_t cert_signed_data = { NULL, 0 }; gnutls_datum_t cert_signature = { NULL, 0 }; gnutls_x509_crt_t issuer = NULL; - int issuer_version, hash_algo; + int issuer_version; unsigned result = 1; - const mac_entry_st * me; unsigned int out = 0, usage; int sigalg, ret; + const gnutls_sign_entry_st *se; if (output) *output = 0; @@ -639,12 +663,14 @@ verify_crt(gnutls_x509_crt_t cert, ret = _gnutls_x509_get_signature_algorithm(cert->cert, - "signatureAlgorithm.algorithm"); + "signatureAlgorithm"); if (ret < 0) { MARK_INVALID(0); } sigalg = ret; + se = _gnutls_sign_to_entry(sigalg); + /* issuer is not in trusted certificate * authorities. */ @@ -733,24 +759,21 @@ verify_crt(gnutls_x509_crt_t cert, } } - if (sigalg >= 0) { - hash_algo = gnutls_sign_get_hash_algorithm(sigalg); - me = mac_to_entry(hash_algo); - } else { - me = NULL; - } - - if (me == NULL) { + if (sigalg < 0) { MARK_INVALID(0); } else if (cert_signed_data.data != NULL && - cert_signature.data != NULL) { + cert_signature.data != NULL) { ret = - _gnutls_x509_verify_data(me, + _gnutls_x509_verify_data(sigalg, &cert_signed_data, &cert_signature, - issuer); + cert, + issuer, flags); + if (ret == GNUTLS_E_PK_SIG_VERIFY_FAILED) { MARK_INVALID(GNUTLS_CERT_SIGNATURE_FAILURE); + } else if (ret == GNUTLS_E_CONSTRAINT_ERROR) { + MARK_INVALID(GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE); } else if (ret < 0) { MARK_INVALID(0); } @@ -773,7 +796,7 @@ verify_crt(gnutls_x509_crt_t cert, } } - if (sigalg >= 0) { + if (sigalg >= 0 && se) { if (is_level_acceptable(cert, issuer, sigalg, flags) == 0) { MARK_INVALID(GNUTLS_CERT_INSECURE_ALGORITHM); } @@ -782,8 +805,8 @@ verify_crt(gnutls_x509_crt_t cert, * used are secure. If the certificate is self signed it doesn't * really matter. */ - if (gnutls_sign_is_secure(sigalg) == 0 && - _gnutls_is_broken_sig_allowed(sigalg, flags) == 0 && + if (_gnutls_sign_is_secure2(se, GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS) == 0 && + _gnutls_is_broken_sig_allowed(se, flags) == 0 && is_issuer(cert, cert) == 0) { MARK_INVALID(GNUTLS_CERT_INSECURE_ALGORITHM); } @@ -847,6 +870,36 @@ gnutls_x509_crt_check_issuer(gnutls_x509_crt_t cert, return is_issuer(cert, issuer); } +static +unsigned check_ca_sanity(const gnutls_x509_crt_t issuer, + time_t now, unsigned int flags) +{ + unsigned int status = 0; + unsigned sigalg; + int ret; + + /* explicit time check for trusted CA that we remove from + * list. GNUTLS_VERIFY_DISABLE_TRUSTED_TIME_CHECKS + */ + if (!(flags & GNUTLS_VERIFY_DISABLE_TRUSTED_TIME_CHECKS) && + !(flags & GNUTLS_VERIFY_DISABLE_TIME_CHECKS)) { + status |= check_time_status(issuer, now); + } + + ret = + _gnutls_x509_get_signature_algorithm(issuer->cert, "signatureAlgorithm"); + sigalg = ret; + + /* we explicitly allow CAs which we do not support their self-algorithms + * to pass. */ + if (ret >= 0 && !is_level_acceptable(issuer, NULL, sigalg, flags)) { + status |= GNUTLS_CERT_INSECURE_ALGORITHM|GNUTLS_CERT_INVALID; + } + + return status; + +} + /* Verify X.509 certificate chain. * * Note that the return value is an OR of GNUTLS_CERT_* elements. @@ -905,25 +958,17 @@ _gnutls_verify_crt_status(const gnutls_x509_crt_t * certificate_list, * CA to self-signed CA at some point. */ if (_gnutls_check_if_same_key (certificate_list[i], trusted_cas[j], i) != 0) { - /* explicit time check for trusted CA that we remove from - * list. GNUTLS_VERIFY_DISABLE_TRUSTED_TIME_CHECKS - */ - - if (!(flags & GNUTLS_VERIFY_DISABLE_TRUSTED_TIME_CHECKS) && - !(flags & GNUTLS_VERIFY_DISABLE_TIME_CHECKS)) { - status |= - check_time_status(trusted_cas[j], - now); - if (status != 0) { - if (func) - func(certificate_list[i], trusted_cas[j], NULL, status); - return status; - } - } + + status |= check_ca_sanity(trusted_cas[j], now, flags); if (func) func(certificate_list[i], trusted_cas[j], NULL, status); + + if (status != 0) { + return gnutls_assert_val(status); + } + clist_size = i; break; } @@ -984,8 +1029,6 @@ _gnutls_verify_crt_status(const gnutls_x509_crt_t * certificate_list, */ for (i = clist_size - 1; i > 0; i--) { output = 0; - if (i - 1 < 0) - break; if (purpose != NULL) { ret = _gnutls_check_key_purpose(certificate_list[i], purpose, 1); @@ -1155,20 +1198,16 @@ _gnutls_pkcs11_verify_crt_status(const char* url, if (gnutls_pkcs11_crt_is_known (url, certificate_list[i], vflags) != 0) { - if (!(flags & GNUTLS_VERIFY_DISABLE_TRUSTED_TIME_CHECKS) && - !(flags & GNUTLS_VERIFY_DISABLE_TIME_CHECKS)) { - status |= - check_time_status(certificate_list[i], now); - if (status != 0) { - if (func) - func(certificate_list[i], certificate_list[i], NULL, status); - return status; - } - } + status |= check_ca_sanity(certificate_list[i], now, flags); + if (func) func(certificate_list[i], certificate_list[i], NULL, status); + if (status != 0) { + return gnutls_assert_val(status); + } + clist_size = i; break; } @@ -1273,40 +1312,117 @@ _gnutls_pkcs11_verify_crt_status(const char* url, } #endif +static int +_gnutls_x509_validate_sign_params(gnutls_pk_algorithm_t pk_algorithm, + ASN1_TYPE cert, + const char *name, + gnutls_x509_spki_st *sig_params) +{ + /* The signature parameter validation is only needed for RSA-PSS */ + if (pk_algorithm == GNUTLS_PK_RSA_PSS) { + int result; + gnutls_x509_spki_st params; + + result = _gnutls_x509_read_sign_params(cert, name, ¶ms); + if (result < 0) { + /* If parameters field is absent, no parameter + * validation is needed */ + if (result != GNUTLS_E_ASN1_ELEMENT_NOT_FOUND && + result != GNUTLS_E_ASN1_VALUE_NOT_FOUND) { + gnutls_assert(); + return result; + } + } else { + /* Check if the underlying hash algorithms are same. */ + if (sig_params->rsa_pss_dig != params.rsa_pss_dig) { + gnutls_assert(); + return GNUTLS_E_CONSTRAINT_ERROR; + } + + /* The salt length used to generate the + * signature must be equal to or larger than + * the one in the key parameter. */ + if (sig_params->salt_size < params.salt_size) { + gnutls_assert(); + return GNUTLS_E_CONSTRAINT_ERROR; + } + } + } + return 0; +} + /* verifies if the certificate is properly signed. * returns GNUTLS_E_PK_VERIFY_SIG_FAILED on failure and 1 on success. * * 'data' is the signed data * 'signature' is the signature! */ -int -_gnutls_x509_verify_data(const mac_entry_st * me, +static int +_gnutls_x509_verify_data(gnutls_sign_algorithm_t sign, const gnutls_datum_t * data, const gnutls_datum_t * signature, - gnutls_x509_crt_t issuer) + gnutls_x509_crt_t cert, + gnutls_x509_crt_t issuer, + unsigned vflags) { - gnutls_pk_params_st issuer_params; + gnutls_pk_params_st params; + gnutls_pk_algorithm_t issuer_pk; int ret; + gnutls_x509_spki_st sign_params; + const gnutls_sign_entry_st *se; /* Read the MPI parameters from the issuer's certificate. */ - ret = _gnutls_x509_crt_get_mpis(issuer, &issuer_params); + ret = _gnutls_x509_crt_get_mpis(issuer, ¶ms); if (ret < 0) { gnutls_assert(); return ret; } - ret = - pubkey_verify_data(gnutls_x509_crt_get_pk_algorithm - (issuer, NULL), me, data, signature, - &issuer_params); + issuer_pk = gnutls_x509_crt_get_pk_algorithm(issuer, NULL); + + se = _gnutls_sign_to_entry(sign); + if (se == NULL) + return gnutls_assert_val(GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM); + + if (cert != NULL) { + ret = _gnutls_x509_read_sign_params(cert->cert, + "signatureAlgorithm", + &sign_params); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = _gnutls_x509_validate_sign_params(issuer_pk, + issuer->cert, + "tbsCertificate." + "subjectPublicKeyInfo." + "algorithm", + &sign_params); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + } else { + memcpy(&sign_params, ¶ms.spki, + sizeof(gnutls_x509_spki_st)); + + sign_params.pk = se->pk; + if (sign_params.pk == GNUTLS_PK_RSA_PSS) + sign_params.rsa_pss_dig = se->hash; + } + + ret = pubkey_verify_data(se, hash_to_entry(se->hash), data, signature, ¶ms, + &sign_params, vflags); if (ret < 0) { gnutls_assert(); } + cleanup: /* release all allocated MPIs */ - gnutls_pk_params_release(&issuer_params); + gnutls_pk_params_release(¶ms); return ret; } @@ -1477,8 +1593,9 @@ gnutls_x509_crl_verify(gnutls_x509_crl_t crl, gnutls_datum_t crl_signed_data = { NULL, 0 }; gnutls_datum_t crl_signature = { NULL, 0 }; gnutls_x509_crt_t issuer = NULL; - int result, hash_algo; + int result, sigalg; time_t now = gnutls_time(0); + time_t nextu; unsigned int usage; if (verify) @@ -1507,18 +1624,16 @@ gnutls_x509_crl_verify(gnutls_x509_crl_t crl, goto cleanup; } - result = + sigalg = _gnutls_x509_get_signature_algorithm(crl->crl, - "signatureAlgorithm.algorithm"); - if (result < 0) { + "signatureAlgorithm"); + if (sigalg < 0) { gnutls_assert(); if (verify) *verify |= GNUTLS_CERT_INVALID; goto cleanup; } - hash_algo = gnutls_sign_get_hash_algorithm(result); - /* issuer is not in trusted certificate * authorities. */ @@ -1556,15 +1671,20 @@ gnutls_x509_crl_verify(gnutls_x509_crl_t crl, } result = - _gnutls_x509_verify_data(mac_to_entry(hash_algo), + _gnutls_x509_verify_data(sigalg, &crl_signed_data, &crl_signature, - issuer); + NULL, + issuer, flags); if (result == GNUTLS_E_PK_SIG_VERIFY_FAILED) { gnutls_assert(); /* error. ignore it */ if (verify) *verify |= GNUTLS_CERT_SIGNATURE_FAILURE; result = 0; + } else if (result == GNUTLS_E_CONSTRAINT_ERROR) { + if (verify) + *verify |= GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE; + result = 0; } else if (result < 0) { gnutls_assert(); if (verify) @@ -1576,8 +1696,6 @@ gnutls_x509_crl_verify(gnutls_x509_crl_t crl, } { - int sigalg; - sigalg = gnutls_x509_crl_get_signature_algorithm(crl); if (((sigalg == GNUTLS_SIGN_RSA_MD2) && @@ -1593,7 +1711,8 @@ gnutls_x509_crl_verify(gnutls_x509_crl_t crl, if (gnutls_x509_crl_get_this_update(crl) > now && verify) *verify |= GNUTLS_CERT_REVOCATION_DATA_ISSUED_IN_FUTURE; - if (gnutls_x509_crl_get_next_update(crl) < now && verify) + nextu = gnutls_x509_crl_get_next_update(crl); + if (nextu != -1 && nextu < now && verify) *verify |= GNUTLS_CERT_REVOCATION_DATA_SUPERSEDED; diff --git a/lib/x509/virt-san.c b/lib/x509/virt-san.c index f3b87135b1..d2adc4e25e 100644 --- a/lib/x509/virt-san.c +++ b/lib/x509/virt-san.c @@ -15,7 +15,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -70,7 +70,6 @@ int _gnutls_alt_name_assign_virt_type(struct name_st *name, unsigned type, gnutl if (ret < 0) return gnutls_assert_val(ret); gnutls_free(san->data); - san->data = NULL; if (othername_oid) { name->othername_oid.data = (uint8_t *) othername_oid; diff --git a/lib/x509/virt-san.h b/lib/x509/virt-san.h index 10d78e39f1..44b6fe65c5 100644 --- a/lib/x509/virt-san.h +++ b/lib/x509/virt-san.h @@ -15,15 +15,15 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef VIRT_SAN_H -# define VIRT_SAN_H +#ifndef GNUTLS_LIB_X509_VIRT_SAN_H +#define GNUTLS_LIB_X509_VIRT_SAN_H #include "x509_ext_int.h" int _gnutls_alt_name_assign_virt_type(struct name_st *name, unsigned type, gnutls_datum_t *san, const char *othername_oid, unsigned raw); -#endif +#endif /* GNUTLS_LIB_X509_VIRT_SAN_H */ diff --git a/lib/x509/x509.c b/lib/x509/x509.c index 93e79cb298..2091f3ae64 100644 --- a/lib/x509/x509.c +++ b/lib/x509/x509.c @@ -1,5 +1,6 @@ /* - * Copyright (C) 2003-2016 Free Software Foundation, Inc. + * Copyright (C) 2003-2018 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. * * Authors: Nikos Mavrogiannopoulos, Simon Josefsson, Howard Chu * @@ -16,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -37,6 +38,8 @@ #include #include "urls.h" #include "system-keys.h" +#include "hash.h" +#include "hash-pjw-bare.h" static int crt_reinit(gnutls_x509_crt_t crt) { @@ -149,10 +152,13 @@ unsigned gnutls_x509_crt_equals(gnutls_x509_crt_t cert1, **/ unsigned gnutls_x509_crt_equals2(gnutls_x509_crt_t cert1, - gnutls_datum_t * der) + const gnutls_datum_t * der) { bool result; + if (cert1 == NULL || der == NULL) + return 0; + if (cert1->der.size == 0 || cert1->modified) { gnutls_datum_t tmp1; int ret; @@ -223,8 +229,8 @@ int gnutls_x509_crt_init(gnutls_x509_crt_t * cert) if (result < 0) { gnutls_assert(); asn1_delete_structure(&tmp->cert); - gnutls_free(tmp); gnutls_subject_alt_names_deinit(tmp->san); + gnutls_free(tmp); return result; } @@ -297,23 +303,30 @@ void gnutls_x509_crt_deinit(gnutls_x509_crt_t cert) static int compare_sig_algorithm(gnutls_x509_crt_t cert) { - int ret, s2; + int ret, len1, len2, result; + char oid1[MAX_OID_SIZE]; + char oid2[MAX_OID_SIZE]; gnutls_datum_t sp1 = {NULL, 0}; gnutls_datum_t sp2 = {NULL, 0}; unsigned empty1 = 0, empty2 = 0; - ret = _gnutls_x509_get_signature_algorithm(cert->cert, - "signatureAlgorithm.algorithm"); - if (ret < 0) { + len1 = sizeof(oid1); + result = asn1_read_value(cert->cert, "signatureAlgorithm.algorithm", oid1, &len1); + if (result != ASN1_SUCCESS) { gnutls_assert(); - return ret; + return _gnutls_asn2err(result); } - s2 = _gnutls_x509_get_signature_algorithm(cert->cert, - "tbsCertificate.signature.algorithm"); - if (ret != s2) { + len2 = sizeof(oid2); + result = asn1_read_value(cert->cert, "tbsCertificate.signature.algorithm", oid2, &len2); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + + if (len1 != len2 || memcmp(oid1, oid2, len1) != 0) { _gnutls_debug_log("signatureAlgorithm.algorithm differs from tbsCertificate.signature.algorithm: %s, %s\n", - gnutls_sign_get_name(ret), gnutls_sign_get_name(s2)); + oid1, oid2); gnutls_assert(); return GNUTLS_E_CERTIFICATE_ERROR; } @@ -327,7 +340,7 @@ static int compare_sig_algorithm(gnutls_x509_crt_t cert) return ret; } - ret = _gnutls_x509_read_value(cert->cert, "signatureAlgorithm.parameters", &sp2); + ret = _gnutls_x509_read_value(cert->cert, "tbsCertificate.signature.parameters", &sp2); if (ret == GNUTLS_E_ASN1_ELEMENT_NOT_FOUND) { empty2 = 1; } else if (ret < 0) { @@ -346,7 +359,7 @@ static int compare_sig_algorithm(gnutls_x509_crt_t cert) _gnutls_free_datum(&sp2); } - if (empty1 != empty2 || + if (empty1 != empty2 || sp1.size != sp2.size || safe_memcmp(sp1.data, sp2.data, sp1.size) != 0) { gnutls_assert(); ret = GNUTLS_E_CERTIFICATE_ERROR; @@ -375,7 +388,6 @@ static int cache_alt_names(gnutls_x509_crt_t cert) if (ret >= 0) { ret = gnutls_x509_ext_import_subject_alt_names(&tmpder, cert->san, 0); gnutls_free(tmpder.data); - tmpder.data = NULL; if (ret < 0) return gnutls_assert_val(ret); } @@ -394,41 +406,94 @@ static int cache_alt_names(gnutls_x509_crt_t cert) return 0; } +static bool hcomparator(const void *v1, const void *v2) +{ + return (strcmp(v1, v2)==0); +} + +static size_t hhasher(const void *entry, size_t n) +{ + const char *e = entry; + if (e == NULL || e[0] == 0) + return 0; + + return hash_pjw_bare(e, strlen(e)) % n; +} + int _gnutls_check_cert_sanity(gnutls_x509_crt_t cert) { - int result = 0, version; + int ret = 0, version; gnutls_datum_t exts; + Hash_table *htable = NULL; if (cert->flags & GNUTLS_X509_CRT_FLAG_IGNORE_SANITY) return 0; /* enforce the rule that only version 3 certificates carry extensions */ - result = gnutls_x509_crt_get_version(cert); - if (result < 0) { - gnutls_assert(); - goto cleanup; + ret = gnutls_x509_crt_get_version(cert); + if (ret < 0) { + return gnutls_assert_val(ret); } - version = result; + version = ret; if (version < 3) { if (!cert->modified) { - result = _gnutls_x509_get_raw_field2(cert->cert, &cert->der, + ret = _gnutls_x509_get_raw_field2(cert->cert, &cert->der, "tbsCertificate.extensions", &exts); - if (result >= 0 && exts.size > 0) { - gnutls_assert(); + if (ret >= 0 && exts.size > 0) { _gnutls_debug_log("error: extensions present in certificate with version %d\n", version); - result = GNUTLS_E_X509_CERTIFICATE_ERROR; - goto cleanup; + return gnutls_assert_val(GNUTLS_E_X509_CERTIFICATE_ERROR); } } else { if (cert->use_extensions) { - gnutls_assert(); _gnutls_debug_log("error: extensions set in certificate with version %d\n", version); - result = GNUTLS_E_X509_CERTIFICATE_ERROR; + return gnutls_assert_val(GNUTLS_E_X509_CERTIFICATE_ERROR); + } + } + } else { + /* Version is >= 3; ensure no duplicate extensions are + * present. */ + unsigned i; + char oid[MAX_OID_SIZE]; + size_t oid_size; + char *o; + + htable = hash_initialize(16, NULL, hhasher, hcomparator, gnutls_free); + if (htable == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + + for (i=0;;i++) { + oid_size = sizeof(oid); + ret = gnutls_x509_crt_get_extension_info(cert, i, oid, &oid_size, NULL); + if (ret < 0) { + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + break; + gnutls_assert(); + goto cleanup; + } + o = gnutls_strdup(oid); + if (o == NULL) { + ret = gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + goto cleanup; + } + + ret = hash_insert_if_absent(htable, o, NULL); + if (ret == -1) { + gnutls_free(o); + ret = gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + goto cleanup; + } else if (ret == 0) { + /* duplicate */ + gnutls_free(o); + _gnutls_debug_log("error: duplicate extension (%s) detected\n", oid); + ret = gnutls_assert_val(GNUTLS_E_X509_DUPLICATE_EXTENSION); goto cleanup; } } + + hash_free(htable); + htable = NULL; } if (version < 2) { @@ -436,36 +501,35 @@ int _gnutls_check_cert_sanity(gnutls_x509_crt_t cert) size_t id_size; id_size = sizeof(id); - result = gnutls_x509_crt_get_subject_unique_id(cert, id, &id_size); - if (result >= 0 || result == GNUTLS_E_SHORT_MEMORY_BUFFER) { - gnutls_assert(); + ret = gnutls_x509_crt_get_subject_unique_id(cert, id, &id_size); + if (ret >= 0 || ret == GNUTLS_E_SHORT_MEMORY_BUFFER) { _gnutls_debug_log("error: subjectUniqueID present in certificate with version %d\n", version); - result = GNUTLS_E_X509_CERTIFICATE_ERROR; + ret = gnutls_assert_val(GNUTLS_E_X509_CERTIFICATE_ERROR); goto cleanup; } id_size = sizeof(id); - result = gnutls_x509_crt_get_issuer_unique_id(cert, id, &id_size); - if (result >= 0 || result == GNUTLS_E_SHORT_MEMORY_BUFFER) { - gnutls_assert(); + ret = gnutls_x509_crt_get_issuer_unique_id(cert, id, &id_size); + if (ret >= 0 || ret == GNUTLS_E_SHORT_MEMORY_BUFFER) { _gnutls_debug_log("error: subjectUniqueID present in certificate with version %d\n", version); - result = GNUTLS_E_X509_CERTIFICATE_ERROR; + ret = gnutls_assert_val(GNUTLS_E_X509_CERTIFICATE_ERROR); goto cleanup; } } if (gnutls_x509_crt_get_expiration_time(cert) == -1 || gnutls_x509_crt_get_activation_time(cert) == -1) { - gnutls_assert(); _gnutls_debug_log("error: invalid expiration or activation time in certificate\n"); - result = GNUTLS_E_CERTIFICATE_TIME_ERROR; + ret = gnutls_assert_val(GNUTLS_E_CERTIFICATE_TIME_ERROR); goto cleanup; } - result = 0; + ret = 0; cleanup: - return result; + if (htable) + hash_free(htable); + return ret; } /** @@ -515,7 +579,7 @@ gnutls_x509_crt_import(gnutls_x509_crt_t cert, _gnutls_fbase64_decode(PEM_X509_CERT2, data->data, data->size, &cert->der); - if (result <= 0) { + if (result < 0) { /* try for the second header */ result = _gnutls_fbase64_decode(PEM_X509_CERT, @@ -612,7 +676,7 @@ gnutls_x509_crt_import(gnutls_x509_crt_t cert, * "C=xxxx,O=yyyy,CN=zzzz" as described in RFC4514. The output string * will be ASCII or UTF-8 encoded, depending on the certificate data. * - * If @buf is null then only the size will be filled. + * If @buf is null then only the size will be filled. * * This function does not output a fully RFC4514 compliant string, if * that is required see gnutls_x509_crt_get_issuer_dn3(). @@ -726,7 +790,7 @@ gnutls_x509_crt_get_issuer_dn3(gnutls_x509_crt_t cert, gnutls_datum_t *dn, unsig * * Returns: %GNUTLS_E_SHORT_MEMORY_BUFFER if the provided buffer is not * long enough, and in that case the @buf_size will be updated with - * the required size. %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if there + * the required size. %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if there * are no data in the current index. On success 0 is returned. **/ int @@ -768,7 +832,7 @@ gnutls_x509_crt_get_issuer_dn_by_oid(gnutls_x509_crt_t cert, * * Returns: %GNUTLS_E_SHORT_MEMORY_BUFFER if the provided buffer is not * long enough, and in that case the @buf_size will be updated with - * the required size. %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if there + * the required size. %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if there * are no data in the current index. On success 0 is returned. **/ int @@ -796,7 +860,7 @@ gnutls_x509_crt_get_issuer_dn_oid(gnutls_x509_crt_t cert, * described in RFC4514. The output string will be ASCII or UTF-8 * encoded, depending on the certificate data. * - * If @buf is null then only the size will be filled. + * If @buf is null then only the size will be filled. * * This function does not output a fully RFC4514 compliant string, if * that is required see gnutls_x509_crt_get_dn3(). @@ -908,7 +972,7 @@ int gnutls_x509_crt_get_dn3(gnutls_x509_crt_t cert, gnutls_datum_t *dn, unsigned * * Returns: %GNUTLS_E_SHORT_MEMORY_BUFFER if the provided buffer is not * long enough, and in that case the @buf_size will be updated with - * the required size. %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if there + * the required size. %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if there * are no data in the current index. On success 0 is returned. **/ int @@ -949,7 +1013,7 @@ gnutls_x509_crt_get_dn_by_oid(gnutls_x509_crt_t cert, const char *oid, * * Returns: %GNUTLS_E_SHORT_MEMORY_BUFFER if the provided buffer is not * long enough, and in that case the @buf_size will be updated with - * the required size. %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if there + * the required size. %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE if there * are no data in the current index. On success 0 is returned. **/ int @@ -974,15 +1038,16 @@ gnutls_x509_crt_get_dn_oid(gnutls_x509_crt_t cert, * enumeration that is the signature algorithm that has been used to * sign this certificate. * - * Unknown/unsupported signature algorithms are mapped to %GNUTLS_SIGN_UNKNOWN. + * Since 3.6.0 this function never returns a negative error code. + * Error cases and unknown/unsupported signature algorithms are + * mapped to %GNUTLS_SIGN_UNKNOWN. * - * Returns: a #gnutls_sign_algorithm_t value, or a negative error code on - * error. + * Returns: a #gnutls_sign_algorithm_t value **/ int gnutls_x509_crt_get_signature_algorithm(gnutls_x509_crt_t cert) { - return _gnutls_x509_get_signature_algorithm(cert->cert, - "signatureAlgorithm.algorithm"); + return map_errs_to_zero(_gnutls_x509_get_signature_algorithm(cert->cert, + "signatureAlgorithm")); } /** @@ -1112,29 +1177,12 @@ gnutls_x509_crt_get_signature(gnutls_x509_crt_t cert, **/ int gnutls_x509_crt_get_version(gnutls_x509_crt_t cert) { - uint8_t version[8]; - int len, result; - if (cert == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; } - len = sizeof(version); - if ((result = - asn1_read_value(cert->cert, "tbsCertificate.version", version, - &len)) != ASN1_SUCCESS) { - - if (result == ASN1_ELEMENT_NOT_FOUND) - return 1; /* the DEFAULT version */ - gnutls_assert(); - return _gnutls_asn2err(result); - } - - if (len != 1 || version[0] >= 0x80) - return gnutls_assert_val(GNUTLS_E_CERTIFICATE_ERROR); - - return (int) version[0] + 1; + return _gnutls_x509_get_version(cert->cert, "tbsCertificate.version"); } /** @@ -1162,12 +1210,9 @@ time_t gnutls_x509_crt_get_activation_time(gnutls_x509_crt_t cert) * gnutls_x509_crt_get_expiration_time: * @cert: should contain a #gnutls_x509_crt_t type * - * This function will return the time this Certificate was or will be + * This function will return the time this certificate was or will be * expired. * - * The no well defined expiration time can be checked against with the - * %GNUTLS_X509_NO_WELL_DEFINED_EXPIRATION macro. - * * Returns: expiration time, or (time_t)-1 on error. **/ time_t gnutls_x509_crt_get_expiration_time(gnutls_x509_crt_t cert) @@ -1336,7 +1381,7 @@ inline static int is_type_printable(int type) { if (type == GNUTLS_SAN_DNSNAME || type == GNUTLS_SAN_RFC822NAME || type == GNUTLS_SAN_URI || type == GNUTLS_SAN_OTHERNAME_XMPP || - type == GNUTLS_SAN_OTHERNAME) + type == GNUTLS_SAN_OTHERNAME || type == GNUTLS_SAN_REGISTERED_ID) return 1; else return 0; @@ -1354,11 +1399,11 @@ inline static int is_type_printable(int type) * @critical: will be non-zero if the extension is marked as critical (may be null) * * This function will return the X.509 authority key - * identifier when stored as a general name (authorityCertIssuer) + * identifier when stored as a general name (authorityCertIssuer) * and serial number. * * Because more than one general names might be stored - * @seq can be used as a counter to request them all until + * @seq can be used as a counter to request them all until * %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE is returned. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, %GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE @@ -1561,6 +1606,7 @@ gnutls_x509_crt_get_pk_algorithm(gnutls_x509_crt_t cert, result = _gnutls_x509_get_pk_algorithm(cert->cert, "tbsCertificate.subjectPublicKeyInfo", + NULL, bits); if (result < 0) { @@ -1569,7 +1615,48 @@ gnutls_x509_crt_get_pk_algorithm(gnutls_x509_crt_t cert, } return result; +} + +/** + * gnutls_x509_crt_get_spki: + * @cert: a certificate of type #gnutls_x509_crt_t + * @spki: a SubjectPublicKeyInfo structure of type #gnutls_x509_spki_t + * @flags: must be zero + * + * This function will return the public key information of an X.509 + * certificate. The provided @spki must be initialized. + * + * Since: 3.6.0 + **/ +int +gnutls_x509_crt_get_spki(gnutls_x509_crt_t cert, gnutls_x509_spki_t spki, unsigned int flags) +{ + int result; + gnutls_x509_spki_st params; + + if (cert == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + spki->pk = gnutls_x509_crt_get_pk_algorithm(cert, NULL); + + memset(¶ms, 0, sizeof(params)); + + result = _gnutls_x509_crt_read_spki_params(cert, ¶ms); + if (result < 0) { + gnutls_assert(); + return result; + } + + if (params.pk == GNUTLS_PK_UNKNOWN) + return gnutls_assert_val(GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + spki->rsa_pss_dig = params.rsa_pss_dig; + spki->salt_size = params.salt_size; + + return 0; } /* returns the type and the name on success. @@ -1584,7 +1671,7 @@ gnutls_x509_crt_get_pk_algorithm(gnutls_x509_crt_t cert, */ int _gnutls_parse_general_name2(ASN1_TYPE src, const char *src_name, - int seq, gnutls_datum_t *dname, + int seq, gnutls_datum_t *dname, unsigned int *ret_type, int othername_oid) { int len, ret; @@ -1607,7 +1694,6 @@ _gnutls_parse_general_name2(ASN1_TYPE src, const char *src_name, len = sizeof(choice_type); result = asn1_read_value(src, nptr, choice_type, &len); - if (result == ASN1_VALUE_NOT_FOUND || result == ASN1_ELEMENT_NOT_FOUND) { return GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE; @@ -1689,6 +1775,12 @@ _gnutls_parse_general_name2(ASN1_TYPE src, const char *src_name, return ret; } + if (type == GNUTLS_SAN_REGISTERED_ID && tmp.size > 0) { + /* see #805; OIDs contain the null termination byte */ + assert(tmp.data[tmp.size-1] == 0); + tmp.size--; + } + /* _gnutls_x509_read_value() null terminates */ dname->size = tmp.size; dname->data = tmp.data; @@ -1762,7 +1854,7 @@ get_alt_name(gnutls_subject_alt_names_t san, goto cleanup; } - if (othername_oid && type == GNUTLS_SAN_OTHERNAME) { + if (othername_oid && type == GNUTLS_SAN_OTHERNAME && ooid.data) { unsigned vtype; ret = gnutls_x509_othername_to_virtual((char*)ooid.data, &oname, &vtype, &virt); if (ret >= 0) { @@ -2314,8 +2406,8 @@ void gnutls_x509_policy_release(struct gnutls_x509_policy_st *policy) * @policy: A pointer to a policy structure. * @critical: will be non-zero if the extension is marked as critical * - * This function will extract the certificate policy (extension 2.5.29.32) - * specified by the given index. + * This function will extract the certificate policy (extension 2.5.29.32) + * specified by the given index. * * The policy returned by this function must be deinitialized by using * gnutls_x509_policy_release(). @@ -2468,7 +2560,7 @@ gnutls_x509_crt_get_extension_by_oid2(gnutls_x509_crt_t cert, unsigned int *critical) { int ret; - + if (cert == NULL) { gnutls_assert(); return GNUTLS_E_INVALID_REQUEST; @@ -2544,7 +2636,7 @@ gnutls_x509_crt_get_extension_oid(gnutls_x509_crt_t cert, unsigned indx, * * If the buffer provided is not long enough to hold the output, then * @oid_size is updated and %GNUTLS_E_SHORT_MEMORY_BUFFER will be - * returned. The @oid returned will be null terminated, although + * returned. The @oid returned will be null terminated, although * @oid_size will not account for the trailing null (the latter is not * true for GnuTLS prior to 3.6.0). * @@ -2586,16 +2678,16 @@ gnutls_x509_crt_get_extension_info(gnutls_x509_crt_t cert, unsigned indx, if (oid && len > 0 && ((uint8_t*)oid)[len-1] == 0) (*oid_size)--; - snprintf(name, sizeof(name), - "tbsCertificate.extensions.?%u.critical", indx + 1); - len = sizeof(str_critical); - result = asn1_read_value(cert->cert, name, str_critical, &len); - if (result != ASN1_SUCCESS) { - gnutls_assert(); - return _gnutls_asn2err(result); - } - if (critical) { + snprintf(name, sizeof(name), + "tbsCertificate.extensions.?%u.critical", indx + 1); + len = sizeof(str_critical); + result = asn1_read_value(cert->cert, name, str_critical, &len); + if (result != ASN1_SUCCESS) { + gnutls_assert(); + return _gnutls_asn2err(result); + } + if (str_critical[0] == 'T') *critical = 1; else @@ -2731,9 +2823,9 @@ get_dn(gnutls_x509_crt_t cert, const char *whom, gnutls_x509_dn_t * dn, unsigned * @dn: output variable with pointer to uint8_t DN. * * Return the Certificate's Subject DN as a %gnutls_x509_dn_t data type, - * that can be decoded using gnutls_x509_dn_get_rdn_ava(). + * that can be decoded using gnutls_x509_dn_get_rdn_ava(). * - * Note that @dn should be treated as constant. Because it points + * Note that @dn should be treated as constant. Because it points * into the @cert object, you should not use @dn after @cert is * deallocated. * @@ -2751,9 +2843,9 @@ gnutls_x509_crt_get_subject(gnutls_x509_crt_t cert, gnutls_x509_dn_t * dn) * @dn: output variable with pointer to uint8_t DN * * Return the Certificate's Issuer DN as a %gnutls_x509_dn_t data type, - * that can be decoded using gnutls_x509_dn_get_rdn_ava(). + * that can be decoded using gnutls_x509_dn_get_rdn_ava(). * - * Note that @dn should be treated as constant. Because it points + * Note that @dn should be treated as constant. Because it points * into the @cert object, you should not use @dn after @cert is * deallocated. * @@ -2853,13 +2945,26 @@ gnutls_x509_crt_export(gnutls_x509_crt_t cert, gnutls_x509_crt_fmt_t format, void *output_data, size_t * output_data_size) { - if (cert == NULL) { + gnutls_datum_t out; + int ret; + + ret = gnutls_x509_crt_export2(cert, format, &out); + if (ret < 0) + return gnutls_assert_val(ret); + + if (format == GNUTLS_X509_FMT_PEM) + ret = _gnutls_copy_string(&out, (uint8_t*)output_data, output_data_size); + else + ret = _gnutls_copy_data(&out, (uint8_t*)output_data, output_data_size); + if (ret < 0) { gnutls_assert(); - return GNUTLS_E_INVALID_REQUEST; + goto cleanup; } - return _gnutls_x509_export_int(cert->cert, format, PEM_X509_CERT2, - output_data, output_data_size); + ret = 0; + cleanup: + gnutls_free(out.data); + return ret; } /** @@ -2888,12 +2993,21 @@ gnutls_x509_crt_export2(gnutls_x509_crt_t cert, return GNUTLS_E_INVALID_REQUEST; } + if (!cert->modified && cert->der.size) { + if (format == GNUTLS_X509_FMT_DER) + return _gnutls_set_datum(out, cert->der.data, cert->der.size); + else + return _gnutls_fbase64_encode(PEM_X509_CERT2, cert->der.data, + cert->der.size, out); + + } + return _gnutls_x509_export_int2(cert->cert, format, PEM_X509_CERT2, out); } int -_gnutls_get_key_id(gnutls_pk_algorithm_t pk, gnutls_pk_params_st * params, +_gnutls_get_key_id(gnutls_pk_params_st * params, unsigned char *output_data, size_t * output_data_size, unsigned flags) { @@ -2902,7 +3016,9 @@ _gnutls_get_key_id(gnutls_pk_algorithm_t pk, gnutls_pk_params_st * params, gnutls_digest_algorithm_t hash = GNUTLS_DIG_SHA1; unsigned int digest_len; - if ((flags & GNUTLS_KEYID_USE_SHA256) || (flags & GNUTLS_KEYID_USE_BEST_KNOWN)) + if ((flags & GNUTLS_KEYID_USE_SHA512) || (flags & GNUTLS_KEYID_USE_BEST_KNOWN)) + hash = GNUTLS_DIG_SHA512; + else if (flags & GNUTLS_KEYID_USE_SHA256) hash = GNUTLS_DIG_SHA256; digest_len = @@ -2914,7 +3030,7 @@ _gnutls_get_key_id(gnutls_pk_algorithm_t pk, gnutls_pk_params_st * params, return GNUTLS_E_SHORT_MEMORY_BUFFER; } - ret = _gnutls_x509_encode_PKI_params(&der, pk, params); + ret = _gnutls_x509_encode_PKI_params(&der, params); if (ret < 0) return gnutls_assert_val(ret); @@ -2958,7 +3074,7 @@ gnutls_x509_crt_get_key_id(gnutls_x509_crt_t crt, unsigned int flags, unsigned char *output_data, size_t * output_data_size) { - int pk, ret = 0; + int ret = 0; gnutls_pk_params_st params; if (crt == NULL) { @@ -2966,12 +3082,7 @@ gnutls_x509_crt_get_key_id(gnutls_x509_crt_t crt, unsigned int flags, return GNUTLS_E_INVALID_REQUEST; } - pk = gnutls_x509_crt_get_pk_algorithm(crt, NULL); - if (pk < 0) { - gnutls_assert(); - return pk; - } - + /* initializes params */ ret = _gnutls_x509_crt_get_mpis(crt, ¶ms); if (ret < 0) { gnutls_assert(); @@ -2979,7 +3090,7 @@ gnutls_x509_crt_get_key_id(gnutls_x509_crt_t crt, unsigned int flags, } ret = - _gnutls_get_key_id(pk, ¶ms, output_data, output_data_size, flags); + _gnutls_get_key_id(¶ms, output_data, output_data_size, flags); gnutls_pk_params_release(¶ms); @@ -3138,7 +3249,7 @@ gnutls_x509_crt_check_key_purpose(gnutls_x509_crt_t cert, * gnutls_x509_crt_get_preferred_hash_algorithm: * @crt: Holds the certificate * @hash: The result of the call with the hash algorithm used for signature - * @mand: If non-zero it means that the algorithm MUST use this hash. May be NULL. + * @mand: If non-zero it means that the algorithm MUST use this hash. May be %NULL. * * This function will read the certificate and return the appropriate digest * algorithm to use for signing with this certificate. Some certificates (i.e. @@ -3169,13 +3280,13 @@ gnutls_x509_crt_get_preferred_hash_algorithm(gnutls_x509_crt_t crt, return gnutls_assert_val(ret); ret = gnutls_pubkey_import_x509(pubkey, crt, 0); - if (ret < 0) { + if (ret < 0) { gnutls_assert(); goto cleanup; } ret = gnutls_pubkey_get_preferred_hash_algorithm(pubkey, hash, mand); - if (ret < 0) { + if (ret < 0) { gnutls_assert(); goto cleanup; } @@ -3387,13 +3498,13 @@ gnutls_x509_crt_get_pk_rsa_raw(gnutls_x509_crt_t crt, return gnutls_assert_val(ret); ret = gnutls_pubkey_import_x509(pubkey, crt, 0); - if (ret < 0) { + if (ret < 0) { gnutls_assert(); goto cleanup; } ret = gnutls_pubkey_export_rsa_raw(pubkey, m, e); - if (ret < 0) { + if (ret < 0) { gnutls_assert(); goto cleanup; } @@ -3407,21 +3518,24 @@ gnutls_x509_crt_get_pk_rsa_raw(gnutls_x509_crt_t crt, * gnutls_x509_crt_get_pk_ecc_raw: * @crt: Holds the certificate * @curve: will hold the curve - * @x: will hold x - * @y: will hold y + * @x: will hold the x-coordinate + * @y: will hold the y-coordinate * * This function will export the ECC public key's parameters found in * the given certificate. The new parameters will be allocated using * gnutls_malloc() and will be stored in the appropriate datum. * + * In EdDSA curves the @y parameter will be %NULL and the other parameters + * will be in the native format for the curve. + * * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. * * Since: 3.4.1 **/ int gnutls_x509_crt_get_pk_ecc_raw(gnutls_x509_crt_t crt, - gnutls_ecc_curve_t * curve, - gnutls_datum_t * x, gnutls_datum_t * y) + gnutls_ecc_curve_t *curve, + gnutls_datum_t *x, gnutls_datum_t *y) { int ret; gnutls_pubkey_t pubkey; @@ -3436,13 +3550,67 @@ gnutls_x509_crt_get_pk_ecc_raw(gnutls_x509_crt_t crt, return gnutls_assert_val(ret); ret = gnutls_pubkey_import_x509(pubkey, crt, 0); - if (ret < 0) { + if (ret < 0) { gnutls_assert(); goto cleanup; } ret = gnutls_pubkey_export_ecc_raw(pubkey, curve, x, y); - if (ret < 0) { + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + cleanup: + gnutls_pubkey_deinit(pubkey); + return ret; +} + +/** + * gnutls_x509_crt_get_pk_gost_raw: + * @crt: Holds the certificate + * @curve: will hold the curve + * @digest: will hold the digest + * @paramset: will hold the GOST parameter set ID + * @x: will hold the x-coordinate + * @y: will hold the y-coordinate + * + * This function will export the GOST public key's parameters found in + * the given certificate. The new parameters will be allocated using + * gnutls_malloc() and will be stored in the appropriate datum. + * + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. + * + * Since: 3.6.3 + **/ +int +gnutls_x509_crt_get_pk_gost_raw(gnutls_x509_crt_t crt, + gnutls_ecc_curve_t *curve, + gnutls_digest_algorithm_t *digest, + gnutls_gost_paramset_t *paramset, + gnutls_datum_t *x, gnutls_datum_t *y) +{ + int ret; + gnutls_pubkey_t pubkey; + + if (crt == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + return gnutls_assert_val(ret); + + ret = gnutls_pubkey_import_x509(pubkey, crt, 0); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = gnutls_pubkey_export_gost_raw2(pubkey, curve, digest, + paramset, x, y, 0); + if (ret < 0) { gnutls_assert(); goto cleanup; } @@ -3484,13 +3652,13 @@ gnutls_x509_crt_get_pk_dsa_raw(gnutls_x509_crt_t crt, return gnutls_assert_val(ret); ret = gnutls_pubkey_import_x509(pubkey, crt, 0); - if (ret < 0) { + if (ret < 0) { gnutls_assert(); goto cleanup; } ret = gnutls_pubkey_export_dsa_raw(pubkey, p, q, g, y); - if (ret < 0) { + if (ret < 0) { gnutls_assert(); goto cleanup; } @@ -3510,15 +3678,15 @@ gnutls_x509_crt_get_pk_dsa_raw(gnutls_x509_crt_t crt, * * This function will convert the given PEM encoded certificate list * to the native gnutls_x509_crt_t format. The output will be stored - * in @certs which will allocated and initialized. + * in @certs which will be allocated and initialized. * * If the Certificate is PEM encoded it should have a header of "X509 * CERTIFICATE", or "CERTIFICATE". * * To deinitialize @certs, you need to deinitialize each crt structure - * independently, and use gnutls_free() at + * independently, and use gnutls_free() at @certs. * - * Returns: the number of certificates read or a negative error value. + * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code. * * Since: 3.0 **/ @@ -3557,7 +3725,6 @@ gnutls_x509_crt_list_import2(gnutls_x509_crt_t ** certs, if (ret < 0) { gnutls_free(*certs); - *certs = NULL; return ret; } @@ -3671,7 +3838,7 @@ gnutls_x509_crt_list_import(gnutls_x509_crt_t * certs, copied++; } - /* now we move ptr after the pem header + /* now we move ptr after the pem header */ ptr++; /* find the next certificate (if any) @@ -3856,7 +4023,7 @@ legacy_parse_aia(ASN1_TYPE src, case GNUTLS_IA_CAISSUERS_URI: oid = GNUTLS_OID_AD_CAISSUERS; - /* fall through */ + FALLTHROUGH; case GNUTLS_IA_OCSP_URI: if (oid == NULL) @@ -3884,7 +4051,7 @@ legacy_parse_aia(ASN1_TYPE src, gnutls_assert_val (GNUTLS_E_UNKNOWN_ALGORITHM); } - /* fall through */ + FALLTHROUGH; case GNUTLS_IA_URI: snprintf(nptr, sizeof(nptr), @@ -3941,7 +4108,7 @@ legacy_parse_aia(ASN1_TYPE src, * * Note that a simpler API to access the authority info data is provided * by gnutls_x509_aia_get() and gnutls_x509_ext_import_aia(). - * + * * This function extracts the Authority Information Access (AIA) * extension, see RFC 5280 section 4.2.2.1 for more information. The * AIA extension holds a sequence of AccessDescription (AD) data. @@ -3963,7 +4130,7 @@ legacy_parse_aia(ASN1_TYPE src, * * If @what is %GNUTLS_IA_URI, @data will hold the accessLocation URI * data. Requesting this @what value leads to an error if the - * accessLocation is not of the "uniformResourceIdentifier" type. + * accessLocation is not of the "uniformResourceIdentifier" type. * * If @what is %GNUTLS_IA_OCSP_URI, @data will hold the OCSP URI. * Requesting this @what value leads to an error if the accessMethod @@ -4059,7 +4226,7 @@ gnutls_x509_crt_get_authority_info_access(gnutls_x509_crt_t crt, * @userdata: data associated with the callback * * This function will set a callback function to be used when - * it is required to access a protected object. This function overrides + * it is required to access a protected object. This function overrides * the global function set using gnutls_pkcs11_set_pin_function(). * * Note that this callback is currently used only during the import @@ -4072,8 +4239,10 @@ void gnutls_x509_crt_set_pin_function(gnutls_x509_crt_t crt, gnutls_pin_callback_t fn, void *userdata) { - crt->pin.cb = fn; - crt->pin.data = userdata; + if (crt) { + crt->pin.cb = fn; + crt->pin.data = userdata; + } } /** @@ -4096,7 +4265,7 @@ void gnutls_x509_crt_set_pin_function(gnutls_x509_crt_t crt, **/ int gnutls_x509_crt_import_url(gnutls_x509_crt_t crt, - const char *url, unsigned int flags) + const char *url, unsigned int flags) { int ret; unsigned i; @@ -4125,6 +4294,108 @@ gnutls_x509_crt_import_url(gnutls_x509_crt_t crt, return ret; } +/** + * gnutls_x509_crt_list_import_url: + * @certs: Will hold the allocated certificate list. + * @size: It will contain the size of the list. + * @url: A PKCS 11 url + * @pin_fn: a PIN callback if not globally set + * @pin_fn_userdata: parameter for the PIN callback + * @flags: One of GNUTLS_PKCS11_OBJ_* flags for PKCS#11 URLs or zero otherwise + * + * This function will import a certificate chain present in a PKCS#11 token + * or any type of back-end that supports URLs. The certificates + * must be deinitialized afterwards using gnutls_x509_crt_deinit() + * and the returned pointer must be freed using gnutls_free(). + * + * The URI provided must be the first certificate in the chain; subsequent + * certificates will be retrieved using gnutls_pkcs11_get_raw_issuer() or + * equivalent functionality for the supported URI. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.3 + **/ +int +gnutls_x509_crt_list_import_url(gnutls_x509_crt_t **certs, + unsigned int *size, + const char *url, + gnutls_pin_callback_t pin_fn, + void *pin_fn_userdata, + unsigned int flags) +{ + int ret; + unsigned i; + gnutls_x509_crt_t crts[DEFAULT_MAX_VERIFY_DEPTH]; + gnutls_datum_t issuer = {NULL, 0}; + unsigned total = 0; + + memset(crts, 0, sizeof(crts)); + + ret = gnutls_x509_crt_init(&crts[0]); + if (ret < 0) + return gnutls_assert_val(ret); + + gnutls_x509_crt_set_pin_function(crts[0], pin_fn, pin_fn_userdata); + + total = 1; + + ret = gnutls_x509_crt_import_url(crts[0], url, flags); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + for (i=1;iflags = flags; } + diff --git a/lib/x509/x509_dn.c b/lib/x509/x509_dn.c index 7e44e35c83..b7205ee6ef 100644 --- a/lib/x509/x509_dn.c +++ b/lib/x509/x509_dn.c @@ -15,7 +15,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/lib/x509/x509_ext.c b/lib/x509/x509_ext.c index 99e0a43f30..6aeb159dba 100644 --- a/lib/x509/x509_ext.c +++ b/lib/x509/x509_ext.c @@ -15,7 +15,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -236,8 +236,7 @@ int gnutls_x509_ext_import_subject_alt_names(const gnutls_datum_t * ext, goto cleanup; } - i = 0; - do { + for (i=0;;i++) { san.data = NULL; san.size = 0; othername_oid.data = NULL; @@ -264,9 +263,7 @@ int gnutls_x509_ext_import_subject_alt_names(const gnutls_datum_t * ext, (char *)othername_oid.data, 1); if (ret < 0) break; - - i++; - } while (ret >= 0); + } sans->size = i; if (ret < 0 && ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { @@ -453,7 +450,7 @@ int gnutls_x509_ext_import_name_constraints(const gnutls_datum_t * ext, * * This function will convert the provided name constraints type to a * DER-encoded PKIX NameConstraints (2.5.29.30) extension. The output data in - * @ext will be allocated usin gnutls_malloc(). + * @ext will be allocated using gnutls_malloc(). * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a negative error value. * @@ -916,8 +913,7 @@ int gnutls_x509_ext_import_authority_key_id(const gnutls_datum_t * ext, } /* Read authorityCertIssuer */ - i = 0; - do { + for (i=0;;i++) { san.data = NULL; san.size = 0; othername_oid.data = NULL; @@ -944,9 +940,7 @@ int gnutls_x509_ext_import_authority_key_id(const gnutls_datum_t * ext, (char *)othername_oid.data, 1); if (ret < 0) break; - - i++; - } while (ret >= 0); + } aki->cert_issuer.size = i; if (ret < 0 && ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE @@ -1052,7 +1046,7 @@ int gnutls_x509_ext_export_authority_key_id(gnutls_x509_aki_t aki, san.data, aki->cert_issuer. names[i].san.size); - if (result < 0) { + if (ret < 0) { gnutls_assert(); goto cleanup; } @@ -1520,9 +1514,9 @@ int gnutls_x509_ext_export_basic_constraints(unsigned int ca, int pathlen, * * Since: 3.3.0 **/ -int gnutls_x509_ext_import_proxy(const gnutls_datum_t * ext, int *pathlen, - char **policyLanguage, char **policy, - size_t * sizeof_policy) +int gnutls_x509_ext_import_proxy(const gnutls_datum_t *ext, int *pathlen, + char **policyLanguage, char **policy, + size_t *sizeof_policy) { ASN1_TYPE c2 = ASN1_TYPE_EMPTY; int result; @@ -1563,11 +1557,6 @@ int gnutls_x509_ext_import_proxy(const gnutls_datum_t * ext, int *pathlen, goto cleanup; } - if (policyLanguage) { - *policyLanguage = (char *)value1.data; - value1.data = NULL; - } - result = _gnutls_x509_read_value(c2, "proxyPolicy.policy", &value2); if (result == GNUTLS_E_ASN1_ELEMENT_NOT_FOUND) { if (policy) @@ -1586,6 +1575,11 @@ int gnutls_x509_ext_import_proxy(const gnutls_datum_t * ext, int *pathlen, *sizeof_policy = value2.size; } + if (policyLanguage) { + *policyLanguage = (char *)value1.data; + value1.data = NULL; + } + result = 0; cleanup: gnutls_free(value1.data); @@ -1994,7 +1988,6 @@ int gnutls_x509_ext_import_policies(const gnutls_datum_t * ext, ret = decode_user_notice(td.data, td.size, &txt); gnutls_free(td.data); - td.data = NULL; if (ret < 0) { gnutls_assert(); @@ -2445,8 +2438,7 @@ int gnutls_x509_ext_import_crl_dist_points(const gnutls_datum_t * ext, snprintf(name, sizeof(name), "?%u.distributionPoint.fullName", (unsigned)i + 1); - j = 0; - do { + for (j=0;;j++) { san.data = NULL; san.size = 0; @@ -2465,9 +2457,7 @@ int gnutls_x509_ext_import_crl_dist_points(const gnutls_datum_t * ext, if (ret < 0) break; san.data = NULL; /* it is now in cdp */ - - j++; - } while (ret >= 0); + } i++; } while (ret >= 0); @@ -3136,7 +3126,7 @@ int gnutls_x509_ext_import_key_purposes(const gnutls_datum_t * ext, * * This function will convert the key purposes type to a * DER-encoded PKIX ExtKeyUsageSyntax (2.5.29.37) extension. The output data in - * @ext will be allocated usin gnutls_malloc(). + * @ext will be allocated using gnutls_malloc(). * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a negative error value. * diff --git a/lib/x509/x509_ext_int.h b/lib/x509/x509_ext_int.h index 3bca97f30e..2e3f162a5d 100644 --- a/lib/x509/x509_ext_int.h +++ b/lib/x509/x509_ext_int.h @@ -15,12 +15,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef X509_EXT_INT_H -#define X509_EXT_INT_H +#ifndef GNUTLS_LIB_X509_X509_EXT_INT_H +#define GNUTLS_LIB_X509_X509_EXT_INT_H #include "gnutls_int.h" struct name_st { @@ -31,4 +31,4 @@ struct name_st { int _gnutls_alt_name_process(gnutls_datum_t *out, unsigned type, const gnutls_datum_t *san, unsigned raw); -#endif +#endif /* GNUTLS_LIB_X509_X509_EXT_INT_H */ diff --git a/lib/x509/x509_int.h b/lib/x509/x509_int.h index 38f07d6ed8..050e95059e 100644 --- a/lib/x509/x509_int.h +++ b/lib/x509/x509_int.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2003-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,12 +17,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ -#ifndef X509_H -#define X509_H +#ifndef GNUTLS_LIB_X509_X509_INT_H +#define GNUTLS_LIB_X509_X509_INT_H #include #include @@ -47,6 +48,16 @@ #define HASH_OID_SHA3_256 "2.16.840.1.101.3.4.2.8" #define HASH_OID_SHA3_384 "2.16.840.1.101.3.4.2.9" #define HASH_OID_SHA3_512 "2.16.840.1.101.3.4.2.10" +#define HASH_OID_SHAKE_128 "2.16.840.1.101.3.4.2.11" +#define HASH_OID_SHAKE_256 "2.16.840.1.101.3.4.2.12" +#define HASH_OID_GOST_R_3411_94 "1.2.643.2.2.9" +#define HASH_OID_STREEBOG_256 "1.2.643.7.1.1.2.2" +#define HASH_OID_STREEBOG_512 "1.2.643.7.1.1.2.3" + +#define HASH_OID_GOST_R_3411_94_CRYPTOPRO_PARAMS "1.2.643.2.2.30.1" + +/* from rfc8479 */ +#define OID_ATTR_PROV_SEED "1.3.6.1.4.1.2312.18.8.1" struct gnutls_x509_crl_iter { /* This is used to optimize reads by gnutls_x509_crl_iter_crt_serial() */ @@ -134,7 +145,6 @@ typedef struct gnutls_x509_privkey_int { */ gnutls_pk_params_st params; - gnutls_pk_algorithm_t pk_algorithm; unsigned expanded; unsigned flags; @@ -156,8 +166,14 @@ int _gnutls_x509_get_tbs(ASN1_TYPE cert, const char *tbs_name, gnutls_datum_t * tbs); int _gnutls_x509_pkix_sign(ASN1_TYPE src, const char *src_name, gnutls_digest_algorithm_t, + unsigned int flags, gnutls_x509_crt_t issuer, gnutls_privkey_t issuer_key); +int _gnutls_x509_crt_get_spki_params(gnutls_x509_crt_t issuer, + const gnutls_x509_spki_st *key_params, + gnutls_x509_spki_st *params); + +#define map_errs_to_zero(x) ((x)<0?0:(x)) /* dn.c */ #define OID_X520_COUNTRY_NAME "2.5.4.6" @@ -229,11 +245,6 @@ _gnutls_x509_verify_algorithm(gnutls_digest_algorithm_t * hash, gnutls_pk_algorithm_t pk, gnutls_pk_params_st * issuer_params); -int _gnutls_x509_verify_data(const mac_entry_st * me, - const gnutls_datum_t * data, - const gnutls_datum_t * signature, - gnutls_x509_crt_t issuer); - /* privkey.h */ void _gnutls_x509_privkey_reinit(gnutls_x509_privkey_t key); @@ -245,12 +256,30 @@ int _gnutls_privkey_decode_ecc_key(ASN1_TYPE* pkey_asn, const gnutls_datum_t * gnutls_x509_privkey_t pkey, gnutls_ecc_curve_t curve); +int _gnutls_privkey_decode_eddsa_key(ASN1_TYPE* pkey_asn, + const gnutls_datum_t *raw_key, + gnutls_x509_privkey_t pkey, + gnutls_ecc_curve_t curve); + int _gnutls_x509_read_ecc_params(uint8_t * der, int dersize, unsigned int *curve); -int _gnutls_asn1_encode_privkey(gnutls_pk_algorithm_t pk, ASN1_TYPE * c2, - gnutls_pk_params_st * params, unsigned compat); +int +_gnutls_x509_read_gost_params(uint8_t * der, int dersize, + gnutls_pk_params_st * params, + gnutls_pk_algorithm_t algo); + +int _gnutls_asn1_encode_privkey(ASN1_TYPE * c2, + gnutls_pk_params_st * params); + +void _gnutls_x509_privkey_get_spki_params(gnutls_x509_privkey_t key, + gnutls_x509_spki_st * params); + +int _gnutls_x509_read_rsa_pss_params(uint8_t * der, int dersize, + gnutls_x509_spki_st * params); +int _gnutls_x509_write_rsa_pss_params(const gnutls_x509_spki_st * params, + gnutls_datum_t * der); /* extensions.c */ int _gnutls_x509_crl_get_extension_oid(gnutls_x509_crl_t crl, @@ -286,7 +315,7 @@ _gnutls_x509_ext_extract_number(uint8_t * number, size_t * nr_size, uint8_t * extnValue, int extnValueLen); int -_gnutls_x509_ext_gen_number(const uint8_t * nuber, size_t nr_size, +_gnutls_x509_ext_gen_number(const uint8_t * number, size_t nr_size, gnutls_datum_t * der_ext); @@ -315,21 +344,27 @@ int _gnutls_x509_crt_get_mpis(gnutls_x509_crt_t cert, int _gnutls_x509_read_pubkey_params(gnutls_pk_algorithm_t, uint8_t * der, int dersize, gnutls_pk_params_st * params); +int _gnutls_x509_check_pubkey_params(gnutls_pk_params_st * params); int _gnutls_x509_read_pubkey(gnutls_pk_algorithm_t, uint8_t * der, int dersize, gnutls_pk_params_st * params); -int _gnutls_x509_write_ecc_params(gnutls_ecc_curve_t curve, +int _gnutls_x509_read_pubkey_signature_params(gnutls_pk_algorithm_t algo, + uint8_t * der, int dersize, + gnutls_pk_params_st * params); + +int _gnutls_x509_write_ecc_params(const gnutls_ecc_curve_t curve, gnutls_datum_t * der); -int _gnutls_x509_write_ecc_pubkey(gnutls_pk_params_st * params, +int _gnutls_x509_write_ecc_pubkey(const gnutls_pk_params_st * params, gnutls_datum_t * der); +int _gnutls_x509_write_eddsa_pubkey(const gnutls_pk_params_st * params, + gnutls_datum_t * der); + int -_gnutls_x509_write_pubkey_params(gnutls_pk_algorithm_t algo, - gnutls_pk_params_st * params, +_gnutls_x509_write_pubkey_params(const gnutls_pk_params_st * params, gnutls_datum_t * der); -int _gnutls_x509_write_pubkey(gnutls_pk_algorithm_t, - gnutls_pk_params_st * params, +int _gnutls_x509_write_pubkey(const gnutls_pk_params_st * params, gnutls_datum_t * der); int _gnutls_x509_read_uint(ASN1_TYPE node, const char *value, @@ -352,9 +387,43 @@ int _gnutls_x509_read_key_int(ASN1_TYPE node, const char *value, int _gnutls_x509_write_key_int(ASN1_TYPE node, const char *value, bigint_t mpi, int lz); -int _gnutls_x509_write_sig_params(ASN1_TYPE dst, const char *dst_name, - gnutls_pk_algorithm_t pk_algorithm, - gnutls_digest_algorithm_t, unsigned legacy); +int _gnutls_x509_read_key_int_le(ASN1_TYPE node, const char *value, + bigint_t * ret_mpi); +int _gnutls_x509_write_key_int_le(ASN1_TYPE node, const char *value, + bigint_t mpi); + +int _gnutls_x509_read_pkalgo_params(ASN1_TYPE src, const char *src_name, + gnutls_x509_spki_st *params, unsigned is_sig); +int _gnutls_x509_write_sign_params(ASN1_TYPE dst, const char *dst_name, + const gnutls_sign_entry_st *se, gnutls_x509_spki_st *params); + +#define _gnutls_x509_read_sign_params(src,name,params) _gnutls_x509_read_pkalgo_params(src,name,params,1) +#define _gnutls_x509_read_spki_params(src,name,params) _gnutls_x509_read_pkalgo_params(src,name,params,0) +int _gnutls_x509_write_spki_params(ASN1_TYPE dst, const char *dst_name, + gnutls_x509_spki_st *params); + +inline static int +_gnutls_x509_crt_read_spki_params(gnutls_x509_crt_t crt, + gnutls_x509_spki_st *params) +{ + return _gnutls_x509_read_spki_params(crt->cert, + "tbsCertificate." + "subjectPublicKeyInfo." + "algorithm", + params); +} + +inline static int +_gnutls_x509_crq_read_spki_params(gnutls_x509_crq_t crt, + gnutls_x509_spki_st *params) +{ + return _gnutls_x509_read_spki_params(crt->crq, + "certificationRequestInfo." + "subjectPKInfo." + "algorithm", + params); +} + /* pkcs12.h */ #include @@ -477,6 +546,6 @@ struct gnutls_x509_tlsfeatures_st { unsigned int size; }; -unsigned _gnutls_is_broken_sig_allowed(gnutls_sign_algorithm_t sig, unsigned int flags); +unsigned _gnutls_is_broken_sig_allowed(const gnutls_sign_entry_st *se, unsigned int flags); -#endif +#endif /* GNUTLS_LIB_X509_X509_INT_H */ diff --git a/lib/x509/x509_write.c b/lib/x509/x509_write.c index 70e9cc0b1d..7f79515386 100644 --- a/lib/x509/x509_write.c +++ b/lib/x509/x509_write.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2003-2016 Free Software Foundation, Inc. - * Copyright (C) 2016 Red Hat, Inc. + * Copyright (C) 2016-2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -35,6 +35,7 @@ #include #include "x509_int.h" #include +#include static void disable_optional_stuff(gnutls_x509_crt_t cert); @@ -238,7 +239,6 @@ gnutls_x509_crt_set_key(gnutls_x509_crt_t crt, gnutls_x509_privkey_t key) result = _gnutls_x509_encode_and_copy_PKI_params(crt->cert, "tbsCertificate.subjectPublicKeyInfo", - key->pk_algorithm, &key->params); if (result < 0) { @@ -1113,6 +1113,9 @@ gnutls_x509_crt_set_private_key_usage_period(gnutls_x509_crt_t crt, * be fully functional (e.g., for signature verification), until it * is exported an re-imported. * + * After GnuTLS 3.6.1 the value of @dig may be %GNUTLS_DIG_UNKNOWN, + * and in that case, a suitable but reasonable for the key algorithm will be selected. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. **/ @@ -1165,7 +1168,9 @@ gnutls_x509_crt_sign2(gnutls_x509_crt_t crt, gnutls_x509_crt_t issuer, * @issuer_key: holds the issuer's private key * * This function is the same a gnutls_x509_crt_sign2() with no flags, - * and SHA1 as the hash algorithm. + * and an appropriate hash algorithm. The hash algorithm used may + * vary between versions of GnuTLS, and it is tied to the security + * level of the issuer's public key. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -1175,7 +1180,7 @@ gnutls_x509_crt_sign(gnutls_x509_crt_t crt, gnutls_x509_crt_t issuer, gnutls_x509_privkey_t issuer_key) { return gnutls_x509_crt_sign2(crt, issuer, issuer_key, - GNUTLS_DIG_SHA1, 0); + 0, 0); } /** @@ -1183,7 +1188,7 @@ gnutls_x509_crt_sign(gnutls_x509_crt_t crt, gnutls_x509_crt_t issuer, * @cert: a certificate of type #gnutls_x509_crt_t * @act_time: The actual time * - * This function will set the time this Certificate was or will be + * This function will set the time this certificate was or will be * activated. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a @@ -1211,8 +1216,8 @@ gnutls_x509_crt_set_activation_time(gnutls_x509_crt_t cert, * @exp_time: The actual time * * This function will set the time this Certificate will expire. - * Setting an expiration time to (time_t)-1 or to %GNUTLS_X509_NO_WELL_DEFINED_EXPIRATION - * will set to the no well-defined expiration date value. + * Setting an expiration time to (time_t)-1 will set + * to the no well-defined expiration date value. * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. @@ -1785,6 +1790,9 @@ gnutls_x509_crt_set_key_purpose_oid(gnutls_x509_crt_t cert, * be fully functional (e.g., for signature verification), until it * is exported an re-imported. * + * After GnuTLS 3.6.1 the value of @dig may be %GNUTLS_DIG_UNKNOWN, + * and in that case, a suitable but reasonable for the key algorithm will be selected. + * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a * negative error value. **/ @@ -1802,6 +1810,12 @@ gnutls_x509_crt_privkey_sign(gnutls_x509_crt_t crt, return GNUTLS_E_INVALID_REQUEST; } + if (dig == 0) { + result = gnutls_x509_crt_get_preferred_hash_algorithm(issuer, &dig, NULL); + if (result < 0) + return gnutls_assert_val(result); + } + MODIFIED(crt); /* disable all the unneeded OPTIONAL fields. @@ -1815,7 +1829,7 @@ gnutls_x509_crt_privkey_sign(gnutls_x509_crt_t crt, } result = _gnutls_x509_pkix_sign(crt->cert, "tbsCertificate", - dig, issuer, issuer_key); + dig, flags, issuer, issuer_key); if (result < 0) { gnutls_assert(); return result; @@ -1989,3 +2003,123 @@ gnutls_x509_crt_set_policy(gnutls_x509_crt_t crt, return ret; } +/** + * gnutls_x509_crt_set_spki: + * @crt: a certificate of type #gnutls_x509_crt_t + * @spki: a SubjectPublicKeyInfo structure of type #gnutls_x509_spki_t + * @flags: must be zero + * + * This function will set the certificate's subject public key + * information explicitly. This is intended to be used in the cases + * where a single public key (e.g., RSA) can be used for multiple + * signature algorithms (RSA PKCS1-1.5, and RSA-PSS). + * + * To export the public key (i.e., the SubjectPublicKeyInfo part), check + * gnutls_pubkey_import_x509(). + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a + * negative error value. + * + * Since: 3.6.0 + **/ +int +gnutls_x509_crt_set_spki(gnutls_x509_crt_t crt, + const gnutls_x509_spki_t spki, + unsigned int flags) +{ + int ret; + gnutls_pk_algorithm_t crt_pk; + gnutls_x509_spki_st tpki; + gnutls_pk_params_st params; + unsigned bits; + + if (crt == NULL) { + gnutls_assert(); + return GNUTLS_E_INVALID_REQUEST; + } + + ret = _gnutls_x509_crt_get_mpis(crt, ¶ms); + if (ret < 0) { + gnutls_assert(); + return ret; + } + + bits = pubkey_to_bits(¶ms); + crt_pk = params.algo; + + if (!_gnutls_pk_are_compat(crt_pk, spki->pk)) { + ret = gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + goto cleanup; + } + + if (spki->pk != GNUTLS_PK_RSA_PSS) { + if (crt_pk == spki->pk) { + ret = 0; + goto cleanup; + } + + gnutls_assert(); + ret = GNUTLS_E_INVALID_REQUEST; + goto cleanup; + } + + memset(&tpki, 0, sizeof(gnutls_x509_spki_st)); + + if (crt_pk == GNUTLS_PK_RSA) { + const mac_entry_st *me; + + me = hash_to_entry(spki->rsa_pss_dig); + if (unlikely(me == NULL)) { + gnutls_assert(); + ret = GNUTLS_E_INVALID_REQUEST; + goto cleanup; + } + + tpki.pk = spki->pk; + tpki.rsa_pss_dig = spki->rsa_pss_dig; + + /* If salt size is zero, find the optimal salt size. */ + if (spki->salt_size == 0) { + ret = _gnutls_find_rsa_pss_salt_size(bits, me, + spki->salt_size); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + tpki.salt_size = ret; + } else + tpki.salt_size = spki->salt_size; + } else if (crt_pk == GNUTLS_PK_RSA_PSS) { + ret = _gnutls_x509_crt_read_spki_params(crt, &tpki); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + tpki.salt_size = spki->salt_size; + tpki.rsa_pss_dig = spki->rsa_pss_dig; + } + + memcpy(¶ms.spki, &tpki, sizeof(tpki)); + ret = _gnutls_x509_check_pubkey_params(¶ms); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + MODIFIED(crt); + + ret = _gnutls_x509_write_spki_params(crt->cert, + "tbsCertificate." + "subjectPublicKeyInfo.algorithm", + &tpki); + if (ret < 0) { + gnutls_assert(); + goto cleanup; + } + + ret = 0; + cleanup: + gnutls_pk_params_release(¶ms); + return ret; +} diff --git a/lib/x509_b64.c b/lib/x509_b64.c index 340724c4d7..fcace95a6f 100644 --- a/lib/x509_b64.c +++ b/lib/x509_b64.c @@ -17,7 +17,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -102,7 +102,7 @@ _gnutls_fbase64_encode(const char *msg, const uint8_t * data, if (sizeof(tmpres) < size) return gnutls_assert_val(GNUTLS_E_BASE64_ENCODING_ERROR); - base64_encode_raw(tmpres, tmp, &data[i]); + base64_encode_raw((void*)tmpres, tmp, &data[i]); INCR(bytes, size + 1, max); ptr = &result->data[pos]; @@ -140,9 +140,6 @@ _gnutls_fbase64_encode(const char *msg, const uint8_t * data, * The output string will be null terminated, although the output size will * not include the terminating null. * - * Since GnuTLS 3.6.0 this function when provided a %NULL msg will - * provide a raw base64 output of the input data. - * * Returns: On success %GNUTLS_E_SUCCESS (0) is returned, * %GNUTLS_E_SHORT_MEMORY_BUFFER is returned if the buffer given is * not long enough, or 0 on success. @@ -188,9 +185,6 @@ gnutls_pem_base64_encode(const char *msg, const gnutls_datum_t * data, * under the name gnutls_pem_base64_encode_alloc(). There is * compatibility macro pointing to this function. * - * Since GnuTLS 3.6.0 this function when provided a %NULL or empty @header - * will provide the raw base64 output of the input data. - * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise * an error code is returned. * @@ -215,6 +209,9 @@ gnutls_pem_base64_encode2(const char *header, /* copies data to result but removes newlines and * returns the size of the data copied. + * + * It will fail with GNUTLS_E_BASE64_DECODING_ERROR if the + * end-result is the empty string. */ inline static int cpydata(const uint8_t * data, int data_size, gnutls_datum_t * result) @@ -237,11 +234,20 @@ cpydata(const uint8_t * data, int data_size, gnutls_datum_t * result) result->size = j; result->data[j] = 0; + + if (j==0) { + gnutls_free(result->data); + return gnutls_assert_val(GNUTLS_E_BASE64_DECODING_ERROR); + } + return j; } -/* decodes data and puts the result into result (locally allocated) - * The result_size is the return value +/* decodes data and puts the result into result (locally allocated). + * Note that encodings of zero-length strings are being rejected + * with GNUTLS_E_BASE64_DECODING_ERROR. + * + * The result_size is the return value. */ int _gnutls_base64_decode(const uint8_t * data, size_t data_size, @@ -252,6 +258,14 @@ _gnutls_base64_decode(const uint8_t * data, size_t data_size, gnutls_datum_t pdata; struct base64_decode_ctx ctx; + if (data_size == 0) { + result->data = (unsigned char*)gnutls_strdup(""); + if (result->data == NULL) + return gnutls_assert_val(GNUTLS_E_MEMORY_ERROR); + result->size = 0; + return 0; + } + ret = cpydata(data, data_size, &pdata); if (ret < 0) { gnutls_assert(); @@ -260,7 +274,11 @@ _gnutls_base64_decode(const uint8_t * data, size_t data_size, base64_decode_init(&ctx); - size = BASE64_DECODE_LENGTH(data_size); + size = BASE64_DECODE_LENGTH(pdata.size); + if (size == 0) { + ret = gnutls_assert_val(GNUTLS_E_BASE64_DECODING_ERROR); + goto cleanup; + } result->data = gnutls_malloc(size); if (result->data == NULL) { @@ -269,16 +287,16 @@ _gnutls_base64_decode(const uint8_t * data, size_t data_size, } ret = base64_decode_update(&ctx, &size, result->data, - pdata.size, pdata.data); - if (ret == 0) { + pdata.size, (void*)pdata.data); + if (ret == 0 || size == 0) { gnutls_assert(); - ret = GNUTLS_E_PARSING_ERROR; + ret = GNUTLS_E_BASE64_DECODING_ERROR; goto fail; } ret = base64_decode_final(&ctx); if (ret != 1) { - ret = gnutls_assert_val(GNUTLS_E_PARSING_ERROR); + ret = gnutls_assert_val(GNUTLS_E_BASE64_DECODING_ERROR); goto fail; } @@ -289,7 +307,6 @@ _gnutls_base64_decode(const uint8_t * data, size_t data_size, fail: gnutls_free(result->data); - result->data = NULL; cleanup: gnutls_free(pdata.data); @@ -300,7 +317,8 @@ _gnutls_base64_decode(const uint8_t * data, size_t data_size, /* Searches the given string for ONE PEM encoded certificate, and * stores it in the result. * - * The result_size is the return value + * The result_size (always non-zero) is the return value, + * or a negative error code. */ #define ENDSTR "-----" int @@ -314,14 +332,6 @@ _gnutls_fbase64_decode(const char *header, const uint8_t * data, int rdata_size; char pem_header[128]; - if (header && header[0] == 0) { - if ((ret = _gnutls_base64_decode(data, data_size, result)) < 0) { - gnutls_assert(); - return GNUTLS_E_BASE64_DECODING_ERROR; - } - return 0; - } - _gnutls_str_cpy(pem_header, sizeof(pem_header), top); if (header != NULL) _gnutls_str_cat(pem_header, sizeof(pem_header), header); @@ -391,10 +401,6 @@ _gnutls_fbase64_decode(const char *header, const uint8_t * data, * and decode only this part. Otherwise it will decode the first PEM * packet found. * - * To decode data from any arbitrary header set the null string as header. - * Since 3.6.0 this function will decode arbitrary base64 without any - * headers when the empty string "" is given as header. - * * Returns: On success %GNUTLS_E_SUCCESS (0) is returned, * %GNUTLS_E_SHORT_MEMORY_BUFFER is returned if the buffer given is * not long enough, or 0 on success. @@ -430,7 +436,7 @@ gnutls_pem_base64_decode(const char *header, * gnutls_pem_base64_decode2: * @header: The PEM header (eg. CERTIFICATE) * @b64_data: contains the encoded data - * @result: the place where decoded data lie + * @result: the location of decoded data * * This function will decode the given encoded data. The decoded data * will be allocated, and stored into result. If the header given is @@ -444,10 +450,6 @@ gnutls_pem_base64_decode(const char *header, * under the name gnutls_pem_base64_decode_alloc(). There is * compatibility macro pointing to this function. * - * To decode data from any arbitrary header set the null string as header. - * Since 3.6.0 this function will decode arbitrary base64 without any - * headers when %NULL is given as header. - * * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise * an error code is returned. * @@ -471,3 +473,64 @@ gnutls_pem_base64_decode2(const char *header, return 0; } + +/** + * gnutls_base64_decode2: + * @base64: contains the encoded data + * @result: the location of decoded data + * + * This function will decode the given base64 encoded data. The decoded data + * will be allocated, and stored into result. + * + * You should use gnutls_free() to free the returned data. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise + * an error code is returned. + * + * Since: 3.6.0 + **/ +int +gnutls_base64_decode2(const gnutls_datum_t *base64, + gnutls_datum_t *result) +{ + int ret; + + ret = _gnutls_base64_decode(base64->data, base64->size, result); + if (ret < 0) { + return gnutls_assert_val(ret); + } + + return 0; +} + +/** + * gnutls_base64_encode2: + * @data: contains the raw data + * @result: will hold the newly allocated encoded data + * + * This function will convert the given data to printable data, using + * the base64 encoding. This function will allocate the required + * memory to hold the encoded data. + * + * You should use gnutls_free() to free the returned data. + * + * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise + * an error code is returned. + * + * Since: 3.6.0 + **/ +int +gnutls_base64_encode2(const gnutls_datum_t *data, + gnutls_datum_t *result) +{ + int ret; + + if (result == NULL) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); + + ret = _gnutls_fbase64_encode(NULL, data->data, data->size, result); + if (ret < 0) + return gnutls_assert_val(ret); + + return 0; +} diff --git a/lib/x509_b64.h b/lib/x509_b64.h index be3482934e..271850a1dc 100644 --- a/lib/x509_b64.h +++ b/lib/x509_b64.h @@ -16,10 +16,13 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_LIB_X509_B64_H +#define GNUTLS_LIB_X509_B64_H + int _gnutls_fbase64_encode(const char *msg, const uint8_t * data, size_t data_size, gnutls_datum_t * result); int _gnutls_fbase64_decode(const char *header, const uint8_t * data, @@ -37,3 +40,5 @@ _gnutls_base64_decode(const uint8_t * data, size_t data_size, #define B64FSIZE( hsize, dsize) \ (B64SIZE(dsize) + (hsize) + /*newlines*/ \ B64SIZE(dsize)/64 + (((B64SIZE(dsize) % 64) > 0) ? 1 : 0)) + +#endif /* GNUTLS_LIB_X509_B64_H */ diff --git a/libdane/Makefile.am b/libdane/Makefile.am index d2b4e835ac..c2bd0dc0a1 100644 --- a/libdane/Makefile.am +++ b/libdane/Makefile.am @@ -16,7 +16,7 @@ # General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see ACLOCAL_AMFLAGS = -I ../m4 -I ../gl/m4 diff --git a/libdane/dane-params.c b/libdane/dane-params.c index 00b209f184..e04e54d5a1 100644 --- a/libdane/dane-params.c +++ b/libdane/dane-params.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/libdane/dane.c b/libdane/dane.c index 42c98933a4..f05f3ce92c 100644 --- a/libdane/dane.c +++ b/libdane/dane.c @@ -18,7 +18,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ @@ -851,7 +851,7 @@ dane_verify_crt_raw(dane_state_t s, * * Note that this function is designed to be run in addition to * PKIX - certificate chain - verification. To be run independently - * the %DANE_VFLAG_ONLY_CHECK_EE_USAGE flag should be specified; + * the %DANE_VFLAG_ONLY_CHECK_EE_USAGE flag should be specified; * then the function will check whether the key of the peer matches the * key advertized in the DANE entry. * @@ -946,7 +946,6 @@ dane_verify_session_crt(dane_state_t s, /* this list may be incomplete, try to get the self-signed CA if any */ if (cert_list_size > 0) { - gnutls_datum_t new_cert_list[cert_list_size+1]; gnutls_x509_crt_t crt, ca; gnutls_certificate_credentials_t sc; @@ -987,11 +986,21 @@ dane_verify_session_crt(dane_state_t s, } /* make the new list */ + gnutls_datum_t *new_cert_list; + + new_cert_list = gnutls_malloc((cert_list_size + 1) * sizeof(gnutls_datum_t)); + if (new_cert_list == NULL) { + gnutls_assert(); + gnutls_x509_crt_deinit(crt); + goto failsafe; + } + memcpy(new_cert_list, cert_list, cert_list_size*sizeof(gnutls_datum_t)); ret = gnutls_x509_crt_export2(ca, GNUTLS_X509_FMT_DER, &new_cert_list[cert_list_size]); if (ret < 0) { gnutls_assert(); + free(new_cert_list); gnutls_x509_crt_deinit(crt); goto failsafe; } @@ -1003,6 +1012,7 @@ dane_verify_session_crt(dane_state_t s, gnutls_assert(); } gnutls_free(new_cert_list[cert_list_size].data); + free(new_cert_list); return ret; } diff --git a/libdane/errors.c b/libdane/errors.c index c189e3ebb8..35ae971723 100644 --- a/libdane/errors.c +++ b/libdane/errors.c @@ -16,7 +16,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ diff --git a/libdane/gnutls-dane.pc.in b/libdane/gnutls-dane.pc.in index 32a3df48c0..8496e61eb1 100644 --- a/libdane/gnutls-dane.pc.in +++ b/libdane/gnutls-dane.pc.in @@ -16,7 +16,7 @@ includedir=@includedir@ Name: GnuTLS-DANE Description: DANE security library for the GNU system -URL: http://www.gnu.org/software/gnutls/ +URL: https://www.gnu.org/software/gnutls/ Version: @VERSION@ Libs: -L${libdir} -lgnutls-dane Libs.private: @UNBOUND_LIBS@ diff --git a/libdane/includes/Makefile.am b/libdane/includes/Makefile.am index e67c5029d8..3d4d36682a 100644 --- a/libdane/includes/Makefile.am +++ b/libdane/includes/Makefile.am @@ -16,6 +16,6 @@ # General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License -# along with this program. If not, see +# along with this program. If not, see nobase_include_HEADERS = gnutls/dane.h diff --git a/libdane/includes/gnutls/dane.h b/libdane/includes/gnutls/dane.h index 0b14b2a559..92d1da9226 100644 --- a/libdane/includes/gnutls/dane.h +++ b/libdane/includes/gnutls/dane.h @@ -16,10 +16,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see + * along with this program. If not, see * */ +#ifndef GNUTLS_DANE_H +#define GNUTLS_DANE_H #include /* for gnutls_datum_t */ @@ -198,3 +200,5 @@ const char *dane_strerror(int error); #define DANE_E_FILE_ERROR -12 #define DANE_E_CERT_ERROR -13 #define DANE_E_UNKNOWN_DANE_DATA -14 + +#endif /* GNUTLS_DANE_H */ diff --git a/m4/ax_ac_append_to_file.m4 b/m4/ax_ac_append_to_file.m4 new file mode 100644 index 0000000000..242b3d5200 --- /dev/null +++ b/m4/ax_ac_append_to_file.m4 @@ -0,0 +1,32 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_ac_append_to_file.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_AC_APPEND_TO_FILE([FILE],[DATA]) +# +# DESCRIPTION +# +# Appends the specified data to the specified Autoconf is run. If you want +# to append to a file when configure is run use AX_APPEND_TO_FILE instead. +# +# LICENSE +# +# Copyright (c) 2009 Allan Caffee +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 10 + +AC_DEFUN([AX_AC_APPEND_TO_FILE],[ +AC_REQUIRE([AX_FILE_ESCAPES]) +m4_esyscmd( +AX_FILE_ESCAPES +[ +printf "%s" "$2" >> "$1" +]) +]) diff --git a/m4/ax_ac_print_to_file.m4 b/m4/ax_ac_print_to_file.m4 new file mode 100644 index 0000000000..642dfc1511 --- /dev/null +++ b/m4/ax_ac_print_to_file.m4 @@ -0,0 +1,32 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_ac_print_to_file.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_AC_PRINT_TO_FILE([FILE],[DATA]) +# +# DESCRIPTION +# +# Writes the specified data to the specified file when Autoconf is run. If +# you want to print to a file when configure is run use AX_PRINT_TO_FILE +# instead. +# +# LICENSE +# +# Copyright (c) 2009 Allan Caffee +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 10 + +AC_DEFUN([AX_AC_PRINT_TO_FILE],[ +m4_esyscmd( +AC_REQUIRE([AX_FILE_ESCAPES]) +[ +printf "%s" "$2" > "$1" +]) +]) diff --git a/m4/ax_add_am_macro_static.m4 b/m4/ax_add_am_macro_static.m4 new file mode 100644 index 0000000000..6442d24b7c --- /dev/null +++ b/m4/ax_add_am_macro_static.m4 @@ -0,0 +1,28 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_add_am_macro_static.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_ADD_AM_MACRO_STATIC([RULE]) +# +# DESCRIPTION +# +# Adds the specified rule to $AMINCLUDE. +# +# LICENSE +# +# Copyright (c) 2009 Tom Howard +# Copyright (c) 2009 Allan Caffee +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 8 + +AC_DEFUN([AX_ADD_AM_MACRO_STATIC],[ + AC_REQUIRE([AX_AM_MACROS_STATIC]) + AX_AC_APPEND_TO_FILE(AMINCLUDE_STATIC,[$1]) +]) diff --git a/m4/ax_am_macros_static.m4 b/m4/ax_am_macros_static.m4 new file mode 100644 index 0000000000..f4cee8c890 --- /dev/null +++ b/m4/ax_am_macros_static.m4 @@ -0,0 +1,38 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_am_macros_static.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_AM_MACROS_STATIC +# +# DESCRIPTION +# +# Adds support for macros that create Automake rules. You must manually +# add the following line +# +# include $(top_srcdir)/aminclude_static.am +# +# to your Makefile.am files. +# +# LICENSE +# +# Copyright (c) 2009 Tom Howard +# Copyright (c) 2009 Allan Caffee +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 11 + +AC_DEFUN([AMINCLUDE_STATIC],[aminclude_static.am]) + +AC_DEFUN([AX_AM_MACROS_STATIC], +[ +AX_AC_PRINT_TO_FILE(AMINCLUDE_STATIC,[ +# ]AMINCLUDE_STATIC[ generated automatically by Autoconf +# from AX_AM_MACROS_STATIC on ]m4_esyscmd([LC_ALL=C date])[ +]) +]) diff --git a/m4/ax_check_gnu_make.m4 b/m4/ax_check_gnu_make.m4 new file mode 100644 index 0000000000..68110439d9 --- /dev/null +++ b/m4/ax_check_gnu_make.m4 @@ -0,0 +1,95 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_gnu_make.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_GNU_MAKE([run-if-true],[run-if-false]) +# +# DESCRIPTION +# +# This macro searches for a GNU version of make. If a match is found: +# +# * The makefile variable `ifGNUmake' is set to the empty string, otherwise +# it is set to "#". This is useful for including a special features in a +# Makefile, which cannot be handled by other versions of make. +# * The makefile variable `ifnGNUmake' is set to #, otherwise +# it is set to the empty string. This is useful for including a special +# features in a Makefile, which can be handled +# by other versions of make or to specify else like clause. +# * The variable `_cv_gnu_make_command` is set to the command to invoke +# GNU make if it exists, the empty string otherwise. +# * The variable `ax_cv_gnu_make_command` is set to the command to invoke +# GNU make by copying `_cv_gnu_make_command`, otherwise it is unset. +# * If GNU Make is found, its version is extracted from the output of +# `make --version` as the last field of a record of space-separated +# columns and saved into the variable `ax_check_gnu_make_version`. +# * Additionally if GNU Make is found, run shell code run-if-true +# else run shell code run-if-false. +# +# Here is an example of its use: +# +# Makefile.in might contain: +# +# # A failsafe way of putting a dependency rule into a makefile +# $(DEPEND): +# $(CC) -MM $(srcdir)/*.c > $(DEPEND) +# +# @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND))) +# @ifGNUmake@ include $(DEPEND) +# @ifGNUmake@ else +# fallback code +# @ifGNUmake@ endif +# +# Then configure.in would normally contain: +# +# AX_CHECK_GNU_MAKE() +# AC_OUTPUT(Makefile) +# +# Then perhaps to cause gnu make to override any other make, we could do +# something like this (note that GNU make always looks for GNUmakefile +# first): +# +# if ! test x$_cv_gnu_make_command = x ; then +# mv Makefile GNUmakefile +# echo .DEFAULT: > Makefile ; +# echo \ $_cv_gnu_make_command \$@ >> Makefile; +# fi +# +# Then, if any (well almost any) other make is called, and GNU make also +# exists, then the other make wraps the GNU make. +# +# LICENSE +# +# Copyright (c) 2008 John Darrington +# Copyright (c) 2015 Enrico M. Crisostomo +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 11 + +AC_DEFUN([AX_CHECK_GNU_MAKE],dnl + [AC_PROG_AWK + AC_CACHE_CHECK([for GNU make],[_cv_gnu_make_command],[dnl + _cv_gnu_make_command="" ; +dnl Search all the common names for GNU make + for a in "$MAKE" make gmake gnumake ; do + if test -z "$a" ; then continue ; fi ; + if "$a" --version 2> /dev/null | grep GNU 2>&1 > /dev/null ; then + _cv_gnu_make_command=$a ; + AX_CHECK_GNU_MAKE_HEADLINE=$("$a" --version 2> /dev/null | grep "GNU Make") + ax_check_gnu_make_version=$(echo ${AX_CHECK_GNU_MAKE_HEADLINE} | ${AWK} -F " " '{ print $(NF); }') + break ; + fi + done ;]) +dnl If there was a GNU version, then set @ifGNUmake@ to the empty string, '#' otherwise + AS_VAR_IF([_cv_gnu_make_command], [""], [AS_VAR_SET([ifGNUmake], ["#"])], [AS_VAR_SET([ifGNUmake], [""])]) + AS_VAR_IF([_cv_gnu_make_command], [""], [AS_VAR_SET([ifnGNUmake], [""])], [AS_VAR_SET([ifGNUmake], ["#"])]) + AS_VAR_IF([_cv_gnu_make_command], [""], [AS_UNSET(ax_cv_gnu_make_command)], [AS_VAR_SET([ax_cv_gnu_make_command], [${_cv_gnu_make_command}])]) + AS_VAR_IF([_cv_gnu_make_command], [""],[$2],[$1]) + AC_SUBST([ifGNUmake]) + AC_SUBST([ifnGNUmake]) +]) diff --git a/m4/ax_code_coverage.m4 b/m4/ax_code_coverage.m4 index 0934a44c5e..3d36924b15 100644 --- a/m4/ax_code_coverage.m4 +++ b/m4/ax_code_coverage.m4 @@ -12,16 +12,16 @@ # CODE_COVERAGE_CXXFLAGS and CODE_COVERAGE_LIBS which should be included # in the CPPFLAGS, CFLAGS CXXFLAGS and LIBS/LIBADD variables of every # build target (program or library) which should be built with code -# coverage support. Also defines CODE_COVERAGE_RULES which should be -# substituted in your Makefile; and $enable_code_coverage which can be -# used in subsequent configure output. CODE_COVERAGE_ENABLED is defined -# and substituted, and corresponds to the value of the -# --enable-code-coverage option, which defaults to being disabled. +# coverage support. Also add rules using AX_ADD_AM_MACRO_STATIC; and +# $enable_code_coverage which can be used in subsequent configure output. +# CODE_COVERAGE_ENABLED is defined and substituted, and corresponds to the +# value of the --enable-code-coverage option, which defaults to being +# disabled. # # Test also for gcov program and create GCOV variable that could be # substituted. # -# Note that all optimisation flags in CFLAGS must be disabled when code +# Note that all optimization flags in CFLAGS must be disabled when code # coverage is enabled. # # Usage example: @@ -32,25 +32,24 @@ # # Makefile.am: # -# @CODE_COVERAGE_RULES@ +# include $(top_srcdir)/aminclude_static.am +# # my_program_LIBS = ... $(CODE_COVERAGE_LIBS) ... # my_program_CPPFLAGS = ... $(CODE_COVERAGE_CPPFLAGS) ... # my_program_CFLAGS = ... $(CODE_COVERAGE_CFLAGS) ... # my_program_CXXFLAGS = ... $(CODE_COVERAGE_CXXFLAGS) ... # -# This results in a "check-code-coverage" rule being added to any -# Makefile.am which includes "@CODE_COVERAGE_RULES@" (assuming the module -# has been configured with --enable-code-coverage). Running `make -# check-code-coverage` in that directory will run the module's test suite -# (`make check`) and build a code coverage report detailing the code which -# was touched, then print the URI for the report. +# clean-local: code-coverage-clean +# distclean-local: code-coverage-dist-clean # -# In earlier versions of this macro, CODE_COVERAGE_LDFLAGS was defined -# instead of CODE_COVERAGE_LIBS. They are both still defined, but use of -# CODE_COVERAGE_LIBS is preferred for clarity; CODE_COVERAGE_LDFLAGS is -# deprecated. They have the same value. +# This results in a "check-code-coverage" rule being added to any +# Makefile.am which do "include $(top_srcdir)/aminclude_static.am" +# (assuming the module has been configured with --enable-code-coverage). +# Running `make check-code-coverage` in that directory will run the +# module's test suite (`make check`) and build a code coverage report +# detailing the code which was touched, then print the URI for the report. # -# This code was derived from Makefile.decl in GLib, originally licenced +# This code was derived from Makefile.decl in GLib, originally licensed # under LGPLv2.1+. # # LICENSE @@ -60,7 +59,7 @@ # Copyright (c) 2012 Christian Persch # Copyright (c) 2012 Paolo Borelli # Copyright (c) 2012 Dan Winship -# Copyright (c) 2015 Bastien ROUCARIES +# Copyright (c) 2015,2018 Bastien ROUCARIES # # This library is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by @@ -75,107 +74,22 @@ # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . -#serial 21 - -AC_DEFUN([AX_CODE_COVERAGE],[ - dnl Check for --enable-code-coverage - AC_REQUIRE([AC_PROG_SED]) - - # allow to override gcov location - AC_ARG_WITH([gcov], - [AS_HELP_STRING([--with-gcov[=GCOV]], [use given GCOV for coverage (GCOV=gcov).])], - [_AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov], - [_AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov]) - - AC_MSG_CHECKING([whether to build with code coverage support]) - AC_ARG_ENABLE([code-coverage], - AS_HELP_STRING([--enable-code-coverage], - [Whether to enable code coverage support]),, - enable_code_coverage=no) +#serial 32 - AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test x$enable_code_coverage = xyes]) - AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage]) - AC_MSG_RESULT($enable_code_coverage) - - AS_IF([ test "$enable_code_coverage" = "yes" ], [ - # check for gcov - AC_CHECK_TOOL([GCOV], - [$_AX_CODE_COVERAGE_GCOV_PROG_WITH], - [:]) - AS_IF([test "X$GCOV" = "X:"], - [AC_MSG_ERROR([gcov is needed to do coverage])]) - AC_SUBST([GCOV]) - - dnl Check if gcc is being used - AS_IF([ test "$GCC" = "no" ], [ - AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage]) - ]) - - AC_CHECK_PROG([LCOV], [lcov], [lcov]) - AC_CHECK_PROG([GENHTML], [genhtml], [genhtml]) - - AS_IF([ test -z "$LCOV" ], [ - AC_MSG_ERROR([To enable code coverage reporting you must have lcov installed]) - ]) - - AS_IF([ test -z "$GENHTML" ], [ - AC_MSG_ERROR([Could not find genhtml from the lcov package]) - ]) - - dnl Build the code coverage flags - dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility - CODE_COVERAGE_CPPFLAGS="-DNDEBUG" - CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" - CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" - CODE_COVERAGE_LIBS="-lgcov" - CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS" - - AC_SUBST([CODE_COVERAGE_CPPFLAGS]) - AC_SUBST([CODE_COVERAGE_CFLAGS]) - AC_SUBST([CODE_COVERAGE_CXXFLAGS]) - AC_SUBST([CODE_COVERAGE_LIBS]) - AC_SUBST([CODE_COVERAGE_LDFLAGS]) - - [CODE_COVERAGE_RULES_CHECK=' - -$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check - $(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture -'] - [CODE_COVERAGE_RULES_CAPTURE=' - $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS) - $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS) - -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp - $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS) - @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html" -'] - [CODE_COVERAGE_RULES_CLEAN=' -clean: code-coverage-clean -distclean: code-coverage-clean -code-coverage-clean: - -$(LCOV) --directory $(top_builddir) -z - -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY) - -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete -'] - ], [ - [CODE_COVERAGE_RULES_CHECK=' - @echo "Need to reconfigure with --enable-code-coverage" -'] - CODE_COVERAGE_RULES_CAPTURE="$CODE_COVERAGE_RULES_CHECK" - CODE_COVERAGE_RULES_CLEAN='' - ]) - -[CODE_COVERAGE_RULES=' +m4_define(_AX_CODE_COVERAGE_RULES,[ +AX_ADD_AM_MACRO_STATIC([ # Code coverage # # Optional: # - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting. # Multiple directories may be specified, separated by whitespace. -# (Default: $(top_builddir)) +# (Default: \$(top_builddir)) # - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated # by lcov for code coverage. (Default: -# $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info) +# \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage.info) # - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage # reports to be created. (Default: -# $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage) +# \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage) # - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage, # set to 0 to disable it and leave empty to stay with the default. # (Default: empty) @@ -198,67 +112,161 @@ code-coverage-clean: # instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) # - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore # -# The generated report will be titled using the $(PACKAGE_NAME) and -# $(PACKAGE_VERSION). In order to add the current git hash to the title, +# The generated report will be titled using the \$(PACKAGE_NAME) and +# \$(PACKAGE_VERSION). In order to add the current git hash to the title, # use the git-version-gen script, available online. - # Optional variables -CODE_COVERAGE_DIRECTORY ?= $(top_builddir) -CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info -CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage +# run only on top dir +if CODE_COVERAGE_ENABLED + ifeq (\$(abs_builddir), \$(abs_top_builddir)) +CODE_COVERAGE_DIRECTORY ?= \$(top_builddir) +CODE_COVERAGE_OUTPUT_FILE ?= \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage.info +CODE_COVERAGE_OUTPUT_DIRECTORY ?= \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage + CODE_COVERAGE_BRANCH_COVERAGE ?= -CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\ ---rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) -CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) -CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)" -CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) -CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) +CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= \$(if \$(CODE_COVERAGE_BRANCH_COVERAGE),\ +--rc lcov_branch_coverage=\$(CODE_COVERAGE_BRANCH_COVERAGE)) +CODE_COVERAGE_LCOV_SHOPTS ?= \$(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) +CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool \"\$(GCOV)\" +CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= \$(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) +CODE_COVERAGE_LCOV_OPTIONS ?= \$(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?= -CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) +CODE_COVERAGE_LCOV_RMOPTS ?= \$(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\ -$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\ ---rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) -CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULTS) +\$(if \$(CODE_COVERAGE_BRANCH_COVERAGE),\ +--rc genhtml_branch_coverage=\$(CODE_COVERAGE_BRANCH_COVERAGE)) +CODE_COVERAGE_GENHTML_OPTIONS ?= \$(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) CODE_COVERAGE_IGNORE_PATTERN ?= -code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V)) -code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY)) -code_coverage_v_lcov_cap_0 = @echo " LCOV --capture"\ - $(CODE_COVERAGE_OUTPUT_FILE); -code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V)) -code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY)) -code_coverage_v_lcov_ign_0 = @echo " LCOV --remove /tmp/*"\ - $(CODE_COVERAGE_IGNORE_PATTERN); -code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V)) -code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY)) -code_coverage_v_genhtml_0 = @echo " GEN " $(CODE_COVERAGE_OUTPUT_DIRECTORY); -code_coverage_quiet = $(code_coverage_quiet_$(V)) -code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY)) +GITIGNOREFILES = \$(GITIGNOREFILES) \$(CODE_COVERAGE_OUTPUT_FILE) \$(CODE_COVERAGE_OUTPUT_DIRECTORY) +code_coverage_v_lcov_cap = \$(code_coverage_v_lcov_cap_\$(V)) +code_coverage_v_lcov_cap_ = \$(code_coverage_v_lcov_cap_\$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_lcov_cap_0 = @echo \" LCOV --capture\" \$(CODE_COVERAGE_OUTPUT_FILE); +code_coverage_v_lcov_ign = \$(code_coverage_v_lcov_ign_\$(V)) +code_coverage_v_lcov_ign_ = \$(code_coverage_v_lcov_ign_\$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_lcov_ign_0 = @echo \" LCOV --remove /tmp/*\" \$(CODE_COVERAGE_IGNORE_PATTERN); +code_coverage_v_genhtml = \$(code_coverage_v_genhtml_\$(V)) +code_coverage_v_genhtml_ = \$(code_coverage_v_genhtml_\$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_genhtml_0 = @echo \" GEN \" \"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\"; +code_coverage_quiet = \$(code_coverage_quiet_\$(V)) +code_coverage_quiet_ = \$(code_coverage_quiet_\$(AM_DEFAULT_VERBOSITY)) code_coverage_quiet_0 = --quiet # sanitizes the test-name: replaces with underscores: dashes and dots -code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1))) +code_coverage_sanitize = \$(subst -,_,\$(subst .,_,\$(1))) # Use recursive makes in order to ignore errors during check -check-code-coverage:'"$CODE_COVERAGE_RULES_CHECK"' +check-code-coverage: + -\$(AM_V_at)\$(MAKE) \$(AM_MAKEFLAGS) -k check + \$(AM_V_at)\$(MAKE) \$(AM_MAKEFLAGS) code-coverage-capture # Capture code coverage data -code-coverage-capture: code-coverage-capture-hook'"$CODE_COVERAGE_RULES_CAPTURE"' +code-coverage-capture: code-coverage-capture-hook + \$(code_coverage_v_lcov_cap)\$(LCOV) \$(code_coverage_quiet) \$(addprefix --directory ,\$(CODE_COVERAGE_DIRECTORY)) --capture --output-file \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" --test-name \"\$(call code_coverage_sanitize,\$(PACKAGE_NAME)-\$(PACKAGE_VERSION))\" --no-checksum --compat-libtool \$(CODE_COVERAGE_LCOV_SHOPTS) \$(CODE_COVERAGE_LCOV_OPTIONS) + \$(code_coverage_v_lcov_ign)\$(LCOV) \$(code_coverage_quiet) \$(addprefix --directory ,\$(CODE_COVERAGE_DIRECTORY)) --remove \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" \"/tmp/*\" \$(CODE_COVERAGE_IGNORE_PATTERN) --output-file \"\$(CODE_COVERAGE_OUTPUT_FILE)\" \$(CODE_COVERAGE_LCOV_SHOPTS) \$(CODE_COVERAGE_LCOV_RMOPTS) + -@rm -f \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" + \$(code_coverage_v_genhtml)LANG=C \$(GENHTML) \$(code_coverage_quiet) \$(addprefix --prefix ,\$(CODE_COVERAGE_DIRECTORY)) --output-directory \"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\" --title \"\$(PACKAGE_NAME)-\$(PACKAGE_VERSION) Code Coverage\" --legend --show-details \"\$(CODE_COVERAGE_OUTPUT_FILE)\" \$(CODE_COVERAGE_GENHTML_OPTIONS) + @echo \"file://\$(abs_builddir)/\$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html\" + +code-coverage-clean: + -\$(LCOV) --directory \$(top_builddir) -z + -rm -rf \"\$(CODE_COVERAGE_OUTPUT_FILE)\" \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" \"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\" + -find . \\( -name \"*.gcda\" -o -name \"*.gcno\" -o -name \"*.gcov\" \\) -delete + +code-coverage-dist-clean: + +A][M_DISTCHECK_CONFIGURE_FLAGS = \$(A][M_DISTCHECK_CONFIGURE_FLAGS) --disable-code-coverage + else # ifneq (\$(abs_builddir), \$(abs_top_builddir)) +check-code-coverage: +code-coverage-capture: code-coverage-capture-hook + +code-coverage-clean: + +code-coverage-dist-clean: + endif # ifeq (\$(abs_builddir), \$(abs_top_builddir)) +else #! CODE_COVERAGE_ENABLED +# Use recursive makes in order to ignore errors during check +check-code-coverage: + @echo \"Need to reconfigure with --enable-code-coverage\" +# Capture code coverage data +code-coverage-capture: code-coverage-capture-hook + @echo \"Need to reconfigure with --enable-code-coverage\" + +code-coverage-clean: + +code-coverage-dist-clean: + +endif #CODE_COVERAGE_ENABLED # Hook rule executed before code-coverage-capture, overridable by the user code-coverage-capture-hook: -'"$CODE_COVERAGE_RULES_CLEAN"' +.PHONY: check-code-coverage code-coverage-capture code-coverage-dist-clean code-coverage-clean code-coverage-capture-hook +]) +]) + +AC_DEFUN([_AX_CODE_COVERAGE_ENABLED],[ + AX_CHECK_GNU_MAKE([],[AC_MSG_ERROR([not using GNU make that is needed for coverage])]) + AC_REQUIRE([AX_ADD_AM_MACRO_STATIC]) + # check for gcov + AC_CHECK_TOOL([GCOV], + [$_AX_CODE_COVERAGE_GCOV_PROG_WITH], + [:]) + AS_IF([test "X$GCOV" = "X:"], + [AC_MSG_ERROR([gcov is needed to do coverage])]) + AC_SUBST([GCOV]) + + dnl Check if gcc is being used + AS_IF([ test "$GCC" = "no" ], [ + AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage]) + ]) + + AC_CHECK_PROG([LCOV], [lcov], [lcov]) + AC_CHECK_PROG([GENHTML], [genhtml], [genhtml]) + + AS_IF([ test x"$LCOV" = x ], [ + AC_MSG_ERROR([To enable code coverage reporting you must have lcov installed]) + ]) + + AS_IF([ test x"$GENHTML" = x ], [ + AC_MSG_ERROR([Could not find genhtml from the lcov package]) + ]) + + dnl Build the code coverage flags + dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility + CODE_COVERAGE_CPPFLAGS="-DNDEBUG" + CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" + CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" + CODE_COVERAGE_LIBS="-lgcov" + + AC_SUBST([CODE_COVERAGE_CPPFLAGS]) + AC_SUBST([CODE_COVERAGE_CFLAGS]) + AC_SUBST([CODE_COVERAGE_CXXFLAGS]) + AC_SUBST([CODE_COVERAGE_LIBS]) +]) -GITIGNOREFILES ?= -GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY) +AC_DEFUN([AX_CODE_COVERAGE],[ + dnl Check for --enable-code-coverage -A''M_DISTCHECK_CONFIGURE_FLAGS ?= -A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage + # allow to override gcov location + AC_ARG_WITH([gcov], + [AS_HELP_STRING([--with-gcov[=GCOV]], [use given GCOV for coverage (GCOV=gcov).])], + [_AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov], + [_AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov]) + + AC_MSG_CHECKING([whether to build with code coverage support]) + AC_ARG_ENABLE([code-coverage], + AS_HELP_STRING([--enable-code-coverage], + [Whether to enable code coverage support]),, + enable_code_coverage=no) + + AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test "x$enable_code_coverage" = xyes]) + AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage]) + AC_MSG_RESULT($enable_code_coverage) -.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean -'] + AS_IF([ test "x$enable_code_coverage" = xyes ], [ + _AX_CODE_COVERAGE_ENABLED + ]) - AC_SUBST([CODE_COVERAGE_RULES]) - m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([CODE_COVERAGE_RULES])]) + _AX_CODE_COVERAGE_RULES ]) diff --git a/m4/ax_file_escapes.m4 b/m4/ax_file_escapes.m4 new file mode 100644 index 0000000000..a86fdc326b --- /dev/null +++ b/m4/ax_file_escapes.m4 @@ -0,0 +1,30 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_file_escapes.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_FILE_ESCAPES +# +# DESCRIPTION +# +# Writes the specified data to the specified file. +# +# LICENSE +# +# Copyright (c) 2008 Tom Howard +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 8 + +AC_DEFUN([AX_FILE_ESCAPES],[ +AX_DOLLAR="\$" +AX_SRB="\\135" +AX_SLB="\\133" +AX_BS="\\\\" +AX_DQ="\"" +]) diff --git a/m4/gcc.m4 b/m4/gcc.m4 deleted file mode 100644 index c01694285b..0000000000 --- a/m4/gcc.m4 +++ /dev/null @@ -1,28 +0,0 @@ -# gcc.m4 serial 2 -dnl Copyright (C) 2008-2012 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Based on code by Simon Josefsson - -# GCC_FLAG_ADD(PARAMETER, [ACTION]) -# ------------------------------------------------ -# Adds parameter to CFLAGS if the compiler supports it. For example, -# GCC_FLAG_ADD([-maes], [VAR]). -AC_DEFUN([GCC_FLAG_ADD], -[AS_VAR_PUSHDEF([GCC_FLAG], [gl_cv_GCC_FLAG_$1])dnl -AC_CACHE_CHECK([whether compiler handles $1], [GCC_FLAG], [ - save_CFLAGS="$CFLAGS" - CFLAGS="${CFLAGS} $1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], - [AS_VAR_SET([GCC_FLAG], [yes])], - [AS_VAR_SET([GCC_FLAG], [no])]) - CFLAGS="$save_CFLAGS" -]) -AS_VAR_IF([GCC_FLAG], [yes], [ -m4_ifval([$2], [AC_SUBST([$2],[yes])]) -CFLAGS="${CFLAGS} $1" -])dnl -AS_VAR_POPDEF([GCC_FLAG]) -]) diff --git a/m4/gettext.m4 b/m4/gettext.m4 deleted file mode 100644 index eef5073b32..0000000000 --- a/m4/gettext.m4 +++ /dev/null @@ -1,420 +0,0 @@ -# gettext.m4 serial 68 (gettext-0.19.8) -dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2006, 2008-2010. - -dnl Macro to add for using GNU gettext. - -dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). -dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The -dnl default (if it is not specified or empty) is 'no-libtool'. -dnl INTLSYMBOL should be 'external' for packages with no intl directory, -dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. -dnl If INTLSYMBOL is 'use-libtool', then a libtool library -dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, -dnl depending on --{enable,disable}-{shared,static} and on the presence of -dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library -dnl $(top_builddir)/intl/libintl.a will be created. -dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext -dnl implementations (in libc or libintl) without the ngettext() function -dnl will be ignored. If NEEDSYMBOL is specified and is -dnl 'need-formatstring-macros', then GNU gettext implementations that don't -dnl support the ISO C 99 formatstring macros will be ignored. -dnl INTLDIR is used to find the intl libraries. If empty, -dnl the value '$(top_builddir)/intl/' is used. -dnl -dnl The result of the configuration is one of three cases: -dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled -dnl and used. -dnl Catalog format: GNU --> install in $(datadir) -dnl Catalog extension: .mo after installation, .gmo in source tree -dnl 2) GNU gettext has been found in the system's C library. -dnl Catalog format: GNU --> install in $(datadir) -dnl Catalog extension: .mo after installation, .gmo in source tree -dnl 3) No internationalization, always use English msgid. -dnl Catalog format: none -dnl Catalog extension: none -dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. -dnl The use of .gmo is historical (it was needed to avoid overwriting the -dnl GNU format catalogs when building on a platform with an X/Open gettext), -dnl but we keep it in order not to force irrelevant filename changes on the -dnl maintainers. -dnl -AC_DEFUN([AM_GNU_GETTEXT], -[ - dnl Argument checking. - ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , - [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT -])])])])]) - ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], - [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) - ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , - [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT -])])])]) - define([gt_included_intl], - ifelse([$1], [external], - ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), - [yes])) - define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) - gt_NEEDS_INIT - AM_GNU_GETTEXT_NEED([$2]) - - AC_REQUIRE([AM_PO_SUBDIRS])dnl - ifelse(gt_included_intl, yes, [ - AC_REQUIRE([AM_INTL_SUBDIR])dnl - ]) - - dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - AC_REQUIRE([AC_LIB_RPATH]) - - dnl Sometimes libintl requires libiconv, so first search for libiconv. - dnl Ideally we would do this search only after the - dnl if test "$USE_NLS" = "yes"; then - dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then - dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT - dnl the configure script would need to contain the same shell code - dnl again, outside any 'if'. There are two solutions: - dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. - dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. - dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not - dnl documented, we avoid it. - ifelse(gt_included_intl, yes, , [ - AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) - ]) - - dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. - gt_INTL_MACOSX - - dnl Set USE_NLS. - AC_REQUIRE([AM_NLS]) - - ifelse(gt_included_intl, yes, [ - BUILD_INCLUDED_LIBINTL=no - USE_INCLUDED_LIBINTL=no - ]) - LIBINTL= - LTLIBINTL= - POSUB= - - dnl Add a version number to the cache macros. - case " $gt_needs " in - *" need-formatstring-macros "*) gt_api_version=3 ;; - *" need-ngettext "*) gt_api_version=2 ;; - *) gt_api_version=1 ;; - esac - gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" - gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" - - dnl If we use NLS figure out what method - if test "$USE_NLS" = "yes"; then - gt_use_preinstalled_gnugettext=no - ifelse(gt_included_intl, yes, [ - AC_MSG_CHECKING([whether included gettext is requested]) - AC_ARG_WITH([included-gettext], - [ --with-included-gettext use the GNU gettext library included here], - nls_cv_force_use_gnu_gettext=$withval, - nls_cv_force_use_gnu_gettext=no) - AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) - - nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" - if test "$nls_cv_force_use_gnu_gettext" != "yes"; then - ]) - dnl User does not insist on using GNU NLS library. Figure out what - dnl to use. If GNU gettext is available we use this. Else we have - dnl to fall back to GNU NLS library. - - if test $gt_api_version -ge 3; then - gt_revision_test_code=' -#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) -#endif -changequote(,)dnl -typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; -changequote([,])dnl -' - else - gt_revision_test_code= - fi - if test $gt_api_version -ge 2; then - gt_expression_test_code=' + * ngettext ("", "", 0)' - else - gt_expression_test_code= - fi - - AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], - [AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -extern int _nl_msg_cat_cntr; -extern int *_nl_domain_bindings; -#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) -#else -#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 -#endif -$gt_revision_test_code - ]], - [[ -bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION - ]])], - [eval "$gt_func_gnugettext_libc=yes"], - [eval "$gt_func_gnugettext_libc=no"])]) - - if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then - dnl Sometimes libintl requires libiconv, so first search for libiconv. - ifelse(gt_included_intl, yes, , [ - AM_ICONV_LINK - ]) - dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL - dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) - dnl because that would add "-liconv" to LIBINTL and LTLIBINTL - dnl even if libiconv doesn't exist. - AC_LIB_LINKFLAGS_BODY([intl]) - AC_CACHE_CHECK([for GNU gettext in libintl], - [$gt_func_gnugettext_libintl], - [gt_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $INCINTL" - gt_save_LIBS="$LIBS" - LIBS="$LIBS $LIBINTL" - dnl Now see whether libintl exists and does not depend on libiconv. - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -extern int _nl_msg_cat_cntr; -extern -#ifdef __cplusplus -"C" -#endif -const char *_nl_expand_alias (const char *); -#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) -#else -#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 -#endif -$gt_revision_test_code - ]], - [[ -bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION - ]])], - [eval "$gt_func_gnugettext_libintl=yes"], - [eval "$gt_func_gnugettext_libintl=no"]) - dnl Now see whether libintl exists and depends on libiconv. - if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then - LIBS="$LIBS $LIBICONV" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#ifndef __GNU_GETTEXT_SUPPORTED_REVISION -extern int _nl_msg_cat_cntr; -extern -#ifdef __cplusplus -"C" -#endif -const char *_nl_expand_alias (const char *); -#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) -#else -#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 -#endif -$gt_revision_test_code - ]], - [[ -bindtextdomain ("", ""); -return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION - ]])], - [LIBINTL="$LIBINTL $LIBICONV" - LTLIBINTL="$LTLIBINTL $LTLIBICONV" - eval "$gt_func_gnugettext_libintl=yes" - ]) - fi - CPPFLAGS="$gt_save_CPPFLAGS" - LIBS="$gt_save_LIBS"]) - fi - - dnl If an already present or preinstalled GNU gettext() is found, - dnl use it. But if this macro is used in GNU gettext, and GNU - dnl gettext is already preinstalled in libintl, we update this - dnl libintl. (Cf. the install rule in intl/Makefile.in.) - if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ - || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ - && test "$PACKAGE" != gettext-runtime \ - && test "$PACKAGE" != gettext-tools; }; then - gt_use_preinstalled_gnugettext=yes - else - dnl Reset the values set by searching for libintl. - LIBINTL= - LTLIBINTL= - INCINTL= - fi - - ifelse(gt_included_intl, yes, [ - if test "$gt_use_preinstalled_gnugettext" != "yes"; then - dnl GNU gettext is not found in the C library. - dnl Fall back on included GNU gettext library. - nls_cv_use_gnu_gettext=yes - fi - fi - - if test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Mark actions used to generate GNU NLS library. - BUILD_INCLUDED_LIBINTL=yes - USE_INCLUDED_LIBINTL=yes - LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" - LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" - LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` - fi - - CATOBJEXT= - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Mark actions to use GNU gettext tools. - CATOBJEXT=.gmo - fi - ]) - - if test -n "$INTL_MACOSX_LIBS"; then - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - dnl Some extra flags are needed during linking. - LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" - LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" - fi - fi - - if test "$gt_use_preinstalled_gnugettext" = "yes" \ - || test "$nls_cv_use_gnu_gettext" = "yes"; then - AC_DEFINE([ENABLE_NLS], [1], - [Define to 1 if translation of program messages to the user's native language - is requested.]) - else - USE_NLS=no - fi - fi - - AC_MSG_CHECKING([whether to use NLS]) - AC_MSG_RESULT([$USE_NLS]) - if test "$USE_NLS" = "yes"; then - AC_MSG_CHECKING([where the gettext function comes from]) - if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then - gt_source="external libintl" - else - gt_source="libc" - fi - else - gt_source="included intl directory" - fi - AC_MSG_RESULT([$gt_source]) - fi - - if test "$USE_NLS" = "yes"; then - - if test "$gt_use_preinstalled_gnugettext" = "yes"; then - if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then - AC_MSG_CHECKING([how to link with libintl]) - AC_MSG_RESULT([$LIBINTL]) - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) - fi - - dnl For backward compatibility. Some packages may be using this. - AC_DEFINE([HAVE_GETTEXT], [1], - [Define if the GNU gettext() function is already present or preinstalled.]) - AC_DEFINE([HAVE_DCGETTEXT], [1], - [Define if the GNU dcgettext() function is already present or preinstalled.]) - fi - - dnl We need to process the po/ directory. - POSUB=po - fi - - ifelse(gt_included_intl, yes, [ - dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL - dnl to 'yes' because some of the testsuite requires it. - if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then - BUILD_INCLUDED_LIBINTL=yes - fi - - dnl Make all variables we use known to autoconf. - AC_SUBST([BUILD_INCLUDED_LIBINTL]) - AC_SUBST([USE_INCLUDED_LIBINTL]) - AC_SUBST([CATOBJEXT]) - - dnl For backward compatibility. Some configure.ins may be using this. - nls_cv_header_intl= - nls_cv_header_libgt= - - dnl For backward compatibility. Some Makefiles may be using this. - DATADIRNAME=share - AC_SUBST([DATADIRNAME]) - - dnl For backward compatibility. Some Makefiles may be using this. - INSTOBJEXT=.mo - AC_SUBST([INSTOBJEXT]) - - dnl For backward compatibility. Some Makefiles may be using this. - GENCAT=gencat - AC_SUBST([GENCAT]) - - dnl For backward compatibility. Some Makefiles may be using this. - INTLOBJS= - if test "$USE_INCLUDED_LIBINTL" = yes; then - INTLOBJS="\$(GETTOBJS)" - fi - AC_SUBST([INTLOBJS]) - - dnl Enable libtool support if the surrounding package wishes it. - INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix - AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) - ]) - - dnl For backward compatibility. Some Makefiles may be using this. - INTLLIBS="$LIBINTL" - AC_SUBST([INTLLIBS]) - - dnl Make all documented variables known to autoconf. - AC_SUBST([LIBINTL]) - AC_SUBST([LTLIBINTL]) - AC_SUBST([POSUB]) -]) - - -dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. -m4_define([gt_NEEDS_INIT], -[ - m4_divert_text([DEFAULTS], [gt_needs=]) - m4_define([gt_NEEDS_INIT], []) -]) - - -dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) -AC_DEFUN([AM_GNU_GETTEXT_NEED], -[ - m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) -]) - - -dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) -AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) - - -dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) -AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) diff --git a/m4/gtk-doc.m4 b/m4/gtk-doc.m4 deleted file mode 100644 index 2cfa1e7178..0000000000 --- a/m4/gtk-doc.m4 +++ /dev/null @@ -1,61 +0,0 @@ -dnl -*- mode: autoconf -*- - -# serial 1 - -dnl Usage: -dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) -AC_DEFUN([GTK_DOC_CHECK], -[ - AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first - AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first - - dnl check for tools we added during development - AC_PATH_PROG([GTKDOC_CHECK],[gtkdoc-check]) - AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true]) - AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf]) - - dnl for overriding the documentation installation directory - AC_ARG_WITH([html-dir], - AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),, - [with_html_dir='${datadir}/gtk-doc/html']) - HTML_DIR="$with_html_dir" - AC_SUBST([HTML_DIR]) - - dnl enable/disable documentation building - AC_ARG_ENABLE([gtk-doc], - AS_HELP_STRING([--enable-gtk-doc], - [use gtk-doc to build documentation [[default=no]]]),, - [enable_gtk_doc=no]) - - if test x$enable_gtk_doc = xyes; then - ifelse([$1],[], - [PKG_CHECK_EXISTS([gtk-doc],, - AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))], - [PKG_CHECK_EXISTS([gtk-doc >= $1],, - AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build $PACKAGE_NAME]))]) - fi - - AC_MSG_CHECKING([whether to build gtk-doc documentation]) - AC_MSG_RESULT($enable_gtk_doc) - - dnl enable/disable output formats - AC_ARG_ENABLE([gtk-doc-html], - AS_HELP_STRING([--enable-gtk-doc-html], - [build documentation in html format [[default=yes]]]),, - [enable_gtk_doc_html=yes]) - AC_ARG_ENABLE([gtk-doc-pdf], - AS_HELP_STRING([--enable-gtk-doc-pdf], - [build documentation in pdf format [[default=no]]]),, - [enable_gtk_doc_pdf=no]) - - if test -z "$GTKDOC_MKPDF"; then - enable_gtk_doc_pdf=no - fi - - - AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes]) - AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) - AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) - AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) - AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) -]) diff --git a/m4/guile.m4 b/m4/guile.m4 index eb6878b777..89823e9c38 100644 --- a/m4/guile.m4 +++ b/m4/guile.m4 @@ -1,28 +1,31 @@ ## Autoconf macros for working with Guile. ## -## Copyright (C) 1998, 2001, 2006, 2010, 2012 Free Software -## Foundation, Inc. +## Copyright (C) 1998,2001, 2006, 2010, 2012, 2013, 2014 Free Software Foundation, Inc. ## ## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public -## License as published by the Free Software Foundation; either -## version 2.1 of the License, or (at your option) any later version. -## +## modify it under the terms of the GNU Lesser General Public License +## as published by the Free Software Foundation; either version 3 of +## the License, or (at your option) any later version. +## ## This library is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## Lesser General Public License for more details. -## +## ## You should have received a copy of the GNU Lesser General Public ## License along with this library; if not, write to the Free Software -## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301 USA + +# serial 10 ## Index ## ----- ## +## GUILE_PKG -- find Guile development files ## GUILE_PROGS -- set paths to Guile interpreter, config and tool programs ## GUILE_FLAGS -- set flags for compiling and linking with Guile -## GUILE_SITE_DIR -- find path to Guile "site" directory +## GUILE_SITE_DIR -- find path to Guile "site" directories ## GUILE_CHECK -- evaluate Guile Scheme code and capture the return value ## GUILE_MODULE_CHECK -- check feature of a Guile Scheme module ## GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module @@ -36,79 +39,273 @@ ## NOTE: Comments preceding an AC_DEFUN (starting from "Usage:") are massaged ## into doc/ref/autoconf-macros.texi (see Makefile.am in that directory). -# GUILE_PROGS -- set paths to Guile interpreter, config and tool programs -# -# Usage: GUILE_PROGS -# -# This macro looks for programs @code{guile}, @code{guile-config} and -# @code{guile-tools}, and sets variables @var{GUILE}, @var{GUILE_CONFIG} and -# @var{GUILE_TOOLS}, to their paths, respectively. If either of the first two -# is not found, signal error. -# -# The variables are marked for substitution, as by @code{AC_SUBST}. -# -AC_DEFUN([GUILE_PROGS], - [AC_PATH_PROG(GUILE,guile) - if test "$GUILE" = "" ; then - AC_MSG_ERROR([guile required but not found]) +# GUILE_PKG -- find Guile development files +# +# Usage: GUILE_PKG([VERSIONS]) +# +# This macro runs the @code{pkg-config} tool to find development files +# for an available version of Guile. +# +# By default, this macro will search for the latest stable version of +# Guile (e.g. 2.2), falling back to the previous stable version +# (e.g. 2.0) if it is available. If no guile-@var{VERSION}.pc file is +# found, an error is signalled. The found version is stored in +# @var{GUILE_EFFECTIVE_VERSION}. +# +# If @code{GUILE_PROGS} was already invoked, this macro ensures that the +# development files have the same effective version as the Guile +# program. +# +# @var{GUILE_EFFECTIVE_VERSION} is marked for substitution, as by +# @code{AC_SUBST}. +# +AC_DEFUN([GUILE_PKG], + [PKG_PROG_PKG_CONFIG + _guile_versions_to_search="m4_default([$1], [2.2 2.0 1.8])" + if test -n "$GUILE_EFFECTIVE_VERSION"; then + _guile_tmp="" + for v in $_guile_versions_to_search; do + if test "$v" = "$GUILE_EFFECTIVE_VERSION"; then + _guile_tmp=$v + fi + done + if test -z "$_guile_tmp"; then + AC_MSG_FAILURE([searching for guile development files for versions $_guile_versions_to_search, but previously found $GUILE version $GUILE_EFFECTIVE_VERSION]) + fi + _guile_versions_to_search=$GUILE_EFFECTIVE_VERSION fi - AC_SUBST(GUILE) - AC_PATH_PROG(GUILE_CONFIG,guile-config) - if test "$GUILE_CONFIG" = "" ; then - AC_MSG_ERROR([guile-config required but not found]) + GUILE_EFFECTIVE_VERSION="" + _guile_errors="" + for v in $_guile_versions_to_search; do + if test -z "$GUILE_EFFECTIVE_VERSION"; then + AC_MSG_NOTICE([checking for guile $v]) + PKG_CHECK_EXISTS([guile-$v], [GUILE_EFFECTIVE_VERSION=$v], []) + fi + done + + if test -z "$GUILE_EFFECTIVE_VERSION"; then + AC_MSG_ERROR([ +No Guile development packages were found. + +Please verify that you have Guile installed. If you installed Guile +from a binary distribution, please verify that you have also installed +the development packages. If you installed it yourself, you might need +to adjust your PKG_CONFIG_PATH; see the pkg-config man page for more. +]) fi - AC_SUBST(GUILE_CONFIG) - AC_PATH_PROG(GUILE_TOOLS,guile-tools) - AC_SUBST(GUILE_TOOLS) + AC_MSG_NOTICE([found guile $GUILE_EFFECTIVE_VERSION]) + AC_SUBST([GUILE_EFFECTIVE_VERSION]) ]) # GUILE_FLAGS -- set flags for compiling and linking with Guile # # Usage: GUILE_FLAGS # -# This macro runs the @code{guile-config} script, installed with Guile, to -# find out where Guile's header files and libraries are installed. It sets -# two variables, @var{GUILE_CFLAGS} and @var{GUILE_LDFLAGS}. +# This macro runs the @code{pkg-config} tool to find out how to compile +# and link programs against Guile. It sets four variables: +# @var{GUILE_CFLAGS}, @var{GUILE_LDFLAGS}, @var{GUILE_LIBS}, and +# @var{GUILE_LTLIBS}. # # @var{GUILE_CFLAGS}: flags to pass to a C or C++ compiler to build code that -# uses Guile header files. This is almost always just a @code{-I} flag. -# -# @var{GUILE_LDFLAGS}: flags to pass to the linker to link a program against -# Guile. This includes @code{-lguile} for the Guile library itself, any -# libraries that Guile itself requires (like -lqthreads), and so on. It may -# also include a @code{-L} flag to tell the compiler where to find the -# libraries. +# uses Guile header files. This is almost always just one or more @code{-I} +# flags. +# +# @var{GUILE_LDFLAGS}: flags to pass to the compiler to link a program +# against Guile. This includes @code{-lguile-@var{VERSION}} for the +# Guile library itself, and may also include one or more @code{-L} flag +# to tell the compiler where to find the libraries. But it does not +# include flags that influence the program's runtime search path for +# libraries, and will therefore lead to a program that fails to start, +# unless all necessary libraries are installed in a standard location +# such as @file{/usr/lib}. +# +# @var{GUILE_LIBS} and @var{GUILE_LTLIBS}: flags to pass to the compiler or to +# libtool, respectively, to link a program against Guile. It includes flags +# that augment the program's runtime search path for libraries, so that shared +# libraries will be found at the location where they were during linking, even +# in non-standard locations. @var{GUILE_LIBS} is to be used when linking the +# program directly with the compiler, whereas @var{GUILE_LTLIBS} is to be used +# when linking the program is done through libtool. # # The variables are marked for substitution, as by @code{AC_SUBST}. # AC_DEFUN([GUILE_FLAGS], - [AC_REQUIRE([GUILE_PROGS])dnl - AC_MSG_CHECKING([libguile compile flags]) - GUILE_CFLAGS="`$GUILE_CONFIG compile`" - AC_MSG_RESULT([$GUILE_CFLAGS]) - AC_MSG_CHECKING([libguile link flags]) - GUILE_LDFLAGS="`$GUILE_CONFIG link`" - AC_MSG_RESULT([$GUILE_LDFLAGS]) - AC_SUBST(GUILE_CFLAGS) - AC_SUBST(GUILE_LDFLAGS) + [AC_REQUIRE([GUILE_PKG]) + PKG_CHECK_MODULES(GUILE, [guile-$GUILE_EFFECTIVE_VERSION]) + + dnl GUILE_CFLAGS and GUILE_LIBS are already defined and AC_SUBST'd by + dnl PKG_CHECK_MODULES. But GUILE_LIBS to pkg-config is GUILE_LDFLAGS + dnl to us. + + GUILE_LDFLAGS=$GUILE_LIBS + + dnl Determine the platform dependent parameters needed to use rpath. + dnl AC_LIB_LINKFLAGS_FROM_LIBS is defined in gnulib/m4/lib-link.m4 and needs + dnl the file gnulib/build-aux/config.rpath. + AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LIBS], [$GUILE_LDFLAGS], []) + GUILE_LIBS="$GUILE_LDFLAGS $GUILE_LIBS" + AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LTLIBS], [$GUILE_LDFLAGS], [yes]) + GUILE_LTLIBS="$GUILE_LDFLAGS $GUILE_LTLIBS" + + AC_SUBST([GUILE_EFFECTIVE_VERSION]) + AC_SUBST([GUILE_CFLAGS]) + AC_SUBST([GUILE_LDFLAGS]) + AC_SUBST([GUILE_LIBS]) + AC_SUBST([GUILE_LTLIBS]) ]) -# GUILE_SITE_DIR -- find path to Guile "site" directory +# GUILE_SITE_DIR -- find path to Guile site directories # # Usage: GUILE_SITE_DIR # -# This looks for Guile's "site" directory, usually something like -# PREFIX/share/guile/site, and sets var @var{GUILE_SITE} to the path. -# Note that the var name is different from the macro name. +# This looks for Guile's "site" directories. The variable @var{GUILE_SITE} will +# be set to Guile's "site" directory for Scheme source files (usually something +# like PREFIX/share/guile/site). @var{GUILE_SITE_CCACHE} will be set to the +# directory for compiled Scheme files also known as @code{.go} files +# (usually something like +# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/site-ccache). +# @var{GUILE_EXTENSION} will be set to the directory for compiled C extensions +# (usually something like +# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/extensions). The latter two +# are set to blank if the particular version of Guile does not support +# them. Note that this macro will run the macros @code{GUILE_PKG} and +# @code{GUILE_PROGS} if they have not already been run. # -# The variable is marked for substitution, as by @code{AC_SUBST}. +# The variables are marked for substitution, as by @code{AC_SUBST}. # AC_DEFUN([GUILE_SITE_DIR], - [AC_REQUIRE([GUILE_PROGS])dnl + [AC_REQUIRE([GUILE_PKG]) + AC_REQUIRE([GUILE_PROGS]) AC_MSG_CHECKING(for Guile site directory) - GUILE_SITE=`[$GUILE_CONFIG] info pkgdatadir`/site + GUILE_SITE=`$PKG_CONFIG --print-errors --variable=sitedir guile-$GUILE_EFFECTIVE_VERSION` AC_MSG_RESULT($GUILE_SITE) + if test "$GUILE_SITE" = ""; then + AC_MSG_FAILURE(sitedir not found) + fi AC_SUBST(GUILE_SITE) + AC_MSG_CHECKING([for Guile site-ccache directory using pkgconfig]) + GUILE_SITE_CCACHE=`$PKG_CONFIG --variable=siteccachedir guile-$GUILE_EFFECTIVE_VERSION` + if test "$GUILE_SITE_CCACHE" = ""; then + AC_MSG_RESULT(no) + AC_MSG_CHECKING([for Guile site-ccache directory using interpreter]) + GUILE_SITE_CCACHE=`$GUILE -c "(display (if (defined? '%site-ccache-dir) (%site-ccache-dir) \"\"))"` + if test $? != "0" -o "$GUILE_SITE_CCACHE" = ""; then + AC_MSG_RESULT(no) + GUILE_SITE_CCACHE="" + AC_MSG_WARN([siteccachedir not found]) + fi + fi + AC_MSG_RESULT($GUILE_SITE_CCACHE) + AC_SUBST([GUILE_SITE_CCACHE]) + AC_MSG_CHECKING(for Guile extensions directory) + GUILE_EXTENSION=`$PKG_CONFIG --print-errors --variable=extensiondir guile-$GUILE_EFFECTIVE_VERSION` + AC_MSG_RESULT($GUILE_EXTENSION) + if test "$GUILE_EXTENSION" = ""; then + GUILE_EXTENSION="" + AC_MSG_WARN(extensiondir not found) + fi + AC_SUBST(GUILE_EXTENSION) + ]) + +# GUILE_PROGS -- set paths to Guile interpreter, config and tool programs +# +# Usage: GUILE_PROGS([VERSION]) +# +# This macro looks for programs @code{guile} and @code{guild}, setting +# variables @var{GUILE} and @var{GUILD} to their paths, respectively. +# The macro will attempt to find @code{guile} with the suffix of +# @code{-X.Y}, followed by looking for it with the suffix @code{X.Y}, and +# then fall back to looking for @code{guile} with no suffix. If +# @code{guile} is still not found, signal an error. The suffix, if any, +# that was required to find @code{guile} will be used for @code{guild} +# as well. +# +# By default, this macro will search for the latest stable version of +# Guile (e.g. 2.2). x.y or x.y.z versions can be specified. If an older +# version is found, the macro will signal an error. +# +# The effective version of the found @code{guile} is set to +# @var{GUILE_EFFECTIVE_VERSION}. This macro ensures that the effective +# version is compatible with the result of a previous invocation of +# @code{GUILE_FLAGS}, if any. +# +# As a legacy interface, it also looks for @code{guile-config} and +# @code{guile-tools}, setting @var{GUILE_CONFIG} and @var{GUILE_TOOLS}. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_PROGS], + [_guile_required_version="m4_default([$1], [$GUILE_EFFECTIVE_VERSION])" + if test -z "$_guile_required_version"; then + _guile_required_version=2.2 + fi + + _guile_candidates=guile + _tmp= + for v in `echo "$_guile_required_version" | tr . ' '`; do + if test -n "$_tmp"; then _tmp=$_tmp.; fi + _tmp=$_tmp$v + _guile_candidates="guile-$_tmp guile$_tmp $_guile_candidates" + done + + AC_PATH_PROGS(GUILE,[$_guile_candidates]) + if test -z "$GUILE"; then + AC_MSG_ERROR([guile required but not found]) + fi + + _guile_suffix=`echo "$GUILE" | sed -e 's,^.*/guile\(.*\)$,\1,'` + _guile_effective_version=`$GUILE -c "(display (effective-version))"` + if test -z "$GUILE_EFFECTIVE_VERSION"; then + GUILE_EFFECTIVE_VERSION=$_guile_effective_version + elif test "$GUILE_EFFECTIVE_VERSION" != "$_guile_effective_version"; then + AC_MSG_ERROR([found development files for Guile $GUILE_EFFECTIVE_VERSION, but $GUILE has effective version $_guile_effective_version]) + fi + + _guile_major_version=`$GUILE -c "(display (major-version))"` + _guile_minor_version=`$GUILE -c "(display (minor-version))"` + _guile_micro_version=`$GUILE -c "(display (micro-version))"` + _guile_prog_version="$_guile_major_version.$_guile_minor_version.$_guile_micro_version" + + AC_MSG_CHECKING([for Guile version >= $_guile_required_version]) + _major_version=`echo $_guile_required_version | cut -d . -f 1` + _minor_version=`echo $_guile_required_version | cut -d . -f 2` + _micro_version=`echo $_guile_required_version | cut -d . -f 3` + if test "$_guile_major_version" -gt "$_major_version"; then + true + elif test "$_guile_major_version" -eq "$_major_version"; then + if test "$_guile_minor_version" -gt "$_minor_version"; then + true + elif test "$_guile_minor_version" -eq "$_minor_version"; then + if test -n "$_micro_version"; then + if test "$_guile_micro_version" -lt "$_micro_version"; then + AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) + fi + fi + elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then + # Allow prereleases that have the right effective version. + true + else + as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 + fi + elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then + # Allow prereleases that have the right effective version. + true + else + AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) + fi + AC_MSG_RESULT([$_guile_prog_version]) + + AC_PATH_PROG(GUILD,[guild$_guile_suffix]) + AC_SUBST(GUILD) + + AC_PATH_PROG(GUILE_CONFIG,[guile-config$_guile_suffix]) + AC_SUBST(GUILE_CONFIG) + if test -n "$GUILD"; then + GUILE_TOOLS=$GUILD + else + AC_PATH_PROG(GUILE_TOOLS,[guile-tools$_guile_suffix]) + fi + AC_SUBST(GUILE_TOOLS) ]) # GUILE_CHECK -- evaluate Guile Scheme code and capture the return value diff --git a/m4/hooks.m4 b/m4/hooks.m4 index c4e2cd9107..d0963f35cd 100644 --- a/m4/hooks.m4 +++ b/m4/hooks.m4 @@ -14,10 +14,8 @@ # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # -# You should have received a copy of the GNU Lesser General Public -# License along with GnuTLS; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -# MA 02110-1301, USA +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see AC_DEFUN([LIBGNUTLS_EXTRA_HOOKS], [ @@ -38,10 +36,13 @@ AC_DEFUN([LIBGNUTLS_HOOKS], # Library code modified: REVISION++ # Interfaces changed/added/removed: CURRENT++ REVISION=0 # Interfaces added: AGE++ + # + add new version symbol in libgnutls.map, see Symbol and library versioning + # in CONTRIBUTION.md for more info. + # # Interfaces removed: AGE=0 (+bump all symbol versions in .map) - AC_SUBST(LT_CURRENT, 53) + AC_SUBST(LT_CURRENT, 57) AC_SUBST(LT_REVISION, 0) - AC_SUBST(LT_AGE, 23) + AC_SUBST(LT_AGE, 27) AC_SUBST(LT_SSL_CURRENT, 27) AC_SUBST(LT_SSL_REVISION, 2) @@ -67,16 +68,17 @@ AC_DEFUN([LIBGNUTLS_HOOKS], DLL_SSL_VERSION=`expr ${LT_SSL_CURRENT} - ${LT_SSL_AGE}` AC_SUBST(DLL_SSL_VERSION) - PKG_CHECK_MODULES(NETTLE, [nettle >= 3.1], [cryptolib="nettle"], [ +NETTLE_MINIMUM=3.4.1 + PKG_CHECK_MODULES(NETTLE, [nettle >= $NETTLE_MINIMUM], [cryptolib="nettle"], [ AC_MSG_ERROR([[ - *** - *** Libnettle 3.1 was not found. + *** + *** Libnettle $NETTLE_MINIMUM was not found. ]]) ]) - PKG_CHECK_MODULES(HOGWEED, [hogweed >= 3.1], [], [ + PKG_CHECK_MODULES(HOGWEED, [hogweed >= $NETTLE_MINIMUM ], [], [ AC_MSG_ERROR([[ - *** - *** Libhogweed (nettle's companion library) was not found. Note that you must compile nettle with gmp support. + *** + *** Libhogweed (nettle's companion library) $NETTLE_MINIMUM was not found. Note that you must compile nettle with gmp support. ]]) ]) AM_CONDITIONAL(ENABLE_NETTLE, test "$cryptolib" = "nettle") @@ -114,7 +116,7 @@ LIBTASN1_MINIMUM=4.9 PKG_CHECK_MODULES(LIBTASN1, [libtasn1 >= $LIBTASN1_MINIMUM], [], [included_libtasn1=yes]) if test "$included_libtasn1" = yes; then AC_MSG_ERROR([[ - *** + *** *** Libtasn1 $LIBTASN1_MINIMUM was not found. To use the included one, use --with-included-libtasn1 ]]) fi @@ -130,7 +132,7 @@ LIBTASN1_MINIMUM=4.9 AC_MSG_CHECKING([whether C99 macros are supported]) AC_TRY_COMPILE(, [ - #define test_mac(...) + #define test_mac(...) int z,y,x; test_mac(x,y,z); return 0; @@ -142,11 +144,25 @@ LIBTASN1_MINIMUM=4.9 AC_MSG_WARN([C99 macros not supported. This may affect compiling.]) ]) + ac_strict_der_time=yes + AC_MSG_CHECKING([whether to disable strict DER time encodings for backwards compatibility]) + AC_ARG_ENABLE(strict-der-time, + AS_HELP_STRING([--disable-strict-der-time], + [allow non compliant DER time values]), + ac_strict_der_time=$enableval) + if test x$ac_strict_der_time != xno; then + AC_MSG_RESULT(no) + AC_DEFINE([STRICT_DER_TIME], 1, [force strict DER time constraints]) + else + AC_MSG_RESULT(yes) + fi + AM_CONDITIONAL(STRICT_DER_TIME, test "$ac_strict_der_time" != "no") + ac_allow_sha1=no - AC_MSG_CHECKING([whether to allow SHA1 as an acceptable hash for digital signatures]) + AC_MSG_CHECKING([whether to allow SHA1 as an acceptable hash for cert digital signatures]) AC_ARG_ENABLE(sha1-support, AS_HELP_STRING([--enable-sha1-support], - [allow SHA1 as an acceptable hash for digital signatures]), + [allow SHA1 as an acceptable hash for cert digital signatures]), ac_allow_sha1=$enableval) if test x$ac_allow_sha1 != xno; then AC_MSG_RESULT(no) @@ -156,11 +172,11 @@ LIBTASN1_MINIMUM=4.9 fi AM_CONDITIONAL(ALLOW_SHA1, test "$ac_allow_sha1" != "no") - ac_enable_ssl3=yes + ac_enable_ssl3=no AC_MSG_CHECKING([whether to disable the SSL 3.0 protocol]) AC_ARG_ENABLE(ssl3-support, - AS_HELP_STRING([--disable-ssl3-support], - [disable support for the SSL 3.0 protocol]), + AS_HELP_STRING([--enable-ssl3-support], + [enable support for the SSL 3.0 protocol]), ac_enable_ssl3=$enableval) if test x$ac_enable_ssl3 != xno; then AC_MSG_RESULT(no) @@ -169,6 +185,7 @@ LIBTASN1_MINIMUM=4.9 ac_full=0 AC_MSG_RESULT(yes) fi + AM_CONDITIONAL(ENABLE_SSL3, test "$ac_enable_ssl3" != "no") ac_enable_ssl2=yes @@ -184,7 +201,7 @@ LIBTASN1_MINIMUM=4.9 ac_full=0 AC_MSG_RESULT(yes) fi - AM_CONDITIONAL(ENABLE_SSL3, test "$ac_enable_ssl2" != "no") + AM_CONDITIONAL(ENABLE_SSL2, test "$ac_enable_ssl2" != "no") ac_enable_srtp=yes AC_MSG_CHECKING([whether to disable DTLS-SRTP extension]) @@ -243,7 +260,7 @@ LIBTASN1_MINIMUM=4.9 AC_MSG_RESULT(yes) fi AM_CONDITIONAL(ENABLE_SRP, test "$ac_enable_srp" != "no") - + ac_enable_psk=yes AC_MSG_CHECKING([whether to disable PSK authentication support]) AC_ARG_ENABLE(psk-authentication, @@ -258,7 +275,7 @@ LIBTASN1_MINIMUM=4.9 AC_MSG_RESULT(yes) fi AM_CONDITIONAL(ENABLE_PSK, test "$ac_enable_psk" != "no") - + ac_enable_anon=yes AC_MSG_CHECKING([whether to disable anonymous authentication support]) AC_ARG_ENABLE(anon-authentication, @@ -302,20 +319,19 @@ LIBTASN1_MINIMUM=4.9 fi AM_CONDITIONAL(ENABLE_ECDHE, test "$ac_enable_ecdhe" != "no") - ac_enable_openpgp=no - AC_MSG_CHECKING([whether to enable OpenPGP Certificate authentication support]) - AC_ARG_ENABLE(openpgp-authentication, - AS_HELP_STRING([--enable-openpgp-authentication], - [enable the OpenPGP authentication support]), - ac_enable_openpgp=$enableval) - if test x$ac_enable_openpgp = xno; then - AC_MSG_RESULT(yes) - ac_full=0 - else - AC_DEFINE([ENABLE_OPENPGP], 1, [use openpgp authentication]) + AC_MSG_CHECKING([whether to disable GOST support]) + AC_ARG_ENABLE(gost, + AS_HELP_STRING([--disable-gost], + [disable the GOST support]), + ac_enable_gost=$enableval, ac_enable_gost=yes) + if test x$ac_enable_gost != xno; then AC_MSG_RESULT(no) + AC_DEFINE([ENABLE_GOST], 1, [enable GOST]) + else + ac_full=0 + AC_MSG_RESULT(yes) fi - AM_CONDITIONAL(ENABLE_OPENPGP, test "$ac_enable_openpgp" = "yes") + AM_CONDITIONAL(ENABLE_GOST, test "$ac_enable_gost" != "no") # For cryptodev AC_MSG_CHECKING([whether to add cryptodev support]) @@ -343,24 +359,8 @@ LIBTASN1_MINIMUM=4.9 fi AM_CONDITIONAL(ENABLE_OCSP, test "$ac_enable_ocsp" != "no") - - AC_MSG_CHECKING([whether to disable session tickets support]) - AC_ARG_ENABLE(session-tickets, - AS_HELP_STRING([--disable-session-tickets], - [disable session tickets support]), - ac_enable_session_tickets=$enableval,ac_enable_session_tickets=yes) - if test x$ac_enable_session_tickets != xno; then - ac_enable_session_tickets=yes - AC_MSG_RESULT(no) - AC_DEFINE([ENABLE_SESSION_TICKETS], 1, [enable session tickets support]) - else - ac_full=0 - AC_MSG_RESULT(yes) - fi - AM_CONDITIONAL(ENABLE_SESSION_TICKETS, test "$ac_enable_session_tickets" != "no") - # For storing integers in pointers without warnings - # http://developer.gnome.org/doc/API/2.0/glib/glib-Type-Conversion-Macros.html#desc + # https://developer.gnome.org/doc/API/2.0/glib/glib-Type-Conversion-Macros.html#desc AC_CHECK_SIZEOF(void *) AC_CHECK_SIZEOF(long long) AC_CHECK_SIZEOF(long) diff --git a/m4/nls.m4 b/m4/nls.m4 deleted file mode 100644 index 93df8d3b3f..0000000000 --- a/m4/nls.m4 +++ /dev/null @@ -1,32 +0,0 @@ -# nls.m4 serial 5 (gettext-0.18) -dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2003. - -AC_PREREQ([2.50]) - -AC_DEFUN([AM_NLS], -[ - AC_MSG_CHECKING([whether NLS is requested]) - dnl Default is enabled NLS - AC_ARG_ENABLE([nls], - [ --disable-nls do not use Native Language Support], - USE_NLS=$enableval, USE_NLS=yes) - AC_MSG_RESULT([$USE_NLS]) - AC_SUBST([USE_NLS]) -]) diff --git a/m4/pkg.m4 b/m4/pkg.m4 deleted file mode 100644 index 0048a3fa05..0000000000 --- a/m4/pkg.m4 +++ /dev/null @@ -1,157 +0,0 @@ -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# -# Copyright © 2004 Scott James Remnant . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- -AC_DEFUN([PKG_PROG_PKG_CONFIG], -[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) -m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) -AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=m4_default([$1], [0.9.0]) - AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - PKG_CONFIG="" - fi - -fi[]dnl -])# PKG_PROG_PKG_CONFIG - -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# -# Similar to PKG_CHECK_MODULES, make sure that the first instance of -# this or PKG_CHECK_MODULES is called, or make sure to call -# PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- -AC_DEFUN([PKG_CHECK_EXISTS], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -if test -n "$PKG_CONFIG" && \ - AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then - m4_ifval([$2], [$2], [:]) -m4_ifvaln([$3], [else - $3])dnl -fi]) - - -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- -m4_define([_PKG_CONFIG], -[if test -n "$PKG_CONFIG"; then - if test -n "$$1"; then - pkg_cv_[]$1="$$1" - else - PKG_CHECK_EXISTS([$3], - [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], - [pkg_failed=yes]) - fi -else - pkg_failed=untried -fi[]dnl -])# _PKG_CONFIG - -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- -AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED - - -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- -AC_DEFUN([PKG_CHECK_MODULES], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl -AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl - -pkg_failed=no -AC_MSG_CHECKING([for $1]) - -_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) -_PKG_CONFIG([$1][_LIBS], [libs], [$2]) - -m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS -and $1[]_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details.]) - -if test $pkg_failed = yes; then - _PKG_SHORT_ERRORS_SUPPORTED - if test $_pkg_short_errors_supported = yes; then - $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` - else - $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` - fi - # Put the nasty error message in config.log where it belongs - echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD - - ifelse([$4], , [AC_MSG_ERROR(dnl -[Package requirements ($2) were not met: - -$$1_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -_PKG_TEXT -])], - [AC_MSG_RESULT([no]) - $4]) -elif test $pkg_failed = untried; then - ifelse([$4], , [AC_MSG_FAILURE(dnl -[The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -_PKG_TEXT - -To get pkg-config, see .])], - [$4]) -else - $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS - $1[]_LIBS=$pkg_cv_[]$1[]_LIBS - AC_MSG_RESULT([yes]) - ifelse([$3], , :, [$3]) -fi[]dnl -])# PKG_CHECK_MODULES diff --git a/m4/po.m4 b/m4/po.m4 deleted file mode 100644 index d4bc262793..0000000000 --- a/m4/po.m4 +++ /dev/null @@ -1,453 +0,0 @@ -# po.m4 serial 24 (gettext-0.19) -dnl Copyright (C) 1995-2014 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package is covered by the GNU General Public License. -dnl They are *not* in the public domain. - -dnl Authors: -dnl Ulrich Drepper , 1995-2000. -dnl Bruno Haible , 2000-2003. - -AC_PREREQ([2.60]) - -dnl Checks for all prerequisites of the po subdirectory. -AC_DEFUN([AM_PO_SUBDIRS], -[ - AC_REQUIRE([AC_PROG_MAKE_SET])dnl - AC_REQUIRE([AC_PROG_INSTALL])dnl - AC_REQUIRE([AC_PROG_MKDIR_P])dnl - AC_REQUIRE([AC_PROG_SED])dnl - AC_REQUIRE([AM_NLS])dnl - - dnl Release version of the gettext macros. This is used to ensure that - dnl the gettext macros and po/Makefile.in.in are in sync. - AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) - - dnl Perform the following tests also if --disable-nls has been given, - dnl because they are needed for "make dist" to work. - - dnl Search for GNU msgfmt in the PATH. - dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. - dnl The second test excludes FreeBSD msgfmt. - AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, - [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && - (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], - :) - AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) - - dnl Test whether it is GNU msgfmt >= 0.15. -changequote(,)dnl - case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; - *) MSGFMT_015=$MSGFMT ;; - esac -changequote([,])dnl - AC_SUBST([MSGFMT_015]) -changequote(,)dnl - case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; - *) GMSGFMT_015=$GMSGFMT ;; - esac -changequote([,])dnl - AC_SUBST([GMSGFMT_015]) - - dnl Search for GNU xgettext 0.12 or newer in the PATH. - dnl The first test excludes Solaris xgettext and early GNU xgettext versions. - dnl The second test excludes FreeBSD xgettext. - AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && - (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], - :) - dnl Remove leftover from FreeBSD xgettext call. - rm -f messages.po - - dnl Test whether it is GNU xgettext >= 0.15. -changequote(,)dnl - case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in - '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; - *) XGETTEXT_015=$XGETTEXT ;; - esac -changequote([,])dnl - AC_SUBST([XGETTEXT_015]) - - dnl Search for GNU msgmerge 0.11 or newer in the PATH. - AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, - [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) - - dnl Installation directories. - dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we - dnl have to define it here, so that it can be used in po/Makefile. - test -n "$localedir" || localedir='${datadir}/locale' - AC_SUBST([localedir]) - - dnl Support for AM_XGETTEXT_OPTION. - test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= - AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) - - AC_CONFIG_COMMANDS([po-directories], [[ - for ac_file in $CONFIG_FILES; do - # Support "outfile[:infile[:infile...]]" - case "$ac_file" in - *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - esac - # PO directories have a Makefile.in generated from Makefile.in.in. - case "$ac_file" in */Makefile.in) - # Adjust a relative srcdir. - ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` - ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` - # In autoconf-2.13 it is called $ac_given_srcdir. - # In autoconf-2.50 it is called $srcdir. - test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" - case "$ac_given_srcdir" in - .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; - /*) top_srcdir="$ac_given_srcdir" ;; - *) top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - # Treat a directory as a PO directory if and only if it has a - # POTFILES.in file. This allows packages to have multiple PO - # directories under different names or in different locations. - if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then - rm -f "$ac_dir/POTFILES" - test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" - gt_tab=`printf '\t'` - cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" - POMAKEFILEDEPS="POTFILES.in" - # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend - # on $ac_dir but don't depend on user-specified configuration - # parameters. - if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then - # The LINGUAS file contains the set of available languages. - if test -n "$OBSOLETE_ALL_LINGUAS"; then - test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" - fi - ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` - # Hide the ALL_LINGUAS assignment from automake < 1.5. - eval 'ALL_LINGUAS''=$ALL_LINGUAS_' - POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" - else - # The set of available languages was given in configure.in. - # Hide the ALL_LINGUAS assignment from automake < 1.5. - eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' - fi - # Compute POFILES - # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) - # Compute UPDATEPOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) - # Compute DUMMYPOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) - # Compute GMOFILES - # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) - case "$ac_given_srcdir" in - .) srcdirpre= ;; - *) srcdirpre='$(srcdir)/' ;; - esac - POFILES= - UPDATEPOFILES= - DUMMYPOFILES= - GMOFILES= - for lang in $ALL_LINGUAS; do - POFILES="$POFILES $srcdirpre$lang.po" - UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" - DUMMYPOFILES="$DUMMYPOFILES $lang.nop" - GMOFILES="$GMOFILES $srcdirpre$lang.gmo" - done - # CATALOGS depends on both $ac_dir and the user's LINGUAS - # environment variable. - INST_LINGUAS= - if test -n "$ALL_LINGUAS"; then - for presentlang in $ALL_LINGUAS; do - useit=no - if test "%UNSET%" != "$LINGUAS"; then - desiredlanguages="$LINGUAS" - else - desiredlanguages="$ALL_LINGUAS" - fi - for desiredlang in $desiredlanguages; do - # Use the presentlang catalog if desiredlang is - # a. equal to presentlang, or - # b. a variant of presentlang (because in this case, - # presentlang can be used as a fallback for messages - # which are not translated in the desiredlang catalog). - case "$desiredlang" in - "$presentlang"*) useit=yes;; - esac - done - if test $useit = yes; then - INST_LINGUAS="$INST_LINGUAS $presentlang" - fi - done - fi - CATALOGS= - if test -n "$INST_LINGUAS"; then - for lang in $INST_LINGUAS; do - CATALOGS="$CATALOGS $lang.gmo" - done - fi - test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" - sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" - for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do - if test -f "$f"; then - case "$f" in - *.orig | *.bak | *~) ;; - *) cat "$f" >> "$ac_dir/Makefile" ;; - esac - fi - done - fi - ;; - esac - done]], - [# Capture the value of obsolete ALL_LINGUAS because we need it to compute - # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it - # from automake < 1.5. - eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' - # Capture the value of LINGUAS because we need it to compute CATALOGS. - LINGUAS="${LINGUAS-%UNSET%}" - ]) -]) - -dnl Postprocesses a Makefile in a directory containing PO files. -AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], -[ - # When this code is run, in config.status, two variables have already been - # set: - # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, - # - LINGUAS is the value of the environment variable LINGUAS at configure - # time. - -changequote(,)dnl - # Adjust a relative srcdir. - ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` - ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` - ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` - # In autoconf-2.13 it is called $ac_given_srcdir. - # In autoconf-2.50 it is called $srcdir. - test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" - case "$ac_given_srcdir" in - .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; - /*) top_srcdir="$ac_given_srcdir" ;; - *) top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - # Find a way to echo strings without interpreting backslash. - if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then - gt_echo='echo' - else - if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then - gt_echo='printf %s\n' - else - echo_func () { - cat < "$ac_file.tmp" - tab=`printf '\t'` - if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then - # Add dependencies that cannot be formulated as a simple suffix rule. - for lang in $ALL_LINGUAS; do - frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` - cat >> "$ac_file.tmp" < /dev/null; then - # Add dependencies that cannot be formulated as a simple suffix rule. - for lang in $ALL_LINGUAS; do - frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` - cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1996. - -AC_PREREQ([2.50]) - -# Search path for a program which passes the given test. - -dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, -dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) -AC_DEFUN([AM_PATH_PROG_WITH_TEST], -[ -# Prepare PATH_SEPARATOR. -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which - # contains only /bin. Note that ksh looks also at the FPATH variable, - # so we have to set that as well for the test. - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ - && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ - || PATH_SEPARATOR=';' - } -fi - -# Find out how to test for executable files. Don't use a zero-byte file, -# as systems may use methods other than mode bits to determine executability. -cat >conf$$.file <<_ASEOF -#! /bin/sh -exit 0 -_ASEOF -chmod +x conf$$.file -if test -x conf$$.file >/dev/null 2>&1; then - ac_executable_p="test -x" -else - ac_executable_p="test -f" -fi -rm -f conf$$.file - -# Extract the first word of "$2", so it can be a program name with args. -set dummy $2; ac_word=[$]2 -AC_MSG_CHECKING([for $ac_word]) -AC_CACHE_VAL([ac_cv_path_$1], -[case "[$]$1" in - [[\\/]]* | ?:[[\\/]]*) - ac_cv_path_$1="[$]$1" # Let the user override the test with a path. - ;; - *) - ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in ifelse([$5], , $PATH, [$5]); do - IFS="$ac_save_IFS" - test -z "$ac_dir" && ac_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then - echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD - if [$3]; then - ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" - break 2 - fi - fi - done - done - IFS="$ac_save_IFS" -dnl If no 4th arg is given, leave the cache variable unset, -dnl so AC_PATH_PROGS will keep looking. -ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" -])dnl - ;; -esac])dnl -$1="$ac_cv_path_$1" -if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then - AC_MSG_RESULT([$][$1]) -else - AC_MSG_RESULT([no]) -fi -AC_SUBST([$1])dnl -]) diff --git a/maint.mk b/maint.mk deleted file mode 100644 index c32f8b6d0e..0000000000 --- a/maint.mk +++ /dev/null @@ -1,1670 +0,0 @@ -# -*-Makefile-*- -# This Makefile fragment tries to be general-purpose enough to be -# used by many projects via the gnulib maintainer-makefile module. - -## Copyright (C) 2001-2016 Free Software Foundation, Inc. -## -## This program is free software: you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation, either version 3 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program. If not, see . - -# This is reported not to work with make-3.79.1 -# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) -ME := maint.mk - -# Helper variables. -_empty = -_sp = $(_empty) $(_empty) - -# _equal,S1,S2 -# ------------ -# If S1 == S2, return S1, otherwise the empty string. -_equal = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) - -# member-check,VARIABLE,VALID-VALUES -# ---------------------------------- -# Check that $(VARIABLE) is in the space-separated list of VALID-VALUES, and -# return it. Die otherwise. -member-check = \ - $(strip \ - $(if $($(1)), \ - $(if $(findstring $(_sp),$($(1))), \ - $(error invalid $(1): '$($(1))', expected $(2)), \ - $(or $(findstring $(_sp)$($(1))$(_sp),$(_sp)$(2)$(_sp)), \ - $(error invalid $(1): '$($(1))', expected $(2)))), \ - $(error $(1) undefined))) - -# Do not save the original name or timestamp in the .tar.gz file. -# Use --rsyncable if available. -gzip_rsyncable := \ - $(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null \ - && printf %s --rsyncable) -GZIP_ENV = '--no-name --best $(gzip_rsyncable)' - -GIT = git -VC = $(GIT) - -VC_LIST = $(srcdir)/$(_build-aux)/vc-list-files -C $(srcdir) - -# You can override this variable in cfg.mk to set your own regexp -# matching files to ignore. -VC_LIST_ALWAYS_EXCLUDE_REGEX ?= ^$$ - -# This is to preprocess robustly the output of $(VC_LIST), so that even -# when $(srcdir) is a pathological name like "....", the leading sed command -# removes only the intended prefix. -_dot_escaped_srcdir = $(subst .,\.,$(srcdir)) - -# Post-process $(VC_LIST) output, prepending $(srcdir)/, but only -# when $(srcdir) is not ".". -ifeq ($(srcdir),.) - _prepend_srcdir_prefix = -else - _prepend_srcdir_prefix = | $(SED) 's|^|$(srcdir)/|' -endif - -# In order to be able to consistently filter "."-relative names, -# (i.e., with no $(srcdir) prefix), this definition is careful to -# remove any $(srcdir) prefix, and to restore what it removes. -_sc_excl = \ - $(or $(exclude_file_name_regexp--$@),^$$) -VC_LIST_EXCEPT = \ - $(VC_LIST) | $(SED) 's|^$(_dot_escaped_srcdir)/||' \ - | if test -f $(srcdir)/.x-$@; then grep -vEf $(srcdir)/.x-$@; \ - else grep -Ev -e "$${VC_LIST_EXCEPT_DEFAULT-ChangeLog}"; fi \ - | grep -Ev -e '($(VC_LIST_ALWAYS_EXCLUDE_REGEX)|$(_sc_excl))' \ - $(_prepend_srcdir_prefix) - -ifeq ($(origin prev_version_file), undefined) - prev_version_file = $(srcdir)/.prev-version -endif - -PREV_VERSION := $(shell cat $(prev_version_file) 2>/dev/null) -VERSION_REGEXP = $(subst .,\.,$(VERSION)) -PREV_VERSION_REGEXP = $(subst .,\.,$(PREV_VERSION)) - -ifeq ($(VC),$(GIT)) - this-vc-tag = v$(VERSION) - this-vc-tag-regexp = v$(VERSION_REGEXP) -else - tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]') - tag-this-version = $(subst .,_,$(VERSION)) - this-vc-tag = $(tag-package)-$(tag-this-version) - this-vc-tag-regexp = $(this-vc-tag) -endif -my_distdir = $(PACKAGE)-$(VERSION) - -# Old releases are stored here. -release_archive_dir ?= ../release - -# If RELEASE_TYPE is undefined, but RELEASE is, use its second word. -# But overwrite VERSION. -ifdef RELEASE - VERSION := $(word 1, $(RELEASE)) - RELEASE_TYPE ?= $(word 2, $(RELEASE)) -endif - -# Validate and return $(RELEASE_TYPE), or die. -RELEASE_TYPES = alpha beta stable -release-type = $(call member-check,RELEASE_TYPE,$(RELEASE_TYPES)) - -# Override gnu_rel_host and url_dir_list in cfg.mk if these are not right. -# Use alpha.gnu.org for alpha and beta releases. -# Use ftp.gnu.org for stable releases. -gnu_ftp_host-alpha = alpha.gnu.org -gnu_ftp_host-beta = alpha.gnu.org -gnu_ftp_host-stable = ftp.gnu.org -gnu_rel_host ?= $(gnu_ftp_host-$(release-type)) - -url_dir_list ?= $(if $(call _equal,$(gnu_rel_host),ftp.gnu.org), \ - http://ftpmirror.gnu.org/$(PACKAGE), \ - ftp://$(gnu_rel_host)/gnu/$(PACKAGE)) - -# Override this in cfg.mk if you are using a different format in your -# NEWS file. -today = $(shell date +%Y-%m-%d) - -# Select which lines of NEWS are searched for $(news-check-regexp). -# This is a sed line number spec. The default says that we search -# lines 1..10 of NEWS for $(news-check-regexp). -# If you want to search only line 3 or only lines 20-22, use "3" or "20,22". -news-check-lines-spec ?= 1,10 -news-check-regexp ?= '^\*.* $(VERSION_REGEXP) \($(today)\)' - -# Prevent programs like 'sort' from considering distinct strings to be equal. -# Doing it here saves us from having to set LC_ALL elsewhere in this file. -export LC_ALL = C - -## --------------- ## -## Sanity checks. ## -## --------------- ## - -ifneq ($(_gl-Makefile),) -_cfg_mk := $(wildcard $(srcdir)/cfg.mk) - -# Collect the names of rules starting with 'sc_'. -syntax-check-rules := $(sort $(shell $(SED) -n \ - 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' $(srcdir)/$(ME) $(_cfg_mk))) -.PHONY: $(syntax-check-rules) - -ifeq ($(shell $(VC_LIST) >/dev/null 2>&1; echo $$?),0) - local-checks-available += $(syntax-check-rules) -else - local-checks-available += no-vc-detected -no-vc-detected: - @echo "No version control files detected; skipping syntax check" -endif -.PHONY: $(local-checks-available) - -# Arrange to print the name of each syntax-checking rule just before running it. -$(syntax-check-rules): %: %.m -sc_m_rules_ = $(patsubst %, %.m, $(syntax-check-rules)) -.PHONY: $(sc_m_rules_) -$(sc_m_rules_): - @echo $(patsubst sc_%.m, %, $@) - @date +%s.%N > .sc-start-$(basename $@) - -# Compute and print the elapsed time for each syntax-check rule. -sc_z_rules_ = $(patsubst %, %.z, $(syntax-check-rules)) -.PHONY: $(sc_z_rules_) -$(sc_z_rules_): %.z: % - @end=$$(date +%s.%N); \ - start=$$(cat .sc-start-$*); \ - rm -f .sc-start-$*; \ - awk -v s=$$start -v e=$$end \ - 'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null - -# The patsubst here is to replace each sc_% rule with its sc_%.z wrapper -# that computes and prints elapsed time. -local-check := \ - $(patsubst sc_%, sc_%.z, \ - $(filter-out $(local-checks-to-skip), $(local-checks-available))) - -syntax-check: $(local-check) -endif - -# _sc_search_regexp -# -# This macro searches for a given construct in the selected files and -# then takes some action. -# -# Parameters (shell variables): -# -# prohibit | require -# -# Regular expression (ERE) denoting either a forbidden construct -# or a required construct. Those arguments are exclusive. -# -# exclude -# -# Regular expression (ERE) denoting lines to ignore that matched -# a prohibit construct. For example, this can be used to exclude -# comments that mention why the nearby code uses an alternative -# construct instead of the simpler prohibited construct. -# -# in_vc_files | in_files -# -# grep-E-style regexp selecting the files to check. For in_vc_files, -# the regexp is used to select matching files from the list of all -# version-controlled files; for in_files, it's from the names printed -# by "find $(srcdir)". When neither is specified, use all files that -# are under version control. -# -# containing | non_containing -# -# Select the files (non) containing strings matching this regexp. -# If both arguments are specified then CONTAINING takes -# precedence. -# -# with_grep_options -# -# Extra options for grep. -# -# ignore_case -# -# Ignore case. -# -# halt -# -# Message to display before to halting execution. -# -# Finally, you may exempt files based on an ERE matching file names. -# For example, to exempt from the sc_space_tab check all files with the -# .diff suffix, set this Make variable: -# -# exclude_file_name_regexp--sc_space_tab = \.diff$ -# -# Note that while this functionality is mostly inherited via VC_LIST_EXCEPT, -# when filtering by name via in_files, we explicitly filter out matching -# names here as well. - -# Initialize each, so that envvar settings cannot interfere. -export require = -export prohibit = -export exclude = -export in_vc_files = -export in_files = -export containing = -export non_containing = -export halt = -export with_grep_options = - -# By default, _sc_search_regexp does not ignore case. -export ignore_case = -_ignore_case = $$(test -n "$$ignore_case" && printf %s -i || :) - -define _sc_say_and_exit - dummy=; : so we do not need a semicolon before each use; \ - { printf '%s\n' "$(ME): $$msg" 1>&2; exit 1; }; -endef - -define _sc_search_regexp - dummy=; : so we do not need a semicolon before each use; \ - \ - : Check arguments; \ - test -n "$$prohibit" && test -n "$$require" \ - && { msg='Cannot specify both prohibit and require' \ - $(_sc_say_and_exit) } || :; \ - test -z "$$prohibit" && test -z "$$require" \ - && { msg='Should specify either prohibit or require' \ - $(_sc_say_and_exit) } || :; \ - test -z "$$prohibit" && test -n "$$exclude" \ - && { msg='Use of exclude requires a prohibit pattern' \ - $(_sc_say_and_exit) } || :; \ - test -n "$$in_vc_files" && test -n "$$in_files" \ - && { msg='Cannot specify both in_vc_files and in_files' \ - $(_sc_say_and_exit) } || :; \ - test "x$$halt" != x \ - || { msg='halt not defined' $(_sc_say_and_exit) }; \ - \ - : Filter by file name; \ - if test -n "$$in_files"; then \ - files=$$(find $(srcdir) | grep -E "$$in_files" \ - | grep -Ev '$(_sc_excl)'); \ - else \ - files=$$($(VC_LIST_EXCEPT)); \ - if test -n "$$in_vc_files"; then \ - files=$$(echo "$$files" | grep -E "$$in_vc_files"); \ - fi; \ - fi; \ - \ - : Filter by content; \ - test -n "$$files" && test -n "$$containing" \ - && { files=$$(grep -l "$$containing" $$files); } || :; \ - test -n "$$files" && test -n "$$non_containing" \ - && { files=$$(grep -vl "$$non_containing" $$files); } || :; \ - \ - : Check for the construct; \ - if test -n "$$files"; then \ - if test -n "$$prohibit"; then \ - grep $$with_grep_options $(_ignore_case) -nE "$$prohibit" $$files \ - | grep -vE "$${exclude:-^$$}" \ - && { msg="$$halt" $(_sc_say_and_exit) } || :; \ - else \ - grep $$with_grep_options $(_ignore_case) -LE "$$require" $$files \ - | grep . \ - && { msg="$$halt" $(_sc_say_and_exit) } || :; \ - fi \ - else :; \ - fi || :; -endef - -sc_avoid_if_before_free: - @$(srcdir)/$(_build-aux)/useless-if-before-free \ - $(useless_free_options) \ - $$($(VC_LIST_EXCEPT) | grep -v useless-if-before-free) && \ - { echo '$(ME): found useless "if" before "free" above' 1>&2; \ - exit 1; } || : - -sc_cast_of_argument_to_free: - @prohibit='\&2; \ - exit 1; } || : - -# Error messages should not start with a capital letter -sc_error_message_uppercase: - @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \ - | grep -E '"[A-Z]' \ - | grep -vE '"FATAL|"WARNING|"Java|"C#|PRIuMAX' && \ - { echo '$(ME): found capitalized error message' 1>&2; \ - exit 1; } || : - -# Error messages should not end with a period -sc_error_message_period: - @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \ - | grep -E '[^."]\."' && \ - { echo '$(ME): found error message ending in period' 1>&2; \ - exit 1; } || : - -sc_file_system: - @prohibit=file''system \ - ignore_case=1 \ - halt='found use of "file''system"; spell it "file system"' \ - $(_sc_search_regexp) - -# Don't use cpp tests of this symbol. All code assumes config.h is included. -sc_prohibit_have_config_h: - @prohibit='^# *if.*HAVE''_CONFIG_H' \ - halt='found use of HAVE''_CONFIG_H; remove' \ - $(_sc_search_regexp) - -# Nearly all .c files must include . However, we also permit this -# via inclusion of a package-specific header, if cfg.mk specified one. -# config_h_header must be suitable for grep -E. -config_h_header ?= -sc_require_config_h: - @require='^# *include $(config_h_header)' \ - in_vc_files='\.c$$' \ - halt='the above files do not include ' \ - $(_sc_search_regexp) - -# Print each file name for which the first #include does not match -# $(config_h_header). Like grep -m 1, this only looks at the first match. -perl_config_h_first_ = \ - -e 'BEGIN {$$ret = 0}' \ - -e 'if (/^\# *include\b/) {' \ - -e ' if (not m{^\# *include $(config_h_header)}) {' \ - -e ' print "$$ARGV\n";' \ - -e ' $$ret = 1;' \ - -e ' }' \ - -e ' \# Move on to next file after first include' \ - -e ' close ARGV;' \ - -e '}' \ - -e 'END {exit $$ret}' - -# You must include before including any other header file. -# This can possibly be via a package-specific header, if given by cfg.mk. -sc_require_config_h_first: - @if $(VC_LIST_EXCEPT) | grep '\.c$$' > /dev/null; then \ - files=$$($(VC_LIST_EXCEPT) | grep '\.c$$') && \ - perl -n $(perl_config_h_first_) $$files || \ - { echo '$(ME): the above files include some other header' \ - 'before ' 1>&2; exit 1; } || :; \ - else :; \ - fi - -sc_prohibit_HAVE_MBRTOWC: - @prohibit='\bHAVE_MBRTOWC\b' \ - halt="do not use $$prohibit; it is always defined" \ - $(_sc_search_regexp) - -# To use this "command" macro, you must first define two shell variables: -# h: the header name, with no enclosing <> or "" -# re: a regular expression that matches IFF something provided by $h is used. -define _sc_header_without_use - dummy=; : so we do not need a semicolon before each use; \ - h_esc=`echo '[<"]'"$$h"'[">]'|$(SED) 's/\./\\\\./g'`; \ - if $(VC_LIST_EXCEPT) | grep '\.c$$' > /dev/null; then \ - files=$$(grep -l '^# *include '"$$h_esc" \ - $$($(VC_LIST_EXCEPT) | grep '\.c$$')) && \ - grep -LE "$$re" $$files | grep . && \ - { echo "$(ME): the above files include $$h but don't use it" \ - 1>&2; exit 1; } || :; \ - else :; \ - fi -endef - -# Prohibit the inclusion of assert.h without an actual use of assert. -sc_prohibit_assert_without_use: - @h='assert.h' re='\new(file => "/dev/stdin")->as_string'|sed 's/\?://g' -# Note this was produced by the above: -# _xa1 = \ -#x(((2n?)?re|c(har)?|n(re|m)|z)alloc|alloc_(oversized|die)|m(alloc|emdup)|strdup) -# But we can do better, in at least two ways: -# 1) take advantage of two "dup"-suffixed strings: -# x(((2n?)?re|c(har)?|n(re|m)|[mz])alloc|alloc_(oversized|die)|(mem|str)dup) -# 2) notice that "c(har)?|[mz]" is equivalent to the shorter and more readable -# "char|[cmz]" -# x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) -_xa1 = x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) -_xa2 = X([CZ]|N?M)ALLOC -sc_prohibit_xalloc_without_use: - @h='xalloc.h' \ - re='\<($(_xa1)|$(_xa2)) *\('\ - $(_sc_header_without_use) - -# Extract function names: -# perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/hash.h -_hash_re = \ -clear|delete|free|get_(first|next)|insert|lookup|print_statistics|reset_tuning -_hash_fn = \<($(_hash_re)) *\( -_hash_struct = (struct )?\<[Hh]ash_(table|tuning)\> -sc_prohibit_hash_without_use: - @h='hash.h' \ - re='$(_hash_fn)|$(_hash_struct)'\ - $(_sc_header_without_use) - -sc_prohibit_cloexec_without_use: - @h='cloexec.h' re='\<(set_cloexec_flag|dup_cloexec) *\(' \ - $(_sc_header_without_use) - -sc_prohibit_posixver_without_use: - @h='posixver.h' re='\' \ - halt='do not use HAVE''_FCNTL_H or O'_NDELAY \ - $(_sc_search_regexp) - -# FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ - -# Each nonempty ChangeLog line must start with a year number, or a TAB. -sc_changelog: - @prohibit='^[^12 ]' \ - in_vc_files='^ChangeLog$$' \ - halt='found unexpected prefix in a ChangeLog' \ - $(_sc_search_regexp) - -# Ensure that each .c file containing a "main" function also -# calls bindtextdomain. -sc_bindtextdomain: - @require='bindtextdomain *\(' \ - in_vc_files='\.c$$' \ - containing='\
/dev/null \ - && : || { die=1; echo $$i; } \ - done; \ - test $$die = 1 && \ - { echo 1>&2 '$(ME): the final line in each of the above is not:'; \ - echo 1>&2 'Exit something'; \ - exit 1; } || :; \ - fi - -sc_trailing_blank: - @prohibit='[ ]$$' \ - halt='found trailing blank(s)' \ - exclude='^Binary file .* matches$$' \ - $(_sc_search_regexp) - -# Match lines like the following, but where there is only one space -# between the options and the description: -# -D, --all-repeated[=delimit-method] print all duplicate lines\n -longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*\]?)? -sc_two_space_separator_in_usage: - @prohibit='^ *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$' \ - halt='help2man requires at least two spaces between an option and its description'\ - $(_sc_search_regexp) - -# A regexp matching function names like "error" that may be used -# to emit translatable messages. -_gl_translatable_diag_func_re ?= error - -# Look for diagnostics that aren't marked for translation. -# This won't find any for which error's format string is on a separate line. -sc_unmarked_diagnostics: - @prohibit='\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \ - exclude='(_|ngettext ?)\(' \ - halt='found unmarked diagnostic(s)' \ - $(_sc_search_regexp) - -# Avoid useless parentheses like those in this example: -# #if defined (SYMBOL) || defined (SYM2) -sc_useless_cpp_parens: - @prohibit='^# *if .*defined *\(' \ - halt='found useless parentheses in cpp directive' \ - $(_sc_search_regexp) - -# List headers for which HAVE_HEADER_H is always true, assuming you are -# using the appropriate gnulib module. CAUTION: for each "unnecessary" -# #if HAVE_HEADER_H that you remove, be sure that your project explicitly -# requires the gnulib module that guarantees the usability of that header. -gl_assured_headers_ = \ - cd $(gnulib_dir)/lib && echo *.in.h|$(SED) 's/\.in\.h//g' - -# Convert the list of names to upper case, and replace each space with "|". -az_ = abcdefghijklmnopqrstuvwxyz -AZ_ = ABCDEFGHIJKLMNOPQRSTUVWXYZ -gl_header_upper_case_or_ = \ - $$($(gl_assured_headers_) \ - | tr $(az_)/.- $(AZ_)___ \ - | tr -s ' ' '|' \ - ) -sc_prohibit_always_true_header_tests: - @or=$(gl_header_upper_case_or_); \ - re="HAVE_($$or)_H"; \ - prohibit='\<'"$$re"'\>' \ - halt=$$(printf '%s\n' \ - 'do not test the above HAVE_
_H symbol(s);' \ - ' with the corresponding gnulib module, they are always true') \ - $(_sc_search_regexp) - -sc_prohibit_defined_have_decl_tests: - @prohibit='(#[ ]*ifn?def|\[ (]+HAVE_DECL_' \ - halt='HAVE_DECL macros are always defined' \ - $(_sc_search_regexp) - -# ================================================================== -gl_other_headers_ ?= \ - intprops.h \ - openat.h \ - stat-macros.h - -# Perl -lne code to extract "significant" cpp-defined symbols from a -# gnulib header file, eliminating a few common false-positives. -# The exempted names below are defined only conditionally in gnulib, -# and hence sometimes must/may be defined in application code. -gl_extract_significant_defines_ = \ - /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/\ - && $$2 !~ /(?:rpl_|_used_without_)/\ - && $$1 !~ /^(?:NSIG|ENODATA)$$/\ - && $$1 !~ /^(?:SA_RESETHAND|SA_RESTART)$$/\ - and print $$1 - -# Create a list of regular expressions matching the names -# of macros that are guaranteed to be defined by parts of gnulib. -define def_sym_regex - gen_h=$(gl_generated_headers_); \ - (cd $(gnulib_dir)/lib; \ - for f in *.in.h $(gl_other_headers_); do \ - test -f $$f \ - && perl -lne '$(gl_extract_significant_defines_)' $$f; \ - done; \ - ) | sort -u \ - | $(SED) 's/^/^ *# *(define|undef) */;s/$$/\\>/' -endef - -# Don't define macros that we already get from gnulib header files. -sc_prohibit_always-defined_macros: - @if test -d $(gnulib_dir); then \ - case $$(echo all: | grep -l -f - Makefile) in Makefile);; *) \ - echo '$(ME): skipping $@: you lack GNU grep' 1>&2; exit 0;; \ - esac; \ - $(def_sym_regex) | grep -E -f - $$($(VC_LIST_EXCEPT)) \ - && { echo '$(ME): define the above via some gnulib .h file' \ - 1>&2; exit 1; } || :; \ - fi -# ================================================================== - -# Prohibit checked in backup files. -sc_prohibit_backup_files: - @$(VC_LIST) | grep '~$$' && \ - { echo '$(ME): found version controlled backup file' 1>&2; \ - exit 1; } || : - -# Require the latest GPL. -sc_GPL_version: - @prohibit='either ''version [^3]' \ - halt='GPL vN, N!=3' \ - $(_sc_search_regexp) - -# Require the latest GFDL. Two regexp, since some .texi files end up -# line wrapping between 'Free Documentation License,' and 'Version'. -_GFDL_regexp = (Free ''Documentation.*Version 1\.[^3]|Version 1\.[^3] or any) -sc_GFDL_version: - @prohibit='$(_GFDL_regexp)' \ - halt='GFDL vN, N!=3' \ - $(_sc_search_regexp) - -# Don't use Texinfo's @acronym{}. -# http://lists.gnu.org/archive/html/bug-gnulib/2010-03/msg00321.html -texinfo_suffix_re_ ?= \.(txi|texi(nfo)?)$$ -sc_texinfo_acronym: - @prohibit='@acronym\{' \ - in_vc_files='$(texinfo_suffix_re_)' \ - halt='found use of Texinfo @acronym{}' \ - $(_sc_search_regexp) - -cvs_keywords = \ - Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State - -sc_prohibit_cvs_keyword: - @prohibit='\$$($(cvs_keywords))\$$' \ - halt='do not use CVS keyword expansion' \ - $(_sc_search_regexp) - -# This Perl code is slightly obfuscated. Not only is each "$" doubled -# because it's in a Makefile, but the $$c's are comments; we cannot -# use "#" due to the way the script ends up concatenated onto one line. -# It would be much more concise, and would produce better output (including -# counts) if written as: -# perl -ln -0777 -e '/\n(\n+)$/ and print "$ARGV: ".length $1' ... -# but that would be far less efficient, reading the entire contents -# of each file, rather than just the last two bytes of each. -# In addition, while the code below detects both blank lines and a missing -# newline at EOF, the above detects only the former. -# -# This is a perl script that is expected to be the single-quoted argument -# to a command-line "-le". The remaining arguments are file names. -# Print the name of each file that does not end in exactly one newline byte. -# I.e., warn if there are blank lines (2 or more newlines), or if the -# last byte is not a newline. However, currently we don't complain -# about any file that contains exactly one byte. -# Exit nonzero if at least one such file is found, otherwise, exit 0. -# Warn about, but otherwise ignore open failure. Ignore seek/read failure. -# -# Use this if you want to remove trailing empty lines from selected files: -# perl -pi -0777 -e 's/\n\n+$/\n/' files... -# -require_exactly_one_NL_at_EOF_ = \ - foreach my $$f (@ARGV) \ - { \ - open F, "<", $$f or (warn "failed to open $$f: $$!\n"), next; \ - my $$p = sysseek (F, -2, 2); \ - my $$c = "seek failure probably means file has < 2 bytes; ignore"; \ - my $$last_two_bytes; \ - defined $$p and $$p = sysread F, $$last_two_bytes, 2; \ - close F; \ - $$c = "ignore read failure"; \ - $$p && ($$last_two_bytes eq "\n\n" \ - || substr ($$last_two_bytes,1) ne "\n") \ - and (print $$f), $$fail=1; \ - } \ - END { exit defined $$fail } -sc_prohibit_empty_lines_at_EOF: - @perl -le '$(require_exactly_one_NL_at_EOF_)' $$($(VC_LIST_EXCEPT)) \ - || { echo '$(ME): empty line(s) or no newline at EOF' \ - 1>&2; exit 1; } || : - -# Make sure we don't use st_blocks. Use ST_NBLOCKS instead. -# This is a bit of a kludge, since it prevents use of the string -# even in comments, but for now it does the job with no false positives. -sc_prohibit_stat_st_blocks: - @prohibit='[.>]st_blocks' \ - halt='do not use st_blocks; use ST_NBLOCKS' \ - $(_sc_search_regexp) - -# Make sure we don't define any S_IS* macros in src/*.c files. -# They're already defined via gnulib's sys/stat.h replacement. -sc_prohibit_S_IS_definition: - @prohibit='^ *# *define *S_IS' \ - halt='do not define S_IS* macros; include ' \ - $(_sc_search_regexp) - -# Perl block to convert a match to FILE_NAME:LINENO:TEST, -# that is shared by two definitions below. -perl_filename_lineno_text_ = \ - -e ' {' \ - -e ' $$n = ($$` =~ tr/\n/\n/ + 1);' \ - -e ' ($$v = $$&) =~ s/\n/\\n/g;' \ - -e ' print "$$ARGV:$$n:$$v\n";' \ - -e ' }' - -prohibit_doubled_words_ = \ - the then in an on if is it but for or at and do to -# expand the regex before running the check to avoid using expensive captures -prohibit_doubled_word_expanded_ = \ - $(join $(prohibit_doubled_words_),$(addprefix \s+,$(prohibit_doubled_words_))) -prohibit_doubled_word_RE_ ?= \ - /\b(?:$(subst $(_sp),|,$(prohibit_doubled_word_expanded_)))\b/gims -prohibit_doubled_word_ = \ - -e 'while ($(prohibit_doubled_word_RE_))' \ - $(perl_filename_lineno_text_) - -# Define this to a regular expression that matches -# any filename:dd:match lines you want to ignore. -# The default is to ignore no matches. -ignore_doubled_word_match_RE_ ?= ^$$ - -sc_prohibit_doubled_word: - @perl -n -0777 $(prohibit_doubled_word_) $$($(VC_LIST_EXCEPT)) \ - | grep -vE '$(ignore_doubled_word_match_RE_)' \ - | grep . && { echo '$(ME): doubled words' 1>&2; exit 1; } || : - -# A regular expression matching undesirable combinations of words like -# "can not"; this matches them even when the two words appear on different -# lines, but not when there is an intervening delimiter like "#" or "*". -# Similarly undesirable, "See @xref{...}", since an @xref should start -# a sentence. Explicitly prohibit any prefix of "see" or "also". -# Also prohibit a prefix matching "\w+ +". -# @pxref gets the same see/also treatment and should be parenthesized; -# presume it must *not* start a sentence. -bad_xref_re_ ?= (?:[\w,:;] +|(?:see|also)\s+)\@xref\{ -bad_pxref_re_ ?= (?:[.!?]|(?:see|also))\s+\@pxref\{ -prohibit_undesirable_word_seq_RE_ ?= \ - /(?:\bcan\s+not\b|$(bad_xref_re_)|$(bad_pxref_re_))/gims -prohibit_undesirable_word_seq_ = \ - -e 'while ($(prohibit_undesirable_word_seq_RE_))' \ - $(perl_filename_lineno_text_) -# Define this to a regular expression that matches -# any filename:dd:match lines you want to ignore. -# The default is to ignore no matches. -ignore_undesirable_word_sequence_RE_ ?= ^$$ - -sc_prohibit_undesirable_word_seq: - @perl -n -0777 $(prohibit_undesirable_word_seq_) \ - $$($(VC_LIST_EXCEPT)) \ - | grep -vE '$(ignore_undesirable_word_sequence_RE_)' | grep . \ - && { echo '$(ME): undesirable word sequence' >&2; exit 1; } || : - -# Except for shell files and for loops, double semicolon is probably a mistake -sc_prohibit_double_semicolon: - @prohibit='; *;[ {} \]*(/[/*]|$$)' \ - in_vc_files='\.[chly]$$' \ - exclude='\bfor *\(.*\)' \ - halt="Double semicolon detected" \ - $(_sc_search_regexp) - -_ptm1 = use "test C1 && test C2", not "test C1 -''a C2" -_ptm2 = use "test C1 || test C2", not "test C1 -''o C2" -# Using test's -a and -o operators is not portable. -# We prefer test over [, since the latter is spelled [[ in configure.ac. -sc_prohibit_test_minus_ao: - @prohibit='(\ /dev/null \ - || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \ - done; \ - test $$fail = 1 && \ - { echo 1>&2 '$(ME): the above do not link with any ICONV library'; \ - exit 1; } || :; \ - fi - -# Warn about "c0nst struct Foo const foo[]", -# but not about "char const *const foo" or "#define const const". -sc_redundant_const: - @prohibit='\bconst\b[[:space:][:alnum:]]{2,}\bconst\b' \ - halt='redundant "const" in declarations' \ - $(_sc_search_regexp) - -sc_const_long_option: - @prohibit='^ *static.*struct option ' \ - exclude='const struct option|struct option const' \ - halt='add "const" to the above declarations' \ - $(_sc_search_regexp) - -NEWS_hash = \ - $$($(SED) -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p' \ - $(srcdir)/NEWS \ - | perl -0777 -pe \ - 's/^Copyright.+?Free\sSoftware\sFoundation,\sInc\.\n//ms' \ - | md5sum - \ - | $(SED) 's/ .*//') - -# Ensure that we don't accidentally insert an entry into an old NEWS block. -sc_immutable_NEWS: - @if test -f $(srcdir)/NEWS; then \ - test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : || \ - { echo '$(ME): you have modified old NEWS' 1>&2; exit 1; }; \ - fi - -# Update the hash stored above. Do this after each release and -# for any corrections to old entries. -update-NEWS-hash: NEWS - perl -pi -e 's/^(old_NEWS_hash[ \t]+:?=[ \t]+).*/$${1}'"$(NEWS_hash)/" \ - $(srcdir)/cfg.mk - -# Ensure that we use only the standard $(VAR) notation, -# not @...@ in Makefile.am, now that we can rely on automake -# to emit a definition for each substituted variable. -# However, there is still one case in which @VAR@ use is not just -# legitimate, but actually required: when augmenting an automake-defined -# variable with a prefix. For example, gettext uses this: -# MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@ -# otherwise, makeinfo would put German or French (current locale) -# navigation hints in the otherwise-English documentation. -# -# Allow the package to add exceptions via a hook in cfg.mk; -# for example, @PRAGMA_SYSTEM_HEADER@ can be permitted by -# setting this to ' && !/PRAGMA_SYSTEM_HEADER/'. -_makefile_at_at_check_exceptions ?= -sc_makefile_at_at_check: - @perl -ne '/\@\w+\@/' \ - -e ' && !/(\w+)\s+=.*\@\1\@$$/' \ - -e ''$(_makefile_at_at_check_exceptions) \ - -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}' \ - $$($(VC_LIST_EXCEPT) | grep -E '(^|/)(Makefile\.am|[^/]+\.mk)$$') \ - && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || : - -news-check: NEWS - $(AM_V_GEN)if $(SED) -n $(news-check-lines-spec)p $< \ - | grep -E $(news-check-regexp) >/dev/null; then \ - :; \ - else \ - echo 'NEWS: $$(news-check-regexp) failed to match' 1>&2; \ - exit 1; \ - fi - -sc_makefile_TAB_only_indentation: - @prohibit='^ [ ]{8}' \ - in_vc_files='akefile|\.mk$$' \ - halt='found TAB-8-space indentation' \ - $(_sc_search_regexp) - -sc_m4_quote_check: - @prohibit='(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]' \ - in_vc_files='(^configure\.ac|\.m4)$$' \ - halt='quote the first arg to AC_DEF*' \ - $(_sc_search_regexp) - -fix_po_file_diag = \ -'you have changed the set of files with translatable diagnostics;\n\ -apply the above patch\n' - -# Generate a list of files in which to search for translatable strings. -perl_translatable_files_list_ = \ - -e 'foreach $$file (@ARGV) {' \ - -e ' \# Consider only file extensions with one or two letters' \ - -e ' $$file =~ /\...?$$/ or next;' \ - -e ' \# Ignore m4 and mk files' \ - -e ' $$file =~ /\.m[4k]$$/ and next;' \ - -e ' \# Ignore a .c or .h file with a corresponding .l or .y file' \ - -e ' $$file =~ /(.+)\.[ch]$$/ && (-e "$${1}.l" || -e "$${1}.y")' \ - -e ' and next;' \ - -e ' \# Skip unreadable files' \ - -e ' -r $$file or next;' \ - -e ' print "$$file ";' \ - -e '}' - -# Verify that all source files using _() (more specifically, files that -# match $(_gl_translatable_string_re)) are listed in po/POTFILES.in. -po_file ?= $(srcdir)/po/POTFILES.in -generated_files ?= $(srcdir)/lib/*.[ch] -_gl_translatable_string_re ?= \b(N?_|gettext *)\([^)"]*("|$$) -sc_po_check: - @if test -f $(po_file); then \ - grep -E -v '^(#|$$)' $(po_file) \ - | grep -v '^src/false\.c$$' | sort > $@-1; \ - files=$$(perl $(perl_translatable_files_list_) \ - $$($(VC_LIST_EXCEPT)) $(generated_files)); \ - grep -E -l '$(_gl_translatable_string_re)' $$files \ - | $(SED) 's|^$(_dot_escaped_srcdir)/||' | sort -u > $@-2; \ - diff -u -L $(po_file) -L $(po_file) $@-1 $@-2 \ - || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; }; \ - rm -f $@-1 $@-2; \ - fi - -# Sometimes it is useful to change the PATH environment variable -# in Makefiles. When doing so, it's better not to use the Unix-centric -# path separator of ':', but rather the automake-provided '$(PATH_SEPARATOR)'. -msg = 'Do not use ":" above; use $$(PATH_SEPARATOR) instead' -sc_makefile_path_separator_check: - @prohibit='PATH[=].*:' \ - in_vc_files='akefile|\.mk$$' \ - halt=$(msg) \ - $(_sc_search_regexp) - -# Check that 'make alpha' will not fail at the end of the process, -# i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release) -# and is read-only. -writable-files: - $(AM_V_GEN)if test -d $(release_archive_dir); then \ - for file in $(DIST_ARCHIVES); do \ - for p in ./ $(release_archive_dir)/; do \ - test -e $$p$$file || continue; \ - test -w $$p$$file \ - || { echo ERROR: $$p$$file is not writable; fail=1; }; \ - done; \ - done; \ - test "$$fail" && exit 1 || : ; \ - else :; \ - fi - -v_etc_file = $(gnulib_dir)/lib/version-etc.c -sample-test = tests/sample-test -texi = doc/$(PACKAGE).texi -# Make sure that the copyright date in $(v_etc_file) is up to date. -# Do the same for the $(sample-test) and the main doc/.texi file. -sc_copyright_check: - @require='enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' \ - in_files=$(v_etc_file) \ - halt='out of date copyright in $(v_etc_file); update it' \ - $(_sc_search_regexp) - @require='# Copyright \(C\) '$$(date +%Y)' Free' \ - in_vc_files=$(sample-test) \ - halt='out of date copyright in $(sample-test); update it' \ - $(_sc_search_regexp) - @require='Copyright @copyright\{\} .*'$$(date +%Y) \ - in_vc_files=$(texi) \ - halt='out of date copyright in $(texi); update it' \ - $(_sc_search_regexp) - -# If tests/help-version exists and seems to be new enough, assume that its -# use of init.sh and path_prepend_ is correct, and ensure that every other -# use of init.sh is identical. -# This is useful because help-version cross-checks prog --version -# with $(VERSION), which verifies that its path_prepend_ invocation -# sets PATH correctly. This is an inexpensive way to ensure that -# the other init.sh-using tests also get it right. -_hv_file ?= $(srcdir)/tests/help-version -_hv_regex_weak ?= ^ *\. .*/init\.sh" -# Fix syntax-highlighters " -_hv_regex_strong ?= ^ *\. "\$${srcdir=\.}/init\.sh" -sc_cross_check_PATH_usage_in_tests: - @if test -f $(_hv_file); then \ - grep -l 'VERSION mismatch' $(_hv_file) >/dev/null \ - || { echo "$@: skipped: no such file: $(_hv_file)" 1>&2; \ - exit 0; }; \ - grep -lE '$(_hv_regex_strong)' $(_hv_file) >/dev/null \ - || { echo "$@: $(_hv_file) lacks conforming use of init.sh" 1>&2; \ - exit 1; }; \ - good=$$(grep -E '$(_hv_regex_strong)' $(_hv_file)); \ - grep -LFx "$$good" \ - $$(grep -lE '$(_hv_regex_weak)' $$($(VC_LIST_EXCEPT))) \ - | grep . && \ - { echo "$(ME): the above files use path_prepend_ inconsistently" \ - 1>&2; exit 1; } || :; \ - fi - -# BRE regex of file contents to identify a test script. -_test_script_regex ?= \ - -# In tests, use "compare expected actual", not the reverse. -sc_prohibit_reversed_compare_failure: - @prohibit='\ vc-diffs || : - $(AM_V_at)if test -s vc-diffs; then \ - cat vc-diffs; \ - echo "Some files are locally modified:" 1>&2; \ - exit 1; \ - else \ - rm vc-diffs; \ - fi - -rel-files = $(DIST_ARCHIVES) - -gnulib_dir ?= $(srcdir)/gnulib -gnulib-version = $$(cd $(gnulib_dir) \ - && { git describe || git rev-parse --short=10 HEAD; } ) -bootstrap-tools ?= autoconf,automake,gnulib - -gpgv = $$(gpgv2 --version >/dev/null && echo gpgv2 || echo gpgv) -# If it's not already specified, derive the GPG key ID from -# the signed tag we've just applied to mark this release. -gpg_key_ID ?= \ - $$(cd $(srcdir) \ - && git cat-file tag v$(VERSION) \ - | $(gpgv) --status-fd 1 --keyring /dev/null - - 2>/dev/null \ - | awk '/^\[GNUPG:\] ERRSIG / {print $$3; exit}') - -translation_project_ ?= coordinator@translationproject.org - -# Make info-gnu the default only for a stable release. -announcement_Cc_stable = $(translation_project_), $(PACKAGE_BUGREPORT) -announcement_mail_headers_stable = \ - To: info-gnu@gnu.org \ - Cc: $(announcement_Cc_) \ - Mail-Followup-To: $(PACKAGE_BUGREPORT) - -announcement_Cc_alpha = $(translation_project_) -announcement_mail_headers_alpha = \ - To: $(PACKAGE_BUGREPORT) \ - Cc: $(announcement_Cc_) - -announcement_mail_Cc_beta = $(announcement_mail_Cc_alpha) -announcement_mail_headers_beta = $(announcement_mail_headers_alpha) - -announcement_mail_Cc_ ?= $(announcement_mail_Cc_$(release-type)) -announcement_mail_headers_ ?= $(announcement_mail_headers_$(release-type)) -announcement: NEWS ChangeLog $(rel-files) -# Not $(AM_V_GEN) since the output of this command serves as -# announcement message: it would start with " GEN announcement". - $(AM_V_at)$(srcdir)/$(_build-aux)/announce-gen \ - --mail-headers='$(announcement_mail_headers_)' \ - --release-type=$(release-type) \ - --package=$(PACKAGE) \ - --prev=$(PREV_VERSION) \ - --curr=$(VERSION) \ - --gpg-key-id=$(gpg_key_ID) \ - --srcdir=$(srcdir) \ - --news=$(srcdir)/NEWS \ - --bootstrap-tools=$(bootstrap-tools) \ - $$(case ,$(bootstrap-tools), in (*,gnulib,*) \ - echo --gnulib-version=$(gnulib-version);; esac) \ - --no-print-checksums \ - $(addprefix --url-dir=, $(url_dir_list)) - -.PHONY: release-commit -release-commit: - $(AM_V_GEN)cd $(srcdir) \ - && $(_build-aux)/do-release-commit-and-tag \ - -C $(abs_builddir) $(RELEASE) - -## ---------------- ## -## Updating files. ## -## ---------------- ## - -ftp-gnu = ftp://ftp.gnu.org/gnu -www-gnu = http://www.gnu.org - -upload_dest_dir_ ?= $(PACKAGE) -upload_command = \ - $(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \ - --to $(gnu_rel_host):$(upload_dest_dir_) \ - $(rel-files) -emit_upload_commands: - @echo ===================================== - @echo ===================================== - @echo '$(upload_command)' - @echo '# send the ~/announce-$(my_distdir) e-mail' - @echo ===================================== - @echo ===================================== - -.PHONY: upload -upload: - $(AM_V_GEN)$(upload_command) - -define emit-commit-log - printf '%s\n' 'maint: post-release administrivia' '' \ - '* NEWS: Add header line for next release.' \ - '* .prev-version: Record previous version.' \ - '* cfg.mk (old_NEWS_hash): Auto-update.' -endef - -.PHONY: no-submodule-changes -no-submodule-changes: - $(AM_V_GEN)if test -d $(srcdir)/.git \ - && git --version >/dev/null 2>&1; then \ - diff=$$(cd $(srcdir) && git submodule -q foreach \ - git diff-index --name-only HEAD) \ - || exit 1; \ - case $$diff in '') ;; \ - *) echo '$(ME): submodule files are locally modified:'; \ - echo "$$diff"; exit 1;; esac; \ - else \ - : ; \ - fi - -submodule-checks ?= no-submodule-changes public-submodule-commit - -# Ensure that each sub-module commit we're using is public. -# Without this, it is too easy to tag and release code that -# cannot be built from a fresh clone. -.PHONY: public-submodule-commit -public-submodule-commit: - $(AM_V_GEN)if test -d $(srcdir)/.git \ - && git --version >/dev/null 2>&1; then \ - cd $(srcdir) && \ - git submodule --quiet foreach \ - 'test "$$(git rev-parse "$$sha1")" \ - = "$$(git merge-base origin "$$sha1")"' \ - || { echo '$(ME): found non-public submodule commit' >&2; \ - exit 1; }; \ - else \ - : ; \ - fi -# This rule has a high enough utility/cost ratio that it should be a -# dependent of "check" by default. However, some of us do occasionally -# commit a temporary change that deliberately points to a non-public -# submodule commit, and want to be able to use rules like "make check". -# In that case, run e.g., "make check gl_public_submodule_commit=" -# to disable this test. -gl_public_submodule_commit ?= public-submodule-commit -check: $(gl_public_submodule_commit) - -.PHONY: alpha beta stable release -ALL_RECURSIVE_TARGETS += alpha beta stable -alpha beta stable: $(local-check) writable-files $(submodule-checks) - $(AM_V_GEN)test $@ = stable \ - && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$' \ - || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\ - || : - $(AM_V_at)$(MAKE) vc-diff-check - $(AM_V_at)$(MAKE) news-check - $(AM_V_at)$(MAKE) distcheck - $(AM_V_at)$(MAKE) dist - $(AM_V_at)$(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ - $(AM_V_at)$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ - -release: - $(AM_V_GEN)$(MAKE) _version - $(AM_V_GEN)$(MAKE) $(release-type) - -# Override this in cfg.mk if you follow different procedures. -release-prep-hook ?= release-prep - -gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?] -.PHONY: release-prep -release-prep: - $(AM_V_GEN)$(MAKE) --no-print-directory -s announcement \ - > ~/announce-$(my_distdir) - $(AM_V_at)if test -d $(release_archive_dir); then \ - ln $(rel-files) $(release_archive_dir); \ - chmod a-w $(rel-files); \ - fi - $(AM_V_at)echo $(VERSION) > $(prev_version_file) - $(AM_V_at)$(MAKE) update-NEWS-hash - $(AM_V_at)perl -pi \ - -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' \ - $(srcdir)/NEWS - $(AM_V_at)msg=$$($(emit-commit-log)) || exit 1; \ - cd $(srcdir) && $(VC) commit -m "$$msg" -a - -# Override this with e.g., -s $(srcdir)/some_other_name.texi -# if the default $(PACKAGE)-derived name doesn't apply. -gendocs_options_ ?= - -.PHONY: web-manual -web-manual: - $(AM_V_GEN)test -z "$(manual_title)" \ - && { echo define manual_title in cfg.mk 1>&2; exit 1; } || : - $(AM_V_at)cd '$(srcdir)/doc'; \ - $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \ - -o '$(abs_builddir)/doc/manual' \ - --email $(PACKAGE_BUGREPORT) $(PACKAGE) \ - "$(PACKAGE_NAME) - $(manual_title)" - $(AM_V_at)echo " *** Upload the doc/manual directory to web-cvs." - -.PHONY: web-manual-update -web-manual-update: - $(AM_V_GEN)cd $(srcdir) \ - && $(_build-aux)/gnu-web-doc-update -C $(abs_builddir) - - -# Code Coverage - -init-coverage: - $(MAKE) $(AM_MAKEFLAGS) clean - lcov --directory . --zerocounters - -COVERAGE_CCOPTS ?= "-g --coverage" -COVERAGE_OUT ?= doc/coverage - -build-coverage: - $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) - $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) check - mkdir -p $(COVERAGE_OUT) - lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \ - --capture - -gen-coverage: - genhtml --output-directory $(COVERAGE_OUT) \ - $(COVERAGE_OUT)/$(PACKAGE).info \ - --highlight --frames --legend \ - --title "$(PACKAGE_NAME)" - -coverage: init-coverage build-coverage gen-coverage - -# Some projects carry local adjustments for gnulib modules via patches in -# a gnulib patch directory whose default name is gl/ (defined in bootstrap -# via local_gl_dir=gl). Those patches become stale as the originals evolve -# in gnulib. Use this rule to refresh any stale patches. It applies each -# patch to the original in $(gnulib_dir) and uses the temporary result to -# generate a fuzz-free .diff file. If you customize the name of your local -# gnulib patch directory via bootstrap.conf, this rule detects that name. -# Run this from a non-VPATH (i.e., srcdir) build directory. -.PHONY: refresh-gnulib-patches -refresh-gnulib-patches: - gl=gl; \ - if test -f bootstrap.conf; then \ - t=$$(perl -lne '/^\s*local_gl_dir=(\S+)/ and $$d=$$1;' \ - -e 'END{defined $$d and print $$d}' bootstrap.conf); \ - test -n "$$t" && gl=$$t; \ - fi; \ - for diff in $$(cd $$gl; git ls-files | grep '\.diff$$'); do \ - b=$$(printf %s "$$diff"|$(SED) 's/\.diff$$//'); \ - VERSION_CONTROL=none \ - patch "$(gnulib_dir)/$$b" "$$gl/$$diff" || exit 1; \ - ( cd $(gnulib_dir) || exit 1; \ - git diff "$$b" > "../$$gl/$$diff"; \ - git checkout $$b ) || exit 1; \ - done - -# Update gettext files. -PACKAGE ?= $(shell basename $(PWD)) -PO_DOMAIN ?= $(PACKAGE) -POURL = http://translationproject.org/latest/$(PO_DOMAIN)/ -PODIR ?= po -refresh-po: - rm -f $(PODIR)/*.po && \ - echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \ - wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \ - echo 'en@boldquot' > $(PODIR)/LINGUAS && \ - echo 'en@quot' >> $(PODIR)/LINGUAS && \ - ls $(PODIR)/*.po | $(SED) 's/\.po//;s,$(PODIR)/,,' | \ - sort >> $(PODIR)/LINGUAS - - # Running indent once is not idempotent, but running it twice is. -INDENT_SOURCES ?= $(C_SOURCES) -.PHONY: indent -indent: - indent $(INDENT_SOURCES) - indent $(INDENT_SOURCES) - -# If you want to set UPDATE_COPYRIGHT_* environment variables, -# put the assignments in this variable. -update-copyright-env ?= - -# Run this rule once per year (usually early in January) -# to update all FSF copyright year lists in your project. -# If you have an additional project-specific rule, -# add it in cfg.mk along with a line 'update-copyright: prereq'. -# By default, exclude all variants of COPYING; you can also -# add exemptions (such as ChangeLog..* for rotated change logs) -# in the file .x-update-copyright. -.PHONY: update-copyright -update-copyright: - $(AM_V_GEN)grep -l -w Copyright \ - $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \ - | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@ - -# This tight_scope test is skipped with a warning if $(_gl_TS_headers) is not -# overridden and $(_gl_TS_dir)/Makefile.am does not mention noinst_HEADERS. - -# NOTE: to override any _gl_TS_* default value, you must -# define the variable(s) using "export" in cfg.mk. -_gl_TS_dir ?= src - -ALL_RECURSIVE_TARGETS += sc_tight_scope -sc_tight_scope: tight-scope.mk - @fail=0; \ - if ! grep '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk \ - > /dev/null \ - && ! grep -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \ - > /dev/null 2>&1; then \ - echo '$(ME): skipping $@'; \ - else \ - $(MAKE) -s -C $(_gl_TS_dir) \ - -f Makefile \ - -f $(abs_top_srcdir)/cfg.mk \ - -f $(abs_top_builddir)/$< \ - _gl_tight_scope \ - || fail=1; \ - fi; \ - rm -f $<; \ - exit $$fail - -tight-scope.mk: $(ME) - @rm -f $@ $@-t - @perl -ne '/^# TS-start/.../^# TS-end/ and print' $(srcdir)/$(ME) > $@-t - @chmod a=r $@-t && mv $@-t $@ - -ifeq (a,b) -# TS-start - -# Most functions should have static scope. -# Any that don't must be marked with 'extern', but 'main' -# and 'usage' are exceptions: they're always extern, but -# do not need to be marked. Symbols matching '__.*' are -# reserved by the compiler, so are automatically excluded below. -_gl_TS_unmarked_extern_functions ?= main usage -_gl_TS_function_match ?= /^(?:$(_gl_TS_extern)) +.*?(\w+) *\(/ - -# If your project uses a macro like "XTERN", then put -# the following in cfg.mk to override this default: -# export _gl_TS_extern = extern|XTERN -_gl_TS_extern ?= extern - -# The second nm|grep checks for file-scope variables with 'extern' scope. -# Without gnulib's progname module, you might put program_name here. -# Symbols matching '__.*' are reserved by the compiler, -# so are automatically excluded below. -_gl_TS_unmarked_extern_vars ?= - -# NOTE: the _match variables are perl expressions -- not mere regular -# expressions -- so that you can extend them to match other patterns -# and easily extract matched variable names. -# For example, if your project declares some global variables via -# a macro like this: GLOBAL(type, var_name, initializer), then you -# can override this definition to automatically extract those names: -# export _gl_TS_var_match = \ -# /^(?:$(_gl_TS_extern)) .*?\**(\w+)(\[.*?\])?;/ || /\bGLOBAL\(.*?,\s*(.*?),/ -_gl_TS_var_match ?= /^(?:$(_gl_TS_extern)) .*?(\w+)(\[.*?\])?;/ - -# The names of object files in (or relative to) $(_gl_TS_dir). -_gl_TS_obj_files ?= *.$(OBJEXT) - -# Files in which to search for the one-line style extern declarations. -# $(_gl_TS_dir)-relative. -_gl_TS_headers ?= $(noinst_HEADERS) -_gl_TS_other_headers ?= *.h - -.PHONY: _gl_tight_scope -_gl_tight_scope: $(bin_PROGRAMS) - sed_wrap='s/^/^_?/;s/$$/$$/'; \ - t=exceptions-$$$$; \ - trap 's=$$?; rm -f $$t; exit $$s' 0; \ - for sig in 1 2 3 13 15; do \ - eval "trap 'v=`expr $$sig + 128`; (exit $$v); exit $$v' $$sig"; \ - done; \ - src=`for f in $(SOURCES); do \ - test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ - hdr=`for f in $(_gl_TS_headers); do \ - test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ - ( printf '%s\n' '__.*' $(_gl_TS_unmarked_extern_functions); \ - grep -h -A1 '^extern .*[^;]$$' $$src \ - | grep -vE '^(extern |--|#)' | $(SED) 's/ .*//; /^$$/d'; \ - perl -lne \ - '$(_gl_TS_function_match) and print $$1' $$hdr; \ - ) | sort -u | $(SED) "$$sed_wrap" > $$t; \ - nm -g $(_gl_TS_obj_files)|$(SED) -n 's/.* T //p'|grep -Ev -f $$t \ - && { echo the above functions should have static scope >&2; \ - exit 1; } || : ; \ - ( printf '%s\n' '__.*' main $(_gl_TS_unmarked_extern_vars); \ - perl -lne '$(_gl_TS_var_match) and print $$1' \ - $$hdr $(_gl_TS_other_headers) \ - ) | sort -u | $(SED) "$$sed_wrap" > $$t; \ - nm -g $(_gl_TS_obj_files) | $(SED) -n 's/.* [BCDGRS] //p' \ - | sort -u | grep -Ev -f $$t \ - && { echo the above variables should have static scope >&2; \ - exit 1; } || : -# TS-end -endif diff --git a/po/.gitignore b/po/.gitignore new file mode 100644 index 0000000000..e546090b9d --- /dev/null +++ b/po/.gitignore @@ -0,0 +1,11 @@ +/remove-potcdate.sin +/quot.sed +/insert-header.sin +/en@quot.header +/en@boldquot.header +/boldquot.sed +/Rules-quot +/Makevars.template +/Makefile.in.in +* +!POTFILES.in diff --git a/po/LINGUAS b/po/LINGUAS deleted file mode 100644 index 3aa129c735..0000000000 --- a/po/LINGUAS +++ /dev/null @@ -1,15 +0,0 @@ -en@boldquot -en@quot -cs -de -eo -fi -fr -it -ms -nl -pl -sv -uk -vi -zh_CN diff --git a/po/Makevars b/po/Makevars deleted file mode 100644 index 6487d53ac7..0000000000 --- a/po/Makevars +++ /dev/null @@ -1,41 +0,0 @@ -# Makefile variables for PO directory in any package using GNU gettext. - -# Usually the message domain is the same as the package name. -DOMAIN = $(PACKAGE) - -# These two variables depend on the location of this directory. -subdir = po -top_builddir = .. - -# These options get passed to xgettext. -XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ - -# This is the copyright holder that gets inserted into the header of the -# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding -# package. (Note that the msgstr strings, extracted from the package's -# sources, belong to the copyright holder of the package.) Translators are -# expected to transfer the copyright for their translations to this person -# or entity, or to disclaim their copyright. The empty string stands for -# the public domain; in this case the translators are expected to disclaim -# their copyright. -COPYRIGHT_HOLDER = Free Software Foundation, Inc. - -# This is the email address or URL to which the translators shall report -# bugs in the untranslated strings: -# - Strings which are not entire sentences, see the maintainer guidelines -# in the GNU gettext documentation, section 'Preparing Strings'. -# - Strings which use unclear terms or require additional context to be -# understood. -# - Strings which make invalid assumptions about notation of date, time or -# money. -# - Pluralisation problems. -# - Incorrect English spelling. -# - Incorrect formatting. -# It can be your email address, or a mailing list address where translators -# can write to without being subscribed, or the URL of a web page through -# which the translators can contact you. -MSGID_BUGS_ADDRESS = bug-gnutls@gnu.org - -# This is the list of locale categories, beyond LC_MESSAGES, for which the -# message catalogs shall be used. It is usually empty. -EXTRA_LOCALE_CATEGORIES = diff --git a/po/POTFILES.in b/po/POTFILES.in index d9fdb1f3ec..d34ab0cdb2 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,7 +1,7 @@ # List of source files which contain translatable strings. lib/alert.c lib/errors.c -lib/openpgp/output.c +lib/x509/ocsp.c lib/x509/ocsp_output.c lib/x509/output.c libdane/dane.c diff --git a/po/cs.po.in b/po/cs.po.in deleted file mode 100644 index bcf1de40aa..0000000000 --- a/po/cs.po.in +++ /dev/null @@ -1,1513 +0,0 @@ -# Czech translation of libgnutls. -# Copyright (C) 2009 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# Petr Pisar , 2009, 2011, 2012, 2013. -# -# handshake → zahájení -# -msgid "" -msgstr "" -"Project-Id-Version: libgnutls 3.2.1\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-05-29 19:03+0200\n" -"PO-Revision-Date: 2013-06-16 21:52+0200\n" -"Last-Translator: Petr Pisar \n" -"Language-Team: Czech \n" -"Language: cs\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "Oznámení o uzavření" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "Neočekávaná zpráva" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "Chybný MAC zprávy" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "Dešifrování selhalo" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "Přetečení struktury" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "Dekomprese selhala" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "Zahájení (handshake) selhalo" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "Certifikát je špatný" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "Certifikát není podporován" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "Certifikát byl odvolán" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "Certifikát vypršel" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "Neznámý certifikát" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "Neplatný parametr" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "Autorita není známa" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "Přístup byl zamítnut" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "Chyba dekódování" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "Chyba dešifrování" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "Omezení na export" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "Chyba ve verzi protokolu" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "Nedostatečné zabezpečení" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "Uživatel zrušen" - -#: lib/gnutls_alert.c:65 -msgid "No certificate (SSL 3.0)" -msgstr "Žádný certifikát (SSL 3.0)" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "Vnitřní chyba" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "Znovuvyjednání není dovoleno" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "Zadaný certifikát nebylo možné získat" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "Bylo odesláno nepodporované rozšíření" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "Odeslané jméno serveru nebylo rozpoznáno" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "SRP/PSK jméno uživatele chybí nebo není známo" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "Nebylo možné dojednat žádný podporovaný aplikační protokol" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Úspěch." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Nezdařilo se vyjednat seznam podporovaných šifer." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "Nebyly nastaveny žádné priority nebo byly nastaveny nedostatečně." - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "Tento druh šifry není podporován." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "Certifikát a daný klíč se k sobě nehodí." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Nezdařilo se vyjednat podporovanou kompresní metodu." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "Narazil jsem na neznámý algoritmus veřejného klíče." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "Byl vyjednán algoritmus, který není povolen." - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "Byl přijat packet s neplatnou verzí struktury." - -#: lib/gnutls_errors.c:70 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "Diffieho-Hellmanovo prvočíslo poslané serverem není přijatelné (není dost dlouhé)." - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "Byl přijat TLS packet s neočekávanou délkou." - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "Spojení TLS nebylo řádně ukončeno." - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "Zadaná relace byla z nějakého důvodu zneplatněna." - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "Vnitřní chyba GnuTLS." - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "Přijato neplatné rozšíření TLS." - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "Bylo přijato nepřekonatelné upozornění TLS." - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "Byl přijat neočekávaný TLS packet." - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "Bylo přijato varovné upozornění TLS." - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "Při výpočtu packetu TLS Finished došlo k chybě." - -#: lib/gnutls_errors.c:92 -msgid "No certificate was found." -msgstr "Žádný certifikát nebyl nalezen." - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "Zadaný klíč DSA není slučitelný s vybraným protokolem TLS." - -#: lib/gnutls_errors.c:96 -msgid "A heartbeat pong message was received." -msgstr "Byla přijata odpověď na udržovací zprávu." - -#: lib/gnutls_errors.c:98 -msgid "A heartbeat ping message was received." -msgstr "Byl přijat požadavek na udržovací zprávu." - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Kryptografický algoritmus s nižší prioritou je již přítomen." - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "Nebyly nalezeny žádné dočasné parametry RSA." - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "Nebyly nalezeny žádné dočasné parametry DH." - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "Byl přijat neočekávaný packet zahajující TLS." - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "Prohlížení velkého celého čísla selhalo." - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "Velké celé číslo nebylo možné exportovat." - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "Dešifrování selhalo." - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "Šifrování selhalo." - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "Dešifrovaní veřejného klíče selhalo." - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "Šifrování veřejného klíče selhalo." - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "Podepisování veřejného klíče selhalo." - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "Podpis veřejného klíče se nepodařilo ověřit." - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "Dekomprese packetu s TLS strukturou selhala." - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "Komprese packetu s TLS strukturou selhala." - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "Vnitřní chyba při alokaci paměti." - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "Byla požadována neimplementovaná nebo zakázaná vlastnost." - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "Na takový požadavek chybí prokázání totožnosti." - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "Chyba v souboru s hesly." - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "Chybná výplň v PKCS1 packetu." - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "Požadovaná relace vypršela." - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "Hašování selhalo." - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Chyba při dekódování Base64." - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "Neočekávaná Base64 hlavička (chyba)." - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Chyba kódování do Base64." - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "Chyba při rozebírání souboru s hesly." - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "Požadovaná data nebyla dostupná." - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "Chyba v pull funkci." - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "Chyba v push funkci." - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "Bylo dosaženo horní meze pořadového čísla packetu se strukturou. Zírám!" - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "Chyba v certifikátu." - -#: lib/gnutls_errors.c:157 -msgid "Could not authenticate peer." -msgstr "Nebylo možné ověřit totožnost protistrany." - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "Neznámé alternativní jméno subjektu v X.509 certifikátu." - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Nepodporované kritické rozšíření v X.509 certifikátu." - -#: lib/gnutls_errors.c:164 -msgid "Unsupported extension in X.509 certificate." -msgstr "Nepodporované rozšíření v X.509 certifikátu." - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "Bylo zaznamenáno použití klíče v rozporu s pravidly." - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "Zdroj je dočasně nedostupný, zkusí se znovu." - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "Přenášený packet je příliš velký (EMSGSIZE)." - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "Funkce byla přerušena." - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "Druhá strana požádala o znovuzahájení relace." - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "Byla přijata aplikační data TLS, zatímco měla přijít data zahájení." - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "Chyba databázovém jádře." - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "Tento druh certifikátu není podporován." - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "Zadaný paměťový buffer je pro uložení parametrů příliš malý." - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "Požadavek je neplatný." - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "Cookie byl chybný." - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "Byl přijat neplatný parametr." - -#: lib/gnutls_errors.c:187 -msgid "An illegal parameter was found." -msgstr "Byl nalezen neplatný parametr." - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "Chyba při čtení souboru." - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "ASN1 parser: Prvek nebyl nalezen." - -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "ASN1 parser: Identifikátor nebyl nalezen." - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "ASN1 parser: Chyba při rozebírání DER." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "ASN1 parser: Hodnota nebyla nalezena." - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "ASN1 parser: Obecná chyba při rozebírání." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "ASN1 parser: Hodnota není platná." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "ASN1 parser: Chyba ve ZNAČCE." - -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "ASN1 parser: chyba v implicitní značce" - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "ASN1 parser: Chyba v typu „ANY“." - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "ASN1 parser: Chyba syntaxe." - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "ASN1 parser: Přetečení při rozebírání DER." - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "Bylo přijato příliš mnoho packetů s prázdnou strukturou." - -#: lib/gnutls_errors.c:215 -msgid "Too many handshake packets have been received." -msgstr "Bylo přijato příliš mnoho zahajovacích packetů." - -#: lib/gnutls_errors.c:217 -msgid "The crypto library version is too old." -msgstr "Verze kryptografické knihovny je příliš stará." - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "Verze knihovny tasn1 je příliš stará." - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "ID OpenPGP uživatele bylo odvoláno." - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "OpenPGP klíč postrádá množinu přednostních klíčů." - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "Chyba při načítání souboru s klíči. " - -#: lib/gnutls_errors.c:228 -msgid "The initialization of crypto backend has failed." -msgstr "Inicializace kryptografického jádra selhala." - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "Žádné podporované kompresní algoritmy nebyly nalezeny." - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "Žádné podporované režimy šifer nebyly nalezeny." - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "Nebylo možné získat OpenPGP klíč." - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "Nebylo možné najít OpenPGP podklíč." - -#: lib/gnutls_errors.c:238 -msgid "Safe renegotiation failed." -msgstr "Bezpečné znovuvyjednání selhalo." - -#: lib/gnutls_errors.c:240 -msgid "Unsafe renegotiation denied." -msgstr "Nebezpečné znovuvyjednání je zakázáno." - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "Zadané SRP uživatelské jméno je neplatné." - -#: lib/gnutls_errors.c:245 -msgid "The SRP username supplied is unknown." -msgstr "Zadané SRP uživatelské jméno není známo." - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "OpenPGP otisk není podporován." - -#: lib/gnutls_errors.c:250 -msgid "The signature algorithm is not supported." -msgstr "Algoritmus podpisu není podporován." - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "Certifikát má nepodporované atributy." - -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "Tento OID není podporován." - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "Hašovací algoritmus není znám." - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "Typ obsahu struktury PKCS není znám." - -# „Bag“ překládá jako „kufřík“ Klíma -# . Jedná se -# o prvek struktury PFX. -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "Typ kufříku ve struktuře PKCS není znám." - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "Zadané heslo obsahuje neplatné znaky." - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "MAC (autentizační kód zprávy) se nepodařilo ověřit." - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "Některé hranice omezení byly dosaženy." - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "Nezdařilo se získat náhodná data." - -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "Přijata TLS/IA zpráva Intermediate Phase Finished" - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "Přijata TLS/IA zpráva Final Phase Finished" - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "Kontrolní součet fáze TLS/IA se nepodařilo ověřit" - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "Zadaný algoritmus nebo protokol není znám." - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "Velikost zahajovacích dat je příliš velká." - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "Chyba při otevírání /dev/crypto" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "Chyba na rozhraní /dev/crypto" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "Protistrana ukončila spojení" - -#: lib/gnutls_errors.c:291 -msgid "Channel binding data not available" -msgstr "Údaje o vazbě kanálu nejsou dostupné" - -#: lib/gnutls_errors.c:294 -msgid "TPM error." -msgstr "Chyba TPM." - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "TPM není inicializován." - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "Klíč TPM nebyl v trvalém úložišti nalezen." - -#: lib/gnutls_errors.c:300 -msgid "Cannot initialize a session with the TPM." -msgstr "Nelze zahájit relaci s TPM." - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error." -msgstr "Chyba PKCS #11." - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "Chyba inicializace PKCS #11." - -#: lib/gnutls_errors.c:306 -msgid "Error in parsing." -msgstr "Chyba rozboru." - -#: lib/gnutls_errors.c:308 -msgid "Error in provided PIN." -msgstr "Chyba v poskytnutém PIN." - -#: lib/gnutls_errors.c:310 -msgid "Error in provided SRK password for TPM." -msgstr "Chyba v poskytnutém heslu SRK pro TPM." - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "Chyba v poskytnutém heslu pro klíč, který se měl nahrát do TPM." - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "PKCS #11 chyba ve slotu" - -#: lib/gnutls_errors.c:316 -msgid "Thread locking error" -msgstr "Chyba zamykaní vlákna" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "PKCS #11 chyba v atributu" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "PKCS #11 chyba v zařízení" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "PKCS #11 chyba v datech" - -#: lib/gnutls_errors.c:324 -msgid "PKCS #11 unsupported feature" -msgstr "Nepodporovaná vlastnost PKCS #11" - -#: lib/gnutls_errors.c:326 -msgid "PKCS #11 error in key" -msgstr "PKCS #11 chyba v klíči" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "PKCS #11 PINu vypršela platnost" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "PKCS #11 PIN uzamknut" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "PKCS #11 chyba v relaci" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "PKCS #11 chyba v podpisu" - -# XXX: Nepřekládat jako zařízení, hláška „PKCS #11 error in device“ již -# existuje. -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "PKCS #11 chyba v tokenu" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "PKCS #11 chyba uživatele" - -#: lib/gnutls_errors.c:340 -msgid "The operation timed out" -msgstr "Operace neskončila v řádném čase" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "Operace byla zrušena kvůli chybě uživatele" - -#: lib/gnutls_errors.c:344 -msgid "No supported ECC curves were found" -msgstr "Nebyly nalezeny žádné podporované křivky ECC" - -#: lib/gnutls_errors.c:346 -msgid "The curve is unsupported" -msgstr "Tato křivka není podporována" - -#: lib/gnutls_errors.c:348 -msgid "The requested PKCS #11 object is not available" -msgstr "Požadovaný PKCS #11 object není dostupný" - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "Poskytnutý seznam certifikátů X.509 není seřazen (od předmětu po vydavatele)" - -#: lib/gnutls_errors.c:352 -msgid "The OCSP response is invalid" -msgstr "Odpověď OCSP je neplatná" - -#: lib/gnutls_errors.c:354 -msgid "There is no certificate status (OCSP)." -msgstr "Chybí stav certifikátu (OCSP)." - -#: lib/gnutls_errors.c:356 -msgid "Error in the system's randomness device." -msgstr "Chyba v zařízení se systémovým zdrojem náhody." - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "Nebylo možné dojednat žádný společný aplikační protokol." - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(neznámý chybový kód)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\tUžití klíče:\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "chyba: get_key_usage: %s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tDigitální podpisy.\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tŠifrování komunikace.\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tŠifrování uložených dat.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tAutentizace.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tPodepisování certifikátu.\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tID (hex): " - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\tOtisk (hex): " - -#: lib/openpgp/output.c:126 -msgid "\tFingerprint's random art:\n" -msgstr "\tUmění náhody otisku:\n" - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\tOdvolán: Ano\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\tOdvolán: Ne\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\tČasová razítka:\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tVytvoření: %s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tVypršení: Nikdy\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tVypršení: %s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "není známo" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tAlgoritmus veřejného klíče: %s\n" - -#: lib/openpgp/output.c:219 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\tÚroveň bezpečnosti klíče: %s\n" - -# TODO: Pluralize -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tModul (%d bitů:)\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\tMocnitel:\n" - -# TODO: Pluralize -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tVeřejný klíč (%d bitů):\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tVerze: %d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tJméno[%d]: %s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tOdvolané jméno[%d]: %s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tPodklíč[%d]:\n" - -#: lib/openpgp/output.c:400 -#, c-format -msgid "name[%d]: %s, " -msgstr "jméno[%d]: %s, " - -#: lib/openpgp/output.c:402 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "odvolané jméno[%d]: %s, " - -#: lib/openpgp/output.c:422 -msgid "fingerprint: " -msgstr "otisk: " - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "vytvořen: %s, " - -#: lib/openpgp/output.c:452 -msgid "never expires, " -msgstr "platnost nikdy nevyprší, " - -#: lib/openpgp/output.c:460 -#, c-format -msgid "expires: %s, " -msgstr "platnost vyprší: %s, " - -#: lib/openpgp/output.c:472 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "algoritmus klíče %s (%d bitů)" - -#: lib/openpgp/output.c:474 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "neznámý algoritmus klíče (%d)" - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "Informace o OpenPGP certifikátu:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\tHexavýpis: " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "Údaje požadavku OCSP:\n" - -#: lib/x509/ocsp_output.c:298 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "\tID respondenta: %.*s\n" - -#: lib/x509/ocsp_output.c:316 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\tVyrobeno v: %s\n" - -#: lib/x509/ocsp_output.c:410 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\tČas odvolání: %s\n" - -#: lib/x509/ocsp_output.c:425 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\tTato aktualizace: %s\n" - -#: lib/x509/ocsp_output.c:440 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\tDalší aktualizace: %s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tAlgoritmus podpisu: %s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "varování: podepsáno vadným podpisovým algoritmem, kterým lze falšovat.\n" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\tPodpis:\n" - -#: lib/x509/ocsp_output.c:619 -msgid "OCSP Response Information:\n" -msgstr "Údaje odpovědi OCSP:\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "pozor: alternativní jméno obsahuje znak NULL, bude nahrazen „!“\n" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tOmezení délky cesty: %d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\tJazyk politiky: %s" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\tPolitika:\n" -"\t\t\t\tASCII: " - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\tŠestnáctkový výpis: " - -#: lib/x509/output.c:185 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\tZpůsob přístupu: %.*s" - -#: lib/x509/output.c:428 -#, c-format -msgid "%sDigital signature.\n" -msgstr "%sDigitální podpis.\n" - -#: lib/x509/output.c:430 -#, c-format -msgid "%sNon repudiation.\n" -msgstr "%sNepopiratelnost.\n" - -#: lib/x509/output.c:432 -#, c-format -msgid "%sKey encipherment.\n" -msgstr "%sŠifrování klíčů.\n" - -#: lib/x509/output.c:434 -#, c-format -msgid "%sData encipherment.\n" -msgstr "%sŠifrování dat.\n" - -#: lib/x509/output.c:436 -#, c-format -msgid "%sKey agreement.\n" -msgstr "%sDohodnutí klíče.\n" - -#: lib/x509/output.c:438 -#, c-format -msgid "%sCertificate signing.\n" -msgstr "%sPodepisování certifikátu.\n" - -#: lib/x509/output.c:440 -#, c-format -msgid "%sCRL signing.\n" -msgstr "%sPodepisování CRL.\n" - -#: lib/x509/output.c:442 -#, c-format -msgid "%sKey encipher only.\n" -msgstr "%sPouze šifrování klíčů.\n" - -#: lib/x509/output.c:444 -#, c-format -msgid "%sKey decipher only.\n" -msgstr "%sPouze dešifrování klíčů.\n" - -#: lib/x509/output.c:482 -#, c-format -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\t\tNe před: %s\n" - -#: lib/x509/output.c:489 -#, c-format -msgid "\t\t\tNot After: %s\n" -msgstr "\t\t\tNe po: %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "pozor: distribuční místo CRL obsahuje znak NULL, bude nahrazen „!“\n" - -#: lib/x509/output.c:632 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tTLS WWW server.\n" - -#: lib/x509/output.c:634 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tTLS WWW klient.\n" - -#: lib/x509/output.c:636 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\tPodepisování kódu.\n" - -#: lib/x509/output.c:638 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tOchrana e-mailu.\n" - -#: lib/x509/output.c:640 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\tČasové razítkování.\n" - -#: lib/x509/output.c:642 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tPodepisování OCSP.\n" - -#: lib/x509/output.c:644 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIPsec IKE.\n" - -#: lib/x509/output.c:646 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\tJakýkoliv účel.\n" - -#: lib/x509/output.c:677 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\tCertifikační autorita (CA): NE\n" - -#: lib/x509/output.c:679 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\tCertifikační autorita (CA): ANO\n" - -#: lib/x509/output.c:682 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\tOmezení délky cesty: %d\n" - -#: lib/x509/output.c:814 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tXMPP adresa: %.*s\n" - -#: lib/x509/output.c:819 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "%s\t\t\tOID dalšíhoJména: %.*s\n" - -#: lib/x509/output.c:821 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "%s\t\t\tdalšíJméno v DER: " - -#: lib/x509/output.c:823 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" -"\n" -"%s\t\t\tdalšíJméno v ASCII: " - -#: lib/x509/output.c:945 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\tRozšíření:\n" - -#: lib/x509/output.c:955 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\tZákladní omezení (%s):\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "kritické" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "není kritické" - -#: lib/x509/output.c:970 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "%s\t\tIdentifikátor klíče subjektu (%s):\n" - -#: lib/x509/output.c:1028 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "%s\t\tIdentifikátor klíče autority (%s):\n" - -#: lib/x509/output.c:1044 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\tUžití klíče (%s):\n" - -#: lib/x509/output.c:1061 -#, c-format -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "%s\t\tObdobí užití soukromého klíče (%s):\n" - -#: lib/x509/output.c:1076 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\tÚčel klíče (%s):\n" - -#: lib/x509/output.c:1090 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "%s\t\tAlternativní jméno subjektu (%s):\n" - -#: lib/x509/output.c:1105 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "%s\t\tAlternativní jméno vydavatele (%s):\n" - -#: lib/x509/output.c:1120 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tMísta distribuce CRL (%s):\n" - -#: lib/x509/output.c:1135 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\tInformace o zástupném certifikátu (%s):\n" - -#: lib/x509/output.c:1145 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "%s\t\tPřístup k údajům o autoritě (%s):\n" - -#: lib/x509/output.c:1157 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\tNeznámé rozšíření %s (%s):\n" - -#: lib/x509/output.c:1204 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII: " - -#: lib/x509/output.c:1208 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\tHexavýpis: " - -#: lib/x509/output.c:1237 -#, c-format -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\t%sAlgoritmus veřejného klíče: %s\n" - -# TODO: Pluralize -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "\tÚroveň bezpečnosti algoritmu: %s (%d bitů)\n" - -# TODO: Pluralize -#: lib/x509/output.c:1254 -#, c-format -msgid "\t\tModulus (bits %d): " -msgstr "\t\tModul (%d bitů): " - -# TODO: Pluralize -#: lib/x509/output.c:1257 -#, c-format -msgid "\t\tExponent (bits %d): " -msgstr "\t\tMocnitel (%d bitů): " - -# TODO: Pluralize -#: lib/x509/output.c:1265 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tMocnitel (%d bitů):\n" - -#: lib/x509/output.c:1286 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\tKřivka:\t%s\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX: " - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY: " - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -# TODO: Pluralize -#: lib/x509/output.c:1322 -#, c-format -msgid "\t\tPublic key (bits %d): " -msgstr "\t\tVeřejný klíč (%d bitů): " - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP: " - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ: " - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG: " - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -msgid "Subject " -msgstr "Subjekt " - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\tSériové číslo (hex): " - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tVydavatel: %s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\tPlatnost:\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tNe před: %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tNe po: %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\tSubjekt: %s\n" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tMD5 otisk:\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tSHA-1 otisk:\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tID veřejného klíče:\n" -"\t\t" - -#: lib/x509/output.c:1627 -msgid "\tPublic key's random art:\n" -msgstr "\tUmění náhody veřejného klíče:\n" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "podepsáno pomocí %s (rozbito!), " - -#: lib/x509/output.c:1725 -#, c-format -msgid "signed using %s, " -msgstr "podepsáno pomocí %s, " - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "Informace X.509 certifikátu:\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "Další Informace:\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\tVerze: 1 (implicitní)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\tData aktualizací:\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tVydáno: %s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tDalší v: %s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\tRozšíření:\n" - -#: lib/x509/output.c:2007 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tČíslo CRL (%s): " - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tIdentifikátor klíče autority (%s):\n" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tNeznámé rozšíření %s (%s):\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tOdvolané certifikáty (%d):\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\tŽádné odvolané certifikáty.\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tSériové číslo (hex): " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tOdvoláno v: %s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "Informace o seznamu odvolaných X.509 certifikátů (CRL):\n" - -#: lib/x509/output.c:2315 -msgid "\tAttributes:\n" -msgstr "\tAtributy:\n" - -#: lib/x509/output.c:2367 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "\t\tHeslo výzvy: %s\n" - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tNeznámý atribut %s:\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "Údaje o PKCS #10 žádosti o certifikát:\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "Užití veřejného klíče:\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "ID veřejného klíče: " - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "Informace o veřejném klíči:\n" - -#~ msgid "PKCS #11 error in PIN." -#~ msgstr "Chyba PKCS #11 v PIN." - -#~ msgid "PKCS #11 PIN should be saved." -#~ msgstr "PKCS #11 PIN by měl být uložen." - -#~ msgid "\tSubject Public Key Algorithm: %s\n" -#~ msgstr "\tAlgoritmus veřejného klíče subjektu: %s\n" - -#~ msgid "The peer did not send any certificate." -#~ msgstr "Druhá strana neposlala žádný certifikát." - -#~ msgid "The initialization of GnuTLS-extra has failed." -#~ msgstr "Inicializace GnuTLS-extra selhala." - -#~ msgid "The GnuTLS library version does not match the GnuTLS-extra library version." -#~ msgstr "Verze knihovny GnuTLS se neshoduje s verzí knihovny GnuTLS-extra." - -#~ msgid "The initialization of LZO has failed." -#~ msgstr "Inicializace LZO selhala." - -#~ msgid "The handshake data size is too large (DoS?), check gnutls_handshake_set_max_packet_length()." -#~ msgstr "Zahajovací data jsou příliš velká (DoS?), zkontrolujte gnutls_handshake_set_max_packet_length()." - -#~ msgid "Inner application negotiation failed" -#~ msgstr "Vyjednávání vnitřní aplikace (IA) selhalo" - -#~ msgid "Inner application verification failed" -#~ msgstr "Ověření vnitřní aplikace (IA) selhalo" diff --git a/po/de.po.in b/po/de.po.in deleted file mode 100644 index 7604d95b83..0000000000 --- a/po/de.po.in +++ /dev/null @@ -1,1482 +0,0 @@ -# German libgnutls translation. -# Copyright (C) 2006 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# Jens Seidel , 2006. -# Michael Piefel , 2006. -# Mario Blättermann , 2012, 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: libgnutls 3.2.3\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-07-28 23:51+0200\n" -"PO-Revision-Date: 2013-08-03 19:39+0100\n" -"Last-Translator: Mario Blättermann \n" -"Language-Team: German \n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.5.4\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "Benachrichtigung schließen" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "Unerwartete Meldung" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "Entschlüsselung schlug fehl" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "Datensatzüberlauf" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "Dekomprimierung schlug fehl" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "Handshake schlug fehl" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "Fehlerhaftes Zertifikat" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "Zertifikat wird nicht unterstützt" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "Zertifikat wurde widerrufen" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "Zertifikat ist abgelaufen" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "Unbekanntes Zertifikat" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "Ungültiger Parameter" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "Zertifizierungsstelle ist unbekannt" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "Zugriff wurde verweigert" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "Dekodierungsfehler" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "Entschlüsselungsfehler" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "Exportbeschränkung" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "Fehler in der Protokollversion" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "Unzureichende Sicherheit" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "Benutzerabbruch" - -#: lib/gnutls_alert.c:65 -msgid "No certificate (SSL 3.0)" -msgstr "Kein Zertifikat (SSL 3.0)" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "Interner Fehler" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "Neuverhandlung ist nicht erlaubt" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "Das angegebene Zertifikat konnte nicht geholt werden" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "Eine nicht unterstützte Erweiterung wurde gesendet" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "Der gesendete Servername wurde nicht erkannt" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "Der SRP/PSK-Benutzername fehlt oder ist unbekannt" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "Es konnte kein unterstütztes Anwendungsprotokoll ausgehandelt werden" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Erfolg." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Konnte keine unterstützte Code-Suite aushandeln." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "Es wurden keine oder ungenügende Prioritäten festgelegt." - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "Der Code-Typ wird nicht unterstützt." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "Das Zertifikat und der gegebene Schlüssel passen nicht zueinander." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Konnte keine unterstützte Kompressionsmethode aushandeln." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "Ein unbekannter öffentlicher-Schlüssel-Algorithmus trat auf." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "Ein nicht aktivierter Algorithmus wurde ausgehandelt." - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "Ein Datensatzpaket mit illegaler Version wurde empfangen." - -#: lib/gnutls_errors.c:70 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "Die Diffie-Hellman-Primzahl, die vom Server gesendet wurde, ist nicht akzeptabel (zu kurz)." - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "Ein TLS-Paket mit unerwarteter Länge wurde empfangen." - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "Die TLS-Verbindung wurde nicht sauber beendet." - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "Die angegebene Sitzung wurde aus irgendwelchen Gründen ungültig." - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "Interner GnuTLS-Fehler." - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "Eine illegale TLS-Erweiterung wurde empfangen." - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "Ein fataler TLS-Alarm wurde empfangen." - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "Ein unerwartetes TLS-Paket wurde empfangen." - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "Eine TLS-Warnmeldung wurde empfangen." - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "Ein Fehler trat bei der fertiggestellten TLS-Paketberechnung auf." - -#: lib/gnutls_errors.c:92 -msgid "No certificate was found." -msgstr "Kein Zertifikat gefunden." - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "Der angegebene DSA-Schlüssel ist zu dem gewählten TLS-Protokoll nicht kompatibel." - -#: lib/gnutls_errors.c:96 -#, fuzzy -msgid "A heartbeat pong message was received." -msgstr "Ein großes TLS-Datensatzpaket wurde empfangen." - -#: lib/gnutls_errors.c:98 -#, fuzzy -msgid "A heartbeat ping message was received." -msgstr "Ein großes TLS-Datensatzpaket wurde empfangen." - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Es gibt bereits einen Verschlüsselungsalgorithmus mit niederer Priorität." - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "Es wurden keine temporären RSA-Parameter gefunden." - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "Es wurden keine temporären DH-Parameter gefunden." - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "Ein unerwartetes TLS-Handshake-Paket wurde empfangen." - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "Das Lesen einer großen Ganzzahl schlug fehl." - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "Konnte keine große Ganzzahl exportieren." - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "Die Entschlüsselung schlug fehl." - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "Die Verschlüsselung schlug fehl." - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "Die Entschlüsselung mittels öffentlichem Schlüssel schlug fehl." - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "Die Verschlüsselung mittels öffentlichem Schlüssel schlug fehl." - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "Das Signieren mittels öffentlichem Schlüssel schlug fehl." - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "Die Verifizierung der Signatur mittels öffentlichem Schlüssel schlug fehl." - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "Die Dekomprimierung des TLS-Datensatzpakets schlug fehl." - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "Die Komprimierung des TLS-Datensatzpakets schlug fehl." - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "Interner Fehler bei Speicheranfoderung." - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "Eine nicht implementierte oder deaktivierte Eigenschaft wurde abgefragt." - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "Unzureichende Berechtigungsnachweise für diese Anfrage." - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "Fehler in Passwortdatei." - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "Falsche Auffüllung in PKCS1-Paket." - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "Die abgefragte Sitzung ist ausgelaufen." - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "Hashing schlug fehl." - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Base64-Entschlüsselungsfehler." - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "" - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Base64-Verschlüsselungsfehler." - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "Lesefehler in Passwortdatei." - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "Die abgefragten Daten waren nicht verfügbar." - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "Fehler in der Pull-Funktion." - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "Fehler in der Push-Funktion." - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "Das obere Limit der Datensatzpaketsequenznummern wurde erreicht. Huch!" - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "Fehler im Zertifikat." - -#: lib/gnutls_errors.c:157 -msgid "Could not authenticate peer." -msgstr "Gegenstelle konnte nicht legitimiert werden." - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "Unbekannter Betreffalternativenname im X.509-Zertifikat." - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Nicht unterstützte kritische Erweiterung im X.509-Zertifikat." - -#: lib/gnutls_errors.c:164 -msgid "Unsupported extension in X.509 certificate." -msgstr "Nicht unterstützte Erweiterung im X.509-Zertifikat." - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "Schlüsselverwendungsverletzung im Zertifikat wurde entdeckt." - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "Die Ressource ist vorübergehend nicht erreichbar, versuchen Sie es später erneut." - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "Das übertragene Paket ist zu groß (EMSGSIZE)." - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "Funktion wurde unterbrochen." - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "Neuer Handshake wurde von der Gegenstelle gefordert." - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "TLS-Anwendungsdaten wurden empfangen, während Handshake-Daten erwartet wurden." - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "Fehler im Datenbank-Backend." - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "Der Zertifikattyp wird nicht unterstützt." - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "Der verfügbare Speicherpuffer ist zu kurz, um Parameter aufzunehmen." - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "Die Anfrage ist ungültig." - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "Das Cookie war fehlerhaft." - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "Ein illegaler Parameter wurde empfangen." - -#: lib/gnutls_errors.c:187 -msgid "An illegal parameter was found." -msgstr "Ein illegaler Parameter wurde gefunden." - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "Fehler beim Dateilesen." - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "ASN1-Parser: Element wurde nicht gefunden." - -# FIXME: full stop is missing -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "ASN1-Parser: Identifikator wurde nicht gefunden." - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "ASN1-Parser: Fehler im DER-Parsen." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "ASN1-Parser: Wert wurde nicht gefunden." - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "ASN1-Parser: Allgemeiner Verarbeitungsfehler." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "ASN1-Parser: Wert ist nicht gültig." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "ASN1-Parser: Fehler in TAG." - -# FIXME: capitalisation, full stop -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "ASN1-Parser: Fehler in implizitem Tag." - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "ASN1-Parser: Fehler im Typ 'ANY'." - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "ASN1-Parser: Syntaxfehler." - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "ASN1-Parser: Überlauf beim DER-Parsen." - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "Zu viele leere Datensatzpakete wurden empfangen." - -#: lib/gnutls_errors.c:215 -msgid "Too many handshake packets have been received." -msgstr "Zu viele Handshake-Pakete wurden empfangen." - -#: lib/gnutls_errors.c:217 -msgid "The crypto library version is too old." -msgstr "Die Version der crypto-Bibliothek ist zu alt." - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "Die Version der Bibliothek tasn1 ist zu alt." - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "Die OpenPGP-Benutzerkennung wurde widerrufen." - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "Im OpenPGP-Schlüssel wurde kein bevorzugter Schlüssel gesetzt." - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "Fehler beim Laden des Schlüsselrings." - -#: lib/gnutls_errors.c:228 -msgid "The initialization of crypto backend has failed." -msgstr "Die Initialisierung des crypto-Backends schlug fehl." - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "Keine unterstützten Kompressionsalgorithmen wurden gefunden." - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "Keine unterstützten Code-Suites wurden gefunden." - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "Konnte OpenPGP-Schlüssel nicht bekommen." - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "OpenPGP-Unterschlüssel konnte nicht gefunden werden." - -#: lib/gnutls_errors.c:238 -msgid "Safe renegotiation failed." -msgstr "Sichere Neuverhandlung ist gescheitert." - -#: lib/gnutls_errors.c:240 -msgid "Unsafe renegotiation denied." -msgstr "Unsichere Neuverhandlung ist gescheitert." - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "Der angegebene SRP-Benutzername ist illegal." - -#: lib/gnutls_errors.c:245 -msgid "The SRP username supplied is unknown." -msgstr "Der angegebene SRP-Benutzername ist unbekannt." - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "Der OpenPGP-Fingerabdruck wird nicht unterstützt." - -#: lib/gnutls_errors.c:250 -msgid "The signature algorithm is not supported." -msgstr "Der Signaturalgorithmus wird nicht unterstützt." - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "Das Zertifikat hat nichtunterstützte Attribute." - -# CHECKME -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "OID wird nicht unterstützt." - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "Der Hash-Algorithmus ist unbekannt." - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "Der Inhaltstyp der PKCS-Struktur ist unbekannt." - -# CHECKME -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "Der Verpackungstyp der PKCS-Struktur ist unbekannt." - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "Das angegebene Passwort enthält ungültige Zeichen." - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "Die Überprüfung des Authentifizierungscodes der Nachricht schlug fehl." - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "Einige beschränkende Limits wurden erreicht." - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "Konnte keine zufälligen Daten erhalten." - -# FIXME: missing fullstops in next three msgid's -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "Empfing eine »TLS/IA Intermediate Phase Finished«-Mitteilung" - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "Empfing eine »TLS/IA Final Phase Finished«-Mitteilung" - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "Verifizierung der TLS/IA-Phasenprüfsumme schlug fehl" - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "Der angegebene Algorithmus oder Protokoll ist unbekannt." - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "Die Daten für den Handshake sind zu groß." - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "Fehler beim Öffnen von /dev/crypto" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "Fehler beim Erstellen der Schnittstelle zu /dev/crypto" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "Gegenstelle hat die Verbindung unterbrochen" - -#: lib/gnutls_errors.c:291 -msgid "Channel binding data not available" -msgstr "" - -#: lib/gnutls_errors.c:294 -msgid "TPM error." -msgstr "TPM-Fehler." - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "TPM ist nicht initialisiert." - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "TPM-Schlüssel wurde im persistenten Speicher nicht gefunden." - -#: lib/gnutls_errors.c:300 -msgid "Cannot initialize a session with the TPM." -msgstr "Sitzung mit TPM konnte nicht initialisiert werden." - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error." -msgstr "PKCS #11: Fehler." - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "PKCS #11: Initialisierungsfehler." - -#: lib/gnutls_errors.c:306 -msgid "Error in parsing." -msgstr "Verarbeitungsfehler." - -#: lib/gnutls_errors.c:308 -msgid "Error in provided PIN." -msgstr "Fehler in übergebener PIN." - -#: lib/gnutls_errors.c:310 -msgid "Error in provided SRK password for TPM." -msgstr "Fehler im übergebenen Passwort für TPM." - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "Fehler im übergebenen Passwort zum Laden in TPM." - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "PKCS #11: Fehler im Slot" - -#: lib/gnutls_errors.c:316 -msgid "Thread locking error" -msgstr "Fehler beim Sperren des Threads" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "PKCS #11: Fehler im Attribut" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "PKCS #11: Fehler im Gerät" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "PKCS #11: Fehler in den Daten" - -#: lib/gnutls_errors.c:324 -msgid "PKCS #11 unsupported feature" -msgstr "PKCS #11: Nicht unterstütztes Funktionsmerkmal" - -#: lib/gnutls_errors.c:326 -msgid "PKCS #11 error in key" -msgstr "PKCS #11: Fehler im Schlüssel" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "PKCS #11: PIN ist abgelaufen" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "PKCS #11: PIN ist gesperrt" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "PKCS #11: Sitzungsfehler" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "PKCS #11: Signaturfehler" - -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "PKCS #11: Fehler im Token" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "PKCS #11: Benutzerfehler" - -#: lib/gnutls_errors.c:340 -msgid "The operation timed out" -msgstr "Die Zeit für den Vorgang wurde überschritten" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "Der Vorgang wurde wegen eines Benutzerfehlers abgebrochen" - -#: lib/gnutls_errors.c:344 -msgid "No supported ECC curves were found" -msgstr "Es wurden keine unterstützten ECC-Kurven gefunden" - -#: lib/gnutls_errors.c:346 -msgid "The curve is unsupported" -msgstr "Die Kurve wird nicht unterstützt" - -#: lib/gnutls_errors.c:348 -msgid "The requested PKCS #11 object is not available" -msgstr "Das angeforderte PKCS#11-Objekt ist nicht verfügbar." - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "Die bereitgestellte Liste der X.509-Zertifikate ist nicht sortiert (in der Reihenfolge der Ausgabe)" - -#: lib/gnutls_errors.c:352 -msgid "The OCSP response is invalid" -msgstr "Die OCSP-Antwort ist ungültig" - -#: lib/gnutls_errors.c:354 -msgid "There is no certificate status (OCSP)." -msgstr "Zertifikatsstatus (OCSP) ist nicht verfügbar." - -#: lib/gnutls_errors.c:356 -msgid "Error in the system's randomness device." -msgstr "Fehler im Zufallszahlendienst des Systems." - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "Es konnte kein allgemeines Anwendungsprotokoll ausgehandelt werden." - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(Unbekannter Fehlercode)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\tSchlüsselverwendung:\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "Fehler: get_key_usage: %s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tDigitale Signaturen.\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tKommunikationsverschlüsselung.\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tVerschlüsselung gespeicherter Daten.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tAuthentifizierung.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tZertifikatsignierung.\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tID (hex): " - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\tFingerabdruck (hex): " - -#: lib/openpgp/output.c:126 -msgid "\tFingerprint's random art:\n" -msgstr "" - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\tWiderrufen: Wahr\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\tWiderrufen: Falsch\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\tZeitstempel:\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tErzeugung: %s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tAblauf: Nie\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tAblauf: %s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "unbekannt" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tAlgorithmus des öffentlichen Schlüssels: %s\n" - -#: lib/openpgp/output.c:219 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\tSicherheitsstufe des Schlüssels: %s\n" - -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tModulus (bits %d):\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\tExponent:\n" - -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tÖffentlicher Schlüssel (bits %d):\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tVersion: %d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tName[%d]: %s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tWiderrufener Name[%d]: %s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tUnterschlüssel[%d]:\n" - -#: lib/openpgp/output.c:400 -#, c-format -msgid "name[%d]: %s, " -msgstr "Name[%d]: %s, " - -#: lib/openpgp/output.c:402 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "Widerrufener Name[%d]: %s, " - -#: lib/openpgp/output.c:422 -msgid "fingerprint: " -msgstr "Fingerabdruck: " - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "erzeugt: %s, " - -#: lib/openpgp/output.c:452 -msgid "never expires, " -msgstr "läuft nie ab, " - -#: lib/openpgp/output.c:460 -#, c-format -msgid "expires: %s, " -msgstr "läuft ab: %s, " - -#: lib/openpgp/output.c:472 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "Verschlüsselungsalgorithmus %s (%d bits)" - -#: lib/openpgp/output.c:474 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "Unbekannter Verschlüsselungsalgorithmus (%d)" - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "OpenPGP-Zertifikatnformation:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\tHexdump: " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "Information zur OCSP-Anfrage:\n" - -#: lib/x509/ocsp_output.c:298 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "" - -#: lib/x509/ocsp_output.c:316 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\tErzeugt am: %s\n" - -#: lib/x509/ocsp_output.c:410 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\tWiderrufzeitpunkt: %s\n" - -#: lib/x509/ocsp_output.c:425 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\tDiese Aktualisierung: %s\n" - -#: lib/x509/ocsp_output.c:440 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\tNächste Aktualisierung: %s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tSignaturalgorithmus: %s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\tSignatur:\n" - -#: lib/x509/ocsp_output.c:619 -msgid "OCSP Response Information:\n" -msgstr "Information zur OCSP-Antwort:\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tPfadlängenbeschränkung: %d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\tHexdump: " - -#: lib/x509/output.c:185 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\tZugriffsmethode: %.*s" - -#: lib/x509/output.c:428 -#, c-format -msgid "%sDigital signature.\n" -msgstr "%sDigitale Signatur.\n" - -#: lib/x509/output.c:430 -#, c-format -msgid "%sNon repudiation.\n" -msgstr "%sNicht zurückweisbar.\n" - -#: lib/x509/output.c:432 -#, c-format -msgid "%sKey encipherment.\n" -msgstr "%sSchlüsselverschlüsselung.\n" - -#: lib/x509/output.c:434 -#, c-format -msgid "%sData encipherment.\n" -msgstr "%sDatenverschlüsselung.\n" - -#: lib/x509/output.c:436 -#, c-format -msgid "%sKey agreement.\n" -msgstr "%sSchlüsselakzeptierung.\n" - -#: lib/x509/output.c:438 -#, c-format -msgid "%sCertificate signing.\n" -msgstr "%sZertifikatsignierung.\n" - -#: lib/x509/output.c:440 -#, c-format -msgid "%sCRL signing.\n" -msgstr "%sCRL-Signierung.\n" - -#: lib/x509/output.c:442 -#, c-format -msgid "%sKey encipher only.\n" -msgstr "%sNur Schlüsselverschlüsselung.\n" - -#: lib/x509/output.c:444 -#, c-format -msgid "%sKey decipher only.\n" -msgstr "%sNur Schlüsselentschlüsselung.\n" - -#: lib/x509/output.c:482 -#, c-format -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\t\tNicht vor: %s\n" - -#: lib/x509/output.c:489 -#, c-format -msgid "\t\t\tNot After: %s\n" -msgstr "\t\t\tNicht nach: %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "" - -#: lib/x509/output.c:632 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tTLS-WWW-Server.\n" - -#: lib/x509/output.c:634 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tTLS-WWW-Client.\n" - -#: lib/x509/output.c:636 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\tCode-Signierung.\n" - -#: lib/x509/output.c:638 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tE-Mail-Sicherheit.\n" - -#: lib/x509/output.c:640 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\tZeitstempel.\n" - -#: lib/x509/output.c:642 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tOCSP-Signierung.\n" - -#: lib/x509/output.c:644 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIpsec-IKE.\n" - -#: lib/x509/output.c:646 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\tUniversal.\n" - -#: lib/x509/output.c:677 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\tZertifizierungsstelle (CA): FALSCH\n" - -#: lib/x509/output.c:679 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\tZertifizierungsstelle (CA): WAHR\n" - -#: lib/x509/output.c:682 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\tPfadlängenbeschränkung: %d\n" - -#: lib/x509/output.c:814 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tXMPP-Adresse: %.*s\n" - -#: lib/x509/output.c:819 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "" - -#: lib/x509/output.c:821 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "" - -#: lib/x509/output.c:823 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" - -#: lib/x509/output.c:945 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\tErweiterungen:\n" - -#: lib/x509/output.c:955 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\tGlobale Einschränkungen (%s):\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "kritisch" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "nicht kritisch" - -#: lib/x509/output.c:970 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "" - -#: lib/x509/output.c:1028 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "" - -#: lib/x509/output.c:1044 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\tSchlüsselverwendung (%s):\n" - -#: lib/x509/output.c:1061 -#, c-format -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "%s\t\tNutzungsdauer des geheimen Schlüssels (%s):\n" - -#: lib/x509/output.c:1076 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\tSchlüsselzweck (%s):\n" - -#: lib/x509/output.c:1090 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "" - -#: lib/x509/output.c:1105 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "" - -#: lib/x509/output.c:1120 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tCRL-Distributionspuntkte (%s):\n" - -#: lib/x509/output.c:1135 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\tProxy-Zertifikatinformation (%s):\n" - -#: lib/x509/output.c:1145 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "" - -#: lib/x509/output.c:1157 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\tUnbekannte Erweiterung %s (%s):\n" - -#: lib/x509/output.c:1204 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII: " - -#: lib/x509/output.c:1208 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\tHexdump: " - -#: lib/x509/output.c:1237 -#, c-format -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\t%sAlgorithmus des öffentlichen Schlüssels: %s\n" - -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "\tSicherheitsstufe des Algorithmus: %s (%d bits)\n" - -#: lib/x509/output.c:1254 -#, c-format -msgid "\t\tModulus (bits %d): " -msgstr "\t\tModulus (bits %d):" - -#: lib/x509/output.c:1257 -#, c-format -msgid "\t\tExponent (bits %d): " -msgstr "\t\tExponent (bits %d):" - -#: lib/x509/output.c:1265 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tExponent (bits %d):\n" - -#: lib/x509/output.c:1286 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\tKurve:\t%s\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX:" - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY:" - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -#: lib/x509/output.c:1322 -#, c-format -msgid "\t\tPublic key (bits %d): " -msgstr "\t\tÖffentlicher Schlüssel (bits %d):" - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP:" - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ:" - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG:" - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -msgid "Subject " -msgstr "" - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\tSeriennummer (hex.): " - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tHerausgeber: %s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\tGültigkeit:\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tNicht vor: %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tNicht nach: %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tMD5-Fingerabdruck:\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tSHA-1-Fingerabdruck:\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tKennung des öffentlichen Schlüssels:\n" -"\t\t" - -#: lib/x509/output.c:1627 -msgid "\tPublic key's random art:\n" -msgstr "" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "signiert mit %s (fehlerhaft!), " - -#: lib/x509/output.c:1725 -#, c-format -msgid "signed using %s, " -msgstr "signiert mit %s, " - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "X.509-Zertifikatinformation:\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "Weitere Informationen:\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\tVersion: 1 (Vorgabe)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\tAktualisierungsdaten:\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tAusgegeben: %s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tNächste am: %s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\tErweiterungen:\n" - -#: lib/x509/output.c:2007 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tCRL-Nummer (%s): " - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tUnbekannte Erweiterung %s (%s):\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tWiderrufene Zertifikate (%d):\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\tKeine widerrufenen Zertifikate.\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tSeriennummer (hex): " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tWiderrufen am: %s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "Information zur Liste der abgelaufenen X.509-Zertifikate:\n" - -#: lib/x509/output.c:2315 -msgid "\tAttributes:\n" -msgstr "\tAttribute:\n" - -#: lib/x509/output.c:2367 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "" - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tUnbekanntes Attribut %s:\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "Information zur PKCS #10-Zertifikatanfrage:\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "Nutzung des öffentlichen Schlüssels:\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "Kennung des öffentlichen Schlüssels:" - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "Informationen zum öffentlichen Schlüssel:\n" - -#~ msgid "PKCS #11 error in PIN." -#~ msgstr "PKCS #11: Fehler in PIN." - -#~ msgid "PKCS #11 PIN should be saved." -#~ msgstr "PKCS #11: PIN sollte gespeichert werden." diff --git a/po/eo.po.in b/po/eo.po.in deleted file mode 100644 index 5a38df96b2..0000000000 --- a/po/eo.po.in +++ /dev/null @@ -1,1478 +0,0 @@ -# Esperanto translation for libgnutls. -# Copyright (C) 2013 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# Felipe Castro , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: libgnutls 3.2.1\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-05-29 19:03+0200\n" -"PO-Revision-Date: 2013-06-28 14:49-0300\n" -"Last-Translator: Felipe Castro \n" -"Language-Team: Esperanto \n" -"Language: eo\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "Fermo-atentigo" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "Neatendita mesaĝo" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "Malĝusta rikordo MAC" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "Malĉifro fiaskis" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "Rikorda troigo" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "Maldensigo fiakis" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "Kvitanco fiaskis" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "Atestilo malĝustas" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "Atestilo ne estas subtenata" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "Atestilo estis revokata" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "Atestilo senvalidiĝis" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "Nekonata atestilo" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "Malpermesata parametro" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "CA ne estas konata" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "Aliro estis rifuzata" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "Dekodiga eraro" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "Malĉifra eraro" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "Eksporta limigo" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "Eraro en versio de protokolo" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "Nesufiĉa sekureco" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "Nuligita de uzanto" - -#: lib/gnutls_alert.c:65 -msgid "No certificate (SSL 3.0)" -msgstr "Neniu atestilo (SSL 3.0)" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "Interna eraro" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "Neniu renegocigo estas permesata" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "Ne eblis havigi la indikitan atestilon" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "Nesubtenata etendo estis sendata" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "La sendita servilnomo ne estis rekonata" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "Mankas uzantnomo SRP/PSK aŭ ĝi ne estas konata" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "Neniu subtenata aplikaĵ-protokolo povis esti negocata" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Sukceso." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Ne eblis negoci subtenatan ĉifran algoritmaron." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "Neniu aŭ nesufiĉaj prioritatoj estis difinataj." - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "La ĉifra tipo estas nesubtenata." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "La atestilo kaj la indikita ŝlosilo ne interkongruas." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Ne eblis negoci subtenatan densigan metodon." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "Nekonata publik-ŝlosila algoritmo estis trovata." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "Algoritmo kiu ne estas ebligata estis negocata." - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "Rikord-paketo kun malpermesata versio estis ricevata." - -#: lib/gnutls_errors.c:70 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "La primo Diffie-Hellman sendita de la servilo ne estas akceptebla (ne sufiĉe longa)." - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "TLS-paketo kun neatendita longo estis ricevata." - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "La TLS-konekto estis finigita neĝuste." - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "La specifa seanco estis ial malvalidigata." - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "Interna eraro e GnuTLS." - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "Malpermesata TLS-etendo estis ricevata." - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "Gravega atentigo TLS estas ricevita." - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "Neatendita paketo TLS estis ricevata." - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "Averta atentigo TLS estas ricevita." - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "Eraro estis trovata ĉe la kalkulo de paketo TLS Finigita." - -#: lib/gnutls_errors.c:92 -msgid "No certificate was found." -msgstr "Neniu atestilo estis trovata." - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "La indikita ŝlosilo DSA malkongruas kun la elektita protokolo TLS." - -#: lib/gnutls_errors.c:96 -msgid "A heartbeat pong message was received." -msgstr "Korbata mesaĝo 'pong' estis ricevata." - -#: lib/gnutls_errors.c:98 -msgid "A heartbeat ping message was received." -msgstr "Korbata mesaĝo 'ping' estis ricevata." - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Jam ekzistas ĉifra algoritmo kun pli malalta prioritato." - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "Neniu provizora parametro RSA estis trovata." - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "Neniu provizora parametro DH estis trovata." - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "Neatendita TLS-kvitanca paketo estis ricevata." - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "La skanado de granda entjero fiaskis." - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "Ne eblis eksporti grandan entjeron." - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "Malĉifrigo fiaskis." - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "Ĉifrigo fiaskis." - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "Malĉifrigo de publika ŝlosilo fiaskis." - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "Ĉifrigo de publika ŝlosilo fiaskis." - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "Subskribo de publika ŝlosilo fiaskis." - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "Kontrolo de publik-ŝlosila subskribo fiaskis." - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "Maldensigo de la rikord-paketo TLS fiaskis." - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "Densigo de la rikord-paketo TLS fiaskis." - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "Interna eraro en rezervigo de memoro." - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "Nerealigita aŭ malebligita trajto estas petata." - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "Nesufiĉe da legitimaĵojj por tiu peto." - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "Eraro en pasvorta dosiero." - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "Malĝusta ŝtopado en paketo PKCS1." - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "La petita seanco senvalidiĝis." - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "Haketado fiaskis." - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Dekodig-eraro de Base64." - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "Neatendita kap-eraro de Base64." - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Enkodig-eraro de Base64." - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "Analiz-eraro en pasvorta dosiero." - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "La petita datumaro ne estis disponebla." - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "Eraro en tira funkcio." - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "Eraro en puŝa funkcio." - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "La supra limo de rikord-paketa sekvo-numeroj estas atingita. Hoo!" - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "Eraro en atestilo." - -#: lib/gnutls_errors.c:157 -msgid "Could not authenticate peer." -msgstr "Ne eblis aŭtentikigi samtavolanon." - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "Nekonata nomo de temo-alternativo en atestilo X.509." - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Nesubtenata gravega etendo en atestilo X.509." - -#: lib/gnutls_errors.c:164 -msgid "Unsupported extension in X.509 certificate." -msgstr "Nesubtenata etendo en atestilo X.509." - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "Malrespekto en ŝlosil-uzmaniero estas detektita." - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "La rimedo estas provizore nedisponebla, provu refoje." - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "La transigita pako tro larĝas (EMSGSIZE)." - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "Funkcio estis haltigata." - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "Rekvitanco estis petata de la samtavolano." - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "TLS-aplikaĵa datumaro estis ricevata, dum ni atendis kvitancan datumaron." - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "Eraro en datumara internaĵo." - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "La tipo de atestilo ne estas subtenata." - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "La indikita memor-bufro estas tro mallonga por teni parametrojn." - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "La peto malvalidas." - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "La kuketo malĝustis." - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "Malpermesata parametro estas ricevita." - -#: lib/gnutls_errors.c:187 -msgid "An illegal parameter was found." -msgstr "Malpermesata parametro estis trovata." - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "Eraro dum lego de dosiero." - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "Analizilo ASN1: elemento ne estis trovata." - -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "Analizilo ASN1: identiganto ne estis trovata" - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "Analizilo ASN1: eraro en analizo de DER." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "Analizilo ASN1: valoro ne estis trovata." - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "Analizilo ASN1: ĝenerala analiz-eraro." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "Analizilo ASN1: valoro ne validas." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "Analizilo ASN1: eraro en TAG." - -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "Analizilo ASN1: eraro en implicita marko" - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "Analizilo ASN1: eraro en tipo 'ANY'." - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "Analizilo ASN1: sintaks-eraro." - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "Analizilo ASN1: troigo en analizo de DER." - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "Tro multaj malplenaj rikord-paketoj estas ricevitaj." - -#: lib/gnutls_errors.c:215 -msgid "Too many handshake packets have been received." -msgstr "Tro multaj kvitancaj paketoj estas ricevitaj." - -#: lib/gnutls_errors.c:217 -msgid "The crypto library version is too old." -msgstr "La versio de ĉifra biblioteko tro malnovas." - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "La versio de biblioteko tasn1 tro malnovas." - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "La uzant-ID de OpenPGP estas revokita." - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "La ŝlosilo OpenPGP ne havas preferatan ŝlosilaron." - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "Eraro dum ŝargo je la ŝlosilringo." - -#: lib/gnutls_errors.c:228 -msgid "The initialization of crypto backend has failed." -msgstr "La ekigo de ĉifra internaĵo fiaskis." - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "Neniu subtenata densig-algoritmo estas trovita." - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "Neniu subtenata ĉifra algoritmaro estas trovita." - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "Ne eblis havigi ŝlosilon OpenPGP." - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "Ne eblis trovi subŝlosilon OpenPGP." - -#: lib/gnutls_errors.c:238 -msgid "Safe renegotiation failed." -msgstr "Sekura renegocado fiaskis." - -#: lib/gnutls_errors.c:240 -msgid "Unsafe renegotiation denied." -msgstr "Malsekura renegocado estas rifuzita." - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "La liverita SRP-uzantnomo estas malpermesata." - -#: lib/gnutls_errors.c:245 -msgid "The SRP username supplied is unknown." -msgstr "La liverita SRP-uzantnomo estas nekonata." - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "La fingropremo OpenPGP ne esats subtenata." - -#: lib/gnutls_errors.c:250 -msgid "The signature algorithm is not supported." -msgstr "La subskriba algoritmo ne estas subtenata." - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "La atestilo havas nesubtenatajn atributojn." - -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "La OID ne estas subtenata." - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "La haketa algoritmo estas nekonata." - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "La enhav-tipo de strukturo PKCS estas ne konata." - -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "La ujo-tipo de strukturo PKCS estas ne konata." - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "La indikita pasvorto enhavas malvalidajn signojn." - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "La kontrolo de mesaĝ-aŭtentikiga kodo fiaskis." - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "Kelkaj limigoj estis atingataj." - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "Ni fiaskis havigi hazardan datumaron." - -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "Ricevita mesaĝo: 'TLS/IA intermeza fazo finis'" - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "Ricevita mesaĝo: 'TLS/IA fina fazo finis'" - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "Kontrolo de faza kontrolsumo de TLS/IA fiaskis" - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "La indikita algoritmo aŭ protokolo estas nekonata." - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "La kvitanca damutara grando estas troa." - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "Eraro dum malfermo de /dev/crypto" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "Eraro dum interfaco kun /dev/crypto" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "Samtavolano ĉesigis la konekton" - -#: lib/gnutls_errors.c:291 -msgid "Channel binding data not available" -msgstr "Kanal-bindiga datumaro ne disponeblas" - -#: lib/gnutls_errors.c:294 -msgid "TPM error." -msgstr "Eraro TPM." - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "TPM ne estas ekigita." - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "Ŝlosilo TPM ne estis trovata en persista konsevado." - -#: lib/gnutls_errors.c:300 -msgid "Cannot initialize a session with the TPM." -msgstr "Ne eblis ekiggi seancon kun la TPM." - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error." -msgstr "Eraro PKCS #11." - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "Ekiga eraro PKCS #11." - -#: lib/gnutls_errors.c:306 -msgid "Error in parsing." -msgstr "Eraro dum analizo." - -#: lib/gnutls_errors.c:308 -msgid "Error in provided PIN." -msgstr "Eraro en provizita PIN." - -#: lib/gnutls_errors.c:310 -msgid "Error in provided SRK password for TPM." -msgstr "Eraro en provizita pasvorta SRK por TPM." - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "Eraro en provizita pasvorto por ŝlosilo ŝargota en TPM." - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "Eraro PKCS #11 en konektingo" - -#: lib/gnutls_errors.c:316 -msgid "Thread locking error" -msgstr "Eraro de faden-ŝloso" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "Eraro PKCS #11 en atributo" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "Eraro PKCS #11 en aparato" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "Eraro PKCS #11 en datumaro" - -#: lib/gnutls_errors.c:324 -msgid "PKCS #11 unsupported feature" -msgstr "PKCS #11 nesubtenata trajto" - -#: lib/gnutls_errors.c:326 -msgid "PKCS #11 error in key" -msgstr "Eraro PKCS #11 en ŝlosilo" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "PKCS #11 PIN senvalidiĝis" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "PKCS #11 PIN ŝlosita" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "Eraro PKCS #11 en seanco" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "Eraro PKCS #11 en subskribo" - -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "Eraro PKCS #11 en ĵetono" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "PKCS #11 uzant-eraro" - -#: lib/gnutls_errors.c:340 -msgid "The operation timed out" -msgstr "La tempo por operacio finis" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "La operacio estis nuligata pro uzant-eraro" - -#: lib/gnutls_errors.c:344 -msgid "No supported ECC curves were found" -msgstr "Neniu subtenata kurbo ECC estis trovata" - -#: lib/gnutls_errors.c:346 -msgid "The curve is unsupported" -msgstr "La kurbo estas nesubtenata" - -#: lib/gnutls_errors.c:348 -msgid "The requested PKCS #11 object is not available" -msgstr "La petita objekto PKCS #11 ne disponeblas" - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "La provizita atestilo-listo X.509 ne estas ordigita (laŭ ordo de temo al eldonanto)" - -#: lib/gnutls_errors.c:352 -msgid "The OCSP response is invalid" -msgstr "La respondo OCSP malvalidas." - -#: lib/gnutls_errors.c:354 -msgid "There is no certificate status (OCSP)." -msgstr "Estas neniu atestila stato (OCSP)." - -#: lib/gnutls_errors.c:356 -msgid "Error in the system's randomness device." -msgstr "Eraro en la hazardec-aparato de la sistemo." - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "Neniu ordinara aplikaĵ-protokolo povis esti negocata." - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(nekonata erar-kodo)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\tŜlosila uzmaniero:\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "eraro: get_key_usage: %s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tCiferecaj subskriboj.\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tKomunikada ĉifrigo.\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tKonserv-datumara ĉifrigo.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tAŭtentikigo.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tSubskribo de atestilo.\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tID (16-ume): " - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\tFingropremo (16-ume): " - -#: lib/openpgp/output.c:126 -msgid "\tFingerprint's random art:\n" -msgstr "\tHazarda artaĵo de fingropremo:\n" - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\tRevokita: vere\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\tRevokita: false\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\tTempindikoj:\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tKreo: %s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tLimdato: Neniam\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tLimdato: %s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "nekonata" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tPublik-ŝlosila algoritmo: %s\n" - -#: lib/openpgp/output.c:219 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\tŜlosila sekurec-nivelo: %s\n" - -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tDividresto (bitoj %d):\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\tEksponento:\n" - -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tPublika ŝlosilo (bitoj %d):\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tVersio: %d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tNomo[%d]: %s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tRevokita nomo[%d]: %s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tSubŝlosilo[%d]:\n" - -#: lib/openpgp/output.c:400 -#, c-format -msgid "name[%d]: %s, " -msgstr "nomo[%d]: %s, " - -#: lib/openpgp/output.c:402 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "revokita nomo[%d]: %s, " - -#: lib/openpgp/output.c:422 -msgid "fingerprint: " -msgstr "fingropremo: " - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "kreita: %s, " - -#: lib/openpgp/output.c:452 -msgid "never expires, " -msgstr "neniam senvalidiĝas, " - -#: lib/openpgp/output.c:460 -#, c-format -msgid "expires: %s, " -msgstr "senvalidiĝas: %s, " - -#: lib/openpgp/output.c:472 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "ŝlosil-algoritmo %s (%d bitoj)" - -#: lib/openpgp/output.c:474 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "nekonata ŝlosil-algoritmo (%d)" - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "Atestil-informo de OpenPGP:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\t16-uma nekropsio: " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "Pet-informo de OCSP:\n" - -#: lib/x509/ocsp_output.c:298 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "\tRespondanta ID: %.*s\n" - -#: lib/x509/ocsp_output.c:316 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\tProduktita ĉe: %s\n" - -#: lib/x509/ocsp_output.c:410 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\tRevoka horo: %s\n" - -#: lib/x509/ocsp_output.c:425 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\tTiu ĉi ĝisdatigo: %s\n" - -#: lib/x509/ocsp_output.c:440 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\tVenonta ĝisdatigo: %s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tSubskriba algoritmo: %s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "averto: subskribita uzante rompitan subskrib-algoritmon kiu povas esti imitata.\n" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\tSubskribo:\n" - -#: lib/x509/ocsp_output.c:619 -msgid "OCSP Response Information:\n" -msgstr "Respond-informo de OCSP:\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "averto: altname enhavas enkorpigitan NUL, ni anstataŭigas per '!'\n" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tLimigo de voj-longo: %d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\tLingvo de politiko: %s" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\tPolitiko:\n" -"\t\t\t\tASCII: " - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\t16-uma nekropsio: " - -#: lib/x509/output.c:185 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\tAlir-metodo: %.*s" - -#: lib/x509/output.c:428 -#, c-format -msgid "%sDigital signature.\n" -msgstr "%sCifereca subskribo.\n" - -#: lib/x509/output.c:430 -#, c-format -msgid "%sNon repudiation.\n" -msgstr "%sNe-repudio.\n" - -#: lib/x509/output.c:432 -#, c-format -msgid "%sKey encipherment.\n" -msgstr "%sŜlosila ĉifrigo.\n" - -#: lib/x509/output.c:434 -#, c-format -msgid "%sData encipherment.\n" -msgstr "%sDatumara ĉifrigo.\n" - -#: lib/x509/output.c:436 -#, c-format -msgid "%sKey agreement.\n" -msgstr "%sŜlosila interakordo.\n" - -#: lib/x509/output.c:438 -#, c-format -msgid "%sCertificate signing.\n" -msgstr "%sAtestila subskribo.\n" - -#: lib/x509/output.c:440 -#, c-format -msgid "%sCRL signing.\n" -msgstr "%sSubskribo de CRL.\n" - -#: lib/x509/output.c:442 -#, c-format -msgid "%sKey encipher only.\n" -msgstr "%sNur ŝlosil-ĉifrigo.\n" - -#: lib/x509/output.c:444 -#, c-format -msgid "%sKey decipher only.\n" -msgstr "%sNur ŝlosil-malĉifrigo.\n" - -#: lib/x509/output.c:482 -#, c-format -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\t\tNe antaŭ ol: %s\n" - -#: lib/x509/output.c:489 -#, c-format -msgid "\t\t\tNot After: %s\n" -msgstr "\t\t\tNe post: %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "averto: distributionPoint enhavas enkorpigitan NUL, ni anstataŭigas per '!'\n" - -#: lib/x509/output.c:632 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tServilo TLS WWW.\n" - -#: lib/x509/output.c:634 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tKliento TLS WWW.\n" - -#: lib/x509/output.c:636 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\tSubskribo de kodo.\n" - -#: lib/x509/output.c:638 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tRetadresa protekto.\n" - -#: lib/x509/output.c:640 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\tTempindikigo.\n" - -#: lib/x509/output.c:642 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tSubskribo de OCSP.\n" - -#: lib/x509/output.c:644 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIpsec IKE.\n" - -#: lib/x509/output.c:646 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\tIu ajn celo.\n" - -#: lib/x509/output.c:677 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\tAtestila aŭtoritato (CA): FALSA\n" - -#: lib/x509/output.c:679 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\tAtestila aŭtoritato (CA): VERA\n" - -#: lib/x509/output.c:682 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\tLimigo de voj-longo: %d\n" - -#: lib/x509/output.c:814 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tAdreso XMPP: %.*s\n" - -#: lib/x509/output.c:819 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "%s\t\t\taliNomo OID: %.*s\n" - -#: lib/x509/output.c:821 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "%s\t\t\taliNomo DER: " - -#: lib/x509/output.c:823 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" -"\n" -"%s\t\t\taliNomo ASCII: " - -#: lib/x509/output.c:945 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\tEtendoj:\n" - -#: lib/x509/output.c:955 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\tBazaj limigoj (%s):\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "gravega" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "ne gravega" - -#: lib/x509/output.c:970 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "%s\t\tTema ŝlosil-identiganto (%s):\n" - -#: lib/x509/output.c:1028 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "%s\t\tAŭtoritata ŝlosil-identiganto (%s):\n" - -#: lib/x509/output.c:1044 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\tŜlosila uzmaniero (%s):\n" - -#: lib/x509/output.c:1061 -#, c-format -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "%s\t\tTempo por uzado de privata ŝlosilo (%s):\n" - -#: lib/x509/output.c:1076 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\tŜlosila celo (%s):\n" - -#: lib/x509/output.c:1090 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "%s\t\tNomo de temo-alternativo (%s):\n" - -#: lib/x509/output.c:1105 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "%s\t\tNomo de eldonant-alternativo (%s):\n" - -#: lib/x509/output.c:1120 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tDistribu-pukntoj de CRL (%s):\n" - -#: lib/x509/output.c:1135 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\tProkuril-atestila informo (%s):\n" - -#: lib/x509/output.c:1145 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "%s\t\tAŭtoritat-informa aliro (%s):\n" - -#: lib/x509/output.c:1157 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\tNekonata etendo %s (%s):\n" - -#: lib/x509/output.c:1204 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII: " - -#: lib/x509/output.c:1208 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\t16-uma nekropsio: " - -#: lib/x509/output.c:1237 -#, c-format -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\t%sPublik-ŝlosila algoritmo: %s\n" - -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "\tAlgoritma sekureca nivelo: %s (%d bitoj)\n" - -#: lib/x509/output.c:1254 -#, c-format -msgid "\t\tModulus (bits %d): " -msgstr "\t\tDividresto (bitoj %d): " - -#: lib/x509/output.c:1257 -#, c-format -msgid "\t\tExponent (bits %d): " -msgstr "\t\tEksponanto (bitoj %d): " - -#: lib/x509/output.c:1265 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tEksponanto (bitoj %d):\n" - -#: lib/x509/output.c:1286 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\tKurbo:\t%s\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX: " - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY: " - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -#: lib/x509/output.c:1322 -#, c-format -msgid "\t\tPublic key (bits %d): " -msgstr "\t\tPublika ŝlosilo (bitoj %d): " - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP: " - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ: " - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG: " - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -msgid "Subject " -msgstr "Temo " - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\tSeri-numero (16-ume): " - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tEldonanto: %s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\tValideco:\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tNe antaŭ ol: %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tNe post: %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\tTemo: %s\n" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tFingropremo MD5:\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tFingropremo SHA-1:\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tPublik-ŝlosila Id:\n" -"\t\t" - -#: lib/x509/output.c:1627 -msgid "\tPublic key's random art:\n" -msgstr "\tHazarda artaĵo de fingropremo:\n" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "subskribita uzante %s (fuŝita!), " - -#: lib/x509/output.c:1725 -#, c-format -msgid "signed using %s, " -msgstr "subskribita uzante %s, " - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "Atestil-informo de X.509:\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "Alia informo:\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\tVersio: 1 (apriora)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\tĜisdatigaj datoj:\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tEldonita: %s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tVenonta ĉe: %s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\tEtendoj:\n" - -#: lib/x509/output.c:2007 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tNumero CRL (%s): " - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tAŭtoritata ŝlosil-identiganto (%s):\n" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tNekonata etendo %s (%s):\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tRevokitaj atestiloj (%d):\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\tNeniu revokita atestilo.\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tSeri-numero (16-ume): " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tRevokita ĉe: %s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "Informo de atestil-revoka listo de X.509:\n" - -#: lib/x509/output.c:2315 -msgid "\tAttributes:\n" -msgstr "\tAtributoj:\n" - -#: lib/x509/output.c:2367 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "\t\tDefia pasvorto: %s\n" - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tNekonata atributo %s:\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "Atestil-peta informo de PKCS #10:\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "Uzado de publik-ŝlosilo:\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "Publik-ŝlosila ID: " - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "Publik-ŝlosila informo:\n" - -#~ msgid "PKCS #11 error in PIN." -#~ msgstr "Eraro PKCS #11 en PIN." - -#~ msgid "PKCS #11 PIN should be saved." -#~ msgstr "PKCS #11 PIN devus esti konservata." - -#~ msgid "\tSubject Public Key Algorithm: %s\n" -#~ msgstr "\tTema publik-ŝlosila algoritmo: %s\n" diff --git a/po/fi.po.in b/po/fi.po.in deleted file mode 100644 index 944a6a4a8b..0000000000 --- a/po/fi.po.in +++ /dev/null @@ -1,1500 +0,0 @@ -# Finnish messages for libgnutls. -# Copyright © 2011, 2012, 2013 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# Jorma Karvonen , 2011-2013. -# -msgid "" -msgstr "" -"Project-Id-Version: libgnutls 3.2.1\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-05-29 19:03+0200\n" -"PO-Revision-Date: 2013-06-19 17:09+0300\n" -"Last-Translator: Jorma Karvonen \n" -"Language-Team: Finnish \n" -"Language: fi\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "Sulkemisilmoitus" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "Odottamaton viesti" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "Väärä tietue MAC" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "Salauksen purku epäonnistui" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "Tietueylivuoto" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "Pakkauksen purkaminen epäonnistui" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "Kättely epäonnistui" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "Varmenne on väärä" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "Varmennetta ei tueta" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "Varmenne kumottiin" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "Varmenne on vanhentunut" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "Tuntematon varmenne" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "Virheellinen parametri" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "Varmenneviranomainen on tuntematon" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "Pääsy kielletty" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "Dekoodausvirhe" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "Salauksen purkuvirhe" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "Vientirajoite" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "Virhe yhteyskäytäntöversiossa" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "Riittämättömästi turvallisuutta" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "Käyttäjä perui" - -#: lib/gnutls_alert.c:65 -msgid "No certificate (SSL 3.0)" -msgstr "Ei varmmennetta (SSL 3.0)" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "Sisäinen virhe" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "Uudelleenneuvottelua ei sallita" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "Määritellyn varmenteen noutaminen epäonnistui" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "Lähetettiin tukematon laajennus" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "Ei tunnistettu lähetettyä palvelinnimeä" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "SRP-/PSK-käyttäjänimi puuttuu tai on tuntematon" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "Tuettujen sovellusyhteyskäytäntöjen neuvottelu epäonnistui" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Onnistui." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Tuetusta salakirjoitusmenetelmästä neuvottelu epäonnistui." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "Ei ollut asetettu prioriteetteja tai niitä oli riittämättömästi." - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "Salakirjoitusmenetelmätyyppiä ei tueta." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "Varmenne ja annettu avain eivät täsmää." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Tuetusta pakkaamismenetelmästä neuvottelu epäonnistui." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "Kohdattiin tuntematon julkinen avainalgoritmi." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "Neuvoteltiin algoritmista, jota ei ole otettu käyttöön." - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "Vastaanotettiin tietuepaketti, jonka versio oli virheellinen." - -#: lib/gnutls_errors.c:70 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "Palvelimen lähettämä Diffie-Hellman -perusavain ei ollut hyväksyttävä (ei riittävän pitkä)." - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "Vastaanotettiin odottamattoman pituinen TLS-paketti." - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "TLS-yhteys ei ollut päätetty oikein." - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "Määritelty istunto on jostain syystä virheellinen." - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "Sisäinen GnuTLS-virhe." - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "Vastaanotettiin virheellinen TLS-laajennus." - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "Vastaanotettiin kohtalokas TLS-hälytys." - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "Vastaanotettiin odottamaton TLS-paketti." - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "Vastaanotettiin TLS-varoitushälytys." - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "Kohdattiin virhe ”TLS Finished”-paketin laskennassa." - -#: lib/gnutls_errors.c:92 -msgid "No certificate was found." -msgstr "Varmennetta ei löytynyt." - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "Annettu DSA-avain on yhteensopimaton valitun TLS-yhteyskäytännön kanssa." - -#: lib/gnutls_errors.c:96 -msgid "A heartbeat pong message was received." -msgstr "Vastaanotettiin pong-sydämenlyöntiviesti." - -#: lib/gnutls_errors.c:98 -msgid "A heartbeat ping message was received." -msgstr "Vastaanotettiin ping-sydämenlyöntiviesti." - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Salausalgoritmi alemmalla prioriteetilla on jo olemassa." - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "Ei löytynyt tilapäisiä RSA-parametreja." - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "Ei löytynyt tilapäisiä DH-parametreja." - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "Vastaanotettiin odottamaton TLS-kättelypaketti." - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "Suurikokoisen kokonaisluvun etsintä epäonnistui." - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "Suuren kokonaisluvun vienti epäonnistui." - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "Salauksen purku epäonnistui." - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "Salaus epäonnistui." - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "Salauksen purku julkisella avaimella epäonnistui." - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "Salaus julkisella avaimella epäonnistui." - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "Allekirjoitus julkisella avaimella epäonnistui." - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "Allekirjoituksen todennus julkisella avaimella epäonnistui." - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "TLS-tietuepaketin pakkaamisen purkaminen epäonnistui." - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "TLS-tietuepaketin pakkaaminen epäonnistui." - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "Sisäinen virhe muistivarauksessa." - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "Pyydettiin toteuttamatonta tai käytöstä pois otettua ominaisuutta." - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "Riittämättömästi valtuustietoja tuolle pyynnölle." - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "Virhe salasanatiedostossa." - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "Väärä täyte PKCS1-paketissa." - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "Vaadittu istunto on vanhentunut." - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "Tiivisteen laskeminen epäonnistui." - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Base64-dekoodausvirhe." - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "Base64 odottamaton otsakevirhe." - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Base64-koodausvirhe." - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "Jäsennysvirhe salasanatiedostossa." - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "Pyydetyt tiedot eivät olleet saatavilla." - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "Virhe pull-toiminnossa." - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "Virhe push-toiminnossa." - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "Tietuepakettijärjestysnumeroiden yläraja on saavutettu. Wow!" - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "Virhe varmenteessa." - -#: lib/gnutls_errors.c:157 -msgid "Could not authenticate peer." -msgstr "Vastapuolen todentaminen epäonnistui." - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "Tuntematon aihevaihtoehtonimi X.509-varmenteessa." - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Tukematon kriittinen laajennus X.509-varmenteessa." - -#: lib/gnutls_errors.c:164 -msgid "Unsupported extension in X.509 certificate." -msgstr "Tukematon laajennus X.509-varmenteessa." - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "Havaittiin avainkäytön rikkomus varmenteessa." - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "Resurssi on tilapäisesti tavoittamattomissa, yritä uudelleen." - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "Siirretty paketti on liian suuri (EMGSSIZE)." - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "Funktio keskeytettiin." - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "Vastapuoli vaati uudelleenkättelyn." - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "Vastaanotettiin TLS-sovelluksen tietoja, vaikka odotettiin kättelytietoja." - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "Virhe tietokantatallennusmoduulissa." - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "Varmenteen tyyppiä ei tueta." - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "Annettu muistipuskuri on liian lyhyt parametrien säilyttämiseen." - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "Pyyntö on virheellinen." - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "Eväste oli väärä." - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "Vastaanotettiin virheellinen parametri." - -#: lib/gnutls_errors.c:187 -msgid "An illegal parameter was found." -msgstr "Löytyi virheellinen parametri." - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "Virhe luettaessa tiedostoa." - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "ASN1-jäsennin: Elementtiä ei löytynyt." - -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "ASN1-jäsennin: Tunnistetta ei löytynyt" - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "ASN1-jäsennin: Virhe DER-jäsennyksessä." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "ASN1-jäsennin: Arvoa ei löytynyt." - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "ASN1-jäsennin: Yleinen jäsennysvirhe." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "ASN1-jäsennin: Arvo on virheellinen." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "ASN1-jäsennin: Virhe TUNNUKSESSA." - -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "ASN1-jäsennin: virhe implisiittisessä tunnuksessa" - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "ASN1-jäsennin: Virhe tyypissä ’ANY’." - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "ASN1-jäsennin: Syntaksivirhe." - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "ASN1-jäsennin: Ylivuoto DER-jäsennyksessä." - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "Vastaanotettiin liian monta tyhjää tietuepakettia." - -#: lib/gnutls_errors.c:215 -msgid "Too many handshake packets have been received." -msgstr "Vastaanotettiin liian monta kättelypakettia." - -#: lib/gnutls_errors.c:217 -msgid "The crypto library version is too old." -msgstr "Kirjaston crypto versio on liian vanha." - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "Kirjaston tasn1 versio on liian vanha." - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "Kumottiin OpenPGP-käyttäjätunniste." - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "OpenPGP-avaimella ei ole ensisijaista avainjoukkoa." - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "Virhe ladattaessa avainrengasta." - -#: lib/gnutls_errors.c:228 -msgid "The initialization of crypto backend has failed." -msgstr "Salaustaustaohjelman alustus epäonnistui." - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "Ei ole löytynyt yhtään tuettua pakkausalgoritmia." - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "Ei ole löytynyt yhtään tuettua salakirjoitusmenetelmää." - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "OpenPGP-avaimen haku epäonnistui." - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "OpenPGP-aliavaimen löytäminen epäonnistui." - -#: lib/gnutls_errors.c:238 -msgid "Safe renegotiation failed." -msgstr "Turvallinen uudelleenneuvottelu epäonnistui." - -#: lib/gnutls_errors.c:240 -msgid "Unsafe renegotiation denied." -msgstr "Turvaton uudelleenneuvottelu kielletty." - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "Tarjottu SRP-käyttäjänimi on virheellinen." - -#: lib/gnutls_errors.c:245 -msgid "The SRP username supplied is unknown." -msgstr "Tarjottu SRP-käyttäjänimi on tuntematon." - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "OpenPGP-sormenjälkeä ei tueta." - -#: lib/gnutls_errors.c:250 -msgid "The signature algorithm is not supported." -msgstr "Allekirjoitusalgoritmia ei tueta." - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "Varmenteessa on tukemattomia attribuutteja." - -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "OID on tukematon." - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "Tiivistealgoritmi on tuntematon." - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "PKCS-rakenteen sisältötyyppi on tuntematon." - -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "PKCS-rakenteen bag-tyyppi on tuntematon." - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "Annettu salasana sisältää virheellisiä merkkejä." - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "MAC-todennus epäonnistui." - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "Tavoitettiin joitakin rajoiterajoja." - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "Satunnaisten tietojen hankkiminen epäonnistui." - -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "Vastaanotettiin ”TLS/IA Intermediate Phase Finished”-viesti" - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "Vastaanotettiin ”TLS/IA Final Phase Finished”-viesti" - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "TLS/IA-vaiheen tarkistussumman todentaminen epäonnistui" - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "Määritelty algoritmi tai yhteyskäytäntö on tuntematon." - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "Kättelytietojen koko on liian suuri." - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "Virhe avattaessa /dev/crypto" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "Virhe rajapintaliitännässä /dev/crypto" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "Vastapuoli katkaisi yhteyden" - -#: lib/gnutls_errors.c:291 -msgid "Channel binding data not available" -msgstr "Kanavan sitomistiedot eivät ole saatavilla." - -#: lib/gnutls_errors.c:294 -msgid "TPM error." -msgstr "TPM-virhe." - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "TPM ei ole alustettu." - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "Pysyvästä muistista ei löytynyt TPM-avainta." - -#: lib/gnutls_errors.c:300 -msgid "Cannot initialize a session with the TPM." -msgstr "Istunnon alustaminen TPM:llä epäonnistui." - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error." -msgstr "PKCS #11 -virhe." - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "PKCS #11 -alustusvirhe." - -#: lib/gnutls_errors.c:306 -msgid "Error in parsing." -msgstr "Virhe jäsennettäessä." - -#: lib/gnutls_errors.c:308 -msgid "Error in provided PIN." -msgstr "Tarjotussa PIN-luvussa on virhe." - -#: lib/gnutls_errors.c:310 -msgid "Error in provided SRK password for TPM." -msgstr "TPM:lle tarjotussa SRK-salasanassa on virhe." - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "Virhe TPM:lle ladattavan avaimen tarjotussa salassanassa." - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "PKCS #11 -virhe välissä" - -#: lib/gnutls_errors.c:316 -msgid "Thread locking error" -msgstr "Säikeen lukitusvirhe" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "PKCS #11 -virhe attribuutissa" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "PKCS #11 -virhe laitteessa" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "PKCS #11 -virhe tiedoissa" - -#: lib/gnutls_errors.c:324 -msgid "PKCS #11 unsupported feature" -msgstr "PKCS #11 tukematon ominaisuus" - -#: lib/gnutls_errors.c:326 -msgid "PKCS #11 error in key" -msgstr "PKCS #11 -vireh avaimessa" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "PKCS #11 PIN vanhentunut" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "PKCS #11 PIN lukittu" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "PKCS #11 -virhe istunnossa" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "PKCS #11 -virhe allekirjoituksessa" - -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "PKCS #11 -virhe merkkijonossa" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "PKCS #11 -käyttäjävirhe" - -#: lib/gnutls_errors.c:340 -msgid "The operation timed out" -msgstr "Toiminnan aikakatkaisu" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "Toiminto peruutettiin käyttäjävirheen vuoksi" - -#: lib/gnutls_errors.c:344 -msgid "No supported ECC curves were found" -msgstr "Ei ole löytynyt yhtään ECC-koordinaattia." - -#: lib/gnutls_errors.c:346 -msgid "The curve is unsupported" -msgstr "Koordinaattia ei tueta." - -#: lib/gnutls_errors.c:348 -msgid "The requested PKCS #11 object is not available" -msgstr "Pyydetty PKCS #11 -objekti ei ole saatavilla." - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "Tarjottua X.599-varmenneluetteloa ei ole lajiteltu (aiheessa julkaisijajärjestys)" - -#: lib/gnutls_errors.c:352 -msgid "The OCSP response is invalid" -msgstr "OCSP-vastaus on virheellinen" - -#: lib/gnutls_errors.c:354 -msgid "There is no certificate status (OCSP)." -msgstr "Ei ole mitään varmennetilaa (OCSP)." - -#: lib/gnutls_errors.c:356 -msgid "Error in the system's randomness device." -msgstr "Virhe järjestelmän satunnaisuuslaitteessa." - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "Yleisen sovellusyhteyskäytännön neuvottelu epäonnistui." - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(tuntematon virhekoodi)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\tAvainkäyttö:\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "virhe: get_key_usage: %s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tDigitaaliset allekirjoitukset.\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tViestintäsalaus.\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tTallennustietosalaus.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tTodennus.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tVarmenneallekirjoitus.\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tID (heksadesimaali): " - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\tSormenjälki (heksadesimaali): " - -#: lib/openpgp/output.c:126 -msgid "\tFingerprint's random art:\n" -msgstr "\tSormenjäljen satunnaiskuvio:\n" - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\tKumottu: Tosi\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\tKumottu: Epätosi\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\tAikaleimat:\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tLuonti: %s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tVanheneminen: Ei koskaan\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tVanheneminen: %s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "tuntematon" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tJulkisen avaimen algoritmi: %s\n" - -#: lib/openpgp/output.c:219 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\tAvaimen turvataso: %s\n" - -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tModulo (bitit %d):\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\tEksponentti:\n" - -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tJulkinen avain (bitit %d):\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tVersio: %d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tNimi[%d]: %s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tKumottu nimi[%d]: %s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tAliavain[%d]:\n" - -#: lib/openpgp/output.c:400 -#, c-format -msgid "name[%d]: %s, " -msgstr "nimi[%d]: %s, " - -#: lib/openpgp/output.c:402 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "kumottu nimi[%d]: %s, " - -#: lib/openpgp/output.c:422 -msgid "fingerprint: " -msgstr "sormenjälki: " - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "luotu: %s, " - -#: lib/openpgp/output.c:452 -msgid "never expires, " -msgstr "ei vanhene koskaan, " - -#: lib/openpgp/output.c:460 -#, c-format -msgid "expires: %s, " -msgstr "vanhenee: %s, " - -#: lib/openpgp/output.c:472 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "avainalgoritmi %s (%d bittiä)" - -#: lib/openpgp/output.c:474 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "tuntematon avainalgoritmi (%d)" - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "OpenPGP-varmennetiedot:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\tHeksadesimaalivedos: " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "OCSP-pyyntötietoa:\n" - -#: lib/x509/ocsp_output.c:298 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "\tVastaanottajatunniste: %.*s\n" - -#: lib/x509/ocsp_output.c:316 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\tTuotettu paikassa: %s\n" - -#: lib/x509/ocsp_output.c:410 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\tKumoamisaika: %s\n" - -#: lib/x509/ocsp_output.c:425 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\tTämä päivitys: %s\n" - -#: lib/x509/ocsp_output.c:440 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\tSeuraava osoitteessa: %s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tAllekirjoitusalgoritmi: %s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "varoitus: allekirjoitettu käyttäen murrettua allekirjoitusalgoritmia, joka voi olla väärennetty.\n" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\tAllekirjoitus:\n" - -#: lib/x509/ocsp_output.c:619 -msgid "OCSP Response Information:\n" -msgstr "OCSP-vastaustietoa:\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "varoitus: altname sisältää upotettuja NUL-merkkejä, korvataan merkillä ’!’\n" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tPolkupituusrajoite: %d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\tMenettelytapakieli: %s" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\tMenettelytapa:\n" -"\t\t\t\tASCII: " - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\tHeksadesimaalivedos: " - -#: lib/x509/output.c:185 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\tPääsymetodi: %.*s" - -#: lib/x509/output.c:428 -#, c-format -msgid "%sDigital signature.\n" -msgstr "%sDigitaalinen allekirjoitus.\n" - -#: lib/x509/output.c:430 -#, c-format -msgid "%sNon repudiation.\n" -msgstr "%sKiistämättömyys.\n" - -#: lib/x509/output.c:432 -#, c-format -msgid "%sKey encipherment.\n" -msgstr "%sAvainsalaus.\n" - -#: lib/x509/output.c:434 -#, c-format -msgid "%sData encipherment.\n" -msgstr "%stTietosalaus.\n" - -#: lib/x509/output.c:436 -#, c-format -msgid "%sKey agreement.\n" -msgstr "%sAvainsopimus.\n" - -#: lib/x509/output.c:438 -#, c-format -msgid "%sCertificate signing.\n" -msgstr "%sVarmenneallekirjoitus.\n" - -#: lib/x509/output.c:440 -#, c-format -msgid "%sCRL signing.\n" -msgstr "%sCRL-allekirjoittaminen.\n" - -#: lib/x509/output.c:442 -#, c-format -msgid "%sKey encipher only.\n" -msgstr "%sVain avainsalaaja.\n" - -#: lib/x509/output.c:444 -#, c-format -msgid "%sKey decipher only.\n" -msgstr "%sVain avaimen salauspurkaja.\n" - -#: lib/x509/output.c:482 -#, c-format -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\t\tEi ennen: %s\n" - -#: lib/x509/output.c:489 -#, c-format -msgid "\t\t\tNot After: %s\n" -msgstr "\t\t\tEi jälkeen: %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "varoitus: distributionPoint sisältää upotettuja NUL-merkkejä, korvataan merkillä ’!’\n" - -#: lib/x509/output.c:632 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tTLS-webpalvelin.\n" - -#: lib/x509/output.c:634 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tTLS-webasiakas.\n" - -#: lib/x509/output.c:636 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\tKoodin allekirjoittaminen.\n" - -#: lib/x509/output.c:638 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tSähköpostisuojaus.\n" - -#: lib/x509/output.c:640 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\tAikaleimaus.\n" - -#: lib/x509/output.c:642 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tOCSP-allekirjoittaminen.\n" - -#: lib/x509/output.c:644 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIpsec IKE.\n" - -#: lib/x509/output.c:646 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\tMikä tahansa tarkoitus.\n" - -#: lib/x509/output.c:677 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\tVarmennusviranomainen (CA): EPÄTOSI\n" - -#: lib/x509/output.c:679 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\tVarmenneviranomainen (CA): TOSI\n" - -#: lib/x509/output.c:682 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\tPolkupituusrajoite: %d\n" - -#: lib/x509/output.c:814 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tXMPP-osoite: %.*s\n" - -#: lib/x509/output.c:819 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "%s\t\t\t”otherName OID”-tunniste: %.*s\n" - -#: lib/x509/output.c:821 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "%s\t\t\totherName DER: " - -#: lib/x509/output.c:823 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" -"\n" -"%s\t\t\totherName ASCII: " - -#: lib/x509/output.c:945 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\tLaajennukset:\n" - -#: lib/x509/output.c:955 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\tPerusrajoitteet (%s):\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "kriittinen" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "ei-kriittinen" - -#: lib/x509/output.c:970 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "%s\t\tAihepääavain (%s):\n" - -#: lib/x509/output.c:1028 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "%s\t\tViranomaispääavain (%s):\n" - -#: lib/x509/output.c:1044 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\tAvainkäyttö (%s):\n" - -#: lib/x509/output.c:1061 -#, c-format -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "%s\t\tYksityisen avaimen käyttöjakso (%s):\n" - -#: lib/x509/output.c:1076 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\tAvaintarkoitus (%s):\n" - -#: lib/x509/output.c:1090 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "%s\t\tAiheen vaihtoehtoinen nimi (%s):\n" - -#: lib/x509/output.c:1105 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "%s\t\tJulkaisijan vaihtoehtoinen nimi (%s):\n" - -#: lib/x509/output.c:1120 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tCRL-jakelupisteitä (%s):\n" - -#: lib/x509/output.c:1135 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\tVälityspalvelimen varmennetietoja (%s):\n" - -#: lib/x509/output.c:1145 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "%s\t\tViranomaistietopääsy (%s):\n" - -#: lib/x509/output.c:1157 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\tTuntematon laajennus %s (%s):\n" - -#: lib/x509/output.c:1204 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII: " - -#: lib/x509/output.c:1208 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\tHeksadesimaalivedos: " - -#: lib/x509/output.c:1237 -#, c-format -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\t%sJulkisen avaimen algoritmi: %s\n" - -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "\tAlgoritmin turvataso: %s (%d bittiä)\n" - -#: lib/x509/output.c:1254 -#, c-format -msgid "\t\tModulus (bits %d): " -msgstr "\t\tModulo (bitit %d): " - -#: lib/x509/output.c:1257 -#, c-format -msgid "\t\tExponent (bits %d): " -msgstr "\t\tEksponentti (bitit %d): " - -#: lib/x509/output.c:1265 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tEksponentti (bitit %d):\n" - -#: lib/x509/output.c:1286 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\tKoordinaatti:\t%s\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX: " - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY: " - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -#: lib/x509/output.c:1322 -#, c-format -msgid "\t\tPublic key (bits %d): " -msgstr "\t\tJulkinen avain (bitit %d): " - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP: " - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ: " - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG: " - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -msgid "Subject " -msgstr "Aihe: " - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\tSarjanumero (heksadesimaali): " - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tJulkaisija: %s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\tKelpoisuus:\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tEi ennen: %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tEi jälkeen: %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\tAihe: %s\n" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tMD5-sormenjälki:\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tSHA-1-sormenjälki:\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tJulkisen avaimen tunniste:\n" -"\t\t" - -#: lib/x509/output.c:1627 -msgid "\tPublic key's random art:\n" -msgstr "\tJulkisen avaimen satunnaiskuvio:\n" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "allekirjoitettu käyttäen %s (rikki!), " - -#: lib/x509/output.c:1725 -#, c-format -msgid "signed using %s, " -msgstr "allekirjoitettu käyttäen %s, " - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "X.509 -varmennetiedot:\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "Muuta tietoa:\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\tVersio: 1 (oletus)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\tPäivityspäivämäärät:\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tJulkaistu: %s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tSeuraava osoitteessa: %s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\tLaajennukset:\n" - -#: lib/x509/output.c:2007 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tCRL-numero (%s): " - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tViranomaispääavain (%s):\n" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tTuntematon laajennus %s (%s):\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tKumotut varmenteet (%d):\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\tEi kumottuja varmenteita.\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tSarjanumero (heksaluku): " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tKumottu osoitteessa: %s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "X.509-varmennekumoamisluettelotiedot:\n" - -#: lib/x509/output.c:2315 -msgid "\tAttributes:\n" -msgstr "\tAttribuutit:\n" - -#: lib/x509/output.c:2367 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "\t\tHaastesalasana: %s\n" - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tTuntematon attribuutti %s:\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "PKCS #10 -varmennepyyntötiedot:\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "Julkisen avaimen käyttö:\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "Julkisen avaimen tunniste: " - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "Julkisen avaimen tiedot:\n" - -#~ msgid "PKCS #11 error in PIN." -#~ msgstr "PKCS #11 virhe PIN-luvussa." - -#~ msgid "PKCS #11 PIN should be saved." -#~ msgstr "PKCS #11 PIN-luku pitäisi tallentaa." - -#~ msgid "\tSubject Public Key Algorithm: %s\n" -#~ msgstr "\tAiheen julkinen avainalgoritmi: %s\n" - -#~ msgid "The peer did not send any certificate." -#~ msgstr "Vastapuoli ei lähettänyt mitään varmennetta." - -#~ msgid "The initialization of GnuTLS-extra has failed." -#~ msgstr "GnuTLS-extra -alustus epäonnistui." - -#~ msgid "The GnuTLS library version does not match the GnuTLS-extra library version." -#~ msgstr "GnuTLS-kirjastoversio ei täsmää GnuTLS-extra -kirjastoversion kanssa." - -#~ msgid "The initialization of LZO has failed." -#~ msgstr "LZO-alustus epäonnistui." - -#~ msgid "The handshake data size is too large (DoS?), check gnutls_handshake_set_max_packet_length()." -#~ msgstr "Kättelytietojen koko on liian suuri (DoS?), tarkista gnutls_handshake_set_max_packet_length()." - -#~ msgid "Inner application negotiation failed" -#~ msgstr "Sisäinen sopimusneuvottelu epäonnistui" - -#~ msgid "Inner application verification failed" -#~ msgstr "Sisäinen sovellustodentaminen epäonnistui" diff --git a/po/fr.po.in b/po/fr.po.in deleted file mode 100644 index dc926dac38..0000000000 --- a/po/fr.po.in +++ /dev/null @@ -1,1474 +0,0 @@ -# translation of libgnutls to French -# Copyright (C) 2008 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# -# Nicolas Provost , 2009. -# Stéphane Aulery , 2015. -# -# Réencodage ISO-8859-1 => UTF-8 et typos, S. Aulery, 2015 -# Traduction et relecture complète, 25-04-2015, S. Aulery, 25-04-2015. -# -msgid "" -msgstr "" -"Project-Id-Version: libgnutls 3.2.3\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-07-28 23:51+0200\n" -"PO-Revision-Date: 2015-04-25 19:49+0200\n" -"Last-Translator: Stéphane Aulery \n" -"Language-Team: French \n" -"Language: fr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "Notification de fermeture" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "Message inattendu" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "Mauvais bloc MAC" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "Décryptage échoué" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "Dépassement de taille d’enregistrement" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "Décompression échouée" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "Négociation échouée" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "Mauvais certificat" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "Ce certificat n’est pas pris en charge" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "Certificat révoqué" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "Certificat expiré" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "Certificat inconnu" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "Paramètre illégal" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "Autorité de certification inconnue" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "Accès refusé" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "Erreur de décodage" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "Erreur de déchiffrage" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "Restriction d’export" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "Erreur de version de protocole" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "Sécurité insuffisante" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "Utilisateur annulé" - -#: lib/gnutls_alert.c:65 -msgid "No certificate (SSL 3.0)" -msgstr "Pas de certificats (SSL 3.0)" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "Erreur interne" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "Renégociation interdite" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "Impossible d’obtenir le certificat spécifié" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "Une extension non supportée a été transmise" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "Le nom de serveur transmis était inconnu" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "Le nom d’utilisateur SRP/PSK est absent ou inconnu" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "Aucun protocol d’application pris en charge n’a pu être négocié" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Succès." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Impossible de négocier une méthode de chiffrement." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "Pas assez de propriétés renseignées." - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "Le type cipher n’est pas pris en charge." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "Le certificat ne correspond pas à la clef fournie." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Impossible de négocier une méthode de compression prise en charge." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "Algorithme de clef publique inconnu." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "L’algorithme négocié n’est pas activé." - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "Un paquet de données contenant un numéro de version illégal a été reçu." - -#: lib/gnutls_errors.c:70 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "Le nombre de Diffie-Hellman envoyé par le serveur n’est pas suffisamment grand." - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "Un paquet TLS de longueur incorrecte a été reçu." - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "La connexion TLS n’a pas été terminée correctement." - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "La session spécifiée a été invalidée pour une raison non précisée." - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "Erreur interne de GnuTLS." - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "Une extension TLS illégale a été reçue." - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "Une alerte TLS fatale a été reçue." - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "Un paquet TLS incorrect a été reçu." - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "Un avertissement TLS a été reçu." - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "Erreur durant la préparation du paquet TLS de fin d’établissement de session." - -#: lib/gnutls_errors.c:92 -msgid "No certificate was found." -msgstr "Pas de certificat trouvé" - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "La clef DSA est incompatible avec le protocole TLS sélectionné." - -#: lib/gnutls_errors.c:96 -msgid "A heartbeat pong message was received." -msgstr "Un message de pong heartbeat a été reçu." - -#: lib/gnutls_errors.c:98 -msgid "A heartbeat ping message was received." -msgstr "Un message de ping heartbeat a été reçu." - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Un algorithme de chiffrement de priorité inférieure a déjà été sélectionné." - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "Paramètres temporaires RSA non trouvés." - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "Paramètres temporaires DH non trouvés." - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "Un paquet de négociation TLS incorrect a été reçu." - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "Échec lors de la recherche d’un grand entier." - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "Impossible de transmettre un grand entier." - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "Décryptage échoué." - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "Chiffrement échoué." - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "Déchiffrement de la clef publique échoué." - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "Chiffrement de la clef publique échoué." - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "Signature de la clef publique échouée." - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "Vérification de la signature de la clef publique échouée." - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "Échec de la décompression d'un paquet TLS de données applicatives (\"TLS Record\")." - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "Compression du paquet TLS de données applicatives échouée." - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "Erreur interne d’allocation mémoire." - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "Une fonctionnalité non prise en charge ou désactivée a été demandée." - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "Droits insuffisants pour satisfaire cette demande." - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "Erreur dans le fichier de mot de passe." - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "Remplissage des vides de paquet PKCS1 incorrect." - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "La session demandée a expiré." - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "Le calcul d’empreinte a échoué." - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Erreur de décodage Base64." - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "Erreur d’entête Base64." - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Erreur d’encodage Base64." - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "Erreur d’analyse du fichier de mot de passe." - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "Les données demandées ne sont pas disponibles." - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "Erreur de la fonction « pull »." - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "Erreur de la fonction « push »." - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "La valeur maximale des numéros de séquence de paquets de données applicatives a été atteinte. Wow !" - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "Erreur dans le certificat." - -#: lib/gnutls_errors.c:157 -msgid "Could not authenticate peer." -msgstr "Impossible de s’authentifier sur la machine distante." - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "L’entrée « Subject Alternative Name » (autre nom du sujet) du certificat X.509 est inconnue." - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Une extension critique du certificat X.509 n’est pas prise en charge." - -#: lib/gnutls_errors.c:164 -msgid "Unsupported extension in X.509 certificate." -msgstr "Une extension du certificat X.509 n’est pas prise en charge." - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "Violation d’utilisation de la clef d’un certificat détectée." - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "Ressource temporairement indisponible. Réessayer." - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "Le paquet transmis est trop grand (EMSGSIZE)." - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "Fonction interrompue." - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "Une renégociation a été demandée par la machine distante." - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "Des données applicatives TLS ont été reçues alors que des données de négociation étaient attendues." - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "Erreur dans la structure de la base de données." - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "Ce type de certificat n’est pas pris en charge." - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "Le tampon mémoire donné est trop petit pour contenir tous les paramètres." - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "Requête invalide." - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "Mauvais cookie." - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "Un paramètre illégal a été reçu." - -#: lib/gnutls_errors.c:187 -msgid "An illegal parameter was found." -msgstr "Un paramètre illégal a été trouvé." - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "Erreur de lecture de fichier." - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "Analyseur ASN1 : élément manquant." - -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "Analyseur ASN1 : identifiant manquant." - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "Analyseur ASN1 : erreur d’analyse dans DER." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "Analyseur ASN1 : valeur manquant." - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "Analyseur ASN1 : erreur d’analyse générique." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "Analyseur ASN1 : valeur invalide." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "Analyseur ASN1 : erreur dans TAG." - -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "Analyseur ASN1 : erreur d’un tag implicite." - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "Analyseur ASN1 : erreur dans le type « ANY »." - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "Analyseur ASN1 : erreur de syntaxe." - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "Analyseur ASN1 : dépassement de capacité lors de l’analyse de DER." - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "Trop de paquets de données applicatives vides ont été reçus." - -#: lib/gnutls_errors.c:215 -msgid "Too many handshake packets have been received." -msgstr "Trop de paquets de négociation ont été reçus." - -#: lib/gnutls_errors.c:217 -msgid "The crypto library version is too old." -msgstr "La version utilisée de la bibliothèque crypto est trop ancienne." - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "La version utilisée de la bibliothèque tasn1 est trop ancienne." - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "L'identifiant d’utilisateur OpenPGP est révoqué." - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "La clef OpenPGP n’a pas de trousseau de clefs préféré." - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "Erreur au chargement du trousseau de clefs." - -#: lib/gnutls_errors.c:228 -msgid "The initialization of crypto backend has failed." -msgstr "Initialisation du backend de crypto échouée." - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "Aucun algorithme de compression pris en charge n’a été trouvé." - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "Aucune méthode de chiffrement n’a été trouvée." - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "Impossible d’obtenir la clef OpenPGP." - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "Impossible de trouver la sous-clef OpenPGP." - -#: lib/gnutls_errors.c:238 -msgid "Safe renegotiation failed." -msgstr "Renégociation robuste interdite" - -#: lib/gnutls_errors.c:240 -msgid "Unsafe renegotiation denied." -msgstr "Renégociation non robuste interdite" - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "Le nom d’utilisateur SRP communiqué est illicite." - -#: lib/gnutls_errors.c:245 -msgid "The SRP username supplied is unknown." -msgstr "Le nom d’utilisateur SRP communiqué est inconnu." - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "Cette empreinte OpenPGP n’est pas prise en charge." - -#: lib/gnutls_errors.c:250 -msgid "The signature algorithm is not supported." -msgstr "L’algorithme de signature n’est pris en charge." - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "Le certificat possède des attributs non pris en charge." - -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "Identifiant OID non pris en charge." - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "Algorithme d’empreinte inconnu." - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "Type de structure PKCS inconnu." - -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "Type de conteneur PKCS inconnu." - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "Le mot de passe fourni comporte des caractères invalides." - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "Échec de la vérification du code d’authentification du message." - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "Certaines valeurs limites ont été atteintes." - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "Impossible de générer une valeur aléatoire." - -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "Un message TLS/IA signalant l’avant-dernière étape de l’échange de données et clefs complémentaires a été reçu." - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "Un message TLS/IA signalant la fin de l’échange de données et clefs complémentaires a été reçu." - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "Échec de la vérification de la somme de contrôle TLS/IA." - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "L’algorithme ou le protocole demandé est inconnu." - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "La taille de données de la négociation est trop grande." - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "Erreur d’ouverture de /dev/crypto" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "Erreur d’interface avec /dev/crypto" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "La machine distante a mis fin à la connexion" - -#: lib/gnutls_errors.c:291 -msgid "Channel binding data not available" -msgstr "Données de liaison de canal indisponibles." - -#: lib/gnutls_errors.c:294 -msgid "TPM error." -msgstr "Erreur TPM." - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "TPM non initialisé." - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "Clef TPM introuvable sur le stockage persistant." - -#: lib/gnutls_errors.c:300 -msgid "Cannot initialize a session with the TPM." -msgstr "Impossible d’initialiser une session avec TPM." - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error." -msgstr "PKCS #11 erreur." - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "PKCS #11 erreur d’initialisation" - -#: lib/gnutls_errors.c:306 -msgid "Error in parsing." -msgstr "Erreur d’analyse." - -#: lib/gnutls_errors.c:308 -msgid "Error in provided PIN." -msgstr "Code PIN incorrect." - -#: lib/gnutls_errors.c:310 -msgid "Error in provided SRK password for TPM." -msgstr "Erreur dans le mot de passe SRK fourni par TPM." - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "Erreur dans le mot de passe pour la clef de chargement TPM." - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "PKCS #11 erreur d’emplacement." - -#: lib/gnutls_errors.c:316 -msgid "Thread locking error" -msgstr "Erreur de verrouillage de thread." - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "PKCS #11 erreur d’attribut" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "PKCS #11 erreur de périphérique" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "PKCS #11 erreur de données" - -#: lib/gnutls_errors.c:324 -msgid "PKCS #11 unsupported feature" -msgstr "PKCS #11 fonctionnalité non prise en charge" - -#: lib/gnutls_errors.c:326 -msgid "PKCS #11 error in key" -msgstr "PKCS #11 erreur de clef" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "PKCS #11 PIN expiré" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "PKCS #11 PIN bloqué" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "PKCS #11 erreur de session" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "PKCS #11 erreur de signature" - -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "PKCS #11 erreur de jeton" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "PKCS #11 erreur d’utilisateur" - -#: lib/gnutls_errors.c:340 -msgid "The operation timed out" -msgstr "Opération hors délais" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "Opération annulée suite à une erreur de l’utilisateur" - -#: lib/gnutls_errors.c:344 -msgid "No supported ECC curves were found" -msgstr "Aucune courbe ECC prise en charge trouvée" - -#: lib/gnutls_errors.c:346 -msgid "The curve is unsupported" -msgstr "La courbe n’est pas prise en charge" - -#: lib/gnutls_errors.c:348 -msgid "The requested PKCS #11 object is not available" -msgstr "L’objet PKCS #11 demandé n’est pas disponible." - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "La liste de certificats X.509 fournie n’est pas triée (dans l’ordre sujet vers émetteur)" - -#: lib/gnutls_errors.c:352 -msgid "The OCSP response is invalid" -msgstr "La réponse OCSP est invalide" - -#: lib/gnutls_errors.c:354 -msgid "There is no certificate status (OCSP)." -msgstr "Pas d’état de certificat (OCSP)." - -#: lib/gnutls_errors.c:356 -msgid "Error in the system's randomness device." -msgstr "Erreur du périphérique système de génération de nombres aléatoires." - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "Aucun protocole d’application commun n’a pu négocié." - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(code d’erreur inconnu)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\tUsages possibles de la clef :\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "Erreur : get_key_usage : %s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tSignatures électroniques.\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tChiffrement de communications.\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tChiffrement de stockage de données.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tAuthentification.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tSignature de certificat.\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tIdentifiant (hexa.) :" - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\tEmpreinte (hexa.) : " - -#: lib/openpgp/output.c:126 -msgid "\tFingerprint's random art:\n" -msgstr "\tArt aléatoire d’empreinte :\n" - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\tRévoqué : oui\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\tRévoqué : non\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\tHorodatage :\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tCréation : %s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tExpiration : jamais\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tExpiration : %s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "inconnu" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tAlgorithme de clef publique : %s\n" - -#: lib/openpgp/output.c:219 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\tNiveau de sécurité de la clef : %s\n" - -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tModule (%d bits) :\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\tExposant :\n" - -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tClef publique (%d bits) :\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP :\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ :\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG :\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tVersion : %d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tNom[%d] : %s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tNom révoqué[%d] : %s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tSous-clef[%d] :\n" - -#: lib/openpgp/output.c:400 -#, c-format -msgid "name[%d]: %s, " -msgstr "nom[%d] : %s, " - -#: lib/openpgp/output.c:402 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "nom révoqué[%d] : %s, " - -#: lib/openpgp/output.c:422 -msgid "fingerprint: " -msgstr "empreinte : " - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "créé : %s, " - -#: lib/openpgp/output.c:452 -msgid "never expires, " -msgstr "n’expire jamais, " - -#: lib/openpgp/output.c:460 -#, c-format -msgid "expires: %s, " -msgstr "expire le : %s, " - -#: lib/openpgp/output.c:472 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "algorithme de clef %s (%d bits)" - -#: lib/openpgp/output.c:474 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "algorithme de clef inconnu (%d)" - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "Détails du certificat OpenPGP :\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII : " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\tCode hexadécimal : " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "informations de la requête OCSP :\n" - -#: lib/x509/ocsp_output.c:298 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "\tIdentifiant du répondeur : %.*s\n" - -#: lib/x509/ocsp_output.c:316 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\tProduit à : %s\n" - -#: lib/x509/ocsp_output.c:410 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\tDate de révocation : %s\n" - -#: lib/x509/ocsp_output.c:425 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\tCette mise à jour : %s\n" - -#: lib/x509/ocsp_output.c:440 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\tProchaine mise à jour : %s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tAlgorithme de signature : %s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "attention : signé par un algorithme de signature compromis et potentiellement non fiable.\n" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\tSignature :\n" - -#: lib/x509/ocsp_output.c:619 -msgid "OCSP Response Information:\n" -msgstr "Informations de la requête OCSP :\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "attention : le champ altname contient un caractère NUL, remplacé par « ! »\n" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tProfondeur de chemin de certificats : %d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\tLangue du règlement : %s" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\tRèglement :\n" -"\t\t\t\tASCII :" - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\tCode hexadécimal :" - -#: lib/x509/output.c:185 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\tMéthode d’accès : %.*s" - -#: lib/x509/output.c:428 -#, c-format -msgid "%sDigital signature.\n" -msgstr "%sSignature électronique.\n" - -#: lib/x509/output.c:430 -#, c-format -msgid "%sNon repudiation.\n" -msgstr "%sNon répudiation.\n" - -#: lib/x509/output.c:432 -#, c-format -msgid "%sKey encipherment.\n" -msgstr "%sChiffrement de clef.\n" - -#: lib/x509/output.c:434 -#, c-format -msgid "%sData encipherment.\n" -msgstr "%sChiffrement de données.\n" - -#: lib/x509/output.c:436 -#, c-format -msgid "%sKey agreement.\n" -msgstr "%sValidation de clef.\n" - -#: lib/x509/output.c:438 -#, c-format -msgid "%sCertificate signing.\n" -msgstr "%sSignature de certificat.\n" - -#: lib/x509/output.c:440 -#, c-format -msgid "%sCRL signing.\n" -msgstr "%sSignature de liste de révocation (CRL).\n" - -#: lib/x509/output.c:442 -#, c-format -msgid "%sKey encipher only.\n" -msgstr "%sChiffrement de clef seulement.\n" - -#: lib/x509/output.c:444 -#, c-format -msgid "%sKey decipher only.\n" -msgstr "%sDéchiffrement de clef seulement.\n" - -#: lib/x509/output.c:482 -#, c-format -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\t\tPas avant : %s\n" - -#: lib/x509/output.c:489 -#, c-format -msgid "\t\t\tNot After: %s\n" -msgstr "\t\t\tPas après : %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "attention : le point de distribution contient un caractère NUL, remplacé par « ! »\n" - -#: lib/x509/output.c:632 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tServeur web TLS.\n" - -#: lib/x509/output.c:634 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tClient web TLS.\n" - -#: lib/x509/output.c:636 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\tSignature de code.\n" - -#: lib/x509/output.c:638 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tProtection d’email.\n" - -#: lib/x509/output.c:640 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\tHorodatage.\n" - -#: lib/x509/output.c:642 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tSignature OCSP.\n" - -#: lib/x509/output.c:644 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIpsec IKE.\n" - -#: lib/x509/output.c:646 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\tTout usage.\n" - -#: lib/x509/output.c:677 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\tAutorité de certification (CA) : NON\n" - -#: lib/x509/output.c:679 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\tAutorité de certification (CA) : OUI\n" - -#: lib/x509/output.c:682 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\tProfondeur de chemin de certificats (Path Length Constraint) : %d\n" - -#: lib/x509/output.c:814 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tAdresse XMPP : %.*s\n" - -#: lib/x509/output.c:819 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "%s\t\t\tAutre nom OID : %.*s\n" - -#: lib/x509/output.c:821 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "%s\t\t\tAutre nom DER : " - -#: lib/x509/output.c:823 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" -"\n" -"%s\t\t\tAutre nom ASCII :" - -#: lib/x509/output.c:945 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\tExtensions :\n" - -#: lib/x509/output.c:955 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\tContraintes de base (%s) :\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "critique" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "non critique" - -#: lib/x509/output.c:970 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "%s\t\tIdentifiant de clef du sujet (%s) :\n" - -#: lib/x509/output.c:1028 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "%s\t\tIdentifiant de la clef de l’autorité (%s) :\n" - -#: lib/x509/output.c:1044 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\tUsages possibles de la clef (%s) :\n" - -#: lib/x509/output.c:1061 -#, c-format -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "%s\t\tUtilisation de la clef (%s) :\n" - -#: lib/x509/output.c:1076 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\tUtilisation prévue de la clef (%s) :\n" - -#: lib/x509/output.c:1090 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "%s\t\tAutre nom du sujet (%s) :\n" - -#: lib/x509/output.c:1105 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "%s\t\tAutre nom de l’émetteur(%s) :\n" - -#: lib/x509/output.c:1120 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tPoints de distribution des listes de révocation (%s) :\n" - -#: lib/x509/output.c:1135 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\tDétails du certificat du proxy (%s) :\n" - -#: lib/x509/output.c:1145 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "%s\t\tInformation d’accès de l’autorité (%s) :\n" - -#: lib/x509/output.c:1157 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\tExtension inconnue %s (%s) :\n" - -#: lib/x509/output.c:1204 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII : " - -#: lib/x509/output.c:1208 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\tCode hexadécimal : " - -#: lib/x509/output.c:1237 -#, c-format -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\t%sAlgorithme de clef publique : %s\n" - -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "\tNiveau de sécurité de l’algorithme : %s (%d bits)\n" - -#: lib/x509/output.c:1254 -#, c-format -msgid "\t\tModulus (bits %d): " -msgstr "\t\tModule (%d bits) : " - -#: lib/x509/output.c:1257 -#, c-format -msgid "\t\tExponent (bits %d): " -msgstr "\t\tExposant (%d bits) : " - -#: lib/x509/output.c:1265 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tExposant (%d bits) :\n" - -#: lib/x509/output.c:1286 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\tCourbe :\t%s\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX : " - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY : " - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX :\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY :\n" - -#: lib/x509/output.c:1322 -#, c-format -msgid "\t\tPublic key (bits %d): " -msgstr "\t\tClef publique (%d bits) :" - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP : " - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ : " - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG : " - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -msgid "Subject " -msgstr "Sujet : " - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\tNuméro de série (hexa.) : " - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tÉmetteur : %s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\tValidité :\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tPas avant : %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tPas après : %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\tSujet : %s\n" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tEmpreinte MD5 :\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tEmpreinte SHA-1 :\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tIdentifiant de clef publique :\n" -"\t\t" - -#: lib/x509/output.c:1627 -msgid "\tPublic key's random art:\n" -msgstr "\tArt aléatoire de clef publique :\n" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "signé avec %s (cassé !), " - -#: lib/x509/output.c:1725 -#, c-format -msgid "signed using %s, " -msgstr "signé avec %s, " - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "Détail du certificat X.509 :\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "Autres informations :\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\tVersion : 1 (par défaut)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\tDates de mise à jour :\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tÉmis : %s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tProchainement : %s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\tExtensions :\n" - -#: lib/x509/output.c:2007 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tNuméro de liste de révocation (CRL) (%s) :" - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tIdentifiant de la clef de l’autorité (%s) :\n" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tExtension inconnue %s (%s) :\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tCertificats révoqués (%d) :\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\tCertificats non révoqués.\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tNuméro de série (hexa.) : " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tRévoqué le : %s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "Détails sur la liste de révocation du certificat X.509 :\n" - -#: lib/x509/output.c:2315 -msgid "\tAttributes:\n" -msgstr "\tAttributs :\n" - -#: lib/x509/output.c:2367 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "\t\tMot de passe challenge : %s\n" - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tAttribut inconnu %s :\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "Informations de requête de certificat PKCS #10 :\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "Utilisation de la clef publique :\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "Identifiant de clef publique : " - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "Informations de clef publique :\n" diff --git a/po/it.po.in b/po/it.po.in deleted file mode 100644 index 4914a443b9..0000000000 --- a/po/it.po.in +++ /dev/null @@ -1,1472 +0,0 @@ -# Italian translation for libgnutls. -# Copyright (C) 2010, 2011, 2013 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# Sergio Zanchetta , 2010, 2011, 2012. -# Milo Casagrande , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: libgnutls-3.2.3\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-07-28 23:51+0200\n" -"PO-Revision-Date: 2013-09-08 17:08+0200\n" -"Last-Translator: Milo Casagrande \n" -"Language-Team: Italian \n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8-bit\n" -"Plural-Forms: nplurals=2; plural=(n!=1);\n" -"X-Generator: Gtranslator 2.91.6\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "Notifica di chiusura" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "Messaggio inatteso" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "Record con MAC errato" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "Decifrazione non riuscita" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "Overflow del record" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "Decompressione non riuscita" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "Handshake non riuscito" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "Il certificato non è valido" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "Il certificato non è supportato" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "Il certificato è stato revocato" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "Il certificato è scaduto" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "Certificato sconosciuto" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "Parametro non lecito" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "La CA è sconosciuta" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "L'accesso è stato negato" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "Errore di decodifica" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "Errore di decifrazione" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "Limite all'esportazione" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "Errore nella versione del protocollo" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "Sicurezza insufficiente" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "Annullato dall'utente" - -#: lib/gnutls_alert.c:65 -msgid "No certificate (SSL 3.0)" -msgstr "Nessun certificato (SSL 3.0)" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "Errore interno" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "Non è permessa alcuna rinegoziazione" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "Impossibile recuperare il certificato specificato" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "È stata inviata una estensione non supportata" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "Il nome server inviato non è stato riconosciuto" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "Il nome utente SRP/PSK è mancante o sconosciuto" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "Impossibile negoziare un protocollo di applicazione supportato" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Successo." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Impossibile negoziare una suite supportata di cifrari." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "Priorità non impostate o insufficienti." - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "Il tipo di cifrario non è supportato." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "Il certificato e la chiave fornita non corrispondono." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Impossibile negoziare un metodo di compressione supportato." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "È stato trovato un algoritmo a chiave pubblica sconosciuto." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "È stato negoziato un algoritmo non abilitato." - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "È stato ricevuto un pacchetto di record con versione non valida." - -#: lib/gnutls_errors.c:70 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "Il numero primo di Diffie-Hellman inviato dal server non è accettabile (non è abbastanza lungo)." - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "È stato ricevuto un pacchetto TLS di lunghezza inattesa." - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "La connessione TLS non è stata terminata in modo corretto." - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "La sessione specificata è stata invalidata per qualche motivo." - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "Errore interno di GnuTLS." - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "È stata ricevuta una estensione TLS non lecita." - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "È stato ricevuto un segnale di allarme critico TLS." - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "È stato ricevuto un pacchetto TLS inatteso." - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "È stato ricevuto un segnale di avviso TLS." - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "È stato rilevato un errore nel calcolo del pacchetto TLS Finished." - -#: lib/gnutls_errors.c:92 -msgid "No certificate was found." -msgstr "Non è stato trovato alcun certificato." - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "La chiave DSA fornita non è compatibile con il protocollo TLS selezionato." - -#: lib/gnutls_errors.c:96 -msgid "A heartbeat pong message was received." -msgstr "È stato ricevuto un messaggio di heartbeat pong." - -#: lib/gnutls_errors.c:98 -msgid "A heartbeat ping message was received." -msgstr "È stato ricevuto un messaggio di heartbeat ping." - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Esiste già un algoritmo di cifratura con priorità più bassa." - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "Non è stato trovato alcun parametro RSA temporaneo." - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "Non è stato trovato alcun parametro DH temporaneo." - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "È stato ricevuto un pacchetto di handshake TLS inatteso." - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "La scansione di un intero large non è riuscita." - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "Impossibile esportare un intero large." - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "Decifrazione non riuscita." - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "Cifratura non riuscita." - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "Decifrazione della chiave pubblica non riuscita." - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "Cifratura della chiave pubblica non riuscita." - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "Firma della chiave pubblica non riuscita." - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "Verifica della firma della chiave pubblica non riuscita." - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "Decompressione del pacchetto di record TLS non riuscita." - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "Compressione del pacchetto di record TLS non riuscita." - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "Errore interno nell'allocazione di memoria." - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "È stata richiesta una funzione non implementata o disabilitata." - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "Credenziali non sufficienti per quella richiesta." - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "Errore nel file di password." - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "Riempimento non corretto nel pacchetto PKCS1." - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "La sessione richiesta è scaduta." - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "L'hash non è riuscito." - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Errore nella decodifica base64." - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "Errore inatteso nell'header base64." - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Errore nella codifica base64." - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "Errore di analisi nel file di password." - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "I dati richiesti non erano disponibili." - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "Errore nella funzione pull." - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "Errore nella funzione push." - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "È stato raggiunto il limite superiore nel numero di pacchetti di record sequenziali." - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "Errore nel certificato." - -#: lib/gnutls_errors.c:157 -msgid "Could not authenticate peer." -msgstr "Impossibile autenticare il nodo." - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "Nome alternativo del soggetto sconosciuto nel certificato X.509." - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Estensione critica non supportata nel certificato X.509." - -#: lib/gnutls_errors.c:164 -msgid "Unsupported extension in X.509 certificate." -msgstr "Estensione non supportata nel certificato X.509." - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "È stata rilevata una violazione nell'utilizzo della chiave nel certificato." - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "Risorsa temporaneamente non disponibile, riprovare." - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "Il pacchetto trasmesso è troppo grande (EMSGSIZE)." - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "La funzione è stata interrotta." - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "Il nodo ha richiesto nuovamente l'handshake." - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "Sono stati ricevuti dati TLS Application, mentre erano attesi dati handshake." - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "Errore nel backend del database." - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "Il tipo di certificato non è supportato." - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "Il buffer di memoria fornito è troppo corto per contenere i parametri." - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "La richiesta non è valida." - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "Il cookie non era valido." - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "È stato ricevuto un parametro non lecito." - -#: lib/gnutls_errors.c:187 -msgid "An illegal parameter was found." -msgstr "È stato trovato un parametro non lecito." - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "Errore nella lettura del file." - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "Analizzatore ASN1: elemento non trovato." - -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "Analizzatore ASN1: identificativo non trovato." - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "Analizzatore ASN1: errore nell'analisi DER." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "Analizzatore ASN1: valore non trovato." - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "Analizzatore ASN1: errore generico di analisi." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "Analizzatore ASN1: valore non valido." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "Analizzatore ASN1: errore nel TAG." - -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "Analizzatore ASN1: errore nel tag implicito." - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "Analizzatore ASN1: errore nel tipo \"ANY\"." - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "Analizzatore ASN1: errore di sintassi." - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "Analizzatore ASN1: overflow nell'analisi DER." - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "Sono stati ricevuti troppi pacchetti di record vuoti." - -#: lib/gnutls_errors.c:215 -msgid "Too many handshake packets have been received." -msgstr "Sono stati ricevuti troppi pacchetti di handshake." - -#: lib/gnutls_errors.c:217 -msgid "The crypto library version is too old." -msgstr "Versione troppo vecchia della libreria crypto." - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "Versione troppo vecchia della libreria tasn1." - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "L'ID utente OpenPGP è revocato." - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "La chiave OpenPGP non ha un set di chiavi preferito." - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "Errore nel caricare il portachiavi." - -#: lib/gnutls_errors.c:228 -msgid "The initialization of crypto backend has failed." -msgstr "Inizializzazione non riuscita del backend crypto." - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "Non è stato trovato alcun algoritmo di compressione supportato." - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "Non è stata trovata alcuna suite di cifratura supportata." - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "Impossibile ottenere la chiave OpenPGP." - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "Impossibile trovare la sottochiave OpenPGP." - -#: lib/gnutls_errors.c:238 -msgid "Safe renegotiation failed." -msgstr "Rinegoziazione sicura non riuscita." - -#: lib/gnutls_errors.c:240 -msgid "Unsafe renegotiation denied." -msgstr "Rinegoziazione non sicura negata." - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "Il nome utente SRP fornito non è lecito." - -#: lib/gnutls_errors.c:245 -msgid "The SRP username supplied is unknown." -msgstr "Il nome utente SRP fornito è sconosciuto." - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "L'impronta digitale OpenPGP non è supportata." - -#: lib/gnutls_errors.c:250 -msgid "The signature algorithm is not supported." -msgstr "L'algoritmo di firma non è supportato." - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "Il certificato contiene attributi non supportati." - -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "L'OID non è supportato." - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "L'algoritmo di hash è sconosciuto." - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "Il tipo di contenuto della struttura PKCS è sconosciuto." - -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "Il tipo di contenitore della struttura PKCS è sconosciuto." - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "La password fornita contiene caratteri non validi." - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "La verifica del codice di autenticazione dei messaggi (MAC) non è riuscita." - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "Sono stati raggiunti alcuni valori limite sui vincoli." - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "Acquisizione di dati casuali non riuscita." - -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "Ricevuto un messaggio di fine della fase intermedia TLS/IA" - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "Ricevuto un messaggio di fine della fase finale TLS/IA" - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "Verifica del codice di controllo nella fase TLS/IA non riuscita" - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "L'algoritmo o il protocollo specificato è sconosciuto." - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "La dimensione dei dati di handshake è troppo grande." - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "Errore nell'apertura di /dev/crypto" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "Errore nell'interfacciamento con /dev/crypto" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "Il nodo ha terminato la connessione" - -#: lib/gnutls_errors.c:291 -msgid "Channel binding data not available" -msgstr "Dati dell'associazione di canale non disponibili" - -#: lib/gnutls_errors.c:294 -msgid "TPM error." -msgstr "Errore TPM." - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "TPM non inizializzato." - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "La chiave TPM non è stata trovata nell'archivio di memorizzazione." - -#: lib/gnutls_errors.c:300 -msgid "Cannot initialize a session with the TPM." -msgstr "Impossibile inizializzare una sessione col TPM." - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error." -msgstr "Errore PKCS #11." - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "Errore PKCS #11 di inizializzazione." - -#: lib/gnutls_errors.c:306 -msgid "Error in parsing." -msgstr "Errore nell'analisi." - -#: lib/gnutls_errors.c:308 -msgid "Error in provided PIN." -msgstr "Errore nel PIN fornito." - -#: lib/gnutls_errors.c:310 -msgid "Error in provided SRK password for TPM." -msgstr "Errore nella password SRK fornita per TPM." - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "Errore nella password fornita per la chiave da caricare nel TPM." - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "Errore PKCS #11 nello slot" - -#: lib/gnutls_errors.c:316 -msgid "Thread locking error" -msgstr "Errore nel blocco del thread" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "Errore PKCS #11 nell'attributo" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "Errore PKCS #11 nel dispositivo" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "Errore PKCS #11 nei dati" - -#: lib/gnutls_errors.c:324 -msgid "PKCS #11 unsupported feature" -msgstr "Funzionalità PKCS #11 non supportata" - -#: lib/gnutls_errors.c:326 -msgid "PKCS #11 error in key" -msgstr "Errore PKCS #11 nella chiave" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "PIN PKCS #11 scaduto" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "PIN PKCS #11 bloccato" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "Errore PKCS #11 nella sessione" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "Errore PKCS #11 nella firma" - -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "Errore PKCS #11 nel token" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "Errore PKCS #11 dell'utente" - -#: lib/gnutls_errors.c:340 -msgid "The operation timed out" -msgstr "L'operazione è scaduta" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "L'operazione è stata annullata a causa di un errore utente" - -#: lib/gnutls_errors.c:344 -msgid "No supported ECC curves were found" -msgstr "Non è stata trovata alcuna curva ECC supportata" - -#: lib/gnutls_errors.c:346 -msgid "The curve is unsupported" -msgstr "La curva non è supportata" - -#: lib/gnutls_errors.c:348 -msgid "The requested PKCS #11 object is not available" -msgstr "L'oggetto PKCS #11 richiesto non è disponibile" - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "L'elenco di certificati X.509 fornito non è ordinato (dal soggetto all'emittente)" - -#: lib/gnutls_errors.c:352 -msgid "The OCSP response is invalid" -msgstr "La risposta OCSP non è valida" - -#: lib/gnutls_errors.c:354 -msgid "There is no certificate status (OCSP)." -msgstr "Stato del certificato non presente (OCSP)." - -#: lib/gnutls_errors.c:356 -msgid "Error in the system's randomness device." -msgstr "Errore nel dispositivo random del sistema." - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "Impossibile negoziare un protocollo di applicazione comune." - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(codice di errore sconosciuto)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\tUso della chiave:\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "errore: get_key_usage: %s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tFirme digitali.\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tCifratura delle comunicazioni.\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tCifratura dei dati di memorizzazione.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tAutenticazione.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tFirma del certificato.\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tID (hex): " - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\tImpronta digitale (hex): " - -#: lib/openpgp/output.c:126 -msgid "\tFingerprint's random art:\n" -msgstr "\tArte casuale dell'impronta digitale:\n" - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\tRevocato: vero\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\tRevocato: falso\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\tMarche temporali:\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tCreazione: %s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tScadenza: mai\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tScadenza: %s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "sconosciuto" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tAlgoritmo di chiave pubblica: %s\n" - -#: lib/openpgp/output.c:219 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\tLivello di sicurezza della chiave: %s\n" - -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tModulo (%d bit):\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\tEsponente:\n" - -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tChiave pubblica (%d bit):\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tVersione: %d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tNome[%d]: %s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tNome revocato[%d]: %s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tSottochiave[%d]:\n" - -#: lib/openpgp/output.c:400 -#, c-format -msgid "name[%d]: %s, " -msgstr "nome[%d]: %s, " - -#: lib/openpgp/output.c:402 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "nome revocato[%d]: %s, " - -#: lib/openpgp/output.c:422 -msgid "fingerprint: " -msgstr "impronta digitale: " - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "creata il: %s, " - -#: lib/openpgp/output.c:452 -msgid "never expires, " -msgstr "senza scadenza, " - -#: lib/openpgp/output.c:460 -#, c-format -msgid "expires: %s, " -msgstr "scade il: %s, " - -#: lib/openpgp/output.c:472 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "algoritmo della chiave %s (%d bit)" - -#: lib/openpgp/output.c:474 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "algoritmo di chiave sconosciuto (%d)" - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "Informazioni sul certificato OpenPGP:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\tDump esadecimale: " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "Informazioni sulla richiesta OCSP:\n" - -#: lib/x509/ocsp_output.c:298 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "\tID del risponditore: %.*s\n" - -#: lib/x509/ocsp_output.c:316 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\tProdotta il: %s\n" - -#: lib/x509/ocsp_output.c:410 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\tOra di revoca: %s\n" - -#: lib/x509/ocsp_output.c:425 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\tAggiornamento corrente: %s\n" - -#: lib/x509/ocsp_output.c:440 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\tProssimo aggiornamento: %s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tAlgoritmo di firma: %s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "attenzione: è stato firmato usando un algoritmo di firma difettoso che può essere contraffatto.\n" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\tFirma:\n" - -#: lib/x509/ocsp_output.c:619 -msgid "OCSP Response Information:\n" -msgstr "Informazioni sulla risposta OCSP:\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "attenzione: altname contiene un NUL incorporato, viene sostituito con \"!\"\n" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tVincolo sulla lunghezza del percorso: %d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\tLingua della politica: %s" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\tPolitica:\n" -"\t\t\t\tASCII: " - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\tDump esadecimale: " - -#: lib/x509/output.c:185 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\tMetodo di accesso: %.*s" - -#: lib/x509/output.c:428 -#, c-format -msgid "%sDigital signature.\n" -msgstr "%sFirma digitale.\n" - -#: lib/x509/output.c:430 -#, c-format -msgid "%sNon repudiation.\n" -msgstr "%sNon ripudio.\n" - -#: lib/x509/output.c:432 -#, c-format -msgid "%sKey encipherment.\n" -msgstr "%sCifratura della chiave.\n" - -#: lib/x509/output.c:434 -#, c-format -msgid "%sData encipherment.\n" -msgstr "%sCifratura dei dati.\n" - -#: lib/x509/output.c:436 -#, c-format -msgid "%sKey agreement.\n" -msgstr "%sAccordo sulla chiave.\n" - -#: lib/x509/output.c:438 -#, c-format -msgid "%sCertificate signing.\n" -msgstr "%sFirma del certificato.\n" - -#: lib/x509/output.c:440 -#, c-format -msgid "%sCRL signing.\n" -msgstr "%sFirma della CRL.\n" - -#: lib/x509/output.c:442 -#, c-format -msgid "%sKey encipher only.\n" -msgstr "%sSolo cifratura della chiave.\n" - -#: lib/x509/output.c:444 -#, c-format -msgid "%sKey decipher only.\n" -msgstr "%sSolo decifratura della chiave.\n" - -#: lib/x509/output.c:482 -#, c-format -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\t\tNon prima: %s\n" - -#: lib/x509/output.c:489 -#, c-format -msgid "\t\t\tNot After: %s\n" -msgstr "\t\t\tNon dopo: %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "attenzione: distributionPoint contiene un NUL incorporato, viene sostituito con \"!\"\n" - -#: lib/x509/output.c:632 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tServer WWW TLS.\n" - -#: lib/x509/output.c:634 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tClient WWW TLS.\n" - -#: lib/x509/output.c:636 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\tFirma del codice.\n" - -#: lib/x509/output.c:638 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tProtezione email.\n" - -#: lib/x509/output.c:640 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\tMarcatura temporale.\n" - -#: lib/x509/output.c:642 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tFirma OCSP.\n" - -#: lib/x509/output.c:644 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIKE ipsec.\n" - -#: lib/x509/output.c:646 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\tQualsiasi scopo.\n" - -#: lib/x509/output.c:677 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\tAutorità di certificazione (CA): FALSO\n" - -#: lib/x509/output.c:679 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\tAutorità di certificazione (CA): VERO\n" - -#: lib/x509/output.c:682 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\tVincolo sulla lunghezza del percorso: %d\n" - -#: lib/x509/output.c:814 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tIndirizzo XMPP: %.*s\n" - -#: lib/x509/output.c:819 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "%s\t\t\tOID di otherName: %.*s\n" - -#: lib/x509/output.c:821 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "%s\t\t\tDER di otherName: " - -#: lib/x509/output.c:823 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" -"\n" -"%s\t\t\tASCII di otherName: " - -#: lib/x509/output.c:945 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\tEstensioni:\n" - -#: lib/x509/output.c:955 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\tVincoli di base (%s):\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "critico" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "non critico" - -#: lib/x509/output.c:970 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "%s\t\tIdentificativo di chiave del soggetto (SKI) (%s):\n" - -#: lib/x509/output.c:1028 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "%s\t\tIdentificativo di chiave dell'autorità (AKI) (%s):\n" - -#: lib/x509/output.c:1044 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\tUso della chiave (%s):\n" - -#: lib/x509/output.c:1061 -#, c-format -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "%s\t\tPeriodo d'uso della chiave (%s):\n" - -#: lib/x509/output.c:1076 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\tScopo della chiave (%s):\n" - -#: lib/x509/output.c:1090 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "%s\t\tNome alternativo del soggetto (SAN) (%s):\n" - -#: lib/x509/output.c:1105 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "%s\t\tNome alternativo dell'emittente (%s):\n" - -#: lib/x509/output.c:1120 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tPunti di distribuzione CRL (%s):\n" - -#: lib/x509/output.c:1135 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\tInformazioni sul certificato proxy (PC) (%s):\n" - -#: lib/x509/output.c:1145 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "%s\t\tAccesso alle informazioni dell'autorità (AIA) (%s):\n" - -#: lib/x509/output.c:1157 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\tEstensione sconosciuta %s (%s):\n" - -#: lib/x509/output.c:1204 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII: " - -#: lib/x509/output.c:1208 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\tDump esadecimale: " - -#: lib/x509/output.c:1237 -#, c-format -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\t%sAlgoritmo di chiave pubblica: %s\n" - -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "\tLivello di sicurezza dell'algoritmo: %s (%d bit)\n" - -#: lib/x509/output.c:1254 -#, c-format -msgid "\t\tModulus (bits %d): " -msgstr "\t\tModulo (%d bit): " - -#: lib/x509/output.c:1257 -#, c-format -msgid "\t\tExponent (bits %d): " -msgstr "\t\tEsponente (%d bit): " - -#: lib/x509/output.c:1265 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tEsponente (%d bit):\n" - -#: lib/x509/output.c:1286 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\tCurva:\t%s\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX: " - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY: " - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -#: lib/x509/output.c:1322 -#, c-format -msgid "\t\tPublic key (bits %d): " -msgstr "\t\tChiave pubblica (%d bit): " - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP: " - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ: " - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG: " - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -msgid "Subject " -msgstr "Soggetto" - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\tNumero seriale (hex): " - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tEmittente: %s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\tValidità:\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tNon prima: %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tNon dopo: %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\tSoggetto: %s\n" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tImpronta digitale MD5:\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tImpronta digitale SHA-1:\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tId della chiave pubblica:\n" -"\t\t" - -#: lib/x509/output.c:1627 -msgid "\tPublic key's random art:\n" -msgstr "\t\tArte casuale della chiave pubblica:\n" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "firmato usando %s (difettoso), " - -#: lib/x509/output.c:1725 -#, c-format -msgid "signed using %s, " -msgstr "firmato usando %s, " - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "Informazioni sul certificato X.509:\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "Altre informazioni:\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\tVersione: 1 (predefinita)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\tDate di aggiornamento:\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tRilasciato il: %s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tProssimo il: %s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\tEstensioni:\n" - -#: lib/x509/output.c:2007 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tNumero CRL (%s): " - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tIdentificativo di chiave dell'autorità (AKI) (%s):\n" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tEstensione sconosciuta %s (%s):\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tCertificati revocati (%d):\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\tNessun certificato revocato.\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tNumero seriale (hex): " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tRevocato: %s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "Informazioni sull'elenco di revoca del certificato (CRL) X.509:\n" - -#: lib/x509/output.c:2315 -msgid "\tAttributes:\n" -msgstr "\tAttributi:\n" - -#: lib/x509/output.c:2367 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "\t\tChallenge password: %s\n" - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tAttributo sconosciuto %s:\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "Informazioni sulla richiesta di certificato (CR) PKCS #10:\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "Uso della chiave pubblica:\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "Id della chiave pubblica: " - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "Informazioni della chiave pubblica:\n" diff --git a/po/ms.po.in b/po/ms.po.in deleted file mode 100644 index 9054bd1396..0000000000 --- a/po/ms.po.in +++ /dev/null @@ -1,1600 +0,0 @@ -# libgnutls Bahasa Melayu (Malay) (ms) -# Copyright (C) 2006, 2007, 2008, 2015 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# Sharuzzaman Ahmat Raslan , 2006, 2007, 2008, 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: libgnutls 3.2.3\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-07-28 23:51+0200\n" -"PO-Revision-Date: 2015-06-29 20:58+0800\n" -"Last-Translator: Sharuzzaman Ahmat Raslan \n" -"Language-Team: Malay \n" -"Language: ms\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.1\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "Pemberitahuan tutup" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "Mesej tidak dijangka" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "Rekod MAC buruk" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "Nyahenkripsi gagal" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "Rekod melimpah" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "Nyahmampatan gagal" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "Jabat tangan gagal" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "Sijil buruk" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "Sijil tidak disokong" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "Sijil telah dibatalkan" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "Sijil tamat tempoh" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "Sijil tidak diketahui" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "Parameter tidak sah" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "CA tidak diketahui" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "Akses telah dihalang" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "Ralat decode" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "Ralat decrypt" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "Halangan eksport" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "Ralat dalam versi protokol" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "Sekuriti tidak mencukupi" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "Pengguna membatalkan" - -#: lib/gnutls_alert.c:65 -#, fuzzy -#| msgid "\tRevoked certificates (%d):\n" -msgid "No certificate (SSL 3.0)" -msgstr "Salaman TLS/SSL gagal!" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "Ralat dalaman" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "Tiada perbincangan semula dibenarkan" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "Tidak dapat mendapatkan sijil dinyatakan" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "Sambungan tidak disokong telah dihantar" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "Nama pelayan dihantar tidak dikenali" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "Nama pengguna SRP/PSK tiada atau tidak diketahui" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Berjaya." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Tidak dapat merunding sut cipher yang disokong." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "" - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "Jenis cipher tidak disokong." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "Sijil dan kekunci diberi tidak sepadan." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Tidak dapat merunding kaedah mampatan disokong." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "Algoritma kekunci awam tidak diketahui dijumpai." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "Algoritma yang tidak dihidupkan telah dirundingkan." - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "Paket rekod dengan versi tidak sah telah diterima." - -#: lib/gnutls_errors.c:70 -#, fuzzy -#| msgid "The Diffie Hellman prime sent by the server is not acceptable (not long enough)." -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "Perdana Diffie Hellman yang dihantar oleh pelayan tidak boleh diterima (tidak cukup panjang)." - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "Paket TLS dengan panjang tidak dijangka telah diterima." - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "" - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "Sesi yang dinyatakan telah dinyahsahkan atas sebab tertentu." - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "Ralat dalaman GnuTLS." - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "Sambungan TLS tidak sah telah diterima." - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "Amaran teruk TLS telah diterima." - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "Paket TLS tidak dijangka telah diterima." - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "Arahan amaran telah diterima." - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "Ralat ditemui pada pengiraan paket Selesai TLS" - -#: lib/gnutls_errors.c:92 -#, fuzzy -#| msgid "Certificate was revoked" -msgid "No certificate was found." -msgstr "Tiada sijil dijumpai!" - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "" - -#: lib/gnutls_errors.c:96 -#, fuzzy -#| msgid "A large TLS record packet was received." -msgid "A heartbeat pong message was received." -msgstr "Paket rekod TLS besar telah diterima." - -#: lib/gnutls_errors.c:98 -#, fuzzy -#| msgid "A large TLS record packet was received." -msgid "A heartbeat ping message was received." -msgstr "Paket rekod TLS besar telah diterima." - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Telah terdapat algoritma kripto dengan keutamaan rendah." - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "Tiada parameter RSA sementara telah dijumpai." - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "Tiada parameter DH sementara telah dijumpai." - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "Paket handshake TLS tidak dijangka telah diterima." - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "Pengesanan integer besar telah gagal." - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "Tidak dapat mengeksport integer besar." - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "Nyahenkripsi telah gagal." - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "Enkripsi telah gagal." - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "Nyahenkripsi kekunci awam telah gagal." - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "Enkripsi kekunci awam telah gagal." - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "Tandatangan kekunci awam telah gagal." - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "Pengesahan tandatangan kekunci awam telah gagal." - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "Nyahmampatan paket rekod TLS telah gagal." - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "Mampatan paket rekod TLS telah gagal." - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "Ralat dalaman dalam pengumpukan memori." - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "Ciri tidak disediakan atau dimatikan telah diminta." - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "Akuan tidak mencukupi untuk permintaan tersebut." - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "Ralat dalam fail katalaluan." - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "Pelapik salah dalam paket PKCS1." - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "Sesi diminta telah tamat tempoh." - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "Menghash telah gagal." - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Ralat menyahkod base64." - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "Ralat pengepala tidak dijangka base64." - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Ralat mengenkod base64." - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "Ralat huraian dalam fail katalaluan." - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "Data yang diminta tiada." - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "Ralat dalam fungsi tarik." - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "Ralat dalam fungsi tolak." - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "Had atas nombor jujukan paket rakaman telah dicapai. Wow!" - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "Ralat dalam sijil." - -#: lib/gnutls_errors.c:157 -#, fuzzy -#| msgid "Could not get OpenPGP key." -msgid "Could not authenticate peer." -msgstr "Rehandshake diminta oleh peer." - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "Nama Subjek Alternatif tidak diketahu dalam sijil X.509." - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Sambungan kritikal tidak disokong dalam sijil X.509." - -#: lib/gnutls_errors.c:164 -#, fuzzy -#| msgid "Unsupported critical extension in X.509 certificate." -msgid "Unsupported extension in X.509 certificate." -msgstr "Sambungan kritikal tidak disokong dalam sijil X.509." - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "Pelanggaran penggunaan kekunci dalam sijik telah dikesan." - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "" - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "" - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "Fungsi telah dibatalkan." - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "Rehandshake diminta oleh peer." - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "Data Aplikasi TLS telah diterima, semasa menjangka data handshake." - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "Ralat dalam backend Pengkalan Data." - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "Jenis sijil tidak disokong." - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "Buffer memori yang diberikan terlalu pendek untuk memegang parameter." - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "Permintaan tidak sah." - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "" - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "Parameter tidak sah telah diterima." - -#: lib/gnutls_errors.c:187 -#, fuzzy -#| msgid "An illegal parameter has been received." -msgid "An illegal parameter was found." -msgstr "Parameter tidak sah" - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "Ralat apabila membaca fail." - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "Penghurai ASN1: Elemen tidak dijumpai." - -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "Penghurai ASN1: Pengenalan tidak dijumpai" - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "Penghurai ASN1: Ralat dalam huraian DER." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "Penghurai ASN1: Nilai tidak dijumpai." - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "Penghurai ASN1: Ralat menghurai generik." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "Penghurai ASN1: Nilai tidak sah." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "Penghurai ASN1: Ralat dalam TAG." - -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "Penghurai ASN1: ralat dalam tag tersirat" - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "Penghurai ASN1: Ralat dalam jenis 'ANY'." - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "Penghurai ASN1: Ralat sintaks." - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "Penghurai ASN1: Limpahan dalam penghuraian DER." - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "Terlalu banyak paket rekod kosong telah diterima." - -#: lib/gnutls_errors.c:215 -#, fuzzy -#| msgid "Too many empty record packets have been received." -msgid "Too many handshake packets have been received." -msgstr "Terlalu banyak paket rekod kosong telah diterima." - -#: lib/gnutls_errors.c:217 -#, fuzzy -#| msgid "The gcrypt library version is too old." -msgid "The crypto library version is too old." -msgstr "Versi pustaka tasn1 terlalu lama." - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "Versi pustaka tasn1 terlalu lama." - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "ID Pengguna OpenPGP telah dibatalkan." - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "" - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "Ralat memuatkan cecincin kunci." - -#: lib/gnutls_errors.c:228 -#, fuzzy -#| msgid "The initialization of LZO has failed." -msgid "The initialization of crypto backend has failed." -msgstr "Pemulaan LZO telah gagal." - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "Tiada algoritma pemampat yang disokong dijumpai." - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "Tiada sut cipher yang disokong dijumpai." - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "Tidak dapat memperoleh kekunci OpenPGP." - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "Tidak dapat mencari subkekunci OpenPGP." - -#: lib/gnutls_errors.c:238 -#, fuzzy -#| msgid "No renegotiation is allowed" -msgid "Safe renegotiation failed." -msgstr "Tiada perbincangan semula dibenarkan" - -#: lib/gnutls_errors.c:240 -#, fuzzy -#| msgid "No renegotiation is allowed" -msgid "Unsafe renegotiation denied." -msgstr "Tiada perbincangan semula dibenarkan" - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "Namapengguna SRP yang diberikan tidak sah." - -#: lib/gnutls_errors.c:245 -#, fuzzy -#| msgid "The SRP username supplied is illegal." -msgid "The SRP username supplied is unknown." -msgstr "Namapengguna SRP yang diberikan tidak sah." - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "Cap jari OpenPGP tidak disokong." - -#: lib/gnutls_errors.c:250 -#, fuzzy -#| msgid "The certificate type is not supported." -msgid "The signature algorithm is not supported." -msgstr "\tAlgoritma tandatangan: %s\n" - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "Sijil tidak mempunyai ciri disokong." - -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "OID tidak disokong." - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "Algoritma hash tidak diketahui." - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "Jenis kandungan struktur PKCS tidak diketahui." - -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "Jenis beg struktur PKCS tidak diketahui." - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "Katalaluan diberikan mengandungi aksara tidak sah." - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "Pengesahan Message Authentication Code gagal." - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "Beberapa had kekangan telah dicapai." - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "Gagal untuk mendapatkan data rawak." - -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "Menerima mesej TLS/IA Intermediate Phase Finished" - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "Menerima mesej TLS/IA Final Phase Finished" - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "Pengesahan checksum fasa TLS/IA gagal" - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "Algoritma atau protokol dinyataka tidak diketahui." - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "" - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "" - -#: lib/gnutls_errors.c:291 -#, fuzzy -#| msgid "The requested data were not available." -msgid "Channel binding data not available" -msgstr "Data yang diminta tiada." - -#: lib/gnutls_errors.c:294 -#, fuzzy -msgid "TPM error." -msgstr "ralat maut" - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "" - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "" - -#: lib/gnutls_errors.c:300 -#, fuzzy -msgid "Cannot initialize a session with the TPM." -msgstr "Tidak dapat memulakan libgsasl: %s" - -#: lib/gnutls_errors.c:302 -#, fuzzy -msgid "PKCS #11 error." -msgstr "Jenis beg struktur PKCS tidak diketahui." - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "" - -#: lib/gnutls_errors.c:306 -#, fuzzy -#| msgid "Error in password file." -msgid "Error in parsing." -msgstr "Ralat huraian dalam fail katalaluan." - -#: lib/gnutls_errors.c:308 -#, fuzzy -#| msgid "Error in password file." -msgid "Error in provided PIN." -msgstr "ralat (tidak bergabung)\n" - -#: lib/gnutls_errors.c:310 -#, fuzzy -#| msgid "Error in password file." -msgid "Error in provided SRK password for TPM." -msgstr "Ralat dalam fail katalaluan." - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "" - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "" - -#: lib/gnutls_errors.c:316 -#, fuzzy -msgid "Thread locking error" -msgstr "ralat (tidak bergabung)\n" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "" - -#: lib/gnutls_errors.c:324 -#, fuzzy -msgid "PKCS #11 unsupported feature" -msgstr "%s tidak mempunyai ciri disokong:" - -#: lib/gnutls_errors.c:326 -#, fuzzy -msgid "PKCS #11 error in key" -msgstr "ralat: get_key_usage: %s\n" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "" - -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "" - -#: lib/gnutls_errors.c:340 -#, fuzzy -msgid "The operation timed out" -msgstr "integer diluar julat: %s" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "" - -#: lib/gnutls_errors.c:344 -#, fuzzy -#| msgid "No supported cipher suites have been found." -msgid "No supported ECC curves were found" -msgstr "Tiada sut cipher yang disokong dijumpai." - -#: lib/gnutls_errors.c:346 -#, fuzzy -#| msgid "The cipher type is unsupported." -msgid "The curve is unsupported" -msgstr "Jenis cipher tidak disokong." - -#: lib/gnutls_errors.c:348 -#, fuzzy -#| msgid "The requested data were not available." -msgid "The requested PKCS #11 object is not available" -msgstr "Data yang diminta tiada." - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "" - -#: lib/gnutls_errors.c:352 -#, fuzzy -#| msgid "The request is invalid." -msgid "The OCSP response is invalid" -msgstr "Permintaan tidak sah." - -#: lib/gnutls_errors.c:354 -#, fuzzy -msgid "There is no certificate status (OCSP)." -msgstr "Selesai dengan %s (status keluar %d)\n" - -#: lib/gnutls_errors.c:356 -#, fuzzy -msgid "Error in the system's randomness device." -msgstr "Ralat sistem tidak diketahui" - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "" - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(kod ralat tidak diketahui)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\tPenggunaan Kekunci:\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "ralat: get_key_usage: %s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tTandatangan digital.\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tPenyulitan komunikasi.\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tPenyulitan data simpanan.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tPengesahan.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tMenandatangan sijil.\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tID (hex): " - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\tCapjari (hex): " - -#: lib/openpgp/output.c:126 -#, fuzzy -msgid "\tFingerprint's random art:\n" -msgstr "\tCapjari (hex): " - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\tDibatalkan: Betul\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\tDibatalkan: Salah\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\tCap waktu:\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tPenciptaan: %s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tTamat tempoh: Tiada\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tTamat tempoh: %s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "tidak diketahui" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tAlgoritma Kekunci Awam: %s\n" - -#: lib/openpgp/output.c:219 -#, fuzzy, c-format -msgid "\tKey Security Level: %s\n" -msgstr "tahap semakan buruk - %s" - -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tModulus (%d bit):\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\tEksponen:\n" - -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tKekunci awam (%d bit):\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tVersi: %d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tNama[%d]: %s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tNama Dibatalkan[%d]: %s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tSubkekunci[%d]:\n" - -#: lib/openpgp/output.c:400 -#, fuzzy, c-format -#| msgid "\tName[%d]: %s\n" -msgid "name[%d]: %s, " -msgstr "\tNama[%d]: %s\n" - -#: lib/openpgp/output.c:402 -#, fuzzy, c-format -#| msgid "\tRevoked Name[%d]: %s\n" -msgid "revoked name[%d]: %s, " -msgstr "\tNama Dibatalkan[%d]: %s\n" - -#: lib/openpgp/output.c:422 -#, fuzzy -#| msgid "" -#| "\tMD5 fingerprint:\n" -#| "\t\t" -msgid "fingerprint: " -msgstr "\tCapjari (hex): " - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "" - -#: lib/openpgp/output.c:452 -#, fuzzy -msgid "never expires, " -msgstr "\t\tTamat tempoh: Tiada\n" - -#: lib/openpgp/output.c:460 -#, fuzzy, c-format -msgid "expires: %s, " -msgstr "- Sijil tamat tempoh: %s" - -#: lib/openpgp/output.c:472 -#, fuzzy, c-format -msgid "key algorithm %s (%d bits)" -msgstr "\t\tKekunci awam (%d bit):\n" - -#: lib/openpgp/output.c:474 -#, fuzzy, c-format -#| msgid "An unknown public key algorithm was encountered." -msgid "unknown key algorithm (%d)" -msgstr "Algoritma kekunci awam tidak diketahui dijumpai." - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "Maklumat Sijil OpenPGP:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\tLambakan Hex: " - -#: lib/x509/ocsp_output.c:188 -#, fuzzy -#| msgid "Other Information:\n" -msgid "OCSP Request Information:\n" -msgstr "Permintaan tidak sah." - -#: lib/x509/ocsp_output.c:298 -#, fuzzy, c-format -#| msgid "\t\t\totherName OID: %.*s\n" -msgid "\tResponder ID: %.*s\n" -msgstr "ID pengguna tidak sah: %s" - -#: lib/x509/ocsp_output.c:316 -#, fuzzy, c-format -#| msgid "\t\tRevoked at: %s\n" -msgid "\tProduced At: %s\n" -msgstr "Ditulis oleh %s, %s, and %s.\n" - -#: lib/x509/ocsp_output.c:410 -#, fuzzy, c-format -#| msgid "\t\tCreation: %s\n" -msgid "\t\tRevocation time: %s\n" -msgstr "%time" - -#: lib/x509/ocsp_output.c:425 -#, fuzzy, c-format -#| msgid "\t\tNext at: %s\n" -msgid "\t\tThis Update: %s\n" -msgstr "\tTarikh kemaskini:\n" - -#: lib/x509/ocsp_output.c:440 -#, fuzzy, c-format -#| msgid "\t\tNext at: %s\n" -msgid "\t\tNext Update: %s\n" -msgstr "\t\tSeterusnya pada: %s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tAlgoritma tandatangan: %s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "amaran: ditandatangan menggunakan algoritma tandatangan rosak yang boleh dipalsukan.\n" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\tTandatangan:\n" - -#: lib/x509/ocsp_output.c:619 -#, fuzzy -#| msgid "Other Information:\n" -msgid "OCSP Response Information:\n" -msgstr "Maklumat Lain:\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tKekangan Panjang Laluan: %d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\tBahasa Polisi: %s" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\tPolisi:\n" -"\t\t\t\tASCII: " - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\tLambakan Hex: " - -#: lib/x509/output.c:185 -#, fuzzy, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "Akses telah dihalang" - -#: lib/x509/output.c:428 -#, fuzzy, c-format -#| msgid "\t\t\tDigital signature.\n" -msgid "%sDigital signature.\n" -msgstr "\tTandatangan:\n" - -#: lib/x509/output.c:430 -#, fuzzy, c-format -#| msgid "\t\t\tNon repudiation.\n" -msgid "%sNon repudiation.\n" -msgstr "\t\t\tTidak ditolak.\n" - -#: lib/x509/output.c:432 -#, fuzzy, c-format -#| msgid "\t\t\tKey encipherment.\n" -msgid "%sKey encipherment.\n" -msgstr "\t\t\tPenyulitan data simpanan.\n" - -#: lib/x509/output.c:434 -#, fuzzy, c-format -#| msgid "\t\t\tData encipherment.\n" -msgid "%sData encipherment.\n" -msgstr "\t\t\tPenyulitan komunikasi.\n" - -#: lib/x509/output.c:436 -#, fuzzy, c-format -#| msgid "\t\t\tKey agreement.\n" -msgid "%sKey agreement.\n" -msgstr "\t\t\tPersetujuan kekunci.\n" - -#: lib/x509/output.c:438 -#, fuzzy, c-format -#| msgid "\t\t\tCertificate signing.\n" -msgid "%sCertificate signing.\n" -msgstr "\t\t\tMenandatangan sijil.\n" - -#: lib/x509/output.c:440 -#, fuzzy, c-format -#| msgid "\t\t\tCRL signing.\n" -msgid "%sCRL signing.\n" -msgstr "\t\t\tMenandatangan sijil.\n" - -#: lib/x509/output.c:442 -#, fuzzy, c-format -#| msgid "\t\t\tKey encipher only.\n" -msgid "%sKey encipher only.\n" -msgstr "%s hanya berkesan kepada parser GLR" - -#: lib/x509/output.c:444 -#, fuzzy, c-format -#| msgid "\t\t\tKey decipher only.\n" -msgid "%sKey decipher only.\n" -msgstr "%s hanya berkesan kepada parser GLR" - -#: lib/x509/output.c:482 -#, fuzzy, c-format -#| msgid "\t\tNot Before: %s\n" -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\tTidak Sebelum: %s\n" - -#: lib/x509/output.c:489 -#, fuzzy, c-format -#| msgid "\t\tNot After: %s\n" -msgid "\t\t\tNot After: %s\n" -msgstr "\t\tTidak Selepas: %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "" - -#: lib/x509/output.c:632 -#, fuzzy, c-format -#| msgid "\t\t\tTLS WWW Server.\n" -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s: ralat pelayan nama tidak dapat dipulihkan berlaku." - -#: lib/x509/output.c:634 -#, fuzzy, c-format -#| msgid "\t\t\tTLS WWW Client.\n" -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "SASL gsasl_client_start: %s" - -#: lib/x509/output.c:636 -#, fuzzy, c-format -#| msgid "\t\t\tCode signing.\n" -msgid "%s\t\t\tCode signing.\n" -msgstr "\t\t\tMenandatangan sijil.\n" - -#: lib/x509/output.c:638 -#, fuzzy, c-format -#| msgid "\t\t\tEmail protection.\n" -msgid "%s\t\t\tEmail protection.\n" -msgstr "EMEL" - -#: lib/x509/output.c:640 -#, fuzzy, c-format -#| msgid "\t\t\tTime stamping.\n" -msgid "%s\t\t\tTime stamping.\n" -msgstr "%time" - -#: lib/x509/output.c:642 -#, fuzzy, c-format -#| msgid "\t\t\tOCSP signing.\n" -msgid "%s\t\t\tOCSP signing.\n" -msgstr "\t\t\tMenandatangan sijil.\n" - -#: lib/x509/output.c:644 -#, fuzzy, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "" -"Ditulis oleh by %s, %s, %s,\n" -"and %s.\n" - -#: lib/x509/output.c:646 -#, fuzzy, c-format -#| msgid "\t\t\tAny purpose.\n" -msgid "%s\t\t\tAny purpose.\n" -msgstr "\t\t\tSebarang tujuan.\n" - -#: lib/x509/output.c:677 -#, fuzzy, c-format -#| msgid "\t\t\tCertificate Authority (CA): FALSE\n" -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "\t\t\tPihak Berkuasa Sijil (CA): SALAH\n" - -#: lib/x509/output.c:679 -#, fuzzy, c-format -#| msgid "\t\t\tCertificate Authority (CA): TRUE\n" -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "\t\t\tPenguasa Sijil (CA): BENAR\n" - -#: lib/x509/output.c:682 -#, fuzzy, c-format -#| msgid "\t\t\tPath Length Constraint: %d\n" -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tKekangan Panjang Laluan: %d\n" - -#: lib/x509/output.c:814 -#, fuzzy, c-format -#| msgid "\t\t\tXMPP Address: %.*s\n" -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "Panjang alamat tidak sah diterima untuk hos %s" - -#: lib/x509/output.c:819 -#, fuzzy, c-format -#| msgid "\t\t\totherName OID: %.*s\n" -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "" -"Ditulis oleh by %s, %s, %s,\n" -"and %s.\n" - -#: lib/x509/output.c:821 -#, fuzzy, c-format -#| msgid "\t\t\totherName DER: " -msgid "%s\t\t\totherName DER: " -msgstr "Penghurai ASN1: Ralat dalam huraian DER." - -#: lib/x509/output.c:823 -#, fuzzy, c-format -#| msgid "" -#| "\n" -#| "\t\t\totherName ASCII: " -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/output.c:945 -#, fuzzy, c-format -#| msgid "\tExtensions:\n" -msgid "%s\tExtensions:\n" -msgstr "\tSambungan:\n" - -#: lib/x509/output.c:955 -#, fuzzy, c-format -#| msgid "\t\tBasic Constraints (%s):\n" -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "\t\tKekangan Asas (%s):\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "kritikal" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "tidak kritikal" - -#: lib/x509/output.c:970 -#, fuzzy, c-format -#| msgid "\t\tSubject Key Identifier (%s):\n" -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "\t\tPengesahan Kekunci Pengenalan (%s):\n" - -#: lib/x509/output.c:1028 -#, fuzzy, c-format -#| msgid "\t\tAuthority Key Identifier (%s):\n" -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tPengesahan Kekunci Pengenalan (%s):\n" - -#: lib/x509/output.c:1044 -#, fuzzy, c-format -#| msgid "\t\tKey Usage (%s):\n" -msgid "%s\t\tKey Usage (%s):\n" -msgstr "ralat: get_key_usage: %s\n" - -#: lib/x509/output.c:1061 -#, fuzzy, c-format -#| msgid "\t\tKey Usage (%s):\n" -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "ralat: get_key_usage: %s\n" - -#: lib/x509/output.c:1076 -#, fuzzy, c-format -#| msgid "\t\tKey Purpose (%s):\n" -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "\tAlgoritma Kekunci Awam: %s\n" - -#: lib/x509/output.c:1090 -#, fuzzy, c-format -#| msgid "\t\tSubject Alternative Name (%s):\n" -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "Nama Subjek Alternatif tidak diketahu dalam sijil X.509." - -#: lib/x509/output.c:1105 -#, fuzzy, c-format -#| msgid "\t\tSubject Alternative Name (%s):\n" -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "- DN Pengeluar Sijil: %s\n" - -#: lib/x509/output.c:1120 -#, fuzzy, c-format -#| msgid "\t\tCRL Distribution points (%s):\n" -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "\t\tTitik Edaran CRL (%s):\n" - -#: lib/x509/output.c:1135 -#, fuzzy, c-format -#| msgid "\t\tProxy Certificate Information (%s):\n" -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "Cuba `%s --help' untuk maklumat lanjut." - -#: lib/x509/output.c:1145 -#, fuzzy, c-format -#| msgid "\t\tAuthority Key Identifier (%s):\n" -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "\t\tPengesahan Kekunci Pengenalan (%s):\n" - -#: lib/x509/output.c:1157 -#, fuzzy, c-format -#| msgid "\t\tUnknown extension %s (%s):\n" -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "\t\tSambungan tidak diketahui %s (%s):\n" - -#: lib/x509/output.c:1204 -#, fuzzy, c-format -#| msgid "\t\t\tASCII: " -msgid "%s\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/output.c:1208 -#, fuzzy, c-format -#| msgid "\t\t\tHexdump: " -msgid "%s\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\tLambakan Hex: " - -#: lib/x509/output.c:1237 -#, fuzzy, c-format -#| msgid "\tPublic Key Algorithm: %s\n" -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\tAlgoritma Kekunci Awam: %s\n" - -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "" - -#: lib/x509/output.c:1254 -#, fuzzy, c-format -#| msgid "\t\tModulus (bits %d):\n" -msgid "\t\tModulus (bits %d): " -msgstr "\t\tModulus (%d bit):\n" - -#: lib/x509/output.c:1257 -#, fuzzy, c-format -#| msgid "\t\tModulus (bits %d):\n" -msgid "\t\tExponent (bits %d): " -msgstr "\t\tModulus (%d bit):\n" - -#: lib/x509/output.c:1265 -#, fuzzy, c-format -#| msgid "\t\tExponent:\n" -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tModulus (%d bit):\n" - -#: lib/x509/output.c:1286 -#, fuzzy, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "Ditulis oleh %s, %s, and %s.\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX: " - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY: " - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -#: lib/x509/output.c:1322 -#, fuzzy, c-format -#| msgid "\t\tPublic key (bits %d):\n" -msgid "\t\tPublic key (bits %d): " -msgstr "\t\tKekunci awam (%d bit):\n" - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP: " - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ: " - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG: " - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -#, fuzzy -#| msgid "\tSubject: %s\n" -msgid "Subject " -msgstr "\tSubjek: %s\n" - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\tNombor Siri (hex):" - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tPengeluar: %s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\tKesahan:\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tTidak Sebelum: %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tTidak Selepas: %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\tSubjek: %s\n" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tCap jari MD5:\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tCap jari SHA-1:\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tId Kekunci Awam:\n" -"\t\t" - -#: lib/x509/output.c:1627 -#, fuzzy -#| msgid "\t\tPublic key (bits %d):\n" -msgid "\tPublic key's random art:\n" -msgstr "\tAlgoritma Kekunci Awam: %s\n" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "" - -#: lib/x509/output.c:1725 -#, fuzzy, c-format -msgid "signed using %s, " -msgstr "kurang menggunakan hukum %d (%s)" - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "Maklumat Sijil X.509:\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "Maklumat Lain:\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\tVersi: 1 (default)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\tTarikh kemaskini:\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tDikeluarkan: %s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tSeterusnya pada: %s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\tSambungan:\n" - -#: lib/x509/output.c:2007 -#, fuzzy, c-format -#| msgid "\t\tSerial Number (hex): " -msgid "\t\tCRL Number (%s): " -msgstr "%s mesti diikuti dengan nombor positif" - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tPengesahan Kekunci Pengenalan (%s):\n" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tSambungan tidak diketahui %s (%s):\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tSijil dibatalkan (%d):\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\tTiada sijil dibatalkan.\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tNombor Siri (hex): " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tDibatalkan pada: %s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "Maklumat Senarai Pembatalan Sijil X.509:\n" - -#: lib/x509/output.c:2315 -#, fuzzy -msgid "\tAttributes:\n" -msgstr "Sijil tidak mempunyai ciri disokong." - -#: lib/x509/output.c:2367 -#, fuzzy, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "Nama pengguna atau kata laluan tidak sah." - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tSifat %s yang tidak diketahui:\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "Maklumat Permintaan Sijil PKCS #10:\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "Penggunaan Kekunci Awam:\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "ID Kekunci Awam: " - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "Maklumat Kekunci Awam:\n" diff --git a/po/nl.po.in b/po/nl.po.in deleted file mode 100644 index 5d0d1e1f37..0000000000 --- a/po/nl.po.in +++ /dev/null @@ -1,1504 +0,0 @@ -# Dutch translations for libgnutls. -# Copyright (C) 2013 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# -# "Moje uho je čulo što je moje srce voljelo čuti." -# -# Benno Schulenberg , 2007, 2008, 2010, 2011, 2012, 2013. -# Erwin Poeze , 2009, 2010. -msgid "" -msgstr "" -"Project-Id-Version: libgnutls-3.2.1\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-05-29 19:03+0200\n" -"PO-Revision-Date: 2013-06-13 19:56+0200\n" -"Last-Translator: Benno Schulenberg \n" -"Language-Team: Dutch \n" -"Language: nl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 1.0\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "Afsluitingsbericht" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "Onverwacht bericht" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "Record met ongeldige MAC" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "Ontsleuteling is mislukt" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "Recordoverloop" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "Decompressie is mislukt" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "Handshake is mislukt" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "Certificaat is ongeldig" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "Certificaat wordt niet ondersteund" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "Certificaat is ingetrokken" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "Certificaat is verlopen" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "Onbekend certificaat" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "Ongeldige parameter" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "CA is onbekend" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "Toegang werd geweigerd" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "Decoderingsfout" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "Ontsleutelingsfout" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "Exportbeperking" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "Fout in protocolversie" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "Onvoldoende veiligheid" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "Door gebruiker geannuleerd" - -#: lib/gnutls_alert.c:65 -msgid "No certificate (SSL 3.0)" -msgstr "Geen certificaat (SSL 3.0)" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "**Interne programmafout**" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "Heronderhandeling is niet toegestaan" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "Kan het opgegeven certificaat niet ophalen" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "Een niet-ondersteunde uitbreiding werd toegezonden" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "De toegezonden servernaam werd niet herkend" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "De SRP/PSK-gebruikersnaam ontbreekt of is onbekend" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "Kan geen ondersteund applicatieprotocol overeenkomen" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Gelukt." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Kan geen gemeenschappelijke coderingsmethode overeenkomen." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "Er werden geen of onvoldoende prioriteiten ingesteld." - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "De coderingsmethode wordt niet ondersteund." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "Het certificaat en de gegeven sleutel passen niet bij elkaar." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Kan geen gemeenschappelijke compressiemethode overeenkomen." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "Onbekend versleutelingsalgoritme gevonden." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "Er werd een uitgeschakeld algoritme overeengekomen." - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "Er werd een datapakket met een ongedige versie ontvangen." - -#: lib/gnutls_errors.c:70 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "Het door de server toegezonden Diffie-Hellman-priemgetal is niet acceptabel (niet lang genoeg)." - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "Er werd een TLS-pakket met een onverwachte lengte ontvangen." - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "De TLS-verbinding is onjuist afgesloten." - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "De aangegeven sessie is om een of andere reden ongeldig geworden." - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "**Interne programmafout** in GnuTLS." - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "Er werd een ongeldige TLS-uitbreiding ontvangen." - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "Er werd een ernstig TLS-alarm ontvangen." - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "Er werd een onverwacht TLS-pakket ontvangen." - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "Er is een TLS-waarschuwing ontvangen." - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "Er is een fout opgetreden tijdens de TLS-pakketeinde-berekening." - -#: lib/gnutls_errors.c:92 -msgid "No certificate was found." -msgstr "Geen certificaat gevonden." - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "De gegeven DSA-sleutel is incompatibel met het geselecteerde TLS-protocol." - -#: lib/gnutls_errors.c:96 -msgid "A heartbeat pong message was received." -msgstr "Er werd een hartslag-pong-bericht ontvangen." - -#: lib/gnutls_errors.c:98 -msgid "A heartbeat ping message was received." -msgstr "Er werd een hartslag-ping-bericht ontvangen." - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Er is al een encryptie-algoritme met een lagere prioriteit." - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "Er zijn geen tijdelijke RSA-parameters gevonden." - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "Er zijn geen tijdelijke DH-parameters gevonden." - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "Er werd een onverwacht TLS-handshake-pakket ontvangen." - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "Het lezen van een groot geheel getal is mislukt." - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "Het exporteren van een groot geheel getal is mislukt." - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "Ontsleuteling is mislukt." - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "Versleuteling is mislukt." - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "Ontsleuteling met publieke sleutel is mislukt." - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "Versleuteling met publieke sleutel is mislukt." - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "Ondertekenen met publieke sleutel is mislukt." - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "Controle van ondertekening met publieke sleutel is mislukt." - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "Decompressie van het TLS-datapakket is mislukt." - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "Compressie van het TLS-datapakket is mislukt." - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "**Interne programmafout** bij reserveren van geheugen." - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "Er werd een uitgeschakelde of ongeïmplementeerde functie gevraagd." - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "Onvoldoende rechten voor dat verzoek." - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "Fout in wachtwoordenbestand." - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "Onjuiste opvulbytes in PKCS1-pakket." - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "De gevraagde sessie is verlopen." - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "Hashen is mislukt." - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Base64-decoderingsfout." - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "Onverwachte fout in base64-kopregel." - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Base64-coderingsfout." - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "Fout in de indeling van wachtwoordenbestand." - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "De gevraagde gegevens zijn niet beschikbaar." - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "Fout in de 'pull'-functie." - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "Fout in de 'push'-functie." - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "Het hoogste volgnummer voor datapakketten is bereikt. Wauw!" - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "Fout in het certificaat." - -#: lib/gnutls_errors.c:157 -msgid "Could not authenticate peer." -msgstr "Kan andere computer niet authenticeren." - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "Onbekende naam van toegevoegd onderwerp in X.509-certificaat." - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Niet-ondersteunde kritieke uitbreiding in X.509-certificaat." - -#: lib/gnutls_errors.c:164 -msgid "Unsupported extension in X.509 certificate." -msgstr "Niet-ondersteunde uitbreiding in X.509-certificaat." - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "Er is een overtreding van het sleutelgebruik in het certificaat geconstateerd." - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "Bron is tijdelijk niet beschikbaar; probeer het later nogmaals." - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "Het verzonden pakket is te groot (EMSGSIZE)." - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "Functie werd onderbroken." - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "De andere computer heeft om een hernieuwde handshake gevraagd." - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "Er werd TLS-toepassingsdata ontvangen, terwijl handshake-gegevens verwacht werden." - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "Fout in databank-backend." - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "Het certificaattype wordt niet ondersteund." - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "Beschikbare buffer is te klein voor de gegeven parameters." - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "Het verzoek is ongeldig." - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "De cookie is ongeldig." - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "Er werd een ongeoorloofde parameter ontvangen." - -#: lib/gnutls_errors.c:187 -msgid "An illegal parameter was found." -msgstr "Er is een ongeoorloofde parameter gevonden." - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "Fout tijdens lezen van bestand." - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "ASN1-parser: Element niet gevonden." - -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "ASN1-parser: Naam niet gevonden." - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "ASN1-parser: Fout in ontleden van DER." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "ASN1-parser: Waarde niet gevonden." - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "ASN1-parser: Algemene ontledingsfout." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "ASN1-parser: Waarde is ongeldig." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "ASN1-parser: Fout in TAG." - -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "ASN1-parser: Fout in impliete tag." - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "ASN1-parser: Fout in type 'ANY'." - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "ASN1-parser: Syntaxfout." - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "ASN1-parser: Overloop in DER-ontleding." - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "Er zijn te veel lege datapakketten ontvangen." - -#: lib/gnutls_errors.c:215 -msgid "Too many handshake packets have been received." -msgstr "Er zijn te veel handshake-pakketten ontvangen." - -#: lib/gnutls_errors.c:217 -msgid "The crypto library version is too old." -msgstr "De versie van de crypto-bibliotheek is te oud." - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "De versie van de tasn1-bibliotheek is te oud." - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "Het OpenPGP-gebruikers-ID is ingetrokken." - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "De OpenPGP-sleutel heeft geen voorkeurssleutelset." - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "Fout tijdens laden van de sleutelring." - -#: lib/gnutls_errors.c:228 -msgid "The initialization of crypto backend has failed." -msgstr "Het initialiseren van de cryptografische routines is mislukt." - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "Er is geen ondersteund compressie-algoritme gevonden." - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "Er is geen ondersteund encryptie-algoritme gevonden." - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "Kan OpenPGP-sleutel niet verkrijgen." - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "Kan OpenPGP-subsleutel niet vinden." - -#: lib/gnutls_errors.c:238 -msgid "Safe renegotiation failed." -msgstr "Beveiligde heronderhandeling is mislukt." - -#: lib/gnutls_errors.c:240 -msgid "Unsafe renegotiation denied." -msgstr "Onbeveiligde heronderhandeling is geweigerd." - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "De gegeven SRP-gebruikersnaam is ongeldig." - -#: lib/gnutls_errors.c:245 -msgid "The SRP username supplied is unknown." -msgstr "De gegeven SRP-gebruikersnaam is onbekend." - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "De OpenPGP-vingerafdruk wordt niet ondersteund." - -#: lib/gnutls_errors.c:250 -msgid "The signature algorithm is not supported." -msgstr "Het ondertekeningsalgoritme wordt niet ondersteund." - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "Het certificaat heeft niet-ondersteunde eigenschappen." - -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "Het OID wordt niet ondersteund." - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "Onbekend hash-algoritme." - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "Onbekend inhoudstype van PKCS-structuur." - -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "Onbekend buideltype van PKCS-structuur." - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "Het opgegeven wachtwoord bevat ongeldige tekens." - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "Verificatie van berichtauthenticatiecode is mislukt." - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "Sommige beperkingsgrenzen werden bereikt." - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "Kan geen willekeurige bits verkrijgen." - -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "TLS/IA-tussenfasebeëindigingsbericht ontvangen" - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "TLS/IA-eindfasebeëindigingsbericht ontvangen" - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "Verificatie van TLS/IA-fasecontrolesom is mislukt" - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "Het opgegeven algoritme of protocol is onbekend." - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "De handshake-gegevens zijn te groot." - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "Fout bij openen van /dev/crypto" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "Fout bij interactie met /dev/crypto" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "Andere computer heeft de verbinding verbroken" - -#: lib/gnutls_errors.c:291 -msgid "Channel binding data not available" -msgstr "Kanaalbindingsgegevens zijn niet beschikbaar." - -#: lib/gnutls_errors.c:294 -msgid "TPM error." -msgstr "TPM-fout." - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "TPM is niet geïnitialiseerd." - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "TPM-sleutel is niet gevonden in permanente opslag." - -#: lib/gnutls_errors.c:300 -msgid "Cannot initialize a session with the TPM." -msgstr "Kan geen sessie met de TPM initialiseren." - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error." -msgstr "PKCS #11 -- fout." - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "PKCS #11 -- initialisatiefout." - -#: lib/gnutls_errors.c:306 -msgid "Error in parsing." -msgstr "Fout bij ontleden." - -#: lib/gnutls_errors.c:308 -msgid "Error in provided PIN." -msgstr "Fout in de gegeven PIN." - -#: lib/gnutls_errors.c:310 -msgid "Error in provided SRK password for TPM." -msgstr "Fout in het gegeven SRK-wachtwoord voor TPM." - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "Fout in het gegeven wachtwoord voor de in TPM te laden sleutel." - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "PKCS #11 -- fout in plaats" - -#: lib/gnutls_errors.c:316 -msgid "Thread locking error" -msgstr "Thread-vergrendelingsfout" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "PKCS #11 -- fout in eigenschap" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "PKCS #11 -- fout in apparaat" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "PKCS #11 -- fout in gegevens" - -#: lib/gnutls_errors.c:324 -msgid "PKCS #11 unsupported feature" -msgstr "PKCS #11 -- niet-ondersteunde functie" - -#: lib/gnutls_errors.c:326 -msgid "PKCS #11 error in key" -msgstr "PKCS #11 -- fout in sleutel" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "PKCS #11 -- PIN is verlopen" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "PKCS #11 -- PIN is vergrendeld" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "PKCS #11 -- fout in sessie" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "PKCS #11 -- fout in ondertekening" - -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "PKCS #11 -- fout in token" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "PKCS #11 -- gebruikersfout" - -#: lib/gnutls_errors.c:340 -msgid "The operation timed out" -msgstr "De bewerking duurde te lang" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "De bewerking is geannuleerd vanwege een gebruikersfout" - -#: lib/gnutls_errors.c:344 -msgid "No supported ECC curves were found" -msgstr "Er zijn geen ondersteunde ECC-krommes gevonden" - -#: lib/gnutls_errors.c:346 -msgid "The curve is unsupported" -msgstr "De kromme wordt niet ondersteund" - -#: lib/gnutls_errors.c:348 -msgid "The requested PKCS #11 object is not available" -msgstr "Het gevraagde PKCS #11-object is niet beschikbaar" - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "De gegeven lijst van X.509-certificaten is niet gesorteerd (van onderwerp tot uitgever)" - -#: lib/gnutls_errors.c:352 -msgid "The OCSP response is invalid" -msgstr "Het OCSP-antwoord is ongeldig." - -#: lib/gnutls_errors.c:354 -msgid "There is no certificate status (OCSP)." -msgstr "Er is geen certificaat-status (OCSP)." - -#: lib/gnutls_errors.c:356 -msgid "Error in the system's randomness device." -msgstr "Fout in het willekeurigheidsapparaat van het systeem." - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "Kan geen gemeenschappelijk applicatieprotocol overeenkomen." - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(onbekende foutcode)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\tGebruik van sleutel:\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "fout in get_key_usage(): %s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tDigitale ondertekeningen.\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tEncryptie van communicatie.\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tEncryptie van opgeslagen data.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tAuthenticatie.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tCertificaatondertekening.\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tID (hex): " - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\tVingerafdruk (hex): " - -#: lib/openpgp/output.c:126 -msgid "\tFingerprint's random art:\n" -msgstr "\tWillekeur in vingerafdruk:\n" - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\tIngetrokken: Ja\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\tIngetrokken: Nee\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\tTijdsstempels:\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tAangemaakt op: %s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tVervaldatum: Nooit\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tVervaldatum: %s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "onbekend" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tAlgoritme van publieke sleutel: %s\n" - -#: lib/openpgp/output.c:219 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\tSleutelveiligheidsniveau: %s\n" - -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tModulus (bits %d):\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\tExponent:\n" - -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tPublieke sleutel (bits %d):\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tVersie: %d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tNaam[%d]: %s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tIngetrokken naam[%d]: %s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tSubsleutel[%d]:\n" - -#: lib/openpgp/output.c:400 -#, c-format -msgid "name[%d]: %s, " -msgstr "naam[%d]: %s, " - -#: lib/openpgp/output.c:402 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "ingetrokken naam[%d]: %s, " - -#: lib/openpgp/output.c:422 -msgid "fingerprint: " -msgstr "vingerafdruk: " - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "aangemaakt: %s, " - -#: lib/openpgp/output.c:452 -msgid "never expires, " -msgstr "verloopt nooit, " - -#: lib/openpgp/output.c:460 -#, c-format -msgid "expires: %s, " -msgstr "verloopt: %s, " - -#: lib/openpgp/output.c:472 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "versleutelingsalgoritme %s (%d bits)" - -#: lib/openpgp/output.c:474 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "onbekend versleutelingsalgoritme (%d)" - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "Informatie over OpenPGP-certificaten:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\tHexdump: " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "Informatie over OCSP-verzoek:\n" - -#: lib/x509/ocsp_output.c:298 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "\tID van antwoorder: %.*s\n" - -#: lib/x509/ocsp_output.c:316 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\tGeproduceerd in: %s\n" - -#: lib/x509/ocsp_output.c:410 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\tTijdstip van intrekken: %s\n" - -#: lib/x509/ocsp_output.c:425 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\tDeze update: %s\n" - -#: lib/x509/ocsp_output.c:440 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\tVolgende update: %s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tOndertekeningsalgoritme: %s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "Waarschuwing: ondertekend met een algoritme dat vervalst kan worden.\n" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\tOndertekening:\n" - -#: lib/x509/ocsp_output.c:619 -msgid "OCSP Response Information:\n" -msgstr "Informatie over OCSP-antwoord:\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "Waarschuwing: alternatieve naam bevat een NUL-waarde, wordt vervangen door '!'\n" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tPadlengtebeperking: %d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\tBeleidstaal: %s" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\tBeleid:\n" -"\t\t\t\tASCII: " - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\tHexdump: " - -#: lib/x509/output.c:185 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\tToegangsmethode: %.*s" - -#: lib/x509/output.c:428 -#, c-format -msgid "%sDigital signature.\n" -msgstr "%sDigitale ondertekening.\n" - -#: lib/x509/output.c:430 -#, c-format -msgid "%sNon repudiation.\n" -msgstr "%sNiet-herroeping.\n" - -#: lib/x509/output.c:432 -#, c-format -msgid "%sKey encipherment.\n" -msgstr "%sSleutel-encryptie.\n" - -#: lib/x509/output.c:434 -#, c-format -msgid "%sData encipherment.\n" -msgstr "%sData-encryptie.\n" - -#: lib/x509/output.c:436 -#, c-format -msgid "%sKey agreement.\n" -msgstr "%sSleutelovereenstemming.\n" - -#: lib/x509/output.c:438 -#, c-format -msgid "%sCertificate signing.\n" -msgstr "%sCertificaatondertekening.\n" - -#: lib/x509/output.c:440 -#, c-format -msgid "%sCRL signing.\n" -msgstr "%sCRL-ondertekening.\n" - -#: lib/x509/output.c:442 -#, c-format -msgid "%sKey encipher only.\n" -msgstr "%sAlleen sleutel-encryptie.\n" - -#: lib/x509/output.c:444 -#, c-format -msgid "%sKey decipher only.\n" -msgstr "%sAlleen sleutel-decryptie.\n" - -#: lib/x509/output.c:482 -#, c-format -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\t\tNiet vóór: %s\n" - -#: lib/x509/output.c:489 -#, c-format -msgid "\t\t\tNot After: %s\n" -msgstr "\t\t\tNiet na: %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "Waarschuwing: distributiepunt bevat een NUL-waarde, wordt vervangen door '!'\n" - -#: lib/x509/output.c:632 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tTLS WWW-server.\n" - -#: lib/x509/output.c:634 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tTLS WWW-cliënt.\n" - -#: lib/x509/output.c:636 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\tCode-ondertekening.\n" - -#: lib/x509/output.c:638 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tE-mailbescherming.\n" - -#: lib/x509/output.c:640 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\tTijdsstempels.\n" - -#: lib/x509/output.c:642 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tOCSP-ondertekening.\n" - -#: lib/x509/output.c:644 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIpsec IKE.\n" - -#: lib/x509/output.c:646 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\tElk doel.\n" - -#: lib/x509/output.c:677 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\tCertificaatautoriteit (CA): ONWAAR\n" - -#: lib/x509/output.c:679 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\tCertificaatautoriteit (CA): WAAR\n" - -#: lib/x509/output.c:682 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\tPadlengtebeperking: %d\n" - -#: lib/x509/output.c:814 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tXMPP-adres: %.*s\n" - -#: lib/x509/output.c:819 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "%s\t\t\tAndere naam (OID): %.*s\n" - -#: lib/x509/output.c:821 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "%s\t\t\tAndere naam (DER): " - -#: lib/x509/output.c:823 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" -"\n" -"%s\t\t\tAndere naam (ASCII): " - -#: lib/x509/output.c:945 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\tUitbreidingen:\n" - -#: lib/x509/output.c:955 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\tFundamentele beperkingen (%s):\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "kritiek" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "niet kritiek" - -#: lib/x509/output.c:970 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "%s\t\tOnderwerps-ID van sleutel (%s):\n" - -#: lib/x509/output.c:1028 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "%s\t\tAutoriteits-ID van sleutel (%s):\n" - -#: lib/x509/output.c:1044 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\tGebruik van sleutel (%s):\n" - -#: lib/x509/output.c:1061 -#, c-format -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "%s\t\tGebruiksperiode van privésleutel (%s):\n" - -#: lib/x509/output.c:1076 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\tDoel van sleutel (%s):\n" - -#: lib/x509/output.c:1090 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "%s\t\tToegevoegde onderwerpen (%s):\n" - -#: lib/x509/output.c:1105 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "%s\t\tAlternatieve uitgevernaam (%s):\n" - -#: lib/x509/output.c:1120 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tCRL-distributiepunten (%s):\n" - -#: lib/x509/output.c:1135 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\tInformatie over proxy-certificaat (%s):\n" - -#: lib/x509/output.c:1145 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "%s\t\tToegang tot autoriteitsinformatie (%s):\n" - -#: lib/x509/output.c:1157 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\tOnbekende uitbreiding %s (%s):\n" - -#: lib/x509/output.c:1204 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII: " - -#: lib/x509/output.c:1208 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\tHexdump: " - -#: lib/x509/output.c:1237 -#, c-format -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\t%sAlgoritme van publieke sleutel: %s\n" - -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "\tAlgortimeveiligheidsniveau: %s (%d bits)\n" - -#: lib/x509/output.c:1254 -#, c-format -msgid "\t\tModulus (bits %d): " -msgstr "\t\tModulus (bits %d): " - -#: lib/x509/output.c:1257 -#, c-format -msgid "\t\tExponent (bits %d): " -msgstr "\t\tExponent (bits %d): " - -#: lib/x509/output.c:1265 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tExponent (bits %d):\n" - -#: lib/x509/output.c:1286 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\tKromme: %s\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX: " - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY: " - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -#: lib/x509/output.c:1322 -#, c-format -msgid "\t\tPublic key (bits %d): " -msgstr "\t\tPublieke sleutel (bits %d):" - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP: " - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ: " - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG: " - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -msgid "Subject " -msgstr "Onderwerp " - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\tSerienummer (hex): " - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tUitgever: %s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\tGeldigheid:\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tNiet vóór: %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tNiet na: %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\tOnderwerp: %s\n" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tMD5-vingerafdruk:\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tSHA-1-vingerafdruk:\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tID van publieke sleutel:\n" -"\t\t" - -#: lib/x509/output.c:1627 -msgid "\tPublic key's random art:\n" -msgstr "\tWillekeur in publieke sleutel:\n" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "ondertekend met %s (beschadigd!), " - -#: lib/x509/output.c:1725 -#, c-format -msgid "signed using %s, " -msgstr "ondertekend met %s, " - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "Informatie over X.509-certificaten:\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "Andere informatie:\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\tVersie: 1 (standaard)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\tUpdate-datums:\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tUitgegeven: %s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tVolgende op: %s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\tUitbreidingen:\n" - -#: lib/x509/output.c:2007 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tCRL-nummer (%s): " - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tAutoriteits-ID van sleutel (%s):\n" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tOnbekende uitbreiding %s (%s):\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tIngetrokken certificaten (%d):\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\tGeen ingetrokken certificaten.\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tSerienummer (hex): " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tIngetrokken op: %s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "Informatie over ingetrokken X.509-certificaten:\n" - -#: lib/x509/output.c:2315 -msgid "\tAttributes:\n" -msgstr "\tEigenschappen:\n" - -#: lib/x509/output.c:2367 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "\t\tTest-wachtwoord: %s\n" - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tOnbekende eigenschap %s:\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "Informatie over PKCS #10-certificaatverzoek:\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "Gebruik van publieke sleutel:\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "ID van publieke sleutel: " - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "Informatie over publieke sleutel:\n" - -#~ msgid "PKCS #11 error in PIN." -#~ msgstr "PKCS #11 -- fout in PIN." - -#~ msgid "PKCS #11 PIN should be saved." -#~ msgstr "PKCS #11 -- PIN moet opgeslagen worden." - -#~ msgid "\tSubject Public Key Algorithm: %s\n" -#~ msgstr "\tAlgoritme van publieke sleutel: %s\n" - -#~ msgid "The peer did not send any certificate." -#~ msgstr "De andere computer heeft geen certificaat gestuurd." - -#~ msgid "The initialization of GnuTLS-extra has failed." -#~ msgstr "Het initialiseren van GnuTLS-extra is mislukt." - -#~ msgid "The GnuTLS library version does not match the GnuTLS-extra library version." -#~ msgstr "De versies van de GnuTLS- en GnuTLS-extra-bibliotheken komen niet overeen." - -#~ msgid "The initialization of LZO has failed." -#~ msgstr "Het initialiseren van LZO is mislukt." - -#~ msgid "The handshake data size is too large (DoS?), check gnutls_handshake_set_max_packet_length()." -#~ msgstr "De gegevensgrootte van de handshake is te groot (DoS-aanval?); controleer gnutls_handshake_set_max_packet_length()." - -#~ msgid "Inner application negotiation failed" -#~ msgstr "Inwendige programmaonderhandeling is mislukt" - -#~ msgid "Inner application verification failed" -#~ msgstr "Inwendige programmaverificatie is mislukt" diff --git a/po/pl.po.in b/po/pl.po.in deleted file mode 100644 index ec5fb5eae0..0000000000 --- a/po/pl.po.in +++ /dev/null @@ -1,1469 +0,0 @@ -# Polish translation for gnutls. -# Copyright (C) 2006, 2007, 2008, 2009, 2011, 2012, 2013 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# Jakub Bogusz , 2006-2013. -# -msgid "" -msgstr "" -"Project-Id-Version: libgnutls-3.2.1\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-05-29 19:03+0200\n" -"PO-Revision-Date: 2013-06-07 20:50+0200\n" -"Last-Translator: Jakub Bogusz \n" -"Language-Team: Polish \n" -"Language: pl\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "Powiadomienie o zamknięciu" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "Nieoczekiwany komunikat" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "Błędny MAC rekordu" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "Odszyfrowywanie nie powiodło się" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "Przepełnienie rekordu" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "Dekompresja nie powiodła się" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "Nawiązanie komunikacji nie powiodło się" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "Błędny certyfikat" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "Nieobsługiwany certyfikat" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "Certyfikat został anulowany" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "Certyfikat wygasł" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "Nieznany certyfikat" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "Niedozwolony parametr" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "Nieznane CA" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "Dostęp zabroniony" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "Błąd dekodowania" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "Błąd odszyfrowywania" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "Ograniczenia eksportowe" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "Błąd w wersji protokołu" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "Niewystarczające bezpieczeństwo" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "Anulowane przez użytkownika" - -#: lib/gnutls_alert.c:65 -msgid "No certificate (SSL 3.0)" -msgstr "Brak certyfikatu (SSL 3.0)" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "Błąd wewnętrzny" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "Renegocjacja niedozwolona" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "Nie udało się pobrać wskazanego certyfikatu" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "Wysłano nieobsługiwane rozszerzenie" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "Nierozpoznana wysłana nazwa serwera" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "Brak lub nieznana nazwa użytkownika SRP/PSK" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "Nie udało się wynegocjować obsługiwanego protokołu aplikacji" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Sukces." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Nie udało się wynegocjować obsługiwanego zestawu certyfikatów." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "Nie ustawiono wystarczających priorytetów." - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "Ten typ certyfikatu nie jest obsługiwany." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "Certyfikat i dany klucz nie pasują do siebie." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Nie udało się wynegocjować obsługiwanej metody kompresji." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "Napotkano nieznany algorytm klucza publicznego." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "Wynegocjowano algorytm, który nie został włączony." - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "Odebrano pakiet rekordu o niedozwolonej wersji." - -#: lib/gnutls_errors.c:70 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "Liczba pierwsza Diffie Hellmana wysłana przez serwer jest nieakceptowalna (zbyt mała)." - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "Odebrano pakiet TLS o nieoczekiwanej długości." - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "Połączenie TLS nie zostało właściwie zakończone." - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "Podana sesja została z jakiegoś powodu unieważniona." - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "Błąd wewnętrzny GnuTLS." - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "Odebrano niedozwolone rozszerzenie TLS." - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "Odebrano krytyczny alarm TLS." - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "Odebrano nieoczekiwany pakiet TLS." - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "Odebrano ostrzegawczy alarm TLS." - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "Wykryto błąd przy obliczaniu pakietu TLS Finished." - -#: lib/gnutls_errors.c:92 -msgid "No certificate was found." -msgstr "Nie znaleziono certyfikatu." - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "Podany klucz DSA jest niezgodny z wybranym protokołem TLS." - -#: lib/gnutls_errors.c:96 -msgid "A heartbeat pong message was received." -msgstr "Odebrano komunikat heartbeat pong." - -#: lib/gnutls_errors.c:98 -msgid "A heartbeat ping message was received." -msgstr "Odebrano pakiet heartbeat ping." - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Istnieje już algorytm kryptograficzny z niższym priorytetem." - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "Nie znaleziono parametrów tymczasowych RSA." - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "Nie znaleziono parametrów tymczasowych DH." - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "Odebrano nieoczekiwany pakiet nawiązania TLS." - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "Poszukiwanie dużej liczby całkowitej nie powiodło się." - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "Nie udało się wyeksportować dużej liczby całkowitej." - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "Odszyfrowywanie nie powiodło się." - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "Szyfrowanie nie powiodło się." - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "Odszyfrowywanie z kluczem publicznym nie powiodło się." - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "Szyfrowanie z kluczem publicznym nie powiodło się." - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "Podpisywanie z kluczem publicznym nie powiodło się." - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "Sprawdzenie podpisu z kluczem publicznym nie powiodło się." - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "Dekompresja pakietu rekordu TLS nie powiodła się." - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "Kompresja pakietu rekordu TLS nie powiodła się." - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "Błąd wewnętrzny przy przydzielaniu pamięci." - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "Zażądano niezaimplementowanej lub wyłączonej opcji." - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "Niewystarczające uprawnienia dla tego żądania." - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "Błąd w pliku haseł." - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "Błędne wyrównanie w pakiecie PKCS1." - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "Żądana sesja wygasła." - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "Funkcja skrótu nie powiodła się." - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Błąd dekodowania base64." - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "Nieoczekiwany błąd nagłówka base64." - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Błąd kodowania base64." - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "Błąd przetwarzania pliku haseł." - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "Żądane dane nie były dostępne." - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "Błąd w funkcji pull." - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "Błąd w funkcji push." - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "Osiągnięto górne ograniczenie numerów sekwencyjnych pakietów rekordów. Wow!" - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "Błąd w certyfikacie." - -#: lib/gnutls_errors.c:157 -msgid "Could not authenticate peer." -msgstr "Nie udało się uwierzytelnić drugiej strony." - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "Nieznana nazwa Subject Alternative w certyfikacie X.509." - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Nieobsługiwane rozszerzenie krytyczne w certyfikacie X.509." - -#: lib/gnutls_errors.c:164 -msgid "Unsupported extension in X.509 certificate." -msgstr "Nieobsługiwane rozszerzenie w certyfikacie X.509." - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "Wykryto naruszenie użycia klucza w certyfikacie." - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "Zasoby chwilowo niedostępne, proszę spróbować ponownie." - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "Przesyłany pakiet jest zbyt duży (EMSGSIZE)." - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "Funkcja została przerwana." - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "Druga strona zażądała ponownego nawiązania sesji." - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "Odebrano dane aplikacji TLS, ale oczekiwano na nawiązanie sesji." - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "Błąd w backendzie bazy danych." - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "Ten typ certyfikatu nie jest obsługiwany." - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "Przekazany bufor pamięci jest zbyt mały do przechowania parametrów." - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "Żądanie jest nieprawidłowe." - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "Błędne ciasteczko." - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "Odebrano niedozwolony parametr." - -#: lib/gnutls_errors.c:187 -msgid "An illegal parameter was found." -msgstr "Napotkano niedozwolony parametr." - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "Błąd podczas odczytu pliku." - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "Analiza ASN1: Nie znaleziono elementu." - -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "Analiza ASN1: Nie znaleziono identyfikatora." - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "Analiza ASN1: Błąd przy analizie DER." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "Analiza ASN1: Nie znaleziono wartości." - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "Analiza ASN1: Ogólny błąd przetwarzania." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "Analiza ASN1: Wartość nie jest prawidłowa." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "Analiza ASN1: Błąd w znaczniku." - -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "Analiza ASN1: błąd w domyślnym znaczniku." - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "Analiza ASN1: Błąd w typie 'ANY'." - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "Analiza ASN1: Błąd składni." - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "Analiza ASN1: Przepełnienie przy analizie DER." - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "Odebrano zbyt dużo pustych pakietów rekordów." - -#: lib/gnutls_errors.c:215 -msgid "Too many handshake packets have been received." -msgstr "Odebrano zbyt dużo pakietów nawiązania połączenia." - -#: lib/gnutls_errors.c:217 -msgid "The crypto library version is too old." -msgstr "Wersja biblioteki kryptograficznej jest zbyt stara." - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "Wersja biblioteki tasn1 jest zbyt stara." - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "Identyfikator użytkownika OpenPGP jest unieważniony." - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "Klucz OpenPGP nie ma ustawionego preferowanego klucza." - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "Błąd przy wczytywaniu zbioru kluczy." - -#: lib/gnutls_errors.c:228 -msgid "The initialization of crypto backend has failed." -msgstr "Inicjalizacja backendu kryptograficznego nie powiodła się." - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "Nie znaleziono obsługiwanego algorytmu kompresji." - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "Nie znaleziono obsługiwanego zestawu certyfikatów." - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "Nie udało się uzyskać klucza OpenPGP." - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "Nie udało się odnaleźć podklucza OpenPGP." - -#: lib/gnutls_errors.c:238 -msgid "Safe renegotiation failed." -msgstr "Bezpieczna renegocjacja nie powiodła się." - -#: lib/gnutls_errors.c:240 -msgid "Unsafe renegotiation denied." -msgstr "Odmowa niebiezpiecznej renegocjacji." - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "Podana nazwa użytkownika SRP nie jest dozwolona." - -#: lib/gnutls_errors.c:245 -msgid "The SRP username supplied is unknown." -msgstr "Podana nazwa użytkownika SRP jest nieznana." - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "Odcisk klucza OpenPGP nie jest obsługiwany." - -#: lib/gnutls_errors.c:250 -msgid "The signature algorithm is not supported." -msgstr "Ten algorytm podpisu nie jest obsługiwany." - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "Certyfikat ma nieobsługiwane atrybuty." - -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "OID nie jest obsługiwany." - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "Algorytm skrótu jest nieznany." - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "Typ zawartości struktury PKCS jest nieznany." - -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "Typ opakowania struktury PKCS jest nieznany." - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "Podane hasło zawiera nieprawidłowe znaki." - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "Sprawdzenie kodu autentyczności wiadomości (MAC) nie powiodło się." - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "Osiągnięto niektóre ograniczenia." - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "Nie udało się pozyskać danych losowych." - -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "Odebrano wiadomość TLS/IA Intermediate Phase Finished" - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "Odebrano wiadomość TLS/IA Final Phase Finished" - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "Sprawdzenie sumy kontrolnej frazy TLS/IA nie powiodło się" - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "Podany algorytm lub protokół jest nieznany." - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "Rozmiar danych nawiązania połączenia jest zbyt duży." - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "Błąd otwierania /dev/crypto" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "Błąd komunikacji z /dev/crypto" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "Druga strona zakończyła połączenie" - -#: lib/gnutls_errors.c:291 -msgid "Channel binding data not available" -msgstr "Dane wiążące kanał nie są dostępne." - -#: lib/gnutls_errors.c:294 -msgid "TPM error." -msgstr "Błąd TPM." - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "TPM nie zainicjowany." - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "Nie znaleziono klucza TPM w trwałych danych." - -#: lib/gnutls_errors.c:300 -msgid "Cannot initialize a session with the TPM." -msgstr "Nie można zainicjować sesji z TPM." - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error." -msgstr "Błąd PKCS #11." - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "Błąd inicjalizacji PKCS #11." - -#: lib/gnutls_errors.c:306 -msgid "Error in parsing." -msgstr "Błąd w trakcie analizy." - -#: lib/gnutls_errors.c:308 -msgid "Error in provided PIN." -msgstr "Błąd w podanym PIN-ie." - -#: lib/gnutls_errors.c:310 -msgid "Error in provided SRK password for TPM." -msgstr "Błąd w podanym haśle SRK dla TPM." - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "Błąd w podanym haśle dla klucza do wczytania w TPM." - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "Błąd PKCS #11 w slocie" - -#: lib/gnutls_errors.c:316 -msgid "Thread locking error" -msgstr "Błąd blokowania wątku" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "Błąd PKCS #11 w atrybucie" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "Błąd PKCS #11 w urządzeniu" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "Błąd PKCS #11 w danych" - -#: lib/gnutls_errors.c:324 -msgid "PKCS #11 unsupported feature" -msgstr "Nieobsługiwana właściwość PKCS #11" - -#: lib/gnutls_errors.c:326 -msgid "PKCS #11 error in key" -msgstr "Błąd PKCS #11 w kluczu" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "PIN PKCS #11 wygasł" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "PIN PKCS #11 zablokowany" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "Błąd PKCS #11 w sesji" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "Błąd PKCS #11 w podpisie" - -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "Błąd PKCS #11 w tokenie" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "Błąd użytkownika PKCS #11" - -#: lib/gnutls_errors.c:340 -msgid "The operation timed out" -msgstr "Upłynął limit czasu operacji" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "Operacja zostałą przerwana z powodu błędu użytkownika" - -#: lib/gnutls_errors.c:344 -msgid "No supported ECC curves were found" -msgstr "Nie znaleziono obsługiwanych krzywych ECC" - -#: lib/gnutls_errors.c:346 -msgid "The curve is unsupported" -msgstr "Ta krzywa nie jest obsługiwana" - -#: lib/gnutls_errors.c:348 -msgid "The requested PKCS #11 object is not available" -msgstr "Żądany obiekt PKCS #11 nie jest dostępny" - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "Przekazana lista certyfikatów X.509 nie jest posortowana (w kolejności wystawcy)" - -#: lib/gnutls_errors.c:352 -msgid "The OCSP response is invalid" -msgstr "Odpowiedź OCSP jest nieprawidłowa." - -#: lib/gnutls_errors.c:354 -msgid "There is no certificate status (OCSP)." -msgstr "Brak statusu certyfikatu (OCSP)." - -#: lib/gnutls_errors.c:356 -msgid "Error in the system's randomness device." -msgstr "Błąd w systemowym urządzeniu danych losowych." - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "Nie udało się wynegocjować wspólnego protokołu aplikacji." - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(nieznany kod błędu)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\tUżycie klucza:\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "błąd: get_key_usage: %s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tPodpisy cyfrowe.\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tSzyfrowanie komunikacji.\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tSzyfrowanie przechowywanych danych.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tUwierzytelnianie.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tPodpisanie certyfikatu.\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tID (hex): " - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\tOdcisk (hex): " - -#: lib/openpgp/output.c:126 -msgid "\tFingerprint's random art:\n" -msgstr "\tLosowy obrazek odcisku klucza:\n" - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\tUnieważniony: tak\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\tUnieważniony: nie\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\tOznaczenia czasu:\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tUtworzenie: %s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tWygaśnięcie: nigdy\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tWygaśnięcie: %s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "nieznany" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tAlgorytm klucza publicznego: %s\n" - -#: lib/openpgp/output.c:219 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\tPoziom bezpieczeństwa klucza: %s\n" - -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tReszta (bitów: %d):\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\tWykładnik:\n" - -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tKlucz publiczny (bitów: %d):\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tWersja: %d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tNazwa[%d]: %s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tNazwa unieważniona[%d]: %s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tPodklucz[%d]:\n" - -#: lib/openpgp/output.c:400 -#, c-format -msgid "name[%d]: %s, " -msgstr "nazwa[%d]: %s, " - -#: lib/openpgp/output.c:402 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "nazwa unieważniona[%d]: %s, " - -#: lib/openpgp/output.c:422 -msgid "fingerprint: " -msgstr "odcisk: " - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "utworzono: %s, " - -#: lib/openpgp/output.c:452 -msgid "never expires, " -msgstr "nigdy nie wygasa, " - -#: lib/openpgp/output.c:460 -#, c-format -msgid "expires: %s, " -msgstr "wygasa: %s, " - -#: lib/openpgp/output.c:472 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "algorytm klucza publicznego %s (bitów: %d)" - -#: lib/openpgp/output.c:474 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "nieznany algorytm klucza publicznego (%d)" - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "Informacja o certyfikacie OpenPGP:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\tZrzut hex: " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "Informacje o żądaniu OCSP:\n" - -#: lib/x509/ocsp_output.c:298 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "\tID odpowiadającego: %.*s\n" - -#: lib/x509/ocsp_output.c:316 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\tUtworzono: %s\n" - -#: lib/x509/ocsp_output.c:410 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\tCzas unieważnienia: %s\n" - -#: lib/x509/ocsp_output.c:425 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\tTo uaktualnienie: %s\n" - -#: lib/x509/ocsp_output.c:440 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\tNastępnie uaktualnienie: %s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tAlgorytm podpisu: %s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "uwaga: podpisano złamanym algorytmem podpisu, który może być podrobiony.\n" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\tPodpis:\n" - -#: lib/x509/ocsp_output.c:619 -msgid "OCSP Response Information:\n" -msgstr "Informacje o odpowiedzi OCSP:\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "uwaga: alternatywna nazwa zawiera znak NUL, zastąpiono znakiem '!'\n" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tOgraniczenie długości ścieżki: %d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\tJęzyk polityki: %s" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\tPolityka:\n" -"\t\t\tASCII: " - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\tZrzut hex: " - -#: lib/x509/output.c:185 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\tMetoda dostępu: %.*s" - -#: lib/x509/output.c:428 -#, c-format -msgid "%sDigital signature.\n" -msgstr "%sPodpis cyfrowy.\n" - -#: lib/x509/output.c:430 -#, c-format -msgid "%sNon repudiation.\n" -msgstr "%sBez odmowy.\n" - -#: lib/x509/output.c:432 -#, c-format -msgid "%sKey encipherment.\n" -msgstr "%sSzyfrowanie klucza.\n" - -#: lib/x509/output.c:434 -#, c-format -msgid "%sData encipherment.\n" -msgstr "%sSzyfrowanie danych.\n" - -#: lib/x509/output.c:436 -#, c-format -msgid "%sKey agreement.\n" -msgstr "%sUzgodnienie klucza.\n" - -#: lib/x509/output.c:438 -#, c-format -msgid "%sCertificate signing.\n" -msgstr "%sPodpisanie certyfikatu.\n" - -#: lib/x509/output.c:440 -#, c-format -msgid "%sCRL signing.\n" -msgstr "%sPodpisanie CRL.\n" - -#: lib/x509/output.c:442 -#, c-format -msgid "%sKey encipher only.\n" -msgstr "%sTylko szyfrowanie klucza.\n" - -#: lib/x509/output.c:444 -#, c-format -msgid "%sKey decipher only.\n" -msgstr "%sTylko odszyfrowywanie klucza.\n" - -#: lib/x509/output.c:482 -#, c-format -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\t\tNie wcześniej niż: %s\n" - -#: lib/x509/output.c:489 -#, c-format -msgid "\t\t\tNot After: %s\n" -msgstr "\t\t\tNie później niż: %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "uwaga: distributionPoint zawiera znak NUL, zastąpiono znakiem '!'\n" - -#: lib/x509/output.c:632 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tSerwer WWW TLS.\n" - -#: lib/x509/output.c:634 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tKlient WWW TLS.\n" - -#: lib/x509/output.c:636 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\tPodpisywanie kodu.\n" - -#: lib/x509/output.c:638 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tOchrona poczty elektronicznej.\n" - -#: lib/x509/output.c:640 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\tOznaczanie czasu.\n" - -#: lib/x509/output.c:642 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tPodpisywanie OCSP.\n" - -#: lib/x509/output.c:644 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIpsec IKE.\n" - -#: lib/x509/output.c:646 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\tDowolne zastosowanie.\n" - -#: lib/x509/output.c:677 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\tCA: NIE\n" - -#: lib/x509/output.c:679 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\tCA: TAK\n" - -#: lib/x509/output.c:682 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\tOgraniczenie długości ścieżki: %d\n" - -#: lib/x509/output.c:814 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tAdres XMPP: %.*s\n" - -#: lib/x509/output.c:819 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "%s\t\t\tOID otherName: %.*s\n" - -#: lib/x509/output.c:821 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "%s\t\t\tDER otherName: " - -#: lib/x509/output.c:823 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" -"\n" -"%s\t\t\tASCII otherName: " - -#: lib/x509/output.c:945 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\tRozszerzenia:\n" - -#: lib/x509/output.c:955 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\tOgraniczenia podstawowe (%s):\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "krytyczny" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "niekrytyczny" - -#: lib/x509/output.c:970 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "%s\t\tIdentyfikator klucza przedmiotu (%s):\n" - -#: lib/x509/output.c:1028 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "%s\t\tIdentyfikator klucza autorytetu (%s):\n" - -#: lib/x509/output.c:1044 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\tUżycie klucza (%s):\n" - -#: lib/x509/output.c:1061 -#, c-format -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "%s\t\tOkres użycia klucza prywatnego (%s):\n" - -#: lib/x509/output.c:1076 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\tPrzeznaczenie klucza (%s):\n" - -#: lib/x509/output.c:1090 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "%s\t\tAlternatywna nazwa przedmiotu (%s):\n" - -#: lib/x509/output.c:1105 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "%s\t\tAlternatywna nazwa wystawcy (%s):\n" - -#: lib/x509/output.c:1120 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tPunkty rozprowadzania CRL (%s):\n" - -#: lib/x509/output.c:1135 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\tInformacja o certyfikacie proxy (%s):\n" - -#: lib/x509/output.c:1145 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "%s\t\tInformacje Authority Information Access (%s):\n" - -#: lib/x509/output.c:1157 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\tNieznane rozszerzenie %s (%s):\n" - -#: lib/x509/output.c:1204 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII: " - -#: lib/x509/output.c:1208 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\tZrzut hex: " - -#: lib/x509/output.c:1237 -#, c-format -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\t%sAlgorytm klucza publicznego: %s\n" - -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "\tPoziom bezpieczeństwa algorytmu: %s (bitów: %d)\n" - -#: lib/x509/output.c:1254 -#, c-format -msgid "\t\tModulus (bits %d): " -msgstr "\t\tReszta (bitów: %d): " - -#: lib/x509/output.c:1257 -#, c-format -msgid "\t\tExponent (bits %d): " -msgstr "\t\tWykładnik (bitów: %d): " - -#: lib/x509/output.c:1265 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tWykładnik (bitów: %d):\n" - -#: lib/x509/output.c:1286 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\tKrzywa:\t%s\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX: " - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY: " - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -#: lib/x509/output.c:1322 -#, c-format -msgid "\t\tPublic key (bits %d): " -msgstr "\t\tKlucz publiczny (bitów: %d): " - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP: " - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ: " - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG: " - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -msgid "Subject " -msgstr "Przedmiot " - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\tNumer seryjny (hex): " - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tWystawca: %s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\tWażność:\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tNie wcześniej niż: %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tNie później niż: %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\tPrzedmiot: %s\n" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tOdcisk MD5:\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tOdcisk SHA-1:\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tIdentyfikator klucza publicznego:\n" -"\t\t" - -#: lib/x509/output.c:1627 -msgid "\tPublic key's random art:\n" -msgstr "\tLosowy obrazek klucza publicznego:\n" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "podpisano przy użyciu %s (uszkodzonego!), " - -#: lib/x509/output.c:1725 -#, c-format -msgid "signed using %s, " -msgstr "podpisano przy użyciu %s, " - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "Informacja o certyfikacie X.509:\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "Inne informacje:\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\tWersja: 1 (domyślna)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\tDaty uaktualnień:\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tWystawiono: %s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tNastępnie: %s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\tRozszerzenia:\n" - -#: lib/x509/output.c:2007 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tNumer CRL (%s): " - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tIdentyfikator klucza autorytetu (%s):\n" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tNieznane rozszerzenie %s (%s):\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tUnieważnione certyfikaty (%d):\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\tBrak unieważnionych certyfikatów.\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tNumer seryjny (hex): " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tUnieważniono: %s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "Informacja o liście unieważnień certyfikatów X.509:\n" - -#: lib/x509/output.c:2315 -msgid "\tAttributes:\n" -msgstr "\tAtrybuty:\n" - -#: lib/x509/output.c:2367 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "\t\tHasło wyzwania: %s\n" - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tNieznane rozszerzenie %s:\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "Informacja o żądaniu certyfikatu PKCS #10:\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "Użycie klucza publicznego:\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "Identyfikator klucza publicznego: " - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "Informacje o kluczu publicznym:\n" diff --git a/po/sv.po.in b/po/sv.po.in deleted file mode 100644 index 27858f9f14..0000000000 --- a/po/sv.po.in +++ /dev/null @@ -1,1375 +0,0 @@ -# Swedish translation of libgnutls. -# Copyright (C) 2007, 2008, 2009, 2011, 2012 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# Daniel Nylander , 2006, 2007, 2008, 2009, 2011, 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: libgnutls 3.0.12\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2012-01-20 14:09+0100\n" -"PO-Revision-Date: 2012-01-22 10:09+0100\n" -"Last-Translator: Daniel Nylander \n" -"Language-Team: Swedish \n" -"Language: sv\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" - -# SSL_shutdown() shuts down an active TLS/SSL connection. It sends the ``close notify'' shutdown alert to the peer. -#: lib/gnutls_alert.c:45 -msgid "Close notify" -msgstr "Stängningsnotifiering" - -#: lib/gnutls_alert.c:46 -msgid "Unexpected message" -msgstr "Oväntat meddelande" - -#: lib/gnutls_alert.c:47 -msgid "Bad record MAC" -msgstr "Felaktig MAC-post" - -#: lib/gnutls_alert.c:48 -msgid "Decryption failed" -msgstr "Dekryptering misslyckades" - -#: lib/gnutls_alert.c:49 -msgid "Record overflow" -msgstr "Överflöde i post" - -#: lib/gnutls_alert.c:50 -msgid "Decompression failed" -msgstr "Dekomprimering misslyckades" - -#: lib/gnutls_alert.c:51 -msgid "Handshake failed" -msgstr "Handskakning misslyckades" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is bad" -msgstr "Certifikatet är felaktigt" - -#: lib/gnutls_alert.c:53 -msgid "Certificate is not supported" -msgstr "Certifikatet stöds inte" - -#: lib/gnutls_alert.c:54 -msgid "Certificate was revoked" -msgstr "Certifikatet var spärrat" - -#: lib/gnutls_alert.c:55 -msgid "Certificate is expired" -msgstr "Certifikatet har gått ut" - -#: lib/gnutls_alert.c:56 -msgid "Unknown certificate" -msgstr "Okänt certifikat" - -#: lib/gnutls_alert.c:57 -msgid "Illegal parameter" -msgstr "Otillåten parameter" - -#: lib/gnutls_alert.c:58 -msgid "CA is unknown" -msgstr "Certifikatutfärdare är okänd" - -#: lib/gnutls_alert.c:59 -msgid "Access was denied" -msgstr "Åtkomst nekades" - -#: lib/gnutls_alert.c:60 -msgid "Decode error" -msgstr "Avkodningsfel" - -#: lib/gnutls_alert.c:61 -msgid "Decrypt error" -msgstr "Dekrypteringsfel" - -#: lib/gnutls_alert.c:62 -msgid "Export restriction" -msgstr "Exportbegränsning" - -#: lib/gnutls_alert.c:63 -msgid "Error in protocol version" -msgstr "Fel i protokollversion" - -#: lib/gnutls_alert.c:64 -msgid "Insufficient security" -msgstr "Otillräcklig säkerhet" - -#: lib/gnutls_alert.c:65 -msgid "User canceled" -msgstr "Användaren avbröt" - -#: lib/gnutls_alert.c:66 -msgid "No certificate (SSL 3.0)" -msgstr "Inget certifikat (SSL 3.0)" - -#: lib/gnutls_alert.c:67 -msgid "Internal error" -msgstr "Internt fel" - -#: lib/gnutls_alert.c:68 -msgid "No renegotiation is allowed" -msgstr "Ingen återförhandling tillåts" - -#: lib/gnutls_alert.c:70 -msgid "Could not retrieve the specified certificate" -msgstr "Kunde inte hämta angivet certifikat" - -#: lib/gnutls_alert.c:71 -msgid "An unsupported extension was sent" -msgstr "En utökning skickades som inte stöds" - -#: lib/gnutls_alert.c:73 -msgid "The server name sent was not recognized" -msgstr "Servernamnet som skickades kändes inte igen" - -#: lib/gnutls_alert.c:75 -msgid "The SRP/PSK username is missing or not known" -msgstr "SRP/PSK-användarnamn saknas eller är inte känt" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Lyckades." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Kunde inte förhandla fram en krypteringssvit som stöds." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "Inga eller otillräckliga prioriteter angavs." - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "Krypteringstypen stöds inte." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "Certifikatet och den angivna nyckeln stämmer inte överens." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Kunde inte förhandla fram en stödd komprimeringsmetod." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "En okänd publik nyckel-algoritm påträffades." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "En algoritm som inte är aktiverad blev förhandlad." - -#: lib/gnutls_errors.c:67 -msgid "A large TLS record packet was received." -msgstr "Ett stort TLS-journalpaket togs emot." - -#: lib/gnutls_errors.c:69 -msgid "A record packet with illegal version was received." -msgstr "Ett journalpaket med otillåten version togs emot." - -# Stort? -#: lib/gnutls_errors.c:72 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "Diffie-Hellman-primtalet som skickades av servern är inte acceptabelt (inte tillräckligt långt)." - -#: lib/gnutls_errors.c:74 -msgid "A TLS packet with unexpected length was received." -msgstr "Ett TLS-paket med oväntad längd togs emot." - -#: lib/gnutls_errors.c:76 -msgid "The TLS connection was non-properly terminated." -msgstr "TLS-anslutningen avslutades inte korrekt." - -#: lib/gnutls_errors.c:79 -msgid "The specified session has been invalidated for some reason." -msgstr "Angiven session har av någon anledning blivit ogiltigförklarad." - -#: lib/gnutls_errors.c:82 -msgid "GnuTLS internal error." -msgstr "Internt fel i GnuTLS." - -#: lib/gnutls_errors.c:83 -msgid "An illegal TLS extension was received." -msgstr "En otillåten TLS-utökning togs emot." - -#: lib/gnutls_errors.c:85 -msgid "A TLS fatal alert has been received." -msgstr "Ett ödesdigert TLS-larm togs emot." - -#: lib/gnutls_errors.c:87 -msgid "An unexpected TLS packet was received." -msgstr "Ett oväntat TLS-paket togs emot." - -#: lib/gnutls_errors.c:89 -msgid "A TLS warning alert has been received." -msgstr "En TLS-varning har tagits emot." - -#: lib/gnutls_errors.c:92 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "Ett fel påträffades vid beräkning av TLS Finished-paketet." - -#: lib/gnutls_errors.c:94 -msgid "No certificate was found." -msgstr "Inget certifikat hittades." - -#: lib/gnutls_errors.c:96 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "Angiven DSA-nyckel är inte kompatibel med det valda TLS-protokollet." - -#: lib/gnutls_errors.c:99 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Det finns redan en krypteringsalgoritm med lägre prioritet." - -#: lib/gnutls_errors.c:102 -msgid "No temporary RSA parameters were found." -msgstr "Inga temporära RSA-parametrar hittades." - -#: lib/gnutls_errors.c:104 -msgid "No temporary DH parameters were found." -msgstr "Inga temporära DH-parametrar hittades." - -#: lib/gnutls_errors.c:106 -msgid "An unexpected TLS handshake packet was received." -msgstr "Ett oväntat TLS-handskakningspaket togs emot." - -#: lib/gnutls_errors.c:108 -msgid "The scanning of a large integer has failed." -msgstr "Avsökningen av ett stort heltal misslyckades." - -#: lib/gnutls_errors.c:110 -msgid "Could not export a large integer." -msgstr "Kunde inte exportera ett stort heltal." - -#: lib/gnutls_errors.c:112 -msgid "Decryption has failed." -msgstr "Dekryptering misslyckades." - -#: lib/gnutls_errors.c:113 -msgid "Encryption has failed." -msgstr "Kryptering misslyckades." - -#: lib/gnutls_errors.c:114 -msgid "Public key decryption has failed." -msgstr "Dekryptering av publik nyckel misslyckades." - -#: lib/gnutls_errors.c:116 -msgid "Public key encryption has failed." -msgstr "Kryptering av publik nyckel misslyckades." - -#: lib/gnutls_errors.c:118 -msgid "Public key signing has failed." -msgstr "Signering av publik nyckel misslyckades." - -#: lib/gnutls_errors.c:120 -msgid "Public key signature verification has failed." -msgstr "Validering av av publika nyckelns signatur misslyckades." - -#: lib/gnutls_errors.c:122 -msgid "Decompression of the TLS record packet has failed." -msgstr "Dekomprimering av TLS-journalpaketet har misslyckades." - -#: lib/gnutls_errors.c:124 -msgid "Compression of the TLS record packet has failed." -msgstr "Komprimering av TLS-journalpaketet har misslyckades." - -#: lib/gnutls_errors.c:127 -msgid "Internal error in memory allocation." -msgstr "Internt fel i minnesallokering." - -#: lib/gnutls_errors.c:129 -msgid "An unimplemented or disabled feature has been requested." -msgstr "En icke implementerad eller inaktiverad funktion begärdes." - -#: lib/gnutls_errors.c:131 -msgid "Insufficient credentials for that request." -msgstr "Otillräckliga rättigheter för begäran." - -#: lib/gnutls_errors.c:133 -msgid "Error in password file." -msgstr "Fel i lösenordsfil." - -#: lib/gnutls_errors.c:134 -msgid "Wrong padding in PKCS1 packet." -msgstr "Fel utfyllnad i PKCS1-paket." - -#: lib/gnutls_errors.c:136 -msgid "The requested session has expired." -msgstr "Den begärda sessionen har tagit slut." - -#: lib/gnutls_errors.c:137 -msgid "Hashing has failed." -msgstr "Hashning misslyckades." - -#: lib/gnutls_errors.c:138 -msgid "Base64 decoding error." -msgstr "Base64-avkodningsfel." - -#: lib/gnutls_errors.c:140 -msgid "Base64 unexpected header error." -msgstr "Oväntat fel i Base64-huvud." - -#: lib/gnutls_errors.c:143 -msgid "Base64 encoding error." -msgstr "Base64-kodningsfel." - -#: lib/gnutls_errors.c:145 -msgid "Parsing error in password file." -msgstr "Tolkningsfel i lösenordsfil." - -#: lib/gnutls_errors.c:147 -msgid "The requested data were not available." -msgstr "Begärt data var inte tillgängligt." - -#: lib/gnutls_errors.c:149 -msgid "Error in the pull function." -msgstr "Fel i inhämtningsfunktionen." - -#: lib/gnutls_errors.c:150 -msgid "Error in the push function." -msgstr "Fel i utsändningsfunktionen." - -#: lib/gnutls_errors.c:152 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "Den övre gränsen för sekvensnummer för journalpaket har nåtts. Wow!" - -#: lib/gnutls_errors.c:154 -msgid "Error in the certificate." -msgstr "Fel i certifikatet." - -#: lib/gnutls_errors.c:156 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "Okänt alternativt namn för innehavare i X.509-certifikat." - -#: lib/gnutls_errors.c:159 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Icke stödd kritisk utökning i X.509-certifikat." - -#: lib/gnutls_errors.c:161 -msgid "Key usage violation in certificate has been detected." -msgstr "Överträdelse av nyckelanvändning i certifikat har upptäckts." - -#: lib/gnutls_errors.c:163 -msgid "Resource temporarily unavailable, try again." -msgstr "Resursen är temporärt otillgänglig, försök igen." - -#: lib/gnutls_errors.c:165 -msgid "Function was interrupted." -msgstr "Funktionen avbröts." - -#: lib/gnutls_errors.c:166 -msgid "Rehandshake was requested by the peer." -msgstr "Upprepad handskakning begärdes av motparten." - -#: lib/gnutls_errors.c:169 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "TLS-programdata togs emot när handskakningsdata förväntades." - -#: lib/gnutls_errors.c:171 -msgid "Error in Database backend." -msgstr "Fel i databasbakänden." - -#: lib/gnutls_errors.c:172 -msgid "The certificate type is not supported." -msgstr "Certifikattypen stöds inte." - -#: lib/gnutls_errors.c:174 -msgid "The given memory buffer is too short to hold parameters." -msgstr "Den angivna minnesbufferten är för liten för att lagra parametrar." - -#: lib/gnutls_errors.c:176 -msgid "The request is invalid." -msgstr "Begäran är ogiltig." - -#: lib/gnutls_errors.c:177 -msgid "The cookie was bad." -msgstr "Kakan var felaktig." - -#: lib/gnutls_errors.c:178 -msgid "An illegal parameter has been received." -msgstr "En otillåten parameter har tagits emot." - -#: lib/gnutls_errors.c:180 -msgid "An illegal parameter was found." -msgstr "En otillåten parameter hittades." - -#: lib/gnutls_errors.c:182 -msgid "Error while reading file." -msgstr "Fel vid läsning av fil." - -#: lib/gnutls_errors.c:184 -msgid "ASN1 parser: Element was not found." -msgstr "ASN1-tolkare: Elementet hittades inte." - -#: lib/gnutls_errors.c:186 -msgid "ASN1 parser: Identifier was not found" -msgstr "ASN1-tolkare: Identifieraren hittades inte" - -#: lib/gnutls_errors.c:188 -msgid "ASN1 parser: Error in DER parsing." -msgstr "ASN1-tolkare: Fel i DER-tolkning." - -#: lib/gnutls_errors.c:190 -msgid "ASN1 parser: Value was not found." -msgstr "ASN1-tolkare: Värdet hittades inte." - -#: lib/gnutls_errors.c:192 -msgid "ASN1 parser: Generic parsing error." -msgstr "ASN1-tolkare: Allmänt tolkningsfel." - -#: lib/gnutls_errors.c:194 -msgid "ASN1 parser: Value is not valid." -msgstr "ASN1-tolkare: Värdet är inte giltigt." - -#: lib/gnutls_errors.c:196 -msgid "ASN1 parser: Error in TAG." -msgstr "ASN1-tolkare: Fel i TAG." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: error in implicit tag" -msgstr "ASN1-tolkare: fel i implicit tag" - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "ASN1-tolkare: Fel i typen \"ANY\"." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Syntax error." -msgstr "ASN1-tolkare: Syntaxfel." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "ASN1-tolkare: Överflöde i DER-tolkning." - -#: lib/gnutls_errors.c:206 -msgid "Too many empty record packets have been received." -msgstr "För många tomma journalpaket har tagits emot." - -#: lib/gnutls_errors.c:208 -msgid "Too many handshake packets have been received." -msgstr "För många handskakningspaket har tagits emot." - -#: lib/gnutls_errors.c:210 -msgid "The crypto library version is too old." -msgstr "Versionen av crypto-biblioteket är för gammal." - -#: lib/gnutls_errors.c:213 -msgid "The tasn1 library version is too old." -msgstr "Versionen av tasn1-biblioteket är för gammal." - -#: lib/gnutls_errors.c:215 -msgid "The OpenPGP User ID is revoked." -msgstr "OpenPGP-användaridentiteten är spärrad." - -#: lib/gnutls_errors.c:217 -msgid "The OpenPGP key has not a preferred key set." -msgstr "OpenPGP-nyckeln har inte en föredragen nyckeluppsättning." - -#: lib/gnutls_errors.c:219 -msgid "Error loading the keyring." -msgstr "Fel vid inläsning av nyckelringen." - -#: lib/gnutls_errors.c:221 -msgid "The initialization of crypto backend has failed." -msgstr "Initieringen av krypteringsbakände misslyckades." - -#: lib/gnutls_errors.c:223 -msgid "No supported compression algorithms have been found." -msgstr "Inga stödda komprimeringsalgoritmer hittades." - -#: lib/gnutls_errors.c:225 -msgid "No supported cipher suites have been found." -msgstr "Inga krypteringssviter som stöds hittades." - -#: lib/gnutls_errors.c:227 -msgid "Could not get OpenPGP key." -msgstr "Kunde inte hämta OpenPGP-nyckel." - -#: lib/gnutls_errors.c:229 -msgid "Could not find OpenPGP subkey." -msgstr "Kunde inte hitta OpenPGP-undernyckel." - -#: lib/gnutls_errors.c:231 -msgid "Safe renegotiation failed." -msgstr "Säker återförhandling misslyckades." - -#: lib/gnutls_errors.c:233 -msgid "Unsafe renegotiation denied." -msgstr "Osäker återförhandling nekades." - -#: lib/gnutls_errors.c:236 -msgid "The SRP username supplied is illegal." -msgstr "Det angivna SRP-användarnamnet är inte tillåtet." - -#: lib/gnutls_errors.c:238 -msgid "The SRP username supplied is unknown." -msgstr "Det angivna SRP-användarnamnet är okänt." - -#: lib/gnutls_errors.c:241 -msgid "The OpenPGP fingerprint is not supported." -msgstr "OpenPGP-fingeravtrycket stöds inte." - -#: lib/gnutls_errors.c:243 -msgid "The signature algorithm is not supported." -msgstr "Signaturalgoritmen stöds inte." - -#: lib/gnutls_errors.c:245 -msgid "The certificate has unsupported attributes." -msgstr "Certifikatet har attribut som inte stöds." - -#: lib/gnutls_errors.c:247 -msgid "The OID is not supported." -msgstr "OID:n stöds inte." - -#: lib/gnutls_errors.c:249 -msgid "The hash algorithm is unknown." -msgstr "Hashalgoritmen är okänd." - -#: lib/gnutls_errors.c:251 -msgid "The PKCS structure's content type is unknown." -msgstr "PKCS-strukturens innehållstyp är okänd." - -# Hjälp! -#: lib/gnutls_errors.c:253 -msgid "The PKCS structure's bag type is unknown." -msgstr "PKCS-strukturens väsktyp är okänd." - -#: lib/gnutls_errors.c:255 -msgid "The given password contains invalid characters." -msgstr "Det angivna lösenordet innehåller ogiltiga tecken." - -#: lib/gnutls_errors.c:257 -msgid "The Message Authentication Code verification failed." -msgstr "Validering av meddelandeautentiseringskoden (MAC) misslyckades." - -#: lib/gnutls_errors.c:259 -msgid "Some constraint limits were reached." -msgstr "Vissa begränsningar nåddes." - -#: lib/gnutls_errors.c:261 -msgid "Failed to acquire random data." -msgstr "Misslyckades med att få tag på slumpmässigt data." - -#: lib/gnutls_errors.c:264 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "Tog emot ett TLS/IA Intermediate Phase Finished-meddelande" - -#: lib/gnutls_errors.c:266 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "Tog emot ett TLS/IA Final Phase Finished-meddelande" - -#: lib/gnutls_errors.c:268 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "Validering av kontrollsumma för TLS/IA-fas misslyckades" - -#: lib/gnutls_errors.c:271 -msgid "The specified algorithm or protocol is unknown." -msgstr "Angivna algoritmen eller protokollet är okänt." - -#: lib/gnutls_errors.c:274 -msgid "The handshake data size is too large." -msgstr "Datastorlek för handskakning är för stor." - -#: lib/gnutls_errors.c:277 -msgid "Error opening /dev/crypto" -msgstr "Fel vid öppning av /dev/crypto" - -#: lib/gnutls_errors.c:280 -msgid "Error interfacing with /dev/crypto" -msgstr "Fel vid kommunikation med /dev/crypto" - -#: lib/gnutls_errors.c:283 -msgid "Channel binding data not available" -msgstr "Kanalbindningsdata är inte tillgängligt" - -#: lib/gnutls_errors.c:286 -msgid "PKCS #11 error." -msgstr "PKCS #11-fel." - -#: lib/gnutls_errors.c:288 -msgid "PKCS #11 initialization error." -msgstr "PKCS #11-initieringsfel." - -#: lib/gnutls_errors.c:290 -msgid "Error in parsing." -msgstr "Fel i tolkning." - -#: lib/gnutls_errors.c:292 -msgid "PKCS #11 error in PIN." -msgstr "PKCS #11-fel i PIN-kod." - -#: lib/gnutls_errors.c:294 -msgid "PKCS #11 PIN should be saved." -msgstr "PKCS #11 PIN-kod bör sparas." - -#: lib/gnutls_errors.c:296 -msgid "PKCS #11 error in slot" -msgstr "PKCS #11-fel i kortplats" - -#: lib/gnutls_errors.c:298 -msgid "Thread locking error" -msgstr "Trådlåsningsfel" - -#: lib/gnutls_errors.c:300 -msgid "PKCS #11 error in attribute" -msgstr "PKCS #11-fel i attribut" - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error in device" -msgstr "PKCS #11-fel i enhet" - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 error in data" -msgstr "PKCS #11-fel i data" - -#: lib/gnutls_errors.c:306 -msgid "PKCS #11 unsupported feature" -msgstr "PKCS #11-funktion stöds inte" - -#: lib/gnutls_errors.c:308 -msgid "PKCS #11 error in key" -msgstr "PKCS #11-fel i nyckel" - -#: lib/gnutls_errors.c:310 -msgid "PKCS #11 PIN expired" -msgstr "PKCS #11 PIN-kod utgången" - -#: lib/gnutls_errors.c:312 -msgid "PKCS #11 PIN locked" -msgstr "PKCS #11 PIN-kod låst" - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in session" -msgstr "PKCS #11-fel i session" - -#: lib/gnutls_errors.c:316 -msgid "PKCS #11 error in signature" -msgstr "PKCS #11-fel i signatur" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in token" -msgstr "PKCS #11-fel i token" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 user error" -msgstr "PKCS #11-användarfel" - -#: lib/gnutls_errors.c:322 -msgid "The operation timed out" -msgstr "Åtgärden översteg tidsgränsen" - -#: lib/gnutls_errors.c:324 -msgid "The operation was cancelled due to user error" -msgstr "Åtgärden avbröts på grund av ett användarfel" - -#: lib/gnutls_errors.c:326 -msgid "No supported ECC curves were found" -msgstr "Inga ECC-kurvor hittades som stöds" - -#: lib/gnutls_errors.c:328 -msgid "The curve is unsupported" -msgstr "Kurvan stöds inte" - -#: lib/gnutls_errors.c:330 -msgid "The requested PKCS #11 object is not available" -msgstr "Begärt PKCS #11-objekt är inte tillgängligt" - -#: lib/gnutls_errors.c:332 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "Den tillhandahållna X.509-certifikatlistan är inte sorterad (sorterad enligt utfärdare)" - -#: lib/gnutls_errors.c:419 -msgid "(unknown error code)" -msgstr "(okänd felkod)" - -#: lib/openpgp/output.c:45 -msgid "\t\tKey Usage:\n" -msgstr "\t\tNyckelanvändning:\n" - -#: lib/openpgp/output.c:54 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "fel: get_key_usage: %s\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tDigitala signaturer.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tKommunikationskryptering.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tKryptering för datalagring.\n" - -#: lib/openpgp/output.c:65 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tAutentisering.\n" - -#: lib/openpgp/output.c:67 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tCertifikatsignering.\n" - -#: lib/openpgp/output.c:88 -msgid "\tID (hex): " -msgstr "\tIdentitet (hex): " - -#: lib/openpgp/output.c:113 -msgid "\tFingerprint (hex): " -msgstr "\tFingeravtryck (hex): " - -#: lib/openpgp/output.c:130 -msgid "\tFingerprint's random art:\n" -msgstr "\tFingeravtryckets slumpmässiga konst:\n" - -#: lib/openpgp/output.c:148 -msgid "\tRevoked: True\n" -msgstr "\tSpärrat: Sant\n" - -#: lib/openpgp/output.c:150 -msgid "\tRevoked: False\n" -msgstr "\tSpärrat: Falskt\n" - -#: lib/openpgp/output.c:158 -msgid "\tTime stamps:\n" -msgstr "\tTidsstämplar:\n" - -#: lib/openpgp/output.c:175 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tSkapat den: %s\n" - -#: lib/openpgp/output.c:189 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tUtgångsdatum: Aldrig\n" - -#: lib/openpgp/output.c:198 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tUtgångsdatum: %s\n" - -#: lib/openpgp/output.c:220 lib/x509/ocsp_output.c:511 lib/x509/output.c:1173 -#: lib/x509/output.c:1306 lib/x509/output.c:1496 lib/x509/output.c:1904 -#: lib/x509/output.c:2029 -msgid "unknown" -msgstr "okänd" - -#: lib/openpgp/output.c:222 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tAlgoritm för publik nyckel: %s\n" - -#: lib/openpgp/output.c:223 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\tSäkerhetsnivå för nyckel: %s\n" - -#: lib/openpgp/output.c:244 lib/x509/output.c:1208 lib/x509/output.c:2044 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tModulus (bitar %d):\n" - -#: lib/openpgp/output.c:246 lib/x509/output.c:2046 -msgid "\t\tExponent:\n" -msgstr "\t\tExponent:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1253 lib/x509/output.c:2066 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tPublik nyckel (bitar %d):\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1255 lib/x509/output.c:2068 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:275 lib/x509/output.c:1257 lib/x509/output.c:2070 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:277 lib/x509/output.c:1259 lib/x509/output.c:2072 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:308 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:283 lib/x509/output.c:1049 lib/x509/output.c:1657 -#: lib/x509/output.c:1987 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tVersion: %d\n" - -#: lib/openpgp/output.c:341 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tNamn[%d]: %s\n" - -#: lib/openpgp/output.c:343 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tSpärrat namn[%d]: %s\n" - -#: lib/openpgp/output.c:364 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tUndernyckel[%d]:\n" - -#: lib/openpgp/output.c:404 -#, c-format -msgid "name[%d]: %s, " -msgstr "namn[%d]: %s, " - -#: lib/openpgp/output.c:406 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "spärrat namn[%d]: %s, " - -#: lib/openpgp/output.c:426 -msgid "fingerprint: " -msgstr "fingeravtryck: " - -#: lib/openpgp/output.c:446 -#, c-format -msgid "created: %s, " -msgstr "skapat: %s, " - -#: lib/openpgp/output.c:456 -msgid "never expires, " -msgstr "går aldrig ut, " - -#: lib/openpgp/output.c:464 -#, c-format -msgid "expires: %s, " -msgstr "går ut: %s, " - -#: lib/openpgp/output.c:476 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "nyckelalgoritm %s (%d bitar)" - -#: lib/openpgp/output.c:478 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "okänd nyckelalgoritm (%d)" - -#: lib/openpgp/output.c:511 -msgid "OpenPGP Certificate Information:\n" -msgstr "Information om OpenPGP-certifikat:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:486 -#: lib/x509/output.c:1834 lib/x509/output.c:2204 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:490 -#: lib/x509/output.c:1838 lib/x509/output.c:2208 -msgid "\t\t\tHexdump: " -msgstr "\t\t\tHexdump: " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "Information om OCSP-begäran:\n" - -#: lib/x509/ocsp_output.c:297 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "\tSvararens id: %.*s\n" - -#: lib/x509/ocsp_output.c:315 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\tProducerat: %s\n" - -#: lib/x509/ocsp_output.c:409 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\tTid för spärrning: %s\n" - -#: lib/x509/ocsp_output.c:424 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\tDenna uppdatering: %s\n" - -#: lib/x509/ocsp_output.c:439 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\tNästa uppdatering: %s\n" - -#: lib/x509/ocsp_output.c:512 lib/x509/output.c:1307 lib/x509/output.c:1905 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tSignaturalgoritm: %s\n" - -#: lib/x509/ocsp_output.c:516 lib/x509/output.c:1311 lib/x509/output.c:1909 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "varning: signerad med en trasig signaturalgoritm som kan förfalskas.\n" - -#: lib/x509/ocsp_output.c:525 lib/x509/output.c:1338 lib/x509/output.c:1936 -msgid "\tSignature:\n" -msgstr "\tSignatur:\n" - -#: lib/x509/ocsp_output.c:617 -msgid "OCSP Response Information:\n" -msgstr "Information om OCSP-svar:\n" - -#: lib/x509/output.c:103 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tBegränsning för sökvägslängd: %d\n" - -#: lib/x509/output.c:104 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\tPolicyspråk: %s" - -#: lib/x509/output.c:113 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " - -#: lib/x509/output.c:115 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\tHexdump: " - -#: lib/x509/output.c:140 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\tÅtkomstmetod: %.*s" - -#: lib/x509/output.c:305 -#, c-format -msgid "%s\t\t\tDigital signature.\n" -msgstr "%s\t\t\tDigital signatur.\n" - -# Klassisk term inom digitala certifikat. -#: lib/x509/output.c:307 -#, c-format -msgid "%s\t\t\tNon repudiation.\n" -msgstr "%s\t\t\tOförnekbarhet.\n" - -#: lib/x509/output.c:309 -#, c-format -msgid "%s\t\t\tKey encipherment.\n" -msgstr "%s\t\t\tNyckelkryptering.\n" - -#: lib/x509/output.c:311 -#, c-format -msgid "%s\t\t\tData encipherment.\n" -msgstr "%s\t\t\tDatakryptering.\n" - -#: lib/x509/output.c:313 -#, c-format -msgid "%s\t\t\tKey agreement.\n" -msgstr "%s\t\t\tNyckelförhandling.\n" - -#: lib/x509/output.c:315 -#, c-format -msgid "%s\t\t\tCertificate signing.\n" -msgstr "%s\t\t\tCertifikatsignering.\n" - -#: lib/x509/output.c:317 -#, c-format -msgid "%s\t\t\tCRL signing.\n" -msgstr "%s\t\t\tCRL-signering.\n" - -#: lib/x509/output.c:319 -#, c-format -msgid "%s\t\t\tKey encipher only.\n" -msgstr "%s\t\t\tEndast nyckelkryptering.\n" - -#: lib/x509/output.c:321 -#, c-format -msgid "%s\t\t\tKey decipher only.\n" -msgstr "%s\t\t\tEndast nyckeldekryptering.\n" - -#: lib/x509/output.c:372 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "varning: distributionPoint innehåller en inbäddad NUL, ersätter med \"!\"\n" - -#: lib/x509/output.c:465 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tTLS WWW-server.\n" - -#: lib/x509/output.c:467 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tTLS WWW-klient.\n" - -# Källkodssignering? -#: lib/x509/output.c:469 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\tKodsignering.\n" - -#: lib/x509/output.c:471 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tE-postskydd.\n" - -#: lib/x509/output.c:473 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\tTidsstämpling.\n" - -#: lib/x509/output.c:475 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tOCSP-signering.\n" - -#: lib/x509/output.c:477 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIpsec IKE.\n" - -#: lib/x509/output.c:479 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\tValfritt syfte.\n" - -#: lib/x509/output.c:512 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\tCertifikatutfärdare (CA): FALSKT\n" - -#: lib/x509/output.c:514 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\tCertifikatutfärdare (CA): SANT\n" - -#: lib/x509/output.c:517 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\tBegränsning för sökvägslängd: %d\n" - -#: lib/x509/output.c:591 lib/x509/output.c:681 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "varning: altname innehåller en inbäddad NUL, ersätter med \"!\"\n" - -#: lib/x509/output.c:687 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tXMPP-adress: %.*s\n" - -#: lib/x509/output.c:692 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "%s\t\t\totherName OID: %.*s\n" - -#: lib/x509/output.c:694 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "%s\t\t\totherName DER: " - -#: lib/x509/output.c:696 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" -"\n" -"%s\t\t\totherName ASCII: " - -#: lib/x509/output.c:820 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\tTillägg:\n" - -#: lib/x509/output.c:830 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\tAllmänna begränsningar (%s):\n" - -#: lib/x509/output.c:831 lib/x509/output.c:846 lib/x509/output.c:863 -#: lib/x509/output.c:879 lib/x509/output.c:894 lib/x509/output.c:911 -#: lib/x509/output.c:926 lib/x509/output.c:941 lib/x509/output.c:959 -#: lib/x509/output.c:970 lib/x509/output.c:981 lib/x509/output.c:1769 -#: lib/x509/output.c:1792 lib/x509/output.c:1805 -msgid "critical" -msgstr "kritisk" - -#: lib/x509/output.c:831 lib/x509/output.c:846 lib/x509/output.c:863 -#: lib/x509/output.c:879 lib/x509/output.c:894 lib/x509/output.c:911 -#: lib/x509/output.c:926 lib/x509/output.c:941 lib/x509/output.c:959 -#: lib/x509/output.c:970 lib/x509/output.c:981 lib/x509/output.c:1769 -#: lib/x509/output.c:1792 lib/x509/output.c:1805 -msgid "not critical" -msgstr "ej kritisk" - -#: lib/x509/output.c:845 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "%s\t\tInnehavarens nyckelidentifierare (%s):\n" - -#: lib/x509/output.c:862 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "%s\t\tUtfärdarens nyckelidentifierare (%s):\n" - -#: lib/x509/output.c:878 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\tNyckelanvändning (%s):\n" - -#: lib/x509/output.c:893 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\tNyckelsyfte (%s):\n" - -#: lib/x509/output.c:910 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "%s\t\tInnehavarens alternativa namn (%s):\n" - -#: lib/x509/output.c:925 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "%s\t\tUtfärdarens alternativa namn (%s):\n" - -#: lib/x509/output.c:940 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tCRL-distributionspunkter (%s):\n" - -#: lib/x509/output.c:958 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\tInformation om proxycertifikat (%s):\n" - -#: lib/x509/output.c:968 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "%s\t\tUtfärdarens informationsåtkomst (%s):\n" - -#: lib/x509/output.c:980 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\tOkänt tillägg %s (%s):\n" - -#: lib/x509/output.c:1027 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII: " - -#: lib/x509/output.c:1031 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\tHexdump: " - -#: lib/x509/output.c:1063 -msgid "\tSerial Number (hex): " -msgstr "\tSerienummer (hex): " - -#: lib/x509/output.c:1092 lib/x509/output.c:1683 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tUtfärdare: %s\n" - -#: lib/x509/output.c:1102 -msgid "\tValidity:\n" -msgstr "\tGiltighet:\n" - -#: lib/x509/output.c:1115 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tInte före: %s\n" - -#: lib/x509/output.c:1129 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tInte efter: %s\n" - -#: lib/x509/output.c:1154 lib/x509/output.c:2011 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\tInnehavare: %s\n" - -#: lib/x509/output.c:1177 lib/x509/output.c:2031 -#, c-format -msgid "\tSubject Public Key Algorithm: %s\n" -msgstr "\tAlgoritm för innehavarens publika nyckel: %s\n" - -#: lib/x509/output.c:1178 -#, c-format -msgid "\tCertificate Security Level: %s (%d bits)\n" -msgstr "\tSäkerhetsnivå för certifikat: %s (%d bitar)\n" - -#: lib/x509/output.c:1210 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tExponent (bitar %d):\n" - -#: lib/x509/output.c:1231 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\tKurva:\t%s\n" - -#: lib/x509/output.c:1232 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1234 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -#: lib/x509/output.c:1361 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tMD5-fingeravtryck:\n" -"\t\t" - -#: lib/x509/output.c:1363 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tSHA-1-fingeravtryck:\n" -"\t\t" - -#: lib/x509/output.c:1385 lib/x509/output.c:2248 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tPublik nyckel-identitet:\n" -"\t\t" - -#: lib/x509/output.c:1401 -msgid "\tPublic key's random art:\n" -msgstr "\tPublika nyckelns slumpmässiga konst:\n" - -#: lib/x509/output.c:1498 -#, c-format -msgid "signed using %s (broken!), " -msgstr "signerat med %s (trasig!), " - -#: lib/x509/output.c:1500 -#, c-format -msgid "signed using %s, " -msgstr "signerat med %s, " - -#: lib/x509/output.c:1613 -msgid "X.509 Certificate Information:\n" -msgstr "Information om X.509-certifikat:\n" - -#: lib/x509/output.c:1617 lib/x509/output.c:2285 -msgid "Other Information:\n" -msgstr "Övrig information:\n" - -#: lib/x509/output.c:1653 -msgid "\tVersion: 1 (default)\n" -msgstr "\tVersion: 1 (standard)\n" - -#: lib/x509/output.c:1693 -msgid "\tUpdate dates:\n" -msgstr "\tUppdateringsdatum:\n" - -#: lib/x509/output.c:1706 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tUtfärdat: %s\n" - -#: lib/x509/output.c:1722 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tNästa den: %s\n" - -#: lib/x509/output.c:1753 -msgid "\tExtensions:\n" -msgstr "\tTillägg:\n" - -# Nummer? Antal? -#: lib/x509/output.c:1768 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tCRL-nummer (%s): " - -#: lib/x509/output.c:1791 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tUtfärdarens nyckelidentifierare (%s):\n" - -#: lib/x509/output.c:1804 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tOkänt tillägg %s (%s):\n" - -#: lib/x509/output.c:1854 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tSpärrade certifikat (%d):\n" - -#: lib/x509/output.c:1856 -msgid "\tNo revoked certificates.\n" -msgstr "\tInga spärrade certifikat.\n" - -#: lib/x509/output.c:1875 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tSerienummer (hex): " - -#: lib/x509/output.c:1884 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tSpärrat den: %s\n" - -#: lib/x509/output.c:1967 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "Information om spärrlista för X.509-certifikat:\n" - -#: lib/x509/output.c:2113 -msgid "\tAttributes:\n" -msgstr "\tAttribut:\n" - -#: lib/x509/output.c:2165 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "\t\tMotsvarslösenord: %s\n" - -#: lib/x509/output.c:2176 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tOkänt attribut %s:\n" - -#: lib/x509/output.c:2281 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "Information om begäran av PKCS #10-certifikat:\n" - -#~ msgid "The peer did not send any certificate." -#~ msgstr "Motparten skickade inget certifikat." - -#~ msgid "The initialization of GnuTLS-extra has failed." -#~ msgstr "Initieringen av GnuTLS-extra har misslyckats." - -#~ msgid "The GnuTLS library version does not match the GnuTLS-extra library version." -#~ msgstr "Versionen av GnuTLS-biblioteket stämmer inte överens med versionen av GnuTLS-extra-biblioteket." - -#~ msgid "The initialization of LZO has failed." -#~ msgstr "Initiering av LZO misslyckades." - -#~ msgid "The handshake data size is too large (DoS?), check gnutls_handshake_set_max_packet_length()." -#~ msgstr "Datastorleken för handskakningen är för stor (DoS?), kontrollera gnutls_handshake_set_max_packet_length()." - -#~ msgid "Inner application negotiation failed" -#~ msgstr "Förhandling för inre program misslyckades" - -#~ msgid "Inner application verification failed" -#~ msgstr "Validering av inre program misslyckades" - -#~ msgid "The specified GnuPG TrustDB version is not supported. TrustDB v4 is supported." -#~ msgstr "Den angivna GnuPG TrustDB-versionen stöds inte. TrustDB v4 stöds." - -#~ msgid "\t\t\tPolicy Language: %.*s\n" -#~ msgstr "\t\t\tPolicyspråk: %.*s\n" diff --git a/po/uk.po.in b/po/uk.po.in deleted file mode 100644 index 5310bf4d54..0000000000 --- a/po/uk.po.in +++ /dev/null @@ -1,1502 +0,0 @@ -# Translation of libgnutls to Ukrainian -# -# Copyright (C) 2011 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# -# Yuri Chornoivan , 2011, 2012, 2013. -msgid "" -msgstr "" -"Project-Id-Version: libgnutls 3.2.1\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-05-29 19:03+0200\n" -"PO-Revision-Date: 2013-06-13 19:14+0300\n" -"Last-Translator: Yuri Chornoivan \n" -"Language-Team: Ukrainian \n" -"Language: uk\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.5\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "Закрити сповіщення" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "Неочікуване повідомлення" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "Помилковий запис MAC" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "Спроба розшифрування зазнала невдачі" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "Переповнення запису" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "Помилка під час спроби видобування" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "Помилка під час спроби встановлення з’єднання" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "Помилковий сертифікат" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "Підтримки сертифіката не передбачено" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "Сертифікат відкликано" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "Сертифікат втратив чинність" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "Невідомий сертифікат" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "Некоректний параметр" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "Невідома служба сертифікації (CA)" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "Доступ заборонено" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "Помилка декодування" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "Помилка дешифрування" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "Обмеження експортування" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "Помилка у версії протоколу" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "Недостатній захист" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "Скасовано користувачем" - -#: lib/gnutls_alert.c:65 -msgid "No certificate (SSL 3.0)" -msgstr "Немає сертифіката (SSL 3.0)" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "Внутрішня помилка" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "Повторне узгодження заборонено" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "Не вдалося отримати вказаний сертифікат" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "Надіслано непідтримуване розширення" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "Не вдалося розпізнати назву сервера" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "Не вказано імені користувача SRP/PSK або вказано невідоме ім’я" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "Не вдалося узгодити підтримуваний протокол прикладного рівня" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Успіх." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Не вдалося узгодити підтримуваний комплекс шифрування." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "Було встановлено недостатні рівні пріоритетності або не було встановлено жодних рівнів." - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "Тип шифрування не підтримується." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "Сертифікат і вказаний ключ не відповідають один одному." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Не вдалося узгодити підтримуваний спосіб стискання." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "Виявлено невідомий алгоритм роботи з відкритим ключем." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "Узгоджено алгоритм, який не було увімкнено." - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "Отримано пакет записів з некоректною версією." - -#: lib/gnutls_errors.c:70 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "Надіслане сервером просте число Діффі-Гелмана є неприйнятним (занадто коротким)." - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "Було отримано пакет TLS з неочікуваною довжиною." - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "З’єднання TLS було розірвано неналежним чином." - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "Вказаний сеанс з якихось причин втратив чинність." - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "Внутрішня помилка GnuTLS." - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "Отримано некоректне розширення TLS." - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "Отримано критичне попередження TLS." - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "Було отримано неочікуваний пакет TLS" - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "Отримано попередження TLS." - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "Під час спроби обчислення остаточного пакета TLS сталася помилка." - -#: lib/gnutls_errors.c:92 -msgid "No certificate was found." -msgstr "Не знайдено жодного сертифіката." - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "Вказаний ключ DSA key є несумісним з вибраним протоколом TLS." - -#: lib/gnutls_errors.c:96 -msgid "A heartbeat pong message was received." -msgstr "Отримано повідомлення-відповідь підтримування зв’язку." - -#: lib/gnutls_errors.c:98 -msgid "A heartbeat ping message was received." -msgstr "Отримано вхідне повідомлення підтримування зв’язку." - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Алгоритм шифрування з нижчим пріоритетом вже існує." - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "Не було виявлено тимчасових параметрів RSA." - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "Не було виявлено тимчасових параметрів DH." - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "Було отримано неочікуваний пакет даних підтвердження з’єднання TLS." - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "Спроба сканування великого цілого числа зазнала невдачі." - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "Не вдалося експортувати велике ціле число." - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "Спроба розшифрування була невдалою." - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "Спроба шифрування зазнала невдачі." - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "Не вдалося дешифрувати відкритим ключем." - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "Не вдалося зашифрувати відкритим ключем." - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "Не вдалося підписати відкритим ключем." - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "Не вдалося перевірити підпис відкритим ключем." - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "Не вдалося розпакувати пакет записів TLS." - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "Не вдалося запакувати пакет записів TLS." - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "Внутрішня помилка під час розподілу пам’яті." - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "Надійшов запит щодо нереалізованої або вимкненої можливості." - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "Недостатні реєстраційні дані для цього запиту." - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "Помилка у файлі паролів." - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "Помилкове доповнення у пакеті PKCS1." - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "Строк дії запитаного сеансу завершено." - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "Помилка хешування." - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Помилка декодування даних Base64." - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "Неочікуваний заголовок даних Base64." - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Помилка кодування даних Base64." - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "Помилка під час спроби обробки даних файла паролів." - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "Запитані дані недоступні." - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "Помилка у функції pull." - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "Помилка у функції push." - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "Досягнуто верхньої межі послідовності чисел пакета записів. Ого!" - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "Помилка у сертифікаті." - -#: lib/gnutls_errors.c:157 -msgid "Could not authenticate peer." -msgstr "Не вдалося розпізнати рівноправний вузол." - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "Невідомий запис альтернативного призначення (Subject Alternative) у сертифікаті X.509." - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Непідтримуване важливе розширення у сертифікаті X.509." - -#: lib/gnutls_errors.c:164 -msgid "Unsupported extension in X.509 certificate." -msgstr "Непідтримуване розширення у сертифікаті X.509." - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "Виявлено порушення правил використання ключів сертифіката." - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "Ресурс тимчасово недоступний, повторіть спробу." - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "Переданий пакет є надто великим (EMSGSIZE)." - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "Роботу функції було перервано." - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "Вузол надіслав запит на повторне надсилання даних підтвердження з’єднання." - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "Було отримано дані застосування TLS, слід було отримати дані підтвердження з’єднання." - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "Помилка у сервері бази даних." - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "Підтримки сертифікатів такого типу не передбачено." - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "Вказаний буфер пам’яті є занадто малим для зберігання параметрів." - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "Некоректний запит." - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "Помилкова кука." - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "Отримано некоректний параметр." - -#: lib/gnutls_errors.c:187 -msgid "An illegal parameter was found." -msgstr "Виявлено некоректний параметр." - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "Помилка читання файла." - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "Обробка ASN1: елемент не знайдено." - -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "Обробка ASN1: ідентифікатор не знайдено" - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "Обробка ASN1: помилка під час обробки DER." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "Обробка ASN1: значення не знайдено." - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "Обробка ASN1: загальна помилка обробки." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "Обробка ASN1: некоректне значення." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "Обробка ASN1: помилка у тезі (TAG)." - -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "Обробка ASN1: помилка у неявному тезі" - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "Обробка ASN1: помилка у типі 'ANY'." - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "Обробка ASN1: синтаксична помилка." - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "Обробка ASN1: переповнення під час обробки DER." - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "Було отримано занадто багато порожніх пакетів записів." - -#: lib/gnutls_errors.c:215 -msgid "Too many handshake packets have been received." -msgstr "Було отримано занадто багато пакетів встановлення з’єднання." - -#: lib/gnutls_errors.c:217 -msgid "The crypto library version is too old." -msgstr "Бібліотека шифрування є занадто старою." - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "У вас встановлено занадто стару версію бібліотеки tasn1." - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "Ідентифікатор користувача OpenPGP відкликано." - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "Ключ OpenPGP не пов’язано з основним набором ключів." - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "Помилка під час спроби завантаження даних сховища ключів." - -#: lib/gnutls_errors.c:228 -msgid "The initialization of crypto backend has failed." -msgstr "Не вдалося ініціалізувати сервер шифрування." - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "Не виявлено підтримуваних алгоритмів стискання." - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "Не виявлено підтримуваних комплексів програм для шифрування." - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "Не вдалося отримати ключ OpenPGP." - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "Не вдалося знайти підключ OpenPGP." - -#: lib/gnutls_errors.c:238 -msgid "Safe renegotiation failed." -msgstr "Спроба захищеного повторного узгодження зазнала невдачі." - -#: lib/gnutls_errors.c:240 -msgid "Unsafe renegotiation denied." -msgstr "Незахищене повторне узгодження заборонено." - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "Вказане ім’я користувача SRP є некоректним." - -#: lib/gnutls_errors.c:245 -msgid "The SRP username supplied is unknown." -msgstr "Вказане ім’я користувача SRP є невідомим." - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "Підтримки такого відбитка OpenPGP не передбачено." - -#: lib/gnutls_errors.c:250 -msgid "The signature algorithm is not supported." -msgstr "Підтримки цього алгоритму підписування не передбачено." - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "Цей сертифікат має непідтримувані атрибути." - -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "Підтримки цього OID не передбачено." - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "Невідомий алгоритм хешування." - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "Невідомий тип вмісту структури PKCS." - -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "Невідомий тип мультимножини структури PKCS." - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "У вказаному паролі містяться некоректні символи." - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "Спроба перевірки коду розпізнавання повідомлення була невдалою." - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "Досягнуто деяких граничних обмежень." - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "Не вдалося отримати випадкові дані." - -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "Отримано повідомлення щодо завершення проміжної фази TLS/IA" - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "Отримано повідомлення щодо завершення остаточної фази TLS/IA" - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "Помилка під час перевірки контрольної суми фази TLS/IA" - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "Вказано невідомий алгоритм або протокол." - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "Розмір даних щодо встановлення з’єднання є занадто великим." - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "Не вдалося відкрити /dev/crypto" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "Не вдалося розпочати взаємодію з /dev/crypto" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "З’єднання розірвано рівноправним вузлом" - -#: lib/gnutls_errors.c:291 -msgid "Channel binding data not available" -msgstr "Дані прив’язки каналів недоступні" - -#: lib/gnutls_errors.c:294 -msgid "TPM error." -msgstr "Помилка TPM." - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "TPM не ініціалізовано." - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "У постійному сховищі не було знайдено ключа TPM." - -#: lib/gnutls_errors.c:300 -msgid "Cannot initialize a session with the TPM." -msgstr "Не вдалося ініціалізувати сеанс за допомогою цього TPM." - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error." -msgstr "Помилка PKCS #11." - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "Помилка ініціалізації PKCS #11." - -#: lib/gnutls_errors.c:306 -msgid "Error in parsing." -msgstr "Помилка під час обробки." - -#: lib/gnutls_errors.c:308 -msgid "Error in provided PIN." -msgstr "Помилка у наданому PIN." - -#: lib/gnutls_errors.c:310 -msgid "Error in provided SRK password for TPM." -msgstr "Помилка у наданому паролі SRK до TPM." - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "Помилка у наданому паролі до ключа, який має бути завантажено у TPM." - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "Помилка у слоті PKCS #11" - -#: lib/gnutls_errors.c:316 -msgid "Thread locking error" -msgstr "Помилка блокування потоку виконання" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "Помилка у атрибуті PKCS #11" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "Помилка у пристрої PKCS #11" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "Помилка у даних PKCS #11" - -#: lib/gnutls_errors.c:324 -msgid "PKCS #11 unsupported feature" -msgstr "Непідтримувана можливість PKCS #11" - -#: lib/gnutls_errors.c:326 -msgid "PKCS #11 error in key" -msgstr "Помилка у ключі PKCS #11" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "Пін-код PKCS #11 втратив чинність" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "Пін-код PKCS #11 заблоковано" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "Помилка у сеансі PKCS #11" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "Помилка у підписі PKCS #11" - -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "Помилка у лексемі PKCS #11" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "Помилка користувача PKCS #11" - -#: lib/gnutls_errors.c:340 -msgid "The operation timed out" -msgstr "Перевищено час очікування завершення дії" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "Дію було скасовано через помилку користувача" - -#: lib/gnutls_errors.c:344 -msgid "No supported ECC curves were found" -msgstr "Не виявлено підтримуваних кривих ECC" - -#: lib/gnutls_errors.c:346 -msgid "The curve is unsupported" -msgstr "Підтримки цієї кривої не передбачено" - -#: lib/gnutls_errors.c:348 -msgid "The requested PKCS #11 object is not available" -msgstr "Запитаний об’єкт PKCS #11 недоступний" - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "Наданий список сертифікатів X.509 не впорядковано (за призначенням, потім видавцем)" - -#: lib/gnutls_errors.c:352 -msgid "The OCSP response is invalid" -msgstr "Відповідь OCSP є некоректною" - -#: lib/gnutls_errors.c:354 -msgid "There is no certificate status (OCSP)." -msgstr "Немає стану сертифіката (OCSP)." - -#: lib/gnutls_errors.c:356 -msgid "Error in the system's randomness device." -msgstr "Помилка у пристрої породження псевдовипадкових чисел системи." - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "Не вдалося узгодити загальний протокол прикладного рівня." - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(невідомий код помилки)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\tВикористання ключа:\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "помилка: get_key_usage: %s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tЦифрові підписи.\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tШифрування обміну даними.\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tШифрування даних у сховищах.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tРозпізнавання.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tПідписування сертифікатів.\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tІд. (шіст.): " - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\tВідбиток (шіст.): " - -#: lib/openpgp/output.c:126 -msgid "\tFingerprint's random art:\n" -msgstr "\tВипадкова схема відбитка:\n" - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\tВідкликано: так\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\tВідкликано: ні\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\tЧасові позначки:\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tСтворення: %s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tСтрок дії: не обмежено\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tСтрок дії: до %s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "невідомий" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tАлгоритм відкритого ключа: %s\n" - -#: lib/openpgp/output.c:219 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\tРівень захисту ключа: %s\n" - -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tОснова (%d-бітова):\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\tПоказник:\n" - -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tВідкритий ключ (%d-бітовий):\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tВерсія: %d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tІм’я[%d]: %s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tВідкликане ім’я[%d]: %s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tПідключ[%d]:\n" - -#: lib/openpgp/output.c:400 -#, c-format -msgid "name[%d]: %s, " -msgstr "ім’я[%d]: %s, " - -#: lib/openpgp/output.c:402 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "відкликане ім’я[%d]: %s, " - -#: lib/openpgp/output.c:422 -msgid "fingerprint: " -msgstr "відбиток: " - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "створено: %s, " - -#: lib/openpgp/output.c:452 -msgid "never expires, " -msgstr "строк дії не обмежено, " - -#: lib/openpgp/output.c:460 -#, c-format -msgid "expires: %s, " -msgstr "строк дії: до %s, " - -#: lib/openpgp/output.c:472 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "алгоритм ключа %s (%d-бітовий)" - -#: lib/openpgp/output.c:474 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "невідомий алгоритм ключа (%d)" - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "Дані щодо сертифіката OpenPGP:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\tШіст. дамп: " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "Дані запиту OCSP:\n" - -#: lib/x509/ocsp_output.c:298 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "\tІдентифікатор відповідача: %.*s\n" - -#: lib/x509/ocsp_output.c:316 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\tСтворення: %s\n" - -#: lib/x509/ocsp_output.c:410 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\tЧас відкликання: %s\n" - -#: lib/x509/ocsp_output.c:425 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\tЦе оновлення: %s\n" - -#: lib/x509/ocsp_output.c:440 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\tНаступне оновлення: %s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tАлгоритм підписування: %s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "попередження: signed використовує слабкий алгоритм підписування, який можна зламати.\n" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\tПідпис:\n" - -#: lib/x509/ocsp_output.c:619 -msgid "OCSP Response Information:\n" -msgstr "Дані відповіді OCSP:\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "попередження: altname містить вбудоване порожнє значення, замінюємо на '!'\n" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tОбмеження довжини шляху: %d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\tМова правил: %s" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\tПравила:\n" -"\t\t\t\tASCII: " - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\tШіст. дамп: " - -#: lib/x509/output.c:185 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\tСпосіб доступу: %.*s" - -#: lib/x509/output.c:428 -#, c-format -msgid "%sDigital signature.\n" -msgstr "%sЦифровий підпис.\n" - -#: lib/x509/output.c:430 -#, c-format -msgid "%sNon repudiation.\n" -msgstr "%sБез анулювання.\n" - -#: lib/x509/output.c:432 -#, c-format -msgid "%sKey encipherment.\n" -msgstr "%sШифрування ключа.\n" - -#: lib/x509/output.c:434 -#, c-format -msgid "%sData encipherment.\n" -msgstr "%sШифрування даних.\n" - -#: lib/x509/output.c:436 -#, c-format -msgid "%sKey agreement.\n" -msgstr "%sУзгодження ключів.\n" - -#: lib/x509/output.c:438 -#, c-format -msgid "%sCertificate signing.\n" -msgstr "%sПідписування сертифікатом.\n" - -#: lib/x509/output.c:440 -#, c-format -msgid "%sCRL signing.\n" -msgstr "%sПідписування CRL.\n" - -#: lib/x509/output.c:442 -#, c-format -msgid "%sKey encipher only.\n" -msgstr "%sЛише шифрування ключа.\n" - -#: lib/x509/output.c:444 -#, c-format -msgid "%sKey decipher only.\n" -msgstr "%sЛише розшифрування ключа.\n" - -#: lib/x509/output.c:482 -#, c-format -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\t\tНе раніше: %s\n" - -#: lib/x509/output.c:489 -#, c-format -msgid "\t\t\tNot After: %s\n" -msgstr "\t\t\tНе пізніше: %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "попередження: distributionPoint містить вбудоване порожнє значення, замінюємо на '!'\n" - -#: lib/x509/output.c:632 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tІнтернет-сервер TLS.\n" - -#: lib/x509/output.c:634 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tІнтернет-клієнт TLS.\n" - -#: lib/x509/output.c:636 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\tПідписування коду.\n" - -#: lib/x509/output.c:638 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tЗахист електронної пошти.\n" - -#: lib/x509/output.c:640 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\tЧасова позначка.\n" - -#: lib/x509/output.c:642 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tПідписування OCSP.\n" - -#: lib/x509/output.c:644 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIpsec IKE.\n" - -#: lib/x509/output.c:646 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\tДовільне призначення.\n" - -#: lib/x509/output.c:677 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\tСлужба сертифікації (CA): НІ\n" - -#: lib/x509/output.c:679 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\tСлужба сертифікації (CA): ТАК\n" - -#: lib/x509/output.c:682 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\tОбмеження довжини шляху: %d\n" - -#: lib/x509/output.c:814 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tАдреса XMPP: %.*s\n" - -#: lib/x509/output.c:819 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "%s\t\t\tOID іншого імені: %.*s\n" - -#: lib/x509/output.c:821 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "%s\t\t\tінше ім’я, DER: " - -#: lib/x509/output.c:823 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" -"\n" -"%s\t\t\tінше ім’я, ASCII: " - -#: lib/x509/output.c:945 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\tРозширення:\n" - -#: lib/x509/output.c:955 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\tОсновні обмеження (%s):\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "критична" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "не критична" - -#: lib/x509/output.c:970 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "%s\t\tІдентифікатор ключа призначення (%s):\n" - -#: lib/x509/output.c:1028 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "%s\t\tІдентифікатор ключа служби (%s):\n" - -#: lib/x509/output.c:1044 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\tВикористання ключа (%s):\n" - -#: lib/x509/output.c:1061 -#, c-format -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "%s\t\tПеріод використання закритого ключа (%s):\n" - -#: lib/x509/output.c:1076 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\tПризначення ключа (%s):\n" - -#: lib/x509/output.c:1090 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "%s\t\tІнше ім’я (назва) призначення (%s):\n" - -#: lib/x509/output.c:1105 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "%s\t\tІнше ім’я (назва) видавця (%s):\n" - -#: lib/x509/output.c:1120 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tТочки розповсюдження CRL (%s):\n" - -#: lib/x509/output.c:1135 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\tДані щодо проміжних сертифікатів (%s):\n" - -#: lib/x509/output.c:1145 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "%s\t\tДоступ до даних реєстратора (%s):\n" - -#: lib/x509/output.c:1157 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\tНевідоме розширення %s (%s):\n" - -#: lib/x509/output.c:1204 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII: " - -#: lib/x509/output.c:1208 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\tШіст. дамп: " - -#: lib/x509/output.c:1237 -#, c-format -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\t%sАлгоритм відкритого ключа: %s\n" - -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "\tРівень захисту алгоритму: %s (%d-бітовий)\n" - -#: lib/x509/output.c:1254 -#, c-format -msgid "\t\tModulus (bits %d): " -msgstr "\t\tОснова (%d-бітова): " - -#: lib/x509/output.c:1257 -#, c-format -msgid "\t\tExponent (bits %d): " -msgstr "\t\tПоказник (%d-бітовий): " - -#: lib/x509/output.c:1265 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tПоказник (%d-бітовий):\n" - -#: lib/x509/output.c:1286 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\tКрива:\t%s\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX: " - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY: " - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -#: lib/x509/output.c:1322 -#, c-format -msgid "\t\tPublic key (bits %d): " -msgstr "\t\tВідкритий ключ (%d-бітовий): " - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP: " - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ: " - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG: " - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -msgid "Subject " -msgstr "Призначення " - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\tСерійний номер (шіст.): " - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tВидавець: %s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\tЧинність:\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tНе раніше: %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tНе пізніше: %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\tПризначення: %s\n" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tКонтрольна сума MD5:\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tКонтрольна сума SHA-1:\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tІдент. відкритого ключа:\n" -"\t\t" - -#: lib/x509/output.c:1627 -msgid "\tPublic key's random art:\n" -msgstr "\tВипадкова схема відкритого ключа:\n" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "підписано за допомогою %s (слабкий!), " - -#: lib/x509/output.c:1725 -#, c-format -msgid "signed using %s, " -msgstr "підписано за допомогою %s, " - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "Дані щодо сертифікації X.509:\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "Інші дані:\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\tВерсія: 1 (типова)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\tДати оновлення:\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tВидано: %s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tНаступна: %s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\tРозширення:\n" - -#: lib/x509/output.c:2007 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tНомер CRL (%s): " - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tІдентифікатор ключа служби (%s):\n" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tНевідоме розширення %s (%s):\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tВідкликані сертифікати (%d):\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\tНемає відкликаних сертифікатів.\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tСерійний номер (шіст.): " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tВідкликано: %s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "Дані щодо списку відкликань сертифікатів X.509:\n" - -#: lib/x509/output.c:2315 -msgid "\tAttributes:\n" -msgstr "\tАтрибути:\n" - -#: lib/x509/output.c:2367 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "\t\tПароль виклику: %s\n" - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tНевідомий атрибут %s:\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "Дані щодо запиту сертифіката PKCS #10:\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "Використання відкритого ключа:\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "Ідент. відкритого ключа: " - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "Дані відкритого ключа:\n" - -#~ msgid "PKCS #11 error in PIN." -#~ msgstr "Помилка у пін-коді PKCS #11." - -#~ msgid "PKCS #11 PIN should be saved." -#~ msgstr "Пін-код PKCS #11 має бути збережено." - -#~ msgid "\tSubject Public Key Algorithm: %s\n" -#~ msgstr "\tАлгоритм відкритого ключа призначення: %s\n" - -#~ msgid "The peer did not send any certificate." -#~ msgstr "Вузлом не було надіслано жодного сертифіката." - -#~ msgid "The initialization of GnuTLS-extra has failed." -#~ msgstr "Не вдалося ініціалізувати GnuTLS-extra." - -#~ msgid "The GnuTLS library version does not match the GnuTLS-extra library version." -#~ msgstr "Версія бібліотеки GnuTLS є невідповідною до версії бібліотеки GnuTLS-extra." - -#~ msgid "The initialization of LZO has failed." -#~ msgstr "Не вдалося ініціалізувати LZO." - -#~ msgid "The handshake data size is too large (DoS?), check gnutls_handshake_set_max_packet_length()." -#~ msgstr "Розмір даних встановлення з’єднання є занадто великим (спроба атаки?), перевірте значення gnutls_handshake_set_max_packet_length()." - -#~ msgid "Inner application negotiation failed" -#~ msgstr "Помилка під час спроби встановлення зв’язку з внутрішньою програмою" - -#~ msgid "Inner application verification failed" -#~ msgstr "Спроба перевірки внутрішньої програми зазнала невдачі" diff --git a/po/vi.po.in b/po/vi.po.in deleted file mode 100644 index e36885619b..0000000000 --- a/po/vi.po.in +++ /dev/null @@ -1,1500 +0,0 @@ -# Vietnamese translation for LibGnuTLS. -# Copyright © 2013 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# Clytie Siddall , 2008-2010. -# Trần Ngọc Quân , 2012-2013. -# -msgid "" -msgstr "" -"Project-Id-Version: libgnutls-3.2.3\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-07-28 23:51+0200\n" -"PO-Revision-Date: 2013-08-06 07:13+0700\n" -"Last-Translator: Trần Ngọc Quân \n" -"Language-Team: Vietnamese \n" -"Language: vi\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Generator: Poedit 1.5.5\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "Đóng thông báo" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "Thông điệp bất thường" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "MAC bản ghi sai" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "Giải mã gặp lỗi" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "Tràn bản ghi" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "Gặp lỗi khi giải nén" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "Gặp lỗi khi thiết lập quan hệ" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "Chứng nhận sai" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "Chứng nhận không được hỗ trợ" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "Chứng nhận đã bị thu hồi" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "Chứng nhận đã hết hạn" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "Không nhận ra chứng nhận" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "Tham số không được phép" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "Không nhận ra nhà cầm quyền cấp chứng nhận (CA)" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "Truy cập bị từ chối" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "Lỗi giải mã" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "Lỗi giải mật mã" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "Hạn chế xuất ra" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "Lỗi trong phiên bản giao thức" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "Không đủ bảo mật" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "Người dùng đã hủy bỏ" - -#: lib/gnutls_alert.c:65 -msgid "No certificate (SSL 3.0)" -msgstr "Không có chứng nhận (SSL 3.0)" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "Lỗi nội bộ" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "Không cho phép thỏa thuận lại" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "Không thể lấy chứng nhận đã xác định" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "Đã gửi một phần mở rộng không được hỗ trợ" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "Đã gửi một tên máy phục vụ không được nhận ra" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "Tên người dùng SRP/PSK bị thiếu hay không được nhận ra" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "Không có giao thức ứng dụng được hỗ trợ nào được dàn xếp." - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "Thành công." - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "Không thể thỏa thuận một bộ ứng dụng mật mã được hỗ trợ." - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "Không có hay thiếu quyền ưu tiên được đặt." - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "Loại mật mã không được hỗ trợ." - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "Chứng nhận và khoá đã cho không tương ứng với nhau." - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "Không thể thỏa thuận một phương pháp nén được hỗ trợ." - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "Gặp phải một thuật toán khoá công không rõ." - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "Đã thỏa thuận một thuật toán chưa được bật." - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "Nhận được một gói tin bản ghi có phiên bản cấm." - -#: lib/gnutls_errors.c:70 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "Máy phục vụ đã gửi một số nguyên tố Diffie Hellman không thích hợp (không đủ dài)." - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "Nhận được một gói tin TLS có chiều dài bất thường." - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "Kết nối TLS đã không chấm dứt một cách đúng đắn." - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "Buổi hợp đã ghi rõ cũng bị tắt vì lý do nào." - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "Lỗi do GnuTLS." - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "Nhận được một phần mở rộng TLS cấm." - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "Nhận được một cảnh giác nghiêm trọng TLS." - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "Nhận được một gói tin TLS bất thường." - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "Nhận được một cảnh giác báo trước TLS." - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "Gặp lỗi trong phép tính gói tin đã kết thúc TLS." - -#: lib/gnutls_errors.c:92 -msgid "No certificate was found." -msgstr "Không tìm thấy chứng nhận nào." - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "Khoá DSA đưa ra thì không tương thích với giao thức TLS đã chọn." - -#: lib/gnutls_errors.c:96 -msgid "A heartbeat pong message was received." -msgstr "Đã nhận được tiếng vọng “pong”." - -#: lib/gnutls_errors.c:98 -msgid "A heartbeat ping message was received." -msgstr "Đã nhận được tiếng vọng “ping”." - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "Đã có một thuật toán mật mã có mức ưu tiên thấp hơn." - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "Không tìm thấy tham số RSA tạm thời." - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "Không tìm thấy tham số DH tạm thời." - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "Nhận được một gói tin thiết lập quan hệ TLS bất thường." - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "Lỗi quét một số nguyên lớn." - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "Không thể xuất ra một số nguyên lớn." - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "Giải mã gặp lỗi." - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "Mã hoá gặp lỗi." - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "Giải mật mã khoá công gặp lỗi." - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "Mã hoá khoá công gặp lỗi." - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "Ký khoá công gặp lỗi." - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "Xác minh chữ ký khoá công gặp lỗi." - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "Giải nén gói tin bản ghi TLS gặp lỗi." - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "Nén gói tin bản ghi TLS gặp lỗi." - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "Lỗi nội bộ trong khi cấp phát bộ nhớ." - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "Đã yêu cầu một tính năng bị tắt hoặc chưa được thực hiện." - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "Không đủ thông tin xác thực cho yêu cầu đó." - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "Có lỗi trong tập tin mật khẩu." - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "Sai phần đệm trong gói tin PKCS1." - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "Phiên làm việc đã yêu cầu đã hết hạn." - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "Băm dữ liệu gặp lỗi." - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Lỗi giải mã Base64." - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "Lỗi phần đầu bất thường Base64." - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Lỗi mã hoá Base64." - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "Lỗi ngữ pháp trong tập tin mật khẩu." - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "Đã yêu cầu dữ liệu không sẵn sàng." - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "Gặp lỗi trong hàm pull." - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "Gặp lỗi trong hàm push." - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "Mới tới giới hạn trên của số thứ tự gói tin bản ghi. Ái chà!" - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "Gặp lỗi trong chứng nhận." - -#: lib/gnutls_errors.c:157 -msgid "Could not authenticate peer." -msgstr "Không thể xác thực mạng ngang hàng." - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "Không rõ tên Chủ thể Xen kẽ trong chứng nhận X.509." - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "Gặp phần mở rộng nghiêm trọng không được hỗ trợ trong chứng nhận X.509." - -#: lib/gnutls_errors.c:164 -msgid "Unsupported extension in X.509 certificate." -msgstr "Gặp phần mở rộng chứng nhận X.509 không được hỗ trợ." - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "Đã phát hiện sự vi phạm cách sử dụng khoá trong chứng nhận." - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "Tài nguyên tạm thời không sẵn sàng, hãy thử lại." - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "Gói đã truyền là quá lớn (EMSGSIZE)." - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "Hàm đã bị ngắt." - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "Đồng đẳng đã yêu cầu thiết lập lại quan hệ." - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "Nhận được dữ liệu Ứng dụng TLS, trong khi đang đợi dữ liệu thiết lập quan hệ." - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "Gặp lỗi trong hậu phương cơ sở dữ liệu." - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "Loại chứng nhận không được hỗ trợ." - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "Đã đưa ra một vùng đệm bộ nhớ quá ngắn để chứa các tham số." - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "Yêu cầu không hợp lệ." - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "Cookie sai." - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "Nhận được một tham số cấm." - -#: lib/gnutls_errors.c:187 -msgid "An illegal parameter was found." -msgstr "Có tham số không hợp lệ được tìm thấy." - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "Gặp lỗi khi đọc tập tin." - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "Bộ phân tích ASN1: Không tìm thấy phần tử." - -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "Bộ phân tích ASN1: Không tìm thấy định danh." - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "Bộ phân tích ASN1: gặp lỗi khi phân tích ngữ cảnh DER." - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "Bộ phân tích ASN1: Không tìm thấy giá trị." - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "Bộ phân tích ASN1: Lỗi phân tích ngữ cảnh chung." - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "Bộ phân tích ASN1: Giá trị không hợp lệ." - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "Bộ phân tích ASN1: Gặp lỗi trong TAG (thẻ)." - -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "Bộ phân tích ASN1: Gặp lỗi trong thẻ dứt ẩn." - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "Bộ phân tích ASN1: Lỗi trong kiểu “ANY” (bất kỳ)." - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "Bộ phân tích ASN1: Lỗi cú pháp." - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "Bộ phân tích ASN1: Tràn trong phân tích DER." - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "Nhận được quá nhiều gói tin chứa bản ghi trống." - -#: lib/gnutls_errors.c:215 -msgid "Too many handshake packets have been received." -msgstr "Nhận được quá nhiều gói tin bắt tay." - -#: lib/gnutls_errors.c:217 -msgid "The crypto library version is too old." -msgstr "Phiên bản thư viện crypto quá cũ." - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "Phiên bản thư viện tasn1 quá cũ." - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "Mã số người dùng OpenPGP bị thu hồi." - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "Khoá OpenPGP không có tập hợp khoá được ưu tiên hơn." - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "Gặp lỗi khi nạp vòng khoá." - -#: lib/gnutls_errors.c:228 -msgid "The initialization of crypto backend has failed." -msgstr "Khởi tạo thư viện mã hoá crypto làm backend gặp lỗi." - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "Không tìm thấy thuật toán nén được hỗ trợ." - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "Không tìm thấy bộ ứng dụng mật mã được hỗ trợ." - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "Không thể lấy khoá OpenPGP." - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "Không tìm thấy khoá phụ OpenPGP." - -#: lib/gnutls_errors.c:238 -msgid "Safe renegotiation failed." -msgstr "Đàm-phán-lại an toàn gặp lỗi." - -#: lib/gnutls_errors.c:240 -msgid "Unsafe renegotiation denied." -msgstr "Đàm-phán-lại không an toàn bị từ chối" - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "Đã cung cấp một tên người dùng SRP cấm." - -#: lib/gnutls_errors.c:245 -msgid "The SRP username supplied is unknown." -msgstr "Tài khoản người dùng SRP đã áp dụng không được biết." - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "Dấu tay OpenPGP không phải được hỗ trợ." - -#: lib/gnutls_errors.c:250 -msgid "The signature algorithm is not supported." -msgstr "Thuật toán chữ ký không được hỗ trợ." - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "Chứng nhận có thuộc tính không được hỗ trợ." - -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "IOD không được hỗ trợ." - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "Không rõ thuật toán chuyển đổi chuỗi sang mẫu duy nhất (hash)." - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "Không rõ loại nội dung của cấu trúc PKCS." - -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "Không rõ loại bao của cấu trúc PKCS." - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "Đã đưa ra một mật khẩu chứa ký tự không hợp lệ." - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "Lỗi thẩm tra Mã Xác Thực Thông Điệp." - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "Đã tới một số giới hạn ràng buộc." - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "Lỗi lấy dữ liệu ngẫu nhiên. " - -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "Nhận được một thông điệp Giải đoạn TLS/IA Trung gian đã Kết thúc." - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "Nhận được một thông điệp Giải đoạn TLS/IA Cuối cùng đã Kết thúc." - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "Lỗi thẩm tra tổng kiểm của giải đoạn TLS/IA." - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "Không rõ thuật toán hoặc giao thức đã ghi rõ." - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "Kích thước dữ liệu bắt tay quá lớn." - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "Lỗi mở /dev/crypto" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "Lỗi giao diện với /dev/crypto" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "Mạng ngang hàng đã kết thúc kết nối" - -#: lib/gnutls_errors.c:291 -msgid "Channel binding data not available" -msgstr "Dữ liệu ràng buộc kênh không sẵn sàng" - -#: lib/gnutls_errors.c:294 -msgid "TPM error." -msgstr "lỗi TPM." - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "TPM chưa được khởi tạo." - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "Khóa TPM không tìm thấy tại kho lưu cố định." - -#: lib/gnutls_errors.c:300 -msgid "Cannot initialize a session with the TPM." -msgstr "Không thể khởi tạo một phiên với TPM." - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error." -msgstr "lỗi PKCS #11." - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "PKCS #11 lỗi khởi tạo." - -#: lib/gnutls_errors.c:306 -msgid "Error in parsing." -msgstr "Lỗi phân tích." - -#: lib/gnutls_errors.c:308 -msgid "Error in provided PIN." -msgstr "Lỗi trong PIN đã cung cấp." - -#: lib/gnutls_errors.c:310 -msgid "Error in provided SRK password for TPM." -msgstr "Lỗi trong mật khẩu SRK đã cung cấp cho TPM." - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "Lỗi trong mật khẩu được cung cấp cho khóa được tải trong TPM." - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "PKCS #11 lỗi trên khe" - -#: lib/gnutls_errors.c:316 -msgid "Thread locking error" -msgstr "lỗi khóa tuyến trình" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "PKCS #11 lỗi trên thuộc tính" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "PKCS #11 lỗi trên thiết bị" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "PKCS #11 lỗi dữ liệu" - -#: lib/gnutls_errors.c:324 -msgid "PKCS #11 unsupported feature" -msgstr "PKCS #11 đặc tính kỹ thuật không được hỗ trợ" - -#: lib/gnutls_errors.c:326 -msgid "PKCS #11 error in key" -msgstr "PKCS #11 lỗi trên khoá" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "PKCS #11 PIN hết hạn" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "PKCS #11 lỗi PIN bị khoá" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "PKCS #11 lỗi trên phiên" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "PKCS #11 lỗi trong chữ ký" - -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "PKCS #11 lỗi thẻ bài" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "PKCS #11 lỗi người dùng" - -#: lib/gnutls_errors.c:340 -msgid "The operation timed out" -msgstr "Thao tác bị lỗi quá thời gian" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "Thao tác bị huỷ bỏ bởi vì lỗi từ phía người dùng" - -#: lib/gnutls_errors.c:344 -msgid "No supported ECC curves were found" -msgstr "Không tìm thấy đường cong ECC được hỗ trợ" - -#: lib/gnutls_errors.c:346 -msgid "The curve is unsupported" -msgstr "Không hỗ trợ curve" - -#: lib/gnutls_errors.c:348 -msgid "The requested PKCS #11 object is not available" -msgstr "Đã yêu cầu đối tượng PKCS #11 là không sẵn sàng." - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "Danh sách giấy chứng thực X.509 đã cung cấp không được xắp xếp đúng (theo thứ tự từ chủ thể đến nhà phát hành)" - -#: lib/gnutls_errors.c:352 -msgid "The OCSP response is invalid" -msgstr "Đáp ứng OCSP không hợp lệ" - -#: lib/gnutls_errors.c:354 -msgid "There is no certificate status (OCSP)." -msgstr "Ở đây không có trạng thái chứng nhận (OCSP)." - -#: lib/gnutls_errors.c:356 -msgid "Error in the system's randomness device." -msgstr "Có lỗi trong thiết bị tạo số ngẫu nhiên của hệ thống." - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "Không có giao thức ứng dụng chung nào được dàn xếp." - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(không rõ mã lỗi)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\tCách dùng Khoá:\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "lỗi: get_key_usage: %s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\tChữ ký thuật số.\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\tMật mã hoá giao thông.\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\tMật mã hoá dữ liệu lưu trữ.\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\tXác thực.\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\tKý chứng nhận.\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tMã số (thập lục): " - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\tDấu vân tay (thập lục):" - -#: lib/openpgp/output.c:126 -msgid "\tFingerprint's random art:\n" -msgstr "Kỹ thuật Số ngẫu nhiên dành cho Dấu vân tay:\n" - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\tThu hồi: Đúng\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\tThu hồi: Sai\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\tDấu vết thời gian:\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\tTạo: %s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\tHết hạn: Không bao giờ\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\tHết hạn: %s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "không rõ" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\tThuật toán Khoá Công: %s\n" - -#: lib/openpgp/output.c:219 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\tMức độ Khoá Bảo mật: %s\n" - -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\tGiá trị tuyệt đối (%d bit):\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\tMũ:\n" - -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\tKhoá công (%d bit):\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\tPhiên bản %d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\tTên[%d]: %s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\tTên bị thu hồi [%d]: %s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\tKhoá phụ[%d]:\n" - -#: lib/openpgp/output.c:400 -#, c-format -msgid "name[%d]: %s, " -msgstr "tên[%d]: %s, " - -#: lib/openpgp/output.c:402 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "tên bị thu hồi[%d]: %s, " - -#: lib/openpgp/output.c:422 -msgid "fingerprint: " -msgstr "dấu vân tay: " - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "tạo ngày: %s, " - -#: lib/openpgp/output.c:452 -msgid "never expires, " -msgstr "không bao giờ hết hạn, " - -#: lib/openpgp/output.c:460 -#, c-format -msgid "expires: %s, " -msgstr "hết hạn: %s, " - -#: lib/openpgp/output.c:472 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "thuật toán khoá %s (%d bit)" - -#: lib/openpgp/output.c:474 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "không nhận ra thuật toán khoá (%d)" - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "Thông tin chứng nhận OpenPGP:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\tĐổ thập lục: " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "Thông tin OCSP yêu cầu:\n" - -#: lib/x509/ocsp_output.c:298 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "\tID đáp ứng: %.*s\n" - -#: lib/x509/ocsp_output.c:316 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\tDài quá tại: %s\n" - -#: lib/x509/ocsp_output.c:410 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\tThời gian huỷ bỏ: %s\n" - -#: lib/x509/ocsp_output.c:425 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\tCập nhật này: %s\n" - -#: lib/x509/ocsp_output.c:440 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\tCập nhật kế tiếp: %s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\tThuật toán Chữ ký: %s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "cảnh báo : đã ký dùng một thuật toán chữ ký bị hỏng có thể bị giả mạo.\n" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\tChữ ký:\n" - -#: lib/x509/ocsp_output.c:619 -msgid "OCSP Response Information:\n" -msgstr "Thông tin OCSP Đáp ứng:\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "cảnh báo: tên thay thế (altname) chứa một NUL nhúng, thay thế bằng một dấu chấm than “!”\n" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\tRàng buộc Chiều dài Đường dẫn: %d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\tNgôn ngữ Chính sách: %s" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\tChính sách:\n" -"\t\t\t\tASCII: " - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\tĐổ thập lục: " - -#: lib/x509/output.c:185 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\tPhương thức Truy cập: %.*s" - -#: lib/x509/output.c:428 -#, c-format -msgid "%sDigital signature.\n" -msgstr "%sChữ ký số.\n" - -#: lib/x509/output.c:430 -#, c-format -msgid "%sNon repudiation.\n" -msgstr "%sKhông từ chối.\n" - -#: lib/x509/output.c:432 -#, c-format -msgid "%sKey encipherment.\n" -msgstr "%sMã hoá khóa.\n" - -#: lib/x509/output.c:434 -#, c-format -msgid "%sData encipherment.\n" -msgstr "%sMã hoá dữ liệu.\n" - -#: lib/x509/output.c:436 -#, c-format -msgid "%sKey agreement.\n" -msgstr "%sChấp thuận khoá.\n" - -#: lib/x509/output.c:438 -#, c-format -msgid "%sCertificate signing.\n" -msgstr "%sKý chứng nhận.\n" - -#: lib/x509/output.c:440 -#, c-format -msgid "%sCRL signing.\n" -msgstr "Ký %sCRL.\n" - -#: lib/x509/output.c:442 -#, c-format -msgid "%sKey encipher only.\n" -msgstr "%sChỉ mã hoá khoá.\n" - -#: lib/x509/output.c:444 -#, c-format -msgid "%sKey decipher only.\n" -msgstr "%sChỉ giải mật mã khoá.\n" - -#: lib/x509/output.c:482 -#, c-format -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\t\tKhông trước: %s\n" - -#: lib/x509/output.c:489 -#, c-format -msgid "\t\t\tNot After: %s\n" -msgstr "\t\t\tKhông sau: %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "cảnh báo : distributionPoint (điểm phân phối) chứa một NUL nhúng thì thay thế bằng một dấu chấm than “!”\n" - -#: lib/x509/output.c:632 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tỨng dụng phục vụ WWW TLS.\n" - -#: lib/x509/output.c:634 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tỨng dụng khách WWW TLS.\n" - -#: lib/x509/output.c:636 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\tKý mã.\n" - -#: lib/x509/output.c:638 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tBảo vệ thư điện tử.\n" - -#: lib/x509/output.c:640 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\tGhi thời gian.\n" - -#: lib/x509/output.c:642 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tKý OCSP.\n" - -#: lib/x509/output.c:644 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIpsec IKE.\n" - -#: lib/x509/output.c:646 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\tBất cứ mục đích nào.\n" - -#: lib/x509/output.c:677 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\tNhà cầm quyền chứng nhận (CA): SAI\n" - -#: lib/x509/output.c:679 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\tNhà cầm quyền chứng nhận (CA): ĐÚNG\n" - -#: lib/x509/output.c:682 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\tRàng buộc Chiều dài Đường dẫn: %d\n" - -#: lib/x509/output.c:814 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tĐịa chỉ XMPP: %.*s\n" - -#: lib/x509/output.c:819 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "%s\t\t\tOID tên khác: %.*s\n" - -#: lib/x509/output.c:821 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "%s\t\t\tDER tên khác: " - -#: lib/x509/output.c:823 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" -"\n" -"%s\t\t\tASCII tên khác: " - -#: lib/x509/output.c:945 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\tPhần mở rộng:\n" - -#: lib/x509/output.c:955 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\tRàng buộc Cơ bản (%s):\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "hết hạn" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "chưa hết hạn" - -#: lib/x509/output.c:970 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "%s\tĐịnh danh Chủ thể Khoá (%s):\n" - -#: lib/x509/output.c:1028 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "%s\t\tĐịnh danh Nhà cầm quyền Khóa (%s):\n" - -#: lib/x509/output.c:1044 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\tSử dụng Khoá (%s):\n" - -#: lib/x509/output.c:1061 -#, c-format -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "%s\t\tChu kỳ Sử dụng Khóa Riêng (%s):\n" - -#: lib/x509/output.c:1076 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\tMục đích Khoá (%s):\n" - -#: lib/x509/output.c:1090 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "%s\t\tTên Xen kẽ Chủ thể (%s):\n" - -#: lib/x509/output.c:1105 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "%s\t\tTên Thay thế Nhà phát hành (%s):\n" - -#: lib/x509/output.c:1120 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tĐiểm phân phối CRL (%s):\n" - -#: lib/x509/output.c:1135 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\tThông tin Chứng nhận Ủy nhiệm (%s):\n" - -#: lib/x509/output.c:1145 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "%s\t\tTruy cập Thông tin Nhà chức trách (%s):\n" - -#: lib/x509/output.c:1157 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\tPhần mở rộng không được nhận ra %s (%s):\n" - -#: lib/x509/output.c:1204 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII: " - -#: lib/x509/output.c:1208 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\tĐổ thập lục: " - -#: lib/x509/output.c:1237 -#, c-format -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\t%sThuật toán Khoá Công: %s\n" - -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "\tMức An ninh Thuật toán: %s (%d bít)\n" - -#: lib/x509/output.c:1254 -#, c-format -msgid "\t\tModulus (bits %d): " -msgstr "\t\tGiá trị tuyệt đối (%d bit):" - -#: lib/x509/output.c:1257 -#, c-format -msgid "\t\tExponent (bits %d): " -msgstr "\t\tMũ (%d bit): " - -#: lib/x509/output.c:1265 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\tMũ (%d bit):\n" - -#: lib/x509/output.c:1286 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\tĐặc tuyến:\t%s\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX: " - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY: " - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -#: lib/x509/output.c:1322 -#, c-format -msgid "\t\tPublic key (bits %d): " -msgstr "\t\tKhoá công (%d bít): " - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP: " - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ: " - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG: " - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -msgid "Subject " -msgstr "Chủ thể " - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\tSố sản xuất (thập lục): " - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\tNơi cấp: %s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\tCó hiệu lực:\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\tKhông trước: %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\tKhông sau: %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\tChủ thể: %s\n" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tDấu tay MD5:\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tDấu vân tay SHA1:\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\tMã số Khoá Công:\n" -"\t\t" - -#: lib/x509/output.c:1627 -msgid "\tPublic key's random art:\n" -msgstr "\t\tKỹ thuật Số ngẫu nhiên dành cho Khoá công:\n" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "đã ký dùng %s (bị hỏng!), " - -#: lib/x509/output.c:1725 -#, c-format -msgid "signed using %s, " -msgstr "đã ký dùng %s, " - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "Thông tin Chứng nhận X.509:\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "Thông tin khác:\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\tPhiên bản: 1 (mặc định)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\tNgày cập nhật:\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\tCấp: %s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\tLần sau vào : %s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\tPhần mở rộng:\n" - -#: lib/x509/output.c:2007 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tSố CRL (%s): " - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\tĐịnh danh Nhà cầm quyền Khoá (%s):\n" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\tKhông hiểu phần mở rộng %s (%s):\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\tChứng nhận bị thu hồi (%d):\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\tKhông có chứng nhận bị thu hồi.\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\tSố sê-ri (thập lục phân): " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\tĐược thu hồi vào: %s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "Danh sách Thu hồi Chứng nhận X.509:\n" - -#: lib/x509/output.c:2315 -msgid "\tAttributes:\n" -msgstr "\tThuộc tính:\n" - -#: lib/x509/output.c:2367 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "\t\tMật khẩu yêu cầu: %s\n" - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\tKhông nhận ra thuộc tính %s:\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "Thông tin Yêu cầu Chứng nhận PKCS #10:\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "Cách dùng Khoá Công:\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "Mã số ID Khoá Công: " - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "Thông tin Khóa Công:\n" - -#~ msgid "PKCS #11 error in PIN." -#~ msgstr "PKCS #11 lỗi trên PIN." - -#~ msgid "PKCS #11 PIN should be saved." -#~ msgstr "PKCS #11 PIN nên được ghi lại." - -#~ msgid "\tSubject Public Key Algorithm: %s\n" -#~ msgstr "\tThuật toán Khoá Công Người dân: %s\n" - -#~ msgid "The peer did not send any certificate." -#~ msgstr "Đồng đẳng chưa gửi chứng nhận." - -#~ msgid "The initialization of GnuTLS-extra has failed." -#~ msgstr "Lỗi sơ khởi GnuTLS-extra." - -#~ msgid "The GnuTLS library version does not match the GnuTLS-extra library version." -#~ msgstr "Phiên bản thư viện GnuTLS không tương ứng với phiên bản thư viện GnuTLS-extra." - -#~ msgid "The handshake data size is too large (DoS?), check gnutls_handshake_set_max_packet_length()." -#~ msgstr "Dữ liệu thiết lập quan hệ có kích cỡ quá lớn (DoS?), hãy kiểm tra lại gnutls_handshake_set_max_packet_length()." - -#~ msgid "Inner application negotiation failed" -#~ msgstr "Lỗi thỏa thuận ứng dụng bên trong" - -#~ msgid "Inner application verification failed" -#~ msgstr "Không thẩm tra được ứng dụng bên trong" diff --git a/po/zh_CN.po.in b/po/zh_CN.po.in deleted file mode 100644 index 3ee6d8c385..0000000000 --- a/po/zh_CN.po.in +++ /dev/null @@ -1,1496 +0,0 @@ -# Simplified Chinese translation for libgnutls -# Copyright (C) 2009 Free Software Foundation, Inc. -# This file is distributed under the same license as the libgnutls package. -# Tao Wei , 2008. -# Aron Xu , 2009. -# Tianze Wang , 2015. -# Mingye Wang , 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: libgnutls 3.2.3\n" -"Report-Msgid-Bugs-To: bug-gnutls@gnu.org\n" -"POT-Creation-Date: 2013-07-28 23:51+0200\n" -"PO-Revision-Date: 2015-11-10 09:47-0500\n" -"Last-Translator: Mingye Wang (Arthur2e5) \n" -"Language-Team: Chinese (simplified) \n" -"Language: zh_CN\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.8.6\n" - -#: lib/gnutls_alert.c:44 -msgid "Close notify" -msgstr "关闭通知" - -#: lib/gnutls_alert.c:45 -msgid "Unexpected message" -msgstr "未预料的消息" - -#: lib/gnutls_alert.c:46 -msgid "Bad record MAC" -msgstr "记录 MAC 有误" - -#: lib/gnutls_alert.c:47 -msgid "Decryption failed" -msgstr "解密失败" - -#: lib/gnutls_alert.c:48 -msgid "Record overflow" -msgstr "记录溢出" - -#: lib/gnutls_alert.c:49 -msgid "Decompression failed" -msgstr "解压缩失败" - -#: lib/gnutls_alert.c:50 -msgid "Handshake failed" -msgstr "握手失败" - -#: lib/gnutls_alert.c:51 -msgid "Certificate is bad" -msgstr "证书有误" - -#: lib/gnutls_alert.c:52 -msgid "Certificate is not supported" -msgstr "证书不被支持" - -#: lib/gnutls_alert.c:53 -msgid "Certificate was revoked" -msgstr "证书已吊销" - -#: lib/gnutls_alert.c:54 -msgid "Certificate is expired" -msgstr "证书过期" - -#: lib/gnutls_alert.c:55 -msgid "Unknown certificate" -msgstr "未知证书" - -#: lib/gnutls_alert.c:56 -msgid "Illegal parameter" -msgstr "非法参数" - -#: lib/gnutls_alert.c:57 -msgid "CA is unknown" -msgstr "未知 CA" - -#: lib/gnutls_alert.c:58 -msgid "Access was denied" -msgstr "访问被拒绝" - -#: lib/gnutls_alert.c:59 -msgid "Decode error" -msgstr "解码错误" - -#: lib/gnutls_alert.c:60 -msgid "Decrypt error" -msgstr "解密出错" - -#: lib/gnutls_alert.c:61 -msgid "Export restriction" -msgstr "导出受限" - -#: lib/gnutls_alert.c:62 -msgid "Error in protocol version" -msgstr "协议版本出错" - -#: lib/gnutls_alert.c:63 -msgid "Insufficient security" -msgstr "不够安全" - -#: lib/gnutls_alert.c:64 -msgid "User canceled" -msgstr "用户已取消" - -#: lib/gnutls_alert.c:65 -msgid "No certificate (SSL 3.0)" -msgstr "无证书(SSL 3.0)" - -#: lib/gnutls_alert.c:66 -msgid "Internal error" -msgstr "内部错误" - -#: lib/gnutls_alert.c:67 -msgid "No renegotiation is allowed" -msgstr "不允许二次协商" - -#: lib/gnutls_alert.c:69 -msgid "Could not retrieve the specified certificate" -msgstr "无法获取指定的证书" - -#: lib/gnutls_alert.c:70 -msgid "An unsupported extension was sent" -msgstr "发送了一个不支持的扩展" - -#: lib/gnutls_alert.c:72 -msgid "The server name sent was not recognized" -msgstr "发送的服务器名未被识别" - -#: lib/gnutls_alert.c:74 -msgid "The SRP/PSK username is missing or not known" -msgstr "SRP/PSK 用户名丢失或未知" - -#: lib/gnutls_alert.c:76 -msgid "No supported application protocol could be negotiated" -msgstr "没有可用于协商的应用程序协议" - -#: lib/gnutls_errors.c:51 -msgid "Success." -msgstr "成功。" - -#: lib/gnutls_errors.c:52 -msgid "Could not negotiate a supported cipher suite." -msgstr "无法协商受支持的密码算法。" - -#: lib/gnutls_errors.c:54 -msgid "No or insufficient priorities were set." -msgstr "未设置优先级,或优先级不够高。" - -#: lib/gnutls_errors.c:56 -msgid "The cipher type is unsupported." -msgstr "密码类型不支持。" - -#: lib/gnutls_errors.c:58 -msgid "The certificate and the given key do not match." -msgstr "证书与密钥不匹配。" - -#: lib/gnutls_errors.c:60 -msgid "Could not negotiate a supported compression method." -msgstr "无法协商支持的压缩方法。" - -#: lib/gnutls_errors.c:62 -msgid "An unknown public key algorithm was encountered." -msgstr "遇到未知的公钥算法。" - -#: lib/gnutls_errors.c:65 -msgid "An algorithm that is not enabled was negotiated." -msgstr "协商的算法未启用。" - -#: lib/gnutls_errors.c:67 -msgid "A record packet with illegal version was received." -msgstr "收到的记录包版本非法。" - -#: lib/gnutls_errors.c:70 -msgid "The Diffie-Hellman prime sent by the server is not acceptable (not long enough)." -msgstr "无法接受服务器发送的 Diffie-Hellman 素数(长度不够)。" - -#: lib/gnutls_errors.c:72 -msgid "A TLS packet with unexpected length was received." -msgstr "收到了未预期长度的 TLS 数据包。" - -#: lib/gnutls_errors.c:74 -msgid "The TLS connection was non-properly terminated." -msgstr "TLS 链接非正常地终止了。" - -#: lib/gnutls_errors.c:77 -msgid "The specified session has been invalidated for some reason." -msgstr "指定的会话已因故失效。" - -#: lib/gnutls_errors.c:80 -msgid "GnuTLS internal error." -msgstr "GnuTLS 内部错误。" - -#: lib/gnutls_errors.c:81 -msgid "An illegal TLS extension was received." -msgstr "收到一个非法的 TLS 扩展包。" - -#: lib/gnutls_errors.c:83 -msgid "A TLS fatal alert has been received." -msgstr "收到一个 TLS 致命错误警告。" - -#: lib/gnutls_errors.c:85 -msgid "An unexpected TLS packet was received." -msgstr "收到一个未预期的 TLS 数据包。" - -#: lib/gnutls_errors.c:87 -msgid "A TLS warning alert has been received." -msgstr "收到一个 TLS 警告信息。" - -#: lib/gnutls_errors.c:90 -msgid "An error was encountered at the TLS Finished packet calculation." -msgstr "在完成 TLS 数据包计算时出错。" - -#: lib/gnutls_errors.c:92 -msgid "No certificate was found." -msgstr "找不到证书。" - -#: lib/gnutls_errors.c:94 -msgid "The given DSA key is incompatible with the selected TLS protocol." -msgstr "指定的DSA密钥与所选TLS协议不兼容。" - -#: lib/gnutls_errors.c:96 -msgid "A heartbeat pong message was received." -msgstr "收到了非常大的 pong(响应)消息。" - -#: lib/gnutls_errors.c:98 -msgid "A heartbeat ping message was received." -msgstr "收到了非常大的 ping(请求)消息。" - -#: lib/gnutls_errors.c:100 -msgid "There is already a crypto algorithm with lower priority." -msgstr "已经有一个低优先级的加密算法。" - -#: lib/gnutls_errors.c:103 -msgid "No temporary RSA parameters were found." -msgstr "未发现 RSA 临时参数。" - -#: lib/gnutls_errors.c:105 -msgid "No temporary DH parameters were found." -msgstr "未发现临时 DH 参数。" - -#: lib/gnutls_errors.c:107 -msgid "An unexpected TLS handshake packet was received." -msgstr "收到未预期的 TLS 握手数据包。" - -#: lib/gnutls_errors.c:109 -msgid "The scanning of a large integer has failed." -msgstr "大整数扫描失败。" - -#: lib/gnutls_errors.c:111 -msgid "Could not export a large integer." -msgstr "无法输出大整数。" - -#: lib/gnutls_errors.c:113 -msgid "Decryption has failed." -msgstr "解密失败。" - -#: lib/gnutls_errors.c:114 -msgid "Encryption has failed." -msgstr "加密失败。" - -#: lib/gnutls_errors.c:115 -msgid "Public key decryption has failed." -msgstr "公钥解密失败。" - -#: lib/gnutls_errors.c:117 -msgid "Public key encryption has failed." -msgstr "公钥加密失败。" - -#: lib/gnutls_errors.c:119 -msgid "Public key signing has failed." -msgstr "公钥签名失败。" - -#: lib/gnutls_errors.c:121 -msgid "Public key signature verification has failed." -msgstr "公钥签名验证失败。" - -#: lib/gnutls_errors.c:123 -msgid "Decompression of the TLS record packet has failed." -msgstr "TLS 记录数据包解压缩失败。" - -#: lib/gnutls_errors.c:125 -msgid "Compression of the TLS record packet has failed." -msgstr "TLS 记录数据包压缩失败。" - -#: lib/gnutls_errors.c:128 -msgid "Internal error in memory allocation." -msgstr "在分配内存时发生内部错误。" - -#: lib/gnutls_errors.c:130 -msgid "An unimplemented or disabled feature has been requested." -msgstr "所请求的特性尚未实现或已被禁用。" - -#: lib/gnutls_errors.c:132 -msgid "Insufficient credentials for that request." -msgstr "此请求的信任凭证不足。" - -#: lib/gnutls_errors.c:134 -msgid "Error in password file." -msgstr "密码文件错误。" - -#: lib/gnutls_errors.c:135 -msgid "Wrong padding in PKCS1 packet." -msgstr "PKC51 数据包填充错误。" - -#: lib/gnutls_errors.c:137 -msgid "The requested session has expired." -msgstr "请求的会话已过期。" - -#: lib/gnutls_errors.c:138 -msgid "Hashing has failed." -msgstr "散列运算失败。" - -#: lib/gnutls_errors.c:139 -msgid "Base64 decoding error." -msgstr "Base64 解码出错。" - -#: lib/gnutls_errors.c:141 -msgid "Base64 unexpected header error." -msgstr "Base64 头部出现未预期的错误。" - -#: lib/gnutls_errors.c:144 -msgid "Base64 encoding error." -msgstr "Base64 编码出错。" - -#: lib/gnutls_errors.c:146 -msgid "Parsing error in password file." -msgstr "密码文件解析出错。" - -#: lib/gnutls_errors.c:148 -msgid "The requested data were not available." -msgstr "请求的数据不可用。" - -#: lib/gnutls_errors.c:150 -msgid "Error in the pull function." -msgstr "在 pull 函数中出错。" - -#: lib/gnutls_errors.c:151 -msgid "Error in the push function." -msgstr "在 push 函数中出错。" - -#: lib/gnutls_errors.c:153 -msgid "The upper limit of record packet sequence numbers has been reached. Wow!" -msgstr "哦!记录数据包序列的上限值已到。" - -#: lib/gnutls_errors.c:155 -msgid "Error in the certificate." -msgstr "证书出错。" - -#: lib/gnutls_errors.c:157 -msgid "Could not authenticate peer." -msgstr "无法认证对方。" - -#: lib/gnutls_errors.c:159 -msgid "Unknown Subject Alternative name in X.509 certificate." -msgstr "X.509 证书中含有未知的主体代用名。" - -#: lib/gnutls_errors.c:162 -msgid "Unsupported critical extension in X.509 certificate." -msgstr "X.509 证书中含有不支持的关键性扩展。" - -#: lib/gnutls_errors.c:164 -msgid "Unsupported extension in X.509 certificate." -msgstr "X.509 证书中含有不支持的扩展。" - -#: lib/gnutls_errors.c:166 -msgid "Key usage violation in certificate has been detected." -msgstr "在证书中检测到违规的密钥用法。" - -#: lib/gnutls_errors.c:168 -msgid "Resource temporarily unavailable, try again." -msgstr "资源临时不可用,请重试。" - -#: lib/gnutls_errors.c:170 -msgid "The transmitted packet is too large (EMSGSIZE)." -msgstr "传送的包太大(EMSGSIZE)。" - -#: lib/gnutls_errors.c:172 -msgid "Function was interrupted." -msgstr "函数被中断。" - -#: lib/gnutls_errors.c:173 -msgid "Rehandshake was requested by the peer." -msgstr "按对方请求重新握手。" - -#: lib/gnutls_errors.c:176 -msgid "TLS Application data were received, while expecting handshake data." -msgstr "在期望接收 TLS 握手数据时接收到应用数据。" - -#: lib/gnutls_errors.c:178 -msgid "Error in Database backend." -msgstr "数据库后端出错。" - -#: lib/gnutls_errors.c:179 -msgid "The certificate type is not supported." -msgstr "不支持的证书类型。" - -#: lib/gnutls_errors.c:181 -msgid "The given memory buffer is too short to hold parameters." -msgstr "给待处理参数预留的内存缓冲区过短。" - -#: lib/gnutls_errors.c:183 -msgid "The request is invalid." -msgstr "请求无效。" - -#: lib/gnutls_errors.c:184 -msgid "The cookie was bad." -msgstr "cookie 有误。" - -#: lib/gnutls_errors.c:185 -msgid "An illegal parameter has been received." -msgstr "收到一个非法参数。" - -#: lib/gnutls_errors.c:187 -msgid "An illegal parameter was found." -msgstr "发现一个非法参数。" - -#: lib/gnutls_errors.c:189 -msgid "Error while reading file." -msgstr "读取文件时出错。" - -#: lib/gnutls_errors.c:191 -msgid "ASN1 parser: Element was not found." -msgstr "ASN1 解析器:找不到元素。" - -#: lib/gnutls_errors.c:193 -msgid "ASN1 parser: Identifier was not found" -msgstr "ASN1 解析器:找不到标识。" - -#: lib/gnutls_errors.c:195 -msgid "ASN1 parser: Error in DER parsing." -msgstr "ASN1 解析器:DER 解析时出错。" - -#: lib/gnutls_errors.c:197 -msgid "ASN1 parser: Value was not found." -msgstr "ASN1 解析器:找不到值。" - -#: lib/gnutls_errors.c:199 -msgid "ASN1 parser: Generic parsing error." -msgstr "ASN1 解析器:常规解析中出错。" - -#: lib/gnutls_errors.c:201 -msgid "ASN1 parser: Value is not valid." -msgstr "ASN1 解析器:无效的值。" - -#: lib/gnutls_errors.c:203 -msgid "ASN1 parser: Error in TAG." -msgstr "ASN1 解析器:标签中出错。" - -#: lib/gnutls_errors.c:204 -msgid "ASN1 parser: error in implicit tag" -msgstr "ASN1 解析器:隐式标签中出错。" - -#: lib/gnutls_errors.c:206 -msgid "ASN1 parser: Error in type 'ANY'." -msgstr "ASN1 解析器:“ANY”类型中出错。" - -#: lib/gnutls_errors.c:208 -msgid "ASN1 parser: Syntax error." -msgstr "ASN1 解析器:语法出错。" - -#: lib/gnutls_errors.c:210 -msgid "ASN1 parser: Overflow in DER parsing." -msgstr "ASN1 解析器:DER 解析中出现溢出。" - -#: lib/gnutls_errors.c:213 -msgid "Too many empty record packets have been received." -msgstr "收到了过多的空记录包。" - -#: lib/gnutls_errors.c:215 -msgid "Too many handshake packets have been received." -msgstr "收到了过多的握手包。" - -#: lib/gnutls_errors.c:217 -msgid "The crypto library version is too old." -msgstr "加密库的版本过旧。" - -#: lib/gnutls_errors.c:220 -msgid "The tasn1 library version is too old." -msgstr "tasn1 库的版本过旧。" - -#: lib/gnutls_errors.c:222 -msgid "The OpenPGP User ID is revoked." -msgstr "OpenPGP 用户 ID 已吊销。" - -#: lib/gnutls_errors.c:224 -msgid "The OpenPGP key has not a preferred key set." -msgstr "未给OpenPGP指定首选密钥。" - -#: lib/gnutls_errors.c:226 -msgid "Error loading the keyring." -msgstr "载入密钥环时出错。" - -#: lib/gnutls_errors.c:228 -msgid "The initialization of crypto backend has failed." -msgstr "加密后端初始化失败。" - -#: lib/gnutls_errors.c:230 -msgid "No supported compression algorithms have been found." -msgstr "找不到支持的压缩算法。" - -#: lib/gnutls_errors.c:232 -msgid "No supported cipher suites have been found." -msgstr "找不到支持的密码机制。" - -#: lib/gnutls_errors.c:234 -msgid "Could not get OpenPGP key." -msgstr "无法获得 OpenPGP 密钥。" - -#: lib/gnutls_errors.c:236 -msgid "Could not find OpenPGP subkey." -msgstr "找不到 OpenPGP 子密钥。" - -#: lib/gnutls_errors.c:238 -msgid "Safe renegotiation failed." -msgstr "二次安全协商失败。" - -#: lib/gnutls_errors.c:240 -msgid "Unsafe renegotiation denied." -msgstr "二次安全协商被拒绝。" - -#: lib/gnutls_errors.c:243 -msgid "The SRP username supplied is illegal." -msgstr "提供的 SRP 用户名非法。" - -#: lib/gnutls_errors.c:245 -msgid "The SRP username supplied is unknown." -msgstr "提供的 SRP 用户名未知。" - -#: lib/gnutls_errors.c:248 -msgid "The OpenPGP fingerprint is not supported." -msgstr "OpenPGP 指纹不被支持。" - -#: lib/gnutls_errors.c:250 -msgid "The signature algorithm is not supported." -msgstr "签名算法不被支持。" - -#: lib/gnutls_errors.c:252 -msgid "The certificate has unsupported attributes." -msgstr "证书中含有不支持的属性。" - -#: lib/gnutls_errors.c:254 -msgid "The OID is not supported." -msgstr "不支持 OID。" - -#: lib/gnutls_errors.c:256 -msgid "The hash algorithm is unknown." -msgstr "未知的散列算法。" - -#: lib/gnutls_errors.c:258 -msgid "The PKCS structure's content type is unknown." -msgstr "未知的 PKCS 内容类型结构。" - -#: lib/gnutls_errors.c:260 -msgid "The PKCS structure's bag type is unknown." -msgstr "未知的 PKCS 包类型结构。" - -#: lib/gnutls_errors.c:262 -msgid "The given password contains invalid characters." -msgstr "给出的密码中包含无效字符。" - -#: lib/gnutls_errors.c:264 -msgid "The Message Authentication Code verification failed." -msgstr "消息认证代码确认失败。" - -#: lib/gnutls_errors.c:266 -msgid "Some constraint limits were reached." -msgstr "已达到某些约束限定。" - -#: lib/gnutls_errors.c:268 -msgid "Failed to acquire random data." -msgstr "获取随机数据失败。" - -#: lib/gnutls_errors.c:271 -msgid "Received a TLS/IA Intermediate Phase Finished message" -msgstr "收到 TLS/IA 中间相位完成信息。" - -#: lib/gnutls_errors.c:273 -msgid "Received a TLS/IA Final Phase Finished message" -msgstr "收到 TLS/IA 末尾相位完成信息。" - -#: lib/gnutls_errors.c:275 -msgid "Verifying TLS/IA phase checksum failed" -msgstr "校验 TLS/IA 相位和失败。" - -#: lib/gnutls_errors.c:278 -msgid "The specified algorithm or protocol is unknown." -msgstr "指定的算法或协议未知。" - -#: lib/gnutls_errors.c:281 -msgid "The handshake data size is too large." -msgstr "握手数据的尺寸太大。" - -#: lib/gnutls_errors.c:284 -msgid "Error opening /dev/crypto" -msgstr "打开 /dev/crypto 时出错" - -#: lib/gnutls_errors.c:287 -msgid "Error interfacing with /dev/crypto" -msgstr "与 /dev/crypto 交互时出错" - -#: lib/gnutls_errors.c:289 -msgid "Peer has terminated the connection" -msgstr "对方终止了链接" - -#: lib/gnutls_errors.c:291 -msgid "Channel binding data not available" -msgstr "通道绑定的数据不可用" - -#: lib/gnutls_errors.c:294 -msgid "TPM error." -msgstr "TPM 错误。" - -#: lib/gnutls_errors.c:296 -msgid "TPM is not initialized." -msgstr "TPM 未初始化。" - -#: lib/gnutls_errors.c:298 -msgid "TPM key was not found in persistent storage." -msgstr "永久存储中找不到 TPM 密钥。" - -#: lib/gnutls_errors.c:300 -msgid "Cannot initialize a session with the TPM." -msgstr "无法用 TPM 初始化会话。" - -#: lib/gnutls_errors.c:302 -msgid "PKCS #11 error." -msgstr "PKCS #11 错误。" - -#: lib/gnutls_errors.c:304 -msgid "PKCS #11 initialization error." -msgstr "PKCS #11 初始化错误。" - -#: lib/gnutls_errors.c:306 -msgid "Error in parsing." -msgstr "解析错误。" - -#: lib/gnutls_errors.c:308 -msgid "Error in provided PIN." -msgstr "给定的 PIN 中有错。" - -#: lib/gnutls_errors.c:310 -msgid "Error in provided SRK password for TPM." -msgstr "用于 TPM 的 SRK 密码有错。" - -#: lib/gnutls_errors.c:312 -msgid "Error in provided password for key to be loaded in TPM." -msgstr "用于载入 TPM 的密钥密码有错。" - -#: lib/gnutls_errors.c:314 -msgid "PKCS #11 error in slot" -msgstr "PKCS #11 插槽错误" - -#: lib/gnutls_errors.c:316 -msgid "Thread locking error" -msgstr "锁定线程出错" - -#: lib/gnutls_errors.c:318 -msgid "PKCS #11 error in attribute" -msgstr "PKCS #11 属性错误" - -#: lib/gnutls_errors.c:320 -msgid "PKCS #11 error in device" -msgstr "PKCS #11 设备错误" - -#: lib/gnutls_errors.c:322 -msgid "PKCS #11 error in data" -msgstr "PKCS #11 数据错误" - -#: lib/gnutls_errors.c:324 -msgid "PKCS #11 unsupported feature" -msgstr "PKCS #11 属性不支持" - -#: lib/gnutls_errors.c:326 -msgid "PKCS #11 error in key" -msgstr "PKCS #11 密钥错误" - -#: lib/gnutls_errors.c:328 -msgid "PKCS #11 PIN expired" -msgstr "PKCS #11 PIN过期" - -#: lib/gnutls_errors.c:330 -msgid "PKCS #11 PIN locked" -msgstr "PKCS #11 PIN被锁定" - -#: lib/gnutls_errors.c:332 -msgid "PKCS #11 error in session" -msgstr "PKCS #11 会话错误" - -#: lib/gnutls_errors.c:334 -msgid "PKCS #11 error in signature" -msgstr "PKCS #11 签名错误" - -#: lib/gnutls_errors.c:336 -msgid "PKCS #11 error in token" -msgstr "PKCS #11 口令错误" - -#: lib/gnutls_errors.c:338 -msgid "PKCS #11 user error" -msgstr "PKCS #11 用户错误" - -#: lib/gnutls_errors.c:340 -msgid "The operation timed out" -msgstr "操作超时" - -#: lib/gnutls_errors.c:342 -msgid "The operation was cancelled due to user error" -msgstr "由于用户错误,操作被取消" - -#: lib/gnutls_errors.c:344 -msgid "No supported ECC curves were found" -msgstr "找不到支持的 ECC 曲线" - -#: lib/gnutls_errors.c:346 -msgid "The curve is unsupported" -msgstr "不支持该曲线" - -#: lib/gnutls_errors.c:348 -msgid "The requested PKCS #11 object is not available" -msgstr "请求的 PKCS #11 不可用" - -#: lib/gnutls_errors.c:350 -msgid "The provided X.509 certificate list is not sorted (in subject to issuer order)" -msgstr "提供的 X.509 证书列表未被排序(应当按照从“主题”到“发行者”的顺序)" - -#: lib/gnutls_errors.c:352 -msgid "The OCSP response is invalid" -msgstr "OCSP 响应无效" - -#: lib/gnutls_errors.c:354 -msgid "There is no certificate status (OCSP)." -msgstr "没有证书状态(OCSP)。" - -#: lib/gnutls_errors.c:356 -msgid "Error in the system's randomness device." -msgstr "系统随机化设备错误。" - -#: lib/gnutls_errors.c:358 -msgid "No common application protocol could be negotiated." -msgstr "没有可用于协商的通用应用程序协议。" - -#: lib/gnutls_errors.c:445 -msgid "(unknown error code)" -msgstr "(未知错误代码)" - -#: lib/openpgp/output.c:41 -msgid "\t\tKey Usage:\n" -msgstr "\t\t密钥用法:\n" - -#: lib/openpgp/output.c:50 -#, c-format -msgid "error: get_key_usage: %s\n" -msgstr "错误:get_key_usage:%s\n" - -#: lib/openpgp/output.c:55 -msgid "\t\t\tDigital signatures.\n" -msgstr "\t\t\t数字签名。\n" - -#: lib/openpgp/output.c:57 -msgid "\t\t\tCommunications encipherment.\n" -msgstr "\t\t\t通讯加密。\n" - -#: lib/openpgp/output.c:59 -msgid "\t\t\tStorage data encipherment.\n" -msgstr "\t\t\t存储数据加密。\n" - -#: lib/openpgp/output.c:61 -msgid "\t\t\tAuthentication.\n" -msgstr "\t\t\t认证。\n" - -#: lib/openpgp/output.c:63 -msgid "\t\t\tCertificate signing.\n" -msgstr "\t\t\t证书签名。\n" - -#: lib/openpgp/output.c:84 -msgid "\tID (hex): " -msgstr "\tID(hex): " - -#: lib/openpgp/output.c:109 -msgid "\tFingerprint (hex): " -msgstr "\t指纹(hex): " - -#: lib/openpgp/output.c:126 -msgid "\tFingerprint's random art:\n" -msgstr "\t指纹对应的随机图像:\n" - -#: lib/openpgp/output.c:144 -msgid "\tRevoked: True\n" -msgstr "\t是否被撤销:是\n" - -#: lib/openpgp/output.c:146 -msgid "\tRevoked: False\n" -msgstr "\t是否被撤销:没有\n" - -#: lib/openpgp/output.c:154 -msgid "\tTime stamps:\n" -msgstr "\t时间戳:\n" - -#: lib/openpgp/output.c:171 -#, c-format -msgid "\t\tCreation: %s\n" -msgstr "\t\t创建于:%s\n" - -#: lib/openpgp/output.c:185 -msgid "\t\tExpiration: Never\n" -msgstr "\t\t过期:永不过期\n" - -#: lib/openpgp/output.c:194 -#, c-format -msgid "\t\tExpiration: %s\n" -msgstr "\t\t过期:%s\n" - -#: lib/openpgp/output.c:216 lib/x509/ocsp_output.c:513 lib/x509/output.c:1233 -#: lib/x509/output.c:1532 lib/x509/output.c:1721 lib/x509/output.c:2143 -msgid "unknown" -msgstr "未知" - -#: lib/openpgp/output.c:218 -#, c-format -msgid "\tPublic Key Algorithm: %s\n" -msgstr "\t公钥算法:%s\n" - -#: lib/openpgp/output.c:219 -#, c-format -msgid "\tKey Security Level: %s\n" -msgstr "\t密钥安全级别:%s\n" - -#: lib/openpgp/output.c:240 lib/x509/output.c:1263 -#, c-format -msgid "\t\tModulus (bits %d):\n" -msgstr "\t\t模块(位 %d):\n" - -#: lib/openpgp/output.c:242 -msgid "\t\tExponent:\n" -msgstr "\t\t说明:\n" - -#: lib/openpgp/output.c:267 lib/x509/output.c:1337 -#, c-format -msgid "\t\tPublic key (bits %d):\n" -msgstr "\t\t公钥(位 %d):\n" - -#: lib/openpgp/output.c:269 lib/x509/output.c:1339 -msgid "\t\tP:\n" -msgstr "\t\tP:\n" - -#: lib/openpgp/output.c:271 lib/x509/output.c:1341 -msgid "\t\tQ:\n" -msgstr "\t\tQ:\n" - -#: lib/openpgp/output.c:273 lib/x509/output.c:1343 -msgid "\t\tG:\n" -msgstr "\t\tG:\n" - -#: lib/openpgp/output.c:304 lib/x509/ocsp_output.c:53 -#: lib/x509/ocsp_output.c:284 lib/x509/output.c:1392 lib/x509/output.c:1896 -#: lib/x509/output.c:2250 -#, c-format -msgid "\tVersion: %d\n" -msgstr "\t版本:%d\n" - -#: lib/openpgp/output.c:337 -#, c-format -msgid "\tName[%d]: %s\n" -msgstr "\t名字[%d]:%s\n" - -#: lib/openpgp/output.c:339 -#, c-format -msgid "\tRevoked Name[%d]: %s\n" -msgstr "\t吊销名称[%d]:%s\n" - -#: lib/openpgp/output.c:360 -#, c-format -msgid "" -"\n" -"\tSubkey[%d]:\n" -msgstr "" -"\n" -"\t子密钥[%d]:\n" - -#: lib/openpgp/output.c:400 -#, c-format -msgid "name[%d]: %s, " -msgstr "名称[%d]:%s, " - -#: lib/openpgp/output.c:402 -#, c-format -msgid "revoked name[%d]: %s, " -msgstr "吊销名称[%d]:%s," - -#: lib/openpgp/output.c:422 -msgid "fingerprint: " -msgstr "指纹:" - -#: lib/openpgp/output.c:442 -#, c-format -msgid "created: %s, " -msgstr "已创建:%s, " - -#: lib/openpgp/output.c:452 -msgid "never expires, " -msgstr "永不过期, " - -#: lib/openpgp/output.c:460 -#, c-format -msgid "expires: %s, " -msgstr "过期:%s, " - -#: lib/openpgp/output.c:472 -#, c-format -msgid "key algorithm %s (%d bits)" -msgstr "密钥算法 %s(%d 位)" - -#: lib/openpgp/output.c:474 -#, c-format -msgid "unknown key algorithm (%d)" -msgstr "未知密钥算法(%d)" - -#: lib/openpgp/output.c:515 -msgid "OpenPGP Certificate Information:\n" -msgstr "OpenPGP 证书信息:\n" - -#: lib/x509/ocsp_output.c:139 lib/x509/ocsp_output.c:487 -#: lib/x509/output.c:2073 lib/x509/output.c:2406 -msgid "\t\t\tASCII: " -msgstr "\t\t\tASCII: " - -#: lib/x509/ocsp_output.c:143 lib/x509/ocsp_output.c:491 -#: lib/x509/output.c:2077 lib/x509/output.c:2410 -msgid "\t\t\tHexdump: " -msgstr "\t\t\t十六进制转储: " - -#: lib/x509/ocsp_output.c:188 -msgid "OCSP Request Information:\n" -msgstr "OCSP 请求信息:\n" - -#: lib/x509/ocsp_output.c:298 -#, c-format -msgid "\tResponder ID: %.*s\n" -msgstr "\t响应者 ID:%.*s\n" - -#: lib/x509/ocsp_output.c:316 -#, c-format -msgid "\tProduced At: %s\n" -msgstr "\t\t产生于:%s\n" - -#: lib/x509/ocsp_output.c:410 -#, c-format -msgid "\t\tRevocation time: %s\n" -msgstr "\t\t吊销时间:%s\n" - -#: lib/x509/ocsp_output.c:425 -#, c-format -msgid "\t\tThis Update: %s\n" -msgstr "\t\t本次更新:%s\n" - -#: lib/x509/ocsp_output.c:440 -#, c-format -msgid "\t\tNext Update: %s\n" -msgstr "\t\t下一次更新:%s\n" - -#: lib/x509/ocsp_output.c:514 lib/x509/output.c:1533 lib/x509/output.c:2144 -#, c-format -msgid "\tSignature Algorithm: %s\n" -msgstr "\t签名算法:%s\n" - -#: lib/x509/ocsp_output.c:518 lib/x509/output.c:1537 lib/x509/output.c:2148 -msgid "warning: signed using a broken signature algorithm that can be forged.\n" -msgstr "警告:使用可伪造的签名算法进行了签名。\n" - -#: lib/x509/ocsp_output.c:527 lib/x509/output.c:1564 lib/x509/output.c:2175 -msgid "\tSignature:\n" -msgstr "\t签名:\n" - -#: lib/x509/ocsp_output.c:619 -msgid "OCSP Response Information:\n" -msgstr "OCSP 响应信息:\n" - -#: lib/x509/output.c:92 lib/x509/output.c:808 -msgid "warning: altname contains an embedded NUL, replacing with '!'\n" -msgstr "警告:altname 内含 NUL,使用“!”代替\n" - -#: lib/x509/output.c:148 -#, c-format -msgid "\t\t\tPath Length Constraint: %d\n" -msgstr "\t\t\t路径长度常数:%d\n" - -#: lib/x509/output.c:149 -#, c-format -msgid "\t\t\tPolicy Language: %s" -msgstr "\t\t\t策略语言: %s" - -#: lib/x509/output.c:158 -msgid "" -"\t\t\tPolicy:\n" -"\t\t\t\tASCII: " -msgstr "" -"\t\t\t策略:\n" -"\t\t\t\tASCII: " - -#: lib/x509/output.c:160 -msgid "" -"\n" -"\t\t\t\tHexdump: " -msgstr "" -"\n" -"\t\t\t\t十六进制输出 " - -#: lib/x509/output.c:185 -#, c-format -msgid "\t\t\tAccess Method: %.*s" -msgstr "\t\t\t访问方式:%.*s" - -#: lib/x509/output.c:428 -#, c-format -msgid "%sDigital signature.\n" -msgstr "%s数字签名。\n" - -#: lib/x509/output.c:430 -#, c-format -msgid "%sNon repudiation.\n" -msgstr "%s无法否认。\n" - -#: lib/x509/output.c:432 -#, c-format -msgid "%sKey encipherment.\n" -msgstr "%s密钥加密。\n" - -#: lib/x509/output.c:434 -#, c-format -msgid "%sData encipherment.\n" -msgstr "%s数据加密。\n" - -#: lib/x509/output.c:436 -#, c-format -msgid "%sKey agreement.\n" -msgstr "%s密钥协议。\n" - -#: lib/x509/output.c:438 -#, c-format -msgid "%sCertificate signing.\n" -msgstr "%s证书签名。\n" - -#: lib/x509/output.c:440 -#, c-format -msgid "%sCRL signing.\n" -msgstr "%sCRL 签名。\n" - -#: lib/x509/output.c:442 -#, c-format -msgid "%sKey encipher only.\n" -msgstr "%s仅密钥加密。\n" - -#: lib/x509/output.c:444 -#, c-format -msgid "%sKey decipher only.\n" -msgstr "%s仅密钥解密。\n" - -#: lib/x509/output.c:482 -#, c-format -msgid "\t\t\tNot Before: %s\n" -msgstr "\t\t\t不早于: %s\n" - -#: lib/x509/output.c:489 -#, c-format -msgid "\t\t\tNot After: %s\n" -msgstr "\t\t\t不晚于: %s\n" - -#: lib/x509/output.c:539 -msgid "warning: distributionPoint contains an embedded NUL, replacing with '!'\n" -msgstr "警告:distributionPoint 含有内嵌的NUL,使用“!”代替\n" - -#: lib/x509/output.c:632 -#, c-format -msgid "%s\t\t\tTLS WWW Server.\n" -msgstr "%s\t\t\tTLS WWW 服务器。\n" - -#: lib/x509/output.c:634 -#, c-format -msgid "%s\t\t\tTLS WWW Client.\n" -msgstr "%s\t\t\tTLS WWW 客户端。\n" - -#: lib/x509/output.c:636 -#, c-format -msgid "%s\t\t\tCode signing.\n" -msgstr "%s\t\t\t代码签名。\n" - -#: lib/x509/output.c:638 -#, c-format -msgid "%s\t\t\tEmail protection.\n" -msgstr "%s\t\t\tEmail 保护。\n" - -#: lib/x509/output.c:640 -#, c-format -msgid "%s\t\t\tTime stamping.\n" -msgstr "%s\t\t\t时间戳。\n" - -#: lib/x509/output.c:642 -#, c-format -msgid "%s\t\t\tOCSP signing.\n" -msgstr "%s\t\t\tOCSP 签名。\n" - -#: lib/x509/output.c:644 -#, c-format -msgid "%s\t\t\tIpsec IKE.\n" -msgstr "%s\t\t\tIpsec 内部密钥交换(IKE)。\n" - -#: lib/x509/output.c:646 -#, c-format -msgid "%s\t\t\tAny purpose.\n" -msgstr "%s\t\t\t任何目的。\n" - -#: lib/x509/output.c:677 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): FALSE\n" -msgstr "%s\t\t\t证书颁发机构(CA):FALSE\n" - -#: lib/x509/output.c:679 -#, c-format -msgid "%s\t\t\tCertificate Authority (CA): TRUE\n" -msgstr "%s\t\t\t证书颁发机构(CA):TRUE\n" - -#: lib/x509/output.c:682 -#, c-format -msgid "%s\t\t\tPath Length Constraint: %d\n" -msgstr "%s\t\t\t路径长度限制: %d\n" - -#: lib/x509/output.c:814 -#, c-format -msgid "%s\t\t\tXMPP Address: %.*s\n" -msgstr "%s\t\t\tXMPP 地址:%.*s\n" - -#: lib/x509/output.c:819 -#, c-format -msgid "%s\t\t\totherName OID: %.*s\n" -msgstr "%s\t\t\totherName 对象标识符(OID):%.*s\n" - -#: lib/x509/output.c:821 -#, c-format -msgid "%s\t\t\totherName DER: " -msgstr "%s\t\t\totherName 区分编码规则(DER): " - -#: lib/x509/output.c:823 -#, c-format -msgid "" -"\n" -"%s\t\t\totherName ASCII: " -msgstr "" -"\n" -"%s\t\t\totherName ASCII:" - -#: lib/x509/output.c:945 -#, c-format -msgid "%s\tExtensions:\n" -msgstr "%s\t扩展:\n" - -#: lib/x509/output.c:955 -#, c-format -msgid "%s\t\tBasic Constraints (%s):\n" -msgstr "%s\t\t基本限制(%s):\n" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "critical" -msgstr "关键" - -#: lib/x509/output.c:956 lib/x509/output.c:971 lib/x509/output.c:1000 -#: lib/x509/output.c:1029 lib/x509/output.c:1045 lib/x509/output.c:1062 -#: lib/x509/output.c:1077 lib/x509/output.c:1091 lib/x509/output.c:1106 -#: lib/x509/output.c:1121 lib/x509/output.c:1136 lib/x509/output.c:1147 -#: lib/x509/output.c:1158 lib/x509/output.c:2008 lib/x509/output.c:2031 -#: lib/x509/output.c:2044 -msgid "not critical" -msgstr "非关键" - -#: lib/x509/output.c:970 -#, c-format -msgid "%s\t\tSubject Key Identifier (%s):\n" -msgstr "%s\t\t主题密钥标识符(%s):\n" - -#: lib/x509/output.c:1028 -#, c-format -msgid "%s\t\tAuthority Key Identifier (%s):\n" -msgstr "%s\t\t作者密钥标识符(%s):\n" - -#: lib/x509/output.c:1044 -#, c-format -msgid "%s\t\tKey Usage (%s):\n" -msgstr "%s\t\t密钥用法(%s):\n" - -#: lib/x509/output.c:1061 -#, c-format -msgid "%s\t\tPrivate Key Usage Period (%s):\n" -msgstr "%s\t\t密钥使用期(%s):\n" - -#: lib/x509/output.c:1076 -#, c-format -msgid "%s\t\tKey Purpose (%s):\n" -msgstr "%s\t\t密钥目的(%s):\n" - -#: lib/x509/output.c:1090 -#, c-format -msgid "%s\t\tSubject Alternative Name (%s):\n" -msgstr "%s\t\t主题备用名(%s):\n" - -#: lib/x509/output.c:1105 -#, c-format -msgid "%s\t\tIssuer Alternative Name (%s):\n" -msgstr "%s\t\t发行人备用名(%s):\n" - -#: lib/x509/output.c:1120 -#, c-format -msgid "%s\t\tCRL Distribution points (%s):\n" -msgstr "%s\t\tCRL 分发点(%s):\n" - -#: lib/x509/output.c:1135 -#, c-format -msgid "%s\t\tProxy Certificate Information (%s):\n" -msgstr "%s\t\t代理证书信息(%s):\n" - -#: lib/x509/output.c:1145 -#, c-format -msgid "%s\t\tAuthority Information Access (%s):\n" -msgstr "%s\t\t作者信息入口(%s):\n" - -#: lib/x509/output.c:1157 -#, c-format -msgid "%s\t\tUnknown extension %s (%s):\n" -msgstr "%s\t\t未知扩展 %s(%s):\n" - -#: lib/x509/output.c:1204 -#, c-format -msgid "%s\t\t\tASCII: " -msgstr "%s\t\t\tASCII: " - -#: lib/x509/output.c:1208 -#, c-format -msgid "%s\t\t\tHexdump: " -msgstr "%s\t\t\t十六进制转储: " - -#: lib/x509/output.c:1237 -#, c-format -msgid "\t%sPublic Key Algorithm: %s\n" -msgstr "\t%s公钥算法:%s\n" - -#: lib/x509/output.c:1238 -#, c-format -msgid "\tAlgorithm Security Level: %s (%d bits)\n" -msgstr "\t算法安全级别:%s(%d 位)\n" - -#: lib/x509/output.c:1254 -#, c-format -msgid "\t\tModulus (bits %d): " -msgstr "\t\t模数(位 %d):" - -#: lib/x509/output.c:1257 -#, c-format -msgid "\t\tExponent (bits %d): " -msgstr "\t\t指数(位 %d):" - -#: lib/x509/output.c:1265 -#, c-format -msgid "\t\tExponent (bits %d):\n" -msgstr "\t\t指数(位 %d):\n" - -#: lib/x509/output.c:1286 -#, c-format -msgid "\t\tCurve:\t%s\n" -msgstr "\t\t曲线:\t%s\n" - -#: lib/x509/output.c:1290 -msgid "\t\tX: " -msgstr "\t\tX:" - -#: lib/x509/output.c:1293 -msgid "\t\tY: " -msgstr "\t\tY:" - -#: lib/x509/output.c:1299 -msgid "\t\tX:\n" -msgstr "\t\tX:\n" - -#: lib/x509/output.c:1301 -msgid "\t\tY:\n" -msgstr "\t\tY:\n" - -#: lib/x509/output.c:1322 -#, c-format -msgid "\t\tPublic key (bits %d): " -msgstr "\t\t公钥(位 %d):" - -#: lib/x509/output.c:1325 -msgid "\t\tP: " -msgstr "\t\tP:" - -#: lib/x509/output.c:1328 -msgid "\t\tQ: " -msgstr "\t\tQ:" - -#: lib/x509/output.c:1331 -msgid "\t\tG: " -msgstr "\t\tG:" - -#: lib/x509/output.c:1375 lib/x509/output.c:2234 -msgid "Subject " -msgstr "主题 " - -#: lib/x509/output.c:1406 -msgid "\tSerial Number (hex): " -msgstr "\t序列号(16进制): " - -#: lib/x509/output.c:1435 lib/x509/output.c:1922 -#, c-format -msgid "\tIssuer: %s\n" -msgstr "\t发行者:%s\n" - -#: lib/x509/output.c:1445 -msgid "\tValidity:\n" -msgstr "\t有效性:\n" - -#: lib/x509/output.c:1458 -#, c-format -msgid "\t\tNot Before: %s\n" -msgstr "\t\t不早于: %s\n" - -#: lib/x509/output.c:1472 -#, c-format -msgid "\t\tNot After: %s\n" -msgstr "\t\t不晚于: %s\n" - -#: lib/x509/output.c:1497 lib/x509/output.c:2274 -#, c-format -msgid "\tSubject: %s\n" -msgstr "\t主题:%s\n" - -#: lib/x509/output.c:1587 -msgid "" -"\tMD5 fingerprint:\n" -"\t\t" -msgstr "" -"\tMD5 指纹:\n" -"\t\t" - -#: lib/x509/output.c:1589 -msgid "" -"\tSHA-1 fingerprint:\n" -"\t\t" -msgstr "" -"\tSHA-1 指纹:\n" -"\t\t" - -#: lib/x509/output.c:1611 lib/x509/output.c:2450 -msgid "" -"\tPublic Key Id:\n" -"\t\t" -msgstr "" -"\t公钥 Id:\n" -"\t\t" - -#: lib/x509/output.c:1627 -msgid "\tPublic key's random art:\n" -msgstr "" -"\t公钥对应的随机图像:\n" -"\n" - -#: lib/x509/output.c:1723 -#, c-format -msgid "signed using %s (broken!), " -msgstr "使用 %s 签名(已破损!), " - -#: lib/x509/output.c:1725 -#, c-format -msgid "signed using %s, " -msgstr "使用 %s 签名, " - -#: lib/x509/output.c:1867 -msgid "X.509 Certificate Information:\n" -msgstr "X.509 证书信息:\n" - -#: lib/x509/output.c:1871 lib/x509/output.c:2488 -msgid "Other Information:\n" -msgstr "其它信息:\n" - -#: lib/x509/output.c:1892 -msgid "\tVersion: 1 (default)\n" -msgstr "\t版本:1(默认)\n" - -#: lib/x509/output.c:1932 -msgid "\tUpdate dates:\n" -msgstr "\t更新日期:\n" - -#: lib/x509/output.c:1945 -#, c-format -msgid "\t\tIssued: %s\n" -msgstr "\t\t发行:%s\n" - -#: lib/x509/output.c:1961 -#, c-format -msgid "\t\tNext at: %s\n" -msgstr "\t\t下一个位于:%s\n" - -#: lib/x509/output.c:1992 -msgid "\tExtensions:\n" -msgstr "\t扩展:\n" - -#: lib/x509/output.c:2007 -#, c-format -msgid "\t\tCRL Number (%s): " -msgstr "\t\tCRL 号(%s): " - -#: lib/x509/output.c:2030 -#, c-format -msgid "\t\tAuthority Key Identifier (%s):\n" -msgstr "\t\t授权密钥识别器(%s):\n" - -#: lib/x509/output.c:2043 -#, c-format -msgid "\t\tUnknown extension %s (%s):\n" -msgstr "\t\t未知扩展 %s(%s):\n" - -#: lib/x509/output.c:2093 -#, c-format -msgid "\tRevoked certificates (%d):\n" -msgstr "\t撤销的证书(%d):\n" - -#: lib/x509/output.c:2095 -msgid "\tNo revoked certificates.\n" -msgstr "\t没有撤销的证书。\n" - -#: lib/x509/output.c:2114 -msgid "\t\tSerial Number (hex): " -msgstr "\t\t序列号(hex): " - -#: lib/x509/output.c:2123 -#, c-format -msgid "\t\tRevoked at: %s\n" -msgstr "\t\t撤销于:%s\n" - -#: lib/x509/output.c:2207 -msgid "X.509 Certificate Revocation List Information:\n" -msgstr "X.509 证书撤销列表信息:\n" - -#: lib/x509/output.c:2315 -msgid "\tAttributes:\n" -msgstr "\t属性:\n" - -#: lib/x509/output.c:2367 -#, c-format -msgid "\t\tChallenge password: %s\n" -msgstr "\t\t质询密码:%s\n" - -#: lib/x509/output.c:2378 -#, c-format -msgid "\t\tUnknown attribute %s:\n" -msgstr "\t\t未知属性 %s:\n" - -#: lib/x509/output.c:2484 -msgid "PKCS #10 Certificate Request Information:\n" -msgstr "PKCS #10 证书请求信息:\n" - -#: lib/x509/output.c:2520 -msgid "Public Key Usage:\n" -msgstr "公钥用法:\n" - -#: lib/x509/output.c:2531 -msgid "Public Key ID: " -msgstr "公钥 ID:" - -#: lib/x509/output.c:2565 -msgid "Public Key Information:\n" -msgstr "公钥信息:\n" - -#~ msgid "The peer did not send any certificate." -#~ msgstr "对方未发送任何证书。" - -#~ msgid "The initialization of GnuTLS-extra has failed." -#~ msgstr "GnuTLS-extra 初始化失败。" - -#~ msgid "The GnuTLS library version does not match the GnuTLS-extra library version." -#~ msgstr "GnuTLS 和 GnuTLS-extra 的库版本不相吻合。" - -#~ msgid "Inner application verification failed" -#~ msgstr "内部应用程序验证失败" - -#~ msgid "\tSubject Public Key Algorithm: %s\n" -#~ msgstr "\t主公钥算法:%s\n" - -#~ msgid "PKCS #11 error in PIN." -#~ msgstr "PKCS #11 PIN错误。" - -#~ msgid "PKCS #11 PIN should be saved." -#~ msgstr "PKCS #11 应当保存PIN。" diff --git a/src/Makefile.am b/src/Makefile.am index 827638ec8b..94b701a512 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -20,14 +20,49 @@ # src/gl is being added by the top level makefile SUBDIRS = -BUILT_SOURCES = srptool-args.c srptool-args.h \ - psktool-args.c psktool-args.h ocsptool-args.h ocsptool-args.c \ - serv-args.c serv-args.h cli-args.c cli-args.h \ - cli-debug-args.c cli-debug-args.h certtool-args.c certtool-args.h \ - danetool-args.c danetool-args.h p11tool-args.c p11tool-args.h \ - tpmtool-args.c tpmtool-args.h systemkey-args.c systemkey-args.h - -EXTRA_DIST = args-std.def +ARGS_BUILT = \ + srptool-args.c srptool-args.h \ + psktool-args.c psktool-args.h \ + ocsptool-args.h ocsptool-args.c \ + serv-args.c serv-args.h \ + cli-args.c cli-args.h \ + cli-debug-args.c cli-debug-args.h \ + certtool-args.c certtool-args.h \ + danetool-args.c danetool-args.h \ + p11tool-args.c p11tool-args.h \ + tpmtool-args.c tpmtool-args.h \ + systemkey-args.c systemkey-args.h + +# We bundle autogen-generated files as *.bak files. This is awkward, +# but it covers the common use-cases where autogen/libopts is +# installed or not. Do not attempt to simplify it unless autogen +# gains a support for better handling of intermediate files with +# autotools. +ARGS_BAK = \ + srptool-args.c.bak srptool-args.h.bak \ + psktool-args.c.bak psktool-args.h.bak \ + ocsptool-args.h.bak ocsptool-args.c.bak \ + serv-args.c.bak serv-args.h.bak \ + cli-args.c.bak cli-args.h.bak \ + cli-debug-args.c.bak cli-debug-args.h.bak \ + certtool-args.c.bak certtool-args.h.bak \ + danetool-args.c.bak danetool-args.h.bak \ + p11tool-args.c.bak p11tool-args.h.bak \ + tpmtool-args.c.bak tpmtool-args.h.bak \ + systemkey-args.c.bak systemkey-args.h.bak + +ARGS_STAMPS = \ + certtool-args.stamp cli-debug-args.stamp cli-args.stamp tpmtool-args.stamp \ + systemkey-args.stamp srptool-args.stamp ocsptool-args.stamp p11tool-args.stamp \ + danetool-args.stamp serv-args.stamp psktool-args.stamp + +BUILT_SOURCES = $(ARGS_BUILT) + +DISTCLEANFILES = $(BUILT_SOURCES) $(ARGS_STAMPS) + +EXTRA_DIST = gen-mech-list.sh $(ARGS_BAK) + +MAINTAINERCLEANFILES = $(ARGS_BAK) AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = \ @@ -47,16 +82,13 @@ else LIBOPTS = $(LIBOPTS_LDADD) endif -bin_PROGRAMS = psktool gnutls-cli-debug certtool +bin_PROGRAMS = psktool gnutls-cli-debug certtool gnutls-serv gnutls-cli if ENABLE_SRP bin_PROGRAMS += srptool endif if ENABLE_OCSP -bin_PROGRAMS += ocsptool gnutls-serv -if ENABLE_ANON -bin_PROGRAMS += gnutls-cli -endif +bin_PROGRAMS += ocsptool endif if ENABLE_DANE @@ -83,24 +115,29 @@ srptool_SOURCES = srptool.c srptool_LDADD = ../lib/libgnutls.la libcmd-srp.la $(LIBOPTS) ../gl/libgnu.la srptool_LDADD += $(LTLIBINTL) gl/libgnu_gpl.la noinst_LTLIBRARIES += libcmd-srp.la -libcmd_srp_la_SOURCES = srptool-args.def srptool-args.c srptool-args.h +libcmd_srp_la_SOURCES = srptool-args.def +nodist_libcmd_srp_la_SOURCES = srptool-args.c srptool-args.h endif psktool_SOURCES = psk.c psktool_LDADD = ../lib/libgnutls.la libcmd-psk.la $(LIBOPTS) ../gl/libgnu.la psktool_LDADD += $(LTLIBINTL) gl/libgnu_gpl.la noinst_LTLIBRARIES += libcmd-psk.la -libcmd_psk_la_SOURCES = psktool-args.def psktool-args.c psktool-args.h +libcmd_psk_la_SOURCES = psktool-args.def +nodist_libcmd_psk_la_SOURCES = psktool-args.c psktool-args.h if ENABLE_OCSP -ocsptool_SOURCES = ocsptool.c ocsptool-common.h ocsptool-common.c \ +ocsptool_SOURCES = ocsptool.c ocsptool-common.h ocsptool-common.c certtool-common.c \ socket.c common.c common.h socket.h ocsptool_LDADD = ../lib/libgnutls.la libcmd-ocsp.la $(LIBOPTS) ../gl/libgnu.la ocsptool_LDADD += $(LTLIBINTL) $(GETADDRINFO_LIB) gl/libgnu_gpl.la $(LIBIDN_LIBS) noinst_LTLIBRARIES += libcmd-ocsp.la -libcmd_ocsp_la_SOURCES = ocsptool-args.def ocsptool-args.h ocsptool-args.c +libcmd_ocsp_la_SOURCES = ocsptool-args.def +nodist_libcmd_ocsp_la_SOURCES = ocsptool-args.h ocsptool-args.c + +endif gnutls_serv_SOURCES = \ list.h serv.c \ @@ -112,16 +149,18 @@ gnutls_serv_LDADD += libcmd-serv.la $(LIBOPTS) ../gl/libgnu.la gnutls_serv_LDADD += $(LTLIBINTL) gl/libgnu_gpl.la gnutls_serv_LDADD += $(LIBSOCKET) $(GETADDRINFO_LIB) $(LIBIDN_LIBS) noinst_LTLIBRARIES += libcmd-serv.la -libcmd_serv_la_SOURCES = serv-args.def serv-args.c serv-args.h - -if ENABLE_ANON +libcmd_serv_la_SOURCES = serv-args.def +nodist_libcmd_serv_la_SOURCES = serv-args.c serv-args.h BENCHMARK_SRCS = benchmark-cipher.c benchmark.c benchmark.h benchmark-tls.c gnutls_cli_SOURCES = cli.c common.h common.c \ - socket.c socket.h ocsptool-common.c inline_cmds.h \ + socket.c socket.h inline_cmds.h \ $(BENCHMARK_SRCS) -gnutls_cli_LDADD = ../lib/libgnutls.la +if ENABLE_OCSP +gnutls_cli_SOURCES += ocsptool-common.c +endif +gnutls_cli_LDADD = ../lib/libgnutls.la -lm if ENABLE_DANE gnutls_cli_LDADD += ../libdane/libgnutls-dane.la endif @@ -129,9 +168,8 @@ gnutls_cli_LDADD += libcmd-cli.la $(LIBOPTS) ../gl/libgnu.la $(LTLIBINTL) $(LIBI gnutls_cli_LDADD += $(LIBSOCKET) $(GETADDRINFO_LIB) $(LIB_CLOCK_GETTIME) \ $(SERVENT_LIB) gl/libgnu_gpl.la noinst_LTLIBRARIES += libcmd-cli.la -libcmd_cli_la_SOURCES = cli-args.def cli-args.c cli-args.h -endif -endif +libcmd_cli_la_SOURCES = cli-args.def +nodist_libcmd_cli_la_SOURCES = cli-args.c cli-args.h gnutls_cli_debug_SOURCES = cli-debug.c tests.h tests.c \ socket.c socket.h common.h common.c @@ -140,7 +178,8 @@ gnutls_cli_debug_LDADD += $(LIBOPTS) ../gl/libgnu.la gl/libgnu_gpl.la gnutls_cli_debug_LDADD += $(LTLIBINTL) $(LIBIDN_LIBS) gnutls_cli_debug_LDADD += $(LIBSOCKET) $(GETADDRINFO_LIB) noinst_LTLIBRARIES += libcmd-cli-debug.la -libcmd_cli_debug_la_SOURCES = cli-debug-args.def cli-debug-args.c cli-debug-args.h +libcmd_cli_debug_la_SOURCES = cli-debug-args.def +nodist_libcmd_cli_debug_la_SOURCES = cli-debug-args.c cli-debug-args.h #certtool COMMON_LIBS = $(LIBOPTS) $(LTLIBINTL) @@ -157,8 +196,9 @@ certtool_LDADD = ../lib/libgnutls.la certtool_LDADD += libcmd-certtool.la ../gl/libgnu.la gl/libgnu_gpl.la noinst_LTLIBRARIES += libcmd-certtool.la -libcmd_certtool_la_SOURCES = certtool-args.c certtool-args.def certtool-args.h \ +libcmd_certtool_la_SOURCES = certtool-args.def \ certtool-cfg.h certtool-cfg.c +nodist_libcmd_certtool_la_SOURCES = certtool-args.c certtool-args.h libcmd_certtool_la_LIBADD = ../lib/libgnutls.la gl/libgnu_gpl.la ../gl/libgnu.la libcmd_certtool_la_LIBADD += $(COMMON_LIBS) libcmd_certtool_la_LIBADD += $(LTLIBREADLINE) gl/libgnu_gpl.la @@ -173,8 +213,9 @@ danetool_LDADD += ../libdane/libgnutls-dane.la endif noinst_LTLIBRARIES += libcmd-danetool.la -libcmd_danetool_la_SOURCES = danetool-args.c danetool-args.def danetool-args.h \ +libcmd_danetool_la_SOURCES = danetool-args.def \ certtool-cfg.h certtool-cfg.c +nodist_libcmd_danetool_la_SOURCES = danetool-args.c danetool-args.h libcmd_danetool_la_LIBADD = ../lib/libgnutls.la gl/libgnu_gpl.la ../gl/libgnu.la libcmd_danetool_la_LIBADD += $(COMMON_LIBS) libcmd_danetool_la_LIBADD += $(LTLIBREADLINE) @@ -183,15 +224,18 @@ libcmd_danetool_la_LIBADD += $(INET_PTON_LIB) $(LIB_CLOCK_GETTIME) # p11 tool if ENABLE_PKCS11 +BUILT_SOURCES += mech-list.h p11tool_SOURCES = p11tool-args.def p11tool.c pkcs11.c certtool-common.c \ - certtool-extras.c p11tool.h common.c + certtool-extras.c p11tool.h common.c mech-list.h +p11tool_CPPFLAGS = $(AM_CPPFLAGS) $(P11_KIT_CFLAGS) p11tool_LDADD = ../lib/libgnutls.la p11tool_LDADD += libcmd-p11tool.la ../gl/libgnu.la gl/libgnu_gpl.la p11tool_LDADD += $(COMMON_LIBS) noinst_LTLIBRARIES += libcmd-p11tool.la -libcmd_p11tool_la_SOURCES = p11tool-args.def p11tool-args.c p11tool-args.h \ +libcmd_p11tool_la_SOURCES = p11tool-args.def \ certtool-cfg.h certtool-cfg.c +nodist_libcmd_p11tool_la_SOURCES = p11tool-args.c p11tool-args.h libcmd_p11tool_la_LIBADD = ../lib/libgnutls.la gl/libgnu_gpl.la ../gl/libgnu.la libcmd_p11tool_la_LIBADD += $(LTLIBREADLINE) $(INET_PTON_LIB) $(LIB_CLOCK_GETTIME) @@ -205,8 +249,9 @@ tpmtool_LDADD += libcmd-tpmtool.la ../gl/libgnu.la gl/libgnu_gpl.la tpmtool_LDADD += $(COMMON_LIBS) noinst_LTLIBRARIES += libcmd-tpmtool.la -libcmd_tpmtool_la_SOURCES = tpmtool-args.def tpmtool-args.c tpmtool-args.h \ +libcmd_tpmtool_la_SOURCES = tpmtool-args.def \ certtool-cfg.h certtool-cfg.c +nodist_libcmd_tpmtool_la_SOURCES = tpmtool-args.c tpmtool-args.h libcmd_tpmtool_la_LIBADD = ../lib/libgnutls.la gl/libgnu_gpl.la ../gl/libgnu.la libcmd_tpmtool_la_LIBADD += $(LTLIBREADLINE) $(INET_PTON_LIB) $(LIB_CLOCK_GETTIME) @@ -218,76 +263,92 @@ systemkey_LDADD += libcmd-systemkey.la ../gl/libgnu.la gl/libgnu_gpl.la systemkey_LDADD += $(COMMON_LIBS) noinst_LTLIBRARIES += libcmd-systemkey.la -libcmd_systemkey_la_SOURCES = systemkey-args.def systemkey-args.c systemkey-args.h \ +libcmd_systemkey_la_SOURCES = systemkey-args.def \ certtool-cfg.h certtool-cfg.c +nodist_libcmd_systemkey_la_SOURCES = systemkey-args.c systemkey-args.h libcmd_systemkey_la_LIBADD = ../lib/libgnutls.la gl/libgnu_gpl.la ../gl/libgnu.la libcmd_systemkey_la_LIBADD += $(LTLIBREADLINE) $(INET_PTON_LIB) $(LIB_CLOCK_GETTIME) +SUFFIXES = .stamp .def .c.bak .h.bak + +if NEED_LIBOPTS +# case --enable-local-libopts: We do not call AUTOGEN unless the .bak files are missing +.def.stamp: + $(AM_V_GEN) b=`echo $@ | sed 's/.stamp$$//'`; \ + if ! test -f $(srcdir)/$${b}.c.bak;then \ + echo "No .bak files found; will call autogen"; \ + $(AUTOGEN) $<; \ + else \ + echo "Re-using .bak files"; \ + rm -f $${b}.c $${b}.h; \ + cp -p $(srcdir)/$${b}.c.bak $${b}.c; \ + cp -p $(srcdir)/$${b}.h.bak $${b}.h; \ + fi + touch $@ +else +# default case. We call autogen, and if that fails we resort to the bundled files. +.def.stamp: + $(AM_V_GEN) $(AUTOGEN) $< || { \ + srcdir=''; \ + b=`echo $@ | sed 's/.stamp$$//'`; \ + test -f ./$${b}.def || srcdir=$(srcdir)/; \ + cp -p $${srcdir}$${b}.c.bak $${b}.c; \ + cp -p $${srcdir}$${b}.h.bak $${b}.h; \ + } && \ + touch $@ +endif + +.c.c.bak: + -@rm -f $@ + $(AM_V_GEN) cp -p $< $@ + +.h.h.bak: + -@rm -f $@ + $(AM_V_GEN) cp -p $< $@ + danetool-args.h: danetool-args.stamp danetool-args.c: danetool-args.stamp -danetool-args.stamp: $(srcdir)/danetool-args.def $(srcdir)/args-std.def - -$(AUTOGEN) $< - touch $@ +danetool-args.stamp: args-std.def ocsptool-args.h: ocsptool-args.stamp ocsptool-args.c: ocsptool-args.stamp -ocsptool-args.stamp: $(srcdir)/ocsptool-args.def $(srcdir)/args-std.def - -$(AUTOGEN) $< - touch $@ +ocsptool-args.stamp: args-std.def tpmtool-args.h: tpmtool-args.stamp tpmtool-args.c: tpmtool-args.stamp -tpmtool-args.stamp: $(srcdir)/tpmtool-args.def $(srcdir)/args-std.def - -$(AUTOGEN) $< - touch $@ +tpmtool-args.stamp: args-std.def p11tool-args.h: p11tool-args.stamp p11tool-args.c: p11tool-args.stamp -p11tool-args.stamp: $(srcdir)/p11tool-args.def $(srcdir)/args-std.def - -$(AUTOGEN) $< - touch $@ +p11tool-args.stamp: args-std.def psktool-args.h: psktool-args.stamp psktool-args.c: psktool-args.stamp -psktool-args.stamp: $(srcdir)/psktool-args.def $(srcdir)/args-std.def - -$(AUTOGEN) $< - touch $@ +psktool-args.stamp: args-std.def cli-debug-args.h: cli-debug-args.stamp cli-debug-args.c: cli-debug-args.stamp -cli-debug-args.stamp: $(srcdir)/cli-debug-args.def $(srcdir)/args-std.def - -$(AUTOGEN) $< - touch $@ +cli-debug-args.stamp: args-std.def cli-args.h: cli-args.stamp cli-args.c: cli-args.stamp -cli-args.stamp: $(srcdir)/cli-args.def $(srcdir)/args-std.def - -$(AUTOGEN) $< - touch $@ +cli-args.stamp: args-std.def serv-args.h: serv-args.stamp serv-args.c: serv-args.stamp -serv-args.stamp: $(srcdir)/serv-args.def $(srcdir)/args-std.def - -$(AUTOGEN) $< - touch $@ +serv-args.stamp: args-std.def srptool-args.h: srptool-args.stamp srptool-args.c: srptool-args.stamp -srptool-args.stamp: $(srcdir)/srptool-args.def $(srcdir)/args-std.def - -$(AUTOGEN) $< - touch $@ +srptool-args.stamp: args-std.def certtool-args.h: certtool-args.stamp certtool-args.c: certtool-args.stamp -certtool-args.stamp: $(srcdir)/certtool-args.def $(srcdir)/args-std.def - -$(AUTOGEN) $< - touch $@ +certtool-args.stamp: args-std.def systemkey-args.h: systemkey-args.stamp systemkey-args.c: systemkey-args.stamp -systemkey-args.stamp: $(srcdir)/systemkey-args.def $(srcdir)/args-std.def - -$(AUTOGEN) $< - touch $@ +systemkey-args.stamp: args-std.def -clean-local: - rm -f *.stamp +mech-list.h: gen-mech-list.sh + $(AM_V_GEN) $(srcdir)/gen-mech-list.sh > $@.tmp && mv $@.tmp $@ diff --git a/src/args-std.def b/src/args-std.def deleted file mode 100644 index 93634a1857..0000000000 --- a/src/args-std.def +++ /dev/null @@ -1,58 +0,0 @@ - -prog-group = GnuTLS; -config-header = config.h; -gnu-usage; -disable-save; -long-opts; -no-xlate = opt; -version = "@VERSION@"; -no-misuse-usage; -export = '#include '; - -copyright = { - date = "2000-@YEAR@"; - owner = "Free Software Foundation, and others"; - author = "Nikos Mavrogiannopoulos, Simon Josefsson and others; " - "see /usr/share/doc/gnutls/AUTHORS for a complete list."; - eaddr = "@PACKAGE_BUGREPORT@"; - type = gpl; -}; - -help-value = h; -flag = { - name = debug; - value = d; - arg-type = number; - arg-range = "0 -> 9999"; - descrip = "Enable debugging"; - doc = "Specifies the debug level."; -}; - -#ifdef VERBOSE_OPT -flag = { - name = verbose; - value = V; - max = NOLIMIT; - descrip = "More verbose output"; - doc = ""; -}; -#endif - -#ifdef INFILE_OPT -flag = { - name = infile; - arg-type = file; - file-exists = yes; - descrip = "Input file"; - doc = ""; -}; -#endif - -#ifdef OUTFILE_OPT -flag = { - name = outfile; - arg-type = string; - descrip = "Output file"; - doc = ""; -}; -#endif diff --git a/src/args-std.def.in b/src/args-std.def.in new file mode 100644 index 0000000000..4a92c448d2 --- /dev/null +++ b/src/args-std.def.in @@ -0,0 +1,58 @@ + +prog-group = GnuTLS; +config-header = config.h; +gnu-usage; +disable-save; +long-opts; +no-xlate = opt; +version = "@VERSION@"; +no-misuse-usage; +export = '#include '; + +copyright = { + date = "2000-2020"; + owner = "Free Software Foundation, and others"; + author = "Nikos Mavrogiannopoulos, Simon Josefsson and others; " + "see /usr/share/doc/gnutls/AUTHORS for a complete list."; + eaddr = "@PACKAGE_BUGREPORT@"; + type = gpl; +}; + +help-value = h; +flag = { + name = debug; + value = d; + arg-type = number; + arg-range = "0 -> 9999"; + descrip = "Enable debugging"; + doc = "Specifies the debug level."; +}; + +#ifdef VERBOSE_OPT +flag = { + name = verbose; + value = V; + max = NOLIMIT; + descrip = "More verbose output"; + doc = ""; +}; +#endif + +#ifdef INFILE_OPT +flag = { + name = infile; + arg-type = file; + file-exists = yes; + descrip = "Input file"; + doc = ""; +}; +#endif + +#ifdef OUTFILE_OPT +flag = { + name = outfile; + arg-type = string; + descrip = "Output file"; + doc = ""; +}; +#endif diff --git a/src/benchmark-cipher.c b/src/benchmark-cipher.c index 24d3665e8f..03e1d45fef 100644 --- a/src/benchmark-cipher.c +++ b/src/benchmark-cipher.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . * * Written by Nikos Mavrogiannopoulos . */ @@ -153,6 +153,12 @@ static void cipher_bench(int algo, int size, int aead) return; memset(_key, 0xf0, keysize); + /* For AES-XTS, the block and tweak key must be different */ + if (algo == GNUTLS_CIPHER_AES_128_XTS || + algo == GNUTLS_CIPHER_AES_256_XTS) { + memset((uint8_t *)_key + (keysize / 2), 0x0f, (keysize / 2)); + } + _iv = malloc(ivsize); if (_iv == NULL) { free(_key); @@ -231,7 +237,7 @@ static void cipher_bench(int algo, int size, int aead) static void mac_bench(int algo, int size) { void *_key; - int blocksize = gnutls_hmac_get_len(algo); + int key_size = gnutls_hmac_get_key_size(algo); int step = size * 1024; struct benchmark_st st; void *input; @@ -240,10 +246,10 @@ static void mac_bench(int algo, int size) ALLOCM(input, MAX_MEM); i = input; - _key = malloc(blocksize); + _key = malloc(key_size); if (_key == NULL) return; - memset(_key, 0xf0, blocksize); + memset(_key, 0xf0, key_size); printf("%16s ", gnutls_mac_get_name(algo)); fflush(stdout); @@ -253,7 +259,7 @@ static void mac_bench(int algo, int size) start_benchmark(&st); do { - gnutls_hmac_fast(algo, _key, blocksize, i, step, _key); + gnutls_hmac_fast(algo, _key, key_size, i, step, _key); st.size += step; INC(input, i, step); } @@ -275,27 +281,41 @@ void benchmark_cipher(int debug_level) page_size = sysconf(_SC_PAGESIZE); #endif - printf("Checking cipher-MAC combinations, payload size: %u\n", size * 1024); + printf("Checking AEAD ciphers, payload size: %u\n", size * 1024); cipher_bench(GNUTLS_CIPHER_AES_128_GCM, size, 1); cipher_bench(GNUTLS_CIPHER_AES_128_CCM, size, 1); cipher_bench(GNUTLS_CIPHER_CHACHA20_POLY1305, size, 1); - cipher_bench(GNUTLS_CIPHER_NULL, size, 1); + printf("\nChecking cipher-MAC combinations, payload size: %u\n", size * 1024); cipher_mac_bench(GNUTLS_CIPHER_SALSA20_256, GNUTLS_MAC_SHA1, size); cipher_mac_bench(GNUTLS_CIPHER_AES_128_CBC, GNUTLS_MAC_SHA1, size); cipher_mac_bench(GNUTLS_CIPHER_AES_128_CBC, GNUTLS_MAC_SHA256, size); +#ifdef ENABLE_GOST + cipher_mac_bench(GNUTLS_CIPHER_GOST28147_TC26Z_CNT, GNUTLS_MAC_GOST28147_TC26Z_IMIT, + size); +#endif printf("\nChecking MAC algorithms, payload size: %u\n", size * 1024); mac_bench(GNUTLS_MAC_SHA1, size); mac_bench(GNUTLS_MAC_SHA256, size); mac_bench(GNUTLS_MAC_SHA512, size); +#ifdef ENABLE_GOST + mac_bench(GNUTLS_MAC_GOST28147_TC26Z_IMIT, size); + mac_bench(GNUTLS_MAC_GOSTR_94, size); + mac_bench(GNUTLS_MAC_STREEBOG_512, size); +#endif printf("\nChecking ciphers, payload size: %u\n", size * 1024); cipher_bench(GNUTLS_CIPHER_3DES_CBC, size, 0); cipher_bench(GNUTLS_CIPHER_AES_128_CBC, size, 0); - cipher_bench(GNUTLS_CIPHER_ARCFOUR, size, 0); + cipher_bench(GNUTLS_CIPHER_AES_128_XTS, size, 0); + cipher_bench(GNUTLS_CIPHER_AES_256_XTS, size, 0); cipher_bench(GNUTLS_CIPHER_SALSA20_256, size, 0); + cipher_bench(GNUTLS_CIPHER_NULL, size, 1); +#ifdef ENABLE_GOST + cipher_bench(GNUTLS_CIPHER_GOST28147_TC26Z_CNT, size, 0); +#endif gnutls_global_deinit(); } diff --git a/src/benchmark-tls.c b/src/benchmark-tls.c index d97b61a585..2c062a6ee7 100644 --- a/src/benchmark-tls.c +++ b/src/benchmark-tls.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -16,8 +17,7 @@ * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * along with this program. If not, see . */ #ifdef HAVE_CONFIG_H @@ -43,47 +43,57 @@ const char *side = ""; -#define PRIO_DH "NONE:+VERS-TLS1.2:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+DHE-RSA" -#define PRIO_ECDH "NONE:+VERS-TLS1.2:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+ECDHE-RSA:+CURVE-SECP256R1" -#define PRIO_ECDHX "NONE:+VERS-TLS1.2:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+ECDHE-RSA:+CURVE-X25519" -#define PRIO_ECDHE_ECDSA "NONE:+VERS-TLS1.2:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+ECDHE-ECDSA:+CURVE-SECP256R1" -#define PRIO_ECDHX_ECDSA "NONE:+VERS-TLS1.2:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+ECDHE-ECDSA:+CURVE-X25519" -#define PRIO_RSA "NONE:+VERS-TLS1.2:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+RSA" +#define PRIO_DHE_RSA "NONE:+VERS-TLS1.3:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-NULL:+DHE-RSA:+GROUP-FFDHE3072" +#define PRIO_ECDH "NONE:+VERS-TLS1.3:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-NULL:+ECDHE-RSA:+CURVE-SECP256R1" +#define PRIO_ECDH_X25519 "NONE:+VERS-TLS1.3:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-NULL:+ECDHE-RSA:+CURVE-X25519" +#define PRIO_ECDHE_ECDSA "NONE:+VERS-TLS1.3:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-NULL:+ECDHE-ECDSA:+CURVE-SECP256R1" +#define PRIO_ECDH_X25519_ECDSA "NONE:+VERS-TLS1.3:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-NULL:+ECDHE-ECDSA:+CURVE-X25519" +#define PRIO_ECDH_X25519_EDDSA "NONE:+VERS-TLS1.3:+AES-128-GCM:+AEAD:+SIGN-EDDSA-ED25519:+COMP-NULL:+ECDHE-ECDSA:+CURVE-X25519" +#define PRIO_RSA "NONE:+VERS-TLS1.2:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-NULL:+RSA" +#define PRIO_ECDH_RSA_PSS "NONE:+VERS-TLS1.3:+AES-128-GCM:+AEAD:+SIGN-RSA-PSS-SHA256:+COMP-NULL:+ECDHE-RSA:+CURVE-SECP256R1" -#define PRIO_ARCFOUR_128_SHA1 "NONE:+VERS-TLS1.0:+ARCFOUR-128:+SHA1:+SIGN-ALL:+COMP-NULL:+RSA" - #define PRIO_AES_CBC_SHA1 "NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+RSA" -#define PRIO_ARCFOUR_128_MD5 "NONE:+VERS-TLS1.0:+ARCFOUR-128:+MD5:+SIGN-ALL:+COMP-NULL:+RSA" -#define PRIO_AES_GCM "NONE:+VERS-TLS1.2:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-NULL:+RSA" -#define PRIO_AES_CCM "NONE:+VERS-TLS1.2:+AES-128-CCM:+AEAD:+SIGN-ALL:+COMP-NULL:+RSA" -#define PRIO_CHACHA_POLY1305 "NONE:+VERS-TLS1.2:+CHACHA20-POLY1305:+AEAD:+SIGN-ALL:+COMP-NULL:+ECDHE-RSA:+CURVE-ALL" +#define PRIO_TLS12_AES_GCM "NONE:+VERS-TLS1.2:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-NULL:+RSA" +#define PRIO_AES_GCM "NONE:+VERS-TLS1.3:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-NULL:+GROUP-ALL" +#define PRIO_TLS12_AES_CCM "NONE:+VERS-TLS1.2:+AES-128-CCM:+AEAD:+SIGN-ALL:+COMP-NULL:+RSA" +#define PRIO_AES_CCM "NONE:+VERS-TLS1.3:+AES-128-CCM:+AEAD:+SIGN-ALL:+COMP-NULL:+GROUP-ALL" +#define PRIO_TLS12_CHACHA_POLY1305 "NONE:+VERS-TLS1.2:+CHACHA20-POLY1305:+AEAD:+SIGN-ALL:+COMP-NULL:+ECDHE-RSA:+CURVE-ALL" +#define PRIO_CHACHA_POLY1305 "NONE:+VERS-TLS1.3:+CHACHA20-POLY1305:+AEAD:+SIGN-ALL:+COMP-NULL:+ECDHE-RSA:+CURVE-ALL" #define PRIO_CAMELLIA_CBC_SHA1 "NONE:+VERS-TLS1.0:+CAMELLIA-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+RSA" +#define PRIO_GOST_CNT "NONE:+VERS-TLS1.2:+GOST28147-TC26Z-CNT:+GOST28147-TC26Z-IMIT:+SIGN-ALL:+SIGN-GOSTR341012-256:+COMP-NULL:+VKO-GOST-12:+GROUP-GOST-ALL" static const int rsa_bits = 3072, ec_bits = 256; -/* DH of 3072 bits that is pretty close equivalent to 256 bits of ECDH. - */ -const char *pkcs3 = - "-----BEGIN DH PARAMETERS-----\n" - "MIIDDQKCAYEAtnlQsMzw6EdzVgv59IvDCNXDz+V5F6S95ies6VuP2najcePLCPa4\n" - "yLCcQabhjV+rSpYxvqEo1hHMhAZPPsrHP3CCzFlqkSY2mmryC5LfWnoJnJCA5RSs\n" - "kWNlxyJ/fkXWseFKDm+E3W/yZXxBJxf3BevlcF7hMXuOrv5tGOdiltWsCrZglEMC\n" - "IO3NcvEwLp7Y/OuHk4J2upJSLJqL2mUoYgOUAwhoM9oh6ucjPJ0Ha/HqNRe0zdup\n" - "0wnwSbjBR0xa2HdHv5hr0OPk6sma0Zj1cVNi3u5xlMeiirbtEBuRPfM4mrMkhK8F\n" - "YBhVV7YRf+WMw8v9VhfeX+GYuE4oMdv6tJBwWoj0RdhgpD6BMG7uHwM7WOn5ZukA\n" - "sn9eGsXRog2gCmckUfOGn5oQWXRk1sv2myeu75GAaIPIsXMWBsJNCfxVBbi7pEU9\n" - "IQgi6JoLlRnvXVa2GaoVEdAuH0dl6QSIRmNeZ3VKa0ZCx1DHn/WVIt2ooMec5lCY\n" - "JGCqIT3tQUUzAoIBgFYzCrFBoleurEimohHxnFKMY0E0feGA0qLPDUa+Ys/4wsr6\n" - "SabuE9X69EHVDu4xGlbS4w9k5sMfXTqgVGIN43jbWuoN1FAdPp8YdbXACB3k+IoN\n" - "cCj/Ju90Tc/NOTwHN/4Axsy0LpeP+eknb48eQw6mYsHCvN9ytmLqC8AG11G+aTrF\n" - "boVeI7pCbfuls/cRNl4POuSyv+R12Evs1qXLoSW4crPEDvVpbIrgirjQNJbosfZY\n" - "5Pxf2Ofpidy1slINQqx8zhILTikl0AdfYAlnBVFEOKg1HF+EnvNbcXW0QDxxnFF/\n" - "W+Yv0xQpFw9UDa+hdwEVvdrDopqvuvg9BCwCfxT3vGN300RDqWAVGJUknXN4T5MZ\n" - "+fZrtZMhbWDCsOHMcVcUPqul7V5uQX7EAhUnfBKxE1I5NK9J8wtHeUEYioI8f7XY\n" - "Be6/w7WHHspV4fwIOfWUD5G0c++NxED+JwDyc8aU/qVOXVikOXwVTB/2oyatkoBX\n" - "r8Y+1FUiZGhRCT9dbgICAQA=\n" - "-----END DH PARAMETERS-----\n"; +static unsigned char server_rsa_pss_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIErTCCAuWgAwIBAgIIWTZrqjOeCfIwPQYJKoZIhvcNAQEKMDCgDTALBglghkgB\n" + "ZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCASAwFzEVMBMGA1UE\n" + "AxMMcnNhLXBzcyBjZXJ0MCAXDTE3MDYwNjA4NDUzMVoYDzk5OTkxMjMxMjM1OTU5\n" + "WjAXMRUwEwYDVQQDEwxyc2EtcHNzIGNlcnQwggHSMD0GCSqGSIb3DQEBCjAwoA0w\n" + "CwYJYIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgA4IB\n" + "jwAwggGKAoIBgQDswF+JIWGcyu+JfjTcM8UDRKaxOuLVY0SODV1uaXPB5ZW9nEX/\n" + "FFYIG+ldSKCyz5JF5ThrdvwqO+GVByuvETJdM7N4i8fzGHU8WIsj/CABAV+SaDT/\n" + "xb+h1ar9dIehKelBmXQADVFX+xvu9OM5Ft3P/wyO9gWWrR7e/MU/SVzWzMT69+5Y\n" + "oE4QkrYYCuEBtlVHDo2mmNWGSQ5tUVIWARgXbqsmj4voWkutE/CiT0+g6GQilMAR\n" + "kROElIhO5NH+u3/Lt2wRQO5tEP1JmSoqvrMOmF16txze8qMzvKg1Eafijv9DR4Nc\n" + "Cc6s8+g+CZbyODSdAybiyKsC7JCIrQjsnAjgPKKBLuZ1NTmu5liuXO05XsdcBoKD\n" + "bKNAQdJCz4uxfqTr4CGFgHQk48Nhmq01EGmpwAeA/BOCB5qsWzqURtMX8EVB1Zdo\n" + "3LD5Vwz18mm+ZdeLPlYy3L/FBpVPDbYoZlFgINUNCQvGgvzqGJAQrKR4w8X/Y6HH\n" + "9R8sv+U8kNtQI90CAwEAAaNrMGkwDAYDVR0TAQH/BAIwADAUBgNVHREEDTALggls\n" + "b2NhbGhvc3QwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0PAQH/BAUDAweAADAd\n" + "BgNVHQ4EFgQU1TmyUrkZZn4yMf4asV5OKq8bZ1gwPQYJKoZIhvcNAQEKMDCgDTAL\n" + "BglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCASADggGB\n" + "AGxMPB+Z6pgmWNRw5NjIJgnvJfdMWmQib0II5kdU9I1UybrVRUGpI6tFjIB/pRWU\n" + "SiD8wTZpxfTHkRHUn+Wyhh14XOg2Pdad5Ek2XU/QblL2k4kh1sHdOcCRFbDzP5k8\n" + "LKIzFcndgnKTRun5368H+NLcXRx/KAi7s9zi4swp9dPxRvNvp8HjQyVhdFi5pK6n\n" + "pN1Sw/QD22CE1fRVJ3OYxq4sqCEZANhRv6h/M3AcetGt4LR8ErwuzP1fdtuXeumw\n" + "T0deQ2hhSYZmbkk/S+qHA8as6J224ry7Zr5bhB9hr52yum9yC9SjFy0XEV/895jJ\n" + "0MDIM33DmPUdnn90Btt+Oq+bgZqTIolifSmcs0sPH10SuxDOnXwkbR44Wu9NbCzx\n" + "h3VzhlxAdgcnOYSmJnXKWXog4N1BPFrB4rFqXWFF0Avqs4euK81W4IQ4Sk7fYT7C\n" + "tyrDILPqBhN80Q9Me70y7KRsek6yFn4Jd0Lok6vetaeWtSW0929bhU49b1hkdSzt\n" + "kw==\n" + "-----END CERTIFICATE-----\n"; static unsigned char server_cert_pem[] = "-----BEGIN CERTIFICATE-----\n" @@ -174,10 +184,69 @@ static unsigned char server_ecc_cert_pem[] = "cBE=\n" "-----END CERTIFICATE-----\n"; +static unsigned char server_ed25519_key_pem[] = + "-----BEGIN PRIVATE KEY-----\n" + "MC4CAQAwBQYDK2VwBCIEIOXDJXOU6J6XdXx4WfcyPILPYJDH5bRfm9em+DYMkllw\n" + "-----END PRIVATE KEY-----\n"; + +static unsigned char server_ed25519_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIBwTCCAWagAwIBAgIIWTZasQWGNVEwCgYIKoZIzj0EAwIwfTELMAkGA1UEBhMC\n" + "QkUxDzANBgNVBAoTBkdudVRMUzElMCMGA1UECxMcR251VExTIGNlcnRpZmljYXRl\n" + "IGF1dGhvcml0eTEPMA0GA1UECBMGTGV1dmVuMSUwIwYDVQQDExxHbnVUTFMgY2Vy\n" + "dGlmaWNhdGUgYXV0aG9yaXR5MCAXDTE3MDYwNjA3MzMwNVoYDzk5OTkxMjMxMjM1\n" + "OTU5WjAZMRcwFQYDVQQDEw5FZDI1NTE5IHNpZ25lcjAqMAUGAytlcAMhAPMF++lz\n" + "LIzfyCX0v0B7LIabZWZ/dePW9HexIbW3tYmHo2EwXzAMBgNVHRMBAf8EAjAAMA8G\n" + "A1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFONSSnOdGLzpv3xNcci8ZiKKqzyqMB8G\n" + "A1UdIwQYMBaAFPC0gf6YEr+1KLlkQAPLzB9mTigDMAoGCCqGSM49BAMCA0kAMEYC\n" + "IQDHGfSgM44DVZfrP5CF8LSNlFN55ti3Z69YJ0SK8Fy9eQIhAN2UKeX3l8A9Ckcm\n" + "7barRoh+qx7ZVYpe+5w3JYuxy16w\n" + "-----END CERTIFICATE-----\n"; + +#ifdef ENABLE_GOST +static unsigned char server_gost12_256_key_pem[] = + "-----BEGIN PRIVATE KEY-----\n" + "MEgCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIkAAYIKoUDBwEBAgIEIgQg0+JttJEV\n" + "Ud+XBzX9q13ByKK+j2b+mEmNIo1yB0wGleo=\n" + "-----END PRIVATE KEY-----\n"; + +static unsigned char server_gost12_256_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIC8DCCAVigAwIBAgIIWcZKgxkCMvcwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE\n" + "AxMEQ0EtMzAgFw0xOTEwMDgxMDQ4MTZaGA85OTk5MTIzMTIzNTk1OVowDTELMAkG\n" + "A1UEAxMCR1IwZjAfBggqhQMHAQEBATATBgcqhQMCAiQABggqhQMHAQECAgNDAARA\n" + "J9sMEEx0JW9QsT5bDqyc0TNcjVg9ZSdp4GkMtShM+OOgyBGrWK3zLP5IzHYSXja8\n" + "373QrJOUvdX7T7TUk5yU5aOBjTCBijAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuC\n" + "CWxvY2FsaG9zdDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8BAf8EBQMDB4AA\n" + "MB0GA1UdDgQWBBQYSEtdwsYrtnOq6Ya3nt8DgFPCQjAfBgNVHSMEGDAWgBT5qIYZ\n" + "Y7akFBNgdg8BmjU27/G0rzANBgkqhkiG9w0BAQsFAAOCAYEAR0xtx7MWEP1KyIzM\n" + "4lXKdTyU4Nve5RcgqF82yR/0odqT5MPoaZDvLuRWEcQryztZD3kmRUmPmn1ujSfc\n" + "BbPfRnSutDXcf6imq0/U1/TV/BF3vpS1plltzetvibf8MYetHVFQHUBJDZJHh9h7\n" + "PGwA9SnmnGKFIxFdV6bVOLkPR54Gob9zN3E17KslL19lNtht1pxk9pshwTn35oRY\n" + "uOdxof9F4XjpI/4WbC8kp15QeG8XyZd5JWSl+niNOqYK31+ilQdVBr4RiZSDIcAg\n" + "twS5yV9Ap+R8rM8TLbeT2io4rhdUgmDllUf49zV3t6AbVvbsQfkqXmHXW8uW2WBu\n" + "A8FiXEbIIOb+QIW0ZGwk3BVQ7wdiw1M5w6kYtz5kBtNPxBmc+eu1+e6EAfYbFNr3\n" + "pkxtMk3veYWHb5s3dHZ4/t2Rn85hWqh03CWwCkKTN3qmEs4/XpybbXE/UE49e7u1\n" + "FkpM1bT/0gUNsNt5h3pyUzQZdiB0XbdGGFta3tB3+inIO45h\n" + "-----END CERTIFICATE-----\n"; + +static const gnutls_datum_t server_gost12_256_key = { server_gost12_256_key_pem, + sizeof(server_gost12_256_key_pem)-1 +}; + +static const gnutls_datum_t server_gost12_256_cert = { server_gost12_256_cert_pem, + sizeof(server_gost12_256_cert_pem)-1 +}; +#endif + const gnutls_datum_t server_cert = { server_cert_pem, sizeof(server_cert_pem) }; +const gnutls_datum_t server_rsa_pss_cert = { server_rsa_pss_cert_pem, + sizeof(server_rsa_pss_cert_pem) +}; + const gnutls_datum_t server_key = { server_key_pem, sizeof(server_key_pem) }; @@ -190,6 +259,14 @@ const gnutls_datum_t server_ecc_key = { server_ecc_key_pem, sizeof(server_ecc_key_pem) }; +const gnutls_datum_t server_ed25519_cert = { server_ed25519_cert_pem, + sizeof(server_ed25519_cert_pem) +}; + +const gnutls_datum_t server_ed25519_key = { server_ed25519_key_pem, + sizeof(server_ed25519_key_pem) +}; + char buffer[64 * 1024]; static void tls_log_func(int level, const char *str) @@ -202,8 +279,6 @@ static void test_ciphersuite(const char *cipher_prio, int size) /* Server stuff. */ gnutls_anon_server_credentials_t s_anoncred; gnutls_certificate_credentials_t c_certcred, s_certcred; - const gnutls_datum_t p3 = { (void *) pkcs3, strlen(pkcs3) }; - static gnutls_dh_params_t dh_params; gnutls_session_t server; int sret, cret; const char *str; @@ -214,15 +289,13 @@ static void test_ciphersuite(const char *cipher_prio, int size) int ret; struct benchmark_st st; gnutls_packet_t packet; + const char *name; /* Init server */ +#ifdef ENABLE_ANON gnutls_anon_allocate_server_credentials(&s_anoncred); - gnutls_dh_params_init(&dh_params); - gnutls_dh_params_import_pkcs3(dh_params, &p3, GNUTLS_X509_FMT_PEM); - gnutls_anon_set_server_dh_params(s_anoncred, dh_params); - +#endif gnutls_certificate_allocate_credentials(&s_certcred); - gnutls_certificate_set_dh_params(s_certcred, dh_params); gnutls_certificate_set_x509_key_mem(s_certcred, &server_cert, &server_key, @@ -230,6 +303,11 @@ static void test_ciphersuite(const char *cipher_prio, int size) gnutls_certificate_set_x509_key_mem(s_certcred, &server_ecc_cert, &server_ecc_key, GNUTLS_X509_FMT_PEM); +#ifdef ENABLE_GOST + gnutls_certificate_set_x509_key_mem(s_certcred, &server_gost12_256_cert, + &server_gost12_256_key, + GNUTLS_X509_FMT_PEM); +#endif gnutls_init(&server, GNUTLS_SERVER); ret = gnutls_priority_set_direct(server, cipher_prio, &str); @@ -237,7 +315,9 @@ static void test_ciphersuite(const char *cipher_prio, int size) fprintf(stderr, "Error in %s\n", str); exit(1); } +#ifdef ENABLE_ANON gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); +#endif gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, s_certcred); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -245,7 +325,9 @@ static void test_ciphersuite(const char *cipher_prio, int size) reset_buffers(); /* Init client */ +#ifdef ENABLE_ANON gnutls_anon_allocate_client_credentials(&c_anoncred); +#endif gnutls_certificate_allocate_credentials(&c_certcred); gnutls_init(&client, GNUTLS_CLIENT); @@ -254,7 +336,9 @@ static void test_ciphersuite(const char *cipher_prio, int size) fprintf(stderr, "Error in %s\n", str); exit(1); } +#ifdef ENABLE_ANON gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); +#endif gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, c_certcred); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); @@ -262,13 +346,16 @@ static void test_ciphersuite(const char *cipher_prio, int size) HANDSHAKE(client, server); - fprintf(stdout, "%38s ", - gnutls_cipher_suite_get_name(gnutls_kx_get(server), - gnutls_cipher_get(server), - gnutls_mac_get(server))); + name = gnutls_cipher_get_name(gnutls_cipher_get(server)); + fprintf(stdout, "%30s - %s ", name, gnutls_protocol_get_name( + gnutls_protocol_get_version(server))); fflush(stdout); - gnutls_rnd(GNUTLS_RND_NONCE, buffer, sizeof(buffer)); + ret = gnutls_rnd(GNUTLS_RND_NONCE, buffer, sizeof(buffer)); + if (ret < 0) { + fprintf(stderr, "Error in %s\n", str); + exit(1); + } start_benchmark(&st); @@ -307,15 +394,14 @@ static void test_ciphersuite(const char *cipher_prio, int size) gnutls_deinit(client); gnutls_deinit(server); +#ifdef ENABLE_ANON gnutls_anon_free_client_credentials(c_anoncred); gnutls_anon_free_server_credentials(s_anoncred); - - gnutls_dh_params_deinit(dh_params); - +#endif } static -double calc_avg(unsigned int *diffs, unsigned int diffs_size) +double calc_avg(uint64_t *diffs, unsigned int diffs_size) { double avg = 0; unsigned int i; @@ -329,7 +415,7 @@ double calc_avg(unsigned int *diffs, unsigned int diffs_size) } static -double calc_sstdev(unsigned int *diffs, unsigned int diffs_size, +double calc_svar(uint64_t *diffs, unsigned int diffs_size, double avg) { double sum = 0, d; @@ -347,60 +433,65 @@ double calc_sstdev(unsigned int *diffs, unsigned int diffs_size, } -unsigned int diffs[32 * 1024]; -unsigned int diffs_size = 0; +uint64_t total_diffs[32 * 1024]; +unsigned int total_diffs_size = 0; -static void test_ciphersuite_kx(const char *cipher_prio) +static void test_ciphersuite_kx(const char *cipher_prio, unsigned pk) { /* Server stuff. */ gnutls_anon_server_credentials_t s_anoncred; - const gnutls_datum_t p3 = { (void *) pkcs3, strlen(pkcs3) }; - static gnutls_dh_params_t dh_params; gnutls_session_t server; - int sret, cret; + int sret, cret, ret; const char *str; char *suite = NULL; - /* Client stuff. */ gnutls_anon_client_credentials_t c_anoncred; gnutls_certificate_credentials_t c_certcred, s_certcred; gnutls_session_t client; - /* Need to enable anonymous KX specifically. */ - int ret; + unsigned i; struct benchmark_st st; struct timespec tr_start, tr_stop; - double avg, sstddev; + double avg, svar; + gnutls_priority_t priority_cache; + const char *scale; - diffs_size = 0; + total_diffs_size = 0; /* Init server */ gnutls_certificate_allocate_credentials(&s_certcred); +#ifdef ENABLE_ANON gnutls_anon_allocate_server_credentials(&s_anoncred); - gnutls_dh_params_init(&dh_params); +#endif - ret = - gnutls_dh_params_import_pkcs3(dh_params, &p3, - GNUTLS_X509_FMT_PEM); - if (ret < 0) { - fprintf(stderr, "Error importing the PKCS #3 params: %s\n", - gnutls_strerror(ret)); - exit(1); - } - - gnutls_anon_set_server_dh_params(s_anoncred, dh_params); - gnutls_certificate_set_dh_params(s_certcred, dh_params); - - ret = gnutls_certificate_set_x509_key_mem(s_certcred, &server_cert, - &server_key, - GNUTLS_X509_FMT_PEM); + ret = 0; + if (pk == GNUTLS_PK_RSA_PSS) + ret = gnutls_certificate_set_x509_key_mem(s_certcred, &server_rsa_pss_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + else if (pk == GNUTLS_PK_RSA) + ret = gnutls_certificate_set_x509_key_mem(s_certcred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); if (ret < 0) { fprintf(stderr, "Error in %d: %s\n", __LINE__, gnutls_strerror(ret)); exit(1); } - ret = gnutls_certificate_set_x509_key_mem(s_certcred, &server_ecc_cert, - &server_ecc_key, - GNUTLS_X509_FMT_PEM); + ret = 0; + if (pk == GNUTLS_PK_ECDSA) + ret = gnutls_certificate_set_x509_key_mem(s_certcred, &server_ecc_cert, + &server_ecc_key, + GNUTLS_X509_FMT_PEM); + else if (pk == GNUTLS_PK_EDDSA_ED25519) + ret = gnutls_certificate_set_x509_key_mem(s_certcred, &server_ed25519_cert, + &server_ed25519_key, + GNUTLS_X509_FMT_PEM); +#ifdef ENABLE_GOST + else if (pk == GNUTLS_PK_GOST_12_256) + ret = gnutls_certificate_set_x509_key_mem(s_certcred, &server_gost12_256_cert, + &server_gost12_256_key, + GNUTLS_X509_FMT_PEM); +#endif if (ret < 0) { fprintf(stderr, "Error in %d: %s\n", __LINE__, gnutls_strerror(ret)); @@ -408,22 +499,32 @@ static void test_ciphersuite_kx(const char *cipher_prio) } /* Init client */ +#ifdef ENABLE_ANON gnutls_anon_allocate_client_credentials(&c_anoncred); +#endif gnutls_certificate_allocate_credentials(&c_certcred); start_benchmark(&st); + ret = gnutls_priority_init(&priority_cache, cipher_prio, &str); + if (ret < 0) { + fprintf(stderr, "Error in %s\n", str); + exit(1); + } + do { gnutls_init(&server, GNUTLS_SERVER); ret = - gnutls_priority_set_direct(server, cipher_prio, &str); + gnutls_priority_set(server, priority_cache); if (ret < 0) { - fprintf(stderr, "Error in %s\n", str); + fprintf(stderr, "Error in setting priority: %s\n", gnutls_strerror(ret)); exit(1); } +#ifdef ENABLE_ANON gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); +#endif gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, s_certcred); gnutls_transport_set_push_function(server, server_push); @@ -435,13 +536,15 @@ static void test_ciphersuite_kx(const char *cipher_prio) gnutls_init(&client, GNUTLS_CLIENT); ret = - gnutls_priority_set_direct(client, cipher_prio, &str); + gnutls_priority_set(client, priority_cache); if (ret < 0) { - fprintf(stderr, "Error in %s\n", str); + fprintf(stderr, "Error in setting priority: %s\n", gnutls_strerror(ret)); exit(1); } +#ifdef ENABLE_ANON gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); +#endif gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, c_certcred); @@ -463,29 +566,44 @@ static void test_ciphersuite_kx(const char *cipher_prio) gnutls_deinit(client); gnutls_deinit(server); - diffs[diffs_size++] = timespec_sub_ms(&tr_stop, &tr_start); - if (diffs_size > sizeof(diffs)) + total_diffs[total_diffs_size++] = timespec_sub_ns(&tr_stop, &tr_start); + if (total_diffs_size > sizeof(total_diffs)/sizeof(total_diffs[0])) abort(); st.size += 1; } while (benchmark_must_finish == 0); - fprintf(stdout, "%38s ", suite); + fprintf(stdout, "%s\n - ", suite); gnutls_free(suite); stop_benchmark(&st, "transactions", 1); + gnutls_priority_deinit(priority_cache); - avg = calc_avg(diffs, diffs_size); - sstddev = calc_sstdev(diffs, diffs_size, avg); + avg = calc_avg(total_diffs, total_diffs_size); - printf("%32s %.2f ms, sample variance: %.2f)\n", - "(avg. handshake time:", avg, sstddev); + if (avg < 1000) { + scale = "ns"; + } else if (avg < 1000000) { + scale = "\u00B5s"; + avg /= 1000; + for (i=0;i. + * along with this program. If not, see . */ #include @@ -47,7 +47,7 @@ static void alarm_handler(int signo) #endif static void -value2human(unsigned long bytes, double time, double *data, double *speed, +value2human(uint64_t bytes, double time, double *data, double *speed, char *metric) { if (bytes > 1000 && bytes < 1000 * 1000) { @@ -130,9 +130,7 @@ double stop_benchmark(struct benchmark_st *st, const char *metric, gettime(&stop); - lsecs = (stop.tv_sec * 1000 + stop.tv_nsec / (1000 * 1000) - - (st->start.tv_sec * 1000 + - st->start.tv_nsec / (1000 * 1000))); + lsecs = timespec_sub_ms(&stop, &st->start); secs = lsecs; secs /= 1000; diff --git a/src/benchmark.h b/src/benchmark.h index e13d9a3850..a5e2aff124 100644 --- a/src/benchmark.h +++ b/src/benchmark.h @@ -14,9 +14,12 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ +#ifndef GNUTLS_SRC_BENCHMARK_H +#define GNUTLS_SRC_BENCHMARK_H + #include #include #include @@ -24,6 +27,9 @@ #include #endif +/* for uint64_t */ +# include + #if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID) #undef gettime #define gettime(x) clock_gettime(CLOCK_PROCESS_CPUTIME_ID, x) @@ -44,7 +50,7 @@ void benchmark_tls(int debug_level, int ciphers); struct benchmark_st { struct timespec start; - unsigned long size; + uint64_t size; sighandler_t old_handler; #if defined(_WIN32) HANDLE wtimer; @@ -62,6 +68,13 @@ double stop_benchmark(struct benchmark_st *st, const char *metric, inline static unsigned int timespec_sub_ms(struct timespec *a, struct timespec *b) { - return (a->tv_sec * 1000 + a->tv_nsec / (1000 * 1000) - - (b->tv_sec * 1000 + b->tv_nsec / (1000 * 1000))); + return (a->tv_sec - b->tv_sec) * 1000 + (a->tv_nsec - b->tv_nsec) / (1000 * 1000); +} + +inline static unsigned long +timespec_sub_ns(struct timespec *a, struct timespec *b) +{ + return (a->tv_sec - b->tv_sec) * 1000000000 + (a->tv_nsec - b->tv_nsec); } + +#endif /* GNUTLS_SRC_BENCHMARK_H */ diff --git a/src/certtool-args.c.bak b/src/certtool-args.c.bak deleted file mode 100644 index 31fe01ed70..0000000000 --- a/src/certtool-args.c.bak +++ /dev/null @@ -1,3433 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (certtool-args.c) - * - * It has been AutoGen-ed - * From the definitions certtool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This source file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the certtool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The certtool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * certtool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * certtool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef __doxygen__ -#define OPTION_CODE_COMPILE 1 -#include "certtool-args.h" -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern FILE * option_usage_fp; -#define zCopyright (certtool_opt_strs+0) -#define zLicenseDescrip (certtool_opt_strs+289) - - -#ifndef NULL -# define NULL 0 -#endif - -/** - * static const strings for certtool options - */ -static char const certtool_opt_strs[6886] = -/* 0 */ "certtool @VERSION@\n" - "Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n" - "This is free software. It is licensed for use, modification and\n" - "redistribution under the terms of the GNU General Public License,\n" - "version 3 or later \n\0" -/* 289 */ "certtool is free software: you can redistribute it and/or modify it under\n" - "the terms of the GNU General Public License as published by the Free\n" - "Software Foundation, either version 3 of the License, or (at your option)\n" - "any later version.\n\n" - "certtool is distributed in the hope that it will be useful, but WITHOUT ANY\n" - "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n" - "FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n" - "details.\n\n" - "You should have received a copy of the GNU General Public License along\n" - "with this program. If not, see .\n\0" -/* 894 */ "Enable debugging\0" -/* 911 */ "DEBUG\0" -/* 917 */ "debug\0" -/* 923 */ "More verbose output\0" -/* 943 */ "VERBOSE\0" -/* 951 */ "verbose\0" -/* 959 */ "Input file\0" -/* 970 */ "INFILE\0" -/* 977 */ "infile\0" -/* 984 */ "Output file\0" -/* 996 */ "OUTFILE\0" -/* 1004 */ "outfile\0" -/* 1012 */ "Generate a self-signed certificate\0" -/* 1047 */ "GENERATE_SELF_SIGNED\0" -/* 1068 */ "generate-self-signed\0" -/* 1089 */ "Generate a signed certificate\0" -/* 1119 */ "GENERATE_CERTIFICATE\0" -/* 1140 */ "generate-certificate\0" -/* 1161 */ "Generates a proxy certificate\0" -/* 1191 */ "GENERATE_PROXY\0" -/* 1206 */ "generate-proxy\0" -/* 1221 */ "Generate a CRL\0" -/* 1236 */ "GENERATE_CRL\0" -/* 1249 */ "generate-crl\0" -/* 1262 */ "Update a signed certificate\0" -/* 1290 */ "UPDATE_CERTIFICATE\0" -/* 1309 */ "update-certificate\0" -/* 1328 */ "Generate a private key\0" -/* 1351 */ "GENERATE_PRIVKEY\0" -/* 1368 */ "generate-privkey\0" -/* 1385 */ "Generate a private key or parameters from a seed using a provable method\0" -/* 1458 */ "PROVABLE\0" -/* 1467 */ "provable\0" -/* 1476 */ "Verify a private key generated from a seed using a provable method\0" -/* 1543 */ "VERIFY_PROVABLE_PRIVKEY\0" -/* 1567 */ "verify-provable-privkey\0" -/* 1591 */ "When generating a private key use the given hex-encoded seed\0" -/* 1652 */ "SEED\0" -/* 1657 */ "seed\0" -/* 1662 */ "Generate a PKCS #10 certificate request\0" -/* 1702 */ "GENERATE_REQUEST\0" -/* 1719 */ "generate-request\0" -/* 1736 */ "Verify a PEM encoded certificate chain\0" -/* 1775 */ "VERIFY_CHAIN\0" -/* 1788 */ "verify-chain\0" -/* 1801 */ "Verify a PEM encoded certificate (chain) against a trusted set\0" -/* 1864 */ "VERIFY\0" -/* 1871 */ "verify\0" -/* 1878 */ "Verify a Certificate Revocation List using a trusted list\0" -/* 1936 */ "VERIFY_CRL\0" -/* 1947 */ "verify-crl\0" -/* 1958 */ "Specify a hostname to be used for certificate chain verification\0" -/* 2023 */ "VERIFY_HOSTNAME\0" -/* 2039 */ "verify-hostname\0" -/* 2055 */ "Specify a email to be used for certificate chain verification\0" -/* 2117 */ "VERIFY_EMAIL\0" -/* 2130 */ "verify-email\0" -/* 2143 */ "Specify a purpose OID to be used for certificate chain verification\0" -/* 2211 */ "VERIFY_PURPOSE\0" -/* 2226 */ "verify-purpose\0" -/* 2241 */ "Allow broken algorithms, such as MD5 for verification\0" -/* 2295 */ "VERIFY_ALLOW_BROKEN\0" -/* 2315 */ "verify-allow-broken\0" -/* 2335 */ "Generate PKCS #3 encoded Diffie-Hellman parameters\0" -/* 2386 */ "GENERATE_DH_PARAMS\0" -/* 2405 */ "generate-dh-params\0" -/* 2424 */ "Get the included PKCS #3 encoded Diffie-Hellman parameters\0" -/* 2483 */ "GET_DH_PARAMS\0" -/* 2497 */ "get-dh-params\0" -/* 2511 */ "Print information PKCS #3 encoded Diffie-Hellman parameters\0" -/* 2571 */ "DH_INFO\0" -/* 2579 */ "dh-info\0" -/* 2587 */ "Loads a private key file\0" -/* 2612 */ "LOAD_PRIVKEY\0" -/* 2625 */ "load-privkey\0" -/* 2638 */ "Loads a public key file\0" -/* 2662 */ "LOAD_PUBKEY\0" -/* 2674 */ "load-pubkey\0" -/* 2686 */ "Loads a certificate request file\0" -/* 2719 */ "LOAD_REQUEST\0" -/* 2732 */ "load-request\0" -/* 2745 */ "Loads a certificate file\0" -/* 2770 */ "LOAD_CERTIFICATE\0" -/* 2787 */ "load-certificate\0" -/* 2804 */ "Loads the certificate authority's private key file\0" -/* 2855 */ "LOAD_CA_PRIVKEY\0" -/* 2871 */ "load-ca-privkey\0" -/* 2887 */ "Loads the certificate authority's certificate file\0" -/* 2938 */ "LOAD_CA_CERTIFICATE\0" -/* 2958 */ "load-ca-certificate\0" -/* 2978 */ "Loads the provided CRL\0" -/* 3001 */ "LOAD_CRL\0" -/* 3010 */ "load-crl\0" -/* 3019 */ "Loads auxiliary data\0" -/* 3040 */ "LOAD_DATA\0" -/* 3050 */ "load-data\0" -/* 3060 */ "Password to use\0" -/* 3076 */ "PASSWORD\0" -/* 3085 */ "password\0" -/* 3094 */ "Enforce a NULL password\0" -/* 3118 */ "NULL_PASSWORD\0" -/* 3132 */ "null-password\0" -/* 3146 */ "Enforce an empty password\0" -/* 3172 */ "EMPTY_PASSWORD\0" -/* 3187 */ "empty-password\0" -/* 3202 */ "Print big number in an easier format to parse\0" -/* 3248 */ "HEX_NUMBERS\0" -/* 3260 */ "hex-numbers\0" -/* 3272 */ "In certain operations it prints the information in C-friendly format\0" -/* 3341 */ "CPRINT\0" -/* 3348 */ "cprint\0" -/* 3355 */ "Print information on the given certificate\0" -/* 3398 */ "CERTIFICATE_INFO\0" -/* 3415 */ "certificate-info\0" -/* 3432 */ "Print the fingerprint of the given certificate\0" -/* 3479 */ "FINGERPRINT\0" -/* 3491 */ "fingerprint\0" -/* 3503 */ "Print the key ID of the given certificate\0" -/* 3545 */ "KEY_ID\0" -/* 3552 */ "key-id\0" -/* 3559 */ "Print certificate's public key\0" -/* 3590 */ "CERTIFICATE_PUBKEY\0" -/* 3609 */ "certificate-pubkey\0" -/* 3628 */ "Print information on the given OpenPGP certificate\0" -/* 3679 */ "PGP_CERTIFICATE_INFO\0" -/* 3700 */ "pgp-certificate-info\0" -/* 3721 */ "Print information on the given OpenPGP keyring structure\0" -/* 3778 */ "PGP_RING_INFO\0" -/* 3792 */ "pgp-ring-info\0" -/* 3806 */ "Print information on the given CRL structure\0" -/* 3851 */ "CRL_INFO\0" -/* 3860 */ "crl-info\0" -/* 3869 */ "Print information on the given certificate request\0" -/* 3920 */ "CRQ_INFO\0" -/* 3929 */ "crq-info\0" -/* 3938 */ "Do not use extensions in certificate requests\0" -/* 3984 */ "NO_CRQ_EXTENSIONS\0" -/* 4002 */ "no-crq-extensions\0" -/* 4020 */ "Print information on a PKCS #12 structure\0" -/* 4062 */ "P12_INFO\0" -/* 4071 */ "p12-info\0" -/* 4080 */ "The PKCS #12 friendly name to use\0" -/* 4114 */ "P12_NAME\0" -/* 4123 */ "p12-name\0" -/* 4132 */ "Generate a PKCS #7 structure\0" -/* 4161 */ "P7_GENERATE\0" -/* 4173 */ "p7-generate\0" -/* 4185 */ "Signs using a PKCS #7 structure\0" -/* 4217 */ "P7_SIGN\0" -/* 4225 */ "p7-sign\0" -/* 4233 */ "Signs using a detached PKCS #7 structure\0" -/* 4274 */ "P7_DETACHED_SIGN\0" -/* 4291 */ "p7-detached-sign\0" -/* 4308 */ "The signer's certificate will be included in the cert list.\0" -/* 4368 */ "P7_INCLUDE_CERT\0" -/* 4384 */ "no-p7-include-cert\0" -/* 4403 */ "no\0" -/* 4406 */ "Will include a timestamp in the PKCS #7 structure\0" -/* 4456 */ "P7_TIME\0" -/* 4464 */ "no-p7-time\0" -/* 4475 */ "Will show the embedded data in the PKCS #7 structure\0" -/* 4528 */ "P7_SHOW_DATA\0" -/* 4541 */ "no-p7-show-data\0" -/* 4557 */ "Print information on a PKCS #7 structure\0" -/* 4598 */ "P7_INFO\0" -/* 4606 */ "p7-info\0" -/* 4614 */ "Verify the provided PKCS #7 structure\0" -/* 4652 */ "P7_VERIFY\0" -/* 4662 */ "p7-verify\0" -/* 4672 */ "Print information on a PKCS #8 structure\0" -/* 4713 */ "P8_INFO\0" -/* 4721 */ "p8-info\0" -/* 4729 */ "Convert S/MIME to PKCS #7 structure\0" -/* 4765 */ "SMIME_TO_P7\0" -/* 4777 */ "smime-to-p7\0" -/* 4789 */ "Print information on a private key\0" -/* 4824 */ "KEY_INFO\0" -/* 4833 */ "key-info\0" -/* 4842 */ "Print information on an OpenPGP private key\0" -/* 4886 */ "PGP_KEY_INFO\0" -/* 4899 */ "pgp-key-info\0" -/* 4912 */ "Print information on a public key\0" -/* 4946 */ "PUBKEY_INFO\0" -/* 4958 */ "pubkey-info\0" -/* 4970 */ "Generate an X.509 version 1 certificate (with no extensions)\0" -/* 5031 */ "V1\0" -/* 5034 */ "v1\0" -/* 5037 */ "Generate a PKCS #12 structure\0" -/* 5067 */ "TO_P12\0" -/* 5074 */ "to-p12\0" -/* 5081 */ "Generate a PKCS #8 structure\0" -/* 5110 */ "TO_P8\0" -/* 5116 */ "to-p8\0" -/* 5122 */ "Use PKCS #8 format for private keys\0" -/* 5158 */ "PKCS8\0" -/* 5164 */ "pkcs8\0" -/* 5170 */ "Generate RSA key\0" -/* 5187 */ "RSA\0" -/* 5191 */ "rsa\0" -/* 5195 */ "Generate DSA key\0" -/* 5212 */ "DSA\0" -/* 5216 */ "dsa\0" -/* 5220 */ "Generate ECC (ECDSA) key\0" -/* 5245 */ "ECC\0" -/* 5249 */ "ecc\0" -/* 5253 */ "an alias for the 'ecc' option\0" -/* 5283 */ "ecdsa\0" -/* 5289 */ "Hash algorithm to use for signing\0" -/* 5323 */ "HASH\0" -/* 5328 */ "hash\0" -/* 5333 */ "Use DER format for input certificates, private keys, and DH parameters\0" -/* 5404 */ "INDER\0" -/* 5410 */ "no-inder\0" -/* 5419 */ "an alias for the 'inder' option\0" -/* 5451 */ "inraw\0" -/* 5457 */ "Use DER format for output certificates, private keys, and DH parameters\0" -/* 5529 */ "OUTDER\0" -/* 5536 */ "no-outder\0" -/* 5546 */ "an alias for the 'outder' option\0" -/* 5579 */ "outraw\0" -/* 5586 */ "Specify the number of bits for key generate\0" -/* 5630 */ "BITS\0" -/* 5635 */ "bits\0" -/* 5640 */ "Specify the curve used for EC key generation\0" -/* 5685 */ "CURVE\0" -/* 5691 */ "curve\0" -/* 5697 */ "Specify the security level [low, legacy, medium, high, ultra]\0" -/* 5759 */ "SEC_PARAM\0" -/* 5769 */ "sec-param\0" -/* 5779 */ "No effect\0" -/* 5789 */ "DISABLE_QUICK_RANDOM\0" -/* 5810 */ "disable-quick-random\0" -/* 5831 */ "Template file to use for non-interactive operation\0" -/* 5882 */ "TEMPLATE\0" -/* 5891 */ "template\0" -/* 5900 */ "Print information to stdout instead of stderr\0" -/* 5946 */ "STDOUT_INFO\0" -/* 5958 */ "stdout-info\0" -/* 5970 */ "Enable interaction for entering password when in batch mode.\0" -/* 6031 */ "ASK_PASS\0" -/* 6040 */ "ask-pass\0" -/* 6049 */ "Cipher to use for PKCS #8 and #12 operations\0" -/* 6094 */ "PKCS_CIPHER\0" -/* 6106 */ "pkcs-cipher\0" -/* 6118 */ "Specify the PKCS #11 provider library\0" -/* 6156 */ "PROVIDER\0" -/* 6165 */ "provider\0" -/* 6174 */ "display extended usage information and exit\0" -/* 6218 */ "help\0" -/* 6223 */ "extended usage information passed thru pager\0" -/* 6268 */ "more-help\0" -/* 6278 */ "output version information and exit\0" -/* 6314 */ "version\0" -/* 6322 */ "CERTTOOL\0" -/* 6331 */ "certtool - GnuTLS certificate tool\n" - "Usage: %s [ - [] | --[{=| }] ]...\n\0" -/* 6424 */ "@PACKAGE_BUGREPORT@\0" -/* 6444 */ "\n\0" -/* 6446 */ "Tool to parse and generate X.509 certificates, requests and private keys.\n" - "It can be used interactively or non interactively by specifying the\n" - "template command line option.\n\n" - "The tool accepts files or supported URIs via the --infile option. In case\n" - "PIN is required for URI access you can provide it using the environment\n" - "variables GNUTLS_PIN and GNUTLS_SO_PIN.\n\0" -/* 6807 */ "certtool @VERSION@\0" -/* 6826 */ "certtool [options]\n" - "certtool --help for usage instructions.\n"; - -/** - * debug option description: - */ -/** Descriptive text for the debug option */ -#define DEBUG_DESC (certtool_opt_strs+894) -/** Upper-cased name for the debug option */ -#define DEBUG_NAME (certtool_opt_strs+911) -/** Name string for the debug option */ -#define DEBUG_name (certtool_opt_strs+917) -/** Compiled in flag settings for the debug option */ -#define DEBUG_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * verbose option description: - */ -/** Descriptive text for the verbose option */ -#define VERBOSE_DESC (certtool_opt_strs+923) -/** Upper-cased name for the verbose option */ -#define VERBOSE_NAME (certtool_opt_strs+943) -/** Name string for the verbose option */ -#define VERBOSE_name (certtool_opt_strs+951) -/** Compiled in flag settings for the verbose option */ -#define VERBOSE_FLAGS (OPTST_DISABLED) - -/** - * infile option description: - */ -/** Descriptive text for the infile option */ -#define INFILE_DESC (certtool_opt_strs+959) -/** Upper-cased name for the infile option */ -#define INFILE_NAME (certtool_opt_strs+970) -/** Name string for the infile option */ -#define INFILE_name (certtool_opt_strs+977) -/** Compiled in flag settings for the infile option */ -#define INFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * outfile option description: - */ -/** Descriptive text for the outfile option */ -#define OUTFILE_DESC (certtool_opt_strs+984) -/** Upper-cased name for the outfile option */ -#define OUTFILE_NAME (certtool_opt_strs+996) -/** Name string for the outfile option */ -#define OUTFILE_name (certtool_opt_strs+1004) -/** Compiled in flag settings for the outfile option */ -#define OUTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * generate-self-signed option description: - */ -/** Descriptive text for the generate-self-signed option */ -#define GENERATE_SELF_SIGNED_DESC (certtool_opt_strs+1012) -/** Upper-cased name for the generate-self-signed option */ -#define GENERATE_SELF_SIGNED_NAME (certtool_opt_strs+1047) -/** Name string for the generate-self-signed option */ -#define GENERATE_SELF_SIGNED_name (certtool_opt_strs+1068) -/** Compiled in flag settings for the generate-self-signed option */ -#define GENERATE_SELF_SIGNED_FLAGS (OPTST_DISABLED) - -/** - * generate-certificate option description: - */ -/** Descriptive text for the generate-certificate option */ -#define GENERATE_CERTIFICATE_DESC (certtool_opt_strs+1089) -/** Upper-cased name for the generate-certificate option */ -#define GENERATE_CERTIFICATE_NAME (certtool_opt_strs+1119) -/** Name string for the generate-certificate option */ -#define GENERATE_CERTIFICATE_name (certtool_opt_strs+1140) -/** Compiled in flag settings for the generate-certificate option */ -#define GENERATE_CERTIFICATE_FLAGS (OPTST_DISABLED) - -/** - * generate-proxy option description: - */ -/** Descriptive text for the generate-proxy option */ -#define GENERATE_PROXY_DESC (certtool_opt_strs+1161) -/** Upper-cased name for the generate-proxy option */ -#define GENERATE_PROXY_NAME (certtool_opt_strs+1191) -/** Name string for the generate-proxy option */ -#define GENERATE_PROXY_name (certtool_opt_strs+1206) -/** Compiled in flag settings for the generate-proxy option */ -#define GENERATE_PROXY_FLAGS (OPTST_DISABLED) - -/** - * generate-crl option description: - */ -/** Descriptive text for the generate-crl option */ -#define GENERATE_CRL_DESC (certtool_opt_strs+1221) -/** Upper-cased name for the generate-crl option */ -#define GENERATE_CRL_NAME (certtool_opt_strs+1236) -/** Name string for the generate-crl option */ -#define GENERATE_CRL_name (certtool_opt_strs+1249) -/** Compiled in flag settings for the generate-crl option */ -#define GENERATE_CRL_FLAGS (OPTST_DISABLED) - -/** - * update-certificate option description: - */ -/** Descriptive text for the update-certificate option */ -#define UPDATE_CERTIFICATE_DESC (certtool_opt_strs+1262) -/** Upper-cased name for the update-certificate option */ -#define UPDATE_CERTIFICATE_NAME (certtool_opt_strs+1290) -/** Name string for the update-certificate option */ -#define UPDATE_CERTIFICATE_name (certtool_opt_strs+1309) -/** Compiled in flag settings for the update-certificate option */ -#define UPDATE_CERTIFICATE_FLAGS (OPTST_DISABLED) - -/** - * generate-privkey option description: - */ -/** Descriptive text for the generate-privkey option */ -#define GENERATE_PRIVKEY_DESC (certtool_opt_strs+1328) -/** Upper-cased name for the generate-privkey option */ -#define GENERATE_PRIVKEY_NAME (certtool_opt_strs+1351) -/** Name string for the generate-privkey option */ -#define GENERATE_PRIVKEY_name (certtool_opt_strs+1368) -/** Compiled in flag settings for the generate-privkey option */ -#define GENERATE_PRIVKEY_FLAGS (OPTST_DISABLED) - -/** - * provable option description: - */ -/** Descriptive text for the provable option */ -#define PROVABLE_DESC (certtool_opt_strs+1385) -/** Upper-cased name for the provable option */ -#define PROVABLE_NAME (certtool_opt_strs+1458) -/** Name string for the provable option */ -#define PROVABLE_name (certtool_opt_strs+1467) -/** Compiled in flag settings for the provable option */ -#define PROVABLE_FLAGS (OPTST_DISABLED) - -/** - * verify-provable-privkey option description: - */ -/** Descriptive text for the verify-provable-privkey option */ -#define VERIFY_PROVABLE_PRIVKEY_DESC (certtool_opt_strs+1476) -/** Upper-cased name for the verify-provable-privkey option */ -#define VERIFY_PROVABLE_PRIVKEY_NAME (certtool_opt_strs+1543) -/** Name string for the verify-provable-privkey option */ -#define VERIFY_PROVABLE_PRIVKEY_name (certtool_opt_strs+1567) -/** Compiled in flag settings for the verify-provable-privkey option */ -#define VERIFY_PROVABLE_PRIVKEY_FLAGS (OPTST_DISABLED) - -/** - * seed option description: - */ -/** Descriptive text for the seed option */ -#define SEED_DESC (certtool_opt_strs+1591) -/** Upper-cased name for the seed option */ -#define SEED_NAME (certtool_opt_strs+1652) -/** Name string for the seed option */ -#define SEED_name (certtool_opt_strs+1657) -/** Compiled in flag settings for the seed option */ -#define SEED_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * generate-request option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the generate-request option */ -#define GENERATE_REQUEST_DESC (certtool_opt_strs+1662) -/** Upper-cased name for the generate-request option */ -#define GENERATE_REQUEST_NAME (certtool_opt_strs+1702) -/** Name string for the generate-request option */ -#define GENERATE_REQUEST_name (certtool_opt_strs+1719) -/** Other options that appear in conjunction with the generate-request option */ -static int const aGenerate_RequestCantList[] = { - INDEX_OPT_INFILE, NO_EQUIVALENT }; -/** Compiled in flag settings for the generate-request option */ -#define GENERATE_REQUEST_FLAGS (OPTST_DISABLED) - -/** - * verify-chain option description: - */ -/** Descriptive text for the verify-chain option */ -#define VERIFY_CHAIN_DESC (certtool_opt_strs+1736) -/** Upper-cased name for the verify-chain option */ -#define VERIFY_CHAIN_NAME (certtool_opt_strs+1775) -/** Name string for the verify-chain option */ -#define VERIFY_CHAIN_name (certtool_opt_strs+1788) -/** Compiled in flag settings for the verify-chain option */ -#define VERIFY_CHAIN_FLAGS (OPTST_DISABLED) - -/** - * verify option description: - */ -/** Descriptive text for the verify option */ -#define VERIFY_DESC (certtool_opt_strs+1801) -/** Upper-cased name for the verify option */ -#define VERIFY_NAME (certtool_opt_strs+1864) -/** Name string for the verify option */ -#define VERIFY_name (certtool_opt_strs+1871) -/** Compiled in flag settings for the verify option */ -#define VERIFY_FLAGS (OPTST_DISABLED) - -/** - * verify-crl option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the verify-crl option */ -#define VERIFY_CRL_DESC (certtool_opt_strs+1878) -/** Upper-cased name for the verify-crl option */ -#define VERIFY_CRL_NAME (certtool_opt_strs+1936) -/** Name string for the verify-crl option */ -#define VERIFY_CRL_name (certtool_opt_strs+1947) -/** Other options that are required by the verify-crl option */ -static int const aVerify_CrlMustList[] = { - INDEX_OPT_LOAD_CA_CERTIFICATE, NO_EQUIVALENT }; -/** Compiled in flag settings for the verify-crl option */ -#define VERIFY_CRL_FLAGS (OPTST_DISABLED) - -/** - * verify-hostname option description: - */ -/** Descriptive text for the verify-hostname option */ -#define VERIFY_HOSTNAME_DESC (certtool_opt_strs+1958) -/** Upper-cased name for the verify-hostname option */ -#define VERIFY_HOSTNAME_NAME (certtool_opt_strs+2023) -/** Name string for the verify-hostname option */ -#define VERIFY_HOSTNAME_name (certtool_opt_strs+2039) -/** Compiled in flag settings for the verify-hostname option */ -#define VERIFY_HOSTNAME_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * verify-email option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the verify-email option */ -#define VERIFY_EMAIL_DESC (certtool_opt_strs+2055) -/** Upper-cased name for the verify-email option */ -#define VERIFY_EMAIL_NAME (certtool_opt_strs+2117) -/** Name string for the verify-email option */ -#define VERIFY_EMAIL_name (certtool_opt_strs+2130) -/** Other options that appear in conjunction with the verify-email option */ -static int const aVerify_EmailCantList[] = { - INDEX_OPT_VERIFY_HOSTNAME, NO_EQUIVALENT }; -/** Compiled in flag settings for the verify-email option */ -#define VERIFY_EMAIL_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * verify-purpose option description: - */ -/** Descriptive text for the verify-purpose option */ -#define VERIFY_PURPOSE_DESC (certtool_opt_strs+2143) -/** Upper-cased name for the verify-purpose option */ -#define VERIFY_PURPOSE_NAME (certtool_opt_strs+2211) -/** Name string for the verify-purpose option */ -#define VERIFY_PURPOSE_name (certtool_opt_strs+2226) -/** Compiled in flag settings for the verify-purpose option */ -#define VERIFY_PURPOSE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * verify-allow-broken option description: - */ -/** Descriptive text for the verify-allow-broken option */ -#define VERIFY_ALLOW_BROKEN_DESC (certtool_opt_strs+2241) -/** Upper-cased name for the verify-allow-broken option */ -#define VERIFY_ALLOW_BROKEN_NAME (certtool_opt_strs+2295) -/** Name string for the verify-allow-broken option */ -#define VERIFY_ALLOW_BROKEN_name (certtool_opt_strs+2315) -/** Compiled in flag settings for the verify-allow-broken option */ -#define VERIFY_ALLOW_BROKEN_FLAGS (OPTST_DISABLED) - -/** - * generate-dh-params option description: - */ -/** Descriptive text for the generate-dh-params option */ -#define GENERATE_DH_PARAMS_DESC (certtool_opt_strs+2335) -/** Upper-cased name for the generate-dh-params option */ -#define GENERATE_DH_PARAMS_NAME (certtool_opt_strs+2386) -/** Name string for the generate-dh-params option */ -#define GENERATE_DH_PARAMS_name (certtool_opt_strs+2405) -/** Compiled in flag settings for the generate-dh-params option */ -#define GENERATE_DH_PARAMS_FLAGS (OPTST_DISABLED) - -/** - * get-dh-params option description: - */ -/** Descriptive text for the get-dh-params option */ -#define GET_DH_PARAMS_DESC (certtool_opt_strs+2424) -/** Upper-cased name for the get-dh-params option */ -#define GET_DH_PARAMS_NAME (certtool_opt_strs+2483) -/** Name string for the get-dh-params option */ -#define GET_DH_PARAMS_name (certtool_opt_strs+2497) -/** Compiled in flag settings for the get-dh-params option */ -#define GET_DH_PARAMS_FLAGS (OPTST_DISABLED) - -/** - * dh-info option description: - */ -/** Descriptive text for the dh-info option */ -#define DH_INFO_DESC (certtool_opt_strs+2511) -/** Upper-cased name for the dh-info option */ -#define DH_INFO_NAME (certtool_opt_strs+2571) -/** Name string for the dh-info option */ -#define DH_INFO_name (certtool_opt_strs+2579) -/** Compiled in flag settings for the dh-info option */ -#define DH_INFO_FLAGS (OPTST_DISABLED) - -/** - * load-privkey option description: - */ -/** Descriptive text for the load-privkey option */ -#define LOAD_PRIVKEY_DESC (certtool_opt_strs+2587) -/** Upper-cased name for the load-privkey option */ -#define LOAD_PRIVKEY_NAME (certtool_opt_strs+2612) -/** Name string for the load-privkey option */ -#define LOAD_PRIVKEY_name (certtool_opt_strs+2625) -/** Compiled in flag settings for the load-privkey option */ -#define LOAD_PRIVKEY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * load-pubkey option description: - */ -/** Descriptive text for the load-pubkey option */ -#define LOAD_PUBKEY_DESC (certtool_opt_strs+2638) -/** Upper-cased name for the load-pubkey option */ -#define LOAD_PUBKEY_NAME (certtool_opt_strs+2662) -/** Name string for the load-pubkey option */ -#define LOAD_PUBKEY_name (certtool_opt_strs+2674) -/** Compiled in flag settings for the load-pubkey option */ -#define LOAD_PUBKEY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * load-request option description: - */ -/** Descriptive text for the load-request option */ -#define LOAD_REQUEST_DESC (certtool_opt_strs+2686) -/** Upper-cased name for the load-request option */ -#define LOAD_REQUEST_NAME (certtool_opt_strs+2719) -/** Name string for the load-request option */ -#define LOAD_REQUEST_name (certtool_opt_strs+2732) -/** Compiled in flag settings for the load-request option */ -#define LOAD_REQUEST_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * load-certificate option description: - */ -/** Descriptive text for the load-certificate option */ -#define LOAD_CERTIFICATE_DESC (certtool_opt_strs+2745) -/** Upper-cased name for the load-certificate option */ -#define LOAD_CERTIFICATE_NAME (certtool_opt_strs+2770) -/** Name string for the load-certificate option */ -#define LOAD_CERTIFICATE_name (certtool_opt_strs+2787) -/** Compiled in flag settings for the load-certificate option */ -#define LOAD_CERTIFICATE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * load-ca-privkey option description: - */ -/** Descriptive text for the load-ca-privkey option */ -#define LOAD_CA_PRIVKEY_DESC (certtool_opt_strs+2804) -/** Upper-cased name for the load-ca-privkey option */ -#define LOAD_CA_PRIVKEY_NAME (certtool_opt_strs+2855) -/** Name string for the load-ca-privkey option */ -#define LOAD_CA_PRIVKEY_name (certtool_opt_strs+2871) -/** Compiled in flag settings for the load-ca-privkey option */ -#define LOAD_CA_PRIVKEY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * load-ca-certificate option description: - */ -/** Descriptive text for the load-ca-certificate option */ -#define LOAD_CA_CERTIFICATE_DESC (certtool_opt_strs+2887) -/** Upper-cased name for the load-ca-certificate option */ -#define LOAD_CA_CERTIFICATE_NAME (certtool_opt_strs+2938) -/** Name string for the load-ca-certificate option */ -#define LOAD_CA_CERTIFICATE_name (certtool_opt_strs+2958) -/** Compiled in flag settings for the load-ca-certificate option */ -#define LOAD_CA_CERTIFICATE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * load-crl option description: - */ -/** Descriptive text for the load-crl option */ -#define LOAD_CRL_DESC (certtool_opt_strs+2978) -/** Upper-cased name for the load-crl option */ -#define LOAD_CRL_NAME (certtool_opt_strs+3001) -/** Name string for the load-crl option */ -#define LOAD_CRL_name (certtool_opt_strs+3010) -/** Compiled in flag settings for the load-crl option */ -#define LOAD_CRL_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * load-data option description: - */ -/** Descriptive text for the load-data option */ -#define LOAD_DATA_DESC (certtool_opt_strs+3019) -/** Upper-cased name for the load-data option */ -#define LOAD_DATA_NAME (certtool_opt_strs+3040) -/** Name string for the load-data option */ -#define LOAD_DATA_name (certtool_opt_strs+3050) -/** Compiled in flag settings for the load-data option */ -#define LOAD_DATA_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * password option description: - */ -/** Descriptive text for the password option */ -#define PASSWORD_DESC (certtool_opt_strs+3060) -/** Upper-cased name for the password option */ -#define PASSWORD_NAME (certtool_opt_strs+3076) -/** Name string for the password option */ -#define PASSWORD_name (certtool_opt_strs+3085) -/** Compiled in flag settings for the password option */ -#define PASSWORD_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * null-password option description: - */ -/** Descriptive text for the null-password option */ -#define NULL_PASSWORD_DESC (certtool_opt_strs+3094) -/** Upper-cased name for the null-password option */ -#define NULL_PASSWORD_NAME (certtool_opt_strs+3118) -/** Name string for the null-password option */ -#define NULL_PASSWORD_name (certtool_opt_strs+3132) -/** Compiled in flag settings for the null-password option */ -#define NULL_PASSWORD_FLAGS (OPTST_DISABLED) - -/** - * empty-password option description: - */ -/** Descriptive text for the empty-password option */ -#define EMPTY_PASSWORD_DESC (certtool_opt_strs+3146) -/** Upper-cased name for the empty-password option */ -#define EMPTY_PASSWORD_NAME (certtool_opt_strs+3172) -/** Name string for the empty-password option */ -#define EMPTY_PASSWORD_name (certtool_opt_strs+3187) -/** Compiled in flag settings for the empty-password option */ -#define EMPTY_PASSWORD_FLAGS (OPTST_DISABLED) - -/** - * hex-numbers option description: - */ -/** Descriptive text for the hex-numbers option */ -#define HEX_NUMBERS_DESC (certtool_opt_strs+3202) -/** Upper-cased name for the hex-numbers option */ -#define HEX_NUMBERS_NAME (certtool_opt_strs+3248) -/** Name string for the hex-numbers option */ -#define HEX_NUMBERS_name (certtool_opt_strs+3260) -/** Compiled in flag settings for the hex-numbers option */ -#define HEX_NUMBERS_FLAGS (OPTST_DISABLED) - -/** - * cprint option description: - */ -/** Descriptive text for the cprint option */ -#define CPRINT_DESC (certtool_opt_strs+3272) -/** Upper-cased name for the cprint option */ -#define CPRINT_NAME (certtool_opt_strs+3341) -/** Name string for the cprint option */ -#define CPRINT_name (certtool_opt_strs+3348) -/** Compiled in flag settings for the cprint option */ -#define CPRINT_FLAGS (OPTST_DISABLED) - -/** - * certificate-info option description: - */ -/** Descriptive text for the certificate-info option */ -#define CERTIFICATE_INFO_DESC (certtool_opt_strs+3355) -/** Upper-cased name for the certificate-info option */ -#define CERTIFICATE_INFO_NAME (certtool_opt_strs+3398) -/** Name string for the certificate-info option */ -#define CERTIFICATE_INFO_name (certtool_opt_strs+3415) -/** Compiled in flag settings for the certificate-info option */ -#define CERTIFICATE_INFO_FLAGS (OPTST_DISABLED) - -/** - * fingerprint option description: - */ -/** Descriptive text for the fingerprint option */ -#define FINGERPRINT_DESC (certtool_opt_strs+3432) -/** Upper-cased name for the fingerprint option */ -#define FINGERPRINT_NAME (certtool_opt_strs+3479) -/** Name string for the fingerprint option */ -#define FINGERPRINT_name (certtool_opt_strs+3491) -/** Compiled in flag settings for the fingerprint option */ -#define FINGERPRINT_FLAGS (OPTST_DISABLED) - -/** - * key-id option description: - */ -/** Descriptive text for the key-id option */ -#define KEY_ID_DESC (certtool_opt_strs+3503) -/** Upper-cased name for the key-id option */ -#define KEY_ID_NAME (certtool_opt_strs+3545) -/** Name string for the key-id option */ -#define KEY_ID_name (certtool_opt_strs+3552) -/** Compiled in flag settings for the key-id option */ -#define KEY_ID_FLAGS (OPTST_DISABLED) - -/** - * certificate-pubkey option description: - */ -/** Descriptive text for the certificate-pubkey option */ -#define CERTIFICATE_PUBKEY_DESC (certtool_opt_strs+3559) -/** Upper-cased name for the certificate-pubkey option */ -#define CERTIFICATE_PUBKEY_NAME (certtool_opt_strs+3590) -/** Name string for the certificate-pubkey option */ -#define CERTIFICATE_PUBKEY_name (certtool_opt_strs+3609) -/** Compiled in flag settings for the certificate-pubkey option */ -#define CERTIFICATE_PUBKEY_FLAGS (OPTST_DISABLED) - -/** - * pgp-certificate-info option description: - */ -/** Descriptive text for the pgp-certificate-info option */ -#define PGP_CERTIFICATE_INFO_DESC (certtool_opt_strs+3628) -/** Upper-cased name for the pgp-certificate-info option */ -#define PGP_CERTIFICATE_INFO_NAME (certtool_opt_strs+3679) -/** Name string for the pgp-certificate-info option */ -#define PGP_CERTIFICATE_INFO_name (certtool_opt_strs+3700) -/** Compiled in flag settings for the pgp-certificate-info option */ -#define PGP_CERTIFICATE_INFO_FLAGS (OPTST_DISABLED) - -/** - * pgp-ring-info option description: - */ -/** Descriptive text for the pgp-ring-info option */ -#define PGP_RING_INFO_DESC (certtool_opt_strs+3721) -/** Upper-cased name for the pgp-ring-info option */ -#define PGP_RING_INFO_NAME (certtool_opt_strs+3778) -/** Name string for the pgp-ring-info option */ -#define PGP_RING_INFO_name (certtool_opt_strs+3792) -/** Compiled in flag settings for the pgp-ring-info option */ -#define PGP_RING_INFO_FLAGS (OPTST_DISABLED) - -/** - * crl-info option description: - */ -/** Descriptive text for the crl-info option */ -#define CRL_INFO_DESC (certtool_opt_strs+3806) -/** Upper-cased name for the crl-info option */ -#define CRL_INFO_NAME (certtool_opt_strs+3851) -/** Name string for the crl-info option */ -#define CRL_INFO_name (certtool_opt_strs+3860) -/** Compiled in flag settings for the crl-info option */ -#define CRL_INFO_FLAGS (OPTST_DISABLED) - -/** - * crq-info option description: - */ -/** Descriptive text for the crq-info option */ -#define CRQ_INFO_DESC (certtool_opt_strs+3869) -/** Upper-cased name for the crq-info option */ -#define CRQ_INFO_NAME (certtool_opt_strs+3920) -/** Name string for the crq-info option */ -#define CRQ_INFO_name (certtool_opt_strs+3929) -/** Compiled in flag settings for the crq-info option */ -#define CRQ_INFO_FLAGS (OPTST_DISABLED) - -/** - * no-crq-extensions option description: - */ -/** Descriptive text for the no-crq-extensions option */ -#define NO_CRQ_EXTENSIONS_DESC (certtool_opt_strs+3938) -/** Upper-cased name for the no-crq-extensions option */ -#define NO_CRQ_EXTENSIONS_NAME (certtool_opt_strs+3984) -/** Name string for the no-crq-extensions option */ -#define NO_CRQ_EXTENSIONS_name (certtool_opt_strs+4002) -/** Compiled in flag settings for the no-crq-extensions option */ -#define NO_CRQ_EXTENSIONS_FLAGS (OPTST_DISABLED) - -/** - * p12-info option description: - */ -/** Descriptive text for the p12-info option */ -#define P12_INFO_DESC (certtool_opt_strs+4020) -/** Upper-cased name for the p12-info option */ -#define P12_INFO_NAME (certtool_opt_strs+4062) -/** Name string for the p12-info option */ -#define P12_INFO_name (certtool_opt_strs+4071) -/** Compiled in flag settings for the p12-info option */ -#define P12_INFO_FLAGS (OPTST_DISABLED) - -/** - * p12-name option description: - */ -/** Descriptive text for the p12-name option */ -#define P12_NAME_DESC (certtool_opt_strs+4080) -/** Upper-cased name for the p12-name option */ -#define P12_NAME_NAME (certtool_opt_strs+4114) -/** Name string for the p12-name option */ -#define P12_NAME_name (certtool_opt_strs+4123) -/** Compiled in flag settings for the p12-name option */ -#define P12_NAME_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * p7-generate option description: - */ -/** Descriptive text for the p7-generate option */ -#define P7_GENERATE_DESC (certtool_opt_strs+4132) -/** Upper-cased name for the p7-generate option */ -#define P7_GENERATE_NAME (certtool_opt_strs+4161) -/** Name string for the p7-generate option */ -#define P7_GENERATE_name (certtool_opt_strs+4173) -/** Compiled in flag settings for the p7-generate option */ -#define P7_GENERATE_FLAGS (OPTST_DISABLED) - -/** - * p7-sign option description: - */ -/** Descriptive text for the p7-sign option */ -#define P7_SIGN_DESC (certtool_opt_strs+4185) -/** Upper-cased name for the p7-sign option */ -#define P7_SIGN_NAME (certtool_opt_strs+4217) -/** Name string for the p7-sign option */ -#define P7_SIGN_name (certtool_opt_strs+4225) -/** Compiled in flag settings for the p7-sign option */ -#define P7_SIGN_FLAGS (OPTST_DISABLED) - -/** - * p7-detached-sign option description: - */ -/** Descriptive text for the p7-detached-sign option */ -#define P7_DETACHED_SIGN_DESC (certtool_opt_strs+4233) -/** Upper-cased name for the p7-detached-sign option */ -#define P7_DETACHED_SIGN_NAME (certtool_opt_strs+4274) -/** Name string for the p7-detached-sign option */ -#define P7_DETACHED_SIGN_name (certtool_opt_strs+4291) -/** Compiled in flag settings for the p7-detached-sign option */ -#define P7_DETACHED_SIGN_FLAGS (OPTST_DISABLED) - -/** - * p7-include-cert option description: - */ -/** Descriptive text for the p7-include-cert option */ -#define P7_INCLUDE_CERT_DESC (certtool_opt_strs+4308) -/** Upper-cased name for the p7-include-cert option */ -#define P7_INCLUDE_CERT_NAME (certtool_opt_strs+4368) -/** disablement name for the p7-include-cert option */ -#define NOT_P7_INCLUDE_CERT_name (certtool_opt_strs+4384) -/** disablement prefix for the p7-include-cert option */ -#define NOT_P7_INCLUDE_CERT_PFX (certtool_opt_strs+4403) -/** Name string for the p7-include-cert option */ -#define P7_INCLUDE_CERT_name (NOT_P7_INCLUDE_CERT_name + 3) -/** Compiled in flag settings for the p7-include-cert option */ -#define P7_INCLUDE_CERT_FLAGS (OPTST_INITENABLED) - -/** - * p7-time option description: - */ -/** Descriptive text for the p7-time option */ -#define P7_TIME_DESC (certtool_opt_strs+4406) -/** Upper-cased name for the p7-time option */ -#define P7_TIME_NAME (certtool_opt_strs+4456) -/** disablement name for the p7-time option */ -#define NOT_P7_TIME_name (certtool_opt_strs+4464) -/** disablement prefix for the p7-time option */ -#define NOT_P7_TIME_PFX (certtool_opt_strs+4403) -/** Name string for the p7-time option */ -#define P7_TIME_name (NOT_P7_TIME_name + 3) -/** Compiled in flag settings for the p7-time option */ -#define P7_TIME_FLAGS (OPTST_DISABLED) - -/** - * p7-show-data option description: - */ -/** Descriptive text for the p7-show-data option */ -#define P7_SHOW_DATA_DESC (certtool_opt_strs+4475) -/** Upper-cased name for the p7-show-data option */ -#define P7_SHOW_DATA_NAME (certtool_opt_strs+4528) -/** disablement name for the p7-show-data option */ -#define NOT_P7_SHOW_DATA_name (certtool_opt_strs+4541) -/** disablement prefix for the p7-show-data option */ -#define NOT_P7_SHOW_DATA_PFX (certtool_opt_strs+4403) -/** Name string for the p7-show-data option */ -#define P7_SHOW_DATA_name (NOT_P7_SHOW_DATA_name + 3) -/** Compiled in flag settings for the p7-show-data option */ -#define P7_SHOW_DATA_FLAGS (OPTST_DISABLED) - -/** - * p7-info option description: - */ -/** Descriptive text for the p7-info option */ -#define P7_INFO_DESC (certtool_opt_strs+4557) -/** Upper-cased name for the p7-info option */ -#define P7_INFO_NAME (certtool_opt_strs+4598) -/** Name string for the p7-info option */ -#define P7_INFO_name (certtool_opt_strs+4606) -/** Compiled in flag settings for the p7-info option */ -#define P7_INFO_FLAGS (OPTST_DISABLED) - -/** - * p7-verify option description: - */ -/** Descriptive text for the p7-verify option */ -#define P7_VERIFY_DESC (certtool_opt_strs+4614) -/** Upper-cased name for the p7-verify option */ -#define P7_VERIFY_NAME (certtool_opt_strs+4652) -/** Name string for the p7-verify option */ -#define P7_VERIFY_name (certtool_opt_strs+4662) -/** Compiled in flag settings for the p7-verify option */ -#define P7_VERIFY_FLAGS (OPTST_DISABLED) - -/** - * p8-info option description: - */ -/** Descriptive text for the p8-info option */ -#define P8_INFO_DESC (certtool_opt_strs+4672) -/** Upper-cased name for the p8-info option */ -#define P8_INFO_NAME (certtool_opt_strs+4713) -/** Name string for the p8-info option */ -#define P8_INFO_name (certtool_opt_strs+4721) -/** Compiled in flag settings for the p8-info option */ -#define P8_INFO_FLAGS (OPTST_DISABLED) - -/** - * smime-to-p7 option description: - */ -/** Descriptive text for the smime-to-p7 option */ -#define SMIME_TO_P7_DESC (certtool_opt_strs+4729) -/** Upper-cased name for the smime-to-p7 option */ -#define SMIME_TO_P7_NAME (certtool_opt_strs+4765) -/** Name string for the smime-to-p7 option */ -#define SMIME_TO_P7_name (certtool_opt_strs+4777) -/** Compiled in flag settings for the smime-to-p7 option */ -#define SMIME_TO_P7_FLAGS (OPTST_DISABLED) - -/** - * key-info option description: - */ -/** Descriptive text for the key-info option */ -#define KEY_INFO_DESC (certtool_opt_strs+4789) -/** Upper-cased name for the key-info option */ -#define KEY_INFO_NAME (certtool_opt_strs+4824) -/** Name string for the key-info option */ -#define KEY_INFO_name (certtool_opt_strs+4833) -/** Compiled in flag settings for the key-info option */ -#define KEY_INFO_FLAGS (OPTST_DISABLED) - -/** - * pgp-key-info option description: - */ -/** Descriptive text for the pgp-key-info option */ -#define PGP_KEY_INFO_DESC (certtool_opt_strs+4842) -/** Upper-cased name for the pgp-key-info option */ -#define PGP_KEY_INFO_NAME (certtool_opt_strs+4886) -/** Name string for the pgp-key-info option */ -#define PGP_KEY_INFO_name (certtool_opt_strs+4899) -/** Compiled in flag settings for the pgp-key-info option */ -#define PGP_KEY_INFO_FLAGS (OPTST_DISABLED) - -/** - * pubkey-info option description: - */ -/** Descriptive text for the pubkey-info option */ -#define PUBKEY_INFO_DESC (certtool_opt_strs+4912) -/** Upper-cased name for the pubkey-info option */ -#define PUBKEY_INFO_NAME (certtool_opt_strs+4946) -/** Name string for the pubkey-info option */ -#define PUBKEY_INFO_name (certtool_opt_strs+4958) -/** Compiled in flag settings for the pubkey-info option */ -#define PUBKEY_INFO_FLAGS (OPTST_DISABLED) - -/** - * v1 option description: - */ -/** Descriptive text for the v1 option */ -#define V1_DESC (certtool_opt_strs+4970) -/** Upper-cased name for the v1 option */ -#define V1_NAME (certtool_opt_strs+5031) -/** Name string for the v1 option */ -#define V1_name (certtool_opt_strs+5034) -/** Compiled in flag settings for the v1 option */ -#define V1_FLAGS (OPTST_DISABLED) - -/** - * to-p12 option description: - */ -/** Descriptive text for the to-p12 option */ -#define TO_P12_DESC (certtool_opt_strs+5037) -/** Upper-cased name for the to-p12 option */ -#define TO_P12_NAME (certtool_opt_strs+5067) -/** Name string for the to-p12 option */ -#define TO_P12_name (certtool_opt_strs+5074) -/** Compiled in flag settings for the to-p12 option */ -#define TO_P12_FLAGS (OPTST_DISABLED) - -/** - * to-p8 option description: - */ -/** Descriptive text for the to-p8 option */ -#define TO_P8_DESC (certtool_opt_strs+5081) -/** Upper-cased name for the to-p8 option */ -#define TO_P8_NAME (certtool_opt_strs+5110) -/** Name string for the to-p8 option */ -#define TO_P8_name (certtool_opt_strs+5116) -/** Compiled in flag settings for the to-p8 option */ -#define TO_P8_FLAGS (OPTST_DISABLED) - -/** - * pkcs8 option description: - */ -/** Descriptive text for the pkcs8 option */ -#define PKCS8_DESC (certtool_opt_strs+5122) -/** Upper-cased name for the pkcs8 option */ -#define PKCS8_NAME (certtool_opt_strs+5158) -/** Name string for the pkcs8 option */ -#define PKCS8_name (certtool_opt_strs+5164) -/** Compiled in flag settings for the pkcs8 option */ -#define PKCS8_FLAGS (OPTST_DISABLED) - -/** - * rsa option description: - */ -/** Descriptive text for the rsa option */ -#define RSA_DESC (certtool_opt_strs+5170) -/** Upper-cased name for the rsa option */ -#define RSA_NAME (certtool_opt_strs+5187) -/** Name string for the rsa option */ -#define RSA_name (certtool_opt_strs+5191) -/** Compiled in flag settings for the rsa option */ -#define RSA_FLAGS (OPTST_DISABLED) - -/** - * dsa option description: - */ -/** Descriptive text for the dsa option */ -#define DSA_DESC (certtool_opt_strs+5195) -/** Upper-cased name for the dsa option */ -#define DSA_NAME (certtool_opt_strs+5212) -/** Name string for the dsa option */ -#define DSA_name (certtool_opt_strs+5216) -/** Compiled in flag settings for the dsa option */ -#define DSA_FLAGS (OPTST_DISABLED) - -/** - * ecc option description: - */ -/** Descriptive text for the ecc option */ -#define ECC_DESC (certtool_opt_strs+5220) -/** Upper-cased name for the ecc option */ -#define ECC_NAME (certtool_opt_strs+5245) -/** Name string for the ecc option */ -#define ECC_name (certtool_opt_strs+5249) -/** Compiled in flag settings for the ecc option */ -#define ECC_FLAGS (OPTST_DISABLED) - -/** - * ecdsa option description: - */ -/** Descriptive text for the ecdsa option */ -#define ECDSA_DESC (certtool_opt_strs+5253) -#define ECDSA_NAME NULL -/** Unmodified name string for the ecdsa option */ -#define ECDSA_name (certtool_opt_strs+5283) -/** Compiled in flag settings for the ecdsa option */ -#define ECDSA_FLAGS (ECC_FLAGS | OPTST_ALIAS) - -/** - * hash option description: - */ -/** Descriptive text for the hash option */ -#define HASH_DESC (certtool_opt_strs+5289) -/** Upper-cased name for the hash option */ -#define HASH_NAME (certtool_opt_strs+5323) -/** Name string for the hash option */ -#define HASH_name (certtool_opt_strs+5328) -/** Compiled in flag settings for the hash option */ -#define HASH_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * inder option description: - */ -/** Descriptive text for the inder option */ -#define INDER_DESC (certtool_opt_strs+5333) -/** Upper-cased name for the inder option */ -#define INDER_NAME (certtool_opt_strs+5404) -/** disablement name for the inder option */ -#define NOT_INDER_name (certtool_opt_strs+5410) -/** disablement prefix for the inder option */ -#define NOT_INDER_PFX (certtool_opt_strs+4403) -/** Name string for the inder option */ -#define INDER_name (NOT_INDER_name + 3) -/** Compiled in flag settings for the inder option */ -#define INDER_FLAGS (OPTST_DISABLED) - -/** - * inraw option description: - */ -/** Descriptive text for the inraw option */ -#define INRAW_DESC (certtool_opt_strs+5419) -#define INRAW_NAME NULL -/** Unmodified name string for the inraw option */ -#define INRAW_name (certtool_opt_strs+5451) -/** Compiled in flag settings for the inraw option */ -#define INRAW_FLAGS (INDER_FLAGS | OPTST_ALIAS) - -/** - * outder option description: - */ -/** Descriptive text for the outder option */ -#define OUTDER_DESC (certtool_opt_strs+5457) -/** Upper-cased name for the outder option */ -#define OUTDER_NAME (certtool_opt_strs+5529) -/** disablement name for the outder option */ -#define NOT_OUTDER_name (certtool_opt_strs+5536) -/** disablement prefix for the outder option */ -#define NOT_OUTDER_PFX (certtool_opt_strs+4403) -/** Name string for the outder option */ -#define OUTDER_name (NOT_OUTDER_name + 3) -/** Compiled in flag settings for the outder option */ -#define OUTDER_FLAGS (OPTST_DISABLED) - -/** - * outraw option description: - */ -/** Descriptive text for the outraw option */ -#define OUTRAW_DESC (certtool_opt_strs+5546) -#define OUTRAW_NAME NULL -/** Unmodified name string for the outraw option */ -#define OUTRAW_name (certtool_opt_strs+5579) -/** Compiled in flag settings for the outraw option */ -#define OUTRAW_FLAGS (OUTDER_FLAGS | OPTST_ALIAS) - -/** - * bits option description: - */ -/** Descriptive text for the bits option */ -#define BITS_DESC (certtool_opt_strs+5586) -/** Upper-cased name for the bits option */ -#define BITS_NAME (certtool_opt_strs+5630) -/** Name string for the bits option */ -#define BITS_name (certtool_opt_strs+5635) -/** Compiled in flag settings for the bits option */ -#define BITS_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * curve option description: - */ -/** Descriptive text for the curve option */ -#define CURVE_DESC (certtool_opt_strs+5640) -/** Upper-cased name for the curve option */ -#define CURVE_NAME (certtool_opt_strs+5685) -/** Name string for the curve option */ -#define CURVE_name (certtool_opt_strs+5691) -/** Compiled in flag settings for the curve option */ -#define CURVE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * sec-param option description: - */ -/** Descriptive text for the sec-param option */ -#define SEC_PARAM_DESC (certtool_opt_strs+5697) -/** Upper-cased name for the sec-param option */ -#define SEC_PARAM_NAME (certtool_opt_strs+5759) -/** Name string for the sec-param option */ -#define SEC_PARAM_name (certtool_opt_strs+5769) -/** Compiled in flag settings for the sec-param option */ -#define SEC_PARAM_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * disable-quick-random option description: - */ -/** Descriptive text for the disable-quick-random option */ -#define DISABLE_QUICK_RANDOM_DESC (certtool_opt_strs+5779) -/** Upper-cased name for the disable-quick-random option */ -#define DISABLE_QUICK_RANDOM_NAME (certtool_opt_strs+5789) -/** Name string for the disable-quick-random option */ -#define DISABLE_QUICK_RANDOM_name (certtool_opt_strs+5810) -/** Compiled in flag settings for the disable-quick-random option */ -#define DISABLE_QUICK_RANDOM_FLAGS (OPTST_DISABLED) - -/** - * template option description: - */ -/** Descriptive text for the template option */ -#define TEMPLATE_DESC (certtool_opt_strs+5831) -/** Upper-cased name for the template option */ -#define TEMPLATE_NAME (certtool_opt_strs+5882) -/** Name string for the template option */ -#define TEMPLATE_name (certtool_opt_strs+5891) -/** Compiled in flag settings for the template option */ -#define TEMPLATE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * stdout-info option description: - */ -/** Descriptive text for the stdout-info option */ -#define STDOUT_INFO_DESC (certtool_opt_strs+5900) -/** Upper-cased name for the stdout-info option */ -#define STDOUT_INFO_NAME (certtool_opt_strs+5946) -/** Name string for the stdout-info option */ -#define STDOUT_INFO_name (certtool_opt_strs+5958) -/** Compiled in flag settings for the stdout-info option */ -#define STDOUT_INFO_FLAGS (OPTST_DISABLED) - -/** - * ask-pass option description: - */ -/** Descriptive text for the ask-pass option */ -#define ASK_PASS_DESC (certtool_opt_strs+5970) -/** Upper-cased name for the ask-pass option */ -#define ASK_PASS_NAME (certtool_opt_strs+6031) -/** Name string for the ask-pass option */ -#define ASK_PASS_name (certtool_opt_strs+6040) -/** Compiled in flag settings for the ask-pass option */ -#define ASK_PASS_FLAGS (OPTST_DISABLED) - -/** - * pkcs-cipher option description: - */ -/** Descriptive text for the pkcs-cipher option */ -#define PKCS_CIPHER_DESC (certtool_opt_strs+6049) -/** Upper-cased name for the pkcs-cipher option */ -#define PKCS_CIPHER_NAME (certtool_opt_strs+6094) -/** Name string for the pkcs-cipher option */ -#define PKCS_CIPHER_name (certtool_opt_strs+6106) -/** Compiled in flag settings for the pkcs-cipher option */ -#define PKCS_CIPHER_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * provider option description: - */ -/** Descriptive text for the provider option */ -#define PROVIDER_DESC (certtool_opt_strs+6118) -/** Upper-cased name for the provider option */ -#define PROVIDER_NAME (certtool_opt_strs+6156) -/** Name string for the provider option */ -#define PROVIDER_name (certtool_opt_strs+6165) -/** Compiled in flag settings for the provider option */ -#define PROVIDER_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/* - * Help/More_Help/Version option descriptions: - */ -#define HELP_DESC (certtool_opt_strs+6174) -#define HELP_name (certtool_opt_strs+6218) -#ifdef HAVE_WORKING_FORK -#define MORE_HELP_DESC (certtool_opt_strs+6223) -#define MORE_HELP_name (certtool_opt_strs+6268) -#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -#define MORE_HELP_DESC HELP_DESC -#define MORE_HELP_name HELP_name -#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT) -#endif -#ifdef NO_OPTIONAL_OPT_ARGS -# define VER_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ - OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT) -#endif -#define VER_DESC (certtool_opt_strs+6278) -#define VER_name (certtool_opt_strs+6314) -/** - * Declare option callback procedures - */ -extern tOptProc - optionBooleanVal, optionNestedVal, optionNumericVal, - optionPagedUsage, optionPrintVersion, optionResetOpt, - optionStackArg, optionTimeDate, optionTimeVal, - optionUnstackArg, optionVendorOption; -static tOptProc - doOptDebug, doOptEcdsa, doOptInfile, doOptInraw, doOptOutraw, - doUsageOpt; -#define VER_PROC optionPrintVersion - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Define the certtool Option Descriptions. - * This is an array of OPTION_CT entries, one for each - * option that the certtool program responds to. - */ -static tOptDesc optDesc[OPTION_CT] = { - { /* entry idx, value */ 0, VALUE_OPT_DEBUG, - /* equiv idx, value */ 0, VALUE_OPT_DEBUG, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DEBUG_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --debug */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDebug, - /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 1, VALUE_OPT_VERBOSE, - /* equiv idx, value */ 1, VALUE_OPT_VERBOSE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, NOLIMIT, 0, - /* opt state flags */ VERBOSE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verbose */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERBOSE_DESC, VERBOSE_NAME, VERBOSE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 2, VALUE_OPT_INFILE, - /* equiv idx, value */ 2, VALUE_OPT_INFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --infile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptInfile, - /* desc, NAME, name */ INFILE_DESC, INFILE_NAME, INFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 3, VALUE_OPT_OUTFILE, - /* equiv idx, value */ 3, VALUE_OPT_OUTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OUTFILE_DESC, OUTFILE_NAME, OUTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 4, VALUE_OPT_GENERATE_SELF_SIGNED, - /* equiv idx, value */ 4, VALUE_OPT_GENERATE_SELF_SIGNED, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_SELF_SIGNED_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-self-signed */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_SELF_SIGNED_DESC, GENERATE_SELF_SIGNED_NAME, GENERATE_SELF_SIGNED_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 5, VALUE_OPT_GENERATE_CERTIFICATE, - /* equiv idx, value */ 5, VALUE_OPT_GENERATE_CERTIFICATE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_CERTIFICATE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-certificate */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_CERTIFICATE_DESC, GENERATE_CERTIFICATE_NAME, GENERATE_CERTIFICATE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 6, VALUE_OPT_GENERATE_PROXY, - /* equiv idx, value */ 6, VALUE_OPT_GENERATE_PROXY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_PROXY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-proxy */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_PROXY_DESC, GENERATE_PROXY_NAME, GENERATE_PROXY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 7, VALUE_OPT_GENERATE_CRL, - /* equiv idx, value */ 7, VALUE_OPT_GENERATE_CRL, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_CRL_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-crl */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_CRL_DESC, GENERATE_CRL_NAME, GENERATE_CRL_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 8, VALUE_OPT_UPDATE_CERTIFICATE, - /* equiv idx, value */ 8, VALUE_OPT_UPDATE_CERTIFICATE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ UPDATE_CERTIFICATE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --update-certificate */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ UPDATE_CERTIFICATE_DESC, UPDATE_CERTIFICATE_NAME, UPDATE_CERTIFICATE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 9, VALUE_OPT_GENERATE_PRIVKEY, - /* equiv idx, value */ 9, VALUE_OPT_GENERATE_PRIVKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_PRIVKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-privkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_PRIVKEY_DESC, GENERATE_PRIVKEY_NAME, GENERATE_PRIVKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 10, VALUE_OPT_PROVABLE, - /* equiv idx, value */ 10, VALUE_OPT_PROVABLE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PROVABLE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --provable */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PROVABLE_DESC, PROVABLE_NAME, PROVABLE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 11, VALUE_OPT_VERIFY_PROVABLE_PRIVKEY, - /* equiv idx, value */ 11, VALUE_OPT_VERIFY_PROVABLE_PRIVKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VERIFY_PROVABLE_PRIVKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verify-provable-privkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERIFY_PROVABLE_PRIVKEY_DESC, VERIFY_PROVABLE_PRIVKEY_NAME, VERIFY_PROVABLE_PRIVKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 12, VALUE_OPT_SEED, - /* equiv idx, value */ 12, VALUE_OPT_SEED, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SEED_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --seed */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SEED_DESC, SEED_NAME, SEED_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 13, VALUE_OPT_GENERATE_REQUEST, - /* equiv idx, value */ 13, VALUE_OPT_GENERATE_REQUEST, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_REQUEST_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-request */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aGenerate_RequestCantList, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_REQUEST_DESC, GENERATE_REQUEST_NAME, GENERATE_REQUEST_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 14, VALUE_OPT_VERIFY_CHAIN, - /* equiv idx, value */ 14, VALUE_OPT_VERIFY_CHAIN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VERIFY_CHAIN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verify-chain */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERIFY_CHAIN_DESC, VERIFY_CHAIN_NAME, VERIFY_CHAIN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 15, VALUE_OPT_VERIFY, - /* equiv idx, value */ 15, VALUE_OPT_VERIFY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VERIFY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verify */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERIFY_DESC, VERIFY_NAME, VERIFY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 16, VALUE_OPT_VERIFY_CRL, - /* equiv idx, value */ 16, VALUE_OPT_VERIFY_CRL, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VERIFY_CRL_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verify-crl */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ aVerify_CrlMustList, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERIFY_CRL_DESC, VERIFY_CRL_NAME, VERIFY_CRL_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 17, VALUE_OPT_VERIFY_HOSTNAME, - /* equiv idx, value */ 17, VALUE_OPT_VERIFY_HOSTNAME, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VERIFY_HOSTNAME_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verify-hostname */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERIFY_HOSTNAME_DESC, VERIFY_HOSTNAME_NAME, VERIFY_HOSTNAME_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 18, VALUE_OPT_VERIFY_EMAIL, - /* equiv idx, value */ 18, VALUE_OPT_VERIFY_EMAIL, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VERIFY_EMAIL_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verify-email */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aVerify_EmailCantList, - /* option proc */ NULL, - /* desc, NAME, name */ VERIFY_EMAIL_DESC, VERIFY_EMAIL_NAME, VERIFY_EMAIL_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 19, VALUE_OPT_VERIFY_PURPOSE, - /* equiv idx, value */ 19, VALUE_OPT_VERIFY_PURPOSE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VERIFY_PURPOSE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verify-purpose */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERIFY_PURPOSE_DESC, VERIFY_PURPOSE_NAME, VERIFY_PURPOSE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 20, VALUE_OPT_VERIFY_ALLOW_BROKEN, - /* equiv idx, value */ 20, VALUE_OPT_VERIFY_ALLOW_BROKEN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VERIFY_ALLOW_BROKEN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verify-allow-broken */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERIFY_ALLOW_BROKEN_DESC, VERIFY_ALLOW_BROKEN_NAME, VERIFY_ALLOW_BROKEN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 21, VALUE_OPT_GENERATE_DH_PARAMS, - /* equiv idx, value */ 21, VALUE_OPT_GENERATE_DH_PARAMS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_DH_PARAMS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-dh-params */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_DH_PARAMS_DESC, GENERATE_DH_PARAMS_NAME, GENERATE_DH_PARAMS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 22, VALUE_OPT_GET_DH_PARAMS, - /* equiv idx, value */ 22, VALUE_OPT_GET_DH_PARAMS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GET_DH_PARAMS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --get-dh-params */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GET_DH_PARAMS_DESC, GET_DH_PARAMS_NAME, GET_DH_PARAMS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 23, VALUE_OPT_DH_INFO, - /* equiv idx, value */ 23, VALUE_OPT_DH_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DH_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --dh-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DH_INFO_DESC, DH_INFO_NAME, DH_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 24, VALUE_OPT_LOAD_PRIVKEY, - /* equiv idx, value */ 24, VALUE_OPT_LOAD_PRIVKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_PRIVKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-privkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOAD_PRIVKEY_DESC, LOAD_PRIVKEY_NAME, LOAD_PRIVKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 25, VALUE_OPT_LOAD_PUBKEY, - /* equiv idx, value */ 25, VALUE_OPT_LOAD_PUBKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_PUBKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-pubkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOAD_PUBKEY_DESC, LOAD_PUBKEY_NAME, LOAD_PUBKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 26, VALUE_OPT_LOAD_REQUEST, - /* equiv idx, value */ 26, VALUE_OPT_LOAD_REQUEST, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_REQUEST_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-request */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOAD_REQUEST_DESC, LOAD_REQUEST_NAME, LOAD_REQUEST_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 27, VALUE_OPT_LOAD_CERTIFICATE, - /* equiv idx, value */ 27, VALUE_OPT_LOAD_CERTIFICATE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_CERTIFICATE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-certificate */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOAD_CERTIFICATE_DESC, LOAD_CERTIFICATE_NAME, LOAD_CERTIFICATE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 28, VALUE_OPT_LOAD_CA_PRIVKEY, - /* equiv idx, value */ 28, VALUE_OPT_LOAD_CA_PRIVKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_CA_PRIVKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-ca-privkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOAD_CA_PRIVKEY_DESC, LOAD_CA_PRIVKEY_NAME, LOAD_CA_PRIVKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 29, VALUE_OPT_LOAD_CA_CERTIFICATE, - /* equiv idx, value */ 29, VALUE_OPT_LOAD_CA_CERTIFICATE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_CA_CERTIFICATE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-ca-certificate */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOAD_CA_CERTIFICATE_DESC, LOAD_CA_CERTIFICATE_NAME, LOAD_CA_CERTIFICATE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 30, VALUE_OPT_LOAD_CRL, - /* equiv idx, value */ 30, VALUE_OPT_LOAD_CRL, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_CRL_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-crl */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOAD_CRL_DESC, LOAD_CRL_NAME, LOAD_CRL_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 31, VALUE_OPT_LOAD_DATA, - /* equiv idx, value */ 31, VALUE_OPT_LOAD_DATA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_DATA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-data */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOAD_DATA_DESC, LOAD_DATA_NAME, LOAD_DATA_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 32, VALUE_OPT_PASSWORD, - /* equiv idx, value */ 32, VALUE_OPT_PASSWORD, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PASSWORD_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --password */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PASSWORD_DESC, PASSWORD_NAME, PASSWORD_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 33, VALUE_OPT_NULL_PASSWORD, - /* equiv idx, value */ 33, VALUE_OPT_NULL_PASSWORD, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ NULL_PASSWORD_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --null-password */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ NULL_PASSWORD_DESC, NULL_PASSWORD_NAME, NULL_PASSWORD_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 34, VALUE_OPT_EMPTY_PASSWORD, - /* equiv idx, value */ 34, VALUE_OPT_EMPTY_PASSWORD, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ EMPTY_PASSWORD_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --empty-password */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ EMPTY_PASSWORD_DESC, EMPTY_PASSWORD_NAME, EMPTY_PASSWORD_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 35, VALUE_OPT_HEX_NUMBERS, - /* equiv idx, value */ 35, VALUE_OPT_HEX_NUMBERS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ HEX_NUMBERS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --hex-numbers */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ HEX_NUMBERS_DESC, HEX_NUMBERS_NAME, HEX_NUMBERS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 36, VALUE_OPT_CPRINT, - /* equiv idx, value */ 36, VALUE_OPT_CPRINT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CPRINT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --cprint */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CPRINT_DESC, CPRINT_NAME, CPRINT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 37, VALUE_OPT_CERTIFICATE_INFO, - /* equiv idx, value */ 37, VALUE_OPT_CERTIFICATE_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CERTIFICATE_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --certificate-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CERTIFICATE_INFO_DESC, CERTIFICATE_INFO_NAME, CERTIFICATE_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 38, VALUE_OPT_FINGERPRINT, - /* equiv idx, value */ 38, VALUE_OPT_FINGERPRINT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ FINGERPRINT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --fingerprint */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ FINGERPRINT_DESC, FINGERPRINT_NAME, FINGERPRINT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 39, VALUE_OPT_KEY_ID, - /* equiv idx, value */ 39, VALUE_OPT_KEY_ID, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ KEY_ID_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --key-id */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ KEY_ID_DESC, KEY_ID_NAME, KEY_ID_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 40, VALUE_OPT_CERTIFICATE_PUBKEY, - /* equiv idx, value */ 40, VALUE_OPT_CERTIFICATE_PUBKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CERTIFICATE_PUBKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --certificate-pubkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CERTIFICATE_PUBKEY_DESC, CERTIFICATE_PUBKEY_NAME, CERTIFICATE_PUBKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 41, VALUE_OPT_PGP_CERTIFICATE_INFO, - /* equiv idx, value */ 41, VALUE_OPT_PGP_CERTIFICATE_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PGP_CERTIFICATE_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pgp-certificate-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PGP_CERTIFICATE_INFO_DESC, PGP_CERTIFICATE_INFO_NAME, PGP_CERTIFICATE_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 42, VALUE_OPT_PGP_RING_INFO, - /* equiv idx, value */ 42, VALUE_OPT_PGP_RING_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PGP_RING_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pgp-ring-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PGP_RING_INFO_DESC, PGP_RING_INFO_NAME, PGP_RING_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 43, VALUE_OPT_CRL_INFO, - /* equiv idx, value */ 43, VALUE_OPT_CRL_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CRL_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --crl-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CRL_INFO_DESC, CRL_INFO_NAME, CRL_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 44, VALUE_OPT_CRQ_INFO, - /* equiv idx, value */ 44, VALUE_OPT_CRQ_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CRQ_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --crq-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CRQ_INFO_DESC, CRQ_INFO_NAME, CRQ_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 45, VALUE_OPT_NO_CRQ_EXTENSIONS, - /* equiv idx, value */ 45, VALUE_OPT_NO_CRQ_EXTENSIONS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ NO_CRQ_EXTENSIONS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --no-crq-extensions */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ NO_CRQ_EXTENSIONS_DESC, NO_CRQ_EXTENSIONS_NAME, NO_CRQ_EXTENSIONS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 46, VALUE_OPT_P12_INFO, - /* equiv idx, value */ 46, VALUE_OPT_P12_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ P12_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --p12-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ P12_INFO_DESC, P12_INFO_NAME, P12_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 47, VALUE_OPT_P12_NAME, - /* equiv idx, value */ 47, VALUE_OPT_P12_NAME, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ P12_NAME_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --p12-name */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ P12_NAME_DESC, P12_NAME_NAME, P12_NAME_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 48, VALUE_OPT_P7_GENERATE, - /* equiv idx, value */ 48, VALUE_OPT_P7_GENERATE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ P7_GENERATE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --p7-generate */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ P7_GENERATE_DESC, P7_GENERATE_NAME, P7_GENERATE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 49, VALUE_OPT_P7_SIGN, - /* equiv idx, value */ 49, VALUE_OPT_P7_SIGN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ P7_SIGN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --p7-sign */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ P7_SIGN_DESC, P7_SIGN_NAME, P7_SIGN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 50, VALUE_OPT_P7_DETACHED_SIGN, - /* equiv idx, value */ 50, VALUE_OPT_P7_DETACHED_SIGN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ P7_DETACHED_SIGN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --p7-detached-sign */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ P7_DETACHED_SIGN_DESC, P7_DETACHED_SIGN_NAME, P7_DETACHED_SIGN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 51, VALUE_OPT_P7_INCLUDE_CERT, - /* equiv idx, value */ 51, VALUE_OPT_P7_INCLUDE_CERT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ P7_INCLUDE_CERT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --p7-include-cert */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ P7_INCLUDE_CERT_DESC, P7_INCLUDE_CERT_NAME, P7_INCLUDE_CERT_name, - /* disablement strs */ NOT_P7_INCLUDE_CERT_name, NOT_P7_INCLUDE_CERT_PFX }, - - { /* entry idx, value */ 52, VALUE_OPT_P7_TIME, - /* equiv idx, value */ 52, VALUE_OPT_P7_TIME, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ P7_TIME_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --p7-time */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ P7_TIME_DESC, P7_TIME_NAME, P7_TIME_name, - /* disablement strs */ NOT_P7_TIME_name, NOT_P7_TIME_PFX }, - - { /* entry idx, value */ 53, VALUE_OPT_P7_SHOW_DATA, - /* equiv idx, value */ 53, VALUE_OPT_P7_SHOW_DATA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ P7_SHOW_DATA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --p7-show-data */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ P7_SHOW_DATA_DESC, P7_SHOW_DATA_NAME, P7_SHOW_DATA_name, - /* disablement strs */ NOT_P7_SHOW_DATA_name, NOT_P7_SHOW_DATA_PFX }, - - { /* entry idx, value */ 54, VALUE_OPT_P7_INFO, - /* equiv idx, value */ 54, VALUE_OPT_P7_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ P7_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --p7-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ P7_INFO_DESC, P7_INFO_NAME, P7_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 55, VALUE_OPT_P7_VERIFY, - /* equiv idx, value */ 55, VALUE_OPT_P7_VERIFY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ P7_VERIFY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --p7-verify */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ P7_VERIFY_DESC, P7_VERIFY_NAME, P7_VERIFY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 56, VALUE_OPT_P8_INFO, - /* equiv idx, value */ 56, VALUE_OPT_P8_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ P8_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --p8-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ P8_INFO_DESC, P8_INFO_NAME, P8_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 57, VALUE_OPT_SMIME_TO_P7, - /* equiv idx, value */ 57, VALUE_OPT_SMIME_TO_P7, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SMIME_TO_P7_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --smime-to-p7 */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SMIME_TO_P7_DESC, SMIME_TO_P7_NAME, SMIME_TO_P7_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 58, VALUE_OPT_KEY_INFO, - /* equiv idx, value */ 58, VALUE_OPT_KEY_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ KEY_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --key-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ KEY_INFO_DESC, KEY_INFO_NAME, KEY_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 59, VALUE_OPT_PGP_KEY_INFO, - /* equiv idx, value */ 59, VALUE_OPT_PGP_KEY_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PGP_KEY_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pgp-key-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PGP_KEY_INFO_DESC, PGP_KEY_INFO_NAME, PGP_KEY_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 60, VALUE_OPT_PUBKEY_INFO, - /* equiv idx, value */ 60, VALUE_OPT_PUBKEY_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PUBKEY_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pubkey-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PUBKEY_INFO_DESC, PUBKEY_INFO_NAME, PUBKEY_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 61, VALUE_OPT_V1, - /* equiv idx, value */ 61, VALUE_OPT_V1, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ V1_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --v1 */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ V1_DESC, V1_NAME, V1_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 62, VALUE_OPT_TO_P12, - /* equiv idx, value */ 62, VALUE_OPT_TO_P12, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ TO_P12_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --to-p12 */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ TO_P12_DESC, TO_P12_NAME, TO_P12_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 63, VALUE_OPT_TO_P8, - /* equiv idx, value */ 63, VALUE_OPT_TO_P8, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ TO_P8_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --to-p8 */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ TO_P8_DESC, TO_P8_NAME, TO_P8_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 64, VALUE_OPT_PKCS8, - /* equiv idx, value */ 64, VALUE_OPT_PKCS8, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PKCS8_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pkcs8 */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PKCS8_DESC, PKCS8_NAME, PKCS8_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 65, VALUE_OPT_RSA, - /* equiv idx, value */ 65, VALUE_OPT_RSA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ RSA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --rsa */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ RSA_DESC, RSA_NAME, RSA_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 66, VALUE_OPT_DSA, - /* equiv idx, value */ 66, VALUE_OPT_DSA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DSA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --dsa */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DSA_DESC, DSA_NAME, DSA_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 67, VALUE_OPT_ECC, - /* equiv idx, value */ 67, VALUE_OPT_ECC, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ ECC_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --ecc */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ ECC_DESC, ECC_NAME, ECC_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 68, VALUE_OPT_ECDSA, - /* equiv idx, value */ 68, VALUE_OPT_ECDSA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ ECDSA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --ecdsa */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptEcdsa, - /* desc, NAME, name */ ECDSA_DESC, ECDSA_NAME, ECDSA_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 69, VALUE_OPT_HASH, - /* equiv idx, value */ 69, VALUE_OPT_HASH, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ HASH_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --hash */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ HASH_DESC, HASH_NAME, HASH_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 70, VALUE_OPT_INDER, - /* equiv idx, value */ 70, VALUE_OPT_INDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --inder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INDER_DESC, INDER_NAME, INDER_name, - /* disablement strs */ NOT_INDER_name, NOT_INDER_PFX }, - - { /* entry idx, value */ 71, VALUE_OPT_INRAW, - /* equiv idx, value */ 71, VALUE_OPT_INRAW, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INRAW_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --inraw */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptInraw, - /* desc, NAME, name */ INRAW_DESC, INRAW_NAME, INRAW_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 72, VALUE_OPT_OUTDER, - /* equiv idx, value */ 72, VALUE_OPT_OUTDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OUTDER_DESC, OUTDER_NAME, OUTDER_name, - /* disablement strs */ NOT_OUTDER_name, NOT_OUTDER_PFX }, - - { /* entry idx, value */ 73, VALUE_OPT_OUTRAW, - /* equiv idx, value */ 73, VALUE_OPT_OUTRAW, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTRAW_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outraw */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptOutraw, - /* desc, NAME, name */ OUTRAW_DESC, OUTRAW_NAME, OUTRAW_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 74, VALUE_OPT_BITS, - /* equiv idx, value */ 74, VALUE_OPT_BITS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ BITS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --bits */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionNumericVal, - /* desc, NAME, name */ BITS_DESC, BITS_NAME, BITS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 75, VALUE_OPT_CURVE, - /* equiv idx, value */ 75, VALUE_OPT_CURVE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CURVE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --curve */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CURVE_DESC, CURVE_NAME, CURVE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 76, VALUE_OPT_SEC_PARAM, - /* equiv idx, value */ 76, VALUE_OPT_SEC_PARAM, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SEC_PARAM_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --sec-param */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SEC_PARAM_DESC, SEC_PARAM_NAME, SEC_PARAM_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 77, VALUE_OPT_DISABLE_QUICK_RANDOM, - /* equiv idx, value */ 77, VALUE_OPT_DISABLE_QUICK_RANDOM, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DISABLE_QUICK_RANDOM_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --disable-quick-random */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DISABLE_QUICK_RANDOM_DESC, DISABLE_QUICK_RANDOM_NAME, DISABLE_QUICK_RANDOM_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 78, VALUE_OPT_TEMPLATE, - /* equiv idx, value */ 78, VALUE_OPT_TEMPLATE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ TEMPLATE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --template */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ TEMPLATE_DESC, TEMPLATE_NAME, TEMPLATE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 79, VALUE_OPT_STDOUT_INFO, - /* equiv idx, value */ 79, VALUE_OPT_STDOUT_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ STDOUT_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --stdout-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ STDOUT_INFO_DESC, STDOUT_INFO_NAME, STDOUT_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 80, VALUE_OPT_ASK_PASS, - /* equiv idx, value */ 80, VALUE_OPT_ASK_PASS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ ASK_PASS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --ask-pass */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ ASK_PASS_DESC, ASK_PASS_NAME, ASK_PASS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 81, VALUE_OPT_PKCS_CIPHER, - /* equiv idx, value */ 81, VALUE_OPT_PKCS_CIPHER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PKCS_CIPHER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pkcs-cipher */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PKCS_CIPHER_DESC, PKCS_CIPHER_NAME, PKCS_CIPHER_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 82, VALUE_OPT_PROVIDER, - /* equiv idx, value */ 82, VALUE_OPT_PROVIDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PROVIDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --provider */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PROVIDER_DESC, PROVIDER_NAME, PROVIDER_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VER_FLAGS, AOUSE_VERSION, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ VER_PROC, - /* desc, NAME, name */ VER_DESC, NULL, VER_name, - /* disablement strs */ NULL, NULL }, - - - - { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doUsageOpt, - /* desc, NAME, name */ HELP_DESC, NULL, HELP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionPagedUsage, - /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name, - /* disablement strs */ NULL, NULL } -}; - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** Reference to the upper cased version of certtool. */ -#define zPROGNAME (certtool_opt_strs+6322) -/** Reference to the title line for certtool usage. */ -#define zUsageTitle (certtool_opt_strs+6331) -/** There is no certtool configuration file. */ -#define zRcName NULL -/** There are no directories to search for certtool config files. */ -#define apzHomeList NULL -/** The certtool program bug email address. */ -#define zBugsAddr (certtool_opt_strs+6424) -/** Clarification/explanation of what certtool does. */ -#define zExplain (certtool_opt_strs+6444) -/** Extra detail explaining what certtool does. */ -#define zDetail (certtool_opt_strs+6446) -/** The full version string for certtool. */ -#define zFullVersion (certtool_opt_strs+6807) -/* extracted from optcode.tlib near line 364 */ - -#if defined(ENABLE_NLS) -# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT - static tOptionXlateProc translate_option_strings; -#else -# define OPTPROC_BASE OPTPROC_NONE -# define translate_option_strings NULL -#endif /* ENABLE_NLS */ - -#define certtool_full_usage (NULL) -#define certtool_short_usage (certtool_opt_strs+6826) - -#endif /* not defined __doxygen__ */ - -/* - * Create the static procedure(s) declared above. - */ -/** - * The callout function that invokes the optionUsage function. - * - * @param[in] opts the AutoOpts option description structure - * @param[in] od the descriptor for the "help" (usage) option. - * @noreturn - */ -static void -doUsageOpt(tOptions * opts, tOptDesc * od) -{ - int ex_code; - ex_code = CERTTOOL_EXIT_SUCCESS; - optionUsage(&certtoolOptions, ex_code); - /* NOTREACHED */ - exit(CERTTOOL_EXIT_FAILURE); - (void)opts; - (void)od; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the debug option. - * Specifies the debug level. - * @param[in] pOptions the certtool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 9999 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the infile option. - * - * @param[in] pOptions the certtool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptInfile(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the ecdsa option. - * - * @param[in] pOptions the certtool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptEcdsa(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_ECC); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(CERTTOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the inraw option. - * - * @param[in] pOptions the certtool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptInraw(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_INDER); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(CERTTOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the outraw option. - * - * @param[in] pOptions the certtool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptOutraw(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_OUTDER); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(CERTTOOL_EXIT_USAGE_ERROR); - -} -/* extracted from optmain.tlib near line 1250 */ - -/** - * The directory containing the data associated with certtool. - */ -#ifndef PKGDATADIR -# define PKGDATADIR "" -#endif - -/** - * Information about the person or institution that packaged certtool - * for the current distribution. - */ -#ifndef WITH_PACKAGER -# define certtool_packager_info NULL -#else -/** Packager information for certtool. */ -static char const certtool_packager_info[] = - "Packaged by " WITH_PACKAGER - -# ifdef WITH_PACKAGER_VERSION - " ("WITH_PACKAGER_VERSION")" -# endif - -# ifdef WITH_PACKAGER_BUG_REPORTS - "\nReport certtool bugs to " WITH_PACKAGER_BUG_REPORTS -# endif - "\n"; -#endif -#ifndef __doxygen__ - -#endif /* __doxygen__ */ -/** - * The option definitions for certtool. The one structure that - * binds them all. - */ -tOptions certtoolOptions = { - OPTIONS_STRUCT_VERSION, - 0, NULL, /* original argc + argv */ - ( OPTPROC_BASE - + OPTPROC_ERRSTOP - + OPTPROC_SHORTOPT - + OPTPROC_LONGOPT - + OPTPROC_NO_REQ_OPT - + OPTPROC_NEGATIONS - + OPTPROC_NO_ARGS - + OPTPROC_GNUUSAGE - + OPTPROC_MISUSE ), - 0, NULL, /* current option index, current option */ - NULL, NULL, zPROGNAME, - zRcName, zCopyright, zLicenseDescrip, - zFullVersion, apzHomeList, zUsageTitle, - zExplain, zDetail, optDesc, - zBugsAddr, /* address to send bugs to */ - NULL, NULL, /* extensions/saved state */ - optionUsage, /* usage procedure */ - translate_option_strings, /* translation procedure */ - /* - * Indexes to special options - */ - { INDEX_OPT_MORE_HELP, /* more-help option index */ - NO_EQUIVALENT, /* save option index */ - NO_EQUIVALENT, /* '-#' option index */ - NO_EQUIVALENT /* index of default opt */ - }, - 86 /* full option count */, 83 /* user option count */, - certtool_full_usage, certtool_short_usage, - NULL, NULL, - PKGDATADIR, certtool_packager_info -}; - -#if ENABLE_NLS -/** - * This code is designed to translate translatable option text for the - * certtool program. These translations happen upon entry - * to optionProcess(). - */ -#include -#include -#include -#include -#ifdef HAVE_DCGETTEXT -# include -#endif -#include - -static char * AO_gettext(char const * pz); -static void coerce_it(void ** s); - -/** - * AutoGen specific wrapper function for gettext. It relies on the macro _() - * to convert from English to the target language, then strdup-duplicates the - * result string. It tries the "libopts" domain first, then whatever has been - * set via the \a textdomain(3) call. - * - * @param[in] pz the input text used as a lookup key. - * @returns the translated text (if there is one), - * or the original text (if not). - */ -static char * -AO_gettext(char const * pz) -{ - char * res; - if (pz == NULL) - return NULL; -#ifdef HAVE_DCGETTEXT - /* - * While processing the option_xlateable_txt data, try to use the - * "libopts" domain. Once we switch to the option descriptor data, - * do *not* use that domain. - */ - if (option_xlateable_txt.field_ct != 0) { - res = dgettext("libopts", pz); - if (res == pz) - res = (char *)VOIDP(_(pz)); - } else - res = (char *)VOIDP(_(pz)); -#else - res = (char *)VOIDP(_(pz)); -#endif - if (res == pz) - return res; - res = strdup(res); - if (res == NULL) { - fputs(_("No memory for duping translated strings\n"), stderr); - exit(CERTTOOL_EXIT_FAILURE); - } - return res; -} - -/** - * All the pointers we use are marked "* const", but they are stored in - * writable memory. Coerce the mutability and set the pointer. - */ -static void coerce_it(void ** s) { *s = AO_gettext(*s); -} - -/** - * Translate all the translatable strings in the certtoolOptions - * structure defined above. This is done only once. - */ -static void -translate_option_strings(void) -{ - tOptions * const opts = &certtoolOptions; - - /* - * Guard against re-translation. It won't work. The strings will have - * been changed by the first pass through this code. One shot only. - */ - if (option_xlateable_txt.field_ct != 0) { - /* - * Do the translations. The first pointer follows the field count - * field. The field count field is the size of a pointer. - */ - char ** ppz = (char**)VOIDP(&(option_xlateable_txt)); - int ix = option_xlateable_txt.field_ct; - - do { - ppz++; /* skip over field_ct */ - *ppz = AO_gettext(*ppz); - } while (--ix > 0); - /* prevent re-translation and disable "libopts" domain lookup */ - option_xlateable_txt.field_ct = 0; - - coerce_it(VOIDP(&(opts->pzCopyright))); - coerce_it(VOIDP(&(opts->pzCopyNotice))); - coerce_it(VOIDP(&(opts->pzFullVersion))); - coerce_it(VOIDP(&(opts->pzUsageTitle))); - coerce_it(VOIDP(&(opts->pzExplain))); - coerce_it(VOIDP(&(opts->pzDetail))); - { - tOptDesc * od = opts->pOptDesc; - for (ix = opts->optCt; ix > 0; ix--, od++) - coerce_it(VOIDP(&(od->pzText))); - } - } -} -#endif /* ENABLE_NLS */ - -#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT -/** I18N function strictly for xgettext. Do not compile. */ -static void bogus_function(void) { - /* TRANSLATORS: - - The following dummy function was crated solely so that xgettext can - extract the correct strings. These strings are actually referenced - by a field name in the certtoolOptions structure noted in the - comments below. The literal text is defined in certtool_opt_strs. - - NOTE: the strings below are segmented with respect to the source string - certtool_opt_strs. The strings above are handed off for translation - at run time a paragraph at a time. Consequently, they are presented here - for translation a paragraph at a time. - - ALSO: often the description for an option will reference another option - by name. These are set off with apostrophe quotes (I hope). Do not - translate option names. - */ - /* referenced via certtoolOptions.pzCopyright */ - puts(_("certtool @VERSION@\n\ -Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n\ -This is free software. It is licensed for use, modification and\n\ -redistribution under the terms of the GNU General Public License,\n\ -version 3 or later \n")); - - /* referenced via certtoolOptions.pzCopyNotice */ - puts(_("certtool is free software: you can redistribute it and/or modify it under\n\ -the terms of the GNU General Public License as published by the Free\n\ -Software Foundation, either version 3 of the License, or (at your option)\n\ -any later version.\n\n")); - puts(_("certtool is distributed in the hope that it will be useful, but WITHOUT ANY\n\ -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\ -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n\ -details.\n\n")); - puts(_("You should have received a copy of the GNU General Public License along\n\ -with this program. If not, see .\n")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Enable debugging")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("More verbose output")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Input file")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Output file")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate a self-signed certificate")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate a signed certificate")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generates a proxy certificate")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate a CRL")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Update a signed certificate")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate a private key")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate a private key or parameters from a seed using a provable method")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Verify a private key generated from a seed using a provable method")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("When generating a private key use the given hex-encoded seed")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate a PKCS #10 certificate request")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Verify a PEM encoded certificate chain")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Verify a PEM encoded certificate (chain) against a trusted set")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Verify a Certificate Revocation List using a trusted list")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Specify a hostname to be used for certificate chain verification")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Specify a email to be used for certificate chain verification")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Specify a purpose OID to be used for certificate chain verification")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Allow broken algorithms, such as MD5 for verification")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate PKCS #3 encoded Diffie-Hellman parameters")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Get the included PKCS #3 encoded Diffie-Hellman parameters")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information PKCS #3 encoded Diffie-Hellman parameters")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Loads a private key file")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Loads a public key file")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Loads a certificate request file")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Loads a certificate file")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Loads the certificate authority's private key file")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Loads the certificate authority's certificate file")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Loads the provided CRL")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Loads auxiliary data")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Password to use")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Enforce a NULL password")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Enforce an empty password")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print big number in an easier format to parse")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("In certain operations it prints the information in C-friendly format")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information on the given certificate")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print the fingerprint of the given certificate")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print the key ID of the given certificate")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print certificate's public key")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information on the given OpenPGP certificate")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information on the given OpenPGP keyring structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information on the given CRL structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information on the given certificate request")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Do not use extensions in certificate requests")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information on a PKCS #12 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("The PKCS #12 friendly name to use")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate a PKCS #7 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Signs using a PKCS #7 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Signs using a detached PKCS #7 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("The signer's certificate will be included in the cert list.")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Will include a timestamp in the PKCS #7 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Will show the embedded data in the PKCS #7 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information on a PKCS #7 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Verify the provided PKCS #7 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information on a PKCS #8 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Convert S/MIME to PKCS #7 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information on a private key")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information on an OpenPGP private key")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information on a public key")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate an X.509 version 1 certificate (with no extensions)")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate a PKCS #12 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate a PKCS #8 structure")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Use PKCS #8 format for private keys")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate RSA key")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate DSA key")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Generate ECC (ECDSA) key")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'ecc' option")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Hash algorithm to use for signing")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Use DER format for input certificates, private keys, and DH parameters")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'inder' option")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Use DER format for output certificates, private keys, and DH parameters")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'outder' option")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Specify the number of bits for key generate")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Specify the curve used for EC key generation")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Specify the security level [low, legacy, medium, high, ultra]")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("No effect")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Template file to use for non-interactive operation")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Print information to stdout instead of stderr")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Enable interaction for entering password when in batch mode.")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Cipher to use for PKCS #8 and #12 operations")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("Specify the PKCS #11 provider library")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("display extended usage information and exit")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("extended usage information passed thru pager")); - - /* referenced via certtoolOptions.pOptDesc->pzText */ - puts(_("output version information and exit")); - - /* referenced via certtoolOptions.pzUsageTitle */ - puts(_("certtool - GnuTLS certificate tool\n\ -Usage: %s [ - [] | --[{=| }] ]...\n")); - - /* referenced via certtoolOptions.pzExplain */ - puts(_("\n")); - - /* referenced via certtoolOptions.pzDetail */ - puts(_("Tool to parse and generate X.509 certificates, requests and private keys.\n\ -It can be used interactively or non interactively by specifying the\n\ -template command line option.\n\n")); - puts(_("The tool accepts files or supported URIs via the --infile option. In case\n\ -PIN is required for URI access you can provide it using the environment\n\ -variables GNUTLS_PIN and GNUTLS_SO_PIN.\n")); - - /* referenced via certtoolOptions.pzFullVersion */ - puts(_("certtool @VERSION@")); - - /* referenced via certtoolOptions.pzFullUsage */ - puts(_("<<>>")); - - /* referenced via certtoolOptions.pzShortUsage */ - puts(_("certtool [options]\n\ -certtool --help for usage instructions.\n")); - /* LIBOPTS-MESSAGES: */ -#line 67 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" - puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" - puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" - puts(_("Automated Options Processing Error!\n" - "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" - puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" - puts(_("\tThis is less than the minimum library version: ")); -#line 121 "../version.c" - puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" - puts(_("(AutoOpts bug): %s.\n")); -#line 90 "../reset.c" - puts(_("optionResetOpt() called, but reset-option not configured")); -#line 295 "../usage.c" - puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" - puts(_("optionProcess() was called with invalid data")); -#line 751 "../usage.c" - puts(_("invalid argument type specified")); -#line 598 "../find.c" - puts(_("defaulted to option with optional arg")); -#line 76 "../alias.c" - puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" - puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" - puts(_(" The following options match:\n")); -#line 293 "../find.c" - puts(_("%s: ambiguous option name: %s (matches %d options)\n")); -#line 161 "../check.c" - puts(_("%s: Command line arguments required\n")); -#line 43 "../alias.c" - puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" - puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" - puts(_("interprocess pipe")); -#line 168 "../version.c" - puts(_("error: version option argument '%c' invalid. Use:\n" - "\t'v' - version only\n" - "\t'c' - version and copyright\n" - "\t'n' - version and full copyright notice\n")); -#line 58 "../check.c" - puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 38 "../alias.c" - puts(_("-equivalence")); -#line 469 "../find.c" - puts(_("%s: illegal option -- %c\n")); -#line 110 "../reset.c" - puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 118 "../reset.c" - puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" - puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 750 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 1084 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" - puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" - puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" - puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" - "\t'%s' and '%s'.")); -#line 94 "../check.c" - puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" - puts(_("%s: The '%s' option cannot have an argument.\n")); -#line 151 "../check.c" - puts(_("%s: Command line arguments are not allowed.\n")); -#line 536 "../save.c" - puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" - puts(_("%s error: '%s' does not match any %s keywords.\n")); -#line 93 "../reset.c" - puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 239 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 143 "../restore.c" - puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" - puts(_("'%s' is not a command line option.\n")); -#line 113 "../time.c" - puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); -#line 50 "../time.c" - puts(_("%s error: '%s' is not a recognizable time duration.\n")); -#line 92 "../check.c" - puts(_("%s error: The %s option must appear %d times.\n")); -#line 165 "../numeric.c" - puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" - puts(_("%s error: %s exceeds %s keyword count\n")); -#line 333 "../usage.c" - puts(_("Try '%s %s' for more information.\n")); -#line 45 "../alias.c" - puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" - puts(_("standard output")); -#line 943 "../makeshell.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard output")); -#line 418 "../usage.c" - puts(_("standard output")); -#line 628 "../usage.c" - puts(_("standard output")); -#line 175 "../version.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard error")); -#line 418 "../usage.c" - puts(_("standard error")); -#line 628 "../usage.c" - puts(_("standard error")); -#line 175 "../version.c" - puts(_("standard error")); -#line 208 "../makeshell.c" - puts(_("write")); -#line 943 "../makeshell.c" - puts(_("write")); -#line 276 "../usage.c" - puts(_("write")); -#line 417 "../usage.c" - puts(_("write")); -#line 627 "../usage.c" - puts(_("write")); -#line 174 "../version.c" - puts(_("write")); -#line 60 "../numeric.c" - puts(_("%s error: %s option value %ld is out of range.\n")); -#line 44 "../check.c" - puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 238 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 257 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 535 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); - /* END-LIBOPTS-MESSAGES */ - - /* USAGE-TEXT: */ -#line 876 "../usage.c" - puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1151 "../usage.c" - puts(_("Version, usage and configuration options:")); -#line 927 "../usage.c" - puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 840 "../usage.c" - puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1120 "../usage.c" - puts(_(" --- %-14s %s\n")); -#line 1118 "../usage.c" - puts(_("This option has been disabled")); -#line 867 "../usage.c" - puts(_("\t\t\t\t- enabled by default\n")); -#line 40 "../alias.c" - puts(_("%s error: only ")); -#line 1197 "../usage.c" - puts(_(" - examining environment variables named %s_*\n")); -#line 168 "../file.c" - puts(_("\t\t\t\t- file must not pre-exist\n")); -#line 172 "../file.c" - puts(_("\t\t\t\t- file must pre-exist\n")); -#line 383 "../usage.c" - puts(_("Options are specified by doubled hyphens and their name or by a single\n" - "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" - puts(_("\n" - "= = = = = = = =\n\n" - "This incarnation of genshell will produce\n" - "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" - puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 900 "../usage.c" - puts(_("\t\t\t\t- is a set membership option\n")); -#line 921 "../usage.c" - puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 385 "../usage.c" - puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 907 "../usage.c" - puts(_("\t\t\t\t- may appear multiple times\n")); -#line 894 "../usage.c" - puts(_("\t\t\t\t- may not be preset\n")); -#line 1312 "../usage.c" - puts(_(" Arg Option-Name Description\n")); -#line 1248 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1306 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1307 "../usage.c" - puts(_(" %3s %s")); -#line 1313 "../usage.c" - puts(_(" %3s %s")); -#line 390 "../usage.c" - puts(_("The '-#' option may omit the hash char\n")); -#line 386 "../usage.c" - puts(_("All arguments are named options.\n")); -#line 974 "../usage.c" - puts(_(" - reading file %s")); -#line 412 "../usage.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 100 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 129 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 906 "../usage.c" - puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 947 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 1195 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 685 "../usage.c" - puts(_("prohibits these options:\n")); -#line 680 "../usage.c" - puts(_("prohibits the option '%s'\n")); -#line 81 "../numeric.c" - puts(_("%s%ld to %ld")); -#line 79 "../numeric.c" - puts(_("%sgreater than or equal to %ld")); -#line 75 "../numeric.c" - puts(_("%s%ld exactly")); -#line 68 "../numeric.c" - puts(_("%sit must lie in one of the ranges:\n")); -#line 68 "../numeric.c" - puts(_("%sit must be in the range:\n")); -#line 88 "../numeric.c" - puts(_(", or\n")); -#line 66 "../numeric.c" - puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); -#line 77 "../numeric.c" - puts(_("%sless than or equal to %ld")); -#line 393 "../usage.c" - puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 655 "../usage.c" - puts(_("requires the option '%s'\n")); -#line 658 "../usage.c" - puts(_("requires these options:\n")); -#line 1324 "../usage.c" - puts(_(" Arg Option-Name Req? Description\n")); -#line 1318 "../usage.c" - puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" - puts(_("or you may use a numeric representation. Preceding these with a '!'\n" - "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" - "will set them all. Multiple entries may be passed as an option\n" - "argument list.\n")); -#line 913 "../usage.c" - puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" - puts(_("The valid \"%s\" option keywords are:\n")); -#line 1155 "../usage.c" - puts(_("The next option supports vendor supported extra options:")); -#line 776 "../usage.c" - puts(_("These additional options are:")); - /* END-USAGE-TEXT */ -} -#endif /* uncompilable code */ -#ifdef __cplusplus -} -#endif -/* certtool-args.c ends here */ diff --git a/src/certtool-args.def b/src/certtool-args.def index dd156b64d5..645dc563cc 100644 --- a/src/certtool-args.def +++ b/src/certtool-args.def @@ -18,6 +18,27 @@ explain = ""; #define VERBOSE_OPT 1 #include args-std.def +//---------------------------------------- +flag = { + name = cert_options; + documentation; + descrip = "Certificate related options"; +}; +//---------------------------------------- + +flag = { + name = certificate-info; + value = i; + descrip = "Print information on the given certificate"; + doc = ""; +}; + +flag = { + name = pubkey-info; + descrip = "Print information on a public key"; + doc = "The option combined with --load-request, --load-pubkey, --load-privkey and --load-certificate will extract the public key of the object in question."; +}; + flag = { name = generate-self-signed; value = s; @@ -38,12 +59,6 @@ flag = { doc = ""; }; -flag = { - name = generate-crl; - descrip = "Generate a CRL"; - doc = "This option generates a Certificate Revocation List. When combined with --load-crl it would use the loaded CRL as base for the generated (i.e., all revoked certificates in the base will be copied to the new CRL)."; -}; - flag = { name = update-certificate; value = u; @@ -52,274 +67,313 @@ flag = { }; flag = { - name = generate-privkey; - value = p; - descrip = "Generate a private key"; - doc = ""; + name = fingerprint; + descrip = "Print the fingerprint of the given certificate"; + doc = "This is a simple hash of the DER encoding of the certificate. It can be combined with the --hash parameter. However, it is recommended for identification to use the key-id which depends only on the certificate's key."; }; flag = { - name = provable; - descrip = "Generate a private key or parameters from a seed using a provable method"; - doc = "This will use the FIPS-186-4 algorithms (i.e., Shawe-Taylor) for provable key generation. When specified the private keys or parameters will be generated from a seed, and can be proven to be correctly generated from the seed. You may specify --seed or allow GnuTLS to generate one (recommended). This option can be combined with --generate-privkey or --generate-dh-params."; + name = key-id; + descrip = "Print the key ID of the given certificate"; + doc = "This is a hash of the public key of the given certificate. It identifies the key uniquely, remains the same on a certificate renewal and depends only on signed fields of the certificate."; }; flag = { - name = verify-provable-privkey; - descrip = "Verify a private key generated from a seed using a provable method"; - doc = "This will use the FIPS-186-4 algorithms for provable key generation. You may specify --seed or use the seed stored in the private key structure."; + name = certificate-pubkey; + descrip = "Print certificate's public key"; + doc = "This option is deprecated as a duplicate of --pubkey-info"; + deprecated; }; flag = { - name = seed; - descrip = "When generating a private key use the given hex-encoded seed"; - arg-type = string; + name = v1; + descrip = "Generate an X.509 version 1 certificate (with no extensions)"; doc = ""; }; flag = { - name = generate-request; - value = q; - descrip = "Generate a PKCS #10 certificate request"; - flags_cant = infile; - doc = "Will generate a PKCS #10 certificate request. To specify a private key use --load-privkey."; + name = sign-params; + arg-type = string; + descrip = "Sign a certificate with a specific signature algorithm"; + doc = "This option can be combined with --generate-certificate, to sign the certificate with +a specific signature algorithm variant. The only option supported is 'RSA-PSS', and should be +specified when the signer does not have a certificate which is marked for RSA-PSS use only."; }; + +//---------------------------------------- flag = { - name = verify-chain; - value = e; - descrip = "Verify a PEM encoded certificate chain"; - doc = "Verifies the validity of a certificate chain. That is, an ordered set of - certificates where each one is the issuer of the previous, and the first is - the end-certificate to be validated. In a proper chain the last certificate - is a self signed one. It can be combined with --verify-purpose or --verify-hostname."; + name = crq_options; + documentation; + descrip = "Certificate request related options"; }; +//---------------------------------------- flag = { - name = verify; - descrip = "Verify a PEM encoded certificate (chain) against a trusted set"; - doc = "The trusted certificate list can be loaded with --load-ca-certificate. If no -certificate list is provided, then the system's trusted certificate list is used. Note that -during verification multiple paths may be explored. On a successful verification -the successful path will be the last one. It can be combined with --verify-purpose or --verify-hostname."; + name = crq-info; + descrip = "Print information on the given certificate request"; + doc = ""; }; flag = { - name = verify-crl; - descrip = "Verify a Certificate Revocation List using a trusted list"; - doc = "The trusted certificate list must be loaded with --load-ca-certificate."; - flags-must = load-ca-certificate; + name = generate-request; + value = q; + descrip = "Generate a PKCS #10 certificate request"; + flags_cant = infile; + doc = "Will generate a PKCS #10 certificate request. To specify a private key use --load-privkey."; }; flag = { - name = verify-hostname; - descrip = "Specify a hostname to be used for certificate chain verification"; - arg-type = string; - doc = "This is to be combined with one of the verify certificate options."; + name = no-crq-extensions; + descrip = "Do not use extensions in certificate requests"; + doc = ""; }; +//---------------------------------------- flag = { - name = verify-email; - descrip = "Specify a email to be used for certificate chain verification"; - arg-type = string; - doc = "This is to be combined with one of the verify certificate options."; - flags-cant = verify-hostname; + name = pkcs12_options; + documentation; + descrip = "PKCS#12 file related options"; }; +//---------------------------------------- flag = { - name = verify-purpose; - descrip = "Specify a purpose OID to be used for certificate chain verification"; - arg-type = string; - doc = "This object identifier restricts the purpose of the certificates to be verified. Example purposes are 1.3.6.1.5.5.7.3.1 (TLS WWW), 1.3.6.1.5.5.7.3.4 (EMAIL) etc. Note that a CA certificate without a purpose set (extended key usage) is valid for any purpose."; + name = p12-info; + descrip = "Print information on a PKCS #12 structure"; + doc = "This option will dump the contents and print the metadata of the provided PKCS #12 structure."; }; flag = { - name = verify-allow-broken; - descrip = "Allow broken algorithms, such as MD5 for verification"; - doc = "This can be combined with --p7-verify, --verify or --verify-chain."; + name = p12-name; + arg-type = string; + descrip = "The PKCS #12 friendly name to use"; + doc = "The name to be used for the primary certificate and private key in a PKCS #12 file."; }; flag = { - name = generate-dh-params; - descrip = "Generate PKCS #3 encoded Diffie-Hellman parameters"; - doc = "The will generate random parameters to be used with -Diffie-Hellman key exchange. The output parameters will be in PKCS #3 -format. Note that it is recommended to use the --get-dh-params option -instead."; + name = to-p12; + descrip = "Generate a PKCS #12 structure"; + doc = "It requires a certificate, a private key and possibly a CA certificate to be specified."; }; + +//---------------------------------------- flag = { - name = get-dh-params; - descrip = "Get the included PKCS #3 encoded Diffie-Hellman parameters"; - doc = "Returns stored DH parameters in GnuTLS. Those parameters returned -are defined in RFC7919, and can be considered standard parameters for a TLS -key exchange."; + name = key_options; + documentation; + descrip = "Private key related options"; }; +//---------------------------------------- flag = { - name = dh-info; - descrip = "Print information PKCS #3 encoded Diffie-Hellman parameters"; + name = key-info; + value = k; + descrip = "Print information on a private key"; doc = ""; }; flag = { - name = load-privkey; - descrip = "Loads a private key file"; - arg-type = string; - doc = "This can be either a file or a PKCS #11 URL"; + name = p8-info; + descrip = "Print information on a PKCS #8 structure"; + doc = "This option will print information about encrypted PKCS #8 structures. That option does not require the decryption of the structure."; }; flag = { - name = load-pubkey; - descrip = "Loads a public key file"; - arg-type = string; - doc = "This can be either a file or a PKCS #11 URL"; + name = to-rsa; + descrip = "Convert an RSA-PSS key to raw RSA format"; + doc = "It requires an RSA-PSS key as input and will output a raw RSA +key. This command is necessary for compatibility with applications that +cannot read RSA-PSS keys."; }; flag = { - name = load-request; - descrip = "Loads a certificate request file"; - arg-type = string; - doc = "This option can be used with a file"; + name = generate-privkey; + value = p; + descrip = "Generate a private key"; + doc = "When generating RSA-PSS private keys, the --hash option will +restrict the allowed hash for the key; in the same keys the --salt-size +option is also acceptable."; }; flag = { - name = load-certificate; - descrip = "Loads a certificate file"; + name = key-type; arg-type = string; - doc = "This option can be used with a file"; + descrip = "Specify the key type to use on key generation"; + doc = "This option can be combined with --generate-privkey, to specify +the key type to be generated. Valid options are, 'rsa', 'rsa-pss', 'dsa', 'ecdsa', 'ed25519, and 'ed448'.'. +When combined with certificate generation it can be used to specify an +RSA-PSS certificate when an RSA key is given."; }; flag = { - name = load-ca-privkey; - descrip = "Loads the certificate authority's private key file"; - arg-type = string; - doc = "This can be either a file or a PKCS #11 URL"; + name = bits; + arg-type = number; + descrip = "Specify the number of bits for key generation"; + doc = ""; }; flag = { - name = load-ca-certificate; - descrip = "Loads the certificate authority's certificate file"; + name = curve; arg-type = string; - doc = "This can be either a file or a PKCS #11 URL"; + descrip = "Specify the curve used for EC key generation"; + doc = "Supported values are secp192r1, secp224r1, secp256r1, secp384r1 and secp521r1."; }; flag = { - name = load-crl; - descrip = "Loads the provided CRL"; + name = sec-param; arg-type = string; - doc = "This option can be used with a file"; + arg-name = "Security parameter"; + descrip = "Specify the security level [low, legacy, medium, high, ultra]"; + doc = "This is alternative to the bits option."; }; flag = { - name = load-data; - descrip = "Loads auxiliary data"; - arg-type = string; - doc = "This option can be used with a file"; + name = to-p8; + descrip = "Convert a given key to a PKCS #8 structure"; + doc = "This needs to be combined with --load-privkey."; }; flag = { - name = password; - arg-type = string; - descrip = "Password to use"; - doc = "You can use this option to specify the password in the command line instead of reading it from the tty. Note, that the command line arguments are available for view in others in the system. Specifying password as '' is the same as specifying no password."; + name = pkcs8; + value = 8; + descrip = "Use PKCS #8 format for private keys"; + doc = ""; }; flag = { - name = null-password; - descrip = "Enforce a NULL password"; - doc = "This option enforces a NULL password. This is different than the empty or no password in schemas like PKCS #8."; + name = provable; + descrip = "Generate a private key or parameters from a seed using a provable method"; + doc = "This will use the FIPS PUB186-4 algorithms (i.e., Shawe-Taylor) for provable key generation. +When specified the private keys or parameters will be generated from a seed, and can be +later validated with --verify-provable-privkey to be correctly generated from the seed. You may +specify --seed or allow GnuTLS to generate one (recommended). This option can be combined with +--generate-privkey or --generate-dh-params. + +That option applies to RSA and DSA keys. On the DSA keys the PQG parameters +are generated using the seed, and on RSA the two primes."; }; flag = { - name = empty-password; - descrip = "Enforce an empty password"; - doc = "This option enforces an empty password. This is different than the NULL or no password in schemas like PKCS #8."; + name = verify-provable-privkey; + descrip = "Verify a private key generated from a seed using a provable method"; + doc = "This will use the FIPS-186-4 algorithms for provable key generation. You may specify --seed or use the seed stored in the private key structure."; }; - flag = { - name = hex-numbers; - descrip = "Print big number in an easier format to parse"; - doc = ""; + name = seed; + descrip = "When generating a private key use the given hex-encoded seed"; + arg-type = string; + doc = "The seed acts as a security parameter for the private key, and +thus a seed size which corresponds to the security level of the private key +should be provided (e.g., 256-bits seed)."; }; + +//---------------------------------------- flag = { - name = cprint; - descrip = "In certain operations it prints the information in C-friendly format"; - doc = "In certain operations it prints the information in C-friendly format, suitable for including into C programs."; + name = crl_options; + documentation; + descrip = "CRL related options"; }; +//---------------------------------------- flag = { - name = certificate-info; - value = i; - descrip = "Print information on the given certificate"; + name = crl-info; + value = l; + descrip = "Print information on the given CRL structure"; doc = ""; }; + flag = { - name = fingerprint; - descrip = "Print the fingerprint of the given certificate"; - doc = "This is a simple hash of the DER encoding of the certificate. It can be combined with the --hash parameter. However, it is recommended for identification to use the key-id which depends only on the certificate's key."; + name = generate-crl; + descrip = "Generate a CRL"; + doc = "This option generates a Certificate Revocation List. When combined with --load-crl it would use the loaded CRL as base for the generated (i.e., all revoked certificates in the base will be copied to the new CRL). +To add new certificates to the CRL use --load-certificate."; }; + flag = { - name = key-id; - descrip = "Print the key ID of the given certificate"; - doc = "This is a hash of the public key of the given certificate. It identifies the key uniquely, remains the same on a certificate renewal and depends only on signed fields of the certificate."; + name = verify-crl; + descrip = "Verify a Certificate Revocation List using a trusted list"; + doc = "The trusted certificate list must be loaded with --load-ca-certificate."; + flags-must = load-ca-certificate; }; +//---------------------------------------- flag = { - name = certificate-pubkey; - descrip = "Print certificate's public key"; - doc = ""; + name = cert_verify_options; + documentation; + descrip = "Certificate verification related options"; }; +//---------------------------------------- flag = { - name = pgp-certificate-info; - descrip = "Print information on the given OpenPGP certificate"; - doc = ""; + name = verify-chain; + value = e; + descrip = "Verify a PEM encoded certificate chain"; + doc = "Verifies the validity of a certificate chain. That is, an ordered set of +certificates where each one is the issuer of the previous, and the first is +the end-certificate to be validated. In a proper chain the last certificate +is a self signed one. It can be combined with --verify-purpose or --verify-hostname."; }; flag = { - name = pgp-ring-info; - descrip = "Print information on the given OpenPGP keyring structure"; - doc = ""; + name = verify; + descrip = "Verify a PEM encoded certificate (chain) against a trusted set"; + doc = "The trusted certificate list can be loaded with --load-ca-certificate. If no +certificate list is provided, then the system's trusted certificate list is used. Note that +during verification multiple paths may be explored. On a successful verification +the successful path will be the last one. It can be combined with --verify-purpose or --verify-hostname."; }; flag = { - name = crl-info; - value = l; - descrip = "Print information on the given CRL structure"; - doc = ""; + name = verify-hostname; + descrip = "Specify a hostname to be used for certificate chain verification"; + arg-type = string; + doc = "This is to be combined with one of the verify certificate options."; }; flag = { - name = crq-info; - descrip = "Print information on the given certificate request"; - doc = ""; + name = verify-email; + descrip = "Specify a email to be used for certificate chain verification"; + arg-type = string; + doc = "This is to be combined with one of the verify certificate options."; + flags-cant = verify-hostname; }; - flag = { - name = no-crq-extensions; - descrip = "Do not use extensions in certificate requests"; - doc = ""; + name = verify-purpose; + descrip = "Specify a purpose OID to be used for certificate chain verification"; + arg-type = string; + doc = "This object identifier restricts the purpose of the certificates to be verified. Example purposes are 1.3.6.1.5.5.7.3.1 (TLS WWW), 1.3.6.1.5.5.7.3.4 (EMAIL) etc. Note that a CA certificate without a purpose set (extended key usage) is valid for any purpose."; }; flag = { - name = p12-info; - descrip = "Print information on a PKCS #12 structure"; - doc = "This option will dump the contents and print the metadata of the provided PKCS #12 structure."; + name = verify-allow-broken; + descrip = "Allow broken algorithms, such as MD5 for verification"; + doc = "This can be combined with --p7-verify, --verify or --verify-chain."; }; flag = { - name = p12-name; + name = verify-profile; + descrip = "Specify a security level profile to be used for verification"; arg-type = string; - descrip = "The PKCS #12 friendly name to use"; - doc = "The name to be used for the primary certificate and private key in a PKCS #12 file."; + doc = "This option can be used to specify a certificate verification profile. Certificate + verification profiles correspond to the security level. This should be one of + 'none', 'very weak', 'low', 'legacy', 'medium', 'high', 'ultra', + 'future'. Note that by default no profile is applied, unless one is set + as minimum in the gnutls configuration file."; }; +//---------------------------------------- +flag = { + name = pkcs7_options; + documentation; + descrip = "PKCS#7 structure options"; +}; +//---------------------------------------- + flag = { name = p7-generate; descrip = "Generate a PKCS #7 structure"; @@ -375,83 +429,164 @@ flag = { doc = "This option verifies the signed PKCS #7 structure. The certificate list to use for verification can be specified with --load-ca-certificate. When no certificate list is provided, then the system's certificate list is used. Alternatively a direct signer can be provided using --load-certificate. A key purpose can be enforced with the --verify-purpose option, and the --load-data option will utilize detached data."; }; -flag = { - name = p8-info; - descrip = "Print information on a PKCS #8 structure"; - doc = "This option will print information about encrypted PKCS #8 structures. That option does not require the decryption of the structure."; -}; - flag = { name = smime-to-p7; descrip = "Convert S/MIME to PKCS #7 structure"; doc = ""; }; + + +//---------------------------------------- flag = { - name = key-info; - value = k; - descrip = "Print information on a private key"; - doc = ""; + name = other_options; + documentation; + descrip = "Other options"; }; +//---------------------------------------- flag = { - name = pgp-key-info; - descrip = "Print information on an OpenPGP private key"; - doc = ""; + name = generate-dh-params; + descrip = "Generate PKCS #3 encoded Diffie-Hellman parameters"; + doc = "The will generate random parameters to be used with +Diffie-Hellman key exchange. The output parameters will be in PKCS #3 +format. Note that it is recommended to use the --get-dh-params option +instead."; + deprecated; }; flag = { - name = pubkey-info; - descrip = "Print information on a public key"; - doc = "The option combined with --load-request, --load-pubkey, --load-privkey and --load-certificate will extract the public key of the object in question."; + name = get-dh-params; + descrip = "List the included PKCS #3 encoded Diffie-Hellman parameters"; + doc = "Returns stored DH parameters in GnuTLS. Those parameters returned +are defined in RFC7919, and can be considered standard parameters for a TLS +key exchange. This option is provided for old applications which require +DH parameters to be specified; modern GnuTLS applications should not require +them."; }; flag = { - name = v1; - descrip = "Generate an X.509 version 1 certificate (with no extensions)"; + name = dh-info; + descrip = "Print information PKCS #3 encoded Diffie-Hellman parameters"; doc = ""; }; flag = { - name = to-p12; - descrip = "Generate a PKCS #12 structure"; - doc = "It requires a certificate, a private key and possibly a CA certificate to be specified."; + name = load-privkey; + descrip = "Loads a private key file"; + arg-type = string; + doc = "This can be either a file or a PKCS #11 URL"; }; flag = { - name = to-p8; - descrip = "Generate a PKCS #8 structure"; - doc = ""; + name = load-pubkey; + descrip = "Loads a public key file"; + arg-type = string; + doc = "This can be either a file or a PKCS #11 URL"; }; flag = { - name = pkcs8; - value = 8; - descrip = "Use PKCS #8 format for private keys"; - doc = ""; + name = load-request; + descrip = "Loads a certificate request file"; + arg-type = string; + doc = "This option can be used with a file"; +}; + +flag = { + name = load-certificate; + descrip = "Loads a certificate file"; + arg-type = string; + doc = "This option can be used with a file"; +}; + +flag = { + name = load-ca-privkey; + descrip = "Loads the certificate authority's private key file"; + arg-type = string; + doc = "This can be either a file or a PKCS #11 URL"; +}; + +flag = { + name = load-ca-certificate; + descrip = "Loads the certificate authority's certificate file"; + arg-type = string; + doc = "This can be either a file or a PKCS #11 URL"; +}; + +flag = { + name = load-crl; + descrip = "Loads the provided CRL"; + arg-type = string; + doc = "This option can be used with a file"; +}; + +flag = { + name = load-data; + descrip = "Loads auxiliary data"; + arg-type = string; + doc = "This option can be used with a file"; +}; + +flag = { + name = password; + arg-type = string; + descrip = "Password to use"; + doc = "You can use this option to specify the password in the command line instead of reading it from the tty. Note, that the command line arguments are available for view in others in the system. Specifying password as '' is the same as specifying no password."; +}; + +flag = { + name = null-password; + descrip = "Enforce a NULL password"; + doc = "This option enforces a NULL password. This is different than the empty or no password in schemas like PKCS #8."; +}; + +flag = { + name = empty-password; + descrip = "Enforce an empty password"; + doc = "This option enforces an empty password. This is different than the NULL or no password in schemas like PKCS #8."; +}; + + +flag = { + name = hex-numbers; + descrip = "Print big number in an easier format to parse"; + doc = ""; +}; + +flag = { + name = cprint; + descrip = "In certain operations it prints the information in C-friendly format"; + doc = "In certain operations it prints the information in C-friendly format, suitable for including into C programs."; }; flag = { name = rsa; descrip = "Generate RSA key"; doc = "When combined with --generate-privkey generates an RSA private key."; + description = "This option is equivalent to '--key-type rsa'."; + deprecated; }; flag = { name = dsa; descrip = "Generate DSA key"; doc = "When combined with --generate-privkey generates a DSA private key."; + description = "This option is equivalent to '--key-type dsa'."; + deprecated; }; flag = { name = ecc; descrip = "Generate ECC (ECDSA) key"; doc = "When combined with --generate-privkey generates an elliptic curve private key to be used with ECDSA."; + description = "This option is equivalent to '--key-type ecdsa'."; + deprecated; }; flag = { name = ecdsa; aliases = ecc; + deprecated; }; flag = { @@ -461,6 +596,13 @@ flag = { doc = "Available hash functions are SHA1, RMD160, SHA256, SHA384, SHA512, SHA3-224, SHA3-256, SHA3-384, SHA3-512."; }; +flag = { + name = salt-size; + arg-type = number; + descrip = "Specify the RSA-PSS key default salt size"; + doc = "Typical keys shouldn't set or restrict this option."; +}; + flag = { name = inder; descrip = "Use DER format for input certificates, private keys, and DH parameters "; @@ -489,32 +631,11 @@ flag = { aliases = outder; }; -flag = { - name = bits; - arg-type = number; - descrip = "Specify the number of bits for key generate"; - doc = ""; -}; - -flag = { - name = curve; - arg-type = string; - descrip = "Specify the curve used for EC key generation"; - doc = "Supported values are secp192r1, secp224r1, secp256r1, secp384r1 and secp521r1."; -}; - -flag = { - name = sec-param; - arg-type = string; - arg-name = "Security parameter"; - descrip = "Specify the security level [low, legacy, medium, high, ultra]"; - doc = "This is alternative to the bits option."; -}; - flag = { name = disable-quick-random; descrip = "No effect"; doc = ""; + deprecated; }; flag = { @@ -552,11 +673,19 @@ flag = { doc = "This will override the default options in /etc/gnutls/pkcs11.conf"; }; +flag = { + name = text; + descrip = "Output textual information before PEM-encoded certificates, private keys, etc"; + enabled; + disable = "no"; + doc = "Output textual information before PEM-encoded data"; +}; + doc-section = { ds-type = 'SEE ALSO'; ds-format = 'texi'; ds-text = <<-_EOT_ - p11tool (1) + p11tool (1), psktool (1), srptool (1) _EOT_; }; @@ -621,6 +750,12 @@ To view the certificate information, use: $ certtool --certificate-info --infile cert.pem @end example +@subheading Changing the certificate format +To convert the certificate from PEM to DER format, use: +@example +$ certtool --certificate-info --infile cert.pem --outder --outfile cert.der +@end example + @subheading PKCS #12 structure generation To generate a PKCS #12 structure using the previous key and certificate, use the command: @@ -770,7 +905,8 @@ cn = "Cindy Lauper" #dn = "cn = Nikos,st = New\, Something,C=GR,surName=Mavrogiannopoulos,2.5.4.9=Arkadias" # The serial number of the certificate -# Comment the field for a time-based serial number. +# The value is in decimal (i.e. 1963) or hex (i.e. 0x07ab). +# Comment the field for a random serial number. serial = 007 # In how many days, counting from today, this certificate will expire. @@ -779,7 +915,7 @@ expiration_days = 700 # Alternatively you may set concrete dates and time. The GNU date string # formats are accepted. See: -# http://www.gnu.org/software/tar/manual/html_node/Date-input-formats.html +# https://www.gnu.org/software/tar/manual/html_node/Date-input-formats.html #activation_date = "2004-02-29 16:21:42" #expiration_date = "2025-02-29 16:24:41" @@ -803,7 +939,7 @@ expiration_days = 700 #krb5_principal = HTTP/user@@REALM.COM # A subject alternative name URI -#uri = "http://www.example.com" +#uri = "https://www.example.com" # An IP address in case of a server. #ip_address = "192.168.1.1" @@ -828,7 +964,7 @@ challenge_password = 123456 # An URL that has CRLs (certificate revocation lists) # available. Needed in CA certificates. -#crl_dist_points = "http://www.getcrl.crl/getcrl/" +#crl_dist_points = "https://www.getcrl.crl/getcrl/" # Whether this is a CA certificate or not #ca @@ -882,12 +1018,12 @@ encryption_key # Whether this certificate will be used for a TLS client; -# this sets the id-kp-serverAuth (1.3.6.1.5.5.7.3.1) of +# this sets the id-kp-clientAuth (1.3.6.1.5.5.7.3.2) of # extended key usage. #tls_www_client # Whether this certificate will be used for a TLS server; -# This sets the id-kp-clientAuth (1.3.6.1.5.5.7.3.2) of +# this sets the id-kp-serverAuth (1.3.6.1.5.5.7.3.1) of # extended key usage. #tls_www_server @@ -951,19 +1087,19 @@ encryption_key #path_len = 2 # OCSP URI -# ocsp_uri = http://my.ocsp.server/ocsp +# ocsp_uri = https://my.ocsp.server/ocsp # CA issuers URI -# ca_issuers_uri = http://my.ca.issuer +# ca_issuers_uri = https://my.ca.issuer # Certificate policies #policy1 = 1.3.6.1.4.1.5484.1.10.99.1.0 #policy1_txt = "This is a long policy to summarize" -#policy1_url = http://www.example.com/a-policy-to-read +#policy1_url = https://www.example.com/a-policy-to-read #policy2 = 1.3.6.1.4.1.5484.1.10.99.1.1 #policy2_txt = "This is a short policy" -#policy2_url = http://www.example.com/another-policy-to-read +#policy2_url = https://www.example.com/another-policy-to-read # The number of additional certificates that may appear in a # path before the anyPolicy is no longer acceptable. @@ -1001,7 +1137,15 @@ encryption_key #crl_next_update = 43 # this is the 5th CRL by this CA +# The value is in decimal (i.e. 1963) or hex (i.e. 0x07ab). # Comment the field for a time-based number. +# Time-based CRL numbers generated in GnuTLS 3.6.3 and later +# are significantly larger than those generated in previous +# versions. Since CRL numbers need to be monotonic, you need +# to specify the CRL number here manually if you intend to +# downgrade to an earlier version than 3.6.3 after publishing +# the CRL as it is not possible to specify CRL numbers greater +# than 2**63-2 using hex notation in those versions. #crl_number = 5 # Specify the update dates more precisely. diff --git a/src/certtool-args.h.bak b/src/certtool-args.h.bak deleted file mode 100644 index 5c5dd8fce6..0000000000 --- a/src/certtool-args.h.bak +++ /dev/null @@ -1,379 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (certtool-args.h) - * - * It has been AutoGen-ed - * From the definitions certtool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This header file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the certtool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The certtool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * certtool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * certtool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -/** - * This file contains the programmatic interface to the Automated - * Options generated for the certtool program. - * These macros are documented in the AutoGen info file in the - * "AutoOpts" chapter. Please refer to that doc for usage help. - */ -#ifndef AUTOOPTS_CERTTOOL_ARGS_H_GUARD -#define AUTOOPTS_CERTTOOL_ARGS_H_GUARD 1 -#include "config.h" -#include - -/** - * Ensure that the library used for compiling this generated header is at - * least as new as the version current when the header template was released - * (not counting patch version increments). Also ensure that the oldest - * tolerable version is at least as old as what was current when the header - * template was released. - */ -#define AO_TEMPLATE_VERSION 167937 -#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ - || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) -# error option template version mismatches autoopts/options.h header - Choke Me. -#endif - -/** - * Enumeration of each option type for certtool - */ -typedef enum { - INDEX_OPT_DEBUG = 0, - INDEX_OPT_VERBOSE = 1, - INDEX_OPT_INFILE = 2, - INDEX_OPT_OUTFILE = 3, - INDEX_OPT_GENERATE_SELF_SIGNED = 4, - INDEX_OPT_GENERATE_CERTIFICATE = 5, - INDEX_OPT_GENERATE_PROXY = 6, - INDEX_OPT_GENERATE_CRL = 7, - INDEX_OPT_UPDATE_CERTIFICATE = 8, - INDEX_OPT_GENERATE_PRIVKEY = 9, - INDEX_OPT_PROVABLE = 10, - INDEX_OPT_VERIFY_PROVABLE_PRIVKEY = 11, - INDEX_OPT_SEED = 12, - INDEX_OPT_GENERATE_REQUEST = 13, - INDEX_OPT_VERIFY_CHAIN = 14, - INDEX_OPT_VERIFY = 15, - INDEX_OPT_VERIFY_CRL = 16, - INDEX_OPT_VERIFY_HOSTNAME = 17, - INDEX_OPT_VERIFY_EMAIL = 18, - INDEX_OPT_VERIFY_PURPOSE = 19, - INDEX_OPT_VERIFY_ALLOW_BROKEN = 20, - INDEX_OPT_GENERATE_DH_PARAMS = 21, - INDEX_OPT_GET_DH_PARAMS = 22, - INDEX_OPT_DH_INFO = 23, - INDEX_OPT_LOAD_PRIVKEY = 24, - INDEX_OPT_LOAD_PUBKEY = 25, - INDEX_OPT_LOAD_REQUEST = 26, - INDEX_OPT_LOAD_CERTIFICATE = 27, - INDEX_OPT_LOAD_CA_PRIVKEY = 28, - INDEX_OPT_LOAD_CA_CERTIFICATE = 29, - INDEX_OPT_LOAD_CRL = 30, - INDEX_OPT_LOAD_DATA = 31, - INDEX_OPT_PASSWORD = 32, - INDEX_OPT_NULL_PASSWORD = 33, - INDEX_OPT_EMPTY_PASSWORD = 34, - INDEX_OPT_HEX_NUMBERS = 35, - INDEX_OPT_CPRINT = 36, - INDEX_OPT_CERTIFICATE_INFO = 37, - INDEX_OPT_FINGERPRINT = 38, - INDEX_OPT_KEY_ID = 39, - INDEX_OPT_CERTIFICATE_PUBKEY = 40, - INDEX_OPT_PGP_CERTIFICATE_INFO = 41, - INDEX_OPT_PGP_RING_INFO = 42, - INDEX_OPT_CRL_INFO = 43, - INDEX_OPT_CRQ_INFO = 44, - INDEX_OPT_NO_CRQ_EXTENSIONS = 45, - INDEX_OPT_P12_INFO = 46, - INDEX_OPT_P12_NAME = 47, - INDEX_OPT_P7_GENERATE = 48, - INDEX_OPT_P7_SIGN = 49, - INDEX_OPT_P7_DETACHED_SIGN = 50, - INDEX_OPT_P7_INCLUDE_CERT = 51, - INDEX_OPT_P7_TIME = 52, - INDEX_OPT_P7_SHOW_DATA = 53, - INDEX_OPT_P7_INFO = 54, - INDEX_OPT_P7_VERIFY = 55, - INDEX_OPT_P8_INFO = 56, - INDEX_OPT_SMIME_TO_P7 = 57, - INDEX_OPT_KEY_INFO = 58, - INDEX_OPT_PGP_KEY_INFO = 59, - INDEX_OPT_PUBKEY_INFO = 60, - INDEX_OPT_V1 = 61, - INDEX_OPT_TO_P12 = 62, - INDEX_OPT_TO_P8 = 63, - INDEX_OPT_PKCS8 = 64, - INDEX_OPT_RSA = 65, - INDEX_OPT_DSA = 66, - INDEX_OPT_ECC = 67, - INDEX_OPT_ECDSA = 68, - INDEX_OPT_HASH = 69, - INDEX_OPT_INDER = 70, - INDEX_OPT_INRAW = 71, - INDEX_OPT_OUTDER = 72, - INDEX_OPT_OUTRAW = 73, - INDEX_OPT_BITS = 74, - INDEX_OPT_CURVE = 75, - INDEX_OPT_SEC_PARAM = 76, - INDEX_OPT_DISABLE_QUICK_RANDOM = 77, - INDEX_OPT_TEMPLATE = 78, - INDEX_OPT_STDOUT_INFO = 79, - INDEX_OPT_ASK_PASS = 80, - INDEX_OPT_PKCS_CIPHER = 81, - INDEX_OPT_PROVIDER = 82, - INDEX_OPT_VERSION = 83, - INDEX_OPT_HELP = 84, - INDEX_OPT_MORE_HELP = 85 -} teOptIndex; -/** count of all options for certtool */ -#define OPTION_CT 86 -/** certtool version */ -#define CERTTOOL_VERSION "@VERSION@" -/** Full certtool version text */ -#define CERTTOOL_FULL_VERSION "certtool @VERSION@" - -/** - * Interface defines for all options. Replace "n" with the UPPER_CASED - * option name (as in the teOptIndex enumeration above). - * e.g. HAVE_OPT(DEBUG) - */ -#define DESC(n) (certtoolOptions.pOptDesc[INDEX_OPT_## n]) -/** 'true' if an option has been specified in any way */ -#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) -/** The string argument to an option. The argument type must be \"string\". */ -#define OPT_ARG(n) (DESC(n).optArg.argString) -/** Mask the option state revealing how an option was specified. - * It will be one and only one of \a OPTST_SET, \a OPTST_PRESET, - * \a OPTST_DEFINED, \a OPTST_RESET or zero. - */ -#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) -/** Count of option's occurrances *on the command line*. */ -#define COUNT_OPT(n) (DESC(n).optOccCt) -/** mask of \a OPTST_SET and \a OPTST_DEFINED. */ -#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) -/** 'true' if \a HAVE_OPT would yield 'false'. */ -#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) -/** 'true' if OPTST_DISABLED bit not set. */ -#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) -/** number of stacked option arguments. - * Valid only for stacked option arguments. */ -#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) -/** stacked argument vector. - * Valid only for stacked option arguments. */ -#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) -/** Reset an option. */ -#define CLEAR_OPT(n) STMTS( \ - DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ - if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \ - DESC(n).fOptState |= OPTST_DISABLED; \ - DESC(n).optCookie = NULL ) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Enumeration of certtool exit codes - */ -typedef enum { - CERTTOOL_EXIT_SUCCESS = 0, - CERTTOOL_EXIT_FAILURE = 1, - CERTTOOL_EXIT_USAGE_ERROR = 64, - CERTTOOL_EXIT_LIBOPTS_FAILURE = 70 -} certtool_exit_code_t; -/** - * Interface defines for specific options. - * @{ - */ -#define VALUE_OPT_DEBUG 'd' - -#define OPT_VALUE_DEBUG (DESC(DEBUG).optArg.argInt) -#define VALUE_OPT_VERBOSE 'V' -#define VALUE_OPT_INFILE 0x1001 -#define VALUE_OPT_OUTFILE 0x1002 -#define VALUE_OPT_GENERATE_SELF_SIGNED 's' -#define VALUE_OPT_GENERATE_CERTIFICATE 'c' -#define VALUE_OPT_GENERATE_PROXY 0x1003 -#define VALUE_OPT_GENERATE_CRL 0x1004 -#define VALUE_OPT_UPDATE_CERTIFICATE 'u' -#define VALUE_OPT_GENERATE_PRIVKEY 'p' -#define VALUE_OPT_PROVABLE 0x1005 -#define VALUE_OPT_VERIFY_PROVABLE_PRIVKEY 0x1006 -#define VALUE_OPT_SEED 0x1007 -#define VALUE_OPT_GENERATE_REQUEST 'q' -#define VALUE_OPT_VERIFY_CHAIN 'e' -#define VALUE_OPT_VERIFY 0x1008 -#define VALUE_OPT_VERIFY_CRL 0x1009 -#define VALUE_OPT_VERIFY_HOSTNAME 0x100A -#define VALUE_OPT_VERIFY_EMAIL 0x100B -#define VALUE_OPT_VERIFY_PURPOSE 0x100C -#define VALUE_OPT_VERIFY_ALLOW_BROKEN 0x100D -#define VALUE_OPT_GENERATE_DH_PARAMS 0x100E -#define VALUE_OPT_GET_DH_PARAMS 0x100F -#define VALUE_OPT_DH_INFO 0x1010 -#define VALUE_OPT_LOAD_PRIVKEY 0x1011 -#define VALUE_OPT_LOAD_PUBKEY 0x1012 -#define VALUE_OPT_LOAD_REQUEST 0x1013 -#define VALUE_OPT_LOAD_CERTIFICATE 0x1014 -#define VALUE_OPT_LOAD_CA_PRIVKEY 0x1015 -#define VALUE_OPT_LOAD_CA_CERTIFICATE 0x1016 -#define VALUE_OPT_LOAD_CRL 0x1017 -#define VALUE_OPT_LOAD_DATA 0x1018 -#define VALUE_OPT_PASSWORD 0x1019 -#define VALUE_OPT_NULL_PASSWORD 0x101A -#define VALUE_OPT_EMPTY_PASSWORD 0x101B -#define VALUE_OPT_HEX_NUMBERS 0x101C -#define VALUE_OPT_CPRINT 0x101D -#define VALUE_OPT_CERTIFICATE_INFO 'i' -#define VALUE_OPT_FINGERPRINT 0x101E -#define VALUE_OPT_KEY_ID 0x101F -#define VALUE_OPT_CERTIFICATE_PUBKEY 0x1020 -#define VALUE_OPT_PGP_CERTIFICATE_INFO 0x1021 -#define VALUE_OPT_PGP_RING_INFO 0x1022 -#define VALUE_OPT_CRL_INFO 'l' -#define VALUE_OPT_CRQ_INFO 0x1023 -#define VALUE_OPT_NO_CRQ_EXTENSIONS 0x1024 -#define VALUE_OPT_P12_INFO 0x1025 -#define VALUE_OPT_P12_NAME 0x1026 -#define VALUE_OPT_P7_GENERATE 0x1027 -#define VALUE_OPT_P7_SIGN 0x1028 -#define VALUE_OPT_P7_DETACHED_SIGN 0x1029 -#define VALUE_OPT_P7_INCLUDE_CERT 0x102A -#define VALUE_OPT_P7_TIME 0x102B -#define VALUE_OPT_P7_SHOW_DATA 0x102C -#define VALUE_OPT_P7_INFO 0x102D -#define VALUE_OPT_P7_VERIFY 0x102E -#define VALUE_OPT_P8_INFO 0x102F -#define VALUE_OPT_SMIME_TO_P7 0x1030 -#define VALUE_OPT_KEY_INFO 'k' -#define VALUE_OPT_PGP_KEY_INFO 0x1031 -#define VALUE_OPT_PUBKEY_INFO 0x1032 -#define VALUE_OPT_V1 0x1033 -#define VALUE_OPT_TO_P12 0x1034 -#define VALUE_OPT_TO_P8 0x1035 -#define VALUE_OPT_PKCS8 '8' -#define VALUE_OPT_RSA 0x1036 -#define VALUE_OPT_DSA 0x1037 -#define VALUE_OPT_ECC 0x1038 -#define VALUE_OPT_ECDSA 0x1039 -#define VALUE_OPT_HASH 0x103A -#define VALUE_OPT_INDER 0x103B -#define VALUE_OPT_INRAW 0x103C -#define VALUE_OPT_OUTDER 0x103D -#define VALUE_OPT_OUTRAW 0x103E -#define VALUE_OPT_BITS 0x103F - -#define OPT_VALUE_BITS (DESC(BITS).optArg.argInt) -#define VALUE_OPT_CURVE 0x1040 -#define VALUE_OPT_SEC_PARAM 0x1041 -#define VALUE_OPT_DISABLE_QUICK_RANDOM 0x1042 -#define VALUE_OPT_TEMPLATE 0x1043 -#define VALUE_OPT_STDOUT_INFO 0x1044 -#define VALUE_OPT_ASK_PASS 0x1045 -#define VALUE_OPT_PKCS_CIPHER 0x1046 -#define VALUE_OPT_PROVIDER 0x1047 -/** option flag (value) for help-value option */ -#define VALUE_OPT_HELP 'h' -/** option flag (value) for more-help-value option */ -#define VALUE_OPT_MORE_HELP '!' -/** option flag (value) for version-value option */ -#define VALUE_OPT_VERSION 'v' -/* - * Interface defines not associated with particular options - */ -#define ERRSKIP_OPTERR STMTS(certtoolOptions.fOptSet &= ~OPTPROC_ERRSTOP) -#define ERRSTOP_OPTERR STMTS(certtoolOptions.fOptSet |= OPTPROC_ERRSTOP) -#define RESTART_OPT(n) STMTS( \ - certtoolOptions.curOptIdx = (n); \ - certtoolOptions.pzCurOpt = NULL ) -#define START_OPT RESTART_OPT(1) -#define USAGE(c) (*certtoolOptions.pUsageProc)(&certtoolOptions, c) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * global exported definitions - */ -#include - - -/* * * * * * - * - * Declare the certtool option descriptor. - */ -extern tOptions certtoolOptions; - -#if defined(ENABLE_NLS) -# ifndef _ -# include -# ifndef HAVE_GETTEXT - extern char * gettext(char const *); -# else -# include -# endif - -# ifndef ATTRIBUTE_FORMAT_ARG -# define ATTRIBUTE_FORMAT_ARG(_a) -# endif - -static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1); -static inline char* aoGetsText(char const* pz) { - if (pz == NULL) return NULL; - return (char*)gettext(pz); -} -# define _(s) aoGetsText(s) -# endif /* _() */ - -# define OPT_NO_XLAT_CFG_NAMES STMTS(certtoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT_CFG;) -# define OPT_NO_XLAT_OPT_NAMES STMTS(certtoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;) - -# define OPT_XLAT_CFG_NAMES STMTS(certtoolOptions.fOptSet &= \ - ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);) -# define OPT_XLAT_OPT_NAMES STMTS(certtoolOptions.fOptSet &= \ - ~OPTPROC_NXLAT_OPT;) - -#else /* ENABLE_NLS */ -# define OPT_NO_XLAT_CFG_NAMES -# define OPT_NO_XLAT_OPT_NAMES - -# define OPT_XLAT_CFG_NAMES -# define OPT_XLAT_OPT_NAMES - -# ifndef _ -# define _(_s) _s -# endif -#endif /* ENABLE_NLS */ - -#ifdef __cplusplus -} -#endif -#endif /* AUTOOPTS_CERTTOOL_ARGS_H_GUARD */ - -/* certtool-args.h ends here */ diff --git a/src/certtool-cfg.c b/src/certtool-cfg.c index 657ef0ad93..fbbb4c6ab9 100644 --- a/src/certtool-cfg.c +++ b/src/certtool-cfg.c @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . * * Written by Nikos Mavrogiannopoulos . */ @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -39,7 +38,6 @@ #include #include #include -#include /* for inet_pton */ #include @@ -58,10 +56,8 @@ #include "certtool-common.h" /* to print uint64_t */ -#if SIZEOF_LONG < 8 # define __STDC_FORMAT_MACROS # include -#endif extern int batch; extern int ask_pass; @@ -69,6 +65,16 @@ extern int ask_pass; #define MAX_ENTRIES 128 #define MAX_POLICIES 8 +#define CHECK_MALLOC(x) \ + if (x == NULL) { \ + fprintf(stderr, "memory error\n"); \ + exit(1); \ + } + +#define PRINT_TIME_T_ERROR \ + if (sizeof(time_t) < 8) \ + fprintf(stderr, "This system expresses time with a 32-bit time_t; that prevents dates after 2038 to be expressed by GnuTLS.\n") + enum option_types { OPTION_NUMERIC, OPTION_STRING, OPTION_BOOLEAN, OPTION_MULTI_LINE }; struct cfg_options { @@ -127,10 +133,10 @@ static struct cfg_options available_options[] = { { .name = "inhibit_anypolicy_skip_certs", .type = OPTION_NUMERIC }, { .name = "pkcs12_key_name", .type = OPTION_STRING }, { .name = "proxy_policy_language", .type = OPTION_STRING }, - { .name = "serial", .type = OPTION_NUMERIC }, + { .name = "serial", .type = OPTION_STRING }, { .name = "expiration_days", .type = OPTION_NUMERIC }, { .name = "crl_next_update", .type = OPTION_NUMERIC }, - { .name = "crl_number", .type = OPTION_NUMERIC }, + { .name = "crl_number", .type = OPTION_STRING }, { .name = "path_len", .type = OPTION_NUMERIC }, { .name = "ca", .type = OPTION_BOOLEAN }, { .name = "honor_crq_extensions", .type = OPTION_BOOLEAN }, @@ -197,7 +203,8 @@ typedef struct _cfg_ctx { char *revocation_date; char *this_update_date; char *next_update_date; - int64_t serial; + uint8_t *serial; + unsigned serial_size; int expiration_days; int skip_certs; /* from inhibit anypolicy */ int ca; @@ -218,7 +225,8 @@ typedef struct _cfg_ctx { int ipsec_ike_key; char **key_purpose_oids; int crl_next_update; - int64_t crl_number; + uint8_t *crl_number; + unsigned crl_number_size; int honor_crq_extensions; char *proxy_policy_language; char **exts_to_honor; @@ -233,8 +241,6 @@ void cfg_init(void) { memset(&cfg, 0, sizeof(cfg)); cfg.path_len = -1; - cfg.crl_number = -1; - cfg.serial = -1; cfg.skip_certs = -1; } @@ -245,8 +251,9 @@ void cfg_init(void) if (s_name == NULL) { \ i = 0; \ s_name = malloc(sizeof(char*)*MAX_ENTRIES); \ + CHECK_MALLOC(s_name); \ do { \ - if (val && !strcmp(val->pzName, name)==0) \ + if (val && strcmp(val->pzName, name)!=0) \ continue; \ s_name[i] = strdup(val->v.strVal); \ i++; \ @@ -261,22 +268,17 @@ void cfg_init(void) val = optionGetValue(pov, name); \ if (val != NULL && val->valType == OPARG_TYPE_STRING) \ { \ - char str[512]; \ - char * p; \ - int len; \ + char *str; \ + char *p; \ if (s_name == NULL) { \ i = 0; \ s_name = malloc(sizeof(char*)*MAX_ENTRIES); \ + CHECK_MALLOC(s_name); \ do { \ - if (val && !strcmp(val->pzName, name)==0) \ + if (val && strcmp(val->pzName, name)!=0) \ continue; \ - len = strlen(val->v.strVal); \ - if (sizeof(str) > (unsigned)len) { \ - strcpy(str, val->v.strVal); \ - } else { \ - memcpy(str, val->v.strVal, sizeof(str)-1); \ - str[sizeof(str)-1] = 0; \ - } \ + str = strdup(val->v.strVal); \ + CHECK_MALLOC(str); \ if ((p=strchr(str, ' ')) == NULL && (p=strchr(str, '\t')) == NULL) { \ fprintf(stderr, "Error parsing %s\n", name); \ exit(1); \ @@ -291,6 +293,7 @@ void cfg_init(void) } \ s_name[i+1] = strdup(p); \ i+=2; \ + free(str); \ if (i>=MAX_ENTRIES) \ break; \ } while((val = optionNextValue(pov, val)) != NULL); \ @@ -306,12 +309,6 @@ void cfg_init(void) } /* READ_NUMERIC only returns a long */ -#define CHECK_LONG_OVERFLOW(x) \ - if (x == LONG_MAX) { \ - fprintf(stderr, "overflow in number\n"); \ - exit(1); \ - } - #define READ_NUMERIC(name, s_name) \ val = optionGetValue(pov, name); \ if (val != NULL) \ @@ -335,6 +332,19 @@ void cfg_init(void) output_size = _output.size; \ } +#define SERIAL_DECODE(input, output, output_size) \ + { \ + gnutls_datum_t _output; \ + ret = serial_decode(input, &_output); \ + if (ret < 0) { \ + fprintf(stderr, "error parsing number: %s\n", input); \ + exit(1); \ + } \ + output = _output.data; \ + output_size = _output.size; \ + } + + static int handle_option(const tOptionValue* val) { unsigned j; @@ -518,13 +528,16 @@ int template_parse(const char *template) cfg.pkcs12_key_name = strdup(val->v.strVal); - READ_NUMERIC("serial", cfg.serial); - CHECK_LONG_OVERFLOW(cfg.serial); + val = optionGetValue(pov, "serial"); + if (val != NULL && val->valType == OPARG_TYPE_STRING) + SERIAL_DECODE(val->v.strVal, cfg.serial, cfg.serial_size); READ_NUMERIC("expiration_days", cfg.expiration_days); READ_NUMERIC("crl_next_update", cfg.crl_next_update); - READ_NUMERIC("crl_number", cfg.crl_number); - CHECK_LONG_OVERFLOW(cfg.crl_number); + + val = optionGetValue(pov, "crl_number"); + if (val != NULL && val->valType == OPARG_TYPE_STRING) + SERIAL_DECODE(val->v.strVal, cfg.crl_number, cfg.crl_number_size); READ_NUMERIC("path_len", cfg.path_len); @@ -707,6 +720,56 @@ int64_t read_int(const char *input_str) return read_int_with_default(input_str, 0); } +int serial_decode(const char *input, gnutls_datum_t *output) +{ + int i; + int64_t value; + char *endptr; + int64_t value_limit; + gnutls_datum_t input_datum; + + if (input[0] == '0' && input[1] == 'x') { + input_datum.data = (void *) (input + 2); + input_datum.size = strlen(input + 2); + if (input_datum.size == 0) { + return GNUTLS_E_PARSING_ERROR; + } + return gnutls_hex_decode2(&input_datum, output); + } + +#if SIZEOF_LONG < 8 + value = strtol(input, &endptr, 10); + value_limit = LONG_MAX; +#else + value = strtoll(input, &endptr, 10); + value_limit = LLONG_MAX; +#endif + + if (*endptr != '\0') { + fprintf(stderr, "Trailing garbage: `%s'\n", endptr); + return GNUTLS_E_PARSING_ERROR; + } + + if (value <= 0 || value >= value_limit) { + fprintf(stderr, "Integer out of range: `%s' (min: 1, max: %"PRId64")\n", input, value_limit-1); + return GNUTLS_E_PARSING_ERROR; + } + + output->size = sizeof(int64_t); + output->data = gnutls_malloc(output->size); + if (output->data == NULL) { + output->size = 0; + return GNUTLS_E_MEMORY_ERROR; + } + + for (i = output->size - 1; i >= 0; i--) { + output->data[i] = value & 0xff; + value = value >> 8; + } + + return 0; +} + const char *read_str(const char *input_str) { static char input[MAX_INPUT_SIZE]; @@ -1453,75 +1516,179 @@ void get_pkcs9_email_crt_set(gnutls_x509_crt_t crt) static -void get_rand_int_value(unsigned char* serial, size_t * size, int64_t cfg_val, const char *msg) +int default_crl_number(unsigned char* serial, size_t *size) { struct timespec ts; - uint32_t default_serial[2]; + time_t tv_sec_tmp; + int i; /* default format: - * | 4 b | 4 b | 4b + * | 5 b | 4 b | 11b * | secs | nsecs | rnd | */ gettime(&ts); - if (*size < 12) { - fprintf(stderr, "error in get_serial()!\n"); + if (*size < 20) { + return GNUTLS_E_SHORT_MEMORY_BUFFER; + } + + tv_sec_tmp = ts.tv_sec; + for (i = 4; i >= 0; i--) { + serial[i] = tv_sec_tmp & 0xff; + tv_sec_tmp = tv_sec_tmp >> 8; + } + serial[5] = (ts.tv_nsec >> 24) & 0xff; + serial[6] = (ts.tv_nsec >> 16) & 0xff; + serial[7] = (ts.tv_nsec >> 8) & 0xff; + serial[8] = (ts.tv_nsec) & 0xff; + // crl number must be positive and max 20 octets + // so we must zero the most significant bit (with MSB set, the DER encoding + // would be 21 octets long). See RFC 5280, section 5.2.3. + serial[0] &= 0x7F; + *size = 20; + return gnutls_rnd(GNUTLS_RND_NONCE, &serial[9], 11); +} + +/** + * read_serial_value: + * @serial: pointer to buffer with serial number + * @size: pointer to actual size of data in buffer + * @max_size: capacity of the buffer + * @label: user-facing description of the field we are reading value for + * @rfc_section: rfc section number that defines the field + * + * This function will read a serial number from the user. It takes a buffer + * that contains a default value that will be displayed to the user and + * maximum size of the buffer that it can fill. When the function + * returns, either the buffer is not modified to use the default value + * or it's contents are changed to reflect the user-entered value. + **/ +static +void read_serial_value(unsigned char *serial, size_t *size, size_t max_size, + const char *label, const char *rfc_section) +{ + static char input[MAX_INPUT_SIZE]; + int ret; + size_t input_len; + gnutls_datum_t decoded; + gnutls_datum_t serial_datum; + gnutls_datum_t encoded_default; + + serial_datum.data = serial; + serial_datum.size = *size; + + ret = gnutls_hex_encode2(&serial_datum, &encoded_default); + if (ret < 0) { + fprintf(stderr, "error encoding default to hex: %d\n", ret); exit(1); } - if (batch && cfg_val < 0) { - serial[0] = (ts.tv_sec >> 24) & 0xff; - serial[1] = (ts.tv_sec >> 16) & 0xff; - serial[2] = (ts.tv_sec >> 8) & 0xff; - serial[3] = (ts.tv_sec) & 0xff; - serial[4] = (ts.tv_nsec >> 24) & 0xff; - serial[5] = (ts.tv_nsec >> 16) & 0xff; - serial[6] = (ts.tv_nsec >> 8) & 0xff; - serial[7] = (ts.tv_nsec) & 0xff; - serial[0] &= 0x7F; - assert(gnutls_rnd(GNUTLS_RND_NONCE, &serial[8], 4) >= 0); - *size = 12; - return; + while (true) { + fprintf(stderr, + "Enter the %s in decimal (123) or hex (0xabcd)\n" + "(default is 0x%s)\n" + "value: ", + label, encoded_default.data); + + if (fgets(input, sizeof(input), stdin) == NULL) + break; + + input_len = strip_nl(input, strlen(input)); + + if (input_len == 0) + break; + + ret = serial_decode(input, &decoded); + if (ret < 0) { + fprintf(stderr, "error parsing %s: %s\n", label, input); + continue; + } + + if ((decoded.size == SERIAL_MAX_BYTES && decoded.data[0] & 0x80) || + decoded.size > SERIAL_MAX_BYTES) { + fprintf(stderr, "%s would be encoded in more than 20 bytes," + "see RFC 5280, section %s\n", label, rfc_section); + gnutls_free(decoded.data); + continue; + } + + if (decoded.size > max_size) { + fprintf(stderr, "maximum %zu octets allowed for %s\n", + max_size, label); + gnutls_free(decoded.data); + continue; + } + + memcpy(serial, decoded.data, decoded.size); + *size = decoded.size; + gnutls_free(decoded.data); + break; } - if (batch) { - default_serial[0] = cfg_val >> 32; - default_serial[1] = cfg_val; + gnutls_free(encoded_default.data); +} + +static +void get_serial_value(unsigned char *serial, size_t *size, + const unsigned char *config, size_t config_size, + int (create_default)(unsigned char *, size_t *), + const char *label, const char *rfc_section) +{ + size_t max_size = *size; + int ret; + + if (batch && config != NULL) { + if (config_size > max_size) { + fprintf(stderr, "maximum %zu octets allowed for %s!\n", + max_size, label); + exit(1); + } + memcpy(serial, config, config_size); + *size = config_size; } else { - uint64_t default_serial_int; - char tmsg[256]; + ret = create_default(serial, size); + if (ret < 0) { + fprintf(stderr, "error generating default %s: %s\n", + label, gnutls_strerror(ret)); + exit(1); + } + } -#if SIZEOF_LONG < 8 - default_serial_int = ts.tv_sec; - snprintf(tmsg, sizeof(tmsg), "%s (default: %" PRIu64"): ", msg, default_serial_int); -#else - default_serial_int = (ts.tv_sec << 32) | ts.tv_nsec; - snprintf(tmsg, sizeof(tmsg), "%s (default: %lu): ", msg, default_serial_int); -#endif - default_serial_int = read_int_with_default(tmsg, (long)default_serial_int); + if (!batch) + read_serial_value(serial, size, max_size, label, rfc_section); - default_serial[0] = default_serial_int >> 32; - default_serial[1] = default_serial_int; + if ((*size == SERIAL_MAX_BYTES && serial[0] & 0x80) || *size > SERIAL_MAX_BYTES) { + fprintf(stderr, "%s would be encoded in more than 20 bytes," + "see RFC 5280, section %s\n", label, rfc_section); + exit(1); } +} - serial[0] = (default_serial[0] >> 24) & 0xff; - serial[1] = (default_serial[0] >> 16) & 0xff; - serial[2] = (default_serial[0] >> 8) & 0xff; - serial[3] = (default_serial[0]) & 0xff; - serial[4] = (default_serial[1] >> 24) & 0xff; - serial[5] = (default_serial[1] >> 16) & 0xff; - serial[6] = (default_serial[1] >> 8) & 0xff; - serial[7] = (default_serial[1]) & 0xff; - serial[0] &= 0x7F; +static +int default_serial(unsigned char *serial, size_t *size) +{ + int ret; + + if (*size < SERIAL_MAX_BYTES) + return GNUTLS_E_SHORT_MEMORY_BUFFER; + + ret = gnutls_rnd(GNUTLS_RND_NONCE, serial, SERIAL_MAX_BYTES); + if (ret < 0) + return ret; - *size = 8; + // serial must be positive and max 20 octets + // so we must zero the most significant bit (with MSB set, the DER encoding + // would be 21 octets long). See RFC 5280, section 4.1.2.2. + serial[0] &= 0x7F; + *size = SERIAL_MAX_BYTES; - return; + return 0; } -void get_serial(unsigned char* serial, size_t * size) +void get_serial(unsigned char *serial, size_t *size) { - get_rand_int_value(serial, size, cfg.serial, "Enter the certificate's serial number in decimal"); + get_serial_value(serial, size, cfg.serial, cfg.serial_size, + default_serial, "certificate's serial number", "4.1.2.2"); } static @@ -1530,6 +1697,7 @@ time_t get_date(const char* date) struct timespec r; if (date==NULL || parse_datetime(&r, date, NULL) == 0) { + PRINT_TIME_T_ERROR; fprintf(stderr, "Cannot parse date: %s\n", date); exit(1); } @@ -1591,6 +1759,7 @@ time_t now = time(NULL); return secs; overflow: + PRINT_TIME_T_ERROR; fprintf(stderr, "Overflow while parsing days\n"); exit(1); } @@ -1616,8 +1785,7 @@ time_t get_int_date(const char *txt_val, int int_val, const char *msg) do { days = - read_int - ("The certificate will expire in (days): "); + read_int(msg); } while (days == 0); return days_to_secs(days); @@ -1655,7 +1823,8 @@ int get_crq_extensions_status(void) void get_crl_number(unsigned char* serial, size_t * size) { - get_rand_int_value(serial, size, cfg.crl_number, "CRL Number"); + get_serial_value(serial, size, cfg.crl_number, cfg.crl_number_size, + default_crl_number, "CRL's serial number", "5.2.3"); } int get_path_len(void) @@ -1711,10 +1880,11 @@ int get_tls_server_status(void) /* convert a printable IP to binary */ static int string_to_ip(unsigned char *ip, const char *str) { - int len = strlen(str); int ret; #if HAVE_IPV6 + int len = strlen(str); + if (strchr(str, ':') != NULL || len > 16) { /* IPv6 */ ret = inet_pton(AF_INET6, str, ip); if (ret <= 0) { @@ -2381,8 +2551,8 @@ int get_cert_sign_status(void) } else { return read_yesno - ("Will the certificate be used to sign other certificates? (y/N): ", - 0); + ("Will the certificate be used to sign other certificates? (Y/n): ", + 1); } } @@ -2423,8 +2593,7 @@ int get_data_encipherment_status(void) if (batch) { return cfg.data_encipherment; } else { - /* this option is not asked in interactive mode */ - return 0; + return read_yesno("Will the certificate be used for data encryption? (y/N): ", 0); } } diff --git a/src/certtool-cfg.h b/src/certtool-cfg.h index e3fc56ce99..c23ff5b0b0 100644 --- a/src/certtool-cfg.h +++ b/src/certtool-cfg.h @@ -15,11 +15,14 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . * * Written by Nikos Mavrogiannopoulos . */ +#ifndef GNUTLS_SRC_CERTTOOL_CFG_H +#define GNUTLS_SRC_CERTTOOL_CFG_H + #include #include #include @@ -32,6 +35,7 @@ void read_crt_set(gnutls_x509_crt_t crt, const char *input_str, void read_crq_set(gnutls_x509_crq_t crq, const char *input_str, const char *oid); int64_t read_int(const char *input_str); +int serial_decode(const char *input, gnutls_datum_t *output); const char *read_str(const char *input_str); int read_yesno(const char *input_str, int def); @@ -102,3 +106,5 @@ void get_oid_crq_set(gnutls_x509_crq_t crq); const char *get_proxy_policy(char **policy, size_t * policylen); void crq_extensions_set(gnutls_x509_crt_t crt, gnutls_x509_crq_t crq); + +#endif /* GNUTLS_SRC_CERTTOOL_CFG_H */ diff --git a/src/certtool-common.c b/src/certtool-common.c index 9c223ec94d..c76352c9d8 100644 --- a/src/certtool-common.c +++ b/src/certtool-common.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2003-2016 Free Software Foundation, Inc. - * Copyright (C) 2015-2016 Red Hat, Inc. + * Copyright (C) 2015-2017 Red Hat, Inc. * * This file is part of GnuTLS. * @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -395,6 +395,7 @@ gnutls_x509_crt_t *load_cert_list(int mand, size_t * crt_size, gnutls_datum_t dat; unsigned size; unsigned int crt_max; + unsigned flags = 0; *crt_size = 0; if (info->verbose) @@ -424,7 +425,10 @@ gnutls_x509_crt_t *load_cert_list(int mand, size_t * crt_size, dat.data = (void *) lbuffer; dat.size = size; - ret = gnutls_x509_crt_list_import2(&crt, &crt_max, &dat, GNUTLS_X509_FMT_PEM, 0); + if (info->sort_chain) + flags |= GNUTLS_X509_CRT_LIST_SORT; + + ret = gnutls_x509_crt_list_import2(&crt, &crt_max, &dat, GNUTLS_X509_FMT_PEM, flags); if (ret < 0) { fprintf(stderr, "Error loading certificates: %s\n", gnutls_strerror(ret)); app_exit(1); @@ -698,7 +702,7 @@ gnutls_pubkey_t load_public_key_or_import(int mand, gnutls_pubkey_deinit(pubkey); pubkey = load_pubkey(0, info); if (pubkey == NULL && mand) { - fprintf(stderr, "You must specify --load-privkey\n"); + fprintf(stderr, "Could not determine the public key for the operation.\nYou must specify --load-privkey or --load-pubkey if missing.\n"); app_exit(1); } } @@ -805,14 +809,20 @@ static void print_head(FILE * out, const char *txt, unsigned int size, { unsigned i; char *p, *ntxt; + int ret; if (cprint != 0) { if (size > 0) - asprintf(&ntxt, "const unsigned char %s[%u] =", - txt, size); + ret = asprintf(&ntxt, "const unsigned char %s[%u] =", + txt, size); else - asprintf(&ntxt, "const unsigned char %s[] =\n", - txt); + ret = asprintf(&ntxt, "const unsigned char %s[] =\n", + txt); + + if (ret == -1) { + fprintf(stderr, "memory error\n"); + app_exit(1); + } p = strstr(ntxt, "char"); p += 5; @@ -887,17 +897,74 @@ print_ecc_pkey(FILE * outfile, gnutls_ecc_curve_t curve, fprintf(outfile, "curve:\t%s\n", gnutls_ecc_curve_get_name(curve)); + if (k && k->data) { + print_head(outfile, "private key", k->size, cprint); + print_hex_datum(outfile, k, cprint); + } + + if (x && x->data) { + print_head(outfile, "x", x->size, cprint); + print_hex_datum(outfile, x, cprint); + } + + if (y && y->data) { + print_head(outfile, "y", y->size, cprint); + print_hex_datum(outfile, y, cprint); + } +} + +static void reverse_datum(gnutls_datum_t *d) +{ + unsigned int i; + unsigned char c; + + for (i = 0; i < d->size / 2; i++) { + c = d->data[i]; + d->data[i] = d->data[d->size - i - 1]; + d->data[d->size - i - 1] = c; + } +} + +void +print_gost_pkey(FILE * outfile, gnutls_ecc_curve_t curve, + gnutls_digest_algorithm_t digest, gnutls_gost_paramset_t paramset, + gnutls_datum_t * k, gnutls_datum_t * x, gnutls_datum_t * y, + int cprint) +{ + if (cprint != 0) + fprintf(outfile, "/* curve: %s */\n", + gnutls_ecc_curve_get_name(curve)); + else + fprintf(outfile, "curve:\t%s\n", + gnutls_ecc_curve_get_name(curve)); + + if (cprint != 0) + fprintf(outfile, "/* digest: %s */\n", + gnutls_digest_get_name(digest)); + else + fprintf(outfile, "digest:\t%s\n", + gnutls_digest_get_name(digest)); + + if (cprint != 0) + fprintf(outfile, "/* paramset: %s */\n", + gnutls_gost_paramset_get_name(paramset)); + else + fprintf(outfile, "paramset:\t%s\n", + gnutls_gost_paramset_get_name(paramset)); + if (k) { + reverse_datum(k); print_head(outfile, "private key", k->size, cprint); print_hex_datum(outfile, k, cprint); } + reverse_datum(x); + reverse_datum(y); print_head(outfile, "x", x->size, cprint); print_hex_datum(outfile, x, cprint); print_head(outfile, "y", y->size, cprint); print_hex_datum(outfile, y, cprint); } - void print_rsa_pkey(FILE * outfile, gnutls_datum_t * m, gnutls_datum_t * e, gnutls_datum_t * d, gnutls_datum_t * p, gnutls_datum_t * q, @@ -926,36 +993,40 @@ print_rsa_pkey(FILE * outfile, gnutls_datum_t * m, gnutls_datum_t * e, } } -void _pubkey_info(FILE * outfile, - gnutls_certificate_print_formats_t format, - gnutls_pubkey_t pubkey) +void print_pubkey_info(gnutls_pubkey_t pubkey, + FILE *outfile, + gnutls_certificate_print_formats_t format, + gnutls_x509_crt_fmt_t outcert_format, + unsigned int outtext) { gnutls_datum_t data; int ret; size_t size; - fix_lbuffer(0); + if (outtext) { + ret = gnutls_pubkey_print(pubkey, format, &data); + if (ret < 0) { + fprintf(stderr, "pubkey_print error: %s\n", + gnutls_strerror(ret)); + app_exit(1); + } - ret = gnutls_pubkey_print(pubkey, format, &data); - if (ret < 0) { - fprintf(stderr, "pubkey_print error: %s\n", - gnutls_strerror(ret)); - app_exit(1); + fprintf(outfile, "%s\n\n", data.data); + gnutls_free(data.data); } - fprintf(outfile, "%s\n", data.data); - gnutls_free(data.data); + fix_lbuffer(0); size = lbuffer_size; ret = - gnutls_pubkey_export(pubkey, GNUTLS_X509_FMT_PEM, lbuffer, + gnutls_pubkey_export(pubkey, outcert_format, lbuffer, &size); if (ret < 0) { fprintf(stderr, "export error: %s\n", gnutls_strerror(ret)); app_exit(1); } - fprintf(outfile, "\n%s\n", lbuffer); + fwrite(lbuffer, 1, size, outfile); } static void @@ -1047,7 +1118,7 @@ void dh_info(FILE * infile, FILE * outfile, common_info_st * ci) app_exit(1); } - if (ci->outcert_format == GNUTLS_X509_FMT_PEM) + if (ci->outtext) print_dh_info(outfile, &p, &g, q_bits, ci->cprint); if (!ci->cprint) { /* generate a PKCS#3 structure */ @@ -1097,6 +1168,18 @@ int cipher_to_flags(const char *cipher) return GNUTLS_PKCS_USE_PBES2_AES_256; } else if (strcasecmp(cipher, "rc2-40") == 0) { return GNUTLS_PKCS_USE_PKCS12_RC2_40; + } else if (strcasecmp(cipher, "gost28147-tc26z") == 0) { + return GNUTLS_PKCS_USE_PBES2_GOST_TC26Z; + } else if (strcasecmp(cipher, "gost28147-cpa") == 0) { + return GNUTLS_PKCS_USE_PBES2_GOST_CPA; + } else if (strcasecmp(cipher, "gost28147-cpb") == 0) { + return GNUTLS_PKCS_USE_PBES2_GOST_CPB; + } else if (strcasecmp(cipher, "gost28147-cpc") == 0) { + return GNUTLS_PKCS_USE_PBES2_GOST_CPC; + } else if (strcasecmp(cipher, "gost28147-cpd") == 0) { + return GNUTLS_PKCS_USE_PBES2_GOST_CPD; + } else if (strcasecmp(cipher, "none") == 0) { + return GNUTLS_PKCS_PLAIN; } fprintf(stderr, "unknown cipher %s\n", cipher); @@ -1110,24 +1193,57 @@ static void privkey_info_int(FILE *outfile, common_info_st * cinfo, unsigned int bits = 0; size_t size; const char *cprint; + gnutls_x509_spki_t spki; + gnutls_digest_algorithm_t dig; /* Public key algorithm */ fprintf(outfile, "Public Key Info:\n"); - ret = gnutls_x509_privkey_get_pk_algorithm2(key, &bits); + ret = gnutls_x509_spki_init(&spki); + if (ret < 0) { + fprintf(stderr, "spki_init: %s\n", gnutls_strerror(ret)); + return; + } + fprintf(outfile, "\tPublic Key Algorithm: "); - key_type = ret; + key_type = gnutls_x509_privkey_get_pk_algorithm2(key, &bits); cprint = gnutls_pk_algorithm_get_name(key_type); fprintf(outfile, "%s\n", cprint ? cprint : "Unknown"); + + if (key_type == GNUTLS_PK_RSA_PSS) { + unsigned int salt_size; + + ret = gnutls_x509_privkey_get_spki(key, spki, 0); + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + goto spki_skip; + + if (ret < 0) { + fprintf(stderr, "spki_get: %s\n", gnutls_strerror(ret)); + goto spki_skip; + } + + ret = gnutls_x509_spki_get_rsa_pss_params(spki, &dig, &salt_size); + if (ret < 0) { + fprintf(stderr, "spki_get_rsa_pss_params: %s\n", + gnutls_strerror(ret)); + } else { + fprintf(outfile, "\t\tHash Algorithm: %s\n", + gnutls_digest_get_name(dig)); + fprintf(outfile, "\t\tSalt Length: %d\n", salt_size); + } + } + + spki_skip: + gnutls_x509_spki_deinit(spki); fprintf(outfile, "\tKey Security Level: %s (%u bits)\n\n", gnutls_sec_param_get_name(gnutls_x509_privkey_sec_param (key)), bits); /* Print the raw public and private keys */ - if (key_type == GNUTLS_PK_RSA) { + if (GNUTLS_PK_IS_RSA(key_type)) { gnutls_datum_t m, e, d, p, q, u, exp1, exp2; ret = @@ -1171,7 +1287,9 @@ static void privkey_info_int(FILE *outfile, common_info_st * cinfo, gnutls_free(q.data); gnutls_free(g.data); } - } else if (key_type == GNUTLS_PK_EC) { + } else if (key_type == GNUTLS_PK_ECDSA || + key_type == GNUTLS_PK_EDDSA_ED25519 || + key_type == GNUTLS_PK_EDDSA_ED448) { gnutls_datum_t y, x, k; gnutls_ecc_curve_t curve; @@ -1183,9 +1301,6 @@ static void privkey_info_int(FILE *outfile, common_info_st * cinfo, "Error in key ECC data export: %s\n", gnutls_strerror(ret)); else { - cprint = gnutls_ecc_curve_get_name(curve); - bits = 0; - print_ecc_pkey(outfile, curve, &k, &x, &y, cinfo->cprint); @@ -1193,17 +1308,46 @@ static void privkey_info_int(FILE *outfile, common_info_st * cinfo, gnutls_free(y.data); gnutls_free(k.data); } - } + } else if (key_type == GNUTLS_PK_GOST_01 || + key_type == GNUTLS_PK_GOST_12_256 || + key_type == GNUTLS_PK_GOST_12_512) { + gnutls_datum_t y, x, k; + gnutls_ecc_curve_t curve; + gnutls_digest_algorithm_t digest; + gnutls_gost_paramset_t paramset; - fprintf(outfile, "\n"); + ret = + gnutls_x509_privkey_export_gost_raw(key, &curve, + &digest, + ¶mset, + &x, &y, &k); + if (ret < 0) + fprintf(stderr, + "Error in key GOST data export: %s\n", + gnutls_strerror(ret)); + else { + print_gost_pkey(outfile, curve, digest, paramset, + &k, &x, &y, + cinfo->cprint); + + gnutls_free(x.data); + gnutls_free(y.data); + gnutls_free(k.data); + } + } size = lbuffer_size; - ret = gnutls_x509_privkey_get_seed(key, NULL, lbuffer, &size); + ret = gnutls_x509_privkey_get_seed(key, &dig, lbuffer, &size); if (ret >= 0) { - fprintf(outfile, "Seed: %s\n", - raw_to_string(lbuffer, size)); + fprintf(outfile, "Validation parameters:\n"); + fprintf(outfile, "\tHash: %s\n", + gnutls_digest_get_name(dig)); + fprintf(outfile, "\tSeed: %s\n", + raw_to_hex(lbuffer, size)); } + fprintf(outfile, "\n"); + size = lbuffer_size; ret = gnutls_x509_privkey_get_key_id(key, GNUTLS_KEYID_USE_SHA256, lbuffer, &size); @@ -1238,10 +1382,13 @@ print_private_key(FILE *outfile, common_info_st * cinfo, gnutls_x509_privkey_t k if (!key) return; + /* Only print private key parameters when an unencrypted + * format is used */ + switch_to_pkcs8_when_needed(cinfo, key, gnutls_x509_privkey_get_pk_algorithm(key)); + if (!cinfo->pkcs8) { - /* Only print private key parameters when an unencrypted - * format is used */ - if (cinfo->outcert_format == GNUTLS_X509_FMT_PEM) + + if (cinfo->outtext) privkey_info_int(outfile, cinfo, key); size = lbuffer_size; @@ -1252,22 +1399,6 @@ print_private_key(FILE *outfile, common_info_st * cinfo, gnutls_x509_privkey_t k gnutls_strerror(ret)); app_exit(1); } - - if (cinfo->no_compat == 0 && gnutls_x509_privkey_get_seed(key, NULL, NULL, 0) != GNUTLS_E_INVALID_REQUEST) { - gnutls_x509_privkey_set_flags(key, GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT); - - fwrite(lbuffer, 1, size, outfile); - - size = lbuffer_size; - ret = gnutls_x509_privkey_export(key, cinfo->outcert_format, - lbuffer, &size); - if (ret < 0) { - fprintf(stderr, "privkey_export: %s\n", - gnutls_strerror(ret)); - app_exit(1); - } - } - } else { unsigned int flags = 0; const char *pass; @@ -1275,6 +1406,9 @@ print_private_key(FILE *outfile, common_info_st * cinfo, gnutls_x509_privkey_t k pass = get_password(cinfo, &flags, 0); flags |= cipher_to_flags(cinfo->pkcs_cipher); + if (cinfo->outtext && (flags & GNUTLS_PKCS_PLAIN)) + privkey_info_int(outfile, cinfo, key); + size = lbuffer_size; ret = gnutls_x509_privkey_export_pkcs8(key, cinfo->outcert_format, @@ -1314,7 +1448,6 @@ int generate_prime(FILE * outfile, int how, common_info_st * info) if (how != 0) { if (info->provable != 0) { gnutls_x509_privkey_t pkey; - unsigned save; ret = gnutls_x509_privkey_init(&pkey); if (ret < 0) { @@ -1349,10 +1482,7 @@ int generate_prime(FILE * outfile, int how, common_info_st * info) } if (info->outcert_format == GNUTLS_X509_FMT_PEM) { - save = info->no_compat; - info->no_compat = 1; print_private_key(outfile, info, pkey); - info->no_compat = save; } ret = gnutls_dh_params_import_dsa(dh_params, pkey); @@ -1392,22 +1522,22 @@ int generate_prime(FILE * outfile, int how, common_info_st * info) p = gnutls_ffdhe_2048_group_prime; g = gnutls_ffdhe_2048_group_generator; key_bits = gnutls_ffdhe_2048_key_bits; - bits = 2048; } else if (bits <= 3072) { p = gnutls_ffdhe_3072_group_prime; g = gnutls_ffdhe_3072_group_generator; key_bits = gnutls_ffdhe_3072_key_bits; - bits = 3072; } else if (bits <= 4096) { p = gnutls_ffdhe_4096_group_prime; g = gnutls_ffdhe_4096_group_generator; key_bits = gnutls_ffdhe_4096_key_bits; - bits = 4096; + } else if (bits <= 6144) { + p = gnutls_ffdhe_6144_group_prime; + g = gnutls_ffdhe_6144_group_generator; + key_bits = gnutls_ffdhe_6144_key_bits; } else { p = gnutls_ffdhe_8192_group_prime; g = gnutls_ffdhe_8192_group_generator; key_bits = gnutls_ffdhe_8192_key_bits; - bits = 8192; } ret = gnutls_dh_params_import_raw2(dh_params, &p, &g, key_bits); @@ -1420,23 +1550,18 @@ int generate_prime(FILE * outfile, int how, common_info_st * info) if (bits <= 1024) { p = gnutls_srp_1024_group_prime; g = gnutls_srp_1024_group_generator; - bits = 1024; } else if (bits <= 1536) { p = gnutls_srp_1536_group_prime; g = gnutls_srp_1536_group_generator; - bits = 1536; } else if (bits <= 2048) { p = gnutls_srp_2048_group_prime; g = gnutls_srp_2048_group_generator; - bits = 2048; } else if (bits <= 3072) { p = gnutls_srp_3072_group_prime; g = gnutls_srp_3072_group_generator; - bits = 3072; } else { p = gnutls_srp_4096_group_prime; g = gnutls_srp_4096_group_generator; - bits = 4096; } ret = gnutls_dh_params_import_raw(dh_params, &p, &g); @@ -1452,7 +1577,7 @@ int generate_prime(FILE * outfile, int how, common_info_st * info) #endif } - if (info->outcert_format == GNUTLS_X509_FMT_PEM) + if (info->outtext) print_dh_info(outfile, &p, &g, q_bits, info->cprint); if (!info->cprint) { /* generate a PKCS#3 structure */ @@ -1509,3 +1634,86 @@ void decode_seed(gnutls_datum_t *seed, const char *hex, unsigned hex_size) return; } + +gnutls_pk_algorithm_t figure_key_type(const char *key_type) +{ + if (strcasecmp(key_type, "rsa") == 0) + return GNUTLS_PK_RSA; + else if (strcasecmp(key_type, "rsa-pss") == 0) + return GNUTLS_PK_RSA_PSS; + else if (strcasecmp(key_type, "ed25519") == 0 || strcasecmp(key_type, "eddsa") == 0) + return GNUTLS_PK_EDDSA_ED25519; + else if (strcasecmp(key_type, "ed448") == 0) + return GNUTLS_PK_EDDSA_ED448; + else if (strcasecmp(key_type, "dsa") == 0) + return GNUTLS_PK_DSA; + else if (strcasecmp(key_type, "ecdsa") == 0 || strcasecmp(key_type, "ecc") == 0) + return GNUTLS_PK_ECDSA; + else if (strcasecmp(key_type, "gost01") == 0) + return GNUTLS_PK_GOST_01; + else if (strcasecmp(key_type, "gost12-256") == 0) + return GNUTLS_PK_GOST_12_256; + else if (strcasecmp(key_type, "gost12-512") == 0) + return GNUTLS_PK_GOST_12_512; + else { + fprintf(stderr, "unknown key type: %s\n", key_type); + return GNUTLS_PK_UNKNOWN; + } +} + +gnutls_digest_algorithm_t hash_to_id(const char *hash) +{ + if (strcasecmp(hash, "md5") == 0) { + fprintf(stderr, + "Warning: MD5 is broken, and should not be used any more for digital signatures.\n"); + return GNUTLS_DIG_MD5; + } else if (strcasecmp(hash, "sha1") == 0) + return GNUTLS_DIG_SHA1; + else if (strcasecmp(hash, "sha256") == 0) + return GNUTLS_DIG_SHA256; + else if (strcasecmp(hash, "sha224") == 0) + return GNUTLS_DIG_SHA224; + else if (strcasecmp(hash, "sha384") == 0) + return GNUTLS_DIG_SHA384; + else if (strcasecmp(hash, "sha512") == 0) + return GNUTLS_DIG_SHA512; + else if (strcasecmp(hash, "sha3-256") == 0) + return GNUTLS_DIG_SHA3_256; + else if (strcasecmp(hash, "sha3-224") == 0) + return GNUTLS_DIG_SHA3_224; + else if (strcasecmp(hash, "sha3-384") == 0) + return GNUTLS_DIG_SHA3_384; + else if (strcasecmp(hash, "sha3-512") == 0) + return GNUTLS_DIG_SHA3_512; + else if (strcasecmp(hash, "rmd160") == 0) + return GNUTLS_DIG_RMD160; + else { + return gnutls_digest_get_id(hash); + } +} + +void sign_params_to_flags(common_info_st *cinfo, const char *params) +{ + char *p, *sp; + + sp = strdup(params); + if (sp == NULL) { + fprintf(stderr, "memory error\n"); + app_exit(1); + } + + p = strtok(sp, ","); + + while(p != NULL) { + if (strcasecmp(p, "rsa-pss")==0) { + cinfo->rsa_pss_sign = 1; + } else { + fprintf(stderr, "Unknown signature parameter: %s\n", p); + app_exit(1); + } + + p=strtok(NULL, ","); + } + + free(sp); +} diff --git a/src/certtool-common.h b/src/certtool-common.h index e48396029f..04c7a3e91a 100644 --- a/src/certtool-common.h +++ b/src/certtool-common.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2003-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * This file is part of GnuTLS. * @@ -15,18 +16,21 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ -#ifndef CERTTOOL_COMMON_H -#define CERTTOOL_COMMON_H +#ifndef GNUTLS_SRC_CERTTOOL_COMMON_H +#define GNUTLS_SRC_CERTTOOL_COMMON_H #include #include +#include #define TYPE_CRT 1 #define TYPE_CRQ 2 +#define SERIAL_MAX_BYTES 20 + void certtool_version(void); #include @@ -39,6 +43,7 @@ typedef struct common_info { int pkcs8; int incert_format; int outcert_format; + int outtext; const char *cert; const char *request; @@ -52,6 +57,7 @@ typedef struct common_info { const char *password; int null_password; int empty_password; + int ask_pass; unsigned int crq_extensions; unsigned int v1_cert; /* for key generation */ @@ -63,6 +69,7 @@ typedef struct common_info { const char *pin; const char *so_pin; + gnutls_digest_algorithm_t hash; int cprint; unsigned key_usage; @@ -71,14 +78,44 @@ typedef struct common_info { unsigned int only_urls; unsigned int verbose; - /* set to non zero when no compatibility structs need to be exported */ - unsigned no_compat; + unsigned rsa_pss_sign; + unsigned sort_chain; + + gnutls_sec_param_t verification_profile; } common_info_st; +static inline +void switch_to_pkcs8_when_needed(common_info_st *cinfo, gnutls_x509_privkey_t key, unsigned key_type) +{ + if (cinfo->pkcs8) + return; + + if (key_type == GNUTLS_PK_RSA_PSS || key_type == GNUTLS_PK_EDDSA_ED25519 || key_type == GNUTLS_PK_EDDSA_ED448 || + key_type == GNUTLS_PK_GOST_01 || key_type == GNUTLS_PK_GOST_12_256 || + key_type == GNUTLS_PK_GOST_12_512) { + if (cinfo->verbose) + fprintf(stderr, "Assuming --pkcs8 is given; %s private keys can only be exported in PKCS#8 format\n", + gnutls_pk_algorithm_get_name(key_type)); + cinfo->pkcs8 = 1; + if (cinfo->password == NULL) + cinfo->password = ""; + } + + if (gnutls_x509_privkey_get_seed(key, NULL, NULL, 0) != GNUTLS_E_INVALID_REQUEST) { + if (cinfo->verbose) + fprintf(stderr, "Assuming --pkcs8 is given; provable private keys can only be exported in PKCS#8 format\n"); + cinfo->pkcs8 = 1; + if (cinfo->password == NULL) + cinfo->password = ""; + } +} + /* this must be provided by the app */ +const char *get_pass(void); +const char *get_confirmed_pass(bool empty_ok); void app_exit(int val) #ifdef __GNUC__ -__attribute__ ((noreturn)) +__attribute__ ((__noreturn__)) #endif ; int cipher_to_flags(const char *cipher); @@ -116,11 +153,19 @@ void dh_info(FILE * infile, FILE * outfile, common_info_st * ci); gnutls_x509_privkey_t *load_privkey_list(int mand, size_t * privkey_size, common_info_st * info); -void _pubkey_info(FILE * outfile, gnutls_certificate_print_formats_t, - gnutls_pubkey_t pubkey); +void print_pubkey_info(gnutls_pubkey_t pubkey, + FILE *outfile, + gnutls_certificate_print_formats_t format, + gnutls_x509_crt_fmt_t outcert_format, + unsigned int outtext); void print_ecc_pkey(FILE * outfile, gnutls_ecc_curve_t curve, gnutls_datum_t * k, gnutls_datum_t * x, gnutls_datum_t * y, int cprint); +void print_gost_pkey(FILE * outfile, gnutls_ecc_curve_t curve, + gnutls_digest_algorithm_t digest, + gnutls_gost_paramset_t paramset, + gnutls_datum_t * k, gnutls_datum_t * x, + gnutls_datum_t * y, int cprint); void print_rsa_pkey(FILE * outfile, gnutls_datum_t * m, gnutls_datum_t * e, gnutls_datum_t * d, gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * u, @@ -142,4 +187,12 @@ void fix_lbuffer(unsigned long); void decode_seed(gnutls_datum_t *seed, const char *hex, unsigned hex_size); -#endif +#define GNUTLS_PK_IS_RSA(pk) ((pk) == GNUTLS_PK_RSA || (pk) == GNUTLS_PK_RSA_PSS) + +gnutls_pk_algorithm_t figure_key_type(const char *key_type); + +gnutls_digest_algorithm_t hash_to_id(const char *hash); + +void sign_params_to_flags(common_info_st *cinfo, const char *params); + +#endif /* GNUTLS_SRC_CERTTOOL_COMMON_H */ diff --git a/src/certtool-extras.c b/src/certtool-extras.c index 46e1cbc7c1..7ae54faa50 100644 --- a/src/certtool-extras.c +++ b/src/certtool-extras.c @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include diff --git a/src/certtool.c b/src/certtool.c index 1a8ccf8a0c..a46f774114 100644 --- a/src/certtool.c +++ b/src/certtool.c @@ -1,6 +1,6 @@ /* * Copyright (C) 2003-2016 Free Software Foundation, Inc. - * Copyright (C) 2015-2016 Red Hat, Inc. + * Copyright (C) 2015-2019 Red Hat, Inc. * * This file is part of GnuTLS. * @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -53,16 +53,18 @@ #include "certtool-args.h" #include "certtool-common.h" +#define MAX_HASH_SIZE 64 + static FILE *stdlog = NULL; -static void print_crl_info(gnutls_x509_crl_t crl, FILE * out); +static void print_crl_info(gnutls_x509_crl_t crl, FILE * out, common_info_st *cinfo); void pkcs7_info(common_info_st *cinfo, unsigned display_data); void pkcs7_sign(common_info_st *, unsigned embed); void pkcs7_generate(common_info_st *); void pkcs8_info(void); void pkcs8_info_int(gnutls_datum_t *data, unsigned format, unsigned ignore_err, FILE *out, const char *tab); -void crq_info(void); +void crq_info(common_info_st *cinfo); void smime_to_pkcs7(void); void pkcs12_info(common_info_st *); void generate_pkcs12(common_info_st *); @@ -71,11 +73,8 @@ static void verify_chain(common_info_st * cinfo); void verify_crl(common_info_st * cinfo); void verify_pkcs7(common_info_st * cinfo, const char *purpose, unsigned display_data); void pubkey_info(gnutls_x509_crt_t crt, common_info_st *); -void pgp_privkey_info(void); -void pgp_ring_info(void); void certificate_info(int, common_info_st *); -void pgp_certificate_info(void); -void crl_info(void); +void crl_info(common_info_st *cinfo); void privkey_info(common_info_st *); static void cmd_parser(int argc, char **argv); void generate_self_signed(common_info_st *); @@ -84,16 +83,20 @@ static void print_certificate_info(gnutls_x509_crt_t crt, FILE * out, unsigned int all); static void verify_certificate(common_info_st * cinfo); +static void privkey_to_rsa(common_info_st * cinfo); + static void pubkey_keyid(common_info_st * cinfo); static void certificate_fpr(common_info_st * cinfo); +static gnutls_digest_algorithm_t get_dig(gnutls_x509_crt_t crt, common_info_st * cinfo); FILE *outfile; static const char *outfile_name = NULL; /* to delete on exit */ +#define REQ_KEY_TYPE_DEFAULT GNUTLS_PK_RSA + FILE *infile; -static gnutls_digest_algorithm_t default_dig; static unsigned int incert_format, outcert_format; -static unsigned int req_key_type; +static unsigned int req_key_type = REQ_KEY_TYPE_DEFAULT; gnutls_certificate_print_formats_t full_format = GNUTLS_CRT_PRINT_FULL; /* non interactive operation if set @@ -127,6 +130,21 @@ int main(int argc, char **argv) return 0; } +#define SET_SPKI_PARAMS(spki, cinfo) \ + do { \ + unsigned _salt_size; \ + if (!cinfo->hash) { \ + fprintf(stderr, "You must provide the hash algorithm and optionally the salt size for RSA-PSS\n"); \ + app_exit(1); \ + } \ + if (HAVE_OPT(SALT_SIZE)) { \ + _salt_size = OPT_VALUE_SALT_SIZE; \ + } else { \ + _salt_size = gnutls_hash_get_len(cinfo->hash); \ + } \ + gnutls_x509_spki_set_rsa_pss_params(spki, cinfo->hash, _salt_size); \ + } while(0) + static gnutls_x509_privkey_t generate_private_key_int(common_info_st * cinfo) { @@ -134,6 +152,9 @@ generate_private_key_int(common_info_st * cinfo) int ret, key_type, bits; unsigned provable = cinfo->provable; unsigned flags = 0; + gnutls_keygen_data_st kdata[8]; + unsigned kdata_size = 0; + gnutls_x509_spki_t spki; key_type = req_key_type; @@ -145,17 +166,26 @@ generate_private_key_int(common_info_st * cinfo) bits = get_bits(key_type, cinfo->bits, cinfo->sec_param, 1); - if (key_type == GNUTLS_PK_EC) { + if (key_type == GNUTLS_PK_ECDSA || + key_type == GNUTLS_PK_EDDSA_ED25519 || + key_type == GNUTLS_PK_EDDSA_ED448 || + key_type == GNUTLS_PK_GOST_01 || + key_type == GNUTLS_PK_GOST_12_256 || + key_type == GNUTLS_PK_GOST_12_512) { + char name[64]; int ecc_bits; if (GNUTLS_BITS_ARE_CURVE(bits)) { gnutls_ecc_curve_t curve = GNUTLS_BITS_TO_CURVE(bits); ecc_bits = gnutls_ecc_curve_get_size(curve) * 8; + snprintf(name, sizeof(name), "(%s)", gnutls_ecc_curve_get_name(curve)); } else { ecc_bits = bits; + name[0] = 0; } - fprintf(stdlog, "Generating a %d bit %s private key...\n", - ecc_bits, gnutls_pk_algorithm_get_name(key_type)); + + fprintf(stdlog, "Generating a %d bit %s private key %s...\n", + ecc_bits, gnutls_pk_algorithm_get_name(key_type), name); if (ecc_bits < 256) fprintf(stderr, @@ -165,7 +195,7 @@ generate_private_key_int(common_info_st * cinfo) bits, gnutls_pk_algorithm_get_name(key_type)); } - if (provable && (key_type != GNUTLS_PK_RSA && key_type != GNUTLS_PK_DSA)) { + if (provable && (!GNUTLS_PK_IS_RSA(key_type) && key_type != GNUTLS_PK_DSA)) { fprintf(stderr, "The --provable parameter cannot be used with ECDSA keys.\n"); app_exit(1); @@ -175,20 +205,26 @@ generate_private_key_int(common_info_st * cinfo) fprintf(stderr, "Note that DSA keys with size over 1024 may cause incompatibility problems when used with earlier than TLS 1.2 versions.\n\n"); - if ((HAVE_OPT(SEED) || provable) && key_type == GNUTLS_PK_RSA) { + if ((HAVE_OPT(SEED) || provable) && GNUTLS_PK_IS_RSA(key_type)) { if (bits != 2048 && bits != 3072) { fprintf(stderr, "Note that the FIPS 186-4 key generation restricts keys to 2048 and 3072 bits\n"); } } - if (cinfo->seed_size > 0) { - gnutls_keygen_data_st data; + ret = gnutls_x509_spki_init(&spki); + if (ret < 0) { + fprintf(stderr, "error in SPKI initialization: %s\n", gnutls_strerror(ret)); + app_exit(1); + } - data.type = GNUTLS_KEYGEN_SEED; - data.data = (void*)cinfo->seed; - data.size = cinfo->seed_size; + switch_to_pkcs8_when_needed(cinfo, key, key_type); + + if (cinfo->seed_size > 0) { + kdata[kdata_size].type = GNUTLS_KEYGEN_SEED; + kdata[kdata_size].data = (void*)cinfo->seed; + kdata[kdata_size++].size = cinfo->seed_size; - if (key_type == GNUTLS_PK_RSA) { + if (GNUTLS_PK_IS_RSA(key_type)) { if ((bits == 3072 && cinfo->seed_size != 32) || (bits == 2048 && cinfo->seed_size != 28)) { fprintf(stderr, "The seed size (%d) doesn't match the size of the request security level; use -d 2 for more information.\n", (int)cinfo->seed_size); } @@ -198,18 +234,30 @@ generate_private_key_int(common_info_st * cinfo) } } - ret = gnutls_x509_privkey_generate2(key, key_type, bits, GNUTLS_PRIVKEY_FLAG_PROVABLE, &data, 1); - } else { - if (provable) - flags |= GNUTLS_PRIVKEY_FLAG_PROVABLE; - ret = gnutls_x509_privkey_generate(key, key_type, bits, flags); + flags |= GNUTLS_PRIVKEY_FLAG_PROVABLE; } + + if (key_type == GNUTLS_PK_RSA_PSS && (cinfo->hash || HAVE_OPT(SALT_SIZE))) { + + SET_SPKI_PARAMS(spki, cinfo); + + kdata[kdata_size].type = GNUTLS_KEYGEN_SPKI; + kdata[kdata_size].data = (void*)spki; + kdata[kdata_size++].size = sizeof(spki); + } + + if (provable) + flags |= GNUTLS_PRIVKEY_FLAG_PROVABLE; + + ret = gnutls_x509_privkey_generate2(key, key_type, bits, flags, kdata, kdata_size); if (ret < 0) { fprintf(stderr, "privkey_generate: %s\n", gnutls_strerror(ret)); app_exit(1); } + gnutls_x509_spki_deinit(spki); + ret = gnutls_x509_privkey_verify_params(key); if (ret < 0) { fprintf(stderr, "privkey_verify_params: %s\n", @@ -246,7 +294,10 @@ static void verify_provable_privkey(common_info_st * cinfo) } if (ret < 0) { - fprintf(stderr, "Error verifying private key: %s\n", gnutls_strerror(ret)); + if (ret == GNUTLS_E_UNIMPLEMENTED_FEATURE) + fprintf(stderr, "The private key type cannot be associated with validated parameters\n"); + else + fprintf(stderr, "Error verifying private key: %s\n", gnutls_strerror(ret)); app_exit(1); } @@ -256,13 +307,13 @@ static void verify_provable_privkey(common_info_st * cinfo) return; } - static gnutls_x509_crt_t generate_certificate(gnutls_privkey_t * ret_key, gnutls_x509_crt_t ca_crt, int proxy, common_info_st * cinfo) { gnutls_x509_crt_t crt; + gnutls_x509_spki_t spki; gnutls_privkey_t key = NULL; gnutls_pubkey_t pubkey; size_t size; @@ -273,6 +324,8 @@ generate_certificate(gnutls_privkey_t * ret_key, int vers; unsigned int usage = 0, server, ask; gnutls_x509_crq_t crq; /* request */ + unsigned pk; + char timebuf[SIMPLE_CTIME_BUF_SIZE]; ret = gnutls_x509_crt_init(&crt); if (ret < 0) { @@ -321,7 +374,6 @@ generate_certificate(gnutls_privkey_t * ret_key, get_oid_crt_set(crt); get_key_purpose_set(TYPE_CRT, crt); - get_extensions_crt_set(TYPE_CRT, crt); if (!batch) fprintf(stderr, @@ -340,6 +392,7 @@ generate_certificate(gnutls_privkey_t * ret_key, } gnutls_pubkey_deinit(pubkey); } else { + result = gnutls_x509_crt_set_crq(crt, crq); if (result < 0) { fprintf(stderr, "set_crq: %s\n", @@ -350,10 +403,11 @@ generate_certificate(gnutls_privkey_t * ret_key, crq_extensions_set(crt, crq); } + pk = gnutls_x509_crt_get_pk_algorithm(crt, NULL); { size_t serial_size; - unsigned char serial[16]; + unsigned char serial[SERIAL_MAX_BYTES]; serial_size = sizeof(serial); @@ -385,8 +439,8 @@ generate_certificate(gnutls_privkey_t * ret_key, if (ca_crt && (secs > gnutls_x509_crt_get_expiration_time(ca_crt))) { time_t exp = gnutls_x509_crt_get_expiration_time(ca_crt); - fprintf(stderr, "\nExpiration time: %s", ctime(&secs)); - fprintf(stderr, "CA expiration time: %s", ctime(&exp)); + fprintf(stderr, "\nExpiration time: %s\n", simple_ctime(&secs, timebuf)); + fprintf(stderr, "CA expiration time: %s\n", simple_ctime(&exp, timebuf)); fprintf(stderr, "Warning: The time set exceeds the CA's expiration time\n"); ask = 1; } @@ -413,6 +467,8 @@ generate_certificate(gnutls_privkey_t * ret_key, } } + get_extensions_crt_set(TYPE_CRT, crt); + /* append additional extensions */ if (cinfo->v1_cert == 0) { @@ -497,12 +553,10 @@ generate_certificate(gnutls_privkey_t * ret_key, } if (!ca_status || server) { - int pk; - - - pk = gnutls_x509_crt_get_pk_algorithm(crt, NULL); - - if (pk == GNUTLS_PK_RSA) { /* DSA and ECDSA keys can only sign. */ + if (pk == GNUTLS_PK_RSA || + pk == GNUTLS_PK_GOST_01 || + pk == GNUTLS_PK_GOST_12_256 || + pk == GNUTLS_PK_GOST_12_512) { /* DSA and ECDSA keys can only sign. */ result = get_sign_status(server); if (result) usage |= @@ -513,9 +567,6 @@ generate_certificate(gnutls_privkey_t * ret_key, usage |= GNUTLS_KEY_KEY_ENCIPHERMENT; } else { - if (get_encrypt_status(server)) - fprintf(stderr, "warning: this algorithm does not support encryption; disabling the encryption flag\n"); - usage |= GNUTLS_KEY_DIGITAL_SIGNATURE; } @@ -529,6 +580,11 @@ generate_certificate(gnutls_privkey_t * ret_key, app_exit(1); } } + + } else if (ca_status) { + /* CAs always sign */ + if (get_sign_status(server)) + usage |= GNUTLS_KEY_DIGITAL_SIGNATURE; } result = get_key_agreement_status(); @@ -608,7 +664,7 @@ generate_certificate(gnutls_privkey_t * ret_key, get_ca_issuers_set(crt); if (usage != 0) { - /* http://tools.ietf.org/html/rfc4945#section-5.1.3.2: if any KU is + /* https://tools.ietf.org/html/rfc4945#section-5.1.3.2: if any KU is set, then either digitalSignature or the nonRepudiation bits in the KeyUsage extension MUST for all IKE certs */ if (is_ike && (get_sign_status(server) != 1)) @@ -672,6 +728,65 @@ generate_certificate(gnutls_privkey_t * ret_key, app_exit(1); } + if ((HAVE_OPT(KEY_TYPE) || req_key_type != REQ_KEY_TYPE_DEFAULT) && req_key_type != pk) { + if (pk != GNUTLS_PK_RSA || req_key_type != GNUTLS_PK_RSA_PSS) { + fprintf(stderr, "cannot set certificate type (%s) incompatible with the key (%s)\n", + gnutls_pk_get_name(req_key_type), gnutls_pk_get_name(pk)); + app_exit(1); + } + } + + /* Set algorithm parameter restriction in CAs. + */ + if (pk == GNUTLS_PK_RSA_PSS && ca_status && key) { + result = gnutls_x509_spki_init(&spki); + if (result < 0) { + fprintf(stderr, "spki_init: %s\n", + gnutls_strerror(result)); + app_exit(1); + } + + result = gnutls_privkey_get_spki(key, spki, 0); + if (result >= 0) { + result = gnutls_x509_crt_set_spki(crt, spki, 0); + if (result < 0) { + fprintf(stderr, "error setting RSA-PSS SPKI information: %s\n", + gnutls_strerror(result)); + app_exit(1); + } + } + + gnutls_x509_spki_deinit(spki); + + } else if (pk == GNUTLS_PK_RSA && req_key_type == GNUTLS_PK_RSA_PSS) { + result = gnutls_x509_spki_init(&spki); + if (result < 0) { + fprintf(stderr, "spki_init: %s\n", + gnutls_strerror(result)); + app_exit(1); + } + + SET_SPKI_PARAMS(spki, cinfo); + + result = gnutls_x509_crt_set_spki(crt, spki, 0); + if (result < 0) { + fprintf(stderr, "error setting RSA-PSS SPKI information: %s\n", + gnutls_strerror(result)); + app_exit(1); + } + + gnutls_x509_spki_deinit(spki); + } + + /* always set CRL distribution points on CAs, but also on certificates + * generated with --generate-self-signed. The latter is to retain + * compatibility with previous versions of certtool. */ + if (ca_status || (!proxy && ca_crt == NULL)) { + get_crl_dist_point_set(crt); + } else if (!proxy && ca_crt != NULL) { + gnutls_x509_crt_cpy_crl_dist_points(crt, ca_crt); + } + *ret_key = key; return crt; @@ -728,7 +843,6 @@ generate_crl(gnutls_x509_crt_t ca_crt, common_info_st * cinfo) app_exit(1); } - fprintf(stderr, "Update times.\n"); secs = get_crl_next_update(); result = @@ -768,7 +882,7 @@ generate_crl(gnutls_x509_crt_t ca_crt, common_info_st * cinfo) { size_t serial_size; - unsigned char serial[16]; + unsigned char serial[SERIAL_MAX_BYTES]; serial_size = sizeof(serial); @@ -785,7 +899,7 @@ generate_crl(gnutls_x509_crt_t ca_crt, common_info_st * cinfo) return crl; } -static gnutls_digest_algorithm_t get_dig_for_pub(gnutls_pubkey_t pubkey) +static gnutls_digest_algorithm_t get_dig_for_pub(gnutls_pubkey_t pubkey, common_info_st * cinfo) { gnutls_digest_algorithm_t dig; int result; @@ -804,19 +918,23 @@ static gnutls_digest_algorithm_t get_dig_for_pub(gnutls_pubkey_t pubkey) } /* if algorithm allows alternatives */ - if (mand == 0 && default_dig != GNUTLS_DIG_UNKNOWN) - dig = default_dig; + if (mand == 0 && cinfo->hash != GNUTLS_DIG_UNKNOWN) + dig = cinfo->hash; return dig; } -static gnutls_digest_algorithm_t get_dig(gnutls_x509_crt_t crt) +static gnutls_digest_algorithm_t get_dig(gnutls_x509_crt_t crt, common_info_st * cinfo) { gnutls_digest_algorithm_t dig; gnutls_pubkey_t pubkey; int result; - gnutls_pubkey_init(&pubkey); + result = gnutls_pubkey_init(&pubkey); + if (result < 0) { + fprintf(stderr, "memory error\n"); + app_exit(1); + } result = gnutls_pubkey_import_x509(pubkey, crt, 0); if (result < 0) { @@ -827,7 +945,7 @@ static gnutls_digest_algorithm_t get_dig(gnutls_x509_crt_t crt) } } - dig = get_dig_for_pub(pubkey); + dig = get_dig_for_pub(pubkey, cinfo); gnutls_pubkey_deinit(pubkey); @@ -837,9 +955,10 @@ static gnutls_digest_algorithm_t get_dig(gnutls_x509_crt_t crt) void generate_self_signed(common_info_st * cinfo) { gnutls_x509_crt_t crt; + gnutls_datum_t out; gnutls_privkey_t key; - size_t size; int result; + unsigned int flags = 0; fprintf(stdlog, "Generating a self signed certificate...\n"); @@ -848,28 +967,29 @@ void generate_self_signed(common_info_st * cinfo) if (!key) key = load_private_key(1, cinfo); - get_crl_dist_point_set(crt); - print_certificate_info(crt, stdlog, 0); fprintf(stdlog, "\n\nSigning certificate...\n"); + if (cinfo->rsa_pss_sign) + flags |= GNUTLS_PRIVKEY_SIGN_FLAG_RSA_PSS; + result = - gnutls_x509_crt_privkey_sign(crt, crt, key, get_dig(crt), 0); + gnutls_x509_crt_privkey_sign(crt, crt, key, get_dig(crt, cinfo), flags); if (result < 0) { fprintf(stderr, "crt_sign: %s\n", gnutls_strerror(result)); app_exit(1); } - size = lbuffer_size; result = - gnutls_x509_crt_export(crt, outcert_format, lbuffer, &size); + gnutls_x509_crt_export2(crt, outcert_format, &out); if (result < 0) { fprintf(stderr, "crt_export: %s\n", gnutls_strerror(result)); app_exit(1); } - fwrite(lbuffer, 1, size, outfile); + fwrite(out.data, 1, out.size, outfile); + gnutls_free(out.data); gnutls_x509_crt_deinit(crt); gnutls_privkey_deinit(key); @@ -879,10 +999,11 @@ static void generate_signed_certificate(common_info_st * cinfo) { gnutls_x509_crt_t crt; gnutls_privkey_t key; - size_t size; + gnutls_datum_t out; int result; gnutls_privkey_t ca_key; gnutls_x509_crt_t ca_crt; + unsigned int flags = 0; fprintf(stdlog, "Generating a signed certificate...\n"); @@ -891,33 +1012,30 @@ static void generate_signed_certificate(common_info_st * cinfo) crt = generate_certificate(&key, ca_crt, 0, cinfo); - /* Copy the CRL distribution points. - */ - gnutls_x509_crt_cpy_crl_dist_points(crt, ca_crt); - /* it doesn't matter if we couldn't copy the CRL dist points. - */ - print_certificate_info(crt, stdlog, 0); fprintf(stdlog, "\n\nSigning certificate...\n"); + if (cinfo->rsa_pss_sign) + flags |= GNUTLS_PRIVKEY_SIGN_FLAG_RSA_PSS; + result = gnutls_x509_crt_privkey_sign(crt, ca_crt, ca_key, - get_dig(ca_crt), 0); + get_dig(ca_crt, cinfo), flags); if (result < 0) { fprintf(stderr, "crt_sign: %s\n", gnutls_strerror(result)); app_exit(1); } - size = lbuffer_size; result = - gnutls_x509_crt_export(crt, outcert_format, lbuffer, &size); + gnutls_x509_crt_export2(crt, outcert_format, &out); if (result < 0) { fprintf(stderr, "crt_export: %s\n", gnutls_strerror(result)); app_exit(1); } - fwrite(lbuffer, 1, size, outfile); + fwrite(out.data, 1, out.size, outfile); + gnutls_free(out.data); gnutls_x509_crt_deinit(crt); gnutls_x509_crt_deinit(ca_crt); @@ -929,8 +1047,9 @@ static void generate_proxy_certificate(common_info_st * cinfo) { gnutls_x509_crt_t crt, eecrt; gnutls_privkey_t key, eekey; - size_t size; + gnutls_datum_t out; int result; + unsigned int flags = 0; fprintf(stdlog, "Generating a proxy certificate...\n"); @@ -943,23 +1062,26 @@ static void generate_proxy_certificate(common_info_st * cinfo) fprintf(stdlog, "\n\nSigning certificate...\n"); + if (cinfo->rsa_pss_sign) + flags |= GNUTLS_PRIVKEY_SIGN_FLAG_RSA_PSS; + result = - gnutls_x509_crt_privkey_sign(crt, eecrt, eekey, get_dig(eecrt), - 0); + gnutls_x509_crt_privkey_sign(crt, eecrt, eekey, get_dig(eecrt, cinfo), + flags); if (result < 0) { fprintf(stderr, "crt_sign: %s\n", gnutls_strerror(result)); app_exit(1); } - size = lbuffer_size; result = - gnutls_x509_crt_export(crt, outcert_format, lbuffer, &size); + gnutls_x509_crt_export2(crt, outcert_format, &out); if (result < 0) { fprintf(stderr, "crt_export: %s\n", gnutls_strerror(result)); app_exit(1); } - fwrite(lbuffer, 1, size, outfile); + fwrite(out.data, 1, out.size, outfile); + gnutls_free(out.data); gnutls_x509_crt_deinit(eecrt); gnutls_x509_crt_deinit(crt); @@ -983,14 +1105,14 @@ static void generate_signed_crl(common_info_st * cinfo) fprintf(stdlog, "\n"); result = gnutls_x509_crl_privkey_sign(crl, ca_crt, ca_key, - get_dig(ca_crt), 0); + get_dig(ca_crt, cinfo), 0); if (result < 0) { fprintf(stderr, "crl_privkey_sign: %s\n", gnutls_strerror(result)); app_exit(1); } - print_crl_info(crl, stdlog); + print_crl_info(crl, stdlog, cinfo); gnutls_privkey_deinit(ca_key); gnutls_x509_crl_deinit(crl); @@ -1000,14 +1122,18 @@ static void generate_signed_crl(common_info_st * cinfo) static void update_signed_certificate(common_info_st * cinfo) { gnutls_x509_crt_t crt; - size_t size; int result; gnutls_privkey_t ca_key; + gnutls_privkey_t pkey; + gnutls_pubkey_t pubkey; gnutls_x509_crt_t ca_crt; + gnutls_datum_t out; time_t tim; + unsigned int flags = 0; fprintf(stdlog, "Generating a signed certificate...\n"); + ca_key = load_ca_private_key(cinfo); ca_crt = load_ca_cert(1, cinfo); crt = load_cert(1, cinfo); @@ -1023,7 +1149,6 @@ static void update_signed_certificate(common_info_st * cinfo) } tim = get_expiration_date(); - result = gnutls_x509_crt_set_expiration_time(crt, tim); if (result < 0) { fprintf(stderr, "set_expiration: %s\n", @@ -1031,29 +1156,59 @@ static void update_signed_certificate(common_info_st * cinfo) app_exit(1); } + pkey = load_private_key(0, cinfo); + pubkey = load_public_key_or_import(0, pkey, cinfo); + + if (pubkey) { + fprintf(stderr, "Updating public key\n"); + result = gnutls_x509_crt_set_pubkey(crt, pubkey); + if (result < 0) { + fprintf(stderr, "cannot set public key: %s\n", + gnutls_strerror(result)); + app_exit(1); + } + } + fprintf(stderr, "\n\nSigning certificate...\n"); + if (cinfo->rsa_pss_sign) + flags |= GNUTLS_PRIVKEY_SIGN_FLAG_RSA_PSS; + result = gnutls_x509_crt_privkey_sign(crt, ca_crt, ca_key, - get_dig(ca_crt), 0); + get_dig(ca_crt, cinfo), flags); if (result < 0) { fprintf(stderr, "crt_sign: %s\n", gnutls_strerror(result)); app_exit(1); } - size = lbuffer_size; result = - gnutls_x509_crt_export(crt, outcert_format, lbuffer, &size); + gnutls_x509_crt_export2(crt, outcert_format, &out); if (result < 0) { fprintf(stderr, "crt_export: %s\n", gnutls_strerror(result)); app_exit(1); } - fwrite(lbuffer, 1, size, outfile); + fwrite(out.data, 1, out.size, outfile); + gnutls_free(out.data); gnutls_x509_crt_deinit(crt); } +static void load_infile(const char *file) +{ + struct stat st; + if (stat(file, &st) == 0) { + fix_lbuffer(2*st.st_size); + } + + infile = fopen(file, "rb"); + if (infile == NULL) { + fprintf(stderr, "Cannot open %s for reading\n", OPT_ARG(INFILE)); + app_exit(1); + } +} + static void cmd_parser(int argc, char **argv) { int ret, privkey_op = 0; @@ -1068,8 +1223,7 @@ static void cmd_parser(int argc, char **argv) stdlog = stderr; } - if (HAVE_OPT(GENERATE_PRIVKEY) || HAVE_OPT(GENERATE_REQUEST) || - HAVE_OPT(KEY_INFO) || HAVE_OPT(PGP_KEY_INFO)) + if (HAVE_OPT(GENERATE_PRIVKEY) || HAVE_OPT(GENERATE_REQUEST)) privkey_op = 1; if (HAVE_OPT(HEX_NUMBERS)) @@ -1086,19 +1240,26 @@ static void cmd_parser(int argc, char **argv) outfile = stdout; } - if (HAVE_OPT(INFILE)) { - struct stat st; - if (stat(OPT_ARG(INFILE), &st) == 0) { - fix_lbuffer(2*st.st_size); - } + if (!HAVE_OPT(INFILE)) { + /* infile can be different option depending on command */ + if (HAVE_OPT(CERTIFICATE_INFO) && HAVE_OPT(LOAD_CERTIFICATE)) { + load_infile(OPT_ARG(LOAD_CERTIFICATE)); + } else if (HAVE_OPT(CRQ_INFO) && HAVE_OPT(LOAD_REQUEST)) { + load_infile(OPT_ARG(LOAD_REQUEST)); + } else if (HAVE_OPT(PUBKEY_INFO) && HAVE_OPT(LOAD_PUBKEY)) { + load_infile(OPT_ARG(LOAD_PUBKEY)); + } else if (HAVE_OPT(KEY_INFO) && HAVE_OPT(LOAD_PRIVKEY)) { + load_infile(OPT_ARG(LOAD_PRIVKEY)); + } else if (HAVE_OPT(TO_RSA) && HAVE_OPT(LOAD_PRIVKEY)) { + load_infile(OPT_ARG(LOAD_PRIVKEY)); + } else if (HAVE_OPT(CRL_INFO) && HAVE_OPT(LOAD_CRL)) { + load_infile(OPT_ARG(LOAD_CRL)); + } else + infile = stdin; + } else { + load_infile(OPT_ARG(INFILE)); + } - infile = fopen(OPT_ARG(INFILE), "rb"); - if (infile == NULL) { - fprintf(stderr, "Cannot open %s for reading\n", OPT_ARG(INFILE)); - app_exit(1); - } - } else - infile = stdin; fix_lbuffer(0); @@ -1112,46 +1273,19 @@ static void cmd_parser(int argc, char **argv) else outcert_format = GNUTLS_X509_FMT_PEM; - if (HAVE_OPT(DSA)) - req_key_type = GNUTLS_PK_DSA; - else if (HAVE_OPT(ECC)) - req_key_type = GNUTLS_PK_ECC; - else + /* legacy options */ + if (HAVE_OPT(RSA)) { req_key_type = GNUTLS_PK_RSA; + } else if (HAVE_OPT(DSA)) { + req_key_type = GNUTLS_PK_DSA; + } else if (HAVE_OPT(ECC)) { + req_key_type = GNUTLS_PK_ECDSA; + } - default_dig = GNUTLS_DIG_UNKNOWN; - if (HAVE_OPT(HASH)) { - if (strcasecmp(OPT_ARG(HASH), "md5") == 0) { - fprintf(stderr, - "Warning: MD5 is broken, and should not be used any more for digital signatures.\n"); - default_dig = GNUTLS_DIG_MD5; - } else if (strcasecmp(OPT_ARG(HASH), "sha1") == 0) - default_dig = GNUTLS_DIG_SHA1; - else if (strcasecmp(OPT_ARG(HASH), "sha256") == 0) - default_dig = GNUTLS_DIG_SHA256; - else if (strcasecmp(OPT_ARG(HASH), "sha224") == 0) - default_dig = GNUTLS_DIG_SHA224; - else if (strcasecmp(OPT_ARG(HASH), "sha384") == 0) - default_dig = GNUTLS_DIG_SHA384; - else if (strcasecmp(OPT_ARG(HASH), "sha512") == 0) - default_dig = GNUTLS_DIG_SHA512; - else if (strcasecmp(OPT_ARG(HASH), "sha3-256") == 0) - default_dig = GNUTLS_DIG_SHA3_256; - else if (strcasecmp(OPT_ARG(HASH), "sha3-224") == 0) - default_dig = GNUTLS_DIG_SHA3_224; - else if (strcasecmp(OPT_ARG(HASH), "sha3-384") == 0) - default_dig = GNUTLS_DIG_SHA3_384; - else if (strcasecmp(OPT_ARG(HASH), "sha3-512") == 0) - default_dig = GNUTLS_DIG_SHA3_512; - else if (strcasecmp(OPT_ARG(HASH), "rmd160") == 0) - default_dig = GNUTLS_DIG_RMD160; - else { - default_dig = gnutls_digest_get_id(OPT_ARG(HASH)); - if (default_dig == GNUTLS_DIG_UNKNOWN) { - fprintf(stderr, "invalid hash: %s\n", OPT_ARG(HASH)); - app_exit(1); - } - } + if (HAVE_OPT(KEY_TYPE)) { + req_key_type = figure_key_type(OPT_ARG(KEY_TYPE)); + if (req_key_type == GNUTLS_PK_UNKNOWN) + app_exit(1); } batch = 0; @@ -1160,7 +1294,6 @@ static void cmd_parser(int argc, char **argv) template_parse(OPT_ARG(TEMPLATE)); } - ask_pass = ENABLED_OPT(ASK_PASS); gnutls_global_set_log_function(tls_log_func); @@ -1175,6 +1308,17 @@ static void cmd_parser(int argc, char **argv) } memset(&cinfo, 0, sizeof(cinfo)); + + ask_pass = cinfo.ask_pass = ENABLED_OPT(ASK_PASS); + cinfo.hash = GNUTLS_DIG_UNKNOWN; + if (HAVE_OPT(HASH)) { + cinfo.hash = hash_to_id(OPT_ARG(HASH)); + if (cinfo.hash == GNUTLS_DIG_UNKNOWN) { + fprintf(stderr, "invalid hash: %s\n", OPT_ARG(HASH)); + app_exit(1); + } + } + #ifdef ENABLE_PKCS11 if (HAVE_OPT(PROVIDER)) { ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_MANUAL, NULL); @@ -1231,6 +1375,7 @@ static void cmd_parser(int argc, char **argv) cinfo.pkcs8 = HAVE_OPT(PKCS8); cinfo.incert_format = incert_format; cinfo.outcert_format = outcert_format; + cinfo.outtext = ENABLED_OPT(TEXT) && outcert_format == GNUTLS_X509_FMT_PEM; if (HAVE_OPT(LOAD_CERTIFICATE)) cinfo.cert = OPT_ARG(LOAD_CERTIFICATE); @@ -1279,6 +1424,23 @@ static void cmd_parser(int argc, char **argv) cinfo.password = ""; } + if (HAVE_OPT(VERIFY_PROFILE)) { + if (strcasecmp(OPT_ARG(VERIFY_PROFILE), "none")) { + cinfo.verification_profile = GNUTLS_PROFILE_UNKNOWN; + } else { + cinfo.verification_profile = gnutls_certificate_verification_profile_get_id(OPT_ARG(VERIFY_PROFILE)); + } + } else if (!HAVE_OPT(VERIFY_ALLOW_BROKEN)) { + if (HAVE_OPT(VERIFY_CHAIN) || HAVE_OPT(VERIFY)) { + fprintf(stderr, "Note that no verification profile was selected. In the future the medium profile will be enabled by default.\n"); + fprintf(stderr, "Use --verify-profile low to apply the default verification of NORMAL priority string.\n"); + } + /* cinfo.verification_profile = GNUTLS_PROFILE_LOW; */ + } + + if (HAVE_OPT(SIGN_PARAMS)) + sign_params_to_flags(&cinfo, OPT_ARG(SIGN_PARAMS)); + if (HAVE_OPT(GENERATE_SELF_SIGNED)) generate_self_signed(&cinfo); else if (HAVE_OPT(GENERATE_CERTIFICATE)) @@ -1309,7 +1471,9 @@ static void cmd_parser(int argc, char **argv) certificate_info(1, &cinfo); else if (HAVE_OPT(KEY_INFO)) privkey_info(&cinfo); - else if (HAVE_OPT(PUBKEY_INFO)) + else if (HAVE_OPT(TO_RSA)) { + privkey_to_rsa(&cinfo); + } else if (HAVE_OPT(PUBKEY_INFO)) pubkey_info(NULL, &cinfo); else if (HAVE_OPT(FINGERPRINT)) certificate_fpr(&cinfo); @@ -1324,7 +1488,7 @@ static void cmd_parser(int argc, char **argv) else if (HAVE_OPT(GET_DH_PARAMS)) generate_prime(outfile, 0, &cinfo); else if (HAVE_OPT(CRL_INFO)) - crl_info(); + crl_info(&cinfo); else if (HAVE_OPT(P7_INFO)) pkcs7_info(&cinfo, ENABLED_OPT(P7_SHOW_DATA)); else if (HAVE_OPT(P7_GENERATE)) @@ -1341,16 +1505,8 @@ static void cmd_parser(int argc, char **argv) smime_to_pkcs7(); else if (HAVE_OPT(TO_P8)) generate_pkcs8(&cinfo); -#ifdef ENABLE_OPENPGP - else if (HAVE_OPT(PGP_CERTIFICATE_INFO)) - pgp_certificate_info(); - else if (HAVE_OPT(PGP_KEY_INFO)) - pgp_privkey_info(); - else if (HAVE_OPT(PGP_RING_INFO)) - pgp_ring_info(); -#endif else if (HAVE_OPT(CRQ_INFO)) - crq_info(); + crq_info(&cinfo); else USAGE(1); @@ -1369,6 +1525,7 @@ void certificate_info(int pubkey, common_info_st * cinfo) { gnutls_x509_crt_t *crts = NULL; size_t size; + gnutls_datum_t out; int ret, i, count; gnutls_datum_t pem; unsigned int crt_num; @@ -1403,339 +1560,31 @@ void certificate_info(int pubkey, common_info_st * cinfo) if (i > 0) fprintf(outfile, "\n"); - if (outcert_format == GNUTLS_X509_FMT_PEM) + if (cinfo->outtext) print_certificate_info(crts[i], outfile, 1); - if (pubkey) + if (pubkey) { + /* this deinitializes the certificate */ pubkey_info(crts[i], cinfo); - else { - size = lbuffer_size; + } else { ret = - gnutls_x509_crt_export(crts[i], outcert_format, - lbuffer, &size); + gnutls_x509_crt_export2(crts[i], outcert_format, &out); if (ret < 0) { fprintf(stderr, "export error: %s\n", gnutls_strerror(ret)); app_exit(1); } - fwrite(lbuffer, 1, size, outfile); - } - - gnutls_x509_crt_deinit(crts[i]); - } - gnutls_free(crts); -} - -#ifdef ENABLE_OPENPGP - -void pgp_certificate_info(void) -{ - gnutls_openpgp_crt_t crt; - size_t size; - int ret; - gnutls_datum_t pem, out_data; - unsigned int verify_status; - - pem.data = (void *) fread_file(infile, &size); - pem.size = size; - - if (!pem.data) { - fprintf(stderr, "%s", infile ? "file" : "standard input"); - app_exit(1); - } - - ret = gnutls_openpgp_crt_init(&crt); - if (ret < 0) { - fprintf(stderr, "openpgp_crt_init: %s\n", - gnutls_strerror(ret)); - app_exit(1); - } - - ret = gnutls_openpgp_crt_import(crt, &pem, incert_format); - - if (ret < 0) { - fprintf(stderr, "import error: %s\n", gnutls_strerror(ret)); - app_exit(1); - } - - free(pem.data); - - if (outcert_format == GNUTLS_OPENPGP_FMT_BASE64) { - ret = gnutls_openpgp_crt_print(crt, 0, &out_data); - - if (ret == 0) { - fprintf(outfile, "%s\n", out_data.data); - gnutls_free(out_data.data); - } - } - - - ret = gnutls_openpgp_crt_verify_self(crt, 0, &verify_status); - if (ret < 0) { - { - fprintf(stderr, "verify signature error: %s\n", - gnutls_strerror(ret)); - app_exit(1); - } - } - - if (verify_status & GNUTLS_CERT_INVALID) { - fprintf(outcert_format == GNUTLS_OPENPGP_FMT_RAW ? stderr : outfile, - "Self Signature verification: failed\n\n"); - } else { - fprintf(outcert_format == GNUTLS_OPENPGP_FMT_RAW ? stderr : outfile, - "Self Signature verification: ok (%x)\n\n", - verify_status); - } - - size = lbuffer_size; - ret = - gnutls_openpgp_crt_export(crt, outcert_format, lbuffer, &size); - if (ret < 0) { - fprintf(stderr, "export error: %s\n", gnutls_strerror(ret)); - app_exit(1); - } - - fprintf(outfile, "%s\n", lbuffer); - gnutls_openpgp_crt_deinit(crt); -} - -void pgp_privkey_info(void) -{ - gnutls_openpgp_privkey_t key; - unsigned char keyid[GNUTLS_OPENPGP_KEYID_SIZE]; - size_t size; - int ret, i, subkeys, bits = 0; - gnutls_datum_t pem; - const char *cprint; - - size = fread(lbuffer, 1, lbuffer_size - 1, infile); - lbuffer[size] = 0; - - gnutls_openpgp_privkey_init(&key); - - pem.data = lbuffer; - pem.size = size; - - ret = gnutls_openpgp_privkey_import(key, &pem, incert_format, - NULL, 0); - - if (ret < 0) { - fprintf(stderr, "import error: %s\n", gnutls_strerror(ret)); - app_exit(1); - } - - /* Public key algorithm - */ - subkeys = gnutls_openpgp_privkey_get_subkey_count(key); - if (subkeys < 0) { - fprintf(stderr, "privkey_get_subkey_count: %s\n", - gnutls_strerror(subkeys)); - app_exit(1); - } - - for (i = -1; i < subkeys; i++) { - - if (i != -1) - fprintf(outfile, "Subkey[%d]:\n", i); - - fprintf(outfile, "Public Key Info:\n"); - - if (i == -1) - ret = - gnutls_openpgp_privkey_get_pk_algorithm(key, - NULL); - else - ret = - gnutls_openpgp_privkey_get_subkey_pk_algorithm - (key, i, NULL); - - fprintf(outfile, "\tPublic Key Algorithm: "); - cprint = gnutls_pk_algorithm_get_name(ret); - fprintf(outfile, "%s\n", cprint ? cprint : "Unknown"); - fprintf(outfile, "\tKey Security Level: %s\n", - gnutls_sec_param_get_name - (gnutls_openpgp_privkey_sec_param(key))); - - /* Print the raw public and private keys - */ - - if (ret == GNUTLS_PK_RSA) { - gnutls_datum_t m, e, d, p, q, u; - - if (i == -1) - ret = - gnutls_openpgp_privkey_export_rsa_raw - (key, &m, &e, &d, &p, &q, &u); - else - ret = - gnutls_openpgp_privkey_export_subkey_rsa_raw - (key, i, &m, &e, &d, &p, &q, &u); - if (ret < 0) - fprintf(stderr, - "Error in key RSA data export: %s\n", - gnutls_strerror(ret)); - else - print_rsa_pkey(outfile, &m, &e, &d, &p, &q, - &u, NULL, NULL, - HAVE_OPT(CPRINT)); - - bits = m.size * 8; - } else if (ret == GNUTLS_PK_DSA) { - gnutls_datum_t p, q, g, y, x; - - if (i == -1) - ret = - gnutls_openpgp_privkey_export_dsa_raw - (key, &p, &q, &g, &y, &x); - else - ret = - gnutls_openpgp_privkey_export_subkey_dsa_raw - (key, i, &p, &q, &g, &y, &x); - if (ret < 0) - fprintf(stderr, - "Error in key DSA data export: %s\n", - gnutls_strerror(ret)); - else - print_dsa_pkey(outfile, &x, &y, &p, &q, &g, - HAVE_OPT(CPRINT)); - - bits = y.size * 8; - } - - fprintf(outfile, "\n"); - - size = lbuffer_size; - if (i == -1) - ret = - gnutls_openpgp_privkey_get_key_id(key, keyid); - else - ret = - gnutls_openpgp_privkey_get_subkey_id(key, i, - keyid); - - if (ret < 0) { - fprintf(stderr, - "Error in key id calculation: %s\n", - gnutls_strerror(ret)); - } else { - fprintf(outfile, "Public key ID: %s\n", - raw_to_string(keyid, 8)); - } - - size = lbuffer_size; - if (i == -1) - ret = - gnutls_openpgp_privkey_get_fingerprint(key, - lbuffer, - &size); - else - ret = - gnutls_openpgp_privkey_get_subkey_fingerprint - (key, i, lbuffer, &size); - - if (ret < 0) { - fprintf(stderr, - "Error in fingerprint calculation: %s\n", - gnutls_strerror(ret)); - } else { - gnutls_datum_t art; - - fprintf(outfile, "Fingerprint: %s\n", - raw_to_string(lbuffer, size)); - } - } - - size = lbuffer_size; - ret = gnutls_openpgp_privkey_export(key, GNUTLS_OPENPGP_FMT_BASE64, - NULL, 0, lbuffer, &size); - if (ret < 0) { - fprintf(stderr, "export error: %s\n", gnutls_strerror(ret)); - app_exit(1); - } - - fprintf(outfile, "\n%s\n", lbuffer); - - gnutls_openpgp_privkey_deinit(key); -} - -void pgp_ring_info(void) -{ - gnutls_openpgp_keyring_t ring; - gnutls_openpgp_crt_t crt; - size_t size; - int ret, i, count; - gnutls_datum_t pem; - - pem.data = (void *) fread_file(infile, &size); - pem.size = size; - - if (!pem.data) { - fprintf(stderr, "%s", infile ? "file" : "standard input"); - app_exit(1); - } - - ret = gnutls_openpgp_keyring_init(&ring); - if (ret < 0) { - fprintf(stderr, "openpgp_keyring_init: %s\n", - gnutls_strerror(ret)); - app_exit(1); - } - - ret = gnutls_openpgp_keyring_import(ring, &pem, incert_format); - - if (ret < 0) { - fprintf(stderr, "import error: %s\n", gnutls_strerror(ret)); - app_exit(1); - } - - free(pem.data); - - count = gnutls_openpgp_keyring_get_crt_count(ring); - if (count >= 0) - fprintf(outfile, - "Keyring contains %d OpenPGP certificates\n\n", - count); - else { - fprintf(stderr, "keyring error: %s\n", - gnutls_strerror(count)); - app_exit(1); - } - - for (i = 0; i < count; i++) { - ret = gnutls_openpgp_keyring_get_crt(ring, i, &crt); - if (ret < 0) { - fprintf(stderr, "export error: %s\n", - gnutls_strerror(ret)); - app_exit(1); - } + fwrite(out.data, 1, out.size, outfile); + gnutls_free(out.data); - size = lbuffer_size; - ret = gnutls_openpgp_crt_export(crt, outcert_format, - lbuffer, &size); - if (ret < 0) { - fprintf(stderr, "export error: %s\n", - gnutls_strerror(ret)); - app_exit(1); + gnutls_x509_crt_deinit(crts[i]); } - fwrite(lbuffer, 1, size, outfile); - fprintf(outfile, "\n\n"); - - gnutls_openpgp_crt_deinit(crt); - - } - - gnutls_openpgp_keyring_deinit(ring); + gnutls_free(crts); } - -#endif - - - static void print_certificate_info(gnutls_x509_crt_t crt, FILE * out, unsigned int all) { @@ -1761,13 +1610,13 @@ print_certificate_info(gnutls_x509_crt_t crt, FILE * out, unsigned int all) } } -static void print_crl_info(gnutls_x509_crl_t crl, FILE * out) +static void print_crl_info(gnutls_x509_crl_t crl, FILE * out, common_info_st *cinfo) { gnutls_datum_t data; gnutls_datum_t cout; int ret; - if (outcert_format == GNUTLS_X509_FMT_PEM) { + if (cinfo->outtext) { ret = gnutls_x509_crl_print(crl, full_format, &data); if (ret < 0) { fprintf(stderr, "crl_print: %s\n", gnutls_strerror(ret)); @@ -1789,7 +1638,7 @@ static void print_crl_info(gnutls_x509_crl_t crl, FILE * out) gnutls_free(cout.data); } -void crl_info(void) +void crl_info(common_info_st *cinfo) { gnutls_x509_crl_t crl; int ret; @@ -1818,18 +1667,18 @@ void crl_info(void) app_exit(1); } - print_crl_info(crl, outfile); + print_crl_info(crl, outfile, cinfo); gnutls_x509_crl_deinit(crl); } -static void print_crq_info(gnutls_x509_crq_t crq, FILE * out) +static void print_crq_info(gnutls_x509_crq_t crq, FILE * out, common_info_st *cinfo) { gnutls_datum_t data; int ret; size_t size; - if (outcert_format == GNUTLS_X509_FMT_PEM) { + if (cinfo->outtext) { ret = gnutls_x509_crq_print(crq, full_format, &data); if (ret < 0) { fprintf(stderr, "crq_print: %s\n", @@ -1844,10 +1693,10 @@ static void print_crq_info(gnutls_x509_crq_t crq, FILE * out) ret = gnutls_x509_crq_verify(crq, 0); if (ret < 0) { - fprintf(outcert_format == GNUTLS_X509_FMT_PEM ? out : stderr, + fprintf(cinfo->outtext ? out : stderr, "Self signature: FAILED\n\n"); } else { - fprintf(outcert_format == GNUTLS_X509_FMT_PEM ? out : stderr, + fprintf(cinfo->outtext ? out : stderr, "Self signature: verified\n\n"); } @@ -1861,7 +1710,7 @@ static void print_crq_info(gnutls_x509_crq_t crq, FILE * out) fwrite(lbuffer, 1, size, outfile); } -void crq_info(void) +void crq_info(common_info_st *cinfo) { gnutls_x509_crq_t crq; int ret; @@ -1890,7 +1739,7 @@ void crq_info(void) app_exit(1); } - print_crq_info(crq, outfile); + print_crq_info(crq, outfile, cinfo); gnutls_x509_crq_deinit(crq); } @@ -1907,7 +1756,11 @@ void privkey_info(common_info_st * cinfo) size = fread(lbuffer, 1, lbuffer_size - 1, infile); lbuffer[size] = 0; - gnutls_x509_privkey_init(&key); + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) { + fprintf(stderr, "privkey_init: %s", gnutls_strerror(ret)); + app_exit(1); + } pem.data = lbuffer; pem.size = size; @@ -1948,6 +1801,71 @@ void privkey_info(common_info_st * cinfo) gnutls_x509_privkey_deinit(key); } +static void privkey_to_rsa(common_info_st * cinfo) +{ + gnutls_x509_privkey_t key; + size_t size; + int ret; + gnutls_datum_t pem; + const char *pass; + unsigned int flags = 0; + gnutls_datum_t out; + + size = fread(lbuffer, 1, lbuffer_size - 1, infile); + lbuffer[size] = 0; + + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) { + fprintf(stderr, "privkey_init: %s", gnutls_strerror(ret)); + app_exit(1); + } + + pem.data = lbuffer; + pem.size = size; + + ret = + gnutls_x509_privkey_import2(key, &pem, incert_format, NULL, GNUTLS_PKCS_PLAIN); + + /* If we failed to import the certificate previously try PKCS #8 */ + if (ret == GNUTLS_E_DECRYPTION_FAILED) { + fprintf(stderr, "Encrypted structure detected...\n"); + + if (outcert_format == GNUTLS_X509_FMT_DER) + pkcs8_info_int(&pem, incert_format, 1, stderr, ""); + else + pkcs8_info_int(&pem, incert_format, 1, outfile, ""); + + pass = get_password(cinfo, &flags, 0); + + ret = gnutls_x509_privkey_import2(key, &pem, + incert_format, pass, + flags); + } + if (ret < 0) { + fprintf(stderr, "import error: %s\n", gnutls_strerror(ret)); + app_exit(1); + } + + ret = gnutls_x509_privkey_get_pk_algorithm(key); + if (ret != GNUTLS_PK_RSA && ret != GNUTLS_PK_RSA_PSS) { + fprintf(stderr, "unexpected key type: %s\n", gnutls_pk_get_name(ret)); + app_exit(1); + } + + gnutls_x509_privkey_set_flags(key, GNUTLS_PRIVKEY_FLAG_EXPORT_COMPAT); + + ret = gnutls_x509_privkey_export2(key, cinfo->outcert_format, &out); + if (ret < 0) { + fprintf(stderr, "export error: %s\n", gnutls_strerror(ret)); + app_exit(1); + } + + fwrite(out.data, out.size, 1, outfile); + gnutls_free(out.data); + + gnutls_x509_privkey_deinit(key); +} + /* Generate a PKCS #10 certificate request. */ @@ -2052,7 +1970,10 @@ void generate_request(common_info_st * cinfo) app_exit(1); } - if (pk == GNUTLS_PK_RSA) { + if (pk == GNUTLS_PK_RSA || + pk == GNUTLS_PK_GOST_01 || + pk == GNUTLS_PK_GOST_12_256 || + pk == GNUTLS_PK_GOST_12_512) { ret = get_sign_status(1); if (ret) usage |= GNUTLS_KEY_DIGITAL_SIGNATURE; @@ -2181,13 +2102,13 @@ void generate_request(common_info_st * cinfo) ret = gnutls_x509_crq_privkey_sign(crq, pkey, - get_dig_for_pub(pubkey), 0); + get_dig_for_pub(pubkey, cinfo), 0); if (ret < 0) { fprintf(stderr, "sign: %s\n", gnutls_strerror(ret)); app_exit(1); } - print_crq_info(crq, outfile); + print_crq_info(crq, outfile, cinfo); gnutls_x509_crq_deinit(crq); gnutls_privkey_deinit(pkey); @@ -2197,6 +2118,23 @@ void generate_request(common_info_st * cinfo) static void print_verification_res(FILE * outfile, unsigned int output); +static const char *get_signature_algo(gnutls_x509_crt_t crt) +{ + int ret; + static char oid[128]; + + ret = gnutls_x509_crt_get_signature_algorithm(crt); + if (ret < 0 || ret == GNUTLS_SIGN_UNKNOWN) { + size_t oid_size = sizeof(oid); + ret = gnutls_x509_crt_get_signature_oid(crt, oid, &oid_size); + if (ret < 0) + return NULL; + return oid; + } + + return gnutls_sign_get_name(ret); +} + static int detailed_verification(gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer, gnutls_x509_crl_t crl, @@ -2245,6 +2183,8 @@ static int detailed_verification(gnutls_x509_crt_t cert, fprintf(outfile, "\tChecked against: %s\n", issuer_name.data); } + fprintf(outfile, "\tSignature algorithm: %s\n", get_signature_algo(cert)); + if (crl != NULL) { gnutls_datum_t data; gnutls_free(issuer_name.data); @@ -2471,6 +2411,7 @@ _verify_x509_mem(const void *cert, int cert_size, common_info_st *cinfo, } vflags = GNUTLS_VERIFY_DO_NOT_ALLOW_SAME; + vflags |= GNUTLS_PROFILE_TO_VFLAGS(cinfo->verification_profile); if (HAVE_OPT(VERIFY_ALLOW_BROKEN)) vflags |= GNUTLS_VERIFY_ALLOW_BROKEN; @@ -2609,7 +2550,7 @@ void verify_crl(common_info_st * cinfo) size_t size; gnutls_datum_t dn; unsigned int output; - int ret; + int ret, rc; gnutls_datum_t pem, pout; gnutls_x509_crl_t crl; gnutls_x509_crt_t issuer; @@ -2647,9 +2588,8 @@ void verify_crl(common_info_st * cinfo) app_exit(1); } - print_crl_info(crl, outfile); + print_crl_info(crl, outfile, cinfo); - fprintf(outfile, "Verification output: "); ret = gnutls_x509_crl_verify(crl, &issuer, 1, 0, &output); if (ret < 0) { fprintf(stderr, "verification error: %s\n", @@ -2657,10 +2597,14 @@ void verify_crl(common_info_st * cinfo) app_exit(1); } + fprintf(outfile, "Verification output: "); + if (output) { fprintf(outfile, "Not verified. "); + rc = 1; } else { fprintf(outfile, "Verified."); + rc = 0; } ret = @@ -2676,95 +2620,24 @@ void verify_crl(common_info_st * cinfo) gnutls_free(pout.data); fprintf(outfile, "\n"); -} - -static void print_dn(const char *prefix, const gnutls_datum_t *raw) -{ - gnutls_x509_dn_t dn = NULL; - gnutls_datum_t str = {NULL, 0}; - int ret; - - ret = gnutls_x509_dn_init(&dn); - if (ret < 0) - return; - - ret = gnutls_x509_dn_import(dn, raw); - if (ret < 0) - goto cleanup; - - ret = gnutls_x509_dn_get_str2(dn, &str, 0); - if (ret < 0) - goto cleanup; - fprintf(outfile, "%s: %s\n", prefix, str.data); - - cleanup: - gnutls_x509_dn_deinit(dn); - gnutls_free(str.data); + app_exit(rc); } -static void print_raw(const char *prefix, const gnutls_datum_t *raw) +static void print_pkcs7_sig_info(gnutls_pkcs7_signature_info_st *info, common_info_st *cinfo) { int ret; - gnutls_datum_t tmp; + gnutls_datum_t str; - if (raw->data == NULL || raw->size == 0) - return; - - ret = gnutls_hex_encode2(raw, &tmp); + ret = gnutls_pkcs7_print_signature_info(info, GNUTLS_CRT_PRINT_COMPACT, &str); if (ret < 0) { - fprintf(stderr, "gnutls_hex_encode2: %s\n", - gnutls_strerror(ret)); + fprintf(stderr, "printing error: %s\n", + gnutls_strerror(ret)); app_exit(1); } - fprintf(outfile, "%s: %s\n", prefix, tmp.data); - gnutls_free(tmp.data); -} - -static void print_pkcs7_sig_info(gnutls_pkcs7_signature_info_st *info, common_info_st *cinfo) -{ - unsigned i; - char *oid; - gnutls_datum_t data; - char prefix[128]; - int ret; - - print_dn("\tSigner's issuer DN", &info->issuer_dn); - print_raw("\tSigner's serial", &info->signer_serial); - print_raw("\tSigner's issuer key ID", &info->issuer_keyid); - if (info->signing_time != -1) - fprintf(outfile, "\tSigning time: %s", ctime(&info->signing_time)); - - fprintf(outfile, "\tSignature Algorithm: %s\n", gnutls_sign_get_name(info->algo)); - - if (info->signed_attrs) { - for (i=0;;i++) { - ret = gnutls_pkcs7_get_attr(info->signed_attrs, i, &oid, &data, 0); - if (ret < 0) - break; - if (i==0) - fprintf(outfile, "\tSigned Attributes:\n"); - - snprintf(prefix, sizeof(prefix), "\t\t%s", oid); - print_raw(prefix, &data); - gnutls_free(data.data); - } - } - if (info->unsigned_attrs) { - for (i=0;;i++) { - ret = gnutls_pkcs7_get_attr(info->unsigned_attrs, i, &oid, &data, 0); - if (ret < 0) - break; - if (i==0) - fprintf(outfile, "\tUnsigned Attributes:\n"); - - snprintf(prefix, sizeof(prefix), "\t\t%s", oid); - print_raw(prefix, &data); - gnutls_free(data.data); - } - } - fprintf(outfile, "\n"); + fprintf(outfile, "%s", str.data); + gnutls_free(str.data); } void verify_pkcs7(common_info_st * cinfo, const char *purpose, unsigned display_data) @@ -2926,7 +2799,7 @@ void pkcs7_sign(common_info_st * cinfo, unsigned embed) if (embed) flags |= GNUTLS_PKCS7_EMBED_DATA; - ret = gnutls_pkcs7_sign(pkcs7, *crts, key, &data, NULL, NULL, get_dig(*crts), flags); + ret = gnutls_pkcs7_sign(pkcs7, *crts, key, &data, NULL, NULL, get_dig(*crts, cinfo), flags); if (ret < 0) { fprintf(stderr, "Error signing: %s\n", gnutls_strerror(ret)); app_exit(1); @@ -3055,6 +2928,7 @@ void generate_pkcs12(common_info_st * cinfo) gnutls_x509_crl_t *crls; gnutls_x509_crt_t *crts, ca_crt; gnutls_x509_privkey_t *keys; + gnutls_mac_algorithm_t mac; int result; size_t size; gnutls_datum_t data; @@ -3081,6 +2955,11 @@ void generate_pkcs12(common_info_st * cinfo) app_exit(1); } + if (cinfo->hash != GNUTLS_DIG_UNKNOWN) + mac = cinfo->hash; + else + mac = GNUTLS_MAC_SHA1; + if (HAVE_OPT(P12_NAME)) { name = OPT_ARG(P12_NAME); } else { @@ -3107,7 +2986,7 @@ void generate_pkcs12(common_info_st * cinfo) app_exit(1); } - assert(crts[i] != NULL); + assert(crts != NULL && crts[i] != NULL); result = gnutls_pkcs12_bag_set_crt(bag, crts[i]); if (result < 0) { fprintf(stderr, "set_crt[%d]: %s\n", i, @@ -3242,6 +3121,8 @@ void generate_pkcs12(common_info_st * cinfo) app_exit(1); } + assert(keys != NULL && keys[i] != NULL); + size = lbuffer_size; result = gnutls_x509_privkey_export_pkcs8(keys[i], @@ -3305,7 +3186,7 @@ void generate_pkcs12(common_info_st * cinfo) gnutls_pkcs12_bag_deinit(kbag); } - result = gnutls_pkcs12_generate_mac(pkcs12, pass); + result = gnutls_pkcs12_generate_mac2(pkcs12, mac, pass); if (result < 0) { fprintf(stderr, "generate_mac: %s\n", gnutls_strerror(result)); @@ -3351,7 +3232,7 @@ static const char *BAGTYPE(gnutls_pkcs12_bag_type_t x) } } -static void print_bag_data(gnutls_pkcs12_bag_t bag) +static void print_bag_data(gnutls_pkcs12_bag_t bag, int outtext) { int result; int count, i, type; @@ -3365,7 +3246,8 @@ static void print_bag_data(gnutls_pkcs12_bag_t bag) app_exit(1); } - fprintf(outfile, "\tElements: %d\n", count); + if (outtext) + fprintf(outfile, "\tElements: %d\n", count); for (i = 0; i < count; i++) { type = gnutls_pkcs12_bag_get_type(bag, i); @@ -3375,7 +3257,8 @@ static void print_bag_data(gnutls_pkcs12_bag_t bag) app_exit(1); } - fprintf(stderr, "\tType: %s\n", BAGTYPE(type)); + if (outtext) + fprintf(outfile, "\tType: %s\n", BAGTYPE(type)); result = gnutls_pkcs12_bag_get_data(bag, i, &cdata); if (result < 0) { @@ -3384,12 +3267,9 @@ static void print_bag_data(gnutls_pkcs12_bag_t bag) app_exit(1); } - if (type == GNUTLS_BAG_PKCS8_ENCRYPTED_KEY) { - if (outcert_format == GNUTLS_X509_FMT_DER) - pkcs8_info_int(&cdata, GNUTLS_X509_FMT_DER, 1, stderr, "\t"); - else - pkcs8_info_int(&cdata, GNUTLS_X509_FMT_DER, 1, outfile, "\t"); - } + if (type == GNUTLS_BAG_PKCS8_ENCRYPTED_KEY && + outtext) + pkcs8_info_int(&cdata, GNUTLS_X509_FMT_DER, 1, outfile, "\t"); name = NULL; result = @@ -3401,7 +3281,7 @@ static void print_bag_data(gnutls_pkcs12_bag_t bag) app_exit(1); } - if (name) + if (name && outtext) fprintf(outfile, "\tFriendly name: %s\n", name); id.data = NULL; @@ -3413,7 +3293,7 @@ static void print_bag_data(gnutls_pkcs12_bag_t bag) app_exit(1); } - if (id.size > 0) + if (id.size > 0 && outtext) fprintf(outfile, "\tKey ID: %s\n", raw_to_string(id.data, id.size)); @@ -3443,7 +3323,7 @@ static void print_bag_data(gnutls_pkcs12_bag_t bag) fprintf(stderr, "Error in base64 encoding: %s\n", gnutls_strerror(result)); app_exit(1); } - fprintf(outfile, "%s\n", out.data); + fprintf(outfile, "%s", out.data); gnutls_free(out.data); } @@ -3541,11 +3421,11 @@ void pkcs12_info(common_info_st * cinfo) salt_size = sizeof(salt); result = gnutls_pkcs12_mac_info(pkcs12, &mac_algo, salt, &salt_size, &mac_iter, &mac_oid); - if (result == GNUTLS_E_UNKNOWN_HASH_ALGORITHM) { + if (result == GNUTLS_E_UNKNOWN_HASH_ALGORITHM && cinfo->outtext) { fprintf(outfile, "MAC info:\n"); if (mac_oid != NULL) fprintf(outfile, "\tMAC: unknown (%s)\n", mac_oid); - } else if (result >= 0) { + } else if (result >= 0 && cinfo->outtext) { gnutls_datum_t bin; fprintf(outfile, "MAC info:\n"); @@ -3596,7 +3476,8 @@ void pkcs12_info(common_info_st * cinfo) app_exit(1); } - fprintf(outfile, "BAG #%d\n", indx); + if (cinfo->outtext) + fprintf(outfile, "%sBAG #%d\n", indx ? "\n" : "", indx); result = gnutls_pkcs12_bag_get_type(bag, 0); if (result < 0) { @@ -3607,9 +3488,11 @@ void pkcs12_info(common_info_st * cinfo) } if (result == GNUTLS_BAG_ENCRYPTED) { - fprintf(stderr, "\tType: %s\n", BAGTYPE(result)); - pkcs12_bag_enc_info(bag, stderr); - fprintf(stderr, "\n\tDecrypting...\n"); + if (cinfo->outtext) { + fprintf(outfile, "\tType: %s\n", BAGTYPE(result)); + pkcs12_bag_enc_info(bag, outfile); + fprintf(outfile, "\n\tDecrypting...\n"); + } result = gnutls_pkcs12_bag_decrypt(bag, pass); @@ -3630,7 +3513,7 @@ void pkcs12_info(common_info_st * cinfo) } } - print_bag_data(bag); + print_bag_data(bag, cinfo->outtext); gnutls_pkcs12_bag_deinit(bag); } @@ -3768,15 +3651,17 @@ void pkcs7_info(common_info_st *cinfo, unsigned display_data) app_exit(1); } } else { - ret = gnutls_pkcs7_print(pkcs7, GNUTLS_CRT_PRINT_FULL, &str); - if (ret < 0) { - fprintf(stderr, "printing error: %s\n", - gnutls_strerror(ret)); - app_exit(1); - } + if (cinfo->outtext) { + ret = gnutls_pkcs7_print(pkcs7, GNUTLS_CRT_PRINT_FULL, &str); + if (ret < 0) { + fprintf(stderr, "printing error: %s\n", + gnutls_strerror(ret)); + app_exit(1); + } - fprintf(outfile, "%s", str.data); - gnutls_free(str.data); + fprintf(outfile, "%s", str.data); + gnutls_free(str.data); + } size = lbuffer_size; ret = @@ -3800,8 +3685,7 @@ void smime_to_pkcs7(void) char *lineptr = NULL; ssize_t len; - /* Find body. FIXME: Handle non-b64 Content-Transfer-Encoding. - Reject non-S/MIME tagged Content-Type's? */ + /* Find body. We do not handle non-b64 Content-Transfer-Encoding. */ do { len = getline(&lineptr, &linesize, infile); if (len == -1) { @@ -3841,7 +3725,9 @@ void smime_to_pkcs7(void) free(lineptr); } -/* Tries to find a public key in the provided options or stdin */ +/* Tries to find a public key in the provided options or stdin + * When @crt is provided, it will be deinitialized. + */ static gnutls_pubkey_t find_pubkey(gnutls_x509_crt_t crt, common_info_st * cinfo) { @@ -3963,8 +3849,6 @@ gnutls_pubkey_t find_pubkey(gnutls_x509_crt_t crt, common_info_st * cinfo) void pubkey_info(gnutls_x509_crt_t crt, common_info_st * cinfo) { gnutls_pubkey_t pubkey; - int ret; - size_t size; pubkey = find_pubkey(crt, cinfo); if (pubkey == 0) { @@ -3972,27 +3856,7 @@ void pubkey_info(gnutls_x509_crt_t crt, common_info_st * cinfo) app_exit(1); } - if (outcert_format == GNUTLS_X509_FMT_DER) { - size = lbuffer_size; - ret = - gnutls_pubkey_export(pubkey, outcert_format, lbuffer, - &size); - if (ret < 0) { - fprintf(stderr, "export error: %s\n", - gnutls_strerror(ret)); - app_exit(1); - } - - fwrite(lbuffer, 1, size, outfile); - - gnutls_pubkey_deinit(pubkey); - - return; - } - - /* PEM */ - - _pubkey_info(outfile, full_format, pubkey); + print_pubkey_info(pubkey, outfile, full_format, outcert_format, cinfo->outtext); gnutls_pubkey_deinit(pubkey); } @@ -4000,8 +3864,8 @@ static void pubkey_keyid(common_info_st * cinfo) { gnutls_pubkey_t pubkey; - uint8_t fpr[64]; - char txt[256]; + uint8_t fpr[MAX_HASH_SIZE]; + char txt[MAX_HASH_SIZE*2+1]; int ret; size_t size, fpr_size; gnutls_datum_t tmp; @@ -4013,12 +3877,14 @@ void pubkey_keyid(common_info_st * cinfo) app_exit(1); } - if (default_dig == GNUTLS_DIG_SHA1 || default_dig == GNUTLS_DIG_UNKNOWN) + if (cinfo->hash == GNUTLS_DIG_SHA1 || cinfo->hash == GNUTLS_DIG_UNKNOWN) flags = GNUTLS_KEYID_USE_SHA1; /* be backwards compatible */ - else if (default_dig == GNUTLS_DIG_SHA256) + else if (cinfo->hash == GNUTLS_DIG_SHA512) + flags = GNUTLS_KEYID_USE_SHA512; + else if (cinfo->hash == GNUTLS_DIG_SHA256) flags = GNUTLS_KEYID_USE_SHA256; else { - fprintf(stderr, "Cannot calculate key ID with the provided hash\n"); + fprintf(stderr, "Cannot calculate key ID with the provided hash (use sha1, sha256 or sha512)\n"); app_exit(1); } @@ -4058,8 +3924,8 @@ void certificate_fpr(common_info_st * cinfo) int ret = 0; gnutls_datum_t pem, tmp; unsigned int crt_num; - uint8_t fpr[32]; - char txt[128]; + uint8_t fpr[MAX_HASH_SIZE]; + char txt[MAX_HASH_SIZE*2+1]; size_t fpr_size; crt = load_cert(0, cinfo); @@ -4094,10 +3960,10 @@ void certificate_fpr(common_info_st * cinfo) fpr_size = sizeof(fpr); - if (default_dig == GNUTLS_DIG_UNKNOWN) - default_dig = GNUTLS_DIG_SHA1; + if (cinfo->hash == GNUTLS_DIG_UNKNOWN) + cinfo->hash = GNUTLS_DIG_SHA1; - ret = gnutls_x509_crt_get_fingerprint(crt, default_dig, fpr, &fpr_size); + ret = gnutls_x509_crt_get_fingerprint(crt, cinfo->hash, fpr, &fpr_size); if (ret < 0) { fprintf(stderr, "get_key_id: %s\n", diff --git a/src/cli-args.c.bak b/src/cli-args.c.bak deleted file mode 100644 index 80b8f77f47..0000000000 --- a/src/cli-args.c.bak +++ /dev/null @@ -1,2768 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (cli-args.c) - * - * It has been AutoGen-ed - * From the definitions cli-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This source file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the gnutls-cli author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The gnutls-cli program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * gnutls-cli is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * gnutls-cli is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef __doxygen__ -#define OPTION_CODE_COMPILE 1 -#include "cli-args.h" -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern FILE * option_usage_fp; -#define zCopyright (gnutls_cli_opt_strs+0) -#define zLicenseDescrip (gnutls_cli_opt_strs+291) - - -#ifndef NULL -# define NULL 0 -#endif - -/** - * static const strings for gnutls-cli options - */ -static char const gnutls_cli_opt_strs[4810] = -/* 0 */ "gnutls-cli @VERSION@\n" - "Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n" - "This is free software. It is licensed for use, modification and\n" - "redistribution under the terms of the GNU General Public License,\n" - "version 3 or later \n\0" -/* 291 */ "gnutls-cli is free software: you can redistribute it and/or modify it under\n" - "the terms of the GNU General Public License as published by the Free\n" - "Software Foundation, either version 3 of the License, or (at your option)\n" - "any later version.\n\n" - "gnutls-cli is distributed in the hope that it will be useful, but WITHOUT\n" - "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n" - "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n" - "more details.\n\n" - "You should have received a copy of the GNU General Public License along\n" - "with this program. If not, see .\n\0" -/* 900 */ "Enable debugging\0" -/* 917 */ "DEBUG\0" -/* 923 */ "debug\0" -/* 929 */ "More verbose output\0" -/* 949 */ "VERBOSE\0" -/* 957 */ "verbose\0" -/* 965 */ "Enable trust on first use authentication\0" -/* 1006 */ "TOFU\0" -/* 1011 */ "no-tofu\0" -/* 1019 */ "no\0" -/* 1022 */ "Fail to connect if a known certificate has changed\0" -/* 1073 */ "STRICT_TOFU\0" -/* 1085 */ "no-strict-tofu\0" -/* 1100 */ "Enable DANE certificate verification (DNSSEC)\0" -/* 1146 */ "DANE\0" -/* 1151 */ "no-dane\0" -/* 1159 */ "Use the local DNS server for DNSSEC resolving\0" -/* 1205 */ "LOCAL_DNS\0" -/* 1215 */ "no-local-dns\0" -/* 1228 */ "Enable CA certificate verification\0" -/* 1263 */ "CA_VERIFICATION\0" -/* 1279 */ "no-ca-verification\0" -/* 1298 */ "Enable OCSP certificate verification\0" -/* 1335 */ "OCSP\0" -/* 1340 */ "no-ocsp\0" -/* 1348 */ "Establish a session and resume\0" -/* 1379 */ "RESUME\0" -/* 1386 */ "resume\0" -/* 1393 */ "Establish a session and rehandshake\0" -/* 1429 */ "REHANDSHAKE\0" -/* 1441 */ "rehandshake\0" -/* 1453 */ "Server's hostname for server name indication extension\0" -/* 1508 */ "SNI_HOSTNAME\0" -/* 1521 */ "sni-hostname\0" -/* 1534 */ "Connect, establish a plain session and start TLS\0" -/* 1583 */ "STARTTLS\0" -/* 1592 */ "starttls\0" -/* 1601 */ "an alias for the 'starttls-proto' option\0" -/* 1642 */ "app-proto\0" -/* 1652 */ "The application protocol to be used to obtain the server's certificate\n" - "(https, ftp, smtp, imap, ldap, xmpp, lmtp, pop3, nntp, sieve, postgres)\0" -/* 1795 */ "STARTTLS_PROTO\0" -/* 1810 */ "starttls-proto\0" -/* 1825 */ "Use DTLS (datagram TLS) over UDP\0" -/* 1858 */ "UDP\0" -/* 1862 */ "udp\0" -/* 1866 */ "Set MTU for datagram TLS\0" -/* 1891 */ "MTU\0" -/* 1895 */ "mtu\0" -/* 1899 */ "Send CR LF instead of LF\0" -/* 1924 */ "CRLF\0" -/* 1929 */ "crlf\0" -/* 1934 */ "Enable TCP Fast Open\0" -/* 1955 */ "FASTOPEN\0" -/* 1964 */ "fastopen\0" -/* 1973 */ "Use DER format for certificates to read from\0" -/* 2018 */ "X509FMTDER\0" -/* 2029 */ "x509fmtder\0" -/* 2040 */ "Send the openpgp fingerprint, instead of the key\0" -/* 2089 */ "FINGERPRINT\0" -/* 2101 */ "fingerprint\0" -/* 2113 */ "Print peer's certificate in PEM format\0" -/* 2152 */ "PRINT_CERT\0" -/* 2163 */ "print-cert\0" -/* 2174 */ "Save the peer's certificate chain in the specified file in PEM format\0" -/* 2244 */ "SAVE_CERT\0" -/* 2254 */ "save-cert\0" -/* 2264 */ "Save the peer's OCSP status response in the provided file\0" -/* 2322 */ "SAVE_OCSP\0" -/* 2332 */ "save-ocsp\0" -/* 2342 */ "The minimum number of bits allowed for DH\0" -/* 2384 */ "DH_BITS\0" -/* 2392 */ "dh-bits\0" -/* 2400 */ "Priorities string\0" -/* 2418 */ "PRIORITY\0" -/* 2427 */ "priority\0" -/* 2436 */ "Certificate file or PKCS #11 URL to use\0" -/* 2476 */ "X509CAFILE\0" -/* 2487 */ "x509cafile\0" -/* 2498 */ "CRL file to use\0" -/* 2514 */ "X509CRLFILE\0" -/* 2526 */ "x509crlfile\0" -/* 2538 */ "PGP Key file to use\0" -/* 2558 */ "PGPKEYFILE\0" -/* 2569 */ "pgpkeyfile\0" -/* 2580 */ "PGP Key ring file to use\0" -/* 2605 */ "PGPKEYRING\0" -/* 2616 */ "pgpkeyring\0" -/* 2627 */ "PGP Public Key (certificate) file to use\0" -/* 2668 */ "PGPCERTFILE\0" -/* 2680 */ "pgpcertfile\0" -/* 2692 */ "X.509 key file or PKCS #11 URL to use\0" -/* 2730 */ "X509KEYFILE\0" -/* 2742 */ "x509keyfile\0" -/* 2754 */ "X.509 Certificate file or PKCS #11 URL to use\0" -/* 2800 */ "X509CERTFILE\0" -/* 2813 */ "x509certfile\0" -/* 2826 */ "PGP subkey to use (hex or auto)\0" -/* 2858 */ "PGPSUBKEY\0" -/* 2868 */ "pgpsubkey\0" -/* 2878 */ "SRP username to use\0" -/* 2898 */ "SRPUSERNAME\0" -/* 2910 */ "srpusername\0" -/* 2922 */ "SRP password to use\0" -/* 2942 */ "SRPPASSWD\0" -/* 2952 */ "srppasswd\0" -/* 2962 */ "PSK username to use\0" -/* 2982 */ "PSKUSERNAME\0" -/* 2994 */ "pskusername\0" -/* 3006 */ "PSK key (in hex) to use\0" -/* 3030 */ "PSKKEY\0" -/* 3037 */ "pskkey\0" -/* 3044 */ "The port or service to connect to\0" -/* 3078 */ "PORT\0" -/* 3083 */ "port\0" -/* 3088 */ "Don't abort program if server certificate can't be validated\0" -/* 3149 */ "INSECURE\0" -/* 3158 */ "insecure\0" -/* 3167 */ "Use length-hiding padding to prevent traffic analysis\0" -/* 3221 */ "RANGES\0" -/* 3228 */ "ranges\0" -/* 3235 */ "Benchmark individual ciphers\0" -/* 3264 */ "BENCHMARK_CIPHERS\0" -/* 3282 */ "benchmark-ciphers\0" -/* 3300 */ "Benchmark TLS key exchange methods\0" -/* 3335 */ "BENCHMARK_TLS_KX\0" -/* 3352 */ "benchmark-tls-kx\0" -/* 3369 */ "Benchmark TLS ciphers\0" -/* 3391 */ "BENCHMARK_TLS_CIPHERS\0" -/* 3413 */ "benchmark-tls-ciphers\0" -/* 3435 */ "Print a list of the supported algorithms and modes\0" -/* 3486 */ "LIST\0" -/* 3491 */ "list\0" -/* 3496 */ "Print a list of the supported priority strings\0" -/* 3543 */ "PRIORITY_LIST\0" -/* 3557 */ "priority-list\0" -/* 3571 */ "Don't allow session tickets\0" -/* 3599 */ "NOTICKET\0" -/* 3608 */ "noticket\0" -/* 3617 */ "Offer SRTP profiles\0" -/* 3637 */ "SRTP_PROFILES\0" -/* 3651 */ "srtp-profiles\0" -/* 3665 */ "Application layer protocol\0" -/* 3692 */ "ALPN\0" -/* 3697 */ "alpn\0" -/* 3702 */ "Activate heartbeat support\0" -/* 3729 */ "HEARTBEAT\0" -/* 3739 */ "heartbeat\0" -/* 3749 */ "The maximum record size to advertize\0" -/* 3786 */ "RECORDSIZE\0" -/* 3797 */ "recordsize\0" -/* 3808 */ "Do not send a Server Name Indication (SNI)\0" -/* 3851 */ "DISABLE_SNI\0" -/* 3863 */ "disable-sni\0" -/* 3875 */ "Disable all the TLS extensions\0" -/* 3906 */ "DISABLE_EXTENSIONS\0" -/* 3925 */ "disable-extensions\0" -/* 3944 */ "Inline commands of the form ^^\0" -/* 3980 */ "INLINE_COMMANDS\0" -/* 3996 */ "inline-commands\0" -/* 4012 */ "Change the default delimiter for inline commands.\0" -/* 4062 */ "INLINE_COMMANDS_PREFIX\0" -/* 4085 */ "inline-commands-prefix\0" -/* 4108 */ "Specify the PKCS #11 provider library\0" -/* 4146 */ "PROVIDER\0" -/* 4155 */ "provider\0" -/* 4164 */ "Reports the status of the FIPS140-2 mode in gnutls library\0" -/* 4223 */ "FIPS140_MODE\0" -/* 4236 */ "fips140-mode\0" -/* 4249 */ "display extended usage information and exit\0" -/* 4293 */ "help\0" -/* 4298 */ "extended usage information passed thru pager\0" -/* 4343 */ "more-help\0" -/* 4353 */ "output version information and exit\0" -/* 4389 */ "version\0" -/* 4397 */ "GNUTLS_CLI\0" -/* 4408 */ "gnutls-cli - GnuTLS client\n" - "Usage: %s [ - [] | --[{=| }] ]... [hostname]\n\0" -/* 4504 */ "@PACKAGE_BUGREPORT@\0" -/* 4524 */ "\n\0" -/* 4526 */ "Simple client program to set up a TLS connection to some other computer. It\n" - "sets up a TLS connection and forwards data from the standard input to the\n" - "secured socket and vice versa.\n\0" -/* 4709 */ "gnutls-cli @VERSION@\0" -/* 4730 */ "Usage: gnutls-cli [options] hostname\n" - "gnutls-cli --help for usage instructions.\n"; - -/** - * debug option description: - */ -/** Descriptive text for the debug option */ -#define DEBUG_DESC (gnutls_cli_opt_strs+900) -/** Upper-cased name for the debug option */ -#define DEBUG_NAME (gnutls_cli_opt_strs+917) -/** Name string for the debug option */ -#define DEBUG_name (gnutls_cli_opt_strs+923) -/** Compiled in flag settings for the debug option */ -#define DEBUG_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * verbose option description: - */ -/** Descriptive text for the verbose option */ -#define VERBOSE_DESC (gnutls_cli_opt_strs+929) -/** Upper-cased name for the verbose option */ -#define VERBOSE_NAME (gnutls_cli_opt_strs+949) -/** Name string for the verbose option */ -#define VERBOSE_name (gnutls_cli_opt_strs+957) -/** Compiled in flag settings for the verbose option */ -#define VERBOSE_FLAGS (OPTST_DISABLED) - -/** - * tofu option description: - */ -/** Descriptive text for the tofu option */ -#define TOFU_DESC (gnutls_cli_opt_strs+965) -/** Upper-cased name for the tofu option */ -#define TOFU_NAME (gnutls_cli_opt_strs+1006) -/** disablement name for the tofu option */ -#define NOT_TOFU_name (gnutls_cli_opt_strs+1011) -/** disablement prefix for the tofu option */ -#define NOT_TOFU_PFX (gnutls_cli_opt_strs+1019) -/** Name string for the tofu option */ -#define TOFU_name (NOT_TOFU_name + 3) -/** Compiled in flag settings for the tofu option */ -#define TOFU_FLAGS (OPTST_DISABLED) - -/** - * strict-tofu option description: - */ -/** Descriptive text for the strict-tofu option */ -#define STRICT_TOFU_DESC (gnutls_cli_opt_strs+1022) -/** Upper-cased name for the strict-tofu option */ -#define STRICT_TOFU_NAME (gnutls_cli_opt_strs+1073) -/** disablement name for the strict-tofu option */ -#define NOT_STRICT_TOFU_name (gnutls_cli_opt_strs+1085) -/** disablement prefix for the strict-tofu option */ -#define NOT_STRICT_TOFU_PFX (gnutls_cli_opt_strs+1019) -/** Name string for the strict-tofu option */ -#define STRICT_TOFU_name (NOT_STRICT_TOFU_name + 3) -/** Compiled in flag settings for the strict-tofu option */ -#define STRICT_TOFU_FLAGS (OPTST_DISABLED) - -/** - * dane option description: - */ -/** Descriptive text for the dane option */ -#define DANE_DESC (gnutls_cli_opt_strs+1100) -/** Upper-cased name for the dane option */ -#define DANE_NAME (gnutls_cli_opt_strs+1146) -/** disablement name for the dane option */ -#define NOT_DANE_name (gnutls_cli_opt_strs+1151) -/** disablement prefix for the dane option */ -#define NOT_DANE_PFX (gnutls_cli_opt_strs+1019) -/** Name string for the dane option */ -#define DANE_name (NOT_DANE_name + 3) -/** Compiled in flag settings for the dane option */ -#define DANE_FLAGS (OPTST_DISABLED) - -/** - * local-dns option description: - */ -/** Descriptive text for the local-dns option */ -#define LOCAL_DNS_DESC (gnutls_cli_opt_strs+1159) -/** Upper-cased name for the local-dns option */ -#define LOCAL_DNS_NAME (gnutls_cli_opt_strs+1205) -/** disablement name for the local-dns option */ -#define NOT_LOCAL_DNS_name (gnutls_cli_opt_strs+1215) -/** disablement prefix for the local-dns option */ -#define NOT_LOCAL_DNS_PFX (gnutls_cli_opt_strs+1019) -/** Name string for the local-dns option */ -#define LOCAL_DNS_name (NOT_LOCAL_DNS_name + 3) -/** Compiled in flag settings for the local-dns option */ -#define LOCAL_DNS_FLAGS (OPTST_DISABLED) - -/** - * ca-verification option description: - */ -/** Descriptive text for the ca-verification option */ -#define CA_VERIFICATION_DESC (gnutls_cli_opt_strs+1228) -/** Upper-cased name for the ca-verification option */ -#define CA_VERIFICATION_NAME (gnutls_cli_opt_strs+1263) -/** disablement name for the ca-verification option */ -#define NOT_CA_VERIFICATION_name (gnutls_cli_opt_strs+1279) -/** disablement prefix for the ca-verification option */ -#define NOT_CA_VERIFICATION_PFX (gnutls_cli_opt_strs+1019) -/** Name string for the ca-verification option */ -#define CA_VERIFICATION_name (NOT_CA_VERIFICATION_name + 3) -/** Compiled in flag settings for the ca-verification option */ -#define CA_VERIFICATION_FLAGS (OPTST_INITENABLED) - -/** - * ocsp option description: - */ -/** Descriptive text for the ocsp option */ -#define OCSP_DESC (gnutls_cli_opt_strs+1298) -/** Upper-cased name for the ocsp option */ -#define OCSP_NAME (gnutls_cli_opt_strs+1335) -/** disablement name for the ocsp option */ -#define NOT_OCSP_name (gnutls_cli_opt_strs+1340) -/** disablement prefix for the ocsp option */ -#define NOT_OCSP_PFX (gnutls_cli_opt_strs+1019) -/** Name string for the ocsp option */ -#define OCSP_name (NOT_OCSP_name + 3) -/** Compiled in flag settings for the ocsp option */ -#define OCSP_FLAGS (OPTST_DISABLED) - -/** - * resume option description: - */ -/** Descriptive text for the resume option */ -#define RESUME_DESC (gnutls_cli_opt_strs+1348) -/** Upper-cased name for the resume option */ -#define RESUME_NAME (gnutls_cli_opt_strs+1379) -/** Name string for the resume option */ -#define RESUME_name (gnutls_cli_opt_strs+1386) -/** Compiled in flag settings for the resume option */ -#define RESUME_FLAGS (OPTST_DISABLED) - -/** - * rehandshake option description: - */ -/** Descriptive text for the rehandshake option */ -#define REHANDSHAKE_DESC (gnutls_cli_opt_strs+1393) -/** Upper-cased name for the rehandshake option */ -#define REHANDSHAKE_NAME (gnutls_cli_opt_strs+1429) -/** Name string for the rehandshake option */ -#define REHANDSHAKE_name (gnutls_cli_opt_strs+1441) -/** Compiled in flag settings for the rehandshake option */ -#define REHANDSHAKE_FLAGS (OPTST_DISABLED) - -/** - * sni-hostname option description: - */ -/** Descriptive text for the sni-hostname option */ -#define SNI_HOSTNAME_DESC (gnutls_cli_opt_strs+1453) -/** Upper-cased name for the sni-hostname option */ -#define SNI_HOSTNAME_NAME (gnutls_cli_opt_strs+1508) -/** Name string for the sni-hostname option */ -#define SNI_HOSTNAME_name (gnutls_cli_opt_strs+1521) -/** Compiled in flag settings for the sni-hostname option */ -#define SNI_HOSTNAME_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * starttls option description: - */ -/** Descriptive text for the starttls option */ -#define STARTTLS_DESC (gnutls_cli_opt_strs+1534) -/** Upper-cased name for the starttls option */ -#define STARTTLS_NAME (gnutls_cli_opt_strs+1583) -/** Name string for the starttls option */ -#define STARTTLS_name (gnutls_cli_opt_strs+1592) -/** Compiled in flag settings for the starttls option */ -#define STARTTLS_FLAGS (OPTST_DISABLED) - -/** - * app-proto option description: - */ -/** Descriptive text for the app-proto option */ -#define APP_PROTO_DESC (gnutls_cli_opt_strs+1601) -#define APP_PROTO_NAME NULL -/** Unmodified name string for the app-proto option */ -#define APP_PROTO_name (gnutls_cli_opt_strs+1642) -/** Compiled in flag settings for the app-proto option */ -#define APP_PROTO_FLAGS (STARTTLS_PROTO_FLAGS | OPTST_ALIAS) - -/** - * starttls-proto option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the starttls-proto option */ -#define STARTTLS_PROTO_DESC (gnutls_cli_opt_strs+1652) -/** Upper-cased name for the starttls-proto option */ -#define STARTTLS_PROTO_NAME (gnutls_cli_opt_strs+1795) -/** Name string for the starttls-proto option */ -#define STARTTLS_PROTO_name (gnutls_cli_opt_strs+1810) -/** Other options that appear in conjunction with the starttls-proto option */ -static int const aStarttls_ProtoCantList[] = { - INDEX_OPT_STARTTLS, NO_EQUIVALENT }; -/** Compiled in flag settings for the starttls-proto option */ -#define STARTTLS_PROTO_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * udp option description: - */ -/** Descriptive text for the udp option */ -#define UDP_DESC (gnutls_cli_opt_strs+1825) -/** Upper-cased name for the udp option */ -#define UDP_NAME (gnutls_cli_opt_strs+1858) -/** Name string for the udp option */ -#define UDP_name (gnutls_cli_opt_strs+1862) -/** Compiled in flag settings for the udp option */ -#define UDP_FLAGS (OPTST_DISABLED) - -/** - * mtu option description: - */ -/** Descriptive text for the mtu option */ -#define MTU_DESC (gnutls_cli_opt_strs+1866) -/** Upper-cased name for the mtu option */ -#define MTU_NAME (gnutls_cli_opt_strs+1891) -/** Name string for the mtu option */ -#define MTU_name (gnutls_cli_opt_strs+1895) -/** Compiled in flag settings for the mtu option */ -#define MTU_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * crlf option description: - */ -/** Descriptive text for the crlf option */ -#define CRLF_DESC (gnutls_cli_opt_strs+1899) -/** Upper-cased name for the crlf option */ -#define CRLF_NAME (gnutls_cli_opt_strs+1924) -/** Name string for the crlf option */ -#define CRLF_name (gnutls_cli_opt_strs+1929) -/** Compiled in flag settings for the crlf option */ -#define CRLF_FLAGS (OPTST_DISABLED) - -/** - * fastopen option description: - */ -/** Descriptive text for the fastopen option */ -#define FASTOPEN_DESC (gnutls_cli_opt_strs+1934) -/** Upper-cased name for the fastopen option */ -#define FASTOPEN_NAME (gnutls_cli_opt_strs+1955) -/** Name string for the fastopen option */ -#define FASTOPEN_name (gnutls_cli_opt_strs+1964) -/** Compiled in flag settings for the fastopen option */ -#define FASTOPEN_FLAGS (OPTST_DISABLED) - -/** - * x509fmtder option description: - */ -/** Descriptive text for the x509fmtder option */ -#define X509FMTDER_DESC (gnutls_cli_opt_strs+1973) -/** Upper-cased name for the x509fmtder option */ -#define X509FMTDER_NAME (gnutls_cli_opt_strs+2018) -/** Name string for the x509fmtder option */ -#define X509FMTDER_name (gnutls_cli_opt_strs+2029) -/** Compiled in flag settings for the x509fmtder option */ -#define X509FMTDER_FLAGS (OPTST_DISABLED) - -/** - * fingerprint option description: - */ -/** Descriptive text for the fingerprint option */ -#define FINGERPRINT_DESC (gnutls_cli_opt_strs+2040) -/** Upper-cased name for the fingerprint option */ -#define FINGERPRINT_NAME (gnutls_cli_opt_strs+2089) -/** Name string for the fingerprint option */ -#define FINGERPRINT_name (gnutls_cli_opt_strs+2101) -/** Compiled in flag settings for the fingerprint option */ -#define FINGERPRINT_FLAGS (OPTST_DISABLED) - -/** - * print-cert option description: - */ -/** Descriptive text for the print-cert option */ -#define PRINT_CERT_DESC (gnutls_cli_opt_strs+2113) -/** Upper-cased name for the print-cert option */ -#define PRINT_CERT_NAME (gnutls_cli_opt_strs+2152) -/** Name string for the print-cert option */ -#define PRINT_CERT_name (gnutls_cli_opt_strs+2163) -/** Compiled in flag settings for the print-cert option */ -#define PRINT_CERT_FLAGS (OPTST_DISABLED) - -/** - * save-cert option description: - */ -/** Descriptive text for the save-cert option */ -#define SAVE_CERT_DESC (gnutls_cli_opt_strs+2174) -/** Upper-cased name for the save-cert option */ -#define SAVE_CERT_NAME (gnutls_cli_opt_strs+2244) -/** Name string for the save-cert option */ -#define SAVE_CERT_name (gnutls_cli_opt_strs+2254) -/** Compiled in flag settings for the save-cert option */ -#define SAVE_CERT_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * save-ocsp option description: - */ -/** Descriptive text for the save-ocsp option */ -#define SAVE_OCSP_DESC (gnutls_cli_opt_strs+2264) -/** Upper-cased name for the save-ocsp option */ -#define SAVE_OCSP_NAME (gnutls_cli_opt_strs+2322) -/** Name string for the save-ocsp option */ -#define SAVE_OCSP_name (gnutls_cli_opt_strs+2332) -/** Compiled in flag settings for the save-ocsp option */ -#define SAVE_OCSP_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * dh-bits option description: - */ -/** Descriptive text for the dh-bits option */ -#define DH_BITS_DESC (gnutls_cli_opt_strs+2342) -/** Upper-cased name for the dh-bits option */ -#define DH_BITS_NAME (gnutls_cli_opt_strs+2384) -/** Name string for the dh-bits option */ -#define DH_BITS_name (gnutls_cli_opt_strs+2392) -/** Compiled in flag settings for the dh-bits option */ -#define DH_BITS_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * priority option description: - */ -/** Descriptive text for the priority option */ -#define PRIORITY_DESC (gnutls_cli_opt_strs+2400) -/** Upper-cased name for the priority option */ -#define PRIORITY_NAME (gnutls_cli_opt_strs+2418) -/** Name string for the priority option */ -#define PRIORITY_name (gnutls_cli_opt_strs+2427) -/** Compiled in flag settings for the priority option */ -#define PRIORITY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * x509cafile option description: - */ -/** Descriptive text for the x509cafile option */ -#define X509CAFILE_DESC (gnutls_cli_opt_strs+2436) -/** Upper-cased name for the x509cafile option */ -#define X509CAFILE_NAME (gnutls_cli_opt_strs+2476) -/** Name string for the x509cafile option */ -#define X509CAFILE_name (gnutls_cli_opt_strs+2487) -/** Compiled in flag settings for the x509cafile option */ -#define X509CAFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * x509crlfile option description: - */ -/** Descriptive text for the x509crlfile option */ -#define X509CRLFILE_DESC (gnutls_cli_opt_strs+2498) -/** Upper-cased name for the x509crlfile option */ -#define X509CRLFILE_NAME (gnutls_cli_opt_strs+2514) -/** Name string for the x509crlfile option */ -#define X509CRLFILE_name (gnutls_cli_opt_strs+2526) -/** Compiled in flag settings for the x509crlfile option */ -#define X509CRLFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * pgpkeyfile option description: - */ -/** Descriptive text for the pgpkeyfile option */ -#define PGPKEYFILE_DESC (gnutls_cli_opt_strs+2538) -/** Upper-cased name for the pgpkeyfile option */ -#define PGPKEYFILE_NAME (gnutls_cli_opt_strs+2558) -/** Name string for the pgpkeyfile option */ -#define PGPKEYFILE_name (gnutls_cli_opt_strs+2569) -/** Compiled in flag settings for the pgpkeyfile option */ -#define PGPKEYFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * pgpkeyring option description: - */ -/** Descriptive text for the pgpkeyring option */ -#define PGPKEYRING_DESC (gnutls_cli_opt_strs+2580) -/** Upper-cased name for the pgpkeyring option */ -#define PGPKEYRING_NAME (gnutls_cli_opt_strs+2605) -/** Name string for the pgpkeyring option */ -#define PGPKEYRING_name (gnutls_cli_opt_strs+2616) -/** Compiled in flag settings for the pgpkeyring option */ -#define PGPKEYRING_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * pgpcertfile option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the pgpcertfile option */ -#define PGPCERTFILE_DESC (gnutls_cli_opt_strs+2627) -/** Upper-cased name for the pgpcertfile option */ -#define PGPCERTFILE_NAME (gnutls_cli_opt_strs+2668) -/** Name string for the pgpcertfile option */ -#define PGPCERTFILE_name (gnutls_cli_opt_strs+2680) -/** Other options that are required by the pgpcertfile option */ -static int const aPgpcertfileMustList[] = { - INDEX_OPT_PGPKEYFILE, NO_EQUIVALENT }; -/** Compiled in flag settings for the pgpcertfile option */ -#define PGPCERTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * x509keyfile option description: - */ -/** Descriptive text for the x509keyfile option */ -#define X509KEYFILE_DESC (gnutls_cli_opt_strs+2692) -/** Upper-cased name for the x509keyfile option */ -#define X509KEYFILE_NAME (gnutls_cli_opt_strs+2730) -/** Name string for the x509keyfile option */ -#define X509KEYFILE_name (gnutls_cli_opt_strs+2742) -/** Compiled in flag settings for the x509keyfile option */ -#define X509KEYFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * x509certfile option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the x509certfile option */ -#define X509CERTFILE_DESC (gnutls_cli_opt_strs+2754) -/** Upper-cased name for the x509certfile option */ -#define X509CERTFILE_NAME (gnutls_cli_opt_strs+2800) -/** Name string for the x509certfile option */ -#define X509CERTFILE_name (gnutls_cli_opt_strs+2813) -/** Other options that are required by the x509certfile option */ -static int const aX509certfileMustList[] = { - INDEX_OPT_X509KEYFILE, NO_EQUIVALENT }; -/** Compiled in flag settings for the x509certfile option */ -#define X509CERTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * pgpsubkey option description: - */ -/** Descriptive text for the pgpsubkey option */ -#define PGPSUBKEY_DESC (gnutls_cli_opt_strs+2826) -/** Upper-cased name for the pgpsubkey option */ -#define PGPSUBKEY_NAME (gnutls_cli_opt_strs+2858) -/** Name string for the pgpsubkey option */ -#define PGPSUBKEY_name (gnutls_cli_opt_strs+2868) -/** Compiled in flag settings for the pgpsubkey option */ -#define PGPSUBKEY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * srpusername option description: - */ -/** Descriptive text for the srpusername option */ -#define SRPUSERNAME_DESC (gnutls_cli_opt_strs+2878) -/** Upper-cased name for the srpusername option */ -#define SRPUSERNAME_NAME (gnutls_cli_opt_strs+2898) -/** Name string for the srpusername option */ -#define SRPUSERNAME_name (gnutls_cli_opt_strs+2910) -/** Compiled in flag settings for the srpusername option */ -#define SRPUSERNAME_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * srppasswd option description: - */ -/** Descriptive text for the srppasswd option */ -#define SRPPASSWD_DESC (gnutls_cli_opt_strs+2922) -/** Upper-cased name for the srppasswd option */ -#define SRPPASSWD_NAME (gnutls_cli_opt_strs+2942) -/** Name string for the srppasswd option */ -#define SRPPASSWD_name (gnutls_cli_opt_strs+2952) -/** Compiled in flag settings for the srppasswd option */ -#define SRPPASSWD_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * pskusername option description: - */ -/** Descriptive text for the pskusername option */ -#define PSKUSERNAME_DESC (gnutls_cli_opt_strs+2962) -/** Upper-cased name for the pskusername option */ -#define PSKUSERNAME_NAME (gnutls_cli_opt_strs+2982) -/** Name string for the pskusername option */ -#define PSKUSERNAME_name (gnutls_cli_opt_strs+2994) -/** Compiled in flag settings for the pskusername option */ -#define PSKUSERNAME_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * pskkey option description: - */ -/** Descriptive text for the pskkey option */ -#define PSKKEY_DESC (gnutls_cli_opt_strs+3006) -/** Upper-cased name for the pskkey option */ -#define PSKKEY_NAME (gnutls_cli_opt_strs+3030) -/** Name string for the pskkey option */ -#define PSKKEY_name (gnutls_cli_opt_strs+3037) -/** Compiled in flag settings for the pskkey option */ -#define PSKKEY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * port option description: - */ -/** Descriptive text for the port option */ -#define PORT_DESC (gnutls_cli_opt_strs+3044) -/** Upper-cased name for the port option */ -#define PORT_NAME (gnutls_cli_opt_strs+3078) -/** Name string for the port option */ -#define PORT_name (gnutls_cli_opt_strs+3083) -/** Compiled in flag settings for the port option */ -#define PORT_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * insecure option description: - */ -/** Descriptive text for the insecure option */ -#define INSECURE_DESC (gnutls_cli_opt_strs+3088) -/** Upper-cased name for the insecure option */ -#define INSECURE_NAME (gnutls_cli_opt_strs+3149) -/** Name string for the insecure option */ -#define INSECURE_name (gnutls_cli_opt_strs+3158) -/** Compiled in flag settings for the insecure option */ -#define INSECURE_FLAGS (OPTST_DISABLED) - -/** - * ranges option description: - */ -/** Descriptive text for the ranges option */ -#define RANGES_DESC (gnutls_cli_opt_strs+3167) -/** Upper-cased name for the ranges option */ -#define RANGES_NAME (gnutls_cli_opt_strs+3221) -/** Name string for the ranges option */ -#define RANGES_name (gnutls_cli_opt_strs+3228) -/** Compiled in flag settings for the ranges option */ -#define RANGES_FLAGS (OPTST_DISABLED) - -/** - * benchmark-ciphers option description: - */ -/** Descriptive text for the benchmark-ciphers option */ -#define BENCHMARK_CIPHERS_DESC (gnutls_cli_opt_strs+3235) -/** Upper-cased name for the benchmark-ciphers option */ -#define BENCHMARK_CIPHERS_NAME (gnutls_cli_opt_strs+3264) -/** Name string for the benchmark-ciphers option */ -#define BENCHMARK_CIPHERS_name (gnutls_cli_opt_strs+3282) -/** Compiled in flag settings for the benchmark-ciphers option */ -#define BENCHMARK_CIPHERS_FLAGS (OPTST_DISABLED) - -/** - * benchmark-tls-kx option description: - */ -/** Descriptive text for the benchmark-tls-kx option */ -#define BENCHMARK_TLS_KX_DESC (gnutls_cli_opt_strs+3300) -/** Upper-cased name for the benchmark-tls-kx option */ -#define BENCHMARK_TLS_KX_NAME (gnutls_cli_opt_strs+3335) -/** Name string for the benchmark-tls-kx option */ -#define BENCHMARK_TLS_KX_name (gnutls_cli_opt_strs+3352) -/** Compiled in flag settings for the benchmark-tls-kx option */ -#define BENCHMARK_TLS_KX_FLAGS (OPTST_DISABLED) - -/** - * benchmark-tls-ciphers option description: - */ -/** Descriptive text for the benchmark-tls-ciphers option */ -#define BENCHMARK_TLS_CIPHERS_DESC (gnutls_cli_opt_strs+3369) -/** Upper-cased name for the benchmark-tls-ciphers option */ -#define BENCHMARK_TLS_CIPHERS_NAME (gnutls_cli_opt_strs+3391) -/** Name string for the benchmark-tls-ciphers option */ -#define BENCHMARK_TLS_CIPHERS_name (gnutls_cli_opt_strs+3413) -/** Compiled in flag settings for the benchmark-tls-ciphers option */ -#define BENCHMARK_TLS_CIPHERS_FLAGS (OPTST_DISABLED) - -/** - * list option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the list option */ -#define LIST_DESC (gnutls_cli_opt_strs+3435) -/** Upper-cased name for the list option */ -#define LIST_NAME (gnutls_cli_opt_strs+3486) -/** Name string for the list option */ -#define LIST_name (gnutls_cli_opt_strs+3491) -/** Other options that appear in conjunction with the list option */ -static int const aListCantList[] = { - INDEX_OPT_PORT, NO_EQUIVALENT }; -/** Compiled in flag settings for the list option */ -#define LIST_FLAGS (OPTST_DISABLED) - -/** - * priority-list option description: - */ -/** Descriptive text for the priority-list option */ -#define PRIORITY_LIST_DESC (gnutls_cli_opt_strs+3496) -/** Upper-cased name for the priority-list option */ -#define PRIORITY_LIST_NAME (gnutls_cli_opt_strs+3543) -/** Name string for the priority-list option */ -#define PRIORITY_LIST_name (gnutls_cli_opt_strs+3557) -/** Compiled in flag settings for the priority-list option */ -#define PRIORITY_LIST_FLAGS (OPTST_DISABLED) - -/** - * noticket option description: - */ -/** Descriptive text for the noticket option */ -#define NOTICKET_DESC (gnutls_cli_opt_strs+3571) -/** Upper-cased name for the noticket option */ -#define NOTICKET_NAME (gnutls_cli_opt_strs+3599) -/** Name string for the noticket option */ -#define NOTICKET_name (gnutls_cli_opt_strs+3608) -/** Compiled in flag settings for the noticket option */ -#define NOTICKET_FLAGS (OPTST_DISABLED) - -/** - * srtp_profiles option description: - */ -/** Descriptive text for the srtp_profiles option */ -#define SRTP_PROFILES_DESC (gnutls_cli_opt_strs+3617) -/** Upper-cased name for the srtp_profiles option */ -#define SRTP_PROFILES_NAME (gnutls_cli_opt_strs+3637) -/** Name string for the srtp_profiles option */ -#define SRTP_PROFILES_name (gnutls_cli_opt_strs+3651) -/** Compiled in flag settings for the srtp_profiles option */ -#define SRTP_PROFILES_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * alpn option description: - */ -/** Descriptive text for the alpn option */ -#define ALPN_DESC (gnutls_cli_opt_strs+3665) -/** Upper-cased name for the alpn option */ -#define ALPN_NAME (gnutls_cli_opt_strs+3692) -/** Name string for the alpn option */ -#define ALPN_name (gnutls_cli_opt_strs+3697) -/** Compiled in flag settings for the alpn option */ -#define ALPN_FLAGS (OPTST_DISABLED | OPTST_STACKED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * heartbeat option description: - */ -/** Descriptive text for the heartbeat option */ -#define HEARTBEAT_DESC (gnutls_cli_opt_strs+3702) -/** Upper-cased name for the heartbeat option */ -#define HEARTBEAT_NAME (gnutls_cli_opt_strs+3729) -/** Name string for the heartbeat option */ -#define HEARTBEAT_name (gnutls_cli_opt_strs+3739) -/** Compiled in flag settings for the heartbeat option */ -#define HEARTBEAT_FLAGS (OPTST_DISABLED) - -/** - * recordsize option description: - */ -/** Descriptive text for the recordsize option */ -#define RECORDSIZE_DESC (gnutls_cli_opt_strs+3749) -/** Upper-cased name for the recordsize option */ -#define RECORDSIZE_NAME (gnutls_cli_opt_strs+3786) -/** Name string for the recordsize option */ -#define RECORDSIZE_name (gnutls_cli_opt_strs+3797) -/** Compiled in flag settings for the recordsize option */ -#define RECORDSIZE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * disable-sni option description: - */ -/** Descriptive text for the disable-sni option */ -#define DISABLE_SNI_DESC (gnutls_cli_opt_strs+3808) -/** Upper-cased name for the disable-sni option */ -#define DISABLE_SNI_NAME (gnutls_cli_opt_strs+3851) -/** Name string for the disable-sni option */ -#define DISABLE_SNI_name (gnutls_cli_opt_strs+3863) -/** Compiled in flag settings for the disable-sni option */ -#define DISABLE_SNI_FLAGS (OPTST_DISABLED) - -/** - * disable-extensions option description: - */ -/** Descriptive text for the disable-extensions option */ -#define DISABLE_EXTENSIONS_DESC (gnutls_cli_opt_strs+3875) -/** Upper-cased name for the disable-extensions option */ -#define DISABLE_EXTENSIONS_NAME (gnutls_cli_opt_strs+3906) -/** Name string for the disable-extensions option */ -#define DISABLE_EXTENSIONS_name (gnutls_cli_opt_strs+3925) -/** Compiled in flag settings for the disable-extensions option */ -#define DISABLE_EXTENSIONS_FLAGS (OPTST_DISABLED) - -/** - * inline-commands option description: - */ -/** Descriptive text for the inline-commands option */ -#define INLINE_COMMANDS_DESC (gnutls_cli_opt_strs+3944) -/** Upper-cased name for the inline-commands option */ -#define INLINE_COMMANDS_NAME (gnutls_cli_opt_strs+3980) -/** Name string for the inline-commands option */ -#define INLINE_COMMANDS_name (gnutls_cli_opt_strs+3996) -/** Compiled in flag settings for the inline-commands option */ -#define INLINE_COMMANDS_FLAGS (OPTST_DISABLED) - -/** - * inline-commands-prefix option description: - */ -/** Descriptive text for the inline-commands-prefix option */ -#define INLINE_COMMANDS_PREFIX_DESC (gnutls_cli_opt_strs+4012) -/** Upper-cased name for the inline-commands-prefix option */ -#define INLINE_COMMANDS_PREFIX_NAME (gnutls_cli_opt_strs+4062) -/** Name string for the inline-commands-prefix option */ -#define INLINE_COMMANDS_PREFIX_name (gnutls_cli_opt_strs+4085) -/** Compiled in flag settings for the inline-commands-prefix option */ -#define INLINE_COMMANDS_PREFIX_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * provider option description: - */ -/** Descriptive text for the provider option */ -#define PROVIDER_DESC (gnutls_cli_opt_strs+4108) -/** Upper-cased name for the provider option */ -#define PROVIDER_NAME (gnutls_cli_opt_strs+4146) -/** Name string for the provider option */ -#define PROVIDER_name (gnutls_cli_opt_strs+4155) -/** Compiled in flag settings for the provider option */ -#define PROVIDER_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * fips140-mode option description: - */ -/** Descriptive text for the fips140-mode option */ -#define FIPS140_MODE_DESC (gnutls_cli_opt_strs+4164) -/** Upper-cased name for the fips140-mode option */ -#define FIPS140_MODE_NAME (gnutls_cli_opt_strs+4223) -/** Name string for the fips140-mode option */ -#define FIPS140_MODE_name (gnutls_cli_opt_strs+4236) -/** Compiled in flag settings for the fips140-mode option */ -#define FIPS140_MODE_FLAGS (OPTST_DISABLED) - -/* - * Help/More_Help/Version option descriptions: - */ -#define HELP_DESC (gnutls_cli_opt_strs+4249) -#define HELP_name (gnutls_cli_opt_strs+4293) -#ifdef HAVE_WORKING_FORK -#define MORE_HELP_DESC (gnutls_cli_opt_strs+4298) -#define MORE_HELP_name (gnutls_cli_opt_strs+4343) -#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -#define MORE_HELP_DESC HELP_DESC -#define MORE_HELP_name HELP_name -#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT) -#endif -#ifdef NO_OPTIONAL_OPT_ARGS -# define VER_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ - OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT) -#endif -#define VER_DESC (gnutls_cli_opt_strs+4353) -#define VER_name (gnutls_cli_opt_strs+4389) -/** - * Declare option callback procedures - */ -extern tOptProc - optionBooleanVal, optionNestedVal, optionNumericVal, - optionPagedUsage, optionPrintVersion, optionResetOpt, - optionStackArg, optionTimeDate, optionTimeVal, - optionUnstackArg, optionVendorOption; -static tOptProc - doOptApp_Proto, doOptDebug, doOptMtu, doOptPgpcertfile, - doOptPgpkeyfile, doOptPgpkeyring, doOptProvider, doOptRecordsize, - doOptX509crlfile, doUsageOpt; -#define VER_PROC optionPrintVersion - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Define the gnutls-cli Option Descriptions. - * This is an array of OPTION_CT entries, one for each - * option that the gnutls-cli program responds to. - */ -static tOptDesc optDesc[OPTION_CT] = { - { /* entry idx, value */ 0, VALUE_OPT_DEBUG, - /* equiv idx, value */ 0, VALUE_OPT_DEBUG, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DEBUG_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --debug */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDebug, - /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 1, VALUE_OPT_VERBOSE, - /* equiv idx, value */ 1, VALUE_OPT_VERBOSE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, NOLIMIT, 0, - /* opt state flags */ VERBOSE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verbose */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERBOSE_DESC, VERBOSE_NAME, VERBOSE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 2, VALUE_OPT_TOFU, - /* equiv idx, value */ 2, VALUE_OPT_TOFU, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ TOFU_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --tofu */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ TOFU_DESC, TOFU_NAME, TOFU_name, - /* disablement strs */ NOT_TOFU_name, NOT_TOFU_PFX }, - - { /* entry idx, value */ 3, VALUE_OPT_STRICT_TOFU, - /* equiv idx, value */ 3, VALUE_OPT_STRICT_TOFU, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ STRICT_TOFU_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --strict-tofu */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ STRICT_TOFU_DESC, STRICT_TOFU_NAME, STRICT_TOFU_name, - /* disablement strs */ NOT_STRICT_TOFU_name, NOT_STRICT_TOFU_PFX }, - - { /* entry idx, value */ 4, VALUE_OPT_DANE, - /* equiv idx, value */ 4, VALUE_OPT_DANE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DANE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --dane */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DANE_DESC, DANE_NAME, DANE_name, - /* disablement strs */ NOT_DANE_name, NOT_DANE_PFX }, - - { /* entry idx, value */ 5, VALUE_OPT_LOCAL_DNS, - /* equiv idx, value */ 5, VALUE_OPT_LOCAL_DNS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOCAL_DNS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --local-dns */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOCAL_DNS_DESC, LOCAL_DNS_NAME, LOCAL_DNS_name, - /* disablement strs */ NOT_LOCAL_DNS_name, NOT_LOCAL_DNS_PFX }, - - { /* entry idx, value */ 6, VALUE_OPT_CA_VERIFICATION, - /* equiv idx, value */ 6, VALUE_OPT_CA_VERIFICATION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CA_VERIFICATION_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --ca-verification */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CA_VERIFICATION_DESC, CA_VERIFICATION_NAME, CA_VERIFICATION_name, - /* disablement strs */ NOT_CA_VERIFICATION_name, NOT_CA_VERIFICATION_PFX }, - - { /* entry idx, value */ 7, VALUE_OPT_OCSP, - /* equiv idx, value */ 7, VALUE_OPT_OCSP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OCSP_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --ocsp */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OCSP_DESC, OCSP_NAME, OCSP_name, - /* disablement strs */ NOT_OCSP_name, NOT_OCSP_PFX }, - - { /* entry idx, value */ 8, VALUE_OPT_RESUME, - /* equiv idx, value */ 8, VALUE_OPT_RESUME, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ RESUME_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --resume */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ RESUME_DESC, RESUME_NAME, RESUME_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 9, VALUE_OPT_REHANDSHAKE, - /* equiv idx, value */ 9, VALUE_OPT_REHANDSHAKE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ REHANDSHAKE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --rehandshake */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ REHANDSHAKE_DESC, REHANDSHAKE_NAME, REHANDSHAKE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 10, VALUE_OPT_SNI_HOSTNAME, - /* equiv idx, value */ 10, VALUE_OPT_SNI_HOSTNAME, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SNI_HOSTNAME_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --sni-hostname */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SNI_HOSTNAME_DESC, SNI_HOSTNAME_NAME, SNI_HOSTNAME_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 11, VALUE_OPT_STARTTLS, - /* equiv idx, value */ 11, VALUE_OPT_STARTTLS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ STARTTLS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --starttls */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ STARTTLS_DESC, STARTTLS_NAME, STARTTLS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 12, VALUE_OPT_APP_PROTO, - /* equiv idx, value */ 12, VALUE_OPT_APP_PROTO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ APP_PROTO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --app-proto */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptApp_Proto, - /* desc, NAME, name */ APP_PROTO_DESC, APP_PROTO_NAME, APP_PROTO_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 13, VALUE_OPT_STARTTLS_PROTO, - /* equiv idx, value */ 13, VALUE_OPT_STARTTLS_PROTO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ STARTTLS_PROTO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --starttls-proto */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aStarttls_ProtoCantList, - /* option proc */ NULL, - /* desc, NAME, name */ STARTTLS_PROTO_DESC, STARTTLS_PROTO_NAME, STARTTLS_PROTO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 14, VALUE_OPT_UDP, - /* equiv idx, value */ 14, VALUE_OPT_UDP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ UDP_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --udp */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ UDP_DESC, UDP_NAME, UDP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 15, VALUE_OPT_MTU, - /* equiv idx, value */ 15, VALUE_OPT_MTU, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MTU_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --mtu */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptMtu, - /* desc, NAME, name */ MTU_DESC, MTU_NAME, MTU_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 16, VALUE_OPT_CRLF, - /* equiv idx, value */ 16, VALUE_OPT_CRLF, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CRLF_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --crlf */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CRLF_DESC, CRLF_NAME, CRLF_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 17, VALUE_OPT_FASTOPEN, - /* equiv idx, value */ 17, VALUE_OPT_FASTOPEN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ FASTOPEN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --fastopen */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ FASTOPEN_DESC, FASTOPEN_NAME, FASTOPEN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 18, VALUE_OPT_X509FMTDER, - /* equiv idx, value */ 18, VALUE_OPT_X509FMTDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509FMTDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509fmtder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509FMTDER_DESC, X509FMTDER_NAME, X509FMTDER_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 19, VALUE_OPT_FINGERPRINT, - /* equiv idx, value */ 19, VALUE_OPT_FINGERPRINT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ FINGERPRINT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --fingerprint */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ FINGERPRINT_DESC, FINGERPRINT_NAME, FINGERPRINT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 20, VALUE_OPT_PRINT_CERT, - /* equiv idx, value */ 20, VALUE_OPT_PRINT_CERT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PRINT_CERT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --print-cert */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PRINT_CERT_DESC, PRINT_CERT_NAME, PRINT_CERT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 21, VALUE_OPT_SAVE_CERT, - /* equiv idx, value */ 21, VALUE_OPT_SAVE_CERT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SAVE_CERT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --save-cert */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SAVE_CERT_DESC, SAVE_CERT_NAME, SAVE_CERT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 22, VALUE_OPT_SAVE_OCSP, - /* equiv idx, value */ 22, VALUE_OPT_SAVE_OCSP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SAVE_OCSP_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --save-ocsp */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SAVE_OCSP_DESC, SAVE_OCSP_NAME, SAVE_OCSP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 23, VALUE_OPT_DH_BITS, - /* equiv idx, value */ 23, VALUE_OPT_DH_BITS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DH_BITS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --dh-bits */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionNumericVal, - /* desc, NAME, name */ DH_BITS_DESC, DH_BITS_NAME, DH_BITS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 24, VALUE_OPT_PRIORITY, - /* equiv idx, value */ 24, VALUE_OPT_PRIORITY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PRIORITY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --priority */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PRIORITY_DESC, PRIORITY_NAME, PRIORITY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 25, VALUE_OPT_X509CAFILE, - /* equiv idx, value */ 25, VALUE_OPT_X509CAFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509CAFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509cafile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509CAFILE_DESC, X509CAFILE_NAME, X509CAFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 26, VALUE_OPT_X509CRLFILE, - /* equiv idx, value */ 26, VALUE_OPT_X509CRLFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509CRLFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509crlfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptX509crlfile, - /* desc, NAME, name */ X509CRLFILE_DESC, X509CRLFILE_NAME, X509CRLFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 27, VALUE_OPT_PGPKEYFILE, - /* equiv idx, value */ 27, VALUE_OPT_PGPKEYFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PGPKEYFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pgpkeyfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptPgpkeyfile, - /* desc, NAME, name */ PGPKEYFILE_DESC, PGPKEYFILE_NAME, PGPKEYFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 28, VALUE_OPT_PGPKEYRING, - /* equiv idx, value */ 28, VALUE_OPT_PGPKEYRING, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PGPKEYRING_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pgpkeyring */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptPgpkeyring, - /* desc, NAME, name */ PGPKEYRING_DESC, PGPKEYRING_NAME, PGPKEYRING_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 29, VALUE_OPT_PGPCERTFILE, - /* equiv idx, value */ 29, VALUE_OPT_PGPCERTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PGPCERTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pgpcertfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ aPgpcertfileMustList, NULL, - /* option proc */ doOptPgpcertfile, - /* desc, NAME, name */ PGPCERTFILE_DESC, PGPCERTFILE_NAME, PGPCERTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 30, VALUE_OPT_X509KEYFILE, - /* equiv idx, value */ 30, VALUE_OPT_X509KEYFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509KEYFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509keyfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509KEYFILE_DESC, X509KEYFILE_NAME, X509KEYFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 31, VALUE_OPT_X509CERTFILE, - /* equiv idx, value */ 31, VALUE_OPT_X509CERTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509CERTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509certfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ aX509certfileMustList, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509CERTFILE_DESC, X509CERTFILE_NAME, X509CERTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 32, VALUE_OPT_PGPSUBKEY, - /* equiv idx, value */ 32, VALUE_OPT_PGPSUBKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PGPSUBKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pgpsubkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PGPSUBKEY_DESC, PGPSUBKEY_NAME, PGPSUBKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 33, VALUE_OPT_SRPUSERNAME, - /* equiv idx, value */ 33, VALUE_OPT_SRPUSERNAME, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SRPUSERNAME_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --srpusername */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SRPUSERNAME_DESC, SRPUSERNAME_NAME, SRPUSERNAME_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 34, VALUE_OPT_SRPPASSWD, - /* equiv idx, value */ 34, VALUE_OPT_SRPPASSWD, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SRPPASSWD_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --srppasswd */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SRPPASSWD_DESC, SRPPASSWD_NAME, SRPPASSWD_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 35, VALUE_OPT_PSKUSERNAME, - /* equiv idx, value */ 35, VALUE_OPT_PSKUSERNAME, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PSKUSERNAME_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pskusername */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PSKUSERNAME_DESC, PSKUSERNAME_NAME, PSKUSERNAME_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 36, VALUE_OPT_PSKKEY, - /* equiv idx, value */ 36, VALUE_OPT_PSKKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PSKKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pskkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PSKKEY_DESC, PSKKEY_NAME, PSKKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 37, VALUE_OPT_PORT, - /* equiv idx, value */ 37, VALUE_OPT_PORT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PORT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --port */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PORT_DESC, PORT_NAME, PORT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 38, VALUE_OPT_INSECURE, - /* equiv idx, value */ 38, VALUE_OPT_INSECURE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INSECURE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --insecure */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INSECURE_DESC, INSECURE_NAME, INSECURE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 39, VALUE_OPT_RANGES, - /* equiv idx, value */ 39, VALUE_OPT_RANGES, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ RANGES_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --ranges */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ RANGES_DESC, RANGES_NAME, RANGES_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 40, VALUE_OPT_BENCHMARK_CIPHERS, - /* equiv idx, value */ 40, VALUE_OPT_BENCHMARK_CIPHERS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ BENCHMARK_CIPHERS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --benchmark-ciphers */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ BENCHMARK_CIPHERS_DESC, BENCHMARK_CIPHERS_NAME, BENCHMARK_CIPHERS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 41, VALUE_OPT_BENCHMARK_TLS_KX, - /* equiv idx, value */ 41, VALUE_OPT_BENCHMARK_TLS_KX, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ BENCHMARK_TLS_KX_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --benchmark-tls-kx */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ BENCHMARK_TLS_KX_DESC, BENCHMARK_TLS_KX_NAME, BENCHMARK_TLS_KX_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 42, VALUE_OPT_BENCHMARK_TLS_CIPHERS, - /* equiv idx, value */ 42, VALUE_OPT_BENCHMARK_TLS_CIPHERS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ BENCHMARK_TLS_CIPHERS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --benchmark-tls-ciphers */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ BENCHMARK_TLS_CIPHERS_DESC, BENCHMARK_TLS_CIPHERS_NAME, BENCHMARK_TLS_CIPHERS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 43, VALUE_OPT_LIST, - /* equiv idx, value */ 43, VALUE_OPT_LIST, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aListCantList, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_DESC, LIST_NAME, LIST_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 44, VALUE_OPT_PRIORITY_LIST, - /* equiv idx, value */ 44, VALUE_OPT_PRIORITY_LIST, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PRIORITY_LIST_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --priority-list */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PRIORITY_LIST_DESC, PRIORITY_LIST_NAME, PRIORITY_LIST_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 45, VALUE_OPT_NOTICKET, - /* equiv idx, value */ 45, VALUE_OPT_NOTICKET, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ NOTICKET_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --noticket */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ NOTICKET_DESC, NOTICKET_NAME, NOTICKET_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 46, VALUE_OPT_SRTP_PROFILES, - /* equiv idx, value */ 46, VALUE_OPT_SRTP_PROFILES, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SRTP_PROFILES_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --srtp_profiles */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SRTP_PROFILES_DESC, SRTP_PROFILES_NAME, SRTP_PROFILES_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 47, VALUE_OPT_ALPN, - /* equiv idx, value */ 47, VALUE_OPT_ALPN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, NOLIMIT, 0, - /* opt state flags */ ALPN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --alpn */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionStackArg, - /* desc, NAME, name */ ALPN_DESC, ALPN_NAME, ALPN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 48, VALUE_OPT_HEARTBEAT, - /* equiv idx, value */ 48, VALUE_OPT_HEARTBEAT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ HEARTBEAT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --heartbeat */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ HEARTBEAT_DESC, HEARTBEAT_NAME, HEARTBEAT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 49, VALUE_OPT_RECORDSIZE, - /* equiv idx, value */ 49, VALUE_OPT_RECORDSIZE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ RECORDSIZE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --recordsize */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptRecordsize, - /* desc, NAME, name */ RECORDSIZE_DESC, RECORDSIZE_NAME, RECORDSIZE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 50, VALUE_OPT_DISABLE_SNI, - /* equiv idx, value */ 50, VALUE_OPT_DISABLE_SNI, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DISABLE_SNI_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --disable-sni */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DISABLE_SNI_DESC, DISABLE_SNI_NAME, DISABLE_SNI_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 51, VALUE_OPT_DISABLE_EXTENSIONS, - /* equiv idx, value */ 51, VALUE_OPT_DISABLE_EXTENSIONS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DISABLE_EXTENSIONS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --disable-extensions */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DISABLE_EXTENSIONS_DESC, DISABLE_EXTENSIONS_NAME, DISABLE_EXTENSIONS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 52, VALUE_OPT_INLINE_COMMANDS, - /* equiv idx, value */ 52, VALUE_OPT_INLINE_COMMANDS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INLINE_COMMANDS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --inline-commands */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INLINE_COMMANDS_DESC, INLINE_COMMANDS_NAME, INLINE_COMMANDS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 53, VALUE_OPT_INLINE_COMMANDS_PREFIX, - /* equiv idx, value */ 53, VALUE_OPT_INLINE_COMMANDS_PREFIX, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INLINE_COMMANDS_PREFIX_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --inline-commands-prefix */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INLINE_COMMANDS_PREFIX_DESC, INLINE_COMMANDS_PREFIX_NAME, INLINE_COMMANDS_PREFIX_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 54, VALUE_OPT_PROVIDER, - /* equiv idx, value */ 54, VALUE_OPT_PROVIDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PROVIDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --provider */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptProvider, - /* desc, NAME, name */ PROVIDER_DESC, PROVIDER_NAME, PROVIDER_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 55, VALUE_OPT_FIPS140_MODE, - /* equiv idx, value */ 55, VALUE_OPT_FIPS140_MODE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ FIPS140_MODE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --fips140-mode */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ FIPS140_MODE_DESC, FIPS140_MODE_NAME, FIPS140_MODE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VER_FLAGS, AOUSE_VERSION, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ VER_PROC, - /* desc, NAME, name */ VER_DESC, NULL, VER_name, - /* disablement strs */ NULL, NULL }, - - - - { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doUsageOpt, - /* desc, NAME, name */ HELP_DESC, NULL, HELP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionPagedUsage, - /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name, - /* disablement strs */ NULL, NULL } -}; - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** Reference to the upper cased version of gnutls-cli. */ -#define zPROGNAME (gnutls_cli_opt_strs+4397) -/** Reference to the title line for gnutls-cli usage. */ -#define zUsageTitle (gnutls_cli_opt_strs+4408) -/** There is no gnutls-cli configuration file. */ -#define zRcName NULL -/** There are no directories to search for gnutls-cli config files. */ -#define apzHomeList NULL -/** The gnutls-cli program bug email address. */ -#define zBugsAddr (gnutls_cli_opt_strs+4504) -/** Clarification/explanation of what gnutls-cli does. */ -#define zExplain (gnutls_cli_opt_strs+4524) -/** Extra detail explaining what gnutls-cli does. */ -#define zDetail (gnutls_cli_opt_strs+4526) -/** The full version string for gnutls-cli. */ -#define zFullVersion (gnutls_cli_opt_strs+4709) -/* extracted from optcode.tlib near line 364 */ - -#if defined(ENABLE_NLS) -# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT - static tOptionXlateProc translate_option_strings; -#else -# define OPTPROC_BASE OPTPROC_NONE -# define translate_option_strings NULL -#endif /* ENABLE_NLS */ - -#define gnutls_cli_full_usage (NULL) -#define gnutls_cli_short_usage (gnutls_cli_opt_strs+4730) - -#endif /* not defined __doxygen__ */ - -/* - * Create the static procedure(s) declared above. - */ -/** - * The callout function that invokes the optionUsage function. - * - * @param[in] opts the AutoOpts option description structure - * @param[in] od the descriptor for the "help" (usage) option. - * @noreturn - */ -static void -doUsageOpt(tOptions * opts, tOptDesc * od) -{ - int ex_code; - ex_code = GNUTLS_CLI_EXIT_SUCCESS; - optionUsage(&gnutls_cliOptions, ex_code); - /* NOTREACHED */ - exit(GNUTLS_CLI_EXIT_FAILURE); - (void)opts; - (void)od; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the debug option. - * Specifies the debug level. - * @param[in] pOptions the gnutls-cli options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 9999 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the app-proto option. - * - * @param[in] pOptions the gnutls-cli options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptApp_Proto(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_STARTTLS_PROTO); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(GNUTLS_CLI_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the mtu option. - * - * @param[in] pOptions the gnutls-cli options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptMtu(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0, 17000 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the x509crlfile option. - * - * @param[in] pOptions the gnutls-cli options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptX509crlfile(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the pgpkeyfile option. - * - * @param[in] pOptions the gnutls-cli options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptPgpkeyfile(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the pgpkeyring option. - * - * @param[in] pOptions the gnutls-cli options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptPgpkeyring(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the pgpcertfile option. - * - * @param[in] pOptions the gnutls-cli options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptPgpcertfile(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the recordsize option. - * - * @param[in] pOptions the gnutls-cli options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptRecordsize(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0, 4096 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the provider option. - * This will override the default options in /etc/gnutls/pkcs11.conf - * @param[in] pOptions the gnutls-cli options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptProvider(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} -/* extracted from optmain.tlib near line 1250 */ - -/** - * The directory containing the data associated with gnutls-cli. - */ -#ifndef PKGDATADIR -# define PKGDATADIR "" -#endif - -/** - * Information about the person or institution that packaged gnutls-cli - * for the current distribution. - */ -#ifndef WITH_PACKAGER -# define gnutls_cli_packager_info NULL -#else -/** Packager information for gnutls-cli. */ -static char const gnutls_cli_packager_info[] = - "Packaged by " WITH_PACKAGER - -# ifdef WITH_PACKAGER_VERSION - " ("WITH_PACKAGER_VERSION")" -# endif - -# ifdef WITH_PACKAGER_BUG_REPORTS - "\nReport gnutls_cli bugs to " WITH_PACKAGER_BUG_REPORTS -# endif - "\n"; -#endif -#ifndef __doxygen__ - -#endif /* __doxygen__ */ -/** - * The option definitions for gnutls-cli. The one structure that - * binds them all. - */ -tOptions gnutls_cliOptions = { - OPTIONS_STRUCT_VERSION, - 0, NULL, /* original argc + argv */ - ( OPTPROC_BASE - + OPTPROC_ERRSTOP - + OPTPROC_SHORTOPT - + OPTPROC_LONGOPT - + OPTPROC_NO_REQ_OPT - + OPTPROC_NEGATIONS - + OPTPROC_REORDER - + OPTPROC_GNUUSAGE - + OPTPROC_MISUSE ), - 0, NULL, /* current option index, current option */ - NULL, NULL, zPROGNAME, - zRcName, zCopyright, zLicenseDescrip, - zFullVersion, apzHomeList, zUsageTitle, - zExplain, zDetail, optDesc, - zBugsAddr, /* address to send bugs to */ - NULL, NULL, /* extensions/saved state */ - optionUsage, /* usage procedure */ - translate_option_strings, /* translation procedure */ - /* - * Indexes to special options - */ - { INDEX_OPT_MORE_HELP, /* more-help option index */ - NO_EQUIVALENT, /* save option index */ - NO_EQUIVALENT, /* '-#' option index */ - NO_EQUIVALENT /* index of default opt */ - }, - 59 /* full option count */, 56 /* user option count */, - gnutls_cli_full_usage, gnutls_cli_short_usage, - NULL, NULL, - PKGDATADIR, gnutls_cli_packager_info -}; - -#if ENABLE_NLS -/** - * This code is designed to translate translatable option text for the - * gnutls-cli program. These translations happen upon entry - * to optionProcess(). - */ -#include -#include -#include -#include -#ifdef HAVE_DCGETTEXT -# include -#endif -#include - -static char * AO_gettext(char const * pz); -static void coerce_it(void ** s); - -/** - * AutoGen specific wrapper function for gettext. It relies on the macro _() - * to convert from English to the target language, then strdup-duplicates the - * result string. It tries the "libopts" domain first, then whatever has been - * set via the \a textdomain(3) call. - * - * @param[in] pz the input text used as a lookup key. - * @returns the translated text (if there is one), - * or the original text (if not). - */ -static char * -AO_gettext(char const * pz) -{ - char * res; - if (pz == NULL) - return NULL; -#ifdef HAVE_DCGETTEXT - /* - * While processing the option_xlateable_txt data, try to use the - * "libopts" domain. Once we switch to the option descriptor data, - * do *not* use that domain. - */ - if (option_xlateable_txt.field_ct != 0) { - res = dgettext("libopts", pz); - if (res == pz) - res = (char *)VOIDP(_(pz)); - } else - res = (char *)VOIDP(_(pz)); -#else - res = (char *)VOIDP(_(pz)); -#endif - if (res == pz) - return res; - res = strdup(res); - if (res == NULL) { - fputs(_("No memory for duping translated strings\n"), stderr); - exit(GNUTLS_CLI_EXIT_FAILURE); - } - return res; -} - -/** - * All the pointers we use are marked "* const", but they are stored in - * writable memory. Coerce the mutability and set the pointer. - */ -static void coerce_it(void ** s) { *s = AO_gettext(*s); -} - -/** - * Translate all the translatable strings in the gnutls_cliOptions - * structure defined above. This is done only once. - */ -static void -translate_option_strings(void) -{ - tOptions * const opts = &gnutls_cliOptions; - - /* - * Guard against re-translation. It won't work. The strings will have - * been changed by the first pass through this code. One shot only. - */ - if (option_xlateable_txt.field_ct != 0) { - /* - * Do the translations. The first pointer follows the field count - * field. The field count field is the size of a pointer. - */ - char ** ppz = (char**)VOIDP(&(option_xlateable_txt)); - int ix = option_xlateable_txt.field_ct; - - do { - ppz++; /* skip over field_ct */ - *ppz = AO_gettext(*ppz); - } while (--ix > 0); - /* prevent re-translation and disable "libopts" domain lookup */ - option_xlateable_txt.field_ct = 0; - - coerce_it(VOIDP(&(opts->pzCopyright))); - coerce_it(VOIDP(&(opts->pzCopyNotice))); - coerce_it(VOIDP(&(opts->pzFullVersion))); - coerce_it(VOIDP(&(opts->pzUsageTitle))); - coerce_it(VOIDP(&(opts->pzExplain))); - coerce_it(VOIDP(&(opts->pzDetail))); - { - tOptDesc * od = opts->pOptDesc; - for (ix = opts->optCt; ix > 0; ix--, od++) - coerce_it(VOIDP(&(od->pzText))); - } - } -} -#endif /* ENABLE_NLS */ - -#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT -/** I18N function strictly for xgettext. Do not compile. */ -static void bogus_function(void) { - /* TRANSLATORS: - - The following dummy function was crated solely so that xgettext can - extract the correct strings. These strings are actually referenced - by a field name in the gnutls_cliOptions structure noted in the - comments below. The literal text is defined in gnutls_cli_opt_strs. - - NOTE: the strings below are segmented with respect to the source string - gnutls_cli_opt_strs. The strings above are handed off for translation - at run time a paragraph at a time. Consequently, they are presented here - for translation a paragraph at a time. - - ALSO: often the description for an option will reference another option - by name. These are set off with apostrophe quotes (I hope). Do not - translate option names. - */ - /* referenced via gnutls_cliOptions.pzCopyright */ - puts(_("gnutls-cli @VERSION@\n\ -Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n\ -This is free software. It is licensed for use, modification and\n\ -redistribution under the terms of the GNU General Public License,\n\ -version 3 or later \n")); - - /* referenced via gnutls_cliOptions.pzCopyNotice */ - puts(_("gnutls-cli is free software: you can redistribute it and/or modify it under\n\ -the terms of the GNU General Public License as published by the Free\n\ -Software Foundation, either version 3 of the License, or (at your option)\n\ -any later version.\n\n")); - puts(_("gnutls-cli is distributed in the hope that it will be useful, but WITHOUT\n\ -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n\ -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n\ -more details.\n\n")); - puts(_("You should have received a copy of the GNU General Public License along\n\ -with this program. If not, see .\n")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Enable debugging")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("More verbose output")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Enable trust on first use authentication")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Fail to connect if a known certificate has changed")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Enable DANE certificate verification (DNSSEC)")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Use the local DNS server for DNSSEC resolving")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Enable CA certificate verification")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Enable OCSP certificate verification")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Establish a session and resume")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Establish a session and rehandshake")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Server's hostname for server name indication extension")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Connect, establish a plain session and start TLS")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("an alias for the 'starttls-proto' option")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("The application protocol to be used to obtain the server's certificate\n\ -(https, ftp, smtp, imap, ldap, xmpp, lmtp, pop3, nntp, sieve, postgres)")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Use DTLS (datagram TLS) over UDP")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Set MTU for datagram TLS")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Send CR LF instead of LF")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Enable TCP Fast Open")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Use DER format for certificates to read from")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Send the openpgp fingerprint, instead of the key")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Print peer's certificate in PEM format")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Save the peer's certificate chain in the specified file in PEM format")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Save the peer's OCSP status response in the provided file")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("The minimum number of bits allowed for DH")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Priorities string")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Certificate file or PKCS #11 URL to use")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("CRL file to use")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("PGP Key file to use")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("PGP Key ring file to use")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("PGP Public Key (certificate) file to use")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("X.509 key file or PKCS #11 URL to use")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("X.509 Certificate file or PKCS #11 URL to use")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("PGP subkey to use (hex or auto)")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("SRP username to use")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("SRP password to use")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("PSK username to use")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("PSK key (in hex) to use")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("The port or service to connect to")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Don't abort program if server certificate can't be validated")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Use length-hiding padding to prevent traffic analysis")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Benchmark individual ciphers")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Benchmark TLS key exchange methods")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Benchmark TLS ciphers")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Print a list of the supported algorithms and modes")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Print a list of the supported priority strings")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Don't allow session tickets")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Offer SRTP profiles")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Application layer protocol")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Activate heartbeat support")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("The maximum record size to advertize")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Do not send a Server Name Indication (SNI)")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Disable all the TLS extensions")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Inline commands of the form ^^")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Change the default delimiter for inline commands.")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Specify the PKCS #11 provider library")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("Reports the status of the FIPS140-2 mode in gnutls library")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("display extended usage information and exit")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("extended usage information passed thru pager")); - - /* referenced via gnutls_cliOptions.pOptDesc->pzText */ - puts(_("output version information and exit")); - - /* referenced via gnutls_cliOptions.pzUsageTitle */ - puts(_("gnutls-cli - GnuTLS client\n\ -Usage: %s [ - [] | --[{=| }] ]... [hostname]\n")); - - /* referenced via gnutls_cliOptions.pzExplain */ - puts(_("\n")); - - /* referenced via gnutls_cliOptions.pzDetail */ - puts(_("Simple client program to set up a TLS connection to some other computer. It\n\ -sets up a TLS connection and forwards data from the standard input to the\n\ -secured socket and vice versa.\n")); - - /* referenced via gnutls_cliOptions.pzFullVersion */ - puts(_("gnutls-cli @VERSION@")); - - /* referenced via gnutls_cliOptions.pzFullUsage */ - puts(_("<<>>")); - - /* referenced via gnutls_cliOptions.pzShortUsage */ - puts(_("Usage: gnutls-cli [options] hostname\n\ -gnutls-cli --help for usage instructions.\n")); - /* LIBOPTS-MESSAGES: */ -#line 67 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" - puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" - puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" - puts(_("Automated Options Processing Error!\n" - "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" - puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" - puts(_("\tThis is less than the minimum library version: ")); -#line 121 "../version.c" - puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" - puts(_("(AutoOpts bug): %s.\n")); -#line 90 "../reset.c" - puts(_("optionResetOpt() called, but reset-option not configured")); -#line 295 "../usage.c" - puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" - puts(_("optionProcess() was called with invalid data")); -#line 751 "../usage.c" - puts(_("invalid argument type specified")); -#line 598 "../find.c" - puts(_("defaulted to option with optional arg")); -#line 76 "../alias.c" - puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" - puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" - puts(_(" The following options match:\n")); -#line 293 "../find.c" - puts(_("%s: ambiguous option name: %s (matches %d options)\n")); -#line 161 "../check.c" - puts(_("%s: Command line arguments required\n")); -#line 43 "../alias.c" - puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" - puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" - puts(_("interprocess pipe")); -#line 168 "../version.c" - puts(_("error: version option argument '%c' invalid. Use:\n" - "\t'v' - version only\n" - "\t'c' - version and copyright\n" - "\t'n' - version and full copyright notice\n")); -#line 58 "../check.c" - puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 38 "../alias.c" - puts(_("-equivalence")); -#line 469 "../find.c" - puts(_("%s: illegal option -- %c\n")); -#line 110 "../reset.c" - puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 118 "../reset.c" - puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" - puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 750 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 1084 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" - puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" - puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" - puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" - "\t'%s' and '%s'.")); -#line 94 "../check.c" - puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" - puts(_("%s: The '%s' option cannot have an argument.\n")); -#line 151 "../check.c" - puts(_("%s: Command line arguments are not allowed.\n")); -#line 536 "../save.c" - puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" - puts(_("%s error: '%s' does not match any %s keywords.\n")); -#line 93 "../reset.c" - puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 239 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 143 "../restore.c" - puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" - puts(_("'%s' is not a command line option.\n")); -#line 113 "../time.c" - puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); -#line 50 "../time.c" - puts(_("%s error: '%s' is not a recognizable time duration.\n")); -#line 92 "../check.c" - puts(_("%s error: The %s option must appear %d times.\n")); -#line 165 "../numeric.c" - puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" - puts(_("%s error: %s exceeds %s keyword count\n")); -#line 333 "../usage.c" - puts(_("Try '%s %s' for more information.\n")); -#line 45 "../alias.c" - puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" - puts(_("standard output")); -#line 943 "../makeshell.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard output")); -#line 418 "../usage.c" - puts(_("standard output")); -#line 628 "../usage.c" - puts(_("standard output")); -#line 175 "../version.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard error")); -#line 418 "../usage.c" - puts(_("standard error")); -#line 628 "../usage.c" - puts(_("standard error")); -#line 175 "../version.c" - puts(_("standard error")); -#line 208 "../makeshell.c" - puts(_("write")); -#line 943 "../makeshell.c" - puts(_("write")); -#line 276 "../usage.c" - puts(_("write")); -#line 417 "../usage.c" - puts(_("write")); -#line 627 "../usage.c" - puts(_("write")); -#line 174 "../version.c" - puts(_("write")); -#line 60 "../numeric.c" - puts(_("%s error: %s option value %ld is out of range.\n")); -#line 44 "../check.c" - puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 238 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 257 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 535 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); - /* END-LIBOPTS-MESSAGES */ - - /* USAGE-TEXT: */ -#line 876 "../usage.c" - puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1151 "../usage.c" - puts(_("Version, usage and configuration options:")); -#line 927 "../usage.c" - puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 840 "../usage.c" - puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1120 "../usage.c" - puts(_(" --- %-14s %s\n")); -#line 1118 "../usage.c" - puts(_("This option has been disabled")); -#line 867 "../usage.c" - puts(_("\t\t\t\t- enabled by default\n")); -#line 40 "../alias.c" - puts(_("%s error: only ")); -#line 1197 "../usage.c" - puts(_(" - examining environment variables named %s_*\n")); -#line 168 "../file.c" - puts(_("\t\t\t\t- file must not pre-exist\n")); -#line 172 "../file.c" - puts(_("\t\t\t\t- file must pre-exist\n")); -#line 383 "../usage.c" - puts(_("Options are specified by doubled hyphens and their name or by a single\n" - "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" - puts(_("\n" - "= = = = = = = =\n\n" - "This incarnation of genshell will produce\n" - "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" - puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 900 "../usage.c" - puts(_("\t\t\t\t- is a set membership option\n")); -#line 921 "../usage.c" - puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 385 "../usage.c" - puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 907 "../usage.c" - puts(_("\t\t\t\t- may appear multiple times\n")); -#line 894 "../usage.c" - puts(_("\t\t\t\t- may not be preset\n")); -#line 1312 "../usage.c" - puts(_(" Arg Option-Name Description\n")); -#line 1248 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1306 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1307 "../usage.c" - puts(_(" %3s %s")); -#line 1313 "../usage.c" - puts(_(" %3s %s")); -#line 390 "../usage.c" - puts(_("The '-#' option may omit the hash char\n")); -#line 386 "../usage.c" - puts(_("All arguments are named options.\n")); -#line 974 "../usage.c" - puts(_(" - reading file %s")); -#line 412 "../usage.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 100 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 129 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 906 "../usage.c" - puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 947 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 1195 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 685 "../usage.c" - puts(_("prohibits these options:\n")); -#line 680 "../usage.c" - puts(_("prohibits the option '%s'\n")); -#line 81 "../numeric.c" - puts(_("%s%ld to %ld")); -#line 79 "../numeric.c" - puts(_("%sgreater than or equal to %ld")); -#line 75 "../numeric.c" - puts(_("%s%ld exactly")); -#line 68 "../numeric.c" - puts(_("%sit must lie in one of the ranges:\n")); -#line 68 "../numeric.c" - puts(_("%sit must be in the range:\n")); -#line 88 "../numeric.c" - puts(_(", or\n")); -#line 66 "../numeric.c" - puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); -#line 77 "../numeric.c" - puts(_("%sless than or equal to %ld")); -#line 393 "../usage.c" - puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 655 "../usage.c" - puts(_("requires the option '%s'\n")); -#line 658 "../usage.c" - puts(_("requires these options:\n")); -#line 1324 "../usage.c" - puts(_(" Arg Option-Name Req? Description\n")); -#line 1318 "../usage.c" - puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" - puts(_("or you may use a numeric representation. Preceding these with a '!'\n" - "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" - "will set them all. Multiple entries may be passed as an option\n" - "argument list.\n")); -#line 913 "../usage.c" - puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" - puts(_("The valid \"%s\" option keywords are:\n")); -#line 1155 "../usage.c" - puts(_("The next option supports vendor supported extra options:")); -#line 776 "../usage.c" - puts(_("These additional options are:")); - /* END-USAGE-TEXT */ -} -#endif /* uncompilable code */ -#ifdef __cplusplus -} -#endif -/* cli-args.c ends here */ diff --git a/src/cli-args.def b/src/cli-args.def index 69917596f2..56ae77b077 100644 --- a/src/cli-args.def +++ b/src/cli-args.def @@ -25,10 +25,11 @@ process."; flag = { name = strict-tofu; - descrip = "Fail to connect if a known certificate has changed"; + descrip = "Fail to connect if a certificate is unknown or a known certificate has changed"; disabled; disable = "no"; - doc = "This option will perform authentication as with option --tofu; however, while --tofu asks whether to trust a changed public key, this option will fail in case of public key changes."; + doc = "This option will perform authentication as with option --tofu; however, no questions shall be asked whatsoever, neither to accept an unknown certificate nor a changed one."; + }; flag = { @@ -73,6 +74,13 @@ flag = { doc = "Connect, establish a session, reconnect and resume."; }; +flag = { + name = earlydata; + arg-type = string; + descrip = "Send early data on resumption from the specified file"; + doc = ""; +}; + flag = { name = rehandshake; value = e; @@ -84,7 +92,14 @@ flag = { name = sni-hostname; descrip = "Server's hostname for server name indication extension"; arg-type = string; - doc = "Set explicitly the server name used in the TLS server name indication extension. That is useful when testing with servers setup on different DNS name than the intended. If not specified, the provided hostname is used."; + doc = "Set explicitly the server name used in the TLS server name indication extension. That is useful when testing with servers setup on different DNS name than the intended. If not specified, the provided hostname is used. Even with this option server certificate verification still uses the hostname passed on the main commandline. Use --verify-hostname to change this."; +}; + +flag = { + name = verify-hostname; + descrip = "Server's hostname to use for validation"; + arg-type = string; + doc = "Set explicitly the server name to be used when validating the server's certificate."; }; flag = { @@ -140,13 +155,6 @@ flag = { doc = ""; }; -flag = { - name = fingerprint; - value = f; - descrip = "Send the openpgp fingerprint, instead of the key"; - doc = ""; -}; - flag = { name = print-cert; descrip = "Print peer's certificate in PEM format"; @@ -164,6 +172,29 @@ flag = { name = save-ocsp; arg-type = string; descrip = "Save the peer's OCSP status response in the provided file"; + doc = ""; + flags-cant = save-ocsp-multi; +}; + +flag = { + name = save-ocsp-multi; + arg-type = string; + descrip = "Save all OCSP responses provided by the peer in this file"; + doc = "The file will contain a list of PEM encoded OCSP status responses if any were provided by the peer, starting with the one for the peer's server certificate."; + flags-cant = save-ocsp; +}; + +flag = { + name = save-server-trace; + arg-type = string; + descrip = "Save the server-side TLS message trace in the provided file"; + doc = ""; +}; + +flag = { + name = save-client-trace; + arg-type = string; + descrip = "Save the client-side TLS message trace in the provided file"; doc = ""; }; @@ -201,31 +232,6 @@ flag = { doc = ""; }; -flag = { - name = pgpkeyfile; - arg-type = file; - file-exists = yes; - descrip = "PGP Key file to use"; - doc = ""; -}; - -flag = { - name = pgpkeyring; - arg-type = file; - file-exists = yes; - descrip = "PGP Key ring file to use"; - doc = ""; -}; - -flag = { - name = pgpcertfile; - arg-type = file; - file-exists = yes; - descrip = "PGP Public Key (certificate) file to use"; - doc = ""; - flags-must = pgpkeyfile; -}; - flag = { name = x509keyfile; arg-type = string; @@ -242,10 +248,28 @@ flag = { }; flag = { - name = pgpsubkey; + name = rawpkkeyfile; arg-type = string; - descrip = "PGP subkey to use (hex or auto)"; - doc = ""; + descrip = "Private key file (PKCS #8 or PKCS #12) or PKCS #11 URL to use"; + doc = "In order to instruct the application to negotiate raw public keys one +must enable the respective certificate types via the priority strings (i.e. CTYPE-CLI-* +and CTYPE-SRV-* flags). + +Check the GnuTLS manual on section ``Priority strings'' for more +information on how to set certificate types."; +}; + +flag = { + name = rawpkfile; + arg-type = string; + descrip = "Raw public-key file to use"; + doc = "In order to instruct the application to negotiate raw public keys one +must enable the respective certificate types via the priority strings (i.e. CTYPE-CLI-* +and CTYPE-SRV-* flags). + +Check the GnuTLS manual on section ``Priority strings'' for more +information on how to set certificate types."; + flags-must = rawpkkeyfile; }; flag = { @@ -291,10 +315,17 @@ flag = { doc = ""; }; +flag = { + name = verify-allow-broken; + descrip = "Allow broken algorithms, such as MD5 for certificate verification"; + doc = ""; +}; + flag = { name = ranges; descrip = "Use length-hiding padding to prevent traffic analysis"; doc = "When possible (e.g., when using CBC ciphersuites), use length-hiding padding to prevent traffic analysis."; + deprecated; }; flag = { @@ -332,7 +363,7 @@ flag = { flag = { name = noticket; descrip = "Don't allow session tickets"; - doc = ""; + doc = "Disable the request of receiving of session tickets under TLS1.2 or earlier"; }; flag = { @@ -376,12 +407,26 @@ flag = { name = disable-extensions; descrip = "Disable all the TLS extensions"; doc = "This option disables all TLS extensions. Deprecated option. Use the priority string."; + deprecated; +}; + +flag = { + name = single-key-share; + descrip = "Send a single key share under TLS1.3"; + doc = "This option switches the default mode of sending multiple +key shares, to send a single one (the top one)."; +}; + +flag = { + name = post-handshake-auth; + descrip = "Enable post-handshake authentication under TLS1.3"; + doc = "This option enables post-handshake authentication when under TLS1.3."; }; flag = { name = inline-commands; descrip = "Inline commands of the form ^^"; - doc = "Enable inline commands of the form ^^. The inline commands are expected to be in a line by themselves. The available commands are: resume and renegotiate."; + doc = "Enable inline commands of the form ^^. The inline commands are expected to be in a line by themselves. The available commands are: resume, rekey1 (local rekey), rekey (rekey on both peers) and renegotiate."; }; flag = { @@ -405,6 +450,33 @@ flag = { doc = ""; }; +flag = { + name = logfile; + arg-type = string; + descrip = "Redirect informational messages to a specific file."; + doc = "Redirect informational messages to a specific file. The file may be /dev/null also to make the gnutls client quiet to use it in piped server connections where only the server communication may appear on stdout."; +}; + +flag = { + name = keymatexport; + arg-type = string; + descrip = "Label used for exporting keying material"; + doc = ""; +}; + +flag = { + name = keymatexportsize; + arg-type = number; + descrip = "Size of the exported keying material"; + doc = ""; +}; + +flag = { + name = waitresumption; + descrip = "Block waiting for the resumption data under TLS1.3"; + doc = "This option makes the client to block waiting for the resumption data under TLS1.3. The option has effect only when --resume is provided."; +}; + doc-section = { ds-type = 'SEE ALSO'; // or anything else ds-format = 'texi'; // or texi or mdoc format @@ -435,7 +507,29 @@ Connecting to '127.0.0.1:5556'... - Simple Client Mode: @end example -By keeping the --pskusername parameter and removing the --pskkey parameter, it will query only for the password during the handshake. +By keeping the --pskusername parameter and removing the --pskkey parameter, it will query only for the password during the handshake. + +@subheading Connecting using raw public-key authentication +To connect to a server using raw public-key authentication, you need to enable the option to negotiate raw public-keys via the priority strings such as in the example below. +@example +$ ./gnutls-cli -p 5556 localhost --priority NORMAL:-CTYPE-CLI-ALL:+CTYPE-CLI-RAWPK \ + --rawpkkeyfile cli.key.pem \ + --rawpkfile cli.rawpk.pem +Processed 1 client raw public key pair... +Resolving 'localhost'... +Connecting to '127.0.0.1:5556'... +- Successfully sent 1 certificate(s) to server. +- Server has requested a certificate. +- Certificate type: X.509 +- Got a certificate list of 1 certificates. +- Certificate[0] info: + - skipped +- Description: (TLS1.3-Raw Public Key-X.509)-(ECDHE-SECP256R1)-(RSA-PSS-RSAE-SHA256)-(AES-256-GCM) +- Options: +- Handshake was completed + +- Simple Client Mode: +@end example @subheading Connecting to STARTTLS services diff --git a/src/cli-args.h.bak b/src/cli-args.h.bak deleted file mode 100644 index b7edc1d99a..0000000000 --- a/src/cli-args.h.bak +++ /dev/null @@ -1,329 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (cli-args.h) - * - * It has been AutoGen-ed - * From the definitions cli-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This header file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the gnutls-cli author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The gnutls-cli program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * gnutls-cli is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * gnutls-cli is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -/** - * This file contains the programmatic interface to the Automated - * Options generated for the gnutls-cli program. - * These macros are documented in the AutoGen info file in the - * "AutoOpts" chapter. Please refer to that doc for usage help. - */ -#ifndef AUTOOPTS_CLI_ARGS_H_GUARD -#define AUTOOPTS_CLI_ARGS_H_GUARD 1 -#include "config.h" -#include - -/** - * Ensure that the library used for compiling this generated header is at - * least as new as the version current when the header template was released - * (not counting patch version increments). Also ensure that the oldest - * tolerable version is at least as old as what was current when the header - * template was released. - */ -#define AO_TEMPLATE_VERSION 167937 -#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ - || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) -# error option template version mismatches autoopts/options.h header - Choke Me. -#endif - -/** - * Enumeration of each option type for gnutls-cli - */ -typedef enum { - INDEX_OPT_DEBUG = 0, - INDEX_OPT_VERBOSE = 1, - INDEX_OPT_TOFU = 2, - INDEX_OPT_STRICT_TOFU = 3, - INDEX_OPT_DANE = 4, - INDEX_OPT_LOCAL_DNS = 5, - INDEX_OPT_CA_VERIFICATION = 6, - INDEX_OPT_OCSP = 7, - INDEX_OPT_RESUME = 8, - INDEX_OPT_REHANDSHAKE = 9, - INDEX_OPT_SNI_HOSTNAME = 10, - INDEX_OPT_STARTTLS = 11, - INDEX_OPT_APP_PROTO = 12, - INDEX_OPT_STARTTLS_PROTO = 13, - INDEX_OPT_UDP = 14, - INDEX_OPT_MTU = 15, - INDEX_OPT_CRLF = 16, - INDEX_OPT_FASTOPEN = 17, - INDEX_OPT_X509FMTDER = 18, - INDEX_OPT_FINGERPRINT = 19, - INDEX_OPT_PRINT_CERT = 20, - INDEX_OPT_SAVE_CERT = 21, - INDEX_OPT_SAVE_OCSP = 22, - INDEX_OPT_DH_BITS = 23, - INDEX_OPT_PRIORITY = 24, - INDEX_OPT_X509CAFILE = 25, - INDEX_OPT_X509CRLFILE = 26, - INDEX_OPT_PGPKEYFILE = 27, - INDEX_OPT_PGPKEYRING = 28, - INDEX_OPT_PGPCERTFILE = 29, - INDEX_OPT_X509KEYFILE = 30, - INDEX_OPT_X509CERTFILE = 31, - INDEX_OPT_PGPSUBKEY = 32, - INDEX_OPT_SRPUSERNAME = 33, - INDEX_OPT_SRPPASSWD = 34, - INDEX_OPT_PSKUSERNAME = 35, - INDEX_OPT_PSKKEY = 36, - INDEX_OPT_PORT = 37, - INDEX_OPT_INSECURE = 38, - INDEX_OPT_RANGES = 39, - INDEX_OPT_BENCHMARK_CIPHERS = 40, - INDEX_OPT_BENCHMARK_TLS_KX = 41, - INDEX_OPT_BENCHMARK_TLS_CIPHERS = 42, - INDEX_OPT_LIST = 43, - INDEX_OPT_PRIORITY_LIST = 44, - INDEX_OPT_NOTICKET = 45, - INDEX_OPT_SRTP_PROFILES = 46, - INDEX_OPT_ALPN = 47, - INDEX_OPT_HEARTBEAT = 48, - INDEX_OPT_RECORDSIZE = 49, - INDEX_OPT_DISABLE_SNI = 50, - INDEX_OPT_DISABLE_EXTENSIONS = 51, - INDEX_OPT_INLINE_COMMANDS = 52, - INDEX_OPT_INLINE_COMMANDS_PREFIX = 53, - INDEX_OPT_PROVIDER = 54, - INDEX_OPT_FIPS140_MODE = 55, - INDEX_OPT_VERSION = 56, - INDEX_OPT_HELP = 57, - INDEX_OPT_MORE_HELP = 58 -} teOptIndex; -/** count of all options for gnutls-cli */ -#define OPTION_CT 59 -/** gnutls-cli version */ -#define GNUTLS_CLI_VERSION "@VERSION@" -/** Full gnutls-cli version text */ -#define GNUTLS_CLI_FULL_VERSION "gnutls-cli @VERSION@" - -/** - * Interface defines for all options. Replace "n" with the UPPER_CASED - * option name (as in the teOptIndex enumeration above). - * e.g. HAVE_OPT(DEBUG) - */ -#define DESC(n) (gnutls_cliOptions.pOptDesc[INDEX_OPT_## n]) -/** 'true' if an option has been specified in any way */ -#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) -/** The string argument to an option. The argument type must be \"string\". */ -#define OPT_ARG(n) (DESC(n).optArg.argString) -/** Mask the option state revealing how an option was specified. - * It will be one and only one of \a OPTST_SET, \a OPTST_PRESET, - * \a OPTST_DEFINED, \a OPTST_RESET or zero. - */ -#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) -/** Count of option's occurrances *on the command line*. */ -#define COUNT_OPT(n) (DESC(n).optOccCt) -/** mask of \a OPTST_SET and \a OPTST_DEFINED. */ -#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) -/** 'true' if \a HAVE_OPT would yield 'false'. */ -#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) -/** 'true' if OPTST_DISABLED bit not set. */ -#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) -/** number of stacked option arguments. - * Valid only for stacked option arguments. */ -#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) -/** stacked argument vector. - * Valid only for stacked option arguments. */ -#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) -/** Reset an option. */ -#define CLEAR_OPT(n) STMTS( \ - DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ - if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \ - DESC(n).fOptState |= OPTST_DISABLED; \ - DESC(n).optCookie = NULL ) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Enumeration of gnutls-cli exit codes - */ -typedef enum { - GNUTLS_CLI_EXIT_SUCCESS = 0, - GNUTLS_CLI_EXIT_FAILURE = 1, - GNUTLS_CLI_EXIT_USAGE_ERROR = 64, - GNUTLS_CLI_EXIT_LIBOPTS_FAILURE = 70 -} gnutls_cli_exit_code_t; -/** - * Interface defines for specific options. - * @{ - */ -#define VALUE_OPT_DEBUG 'd' - -#define OPT_VALUE_DEBUG (DESC(DEBUG).optArg.argInt) -#define VALUE_OPT_VERBOSE 'V' -#define VALUE_OPT_TOFU 0x1001 -#define VALUE_OPT_STRICT_TOFU 0x1002 -#define VALUE_OPT_DANE 0x1003 -#define VALUE_OPT_LOCAL_DNS 0x1004 -#define VALUE_OPT_CA_VERIFICATION 0x1005 -#define VALUE_OPT_OCSP 0x1006 -#define VALUE_OPT_RESUME 'r' -#define VALUE_OPT_REHANDSHAKE 'e' -#define VALUE_OPT_SNI_HOSTNAME 0x1007 -#define VALUE_OPT_STARTTLS 's' -#define VALUE_OPT_APP_PROTO 0x1008 -#define VALUE_OPT_STARTTLS_PROTO 0x1009 -#define VALUE_OPT_UDP 'u' -#define VALUE_OPT_MTU 0x100A - -#define OPT_VALUE_MTU (DESC(MTU).optArg.argInt) -#define VALUE_OPT_CRLF 0x100B -#define VALUE_OPT_FASTOPEN 0x100C -#define VALUE_OPT_X509FMTDER 0x100D -#define VALUE_OPT_FINGERPRINT 'f' -#define VALUE_OPT_PRINT_CERT 0x100E -#define VALUE_OPT_SAVE_CERT 0x100F -#define VALUE_OPT_SAVE_OCSP 0x1010 -#define VALUE_OPT_DH_BITS 0x1011 - -#define OPT_VALUE_DH_BITS (DESC(DH_BITS).optArg.argInt) -#define VALUE_OPT_PRIORITY 0x1012 -#define VALUE_OPT_X509CAFILE 0x1013 -#define VALUE_OPT_X509CRLFILE 0x1014 -#define VALUE_OPT_PGPKEYFILE 0x1015 -#define VALUE_OPT_PGPKEYRING 0x1016 -#define VALUE_OPT_PGPCERTFILE 0x1017 -#define VALUE_OPT_X509KEYFILE 0x1018 -#define VALUE_OPT_X509CERTFILE 0x1019 -#define VALUE_OPT_PGPSUBKEY 0x101A -#define VALUE_OPT_SRPUSERNAME 0x101B -#define VALUE_OPT_SRPPASSWD 0x101C -#define VALUE_OPT_PSKUSERNAME 0x101D -#define VALUE_OPT_PSKKEY 0x101E -#define VALUE_OPT_PORT 'p' -#define VALUE_OPT_INSECURE 0x101F -#define VALUE_OPT_RANGES 0x1020 -#define VALUE_OPT_BENCHMARK_CIPHERS 0x1021 -#define VALUE_OPT_BENCHMARK_TLS_KX 0x1022 -#define VALUE_OPT_BENCHMARK_TLS_CIPHERS 0x1023 -#define VALUE_OPT_LIST 'l' -#define VALUE_OPT_PRIORITY_LIST 0x1024 -#define VALUE_OPT_NOTICKET 0x1025 -#define VALUE_OPT_SRTP_PROFILES 0x1026 -#define VALUE_OPT_ALPN 0x1027 -#define VALUE_OPT_HEARTBEAT 'b' -#define VALUE_OPT_RECORDSIZE 0x1028 - -#define OPT_VALUE_RECORDSIZE (DESC(RECORDSIZE).optArg.argInt) -#define VALUE_OPT_DISABLE_SNI 0x1029 -#define VALUE_OPT_DISABLE_EXTENSIONS 0x102A -#define VALUE_OPT_INLINE_COMMANDS 0x102B -#define VALUE_OPT_INLINE_COMMANDS_PREFIX 0x102C -#define VALUE_OPT_PROVIDER 0x102D -#define VALUE_OPT_FIPS140_MODE 0x102E -/** option flag (value) for help-value option */ -#define VALUE_OPT_HELP 'h' -/** option flag (value) for more-help-value option */ -#define VALUE_OPT_MORE_HELP '!' -/** option flag (value) for version-value option */ -#define VALUE_OPT_VERSION 'v' -/* - * Interface defines not associated with particular options - */ -#define ERRSKIP_OPTERR STMTS(gnutls_cliOptions.fOptSet &= ~OPTPROC_ERRSTOP) -#define ERRSTOP_OPTERR STMTS(gnutls_cliOptions.fOptSet |= OPTPROC_ERRSTOP) -#define RESTART_OPT(n) STMTS( \ - gnutls_cliOptions.curOptIdx = (n); \ - gnutls_cliOptions.pzCurOpt = NULL ) -#define START_OPT RESTART_OPT(1) -#define USAGE(c) (*gnutls_cliOptions.pUsageProc)(&gnutls_cliOptions, c) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * global exported definitions - */ -#include - - -/* * * * * * - * - * Declare the gnutls-cli option descriptor. - */ -extern tOptions gnutls_cliOptions; - -#if defined(ENABLE_NLS) -# ifndef _ -# include -# ifndef HAVE_GETTEXT - extern char * gettext(char const *); -# else -# include -# endif - -# ifndef ATTRIBUTE_FORMAT_ARG -# define ATTRIBUTE_FORMAT_ARG(_a) -# endif - -static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1); -static inline char* aoGetsText(char const* pz) { - if (pz == NULL) return NULL; - return (char*)gettext(pz); -} -# define _(s) aoGetsText(s) -# endif /* _() */ - -# define OPT_NO_XLAT_CFG_NAMES STMTS(gnutls_cliOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT_CFG;) -# define OPT_NO_XLAT_OPT_NAMES STMTS(gnutls_cliOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;) - -# define OPT_XLAT_CFG_NAMES STMTS(gnutls_cliOptions.fOptSet &= \ - ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);) -# define OPT_XLAT_OPT_NAMES STMTS(gnutls_cliOptions.fOptSet &= \ - ~OPTPROC_NXLAT_OPT;) - -#else /* ENABLE_NLS */ -# define OPT_NO_XLAT_CFG_NAMES -# define OPT_NO_XLAT_OPT_NAMES - -# define OPT_XLAT_CFG_NAMES -# define OPT_XLAT_OPT_NAMES - -# ifndef _ -# define _(_s) _s -# endif -#endif /* ENABLE_NLS */ - -#ifdef __cplusplus -} -#endif -#endif /* AUTOOPTS_CLI_ARGS_H_GUARD */ - -/* cli-args.h ends here */ diff --git a/src/cli-debug-args.c.bak b/src/cli-debug-args.c.bak deleted file mode 100644 index 855af2e180..0000000000 --- a/src/cli-debug-args.c.bak +++ /dev/null @@ -1,1023 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (cli-debug-args.c) - * - * It has been AutoGen-ed - * From the definitions cli-debug-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This source file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the gnutls-cli-debug author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The gnutls-cli-debug program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * gnutls-cli-debug is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * gnutls-cli-debug is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef __doxygen__ -#define OPTION_CODE_COMPILE 1 -#include "cli-debug-args.h" -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern FILE * option_usage_fp; -#define zCopyright (gnutls_cli_debug_opt_strs+0) -#define zLicenseDescrip (gnutls_cli_debug_opt_strs+297) - - -#ifndef NULL -# define NULL 0 -#endif - -/** - * static const strings for gnutls-cli-debug options - */ -static char const gnutls_cli_debug_opt_strs[2056] = -/* 0 */ "gnutls-cli-debug @VERSION@\n" - "Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n" - "This is free software. It is licensed for use, modification and\n" - "redistribution under the terms of the GNU General Public License,\n" - "version 3 or later \n\0" -/* 297 */ "gnutls-cli-debug is free software: you can redistribute it and/or modify it\n" - "under the terms of the GNU General Public License as published by the Free\n" - "Software Foundation, either version 3 of the License, or (at your option)\n" - "any later version.\n\n" - "gnutls-cli-debug is distributed in the hope that it will be useful, but\n" - "WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n" - "or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\n" - "for more details.\n\n" - "You should have received a copy of the GNU General Public License along\n" - "with this program. If not, see .\n\0" -/* 918 */ "Enable debugging\0" -/* 935 */ "DEBUG\0" -/* 941 */ "debug\0" -/* 947 */ "More verbose output\0" -/* 967 */ "VERBOSE\0" -/* 975 */ "verbose\0" -/* 983 */ "The port to connect to\0" -/* 1006 */ "PORT\0" -/* 1011 */ "port\0" -/* 1016 */ "an alias for the 'starttls-proto' option\0" -/* 1057 */ "app-proto\0" -/* 1067 */ "The application protocol to be used to obtain the server's certificate\n" - "(https, ftp, smtp, imap, ldap, xmpp, lmtp, pop3, nntp, sieve, postgres)\0" -/* 1210 */ "STARTTLS_PROTO\0" -/* 1225 */ "starttls-proto\0" -/* 1240 */ "display extended usage information and exit\0" -/* 1284 */ "help\0" -/* 1289 */ "extended usage information passed thru pager\0" -/* 1334 */ "more-help\0" -/* 1344 */ "output version information and exit\0" -/* 1380 */ "version\0" -/* 1388 */ "GNUTLS_CLI_DEBUG\0" -/* 1405 */ "gnutls-cli-debug - GnuTLS debug client\n" - "Usage: %s [ - [] | --[{=| }] ]... \n\0" -/* 1503 */ "@PACKAGE_BUGREPORT@\0" -/* 1523 */ "\n\0" -/* 1525 */ "TLS debug client. It sets up multiple TLS connections to a server and\n" - "queries its capabilities. It was created to assist in debugging GnuTLS,\n" - "but it might be useful to extract a TLS server's capabilities. It connects\n" - "to a TLS server, performs tests and print the server's capabilities. If\n" - "called with the `-v' parameter more checks will be performed. Can be used\n" - "to check for servers with special needs or bugs.\n\0" -/* 1943 */ "gnutls-cli-debug @VERSION@\0" -/* 1970 */ "Usage: gnutls-cli-debug [options] hostname\n" - "gnutls-cli --help for usage instructions.\n"; - -/** - * debug option description: - */ -/** Descriptive text for the debug option */ -#define DEBUG_DESC (gnutls_cli_debug_opt_strs+918) -/** Upper-cased name for the debug option */ -#define DEBUG_NAME (gnutls_cli_debug_opt_strs+935) -/** Name string for the debug option */ -#define DEBUG_name (gnutls_cli_debug_opt_strs+941) -/** Compiled in flag settings for the debug option */ -#define DEBUG_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * verbose option description: - */ -/** Descriptive text for the verbose option */ -#define VERBOSE_DESC (gnutls_cli_debug_opt_strs+947) -/** Upper-cased name for the verbose option */ -#define VERBOSE_NAME (gnutls_cli_debug_opt_strs+967) -/** Name string for the verbose option */ -#define VERBOSE_name (gnutls_cli_debug_opt_strs+975) -/** Compiled in flag settings for the verbose option */ -#define VERBOSE_FLAGS (OPTST_DISABLED) - -/** - * port option description: - */ -/** Descriptive text for the port option */ -#define PORT_DESC (gnutls_cli_debug_opt_strs+983) -/** Upper-cased name for the port option */ -#define PORT_NAME (gnutls_cli_debug_opt_strs+1006) -/** Name string for the port option */ -#define PORT_name (gnutls_cli_debug_opt_strs+1011) -/** Compiled in flag settings for the port option */ -#define PORT_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * app-proto option description: - */ -/** Descriptive text for the app-proto option */ -#define APP_PROTO_DESC (gnutls_cli_debug_opt_strs+1016) -#define APP_PROTO_NAME NULL -/** Unmodified name string for the app-proto option */ -#define APP_PROTO_name (gnutls_cli_debug_opt_strs+1057) -/** Compiled in flag settings for the app-proto option */ -#define APP_PROTO_FLAGS (STARTTLS_PROTO_FLAGS | OPTST_ALIAS) - -/** - * starttls-proto option description: - */ -/** Descriptive text for the starttls-proto option */ -#define STARTTLS_PROTO_DESC (gnutls_cli_debug_opt_strs+1067) -/** Upper-cased name for the starttls-proto option */ -#define STARTTLS_PROTO_NAME (gnutls_cli_debug_opt_strs+1210) -/** Name string for the starttls-proto option */ -#define STARTTLS_PROTO_name (gnutls_cli_debug_opt_strs+1225) -/** Compiled in flag settings for the starttls-proto option */ -#define STARTTLS_PROTO_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/* - * Help/More_Help/Version option descriptions: - */ -#define HELP_DESC (gnutls_cli_debug_opt_strs+1240) -#define HELP_name (gnutls_cli_debug_opt_strs+1284) -#ifdef HAVE_WORKING_FORK -#define MORE_HELP_DESC (gnutls_cli_debug_opt_strs+1289) -#define MORE_HELP_name (gnutls_cli_debug_opt_strs+1334) -#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -#define MORE_HELP_DESC HELP_DESC -#define MORE_HELP_name HELP_name -#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT) -#endif -#ifdef NO_OPTIONAL_OPT_ARGS -# define VER_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ - OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT) -#endif -#define VER_DESC (gnutls_cli_debug_opt_strs+1344) -#define VER_name (gnutls_cli_debug_opt_strs+1380) -/** - * Declare option callback procedures - */ -extern tOptProc - optionBooleanVal, optionNestedVal, optionNumericVal, - optionPagedUsage, optionPrintVersion, optionResetOpt, - optionStackArg, optionTimeDate, optionTimeVal, - optionUnstackArg, optionVendorOption; -static tOptProc - doOptApp_Proto, doOptDebug, doOptPort, doUsageOpt; -#define VER_PROC optionPrintVersion - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Define the gnutls-cli-debug Option Descriptions. - * This is an array of OPTION_CT entries, one for each - * option that the gnutls-cli-debug program responds to. - */ -static tOptDesc optDesc[OPTION_CT] = { - { /* entry idx, value */ 0, VALUE_OPT_DEBUG, - /* equiv idx, value */ 0, VALUE_OPT_DEBUG, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DEBUG_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --debug */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDebug, - /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 1, VALUE_OPT_VERBOSE, - /* equiv idx, value */ 1, VALUE_OPT_VERBOSE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, NOLIMIT, 0, - /* opt state flags */ VERBOSE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verbose */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERBOSE_DESC, VERBOSE_NAME, VERBOSE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 2, VALUE_OPT_PORT, - /* equiv idx, value */ 2, VALUE_OPT_PORT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PORT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --port */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptPort, - /* desc, NAME, name */ PORT_DESC, PORT_NAME, PORT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 3, VALUE_OPT_APP_PROTO, - /* equiv idx, value */ 3, VALUE_OPT_APP_PROTO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ APP_PROTO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --app-proto */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptApp_Proto, - /* desc, NAME, name */ APP_PROTO_DESC, APP_PROTO_NAME, APP_PROTO_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 4, VALUE_OPT_STARTTLS_PROTO, - /* equiv idx, value */ 4, VALUE_OPT_STARTTLS_PROTO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ STARTTLS_PROTO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --starttls-proto */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ STARTTLS_PROTO_DESC, STARTTLS_PROTO_NAME, STARTTLS_PROTO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VER_FLAGS, AOUSE_VERSION, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ VER_PROC, - /* desc, NAME, name */ VER_DESC, NULL, VER_name, - /* disablement strs */ NULL, NULL }, - - - - { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doUsageOpt, - /* desc, NAME, name */ HELP_DESC, NULL, HELP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionPagedUsage, - /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name, - /* disablement strs */ NULL, NULL } -}; - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** Reference to the upper cased version of gnutls-cli-debug. */ -#define zPROGNAME (gnutls_cli_debug_opt_strs+1388) -/** Reference to the title line for gnutls-cli-debug usage. */ -#define zUsageTitle (gnutls_cli_debug_opt_strs+1405) -/** There is no gnutls-cli-debug configuration file. */ -#define zRcName NULL -/** There are no directories to search for gnutls-cli-debug config files. */ -#define apzHomeList NULL -/** The gnutls-cli-debug program bug email address. */ -#define zBugsAddr (gnutls_cli_debug_opt_strs+1503) -/** Clarification/explanation of what gnutls-cli-debug does. */ -#define zExplain (gnutls_cli_debug_opt_strs+1523) -/** Extra detail explaining what gnutls-cli-debug does. */ -#define zDetail (gnutls_cli_debug_opt_strs+1525) -/** The full version string for gnutls-cli-debug. */ -#define zFullVersion (gnutls_cli_debug_opt_strs+1943) -/* extracted from optcode.tlib near line 364 */ - -#if defined(ENABLE_NLS) -# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT - static tOptionXlateProc translate_option_strings; -#else -# define OPTPROC_BASE OPTPROC_NONE -# define translate_option_strings NULL -#endif /* ENABLE_NLS */ - -#define gnutls_cli_debug_full_usage (NULL) -#define gnutls_cli_debug_short_usage (gnutls_cli_debug_opt_strs+1970) - -#endif /* not defined __doxygen__ */ - -/* - * Create the static procedure(s) declared above. - */ -/** - * The callout function that invokes the optionUsage function. - * - * @param[in] opts the AutoOpts option description structure - * @param[in] od the descriptor for the "help" (usage) option. - * @noreturn - */ -static void -doUsageOpt(tOptions * opts, tOptDesc * od) -{ - int ex_code; - ex_code = GNUTLS_CLI_DEBUG_EXIT_SUCCESS; - optionUsage(&gnutls_cli_debugOptions, ex_code); - /* NOTREACHED */ - exit(GNUTLS_CLI_DEBUG_EXIT_FAILURE); - (void)opts; - (void)od; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the debug option. - * Specifies the debug level. - * @param[in] pOptions the gnutls-cli-debug options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 9999 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the port option. - * - * @param[in] pOptions the gnutls-cli-debug options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptPort(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 65536 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the app-proto option. - * - * @param[in] pOptions the gnutls-cli-debug options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptApp_Proto(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_STARTTLS_PROTO); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(GNUTLS_CLI_DEBUG_EXIT_USAGE_ERROR); - -} -/* extracted from optmain.tlib near line 1250 */ - -/** - * The directory containing the data associated with gnutls-cli-debug. - */ -#ifndef PKGDATADIR -# define PKGDATADIR "" -#endif - -/** - * Information about the person or institution that packaged gnutls-cli-debug - * for the current distribution. - */ -#ifndef WITH_PACKAGER -# define gnutls_cli_debug_packager_info NULL -#else -/** Packager information for gnutls-cli-debug. */ -static char const gnutls_cli_debug_packager_info[] = - "Packaged by " WITH_PACKAGER - -# ifdef WITH_PACKAGER_VERSION - " ("WITH_PACKAGER_VERSION")" -# endif - -# ifdef WITH_PACKAGER_BUG_REPORTS - "\nReport gnutls_cli_debug bugs to " WITH_PACKAGER_BUG_REPORTS -# endif - "\n"; -#endif -#ifndef __doxygen__ - -#endif /* __doxygen__ */ -/** - * The option definitions for gnutls-cli-debug. The one structure that - * binds them all. - */ -tOptions gnutls_cli_debugOptions = { - OPTIONS_STRUCT_VERSION, - 0, NULL, /* original argc + argv */ - ( OPTPROC_BASE - + OPTPROC_ERRSTOP - + OPTPROC_SHORTOPT - + OPTPROC_LONGOPT - + OPTPROC_NO_REQ_OPT - + OPTPROC_ARGS_REQ - + OPTPROC_REORDER - + OPTPROC_GNUUSAGE - + OPTPROC_MISUSE ), - 0, NULL, /* current option index, current option */ - NULL, NULL, zPROGNAME, - zRcName, zCopyright, zLicenseDescrip, - zFullVersion, apzHomeList, zUsageTitle, - zExplain, zDetail, optDesc, - zBugsAddr, /* address to send bugs to */ - NULL, NULL, /* extensions/saved state */ - optionUsage, /* usage procedure */ - translate_option_strings, /* translation procedure */ - /* - * Indexes to special options - */ - { INDEX_OPT_MORE_HELP, /* more-help option index */ - NO_EQUIVALENT, /* save option index */ - NO_EQUIVALENT, /* '-#' option index */ - NO_EQUIVALENT /* index of default opt */ - }, - 8 /* full option count */, 5 /* user option count */, - gnutls_cli_debug_full_usage, gnutls_cli_debug_short_usage, - NULL, NULL, - PKGDATADIR, gnutls_cli_debug_packager_info -}; - -#if ENABLE_NLS -/** - * This code is designed to translate translatable option text for the - * gnutls-cli-debug program. These translations happen upon entry - * to optionProcess(). - */ -#include -#include -#include -#include -#ifdef HAVE_DCGETTEXT -# include -#endif -#include - -static char * AO_gettext(char const * pz); -static void coerce_it(void ** s); - -/** - * AutoGen specific wrapper function for gettext. It relies on the macro _() - * to convert from English to the target language, then strdup-duplicates the - * result string. It tries the "libopts" domain first, then whatever has been - * set via the \a textdomain(3) call. - * - * @param[in] pz the input text used as a lookup key. - * @returns the translated text (if there is one), - * or the original text (if not). - */ -static char * -AO_gettext(char const * pz) -{ - char * res; - if (pz == NULL) - return NULL; -#ifdef HAVE_DCGETTEXT - /* - * While processing the option_xlateable_txt data, try to use the - * "libopts" domain. Once we switch to the option descriptor data, - * do *not* use that domain. - */ - if (option_xlateable_txt.field_ct != 0) { - res = dgettext("libopts", pz); - if (res == pz) - res = (char *)VOIDP(_(pz)); - } else - res = (char *)VOIDP(_(pz)); -#else - res = (char *)VOIDP(_(pz)); -#endif - if (res == pz) - return res; - res = strdup(res); - if (res == NULL) { - fputs(_("No memory for duping translated strings\n"), stderr); - exit(GNUTLS_CLI_DEBUG_EXIT_FAILURE); - } - return res; -} - -/** - * All the pointers we use are marked "* const", but they are stored in - * writable memory. Coerce the mutability and set the pointer. - */ -static void coerce_it(void ** s) { *s = AO_gettext(*s); -} - -/** - * Translate all the translatable strings in the gnutls_cli_debugOptions - * structure defined above. This is done only once. - */ -static void -translate_option_strings(void) -{ - tOptions * const opts = &gnutls_cli_debugOptions; - - /* - * Guard against re-translation. It won't work. The strings will have - * been changed by the first pass through this code. One shot only. - */ - if (option_xlateable_txt.field_ct != 0) { - /* - * Do the translations. The first pointer follows the field count - * field. The field count field is the size of a pointer. - */ - char ** ppz = (char**)VOIDP(&(option_xlateable_txt)); - int ix = option_xlateable_txt.field_ct; - - do { - ppz++; /* skip over field_ct */ - *ppz = AO_gettext(*ppz); - } while (--ix > 0); - /* prevent re-translation and disable "libopts" domain lookup */ - option_xlateable_txt.field_ct = 0; - - coerce_it(VOIDP(&(opts->pzCopyright))); - coerce_it(VOIDP(&(opts->pzCopyNotice))); - coerce_it(VOIDP(&(opts->pzFullVersion))); - coerce_it(VOIDP(&(opts->pzUsageTitle))); - coerce_it(VOIDP(&(opts->pzExplain))); - coerce_it(VOIDP(&(opts->pzDetail))); - { - tOptDesc * od = opts->pOptDesc; - for (ix = opts->optCt; ix > 0; ix--, od++) - coerce_it(VOIDP(&(od->pzText))); - } - } -} -#endif /* ENABLE_NLS */ - -#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT -/** I18N function strictly for xgettext. Do not compile. */ -static void bogus_function(void) { - /* TRANSLATORS: - - The following dummy function was crated solely so that xgettext can - extract the correct strings. These strings are actually referenced - by a field name in the gnutls_cli_debugOptions structure noted in the - comments below. The literal text is defined in gnutls_cli_debug_opt_strs. - - NOTE: the strings below are segmented with respect to the source string - gnutls_cli_debug_opt_strs. The strings above are handed off for translation - at run time a paragraph at a time. Consequently, they are presented here - for translation a paragraph at a time. - - ALSO: often the description for an option will reference another option - by name. These are set off with apostrophe quotes (I hope). Do not - translate option names. - */ - /* referenced via gnutls_cli_debugOptions.pzCopyright */ - puts(_("gnutls-cli-debug @VERSION@\n\ -Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n\ -This is free software. It is licensed for use, modification and\n\ -redistribution under the terms of the GNU General Public License,\n\ -version 3 or later \n")); - - /* referenced via gnutls_cli_debugOptions.pzCopyNotice */ - puts(_("gnutls-cli-debug is free software: you can redistribute it and/or modify it\n\ -under the terms of the GNU General Public License as published by the Free\n\ -Software Foundation, either version 3 of the License, or (at your option)\n\ -any later version.\n\n")); - puts(_("gnutls-cli-debug is distributed in the hope that it will be useful, but\n\ -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n\ -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\n\ -for more details.\n\n")); - puts(_("You should have received a copy of the GNU General Public License along\n\ -with this program. If not, see .\n")); - - /* referenced via gnutls_cli_debugOptions.pOptDesc->pzText */ - puts(_("Enable debugging")); - - /* referenced via gnutls_cli_debugOptions.pOptDesc->pzText */ - puts(_("More verbose output")); - - /* referenced via gnutls_cli_debugOptions.pOptDesc->pzText */ - puts(_("The port to connect to")); - - /* referenced via gnutls_cli_debugOptions.pOptDesc->pzText */ - puts(_("an alias for the 'starttls-proto' option")); - - /* referenced via gnutls_cli_debugOptions.pOptDesc->pzText */ - puts(_("The application protocol to be used to obtain the server's certificate\n\ -(https, ftp, smtp, imap, ldap, xmpp, lmtp, pop3, nntp, sieve, postgres)")); - - /* referenced via gnutls_cli_debugOptions.pOptDesc->pzText */ - puts(_("display extended usage information and exit")); - - /* referenced via gnutls_cli_debugOptions.pOptDesc->pzText */ - puts(_("extended usage information passed thru pager")); - - /* referenced via gnutls_cli_debugOptions.pOptDesc->pzText */ - puts(_("output version information and exit")); - - /* referenced via gnutls_cli_debugOptions.pzUsageTitle */ - puts(_("gnutls-cli-debug - GnuTLS debug client\n\ -Usage: %s [ - [] | --[{=| }] ]... \n")); - - /* referenced via gnutls_cli_debugOptions.pzExplain */ - puts(_("\n")); - - /* referenced via gnutls_cli_debugOptions.pzDetail */ - puts(_("TLS debug client. It sets up multiple TLS connections to a server and\n\ -queries its capabilities. It was created to assist in debugging GnuTLS,\n\ -but it might be useful to extract a TLS server's capabilities. It connects\n\ -to a TLS server, performs tests and print the server's capabilities. If\n\ -called with the `-v' parameter more checks will be performed. Can be used\n\ -to check for servers with special needs or bugs.\n")); - - /* referenced via gnutls_cli_debugOptions.pzFullVersion */ - puts(_("gnutls-cli-debug @VERSION@")); - - /* referenced via gnutls_cli_debugOptions.pzFullUsage */ - puts(_("<<>>")); - - /* referenced via gnutls_cli_debugOptions.pzShortUsage */ - puts(_("Usage: gnutls-cli-debug [options] hostname\n\ -gnutls-cli --help for usage instructions.\n")); - /* LIBOPTS-MESSAGES: */ -#line 67 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" - puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" - puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" - puts(_("Automated Options Processing Error!\n" - "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" - puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" - puts(_("\tThis is less than the minimum library version: ")); -#line 121 "../version.c" - puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" - puts(_("(AutoOpts bug): %s.\n")); -#line 90 "../reset.c" - puts(_("optionResetOpt() called, but reset-option not configured")); -#line 295 "../usage.c" - puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" - puts(_("optionProcess() was called with invalid data")); -#line 751 "../usage.c" - puts(_("invalid argument type specified")); -#line 598 "../find.c" - puts(_("defaulted to option with optional arg")); -#line 76 "../alias.c" - puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" - puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" - puts(_(" The following options match:\n")); -#line 293 "../find.c" - puts(_("%s: ambiguous option name: %s (matches %d options)\n")); -#line 161 "../check.c" - puts(_("%s: Command line arguments required\n")); -#line 43 "../alias.c" - puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" - puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" - puts(_("interprocess pipe")); -#line 168 "../version.c" - puts(_("error: version option argument '%c' invalid. Use:\n" - "\t'v' - version only\n" - "\t'c' - version and copyright\n" - "\t'n' - version and full copyright notice\n")); -#line 58 "../check.c" - puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 38 "../alias.c" - puts(_("-equivalence")); -#line 469 "../find.c" - puts(_("%s: illegal option -- %c\n")); -#line 110 "../reset.c" - puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 118 "../reset.c" - puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" - puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 750 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 1084 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" - puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" - puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" - puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" - "\t'%s' and '%s'.")); -#line 94 "../check.c" - puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" - puts(_("%s: The '%s' option cannot have an argument.\n")); -#line 151 "../check.c" - puts(_("%s: Command line arguments are not allowed.\n")); -#line 536 "../save.c" - puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" - puts(_("%s error: '%s' does not match any %s keywords.\n")); -#line 93 "../reset.c" - puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 239 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 143 "../restore.c" - puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" - puts(_("'%s' is not a command line option.\n")); -#line 113 "../time.c" - puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); -#line 50 "../time.c" - puts(_("%s error: '%s' is not a recognizable time duration.\n")); -#line 92 "../check.c" - puts(_("%s error: The %s option must appear %d times.\n")); -#line 165 "../numeric.c" - puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" - puts(_("%s error: %s exceeds %s keyword count\n")); -#line 333 "../usage.c" - puts(_("Try '%s %s' for more information.\n")); -#line 45 "../alias.c" - puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" - puts(_("standard output")); -#line 943 "../makeshell.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard output")); -#line 418 "../usage.c" - puts(_("standard output")); -#line 628 "../usage.c" - puts(_("standard output")); -#line 175 "../version.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard error")); -#line 418 "../usage.c" - puts(_("standard error")); -#line 628 "../usage.c" - puts(_("standard error")); -#line 175 "../version.c" - puts(_("standard error")); -#line 208 "../makeshell.c" - puts(_("write")); -#line 943 "../makeshell.c" - puts(_("write")); -#line 276 "../usage.c" - puts(_("write")); -#line 417 "../usage.c" - puts(_("write")); -#line 627 "../usage.c" - puts(_("write")); -#line 174 "../version.c" - puts(_("write")); -#line 60 "../numeric.c" - puts(_("%s error: %s option value %ld is out of range.\n")); -#line 44 "../check.c" - puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 238 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 257 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 535 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); - /* END-LIBOPTS-MESSAGES */ - - /* USAGE-TEXT: */ -#line 876 "../usage.c" - puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1151 "../usage.c" - puts(_("Version, usage and configuration options:")); -#line 927 "../usage.c" - puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 840 "../usage.c" - puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1120 "../usage.c" - puts(_(" --- %-14s %s\n")); -#line 1118 "../usage.c" - puts(_("This option has been disabled")); -#line 867 "../usage.c" - puts(_("\t\t\t\t- enabled by default\n")); -#line 40 "../alias.c" - puts(_("%s error: only ")); -#line 1197 "../usage.c" - puts(_(" - examining environment variables named %s_*\n")); -#line 168 "../file.c" - puts(_("\t\t\t\t- file must not pre-exist\n")); -#line 172 "../file.c" - puts(_("\t\t\t\t- file must pre-exist\n")); -#line 383 "../usage.c" - puts(_("Options are specified by doubled hyphens and their name or by a single\n" - "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" - puts(_("\n" - "= = = = = = = =\n\n" - "This incarnation of genshell will produce\n" - "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" - puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 900 "../usage.c" - puts(_("\t\t\t\t- is a set membership option\n")); -#line 921 "../usage.c" - puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 385 "../usage.c" - puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 907 "../usage.c" - puts(_("\t\t\t\t- may appear multiple times\n")); -#line 894 "../usage.c" - puts(_("\t\t\t\t- may not be preset\n")); -#line 1312 "../usage.c" - puts(_(" Arg Option-Name Description\n")); -#line 1248 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1306 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1307 "../usage.c" - puts(_(" %3s %s")); -#line 1313 "../usage.c" - puts(_(" %3s %s")); -#line 390 "../usage.c" - puts(_("The '-#' option may omit the hash char\n")); -#line 386 "../usage.c" - puts(_("All arguments are named options.\n")); -#line 974 "../usage.c" - puts(_(" - reading file %s")); -#line 412 "../usage.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 100 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 129 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 906 "../usage.c" - puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 947 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 1195 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 685 "../usage.c" - puts(_("prohibits these options:\n")); -#line 680 "../usage.c" - puts(_("prohibits the option '%s'\n")); -#line 81 "../numeric.c" - puts(_("%s%ld to %ld")); -#line 79 "../numeric.c" - puts(_("%sgreater than or equal to %ld")); -#line 75 "../numeric.c" - puts(_("%s%ld exactly")); -#line 68 "../numeric.c" - puts(_("%sit must lie in one of the ranges:\n")); -#line 68 "../numeric.c" - puts(_("%sit must be in the range:\n")); -#line 88 "../numeric.c" - puts(_(", or\n")); -#line 66 "../numeric.c" - puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); -#line 77 "../numeric.c" - puts(_("%sless than or equal to %ld")); -#line 393 "../usage.c" - puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 655 "../usage.c" - puts(_("requires the option '%s'\n")); -#line 658 "../usage.c" - puts(_("requires these options:\n")); -#line 1324 "../usage.c" - puts(_(" Arg Option-Name Req? Description\n")); -#line 1318 "../usage.c" - puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" - puts(_("or you may use a numeric representation. Preceding these with a '!'\n" - "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" - "will set them all. Multiple entries may be passed as an option\n" - "argument list.\n")); -#line 913 "../usage.c" - puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" - puts(_("The valid \"%s\" option keywords are:\n")); -#line 1155 "../usage.c" - puts(_("The next option supports vendor supported extra options:")); -#line 776 "../usage.c" - puts(_("These additional options are:")); - /* END-USAGE-TEXT */ -} -#endif /* uncompilable code */ -#ifdef __cplusplus -} -#endif -/* cli-debug-args.c ends here */ diff --git a/src/cli-debug-args.def b/src/cli-debug-args.def index 4524b0189c..21c6a42e30 100644 --- a/src/cli-debug-args.def +++ b/src/cli-debug-args.def @@ -9,7 +9,7 @@ detail = "TLS debug client. It sets up multiple TLS connections to a server and queries its capabilities. It was created to assist in debugging GnuTLS, but it might be useful to extract a TLS server's capabilities. It connects to a TLS server, performs tests and print the server's -capabilities. If called with the `-v' parameter more checks will be performed. +capabilities. If called with the `-V' parameter more checks will be performed. Can be used to check for servers with special needs or bugs."; reorder-args; argument; diff --git a/src/cli-debug-args.h.bak b/src/cli-debug-args.h.bak deleted file mode 100644 index 10cb4036a4..0000000000 --- a/src/cli-debug-args.h.bak +++ /dev/null @@ -1,223 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (cli-debug-args.h) - * - * It has been AutoGen-ed - * From the definitions cli-debug-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This header file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the gnutls-cli-debug author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The gnutls-cli-debug program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * gnutls-cli-debug is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * gnutls-cli-debug is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -/** - * This file contains the programmatic interface to the Automated - * Options generated for the gnutls-cli-debug program. - * These macros are documented in the AutoGen info file in the - * "AutoOpts" chapter. Please refer to that doc for usage help. - */ -#ifndef AUTOOPTS_CLI_DEBUG_ARGS_H_GUARD -#define AUTOOPTS_CLI_DEBUG_ARGS_H_GUARD 1 -#include "config.h" -#include - -/** - * Ensure that the library used for compiling this generated header is at - * least as new as the version current when the header template was released - * (not counting patch version increments). Also ensure that the oldest - * tolerable version is at least as old as what was current when the header - * template was released. - */ -#define AO_TEMPLATE_VERSION 167937 -#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ - || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) -# error option template version mismatches autoopts/options.h header - Choke Me. -#endif - -/** - * Enumeration of each option type for gnutls-cli-debug - */ -typedef enum { - INDEX_OPT_DEBUG = 0, - INDEX_OPT_VERBOSE = 1, - INDEX_OPT_PORT = 2, - INDEX_OPT_APP_PROTO = 3, - INDEX_OPT_STARTTLS_PROTO = 4, - INDEX_OPT_VERSION = 5, - INDEX_OPT_HELP = 6, - INDEX_OPT_MORE_HELP = 7 -} teOptIndex; -/** count of all options for gnutls-cli-debug */ -#define OPTION_CT 8 -/** gnutls-cli-debug version */ -#define GNUTLS_CLI_DEBUG_VERSION "@VERSION@" -/** Full gnutls-cli-debug version text */ -#define GNUTLS_CLI_DEBUG_FULL_VERSION "gnutls-cli-debug @VERSION@" - -/** - * Interface defines for all options. Replace "n" with the UPPER_CASED - * option name (as in the teOptIndex enumeration above). - * e.g. HAVE_OPT(DEBUG) - */ -#define DESC(n) (gnutls_cli_debugOptions.pOptDesc[INDEX_OPT_## n]) -/** 'true' if an option has been specified in any way */ -#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) -/** The string argument to an option. The argument type must be \"string\". */ -#define OPT_ARG(n) (DESC(n).optArg.argString) -/** Mask the option state revealing how an option was specified. - * It will be one and only one of \a OPTST_SET, \a OPTST_PRESET, - * \a OPTST_DEFINED, \a OPTST_RESET or zero. - */ -#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) -/** Count of option's occurrances *on the command line*. */ -#define COUNT_OPT(n) (DESC(n).optOccCt) -/** mask of \a OPTST_SET and \a OPTST_DEFINED. */ -#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) -/** 'true' if \a HAVE_OPT would yield 'false'. */ -#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) -/** 'true' if OPTST_DISABLED bit not set. */ -#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) -/** number of stacked option arguments. - * Valid only for stacked option arguments. */ -#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) -/** stacked argument vector. - * Valid only for stacked option arguments. */ -#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) -/** Reset an option. */ -#define CLEAR_OPT(n) STMTS( \ - DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ - if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \ - DESC(n).fOptState |= OPTST_DISABLED; \ - DESC(n).optCookie = NULL ) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Enumeration of gnutls-cli-debug exit codes - */ -typedef enum { - GNUTLS_CLI_DEBUG_EXIT_SUCCESS = 0, - GNUTLS_CLI_DEBUG_EXIT_FAILURE = 1, - GNUTLS_CLI_DEBUG_EXIT_USAGE_ERROR = 64, - GNUTLS_CLI_DEBUG_EXIT_LIBOPTS_FAILURE = 70 -} gnutls_cli_debug_exit_code_t; -/** - * Interface defines for specific options. - * @{ - */ -#define VALUE_OPT_DEBUG 'd' - -#define OPT_VALUE_DEBUG (DESC(DEBUG).optArg.argInt) -#define VALUE_OPT_VERBOSE 'V' -#define VALUE_OPT_PORT 'p' - -#define OPT_VALUE_PORT (DESC(PORT).optArg.argInt) -#define VALUE_OPT_APP_PROTO 0x1001 -#define VALUE_OPT_STARTTLS_PROTO 0x1002 -/** option flag (value) for help-value option */ -#define VALUE_OPT_HELP 'h' -/** option flag (value) for more-help-value option */ -#define VALUE_OPT_MORE_HELP '!' -/** option flag (value) for version-value option */ -#define VALUE_OPT_VERSION 'v' -/* - * Interface defines not associated with particular options - */ -#define ERRSKIP_OPTERR STMTS(gnutls_cli_debugOptions.fOptSet &= ~OPTPROC_ERRSTOP) -#define ERRSTOP_OPTERR STMTS(gnutls_cli_debugOptions.fOptSet |= OPTPROC_ERRSTOP) -#define RESTART_OPT(n) STMTS( \ - gnutls_cli_debugOptions.curOptIdx = (n); \ - gnutls_cli_debugOptions.pzCurOpt = NULL ) -#define START_OPT RESTART_OPT(1) -#define USAGE(c) (*gnutls_cli_debugOptions.pUsageProc)(&gnutls_cli_debugOptions, c) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * global exported definitions - */ -#include - - -/* * * * * * - * - * Declare the gnutls-cli-debug option descriptor. - */ -extern tOptions gnutls_cli_debugOptions; - -#if defined(ENABLE_NLS) -# ifndef _ -# include -# ifndef HAVE_GETTEXT - extern char * gettext(char const *); -# else -# include -# endif - -# ifndef ATTRIBUTE_FORMAT_ARG -# define ATTRIBUTE_FORMAT_ARG(_a) -# endif - -static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1); -static inline char* aoGetsText(char const* pz) { - if (pz == NULL) return NULL; - return (char*)gettext(pz); -} -# define _(s) aoGetsText(s) -# endif /* _() */ - -# define OPT_NO_XLAT_CFG_NAMES STMTS(gnutls_cli_debugOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT_CFG;) -# define OPT_NO_XLAT_OPT_NAMES STMTS(gnutls_cli_debugOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;) - -# define OPT_XLAT_CFG_NAMES STMTS(gnutls_cli_debugOptions.fOptSet &= \ - ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);) -# define OPT_XLAT_OPT_NAMES STMTS(gnutls_cli_debugOptions.fOptSet &= \ - ~OPTPROC_NXLAT_OPT;) - -#else /* ENABLE_NLS */ -# define OPT_NO_XLAT_CFG_NAMES -# define OPT_NO_XLAT_OPT_NAMES - -# define OPT_XLAT_CFG_NAMES -# define OPT_XLAT_OPT_NAMES - -# ifndef _ -# define _(_s) _s -# endif -#endif /* ENABLE_NLS */ - -#ifdef __cplusplus -} -#endif -#endif /* AUTOOPTS_CLI_DEBUG_ARGS_H_GUARD */ - -/* cli-debug-args.h ends here */ diff --git a/src/cli-debug.c b/src/cli-debug.c index 2b0f88e2e3..ece03a2729 100644 --- a/src/cli-debug.c +++ b/src/cli-debug.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2000-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * This file is part of GnuTLS. * @@ -15,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -58,10 +59,6 @@ gnutls_certificate_credentials_t xcred; unsigned int verbose = 0; -extern int tls1_ok; -extern int tls1_1_ok; -extern int tls1_2_ok; -extern int ssl3_ok; extern const char *ext_text; static void tls_log_func(int level, const char *str) @@ -78,10 +75,20 @@ typedef struct { const char *fail_str; const char *unsure_str; unsigned https_only; + unsigned fatal_failure; } TLS_TEST; static const TLS_TEST tls_tests[] = { + {"whether the server accepts default record size (512 bytes)", + test_send_record, "yes", "no", "dunno"}, + {"whether %ALLOW_SMALL_RECORDS is required", + test_send_record_with_allow_small_records, "yes", "no", "dunno"}, +#ifdef ENABLE_SSL3 {"for SSL 3.0 (RFC6101) support", test_ssl3, "yes", "no", "dunno"}, + {"for SSL 3.0 with extensions", test_ssl3_with_extensions, "yes", "no", "dunno"}, + {"for SSL 3.0 with cipher suites not in SSL 3.0 spec", + test_ssl3_unknown_ciphersuites, "yes", "no", "dunno"}, +#endif /* The following tests will disable TLS 1.x if the server is * buggy */ {"whether we need to disable TLS 1.2", test_tls_disable2, "no", @@ -90,9 +97,11 @@ static const TLS_TEST tls_tests[] = { "yes", "dunno"}, {"whether we need to disable TLS 1.0", test_tls_disable0, "no", "yes", "dunno"}, - {"whether \%NO_EXTENSIONS is required", test_no_extensions, "no", "yes", + /* The following test will disable extensions if the server + * is buggy */ + {"whether %NO_EXTENSIONS is required", test_no_extensions, "no", "yes", "dunno"}, - {"whether \%COMPAT is required", test_record_padding, "no", "yes", + {"whether %COMPAT is required", test_record_padding, "no", "yes", "dunno"}, {"for TLS 1.0 (RFC2246) support", test_tls1, "yes", "no", "dunno"}, {"for TLS 1.0 (RFC2246) support with TLS 1.0 record version", test_tls1_nossl3, "yes", "no", "dunno"}, @@ -101,7 +110,10 @@ static const TLS_TEST tls_tests[] = { "failed", "SSL 3.0"}, {"for TLS 1.2 (RFC5246) support", test_tls1_2, "yes", "no", "dunno"}, - {"fallback from TLS 1.6 to", test_tls1_6_fallback, NULL, + {"for TLS 1.3 (RFC8446) support", test_tls1_3, "yes", "no", "dunno"}, + {"for known TLS or SSL protocols support", test_known_protocols, "yes", "no", "dunno", 0, 1}, + + {"TLS1.2 neg fallback from TLS 1.6 to", test_tls1_6_fallback, NULL, "failed (server requires fallback dance)", "dunno"}, {"for inappropriate fallback (RFC7507) support", test_rfc7507, "yes", "no", "dunno"}, {"for HTTPS server name", test_server, NULL, "failed", "not checked", 1}, @@ -140,40 +152,51 @@ static const TLS_TEST tls_tests[] = { {"anonymous Diffie-Hellman group info", test_dhe_group, NULL, "N/A", "N/A"}, #endif + {"for RSA key exchange support", test_rsa, "yes", + "no", + "dunno"}, {"for ephemeral Diffie-Hellman support", test_dhe, "yes", "no", "dunno"}, + {"for RFC7919 Diffie-Hellman support", test_rfc7919, "yes", "no", + "dunno"}, {"ephemeral Diffie-Hellman group info", test_dhe_group, NULL, "N/A", "N/A"}, {"for ephemeral EC Diffie-Hellman support", test_ecdhe, "yes", "no", "dunno"}, +#ifdef ENABLE_GOST + {"for VKO GOST-2012 (draft-smyshlyaev-tls12-gost-suites) support", test_vko_gost_12, "yes", "no", "dunno"}, +#endif {"for curve SECP256r1 (RFC4492)", test_ecdhe_secp256r1, "yes", "no", "dunno"}, {"for curve SECP384r1 (RFC4492)", test_ecdhe_secp384r1, "yes", "no", "dunno"}, {"for curve SECP521r1 (RFC4492)", test_ecdhe_secp521r1, "yes", "no", "dunno"}, - {"for curve X25519 (draft-ietf-tls-rfc4492bis-07)", test_ecdhe_x25519, "yes", "no", "dunno"}, - {"for AES-128-GCM cipher (RFC5288) support", test_aes_gcm, "yes", "no", + {"for curve X25519 (RFC8422)", test_ecdhe_x25519, "yes", "no", "dunno"}, + {"for AES-GCM cipher (RFC5288) support", test_aes_gcm, "yes", "no", "dunno"}, - {"for AES-128-CCM cipher (RFC6655) support", test_aes_ccm, "yes", "no", + {"for AES-CCM cipher (RFC6655) support", test_aes_ccm, "yes", "no", "dunno"}, - {"for AES-128-CCM-8 cipher (RFC6655) support", test_aes_ccm_8, "yes", "no", + {"for AES-CCM-8 cipher (RFC6655) support", test_aes_ccm_8, "yes", "no", "dunno"}, - {"for AES-128-CBC cipher (RFC3268) support", test_aes, "yes", "no", + {"for AES-CBC cipher (RFC3268) support", test_aes, "yes", "no", "dunno"}, - {"for CAMELLIA-128-GCM cipher (RFC6367) support", test_camellia_gcm, "yes", "no", + {"for CAMELLIA-GCM cipher (RFC6367) support", test_camellia_gcm, "yes", "no", "dunno"}, - {"for CAMELLIA-128-CBC cipher (RFC5932) support", test_camellia_cbc, "yes", "no", + {"for CAMELLIA-CBC cipher (RFC5932) support", test_camellia_cbc, "yes", "no", "dunno"}, {"for 3DES-CBC cipher (RFC2246) support", test_3des, "yes", "no", "dunno"}, {"for ARCFOUR 128 cipher (RFC2246) support", test_arcfour, "yes", "no", "dunno"}, {"for CHACHA20-POLY1305 cipher (RFC7905) support", test_chacha20, "yes", "no", "dunno"}, +#ifdef ENABLE_GOST + {"for GOST28147-CNT cipher (draft-smyshlyaev-tls12-gost-suites) support", test_gost_cnt, "yes", "no", + "dunno"}, +#endif {"for MD5 MAC support", test_md5, "yes", "no", "dunno"}, {"for SHA1 MAC support", test_sha, "yes", "no", "dunno"}, {"for SHA256 MAC support", test_sha256, "yes", "no", "dunno"}, -#ifdef HAVE_LIBZ - {"for ZLIB compression support", test_zlib, "yes", - "no", "dunno"}, +#ifdef ENABLE_GOST + {"for GOST28147-IMIT MAC (draft-smyshlyaev-tls12-gost-suites) support", test_gost_imit, "yes", "no", "dunno"}, #endif {"for max record size (RFC6066) support", test_max_record_size, "yes", "no", "dunno"}, @@ -181,8 +204,6 @@ static const TLS_TEST tls_tests[] = { {"for OCSP status response (RFC6066) support", test_ocsp_status, "yes", "no", "dunno"}, #endif - {"for OpenPGP authentication (RFC6091) support", test_openpgp1, - "yes", "no", "dunno"}, {NULL, NULL, NULL, NULL, NULL} }; @@ -191,7 +212,7 @@ const char *ip; gnutls_session_t init_tls_session(const char *host) { gnutls_session_t state = NULL; - gnutls_init(&state, GNUTLS_CLIENT | GNUTLS_NO_EXTENSIONS); + gnutls_init(&state, GNUTLS_CLIENT); set_read_funcs(state); if (host && is_ip(host) == 0) @@ -212,6 +233,7 @@ int main(int argc, char **argv) int i; char portname[6]; socket_st hd; + bool socket_opened = false; char app_proto[32] = ""; cmd_parser(argc, argv); @@ -265,66 +287,53 @@ int main(int argc, char **argv) sockets_init(); - i = 0; - printf("GnuTLS debug client %s\n", gnutls_check_version(NULL)); canonicalize_host(hostname, portname, sizeof(portname)); printf("Checking %s:%s\n", hostname, portname); - do { - if (tls_tests[i].test_name == NULL) - break; /* finished */ + for (i = 0; + tls_tests[i].test_name != NULL; + i++) { - /* if neither of SSL3 and TLSv1 are supported, exit - */ - if (i > 10 && tls1_2_ok == 0 && tls1_1_ok == 0 && tls1_ok == 0 - && ssl3_ok == 0) { - fprintf(stderr, - "\nServer does not support any of SSL 3.0, TLS 1.0 and TLS 1.1 and TLS 1.2\n"); - break; + if (strcmp(app_proto, "https") != 0 && tls_tests[i].https_only != 0) { + continue; } - socket_open(&hd, hostname, portname, app_proto, SOCKET_FLAG_STARTTLS|SOCKET_FLAG_RAW, NULL, NULL); - hd.verbose = verbose; - - do { - if (strcmp(app_proto, "https") != 0 && tls_tests[i].https_only != 0) { - i++; - break; - } - - ret = tls_tests[i].func(hd.session); - - if (ret != TEST_IGNORE && ret != TEST_IGNORE2) { - printf("%58s...", tls_tests[i].test_name); - fflush(stdout); - } - - if (ret == TEST_SUCCEED) { - if (tls_tests[i].suc_str == NULL) - printf(" %s\n", ext_text); - else - printf(" %s\n", tls_tests[i].suc_str); - } else if (ret == TEST_FAILED) - printf(" %s\n", tls_tests[i].fail_str); - else if (ret == TEST_UNSURE) - printf(" %s\n", tls_tests[i].unsure_str); - else if (ret == TEST_IGNORE) { - if (tls_tests[i+1].test_name) - i++; - else - break; - } + if (!socket_opened) { + socket_open(&hd, hostname, portname, app_proto, SOCKET_FLAG_STARTTLS|SOCKET_FLAG_RAW, NULL, NULL); + hd.verbose = verbose; + socket_opened = true; } - while (ret == TEST_IGNORE - && tls_tests[i].test_name != NULL); - socket_bye(&hd, 1); + ret = tls_tests[i].func(hd.session); - i++; + if ((ret != TEST_IGNORE && ret != TEST_IGNORE2) || verbose) { + printf("%58s...", tls_tests[i].test_name); + fflush(stdout); + } + + if (ret == TEST_SUCCEED) { + if (tls_tests[i].suc_str == NULL) + printf(" %s\n", ext_text); + else + printf(" %s\n", tls_tests[i].suc_str); + } else if (ret == TEST_FAILED) + printf(" %s\n", tls_tests[i].fail_str); + else if (ret == TEST_UNSURE) + printf(" %s\n", tls_tests[i].unsure_str); + else if ((ret == TEST_IGNORE || ret == TEST_IGNORE2) && verbose) { + printf(" skipped\n"); + } + + if (ret != TEST_IGNORE) { + socket_bye(&hd, 1); + socket_opened = false; + } + + if (ret == TEST_FAILED && tls_tests[i].fatal_failure) + break; } - while (1); #ifdef ENABLE_SRP gnutls_srp_free_client_credentials(srp_cred); diff --git a/src/cli.c b/src/cli.c index 6980e75f4e..c3d074f084 100644 --- a/src/cli.c +++ b/src/cli.c @@ -16,7 +16,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ #include @@ -40,6 +40,7 @@ #include #include #include +#include /* Get TCP_FASTOPEN */ #ifdef HAVE_NETINET_TCP_H @@ -50,7 +51,6 @@ #include #include #include -#include #include #include #include @@ -78,11 +78,11 @@ /* global stuff here */ int resume, starttls, insecure, ranges, rehandshake, udp, mtu, - inline_commands; + inline_commands, waitresumption; +unsigned int global_vflags = 0; char *hostname = NULL; char service[32]=""; int record_max_size; -int fingerprint; int crlf; int fastopen; unsigned int verbose = 0; @@ -90,17 +90,16 @@ int print_cert; const char *srp_passwd = NULL; const char *srp_username = NULL; -const char *pgp_keyfile = NULL; -const char *pgp_certfile = NULL; -const char *pgp_keyring = NULL; const char *x509_keyfile = NULL; const char *x509_certfile = NULL; const char *x509_cafile = NULL; const char *x509_crlfile = NULL; static int x509ctype; +const char *rawpk_keyfile = NULL; +const char *rawpk_file = NULL; static int disable_extensions; static int disable_sni; -static unsigned int init_flags = GNUTLS_CLIENT; +static unsigned int init_flags = GNUTLS_CLIENT | GNUTLS_ENABLE_RAWPK; static const char *priorities = NULL; static const char *inline_commands_prefix; @@ -112,15 +111,11 @@ static gnutls_psk_client_credentials_t psk_cred; static gnutls_anon_client_credentials_t anon_cred; static gnutls_certificate_credentials_t xcred; -/* The number of seconds we wait for a reply from peer prior to - * closing the connection. */ -#define TERM_TIMEOUT 8000 - /* end of global stuff */ /* prototypes */ -static void check_rehandshake(socket_st * socket, int ret); +static void check_server_cmd(socket_st * socket, int ret); static void init_global_tls_stuff(void); static int cert_verify_ocsp(gnutls_session_t session); @@ -128,42 +123,66 @@ static int cert_verify_ocsp(gnutls_session_t session); static unsigned int x509_crt_size; static gnutls_pcert_st x509_crt[MAX_CRT]; static gnutls_privkey_t x509_key = NULL; +static gnutls_pcert_st rawpk; +static gnutls_privkey_t rawpk_key = NULL; -static gnutls_pcert_st pgp_crt; -static gnutls_privkey_t pgp_key = NULL; -#ifdef ENABLE_OPENPGP -static void get_keyid(gnutls_openpgp_keyid_t keyid, const char *str) +/* Load a PKCS #8, PKCS #12 private key or PKCS #11 URL + */ +static void load_priv_key(gnutls_privkey_t* privkey, const char* key_source) { - size_t keyid_size = GNUTLS_OPENPGP_KEYID_SIZE; + int ret; + gnutls_datum_t data = { NULL, 0 }; - if (strlen(str) != 16) { - fprintf(stderr, - "The OpenPGP subkey ID has to be 16 hexadecimal characters.\n"); - exit(1); - } + ret = gnutls_privkey_init(privkey); - if (gnutls_hex2bin(str, strlen(str), keyid, &keyid_size) < 0) { - fprintf(stderr, "Error converting hex string: %s.\n", str); + if (ret < 0) { + fprintf(stderr, "*** Error initializing key: %s\n", + gnutls_strerror(ret)); exit(1); } - return; + gnutls_privkey_set_pin_function(*privkey, pin_callback, + NULL); + + if (gnutls_url_is_supported(key_source) != 0) { + ret = gnutls_privkey_import_url(*privkey, key_source, 0); + if (ret < 0) { + fprintf(stderr, + "*** Error loading url: %s\n", + gnutls_strerror(ret)); + exit(1); + } + } else { + ret = gnutls_load_file(key_source, &data); + if (ret < 0) { + fprintf(stderr, + "*** Error loading key file.\n"); + exit(1); + } + + ret = gnutls_privkey_import_x509_raw(*privkey, &data, + x509ctype, NULL, 0); + if (ret < 0) { + fprintf(stderr, + "*** Error importing key: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + gnutls_free(data.data); + } } -#endif -/* Load the certificate and the private key. +/* Load the X509 certificate and the private key. */ -static void load_keys(void) +static void load_x509_keys(void) { unsigned int crt_num; int ret; unsigned int i; gnutls_datum_t data = { NULL, 0 }; gnutls_x509_crt_t crt_list[MAX_CRT]; -#ifdef ENABLE_OPENPGP - unsigned char keyid[GNUTLS_OPENPGP_KEYID_SIZE]; -#endif if (x509_certfile != NULL && x509_keyfile != NULL) { #ifdef ENABLE_PKCS11 @@ -242,137 +261,46 @@ static void load_keys(void) gnutls_free(data.data); - ret = gnutls_privkey_init(&x509_key); - if (ret < 0) { - fprintf(stderr, "*** Error initializing key: %s\n", - gnutls_strerror(ret)); - exit(1); - } - - gnutls_privkey_set_pin_function(x509_key, pin_callback, - NULL); - - if (gnutls_url_is_supported(x509_keyfile) != 0) { - ret = - gnutls_privkey_import_url(x509_key, - x509_keyfile, 0); - if (ret < 0) { - fprintf(stderr, - "*** Error loading url: %s\n", - gnutls_strerror(ret)); - exit(1); - } - } else { - ret = gnutls_load_file(x509_keyfile, &data); - if (ret < 0) { - fprintf(stderr, - "*** Error loading key file.\n"); - exit(1); - } + load_priv_key(&x509_key, x509_keyfile); - ret = - gnutls_privkey_import_x509_raw(x509_key, &data, - x509ctype, NULL, - 0); - if (ret < 0) { - fprintf(stderr, - "*** Error loading url: %s\n", - gnutls_strerror(ret)); - exit(1); - } - - gnutls_free(data.data); - } - - fprintf(stdout, + log_msg(stdout, "Processed %d client X.509 certificates...\n", x509_crt_size); } +} -#ifdef ENABLE_OPENPGP - if (HAVE_OPT(PGPSUBKEY)) { - get_keyid(keyid, OPT_ARG(PGPSUBKEY)); - } - - if (pgp_certfile != NULL && pgp_keyfile != NULL) { - gnutls_openpgp_crt_t tmp_pgp_crt; +/* Load the raw public key and corresponding private key. + */ +static void load_rawpk_keys(void) +{ + int ret; + gnutls_datum_t data = { NULL, 0 }; - ret = gnutls_load_file(pgp_certfile, &data); + if (rawpk_file != NULL && rawpk_keyfile != NULL) { + // First we load the raw public key + ret = gnutls_load_file(rawpk_file, &data); if (ret < 0) { fprintf(stderr, - "*** Error loading PGP cert file.\n"); + "*** Error loading cert file.\n"); exit(1); } - gnutls_openpgp_crt_init(&tmp_pgp_crt); - - ret = - gnutls_pcert_import_openpgp_raw(&pgp_crt, &data, - GNUTLS_OPENPGP_FMT_BASE64, - HAVE_OPT(PGPSUBKEY) ? - keyid : NULL, 0); + ret = gnutls_pcert_import_rawpk_raw(&rawpk, &data, x509ctype, 0, 0); if (ret < 0) { fprintf(stderr, - "*** Error loading PGP cert file: %s\n", - gnutls_strerror(ret)); + "*** Error importing rawpk to pcert: %s\n", + gnutls_strerror(ret)); exit(1); } gnutls_free(data.data); - ret = gnutls_privkey_init(&pgp_key); - if (ret < 0) { - fprintf(stderr, "*** Error initializing key: %s\n", - gnutls_strerror(ret)); - exit(1); - } - - gnutls_privkey_set_pin_function(pgp_key, pin_callback, - NULL); - - if (gnutls_url_is_supported(pgp_keyfile)) { - ret = - gnutls_privkey_import_url(pgp_key, pgp_keyfile, - 0); - if (ret < 0) { - fprintf(stderr, - "*** Error loading url: %s\n", - gnutls_strerror(ret)); - exit(1); - } - } else { - ret = gnutls_load_file(pgp_keyfile, &data); - if (ret < 0) { - fprintf(stderr, - "*** Error loading key file.\n"); - exit(1); - } + // Secondly, we load the private key corresponding to the raw pk + load_priv_key(&rawpk_key, rawpk_keyfile); - if (HAVE_OPT(PGPSUBKEY)) - ret = - gnutls_privkey_import_openpgp_raw - (pgp_key, &data, x509ctype, keyid, - NULL); - else - ret = - gnutls_privkey_import_openpgp_raw - (pgp_key, &data, x509ctype, NULL, - NULL); - if (ret < 0) { - fprintf(stderr, - "*** Error loading url: %s\n", - gnutls_strerror(ret)); - exit(1); - } - - gnutls_free(data.data); - } - - - fprintf(stdout, "Processed 1 client PGP certificate...\n"); + log_msg(stdout, + "Processed %d client raw public key pair...\n", 1); } -#endif - } #define IS_NEWLINE(x) ((x[0] == '\n') || (x[0] == '\r')) @@ -430,6 +358,84 @@ static void try_save_cert(gnutls_session_t session) return; } +static void try_save_ocsp_status(gnutls_session_t session) +{ + unsigned int cert_num = 0; + gnutls_certificate_get_peers(session, &cert_num); + if (cert_num == 0) { + fprintf(stderr, "no certificates sent by server, so can't get OCSP status!\n"); + return; + } + + const char *path; + gnutls_x509_crt_fmt_t type; + unsigned int max_out; + + /* This function is called if exactly one of SAVE_OCSP and + * SAVE_OCSP_MULTI is set. */ + if (HAVE_OPT(SAVE_OCSP)) + { + path = OPT_ARG(SAVE_OCSP); + type = GNUTLS_X509_FMT_DER; + max_out = 1; + } else { + path = OPT_ARG(SAVE_OCSP_MULTI); + type = GNUTLS_X509_FMT_PEM; + max_out = cert_num; + } + + FILE *fp = fopen(path, "w"); + if (fp == NULL) { + fprintf(stderr, "could not open %s for writing\n", path); + exit(1); + } + + for (unsigned int i = 0; i < max_out; i++) { + gnutls_datum_t oresp; + int ret = gnutls_ocsp_status_request_get2(session, i, &oresp); + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { + fprintf(stderr, "no OCSP response for certificate %u\n", i); + continue; + } else if (ret < 0) { + fprintf(stderr, "error getting OCSP response %u: %s\n", + i, gnutls_strerror(ret)); + exit(1); + } + + if (type == GNUTLS_X509_FMT_DER) { + /* on success the return value is equal to the + * number of items (third parameter) */ + if (fwrite(oresp.data, oresp.size, 1, fp) != 1) { + fprintf(stderr, "writing to %s failed\n", path); + exit(1); + } + continue; + } + + gnutls_datum_t t; + ret = gnutls_pem_base64_encode_alloc("OCSP RESPONSE", + &oresp, &t); + if (ret < 0) { + fprintf(stderr, "error allocating PEM OCSP response: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + /* on success the return value is equal to the number + * of items (third parameter) */ + if (fwrite(t.data, t.size, 1, fp) != 1) { + fprintf(stderr, "writing to %s failed\n", path); + exit(1); + } + gnutls_free(t.data); + } + if (fclose(fp) != 0) { + perror("failed to close OCSP save file"); + } + + return; +} + static int cert_verify_callback(gnutls_session_t session) { int rc; @@ -439,6 +445,7 @@ static int cert_verify_callback(gnutls_session_t session) int dane = ENABLED_OPT(DANE); int ca_verify = ENABLED_OPT(CA_VERIFICATION); const char *txt_service; + const char *host; /* On an session with TOFU the PKI/DANE verification * become advisory. @@ -448,31 +455,51 @@ static int cert_verify_callback(gnutls_session_t session) ssh = strictssh; } + if (HAVE_OPT(VERIFY_HOSTNAME)) { + host = OPT_ARG(VERIFY_HOSTNAME); + canonicalize_host((char *) host, NULL, 0); + } else + host = hostname; + + /* Save certificate and OCSP response */ if (HAVE_OPT(SAVE_CERT)) { try_save_cert(session); } +#ifndef ENABLE_OCSP + if (HAVE_OPT(SAVE_OCSP_MULTI) || HAVE_OPT(SAVE_OCSP) || HAVE_OPT(OCSP)) { + fprintf(stderr, "OCSP is not supported!\n"); + } +#else + if (HAVE_OPT(SAVE_OCSP_MULTI) || HAVE_OPT(SAVE_OCSP)) { + try_save_ocsp_status(session); + } +#endif + print_cert_info(session, verbose, print_cert); if (ca_verify) { - rc = cert_verify(session, hostname, GNUTLS_KP_TLS_WWW_SERVER); + rc = cert_verify(session, host, GNUTLS_KP_TLS_WWW_SERVER); if (rc == 0) { - printf - ("*** PKI verification of server certificate failed...\n"); + log_msg + (stdout, "*** PKI verification of server certificate failed...\n"); if (!insecure && !ssh) return -1; - } else if (ENABLED_OPT(OCSP) && gnutls_ocsp_status_request_is_checked(session, 0) == 0) { /* off-line verification succeeded. Try OCSP */ + } +#ifdef ENABLE_OCSP + else if (ENABLED_OPT(OCSP) && gnutls_ocsp_status_request_is_checked(session, 0) == 0) { /* off-line verification succeeded. Try OCSP */ rc = cert_verify_ocsp(session); if (rc == -1) { - printf - ("*** Verifying (with OCSP) server certificate chain failed...\n"); + log_msg + (stdout, "*** Verifying (with OCSP) server certificate chain failed...\n"); if (!insecure && !ssh) return -1; } else if (rc == 0) - printf("*** OCSP: nothing to check.\n"); + log_msg(stdout, "*** OCSP: nothing to check.\n"); else - printf("*** OCSP: verified %d certificate(s).\n", rc); + log_msg(stdout, "*** OCSP: verified %d certificate(s).\n", rc); } +#endif } if (dane) { /* try DANE auth */ @@ -489,7 +516,7 @@ static int cert_verify_callback(gnutls_session_t session) vflags |= DANE_VFLAG_ONLY_CHECK_EE_USAGE; port = service_to_port(service, udp?"udp":"tcp"); - rc = dane_verify_session_crt(NULL, session, hostname, + rc = dane_verify_session_crt(NULL, session, host, udp ? "udp" : "tcp", port, sflags, vflags, &status); if (rc < 0) { @@ -534,17 +561,20 @@ static int cert_verify_callback(gnutls_session_t session) txt_service = port_to_service(service, udp?"udp":"tcp"); - rc = gnutls_verify_stored_pubkey(NULL, NULL, hostname, + rc = gnutls_verify_stored_pubkey(NULL, NULL, host, txt_service, GNUTLS_CRT_X509, cert, 0); if (rc == GNUTLS_E_NO_CERTIFICATE_FOUND) { fprintf(stderr, "Host %s (%s) has never been contacted before.\n", - hostname, txt_service); + host, txt_service); if (status == 0) fprintf(stderr, "Its certificate is valid for %s.\n", - hostname); + host); + + if (strictssh) + return -1; rc = read_yesno ("Are you sure you want to trust it? (y/N): "); @@ -553,21 +583,21 @@ static int cert_verify_callback(gnutls_session_t session) } else if (rc == GNUTLS_E_CERTIFICATE_KEY_MISMATCH) { fprintf(stderr, "Warning: host %s is known and it is associated with a different key.\n", - hostname); + host); fprintf(stderr, "It might be that the server has multiple keys, or an attacker replaced the key to eavesdrop this connection .\n"); if (status == 0) fprintf(stderr, "Its certificate is valid for %s.\n", - hostname); + host); - if (strictssh == 0) { - rc = read_yesno - ("Do you trust the received key? (y/N): "); - if (rc == 0) - return -1; - } else return -1; + if (strictssh) + return -1; + rc = read_yesno + ("Do you trust the received key? (y/N): "); + if (rc == 0) + return -1; } else if (rc < 0) { fprintf(stderr, "gnutls_verify_stored_pubkey: %s\n", @@ -576,7 +606,7 @@ static int cert_verify_callback(gnutls_session_t session) } if (rc != 0) { - rc = gnutls_store_pubkey(NULL, NULL, hostname, + rc = gnutls_store_pubkey(NULL, NULL, host, txt_service, GNUTLS_CRT_X509, cert, 0, 0); @@ -609,10 +639,10 @@ cert_callback(gnutls_session_t session, /* Print the server's trusted CAs */ if (nreqs > 0) - printf("- Server's trusted authorities:\n"); + log_msg(stdout, "- Server's trusted authorities:\n"); else - printf - ("- Server did not send us any trusted authorities names.\n"); + log_msg + (stdout, "- Server did not send us any trusted authorities names.\n"); /* print the names (if any) */ for (i = 0; i < nreqs; i++) { @@ -621,8 +651,8 @@ cert_callback(gnutls_session_t session, gnutls_x509_rdn_get(&req_ca_rdn[i], issuer_dn, &len); if (ret >= 0) { - printf(" [%d]: ", i); - printf("%s\n", issuer_dn); + log_msg(stdout, " [%d]: ", i); + log_msg(stdout, "%s\n", issuer_dn); } } } @@ -632,34 +662,43 @@ cert_callback(gnutls_session_t session, * supported by the server. */ - cert_type = gnutls_certificate_type_get(session); + cert_type = gnutls_certificate_type_get2(session, GNUTLS_CTYPE_CLIENT); *pcert_length = 0; - if (cert_type == GNUTLS_CRT_X509) { - if (x509_crt_size > 0) { - if (x509_key != NULL) { - *pkey = x509_key; - } else { - printf - ("- Could not find a suitable key to send to server\n"); + switch (cert_type) { + case GNUTLS_CRT_X509: + if (x509_crt_size > 0) { + if (x509_key != NULL) { + *pkey = x509_key; + } else { + log_msg + (stdout, "- Could not find a suitable key to send to server\n"); + return -1; + } + + *pcert_length = x509_crt_size; + *pcert = x509_crt; + } + break; + case GNUTLS_CRT_RAWPK: + if (rawpk_key == NULL || rawpk.type != GNUTLS_CRT_RAWPK) { + log_msg + (stdout, "- Could not find a suitable key to send to server\n"); return -1; } - *pcert_length = x509_crt_size; - *pcert = x509_crt; - } - - } else if (cert_type == GNUTLS_CRT_OPENPGP) { - if (pgp_key != NULL) { - *pkey = pgp_key; - + *pkey = rawpk_key; + *pcert = &rawpk; *pcert_length = 1; - *pcert = &pgp_crt; - } + break; + default: + log_msg(stdout, "- Could not retrieve unsupported certificate type %s.\n", + gnutls_certificate_type_get_name(cert_type)); + return -1; } - printf("- Successfully sent %u certificate(s) to server.\n", + log_msg(stdout, "- Successfully sent %u certificate(s) to server.\n", *pcert_length); return 0; @@ -704,26 +743,46 @@ gnutls_session_t init_tls_session(const char *host) */ if (disable_extensions == 0 && disable_sni == 0) { if (HAVE_OPT(SNI_HOSTNAME)) { - gnutls_server_name_set(session, GNUTLS_NAME_DNS, - OPT_ARG(SNI_HOSTNAME), strlen(OPT_ARG(SNI_HOSTNAME))); + const char *sni_host = OPT_ARG(SNI_HOSTNAME); + + canonicalize_host((char *) sni_host, NULL, 0); + gnutls_server_name_set(session, GNUTLS_NAME_DNS, sni_host, strlen(sni_host)); } else if (host != NULL && is_ip(host) == 0) gnutls_server_name_set(session, GNUTLS_NAME_DNS, host, strlen(host)); } - if (HAVE_OPT(DH_BITS)) + if (HAVE_OPT(DH_BITS)) { +#if defined(ENABLE_DHE) || defined(ENABLE_ANON) gnutls_dh_set_prime_bits(session, OPT_VALUE_DH_BITS); +#else + fprintf(stderr, "Setting DH parameters is not supported\n"); + exit(1); +#endif + } + if (HAVE_OPT(ALPN)) { +#ifndef ENABLE_ALPN + fprintf(stderr, "ALPN is not supported\n"); + exit(1); +#else unsigned proto_n = STACKCT_OPT(ALPN); char **protos = (void *) STACKLST_OPT(ALPN); - gnutls_datum_t p[proto_n]; + if (proto_n > 1024) { + fprintf(stderr, "Number of ALPN protocols too large (%d)\n", + proto_n); + exit(1); + } + + gnutls_datum_t p[1024]; for (i = 0; i < proto_n; i++) { p[i].data = (void *) protos[i]; p[i].size = strlen(protos[i]); } gnutls_alpn_set_protocols(session, p, proto_n, 0); +#endif } gnutls_credentials_set(session, GNUTLS_CRD_ANON, anon_cred); @@ -737,13 +796,6 @@ gnutls_session_t init_tls_session(const char *host) gnutls_certificate_set_verify_function(xcred, cert_verify_callback); - /* send the fingerprint */ -#ifdef ENABLE_OPENPGP - if (fingerprint != 0) - gnutls_openpgp_send_cert(session, - GNUTLS_OPENPGP_CERT_FINGERPRINT); -#endif - /* use the max record size extension */ if (record_max_size > 0 && disable_extensions == 0) { if (gnutls_record_set_max_size(session, record_max_size) < @@ -815,10 +867,10 @@ static int handle_error(socket_st * hd, int err) str = gnutls_alert_get_name(alert); if (str == NULL) str = str_unknown; - printf("*** Received alert [%d]: %s\n", alert, str); + log_msg(stdout, "*** Received alert [%d]: %s\n", alert, str); } - check_rehandshake(hd, err); + check_server_cmd(hd, err); return ret; } @@ -837,12 +889,13 @@ static void tls_log_func(int level, const char *str) fprintf(stderr, "|<%d>| %s", level, str); } +#define IN_NONE 0 #define IN_KEYBOARD 1 #define IN_NET 2 -#define IN_NONE 0 +#define IN_TERM 3 /* returns IN_KEYBOARD for keyboard input and IN_NET for network input */ -static int check_net_or_keyboard_input(socket_st * hd) +static int check_net_or_keyboard_input(socket_st * hd, unsigned user_term) { int maxfd; fd_set rset; @@ -854,14 +907,18 @@ static int check_net_or_keyboard_input(socket_st * hd) FD_SET(hd->fd, &rset); #ifndef _WIN32 - FD_SET(fileno(stdin), &rset); - maxfd = MAX(fileno(stdin), hd->fd); + if (!user_term) { + FD_SET(fileno(stdin), &rset); + maxfd = MAX(fileno(stdin), hd->fd); + } else { + maxfd = hd->fd; + } #else maxfd = hd->fd; #endif - tv.tv_sec = 0; - tv.tv_usec = 500 * 1000; + tv.tv_sec = 2; + tv.tv_usec = 0; if (hd->secure == 1) if (gnutls_record_check_pending(hd->session)) @@ -885,9 +942,11 @@ static int check_net_or_keyboard_input(socket_st * hd) return IN_KEYBOARD; } #else - if (FD_ISSET(fileno(stdin), &rset)) + if (!user_term && FD_ISSET(fileno(stdin), &rset)) return IN_KEYBOARD; #endif + if (err == 0 && user_term) + return IN_TERM; } while (err == 0); @@ -904,22 +963,48 @@ static int try_rehandshake(socket_st * hd) gnutls_perror(ret); return ret; } else { - printf("- ReHandshake was completed\n"); + log_msg(stdout, "- ReHandshake was completed\n"); + return 0; + } +} + +static int try_rekey(socket_st * hd, unsigned peer) +{ + int ret; + + do { + ret = gnutls_session_key_update(hd->session, peer?GNUTLS_KU_PEER:0); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fprintf(stderr, "*** Rekey has failed: %s\n", gnutls_strerror(ret)); + return ret; + } else { + log_msg(stdout, "- Rekey was completed\n"); return 0; } } static int try_resume(socket_st * hd) { - int ret, socket_flags = 0; + int ret, socket_flags = SOCKET_FLAG_DONT_PRINT_ERRORS; gnutls_datum_t rdata = {NULL, 0}; + gnutls_datum_t edata = {NULL, 0}; if (gnutls_session_is_resumed(hd->session) == 0) { - /* not resumed - obtain the session data */ - ret = gnutls_session_get_data2(hd->session, &rdata); - if (ret < 0) { - rdata.data = NULL; - } + do { + /* not resumed - obtain the session data */ + ret = gnutls_session_get_data2(hd->session, &rdata); + if (ret < 0) { + rdata.data = NULL; + } + + if ((gnutls_protocol_get_version(hd->session) != GNUTLS_TLS1_3) || + ((gnutls_session_get_flags(hd->session) & + GNUTLS_SFLAGS_SESSION_TICKET))) { + break; + } + } while (waitresumption); } else { /* resumed - try to reuse the previous session data */ rdata.data = hd->rdata.data; @@ -927,13 +1012,13 @@ static int try_resume(socket_st * hd) hd->rdata.data = NULL; } - printf("- Disconnecting\n"); + log_msg(stdout, "- Disconnecting\n"); socket_bye(hd, 1); canonicalize_host(hostname, service, sizeof(service)); - printf - ("\n\n- Connecting again- trying to resume previous session\n"); + log_msg + (stdout, "\n\n- Connecting again- trying to resume previous session\n"); if (HAVE_OPT(STARTTLS_PROTO)) socket_flags |= SOCKET_FLAG_STARTTLS; else if (fastopen) @@ -942,11 +1027,26 @@ static int try_resume(socket_st * hd) if (udp) socket_flags |= SOCKET_FLAG_UDP; - socket_open(hd, hostname, service, OPT_ARG(STARTTLS_PROTO), socket_flags, CONNECT_MSG, &rdata); + if (HAVE_OPT(EARLYDATA)) { + FILE *fp; + size_t size; - printf("- Resume Handshake was completed\n"); + fp = fopen(OPT_ARG(EARLYDATA), "r"); + if (fp == NULL) { + fprintf(stderr, "could not open %s\n", OPT_ARG(EARLYDATA)); + exit(1); + } + edata.data = (void *) fread_file(fp, &size); + edata.size = size; + fclose(fp); + } + + socket_open3(hd, hostname, service, OPT_ARG(STARTTLS_PROTO), + socket_flags, CONNECT_MSG, &rdata, &edata); + + log_msg(stdout, "- Resume Handshake was completed\n"); if (gnutls_session_is_resumed(hd->session) != 0) - printf("*** This is a resumed session\n"); + log_msg(stdout, "*** This is a resumed session\n"); return 0; } @@ -955,7 +1055,8 @@ static bool parse_for_inline_commands_in_buffer(char *buffer, size_t bytes, inline_cmds_st * inline_cmds) { - ssize_t local_bytes, match_bytes, prev_bytes_copied, ii, jj; + ssize_t local_bytes, match_bytes, prev_bytes_copied, ii; + unsigned jj; char *local_buffer_ptr, *ptr; char inline_command_string[MAX_INLINE_COMMAND_BYTES]; ssize_t l; @@ -987,6 +1088,8 @@ bool parse_for_inline_commands_in_buffer(char *buffer, size_t bytes, inline_cmds->new_buffer_ptr = buffer + bytes; } + assert(local_buffer_ptr != NULL); + inline_cmds->current_ptr = local_buffer_ptr; if (local_buffer_ptr[0] == inline_commands_prefix[0] @@ -1065,6 +1168,10 @@ int run_inline_command(inline_cmds_st * cmd, socket_st * hd) switch (cmd->cmd_found) { case INLINE_COMMAND_RESUME: return try_resume(hd); + case INLINE_COMMAND_REKEY_LOCAL: + return try_rekey(hd, 0); + case INLINE_COMMAND_REKEY_BOTH: + return try_rekey(hd, 1); case INLINE_COMMAND_RENEGOTIATE: return try_rehandshake(hd); default: @@ -1084,7 +1191,7 @@ int do_inline_command_processing(char *buffer_ptr, size_t curr_bytes, continue_inline_processing: /* parse_for_inline_commands_in_buffer hunts for start of an inline command - * sequence. The function maintains state information in inline_cmds. + * sequence. The function maintains state information in inline_cmds. */ inline_cmd_start_found = parse_for_inline_commands_in_buffer(buffer_ptr, bytes, @@ -1123,16 +1230,26 @@ int do_inline_command_processing(char *buffer_ptr, size_t curr_bytes, static void print_other_info(gnutls_session_t session) { +#ifdef ENABLE_OCSP int ret; + unsigned i; + unsigned int list_size; gnutls_datum_t oresp; + const gnutls_datum_t * peers; - ret = gnutls_ocsp_status_request_get(session, &oresp); - if (ret < 0) { - oresp.data = NULL; - oresp.size = 0; - } + peers = gnutls_certificate_get_peers(session, &list_size); + + if (!ENABLED_OPT(VERBOSE) || peers == NULL) + return; + + for (i = 0; i < list_size; i++) { + ret = gnutls_ocsp_status_request_get2(session, i, &oresp); + if (ret < 0) { + oresp.data = NULL; + oresp.size = 0; + continue; + } - if (ENABLED_OPT(VERBOSE) && oresp.data) { gnutls_ocsp_resp_t r; gnutls_datum_t p; unsigned flag; @@ -1158,37 +1275,12 @@ print_other_info(gnutls_session_t session) ret = gnutls_ocsp_resp_print(r, flag, &p); gnutls_ocsp_resp_deinit(r); - fputs((char*)p.data, stdout); - } - - if (HAVE_OPT(SAVE_OCSP) && oresp.data) { - FILE *fp = fopen(OPT_ARG(SAVE_OCSP), "w"); - - if (fp != NULL) { - fwrite(oresp.data, 1, oresp.size, fp); - fclose(fp); + if (ret>=0) { + log_msg(stdout, "%s", (char*) p.data); + gnutls_free(p.data); } } -} - -static void flush_socket(socket_st *hd, unsigned ms) -{ - int ret, ii; - char buffer[MAX_BUF + 1]; - - memset(buffer, 0, MAX_BUF + 1); - ret = socket_recv_timeout(hd, buffer, MAX_BUF, ms); - if (ret == 0) - return; - else if (ret > 0) { - if (verbose != 0) - printf("- Received[%d]: ", ret); - - for (ii = 0; ii < ret; ii++) { - fputc(buffer[ii], stdout); - } - fflush(stdout); - } +#endif } int main(int argc, char **argv) @@ -1201,14 +1293,25 @@ int main(int argc, char **argv) ssize_t bytes, keyboard_bytes; char *keyboard_buffer_ptr; inline_cmds_st inline_cmds; - unsigned last_op_is_write = 0; - int socket_flags = 0; + int socket_flags = SOCKET_FLAG_DONT_PRINT_ERRORS; + FILE *server_fp = NULL; + FILE *client_fp = NULL; + FILE *logfile = NULL; #ifndef _WIN32 struct sigaction new_action; #endif cmd_parser(argc, argv); + if (HAVE_OPT(LOGFILE)) { + logfile = fopen(OPT_ARG(LOGFILE), "w+"); + if (!logfile) { + log_msg(stderr, "Unable to open '%s'!\n", OPT_ARG(LOGFILE)); + exit(1); + } + log_set(logfile); + } + gnutls_global_set_log_function(tls_log_func); gnutls_global_set_log_level(OPT_VALUE_DEBUG); @@ -1239,26 +1342,40 @@ int main(int argc, char **argv) else if (HAVE_OPT(STARTTLS_PROTO)) socket_flags |= SOCKET_FLAG_STARTTLS; - socket_open(&hd, hostname, service, OPT_ARG(STARTTLS_PROTO), socket_flags, CONNECT_MSG, NULL); + if (HAVE_OPT(SAVE_SERVER_TRACE)) { + server_fp = fopen(OPT_ARG(SAVE_SERVER_TRACE), "wb"); + } + if (HAVE_OPT(SAVE_CLIENT_TRACE)) { + client_fp = fopen(OPT_ARG(SAVE_CLIENT_TRACE), "wb"); + } + + socket_open2(&hd, hostname, service, OPT_ARG(STARTTLS_PROTO), + socket_flags, CONNECT_MSG, NULL, NULL, + server_fp, client_fp); + hd.verbose = verbose; if (hd.secure) { - printf("- Handshake was completed\n"); + log_msg(stdout, "- Handshake was completed\n"); if (resume != 0) - if (try_resume(&hd)) - return 1; + if (try_resume(&hd)) { + retval = 1; + goto cleanup; + } print_other_info(hd.session); } /* Warning! Do not touch this text string, it is used by external programs to search for when gnutls-cli has reached this point. */ - printf("\n- Simple Client Mode:\n\n"); + log_msg(stdout, "\n- Simple Client Mode:\n\n"); if (rehandshake) - if (try_rehandshake(&hd)) - return 1; + if (try_rehandshake(&hd)) { + retval = 1; + goto cleanup; + } #ifndef _WIN32 new_action.sa_handler = starttls_alarm; @@ -1278,8 +1395,8 @@ int main(int argc, char **argv) setbuf(stdout, NULL); setbuf(stderr, NULL); + memset(&inline_cmds, 0, sizeof(inline_cmds_st)); if (inline_commands) { - memset(&inline_cmds, 0, sizeof(inline_cmds_st)); inline_cmds.lf_found = true; /* initially, at start of line */ } @@ -1293,46 +1410,42 @@ int main(int argc, char **argv) if (ret < 0) { fprintf(stderr, "*** Handshake has failed\n"); - user_term = 1; retval = 1; break; } } - inp = check_net_or_keyboard_input(&hd); + inp = check_net_or_keyboard_input(&hd, user_term); + if (inp == IN_TERM) + break; if (inp == IN_NET) { memset(buffer, 0, MAX_BUF + 1); - last_op_is_write = 0; ret = socket_recv(&hd, buffer, MAX_BUF); - if (ret == 0) { - printf - ("- Peer has closed the GnuTLS connection\n"); + if (ret == 0 || (ret == GNUTLS_E_PREMATURE_TERMINATION && user_term)) { + log_msg + (stdout, "- Peer has closed the GnuTLS connection\n"); break; - } else if (handle_error(&hd, ret) < 0 - && user_term == 0) { + } else if (handle_error(&hd, ret) < 0) { fprintf(stderr, "*** Server has terminated the connection abnormally.\n"); retval = 1; break; } else if (ret > 0) { if (verbose != 0) - printf("- Received[%d]: ", ret); + log_msg(stdout, "- Received[%d]: ", ret); for (ii = 0; ii < ret; ii++) { fputc(buffer[ii], stdout); } fflush(stdout); } - - if (user_term != 0) - break; } - if (inp == IN_KEYBOARD) { + if (inp == IN_KEYBOARD && user_term == 0) { if ((bytes = - read(fileno(stdin), buffer, - MAX_BUF - 1)) <= 0) { + read(fileno(stdin), buffer, + MAX_BUF - 1)) <= 0) { if (hd.secure == 0) { /* Warning! Do not touch this text string, it is used by external programs to search for when @@ -1344,20 +1457,21 @@ int main(int argc, char **argv) if (ret < 0) { fprintf(stderr, "*** Handshake has failed\n"); - user_term = 1; retval = 1; break; } } else { - if (last_op_is_write) - flush_socket(&hd, TERM_TIMEOUT); + do { + ret = gnutls_bye(hd.session, GNUTLS_SHUT_WR); + } while (ret == GNUTLS_E_INTERRUPTED || + ret == GNUTLS_E_AGAIN); + user_term = 1; - break; } continue; } - buffer[bytes] = 0; + if (crlf != 0) { char *b = strchr(buffer, '\n'); if (b != NULL) { @@ -1390,7 +1504,6 @@ int main(int argc, char **argv) } } - last_op_is_write = 1; if (ranges && gnutls_record_can_use_length_hiding(hd. session)) @@ -1411,7 +1524,7 @@ int main(int argc, char **argv) if (ret > 0) { if (verbose != 0) - printf("- Sent: %d bytes\n", ret); + log_msg(stdout, "- Sent: %d bytes\n", ret); } else handle_error(&hd, ret); @@ -1427,10 +1540,12 @@ int main(int argc, char **argv) } } - if (user_term != 0) - socket_bye(&hd, 1); - else - socket_bye(&hd, 0); + cleanup: + socket_bye(&hd, 0); + if (logfile) { + fclose(logfile); + logfile = NULL; + } #ifdef ENABLE_SRP if (srp_cred) @@ -1459,21 +1574,21 @@ void print_priority_list(void) const char *str; unsigned int lineb = 0; - printf("Priority strings in GnuTLS %s:\n", gnutls_check_version(NULL)); + log_msg(stdout, "Priority strings in GnuTLS %s:\n", gnutls_check_version(NULL)); fputs("\t", stdout); for (idx=0;;idx++) { str = gnutls_priority_string_list(idx, GNUTLS_PRIORITY_LIST_INIT_KEYWORDS); if (str == NULL) break; - lineb += printf("%s ", str); + lineb += log_msg(stdout, "%s ", str); if (lineb > 64) { lineb = 0; - printf("\n\t"); + log_msg(stdout, "\n\t"); } } - printf("\n\nSpecial strings:\n"); + log_msg(stdout, "\n\nSpecial strings:\n"); lineb = 0; fputs("\t", stdout); for (idx=0;;idx++) { @@ -1482,13 +1597,13 @@ void print_priority_list(void) break; if (str[0] == 0) continue; - lineb += printf("%%%s ", str); + lineb += log_msg(stdout, "%%%s ", str); if (lineb > 64) { lineb = 0; - printf("\n\t"); + log_msg(stdout, "\n\t"); } } - printf("\n"); + log_msg(stdout, "\n"); return; } @@ -1553,6 +1668,12 @@ static void cmd_parser(int argc, char **argv) if (disable_extensions) init_flags |= GNUTLS_NO_EXTENSIONS; + if (HAVE_OPT(SINGLE_KEY_SHARE)) + init_flags |= GNUTLS_KEY_SHARE_TOP; + + if (HAVE_OPT(POST_HANDSHAKE_AUTH)) + init_flags |= GNUTLS_POST_HANDSHAKE_AUTH; + inline_commands = HAVE_OPT(INLINE_COMMANDS); if (HAVE_OPT(INLINE_COMMANDS_PREFIX)) { if (strlen(OPT_ARG(INLINE_COMMANDS_PREFIX)) > 1) { @@ -1575,6 +1696,11 @@ static void cmd_parser(int argc, char **argv) rehandshake = HAVE_OPT(REHANDSHAKE); insecure = HAVE_OPT(INSECURE); ranges = HAVE_OPT(RANGES); + waitresumption = HAVE_OPT(WAITRESUMPTION); + + if (insecure || HAVE_OPT(VERIFY_ALLOW_BROKEN)) { + global_vflags |= GNUTLS_VERIFY_ALLOW_BROKEN; + } udp = HAVE_OPT(UDP); mtu = OPT_VALUE_MTU; @@ -1590,8 +1716,6 @@ static void cmd_parser(int argc, char **argv) record_max_size = OPT_VALUE_RECORDSIZE; - fingerprint = HAVE_OPT(FINGERPRINT); - if (HAVE_OPT(X509FMTDER)) x509ctype = GNUTLS_X509_FMT_DER; else @@ -1615,11 +1739,11 @@ static void cmd_parser(int argc, char **argv) if (HAVE_OPT(X509CERTFILE)) x509_certfile = OPT_ARG(X509CERTFILE); - if (HAVE_OPT(PGPKEYFILE)) - pgp_keyfile = OPT_ARG(PGPKEYFILE); + if (HAVE_OPT(RAWPKKEYFILE)) + rawpk_keyfile = OPT_ARG(RAWPKKEYFILE); - if (HAVE_OPT(PGPCERTFILE)) - pgp_certfile = OPT_ARG(PGPCERTFILE); + if (HAVE_OPT(RAWPKFILE)) + rawpk_file = OPT_ARG(RAWPKFILE); if (HAVE_OPT(PSKUSERNAME)) psk_username = OPT_ARG(PSKUSERNAME); @@ -1630,9 +1754,6 @@ static void cmd_parser(int argc, char **argv) } else psk_key.size = 0; - if (HAVE_OPT(PGPKEYRING)) - pgp_keyring = OPT_ARG(PGPKEYRING); - crlf = HAVE_OPT(CRLF); #ifdef TCP_FASTOPEN @@ -1652,23 +1773,35 @@ static void cmd_parser(int argc, char **argv) } } -static void check_rehandshake(socket_st * socket, int ret) +static void check_server_cmd(socket_st * socket, int ret) { - if (socket->secure && ret == GNUTLS_E_REHANDSHAKE) { - /* There is a race condition here. If application - * data is sent after the rehandshake request, - * the server thinks we ignored his request. - * This is a bad design of this client. - */ - printf("*** Received rehandshake request\n"); - /* gnutls_alert_send( session, GNUTLS_AL_WARNING, GNUTLS_A_NO_RENEGOTIATION); */ + if (socket->secure) { + if (ret == GNUTLS_E_REHANDSHAKE) { + /* There is a race condition here. If application + * data is sent after the rehandshake request, + * the server thinks we ignored his request. + * This is a bad design of this client. + */ + log_msg(stdout, "*** Received rehandshake request\n"); + /* gnutls_alert_send( session, GNUTLS_AL_WARNING, GNUTLS_A_NO_RENEGOTIATION); */ + + ret = do_handshake(socket); - ret = do_handshake(socket); + if (ret == 0) { + log_msg(stdout, "*** Rehandshake was performed.\n"); + } else { + log_msg(stdout, "*** Rehandshake Failed: %s\n", gnutls_strerror(ret)); + } + } else if (ret == GNUTLS_E_REAUTH_REQUEST) { + do { + ret = gnutls_reauth(socket->session, 0); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - if (ret == 0) { - printf("*** Rehandshake was performed.\n"); - } else { - printf("*** Rehandshake Failed.\n"); + if (ret == 0) { + log_msg(stdout, "*** Re-auth was performed.\n"); + } else { + log_msg(stdout, "*** Re-auth failed: %s\n", gnutls_strerror(ret)); + } } } } @@ -1700,7 +1833,12 @@ int do_handshake(socket_st * socket) if (ret == 0) { /* print some information */ - print_info(socket->session, verbose, (HAVE_OPT(X509CERTFILE)||HAVE_OPT(PGPCERTFILE))?P_WAIT_FOR_CERT:0); + print_info(socket->session, verbose, HAVE_OPT(X509CERTFILE)?P_WAIT_FOR_CERT:0); + if (HAVE_OPT(KEYMATEXPORT)) + print_key_material(socket->session, + OPT_ARG(KEYMATEXPORT), + HAVE_OPT(KEYMATEXPORTSIZE) ? + OPT_VALUE_KEYMATEXPORTSIZE : 20); socket->secure = 1; } else { gnutls_alert_send_appropriate(socket->session, ret); @@ -1734,11 +1872,11 @@ psk_callback(gnutls_session_t session, char **username, size_t res_size; gnutls_datum_t tmp; - printf("- PSK client callback. "); + log_msg(stdout, "- PSK client callback. "); if (hint) - printf("PSK hint '%s'\n", hint); + log_msg(stdout, "PSK hint '%s'\n", hint); else - printf("No PSK hint\n"); + log_msg(stdout, "No PSK hint\n"); if (HAVE_OPT(PSKUSERNAME)) *username = gnutls_strdup(OPT_ARG(PSKUSERNAME)); @@ -1746,7 +1884,7 @@ psk_callback(gnutls_session_t session, char **username, char *p = NULL; size_t n; - printf("Enter PSK identity: "); + log_msg(stdout, "Enter PSK identity: "); fflush(stdout); ret = getline(&p, &n, stdin); @@ -1839,6 +1977,9 @@ static void init_global_tls_stuff(void) } gnutls_certificate_set_pin_function(xcred, pin_callback, NULL); + gnutls_certificate_set_verify_flags(xcred, global_vflags); + gnutls_certificate_set_flags(xcred, GNUTLS_CERTIFICATE_VERIFY_CRLS); + if (x509_cafile != NULL) { ret = gnutls_certificate_set_x509_trust_file(xcred, x509_cafile, @@ -1846,14 +1987,19 @@ static void init_global_tls_stuff(void) } else { if (insecure == 0) { ret = gnutls_certificate_set_x509_system_trust(xcred); + if (ret == GNUTLS_E_UNIMPLEMENTED_FEATURE) { + fprintf(stderr, "Warning: this system doesn't support a default trust store\n"); + ret = 0; + } } else { ret = 0; } } if (ret < 0) { - fprintf(stderr, "Error setting the x509 trust file\n"); + fprintf(stderr, "Error setting the x509 trust file: %s\n", gnutls_strerror(ret)); + exit(1); } else { - printf("Processed %d CA certificate(s).\n", ret); + log_msg(stdout, "Processed %d CA certificate(s).\n", ret); } if (x509_crlfile != NULL) { @@ -1863,26 +2009,15 @@ static void init_global_tls_stuff(void) x509ctype); if (ret < 0) { fprintf(stderr, - "Error setting the x509 CRL file\n"); + "Error setting the x509 CRL file: %s\n", gnutls_strerror(ret)); + exit(1); } else { - printf("Processed %d CRL(s).\n", ret); + log_msg(stdout, "Processed %d CRL(s).\n", ret); } } - load_keys(); - -#ifdef ENABLE_OPENPGP - if (pgp_keyring != NULL) { - ret = - gnutls_certificate_set_openpgp_keyring_file(xcred, - pgp_keyring, - GNUTLS_OPENPGP_FMT_BASE64); - if (ret < 0) { - fprintf(stderr, - "Error setting the OpenPGP keyring file\n"); - } - } -#endif + load_x509_keys(); + load_rawpk_keys(); #ifdef ENABLE_SRP if (srp_username && srp_passwd) { @@ -1926,12 +2061,13 @@ static void init_global_tls_stuff(void) } -/* OCSP check for the peer's certificate. Should be called +/* OCSP check for the peer's certificate. Should be called * only after the certificate list verification is complete. * Returns: * -1: certificate chain could not be checked fully * >=0: number of certificates verified ok */ +#ifdef ENABLE_OCSP static int cert_verify_ocsp(gnutls_session_t session) { gnutls_x509_crt_t cert, issuer; @@ -1987,7 +2123,8 @@ static int cert_verify_ocsp(gnutls_session_t session) goto cleanup; } } else if (ret < 0) { - fprintf(stderr, "Cannot find issuer\n"); + if (it == 0) + fprintf(stderr, "Cannot find issuer: %s\n", gnutls_strerror(ret)); goto cleanup; } @@ -2027,3 +2164,4 @@ static int cert_verify_ocsp(gnutls_session_t session) return -1; return ok >= 1 ? (int) ok : -1; } +#endif diff --git a/src/common.c b/src/common.c index 4bf7ba4f53..753481741b 100644 --- a/src/common.c +++ b/src/common.c @@ -15,13 +15,13 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ #include /* Work around problem reported in - .*/ + .*/ #if GETTIMEOFDAY_CLOBBERS_LOCALTIME #undef localtime #endif @@ -33,7 +33,6 @@ #include #include #include -#include #include #include #include @@ -53,6 +52,7 @@ const char str_unknown[] = "(unknown)"; +static FILE *logfile = NULL; /* Hex encodes the given data adding a semicolon between hex bytes. */ const char *raw_to_string(const unsigned char *raw, size_t raw_size) @@ -114,46 +114,8 @@ const char *raw_to_base64(const unsigned char *raw, size_t raw_size) return buf; } -static void print_x509_info_compact(gnutls_session_t session) -{ - gnutls_x509_crt_t crt; - const gnutls_datum_t *cert_list; - unsigned int cert_list_size = 0; - int ret; - gnutls_datum_t cinfo; - - cert_list = gnutls_certificate_get_peers(session, &cert_list_size); - if (cert_list_size == 0) { - fprintf(stderr, "No certificates found!\n"); - return; - } - - ret = gnutls_x509_crt_init(&crt); - if (ret < 0) { - fprintf(stderr, "Memory error\n"); - return; - } - - ret = - gnutls_x509_crt_import(crt, &cert_list[0], - GNUTLS_X509_FMT_DER); - if (ret < 0) { - fprintf(stderr, "Decoding error: %s\n", - gnutls_strerror(ret)); - return; - } - - ret = gnutls_x509_crt_print(crt, GNUTLS_CRT_PRINT_COMPACT, &cinfo); - if (ret == 0) { - printf("- X.509 cert: %s\n", cinfo.data); - gnutls_free(cinfo.data); - } - - gnutls_x509_crt_deinit(crt); -} - static void -print_x509_info(gnutls_session_t session, FILE *out, int flag, int print_cert) +print_x509_info(gnutls_session_t session, FILE *out, int flag, int print_cert, int print_crt_status) { gnutls_x509_crt_t crt; const gnutls_datum_t *cert_list; @@ -162,12 +124,13 @@ print_x509_info(gnutls_session_t session, FILE *out, int flag, int print_cert) cert_list = gnutls_certificate_get_peers(session, &cert_list_size); if (cert_list_size == 0) { - fprintf(stderr, "No certificates found!\n"); + if (print_crt_status) + fprintf(stderr, "No certificates found!\n"); return; } - fprintf(out, "- Certificate type: X.509\n"); - fprintf(out, "- Got a certificate list of %d certificates.\n", + log_msg(out, "- Certificate type: X.509\n"); + log_msg(out, "- Got a certificate list of %d certificates.\n", cert_list_size); for (j = 0; j < cert_list_size; j++) { @@ -188,157 +151,86 @@ print_x509_info(gnutls_session_t session, FILE *out, int flag, int print_cert) return; } - fprintf(out, "- Certificate[%d] info:\n - ", j); + log_msg(out, "- Certificate[%d] info:\n - ", j); if (flag == GNUTLS_CRT_PRINT_COMPACT && j > 0) flag = GNUTLS_CRT_PRINT_ONELINE; ret = gnutls_x509_crt_print(crt, flag, &cinfo); if (ret == 0) { - fprintf(out, "%s\n", cinfo.data); + log_msg(out, "%s\n", cinfo.data); gnutls_free(cinfo.data); } if (print_cert) { - size_t size = 0; - char *p = NULL; + gnutls_datum_t pem; ret = - gnutls_x509_crt_export(crt, - GNUTLS_X509_FMT_PEM, p, - &size); - if (ret == GNUTLS_E_SHORT_MEMORY_BUFFER) { - p = malloc(size + 1); - if (!p) { - fprintf(stderr, "gnutls_malloc\n"); - exit(1); - } - - ret = - gnutls_x509_crt_export(crt, - GNUTLS_X509_FMT_PEM, - p, &size); - } + gnutls_x509_crt_export2(crt, + GNUTLS_X509_FMT_PEM, &pem); if (ret < 0) { fprintf(stderr, "Encoding error: %s\n", gnutls_strerror(ret)); return; } - p[size] = 0; - fputs("\n", out); - fputs(p, out); - fputs("\n", out); + log_msg(out, "\n%s\n", (char*)pem.data); - gnutls_free(p); + gnutls_free(pem.data); } gnutls_x509_crt_deinit(crt); } } -#ifdef ENABLE_OPENPGP -static void print_openpgp_info_compact(gnutls_session_t session) +static void +print_rawpk_info(gnutls_session_t session, FILE *out, int flag, int print_cert, int print_crt_status) { - - gnutls_openpgp_crt_t crt; + gnutls_pcert_st pk_cert; + gnutls_pk_algorithm_t pk_algo; const gnutls_datum_t *cert_list; unsigned int cert_list_size = 0; int ret; cert_list = gnutls_certificate_get_peers(session, &cert_list_size); + if (cert_list_size == 0) { + if (print_crt_status) + fprintf(stderr, "No certificates found!\n"); + return; + } - if (cert_list_size > 0) { - gnutls_datum_t cinfo; - - gnutls_openpgp_crt_init(&crt); - ret = gnutls_openpgp_crt_import(crt, &cert_list[0], - GNUTLS_OPENPGP_FMT_RAW); - if (ret < 0) { - fprintf(stderr, "Decoding error: %s\n", - gnutls_strerror(ret)); - return; - } + log_msg(out, "- Certificate type: Raw Public Key\n"); + log_msg(out, "- Got %d Raw public-key(s).\n", + cert_list_size); - ret = - gnutls_openpgp_crt_print(crt, GNUTLS_CRT_PRINT_COMPACT, - &cinfo); - if (ret == 0) { - printf("- OpenPGP cert: %s\n", cinfo.data); - gnutls_free(cinfo.data); - } - gnutls_openpgp_crt_deinit(crt); + ret = gnutls_pcert_import_rawpk_raw(&pk_cert, cert_list, GNUTLS_X509_FMT_DER, 0, 0); + if (ret < 0) { + fprintf(stderr, "Decoding error: %s\n", + gnutls_strerror(ret)); + return; } -} -static void -print_openpgp_info(gnutls_session_t session, FILE *out, int flag, int print_cert) -{ + pk_algo = gnutls_pubkey_get_pk_algorithm(pk_cert.pubkey, NULL); - gnutls_openpgp_crt_t crt; - const gnutls_datum_t *cert_list; - unsigned int cert_list_size = 0; - int ret; + log_msg(out, "- Raw pk info:\n"); + log_msg(out, " - PK algo: %s\n", gnutls_pk_algorithm_get_name(pk_algo)); - fprintf(out, "- Certificate type: OpenPGP\n"); + if (print_cert) { + gnutls_datum_t pem; - cert_list = gnutls_certificate_get_peers(session, &cert_list_size); - - if (cert_list_size > 0) { - gnutls_datum_t cinfo; - - gnutls_openpgp_crt_init(&crt); - ret = gnutls_openpgp_crt_import(crt, &cert_list[0], - GNUTLS_OPENPGP_FMT_RAW); + ret = gnutls_pubkey_export2(pk_cert.pubkey, GNUTLS_X509_FMT_PEM, &pem); if (ret < 0) { - fprintf(stderr, "Decoding error: %s\n", + fprintf(stderr, "Encoding error: %s\n", gnutls_strerror(ret)); return; } - ret = gnutls_openpgp_crt_print(crt, flag, &cinfo); - if (ret == 0) { - fprintf(out, "- %s\n", cinfo.data); - gnutls_free(cinfo.data); - } - - if (print_cert) { - size_t size = 0; - char *p = NULL; - - ret = - gnutls_openpgp_crt_export(crt, - GNUTLS_OPENPGP_FMT_BASE64, - p, &size); - if (ret == GNUTLS_E_SHORT_MEMORY_BUFFER) { - p = malloc(size); - if (!p) { - fprintf(stderr, "gnutls_malloc\n"); - exit(1); - } - - ret = - gnutls_openpgp_crt_export(crt, - GNUTLS_OPENPGP_FMT_BASE64, - p, &size); - } - if (ret < 0) { - fprintf(stderr, "Encoding error: %s\n", - gnutls_strerror(ret)); - return; - } - - fputs(p, out); - fputs("\n", out); + log_msg(out, "\n%s\n", (char*)pem.data); - gnutls_free(p); - } - - gnutls_openpgp_crt_deinit(crt); + gnutls_free(pem.data); } -} -#endif +} /* returns false (0) if not verified, or true (1) otherwise */ @@ -367,12 +259,12 @@ int cert_verify(gnutls_session_t session, const char *hostname, const char *purp rc = gnutls_certificate_verify_peers(session, data, elements, &status); if (rc == GNUTLS_E_NO_CERTIFICATE_FOUND) { - printf("- Peer did not send any certificate.\n"); + log_msg(stdout, "- Peer did not send any certificate.\n"); return 0; } if (rc < 0) { - printf("- Could not verify certificate (err: %s)\n", + log_msg(stdout, "- Could not verify certificate (err: %s)\n", gnutls_strerror(rc)); return 0; } @@ -381,12 +273,12 @@ int cert_verify(gnutls_session_t session, const char *hostname, const char *purp rc = gnutls_certificate_verification_status_print(status, type, &out, 0); if (rc < 0) { - printf("- Could not print verification flags (err: %s)\n", + log_msg(stdout, "- Could not print verification flags (err: %s)\n", gnutls_strerror(rc)); return 0; } - printf("- Status: %s\n", out.data); + log_msg(stdout, "- Status: %s\n", out.data); gnutls_free(out.data); @@ -400,92 +292,102 @@ static void print_dh_info(gnutls_session_t session, const char *str, int print) { #if defined(ENABLE_DHE) || defined(ENABLE_ANON) - printf("- %sDiffie-Hellman parameters\n", str); - printf(" - Using prime: %d bits\n", + unsigned group; + int ret; + gnutls_datum_t raw_gen = { NULL, 0 }; + gnutls_datum_t raw_prime = { NULL, 0 }; + gnutls_dh_params_t dh_params = NULL; + unsigned char *params_data = NULL; + size_t params_data_size = 0; + + if (!print) + return; + + group = gnutls_group_get(session); + if (group != 0) { + return; + } + + log_msg(stdout, "- %sDiffie-Hellman parameters\n", str); + log_msg(stdout, " - Using prime: %d bits\n", gnutls_dh_get_prime_bits(session)); - printf(" - Secret key: %d bits\n", + log_msg(stdout, " - Secret key: %d bits\n", gnutls_dh_get_secret_bits(session)); - printf(" - Peer's public key: %d bits\n", + log_msg(stdout, " - Peer's public key: %d bits\n", gnutls_dh_get_peers_public_bits(session)); - if (print) { - int ret; - gnutls_datum_t raw_gen = { NULL, 0 }; - gnutls_datum_t raw_prime = { NULL, 0 }; - gnutls_dh_params_t dh_params = NULL; - unsigned char *params_data = NULL; - size_t params_data_size = 0; - - ret = gnutls_dh_get_group(session, &raw_gen, &raw_prime); - if (ret) { - fprintf(stderr, "gnutls_dh_get_group %d\n", ret); - goto out; - } + ret = gnutls_dh_get_group(session, &raw_gen, &raw_prime); + if (ret) { + fprintf(stderr, "gnutls_dh_get_group %d\n", ret); + goto out; + } - ret = gnutls_dh_params_init(&dh_params); - if (ret) { - fprintf(stderr, "gnutls_dh_params_init %d\n", ret); - goto out; - } + ret = gnutls_dh_params_init(&dh_params); + if (ret) { + fprintf(stderr, "gnutls_dh_params_init %d\n", ret); + goto out; + } - ret = - gnutls_dh_params_import_raw(dh_params, &raw_prime, + ret = + gnutls_dh_params_import_raw(dh_params, &raw_prime, &raw_gen); - if (ret) { - fprintf(stderr, "gnutls_dh_params_import_raw %d\n", - ret); - goto out; - } + if (ret) { + fprintf(stderr, "gnutls_dh_params_import_raw %d\n", + ret); + goto out; + } - ret = gnutls_dh_params_export_pkcs3(dh_params, - GNUTLS_X509_FMT_PEM, - params_data, - ¶ms_data_size); - if (ret != GNUTLS_E_SHORT_MEMORY_BUFFER) { - fprintf(stderr, - "gnutls_dh_params_export_pkcs3 %d\n", ret); - goto out; - } + ret = gnutls_dh_params_export_pkcs3(dh_params, + GNUTLS_X509_FMT_PEM, + params_data, + ¶ms_data_size); + if (ret != GNUTLS_E_SHORT_MEMORY_BUFFER) { + fprintf(stderr, + "gnutls_dh_params_export_pkcs3 %d\n", ret); + goto out; + } - params_data = gnutls_malloc(params_data_size); - if (!params_data) { - fprintf(stderr, "gnutls_malloc %d\n", ret); - goto out; - } + params_data = gnutls_malloc(params_data_size); + if (!params_data) { + fprintf(stderr, "gnutls_malloc %d\n", ret); + goto out; + } - ret = gnutls_dh_params_export_pkcs3(dh_params, - GNUTLS_X509_FMT_PEM, - params_data, - ¶ms_data_size); - if (ret) { - fprintf(stderr, - "gnutls_dh_params_export_pkcs3-2 %d\n", - ret); - goto out; - } + ret = gnutls_dh_params_export_pkcs3(dh_params, + GNUTLS_X509_FMT_PEM, + params_data, + ¶ms_data_size); + if (ret) { + fprintf(stderr, + "gnutls_dh_params_export_pkcs3-2 %d\n", + ret); + goto out; + } - printf(" - PKCS#3 format:\n\n%.*s\n", - (int) params_data_size, params_data); + log_msg(stdout, " - PKCS#3 format:\n\n%.*s\n", + (int) params_data_size, params_data); - out: - gnutls_free(params_data); - gnutls_free(raw_prime.data); - gnutls_free(raw_gen.data); - gnutls_dh_params_deinit(dh_params); - } + out: + gnutls_free(params_data); + gnutls_free(raw_prime.data); + gnutls_free(raw_gen.data); + gnutls_dh_params_deinit(dh_params); #endif } -static void print_ecdh_info(gnutls_session_t session, const char *str) +static void print_ecdh_info(gnutls_session_t session, const char *str, int print) { int curve; - printf("- %sEC Diffie-Hellman parameters\n", str); + if (!print) + return; + + log_msg(stdout, "- %sEC Diffie-Hellman parameters\n", str); curve = gnutls_ecc_curve_get(session); - printf(" - Using curve: %s\n", gnutls_ecc_curve_get_name(curve)); - printf(" - Curve size: %d bits\n", + log_msg(stdout, " - Using curve: %s\n", gnutls_ecc_curve_get_name(curve)); + log_msg(stdout, " - Curve size: %d bits\n", gnutls_ecc_curve_get_size(curve) * 8); } @@ -500,16 +402,19 @@ int print_info(gnutls_session_t session, int verbose, int flags) gnutls_srtp_profile_t srtp_profile; gnutls_datum_t p; char *desc; + gnutls_protocol_t version; int rc; desc = gnutls_session_get_desc(session); - printf("- Description: %s\n", desc); + log_msg(stdout, "- Description: %s\n", desc); gnutls_free(desc); /* print session ID */ gnutls_session_get_id(session, session_id, &session_id_size); - printf("- Session ID: %s\n", - raw_to_string(session_id, session_id_size)); + if (session_id_size > 0) { + log_msg(stdout, "- Session ID: %s\n", + raw_to_string(session_id, session_id_size)); + } /* print the key exchange's algorithm name */ @@ -520,7 +425,7 @@ int print_info(gnutls_session_t session, int verbose, int flags) #ifdef ENABLE_ANON case GNUTLS_CRD_ANON: if (kx == GNUTLS_KX_ANON_ECDH) - print_ecdh_info(session, "Anonymous "); + print_ecdh_info(session, "Anonymous ", verbose); else print_dh_info(session, "Anonymous ", verbose); break; @@ -531,7 +436,7 @@ int print_info(gnutls_session_t session, int verbose, int flags) * side. */ if (gnutls_srp_server_get_username(session) != NULL) - printf("- SRP authentication. Connected as '%s'\n", + log_msg(stdout, "- SRP authentication. Connected as '%s'\n", gnutls_srp_server_get_username(session)); break; #endif @@ -540,21 +445,21 @@ int print_info(gnutls_session_t session, int verbose, int flags) /* This returns NULL in server side. */ if (gnutls_psk_client_get_hint(session) != NULL) - printf("- PSK authentication. PSK hint '%s'\n", + log_msg(stdout, "- PSK authentication. PSK hint '%s'\n", gnutls_psk_client_get_hint(session)); /* This returns NULL in client side. */ if (gnutls_psk_server_get_username(session) != NULL) - printf("- PSK authentication. Connected as '%s'\n", + log_msg(stdout, "- PSK authentication. Connected as '%s'\n", gnutls_psk_server_get_username(session)); if (kx == GNUTLS_KX_DHE_PSK) print_dh_info(session, "Ephemeral ", verbose); if (kx == GNUTLS_KX_ECDHE_PSK) - print_ecdh_info(session, "Ephemeral "); + print_ecdh_info(session, "Ephemeral ", verbose); break; #endif case GNUTLS_CRD_IA: - printf("- TLS/IA authentication\n"); + log_msg(stdout, "- TLS/IA authentication\n"); break; case GNUTLS_CRD_CERTIFICATE: { @@ -565,13 +470,13 @@ int print_info(gnutls_session_t session, int verbose, int flags) /* This fails in client side */ if (gnutls_server_name_get (session, dns, &dns_size, &type, 0) == 0) { - printf("- Given server name[%d]: %s\n", + log_msg(stdout, "- Given server name[%d]: %s\n", type, dns); } } if ((flags & P_WAIT_FOR_CERT) && gnutls_certificate_get_ours(session) == 0) - printf("- No certificate was sent to peer\n"); + log_msg(stdout, "- No certificate was sent to peer\n"); if (flags& P_PRINT_CERT) print_cert_info(session, verbose, (flags&P_PRINT_CERT)); @@ -580,68 +485,68 @@ int print_info(gnutls_session_t session, int verbose, int flags) print_dh_info(session, "Ephemeral ", verbose); else if (kx == GNUTLS_KX_ECDHE_RSA || kx == GNUTLS_KX_ECDHE_ECDSA) - print_ecdh_info(session, "Ephemeral "); + print_ecdh_info(session, "Ephemeral ", verbose); } - tmp = - SU(gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - printf("- Version: %s\n", tmp); - - tmp = SU(gnutls_kx_get_name(kx)); - printf("- Key Exchange: %s\n", tmp); - if (gnutls_sign_algorithm_get(session) != GNUTLS_SIGN_UNKNOWN) { + if (verbose) { + version = gnutls_protocol_get_version(session); tmp = - SU(gnutls_sign_get_name - (gnutls_sign_algorithm_get(session))); - printf("- Server Signature: %s\n", tmp); - } + SU(gnutls_protocol_get_name(version)); + log_msg(stdout, "- Version: %s\n", tmp); - if (gnutls_sign_algorithm_get_client(session) != - GNUTLS_SIGN_UNKNOWN) { - tmp = - SU(gnutls_sign_get_name - (gnutls_sign_algorithm_get_client(session))); - printf("- Client Signature: %s\n", tmp); - } + if (version < GNUTLS_TLS1_3) { + tmp = SU(gnutls_kx_get_name(kx)); + log_msg(stdout, "- Key Exchange: %s\n", tmp); + } + + if (gnutls_sign_algorithm_get(session) != GNUTLS_SIGN_UNKNOWN) { + tmp = + SU(gnutls_sign_get_name + (gnutls_sign_algorithm_get(session))); + log_msg(stdout, "- Server Signature: %s\n", tmp); + } - tmp = SU(gnutls_cipher_get_name(gnutls_cipher_get(session))); - printf("- Cipher: %s\n", tmp); + if (gnutls_sign_algorithm_get_client(session) != + GNUTLS_SIGN_UNKNOWN) { + tmp = + SU(gnutls_sign_get_name + (gnutls_sign_algorithm_get_client(session))); + log_msg(stdout, "- Client Signature: %s\n", tmp); + } - tmp = SU(gnutls_mac_get_name(gnutls_mac_get(session))); - printf("- MAC: %s\n", tmp); + tmp = SU(gnutls_cipher_get_name(gnutls_cipher_get(session))); + log_msg(stdout, "- Cipher: %s\n", tmp); - tmp = - SU(gnutls_compression_get_name - (gnutls_compression_get(session))); - printf("- Compression: %s\n", tmp); + tmp = SU(gnutls_mac_get_name(gnutls_mac_get(session))); + log_msg(stdout, "- MAC: %s\n", tmp); + } - printf("- Options:"); + log_msg(stdout, "- Options:"); if (gnutls_session_ext_master_secret_status(session)!=0) - printf(" extended master secret,"); + log_msg(stdout, " extended master secret,"); if (gnutls_safe_renegotiation_status(session)!=0) - printf(" safe renegotiation,"); + log_msg(stdout, " safe renegotiation,"); if (gnutls_session_etm_status(session)!=0) - printf(" EtM,"); + log_msg(stdout, " EtM,"); #ifdef ENABLE_OCSP if (gnutls_ocsp_status_request_is_checked(session, GNUTLS_OCSP_SR_IS_AVAIL)!=0) { - printf(" OCSP status request%s,", gnutls_ocsp_status_request_is_checked(session,0)!=0?"":"[ignored]"); + log_msg(stdout, " OCSP status request%s,", gnutls_ocsp_status_request_is_checked(session,0)!=0?"":"[ignored]"); } #endif - printf("\n"); + log_msg(stdout, "\n"); #ifdef ENABLE_DTLS_SRTP rc = gnutls_srtp_get_selected_profile(session, &srtp_profile); if (rc == 0) - printf("- SRTP profile: %s\n", + log_msg(stdout, "- SRTP profile: %s\n", gnutls_srtp_get_profile_name(srtp_profile)); #endif #ifdef ENABLE_ALPN rc = gnutls_alpn_get_selected_protocol(session, &p); if (rc == 0) - printf("- Application protocol: %.*s\n", p.size, p.data); + log_msg(stdout, "- Application protocol: %.*s\n", p.size, p.data); #endif if (verbose) { @@ -656,18 +561,14 @@ int print_info(gnutls_session_t session, int verbose, int flags) else { size_t i; - printf("- Channel binding 'tls-unique': "); + log_msg(stdout, "- Channel binding 'tls-unique': "); for (i = 0; i < cb.size; i++) - printf("%02x", cb.data[i]); - printf("\n"); + log_msg(stdout, "%02x", cb.data[i]); + log_msg(stdout, "\n"); gnutls_free(cb.data); } } - /* Warning: Do not print anything more here. The 'Compression:' - output MUST be the last non-verbose output. This is used by - Emacs starttls.el code. */ - fflush(stdout); return 0; @@ -680,48 +581,26 @@ void print_cert_info(gnutls_session_t session, int verbose, int print_cert) void print_cert_info2(gnutls_session_t session, int verbose, FILE *out, int print_cert) { - int flag; + int flag, print_crt_status = 0; if (verbose) flag = GNUTLS_CRT_PRINT_FULL; else flag = GNUTLS_CRT_PRINT_COMPACT; - if (gnutls_certificate_client_get_request_status(session) != 0) - printf("- Server has requested a certificate.\n"); - - switch (gnutls_certificate_type_get(session)) { - case GNUTLS_CRT_X509: - print_x509_info(session, out, flag, print_cert); - break; -#ifdef ENABLE_OPENPGP - case GNUTLS_CRT_OPENPGP: - print_openpgp_info(session, out, flag, print_cert); - break; -#endif - default: - printf("Unknown type\n"); - break; + if (gnutls_certificate_client_get_request_status(session) != 0) { + log_msg(stdout, "- Server has requested a certificate.\n"); + print_crt_status = 1; } -} - -void print_cert_info_compact(gnutls_session_t session) -{ - - if (gnutls_certificate_client_get_request_status(session) != 0) - printf("- Server has requested a certificate.\n"); - switch (gnutls_certificate_type_get(session)) { + switch (gnutls_certificate_type_get2(session, GNUTLS_CTYPE_PEERS)) { case GNUTLS_CRT_X509: - print_x509_info_compact(session); + print_x509_info(session, out, flag, print_cert, print_crt_status); break; -#ifdef ENABLE_OPENPGP - case GNUTLS_CRT_OPENPGP: - print_openpgp_info_compact(session); + case GNUTLS_CRT_RAWPK: + print_rawpk_info(session, out, flag, print_cert, print_crt_status); break; -#endif default: - printf("Unknown type\n"); break; } } @@ -742,11 +621,14 @@ void print_list(const char *priorities, int verbose) const unsigned int *list; if (priorities != NULL) { - printf("Cipher suites for %s\n", priorities); + log_msg(stdout, "Cipher suites for %s\n", priorities); ret = gnutls_priority_init(&pcache, priorities, &err); if (ret < 0) { - fprintf(stderr, "Syntax error at: %s\n", err); + if (ret == GNUTLS_E_INVALID_REQUEST) + fprintf(stderr, "Syntax error at: %s\n", err); + else + fprintf(stderr, "Error in priorities: %s\n", gnutls_strerror(ret)); exit(1); } @@ -765,146 +647,130 @@ void print_list(const char *priorities, int verbose) NULL, &version); if (name != NULL) - printf("%-50s\t0x%02x, 0x%02x\t%s\n", + log_msg(stdout, "%-50s\t0x%02x, 0x%02x\t%s\n", name, (unsigned char) id[0], (unsigned char) id[1], gnutls_protocol_get_name(version)); } - printf("\n"); + log_msg(stdout, "\n"); +#if 0 { ret = - gnutls_priority_certificate_type_list(pcache, - &list); + gnutls_priority_certificate_type_list2(pcache, + &list, + GNUTLS_CTYPE_CLIENT); - printf("Certificate types: "); + log_msg(stdout, "Certificate types: "); if (ret == 0) - printf("none\n"); + log_msg(stdout, "none\n"); for (i = 0; i < (unsigned) ret; i++) { - printf("CTYPE-%s", + log_msg(stdout, "CTYPE-%s", gnutls_certificate_type_get_name (list[i])); if (i + 1 != (unsigned) ret) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } +#endif { ret = gnutls_priority_protocol_list(pcache, &list); - printf("Protocols: "); + log_msg(stdout, "Protocols: "); if (ret == 0) - printf("none\n"); + log_msg(stdout, "none\n"); for (i = 0; i < (unsigned) ret; i++) { - printf("VERS-%s", + log_msg(stdout, "VERS-%s", gnutls_protocol_get_name(list[i])); if (i + 1 != (unsigned) ret) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { ret = gnutls_priority_cipher_list(pcache, &list); - printf("Ciphers: "); + log_msg(stdout, "Ciphers: "); if (ret == 0) - printf("none\n"); + log_msg(stdout, "none\n"); for (i = 0; i < (unsigned) ret; i++) { - printf("%s", + log_msg(stdout, "%s", gnutls_cipher_get_name(list[i])); if (i + 1 != (unsigned) ret) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { ret = gnutls_priority_mac_list(pcache, &list); - printf("MACs: "); + log_msg(stdout, "MACs: "); if (ret == 0) - printf("none\n"); + log_msg(stdout, "none\n"); for (i = 0; i < (unsigned) ret; i++) { - printf("%s", + log_msg(stdout, "%s", gnutls_mac_get_name(list[i])); if (i + 1 != (unsigned) ret) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { ret = gnutls_priority_kx_list(pcache, &list); - printf("Key Exchange Algorithms: "); + log_msg(stdout, "Key Exchange Algorithms: "); if (ret == 0) - printf("none\n"); + log_msg(stdout, "none\n"); for (i = 0; i < (unsigned) ret; i++) { - printf("%s", + log_msg(stdout, "%s", gnutls_kx_get_name(list[i])); if (i + 1 != (unsigned) ret) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { ret = - gnutls_priority_compression_list(pcache, - &list); + gnutls_priority_group_list(pcache, &list); - printf("Compression: "); + log_msg(stdout, "Groups: "); if (ret == 0) - printf("none\n"); + log_msg(stdout, "none\n"); for (i = 0; i < (unsigned) ret; i++) { - printf("COMP-%s", - gnutls_compression_get_name(list - [i])); + log_msg(stdout, "GROUP-%s", + gnutls_group_get_name(list[i])); if (i + 1 != (unsigned) ret) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); - } - } - - { - ret = - gnutls_priority_ecc_curve_list(pcache, &list); - - printf("Elliptic curves: "); - if (ret == 0) - printf("none\n"); - for (i = 0; i < (unsigned) ret; i++) { - printf("CURVE-%s", - gnutls_ecc_curve_get_name(list[i])); - if (i + 1 != (unsigned) ret) - printf(", "); - else - printf("\n"); + log_msg(stdout, "\n"); } } { ret = gnutls_priority_sign_list(pcache, &list); - printf("PK-signatures: "); + log_msg(stdout, "PK-signatures: "); if (ret == 0) - printf("none\n"); + log_msg(stdout, "none\n"); for (i = 0; i < (unsigned) ret; i++) { - printf("SIGN-%s", + log_msg(stdout, "SIGN-%s", gnutls_sign_algorithm_get_name(list [i])); if (i + 1 != (unsigned) ret) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } @@ -912,99 +778,99 @@ void print_list(const char *priorities, int verbose) return; } - printf("Cipher suites:\n"); + log_msg(stdout, "Cipher suites:\n"); for (i = 0; (name = gnutls_cipher_suite_info (i, id, &kx, &cipher, &mac, &version)); i++) { - printf("%-50s\t0x%02x, 0x%02x\t%s\n", + log_msg(stdout, "%-50s\t0x%02x, 0x%02x\t%s\n", name, (unsigned char) id[0], (unsigned char) id[1], gnutls_protocol_get_name(version)); if (verbose) - printf - ("\tKey exchange: %s\n\tCipher: %s\n\tMAC: %s\n\n", + log_msg + (stdout, "\tKey exchange: %s\n\tCipher: %s\n\tMAC: %s\n\n", gnutls_kx_get_name(kx), gnutls_cipher_get_name(cipher), gnutls_mac_get_name(mac)); } - printf("\n"); + log_msg(stdout, "\n"); { const gnutls_certificate_type_t *p = gnutls_certificate_type_list(); - printf("Certificate types: "); + log_msg(stdout, "Certificate types: "); for (; *p; p++) { - printf("CTYPE-%s", + log_msg(stdout, "CTYPE-%s", gnutls_certificate_type_get_name(*p)); if (*(p + 1)) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { const gnutls_protocol_t *p = gnutls_protocol_list(); - printf("Protocols: "); + log_msg(stdout, "Protocols: "); for (; *p; p++) { - printf("VERS-%s", gnutls_protocol_get_name(*p)); + log_msg(stdout, "VERS-%s", gnutls_protocol_get_name(*p)); if (*(p + 1)) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { const gnutls_cipher_algorithm_t *p = gnutls_cipher_list(); - printf("Ciphers: "); + log_msg(stdout, "Ciphers: "); for (; *p; p++) { - printf("%s", gnutls_cipher_get_name(*p)); + log_msg(stdout, "%s", gnutls_cipher_get_name(*p)); if (*(p + 1)) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { const gnutls_mac_algorithm_t *p = gnutls_mac_list(); - printf("MACs: "); + log_msg(stdout, "MACs: "); for (; *p; p++) { - printf("%s", gnutls_mac_get_name(*p)); + log_msg(stdout, "%s", gnutls_mac_get_name(*p)); if (*(p + 1)) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { const gnutls_digest_algorithm_t *p = gnutls_digest_list(); - printf("Digests: "); + log_msg(stdout, "Digests: "); for (; *p; p++) { - printf("%s", gnutls_digest_get_name(*p)); + log_msg(stdout, "%s", gnutls_digest_get_name(*p)); if (*(p + 1)) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { const gnutls_kx_algorithm_t *p = gnutls_kx_list(); - printf("Key exchange algorithms: "); + log_msg(stdout, "Key exchange algorithms: "); for (; *p; p++) { - printf("%s", gnutls_kx_get_name(*p)); + log_msg(stdout, "%s", gnutls_kx_get_name(*p)); if (*(p + 1)) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } @@ -1012,58 +878,95 @@ void print_list(const char *priorities, int verbose) const gnutls_compression_method_t *p = gnutls_compression_list(); - printf("Compression: "); + log_msg(stdout, "Compression: "); for (; *p; p++) { - printf("COMP-%s", gnutls_compression_get_name(*p)); + log_msg(stdout, "COMP-%s", gnutls_compression_get_name(*p)); if (*(p + 1)) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { - const gnutls_ecc_curve_t *p = gnutls_ecc_curve_list(); + const gnutls_group_t *p = gnutls_group_list(); - printf("Elliptic curves: "); + log_msg(stdout, "Groups: "); for (; *p; p++) { - printf("CURVE-%s", gnutls_ecc_curve_get_name(*p)); + log_msg(stdout, "GROUP-%s", gnutls_group_get_name(*p)); if (*(p + 1)) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { const gnutls_pk_algorithm_t *p = gnutls_pk_list(); - printf("Public Key Systems: "); + log_msg(stdout, "Public Key Systems: "); for (; *p; p++) { - printf("%s", gnutls_pk_algorithm_get_name(*p)); + log_msg(stdout, "%s", gnutls_pk_algorithm_get_name(*p)); if (*(p + 1)) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } { const gnutls_sign_algorithm_t *p = gnutls_sign_list(); - printf("PK-signatures: "); + log_msg(stdout, "PK-signatures: "); for (; *p; p++) { - printf("SIGN-%s", + log_msg(stdout, "SIGN-%s", gnutls_sign_algorithm_get_name(*p)); if (*(p + 1)) - printf(", "); + log_msg(stdout, ", "); else - printf("\n"); + log_msg(stdout, "\n"); } } } -int check_command(gnutls_session_t session, const char *str) +void +print_key_material(gnutls_session_t session, const char *label, size_t size) +{ + gnutls_datum_t bin = { NULL, 0 }, hex = { NULL, 0 }; + int ret; + + bin.data = gnutls_malloc(size); + if (!bin.data) { + fprintf(stderr, "Error in gnutls_malloc: %s\n", + gnutls_strerror(GNUTLS_E_MEMORY_ERROR)); + goto out; + } + + bin.size = size; + + ret = gnutls_prf_rfc5705(session, strlen(label), label, + 0, NULL, size, (char *)bin.data); + if (ret < 0) { + fprintf(stderr, "Error in gnutls_prf_rfc5705: %s\n", + gnutls_strerror(ret)); + goto out; + } + + ret = gnutls_hex_encode2(&bin, &hex); + if (ret < 0) { + fprintf(stderr, "Error in hex encoding: %s\n", + gnutls_strerror(ret)); + goto out; + } + log_msg(stdout, "- Key material: %s\n", hex.data); + fflush(stdout); + + out: + gnutls_free(bin.data); + gnutls_free(hex.data); +} + +int check_command(gnutls_session_t session, const char *str, unsigned no_cli_cert) { size_t len = strnlen(str, 128); int ret; @@ -1078,6 +981,24 @@ int check_command(gnutls_session_t session, const char *str) "*** Sending rehandshake request\n"); gnutls_rehandshake(session); return 1; + } else if (strncmp + (str, "**REAUTH**", + sizeof("**REAUTH**") - 1) == 0) { + /* in case we have a re-auth cmd prepare for it */ + if (no_cli_cert) + gnutls_certificate_server_set_request(session, GNUTLS_CERT_REQUIRE); + + fprintf(stderr, + "*** Sending re-auth request\n"); + do { + ret = gnutls_reauth(session, 0); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret < 0) { + fprintf(stderr, "reauth: %s\n", + gnutls_strerror(ret)); + return ret; + } + return 1; } else if (strncmp (str, "**HEARTBEAT**", @@ -1092,7 +1013,7 @@ int check_command(gnutls_session_t session, const char *str) } else { fprintf(stderr, "ping: %s\n", gnutls_strerror(ret)); - exit(1); + return ret; } } return 2; @@ -1101,6 +1022,54 @@ int check_command(gnutls_session_t session, const char *str) return 0; } +/* error is indicated by returning an empty string */ +void getpass_copy(char *pass, size_t max_pass_size, const char *prompt) +{ + char *tmp; + size_t len; + + tmp = getpass(prompt); + if (tmp == NULL) { + pass[0] = 0; + return; + } + + len = strlen(tmp); + if (len >= max_pass_size) { + gnutls_memset(tmp, 0, len); + pass[0] = 0; + return; + } + + strcpy(pass, tmp); + gnutls_memset(tmp, 0, len); + + return; +} + +/* error is indicated by returning an empty string */ +void getenv_copy(char *str, size_t max_str_size, const char *envvar) +{ + char *tmp; + size_t len; + + tmp = getenv(envvar); + if (tmp == NULL) { + str[0] = 0; + return; + } + + len = strlen(tmp); + if (len >= max_str_size) { + str[0] = 0; + return; + } + + strcpy(str, tmp); + + return; +} + #define MIN(x,y) ((x)<(y))?(x):(y) #define MAX_CACHE_TRIES 5 int @@ -1108,36 +1077,40 @@ pin_callback(void *user, int attempt, const char *token_url, const char *token_label, unsigned int flags, char *pin, size_t pin_max) { - const char *password = NULL; + char password[MAX_PIN_LEN] = ""; common_info_st *info = user; const char *desc; int cache = MAX_CACHE_TRIES; unsigned len; /* allow caching of PIN */ static char *cached_url = NULL; - static char cached_pin[32] = ""; + static char cached_pin[MAX_PIN_LEN] = ""; const char *env; if (flags & GNUTLS_PIN_SO) { env = "GNUTLS_SO_PIN"; desc = "security officer"; + if (info && info->so_pin) + snprintf(password, sizeof(password), "%s", info->so_pin); } else { env = "GNUTLS_PIN"; desc = "user"; + if (info && info->pin) + snprintf(password, sizeof(password), "%s", info->pin); } if (flags & GNUTLS_PIN_FINAL_TRY) { cache = 0; - printf("*** This is the final try before locking!\n"); + log_msg(stdout, "*** This is the final try before locking!\n"); } if (flags & GNUTLS_PIN_COUNT_LOW) { cache = 0; - printf("*** Only few tries left before locking!\n"); + log_msg(stdout, "*** Only few tries left before locking!\n"); } if (flags & GNUTLS_PIN_WRONG) { cache = 0; - printf("*** Wrong PIN has been provided!\n"); + log_msg(stdout, "*** Wrong PIN has been provided!\n"); } if (cache > 0 && cached_url != NULL) { @@ -1148,34 +1121,44 @@ pin_callback(void *user, int attempt, const char *token_url, exit(1); } - fprintf(stderr, - "Re-using cached PIN for token '%s'\n", - token_label); + if (info && info->verbose) { + fprintf(stderr, + "Re-using cached PIN for token '%s'\n", + token_label); + } strcpy(pin, cached_pin); cache--; return 0; } } - password = getenv(env); - if (password == NULL) /* compatibility */ - password = getenv("GNUTLS_PIN"); + if (password[0] == 0) { + getenv_copy(password, sizeof(password), env); + if (password[0] == 0) /* compatibility */ + getenv_copy(password, sizeof(password), "GNUTLS_PIN"); + } - if (password == NULL && (info == NULL || info->batch == 0)) { - fprintf(stderr, "Token '%s' with URL '%s' ", token_label, token_url); - fprintf(stderr, "requires %s PIN\n", desc); + if (password[0] == 0 && (info == NULL || info->batch == 0 || info->ask_pass != 0)) { + if (token_label && token_label[0] != 0) { + fprintf(stderr, "Token '%s' with URL '%s' ", token_label, token_url); + fprintf(stderr, "requires %s PIN\n", desc); + getpass_copy(password, sizeof(password), "Enter PIN: "); + } else { + getpass_copy(password, sizeof(password), "Enter password: "); + } - password = getpass("Enter PIN: "); } else { if (flags & GNUTLS_PIN_WRONG) { - fprintf(stderr, "Token '%s' with URL '%s' ", token_label, token_url); - fprintf(stderr, "requires %s PIN\n", desc); + if (token_label && token_label[0] != 0) { + fprintf(stderr, "Token '%s' with URL '%s' ", token_label, token_url); + fprintf(stderr, "requires %s PIN\n", desc); + } fprintf(stderr, "Cannot continue with a wrong password in the environment.\n"); exit(1); } } - if (password == NULL || password[0] == 0 || password[0] == '\n') { + if (password[0] == 0 || password[0] == '\n') { fprintf(stderr, "No PIN given.\n"); if (info != NULL && info->batch != 0) { fprintf(stderr, "note: when operating in batch mode, set the GNUTLS_PIN or GNUTLS_SO_PIN environment variables\n"); @@ -1200,8 +1183,6 @@ pin_callback(void *user, int attempt, const char *token_url, else cached_url = NULL; - cache = MAX_CACHE_TRIES; - return 0; } @@ -1217,9 +1198,12 @@ token_callback(void *user, const char *label, const unsigned retry) fprintf(stderr, "Could not find token %s\n", label); return -1; } - printf("Please insert token '%s' in slot and press enter\n", + log_msg(stdout, "Please insert token '%s' in slot and press enter\n", label); - fgets(buf, sizeof(buf), stdin); + if (fgets(buf, sizeof(buf), stdin) == NULL) { + fprintf(stderr, "error reading input\n"); + return -1; + } return 0; } @@ -1248,3 +1232,42 @@ void sockets_init(void) signal(SIGPIPE, SIG_IGN); #endif } + + +int log_msg(FILE *file, const char *message, ...) +{ + va_list args; + int rv; + + va_start(args, message); + + rv = vfprintf(logfile ? logfile : file, message, args); + + va_end(args); + + return rv; +} + +void log_set(FILE *file) +{ + logfile = file; +} + +/* This is very similar to ctime() but it does not force a newline. + */ +char *simple_ctime(const time_t *t, char out[SIMPLE_CTIME_BUF_SIZE]) +{ + struct tm tm; + + if (localtime_r(t, &tm) == NULL) + goto error; + + if (!strftime(out, SIMPLE_CTIME_BUF_SIZE, "%c", &tm)) + goto error; + + return out; + + error: + snprintf(out, SIMPLE_CTIME_BUF_SIZE, "[error]"); + return out; +} diff --git a/src/common.h b/src/common.h index f1c828ce40..884a355a82 100644 --- a/src/common.h +++ b/src/common.h @@ -15,16 +15,17 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ -#ifndef INCLUDE_COMMON_H -# define INCLUDE_COMMON_H +#ifndef GNUTLS_SRC_COMMON_H +#define GNUTLS_SRC_COMMON_H #define SERVER "127.0.0.1" #include #include +#include #include #include #include @@ -40,6 +41,7 @@ #include #include #include +#include "socket.h" #undef OCSP_RESPONSE #endif @@ -59,7 +61,10 @@ extern const char str_unknown[]; #define P_WAIT_FOR_CERT (1<<1) int print_info(gnutls_session_t state, int verbose, int flags); void print_cert_info(gnutls_session_t, int flag, int print_cert); -void print_cert_info_compact(gnutls_session_t session); +void print_key_material(gnutls_session_t, const char *label, size_t size); + +int log_msg(FILE *file, const char *message, ...) __attribute__((format(printf, 2, 3))); +void log_set(FILE *file); void print_cert_info2(gnutls_session_t, int flag, FILE *fp, int print_cert); @@ -69,7 +74,11 @@ int cert_verify(gnutls_session_t session, const char *hostname, const char *purp const char *raw_to_string(const unsigned char *raw, size_t raw_size); const char *raw_to_hex(const unsigned char *raw, size_t raw_size); const char *raw_to_base64(const unsigned char *raw, size_t raw_size); -int check_command(gnutls_session_t session, const char *str); +int check_command(gnutls_session_t session, const char *str, unsigned no_cli_cert); + +#define MAX_PIN_LEN GNUTLS_PKCS11_MAX_PIN_LEN +void getenv_copy(char *str, size_t max_str_size, const char *envvar); +void getpass_copy(char *pass, size_t max_pass_size, const char *prompt); int pin_callback(void *user, int attempt, const char *token_url, @@ -96,17 +105,14 @@ static int system_recv_timeout(gnutls_transport_ptr_t ptr, unsigned int ms) { fd_set rfds; struct timeval tv; - int ret, fd = (long)ptr; + socket_st *hd = ptr; + int fd = hd->fd; FD_ZERO(&rfds); FD_SET(fd, &rfds); - tv.tv_sec = 0; - tv.tv_usec = ms * 1000; - while (tv.tv_usec >= 1000000) { - tv.tv_usec -= 1000000; - tv.tv_sec++; - } + tv.tv_sec = ms / 1000; + tv.tv_usec = (ms % 1000) * 1000; return select(fd + 1, &rfds, NULL, NULL, &tv); } @@ -114,13 +120,17 @@ static int system_recv_timeout(gnutls_transport_ptr_t ptr, unsigned int ms) static ssize_t system_write(gnutls_transport_ptr ptr, const void *data, size_t data_size) { - return send((long)ptr, data, data_size, 0); + socket_st *hd = ptr; + + return send(hd->fd, data, data_size, 0); } static ssize_t system_read(gnutls_transport_ptr_t ptr, void *data, size_t data_size) { - return recv((long)ptr, data, data_size, 0); + socket_st *hd = ptr; + + return recv(hd->fd, data, data_size, 0); } static @@ -134,4 +144,7 @@ void set_read_funcs(gnutls_session_t session) # define set_read_funcs(x) #endif -#endif +#define SIMPLE_CTIME_BUF_SIZE 64 +char *simple_ctime(const time_t *t, char buf[SIMPLE_CTIME_BUF_SIZE]); + +#endif /* GNUTLS_SRC_COMMON_H */ diff --git a/src/danetool-args.c.bak b/src/danetool-args.c.bak deleted file mode 100644 index b4d2cd803c..0000000000 --- a/src/danetool-args.c.bak +++ /dev/null @@ -1,1723 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (danetool-args.c) - * - * It has been AutoGen-ed - * From the definitions danetool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This source file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the danetool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The danetool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * danetool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * danetool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef __doxygen__ -#define OPTION_CODE_COMPILE 1 -#include "danetool-args.h" -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern FILE * option_usage_fp; -#define zCopyright (danetool_opt_strs+0) -#define zLicenseDescrip (danetool_opt_strs+289) - - -#ifndef NULL -# define NULL 0 -#endif - -/** - * static const strings for danetool options - */ -static char const danetool_opt_strs[2884] = -/* 0 */ "danetool @VERSION@\n" - "Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n" - "This is free software. It is licensed for use, modification and\n" - "redistribution under the terms of the GNU General Public License,\n" - "version 3 or later \n\0" -/* 289 */ "danetool is free software: you can redistribute it and/or modify it under\n" - "the terms of the GNU General Public License as published by the Free\n" - "Software Foundation, either version 3 of the License, or (at your option)\n" - "any later version.\n\n" - "danetool is distributed in the hope that it will be useful, but WITHOUT ANY\n" - "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n" - "FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n" - "details.\n\n" - "You should have received a copy of the GNU General Public License along\n" - "with this program. If not, see .\n\0" -/* 894 */ "Enable debugging\0" -/* 911 */ "DEBUG\0" -/* 917 */ "debug\0" -/* 923 */ "More verbose output\0" -/* 943 */ "VERBOSE\0" -/* 951 */ "verbose\0" -/* 959 */ "Input file\0" -/* 970 */ "INFILE\0" -/* 977 */ "infile\0" -/* 984 */ "Output file\0" -/* 996 */ "OUTFILE\0" -/* 1004 */ "outfile\0" -/* 1012 */ "Loads a public key file\0" -/* 1036 */ "LOAD_PUBKEY\0" -/* 1048 */ "load-pubkey\0" -/* 1060 */ "Loads a certificate file\0" -/* 1085 */ "LOAD_CERTIFICATE\0" -/* 1102 */ "load-certificate\0" -/* 1119 */ "Sets a DLV file\0" -/* 1135 */ "DLV\0" -/* 1139 */ "dlv\0" -/* 1143 */ "Hash algorithm to use for signing\0" -/* 1177 */ "HASH\0" -/* 1182 */ "hash\0" -/* 1187 */ "Check a host's DANE TLSA entry\0" -/* 1218 */ "CHECK\0" -/* 1224 */ "check\0" -/* 1230 */ "Check only the end-entity's certificate\0" -/* 1270 */ "CHECK_EE\0" -/* 1279 */ "check-ee\0" -/* 1288 */ "Check only the CA's certificate\0" -/* 1320 */ "CHECK_CA\0" -/* 1329 */ "check-ca\0" -/* 1338 */ "Print the DANE RR data on a certificate or public key\0" -/* 1392 */ "TLSA_RR\0" -/* 1400 */ "tlsa-rr\0" -/* 1408 */ "Specify the hostname to be used in the DANE RR\0" -/* 1455 */ "HOST\0" -/* 1460 */ "host\0" -/* 1465 */ "The protocol set for DANE data (tcp, udp etc.)\0" -/* 1512 */ "PROTO\0" -/* 1518 */ "proto\0" -/* 1524 */ "The port or service to connect to, for DANE data\0" -/* 1573 */ "PORT\0" -/* 1578 */ "port\0" -/* 1583 */ "an alias for the 'starttls-proto' option\0" -/* 1624 */ "app-proto\0" -/* 1634 */ "The application protocol to be used to obtain the server's certificate\n" - "(https, ftp, smtp, imap, ldap, xmpp, lmtp, pop3, nntp, sieve, postgres)\0" -/* 1777 */ "STARTTLS_PROTO\0" -/* 1792 */ "starttls-proto\0" -/* 1807 */ "Whether the provided certificate or public key is a Certificate\n" - "Authority\0" -/* 1881 */ "CA\0" -/* 1884 */ "ca\0" -/* 1887 */ "Use the hash of the X.509 certificate, rather than the public key\0" -/* 1953 */ "X509\0" -/* 1958 */ "x509\0" -/* 1963 */ "an alias for the 'domain' option\0" -/* 1996 */ "local\0" -/* 2002 */ "The provided certificate or public key is issued by the local domain\0" -/* 2071 */ "DOMAIN\0" -/* 2078 */ "no-domain\0" -/* 2088 */ "no\0" -/* 2091 */ "Use the local DNS server for DNSSEC resolving\0" -/* 2137 */ "LOCAL_DNS\0" -/* 2147 */ "no-local-dns\0" -/* 2160 */ "Do not verify any DNSSEC signature\0" -/* 2195 */ "INSECURE\0" -/* 2204 */ "insecure\0" -/* 2213 */ "Use DER format for input certificates and private keys\0" -/* 2268 */ "INDER\0" -/* 2274 */ "no-inder\0" -/* 2283 */ "an alias for the 'inder' option\0" -/* 2315 */ "inraw\0" -/* 2321 */ "Print the received DANE data in raw format\0" -/* 2364 */ "PRINT_RAW\0" -/* 2374 */ "no-print-raw\0" -/* 2387 */ "Suppress several informational messages\0" -/* 2427 */ "QUIET\0" -/* 2433 */ "quiet\0" -/* 2439 */ "display extended usage information and exit\0" -/* 2483 */ "help\0" -/* 2488 */ "extended usage information passed thru pager\0" -/* 2533 */ "more-help\0" -/* 2543 */ "output version information and exit\0" -/* 2579 */ "version\0" -/* 2587 */ "DANETOOL\0" -/* 2596 */ "danetool - GnuTLS DANE tool\n" - "Usage: %s [ - [] | --[{=| }] ]...\n\0" -/* 2682 */ "@PACKAGE_BUGREPORT@\0" -/* 2702 */ "\n\0" -/* 2704 */ "Tool to generate and check DNS resource records for the DANE protocol.\n\0" -/* 2776 */ "danetool @VERSION@\0" -/* 2795 */ "danetool --[tlsa-rr|check] [options]\n" - "danetool --help for additional usage instructions.\n"; - -/** - * debug option description: - */ -/** Descriptive text for the debug option */ -#define DEBUG_DESC (danetool_opt_strs+894) -/** Upper-cased name for the debug option */ -#define DEBUG_NAME (danetool_opt_strs+911) -/** Name string for the debug option */ -#define DEBUG_name (danetool_opt_strs+917) -/** Compiled in flag settings for the debug option */ -#define DEBUG_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * verbose option description: - */ -/** Descriptive text for the verbose option */ -#define VERBOSE_DESC (danetool_opt_strs+923) -/** Upper-cased name for the verbose option */ -#define VERBOSE_NAME (danetool_opt_strs+943) -/** Name string for the verbose option */ -#define VERBOSE_name (danetool_opt_strs+951) -/** Compiled in flag settings for the verbose option */ -#define VERBOSE_FLAGS (OPTST_DISABLED) - -/** - * infile option description: - */ -/** Descriptive text for the infile option */ -#define INFILE_DESC (danetool_opt_strs+959) -/** Upper-cased name for the infile option */ -#define INFILE_NAME (danetool_opt_strs+970) -/** Name string for the infile option */ -#define INFILE_name (danetool_opt_strs+977) -/** Compiled in flag settings for the infile option */ -#define INFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * outfile option description: - */ -/** Descriptive text for the outfile option */ -#define OUTFILE_DESC (danetool_opt_strs+984) -/** Upper-cased name for the outfile option */ -#define OUTFILE_NAME (danetool_opt_strs+996) -/** Name string for the outfile option */ -#define OUTFILE_name (danetool_opt_strs+1004) -/** Compiled in flag settings for the outfile option */ -#define OUTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * load-pubkey option description: - */ -/** Descriptive text for the load-pubkey option */ -#define LOAD_PUBKEY_DESC (danetool_opt_strs+1012) -/** Upper-cased name for the load-pubkey option */ -#define LOAD_PUBKEY_NAME (danetool_opt_strs+1036) -/** Name string for the load-pubkey option */ -#define LOAD_PUBKEY_name (danetool_opt_strs+1048) -/** Compiled in flag settings for the load-pubkey option */ -#define LOAD_PUBKEY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * load-certificate option description: - */ -/** Descriptive text for the load-certificate option */ -#define LOAD_CERTIFICATE_DESC (danetool_opt_strs+1060) -/** Upper-cased name for the load-certificate option */ -#define LOAD_CERTIFICATE_NAME (danetool_opt_strs+1085) -/** Name string for the load-certificate option */ -#define LOAD_CERTIFICATE_name (danetool_opt_strs+1102) -/** Compiled in flag settings for the load-certificate option */ -#define LOAD_CERTIFICATE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * dlv option description: - */ -/** Descriptive text for the dlv option */ -#define DLV_DESC (danetool_opt_strs+1119) -/** Upper-cased name for the dlv option */ -#define DLV_NAME (danetool_opt_strs+1135) -/** Name string for the dlv option */ -#define DLV_name (danetool_opt_strs+1139) -/** Compiled in flag settings for the dlv option */ -#define DLV_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * hash option description: - */ -/** Descriptive text for the hash option */ -#define HASH_DESC (danetool_opt_strs+1143) -/** Upper-cased name for the hash option */ -#define HASH_NAME (danetool_opt_strs+1177) -/** Name string for the hash option */ -#define HASH_name (danetool_opt_strs+1182) -/** Compiled in flag settings for the hash option */ -#define HASH_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * check option description: - */ -/** Descriptive text for the check option */ -#define CHECK_DESC (danetool_opt_strs+1187) -/** Upper-cased name for the check option */ -#define CHECK_NAME (danetool_opt_strs+1218) -/** Name string for the check option */ -#define CHECK_name (danetool_opt_strs+1224) -/** Compiled in flag settings for the check option */ -#define CHECK_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * check-ee option description: - */ -/** Descriptive text for the check-ee option */ -#define CHECK_EE_DESC (danetool_opt_strs+1230) -/** Upper-cased name for the check-ee option */ -#define CHECK_EE_NAME (danetool_opt_strs+1270) -/** Name string for the check-ee option */ -#define CHECK_EE_name (danetool_opt_strs+1279) -/** Compiled in flag settings for the check-ee option */ -#define CHECK_EE_FLAGS (OPTST_DISABLED) - -/** - * check-ca option description: - */ -/** Descriptive text for the check-ca option */ -#define CHECK_CA_DESC (danetool_opt_strs+1288) -/** Upper-cased name for the check-ca option */ -#define CHECK_CA_NAME (danetool_opt_strs+1320) -/** Name string for the check-ca option */ -#define CHECK_CA_name (danetool_opt_strs+1329) -/** Compiled in flag settings for the check-ca option */ -#define CHECK_CA_FLAGS (OPTST_DISABLED) - -/** - * tlsa-rr option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the tlsa-rr option */ -#define TLSA_RR_DESC (danetool_opt_strs+1338) -/** Upper-cased name for the tlsa-rr option */ -#define TLSA_RR_NAME (danetool_opt_strs+1392) -/** Name string for the tlsa-rr option */ -#define TLSA_RR_name (danetool_opt_strs+1400) -/** Other options that are required by the tlsa-rr option */ -static int const aTlsa_RrMustList[] = { - INDEX_OPT_HOST, NO_EQUIVALENT }; -/** Compiled in flag settings for the tlsa-rr option */ -#define TLSA_RR_FLAGS (OPTST_DISABLED) - -/** - * host option description: - */ -/** Descriptive text for the host option */ -#define HOST_DESC (danetool_opt_strs+1408) -/** Upper-cased name for the host option */ -#define HOST_NAME (danetool_opt_strs+1455) -/** Name string for the host option */ -#define HOST_name (danetool_opt_strs+1460) -/** Compiled in flag settings for the host option */ -#define HOST_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * proto option description: - */ -/** Descriptive text for the proto option */ -#define PROTO_DESC (danetool_opt_strs+1465) -/** Upper-cased name for the proto option */ -#define PROTO_NAME (danetool_opt_strs+1512) -/** Name string for the proto option */ -#define PROTO_name (danetool_opt_strs+1518) -/** Compiled in flag settings for the proto option */ -#define PROTO_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * port option description: - */ -/** Descriptive text for the port option */ -#define PORT_DESC (danetool_opt_strs+1524) -/** Upper-cased name for the port option */ -#define PORT_NAME (danetool_opt_strs+1573) -/** Name string for the port option */ -#define PORT_name (danetool_opt_strs+1578) -/** Compiled in flag settings for the port option */ -#define PORT_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * app-proto option description: - */ -/** Descriptive text for the app-proto option */ -#define APP_PROTO_DESC (danetool_opt_strs+1583) -#define APP_PROTO_NAME NULL -/** Unmodified name string for the app-proto option */ -#define APP_PROTO_name (danetool_opt_strs+1624) -/** Compiled in flag settings for the app-proto option */ -#define APP_PROTO_FLAGS (STARTTLS_PROTO_FLAGS | OPTST_ALIAS) - -/** - * starttls-proto option description: - */ -/** Descriptive text for the starttls-proto option */ -#define STARTTLS_PROTO_DESC (danetool_opt_strs+1634) -/** Upper-cased name for the starttls-proto option */ -#define STARTTLS_PROTO_NAME (danetool_opt_strs+1777) -/** Name string for the starttls-proto option */ -#define STARTTLS_PROTO_name (danetool_opt_strs+1792) -/** Compiled in flag settings for the starttls-proto option */ -#define STARTTLS_PROTO_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * ca option description: - */ -/** Descriptive text for the ca option */ -#define CA_DESC (danetool_opt_strs+1807) -/** Upper-cased name for the ca option */ -#define CA_NAME (danetool_opt_strs+1881) -/** Name string for the ca option */ -#define CA_name (danetool_opt_strs+1884) -/** Compiled in flag settings for the ca option */ -#define CA_FLAGS (OPTST_DISABLED) - -/** - * x509 option description: - */ -/** Descriptive text for the x509 option */ -#define X509_DESC (danetool_opt_strs+1887) -/** Upper-cased name for the x509 option */ -#define X509_NAME (danetool_opt_strs+1953) -/** Name string for the x509 option */ -#define X509_name (danetool_opt_strs+1958) -/** Compiled in flag settings for the x509 option */ -#define X509_FLAGS (OPTST_DISABLED) - -/** - * local option description: - */ -/** Descriptive text for the local option */ -#define LOCAL_DESC (danetool_opt_strs+1963) -#define LOCAL_NAME NULL -/** Unmodified name string for the local option */ -#define LOCAL_name (danetool_opt_strs+1996) -/** Compiled in flag settings for the local option */ -#define LOCAL_FLAGS (DOMAIN_FLAGS | OPTST_ALIAS) - -/** - * domain option description: - */ -/** Descriptive text for the domain option */ -#define DOMAIN_DESC (danetool_opt_strs+2002) -/** Upper-cased name for the domain option */ -#define DOMAIN_NAME (danetool_opt_strs+2071) -/** disablement name for the domain option */ -#define NOT_DOMAIN_name (danetool_opt_strs+2078) -/** disablement prefix for the domain option */ -#define NOT_DOMAIN_PFX (danetool_opt_strs+2088) -/** Name string for the domain option */ -#define DOMAIN_name (NOT_DOMAIN_name + 3) -/** Compiled in flag settings for the domain option */ -#define DOMAIN_FLAGS (OPTST_INITENABLED) - -/** - * local-dns option description: - */ -/** Descriptive text for the local-dns option */ -#define LOCAL_DNS_DESC (danetool_opt_strs+2091) -/** Upper-cased name for the local-dns option */ -#define LOCAL_DNS_NAME (danetool_opt_strs+2137) -/** disablement name for the local-dns option */ -#define NOT_LOCAL_DNS_name (danetool_opt_strs+2147) -/** disablement prefix for the local-dns option */ -#define NOT_LOCAL_DNS_PFX (danetool_opt_strs+2088) -/** Name string for the local-dns option */ -#define LOCAL_DNS_name (NOT_LOCAL_DNS_name + 3) -/** Compiled in flag settings for the local-dns option */ -#define LOCAL_DNS_FLAGS (OPTST_DISABLED) - -/** - * insecure option description: - */ -/** Descriptive text for the insecure option */ -#define INSECURE_DESC (danetool_opt_strs+2160) -/** Upper-cased name for the insecure option */ -#define INSECURE_NAME (danetool_opt_strs+2195) -/** Name string for the insecure option */ -#define INSECURE_name (danetool_opt_strs+2204) -/** Compiled in flag settings for the insecure option */ -#define INSECURE_FLAGS (OPTST_DISABLED) - -/** - * inder option description: - */ -/** Descriptive text for the inder option */ -#define INDER_DESC (danetool_opt_strs+2213) -/** Upper-cased name for the inder option */ -#define INDER_NAME (danetool_opt_strs+2268) -/** disablement name for the inder option */ -#define NOT_INDER_name (danetool_opt_strs+2274) -/** disablement prefix for the inder option */ -#define NOT_INDER_PFX (danetool_opt_strs+2088) -/** Name string for the inder option */ -#define INDER_name (NOT_INDER_name + 3) -/** Compiled in flag settings for the inder option */ -#define INDER_FLAGS (OPTST_DISABLED) - -/** - * inraw option description: - */ -/** Descriptive text for the inraw option */ -#define INRAW_DESC (danetool_opt_strs+2283) -#define INRAW_NAME NULL -/** Unmodified name string for the inraw option */ -#define INRAW_name (danetool_opt_strs+2315) -/** Compiled in flag settings for the inraw option */ -#define INRAW_FLAGS (INDER_FLAGS | OPTST_ALIAS) - -/** - * print-raw option description: - */ -/** Descriptive text for the print-raw option */ -#define PRINT_RAW_DESC (danetool_opt_strs+2321) -/** Upper-cased name for the print-raw option */ -#define PRINT_RAW_NAME (danetool_opt_strs+2364) -/** disablement name for the print-raw option */ -#define NOT_PRINT_RAW_name (danetool_opt_strs+2374) -/** disablement prefix for the print-raw option */ -#define NOT_PRINT_RAW_PFX (danetool_opt_strs+2088) -/** Name string for the print-raw option */ -#define PRINT_RAW_name (NOT_PRINT_RAW_name + 3) -/** Compiled in flag settings for the print-raw option */ -#define PRINT_RAW_FLAGS (OPTST_DISABLED) - -/** - * quiet option description: - */ -/** Descriptive text for the quiet option */ -#define QUIET_DESC (danetool_opt_strs+2387) -/** Upper-cased name for the quiet option */ -#define QUIET_NAME (danetool_opt_strs+2427) -/** Name string for the quiet option */ -#define QUIET_name (danetool_opt_strs+2433) -/** Compiled in flag settings for the quiet option */ -#define QUIET_FLAGS (OPTST_DISABLED) - -/* - * Help/More_Help/Version option descriptions: - */ -#define HELP_DESC (danetool_opt_strs+2439) -#define HELP_name (danetool_opt_strs+2483) -#ifdef HAVE_WORKING_FORK -#define MORE_HELP_DESC (danetool_opt_strs+2488) -#define MORE_HELP_name (danetool_opt_strs+2533) -#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -#define MORE_HELP_DESC HELP_DESC -#define MORE_HELP_name HELP_name -#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT) -#endif -#ifdef NO_OPTIONAL_OPT_ARGS -# define VER_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ - OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT) -#endif -#define VER_DESC (danetool_opt_strs+2543) -#define VER_name (danetool_opt_strs+2579) -/** - * Declare option callback procedures - */ -extern tOptProc - optionBooleanVal, optionNestedVal, optionNumericVal, - optionPagedUsage, optionPrintVersion, optionResetOpt, - optionStackArg, optionTimeDate, optionTimeVal, - optionUnstackArg, optionVendorOption; -static tOptProc - doOptApp_Proto, doOptDebug, doOptInfile, doOptInraw, - doOptLocal, doUsageOpt; -#define VER_PROC optionPrintVersion - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Define the danetool Option Descriptions. - * This is an array of OPTION_CT entries, one for each - * option that the danetool program responds to. - */ -static tOptDesc optDesc[OPTION_CT] = { - { /* entry idx, value */ 0, VALUE_OPT_DEBUG, - /* equiv idx, value */ 0, VALUE_OPT_DEBUG, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DEBUG_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --debug */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDebug, - /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 1, VALUE_OPT_VERBOSE, - /* equiv idx, value */ 1, VALUE_OPT_VERBOSE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, NOLIMIT, 0, - /* opt state flags */ VERBOSE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verbose */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERBOSE_DESC, VERBOSE_NAME, VERBOSE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 2, VALUE_OPT_INFILE, - /* equiv idx, value */ 2, VALUE_OPT_INFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --infile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptInfile, - /* desc, NAME, name */ INFILE_DESC, INFILE_NAME, INFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 3, VALUE_OPT_OUTFILE, - /* equiv idx, value */ 3, VALUE_OPT_OUTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OUTFILE_DESC, OUTFILE_NAME, OUTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 4, VALUE_OPT_LOAD_PUBKEY, - /* equiv idx, value */ 4, VALUE_OPT_LOAD_PUBKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_PUBKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-pubkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOAD_PUBKEY_DESC, LOAD_PUBKEY_NAME, LOAD_PUBKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 5, VALUE_OPT_LOAD_CERTIFICATE, - /* equiv idx, value */ 5, VALUE_OPT_LOAD_CERTIFICATE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_CERTIFICATE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-certificate */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOAD_CERTIFICATE_DESC, LOAD_CERTIFICATE_NAME, LOAD_CERTIFICATE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 6, VALUE_OPT_DLV, - /* equiv idx, value */ 6, VALUE_OPT_DLV, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DLV_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --dlv */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DLV_DESC, DLV_NAME, DLV_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 7, VALUE_OPT_HASH, - /* equiv idx, value */ 7, VALUE_OPT_HASH, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ HASH_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --hash */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ HASH_DESC, HASH_NAME, HASH_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 8, VALUE_OPT_CHECK, - /* equiv idx, value */ 8, VALUE_OPT_CHECK, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CHECK_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --check */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CHECK_DESC, CHECK_NAME, CHECK_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 9, VALUE_OPT_CHECK_EE, - /* equiv idx, value */ 9, VALUE_OPT_CHECK_EE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CHECK_EE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --check-ee */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CHECK_EE_DESC, CHECK_EE_NAME, CHECK_EE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 10, VALUE_OPT_CHECK_CA, - /* equiv idx, value */ 10, VALUE_OPT_CHECK_CA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CHECK_CA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --check-ca */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CHECK_CA_DESC, CHECK_CA_NAME, CHECK_CA_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 11, VALUE_OPT_TLSA_RR, - /* equiv idx, value */ 11, VALUE_OPT_TLSA_RR, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ TLSA_RR_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --tlsa-rr */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ aTlsa_RrMustList, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ TLSA_RR_DESC, TLSA_RR_NAME, TLSA_RR_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 12, VALUE_OPT_HOST, - /* equiv idx, value */ 12, VALUE_OPT_HOST, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ HOST_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --host */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ HOST_DESC, HOST_NAME, HOST_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 13, VALUE_OPT_PROTO, - /* equiv idx, value */ 13, VALUE_OPT_PROTO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PROTO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --proto */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PROTO_DESC, PROTO_NAME, PROTO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 14, VALUE_OPT_PORT, - /* equiv idx, value */ 14, VALUE_OPT_PORT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PORT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --port */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PORT_DESC, PORT_NAME, PORT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 15, VALUE_OPT_APP_PROTO, - /* equiv idx, value */ 15, VALUE_OPT_APP_PROTO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ APP_PROTO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --app-proto */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptApp_Proto, - /* desc, NAME, name */ APP_PROTO_DESC, APP_PROTO_NAME, APP_PROTO_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 16, VALUE_OPT_STARTTLS_PROTO, - /* equiv idx, value */ 16, VALUE_OPT_STARTTLS_PROTO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ STARTTLS_PROTO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --starttls-proto */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ STARTTLS_PROTO_DESC, STARTTLS_PROTO_NAME, STARTTLS_PROTO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 17, VALUE_OPT_CA, - /* equiv idx, value */ 17, VALUE_OPT_CA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --ca */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CA_DESC, CA_NAME, CA_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 18, VALUE_OPT_X509, - /* equiv idx, value */ 18, VALUE_OPT_X509, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509 */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509_DESC, X509_NAME, X509_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 19, VALUE_OPT_LOCAL, - /* equiv idx, value */ 19, VALUE_OPT_LOCAL, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOCAL_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --local */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptLocal, - /* desc, NAME, name */ LOCAL_DESC, LOCAL_NAME, LOCAL_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 20, VALUE_OPT_DOMAIN, - /* equiv idx, value */ 20, VALUE_OPT_DOMAIN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DOMAIN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --domain */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DOMAIN_DESC, DOMAIN_NAME, DOMAIN_name, - /* disablement strs */ NOT_DOMAIN_name, NOT_DOMAIN_PFX }, - - { /* entry idx, value */ 21, VALUE_OPT_LOCAL_DNS, - /* equiv idx, value */ 21, VALUE_OPT_LOCAL_DNS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOCAL_DNS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --local-dns */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOCAL_DNS_DESC, LOCAL_DNS_NAME, LOCAL_DNS_name, - /* disablement strs */ NOT_LOCAL_DNS_name, NOT_LOCAL_DNS_PFX }, - - { /* entry idx, value */ 22, VALUE_OPT_INSECURE, - /* equiv idx, value */ 22, VALUE_OPT_INSECURE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INSECURE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --insecure */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INSECURE_DESC, INSECURE_NAME, INSECURE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 23, VALUE_OPT_INDER, - /* equiv idx, value */ 23, VALUE_OPT_INDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --inder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INDER_DESC, INDER_NAME, INDER_name, - /* disablement strs */ NOT_INDER_name, NOT_INDER_PFX }, - - { /* entry idx, value */ 24, VALUE_OPT_INRAW, - /* equiv idx, value */ 24, VALUE_OPT_INRAW, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INRAW_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --inraw */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptInraw, - /* desc, NAME, name */ INRAW_DESC, INRAW_NAME, INRAW_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 25, VALUE_OPT_PRINT_RAW, - /* equiv idx, value */ 25, VALUE_OPT_PRINT_RAW, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PRINT_RAW_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --print-raw */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PRINT_RAW_DESC, PRINT_RAW_NAME, PRINT_RAW_name, - /* disablement strs */ NOT_PRINT_RAW_name, NOT_PRINT_RAW_PFX }, - - { /* entry idx, value */ 26, VALUE_OPT_QUIET, - /* equiv idx, value */ 26, VALUE_OPT_QUIET, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ QUIET_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --quiet */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ QUIET_DESC, QUIET_NAME, QUIET_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VER_FLAGS, AOUSE_VERSION, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ VER_PROC, - /* desc, NAME, name */ VER_DESC, NULL, VER_name, - /* disablement strs */ NULL, NULL }, - - - - { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doUsageOpt, - /* desc, NAME, name */ HELP_DESC, NULL, HELP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionPagedUsage, - /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name, - /* disablement strs */ NULL, NULL } -}; - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** Reference to the upper cased version of danetool. */ -#define zPROGNAME (danetool_opt_strs+2587) -/** Reference to the title line for danetool usage. */ -#define zUsageTitle (danetool_opt_strs+2596) -/** There is no danetool configuration file. */ -#define zRcName NULL -/** There are no directories to search for danetool config files. */ -#define apzHomeList NULL -/** The danetool program bug email address. */ -#define zBugsAddr (danetool_opt_strs+2682) -/** Clarification/explanation of what danetool does. */ -#define zExplain (danetool_opt_strs+2702) -/** Extra detail explaining what danetool does. */ -#define zDetail (danetool_opt_strs+2704) -/** The full version string for danetool. */ -#define zFullVersion (danetool_opt_strs+2776) -/* extracted from optcode.tlib near line 364 */ - -#if defined(ENABLE_NLS) -# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT - static tOptionXlateProc translate_option_strings; -#else -# define OPTPROC_BASE OPTPROC_NONE -# define translate_option_strings NULL -#endif /* ENABLE_NLS */ - -#define danetool_full_usage (NULL) -#define danetool_short_usage (danetool_opt_strs+2795) - -#endif /* not defined __doxygen__ */ - -/* - * Create the static procedure(s) declared above. - */ -/** - * The callout function that invokes the optionUsage function. - * - * @param[in] opts the AutoOpts option description structure - * @param[in] od the descriptor for the "help" (usage) option. - * @noreturn - */ -static void -doUsageOpt(tOptions * opts, tOptDesc * od) -{ - int ex_code; - ex_code = DANETOOL_EXIT_SUCCESS; - optionUsage(&danetoolOptions, ex_code); - /* NOTREACHED */ - exit(DANETOOL_EXIT_FAILURE); - (void)opts; - (void)od; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the debug option. - * Specifies the debug level. - * @param[in] pOptions the danetool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 9999 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the infile option. - * - * @param[in] pOptions the danetool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptInfile(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the app-proto option. - * - * @param[in] pOptions the danetool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptApp_Proto(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_STARTTLS_PROTO); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(DANETOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the local option. - * - * @param[in] pOptions the danetool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptLocal(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_DOMAIN); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(DANETOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the inraw option. - * - * @param[in] pOptions the danetool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptInraw(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_INDER); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(DANETOOL_EXIT_USAGE_ERROR); - -} -/* extracted from optmain.tlib near line 1250 */ - -/** - * The directory containing the data associated with danetool. - */ -#ifndef PKGDATADIR -# define PKGDATADIR "" -#endif - -/** - * Information about the person or institution that packaged danetool - * for the current distribution. - */ -#ifndef WITH_PACKAGER -# define danetool_packager_info NULL -#else -/** Packager information for danetool. */ -static char const danetool_packager_info[] = - "Packaged by " WITH_PACKAGER - -# ifdef WITH_PACKAGER_VERSION - " ("WITH_PACKAGER_VERSION")" -# endif - -# ifdef WITH_PACKAGER_BUG_REPORTS - "\nReport danetool bugs to " WITH_PACKAGER_BUG_REPORTS -# endif - "\n"; -#endif -#ifndef __doxygen__ - -#endif /* __doxygen__ */ -/** - * The option definitions for danetool. The one structure that - * binds them all. - */ -tOptions danetoolOptions = { - OPTIONS_STRUCT_VERSION, - 0, NULL, /* original argc + argv */ - ( OPTPROC_BASE - + OPTPROC_ERRSTOP - + OPTPROC_SHORTOPT - + OPTPROC_LONGOPT - + OPTPROC_NO_REQ_OPT - + OPTPROC_NEGATIONS - + OPTPROC_NO_ARGS - + OPTPROC_GNUUSAGE - + OPTPROC_MISUSE ), - 0, NULL, /* current option index, current option */ - NULL, NULL, zPROGNAME, - zRcName, zCopyright, zLicenseDescrip, - zFullVersion, apzHomeList, zUsageTitle, - zExplain, zDetail, optDesc, - zBugsAddr, /* address to send bugs to */ - NULL, NULL, /* extensions/saved state */ - optionUsage, /* usage procedure */ - translate_option_strings, /* translation procedure */ - /* - * Indexes to special options - */ - { INDEX_OPT_MORE_HELP, /* more-help option index */ - NO_EQUIVALENT, /* save option index */ - NO_EQUIVALENT, /* '-#' option index */ - NO_EQUIVALENT /* index of default opt */ - }, - 30 /* full option count */, 27 /* user option count */, - danetool_full_usage, danetool_short_usage, - NULL, NULL, - PKGDATADIR, danetool_packager_info -}; - -#if ENABLE_NLS -/** - * This code is designed to translate translatable option text for the - * danetool program. These translations happen upon entry - * to optionProcess(). - */ -#include -#include -#include -#include -#ifdef HAVE_DCGETTEXT -# include -#endif -#include - -static char * AO_gettext(char const * pz); -static void coerce_it(void ** s); - -/** - * AutoGen specific wrapper function for gettext. It relies on the macro _() - * to convert from English to the target language, then strdup-duplicates the - * result string. It tries the "libopts" domain first, then whatever has been - * set via the \a textdomain(3) call. - * - * @param[in] pz the input text used as a lookup key. - * @returns the translated text (if there is one), - * or the original text (if not). - */ -static char * -AO_gettext(char const * pz) -{ - char * res; - if (pz == NULL) - return NULL; -#ifdef HAVE_DCGETTEXT - /* - * While processing the option_xlateable_txt data, try to use the - * "libopts" domain. Once we switch to the option descriptor data, - * do *not* use that domain. - */ - if (option_xlateable_txt.field_ct != 0) { - res = dgettext("libopts", pz); - if (res == pz) - res = (char *)VOIDP(_(pz)); - } else - res = (char *)VOIDP(_(pz)); -#else - res = (char *)VOIDP(_(pz)); -#endif - if (res == pz) - return res; - res = strdup(res); - if (res == NULL) { - fputs(_("No memory for duping translated strings\n"), stderr); - exit(DANETOOL_EXIT_FAILURE); - } - return res; -} - -/** - * All the pointers we use are marked "* const", but they are stored in - * writable memory. Coerce the mutability and set the pointer. - */ -static void coerce_it(void ** s) { *s = AO_gettext(*s); -} - -/** - * Translate all the translatable strings in the danetoolOptions - * structure defined above. This is done only once. - */ -static void -translate_option_strings(void) -{ - tOptions * const opts = &danetoolOptions; - - /* - * Guard against re-translation. It won't work. The strings will have - * been changed by the first pass through this code. One shot only. - */ - if (option_xlateable_txt.field_ct != 0) { - /* - * Do the translations. The first pointer follows the field count - * field. The field count field is the size of a pointer. - */ - char ** ppz = (char**)VOIDP(&(option_xlateable_txt)); - int ix = option_xlateable_txt.field_ct; - - do { - ppz++; /* skip over field_ct */ - *ppz = AO_gettext(*ppz); - } while (--ix > 0); - /* prevent re-translation and disable "libopts" domain lookup */ - option_xlateable_txt.field_ct = 0; - - coerce_it(VOIDP(&(opts->pzCopyright))); - coerce_it(VOIDP(&(opts->pzCopyNotice))); - coerce_it(VOIDP(&(opts->pzFullVersion))); - coerce_it(VOIDP(&(opts->pzUsageTitle))); - coerce_it(VOIDP(&(opts->pzExplain))); - coerce_it(VOIDP(&(opts->pzDetail))); - { - tOptDesc * od = opts->pOptDesc; - for (ix = opts->optCt; ix > 0; ix--, od++) - coerce_it(VOIDP(&(od->pzText))); - } - } -} -#endif /* ENABLE_NLS */ - -#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT -/** I18N function strictly for xgettext. Do not compile. */ -static void bogus_function(void) { - /* TRANSLATORS: - - The following dummy function was crated solely so that xgettext can - extract the correct strings. These strings are actually referenced - by a field name in the danetoolOptions structure noted in the - comments below. The literal text is defined in danetool_opt_strs. - - NOTE: the strings below are segmented with respect to the source string - danetool_opt_strs. The strings above are handed off for translation - at run time a paragraph at a time. Consequently, they are presented here - for translation a paragraph at a time. - - ALSO: often the description for an option will reference another option - by name. These are set off with apostrophe quotes (I hope). Do not - translate option names. - */ - /* referenced via danetoolOptions.pzCopyright */ - puts(_("danetool @VERSION@\n\ -Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n\ -This is free software. It is licensed for use, modification and\n\ -redistribution under the terms of the GNU General Public License,\n\ -version 3 or later \n")); - - /* referenced via danetoolOptions.pzCopyNotice */ - puts(_("danetool is free software: you can redistribute it and/or modify it under\n\ -the terms of the GNU General Public License as published by the Free\n\ -Software Foundation, either version 3 of the License, or (at your option)\n\ -any later version.\n\n")); - puts(_("danetool is distributed in the hope that it will be useful, but WITHOUT ANY\n\ -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\ -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n\ -details.\n\n")); - puts(_("You should have received a copy of the GNU General Public License along\n\ -with this program. If not, see .\n")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Enable debugging")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("More verbose output")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Input file")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Output file")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Loads a public key file")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Loads a certificate file")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Sets a DLV file")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Hash algorithm to use for signing")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Check a host's DANE TLSA entry")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Check only the end-entity's certificate")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Check only the CA's certificate")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Print the DANE RR data on a certificate or public key")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Specify the hostname to be used in the DANE RR")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("The protocol set for DANE data (tcp, udp etc.)")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("The port or service to connect to, for DANE data")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'starttls-proto' option")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("The application protocol to be used to obtain the server's certificate\n\ -(https, ftp, smtp, imap, ldap, xmpp, lmtp, pop3, nntp, sieve, postgres)")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Whether the provided certificate or public key is a Certificate\n\ -Authority")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Use the hash of the X.509 certificate, rather than the public key")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'domain' option")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("The provided certificate or public key is issued by the local domain")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Use the local DNS server for DNSSEC resolving")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Do not verify any DNSSEC signature")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Use DER format for input certificates and private keys")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'inder' option")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Print the received DANE data in raw format")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("Suppress several informational messages")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("display extended usage information and exit")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("extended usage information passed thru pager")); - - /* referenced via danetoolOptions.pOptDesc->pzText */ - puts(_("output version information and exit")); - - /* referenced via danetoolOptions.pzUsageTitle */ - puts(_("danetool - GnuTLS DANE tool\n\ -Usage: %s [ - [] | --[{=| }] ]...\n")); - - /* referenced via danetoolOptions.pzExplain */ - puts(_("\n")); - - /* referenced via danetoolOptions.pzDetail */ - puts(_("Tool to generate and check DNS resource records for the DANE protocol.\n")); - - /* referenced via danetoolOptions.pzFullVersion */ - puts(_("danetool @VERSION@")); - - /* referenced via danetoolOptions.pzFullUsage */ - puts(_("<<>>")); - - /* referenced via danetoolOptions.pzShortUsage */ - puts(_("danetool --[tlsa-rr|check] [options]\n\ -danetool --help for additional usage instructions.\n")); - /* LIBOPTS-MESSAGES: */ -#line 67 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" - puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" - puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" - puts(_("Automated Options Processing Error!\n" - "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" - puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" - puts(_("\tThis is less than the minimum library version: ")); -#line 121 "../version.c" - puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" - puts(_("(AutoOpts bug): %s.\n")); -#line 90 "../reset.c" - puts(_("optionResetOpt() called, but reset-option not configured")); -#line 295 "../usage.c" - puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" - puts(_("optionProcess() was called with invalid data")); -#line 751 "../usage.c" - puts(_("invalid argument type specified")); -#line 598 "../find.c" - puts(_("defaulted to option with optional arg")); -#line 76 "../alias.c" - puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" - puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" - puts(_(" The following options match:\n")); -#line 293 "../find.c" - puts(_("%s: ambiguous option name: %s (matches %d options)\n")); -#line 161 "../check.c" - puts(_("%s: Command line arguments required\n")); -#line 43 "../alias.c" - puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" - puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" - puts(_("interprocess pipe")); -#line 168 "../version.c" - puts(_("error: version option argument '%c' invalid. Use:\n" - "\t'v' - version only\n" - "\t'c' - version and copyright\n" - "\t'n' - version and full copyright notice\n")); -#line 58 "../check.c" - puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 38 "../alias.c" - puts(_("-equivalence")); -#line 469 "../find.c" - puts(_("%s: illegal option -- %c\n")); -#line 110 "../reset.c" - puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 118 "../reset.c" - puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" - puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 750 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 1084 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" - puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" - puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" - puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" - "\t'%s' and '%s'.")); -#line 94 "../check.c" - puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" - puts(_("%s: The '%s' option cannot have an argument.\n")); -#line 151 "../check.c" - puts(_("%s: Command line arguments are not allowed.\n")); -#line 536 "../save.c" - puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" - puts(_("%s error: '%s' does not match any %s keywords.\n")); -#line 93 "../reset.c" - puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 239 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 143 "../restore.c" - puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" - puts(_("'%s' is not a command line option.\n")); -#line 113 "../time.c" - puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); -#line 50 "../time.c" - puts(_("%s error: '%s' is not a recognizable time duration.\n")); -#line 92 "../check.c" - puts(_("%s error: The %s option must appear %d times.\n")); -#line 165 "../numeric.c" - puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" - puts(_("%s error: %s exceeds %s keyword count\n")); -#line 333 "../usage.c" - puts(_("Try '%s %s' for more information.\n")); -#line 45 "../alias.c" - puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" - puts(_("standard output")); -#line 943 "../makeshell.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard output")); -#line 418 "../usage.c" - puts(_("standard output")); -#line 628 "../usage.c" - puts(_("standard output")); -#line 175 "../version.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard error")); -#line 418 "../usage.c" - puts(_("standard error")); -#line 628 "../usage.c" - puts(_("standard error")); -#line 175 "../version.c" - puts(_("standard error")); -#line 208 "../makeshell.c" - puts(_("write")); -#line 943 "../makeshell.c" - puts(_("write")); -#line 276 "../usage.c" - puts(_("write")); -#line 417 "../usage.c" - puts(_("write")); -#line 627 "../usage.c" - puts(_("write")); -#line 174 "../version.c" - puts(_("write")); -#line 60 "../numeric.c" - puts(_("%s error: %s option value %ld is out of range.\n")); -#line 44 "../check.c" - puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 238 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 257 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 535 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); - /* END-LIBOPTS-MESSAGES */ - - /* USAGE-TEXT: */ -#line 876 "../usage.c" - puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1151 "../usage.c" - puts(_("Version, usage and configuration options:")); -#line 927 "../usage.c" - puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 840 "../usage.c" - puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1120 "../usage.c" - puts(_(" --- %-14s %s\n")); -#line 1118 "../usage.c" - puts(_("This option has been disabled")); -#line 867 "../usage.c" - puts(_("\t\t\t\t- enabled by default\n")); -#line 40 "../alias.c" - puts(_("%s error: only ")); -#line 1197 "../usage.c" - puts(_(" - examining environment variables named %s_*\n")); -#line 168 "../file.c" - puts(_("\t\t\t\t- file must not pre-exist\n")); -#line 172 "../file.c" - puts(_("\t\t\t\t- file must pre-exist\n")); -#line 383 "../usage.c" - puts(_("Options are specified by doubled hyphens and their name or by a single\n" - "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" - puts(_("\n" - "= = = = = = = =\n\n" - "This incarnation of genshell will produce\n" - "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" - puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 900 "../usage.c" - puts(_("\t\t\t\t- is a set membership option\n")); -#line 921 "../usage.c" - puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 385 "../usage.c" - puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 907 "../usage.c" - puts(_("\t\t\t\t- may appear multiple times\n")); -#line 894 "../usage.c" - puts(_("\t\t\t\t- may not be preset\n")); -#line 1312 "../usage.c" - puts(_(" Arg Option-Name Description\n")); -#line 1248 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1306 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1307 "../usage.c" - puts(_(" %3s %s")); -#line 1313 "../usage.c" - puts(_(" %3s %s")); -#line 390 "../usage.c" - puts(_("The '-#' option may omit the hash char\n")); -#line 386 "../usage.c" - puts(_("All arguments are named options.\n")); -#line 974 "../usage.c" - puts(_(" - reading file %s")); -#line 412 "../usage.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 100 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 129 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 906 "../usage.c" - puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 947 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 1195 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 685 "../usage.c" - puts(_("prohibits these options:\n")); -#line 680 "../usage.c" - puts(_("prohibits the option '%s'\n")); -#line 81 "../numeric.c" - puts(_("%s%ld to %ld")); -#line 79 "../numeric.c" - puts(_("%sgreater than or equal to %ld")); -#line 75 "../numeric.c" - puts(_("%s%ld exactly")); -#line 68 "../numeric.c" - puts(_("%sit must lie in one of the ranges:\n")); -#line 68 "../numeric.c" - puts(_("%sit must be in the range:\n")); -#line 88 "../numeric.c" - puts(_(", or\n")); -#line 66 "../numeric.c" - puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); -#line 77 "../numeric.c" - puts(_("%sless than or equal to %ld")); -#line 393 "../usage.c" - puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 655 "../usage.c" - puts(_("requires the option '%s'\n")); -#line 658 "../usage.c" - puts(_("requires these options:\n")); -#line 1324 "../usage.c" - puts(_(" Arg Option-Name Req? Description\n")); -#line 1318 "../usage.c" - puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" - puts(_("or you may use a numeric representation. Preceding these with a '!'\n" - "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" - "will set them all. Multiple entries may be passed as an option\n" - "argument list.\n")); -#line 913 "../usage.c" - puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" - puts(_("The valid \"%s\" option keywords are:\n")); -#line 1155 "../usage.c" - puts(_("The next option supports vendor supported extra options:")); -#line 776 "../usage.c" - puts(_("These additional options are:")); - /* END-USAGE-TEXT */ -} -#endif /* uncompilable code */ -#ifdef __cplusplus -} -#endif -/* danetool-args.c ends here */ diff --git a/src/danetool-args.h.bak b/src/danetool-args.h.bak deleted file mode 100644 index f7717dbea7..0000000000 --- a/src/danetool-args.h.bak +++ /dev/null @@ -1,265 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (danetool-args.h) - * - * It has been AutoGen-ed - * From the definitions danetool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This header file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the danetool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The danetool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * danetool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * danetool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -/** - * This file contains the programmatic interface to the Automated - * Options generated for the danetool program. - * These macros are documented in the AutoGen info file in the - * "AutoOpts" chapter. Please refer to that doc for usage help. - */ -#ifndef AUTOOPTS_DANETOOL_ARGS_H_GUARD -#define AUTOOPTS_DANETOOL_ARGS_H_GUARD 1 -#include "config.h" -#include - -/** - * Ensure that the library used for compiling this generated header is at - * least as new as the version current when the header template was released - * (not counting patch version increments). Also ensure that the oldest - * tolerable version is at least as old as what was current when the header - * template was released. - */ -#define AO_TEMPLATE_VERSION 167937 -#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ - || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) -# error option template version mismatches autoopts/options.h header - Choke Me. -#endif - -/** - * Enumeration of each option type for danetool - */ -typedef enum { - INDEX_OPT_DEBUG = 0, - INDEX_OPT_VERBOSE = 1, - INDEX_OPT_INFILE = 2, - INDEX_OPT_OUTFILE = 3, - INDEX_OPT_LOAD_PUBKEY = 4, - INDEX_OPT_LOAD_CERTIFICATE = 5, - INDEX_OPT_DLV = 6, - INDEX_OPT_HASH = 7, - INDEX_OPT_CHECK = 8, - INDEX_OPT_CHECK_EE = 9, - INDEX_OPT_CHECK_CA = 10, - INDEX_OPT_TLSA_RR = 11, - INDEX_OPT_HOST = 12, - INDEX_OPT_PROTO = 13, - INDEX_OPT_PORT = 14, - INDEX_OPT_APP_PROTO = 15, - INDEX_OPT_STARTTLS_PROTO = 16, - INDEX_OPT_CA = 17, - INDEX_OPT_X509 = 18, - INDEX_OPT_LOCAL = 19, - INDEX_OPT_DOMAIN = 20, - INDEX_OPT_LOCAL_DNS = 21, - INDEX_OPT_INSECURE = 22, - INDEX_OPT_INDER = 23, - INDEX_OPT_INRAW = 24, - INDEX_OPT_PRINT_RAW = 25, - INDEX_OPT_QUIET = 26, - INDEX_OPT_VERSION = 27, - INDEX_OPT_HELP = 28, - INDEX_OPT_MORE_HELP = 29 -} teOptIndex; -/** count of all options for danetool */ -#define OPTION_CT 30 -/** danetool version */ -#define DANETOOL_VERSION "@VERSION@" -/** Full danetool version text */ -#define DANETOOL_FULL_VERSION "danetool @VERSION@" - -/** - * Interface defines for all options. Replace "n" with the UPPER_CASED - * option name (as in the teOptIndex enumeration above). - * e.g. HAVE_OPT(DEBUG) - */ -#define DESC(n) (danetoolOptions.pOptDesc[INDEX_OPT_## n]) -/** 'true' if an option has been specified in any way */ -#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) -/** The string argument to an option. The argument type must be \"string\". */ -#define OPT_ARG(n) (DESC(n).optArg.argString) -/** Mask the option state revealing how an option was specified. - * It will be one and only one of \a OPTST_SET, \a OPTST_PRESET, - * \a OPTST_DEFINED, \a OPTST_RESET or zero. - */ -#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) -/** Count of option's occurrances *on the command line*. */ -#define COUNT_OPT(n) (DESC(n).optOccCt) -/** mask of \a OPTST_SET and \a OPTST_DEFINED. */ -#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) -/** 'true' if \a HAVE_OPT would yield 'false'. */ -#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) -/** 'true' if OPTST_DISABLED bit not set. */ -#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) -/** number of stacked option arguments. - * Valid only for stacked option arguments. */ -#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) -/** stacked argument vector. - * Valid only for stacked option arguments. */ -#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) -/** Reset an option. */ -#define CLEAR_OPT(n) STMTS( \ - DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ - if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \ - DESC(n).fOptState |= OPTST_DISABLED; \ - DESC(n).optCookie = NULL ) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Enumeration of danetool exit codes - */ -typedef enum { - DANETOOL_EXIT_SUCCESS = 0, - DANETOOL_EXIT_FAILURE = 1, - DANETOOL_EXIT_USAGE_ERROR = 64, - DANETOOL_EXIT_LIBOPTS_FAILURE = 70 -} danetool_exit_code_t; -/** - * Interface defines for specific options. - * @{ - */ -#define VALUE_OPT_DEBUG 'd' - -#define OPT_VALUE_DEBUG (DESC(DEBUG).optArg.argInt) -#define VALUE_OPT_VERBOSE 'V' -#define VALUE_OPT_INFILE 0x1001 -#define VALUE_OPT_OUTFILE 0x1002 -#define VALUE_OPT_LOAD_PUBKEY 0x1003 -#define VALUE_OPT_LOAD_CERTIFICATE 0x1004 -#define VALUE_OPT_DLV 0x1005 -#define VALUE_OPT_HASH 0x1006 -#define VALUE_OPT_CHECK 0x1007 -#define VALUE_OPT_CHECK_EE 0x1008 -#define VALUE_OPT_CHECK_CA 0x1009 -#define VALUE_OPT_TLSA_RR 0x100A -#define VALUE_OPT_HOST 0x100B -#define VALUE_OPT_PROTO 0x100C -#define VALUE_OPT_PORT 0x100D -#define VALUE_OPT_APP_PROTO 0x100E -#define VALUE_OPT_STARTTLS_PROTO 0x100F -#define VALUE_OPT_CA 0x1010 -#define VALUE_OPT_X509 0x1011 -#define VALUE_OPT_LOCAL 0x1012 -#define VALUE_OPT_DOMAIN 0x1013 -#define VALUE_OPT_LOCAL_DNS 0x1014 -#define VALUE_OPT_INSECURE 0x1015 -#define VALUE_OPT_INDER 0x1016 -#define VALUE_OPT_INRAW 0x1017 -#define VALUE_OPT_PRINT_RAW 0x1018 -#define VALUE_OPT_QUIET 0x1019 -/** option flag (value) for help-value option */ -#define VALUE_OPT_HELP 'h' -/** option flag (value) for more-help-value option */ -#define VALUE_OPT_MORE_HELP '!' -/** option flag (value) for version-value option */ -#define VALUE_OPT_VERSION 'v' -/* - * Interface defines not associated with particular options - */ -#define ERRSKIP_OPTERR STMTS(danetoolOptions.fOptSet &= ~OPTPROC_ERRSTOP) -#define ERRSTOP_OPTERR STMTS(danetoolOptions.fOptSet |= OPTPROC_ERRSTOP) -#define RESTART_OPT(n) STMTS( \ - danetoolOptions.curOptIdx = (n); \ - danetoolOptions.pzCurOpt = NULL ) -#define START_OPT RESTART_OPT(1) -#define USAGE(c) (*danetoolOptions.pUsageProc)(&danetoolOptions, c) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * global exported definitions - */ -#include - - -/* * * * * * - * - * Declare the danetool option descriptor. - */ -extern tOptions danetoolOptions; - -#if defined(ENABLE_NLS) -# ifndef _ -# include -# ifndef HAVE_GETTEXT - extern char * gettext(char const *); -# else -# include -# endif - -# ifndef ATTRIBUTE_FORMAT_ARG -# define ATTRIBUTE_FORMAT_ARG(_a) -# endif - -static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1); -static inline char* aoGetsText(char const* pz) { - if (pz == NULL) return NULL; - return (char*)gettext(pz); -} -# define _(s) aoGetsText(s) -# endif /* _() */ - -# define OPT_NO_XLAT_CFG_NAMES STMTS(danetoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT_CFG;) -# define OPT_NO_XLAT_OPT_NAMES STMTS(danetoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;) - -# define OPT_XLAT_CFG_NAMES STMTS(danetoolOptions.fOptSet &= \ - ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);) -# define OPT_XLAT_OPT_NAMES STMTS(danetoolOptions.fOptSet &= \ - ~OPTPROC_NXLAT_OPT;) - -#else /* ENABLE_NLS */ -# define OPT_NO_XLAT_CFG_NAMES -# define OPT_NO_XLAT_OPT_NAMES - -# define OPT_XLAT_CFG_NAMES -# define OPT_XLAT_OPT_NAMES - -# ifndef _ -# define _(_s) _s -# endif -#endif /* ENABLE_NLS */ - -#ifdef __cplusplus -} -#endif -#endif /* AUTOOPTS_DANETOOL_ARGS_H_GUARD */ - -/* danetool-args.h ends here */ diff --git a/src/danetool.c b/src/danetool.c index 3b4fe6046b..91b422028d 100644 --- a/src/danetool.c +++ b/src/danetool.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -645,7 +645,13 @@ gnutls_session_t init_tls_session(const char *hostname) } gnutls_session_set_ptr(session, &priv); - gnutls_set_default_priority(session); + ret = gnutls_set_default_priority(session); + if (ret < 0) { + fprintf(stderr, "error[%d]: %s\n", __LINE__, + gnutls_strerror(ret)); + app_exit(1); + } + if (hostname && is_ip(hostname)==0) { gnutls_server_name_set(session, GNUTLS_NAME_DNS, hostname, strlen(hostname)); } diff --git a/src/gen-mech-list.sh b/src/gen-mech-list.sh new file mode 100755 index 0000000000..1c74de0e78 --- /dev/null +++ b/src/gen-mech-list.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +# Copyright (C) 2017-2018 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +HEADER=`pkg-config --cflags-only-I p11-kit-1|awk '{print $1}'|sed 's/-I//g'` +HEADER="${HEADER}/p11-kit/pkcs11.h" + +echo "const char *mech_list[] = {" + +# Exclude duplicate and uninteresting entries +EXCLUDED="(CKM_VENDOR_DEFINED\s|CKM_CAST128_MAC\s|CKM_CAST128_KEY_GEN\s|CKM_CAST128_ECB\s|CKM_CAST128_CBC\s|CKM_CAST128_MAC_GENERAL\s|CKM_CAST128_CBC_PAD\s|CKM_PBE_MD5_CAST128_CBC\s|CKM_PBE_SHA1_CAST128_CBC\s|CKM_EC_KEY_PAIR_GEN\s)" + +TMPFILE=list.$$.tmp + +cat ${HEADER}|grep -E "define\sCKM_"|grep -vE "${EXCLUDED}"|awk '{print "\t["$3"] = \""$2"\","}' |sort -u + +echo "};" + diff --git a/src/gl/Makefile.am b/src/gl/Makefile.am deleted file mode 100644 index 35d1779e88..0000000000 --- a/src/gl/Makefile.am +++ /dev/null @@ -1,2046 +0,0 @@ -## DO NOT EDIT! GENERATED AUTOMATICALLY! -## Process this file with automake to produce Makefile.in. -# Copyright (C) 2002-2016 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file. If not, see . -# -# As a special exception to the GNU General Public License, -# this file may be distributed as part of a program that -# contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. -# Reproduce by: gnulib-tool --import --local-dir=src/gl/override --lib=libgnu_gpl --source-base=src/gl --m4-base=src/gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=ggl --no-vc-files accept bind close connect getaddrinfo getpass gettext-h inet_ntop inet_pton listen minmax parse-datetime progname read-file recv recvfrom select send sendto servent setsockopt shutdown socket sockets socklen - -AUTOMAKE_OPTIONS = 1.9.6 gnits - -SUBDIRS = -noinst_HEADERS = -noinst_LIBRARIES = -noinst_LTLIBRARIES = -EXTRA_DIST = -BUILT_SOURCES = -SUFFIXES = -MOSTLYCLEANFILES = core *.stackdump -MOSTLYCLEANDIRS = -CLEANFILES = -DISTCLEANFILES = -MAINTAINERCLEANFILES = -EXTRA_DIST += m4/gnulib-cache.m4 - -AM_CPPFLAGS = -AM_CFLAGS = - -noinst_LTLIBRARIES += libgnu_gpl.la - -libgnu_gpl_la_SOURCES = -libgnu_gpl_la_LIBADD = $(ggl_LTLIBOBJS) -libgnu_gpl_la_DEPENDENCIES = $(ggl_LTLIBOBJS) -EXTRA_libgnu_gpl_la_SOURCES = -libgnu_gpl_la_LDFLAGS = $(AM_LDFLAGS) -libgnu_gpl_la_LDFLAGS += -no-undefined -libgnu_gpl_la_LDFLAGS += $(GETADDRINFO_LIB) -libgnu_gpl_la_LDFLAGS += $(HOSTENT_LIB) -libgnu_gpl_la_LDFLAGS += $(INET_NTOP_LIB) -libgnu_gpl_la_LDFLAGS += $(INET_PTON_LIB) -libgnu_gpl_la_LDFLAGS += $(LIBSOCKET) -libgnu_gpl_la_LDFLAGS += $(LIB_CLOCK_GETTIME) -libgnu_gpl_la_LDFLAGS += $(LIB_SELECT) -libgnu_gpl_la_LDFLAGS += $(LTLIBINTL) -libgnu_gpl_la_LDFLAGS += $(SERVENT_LIB) - -## begin gnulib module absolute-header - -# Use this preprocessor expression to decide whether #include_next works. -# Do not rely on a 'configure'-time test for this, since the expression -# might appear in an installed header, which is used by some other compiler. -HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) - -## end gnulib module absolute-header - -## begin gnulib module accept - - -EXTRA_DIST += accept.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += accept.c - -## end gnulib module accept - -## begin gnulib module alloca - - -libgnu_gpl_la_LIBADD += @LTALLOCA@ -libgnu_gpl_la_DEPENDENCIES += @LTALLOCA@ -EXTRA_DIST += alloca.c - -EXTRA_libgnu_gpl_la_SOURCES += alloca.c - -## end gnulib module alloca - -## begin gnulib module alloca-opt - -BUILT_SOURCES += $(ALLOCA_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -if GL_GENERATE_ALLOCA_H -alloca.h: alloca.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/alloca.in.h; \ - } > $@-t && \ - mv -f $@-t $@ -else -alloca.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += alloca.h alloca.h-t - -EXTRA_DIST += alloca.in.h - -## end gnulib module alloca-opt - -## begin gnulib module arpa_inet - -BUILT_SOURCES += arpa/inet.h - -# We need the following in order to create when the system -# doesn't have one. -arpa/inet.h: arpa_inet.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) - $(AM_V_at)$(MKDIR_P) arpa - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ - -e 's|@''NEXT_ARPA_INET_H''@|$(NEXT_ARPA_INET_H)|g' \ - -e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \ - -e 's/@''GNULIB_INET_NTOP''@/$(GNULIB_INET_NTOP)/g' \ - -e 's/@''GNULIB_INET_PTON''@/$(GNULIB_INET_PTON)/g' \ - -e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \ - -e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \ - -e 's|@''REPLACE_INET_NTOP''@|$(REPLACE_INET_NTOP)|g' \ - -e 's|@''REPLACE_INET_PTON''@|$(REPLACE_INET_PTON)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/arpa_inet.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += arpa/inet.h arpa/inet.h-t -MOSTLYCLEANDIRS += arpa - -EXTRA_DIST += arpa_inet.in.h - -## end gnulib module arpa_inet - -## begin gnulib module bind - - -EXTRA_DIST += bind.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += bind.c - -## end gnulib module bind - -## begin gnulib module c-ctype - -libgnu_gpl_la_SOURCES += c-ctype.h c-ctype.c - -## end gnulib module c-ctype - -## begin gnulib module close - - -EXTRA_DIST += close.c - -EXTRA_libgnu_gpl_la_SOURCES += close.c - -## end gnulib module close - -## begin gnulib module connect - - -EXTRA_DIST += connect.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += connect.c - -## end gnulib module connect - -## begin gnulib module dirname-lgpl - -libgnu_gpl_la_SOURCES += dirname-lgpl.c basename-lgpl.c stripslash.c - -EXTRA_DIST += dirname.h - -## end gnulib module dirname-lgpl - -## begin gnulib module dosname - - -EXTRA_DIST += dosname.h - -## end gnulib module dosname - -## begin gnulib module dup2 - - -EXTRA_DIST += dup2.c - -EXTRA_libgnu_gpl_la_SOURCES += dup2.c - -## end gnulib module dup2 - -## begin gnulib module errno - -BUILT_SOURCES += $(ERRNO_H) - -# We need the following in order to create when the system -# doesn't have one that is POSIX compliant. -if GL_GENERATE_ERRNO_H -errno.h: errno.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ - -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ - -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ - -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ - -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ - -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ - -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ - < $(srcdir)/errno.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -errno.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += errno.h errno.h-t - -EXTRA_DIST += errno.in.h - -## end gnulib module errno - -## begin gnulib module error - - -EXTRA_DIST += error.c error.h - -EXTRA_libgnu_gpl_la_SOURCES += error.c - -## end gnulib module error - -## begin gnulib module exitfail - -libgnu_gpl_la_SOURCES += exitfail.c - -EXTRA_DIST += exitfail.h - -## end gnulib module exitfail - -## begin gnulib module fd-hook - -libgnu_gpl_la_SOURCES += fd-hook.c - -EXTRA_DIST += fd-hook.h - -## end gnulib module fd-hook - -## begin gnulib module flexmember - - -EXTRA_DIST += flexmember.h - -## end gnulib module flexmember - -## begin gnulib module float - -BUILT_SOURCES += $(FLOAT_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -if GL_GENERATE_FLOAT_H -float.h: float.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ - -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ - < $(srcdir)/float.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -float.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += float.h float.h-t - -EXTRA_DIST += float.c float.in.h itold.c - -EXTRA_libgnu_gpl_la_SOURCES += float.c itold.c - -## end gnulib module float - -## begin gnulib module fseek - - -EXTRA_DIST += fseek.c - -EXTRA_libgnu_gpl_la_SOURCES += fseek.c - -## end gnulib module fseek - -## begin gnulib module fseeko - - -EXTRA_DIST += fseeko.c stdio-impl.h - -EXTRA_libgnu_gpl_la_SOURCES += fseeko.c - -## end gnulib module fseeko - -## begin gnulib module fstat - - -EXTRA_DIST += fstat.c - -EXTRA_libgnu_gpl_la_SOURCES += fstat.c - -## end gnulib module fstat - -## begin gnulib module ftell - - -EXTRA_DIST += ftell.c - -EXTRA_libgnu_gpl_la_SOURCES += ftell.c - -## end gnulib module ftell - -## begin gnulib module ftello - - -EXTRA_DIST += ftello.c stdio-impl.h - -EXTRA_libgnu_gpl_la_SOURCES += ftello.c - -## end gnulib module ftello - -## begin gnulib module getaddrinfo - - -EXTRA_DIST += gai_strerror.c getaddrinfo.c - -EXTRA_libgnu_gpl_la_SOURCES += gai_strerror.c getaddrinfo.c - -## end gnulib module getaddrinfo - -## begin gnulib module getdelim - - -EXTRA_DIST += getdelim.c - -EXTRA_libgnu_gpl_la_SOURCES += getdelim.c - -## end gnulib module getdelim - -## begin gnulib module getline - - -EXTRA_DIST += getline.c - -EXTRA_libgnu_gpl_la_SOURCES += getline.c - -## end gnulib module getline - -## begin gnulib module getpass - - -EXTRA_DIST += getpass.c getpass.h - -EXTRA_libgnu_gpl_la_SOURCES += getpass.c - -## end gnulib module getpass - -## begin gnulib module getpeername - - -EXTRA_DIST += getpeername.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += getpeername.c - -## end gnulib module getpeername - -## begin gnulib module getprogname - -libgnu_gpl_la_SOURCES += getprogname.h getprogname.c - -## end gnulib module getprogname - -## begin gnulib module gettext-h - -libgnu_gpl_la_SOURCES += gettext.h - -## end gnulib module gettext-h - -## begin gnulib module gettime - -libgnu_gpl_la_SOURCES += gettime.c - -## end gnulib module gettime - -## begin gnulib module gettimeofday - - -EXTRA_DIST += gettimeofday.c - -EXTRA_libgnu_gpl_la_SOURCES += gettimeofday.c - -## end gnulib module gettimeofday - -## begin gnulib module inet_ntop - - -EXTRA_DIST += inet_ntop.c - -EXTRA_libgnu_gpl_la_SOURCES += inet_ntop.c - -## end gnulib module inet_ntop - -## begin gnulib module inet_pton - - -EXTRA_DIST += inet_pton.c - -EXTRA_libgnu_gpl_la_SOURCES += inet_pton.c - -## end gnulib module inet_pton - -## begin gnulib module intprops - - -EXTRA_DIST += intprops.h - -## end gnulib module intprops - -## begin gnulib module limits-h - -BUILT_SOURCES += $(LIMITS_H) - -# We need the following in order to create when the system -# doesn't have one that is compatible with GNU. -if GL_GENERATE_LIMITS_H -limits.h: limits.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ - < $(srcdir)/limits.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -limits.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += limits.h limits.h-t - -EXTRA_DIST += limits.in.h - -## end gnulib module limits-h - -## begin gnulib module listen - - -EXTRA_DIST += listen.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += listen.c - -## end gnulib module listen - -## begin gnulib module lseek - - -EXTRA_DIST += lseek.c - -EXTRA_libgnu_gpl_la_SOURCES += lseek.c - -## end gnulib module lseek - -## begin gnulib module malloc-posix - - -EXTRA_DIST += malloc.c - -EXTRA_libgnu_gpl_la_SOURCES += malloc.c - -## end gnulib module malloc-posix - -## begin gnulib module malloca - -libgnu_gpl_la_SOURCES += malloca.c - -EXTRA_DIST += malloca.h malloca.valgrind - -## end gnulib module malloca - -## begin gnulib module memchr - - -EXTRA_DIST += memchr.c memchr.valgrind - -EXTRA_libgnu_gpl_la_SOURCES += memchr.c - -## end gnulib module memchr - -## begin gnulib module minmax - -libgnu_gpl_la_SOURCES += minmax.h - -## end gnulib module minmax - -## begin gnulib module mktime - - -EXTRA_DIST += mktime-internal.h mktime.c - -EXTRA_libgnu_gpl_la_SOURCES += mktime.c - -## end gnulib module mktime - -## begin gnulib module mktime-internal - - -EXTRA_DIST += mktime-internal.h mktime.c - -EXTRA_libgnu_gpl_la_SOURCES += mktime.c - -## end gnulib module mktime-internal - -## begin gnulib module msvc-inval - - -EXTRA_DIST += msvc-inval.c msvc-inval.h - -EXTRA_libgnu_gpl_la_SOURCES += msvc-inval.c - -## end gnulib module msvc-inval - -## begin gnulib module msvc-nothrow - - -EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h - -EXTRA_libgnu_gpl_la_SOURCES += msvc-nothrow.c - -## end gnulib module msvc-nothrow - -## begin gnulib module netdb - -BUILT_SOURCES += netdb.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -netdb.h: netdb.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_NETDB_H''@|$(NEXT_NETDB_H)|g' \ - -e 's|@''HAVE_NETDB_H''@|$(HAVE_NETDB_H)|g' \ - -e 's/@''GNULIB_GETADDRINFO''@/$(GNULIB_GETADDRINFO)/g' \ - -e 's|@''HAVE_STRUCT_ADDRINFO''@|$(HAVE_STRUCT_ADDRINFO)|g' \ - -e 's|@''HAVE_DECL_FREEADDRINFO''@|$(HAVE_DECL_FREEADDRINFO)|g' \ - -e 's|@''HAVE_DECL_GAI_STRERROR''@|$(HAVE_DECL_GAI_STRERROR)|g' \ - -e 's|@''HAVE_DECL_GETADDRINFO''@|$(HAVE_DECL_GETADDRINFO)|g' \ - -e 's|@''HAVE_DECL_GETNAMEINFO''@|$(HAVE_DECL_GETNAMEINFO)|g' \ - -e 's|@''REPLACE_GAI_STRERROR''@|$(REPLACE_GAI_STRERROR)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/netdb.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += netdb.h netdb.h-t - -EXTRA_DIST += netdb.in.h - -## end gnulib module netdb - -## begin gnulib module netinet_in - -BUILT_SOURCES += $(NETINET_IN_H) - -# We need the following in order to create when the system -# doesn't have one. -if GL_GENERATE_NETINET_IN_H -netinet/in.h: netinet_in.in.h $(top_builddir)/config.status - $(AM_V_at)$(MKDIR_P) netinet - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \ - -e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \ - < $(srcdir)/netinet_in.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -netinet/in.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t -MOSTLYCLEANDIRS += netinet - -EXTRA_DIST += netinet_in.in.h - -## end gnulib module netinet_in - -## begin gnulib module parse-datetime - -# This rule overrides the Automake generated .y.c rule, to ensure that the -# parse-datetime.c file gets generated in the source directory, not in the -# build directory. -parse-datetime.c: parse-datetime.y - $(AM_V_GEN)$(SHELL) $(YLWRAP) $(srcdir)/parse-datetime.y \ - y.tab.c parse-datetime.c \ - y.tab.h parse-datetime.h \ - y.output parse-datetime.output \ - -- $(YACC) $(YFLAGS) $(AM_YFLAGS) && \ - mv parse-datetime.c parse-datetime.c-t && \ - mv parse-datetime.c-t $(srcdir)/parse-datetime.c -libgnu_gpl_la_SOURCES += parse-datetime.y -BUILT_SOURCES += parse-datetime.c -MOSTLYCLEANFILES += parse-datetime.c-t -MAINTAINERCLEANFILES += parse-datetime.c -EXTRA_DIST += parse-datetime.c - -EXTRA_DIST += parse-datetime.h - -## end gnulib module parse-datetime - -## begin gnulib module progname - -libgnu_gpl_la_SOURCES += progname.h progname.c - -## end gnulib module progname - -## begin gnulib module read-file - -libgnu_gpl_la_SOURCES += read-file.c - -EXTRA_DIST += read-file.h - -## end gnulib module read-file - -## begin gnulib module realloc-posix - - -EXTRA_DIST += realloc.c - -EXTRA_libgnu_gpl_la_SOURCES += realloc.c - -## end gnulib module realloc-posix - -## begin gnulib module recv - - -EXTRA_DIST += recv.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += recv.c - -## end gnulib module recv - -## begin gnulib module recvfrom - - -EXTRA_DIST += recvfrom.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += recvfrom.c - -## end gnulib module recvfrom - -## begin gnulib module select - - -EXTRA_DIST += select.c - -EXTRA_libgnu_gpl_la_SOURCES += select.c - -## end gnulib module select - -## begin gnulib module send - - -EXTRA_DIST += send.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += send.c - -## end gnulib module send - -## begin gnulib module sendto - - -EXTRA_DIST += sendto.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += sendto.c - -## end gnulib module sendto - -## begin gnulib module setenv - - -EXTRA_DIST += setenv.c - -EXTRA_libgnu_gpl_la_SOURCES += setenv.c - -## end gnulib module setenv - -## begin gnulib module setsockopt - - -EXTRA_DIST += setsockopt.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += setsockopt.c - -## end gnulib module setsockopt - -## begin gnulib module shutdown - - -EXTRA_DIST += shutdown.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += shutdown.c - -## end gnulib module shutdown - -## begin gnulib module signal-h - -BUILT_SOURCES += signal.h - -# We need the following in order to create when the system -# doesn't have a complete one. -signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ - -e 's|@''GNULIB_PTHREAD_SIGMASK''@|$(GNULIB_PTHREAD_SIGMASK)|g' \ - -e 's|@''GNULIB_RAISE''@|$(GNULIB_RAISE)|g' \ - -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \ - -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \ - -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \ - -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ - -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \ - -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \ - -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ - -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ - -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ - -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ - -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ - -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \ - -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \ - -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/signal.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += signal.h signal.h-t - -EXTRA_DIST += signal.in.h - -## end gnulib module signal-h - -## begin gnulib module size_max - -libgnu_gpl_la_SOURCES += size_max.h - -## end gnulib module size_max - -## begin gnulib module snippet/_Noreturn - -# Because this Makefile snippet defines a variable used by other -# gnulib Makefile snippets, it must be present in all Makefile.am that -# need it. This is ensured by the applicability 'all' defined above. - -_NORETURN_H=$(top_srcdir)/build-aux/snippet/_Noreturn.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/_Noreturn.h - -## end gnulib module snippet/_Noreturn - -## begin gnulib module snippet/arg-nonnull - -# The BUILT_SOURCES created by this Makefile snippet are not used via #include -# statements but through direct file reference. Therefore this snippet must be -# present in all Makefile.am that need it. This is ensured by the applicability -# 'all' defined above. - -BUILT_SOURCES += arg-nonnull.h -# The arg-nonnull.h that gets inserted into generated .h files is the same as -# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut -# off. -arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/GL_ARG_NONNULL/,$$p' \ - < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t - -ARG_NONNULL_H=arg-nonnull.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h - -## end gnulib module snippet/arg-nonnull - -## begin gnulib module snippet/c++defs - -# The BUILT_SOURCES created by this Makefile snippet are not used via #include -# statements but through direct file reference. Therefore this snippet must be -# present in all Makefile.am that need it. This is ensured by the applicability -# 'all' defined above. - -BUILT_SOURCES += c++defs.h -# The c++defs.h that gets inserted into generated .h files is the same as -# build-aux/snippet/c++defs.h, except that it has the copyright header cut off. -c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/_GL_CXXDEFS/,$$p' \ - < $(top_srcdir)/build-aux/snippet/c++defs.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += c++defs.h c++defs.h-t - -CXXDEFS_H=c++defs.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h - -## end gnulib module snippet/c++defs - -## begin gnulib module snippet/warn-on-use - -BUILT_SOURCES += warn-on-use.h -# The warn-on-use.h that gets inserted into generated .h files is the same as -# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut -# off. -warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h - $(AM_V_GEN)rm -f $@-t $@ && \ - sed -n -e '/^.ifndef/,$$p' \ - < $(top_srcdir)/build-aux/snippet/warn-on-use.h \ - > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t - -WARN_ON_USE_H=warn-on-use.h - -EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h - -## end gnulib module snippet/warn-on-use - -## begin gnulib module snprintf - - -EXTRA_DIST += snprintf.c - -EXTRA_libgnu_gpl_la_SOURCES += snprintf.c - -## end gnulib module snprintf - -## begin gnulib module socket - - -EXTRA_DIST += socket.c w32sock.h - -EXTRA_libgnu_gpl_la_SOURCES += socket.c - -## end gnulib module socket - -## begin gnulib module sockets - -libgnu_gpl_la_SOURCES += sockets.h sockets.c - -EXTRA_DIST += w32sock.h - -## end gnulib module sockets - -## begin gnulib module stdalign - -BUILT_SOURCES += $(STDALIGN_H) - -# We need the following in order to create when the system -# doesn't have one that works. -if GL_GENERATE_STDALIGN_H -stdalign.h: stdalign.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - cat $(srcdir)/stdalign.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -stdalign.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stdalign.h stdalign.h-t - -EXTRA_DIST += stdalign.in.h - -## end gnulib module stdalign - -## begin gnulib module stdbool - -BUILT_SOURCES += $(STDBOOL_H) - -# We need the following in order to create when the system -# doesn't have one that works. -if GL_GENERATE_STDBOOL_H -stdbool.h: stdbool.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -stdbool.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stdbool.h stdbool.h-t - -EXTRA_DIST += stdbool.in.h - -## end gnulib module stdbool - -## begin gnulib module stddef - -BUILT_SOURCES += $(STDDEF_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -if GL_GENERATE_STDDEF_H -stddef.h: stddef.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ - -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ - -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ - -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ - < $(srcdir)/stddef.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -stddef.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stddef.h stddef.h-t - -EXTRA_DIST += stddef.in.h - -## end gnulib module stddef - -## begin gnulib module stdint - -BUILT_SOURCES += $(STDINT_H) - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -if GL_GENERATE_STDINT_H -stdint.h: stdint.in.h $(top_builddir)/config.status - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ - -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ - -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ - -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ - -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ - -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ - -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ - -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ - -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ - -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ - -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ - -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ - -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ - -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ - -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ - -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ - -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ - -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ - -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ - -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ - < $(srcdir)/stdint.in.h; \ - } > $@-t && \ - mv $@-t $@ -else -stdint.h: $(top_builddir)/config.status - rm -f $@ -endif -MOSTLYCLEANFILES += stdint.h stdint.h-t - -EXTRA_DIST += stdint.in.h - -## end gnulib module stdint - -## begin gnulib module stdio - -BUILT_SOURCES += stdio.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ - -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ - -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ - -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ - -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ - -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ - -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ - -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ - -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ - -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ - -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ - -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ - -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ - -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ - -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ - -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ - -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ - -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ - -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ - -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ - -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ - -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ - -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ - -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ - -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ - -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ - -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ - -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ - -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ - -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ - -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ - -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ - -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ - -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ - -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ - -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ - -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ - -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ - -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ - -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ - -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ - -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ - -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ - -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ - -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ - -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ - -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ - -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ - -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ - -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ - -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ - -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ - -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ - -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ - < $(srcdir)/stdio.in.h | \ - sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ - -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ - -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ - -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ - -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ - -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ - -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ - -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ - -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ - -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ - -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ - -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ - -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ - -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ - -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ - -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ - -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ - -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ - -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ - -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ - -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ - -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ - -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ - -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ - -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ - -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ - -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ - -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ - -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ - -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ - -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ - -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ - -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ - -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ - -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ - -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ - -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ - -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ - -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ - -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ - -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ - -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ - -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ - -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ - -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ - -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ - -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ - -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ - -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += stdio.h stdio.h-t - -EXTRA_DIST += stdio.in.h - -## end gnulib module stdio - -## begin gnulib module stdlib - -BUILT_SOURCES += stdlib.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ - $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ - -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ - -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ - -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ - -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ - -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ - -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ - -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ - -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ - -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ - -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ - -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ - -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ - -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ - -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ - -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ - -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ - -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ - -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ - -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ - -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ - -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ - -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ - -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ - -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ - -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ - -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ - -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ - -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ - -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ - -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ - -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ - -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ - -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ - < $(srcdir)/stdlib.in.h | \ - sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ - -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ - -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ - -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ - -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ - -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ - -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ - -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ - -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ - -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ - -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ - -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ - -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ - -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ - -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ - -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ - -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ - -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ - -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ - -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ - -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ - -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ - -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ - -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ - -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ - -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ - -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ - -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ - -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ - -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ - -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ - -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ - -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ - -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ - -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ - -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ - -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ - -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ - -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ - -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ - -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ - -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ - -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ - -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ - -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _Noreturn/r $(_NORETURN_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += stdlib.h stdlib.h-t - -EXTRA_DIST += stdlib.in.h - -## end gnulib module stdlib - -## begin gnulib module strdup-posix - - -EXTRA_DIST += strdup.c - -EXTRA_libgnu_gpl_la_SOURCES += strdup.c - -## end gnulib module strdup-posix - -## begin gnulib module strerror - - -EXTRA_DIST += strerror.c - -EXTRA_libgnu_gpl_la_SOURCES += strerror.c - -## end gnulib module strerror - -## begin gnulib module strerror-override - - -EXTRA_DIST += strerror-override.c strerror-override.h - -EXTRA_libgnu_gpl_la_SOURCES += strerror-override.c - -## end gnulib module strerror-override - -## begin gnulib module strftime - -libgnu_gpl_la_SOURCES += strftime.c - -EXTRA_DIST += strftime.h - -## end gnulib module strftime - -## begin gnulib module string - -BUILT_SOURCES += string.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ - -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ - -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ - -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ - -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ - -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ - -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ - -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ - -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ - -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ - -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ - -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ - -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ - -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ - -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ - -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ - -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ - -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ - -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ - -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ - -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ - -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ - -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ - -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ - -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ - -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ - -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ - -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ - -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ - -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ - -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ - -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ - -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ - -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ - -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ - -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ - -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ - -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ - < $(srcdir)/string.in.h | \ - sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ - -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ - -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ - -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ - -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ - -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ - -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ - -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ - -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ - -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ - -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ - -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ - -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ - -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ - -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ - -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ - -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ - -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ - -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ - -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ - -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ - -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ - -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ - -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ - -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ - -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ - -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ - -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ - -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ - -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ - -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ - -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ - -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ - -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ - -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ - -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ - < $(srcdir)/string.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += string.h string.h-t - -EXTRA_DIST += string.in.h - -## end gnulib module string - -## begin gnulib module sys_select - -BUILT_SOURCES += sys/select.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -sys/select.h: sys_select.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_SELECT_H''@|$(NEXT_SYS_SELECT_H)|g' \ - -e 's|@''HAVE_SYS_SELECT_H''@|$(HAVE_SYS_SELECT_H)|g' \ - -e 's/@''GNULIB_PSELECT''@/$(GNULIB_PSELECT)/g' \ - -e 's/@''GNULIB_SELECT''@/$(GNULIB_SELECT)/g' \ - -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ - -e 's|@''HAVE_PSELECT''@|$(HAVE_PSELECT)|g' \ - -e 's|@''REPLACE_PSELECT''@|$(REPLACE_PSELECT)|g' \ - -e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/sys_select.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += sys/select.h sys/select.h-t -MOSTLYCLEANDIRS += sys - -EXTRA_DIST += sys_select.in.h - -## end gnulib module sys_select - -## begin gnulib module sys_socket - -BUILT_SOURCES += sys/socket.h -libgnu_gpl_la_SOURCES += sys_socket.c - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \ - -e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \ - -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ - -e 's/@''GNULIB_SOCKET''@/$(GNULIB_SOCKET)/g' \ - -e 's/@''GNULIB_CONNECT''@/$(GNULIB_CONNECT)/g' \ - -e 's/@''GNULIB_ACCEPT''@/$(GNULIB_ACCEPT)/g' \ - -e 's/@''GNULIB_BIND''@/$(GNULIB_BIND)/g' \ - -e 's/@''GNULIB_GETPEERNAME''@/$(GNULIB_GETPEERNAME)/g' \ - -e 's/@''GNULIB_GETSOCKNAME''@/$(GNULIB_GETSOCKNAME)/g' \ - -e 's/@''GNULIB_GETSOCKOPT''@/$(GNULIB_GETSOCKOPT)/g' \ - -e 's/@''GNULIB_LISTEN''@/$(GNULIB_LISTEN)/g' \ - -e 's/@''GNULIB_RECV''@/$(GNULIB_RECV)/g' \ - -e 's/@''GNULIB_SEND''@/$(GNULIB_SEND)/g' \ - -e 's/@''GNULIB_RECVFROM''@/$(GNULIB_RECVFROM)/g' \ - -e 's/@''GNULIB_SENDTO''@/$(GNULIB_SENDTO)/g' \ - -e 's/@''GNULIB_SETSOCKOPT''@/$(GNULIB_SETSOCKOPT)/g' \ - -e 's/@''GNULIB_SHUTDOWN''@/$(GNULIB_SHUTDOWN)/g' \ - -e 's/@''GNULIB_ACCEPT4''@/$(GNULIB_ACCEPT4)/g' \ - -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ - -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ - -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \ - -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY''@|$(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)|g' \ - -e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \ - -e 's|@''HAVE_ACCEPT4''@|$(HAVE_ACCEPT4)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/sys_socket.in.h; \ - } > $@-t && \ - mv -f $@-t $@ -MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t -MOSTLYCLEANDIRS += sys - -EXTRA_DIST += sys_socket.in.h - -## end gnulib module sys_socket - -## begin gnulib module sys_stat - -BUILT_SOURCES += sys/stat.h - -# We need the following in order to create when the system -# has one that is incomplete. -sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ - -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ - -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \ - -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \ - -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \ - -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \ - -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \ - -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \ - -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \ - -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \ - -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \ - -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \ - -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \ - -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \ - -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \ - -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ - -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ - -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ - -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ - -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ - -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ - -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ - -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ - -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ - -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ - -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ - -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ - -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ - -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ - -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ - -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ - -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ - -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ - -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ - -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/sys_stat.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t -MOSTLYCLEANDIRS += sys - -EXTRA_DIST += sys_stat.in.h - -## end gnulib module sys_stat - -## begin gnulib module sys_time - -BUILT_SOURCES += sys/time.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ - -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ - -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ - -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ - -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ - -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ - -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/sys_time.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += sys/time.h sys/time.h-t - -EXTRA_DIST += sys_time.in.h - -## end gnulib module sys_time - -## begin gnulib module sys_types - -BUILT_SOURCES += sys/types.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -sys/types.h: sys_types.in.h $(top_builddir)/config.status - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ - -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ - < $(srcdir)/sys_types.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += sys/types.h sys/types.h-t - -EXTRA_DIST += sys_types.in.h - -## end gnulib module sys_types - -## begin gnulib module sys_uio - -BUILT_SOURCES += sys/uio.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -sys/uio.h: sys_uio.in.h $(top_builddir)/config.status - $(AM_V_at)$(MKDIR_P) sys - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_SYS_UIO_H''@|$(NEXT_SYS_UIO_H)|g' \ - -e 's|@''HAVE_SYS_UIO_H''@|$(HAVE_SYS_UIO_H)|g' \ - < $(srcdir)/sys_uio.in.h; \ - } > $@-t && \ - mv -f $@-t $@ -MOSTLYCLEANFILES += sys/uio.h sys/uio.h-t -MOSTLYCLEANDIRS += sys - -EXTRA_DIST += sys_uio.in.h - -## end gnulib module sys_uio - -## begin gnulib module time - -BUILT_SOURCES += time.h - -# We need the following in order to create when the system -# doesn't have one that works with the given compiler. -time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ - -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ - -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ - -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ - -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ - -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ - -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ - -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ - -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ - -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ - -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ - -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ - -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ - -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ - -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ - -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ - -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ - -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ - -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ - -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ - -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ - -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ - -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ - < $(srcdir)/time.in.h; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += time.h time.h-t - -EXTRA_DIST += time.in.h - -## end gnulib module time - -## begin gnulib module time_r - - -EXTRA_DIST += time_r.c - -EXTRA_libgnu_gpl_la_SOURCES += time_r.c - -## end gnulib module time_r - -## begin gnulib module time_rz - - -EXTRA_DIST += time-internal.h time_rz.c - -EXTRA_libgnu_gpl_la_SOURCES += time_rz.c - -## end gnulib module time_rz - -## begin gnulib module timegm - - -EXTRA_DIST += mktime-internal.h timegm.c - -EXTRA_libgnu_gpl_la_SOURCES += timegm.c - -## end gnulib module timegm - -## begin gnulib module timespec - -libgnu_gpl_la_SOURCES += timespec.c - -EXTRA_DIST += timespec.h - -## end gnulib module timespec - -## begin gnulib module unistd - -BUILT_SOURCES += unistd.h -libgnu_gpl_la_SOURCES += unistd.c - -# We need the following in order to create an empty placeholder for -# when the system doesn't have one. -unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ - -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ - -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ - -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ - -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ - -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ - -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ - -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ - -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ - -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ - -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ - -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ - -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ - -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ - -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ - -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ - -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ - -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ - -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ - -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ - -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ - -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ - -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ - -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ - -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ - -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ - -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ - -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ - -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ - -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ - -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ - -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ - -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ - -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ - -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ - -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ - -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ - -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ - -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ - -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ - -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ - -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ - -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ - -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ - -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_GGL_UNISTD_H_GETOPT)/g' \ - -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ - -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ - -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ - -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ - -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ - -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ - < $(srcdir)/unistd.in.h | \ - sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ - -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ - -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ - -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ - -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ - -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ - -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ - -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ - -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ - -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ - -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ - -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ - -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ - -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \ - -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ - -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ - -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ - -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ - -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ - -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ - -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ - -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ - -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ - -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ - -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ - -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ - -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ - -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ - -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ - -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ - -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ - -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ - -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ - -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ - -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ - -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ - -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ - -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ - -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ - -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ - -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ - -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ - | \ - sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ - -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ - -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ - -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ - -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ - -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ - -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ - -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ - -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ - -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ - -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ - -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ - -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ - -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ - -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ - -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ - -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ - -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ - -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ - -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ - -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ - -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ - -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ - -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ - -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ - -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ - -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ - -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ - -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ - -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ - -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ - -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ - -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += unistd.h unistd.h-t - -EXTRA_DIST += unistd.in.h - -## end gnulib module unistd - -## begin gnulib module unsetenv - - -EXTRA_DIST += unsetenv.c - -EXTRA_libgnu_gpl_la_SOURCES += unsetenv.c - -## end gnulib module unsetenv - -## begin gnulib module vasnprintf - - -EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h - -EXTRA_libgnu_gpl_la_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c - -## end gnulib module vasnprintf - -## begin gnulib module verify - - -EXTRA_DIST += verify.h - -## end gnulib module verify - -## begin gnulib module wchar - -BUILT_SOURCES += wchar.h - -# We need the following in order to create when the system -# version does not work standalone. -wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) - $(AM_V_GEN)rm -f $@-t $@ && \ - { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ - sed -e 's|@''GUARD_PREFIX''@|GL_GGL|g' \ - -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ - -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ - -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ - -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ - -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ - -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ - -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ - -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ - -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ - -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ - -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ - -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ - -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ - -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ - -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ - -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ - -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ - -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ - -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ - -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ - -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ - -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ - -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ - -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ - -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ - -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ - -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ - -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ - -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ - -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ - -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ - -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ - -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ - -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ - -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ - -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ - -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ - -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ - -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ - -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ - -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ - -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ - -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ - -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ - < $(srcdir)/wchar.in.h | \ - sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ - -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ - -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ - -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ - -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ - -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ - -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ - -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ - -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ - -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ - -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ - -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ - -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ - -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ - -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ - -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ - -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ - -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ - -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ - -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ - -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ - -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ - -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ - -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ - -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ - -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ - -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ - -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ - -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ - -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ - -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ - -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ - -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ - -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ - -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ - -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ - -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ - -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ - -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ - -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ - | \ - sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ - -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ - -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ - -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ - -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ - -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ - -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ - -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ - -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ - -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ - -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ - -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ - -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ - -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ - -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ - } > $@-t && \ - mv $@-t $@ -MOSTLYCLEANFILES += wchar.h wchar.h-t - -EXTRA_DIST += wchar.in.h - -## end gnulib module wchar - -## begin gnulib module xalloc - -libgnu_gpl_la_SOURCES += xmalloc.c - -EXTRA_DIST += xalloc.h - -## end gnulib module xalloc - -## begin gnulib module xalloc-die - -libgnu_gpl_la_SOURCES += xalloc-die.c - -## end gnulib module xalloc-die - -## begin gnulib module xalloc-oversized - - -EXTRA_DIST += xalloc-oversized.h - -## end gnulib module xalloc-oversized - -## begin gnulib module xsize - -libgnu_gpl_la_SOURCES += xsize.h xsize.c - -## end gnulib module xsize - - -mostlyclean-local: mostlyclean-generic - @for dir in '' $(MOSTLYCLEANDIRS); do \ - if test -n "$$dir" && test -d $$dir; then \ - echo "rmdir $$dir"; rmdir $$dir; \ - fi; \ - done; \ - : diff --git a/src/gl/accept.c b/src/gl/accept.c deleted file mode 100644 index bd0605eb63..0000000000 --- a/src/gl/accept.c +++ /dev/null @@ -1,52 +0,0 @@ -/* accept.c --- wrappers for Windows accept function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#undef accept - -int -rpl_accept (int fd, struct sockaddr *addr, socklen_t *addrlen) -{ - SOCKET sock = FD_TO_SOCKET (fd); - - if (sock == INVALID_SOCKET) - { - errno = EBADF; - return -1; - } - else - { - SOCKET fh = accept (sock, addr, addrlen); - if (fh == INVALID_SOCKET) - { - set_winsock_errno (); - return -1; - } - else - return SOCKET_TO_FD (fh); - } -} diff --git a/src/gl/alloca.c b/src/gl/alloca.c deleted file mode 100644 index ee0f018868..0000000000 --- a/src/gl/alloca.c +++ /dev/null @@ -1,478 +0,0 @@ -/* alloca.c -- allocate automatically reclaimed memory - (Mostly) portable public-domain implementation -- D A Gwyn - - This implementation of the PWB library alloca function, - which is used to allocate space off the run-time stack so - that it is automatically reclaimed upon procedure exit, - was inspired by discussions with J. Q. Johnson of Cornell. - J.Otto Tennant contributed the Cray support. - - There are some preprocessor constants that can - be defined when compiling for your specific system, for - improved efficiency; however, the defaults should be okay. - - The general concept of this implementation is to keep - track of all alloca-allocated blocks, and reclaim any - that are found to be deeper in the stack than the current - invocation. This heuristic does not reclaim storage as - soon as it becomes invalid, but it will do so eventually. - - As a special case, alloca(0) reclaims storage without - allocating any. It is a good idea to use alloca(0) in - your main control loop, etc. to force garbage collection. */ - -#include - -#include - -#include -#include - -#ifdef emacs -# include "lisp.h" -# include "blockinput.h" -# ifdef EMACS_FREE -# undef free -# define free EMACS_FREE -# endif -#else -# define memory_full() abort () -#endif - -/* If compiling with GCC 2, this file's not needed. */ -#if !defined (__GNUC__) || __GNUC__ < 2 - -/* If someone has defined alloca as a macro, - there must be some other way alloca is supposed to work. */ -# ifndef alloca - -# ifdef emacs -# ifdef static -/* actually, only want this if static is defined as "" - -- this is for usg, in which emacs must undefine static - in order to make unexec workable - */ -# ifndef STACK_DIRECTION -you -lose --- must know STACK_DIRECTION at compile-time -/* Using #error here is not wise since this file should work for - old and obscure compilers. */ -# endif /* STACK_DIRECTION undefined */ -# endif /* static */ -# endif /* emacs */ - -/* If your stack is a linked list of frames, you have to - provide an "address metric" ADDRESS_FUNCTION macro. */ - -# if defined (CRAY) && defined (CRAY_STACKSEG_END) -long i00afunc (); -# define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) -# else -# define ADDRESS_FUNCTION(arg) &(arg) -# endif - -/* Define STACK_DIRECTION if you know the direction of stack - growth for your system; otherwise it will be automatically - deduced at run-time. - - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ - -# ifndef STACK_DIRECTION -# define STACK_DIRECTION 0 /* Direction unknown. */ -# endif - -# if STACK_DIRECTION != 0 - -# define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ - -# else /* STACK_DIRECTION == 0; need run-time code. */ - -static int stack_dir; /* 1 or -1 once known. */ -# define STACK_DIR stack_dir - -static int -find_stack_direction (int *addr, int depth) -{ - int dir, dummy = 0; - if (! addr) - addr = &dummy; - *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; - dir = depth ? find_stack_direction (addr, depth - 1) : 0; - return dir + dummy; -} - -# endif /* STACK_DIRECTION == 0 */ - -/* An "alloca header" is used to: - (a) chain together all alloca'ed blocks; - (b) keep track of stack depth. - - It is very important that sizeof(header) agree with malloc - alignment chunk size. The following default should work okay. */ - -# ifndef ALIGN_SIZE -# define ALIGN_SIZE sizeof(double) -# endif - -typedef union hdr -{ - char align[ALIGN_SIZE]; /* To force sizeof(header). */ - struct - { - union hdr *next; /* For chaining headers. */ - char *deep; /* For stack depth measure. */ - } h; -} header; - -static header *last_alloca_header = NULL; /* -> last alloca header. */ - -/* Return a pointer to at least SIZE bytes of storage, - which will be automatically reclaimed upon exit from - the procedure that called alloca. Originally, this space - was supposed to be taken from the current stack frame of the - caller, but that method cannot be made to work for some - implementations of C, for example under Gould's UTX/32. */ - -void * -alloca (size_t size) -{ - auto char probe; /* Probes stack depth: */ - register char *depth = ADDRESS_FUNCTION (probe); - -# if STACK_DIRECTION == 0 - if (STACK_DIR == 0) /* Unknown growth direction. */ - STACK_DIR = find_stack_direction (NULL, (size & 1) + 20); -# endif - - /* Reclaim garbage, defined as all alloca'd storage that - was allocated from deeper in the stack than currently. */ - - { - register header *hp; /* Traverses linked list. */ - -# ifdef emacs - BLOCK_INPUT; -# endif - - for (hp = last_alloca_header; hp != NULL;) - if ((STACK_DIR > 0 && hp->h.deep > depth) - || (STACK_DIR < 0 && hp->h.deep < depth)) - { - register header *np = hp->h.next; - - free (hp); /* Collect garbage. */ - - hp = np; /* -> next header. */ - } - else - break; /* Rest are not deeper. */ - - last_alloca_header = hp; /* -> last valid storage. */ - -# ifdef emacs - UNBLOCK_INPUT; -# endif - } - - if (size == 0) - return NULL; /* No allocation required. */ - - /* Allocate combined header + user data storage. */ - - { - /* Address of header. */ - register header *new; - - size_t combined_size = sizeof (header) + size; - if (combined_size < sizeof (header)) - memory_full (); - - new = malloc (combined_size); - - if (! new) - memory_full (); - - new->h.next = last_alloca_header; - new->h.deep = depth; - - last_alloca_header = new; - - /* User storage begins just after header. */ - - return (void *) (new + 1); - } -} - -# if defined (CRAY) && defined (CRAY_STACKSEG_END) - -# ifdef DEBUG_I00AFUNC -# include -# endif - -# ifndef CRAY_STACK -# define CRAY_STACK -# ifndef CRAY2 -/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ -struct stack_control_header - { - long shgrow:32; /* Number of times stack has grown. */ - long shaseg:32; /* Size of increments to stack. */ - long shhwm:32; /* High water mark of stack. */ - long shsize:32; /* Current size of stack (all segments). */ - }; - -/* The stack segment linkage control information occurs at - the high-address end of a stack segment. (The stack - grows from low addresses to high addresses.) The initial - part of the stack segment linkage control information is - 0200 (octal) words. This provides for register storage - for the routine which overflows the stack. */ - -struct stack_segment_linkage - { - long ss[0200]; /* 0200 overflow words. */ - long sssize:32; /* Number of words in this segment. */ - long ssbase:32; /* Offset to stack base. */ - long:32; - long sspseg:32; /* Offset to linkage control of previous - segment of stack. */ - long:32; - long sstcpt:32; /* Pointer to task common address block. */ - long sscsnm; /* Private control structure number for - microtasking. */ - long ssusr1; /* Reserved for user. */ - long ssusr2; /* Reserved for user. */ - long sstpid; /* Process ID for pid based multi-tasking. */ - long ssgvup; /* Pointer to multitasking thread giveup. */ - long sscray[7]; /* Reserved for Cray Research. */ - long ssa0; - long ssa1; - long ssa2; - long ssa3; - long ssa4; - long ssa5; - long ssa6; - long ssa7; - long sss0; - long sss1; - long sss2; - long sss3; - long sss4; - long sss5; - long sss6; - long sss7; - }; - -# else /* CRAY2 */ -/* The following structure defines the vector of words - returned by the STKSTAT library routine. */ -struct stk_stat - { - long now; /* Current total stack size. */ - long maxc; /* Amount of contiguous space which would - be required to satisfy the maximum - stack demand to date. */ - long high_water; /* Stack high-water mark. */ - long overflows; /* Number of stack overflow ($STKOFEN) calls. */ - long hits; /* Number of internal buffer hits. */ - long extends; /* Number of block extensions. */ - long stko_mallocs; /* Block allocations by $STKOFEN. */ - long underflows; /* Number of stack underflow calls ($STKRETN). */ - long stko_free; /* Number of deallocations by $STKRETN. */ - long stkm_free; /* Number of deallocations by $STKMRET. */ - long segments; /* Current number of stack segments. */ - long maxs; /* Maximum number of stack segments so far. */ - long pad_size; /* Stack pad size. */ - long current_address; /* Current stack segment address. */ - long current_size; /* Current stack segment size. This - number is actually corrupted by STKSTAT to - include the fifteen word trailer area. */ - long initial_address; /* Address of initial segment. */ - long initial_size; /* Size of initial segment. */ - }; - -/* The following structure describes the data structure which trails - any stack segment. I think that the description in 'asdef' is - out of date. I only describe the parts that I am sure about. */ - -struct stk_trailer - { - long this_address; /* Address of this block. */ - long this_size; /* Size of this block (does not include - this trailer). */ - long unknown2; - long unknown3; - long link; /* Address of trailer block of previous - segment. */ - long unknown5; - long unknown6; - long unknown7; - long unknown8; - long unknown9; - long unknown10; - long unknown11; - long unknown12; - long unknown13; - long unknown14; - }; - -# endif /* CRAY2 */ -# endif /* not CRAY_STACK */ - -# ifdef CRAY2 -/* Determine a "stack measure" for an arbitrary ADDRESS. - I doubt that "lint" will like this much. */ - -static long -i00afunc (long *address) -{ - struct stk_stat status; - struct stk_trailer *trailer; - long *block, size; - long result = 0; - - /* We want to iterate through all of the segments. The first - step is to get the stack status structure. We could do this - more quickly and more directly, perhaps, by referencing the - $LM00 common block, but I know that this works. */ - - STKSTAT (&status); - - /* Set up the iteration. */ - - trailer = (struct stk_trailer *) (status.current_address - + status.current_size - - 15); - - /* There must be at least one stack segment. Therefore it is - a fatal error if "trailer" is null. */ - - if (trailer == 0) - abort (); - - /* Discard segments that do not contain our argument address. */ - - while (trailer != 0) - { - block = (long *) trailer->this_address; - size = trailer->this_size; - if (block == 0 || size == 0) - abort (); - trailer = (struct stk_trailer *) trailer->link; - if ((block <= address) && (address < (block + size))) - break; - } - - /* Set the result to the offset in this segment and add the sizes - of all predecessor segments. */ - - result = address - block; - - if (trailer == 0) - { - return result; - } - - do - { - if (trailer->this_size <= 0) - abort (); - result += trailer->this_size; - trailer = (struct stk_trailer *) trailer->link; - } - while (trailer != 0); - - /* We are done. Note that if you present a bogus address (one - not in any segment), you will get a different number back, formed - from subtracting the address of the first block. This is probably - not what you want. */ - - return (result); -} - -# else /* not CRAY2 */ -/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. - Determine the number of the cell within the stack, - given the address of the cell. The purpose of this - routine is to linearize, in some sense, stack addresses - for alloca. */ - -static long -i00afunc (long address) -{ - long stkl = 0; - - long size, pseg, this_segment, stack; - long result = 0; - - struct stack_segment_linkage *ssptr; - - /* Register B67 contains the address of the end of the - current stack segment. If you (as a subprogram) store - your registers on the stack and find that you are past - the contents of B67, you have overflowed the segment. - - B67 also points to the stack segment linkage control - area, which is what we are really interested in. */ - - stkl = CRAY_STACKSEG_END (); - ssptr = (struct stack_segment_linkage *) stkl; - - /* If one subtracts 'size' from the end of the segment, - one has the address of the first word of the segment. - - If this is not the first segment, 'pseg' will be - nonzero. */ - - pseg = ssptr->sspseg; - size = ssptr->sssize; - - this_segment = stkl - size; - - /* It is possible that calling this routine itself caused - a stack overflow. Discard stack segments which do not - contain the target address. */ - - while (!(this_segment <= address && address <= stkl)) - { -# ifdef DEBUG_I00AFUNC - fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); -# endif - if (pseg == 0) - break; - stkl = stkl - pseg; - ssptr = (struct stack_segment_linkage *) stkl; - size = ssptr->sssize; - pseg = ssptr->sspseg; - this_segment = stkl - size; - } - - result = address - this_segment; - - /* If you subtract pseg from the current end of the stack, - you get the address of the previous stack segment's end. - This seems a little convoluted to me, but I'll bet you save - a cycle somewhere. */ - - while (pseg != 0) - { -# ifdef DEBUG_I00AFUNC - fprintf (stderr, "%011o %011o\n", pseg, size); -# endif - stkl = stkl - pseg; - ssptr = (struct stack_segment_linkage *) stkl; - size = ssptr->sssize; - pseg = ssptr->sspseg; - result += size; - } - return (result); -} - -# endif /* not CRAY2 */ -# endif /* CRAY */ - -# endif /* no alloca */ -#endif /* not GCC 2 */ diff --git a/src/gl/alloca.in.h b/src/gl/alloca.in.h deleted file mode 100644 index 6a25ecdb7b..0000000000 --- a/src/gl/alloca.in.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Memory allocation on the stack. - - Copyright (C) 1995, 1999, 2001-2004, 2006-2016 Free Software Foundation, - Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program; if not, see - . - */ - -/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H - means there is a real alloca function. */ -#ifndef _GL_ALLOCA_H -#define _GL_ALLOCA_H - -/* alloca (N) returns a pointer to N bytes of memory - allocated on the stack, which will last until the function returns. - Use of alloca should be avoided: - - inside arguments of function calls - undefined behaviour, - - in inline functions - the allocation may actually last until the - calling function returns, - - for huge N (say, N >= 65536) - you never know how large (or small) - the stack is, and when the stack cannot fulfill the memory allocation - request, the program just crashes. - */ - -#ifndef alloca -# ifdef __GNUC__ -# define alloca __builtin_alloca -# elif defined _AIX -# define alloca __alloca -# elif defined _MSC_VER -# include -# define alloca _alloca -# elif defined __DECC && defined __VMS -# define alloca __ALLOCA -# elif defined __TANDEM && defined _TNS_E_TARGET -# ifdef __cplusplus -extern "C" -# endif -void *_alloca (unsigned short); -# pragma intrinsic (_alloca) -# define alloca _alloca -# elif defined __MVS__ -# include -# else -# include -# ifdef __cplusplus -extern "C" -# endif -void *alloca (size_t); -# endif -#endif - -#endif /* _GL_ALLOCA_H */ diff --git a/src/gl/arpa_inet.in.h b/src/gl/arpa_inet.in.h deleted file mode 100644 index 026c4dcb6d..0000000000 --- a/src/gl/arpa_inet.in.h +++ /dev/null @@ -1,140 +0,0 @@ -/* A GNU-like . - - Copyright (C) 2005-2006, 2008-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_ARPA_INET_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if @HAVE_FEATURES_H@ -# include /* for __GLIBC__ */ -#endif - -/* Gnulib's sys/socket.h is responsible for defining socklen_t (used below) and - for pulling in winsock2.h etc. under MinGW. - But avoid namespace pollution on glibc systems. */ -#ifndef __GLIBC__ -# include -#endif - -/* On NonStop Kernel, inet_ntop and inet_pton are declared in . - But avoid namespace pollution on glibc systems. */ -#if defined __TANDEM && !defined __GLIBC__ -# include -#endif - -#if @HAVE_ARPA_INET_H@ - -/* The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_ARPA_INET_H@ - -#endif - -#ifndef _@GUARD_PREFIX@_ARPA_INET_H -#define _@GUARD_PREFIX@_ARPA_INET_H - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - -#if @GNULIB_INET_NTOP@ -/* Converts an internet address from internal format to a printable, - presentable format. - AF is an internet address family, such as AF_INET or AF_INET6. - SRC points to a 'struct in_addr' (for AF_INET) or 'struct in6_addr' - (for AF_INET6). - DST points to a buffer having room for CNT bytes. - The printable representation of the address (in numeric form, not - surrounded by [...], no reverse DNS is done) is placed in DST, and - DST is returned. If an error occurs, the return value is NULL and - errno is set. If CNT bytes are not sufficient to hold the result, - the return value is NULL and errno is set to ENOSPC. A good value - for CNT is 46. - - For more details, see the POSIX:2001 specification - . */ -# if @REPLACE_INET_NTOP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef inet_ntop -# define inet_ntop rpl_inet_ntop -# endif -_GL_FUNCDECL_RPL (inet_ntop, const char *, - (int af, const void *restrict src, - char *restrict dst, socklen_t cnt) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (inet_ntop, const char *, - (int af, const void *restrict src, - char *restrict dst, socklen_t cnt)); -# else -# if !@HAVE_DECL_INET_NTOP@ -_GL_FUNCDECL_SYS (inet_ntop, const char *, - (int af, const void *restrict src, - char *restrict dst, socklen_t cnt) - _GL_ARG_NONNULL ((2, 3))); -# endif -/* Need to cast, because on NonStop Kernel, the fourth parameter is - size_t cnt. */ -_GL_CXXALIAS_SYS_CAST (inet_ntop, const char *, - (int af, const void *restrict src, - char *restrict dst, socklen_t cnt)); -# endif -_GL_CXXALIASWARN (inet_ntop); -#elif defined GNULIB_POSIXCHECK -# undef inet_ntop -# if HAVE_RAW_DECL_INET_NTOP -_GL_WARN_ON_USE (inet_ntop, "inet_ntop is unportable - " - "use gnulib module inet_ntop for portability"); -# endif -#endif - -#if @GNULIB_INET_PTON@ -# if @REPLACE_INET_PTON@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef inet_pton -# define inet_pton rpl_inet_pton -# endif -_GL_FUNCDECL_RPL (inet_pton, int, - (int af, const char *restrict src, void *restrict dst) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (inet_pton, int, - (int af, const char *restrict src, void *restrict dst)); -# else -# if !@HAVE_DECL_INET_PTON@ -_GL_FUNCDECL_SYS (inet_pton, int, - (int af, const char *restrict src, void *restrict dst) - _GL_ARG_NONNULL ((2, 3))); -# endif -_GL_CXXALIAS_SYS (inet_pton, int, - (int af, const char *restrict src, void *restrict dst)); -# endif -_GL_CXXALIASWARN (inet_pton); -#elif defined GNULIB_POSIXCHECK -# undef inet_pton -# if HAVE_RAW_DECL_INET_PTON -_GL_WARN_ON_USE (inet_pton, "inet_pton is unportable - " - "use gnulib module inet_pton for portability"); -# endif -#endif - - -#endif /* _@GUARD_PREFIX@_ARPA_INET_H */ -#endif /* _@GUARD_PREFIX@_ARPA_INET_H */ diff --git a/src/gl/asnprintf.c b/src/gl/asnprintf.c deleted file mode 100644 index f23b776786..0000000000 --- a/src/gl/asnprintf.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 1999, 2002, 2006, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#include "vasnprintf.h" - -#include - -char * -asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) -{ - va_list args; - char *result; - - va_start (args, format); - result = vasnprintf (resultbuf, lengthp, format, args); - va_end (args); - return result; -} diff --git a/src/gl/basename-lgpl.c b/src/gl/basename-lgpl.c deleted file mode 100644 index 11821096ae..0000000000 --- a/src/gl/basename-lgpl.c +++ /dev/null @@ -1,75 +0,0 @@ -/* basename.c -- return the last element in a file name - - Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2016 Free Software - Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -#include "dirname.h" - -#include - -/* Return the address of the last file name component of NAME. If - NAME has no relative file name components because it is a file - system root, return the empty string. */ - -char * -last_component (char const *name) -{ - char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); - char const *p; - bool saw_slash = false; - - while (ISSLASH (*base)) - base++; - - for (p = base; *p; p++) - { - if (ISSLASH (*p)) - saw_slash = true; - else if (saw_slash) - { - base = p; - saw_slash = false; - } - } - - return (char *) base; -} - -/* Return the length of the basename NAME. Typically NAME is the - value returned by base_name or last_component. Act like strlen - (NAME), except omit all trailing slashes. */ - -size_t -base_len (char const *name) -{ - size_t len; - size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); - - for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) - continue; - - if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 - && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) - return 2; - - if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len - && len == prefix_len && ISSLASH (name[prefix_len])) - return prefix_len + 1; - - return len; -} diff --git a/src/gl/bind.c b/src/gl/bind.c deleted file mode 100644 index 7f526e27cd..0000000000 --- a/src/gl/bind.c +++ /dev/null @@ -1,49 +0,0 @@ -/* bind.c --- wrappers for Windows bind function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#undef bind - -int -rpl_bind (int fd, const struct sockaddr *sockaddr, socklen_t len) -{ - SOCKET sock = FD_TO_SOCKET (fd); - - if (sock == INVALID_SOCKET) - { - errno = EBADF; - return -1; - } - else - { - int r = bind (sock, sockaddr, len); - if (r < 0) - set_winsock_errno (); - - return r; - } -} diff --git a/src/gl/c-ctype.c b/src/gl/c-ctype.c deleted file mode 100644 index 5d9d4d87a6..0000000000 --- a/src/gl/c-ctype.c +++ /dev/null @@ -1,3 +0,0 @@ -#include -#define C_CTYPE_INLINE _GL_EXTERN_INLINE -#include "c-ctype.h" diff --git a/src/gl/c-ctype.h b/src/gl/c-ctype.h deleted file mode 100644 index 717ae78bb6..0000000000 --- a/src/gl/c-ctype.h +++ /dev/null @@ -1,366 +0,0 @@ -/* Character handling in C locale. - - These functions work like the corresponding functions in , - except that they have the C (POSIX) locale hardwired, whereas the - functions' behaviour depends on the current locale set via - setlocale. - - Copyright (C) 2000-2003, 2006, 2008-2016 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, see . */ - -#ifndef C_CTYPE_H -#define C_CTYPE_H - -#include - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif -_GL_INLINE_HEADER_BEGIN -#ifndef C_CTYPE_INLINE -# define C_CTYPE_INLINE _GL_INLINE -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -/* The functions defined in this file assume the "C" locale and a character - set without diacritics (ASCII-US or EBCDIC-US or something like that). - Even if the "C" locale on a particular system is an extension of the ASCII - character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it - is ISO-8859-1), the functions in this file recognize only the ASCII - characters. */ - - -#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ - && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ - && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ - && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ - && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ - && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ - && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ - && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ - && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ - && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ - && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ - && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ - && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ - && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ - && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ - && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ - && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ - && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ - && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ - && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ - && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ - && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ - && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) -/* The character set is ASCII or one of its variants or extensions, not EBCDIC. - Testing the value of '\n' and '\r' is not relevant. */ -# define C_CTYPE_ASCII 1 -#elif ! (' ' == '\x40' && '0' == '\xf0' \ - && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ - && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') -# error "Only ASCII and EBCDIC are supported" -#endif - -#if 'A' < 0 -# error "EBCDIC and char is signed -- not supported" -#endif - -/* Cases for control characters. */ - -#define _C_CTYPE_CNTRL \ - case '\a': case '\b': case '\f': case '\n': \ - case '\r': case '\t': case '\v': \ - _C_CTYPE_OTHER_CNTRL - -/* ASCII control characters other than those with \-letter escapes. */ - -#if C_CTYPE_ASCII -# define _C_CTYPE_OTHER_CNTRL \ - case '\x00': case '\x01': case '\x02': case '\x03': \ - case '\x04': case '\x05': case '\x06': case '\x0e': \ - case '\x0f': case '\x10': case '\x11': case '\x12': \ - case '\x13': case '\x14': case '\x15': case '\x16': \ - case '\x17': case '\x18': case '\x19': case '\x1a': \ - case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ - case '\x1f': case '\x7f' -#else - /* Use EBCDIC code page 1047's assignments for ASCII control chars; - assume all EBCDIC code pages agree about these assignments. */ -# define _C_CTYPE_OTHER_CNTRL \ - case '\x00': case '\x01': case '\x02': case '\x03': \ - case '\x07': case '\x0e': case '\x0f': case '\x10': \ - case '\x11': case '\x12': case '\x13': case '\x18': \ - case '\x19': case '\x1c': case '\x1d': case '\x1e': \ - case '\x1f': case '\x26': case '\x27': case '\x2d': \ - case '\x2e': case '\x32': case '\x37': case '\x3c': \ - case '\x3d': case '\x3f' -#endif - -/* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ - -#define _C_CTYPE_LOWER_A_THRU_F_N(n) \ - case 'a' + (n): case 'b' + (n): case 'c' + (n): case 'd' + (n): \ - case 'e' + (n): case 'f' + (n) -#define _C_CTYPE_LOWER_N(n) \ - _C_CTYPE_LOWER_A_THRU_F_N(n): \ - case 'g' + (n): case 'h' + (n): case 'i' + (n): case 'j' + (n): \ - case 'k' + (n): case 'l' + (n): case 'm' + (n): case 'n' + (n): \ - case 'o' + (n): case 'p' + (n): case 'q' + (n): case 'r' + (n): \ - case 's' + (n): case 't' + (n): case 'u' + (n): case 'v' + (n): \ - case 'w' + (n): case 'x' + (n): case 'y' + (n): case 'z' + (n) - -/* Cases for hex letters, digits, lower, punct, and upper. */ - -#define _C_CTYPE_A_THRU_F \ - _C_CTYPE_LOWER_A_THRU_F_N (0): \ - _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') -#define _C_CTYPE_DIGIT \ - case '0': case '1': case '2': case '3': \ - case '4': case '5': case '6': case '7': \ - case '8': case '9' -#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) -#define _C_CTYPE_PUNCT \ - case '!': case '"': case '#': case '$': \ - case '%': case '&': case '\'': case '(': \ - case ')': case '*': case '+': case ',': \ - case '-': case '.': case '/': case ':': \ - case ';': case '<': case '=': case '>': \ - case '?': case '@': case '[': case '\\': \ - case ']': case '^': case '_': case '`': \ - case '{': case '|': case '}': case '~' -#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') - - -/* Function definitions. */ - -/* Unlike the functions in , which require an argument in the range - of the 'unsigned char' type, the functions here operate on values that are - in the 'unsigned char' range or in the 'char' range. In other words, - when you have a 'char' value, you need to cast it before using it as - argument to a function: - - const char *s = ...; - if (isalpha ((unsigned char) *s)) ... - - but you don't need to cast it for the functions defined in this file: - - const char *s = ...; - if (c_isalpha (*s)) ... - */ - -C_CTYPE_INLINE bool -c_isalnum (int c) -{ - switch (c) - { - _C_CTYPE_DIGIT: - _C_CTYPE_LOWER: - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isalpha (int c) -{ - switch (c) - { - _C_CTYPE_LOWER: - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -/* The function isascii is not locale dependent. - Its use in EBCDIC is questionable. */ -C_CTYPE_INLINE bool -c_isascii (int c) -{ - switch (c) - { - case ' ': - _C_CTYPE_CNTRL: - _C_CTYPE_DIGIT: - _C_CTYPE_LOWER: - _C_CTYPE_PUNCT: - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isblank (int c) -{ - return c == ' ' || c == '\t'; -} - -C_CTYPE_INLINE bool -c_iscntrl (int c) -{ - switch (c) - { - _C_CTYPE_CNTRL: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isdigit (int c) -{ - switch (c) - { - _C_CTYPE_DIGIT: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isgraph (int c) -{ - switch (c) - { - _C_CTYPE_DIGIT: - _C_CTYPE_LOWER: - _C_CTYPE_PUNCT: - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_islower (int c) -{ - switch (c) - { - _C_CTYPE_LOWER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isprint (int c) -{ - switch (c) - { - case ' ': - _C_CTYPE_DIGIT: - _C_CTYPE_LOWER: - _C_CTYPE_PUNCT: - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_ispunct (int c) -{ - switch (c) - { - _C_CTYPE_PUNCT: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isspace (int c) -{ - switch (c) - { - case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isupper (int c) -{ - switch (c) - { - _C_CTYPE_UPPER: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE bool -c_isxdigit (int c) -{ - switch (c) - { - _C_CTYPE_DIGIT: - _C_CTYPE_A_THRU_F: - return true; - default: - return false; - } -} - -C_CTYPE_INLINE int -c_tolower (int c) -{ - switch (c) - { - _C_CTYPE_UPPER: - return c - 'A' + 'a'; - default: - return c; - } -} - -C_CTYPE_INLINE int -c_toupper (int c) -{ - switch (c) - { - _C_CTYPE_LOWER: - return c - 'a' + 'A'; - default: - return c; - } -} - -#ifdef __cplusplus -} -#endif - -_GL_INLINE_HEADER_END - -#endif /* C_CTYPE_H */ diff --git a/src/gl/close.c b/src/gl/close.c deleted file mode 100644 index 46a7aa5176..0000000000 --- a/src/gl/close.c +++ /dev/null @@ -1,69 +0,0 @@ -/* close replacement. - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -#include - -#include "fd-hook.h" -#include "msvc-inval.h" - -#undef close - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER -static int -close_nothrow (int fd) -{ - int result; - - TRY_MSVC_INVAL - { - result = close (fd); - } - CATCH_MSVC_INVAL - { - result = -1; - errno = EBADF; - } - DONE_MSVC_INVAL; - - return result; -} -#else -# define close_nothrow close -#endif - -/* Override close() to call into other gnulib modules. */ - -int -rpl_close (int fd) -{ -#if WINDOWS_SOCKETS - int retval = execute_all_close_hooks (close_nothrow, fd); -#else - int retval = close_nothrow (fd); -#endif - -#if REPLACE_FCHDIR - if (retval >= 0) - _gl_unregister_fd (fd); -#endif - - return retval; -} diff --git a/src/gl/connect.c b/src/gl/connect.c deleted file mode 100644 index 1d423173e7..0000000000 --- a/src/gl/connect.c +++ /dev/null @@ -1,56 +0,0 @@ -/* connect.c --- wrappers for Windows connect function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#undef connect - -int -rpl_connect (int fd, const struct sockaddr *sockaddr, socklen_t len) -{ - SOCKET sock = FD_TO_SOCKET (fd); - - if (sock == INVALID_SOCKET) - { - errno = EBADF; - return -1; - } - else - { - int r = connect (sock, sockaddr, len); - if (r < 0) - { - /* EINPROGRESS is not returned by WinSock 2.0; for backwards - compatibility, connect(2) uses EWOULDBLOCK. */ - if (WSAGetLastError () == WSAEWOULDBLOCK) - WSASetLastError (WSAEINPROGRESS); - - set_winsock_errno (); - } - - return r; - } -} diff --git a/src/gl/dirname-lgpl.c b/src/gl/dirname-lgpl.c deleted file mode 100644 index a7aabf9416..0000000000 --- a/src/gl/dirname-lgpl.c +++ /dev/null @@ -1,86 +0,0 @@ -/* dirname.c -- return all but the last element in a file name - - Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2016 Free Software - Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -#include "dirname.h" - -#include -#include - -/* Return the length of the prefix of FILE that will be used by - dir_name. If FILE is in the working directory, this returns zero - even though 'dir_name (FILE)' will return ".". Works properly even - if there are trailing slashes (by effectively ignoring them). */ - -size_t -dir_len (char const *file) -{ - size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); - size_t length; - - /* Advance prefix_length beyond important leading slashes. */ - prefix_length += (prefix_length != 0 - ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE - && ISSLASH (file[prefix_length])) - : (ISSLASH (file[0]) - ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT - && ISSLASH (file[1]) && ! ISSLASH (file[2]) - ? 2 : 1)) - : 0)); - - /* Strip the basename and any redundant slashes before it. */ - for (length = last_component (file) - file; - prefix_length < length; length--) - if (! ISSLASH (file[length - 1])) - break; - return length; -} - - -/* In general, we can't use the builtin 'dirname' function if available, - since it has different meanings in different environments. - In some environments the builtin 'dirname' modifies its argument. - - Return the leading directories part of FILE, allocated with malloc. - Works properly even if there are trailing slashes (by effectively - ignoring them). Return NULL on failure. - - If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); - lstat (base_name (FILE)); } will access the same file. Likewise, - if the sequence { chdir (dir_name (FILE)); - rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE - to "foo" in the same directory FILE was in. */ - -char * -mdir_name (char const *file) -{ - size_t length = dir_len (file); - bool append_dot = (length == 0 - || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE - && length == FILE_SYSTEM_PREFIX_LEN (file) - && file[2] != '\0' && ! ISSLASH (file[2]))); - char *dir = malloc (length + append_dot + 1); - if (!dir) - return NULL; - memcpy (dir, file, length); - if (append_dot) - dir[length++] = '.'; - dir[length] = '\0'; - return dir; -} diff --git a/src/gl/dirname.h b/src/gl/dirname.h deleted file mode 100644 index 875b31bae5..0000000000 --- a/src/gl/dirname.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Take file names apart into directory and base names. - - Copyright (C) 1998, 2001, 2003-2006, 2009-2016 Free Software Foundation, - Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef DIRNAME_H_ -# define DIRNAME_H_ 1 - -# include -# include -# include "dosname.h" - -# ifndef DIRECTORY_SEPARATOR -# define DIRECTORY_SEPARATOR '/' -# endif - -# ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT -# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# if GNULIB_DIRNAME -char *base_name (char const *file); -char *dir_name (char const *file); -# endif - -char *mdir_name (char const *file); -size_t base_len (char const *file) _GL_ATTRIBUTE_PURE; -size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; -char *last_component (char const *file) _GL_ATTRIBUTE_PURE; - -bool strip_trailing_slashes (char *file); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* not DIRNAME_H_ */ diff --git a/src/gl/dosname.h b/src/gl/dosname.h deleted file mode 100644 index 83a953f3c0..0000000000 --- a/src/gl/dosname.h +++ /dev/null @@ -1,53 +0,0 @@ -/* File names on MS-DOS/Windows systems. - - Copyright (C) 2000-2001, 2004-2006, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - From Paul Eggert and Jim Meyering. */ - -#ifndef _DOSNAME_H -#define _DOSNAME_H - -#if (defined _WIN32 || defined __WIN32__ || \ - defined __MSDOS__ || defined __CYGWIN__ || \ - defined __EMX__ || defined __DJGPP__) - /* This internal macro assumes ASCII, but all hosts that support drive - letters use ASCII. */ -# define _IS_DRIVE_LETTER(C) (((unsigned int) (C) | ('a' - 'A')) - 'a' \ - <= 'z' - 'a') -# define FILE_SYSTEM_PREFIX_LEN(Filename) \ - (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0) -# ifndef __CYGWIN__ -# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 -# endif -# define ISSLASH(C) ((C) == '/' || (C) == '\\') -#else -# define FILE_SYSTEM_PREFIX_LEN(Filename) 0 -# define ISSLASH(C) ((C) == '/') -#endif - -#ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE -# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 -#endif - -#if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE -# define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)]) -# else -# define IS_ABSOLUTE_FILE_NAME(F) \ - (ISSLASH ((F)[0]) || FILE_SYSTEM_PREFIX_LEN (F) != 0) -#endif -#define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) - -#endif /* DOSNAME_H_ */ diff --git a/src/gl/dup2.c b/src/gl/dup2.c deleted file mode 100644 index 5d026f21fa..0000000000 --- a/src/gl/dup2.c +++ /dev/null @@ -1,215 +0,0 @@ -/* Duplicate an open file descriptor to a specified file descriptor. - - Copyright (C) 1999, 2004-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* written by Paul Eggert */ - -#include - -/* Specification. */ -#include - -#include -#include - -#if HAVE_DUP2 - -# undef dup2 - -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - -/* Get declarations of the native Windows API functions. */ -# define WIN32_LEAN_AND_MEAN -# include - -# include "msvc-inval.h" - -/* Get _get_osfhandle. */ -# include "msvc-nothrow.h" - -static int -ms_windows_dup2 (int fd, int desired_fd) -{ - int result; - - /* If fd is closed, mingw hangs on dup2 (fd, fd). If fd is open, - dup2 (fd, fd) returns 0, but all further attempts to use fd in - future dup2 calls will hang. */ - if (fd == desired_fd) - { - if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE) - { - errno = EBADF; - return -1; - } - return fd; - } - - /* Wine 1.0.1 return 0 when desired_fd is negative but not -1: - http://bugs.winehq.org/show_bug.cgi?id=21289 */ - if (desired_fd < 0) - { - errno = EBADF; - return -1; - } - - TRY_MSVC_INVAL - { - result = dup2 (fd, desired_fd); - } - CATCH_MSVC_INVAL - { - errno = EBADF; - result = -1; - } - DONE_MSVC_INVAL; - - if (result == 0) - result = desired_fd; - - return result; -} - -# define dup2 ms_windows_dup2 - -# elif defined __KLIBC__ - -# include - -static int -klibc_dup2dirfd (int fd, int desired_fd) -{ - int tempfd; - int dupfd; - - tempfd = open ("NUL", O_RDONLY); - if (tempfd == -1) - return -1; - - if (tempfd == desired_fd) - { - close (tempfd); - - char path[_MAX_PATH]; - if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) - return -1; - - return open(path, O_RDONLY); - } - - dupfd = klibc_dup2dirfd (fd, desired_fd); - - close (tempfd); - - return dupfd; -} - -static int -klibc_dup2 (int fd, int desired_fd) -{ - int dupfd; - struct stat sbuf; - - dupfd = dup2 (fd, desired_fd); - if (dupfd == -1 && errno == ENOTSUP \ - && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) - { - close (desired_fd); - - return klibc_dup2dirfd (fd, desired_fd); - } - - return dupfd; -} - -# define dup2 klibc_dup2 -# endif - -int -rpl_dup2 (int fd, int desired_fd) -{ - int result; - -# ifdef F_GETFL - /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF. - On Cygwin 1.5.x, dup2 (1, 1) returns 0. - On Cygwin 1.7.17, dup2 (1, -1) dumps core. - On Cygwin 1.7.25, dup2 (1, 256) can dump core. - On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */ -# if HAVE_SETDTABLESIZE - setdtablesize (desired_fd + 1); -# endif - if (desired_fd < 0) - fd = desired_fd; - if (fd == desired_fd) - return fcntl (fd, F_GETFL) == -1 ? -1 : fd; -# endif - - result = dup2 (fd, desired_fd); - - /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x. */ - if (result == -1 && errno == EMFILE) - errno = EBADF; -# if REPLACE_FCHDIR - if (fd != desired_fd && result != -1) - result = _gl_register_dup (fd, result); -# endif - return result; -} - -#else /* !HAVE_DUP2 */ - -/* On older platforms, dup2 did not exist. */ - -# ifndef F_DUPFD -static int -dupfd (int fd, int desired_fd) -{ - int duplicated_fd = dup (fd); - if (duplicated_fd < 0 || duplicated_fd == desired_fd) - return duplicated_fd; - else - { - int r = dupfd (fd, desired_fd); - int e = errno; - close (duplicated_fd); - errno = e; - return r; - } -} -# endif - -int -dup2 (int fd, int desired_fd) -{ - int result = fcntl (fd, F_GETFL) < 0 ? -1 : fd; - if (result == -1 || fd == desired_fd) - return result; - close (desired_fd); -# ifdef F_DUPFD - result = fcntl (fd, F_DUPFD, desired_fd); -# if REPLACE_FCHDIR - if (0 <= result) - result = _gl_register_dup (fd, result); -# endif -# else - result = dupfd (fd, desired_fd); -# endif - if (result == -1 && (errno == EMFILE || errno == EINVAL)) - errno = EBADF; - return result; -} -#endif /* !HAVE_DUP2 */ diff --git a/src/gl/errno.in.h b/src/gl/errno.in.h deleted file mode 100644 index b8397ee465..0000000000 --- a/src/gl/errno.in.h +++ /dev/null @@ -1,279 +0,0 @@ -/* A POSIX-like . - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_ERRNO_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_ERRNO_H@ - -#ifndef _@GUARD_PREFIX@_ERRNO_H -#define _@GUARD_PREFIX@_ERRNO_H - - -/* On native Windows platforms, many macros are not defined. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - -/* These are the same values as defined by MSVC 10, for interoperability. */ - -# ifndef ENOMSG -# define ENOMSG 122 -# define GNULIB_defined_ENOMSG 1 -# endif - -# ifndef EIDRM -# define EIDRM 111 -# define GNULIB_defined_EIDRM 1 -# endif - -# ifndef ENOLINK -# define ENOLINK 121 -# define GNULIB_defined_ENOLINK 1 -# endif - -# ifndef EPROTO -# define EPROTO 134 -# define GNULIB_defined_EPROTO 1 -# endif - -# ifndef EBADMSG -# define EBADMSG 104 -# define GNULIB_defined_EBADMSG 1 -# endif - -# ifndef EOVERFLOW -# define EOVERFLOW 132 -# define GNULIB_defined_EOVERFLOW 1 -# endif - -# ifndef ENOTSUP -# define ENOTSUP 129 -# define GNULIB_defined_ENOTSUP 1 -# endif - -# ifndef ENETRESET -# define ENETRESET 117 -# define GNULIB_defined_ENETRESET 1 -# endif - -# ifndef ECONNABORTED -# define ECONNABORTED 106 -# define GNULIB_defined_ECONNABORTED 1 -# endif - -# ifndef ECANCELED -# define ECANCELED 105 -# define GNULIB_defined_ECANCELED 1 -# endif - -# ifndef EOWNERDEAD -# define EOWNERDEAD 133 -# define GNULIB_defined_EOWNERDEAD 1 -# endif - -# ifndef ENOTRECOVERABLE -# define ENOTRECOVERABLE 127 -# define GNULIB_defined_ENOTRECOVERABLE 1 -# endif - -# ifndef EINPROGRESS -# define EINPROGRESS 112 -# define EALREADY 103 -# define ENOTSOCK 128 -# define EDESTADDRREQ 109 -# define EMSGSIZE 115 -# define EPROTOTYPE 136 -# define ENOPROTOOPT 123 -# define EPROTONOSUPPORT 135 -# define EOPNOTSUPP 130 -# define EAFNOSUPPORT 102 -# define EADDRINUSE 100 -# define EADDRNOTAVAIL 101 -# define ENETDOWN 116 -# define ENETUNREACH 118 -# define ECONNRESET 108 -# define ENOBUFS 119 -# define EISCONN 113 -# define ENOTCONN 126 -# define ETIMEDOUT 138 -# define ECONNREFUSED 107 -# define ELOOP 114 -# define EHOSTUNREACH 110 -# define EWOULDBLOCK 140 -# define GNULIB_defined_ESOCK 1 -# endif - -# ifndef ETXTBSY -# define ETXTBSY 139 -# define ENODATA 120 /* not required by POSIX */ -# define ENOSR 124 /* not required by POSIX */ -# define ENOSTR 125 /* not required by POSIX */ -# define ETIME 137 /* not required by POSIX */ -# define EOTHER 131 /* not required by POSIX */ -# define GNULIB_defined_ESTREAMS 1 -# endif - -/* These are intentionally the same values as the WSA* error numbers, defined - in . */ -# define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ -# define EPFNOSUPPORT 10046 /* not required by POSIX */ -# define ESHUTDOWN 10058 /* not required by POSIX */ -# define ETOOMANYREFS 10059 /* not required by POSIX */ -# define EHOSTDOWN 10064 /* not required by POSIX */ -# define EPROCLIM 10067 /* not required by POSIX */ -# define EUSERS 10068 /* not required by POSIX */ -# define EDQUOT 10069 -# define ESTALE 10070 -# define EREMOTE 10071 /* not required by POSIX */ -# define GNULIB_defined_EWINSOCK 1 - -# endif - - -/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros - EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ -# if @EMULTIHOP_HIDDEN@ -# define EMULTIHOP @EMULTIHOP_VALUE@ -# define GNULIB_defined_EMULTIHOP 1 -# endif -# if @ENOLINK_HIDDEN@ -# define ENOLINK @ENOLINK_VALUE@ -# define GNULIB_defined_ENOLINK 1 -# endif -# if @EOVERFLOW_HIDDEN@ -# define EOVERFLOW @EOVERFLOW_VALUE@ -# define GNULIB_defined_EOVERFLOW 1 -# endif - - -/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, - EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. - Likewise, on NonStop Kernel, EDQUOT is not defined. - Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, - HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. - - Note: When one of these systems defines some of these macros some day, - binaries will have to be recompiled so that they recognizes the new - errno values from the system. */ - -# ifndef ENOMSG -# define ENOMSG 2000 -# define GNULIB_defined_ENOMSG 1 -# endif - -# ifndef EIDRM -# define EIDRM 2001 -# define GNULIB_defined_EIDRM 1 -# endif - -# ifndef ENOLINK -# define ENOLINK 2002 -# define GNULIB_defined_ENOLINK 1 -# endif - -# ifndef EPROTO -# define EPROTO 2003 -# define GNULIB_defined_EPROTO 1 -# endif - -# ifndef EMULTIHOP -# define EMULTIHOP 2004 -# define GNULIB_defined_EMULTIHOP 1 -# endif - -# ifndef EBADMSG -# define EBADMSG 2005 -# define GNULIB_defined_EBADMSG 1 -# endif - -# ifndef EOVERFLOW -# define EOVERFLOW 2006 -# define GNULIB_defined_EOVERFLOW 1 -# endif - -# ifndef ENOTSUP -# define ENOTSUP 2007 -# define GNULIB_defined_ENOTSUP 1 -# endif - -# ifndef ENETRESET -# define ENETRESET 2011 -# define GNULIB_defined_ENETRESET 1 -# endif - -# ifndef ECONNABORTED -# define ECONNABORTED 2012 -# define GNULIB_defined_ECONNABORTED 1 -# endif - -# ifndef ESTALE -# define ESTALE 2009 -# define GNULIB_defined_ESTALE 1 -# endif - -# ifndef EDQUOT -# define EDQUOT 2010 -# define GNULIB_defined_EDQUOT 1 -# endif - -# ifndef ECANCELED -# define ECANCELED 2008 -# define GNULIB_defined_ECANCELED 1 -# endif - -/* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not - defined. */ - -# ifndef EOWNERDEAD -# if defined __sun - /* Use the same values as defined for Solaris >= 8, for - interoperability. */ -# define EOWNERDEAD 58 -# define ENOTRECOVERABLE 59 -# elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - /* We have a conflict here: pthreads-win32 defines these values - differently than MSVC 10. It's hairy to decide which one to use. */ -# if defined __MINGW32__ && !defined USE_WINDOWS_THREADS - /* Use the same values as defined by pthreads-win32, for - interoperability. */ -# define EOWNERDEAD 43 -# define ENOTRECOVERABLE 44 -# else - /* Use the same values as defined by MSVC 10, for - interoperability. */ -# define EOWNERDEAD 133 -# define ENOTRECOVERABLE 127 -# endif -# else -# define EOWNERDEAD 2013 -# define ENOTRECOVERABLE 2014 -# endif -# define GNULIB_defined_EOWNERDEAD 1 -# define GNULIB_defined_ENOTRECOVERABLE 1 -# endif - -# ifndef EILSEQ -# define EILSEQ 2015 -# define GNULIB_defined_EILSEQ 1 -# endif - -#endif /* _@GUARD_PREFIX@_ERRNO_H */ -#endif /* _@GUARD_PREFIX@_ERRNO_H */ diff --git a/src/gl/error.c b/src/gl/error.c deleted file mode 100644 index b3b1286a35..0000000000 --- a/src/gl/error.c +++ /dev/null @@ -1,406 +0,0 @@ -/* Error handler for noninteractive utilities - Copyright (C) 1990-1998, 2000-2007, 2009-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by David MacKenzie . */ - -#if !_LIBC -# include -#endif - -#include "error.h" - -#include -#include -#include -#include - -#if !_LIBC && ENABLE_NLS -# include "gettext.h" -# define _(msgid) gettext (msgid) -#endif - -#ifdef _LIBC -# include -# include -# include -# include -# define mbsrtowcs __mbsrtowcs -# define USE_UNLOCKED_IO 0 -# define _GL_ATTRIBUTE_FORMAT_PRINTF(a, b) -# define _GL_ARG_NONNULL(a) -#else -# include "getprogname.h" -#endif - -#if USE_UNLOCKED_IO -# include "unlocked-io.h" -#endif - -#ifndef _ -# define _(String) String -#endif - -/* If NULL, error will flush stdout, then print on stderr the program - name, a colon and a space. Otherwise, error will call this - function without parameters instead. */ -void (*error_print_progname) (void); - -/* This variable is incremented each time 'error' is called. */ -unsigned int error_message_count; - -#ifdef _LIBC -/* In the GNU C library, there is a predefined variable for this. */ - -# define program_name program_invocation_name -# include -# include -# include - -/* In GNU libc we want do not want to use the common name 'error' directly. - Instead make it a weak alias. */ -extern void __error (int status, int errnum, const char *message, ...) - __attribute__ ((__format__ (__printf__, 3, 4))); -extern void __error_at_line (int status, int errnum, const char *file_name, - unsigned int line_number, const char *message, - ...) - __attribute__ ((__format__ (__printf__, 5, 6))); -# define error __error -# define error_at_line __error_at_line - -# include -# define fflush(s) _IO_fflush (s) -# undef putc -# define putc(c, fp) _IO_putc (c, fp) - -# include - -#else /* not _LIBC */ - -# include -# include - -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -/* Get declarations of the native Windows API functions. */ -# define WIN32_LEAN_AND_MEAN -# include -/* Get _get_osfhandle. */ -# include "msvc-nothrow.h" -# endif - -/* The gnulib override of fcntl is not needed in this file. */ -# undef fcntl - -# if !HAVE_DECL_STRERROR_R -# ifndef HAVE_DECL_STRERROR_R -"this configure-time declaration test was not run" -# endif -# if STRERROR_R_CHAR_P -char *strerror_r (); -# else -int strerror_r (); -# endif -# endif - -#define program_name getprogname () - -# if HAVE_STRERROR_R || defined strerror_r -# define __strerror_r strerror_r -# endif /* HAVE_STRERROR_R || defined strerror_r */ -#endif /* not _LIBC */ - -#if !_LIBC -/* Return non-zero if FD is open. */ -static int -is_open (int fd) -{ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - /* On native Windows: The initial state of unassigned standard file - descriptors is that they are open but point to an INVALID_HANDLE_VALUE. - There is no fcntl, and the gnulib replacement fcntl does not support - F_GETFL. */ - return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; -# else -# ifndef F_GETFL -# error Please port fcntl to your platform -# endif - return 0 <= fcntl (fd, F_GETFL); -# endif -} -#endif - -static void -flush_stdout (void) -{ -#if !_LIBC - int stdout_fd; - -# if GNULIB_FREOPEN_SAFER - /* Use of gnulib's freopen-safer module normally ensures that - fileno (stdout) == 1 - whenever stdout is open. */ - stdout_fd = STDOUT_FILENO; -# else - /* POSIX states that fileno (stdout) after fclose is unspecified. But in - practice it is not a problem, because stdout is statically allocated and - the fd of a FILE stream is stored as a field in its allocated memory. */ - stdout_fd = fileno (stdout); -# endif - /* POSIX states that fflush (stdout) after fclose is unspecified; it - is safe in glibc, but not on all other platforms. fflush (NULL) - is always defined, but too draconian. */ - if (0 <= stdout_fd && is_open (stdout_fd)) -#endif - fflush (stdout); -} - -static void -print_errno_message (int errnum) -{ - char const *s; - -#if defined HAVE_STRERROR_R || _LIBC - char errbuf[1024]; -# if _LIBC || STRERROR_R_CHAR_P - s = __strerror_r (errnum, errbuf, sizeof errbuf); -# else - if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) - s = errbuf; - else - s = 0; -# endif -#else - s = strerror (errnum); -#endif - -#if !_LIBC - if (! s) - s = _("Unknown system error"); -#endif - -#if _LIBC - __fxprintf (NULL, ": %s", s); -#else - fprintf (stderr, ": %s", s); -#endif -} - -static void _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3)) -error_tail (int status, int errnum, const char *message, va_list args) -{ -#if _LIBC - if (_IO_fwide (stderr, 0) > 0) - { - size_t len = strlen (message) + 1; - wchar_t *wmessage = NULL; - mbstate_t st; - size_t res; - const char *tmp; - bool use_malloc = false; - - while (1) - { - if (__libc_use_alloca (len * sizeof (wchar_t))) - wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); - else - { - if (!use_malloc) - wmessage = NULL; - - wchar_t *p = (wchar_t *) realloc (wmessage, - len * sizeof (wchar_t)); - if (p == NULL) - { - free (wmessage); - fputws_unlocked (L"out of memory\n", stderr); - return; - } - wmessage = p; - use_malloc = true; - } - - memset (&st, '\0', sizeof (st)); - tmp = message; - - res = mbsrtowcs (wmessage, &tmp, len, &st); - if (res != len) - break; - - if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0)) - { - /* This really should not happen if everything is fine. */ - res = (size_t) -1; - break; - } - - len *= 2; - } - - if (res == (size_t) -1) - { - /* The string cannot be converted. */ - if (use_malloc) - { - free (wmessage); - use_malloc = false; - } - wmessage = (wchar_t *) L"???"; - } - - __vfwprintf (stderr, wmessage, args); - - if (use_malloc) - free (wmessage); - } - else -#endif - vfprintf (stderr, message, args); - va_end (args); - - ++error_message_count; - if (errnum) - print_errno_message (errnum); -#if _LIBC - __fxprintf (NULL, "\n"); -#else - putc ('\n', stderr); -#endif - fflush (stderr); - if (status) - exit (status); -} - - -/* Print the program name and error message MESSAGE, which is a printf-style - format string with optional args. - If ERRNUM is nonzero, print its corresponding system error message. - Exit with status STATUS if it is nonzero. */ -void -error (int status, int errnum, const char *message, ...) -{ - va_list args; - -#if defined _LIBC && defined __libc_ptf_call - /* We do not want this call to be cut short by a thread - cancellation. Therefore disable cancellation for now. */ - int state = PTHREAD_CANCEL_ENABLE; - __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), - 0); -#endif - - flush_stdout (); -#ifdef _LIBC - _IO_flockfile (stderr); -#endif - if (error_print_progname) - (*error_print_progname) (); - else - { -#if _LIBC - __fxprintf (NULL, "%s: ", program_name); -#else - fprintf (stderr, "%s: ", program_name); -#endif - } - - va_start (args, message); - error_tail (status, errnum, message, args); - -#ifdef _LIBC - _IO_funlockfile (stderr); -# ifdef __libc_ptf_call - __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); -# endif -#endif -} - -/* Sometimes we want to have at most one error per line. This - variable controls whether this mode is selected or not. */ -int error_one_per_line; - -void -error_at_line (int status, int errnum, const char *file_name, - unsigned int line_number, const char *message, ...) -{ - va_list args; - - if (error_one_per_line) - { - static const char *old_file_name; - static unsigned int old_line_number; - - if (old_line_number == line_number - && (file_name == old_file_name - || (old_file_name != NULL - && file_name != NULL - && strcmp (old_file_name, file_name) == 0))) - - /* Simply return and print nothing. */ - return; - - old_file_name = file_name; - old_line_number = line_number; - } - -#if defined _LIBC && defined __libc_ptf_call - /* We do not want this call to be cut short by a thread - cancellation. Therefore disable cancellation for now. */ - int state = PTHREAD_CANCEL_ENABLE; - __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), - 0); -#endif - - flush_stdout (); -#ifdef _LIBC - _IO_flockfile (stderr); -#endif - if (error_print_progname) - (*error_print_progname) (); - else - { -#if _LIBC - __fxprintf (NULL, "%s:", program_name); -#else - fprintf (stderr, "%s:", program_name); -#endif - } - -#if _LIBC - __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", - file_name, line_number); -#else - fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", - file_name, line_number); -#endif - - va_start (args, message); - error_tail (status, errnum, message, args); - -#ifdef _LIBC - _IO_funlockfile (stderr); -# ifdef __libc_ptf_call - __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); -# endif -#endif -} - -#ifdef _LIBC -/* Make the weak alias. */ -# undef error -# undef error_at_line -weak_alias (__error, error) -weak_alias (__error_at_line, error_at_line) -#endif diff --git a/src/gl/error.h b/src/gl/error.h deleted file mode 100644 index 6a69db0935..0000000000 --- a/src/gl/error.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Declaration for error-reporting function - Copyright (C) 1995-1997, 2003, 2006, 2008-2016 Free Software Foundation, - Inc. - This file is part of the GNU C Library. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef _ERROR_H -#define _ERROR_H 1 - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The __-protected variants of the attributes 'format' and 'printf' are - accepted by gcc versions 2.6.4 (effectively 2.7) and later. - We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because - gnulib and libintl do '#define printf __printf__' when they override - the 'printf' function. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) -#else -# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ -#endif - -/* On mingw, the flavor of printf depends on whether the extensions module - * is in use; the check for determines the witness macro. */ -#ifndef _GL_ATTRIBUTE_SPEC_PRINTF -# if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU -# define _GL_ATTRIBUTE_SPEC_PRINTF __gnu_printf__ -# else -# define _GL_ATTRIBUTE_SPEC_PRINTF __printf__ -# endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* Print a message with 'fprintf (stderr, FORMAT, ...)'; - if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). - If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ - -extern void error (int __status, int __errnum, const char *__format, ...) - _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 3, 4)); - -extern void error_at_line (int __status, int __errnum, const char *__fname, - unsigned int __lineno, const char *__format, ...) - _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 5, 6)); - -/* If NULL, error will flush stdout, then print on stderr the program - name, a colon and a space. Otherwise, error will call this - function without parameters instead. */ -extern void (*error_print_progname) (void); - -/* This variable is incremented each time 'error' is called. */ -extern unsigned int error_message_count; - -/* Sometimes we want to have at most one error per line. This - variable controls whether this mode is selected or not. */ -extern int error_one_per_line; - -#ifdef __cplusplus -} -#endif - -#endif /* error.h */ diff --git a/src/gl/exitfail.c b/src/gl/exitfail.c deleted file mode 100644 index 8033c22ab4..0000000000 --- a/src/gl/exitfail.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Failure exit status - - Copyright (C) 2002-2003, 2005-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -#include "exitfail.h" - -#include - -int volatile exit_failure = EXIT_FAILURE; diff --git a/src/gl/exitfail.h b/src/gl/exitfail.h deleted file mode 100644 index 62311bd48c..0000000000 --- a/src/gl/exitfail.h +++ /dev/null @@ -1,18 +0,0 @@ -/* Failure exit status - - Copyright (C) 2002, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -extern int volatile exit_failure; diff --git a/src/gl/fd-hook.c b/src/gl/fd-hook.c deleted file mode 100644 index 8676c6bdfc..0000000000 --- a/src/gl/fd-hook.c +++ /dev/null @@ -1,116 +0,0 @@ -/* Hook for making making file descriptor functions close(), ioctl() extensible. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2009. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "fd-hook.h" - -#include - -/* Currently, this entire code is only needed for the handling of sockets - on native Windows platforms. */ -#if WINDOWS_SOCKETS - -/* The first and last link in the doubly linked list. - Initially the list is empty. */ -static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL }; - -int -execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, - int fd) -{ - if (remaining_list == &anchor) - /* End of list reached. */ - return primary (fd); - else - return remaining_list->private_close_fn (remaining_list->private_next, - primary, fd); -} - -int -execute_all_close_hooks (gl_close_fn primary, int fd) -{ - return execute_close_hooks (anchor.private_next, primary, fd); -} - -int -execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, - int fd, int request, void *arg) -{ - if (remaining_list == &anchor) - /* End of list reached. */ - return primary (fd, request, arg); - else - return remaining_list->private_ioctl_fn (remaining_list->private_next, - primary, fd, request, arg); -} - -int -execute_all_ioctl_hooks (gl_ioctl_fn primary, - int fd, int request, void *arg) -{ - return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg); -} - -void -register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link) -{ - if (close_hook == NULL) - close_hook = execute_close_hooks; - if (ioctl_hook == NULL) - ioctl_hook = execute_ioctl_hooks; - - if (link->private_next == NULL && link->private_prev == NULL) - { - /* Add the link to the doubly linked list. */ - link->private_next = anchor.private_next; - link->private_prev = &anchor; - link->private_close_fn = close_hook; - link->private_ioctl_fn = ioctl_hook; - anchor.private_next->private_prev = link; - anchor.private_next = link; - } - else - { - /* The link is already in use. */ - if (link->private_close_fn != close_hook - || link->private_ioctl_fn != ioctl_hook) - abort (); - } -} - -void -unregister_fd_hook (struct fd_hook *link) -{ - struct fd_hook *next = link->private_next; - struct fd_hook *prev = link->private_prev; - - if (next != NULL && prev != NULL) - { - /* The link is in use. Remove it from the doubly linked list. */ - prev->private_next = next; - next->private_prev = prev; - /* Clear the link, to mark it unused. */ - link->private_next = NULL; - link->private_prev = NULL; - link->private_close_fn = NULL; - link->private_ioctl_fn = NULL; - } -} - -#endif diff --git a/src/gl/fd-hook.h b/src/gl/fd-hook.h deleted file mode 100644 index 9568d07511..0000000000 --- a/src/gl/fd-hook.h +++ /dev/null @@ -1,119 +0,0 @@ -/* Hook for making making file descriptor functions close(), ioctl() extensible. - Copyright (C) 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - - -#ifndef FD_HOOK_H -#define FD_HOOK_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/* Currently, this entire code is only needed for the handling of sockets - on native Windows platforms. */ -#if WINDOWS_SOCKETS - - -/* Type of function that closes FD. */ -typedef int (*gl_close_fn) (int fd); - -/* Type of function that applies a control request to FD. */ -typedef int (*gl_ioctl_fn) (int fd, int request, void *arg); - -/* An element of the list of file descriptor hooks. - In CLOS (Common Lisp Object System) speak, it consists of an "around" - method for the close() function and an "around" method for the ioctl() - function. - The fields of this structure are considered private. */ -struct fd_hook -{ - /* Doubly linked list. */ - struct fd_hook *private_next; - struct fd_hook *private_prev; - /* Function that treats the types of FD that it knows about and calls - execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback. */ - int (*private_close_fn) (const struct fd_hook *remaining_list, - gl_close_fn primary, - int fd); - /* Function that treats the types of FD that it knows about and calls - execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a - fallback. */ - int (*private_ioctl_fn) (const struct fd_hook *remaining_list, - gl_ioctl_fn primary, - int fd, int request, void *arg); -}; - -/* This type of function closes FD, applying special knowledge for the FD - types it knows about, and calls - execute_close_hooks (REMAINING_LIST, PRIMARY, FD) - for the other FD types. - In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, - and PRIMARY is the "primary" method for close(). */ -typedef int (*close_hook_fn) (const struct fd_hook *remaining_list, - gl_close_fn primary, - int fd); - -/* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method. - Return 0 or -1, like close() would do. */ -extern int execute_close_hooks (const struct fd_hook *remaining_list, - gl_close_fn primary, - int fd); - -/* Execute all close hooks, with PRIMARY as "primary" method. - Return 0 or -1, like close() would do. */ -extern int execute_all_close_hooks (gl_close_fn primary, int fd); - -/* This type of function applies a control request to FD, applying special - knowledge for the FD types it knows about, and calls - execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) - for the other FD types. - In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, - and PRIMARY is the "primary" method for ioctl(). */ -typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list, - gl_ioctl_fn primary, - int fd, int request, void *arg); - -/* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method. - Return 0 or -1, like ioctl() would do. */ -extern int execute_ioctl_hooks (const struct fd_hook *remaining_list, - gl_ioctl_fn primary, - int fd, int request, void *arg); - -/* Execute all ioctl hooks, with PRIMARY as "primary" method. - Return 0 or -1, like ioctl() would do. */ -extern int execute_all_ioctl_hooks (gl_ioctl_fn primary, - int fd, int request, void *arg); - -/* Add a function pair to the list of file descriptor hooks. - CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change. - The LINK variable points to a piece of memory which is guaranteed to be - accessible until the corresponding call to unregister_fd_hook. */ -extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, - struct fd_hook *link); - -/* Removes a hook from the list of file descriptor hooks. */ -extern void unregister_fd_hook (struct fd_hook *link); - - -#endif - - -#ifdef __cplusplus -} -#endif - -#endif /* FD_HOOK_H */ diff --git a/src/gl/flexmember.h b/src/gl/flexmember.h deleted file mode 100644 index 62c556bae2..0000000000 --- a/src/gl/flexmember.h +++ /dev/null @@ -1,42 +0,0 @@ -/* Sizes of structs with flexible array members. - - Copyright 2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - Written by Paul Eggert. */ - -#include - -/* Nonzero multiple of alignment of TYPE, suitable for FLEXSIZEOF below. - On older platforms without _Alignof, use a pessimistic bound that is - safe in practice even if FLEXIBLE_ARRAY_MEMBER is 1. - On newer platforms, use _Alignof to get a tighter bound. */ - -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 -# define FLEXALIGNOF(type) (sizeof (type) & ~ (sizeof (type) - 1)) -#else -# define FLEXALIGNOF(type) _Alignof (type) -#endif - -/* Upper bound on the size of a struct of type TYPE with a flexible - array member named MEMBER that is followed by N bytes of other data. - This is not simply sizeof (TYPE) + N, since it may require - alignment on unusually picky C11 platforms, and - FLEXIBLE_ARRAY_MEMBER may be 1 on pre-C11 platforms. - Yield a value less than N if and only if arithmetic overflow occurs. */ - -#define FLEXSIZEOF(type, member, n) \ - ((offsetof (type, member) + FLEXALIGNOF (type) - 1 + (n)) \ - & ~ (FLEXALIGNOF (type) - 1)) diff --git a/src/gl/float+.h b/src/gl/float+.h deleted file mode 100644 index 00fcc76322..0000000000 --- a/src/gl/float+.h +++ /dev/null @@ -1,147 +0,0 @@ -/* Supplemental information about the floating-point formats. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2007. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _FLOATPLUS_H -#define _FLOATPLUS_H - -#include -#include - -/* Number of bits in the mantissa of a floating-point number, including the - "hidden bit". */ -#if FLT_RADIX == 2 -# define FLT_MANT_BIT FLT_MANT_DIG -# define DBL_MANT_BIT DBL_MANT_DIG -# define LDBL_MANT_BIT LDBL_MANT_DIG -#elif FLT_RADIX == 4 -# define FLT_MANT_BIT (FLT_MANT_DIG * 2) -# define DBL_MANT_BIT (DBL_MANT_DIG * 2) -# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) -#elif FLT_RADIX == 16 -# define FLT_MANT_BIT (FLT_MANT_DIG * 4) -# define DBL_MANT_BIT (DBL_MANT_DIG * 4) -# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) -#endif - -/* Bit mask that can be used to mask the exponent, as an unsigned number. */ -#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) -#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) -#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) - -/* Number of bits used for the exponent of a floating-point number, including - the exponent's sign. */ -#define FLT_EXP_BIT \ - (FLT_EXP_MASK < 0x100 ? 8 : \ - FLT_EXP_MASK < 0x200 ? 9 : \ - FLT_EXP_MASK < 0x400 ? 10 : \ - FLT_EXP_MASK < 0x800 ? 11 : \ - FLT_EXP_MASK < 0x1000 ? 12 : \ - FLT_EXP_MASK < 0x2000 ? 13 : \ - FLT_EXP_MASK < 0x4000 ? 14 : \ - FLT_EXP_MASK < 0x8000 ? 15 : \ - FLT_EXP_MASK < 0x10000 ? 16 : \ - FLT_EXP_MASK < 0x20000 ? 17 : \ - FLT_EXP_MASK < 0x40000 ? 18 : \ - FLT_EXP_MASK < 0x80000 ? 19 : \ - FLT_EXP_MASK < 0x100000 ? 20 : \ - FLT_EXP_MASK < 0x200000 ? 21 : \ - FLT_EXP_MASK < 0x400000 ? 22 : \ - FLT_EXP_MASK < 0x800000 ? 23 : \ - FLT_EXP_MASK < 0x1000000 ? 24 : \ - FLT_EXP_MASK < 0x2000000 ? 25 : \ - FLT_EXP_MASK < 0x4000000 ? 26 : \ - FLT_EXP_MASK < 0x8000000 ? 27 : \ - FLT_EXP_MASK < 0x10000000 ? 28 : \ - FLT_EXP_MASK < 0x20000000 ? 29 : \ - FLT_EXP_MASK < 0x40000000 ? 30 : \ - FLT_EXP_MASK <= 0x7fffffff ? 31 : \ - 32) -#define DBL_EXP_BIT \ - (DBL_EXP_MASK < 0x100 ? 8 : \ - DBL_EXP_MASK < 0x200 ? 9 : \ - DBL_EXP_MASK < 0x400 ? 10 : \ - DBL_EXP_MASK < 0x800 ? 11 : \ - DBL_EXP_MASK < 0x1000 ? 12 : \ - DBL_EXP_MASK < 0x2000 ? 13 : \ - DBL_EXP_MASK < 0x4000 ? 14 : \ - DBL_EXP_MASK < 0x8000 ? 15 : \ - DBL_EXP_MASK < 0x10000 ? 16 : \ - DBL_EXP_MASK < 0x20000 ? 17 : \ - DBL_EXP_MASK < 0x40000 ? 18 : \ - DBL_EXP_MASK < 0x80000 ? 19 : \ - DBL_EXP_MASK < 0x100000 ? 20 : \ - DBL_EXP_MASK < 0x200000 ? 21 : \ - DBL_EXP_MASK < 0x400000 ? 22 : \ - DBL_EXP_MASK < 0x800000 ? 23 : \ - DBL_EXP_MASK < 0x1000000 ? 24 : \ - DBL_EXP_MASK < 0x2000000 ? 25 : \ - DBL_EXP_MASK < 0x4000000 ? 26 : \ - DBL_EXP_MASK < 0x8000000 ? 27 : \ - DBL_EXP_MASK < 0x10000000 ? 28 : \ - DBL_EXP_MASK < 0x20000000 ? 29 : \ - DBL_EXP_MASK < 0x40000000 ? 30 : \ - DBL_EXP_MASK <= 0x7fffffff ? 31 : \ - 32) -#define LDBL_EXP_BIT \ - (LDBL_EXP_MASK < 0x100 ? 8 : \ - LDBL_EXP_MASK < 0x200 ? 9 : \ - LDBL_EXP_MASK < 0x400 ? 10 : \ - LDBL_EXP_MASK < 0x800 ? 11 : \ - LDBL_EXP_MASK < 0x1000 ? 12 : \ - LDBL_EXP_MASK < 0x2000 ? 13 : \ - LDBL_EXP_MASK < 0x4000 ? 14 : \ - LDBL_EXP_MASK < 0x8000 ? 15 : \ - LDBL_EXP_MASK < 0x10000 ? 16 : \ - LDBL_EXP_MASK < 0x20000 ? 17 : \ - LDBL_EXP_MASK < 0x40000 ? 18 : \ - LDBL_EXP_MASK < 0x80000 ? 19 : \ - LDBL_EXP_MASK < 0x100000 ? 20 : \ - LDBL_EXP_MASK < 0x200000 ? 21 : \ - LDBL_EXP_MASK < 0x400000 ? 22 : \ - LDBL_EXP_MASK < 0x800000 ? 23 : \ - LDBL_EXP_MASK < 0x1000000 ? 24 : \ - LDBL_EXP_MASK < 0x2000000 ? 25 : \ - LDBL_EXP_MASK < 0x4000000 ? 26 : \ - LDBL_EXP_MASK < 0x8000000 ? 27 : \ - LDBL_EXP_MASK < 0x10000000 ? 28 : \ - LDBL_EXP_MASK < 0x20000000 ? 29 : \ - LDBL_EXP_MASK < 0x40000000 ? 30 : \ - LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ - 32) - -/* Number of bits used for a floating-point number: the mantissa (not - counting the "hidden bit", since it may or may not be explicit), the - exponent, and the sign. */ -#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) -#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) -#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) - -/* Number of bytes used for a floating-point number. - This can be smaller than the 'sizeof'. For example, on i386 systems, - 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence - LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but - sizeof (long double) = 12 or = 16. */ -#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) -#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) -#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) - -/* Verify that SIZEOF_FLT <= sizeof (float) etc. */ -typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; -typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; -typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; - -#endif /* _FLOATPLUS_H */ diff --git a/src/gl/float.c b/src/gl/float.c deleted file mode 100644 index 1bad2ee2bd..0000000000 --- a/src/gl/float.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Auxiliary definitions for . - Copyright (C) 2011-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2011. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ -const union gl_long_double_union gl_LDBL_MAX = - { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; -#elif defined __i386__ -const union gl_long_double_union gl_LDBL_MAX = - { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } }; -#else -/* This declaration is solely to ensure that after preprocessing - this file is never empty. */ -typedef int dummy; -#endif diff --git a/src/gl/float.in.h b/src/gl/float.in.h deleted file mode 100644 index 0b93d90087..0000000000 --- a/src/gl/float.in.h +++ /dev/null @@ -1,188 +0,0 @@ -/* A correct . - - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef _@GUARD_PREFIX@_FLOAT_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_FLOAT_H@ - -#ifndef _@GUARD_PREFIX@_FLOAT_H -#define _@GUARD_PREFIX@_FLOAT_H - -/* 'long double' properties. */ - -#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) -/* Number of mantissa units, in base FLT_RADIX. */ -# undef LDBL_MANT_DIG -# define LDBL_MANT_DIG 64 -/* Number of decimal digits that is sufficient for representing a number. */ -# undef LDBL_DIG -# define LDBL_DIG 18 -/* x-1 where x is the smallest representable number > 1. */ -# undef LDBL_EPSILON -# define LDBL_EPSILON 1.0842021724855044340E-19L -/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP (-16381) -/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ -# undef LDBL_MAX_EXP -# define LDBL_MAX_EXP 16384 -/* Minimum positive normalized number. */ -# undef LDBL_MIN -# define LDBL_MIN 3.3621031431120935063E-4932L -/* Maximum representable finite number. */ -# undef LDBL_MAX -# define LDBL_MAX 1.1897314953572317650E+4932L -/* Minimum e such that 10^e is in the range of normalized numbers. */ -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP (-4931) -/* Maximum e such that 10^e is in the range of representable finite numbers. */ -# undef LDBL_MAX_10_EXP -# define LDBL_MAX_10_EXP 4932 -#endif - -/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of - precision in the compiler but 64 bits of precision at runtime. See - . */ -#if defined __i386__ && defined __FreeBSD__ -/* Number of mantissa units, in base FLT_RADIX. */ -# undef LDBL_MANT_DIG -# define LDBL_MANT_DIG 64 -/* Number of decimal digits that is sufficient for representing a number. */ -# undef LDBL_DIG -# define LDBL_DIG 18 -/* x-1 where x is the smallest representable number > 1. */ -# undef LDBL_EPSILON -# define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */ -/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP (-16381) -/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ -# undef LDBL_MAX_EXP -# define LDBL_MAX_EXP 16384 -/* Minimum positive normalized number. */ -# undef LDBL_MIN -# define LDBL_MIN 3.3621031431120935E-4932L /* = 0x1p-16382L */ -/* Maximum representable finite number. */ -# undef LDBL_MAX -/* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. - But the largest literal that GCC allows us to write is - 0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }. - So, define it like this through a reference to an external variable - - const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }; - extern const long double LDBL_MAX; - - Unfortunately, this is not a constant expression. */ -union gl_long_double_union - { - struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; - long double ld; - }; -extern const union gl_long_double_union gl_LDBL_MAX; -# define LDBL_MAX (gl_LDBL_MAX.ld) -/* Minimum e such that 10^e is in the range of normalized numbers. */ -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP (-4931) -/* Maximum e such that 10^e is in the range of representable finite numbers. */ -# undef LDBL_MAX_10_EXP -# define LDBL_MAX_10_EXP 4932 -#endif - -/* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are - wrong. - On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong. */ -#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP DBL_MIN_EXP -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP DBL_MIN_10_EXP -# undef LDBL_MIN -# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ -#endif -#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ -# undef LDBL_MAX -/* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }. - It is not easy to define: - #define LDBL_MAX 1.79769313486231580793728971405302307166e308L - is too small, whereas - #define LDBL_MAX 1.79769313486231580793728971405302307167e308L - is too large. Apparently a bug in GCC decimal-to-binary conversion. - Also, I can't get values larger than - #define LDBL63 ((long double) (1ULL << 63)) - #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) - #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) - #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) - #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL) - which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }. - So, define it like this through a reference to an external variable - - const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }; - extern const long double LDBL_MAX; - - or through a pointer cast - - #define LDBL_MAX \ - (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }) - - Unfortunately, this is not a constant expression, and the latter expression - does not work well when GCC is optimizing.. */ -union gl_long_double_union - { - struct { double hi; double lo; } dd; - long double ld; - }; -extern const union gl_long_double_union gl_LDBL_MAX; -# define LDBL_MAX (gl_LDBL_MAX.ld) -#endif - -/* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong. - On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON - are wrong. */ -#if defined __sgi && (LDBL_MANT_DIG >= 106) -# undef LDBL_MANT_DIG -# define LDBL_MANT_DIG 106 -# if defined __GNUC__ -# undef LDBL_MIN_EXP -# define LDBL_MIN_EXP DBL_MIN_EXP -# undef LDBL_MIN_10_EXP -# define LDBL_MIN_10_EXP DBL_MIN_10_EXP -# undef LDBL_MIN -# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ -# undef LDBL_EPSILON -# define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */ -# endif -#endif - -#if @REPLACE_ITOLD@ -/* Pull in a function that fixes the 'int' to 'long double' conversion - of glibc 2.7. */ -extern -# ifdef __cplusplus -"C" -# endif -void _Qp_itoq (long double *, int); -static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq; -#endif - -#endif /* _@GUARD_PREFIX@_FLOAT_H */ -#endif /* _@GUARD_PREFIX@_FLOAT_H */ diff --git a/src/gl/fseek.c b/src/gl/fseek.c deleted file mode 100644 index 8524a42f0e..0000000000 --- a/src/gl/fseek.c +++ /dev/null @@ -1,30 +0,0 @@ -/* An fseek() function that, together with fflush(), is POSIX compliant. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -/* Get off_t. */ -#include - -int -fseek (FILE *fp, long offset, int whence) -{ - /* Use the replacement fseeko function with all its workarounds. */ - return fseeko (fp, (off_t)offset, whence); -} diff --git a/src/gl/fseeko.c b/src/gl/fseeko.c deleted file mode 100644 index 4cdb1f66df..0000000000 --- a/src/gl/fseeko.c +++ /dev/null @@ -1,162 +0,0 @@ -/* An fseeko() function that, together with fflush(), is POSIX compliant. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#include - -/* Get off_t, lseek, _POSIX_VERSION. */ -#include - -#include "stdio-impl.h" - -int -fseeko (FILE *fp, off_t offset, int whence) -#undef fseeko -#if !HAVE_FSEEKO -# undef fseek -# define fseeko fseek -#endif -#if _GL_WINDOWS_64_BIT_OFF_T -# undef fseeko -# if HAVE__FSEEKI64 /* msvc, mingw64 */ -# define fseeko _fseeki64 -# else /* mingw */ -# define fseeko fseeko64 -# endif -#endif -{ -#if LSEEK_PIPE_BROKEN - /* mingw gives bogus answers rather than failure on non-seekable files. */ - if (lseek (fileno (fp), 0, SEEK_CUR) == -1) - return EOF; -#endif - - /* These tests are based on fpurge.c. */ -#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ - if (fp->_IO_read_end == fp->_IO_read_ptr - && fp->_IO_write_ptr == fp->_IO_write_base - && fp->_IO_save_base == NULL) -#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ -# if defined __SL64 && defined __SCLE /* Cygwin */ - if ((fp->_flags & __SL64) == 0) - { - /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit - mode; but has an fseeko that requires 64-bit mode. */ - FILE *tmp = fopen ("/dev/null", "r"); - if (!tmp) - return -1; - fp->_flags |= __SL64; - fp->_seek64 = tmp->_seek64; - fclose (tmp); - } -# endif - if (fp_->_p == fp_->_bf._base - && fp_->_r == 0 - && fp_->_w == ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */ - ? fp_->_bf._size - : 0) - && fp_ub._base == NULL) -#elif defined __EMX__ /* emx+gcc */ - if (fp->_ptr == fp->_buffer - && fp->_rcount == 0 - && fp->_wcount == 0 - && fp->_ungetc_count == 0) -#elif defined __minix /* Minix */ - if (fp_->_ptr == fp_->_buf - && (fp_->_ptr == NULL || fp_->_count == 0)) -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ - if (fp_->_ptr == fp_->_base - && (fp_->_ptr == NULL || fp_->_cnt == 0)) -#elif defined __UCLIBC__ /* uClibc */ - if (((fp->__modeflags & __FLAG_WRITING) == 0 - || fp->__bufpos == fp->__bufstart) - && ((fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) == 0 - || fp->__bufpos == fp->__bufread)) -#elif defined __QNX__ /* QNX */ - if ((fp->_Mode & 0x2000 /* _MWRITE */ ? fp->_Next == fp->_Buf : fp->_Next == fp->_Rend) - && fp->_Rback == fp->_Back + sizeof (fp->_Back) - && fp->_Rsave == NULL) -#elif defined __MINT__ /* Atari FreeMiNT */ - if (fp->__bufp == fp->__buffer - && fp->__get_limit == fp->__bufp - && fp->__put_limit == fp->__bufp - && !fp->__pushed_back) -#elif defined EPLAN9 /* Plan9 */ - if (fp->rp == fp->buf - && fp->wp == fp->buf) -#elif FUNC_FFLUSH_STDIN < 0 && 200809 <= _POSIX_VERSION - /* Cross-compiling to some other system advertising conformance to - POSIX.1-2008 or later. Assume fseeko and fflush work as advertised. - If this assumption is incorrect, please report the bug to - bug-gnulib. */ - if (0) -#else - #error "Please port gnulib fseeko.c to your platform! Look at the code in fseeko.c, then report this to bug-gnulib." -#endif - { - /* We get here when an fflush() call immediately preceded this one (or - if ftell() has created buffers but no I/O has occurred on a - newly-opened stream). We know there are no buffers. */ - off_t pos = lseek (fileno (fp), offset, whence); - if (pos == -1) - { -#if defined __sferror || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ - fp_->_flags &= ~__SOFF; -#endif - return -1; - } - -#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ - fp->_flags &= ~_IO_EOF_SEEN; - fp->_offset = pos; -#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ -# if defined __CYGWIN__ || (defined __NetBSD__ && __NetBSD_Version__ >= 600000000) - /* fp_->_offset is typed as an integer. */ - fp_->_offset = pos; -# else - /* fp_->_offset is an fpos_t. */ - { - /* Use a union, since on NetBSD, the compilation flags - determine whether fpos_t is typedef'd to off_t or a struct - containing a single off_t member. */ - union - { - fpos_t f; - off_t o; - } u; - u.o = pos; - fp_->_offset = u.f; - } -# endif - fp_->_flags |= __SOFF; - fp_->_flags &= ~__SEOF; -#elif defined __EMX__ /* emx+gcc */ - fp->_flags &= ~_IOEOF; -#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */ - fp->_flag &= ~_IOEOF; -#elif defined __MINT__ /* Atari FreeMiNT */ - fp->__offset = pos; - fp->__eof = 0; -#endif - return 0; - } - return fseeko (fp, offset, whence); -} diff --git a/src/gl/fstat.c b/src/gl/fstat.c deleted file mode 100644 index 435c429070..0000000000 --- a/src/gl/fstat.c +++ /dev/null @@ -1,88 +0,0 @@ -/* fstat() replacement. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* If the user's config.h happens to include , let it include only - the system's here, so that orig_fstat doesn't recurse to - rpl_fstat. */ -#define __need_system_sys_stat_h -#include - -/* Get the original definition of fstat. It might be defined as a macro. */ -#include -#include -#if _GL_WINDOWS_64_BIT_ST_SIZE -# undef stat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */ -# define stat _stati64 -# undef fstat /* avoid warning on mingw64 with _FILE_OFFSET_BITS=64 */ -# define fstat _fstati64 -#endif -#undef __need_system_sys_stat_h - -static int -orig_fstat (int fd, struct stat *buf) -{ - return fstat (fd, buf); -} - -/* Specification. */ -/* Write "sys/stat.h" here, not , otherwise OSF/1 5.1 DTK cc - eliminates this include because of the preliminary #include - above. */ -#include "sys/stat.h" - -#include -#include - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER -# include "msvc-inval.h" -#endif - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER -static int -fstat_nothrow (int fd, struct stat *buf) -{ - int result; - - TRY_MSVC_INVAL - { - result = orig_fstat (fd, buf); - } - CATCH_MSVC_INVAL - { - result = -1; - errno = EBADF; - } - DONE_MSVC_INVAL; - - return result; -} -#else -# define fstat_nothrow orig_fstat -#endif - -int -rpl_fstat (int fd, struct stat *buf) -{ -#if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY - /* Handle the case when rpl_open() used a dummy file descriptor to work - around an open() that can't normally visit directories. */ - const char *name = _gl_directory_name (fd); - if (name != NULL) - return stat (name, buf); -#endif - - return fstat_nothrow (fd, buf); -} diff --git a/src/gl/ftell.c b/src/gl/ftell.c deleted file mode 100644 index 75ed1b2eca..0000000000 --- a/src/gl/ftell.c +++ /dev/null @@ -1,37 +0,0 @@ -/* An ftell() function that works around platform bugs. - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -#include -#include - -long -ftell (FILE *fp) -{ - /* Use the replacement ftello function with all its workarounds. */ - off_t offset = ftello (fp); - if (LONG_MIN <= offset && offset <= LONG_MAX) - return /* (long) */ offset; - else - { - errno = EOVERFLOW; - return -1; - } -} diff --git a/src/gl/ftello.c b/src/gl/ftello.c deleted file mode 100644 index 4c18ed15bd..0000000000 --- a/src/gl/ftello.c +++ /dev/null @@ -1,85 +0,0 @@ -/* An ftello() function that works around platform bugs. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -/* Get lseek. */ -#include - -#include "stdio-impl.h" - -off_t -ftello (FILE *fp) -#undef ftello -#if !HAVE_FTELLO -# undef ftell -# define ftello ftell -#endif -#if _GL_WINDOWS_64_BIT_OFF_T -# undef ftello -# if HAVE__FTELLI64 /* msvc, mingw64 */ -# define ftello _ftelli64 -# else /* mingw */ -# define ftello ftello64 -# endif -#endif -{ -#if LSEEK_PIPE_BROKEN - /* mingw gives bogus answers rather than failure on non-seekable files. */ - if (lseek (fileno (fp), 0, SEEK_CUR) == -1) - return -1; -#endif - -#if FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE /* Solaris */ - /* The Solaris stdio leaves the _IOREAD flag set after reading from a file - reaches EOF and the program then starts writing to the file. ftello - gets confused by this. */ - if (fp_->_flag & _IOWRT) - { - off_t pos; - - /* Call ftello nevertheless, for the side effects that it does on fp. */ - ftello (fp); - - /* Compute the file position ourselves. */ - pos = lseek (fileno (fp), (off_t) 0, SEEK_CUR); - if (pos >= 0) - { - if ((fp_->_flag & _IONBF) == 0 && fp_->_base != NULL) - pos += fp_->_ptr - fp_->_base; - } - return pos; - } -#endif - -#if defined __SL64 && defined __SCLE /* Cygwin */ - if ((fp->_flags & __SL64) == 0) - { - /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit - mode; but has an ftello that requires 64-bit mode. */ - FILE *tmp = fopen ("/dev/null", "r"); - if (!tmp) - return -1; - fp->_flags |= __SL64; - fp->_seek64 = tmp->_seek64; - fclose (tmp); - } -#endif - return ftello (fp); -} diff --git a/src/gl/gai_strerror.c b/src/gl/gai_strerror.c deleted file mode 100644 index a6cae088be..0000000000 --- a/src/gl/gai_strerror.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright (C) 1997, 2001-2002, 2004-2006, 2008-2016 Free Software - Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Philip Blundell , 1997. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _LIBC -# include -#endif - -#include -#include - -#ifdef _LIBC -# include -#else -# include "gettext.h" -# define _(String) gettext (String) -# define N_(String) String -#endif - -#if HAVE_DECL_GAI_STRERROR - -# include -# undef gai_strerror -# if HAVE_DECL_GAI_STRERRORA -# define gai_strerror gai_strerrorA -# endif - -const char * -rpl_gai_strerror (int code) -{ - return gai_strerror (code); -} - -#else /* !HAVE_DECL_GAI_STRERROR */ - -static struct - { - int code; - const char *msg; - } -values[] = - { - { EAI_ADDRFAMILY, N_("Address family for hostname not supported") }, - { EAI_AGAIN, N_("Temporary failure in name resolution") }, - { EAI_BADFLAGS, N_("Bad value for ai_flags") }, - { EAI_FAIL, N_("Non-recoverable failure in name resolution") }, - { EAI_FAMILY, N_("ai_family not supported") }, - { EAI_MEMORY, N_("Memory allocation failure") }, - { EAI_NODATA, N_("No address associated with hostname") }, - { EAI_NONAME, N_("Name or service not known") }, - { EAI_SERVICE, N_("Servname not supported for ai_socktype") }, - { EAI_SOCKTYPE, N_("ai_socktype not supported") }, - { EAI_SYSTEM, N_("System error") }, - { EAI_OVERFLOW, N_("Argument buffer too small") }, -#ifdef EAI_INPROGRESS - { EAI_INPROGRESS, N_("Processing request in progress") }, - { EAI_CANCELED, N_("Request canceled") }, - { EAI_NOTCANCELED, N_("Request not canceled") }, - { EAI_ALLDONE, N_("All requests done") }, - { EAI_INTR, N_("Interrupted by a signal") }, - { EAI_IDN_ENCODE, N_("Parameter string not correctly encoded") } -#endif - }; - -const char * -gai_strerror (int code) -{ - size_t i; - for (i = 0; i < sizeof (values) / sizeof (values[0]); ++i) - if (values[i].code == code) - return _(values[i].msg); - - return _("Unknown error"); -} -# ifdef _LIBC -libc_hidden_def (gai_strerror) -# endif -#endif /* !HAVE_DECL_GAI_STRERROR */ diff --git a/src/gl/getaddrinfo.c b/src/gl/getaddrinfo.c deleted file mode 100644 index 32d1f328b6..0000000000 --- a/src/gl/getaddrinfo.c +++ /dev/null @@ -1,443 +0,0 @@ -/* Get address information (partial implementation). - Copyright (C) 1997, 2001-2002, 2004-2016 Free Software Foundation, Inc. - Contributed by Simon Josefsson . - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc - optimizes away the sa == NULL test below. */ -#define _GL_ARG_NONNULL(params) - -#include - -#include - -#if HAVE_NETINET_IN_H -# include -#endif - -/* Get inet_ntop. */ -#include - -/* Get calloc. */ -#include - -/* Get memcpy, strdup. */ -#include - -/* Get snprintf. */ -#include - -#include - -#include "gettext.h" -#define _(String) gettext (String) -#define N_(String) String - -/* BeOS has AF_INET, but not PF_INET. */ -#ifndef PF_INET -# define PF_INET AF_INET -#endif -/* BeOS also lacks PF_UNSPEC. */ -#ifndef PF_UNSPEC -# define PF_UNSPEC 0 -#endif - -#if defined _WIN32 || defined __WIN32__ -# define WINDOWS_NATIVE -#endif - -/* gl_sockets_startup */ -#include "sockets.h" - -#ifdef WINDOWS_NATIVE -typedef int (WSAAPI *getaddrinfo_func) (const char*, const char*, - const struct addrinfo*, - struct addrinfo**); -typedef void (WSAAPI *freeaddrinfo_func) (struct addrinfo*); -typedef int (WSAAPI *getnameinfo_func) (const struct sockaddr*, - socklen_t, char*, DWORD, - char*, DWORD, int); - -static getaddrinfo_func getaddrinfo_ptr = NULL; -static freeaddrinfo_func freeaddrinfo_ptr = NULL; -static getnameinfo_func getnameinfo_ptr = NULL; - -static int -use_win32_p (void) -{ - static int done = 0; - HMODULE h; - - if (done) - return getaddrinfo_ptr ? 1 : 0; - - done = 1; - - h = GetModuleHandle ("ws2_32.dll"); - - if (h) - { - getaddrinfo_ptr = (getaddrinfo_func) GetProcAddress (h, "getaddrinfo"); - freeaddrinfo_ptr = (freeaddrinfo_func) GetProcAddress (h, "freeaddrinfo"); - getnameinfo_ptr = (getnameinfo_func) GetProcAddress (h, "getnameinfo"); - } - - /* If either is missing, something is odd. */ - if (!getaddrinfo_ptr || !freeaddrinfo_ptr || !getnameinfo_ptr) - { - getaddrinfo_ptr = NULL; - freeaddrinfo_ptr = NULL; - getnameinfo_ptr = NULL; - return 0; - } - - gl_sockets_startup (SOCKETS_1_1); - - return 1; -} -#endif - -static bool -validate_family (int family) -{ - /* FIXME: Support more families. */ -#if HAVE_IPV4 - if (family == PF_INET) - return true; -#endif -#if HAVE_IPV6 - if (family == PF_INET6) - return true; -#endif - if (family == PF_UNSPEC) - return true; - return false; -} - -/* Translate name of a service location and/or a service name to set of - socket addresses. */ -int -getaddrinfo (const char *restrict nodename, - const char *restrict servname, - const struct addrinfo *restrict hints, - struct addrinfo **restrict res) -{ - struct addrinfo *tmp; - int port = 0; - struct hostent *he; - void *storage; - size_t size; -#if HAVE_IPV6 - struct v6_pair { - struct addrinfo addrinfo; - struct sockaddr_in6 sockaddr_in6; - }; -#endif -#if HAVE_IPV4 - struct v4_pair { - struct addrinfo addrinfo; - struct sockaddr_in sockaddr_in; - }; -#endif - -#ifdef WINDOWS_NATIVE - if (use_win32_p ()) - return getaddrinfo_ptr (nodename, servname, hints, res); -#endif - - if (hints && (hints->ai_flags & ~(AI_CANONNAME|AI_PASSIVE))) - /* FIXME: Support more flags. */ - return EAI_BADFLAGS; - - if (hints && !validate_family (hints->ai_family)) - return EAI_FAMILY; - - if (hints && - hints->ai_socktype != SOCK_STREAM && hints->ai_socktype != SOCK_DGRAM) - /* FIXME: Support other socktype. */ - return EAI_SOCKTYPE; /* FIXME: Better return code? */ - - if (!nodename) - { - if (!(hints->ai_flags & AI_PASSIVE)) - return EAI_NONAME; - -#ifdef HAVE_IPV6 - nodename = (hints->ai_family == AF_INET6) ? "::" : "0.0.0.0"; -#else - nodename = "0.0.0.0"; -#endif - } - - if (servname) - { - struct servent *se = NULL; - const char *proto = - (hints && hints->ai_socktype == SOCK_DGRAM) ? "udp" : "tcp"; - - if (hints == NULL || !(hints->ai_flags & AI_NUMERICSERV)) - /* FIXME: Use getservbyname_r if available. */ - se = getservbyname (servname, proto); - - if (!se) - { - char *c; - if (!(*servname >= '0' && *servname <= '9')) - return EAI_NONAME; - port = strtoul (servname, &c, 10); - if (*c || port > 0xffff) - return EAI_NONAME; - port = htons (port); - } - else - port = se->s_port; - } - - /* FIXME: Use gethostbyname_r if available. */ - he = gethostbyname (nodename); - if (!he || he->h_addr_list[0] == NULL) - return EAI_NONAME; - - switch (he->h_addrtype) - { -#if HAVE_IPV6 - case PF_INET6: - size = sizeof (struct v6_pair); - break; -#endif - -#if HAVE_IPV4 - case PF_INET: - size = sizeof (struct v4_pair); - break; -#endif - - default: - return EAI_NODATA; - } - - storage = calloc (1, size); - if (!storage) - return EAI_MEMORY; - - switch (he->h_addrtype) - { -#if HAVE_IPV6 - case PF_INET6: - { - struct v6_pair *p = storage; - struct sockaddr_in6 *sinp = &p->sockaddr_in6; - tmp = &p->addrinfo; - - if (port) - sinp->sin6_port = port; - - if (he->h_length != sizeof (sinp->sin6_addr)) - { - free (storage); - return EAI_SYSTEM; /* FIXME: Better return code? Set errno? */ - } - - memcpy (&sinp->sin6_addr, he->h_addr_list[0], sizeof sinp->sin6_addr); - - tmp->ai_addr = (struct sockaddr *) sinp; - tmp->ai_addrlen = sizeof *sinp; - } - break; -#endif - -#if HAVE_IPV4 - case PF_INET: - { - struct v4_pair *p = storage; - struct sockaddr_in *sinp = &p->sockaddr_in; - tmp = &p->addrinfo; - - if (port) - sinp->sin_port = port; - - if (he->h_length != sizeof (sinp->sin_addr)) - { - free (storage); - return EAI_SYSTEM; /* FIXME: Better return code? Set errno? */ - } - - memcpy (&sinp->sin_addr, he->h_addr_list[0], sizeof sinp->sin_addr); - - tmp->ai_addr = (struct sockaddr *) sinp; - tmp->ai_addrlen = sizeof *sinp; - } - break; -#endif - - default: - free (storage); - return EAI_NODATA; - } - - if (hints && hints->ai_flags & AI_CANONNAME) - { - const char *cn; - if (he->h_name) - cn = he->h_name; - else - cn = nodename; - - tmp->ai_canonname = strdup (cn); - if (!tmp->ai_canonname) - { - free (storage); - return EAI_MEMORY; - } - } - - tmp->ai_protocol = (hints) ? hints->ai_protocol : 0; - tmp->ai_socktype = (hints) ? hints->ai_socktype : 0; - tmp->ai_addr->sa_family = he->h_addrtype; - tmp->ai_family = he->h_addrtype; - -#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN - switch (he->h_addrtype) - { -#if HAVE_IPV4 - case AF_INET: - tmp->ai_addr->sa_len = sizeof (struct sockaddr_in); - break; -#endif -#if HAVE_IPV6 - case AF_INET6: - tmp->ai_addr->sa_len = sizeof (struct sockaddr_in6); - break; -#endif - } -#endif - - /* FIXME: If more than one address, create linked list of addrinfo's. */ - - *res = tmp; - - return 0; -} - -/* Free 'addrinfo' structure AI including associated storage. */ -void -freeaddrinfo (struct addrinfo *ai) -{ -#ifdef WINDOWS_NATIVE - if (use_win32_p ()) - { - freeaddrinfo_ptr (ai); - return; - } -#endif - - while (ai) - { - struct addrinfo *cur; - - cur = ai; - ai = ai->ai_next; - - free (cur->ai_canonname); - free (cur); - } -} - -int -getnameinfo (const struct sockaddr *restrict sa, socklen_t salen, - char *restrict node, socklen_t nodelen, - char *restrict service, socklen_t servicelen, - int flags) -{ -#ifdef WINDOWS_NATIVE - if (use_win32_p ()) - return getnameinfo_ptr (sa, salen, node, nodelen, - service, servicelen, flags); -#endif - - /* FIXME: Support other flags. */ - if ((node && nodelen > 0 && !(flags & NI_NUMERICHOST)) || - (service && servicelen > 0 && !(flags & NI_NUMERICHOST)) || - (flags & ~(NI_NUMERICHOST|NI_NUMERICSERV))) - return EAI_BADFLAGS; - - if (sa == NULL || salen < sizeof (sa->sa_family)) - return EAI_FAMILY; - - switch (sa->sa_family) - { -#if HAVE_IPV4 - case AF_INET: - if (salen < sizeof (struct sockaddr_in)) - return EAI_FAMILY; - break; -#endif -#if HAVE_IPV6 - case AF_INET6: - if (salen < sizeof (struct sockaddr_in6)) - return EAI_FAMILY; - break; -#endif - default: - return EAI_FAMILY; - } - - if (node && nodelen > 0 && flags & NI_NUMERICHOST) - { - switch (sa->sa_family) - { -#if HAVE_IPV4 - case AF_INET: - if (!inet_ntop (AF_INET, - &(((const struct sockaddr_in *) sa)->sin_addr), - node, nodelen)) - return EAI_SYSTEM; - break; -#endif - -#if HAVE_IPV6 - case AF_INET6: - if (!inet_ntop (AF_INET6, - &(((const struct sockaddr_in6 *) sa)->sin6_addr), - node, nodelen)) - return EAI_SYSTEM; - break; -#endif - - default: - return EAI_FAMILY; - } - } - - if (service && servicelen > 0 && flags & NI_NUMERICSERV) - switch (sa->sa_family) - { -#if HAVE_IPV4 - case AF_INET: -#endif -#if HAVE_IPV6 - case AF_INET6: -#endif - { - unsigned short int port - = ntohs (((const struct sockaddr_in *) sa)->sin_port); - if (servicelen <= snprintf (service, servicelen, "%u", port)) - return EAI_OVERFLOW; - } - break; - } - - return 0; -} diff --git a/src/gl/getdelim.c b/src/gl/getdelim.c deleted file mode 100644 index 175d5c79c0..0000000000 --- a/src/gl/getdelim.c +++ /dev/null @@ -1,147 +0,0 @@ -/* getdelim.c --- Implementation of replacement getdelim function. - Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 3, or (at - your option) any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Ported from glibc by Simon Josefsson. */ - -/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc - optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below. */ -#define _GL_ARG_NONNULL(params) - -#include - -#include - -#include -#include -#include -#include - -#ifndef SSIZE_MAX -# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) -#endif - -#if USE_UNLOCKED_IO -# include "unlocked-io.h" -# define getc_maybe_unlocked(fp) getc(fp) -#elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED -# undef flockfile -# undef funlockfile -# define flockfile(x) ((void) 0) -# define funlockfile(x) ((void) 0) -# define getc_maybe_unlocked(fp) getc(fp) -#else -# define getc_maybe_unlocked(fp) getc_unlocked(fp) -#endif - -static void -alloc_failed (void) -{ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - /* Avoid errno problem without using the realloc module; see: - http://lists.gnu.org/archive/html/bug-gnulib/2016-08/msg00025.html */ - errno = ENOMEM; -#endif -} - -/* Read up to (and including) a DELIMITER from FP into *LINEPTR (and - NUL-terminate it). *LINEPTR is a pointer returned from malloc (or - NULL), pointing to *N characters of space. It is realloc'ed as - necessary. Returns the number of characters read (not including - the null terminator), or -1 on error or EOF. */ - -ssize_t -getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) -{ - ssize_t result; - size_t cur_len = 0; - - if (lineptr == NULL || n == NULL || fp == NULL) - { - errno = EINVAL; - return -1; - } - - flockfile (fp); - - if (*lineptr == NULL || *n == 0) - { - char *new_lineptr; - *n = 120; - new_lineptr = (char *) realloc (*lineptr, *n); - if (new_lineptr == NULL) - { - alloc_failed (); - result = -1; - goto unlock_return; - } - *lineptr = new_lineptr; - } - - for (;;) - { - int i; - - i = getc_maybe_unlocked (fp); - if (i == EOF) - { - result = -1; - break; - } - - /* Make enough space for len+1 (for final NUL) bytes. */ - if (cur_len + 1 >= *n) - { - size_t needed_max = - SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; - size_t needed = 2 * *n + 1; /* Be generous. */ - char *new_lineptr; - - if (needed_max < needed) - needed = needed_max; - if (cur_len + 1 >= needed) - { - result = -1; - errno = EOVERFLOW; - goto unlock_return; - } - - new_lineptr = (char *) realloc (*lineptr, needed); - if (new_lineptr == NULL) - { - alloc_failed (); - result = -1; - goto unlock_return; - } - - *lineptr = new_lineptr; - *n = needed; - } - - (*lineptr)[cur_len] = i; - cur_len++; - - if (i == delimiter) - break; - } - (*lineptr)[cur_len] = '\0'; - result = cur_len ? cur_len : result; - - unlock_return: - funlockfile (fp); /* doesn't set errno */ - - return result; -} diff --git a/src/gl/getline.c b/src/gl/getline.c deleted file mode 100644 index dfc679ad01..0000000000 --- a/src/gl/getline.c +++ /dev/null @@ -1,27 +0,0 @@ -/* getline.c --- Implementation of replacement getline function. - Copyright (C) 2005-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 3, or (at - your option) any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Written by Simon Josefsson. */ - -#include - -#include - -ssize_t -getline (char **lineptr, size_t *n, FILE *stream) -{ - return getdelim (lineptr, n, '\n', stream); -} diff --git a/src/gl/getpass.c b/src/gl/getpass.c deleted file mode 100644 index 3360fa2935..0000000000 --- a/src/gl/getpass.c +++ /dev/null @@ -1,231 +0,0 @@ -/* Copyright (C) 1992-2001, 2003-2007, 2009-2016 Free Software Foundation, Inc. - - This file is part of the GNU C Library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#ifndef _LIBC -# include -#endif - -#include "getpass.h" - -#include - -#if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) - -# include - -# if HAVE_DECL___FSETLOCKING && HAVE___FSETLOCKING -# if HAVE_STDIO_EXT_H -# include -# endif -# else -# define __fsetlocking(stream, type) /* empty */ -# endif - -# if HAVE_TERMIOS_H -# include -# endif - -# if USE_UNLOCKED_IO -# include "unlocked-io.h" -# else -# if !HAVE_DECL_FFLUSH_UNLOCKED -# undef fflush_unlocked -# define fflush_unlocked(x) fflush (x) -# endif -# if !HAVE_DECL_FLOCKFILE -# undef flockfile -# define flockfile(x) ((void) 0) -# endif -# if !HAVE_DECL_FUNLOCKFILE -# undef funlockfile -# define funlockfile(x) ((void) 0) -# endif -# if !HAVE_DECL_FPUTS_UNLOCKED -# undef fputs_unlocked -# define fputs_unlocked(str,stream) fputs (str, stream) -# endif -# if !HAVE_DECL_PUTC_UNLOCKED -# undef putc_unlocked -# define putc_unlocked(c,stream) putc (c, stream) -# endif -# endif - -/* It is desirable to use this bit on systems that have it. - The only bit of terminal state we want to twiddle is echoing, which is - done in software; there is no need to change the state of the terminal - hardware. */ - -# ifndef TCSASOFT -# define TCSASOFT 0 -# endif - -static void -call_fclose (void *arg) -{ - if (arg != NULL) - fclose (arg); -} - -char * -getpass (const char *prompt) -{ - FILE *tty; - FILE *in, *out; -# if HAVE_TCGETATTR - struct termios s, t; -# endif - bool tty_changed = false; - static char *buf; - static size_t bufsize; - ssize_t nread; - - /* Try to write to and read from the terminal if we can. - If we can't open the terminal, use stderr and stdin. */ - - tty = fopen ("/dev/tty", "w+"); - if (tty == NULL) - { - in = stdin; - out = stderr; - } - else - { - /* We do the locking ourselves. */ - __fsetlocking (tty, FSETLOCKING_BYCALLER); - - out = in = tty; - } - - flockfile (out); - - /* Turn echoing off if it is on now. */ -# if HAVE_TCGETATTR - if (tcgetattr (fileno (in), &t) == 0) - { - /* Save the old one. */ - s = t; - /* Tricky, tricky. */ - t.c_lflag &= ~(ECHO | ISIG); - tty_changed = (tcsetattr (fileno (in), TCSAFLUSH | TCSASOFT, &t) == 0); - } -# endif - - /* Write the prompt. */ - fputs_unlocked (prompt, out); - fflush_unlocked (out); - - /* Read the password. */ - nread = getline (&buf, &bufsize, in); - - /* According to the C standard, input may not be followed by output - on the same stream without an intervening call to a file - positioning function. Suppose in == out; then without this fseek - call, on Solaris, HP-UX, AIX, OSF/1, the previous input gets - echoed, whereas on IRIX, the following newline is not output as - it should be. POSIX imposes similar restrictions if fileno (in) - == fileno (out). The POSIX restrictions are tricky and change - from POSIX version to POSIX version, so play it safe and invoke - fseek even if in != out. */ - fseeko (out, 0, SEEK_CUR); - - if (buf != NULL) - { - if (nread < 0) - buf[0] = '\0'; - else if (buf[nread - 1] == '\n') - { - /* Remove the newline. */ - buf[nread - 1] = '\0'; - if (tty_changed) - { - /* Write the newline that was not echoed. */ - putc_unlocked ('\n', out); - } - } - } - - /* Restore the original setting. */ -# if HAVE_TCSETATTR - if (tty_changed) - tcsetattr (fileno (in), TCSAFLUSH | TCSASOFT, &s); -# endif - - funlockfile (out); - - call_fclose (tty); - - return buf; -} - -#else /* W32 native */ - -/* Windows implementation by Martin Lambers , - improved by Simon Josefsson. */ - -/* For PASS_MAX. */ -# include -/* For _getch(). */ -# include -/* For strdup(). */ -# include - -# ifndef PASS_MAX -# define PASS_MAX 512 -# endif - -char * -getpass (const char *prompt) -{ - char getpassbuf[PASS_MAX + 1]; - size_t i = 0; - int c; - - if (prompt) - { - fputs (prompt, stderr); - fflush (stderr); - } - - for (;;) - { - c = _getch (); - if (c == '\r') - { - getpassbuf[i] = '\0'; - break; - } - else if (i < PASS_MAX) - { - getpassbuf[i++] = c; - } - - if (i >= PASS_MAX) - { - getpassbuf[i] = '\0'; - break; - } - } - - if (prompt) - { - fputs ("\r\n", stderr); - fflush (stderr); - } - - return strdup (getpassbuf); -} -#endif diff --git a/src/gl/getpass.h b/src/gl/getpass.h deleted file mode 100644 index 785fe00ac4..0000000000 --- a/src/gl/getpass.h +++ /dev/null @@ -1,30 +0,0 @@ -/* getpass.h -- Read a password of arbitrary length from /dev/tty or stdin. - Copyright (C) 2004, 2009-2016 Free Software Foundation, Inc. - Contributed by Simon Josefsson , 2004. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef GETPASS_H -# define GETPASS_H - -/* Get getpass declaration, if available. */ -# include - -# if !HAVE_DECL_GETPASS -/* Read a password of arbitrary length from /dev/tty or stdin. */ -char *getpass (const char *prompt); - -# endif - -#endif /* GETPASS_H */ diff --git a/src/gl/getpeername.c b/src/gl/getpeername.c deleted file mode 100644 index bc9759b3f3..0000000000 --- a/src/gl/getpeername.c +++ /dev/null @@ -1,49 +0,0 @@ -/* getpeername.c --- wrappers for Windows getpeername function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#undef getpeername - -int -rpl_getpeername (int fd, struct sockaddr *addr, socklen_t *addrlen) -{ - SOCKET sock = FD_TO_SOCKET (fd); - - if (sock == INVALID_SOCKET) - { - errno = EBADF; - return -1; - } - else - { - int r = getpeername (sock, addr, addrlen); - if (r < 0) - set_winsock_errno (); - - return r; - } -} diff --git a/src/gl/getprogname.c b/src/gl/getprogname.c deleted file mode 100644 index a7246e9ef2..0000000000 --- a/src/gl/getprogname.c +++ /dev/null @@ -1,151 +0,0 @@ -/* Program name management. - Copyright (C) 2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include "getprogname.h" - -#include /* get program_invocation_name declaration */ -#include /* get __argv declaration */ - -#ifdef _AIX -# include -# include -# include -#endif - -#ifdef __MVS__ -# ifndef _OPEN_SYS -# define _OPEN_SYS -# endif -# include -# include -#endif - -#ifdef __hpux -# include -# include -# include -# include -#endif - -#include "dirname.h" - -#ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ -char const * -getprogname (void) -{ -# if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* glibc, BeOS */ - /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ - return program_invocation_short_name; -# elif HAVE_DECL_PROGRAM_INVOCATION_NAME /* glibc, BeOS */ - /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ - return last_component (program_invocation_name); -# elif HAVE_GETEXECNAME /* Solaris */ - /* http://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ - const char *p = getexecname (); - if (!p) - p = "?"; - return last_component (p); -# elif HAVE_DECL___ARGV /* mingw, MSVC */ - /* https://msdn.microsoft.com/en-us/library/dn727674.aspx */ - const char *p = __argv && __argv[0] ? __argv[0] : "?"; - return last_component (p); -# elif HAVE_VAR___PROGNAME /* OpenBSD, QNX */ - /* http://man.openbsd.org/style.9 */ - /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */ - /* Be careful to declare this only when we absolutely need it - (OpenBSD 5.1), rather than when it's available. Otherwise, - its mere declaration makes program_invocation_short_name - malfunction (have zero length) with Fedora 25's glibc. */ - extern char *__progname; - const char *p = __progname; - return p && p[0] ? p : "?"; -# elif _AIX /* AIX */ - /* Idea by Bastien ROUCARIÈS, - http://lists.gnu.org/archive/html/bug-gnulib/2010-12/msg00095.html - Reference: http:// - ibm.biz/knowctr#ssw_aix_53/com.ibm.aix.basetechref/doc/basetrf1/getprocs.htm - */ - static char *p; - static int first = 1; - if (first) - { - first = 0; - pid_t pid = getpid (); - struct procentry64 procs; - p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) - ? strdup (procs.pi_comm) - : NULL); - if (!p) - p = "?"; - } - return p; -# elif defined __hpux - static char *p; - static int first = 1; - if (first) - { - first = 0; - pid_t pid = getpid (); - struct pst_status status; - p = (0 < pstat_getproc (&status, sizeof status, 0, pid) - ? strdup (status.pst_ucomm) - : NULL); - if (!p) - p = "?"; - } - return p; -# elif __MVS__ /* z/OS */ - /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */ - static char *p = "?"; - static int first = 1; - if (first) - { - pid_t pid = getpid (); - int token; - W_PSPROC buf; - first = 0; - memset (&buf, 0, sizeof(buf)); - buf.ps_cmdptr = (char *) malloc (buf.ps_cmdlen = PS_CMDBLEN_LONG); - buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN); - buf.ps_pathptr = (char *) malloc (buf.ps_pathlen = PS_PATHBLEN); - if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr) - { - for (token = 0; token >= 0; - token = w_getpsent (token, &buf, sizeof(buf))) - { - if (token > 0 && buf.ps_pid == pid) - { - char *s = strdup (last_component (buf.ps_pathptr)); - if (s) - p = s; - break; - } - } - } - free (buf.ps_cmdptr); - free (buf.ps_conttyptr); - free (buf.ps_pathptr); - } - return p; -# else -# error "getprogname module not ported to this OS" -# endif -} - -#endif diff --git a/src/gl/getprogname.h b/src/gl/getprogname.h deleted file mode 100644 index e8f9e978b1..0000000000 --- a/src/gl/getprogname.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Program name management. - Copyright (C) 2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef _GL_GETPROGNAME_H -#define _GL_GETPROGNAME_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Return the base name of the executing program. - On native Windows this will usually end in ".exe" or ".EXE". */ -#ifndef HAVE_GETPROGNAME -extern char const *getprogname (void) -# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME - _GL_ATTRIBUTE_PURE -# endif - ; -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/gl/gettext.h b/src/gl/gettext.h deleted file mode 100644 index 9a232cc3a8..0000000000 --- a/src/gl/gettext.h +++ /dev/null @@ -1,292 +0,0 @@ -/* Convenience header for conditional use of GNU . - Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#ifndef _LIBGETTEXT_H -#define _LIBGETTEXT_H 1 - -/* NLS can be disabled through the configure --disable-nls option. */ -#if ENABLE_NLS - -/* Get declarations of GNU message catalog functions. */ -# include - -/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by - the gettext() and ngettext() macros. This is an alternative to calling - textdomain(), and is useful for libraries. */ -# ifdef DEFAULT_TEXT_DOMAIN -# undef gettext -# define gettext(Msgid) \ - dgettext (DEFAULT_TEXT_DOMAIN, Msgid) -# undef ngettext -# define ngettext(Msgid1, Msgid2, N) \ - dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) -# endif - -#else - -/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which - chokes if dcgettext is defined as a macro. So include it now, to make - later inclusions of a NOP. We don't include - as well because people using "gettext.h" will not include , - and also including would fail on SunOS 4, whereas - is OK. */ -#if defined(__sun) -# include -#endif - -/* Many header files from the libstdc++ coming with g++ 3.3 or newer include - , which chokes if dcgettext is defined as a macro. So include - it now, to make later inclusions of a NOP. */ -#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) -# include -# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H -# include -# endif -#endif - -/* Disabled NLS. - The casts to 'const char *' serve the purpose of producing warnings - for invalid uses of the value returned from these functions. - On pre-ANSI systems without 'const', the config.h file is supposed to - contain "#define const". */ -# undef gettext -# define gettext(Msgid) ((const char *) (Msgid)) -# undef dgettext -# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) -# undef dcgettext -# define dcgettext(Domainname, Msgid, Category) \ - ((void) (Category), dgettext (Domainname, Msgid)) -# undef ngettext -# define ngettext(Msgid1, Msgid2, N) \ - ((N) == 1 \ - ? ((void) (Msgid2), (const char *) (Msgid1)) \ - : ((void) (Msgid1), (const char *) (Msgid2))) -# undef dngettext -# define dngettext(Domainname, Msgid1, Msgid2, N) \ - ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) -# undef dcngettext -# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ - ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) -# undef textdomain -# define textdomain(Domainname) ((const char *) (Domainname)) -# undef bindtextdomain -# define bindtextdomain(Domainname, Dirname) \ - ((void) (Domainname), (const char *) (Dirname)) -# undef bind_textdomain_codeset -# define bind_textdomain_codeset(Domainname, Codeset) \ - ((void) (Domainname), (const char *) (Codeset)) - -#endif - -/* Prefer gnulib's setlocale override over libintl's setlocale override. */ -#ifdef GNULIB_defined_setlocale -# undef setlocale -# define setlocale rpl_setlocale -#endif - -/* A pseudo function call that serves as a marker for the automated - extraction of messages, but does not call gettext(). The run-time - translation is done at a different place in the code. - The argument, String, should be a literal string. Concatenated strings - and other string expressions won't work. - The macro's expansion is not parenthesized, so that it is suitable as - initializer for static 'char[]' or 'const char[]' variables. */ -#define gettext_noop(String) String - -/* The separator between msgctxt and msgid in a .mo file. */ -#define GETTEXT_CONTEXT_GLUE "\004" - -/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a - MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be - short and rarely need to change. - The letter 'p' stands for 'particular' or 'special'. */ -#ifdef DEFAULT_TEXT_DOMAIN -# define pgettext(Msgctxt, Msgid) \ - pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) -#else -# define pgettext(Msgctxt, Msgid) \ - pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) -#endif -#define dpgettext(Domainname, Msgctxt, Msgid) \ - pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) -#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ - pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) -#ifdef DEFAULT_TEXT_DOMAIN -# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ - npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) -#else -# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ - npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) -#endif -#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ - npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) -#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ - npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static const char * -pgettext_aux (const char *domain, - const char *msg_ctxt_id, const char *msgid, - int category) -{ - const char *translation = dcgettext (domain, msg_ctxt_id, category); - if (translation == msg_ctxt_id) - return msgid; - else - return translation; -} - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static const char * -npgettext_aux (const char *domain, - const char *msg_ctxt_id, const char *msgid, - const char *msgid_plural, unsigned long int n, - int category) -{ - const char *translation = - dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); - if (translation == msg_ctxt_id || translation == msgid_plural) - return (n == 1 ? msgid : msgid_plural); - else - return translation; -} - -/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID - can be arbitrary expressions. But for string literals these macros are - less efficient than those above. */ - -#include - -#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ - /* || __STDC_VERSION__ >= 199901L */ ) -# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 -#else -# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 -#endif - -#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS -#include -#endif - -#define pgettext_expr(Msgctxt, Msgid) \ - dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) -#define dpgettext_expr(Domainname, Msgctxt, Msgid) \ - dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static const char * -dcpgettext_expr (const char *domain, - const char *msgctxt, const char *msgid, - int category) -{ - size_t msgctxt_len = strlen (msgctxt) + 1; - size_t msgid_len = strlen (msgid) + 1; - const char *translation; -#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS - char msg_ctxt_id[msgctxt_len + msgid_len]; -#else - char buf[1024]; - char *msg_ctxt_id = - (msgctxt_len + msgid_len <= sizeof (buf) - ? buf - : (char *) malloc (msgctxt_len + msgid_len)); - if (msg_ctxt_id != NULL) -#endif - { - int found_translation; - memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); - msg_ctxt_id[msgctxt_len - 1] = '\004'; - memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); - translation = dcgettext (domain, msg_ctxt_id, category); - found_translation = (translation != msg_ctxt_id); -#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS - if (msg_ctxt_id != buf) - free (msg_ctxt_id); -#endif - if (found_translation) - return translation; - } - return msgid; -} - -#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ - dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) -#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ - dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) - -#ifdef __GNUC__ -__inline -#else -#ifdef __cplusplus -inline -#endif -#endif -static const char * -dcnpgettext_expr (const char *domain, - const char *msgctxt, const char *msgid, - const char *msgid_plural, unsigned long int n, - int category) -{ - size_t msgctxt_len = strlen (msgctxt) + 1; - size_t msgid_len = strlen (msgid) + 1; - const char *translation; -#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS - char msg_ctxt_id[msgctxt_len + msgid_len]; -#else - char buf[1024]; - char *msg_ctxt_id = - (msgctxt_len + msgid_len <= sizeof (buf) - ? buf - : (char *) malloc (msgctxt_len + msgid_len)); - if (msg_ctxt_id != NULL) -#endif - { - int found_translation; - memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); - msg_ctxt_id[msgctxt_len - 1] = '\004'; - memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); - translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); - found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); -#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS - if (msg_ctxt_id != buf) - free (msg_ctxt_id); -#endif - if (found_translation) - return translation; - } - return (n == 1 ? msgid : msgid_plural); -} - -#endif /* _LIBGETTEXT_H */ diff --git a/src/gl/gettime.c b/src/gl/gettime.c deleted file mode 100644 index ea58eb0aaf..0000000000 --- a/src/gl/gettime.c +++ /dev/null @@ -1,48 +0,0 @@ -/* gettime -- get the system clock - - Copyright (C) 2002, 2004-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paul Eggert. */ - -#include - -#include "timespec.h" - -#include - -/* Get the system time into *TS. */ - -void -gettime (struct timespec *ts) -{ -#if HAVE_NANOTIME - nanotime (ts); -#else - -# if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME - if (clock_gettime (CLOCK_REALTIME, ts) == 0) - return; -# endif - - { - struct timeval tv; - gettimeofday (&tv, NULL); - ts->tv_sec = tv.tv_sec; - ts->tv_nsec = tv.tv_usec * 1000; - } - -#endif -} diff --git a/src/gl/gettimeofday.c b/src/gl/gettimeofday.c deleted file mode 100644 index 224ca6a176..0000000000 --- a/src/gl/gettimeofday.c +++ /dev/null @@ -1,154 +0,0 @@ -/* Provide gettimeofday for systems that don't have it or for which it's broken. - - Copyright (C) 2001-2003, 2005-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* written by Jim Meyering */ - -#include - -/* Specification. */ -#include - -#include - -#if HAVE_SYS_TIMEB_H -# include -#endif - -#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME - -/* Work around the bug in some systems whereby gettimeofday clobbers - the static buffer that localtime uses for its return value. The - gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has - this problem. The tzset replacement is necessary for at least - Solaris 2.5, 2.5.1, and 2.6. */ - -static struct tm tm_zero_buffer; -static struct tm *localtime_buffer_addr = &tm_zero_buffer; - -# undef localtime -extern struct tm *localtime (time_t const *); - -# undef gmtime -extern struct tm *gmtime (time_t const *); - -/* This is a wrapper for localtime. It is used only on systems for which - gettimeofday clobbers the static buffer used for localtime's result. - - On the first call, record the address of the static buffer that - localtime uses for its result. */ - -struct tm * -rpl_localtime (time_t const *timep) -{ - struct tm *tm = localtime (timep); - - if (localtime_buffer_addr == &tm_zero_buffer) - localtime_buffer_addr = tm; - - return tm; -} - -/* Same as above, since gmtime and localtime use the same buffer. */ -struct tm * -rpl_gmtime (time_t const *timep) -{ - struct tm *tm = gmtime (timep); - - if (localtime_buffer_addr == &tm_zero_buffer) - localtime_buffer_addr = tm; - - return tm; -} - -#endif /* GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME */ - -#if TZSET_CLOBBERS_LOCALTIME - -# undef tzset -extern void tzset (void); - -/* This is a wrapper for tzset, for systems on which tzset may clobber - the static buffer used for localtime's result. */ -void -rpl_tzset (void) -{ - /* Save and restore the contents of the buffer used for localtime's - result around the call to tzset. */ - struct tm save = *localtime_buffer_addr; - tzset (); - *localtime_buffer_addr = save; -} -#endif - -/* This is a wrapper for gettimeofday. It is used only on systems - that lack this function, or whose implementation of this function - causes problems. */ - -int -gettimeofday (struct timeval *restrict tv, void *restrict tz) -{ -#undef gettimeofday -#if HAVE_GETTIMEOFDAY -# if GETTIMEOFDAY_CLOBBERS_LOCALTIME - /* Save and restore the contents of the buffer used for localtime's - result around the call to gettimeofday. */ - struct tm save = *localtime_buffer_addr; -# endif - -# if defined timeval /* 'struct timeval' overridden by gnulib? */ -# undef timeval - struct timeval otv; - int result = gettimeofday (&otv, (struct timezone *) tz); - if (result == 0) - { - tv->tv_sec = otv.tv_sec; - tv->tv_usec = otv.tv_usec; - } -# else - int result = gettimeofday (tv, (struct timezone *) tz); -# endif - -# if GETTIMEOFDAY_CLOBBERS_LOCALTIME - *localtime_buffer_addr = save; -# endif - - return result; - -#else - -# if HAVE__FTIME - - struct _timeb timebuf; - _ftime (&timebuf); - tv->tv_sec = timebuf.time; - tv->tv_usec = timebuf.millitm * 1000; - -# else - -# if !defined OK_TO_USE_1S_CLOCK -# error "Only 1-second nominal clock resolution found. Is that intended?" \ - "If so, compile with the -DOK_TO_USE_1S_CLOCK option." -# endif - tv->tv_sec = time (NULL); - tv->tv_usec = 0; - -# endif - - return 0; - -#endif -} diff --git a/src/gl/inet_ntop.c b/src/gl/inet_ntop.c deleted file mode 100644 index 8668bf6d1b..0000000000 --- a/src/gl/inet_ntop.c +++ /dev/null @@ -1,260 +0,0 @@ -/* inet_ntop.c -- convert IPv4 and IPv6 addresses from binary to text form - - Copyright (C) 2005-2006, 2008-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* - * Copyright (c) 1996-1999 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -#include - -/* Specification. */ -#include - -/* Use this to suppress gcc's "...may be used before initialized" warnings. - Beware: The Code argument must not contain commas. */ -#ifndef IF_LINT -# if defined GCC_LINT || defined lint -# define IF_LINT(Code) Code -# else -# define IF_LINT(Code) /* empty */ -# endif -#endif - -#if HAVE_DECL_INET_NTOP - -# undef inet_ntop - -const char * -rpl_inet_ntop (int af, const void *restrict src, - char *restrict dst, socklen_t cnt) -{ - return inet_ntop (af, src, dst, cnt); -} - -#else - -# include -# include -# include - -# define NS_IN6ADDRSZ 16 -# define NS_INT16SZ 2 - -/* - * WARNING: Don't even consider trying to compile this on a system where - * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. - */ -typedef int verify_int_size[4 <= sizeof (int) ? 1 : -1]; - -static const char *inet_ntop4 (const unsigned char *src, char *dst, socklen_t size); -# if HAVE_IPV6 -static const char *inet_ntop6 (const unsigned char *src, char *dst, socklen_t size); -# endif - - -/* char * - * inet_ntop(af, src, dst, size) - * convert a network format address to presentation format. - * return: - * pointer to presentation format address ('dst'), or NULL (see errno). - * author: - * Paul Vixie, 1996. - */ -const char * -inet_ntop (int af, const void *restrict src, - char *restrict dst, socklen_t cnt) -{ - switch (af) - { -# if HAVE_IPV4 - case AF_INET: - return (inet_ntop4 (src, dst, cnt)); -# endif - -# if HAVE_IPV6 - case AF_INET6: - return (inet_ntop6 (src, dst, cnt)); -# endif - - default: - errno = EAFNOSUPPORT; - return (NULL); - } - /* NOTREACHED */ -} - -/* const char * - * inet_ntop4(src, dst, size) - * format an IPv4 address - * return: - * 'dst' (as a const) - * notes: - * (1) uses no statics - * (2) takes a u_char* not an in_addr as input - * author: - * Paul Vixie, 1996. - */ -static const char * -inet_ntop4 (const unsigned char *src, char *dst, socklen_t size) -{ - char tmp[sizeof "255.255.255.255"]; - int len; - - len = sprintf (tmp, "%u.%u.%u.%u", src[0], src[1], src[2], src[3]); - if (len < 0) - return NULL; - - if (len > size) - { - errno = ENOSPC; - return NULL; - } - - return strcpy (dst, tmp); -} - -# if HAVE_IPV6 - -/* const char * - * inet_ntop6(src, dst, size) - * convert IPv6 binary address into presentation (printable) format - * author: - * Paul Vixie, 1996. - */ -static const char * -inet_ntop6 (const unsigned char *src, char *dst, socklen_t size) -{ - /* - * Note that int32_t and int16_t need only be "at least" large enough - * to contain a value of the specified size. On some systems, like - * Crays, there is no such thing as an integer variable with 16 bits. - * Keep this in mind if you think this function should have been coded - * to use pointer overlays. All the world's not a VAX. - */ - char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp; - struct - { - int base, len; - } best, cur; - unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ]; - int i; - - /* - * Preprocess: - * Copy the input (bytewise) array into a wordwise array. - * Find the longest run of 0x00's in src[] for :: shorthanding. - */ - memset (words, '\0', sizeof words); - for (i = 0; i < NS_IN6ADDRSZ; i += 2) - words[i / 2] = (src[i] << 8) | src[i + 1]; - best.base = -1; - cur.base = -1; - IF_LINT(best.len = 0); - IF_LINT(cur.len = 0); - for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) - { - if (words[i] == 0) - { - if (cur.base == -1) - cur.base = i, cur.len = 1; - else - cur.len++; - } - else - { - if (cur.base != -1) - { - if (best.base == -1 || cur.len > best.len) - best = cur; - cur.base = -1; - } - } - } - if (cur.base != -1) - { - if (best.base == -1 || cur.len > best.len) - best = cur; - } - if (best.base != -1 && best.len < 2) - best.base = -1; - - /* - * Format the result. - */ - tp = tmp; - for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) - { - /* Are we inside the best run of 0x00's? */ - if (best.base != -1 && i >= best.base && i < (best.base + best.len)) - { - if (i == best.base) - *tp++ = ':'; - continue; - } - /* Are we following an initial run of 0x00s or any real hex? */ - if (i != 0) - *tp++ = ':'; - /* Is this address an encapsulated IPv4? */ - if (i == 6 && best.base == 0 && - (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) - { - if (!inet_ntop4 (src + 12, tp, sizeof tmp - (tp - tmp))) - return (NULL); - tp += strlen (tp); - break; - } - { - int len = sprintf (tp, "%x", words[i]); - if (len < 0) - return NULL; - tp += len; - } - } - /* Was it a trailing run of 0x00's? */ - if (best.base != -1 && (best.base + best.len) == - (NS_IN6ADDRSZ / NS_INT16SZ)) - *tp++ = ':'; - *tp++ = '\0'; - - /* - * Check for overflow, copy, and we're done. - */ - if ((socklen_t) (tp - tmp) > size) - { - errno = ENOSPC; - return NULL; - } - - return strcpy (dst, tmp); -} - -# endif - -#endif diff --git a/src/gl/inet_pton.c b/src/gl/inet_pton.c deleted file mode 100644 index 3cddfb1e01..0000000000 --- a/src/gl/inet_pton.c +++ /dev/null @@ -1,268 +0,0 @@ -/* inet_pton.c -- convert IPv4 and IPv6 addresses from text to binary form - - Copyright (C) 2006, 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* - * Copyright (c) 1996,1999 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -#include - -/* Specification. */ -#include - -#if HAVE_DECL_INET_PTON - -# undef inet_pton - -int -rpl_inet_pton (int af, const char *restrict src, void *restrict dst) -{ - return inet_pton (af, src, dst); -} - -#else - -# include -# include -# include - -# define NS_INADDRSZ 4 -# define NS_IN6ADDRSZ 16 -# define NS_INT16SZ 2 - -/* - * WARNING: Don't even consider trying to compile this on a system where - * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. - */ - -static int inet_pton4 (const char *src, unsigned char *dst); -# if HAVE_IPV6 -static int inet_pton6 (const char *src, unsigned char *dst); -# endif - -/* int - * inet_pton(af, src, dst) - * convert from presentation format (which usually means ASCII printable) - * to network format (which is usually some kind of binary format). - * return: - * 1 if the address was valid for the specified address family - * 0 if the address wasn't valid ('dst' is untouched in this case) - * -1 if some other error occurred ('dst' is untouched in this case, too) - * author: - * Paul Vixie, 1996. - */ -int -inet_pton (int af, const char *restrict src, void *restrict dst) -{ - switch (af) - { - case AF_INET: - return (inet_pton4 (src, dst)); - -# if HAVE_IPV6 - case AF_INET6: - return (inet_pton6 (src, dst)); -# endif - - default: - errno = EAFNOSUPPORT; - return (-1); - } - /* NOTREACHED */ -} - -/* int - * inet_pton4(src, dst) - * like inet_aton() but without all the hexadecimal, octal (with the - * exception of 0) and shorthand. - * return: - * 1 if 'src' is a valid dotted quad, else 0. - * notice: - * does not touch 'dst' unless it's returning 1. - * author: - * Paul Vixie, 1996. - */ -static int -inet_pton4 (const char *restrict src, unsigned char *restrict dst) -{ - int saw_digit, octets, ch; - unsigned char tmp[NS_INADDRSZ], *tp; - - saw_digit = 0; - octets = 0; - *(tp = tmp) = 0; - while ((ch = *src++) != '\0') - { - - if (ch >= '0' && ch <= '9') - { - unsigned new = *tp * 10 + (ch - '0'); - - if (saw_digit && *tp == 0) - return (0); - if (new > 255) - return (0); - *tp = new; - if (!saw_digit) - { - if (++octets > 4) - return (0); - saw_digit = 1; - } - } - else if (ch == '.' && saw_digit) - { - if (octets == 4) - return (0); - *++tp = 0; - saw_digit = 0; - } - else - return (0); - } - if (octets < 4) - return (0); - memcpy (dst, tmp, NS_INADDRSZ); - return (1); -} - -# if HAVE_IPV6 - -/* int - * inet_pton6(src, dst) - * convert presentation level address to network order binary form. - * return: - * 1 if 'src' is a valid [RFC1884 2.2] address, else 0. - * notice: - * (1) does not touch 'dst' unless it's returning 1. - * (2) :: in a full address is silently ignored. - * credit: - * inspired by Mark Andrews. - * author: - * Paul Vixie, 1996. - */ -static int -inet_pton6 (const char *restrict src, unsigned char *restrict dst) -{ - static const char xdigits[] = "0123456789abcdef"; - unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp; - const char *curtok; - int ch, saw_xdigit; - unsigned val; - - tp = memset (tmp, '\0', NS_IN6ADDRSZ); - endp = tp + NS_IN6ADDRSZ; - colonp = NULL; - /* Leading :: requires some special handling. */ - if (*src == ':') - if (*++src != ':') - return (0); - curtok = src; - saw_xdigit = 0; - val = 0; - while ((ch = c_tolower (*src++)) != '\0') - { - const char *pch; - - pch = strchr (xdigits, ch); - if (pch != NULL) - { - val <<= 4; - val |= (pch - xdigits); - if (val > 0xffff) - return (0); - saw_xdigit = 1; - continue; - } - if (ch == ':') - { - curtok = src; - if (!saw_xdigit) - { - if (colonp) - return (0); - colonp = tp; - continue; - } - else if (*src == '\0') - { - return (0); - } - if (tp + NS_INT16SZ > endp) - return (0); - *tp++ = (u_char) (val >> 8) & 0xff; - *tp++ = (u_char) val & 0xff; - saw_xdigit = 0; - val = 0; - continue; - } - if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) && - inet_pton4 (curtok, tp) > 0) - { - tp += NS_INADDRSZ; - saw_xdigit = 0; - break; /* '\0' was seen by inet_pton4(). */ - } - return (0); - } - if (saw_xdigit) - { - if (tp + NS_INT16SZ > endp) - return (0); - *tp++ = (u_char) (val >> 8) & 0xff; - *tp++ = (u_char) val & 0xff; - } - if (colonp != NULL) - { - /* - * Since some memmove()'s erroneously fail to handle - * overlapping regions, we'll do the shift by hand. - */ - const int n = tp - colonp; - int i; - - if (tp == endp) - return (0); - for (i = 1; i <= n; i++) - { - endp[-i] = colonp[n - i]; - colonp[n - i] = 0; - } - tp = endp; - } - if (tp != endp) - return (0); - memcpy (dst, tmp, NS_IN6ADDRSZ); - return (1); -} - -# endif - -#endif diff --git a/src/gl/intprops.h b/src/gl/intprops.h deleted file mode 100644 index 8add5def8e..0000000000 --- a/src/gl/intprops.h +++ /dev/null @@ -1,464 +0,0 @@ -/* intprops.h -- properties of integer types - - Copyright (C) 2001-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paul Eggert. */ - -#ifndef _GL_INTPROPS_H -#define _GL_INTPROPS_H - -#include -#include - -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif - -/* Return a value with the common real type of E and V and the value of V. */ -#define _GL_INT_CONVERT(e, v) (0 * (e) + (v)) - -/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see - . */ -#define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v)) - -/* The extra casts in the following macros work around compiler bugs, - e.g., in Cray C 5.0.3.0. */ - -/* True if the arithmetic type T is an integer type. bool counts as - an integer. */ -#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) - -/* True if the real type T is signed. */ -#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) - -/* Return 1 if the real expression E, after promotion, has a - signed or floating type. */ -#define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) - - -/* Minimum and maximum values for integer types and expressions. */ - -/* The width in bits of the integer type or expression T. - Padding bits are not supported; this is checked at compile-time below. */ -#define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) - -/* The maximum and minimum values for the integer type T. */ -#define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) -#define TYPE_MAXIMUM(t) \ - ((t) (! TYPE_SIGNED (t) \ - ? (t) -1 \ - : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) - -/* The maximum and minimum values for the type of the expression E, - after integer promotion. E should not have side effects. */ -#define _GL_INT_MINIMUM(e) \ - (EXPR_SIGNED (e) \ - ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ - : _GL_INT_CONVERT (e, 0)) -#define _GL_INT_MAXIMUM(e) \ - (EXPR_SIGNED (e) \ - ? _GL_SIGNED_INT_MAXIMUM (e) \ - : _GL_INT_NEGATE_CONVERT (e, 1)) -#define _GL_SIGNED_INT_MAXIMUM(e) \ - (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1) - -/* Work around OpenVMS incompatibility with C99. */ -#if !defined LLONG_MAX && defined __INT64_MAX -# define LLONG_MAX __INT64_MAX -# define LLONG_MIN __INT64_MIN -#endif - -/* This include file assumes that signed types are two's complement without - padding bits; the above macros have undefined behavior otherwise. - If this is a problem for you, please let us know how to fix it for your host. - As a sanity check, test the assumption for some signed types that - bounds. */ -verify (TYPE_MINIMUM (signed char) == SCHAR_MIN); -verify (TYPE_MAXIMUM (signed char) == SCHAR_MAX); -verify (TYPE_MINIMUM (short int) == SHRT_MIN); -verify (TYPE_MAXIMUM (short int) == SHRT_MAX); -verify (TYPE_MINIMUM (int) == INT_MIN); -verify (TYPE_MAXIMUM (int) == INT_MAX); -verify (TYPE_MINIMUM (long int) == LONG_MIN); -verify (TYPE_MAXIMUM (long int) == LONG_MAX); -#ifdef LLONG_MAX -verify (TYPE_MINIMUM (long long int) == LLONG_MIN); -verify (TYPE_MAXIMUM (long long int) == LLONG_MAX); -#endif -/* Similarly, sanity-check one ISO/IEC TS 18661-1:2014 macro if defined. */ -#ifdef UINT_WIDTH -verify (TYPE_WIDTH (unsigned int) == UINT_WIDTH); -#endif - -/* Does the __typeof__ keyword work? This could be done by - 'configure', but for now it's easier to do it by hand. */ -#if (2 <= __GNUC__ \ - || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ - || (0x5110 <= __SUNPRO_C && !__STDC__)) -# define _GL_HAVE___TYPEOF__ 1 -#else -# define _GL_HAVE___TYPEOF__ 0 -#endif - -/* Return 1 if the integer type or expression T might be signed. Return 0 - if it is definitely unsigned. This macro does not evaluate its argument, - and expands to an integer constant expression. */ -#if _GL_HAVE___TYPEOF__ -# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) -#else -# define _GL_SIGNED_TYPE_OR_EXPR(t) 1 -#endif - -/* Bound on length of the string representing an unsigned integer - value representable in B bits. log10 (2.0) < 146/485. The - smallest value of B where this bound is not tight is 2621. */ -#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) - -/* Bound on length of the string representing an integer type or expression T. - Subtract 1 for the sign bit if T is signed, and then add 1 more for - a minus sign if needed. - - Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is - signed, this macro may overestimate the true bound by one byte when - applied to unsigned types of size 2, 4, 16, ... bytes. */ -#define INT_STRLEN_BOUND(t) \ - (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ - + _GL_SIGNED_TYPE_OR_EXPR (t)) - -/* Bound on buffer size needed to represent an integer type or expression T, - including the terminating null. */ -#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) - - -/* Range overflow checks. - - The INT__RANGE_OVERFLOW macros return 1 if the corresponding C - operators might not yield numerically correct answers due to - arithmetic overflow. They do not rely on undefined or - implementation-defined behavior. Their implementations are simple - and straightforward, but they are a bit harder to use than the - INT__OVERFLOW macros described below. - - Example usage: - - long int i = ...; - long int j = ...; - if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) - printf ("multiply would overflow"); - else - printf ("product is %ld", i * j); - - Restrictions on *_RANGE_OVERFLOW macros: - - These macros do not check for all possible numerical problems or - undefined or unspecified behavior: they do not check for division - by zero, for bad shift counts, or for shifting negative numbers. - - These macros may evaluate their arguments zero or multiple times, - so the arguments should not have side effects. The arithmetic - arguments (including the MIN and MAX arguments) must be of the same - integer type after the usual arithmetic conversions, and the type - must have minimum value MIN and maximum MAX. Unsigned types should - use a zero MIN of the proper type. - - These macros are tuned for constant MIN and MAX. For commutative - operations such as A + B, they are also tuned for constant B. */ - -/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. */ -#define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ - ((b) < 0 \ - ? (a) < (min) - (b) \ - : (max) - (b) < (a)) - -/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. */ -#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ - ((b) < 0 \ - ? (max) + (b) < (a) \ - : (a) < (min) + (b)) - -/* Return 1 if - A would overflow in [MIN,MAX] arithmetic. - See above for restrictions. */ -#define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ - ((min) < 0 \ - ? (a) < - (max) \ - : 0 < (a)) - -/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. Avoid && and || as they tickle - bugs in Sun C 5.11 2010/08/13 and other compilers; see - . */ -#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ - ((b) < 0 \ - ? ((a) < 0 \ - ? (a) < (max) / (b) \ - : (b) == -1 \ - ? 0 \ - : (min) / (b) < (a)) \ - : (b) == 0 \ - ? 0 \ - : ((a) < 0 \ - ? (a) < (min) / (b) \ - : (max) / (b) < (a))) - -/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. Do not check for division by zero. */ -#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ - ((min) < 0 && (b) == -1 && (a) < - (max)) - -/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. Do not check for division by zero. - Mathematically, % should never overflow, but on x86-like hosts - INT_MIN % -1 traps, and the C standard permits this, so treat this - as an overflow too. */ -#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ - INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) - -/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. - See above for restrictions. Here, MIN and MAX are for A only, and B need - not be of the same type as the other arguments. The C standard says that - behavior is undefined for shifts unless 0 <= B < wordwidth, and that when - A is negative then A << B has undefined behavior and A >> B has - implementation-defined behavior, but do not check these other - restrictions. */ -#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ - ((a) < 0 \ - ? (a) < (min) >> (b) \ - : (max) >> (b) < (a)) - -/* True if __builtin_add_overflow (A, B, P) works when P is non-null. */ -#define _GL_HAS_BUILTIN_OVERFLOW \ - (5 <= __GNUC__ || __has_builtin (__builtin_add_overflow)) - -/* True if __builtin_add_overflow_p (A, B, C) works. */ -#define _GL_HAS_BUILTIN_OVERFLOW_P \ - (7 <= __GNUC__ || __has_builtin (__builtin_add_overflow_p)) - -/* The _GL*_OVERFLOW macros have the same restrictions as the - *_RANGE_OVERFLOW macros, except that they do not assume that operands - (e.g., A and B) have the same type as MIN and MAX. Instead, they assume - that the result (e.g., A + B) has that type. */ -#if _GL_HAS_BUILTIN_OVERFLOW_P -# define _GL_ADD_OVERFLOW(a, b, min, max) \ - __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) -# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ - __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) -# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ - __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) -#else -# define _GL_ADD_OVERFLOW(a, b, min, max) \ - ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ - : (a) < 0 ? (b) <= (a) + (b) \ - : (b) < 0 ? (a) <= (a) + (b) \ - : (a) + (b) < (b)) -# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ - ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ - : (a) < 0 ? 1 \ - : (b) < 0 ? (a) - (b) <= (a) \ - : (a) < (b)) -# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ - (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ - || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) -#endif -#define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ - ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ - : (a) < 0 ? (b) <= (a) + (b) - 1 \ - : (b) < 0 && (a) + (b) <= (a)) -#define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ - ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ - : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ - : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) - -/* Return a nonzero value if A is a mathematical multiple of B, where - A is unsigned, B is negative, and MAX is the maximum value of A's - type. A's type must be the same as (A % B)'s type. Normally (A % - -B == 0) suffices, but things get tricky if -B would overflow. */ -#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ - (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ - ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ - ? (a) \ - : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ - : (a) % - (b)) \ - == 0) - -/* Check for integer overflow, and report low order bits of answer. - - The INT__OVERFLOW macros return 1 if the corresponding C operators - might not yield numerically correct answers due to arithmetic overflow. - The INT__WRAPV macros also store the low-order bits of the answer. - These macros work correctly on all known practical hosts, and do not rely - on undefined behavior due to signed arithmetic overflow. - - Example usage, assuming A and B are long int: - - if (INT_MULTIPLY_OVERFLOW (a, b)) - printf ("result would overflow\n"); - else - printf ("result is %ld (no overflow)\n", a * b); - - Example usage with WRAPV flavor: - - long int result; - bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); - printf ("result is %ld (%s)\n", result, - overflow ? "after overflow" : "no overflow"); - - Restrictions on these macros: - - These macros do not check for all possible numerical problems or - undefined or unspecified behavior: they do not check for division - by zero, for bad shift counts, or for shifting negative numbers. - - These macros may evaluate their arguments zero or multiple times, so the - arguments should not have side effects. - - The WRAPV macros are not constant expressions. They support only - +, binary -, and *. The result type must be signed. - - These macros are tuned for their last argument being a constant. - - Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, - A % B, and A << B would overflow, respectively. */ - -#define INT_ADD_OVERFLOW(a, b) \ - _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) -#define INT_SUBTRACT_OVERFLOW(a, b) \ - _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) -#if _GL_HAS_BUILTIN_OVERFLOW_P -# define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a) -#else -# define INT_NEGATE_OVERFLOW(a) \ - INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) -#endif -#define INT_MULTIPLY_OVERFLOW(a, b) \ - _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) -#define INT_DIVIDE_OVERFLOW(a, b) \ - _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) -#define INT_REMAINDER_OVERFLOW(a, b) \ - _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) -#define INT_LEFT_SHIFT_OVERFLOW(a, b) \ - INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ - _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) - -/* Return 1 if the expression A B would overflow, - where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, - assuming MIN and MAX are the minimum and maximum for the result type. - Arguments should be free of side effects. */ -#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ - op_result_overflow (a, b, \ - _GL_INT_MINIMUM (0 * (b) + (a)), \ - _GL_INT_MAXIMUM (0 * (b) + (a))) - -/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. - Return 1 if the result overflows. See above for restrictions. */ -#define INT_ADD_WRAPV(a, b, r) \ - _GL_INT_OP_WRAPV (a, b, r, +, __builtin_add_overflow, INT_ADD_OVERFLOW) -#define INT_SUBTRACT_WRAPV(a, b, r) \ - _GL_INT_OP_WRAPV (a, b, r, -, __builtin_sub_overflow, INT_SUBTRACT_OVERFLOW) -#define INT_MULTIPLY_WRAPV(a, b, r) \ - _GL_INT_OP_WRAPV (a, b, r, *, __builtin_mul_overflow, INT_MULTIPLY_OVERFLOW) - -/* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 - https://llvm.org/bugs/show_bug.cgi?id=25390 - For now, assume all versions of GCC-like compilers generate bogus - warnings for _Generic. This matters only for older compilers that - lack __builtin_add_overflow. */ -#if __GNUC__ -# define _GL__GENERIC_BOGUS 1 -#else -# define _GL__GENERIC_BOGUS 0 -#endif - -/* Store the low-order bits of A B into *R, where OP specifies - the operation. BUILTIN is the builtin operation, and OVERFLOW the - overflow predicate. Return 1 if the result overflows. See above - for restrictions. */ -#if _GL_HAS_BUILTIN_OVERFLOW -# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r) -#elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS -# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ - (_Generic \ - (*(r), \ - signed char: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \ - signed char, SCHAR_MIN, SCHAR_MAX), \ - short int: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \ - short int, SHRT_MIN, SHRT_MAX), \ - int: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ - int, INT_MIN, INT_MAX), \ - long int: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ - long int, LONG_MIN, LONG_MAX), \ - long long int: \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ - long long int, LLONG_MIN, LLONG_MAX))) -#else -# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ - (sizeof *(r) == sizeof (signed char) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned char, \ - signed char, SCHAR_MIN, SCHAR_MAX) \ - : sizeof *(r) == sizeof (short int) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned short int, \ - short int, SHRT_MIN, SHRT_MAX) \ - : sizeof *(r) == sizeof (int) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ - int, INT_MIN, INT_MAX) \ - : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) -# ifdef LLONG_MAX -# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ - (sizeof *(r) == sizeof (long int) \ - ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ - long int, LONG_MIN, LONG_MAX) \ - : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ - long long int, LLONG_MIN, LLONG_MAX)) -# else -# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ - _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ - long int, LONG_MIN, LONG_MAX) -# endif -#endif - -/* Store the low-order bits of A B into *R, where the operation - is given by OP. Use the unsigned type UT for calculation to avoid - overflow problems. *R's type is T, with extremal values TMIN and - TMAX. T must be a signed integer type. Return 1 if the result - overflows. */ -#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ - (sizeof ((a) op (b)) < sizeof (t) \ - ? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \ - : _GL_INT_OP_CALC1 (a, b, r, op, overflow, ut, t, tmin, tmax)) -#define _GL_INT_OP_CALC1(a, b, r, op, overflow, ut, t, tmin, tmax) \ - ((overflow (a, b) \ - || (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \ - || (tmax) < ((a) op (b))) \ - ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 1) \ - : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t, tmin, tmax), 0)) - -/* Return A B, where the operation is given by OP. Use the - unsigned type UT for calculation to avoid overflow problems. - Convert the result to type T without overflow by subtracting TMIN - from large values before converting, and adding it afterwards. - Compilers can optimize all the operations except OP. */ -#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t, tmin, tmax) \ - (((ut) (a) op (ut) (b)) <= (tmax) \ - ? (t) ((ut) (a) op (ut) (b)) \ - : ((t) (((ut) (a) op (ut) (b)) - (tmin)) + (tmin))) - -#endif /* _GL_INTPROPS_H */ diff --git a/src/gl/itold.c b/src/gl/itold.c deleted file mode 100644 index 5533392e53..0000000000 --- a/src/gl/itold.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Replacement for 'int' to 'long double' conversion routine. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2011. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -void -_Qp_itoq (long double *result, int a) -{ - /* Convert from 'int' to 'double', then from 'double' to 'long double'. */ - *result = (double) a; -} diff --git a/src/gl/limits.in.h b/src/gl/limits.in.h deleted file mode 100644 index a1eae02ada..0000000000 --- a/src/gl/limits.in.h +++ /dev/null @@ -1,63 +0,0 @@ -/* A GNU-like . - - Copyright 2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 3, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_LIMITS_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_LIMITS_H@ - -#ifndef _@GUARD_PREFIX@_LIMITS_H -#define _@GUARD_PREFIX@_LIMITS_H - -/* The number of usable bits in an unsigned or signed integer type - with minimum value MIN and maximum value MAX, as an int expression - suitable in #if. Cover all known practical hosts. This - implementation exploits the fact that MAX is 1 less than a power of - 2, and merely counts the number of 1 bits in MAX; "COBn" means - "count the number of 1 bits in the low-order n bits"). */ -#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) -#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) -#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) -#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) -#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) -#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) -#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) - -/* Macros specified by ISO/IEC TS 18661-1:2014. */ - -#if (! defined ULLONG_WIDTH \ - && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) -# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) -# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) -# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) -# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) -# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) -# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) -# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) -# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) -# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) -# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) -# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) -#endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ - -#endif /* _@GUARD_PREFIX@_LIMITS_H */ -#endif /* _@GUARD_PREFIX@_LIMITS_H */ diff --git a/src/gl/listen.c b/src/gl/listen.c deleted file mode 100644 index fd59f753eb..0000000000 --- a/src/gl/listen.c +++ /dev/null @@ -1,49 +0,0 @@ -/* listen.c --- wrappers for Windows listen function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#undef listen - -int -rpl_listen (int fd, int backlog) -{ - SOCKET sock = FD_TO_SOCKET (fd); - - if (sock == INVALID_SOCKET) - { - errno = EBADF; - return -1; - } - else - { - int r = listen (sock, backlog); - if (r < 0) - set_winsock_errno (); - - return r; - } -} diff --git a/src/gl/lseek.c b/src/gl/lseek.c deleted file mode 100644 index 2a95a07ea6..0000000000 --- a/src/gl/lseek.c +++ /dev/null @@ -1,67 +0,0 @@ -/* An lseek() function that detects pipes. - Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#include - -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -/* Windows platforms. */ -/* Get GetFileType. */ -# include -/* Get _get_osfhandle. */ -# include "msvc-nothrow.h" -#else -# include -#endif -#include - -#undef lseek - -off_t -rpl_lseek (int fd, off_t offset, int whence) -{ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - /* mingw lseek mistakenly succeeds on pipes, sockets, and terminals. */ - HANDLE h = (HANDLE) _get_osfhandle (fd); - if (h == INVALID_HANDLE_VALUE) - { - errno = EBADF; - return -1; - } - if (GetFileType (h) != FILE_TYPE_DISK) - { - errno = ESPIPE; - return -1; - } -#else - /* BeOS lseek mistakenly succeeds on pipes... */ - struct stat statbuf; - if (fstat (fd, &statbuf) < 0) - return -1; - if (!S_ISREG (statbuf.st_mode)) - { - errno = ESPIPE; - return -1; - } -#endif -#if _GL_WINDOWS_64_BIT_OFF_T - return _lseeki64 (fd, offset, whence); -#else - return lseek (fd, offset, whence); -#endif -} diff --git a/src/gl/m4/00gnulib.m4 b/src/gl/m4/00gnulib.m4 deleted file mode 100644 index bb37e32aa3..0000000000 --- a/src/gl/m4/00gnulib.m4 +++ /dev/null @@ -1,46 +0,0 @@ -# 00gnulib.m4 serial 3 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl This file must be named something that sorts before all other -dnl gnulib-provided .m4 files. It is needed until such time as we can -dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and -dnl m4_divert semantics. - -# Until autoconf 2.63, handling of the diversion stack required m4_init -# to be called first; but this does not happen with aclocal. Wrapping -# the entire execution in another layer of the diversion stack fixes this. -# Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4 -# for whether it was FIFO or LIFO; in order to properly balance with -# m4_init, we need to undo our push just before anything wrapped within -# the m4_init body. The way to ensure this is to wrap both sides of -# m4_init with a one-shot macro that does the pop at the right time. -m4_ifndef([_m4_divert_diversion], -[m4_divert_push([KILL]) -m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])]) -m4_define([m4_init], - [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])]) - - -# AC_DEFUN_ONCE([NAME], VALUE) -# ---------------------------- -# Define NAME to expand to VALUE on the first use (whether by direct -# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. -# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This -# definition is slower than the version in Autoconf 2.64, because it -# can only use interfaces that existed since 2.59; but it achieves the -# same effect. Quoting is necessary to avoid confusing Automake. -m4_version_prereq([2.63.263], [], -[m4_define([AC][_DEFUN_ONCE], - [AC][_DEFUN([$1], - [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], - [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl -[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) - -# gl_00GNULIB -# ----------- -# Witness macro that this file has been included. Needed to force -# Automake to include this file prior to all other gnulib .m4 files. -AC_DEFUN([gl_00GNULIB]) diff --git a/src/gl/m4/absolute-header.m4 b/src/gl/m4/absolute-header.m4 deleted file mode 100644 index 7ffc38d7a2..0000000000 --- a/src/gl/m4/absolute-header.m4 +++ /dev/null @@ -1,102 +0,0 @@ -# absolute-header.m4 serial 16 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Derek Price. - -# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) -# --------------------------------------- -# Find the absolute name of a header file, testing first if the header exists. -# If the header were sys/inttypes.h, this macro would define -# ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h -# in config.h -# (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). -# The three "///" are to pacify Sun C 5.8, which otherwise would say -# "warning: #include of /usr/include/... may be non-portable". -# Use '""', not '<>', so that the /// cannot be confused with a C99 comment. -# Note: This macro assumes that the header file is not empty after -# preprocessing, i.e. it does not only define preprocessor macros but also -# provides some type/enum definitions or function/variable declarations. -AC_DEFUN([gl_ABSOLUTE_HEADER], -[AC_REQUIRE([AC_CANONICAL_HOST]) -AC_LANG_PREPROC_REQUIRE()dnl -dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted -dnl until we can assume autoconf 2.64 or newer. -m4_foreach_w([gl_HEADER_NAME], [$1], - [AS_VAR_PUSHDEF([gl_absolute_header], - [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl - AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], - m4_defn([gl_absolute_header]), - [AS_VAR_PUSHDEF([ac_header_exists], - [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl - AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl - if test AS_VAR_GET(ac_header_exists) = yes; then - gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) - fi - AS_VAR_POPDEF([ac_header_exists])dnl - ])dnl - AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), - ["AS_VAR_GET(gl_absolute_header)"], - [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) - AS_VAR_POPDEF([gl_absolute_header])dnl -])dnl -])# gl_ABSOLUTE_HEADER - -# gl_ABSOLUTE_HEADER_ONE(HEADER) -# ------------------------------ -# Like gl_ABSOLUTE_HEADER, except that: -# - it assumes that the header exists, -# - it uses the current CPPFLAGS, -# - it does not cache the result, -# - it is silent. -AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], -[ - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) - dnl AIX "xlc -E" and "cc -E" omit #line directives for header files - dnl that contain only a #include of other header files and no - dnl non-comment tokens of their own. This leads to a failure to - dnl detect the absolute name of , , - dnl and others. The workaround is to force preservation of comments - dnl through option -C. This ensures all necessary #line directives - dnl are present. GCC supports option -C as well. - case "$host_os" in - aix*) gl_absname_cpp="$ac_cpp -C" ;; - *) gl_absname_cpp="$ac_cpp" ;; - esac -changequote(,) - case "$host_os" in - mingw*) - dnl For the sake of native Windows compilers (excluding gcc), - dnl treat backslash as a directory separator, like /. - dnl Actually, these compilers use a double-backslash as - dnl directory separator, inside the - dnl # line "filename" - dnl directives. - gl_dirsep_regex='[/\\]' - ;; - *) - gl_dirsep_regex='\/' - ;; - esac - dnl A sed expression that turns a string into a basic regular - dnl expression, for use within "/.../". - gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' - gl_header_literal_regex=`echo '$1' \ - | sed -e "$gl_make_literal_regex_sed"` - gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ - s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ - s|^/[^/]|//&| - p - q - }' -changequote([,]) - dnl eval is necessary to expand gl_absname_cpp. - dnl Ultrix and Pyramid sh refuse to redirect output of eval, - dnl so use subshell. - AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), -[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | - sed -n "$gl_absolute_header_sed"`]) -]) diff --git a/src/gl/m4/alloca.m4 b/src/gl/m4/alloca.m4 deleted file mode 100644 index 2382ff1eee..0000000000 --- a/src/gl/m4/alloca.m4 +++ /dev/null @@ -1,121 +0,0 @@ -# alloca.m4 serial 14 -dnl Copyright (C) 2002-2004, 2006-2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_ALLOCA], -[ - AC_REQUIRE([AC_FUNC_ALLOCA]) - if test $ac_cv_func_alloca_works = no; then - gl_PREREQ_ALLOCA - fi - - # Define an additional variable used in the Makefile substitution. - if test $ac_cv_working_alloca_h = yes; then - AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ - AC_EGREP_CPP([Need own alloca], [ -#if defined __GNUC__ || defined _AIX || defined _MSC_VER - Need own alloca -#endif - ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) - ]) - if test $gl_cv_rpl_alloca = yes; then - dnl OK, alloca can be implemented through a compiler built-in. - AC_DEFINE([HAVE_ALLOCA], [1], - [Define to 1 if you have 'alloca' after including , - a header that may be supplied by this distribution.]) - ALLOCA_H=alloca.h - else - dnl alloca exists as a library function, i.e. it is slow and probably - dnl a memory leak. Don't define HAVE_ALLOCA in this case. - ALLOCA_H= - fi - else - ALLOCA_H=alloca.h - fi - AC_SUBST([ALLOCA_H]) - AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"]) -]) - -# Prerequisites of lib/alloca.c. -# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. -AC_DEFUN([gl_PREREQ_ALLOCA], [:]) - -# This works around a bug in autoconf <= 2.68. -# See . - -m4_version_prereq([2.69], [] ,[ - -# This is taken from the following Autoconf patch: -# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497 - -# _AC_LIBOBJ_ALLOCA -# ----------------- -# Set up the LIBOBJ replacement of 'alloca'. Well, not exactly -# AC_LIBOBJ since we actually set the output variable 'ALLOCA'. -# Nevertheless, for Automake, AC_LIBSOURCES it. -m4_define([_AC_LIBOBJ_ALLOCA], -[# The SVR3 libPW and SVR4 libucb both contain incompatible functions -# that cause trouble. Some versions do not even contain alloca or -# contain a buggy version. If you still want to use their alloca, -# use ar to extract alloca.o from them instead of compiling alloca.c. -AC_LIBSOURCES(alloca.c) -AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl -AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.]) - -AC_CACHE_CHECK(whether 'alloca.c' needs Cray hooks, ac_cv_os_cray, -[AC_EGREP_CPP(webecray, -[#if defined CRAY && ! defined CRAY2 -webecray -#else -wenotbecray -#endif -], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) -if test $ac_cv_os_cray = yes; then - for ac_func in _getb67 GETB67 getb67; do - AC_CHECK_FUNC($ac_func, - [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, - [Define to one of '_getb67', 'GETB67', - 'getb67' for Cray-2 and Cray-YMP - systems. This function is required for - 'alloca.c' support on those systems.]) - break]) - done -fi - -AC_CACHE_CHECK([stack direction for C alloca], - [ac_cv_c_stack_direction], -[AC_RUN_IFELSE([AC_LANG_SOURCE( -[AC_INCLUDES_DEFAULT -int -find_stack_direction (int *addr, int depth) -{ - int dir, dummy = 0; - if (! addr) - addr = &dummy; - *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; - dir = depth ? find_stack_direction (addr, depth - 1) : 0; - return dir + dummy; -} - -int -main (int argc, char **argv) -{ - return find_stack_direction (0, argc + !argv + 20) < 0; -}])], - [ac_cv_c_stack_direction=1], - [ac_cv_c_stack_direction=-1], - [ac_cv_c_stack_direction=0])]) -AH_VERBATIM([STACK_DIRECTION], -[/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at runtime. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -@%:@undef STACK_DIRECTION])dnl -AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) -])# _AC_LIBOBJ_ALLOCA -]) diff --git a/src/gl/m4/arpa_inet_h.m4 b/src/gl/m4/arpa_inet_h.m4 deleted file mode 100644 index 5387f28409..0000000000 --- a/src/gl/m4/arpa_inet_h.m4 +++ /dev/null @@ -1,57 +0,0 @@ -# arpa_inet_h.m4 serial 13 -dnl Copyright (C) 2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Written by Simon Josefsson and Bruno Haible - -AC_DEFUN([gl_HEADER_ARPA_INET], -[ - dnl Use AC_REQUIRE here, so that the default behavior below is expanded - dnl once only, before all statements that occur in other macros. - AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) - - AC_CHECK_HEADERS_ONCE([arpa/inet.h]) - if test $ac_cv_header_arpa_inet_h = yes; then - HAVE_ARPA_INET_H=1 - else - HAVE_ARPA_INET_H=0 - fi - AC_SUBST([HAVE_ARPA_INET_H]) - dnl is always overridden, because of GNULIB_POSIXCHECK. - gl_CHECK_NEXT_HEADERS([arpa/inet.h]) - - AC_REQUIRE([gl_FEATURES_H]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[ -/* On some systems, this header is not self-consistent. */ -#if !(defined __GLIBC__ || defined __UCLIBC__) -# include -#endif -#ifdef __TANDEM -# include -#endif -#include - ]], [inet_ntop inet_pton]) -]) - -AC_DEFUN([gl_ARPA_INET_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) -]) - -AC_DEFUN([gl_ARPA_INET_H_DEFAULTS], -[ - GNULIB_INET_NTOP=0; AC_SUBST([GNULIB_INET_NTOP]) - GNULIB_INET_PTON=0; AC_SUBST([GNULIB_INET_PTON]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_DECL_INET_NTOP=1; AC_SUBST([HAVE_DECL_INET_NTOP]) - HAVE_DECL_INET_PTON=1; AC_SUBST([HAVE_DECL_INET_PTON]) - REPLACE_INET_NTOP=0; AC_SUBST([REPLACE_INET_NTOP]) - REPLACE_INET_PTON=0; AC_SUBST([REPLACE_INET_PTON]) -]) diff --git a/src/gl/m4/bison.m4 b/src/gl/m4/bison.m4 deleted file mode 100644 index 556730cf67..0000000000 --- a/src/gl/m4/bison.m4 +++ /dev/null @@ -1,24 +0,0 @@ -# serial 7 - -# Copyright (C) 2002, 2005, 2009-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_BISON], -[ - # parse-datetime.y works with bison only. - : ${YACC='bison -y'} -dnl -dnl Declaring YACC & YFLAGS precious will not be necessary after GNULIB -dnl requires an Autoconf greater than 2.59c, but it will probably still be -dnl useful to override the description of YACC in the --help output, re -dnl parse-datetime.y assuming 'bison -y'. - AC_ARG_VAR([YACC], -[The "Yet Another C Compiler" implementation to use. Defaults to 'bison -y'. -Values other than 'bison -y' will most likely break on most systems.])dnl - AC_ARG_VAR([YFLAGS], -[YFLAGS contains the list arguments that will be passed by default to Bison. -This script will default YFLAGS to the empty string to avoid a default value of -'-d' given by some make applications.])dnl -]) diff --git a/src/gl/m4/clock_time.m4 b/src/gl/m4/clock_time.m4 deleted file mode 100644 index bb20344e8f..0000000000 --- a/src/gl/m4/clock_time.m4 +++ /dev/null @@ -1,31 +0,0 @@ -# clock_time.m4 serial 10 -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Check for clock_gettime and clock_settime, and set LIB_CLOCK_GETTIME. -# For a program named, say foo, you should add a line like the following -# in the corresponding Makefile.am file: -# foo_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) - -AC_DEFUN([gl_CLOCK_TIME], -[ - dnl Persuade glibc and Solaris to declare these functions. - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function. - # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. - - # Save and restore LIBS so e.g., -lrt, isn't added to it. Otherwise, *all* - # programs in the package would end up linked with that potentially-shared - # library, inducing unnecessary run-time overhead. - LIB_CLOCK_GETTIME= - AC_SUBST([LIB_CLOCK_GETTIME]) - gl_saved_libs=$LIBS - AC_SEARCH_LIBS([clock_gettime], [rt posix4], - [test "$ac_cv_search_clock_gettime" = "none required" || - LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime]) - AC_CHECK_FUNCS([clock_gettime clock_settime]) - LIBS=$gl_saved_libs -]) diff --git a/src/gl/m4/close.m4 b/src/gl/m4/close.m4 deleted file mode 100644 index 310f076bed..0000000000 --- a/src/gl/m4/close.m4 +++ /dev/null @@ -1,33 +0,0 @@ -# close.m4 serial 8 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_CLOSE], -[ - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - AC_REQUIRE([gl_MSVC_INVAL]) - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - REPLACE_CLOSE=1 - fi - m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [ - gl_PREREQ_SYS_H_WINSOCK2 - if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then - dnl Even if the 'socket' module is not used here, another part of the - dnl application may use it and pass file descriptors that refer to - dnl sockets to the close() function. So enable the support for sockets. - REPLACE_CLOSE=1 - fi - ]) - dnl Replace close() for supporting the gnulib-defined fchdir() function, - dnl to keep fchdir's bookkeeping up-to-date. - m4_ifdef([gl_FUNC_FCHDIR], [ - if test $REPLACE_CLOSE = 0; then - gl_TEST_FCHDIR - if test $HAVE_FCHDIR = 0; then - REPLACE_CLOSE=1 - fi - fi - ]) -]) diff --git a/src/gl/m4/dirname.m4 b/src/gl/m4/dirname.m4 deleted file mode 100644 index 6f8bec32c4..0000000000 --- a/src/gl/m4/dirname.m4 +++ /dev/null @@ -1,19 +0,0 @@ -#serial 10 -*- autoconf -*- -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_DIRNAME], -[ - AC_REQUIRE([gl_DIRNAME_LGPL]) -]) - -AC_DEFUN([gl_DIRNAME_LGPL], -[ - dnl Prerequisites of lib/dirname.h. - AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) - - dnl No prerequisites of lib/basename-lgpl.c, lib/dirname-lgpl.c, - dnl lib/stripslash.c. -]) diff --git a/src/gl/m4/double-slash-root.m4 b/src/gl/m4/double-slash-root.m4 deleted file mode 100644 index dfd3921d1e..0000000000 --- a/src/gl/m4/double-slash-root.m4 +++ /dev/null @@ -1,38 +0,0 @@ -# double-slash-root.m4 serial 4 -*- Autoconf -*- -dnl Copyright (C) 2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_DOUBLE_SLASH_ROOT], -[ - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root], - [ if test x"$cross_compiling" = xyes ; then - # When cross-compiling, there is no way to tell whether // is special - # short of a list of hosts. However, the only known hosts to date - # that have a distinct // are Apollo DomainOS (too old to port to), - # Cygwin, and z/OS. If anyone knows of another system for which // has - # special semantics and is distinct from /, please report it to - # . - case $host in - *-cygwin | i370-ibm-openedition) - gl_cv_double_slash_root=yes ;; - *) - # Be optimistic and assume that / and // are the same when we - # don't know. - gl_cv_double_slash_root='unknown, assuming no' ;; - esac - else - set x `ls -di / // 2>/dev/null` - if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then - gl_cv_double_slash_root=no - else - gl_cv_double_slash_root=yes - fi - fi]) - if test "$gl_cv_double_slash_root" = yes; then - AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1], - [Define to 1 if // is a file system root distinct from /.]) - fi -]) diff --git a/src/gl/m4/dup2.m4 b/src/gl/m4/dup2.m4 deleted file mode 100644 index 5b68312b1e..0000000000 --- a/src/gl/m4/dup2.m4 +++ /dev/null @@ -1,117 +0,0 @@ -#serial 25 -dnl Copyright (C) 2002, 2005, 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_DUP2], -[ - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - AC_REQUIRE([AC_CANONICAL_HOST]) - m4_ifdef([gl_FUNC_DUP2_OBSOLETE], [ - AC_CHECK_FUNCS_ONCE([dup2]) - if test $ac_cv_func_dup2 = no; then - HAVE_DUP2=0 - fi - ], [ - AC_DEFINE([HAVE_DUP2], [1], [Define to 1 if you have the 'dup2' function.]) - ]) - if test $HAVE_DUP2 = 1; then - AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works], - [AC_RUN_IFELSE([ - AC_LANG_PROGRAM( - [[#include - #include - #include - #include - #include - #ifndef RLIM_SAVED_CUR - # define RLIM_SAVED_CUR RLIM_INFINITY - #endif - #ifndef RLIM_SAVED_MAX - # define RLIM_SAVED_MAX RLIM_INFINITY - #endif - ]], - [[int result = 0; - int bad_fd = INT_MAX; - struct rlimit rlim; - if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 - && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX - && rlim.rlim_cur != RLIM_INFINITY - && rlim.rlim_cur != RLIM_SAVED_MAX - && rlim.rlim_cur != RLIM_SAVED_CUR) - bad_fd = rlim.rlim_cur; - #ifdef FD_CLOEXEC - if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) - result |= 1; - #endif - if (dup2 (1, 1) != 1) - result |= 2; - #ifdef FD_CLOEXEC - if (fcntl (1, F_GETFD) != FD_CLOEXEC) - result |= 4; - #endif - close (0); - if (dup2 (0, 0) != -1) - result |= 8; - /* Many gnulib modules require POSIX conformance of EBADF. */ - if (dup2 (2, bad_fd) == -1 && errno != EBADF) - result |= 16; - /* Flush out some cygwin core dumps. */ - if (dup2 (2, -1) != -1 || errno != EBADF) - result |= 32; - dup2 (2, 255); - dup2 (2, 256); - /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ - { - int fd = open (".", O_RDONLY); - if (fd == -1) - result |= 64; - else if (dup2 (fd, fd + 1) == -1) - result |= 128; - - close (fd); - } - return result;]]) - ], - [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no], - [case "$host_os" in - mingw*) # on this platform, dup2 always returns 0 for success - gl_cv_func_dup2_works="guessing no" ;; - cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 - gl_cv_func_dup2_works="guessing no" ;; - aix* | freebsd*) - # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, - # not EBADF. - gl_cv_func_dup2_works="guessing no" ;; - haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. - gl_cv_func_dup2_works="guessing no" ;; - *-android*) # implemented using dup3(), which fails if oldfd == newfd - gl_cv_func_dup2_works="guessing no" ;; - os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. - gl_cv_func_dup2_works="guessing no" ;; - *) gl_cv_func_dup2_works="guessing yes" ;; - esac]) - ]) - case "$gl_cv_func_dup2_works" in - *yes) ;; - *) - REPLACE_DUP2=1 - AC_CHECK_FUNCS([setdtablesize]) - ;; - esac - fi - dnl Replace dup2() for supporting the gnulib-defined fchdir() function, - dnl to keep fchdir's bookkeeping up-to-date. - m4_ifdef([gl_FUNC_FCHDIR], [ - gl_TEST_FCHDIR - if test $HAVE_FCHDIR = 0; then - if test $HAVE_DUP2 = 1; then - REPLACE_DUP2=1 - fi - fi - ]) -]) - -# Prerequisites of lib/dup2.c. -AC_DEFUN([gl_PREREQ_DUP2], []) diff --git a/src/gl/m4/eealloc.m4 b/src/gl/m4/eealloc.m4 deleted file mode 100644 index 63d74defec..0000000000 --- a/src/gl/m4/eealloc.m4 +++ /dev/null @@ -1,31 +0,0 @@ -# eealloc.m4 serial 3 -dnl Copyright (C) 2003, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_EEALLOC], -[ - AC_REQUIRE([gl_EEMALLOC]) - AC_REQUIRE([gl_EEREALLOC]) -]) - -AC_DEFUN([gl_EEMALLOC], -[ - _AC_FUNC_MALLOC_IF( - [gl_cv_func_malloc_0_nonnull=1], - [gl_cv_func_malloc_0_nonnull=0]) - AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull], - [If malloc(0) is != NULL, define this to 1. Otherwise define this - to 0.]) -]) - -AC_DEFUN([gl_EEREALLOC], -[ - _AC_FUNC_REALLOC_IF( - [gl_cv_func_realloc_0_nonnull=1], - [gl_cv_func_realloc_0_nonnull=0]) - AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull], - [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this - to 0.]) -]) diff --git a/src/gl/m4/environ.m4 b/src/gl/m4/environ.m4 deleted file mode 100644 index 9a0ea7e214..0000000000 --- a/src/gl/m4/environ.m4 +++ /dev/null @@ -1,47 +0,0 @@ -# environ.m4 serial 6 -dnl Copyright (C) 2001-2004, 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN_ONCE([gl_ENVIRON], -[ - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - dnl Persuade glibc to declare environ. - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - AC_CHECK_HEADERS_ONCE([unistd.h]) - gt_CHECK_VAR_DECL( - [#if HAVE_UNISTD_H - #include - #endif - /* mingw, BeOS, Haiku declare environ in , not in . */ - #include - ], - [environ]) - if test $gt_cv_var_environ_declaration != yes; then - HAVE_DECL_ENVIRON=0 - fi -]) - -# Check if a variable is properly declared. -# gt_CHECK_VAR_DECL(includes,variable) -AC_DEFUN([gt_CHECK_VAR_DECL], -[ - define([gt_cv_var], [gt_cv_var_]$2[_declaration]) - AC_MSG_CHECKING([if $2 is properly declared]) - AC_CACHE_VAL([gt_cv_var], [ - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[$1 - extern struct { int foo; } $2;]], - [[$2.foo = 1;]])], - [gt_cv_var=no], - [gt_cv_var=yes])]) - AC_MSG_RESULT([$gt_cv_var]) - if test $gt_cv_var = yes; then - AC_DEFINE([HAVE_]m4_translit($2, [a-z], [A-Z])[_DECL], 1, - [Define if you have the declaration of $2.]) - fi - undefine([gt_cv_var]) -]) diff --git a/src/gl/m4/errno_h.m4 b/src/gl/m4/errno_h.m4 deleted file mode 100644 index b111fce053..0000000000 --- a/src/gl/m4/errno_h.m4 +++ /dev/null @@ -1,137 +0,0 @@ -# errno_h.m4 serial 12 -dnl Copyright (C) 2004, 2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ - AC_EGREP_CPP([booboo],[ -#include -#if !defined ETXTBSY -booboo -#endif -#if !defined ENOMSG -booboo -#endif -#if !defined EIDRM -booboo -#endif -#if !defined ENOLINK -booboo -#endif -#if !defined EPROTO -booboo -#endif -#if !defined EMULTIHOP -booboo -#endif -#if !defined EBADMSG -booboo -#endif -#if !defined EOVERFLOW -booboo -#endif -#if !defined ENOTSUP -booboo -#endif -#if !defined ENETRESET -booboo -#endif -#if !defined ECONNABORTED -booboo -#endif -#if !defined ESTALE -booboo -#endif -#if !defined EDQUOT -booboo -#endif -#if !defined ECANCELED -booboo -#endif -#if !defined EOWNERDEAD -booboo -#endif -#if !defined ENOTRECOVERABLE -booboo -#endif -#if !defined EILSEQ -booboo -#endif - ], - [gl_cv_header_errno_h_complete=no], - [gl_cv_header_errno_h_complete=yes]) - ]) - if test $gl_cv_header_errno_h_complete = yes; then - ERRNO_H='' - else - gl_NEXT_HEADERS([errno.h]) - ERRNO_H='errno.h' - fi - AC_SUBST([ERRNO_H]) - AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"]) - gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) - gl_REPLACE_ERRNO_VALUE([ENOLINK]) - gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) -]) - -# Assuming $1 = EOVERFLOW. -# The EOVERFLOW errno value ought to be defined in , according to -# POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and -# some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. -# Check for the value of EOVERFLOW. -# Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. -AC_DEFUN([gl_REPLACE_ERRNO_VALUE], -[ - if test -n "$ERRNO_H"; then - AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ - AC_EGREP_CPP([yes],[ -#include -#ifdef ]$1[ -yes -#endif - ], - [gl_cv_header_errno_h_]$1[=yes], - [gl_cv_header_errno_h_]$1[=no]) - if test $gl_cv_header_errno_h_]$1[ = no; then - AC_EGREP_CPP([yes],[ -#define _XOPEN_SOURCE_EXTENDED 1 -#include -#ifdef ]$1[ -yes -#endif - ], [gl_cv_header_errno_h_]$1[=hidden]) - if test $gl_cv_header_errno_h_]$1[ = hidden; then - dnl The macro exists but is hidden. - dnl Define it to the same value. - AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ -#define _XOPEN_SOURCE_EXTENDED 1 -#include -/* The following two lines are a workaround against an autoconf-2.52 bug. */ -#include -#include -]) - fi - fi - ]) - case $gl_cv_header_errno_h_]$1[ in - yes | no) - ]$1[_HIDDEN=0; ]$1[_VALUE= - ;; - *) - ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" - ;; - esac - AC_SUBST($1[_HIDDEN]) - AC_SUBST($1[_VALUE]) - fi -]) - -dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. -dnl Remove this when we can assume autoconf >= 2.61. -m4_ifdef([AC_COMPUTE_INT], [], [ - AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) -]) diff --git a/src/gl/m4/error.m4 b/src/gl/m4/error.m4 deleted file mode 100644 index f772bcf580..0000000000 --- a/src/gl/m4/error.m4 +++ /dev/null @@ -1,27 +0,0 @@ -#serial 14 - -# Copyright (C) 1996-1998, 2001-2004, 2009-2016 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_ERROR], -[ - dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer - dnl maintained in Autoconf and because it invokes AC_LIBOBJ. - AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line], - [AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[error_at_line (0, 0, "", 0, "an error occurred");]])], - [ac_cv_lib_error_at_line=yes], - [ac_cv_lib_error_at_line=no])]) -]) - -# Prerequisites of lib/error.c. -AC_DEFUN([gl_PREREQ_ERROR], -[ - AC_REQUIRE([AC_FUNC_STRERROR_R]) - : -]) diff --git a/src/gl/m4/exponentd.m4 b/src/gl/m4/exponentd.m4 deleted file mode 100644 index 7869a7d6cb..0000000000 --- a/src/gl/m4/exponentd.m4 +++ /dev/null @@ -1,116 +0,0 @@ -# exponentd.m4 serial 3 -dnl Copyright (C) 2007-2008, 2010-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. -AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION], -[ - AC_CACHE_CHECK([where to find the exponent in a 'double'], - [gl_cv_cc_double_expbit0], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#include -#define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -typedef union { double value; unsigned int word[NWORDS]; } memory_double; -static unsigned int ored_words[NWORDS]; -static unsigned int anded_words[NWORDS]; -static void add_to_ored_words (double x) -{ - memory_double m; - size_t i; - /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ - memset (&m, 0, sizeof (memory_double)); - m.value = x; - for (i = 0; i < NWORDS; i++) - { - ored_words[i] |= m.word[i]; - anded_words[i] &= m.word[i]; - } -} -int main () -{ - size_t j; - FILE *fp = fopen ("conftest.out", "w"); - if (fp == NULL) - return 1; - for (j = 0; j < NWORDS; j++) - anded_words[j] = ~ (unsigned int) 0; - add_to_ored_words (0.25); - add_to_ored_words (0.5); - add_to_ored_words (1.0); - add_to_ored_words (2.0); - add_to_ored_words (4.0); - /* Remove bits that are common (e.g. if representation of the first mantissa - bit is explicit). */ - for (j = 0; j < NWORDS; j++) - ored_words[j] &= ~anded_words[j]; - /* Now find the nonzero word. */ - for (j = 0; j < NWORDS; j++) - if (ored_words[j] != 0) - break; - if (j < NWORDS) - { - size_t i; - for (i = j + 1; i < NWORDS; i++) - if (ored_words[i] != 0) - { - fprintf (fp, "unknown"); - return (fclose (fp) != 0); - } - for (i = 0; ; i++) - if ((ored_words[j] >> i) & 1) - { - fprintf (fp, "word %d bit %d", (int) j, (int) i); - return (fclose (fp) != 0); - } - } - fprintf (fp, "unknown"); - return (fclose (fp) != 0); -} - ]])], - [gl_cv_cc_double_expbit0=`cat conftest.out`], - [gl_cv_cc_double_expbit0="unknown"], - [ - dnl On ARM, there are two 'double' floating-point formats, used by - dnl different sets of instructions: The older FPA instructions assume - dnl that they are stored in big-endian word order, while the words - dnl (like integer types) are stored in little-endian byte order. - dnl The newer VFP instructions assume little-endian order - dnl consistently. - AC_EGREP_CPP([mixed_endianness], [ -#if defined arm || defined __arm || defined __arm__ - mixed_endianness -#endif - ], - [gl_cv_cc_double_expbit0="unknown"], - [ - pushdef([AC_MSG_CHECKING],[:])dnl - pushdef([AC_MSG_RESULT],[:])dnl - pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl - AC_C_BIGENDIAN( - [gl_cv_cc_double_expbit0="word 0 bit 20"], - [gl_cv_cc_double_expbit0="word 1 bit 20"], - [gl_cv_cc_double_expbit0="unknown"]) - popdef([AC_MSG_RESULT_UNQUOTED])dnl - popdef([AC_MSG_RESULT])dnl - popdef([AC_MSG_CHECKING])dnl - ]) - ]) - rm -f conftest.out - ]) - case "$gl_cv_cc_double_expbit0" in - word*bit*) - word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` - bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` - AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], - [Define as the word index where to find the exponent of 'double'.]) - AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], - [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) - ;; - esac -]) diff --git a/src/gl/m4/extensions.m4 b/src/gl/m4/extensions.m4 deleted file mode 100644 index e114a6f729..0000000000 --- a/src/gl/m4/extensions.m4 +++ /dev/null @@ -1,173 +0,0 @@ -# serial 15 -*- Autoconf -*- -# Enable extensions on systems that normally disable them. - -# Copyright (C) 2003, 2006-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git -# Autoconf. Perhaps we can remove this once we can assume Autoconf -# 2.70 or later everywhere, but since Autoconf mutates rapidly -# enough in this area it's likely we'll need to redefine -# AC_USE_SYSTEM_EXTENSIONS for quite some time. - -# If autoconf reports a warning -# warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS -# or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS -# the fix is -# 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked -# but always AC_REQUIREd, -# 2) to ensure that for each occurrence of -# AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) -# or -# AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) -# the corresponding gnulib module description has 'extensions' among -# its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS -# invocation occurs in gl_EARLY, not in gl_INIT. - -# AC_USE_SYSTEM_EXTENSIONS -# ------------------------ -# Enable extensions on systems that normally disable them, -# typically due to standards-conformance issues. -# -# Remember that #undef in AH_VERBATIM gets replaced with #define by -# AC_DEFINE. The goal here is to define all known feature-enabling -# macros, then, if reports of conflicts are made, disable macros that -# cause problems on some platforms (such as __EXTENSIONS__). -AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], -[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl -AC_BEFORE([$0], [AC_RUN_IFELSE])dnl - - AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) - if test "$MINIX" = yes; then - AC_DEFINE([_POSIX_SOURCE], [1], - [Define to 1 if you need to in order for 'stat' and other - things to work.]) - AC_DEFINE([_POSIX_1_SOURCE], [2], - [Define to 2 if the system does not provide POSIX.1 features - except with this defined.]) - AC_DEFINE([_MINIX], [1], - [Define to 1 if on MINIX.]) - AC_DEFINE([_NETBSD_SOURCE], [1], - [Define to 1 to make NetBSD features available. MINIX 3 needs this.]) - fi - -dnl Use a different key than __EXTENSIONS__, as that name broke existing -dnl configure.ac when using autoheader 2.62. - AH_VERBATIM([USE_SYSTEM_EXTENSIONS], -[/* Enable extensions on AIX 3, Interix. */ -#ifndef _ALL_SOURCE -# undef _ALL_SOURCE -#endif -/* Enable general extensions on macOS. */ -#ifndef _DARWIN_C_SOURCE -# undef _DARWIN_C_SOURCE -#endif -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# undef _GNU_SOURCE -#endif -/* Enable threading extensions on Solaris. */ -#ifndef _POSIX_PTHREAD_SEMANTICS -# undef _POSIX_PTHREAD_SEMANTICS -#endif -/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ -#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ -# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ -#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ -# undef __STDC_WANT_IEC_60559_BFP_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ -#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ -# undef __STDC_WANT_IEC_60559_DFP_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ -#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ -# undef __STDC_WANT_IEC_60559_FUNCS_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ -#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ -# undef __STDC_WANT_IEC_60559_TYPES_EXT__ -#endif -/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ -#ifndef __STDC_WANT_LIB_EXT2__ -# undef __STDC_WANT_LIB_EXT2__ -#endif -/* Enable extensions specified by ISO/IEC 24747:2009. */ -#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ -# undef __STDC_WANT_MATH_SPEC_FUNCS__ -#endif -/* Enable extensions on HP NonStop. */ -#ifndef _TANDEM_SOURCE -# undef _TANDEM_SOURCE -#endif -/* Enable X/Open extensions if necessary. HP-UX 11.11 defines - mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of - whether compiling with -Ae or -D_HPUX_SOURCE=1. */ -#ifndef _XOPEN_SOURCE -# undef _XOPEN_SOURCE -#endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ -#endif -]) - AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], - [ac_cv_safe_to_define___extensions__], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ -# define __EXTENSIONS__ 1 - ]AC_INCLUDES_DEFAULT])], - [ac_cv_safe_to_define___extensions__=yes], - [ac_cv_safe_to_define___extensions__=no])]) - test $ac_cv_safe_to_define___extensions__ = yes && - AC_DEFINE([__EXTENSIONS__]) - AC_DEFINE([_ALL_SOURCE]) - AC_DEFINE([_DARWIN_C_SOURCE]) - AC_DEFINE([_GNU_SOURCE]) - AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) - AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) - AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) - AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) - AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) - AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) - AC_DEFINE([__STDC_WANT_LIB_EXT2__]) - AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) - AC_DEFINE([_TANDEM_SOURCE]) - AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], - [ac_cv_should_define__xopen_source], - [ac_cv_should_define__xopen_source=no - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ - #include - mbstate_t x;]])], - [], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ - #define _XOPEN_SOURCE 500 - #include - mbstate_t x;]])], - [ac_cv_should_define__xopen_source=yes])])]) - test $ac_cv_should_define__xopen_source = yes && - AC_DEFINE([_XOPEN_SOURCE], [500]) -])# AC_USE_SYSTEM_EXTENSIONS - -# gl_USE_SYSTEM_EXTENSIONS -# ------------------------ -# Enable extensions on systems that normally disable them, -# typically due to standards-conformance issues. -AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], -[ - dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. - dnl gnulib does not need it. But if it gets required by third-party macros - dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a - dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". - dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, - dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. - AC_REQUIRE([AC_GNU_SOURCE]) - - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) -]) diff --git a/src/gl/m4/extern-inline.m4 b/src/gl/m4/extern-inline.m4 deleted file mode 100644 index 1e578f3deb..0000000000 --- a/src/gl/m4/extern-inline.m4 +++ /dev/null @@ -1,102 +0,0 @@ -dnl 'extern inline' a la ISO C99. - -dnl Copyright 2012-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_EXTERN_INLINE], -[ - AH_VERBATIM([extern_inline], -[/* Please see the Gnulib manual for how to use these macros. - - Suppress extern inline with HP-UX cc, as it appears to be broken; see - . - - Suppress extern inline with Sun C in standards-conformance mode, as it - mishandles inline functions that call each other. E.g., for 'inline void f - (void) { } inline void g (void) { f (); }', c99 incorrectly complains - 'reference to static identifier "f" in extern inline function'. - This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. - - Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) - on configurations that mistakenly use 'static inline' to implement - functions or macros in standard C headers like . For example, - if isdigit is mistakenly implemented via a static inline function, - a program containing an extern inline function that calls isdigit - may not work since the C standard prohibits extern inline functions - from calling static functions. This bug is known to occur on: - - OS X 10.8 and earlier; see: - http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html - - DragonFly; see - http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log - - FreeBSD; see: - http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html - - OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and - for clang but remains for g++; see . - Assume DragonFly and FreeBSD will be similar. */ -#if (((defined __APPLE__ && defined __MACH__) \ - || defined __DragonFly__ || defined __FreeBSD__) \ - && (defined __header_inline \ - ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ - && ! defined __clang__) \ - : ((! defined _DONT_USE_CTYPE_INLINE_ \ - && (defined __GNUC__ || defined __cplusplus)) \ - || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ - && defined __GNUC__ && ! defined __cplusplus)))) -# define _GL_EXTERN_INLINE_STDHEADER_BUG -#endif -#if ((__GNUC__ \ - ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ - : (199901L <= __STDC_VERSION__ \ - && !defined __HP_cc \ - && !defined __PGI \ - && !(defined __SUNPRO_C && __STDC__))) \ - && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) -# define _GL_INLINE inline -# define _GL_EXTERN_INLINE extern inline -# define _GL_EXTERN_INLINE_IN_USE -#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ - && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) -# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ - /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ -# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) -# else -# define _GL_INLINE extern inline -# endif -# define _GL_EXTERN_INLINE extern -# define _GL_EXTERN_INLINE_IN_USE -#else -# define _GL_INLINE static _GL_UNUSED -# define _GL_EXTERN_INLINE static _GL_UNUSED -#endif - -/* In GCC 4.6 (inclusive) to 5.1 (exclusive), - suppress bogus "no previous prototype for 'FOO'" - and "no previous declaration for 'FOO'" diagnostics, - when FOO is an inline function in the header; see - and - . */ -#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ -# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ -# define _GL_INLINE_HEADER_CONST_PRAGMA -# else -# define _GL_INLINE_HEADER_CONST_PRAGMA \ - _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") -# endif -# define _GL_INLINE_HEADER_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ - _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ - _GL_INLINE_HEADER_CONST_PRAGMA -# define _GL_INLINE_HEADER_END \ - _Pragma ("GCC diagnostic pop") -#else -# define _GL_INLINE_HEADER_BEGIN -# define _GL_INLINE_HEADER_END -#endif]) -]) diff --git a/src/gl/m4/flexmember.m4 b/src/gl/m4/flexmember.m4 deleted file mode 100644 index 155ae9b812..0000000000 --- a/src/gl/m4/flexmember.m4 +++ /dev/null @@ -1,43 +0,0 @@ -# serial 4 -# Check for flexible array member support. - -# Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# Written by Paul Eggert. - -AC_DEFUN([AC_C_FLEXIBLE_ARRAY_MEMBER], -[ - AC_CACHE_CHECK([for flexible array member], - ac_cv_c_flexmember, - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include - #include - struct s { int n; double d[]; };]], - [[int m = getchar (); - size_t nbytes = offsetof (struct s, d) + m * sizeof (double); - nbytes += sizeof (struct s) - 1; - nbytes -= nbytes % sizeof (struct s); - struct s *p = malloc (nbytes); - p->d[0] = 0.0; - return p->d != (double *) NULL;]])], - [ac_cv_c_flexmember=yes], - [ac_cv_c_flexmember=no])]) - if test $ac_cv_c_flexmember = yes; then - AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [], - [Define to nothing if C supports flexible array members, and to - 1 if it does not. That way, with a declaration like 'struct s - { int n; double d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack - can be used with pre-C99 compilers. - When computing the size of such an object, don't use 'sizeof (struct s)' - as it overestimates the size. Use 'offsetof (struct s, d)' instead. - Don't use 'offsetof (struct s, d@<:@0@:>@)', as this doesn't work with - MSVC and with C++ compilers.]) - else - AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1]) - fi -]) diff --git a/src/gl/m4/float_h.m4 b/src/gl/m4/float_h.m4 deleted file mode 100644 index e2887eb5c6..0000000000 --- a/src/gl/m4/float_h.m4 +++ /dev/null @@ -1,98 +0,0 @@ -# float_h.m4 serial 9 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FLOAT_H], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) - FLOAT_H= - REPLACE_FLOAT_LDBL=0 - case "$host_os" in - aix* | beos* | openbsd* | mirbsd* | irix*) - FLOAT_H=float.h - ;; - freebsd*) - case "$host_cpu" in -changequote(,)dnl - i[34567]86 ) -changequote([,])dnl - FLOAT_H=float.h - ;; - x86_64 ) - # On x86_64 systems, the C compiler may still be generating - # 32-bit code. - AC_EGREP_CPP([yes], - [#if defined __LP64__ || defined __x86_64__ || defined __amd64__ - yes - #endif], - [], - [FLOAT_H=float.h]) - ;; - esac - ;; - linux*) - case "$host_cpu" in - powerpc*) - FLOAT_H=float.h - ;; - esac - ;; - esac - case "$host_os" in - aix* | freebsd* | linux*) - if test -n "$FLOAT_H"; then - REPLACE_FLOAT_LDBL=1 - fi - ;; - esac - - dnl Test against glibc-2.7 Linux/SPARC64 bug. - REPLACE_ITOLD=0 - AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works], - [gl_cv_func_itold_works], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -int i = -1; -volatile long double ld; -int main () -{ - ld += i * 1.0L; - if (ld > 0) - return 1; - return 0; -}]])], - [gl_cv_func_itold_works=yes], - [gl_cv_func_itold_works=no], - [case "$host" in - sparc*-*-linux*) - AC_EGREP_CPP([yes], - [#if defined __LP64__ || defined __arch64__ - yes - #endif], - [gl_cv_func_itold_works="guessing no"], - [gl_cv_func_itold_works="guessing yes"]) - ;; - *) gl_cv_func_itold_works="guessing yes" ;; - esac - ]) - ]) - case "$gl_cv_func_itold_works" in - *no) - REPLACE_ITOLD=1 - dnl We add the workaround to but also to , - dnl to increase the chances that the fix function gets pulled in. - FLOAT_H=float.h - ;; - esac - - if test -n "$FLOAT_H"; then - gl_NEXT_HEADERS([float.h]) - fi - AC_SUBST([FLOAT_H]) - AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"]) - AC_SUBST([REPLACE_ITOLD]) -]) diff --git a/src/gl/m4/fseek.m4 b/src/gl/m4/fseek.m4 deleted file mode 100644 index 5ec8d004d3..0000000000 --- a/src/gl/m4/fseek.m4 +++ /dev/null @@ -1,15 +0,0 @@ -# fseek.m4 serial 4 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FSEEK], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_REQUIRE([gl_FUNC_FSEEKO]) - dnl When fseeko needs fixes, fseek needs them too. - if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then - REPLACE_FSEEK=1 - fi -]) diff --git a/src/gl/m4/fseeko.m4 b/src/gl/m4/fseeko.m4 deleted file mode 100644 index 6c7f551bda..0000000000 --- a/src/gl/m4/fseeko.m4 +++ /dev/null @@ -1,73 +0,0 @@ -# fseeko.m4 serial 17 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FSEEKO], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) - AC_REQUIRE([gl_SYS_TYPES_H]) - AC_REQUIRE([AC_PROG_CC]) - - dnl Persuade glibc to declare fseeko(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_CACHE_CHECK([for fseeko], [gl_cv_func_fseeko], - [ - AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include -]], [fseeko (stdin, 0, 0);])], - [gl_cv_func_fseeko=yes], [gl_cv_func_fseeko=no]) - ]) - - AC_CHECK_DECLS_ONCE([fseeko]) - if test $ac_cv_have_decl_fseeko = no; then - HAVE_DECL_FSEEKO=0 - fi - - if test $gl_cv_func_fseeko = no; then - HAVE_FSEEKO=0 - else - if test $WINDOWS_64_BIT_OFF_T = 1; then - REPLACE_FSEEKO=1 - fi - if test $gl_cv_var_stdin_large_offset = no; then - REPLACE_FSEEKO=1 - fi - m4_ifdef([gl_FUNC_FFLUSH_STDIN], [ - gl_FUNC_FFLUSH_STDIN - if test $gl_cv_func_fflush_stdin != yes; then - REPLACE_FSEEKO=1 - fi - ]) - fi -]) - -dnl Code shared by fseeko and ftello. Determine if large files are supported, -dnl but stdin does not start as a large file by default. -AC_DEFUN([gl_STDIN_LARGE_OFFSET], - [ - AC_CACHE_CHECK([whether stdin defaults to large file offsets], - [gl_cv_var_stdin_large_offset], - [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], -[[#if defined __SL64 && defined __SCLE /* cygwin */ - /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making - fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and - it is easier to do a version check than building a runtime test. */ -# include -# if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25) - choke me -# endif -#endif]])], - [gl_cv_var_stdin_large_offset=yes], - [gl_cv_var_stdin_large_offset=no])]) -]) - -# Prerequisites of lib/fseeko.c. -AC_DEFUN([gl_PREREQ_FSEEKO], -[ - dnl Native Windows has the function _fseeki64. mingw hides it, but mingw64 - dnl makes it usable again. - AC_CHECK_FUNCS([_fseeki64]) -]) diff --git a/src/gl/m4/fstat.m4 b/src/gl/m4/fstat.m4 deleted file mode 100644 index 29f9b81654..0000000000 --- a/src/gl/m4/fstat.m4 +++ /dev/null @@ -1,36 +0,0 @@ -# fstat.m4 serial 4 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FSTAT], -[ - AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) - - AC_REQUIRE([gl_MSVC_INVAL]) - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - REPLACE_FSTAT=1 - fi - - AC_REQUIRE([gl_HEADER_SYS_STAT_H]) - if test $WINDOWS_64_BIT_ST_SIZE = 1; then - REPLACE_FSTAT=1 - fi - - dnl Replace fstat() for supporting the gnulib-defined open() on directories. - m4_ifdef([gl_FUNC_FCHDIR], [ - gl_TEST_FCHDIR - if test $HAVE_FCHDIR = 0; then - case "$gl_cv_func_open_directory_works" in - *yes) ;; - *) - REPLACE_FSTAT=1 - ;; - esac - fi - ]) -]) - -# Prerequisites of lib/fstat.c. -AC_DEFUN([gl_PREREQ_FSTAT], [:]) diff --git a/src/gl/m4/ftell.m4 b/src/gl/m4/ftell.m4 deleted file mode 100644 index 6701f0a76c..0000000000 --- a/src/gl/m4/ftell.m4 +++ /dev/null @@ -1,15 +0,0 @@ -# ftell.m4 serial 3 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FTELL], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_REQUIRE([gl_FUNC_FTELLO]) - dnl When ftello needs fixes, ftell needs them too. - if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then - REPLACE_FTELL=1 - fi -]) diff --git a/src/gl/m4/ftello.m4 b/src/gl/m4/ftello.m4 deleted file mode 100644 index 3f4808bf37..0000000000 --- a/src/gl/m4/ftello.m4 +++ /dev/null @@ -1,140 +0,0 @@ -# ftello.m4 serial 11 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_FTELLO], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) - AC_REQUIRE([gl_SYS_TYPES_H]) - - dnl Persuade glibc to declare ftello(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_CHECK_DECLS_ONCE([ftello]) - if test $ac_cv_have_decl_ftello = no; then - HAVE_DECL_FTELLO=0 - fi - - AC_CACHE_CHECK([for ftello], [gl_cv_func_ftello], - [ - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[ftello (stdin);]])], - [gl_cv_func_ftello=yes], - [gl_cv_func_ftello=no]) - ]) - if test $gl_cv_func_ftello = no; then - HAVE_FTELLO=0 - else - if test $WINDOWS_64_BIT_OFF_T = 1; then - REPLACE_FTELLO=1 - fi - if test $gl_cv_var_stdin_large_offset = no; then - REPLACE_FTELLO=1 - fi - if test $REPLACE_FTELLO = 0; then - dnl Detect bug on Solaris. - dnl ftell and ftello produce incorrect results after putc that followed a - dnl getc call that reached EOF on Solaris. This is because the _IOREAD - dnl flag does not get cleared in this case, even though _IOWRT gets set, - dnl and ftell and ftello look whether the _IOREAD flag is set. - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_CACHE_CHECK([whether ftello works], - [gl_cv_func_ftello_works], - [ - dnl Initial guess, used when cross-compiling or when /dev/tty cannot - dnl be opened. -changequote(,)dnl - case "$host_os" in - # Guess no on Solaris. - solaris*) gl_cv_func_ftello_works="guessing no" ;; - # Guess yes otherwise. - *) gl_cv_func_ftello_works="guessing yes" ;; - esac -changequote([,])dnl - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#define TESTFILE "conftest.tmp" -int -main (void) -{ - FILE *fp; - - /* Create a file with some contents. */ - fp = fopen (TESTFILE, "w"); - if (fp == NULL) - return 70; - if (fwrite ("foogarsh", 1, 8, fp) < 8) - return 71; - if (fclose (fp)) - return 72; - - /* The file's contents is now "foogarsh". */ - - /* Try writing after reading to EOF. */ - fp = fopen (TESTFILE, "r+"); - if (fp == NULL) - return 73; - if (fseek (fp, -1, SEEK_END)) - return 74; - if (!(getc (fp) == 'h')) - return 1; - if (!(getc (fp) == EOF)) - return 2; - if (!(ftell (fp) == 8)) - return 3; - if (!(ftell (fp) == 8)) - return 4; - if (!(putc ('!', fp) == '!')) - return 5; - if (!(ftell (fp) == 9)) - return 6; - if (!(fclose (fp) == 0)) - return 7; - fp = fopen (TESTFILE, "r"); - if (fp == NULL) - return 75; - { - char buf[10]; - if (!(fread (buf, 1, 10, fp) == 9)) - return 10; - if (!(memcmp (buf, "foogarsh!", 9) == 0)) - return 11; - } - if (!(fclose (fp) == 0)) - return 12; - - /* The file's contents is now "foogarsh!". */ - - return 0; -}]])], - [gl_cv_func_ftello_works=yes], - [gl_cv_func_ftello_works=no], [:]) - ]) - case "$gl_cv_func_ftello_works" in - *yes) ;; - *) - REPLACE_FTELLO=1 - AC_DEFINE([FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE], [1], - [Define to 1 if the system's ftello function has the Solaris bug.]) - ;; - esac - fi - fi -]) - -# Prerequisites of lib/ftello.c. -AC_DEFUN([gl_PREREQ_FTELLO], -[ - dnl Native Windows has the function _ftelli64. mingw hides it, but mingw64 - dnl makes it usable again. - AC_CHECK_FUNCS([_ftelli64]) -]) diff --git a/src/gl/m4/getaddrinfo.m4 b/src/gl/m4/getaddrinfo.m4 deleted file mode 100644 index 4a92d0865f..0000000000 --- a/src/gl/m4/getaddrinfo.m4 +++ /dev/null @@ -1,209 +0,0 @@ -# getaddrinfo.m4 serial 31 -dnl Copyright (C) 2004-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_GETADDRINFO], -[ - AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H - AC_REQUIRE([gl_HEADER_NETDB])dnl for HAVE_NETDB_H - AC_MSG_CHECKING([how to do getaddrinfo, freeaddrinfo and getnameinfo]) - GETADDRINFO_LIB= - gai_saved_LIBS="$LIBS" - - dnl Where is getaddrinfo()? - dnl - On Solaris, it is in libsocket. - dnl - On Haiku, it is in libnetwork. - dnl - On BeOS, it is in libnet. - dnl - On native Windows, it is in ws2_32.dll. - dnl - Otherwise it is in libc. - AC_SEARCH_LIBS([getaddrinfo], [socket network net], - [if test "$ac_cv_search_getaddrinfo" != "none required"; then - GETADDRINFO_LIB="$ac_cv_search_getaddrinfo" - fi]) - LIBS="$gai_saved_LIBS $GETADDRINFO_LIB" - - HAVE_GETADDRINFO=1 - AC_CACHE_CHECK([for getaddrinfo], [gl_cv_func_getaddrinfo], [ - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ -#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETDB_H -#include -#endif -#include -]], [[getaddrinfo("", "", NULL, NULL);]])], - [gl_cv_func_getaddrinfo=yes], - [gl_cv_func_getaddrinfo=no])]) - if test $gl_cv_func_getaddrinfo = no; then - AC_CACHE_CHECK([for getaddrinfo in ws2tcpip.h and -lws2_32], - gl_cv_w32_getaddrinfo, [ - gl_cv_w32_getaddrinfo=no - am_save_LIBS="$LIBS" - LIBS="$LIBS -lws2_32" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ -#ifdef HAVE_WS2TCPIP_H -#include -#endif -#include -]], [[getaddrinfo(NULL, NULL, NULL, NULL);]])], [gl_cv_w32_getaddrinfo=yes]) - LIBS="$am_save_LIBS" - ]) - if test "$gl_cv_w32_getaddrinfo" = "yes"; then - GETADDRINFO_LIB="-lws2_32" - LIBS="$gai_saved_LIBS $GETADDRINFO_LIB" - else - HAVE_GETADDRINFO=0 - fi - fi - - # We can't use AC_REPLACE_FUNCS here because gai_strerror may be an - # inline function declared in ws2tcpip.h, so we need to get that - # header included somehow. - AC_CHECK_DECLS([gai_strerror], [], [], [[ -#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETDB_H -#include -#endif -#ifdef HAVE_WS2TCPIP_H -#include -#endif -#include -]]) - if test $ac_cv_have_decl_gai_strerror = yes; then - AC_CHECK_DECLS([gai_strerrorA], [], [], [[ -#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETDB_H -#include -#endif -#ifdef HAVE_WS2TCPIP_H -#include -#endif -#include -]]) - dnl check for correct signature - AC_CACHE_CHECK([for gai_strerror with POSIX signature], - [gl_cv_func_gai_strerror_posix_signature], [ - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETDB_H -#include -#endif -#ifdef HAVE_WS2TCPIP_H -#include -#endif -#include -extern -#ifdef __cplusplus -"C" -#endif -const char *gai_strerror(int);]])], - [gl_cv_func_gai_strerror_posix_signature=yes], - [gl_cv_func_gai_strerror_posix_signature=no])]) - if test $gl_cv_func_gai_strerror_posix_signature = no; then - REPLACE_GAI_STRERROR=1 - fi - fi - - LIBS="$gai_saved_LIBS" - - gl_PREREQ_GETADDRINFO - - AC_SUBST([GETADDRINFO_LIB]) -]) - -# Prerequisites of lib/netdb.in.h and lib/getaddrinfo.c. -AC_DEFUN([gl_PREREQ_GETADDRINFO], [ - AC_REQUIRE([gl_NETDB_H_DEFAULTS]) - AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H - AC_REQUIRE([gl_HOSTENT]) dnl for HOSTENT_LIB - AC_REQUIRE([gl_SERVENT]) dnl for SERVENT_LIB - AC_REQUIRE([gl_FUNC_INET_NTOP]) dnl for INET_NTOP_LIB - AC_REQUIRE([AC_C_RESTRICT]) - AC_REQUIRE([gl_SOCKET_FAMILIES]) - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - dnl Including sys/socket.h is wrong for Windows, but Windows does not - dnl have sa_len so the result is correct anyway. - AC_CHECK_MEMBERS([struct sockaddr.sa_len], , , [ -#include -#include -]) - - AC_CHECK_HEADERS_ONCE([netinet/in.h]) - - AC_CHECK_DECLS([getaddrinfo, freeaddrinfo, getnameinfo],,,[[ - /* sys/types.h is not needed according to POSIX, but the - sys/socket.h in i386-unknown-freebsd4.10 and - powerpc-apple-darwin5.5 required it. */ -#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETDB_H -#include -#endif -#ifdef HAVE_WS2TCPIP_H -#include -#endif -]]) - if test $ac_cv_have_decl_getaddrinfo = no; then - HAVE_DECL_GETADDRINFO=0 - fi - if test $ac_cv_have_decl_freeaddrinfo = no; then - HAVE_DECL_FREEADDRINFO=0 - fi - if test $ac_cv_have_decl_gai_strerror = no; then - HAVE_DECL_GAI_STRERROR=0 - fi - if test $ac_cv_have_decl_getnameinfo = no; then - HAVE_DECL_GETNAMEINFO=0 - fi - - AC_CHECK_TYPES([struct addrinfo],,,[ -#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETDB_H -#include -#endif -#ifdef HAVE_WS2TCPIP_H -#include -#endif -]) - if test $ac_cv_type_struct_addrinfo = no; then - HAVE_STRUCT_ADDRINFO=0 - fi - - dnl Append $HOSTENT_LIB to GETADDRINFO_LIB, avoiding gratuitous duplicates. - case " $GETADDRINFO_LIB " in - *" $HOSTENT_LIB "*) ;; - *) GETADDRINFO_LIB="$GETADDRINFO_LIB $HOSTENT_LIB" ;; - esac - - dnl Append $SERVENT_LIB to GETADDRINFO_LIB, avoiding gratuitous duplicates. - case " $GETADDRINFO_LIB " in - *" $SERVENT_LIB "*) ;; - *) GETADDRINFO_LIB="$GETADDRINFO_LIB $SERVENT_LIB" ;; - esac - - dnl Append $INET_NTOP_LIB to GETADDRINFO_LIB, avoiding gratuitous duplicates. - case " $GETADDRINFO_LIB " in - *" $INET_NTOP_LIB "*) ;; - *) GETADDRINFO_LIB="$GETADDRINFO_LIB $INET_NTOP_LIB" ;; - esac -]) diff --git a/src/gl/m4/getdelim.m4 b/src/gl/m4/getdelim.m4 deleted file mode 100644 index a1a7dcc526..0000000000 --- a/src/gl/m4/getdelim.m4 +++ /dev/null @@ -1,90 +0,0 @@ -# getdelim.m4 serial 11 - -dnl Copyright (C) 2005-2007, 2009-2016 Free Software Foundation, Inc. -dnl -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_PREREQ([2.59]) - -AC_DEFUN([gl_FUNC_GETDELIM], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - - dnl Persuade glibc to declare getdelim(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_CHECK_DECLS_ONCE([getdelim]) - - AC_CHECK_FUNCS_ONCE([getdelim]) - if test $ac_cv_func_getdelim = yes; then - HAVE_GETDELIM=1 - dnl Found it in some library. Verify that it works. - AC_CACHE_CHECK([for working getdelim function], [gl_cv_func_working_getdelim], - [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data - AC_RUN_IFELSE([AC_LANG_SOURCE([[ -# include -# include -# include - int main () - { - FILE *in = fopen ("./conftest.data", "r"); - if (!in) - return 1; - { - /* Test result for a NULL buffer and a zero size. - Based on a test program from Karl Heuer. */ - char *line = NULL; - size_t siz = 0; - int len = getdelim (&line, &siz, '\n', in); - if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) - return 2; - } - { - /* Test result for a NULL buffer and a non-zero size. - This crashes on FreeBSD 8.0. */ - char *line = NULL; - size_t siz = (size_t)(~0) / 4; - if (getdelim (&line, &siz, '\n', in) == -1) - return 3; - free (line); - } - fclose (in); - return 0; - } - ]])], [gl_cv_func_working_getdelim=yes] dnl The library version works. - , [gl_cv_func_working_getdelim=no] dnl The library version does NOT work. - , dnl We're cross compiling. Assume it works on glibc2 systems. - [AC_EGREP_CPP([Lucky GNU user], - [ -#include -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ >= 2) && !defined __UCLIBC__ - Lucky GNU user - #endif -#endif - ], - [gl_cv_func_working_getdelim="guessing yes"], - [gl_cv_func_working_getdelim="guessing no"])] - )]) - case "$gl_cv_func_working_getdelim" in - *no) - REPLACE_GETDELIM=1 - ;; - esac - else - HAVE_GETDELIM=0 - fi - - if test $ac_cv_have_decl_getdelim = no; then - HAVE_DECL_GETDELIM=0 - fi -]) - -# Prerequisites of lib/getdelim.c. -AC_DEFUN([gl_PREREQ_GETDELIM], -[ - AC_CHECK_FUNCS([flockfile funlockfile]) - AC_CHECK_DECLS([getc_unlocked]) -]) diff --git a/src/gl/m4/getline.m4 b/src/gl/m4/getline.m4 deleted file mode 100644 index f44751cd4b..0000000000 --- a/src/gl/m4/getline.m4 +++ /dev/null @@ -1,99 +0,0 @@ -# getline.m4 serial 27 - -dnl Copyright (C) 1998-2003, 2005-2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_PREREQ([2.59]) - -dnl See if there's a working, system-supplied version of the getline function. -dnl We can't just do AC_REPLACE_FUNCS([getline]) because some systems -dnl have a function by that name in -linet that doesn't have anything -dnl to do with the function we need. -AC_DEFUN([gl_FUNC_GETLINE], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - - dnl Persuade glibc to declare getline(). - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - - AC_CHECK_DECLS_ONCE([getline]) - - gl_getline_needs_run_time_check=no - AC_CHECK_FUNC([getline], - [dnl Found it in some library. Verify that it works. - gl_getline_needs_run_time_check=yes], - [am_cv_func_working_getline=no]) - if test $gl_getline_needs_run_time_check = yes; then - AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline], - [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data - AC_RUN_IFELSE([AC_LANG_SOURCE([[ -# include -# include -# include - int main () - { - FILE *in = fopen ("./conftest.data", "r"); - if (!in) - return 1; - { - /* Test result for a NULL buffer and a zero size. - Based on a test program from Karl Heuer. */ - char *line = NULL; - size_t siz = 0; - int len = getline (&line, &siz, in); - if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) - return 2; - free (line); - } - { - /* Test result for a NULL buffer and a non-zero size. - This crashes on FreeBSD 8.0. */ - char *line = NULL; - size_t siz = (size_t)(~0) / 4; - if (getline (&line, &siz, in) == -1) - return 3; - free (line); - } - fclose (in); - return 0; - } - ]])], [am_cv_func_working_getline=yes] dnl The library version works. - , [am_cv_func_working_getline=no] dnl The library version does NOT work. - , dnl We're cross compiling. Assume it works on glibc2 systems. - [AC_EGREP_CPP([Lucky GNU user], - [ -#include -#ifdef __GNU_LIBRARY__ - #if (__GLIBC__ >= 2) && !defined __UCLIBC__ - Lucky GNU user - #endif -#endif - ], - [am_cv_func_working_getline="guessing yes"], - [am_cv_func_working_getline="guessing no"])] - )]) - fi - - if test $ac_cv_have_decl_getline = no; then - HAVE_DECL_GETLINE=0 - fi - - case "$am_cv_func_working_getline" in - *no) - dnl Set REPLACE_GETLINE always: Even if we have not found the broken - dnl getline function among $LIBS, it may exist in libinet and the - dnl executable may be linked with -linet. - REPLACE_GETLINE=1 - ;; - esac -]) - -# Prerequisites of lib/getline.c. -AC_DEFUN([gl_PREREQ_GETLINE], -[ - : -]) diff --git a/src/gl/m4/getpass.m4 b/src/gl/m4/getpass.m4 deleted file mode 100644 index f0e330cb4e..0000000000 --- a/src/gl/m4/getpass.m4 +++ /dev/null @@ -1,58 +0,0 @@ -# getpass.m4 serial 14 -dnl Copyright (C) 2002-2003, 2005-2006, 2009-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Provide a getpass() function if the system doesn't have it. -AC_DEFUN([gl_FUNC_GETPASS], -[ - dnl Persuade Solaris and to declare getpass(). - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - AC_CHECK_FUNCS([getpass]) - AC_CHECK_DECLS_ONCE([getpass]) - if test $ac_cv_func_getpass = yes; then - HAVE_GETPASS=1 - else - HAVE_GETPASS=0 - fi -]) - -# Provide the GNU getpass() implementation. It supports passwords of -# arbitrary length (not just 8 bytes as on HP-UX). -AC_DEFUN([gl_FUNC_GETPASS_GNU], -[ - dnl Persuade Solaris and to declare getpass(). - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - AC_CHECK_DECLS_ONCE([getpass]) - dnl TODO: Detect when GNU getpass() is already found in glibc. - REPLACE_GETPASS=1 - - if test $REPLACE_GETPASS = 1; then - dnl We must choose a different name for our function, since on ELF systems - dnl an unusable getpass() in libc.so would override our getpass() if it is - dnl compiled into a shared library. - AC_DEFINE([getpass], [gnu_getpass], - [Define to a replacement function name for getpass().]) - fi -]) - -# Prerequisites of lib/getpass.c. -AC_DEFUN([gl_PREREQ_GETPASS], [ - AC_CHECK_HEADERS_ONCE([stdio_ext.h termios.h]) - AC_CHECK_FUNCS_ONCE([__fsetlocking tcgetattr tcsetattr]) - AC_CHECK_DECLS([__fsetlocking],,, - [[#include - #if HAVE_STDIO_EXT_H - #include - #endif]]) - AC_CHECK_DECLS_ONCE([fflush_unlocked]) - AC_CHECK_DECLS_ONCE([flockfile]) - AC_CHECK_DECLS_ONCE([fputs_unlocked]) - AC_CHECK_DECLS_ONCE([funlockfile]) - AC_CHECK_DECLS_ONCE([putc_unlocked]) - : -]) diff --git a/src/gl/m4/getprogname.m4 b/src/gl/m4/getprogname.m4 deleted file mode 100644 index f027037fc6..0000000000 --- a/src/gl/m4/getprogname.m4 +++ /dev/null @@ -1,43 +0,0 @@ -# getprogname.m4 - check for getprogname or replacements for it - -# Copyright (C) 2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -AC_DEFUN([gl_FUNC_GETPROGNAME], -[ - AC_CHECK_FUNCS_ONCE([getprogname getexecname]) - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - ac_found=0 - AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [], - [#include ]) - AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [], - [#include ]) - AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include ]) - - # Incur the cost of this test only if none of the above worked. - if test $ac_found = 0; then - # On OpenBSD 5.1, using the global __progname variable appears to be - # the only way to implement getprogname. - AC_CACHE_CHECK([whether __progname is defined in default libraries], - [gl_cv_var___progname], - [ - gl_cv_var___progname= - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[extern char *__progname;]], - [[return *__progname;]] - )], - [gl_cv_var___progname=yes] - ) - ] - ) - if test "$gl_cv_var___progname" = yes; then - AC_DEFINE([HAVE_VAR___PROGNAME], 1, - [Define if you have a global __progname variable]) - fi - fi -]) diff --git a/src/gl/m4/gettime.m4 b/src/gl/m4/gettime.m4 deleted file mode 100644 index 9843ed4855..0000000000 --- a/src/gl/m4/gettime.m4 +++ /dev/null @@ -1,13 +0,0 @@ -# gettime.m4 serial 8 -dnl Copyright (C) 2002, 2004-2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_GETTIME], -[ - dnl Prerequisites of lib/gettime.c. - AC_REQUIRE([gl_CLOCK_TIME]) - AC_REQUIRE([gl_TIMESPEC]) - AC_CHECK_FUNCS_ONCE([gettimeofday nanotime]) -]) diff --git a/src/gl/m4/gettimeofday.m4 b/src/gl/m4/gettimeofday.m4 deleted file mode 100644 index 4ae5d63fe3..0000000000 --- a/src/gl/m4/gettimeofday.m4 +++ /dev/null @@ -1,138 +0,0 @@ -# serial 21 - -# Copyright (C) 2001-2003, 2005, 2007, 2009-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -dnl From Jim Meyering. - -AC_DEFUN([gl_FUNC_GETTIMEOFDAY], -[ - AC_REQUIRE([AC_C_RESTRICT]) - AC_REQUIRE([gl_HEADER_SYS_TIME_H]) - AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) - AC_CHECK_FUNCS_ONCE([gettimeofday]) - - gl_gettimeofday_timezone=void - if test $ac_cv_func_gettimeofday != yes; then - HAVE_GETTIMEOFDAY=0 - else - gl_FUNC_GETTIMEOFDAY_CLOBBER - AC_CACHE_CHECK([for gettimeofday with POSIX signature], - [gl_cv_func_gettimeofday_posix_signature], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - struct timeval c; - int gettimeofday (struct timeval *restrict, void *restrict); - ]], - [[/* glibc uses struct timezone * rather than the POSIX void * - if _GNU_SOURCE is defined. However, since the only portable - use of gettimeofday uses NULL as the second parameter, and - since the glibc definition is actually more typesafe, it is - not worth wrapping this to get a compliant signature. */ - int (*f) (struct timeval *restrict, void *restrict) - = gettimeofday; - int x = f (&c, 0); - return !(x | c.tv_sec | c.tv_usec); - ]])], - [gl_cv_func_gettimeofday_posix_signature=yes], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include -int gettimeofday (struct timeval *restrict, struct timezone *restrict); - ]])], - [gl_cv_func_gettimeofday_posix_signature=almost], - [gl_cv_func_gettimeofday_posix_signature=no])])]) - if test $gl_cv_func_gettimeofday_posix_signature = almost; then - gl_gettimeofday_timezone='struct timezone' - elif test $gl_cv_func_gettimeofday_posix_signature != yes; then - REPLACE_GETTIMEOFDAY=1 - fi - dnl If we override 'struct timeval', we also have to override gettimeofday. - if test $REPLACE_STRUCT_TIMEVAL = 1; then - REPLACE_GETTIMEOFDAY=1 - fi - m4_ifdef([gl_FUNC_TZSET_CLOBBER], [ - gl_FUNC_TZSET_CLOBBER - case "$gl_cv_func_tzset_clobber" in - *yes) - REPLACE_GETTIMEOFDAY=1 - gl_GETTIMEOFDAY_REPLACE_LOCALTIME - AC_DEFINE([tzset], [rpl_tzset], - [Define to rpl_tzset if the wrapper function should be used.]) - AC_DEFINE([TZSET_CLOBBERS_LOCALTIME], [1], - [Define if tzset clobbers localtime's static buffer.]) - ;; - esac - ]) - fi - AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone], - [Define this to 'void' or 'struct timezone' to match the system's - declaration of the second argument to gettimeofday.]) -]) - - -dnl See if gettimeofday clobbers the static buffer that localtime uses -dnl for its return value. The gettimeofday function from Mac OS X 10.0.4 -dnl (i.e., Darwin 1.3.7) has this problem. -dnl -dnl If it does, then arrange to use gettimeofday and localtime only via -dnl the wrapper functions that work around the problem. - -AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER], -[ - AC_REQUIRE([gl_HEADER_SYS_TIME_H]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - - AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer], - [gl_cv_func_gettimeofday_clobber], - [AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include - #include - #include - ]], - [[ - time_t t = 0; - struct tm *lt; - struct tm saved_lt; - struct timeval tv; - lt = localtime (&t); - saved_lt = *lt; - gettimeofday (&tv, NULL); - return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0; - ]])], - [gl_cv_func_gettimeofday_clobber=no], - [gl_cv_func_gettimeofday_clobber=yes], - [# When cross-compiling: - case "$host_os" in - # Guess all is fine on glibc systems. - *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; - # If we don't know, assume the worst. - *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; - esac - ])]) - - case "$gl_cv_func_gettimeofday_clobber" in - *yes) - REPLACE_GETTIMEOFDAY=1 - gl_GETTIMEOFDAY_REPLACE_LOCALTIME - AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1], - [Define if gettimeofday clobbers the localtime buffer.]) - ;; - esac -]) - -AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [ - REPLACE_GMTIME=1 - REPLACE_LOCALTIME=1 -]) - -# Prerequisites of lib/gettimeofday.c. -AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [ - AC_CHECK_HEADERS([sys/timeb.h]) - AC_CHECK_FUNCS([_ftime]) -]) diff --git a/src/gl/m4/gnulib-cache.m4 b/src/gl/m4/gnulib-cache.m4 deleted file mode 100644 index b460788f20..0000000000 --- a/src/gl/m4/gnulib-cache.m4 +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright (C) 2002-2016 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file. If not, see . -# -# As a special exception to the GNU General Public License, -# this file may be distributed as part of a program that -# contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. -# -# This file represents the specification of how gnulib-tool is used. -# It acts as a cache: It is written and read by gnulib-tool. -# In projects that use version control, this file is meant to be put under -# version control, like the configure.ac and various Makefile.am files. - - -# Specification in the form of a command-line invocation: -# gnulib-tool --import --local-dir=src/gl/override --lib=libgnu_gpl --source-base=src/gl --m4-base=src/gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=ggl --no-vc-files accept bind close connect getaddrinfo getpass gettext-h inet_ntop inet_pton listen minmax parse-datetime progname read-file recv recvfrom select send sendto servent setsockopt shutdown socket sockets socklen - -# Specification in the form of a few gnulib-tool.m4 macro invocations: -gl_LOCAL_DIR([src/gl/override]) -gl_MODULES([ - accept - bind - close - connect - getaddrinfo - getpass - gettext-h - inet_ntop - inet_pton - listen - minmax - parse-datetime - progname - read-file - recv - recvfrom - select - send - sendto - servent - setsockopt - shutdown - socket - sockets - socklen -]) -gl_AVOID([]) -gl_SOURCE_BASE([src/gl]) -gl_M4_BASE([src/gl/m4]) -gl_PO_BASE([]) -gl_DOC_BASE([doc]) -gl_TESTS_BASE([tests]) -gl_LIB([libgnu_gpl]) -gl_MAKEFILE_NAME([]) -gl_LIBTOOL -gl_MACRO_PREFIX([ggl]) -gl_PO_DOMAIN([]) -gl_WITNESS_C_MACRO([]) -gl_VC_FILES([false]) diff --git a/src/gl/m4/gnulib-common.m4 b/src/gl/m4/gnulib-common.m4 deleted file mode 100644 index f8454c8a01..0000000000 --- a/src/gl/m4/gnulib-common.m4 +++ /dev/null @@ -1,462 +0,0 @@ -# gnulib-common.m4 serial 36 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# gl_COMMON -# is expanded unconditionally through gnulib-tool magic. -AC_DEFUN([gl_COMMON], [ - dnl Use AC_REQUIRE here, so that the code is expanded once only. - AC_REQUIRE([gl_00GNULIB]) - AC_REQUIRE([gl_COMMON_BODY]) -]) -AC_DEFUN([gl_COMMON_BODY], [ - AH_VERBATIM([_Noreturn], -[/* The _Noreturn keyword of C11. */ -#if ! (defined _Noreturn \ - || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) -# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ - || 0x5110 <= __SUNPRO_C) -# define _Noreturn __attribute__ ((__noreturn__)) -# elif defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) -# else -# define _Noreturn -# endif -#endif -]) - AH_VERBATIM([isoc99_inline], -[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports - the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of - earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. - __APPLE__ && __MACH__ test for Mac OS X. - __APPLE_CC__ tests for the Apple compiler and its version. - __STDC_VERSION__ tests for the C99 mode. */ -#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ -# define __GNUC_STDC_INLINE__ 1 -#endif]) - AH_VERBATIM([unused_parameter], -[/* Define as a marker that can be attached to declarations that might not - be used. This helps to reduce warnings, such as from - GCC -Wunused-parameter. */ -#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_UNUSED __attribute__ ((__unused__)) -#else -# define _GL_UNUSED -#endif -/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name - is a misnomer outside of parameter lists. */ -#define _UNUSED_PARAMETER_ _GL_UNUSED - -/* gcc supports the "unused" attribute on possibly unused labels, and - g++ has since version 4.5. Note to support C++ as well as C, - _GL_UNUSED_LABEL should be used with a trailing ; */ -#if !defined __cplusplus || __GNUC__ > 4 \ - || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -# define _GL_UNUSED_LABEL _GL_UNUSED -#else -# define _GL_UNUSED_LABEL -#endif - -/* The __pure__ attribute was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ -#endif - -/* The __const__ attribute was added in gcc 2.95. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) -# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) -#else -# define _GL_ATTRIBUTE_CONST /* empty */ -#endif -]) - dnl Preparation for running test programs: - dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not - dnl to /dev/tty, so they can be redirected to log files. Such diagnostics - dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. - LIBC_FATAL_STDERR_=1 - export LIBC_FATAL_STDERR_ -]) - -# gl_MODULE_INDICATOR_CONDITION -# expands to a C preprocessor expression that evaluates to 1 or 0, depending -# whether a gnulib module that has been requested shall be considered present -# or not. -m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) - -# gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) -# sets the shell variable that indicates the presence of the given module to -# a C preprocessor expression that will evaluate to 1. -AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], -[ - gl_MODULE_INDICATOR_SET_VARIABLE_AUX( - [GNULIB_[]m4_translit([[$1]], - [abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], - [gl_MODULE_INDICATOR_CONDITION]) -]) - -# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) -# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. -# The shell variable's value is a C preprocessor expression that evaluates -# to 0 or 1. -AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], -[ - m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], - [ - dnl Simplify the expression VALUE || 1 to 1. - $1=1 - ], - [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], - [gl_MODULE_INDICATOR_CONDITION])]) -]) - -# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) -# modifies the shell variable to include the given condition. The shell -# variable's value is a C preprocessor expression that evaluates to 0 or 1. -AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], -[ - dnl Simplify the expression 1 || CONDITION to 1. - if test "$[]$1" != 1; then - dnl Simplify the expression 0 || CONDITION to CONDITION. - if test "$[]$1" = 0; then - $1=$2 - else - $1="($[]$1 || $2)" - fi - fi -]) - -# gl_MODULE_INDICATOR([modulename]) -# defines a C macro indicating the presence of the given module -# in a location where it can be used. -# | Value | Value | -# | in lib/ | in tests/ | -# --------------------------------------------+---------+-----------+ -# Module present among main modules: | 1 | 1 | -# --------------------------------------------+---------+-----------+ -# Module present among tests-related modules: | 0 | 1 | -# --------------------------------------------+---------+-----------+ -# Module not present at all: | 0 | 0 | -# --------------------------------------------+---------+-----------+ -AC_DEFUN([gl_MODULE_INDICATOR], -[ - AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], - [abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), - [gl_MODULE_INDICATOR_CONDITION], - [Define to a C preprocessor expression that evaluates to 1 or 0, - depending whether the gnulib module $1 shall be considered present.]) -]) - -# gl_MODULE_INDICATOR_FOR_TESTS([modulename]) -# defines a C macro indicating the presence of the given module -# in lib or tests. This is useful to determine whether the module -# should be tested. -# | Value | Value | -# | in lib/ | in tests/ | -# --------------------------------------------+---------+-----------+ -# Module present among main modules: | 1 | 1 | -# --------------------------------------------+---------+-----------+ -# Module present among tests-related modules: | 1 | 1 | -# --------------------------------------------+---------+-----------+ -# Module not present at all: | 0 | 0 | -# --------------------------------------------+---------+-----------+ -AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], -[ - AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], - [abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], - [Define to 1 when the gnulib module $1 should be tested.]) -]) - -# gl_ASSERT_NO_GNULIB_POSIXCHECK -# asserts that there will never be a need to #define GNULIB_POSIXCHECK. -# and thereby enables an optimization of configure and config.h. -# Used by Emacs. -AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], -[ - dnl Override gl_WARN_ON_USE_PREPARE. - dnl But hide this definition from 'aclocal'. - AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) -]) - -# gl_ASSERT_NO_GNULIB_TESTS -# asserts that there will be no gnulib tests in the scope of the configure.ac -# and thereby enables an optimization of config.h. -# Used by Emacs. -AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], -[ - dnl Override gl_MODULE_INDICATOR_FOR_TESTS. - AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) -]) - -# Test whether exists. -# Set HAVE_FEATURES_H. -AC_DEFUN([gl_FEATURES_H], -[ - AC_CHECK_HEADERS_ONCE([features.h]) - if test $ac_cv_header_features_h = yes; then - HAVE_FEATURES_H=1 - else - HAVE_FEATURES_H=0 - fi - AC_SUBST([HAVE_FEATURES_H]) -]) - -# m4_foreach_w -# is a backport of autoconf-2.59c's m4_foreach_w. -# Remove this macro when we can assume autoconf >= 2.60. -m4_ifndef([m4_foreach_w], - [m4_define([m4_foreach_w], - [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) - -# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) -# ---------------------------------------------------- -# Backport of autoconf-2.63b's macro. -# Remove this macro when we can assume autoconf >= 2.64. -m4_ifndef([AS_VAR_IF], -[m4_define([AS_VAR_IF], -[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])]) - -# gl_PROG_CC_C99 -# Modifies the value of the shell variable CC in an attempt to make $CC -# understand ISO C99 source code. -# This is like AC_PROG_CC_C99, except that -# - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60, -# - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC -# , -# but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 -# . -# Remaining problems: -# - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options -# to CC twice -# . -# - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard. -AC_DEFUN([gl_PROG_CC_C99], -[ - dnl Change that version number to the minimum Autoconf version that supports - dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. - m4_version_prereq([9.0], - [AC_REQUIRE([AC_PROG_CC_C99])], - [AC_REQUIRE([AC_PROG_CC_STDC])]) -]) - -# gl_PROG_AR_RANLIB -# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. -# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override -# the values. -AC_DEFUN([gl_PROG_AR_RANLIB], -[ - dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler - dnl as "cc", and GCC as "gcc". They have different object file formats and - dnl library formats. In particular, the GNU binutils programs ar and ranlib - dnl produce libraries that work only with gcc, not with cc. - AC_REQUIRE([AC_PROG_CC]) - AC_BEFORE([$0], [AM_PROG_AR]) - AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], - [ - AC_EGREP_CPP([Amsterdam], - [ -#ifdef __ACK__ -Amsterdam -#endif - ], - [gl_cv_c_amsterdam_compiler=yes], - [gl_cv_c_amsterdam_compiler=no]) - ]) - - dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not - dnl building with __ACK__. - if test $gl_cv_c_amsterdam_compiler = yes; then - if test -z "$AR"; then - AR='cc -c.a' - fi - if test -z "$ARFLAGS"; then - ARFLAGS='-o' - fi - else - dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST - dnl ARFLAGS variable (it is filed into Makefile.in directly by automake - dnl script on-demand, if not specified by ./configure of course). - dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above - dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block - dnl because AM_PROG_AR is written so it could re-set AR variable even for - dnl __ACK__. It may seem like its easier to avoid calling the macro here, - dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good - dnl default value and automake should usually know them). - m4_ifdef([AM_PROG_AR], [AM_PROG_AR], [:]) - fi - - dnl In case the code above has not helped with setting AR/ARFLAGS, use - dnl Automake-documented default values for AR and ARFLAGS, but prefer - dnl ${host}-ar over ar (useful for cross-compiling). - AC_CHECK_TOOL([AR], [ar], [ar]) - if test -z "$ARFLAGS"; then - ARFLAGS='cr' - fi - - AC_SUBST([AR]) - AC_SUBST([ARFLAGS]) - if test -z "$RANLIB"; then - if test $gl_cv_c_amsterdam_compiler = yes; then - RANLIB=':' - else - dnl Use the ranlib program if it is available. - AC_PROG_RANLIB - fi - fi - AC_SUBST([RANLIB]) -]) - -# AC_PROG_MKDIR_P -# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix -# for interoperability with automake-1.9.6 from autoconf-2.62. -# Remove this macro when we can assume autoconf >= 2.62 or -# autoconf >= 2.60 && automake >= 1.10. -# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness. -m4_ifndef([AC_AUTOCONF_VERSION],[ -m4_ifdef([AC_PROG_MKDIR_P], [ - dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed. - m4_define([AC_PROG_MKDIR_P], - m4_defn([AC_PROG_MKDIR_P])[ - AC_SUBST([MKDIR_P])])], [ - dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P. - AC_DEFUN_ONCE([AC_PROG_MKDIR_P], - [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake - MKDIR_P='$(mkdir_p)' - AC_SUBST([MKDIR_P])])]) -]) - -# AC_C_RESTRICT -# This definition is copied from post-2.69 Autoconf and overrides the -# AC_C_RESTRICT macro from autoconf 2.60..2.69. It can be removed -# once autoconf >= 2.70 can be assumed. It's painful to check version -# numbers, and in practice this macro is more up-to-date than Autoconf -# is, so override Autoconf unconditionally. -AC_DEFUN([AC_C_RESTRICT], -[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], - [ac_cv_c_restrict=no - # The order here caters to the fact that C++ does not require restrict. - for ac_kw in __restrict __restrict__ _Restrict restrict; do - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[typedef int *int_ptr; - int foo (int_ptr $ac_kw ip) { return ip[0]; } - int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ - int bar (int ip[$ac_kw]) { return ip[0]; } - ]], - [[int s[1]; - int *$ac_kw t = s; - t[0] = 0; - return foo (t) + bar (t); - ]])], - [ac_cv_c_restrict=$ac_kw]) - test "$ac_cv_c_restrict" != no && break - done - ]) - AH_VERBATIM([restrict], -[/* Define to the equivalent of the C99 'restrict' keyword, or to - nothing if this is not supported. Do not define if restrict is - supported directly. */ -#undef restrict -/* Work around a bug in Sun C++: it does not support _Restrict or - __restrict__, even though the corresponding Sun C compiler ends up with - "#define restrict _Restrict" or "#define restrict __restrict__" in the - previous line. Perhaps some future version of Sun C++ will work with - restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ -#if defined __SUNPRO_CC && !defined __RESTRICT -# define _Restrict -# define __restrict__ -#endif]) - case $ac_cv_c_restrict in - restrict) ;; - no) AC_DEFINE([restrict], []) ;; - *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; - esac -])# AC_C_RESTRICT - -# gl_BIGENDIAN -# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. -# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some -# macros invoke AC_C_BIGENDIAN with arguments. -AC_DEFUN([gl_BIGENDIAN], -[ - AC_C_BIGENDIAN -]) - -# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) -# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not -# output a spurious "(cached)" mark in the midst of other configure output. -# This macro should be used instead of AC_CACHE_VAL when it is not surrounded -# by an AC_MSG_CHECKING/AC_MSG_RESULT pair. -AC_DEFUN([gl_CACHE_VAL_SILENT], -[ - saved_as_echo_n="$as_echo_n" - as_echo_n=':' - AC_CACHE_VAL([$1], [$2]) - as_echo_n="$saved_as_echo_n" -]) - -# AS_VAR_COPY was added in autoconf 2.63b -m4_define_default([AS_VAR_COPY], -[AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])]) - -# AC_PROG_SED was added in autoconf 2.59b -m4_ifndef([AC_PROG_SED], -[AC_DEFUN([AC_PROG_SED], -[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED, - [dnl ac_script should not contain more than 99 commands (for HP-UX sed), - dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed. - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - AS_UNSET([ac_script]) - if test -z "$SED"; then - ac_path_SED_found=false - _AS_PATH_WALK([], [ - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - AS_EXECUTABLE_P(["$ac_path_SED"]) || continue - case `"$ac_path_SED" --version 2>&1` in - *GNU*) ac_cv_path_SED=$ac_path_SED ac_path_SED_found=:;; - *) - ac_count=0 - _AS_ECHO_N([0123456789]) >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >> conftest.nl - "$ac_path_SED" -f conftest.sed conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best so far, but keep looking for better - ac_cv_path_SED=$ac_path_SED - ac_path_SED_max=$ac_count - fi - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; - esac - $ac_path_SED_found && break 3 - done - done]) - if test -z "$ac_cv_path_SED"; then - AC_ERROR([no acceptable sed could be found in \$PATH]) - fi - else - ac_cv_path_SED=$SED - fi - SED="$ac_cv_path_SED" - AC_SUBST([SED])dnl - rm -f conftest.sed -])])]) diff --git a/src/gl/m4/gnulib-comp.m4 b/src/gl/m4/gnulib-comp.m4 deleted file mode 100644 index aad9f74f34..0000000000 --- a/src/gl/m4/gnulib-comp.m4 +++ /dev/null @@ -1,878 +0,0 @@ -# DO NOT EDIT! GENERATED AUTOMATICALLY! -# Copyright (C) 2002-2016 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file. If not, see . -# -# As a special exception to the GNU General Public License, -# this file may be distributed as part of a program that -# contains a configuration script generated by Autoconf, under -# the same distribution terms as the rest of that program. -# -# Generated by gnulib-tool. -# -# This file represents the compiled summary of the specification in -# gnulib-cache.m4. It lists the computed macro invocations that need -# to be invoked from configure.ac. -# In projects that use version control, this file can be treated like -# other built files. - - -# This macro should be invoked from ./configure.ac, in the section -# "Checks for programs", right after AC_PROG_CC, and certainly before -# any checks for libraries, header files, types and library functions. -AC_DEFUN([ggl_EARLY], -[ - m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace - m4_pattern_allow([^gl_ES$])dnl a valid locale name - m4_pattern_allow([^gl_LIBOBJS$])dnl a variable - m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable - - # Pre-early section. - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - AC_REQUIRE([gl_PROG_AR_RANLIB]) - - # Code from module absolute-header: - # Code from module accept: - # Code from module alloca: - # Code from module alloca-opt: - # Code from module arpa_inet: - # Code from module bind: - # Code from module c-ctype: - # Code from module clock-time: - # Code from module close: - # Code from module connect: - # Code from module dirname-lgpl: - # Code from module dosname: - # Code from module double-slash-root: - # Code from module dup2: - # Code from module environ: - # Code from module errno: - # Code from module error: - # Code from module exitfail: - # Code from module extensions: - # Code from module extern-inline: - # Code from module fd-hook: - # Code from module flexmember: - # Code from module float: - # Code from module fseek: - # Code from module fseeko: - AC_REQUIRE([AC_FUNC_FSEEKO]) - # Code from module fstat: - # Code from module ftell: - # Code from module ftello: - AC_REQUIRE([AC_FUNC_FSEEKO]) - # Code from module getaddrinfo: - # Code from module getdelim: - # Code from module getline: - # Code from module getpass: - # Code from module getpeername: - # Code from module getprogname: - # Code from module gettext-h: - # Code from module gettime: - # Code from module gettimeofday: - # Code from module hostent: - # Code from module include_next: - # Code from module inet_ntop: - # Code from module inet_pton: - # Code from module intprops: - # Code from module largefile: - AC_REQUIRE([AC_SYS_LARGEFILE]) - # Code from module limits-h: - # Code from module listen: - # Code from module lseek: - # Code from module malloc-posix: - # Code from module malloca: - # Code from module memchr: - # Code from module minmax: - # Code from module mktime: - # Code from module mktime-internal: - # Code from module msvc-inval: - # Code from module msvc-nothrow: - # Code from module multiarch: - # Code from module netdb: - # Code from module netinet_in: - # Code from module parse-datetime: - # Code from module progname: - # Code from module read-file: - # Code from module realloc-posix: - # Code from module recv: - # Code from module recvfrom: - # Code from module select: - # Code from module send: - # Code from module sendto: - # Code from module servent: - # Code from module setenv: - # Code from module setsockopt: - # Code from module shutdown: - # Code from module signal-h: - # Code from module size_max: - # Code from module snippet/_Noreturn: - # Code from module snippet/arg-nonnull: - # Code from module snippet/c++defs: - # Code from module snippet/warn-on-use: - # Code from module snprintf: - # Code from module socket: - # Code from module socketlib: - # Code from module sockets: - # Code from module socklen: - # Code from module ssize_t: - # Code from module stdalign: - # Code from module stdbool: - # Code from module stddef: - # Code from module stdint: - # Code from module stdio: - # Code from module stdlib: - # Code from module strdup-posix: - # Code from module strerror: - # Code from module strerror-override: - # Code from module strftime: - # Code from module string: - # Code from module sys_select: - # Code from module sys_socket: - # Code from module sys_stat: - # Code from module sys_time: - # Code from module sys_types: - # Code from module sys_uio: - # Code from module time: - # Code from module time_r: - # Code from module time_rz: - # Code from module timegm: - # Code from module timespec: - # Code from module unistd: - # Code from module unsetenv: - # Code from module vasnprintf: - # Code from module verify: - # Code from module wchar: - # Code from module xalloc: - # Code from module xalloc-die: - # Code from module xalloc-oversized: - # Code from module xsize: -]) - -# This macro should be invoked from ./configure.ac, in the section -# "Check for header files, types and library functions". -AC_DEFUN([ggl_INIT], -[ - AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) - gl_cond_libtool=true - gl_m4_base='src/gl/m4' - m4_pushdef([AC_LIBOBJ], m4_defn([ggl_LIBOBJ])) - m4_pushdef([AC_REPLACE_FUNCS], m4_defn([ggl_REPLACE_FUNCS])) - m4_pushdef([AC_LIBSOURCES], m4_defn([ggl_LIBSOURCES])) - m4_pushdef([ggl_LIBSOURCES_LIST], []) - m4_pushdef([ggl_LIBSOURCES_DIR], []) - gl_COMMON - gl_source_base='src/gl' - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([accept]) - fi - gl_SYS_SOCKET_MODULE_INDICATOR([accept]) -changequote(,)dnl -LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` -changequote([, ])dnl -AC_SUBST([LTALLOCA]) - gl_FUNC_ALLOCA - gl_HEADER_ARPA_INET - AC_PROG_MKDIR_P - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([bind]) - fi - gl_SYS_SOCKET_MODULE_INDICATOR([bind]) - gl_CLOCK_TIME - gl_FUNC_CLOSE - if test $REPLACE_CLOSE = 1; then - AC_LIBOBJ([close]) - fi - gl_UNISTD_MODULE_INDICATOR([close]) - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([connect]) - fi - gl_SYS_SOCKET_MODULE_INDICATOR([connect]) - gl_DIRNAME_LGPL - gl_DOUBLE_SLASH_ROOT - gl_FUNC_DUP2 - if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then - AC_LIBOBJ([dup2]) - gl_PREREQ_DUP2 - fi - gl_UNISTD_MODULE_INDICATOR([dup2]) - gl_ENVIRON - gl_UNISTD_MODULE_INDICATOR([environ]) - gl_HEADER_ERRNO_H - gl_ERROR - if test $ac_cv_lib_error_at_line = no; then - AC_LIBOBJ([error]) - gl_PREREQ_ERROR - fi - m4_ifdef([AM_XGETTEXT_OPTION], - [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) - AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) - AC_REQUIRE([gl_EXTERN_INLINE]) - AC_C_FLEXIBLE_ARRAY_MEMBER - gl_FLOAT_H - if test $REPLACE_FLOAT_LDBL = 1; then - AC_LIBOBJ([float]) - fi - if test $REPLACE_ITOLD = 1; then - AC_LIBOBJ([itold]) - fi - gl_FUNC_FSEEK - if test $REPLACE_FSEEK = 1; then - AC_LIBOBJ([fseek]) - fi - gl_STDIO_MODULE_INDICATOR([fseek]) - gl_FUNC_FSEEKO - if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then - AC_LIBOBJ([fseeko]) - gl_PREREQ_FSEEKO - fi - gl_STDIO_MODULE_INDICATOR([fseeko]) - gl_FUNC_FSTAT - if test $REPLACE_FSTAT = 1; then - AC_LIBOBJ([fstat]) - gl_PREREQ_FSTAT - fi - gl_SYS_STAT_MODULE_INDICATOR([fstat]) - gl_FUNC_FTELL - if test $REPLACE_FTELL = 1; then - AC_LIBOBJ([ftell]) - fi - gl_STDIO_MODULE_INDICATOR([ftell]) - gl_FUNC_FTELLO - if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then - AC_LIBOBJ([ftello]) - gl_PREREQ_FTELLO - fi - gl_STDIO_MODULE_INDICATOR([ftello]) - gl_GETADDRINFO - if test $HAVE_GETADDRINFO = 0; then - AC_LIBOBJ([getaddrinfo]) - fi - if test $HAVE_DECL_GAI_STRERROR = 0 || test $REPLACE_GAI_STRERROR = 1; then - AC_LIBOBJ([gai_strerror]) - fi - gl_NETDB_MODULE_INDICATOR([getaddrinfo]) - gl_FUNC_GETDELIM - if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then - AC_LIBOBJ([getdelim]) - gl_PREREQ_GETDELIM - fi - gl_STDIO_MODULE_INDICATOR([getdelim]) - gl_FUNC_GETLINE - if test $REPLACE_GETLINE = 1; then - AC_LIBOBJ([getline]) - gl_PREREQ_GETLINE - fi - gl_STDIO_MODULE_INDICATOR([getline]) - gl_FUNC_GETPASS - if test $HAVE_GETPASS = 0; then - AC_LIBOBJ([getpass]) - gl_PREREQ_GETPASS - fi - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([getpeername]) - fi - gl_SYS_SOCKET_MODULE_INDICATOR([getpeername]) - gl_FUNC_GETPROGNAME - AC_SUBST([LIBINTL]) - AC_SUBST([LTLIBINTL]) - gl_GETTIME - gl_FUNC_GETTIMEOFDAY - if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then - AC_LIBOBJ([gettimeofday]) - gl_PREREQ_GETTIMEOFDAY - fi - gl_SYS_TIME_MODULE_INDICATOR([gettimeofday]) - gl_HOSTENT - gl_FUNC_INET_NTOP - if test $HAVE_INET_NTOP = 0 || test $REPLACE_INET_NTOP = 1; then - AC_LIBOBJ([inet_ntop]) - gl_PREREQ_INET_NTOP - fi - gl_ARPA_INET_MODULE_INDICATOR([inet_ntop]) - gl_FUNC_INET_PTON - if test $HAVE_INET_PTON = 0 || test $REPLACE_INET_NTOP = 1; then - AC_LIBOBJ([inet_pton]) - gl_PREREQ_INET_PTON - fi - gl_ARPA_INET_MODULE_INDICATOR([inet_pton]) - AC_REQUIRE([gl_LARGEFILE]) - gl_LIMITS_H - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([listen]) - fi - gl_SYS_SOCKET_MODULE_INDICATOR([listen]) - gl_FUNC_LSEEK - if test $REPLACE_LSEEK = 1; then - AC_LIBOBJ([lseek]) - fi - gl_UNISTD_MODULE_INDICATOR([lseek]) - gl_FUNC_MALLOC_POSIX - if test $REPLACE_MALLOC = 1; then - AC_LIBOBJ([malloc]) - fi - gl_STDLIB_MODULE_INDICATOR([malloc-posix]) - gl_MALLOCA - gl_FUNC_MEMCHR - if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then - AC_LIBOBJ([memchr]) - gl_PREREQ_MEMCHR - fi - gl_STRING_MODULE_INDICATOR([memchr]) - gl_MINMAX - gl_FUNC_MKTIME - if test $REPLACE_MKTIME = 1; then - AC_LIBOBJ([mktime]) - gl_PREREQ_MKTIME - fi - gl_TIME_MODULE_INDICATOR([mktime]) - gl_FUNC_MKTIME_INTERNAL - if test $REPLACE_MKTIME = 1; then - AC_LIBOBJ([mktime]) - gl_PREREQ_MKTIME - fi - AC_REQUIRE([gl_MSVC_INVAL]) - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - AC_LIBOBJ([msvc-inval]) - fi - AC_REQUIRE([gl_MSVC_NOTHROW]) - if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then - AC_LIBOBJ([msvc-nothrow]) - fi - gl_MULTIARCH - gl_HEADER_NETDB - gl_HEADER_NETINET_IN - AC_PROG_MKDIR_P - gl_PARSE_DATETIME - AC_CHECK_DECLS([program_invocation_name], [], [], [#include ]) - AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include ]) - gl_PREREQ_READ_FILE - gl_FUNC_REALLOC_POSIX - if test $REPLACE_REALLOC = 1; then - AC_LIBOBJ([realloc]) - fi - gl_STDLIB_MODULE_INDICATOR([realloc-posix]) - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([recv]) - fi - gl_SYS_SOCKET_MODULE_INDICATOR([recv]) - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([recvfrom]) - fi - gl_SYS_SOCKET_MODULE_INDICATOR([recvfrom]) - gl_FUNC_SELECT - if test $REPLACE_SELECT = 1; then - AC_LIBOBJ([select]) - fi - gl_SYS_SELECT_MODULE_INDICATOR([select]) - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([send]) - fi - gl_SYS_SOCKET_MODULE_INDICATOR([send]) - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([sendto]) - fi - gl_SYS_SOCKET_MODULE_INDICATOR([sendto]) - gl_SERVENT - gl_FUNC_SETENV - if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then - AC_LIBOBJ([setenv]) - fi - gl_STDLIB_MODULE_INDICATOR([setenv]) - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([setsockopt]) - fi - gl_SYS_SOCKET_MODULE_INDICATOR([setsockopt]) - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([shutdown]) - fi - gl_SYS_SOCKET_MODULE_INDICATOR([shutdown]) - gl_SIGNAL_H - gl_SIZE_MAX - gl_FUNC_SNPRINTF - gl_STDIO_MODULE_INDICATOR([snprintf]) - gl_MODULE_INDICATOR([snprintf]) - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - if test "$ac_cv_header_winsock2_h" = yes; then - AC_LIBOBJ([socket]) - fi - # When this module is used, sockets may actually occur as file descriptors, - # hence it is worth warning if the modules 'close' and 'ioctl' are not used. - m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) - m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) - AC_REQUIRE([gl_PREREQ_SYS_H_WINSOCK2]) - if test "$ac_cv_header_winsock2_h" = yes; then - UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 - SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 - fi - gl_SYS_SOCKET_MODULE_INDICATOR([socket]) - AC_REQUIRE([gl_SOCKETLIB]) - AC_REQUIRE([gl_SOCKETS]) - gl_TYPE_SOCKLEN_T - gt_TYPE_SSIZE_T - gl_STDALIGN_H - AM_STDBOOL_H - gl_STDDEF_H - gl_STDINT_H - gl_STDIO_H - gl_STDLIB_H - gl_FUNC_STRDUP_POSIX - if test $ac_cv_func_strdup = no || test $REPLACE_STRDUP = 1; then - AC_LIBOBJ([strdup]) - gl_PREREQ_STRDUP - fi - gl_STRING_MODULE_INDICATOR([strdup]) - gl_FUNC_STRERROR - if test $REPLACE_STRERROR = 1; then - AC_LIBOBJ([strerror]) - fi - gl_MODULE_INDICATOR([strerror]) - gl_STRING_MODULE_INDICATOR([strerror]) - AC_REQUIRE([gl_HEADER_ERRNO_H]) - AC_REQUIRE([gl_FUNC_STRERROR_0]) - if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then - AC_LIBOBJ([strerror-override]) - gl_PREREQ_SYS_H_WINSOCK2 - fi - gl_FUNC_GNU_STRFTIME - gl_HEADER_STRING_H - gl_HEADER_SYS_SELECT - AC_PROG_MKDIR_P - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - AC_PROG_MKDIR_P - gl_HEADER_SYS_STAT_H - AC_PROG_MKDIR_P - gl_HEADER_SYS_TIME_H - AC_PROG_MKDIR_P - gl_SYS_TYPES_H - AC_PROG_MKDIR_P - gl_HEADER_SYS_UIO - AC_PROG_MKDIR_P - gl_HEADER_TIME_H - gl_TIME_R - if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then - AC_LIBOBJ([time_r]) - gl_PREREQ_TIME_R - fi - gl_TIME_MODULE_INDICATOR([time_r]) - gl_TIME_RZ - if test "$HAVE_TIMEZONE_T" = 0; then - AC_LIBOBJ([time_rz]) - fi - gl_TIME_MODULE_INDICATOR([time_rz]) - gl_FUNC_TIMEGM - if test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1; then - AC_LIBOBJ([timegm]) - gl_PREREQ_TIMEGM - fi - gl_TIME_MODULE_INDICATOR([timegm]) - gl_TIMESPEC - gl_UNISTD_H - gl_FUNC_UNSETENV - if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then - AC_LIBOBJ([unsetenv]) - gl_PREREQ_UNSETENV - fi - gl_STDLIB_MODULE_INDICATOR([unsetenv]) - gl_FUNC_VASNPRINTF - gl_WCHAR_H - gl_XALLOC - gl_XSIZE - # End of code from modules - m4_ifval(ggl_LIBSOURCES_LIST, [ - m4_syscmd([test ! -d ]m4_defn([ggl_LIBSOURCES_DIR])[ || - for gl_file in ]ggl_LIBSOURCES_LIST[ ; do - if test ! -r ]m4_defn([ggl_LIBSOURCES_DIR])[/$gl_file ; then - echo "missing file ]m4_defn([ggl_LIBSOURCES_DIR])[/$gl_file" >&2 - exit 1 - fi - done])dnl - m4_if(m4_sysval, [0], [], - [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) - ]) - m4_popdef([ggl_LIBSOURCES_DIR]) - m4_popdef([ggl_LIBSOURCES_LIST]) - m4_popdef([AC_LIBSOURCES]) - m4_popdef([AC_REPLACE_FUNCS]) - m4_popdef([AC_LIBOBJ]) - AC_CONFIG_COMMANDS_PRE([ - ggl_libobjs= - ggl_ltlibobjs= - if test -n "$ggl_LIBOBJS"; then - # Remove the extension. - sed_drop_objext='s/\.o$//;s/\.obj$//' - for i in `for i in $ggl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do - ggl_libobjs="$ggl_libobjs $i.$ac_objext" - ggl_ltlibobjs="$ggl_ltlibobjs $i.lo" - done - fi - AC_SUBST([ggl_LIBOBJS], [$ggl_libobjs]) - AC_SUBST([ggl_LTLIBOBJS], [$ggl_ltlibobjs]) - ]) - gltests_libdeps= - gltests_ltlibdeps= - m4_pushdef([AC_LIBOBJ], m4_defn([ggltests_LIBOBJ])) - m4_pushdef([AC_REPLACE_FUNCS], m4_defn([ggltests_REPLACE_FUNCS])) - m4_pushdef([AC_LIBSOURCES], m4_defn([ggltests_LIBSOURCES])) - m4_pushdef([ggltests_LIBSOURCES_LIST], []) - m4_pushdef([ggltests_LIBSOURCES_DIR], []) - gl_COMMON - gl_source_base='tests' -changequote(,)dnl - ggltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS -changequote([, ])dnl - AC_SUBST([ggltests_WITNESS]) - gl_module_indicator_condition=$ggltests_WITNESS - m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) - m4_popdef([gl_MODULE_INDICATOR_CONDITION]) - m4_ifval(ggltests_LIBSOURCES_LIST, [ - m4_syscmd([test ! -d ]m4_defn([ggltests_LIBSOURCES_DIR])[ || - for gl_file in ]ggltests_LIBSOURCES_LIST[ ; do - if test ! -r ]m4_defn([ggltests_LIBSOURCES_DIR])[/$gl_file ; then - echo "missing file ]m4_defn([ggltests_LIBSOURCES_DIR])[/$gl_file" >&2 - exit 1 - fi - done])dnl - m4_if(m4_sysval, [0], [], - [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) - ]) - m4_popdef([ggltests_LIBSOURCES_DIR]) - m4_popdef([ggltests_LIBSOURCES_LIST]) - m4_popdef([AC_LIBSOURCES]) - m4_popdef([AC_REPLACE_FUNCS]) - m4_popdef([AC_LIBOBJ]) - AC_CONFIG_COMMANDS_PRE([ - ggltests_libobjs= - ggltests_ltlibobjs= - if test -n "$ggltests_LIBOBJS"; then - # Remove the extension. - sed_drop_objext='s/\.o$//;s/\.obj$//' - for i in `for i in $ggltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do - ggltests_libobjs="$ggltests_libobjs $i.$ac_objext" - ggltests_ltlibobjs="$ggltests_ltlibobjs $i.lo" - done - fi - AC_SUBST([ggltests_LIBOBJS], [$ggltests_libobjs]) - AC_SUBST([ggltests_LTLIBOBJS], [$ggltests_ltlibobjs]) - ]) -]) - -# Like AC_LIBOBJ, except that the module name goes -# into ggl_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([ggl_LIBOBJ], [ - AS_LITERAL_IF([$1], [ggl_LIBSOURCES([$1.c])])dnl - ggl_LIBOBJS="$ggl_LIBOBJS $1.$ac_objext" -]) - -# Like AC_REPLACE_FUNCS, except that the module name goes -# into ggl_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([ggl_REPLACE_FUNCS], [ - m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl - AC_CHECK_FUNCS([$1], , [ggl_LIBOBJ($ac_func)]) -]) - -# Like AC_LIBSOURCES, except the directory where the source file is -# expected is derived from the gnulib-tool parameterization, -# and alloca is special cased (for the alloca-opt module). -# We could also entirely rely on EXTRA_lib..._SOURCES. -AC_DEFUN([ggl_LIBSOURCES], [ - m4_foreach([_gl_NAME], [$1], [ - m4_if(_gl_NAME, [alloca.c], [], [ - m4_define([ggl_LIBSOURCES_DIR], [src/gl]) - m4_append([ggl_LIBSOURCES_LIST], _gl_NAME, [ ]) - ]) - ]) -]) - -# Like AC_LIBOBJ, except that the module name goes -# into ggltests_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([ggltests_LIBOBJ], [ - AS_LITERAL_IF([$1], [ggltests_LIBSOURCES([$1.c])])dnl - ggltests_LIBOBJS="$ggltests_LIBOBJS $1.$ac_objext" -]) - -# Like AC_REPLACE_FUNCS, except that the module name goes -# into ggltests_LIBOBJS instead of into LIBOBJS. -AC_DEFUN([ggltests_REPLACE_FUNCS], [ - m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl - AC_CHECK_FUNCS([$1], , [ggltests_LIBOBJ($ac_func)]) -]) - -# Like AC_LIBSOURCES, except the directory where the source file is -# expected is derived from the gnulib-tool parameterization, -# and alloca is special cased (for the alloca-opt module). -# We could also entirely rely on EXTRA_lib..._SOURCES. -AC_DEFUN([ggltests_LIBSOURCES], [ - m4_foreach([_gl_NAME], [$1], [ - m4_if(_gl_NAME, [alloca.c], [], [ - m4_define([ggltests_LIBSOURCES_DIR], [tests]) - m4_append([ggltests_LIBSOURCES_LIST], _gl_NAME, [ ]) - ]) - ]) -]) - -# This macro records the list of files which have been installed by -# gnulib-tool and may be removed by future gnulib-tool invocations. -AC_DEFUN([ggl_FILE_LIST], [ - build-aux/snippet/_Noreturn.h - build-aux/snippet/arg-nonnull.h - build-aux/snippet/c++defs.h - build-aux/snippet/warn-on-use.h - doc/parse-datetime.texi - lib/accept.c - lib/alloca.c - lib/alloca.in.h - lib/arpa_inet.in.h - lib/asnprintf.c - lib/basename-lgpl.c - lib/bind.c - lib/c-ctype.c - lib/c-ctype.h - lib/close.c - lib/connect.c - lib/dirname-lgpl.c - lib/dirname.h - lib/dosname.h - lib/dup2.c - lib/errno.in.h - lib/error.c - lib/error.h - lib/exitfail.c - lib/exitfail.h - lib/fd-hook.c - lib/fd-hook.h - lib/flexmember.h - lib/float+.h - lib/float.c - lib/float.in.h - lib/fseek.c - lib/fseeko.c - lib/fstat.c - lib/ftell.c - lib/ftello.c - lib/gai_strerror.c - lib/getaddrinfo.c - lib/getdelim.c - lib/getline.c - lib/getpass.c - lib/getpass.h - lib/getpeername.c - lib/getprogname.c - lib/getprogname.h - lib/gettext.h - lib/gettime.c - lib/gettimeofday.c - lib/inet_ntop.c - lib/inet_pton.c - lib/intprops.h - lib/itold.c - lib/limits.in.h - lib/listen.c - lib/lseek.c - lib/malloc.c - lib/malloca.c - lib/malloca.h - lib/malloca.valgrind - lib/memchr.c - lib/memchr.valgrind - lib/minmax.h - lib/mktime-internal.h - lib/mktime.c - lib/msvc-inval.c - lib/msvc-inval.h - lib/msvc-nothrow.c - lib/msvc-nothrow.h - lib/netdb.in.h - lib/netinet_in.in.h - lib/parse-datetime.h - lib/parse-datetime.y - lib/printf-args.c - lib/printf-args.h - lib/printf-parse.c - lib/printf-parse.h - lib/progname.c - lib/progname.h - lib/read-file.c - lib/read-file.h - lib/realloc.c - lib/recv.c - lib/recvfrom.c - lib/select.c - lib/send.c - lib/sendto.c - lib/setenv.c - lib/setsockopt.c - lib/shutdown.c - lib/signal.in.h - lib/size_max.h - lib/snprintf.c - lib/socket.c - lib/sockets.c - lib/sockets.h - lib/stdalign.in.h - lib/stdbool.in.h - lib/stddef.in.h - lib/stdint.in.h - lib/stdio-impl.h - lib/stdio.in.h - lib/stdlib.in.h - lib/strdup.c - lib/strerror-override.c - lib/strerror-override.h - lib/strerror.c - lib/strftime.c - lib/strftime.h - lib/string.in.h - lib/stripslash.c - lib/sys_select.in.h - lib/sys_socket.c - lib/sys_socket.in.h - lib/sys_stat.in.h - lib/sys_time.in.h - lib/sys_types.in.h - lib/sys_uio.in.h - lib/time-internal.h - lib/time.in.h - lib/time_r.c - lib/time_rz.c - lib/timegm.c - lib/timespec.c - lib/timespec.h - lib/unistd.c - lib/unistd.in.h - lib/unsetenv.c - lib/vasnprintf.c - lib/vasnprintf.h - lib/verify.h - lib/w32sock.h - lib/wchar.in.h - lib/xalloc-die.c - lib/xalloc-oversized.h - lib/xalloc.h - lib/xmalloc.c - lib/xsize.c - lib/xsize.h - m4/00gnulib.m4 - m4/absolute-header.m4 - m4/alloca.m4 - m4/arpa_inet_h.m4 - m4/bison.m4 - m4/clock_time.m4 - m4/close.m4 - m4/dirname.m4 - m4/double-slash-root.m4 - m4/dup2.m4 - m4/eealloc.m4 - m4/environ.m4 - m4/errno_h.m4 - m4/error.m4 - m4/exponentd.m4 - m4/extensions.m4 - m4/extern-inline.m4 - m4/flexmember.m4 - m4/float_h.m4 - m4/fseek.m4 - m4/fseeko.m4 - m4/fstat.m4 - m4/ftell.m4 - m4/ftello.m4 - m4/getaddrinfo.m4 - m4/getdelim.m4 - m4/getline.m4 - m4/getpass.m4 - m4/getprogname.m4 - m4/gettime.m4 - m4/gettimeofday.m4 - m4/gnulib-common.m4 - m4/hostent.m4 - m4/include_next.m4 - m4/inet_ntop.m4 - m4/inet_pton.m4 - m4/intmax_t.m4 - m4/inttypes_h.m4 - m4/largefile.m4 - m4/limits-h.m4 - m4/longlong.m4 - m4/lseek.m4 - m4/malloc.m4 - m4/malloca.m4 - m4/math_h.m4 - m4/memchr.m4 - m4/minmax.m4 - m4/mktime.m4 - m4/mmap-anon.m4 - m4/msvc-inval.m4 - m4/msvc-nothrow.m4 - m4/multiarch.m4 - m4/netdb_h.m4 - m4/netinet_in_h.m4 - m4/off_t.m4 - m4/parse-datetime.m4 - m4/printf.m4 - m4/read-file.m4 - m4/realloc.m4 - m4/select.m4 - m4/servent.m4 - m4/setenv.m4 - m4/signal_h.m4 - m4/size_max.m4 - m4/snprintf.m4 - m4/socketlib.m4 - m4/sockets.m4 - m4/socklen.m4 - m4/sockpfaf.m4 - m4/ssize_t.m4 - m4/stdalign.m4 - m4/stdbool.m4 - m4/stddef_h.m4 - m4/stdint.m4 - m4/stdint_h.m4 - m4/stdio_h.m4 - m4/stdlib_h.m4 - m4/strdup.m4 - m4/strerror.m4 - m4/strftime.m4 - m4/string_h.m4 - m4/sys_select_h.m4 - m4/sys_socket_h.m4 - m4/sys_stat_h.m4 - m4/sys_time_h.m4 - m4/sys_types_h.m4 - m4/sys_uio_h.m4 - m4/time_h.m4 - m4/time_r.m4 - m4/time_rz.m4 - m4/timegm.m4 - m4/timespec.m4 - m4/tm_gmtoff.m4 - m4/unistd_h.m4 - m4/vasnprintf.m4 - m4/warn-on-use.m4 - m4/wchar_h.m4 - m4/wchar_t.m4 - m4/wint_t.m4 - m4/xalloc.m4 - m4/xsize.m4 -]) diff --git a/src/gl/m4/gnulib-tool.m4 b/src/gl/m4/gnulib-tool.m4 deleted file mode 100644 index 0d2ee444b4..0000000000 --- a/src/gl/m4/gnulib-tool.m4 +++ /dev/null @@ -1,57 +0,0 @@ -# gnulib-tool.m4 serial 2 -dnl Copyright (C) 2004-2005, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl The following macros need not be invoked explicitly. -dnl Invoking them does nothing except to declare default arguments -dnl for "gnulib-tool --import". - -dnl Usage: gl_LOCAL_DIR([DIR]) -AC_DEFUN([gl_LOCAL_DIR], []) - -dnl Usage: gl_MODULES([module1 module2 ...]) -AC_DEFUN([gl_MODULES], []) - -dnl Usage: gl_AVOID([module1 module2 ...]) -AC_DEFUN([gl_AVOID], []) - -dnl Usage: gl_SOURCE_BASE([DIR]) -AC_DEFUN([gl_SOURCE_BASE], []) - -dnl Usage: gl_M4_BASE([DIR]) -AC_DEFUN([gl_M4_BASE], []) - -dnl Usage: gl_PO_BASE([DIR]) -AC_DEFUN([gl_PO_BASE], []) - -dnl Usage: gl_DOC_BASE([DIR]) -AC_DEFUN([gl_DOC_BASE], []) - -dnl Usage: gl_TESTS_BASE([DIR]) -AC_DEFUN([gl_TESTS_BASE], []) - -dnl Usage: gl_WITH_TESTS -AC_DEFUN([gl_WITH_TESTS], []) - -dnl Usage: gl_LIB([LIBNAME]) -AC_DEFUN([gl_LIB], []) - -dnl Usage: gl_LGPL or gl_LGPL([VERSION]) -AC_DEFUN([gl_LGPL], []) - -dnl Usage: gl_MAKEFILE_NAME([FILENAME]) -AC_DEFUN([gl_MAKEFILE_NAME], []) - -dnl Usage: gl_LIBTOOL -AC_DEFUN([gl_LIBTOOL], []) - -dnl Usage: gl_MACRO_PREFIX([PREFIX]) -AC_DEFUN([gl_MACRO_PREFIX], []) - -dnl Usage: gl_PO_DOMAIN([DOMAIN]) -AC_DEFUN([gl_PO_DOMAIN], []) - -dnl Usage: gl_VC_FILES([BOOLEAN]) -AC_DEFUN([gl_VC_FILES], []) diff --git a/src/gl/m4/hostent.m4 b/src/gl/m4/hostent.m4 deleted file mode 100644 index 1b2488abc0..0000000000 --- a/src/gl/m4/hostent.m4 +++ /dev/null @@ -1,49 +0,0 @@ -# hostent.m4 serial 2 -dnl Copyright (C) 2008, 2010-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_HOSTENT], -[ - dnl Where are gethostent(), sethostent(), endhostent(), gethostbyname(), - dnl gethostbyaddr() defined? - dnl - On Solaris, they are in libnsl. Ignore libxnet. - dnl - On Haiku, they are in libnetwork. - dnl - On BeOS, they are in libnet. - dnl - On native Windows, they are in ws2_32.dll. - dnl - Otherwise they are in libc. - AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H - HOSTENT_LIB= - gl_saved_libs="$LIBS" - AC_SEARCH_LIBS([gethostbyname], [nsl network net], - [if test "$ac_cv_search_gethostbyname" != "none required"; then - HOSTENT_LIB="$ac_cv_search_gethostbyname" - fi]) - LIBS="$gl_saved_libs" - if test -z "$HOSTENT_LIB"; then - AC_CHECK_FUNCS([gethostbyname], , [ - AC_CACHE_CHECK([for gethostbyname in winsock2.h and -lws2_32], - [gl_cv_w32_gethostbyname], - [gl_cv_w32_gethostbyname=no - gl_save_LIBS="$LIBS" - LIBS="$LIBS -lws2_32" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[ -#ifdef HAVE_WINSOCK2_H -#include -#endif -#include - ]], - [[gethostbyname(NULL);]])], - [gl_cv_w32_gethostbyname=yes]) - LIBS="$gl_save_LIBS" - ]) - if test "$gl_cv_w32_gethostbyname" = "yes"; then - HOSTENT_LIB="-lws2_32" - fi - ]) - fi - AC_SUBST([HOSTENT_LIB]) -]) diff --git a/src/gl/m4/include_next.m4 b/src/gl/m4/include_next.m4 deleted file mode 100644 index db0f2c0795..0000000000 --- a/src/gl/m4/include_next.m4 +++ /dev/null @@ -1,223 +0,0 @@ -# include_next.m4 serial 23 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert and Derek Price. - -dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER. -dnl -dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to -dnl 'include' otherwise. -dnl -dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler -dnl supports it in the special case that it is the first include directive in -dnl the given file, or to 'include' otherwise. -dnl -dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, -dnl so as to avoid GCC warnings when the gcc option -pedantic is used. -dnl '#pragma GCC system_header' has the same effect as if the file was found -dnl through the include search path specified with '-isystem' options (as -dnl opposed to the search path specified with '-I' options). Namely, gcc -dnl does not warn about some things, and on some systems (Solaris and Interix) -dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side -dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead -dnl of plain '__STDC__'. -dnl -dnl PRAGMA_COLUMNS can be used in files that override system header files, so -dnl as to avoid compilation errors on HP NonStop systems when the gnulib file -dnl is included by a system header file that does a "#pragma COLUMNS 80" (which -dnl has the effect of truncating the lines of that file and all files that it -dnl includes to 80 columns) and the gnulib file has lines longer than 80 -dnl columns. - -AC_DEFUN([gl_INCLUDE_NEXT], -[ - AC_LANG_PREPROC_REQUIRE() - AC_CACHE_CHECK([whether the preprocessor supports include_next], - [gl_cv_have_include_next], - [rm -rf conftestd1a conftestd1b conftestd2 - mkdir conftestd1a conftestd1b conftestd2 - dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on - dnl AIX 6.1 support include_next when used as first preprocessor directive - dnl in a file, but not when preceded by another include directive. Check - dnl for this bug by including . - dnl Additionally, with this same compiler, include_next is a no-op when - dnl used in a header file that was included by specifying its absolute - dnl file name. Despite these two bugs, include_next is used in the - dnl compiler's . By virtue of the second bug, we need to use - dnl include_next as well in this case. - cat < conftestd1a/conftest.h -#define DEFINED_IN_CONFTESTD1 -#include_next -#ifdef DEFINED_IN_CONFTESTD2 -int foo; -#else -#error "include_next doesn't work" -#endif -EOF - cat < conftestd1b/conftest.h -#define DEFINED_IN_CONFTESTD1 -#include -#include_next -#ifdef DEFINED_IN_CONFTESTD2 -int foo; -#else -#error "include_next doesn't work" -#endif -EOF - cat < conftestd2/conftest.h -#ifndef DEFINED_IN_CONFTESTD1 -#error "include_next test doesn't work" -#endif -#define DEFINED_IN_CONFTESTD2 -EOF - gl_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" -dnl We intentionally avoid using AC_LANG_SOURCE here. - AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], - [gl_cv_have_include_next=yes], - [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" - AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include ]], - [gl_cv_have_include_next=buggy], - [gl_cv_have_include_next=no]) - ]) - CPPFLAGS="$gl_save_CPPFLAGS" - rm -rf conftestd1a conftestd1b conftestd2 - ]) - PRAGMA_SYSTEM_HEADER= - if test $gl_cv_have_include_next = yes; then - INCLUDE_NEXT=include_next - INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next - if test -n "$GCC"; then - PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' - fi - else - if test $gl_cv_have_include_next = buggy; then - INCLUDE_NEXT=include - INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next - else - INCLUDE_NEXT=include - INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include - fi - fi - AC_SUBST([INCLUDE_NEXT]) - AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) - AC_SUBST([PRAGMA_SYSTEM_HEADER]) - AC_CACHE_CHECK([whether system header files limit the line length], - [gl_cv_pragma_columns], - [dnl HP NonStop systems, which define __TANDEM, have this misfeature. - AC_EGREP_CPP([choke me], - [ -#ifdef __TANDEM -choke me -#endif - ], - [gl_cv_pragma_columns=yes], - [gl_cv_pragma_columns=no]) - ]) - if test $gl_cv_pragma_columns = yes; then - PRAGMA_COLUMNS="#pragma COLUMNS 10000" - else - PRAGMA_COLUMNS= - fi - AC_SUBST([PRAGMA_COLUMNS]) -]) - -# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) -# ------------------------------------------ -# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be -# ''; otherwise define it to be -# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. -# Also, if #include_next works as first preprocessing directive in a file, -# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be ''; otherwise define it to -# be -# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. -# That way, a header file with the following line: -# #@INCLUDE_NEXT@ @NEXT_FOO_H@ -# or -# #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ -# behaves (after sed substitution) as if it contained -# #include_next -# even if the compiler does not support include_next. -# The three "///" are to pacify Sun C 5.8, which otherwise would say -# "warning: #include of /usr/include/... may be non-portable". -# Use '""', not '<>', so that the /// cannot be confused with a C99 comment. -# Note: This macro assumes that the header file is not empty after -# preprocessing, i.e. it does not only define preprocessor macros but also -# provides some type/enum definitions or function/variable declarations. -# -# This macro also checks whether each header exists, by invoking -# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. -AC_DEFUN([gl_CHECK_NEXT_HEADERS], -[ - gl_NEXT_HEADERS_INTERNAL([$1], [check]) -]) - -# gl_NEXT_HEADERS(HEADER1 HEADER2 ...) -# ------------------------------------ -# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. -# This is suitable for headers like that are standardized by C89 -# and therefore can be assumed to exist. -AC_DEFUN([gl_NEXT_HEADERS], -[ - gl_NEXT_HEADERS_INTERNAL([$1], [assume]) -]) - -# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. -AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], -[ - AC_REQUIRE([gl_INCLUDE_NEXT]) - AC_REQUIRE([AC_CANONICAL_HOST]) - - m4_if([$2], [check], - [AC_CHECK_HEADERS_ONCE([$1]) - ]) - -dnl FIXME: gl_next_header and gl_header_exists must be used unquoted -dnl until we can assume autoconf 2.64 or newer. - m4_foreach_w([gl_HEADER_NAME], [$1], - [AS_VAR_PUSHDEF([gl_next_header], - [gl_cv_next_]m4_defn([gl_HEADER_NAME])) - if test $gl_cv_have_include_next = yes; then - AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) - else - AC_CACHE_CHECK( - [absolute name of <]m4_defn([gl_HEADER_NAME])[>], - m4_defn([gl_next_header]), - [m4_if([$2], [check], - [AS_VAR_PUSHDEF([gl_header_exists], - [ac_cv_header_]m4_defn([gl_HEADER_NAME])) - if test AS_VAR_GET(gl_header_exists) = yes; then - AS_VAR_POPDEF([gl_header_exists]) - ]) - gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) - AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) - AS_VAR_SET(gl_next_header, ['"'$gl_header'"']) - m4_if([$2], [check], - [else - AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) - fi - ]) - ]) - fi - AC_SUBST( - AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), - [AS_VAR_GET(gl_next_header)]) - if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' - gl_next_as_first_directive='<'gl_HEADER_NAME'>' - else - # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' - gl_next_as_first_directive=AS_VAR_GET(gl_next_header) - fi - AC_SUBST( - AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), - [$gl_next_as_first_directive]) - AS_VAR_POPDEF([gl_next_header])]) -]) - -# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; -# this fallback is safe for all earlier autoconf versions. -m4_define_default([AC_LANG_DEFINES_PROVIDED]) diff --git a/src/gl/m4/inet_ntop.m4 b/src/gl/m4/inet_ntop.m4 deleted file mode 100644 index 26464c34ac..0000000000 --- a/src/gl/m4/inet_ntop.m4 +++ /dev/null @@ -1,68 +0,0 @@ -# inet_ntop.m4 serial 19 -dnl Copyright (C) 2005-2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_INET_NTOP], -[ - AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) - - dnl Persuade Solaris to declare inet_ntop. - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - AC_REQUIRE([AC_C_RESTRICT]) - - dnl Most platforms that provide inet_ntop define it in libc. - dnl Solaris 8..10 provide inet_ntop in libnsl instead. - dnl Solaris 2.6..7 provide inet_ntop in libresolv instead. - dnl Native Windows provides it in -lws2_32 instead, with a declaration in - dnl , and it uses stdcall calling convention, not cdecl - dnl (hence we cannot use AC_CHECK_FUNCS, AC_SEARCH_LIBS to find it). - HAVE_INET_NTOP=1 - INET_NTOP_LIB= - gl_PREREQ_SYS_H_WINSOCK2 - if test $HAVE_WINSOCK2_H = 1; then - AC_CHECK_DECLS([inet_ntop],,, [[#include ]]) - if test $ac_cv_have_decl_inet_ntop = yes; then - dnl It needs to be overridden, because the stdcall calling convention - dnl is not compliant with POSIX. - REPLACE_INET_NTOP=1 - INET_NTOP_LIB="-lws2_32" - else - HAVE_DECL_INET_NTOP=0 - HAVE_INET_NTOP=0 - fi - else - gl_save_LIBS=$LIBS - AC_SEARCH_LIBS([inet_ntop], [nsl resolv], [], - [AC_CHECK_FUNCS([inet_ntop]) - if test $ac_cv_func_inet_ntop = no; then - HAVE_INET_NTOP=0 - fi - ]) - LIBS=$gl_save_LIBS - - if test "$ac_cv_search_inet_ntop" != "no" \ - && test "$ac_cv_search_inet_ntop" != "none required"; then - INET_NTOP_LIB="$ac_cv_search_inet_ntop" - fi - - AC_CHECK_HEADERS_ONCE([netdb.h]) - AC_CHECK_DECLS([inet_ntop],,, - [[#include - #if HAVE_NETDB_H - # include - #endif - ]]) - if test $ac_cv_have_decl_inet_ntop = no; then - HAVE_DECL_INET_NTOP=0 - fi - fi - AC_SUBST([INET_NTOP_LIB]) -]) - -# Prerequisites of lib/inet_ntop.c. -AC_DEFUN([gl_PREREQ_INET_NTOP], [ - AC_REQUIRE([gl_SOCKET_FAMILIES]) -]) diff --git a/src/gl/m4/inet_pton.m4 b/src/gl/m4/inet_pton.m4 deleted file mode 100644 index 4f5db7149a..0000000000 --- a/src/gl/m4/inet_pton.m4 +++ /dev/null @@ -1,68 +0,0 @@ -# inet_pton.m4 serial 17 -dnl Copyright (C) 2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_INET_PTON], -[ - AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) - - dnl Persuade Solaris to declare inet_pton. - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - AC_REQUIRE([AC_C_RESTRICT]) - - dnl Most platforms that provide inet_pton define it in libc. - dnl Solaris 8..10 provide inet_pton in libnsl instead. - dnl Solaris 2.6..7 provide inet_pton in libresolv instead. - dnl Native Windows provides it in -lws2_32 instead, with a declaration in - dnl , and it uses stdcall calling convention, not cdecl - dnl (hence we cannot use AC_CHECK_FUNCS, AC_SEARCH_LIBS to find it). - HAVE_INET_PTON=1 - INET_PTON_LIB= - gl_PREREQ_SYS_H_WINSOCK2 - if test $HAVE_WINSOCK2_H = 1; then - AC_CHECK_DECLS([inet_pton],,, [[#include ]]) - if test $ac_cv_have_decl_inet_pton = yes; then - dnl It needs to be overridden, because the stdcall calling convention - dnl is not compliant with POSIX. - REPLACE_INET_PTON=1 - INET_PTON_LIB="-lws2_32" - else - HAVE_DECL_INET_PTON=0 - HAVE_INET_PTON=0 - fi - else - gl_save_LIBS=$LIBS - AC_SEARCH_LIBS([inet_pton], [nsl resolv], [], - [AC_CHECK_FUNCS([inet_pton]) - if test $ac_cv_func_inet_pton = no; then - HAVE_INET_PTON=0 - fi - ]) - LIBS=$gl_save_LIBS - - if test "$ac_cv_search_inet_pton" != "no" \ - && test "$ac_cv_search_inet_pton" != "none required"; then - INET_PTON_LIB="$ac_cv_search_inet_pton" - fi - - AC_CHECK_HEADERS_ONCE([netdb.h]) - AC_CHECK_DECLS([inet_pton],,, - [[#include - #if HAVE_NETDB_H - # include - #endif - ]]) - if test $ac_cv_have_decl_inet_pton = no; then - HAVE_DECL_INET_PTON=0 - fi - fi - AC_SUBST([INET_PTON_LIB]) -]) - -# Prerequisites of lib/inet_pton.c. -AC_DEFUN([gl_PREREQ_INET_PTON], [ - AC_REQUIRE([gl_SOCKET_FAMILIES]) -]) diff --git a/src/gl/m4/intmax_t.m4 b/src/gl/m4/intmax_t.m4 deleted file mode 100644 index 9559accabf..0000000000 --- a/src/gl/m4/intmax_t.m4 +++ /dev/null @@ -1,67 +0,0 @@ -# intmax_t.m4 serial 8 -dnl Copyright (C) 1997-2004, 2006-2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -AC_PREREQ([2.53]) - -# Define intmax_t to 'long' or 'long long' -# if it is not already defined in or . - -AC_DEFUN([gl_AC_TYPE_INTMAX_T], -[ - dnl For simplicity, we assume that a header file defines 'intmax_t' if and - dnl only if it defines 'uintmax_t'. - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - test $ac_cv_type_long_long_int = yes \ - && ac_type='long long' \ - || ac_type='long' - AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], - [Define to long or long long if and don't define.]) - else - AC_DEFINE([HAVE_INTMAX_T], [1], - [Define if you have the 'intmax_t' type in or .]) - fi -]) - -dnl An alternative would be to explicitly test for 'intmax_t'. - -AC_DEFUN([gt_AC_TYPE_INTMAX_T], -[ - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#include -#if HAVE_STDINT_H_WITH_UINTMAX -#include -#endif -#if HAVE_INTTYPES_H_WITH_UINTMAX -#include -#endif - ]], - [[intmax_t x = -1; return !x;]])], - [gt_cv_c_intmax_t=yes], - [gt_cv_c_intmax_t=no])]) - if test $gt_cv_c_intmax_t = yes; then - AC_DEFINE([HAVE_INTMAX_T], [1], - [Define if you have the 'intmax_t' type in or .]) - else - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - test $ac_cv_type_long_long_int = yes \ - && ac_type='long long' \ - || ac_type='long' - AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], - [Define to long or long long if and don't define.]) - fi -]) diff --git a/src/gl/m4/inttypes_h.m4 b/src/gl/m4/inttypes_h.m4 deleted file mode 100644 index 76571199f3..0000000000 --- a/src/gl/m4/inttypes_h.m4 +++ /dev/null @@ -1,29 +0,0 @@ -# inttypes_h.m4 serial 10 -dnl Copyright (C) 1997-2004, 2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, -# doesn't clash with , and declares uintmax_t. - -AC_DEFUN([gl_AC_HEADER_INTTYPES_H], -[ - AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -#include -#include - ]], - [[uintmax_t i = (uintmax_t) -1; return !i;]])], - [gl_cv_header_inttypes_h=yes], - [gl_cv_header_inttypes_h=no])]) - if test $gl_cv_header_inttypes_h = yes; then - AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], - [Define if exists, doesn't clash with , - and declares uintmax_t. ]) - fi -]) diff --git a/src/gl/m4/largefile.m4 b/src/gl/m4/largefile.m4 deleted file mode 100644 index 8bbdfaac1d..0000000000 --- a/src/gl/m4/largefile.m4 +++ /dev/null @@ -1,146 +0,0 @@ -# Enable large files on systems where this is not the default. - -# Copyright 1992-1996, 1998-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# The following implementation works around a problem in autoconf <= 2.69; -# AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5, -# or configures them incorrectly in some cases. -m4_version_prereq([2.70], [] ,[ - -# _AC_SYS_LARGEFILE_TEST_INCLUDES -# ------------------------------- -m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], -[@%:@include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]];[]dnl -]) - - -# _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, -# CACHE-VAR, -# DESCRIPTION, -# PROLOGUE, [FUNCTION-BODY]) -# -------------------------------------------------------- -m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE], -[AC_CACHE_CHECK([for $1 value needed for large files], [$3], -[while :; do - m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( - [AC_LANG_PROGRAM([$5], [$6])], - [$3=no; break]) - m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( - [AC_LANG_PROGRAM([@%:@define $1 $2 -$5], [$6])], - [$3=$2; break]) - $3=unknown - break -done]) -case $$3 in #( - no | unknown) ;; - *) AC_DEFINE_UNQUOTED([$1], [$$3], [$4]);; -esac -rm -rf conftest*[]dnl -])# _AC_SYS_LARGEFILE_MACRO_VALUE - - -# AC_SYS_LARGEFILE -# ---------------- -# By default, many hosts won't let programs access large files; -# one must use special compiler options to get large-file access to work. -# For more details about this brain damage please see: -# http://www.unix-systems.org/version2/whatsnew/lfs20mar.html -AC_DEFUN([AC_SYS_LARGEFILE], -[AC_ARG_ENABLE(largefile, - [ --disable-largefile omit support for large files]) -if test "$enable_largefile" != no; then - - AC_CACHE_CHECK([for special C compiler options needed for large files], - ac_cv_sys_largefile_CC, - [ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - AC_LANG_CONFTEST([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_INCLUDES])]) - AC_COMPILE_IFELSE([], [break]) - CC="$CC -n32" - AC_COMPILE_IFELSE([], [ac_cv_sys_largefile_CC=' -n32'; break]) - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi]) - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - _AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, - ac_cv_sys_file_offset_bits, - [Number of bits in a file offset, on hosts where this is settable.], - [_AC_SYS_LARGEFILE_TEST_INCLUDES]) - if test $ac_cv_sys_file_offset_bits = unknown; then - _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, - ac_cv_sys_large_files, - [Define for large files, on AIX-style hosts.], - [_AC_SYS_LARGEFILE_TEST_INCLUDES]) - fi - - AC_DEFINE([_DARWIN_USE_64_BIT_INODE], [1], - [Enable large inode numbers on Mac OS X 10.5.]) -fi -])# AC_SYS_LARGEFILE -])# m4_version_prereq 2.70 - -# Enable large files on systems where this is implemented by Gnulib, not by the -# system headers. -# Set the variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE if Gnulib -# overrides ensure that off_t or 'struct size.st_size' are 64-bit, respectively. -AC_DEFUN([gl_LARGEFILE], -[ - AC_REQUIRE([AC_CANONICAL_HOST]) - case "$host_os" in - mingw*) - dnl Native Windows. - dnl mingw64 defines off_t to a 64-bit type already, if - dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE. - AC_CACHE_CHECK([for 64-bit off_t], [gl_cv_type_off_t_64], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; - ]], - [[]])], - [gl_cv_type_off_t_64=yes], [gl_cv_type_off_t_64=no]) - ]) - if test $gl_cv_type_off_t_64 = no; then - WINDOWS_64_BIT_OFF_T=1 - else - WINDOWS_64_BIT_OFF_T=0 - fi - dnl But all native Windows platforms (including mingw64) have a 32-bit - dnl st_size member in 'struct stat'. - WINDOWS_64_BIT_ST_SIZE=1 - ;; - *) - dnl Nothing to do on gnulib's side. - dnl A 64-bit off_t is - dnl - already the default on Mac OS X, FreeBSD, NetBSD, OpenBSD, IRIX, - dnl OSF/1, Cygwin, - dnl - enabled by _FILE_OFFSET_BITS=64 (ensured by AC_SYS_LARGEFILE) on - dnl glibc, HP-UX, Solaris, - dnl - enabled by _LARGE_FILES=1 (ensured by AC_SYS_LARGEFILE) on AIX, - dnl - impossible to achieve on Minix 3.1.8. - WINDOWS_64_BIT_OFF_T=0 - WINDOWS_64_BIT_ST_SIZE=0 - ;; - esac -]) diff --git a/src/gl/m4/limits-h.m4 b/src/gl/m4/limits-h.m4 deleted file mode 100644 index 31fdf0a779..0000000000 --- a/src/gl/m4/limits-h.m4 +++ /dev/null @@ -1,31 +0,0 @@ -dnl Check whether limits.h has needed features. - -dnl Copyright 2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -AC_DEFUN_ONCE([gl_LIMITS_H], -[ - gl_CHECK_NEXT_HEADERS([limits.h]) - - AC_CACHE_CHECK([whether limits.h has ULLONG_WIDTH etc.], - [gl_cv_header_limits_width], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ - #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 - #endif - #include - int ullw = ULLONG_WIDTH;]])], - [gl_cv_header_limits_width=yes], - [gl_cv_header_limits_width=no])]) - if test "$gl_cv_header_limits_width" = yes; then - LIMITS_H= - else - LIMITS_H=limits.h - fi - AC_SUBST([LIMITS_H]) - AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) -]) diff --git a/src/gl/m4/longlong.m4 b/src/gl/m4/longlong.m4 deleted file mode 100644 index 36d8b12421..0000000000 --- a/src/gl/m4/longlong.m4 +++ /dev/null @@ -1,113 +0,0 @@ -# longlong.m4 serial 17 -dnl Copyright (C) 1999-2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_LONG_LONG_INT if 'long long int' works. -# This fixes a bug in Autoconf 2.61, and can be faster -# than what's in Autoconf 2.62 through 2.68. - -# Note: If the type 'long long int' exists but is only 32 bits large -# (as on some very old compilers), HAVE_LONG_LONG_INT will not be -# defined. In this case you can treat 'long long int' like 'long int'. - -AC_DEFUN([AC_TYPE_LONG_LONG_INT], -[ - AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) - AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], - [ac_cv_type_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int - if test $ac_cv_type_long_long_int = yes; then - dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. - dnl If cross compiling, assume the bug is not important, since - dnl nobody cross compiles for this platform as far as we know. - AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[@%:@include - @%:@ifndef LLONG_MAX - @%:@ define HALF \ - (1LL << (sizeof (long long int) * CHAR_BIT - 2)) - @%:@ define LLONG_MAX (HALF - 1 + HALF) - @%:@endif]], - [[long long int n = 1; - int i; - for (i = 0; ; i++) - { - long long int m = n << i; - if (m >> i != n) - return 1; - if (LLONG_MAX / 2 < m) - break; - } - return 0;]])], - [], - [ac_cv_type_long_long_int=no], - [:]) - fi - fi]) - if test $ac_cv_type_long_long_int = yes; then - AC_DEFINE([HAVE_LONG_LONG_INT], [1], - [Define to 1 if the system has the type 'long long int'.]) - fi -]) - -# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. -# This fixes a bug in Autoconf 2.61, and can be faster -# than what's in Autoconf 2.62 through 2.68. - -# Note: If the type 'unsigned long long int' exists but is only 32 bits -# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT -# will not be defined. In this case you can treat 'unsigned long long int' -# like 'unsigned long int'. - -AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], -[ - AC_CACHE_CHECK([for unsigned long long int], - [ac_cv_type_unsigned_long_long_int], - [ac_cv_type_unsigned_long_long_int=yes - if test "x${ac_cv_prog_cc_c99-no}" = xno; then - AC_LINK_IFELSE( - [_AC_TYPE_LONG_LONG_SNIPPET], - [], - [ac_cv_type_unsigned_long_long_int=no]) - fi]) - if test $ac_cv_type_unsigned_long_long_int = yes; then - AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], - [Define to 1 if the system has the type 'unsigned long long int'.]) - fi -]) - -# Expands to a C program that can be used to test for simultaneous support -# of 'long long' and 'unsigned long long'. We don't want to say that -# 'long long' is available if 'unsigned long long' is not, or vice versa, -# because too many programs rely on the symmetry between signed and unsigned -# integer types (excluding 'bool'). -AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], -[ - AC_LANG_PROGRAM( - [[/* For now, do not test the preprocessor; as of 2007 there are too many - implementations with broken preprocessors. Perhaps this can - be revisited in 2012. In the meantime, code should not expect - #if to work with literals wider than 32 bits. */ - /* Test literals. */ - long long int ll = 9223372036854775807ll; - long long int nll = -9223372036854775807LL; - unsigned long long int ull = 18446744073709551615ULL; - /* Test constant expressions. */ - typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) - ? 1 : -1)]; - typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 - ? 1 : -1)]; - int i = 63;]], - [[/* Test availability of runtime routines for shift and division. */ - long long int llmax = 9223372036854775807ll; - unsigned long long int ullmax = 18446744073709551615ull; - return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) - | (llmax / ll) | (llmax % ll) - | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) - | (ullmax / ull) | (ullmax % ull));]]) -]) diff --git a/src/gl/m4/lseek.m4 b/src/gl/m4/lseek.m4 deleted file mode 100644 index 4a95440073..0000000000 --- a/src/gl/m4/lseek.m4 +++ /dev/null @@ -1,71 +0,0 @@ -# lseek.m4 serial 10 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_LSEEK], -[ - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - - AC_REQUIRE([AC_CANONICAL_HOST]) - AC_REQUIRE([AC_PROG_CC]) - AC_CHECK_HEADERS_ONCE([unistd.h]) - AC_CACHE_CHECK([whether lseek detects pipes], [gl_cv_func_lseek_pipe], - [case "$host_os" in - mingw*) - dnl Native Windows. - dnl The result of lseek (fd, (off_t)0, SEEK_CUR) or - dnl SetFilePointer(handle, 0, NULL, FILE_CURRENT) - dnl for a pipe depends on the environment: In a Cygwin 1.5 - dnl environment it succeeds (wrong); in a Cygwin 1.7 environment - dnl it fails with a wrong errno value. - gl_cv_func_lseek_pipe=no - ;; - *) - if test $cross_compiling = no; then - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ -#include /* for off_t */ -#include /* for SEEK_CUR */ -#if HAVE_UNISTD_H -# include -#else /* on Windows with MSVC */ -# include -#endif -]], [[ - /* Exit with success only if stdin is seekable. */ - return lseek (0, (off_t)0, SEEK_CUR) < 0; -]])], - [if test -s conftest$ac_exeext \ - && ./conftest$ac_exeext < conftest.$ac_ext \ - && test 1 = "`echo hi \ - | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then - gl_cv_func_lseek_pipe=yes - else - gl_cv_func_lseek_pipe=no - fi - ], - [gl_cv_func_lseek_pipe=no]) - else - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE([[ -#if defined __BEOS__ -/* BeOS mistakenly return 0 when trying to seek on pipes. */ - Choke me. -#endif]])], - [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no]) - fi - ;; - esac - ]) - if test $gl_cv_func_lseek_pipe = no; then - REPLACE_LSEEK=1 - AC_DEFINE([LSEEK_PIPE_BROKEN], [1], - [Define to 1 if lseek does not detect pipes.]) - fi - - AC_REQUIRE([gl_SYS_TYPES_H]) - if test $WINDOWS_64_BIT_OFF_T = 1; then - REPLACE_LSEEK=1 - fi -]) diff --git a/src/gl/m4/malloc.m4 b/src/gl/m4/malloc.m4 deleted file mode 100644 index c393690e27..0000000000 --- a/src/gl/m4/malloc.m4 +++ /dev/null @@ -1,101 +0,0 @@ -# malloc.m4 serial 15 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -m4_version_prereq([2.70], [] ,[ - -# This is adapted with modifications from upstream Autoconf here: -# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c -AC_DEFUN([_AC_FUNC_MALLOC_IF], -[ - AC_REQUIRE([AC_HEADER_STDC])dnl - AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles - AC_CHECK_HEADERS([stdlib.h]) - AC_CACHE_CHECK([for GNU libc compatible malloc], - [ac_cv_func_malloc_0_nonnull], - [AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H - # include - #else - char *malloc (); - #endif - ]], - [[char *p = malloc (0); - int result = !p; - free (p); - return result;]]) - ], - [ac_cv_func_malloc_0_nonnull=yes], - [ac_cv_func_malloc_0_nonnull=no], - [case "$host_os" in - # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* \ - | hpux* | solaris* | cygwin* | mingw*) - ac_cv_func_malloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_malloc_0_nonnull=no ;; - esac - ]) - ]) - AS_IF([test $ac_cv_func_malloc_0_nonnull = yes], [$1], [$2]) -])# _AC_FUNC_MALLOC_IF - -]) - -# gl_FUNC_MALLOC_GNU -# ------------------ -# Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if -# it is not. -AC_DEFUN([gl_FUNC_MALLOC_GNU], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - dnl _AC_FUNC_MALLOC_IF is defined in Autoconf. - _AC_FUNC_MALLOC_IF( - [AC_DEFINE([HAVE_MALLOC_GNU], [1], - [Define to 1 if your system has a GNU libc compatible 'malloc' - function, and to 0 otherwise.])], - [AC_DEFINE([HAVE_MALLOC_GNU], [0]) - REPLACE_MALLOC=1 - ]) -]) - -# gl_FUNC_MALLOC_POSIX -# -------------------- -# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it -# fails), and replace malloc if it is not. -AC_DEFUN([gl_FUNC_MALLOC_POSIX], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) - if test $gl_cv_func_malloc_posix = yes; then - AC_DEFINE([HAVE_MALLOC_POSIX], [1], - [Define if the 'malloc' function is POSIX compliant.]) - else - REPLACE_MALLOC=1 - fi -]) - -# Test whether malloc, realloc, calloc are POSIX compliant, -# Set gl_cv_func_malloc_posix to yes or no accordingly. -AC_DEFUN([gl_CHECK_MALLOC_POSIX], -[ - AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant], - [gl_cv_func_malloc_posix], - [ - dnl It is too dangerous to try to allocate a large amount of memory: - dnl some systems go to their knees when you do that. So assume that - dnl all Unix implementations of the function are POSIX compliant. - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[]], - [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - choke me - #endif - ]])], - [gl_cv_func_malloc_posix=yes], - [gl_cv_func_malloc_posix=no]) - ]) -]) diff --git a/src/gl/m4/malloca.m4 b/src/gl/m4/malloca.m4 deleted file mode 100644 index b368b20e50..0000000000 --- a/src/gl/m4/malloca.m4 +++ /dev/null @@ -1,15 +0,0 @@ -# malloca.m4 serial 1 -dnl Copyright (C) 2003-2004, 2006-2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_MALLOCA], -[ - dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables - dnl @ALLOCA@ and @LTALLOCA@. - dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies. - AC_REQUIRE([gl_EEMALLOC]) - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) -]) diff --git a/src/gl/m4/math_h.m4 b/src/gl/m4/math_h.m4 deleted file mode 100644 index 35d07ee5f5..0000000000 --- a/src/gl/m4/math_h.m4 +++ /dev/null @@ -1,353 +0,0 @@ -# math_h.m4 serial 114 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_MATH_H], -[ - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - gl_CHECK_NEXT_HEADERS([math.h]) - - AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], - [[/* Solaris 10 has a broken definition of NAN. Other platforms - fail to provide NAN, or provide it only in C99 mode; this - test only needs to fail when NAN is provided but wrong. */ - float f = 1.0f; -#ifdef NAN - f = NAN; -#endif - return f == 0;]])], - [gl_cv_header_math_nan_works=yes], - [gl_cv_header_math_nan_works=no])]) - if test $gl_cv_header_math_nan_works = no; then - REPLACE_NAN=1 - fi - AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], - [[/* Solaris 10 has a broken definition of HUGE_VAL. */ - double d = HUGE_VAL; - return d == 0;]])], - [gl_cv_header_math_huge_val_works=yes], - [gl_cv_header_math_huge_val_works=no])]) - if test $gl_cv_header_math_huge_val_works = no; then - REPLACE_HUGE_VAL=1 - fi - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[#include ]], - [acosf acosl asinf asinl atanf atanl - cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf - expf expl exp2 exp2f exp2l expm1 expm1f expm1l - fabsf fabsl floorf floorl fma fmaf fmal - fmod fmodf fmodl frexpf frexpl hypotf hypotl - ilogb ilogbf ilogbl - ldexpf ldexpl - log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l - logb logbf logbl - modf modff modfl powf - remainder remainderf remainderl - rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl - tanf tanl tanhf trunc truncf truncl]) -]) - -AC_DEFUN([gl_MATH_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_MATH_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_MATH_H_DEFAULTS], -[ - GNULIB_ACOSF=0; AC_SUBST([GNULIB_ACOSF]) - GNULIB_ACOSL=0; AC_SUBST([GNULIB_ACOSL]) - GNULIB_ASINF=0; AC_SUBST([GNULIB_ASINF]) - GNULIB_ASINL=0; AC_SUBST([GNULIB_ASINL]) - GNULIB_ATANF=0; AC_SUBST([GNULIB_ATANF]) - GNULIB_ATANL=0; AC_SUBST([GNULIB_ATANL]) - GNULIB_ATAN2F=0; AC_SUBST([GNULIB_ATAN2F]) - GNULIB_CBRT=0; AC_SUBST([GNULIB_CBRT]) - GNULIB_CBRTF=0; AC_SUBST([GNULIB_CBRTF]) - GNULIB_CBRTL=0; AC_SUBST([GNULIB_CBRTL]) - GNULIB_CEIL=0; AC_SUBST([GNULIB_CEIL]) - GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF]) - GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL]) - GNULIB_COPYSIGN=0; AC_SUBST([GNULIB_COPYSIGN]) - GNULIB_COPYSIGNF=0; AC_SUBST([GNULIB_COPYSIGNF]) - GNULIB_COPYSIGNL=0; AC_SUBST([GNULIB_COPYSIGNL]) - GNULIB_COSF=0; AC_SUBST([GNULIB_COSF]) - GNULIB_COSL=0; AC_SUBST([GNULIB_COSL]) - GNULIB_COSHF=0; AC_SUBST([GNULIB_COSHF]) - GNULIB_EXPF=0; AC_SUBST([GNULIB_EXPF]) - GNULIB_EXPL=0; AC_SUBST([GNULIB_EXPL]) - GNULIB_EXP2=0; AC_SUBST([GNULIB_EXP2]) - GNULIB_EXP2F=0; AC_SUBST([GNULIB_EXP2F]) - GNULIB_EXP2L=0; AC_SUBST([GNULIB_EXP2L]) - GNULIB_EXPM1=0; AC_SUBST([GNULIB_EXPM1]) - GNULIB_EXPM1F=0; AC_SUBST([GNULIB_EXPM1F]) - GNULIB_EXPM1L=0; AC_SUBST([GNULIB_EXPM1L]) - GNULIB_FABSF=0; AC_SUBST([GNULIB_FABSF]) - GNULIB_FABSL=0; AC_SUBST([GNULIB_FABSL]) - GNULIB_FLOOR=0; AC_SUBST([GNULIB_FLOOR]) - GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF]) - GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL]) - GNULIB_FMA=0; AC_SUBST([GNULIB_FMA]) - GNULIB_FMAF=0; AC_SUBST([GNULIB_FMAF]) - GNULIB_FMAL=0; AC_SUBST([GNULIB_FMAL]) - GNULIB_FMOD=0; AC_SUBST([GNULIB_FMOD]) - GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF]) - GNULIB_FMODL=0; AC_SUBST([GNULIB_FMODL]) - GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF]) - GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP]) - GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL]) - GNULIB_HYPOT=0; AC_SUBST([GNULIB_HYPOT]) - GNULIB_HYPOTF=0; AC_SUBST([GNULIB_HYPOTF]) - GNULIB_HYPOTL=0; AC_SUBST([GNULIB_HYPOTL]) - GNULIB_ILOGB=0; AC_SUBST([GNULIB_ILOGB]) - GNULIB_ILOGBF=0; AC_SUBST([GNULIB_ILOGBF]) - GNULIB_ILOGBL=0; AC_SUBST([GNULIB_ILOGBL]) - GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE]) - GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF]) - GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN]) - GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF]) - GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND]) - GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL]) - GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF]) - GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL]) - GNULIB_LOG=0; AC_SUBST([GNULIB_LOG]) - GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF]) - GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL]) - GNULIB_LOG10=0; AC_SUBST([GNULIB_LOG10]) - GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F]) - GNULIB_LOG10L=0; AC_SUBST([GNULIB_LOG10L]) - GNULIB_LOG1P=0; AC_SUBST([GNULIB_LOG1P]) - GNULIB_LOG1PF=0; AC_SUBST([GNULIB_LOG1PF]) - GNULIB_LOG1PL=0; AC_SUBST([GNULIB_LOG1PL]) - GNULIB_LOG2=0; AC_SUBST([GNULIB_LOG2]) - GNULIB_LOG2F=0; AC_SUBST([GNULIB_LOG2F]) - GNULIB_LOG2L=0; AC_SUBST([GNULIB_LOG2L]) - GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB]) - GNULIB_LOGBF=0; AC_SUBST([GNULIB_LOGBF]) - GNULIB_LOGBL=0; AC_SUBST([GNULIB_LOGBL]) - GNULIB_MODF=0; AC_SUBST([GNULIB_MODF]) - GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF]) - GNULIB_MODFL=0; AC_SUBST([GNULIB_MODFL]) - GNULIB_POWF=0; AC_SUBST([GNULIB_POWF]) - GNULIB_REMAINDER=0; AC_SUBST([GNULIB_REMAINDER]) - GNULIB_REMAINDERF=0; AC_SUBST([GNULIB_REMAINDERF]) - GNULIB_REMAINDERL=0; AC_SUBST([GNULIB_REMAINDERL]) - GNULIB_RINT=0; AC_SUBST([GNULIB_RINT]) - GNULIB_RINTF=0; AC_SUBST([GNULIB_RINTF]) - GNULIB_RINTL=0; AC_SUBST([GNULIB_RINTL]) - GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND]) - GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF]) - GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL]) - GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT]) - GNULIB_SINF=0; AC_SUBST([GNULIB_SINF]) - GNULIB_SINL=0; AC_SUBST([GNULIB_SINL]) - GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF]) - GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF]) - GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL]) - GNULIB_TANF=0; AC_SUBST([GNULIB_TANF]) - GNULIB_TANL=0; AC_SUBST([GNULIB_TANL]) - GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF]) - GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC]) - GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF]) - GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF]) - HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL]) - HAVE_ASINF=1; AC_SUBST([HAVE_ASINF]) - HAVE_ASINL=1; AC_SUBST([HAVE_ASINL]) - HAVE_ATANF=1; AC_SUBST([HAVE_ATANF]) - HAVE_ATANL=1; AC_SUBST([HAVE_ATANL]) - HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F]) - HAVE_CBRT=1; AC_SUBST([HAVE_CBRT]) - HAVE_CBRTF=1; AC_SUBST([HAVE_CBRTF]) - HAVE_CBRTL=1; AC_SUBST([HAVE_CBRTL]) - HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN]) - HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL]) - HAVE_COSF=1; AC_SUBST([HAVE_COSF]) - HAVE_COSL=1; AC_SUBST([HAVE_COSL]) - HAVE_COSHF=1; AC_SUBST([HAVE_COSHF]) - HAVE_EXPF=1; AC_SUBST([HAVE_EXPF]) - HAVE_EXPL=1; AC_SUBST([HAVE_EXPL]) - HAVE_EXPM1=1; AC_SUBST([HAVE_EXPM1]) - HAVE_EXPM1F=1; AC_SUBST([HAVE_EXPM1F]) - HAVE_FABSF=1; AC_SUBST([HAVE_FABSF]) - HAVE_FABSL=1; AC_SUBST([HAVE_FABSL]) - HAVE_FMA=1; AC_SUBST([HAVE_FMA]) - HAVE_FMAF=1; AC_SUBST([HAVE_FMAF]) - HAVE_FMAL=1; AC_SUBST([HAVE_FMAL]) - HAVE_FMODF=1; AC_SUBST([HAVE_FMODF]) - HAVE_FMODL=1; AC_SUBST([HAVE_FMODL]) - HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF]) - HAVE_HYPOTF=1; AC_SUBST([HAVE_HYPOTF]) - HAVE_HYPOTL=1; AC_SUBST([HAVE_HYPOTL]) - HAVE_ILOGB=1; AC_SUBST([HAVE_ILOGB]) - HAVE_ILOGBF=1; AC_SUBST([HAVE_ILOGBF]) - HAVE_ILOGBL=1; AC_SUBST([HAVE_ILOGBL]) - HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF]) - HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND]) - HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL]) - HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF]) - HAVE_LOGF=1; AC_SUBST([HAVE_LOGF]) - HAVE_LOGL=1; AC_SUBST([HAVE_LOGL]) - HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F]) - HAVE_LOG10L=1; AC_SUBST([HAVE_LOG10L]) - HAVE_LOG1P=1; AC_SUBST([HAVE_LOG1P]) - HAVE_LOG1PF=1; AC_SUBST([HAVE_LOG1PF]) - HAVE_LOG1PL=1; AC_SUBST([HAVE_LOG1PL]) - HAVE_LOGBF=1; AC_SUBST([HAVE_LOGBF]) - HAVE_LOGBL=1; AC_SUBST([HAVE_LOGBL]) - HAVE_MODFF=1; AC_SUBST([HAVE_MODFF]) - HAVE_MODFL=1; AC_SUBST([HAVE_MODFL]) - HAVE_POWF=1; AC_SUBST([HAVE_POWF]) - HAVE_REMAINDER=1; AC_SUBST([HAVE_REMAINDER]) - HAVE_REMAINDERF=1; AC_SUBST([HAVE_REMAINDERF]) - HAVE_RINT=1; AC_SUBST([HAVE_RINT]) - HAVE_RINTL=1; AC_SUBST([HAVE_RINTL]) - HAVE_SINF=1; AC_SUBST([HAVE_SINF]) - HAVE_SINL=1; AC_SUBST([HAVE_SINL]) - HAVE_SINHF=1; AC_SUBST([HAVE_SINHF]) - HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF]) - HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL]) - HAVE_TANF=1; AC_SUBST([HAVE_TANF]) - HAVE_TANL=1; AC_SUBST([HAVE_TANL]) - HAVE_TANHF=1; AC_SUBST([HAVE_TANHF]) - HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL]) - HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL]) - HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL]) - HAVE_DECL_CBRTF=1; AC_SUBST([HAVE_DECL_CBRTF]) - HAVE_DECL_CBRTL=1; AC_SUBST([HAVE_DECL_CBRTL]) - HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF]) - HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL]) - HAVE_DECL_COPYSIGNF=1; AC_SUBST([HAVE_DECL_COPYSIGNF]) - HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) - HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) - HAVE_DECL_EXP2=1; AC_SUBST([HAVE_DECL_EXP2]) - HAVE_DECL_EXP2F=1; AC_SUBST([HAVE_DECL_EXP2F]) - HAVE_DECL_EXP2L=1; AC_SUBST([HAVE_DECL_EXP2L]) - HAVE_DECL_EXPM1L=1; AC_SUBST([HAVE_DECL_EXPM1L]) - HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF]) - HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL]) - HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL]) - HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL]) - HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) - HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L]) - HAVE_DECL_LOG2=1; AC_SUBST([HAVE_DECL_LOG2]) - HAVE_DECL_LOG2F=1; AC_SUBST([HAVE_DECL_LOG2F]) - HAVE_DECL_LOG2L=1; AC_SUBST([HAVE_DECL_LOG2L]) - HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB]) - HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER]) - HAVE_DECL_REMAINDERL=1; AC_SUBST([HAVE_DECL_REMAINDERL]) - HAVE_DECL_RINTF=1; AC_SUBST([HAVE_DECL_RINTF]) - HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND]) - HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF]) - HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL]) - HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL]) - HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL]) - HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL]) - HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) - HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) - HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL]) - REPLACE_CBRTF=0; AC_SUBST([REPLACE_CBRTF]) - REPLACE_CBRTL=0; AC_SUBST([REPLACE_CBRTL]) - REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL]) - REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) - REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) - REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1]) - REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F]) - REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2]) - REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L]) - REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL]) - REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR]) - REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF]) - REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL]) - REPLACE_FMA=0; AC_SUBST([REPLACE_FMA]) - REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF]) - REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL]) - REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD]) - REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF]) - REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL]) - REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF]) - REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP]) - REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL]) - REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL]) - REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT]) - REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF]) - REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL]) - REPLACE_ILOGB=0; AC_SUBST([REPLACE_ILOGB]) - REPLACE_ILOGBF=0; AC_SUBST([REPLACE_ILOGBF]) - REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) - REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) - REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) - REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL]) - REPLACE_LOG=0; AC_SUBST([REPLACE_LOG]) - REPLACE_LOGF=0; AC_SUBST([REPLACE_LOGF]) - REPLACE_LOGL=0; AC_SUBST([REPLACE_LOGL]) - REPLACE_LOG10=0; AC_SUBST([REPLACE_LOG10]) - REPLACE_LOG10F=0; AC_SUBST([REPLACE_LOG10F]) - REPLACE_LOG10L=0; AC_SUBST([REPLACE_LOG10L]) - REPLACE_LOG1P=0; AC_SUBST([REPLACE_LOG1P]) - REPLACE_LOG1PF=0; AC_SUBST([REPLACE_LOG1PF]) - REPLACE_LOG1PL=0; AC_SUBST([REPLACE_LOG1PL]) - REPLACE_LOG2=0; AC_SUBST([REPLACE_LOG2]) - REPLACE_LOG2F=0; AC_SUBST([REPLACE_LOG2F]) - REPLACE_LOG2L=0; AC_SUBST([REPLACE_LOG2L]) - REPLACE_LOGB=0; AC_SUBST([REPLACE_LOGB]) - REPLACE_LOGBF=0; AC_SUBST([REPLACE_LOGBF]) - REPLACE_LOGBL=0; AC_SUBST([REPLACE_LOGBL]) - REPLACE_MODF=0; AC_SUBST([REPLACE_MODF]) - REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF]) - REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL]) - REPLACE_NAN=0; AC_SUBST([REPLACE_NAN]) - REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER]) - REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF]) - REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL]) - REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) - REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) - REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) - REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) - REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC]) - REPLACE_SQRTL=0; AC_SUBST([REPLACE_SQRTL]) - REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC]) - REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF]) - REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) -]) - -# gl_LONG_DOUBLE_VS_DOUBLE -# determines whether 'long double' and 'double' have the same representation. -# Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines -# HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly. -# The currently known platforms where this is the case are: -# Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9. -AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE], -[ - AC_CACHE_CHECK([whether long double and double are the same], - [gl_cv_long_double_equals_double], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include ]], - [[typedef int check[sizeof (long double) == sizeof (double) - && LDBL_MANT_DIG == DBL_MANT_DIG - && LDBL_MAX_EXP == DBL_MAX_EXP - && LDBL_MIN_EXP == DBL_MIN_EXP - ? 1 : -1]; - ]])], - [gl_cv_long_double_equals_double=yes], - [gl_cv_long_double_equals_double=no]) - ]) - if test $gl_cv_long_double_equals_double = yes; then - AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1], - [Define to 1 if 'long double' and 'double' have the same representation.]) - HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 - else - HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 - fi - AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]) -]) diff --git a/src/gl/m4/memchr.m4 b/src/gl/m4/memchr.m4 deleted file mode 100644 index 25d32f0ec9..0000000000 --- a/src/gl/m4/memchr.m4 +++ /dev/null @@ -1,88 +0,0 @@ -# memchr.m4 serial 12 -dnl Copyright (C) 2002-2004, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN_ONCE([gl_FUNC_MEMCHR], -[ - dnl Check for prerequisites for memory fence checks. - gl_FUNC_MMAP_ANON - AC_CHECK_HEADERS_ONCE([sys/mman.h]) - AC_CHECK_FUNCS_ONCE([mprotect]) - - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [ - dnl These days, we assume memchr is present. But if support for old - dnl platforms is desired: - AC_CHECK_FUNCS_ONCE([memchr]) - if test $ac_cv_func_memchr = no; then - HAVE_MEMCHR=0 - fi - ]) - if test $HAVE_MEMCHR = 1; then - # Detect platform-specific bugs in some versions of glibc: - # memchr should not dereference anything with length 0 - # http://bugzilla.redhat.com/499689 - # memchr should not dereference overestimated length after a match - # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 - # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 - # Assume that memchr works on platforms that lack mprotect. - AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], - [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -#include -#if HAVE_SYS_MMAN_H -# include -# include -# include -# include -# ifndef MAP_FILE -# define MAP_FILE 0 -# endif -#endif -]], [[ - int result = 0; - char *fence = NULL; -#if HAVE_SYS_MMAN_H && HAVE_MPROTECT -# if HAVE_MAP_ANONYMOUS - const int flags = MAP_ANONYMOUS | MAP_PRIVATE; - const int fd = -1; -# else /* !HAVE_MAP_ANONYMOUS */ - const int flags = MAP_FILE | MAP_PRIVATE; - int fd = open ("/dev/zero", O_RDONLY, 0666); - if (fd >= 0) -# endif - { - int pagesize = getpagesize (); - char *two_pages = - (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, - flags, fd, 0); - if (two_pages != (char *)(-1) - && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) - fence = two_pages + pagesize; - } -#endif - if (fence) - { - if (memchr (fence, 0, 0)) - result |= 1; - strcpy (fence - 9, "12345678"); - if (memchr (fence - 9, 0, 79) != fence - 1) - result |= 2; - if (memchr (fence - 1, 0, 3) != fence - 1) - result |= 4; - } - return result; -]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], - [dnl Be pessimistic for now. - gl_cv_func_memchr_works="guessing no"])]) - if test "$gl_cv_func_memchr_works" != yes; then - REPLACE_MEMCHR=1 - fi - fi -]) - -# Prerequisites of lib/memchr.c. -AC_DEFUN([gl_PREREQ_MEMCHR], [ - AC_CHECK_HEADERS([bp-sym.h]) -]) diff --git a/src/gl/m4/minmax.m4 b/src/gl/m4/minmax.m4 deleted file mode 100644 index 9c43e6452c..0000000000 --- a/src/gl/m4/minmax.m4 +++ /dev/null @@ -1,44 +0,0 @@ -# minmax.m4 serial 4 -dnl Copyright (C) 2005, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_PREREQ([2.53]) - -AC_DEFUN([gl_MINMAX], -[ - AC_REQUIRE([gl_PREREQ_MINMAX]) -]) - -# Prerequisites of lib/minmax.h. -AC_DEFUN([gl_PREREQ_MINMAX], -[ - gl_MINMAX_IN_HEADER([limits.h]) - gl_MINMAX_IN_HEADER([sys/param.h]) -]) - -dnl gl_MINMAX_IN_HEADER(HEADER) -dnl The parameter has to be a literal header name; it cannot be macro, -dnl nor a shell variable. (Because autoheader collects only AC_DEFINE -dnl invocations with a literal macro name.) -AC_DEFUN([gl_MINMAX_IN_HEADER], -[ - m4_pushdef([header], AS_TR_SH([$1])) - m4_pushdef([HEADER], AS_TR_CPP([$1])) - AC_CACHE_CHECK([whether <$1> defines MIN and MAX], - [gl_cv_minmax_in_]header, - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include <$1> - int x = MIN (42, 17);]], - [[]])], - [gl_cv_minmax_in_]header[=yes], - [gl_cv_minmax_in_]header[=no])]) - if test $gl_cv_minmax_in_[]header = yes; then - AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, - [Define to 1 if <$1> defines the MIN and MAX macros.]) - fi - m4_popdef([HEADER]) - m4_popdef([header]) -]) diff --git a/src/gl/m4/mktime.m4 b/src/gl/m4/mktime.m4 deleted file mode 100644 index 23cad732ff..0000000000 --- a/src/gl/m4/mktime.m4 +++ /dev/null @@ -1,268 +0,0 @@ -# serial 27 -dnl Copyright (C) 2002-2003, 2005-2007, 2009-2016 Free Software Foundation, -dnl Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Jim Meyering. - -AC_DEFUN([gl_TIME_T_IS_SIGNED], -[ - AC_CACHE_CHECK([whether time_t is signed], - [gl_cv_time_t_is_signed], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include - char time_t_signed[(time_t) -1 < 0 ? 1 : -1];]])], - [gl_cv_time_t_is_signed=yes], - [gl_cv_time_t_is_signed=no])]) - if test $gl_cv_time_t_is_signed = yes; then - AC_DEFINE([TIME_T_IS_SIGNED], [1], [Define to 1 if time_t is signed.]) - fi -]) - -AC_DEFUN([gl_FUNC_MKTIME], -[ - AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) - AC_REQUIRE([gl_TIME_T_IS_SIGNED]) - - dnl We don't use AC_FUNC_MKTIME any more, because it is no longer maintained - dnl in Autoconf and because it invokes AC_LIBOBJ. - AC_CHECK_HEADERS_ONCE([unistd.h]) - AC_CHECK_DECLS_ONCE([alarm]) - AC_CHECK_FUNCS_ONCE([tzset]) - AC_REQUIRE([gl_MULTIARCH]) - if test $APPLE_UNIVERSAL_BUILD = 1; then - # A universal build on Apple Mac OS X platforms. - # The test result would be 'yes' in 32-bit mode and 'no' in 64-bit mode. - # But we need a configuration result that is valid in both modes. - gl_cv_func_working_mktime=no - fi - AC_CACHE_CHECK([for working mktime], [gl_cv_func_working_mktime], - [AC_RUN_IFELSE( - [AC_LANG_SOURCE( -[[/* Test program from Paul Eggert and Tony Leneis. */ -#include -#include -#include - -#ifdef HAVE_UNISTD_H -# include -#endif - -#if HAVE_DECL_ALARM -# include -#endif - -/* Work around redefinition to rpl_putenv by other config tests. */ -#undef putenv - -static time_t time_t_max; -static time_t time_t_min; - -/* Values we'll use to set the TZ environment variable. */ -static char *tz_strings[] = { - (char *) 0, "TZ=GMT0", "TZ=JST-9", - "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00" -}; -#define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) - -/* Return 0 if mktime fails to convert a date in the spring-forward gap. - Based on a problem report from Andreas Jaeger. */ -static int -spring_forward_gap () -{ - /* glibc (up to about 1998-10-07) failed this test. */ - struct tm tm; - - /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" - instead of "TZ=America/Vancouver" in order to detect the bug even - on systems that don't support the Olson extension, or don't have the - full zoneinfo tables installed. */ - putenv ("TZ=PST8PDT,M4.1.0,M10.5.0"); - - tm.tm_year = 98; - tm.tm_mon = 3; - tm.tm_mday = 5; - tm.tm_hour = 2; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_isdst = -1; - return mktime (&tm) != (time_t) -1; -} - -static int -mktime_test1 (time_t now) -{ - struct tm *lt; - return ! (lt = localtime (&now)) || mktime (lt) == now; -} - -static int -mktime_test (time_t now) -{ - return (mktime_test1 (now) - && mktime_test1 ((time_t) (time_t_max - now)) - && mktime_test1 ((time_t) (time_t_min + now))); -} - -static int -irix_6_4_bug () -{ - /* Based on code from Ariel Faigon. */ - struct tm tm; - tm.tm_year = 96; - tm.tm_mon = 3; - tm.tm_mday = 0; - tm.tm_hour = 0; - tm.tm_min = 0; - tm.tm_sec = 0; - tm.tm_isdst = -1; - mktime (&tm); - return tm.tm_mon == 2 && tm.tm_mday == 31; -} - -static int -bigtime_test (int j) -{ - struct tm tm; - time_t now; - tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j; - now = mktime (&tm); - if (now != (time_t) -1) - { - struct tm *lt = localtime (&now); - if (! (lt - && lt->tm_year == tm.tm_year - && lt->tm_mon == tm.tm_mon - && lt->tm_mday == tm.tm_mday - && lt->tm_hour == tm.tm_hour - && lt->tm_min == tm.tm_min - && lt->tm_sec == tm.tm_sec - && lt->tm_yday == tm.tm_yday - && lt->tm_wday == tm.tm_wday - && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst) - == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst)))) - return 0; - } - return 1; -} - -static int -year_2050_test () -{ - /* The correct answer for 2050-02-01 00:00:00 in Pacific time, - ignoring leap seconds. */ - unsigned long int answer = 2527315200UL; - - struct tm tm; - time_t t; - tm.tm_year = 2050 - 1900; - tm.tm_mon = 2 - 1; - tm.tm_mday = 1; - tm.tm_hour = tm.tm_min = tm.tm_sec = 0; - tm.tm_isdst = -1; - - /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" - instead of "TZ=America/Vancouver" in order to detect the bug even - on systems that don't support the Olson extension, or don't have the - full zoneinfo tables installed. */ - putenv ("TZ=PST8PDT,M4.1.0,M10.5.0"); - - t = mktime (&tm); - - /* Check that the result is either a failure, or close enough - to the correct answer that we can assume the discrepancy is - due to leap seconds. */ - return (t == (time_t) -1 - || (0 < t && answer - 120 <= t && t <= answer + 120)); -} - -int -main () -{ - int result = 0; - time_t t, delta; - int i, j; - int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1; - -#if HAVE_DECL_ALARM - /* This test makes some buggy mktime implementations loop. - Give up after 60 seconds; a mktime slower than that - isn't worth using anyway. */ - signal (SIGALRM, SIG_DFL); - alarm (60); -#endif - - time_t_max = (! TIME_T_IS_SIGNED - ? (time_t) -1 - : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) - * 2 + 1)); - time_t_min = (! TIME_T_IS_SIGNED - ? (time_t) 0 - : time_t_signed_magnitude - ? ~ (time_t) 0 - : ~ time_t_max); - - delta = time_t_max / 997; /* a suitable prime number */ - for (i = 0; i < N_STRINGS; i++) - { - if (tz_strings[i]) - putenv (tz_strings[i]); - - for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta) - if (! mktime_test (t)) - result |= 1; - if ((result & 2) == 0 - && ! (mktime_test ((time_t) 1) - && mktime_test ((time_t) (60 * 60)) - && mktime_test ((time_t) (60 * 60 * 24)))) - result |= 2; - - for (j = 1; (result & 4) == 0; j <<= 1) - { - if (! bigtime_test (j)) - result |= 4; - if (INT_MAX / 2 < j) - break; - } - if ((result & 8) == 0 && ! bigtime_test (INT_MAX)) - result |= 8; - } - if (! irix_6_4_bug ()) - result |= 16; - if (! spring_forward_gap ()) - result |= 32; - if (! year_2050_test ()) - result |= 64; - return result; -}]])], - [gl_cv_func_working_mktime=yes], - [gl_cv_func_working_mktime=no], - [gl_cv_func_working_mktime=no]) - ]) - - if test $gl_cv_func_working_mktime = no; then - REPLACE_MKTIME=1 - else - REPLACE_MKTIME=0 - fi -]) - -AC_DEFUN([gl_FUNC_MKTIME_INTERNAL], [ - AC_REQUIRE([gl_FUNC_MKTIME]) - if test $REPLACE_MKTIME = 0; then - dnl BeOS has __mktime_internal in libc, but other platforms don't. - AC_CHECK_FUNC([__mktime_internal], - [AC_DEFINE([mktime_internal], [__mktime_internal], - [Define to the real name of the mktime_internal function.]) - ], - [dnl mktime works but it doesn't export __mktime_internal, - dnl so we need to substitute our own mktime implementation. - REPLACE_MKTIME=1 - ]) - fi -]) - -# Prerequisites of lib/mktime.c. -AC_DEFUN([gl_PREREQ_MKTIME], [:]) diff --git a/src/gl/m4/mmap-anon.m4 b/src/gl/m4/mmap-anon.m4 deleted file mode 100644 index 853c89dc9b..0000000000 --- a/src/gl/m4/mmap-anon.m4 +++ /dev/null @@ -1,55 +0,0 @@ -# mmap-anon.m4 serial 10 -dnl Copyright (C) 2005, 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Detect how mmap can be used to create anonymous (not file-backed) memory -# mappings. -# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS -# and MAP_ANON exist and have the same value. -# - On HP-UX, only MAP_ANONYMOUS exists. -# - On Mac OS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists. -# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be -# used. - -AC_DEFUN([gl_FUNC_MMAP_ANON], -[ - dnl Persuade glibc to define MAP_ANONYMOUS. - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it - # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is - # irrelevant for anonymous mappings. - AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no]) - - # Try to allow MAP_ANONYMOUS. - gl_have_mmap_anonymous=no - if test $gl_have_mmap = yes; then - AC_MSG_CHECKING([for MAP_ANONYMOUS]) - AC_EGREP_CPP([I cannot identify this map], [ -#include -#ifdef MAP_ANONYMOUS - I cannot identify this map -#endif -], - [gl_have_mmap_anonymous=yes]) - if test $gl_have_mmap_anonymous != yes; then - AC_EGREP_CPP([I cannot identify this map], [ -#include -#ifdef MAP_ANON - I cannot identify this map -#endif -], - [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON], - [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.]) - gl_have_mmap_anonymous=yes]) - fi - AC_MSG_RESULT([$gl_have_mmap_anonymous]) - if test $gl_have_mmap_anonymous = yes; then - AC_DEFINE([HAVE_MAP_ANONYMOUS], [1], - [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including - config.h and .]) - fi - fi -]) diff --git a/src/gl/m4/msvc-inval.m4 b/src/gl/m4/msvc-inval.m4 deleted file mode 100644 index f5e4c89309..0000000000 --- a/src/gl/m4/msvc-inval.m4 +++ /dev/null @@ -1,19 +0,0 @@ -# msvc-inval.m4 serial 1 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_MSVC_INVAL], -[ - AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) - if test $ac_cv_func__set_invalid_parameter_handler = yes; then - HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 - AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], - [Define to 1 on MSVC platforms that have the "invalid parameter handler" - concept.]) - else - HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 - fi - AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) -]) diff --git a/src/gl/m4/msvc-nothrow.m4 b/src/gl/m4/msvc-nothrow.m4 deleted file mode 100644 index 58f5c0bc20..0000000000 --- a/src/gl/m4/msvc-nothrow.m4 +++ /dev/null @@ -1,10 +0,0 @@ -# msvc-nothrow.m4 serial 1 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_MSVC_NOTHROW], -[ - AC_REQUIRE([gl_MSVC_INVAL]) -]) diff --git a/src/gl/m4/multiarch.m4 b/src/gl/m4/multiarch.m4 deleted file mode 100644 index 43b5d05750..0000000000 --- a/src/gl/m4/multiarch.m4 +++ /dev/null @@ -1,62 +0,0 @@ -# multiarch.m4 serial 7 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Determine whether the compiler is or may be producing universal binaries. -# -# On Mac OS X 10.5 and later systems, the user can create libraries and -# executables that work on multiple system types--known as "fat" or -# "universal" binaries--by specifying multiple '-arch' options to the -# compiler but only a single '-arch' option to the preprocessor. Like -# this: -# -# ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ -# CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ -# CPP="gcc -E" CXXCPP="g++ -E" -# -# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. - -AC_DEFUN_ONCE([gl_MULTIARCH], -[ - dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. - gl_cv_c_multiarch=no - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE( - [[#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - ]])], - [ - dnl Check for potential -arch flags. It is not universal unless - dnl there are at least two -arch flags with different values. - arch= - prev= - for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do - if test -n "$prev"; then - case $word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$arch" || test "$arch" = "$word"; then - arch="$word" - else - gl_cv_c_multiarch=yes - fi - ;; - esac - prev= - else - if test "x$word" = "x-arch"; then - prev=arch - fi - fi - done - ]) - if test $gl_cv_c_multiarch = yes; then - APPLE_UNIVERSAL_BUILD=1 - else - APPLE_UNIVERSAL_BUILD=0 - fi - AC_SUBST([APPLE_UNIVERSAL_BUILD]) -]) diff --git a/src/gl/m4/netdb_h.m4 b/src/gl/m4/netdb_h.m4 deleted file mode 100644 index 4e5206cebe..0000000000 --- a/src/gl/m4/netdb_h.m4 +++ /dev/null @@ -1,43 +0,0 @@ -# netdb_h.m4 serial 11 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_HEADER_NETDB], -[ - AC_REQUIRE([gl_NETDB_H_DEFAULTS]) - gl_CHECK_NEXT_HEADERS([netdb.h]) - if test $ac_cv_header_netdb_h = yes; then - HAVE_NETDB_H=1 - else - HAVE_NETDB_H=0 - fi - AC_SUBST([HAVE_NETDB_H]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[#include ]], - [getaddrinfo freeaddrinfo gai_strerror getnameinfo]) -]) - -AC_DEFUN([gl_NETDB_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_NETDB_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_NETDB_H_DEFAULTS], -[ - GNULIB_GETADDRINFO=0; AC_SUBST([GNULIB_GETADDRINFO]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_STRUCT_ADDRINFO=1; AC_SUBST([HAVE_STRUCT_ADDRINFO]) - HAVE_DECL_FREEADDRINFO=1; AC_SUBST([HAVE_DECL_FREEADDRINFO]) - HAVE_DECL_GAI_STRERROR=1; AC_SUBST([HAVE_DECL_GAI_STRERROR]) - HAVE_DECL_GETADDRINFO=1; AC_SUBST([HAVE_DECL_GETADDRINFO]) - HAVE_DECL_GETNAMEINFO=1; AC_SUBST([HAVE_DECL_GETNAMEINFO]) - REPLACE_GAI_STRERROR=0; AC_SUBST([REPLACE_GAI_STRERROR]) -]) diff --git a/src/gl/m4/netinet_in_h.m4 b/src/gl/m4/netinet_in_h.m4 deleted file mode 100644 index 93dcc68947..0000000000 --- a/src/gl/m4/netinet_in_h.m4 +++ /dev/null @@ -1,31 +0,0 @@ -# netinet_in_h.m4 serial 5 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_HEADER_NETINET_IN], -[ - AC_CACHE_CHECK([whether is self-contained], - [gl_cv_header_netinet_in_h_selfcontained], - [ - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])], - [gl_cv_header_netinet_in_h_selfcontained=yes], - [gl_cv_header_netinet_in_h_selfcontained=no]) - ]) - if test $gl_cv_header_netinet_in_h_selfcontained = yes; then - NETINET_IN_H='' - else - NETINET_IN_H='netinet/in.h' - AC_CHECK_HEADERS([netinet/in.h]) - gl_CHECK_NEXT_HEADERS([netinet/in.h]) - if test $ac_cv_header_netinet_in_h = yes; then - HAVE_NETINET_IN_H=1 - else - HAVE_NETINET_IN_H=0 - fi - AC_SUBST([HAVE_NETINET_IN_H]) - fi - AC_SUBST([NETINET_IN_H]) - AM_CONDITIONAL([GL_GENERATE_NETINET_IN_H], [test -n "$NETINET_IN_H"]) -]) diff --git a/src/gl/m4/off_t.m4 b/src/gl/m4/off_t.m4 deleted file mode 100644 index 282751b47b..0000000000 --- a/src/gl/m4/off_t.m4 +++ /dev/null @@ -1,18 +0,0 @@ -# off_t.m4 serial 1 -dnl Copyright (C) 2012-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Check whether to override the 'off_t' type. -dnl Set WINDOWS_64_BIT_OFF_T. - -AC_DEFUN([gl_TYPE_OFF_T], -[ - m4_ifdef([gl_LARGEFILE], [ - AC_REQUIRE([gl_LARGEFILE]) - ], [ - WINDOWS_64_BIT_OFF_T=0 - ]) - AC_SUBST([WINDOWS_64_BIT_OFF_T]) -]) diff --git a/src/gl/m4/parse-datetime.m4 b/src/gl/m4/parse-datetime.m4 deleted file mode 100644 index 6606ab286c..0000000000 --- a/src/gl/m4/parse-datetime.m4 +++ /dev/null @@ -1,55 +0,0 @@ -# parse-datetime.m4 serial 21 -dnl Copyright (C) 2002-2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Define HAVE_COMPOUND_LITERALS if the C compiler supports compound literals -dnl as in ISO C99. -dnl Note that compound literals such as (struct s) { 3, 4 } can be used for -dnl initialization of stack-allocated variables, but are not constant -dnl expressions and therefore cannot be used as initializer for global or -dnl static variables (even though gcc supports this in pre-C99 mode). -AC_DEFUN([gl_C_COMPOUND_LITERALS], -[ - AC_CACHE_CHECK([for compound literals], [gl_cv_compound_literals], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[struct s { int i, j; };]], - [[struct s t = (struct s) { 3, 4 }; - if (t.i != 0) return 0;]])], - gl_cv_compound_literals=yes, - gl_cv_compound_literals=no)]) - if test $gl_cv_compound_literals = yes; then - AC_DEFINE([HAVE_COMPOUND_LITERALS], [1], - [Define if you have compound literals.]) - fi -]) - -AC_DEFUN([gl_PARSE_DATETIME], -[ - dnl Prerequisites of lib/parse-datetime.h. - AC_REQUIRE([AM_STDBOOL_H]) - AC_REQUIRE([gl_TIMESPEC]) - - dnl Prerequisites of lib/parse-datetime.y. - AC_REQUIRE([gl_BISON]) - AC_REQUIRE([gl_C_COMPOUND_LITERALS]) - AC_STRUCT_TIMEZONE - AC_REQUIRE([gl_CLOCK_TIME]) - AC_REQUIRE([gl_TM_GMTOFF]) - AC_COMPILE_IFELSE( - [AC_LANG_SOURCE([[ -#include /* for time_t */ -#include /* for CHAR_BIT, LONG_MIN, LONG_MAX */ -#define TYPE_MINIMUM(t) \ - ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) -#define TYPE_MAXIMUM(t) \ - ((t) ((t) 0 < (t) -1 \ - ? (t) -1 \ - : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) -typedef int verify_min[2 * (LONG_MIN <= TYPE_MINIMUM (time_t)) - 1]; -typedef int verify_max[2 * (TYPE_MAXIMUM (time_t) <= LONG_MAX) - 1]; - ]])], - [AC_DEFINE([TIME_T_FITS_IN_LONG_INT], [1], - [Define to 1 if all 'time_t' values fit in a 'long int'.]) - ]) -]) diff --git a/src/gl/m4/printf.m4 b/src/gl/m4/printf.m4 deleted file mode 100644 index c7a14b20e0..0000000000 --- a/src/gl/m4/printf.m4 +++ /dev/null @@ -1,1557 +0,0 @@ -# printf.m4 serial 52 -dnl Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Test whether the *printf family of functions supports the 'j', 'z', 't', -dnl 'L' size specifiers. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_sizes_c99. - -AC_DEFUN([gl_PRINTF_SIZES_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_AC_HEADER_STDINT_H]) - AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports size specifiers as in C99], - [gl_cv_func_printf_sizes_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#include -#if HAVE_STDINT_H_WITH_UINTMAX -# include -#endif -#if HAVE_INTTYPES_H_WITH_UINTMAX -# include -#endif -static char buf[100]; -int main () -{ - int result = 0; -#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX - buf[0] = '\0'; - if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 - || strcmp (buf, "12345671 33") != 0) - result |= 1; -#else - result |= 1; -#endif - buf[0] = '\0'; - if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 - || strcmp (buf, "12345672 33") != 0) - result |= 2; - buf[0] = '\0'; - if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 - || strcmp (buf, "12345673 33") != 0) - result |= 4; - buf[0] = '\0'; - if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 - || strcmp (buf, "1.5 33") != 0) - result |= 8; - return result; -}]])], - [gl_cv_func_printf_sizes_c99=yes], - [gl_cv_func_printf_sizes_c99=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_printf_sizes_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; - darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on OpenBSD >= 3.9. - openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) - gl_cv_func_printf_sizes_c99="guessing no";; - openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; - # Guess yes on Solaris >= 2.10. - solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; - solaris*) gl_cv_func_printf_sizes_c99="guessing no";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_printf_sizes_c99="guessing no";; - netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_sizes_c99="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports 'long double' -dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_long_double. - -AC_DEFUN([gl_PRINTF_LONG_DOUBLE], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports 'long double' arguments], - [gl_cv_func_printf_long_double], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[10000]; -int main () -{ - int result = 0; - buf[0] = '\0'; - if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 - || strcmp (buf, "1.750000 33") != 0) - result |= 1; - buf[0] = '\0'; - if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 - || strcmp (buf, "1.750000e+00 33") != 0) - result |= 2; - buf[0] = '\0'; - if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 - || strcmp (buf, "1.75 33") != 0) - result |= 4; - return result; -}]])], - [gl_cv_func_printf_long_double=yes], - [gl_cv_func_printf_long_double=no], - [ -changequote(,)dnl - case "$host_os" in - beos*) gl_cv_func_printf_long_double="guessing no";; - mingw* | pw*) gl_cv_func_printf_long_double="guessing no";; - *) gl_cv_func_printf_long_double="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports infinite and NaN -dnl 'double' arguments and negative zero arguments in the %f, %e, %g -dnl directives. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_infinite. - -AC_DEFUN([gl_PRINTF_INFINITE], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], - [gl_cv_func_printf_infinite], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static int -strisnan (const char *string, size_t start_index, size_t end_index) -{ - if (start_index < end_index) - { - if (string[start_index] == '-') - start_index++; - if (start_index + 3 <= end_index - && memcmp (string + start_index, "nan", 3) == 0) - { - start_index += 3; - if (start_index == end_index - || (string[start_index] == '(' && string[end_index - 1] == ')')) - return 1; - } - } - return 0; -} -static int -have_minus_zero () -{ - static double plus_zero = 0.0; - double minus_zero = - plus_zero; - return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; -} -static char buf[10000]; -static double zero = 0.0; -int main () -{ - int result = 0; - if (sprintf (buf, "%f", 1.0 / zero) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%f", -1.0 / zero) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%f", zero / zero) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%e", 1.0 / zero) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 4; - if (sprintf (buf, "%e", -1.0 / zero) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 4; - if (sprintf (buf, "%e", zero / zero) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 8; - if (sprintf (buf, "%g", 1.0 / zero) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 16; - if (sprintf (buf, "%g", -1.0 / zero) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 16; - if (sprintf (buf, "%g", zero / zero) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 32; - /* This test fails on HP-UX 10.20. */ - if (have_minus_zero ()) - if (sprintf (buf, "%g", - zero) < 0 - || strcmp (buf, "-0") != 0) - result |= 64; - return result; -}]])], - [gl_cv_func_printf_infinite=yes], - [gl_cv_func_printf_infinite=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on FreeBSD >= 6. - freebsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; - darwin*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on HP-UX >= 11. - hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; - hpux*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_printf_infinite="guessing no";; - netbsd*) gl_cv_func_printf_infinite="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_printf_infinite="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_infinite="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports infinite and NaN -dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_infinite_long_double. - -AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_BIGENDIAN]) - AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - dnl The user can set or unset the variable gl_printf_safe to indicate - dnl that he wishes a safe handling of non-IEEE-754 'long double' values. - if test -n "$gl_printf_safe"; then - AC_DEFINE([CHECK_PRINTF_SAFE], [1], - [Define if you wish *printf() functions that have a safe handling of - non-IEEE-754 'long double' values.]) - fi - case "$gl_cv_func_printf_long_double" in - *yes) - AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], - [gl_cv_func_printf_infinite_long_double], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -]GL_NOCRASH[ -#include -#include -#include -static int -strisnan (const char *string, size_t start_index, size_t end_index) -{ - if (start_index < end_index) - { - if (string[start_index] == '-') - start_index++; - if (start_index + 3 <= end_index - && memcmp (string + start_index, "nan", 3) == 0) - { - start_index += 3; - if (start_index == end_index - || (string[start_index] == '(' && string[end_index - 1] == ')')) - return 1; - } - } - return 0; -} -static char buf[10000]; -static long double zeroL = 0.0L; -int main () -{ - int result = 0; - nocrash_init(); - if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 1; - if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Le", zeroL / zeroL) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 1; - if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 - || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 - || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) - result |= 1; - if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 1; -#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE -/* Representation of an 80-bit 'long double' as an initializer for a sequence - of 'unsigned int' words. */ -# ifdef WORDS_BIGENDIAN -# define LDBL80_WORDS(exponent,manthi,mantlo) \ - { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ - ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ - (unsigned int) (mantlo) << 16 \ - } -# else -# define LDBL80_WORDS(exponent,manthi,mantlo) \ - { mantlo, manthi, exponent } -# endif - { /* Quiet NaN. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Le", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Lg", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - } - { - /* Signalling NaN. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Le", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - if (sprintf (buf, "%Lg", x.value) < 0 - || !strisnan (buf, 0, strlen (buf))) - result |= 2; - } - { /* Pseudo-NaN. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 4; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 4; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 4; - } - { /* Pseudo-Infinity. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 8; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 8; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 8; - } - { /* Pseudo-Zero. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 16; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 16; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 16; - } - { /* Unnormalized number. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 32; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 32; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 32; - } - { /* Pseudo-Denormal. */ - static union { unsigned int word[4]; long double value; } x = - { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; - if (sprintf (buf, "%Lf", x.value) <= 0) - result |= 64; - if (sprintf (buf, "%Le", x.value) <= 0) - result |= 64; - if (sprintf (buf, "%Lg", x.value) <= 0) - result |= 64; - } -#endif - return result; -}]])], - [gl_cv_func_printf_infinite_long_double=yes], - [gl_cv_func_printf_infinite_long_double=no], - [ -changequote(,)dnl - case "$host_cpu" in - # Guess no on ia64, x86_64, i386. - ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; - *) - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; - # Guess yes on FreeBSD >= 6. - freebsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; - # Guess yes on HP-UX >= 11. - hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; - hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_infinite_long_double="guessing no";; - esac - ;; - esac -changequote([,])dnl - ]) - ]) - ;; - *) - gl_cv_func_printf_infinite_long_double="irrelevant" - ;; - esac -]) - -dnl Test whether the *printf family of functions supports the 'a' and 'A' -dnl conversion specifier for hexadecimal output of floating-point numbers. -dnl (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_directive_a. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_A], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], - [gl_cv_func_printf_directive_a], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -static double zero = 0.0; -int main () -{ - int result = 0; - if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 - || (strcmp (buf, "0x1.922p+1 33") != 0 - && strcmp (buf, "0x3.244p+0 33") != 0 - && strcmp (buf, "0x6.488p-1 33") != 0 - && strcmp (buf, "0xc.91p-2 33") != 0)) - result |= 1; - if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 - || (strcmp (buf, "-0X1.922P+1 33") != 0 - && strcmp (buf, "-0X3.244P+0 33") != 0 - && strcmp (buf, "-0X6.488P-1 33") != 0 - && strcmp (buf, "-0XC.91P-2 33") != 0)) - result |= 2; - /* This catches a FreeBSD 6.1 bug: it doesn't round. */ - if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 - || (strcmp (buf, "0x1.83p+0 33") != 0 - && strcmp (buf, "0x3.05p-1 33") != 0 - && strcmp (buf, "0x6.0ap-2 33") != 0 - && strcmp (buf, "0xc.14p-3 33") != 0)) - result |= 4; - /* This catches a FreeBSD 6.1 bug. See - */ - if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 - || buf[0] == '0') - result |= 8; - /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ - if (sprintf (buf, "%.1a", 1.999) < 0 - || (strcmp (buf, "0x1.0p+1") != 0 - && strcmp (buf, "0x2.0p+0") != 0 - && strcmp (buf, "0x4.0p-1") != 0 - && strcmp (buf, "0x8.0p-2") != 0)) - result |= 16; - /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a - glibc 2.4 bug . */ - if (sprintf (buf, "%.1La", 1.999L) < 0 - || (strcmp (buf, "0x1.0p+1") != 0 - && strcmp (buf, "0x2.0p+0") != 0 - && strcmp (buf, "0x4.0p-1") != 0 - && strcmp (buf, "0x8.0p-2") != 0)) - result |= 32; - return result; -}]])], - [gl_cv_func_printf_directive_a=yes], - [gl_cv_func_printf_directive_a=no], - [ - case "$host_os" in - # Guess yes on glibc >= 2.5 systems. - *-gnu*) - AC_EGREP_CPP([BZ2908], [ - #include - #ifdef __GNU_LIBRARY__ - #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ - BZ2908 - #endif - #endif - ], - [gl_cv_func_printf_directive_a="guessing yes"], - [gl_cv_func_printf_directive_a="guessing no"]) - ;; - # If we don't know, assume the worst. - *) gl_cv_func_printf_directive_a="guessing no";; - esac - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the %F format -dnl directive. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_directive_f. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_F], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'F' directive], - [gl_cv_func_printf_directive_f], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -static double zero = 0.0; -int main () -{ - int result = 0; - if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 - || strcmp (buf, "1234567.000000 33") != 0) - result |= 1; - if (sprintf (buf, "%F", 1.0 / zero) < 0 - || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) - result |= 2; - /* This catches a Cygwin 1.5.x bug. */ - if (sprintf (buf, "%.F", 1234.0) < 0 - || strcmp (buf, "1234") != 0) - result |= 4; - return result; -}]])], - [gl_cv_func_printf_directive_f=yes], - [gl_cv_func_printf_directive_f=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_directive_f="guessing yes";; - # Guess yes on FreeBSD >= 6. - freebsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; - darwin*) gl_cv_func_printf_directive_f="guessing yes";; - # Guess yes on Solaris >= 2.10. - solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; - solaris*) gl_cv_func_printf_sizes_c99="guessing no";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_directive_f="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the %n format -dnl directive. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_printf_directive_n. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_N], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'n' directive], - [gl_cv_func_printf_directive_n], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#include -#ifdef _MSC_VER -/* See page about "Parameter Validation" on msdn.microsoft.com. */ -static void cdecl -invalid_parameter_handler (const wchar_t *expression, - const wchar_t *function, - const wchar_t *file, unsigned int line, - uintptr_t dummy) -{ - exit (1); -} -#endif -static char fmtstring[10]; -static char buf[100]; -int main () -{ - int count = -1; -#ifdef _MSC_VER - _set_invalid_parameter_handler (invalid_parameter_handler); -#endif - /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) - support %n in format strings in read-only memory but not in writable - memory. */ - strcpy (fmtstring, "%d %n"); - if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 - || strcmp (buf, "123 ") != 0 - || count != 4) - return 1; - return 0; -}]])], - [gl_cv_func_printf_directive_n=yes], - [gl_cv_func_printf_directive_n=no], - [ -changequote(,)dnl - case "$host_os" in - mingw*) gl_cv_func_printf_directive_n="guessing no";; - *) gl_cv_func_printf_directive_n="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the %ls format -dnl directive and in particular, when a precision is specified, whether -dnl the functions stop converting the wide string argument when the number -dnl of bytes that have been produced by this conversion equals or exceeds -dnl the precision. -dnl Result is gl_cv_func_printf_directive_ls. - -AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the 'ls' directive], - [gl_cv_func_printf_directive_ls], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be - included before . */ -#include -#include -#include -#include -#include -int main () -{ - int result = 0; - char buf[100]; - /* Test whether %ls works at all. - This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on - Cygwin 1.5. */ - { - static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; - buf[0] = '\0'; - if (sprintf (buf, "%ls", wstring) < 0 - || strcmp (buf, "abc") != 0) - result |= 1; - } - /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an - assertion failure inside libc), but not on OpenBSD 4.0. */ - { - static const wchar_t wstring[] = { 'a', 0 }; - buf[0] = '\0'; - if (sprintf (buf, "%ls", wstring) < 0 - || strcmp (buf, "a") != 0) - result |= 2; - } - /* Test whether precisions in %ls are supported as specified in ISO C 99 - section 7.19.6.1: - "If a precision is specified, no more than that many bytes are written - (including shift sequences, if any), and the array shall contain a - null wide character if, to equal the multibyte character sequence - length given by the precision, the function would need to access a - wide character one past the end of the array." - This test fails on Solaris 10. */ - { - static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; - buf[0] = '\0'; - if (sprintf (buf, "%.2ls", wstring) < 0 - || strcmp (buf, "ab") != 0) - result |= 8; - } - return result; -}]])], - [gl_cv_func_printf_directive_ls=yes], - [gl_cv_func_printf_directive_ls=no], - [ -changequote(,)dnl - case "$host_os" in - openbsd*) gl_cv_func_printf_directive_ls="guessing no";; - irix*) gl_cv_func_printf_directive_ls="guessing no";; - solaris*) gl_cv_func_printf_directive_ls="guessing no";; - cygwin*) gl_cv_func_printf_directive_ls="guessing no";; - beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; - *) gl_cv_func_printf_directive_ls="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports POSIX/XSI format -dnl strings with positions. (POSIX:2001) -dnl Result is gl_cv_func_printf_positions. - -AC_DEFUN([gl_PRINTF_POSITIONS], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], - [gl_cv_func_printf_positions], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -/* The string "%2$d %1$d", with dollar characters protected from the shell's - dollar expansion (possibly an autoconf bug). */ -static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; -static char buf[100]; -int main () -{ - sprintf (buf, format, 33, 55); - return (strcmp (buf, "55 33") != 0); -}]])], - [gl_cv_func_printf_positions=yes], - [gl_cv_func_printf_positions=no], - [ -changequote(,)dnl - case "$host_os" in - netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) - gl_cv_func_printf_positions="guessing no";; - beos*) gl_cv_func_printf_positions="guessing no";; - mingw* | pw*) gl_cv_func_printf_positions="guessing no";; - *) gl_cv_func_printf_positions="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports POSIX/XSI format -dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) -dnl Result is gl_cv_func_printf_flag_grouping. - -AC_DEFUN([gl_PRINTF_FLAG_GROUPING], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the grouping flag], - [gl_cv_func_printf_flag_grouping], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -int main () -{ - if (sprintf (buf, "%'d %d", 1234567, 99) < 0 - || buf[strlen (buf) - 1] != '9') - return 1; - return 0; -}]])], - [gl_cv_func_printf_flag_grouping=yes], - [gl_cv_func_printf_flag_grouping=no], - [ -changequote(,)dnl - case "$host_os" in - cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; - netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; - mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; - *) gl_cv_func_printf_flag_grouping="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports the - flag correctly. -dnl (ISO C99.) See -dnl -dnl Result is gl_cv_func_printf_flag_leftadjust. - -AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], - [gl_cv_func_printf_flag_leftadjust], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -int main () -{ - /* Check that a '-' flag is not annihilated by a negative width. */ - if (sprintf (buf, "a%-*sc", -3, "b") < 0 - || strcmp (buf, "ab c") != 0) - return 1; - return 0; -}]])], - [gl_cv_func_printf_flag_leftadjust=yes], - [gl_cv_func_printf_flag_leftadjust=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on HP-UX 11. - hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; - # Guess no on HP-UX 10 and older. - hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; - # Guess yes otherwise. - *) gl_cv_func_printf_flag_leftadjust="guessing yes";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports padding of non-finite -dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See -dnl -dnl Result is gl_cv_func_printf_flag_zero. - -AC_DEFUN([gl_PRINTF_FLAG_ZERO], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports the zero flag correctly], - [gl_cv_func_printf_flag_zero], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[100]; -static double zero = 0.0; -int main () -{ - if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 - || (strcmp (buf, " inf") != 0 - && strcmp (buf, " infinity") != 0)) - return 1; - return 0; -}]])], - [gl_cv_func_printf_flag_zero=yes], - [gl_cv_func_printf_flag_zero=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_printf_flag_zero="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_flag_zero="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions supports large precisions. -dnl On mingw, precisions larger than 512 are treated like 512, in integer, -dnl floating-point or pointer output. On Solaris 10/x86, precisions larger -dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC, -dnl precisions larger than 510 in floating-point output yield wrong results. -dnl On AIX 7.1, precisions larger than 998 in floating-point output yield -dnl wrong results. On BeOS, precisions larger than 1044 crash the program. -dnl Result is gl_cv_func_printf_precision. - -AC_DEFUN([gl_PRINTF_PRECISION], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf supports large precisions], - [gl_cv_func_printf_precision], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static char buf[5000]; -int main () -{ - int result = 0; -#ifdef __BEOS__ - /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ - return 1; -#endif - if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) - result |= 1; - if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) - result |= 2; - if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 - || buf[0] != '1') - result |= 4; - if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 - || buf[0] != '1') - result |= 4; - return result; -}]])], - [gl_cv_func_printf_precision=yes], - [gl_cv_func_printf_precision=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess no only on Solaris, native Windows, and BeOS systems. - solaris*) gl_cv_func_printf_precision="guessing no" ;; - mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; - beos*) gl_cv_func_printf_precision="guessing no" ;; - *) gl_cv_func_printf_precision="guessing yes" ;; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the *printf family of functions recovers gracefully in case -dnl of an out-of-memory condition, or whether it crashes the entire program. -dnl Result is gl_cv_func_printf_enomem. - -AC_DEFUN([gl_PRINTF_ENOMEM], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_MULTIARCH]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether printf survives out-of-memory conditions], - [gl_cv_func_printf_enomem], - [ - gl_cv_func_printf_enomem="guessing no" - if test "$cross_compiling" = no; then - if test $APPLE_UNIVERSAL_BUILD = 0; then - AC_LANG_CONFTEST([AC_LANG_SOURCE([ -]GL_NOCRASH[ -changequote(,)dnl -#include -#include -#include -#include -#include -int main() -{ - struct rlimit limit; - int ret; - nocrash_init (); - /* Some printf implementations allocate temporary space with malloc. */ - /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ -#ifdef RLIMIT_DATA - if (getrlimit (RLIMIT_DATA, &limit) < 0) - return 77; - if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) - limit.rlim_max = 5000000; - limit.rlim_cur = limit.rlim_max; - if (setrlimit (RLIMIT_DATA, &limit) < 0) - return 77; -#endif - /* On Linux systems, malloc() is limited by RLIMIT_AS. */ -#ifdef RLIMIT_AS - if (getrlimit (RLIMIT_AS, &limit) < 0) - return 77; - if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) - limit.rlim_max = 5000000; - limit.rlim_cur = limit.rlim_max; - if (setrlimit (RLIMIT_AS, &limit) < 0) - return 77; -#endif - /* Some printf implementations allocate temporary space on the stack. */ -#ifdef RLIMIT_STACK - if (getrlimit (RLIMIT_STACK, &limit) < 0) - return 77; - if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) - limit.rlim_max = 5000000; - limit.rlim_cur = limit.rlim_max; - if (setrlimit (RLIMIT_STACK, &limit) < 0) - return 77; -#endif - ret = printf ("%.5000000f", 1.0); - return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); -} -changequote([,])dnl - ])]) - if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then - (./conftest 2>&AS_MESSAGE_LOG_FD - result=$? - _AS_ECHO_LOG([\$? = $result]) - if test $result != 0 && test $result != 77; then result=1; fi - exit $result - ) >/dev/null 2>/dev/null - case $? in - 0) gl_cv_func_printf_enomem="yes" ;; - 77) gl_cv_func_printf_enomem="guessing no" ;; - *) gl_cv_func_printf_enomem="no" ;; - esac - else - gl_cv_func_printf_enomem="guessing no" - fi - rm -fr conftest* - else - dnl A universal build on Apple Mac OS X platforms. - dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. - dnl But we need a configuration result that is valid in both modes. - gl_cv_func_printf_enomem="guessing no" - fi - fi - if test "$gl_cv_func_printf_enomem" = "guessing no"; then -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on Solaris. - solaris*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on AIX. - aix*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on HP-UX/hppa. - hpux*) case "$host_cpu" in - hppa*) gl_cv_func_printf_enomem="guessing yes";; - *) gl_cv_func_printf_enomem="guessing no";; - esac - ;; - # Guess yes on IRIX. - irix*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on OSF/1. - osf*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_printf_enomem="guessing yes";; - # Guess yes on Haiku. - haiku*) gl_cv_func_printf_enomem="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_printf_enomem="guessing no";; - esac -changequote([,])dnl - fi - ]) -]) - -dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) -dnl Result is ac_cv_func_snprintf. - -AC_DEFUN([gl_SNPRINTF_PRESENCE], -[ - AC_CHECK_FUNCS_ONCE([snprintf]) -]) - -dnl Test whether the string produced by the snprintf function is always NUL -dnl terminated. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_snprintf_truncation_c99. - -AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf truncates the result as in C99], - [gl_cv_func_snprintf_truncation_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -static char buf[100]; -int main () -{ - strcpy (buf, "ABCDEF"); - my_snprintf (buf, 3, "%d %d", 4567, 89); - if (memcmp (buf, "45\0DEF", 6) != 0) - return 1; - return 0; -}]])], - [gl_cv_func_snprintf_truncation_c99=yes], - [gl_cv_func_snprintf_truncation_c99=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_snprintf_truncation_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; - darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on OpenBSD >= 3.9. - openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) - gl_cv_func_snprintf_truncation_c99="guessing no";; - openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on Solaris >= 2.6. - solaris2.[0-5] | solaris2.[0-5].*) - gl_cv_func_snprintf_truncation_c99="guessing no";; - solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; - aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on HP-UX >= 11. - hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; - hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on IRIX >= 6.5. - irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on OSF/1 >= 5. - osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; - osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_snprintf_truncation_c99="guessing no";; - netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_snprintf_truncation_c99="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the return value of the snprintf function is the number -dnl of bytes (excluding the terminating NUL) that would have been produced -dnl if the buffer had been large enough. (ISO C99, POSIX:2001) -dnl For example, this test program fails on IRIX 6.5: -dnl --------------------------------------------------------------------- -dnl #include -dnl int main() -dnl { -dnl static char buf[8]; -dnl int retval = snprintf (buf, 3, "%d", 12345); -dnl return retval >= 0 && retval < 3; -dnl } -dnl --------------------------------------------------------------------- -dnl Result is gl_cv_func_snprintf_retval_c99. - -AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], - [gl_cv_func_snprintf_retval_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -static char buf[100]; -int main () -{ - strcpy (buf, "ABCDEF"); - if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) - return 1; - if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) - return 2; - if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) - return 3; - return 0; -}]])], - [gl_cv_func_snprintf_retval_c99=yes], - [gl_cv_func_snprintf_retval_c99=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; - darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on OpenBSD >= 3.9. - openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) - gl_cv_func_snprintf_retval_c99="guessing no";; - openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on Solaris >= 2.10. - solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; - solaris*) gl_cv_func_printf_sizes_c99="guessing no";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; - aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_snprintf_retval_c99="guessing no";; - netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_snprintf_retval_c99="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the snprintf function supports the %n format directive -dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) -dnl Result is gl_cv_func_snprintf_directive_n. - -AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], - [gl_cv_func_snprintf_directive_n], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -static char fmtstring[10]; -static char buf[100]; -int main () -{ - int count = -1; - /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) - support %n in format strings in read-only memory but not in writable - memory. */ - strcpy (fmtstring, "%d %n"); - my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); - if (count != 6) - return 1; - return 0; -}]])], - [gl_cv_func_snprintf_directive_n=yes], - [gl_cv_func_snprintf_directive_n=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_snprintf_directive_n="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; - darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on Solaris >= 2.6. - solaris2.[0-5] | solaris2.[0-5].*) - gl_cv_func_snprintf_directive_n="guessing no";; - solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; - aix*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on IRIX >= 6.5. - irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on OSF/1 >= 5. - osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; - osf*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_snprintf_directive_n="guessing no";; - netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_snprintf_directive_n="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_snprintf_directive_n="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl Test whether the snprintf function, when passed a size = 1, writes any -dnl output without bounds in this case, behaving like sprintf. This is the -dnl case on Linux libc5. -dnl Result is gl_cv_func_snprintf_size1. - -AC_DEFUN([gl_SNPRINTF_SIZE1], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([gl_SNPRINTF_PRESENCE]) - AC_CACHE_CHECK([whether snprintf respects a size of 1], - [gl_cv_func_snprintf_size1], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#if HAVE_SNPRINTF -# define my_snprintf snprintf -#else -# include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -#endif -int main() -{ - static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; - my_snprintf (buf, 1, "%d", 12345); - return buf[1] != 'E'; -}]])], - [gl_cv_func_snprintf_size1=yes], - [gl_cv_func_snprintf_size1=no], - [gl_cv_func_snprintf_size1="guessing yes"]) - ]) -]) - -dnl Test whether the vsnprintf function, when passed a zero size, produces no -dnl output. (ISO C99, POSIX:2001) -dnl For example, snprintf nevertheless writes a NUL byte in this case -dnl on OSF/1 5.1: -dnl --------------------------------------------------------------------- -dnl #include -dnl int main() -dnl { -dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; -dnl snprintf (buf, 0, "%d", 12345); -dnl return buf[0] != 'D'; -dnl } -dnl --------------------------------------------------------------------- -dnl And vsnprintf writes any output without bounds in this case, behaving like -dnl vsprintf, on HP-UX 11 and OSF/1 5.1: -dnl --------------------------------------------------------------------- -dnl #include -dnl #include -dnl static int my_snprintf (char *buf, int size, const char *format, ...) -dnl { -dnl va_list args; -dnl int ret; -dnl va_start (args, format); -dnl ret = vsnprintf (buf, size, format, args); -dnl va_end (args); -dnl return ret; -dnl } -dnl int main() -dnl { -dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; -dnl my_snprintf (buf, 0, "%d", 12345); -dnl return buf[0] != 'D'; -dnl } -dnl --------------------------------------------------------------------- -dnl Result is gl_cv_func_vsnprintf_zerosize_c99. - -AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], -[ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], - [gl_cv_func_vsnprintf_zerosize_c99], - [ - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ -#include -#include -static int my_snprintf (char *buf, int size, const char *format, ...) -{ - va_list args; - int ret; - va_start (args, format); - ret = vsnprintf (buf, size, format, args); - va_end (args); - return ret; -} -int main() -{ - static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; - my_snprintf (buf, 0, "%d", 12345); - return buf[0] != 'D'; -}]])], - [gl_cv_func_vsnprintf_zerosize_c99=yes], - [gl_cv_func_vsnprintf_zerosize_c99=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on FreeBSD >= 5. - freebsd[1-4].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on Mac OS X >= 10.3. - darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on Cygwin. - cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on Solaris >= 2.6. - solaris2.[0-5] | solaris2.[0-5].*) - gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on AIX >= 4. - aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on IRIX >= 6.5. - irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on NetBSD >= 3. - netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) - gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on BeOS. - beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # Guess yes on mingw. - mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; - # If we don't know, assume the worst. - *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; - esac -changequote([,])dnl - ]) - ]) -]) - -dnl The results of these tests on various platforms are: -dnl -dnl 1 = gl_PRINTF_SIZES_C99 -dnl 2 = gl_PRINTF_LONG_DOUBLE -dnl 3 = gl_PRINTF_INFINITE -dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE -dnl 5 = gl_PRINTF_DIRECTIVE_A -dnl 6 = gl_PRINTF_DIRECTIVE_F -dnl 7 = gl_PRINTF_DIRECTIVE_N -dnl 8 = gl_PRINTF_DIRECTIVE_LS -dnl 9 = gl_PRINTF_POSITIONS -dnl 10 = gl_PRINTF_FLAG_GROUPING -dnl 11 = gl_PRINTF_FLAG_LEFTADJUST -dnl 12 = gl_PRINTF_FLAG_ZERO -dnl 13 = gl_PRINTF_PRECISION -dnl 14 = gl_PRINTF_ENOMEM -dnl 15 = gl_SNPRINTF_PRESENCE -dnl 16 = gl_SNPRINTF_TRUNCATION_C99 -dnl 17 = gl_SNPRINTF_RETVAL_C99 -dnl 18 = gl_SNPRINTF_DIRECTIVE_N -dnl 19 = gl_SNPRINTF_SIZE1 -dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99 -dnl -dnl 1 = checking whether printf supports size specifiers as in C99... -dnl 2 = checking whether printf supports 'long double' arguments... -dnl 3 = checking whether printf supports infinite 'double' arguments... -dnl 4 = checking whether printf supports infinite 'long double' arguments... -dnl 5 = checking whether printf supports the 'a' and 'A' directives... -dnl 6 = checking whether printf supports the 'F' directive... -dnl 7 = checking whether printf supports the 'n' directive... -dnl 8 = checking whether printf supports the 'ls' directive... -dnl 9 = checking whether printf supports POSIX/XSI format strings with positions... -dnl 10 = checking whether printf supports the grouping flag... -dnl 11 = checking whether printf supports the left-adjust flag correctly... -dnl 12 = checking whether printf supports the zero flag correctly... -dnl 13 = checking whether printf supports large precisions... -dnl 14 = checking whether printf survives out-of-memory conditions... -dnl 15 = checking for snprintf... -dnl 16 = checking whether snprintf truncates the result as in C99... -dnl 17 = checking whether snprintf returns a byte count as in C99... -dnl 18 = checking whether snprintf fully supports the 'n' directive... -dnl 19 = checking whether snprintf respects a size of 1... -dnl 20 = checking whether vsnprintf respects a zero size as in C99... -dnl -dnl . = yes, # = no. -dnl -dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -dnl glibc 2.5 . . . . . . . . . . . . . . . . . . . . -dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . . . -dnl FreeBSD 5.4, 6.1 . . . . # . . . . . . # . # . . . . . . -dnl Mac OS X 10.5.8 . . . # # . . . . . . # . . . . . . . . -dnl Mac OS X 10.3.9 . . . . # . . . . . . # . # . . . . . . -dnl OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . . -dnl Cygwin 1.7.0 (2009) . . . # . . . ? . . . . . ? . . . . . . -dnl Cygwin 1.5.25 (2008) . . . # # . . # . . . . . # . . . . . . -dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . . -dnl Solaris 11 2011-11 . . # # # . . # . . . # . . . . . . . . -dnl Solaris 10 . . # # # . . # . . . # # . . . . . . . -dnl Solaris 2.6 ... 9 # . # # # # . # . . . # # . . . # . . . -dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # # -dnl AIX 7.1 . . # # # . . . . . . # # . . . . . . . -dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . . -dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . # . . . -dnl HP-UX 11.31 . . . . # . . . . . . # . . . . # # . . -dnl HP-UX 11.{00,11,23} # . . . # # . . . . . # . . . . # # . # -dnl HP-UX 10.20 # . # . # # . ? . . # # . . . . # # ? # -dnl IRIX 6.5 # . # # # # . # . . . # . . . . # . . . -dnl OSF/1 5.1 # . # # # # . . . . . # . . . . # . . # -dnl OSF/1 4.0d # . # # # # . . . . . # . . # # # # # # -dnl NetBSD 5.0 . . . # # . . . . . . # . # . . . . . . -dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ? -dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . . -dnl Haiku . . . # # # . # . . . . . ? . . ? . . . -dnl BeOS # # . # # # . ? # . ? . # ? . . ? . . . -dnl old mingw / msvcrt # # # # # # . . # # . # # ? . # # # . . -dnl MSVC 9 # # # # # # # . # # . # # ? # # # # . . -dnl mingw 2009-2011 . # . # . . . . # # . . . ? . . . . . . -dnl mingw-w64 2011 # # # # # # . . # # . # # ? . # # # . . diff --git a/src/gl/m4/read-file.m4 b/src/gl/m4/read-file.m4 deleted file mode 100644 index aa23b5840c..0000000000 --- a/src/gl/m4/read-file.m4 +++ /dev/null @@ -1,8 +0,0 @@ -# read-file.m4 serial 3 -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Prerequisites of lib/read-file.c. -AC_DEFUN([gl_PREREQ_READ_FILE], [:]) diff --git a/src/gl/m4/realloc.m4 b/src/gl/m4/realloc.m4 deleted file mode 100644 index fc2282544d..0000000000 --- a/src/gl/m4/realloc.m4 +++ /dev/null @@ -1,79 +0,0 @@ -# realloc.m4 serial 14 -dnl Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -m4_version_prereq([2.70], [] ,[ - -# This is adapted with modifications from upstream Autoconf here: -# http://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c -AC_DEFUN([_AC_FUNC_REALLOC_IF], -[ - AC_REQUIRE([AC_HEADER_STDC])dnl - AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles - AC_CHECK_HEADERS([stdlib.h]) - AC_CACHE_CHECK([for GNU libc compatible realloc], - [ac_cv_func_realloc_0_nonnull], - [AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H - # include - #else - char *realloc (); - #endif - ]], - [[char *p = realloc (0, 0); - int result = !p; - free (p); - return result;]]) - ], - [ac_cv_func_realloc_0_nonnull=yes], - [ac_cv_func_realloc_0_nonnull=no], - [case "$host_os" in - # Guess yes on platforms where we know the result. - *-gnu* | freebsd* | netbsd* | openbsd* \ - | hpux* | solaris* | cygwin* | mingw*) - ac_cv_func_realloc_0_nonnull=yes ;; - # If we don't know, assume the worst. - *) ac_cv_func_realloc_0_nonnull=no ;; - esac - ]) - ]) - AS_IF([test $ac_cv_func_realloc_0_nonnull = yes], [$1], [$2]) -])# AC_FUNC_REALLOC - -]) - -# gl_FUNC_REALLOC_GNU -# ------------------- -# Test whether 'realloc (0, 0)' is handled like in GNU libc, and replace -# realloc if it is not. -AC_DEFUN([gl_FUNC_REALLOC_GNU], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - dnl _AC_FUNC_REALLOC_IF is defined in Autoconf. - _AC_FUNC_REALLOC_IF( - [AC_DEFINE([HAVE_REALLOC_GNU], [1], - [Define to 1 if your system has a GNU libc compatible 'realloc' - function, and to 0 otherwise.])], - [AC_DEFINE([HAVE_REALLOC_GNU], [0]) - REPLACE_REALLOC=1 - ]) -])# gl_FUNC_REALLOC_GNU - -# gl_FUNC_REALLOC_POSIX -# --------------------- -# Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it -# fails), and replace realloc if it is not. -AC_DEFUN([gl_FUNC_REALLOC_POSIX], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) - if test $gl_cv_func_malloc_posix = yes; then - AC_DEFINE([HAVE_REALLOC_POSIX], [1], - [Define if the 'realloc' function is POSIX compliant.]) - else - REPLACE_REALLOC=1 - fi -]) diff --git a/src/gl/m4/select.m4 b/src/gl/m4/select.m4 deleted file mode 100644 index d19365541e..0000000000 --- a/src/gl/m4/select.m4 +++ /dev/null @@ -1,114 +0,0 @@ -# select.m4 serial 8 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_SELECT], -[ - AC_REQUIRE([gl_HEADER_SYS_SELECT]) - AC_REQUIRE([AC_C_RESTRICT]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_SOCKETS]) - if test "$ac_cv_header_winsock2_h" = yes; then - REPLACE_SELECT=1 - else - dnl On Interix 3.5, select(0, NULL, NULL, NULL, timeout) fails with error - dnl EFAULT. - AC_CHECK_HEADERS_ONCE([sys/select.h]) - AC_CACHE_CHECK([whether select supports a 0 argument], - [gl_cv_func_select_supports0], - [ - AC_RUN_IFELSE([AC_LANG_SOURCE([[ -#include -#include -#if HAVE_SYS_SELECT_H -#include -#endif -int main () -{ - struct timeval timeout; - timeout.tv_sec = 0; - timeout.tv_usec = 5; - return select (0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout) < 0; -}]])], [gl_cv_func_select_supports0=yes], [gl_cv_func_select_supports0=no], - [ -changequote(,)dnl - case "$host_os" in - # Guess no on Interix. - interix*) gl_cv_func_select_supports0="guessing no";; - # Guess yes otherwise. - *) gl_cv_func_select_supports0="guessing yes";; - esac -changequote([,])dnl - ]) - ]) - case "$gl_cv_func_select_supports0" in - *yes) ;; - *) REPLACE_SELECT=1 ;; - esac - - dnl On FreeBSD 8.2, select() doesn't always reject bad fds. - AC_CACHE_CHECK([whether select detects invalid fds], - [gl_cv_func_select_detects_ebadf], - [ - AC_RUN_IFELSE([AC_LANG_PROGRAM([[ -#include -#include -#if HAVE_SYS_SELECT_H -# include -#endif -#include -#include -]],[[ - fd_set set; - dup2(0, 16); - FD_ZERO(&set); - FD_SET(16, &set); - close(16); - struct timeval timeout; - timeout.tv_sec = 0; - timeout.tv_usec = 5; - return select (17, &set, NULL, NULL, &timeout) != -1 || errno != EBADF; -]])], [gl_cv_func_select_detects_ebadf=yes], - [gl_cv_func_select_detects_ebadf=no], - [ - case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_select_detects_ebadf="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_select_detects_ebadf="guessing no" ;; - esac - ]) - ]) - case $gl_cv_func_select_detects_ebadf in - *yes) ;; - *) REPLACE_SELECT=1 ;; - esac - fi - - dnl Determine the needed libraries. - LIB_SELECT="$LIBSOCKET" - if test $REPLACE_SELECT = 1; then - case "$host_os" in - mingw*) - dnl On the MSVC platform, the function MsgWaitForMultipleObjects - dnl (used in lib/select.c) requires linking with -luser32. On mingw, - dnl it is implicit. - AC_LINK_IFELSE( - [AC_LANG_SOURCE([[ -#define WIN32_LEAN_AND_MEAN -#include -int -main () -{ - MsgWaitForMultipleObjects (0, NULL, 0, 0, 0); - return 0; -}]])], - [], - [LIB_SELECT="$LIB_SELECT -luser32"]) - ;; - esac - fi - AC_SUBST([LIB_SELECT]) -]) diff --git a/src/gl/m4/servent.m4 b/src/gl/m4/servent.m4 deleted file mode 100644 index 182e7f6277..0000000000 --- a/src/gl/m4/servent.m4 +++ /dev/null @@ -1,51 +0,0 @@ -# servent.m4 serial 2 -dnl Copyright (C) 2008, 2010-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_SERVENT], -[ - dnl Where are getservent(), setservent(), endservent(), getservbyname(), - dnl getservbyport() defined? - dnl Where are getprotoent(), setprotoent(), endprotoent(), getprotobyname(), - dnl getprotobynumber() defined? - dnl - On Solaris, they are in libsocket. Ignore libxnet. - dnl - On Haiku, they are in libnetwork. - dnl - On BeOS, they are in libnet. - dnl - On native Windows, they are in ws2_32.dll. - dnl - Otherwise they are in libc. - AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl for HAVE_SYS_SOCKET_H, HAVE_WINSOCK2_H - SERVENT_LIB= - gl_saved_libs="$LIBS" - AC_SEARCH_LIBS([getservbyname], [socket network net], - [if test "$ac_cv_search_getservbyname" != "none required"; then - SERVENT_LIB="$ac_cv_search_getservbyname" - fi]) - LIBS="$gl_saved_libs" - if test -z "$SERVENT_LIB"; then - AC_CHECK_FUNCS([getservbyname], , [ - AC_CACHE_CHECK([for getservbyname in winsock2.h and -lws2_32], - [gl_cv_w32_getservbyname], - [gl_cv_w32_getservbyname=no - gl_save_LIBS="$LIBS" - LIBS="$LIBS -lws2_32" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[ -#ifdef HAVE_WINSOCK2_H -#include -#endif -#include - ]], - [[getservbyname(NULL,NULL);]])], - [gl_cv_w32_getservbyname=yes]) - LIBS="$gl_save_LIBS" - ]) - if test "$gl_cv_w32_getservbyname" = "yes"; then - SERVENT_LIB="-lws2_32" - fi - ]) - fi - AC_SUBST([SERVENT_LIB]) -]) diff --git a/src/gl/m4/setenv.m4 b/src/gl/m4/setenv.m4 deleted file mode 100644 index 5d49aba60d..0000000000 --- a/src/gl/m4/setenv.m4 +++ /dev/null @@ -1,160 +0,0 @@ -# setenv.m4 serial 26 -dnl Copyright (C) 2001-2004, 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_SETENV], -[ - AC_REQUIRE([gl_FUNC_SETENV_SEPARATE]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - if test $ac_cv_func_setenv = no; then - HAVE_SETENV=0 - else - AC_CACHE_CHECK([whether setenv validates arguments], - [gl_cv_func_setenv_works], - [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ - #include - #include - #include - ]], [[ - int result = 0; - { - if (setenv ("", "", 0) != -1) - result |= 1; - else if (errno != EINVAL) - result |= 2; - } - { - if (setenv ("a", "=", 1) != 0) - result |= 4; - else if (strcmp (getenv ("a"), "=") != 0) - result |= 8; - } - return result; - ]])], - [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no], - [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_setenv_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_setenv_works="guessing no" ;; - esac - ])]) - case "$gl_cv_func_setenv_works" in - *yes) ;; - *) - REPLACE_SETENV=1 - ;; - esac - fi -]) - -# Like gl_FUNC_SETENV, except prepare for separate compilation -# (no REPLACE_SETENV, no AC_LIBOBJ). -AC_DEFUN([gl_FUNC_SETENV_SEPARATE], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - AC_CHECK_DECLS_ONCE([setenv]) - if test $ac_cv_have_decl_setenv = no; then - HAVE_DECL_SETENV=0 - fi - AC_CHECK_FUNCS_ONCE([setenv]) - gl_PREREQ_SETENV -]) - -AC_DEFUN([gl_FUNC_UNSETENV], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_CHECK_DECLS_ONCE([unsetenv]) - if test $ac_cv_have_decl_unsetenv = no; then - HAVE_DECL_UNSETENV=0 - fi - AC_CHECK_FUNCS([unsetenv]) - if test $ac_cv_func_unsetenv = no; then - HAVE_UNSETENV=0 - else - HAVE_UNSETENV=1 - dnl Some BSDs return void, failing to do error checking. - AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -#undef _BSD -#define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 */ -#include -extern -#ifdef __cplusplus -"C" -#endif -int unsetenv (const char *name); - ]], - [[]])], - [gt_cv_func_unsetenv_ret='int'], - [gt_cv_func_unsetenv_ret='void'])]) - if test $gt_cv_func_unsetenv_ret = 'void'; then - AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void - instead of int.]) - REPLACE_UNSETENV=1 - fi - - dnl Solaris 10 unsetenv does not remove all copies of a name. - dnl Haiku alpha 2 unsetenv gets confused by assignment to environ. - dnl OpenBSD 4.7 unsetenv("") does not fail. - AC_CACHE_CHECK([whether unsetenv obeys POSIX], - [gl_cv_func_unsetenv_works], - [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ - #include - #include - extern char **environ; - ]], [[ - char entry1[] = "a=1"; - char entry2[] = "b=2"; - char *env[] = { entry1, entry2, NULL }; - if (putenv ((char *) "a=1")) return 1; - if (putenv (entry2)) return 2; - entry2[0] = 'a'; - unsetenv ("a"); - if (getenv ("a")) return 3; - if (!unsetenv ("") || errno != EINVAL) return 4; - entry2[0] = 'b'; - environ = env; - if (!getenv ("a")) return 5; - entry2[0] = 'a'; - unsetenv ("a"); - if (getenv ("a")) return 6; - ]])], - [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no], - [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_unsetenv_works="guessing no" ;; - esac - ])]) - case "$gl_cv_func_unsetenv_works" in - *yes) ;; - *) - REPLACE_UNSETENV=1 - ;; - esac - fi -]) - -# Prerequisites of lib/setenv.c. -AC_DEFUN([gl_PREREQ_SETENV], -[ - AC_REQUIRE([AC_FUNC_ALLOCA]) - AC_REQUIRE([gl_ENVIRON]) - AC_CHECK_HEADERS_ONCE([unistd.h]) - AC_CHECK_HEADERS([search.h]) - AC_CHECK_FUNCS([tsearch]) -]) - -# Prerequisites of lib/unsetenv.c. -AC_DEFUN([gl_PREREQ_UNSETENV], -[ - AC_REQUIRE([gl_ENVIRON]) - AC_CHECK_HEADERS_ONCE([unistd.h]) -]) diff --git a/src/gl/m4/signal_h.m4 b/src/gl/m4/signal_h.m4 deleted file mode 100644 index bcfd7b4be3..0000000000 --- a/src/gl/m4/signal_h.m4 +++ /dev/null @@ -1,83 +0,0 @@ -# signal_h.m4 serial 18 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_SIGNAL_H], -[ - AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) - AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T]) - gl_NEXT_HEADERS([signal.h]) - -# AIX declares sig_atomic_t to already include volatile, and C89 compilers -# then choke on 'volatile sig_atomic_t'. C99 requires that it compile. - AC_CHECK_TYPE([volatile sig_atomic_t], [], - [HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0], [[ -#include - ]]) - - dnl Ensure the type pid_t gets defined. - AC_REQUIRE([AC_TYPE_PID_T]) - - AC_REQUIRE([AC_TYPE_UID_T]) - - dnl Persuade glibc to define sighandler_t. - AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - AC_CHECK_TYPE([sighandler_t], [], [HAVE_SIGHANDLER_T=0], [[ -#include - ]]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[#include - ]], [pthread_sigmask sigaction - sigaddset sigdelset sigemptyset sigfillset sigismember - sigpending sigprocmask]) -]) - -AC_DEFUN([gl_CHECK_TYPE_SIGSET_T], -[ - AC_CHECK_TYPES([sigset_t], - [gl_cv_type_sigset_t=yes], [gl_cv_type_sigset_t=no], - [[ - #include - /* Mingw defines sigset_t not in , but in . */ - #include - ]]) - if test $gl_cv_type_sigset_t != yes; then - HAVE_SIGSET_T=0 - fi -]) - -AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_SIGNAL_H_DEFAULTS], -[ - GNULIB_PTHREAD_SIGMASK=0; AC_SUBST([GNULIB_PTHREAD_SIGMASK]) - GNULIB_RAISE=0; AC_SUBST([GNULIB_RAISE]) - GNULIB_SIGNAL_H_SIGPIPE=0; AC_SUBST([GNULIB_SIGNAL_H_SIGPIPE]) - GNULIB_SIGPROCMASK=0; AC_SUBST([GNULIB_SIGPROCMASK]) - GNULIB_SIGACTION=0; AC_SUBST([GNULIB_SIGACTION]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING]) - HAVE_PTHREAD_SIGMASK=1; AC_SUBST([HAVE_PTHREAD_SIGMASK]) - HAVE_RAISE=1; AC_SUBST([HAVE_RAISE]) - HAVE_SIGSET_T=1; AC_SUBST([HAVE_SIGSET_T]) - HAVE_SIGINFO_T=1; AC_SUBST([HAVE_SIGINFO_T]) - HAVE_SIGACTION=1; AC_SUBST([HAVE_SIGACTION]) - HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; - AC_SUBST([HAVE_STRUCT_SIGACTION_SA_SIGACTION]) - HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; - AC_SUBST([HAVE_TYPE_VOLATILE_SIG_ATOMIC_T]) - HAVE_SIGHANDLER_T=1; AC_SUBST([HAVE_SIGHANDLER_T]) - REPLACE_PTHREAD_SIGMASK=0; AC_SUBST([REPLACE_PTHREAD_SIGMASK]) - REPLACE_RAISE=0; AC_SUBST([REPLACE_RAISE]) -]) diff --git a/src/gl/m4/size_max.m4 b/src/gl/m4/size_max.m4 deleted file mode 100644 index de69025d62..0000000000 --- a/src/gl/m4/size_max.m4 +++ /dev/null @@ -1,79 +0,0 @@ -# size_max.m4 serial 10 -dnl Copyright (C) 2003, 2005-2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. - -AC_DEFUN([gl_SIZE_MAX], -[ - AC_CHECK_HEADERS([stdint.h]) - dnl First test whether the system already has SIZE_MAX. - AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ - gl_cv_size_max= - AC_EGREP_CPP([Found it], [ -#include -#if HAVE_STDINT_H -#include -#endif -#ifdef SIZE_MAX -Found it -#endif -], [gl_cv_size_max=yes]) - if test -z "$gl_cv_size_max"; then - dnl Define it ourselves. Here we assume that the type 'size_t' is not wider - dnl than the type 'unsigned long'. Try hard to find a definition that can - dnl be used in a preprocessor #if, i.e. doesn't contain a cast. - AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], - [#include -#include ], [size_t_bits_minus_1=]) - AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], - [#include ], [fits_in_uint=]) - if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then - if test $fits_in_uint = 1; then - dnl Even though SIZE_MAX fits in an unsigned int, it must be of type - dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - extern size_t foo; - extern unsigned long foo; - ]], - [[]])], - [fits_in_uint=0]) - fi - dnl We cannot use 'expr' to simplify this expression, because 'expr' - dnl works only with 'long' integers in the host environment, while we - dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. - if test $fits_in_uint = 1; then - gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" - else - gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" - fi - else - dnl Shouldn't happen, but who knows... - gl_cv_size_max='((size_t)~(size_t)0)' - fi - fi - ]) - if test "$gl_cv_size_max" != yes; then - AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], - [Define as the maximum value of type 'size_t', if the system doesn't define it.]) - fi - dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after - dnl . Remember that the #undef in AH_VERBATIM gets replaced with - dnl #define by AC_DEFINE_UNQUOTED. - AH_VERBATIM([SIZE_MAX], -[/* Define as the maximum value of type 'size_t', if the system doesn't define - it. */ -#ifndef SIZE_MAX -# undef SIZE_MAX -#endif]) -]) - -dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. -dnl Remove this when we can assume autoconf >= 2.61. -m4_ifdef([AC_COMPUTE_INT], [], [ - AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) -]) diff --git a/src/gl/m4/snprintf.m4 b/src/gl/m4/snprintf.m4 deleted file mode 100644 index f876b55995..0000000000 --- a/src/gl/m4/snprintf.m4 +++ /dev/null @@ -1,54 +0,0 @@ -# snprintf.m4 serial 6 -dnl Copyright (C) 2002-2004, 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Libintl 0.17 will replace snprintf only if it does not support %1$s, -dnl but defers to any gnulib snprintf replacements. Therefore, gnulib -dnl must guarantee that the decision for replacing snprintf is a superset -dnl of the reasons checked by libintl. -AC_DEFUN([gl_FUNC_SNPRINTF], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - gl_cv_func_snprintf_usable=no - AC_CHECK_FUNCS([snprintf]) - if test $ac_cv_func_snprintf = yes; then - gl_SNPRINTF_SIZE1 - case "$gl_cv_func_snprintf_size1" in - *yes) - gl_SNPRINTF_RETVAL_C99 - case "$gl_cv_func_snprintf_retval_c99" in - *yes) - gl_PRINTF_POSITIONS - case "$gl_cv_func_printf_positions" in - *yes) - gl_cv_func_snprintf_usable=yes - ;; - esac - ;; - esac - ;; - esac - fi - if test $gl_cv_func_snprintf_usable = no; then - gl_REPLACE_SNPRINTF - fi - AC_CHECK_DECLS_ONCE([snprintf]) - if test $ac_cv_have_decl_snprintf = no; then - HAVE_DECL_SNPRINTF=0 - fi -]) - -AC_DEFUN([gl_REPLACE_SNPRINTF], -[ - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - AC_LIBOBJ([snprintf]) - if test $ac_cv_func_snprintf = yes; then - REPLACE_SNPRINTF=1 - fi - gl_PREREQ_SNPRINTF -]) - -# Prerequisites of lib/snprintf.c. -AC_DEFUN([gl_PREREQ_SNPRINTF], [:]) diff --git a/src/gl/m4/socketlib.m4 b/src/gl/m4/socketlib.m4 deleted file mode 100644 index 5da64fcaca..0000000000 --- a/src/gl/m4/socketlib.m4 +++ /dev/null @@ -1,86 +0,0 @@ -# socketlib.m4 serial 1 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl gl_SOCKETLIB -dnl Determines the library to use for socket functions. -dnl Sets and AC_SUBSTs LIBSOCKET. - -AC_DEFUN([gl_SOCKETLIB], -[ - gl_PREREQ_SYS_H_WINSOCK2 dnl for HAVE_WINSOCK2_H - LIBSOCKET= - if test $HAVE_WINSOCK2_H = 1; then - dnl Native Windows API (not Cygwin). - AC_CACHE_CHECK([if we need to call WSAStartup in winsock2.h and -lws2_32], - [gl_cv_func_wsastartup], [ - gl_save_LIBS="$LIBS" - LIBS="$LIBS -lws2_32" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ -#ifdef HAVE_WINSOCK2_H -# include -#endif]], [[ - WORD wVersionRequested = MAKEWORD(1, 1); - WSADATA wsaData; - int err = WSAStartup(wVersionRequested, &wsaData); - WSACleanup ();]])], - gl_cv_func_wsastartup=yes, gl_cv_func_wsastartup=no) - LIBS="$gl_save_LIBS" - ]) - if test "$gl_cv_func_wsastartup" = "yes"; then - AC_DEFINE([WINDOWS_SOCKETS], [1], [Define if WSAStartup is needed.]) - LIBSOCKET='-lws2_32' - fi - else - dnl Unix API. - dnl Solaris has most socket functions in libsocket. - dnl Haiku has most socket functions in libnetwork. - dnl BeOS has most socket functions in libnet. - AC_CACHE_CHECK([for library containing setsockopt], [gl_cv_lib_socket], [ - gl_cv_lib_socket= - AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern -#ifdef __cplusplus -"C" -#endif -char setsockopt();]], [[setsockopt();]])], - [], - [gl_save_LIBS="$LIBS" - LIBS="$gl_save_LIBS -lsocket" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern -#ifdef __cplusplus -"C" -#endif -char setsockopt();]], [[setsockopt();]])], - [gl_cv_lib_socket="-lsocket"]) - if test -z "$gl_cv_lib_socket"; then - LIBS="$gl_save_LIBS -lnetwork" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern -#ifdef __cplusplus -"C" -#endif -char setsockopt();]], [[setsockopt();]])], - [gl_cv_lib_socket="-lnetwork"]) - if test -z "$gl_cv_lib_socket"; then - LIBS="$gl_save_LIBS -lnet" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern -#ifdef __cplusplus -"C" -#endif -char setsockopt();]], [[setsockopt();]])], - [gl_cv_lib_socket="-lnet"]) - fi - fi - LIBS="$gl_save_LIBS" - ]) - if test -z "$gl_cv_lib_socket"; then - gl_cv_lib_socket="none needed" - fi - ]) - if test "$gl_cv_lib_socket" != "none needed"; then - LIBSOCKET="$gl_cv_lib_socket" - fi - fi - AC_SUBST([LIBSOCKET]) -]) diff --git a/src/gl/m4/sockets.m4 b/src/gl/m4/sockets.m4 deleted file mode 100644 index 7e77a62e88..0000000000 --- a/src/gl/m4/sockets.m4 +++ /dev/null @@ -1,17 +0,0 @@ -# sockets.m4 serial 7 -dnl Copyright (C) 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_SOCKETS], -[ - AC_REQUIRE([AC_C_INLINE]) - AC_REQUIRE([gl_SOCKETLIB]) - gl_PREREQ_SOCKETS -]) - -# Prerequisites of lib/sockets.c. -AC_DEFUN([gl_PREREQ_SOCKETS], [ - : -]) diff --git a/src/gl/m4/socklen.m4 b/src/gl/m4/socklen.m4 deleted file mode 100644 index 634c43a35c..0000000000 --- a/src/gl/m4/socklen.m4 +++ /dev/null @@ -1,77 +0,0 @@ -# socklen.m4 serial 10 -dnl Copyright (C) 2005-2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Albert Chin, Windows fixes from Simon Josefsson. - -dnl Check for socklen_t: historically on BSD it is an int, and in -dnl POSIX 1g it is a type of its own, but some platforms use different -dnl types for the argument to getsockopt, getpeername, etc.: -dnl HP-UX 10.20, IRIX 6.5, OSF/1 4.0, Interix 3.5, BeOS. -dnl So we have to test to find something that will work. - -AC_DEFUN([gl_TYPE_SOCKLEN_T], - [AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])dnl - AC_CHECK_TYPE([socklen_t], , - [AC_MSG_CHECKING([for socklen_t equivalent]) - AC_CACHE_VAL([gl_cv_socklen_t_equiv], - [# Systems have either "struct sockaddr *" or - # "void *" as the second argument to getpeername - gl_cv_socklen_t_equiv= - for arg2 in "struct sockaddr" void; do - for t in int size_t "unsigned int" "long int" "unsigned long int"; do - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( - [[#include - #include - - int getpeername (int, $arg2 *, $t *);]], - [[$t len; - getpeername (0, 0, &len);]])], - [gl_cv_socklen_t_equiv="$t"]) - test "$gl_cv_socklen_t_equiv" != "" && break - done - test "$gl_cv_socklen_t_equiv" != "" && break - done - ]) - if test "$gl_cv_socklen_t_equiv" = ""; then - AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) - fi - AC_MSG_RESULT([$gl_cv_socklen_t_equiv]) - AC_DEFINE_UNQUOTED([socklen_t], [$gl_cv_socklen_t_equiv], - [type to use in place of socklen_t if not defined])], - [gl_SOCKET_HEADERS])]) - -dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find -dnl it there too. But on Cygwin, wc2tcpip.h must not be included. Users -dnl of this module should use the same include pattern as gl_SOCKET_HEADERS. -dnl When you change this macro, keep also in sync: -dnl - gl_CHECK_SOCKET_HEADERS, -dnl - the Include section of modules/socklen. -AC_DEFUN([gl_SOCKET_HEADERS], -[ -/* is not needed according to POSIX, but the - in i386-unknown-freebsd4.10 and - powerpc-apple-darwin5.5 required it. */ -#include -#if HAVE_SYS_SOCKET_H -# include -#elif HAVE_WS2TCPIP_H -# include -#endif -]) - -dnl Tests for the existence of the header for socket facilities. -dnl Defines the C macros HAVE_SYS_SOCKET_H, HAVE_WS2TCPIP_H. -dnl This macro must match gl_SOCKET_HEADERS. -AC_DEFUN([gl_CHECK_SOCKET_HEADERS], - [AC_CHECK_HEADERS_ONCE([sys/socket.h]) - if test $ac_cv_header_sys_socket_h = no; then - dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make - dnl the check for those headers unconditional; yet cygwin reports - dnl that the headers are present but cannot be compiled (since on - dnl cygwin, all socket information should come from sys/socket.h). - AC_CHECK_HEADERS([ws2tcpip.h]) - fi - ]) diff --git a/src/gl/m4/sockpfaf.m4 b/src/gl/m4/sockpfaf.m4 deleted file mode 100644 index dce8b8f01e..0000000000 --- a/src/gl/m4/sockpfaf.m4 +++ /dev/null @@ -1,87 +0,0 @@ -# sockpfaf.m4 serial 8 -dnl Copyright (C) 2004, 2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Test for some common socket protocol families (PF_INET, PF_INET6, ...) -dnl and some common address families (AF_INET, AF_INET6, ...). -dnl This test assumes that a system supports an address family if and only if -dnl it supports the corresponding protocol family. - -dnl From Bruno Haible. - -AC_DEFUN([gl_SOCKET_FAMILIES], -[ - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - AC_CHECK_HEADERS_ONCE([netinet/in.h]) - - AC_MSG_CHECKING([for IPv4 sockets]) - AC_CACHE_VAL([gl_cv_socket_ipv4], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_WINSOCK2_H -#include -#endif]], -[[int x = AF_INET; struct in_addr y; struct sockaddr_in z; - if (&x && &y && &z) return 0;]])], - gl_cv_socket_ipv4=yes, gl_cv_socket_ipv4=no)]) - AC_MSG_RESULT([$gl_cv_socket_ipv4]) - if test $gl_cv_socket_ipv4 = yes; then - AC_DEFINE([HAVE_IPV4], [1], [Define to 1 if defines AF_INET.]) - fi - - AC_MSG_CHECKING([for IPv6 sockets]) - AC_CACHE_VAL([gl_cv_socket_ipv6], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_WINSOCK2_H -#include -#endif -#ifdef HAVE_WS2TCPIP_H -#include -#endif]], -[[int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z; - if (&x && &y && &z) return 0;]])], - gl_cv_socket_ipv6=yes, gl_cv_socket_ipv6=no)]) - AC_MSG_RESULT([$gl_cv_socket_ipv6]) - if test $gl_cv_socket_ipv6 = yes; then - AC_DEFINE([HAVE_IPV6], [1], [Define to 1 if defines AF_INET6.]) - fi -]) - -AC_DEFUN([gl_SOCKET_FAMILY_UNIX], -[ - AC_REQUIRE([gl_HEADER_SYS_SOCKET]) - AC_CHECK_HEADERS_ONCE([sys/un.h]) - - AC_MSG_CHECKING([for UNIX domain sockets]) - AC_CACHE_VAL([gl_cv_socket_unix], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_SYS_UN_H -#include -#endif -#ifdef HAVE_WINSOCK2_H -#include -#endif]], -[[int x = AF_UNIX; struct sockaddr_un y; - if (&x && &y) return 0;]])], - gl_cv_socket_unix=yes, gl_cv_socket_unix=no)]) - AC_MSG_RESULT([$gl_cv_socket_unix]) - if test $gl_cv_socket_unix = yes; then - AC_DEFINE([HAVE_UNIXSOCKET], [1], [Define to 1 if defines AF_UNIX.]) - fi -]) diff --git a/src/gl/m4/ssize_t.m4 b/src/gl/m4/ssize_t.m4 deleted file mode 100644 index 3e7b9e6e02..0000000000 --- a/src/gl/m4/ssize_t.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ssize_t.m4 serial 5 (gettext-0.18.2) -dnl Copyright (C) 2001-2003, 2006, 2010-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Test whether ssize_t is defined. - -AC_DEFUN([gt_TYPE_SSIZE_T], -[ - AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[int x = sizeof (ssize_t *) + sizeof (ssize_t); - return !x;]])], - [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) - if test $gt_cv_ssize_t = no; then - AC_DEFINE([ssize_t], [int], - [Define as a signed type of the same size as size_t.]) - fi -]) diff --git a/src/gl/m4/stdalign.m4 b/src/gl/m4/stdalign.m4 deleted file mode 100644 index 49980cd636..0000000000 --- a/src/gl/m4/stdalign.m4 +++ /dev/null @@ -1,57 +0,0 @@ -# Check for stdalign.h that conforms to C11. - -dnl Copyright 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# Prepare for substituting if it is not supported. - -AC_DEFUN([gl_STDALIGN_H], -[ - AC_CACHE_CHECK([for working stdalign.h], - [gl_cv_header_working_stdalign_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include - - /* Test that alignof yields a result consistent with offsetof. - This catches GCC bug 52023 - . */ - #ifdef __cplusplus - template struct alignof_helper { char a; t b; }; - # define ao(type) offsetof (alignof_helper, b) - #else - # define ao(type) offsetof (struct { char a; type b; }, b) - #endif - char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1]; - char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1]; - char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1]; - - /* Test _Alignas only on platforms where gnulib can help. */ - #if \ - ((defined __cplusplus && 201103 <= __cplusplus) \ - || (defined __APPLE__ && defined __MACH__ \ - ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ - : __GNUC__) \ - || __HP_cc || __HP_aCC || __IBMC__ || __IBMCPP__ \ - || __ICC || 0x5110 <= __SUNPRO_C \ - || 1300 <= _MSC_VER) - struct alignas_test { char c; char alignas (8) alignas_8; }; - char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 - ? 1 : -1]; - #endif - ]])], - [gl_cv_header_working_stdalign_h=yes], - [gl_cv_header_working_stdalign_h=no])]) - - if test $gl_cv_header_working_stdalign_h = yes; then - STDALIGN_H='' - else - STDALIGN_H='stdalign.h' - fi - - AC_SUBST([STDALIGN_H]) - AM_CONDITIONAL([GL_GENERATE_STDALIGN_H], [test -n "$STDALIGN_H"]) -]) diff --git a/src/gl/m4/stdbool.m4 b/src/gl/m4/stdbool.m4 deleted file mode 100644 index 2a9b1db86f..0000000000 --- a/src/gl/m4/stdbool.m4 +++ /dev/null @@ -1,108 +0,0 @@ -# Check for stdbool.h that conforms to C99. - -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -#serial 7 - -# Prepare for substituting if it is not supported. - -AC_DEFUN([AM_STDBOOL_H], -[ - AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) - - # Define two additional variables used in the Makefile substitution. - - if test "$ac_cv_header_stdbool_h" = yes; then - STDBOOL_H='' - else - STDBOOL_H='stdbool.h' - fi - AC_SUBST([STDBOOL_H]) - AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) - - if test "$ac_cv_type__Bool" = yes; then - HAVE__BOOL=1 - else - HAVE__BOOL=0 - fi - AC_SUBST([HAVE__BOOL]) -]) - -# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. -AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) - -# This version of the macro is needed in autoconf <= 2.68. - -AC_DEFUN([AC_CHECK_HEADER_STDBOOL], - [AC_CACHE_CHECK([for stdbool.h that conforms to C99], - [ac_cv_header_stdbool_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ - #include - - #ifdef __cplusplus - typedef bool Bool; - #else - typedef _Bool Bool; - #ifndef bool - "error: bool is not defined" - #endif - #ifndef false - "error: false is not defined" - #endif - #if false - "error: false is not 0" - #endif - #ifndef true - "error: true is not defined" - #endif - #if true != 1 - "error: true is not 1" - #endif - #endif - - #ifndef __bool_true_false_are_defined - "error: __bool_true_false_are_defined is not defined" - #endif - - struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; - - char a[true == 1 ? 1 : -1]; - char b[false == 0 ? 1 : -1]; - char c[__bool_true_false_are_defined == 1 ? 1 : -1]; - char d[(bool) 0.5 == true ? 1 : -1]; - /* See body of main program for 'e'. */ - char f[(Bool) 0.0 == false ? 1 : -1]; - char g[true]; - char h[sizeof (Bool)]; - char i[sizeof s.t]; - enum { j = false, k = true, l = false * true, m = true * 256 }; - /* The following fails for - HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ - Bool n[m]; - char o[sizeof n == m * sizeof n[0] ? 1 : -1]; - char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; - /* Catch a bug in an HP-UX C compiler. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - */ - Bool q = true; - Bool *pq = &q; - bool *qq = &q; - ]], - [[ - bool e = &s; - *pq |= q; *pq |= ! q; - *qq |= q; *qq |= ! q; - /* Refer to every declared value, to avoid compiler optimizations. */ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l - + !m + !n + !o + !p + !q + !pq + !qq); - ]])], - [ac_cv_header_stdbool_h=yes], - [ac_cv_header_stdbool_h=no])]) - AC_CHECK_TYPES([_Bool]) -]) diff --git a/src/gl/m4/stddef_h.m4 b/src/gl/m4/stddef_h.m4 deleted file mode 100644 index c045c65f9f..0000000000 --- a/src/gl/m4/stddef_h.m4 +++ /dev/null @@ -1,51 +0,0 @@ -dnl A placeholder for , for platforms that have issues. -# stddef_h.m4 serial 5 -dnl Copyright (C) 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_STDDEF_H], -[ - AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) - AC_REQUIRE([gt_TYPE_WCHAR_T]) - STDDEF_H= - AC_CHECK_TYPE([max_align_t], [], [HAVE_MAX_ALIGN_T=0; STDDEF_H=stddef.h], - [[#include - ]]) - if test $gt_cv_c_wchar_t = no; then - HAVE_WCHAR_T=0 - STDDEF_H=stddef.h - fi - AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], - [gl_cv_decl_null_works], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include - int test[2 * (sizeof NULL == sizeof (void *)) -1]; -]])], - [gl_cv_decl_null_works=yes], - [gl_cv_decl_null_works=no])]) - if test $gl_cv_decl_null_works = no; then - REPLACE_NULL=1 - STDDEF_H=stddef.h - fi - AC_SUBST([STDDEF_H]) - AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) - if test -n "$STDDEF_H"; then - gl_NEXT_HEADERS([stddef.h]) - fi -]) - -AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) -]) - -AC_DEFUN([gl_STDDEF_H_DEFAULTS], -[ - dnl Assume proper GNU behavior unless another module says otherwise. - REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) - HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T]) - HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) -]) diff --git a/src/gl/m4/stdint.m4 b/src/gl/m4/stdint.m4 deleted file mode 100644 index 05b6ab7846..0000000000 --- a/src/gl/m4/stdint.m4 +++ /dev/null @@ -1,540 +0,0 @@ -# stdint.m4 serial 48 -dnl Copyright (C) 2001-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert and Bruno Haible. -dnl Test whether is supported or must be substituted. - -AC_DEFUN_ONCE([gl_STDINT_H], -[ - AC_PREREQ([2.59])dnl - - AC_REQUIRE([gl_LIMITS_H]) - - dnl Check for long long int and unsigned long long int. - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - if test $ac_cv_type_long_long_int = yes; then - HAVE_LONG_LONG_INT=1 - else - HAVE_LONG_LONG_INT=0 - fi - AC_SUBST([HAVE_LONG_LONG_INT]) - AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) - if test $ac_cv_type_unsigned_long_long_int = yes; then - HAVE_UNSIGNED_LONG_LONG_INT=1 - else - HAVE_UNSIGNED_LONG_LONG_INT=0 - fi - AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) - - dnl Check for , in the same way as gl_WCHAR_H does. - AC_CHECK_HEADERS_ONCE([wchar.h]) - if test $ac_cv_header_wchar_h = yes; then - HAVE_WCHAR_H=1 - else - HAVE_WCHAR_H=0 - fi - AC_SUBST([HAVE_WCHAR_H]) - - dnl Check for . - dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. - if test $ac_cv_header_inttypes_h = yes; then - HAVE_INTTYPES_H=1 - else - HAVE_INTTYPES_H=0 - fi - AC_SUBST([HAVE_INTTYPES_H]) - - dnl Check for . - dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. - if test $ac_cv_header_sys_types_h = yes; then - HAVE_SYS_TYPES_H=1 - else - HAVE_SYS_TYPES_H=0 - fi - AC_SUBST([HAVE_SYS_TYPES_H]) - - gl_CHECK_NEXT_HEADERS([stdint.h]) - if test $ac_cv_header_stdint_h = yes; then - HAVE_STDINT_H=1 - else - HAVE_STDINT_H=0 - fi - AC_SUBST([HAVE_STDINT_H]) - - dnl Now see whether we need a substitute . - if test $ac_cv_header_stdint_h = yes; then - AC_CACHE_CHECK([whether stdint.h conforms to C99], - [gl_cv_header_working_stdint_h], - [gl_cv_header_working_stdint_h=no - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#define __STDC_CONSTANT_MACROS 1 -#define __STDC_LIMIT_MACROS 1 -#include -/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ -#if !(defined WCHAR_MIN && defined WCHAR_MAX) -#error "WCHAR_MIN, WCHAR_MAX not defined in " -#endif -] -gl_STDINT_INCLUDES -[ -#ifdef INT8_MAX -int8_t a1 = INT8_MAX; -int8_t a1min = INT8_MIN; -#endif -#ifdef INT16_MAX -int16_t a2 = INT16_MAX; -int16_t a2min = INT16_MIN; -#endif -#ifdef INT32_MAX -int32_t a3 = INT32_MAX; -int32_t a3min = INT32_MIN; -#endif -#ifdef INT64_MAX -int64_t a4 = INT64_MAX; -int64_t a4min = INT64_MIN; -#endif -#ifdef UINT8_MAX -uint8_t b1 = UINT8_MAX; -#else -typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; -#endif -#ifdef UINT16_MAX -uint16_t b2 = UINT16_MAX; -#endif -#ifdef UINT32_MAX -uint32_t b3 = UINT32_MAX; -#endif -#ifdef UINT64_MAX -uint64_t b4 = UINT64_MAX; -#endif -int_least8_t c1 = INT8_C (0x7f); -int_least8_t c1max = INT_LEAST8_MAX; -int_least8_t c1min = INT_LEAST8_MIN; -int_least16_t c2 = INT16_C (0x7fff); -int_least16_t c2max = INT_LEAST16_MAX; -int_least16_t c2min = INT_LEAST16_MIN; -int_least32_t c3 = INT32_C (0x7fffffff); -int_least32_t c3max = INT_LEAST32_MAX; -int_least32_t c3min = INT_LEAST32_MIN; -int_least64_t c4 = INT64_C (0x7fffffffffffffff); -int_least64_t c4max = INT_LEAST64_MAX; -int_least64_t c4min = INT_LEAST64_MIN; -uint_least8_t d1 = UINT8_C (0xff); -uint_least8_t d1max = UINT_LEAST8_MAX; -uint_least16_t d2 = UINT16_C (0xffff); -uint_least16_t d2max = UINT_LEAST16_MAX; -uint_least32_t d3 = UINT32_C (0xffffffff); -uint_least32_t d3max = UINT_LEAST32_MAX; -uint_least64_t d4 = UINT64_C (0xffffffffffffffff); -uint_least64_t d4max = UINT_LEAST64_MAX; -int_fast8_t e1 = INT_FAST8_MAX; -int_fast8_t e1min = INT_FAST8_MIN; -int_fast16_t e2 = INT_FAST16_MAX; -int_fast16_t e2min = INT_FAST16_MIN; -int_fast32_t e3 = INT_FAST32_MAX; -int_fast32_t e3min = INT_FAST32_MIN; -int_fast64_t e4 = INT_FAST64_MAX; -int_fast64_t e4min = INT_FAST64_MIN; -uint_fast8_t f1 = UINT_FAST8_MAX; -uint_fast16_t f2 = UINT_FAST16_MAX; -uint_fast32_t f3 = UINT_FAST32_MAX; -uint_fast64_t f4 = UINT_FAST64_MAX; -#ifdef INTPTR_MAX -intptr_t g = INTPTR_MAX; -intptr_t gmin = INTPTR_MIN; -#endif -#ifdef UINTPTR_MAX -uintptr_t h = UINTPTR_MAX; -#endif -intmax_t i = INTMAX_MAX; -uintmax_t j = UINTMAX_MAX; - -/* Check that SIZE_MAX has the correct type, if possible. */ -#if 201112 <= __STDC_VERSION__ -int k = _Generic (SIZE_MAX, size_t: 0); -#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ - || (0x5110 <= __SUNPRO_C && !__STDC__)) -extern size_t k; -extern __typeof__ (SIZE_MAX) k; -#endif - -#include /* for CHAR_BIT */ -#define TYPE_MINIMUM(t) \ - ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) -#define TYPE_MAXIMUM(t) \ - ((t) ((t) 0 < (t) -1 \ - ? (t) -1 \ - : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) -struct s { - int check_PTRDIFF: - PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) - && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) - ? 1 : -1; - /* Detect bug in FreeBSD 6.0 / ia64. */ - int check_SIG_ATOMIC: - SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) - && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) - ? 1 : -1; - int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; - int check_WCHAR: - WCHAR_MIN == TYPE_MINIMUM (wchar_t) - && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) - ? 1 : -1; - /* Detect bug in mingw. */ - int check_WINT: - WINT_MIN == TYPE_MINIMUM (wint_t) - && WINT_MAX == TYPE_MAXIMUM (wint_t) - ? 1 : -1; - - /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ - int check_UINT8_C: - (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; - int check_UINT16_C: - (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; - - /* Detect bugs in OpenBSD 3.9 stdint.h. */ -#ifdef UINT8_MAX - int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; -#endif -#ifdef UINT16_MAX - int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; -#endif -#ifdef UINT32_MAX - int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; -#endif -#ifdef UINT64_MAX - int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; -#endif - int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; - int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; - int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; - int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; - int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; - int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; - int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; - int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; - int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; - int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; - int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; -}; - ]])], - [dnl Determine whether the various *_MIN, *_MAX macros are usable - dnl in preprocessor expression. We could do it by compiling a test - dnl program for each of these macros. It is faster to run a program - dnl that inspects the macro expansion. - dnl This detects a bug on HP-UX 11.23/ia64. - AC_RUN_IFELSE([ - AC_LANG_PROGRAM([[ -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#define __STDC_CONSTANT_MACROS 1 -#define __STDC_LIMIT_MACROS 1 -#include -] -gl_STDINT_INCLUDES -[ -#include -#include -#define MVAL(macro) MVAL1(macro) -#define MVAL1(expression) #expression -static const char *macro_values[] = - { -#ifdef INT8_MAX - MVAL (INT8_MAX), -#endif -#ifdef INT16_MAX - MVAL (INT16_MAX), -#endif -#ifdef INT32_MAX - MVAL (INT32_MAX), -#endif -#ifdef INT64_MAX - MVAL (INT64_MAX), -#endif -#ifdef UINT8_MAX - MVAL (UINT8_MAX), -#endif -#ifdef UINT16_MAX - MVAL (UINT16_MAX), -#endif -#ifdef UINT32_MAX - MVAL (UINT32_MAX), -#endif -#ifdef UINT64_MAX - MVAL (UINT64_MAX), -#endif - NULL - }; -]], [[ - const char **mv; - for (mv = macro_values; *mv != NULL; mv++) - { - const char *value = *mv; - /* Test whether it looks like a cast expression. */ - if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 - || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 - || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 - || strncmp (value, "((int)"/*)*/, 6) == 0 - || strncmp (value, "((signed short)"/*)*/, 15) == 0 - || strncmp (value, "((signed char)"/*)*/, 14) == 0) - return mv - macro_values + 1; - } - return 0; -]])], - [gl_cv_header_working_stdint_h=yes], - [], - [dnl When cross-compiling, assume it works. - gl_cv_header_working_stdint_h=yes - ]) - ]) - ]) - fi - - HAVE_C99_STDINT_H=0 - HAVE_SYS_BITYPES_H=0 - HAVE_SYS_INTTYPES_H=0 - STDINT_H=stdint.h - if test "$gl_cv_header_working_stdint_h" = yes; then - HAVE_C99_STDINT_H=1 - dnl Now see whether the system works without - dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. - AC_CACHE_CHECK([whether stdint.h predates C++11], - [gl_cv_header_stdint_predates_cxx11_h], - [gl_cv_header_stdint_predates_cxx11_h=yes - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ -#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ -#include -] -gl_STDINT_INCLUDES -[ -intmax_t im = INTMAX_MAX; -int32_t i32 = INT32_C (0x7fffffff); - ]])], - [gl_cv_header_stdint_predates_cxx11_h=no])]) - - if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then - AC_DEFINE([__STDC_CONSTANT_MACROS], [1], - [Define to 1 if the system predates C++11.]) - AC_DEFINE([__STDC_LIMIT_MACROS], [1], - [Define to 1 if the system predates C++11.]) - fi - AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], - [gl_cv_header_stdint_width], - [gl_cv_header_stdint_width=no - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[ - /* Work if build is not clean. */ - #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 - #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ - #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 - #endif - #include - ]gl_STDINT_INCLUDES[ - int iw = UINTMAX_WIDTH; - ]])], - [gl_cv_header_stdint_width=yes])]) - if test "$gl_cv_header_stdint_width" = yes; then - STDINT_H= - fi - else - dnl Check for , and for - dnl (used in Linux libc4 >= 4.6.7 and libc5). - AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) - if test $ac_cv_header_sys_inttypes_h = yes; then - HAVE_SYS_INTTYPES_H=1 - fi - if test $ac_cv_header_sys_bitypes_h = yes; then - HAVE_SYS_BITYPES_H=1 - fi - gl_STDINT_TYPE_PROPERTIES - fi - - # The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. - LIMITS_H=limits.h - AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) - - AC_SUBST([HAVE_C99_STDINT_H]) - AC_SUBST([HAVE_SYS_BITYPES_H]) - AC_SUBST([HAVE_SYS_INTTYPES_H]) - AC_SUBST([STDINT_H]) - AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"]) -]) - -dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) -dnl Determine the size of each of the given types in bits. -AC_DEFUN([gl_STDINT_BITSIZEOF], -[ - dnl Use a shell loop, to avoid bloating configure, and - dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into - dnl config.h.in, - dnl - extra AC_SUBST calls, so that the right substitutions are made. - m4_foreach_w([gltype], [$1], - [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), - [Define to the number of bits in type ']gltype['.])]) - for gltype in $1 ; do - AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], - [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], - [$2 -#include ], [result=unknown]) - eval gl_cv_bitsizeof_${gltype}=\$result - ]) - eval result=\$gl_cv_bitsizeof_${gltype} - if test $result = unknown; then - dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, - dnl do a syntax check even on unused #if conditions and give an error - dnl on valid C code like this: - dnl #if 0 - dnl # if > 32 - dnl # endif - dnl #endif - result=0 - fi - GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) - eval BITSIZEOF_${GLTYPE}=\$result - done - m4_foreach_w([gltype], [$1], - [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) -]) - -dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) -dnl Determine the signedness of each of the given types. -dnl Define HAVE_SIGNED_TYPE if type is signed. -AC_DEFUN([gl_CHECK_TYPES_SIGNED], -[ - dnl Use a shell loop, to avoid bloating configure, and - dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into - dnl config.h.in, - dnl - extra AC_SUBST calls, so that the right substitutions are made. - m4_foreach_w([gltype], [$1], - [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), - [Define to 1 if ']gltype[' is a signed integer type.])]) - for gltype in $1 ; do - AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([$2[ - int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], - result=yes, result=no) - eval gl_cv_type_${gltype}_signed=\$result - ]) - eval result=\$gl_cv_type_${gltype}_signed - GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - if test "$result" = yes; then - AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) - eval HAVE_SIGNED_${GLTYPE}=1 - else - eval HAVE_SIGNED_${GLTYPE}=0 - fi - done - m4_foreach_w([gltype], [$1], - [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) -]) - -dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) -dnl Determine the suffix to use for integer constants of the given types. -dnl Define t_SUFFIX for each such type. -AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], -[ - dnl Use a shell loop, to avoid bloating configure, and - dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into - dnl config.h.in, - dnl - extra AC_SUBST calls, so that the right substitutions are made. - m4_foreach_w([gltype], [$1], - [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], - [Define to l, ll, u, ul, ull, etc., as suitable for - constants of type ']gltype['.])]) - for gltype in $1 ; do - AC_CACHE_CHECK([for $gltype integer literal suffix], - [gl_cv_type_${gltype}_suffix], - [eval gl_cv_type_${gltype}_suffix=no - eval result=\$gl_cv_type_${gltype}_signed - if test "$result" = yes; then - glsufu= - else - glsufu=u - fi - for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do - case $glsuf in - '') gltype1='int';; - l) gltype1='long int';; - ll) gltype1='long long int';; - i64) gltype1='__int64';; - u) gltype1='unsigned int';; - ul) gltype1='unsigned long int';; - ull) gltype1='unsigned long long int';; - ui64)gltype1='unsigned __int64';; - esac - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([$2[ - extern $gltype foo; - extern $gltype1 foo;]])], - [eval gl_cv_type_${gltype}_suffix=\$glsuf]) - eval result=\$gl_cv_type_${gltype}_suffix - test "$result" != no && break - done]) - GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` - eval result=\$gl_cv_type_${gltype}_suffix - test "$result" = no && result= - eval ${GLTYPE}_SUFFIX=\$result - AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) - done - m4_foreach_w([gltype], [$1], - [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) -]) - -dnl gl_STDINT_INCLUDES -AC_DEFUN([gl_STDINT_INCLUDES], -[[ - /* BSD/OS 4.0.1 has a bug: , and must be - included before . */ - #include - #include - #if HAVE_WCHAR_H - # include - # include - # include - #endif -]]) - -dnl gl_STDINT_TYPE_PROPERTIES -dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t -dnl of interest to stdint.in.h. -AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], -[ - AC_REQUIRE([gl_MULTIARCH]) - if test $APPLE_UNIVERSAL_BUILD = 0; then - gl_STDINT_BITSIZEOF([ptrdiff_t size_t], - [gl_STDINT_INCLUDES]) - fi - gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], - [gl_STDINT_INCLUDES]) - gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], - [gl_STDINT_INCLUDES]) - gl_cv_type_ptrdiff_t_signed=yes - gl_cv_type_size_t_signed=no - if test $APPLE_UNIVERSAL_BUILD = 0; then - gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], - [gl_STDINT_INCLUDES]) - fi - gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], - [gl_STDINT_INCLUDES]) - - dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 - dnl requirement that wint_t is "unchanged by default argument promotions". - dnl In this case gnulib's and override wint_t. - dnl Set the variable BITSIZEOF_WINT_T accordingly. - if test $BITSIZEOF_WINT_T -lt 32; then - BITSIZEOF_WINT_T=32 - fi -]) - -dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. -dnl Remove this when we can assume autoconf >= 2.61. -m4_ifdef([AC_COMPUTE_INT], [], [ - AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) -]) diff --git a/src/gl/m4/stdint_h.m4 b/src/gl/m4/stdint_h.m4 deleted file mode 100644 index f823b94c33..0000000000 --- a/src/gl/m4/stdint_h.m4 +++ /dev/null @@ -1,27 +0,0 @@ -# stdint_h.m4 serial 9 -dnl Copyright (C) 1997-2004, 2006, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Paul Eggert. - -# Define HAVE_STDINT_H_WITH_UINTMAX if exists, -# doesn't clash with , and declares uintmax_t. - -AC_DEFUN([gl_AC_HEADER_STDINT_H], -[ - AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include ]], - [[uintmax_t i = (uintmax_t) -1; return !i;]])], - [gl_cv_header_stdint_h=yes], - [gl_cv_header_stdint_h=no])]) - if test $gl_cv_header_stdint_h = yes; then - AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], - [Define if exists, doesn't clash with , - and declares uintmax_t. ]) - fi -]) diff --git a/src/gl/m4/stdio_h.m4 b/src/gl/m4/stdio_h.m4 deleted file mode 100644 index eaa25a01d4..0000000000 --- a/src/gl/m4/stdio_h.m4 +++ /dev/null @@ -1,225 +0,0 @@ -# stdio_h.m4 serial 48 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_STDIO_H], -[ - AH_VERBATIM([MINGW_ANSI_STDIO], -[/* Use GNU style printf and scanf. */ -#ifndef __USE_MINGW_ANSI_STDIO -# undef __USE_MINGW_ANSI_STDIO -#endif -]) - AC_DEFINE([__USE_MINGW_ANSI_STDIO]) - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - gl_NEXT_HEADERS([stdio.h]) - - dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and - dnl inttypes.h behave like gnu instead of system; we must give our - dnl printf wrapper the right attribute to match. - AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros], - [gl_cv_func_printf_attribute_flavor], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #define __STDC_FORMAT_MACROS 1 - #include - #include - /* For non-mingw systems, compilation will trivially succeed. - For mingw, compilation will succeed for older mingw (system - printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ - #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) && \ - (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) - extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; - #endif - ]])], [gl_cv_func_printf_attribute_flavor=system], - [gl_cv_func_printf_attribute_flavor=gnu])]) - if test "$gl_cv_func_printf_attribute_flavor" = gnu; then - AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1], - [Define to 1 if printf and friends should be labeled with - attribute "__gnu_printf__" instead of "__printf__"]) - fi - - dnl No need to create extra modules for these functions. Everyone who uses - dnl likely needs them. - GNULIB_FSCANF=1 - gl_MODULE_INDICATOR([fscanf]) - GNULIB_SCANF=1 - gl_MODULE_INDICATOR([scanf]) - GNULIB_FGETC=1 - GNULIB_GETC=1 - GNULIB_GETCHAR=1 - GNULIB_FGETS=1 - GNULIB_FREAD=1 - dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c" - dnl "expected source file, required through AC_LIBSOURCES, not found". It is - dnl also an optimization, to avoid performing a configure check whose result - dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING - dnl or GNULIB_NONBLOCKING redundant. - m4_ifdef([gl_NONBLOCKING_IO], [ - gl_NONBLOCKING_IO - if test $gl_cv_have_nonblocking != yes; then - REPLACE_STDIO_READ_FUNCS=1 - AC_LIBOBJ([stdio-read]) - fi - ]) - - dnl No need to create extra modules for these functions. Everyone who uses - dnl likely needs them. - GNULIB_FPRINTF=1 - GNULIB_PRINTF=1 - GNULIB_VFPRINTF=1 - GNULIB_VPRINTF=1 - GNULIB_FPUTC=1 - GNULIB_PUTC=1 - GNULIB_PUTCHAR=1 - GNULIB_FPUTS=1 - GNULIB_PUTS=1 - GNULIB_FWRITE=1 - dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" - dnl "expected source file, required through AC_LIBSOURCES, not found". It is - dnl also an optimization, to avoid performing a configure check whose result - dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or - dnl GNULIB_SIGPIPE redundant. - m4_ifdef([gl_SIGNAL_SIGPIPE], [ - gl_SIGNAL_SIGPIPE - if test $gl_cv_header_signal_h_SIGPIPE != yes; then - REPLACE_STDIO_WRITE_FUNCS=1 - AC_LIBOBJ([stdio-write]) - fi - ]) - dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" - dnl "expected source file, required through AC_LIBSOURCES, not found". It is - dnl also an optimization, to avoid performing a configure check whose result - dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING - dnl or GNULIB_NONBLOCKING redundant. - m4_ifdef([gl_NONBLOCKING_IO], [ - gl_NONBLOCKING_IO - if test $gl_cv_have_nonblocking != yes; then - REPLACE_STDIO_WRITE_FUNCS=1 - AC_LIBOBJ([stdio-write]) - fi - ]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use, and which is not - dnl guaranteed by both C89 and C11. - gl_WARN_ON_USE_PREPARE([[#include - ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen - renameat snprintf tmpfile vdprintf vsnprintf]) -]) - -AC_DEFUN([gl_STDIO_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_STDIO_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_STDIO_H_DEFAULTS], -[ - GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF]) - GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE]) - GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN]) - GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) - GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC]) - GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS]) - GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN]) - GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF]) - GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX]) - GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE]) - GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC]) - GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS]) - GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD]) - GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) - GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF]) - GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK]) - GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO]) - GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL]) - GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO]) - GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE]) - GNULIB_GETC=0; AC_SUBST([GNULIB_GETC]) - GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR]) - GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM]) - GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE]) - GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF]) - GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX]) - GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE]) - GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR]) - GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN]) - GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF]) - GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX]) - GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC]) - GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR]) - GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS]) - GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE]) - GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME]) - GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT]) - GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF]) - GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) - GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) - GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING]) - GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE]) - GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE]) - GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) - GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF]) - GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF]) - GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF]) - GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF]) - GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX]) - GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF]) - GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX]) - GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF]) - GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) - HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) - HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) - HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) - HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) - HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) - HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) - HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) - HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) - HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) - HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) - HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) - HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) - HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) - HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) - HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) - REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) - REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) - REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) - REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) - REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) - REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) - REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) - REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) - REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) - REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) - REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) - REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) - REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) - REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) - REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) - REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) - REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) - REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) - REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) - REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) - REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) - REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) - REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) - REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) - REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) - REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) - REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) - REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) - REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) - REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) - REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) - REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) -]) diff --git a/src/gl/m4/stdlib_h.m4 b/src/gl/m4/stdlib_h.m4 deleted file mode 100644 index 3999068153..0000000000 --- a/src/gl/m4/stdlib_h.m4 +++ /dev/null @@ -1,120 +0,0 @@ -# stdlib_h.m4 serial 43 -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_STDLIB_H], -[ - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - gl_NEXT_HEADERS([stdlib.h]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use, and which is not - dnl guaranteed by C89. - gl_WARN_ON_USE_PREPARE([[#include -#if HAVE_SYS_LOADAVG_H -# include -#endif -#if HAVE_RANDOM_H -# include -#endif - ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt - initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps - posix_openpt ptsname ptsname_r qsort_r random random_r realpath rpmatch - secure_getenv setenv setstate setstate_r srandom srandom_r - strtod strtoll strtoull unlockpt unsetenv]) -]) - -AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_STDLIB_H_DEFAULTS], -[ - GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT]) - GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL]) - GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX]) - GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME]) - GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG]) - GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT]) - GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT]) - GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX]) - GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC]) - GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP]) - GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP]) - GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS]) - GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP]) - GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS]) - GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT]) - GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME]) - GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R]) - GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) - GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R]) - GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM]) - GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) - GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) - GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH]) - GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) - GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV]) - GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) - GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) - GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) - GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL]) - GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX]) - GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT]) - GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) - GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) - HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) - HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) - HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) - HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) - HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) - HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) - HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) - HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) - HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP]) - HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS]) - HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) - HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) - HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) - HAVE_QSORT_R=1; AC_SUBST([HAVE_QSORT_R]) - HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) - HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) - HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) - HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) - HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) - HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV]) - HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) - HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) - HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) - HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) - HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) - HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) - HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) - HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT]) - HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) - REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC]) - REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) - REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC]) - REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) - REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) - REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME]) - REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) - REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) - REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R]) - REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) - REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC]) - REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) - REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) - REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) - REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) - REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) -]) diff --git a/src/gl/m4/strdup.m4 b/src/gl/m4/strdup.m4 deleted file mode 100644 index ff7060abd3..0000000000 --- a/src/gl/m4/strdup.m4 +++ /dev/null @@ -1,36 +0,0 @@ -# strdup.m4 serial 13 - -dnl Copyright (C) 2002-2016 Free Software Foundation, Inc. - -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_STRDUP], -[ - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - AC_CHECK_FUNCS_ONCE([strdup]) - AC_CHECK_DECLS_ONCE([strdup]) - if test $ac_cv_have_decl_strdup = no; then - HAVE_DECL_STRDUP=0 - fi -]) - -AC_DEFUN([gl_FUNC_STRDUP_POSIX], -[ - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) - AC_CHECK_FUNCS_ONCE([strdup]) - if test $ac_cv_func_strdup = yes; then - if test $gl_cv_func_malloc_posix != yes; then - REPLACE_STRDUP=1 - fi - fi - AC_CHECK_DECLS_ONCE([strdup]) - if test $ac_cv_have_decl_strdup = no; then - HAVE_DECL_STRDUP=0 - fi -]) - -# Prerequisites of lib/strdup.c. -AC_DEFUN([gl_PREREQ_STRDUP], [:]) diff --git a/src/gl/m4/strerror.m4 b/src/gl/m4/strerror.m4 deleted file mode 100644 index e286594b58..0000000000 --- a/src/gl/m4/strerror.m4 +++ /dev/null @@ -1,96 +0,0 @@ -# strerror.m4 serial 17 -dnl Copyright (C) 2002, 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_STRERROR], -[ - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - AC_REQUIRE([gl_HEADER_ERRNO_H]) - AC_REQUIRE([gl_FUNC_STRERROR_0]) - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ - AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) - ]) - if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then - AC_CACHE_CHECK([for working strerror function], - [gl_cv_func_working_strerror], - [AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[if (!*strerror (-2)) return 1;]])], - [gl_cv_func_working_strerror=yes], - [gl_cv_func_working_strerror=no], - [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_working_strerror="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_working_strerror="guessing no" ;; - esac - ]) - ]) - case "$gl_cv_func_working_strerror" in - *yes) ;; - *) - dnl The system's strerror() fails to return a string for out-of-range - dnl integers. Replace it. - REPLACE_STRERROR=1 - ;; - esac - m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ - dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's - dnl buffer, we must replace strerror. - case "$gl_cv_func_strerror_r_works" in - *no) REPLACE_STRERROR=1 ;; - esac - ]) - else - dnl The system's strerror() cannot know about the new errno values we add - dnl to , or any fix for strerror(0). Replace it. - REPLACE_STRERROR=1 - fi -]) - -dnl Detect if strerror(0) passes (that is, does not set errno, and does not -dnl return a string that matches strerror(-1)). -AC_DEFUN([gl_FUNC_STRERROR_0], -[ - AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - REPLACE_STRERROR_0=0 - AC_CACHE_CHECK([whether strerror(0) succeeds], - [gl_cv_func_strerror_0_works], - [AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include - ]], - [[int result = 0; - char *str; - errno = 0; - str = strerror (0); - if (!*str) result |= 1; - if (errno) result |= 2; - if (strstr (str, "nknown") || strstr (str, "ndefined")) - result |= 4; - return result;]])], - [gl_cv_func_strerror_0_works=yes], - [gl_cv_func_strerror_0_works=no], - [case "$host_os" in - # Guess yes on glibc systems. - *-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; - # If we don't know, assume the worst. - *) gl_cv_func_strerror_0_works="guessing no" ;; - esac - ]) - ]) - case "$gl_cv_func_strerror_0_works" in - *yes) ;; - *) - REPLACE_STRERROR_0=1 - AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) - does not return a message implying success.]) - ;; - esac -]) diff --git a/src/gl/m4/strftime.m4 b/src/gl/m4/strftime.m4 deleted file mode 100644 index 9598e7272e..0000000000 --- a/src/gl/m4/strftime.m4 +++ /dev/null @@ -1,28 +0,0 @@ -# serial 33 - -# Copyright (C) 1996-1997, 1999-2007, 2009-2016 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# Written by Jim Meyering and Paul Eggert. - -AC_DEFUN([gl_FUNC_GNU_STRFTIME], -[ - gl_FUNC_STRFTIME -]) - -# These are the prerequisite macros for GNU's strftime.c replacement. -AC_DEFUN([gl_FUNC_STRFTIME], -[ - # This defines (or not) HAVE_TZNAME and HAVE_TM_ZONE. - AC_REQUIRE([AC_STRUCT_TIMEZONE]) - - AC_REQUIRE([gl_TM_GMTOFF]) - - AC_CHECK_FUNCS_ONCE([tzset]) - - AC_DEFINE([my_strftime], [nstrftime], - [Define to the name of the strftime replacement function.]) -]) diff --git a/src/gl/m4/string_h.m4 b/src/gl/m4/string_h.m4 deleted file mode 100644 index 0c5ec6f9a0..0000000000 --- a/src/gl/m4/string_h.m4 +++ /dev/null @@ -1,120 +0,0 @@ -# Configure a GNU-like replacement for . - -# Copyright (C) 2007-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 21 - -# Written by Paul Eggert. - -AC_DEFUN([gl_HEADER_STRING_H], -[ - dnl Use AC_REQUIRE here, so that the default behavior below is expanded - dnl once only, before all statements that occur in other macros. - AC_REQUIRE([gl_HEADER_STRING_H_BODY]) -]) - -AC_DEFUN([gl_HEADER_STRING_H_BODY], -[ - AC_REQUIRE([AC_C_RESTRICT]) - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - gl_NEXT_HEADERS([string.h]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use, and which is not - dnl guaranteed by C89. - gl_WARN_ON_USE_PREPARE([[#include - ]], - [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul - strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r - strerror_r strsignal strverscmp]) -]) - -AC_DEFUN([gl_STRING_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], -[ - GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) - GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) - GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) - GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) - GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) - GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) - GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) - GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) - GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) - GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) - GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) - GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) - GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) - GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) - GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) - GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) - GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) - GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) - GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) - GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) - GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) - GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) - GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) - GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) - GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) - GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) - GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) - GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) - GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) - GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) - GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) - GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) - GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) - GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) - GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) - GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) - GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) - HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) - HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) - HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR]) - HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) - HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) - HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) - HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) - HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) - HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) - HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) - HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) - HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) - HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) - HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) - HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) - HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) - HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) - HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) - HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) - HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) - REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) - REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) - REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) - REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) - REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) - REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) - REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) - REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) - REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) - REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) - REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) - REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) - REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) - REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) - UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) -]) diff --git a/src/gl/m4/sys_select_h.m4 b/src/gl/m4/sys_select_h.m4 deleted file mode 100644 index 23526e5f56..0000000000 --- a/src/gl/m4/sys_select_h.m4 +++ /dev/null @@ -1,95 +0,0 @@ -# sys_select_h.m4 serial 20 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_HEADER_SYS_SELECT], -[ - AC_REQUIRE([AC_C_RESTRICT]) - AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS]) - AC_CACHE_CHECK([whether is self-contained], - [gl_cv_header_sys_select_h_selfcontained], - [ - dnl Test against two bugs: - dnl 1. On many platforms, assumes prior inclusion of - dnl . - dnl 2. On OSF/1 4.0, provides only a forward declaration - dnl of 'struct timeval', and no definition of this type. - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[struct timeval b;]])], - [gl_cv_header_sys_select_h_selfcontained=yes], - [gl_cv_header_sys_select_h_selfcontained=no]) - dnl Test against another bug: - dnl 3. On Solaris 10, provides an FD_ZERO implementation - dnl that relies on memset(), but without including . - if test $gl_cv_header_sys_select_h_selfcontained = yes; then - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include ]], - [[int memset; int bzero;]]) - ], - [AC_LINK_IFELSE( - [AC_LANG_PROGRAM([[#include ]], [[ - #undef memset - #define memset nonexistent_memset - extern - #ifdef __cplusplus - "C" - #endif - void *memset (void *, int, unsigned long); - #undef bzero - #define bzero nonexistent_bzero - extern - #ifdef __cplusplus - "C" - #endif - void bzero (void *, unsigned long); - fd_set fds; - FD_ZERO (&fds); - ]]) - ], - [], - [gl_cv_header_sys_select_h_selfcontained=no]) - ]) - fi - ]) - dnl is always overridden, because of GNULIB_POSIXCHECK. - gl_CHECK_NEXT_HEADERS([sys/select.h]) - if test $ac_cv_header_sys_select_h = yes; then - HAVE_SYS_SELECT_H=1 - else - HAVE_SYS_SELECT_H=0 - fi - AC_SUBST([HAVE_SYS_SELECT_H]) - gl_PREREQ_SYS_H_WINSOCK2 - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[ -/* Some systems require prerequisite headers. */ -#include -#if !(defined __GLIBC__ && !defined __UCLIBC__) && HAVE_SYS_TIME_H -# include -#endif -#include - ]], [pselect select]) -]) - -AC_DEFUN([gl_SYS_SELECT_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_SYS_SELECT_H_DEFAULTS], -[ - GNULIB_PSELECT=0; AC_SUBST([GNULIB_PSELECT]) - GNULIB_SELECT=0; AC_SUBST([GNULIB_SELECT]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_PSELECT=1; AC_SUBST([HAVE_PSELECT]) - REPLACE_PSELECT=0; AC_SUBST([REPLACE_PSELECT]) - REPLACE_SELECT=0; AC_SUBST([REPLACE_SELECT]) -]) diff --git a/src/gl/m4/sys_socket_h.m4 b/src/gl/m4/sys_socket_h.m4 deleted file mode 100644 index ae500c7605..0000000000 --- a/src/gl/m4/sys_socket_h.m4 +++ /dev/null @@ -1,176 +0,0 @@ -# sys_socket_h.m4 serial 23 -dnl Copyright (C) 2005-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Simon Josefsson. - -AC_DEFUN([gl_HEADER_SYS_SOCKET], -[ - AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) - AC_REQUIRE([AC_CANONICAL_HOST]) - - dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have - dnl old-style declarations (with return type 'int' instead of 'ssize_t') - dnl unless _POSIX_PII_SOCKET is defined. - case "$host_os" in - osf*) - AC_DEFINE([_POSIX_PII_SOCKET], [1], - [Define to 1 in order to get the POSIX compatible declarations - of socket functions.]) - ;; - esac - - AC_CACHE_CHECK([whether is self-contained], - [gl_cv_header_sys_socket_h_selfcontained], - [ - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])], - [gl_cv_header_sys_socket_h_selfcontained=yes], - [gl_cv_header_sys_socket_h_selfcontained=no]) - ]) - if test $gl_cv_header_sys_socket_h_selfcontained = yes; then - dnl If the shutdown function exists, should define - dnl SHUT_RD, SHUT_WR, SHUT_RDWR. - AC_CHECK_FUNCS([shutdown]) - if test $ac_cv_func_shutdown = yes; then - AC_CACHE_CHECK([whether defines the SHUT_* macros], - [gl_cv_header_sys_socket_h_shut], - [ - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[#include ]], - [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], - [gl_cv_header_sys_socket_h_shut=yes], - [gl_cv_header_sys_socket_h_shut=no]) - ]) - if test $gl_cv_header_sys_socket_h_shut = no; then - SYS_SOCKET_H='sys/socket.h' - fi - fi - fi - # We need to check for ws2tcpip.h now. - gl_PREREQ_SYS_H_SOCKET - AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ - /* sys/types.h is not needed according to POSIX, but the - sys/socket.h in i386-unknown-freebsd4.10 and - powerpc-apple-darwin5.5 required it. */ -#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_WS2TCPIP_H -#include -#endif -]) - if test $ac_cv_type_struct_sockaddr_storage = no; then - HAVE_STRUCT_SOCKADDR_STORAGE=0 - fi - if test $ac_cv_type_sa_family_t = no; then - HAVE_SA_FAMILY_T=0 - fi - if test $ac_cv_type_struct_sockaddr_storage != no; then - AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], - [], - [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], - [#include - #ifdef HAVE_SYS_SOCKET_H - #include - #endif - #ifdef HAVE_WS2TCPIP_H - #include - #endif - ]) - fi - if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ - || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then - SYS_SOCKET_H='sys/socket.h' - fi - gl_PREREQ_SYS_H_WINSOCK2 - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[ -/* Some systems require prerequisite headers. */ -#include -#include - ]], [socket connect accept bind getpeername getsockname getsockopt - listen recv send recvfrom sendto setsockopt shutdown accept4]) -]) - -AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], -[ - dnl Check prerequisites of the replacement. - AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) - gl_CHECK_NEXT_HEADERS([sys/socket.h]) - if test $ac_cv_header_sys_socket_h = yes; then - HAVE_SYS_SOCKET_H=1 - HAVE_WS2TCPIP_H=0 - else - HAVE_SYS_SOCKET_H=0 - if test $ac_cv_header_ws2tcpip_h = yes; then - HAVE_WS2TCPIP_H=1 - else - HAVE_WS2TCPIP_H=0 - fi - fi - AC_SUBST([HAVE_SYS_SOCKET_H]) - AC_SUBST([HAVE_WS2TCPIP_H]) -]) - -# Common prerequisites of the replacement and of the -# replacement. -# Sets and substitutes HAVE_WINSOCK2_H. -AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], -[ - m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) - m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) - AC_CHECK_HEADERS_ONCE([sys/socket.h]) - if test $ac_cv_header_sys_socket_h != yes; then - dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make - dnl the check for those headers unconditional; yet cygwin reports - dnl that the headers are present but cannot be compiled (since on - dnl cygwin, all socket information should come from sys/socket.h). - AC_CHECK_HEADERS([winsock2.h]) - fi - if test "$ac_cv_header_winsock2_h" = yes; then - HAVE_WINSOCK2_H=1 - UNISTD_H_HAVE_WINSOCK2_H=1 - SYS_IOCTL_H_HAVE_WINSOCK2_H=1 - else - HAVE_WINSOCK2_H=0 - fi - AC_SUBST([HAVE_WINSOCK2_H]) -]) - -AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], -[ - GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET]) - GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT]) - GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT]) - GNULIB_BIND=0; AC_SUBST([GNULIB_BIND]) - GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME]) - GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME]) - GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT]) - GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN]) - GNULIB_RECV=0; AC_SUBST([GNULIB_RECV]) - GNULIB_SEND=0; AC_SUBST([GNULIB_SEND]) - GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM]) - GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO]) - GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT]) - GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN]) - GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4]) - HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) - HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; - AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) - HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) - HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) -]) diff --git a/src/gl/m4/sys_stat_h.m4 b/src/gl/m4/sys_stat_h.m4 deleted file mode 100644 index 3d43b6f5ef..0000000000 --- a/src/gl/m4/sys_stat_h.m4 +++ /dev/null @@ -1,96 +0,0 @@ -# sys_stat_h.m4 serial 28 -*- Autoconf -*- -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Eric Blake. -dnl Provide a GNU-like . - -AC_DEFUN([gl_HEADER_SYS_STAT_H], -[ - AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) - - dnl Check for broken stat macros. - AC_REQUIRE([AC_HEADER_STAT]) - - gl_CHECK_NEXT_HEADERS([sys/stat.h]) - - dnl Ensure the type mode_t gets defined. - AC_REQUIRE([AC_TYPE_MODE_T]) - - dnl Whether to override 'struct stat'. - m4_ifdef([gl_LARGEFILE], [ - AC_REQUIRE([gl_LARGEFILE]) - ], [ - WINDOWS_64_BIT_ST_SIZE=0 - ]) - AC_SUBST([WINDOWS_64_BIT_ST_SIZE]) - if test $WINDOWS_64_BIT_ST_SIZE = 1; then - AC_DEFINE([_GL_WINDOWS_64_BIT_ST_SIZE], [1], - [Define to 1 if Gnulib overrides 'struct stat' on Windows so that - struct stat.st_size becomes 64-bit.]) - fi - - dnl Define types that are supposed to be defined in or - dnl . - AC_CHECK_TYPE([nlink_t], [], - [AC_DEFINE([nlink_t], [int], - [Define to the type of st_nlink in struct stat, or a supertype.])], - [#include - #include ]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[#include - ]], [fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat - mknod mknodat stat utimensat]) -]) # gl_HEADER_SYS_STAT_H - -AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_SYS_STAT_H_DEFAULTS], -[ - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR - GNULIB_FCHMODAT=0; AC_SUBST([GNULIB_FCHMODAT]) - GNULIB_FSTAT=0; AC_SUBST([GNULIB_FSTAT]) - GNULIB_FSTATAT=0; AC_SUBST([GNULIB_FSTATAT]) - GNULIB_FUTIMENS=0; AC_SUBST([GNULIB_FUTIMENS]) - GNULIB_LCHMOD=0; AC_SUBST([GNULIB_LCHMOD]) - GNULIB_LSTAT=0; AC_SUBST([GNULIB_LSTAT]) - GNULIB_MKDIRAT=0; AC_SUBST([GNULIB_MKDIRAT]) - GNULIB_MKFIFO=0; AC_SUBST([GNULIB_MKFIFO]) - GNULIB_MKFIFOAT=0; AC_SUBST([GNULIB_MKFIFOAT]) - GNULIB_MKNOD=0; AC_SUBST([GNULIB_MKNOD]) - GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT]) - GNULIB_STAT=0; AC_SUBST([GNULIB_STAT]) - GNULIB_UTIMENSAT=0; AC_SUBST([GNULIB_UTIMENSAT]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT]) - HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT]) - HAVE_FUTIMENS=1; AC_SUBST([HAVE_FUTIMENS]) - HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD]) - HAVE_LSTAT=1; AC_SUBST([HAVE_LSTAT]) - HAVE_MKDIRAT=1; AC_SUBST([HAVE_MKDIRAT]) - HAVE_MKFIFO=1; AC_SUBST([HAVE_MKFIFO]) - HAVE_MKFIFOAT=1; AC_SUBST([HAVE_MKFIFOAT]) - HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD]) - HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT]) - HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT]) - REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT]) - REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT]) - REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS]) - REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT]) - REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR]) - REPLACE_MKFIFO=0; AC_SUBST([REPLACE_MKFIFO]) - REPLACE_MKNOD=0; AC_SUBST([REPLACE_MKNOD]) - REPLACE_STAT=0; AC_SUBST([REPLACE_STAT]) - REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT]) -]) diff --git a/src/gl/m4/sys_time_h.m4 b/src/gl/m4/sys_time_h.m4 deleted file mode 100644 index 3061a9c185..0000000000 --- a/src/gl/m4/sys_time_h.m4 +++ /dev/null @@ -1,111 +0,0 @@ -# Configure a replacement for . -# serial 8 - -# Copyright (C) 2007, 2009-2016 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# Written by Paul Eggert and Martin Lambers. - -AC_DEFUN([gl_HEADER_SYS_TIME_H], -[ - dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement - dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1 - dnl statements that occur in other macros. - AC_REQUIRE([gl_HEADER_SYS_TIME_H_BODY]) -]) - -AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY], -[ - AC_REQUIRE([AC_C_RESTRICT]) - AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) - AC_CHECK_HEADERS_ONCE([sys/time.h]) - gl_CHECK_NEXT_HEADERS([sys/time.h]) - - if test $ac_cv_header_sys_time_h != yes; then - HAVE_SYS_TIME_H=0 - fi - - dnl On native Windows with MSVC, 'struct timeval' is defined in - dnl only. So include that header in the list. - gl_PREREQ_SYS_H_WINSOCK2 - AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#if HAVE_SYS_TIME_H - #include - #endif - #include - #if HAVE_WINSOCK2_H - # include - #endif - ]], - [[static struct timeval x; x.tv_sec = x.tv_usec;]])], - [gl_cv_sys_struct_timeval=yes], - [gl_cv_sys_struct_timeval=no]) - ]) - if test $gl_cv_sys_struct_timeval != yes; then - HAVE_STRUCT_TIMEVAL=0 - else - dnl On native Windows with a 64-bit 'time_t', 'struct timeval' is defined - dnl (in and for mingw64, in only - dnl for MSVC) with a tv_sec field of type 'long' (32-bit!), which is - dnl smaller than the 'time_t' type mandated by POSIX. - dnl On OpenBSD 5.1 amd64, tv_sec is 64 bits and time_t 32 bits, but - dnl that is good enough. - AC_CACHE_CHECK([for wide-enough struct timeval.tv_sec member], - [gl_cv_sys_struct_timeval_tv_sec], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#if HAVE_SYS_TIME_H - #include - #endif - #include - #if HAVE_WINSOCK2_H - # include - #endif - ]], - [[static struct timeval x; - typedef int verify_tv_sec_type[ - sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 - ]; - ]])], - [gl_cv_sys_struct_timeval_tv_sec=yes], - [gl_cv_sys_struct_timeval_tv_sec=no]) - ]) - if test $gl_cv_sys_struct_timeval_tv_sec != yes; then - REPLACE_STRUCT_TIMEVAL=1 - fi - fi - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[ -#if HAVE_SYS_TIME_H -# include -#endif -#include - ]], [gettimeofday]) -]) - -AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_HEADER_SYS_TIME_H_DEFAULTS], -[ - GNULIB_GETTIMEOFDAY=0; AC_SUBST([GNULIB_GETTIMEOFDAY]) - dnl Assume POSIX behavior unless another module says otherwise. - HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY]) - HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL]) - HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H]) - HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T]) - REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY]) - REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL]) -]) diff --git a/src/gl/m4/sys_types_h.m4 b/src/gl/m4/sys_types_h.m4 deleted file mode 100644 index 159b005b3d..0000000000 --- a/src/gl/m4/sys_types_h.m4 +++ /dev/null @@ -1,49 +0,0 @@ -# sys_types_h.m4 serial 6 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN_ONCE([gl_SYS_TYPES_H], -[ - AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) - gl_NEXT_HEADERS([sys/types.h]) - - dnl Ensure the type pid_t gets defined. - AC_REQUIRE([AC_TYPE_PID_T]) - - dnl Ensure the type mode_t gets defined. - AC_REQUIRE([AC_TYPE_MODE_T]) - - dnl Whether to override the 'off_t' type. - AC_REQUIRE([gl_TYPE_OFF_T]) -]) - -AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], -[ -]) - -# This works around a buggy version in autoconf <= 2.69. -# See - -m4_version_prereq([2.70], [], [ - -# This is taken from the following Autoconf patch: -# http://git.sv.gnu.org/cgit/autoconf.git/commit/?id=e17a30e98 - -m4_undefine([AC_HEADER_MAJOR]) -AC_DEFUN([AC_HEADER_MAJOR], -[AC_CHECK_HEADERS_ONCE([sys/types.h]) -AC_CHECK_HEADER([sys/mkdev.h], - [AC_DEFINE([MAJOR_IN_MKDEV], [1], - [Define to 1 if `major', `minor', and `makedev' are declared in - .])]) -if test $ac_cv_header_sys_mkdev_h = no; then - AC_CHECK_HEADER([sys/sysmacros.h], - [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], - [Define to 1 if `major', `minor', and `makedev' are declared in - .])]) -fi -]) - -]) diff --git a/src/gl/m4/sys_uio_h.m4 b/src/gl/m4/sys_uio_h.m4 deleted file mode 100644 index d4d967fd57..0000000000 --- a/src/gl/m4/sys_uio_h.m4 +++ /dev/null @@ -1,31 +0,0 @@ -# sys_uio_h.m4 serial 1 -dnl Copyright (C) 2011-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_HEADER_SYS_UIO], -[ - AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS]) - dnl is always overridden, because of GNULIB_POSIXCHECK. - gl_CHECK_NEXT_HEADERS([sys/uio.h]) - if test $ac_cv_header_sys_uio_h = yes; then - HAVE_SYS_UIO_H=1 - else - HAVE_SYS_UIO_H=0 - fi - AC_SUBST([HAVE_SYS_UIO_H]) -]) - -AC_DEFUN([gl_SYS_UIO_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_SYS_UIO_H_DEFAULTS], -[ -]) diff --git a/src/gl/m4/time_h.m4 b/src/gl/m4/time_h.m4 deleted file mode 100644 index eb2a631e2c..0000000000 --- a/src/gl/m4/time_h.m4 +++ /dev/null @@ -1,134 +0,0 @@ -# Configure a more-standard replacement for . - -# Copyright (C) 2000-2001, 2003-2007, 2009-2016 Free Software Foundation, Inc. - -# serial 9 - -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# Written by Paul Eggert and Jim Meyering. - -AC_DEFUN([gl_HEADER_TIME_H], -[ - dnl Use AC_REQUIRE here, so that the default behavior below is expanded - dnl once only, before all statements that occur in other macros. - AC_REQUIRE([gl_HEADER_TIME_H_BODY]) -]) - -AC_DEFUN([gl_HEADER_TIME_H_BODY], -[ - AC_REQUIRE([AC_C_RESTRICT]) - AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) - gl_NEXT_HEADERS([time.h]) - AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) -]) - -dnl Check whether 'struct timespec' is declared -dnl in time.h, sys/time.h, pthread.h, or unistd.h. - -AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], -[ - AC_CHECK_HEADERS_ONCE([sys/time.h]) - AC_CACHE_CHECK([for struct timespec in ], - [gl_cv_sys_struct_timespec_in_time_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], - [gl_cv_sys_struct_timespec_in_time_h=yes], - [gl_cv_sys_struct_timespec_in_time_h=no])]) - - TIME_H_DEFINES_STRUCT_TIMESPEC=0 - SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 - PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 - UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 - if test $gl_cv_sys_struct_timespec_in_time_h = yes; then - TIME_H_DEFINES_STRUCT_TIMESPEC=1 - else - AC_CACHE_CHECK([for struct timespec in ], - [gl_cv_sys_struct_timespec_in_sys_time_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], - [gl_cv_sys_struct_timespec_in_sys_time_h=yes], - [gl_cv_sys_struct_timespec_in_sys_time_h=no])]) - if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then - SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 - else - AC_CACHE_CHECK([for struct timespec in ], - [gl_cv_sys_struct_timespec_in_pthread_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], - [gl_cv_sys_struct_timespec_in_pthread_h=yes], - [gl_cv_sys_struct_timespec_in_pthread_h=no])]) - if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then - PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 - else - AC_CACHE_CHECK([for struct timespec in ], - [gl_cv_sys_struct_timespec_in_unistd_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], - [gl_cv_sys_struct_timespec_in_unistd_h=yes], - [gl_cv_sys_struct_timespec_in_unistd_h=no])]) - if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then - UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 - fi - fi - fi - fi - AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) - AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) - AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) - AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC]) -]) - -AC_DEFUN([gl_TIME_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS], -[ - GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME]) - GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP]) - GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME]) - GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM]) - GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R]) - GNULIB_TIME_RZ=0; AC_SUBST([GNULIB_TIME_RZ]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R]) - HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) - HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) - HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) - dnl If another module says to replace or to not replace, do that. - dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK; - dnl this lets maintainers check for portability. - REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R]) - REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME]) - REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP]) - REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) - - dnl Hack so that the time module doesn't depend on the sys_time module. - dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent. - : ${GNULIB_GETTIMEOFDAY=0}; AC_SUBST([GNULIB_GETTIMEOFDAY]) - dnl Second, it's OK to not use GNULIB_PORTCHECK for REPLACE_GMTIME - dnl and REPLACE_LOCALTIME, as portability to Solaris 2.6 and earlier - dnl is no longer a big deal. - REPLACE_GMTIME=0; AC_SUBST([REPLACE_GMTIME]) - REPLACE_LOCALTIME=0; AC_SUBST([REPLACE_LOCALTIME]) -]) diff --git a/src/gl/m4/time_r.m4 b/src/gl/m4/time_r.m4 deleted file mode 100644 index 21b4a2cc18..0000000000 --- a/src/gl/m4/time_r.m4 +++ /dev/null @@ -1,58 +0,0 @@ -dnl Reentrant time functions: localtime_r, gmtime_r. - -dnl Copyright (C) 2003, 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Written by Paul Eggert. - -AC_DEFUN([gl_TIME_R], -[ - dnl Persuade glibc and Solaris to declare localtime_r. - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - - AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) - AC_REQUIRE([AC_C_RESTRICT]) - - dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is - dnl not defined. - AC_CHECK_DECLS([localtime_r], [], [], [[#include ]]) - if test $ac_cv_have_decl_localtime_r = no; then - HAVE_DECL_LOCALTIME_R=0 - fi - - AC_CHECK_FUNCS_ONCE([localtime_r]) - if test $ac_cv_func_localtime_r = yes; then - HAVE_LOCALTIME_R=1 - AC_CACHE_CHECK([whether localtime_r is compatible with its POSIX signature], - [gl_cv_time_r_posix], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[/* We don't need to append 'restrict's to the argument types, - even though the POSIX signature has the 'restrict's, - since C99 says they can't affect type compatibility. */ - struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r; - if (ptr) return 0; - /* Check the return type is a pointer. - On HP-UX 10 it is 'int'. */ - *localtime_r (0, 0);]]) - ], - [gl_cv_time_r_posix=yes], - [gl_cv_time_r_posix=no]) - ]) - if test $gl_cv_time_r_posix = yes; then - REPLACE_LOCALTIME_R=0 - else - REPLACE_LOCALTIME_R=1 - fi - else - HAVE_LOCALTIME_R=0 - fi -]) - -# Prerequisites of lib/time_r.c. -AC_DEFUN([gl_PREREQ_TIME_R], [ - : -]) diff --git a/src/gl/m4/time_rz.m4 b/src/gl/m4/time_rz.m4 deleted file mode 100644 index 9b1db1b24b..0000000000 --- a/src/gl/m4/time_rz.m4 +++ /dev/null @@ -1,21 +0,0 @@ -dnl Time zone functions: tzalloc, localtime_rz, etc. - -dnl Copyright (C) 2015-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Written by Paul Eggert. - -AC_DEFUN([gl_TIME_RZ], -[ - AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) - AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) - AC_REQUIRE([AC_STRUCT_TIMEZONE]) - AC_CHECK_FUNCS_ONCE([tzset]) - - AC_CHECK_TYPES([timezone_t], [], [], [[#include ]]) - if test "$ac_cv_type_timezone_t" = yes; then - HAVE_TIMEZONE_T=1 - fi -]) diff --git a/src/gl/m4/timegm.m4 b/src/gl/m4/timegm.m4 deleted file mode 100644 index 752aa43d7e..0000000000 --- a/src/gl/m4/timegm.m4 +++ /dev/null @@ -1,26 +0,0 @@ -# timegm.m4 serial 11 -dnl Copyright (C) 2003, 2007, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_TIMEGM], -[ - AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) - AC_REQUIRE([gl_FUNC_MKTIME]) - REPLACE_TIMEGM=0 - AC_CHECK_FUNCS_ONCE([timegm]) - if test $ac_cv_func_timegm = yes; then - if test $gl_cv_func_working_mktime = no; then - # Assume that timegm is buggy if mktime is. - REPLACE_TIMEGM=1 - fi - else - HAVE_TIMEGM=0 - fi -]) - -# Prerequisites of lib/timegm.c. -AC_DEFUN([gl_PREREQ_TIMEGM], [ - : -]) diff --git a/src/gl/m4/timespec.m4 b/src/gl/m4/timespec.m4 deleted file mode 100644 index 2482518124..0000000000 --- a/src/gl/m4/timespec.m4 +++ /dev/null @@ -1,11 +0,0 @@ -#serial 15 - -# Copyright (C) 2000-2001, 2003-2007, 2009-2016 Free Software Foundation, Inc. - -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -dnl From Jim Meyering - -AC_DEFUN([gl_TIMESPEC], [:]) diff --git a/src/gl/m4/tm_gmtoff.m4 b/src/gl/m4/tm_gmtoff.m4 deleted file mode 100644 index ce0671fd1f..0000000000 --- a/src/gl/m4/tm_gmtoff.m4 +++ /dev/null @@ -1,14 +0,0 @@ -# tm_gmtoff.m4 serial 3 -dnl Copyright (C) 2002, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_TM_GMTOFF], -[ - AC_CHECK_MEMBER([struct tm.tm_gmtoff], - [AC_DEFINE([HAVE_TM_GMTOFF], [1], - [Define if struct tm has the tm_gmtoff member.])], - , - [#include ]) -]) diff --git a/src/gl/m4/unistd_h.m4 b/src/gl/m4/unistd_h.m4 deleted file mode 100644 index 544dadb412..0000000000 --- a/src/gl/m4/unistd_h.m4 +++ /dev/null @@ -1,189 +0,0 @@ -# unistd_h.m4 serial 68 -dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Written by Simon Josefsson, Bruno Haible. - -AC_DEFUN([gl_UNISTD_H], -[ - dnl Use AC_REQUIRE here, so that the default behavior below is expanded - dnl once only, before all statements that occur in other macros. - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - - gl_CHECK_NEXT_HEADERS([unistd.h]) - if test $ac_cv_header_unistd_h = yes; then - HAVE_UNISTD_H=1 - else - HAVE_UNISTD_H=0 - fi - AC_SUBST([HAVE_UNISTD_H]) - - dnl Ensure the type pid_t gets defined. - AC_REQUIRE([AC_TYPE_PID_T]) - - dnl Determine WINDOWS_64_BIT_OFF_T. - AC_REQUIRE([gl_TYPE_OFF_T]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[ -#if HAVE_UNISTD_H -# include -#endif -/* Some systems declare various items in the wrong headers. */ -#if !(defined __GLIBC__ && !defined __UCLIBC__) -# include -# include -# include -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -# include -# endif -#endif - ]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat - fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups - gethostname getlogin getlogin_r getpagesize - getusershell setusershell endusershell - group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite - readlink readlinkat rmdir sethostname sleep symlink symlinkat ttyname_r - unlink unlinkat usleep]) -]) - -AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_UNISTD_H_DEFAULTS], -[ - GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR]) - GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) - GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) - GNULIB_DUP=0; AC_SUBST([GNULIB_DUP]) - GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) - GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3]) - GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON]) - GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS]) - GNULIB_FACCESSAT=0; AC_SUBST([GNULIB_FACCESSAT]) - GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) - GNULIB_FCHOWNAT=0; AC_SUBST([GNULIB_FCHOWNAT]) - GNULIB_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC]) - GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) - GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) - GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) - GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) - GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) - GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS]) - GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) - GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN]) - GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) - GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) - GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) - GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER]) - GNULIB_ISATTY=0; AC_SUBST([GNULIB_ISATTY]) - GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) - GNULIB_LINK=0; AC_SUBST([GNULIB_LINK]) - GNULIB_LINKAT=0; AC_SUBST([GNULIB_LINKAT]) - GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) - GNULIB_PIPE=0; AC_SUBST([GNULIB_PIPE]) - GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2]) - GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD]) - GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE]) - GNULIB_READ=0; AC_SUBST([GNULIB_READ]) - GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) - GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT]) - GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR]) - GNULIB_SETHOSTNAME=0; AC_SUBST([GNULIB_SETHOSTNAME]) - GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) - GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK]) - GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT]) - GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R]) - GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING]) - GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) - GNULIB_UNLINK=0; AC_SUBST([GNULIB_UNLINK]) - GNULIB_UNLINKAT=0; AC_SUBST([GNULIB_UNLINKAT]) - GNULIB_USLEEP=0; AC_SUBST([GNULIB_USLEEP]) - GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) - HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) - HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) - HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) - HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) - HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) - HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) - HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) - HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) - HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) - HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) - HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) - HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) - HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) - HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) - HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) - HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) - HAVE_LINK=1; AC_SUBST([HAVE_LINK]) - HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) - HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) - HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) - HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) - HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) - HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) - HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) - HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) - HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) - HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) - HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) - HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) - HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) - HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) - HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) - HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) - HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) - HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) - HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) - HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) - HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) - HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) - HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) - HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) - REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) - REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) - REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) - REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) - REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) - REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) - REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) - REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) - REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) - REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) - REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) - REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) - REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) - REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) - REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) - REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) - REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) - REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) - REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) - REPLACE_READ=0; AC_SUBST([REPLACE_READ]) - REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) - REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT]) - REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) - REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) - REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) - REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT]) - REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) - REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) - REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) - REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) - REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) - UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) - UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; - AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) -]) diff --git a/src/gl/m4/vasnprintf.m4 b/src/gl/m4/vasnprintf.m4 deleted file mode 100644 index 2d4b46310b..0000000000 --- a/src/gl/m4/vasnprintf.m4 +++ /dev/null @@ -1,291 +0,0 @@ -# vasnprintf.m4 serial 36 -dnl Copyright (C) 2002-2004, 2006-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_FUNC_VASNPRINTF], -[ - AC_CHECK_FUNCS_ONCE([vasnprintf]) - if test $ac_cv_func_vasnprintf = no; then - gl_REPLACE_VASNPRINTF - fi -]) - -AC_DEFUN([gl_REPLACE_VASNPRINTF], -[ - AC_CHECK_FUNCS_ONCE([vasnprintf]) - AC_LIBOBJ([vasnprintf]) - AC_LIBOBJ([printf-args]) - AC_LIBOBJ([printf-parse]) - AC_LIBOBJ([asnprintf]) - if test $ac_cv_func_vasnprintf = yes; then - AC_DEFINE([REPLACE_VASNPRINTF], [1], - [Define if vasnprintf exists but is overridden by gnulib.]) - fi - gl_PREREQ_PRINTF_ARGS - gl_PREREQ_PRINTF_PARSE - gl_PREREQ_VASNPRINTF - gl_PREREQ_ASNPRINTF -]) - -# Prerequisites of lib/printf-args.h, lib/printf-args.c. -AC_DEFUN([gl_PREREQ_PRINTF_ARGS], -[ - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - AC_REQUIRE([gt_TYPE_WCHAR_T]) - AC_REQUIRE([gt_TYPE_WINT_T]) -]) - -# Prerequisites of lib/printf-parse.h, lib/printf-parse.c. -AC_DEFUN([gl_PREREQ_PRINTF_PARSE], -[ - AC_REQUIRE([gl_FEATURES_H]) - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - AC_REQUIRE([gt_TYPE_WCHAR_T]) - AC_REQUIRE([gt_TYPE_WINT_T]) - AC_REQUIRE([AC_TYPE_SIZE_T]) - AC_CHECK_TYPE([ptrdiff_t], , - [AC_DEFINE([ptrdiff_t], [long], - [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) - ]) - AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) -]) - -# Prerequisites of lib/vasnprintf.c. -AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], -[ - AC_REQUIRE([AC_FUNC_ALLOCA]) - AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) - AC_REQUIRE([gt_TYPE_WCHAR_T]) - AC_REQUIRE([gt_TYPE_WINT_T]) - AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) - dnl Use the _snprintf function only if it is declared (because on NetBSD it - dnl is defined as a weak alias of snprintf; we prefer to use the latter). - AC_CHECK_DECLS([_snprintf], , , [[#include ]]) - dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization - dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE. - AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) - dnl We can avoid a lot of code by assuming that snprintf's return value - dnl conforms to ISO C99. So check that. - AC_REQUIRE([gl_SNPRINTF_RETVAL_C99]) - case "$gl_cv_func_snprintf_retval_c99" in - *yes) - AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1], - [Define if the return value of the snprintf function is the number of - of bytes (excluding the terminating NUL) that would have been produced - if the buffer had been large enough.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting 'long double' -# arguments. -AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) - case "$gl_cv_func_printf_long_double" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'long double' arguments.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' -# arguments. -AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_INFINITE]) - case "$gl_cv_func_printf_infinite" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - infinite 'double' arguments.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' -# arguments. -AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], -[ - AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) - dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if - dnl NEED_PRINTF_LONG_DOUBLE is already set. - AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) - case "$gl_cv_func_printf_long_double" in - *yes) - case "$gl_cv_func_printf_infinite_long_double" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - infinite 'long double' arguments.]) - ;; - esac - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) - case "$gl_cv_func_printf_directive_a" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], - [Define if the vasnprintf implementation needs special code for - the 'a' and 'A' directives.]) - AC_CHECK_FUNCS([nl_langinfo]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) - case "$gl_cv_func_printf_directive_f" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], - [Define if the vasnprintf implementation needs special code for - the 'F' directive.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. -AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], -[ - AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) - case "$gl_cv_func_printf_directive_ls" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], - [Define if the vasnprintf implementation needs special code for - the 'ls' directive.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. -AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], -[ - AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) - case "$gl_cv_func_printf_flag_grouping" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], - [Define if the vasnprintf implementation needs special code for the - ' flag.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. -AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], -[ - AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) - case "$gl_cv_func_printf_flag_leftadjust" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], - [Define if the vasnprintf implementation needs special code for the - '-' flag.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. -AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], -[ - AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) - case "$gl_cv_func_printf_flag_zero" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], - [Define if the vasnprintf implementation needs special code for the - 0 flag.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for supporting large precisions. -AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], -[ - AC_REQUIRE([gl_PRINTF_PRECISION]) - case "$gl_cv_func_printf_precision" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], - [Define if the vasnprintf implementation needs special code for - supporting large precisions without arbitrary bounds.]) - AC_DEFINE([NEED_PRINTF_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'double' arguments.]) - AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'long double' arguments.]) - ;; - esac -]) - -# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory -# conditions. -AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], -[ - AC_REQUIRE([gl_PRINTF_ENOMEM]) - case "$gl_cv_func_printf_enomem" in - *yes) - ;; - *) - AC_DEFINE([NEED_PRINTF_ENOMEM], [1], - [Define if the vasnprintf implementation needs special code for - surviving out-of-memory conditions.]) - AC_DEFINE([NEED_PRINTF_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'double' arguments.]) - AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], - [Define if the vasnprintf implementation needs special code for - 'long double' arguments.]) - ;; - esac -]) - -# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. -AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], -[ - AC_REQUIRE([gl_PREREQ_VASNPRINTF]) - gl_PREREQ_VASNPRINTF_LONG_DOUBLE - gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE - gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE - gl_PREREQ_VASNPRINTF_DIRECTIVE_A - gl_PREREQ_VASNPRINTF_DIRECTIVE_F - gl_PREREQ_VASNPRINTF_DIRECTIVE_LS - gl_PREREQ_VASNPRINTF_FLAG_GROUPING - gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST - gl_PREREQ_VASNPRINTF_FLAG_ZERO - gl_PREREQ_VASNPRINTF_PRECISION - gl_PREREQ_VASNPRINTF_ENOMEM -]) - -# Prerequisites of lib/asnprintf.c. -AC_DEFUN([gl_PREREQ_ASNPRINTF], -[ -]) diff --git a/src/gl/m4/warn-on-use.m4 b/src/gl/m4/warn-on-use.m4 deleted file mode 100644 index 08440ec593..0000000000 --- a/src/gl/m4/warn-on-use.m4 +++ /dev/null @@ -1,47 +0,0 @@ -# warn-on-use.m4 serial 5 -dnl Copyright (C) 2010-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) -# --------------------------------------- -# For each whitespace-separated element in the list of NAMES, define -# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES -# even after being undefined as a macro. -# -# See warn-on-use.h for some hints on how to poison function names, as -# well as ideas on poisoning global variables and macros. NAMES may -# include global variables, but remember that only functions work with -# _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single -# header, but if the replacement header pulls in other headers because -# some systems declare functions in the wrong header, then INCLUDES -# should do likewise. -# -# It is generally safe to assume declarations for functions declared -# in the intersection of C89 and C11 (such as printf) without -# needing gl_WARN_ON_USE_PREPARE. -AC_DEFUN([gl_WARN_ON_USE_PREPARE], -[ - m4_foreach_w([gl_decl], [$2], - [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), - [Define to 1 if ]m4_defn([gl_decl])[ is declared even after - undefining macros.])])dnl -dnl FIXME: gl_Symbol must be used unquoted until we can assume -dnl autoconf 2.64 or newer. - for gl_func in m4_flatten([$2]); do - AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl - AC_CACHE_CHECK([whether $gl_func is declared without a macro], - gl_Symbol, - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], -[@%:@undef $gl_func - (void) $gl_func;])], - [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])]) - AS_VAR_IF(gl_Symbol, [yes], - [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) - dnl shortcut - if the raw declaration exists, then set a cache - dnl variable to allow skipping any later AC_CHECK_DECL efforts - eval ac_cv_have_decl_$gl_func=yes]) - AS_VAR_POPDEF([gl_Symbol])dnl - done -]) diff --git a/src/gl/m4/wchar_h.m4 b/src/gl/m4/wchar_h.m4 deleted file mode 100644 index 16017a59fb..0000000000 --- a/src/gl/m4/wchar_h.m4 +++ /dev/null @@ -1,233 +0,0 @@ -dnl A placeholder for ISO C99 , for platforms that have issues. - -dnl Copyright (C) 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl Written by Eric Blake. - -# wchar_h.m4 serial 40 - -AC_DEFUN([gl_WCHAR_H], -[ - AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) - AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) - dnl Prepare for creating substitute . - dnl Check for (missing in Linux uClibc when built without wide - dnl character support). - dnl is always overridden, because of GNULIB_POSIXCHECK. - gl_CHECK_NEXT_HEADERS([wchar.h]) - if test $ac_cv_header_wchar_h = yes; then - HAVE_WCHAR_H=1 - else - HAVE_WCHAR_H=0 - fi - AC_SUBST([HAVE_WCHAR_H]) - - AC_REQUIRE([gl_FEATURES_H]) - - AC_REQUIRE([gt_TYPE_WINT_T]) - if test $gt_cv_c_wint_t = yes; then - HAVE_WINT_T=1 - else - HAVE_WINT_T=0 - fi - AC_SUBST([HAVE_WINT_T]) - - dnl Check for declarations of anything we want to poison if the - dnl corresponding gnulib module is not in use. - gl_WARN_ON_USE_PREPARE([[ -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be - included before . */ -#if !(defined __GLIBC__ && !defined __UCLIBC__) -# include -# include -# include -#endif -#include - ]], - [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb - wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset - wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp - wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr - wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth - ]) -]) - -dnl Check whether is usable at all. -AC_DEFUN([gl_WCHAR_H_INLINE_OK], -[ - dnl Test whether suffers due to the transition from '__inline' to - dnl 'gnu_inline'. See - dnl and . In summary, - dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and - dnl the option -std=c99 or -std=gnu99, leads to a broken . - AC_CACHE_CHECK([whether uses 'inline' correctly], - [gl_cv_header_wchar_h_correct_inline], - [gl_cv_header_wchar_h_correct_inline=yes - AC_LANG_CONFTEST([ - AC_LANG_SOURCE([[#define wcstod renamed_wcstod -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be - included before . */ -#include -#include -#include -#include -extern int zero (void); -int main () { return zero(); } -]])]) - dnl Do not rename the object file from conftest.$ac_objext to - dnl conftest1.$ac_objext, as this will cause the link to fail on - dnl z/OS when using the XPLINK object format (due to duplicate - dnl CSECT names). Instead, temporarily redefine $ac_compile so - dnl that the object file has the latter name from the start. - save_ac_compile="$ac_compile" - ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` - if AC_TRY_EVAL([ac_compile]); then - AC_LANG_CONFTEST([ - AC_LANG_SOURCE([[#define wcstod renamed_wcstod -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be - included before . */ -#include -#include -#include -#include -int zero (void) { return 0; } -]])]) - dnl See note above about renaming object files. - ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` - if AC_TRY_EVAL([ac_compile]); then - if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then - : - else - gl_cv_header_wchar_h_correct_inline=no - fi - fi - fi - ac_compile="$save_ac_compile" - rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext - ]) - if test $gl_cv_header_wchar_h_correct_inline = no; then - AC_MSG_ERROR([ cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). -This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in -C99 mode. You have four options: - - Add the flag -fgnu89-inline to CC and reconfigure, or - - Fix your include files, using parts of - , or - - Use a gcc version older than 4.3, or - - Don't use the flags -std=c99 or -std=gnu99. -Configuration aborted.]) - fi -]) - -AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], -[ - dnl Use AC_REQUIRE here, so that the default settings are expanded once only. - AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) - gl_MODULE_INDICATOR_SET_VARIABLE([$1]) - dnl Define it also as a C macro, for the benefit of the unit tests. - gl_MODULE_INDICATOR_FOR_TESTS([$1]) -]) - -AC_DEFUN([gl_WCHAR_H_DEFAULTS], -[ - GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC]) - GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB]) - GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT]) - GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC]) - GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN]) - GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS]) - GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS]) - GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB]) - GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS]) - GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS]) - GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH]) - GNULIB_WMEMCHR=0; AC_SUBST([GNULIB_WMEMCHR]) - GNULIB_WMEMCMP=0; AC_SUBST([GNULIB_WMEMCMP]) - GNULIB_WMEMCPY=0; AC_SUBST([GNULIB_WMEMCPY]) - GNULIB_WMEMMOVE=0; AC_SUBST([GNULIB_WMEMMOVE]) - GNULIB_WMEMSET=0; AC_SUBST([GNULIB_WMEMSET]) - GNULIB_WCSLEN=0; AC_SUBST([GNULIB_WCSLEN]) - GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN]) - GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY]) - GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY]) - GNULIB_WCSNCPY=0; AC_SUBST([GNULIB_WCSNCPY]) - GNULIB_WCPNCPY=0; AC_SUBST([GNULIB_WCPNCPY]) - GNULIB_WCSCAT=0; AC_SUBST([GNULIB_WCSCAT]) - GNULIB_WCSNCAT=0; AC_SUBST([GNULIB_WCSNCAT]) - GNULIB_WCSCMP=0; AC_SUBST([GNULIB_WCSCMP]) - GNULIB_WCSNCMP=0; AC_SUBST([GNULIB_WCSNCMP]) - GNULIB_WCSCASECMP=0; AC_SUBST([GNULIB_WCSCASECMP]) - GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP]) - GNULIB_WCSCOLL=0; AC_SUBST([GNULIB_WCSCOLL]) - GNULIB_WCSXFRM=0; AC_SUBST([GNULIB_WCSXFRM]) - GNULIB_WCSDUP=0; AC_SUBST([GNULIB_WCSDUP]) - GNULIB_WCSCHR=0; AC_SUBST([GNULIB_WCSCHR]) - GNULIB_WCSRCHR=0; AC_SUBST([GNULIB_WCSRCHR]) - GNULIB_WCSCSPN=0; AC_SUBST([GNULIB_WCSCSPN]) - GNULIB_WCSSPN=0; AC_SUBST([GNULIB_WCSSPN]) - GNULIB_WCSPBRK=0; AC_SUBST([GNULIB_WCSPBRK]) - GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR]) - GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK]) - GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH]) - dnl Assume proper GNU behavior unless another module says otherwise. - HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) - HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) - HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) - HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) - HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) - HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) - HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) - HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) - HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) - HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR]) - HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP]) - HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY]) - HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE]) - HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET]) - HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN]) - HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) - HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY]) - HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY]) - HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY]) - HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY]) - HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT]) - HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT]) - HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP]) - HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP]) - HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP]) - HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP]) - HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL]) - HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM]) - HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP]) - HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR]) - HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR]) - HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN]) - HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN]) - HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK]) - HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR]) - HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK]) - HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH]) - HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) - HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) - REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) - REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) - REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) - REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) - REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) - REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) - REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) - REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS]) - REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) - REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) - REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) - REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) - REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH]) -]) diff --git a/src/gl/m4/wchar_t.m4 b/src/gl/m4/wchar_t.m4 deleted file mode 100644 index 2db8c3f2f6..0000000000 --- a/src/gl/m4/wchar_t.m4 +++ /dev/null @@ -1,24 +0,0 @@ -# wchar_t.m4 serial 4 (gettext-0.18.2) -dnl Copyright (C) 2002-2003, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Test whether has the 'wchar_t' type. -dnl Prerequisite: AC_PROG_CC - -AC_DEFUN([gt_TYPE_WCHAR_T], -[ - AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - wchar_t foo = (wchar_t)'\0';]], - [[]])], - [gt_cv_c_wchar_t=yes], - [gt_cv_c_wchar_t=no])]) - if test $gt_cv_c_wchar_t = yes; then - AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) - fi -]) diff --git a/src/gl/m4/wint_t.m4 b/src/gl/m4/wint_t.m4 deleted file mode 100644 index 8ff2a5b5a2..0000000000 --- a/src/gl/m4/wint_t.m4 +++ /dev/null @@ -1,32 +0,0 @@ -# wint_t.m4 serial 5 (gettext-0.18.2) -dnl Copyright (C) 2003, 2007-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Bruno Haible. -dnl Test whether has the 'wint_t' type. -dnl Prerequisite: AC_PROG_CC - -AC_DEFUN([gt_TYPE_WINT_T], -[ - AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[ -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be included - before . */ -#include -#include -#include -#include - wint_t foo = (wchar_t)'\0';]], - [[]])], - [gt_cv_c_wint_t=yes], - [gt_cv_c_wint_t=no])]) - if test $gt_cv_c_wint_t = yes; then - AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) - fi -]) diff --git a/src/gl/m4/xalloc.m4 b/src/gl/m4/xalloc.m4 deleted file mode 100644 index f4f540d118..0000000000 --- a/src/gl/m4/xalloc.m4 +++ /dev/null @@ -1,7 +0,0 @@ -# xalloc.m4 serial 18 -dnl Copyright (C) 2002-2006, 2009-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_XALLOC], [:]) diff --git a/src/gl/m4/xsize.m4 b/src/gl/m4/xsize.m4 deleted file mode 100644 index 16764e89dd..0000000000 --- a/src/gl/m4/xsize.m4 +++ /dev/null @@ -1,12 +0,0 @@ -# xsize.m4 serial 5 -dnl Copyright (C) 2003-2004, 2008-2016 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -AC_DEFUN([gl_XSIZE], -[ - dnl Prerequisites of lib/xsize.h. - AC_REQUIRE([gl_SIZE_MAX]) - AC_CHECK_HEADERS([stdint.h]) -]) diff --git a/src/gl/malloc.c b/src/gl/malloc.c deleted file mode 100644 index e9b01d2615..0000000000 --- a/src/gl/malloc.c +++ /dev/null @@ -1,56 +0,0 @@ -/* malloc() function that is glibc compatible. - - Copyright (C) 1997-1998, 2006-2007, 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* written by Jim Meyering and Bruno Haible */ - -#define _GL_USE_STDLIB_ALLOC 1 -#include -/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ -#ifdef malloc -# define NEED_MALLOC_GNU 1 -# undef malloc -/* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ -#elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU -# define NEED_MALLOC_GNU 1 -#endif - -#include - -#include - -/* Allocate an N-byte block of memory from the heap. - If N is zero, allocate a 1-byte block. */ - -void * -rpl_malloc (size_t n) -{ - void *result; - -#if NEED_MALLOC_GNU - if (n == 0) - n = 1; -#endif - - result = malloc (n); - -#if !HAVE_MALLOC_POSIX - if (result == NULL) - errno = ENOMEM; -#endif - - return result; -} diff --git a/src/gl/malloca.c b/src/gl/malloca.c deleted file mode 100644 index a6132775b1..0000000000 --- a/src/gl/malloca.c +++ /dev/null @@ -1,149 +0,0 @@ -/* Safe automatic memory allocation. - Copyright (C) 2003, 2006-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2003. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#define _GL_USE_STDLIB_ALLOC 1 -#include - -/* Specification. */ -#include "malloca.h" - -#include - -#include "verify.h" - -/* The speed critical point in this file is freea() applied to an alloca() - result: it must be fast, to match the speed of alloca(). The speed of - mmalloca() and freea() in the other case are not critical, because they - are only invoked for big memory sizes. */ - -#if HAVE_ALLOCA - -/* Store the mmalloca() results in a hash table. This is needed to reliably - distinguish a mmalloca() result and an alloca() result. - - Although it is possible that the same pointer is returned by alloca() and - by mmalloca() at different times in the same application, it does not lead - to a bug in freea(), because: - - Before a pointer returned by alloca() can point into malloc()ed memory, - the function must return, and once this has happened the programmer must - not call freea() on it anyway. - - Before a pointer returned by mmalloca() can point into the stack, it - must be freed. The only function that can free it is freea(), and - when freea() frees it, it also removes it from the hash table. */ - -#define MAGIC_NUMBER 0x1415fb4a -#define MAGIC_SIZE sizeof (int) -/* This is how the header info would look like without any alignment - considerations. */ -struct preliminary_header { void *next; int magic; }; -/* But the header's size must be a multiple of sa_alignment_max. */ -#define HEADER_SIZE \ - (((sizeof (struct preliminary_header) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max) -union header { - void *next; - struct { - char room[HEADER_SIZE - MAGIC_SIZE]; - int word; - } magic; -}; -verify (HEADER_SIZE == sizeof (union header)); -/* We make the hash table quite big, so that during lookups the probability - of empty hash buckets is quite high. There is no need to make the hash - table resizable, because when the hash table gets filled so much that the - lookup becomes slow, it means that the application has memory leaks. */ -#define HASH_TABLE_SIZE 257 -static void * mmalloca_results[HASH_TABLE_SIZE]; - -#endif - -void * -mmalloca (size_t n) -{ -#if HAVE_ALLOCA - /* Allocate one more word, that serves as an indicator for malloc()ed - memory, so that freea() of an alloca() result is fast. */ - size_t nplus = n + HEADER_SIZE; - - if (nplus >= n) - { - void *p = malloc (nplus); - - if (p != NULL) - { - size_t slot; - union header *h = p; - - p = h + 1; - - /* Put a magic number into the indicator word. */ - h->magic.word = MAGIC_NUMBER; - - /* Enter p into the hash table. */ - slot = (uintptr_t) p % HASH_TABLE_SIZE; - h->next = mmalloca_results[slot]; - mmalloca_results[slot] = p; - - return p; - } - } - /* Out of memory. */ - return NULL; -#else -# if !MALLOC_0_IS_NONNULL - if (n == 0) - n = 1; -# endif - return malloc (n); -#endif -} - -#if HAVE_ALLOCA -void -freea (void *p) -{ - /* mmalloca() may have returned NULL. */ - if (p != NULL) - { - /* Attempt to quickly distinguish the mmalloca() result - which has - a magic indicator word - and the alloca() result - which has an - uninitialized indicator word. It is for this test that sa_increment - additional bytes are allocated in the alloca() case. */ - if (((int *) p)[-1] == MAGIC_NUMBER) - { - /* Looks like a mmalloca() result. To see whether it really is one, - perform a lookup in the hash table. */ - size_t slot = (uintptr_t) p % HASH_TABLE_SIZE; - void **chain = &mmalloca_results[slot]; - for (; *chain != NULL;) - { - union header *h = p; - if (*chain == p) - { - /* Found it. Remove it from the hash table and free it. */ - union header *p_begin = h - 1; - *chain = p_begin->next; - free (p_begin); - return; - } - h = *chain; - chain = &h[-1].next; - } - } - /* At this point, we know it was not a mmalloca() result. */ - } -} -#endif diff --git a/src/gl/malloca.h b/src/gl/malloca.h deleted file mode 100644 index fa27a9e7a2..0000000000 --- a/src/gl/malloca.h +++ /dev/null @@ -1,133 +0,0 @@ -/* Safe automatic memory allocation. - Copyright (C) 2003-2007, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2003. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _MALLOCA_H -#define _MALLOCA_H - -#include -#include -#include - - -#ifdef __cplusplus -extern "C" { -#endif - - -/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call - alloca(N); otherwise it returns NULL. It either returns N bytes of - memory allocated on the stack, that lasts until the function returns, - or NULL. - Use of safe_alloca should be avoided: - - inside arguments of function calls - undefined behaviour, - - in inline functions - the allocation may actually last until the - calling function returns. -*/ -#if HAVE_ALLOCA -/* The OS usually guarantees only one guard page at the bottom of the stack, - and a page size can be as small as 4096 bytes. So we cannot safely - allocate anything larger than 4096 bytes. Also care for the possibility - of a few compiler-allocated temporary stack slots. - This must be a macro, not a function. */ -# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) -#else -# define safe_alloca(N) ((void) (N), NULL) -#endif - -/* malloca(N) is a safe variant of alloca(N). It allocates N bytes of - memory allocated on the stack, that must be freed using freea() before - the function returns. Upon failure, it returns NULL. */ -#if HAVE_ALLOCA -# define malloca(N) \ - ((N) < 4032 - sa_increment \ - ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \ - : mmalloca (N)) -#else -# define malloca(N) \ - mmalloca (N) -#endif -extern void * mmalloca (size_t n); - -/* Free a block of memory allocated through malloca(). */ -#if HAVE_ALLOCA -extern void freea (void *p); -#else -# define freea free -#endif - -/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S). - It allocates an array of N objects, each with S bytes of memory, - on the stack. S must be positive and N must be nonnegative. - The array must be freed using freea() before the function returns. */ -#if 1 -/* Cf. the definition of xalloc_oversized. */ -# define nmalloca(n, s) \ - ((n) > (size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) \ - ? NULL \ - : malloca ((n) * (s))) -#else -extern void * nmalloca (size_t n, size_t s); -#endif - - -#ifdef __cplusplus -} -#endif - - -/* ------------------- Auxiliary, non-public definitions ------------------- */ - -/* Determine the alignment of a type at compile time. */ -#if defined __GNUC__ || defined __IBM__ALIGNOF__ -# define sa_alignof __alignof__ -#elif defined __cplusplus - template struct sa_alignof_helper { char __slot1; type __slot2; }; -# define sa_alignof(type) offsetof (sa_alignof_helper, __slot2) -#elif defined __hpux - /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof - values. */ -# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) -#elif defined _AIX - /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof - values. */ -# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) -#else -# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) -#endif - -enum -{ -/* The desired alignment of memory allocations is the maximum alignment - among all elementary types. */ - sa_alignment_long = sa_alignof (long), - sa_alignment_double = sa_alignof (double), -#if HAVE_LONG_LONG_INT - sa_alignment_longlong = sa_alignof (long long), -#endif - sa_alignment_longdouble = sa_alignof (long double), - sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) -#if HAVE_LONG_LONG_INT - | (sa_alignment_longlong - 1) -#endif - | (sa_alignment_longdouble - 1) - ) + 1, -/* The increment that guarantees room for a magic word must be >= sizeof (int) - and a multiple of sa_alignment_max. */ - sa_increment = ((sizeof (int) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max -}; - -#endif /* _MALLOCA_H */ diff --git a/src/gl/malloca.valgrind b/src/gl/malloca.valgrind deleted file mode 100644 index 52f0a50f57..0000000000 --- a/src/gl/malloca.valgrind +++ /dev/null @@ -1,7 +0,0 @@ -# Suppress a valgrind message about use of uninitialized memory in freea(). -# This use is OK because it provides only a speedup. -{ - freea - Memcheck:Cond - fun:freea -} diff --git a/src/gl/memchr.c b/src/gl/memchr.c deleted file mode 100644 index b565542c39..0000000000 --- a/src/gl/memchr.c +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2016 - Free Software Foundation, Inc. - - Based on strlen implementation by Torbjorn Granlund (tege@sics.se), - with help from Dan Sahlin (dan@sics.se) and - commentary by Jim Blandy (jimb@ai.mit.edu); - adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), - and implemented by Roland McGrath (roland@ai.mit.edu). - -NOTE: The canonical source of this file is maintained with the GNU C Library. -Bugs can be reported to bug-glibc@prep.ai.mit.edu. - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 3 of the License, or any -later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . */ - -#ifndef _LIBC -# include -#endif - -#include - -#include - -#if defined _LIBC -# include -#else -# define reg_char char -#endif - -#include - -#if HAVE_BP_SYM_H || defined _LIBC -# include -#else -# define BP_SYM(sym) sym -#endif - -#undef __memchr -#ifdef _LIBC -# undef memchr -#endif - -#ifndef weak_alias -# define __memchr memchr -#endif - -/* Search no more than N bytes of S for C. */ -void * -__memchr (void const *s, int c_in, size_t n) -{ - /* On 32-bit hardware, choosing longword to be a 32-bit unsigned - long instead of a 64-bit uintmax_t tends to give better - performance. On 64-bit hardware, unsigned long is generally 64 - bits already. Change this typedef to experiment with - performance. */ - typedef unsigned long int longword; - - const unsigned char *char_ptr; - const longword *longword_ptr; - longword repeated_one; - longword repeated_c; - unsigned reg_char c; - - c = (unsigned char) c_in; - - /* Handle the first few bytes by reading one byte at a time. - Do this until CHAR_PTR is aligned on a longword boundary. */ - for (char_ptr = (const unsigned char *) s; - n > 0 && (size_t) char_ptr % sizeof (longword) != 0; - --n, ++char_ptr) - if (*char_ptr == c) - return (void *) char_ptr; - - longword_ptr = (const longword *) char_ptr; - - /* All these elucidatory comments refer to 4-byte longwords, - but the theory applies equally well to any size longwords. */ - - /* Compute auxiliary longword values: - repeated_one is a value which has a 1 in every byte. - repeated_c has c in every byte. */ - repeated_one = 0x01010101; - repeated_c = c | (c << 8); - repeated_c |= repeated_c << 16; - if (0xffffffffU < (longword) -1) - { - repeated_one |= repeated_one << 31 << 1; - repeated_c |= repeated_c << 31 << 1; - if (8 < sizeof (longword)) - { - size_t i; - - for (i = 64; i < sizeof (longword) * 8; i *= 2) - { - repeated_one |= repeated_one << i; - repeated_c |= repeated_c << i; - } - } - } - - /* Instead of the traditional loop which tests each byte, we will test a - longword at a time. The tricky part is testing if *any of the four* - bytes in the longword in question are equal to c. We first use an xor - with repeated_c. This reduces the task to testing whether *any of the - four* bytes in longword1 is zero. - - We compute tmp = - ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). - That is, we perform the following operations: - 1. Subtract repeated_one. - 2. & ~longword1. - 3. & a mask consisting of 0x80 in every byte. - Consider what happens in each byte: - - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, - and step 3 transforms it into 0x80. A carry can also be propagated - to more significant bytes. - - If a byte of longword1 is nonzero, let its lowest 1 bit be at - position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, - the byte ends in a single bit of value 0 and k bits of value 1. - After step 2, the result is just k bits of value 1: 2^k - 1. After - step 3, the result is 0. And no carry is produced. - So, if longword1 has only non-zero bytes, tmp is zero. - Whereas if longword1 has a zero byte, call j the position of the least - significant zero byte. Then the result has a zero at positions 0, ..., - j-1 and a 0x80 at position j. We cannot predict the result at the more - significant bytes (positions j+1..3), but it does not matter since we - already have a non-zero bit at position 8*j+7. - - So, the test whether any byte in longword1 is zero is equivalent to - testing whether tmp is nonzero. */ - - while (n >= sizeof (longword)) - { - longword longword1 = *longword_ptr ^ repeated_c; - - if ((((longword1 - repeated_one) & ~longword1) - & (repeated_one << 7)) != 0) - break; - longword_ptr++; - n -= sizeof (longword); - } - - char_ptr = (const unsigned char *) longword_ptr; - - /* At this point, we know that either n < sizeof (longword), or one of the - sizeof (longword) bytes starting at char_ptr is == c. On little-endian - machines, we could determine the first such byte without any further - memory accesses, just by looking at the tmp result from the last loop - iteration. But this does not work on big-endian machines. Choose code - that works in both cases. */ - - for (; n > 0; --n, ++char_ptr) - { - if (*char_ptr == c) - return (void *) char_ptr; - } - - return NULL; -} -#ifdef weak_alias -weak_alias (__memchr, BP_SYM (memchr)) -#endif diff --git a/src/gl/memchr.valgrind b/src/gl/memchr.valgrind deleted file mode 100644 index 60f247e10d..0000000000 --- a/src/gl/memchr.valgrind +++ /dev/null @@ -1,14 +0,0 @@ -# Suppress a valgrind message about use of uninitialized memory in memchr(). -# POSIX states that when the character is found, memchr must not read extra -# bytes in an overestimated length (for example, where memchr is used to -# implement strnlen). However, we use a safe word read to provide a speedup. -{ - memchr-value4 - Memcheck:Value4 - fun:rpl_memchr -} -{ - memchr-value8 - Memcheck:Value8 - fun:rpl_memchr -} diff --git a/src/gl/minmax.h b/src/gl/minmax.h deleted file mode 100644 index be6b321ee1..0000000000 --- a/src/gl/minmax.h +++ /dev/null @@ -1,60 +0,0 @@ -/* MIN, MAX macros. - Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _MINMAX_H -#define _MINMAX_H - -/* Note: MIN, MAX are also defined in on some systems - (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about - MIN, MAX macro redefinitions on some systems; the workaround is to - #include this file as the last one among the #include list. */ - -/* Before we define the following symbols we get the file - since otherwise we get redefinitions on some systems if is - included after this file. Likewise for . - If more than one of these system headers define MIN and MAX, pick just - one of the headers (because the definitions most likely are the same). */ -#if HAVE_MINMAX_IN_LIMITS_H -# include -#elif HAVE_MINMAX_IN_SYS_PARAM_H -# include -#endif - -/* Note: MIN and MAX should be used with two arguments of the - same type. They might not return the minimum and maximum of their two - arguments, if the arguments have different types or have unusual - floating-point values. For example, on a typical host with 32-bit 'int', - 64-bit 'long long', and 64-bit IEEE 754 'double' types: - - MAX (-1, 2147483648) returns 4294967295. - MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. - MAX (NaN, 0.0) returns 0.0. - MAX (+0.0, -0.0) returns -0.0. - - and in each case the answer is in some sense bogus. */ - -/* MAX(a,b) returns the maximum of A and B. */ -#ifndef MAX -# define MAX(a,b) ((a) > (b) ? (a) : (b)) -#endif - -/* MIN(a,b) returns the minimum of A and B. */ -#ifndef MIN -# define MIN(a,b) ((a) < (b) ? (a) : (b)) -#endif - -#endif /* _MINMAX_H */ diff --git a/src/gl/mktime-internal.h b/src/gl/mktime-internal.h deleted file mode 100644 index 2f586aef64..0000000000 --- a/src/gl/mktime-internal.h +++ /dev/null @@ -1,37 +0,0 @@ -/* mktime variant that also uses an offset guess - - Copyright 2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 3 of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public - License along with this program; if not, see - . */ - -#include - -/* mktime_offset_t is a signed type wide enough to hold a UTC offset - in seconds, and used as part of the type of the offset-guess - argument to mktime_internal. Use time_t on platforms where time_t - is signed, to be compatible with platforms like BeOS that export - this implementation detail of mktime. On platforms where time_t is - unsigned, GNU and POSIX code can assume 'int' is at least 32 bits - which is wide enough for a UTC offset. */ - -#if TIME_T_IS_SIGNED -typedef time_t mktime_offset_t; -#else -typedef int mktime_offset_t; -#endif - -time_t mktime_internal (struct tm *, - struct tm * (*) (time_t const *, struct tm *), - mktime_offset_t *); diff --git a/src/gl/mktime.c b/src/gl/mktime.c deleted file mode 100644 index 8ee4e5ecab..0000000000 --- a/src/gl/mktime.c +++ /dev/null @@ -1,630 +0,0 @@ -/* Convert a 'struct tm' to a time_t value. - Copyright (C) 1993-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Eggert . - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 3 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public - License along with the GNU C Library; if not, see - . */ - -/* Define this to 1 to have a standalone program to test this implementation of - mktime. */ -#ifndef DEBUG_MKTIME -# define DEBUG_MKTIME 0 -#endif - -#if !defined _LIBC && !DEBUG_MKTIME -# include -#endif - -/* Assume that leap seconds are possible, unless told otherwise. - If the host has a 'zic' command with a '-L leapsecondfilename' option, - then it supports leap seconds; otherwise it probably doesn't. */ -#ifndef LEAP_SECONDS_POSSIBLE -# define LEAP_SECONDS_POSSIBLE 1 -#endif - -#include - -#include -#include - -#include -#include - -#if DEBUG_MKTIME -# include -# include -# include -/* Make it work even if the system's libc has its own mktime routine. */ -# undef mktime -# define mktime my_mktime -#endif - -/* A signed type that can represent an integer number of years - multiplied by three times the number of seconds in a year. It is - needed when converting a tm_year value times the number of seconds - in a year. The factor of three comes because these products need - to be subtracted from each other, and sometimes with an offset - added to them, without worrying about overflow. - - Much of the code uses long_int to represent time_t values, to - lessen the hassle of dealing with platforms where time_t is - unsigned, and because long_int should suffice to represent all - time_t values that mktime can generate even on platforms where - time_t is excessively wide. */ - -#if INT_MAX <= LONG_MAX / 3 / 366 / 24 / 60 / 60 -typedef long int long_int; -#else -typedef long long int long_int; -#endif -verify (INT_MAX <= TYPE_MAXIMUM (long_int) / 3 / 366 / 24 / 60 / 60); - -/* Shift A right by B bits portably, by dividing A by 2**B and - truncating towards minus infinity. B should be in the range 0 <= B - <= LONG_INT_BITS - 2, where LONG_INT_BITS is the number of useful - bits in a long_int. LONG_INT_BITS is at least 32. - - ISO C99 says that A >> B is implementation-defined if A < 0. Some - implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift - right in the usual way when A < 0, so SHR falls back on division if - ordinary A >> B doesn't seem to be the usual signed shift. */ - -static long_int -shr (long_int a, int b) -{ - long_int one = 1; - return (-one >> 1 == -1 - ? a >> b - : a / (one << b) - (a % (one << b) < 0)); -} - -/* Bounds for the intersection of time_t and long_int. */ - -static long_int const mktime_min - = ((TYPE_SIGNED (time_t) && TYPE_MINIMUM (time_t) < TYPE_MINIMUM (long_int)) - ? TYPE_MINIMUM (long_int) : TYPE_MINIMUM (time_t)); -static long_int const mktime_max - = (TYPE_MAXIMUM (long_int) < TYPE_MAXIMUM (time_t) - ? TYPE_MAXIMUM (long_int) : TYPE_MAXIMUM (time_t)); - -verify (TYPE_IS_INTEGER (time_t)); - -#define EPOCH_YEAR 1970 -#define TM_YEAR_BASE 1900 -verify (TM_YEAR_BASE % 100 == 0); - -/* Is YEAR + TM_YEAR_BASE a leap year? */ -static bool -leapyear (long_int year) -{ - /* Don't add YEAR to TM_YEAR_BASE, as that might overflow. - Also, work even if YEAR is negative. */ - return - ((year & 3) == 0 - && (year % 100 != 0 - || ((year / 100) & 3) == (- (TM_YEAR_BASE / 100) & 3))); -} - -/* How many days come before each month (0-12). */ -#ifndef _LIBC -static -#endif -const unsigned short int __mon_yday[2][13] = - { - /* Normal years. */ - { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, - /* Leap years. */ - { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } - }; - - -#ifdef _LIBC -typedef time_t mktime_offset_t; -#else -/* Portable standalone applications should supply a that - declares a POSIX-compliant localtime_r, for the benefit of older - implementations that lack localtime_r or have a nonstandard one. - See the gnulib time_r module for one way to implement this. */ -# undef __localtime_r -# define __localtime_r localtime_r -# define __mktime_internal mktime_internal -# include "mktime-internal.h" -#endif - -/* Do the values A and B differ according to the rules for tm_isdst? - A and B differ if one is zero and the other positive. */ -static bool -isdst_differ (int a, int b) -{ - return (!a != !b) && (0 <= a) && (0 <= b); -} - -/* Return an integer value measuring (YEAR1-YDAY1 HOUR1:MIN1:SEC1) - - (YEAR0-YDAY0 HOUR0:MIN0:SEC0) in seconds, assuming that the clocks - were not adjusted between the time stamps. - - The YEAR values uses the same numbering as TP->tm_year. Values - need not be in the usual range. However, YEAR1 must not overflow - when multiplied by three times the number of seconds in a year, and - likewise for YDAY1 and three times the number of seconds in a day. */ - -static long_int -ydhms_diff (long_int year1, long_int yday1, int hour1, int min1, int sec1, - int year0, int yday0, int hour0, int min0, int sec0) -{ - verify (-1 / 2 == 0); - - /* Compute intervening leap days correctly even if year is negative. - Take care to avoid integer overflow here. */ - int a4 = shr (year1, 2) + shr (TM_YEAR_BASE, 2) - ! (year1 & 3); - int b4 = shr (year0, 2) + shr (TM_YEAR_BASE, 2) - ! (year0 & 3); - int a100 = a4 / 25 - (a4 % 25 < 0); - int b100 = b4 / 25 - (b4 % 25 < 0); - int a400 = shr (a100, 2); - int b400 = shr (b100, 2); - int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); - - /* Compute the desired time without overflowing. */ - long_int years = year1 - year0; - long_int days = 365 * years + yday1 - yday0 + intervening_leap_days; - long_int hours = 24 * days + hour1 - hour0; - long_int minutes = 60 * hours + min1 - min0; - long_int seconds = 60 * minutes + sec1 - sec0; - return seconds; -} - -/* Return the average of A and B, even if A + B would overflow. - Round toward positive infinity. */ -static long_int -long_int_avg (long_int a, long_int b) -{ - return shr (a, 1) + shr (b, 1) + ((a | b) & 1); -} - -/* Return a time_t value corresponding to (YEAR-YDAY HOUR:MIN:SEC), - assuming that T corresponds to *TP and that no clock adjustments - occurred between *TP and the desired time. - Although T and the returned value are of type long_int, - they represent time_t values and must be in time_t range. - If TP is null, return a value not equal to T; this avoids false matches. - YEAR and YDAY must not be so large that multiplying them by three times the - number of seconds in a year (or day, respectively) would overflow long_int. - If the returned value would be out of range, yield the minimal or - maximal in-range value, except do not yield a value equal to T. */ -static long_int -guess_time_tm (long_int year, long_int yday, int hour, int min, int sec, - long_int t, const struct tm *tp) -{ - if (tp) - { - long_int result; - long_int d = ydhms_diff (year, yday, hour, min, sec, - tp->tm_year, tp->tm_yday, - tp->tm_hour, tp->tm_min, tp->tm_sec); - if (! INT_ADD_WRAPV (t, d, &result)) - return result; - } - - /* Overflow occurred one way or another. Return the nearest result - that is actually in range, except don't report a zero difference - if the actual difference is nonzero, as that would cause a false - match; and don't oscillate between two values, as that would - confuse the spring-forward gap detector. */ - return (t < long_int_avg (mktime_min, mktime_max) - ? (t <= mktime_min + 1 ? t + 1 : mktime_min) - : (mktime_max - 1 <= t ? t - 1 : mktime_max)); -} - -/* Use CONVERT to convert T to a struct tm value in *TM. T must be in - range for time_t. Return TM if successful, NULL if T is out of - range for CONVERT. */ -static struct tm * -convert_time (struct tm *(*convert) (const time_t *, struct tm *), - long_int t, struct tm *tm) -{ - time_t x = t; - return convert (&x, tm); -} - -/* Use CONVERT to convert *T to a broken down time in *TP. - If *T is out of range for conversion, adjust it so that - it is the nearest in-range value and then convert that. - A value is in range if it fits in both time_t and long_int. */ -static struct tm * -ranged_convert (struct tm *(*convert) (const time_t *, struct tm *), - long_int *t, struct tm *tp) -{ - struct tm *r; - if (*t < mktime_min) - *t = mktime_min; - else if (mktime_max < *t) - *t = mktime_max; - r = convert_time (convert, *t, tp); - - if (!r && *t) - { - long_int bad = *t; - long_int ok = 0; - - /* BAD is a known unconvertible value, and OK is a known good one. - Use binary search to narrow the range between BAD and OK until - they differ by 1. */ - while (true) - { - long_int mid = long_int_avg (ok, bad); - if (mid != ok && mid != bad) - break; - r = convert_time (convert, mid, tp); - if (r) - ok = mid; - else - bad = mid; - } - - if (!r && ok) - { - /* The last conversion attempt failed; - revert to the most recent successful attempt. */ - r = convert_time (convert, ok, tp); - } - } - - return r; -} - -/* Convert *TP to a time_t value, inverting - the monotonic and mostly-unit-linear conversion function CONVERT. - Use *OFFSET to keep track of a guess at the offset of the result, - compared to what the result would be for UTC without leap seconds. - If *OFFSET's guess is correct, only one CONVERT call is needed. - This function is external because it is used also by timegm.c. */ -time_t -__mktime_internal (struct tm *tp, - struct tm *(*convert) (const time_t *, struct tm *), - mktime_offset_t *offset) -{ - long_int t, gt, t0, t1, t2, dt; - struct tm tm; - - /* The maximum number of probes (calls to CONVERT) should be enough - to handle any combinations of time zone rule changes, solar time, - leap seconds, and oscillations around a spring-forward gap. - POSIX.1 prohibits leap seconds, but some hosts have them anyway. */ - int remaining_probes = 6; - - /* Time requested. Copy it in case CONVERT modifies *TP; this can - occur if TP is localtime's returned value and CONVERT is localtime. */ - int sec = tp->tm_sec; - int min = tp->tm_min; - int hour = tp->tm_hour; - int mday = tp->tm_mday; - int mon = tp->tm_mon; - int year_requested = tp->tm_year; - int isdst = tp->tm_isdst; - - /* 1 if the previous probe was DST. */ - int dst2; - - /* Ensure that mon is in range, and set year accordingly. */ - int mon_remainder = mon % 12; - int negative_mon_remainder = mon_remainder < 0; - int mon_years = mon / 12 - negative_mon_remainder; - long_int lyear_requested = year_requested; - long_int year = lyear_requested + mon_years; - - /* The other values need not be in range: - the remaining code handles overflows correctly. */ - - /* Calculate day of year from year, month, and day of month. - The result need not be in range. */ - int mon_yday = ((__mon_yday[leapyear (year)] - [mon_remainder + 12 * negative_mon_remainder]) - - 1); - long_int lmday = mday; - long_int yday = mon_yday + lmday; - - int negative_offset_guess; - - int sec_requested = sec; - - if (LEAP_SECONDS_POSSIBLE) - { - /* Handle out-of-range seconds specially, - since ydhms_tm_diff assumes every minute has 60 seconds. */ - if (sec < 0) - sec = 0; - if (59 < sec) - sec = 59; - } - - /* Invert CONVERT by probing. First assume the same offset as last - time. */ - - INT_SUBTRACT_WRAPV (0, *offset, &negative_offset_guess); - t0 = ydhms_diff (year, yday, hour, min, sec, - EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, negative_offset_guess); - - /* Repeatedly use the error to improve the guess. */ - - for (t = t1 = t2 = t0, dst2 = 0; - (gt = guess_time_tm (year, yday, hour, min, sec, t, - ranged_convert (convert, &t, &tm)), - t != gt); - t1 = t2, t2 = t, t = gt, dst2 = tm.tm_isdst != 0) - if (t == t1 && t != t2 - && (tm.tm_isdst < 0 - || (isdst < 0 - ? dst2 <= (tm.tm_isdst != 0) - : (isdst != 0) != (tm.tm_isdst != 0)))) - /* We can't possibly find a match, as we are oscillating - between two values. The requested time probably falls - within a spring-forward gap of size GT - T. Follow the common - practice in this case, which is to return a time that is GT - T - away from the requested time, preferring a time whose - tm_isdst differs from the requested value. (If no tm_isdst - was requested and only one of the two values has a nonzero - tm_isdst, prefer that value.) In practice, this is more - useful than returning -1. */ - goto offset_found; - else if (--remaining_probes == 0) - return -1; - - /* We have a match. Check whether tm.tm_isdst has the requested - value, if any. */ - if (isdst_differ (isdst, tm.tm_isdst)) - { - /* tm.tm_isdst has the wrong value. Look for a neighboring - time with the right value, and use its UTC offset. - - Heuristic: probe the adjacent timestamps in both directions, - looking for the desired isdst. This should work for all real - time zone histories in the tz database. */ - - /* Distance between probes when looking for a DST boundary. In - tzdata2003a, the shortest period of DST is 601200 seconds - (e.g., America/Recife starting 2000-10-08 01:00), and the - shortest period of non-DST surrounded by DST is 694800 - seconds (Africa/Tunis starting 1943-04-17 01:00). Use the - minimum of these two values, so we don't miss these short - periods when probing. */ - int stride = 601200; - - /* The longest period of DST in tzdata2003a is 536454000 seconds - (e.g., America/Jujuy starting 1946-10-01 01:00). The longest - period of non-DST is much longer, but it makes no real sense - to search for more than a year of non-DST, so use the DST - max. */ - int duration_max = 536454000; - - /* Search in both directions, so the maximum distance is half - the duration; add the stride to avoid off-by-1 problems. */ - int delta_bound = duration_max / 2 + stride; - - int delta, direction; - - for (delta = stride; delta < delta_bound; delta += stride) - for (direction = -1; direction <= 1; direction += 2) - { - long_int ot; - if (! INT_ADD_WRAPV (t, delta * direction, &ot)) - { - struct tm otm; - ranged_convert (convert, &ot, &otm); - if (! isdst_differ (isdst, otm.tm_isdst)) - { - /* We found the desired tm_isdst. - Extrapolate back to the desired time. */ - t = guess_time_tm (year, yday, hour, min, sec, ot, &otm); - ranged_convert (convert, &t, &tm); - goto offset_found; - } - } - } - } - - offset_found: - /* Set *OFFSET to the low-order bits of T - T0 - NEGATIVE_OFFSET_GUESS. - This is just a heuristic to speed up the next mktime call, and - correctness is unaffected if integer overflow occurs here. */ - INT_SUBTRACT_WRAPV (t, t0, &dt); - INT_SUBTRACT_WRAPV (dt, negative_offset_guess, offset); - - if (LEAP_SECONDS_POSSIBLE && sec_requested != tm.tm_sec) - { - /* Adjust time to reflect the tm_sec requested, not the normalized value. - Also, repair any damage from a false match due to a leap second. */ - long_int sec_adjustment = sec == 0 && tm.tm_sec == 60; - sec_adjustment -= sec; - sec_adjustment += sec_requested; - if (INT_ADD_WRAPV (t, sec_adjustment, &t) - || ! (mktime_min <= t && t <= mktime_max) - || ! convert_time (convert, t, &tm)) - return -1; - } - - *tp = tm; - return t; -} - - -static mktime_offset_t localtime_offset; - -/* Convert *TP to a time_t value. */ -time_t -mktime (struct tm *tp) -{ -#ifdef _LIBC - /* POSIX.1 8.1.1 requires that whenever mktime() is called, the - time zone names contained in the external variable 'tzname' shall - be set as if the tzset() function had been called. */ - __tzset (); -#elif HAVE_TZSET - tzset (); -#endif - - return __mktime_internal (tp, __localtime_r, &localtime_offset); -} - -#ifdef weak_alias -weak_alias (mktime, timelocal) -#endif - -#ifdef _LIBC -libc_hidden_def (mktime) -libc_hidden_weak (timelocal) -#endif - -#if DEBUG_MKTIME - -static int -not_equal_tm (const struct tm *a, const struct tm *b) -{ - return ((a->tm_sec ^ b->tm_sec) - | (a->tm_min ^ b->tm_min) - | (a->tm_hour ^ b->tm_hour) - | (a->tm_mday ^ b->tm_mday) - | (a->tm_mon ^ b->tm_mon) - | (a->tm_year ^ b->tm_year) - | (a->tm_yday ^ b->tm_yday) - | isdst_differ (a->tm_isdst, b->tm_isdst)); -} - -static void -print_tm (const struct tm *tp) -{ - if (tp) - printf ("%04d-%02d-%02d %02d:%02d:%02d yday %03d wday %d isdst %d", - tp->tm_year + TM_YEAR_BASE, tp->tm_mon + 1, tp->tm_mday, - tp->tm_hour, tp->tm_min, tp->tm_sec, - tp->tm_yday, tp->tm_wday, tp->tm_isdst); - else - printf ("0"); -} - -static int -check_result (time_t tk, struct tm tmk, time_t tl, const struct tm *lt) -{ - if (tk != tl || !lt || not_equal_tm (&tmk, lt)) - { - printf ("mktime ("); - print_tm (lt); - printf (")\nyields ("); - print_tm (&tmk); - printf (") == %ld, should be %ld\n", (long int) tk, (long int) tl); - return 1; - } - - return 0; -} - -int -main (int argc, char **argv) -{ - int status = 0; - struct tm tm, tmk, tml; - struct tm *lt; - time_t tk, tl, tl1; - char trailer; - - /* Sanity check, plus call tzset. */ - tl = 0; - if (! localtime (&tl)) - { - printf ("localtime (0) fails\n"); - status = 1; - } - - if ((argc == 3 || argc == 4) - && (sscanf (argv[1], "%d-%d-%d%c", - &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &trailer) - == 3) - && (sscanf (argv[2], "%d:%d:%d%c", - &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &trailer) - == 3)) - { - tm.tm_year -= TM_YEAR_BASE; - tm.tm_mon--; - tm.tm_isdst = argc == 3 ? -1 : atoi (argv[3]); - tmk = tm; - tl = mktime (&tmk); - lt = localtime_r (&tl, &tml); - printf ("mktime returns %ld == ", (long int) tl); - print_tm (&tmk); - printf ("\n"); - status = check_result (tl, tmk, tl, lt); - } - else if (argc == 4 || (argc == 5 && strcmp (argv[4], "-") == 0)) - { - time_t from = atol (argv[1]); - time_t by = atol (argv[2]); - time_t to = atol (argv[3]); - - if (argc == 4) - for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1) - { - lt = localtime_r (&tl, &tml); - if (lt) - { - tmk = tml; - tk = mktime (&tmk); - status |= check_result (tk, tmk, tl, &tml); - } - else - { - printf ("localtime_r (%ld) yields 0\n", (long int) tl); - status = 1; - } - tl1 = tl + by; - if ((tl1 < tl) != (by < 0)) - break; - } - else - for (tl = from; by < 0 ? to <= tl : tl <= to; tl = tl1) - { - /* Null benchmark. */ - lt = localtime_r (&tl, &tml); - if (lt) - { - tmk = tml; - tk = tl; - status |= check_result (tk, tmk, tl, &tml); - } - else - { - printf ("localtime_r (%ld) yields 0\n", (long int) tl); - status = 1; - } - tl1 = tl + by; - if ((tl1 < tl) != (by < 0)) - break; - } - } - else - printf ("Usage:\ -\t%s YYYY-MM-DD HH:MM:SS [ISDST] # Test given time.\n\ -\t%s FROM BY TO # Test values FROM, FROM+BY, ..., TO.\n\ -\t%s FROM BY TO - # Do not test those values (for benchmark).\n", - argv[0], argv[0], argv[0]); - - return status; -} - -#endif /* DEBUG_MKTIME */ - -/* -Local Variables: -compile-command: "gcc -DDEBUG_MKTIME -I. -Wall -W -O2 -g mktime.c -o mktime" -End: -*/ diff --git a/src/gl/msvc-inval.c b/src/gl/msvc-inval.c deleted file mode 100644 index baaf39eda1..0000000000 --- a/src/gl/msvc-inval.c +++ /dev/null @@ -1,129 +0,0 @@ -/* Invalid parameter handler for MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#include "msvc-inval.h" - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ - && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) - -/* Get _invalid_parameter_handler type and _set_invalid_parameter_handler - declaration. */ -# include - -# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING - -static void __cdecl -gl_msvc_invalid_parameter_handler (const wchar_t *expression, - const wchar_t *function, - const wchar_t *file, - unsigned int line, - uintptr_t dummy) -{ -} - -# else - -/* Get declarations of the native Windows API functions. */ -# define WIN32_LEAN_AND_MEAN -# include - -# if defined _MSC_VER - -static void __cdecl -gl_msvc_invalid_parameter_handler (const wchar_t *expression, - const wchar_t *function, - const wchar_t *file, - unsigned int line, - uintptr_t dummy) -{ - RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); -} - -# else - -/* An index to thread-local storage. */ -static DWORD tls_index; -static int tls_initialized /* = 0 */; - -/* Used as a fallback only. */ -static struct gl_msvc_inval_per_thread not_per_thread; - -struct gl_msvc_inval_per_thread * -gl_msvc_inval_current (void) -{ - if (!tls_initialized) - { - tls_index = TlsAlloc (); - tls_initialized = 1; - } - if (tls_index == TLS_OUT_OF_INDEXES) - /* TlsAlloc had failed. */ - return ¬_per_thread; - else - { - struct gl_msvc_inval_per_thread *pointer = - (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); - if (pointer == NULL) - { - /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ - pointer = - (struct gl_msvc_inval_per_thread *) - malloc (sizeof (struct gl_msvc_inval_per_thread)); - if (pointer == NULL) - /* Could not allocate memory. Use the global storage. */ - pointer = ¬_per_thread; - TlsSetValue (tls_index, pointer); - } - return pointer; - } -} - -static void __cdecl -gl_msvc_invalid_parameter_handler (const wchar_t *expression, - const wchar_t *function, - const wchar_t *file, - unsigned int line, - uintptr_t dummy) -{ - struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); - if (current->restart_valid) - longjmp (current->restart, 1); - else - /* An invalid parameter notification from outside the gnulib code. - Give the caller a chance to intervene. */ - RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); -} - -# endif - -# endif - -static int gl_msvc_inval_initialized /* = 0 */; - -void -gl_msvc_inval_ensure_handler (void) -{ - if (gl_msvc_inval_initialized == 0) - { - _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); - gl_msvc_inval_initialized = 1; - } -} - -#endif diff --git a/src/gl/msvc-inval.h b/src/gl/msvc-inval.h deleted file mode 100644 index 027c94972a..0000000000 --- a/src/gl/msvc-inval.h +++ /dev/null @@ -1,222 +0,0 @@ -/* Invalid parameter handler for MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#ifndef _MSVC_INVAL_H -#define _MSVC_INVAL_H - -/* With MSVC runtime libraries with the "invalid parameter handler" concept, - functions like fprintf(), dup2(), or close() crash when the caller passes - an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) - instead. - This file defines macros that turn such an invalid parameter notification - into a non-local exit. An error code can then be produced at the target - of this exit. You can thus write code like - - TRY_MSVC_INVAL - { - - } - CATCH_MSVC_INVAL - { - - } - DONE_MSVC_INVAL; - - This entire block expands to a single statement. - - The handling of invalid parameters can be done in three ways: - - * The default way, which is reasonable for programs (not libraries): - AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) - - * The way for libraries that make "hairy" calls (like close(-1), or - fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): - AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) - - * The way for libraries that make no "hairy" calls: - AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) - */ - -#define DEFAULT_HANDLING 0 -#define HAIRY_LIBRARY_HANDLING 1 -#define SANE_LIBRARY_HANDLING 2 - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ - && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) -/* A native Windows platform with the "invalid parameter handler" concept, - and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ - -# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING -/* Default handling. */ - -# ifdef __cplusplus -extern "C" { -# endif - -/* Ensure that the invalid parameter handler in installed that just returns. - Because we assume no other part of the program installs a different - invalid parameter handler, this solution is multithread-safe. */ -extern void gl_msvc_inval_ensure_handler (void); - -# ifdef __cplusplus -} -# endif - -# define TRY_MSVC_INVAL \ - do \ - { \ - gl_msvc_inval_ensure_handler (); \ - if (1) -# define CATCH_MSVC_INVAL \ - else -# define DONE_MSVC_INVAL \ - } \ - while (0) - -# else -/* Handling for hairy libraries. */ - -# include - -/* Gnulib can define its own status codes, as described in the page - "Raising Software Exceptions" on microsoft.com - . - Our status codes are composed of - - 0xE0000000, mandatory for all user-defined status codes, - - 0x474E550, a API identifier ("GNU"), - - 0, 1, 2, ..., used to distinguish different status codes from the - same API. */ -# define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) - -# if defined _MSC_VER -/* A compiler that supports __try/__except, as described in the page - "try-except statement" on microsoft.com - . - With __try/__except, we can use the multithread-safe exception handling. */ - -# ifdef __cplusplus -extern "C" { -# endif - -/* Ensure that the invalid parameter handler in installed that raises a - software exception with code STATUS_GNULIB_INVALID_PARAMETER. - Because we assume no other part of the program installs a different - invalid parameter handler, this solution is multithread-safe. */ -extern void gl_msvc_inval_ensure_handler (void); - -# ifdef __cplusplus -} -# endif - -# define TRY_MSVC_INVAL \ - do \ - { \ - gl_msvc_inval_ensure_handler (); \ - __try -# define CATCH_MSVC_INVAL \ - __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ - ? EXCEPTION_EXECUTE_HANDLER \ - : EXCEPTION_CONTINUE_SEARCH) -# define DONE_MSVC_INVAL \ - } \ - while (0) - -# else -/* Any compiler. - We can only use setjmp/longjmp. */ - -# include - -# ifdef __cplusplus -extern "C" { -# endif - -struct gl_msvc_inval_per_thread -{ - /* The restart that will resume execution at the code between - CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between - TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ - jmp_buf restart; - - /* Tells whether the contents of restart is valid. */ - int restart_valid; -}; - -/* Ensure that the invalid parameter handler in installed that passes - control to the gl_msvc_inval_restart if it is valid, or raises a - software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. - Because we assume no other part of the program installs a different - invalid parameter handler, this solution is multithread-safe. */ -extern void gl_msvc_inval_ensure_handler (void); - -/* Return a pointer to the per-thread data for the current thread. */ -extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); - -# ifdef __cplusplus -} -# endif - -# define TRY_MSVC_INVAL \ - do \ - { \ - struct gl_msvc_inval_per_thread *msvc_inval_current; \ - gl_msvc_inval_ensure_handler (); \ - msvc_inval_current = gl_msvc_inval_current (); \ - /* First, initialize gl_msvc_inval_restart. */ \ - if (setjmp (msvc_inval_current->restart) == 0) \ - { \ - /* Then, mark it as valid. */ \ - msvc_inval_current->restart_valid = 1; -# define CATCH_MSVC_INVAL \ - /* Execution completed. \ - Mark gl_msvc_inval_restart as invalid. */ \ - msvc_inval_current->restart_valid = 0; \ - } \ - else \ - { \ - /* Execution triggered an invalid parameter notification. \ - Mark gl_msvc_inval_restart as invalid. */ \ - msvc_inval_current->restart_valid = 0; -# define DONE_MSVC_INVAL \ - } \ - } \ - while (0) - -# endif - -# endif - -#else -/* A platform that does not need to the invalid parameter handler, - or when SANE_LIBRARY_HANDLING is desired. */ - -/* The braces here avoid GCC warnings like - "warning: suggest explicit braces to avoid ambiguous 'else'". */ -# define TRY_MSVC_INVAL \ - do \ - { \ - if (1) -# define CATCH_MSVC_INVAL \ - else -# define DONE_MSVC_INVAL \ - } \ - while (0) - -#endif - -#endif /* _MSVC_INVAL_H */ diff --git a/src/gl/msvc-nothrow.c b/src/gl/msvc-nothrow.c deleted file mode 100644 index ba75bbfb27..0000000000 --- a/src/gl/msvc-nothrow.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Wrappers that don't throw invalid parameter notifications - with MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#include "msvc-nothrow.h" - -/* Get declarations of the native Windows API functions. */ -#define WIN32_LEAN_AND_MEAN -#include - -#include "msvc-inval.h" - -#undef _get_osfhandle - -#if HAVE_MSVC_INVALID_PARAMETER_HANDLER -intptr_t -_gl_nothrow_get_osfhandle (int fd) -{ - intptr_t result; - - TRY_MSVC_INVAL - { - result = _get_osfhandle (fd); - } - CATCH_MSVC_INVAL - { - result = (intptr_t) INVALID_HANDLE_VALUE; - } - DONE_MSVC_INVAL; - - return result; -} -#endif diff --git a/src/gl/msvc-nothrow.h b/src/gl/msvc-nothrow.h deleted file mode 100644 index 3493b84a86..0000000000 --- a/src/gl/msvc-nothrow.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Wrappers that don't throw invalid parameter notifications - with MSVC runtime libraries. - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#ifndef _MSVC_NOTHROW_H -#define _MSVC_NOTHROW_H - -/* With MSVC runtime libraries with the "invalid parameter handler" concept, - functions like fprintf(), dup2(), or close() crash when the caller passes - an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) - instead. - This file defines wrappers that turn such an invalid parameter notification - into an error code. */ - -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - -/* Get original declaration of _get_osfhandle. */ -# include - -# if HAVE_MSVC_INVALID_PARAMETER_HANDLER - -/* Override _get_osfhandle. */ -extern intptr_t _gl_nothrow_get_osfhandle (int fd); -# define _get_osfhandle _gl_nothrow_get_osfhandle - -# endif - -#endif - -#endif /* _MSVC_NOTHROW_H */ diff --git a/src/gl/netdb.in.h b/src/gl/netdb.in.h deleted file mode 100644 index 5e2c035731..0000000000 --- a/src/gl/netdb.in.h +++ /dev/null @@ -1,265 +0,0 @@ -/* Provide a netdb.h header file for systems lacking it (read: MinGW). - Copyright (C) 2008-2016 Free Software Foundation, Inc. - Written by Simon Josefsson. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* This file is supposed to be used on platforms that lack . - It is intended to provide definitions and prototypes needed by an - application. */ - -#ifndef _@GUARD_PREFIX@_NETDB_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if @HAVE_NETDB_H@ - -/* The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_NETDB_H@ - -#endif - -#ifndef _@GUARD_PREFIX@_NETDB_H -#define _@GUARD_PREFIX@_NETDB_H - -/* Get definitions such as 'socklen_t' on IRIX 6.5 and OSF/1 4.0 and - 'struct hostent' on MinGW. */ -#include - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -/* Declarations for a platform that lacks , or where it is - incomplete. */ - -#if @GNULIB_GETADDRINFO@ - -# if !@HAVE_STRUCT_ADDRINFO@ - -# ifdef __cplusplus -extern "C" { -# endif - -# if !GNULIB_defined_struct_addrinfo -/* Structure to contain information about address of a service provider. */ -struct addrinfo -{ - int ai_flags; /* Input flags. */ - int ai_family; /* Protocol family for socket. */ - int ai_socktype; /* Socket type. */ - int ai_protocol; /* Protocol for socket. */ - socklen_t ai_addrlen; /* Length of socket address. */ - struct sockaddr *ai_addr; /* Socket address for socket. */ - char *ai_canonname; /* Canonical name for service location. */ - struct addrinfo *ai_next; /* Pointer to next in list. */ -}; -# define GNULIB_defined_struct_addrinfo 1 -# endif - -# ifdef __cplusplus -} -# endif - -# endif - -/* Possible values for 'ai_flags' field in 'addrinfo' structure. */ -# ifndef AI_PASSIVE -# define AI_PASSIVE 0x0001 /* Socket address is intended for 'bind'. */ -# endif -# ifndef AI_CANONNAME -# define AI_CANONNAME 0x0002 /* Request for canonical name. */ -# endif -# ifndef AI_NUMERICSERV -# define AI_NUMERICSERV 0x0400 /* Don't use name resolution. */ -# endif - -# if 0 -# define AI_NUMERICHOST 0x0004 /* Don't use name resolution. */ -# endif - -/* These symbolic constants are required to be present by POSIX, but - our getaddrinfo replacement doesn't use them (yet). Setting them - to 0 on systems that doesn't have them avoids causing problems for - system getaddrinfo implementations that would be confused by - unknown values. */ -# ifndef AI_V4MAPPED -# define AI_V4MAPPED 0 /* 0x0008: IPv4 mapped addresses are acceptable. */ -# endif -# ifndef AI_ALL -# define AI_ALL 0 /* 0x0010: Return IPv4 mapped and IPv6 addresses. */ -# endif -# ifndef AI_ADDRCONFIG -# define AI_ADDRCONFIG 0 /* 0x0020: Use configuration of this host to choose - returned address type. */ -# endif - -/* Error values for 'getaddrinfo' function. */ -# ifndef EAI_BADFLAGS -# define EAI_BADFLAGS -1 /* Invalid value for 'ai_flags' field. */ -# define EAI_NONAME -2 /* NAME or SERVICE is unknown. */ -# define EAI_AGAIN -3 /* Temporary failure in name resolution. */ -# define EAI_FAIL -4 /* Non-recoverable failure in name res. */ -# define EAI_NODATA -5 /* No address associated with NAME. */ -# define EAI_FAMILY -6 /* 'ai_family' not supported. */ -# define EAI_SOCKTYPE -7 /* 'ai_socktype' not supported. */ -# define EAI_SERVICE -8 /* SERVICE not supported for 'ai_socktype'. */ -# define EAI_MEMORY -10 /* Memory allocation failure. */ -# endif - -/* Since EAI_NODATA is deprecated by RFC3493, some systems (at least - FreeBSD, which does define EAI_BADFLAGS) have removed the definition - in favor of EAI_NONAME. */ -# if !defined EAI_NODATA && defined EAI_NONAME -# define EAI_NODATA EAI_NONAME -# endif - -# ifndef EAI_OVERFLOW -/* Not defined on mingw32 and Haiku. */ -# define EAI_OVERFLOW -12 /* Argument buffer overflow. */ -# endif -# ifndef EAI_ADDRFAMILY -/* Not defined on mingw32. */ -# define EAI_ADDRFAMILY -9 /* Address family for NAME not supported. */ -# endif -# ifndef EAI_SYSTEM -/* Not defined on mingw32. */ -# define EAI_SYSTEM -11 /* System error returned in 'errno'. */ -# endif - -# if 0 -/* The commented out definitions below are not yet implemented in the - GNULIB getaddrinfo() replacement, so are not yet needed. - - If they are restored, be sure to protect the definitions with #ifndef. */ -# ifndef EAI_INPROGRESS -# define EAI_INPROGRESS -100 /* Processing request in progress. */ -# define EAI_CANCELED -101 /* Request canceled. */ -# define EAI_NOTCANCELED -102 /* Request not canceled. */ -# define EAI_ALLDONE -103 /* All requests done. */ -# define EAI_INTR -104 /* Interrupted by a signal. */ -# define EAI_IDN_ENCODE -105 /* IDN encoding failed. */ -# endif -# endif - -# if !@HAVE_DECL_GETADDRINFO@ -/* Translate name of a service location and/or a service name to set of - socket addresses. - For more details, see the POSIX:2001 specification - . */ -_GL_FUNCDECL_SYS (getaddrinfo, int, - (const char *restrict nodename, - const char *restrict servname, - const struct addrinfo *restrict hints, - struct addrinfo **restrict res) - _GL_ARG_NONNULL ((4))); -# endif -_GL_CXXALIAS_SYS (getaddrinfo, int, - (const char *restrict nodename, - const char *restrict servname, - const struct addrinfo *restrict hints, - struct addrinfo **restrict res)); -_GL_CXXALIASWARN (getaddrinfo); - -# if !@HAVE_DECL_FREEADDRINFO@ -/* Free 'addrinfo' structure AI including associated storage. - For more details, see the POSIX:2001 specification - . */ -_GL_FUNCDECL_SYS (freeaddrinfo, void, (struct addrinfo *ai) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (freeaddrinfo, void, (struct addrinfo *ai)); -_GL_CXXALIASWARN (freeaddrinfo); - -# if @REPLACE_GAI_STRERROR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gai_strerror -# define gai_strerror rpl_gai_strerror -# endif -_GL_FUNCDECL_RPL (gai_strerror, const char *, (int ecode)); -_GL_CXXALIAS_RPL (gai_strerror, const char *, (int ecode)); -# else -# if !@HAVE_DECL_GAI_STRERROR@ -/* Convert error return from getaddrinfo() to a string. - For more details, see the POSIX:2001 specification - . */ -_GL_FUNCDECL_SYS (gai_strerror, const char *, (int ecode)); -# endif -_GL_CXXALIAS_SYS (gai_strerror, const char *, (int ecode)); -# endif -_GL_CXXALIASWARN (gai_strerror); - -# if !@HAVE_DECL_GETNAMEINFO@ -/* Convert socket address to printable node and service names. - For more details, see the POSIX:2001 specification - . */ -_GL_FUNCDECL_SYS (getnameinfo, int, - (const struct sockaddr *restrict sa, socklen_t salen, - char *restrict node, socklen_t nodelen, - char *restrict service, socklen_t servicelen, - int flags) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on glibc systems, the seventh parameter is - unsigned int flags. */ -_GL_CXXALIAS_SYS_CAST (getnameinfo, int, - (const struct sockaddr *restrict sa, socklen_t salen, - char *restrict node, socklen_t nodelen, - char *restrict service, socklen_t servicelen, - int flags)); -_GL_CXXALIASWARN (getnameinfo); - -/* Possible flags for getnameinfo. */ -# ifndef NI_NUMERICHOST -# define NI_NUMERICHOST 1 -# endif -# ifndef NI_NUMERICSERV -# define NI_NUMERICSERV 2 -# endif - -#elif defined GNULIB_POSIXCHECK - -# undef getaddrinfo -# if HAVE_RAW_DECL_GETADDRINFO -_GL_WARN_ON_USE (getaddrinfo, "getaddrinfo is unportable - " - "use gnulib module getaddrinfo for portability"); -# endif - -# undef freeaddrinfo -# if HAVE_RAW_DECL_FREEADDRINFO -_GL_WARN_ON_USE (freeaddrinfo, "freeaddrinfo is unportable - " - "use gnulib module getaddrinfo for portability"); -# endif - -# undef gai_strerror -# if HAVE_RAW_DECL_GAI_STRERROR -_GL_WARN_ON_USE (gai_strerror, "gai_strerror is unportable - " - "use gnulib module getaddrinfo for portability"); -# endif - -# undef getnameinfo -# if HAVE_RAW_DECL_GETNAMEINFO -_GL_WARN_ON_USE (getnameinfo, "getnameinfo is unportable - " - "use gnulib module getaddrinfo for portability"); -# endif - -#endif - -#endif /* _@GUARD_PREFIX@_NETDB_H */ -#endif /* _@GUARD_PREFIX@_NETDB_H */ diff --git a/src/gl/netinet_in.in.h b/src/gl/netinet_in.in.h deleted file mode 100644 index 54e1ec04cd..0000000000 --- a/src/gl/netinet_in.in.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Substitute for . - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_NETINET_IN_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if @HAVE_NETINET_IN_H@ - -/* On many platforms, assumes prior inclusion of - . */ -# include - -/* The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_NETINET_IN_H@ - -#endif - -#ifndef _@GUARD_PREFIX@_NETINET_IN_H -#define _@GUARD_PREFIX@_NETINET_IN_H - -#if !@HAVE_NETINET_IN_H@ - -/* A platform that lacks . */ - -# include - -#endif - -#endif /* _@GUARD_PREFIX@_NETINET_IN_H */ -#endif /* _@GUARD_PREFIX@_NETINET_IN_H */ diff --git a/src/gl/parse-datetime.h b/src/gl/parse-datetime.h deleted file mode 100644 index 1c8d310c2b..0000000000 --- a/src/gl/parse-datetime.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Parse a string into an internal time stamp. - - Copyright (C) 1995, 1997-1998, 2003-2004, 2007, 2009-2016 Free Software - Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include -#include - -bool parse_datetime (struct timespec *, char const *, struct timespec const *); - -/* parse_datetime2 flag: if set, print debug/progress information to STDERR */ -#define PARSE_DATETIME_DEBUG 1 - -/* same as above, supporting additional flags */ -bool parse_datetime2 (struct timespec *, char const *, struct timespec const *, - unsigned int flags); diff --git a/src/gl/parse-datetime.y b/src/gl/parse-datetime.y deleted file mode 100644 index 51ba4cc2ce..0000000000 --- a/src/gl/parse-datetime.y +++ /dev/null @@ -1,2323 +0,0 @@ -%{ -/* Parse a string into an internal time stamp. - - Copyright (C) 1999-2000, 2002-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Originally written by Steven M. Bellovin while - at the University of North Carolina at Chapel Hill. Later tweaked by - a couple of people on Usenet. Completely overhauled by Rich $alz - and Jim Berets in August, 1990. - - Modified by Paul Eggert in August 1999 to do - the right thing about local DST. Also modified by Paul Eggert - in February 2004 to support - nanosecond-resolution time stamps, and in October 2004 to support - TZ strings in dates. */ - -/* FIXME: Check for arithmetic overflow in all cases, not just - some of them. */ - -#include - -#include "parse-datetime.h" - -#include "intprops.h" -#include "timespec.h" -#include "verify.h" -#include "strftime.h" - -/* There's no need to extend the stack, so there's no need to involve - alloca. */ -#define YYSTACK_USE_ALLOCA 0 - -/* Tell Bison how much stack space is needed. 20 should be plenty for - this grammar, which is not right recursive. Beware setting it too - high, since that might cause problems on machines whose - implementations have lame stack-overflow checking. */ -#define YYMAXDEPTH 20 -#define YYINITDEPTH YYMAXDEPTH - -/* Since the code of parse-datetime.y is not included in the Emacs executable - itself, there is no need to #define static in this file. Even if - the code were included in the Emacs executable, it probably - wouldn't do any harm to #undef it here; this will only cause - problems if we try to write to a static variable, which I don't - think this code needs to do. */ -#ifdef emacs -# undef static -#endif - -#include -#include -#include -#include -#include -#include - -#include "gettext.h" -#include "xalloc.h" - -#define _(str) gettext (str) - -/* Bison's skeleton tests _STDLIB_H, while some stdlib.h headers - use _STDLIB_H_ as witness. Map the latter to the one bison uses. */ -/* FIXME: this is temporary. Remove when we have a mechanism to ensure - that the version we're using is fixed, too. */ -#ifdef _STDLIB_H_ -# undef _STDLIB_H -# define _STDLIB_H 1 -#endif - -/* ISDIGIT differs from isdigit, as follows: - - Its arg may be any int or unsigned int; it need not be an unsigned char - or EOF. - - It's typically faster. - POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to - isdigit unless it's important to use the locale's definition - of "digit" even when the host does not conform to POSIX. */ -#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) - -/* Shift A right by B bits portably, by dividing A by 2**B and - truncating towards minus infinity. A and B should be free of side - effects, and B should be in the range 0 <= B <= INT_BITS - 2, where - INT_BITS is the number of useful bits in an int. GNU code can - assume that INT_BITS is at least 32. - - ISO C99 says that A >> B is implementation-defined if A < 0. Some - implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift - right in the usual way when A < 0, so SHR falls back on division if - ordinary A >> B doesn't seem to be the usual signed shift. */ -#define SHR(a, b) \ - (-1 >> 1 == -1 \ - ? (a) >> (b) \ - : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) - -#define EPOCH_YEAR 1970 -#define TM_YEAR_BASE 1900 - -#define HOUR(x) ((x) * 60) - -#define STREQ(a, b) (strcmp (a, b) == 0) - -/* long_time_t is a signed integer type that contains all time_t values. */ -verify (TYPE_IS_INTEGER (time_t)); -#if TIME_T_FITS_IN_LONG_INT -typedef long int long_time_t; -#else -typedef time_t long_time_t; -#endif - -/* Convert a possibly-signed character to an unsigned character. This is - a bit safer than casting to unsigned char, since it catches some type - errors that the cast doesn't. */ -static unsigned char to_uchar (char ch) { return ch; } - -static void -dbg_printf (const char *msg,...) -{ - va_list args; - /* TODO: use gnulib's 'program_name' instead? */ - fputs ("date: ", stderr); - - va_start (args, msg); - vfprintf (stderr, msg, args); - va_end (args); -} - - - -/* Lots of this code assumes time_t and time_t-like values fit into - long_time_t. */ -verify (TYPE_MINIMUM (long_time_t) <= TYPE_MINIMUM (time_t) - && TYPE_MAXIMUM (time_t) <= TYPE_MAXIMUM (long_time_t)); - -/* FIXME: It also assumes that signed integer overflow silently wraps around, - but this is not true any more with recent versions of GCC 4. */ - -/* An integer value, and the number of digits in its textual - representation. */ -typedef struct -{ - bool negative; - long int value; - size_t digits; -} textint; - -/* An entry in the lexical lookup table. */ -typedef struct -{ - char const *name; - int type; - int value; -} table; - -/* Meridian: am, pm, or 24-hour style. */ -enum { MERam, MERpm, MER24 }; - -enum { BILLION = 1000000000, LOG10_BILLION = 9 }; - -/* Relative times. */ -typedef struct -{ - /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ - long int year; - long int month; - long int day; - long int hour; - long int minutes; - long_time_t seconds; - long int ns; -} relative_time; - -#if HAVE_COMPOUND_LITERALS -# define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 }) -#else -static relative_time const RELATIVE_TIME_0; -#endif - -/* Information passed to and from the parser. */ -typedef struct -{ - /* The input string remaining to be parsed. */ - const char *input; - - /* N, if this is the Nth Tuesday. */ - long int day_ordinal; - - /* Day of week; Sunday is 0. */ - int day_number; - - /* tm_isdst flag for the local zone. */ - int local_isdst; - - /* Time zone, in minutes east of UTC. */ - long int time_zone; - - /* Style used for time. */ - int meridian; - - /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds. */ - textint year; - long int month; - long int day; - long int hour; - long int minutes; - struct timespec seconds; /* includes nanoseconds */ - - /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ - relative_time rel; - - /* Presence or counts of nonterminals of various flavors parsed so far. */ - bool timespec_seen; - bool rels_seen; - size_t dates_seen; - size_t days_seen; - size_t local_zones_seen; - size_t dsts_seen; - size_t times_seen; - size_t zones_seen; - - /* if true, print debugging output to stderr */ - bool parse_datetime_debug; - - /* which of the 'seen' parts has been printed when debugging */ - size_t debug_dates_seen; - size_t debug_days_seen; - size_t debug_local_zones_seen; - size_t debug_dsts_seen; - size_t debug_times_seen; - size_t debug_zones_seen; - - /* true if the user specified explicit ordinal day value, */ - bool debug_ordinal_day_seen; - - /* the default input timezone, set by TZ value */ - long int debug_default_input_timezone; - - /* Table of local time zone abbreviations, terminated by a null entry. */ - table local_time_zone_table[3]; -} parser_control; - -union YYSTYPE; -static int yylex (union YYSTYPE *, parser_control *); -static int yyerror (parser_control const *, char const *); -static long int time_zone_hhmm (parser_control *, textint, long int); - -/* Extract into *PC any date and time info from a string of digits - of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY, - YYYY, ...). */ -static void -digits_to_date_time (parser_control *pc, textint text_int) -{ - if (pc->dates_seen && ! pc->year.digits - && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits)) - pc->year = text_int; - else - { - if (4 < text_int.digits) - { - pc->dates_seen++; - pc->day = text_int.value % 100; - pc->month = (text_int.value / 100) % 100; - pc->year.value = text_int.value / 10000; - pc->year.digits = text_int.digits - 4; - } - else - { - pc->times_seen++; - if (text_int.digits <= 2) - { - pc->hour = text_int.value; - pc->minutes = 0; - } - else - { - pc->hour = text_int.value / 100; - pc->minutes = text_int.value % 100; - } - pc->seconds.tv_sec = 0; - pc->seconds.tv_nsec = 0; - pc->meridian = MER24; - } - } -} - -/* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1). */ -static void -apply_relative_time (parser_control *pc, relative_time rel, int factor) -{ - pc->rel.ns += factor * rel.ns; - pc->rel.seconds += factor * rel.seconds; - pc->rel.minutes += factor * rel.minutes; - pc->rel.hour += factor * rel.hour; - pc->rel.day += factor * rel.day; - pc->rel.month += factor * rel.month; - pc->rel.year += factor * rel.year; - pc->rels_seen = true; -} - -/* Set PC-> hour, minutes, seconds and nanoseconds members from arguments. */ -static void -set_hhmmss (parser_control *pc, long int hour, long int minutes, - time_t sec, long int nsec) -{ - pc->hour = hour; - pc->minutes = minutes; - pc->seconds.tv_sec = sec; - pc->seconds.tv_nsec = nsec; -} - -/* returns a textual representation of the day ordinal/number values - in the parser_control struct (e.g. 'last wed', 'this tues', 'thu') */ -static const char* -str_days (parser_control *pc, char* /*output*/ buffer, size_t n) -{ - /* TODO: use the relative_time_table[] for reverse lookup */ - static const char* ordinal_values[] = { - "last", - "this", - "next/first", - "(SECOND)", /* SECOND is commented out in relative_time_table[] */ - "third", - "fourth", - "fifth", - "sixth", - "seventh", - "eight", - "ninth", - "tenth", - "eleventh", - "twelfth"}; - - static const char* days_values[] = { - "Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat" - }; - - /* don't add an ordinal prefix if the user didn't specify it - (e.g., "this wed" vs "wed") */ - if (pc->debug_ordinal_day_seen) - { - /* use word description of possible (e.g. -1 = last, 3 = third) */ - if (pc->day_ordinal>=-1 && pc->day_ordinal <=12) - { - strncpy (buffer, ordinal_values[ pc->day_ordinal+1 ], n); - buffer[n-1]='\0'; - } - else - { - snprintf (buffer,n,"%ld",pc->day_ordinal); - } - } - else - { - buffer[0] = '\0'; - } - - /* Add the day name */ - if (pc->day_number>=0 && pc->day_number<=6) - { - size_t l = strlen (buffer); - if (l>0) - { - strncat (buffer," ",n-l); - ++l; - } - strncat (buffer,days_values[pc->day_number],n-l); - } - else - { - /* invalid day_number value - should never happen */ - } - return buffer; -} - -/* debugging: print the current time in the parser_control structure. - The parser will increment "*_seen" members for those which were parsed. - This function will print only newly seen parts. */ -static void -debug_print_current_time (const char* item, parser_control *pc) -{ - char tmp[100] = {0}; - int space = 0; /* if true, add space delimiter */ - - if (!pc->parse_datetime_debug) - return; - - /* no newline, more items printed below */ - dbg_printf (_("parsed %s part: "), item); - - if (pc->dates_seen != pc->debug_dates_seen) - { - /*TODO: use pc->year.negative? */ - fprintf (stderr,"(Y-M-D) %04ld-%02ld-%02ld", - pc->year.value, pc->month, pc->day); - pc->debug_dates_seen = pc->dates_seen; - space = 1; - } - - if (pc->times_seen != pc->debug_times_seen) - { - if (space) - fputc (' ',stderr); - fprintf (stderr,"%02ld:%02ld:%02ld", - pc->hour, pc->minutes, pc->seconds.tv_sec); - if (pc->seconds.tv_nsec!=0) - fprintf (stderr,"%09ld", pc->seconds.tv_nsec); - if (pc->meridian==MERpm) - fputs ("pm",stderr); - - pc->debug_times_seen = pc->times_seen; - space = 1; - } - - if (pc->days_seen != pc->debug_days_seen) - { - if (space) - fputc (' ',stderr); - fprintf (stderr,_("%s (day ordinal=%ld number=%d)"), - str_days (pc,tmp,sizeof (tmp)), - pc->day_ordinal, pc->day_number); - pc->debug_days_seen = pc->days_seen ; - space = 1; - } - - if (pc->dsts_seen != pc->debug_dsts_seen) - { - if (space) - fputc (' ',stderr); - fprintf (stderr,_("is-dst=%d"), pc->local_isdst); - pc->dsts_seen = pc->debug_dsts_seen; - space = 1; - } - - /* TODO: fix incorrect display of EST=2:08h? */ - if (pc->zones_seen != pc->debug_zones_seen) - { - if (space) - fputc (' ',stderr); - fprintf (stderr,_("TZ=%+03d:%02d"), (int)(pc->time_zone/60), - abs ((int)pc->time_zone%60)); - pc->debug_zones_seen = pc->zones_seen; - space = 1; - } - - if (pc->local_zones_seen != pc->debug_local_zones_seen) - { - if (space) - fputc (' ',stderr); - fprintf (stderr,_("Local-TZ=%+03d:%02d"), (int)(pc->time_zone/60), - abs ((int)pc->time_zone%60)); - pc->debug_local_zones_seen = pc->local_zones_seen; - space = 1; - } - - if (pc->timespec_seen) - { - if (space) - fputc (' ',stderr); - fprintf (stderr,_("number of seconds: %ld"), pc->seconds.tv_sec); - } - - fputc ('\n', stderr); -} - -/* debugging: print the current relative values. */ -static void -debug_print_relative_time (const char* item, const parser_control *pc) -{ - int space = 0; /* if true, add space delimiter */ - - if (!pc->parse_datetime_debug) - return; - - /* no newline, more items printed below */ - dbg_printf (_("parsed %s part: "), item); - - if (pc->rel.year==0 && pc->rel.month==0 && pc->rel.day==0 - && pc->rel.hour==0 && pc->rel.minutes==00 && pc->rel.seconds == 0 - && pc->rel.ns==0) - { - /* Special case: relative time of this/today/now */ - fputs (_("today/this/now\n"),stderr); - return ; - } - -#define PRINT_REL_PART(x,name) \ - do { \ - if ( (pc->rel.x) != 0 ) \ - { \ - if (space) \ - fputc (' ',stderr); \ - fprintf (stderr,"%+ld %s", pc->rel.x, name); \ - space = 1; \ - } \ - } while (0) - - PRINT_REL_PART (year,"year(s)"); - PRINT_REL_PART (month,"month(s)"); - PRINT_REL_PART (day,"day(s)"); - PRINT_REL_PART (hour,"hour(s)"); - PRINT_REL_PART (minutes,"minutes"); - PRINT_REL_PART (seconds,"seconds"); - PRINT_REL_PART (ns,"nanoseconds"); - - fputc ('\n',stderr); -} - - - -%} - -/* We want a reentrant parser, even if the TZ manipulation and the calls to - localtime and gmtime are not reentrant. */ -%pure-parser -%parse-param { parser_control *pc } -%lex-param { parser_control *pc } - -/* This grammar has 31 shift/reduce conflicts. */ -%expect 31 - -%union -{ - long int intval; - textint textintval; - struct timespec timespec; - relative_time rel; -} - -%token tAGO -%token tDST - -%token tYEAR_UNIT tMONTH_UNIT tHOUR_UNIT tMINUTE_UNIT tSEC_UNIT -%token tDAY_UNIT tDAY_SHIFT - -%token tDAY tDAYZONE tLOCAL_ZONE tMERIDIAN -%token tMONTH tORDINAL tZONE - -%token tSNUMBER tUNUMBER -%token tSDECIMAL_NUMBER tUDECIMAL_NUMBER - -%type o_colon_minutes -%type seconds signed_seconds unsigned_seconds - -%type relunit relunit_snumber dayshift - -%% - -spec: - timespec - | items - ; - -timespec: - '@' seconds - { - pc->seconds = $2; - pc->timespec_seen = true; - debug_print_current_time (_("number of seconds"), pc); - } - ; - -items: - /* empty */ - | items item - ; - -item: - datetime - { - pc->times_seen++; pc->dates_seen++; - debug_print_current_time (_("datetime"), pc); - } - | time - { - pc->times_seen++; - debug_print_current_time (_("time"), pc); - } - | local_zone - { - pc->local_zones_seen++; - debug_print_current_time (_("local_zone"), pc); - } - | zone - { - pc->zones_seen++; - debug_print_current_time (_("zone"), pc); - } - | date - { - pc->dates_seen++; - debug_print_current_time (_("date"), pc); - } - | day - { - pc->days_seen++; - debug_print_current_time (_("day"), pc); - } - | rel - { - debug_print_relative_time (_("relative"), pc); - } - | number - { - debug_print_relative_time (_("number"), pc); - } - | hybrid - { - debug_print_relative_time (_("hybrid"), pc); - } - ; - -datetime: - iso_8601_datetime - ; - -iso_8601_datetime: - iso_8601_date 'T' iso_8601_time - ; - -time: - tUNUMBER tMERIDIAN - { - set_hhmmss (pc, $1.value, 0, 0, 0); - pc->meridian = $2; - } - | tUNUMBER ':' tUNUMBER tMERIDIAN - { - set_hhmmss (pc, $1.value, $3.value, 0, 0); - pc->meridian = $4; - } - | tUNUMBER ':' tUNUMBER ':' unsigned_seconds tMERIDIAN - { - set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); - pc->meridian = $6; - } - | iso_8601_time - ; - -iso_8601_time: - tUNUMBER zone_offset - { - set_hhmmss (pc, $1.value, 0, 0, 0); - pc->meridian = MER24; - } - | tUNUMBER ':' tUNUMBER o_zone_offset - { - set_hhmmss (pc, $1.value, $3.value, 0, 0); - pc->meridian = MER24; - } - | tUNUMBER ':' tUNUMBER ':' unsigned_seconds o_zone_offset - { - set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); - pc->meridian = MER24; - } - ; - -o_zone_offset: - /* empty */ - | zone_offset - ; - -zone_offset: - tSNUMBER o_colon_minutes - { - pc->zones_seen++; - pc->time_zone = time_zone_hhmm (pc, $1, $2); - } - ; - -local_zone: - tLOCAL_ZONE - { - pc->local_isdst = $1; - pc->dsts_seen += (0 < $1); - } - | tLOCAL_ZONE tDST - { - pc->local_isdst = 1; - pc->dsts_seen += (0 < $1) + 1; - } - ; - -/* Note 'T' is a special case, as it is used as the separator in ISO - 8601 date and time of day representation. */ -zone: - tZONE - { pc->time_zone = $1; } - | 'T' - { pc->time_zone = HOUR(7); } - | tZONE relunit_snumber - { pc->time_zone = $1; - apply_relative_time (pc, $2, 1); } - | 'T' relunit_snumber - { pc->time_zone = HOUR(7); - apply_relative_time (pc, $2, 1); } - | tZONE tSNUMBER o_colon_minutes - { pc->time_zone = $1 + time_zone_hhmm (pc, $2, $3); } - | tDAYZONE - { pc->time_zone = $1 + 60; } - | tZONE tDST - { pc->time_zone = $1 + 60; } - ; - -day: - tDAY - { - pc->day_ordinal = 0; - pc->day_number = $1; - } - | tDAY ',' - { - pc->day_ordinal = 0; - pc->day_number = $1; - } - | tORDINAL tDAY - { - pc->day_ordinal = $1; - pc->day_number = $2; - pc->debug_ordinal_day_seen = true; - } - | tUNUMBER tDAY - { - pc->day_ordinal = $1.value; - pc->day_number = $2; - pc->debug_ordinal_day_seen = true; - } - ; - -date: - tUNUMBER '/' tUNUMBER - { - pc->month = $1.value; - pc->day = $3.value; - } - | tUNUMBER '/' tUNUMBER '/' tUNUMBER - { - /* Interpret as YYYY/MM/DD if the first value has 4 or more digits, - otherwise as MM/DD/YY. - The goal in recognizing YYYY/MM/DD is solely to support legacy - machine-generated dates like those in an RCS log listing. If - you want portability, use the ISO 8601 format. */ - if (4 <= $1.digits) - { - if (pc->parse_datetime_debug) - dbg_printf (_("warning: value %ld has %"PRIuMAX" digits. " \ - "Assuming YYYY/MM/DD\n"), $1.value, $1.digits); - - pc->year = $1; - pc->month = $3.value; - pc->day = $5.value; - } - else - { - if (pc->parse_datetime_debug) - dbg_printf (_("warning: value %ld has less than 4 digits. " \ - "Assuming MM/DD/YY[YY]\n"), $1.value); - - pc->month = $1.value; - pc->day = $3.value; - pc->year = $5; - } - } - | tUNUMBER tMONTH tSNUMBER - { - /* e.g. 17-JUN-1992. */ - pc->day = $1.value; - pc->month = $2; - pc->year.value = -$3.value; - pc->year.digits = $3.digits; - } - | tMONTH tSNUMBER tSNUMBER - { - /* e.g. JUN-17-1992. */ - pc->month = $1; - pc->day = -$2.value; - pc->year.value = -$3.value; - pc->year.digits = $3.digits; - } - | tMONTH tUNUMBER - { - pc->month = $1; - pc->day = $2.value; - } - | tMONTH tUNUMBER ',' tUNUMBER - { - pc->month = $1; - pc->day = $2.value; - pc->year = $4; - } - | tUNUMBER tMONTH - { - pc->day = $1.value; - pc->month = $2; - } - | tUNUMBER tMONTH tUNUMBER - { - pc->day = $1.value; - pc->month = $2; - pc->year = $3; - } - | iso_8601_date - ; - -iso_8601_date: - tUNUMBER tSNUMBER tSNUMBER - { - /* ISO 8601 format. YYYY-MM-DD. */ - pc->year = $1; - pc->month = -$2.value; - pc->day = -$3.value; - } - ; - -rel: - relunit tAGO - { apply_relative_time (pc, $1, $2); } - | relunit - { apply_relative_time (pc, $1, 1); } - | dayshift - { apply_relative_time (pc, $1, 1); } - ; - -relunit: - tORDINAL tYEAR_UNIT - { $$ = RELATIVE_TIME_0; $$.year = $1; } - | tUNUMBER tYEAR_UNIT - { $$ = RELATIVE_TIME_0; $$.year = $1.value; } - | tYEAR_UNIT - { $$ = RELATIVE_TIME_0; $$.year = 1; } - | tORDINAL tMONTH_UNIT - { $$ = RELATIVE_TIME_0; $$.month = $1; } - | tUNUMBER tMONTH_UNIT - { $$ = RELATIVE_TIME_0; $$.month = $1.value; } - | tMONTH_UNIT - { $$ = RELATIVE_TIME_0; $$.month = 1; } - | tORDINAL tDAY_UNIT - { $$ = RELATIVE_TIME_0; $$.day = $1 * $2; } - | tUNUMBER tDAY_UNIT - { $$ = RELATIVE_TIME_0; $$.day = $1.value * $2; } - | tDAY_UNIT - { $$ = RELATIVE_TIME_0; $$.day = $1; } - | tORDINAL tHOUR_UNIT - { $$ = RELATIVE_TIME_0; $$.hour = $1; } - | tUNUMBER tHOUR_UNIT - { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } - | tHOUR_UNIT - { $$ = RELATIVE_TIME_0; $$.hour = 1; } - | tORDINAL tMINUTE_UNIT - { $$ = RELATIVE_TIME_0; $$.minutes = $1; } - | tUNUMBER tMINUTE_UNIT - { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } - | tMINUTE_UNIT - { $$ = RELATIVE_TIME_0; $$.minutes = 1; } - | tORDINAL tSEC_UNIT - { $$ = RELATIVE_TIME_0; $$.seconds = $1; } - | tUNUMBER tSEC_UNIT - { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } - | tSDECIMAL_NUMBER tSEC_UNIT - { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } - | tUDECIMAL_NUMBER tSEC_UNIT - { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } - | tSEC_UNIT - { $$ = RELATIVE_TIME_0; $$.seconds = 1; } - | relunit_snumber - ; - -relunit_snumber: - tSNUMBER tYEAR_UNIT - { $$ = RELATIVE_TIME_0; $$.year = $1.value; } - | tSNUMBER tMONTH_UNIT - { $$ = RELATIVE_TIME_0; $$.month = $1.value; } - | tSNUMBER tDAY_UNIT - { $$ = RELATIVE_TIME_0; $$.day = $1.value * $2; } - | tSNUMBER tHOUR_UNIT - { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } - | tSNUMBER tMINUTE_UNIT - { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } - | tSNUMBER tSEC_UNIT - { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } - ; - -dayshift: - tDAY_SHIFT - { $$ = RELATIVE_TIME_0; $$.day = $1; } - ; - -seconds: signed_seconds | unsigned_seconds; - -signed_seconds: - tSDECIMAL_NUMBER - | tSNUMBER - { $$.tv_sec = $1.value; $$.tv_nsec = 0; } - ; - -unsigned_seconds: - tUDECIMAL_NUMBER - | tUNUMBER - { $$.tv_sec = $1.value; $$.tv_nsec = 0; } - ; - -number: - tUNUMBER - { digits_to_date_time (pc, $1); } - ; - -hybrid: - tUNUMBER relunit_snumber - { - /* Hybrid all-digit and relative offset, so that we accept e.g., - "YYYYMMDD +N days" as well as "YYYYMMDD N days". */ - digits_to_date_time (pc, $1); - apply_relative_time (pc, $2, 1); - } - ; - -o_colon_minutes: - /* empty */ - { $$ = -1; } - | ':' tUNUMBER - { $$ = $2.value; } - ; - -%% - -static table const meridian_table[] = -{ - { "AM", tMERIDIAN, MERam }, - { "A.M.", tMERIDIAN, MERam }, - { "PM", tMERIDIAN, MERpm }, - { "P.M.", tMERIDIAN, MERpm }, - { NULL, 0, 0 } -}; - -static table const dst_table[] = -{ - { "DST", tDST, 0 } -}; - -static table const month_and_day_table[] = -{ - { "JANUARY", tMONTH, 1 }, - { "FEBRUARY", tMONTH, 2 }, - { "MARCH", tMONTH, 3 }, - { "APRIL", tMONTH, 4 }, - { "MAY", tMONTH, 5 }, - { "JUNE", tMONTH, 6 }, - { "JULY", tMONTH, 7 }, - { "AUGUST", tMONTH, 8 }, - { "SEPTEMBER",tMONTH, 9 }, - { "SEPT", tMONTH, 9 }, - { "OCTOBER", tMONTH, 10 }, - { "NOVEMBER", tMONTH, 11 }, - { "DECEMBER", tMONTH, 12 }, - { "SUNDAY", tDAY, 0 }, - { "MONDAY", tDAY, 1 }, - { "TUESDAY", tDAY, 2 }, - { "TUES", tDAY, 2 }, - { "WEDNESDAY",tDAY, 3 }, - { "WEDNES", tDAY, 3 }, - { "THURSDAY", tDAY, 4 }, - { "THUR", tDAY, 4 }, - { "THURS", tDAY, 4 }, - { "FRIDAY", tDAY, 5 }, - { "SATURDAY", tDAY, 6 }, - { NULL, 0, 0 } -}; - -static table const time_units_table[] = -{ - { "YEAR", tYEAR_UNIT, 1 }, - { "MONTH", tMONTH_UNIT, 1 }, - { "FORTNIGHT",tDAY_UNIT, 14 }, - { "WEEK", tDAY_UNIT, 7 }, - { "DAY", tDAY_UNIT, 1 }, - { "HOUR", tHOUR_UNIT, 1 }, - { "MINUTE", tMINUTE_UNIT, 1 }, - { "MIN", tMINUTE_UNIT, 1 }, - { "SECOND", tSEC_UNIT, 1 }, - { "SEC", tSEC_UNIT, 1 }, - { NULL, 0, 0 } -}; - -/* Assorted relative-time words. */ -static table const relative_time_table[] = -{ - { "TOMORROW", tDAY_SHIFT, 1 }, - { "YESTERDAY",tDAY_SHIFT, -1 }, - { "TODAY", tDAY_SHIFT, 0 }, - { "NOW", tDAY_SHIFT, 0 }, - { "LAST", tORDINAL, -1 }, - { "THIS", tORDINAL, 0 }, - { "NEXT", tORDINAL, 1 }, - { "FIRST", tORDINAL, 1 }, -/*{ "SECOND", tORDINAL, 2 }, */ - { "THIRD", tORDINAL, 3 }, - { "FOURTH", tORDINAL, 4 }, - { "FIFTH", tORDINAL, 5 }, - { "SIXTH", tORDINAL, 6 }, - { "SEVENTH", tORDINAL, 7 }, - { "EIGHTH", tORDINAL, 8 }, - { "NINTH", tORDINAL, 9 }, - { "TENTH", tORDINAL, 10 }, - { "ELEVENTH", tORDINAL, 11 }, - { "TWELFTH", tORDINAL, 12 }, - { "AGO", tAGO, -1 }, - { "HENCE", tAGO, 1 }, - { NULL, 0, 0 } -}; - -/* The universal time zone table. These labels can be used even for - time stamps that would not otherwise be valid, e.g., GMT time - stamps in London during summer. */ -static table const universal_time_zone_table[] = -{ - { "GMT", tZONE, HOUR ( 0) }, /* Greenwich Mean */ - { "UT", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */ - { "UTC", tZONE, HOUR ( 0) }, - { NULL, 0, 0 } -}; - -/* The time zone table. This table is necessarily incomplete, as time - zone abbreviations are ambiguous; e.g. Australians interpret "EST" - as Eastern time in Australia, not as US Eastern Standard Time. - You cannot rely on parse_datetime to handle arbitrary time zone - abbreviations; use numeric abbreviations like "-0500" instead. */ -static table const time_zone_table[] = -{ - { "WET", tZONE, HOUR ( 0) }, /* Western European */ - { "WEST", tDAYZONE, HOUR ( 0) }, /* Western European Summer */ - { "BST", tDAYZONE, HOUR ( 0) }, /* British Summer */ - { "ART", tZONE, -HOUR ( 3) }, /* Argentina */ - { "BRT", tZONE, -HOUR ( 3) }, /* Brazil */ - { "BRST", tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */ - { "NST", tZONE, -(HOUR ( 3) + 30) }, /* Newfoundland Standard */ - { "NDT", tDAYZONE,-(HOUR ( 3) + 30) }, /* Newfoundland Daylight */ - { "AST", tZONE, -HOUR ( 4) }, /* Atlantic Standard */ - { "ADT", tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */ - { "CLT", tZONE, -HOUR ( 4) }, /* Chile */ - { "CLST", tDAYZONE, -HOUR ( 4) }, /* Chile Summer */ - { "EST", tZONE, -HOUR ( 5) }, /* Eastern Standard */ - { "EDT", tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */ - { "CST", tZONE, -HOUR ( 6) }, /* Central Standard */ - { "CDT", tDAYZONE, -HOUR ( 6) }, /* Central Daylight */ - { "MST", tZONE, -HOUR ( 7) }, /* Mountain Standard */ - { "MDT", tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */ - { "PST", tZONE, -HOUR ( 8) }, /* Pacific Standard */ - { "PDT", tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */ - { "AKST", tZONE, -HOUR ( 9) }, /* Alaska Standard */ - { "AKDT", tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */ - { "HST", tZONE, -HOUR (10) }, /* Hawaii Standard */ - { "HAST", tZONE, -HOUR (10) }, /* Hawaii-Aleutian Standard */ - { "HADT", tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */ - { "SST", tZONE, -HOUR (12) }, /* Samoa Standard */ - { "WAT", tZONE, HOUR ( 1) }, /* West Africa */ - { "CET", tZONE, HOUR ( 1) }, /* Central European */ - { "CEST", tDAYZONE, HOUR ( 1) }, /* Central European Summer */ - { "MET", tZONE, HOUR ( 1) }, /* Middle European */ - { "MEZ", tZONE, HOUR ( 1) }, /* Middle European */ - { "MEST", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ - { "MESZ", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ - { "EET", tZONE, HOUR ( 2) }, /* Eastern European */ - { "EEST", tDAYZONE, HOUR ( 2) }, /* Eastern European Summer */ - { "CAT", tZONE, HOUR ( 2) }, /* Central Africa */ - { "SAST", tZONE, HOUR ( 2) }, /* South Africa Standard */ - { "EAT", tZONE, HOUR ( 3) }, /* East Africa */ - { "MSK", tZONE, HOUR ( 3) }, /* Moscow */ - { "MSD", tDAYZONE, HOUR ( 3) }, /* Moscow Daylight */ - { "IST", tZONE, (HOUR ( 5) + 30) }, /* India Standard */ - { "SGT", tZONE, HOUR ( 8) }, /* Singapore */ - { "KST", tZONE, HOUR ( 9) }, /* Korea Standard */ - { "JST", tZONE, HOUR ( 9) }, /* Japan Standard */ - { "GST", tZONE, HOUR (10) }, /* Guam Standard */ - { "NZST", tZONE, HOUR (12) }, /* New Zealand Standard */ - { "NZDT", tDAYZONE, HOUR (12) }, /* New Zealand Daylight */ - { NULL, 0, 0 } -}; - -/* Military time zone table. - - Note 'T' is a special case, as it is used as the separator in ISO - 8601 date and time of day representation. */ -static table const military_table[] = -{ - { "A", tZONE, -HOUR ( 1) }, - { "B", tZONE, -HOUR ( 2) }, - { "C", tZONE, -HOUR ( 3) }, - { "D", tZONE, -HOUR ( 4) }, - { "E", tZONE, -HOUR ( 5) }, - { "F", tZONE, -HOUR ( 6) }, - { "G", tZONE, -HOUR ( 7) }, - { "H", tZONE, -HOUR ( 8) }, - { "I", tZONE, -HOUR ( 9) }, - { "K", tZONE, -HOUR (10) }, - { "L", tZONE, -HOUR (11) }, - { "M", tZONE, -HOUR (12) }, - { "N", tZONE, HOUR ( 1) }, - { "O", tZONE, HOUR ( 2) }, - { "P", tZONE, HOUR ( 3) }, - { "Q", tZONE, HOUR ( 4) }, - { "R", tZONE, HOUR ( 5) }, - { "S", tZONE, HOUR ( 6) }, - { "T", 'T', 0 }, - { "U", tZONE, HOUR ( 8) }, - { "V", tZONE, HOUR ( 9) }, - { "W", tZONE, HOUR (10) }, - { "X", tZONE, HOUR (11) }, - { "Y", tZONE, HOUR (12) }, - { "Z", tZONE, HOUR ( 0) }, - { NULL, 0, 0 } -}; - - - -/* Convert a time zone expressed as HH:MM into an integer count of - minutes. If MM is negative, then S is of the form HHMM and needs - to be picked apart; otherwise, S is of the form HH. As specified in - http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow - only valid TZ range, and consider first two digits as hours, if no - minutes specified. */ - -static long int -time_zone_hhmm (parser_control *pc, textint s, long int mm) -{ - long int n_minutes; - - /* If the length of S is 1 or 2 and no minutes are specified, - interpret it as a number of hours. */ - if (s.digits <= 2 && mm < 0) - s.value *= 100; - - if (mm < 0) - n_minutes = (s.value / 100) * 60 + s.value % 100; - else - n_minutes = s.value * 60 + (s.negative ? -mm : mm); - - /* If the absolute number of minutes is larger than 24 hours, - arrange to reject it by incrementing pc->zones_seen. Thus, - we allow only values in the range UTC-24:00 to UTC+24:00. */ - if (24 * 60 < abs (n_minutes)) - pc->zones_seen++; - - return n_minutes; -} - -static int -to_hour (long int hours, int meridian) -{ - switch (meridian) - { - default: /* Pacify GCC. */ - case MER24: - return 0 <= hours && hours < 24 ? hours : -1; - case MERam: - return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1; - case MERpm: - return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1; - } -} - -static long int -to_year (textint textyear, bool debug) -{ - long int year = textyear.value; - - if (year < 0) - year = -year; - - /* XPG4 suggests that years 00-68 map to 2000-2068, and - years 69-99 map to 1969-1999. */ - else if (textyear.digits == 2) - { - year += year < 69 ? 2000 : 1900; - if (debug) - dbg_printf (_("warning: adjusting year value %ld to %ld\n"), - textyear.value, year); - } - - return year; -} - -static table const * _GL_ATTRIBUTE_PURE -lookup_zone (parser_control const *pc, char const *name) -{ - table const *tp; - - for (tp = universal_time_zone_table; tp->name; tp++) - if (strcmp (name, tp->name) == 0) - return tp; - - /* Try local zone abbreviations before those in time_zone_table, as - the local ones are more likely to be right. */ - for (tp = pc->local_time_zone_table; tp->name; tp++) - if (strcmp (name, tp->name) == 0) - return tp; - - for (tp = time_zone_table; tp->name; tp++) - if (strcmp (name, tp->name) == 0) - return tp; - - return NULL; -} - -#if ! HAVE_TM_GMTOFF -/* Yield the difference between *A and *B, - measured in seconds, ignoring leap seconds. - The body of this function is taken directly from the GNU C Library; - see src/strftime.c. */ -static long int -tm_diff (struct tm const *a, struct tm const *b) -{ - /* Compute intervening leap days correctly even if year is negative. - Take care to avoid int overflow in leap day calculations. */ - int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); - int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); - int a100 = a4 / 25 - (a4 % 25 < 0); - int b100 = b4 / 25 - (b4 % 25 < 0); - int a400 = SHR (a100, 2); - int b400 = SHR (b100, 2); - int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); - long int ayear = a->tm_year; - long int years = ayear - b->tm_year; - long int days = (365 * years + intervening_leap_days - + (a->tm_yday - b->tm_yday)); - return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) - + (a->tm_min - b->tm_min)) - + (a->tm_sec - b->tm_sec)); -} -#endif /* ! HAVE_TM_GMTOFF */ - -static table const * -lookup_word (parser_control const *pc, char *word) -{ - char *p; - char *q; - size_t wordlen; - table const *tp; - bool period_found; - bool abbrev; - - /* Make it uppercase. */ - for (p = word; *p; p++) - { - unsigned char ch = *p; - *p = c_toupper (ch); - } - - for (tp = meridian_table; tp->name; tp++) - if (strcmp (word, tp->name) == 0) - return tp; - - /* See if we have an abbreviation for a month. */ - wordlen = strlen (word); - abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.'); - - for (tp = month_and_day_table; tp->name; tp++) - if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0) - return tp; - - if ((tp = lookup_zone (pc, word))) - return tp; - - if (strcmp (word, dst_table[0].name) == 0) - return dst_table; - - for (tp = time_units_table; tp->name; tp++) - if (strcmp (word, tp->name) == 0) - return tp; - - /* Strip off any plural and try the units table again. */ - if (word[wordlen - 1] == 'S') - { - word[wordlen - 1] = '\0'; - for (tp = time_units_table; tp->name; tp++) - if (strcmp (word, tp->name) == 0) - return tp; - word[wordlen - 1] = 'S'; /* For "this" in relative_time_table. */ - } - - for (tp = relative_time_table; tp->name; tp++) - if (strcmp (word, tp->name) == 0) - return tp; - - /* Military time zones. */ - if (wordlen == 1) - for (tp = military_table; tp->name; tp++) - if (word[0] == tp->name[0]) - return tp; - - /* Drop out any periods and try the time zone table again. */ - for (period_found = false, p = q = word; (*p = *q); q++) - if (*q == '.') - period_found = true; - else - p++; - if (period_found && (tp = lookup_zone (pc, word))) - return tp; - - return NULL; -} - -static int -yylex (union YYSTYPE *lvalp, parser_control *pc) -{ - unsigned char c; - size_t count; - - for (;;) - { - while (c = *pc->input, c_isspace (c)) - pc->input++; - - if (ISDIGIT (c) || c == '-' || c == '+') - { - char const *p; - int sign; - unsigned long int value; - if (c == '-' || c == '+') - { - sign = c == '-' ? -1 : 1; - while (c = *++pc->input, c_isspace (c)) - continue; - if (! ISDIGIT (c)) - /* skip the '-' sign */ - continue; - } - else - sign = 0; - p = pc->input; - for (value = 0; ; value *= 10) - { - unsigned long int value1 = value + (c - '0'); - if (value1 < value) - return '?'; - value = value1; - c = *++p; - if (! ISDIGIT (c)) - break; - if (ULONG_MAX / 10 < value) - return '?'; - } - if ((c == '.' || c == ',') && ISDIGIT (p[1])) - { - time_t s; - int ns; - int digits; - unsigned long int value1; - - /* Check for overflow when converting value to time_t. */ - if (sign < 0) - { - s = - value; - if (0 < s) - return '?'; - value1 = -s; - } - else - { - s = value; - if (s < 0) - return '?'; - value1 = s; - } - if (value != value1) - return '?'; - - /* Accumulate fraction, to ns precision. */ - p++; - ns = *p++ - '0'; - for (digits = 2; digits <= LOG10_BILLION; digits++) - { - ns *= 10; - if (ISDIGIT (*p)) - ns += *p++ - '0'; - } - - /* Skip excess digits, truncating toward -Infinity. */ - if (sign < 0) - for (; ISDIGIT (*p); p++) - if (*p != '0') - { - ns++; - break; - } - while (ISDIGIT (*p)) - p++; - - /* Adjust to the timespec convention, which is that - tv_nsec is always a positive offset even if tv_sec is - negative. */ - if (sign < 0 && ns) - { - s--; - if (! (s < 0)) - return '?'; - ns = BILLION - ns; - } - - lvalp->timespec.tv_sec = s; - lvalp->timespec.tv_nsec = ns; - pc->input = p; - return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER; - } - else - { - lvalp->textintval.negative = sign < 0; - if (sign < 0) - { - lvalp->textintval.value = - value; - if (0 < lvalp->textintval.value) - return '?'; - } - else - { - lvalp->textintval.value = value; - if (lvalp->textintval.value < 0) - return '?'; - } - lvalp->textintval.digits = p - pc->input; - pc->input = p; - return sign ? tSNUMBER : tUNUMBER; - } - } - - if (c_isalpha (c)) - { - char buff[20]; - char *p = buff; - table const *tp; - - do - { - if (p < buff + sizeof buff - 1) - *p++ = c; - c = *++pc->input; - } - while (c_isalpha (c) || c == '.'); - - *p = '\0'; - tp = lookup_word (pc, buff); - if (! tp) - { - if (pc->parse_datetime_debug) - dbg_printf (_("error: unknown word '%s'\n"), buff); - return '?'; - } - lvalp->intval = tp->value; - return tp->type; - } - - if (c != '(') - return to_uchar (*pc->input++); - - count = 0; - do - { - c = *pc->input++; - if (c == '\0') - return c; - if (c == '(') - count++; - else if (c == ')') - count--; - } - while (count != 0); - } -} - -/* Do nothing if the parser reports an error. */ -static int -yyerror (parser_control const *pc _GL_UNUSED, - char const *s _GL_UNUSED) -{ - return 0; -} - -/* If *TM0 is the old and *TM1 is the new value of a struct tm after - passing it to mktime, return true if it's OK that mktime returned T. - It's not OK if *TM0 has out-of-range members. */ - -static bool -mktime_ok (struct tm const *tm0, struct tm const *tm1, time_t t) -{ - if (t == (time_t) -1) - { - /* Guard against falsely reporting an error when parsing a time - stamp that happens to equal (time_t) -1, on a host that - supports such a time stamp. */ - tm1 = localtime (&t); - if (!tm1) - return false; - } - - return ! ((tm0->tm_sec ^ tm1->tm_sec) - | (tm0->tm_min ^ tm1->tm_min) - | (tm0->tm_hour ^ tm1->tm_hour) - | (tm0->tm_mday ^ tm1->tm_mday) - | (tm0->tm_mon ^ tm1->tm_mon) - | (tm0->tm_year ^ tm1->tm_year)); -} - -/* A reasonable upper bound for the size of ordinary TZ strings. - Use heap allocation if TZ's length exceeds this. */ -enum { TZBUFSIZE = 100 }; - -/* A reasonable upper bound for the buffer used in debug print outs. - see days_to_name(), debug_strftime() and debug_mktime_not_ok() */ -enum { DBGBUFSIZE = 100 }; - -/* Return a copy of TZ, stored in TZBUF if it fits, and heap-allocated - otherwise. */ -static char * -get_tz (char tzbuf[TZBUFSIZE]) -{ - char *tz = getenv ("TZ"); - if (tz) - { - size_t tzsize = strlen (tz) + 1; - tz = (tzsize <= TZBUFSIZE - ? memcpy (tzbuf, tz, tzsize) - : xmemdup (tz, tzsize)); - } - return tz; -} - -/* debugging: format a 'struct tm' into a buffer, taking the parser's - timezone information into account (if pc!=NULL). */ -static const char* -debug_strfdatetime (const struct tm *tm, const parser_control *pc, - char* /*output*/ buf, size_t n) -{ - /* TODO: - 1. find an optimal way to print date string in a clear and unambiguous - format. Currently, always add '(Y-M-D)' prefix. - Consider '2016y01m10d' or 'year(2016) month(01) day(10)'. - - If the user needs debug printing, it means he/she already having - issues with the parsing - better to avoid formats that could - be mis-interpreted (e.g. just YYYY-MM-DD). - - 2. Can strftime be used instead? - depends if it is portable and can print invalid dates on all systems. - - 3. Print timezone information ? - - 4. Print DST information ? - - 5. Print nanosecond information ? - - NOTE: - Printed date/time values might not be valid, e.g. '2016-02-31' - or '2016-19-2016' . These are the values as parsed from the user - string, before validation. - */ - int m = nstrftime (buf, n, "(Y-M-D) %Y-%m-%d %H:%M:%S", tm, 0, 0); - - /* if parser_control information was provided (for timezone), - and there's enough space in the buffer - add timezone info */ - if (pc != NULL && ((n-m)>0)) - { - const long int tz = (pc->zones_seen || pc->local_zones_seen) - ? pc->time_zone - : pc->debug_default_input_timezone; - snprintf (&buf[m],n-m," TZ=%+03d:%02d", (int)(tz/60), abs ((int)tz)%60); - } - return buf; -} - -static const char* -debug_strfdate (const struct tm *tm, char* /*output*/ buf, size_t n) -{ - snprintf (buf,n,"(Y-M-D) %04d-%02d-%02d", - tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday); - return buf; -} - -static const char* -debug_strftime (const struct tm *tm, char* /*output*/ buf, size_t n) -{ - snprintf (buf,n,"%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec); - return buf; -} - -/* If 'mktime_ok()' failed, display the failed time values, - and provide possible hints. Example output: - - date: error: invalid date/time value: - date: user provided time: '(Y-M-D) 2006-04-02 02:45:00' - date: normalized time: '(Y-M-D) 2006-04-02 03:45:00' - date: __ - date: possible reasons: - date: non-existing due to daylight-saving time; - date: numeric values overflow; - date: missing timezone; - */ -static void -debug_mktime_not_ok (struct tm const *tm0, struct tm const *tm1, - const parser_control *pc, bool time_zone_seen) -{ - /* TODO: handle t==-1 (as in 'mktime_ok') */ - char tmp[DBGBUFSIZE]; - int i; - const bool eq_sec = (tm0->tm_sec == tm1->tm_sec); - const bool eq_min = (tm0->tm_min == tm1->tm_min); - const bool eq_hour = (tm0->tm_hour == tm1->tm_hour); - const bool eq_mday = (tm0->tm_mday == tm1->tm_mday); - const bool eq_month = (tm0->tm_mon == tm1->tm_mon); - const bool eq_year = (tm0->tm_year == tm1->tm_year); - - const bool dst_shift = eq_sec && eq_min && !eq_hour - && eq_mday && eq_month && eq_year; - - if (!pc->parse_datetime_debug) - return; - - dbg_printf (_("error: invalid date/time value:\n")); - dbg_printf (_(" user provided time: '%s'\n"), - debug_strfdatetime (tm0, pc, tmp, sizeof (tmp))); - dbg_printf (_(" normalized time: '%s'\n"), - debug_strfdatetime (tm1, pc, tmp, sizeof (tmp))); - /* NOTEs: the format must be aligned with debug_strfdatetime() and the two - DEBUG statements above. this string is not translated. */ - i = snprintf (tmp, sizeof(tmp), - " %4s %2s %2s %2s %2s %2s", - eq_year?"":"----", eq_month?"":"--", eq_mday?"":"--", - eq_hour?"":"--", eq_min?"":"--", eq_sec?"":"--"); - /* Trim trailing whitespace */ - if ((i>0) && (i0) && (tmp[i-1]==' ')) - --i; - tmp[i] = '\0'; - } - dbg_printf ("%s\n", tmp); - - dbg_printf (_(" possible reasons:\n")); - if (dst_shift) - dbg_printf (_(" non-existing due to daylight-saving time;\n")); - if (!eq_mday && !eq_month) - dbg_printf (_(" invalid day/month combination;\n")); - dbg_printf (_(" numeric values overflow;\n")); - dbg_printf (" %s\n",time_zone_seen?_("incorrect timezone") - :_("missing timezone")); -} - - -/* Returns the effective local timezone, in minutes. */ -static long int -get_effective_timezone (void) -{ - /* TODO: check for failures */ - const time_t z = 0; - time_t lz ; - struct tm *ltm; - ltm = localtime (&z); - lz = timegm (ltm)/60; - return (long int)lz; -} - -/* The original interface: run with debug=false */ -bool -parse_datetime (struct timespec *result, char const *p, - struct timespec const *now) -{ - return parse_datetime2 (result, p, now, 0); -} - -/* Parse a date/time string, storing the resulting time value into *RESULT. - The string itself is pointed to by P. Return true if successful. - P can be an incomplete or relative time specification; if so, use - *NOW as the basis for the returned time. */ -bool -parse_datetime2 (struct timespec *result, char const *p, - struct timespec const *now, unsigned int flags) -{ - time_t Start; - long int Start_ns; - struct tm const *tmp; - struct tm tm; - struct tm tm0; - parser_control pc; - struct timespec gettime_buffer; - unsigned char c; - bool tz_was_altered = false; - char *tz0 = NULL; - char tz0buf[TZBUFSIZE]; - bool ok = true; - char dbg_ord[DBGBUFSIZE]; - char dbg_tm[DBGBUFSIZE]; - char const *input_sentinel = p + strlen (p); - - if (! now) - { - gettime (&gettime_buffer); - now = &gettime_buffer; - } - - Start = now->tv_sec; - Start_ns = now->tv_nsec; - - tmp = localtime (&now->tv_sec); - if (! tmp) - return false; - - while (c = *p, c_isspace (c)) - p++; - - if (strncmp (p, "TZ=\"", 4) == 0) - { - char const *tzbase = p + 4; - size_t tzsize = 1; - char const *s; - - for (s = tzbase; *s; s++, tzsize++) - if (*s == '\\') - { - s++; - if (! (*s == '\\' || *s == '"')) - break; - } - else if (*s == '"') - { - char *z; - char *tz1; - char tz1buf[TZBUFSIZE]; - bool large_tz = TZBUFSIZE < tzsize; - bool setenv_ok; - tz0 = get_tz (tz0buf); - z = tz1 = large_tz ? xmalloc (tzsize) : tz1buf; - for (s = tzbase; *s != '"'; s++) - *z++ = *(s += *s == '\\'); - *z = '\0'; - setenv_ok = setenv ("TZ", tz1, 1) == 0; - if (large_tz) - free (tz1); - if (!setenv_ok) - goto fail; - tz_was_altered = true; - - p = s + 1; - while (c = *p, c_isspace (c)) - p++; - - break; - } - } - - /* As documented, be careful to treat the empty string just like - a date string of "0". Without this, an empty string would be - declared invalid when parsed during a DST transition. */ - if (*p == '\0') - p = "0"; - - pc.input = p; - pc.year.value = tmp->tm_year; - pc.year.value += TM_YEAR_BASE; - pc.year.digits = 0; - pc.month = tmp->tm_mon + 1; - pc.day = tmp->tm_mday; - pc.hour = tmp->tm_hour; - pc.minutes = tmp->tm_min; - pc.seconds.tv_sec = tmp->tm_sec; - pc.seconds.tv_nsec = Start_ns; - tm.tm_isdst = tmp->tm_isdst; - - pc.meridian = MER24; - pc.rel = RELATIVE_TIME_0; - pc.timespec_seen = false; - pc.rels_seen = false; - pc.dates_seen = 0; - pc.days_seen = 0; - pc.times_seen = 0; - pc.local_zones_seen = 0; - pc.dsts_seen = 0; - pc.zones_seen = 0; - pc.parse_datetime_debug = (flags & PARSE_DATETIME_DEBUG)!=0; - pc.debug_dates_seen = 0; - pc.debug_days_seen = 0; - pc.debug_times_seen = 0; - pc.debug_local_zones_seen = 0; - pc.debug_dsts_seen = 0; - pc.debug_zones_seen = 0; - pc.debug_ordinal_day_seen = false; - pc.debug_default_input_timezone = 0; - -#if HAVE_STRUCT_TM_TM_ZONE - pc.local_time_zone_table[0].name = tmp->tm_zone; - pc.local_time_zone_table[0].type = tLOCAL_ZONE; - pc.local_time_zone_table[0].value = tmp->tm_isdst; - pc.local_time_zone_table[1].name = NULL; - - /* Probe the names used in the next three calendar quarters, looking - for a tm_isdst different from the one we already have. */ - { - int quarter; - for (quarter = 1; quarter <= 3; quarter++) - { - time_t probe = Start + quarter * (90 * 24 * 60 * 60); - struct tm const *probe_tm = localtime (&probe); - if (probe_tm && probe_tm->tm_zone - && probe_tm->tm_isdst != pc.local_time_zone_table[0].value) - { - { - pc.local_time_zone_table[1].name = probe_tm->tm_zone; - pc.local_time_zone_table[1].type = tLOCAL_ZONE; - pc.local_time_zone_table[1].value = probe_tm->tm_isdst; - pc.local_time_zone_table[2].name = NULL; - } - break; - } - } - } -#else -#if HAVE_TZNAME - { -# if !HAVE_DECL_TZNAME - extern char *tzname[]; -# endif - int i; - for (i = 0; i < 2; i++) - { - pc.local_time_zone_table[i].name = tzname[i]; - pc.local_time_zone_table[i].type = tLOCAL_ZONE; - pc.local_time_zone_table[i].value = i; - } - pc.local_time_zone_table[i].name = NULL; - } -#else - pc.local_time_zone_table[0].name = NULL; -#endif -#endif - - if (pc.local_time_zone_table[0].name && pc.local_time_zone_table[1].name - && ! strcmp (pc.local_time_zone_table[0].name, - pc.local_time_zone_table[1].name)) - { - /* This locale uses the same abbreviation for standard and - daylight times. So if we see that abbreviation, we don't - know whether it's daylight time. */ - pc.local_time_zone_table[0].value = -1; - pc.local_time_zone_table[1].name = NULL; - } - - pc.debug_default_input_timezone = get_effective_timezone (); - - if (yyparse (&pc) != 0) - { - if (pc.parse_datetime_debug) - { - if (input_sentinel <= pc.input) - dbg_printf (_("error: parsing failed\n"), pc.input); - else - { - dbg_printf (_("error: parsing failed, stopped at '%s'\n"), - pc.input); - } - } - goto fail; - } - - /* determine effective timezone source */ - if (pc.parse_datetime_debug) - { - long int tz = pc.debug_default_input_timezone; - const char* tz_env; - const char* tz_src; - - if (pc.timespec_seen) - { - tz = 0 ; - tz_src = _("'@timespec' - always UTC0"); - } - else if (pc.local_zones_seen || pc.zones_seen) - { - tz = pc.time_zone; - tz_src = _("parsed date/time string"); - } - else if ((tz_env = getenv("TZ"))) - { - if (tz_was_altered) - { - snprintf (dbg_tm, sizeof(dbg_tm), _("TZ=\"%s\" in date string"), - tz_env); - tz_src = dbg_tm; - } - else if (STREQ(tz_env,"UTC0")) - { - /* Special case: using 'date -u' simply set TZ=UTC0 */ - tz_src = _("TZ=UTC0 environment value or -u"); - } - else - { - snprintf (dbg_tm, sizeof(dbg_tm), - _("TZ=\"%s\" environment value"), tz_env); - tz_src = dbg_tm; - } - } - else - { - tz_src = _("system default"); - } - - if (pc.parse_datetime_debug) - dbg_printf (_("input timezone: %+03d:%02d (set from %s)\n"), - (int)(tz/60), abs ((int)tz)%60, tz_src); - - } - - if (pc.timespec_seen) - *result = pc.seconds; - else - { - if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen - | (pc.local_zones_seen + pc.zones_seen))) - { - if (pc.parse_datetime_debug) - { - if (pc.times_seen > 1) - dbg_printf ("error: seen multiple time parts\n"); - if (pc.dates_seen > 1) - dbg_printf ("error: seen multiple date parts\n"); - if (pc.days_seen > 1) - dbg_printf ("error: seen multiple days parts\n"); - if (pc.dsts_seen > 1) - dbg_printf ("error: seen multiple daylight-saving parts\n"); - if ( (pc.local_zones_seen + pc.zones_seen) > 1) - dbg_printf ("error: seen multiple time-zone parts\n"); - } - goto fail; - } - - tm.tm_year = to_year (pc.year, pc.parse_datetime_debug) - TM_YEAR_BASE; - tm.tm_mon = pc.month - 1; - tm.tm_mday = pc.day; - if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen)) - { - tm.tm_hour = to_hour (pc.hour, pc.meridian); - if (tm.tm_hour < 0) - { - const char* mrd = (pc.meridian==MERam)?"am": - (pc.meridian==MERpm)?"pm":""; - if (pc.parse_datetime_debug) - dbg_printf (_("error: invalid hour %ld%s\n"), pc.hour, mrd); - - goto fail; - } - tm.tm_min = pc.minutes; - tm.tm_sec = pc.seconds.tv_sec; - if (pc.parse_datetime_debug) - dbg_printf (_("using %s time as starting value: '%s'\n"), - (pc.times_seen)?_("specified"):_("current"), - debug_strftime (&tm,dbg_tm,sizeof (dbg_tm))); - } - else - { - tm.tm_hour = tm.tm_min = tm.tm_sec = 0; - pc.seconds.tv_nsec = 0; - if (pc.parse_datetime_debug) - dbg_printf ("warning: using midnight as starting time: 00:00:00\n"); - } - - /* Let mktime deduce tm_isdst if we have an absolute time stamp. */ - if (pc.dates_seen | pc.days_seen | pc.times_seen) - tm.tm_isdst = -1; - - /* But if the input explicitly specifies local time with or without - DST, give mktime that information. */ - if (pc.local_zones_seen) - tm.tm_isdst = pc.local_isdst; - - tm0 = tm; - - Start = mktime (&tm); - - if (! mktime_ok (&tm0, &tm, Start)) - { - if (! pc.zones_seen) - { - debug_mktime_not_ok (&tm0, &tm, &pc, pc.zones_seen); - - goto fail; - } - else - { - /* Guard against falsely reporting errors near the time_t - boundaries when parsing times in other time zones. For - example, suppose the input string "1969-12-31 23:00:00 -0100", - the current time zone is 8 hours ahead of UTC, and the min - time_t value is 1970-01-01 00:00:00 UTC. Then the min - localtime value is 1970-01-01 08:00:00, and mktime will - therefore fail on 1969-12-31 23:00:00. To work around the - problem, set the time zone to 1 hour behind UTC temporarily - by setting TZ="XXX1:00" and try mktime again. */ - - long int time_zone = pc.time_zone; - long int abs_time_zone = time_zone < 0 ? - time_zone : time_zone; - long int abs_time_zone_hour = abs_time_zone / 60; - int abs_time_zone_min = abs_time_zone % 60; - char tz1buf[sizeof "XXX+0:00" + TYPE_WIDTH (pc.time_zone) / 3]; - if (!tz_was_altered) - tz0 = get_tz (tz0buf); - sprintf (tz1buf, "XXX%s%ld:%02d", &"-"[time_zone < 0], - abs_time_zone_hour, abs_time_zone_min); - if (setenv ("TZ", tz1buf, 1) != 0) - { - /* TODO: was warn () + print errno? */ - if (pc.parse_datetime_debug) - dbg_printf (_("error: setenv('TZ','%s') failed\n"), tz1buf); - - goto fail; - } - tz_was_altered = true; - tm = tm0; - Start = mktime (&tm); - if (! mktime_ok (&tm0, &tm, Start)) - { - debug_mktime_not_ok (&tm0, &tm, &pc, pc.zones_seen); - - goto fail; - } - } - } - - if (pc.days_seen && ! pc.dates_seen) - { - tm.tm_mday += ((pc.day_number - tm.tm_wday + 7) % 7 - + 7 * (pc.day_ordinal - - (0 < pc.day_ordinal - && tm.tm_wday != pc.day_number))); - tm.tm_isdst = -1; - Start = mktime (&tm); - if (Start == (time_t) -1) - { - if (pc.parse_datetime_debug) - dbg_printf (_("error: day '%s' (day ordinal=%ld number=%d) " \ - "resulted in an invalid date: '%s'\n"), - str_days (&pc,dbg_ord,sizeof (dbg_ord)), - pc.day_ordinal,pc.day_number, - debug_strfdatetime (&tm, &pc, dbg_tm, - sizeof (dbg_tm))); - - goto fail; - } - - if (pc.parse_datetime_debug) - dbg_printf (_("new start date: '%s' is '%s'\n"), - str_days (&pc,dbg_ord,sizeof (dbg_ord)), - debug_strfdatetime (&tm, &pc, dbg_tm,sizeof (dbg_tm))); - - } - - if (pc.parse_datetime_debug) - { - if (!pc.dates_seen && !pc.days_seen) - dbg_printf (_("using current date as starting value: '%s'\n"), - debug_strfdate (&tm,dbg_tm,sizeof (dbg_tm))); - - if (pc.days_seen && pc.dates_seen) - dbg_printf (_("warning: day (%s) ignored when explicit dates " \ - "are given\n"), - str_days (&pc,dbg_ord,sizeof (dbg_ord))); - - dbg_printf (_("starting date/time: '%s'\n"), - debug_strfdatetime (&tm, &pc, dbg_tm,sizeof (dbg_tm))); - } - - /* Add relative date. */ - if (pc.rel.year | pc.rel.month | pc.rel.day) - { - if (pc.parse_datetime_debug) - { - if ((pc.rel.year != 0 || pc.rel.month !=0) && tm.tm_mday==1) - dbg_printf (_("warning: when adding relative months/years, " \ - "it is recommended to specify the 15th of the " \ - "months\n")); - - if (pc.rel.day != 0 && tm.tm_hour==0) - dbg_printf (_("warning: when adding relative days, " \ - "it is recommended to specify 12:00pm\n")); - } - - int year = tm.tm_year + pc.rel.year; - int month = tm.tm_mon + pc.rel.month; - int day = tm.tm_mday + pc.rel.day; - if (((year < tm.tm_year) ^ (pc.rel.year < 0)) - | ((month < tm.tm_mon) ^ (pc.rel.month < 0)) - | ((day < tm.tm_mday) ^ (pc.rel.day < 0))) - { - /* TODO: what is the actual error? int-value wrap-around? */ - if (pc.parse_datetime_debug) - dbg_printf (_("error: %s:%d\n"), __FILE__,__LINE__); - - goto fail; - } - tm.tm_year = year; - tm.tm_mon = month; - tm.tm_mday = day; - tm.tm_hour = tm0.tm_hour; - tm.tm_min = tm0.tm_min; - tm.tm_sec = tm0.tm_sec; - tm.tm_isdst = tm0.tm_isdst; - Start = mktime (&tm); - if (Start == (time_t) -1) - { - if (pc.parse_datetime_debug) - dbg_printf(_("error: adding relative date resulted " \ - "in an invalid date: '%s'\n"), - debug_strfdatetime (&tm, &pc, dbg_tm, - sizeof (dbg_tm))); - - goto fail; - } - - if (pc.parse_datetime_debug) - { - dbg_printf (_("after date adjustment " \ - "(%+ld years, %+ld months, %+ld days),\n"), - pc.rel.year, pc.rel.month, pc.rel.day); - dbg_printf (_(" new date/time = '%s'\n"), - debug_strfdatetime (&tm, &pc, dbg_tm, - sizeof (dbg_tm))); - } - - } - - /* The only "output" of this if-block is an updated Start value, - so this block must follow others that clobber Start. */ - if (pc.zones_seen) - { - long int delta = pc.time_zone * 60; - time_t t1; -#ifdef HAVE_TM_GMTOFF - delta -= tm.tm_gmtoff; -#else - time_t t = Start; - struct tm const *gmt = gmtime (&t); - if (! gmt) - { - /* TODO: use 'warn(3)' + print errno ? */ - if (pc.parse_datetime_debug) - dbg_printf (_("error: gmtime failed for t=%ld\n"),t); - - goto fail; - } - delta -= tm_diff (&tm, gmt); -#endif - t1 = Start - delta; - if ((Start < t1) != (delta < 0)) - { - if (pc.parse_datetime_debug) - dbg_printf (_("error: timezone %ld caused time_t overflow\n"), - pc.time_zone); - - goto fail; /* time_t overflow */ - } - Start = t1; - } - - if (pc.parse_datetime_debug) - dbg_printf (_("'%s' = %ld epoch-seconds\n"), - debug_strfdatetime (&tm, &pc, dbg_tm, sizeof (dbg_tm)), - Start); - - /* Add relative hours, minutes, and seconds. On hosts that support - leap seconds, ignore the possibility of leap seconds; e.g., - "+ 10 minutes" adds 600 seconds, even if one of them is a - leap second. Typically this is not what the user wants, but it's - too hard to do it the other way, because the time zone indicator - must be applied before relative times, and if mktime is applied - again the time zone will be lost. */ - { - long int sum_ns = pc.seconds.tv_nsec + pc.rel.ns; - long int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION; - time_t t0 = Start; - long int d1 = 60 * 60 * pc.rel.hour; - time_t t1 = t0 + d1; - long int d2 = 60 * pc.rel.minutes; - time_t t2 = t1 + d2; - long_time_t d3 = pc.rel.seconds; - long_time_t t3 = t2 + d3; - long int d4 = (sum_ns - normalized_ns) / BILLION; - long_time_t t4 = t3 + d4; - time_t t5 = t4; - - if ((d1 / (60 * 60) ^ pc.rel.hour) - | (d2 / 60 ^ pc.rel.minutes) - | ((t1 < t0) ^ (d1 < 0)) - | ((t2 < t1) ^ (d2 < 0)) - | ((t3 < t2) ^ (d3 < 0)) - | ((t4 < t3) ^ (d4 < 0)) - | (t5 != t4)) - { - if (pc.parse_datetime_debug) - dbg_printf (_("error: adding relative time caused an " \ - "overflow\n")); - - goto fail; - } - - if (pc.parse_datetime_debug - && (pc.rel.hour | pc.rel.minutes | pc.rel.seconds | pc.rel.ns)) - { - dbg_printf (_("after time adjustment (%+ld hours, " \ - "%+ld minutes, %+ld seconds, %+ld ns),\n"), - pc.rel.hour,pc.rel.minutes,pc.rel.seconds,pc.rel.ns); - dbg_printf (_(" new time = %ld epoch-seconds\n"),t5); - } - - result->tv_sec = t5; - result->tv_nsec = normalized_ns; - } - } - - goto done; - - fail: - ok = false; - done: - if (tz_was_altered) - ok &= (tz0 ? setenv ("TZ", tz0, 1) : unsetenv ("TZ")) == 0; - if (tz0 != tz0buf) - free (tz0); - - if (ok && pc.parse_datetime_debug) - { - /* print local timezone AFTER restoring TZ (if tz_was_altered)*/ - const long int otz = get_effective_timezone (); - const char* tz_src; - const char* tz_env; - - if ((tz_env = getenv("TZ"))) - { - /* Special case: using 'date -u' simply set TZ=UTC0 */ - if (STREQ(tz_env,"UTC0")) - { - tz_src = _("TZ=UTC0 environment value or -u"); - } - else - { - snprintf (dbg_tm, sizeof(dbg_tm), - _("TZ=\"%s\" environment value"), tz_env); - tz_src = dbg_tm; - } - } - else - { - tz_src = _("system default"); - } - - if (pc.parse_datetime_debug) - { - dbg_printf (_("output timezone: %+03d:%02d (set from %s)\n"), - (int)(otz/60), abs ((int)otz)%60, tz_src); - - - dbg_printf (_("final: %ld.%09ld (epoch-seconds)\n"), - result->tv_sec,result->tv_nsec); - - struct tm const *gmt = gmtime (&result->tv_sec); - dbg_printf (_("final: %s (UTC0)\n"), - debug_strfdatetime (gmt, NULL, dbg_tm, sizeof (dbg_tm))); - struct tm const *lmt = localtime (&result->tv_sec); - dbg_printf (_("final: %s (output timezone TZ=%+03d:%02d)\n"), - debug_strfdatetime (lmt, NULL, dbg_tm, sizeof (dbg_tm)), - (int)(otz/60), abs ((int)otz)%60); - } - } - - return ok; -} - -#if TEST - -int -main (int ac, char **av) -{ - char buff[BUFSIZ]; - - printf ("Enter date, or blank line to exit.\n\t> "); - fflush (stdout); - - buff[BUFSIZ - 1] = '\0'; - while (fgets (buff, BUFSIZ - 1, stdin) && buff[0]) - { - struct timespec d; - struct tm const *tm; - if (! parse_datetime (&d, buff, NULL)) - printf ("Bad format - couldn't convert.\n"); - else if (! (tm = localtime (&d.tv_sec))) - { - long int sec = d.tv_sec; - printf ("localtime (%ld) failed\n", sec); - } - else - { - int ns = d.tv_nsec; - printf ("%04ld-%02d-%02d %02d:%02d:%02d.%09d\n", - tm->tm_year + 1900L, tm->tm_mon + 1, tm->tm_mday, - tm->tm_hour, tm->tm_min, tm->tm_sec, ns); - } - printf ("\t> "); - fflush (stdout); - } - return 0; -} -#endif /* TEST */ diff --git a/src/gl/printf-args.c b/src/gl/printf-args.c deleted file mode 100644 index cfaed994a1..0000000000 --- a/src/gl/printf-args.c +++ /dev/null @@ -1,187 +0,0 @@ -/* Decomposed printf argument list. - Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -/* This file can be parametrized with the following macros: - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. - PRINTF_FETCHARGS Name of the function to be defined. - STATIC Set to 'static' to declare the function static. */ - -#ifndef PRINTF_FETCHARGS -# include -#endif - -/* Specification. */ -#ifndef PRINTF_FETCHARGS -# include "printf-args.h" -#endif - -#ifdef STATIC -STATIC -#endif -int -PRINTF_FETCHARGS (va_list args, arguments *a) -{ - size_t i; - argument *ap; - - for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) - switch (ap->type) - { - case TYPE_SCHAR: - ap->a.a_schar = va_arg (args, /*signed char*/ int); - break; - case TYPE_UCHAR: - ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); - break; - case TYPE_SHORT: - ap->a.a_short = va_arg (args, /*short*/ int); - break; - case TYPE_USHORT: - ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); - break; - case TYPE_INT: - ap->a.a_int = va_arg (args, int); - break; - case TYPE_UINT: - ap->a.a_uint = va_arg (args, unsigned int); - break; - case TYPE_LONGINT: - ap->a.a_longint = va_arg (args, long int); - break; - case TYPE_ULONGINT: - ap->a.a_ulongint = va_arg (args, unsigned long int); - break; -#if HAVE_LONG_LONG_INT - case TYPE_LONGLONGINT: - ap->a.a_longlongint = va_arg (args, long long int); - break; - case TYPE_ULONGLONGINT: - ap->a.a_ulonglongint = va_arg (args, unsigned long long int); - break; -#endif - case TYPE_DOUBLE: - ap->a.a_double = va_arg (args, double); - break; - case TYPE_LONGDOUBLE: - ap->a.a_longdouble = va_arg (args, long double); - break; - case TYPE_CHAR: - ap->a.a_char = va_arg (args, int); - break; -#if HAVE_WINT_T - case TYPE_WIDE_CHAR: - /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by - default argument promotions", this is not the case in mingw32, - where wint_t is 'unsigned short'. */ - ap->a.a_wide_char = - (sizeof (wint_t) < sizeof (int) - ? (wint_t) va_arg (args, int) - : va_arg (args, wint_t)); - break; -#endif - case TYPE_STRING: - ap->a.a_string = va_arg (args, const char *); - /* A null pointer is an invalid argument for "%s", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_string == NULL) - ap->a.a_string = "(NULL)"; - break; -#if HAVE_WCHAR_T - case TYPE_WIDE_STRING: - ap->a.a_wide_string = va_arg (args, const wchar_t *); - /* A null pointer is an invalid argument for "%ls", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_wide_string == NULL) - { - static const wchar_t wide_null_string[] = - { - (wchar_t)'(', - (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', - (wchar_t)')', - (wchar_t)0 - }; - ap->a.a_wide_string = wide_null_string; - } - break; -#endif - case TYPE_POINTER: - ap->a.a_pointer = va_arg (args, void *); - break; - case TYPE_COUNT_SCHAR_POINTER: - ap->a.a_count_schar_pointer = va_arg (args, signed char *); - break; - case TYPE_COUNT_SHORT_POINTER: - ap->a.a_count_short_pointer = va_arg (args, short *); - break; - case TYPE_COUNT_INT_POINTER: - ap->a.a_count_int_pointer = va_arg (args, int *); - break; - case TYPE_COUNT_LONGINT_POINTER: - ap->a.a_count_longint_pointer = va_arg (args, long int *); - break; -#if HAVE_LONG_LONG_INT - case TYPE_COUNT_LONGLONGINT_POINTER: - ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); - break; -#endif -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - case TYPE_U8_STRING: - ap->a.a_u8_string = va_arg (args, const uint8_t *); - /* A null pointer is an invalid argument for "%U", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_u8_string == NULL) - { - static const uint8_t u8_null_string[] = - { '(', 'N', 'U', 'L', 'L', ')', 0 }; - ap->a.a_u8_string = u8_null_string; - } - break; - case TYPE_U16_STRING: - ap->a.a_u16_string = va_arg (args, const uint16_t *); - /* A null pointer is an invalid argument for "%lU", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_u16_string == NULL) - { - static const uint16_t u16_null_string[] = - { '(', 'N', 'U', 'L', 'L', ')', 0 }; - ap->a.a_u16_string = u16_null_string; - } - break; - case TYPE_U32_STRING: - ap->a.a_u32_string = va_arg (args, const uint32_t *); - /* A null pointer is an invalid argument for "%llU", but in practice - it occurs quite frequently in printf statements that produce - debug output. Use a fallback in this case. */ - if (ap->a.a_u32_string == NULL) - { - static const uint32_t u32_null_string[] = - { '(', 'N', 'U', 'L', 'L', ')', 0 }; - ap->a.a_u32_string = u32_null_string; - } - break; -#endif - default: - /* Unknown type. */ - return -1; - } - return 0; -} diff --git a/src/gl/printf-args.h b/src/gl/printf-args.h deleted file mode 100644 index 256c413112..0000000000 --- a/src/gl/printf-args.h +++ /dev/null @@ -1,158 +0,0 @@ -/* Decomposed printf argument list. - Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#ifndef _PRINTF_ARGS_H -#define _PRINTF_ARGS_H - -/* This file can be parametrized with the following macros: - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. - PRINTF_FETCHARGS Name of the function to be declared. - STATIC Set to 'static' to declare the function static. */ - -/* Default parameters. */ -#ifndef PRINTF_FETCHARGS -# define PRINTF_FETCHARGS printf_fetchargs -#endif - -/* Get size_t. */ -#include - -/* Get wchar_t. */ -#if HAVE_WCHAR_T -# include -#endif - -/* Get wint_t. */ -#if HAVE_WINT_T -# include -#endif - -/* Get va_list. */ -#include - - -/* Argument types */ -typedef enum -{ - TYPE_NONE, - TYPE_SCHAR, - TYPE_UCHAR, - TYPE_SHORT, - TYPE_USHORT, - TYPE_INT, - TYPE_UINT, - TYPE_LONGINT, - TYPE_ULONGINT, -#if HAVE_LONG_LONG_INT - TYPE_LONGLONGINT, - TYPE_ULONGLONGINT, -#endif - TYPE_DOUBLE, - TYPE_LONGDOUBLE, - TYPE_CHAR, -#if HAVE_WINT_T - TYPE_WIDE_CHAR, -#endif - TYPE_STRING, -#if HAVE_WCHAR_T - TYPE_WIDE_STRING, -#endif - TYPE_POINTER, - TYPE_COUNT_SCHAR_POINTER, - TYPE_COUNT_SHORT_POINTER, - TYPE_COUNT_INT_POINTER, - TYPE_COUNT_LONGINT_POINTER -#if HAVE_LONG_LONG_INT -, TYPE_COUNT_LONGLONGINT_POINTER -#endif -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ -, TYPE_U8_STRING -, TYPE_U16_STRING -, TYPE_U32_STRING -#endif -} arg_type; - -/* Polymorphic argument */ -typedef struct -{ - arg_type type; - union - { - signed char a_schar; - unsigned char a_uchar; - short a_short; - unsigned short a_ushort; - int a_int; - unsigned int a_uint; - long int a_longint; - unsigned long int a_ulongint; -#if HAVE_LONG_LONG_INT - long long int a_longlongint; - unsigned long long int a_ulonglongint; -#endif - float a_float; - double a_double; - long double a_longdouble; - int a_char; -#if HAVE_WINT_T - wint_t a_wide_char; -#endif - const char* a_string; -#if HAVE_WCHAR_T - const wchar_t* a_wide_string; -#endif - void* a_pointer; - signed char * a_count_schar_pointer; - short * a_count_short_pointer; - int * a_count_int_pointer; - long int * a_count_longint_pointer; -#if HAVE_LONG_LONG_INT - long long int * a_count_longlongint_pointer; -#endif -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - const uint8_t * a_u8_string; - const uint16_t * a_u16_string; - const uint32_t * a_u32_string; -#endif - } - a; -} -argument; - -/* Number of directly allocated arguments (no malloc() needed). */ -#define N_DIRECT_ALLOC_ARGUMENTS 7 - -typedef struct -{ - size_t count; - argument *arg; - argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; -} -arguments; - - -/* Fetch the arguments, putting them into a. */ -#ifdef STATIC -STATIC -#else -extern -#endif -int PRINTF_FETCHARGS (va_list args, arguments *a); - -#endif /* _PRINTF_ARGS_H */ diff --git a/src/gl/printf-parse.c b/src/gl/printf-parse.c deleted file mode 100644 index fad5d3d24c..0000000000 --- a/src/gl/printf-parse.c +++ /dev/null @@ -1,638 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 1999-2000, 2002-2003, 2006-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -/* This file can be parametrized with the following macros: - CHAR_T The element type of the format string. - CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters - in the format string are ASCII. - DIRECTIVE Structure denoting a format directive. - Depends on CHAR_T. - DIRECTIVES Structure denoting the set of format directives of a - format string. Depends on CHAR_T. - PRINTF_PARSE Function that parses a format string. - Depends on CHAR_T. - STATIC Set to 'static' to declare the function static. - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ - -#ifndef PRINTF_PARSE -# include -#endif - -/* Specification. */ -#ifndef PRINTF_PARSE -# include "printf-parse.h" -#endif - -/* Default parameters. */ -#ifndef PRINTF_PARSE -# define PRINTF_PARSE printf_parse -# define CHAR_T char -# define DIRECTIVE char_directive -# define DIRECTIVES char_directives -#endif - -/* Get size_t, NULL. */ -#include - -/* Get intmax_t. */ -#if defined IN_LIBINTL || defined IN_LIBASPRINTF -# if HAVE_STDINT_H_WITH_UINTMAX -# include -# endif -# if HAVE_INTTYPES_H_WITH_UINTMAX -# include -# endif -#else -# include -#endif - -/* malloc(), realloc(), free(). */ -#include - -/* memcpy(). */ -#include - -/* errno. */ -#include - -/* Checked size_t computations. */ -#include "xsize.h" - -#if CHAR_T_ONLY_ASCII -/* c_isascii(). */ -# include "c-ctype.h" -#endif - -#ifdef STATIC -STATIC -#endif -int -PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) -{ - const CHAR_T *cp = format; /* pointer into format */ - size_t arg_posn = 0; /* number of regular arguments consumed */ - size_t d_allocated; /* allocated elements of d->dir */ - size_t a_allocated; /* allocated elements of a->arg */ - size_t max_width_length = 0; - size_t max_precision_length = 0; - - d->count = 0; - d_allocated = N_DIRECT_ALLOC_DIRECTIVES; - d->dir = d->direct_alloc_dir; - - a->count = 0; - a_allocated = N_DIRECT_ALLOC_ARGUMENTS; - a->arg = a->direct_alloc_arg; - -#define REGISTER_ARG(_index_,_type_) \ - { \ - size_t n = (_index_); \ - if (n >= a_allocated) \ - { \ - size_t memory_size; \ - argument *memory; \ - \ - a_allocated = xtimes (a_allocated, 2); \ - if (a_allocated <= n) \ - a_allocated = xsum (n, 1); \ - memory_size = xtimes (a_allocated, sizeof (argument)); \ - if (size_overflow_p (memory_size)) \ - /* Overflow, would lead to out of memory. */ \ - goto out_of_memory; \ - memory = (argument *) (a->arg != a->direct_alloc_arg \ - ? realloc (a->arg, memory_size) \ - : malloc (memory_size)); \ - if (memory == NULL) \ - /* Out of memory. */ \ - goto out_of_memory; \ - if (a->arg == a->direct_alloc_arg) \ - memcpy (memory, a->arg, a->count * sizeof (argument)); \ - a->arg = memory; \ - } \ - while (a->count <= n) \ - a->arg[a->count++].type = TYPE_NONE; \ - if (a->arg[n].type == TYPE_NONE) \ - a->arg[n].type = (_type_); \ - else if (a->arg[n].type != (_type_)) \ - /* Ambiguous type for positional argument. */ \ - goto error; \ - } - - while (*cp != '\0') - { - CHAR_T c = *cp++; - if (c == '%') - { - size_t arg_index = ARG_NONE; - DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ - - /* Initialize the next directive. */ - dp->dir_start = cp - 1; - dp->flags = 0; - dp->width_start = NULL; - dp->width_end = NULL; - dp->width_arg_index = ARG_NONE; - dp->precision_start = NULL; - dp->precision_end = NULL; - dp->precision_arg_index = ARG_NONE; - dp->arg_index = ARG_NONE; - - /* Test for positional argument. */ - if (*cp >= '0' && *cp <= '9') - { - const CHAR_T *np; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - ; - if (*np == '$') - { - size_t n = 0; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - n = xsum (xtimes (n, 10), *np - '0'); - if (n == 0) - /* Positional argument 0. */ - goto error; - if (size_overflow_p (n)) - /* n too large, would lead to out of memory later. */ - goto error; - arg_index = n - 1; - cp = np + 1; - } - } - - /* Read the flags. */ - for (;;) - { - if (*cp == '\'') - { - dp->flags |= FLAG_GROUP; - cp++; - } - else if (*cp == '-') - { - dp->flags |= FLAG_LEFT; - cp++; - } - else if (*cp == '+') - { - dp->flags |= FLAG_SHOWSIGN; - cp++; - } - else if (*cp == ' ') - { - dp->flags |= FLAG_SPACE; - cp++; - } - else if (*cp == '#') - { - dp->flags |= FLAG_ALT; - cp++; - } - else if (*cp == '0') - { - dp->flags |= FLAG_ZERO; - cp++; - } -#if __GLIBC__ >= 2 && !defined __UCLIBC__ - else if (*cp == 'I') - { - dp->flags |= FLAG_LOCALIZED; - cp++; - } -#endif - else - break; - } - - /* Parse the field width. */ - if (*cp == '*') - { - dp->width_start = cp; - cp++; - dp->width_end = cp; - if (max_width_length < 1) - max_width_length = 1; - - /* Test for positional argument. */ - if (*cp >= '0' && *cp <= '9') - { - const CHAR_T *np; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - ; - if (*np == '$') - { - size_t n = 0; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - n = xsum (xtimes (n, 10), *np - '0'); - if (n == 0) - /* Positional argument 0. */ - goto error; - if (size_overflow_p (n)) - /* n too large, would lead to out of memory later. */ - goto error; - dp->width_arg_index = n - 1; - cp = np + 1; - } - } - if (dp->width_arg_index == ARG_NONE) - { - dp->width_arg_index = arg_posn++; - if (dp->width_arg_index == ARG_NONE) - /* arg_posn wrapped around. */ - goto error; - } - REGISTER_ARG (dp->width_arg_index, TYPE_INT); - } - else if (*cp >= '0' && *cp <= '9') - { - size_t width_length; - - dp->width_start = cp; - for (; *cp >= '0' && *cp <= '9'; cp++) - ; - dp->width_end = cp; - width_length = dp->width_end - dp->width_start; - if (max_width_length < width_length) - max_width_length = width_length; - } - - /* Parse the precision. */ - if (*cp == '.') - { - cp++; - if (*cp == '*') - { - dp->precision_start = cp - 1; - cp++; - dp->precision_end = cp; - if (max_precision_length < 2) - max_precision_length = 2; - - /* Test for positional argument. */ - if (*cp >= '0' && *cp <= '9') - { - const CHAR_T *np; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - ; - if (*np == '$') - { - size_t n = 0; - - for (np = cp; *np >= '0' && *np <= '9'; np++) - n = xsum (xtimes (n, 10), *np - '0'); - if (n == 0) - /* Positional argument 0. */ - goto error; - if (size_overflow_p (n)) - /* n too large, would lead to out of memory - later. */ - goto error; - dp->precision_arg_index = n - 1; - cp = np + 1; - } - } - if (dp->precision_arg_index == ARG_NONE) - { - dp->precision_arg_index = arg_posn++; - if (dp->precision_arg_index == ARG_NONE) - /* arg_posn wrapped around. */ - goto error; - } - REGISTER_ARG (dp->precision_arg_index, TYPE_INT); - } - else - { - size_t precision_length; - - dp->precision_start = cp - 1; - for (; *cp >= '0' && *cp <= '9'; cp++) - ; - dp->precision_end = cp; - precision_length = dp->precision_end - dp->precision_start; - if (max_precision_length < precision_length) - max_precision_length = precision_length; - } - } - - { - arg_type type; - - /* Parse argument type/size specifiers. */ - { - int flags = 0; - - for (;;) - { - if (*cp == 'h') - { - flags |= (1 << (flags & 1)); - cp++; - } - else if (*cp == 'L') - { - flags |= 4; - cp++; - } - else if (*cp == 'l') - { - flags += 8; - cp++; - } - else if (*cp == 'j') - { - if (sizeof (intmax_t) > sizeof (long)) - { - /* intmax_t = long long */ - flags += 16; - } - else if (sizeof (intmax_t) > sizeof (int)) - { - /* intmax_t = long */ - flags += 8; - } - cp++; - } - else if (*cp == 'z' || *cp == 'Z') - { - /* 'z' is standardized in ISO C 99, but glibc uses 'Z' - because the warning facility in gcc-2.95.2 understands - only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ - if (sizeof (size_t) > sizeof (long)) - { - /* size_t = long long */ - flags += 16; - } - else if (sizeof (size_t) > sizeof (int)) - { - /* size_t = long */ - flags += 8; - } - cp++; - } - else if (*cp == 't') - { - if (sizeof (ptrdiff_t) > sizeof (long)) - { - /* ptrdiff_t = long long */ - flags += 16; - } - else if (sizeof (ptrdiff_t) > sizeof (int)) - { - /* ptrdiff_t = long */ - flags += 8; - } - cp++; - } -#if defined __APPLE__ && defined __MACH__ - /* On Mac OS X 10.3, PRIdMAX is defined as "qd". - We cannot change it to "lld" because PRIdMAX must also - be understood by the system's printf routines. */ - else if (*cp == 'q') - { - if (64 / 8 > sizeof (long)) - { - /* int64_t = long long */ - flags += 16; - } - else - { - /* int64_t = long */ - flags += 8; - } - cp++; - } -#endif -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - /* On native Windows, PRIdMAX is defined as "I64d". - We cannot change it to "lld" because PRIdMAX must also - be understood by the system's printf routines. */ - else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') - { - if (64 / 8 > sizeof (long)) - { - /* __int64 = long long */ - flags += 16; - } - else - { - /* __int64 = long */ - flags += 8; - } - cp += 3; - } -#endif - else - break; - } - - /* Read the conversion character. */ - c = *cp++; - switch (c) - { - case 'd': case 'i': -#if HAVE_LONG_LONG_INT - /* If 'long long' exists and is larger than 'long': */ - if (flags >= 16 || (flags & 4)) - type = TYPE_LONGLONGINT; - else -#endif - /* If 'long long' exists and is the same as 'long', we parse - "lld" into TYPE_LONGINT. */ - if (flags >= 8) - type = TYPE_LONGINT; - else if (flags & 2) - type = TYPE_SCHAR; - else if (flags & 1) - type = TYPE_SHORT; - else - type = TYPE_INT; - break; - case 'o': case 'u': case 'x': case 'X': -#if HAVE_LONG_LONG_INT - /* If 'long long' exists and is larger than 'long': */ - if (flags >= 16 || (flags & 4)) - type = TYPE_ULONGLONGINT; - else -#endif - /* If 'unsigned long long' exists and is the same as - 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ - if (flags >= 8) - type = TYPE_ULONGINT; - else if (flags & 2) - type = TYPE_UCHAR; - else if (flags & 1) - type = TYPE_USHORT; - else - type = TYPE_UINT; - break; - case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': - case 'a': case 'A': - if (flags >= 16 || (flags & 4)) - type = TYPE_LONGDOUBLE; - else - type = TYPE_DOUBLE; - break; - case 'c': - if (flags >= 8) -#if HAVE_WINT_T - type = TYPE_WIDE_CHAR; -#else - goto error; -#endif - else - type = TYPE_CHAR; - break; -#if HAVE_WINT_T - case 'C': - type = TYPE_WIDE_CHAR; - c = 'c'; - break; -#endif - case 's': - if (flags >= 8) -#if HAVE_WCHAR_T - type = TYPE_WIDE_STRING; -#else - goto error; -#endif - else - type = TYPE_STRING; - break; -#if HAVE_WCHAR_T - case 'S': - type = TYPE_WIDE_STRING; - c = 's'; - break; -#endif - case 'p': - type = TYPE_POINTER; - break; - case 'n': -#if HAVE_LONG_LONG_INT - /* If 'long long' exists and is larger than 'long': */ - if (flags >= 16 || (flags & 4)) - type = TYPE_COUNT_LONGLONGINT_POINTER; - else -#endif - /* If 'long long' exists and is the same as 'long', we parse - "lln" into TYPE_COUNT_LONGINT_POINTER. */ - if (flags >= 8) - type = TYPE_COUNT_LONGINT_POINTER; - else if (flags & 2) - type = TYPE_COUNT_SCHAR_POINTER; - else if (flags & 1) - type = TYPE_COUNT_SHORT_POINTER; - else - type = TYPE_COUNT_INT_POINTER; - break; -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - case 'U': - if (flags >= 16) - type = TYPE_U32_STRING; - else if (flags >= 8) - type = TYPE_U16_STRING; - else - type = TYPE_U8_STRING; - break; -#endif - case '%': - type = TYPE_NONE; - break; - default: - /* Unknown conversion character. */ - goto error; - } - } - - if (type != TYPE_NONE) - { - dp->arg_index = arg_index; - if (dp->arg_index == ARG_NONE) - { - dp->arg_index = arg_posn++; - if (dp->arg_index == ARG_NONE) - /* arg_posn wrapped around. */ - goto error; - } - REGISTER_ARG (dp->arg_index, type); - } - dp->conversion = c; - dp->dir_end = cp; - } - - d->count++; - if (d->count >= d_allocated) - { - size_t memory_size; - DIRECTIVE *memory; - - d_allocated = xtimes (d_allocated, 2); - memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); - if (size_overflow_p (memory_size)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir - ? realloc (d->dir, memory_size) - : malloc (memory_size)); - if (memory == NULL) - /* Out of memory. */ - goto out_of_memory; - if (d->dir == d->direct_alloc_dir) - memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); - d->dir = memory; - } - } -#if CHAR_T_ONLY_ASCII - else if (!c_isascii (c)) - { - /* Non-ASCII character. Not supported. */ - goto error; - } -#endif - } - d->dir[d->count].dir_start = cp; - - d->max_width_length = max_width_length; - d->max_precision_length = max_precision_length; - return 0; - -error: - if (a->arg != a->direct_alloc_arg) - free (a->arg); - if (d->dir != d->direct_alloc_dir) - free (d->dir); - errno = EINVAL; - return -1; - -out_of_memory: - if (a->arg != a->direct_alloc_arg) - free (a->arg); - if (d->dir != d->direct_alloc_dir) - free (d->dir); - errno = ENOMEM; - return -1; -} - -#undef PRINTF_PARSE -#undef DIRECTIVES -#undef DIRECTIVE -#undef CHAR_T_ONLY_ASCII -#undef CHAR_T diff --git a/src/gl/printf-parse.h b/src/gl/printf-parse.h deleted file mode 100644 index a46d946241..0000000000 --- a/src/gl/printf-parse.h +++ /dev/null @@ -1,193 +0,0 @@ -/* Parse printf format string. - Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2016 Free Software - Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#ifndef _PRINTF_PARSE_H -#define _PRINTF_PARSE_H - -/* This file can be parametrized with the following macros: - ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. - STATIC Set to 'static' to declare the function static. */ - -#if HAVE_FEATURES_H -# include /* for __GLIBC__, __UCLIBC__ */ -#endif - -#include "printf-args.h" - - -/* Flags */ -#define FLAG_GROUP 1 /* ' flag */ -#define FLAG_LEFT 2 /* - flag */ -#define FLAG_SHOWSIGN 4 /* + flag */ -#define FLAG_SPACE 8 /* space flag */ -#define FLAG_ALT 16 /* # flag */ -#define FLAG_ZERO 32 -#if __GLIBC__ >= 2 && !defined __UCLIBC__ -# define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ -#endif - -/* arg_index value indicating that no argument is consumed. */ -#define ARG_NONE (~(size_t)0) - -/* xxx_directive: A parsed directive. - xxx_directives: A parsed format string. */ - -/* Number of directly allocated directives (no malloc() needed). */ -#define N_DIRECT_ALLOC_DIRECTIVES 7 - -/* A parsed directive. */ -typedef struct -{ - const char* dir_start; - const char* dir_end; - int flags; - const char* width_start; - const char* width_end; - size_t width_arg_index; - const char* precision_start; - const char* precision_end; - size_t precision_arg_index; - char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -char_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - char_directive *dir; - size_t max_width_length; - size_t max_precision_length; - char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -char_directives; - -#if ENABLE_UNISTDIO - -/* A parsed directive. */ -typedef struct -{ - const uint8_t* dir_start; - const uint8_t* dir_end; - int flags; - const uint8_t* width_start; - const uint8_t* width_end; - size_t width_arg_index; - const uint8_t* precision_start; - const uint8_t* precision_end; - size_t precision_arg_index; - uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -u8_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - u8_directive *dir; - size_t max_width_length; - size_t max_precision_length; - u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -u8_directives; - -/* A parsed directive. */ -typedef struct -{ - const uint16_t* dir_start; - const uint16_t* dir_end; - int flags; - const uint16_t* width_start; - const uint16_t* width_end; - size_t width_arg_index; - const uint16_t* precision_start; - const uint16_t* precision_end; - size_t precision_arg_index; - uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -u16_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - u16_directive *dir; - size_t max_width_length; - size_t max_precision_length; - u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -u16_directives; - -/* A parsed directive. */ -typedef struct -{ - const uint32_t* dir_start; - const uint32_t* dir_end; - int flags; - const uint32_t* width_start; - const uint32_t* width_end; - size_t width_arg_index; - const uint32_t* precision_start; - const uint32_t* precision_end; - size_t precision_arg_index; - uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ - size_t arg_index; -} -u32_directive; - -/* A parsed format string. */ -typedef struct -{ - size_t count; - u32_directive *dir; - size_t max_width_length; - size_t max_precision_length; - u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; -} -u32_directives; - -#endif - - -/* Parses the format string. Fills in the number N of directives, and fills - in directives[0], ..., directives[N-1], and sets directives[N].dir_start - to the end of the format string. Also fills in the arg_type fields of the - arguments and the needed count of arguments. */ -#if ENABLE_UNISTDIO -extern int - ulc_printf_parse (const char *format, char_directives *d, arguments *a); -extern int - u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); -extern int - u16_printf_parse (const uint16_t *format, u16_directives *d, - arguments *a); -extern int - u32_printf_parse (const uint32_t *format, u32_directives *d, - arguments *a); -#else -# ifdef STATIC -STATIC -# else -extern -# endif -int printf_parse (const char *format, char_directives *d, arguments *a); -#endif - -#endif /* _PRINTF_PARSE_H */ diff --git a/src/gl/progname.c b/src/gl/progname.c deleted file mode 100644 index debb76026d..0000000000 --- a/src/gl/progname.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Program name management. - Copyright (C) 2001-2003, 2005-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - - -#include - -/* Specification. */ -#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */ -#include "progname.h" - -#include /* get program_invocation_name declaration */ -#include -#include -#include - - -/* String containing name the program is called with. - To be initialized by main(). */ -const char *program_name = NULL; - -/* Set program_name, based on argv[0]. - argv0 must be a string allocated with indefinite extent, and must not be - modified after this call. */ -void -set_program_name (const char *argv0) -{ - /* libtool creates a temporary executable whose name is sometimes prefixed - with "lt-" (depends on the platform). It also makes argv[0] absolute. - But the name of the temporary executable is a detail that should not be - visible to the end user and to the test suite. - Remove this "/.libs/" or "/.libs/lt-" prefix here. */ - const char *slash; - const char *base; - - /* Sanity check. POSIX requires the invoking process to pass a non-NULL - argv[0]. */ - if (argv0 == NULL) - { - /* It's a bug in the invoking program. Help diagnosing it. */ - fputs ("A NULL argv[0] was passed through an exec system call.\n", - stderr); - abort (); - } - - slash = strrchr (argv0, '/'); - base = (slash != NULL ? slash + 1 : argv0); - if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0) - { - argv0 = base; - if (strncmp (base, "lt-", 3) == 0) - { - argv0 = base + 3; - /* On glibc systems, remove the "lt-" prefix from the variable - program_invocation_short_name. */ -#if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME - program_invocation_short_name = (char *) argv0; -#endif - } - } - - /* But don't strip off a leading / in general, because when the user - runs - /some/hidden/place/bin/cp foo foo - he should get the error message - /some/hidden/place/bin/cp: `foo' and `foo' are the same file - not - cp: `foo' and `foo' are the same file - */ - - program_name = argv0; - - /* On glibc systems, the error() function comes from libc and uses the - variable program_invocation_name, not program_name. So set this variable - as well. */ -#if HAVE_DECL_PROGRAM_INVOCATION_NAME - program_invocation_name = (char *) argv0; -#endif -} diff --git a/src/gl/progname.h b/src/gl/progname.h deleted file mode 100644 index 0a574071bf..0000000000 --- a/src/gl/progname.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Program name management. - Copyright (C) 2001-2004, 2006, 2009-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef _PROGNAME_H -#define _PROGNAME_H - -/* Programs using this file should do the following in main(): - set_program_name (argv[0]); - */ - - -#ifdef __cplusplus -extern "C" { -#endif - - -/* String containing name the program is called with. */ -extern const char *program_name; - -/* Set program_name, based on argv[0]. - argv0 must be a string allocated with indefinite extent, and must not be - modified after this call. */ -extern void set_program_name (const char *argv0); - -#if ENABLE_RELOCATABLE - -/* Set program_name, based on argv[0], and original installation prefix and - directory, for relocatability. */ -extern void set_program_name_and_installdir (const char *argv0, - const char *orig_installprefix, - const char *orig_installdir); -#undef set_program_name -#define set_program_name(ARG0) \ - set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) - -/* Return the full pathname of the current executable, based on the earlier - call to set_program_name_and_installdir. Return NULL if unknown. */ -extern char *get_full_program_name (void); - -#endif - - -#ifdef __cplusplus -} -#endif - - -#endif /* _PROGNAME_H */ diff --git a/src/gl/read-file.c b/src/gl/read-file.c deleted file mode 100644 index f7b119965c..0000000000 --- a/src/gl/read-file.c +++ /dev/null @@ -1,188 +0,0 @@ -/* read-file.c -- read file contents into a string - Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. - Written by Simon Josefsson and Bruno Haible. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#include - -#include "read-file.h" - -/* Get fstat. */ -#include - -/* Get ftello. */ -#include - -/* Get SIZE_MAX. */ -#include - -/* Get malloc, realloc, free. */ -#include - -/* Get errno. */ -#include - -/* Read a STREAM and return a newly allocated string with the content, - and set *LENGTH to the length of the string. The string is - zero-terminated, but the terminating zero byte is not counted in - *LENGTH. On errors, *LENGTH is undefined, errno preserves the - values set by system functions (if any), and NULL is returned. */ -char * -fread_file (FILE *stream, size_t *length) -{ - char *buf = NULL; - size_t alloc = BUFSIZ; - - /* For a regular file, allocate a buffer that has exactly the right - size. This avoids the need to do dynamic reallocations later. */ - { - struct stat st; - - if (fstat (fileno (stream), &st) >= 0 && S_ISREG (st.st_mode)) - { - off_t pos = ftello (stream); - - if (pos >= 0 && pos < st.st_size) - { - off_t alloc_off = st.st_size - pos; - - /* '1' below, accounts for the trailing NUL. */ - if (SIZE_MAX - 1 < alloc_off) - { - errno = ENOMEM; - return NULL; - } - - alloc = alloc_off + 1; - } - } - } - - if (!(buf = malloc (alloc))) - return NULL; /* errno is ENOMEM. */ - - { - size_t size = 0; /* number of bytes read so far */ - int save_errno; - - for (;;) - { - /* This reads 1 more than the size of a regular file - so that we get eof immediately. */ - size_t requested = alloc - size; - size_t count = fread (buf + size, 1, requested, stream); - size += count; - - if (count != requested) - { - save_errno = errno; - if (ferror (stream)) - break; - - /* Shrink the allocated memory if possible. */ - if (size < alloc - 1) - { - char *smaller_buf = realloc (buf, size + 1); - if (smaller_buf != NULL) - buf = smaller_buf; - } - - buf[size] = '\0'; - *length = size; - return buf; - } - - { - char *new_buf; - - if (alloc == SIZE_MAX) - { - save_errno = ENOMEM; - break; - } - - if (alloc < SIZE_MAX - alloc / 2) - alloc = alloc + alloc / 2; - else - alloc = SIZE_MAX; - - if (!(new_buf = realloc (buf, alloc))) - { - save_errno = errno; - break; - } - - buf = new_buf; - } - } - - free (buf); - errno = save_errno; - return NULL; - } -} - -static char * -internal_read_file (const char *filename, size_t *length, const char *mode) -{ - FILE *stream = fopen (filename, mode); - char *out; - int save_errno; - - if (!stream) - return NULL; - - out = fread_file (stream, length); - - save_errno = errno; - - if (fclose (stream) != 0) - { - if (out) - { - save_errno = errno; - free (out); - } - errno = save_errno; - return NULL; - } - - return out; -} - -/* Open and read the contents of FILENAME, and return a newly - allocated string with the content, and set *LENGTH to the length of - the string. The string is zero-terminated, but the terminating - zero byte is not counted in *LENGTH. On errors, *LENGTH is - undefined, errno preserves the values set by system functions (if - any), and NULL is returned. */ -char * -read_file (const char *filename, size_t *length) -{ - return internal_read_file (filename, length, "r"); -} - -/* Open (on non-POSIX systems, in binary mode) and read the contents - of FILENAME, and return a newly allocated string with the content, - and set LENGTH to the length of the string. The string is - zero-terminated, but the terminating zero byte is not counted in - the LENGTH variable. On errors, *LENGTH is undefined, errno - preserves the values set by system functions (if any), and NULL is - returned. */ -char * -read_binary_file (const char *filename, size_t *length) -{ - return internal_read_file (filename, length, "rb"); -} diff --git a/src/gl/read-file.h b/src/gl/read-file.h deleted file mode 100644 index 6248065b79..0000000000 --- a/src/gl/read-file.h +++ /dev/null @@ -1,33 +0,0 @@ -/* read-file.h -- read file contents into a string - Copyright (C) 2006, 2009-2016 Free Software Foundation, Inc. - Written by Simon Josefsson. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef READ_FILE_H -#define READ_FILE_H - -/* Get size_t. */ -#include - -/* Get FILE. */ -#include - -extern char *fread_file (FILE * stream, size_t * length); - -extern char *read_file (const char *filename, size_t * length); - -extern char *read_binary_file (const char *filename, size_t * length); - -#endif /* READ_FILE_H */ diff --git a/src/gl/realloc.c b/src/gl/realloc.c deleted file mode 100644 index 83cb44ee3e..0000000000 --- a/src/gl/realloc.c +++ /dev/null @@ -1,79 +0,0 @@ -/* realloc() function that is glibc compatible. - - Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2016 Free Software - Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* written by Jim Meyering and Bruno Haible */ - -#define _GL_USE_STDLIB_ALLOC 1 -#include - -/* Only the AC_FUNC_REALLOC macro defines 'realloc' already in config.h. */ -#ifdef realloc -# define NEED_REALLOC_GNU 1 -/* Whereas the gnulib module 'realloc-gnu' defines HAVE_REALLOC_GNU. */ -#elif GNULIB_REALLOC_GNU && !HAVE_REALLOC_GNU -# define NEED_REALLOC_GNU 1 -#endif - -/* Infer the properties of the system's malloc function. - The gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ -#if GNULIB_MALLOC_GNU && HAVE_MALLOC_GNU -# define SYSTEM_MALLOC_GLIBC_COMPATIBLE 1 -#endif - -#include - -#include - -/* Change the size of an allocated block of memory P to N bytes, - with error checking. If N is zero, change it to 1. If P is NULL, - use malloc. */ - -void * -rpl_realloc (void *p, size_t n) -{ - void *result; - -#if NEED_REALLOC_GNU - if (n == 0) - { - n = 1; - - /* In theory realloc might fail, so don't rely on it to free. */ - free (p); - p = NULL; - } -#endif - - if (p == NULL) - { -#if GNULIB_REALLOC_GNU && !NEED_REALLOC_GNU && !SYSTEM_MALLOC_GLIBC_COMPATIBLE - if (n == 0) - n = 1; -#endif - result = malloc (n); - } - else - result = realloc (p, n); - -#if !HAVE_REALLOC_POSIX - if (result == NULL) - errno = ENOMEM; -#endif - - return result; -} diff --git a/src/gl/recv.c b/src/gl/recv.c deleted file mode 100644 index e130627ae0..0000000000 --- a/src/gl/recv.c +++ /dev/null @@ -1,49 +0,0 @@ -/* recv.c --- wrappers for Windows recv function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#undef recv - -ssize_t -rpl_recv (int fd, void *buf, size_t len, int flags) -{ - SOCKET sock = FD_TO_SOCKET (fd); - - if (sock == INVALID_SOCKET) - { - errno = EBADF; - return -1; - } - else - { - int r = recv (sock, buf, len, flags); - if (r < 0) - set_winsock_errno (); - - return r; - } -} diff --git a/src/gl/recvfrom.c b/src/gl/recvfrom.c deleted file mode 100644 index 85c55823ad..0000000000 --- a/src/gl/recvfrom.c +++ /dev/null @@ -1,58 +0,0 @@ -/* recvfrom.c --- wrappers for Windows recvfrom function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#undef recvfrom - -ssize_t -rpl_recvfrom (int fd, void *buf, size_t len, int flags, struct sockaddr *from, - socklen_t *fromlen) -{ - SOCKET sock = FD_TO_SOCKET (fd); - - if (sock == INVALID_SOCKET) - { - errno = EBADF; - return -1; - } - else - { - int frombufsize = (from != NULL ? *fromlen : 0); - int r = recvfrom (sock, buf, len, flags, from, fromlen); - - if (r < 0) - set_winsock_errno (); - - /* Winsock recvfrom() only returns a valid 'from' when the socket is - connectionless. POSIX gives a valid 'from' for all types of - sockets. */ - else if (from != NULL && *fromlen == frombufsize) - rpl_getpeername (fd, from, fromlen); - - return r; - } -} diff --git a/src/gl/select.c b/src/gl/select.c deleted file mode 100644 index 73abcf39e2..0000000000 --- a/src/gl/select.c +++ /dev/null @@ -1,575 +0,0 @@ -/* Emulation for select(2) - Contributed by Paolo Bonzini. - - Copyright 2008-2016 Free Software Foundation, Inc. - - This file is part of gnulib. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#include -#include -#include - -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -/* Native Windows. */ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -/* Get the overridden 'struct timeval'. */ -#include - -#include "msvc-nothrow.h" - -#undef select - -struct bitset { - unsigned char in[FD_SETSIZE / CHAR_BIT]; - unsigned char out[FD_SETSIZE / CHAR_BIT]; -}; - -/* Declare data structures for ntdll functions. */ -typedef struct _FILE_PIPE_LOCAL_INFORMATION { - ULONG NamedPipeType; - ULONG NamedPipeConfiguration; - ULONG MaximumInstances; - ULONG CurrentInstances; - ULONG InboundQuota; - ULONG ReadDataAvailable; - ULONG OutboundQuota; - ULONG WriteQuotaAvailable; - ULONG NamedPipeState; - ULONG NamedPipeEnd; -} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; - -typedef struct _IO_STATUS_BLOCK -{ - union { - DWORD Status; - PVOID Pointer; - } u; - ULONG_PTR Information; -} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; - -typedef enum _FILE_INFORMATION_CLASS { - FilePipeLocalInformation = 24 -} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; - -typedef DWORD (WINAPI *PNtQueryInformationFile) - (HANDLE, IO_STATUS_BLOCK *, VOID *, ULONG, FILE_INFORMATION_CLASS); - -#ifndef PIPE_BUF -#define PIPE_BUF 512 -#endif - -static BOOL IsConsoleHandle (HANDLE h) -{ - DWORD mode; - return GetConsoleMode (h, &mode) != 0; -} - -static BOOL -IsSocketHandle (HANDLE h) -{ - WSANETWORKEVENTS ev; - - if (IsConsoleHandle (h)) - return FALSE; - - /* Under Wine, it seems that getsockopt returns 0 for pipes too. - WSAEnumNetworkEvents instead distinguishes the two correctly. */ - ev.lNetworkEvents = 0xDEADBEEF; - WSAEnumNetworkEvents ((SOCKET) h, NULL, &ev); - return ev.lNetworkEvents != 0xDEADBEEF; -} - -/* Compute output fd_sets for libc descriptor FD (whose Windows handle is - H). */ - -static int -windows_poll_handle (HANDLE h, int fd, - struct bitset *rbits, - struct bitset *wbits, - struct bitset *xbits) -{ - BOOL read, write, except; - int i, ret; - INPUT_RECORD *irbuffer; - DWORD avail, nbuffer; - BOOL bRet; - IO_STATUS_BLOCK iosb; - FILE_PIPE_LOCAL_INFORMATION fpli; - static PNtQueryInformationFile NtQueryInformationFile; - static BOOL once_only; - - read = write = except = FALSE; - switch (GetFileType (h)) - { - case FILE_TYPE_DISK: - read = TRUE; - write = TRUE; - break; - - case FILE_TYPE_PIPE: - if (!once_only) - { - NtQueryInformationFile = (PNtQueryInformationFile) - GetProcAddress (GetModuleHandle ("ntdll.dll"), - "NtQueryInformationFile"); - once_only = TRUE; - } - - if (PeekNamedPipe (h, NULL, 0, NULL, &avail, NULL) != 0) - { - if (avail) - read = TRUE; - } - else if (GetLastError () == ERROR_BROKEN_PIPE) - ; - - else - { - /* It was the write-end of the pipe. Check if it is writable. - If NtQueryInformationFile fails, optimistically assume the pipe is - writable. This could happen on Windows 9x, where - NtQueryInformationFile is not available, or if we inherit a pipe - that doesn't permit FILE_READ_ATTRIBUTES access on the write end - (I think this should not happen since Windows XP SP2; WINE seems - fine too). Otherwise, ensure that enough space is available for - atomic writes. */ - memset (&iosb, 0, sizeof (iosb)); - memset (&fpli, 0, sizeof (fpli)); - - if (!NtQueryInformationFile - || NtQueryInformationFile (h, &iosb, &fpli, sizeof (fpli), - FilePipeLocalInformation) - || fpli.WriteQuotaAvailable >= PIPE_BUF - || (fpli.OutboundQuota < PIPE_BUF && - fpli.WriteQuotaAvailable == fpli.OutboundQuota)) - write = TRUE; - } - break; - - case FILE_TYPE_CHAR: - write = TRUE; - if (!(rbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) - break; - - ret = WaitForSingleObject (h, 0); - if (ret == WAIT_OBJECT_0) - { - if (!IsConsoleHandle (h)) - { - read = TRUE; - break; - } - - nbuffer = avail = 0; - bRet = GetNumberOfConsoleInputEvents (h, &nbuffer); - - /* Screen buffers handles are filtered earlier. */ - assert (bRet); - if (nbuffer == 0) - { - except = TRUE; - break; - } - - irbuffer = (INPUT_RECORD *) alloca (nbuffer * sizeof (INPUT_RECORD)); - bRet = PeekConsoleInput (h, irbuffer, nbuffer, &avail); - if (!bRet || avail == 0) - { - except = TRUE; - break; - } - - for (i = 0; i < avail; i++) - if (irbuffer[i].EventType == KEY_EVENT) - read = TRUE; - } - break; - - default: - ret = WaitForSingleObject (h, 0); - write = TRUE; - if (ret == WAIT_OBJECT_0) - read = TRUE; - - break; - } - - ret = 0; - if (read && (rbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) - { - rbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); - ret++; - } - - if (write && (wbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) - { - wbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); - ret++; - } - - if (except && (xbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) - { - xbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); - ret++; - } - - return ret; -} - -int -rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds, - struct timeval *timeout) -#undef timeval -{ - static struct timeval tv0; - static HANDLE hEvent; - HANDLE h, handle_array[FD_SETSIZE + 2]; - fd_set handle_rfds, handle_wfds, handle_xfds; - struct bitset rbits, wbits, xbits; - unsigned char anyfds_in[FD_SETSIZE / CHAR_BIT]; - DWORD ret, wait_timeout, nhandles, nsock, nbuffer; - MSG msg; - int i, fd, rc; - clock_t tend; - - if (nfds > FD_SETSIZE) - nfds = FD_SETSIZE; - - if (!timeout) - wait_timeout = INFINITE; - else - { - wait_timeout = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; - - /* select is also used as a portable usleep. */ - if (!rfds && !wfds && !xfds) - { - Sleep (wait_timeout); - return 0; - } - } - - if (!hEvent) - hEvent = CreateEvent (NULL, FALSE, FALSE, NULL); - - handle_array[0] = hEvent; - nhandles = 1; - nsock = 0; - - /* Copy descriptors to bitsets. At the same time, eliminate - bits in the "wrong" direction for console input buffers - and screen buffers, because screen buffers are waitable - and they will block until a character is available. */ - memset (&rbits, 0, sizeof (rbits)); - memset (&wbits, 0, sizeof (wbits)); - memset (&xbits, 0, sizeof (xbits)); - memset (anyfds_in, 0, sizeof (anyfds_in)); - if (rfds) - for (i = 0; i < rfds->fd_count; i++) - { - fd = rfds->fd_array[i]; - h = (HANDLE) _get_osfhandle (fd); - if (IsConsoleHandle (h) - && !GetNumberOfConsoleInputEvents (h, &nbuffer)) - continue; - - rbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); - anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); - } - else - rfds = (fd_set *) alloca (sizeof (fd_set)); - - if (wfds) - for (i = 0; i < wfds->fd_count; i++) - { - fd = wfds->fd_array[i]; - h = (HANDLE) _get_osfhandle (fd); - if (IsConsoleHandle (h) - && GetNumberOfConsoleInputEvents (h, &nbuffer)) - continue; - - wbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); - anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); - } - else - wfds = (fd_set *) alloca (sizeof (fd_set)); - - if (xfds) - for (i = 0; i < xfds->fd_count; i++) - { - fd = xfds->fd_array[i]; - xbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); - anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); - } - else - xfds = (fd_set *) alloca (sizeof (fd_set)); - - /* Zero all the fd_sets, including the application's. */ - FD_ZERO (rfds); - FD_ZERO (wfds); - FD_ZERO (xfds); - FD_ZERO (&handle_rfds); - FD_ZERO (&handle_wfds); - FD_ZERO (&handle_xfds); - - /* Classify handles. Create fd sets for sockets, poll the others. */ - for (i = 0; i < nfds; i++) - { - if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) - continue; - - h = (HANDLE) _get_osfhandle (i); - if (!h) - { - errno = EBADF; - return -1; - } - - if (IsSocketHandle (h)) - { - int requested = FD_CLOSE; - - /* See above; socket handles are mapped onto select, but we - need to map descriptors to handles. */ - if (rbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) - { - requested |= FD_READ | FD_ACCEPT; - FD_SET ((SOCKET) h, rfds); - FD_SET ((SOCKET) h, &handle_rfds); - } - if (wbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) - { - requested |= FD_WRITE | FD_CONNECT; - FD_SET ((SOCKET) h, wfds); - FD_SET ((SOCKET) h, &handle_wfds); - } - if (xbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) - { - requested |= FD_OOB; - FD_SET ((SOCKET) h, xfds); - FD_SET ((SOCKET) h, &handle_xfds); - } - - WSAEventSelect ((SOCKET) h, hEvent, requested); - nsock++; - } - else - { - handle_array[nhandles++] = h; - - /* Poll now. If we get an event, do not wait below. */ - if (wait_timeout != 0 - && windows_poll_handle (h, i, &rbits, &wbits, &xbits)) - wait_timeout = 0; - } - } - - /* Place a sentinel at the end of the array. */ - handle_array[nhandles] = NULL; - - /* When will the waiting period expire? */ - if (wait_timeout != INFINITE) - tend = clock () + wait_timeout; - -restart: - if (wait_timeout == 0 || nsock == 0) - rc = 0; - else - { - /* See if we need to wait in the loop below. If any select is ready, - do MsgWaitForMultipleObjects anyway to dispatch messages, but - no need to call select again. */ - rc = select (0, &handle_rfds, &handle_wfds, &handle_xfds, &tv0); - if (rc == 0) - { - /* Restore the fd_sets for the other select we do below. */ - memcpy (&handle_rfds, rfds, sizeof (fd_set)); - memcpy (&handle_wfds, wfds, sizeof (fd_set)); - memcpy (&handle_xfds, xfds, sizeof (fd_set)); - } - else - wait_timeout = 0; - } - - /* How much is left to wait? */ - if (wait_timeout != INFINITE) - { - clock_t tnow = clock (); - if (tend >= tnow) - wait_timeout = tend - tnow; - else - wait_timeout = 0; - } - - for (;;) - { - ret = MsgWaitForMultipleObjects (nhandles, handle_array, FALSE, - wait_timeout, QS_ALLINPUT); - - if (ret == WAIT_OBJECT_0 + nhandles) - { - /* new input of some other kind */ - BOOL bRet; - while ((bRet = PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) != 0) - { - TranslateMessage (&msg); - DispatchMessage (&msg); - } - } - else - break; - } - - /* If we haven't done it yet, check the status of the sockets. */ - if (rc == 0 && nsock > 0) - rc = select (0, &handle_rfds, &handle_wfds, &handle_xfds, &tv0); - - if (nhandles > 1) - { - /* Count results that are not counted in the return value of select. */ - nhandles = 1; - for (i = 0; i < nfds; i++) - { - if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) - continue; - - h = (HANDLE) _get_osfhandle (i); - if (h == handle_array[nhandles]) - { - /* Not a socket. */ - nhandles++; - windows_poll_handle (h, i, &rbits, &wbits, &xbits); - if (rbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1))) - || wbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1))) - || xbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) - rc++; - } - } - - if (rc == 0 - && (wait_timeout == INFINITE - /* If NHANDLES > 1, but no bits are set, it means we've - been told incorrectly that some handle was signaled. - This happens with anonymous pipes, which always cause - MsgWaitForMultipleObjects to exit immediately, but no - data is found ready to be read by windows_poll_handle. - To avoid a total failure (whereby we return zero and - don't wait at all), let's poll in a more busy loop. */ - || (wait_timeout != 0 && nhandles > 1))) - { - /* Sleep 1 millisecond to avoid busy wait and retry with the - original fd_sets. */ - memcpy (&handle_rfds, rfds, sizeof (fd_set)); - memcpy (&handle_wfds, wfds, sizeof (fd_set)); - memcpy (&handle_xfds, xfds, sizeof (fd_set)); - SleepEx (1, TRUE); - goto restart; - } - if (timeout && wait_timeout == 0 && rc == 0) - timeout->tv_sec = timeout->tv_usec = 0; - } - - /* Now fill in the results. */ - FD_ZERO (rfds); - FD_ZERO (wfds); - FD_ZERO (xfds); - nhandles = 1; - for (i = 0; i < nfds; i++) - { - if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) - continue; - - h = (HANDLE) _get_osfhandle (i); - if (h != handle_array[nhandles]) - { - /* Perform handle->descriptor mapping. */ - WSAEventSelect ((SOCKET) h, NULL, 0); - if (FD_ISSET (h, &handle_rfds)) - FD_SET (i, rfds); - if (FD_ISSET (h, &handle_wfds)) - FD_SET (i, wfds); - if (FD_ISSET (h, &handle_xfds)) - FD_SET (i, xfds); - } - else - { - /* Not a socket. */ - nhandles++; - if (rbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) - FD_SET (i, rfds); - if (wbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) - FD_SET (i, wfds); - if (xbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) - FD_SET (i, xfds); - } - } - - return rc; -} - -#else /* ! Native Windows. */ - -#include -#include /* NULL */ -#include -#include - -#undef select - -int -rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds, - struct timeval *timeout) -{ - int i; - - /* FreeBSD 8.2 has a bug: it does not always detect invalid fds. */ - if (nfds < 0 || nfds > FD_SETSIZE) - { - errno = EINVAL; - return -1; - } - for (i = 0; i < nfds; i++) - { - if (((rfds && FD_ISSET (i, rfds)) - || (wfds && FD_ISSET (i, wfds)) - || (xfds && FD_ISSET (i, xfds))) - && dup2 (i, i) != i) - return -1; - } - - /* Interix 3.5 has a bug: it does not support nfds == 0. */ - if (nfds == 0) - { - nfds = 1; - rfds = NULL; - wfds = NULL; - xfds = NULL; - } - return select (nfds, rfds, wfds, xfds, timeout); -} - -#endif diff --git a/src/gl/send.c b/src/gl/send.c deleted file mode 100644 index 594472ffa2..0000000000 --- a/src/gl/send.c +++ /dev/null @@ -1,49 +0,0 @@ -/* send.c --- wrappers for Windows send function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#undef send - -ssize_t -rpl_send (int fd, const void *buf, size_t len, int flags) -{ - SOCKET sock = FD_TO_SOCKET (fd); - - if (sock == INVALID_SOCKET) - { - errno = EBADF; - return -1; - } - else - { - int r = send (sock, buf, len, flags); - if (r < 0) - set_winsock_errno (); - - return r; - } -} diff --git a/src/gl/sendto.c b/src/gl/sendto.c deleted file mode 100644 index 484234532e..0000000000 --- a/src/gl/sendto.c +++ /dev/null @@ -1,50 +0,0 @@ -/* sendto.c --- wrappers for Windows sendto function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#undef sendto - -ssize_t -rpl_sendto (int fd, const void *buf, size_t len, int flags, - const struct sockaddr *to, socklen_t tolen) -{ - SOCKET sock = FD_TO_SOCKET (fd); - - if (sock == INVALID_SOCKET) - { - errno = EBADF; - return -1; - } - else - { - int r = sendto (sock, buf, len, flags, to, tolen); - if (r < 0) - set_winsock_errno (); - - return r; - } -} diff --git a/src/gl/setenv.c b/src/gl/setenv.c deleted file mode 100644 index 85c32cb224..0000000000 --- a/src/gl/setenv.c +++ /dev/null @@ -1,390 +0,0 @@ -/* Copyright (C) 1992, 1995-2003, 2005-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#if !_LIBC -/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc - optimizes away the name == NULL test below. */ -# define _GL_ARG_NONNULL(params) - -# define _GL_USE_STDLIB_ALLOC 1 -# include -#endif - -#include - -/* Specification. */ -#include - -#include -#ifndef __set_errno -# define __set_errno(ev) ((errno) = (ev)) -#endif - -#include -#if _LIBC || HAVE_UNISTD_H -# include -#endif - -#if !_LIBC -# include "malloca.h" -#endif - -#if _LIBC || !HAVE_SETENV - -#if !_LIBC -# define __environ environ -#endif - -#if _LIBC -/* This lock protects against simultaneous modifications of 'environ'. */ -# include -__libc_lock_define_initialized (static, envlock) -# define LOCK __libc_lock_lock (envlock) -# define UNLOCK __libc_lock_unlock (envlock) -#else -# define LOCK -# define UNLOCK -#endif - -/* In the GNU C library we must keep the namespace clean. */ -#ifdef _LIBC -# define setenv __setenv -# define clearenv __clearenv -# define tfind __tfind -# define tsearch __tsearch -#endif - -/* In the GNU C library implementation we try to be more clever and - allow arbitrarily many changes of the environment given that the used - values are from a small set. Outside glibc this will eat up all - memory after a while. */ -#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \ - && defined __GNUC__) -# define USE_TSEARCH 1 -# include -typedef int (*compar_fn_t) (const void *, const void *); - -/* This is a pointer to the root of the search tree with the known - values. */ -static void *known_values; - -# define KNOWN_VALUE(Str) \ - ({ \ - void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \ - value != NULL ? *(char **) value : NULL; \ - }) -# define STORE_VALUE(Str) \ - tsearch (Str, &known_values, (compar_fn_t) strcmp) - -#else -# undef USE_TSEARCH - -# define KNOWN_VALUE(Str) NULL -# define STORE_VALUE(Str) do { } while (0) - -#endif - - -/* If this variable is not a null pointer we allocated the current - environment. */ -static char **last_environ; - - -/* This function is used by 'setenv' and 'putenv'. The difference between - the two functions is that for the former must create a new string which - is then placed in the environment, while the argument of 'putenv' - must be used directly. This is all complicated by the fact that we try - to reuse values once generated for a 'setenv' call since we can never - free the strings. */ -int -__add_to_environ (const char *name, const char *value, const char *combined, - int replace) -{ - char **ep; - size_t size; - const size_t namelen = strlen (name); - const size_t vallen = value != NULL ? strlen (value) + 1 : 0; - - LOCK; - - /* We have to get the pointer now that we have the lock and not earlier - since another thread might have created a new environment. */ - ep = __environ; - - size = 0; - if (ep != NULL) - { - for (; *ep != NULL; ++ep) - if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') - break; - else - ++size; - } - - if (ep == NULL || *ep == NULL) - { - char **new_environ; -#ifdef USE_TSEARCH - char *new_value; -#endif - - /* We allocated this space; we can extend it. */ - new_environ = - (char **) (last_environ == NULL - ? malloc ((size + 2) * sizeof (char *)) - : realloc (last_environ, (size + 2) * sizeof (char *))); - if (new_environ == NULL) - { - /* It's easier to set errno to ENOMEM than to rely on the - 'malloc-posix' and 'realloc-posix' gnulib modules. */ - __set_errno (ENOMEM); - UNLOCK; - return -1; - } - - /* If the whole entry is given add it. */ - if (combined != NULL) - /* We must not add the string to the search tree since it belongs - to the user. */ - new_environ[size] = (char *) combined; - else - { - /* See whether the value is already known. */ -#ifdef USE_TSEARCH -# ifdef _LIBC - new_value = (char *) alloca (namelen + 1 + vallen); - __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), - value, vallen); -# else - new_value = (char *) malloca (namelen + 1 + vallen); - if (new_value == NULL) - { - __set_errno (ENOMEM); - UNLOCK; - return -1; - } - memcpy (new_value, name, namelen); - new_value[namelen] = '='; - memcpy (&new_value[namelen + 1], value, vallen); -# endif - - new_environ[size] = KNOWN_VALUE (new_value); - if (new_environ[size] == NULL) -#endif - { - new_environ[size] = (char *) malloc (namelen + 1 + vallen); - if (new_environ[size] == NULL) - { -#if defined USE_TSEARCH && !defined _LIBC - freea (new_value); -#endif - __set_errno (ENOMEM); - UNLOCK; - return -1; - } - -#ifdef USE_TSEARCH - memcpy (new_environ[size], new_value, namelen + 1 + vallen); -#else - memcpy (new_environ[size], name, namelen); - new_environ[size][namelen] = '='; - memcpy (&new_environ[size][namelen + 1], value, vallen); -#endif - /* And save the value now. We cannot do this when we remove - the string since then we cannot decide whether it is a - user string or not. */ - STORE_VALUE (new_environ[size]); - } -#if defined USE_TSEARCH && !defined _LIBC - freea (new_value); -#endif - } - - if (__environ != last_environ) - memcpy ((char *) new_environ, (char *) __environ, - size * sizeof (char *)); - - new_environ[size + 1] = NULL; - - last_environ = __environ = new_environ; - } - else if (replace) - { - char *np; - - /* Use the user string if given. */ - if (combined != NULL) - np = (char *) combined; - else - { -#ifdef USE_TSEARCH - char *new_value; -# ifdef _LIBC - new_value = alloca (namelen + 1 + vallen); - __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), - value, vallen); -# else - new_value = malloca (namelen + 1 + vallen); - if (new_value == NULL) - { - __set_errno (ENOMEM); - UNLOCK; - return -1; - } - memcpy (new_value, name, namelen); - new_value[namelen] = '='; - memcpy (&new_value[namelen + 1], value, vallen); -# endif - - np = KNOWN_VALUE (new_value); - if (np == NULL) -#endif - { - np = (char *) malloc (namelen + 1 + vallen); - if (np == NULL) - { -#if defined USE_TSEARCH && !defined _LIBC - freea (new_value); -#endif - __set_errno (ENOMEM); - UNLOCK; - return -1; - } - -#ifdef USE_TSEARCH - memcpy (np, new_value, namelen + 1 + vallen); -#else - memcpy (np, name, namelen); - np[namelen] = '='; - memcpy (&np[namelen + 1], value, vallen); -#endif - /* And remember the value. */ - STORE_VALUE (np); - } -#if defined USE_TSEARCH && !defined _LIBC - freea (new_value); -#endif - } - - *ep = np; - } - - UNLOCK; - - return 0; -} - -int -setenv (const char *name, const char *value, int replace) -{ - if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) - { - __set_errno (EINVAL); - return -1; - } - - return __add_to_environ (name, value, NULL, replace); -} - -/* The 'clearenv' was planned to be added to POSIX.1 but probably - never made it. Nevertheless the POSIX.9 standard (POSIX bindings - for Fortran 77) requires this function. */ -int -clearenv (void) -{ - LOCK; - - if (__environ == last_environ && __environ != NULL) - { - /* We allocated this environment so we can free it. */ - free (__environ); - last_environ = NULL; - } - - /* Clear the environment pointer removes the whole environment. */ - __environ = NULL; - - UNLOCK; - - return 0; -} - -#ifdef _LIBC -static void -free_mem (void) -{ - /* Remove all traces. */ - clearenv (); - - /* Now remove the search tree. */ - __tdestroy (known_values, free); - known_values = NULL; -} -text_set_element (__libc_subfreeres, free_mem); - - -# undef setenv -# undef clearenv -weak_alias (__setenv, setenv) -weak_alias (__clearenv, clearenv) -#endif - -#endif /* _LIBC || !HAVE_SETENV */ - -/* The rest of this file is called into use when replacing an existing - but buggy setenv. Known bugs include failure to diagnose invalid - name, and consuming a leading '=' from value. */ -#if HAVE_SETENV - -# undef setenv -# if !HAVE_DECL_SETENV -extern int setenv (const char *, const char *, int); -# endif -# define STREQ(a, b) (strcmp (a, b) == 0) - -int -rpl_setenv (const char *name, const char *value, int replace) -{ - int result; - if (!name || !*name || strchr (name, '=')) - { - errno = EINVAL; - return -1; - } - /* Call the real setenv even if replace is 0, in case implementation - has underlying data to update, such as when environ changes. */ - result = setenv (name, value, replace); - if (result == 0 && replace && *value == '=') - { - char *tmp = getenv (name); - if (!STREQ (tmp, value)) - { - int saved_errno; - size_t len = strlen (value); - tmp = malloca (len + 2); - /* Since leading '=' is eaten, double it up. */ - *tmp = '='; - memcpy (tmp + 1, value, len + 1); - result = setenv (name, tmp, replace); - saved_errno = errno; - freea (tmp); - errno = saved_errno; - } - } - return result; -} - -#endif /* HAVE_SETENV */ diff --git a/src/gl/setsockopt.c b/src/gl/setsockopt.c deleted file mode 100644 index af09f3250f..0000000000 --- a/src/gl/setsockopt.c +++ /dev/null @@ -1,65 +0,0 @@ -/* setsockopt.c --- wrappers for Windows setsockopt function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get struct timeval. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#undef setsockopt - -int -rpl_setsockopt (int fd, int level, int optname, const void *optval, socklen_t optlen) -{ - SOCKET sock = FD_TO_SOCKET (fd); - int r; - - if (sock == INVALID_SOCKET) - { - errno = EBADF; - return -1; - } - else - { - if (level == SOL_SOCKET - && (optname == SO_RCVTIMEO || optname == SO_SNDTIMEO)) - { - const struct timeval *tv = optval; - int milliseconds = tv->tv_sec * 1000 + tv->tv_usec / 1000; - optval = &milliseconds; - r = setsockopt (sock, level, optname, optval, sizeof (int)); - } - else - { - r = setsockopt (sock, level, optname, optval, optlen); - } - - if (r < 0) - set_winsock_errno (); - - return r; - } -} diff --git a/src/gl/shutdown.c b/src/gl/shutdown.c deleted file mode 100644 index 9dd4df6ecf..0000000000 --- a/src/gl/shutdown.c +++ /dev/null @@ -1,49 +0,0 @@ -/* shutdown.c --- wrappers for Windows shutdown function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#undef shutdown - -int -rpl_shutdown (int fd, int how) -{ - SOCKET sock = FD_TO_SOCKET (fd); - - if (sock == INVALID_SOCKET) - { - errno = EBADF; - return -1; - } - else - { - int r = shutdown (sock, how); - if (r < 0) - set_winsock_errno (); - - return r; - } -} diff --git a/src/gl/signal.in.h b/src/gl/signal.in.h deleted file mode 100644 index ab0a049f8b..0000000000 --- a/src/gl/signal.in.h +++ /dev/null @@ -1,463 +0,0 @@ -/* A GNU-like . - - Copyright (C) 2006-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) -/* Special invocation convention: - - Inside glibc header files. - - On glibc systems we have a sequence of nested includes - -> -> . - In this situation, the functions are not yet declared, therefore we cannot - provide the C++ aliases. - - On glibc systems with GCC 4.3 we have a sequence of nested includes - -> -> -> . - In this situation, some of the functions are not yet declared, therefore - we cannot provide the C++ aliases. */ - -# @INCLUDE_NEXT@ @NEXT_SIGNAL_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_SIGNAL_H - -#define _GL_ALREADY_INCLUDING_SIGNAL_H - -/* Define pid_t, uid_t. - Also, mingw defines sigset_t not in , but in . - On Solaris 10, includes , which eventually includes - us; so include now, before the second inclusion guard. */ -#include - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_SIGNAL_H@ - -#undef _GL_ALREADY_INCLUDING_SIGNAL_H - -#ifndef _@GUARD_PREFIX@_SIGNAL_H -#define _@GUARD_PREFIX@_SIGNAL_H - -/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6, Android - declare pthread_sigmask in , not in . - But avoid namespace pollution on glibc systems.*/ -#if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \ - && ((defined __APPLE__ && defined __MACH__) \ - || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ \ - || defined __sun || defined __ANDROID__) \ - && ! defined __GLIBC__ -# include -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -/* On AIX, sig_atomic_t already includes volatile. C99 requires that - 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. - Hence, redefine this to a non-volatile type as needed. */ -#if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ -# if !GNULIB_defined_sig_atomic_t -typedef int rpl_sig_atomic_t; -# undef sig_atomic_t -# define sig_atomic_t rpl_sig_atomic_t -# define GNULIB_defined_sig_atomic_t 1 -# endif -#endif - -/* A set or mask of signals. */ -#if !@HAVE_SIGSET_T@ -# if !GNULIB_defined_sigset_t -typedef unsigned int sigset_t; -# define GNULIB_defined_sigset_t 1 -# endif -#endif - -/* Define sighandler_t, the type of signal handlers. A GNU extension. */ -#if !@HAVE_SIGHANDLER_T@ -# ifdef __cplusplus -extern "C" { -# endif -# if !GNULIB_defined_sighandler_t -typedef void (*sighandler_t) (int); -# define GNULIB_defined_sighandler_t 1 -# endif -# ifdef __cplusplus -} -# endif -#endif - - -#if @GNULIB_SIGNAL_H_SIGPIPE@ -# ifndef SIGPIPE -/* Define SIGPIPE to a value that does not overlap with other signals. */ -# define SIGPIPE 13 -# define GNULIB_defined_SIGPIPE 1 -/* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', - 'write', 'stdio'. */ -# endif -#endif - - -/* Maximum signal number + 1. */ -#ifndef NSIG -# if defined __TANDEM -# define NSIG 32 -# endif -#endif - - -#if @GNULIB_PTHREAD_SIGMASK@ -# if @REPLACE_PTHREAD_SIGMASK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef pthread_sigmask -# define pthread_sigmask rpl_pthread_sigmask -# endif -_GL_FUNCDECL_RPL (pthread_sigmask, int, - (int how, const sigset_t *new_mask, sigset_t *old_mask)); -_GL_CXXALIAS_RPL (pthread_sigmask, int, - (int how, const sigset_t *new_mask, sigset_t *old_mask)); -# else -# if !@HAVE_PTHREAD_SIGMASK@ -_GL_FUNCDECL_SYS (pthread_sigmask, int, - (int how, const sigset_t *new_mask, sigset_t *old_mask)); -# endif -_GL_CXXALIAS_SYS (pthread_sigmask, int, - (int how, const sigset_t *new_mask, sigset_t *old_mask)); -# endif -_GL_CXXALIASWARN (pthread_sigmask); -#elif defined GNULIB_POSIXCHECK -# undef pthread_sigmask -# if HAVE_RAW_DECL_PTHREAD_SIGMASK -_GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - " - "use gnulib module pthread_sigmask for portability"); -# endif -#endif - - -#if @GNULIB_RAISE@ -# if @REPLACE_RAISE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef raise -# define raise rpl_raise -# endif -_GL_FUNCDECL_RPL (raise, int, (int sig)); -_GL_CXXALIAS_RPL (raise, int, (int sig)); -# else -# if !@HAVE_RAISE@ -_GL_FUNCDECL_SYS (raise, int, (int sig)); -# endif -_GL_CXXALIAS_SYS (raise, int, (int sig)); -# endif -_GL_CXXALIASWARN (raise); -#elif defined GNULIB_POSIXCHECK -# undef raise -/* Assume raise is always declared. */ -_GL_WARN_ON_USE (raise, "raise can crash on native Windows - " - "use gnulib module raise for portability"); -#endif - - -#if @GNULIB_SIGPROCMASK@ -# if !@HAVE_POSIX_SIGNALBLOCKING@ - -# ifndef GNULIB_defined_signal_blocking -# define GNULIB_defined_signal_blocking 1 -# endif - -/* Maximum signal number + 1. */ -# ifndef NSIG -# define NSIG 32 -# endif - -/* This code supports only 32 signals. */ -# if !GNULIB_defined_verify_NSIG_constraint -typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1]; -# define GNULIB_defined_verify_NSIG_constraint 1 -# endif - -# endif - -/* When also using extern inline, suppress the use of static inline in - standard headers of problematic Apple configurations, as Libc at - least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., - . - Perhaps Apple will fix this some day. */ -#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ - && (defined __i386__ || defined __x86_64__)) -# undef sigaddset -# undef sigdelset -# undef sigemptyset -# undef sigfillset -# undef sigismember -#endif - -/* Test whether a given signal is contained in a signal set. */ -# if @HAVE_POSIX_SIGNALBLOCKING@ -/* This function is defined as a macro on Mac OS X. */ -# if defined __cplusplus && defined GNULIB_NAMESPACE -# undef sigismember -# endif -# else -_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig)); -_GL_CXXALIASWARN (sigismember); - -/* Initialize a signal set to the empty set. */ -# if @HAVE_POSIX_SIGNALBLOCKING@ -/* This function is defined as a macro on Mac OS X. */ -# if defined __cplusplus && defined GNULIB_NAMESPACE -# undef sigemptyset -# endif -# else -_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set)); -_GL_CXXALIASWARN (sigemptyset); - -/* Add a signal to a signal set. */ -# if @HAVE_POSIX_SIGNALBLOCKING@ -/* This function is defined as a macro on Mac OS X. */ -# if defined __cplusplus && defined GNULIB_NAMESPACE -# undef sigaddset -# endif -# else -_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig)); -_GL_CXXALIASWARN (sigaddset); - -/* Remove a signal from a signal set. */ -# if @HAVE_POSIX_SIGNALBLOCKING@ -/* This function is defined as a macro on Mac OS X. */ -# if defined __cplusplus && defined GNULIB_NAMESPACE -# undef sigdelset -# endif -# else -_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig)); -_GL_CXXALIASWARN (sigdelset); - -/* Fill a signal set with all possible signals. */ -# if @HAVE_POSIX_SIGNALBLOCKING@ -/* This function is defined as a macro on Mac OS X. */ -# if defined __cplusplus && defined GNULIB_NAMESPACE -# undef sigfillset -# endif -# else -_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set)); -_GL_CXXALIASWARN (sigfillset); - -/* Return the set of those blocked signals that are pending. */ -# if !@HAVE_POSIX_SIGNALBLOCKING@ -_GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set)); -_GL_CXXALIASWARN (sigpending); - -/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. - Then, if SET is not NULL, affect the current set of blocked signals by - combining it with *SET as indicated in OPERATION. - In this implementation, you are not allowed to change a signal handler - while the signal is blocked. */ -# if !@HAVE_POSIX_SIGNALBLOCKING@ -# define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ -# define SIG_SETMASK 1 /* blocked_set = *set; */ -# define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ -_GL_FUNCDECL_SYS (sigprocmask, int, - (int operation, const sigset_t *set, sigset_t *old_set)); -# endif -_GL_CXXALIAS_SYS (sigprocmask, int, - (int operation, const sigset_t *set, sigset_t *old_set)); -_GL_CXXALIASWARN (sigprocmask); - -/* Install the handler FUNC for signal SIG, and return the previous - handler. */ -# ifdef __cplusplus -extern "C" { -# endif -# if !GNULIB_defined_function_taking_int_returning_void_t -typedef void (*_gl_function_taking_int_returning_void_t) (int); -# define GNULIB_defined_function_taking_int_returning_void_t 1 -# endif -# ifdef __cplusplus -} -# endif -# if !@HAVE_POSIX_SIGNALBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define signal rpl_signal -# endif -_GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t, - (int sig, _gl_function_taking_int_returning_void_t func)); -_GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t, - (int sig, _gl_function_taking_int_returning_void_t func)); -# else -_GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, - (int sig, _gl_function_taking_int_returning_void_t func)); -# endif -_GL_CXXALIASWARN (signal); - -# if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE -/* Raise signal SIGPIPE. */ -_GL_EXTERN_C int _gl_raise_SIGPIPE (void); -# endif - -#elif defined GNULIB_POSIXCHECK -# undef sigaddset -# if HAVE_RAW_DECL_SIGADDSET -_GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - " - "use the gnulib module sigprocmask for portability"); -# endif -# undef sigdelset -# if HAVE_RAW_DECL_SIGDELSET -_GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - " - "use the gnulib module sigprocmask for portability"); -# endif -# undef sigemptyset -# if HAVE_RAW_DECL_SIGEMPTYSET -_GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - " - "use the gnulib module sigprocmask for portability"); -# endif -# undef sigfillset -# if HAVE_RAW_DECL_SIGFILLSET -_GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - " - "use the gnulib module sigprocmask for portability"); -# endif -# undef sigismember -# if HAVE_RAW_DECL_SIGISMEMBER -_GL_WARN_ON_USE (sigismember, "sigismember is unportable - " - "use the gnulib module sigprocmask for portability"); -# endif -# undef sigpending -# if HAVE_RAW_DECL_SIGPENDING -_GL_WARN_ON_USE (sigpending, "sigpending is unportable - " - "use the gnulib module sigprocmask for portability"); -# endif -# undef sigprocmask -# if HAVE_RAW_DECL_SIGPROCMASK -_GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - " - "use the gnulib module sigprocmask for portability"); -# endif -#endif /* @GNULIB_SIGPROCMASK@ */ - - -#if @GNULIB_SIGACTION@ -# if !@HAVE_SIGACTION@ - -# if !@HAVE_SIGINFO_T@ - -# if !GNULIB_defined_siginfo_types - -/* Present to allow compilation, but unsupported by gnulib. */ -union sigval -{ - int sival_int; - void *sival_ptr; -}; - -/* Present to allow compilation, but unsupported by gnulib. */ -struct siginfo_t -{ - int si_signo; - int si_code; - int si_errno; - pid_t si_pid; - uid_t si_uid; - void *si_addr; - int si_status; - long si_band; - union sigval si_value; -}; -typedef struct siginfo_t siginfo_t; - -# define GNULIB_defined_siginfo_types 1 -# endif - -# endif /* !@HAVE_SIGINFO_T@ */ - -/* We assume that platforms which lack the sigaction() function also lack - the 'struct sigaction' type, and vice versa. */ - -# if !GNULIB_defined_struct_sigaction - -struct sigaction -{ - union - { - void (*_sa_handler) (int); - /* Present to allow compilation, but unsupported by gnulib. POSIX - says that implementations may, but not must, make sa_sigaction - overlap with sa_handler, but we know of no implementation where - they do not overlap. */ - void (*_sa_sigaction) (int, siginfo_t *, void *); - } _sa_func; - sigset_t sa_mask; - /* Not all POSIX flags are supported. */ - int sa_flags; -}; -# define sa_handler _sa_func._sa_handler -# define sa_sigaction _sa_func._sa_sigaction -/* Unsupported flags are not present. */ -# define SA_RESETHAND 1 -# define SA_NODEFER 2 -# define SA_RESTART 4 - -# define GNULIB_defined_struct_sigaction 1 -# endif - -_GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict, - struct sigaction *restrict)); - -# elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ - -# define sa_sigaction sa_handler - -# endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */ - -_GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict, - struct sigaction *restrict)); -_GL_CXXALIASWARN (sigaction); - -#elif defined GNULIB_POSIXCHECK -# undef sigaction -# if HAVE_RAW_DECL_SIGACTION -_GL_WARN_ON_USE (sigaction, "sigaction is unportable - " - "use the gnulib module sigaction for portability"); -# endif -#endif - -/* Some systems don't have SA_NODEFER. */ -#ifndef SA_NODEFER -# define SA_NODEFER 0 -#endif - - -#endif /* _@GUARD_PREFIX@_SIGNAL_H */ -#endif /* _@GUARD_PREFIX@_SIGNAL_H */ -#endif diff --git a/src/gl/size_max.h b/src/gl/size_max.h deleted file mode 100644 index 2f2792c233..0000000000 --- a/src/gl/size_max.h +++ /dev/null @@ -1,30 +0,0 @@ -/* size_max.h -- declare SIZE_MAX through system headers - Copyright (C) 2005-2006, 2009-2016 Free Software Foundation, Inc. - Written by Simon Josefsson. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef GNULIB_SIZE_MAX_H -#define GNULIB_SIZE_MAX_H - -/* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ -# include -/* Get SIZE_MAX declaration on systems like glibc 2. */ -# if HAVE_STDINT_H -# include -# endif -/* On systems where these include files don't define it, SIZE_MAX is defined - in config.h. */ - -#endif /* GNULIB_SIZE_MAX_H */ diff --git a/src/gl/snprintf.c b/src/gl/snprintf.c deleted file mode 100644 index 7cd89af871..0000000000 --- a/src/gl/snprintf.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Formatted output to strings. - Copyright (C) 2004, 2006-2016 Free Software Foundation, Inc. - Written by Simon Josefsson and Paul Eggert. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#include - -/* Specification. */ -#include - -#include -#include -#include -#include -#include - -#include "vasnprintf.h" - -/* Print formatted output to string STR. Similar to sprintf, but - additional length SIZE limit how much is written into STR. Returns - string length of formatted string (which may be larger than SIZE). - STR may be NULL, in which case nothing will be written. On error, - return a negative value. */ -int -snprintf (char *str, size_t size, const char *format, ...) -{ - char *output; - size_t len; - size_t lenbuf = size; - va_list args; - - va_start (args, format); - output = vasnprintf (str, &lenbuf, format, args); - len = lenbuf; - va_end (args); - - if (!output) - return -1; - - if (output != str) - { - if (size) - { - size_t pruned_len = (len < size ? len : size - 1); - memcpy (str, output, pruned_len); - str[pruned_len] = '\0'; - } - - free (output); - } - - if (INT_MAX < len) - { - errno = EOVERFLOW; - return -1; - } - - return len; -} diff --git a/src/gl/socket.c b/src/gl/socket.c deleted file mode 100644 index 4ccec4b424..0000000000 --- a/src/gl/socket.c +++ /dev/null @@ -1,49 +0,0 @@ -/* socket.c --- wrappers for Windows socket function - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -#define WIN32_LEAN_AND_MEAN -/* Get winsock2.h. */ -#include - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -#include "sockets.h" - -int -rpl_socket (int domain, int type, int protocol) -{ - SOCKET fh; - - gl_sockets_startup (SOCKETS_1_1); - - /* We have to use WSASocket() to create non-overlapped IO sockets. - Overlapped IO sockets cannot be used with read/write. */ - fh = WSASocket (domain, type, protocol, NULL, 0, 0); - - if (fh == INVALID_SOCKET) - { - set_winsock_errno (); - return -1; - } - else - return SOCKET_TO_FD (fh); -} diff --git a/src/gl/sockets.c b/src/gl/sockets.c deleted file mode 100644 index abfab029fc..0000000000 --- a/src/gl/sockets.c +++ /dev/null @@ -1,157 +0,0 @@ -/* sockets.c --- wrappers for Windows socket functions - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Simon Josefsson */ - -#include - -/* Specification. */ -#include "sockets.h" - -#if WINDOWS_SOCKETS - -/* This includes winsock2.h on MinGW. */ -# include - -# include "fd-hook.h" -# include "msvc-nothrow.h" - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -# include "w32sock.h" - -static int -close_fd_maybe_socket (const struct fd_hook *remaining_list, - gl_close_fn primary, - int fd) -{ - /* Note about multithread-safety: There is a race condition where, between - our calls to closesocket() and the primary close(), some other thread - could make system calls that allocate precisely the same HANDLE value - as sock; then the primary close() would call CloseHandle() on it. */ - SOCKET sock; - WSANETWORKEVENTS ev; - - /* Test whether fd refers to a socket. */ - sock = FD_TO_SOCKET (fd); - ev.lNetworkEvents = 0xDEADBEEF; - WSAEnumNetworkEvents (sock, NULL, &ev); - if (ev.lNetworkEvents != 0xDEADBEEF) - { - /* fd refers to a socket. */ - /* FIXME: other applications, like squid, use an undocumented - _free_osfhnd free function. But this is not enough: The 'osfile' - flags for fd also needs to be cleared, but it is hard to access it. - Instead, here we just close twice the file descriptor. */ - if (closesocket (sock)) - { - set_winsock_errno (); - return -1; - } - else - { - /* This call frees the file descriptor and does a - CloseHandle ((HANDLE) _get_osfhandle (fd)), which fails. */ - _close (fd); - return 0; - } - } - else - /* Some other type of file descriptor. */ - return execute_close_hooks (remaining_list, primary, fd); -} - -static int -ioctl_fd_maybe_socket (const struct fd_hook *remaining_list, - gl_ioctl_fn primary, - int fd, int request, void *arg) -{ - SOCKET sock; - WSANETWORKEVENTS ev; - - /* Test whether fd refers to a socket. */ - sock = FD_TO_SOCKET (fd); - ev.lNetworkEvents = 0xDEADBEEF; - WSAEnumNetworkEvents (sock, NULL, &ev); - if (ev.lNetworkEvents != 0xDEADBEEF) - { - /* fd refers to a socket. */ - if (ioctlsocket (sock, request, arg) < 0) - { - set_winsock_errno (); - return -1; - } - else - return 0; - } - else - /* Some other type of file descriptor. */ - return execute_ioctl_hooks (remaining_list, primary, fd, request, arg); -} - -static struct fd_hook fd_sockets_hook; - -static int initialized_sockets_version /* = 0 */; - -#endif /* WINDOWS_SOCKETS */ - -int -gl_sockets_startup (int version _GL_UNUSED) -{ -#if WINDOWS_SOCKETS - if (version > initialized_sockets_version) - { - WSADATA data; - int err; - - err = WSAStartup (version, &data); - if (err != 0) - return 1; - - if (data.wVersion != version) - { - WSACleanup (); - return 2; - } - - if (initialized_sockets_version == 0) - register_fd_hook (close_fd_maybe_socket, ioctl_fd_maybe_socket, - &fd_sockets_hook); - - initialized_sockets_version = version; - } -#endif - - return 0; -} - -int -gl_sockets_cleanup (void) -{ -#if WINDOWS_SOCKETS - int err; - - initialized_sockets_version = 0; - - unregister_fd_hook (&fd_sockets_hook); - - err = WSACleanup (); - if (err != 0) - return 1; -#endif - - return 0; -} diff --git a/src/gl/sockets.h b/src/gl/sockets.h deleted file mode 100644 index 01a68d07fd..0000000000 --- a/src/gl/sockets.h +++ /dev/null @@ -1,62 +0,0 @@ -/* sockets.h - wrappers for Windows socket functions - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Simon Josefsson */ - -#ifndef SOCKETS_H -# define SOCKETS_H 1 - -#define SOCKETS_1_0 0x0001 -#define SOCKETS_1_1 0x0101 -#define SOCKETS_2_0 0x0002 -#define SOCKETS_2_1 0x0102 -#define SOCKETS_2_2 0x0202 - -int gl_sockets_startup (int version) -#if !WINDOWS_SOCKETS - _GL_ATTRIBUTE_CONST -#endif - ; - -int gl_sockets_cleanup (void) -#if !WINDOWS_SOCKETS - _GL_ATTRIBUTE_CONST -#endif - ; - -/* This function is useful it you create a socket using gnulib's - Winsock wrappers but needs to pass on the socket handle to some - other library that only accepts sockets. */ -#if WINDOWS_SOCKETS - -#include - -#include "msvc-nothrow.h" - -static inline SOCKET -gl_fd_to_handle (int fd) -{ - return _get_osfhandle (fd); -} - -#else - -#define gl_fd_to_handle(x) (x) - -#endif /* WINDOWS_SOCKETS */ - -#endif /* SOCKETS_H */ diff --git a/src/gl/stdalign.in.h b/src/gl/stdalign.in.h deleted file mode 100644 index 12f8a15b31..0000000000 --- a/src/gl/stdalign.in.h +++ /dev/null @@ -1,121 +0,0 @@ -/* A substitute for ISO C11 . - - Copyright 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Written by Paul Eggert and Bruno Haible. */ - -#ifndef _GL_STDALIGN_H -#define _GL_STDALIGN_H - -/* ISO C11 for platforms that lack it. - - References: - ISO C11 (latest free draft - ) - sections 6.5.3.4, 6.7.5, 7.15. - C++11 (latest free draft - ) - section 18.10. */ - -/* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment - requirement of a structure member (i.e., slot or field) that is of - type TYPE, as an integer constant expression. - - This differs from GCC's __alignof__ operator, which can yield a - better-performing alignment for an object of that type. For - example, on x86 with GCC, __alignof__ (double) and __alignof__ - (long long) are 8, whereas alignof (double) and alignof (long long) - are 4 unless the option '-malign-double' is used. - - The result cannot be used as a value for an 'enum' constant, if you - want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. - - Include for offsetof. */ -#include - -/* FreeBSD 9.1 , included by and lots of other - standard headers, defines conflicting implementations of _Alignas - and _Alignof that are no better than ours; override them. */ -#undef _Alignas -#undef _Alignof - -/* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023 - . */ -#if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \ - || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9))) -# ifdef __cplusplus -# if 201103 <= __cplusplus -# define _Alignof(type) alignof (type) -# else - template struct __alignof_helper { char __a; __t __b; }; -# define _Alignof(type) offsetof (__alignof_helper, __b) -# endif -# else -# define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) -# endif -#endif -#if ! (defined __cplusplus && 201103 <= __cplusplus) -# define alignof _Alignof -#endif -#define __alignof_is_defined 1 - -/* alignas (A), also known as _Alignas (A), aligns a variable or type - to the alignment A, where A is an integer constant expression. For - example: - - int alignas (8) foo; - struct s { int a; int alignas (8) bar; }; - - aligns the address of FOO and the offset of BAR to be multiples of 8. - - A should be a power of two that is at least the type's alignment - and at most the implementation's alignment limit. This limit is - 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable - to MSVC through at least version 10.0, A should be an integer - constant, as MSVC does not support expressions such as 1 << 3. - To be portable to Sun C 5.11, do not align auto variables to - anything stricter than their default alignment. - - The following C11 requirements are not supported here: - - - If A is zero, alignas has no effect. - - alignas can be used multiple times; the strictest one wins. - - alignas (TYPE) is equivalent to alignas (alignof (TYPE)). - - */ - -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 -# if defined __cplusplus && 201103 <= __cplusplus -# define _Alignas(a) alignas (a) -# elif ((defined __APPLE__ && defined __MACH__ \ - ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ - : __GNUC__) \ - || 061200 <= __HP_cc || 061200 <= __HP_aCC \ - || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__) -# define _Alignas(a) __attribute__ ((__aligned__ (a))) -# elif 1300 <= _MSC_VER -# define _Alignas(a) __declspec (align (a)) -# endif -#endif -#if ((defined _Alignas && ! (defined __cplusplus && 201103 <= __cplusplus)) \ - || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) -# define alignas _Alignas -#endif -#if defined alignas || (defined __cplusplus && 201103 <= __cplusplus) -# define __alignas_is_defined 1 -#endif - -#endif /* _GL_STDALIGN_H */ diff --git a/src/gl/stdbool.in.h b/src/gl/stdbool.in.h deleted file mode 100644 index 7ecf203e75..0000000000 --- a/src/gl/stdbool.in.h +++ /dev/null @@ -1,132 +0,0 @@ -/* Copyright (C) 2001-2003, 2006-2016 Free Software Foundation, Inc. - Written by Bruno Haible , 2001. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _GL_STDBOOL_H -#define _GL_STDBOOL_H - -/* ISO C 99 for platforms that lack it. */ - -/* Usage suggestions: - - Programs that use should be aware of some limitations - and standards compliance issues. - - Standards compliance: - - - must be #included before 'bool', 'false', 'true' - can be used. - - - You cannot assume that sizeof (bool) == 1. - - - Programs should not undefine the macros bool, true, and false, - as C99 lists that as an "obsolescent feature". - - Limitations of this substitute, when used in a C89 environment: - - - must be #included before the '_Bool' type can be used. - - - You cannot assume that _Bool is a typedef; it might be a macro. - - - Bit-fields of type 'bool' are not supported. Portable code - should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. - - - In C99, casts and automatic conversions to '_Bool' or 'bool' are - performed in such a way that every nonzero value gets converted - to 'true', and zero gets converted to 'false'. This doesn't work - with this substitute. With this substitute, only the values 0 and 1 - give the expected result when converted to _Bool' or 'bool'. - - - C99 allows the use of (_Bool)0.0 in constant expressions, but - this substitute cannot always provide this property. - - Also, it is suggested that programs use 'bool' rather than '_Bool'; - this isn't required, but 'bool' is more common. */ - - -/* 7.16. Boolean type and values */ - -/* BeOS already #defines false 0, true 1. We use the same - definitions below, but temporarily we have to #undef them. */ -#if defined __BEOS__ && !defined __HAIKU__ -# include /* defines bool but not _Bool */ -# undef false -# undef true -#endif - -#ifdef __cplusplus -# define _Bool bool -# define bool bool -#else -# if defined __BEOS__ && !defined __HAIKU__ - /* A compiler known to have 'bool'. */ - /* If the compiler already has both 'bool' and '_Bool', we can assume they - are the same types. */ -# if !@HAVE__BOOL@ -typedef bool _Bool; -# endif -# else -# if !defined __GNUC__ - /* If @HAVE__BOOL@: - Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when - the built-in _Bool type is used. See - http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html - http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html - Similar bugs are likely with other compilers as well; this file - wouldn't be used if was working. - So we override the _Bool type. - If !@HAVE__BOOL@: - Need to define _Bool ourselves. As 'signed char' or as an enum type? - Use of a typedef, with SunPRO C, leads to a stupid - "warning: _Bool is a keyword in ISO C99". - Use of an enum type, with IRIX cc, leads to a stupid - "warning(1185): enumerated type mixed with another type". - Even the existence of an enum type, without a typedef, - "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. - The only benefit of the enum, debuggability, is not important - with these compilers. So use 'signed char' and no enum. */ -# define _Bool signed char -# else - /* With this compiler, trust the _Bool type if the compiler has it. */ -# if !@HAVE__BOOL@ - /* For the sake of symbolic names in gdb, define true and false as - enum constants, not only as macros. - It is tempting to write - typedef enum { false = 0, true = 1 } _Bool; - so that gdb prints values of type 'bool' symbolically. But then - values of type '_Bool' might promote to 'int' or 'unsigned int' - (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' - (see ISO C 99 6.3.1.1.(2)). So add a negative value to the - enum; this ensures that '_Bool' promotes to 'int'. */ -typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; -# endif -# endif -# endif -# define bool _Bool -#endif - -/* The other macros must be usable in preprocessor directives. */ -#ifdef __cplusplus -# define false false -# define true true -#else -# define false 0 -# define true 1 -#endif - -#define __bool_true_false_are_defined 1 - -#endif /* _GL_STDBOOL_H */ diff --git a/src/gl/stddef.in.h b/src/gl/stddef.in.h deleted file mode 100644 index f4c4a1070d..0000000000 --- a/src/gl/stddef.in.h +++ /dev/null @@ -1,110 +0,0 @@ -/* A substitute for POSIX 2008 , for platforms that have issues. - - Copyright (C) 2009-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Written by Eric Blake. */ - -/* - * POSIX 2008 for platforms that have issues. - * - */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined __need_wchar_t || defined __need_size_t \ - || defined __need_ptrdiff_t || defined __need_NULL \ - || defined __need_wint_t -/* Special invocation convention inside gcc header files. In - particular, gcc provides a version of that blindly - redefines NULL even when __need_wint_t was defined, even though - wint_t is not normally provided by . Hence, we must - remember if special invocation has ever been used to obtain wint_t, - in which case we need to clean up NULL yet again. */ - -# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) -# ifdef __need_wint_t -# define _GL_STDDEF_WINT_T -# endif -# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ -# endif - -#else -/* Normal invocation convention. */ - -# ifndef _@GUARD_PREFIX@_STDDEF_H - -/* The include_next requires a split double-inclusion guard. */ - -# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ - -/* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ -# if (@REPLACE_NULL@ \ - && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T)) -# undef NULL -# ifdef __cplusplus - /* ISO C++ says that the macro NULL must expand to an integer constant - expression, hence '((void *) 0)' is not allowed in C++. */ -# if __GNUG__ >= 3 - /* GNU C++ has a __null macro that behaves like an integer ('int' or - 'long') but has the same size as a pointer. Use that, to avoid - warnings. */ -# define NULL __null -# else -# define NULL 0L -# endif -# else -# define NULL ((void *) 0) -# endif -# endif - -# ifndef _@GUARD_PREFIX@_STDDEF_H -# define _@GUARD_PREFIX@_STDDEF_H - -/* Some platforms lack wchar_t. */ -#if !@HAVE_WCHAR_T@ -# define wchar_t int -#endif - -/* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is - a hack in case the configure-time test was done with g++ even though - we are currently compiling with gcc. */ -#if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T) -/* On the x86, the maximum storage alignment of double, long, etc. is 4, - but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, - and the C11 standard allows this. Work around this problem by - using __alignof__ (which returns 8 for double) rather than _Alignof - (which returns 4), and align each union member accordingly. */ -# ifdef __GNUC__ -# define _GL_STDDEF_ALIGNAS(type) \ - __attribute__ ((__aligned__ (__alignof__ (type)))) -# else -# define _GL_STDDEF_ALIGNAS(type) /* */ -# endif -typedef union -{ - char *__p _GL_STDDEF_ALIGNAS (char *); - double __d _GL_STDDEF_ALIGNAS (double); - long double __ld _GL_STDDEF_ALIGNAS (long double); - long int __i _GL_STDDEF_ALIGNAS (long int); -} max_align_t; -#endif - -# endif /* _@GUARD_PREFIX@_STDDEF_H */ -# endif /* _@GUARD_PREFIX@_STDDEF_H */ -#endif /* __need_XXX */ diff --git a/src/gl/stdint.in.h b/src/gl/stdint.in.h deleted file mode 100644 index c86ab09628..0000000000 --- a/src/gl/stdint.in.h +++ /dev/null @@ -1,698 +0,0 @@ -/* Copyright (C) 2001-2002, 2004-2016 Free Software Foundation, Inc. - Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. - This file is part of gnulib. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* - * ISO C 99 for platforms that lack it. - * - */ - -#ifndef _@GUARD_PREFIX@_STDINT_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* When including a system file that in turn includes , - use the system , not our substitute. This avoids - problems with (for example) VMS, whose includes - . */ -#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H - -/* On Android (Bionic libc), includes this file before - having defined 'time_t'. Therefore in this case avoid including - other system header files; just include the system's . - Ideally we should test __BIONIC__ here, but it is only defined after - has been included; hence test __ANDROID__ instead. */ -#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H -# @INCLUDE_NEXT@ @NEXT_STDINT_H@ -#else - -/* Get those types that are already defined in other system include - files, so that we can "#define int8_t signed char" below without - worrying about a later system include file containing a "typedef - signed char int8_t;" that will get messed up by our macro. Our - macros should all be consistent with the system versions, except - for the "fast" types and macros, which we recommend against using - in public interfaces due to compiler differences. */ - -#if @HAVE_STDINT_H@ -# if defined __sgi && ! defined __c99 - /* Bypass IRIX's if in C89 mode, since it merely annoys users - with "This header file is to be used only for c99 mode compilations" - diagnostics. */ -# define __STDINT_H__ -# endif - - /* Some pre-C++11 implementations need this. */ -# ifdef __cplusplus -# ifndef __STDC_CONSTANT_MACROS -# define __STDC_CONSTANT_MACROS 1 -# endif -# ifndef __STDC_LIMIT_MACROS -# define __STDC_LIMIT_MACROS 1 -# endif -# endif - - /* Other systems may have an incomplete or buggy . - Include it before , since any "#include " - in would reinclude us, skipping our contents because - _@GUARD_PREFIX@_STDINT_H is defined. - The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_STDINT_H@ -#endif - -#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H -#define _@GUARD_PREFIX@_STDINT_H - -/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, - LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ -#include - -#if ! @HAVE_C99_STDINT_H@ - -/* defines some of the stdint.h types as well, on glibc, - IRIX 6.5, and OpenBSD 3.8 (via ). - AIX 5.2 isn't needed and causes troubles. - Mac OS X 10.4.6 includes (which is us), but - relies on the system definitions, so include - after @NEXT_STDINT_H@. */ -# if @HAVE_SYS_TYPES_H@ && ! defined _AIX -# include -# endif - -# if @HAVE_INTTYPES_H@ - /* In OpenBSD 3.8, includes , which defines - int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. - also defines intptr_t and uintptr_t. */ -# include -# elif @HAVE_SYS_INTTYPES_H@ - /* Solaris 7 has the types except the *_fast*_t types, and - the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ -# include -# endif - -# if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ - /* Linux libc4 >= 4.6.7 and libc5 have a that defines - int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is - included by . */ -# include -# endif - -# undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H - -/* Minimum and maximum values for an integer type under the usual assumption. - Return an unspecified value if BITS == 0, adding a check to pacify - picky compilers. */ - -# define _STDINT_MIN(signed, bits, zero) \ - ((signed) ? ~ _STDINT_MAX (signed, bits, zero) : (zero)) - -# define _STDINT_MAX(signed, bits, zero) \ - (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) - -#if !GNULIB_defined_stdint_types - -/* 7.18.1.1. Exact-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. */ - -# undef int8_t -# undef uint8_t -typedef signed char gl_int8_t; -typedef unsigned char gl_uint8_t; -# define int8_t gl_int8_t -# define uint8_t gl_uint8_t - -# undef int16_t -# undef uint16_t -typedef short int gl_int16_t; -typedef unsigned short int gl_uint16_t; -# define int16_t gl_int16_t -# define uint16_t gl_uint16_t - -# undef int32_t -# undef uint32_t -typedef int gl_int32_t; -typedef unsigned int gl_uint32_t; -# define int32_t gl_int32_t -# define uint32_t gl_uint32_t - -/* If the system defines INT64_MAX, assume int64_t works. That way, - if the underlying platform defines int64_t to be a 64-bit long long - int, the code below won't mistakenly define it to be a 64-bit long - int, which would mess up C++ name mangling. We must use #ifdef - rather than #if, to avoid an error with HP-UX 10.20 cc. */ - -# ifdef INT64_MAX -# define GL_INT64_T -# else -/* Do not undefine int64_t if gnulib is not being used with 64-bit - types, since otherwise it breaks platforms like Tandem/NSK. */ -# if LONG_MAX >> 31 >> 31 == 1 -# undef int64_t -typedef long int gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T -# elif defined _MSC_VER -# undef int64_t -typedef __int64 gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T -# elif @HAVE_LONG_LONG_INT@ -# undef int64_t -typedef long long int gl_int64_t; -# define int64_t gl_int64_t -# define GL_INT64_T -# endif -# endif - -# ifdef UINT64_MAX -# define GL_UINT64_T -# else -# if ULONG_MAX >> 31 >> 31 >> 1 == 1 -# undef uint64_t -typedef unsigned long int gl_uint64_t; -# define uint64_t gl_uint64_t -# define GL_UINT64_T -# elif defined _MSC_VER -# undef uint64_t -typedef unsigned __int64 gl_uint64_t; -# define uint64_t gl_uint64_t -# define GL_UINT64_T -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ -# undef uint64_t -typedef unsigned long long int gl_uint64_t; -# define uint64_t gl_uint64_t -# define GL_UINT64_T -# endif -# endif - -/* Avoid collision with Solaris 2.5.1 etc. */ -# define _UINT8_T -# define _UINT32_T -# define _UINT64_T - - -/* 7.18.1.2. Minimum-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types - are the same as the corresponding N_t types. */ - -# undef int_least8_t -# undef uint_least8_t -# undef int_least16_t -# undef uint_least16_t -# undef int_least32_t -# undef uint_least32_t -# undef int_least64_t -# undef uint_least64_t -# define int_least8_t int8_t -# define uint_least8_t uint8_t -# define int_least16_t int16_t -# define uint_least16_t uint16_t -# define int_least32_t int32_t -# define uint_least32_t uint32_t -# ifdef GL_INT64_T -# define int_least64_t int64_t -# endif -# ifdef GL_UINT64_T -# define uint_least64_t uint64_t -# endif - -/* 7.18.1.3. Fastest minimum-width integer types */ - -/* Note: Other substitutes may define these types differently. - It is not recommended to use these types in public header files. */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types - are taken from the same list of types. The following code normally - uses types consistent with glibc, as that lessens the chance of - incompatibility with older GNU hosts. */ - -# undef int_fast8_t -# undef uint_fast8_t -# undef int_fast16_t -# undef uint_fast16_t -# undef int_fast32_t -# undef uint_fast32_t -# undef int_fast64_t -# undef uint_fast64_t -typedef signed char gl_int_fast8_t; -typedef unsigned char gl_uint_fast8_t; - -# ifdef __sun -/* Define types compatible with SunOS 5.10, so that code compiled under - earlier SunOS versions works with code compiled under SunOS 5.10. */ -typedef int gl_int_fast32_t; -typedef unsigned int gl_uint_fast32_t; -# else -typedef long int gl_int_fast32_t; -typedef unsigned long int gl_uint_fast32_t; -# endif -typedef gl_int_fast32_t gl_int_fast16_t; -typedef gl_uint_fast32_t gl_uint_fast16_t; - -# define int_fast8_t gl_int_fast8_t -# define uint_fast8_t gl_uint_fast8_t -# define int_fast16_t gl_int_fast16_t -# define uint_fast16_t gl_uint_fast16_t -# define int_fast32_t gl_int_fast32_t -# define uint_fast32_t gl_uint_fast32_t -# ifdef GL_INT64_T -# define int_fast64_t int64_t -# endif -# ifdef GL_UINT64_T -# define uint_fast64_t uint64_t -# endif - -/* 7.18.1.4. Integer types capable of holding object pointers */ - -/* kLIBC's stdint.h defines _INTPTR_T_DECLARED and needs its own - definitions of intptr_t and uintptr_t (which use int and unsigned) - to avoid clashes with declarations of system functions like sbrk. */ -# ifndef _INTPTR_T_DECLARED -# undef intptr_t -# undef uintptr_t -typedef long int gl_intptr_t; -typedef unsigned long int gl_uintptr_t; -# define intptr_t gl_intptr_t -# define uintptr_t gl_uintptr_t -# endif - -/* 7.18.1.5. Greatest-width integer types */ - -/* Note: These types are compiler dependent. It may be unwise to use them in - public header files. */ - -/* If the system defines INTMAX_MAX, assume that intmax_t works, and - similarly for UINTMAX_MAX and uintmax_t. This avoids problems with - assuming one type where another is used by the system. */ - -# ifndef INTMAX_MAX -# undef INTMAX_C -# undef intmax_t -# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 -typedef long long int gl_intmax_t; -# define intmax_t gl_intmax_t -# elif defined GL_INT64_T -# define intmax_t int64_t -# else -typedef long int gl_intmax_t; -# define intmax_t gl_intmax_t -# endif -# endif - -# ifndef UINTMAX_MAX -# undef UINTMAX_C -# undef uintmax_t -# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 -typedef unsigned long long int gl_uintmax_t; -# define uintmax_t gl_uintmax_t -# elif defined GL_UINT64_T -# define uintmax_t uint64_t -# else -typedef unsigned long int gl_uintmax_t; -# define uintmax_t gl_uintmax_t -# endif -# endif - -/* Verify that intmax_t and uintmax_t have the same size. Too much code - breaks if this is not the case. If this check fails, the reason is likely - to be found in the autoconf macros. */ -typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) - ? 1 : -1]; - -# define GNULIB_defined_stdint_types 1 -# endif /* !GNULIB_defined_stdint_types */ - -/* 7.18.2. Limits of specified-width integer types */ - -/* 7.18.2.1. Limits of exact-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. */ - -# undef INT8_MIN -# undef INT8_MAX -# undef UINT8_MAX -# define INT8_MIN (~ INT8_MAX) -# define INT8_MAX 127 -# define UINT8_MAX 255 - -# undef INT16_MIN -# undef INT16_MAX -# undef UINT16_MAX -# define INT16_MIN (~ INT16_MAX) -# define INT16_MAX 32767 -# define UINT16_MAX 65535 - -# undef INT32_MIN -# undef INT32_MAX -# undef UINT32_MAX -# define INT32_MIN (~ INT32_MAX) -# define INT32_MAX 2147483647 -# define UINT32_MAX 4294967295U - -# if defined GL_INT64_T && ! defined INT64_MAX -/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 - evaluates the latter incorrectly in preprocessor expressions. */ -# define INT64_MIN (- INTMAX_C (1) << 63) -# define INT64_MAX INTMAX_C (9223372036854775807) -# endif - -# if defined GL_UINT64_T && ! defined UINT64_MAX -# define UINT64_MAX UINTMAX_C (18446744073709551615) -# endif - -/* 7.18.2.2. Limits of minimum-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types - are the same as the corresponding N_t types. */ - -# undef INT_LEAST8_MIN -# undef INT_LEAST8_MAX -# undef UINT_LEAST8_MAX -# define INT_LEAST8_MIN INT8_MIN -# define INT_LEAST8_MAX INT8_MAX -# define UINT_LEAST8_MAX UINT8_MAX - -# undef INT_LEAST16_MIN -# undef INT_LEAST16_MAX -# undef UINT_LEAST16_MAX -# define INT_LEAST16_MIN INT16_MIN -# define INT_LEAST16_MAX INT16_MAX -# define UINT_LEAST16_MAX UINT16_MAX - -# undef INT_LEAST32_MIN -# undef INT_LEAST32_MAX -# undef UINT_LEAST32_MAX -# define INT_LEAST32_MIN INT32_MIN -# define INT_LEAST32_MAX INT32_MAX -# define UINT_LEAST32_MAX UINT32_MAX - -# undef INT_LEAST64_MIN -# undef INT_LEAST64_MAX -# ifdef GL_INT64_T -# define INT_LEAST64_MIN INT64_MIN -# define INT_LEAST64_MAX INT64_MAX -# endif - -# undef UINT_LEAST64_MAX -# ifdef GL_UINT64_T -# define UINT_LEAST64_MAX UINT64_MAX -# endif - -/* 7.18.2.3. Limits of fastest minimum-width integer types */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types - are taken from the same list of types. */ - -# undef INT_FAST8_MIN -# undef INT_FAST8_MAX -# undef UINT_FAST8_MAX -# define INT_FAST8_MIN SCHAR_MIN -# define INT_FAST8_MAX SCHAR_MAX -# define UINT_FAST8_MAX UCHAR_MAX - -# undef INT_FAST16_MIN -# undef INT_FAST16_MAX -# undef UINT_FAST16_MAX -# define INT_FAST16_MIN INT_FAST32_MIN -# define INT_FAST16_MAX INT_FAST32_MAX -# define UINT_FAST16_MAX UINT_FAST32_MAX - -# undef INT_FAST32_MIN -# undef INT_FAST32_MAX -# undef UINT_FAST32_MAX -# ifdef __sun -# define INT_FAST32_MIN INT_MIN -# define INT_FAST32_MAX INT_MAX -# define UINT_FAST32_MAX UINT_MAX -# else -# define INT_FAST32_MIN LONG_MIN -# define INT_FAST32_MAX LONG_MAX -# define UINT_FAST32_MAX ULONG_MAX -# endif - -# undef INT_FAST64_MIN -# undef INT_FAST64_MAX -# ifdef GL_INT64_T -# define INT_FAST64_MIN INT64_MIN -# define INT_FAST64_MAX INT64_MAX -# endif - -# undef UINT_FAST64_MAX -# ifdef GL_UINT64_T -# define UINT_FAST64_MAX UINT64_MAX -# endif - -/* 7.18.2.4. Limits of integer types capable of holding object pointers */ - -# undef INTPTR_MIN -# undef INTPTR_MAX -# undef UINTPTR_MAX -# define INTPTR_MIN LONG_MIN -# define INTPTR_MAX LONG_MAX -# define UINTPTR_MAX ULONG_MAX - -/* 7.18.2.5. Limits of greatest-width integer types */ - -# ifndef INTMAX_MAX -# undef INTMAX_MIN -# ifdef INT64_MAX -# define INTMAX_MIN INT64_MIN -# define INTMAX_MAX INT64_MAX -# else -# define INTMAX_MIN INT32_MIN -# define INTMAX_MAX INT32_MAX -# endif -# endif - -# ifndef UINTMAX_MAX -# ifdef UINT64_MAX -# define UINTMAX_MAX UINT64_MAX -# else -# define UINTMAX_MAX UINT32_MAX -# endif -# endif - -/* 7.18.3. Limits of other integer types */ - -/* ptrdiff_t limits */ -# undef PTRDIFF_MIN -# undef PTRDIFF_MAX -# if @APPLE_UNIVERSAL_BUILD@ -# ifdef _LP64 -# define PTRDIFF_MIN _STDINT_MIN (1, 64, 0l) -# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) -# else -# define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) -# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) -# endif -# else -# define PTRDIFF_MIN \ - _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) -# define PTRDIFF_MAX \ - _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) -# endif - -/* sig_atomic_t limits */ -# undef SIG_ATOMIC_MIN -# undef SIG_ATOMIC_MAX -# define SIG_ATOMIC_MIN \ - _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ - 0@SIG_ATOMIC_T_SUFFIX@) -# define SIG_ATOMIC_MAX \ - _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ - 0@SIG_ATOMIC_T_SUFFIX@) - - -/* size_t limit */ -# undef SIZE_MAX -# if @APPLE_UNIVERSAL_BUILD@ -# ifdef _LP64 -# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) -# else -# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) -# endif -# else -# define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) -# endif - -/* wchar_t limits */ -/* Get WCHAR_MIN, WCHAR_MAX. - This include is not on the top, above, because on OSF/1 4.0 we have a - sequence of nested includes - -> -> -> , and the latter includes - and assumes its types are already defined. */ -# if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) - /* BSD/OS 4.0.1 has a bug: , and must be - included before . */ -# include -# include -# include -# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H -# include -# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H -# endif -# undef WCHAR_MIN -# undef WCHAR_MAX -# define WCHAR_MIN \ - _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) -# define WCHAR_MAX \ - _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) - -/* wint_t limits */ -# undef WINT_MIN -# undef WINT_MAX -# define WINT_MIN \ - _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) -# define WINT_MAX \ - _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) - -/* 7.18.4. Macros for integer constants */ - -/* 7.18.4.1. Macros for minimum-width integer constants */ -/* According to ISO C 99 Technical Corrigendum 1 */ - -/* Here we assume a standard architecture where the hardware integer - types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ - -# undef INT8_C -# undef UINT8_C -# define INT8_C(x) x -# define UINT8_C(x) x - -# undef INT16_C -# undef UINT16_C -# define INT16_C(x) x -# define UINT16_C(x) x - -# undef INT32_C -# undef UINT32_C -# define INT32_C(x) x -# define UINT32_C(x) x ## U - -# undef INT64_C -# undef UINT64_C -# if LONG_MAX >> 31 >> 31 == 1 -# define INT64_C(x) x##L -# elif defined _MSC_VER -# define INT64_C(x) x##i64 -# elif @HAVE_LONG_LONG_INT@ -# define INT64_C(x) x##LL -# endif -# if ULONG_MAX >> 31 >> 31 >> 1 == 1 -# define UINT64_C(x) x##UL -# elif defined _MSC_VER -# define UINT64_C(x) x##ui64 -# elif @HAVE_UNSIGNED_LONG_LONG_INT@ -# define UINT64_C(x) x##ULL -# endif - -/* 7.18.4.2. Macros for greatest-width integer constants */ - -# ifndef INTMAX_C -# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 -# define INTMAX_C(x) x##LL -# elif defined GL_INT64_T -# define INTMAX_C(x) INT64_C(x) -# else -# define INTMAX_C(x) x##L -# endif -# endif - -# ifndef UINTMAX_C -# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 -# define UINTMAX_C(x) x##ULL -# elif defined GL_UINT64_T -# define UINTMAX_C(x) UINT64_C(x) -# else -# define UINTMAX_C(x) x##UL -# endif -# endif - -#endif /* !@HAVE_C99_STDINT_H@ */ - -/* Macros specified by ISO/IEC TS 18661-1:2014. */ - -#if (!defined UINTMAX_WIDTH \ - && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) -# ifdef INT8_MAX -# define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) -# endif -# ifdef UINT8_MAX -# define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) -# endif -# ifdef INT16_MAX -# define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) -# endif -# ifdef UINT16_MAX -# define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) -# endif -# ifdef INT32_MAX -# define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) -# endif -# ifdef UINT32_MAX -# define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) -# endif -# ifdef INT64_MAX -# define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) -# endif -# ifdef UINT64_MAX -# define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) -# endif -# define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) -# define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) -# define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) -# define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) -# define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) -# define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) -# define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) -# define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) -# define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) -# define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) -# define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) -# define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) -# define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) -# define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) -# define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) -# define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) -# define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) -# define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) -# define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) -# define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) -# define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) -# define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) -# define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) -# ifdef WINT_MAX -# define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) -# endif -# ifdef SIG_ATOMIC_MAX -# define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) -# endif -#endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ - -#endif /* _@GUARD_PREFIX@_STDINT_H */ -#endif /* !(defined __ANDROID__ && ...) */ -#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/src/gl/stdio-impl.h b/src/gl/stdio-impl.h deleted file mode 100644 index 987897a92f..0000000000 --- a/src/gl/stdio-impl.h +++ /dev/null @@ -1,113 +0,0 @@ -/* Implementation details of FILE streams. - Copyright (C) 2007-2008, 2010-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Many stdio implementations have the same logic and therefore can share - the same implementation of stdio extension API, except that some fields - have different naming conventions, or their access requires some casts. */ - - -/* BSD stdio derived implementations. */ - -#if defined __NetBSD__ /* NetBSD */ -/* Get __NetBSD_Version__. */ -# include -#endif - -#include /* For detecting Plan9. */ - -#if defined __sferror || defined __DragonFly__ || defined __ANDROID__ - /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ - -# if defined __DragonFly__ /* DragonFly */ - /* See . */ -# define fp_ ((struct { struct __FILE_public pub; \ - struct { unsigned char *_base; int _size; } _bf; \ - void *cookie; \ - void *_close; \ - void *_read; \ - void *_seek; \ - void *_write; \ - struct { unsigned char *_base; int _size; } _ub; \ - int _ur; \ - unsigned char _ubuf[3]; \ - unsigned char _nbuf[1]; \ - struct { unsigned char *_base; int _size; } _lb; \ - int _blksize; \ - fpos_t _offset; \ - /* More fields, not relevant here. */ \ - } *) fp) - /* See . */ -# define _p pub._p -# define _flags pub._flags -# define _r pub._r -# define _w pub._w -# else -# define fp_ fp -# endif - -# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __ANDROID__ /* NetBSD >= 1.5ZA, OpenBSD, Android */ - /* See - and */ - struct __sfileext - { - struct __sbuf _ub; /* ungetc buffer */ - /* More fields, not relevant here. */ - }; -# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub -# else /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin, Android */ -# define fp_ub fp_->_ub -# endif - -# define HASUB(fp) (fp_ub._base != NULL) - -#endif - - -/* SystemV derived implementations. */ - -#ifdef __TANDEM /* NonStop Kernel */ -# ifndef _IOERR -/* These values were determined by the program 'stdioext-flags' at - . */ -# define _IOERR 0x40 -# define _IOREAD 0x80 -# define _IOWRT 0x4 -# define _IORW 0x100 -# endif -#endif - -#if defined _IOERR - -# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ -# define fp_ ((struct { unsigned char *_ptr; \ - unsigned char *_base; \ - unsigned char *_end; \ - long _cnt; \ - int _file; \ - unsigned int _flag; \ - } *) fp) -# else -# define fp_ fp -# endif - -# if defined _SCO_DS /* OpenServer */ -# define _cnt __cnt -# define _ptr __ptr -# define _base __base -# define _flag __flag -# endif - -#endif diff --git a/src/gl/stdio.in.h b/src/gl/stdio.in.h deleted file mode 100644 index 9b313656c5..0000000000 --- a/src/gl/stdio.in.h +++ /dev/null @@ -1,1357 +0,0 @@ -/* A GNU-like . - - Copyright (C) 2004, 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H -/* Special invocation convention: - - Inside glibc header files. - - On OSF/1 5.1 we have a sequence of nested includes - -> -> -> -> - -> -> -> . - In this situation, the functions are not yet declared, therefore we cannot - provide the C++ aliases. */ - -#@INCLUDE_NEXT@ @NEXT_STDIO_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_STDIO_H - -#define _GL_ALREADY_INCLUDING_STDIO_H - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_STDIO_H@ - -#undef _GL_ALREADY_INCLUDING_STDIO_H - -#ifndef _@GUARD_PREFIX@_STDIO_H -#define _@GUARD_PREFIX@_STDIO_H - -/* Get va_list. Needed on many systems, including glibc 2.8. */ -#include - -#include - -/* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 - and eglibc 2.11.2. - May also define off_t to a 64-bit type on native Windows. */ -#include - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The __-protected variants of the attributes 'format' and 'printf' are - accepted by gcc versions 2.6.4 (effectively 2.7) and later. - We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because - gnulib and libintl do '#define printf __printf__' when they override - the 'printf' function. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) -#else -# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ -#endif - -/* _GL_ATTRIBUTE_FORMAT_PRINTF - indicates to GCC that the function takes a format string and arguments, - where the format string directives are the ones standardized by ISO C99 - and POSIX. */ -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) -# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) -#else -# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) -#endif - -/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, - except that it indicates to GCC that the supported format string directives - are the ones of the system printf(), rather than the ones standardized by - ISO C99 and POSIX. */ -#if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU -# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT_PRINTF (formatstring_parameter, first_argument) -#else -# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) -#endif - -/* _GL_ATTRIBUTE_FORMAT_SCANF - indicates to GCC that the function takes a format string and arguments, - where the format string directives are the ones standardized by ISO C99 - and POSIX. */ -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) -# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) -#else -# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) -#endif - -/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, - except that it indicates to GCC that the supported format string directives - are the ones of the system scanf(), rather than the ones standardized by - ISO C99 and POSIX. */ -#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ - _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) - -/* Solaris 10 declares renameat in , not in . */ -/* But in any case avoid namespace pollution on glibc systems. */ -#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __sun \ - && ! defined __GLIBC__ -# include -#endif - - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -/* Macros for stringification. */ -#define _GL_STDIO_STRINGIZE(token) #token -#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) - -/* When also using extern inline, suppress the use of static inline in - standard headers of problematic Apple configurations, as Libc at - least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., - . - Perhaps Apple will fix this some day. */ -#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ - && defined __GNUC__ && defined __STDC__) -# undef putc_unlocked -#endif - -#if @GNULIB_DPRINTF@ -# if @REPLACE_DPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define dprintf rpl_dprintf -# endif -_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); -# else -# if !@HAVE_DPRINTF@ -_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...)); -# endif -_GL_CXXALIASWARN (dprintf); -#elif defined GNULIB_POSIXCHECK -# undef dprintf -# if HAVE_RAW_DECL_DPRINTF -_GL_WARN_ON_USE (dprintf, "dprintf is unportable - " - "use gnulib module dprintf for portability"); -# endif -#endif - -#if @GNULIB_FCLOSE@ -/* Close STREAM and its underlying file descriptor. */ -# if @REPLACE_FCLOSE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define fclose rpl_fclose -# endif -_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); -# else -_GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); -# endif -_GL_CXXALIASWARN (fclose); -#elif defined GNULIB_POSIXCHECK -# undef fclose -/* Assume fclose is always declared. */ -_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " - "use gnulib module fclose for portable POSIX compliance"); -#endif - -#if @GNULIB_FDOPEN@ -# if @REPLACE_FDOPEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fdopen -# define fdopen rpl_fdopen -# endif -_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); -# else -_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); -# endif -_GL_CXXALIASWARN (fdopen); -#elif defined GNULIB_POSIXCHECK -# undef fdopen -/* Assume fdopen is always declared. */ -_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " - "use gnulib module fdopen for portability"); -#endif - -#if @GNULIB_FFLUSH@ -/* Flush all pending data on STREAM according to POSIX rules. Both - output and seekable input streams are supported. - Note! LOSS OF DATA can occur if fflush is applied on an input stream - that is _not_seekable_ or on an update stream that is _not_seekable_ - and in which the most recent operation was input. Seekability can - be tested with lseek(fileno(fp),0,SEEK_CUR). */ -# if @REPLACE_FFLUSH@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define fflush rpl_fflush -# endif -_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); -_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); -# else -_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); -# endif -_GL_CXXALIASWARN (fflush); -#elif defined GNULIB_POSIXCHECK -# undef fflush -/* Assume fflush is always declared. */ -_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " - "use gnulib module fflush for portable POSIX compliance"); -#endif - -#if @GNULIB_FGETC@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fgetc -# define fgetc rpl_fgetc -# endif -_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); -# else -_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); -# endif -_GL_CXXALIASWARN (fgetc); -#endif - -#if @GNULIB_FGETS@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fgets -# define fgets rpl_fgets -# endif -_GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream) - _GL_ARG_NONNULL ((1, 3))); -_GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); -# else -_GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); -# endif -_GL_CXXALIASWARN (fgets); -#endif - -#if @GNULIB_FOPEN@ -# if @REPLACE_FOPEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fopen -# define fopen rpl_fopen -# endif -_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); -# else -_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); -# endif -_GL_CXXALIASWARN (fopen); -#elif defined GNULIB_POSIXCHECK -# undef fopen -/* Assume fopen is always declared. */ -_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " - "use gnulib module fopen for portability"); -#endif - -#if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ -# if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ - || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define fprintf rpl_fprintf -# endif -# define GNULIB_overrides_fprintf 1 -# if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ -_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -# else -_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); -# else -_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); -# endif -_GL_CXXALIASWARN (fprintf); -#endif -#if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK -# if !GNULIB_overrides_fprintf -# undef fprintf -# endif -/* Assume fprintf is always declared. */ -_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " - "use gnulib module fprintf-posix for portable " - "POSIX compliance"); -#endif - -#if @GNULIB_FPURGE@ -/* Discard all pending buffered I/O data on STREAM. - STREAM must not be wide-character oriented. - When discarding pending output, the file position is set back to where it - was before the write calls. When discarding pending input, the file - position is advanced to match the end of the previously read input. - Return 0 if successful. Upon error, return -1 and set errno. */ -# if @REPLACE_FPURGE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define fpurge rpl_fpurge -# endif -_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); -# else -# if !@HAVE_DECL_FPURGE@ -_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); -# endif -_GL_CXXALIASWARN (fpurge); -#elif defined GNULIB_POSIXCHECK -# undef fpurge -# if HAVE_RAW_DECL_FPURGE -_GL_WARN_ON_USE (fpurge, "fpurge is not always present - " - "use gnulib module fpurge for portability"); -# endif -#endif - -#if @GNULIB_FPUTC@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fputc -# define fputc rpl_fputc -# endif -_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); -# else -_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); -# endif -_GL_CXXALIASWARN (fputc); -#endif - -#if @GNULIB_FPUTS@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fputs -# define fputs rpl_fputs -# endif -_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); -# else -_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); -# endif -_GL_CXXALIASWARN (fputs); -#endif - -#if @GNULIB_FREAD@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fread -# define fread rpl_fread -# endif -_GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream) - _GL_ARG_NONNULL ((4))); -_GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); -# else -_GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); -# endif -_GL_CXXALIASWARN (fread); -#endif - -#if @GNULIB_FREOPEN@ -# if @REPLACE_FREOPEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef freopen -# define freopen rpl_freopen -# endif -_GL_FUNCDECL_RPL (freopen, FILE *, - (const char *filename, const char *mode, FILE *stream) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (freopen, FILE *, - (const char *filename, const char *mode, FILE *stream)); -# else -_GL_CXXALIAS_SYS (freopen, FILE *, - (const char *filename, const char *mode, FILE *stream)); -# endif -_GL_CXXALIASWARN (freopen); -#elif defined GNULIB_POSIXCHECK -# undef freopen -/* Assume freopen is always declared. */ -_GL_WARN_ON_USE (freopen, - "freopen on native Windows platforms is not POSIX compliant - " - "use gnulib module freopen for portability"); -#endif - -#if @GNULIB_FSCANF@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fscanf -# define fscanf rpl_fscanf -# endif -_GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); -# else -_GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); -# endif -_GL_CXXALIASWARN (fscanf); -#endif - - -/* Set up the following warnings, based on which modules are in use. - GNU Coding Standards discourage the use of fseek, since it imposes - an arbitrary limitation on some 32-bit hosts. Remember that the - fseek module depends on the fseeko module, so we only have three - cases to consider: - - 1. The developer is not using either module. Issue a warning under - GNULIB_POSIXCHECK for both functions, to remind them that both - functions have bugs on some systems. _GL_NO_LARGE_FILES has no - impact on this warning. - - 2. The developer is using both modules. They may be unaware of the - arbitrary limitations of fseek, so issue a warning under - GNULIB_POSIXCHECK. On the other hand, they may be using both - modules intentionally, so the developer can define - _GL_NO_LARGE_FILES in the compilation units where the use of fseek - is safe, to silence the warning. - - 3. The developer is using the fseeko module, but not fseek. Gnulib - guarantees that fseek will still work around platform bugs in that - case, but we presume that the developer is aware of the pitfalls of - fseek and was trying to avoid it, so issue a warning even when - GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be - defined to silence the warning in particular compilation units. - In C++ compilations with GNULIB_NAMESPACE, in order to avoid that - fseek gets defined as a macro, it is recommended that the developer - uses the fseek module, even if he is not calling the fseek function. - - Most gnulib clients that perform stream operations should fall into - category 3. */ - -#if @GNULIB_FSEEK@ -# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES -# define _GL_FSEEK_WARN /* Category 2, above. */ -# undef fseek -# endif -# if @REPLACE_FSEEK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fseek -# define fseek rpl_fseek -# endif -_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); -# else -_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); -# endif -_GL_CXXALIASWARN (fseek); -#endif - -#if @GNULIB_FSEEKO@ -# if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES -# define _GL_FSEEK_WARN /* Category 3, above. */ -# undef fseek -# endif -# if @REPLACE_FSEEKO@ -/* Provide an fseeko function that is aware of a preceding fflush(), and which - detects pipes. */ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fseeko -# define fseeko rpl_fseeko -# endif -_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); -# else -# if ! @HAVE_DECL_FSEEKO@ -_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); -# endif -_GL_CXXALIASWARN (fseeko); -#elif defined GNULIB_POSIXCHECK -# define _GL_FSEEK_WARN /* Category 1, above. */ -# undef fseek -# undef fseeko -# if HAVE_RAW_DECL_FSEEKO -_GL_WARN_ON_USE (fseeko, "fseeko is unportable - " - "use gnulib module fseeko for portability"); -# endif -#endif - -#ifdef _GL_FSEEK_WARN -# undef _GL_FSEEK_WARN -/* Here, either fseek is undefined (but C89 guarantees that it is - declared), or it is defined as rpl_fseek (declared above). */ -_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " - "on 32-bit platforms - " - "use fseeko function for handling of large files"); -#endif - - -/* ftell, ftello. See the comments on fseek/fseeko. */ - -#if @GNULIB_FTELL@ -# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES -# define _GL_FTELL_WARN /* Category 2, above. */ -# undef ftell -# endif -# if @REPLACE_FTELL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ftell -# define ftell rpl_ftell -# endif -_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); -# else -_GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); -# endif -_GL_CXXALIASWARN (ftell); -#endif - -#if @GNULIB_FTELLO@ -# if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES -# define _GL_FTELL_WARN /* Category 3, above. */ -# undef ftell -# endif -# if @REPLACE_FTELLO@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ftello -# define ftello rpl_ftello -# endif -_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); -# else -# if ! @HAVE_DECL_FTELLO@ -_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); -# endif -_GL_CXXALIASWARN (ftello); -#elif defined GNULIB_POSIXCHECK -# define _GL_FTELL_WARN /* Category 1, above. */ -# undef ftell -# undef ftello -# if HAVE_RAW_DECL_FTELLO -_GL_WARN_ON_USE (ftello, "ftello is unportable - " - "use gnulib module ftello for portability"); -# endif -#endif - -#ifdef _GL_FTELL_WARN -# undef _GL_FTELL_WARN -/* Here, either ftell is undefined (but C89 guarantees that it is - declared), or it is defined as rpl_ftell (declared above). */ -_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " - "on 32-bit platforms - " - "use ftello function for handling of large files"); -#endif - - -#if @GNULIB_FWRITE@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fwrite -# define fwrite rpl_fwrite -# endif -_GL_FUNCDECL_RPL (fwrite, size_t, - (const void *ptr, size_t s, size_t n, FILE *stream) - _GL_ARG_NONNULL ((1, 4))); -_GL_CXXALIAS_RPL (fwrite, size_t, - (const void *ptr, size_t s, size_t n, FILE *stream)); -# else -_GL_CXXALIAS_SYS (fwrite, size_t, - (const void *ptr, size_t s, size_t n, FILE *stream)); - -/* Work around bug 11959 when fortifying glibc 2.4 through 2.15 - , - which sometimes causes an unwanted diagnostic for fwrite calls. - This affects only function declaration attributes under certain - versions of gcc and clang, and is not needed for C++. */ -# if (0 < __USE_FORTIFY_LEVEL \ - && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ - && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ - && !defined __cplusplus) -# undef fwrite -# undef fwrite_unlocked -extern size_t __REDIRECT (rpl_fwrite, - (const void *__restrict, size_t, size_t, - FILE *__restrict), - fwrite); -extern size_t __REDIRECT (rpl_fwrite_unlocked, - (const void *__restrict, size_t, size_t, - FILE *__restrict), - fwrite_unlocked); -# define fwrite rpl_fwrite -# define fwrite_unlocked rpl_fwrite_unlocked -# endif -# endif -_GL_CXXALIASWARN (fwrite); -#endif - -#if @GNULIB_GETC@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getc -# define getc rpl_fgetc -# endif -_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); -# else -_GL_CXXALIAS_SYS (getc, int, (FILE *stream)); -# endif -_GL_CXXALIASWARN (getc); -#endif - -#if @GNULIB_GETCHAR@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getchar -# define getchar rpl_getchar -# endif -_GL_FUNCDECL_RPL (getchar, int, (void)); -_GL_CXXALIAS_RPL (getchar, int, (void)); -# else -_GL_CXXALIAS_SYS (getchar, int, (void)); -# endif -_GL_CXXALIASWARN (getchar); -#endif - -#if @GNULIB_GETDELIM@ -/* Read input, up to (and including) the next occurrence of DELIMITER, from - STREAM, store it in *LINEPTR (and NUL-terminate it). - *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE - bytes of space. It is realloc'd as necessary. - Return the number of bytes read and stored at *LINEPTR (not including the - NUL terminator), or -1 on error or EOF. */ -# if @REPLACE_GETDELIM@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getdelim -# define getdelim rpl_getdelim -# endif -_GL_FUNCDECL_RPL (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream) - _GL_ARG_NONNULL ((1, 2, 4))); -_GL_CXXALIAS_RPL (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream)); -# else -# if !@HAVE_DECL_GETDELIM@ -_GL_FUNCDECL_SYS (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream) - _GL_ARG_NONNULL ((1, 2, 4))); -# endif -_GL_CXXALIAS_SYS (getdelim, ssize_t, - (char **lineptr, size_t *linesize, int delimiter, - FILE *stream)); -# endif -_GL_CXXALIASWARN (getdelim); -#elif defined GNULIB_POSIXCHECK -# undef getdelim -# if HAVE_RAW_DECL_GETDELIM -_GL_WARN_ON_USE (getdelim, "getdelim is unportable - " - "use gnulib module getdelim for portability"); -# endif -#endif - -#if @GNULIB_GETLINE@ -/* Read a line, up to (and including) the next newline, from STREAM, store it - in *LINEPTR (and NUL-terminate it). - *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE - bytes of space. It is realloc'd as necessary. - Return the number of bytes read and stored at *LINEPTR (not including the - NUL terminator), or -1 on error or EOF. */ -# if @REPLACE_GETLINE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getline -# define getline rpl_getline -# endif -_GL_FUNCDECL_RPL (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream) - _GL_ARG_NONNULL ((1, 2, 3))); -_GL_CXXALIAS_RPL (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream)); -# else -# if !@HAVE_DECL_GETLINE@ -_GL_FUNCDECL_SYS (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream) - _GL_ARG_NONNULL ((1, 2, 3))); -# endif -_GL_CXXALIAS_SYS (getline, ssize_t, - (char **lineptr, size_t *linesize, FILE *stream)); -# endif -# if @HAVE_DECL_GETLINE@ -_GL_CXXALIASWARN (getline); -# endif -#elif defined GNULIB_POSIXCHECK -# undef getline -# if HAVE_RAW_DECL_GETLINE -_GL_WARN_ON_USE (getline, "getline is unportable - " - "use gnulib module getline for portability"); -# endif -#endif - -/* It is very rare that the developer ever has full control of stdin, - so any use of gets warrants an unconditional warning; besides, C11 - removed it. */ -#undef gets -#if HAVE_RAW_DECL_GETS && !defined __cplusplus -_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); -#endif - -#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ -struct obstack; -/* Grow an obstack with formatted output. Return the number of - bytes added to OBS. No trailing nul byte is added, and the - object should be closed with obstack_finish before use. Upon - memory allocation error, call obstack_alloc_failed_handler. Upon - other error, return -1. */ -# if @REPLACE_OBSTACK_PRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define obstack_printf rpl_obstack_printf -# endif -_GL_FUNCDECL_RPL (obstack_printf, int, - (struct obstack *obs, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (obstack_printf, int, - (struct obstack *obs, const char *format, ...)); -# else -# if !@HAVE_DECL_OBSTACK_PRINTF@ -_GL_FUNCDECL_SYS (obstack_printf, int, - (struct obstack *obs, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (obstack_printf, int, - (struct obstack *obs, const char *format, ...)); -# endif -_GL_CXXALIASWARN (obstack_printf); -# if @REPLACE_OBSTACK_PRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define obstack_vprintf rpl_obstack_vprintf -# endif -_GL_FUNCDECL_RPL (obstack_vprintf, int, - (struct obstack *obs, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (obstack_vprintf, int, - (struct obstack *obs, const char *format, va_list args)); -# else -# if !@HAVE_DECL_OBSTACK_PRINTF@ -_GL_FUNCDECL_SYS (obstack_vprintf, int, - (struct obstack *obs, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (obstack_vprintf, int, - (struct obstack *obs, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (obstack_vprintf); -#endif - -#if @GNULIB_PCLOSE@ -# if !@HAVE_PCLOSE@ -_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); -_GL_CXXALIASWARN (pclose); -#elif defined GNULIB_POSIXCHECK -# undef pclose -# if HAVE_RAW_DECL_PCLOSE -_GL_WARN_ON_USE (pclose, "pclose is unportable - " - "use gnulib module pclose for more portability"); -# endif -#endif - -#if @GNULIB_PERROR@ -/* Print a message to standard error, describing the value of ERRNO, - (if STRING is not NULL and not empty) prefixed with STRING and ": ", - and terminated with a newline. */ -# if @REPLACE_PERROR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define perror rpl_perror -# endif -_GL_FUNCDECL_RPL (perror, void, (const char *string)); -_GL_CXXALIAS_RPL (perror, void, (const char *string)); -# else -_GL_CXXALIAS_SYS (perror, void, (const char *string)); -# endif -_GL_CXXALIASWARN (perror); -#elif defined GNULIB_POSIXCHECK -# undef perror -/* Assume perror is always declared. */ -_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " - "use gnulib module perror for portability"); -#endif - -#if @GNULIB_POPEN@ -# if @REPLACE_POPEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef popen -# define popen rpl_popen -# endif -_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); -# else -# if !@HAVE_POPEN@ -_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); -# endif -_GL_CXXALIASWARN (popen); -#elif defined GNULIB_POSIXCHECK -# undef popen -# if HAVE_RAW_DECL_POPEN -_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " - "use gnulib module popen or pipe for more portability"); -# endif -#endif - -#if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ -# if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ - || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) -# if defined __GNUC__ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -/* Don't break __attribute__((format(printf,M,N))). */ -# define printf __printf__ -# endif -# if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ -_GL_FUNCDECL_RPL_1 (__printf__, int, - (const char *format, ...) - __asm__ (@ASM_SYMBOL_PREFIX@ - _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) - _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) - _GL_ARG_NONNULL ((1))); -# else -_GL_FUNCDECL_RPL_1 (__printf__, int, - (const char *format, ...) - __asm__ (@ASM_SYMBOL_PREFIX@ - _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) - _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); -# else -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define printf rpl_printf -# endif -_GL_FUNCDECL_RPL (printf, int, - (const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); -# endif -# define GNULIB_overrides_printf 1 -# else -_GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); -# endif -_GL_CXXALIASWARN (printf); -#endif -#if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK -# if !GNULIB_overrides_printf -# undef printf -# endif -/* Assume printf is always declared. */ -_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " - "use gnulib module printf-posix for portable " - "POSIX compliance"); -#endif - -#if @GNULIB_PUTC@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef putc -# define putc rpl_fputc -# endif -_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); -# else -_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); -# endif -_GL_CXXALIASWARN (putc); -#endif - -#if @GNULIB_PUTCHAR@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef putchar -# define putchar rpl_putchar -# endif -_GL_FUNCDECL_RPL (putchar, int, (int c)); -_GL_CXXALIAS_RPL (putchar, int, (int c)); -# else -_GL_CXXALIAS_SYS (putchar, int, (int c)); -# endif -_GL_CXXALIASWARN (putchar); -#endif - -#if @GNULIB_PUTS@ -# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef puts -# define puts rpl_puts -# endif -_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (puts, int, (const char *string)); -# else -_GL_CXXALIAS_SYS (puts, int, (const char *string)); -# endif -_GL_CXXALIASWARN (puts); -#endif - -#if @GNULIB_REMOVE@ -# if @REPLACE_REMOVE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef remove -# define remove rpl_remove -# endif -_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (remove, int, (const char *name)); -# else -_GL_CXXALIAS_SYS (remove, int, (const char *name)); -# endif -_GL_CXXALIASWARN (remove); -#elif defined GNULIB_POSIXCHECK -# undef remove -/* Assume remove is always declared. */ -_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " - "use gnulib module remove for more portability"); -#endif - -#if @GNULIB_RENAME@ -# if @REPLACE_RENAME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef rename -# define rename rpl_rename -# endif -_GL_FUNCDECL_RPL (rename, int, - (const char *old_filename, const char *new_filename) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (rename, int, - (const char *old_filename, const char *new_filename)); -# else -_GL_CXXALIAS_SYS (rename, int, - (const char *old_filename, const char *new_filename)); -# endif -_GL_CXXALIASWARN (rename); -#elif defined GNULIB_POSIXCHECK -# undef rename -/* Assume rename is always declared. */ -_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " - "use gnulib module rename for more portability"); -#endif - -#if @GNULIB_RENAMEAT@ -# if @REPLACE_RENAMEAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef renameat -# define renameat rpl_renameat -# endif -_GL_FUNCDECL_RPL (renameat, int, - (int fd1, char const *file1, int fd2, char const *file2) - _GL_ARG_NONNULL ((2, 4))); -_GL_CXXALIAS_RPL (renameat, int, - (int fd1, char const *file1, int fd2, char const *file2)); -# else -# if !@HAVE_RENAMEAT@ -_GL_FUNCDECL_SYS (renameat, int, - (int fd1, char const *file1, int fd2, char const *file2) - _GL_ARG_NONNULL ((2, 4))); -# endif -_GL_CXXALIAS_SYS (renameat, int, - (int fd1, char const *file1, int fd2, char const *file2)); -# endif -_GL_CXXALIASWARN (renameat); -#elif defined GNULIB_POSIXCHECK -# undef renameat -# if HAVE_RAW_DECL_RENAMEAT -_GL_WARN_ON_USE (renameat, "renameat is not portable - " - "use gnulib module renameat for portability"); -# endif -#endif - -#if @GNULIB_SCANF@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if defined __GNUC__ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef scanf -/* Don't break __attribute__((format(scanf,M,N))). */ -# define scanf __scanf__ -# endif -_GL_FUNCDECL_RPL_1 (__scanf__, int, - (const char *format, ...) - __asm__ (@ASM_SYMBOL_PREFIX@ - _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) - _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...)); -# else -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef scanf -# define scanf rpl_scanf -# endif -_GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) - _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); -# endif -# else -_GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); -# endif -_GL_CXXALIASWARN (scanf); -#endif - -#if @GNULIB_SNPRINTF@ -# if @REPLACE_SNPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define snprintf rpl_snprintf -# endif -_GL_FUNCDECL_RPL (snprintf, int, - (char *str, size_t size, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) - _GL_ARG_NONNULL ((3))); -_GL_CXXALIAS_RPL (snprintf, int, - (char *str, size_t size, const char *format, ...)); -# else -# if !@HAVE_DECL_SNPRINTF@ -_GL_FUNCDECL_SYS (snprintf, int, - (char *str, size_t size, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) - _GL_ARG_NONNULL ((3))); -# endif -_GL_CXXALIAS_SYS (snprintf, int, - (char *str, size_t size, const char *format, ...)); -# endif -_GL_CXXALIASWARN (snprintf); -#elif defined GNULIB_POSIXCHECK -# undef snprintf -# if HAVE_RAW_DECL_SNPRINTF -_GL_WARN_ON_USE (snprintf, "snprintf is unportable - " - "use gnulib module snprintf for portability"); -# endif -#endif - -/* Some people would argue that all sprintf uses should be warned about - (for example, OpenBSD issues a link warning for it), - since it can cause security holes due to buffer overruns. - However, we believe that sprintf can be used safely, and is more - efficient than snprintf in those safe cases; and as proof of our - belief, we use sprintf in several gnulib modules. So this header - intentionally avoids adding a warning to sprintf except when - GNULIB_POSIXCHECK is defined. */ - -#if @GNULIB_SPRINTF_POSIX@ -# if @REPLACE_SPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define sprintf rpl_sprintf -# endif -_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); -# else -_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); -# endif -_GL_CXXALIASWARN (sprintf); -#elif defined GNULIB_POSIXCHECK -# undef sprintf -/* Assume sprintf is always declared. */ -_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " - "use gnulib module sprintf-posix for portable " - "POSIX compliance"); -#endif - -#if @GNULIB_TMPFILE@ -# if @REPLACE_TMPFILE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define tmpfile rpl_tmpfile -# endif -_GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); -_GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); -# else -_GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); -# endif -_GL_CXXALIASWARN (tmpfile); -#elif defined GNULIB_POSIXCHECK -# undef tmpfile -# if HAVE_RAW_DECL_TMPFILE -_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " - "use gnulib module tmpfile for portability"); -# endif -#endif - -#if @GNULIB_VASPRINTF@ -/* Write formatted output to a string dynamically allocated with malloc(). - If the memory allocation succeeds, store the address of the string in - *RESULT and return the number of resulting bytes, excluding the trailing - NUL. Upon memory allocation error, or some other error, return -1. */ -# if @REPLACE_VASPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define asprintf rpl_asprintf -# endif -_GL_FUNCDECL_RPL (asprintf, int, - (char **result, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (asprintf, int, - (char **result, const char *format, ...)); -# else -# if !@HAVE_VASPRINTF@ -_GL_FUNCDECL_SYS (asprintf, int, - (char **result, const char *format, ...) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (asprintf, int, - (char **result, const char *format, ...)); -# endif -_GL_CXXALIASWARN (asprintf); -# if @REPLACE_VASPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vasprintf rpl_vasprintf -# endif -_GL_FUNCDECL_RPL (vasprintf, int, - (char **result, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (vasprintf, int, - (char **result, const char *format, va_list args)); -# else -# if !@HAVE_VASPRINTF@ -_GL_FUNCDECL_SYS (vasprintf, int, - (char **result, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (vasprintf, int, - (char **result, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vasprintf); -#endif - -#if @GNULIB_VDPRINTF@ -# if @REPLACE_VDPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vdprintf rpl_vdprintf -# endif -_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); -# else -# if !@HAVE_VDPRINTF@ -_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((2))); -# endif -/* Need to cast, because on Solaris, the third parameter will likely be - __va_list args. */ -_GL_CXXALIAS_SYS_CAST (vdprintf, int, - (int fd, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vdprintf); -#elif defined GNULIB_POSIXCHECK -# undef vdprintf -# if HAVE_RAW_DECL_VDPRINTF -_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " - "use gnulib module vdprintf for portability"); -# endif -#endif - -#if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ -# if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ - || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vfprintf rpl_vfprintf -# endif -# define GNULIB_overrides_vfprintf 1 -# if @GNULIB_VFPRINTF_POSIX@ -_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -# else -_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)); -# else -/* Need to cast, because on Solaris, the third parameter is - __va_list args - and GCC's fixincludes did not change this to __gnuc_va_list. */ -_GL_CXXALIAS_SYS_CAST (vfprintf, int, - (FILE *fp, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vfprintf); -#endif -#if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK -# if !GNULIB_overrides_vfprintf -# undef vfprintf -# endif -/* Assume vfprintf is always declared. */ -_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " - "use gnulib module vfprintf-posix for portable " - "POSIX compliance"); -#endif - -#if @GNULIB_VFSCANF@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef vfscanf -# define vfscanf rpl_vfscanf -# endif -_GL_FUNCDECL_RPL (vfscanf, int, - (FILE *stream, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (vfscanf, int, - (FILE *stream, const char *format, va_list args)); -# else -_GL_CXXALIAS_SYS (vfscanf, int, - (FILE *stream, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vfscanf); -#endif - -#if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ -# if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ - || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vprintf rpl_vprintf -# endif -# define GNULIB_overrides_vprintf 1 -# if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ -_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) - _GL_ARG_NONNULL ((1))); -# else -_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args)); -# else -/* Need to cast, because on Solaris, the second parameter is - __va_list args - and GCC's fixincludes did not change this to __gnuc_va_list. */ -_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vprintf); -#endif -#if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK -# if !GNULIB_overrides_vprintf -# undef vprintf -# endif -/* Assume vprintf is always declared. */ -_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " - "use gnulib module vprintf-posix for portable " - "POSIX compliance"); -#endif - -#if @GNULIB_VSCANF@ -# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef vscanf -# define vscanf rpl_vscanf -# endif -_GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); -# else -_GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vscanf); -#endif - -#if @GNULIB_VSNPRINTF@ -# if @REPLACE_VSNPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vsnprintf rpl_vsnprintf -# endif -_GL_FUNCDECL_RPL (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) - _GL_ARG_NONNULL ((3))); -_GL_CXXALIAS_RPL (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args)); -# else -# if !@HAVE_DECL_VSNPRINTF@ -_GL_FUNCDECL_SYS (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) - _GL_ARG_NONNULL ((3))); -# endif -_GL_CXXALIAS_SYS (vsnprintf, int, - (char *str, size_t size, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vsnprintf); -#elif defined GNULIB_POSIXCHECK -# undef vsnprintf -# if HAVE_RAW_DECL_VSNPRINTF -_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " - "use gnulib module vsnprintf for portability"); -# endif -#endif - -#if @GNULIB_VSPRINTF_POSIX@ -# if @REPLACE_VSPRINTF@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define vsprintf rpl_vsprintf -# endif -_GL_FUNCDECL_RPL (vsprintf, int, - (char *str, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (vsprintf, int, - (char *str, const char *format, va_list args)); -# else -/* Need to cast, because on Solaris, the third parameter is - __va_list args - and GCC's fixincludes did not change this to __gnuc_va_list. */ -_GL_CXXALIAS_SYS_CAST (vsprintf, int, - (char *str, const char *format, va_list args)); -# endif -_GL_CXXALIASWARN (vsprintf); -#elif defined GNULIB_POSIXCHECK -# undef vsprintf -/* Assume vsprintf is always declared. */ -_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " - "use gnulib module vsprintf-posix for portable " - "POSIX compliance"); -#endif - -#endif /* _@GUARD_PREFIX@_STDIO_H */ -#endif /* _@GUARD_PREFIX@_STDIO_H */ -#endif diff --git a/src/gl/stdlib.in.h b/src/gl/stdlib.in.h deleted file mode 100644 index db3253bd97..0000000000 --- a/src/gl/stdlib.in.h +++ /dev/null @@ -1,992 +0,0 @@ -/* A GNU-like . - - Copyright (C) 1995, 2001-2004, 2006-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined __need_system_stdlib_h || defined __need_malloc_and_calloc -/* Special invocation conventions inside some gnulib header files, - and inside some glibc header files, respectively. */ - -#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_STDLIB_H - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ - -#ifndef _@GUARD_PREFIX@_STDLIB_H -#define _@GUARD_PREFIX@_STDLIB_H - -/* NetBSD 5.0 mis-defines NULL. */ -#include - -/* MirBSD 10 defines WEXITSTATUS in , not in . */ -#if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS -# include -#endif - -/* Solaris declares getloadavg() in . */ -#if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ -# include -#endif - -/* Native Windows platforms declare mktemp() in . */ -#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) -# include -#endif - -#if @GNULIB_RANDOM_R@ - -/* OSF/1 5.1 declares 'struct random_data' in , which is included - from if _REENTRANT is defined. Include it whenever we need - 'struct random_data'. */ -# if @HAVE_RANDOM_H@ -# include -# endif - -# if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@ -# include -# endif - -# if !@HAVE_STRUCT_RANDOM_DATA@ -/* Define 'struct random_data'. - But allow multiple gnulib generated replacements to coexist. */ -# if !GNULIB_defined_struct_random_data -struct random_data -{ - int32_t *fptr; /* Front pointer. */ - int32_t *rptr; /* Rear pointer. */ - int32_t *state; /* Array of state values. */ - int rand_type; /* Type of random number generator. */ - int rand_deg; /* Degree of random number generator. */ - int rand_sep; /* Distance between front and rear. */ - int32_t *end_ptr; /* Pointer behind state table. */ -}; -# define GNULIB_defined_struct_random_data 1 -# endif -# endif -#endif - -#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) -/* On Mac OS X 10.3, only declares mkstemp. */ -/* On Mac OS X 10.5, only declares mkstemps. */ -/* On Cygwin 1.7.1, only declares getsubopt. */ -/* But avoid namespace pollution on glibc systems and native Windows. */ -# include -#endif - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The attribute __pure__ was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ -#endif - -/* The definition of _Noreturn is copied here. */ - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - -/* Some systems do not define EXIT_*, despite otherwise supporting C89. */ -#ifndef EXIT_SUCCESS -# define EXIT_SUCCESS 0 -#endif -/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere - with proper operation of xargs. */ -#ifndef EXIT_FAILURE -# define EXIT_FAILURE 1 -#elif EXIT_FAILURE != 1 -# undef EXIT_FAILURE -# define EXIT_FAILURE 1 -#endif - - -#if @GNULIB__EXIT@ -/* Terminate the current process with the given return code, without running - the 'atexit' handlers. */ -# if !@HAVE__EXIT@ -_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); -# endif -_GL_CXXALIAS_SYS (_Exit, void, (int status)); -_GL_CXXALIASWARN (_Exit); -#elif defined GNULIB_POSIXCHECK -# undef _Exit -# if HAVE_RAW_DECL__EXIT -_GL_WARN_ON_USE (_Exit, "_Exit is unportable - " - "use gnulib module _Exit for portability"); -# endif -#endif - - -#if @GNULIB_ATOLL@ -/* Parse a signed decimal integer. - Returns the value of the integer. Errors are not detected. */ -# if !@HAVE_ATOLL@ -_GL_FUNCDECL_SYS (atoll, long long, (const char *string) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (atoll, long long, (const char *string)); -_GL_CXXALIASWARN (atoll); -#elif defined GNULIB_POSIXCHECK -# undef atoll -# if HAVE_RAW_DECL_ATOLL -_GL_WARN_ON_USE (atoll, "atoll is unportable - " - "use gnulib module atoll for portability"); -# endif -#endif - -#if @GNULIB_CALLOC_POSIX@ -# if @REPLACE_CALLOC@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef calloc -# define calloc rpl_calloc -# endif -_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size)); -_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); -# else -_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); -# endif -_GL_CXXALIASWARN (calloc); -#elif defined GNULIB_POSIXCHECK -# undef calloc -/* Assume calloc is always declared. */ -_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " - "use gnulib module calloc-posix for portability"); -#endif - -#if @GNULIB_CANONICALIZE_FILE_NAME@ -# if @REPLACE_CANONICALIZE_FILE_NAME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define canonicalize_file_name rpl_canonicalize_file_name -# endif -_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); -# else -# if !@HAVE_CANONICALIZE_FILE_NAME@ -_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); -# endif -_GL_CXXALIASWARN (canonicalize_file_name); -#elif defined GNULIB_POSIXCHECK -# undef canonicalize_file_name -# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME -_GL_WARN_ON_USE (canonicalize_file_name, - "canonicalize_file_name is unportable - " - "use gnulib module canonicalize-lgpl for portability"); -# endif -#endif - -#if @GNULIB_GETLOADAVG@ -/* Store max(NELEM,3) load average numbers in LOADAVG[]. - The three numbers are the load average of the last 1 minute, the last 5 - minutes, and the last 15 minutes, respectively. - LOADAVG is an array of NELEM numbers. */ -# if !@HAVE_DECL_GETLOADAVG@ -_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); -_GL_CXXALIASWARN (getloadavg); -#elif defined GNULIB_POSIXCHECK -# undef getloadavg -# if HAVE_RAW_DECL_GETLOADAVG -_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " - "use gnulib module getloadavg for portability"); -# endif -#endif - -#if @GNULIB_GETSUBOPT@ -/* Assuming *OPTIONP is a comma separated list of elements of the form - "token" or "token=value", getsubopt parses the first of these elements. - If the first element refers to a "token" that is member of the given - NULL-terminated array of tokens: - - It replaces the comma with a NUL byte, updates *OPTIONP to point past - the first option and the comma, sets *VALUEP to the value of the - element (or NULL if it doesn't contain an "=" sign), - - It returns the index of the "token" in the given array of tokens. - Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. - For more details see the POSIX:2001 specification. - http://www.opengroup.org/susv3xsh/getsubopt.html */ -# if !@HAVE_GETSUBOPT@ -_GL_FUNCDECL_SYS (getsubopt, int, - (char **optionp, char *const *tokens, char **valuep) - _GL_ARG_NONNULL ((1, 2, 3))); -# endif -_GL_CXXALIAS_SYS (getsubopt, int, - (char **optionp, char *const *tokens, char **valuep)); -_GL_CXXALIASWARN (getsubopt); -#elif defined GNULIB_POSIXCHECK -# undef getsubopt -# if HAVE_RAW_DECL_GETSUBOPT -_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " - "use gnulib module getsubopt for portability"); -# endif -#endif - -#if @GNULIB_GRANTPT@ -/* Change the ownership and access permission of the slave side of the - pseudo-terminal whose master side is specified by FD. */ -# if !@HAVE_GRANTPT@ -_GL_FUNCDECL_SYS (grantpt, int, (int fd)); -# endif -_GL_CXXALIAS_SYS (grantpt, int, (int fd)); -_GL_CXXALIASWARN (grantpt); -#elif defined GNULIB_POSIXCHECK -# undef grantpt -# if HAVE_RAW_DECL_GRANTPT -_GL_WARN_ON_USE (grantpt, "grantpt is not portable - " - "use gnulib module grantpt for portability"); -# endif -#endif - -/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not - rely on GNU or POSIX semantics for malloc and realloc (for example, - by never specifying a zero size), so it does not need malloc or - realloc to be redefined. */ -#if @GNULIB_MALLOC_POSIX@ -# if @REPLACE_MALLOC@ -# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ - || _GL_USE_STDLIB_ALLOC) -# undef malloc -# define malloc rpl_malloc -# endif -_GL_FUNCDECL_RPL (malloc, void *, (size_t size)); -_GL_CXXALIAS_RPL (malloc, void *, (size_t size)); -# else -_GL_CXXALIAS_SYS (malloc, void *, (size_t size)); -# endif -_GL_CXXALIASWARN (malloc); -#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC -# undef malloc -/* Assume malloc is always declared. */ -_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " - "use gnulib module malloc-posix for portability"); -#endif - -/* Convert a multibyte character to a wide character. */ -#if @GNULIB_MBTOWC@ -# if @REPLACE_MBTOWC@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbtowc -# define mbtowc rpl_mbtowc -# endif -_GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); -_GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); -# else -_GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); -# endif -_GL_CXXALIASWARN (mbtowc); -#endif - -#if @GNULIB_MKDTEMP@ -/* Create a unique temporary directory from TEMPLATE. - The last six characters of TEMPLATE must be "XXXXXX"; - they are replaced with a string that makes the directory name unique. - Returns TEMPLATE, or a null pointer if it cannot get a unique name. - The directory is created mode 700. */ -# if !@HAVE_MKDTEMP@ -_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); -_GL_CXXALIASWARN (mkdtemp); -#elif defined GNULIB_POSIXCHECK -# undef mkdtemp -# if HAVE_RAW_DECL_MKDTEMP -_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " - "use gnulib module mkdtemp for portability"); -# endif -#endif - -#if @GNULIB_MKOSTEMP@ -/* Create a unique temporary file from TEMPLATE. - The last six characters of TEMPLATE must be "XXXXXX"; - they are replaced with a string that makes the file name unique. - The flags are a bitmask, possibly including O_CLOEXEC (defined in ) - and O_TEXT, O_BINARY (defined in "binary-io.h"). - The file is then created, with the specified flags, ensuring it didn't exist - before. - The file is created read-write (mask at least 0600 & ~umask), but it may be - world-readable and world-writable (mask 0666 & ~umask), depending on the - implementation. - Returns the open file descriptor if successful, otherwise -1 and errno - set. */ -# if !@HAVE_MKOSTEMP@ -_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); -_GL_CXXALIASWARN (mkostemp); -#elif defined GNULIB_POSIXCHECK -# undef mkostemp -# if HAVE_RAW_DECL_MKOSTEMP -_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " - "use gnulib module mkostemp for portability"); -# endif -#endif - -#if @GNULIB_MKOSTEMPS@ -/* Create a unique temporary file from TEMPLATE. - The last six characters of TEMPLATE before a suffix of length - SUFFIXLEN must be "XXXXXX"; - they are replaced with a string that makes the file name unique. - The flags are a bitmask, possibly including O_CLOEXEC (defined in ) - and O_TEXT, O_BINARY (defined in "binary-io.h"). - The file is then created, with the specified flags, ensuring it didn't exist - before. - The file is created read-write (mask at least 0600 & ~umask), but it may be - world-readable and world-writable (mask 0666 & ~umask), depending on the - implementation. - Returns the open file descriptor if successful, otherwise -1 and errno - set. */ -# if !@HAVE_MKOSTEMPS@ -_GL_FUNCDECL_SYS (mkostemps, int, - (char * /*template*/, int /*suffixlen*/, int /*flags*/) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkostemps, int, - (char * /*template*/, int /*suffixlen*/, int /*flags*/)); -_GL_CXXALIASWARN (mkostemps); -#elif defined GNULIB_POSIXCHECK -# undef mkostemps -# if HAVE_RAW_DECL_MKOSTEMPS -_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " - "use gnulib module mkostemps for portability"); -# endif -#endif - -#if @GNULIB_MKSTEMP@ -/* Create a unique temporary file from TEMPLATE. - The last six characters of TEMPLATE must be "XXXXXX"; - they are replaced with a string that makes the file name unique. - The file is then created, ensuring it didn't exist before. - The file is created read-write (mask at least 0600 & ~umask), but it may be - world-readable and world-writable (mask 0666 & ~umask), depending on the - implementation. - Returns the open file descriptor if successful, otherwise -1 and errno - set. */ -# if @REPLACE_MKSTEMP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mkstemp rpl_mkstemp -# endif -_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); -# else -# if ! @HAVE_MKSTEMP@ -_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); -# endif -_GL_CXXALIASWARN (mkstemp); -#elif defined GNULIB_POSIXCHECK -# undef mkstemp -# if HAVE_RAW_DECL_MKSTEMP -_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " - "use gnulib module mkstemp for portability"); -# endif -#endif - -#if @GNULIB_MKSTEMPS@ -/* Create a unique temporary file from TEMPLATE. - The last six characters of TEMPLATE prior to a suffix of length - SUFFIXLEN must be "XXXXXX"; - they are replaced with a string that makes the file name unique. - The file is then created, ensuring it didn't exist before. - The file is created read-write (mask at least 0600 & ~umask), but it may be - world-readable and world-writable (mask 0666 & ~umask), depending on the - implementation. - Returns the open file descriptor if successful, otherwise -1 and errno - set. */ -# if !@HAVE_MKSTEMPS@ -_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); -_GL_CXXALIASWARN (mkstemps); -#elif defined GNULIB_POSIXCHECK -# undef mkstemps -# if HAVE_RAW_DECL_MKSTEMPS -_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " - "use gnulib module mkstemps for portability"); -# endif -#endif - -#if @GNULIB_POSIX_OPENPT@ -/* Return an FD open to the master side of a pseudo-terminal. Flags should - include O_RDWR, and may also include O_NOCTTY. */ -# if !@HAVE_POSIX_OPENPT@ -_GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); -# endif -_GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); -_GL_CXXALIASWARN (posix_openpt); -#elif defined GNULIB_POSIXCHECK -# undef posix_openpt -# if HAVE_RAW_DECL_POSIX_OPENPT -_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " - "use gnulib module posix_openpt for portability"); -# endif -#endif - -#if @GNULIB_PTSNAME@ -/* Return the pathname of the pseudo-terminal slave associated with - the master FD is open on, or NULL on errors. */ -# if @REPLACE_PTSNAME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ptsname -# define ptsname rpl_ptsname -# endif -_GL_FUNCDECL_RPL (ptsname, char *, (int fd)); -_GL_CXXALIAS_RPL (ptsname, char *, (int fd)); -# else -# if !@HAVE_PTSNAME@ -_GL_FUNCDECL_SYS (ptsname, char *, (int fd)); -# endif -_GL_CXXALIAS_SYS (ptsname, char *, (int fd)); -# endif -_GL_CXXALIASWARN (ptsname); -#elif defined GNULIB_POSIXCHECK -# undef ptsname -# if HAVE_RAW_DECL_PTSNAME -_GL_WARN_ON_USE (ptsname, "ptsname is not portable - " - "use gnulib module ptsname for portability"); -# endif -#endif - -#if @GNULIB_PTSNAME_R@ -/* Set the pathname of the pseudo-terminal slave associated with - the master FD is open on and return 0, or set errno and return - non-zero on errors. */ -# if @REPLACE_PTSNAME_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ptsname_r -# define ptsname_r rpl_ptsname_r -# endif -_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); -_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); -# else -# if !@HAVE_PTSNAME_R@ -_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); -# endif -_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); -# endif -_GL_CXXALIASWARN (ptsname_r); -#elif defined GNULIB_POSIXCHECK -# undef ptsname_r -# if HAVE_RAW_DECL_PTSNAME_R -_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " - "use gnulib module ptsname_r for portability"); -# endif -#endif - -#if @GNULIB_PUTENV@ -# if @REPLACE_PUTENV@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef putenv -# define putenv rpl_putenv -# endif -_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (putenv, int, (char *string)); -# else -_GL_CXXALIAS_SYS (putenv, int, (char *string)); -# endif -_GL_CXXALIASWARN (putenv); -#endif - -#if @GNULIB_QSORT_R@ -/* Sort an array of NMEMB elements, starting at address BASE, each element - occupying SIZE bytes, in ascending order according to the comparison - function COMPARE. */ -# if @REPLACE_QSORT_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef qsort_r -# define qsort_r rpl_qsort_r -# endif -_GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, - int (*compare) (void const *, void const *, - void *), - void *arg) _GL_ARG_NONNULL ((1, 4))); -_GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, - int (*compare) (void const *, void const *, - void *), - void *arg)); -# else -# if !@HAVE_QSORT_R@ -_GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, - int (*compare) (void const *, void const *, - void *), - void *arg) _GL_ARG_NONNULL ((1, 4))); -# endif -_GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, - int (*compare) (void const *, void const *, - void *), - void *arg)); -# endif -_GL_CXXALIASWARN (qsort_r); -#elif defined GNULIB_POSIXCHECK -# undef qsort_r -# if HAVE_RAW_DECL_QSORT_R -_GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " - "use gnulib module qsort_r for portability"); -# endif -#endif - - -#if @GNULIB_RANDOM_R@ -# if !@HAVE_RANDOM_R@ -# ifndef RAND_MAX -# define RAND_MAX 2147483647 -# endif -# endif -#endif - - -#if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ -_GL_FUNCDECL_SYS (random, long, (void)); -# endif -_GL_CXXALIAS_SYS (random, long, (void)); -_GL_CXXALIASWARN (random); -#elif defined GNULIB_POSIXCHECK -# undef random -# if HAVE_RAW_DECL_RANDOM -_GL_WARN_ON_USE (random, "random is unportable - " - "use gnulib module random for portability"); -# endif -#endif - -#if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ -_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); -# endif -_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed)); -_GL_CXXALIASWARN (srandom); -#elif defined GNULIB_POSIXCHECK -# undef srandom -# if HAVE_RAW_DECL_SRANDOM -_GL_WARN_ON_USE (srandom, "srandom is unportable - " - "use gnulib module random for portability"); -# endif -#endif - -#if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ -_GL_FUNCDECL_SYS (initstate, char *, - (unsigned int seed, char *buf, size_t buf_size) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (initstate, char *, - (unsigned int seed, char *buf, size_t buf_size)); -_GL_CXXALIASWARN (initstate); -#elif defined GNULIB_POSIXCHECK -# undef initstate -# if HAVE_RAW_DECL_INITSTATE_R -_GL_WARN_ON_USE (initstate, "initstate is unportable - " - "use gnulib module random for portability"); -# endif -#endif - -#if @GNULIB_RANDOM@ -# if !@HAVE_RANDOM@ -_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state)); -_GL_CXXALIASWARN (setstate); -#elif defined GNULIB_POSIXCHECK -# undef setstate -# if HAVE_RAW_DECL_SETSTATE_R -_GL_WARN_ON_USE (setstate, "setstate is unportable - " - "use gnulib module random for portability"); -# endif -#endif - - -#if @GNULIB_RANDOM_R@ -# if @REPLACE_RANDOM_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef random_r -# define random_r rpl_random_r -# endif -_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); -# else -# if !@HAVE_RANDOM_R@ -_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); -# endif -_GL_CXXALIASWARN (random_r); -#elif defined GNULIB_POSIXCHECK -# undef random_r -# if HAVE_RAW_DECL_RANDOM_R -_GL_WARN_ON_USE (random_r, "random_r is unportable - " - "use gnulib module random_r for portability"); -# endif -#endif - -#if @GNULIB_RANDOM_R@ -# if @REPLACE_RANDOM_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef srandom_r -# define srandom_r rpl_srandom_r -# endif -_GL_FUNCDECL_RPL (srandom_r, int, - (unsigned int seed, struct random_data *rand_state) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (srandom_r, int, - (unsigned int seed, struct random_data *rand_state)); -# else -# if !@HAVE_RANDOM_R@ -_GL_FUNCDECL_SYS (srandom_r, int, - (unsigned int seed, struct random_data *rand_state) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (srandom_r, int, - (unsigned int seed, struct random_data *rand_state)); -# endif -_GL_CXXALIASWARN (srandom_r); -#elif defined GNULIB_POSIXCHECK -# undef srandom_r -# if HAVE_RAW_DECL_SRANDOM_R -_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " - "use gnulib module random_r for portability"); -# endif -#endif - -#if @GNULIB_RANDOM_R@ -# if @REPLACE_RANDOM_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef initstate_r -# define initstate_r rpl_initstate_r -# endif -_GL_FUNCDECL_RPL (initstate_r, int, - (unsigned int seed, char *buf, size_t buf_size, - struct random_data *rand_state) - _GL_ARG_NONNULL ((2, 4))); -_GL_CXXALIAS_RPL (initstate_r, int, - (unsigned int seed, char *buf, size_t buf_size, - struct random_data *rand_state)); -# else -# if !@HAVE_RANDOM_R@ -_GL_FUNCDECL_SYS (initstate_r, int, - (unsigned int seed, char *buf, size_t buf_size, - struct random_data *rand_state) - _GL_ARG_NONNULL ((2, 4))); -# endif -_GL_CXXALIAS_SYS (initstate_r, int, - (unsigned int seed, char *buf, size_t buf_size, - struct random_data *rand_state)); -# endif -_GL_CXXALIASWARN (initstate_r); -#elif defined GNULIB_POSIXCHECK -# undef initstate_r -# if HAVE_RAW_DECL_INITSTATE_R -_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " - "use gnulib module random_r for portability"); -# endif -#endif - -#if @GNULIB_RANDOM_R@ -# if @REPLACE_RANDOM_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef setstate_r -# define setstate_r rpl_setstate_r -# endif -_GL_FUNCDECL_RPL (setstate_r, int, - (char *arg_state, struct random_data *rand_state) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (setstate_r, int, - (char *arg_state, struct random_data *rand_state)); -# else -# if !@HAVE_RANDOM_R@ -_GL_FUNCDECL_SYS (setstate_r, int, - (char *arg_state, struct random_data *rand_state) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (setstate_r, int, - (char *arg_state, struct random_data *rand_state)); -# endif -_GL_CXXALIASWARN (setstate_r); -#elif defined GNULIB_POSIXCHECK -# undef setstate_r -# if HAVE_RAW_DECL_SETSTATE_R -_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " - "use gnulib module random_r for portability"); -# endif -#endif - - -#if @GNULIB_REALLOC_POSIX@ -# if @REPLACE_REALLOC@ -# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ - || _GL_USE_STDLIB_ALLOC) -# undef realloc -# define realloc rpl_realloc -# endif -_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)); -_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); -# else -_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); -# endif -_GL_CXXALIASWARN (realloc); -#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC -# undef realloc -/* Assume realloc is always declared. */ -_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " - "use gnulib module realloc-posix for portability"); -#endif - -#if @GNULIB_REALPATH@ -# if @REPLACE_REALPATH@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define realpath rpl_realpath -# endif -_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); -# else -# if !@HAVE_REALPATH@ -_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved)); -# endif -_GL_CXXALIASWARN (realpath); -#elif defined GNULIB_POSIXCHECK -# undef realpath -# if HAVE_RAW_DECL_REALPATH -_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " - "canonicalize or canonicalize-lgpl for portability"); -# endif -#endif - -#if @GNULIB_RPMATCH@ -/* Test a user response to a question. - Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ -# if !@HAVE_RPMATCH@ -_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); -_GL_CXXALIASWARN (rpmatch); -#elif defined GNULIB_POSIXCHECK -# undef rpmatch -# if HAVE_RAW_DECL_RPMATCH -_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " - "use gnulib module rpmatch for portability"); -# endif -#endif - -#if @GNULIB_SECURE_GETENV@ -/* Look up NAME in the environment, returning 0 in insecure situations. */ -# if !@HAVE_SECURE_GETENV@ -_GL_FUNCDECL_SYS (secure_getenv, char *, - (char const *name) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); -_GL_CXXALIASWARN (secure_getenv); -#elif defined GNULIB_POSIXCHECK -# undef secure_getenv -# if HAVE_RAW_DECL_SECURE_GETENV -_GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " - "use gnulib module secure_getenv for portability"); -# endif -#endif - -#if @GNULIB_SETENV@ -/* Set NAME to VALUE in the environment. - If REPLACE is nonzero, overwrite an existing value. */ -# if @REPLACE_SETENV@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef setenv -# define setenv rpl_setenv -# endif -_GL_FUNCDECL_RPL (setenv, int, - (const char *name, const char *value, int replace) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (setenv, int, - (const char *name, const char *value, int replace)); -# else -# if !@HAVE_DECL_SETENV@ -_GL_FUNCDECL_SYS (setenv, int, - (const char *name, const char *value, int replace) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (setenv, int, - (const char *name, const char *value, int replace)); -# endif -# if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) -_GL_CXXALIASWARN (setenv); -# endif -#elif defined GNULIB_POSIXCHECK -# undef setenv -# if HAVE_RAW_DECL_SETENV -_GL_WARN_ON_USE (setenv, "setenv is unportable - " - "use gnulib module setenv for portability"); -# endif -#endif - -#if @GNULIB_STRTOD@ - /* Parse a double from STRING, updating ENDP if appropriate. */ -# if @REPLACE_STRTOD@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define strtod rpl_strtod -# endif -_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); -# else -# if !@HAVE_STRTOD@ -_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); -# endif -_GL_CXXALIASWARN (strtod); -#elif defined GNULIB_POSIXCHECK -# undef strtod -# if HAVE_RAW_DECL_STRTOD -_GL_WARN_ON_USE (strtod, "strtod is unportable - " - "use gnulib module strtod for portability"); -# endif -#endif - -#if @GNULIB_STRTOLL@ -/* Parse a signed integer whose textual representation starts at STRING. - The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, - it may be decimal or octal (with prefix "0") or hexadecimal (with prefix - "0x"). - If ENDPTR is not NULL, the address of the first byte after the integer is - stored in *ENDPTR. - Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set - to ERANGE. */ -# if !@HAVE_STRTOLL@ -_GL_FUNCDECL_SYS (strtoll, long long, - (const char *string, char **endptr, int base) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strtoll, long long, - (const char *string, char **endptr, int base)); -_GL_CXXALIASWARN (strtoll); -#elif defined GNULIB_POSIXCHECK -# undef strtoll -# if HAVE_RAW_DECL_STRTOLL -_GL_WARN_ON_USE (strtoll, "strtoll is unportable - " - "use gnulib module strtoll for portability"); -# endif -#endif - -#if @GNULIB_STRTOULL@ -/* Parse an unsigned integer whose textual representation starts at STRING. - The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, - it may be decimal or octal (with prefix "0") or hexadecimal (with prefix - "0x"). - If ENDPTR is not NULL, the address of the first byte after the integer is - stored in *ENDPTR. - Upon overflow, the return value is ULLONG_MAX, and errno is set to - ERANGE. */ -# if !@HAVE_STRTOULL@ -_GL_FUNCDECL_SYS (strtoull, unsigned long long, - (const char *string, char **endptr, int base) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strtoull, unsigned long long, - (const char *string, char **endptr, int base)); -_GL_CXXALIASWARN (strtoull); -#elif defined GNULIB_POSIXCHECK -# undef strtoull -# if HAVE_RAW_DECL_STRTOULL -_GL_WARN_ON_USE (strtoull, "strtoull is unportable - " - "use gnulib module strtoull for portability"); -# endif -#endif - -#if @GNULIB_UNLOCKPT@ -/* Unlock the slave side of the pseudo-terminal whose master side is specified - by FD, so that it can be opened. */ -# if !@HAVE_UNLOCKPT@ -_GL_FUNCDECL_SYS (unlockpt, int, (int fd)); -# endif -_GL_CXXALIAS_SYS (unlockpt, int, (int fd)); -_GL_CXXALIASWARN (unlockpt); -#elif defined GNULIB_POSIXCHECK -# undef unlockpt -# if HAVE_RAW_DECL_UNLOCKPT -_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " - "use gnulib module unlockpt for portability"); -# endif -#endif - -#if @GNULIB_UNSETENV@ -/* Remove the variable NAME from the environment. */ -# if @REPLACE_UNSETENV@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef unsetenv -# define unsetenv rpl_unsetenv -# endif -_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); -# else -# if !@HAVE_DECL_UNSETENV@ -_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); -# endif -# if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) -_GL_CXXALIASWARN (unsetenv); -# endif -#elif defined GNULIB_POSIXCHECK -# undef unsetenv -# if HAVE_RAW_DECL_UNSETENV -_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " - "use gnulib module unsetenv for portability"); -# endif -#endif - -/* Convert a wide character to a multibyte character. */ -#if @GNULIB_WCTOMB@ -# if @REPLACE_WCTOMB@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wctomb -# define wctomb rpl_wctomb -# endif -_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); -_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); -# else -_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); -# endif -_GL_CXXALIASWARN (wctomb); -#endif - - -#endif /* _@GUARD_PREFIX@_STDLIB_H */ -#endif /* _@GUARD_PREFIX@_STDLIB_H */ -#endif diff --git a/src/gl/strdup.c b/src/gl/strdup.c deleted file mode 100644 index 81eb2260ce..0000000000 --- a/src/gl/strdup.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2016 Free Software - Foundation, Inc. - - This file is part of the GNU C Library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#ifndef _LIBC -# include -#endif - -/* Get specification. */ -#include - -#include - -#undef __strdup -#ifdef _LIBC -# undef strdup -#endif - -#ifndef weak_alias -# define __strdup strdup -#endif - -/* Duplicate S, returning an identical malloc'd string. */ -char * -__strdup (const char *s) -{ - size_t len = strlen (s) + 1; - void *new = malloc (len); - - if (new == NULL) - return NULL; - - return (char *) memcpy (new, s, len); -} -#ifdef libc_hidden_def -libc_hidden_def (__strdup) -#endif -#ifdef weak_alias -weak_alias (__strdup, strdup) -#endif diff --git a/src/gl/strerror-override.c b/src/gl/strerror-override.c deleted file mode 100644 index 9bc9b18951..0000000000 --- a/src/gl/strerror-override.c +++ /dev/null @@ -1,302 +0,0 @@ -/* strerror-override.c --- POSIX compatible system error routine - - Copyright (C) 2010-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Bruno Haible , 2010. */ - -#include - -#include "strerror-override.h" - -#include - -#if GNULIB_defined_EWINSOCK /* native Windows platforms */ -# if HAVE_WINSOCK2_H -# include -# endif -#endif - -/* If ERRNUM maps to an errno value defined by gnulib, return a string - describing the error. Otherwise return NULL. */ -const char * -strerror_override (int errnum) -{ - /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ - switch (errnum) - { -#if REPLACE_STRERROR_0 - case 0: - return "Success"; -#endif - -#if GNULIB_defined_ESOCK /* native Windows platforms with older */ - case EINPROGRESS: - return "Operation now in progress"; - case EALREADY: - return "Operation already in progress"; - case ENOTSOCK: - return "Socket operation on non-socket"; - case EDESTADDRREQ: - return "Destination address required"; - case EMSGSIZE: - return "Message too long"; - case EPROTOTYPE: - return "Protocol wrong type for socket"; - case ENOPROTOOPT: - return "Protocol not available"; - case EPROTONOSUPPORT: - return "Protocol not supported"; - case EOPNOTSUPP: - return "Operation not supported"; - case EAFNOSUPPORT: - return "Address family not supported by protocol"; - case EADDRINUSE: - return "Address already in use"; - case EADDRNOTAVAIL: - return "Cannot assign requested address"; - case ENETDOWN: - return "Network is down"; - case ENETUNREACH: - return "Network is unreachable"; - case ECONNRESET: - return "Connection reset by peer"; - case ENOBUFS: - return "No buffer space available"; - case EISCONN: - return "Transport endpoint is already connected"; - case ENOTCONN: - return "Transport endpoint is not connected"; - case ETIMEDOUT: - return "Connection timed out"; - case ECONNREFUSED: - return "Connection refused"; - case ELOOP: - return "Too many levels of symbolic links"; - case EHOSTUNREACH: - return "No route to host"; - case EWOULDBLOCK: - return "Operation would block"; -#endif -#if GNULIB_defined_ESTREAMS /* native Windows platforms with older */ - case ETXTBSY: - return "Text file busy"; - case ENODATA: - return "No data available"; - case ENOSR: - return "Out of streams resources"; - case ENOSTR: - return "Device not a stream"; - case ETIME: - return "Timer expired"; - case EOTHER: - return "Other error"; -#endif -#if GNULIB_defined_EWINSOCK /* native Windows platforms */ - case ESOCKTNOSUPPORT: - return "Socket type not supported"; - case EPFNOSUPPORT: - return "Protocol family not supported"; - case ESHUTDOWN: - return "Cannot send after transport endpoint shutdown"; - case ETOOMANYREFS: - return "Too many references: cannot splice"; - case EHOSTDOWN: - return "Host is down"; - case EPROCLIM: - return "Too many processes"; - case EUSERS: - return "Too many users"; - case EDQUOT: - return "Disk quota exceeded"; - case ESTALE: - return "Stale NFS file handle"; - case EREMOTE: - return "Object is remote"; -# if HAVE_WINSOCK2_H - /* WSA_INVALID_HANDLE maps to EBADF */ - /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ - /* WSA_INVALID_PARAMETER maps to EINVAL */ - case WSA_OPERATION_ABORTED: - return "Overlapped operation aborted"; - case WSA_IO_INCOMPLETE: - return "Overlapped I/O event object not in signaled state"; - case WSA_IO_PENDING: - return "Overlapped operations will complete later"; - /* WSAEINTR maps to EINTR */ - /* WSAEBADF maps to EBADF */ - /* WSAEACCES maps to EACCES */ - /* WSAEFAULT maps to EFAULT */ - /* WSAEINVAL maps to EINVAL */ - /* WSAEMFILE maps to EMFILE */ - /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ - /* WSAEINPROGRESS maps to EINPROGRESS */ - /* WSAEALREADY maps to EALREADY */ - /* WSAENOTSOCK maps to ENOTSOCK */ - /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ - /* WSAEMSGSIZE maps to EMSGSIZE */ - /* WSAEPROTOTYPE maps to EPROTOTYPE */ - /* WSAENOPROTOOPT maps to ENOPROTOOPT */ - /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ - /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ - /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ - /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ - /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ - /* WSAEADDRINUSE maps to EADDRINUSE */ - /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ - /* WSAENETDOWN maps to ENETDOWN */ - /* WSAENETUNREACH maps to ENETUNREACH */ - /* WSAENETRESET maps to ENETRESET */ - /* WSAECONNABORTED maps to ECONNABORTED */ - /* WSAECONNRESET maps to ECONNRESET */ - /* WSAENOBUFS maps to ENOBUFS */ - /* WSAEISCONN maps to EISCONN */ - /* WSAENOTCONN maps to ENOTCONN */ - /* WSAESHUTDOWN is ESHUTDOWN */ - /* WSAETOOMANYREFS is ETOOMANYREFS */ - /* WSAETIMEDOUT maps to ETIMEDOUT */ - /* WSAECONNREFUSED maps to ECONNREFUSED */ - /* WSAELOOP maps to ELOOP */ - /* WSAENAMETOOLONG maps to ENAMETOOLONG */ - /* WSAEHOSTDOWN is EHOSTDOWN */ - /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ - /* WSAENOTEMPTY maps to ENOTEMPTY */ - /* WSAEPROCLIM is EPROCLIM */ - /* WSAEUSERS is EUSERS */ - /* WSAEDQUOT is EDQUOT */ - /* WSAESTALE is ESTALE */ - /* WSAEREMOTE is EREMOTE */ - case WSASYSNOTREADY: - return "Network subsystem is unavailable"; - case WSAVERNOTSUPPORTED: - return "Winsock.dll version out of range"; - case WSANOTINITIALISED: - return "Successful WSAStartup not yet performed"; - case WSAEDISCON: - return "Graceful shutdown in progress"; - case WSAENOMORE: case WSA_E_NO_MORE: - return "No more results"; - case WSAECANCELLED: case WSA_E_CANCELLED: - return "Call was canceled"; - case WSAEINVALIDPROCTABLE: - return "Procedure call table is invalid"; - case WSAEINVALIDPROVIDER: - return "Service provider is invalid"; - case WSAEPROVIDERFAILEDINIT: - return "Service provider failed to initialize"; - case WSASYSCALLFAILURE: - return "System call failure"; - case WSASERVICE_NOT_FOUND: - return "Service not found"; - case WSATYPE_NOT_FOUND: - return "Class type not found"; - case WSAEREFUSED: - return "Database query was refused"; - case WSAHOST_NOT_FOUND: - return "Host not found"; - case WSATRY_AGAIN: - return "Nonauthoritative host not found"; - case WSANO_RECOVERY: - return "Nonrecoverable error"; - case WSANO_DATA: - return "Valid name, no data record of requested type"; - /* WSA_QOS_* omitted */ -# endif -#endif - -#if GNULIB_defined_ENOMSG - case ENOMSG: - return "No message of desired type"; -#endif - -#if GNULIB_defined_EIDRM - case EIDRM: - return "Identifier removed"; -#endif - -#if GNULIB_defined_ENOLINK - case ENOLINK: - return "Link has been severed"; -#endif - -#if GNULIB_defined_EPROTO - case EPROTO: - return "Protocol error"; -#endif - -#if GNULIB_defined_EMULTIHOP - case EMULTIHOP: - return "Multihop attempted"; -#endif - -#if GNULIB_defined_EBADMSG - case EBADMSG: - return "Bad message"; -#endif - -#if GNULIB_defined_EOVERFLOW - case EOVERFLOW: - return "Value too large for defined data type"; -#endif - -#if GNULIB_defined_ENOTSUP - case ENOTSUP: - return "Not supported"; -#endif - -#if GNULIB_defined_ENETRESET - case ENETRESET: - return "Network dropped connection on reset"; -#endif - -#if GNULIB_defined_ECONNABORTED - case ECONNABORTED: - return "Software caused connection abort"; -#endif - -#if GNULIB_defined_ESTALE - case ESTALE: - return "Stale NFS file handle"; -#endif - -#if GNULIB_defined_EDQUOT - case EDQUOT: - return "Disk quota exceeded"; -#endif - -#if GNULIB_defined_ECANCELED - case ECANCELED: - return "Operation canceled"; -#endif - -#if GNULIB_defined_EOWNERDEAD - case EOWNERDEAD: - return "Owner died"; -#endif - -#if GNULIB_defined_ENOTRECOVERABLE - case ENOTRECOVERABLE: - return "State not recoverable"; -#endif - -#if GNULIB_defined_EILSEQ - case EILSEQ: - return "Invalid or incomplete multibyte or wide character"; -#endif - - default: - return NULL; - } -} diff --git a/src/gl/strerror-override.h b/src/gl/strerror-override.h deleted file mode 100644 index 5264fd5f39..0000000000 --- a/src/gl/strerror-override.h +++ /dev/null @@ -1,56 +0,0 @@ -/* strerror-override.h --- POSIX compatible system error routine - - Copyright (C) 2010-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef _GL_STRERROR_OVERRIDE_H -# define _GL_STRERROR_OVERRIDE_H - -# include -# include - -/* Reasonable buffer size that should never trigger ERANGE; if this - proves too small, we intentionally abort(), to remind us to fix - this value. */ -# define STACKBUF_LEN 256 - -/* If ERRNUM maps to an errno value defined by gnulib, return a string - describing the error. Otherwise return NULL. */ -# if REPLACE_STRERROR_0 \ - || GNULIB_defined_ESOCK \ - || GNULIB_defined_ESTREAMS \ - || GNULIB_defined_EWINSOCK \ - || GNULIB_defined_ENOMSG \ - || GNULIB_defined_EIDRM \ - || GNULIB_defined_ENOLINK \ - || GNULIB_defined_EPROTO \ - || GNULIB_defined_EMULTIHOP \ - || GNULIB_defined_EBADMSG \ - || GNULIB_defined_EOVERFLOW \ - || GNULIB_defined_ENOTSUP \ - || GNULIB_defined_ENETRESET \ - || GNULIB_defined_ECONNABORTED \ - || GNULIB_defined_ESTALE \ - || GNULIB_defined_EDQUOT \ - || GNULIB_defined_ECANCELED \ - || GNULIB_defined_EOWNERDEAD \ - || GNULIB_defined_ENOTRECOVERABLE \ - || GNULIB_defined_EILSEQ -extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; -# else -# define strerror_override(ignored) NULL -# endif - -#endif /* _GL_STRERROR_OVERRIDE_H */ diff --git a/src/gl/strerror.c b/src/gl/strerror.c deleted file mode 100644 index 8fff3bd6a8..0000000000 --- a/src/gl/strerror.c +++ /dev/null @@ -1,71 +0,0 @@ -/* strerror.c --- POSIX compatible system error routine - - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -/* Specification. */ -#include - -#include -#include -#include -#include - -#include "intprops.h" -#include "strerror-override.h" -#include "verify.h" - -/* Use the system functions, not the gnulib overrides in this file. */ -#undef sprintf - -char * -strerror (int n) -#undef strerror -{ - static char buf[STACKBUF_LEN]; - size_t len; - - /* Cast away const, due to the historical signature of strerror; - callers should not be modifying the string. */ - const char *msg = strerror_override (n); - if (msg) - return (char *) msg; - - msg = strerror (n); - - /* Our strerror_r implementation might use the system's strerror - buffer, so all other clients of strerror have to see the error - copied into a buffer that we manage. This is not thread-safe, - even if the system strerror is, but portable programs shouldn't - be using strerror if they care about thread-safety. */ - if (!msg || !*msg) - { - static char const fmt[] = "Unknown error %d"; - verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); - sprintf (buf, fmt, n); - errno = EINVAL; - return buf; - } - - /* Fix STACKBUF_LEN if this ever aborts. */ - len = strlen (msg); - if (sizeof buf <= len) - abort (); - - memcpy (buf, msg, len + 1); - return buf; -} diff --git a/src/gl/strftime.c b/src/gl/strftime.c deleted file mode 100644 index 2e010830f7..0000000000 --- a/src/gl/strftime.c +++ /dev/null @@ -1,1499 +0,0 @@ -/* Copyright (C) 1991-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; either - version 3 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public - License along with the GNU C Library; if not, see - . */ - -#ifdef _LIBC -# define USE_IN_EXTENDED_LOCALE_MODEL 1 -# define HAVE_STRUCT_ERA_ENTRY 1 -# define HAVE_TM_GMTOFF 1 -# define HAVE_TM_ZONE 1 -# define HAVE_TZNAME 1 -# define HAVE_TZSET 1 -# include "../locale/localeinfo.h" -#else -# include -# if FPRINTFTIME -# include "fprintftime.h" -# else -# include "strftime.h" -# endif -# include "time-internal.h" -#endif - -#include -#include - -#if HAVE_TZNAME && !HAVE_DECL_TZNAME -extern char *tzname[]; -#endif - -/* Do multibyte processing if multibyte encodings are supported, unless - multibyte sequences are safe in formats. Multibyte sequences are - safe if they cannot contain byte sequences that look like format - conversion specifications. The multibyte encodings used by the - C library on the various platforms (UTF-8, GB2312, GBK, CP936, - GB18030, EUC-TW, BIG5, BIG5-HKSCS, CP950, EUC-JP, EUC-KR, CP949, - SHIFT_JIS, CP932, JOHAB) are safe for formats, because the byte '%' - cannot occur in a multibyte character except in the first byte. - - The DEC-HANYU encoding used on OSF/1 is not safe for formats, but - this encoding has never been seen in real-life use, so we ignore - it. */ -#if !(defined __osf__ && 0) -# define MULTIBYTE_IS_FORMAT_SAFE 1 -#endif -#define DO_MULTIBYTE (! MULTIBYTE_IS_FORMAT_SAFE) - -#if DO_MULTIBYTE -# include - static const mbstate_t mbstate_zero; -#endif - -#include -#include -#include -#include -#include - -#ifdef COMPILE_WIDE -# include -# define CHAR_T wchar_t -# define UCHAR_T unsigned int -# define L_(Str) L##Str -# define NLW(Sym) _NL_W##Sym - -# define MEMCPY(d, s, n) __wmemcpy (d, s, n) -# define STRLEN(s) __wcslen (s) - -#else -# define CHAR_T char -# define UCHAR_T unsigned char -# define L_(Str) Str -# define NLW(Sym) Sym - -# define MEMCPY(d, s, n) memcpy (d, s, n) -# define STRLEN(s) strlen (s) - -#endif - -/* Shift A right by B bits portably, by dividing A by 2**B and - truncating towards minus infinity. A and B should be free of side - effects, and B should be in the range 0 <= B <= INT_BITS - 2, where - INT_BITS is the number of useful bits in an int. GNU code can - assume that INT_BITS is at least 32. - - ISO C99 says that A >> B is implementation-defined if A < 0. Some - implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift - right in the usual way when A < 0, so SHR falls back on division if - ordinary A >> B doesn't seem to be the usual signed shift. */ -#define SHR(a, b) \ - (-1 >> 1 == -1 \ - ? (a) >> (b) \ - : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) - -/* Bound on length of the string representing an integer type or expression T. - Subtract 1 for the sign bit if t is signed; log10 (2.0) < 146/485; - add 1 for integer division truncation; add 1 more for a minus sign - if needed. */ -#define INT_STRLEN_BOUND(t) \ - ((sizeof (t) * CHAR_BIT - 1) * 146 / 485 + 2) - -#define TM_YEAR_BASE 1900 - -#ifndef __isleap -/* Nonzero if YEAR is a leap year (every 4 years, - except every 100th isn't, and every 400th is). */ -# define __isleap(year) \ - ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) -#endif - - -#ifdef _LIBC -# define mktime_z(tz, tm) mktime (tm) -# define tzname __tzname -# define tzset __tzset -#endif - -#ifndef FPRINTFTIME -# define FPRINTFTIME 0 -#endif - -#if FPRINTFTIME -# define STREAM_OR_CHAR_T FILE -# define STRFTIME_ARG(x) /* empty */ -#else -# define STREAM_OR_CHAR_T CHAR_T -# define STRFTIME_ARG(x) x, -#endif - -#if FPRINTFTIME -# define memset_byte(P, Len, Byte) \ - do { size_t _i; for (_i = 0; _i < Len; _i++) fputc (Byte, P); } while (0) -# define memset_space(P, Len) memset_byte (P, Len, ' ') -# define memset_zero(P, Len) memset_byte (P, Len, '0') -#elif defined COMPILE_WIDE -# define memset_space(P, Len) (wmemset (P, L' ', Len), (P) += (Len)) -# define memset_zero(P, Len) (wmemset (P, L'0', Len), (P) += (Len)) -#else -# define memset_space(P, Len) (memset (P, ' ', Len), (P) += (Len)) -# define memset_zero(P, Len) (memset (P, '0', Len), (P) += (Len)) -#endif - -#if FPRINTFTIME -# define advance(P, N) -#else -# define advance(P, N) ((P) += (N)) -#endif - -#define add(n, f) \ - do \ - { \ - size_t _n = (n); \ - size_t _w = (width < 0 ? 0 : width); \ - size_t _incr = _n < _w ? _w : _n; \ - if (_incr >= maxsize - i) \ - return 0; \ - if (p) \ - { \ - if (digits == 0 && _n < _w) \ - { \ - size_t _delta = width - _n; \ - if (pad == L_('0')) \ - memset_zero (p, _delta); \ - else \ - memset_space (p, _delta); \ - } \ - f; \ - advance (p, _n); \ - } \ - i += _incr; \ - } while (0) - -#if FPRINTFTIME -# define add1(C) add (1, fputc (C, p)) -#else -# define add1(C) add (1, *p = C) -#endif - -#if FPRINTFTIME -# define cpy(n, s) \ - add ((n), \ - do \ - { \ - if (to_lowcase) \ - fwrite_lowcase (p, (s), _n); \ - else if (to_uppcase) \ - fwrite_uppcase (p, (s), _n); \ - else \ - { \ - /* Ignore the value of fwrite. The caller can determine whether \ - an error occurred by inspecting ferror (P). All known fwrite \ - implementations set the stream's error indicator when they \ - fail due to ENOMEM etc., even though C11 and POSIX.1-2008 do \ - not require this. */ \ - fwrite (s, _n, 1, p); \ - } \ - } \ - while (0) \ - ) -#else -# define cpy(n, s) \ - add ((n), \ - if (to_lowcase) \ - memcpy_lowcase (p, (s), _n LOCALE_ARG); \ - else if (to_uppcase) \ - memcpy_uppcase (p, (s), _n LOCALE_ARG); \ - else \ - MEMCPY ((void *) p, (void const *) (s), _n)) -#endif - -#ifdef COMPILE_WIDE -# ifndef USE_IN_EXTENDED_LOCALE_MODEL -# undef __mbsrtowcs_l -# define __mbsrtowcs_l(d, s, l, st, loc) __mbsrtowcs (d, s, l, st) -# endif -# define widen(os, ws, l) \ - { \ - mbstate_t __st; \ - const char *__s = os; \ - memset (&__st, '\0', sizeof (__st)); \ - l = __mbsrtowcs_l (NULL, &__s, 0, &__st, loc); \ - ws = (wchar_t *) alloca ((l + 1) * sizeof (wchar_t)); \ - (void) __mbsrtowcs_l (ws, &__s, l, &__st, loc); \ - } -#endif - - -#if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL -/* We use this code also for the extended locale handling where the - function gets as an additional argument the locale which has to be - used. To access the values we have to redefine the _NL_CURRENT - macro. */ -# define strftime __strftime_l -# define wcsftime __wcsftime_l -# undef _NL_CURRENT -# define _NL_CURRENT(category, item) \ - (current->values[_NL_ITEM_INDEX (item)].string) -# define LOCALE_PARAM , __locale_t loc -# define LOCALE_ARG , loc -# define HELPER_LOCALE_ARG , current -#else -# define LOCALE_PARAM -# define LOCALE_ARG -# ifdef _LIBC -# define HELPER_LOCALE_ARG , _NL_CURRENT_DATA (LC_TIME) -# else -# define HELPER_LOCALE_ARG -# endif -#endif - -#ifdef COMPILE_WIDE -# ifdef USE_IN_EXTENDED_LOCALE_MODEL -# define TOUPPER(Ch, L) __towupper_l (Ch, L) -# define TOLOWER(Ch, L) __towlower_l (Ch, L) -# else -# define TOUPPER(Ch, L) towupper (Ch) -# define TOLOWER(Ch, L) towlower (Ch) -# endif -#else -# ifdef USE_IN_EXTENDED_LOCALE_MODEL -# define TOUPPER(Ch, L) __toupper_l (Ch, L) -# define TOLOWER(Ch, L) __tolower_l (Ch, L) -# else -# define TOUPPER(Ch, L) toupper (Ch) -# define TOLOWER(Ch, L) tolower (Ch) -# endif -#endif -/* We don't use 'isdigit' here since the locale dependent - interpretation is not what we want here. We only need to accept - the arabic digits in the ASCII range. One day there is perhaps a - more reliable way to accept other sets of digits. */ -#define ISDIGIT(Ch) ((unsigned int) (Ch) - L_('0') <= 9) - -#if FPRINTFTIME -static void -fwrite_lowcase (FILE *fp, const CHAR_T *src, size_t len) -{ - while (len-- > 0) - { - fputc (TOLOWER ((UCHAR_T) *src, loc), fp); - ++src; - } -} - -static void -fwrite_uppcase (FILE *fp, const CHAR_T *src, size_t len) -{ - while (len-- > 0) - { - fputc (TOUPPER ((UCHAR_T) *src, loc), fp); - ++src; - } -} -#else -static CHAR_T *memcpy_lowcase (CHAR_T *dest, const CHAR_T *src, - size_t len LOCALE_PARAM); - -static CHAR_T * -memcpy_lowcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM) -{ - while (len-- > 0) - dest[len] = TOLOWER ((UCHAR_T) src[len], loc); - return dest; -} - -static CHAR_T *memcpy_uppcase (CHAR_T *dest, const CHAR_T *src, - size_t len LOCALE_PARAM); - -static CHAR_T * -memcpy_uppcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM) -{ - while (len-- > 0) - dest[len] = TOUPPER ((UCHAR_T) src[len], loc); - return dest; -} -#endif - - -#if ! HAVE_TM_GMTOFF -/* Yield the difference between *A and *B, - measured in seconds, ignoring leap seconds. */ -# define tm_diff ftime_tm_diff -static int tm_diff (const struct tm *, const struct tm *); -static int -tm_diff (const struct tm *a, const struct tm *b) -{ - /* Compute intervening leap days correctly even if year is negative. - Take care to avoid int overflow in leap day calculations, - but it's OK to assume that A and B are close to each other. */ - int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); - int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); - int a100 = a4 / 25 - (a4 % 25 < 0); - int b100 = b4 / 25 - (b4 % 25 < 0); - int a400 = SHR (a100, 2); - int b400 = SHR (b100, 2); - int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); - int years = a->tm_year - b->tm_year; - int days = (365 * years + intervening_leap_days - + (a->tm_yday - b->tm_yday)); - return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) - + (a->tm_min - b->tm_min)) - + (a->tm_sec - b->tm_sec)); -} -#endif /* ! HAVE_TM_GMTOFF */ - - - -/* The number of days from the first day of the first ISO week of this - year to the year day YDAY with week day WDAY. ISO weeks start on - Monday; the first ISO week has the year's first Thursday. YDAY may - be as small as YDAY_MINIMUM. */ -#define ISO_WEEK_START_WDAY 1 /* Monday */ -#define ISO_WEEK1_WDAY 4 /* Thursday */ -#define YDAY_MINIMUM (-366) -static int iso_week_days (int, int); -#ifdef __GNUC__ -__inline__ -#endif -static int -iso_week_days (int yday, int wday) -{ - /* Add enough to the first operand of % to make it nonnegative. */ - int big_enough_multiple_of_7 = (-YDAY_MINIMUM / 7 + 2) * 7; - return (yday - - (yday - wday + ISO_WEEK1_WDAY + big_enough_multiple_of_7) % 7 - + ISO_WEEK1_WDAY - ISO_WEEK_START_WDAY); -} - - -/* When compiling this file, GNU applications can #define my_strftime - to a symbol (typically nstrftime) to get an extended strftime with - extra arguments TZ and NS. */ - -#if FPRINTFTIME -# undef my_strftime -# define my_strftime fprintftime -#endif - -#ifdef my_strftime -# undef HAVE_TZSET -# define extra_args , tz, ns -# define extra_args_spec , timezone_t tz, int ns -#else -# if defined COMPILE_WIDE -# define my_strftime wcsftime -# define nl_get_alt_digit _nl_get_walt_digit -# else -# define my_strftime strftime -# define nl_get_alt_digit _nl_get_alt_digit -# endif -# define extra_args -# define extra_args_spec -/* We don't have this information in general. */ -# define tz 1 -# define ns 0 -#endif - -static size_t __strftime_internal (STREAM_OR_CHAR_T *, STRFTIME_ARG (size_t) - const CHAR_T *, const struct tm *, - bool, bool * - extra_args_spec LOCALE_PARAM); - -/* Write information from TP into S according to the format - string FORMAT, writing no more that MAXSIZE characters - (including the terminating '\0') and returning number of - characters written. If S is NULL, nothing will be written - anywhere, so to determine how many characters would be - written, use NULL for S and (size_t) -1 for MAXSIZE. */ -size_t -my_strftime (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) - const CHAR_T *format, - const struct tm *tp extra_args_spec LOCALE_PARAM) -{ - bool tzset_called = false; - return __strftime_internal (s, STRFTIME_ARG (maxsize) format, tp, - false, &tzset_called extra_args LOCALE_ARG); -} -#if defined _LIBC && ! FPRINTFTIME -libc_hidden_def (my_strftime) -#endif - -/* Just like my_strftime, above, but with two more parameters. - UPCASE indicate that the result should be converted to upper case, - and *TZSET_CALLED indicates whether tzset has been called here. */ -static size_t -__strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) - const CHAR_T *format, - const struct tm *tp, bool upcase, bool *tzset_called - extra_args_spec LOCALE_PARAM) -{ -#if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL - struct __locale_data *const current = loc->__locales[LC_TIME]; -#endif -#if FPRINTFTIME - size_t maxsize = (size_t) -1; -#endif - - int hour12 = tp->tm_hour; -#ifdef _NL_CURRENT - /* We cannot make the following values variables since we must delay - the evaluation of these values until really needed since some - expressions might not be valid in every situation. The 'struct tm' - might be generated by a strptime() call that initialized - only a few elements. Dereference the pointers only if the format - requires this. Then it is ok to fail if the pointers are invalid. */ -# define a_wkday \ - ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6 \ - ? "?" : _NL_CURRENT (LC_TIME, NLW(ABDAY_1) + tp->tm_wday))) -# define f_wkday \ - ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6 \ - ? "?" : _NL_CURRENT (LC_TIME, NLW(DAY_1) + tp->tm_wday))) -# define a_month \ - ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ - ? "?" : _NL_CURRENT (LC_TIME, NLW(ABMON_1) + tp->tm_mon))) -# define f_month \ - ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ - ? "?" : _NL_CURRENT (LC_TIME, NLW(MON_1) + tp->tm_mon))) -# define ampm \ - ((const CHAR_T *) _NL_CURRENT (LC_TIME, tp->tm_hour > 11 \ - ? NLW(PM_STR) : NLW(AM_STR))) - -# define aw_len STRLEN (a_wkday) -# define am_len STRLEN (a_month) -# define ap_len STRLEN (ampm) -#endif -#if HAVE_TZNAME - char **tzname_vec = tzname; -#endif - const char *zone; - size_t i = 0; - STREAM_OR_CHAR_T *p = s; - const CHAR_T *f; -#if DO_MULTIBYTE && !defined COMPILE_WIDE - const char *format_end = NULL; -#endif - -#if ! defined _LIBC && ! HAVE_RUN_TZSET_TEST - /* Solaris 2.5.x and 2.6 tzset sometimes modify the storage returned - by localtime. On such systems, we must either use the tzset and - localtime wrappers to work around the bug (which sets - HAVE_RUN_TZSET_TEST) or make a copy of the structure. */ - struct tm copy = *tp; - tp = © -#endif - - zone = NULL; -#if HAVE_TM_ZONE - /* The POSIX test suite assumes that setting - the environment variable TZ to a new value before calling strftime() - will influence the result (the %Z format) even if the information in - TP is computed with a totally different time zone. - This is bogus: though POSIX allows bad behavior like this, - POSIX does not require it. Do the right thing instead. */ - zone = (const char *) tp->tm_zone; -#endif -#if HAVE_TZNAME - if (!tz) - { - if (! (zone && *zone)) - zone = "GMT"; - } - else - { -# if !HAVE_TM_ZONE - /* Infer the zone name from *TZ instead of from TZNAME. */ - tzname_vec = tz->tzname_copy; -# endif - } - /* The tzset() call might have changed the value. */ - if (!(zone && *zone) && tp->tm_isdst >= 0) - { - /* POSIX.1 requires that local time zone information be used as - though strftime called tzset. */ -# if HAVE_TZSET - if (!*tzset_called) - { - tzset (); - *tzset_called = true; - } -# endif - zone = tzname_vec[tp->tm_isdst != 0]; - } -#endif - if (! zone) - zone = ""; - - if (hour12 > 12) - hour12 -= 12; - else - if (hour12 == 0) - hour12 = 12; - - for (f = format; *f != '\0'; ++f) - { - int pad = 0; /* Padding for number ('-', '_', or 0). */ - int modifier; /* Field modifier ('E', 'O', or 0). */ - int digits = 0; /* Max digits for numeric format. */ - int number_value; /* Numeric value to be printed. */ - unsigned int u_number_value; /* (unsigned int) number_value. */ - bool negative_number; /* The number is negative. */ - bool always_output_a_sign; /* +/- should always be output. */ - int tz_colon_mask; /* Bitmask of where ':' should appear. */ - const CHAR_T *subfmt; - CHAR_T sign_char; - CHAR_T *bufp; - CHAR_T buf[1 - + 2 /* for the two colons in a %::z or %:::z time zone */ - + (sizeof (int) < sizeof (time_t) - ? INT_STRLEN_BOUND (time_t) - : INT_STRLEN_BOUND (int))]; - int width = -1; - bool to_lowcase = false; - bool to_uppcase = upcase; - size_t colons; - bool change_case = false; - int format_char; - -#if DO_MULTIBYTE && !defined COMPILE_WIDE - switch (*f) - { - case L_('%'): - break; - - case L_('\b'): case L_('\t'): case L_('\n'): - case L_('\v'): case L_('\f'): case L_('\r'): - case L_(' '): case L_('!'): case L_('"'): case L_('#'): case L_('&'): - case L_('\''): case L_('('): case L_(')'): case L_('*'): case L_('+'): - case L_(','): case L_('-'): case L_('.'): case L_('/'): case L_('0'): - case L_('1'): case L_('2'): case L_('3'): case L_('4'): case L_('5'): - case L_('6'): case L_('7'): case L_('8'): case L_('9'): case L_(':'): - case L_(';'): case L_('<'): case L_('='): case L_('>'): case L_('?'): - case L_('A'): case L_('B'): case L_('C'): case L_('D'): case L_('E'): - case L_('F'): case L_('G'): case L_('H'): case L_('I'): case L_('J'): - case L_('K'): case L_('L'): case L_('M'): case L_('N'): case L_('O'): - case L_('P'): case L_('Q'): case L_('R'): case L_('S'): case L_('T'): - case L_('U'): case L_('V'): case L_('W'): case L_('X'): case L_('Y'): - case L_('Z'): case L_('['): case L_('\\'): case L_(']'): case L_('^'): - case L_('_'): case L_('a'): case L_('b'): case L_('c'): case L_('d'): - case L_('e'): case L_('f'): case L_('g'): case L_('h'): case L_('i'): - case L_('j'): case L_('k'): case L_('l'): case L_('m'): case L_('n'): - case L_('o'): case L_('p'): case L_('q'): case L_('r'): case L_('s'): - case L_('t'): case L_('u'): case L_('v'): case L_('w'): case L_('x'): - case L_('y'): case L_('z'): case L_('{'): case L_('|'): case L_('}'): - case L_('~'): - /* The C Standard requires these 98 characters (plus '%') to - be in the basic execution character set. None of these - characters can start a multibyte sequence, so they need - not be analyzed further. */ - add1 (*f); - continue; - - default: - /* Copy this multibyte sequence until we reach its end, find - an error, or come back to the initial shift state. */ - { - mbstate_t mbstate = mbstate_zero; - size_t len = 0; - size_t fsize; - - if (! format_end) - format_end = f + strlen (f) + 1; - fsize = format_end - f; - - do - { - size_t bytes = mbrlen (f + len, fsize - len, &mbstate); - - if (bytes == 0) - break; - - if (bytes == (size_t) -2) - { - len += strlen (f + len); - break; - } - - if (bytes == (size_t) -1) - { - len++; - break; - } - - len += bytes; - } - while (! mbsinit (&mbstate)); - - cpy (len, f); - f += len - 1; - continue; - } - } - -#else /* ! DO_MULTIBYTE */ - - /* Either multibyte encodings are not supported, they are - safe for formats, so any non-'%' byte can be copied through, - or this is the wide character version. */ - if (*f != L_('%')) - { - add1 (*f); - continue; - } - -#endif /* ! DO_MULTIBYTE */ - - /* Check for flags that can modify a format. */ - while (1) - { - switch (*++f) - { - /* This influences the number formats. */ - case L_('_'): - case L_('-'): - case L_('0'): - pad = *f; - continue; - - /* This changes textual output. */ - case L_('^'): - to_uppcase = true; - continue; - case L_('#'): - change_case = true; - continue; - - default: - break; - } - break; - } - - /* As a GNU extension we allow the field width to be specified. */ - if (ISDIGIT (*f)) - { - width = 0; - do - { - if (width > INT_MAX / 10 - || (width == INT_MAX / 10 && *f - L_('0') > INT_MAX % 10)) - /* Avoid overflow. */ - width = INT_MAX; - else - { - width *= 10; - width += *f - L_('0'); - } - ++f; - } - while (ISDIGIT (*f)); - } - - /* Check for modifiers. */ - switch (*f) - { - case L_('E'): - case L_('O'): - modifier = *f++; - break; - - default: - modifier = 0; - break; - } - - /* Now do the specified format. */ - format_char = *f; - switch (format_char) - { -#define DO_NUMBER(d, v) \ - do \ - { \ - digits = d; \ - number_value = v; \ - goto do_number; \ - } \ - while (0) -#define DO_SIGNED_NUMBER(d, negative, v) \ - do \ - { \ - digits = d; \ - negative_number = negative; \ - u_number_value = v; \ - goto do_signed_number; \ - } \ - while (0) - - /* The mask is not what you might think. - When the ordinal i'th bit is set, insert a colon - before the i'th digit of the time zone representation. */ -#define DO_TZ_OFFSET(d, negative, mask, v) \ - do \ - { \ - digits = d; \ - negative_number = negative; \ - tz_colon_mask = mask; \ - u_number_value = v; \ - goto do_tz_offset; \ - } \ - while (0) -#define DO_NUMBER_SPACEPAD(d, v) \ - do \ - { \ - digits = d; \ - number_value = v; \ - goto do_number_spacepad; \ - } \ - while (0) - - case L_('%'): - if (modifier != 0) - goto bad_format; - add1 (*f); - break; - - case L_('a'): - if (modifier != 0) - goto bad_format; - if (change_case) - { - to_uppcase = true; - to_lowcase = false; - } -#ifdef _NL_CURRENT - cpy (aw_len, a_wkday); - break; -#else - goto underlying_strftime; -#endif - - case 'A': - if (modifier != 0) - goto bad_format; - if (change_case) - { - to_uppcase = true; - to_lowcase = false; - } -#ifdef _NL_CURRENT - cpy (STRLEN (f_wkday), f_wkday); - break; -#else - goto underlying_strftime; -#endif - - case L_('b'): - case L_('h'): - if (change_case) - { - to_uppcase = true; - to_lowcase = false; - } - if (modifier != 0) - goto bad_format; -#ifdef _NL_CURRENT - cpy (am_len, a_month); - break; -#else - goto underlying_strftime; -#endif - - case L_('B'): - if (modifier != 0) - goto bad_format; - if (change_case) - { - to_uppcase = true; - to_lowcase = false; - } -#ifdef _NL_CURRENT - cpy (STRLEN (f_month), f_month); - break; -#else - goto underlying_strftime; -#endif - - case L_('c'): - if (modifier == L_('O')) - goto bad_format; -#ifdef _NL_CURRENT - if (! (modifier == 'E' - && (*(subfmt = - (const CHAR_T *) _NL_CURRENT (LC_TIME, - NLW(ERA_D_T_FMT))) - != '\0'))) - subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_T_FMT)); -#else - goto underlying_strftime; -#endif - - subformat: - { - size_t len = __strftime_internal (NULL, STRFTIME_ARG ((size_t) -1) - subfmt, - tp, to_uppcase, tzset_called - extra_args LOCALE_ARG); - add (len, __strftime_internal (p, - STRFTIME_ARG (maxsize - i) - subfmt, - tp, to_uppcase, tzset_called - extra_args LOCALE_ARG)); - } - break; - -#if !(defined _NL_CURRENT && HAVE_STRUCT_ERA_ENTRY) - underlying_strftime: - { - /* The relevant information is available only via the - underlying strftime implementation, so use that. */ - char ufmt[5]; - char *u = ufmt; - char ubuf[1024]; /* enough for any single format in practice */ - size_t len; - /* Make sure we're calling the actual underlying strftime. - In some cases, config.h contains something like - "#define strftime rpl_strftime". */ -# ifdef strftime -# undef strftime - size_t strftime (); -# endif - - /* The space helps distinguish strftime failure from empty - output. */ - *u++ = ' '; - *u++ = '%'; - if (modifier != 0) - *u++ = modifier; - *u++ = format_char; - *u = '\0'; - len = strftime (ubuf, sizeof ubuf, ufmt, tp); - if (len != 0) - cpy (len - 1, ubuf + 1); - } - break; -#endif - - case L_('C'): - if (modifier == L_('E')) - { -#if HAVE_STRUCT_ERA_ENTRY - struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); - if (era) - { -# ifdef COMPILE_WIDE - size_t len = __wcslen (era->era_wname); - cpy (len, era->era_wname); -# else - size_t len = strlen (era->era_name); - cpy (len, era->era_name); -# endif - break; - } -#else - goto underlying_strftime; -#endif - } - - { - int century = tp->tm_year / 100 + TM_YEAR_BASE / 100; - century -= tp->tm_year % 100 < 0 && 0 < century; - DO_SIGNED_NUMBER (2, tp->tm_year < - TM_YEAR_BASE, century); - } - - case L_('x'): - if (modifier == L_('O')) - goto bad_format; -#ifdef _NL_CURRENT - if (! (modifier == L_('E') - && (*(subfmt = - (const CHAR_T *)_NL_CURRENT (LC_TIME, NLW(ERA_D_FMT))) - != L_('\0')))) - subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_FMT)); - goto subformat; -#else - goto underlying_strftime; -#endif - case L_('D'): - if (modifier != 0) - goto bad_format; - subfmt = L_("%m/%d/%y"); - goto subformat; - - case L_('d'): - if (modifier == L_('E')) - goto bad_format; - - DO_NUMBER (2, tp->tm_mday); - - case L_('e'): - if (modifier == L_('E')) - goto bad_format; - - DO_NUMBER_SPACEPAD (2, tp->tm_mday); - - /* All numeric formats set DIGITS and NUMBER_VALUE (or U_NUMBER_VALUE) - and then jump to one of these labels. */ - - do_tz_offset: - always_output_a_sign = true; - goto do_number_body; - - do_number_spacepad: - /* Force '_' flag unless overridden by '0' or '-' flag. */ - if (pad != L_('0') && pad != L_('-')) - pad = L_('_'); - - do_number: - /* Format NUMBER_VALUE according to the MODIFIER flag. */ - negative_number = number_value < 0; - u_number_value = number_value; - - do_signed_number: - always_output_a_sign = false; - tz_colon_mask = 0; - - do_number_body: - /* Format U_NUMBER_VALUE according to the MODIFIER flag. - NEGATIVE_NUMBER is nonzero if the original number was - negative; in this case it was converted directly to - unsigned int (i.e., modulo (UINT_MAX + 1)) without - negating it. */ - if (modifier == L_('O') && !negative_number) - { -#ifdef _NL_CURRENT - /* Get the locale specific alternate representation of - the number. If none exist NULL is returned. */ - const CHAR_T *cp = nl_get_alt_digit (u_number_value - HELPER_LOCALE_ARG); - - if (cp != NULL) - { - size_t digitlen = STRLEN (cp); - if (digitlen != 0) - { - cpy (digitlen, cp); - break; - } - } -#else - goto underlying_strftime; -#endif - } - - bufp = buf + sizeof (buf) / sizeof (buf[0]); - - if (negative_number) - u_number_value = - u_number_value; - - do - { - if (tz_colon_mask & 1) - *--bufp = ':'; - tz_colon_mask >>= 1; - *--bufp = u_number_value % 10 + L_('0'); - u_number_value /= 10; - } - while (u_number_value != 0 || tz_colon_mask != 0); - - do_number_sign_and_padding: - if (digits < width) - digits = width; - - sign_char = (negative_number ? L_('-') - : always_output_a_sign ? L_('+') - : 0); - - if (pad == L_('-')) - { - if (sign_char) - add1 (sign_char); - } - else - { - int padding = digits - (buf + (sizeof (buf) / sizeof (buf[0])) - - bufp) - !!sign_char; - - if (padding > 0) - { - if (pad == L_('_')) - { - if ((size_t) padding >= maxsize - i) - return 0; - - if (p) - memset_space (p, padding); - i += padding; - width = width > padding ? width - padding : 0; - if (sign_char) - add1 (sign_char); - } - else - { - if ((size_t) digits >= maxsize - i) - return 0; - - if (sign_char) - add1 (sign_char); - - if (p) - memset_zero (p, padding); - i += padding; - width = 0; - } - } - else - { - if (sign_char) - add1 (sign_char); - } - } - - cpy (buf + sizeof (buf) / sizeof (buf[0]) - bufp, bufp); - break; - - case L_('F'): - if (modifier != 0) - goto bad_format; - subfmt = L_("%Y-%m-%d"); - goto subformat; - - case L_('H'): - if (modifier == L_('E')) - goto bad_format; - - DO_NUMBER (2, tp->tm_hour); - - case L_('I'): - if (modifier == L_('E')) - goto bad_format; - - DO_NUMBER (2, hour12); - - case L_('k'): /* GNU extension. */ - if (modifier == L_('E')) - goto bad_format; - - DO_NUMBER_SPACEPAD (2, tp->tm_hour); - - case L_('l'): /* GNU extension. */ - if (modifier == L_('E')) - goto bad_format; - - DO_NUMBER_SPACEPAD (2, hour12); - - case L_('j'): - if (modifier == L_('E')) - goto bad_format; - - DO_SIGNED_NUMBER (3, tp->tm_yday < -1, tp->tm_yday + 1U); - - case L_('M'): - if (modifier == L_('E')) - goto bad_format; - - DO_NUMBER (2, tp->tm_min); - - case L_('m'): - if (modifier == L_('E')) - goto bad_format; - - DO_SIGNED_NUMBER (2, tp->tm_mon < -1, tp->tm_mon + 1U); - -#ifndef _LIBC - case L_('N'): /* GNU extension. */ - if (modifier == L_('E')) - goto bad_format; - - number_value = ns; - if (width == -1) - width = 9; - else - { - /* Take an explicit width less than 9 as a precision. */ - int j; - for (j = width; j < 9; j++) - number_value /= 10; - } - - DO_NUMBER (width, number_value); -#endif - - case L_('n'): - add1 (L_('\n')); - break; - - case L_('P'): - to_lowcase = true; -#ifndef _NL_CURRENT - format_char = L_('p'); -#endif - /* FALLTHROUGH */ - - case L_('p'): - if (change_case) - { - to_uppcase = false; - to_lowcase = true; - } -#ifdef _NL_CURRENT - cpy (ap_len, ampm); - break; -#else - goto underlying_strftime; -#endif - - case L_('q'): /* GNU extension. */ - DO_SIGNED_NUMBER (1, false, ((tp->tm_mon * 11) >> 5) + 1); - break; - - case L_('R'): - subfmt = L_("%H:%M"); - goto subformat; - - case L_('r'): -#ifdef _NL_CURRENT - if (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, - NLW(T_FMT_AMPM))) - == L_('\0')) - subfmt = L_("%I:%M:%S %p"); - goto subformat; -#else - goto underlying_strftime; -#endif - - case L_('S'): - if (modifier == L_('E')) - goto bad_format; - - DO_NUMBER (2, tp->tm_sec); - - case L_('s'): /* GNU extension. */ - { - struct tm ltm; - time_t t; - - ltm = *tp; - t = mktime_z (tz, <m); - - /* Generate string value for T using time_t arithmetic; - this works even if sizeof (long) < sizeof (time_t). */ - - bufp = buf + sizeof (buf) / sizeof (buf[0]); - negative_number = t < 0; - - do - { - int d = t % 10; - t /= 10; - *--bufp = (negative_number ? -d : d) + L_('0'); - } - while (t != 0); - - digits = 1; - always_output_a_sign = false; - goto do_number_sign_and_padding; - } - - case L_('X'): - if (modifier == L_('O')) - goto bad_format; -#ifdef _NL_CURRENT - if (! (modifier == L_('E') - && (*(subfmt = - (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_T_FMT))) - != L_('\0')))) - subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(T_FMT)); - goto subformat; -#else - goto underlying_strftime; -#endif - case L_('T'): - subfmt = L_("%H:%M:%S"); - goto subformat; - - case L_('t'): - add1 (L_('\t')); - break; - - case L_('u'): - DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1); - - case L_('U'): - if (modifier == L_('E')) - goto bad_format; - - DO_NUMBER (2, (tp->tm_yday - tp->tm_wday + 7) / 7); - - case L_('V'): - case L_('g'): - case L_('G'): - if (modifier == L_('E')) - goto bad_format; - { - /* YEAR is a leap year if and only if (tp->tm_year + TM_YEAR_BASE) - is a leap year, except that YEAR and YEAR - 1 both work - correctly even when (tp->tm_year + TM_YEAR_BASE) would - overflow. */ - int year = (tp->tm_year - + (tp->tm_year < 0 - ? TM_YEAR_BASE % 400 - : TM_YEAR_BASE % 400 - 400)); - int year_adjust = 0; - int days = iso_week_days (tp->tm_yday, tp->tm_wday); - - if (days < 0) - { - /* This ISO week belongs to the previous year. */ - year_adjust = -1; - days = iso_week_days (tp->tm_yday + (365 + __isleap (year - 1)), - tp->tm_wday); - } - else - { - int d = iso_week_days (tp->tm_yday - (365 + __isleap (year)), - tp->tm_wday); - if (0 <= d) - { - /* This ISO week belongs to the next year. */ - year_adjust = 1; - days = d; - } - } - - switch (*f) - { - case L_('g'): - { - int yy = (tp->tm_year % 100 + year_adjust) % 100; - DO_NUMBER (2, (0 <= yy - ? yy - : tp->tm_year < -TM_YEAR_BASE - year_adjust - ? -yy - : yy + 100)); - } - - case L_('G'): - DO_SIGNED_NUMBER (4, tp->tm_year < -TM_YEAR_BASE - year_adjust, - (tp->tm_year + (unsigned int) TM_YEAR_BASE - + year_adjust)); - - default: - DO_NUMBER (2, days / 7 + 1); - } - } - - case L_('W'): - if (modifier == L_('E')) - goto bad_format; - - DO_NUMBER (2, (tp->tm_yday - (tp->tm_wday - 1 + 7) % 7 + 7) / 7); - - case L_('w'): - if (modifier == L_('E')) - goto bad_format; - - DO_NUMBER (1, tp->tm_wday); - - case L_('Y'): - if (modifier == 'E') - { -#if HAVE_STRUCT_ERA_ENTRY - struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); - if (era) - { -# ifdef COMPILE_WIDE - subfmt = era->era_wformat; -# else - subfmt = era->era_format; -# endif - goto subformat; - } -#else - goto underlying_strftime; -#endif - } - if (modifier == L_('O')) - goto bad_format; - - DO_SIGNED_NUMBER (4, tp->tm_year < -TM_YEAR_BASE, - tp->tm_year + (unsigned int) TM_YEAR_BASE); - - case L_('y'): - if (modifier == L_('E')) - { -#if HAVE_STRUCT_ERA_ENTRY - struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); - if (era) - { - int delta = tp->tm_year - era->start_date[0]; - DO_NUMBER (1, (era->offset - + delta * era->absolute_direction)); - } -#else - goto underlying_strftime; -#endif - } - - { - int yy = tp->tm_year % 100; - if (yy < 0) - yy = tp->tm_year < - TM_YEAR_BASE ? -yy : yy + 100; - DO_NUMBER (2, yy); - } - - case L_('Z'): - if (change_case) - { - to_uppcase = false; - to_lowcase = true; - } - -#ifdef COMPILE_WIDE - { - /* The zone string is always given in multibyte form. We have - to transform it first. */ - wchar_t *wczone; - size_t len; - widen (zone, wczone, len); - cpy (len, wczone); - } -#else - cpy (strlen (zone), zone); -#endif - break; - - case L_(':'): - /* :, ::, and ::: are valid only just before 'z'. - :::: etc. are rejected later. */ - for (colons = 1; f[colons] == L_(':'); colons++) - continue; - if (f[colons] != L_('z')) - goto bad_format; - f += colons; - goto do_z_conversion; - - case L_('z'): - colons = 0; - - do_z_conversion: - if (tp->tm_isdst < 0) - break; - - { - int diff; - int hour_diff; - int min_diff; - int sec_diff; -#if HAVE_TM_GMTOFF - diff = tp->tm_gmtoff; -#else - if (!tz) - diff = 0; - else - { - struct tm gtm; - struct tm ltm; - time_t lt; - - /* POSIX.1 requires that local time zone information be used as - though strftime called tzset. */ -# if HAVE_TZSET - if (!*tzset_called) - { - tzset (); - *tzset_called = true; - } -# endif - - ltm = *tp; - lt = mktime_z (tz, <m); - - if (lt == (time_t) -1) - { - /* mktime returns -1 for errors, but -1 is also a - valid time_t value. Check whether an error really - occurred. */ - struct tm tm; - - if (! localtime_rz (tz, <, &tm) - || ((ltm.tm_sec ^ tm.tm_sec) - | (ltm.tm_min ^ tm.tm_min) - | (ltm.tm_hour ^ tm.tm_hour) - | (ltm.tm_mday ^ tm.tm_mday) - | (ltm.tm_mon ^ tm.tm_mon) - | (ltm.tm_year ^ tm.tm_year))) - break; - } - - if (! localtime_rz (0, <, >m)) - break; - - diff = tm_diff (<m, >m); - } -#endif - - hour_diff = diff / 60 / 60; - min_diff = diff / 60 % 60; - sec_diff = diff % 60; - - switch (colons) - { - case 0: /* +hhmm */ - DO_TZ_OFFSET (5, diff < 0, 0, hour_diff * 100 + min_diff); - - case 1: tz_hh_mm: /* +hh:mm */ - DO_TZ_OFFSET (6, diff < 0, 04, hour_diff * 100 + min_diff); - - case 2: tz_hh_mm_ss: /* +hh:mm:ss */ - DO_TZ_OFFSET (9, diff < 0, 024, - hour_diff * 10000 + min_diff * 100 + sec_diff); - - case 3: /* +hh if possible, else +hh:mm, else +hh:mm:ss */ - if (sec_diff != 0) - goto tz_hh_mm_ss; - if (min_diff != 0) - goto tz_hh_mm; - DO_TZ_OFFSET (3, diff < 0, 0, hour_diff); - - default: - goto bad_format; - } - } - - case L_('\0'): /* GNU extension: % at end of format. */ - --f; - /* Fall through. */ - default: - /* Unknown format; output the format, including the '%', - since this is most likely the right thing to do if a - multibyte string has been misparsed. */ - bad_format: - { - int flen; - for (flen = 1; f[1 - flen] != L_('%'); flen++) - continue; - cpy (flen, &f[1 - flen]); - } - break; - } - } - -#if ! FPRINTFTIME - if (p && maxsize != 0) - *p = L_('\0'); -#endif - - return i; -} diff --git a/src/gl/strftime.h b/src/gl/strftime.h deleted file mode 100644 index 17445e1898..0000000000 --- a/src/gl/strftime.h +++ /dev/null @@ -1,33 +0,0 @@ -/* declarations for strftime.c - - Copyright (C) 2002, 2004, 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Just like strftime, but with two more arguments: - POSIX requires that strftime use the local timezone information. - Use the timezone __TZ instead. Use __NS as the number of - nanoseconds in the %N directive. */ -size_t nstrftime (char *, size_t, char const *, struct tm const *, - timezone_t __tz, int __ns); - -#ifdef __cplusplus -} -#endif diff --git a/src/gl/string.in.h b/src/gl/string.in.h deleted file mode 100644 index b3213c4c1a..0000000000 --- a/src/gl/string.in.h +++ /dev/null @@ -1,1046 +0,0 @@ -/* A GNU-like . - - Copyright (C) 1995-1996, 2001-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined _GL_ALREADY_INCLUDING_STRING_H -/* Special invocation convention: - - On OS X/NetBSD we have a sequence of nested includes - -> -> "string.h" - In this situation system _chk variants due to -D_FORTIFY_SOURCE - might be used after any replacements defined here. */ - -#@INCLUDE_NEXT@ @NEXT_STRING_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_STRING_H - -#define _GL_ALREADY_INCLUDING_STRING_H - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_STRING_H@ - -#undef _GL_ALREADY_INCLUDING_STRING_H - -#ifndef _@GUARD_PREFIX@_STRING_H -#define _@GUARD_PREFIX@_STRING_H - -/* NetBSD 5.0 mis-defines NULL. */ -#include - -/* MirBSD defines mbslen as a macro. */ -#if @GNULIB_MBSLEN@ && defined __MirBSD__ -# include -#endif - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The attribute __pure__ was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ -#endif - -/* NetBSD 5.0 declares strsignal in , not in . */ -/* But in any case avoid namespace pollution on glibc systems. */ -#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ - && ! defined __GLIBC__ -# include -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - -/* Find the index of the least-significant set bit. */ -#if @GNULIB_FFSL@ -# if !@HAVE_FFSL@ -_GL_FUNCDECL_SYS (ffsl, int, (long int i)); -# endif -_GL_CXXALIAS_SYS (ffsl, int, (long int i)); -_GL_CXXALIASWARN (ffsl); -#elif defined GNULIB_POSIXCHECK -# undef ffsl -# if HAVE_RAW_DECL_FFSL -_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); -# endif -#endif - - -/* Find the index of the least-significant set bit. */ -#if @GNULIB_FFSLL@ -# if !@HAVE_FFSLL@ -_GL_FUNCDECL_SYS (ffsll, int, (long long int i)); -# endif -_GL_CXXALIAS_SYS (ffsll, int, (long long int i)); -_GL_CXXALIASWARN (ffsll); -#elif defined GNULIB_POSIXCHECK -# undef ffsll -# if HAVE_RAW_DECL_FFSLL -_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); -# endif -#endif - - -/* Return the first instance of C within N bytes of S, or NULL. */ -#if @GNULIB_MEMCHR@ -# if @REPLACE_MEMCHR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define memchr rpl_memchr -# endif -_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); -# else -# if ! @HAVE_MEMCHR@ -_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C" { const void * std::memchr (const void *, int, size_t); } - extern "C++" { void * std::memchr (void *, int, size_t); } */ -_GL_CXXALIAS_SYS_CAST2 (memchr, - void *, (void const *__s, int __c, size_t __n), - void const *, (void const *__s, int __c, size_t __n)); -# endif -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); -_GL_CXXALIASWARN1 (memchr, void const *, - (void const *__s, int __c, size_t __n)); -# else -_GL_CXXALIASWARN (memchr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef memchr -/* Assume memchr is always declared. */ -_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " - "use gnulib module memchr for portability" ); -#endif - -/* Return the first occurrence of NEEDLE in HAYSTACK. */ -#if @GNULIB_MEMMEM@ -# if @REPLACE_MEMMEM@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define memmem rpl_memmem -# endif -_GL_FUNCDECL_RPL (memmem, void *, - (void const *__haystack, size_t __haystack_len, - void const *__needle, size_t __needle_len) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 3))); -_GL_CXXALIAS_RPL (memmem, void *, - (void const *__haystack, size_t __haystack_len, - void const *__needle, size_t __needle_len)); -# else -# if ! @HAVE_DECL_MEMMEM@ -_GL_FUNCDECL_SYS (memmem, void *, - (void const *__haystack, size_t __haystack_len, - void const *__needle, size_t __needle_len) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 3))); -# endif -_GL_CXXALIAS_SYS (memmem, void *, - (void const *__haystack, size_t __haystack_len, - void const *__needle, size_t __needle_len)); -# endif -_GL_CXXALIASWARN (memmem); -#elif defined GNULIB_POSIXCHECK -# undef memmem -# if HAVE_RAW_DECL_MEMMEM -_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " - "use gnulib module memmem-simple for portability, " - "and module memmem for speed" ); -# endif -#endif - -/* Copy N bytes of SRC to DEST, return pointer to bytes after the - last written byte. */ -#if @GNULIB_MEMPCPY@ -# if ! @HAVE_MEMPCPY@ -_GL_FUNCDECL_SYS (mempcpy, void *, - (void *restrict __dest, void const *restrict __src, - size_t __n) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (mempcpy, void *, - (void *restrict __dest, void const *restrict __src, - size_t __n)); -_GL_CXXALIASWARN (mempcpy); -#elif defined GNULIB_POSIXCHECK -# undef mempcpy -# if HAVE_RAW_DECL_MEMPCPY -_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " - "use gnulib module mempcpy for portability"); -# endif -#endif - -/* Search backwards through a block for a byte (specified as an int). */ -#if @GNULIB_MEMRCHR@ -# if ! @HAVE_DECL_MEMRCHR@ -_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { const void * std::memrchr (const void *, int, size_t); } - extern "C++" { void * std::memrchr (void *, int, size_t); } */ -_GL_CXXALIAS_SYS_CAST2 (memrchr, - void *, (void const *, int, size_t), - void const *, (void const *, int, size_t)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); -_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); -# else -_GL_CXXALIASWARN (memrchr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef memrchr -# if HAVE_RAW_DECL_MEMRCHR -_GL_WARN_ON_USE (memrchr, "memrchr is unportable - " - "use gnulib module memrchr for portability"); -# endif -#endif - -/* Find the first occurrence of C in S. More efficient than - memchr(S,C,N), at the expense of undefined behavior if C does not - occur within N bytes. */ -#if @GNULIB_RAWMEMCHR@ -# if ! @HAVE_RAWMEMCHR@ -_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { const void * std::rawmemchr (const void *, int); } - extern "C++" { void * std::rawmemchr (void *, int); } */ -_GL_CXXALIAS_SYS_CAST2 (rawmemchr, - void *, (void const *__s, int __c_in), - void const *, (void const *__s, int __c_in)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); -_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); -# else -_GL_CXXALIASWARN (rawmemchr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef rawmemchr -# if HAVE_RAW_DECL_RAWMEMCHR -_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " - "use gnulib module rawmemchr for portability"); -# endif -#endif - -/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ -#if @GNULIB_STPCPY@ -# if ! @HAVE_STPCPY@ -_GL_FUNCDECL_SYS (stpcpy, char *, - (char *restrict __dst, char const *restrict __src) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (stpcpy, char *, - (char *restrict __dst, char const *restrict __src)); -_GL_CXXALIASWARN (stpcpy); -#elif defined GNULIB_POSIXCHECK -# undef stpcpy -# if HAVE_RAW_DECL_STPCPY -_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " - "use gnulib module stpcpy for portability"); -# endif -#endif - -/* Copy no more than N bytes of SRC to DST, returning a pointer past the - last non-NUL byte written into DST. */ -#if @GNULIB_STPNCPY@ -# if @REPLACE_STPNCPY@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef stpncpy -# define stpncpy rpl_stpncpy -# endif -_GL_FUNCDECL_RPL (stpncpy, char *, - (char *restrict __dst, char const *restrict __src, - size_t __n) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (stpncpy, char *, - (char *restrict __dst, char const *restrict __src, - size_t __n)); -# else -# if ! @HAVE_STPNCPY@ -_GL_FUNCDECL_SYS (stpncpy, char *, - (char *restrict __dst, char const *restrict __src, - size_t __n) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (stpncpy, char *, - (char *restrict __dst, char const *restrict __src, - size_t __n)); -# endif -_GL_CXXALIASWARN (stpncpy); -#elif defined GNULIB_POSIXCHECK -# undef stpncpy -# if HAVE_RAW_DECL_STPNCPY -_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " - "use gnulib module stpncpy for portability"); -# endif -#endif - -#if defined GNULIB_POSIXCHECK -/* strchr() does not work with multibyte strings if the locale encoding is - GB18030 and the character to be searched is a digit. */ -# undef strchr -/* Assume strchr is always declared. */ -_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " - "in some multibyte locales - " - "use mbschr if you care about internationalization"); -#endif - -/* Find the first occurrence of C in S or the final NUL byte. */ -#if @GNULIB_STRCHRNUL@ -# if @REPLACE_STRCHRNUL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define strchrnul rpl_strchrnul -# endif -_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strchrnul, char *, - (const char *str, int ch)); -# else -# if ! @HAVE_STRCHRNUL@ -_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { const char * std::strchrnul (const char *, int); } - extern "C++" { char * std::strchrnul (char *, int); } */ -_GL_CXXALIAS_SYS_CAST2 (strchrnul, - char *, (char const *__s, int __c_in), - char const *, (char const *__s, int __c_in)); -# endif -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); -_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); -# else -_GL_CXXALIASWARN (strchrnul); -# endif -#elif defined GNULIB_POSIXCHECK -# undef strchrnul -# if HAVE_RAW_DECL_STRCHRNUL -_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " - "use gnulib module strchrnul for portability"); -# endif -#endif - -/* Duplicate S, returning an identical malloc'd string. */ -#if @GNULIB_STRDUP@ -# if @REPLACE_STRDUP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strdup -# define strdup rpl_strdup -# endif -_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); -# else -# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup - /* strdup exists as a function and as a macro. Get rid of the macro. */ -# undef strdup -# endif -# if !(@HAVE_DECL_STRDUP@ || defined strdup) -_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); -# endif -_GL_CXXALIASWARN (strdup); -#elif defined GNULIB_POSIXCHECK -# undef strdup -# if HAVE_RAW_DECL_STRDUP -_GL_WARN_ON_USE (strdup, "strdup is unportable - " - "use gnulib module strdup for portability"); -# endif -#endif - -/* Append no more than N characters from SRC onto DEST. */ -#if @GNULIB_STRNCAT@ -# if @REPLACE_STRNCAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strncat -# define strncat rpl_strncat -# endif -_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); -# else -_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); -# endif -_GL_CXXALIASWARN (strncat); -#elif defined GNULIB_POSIXCHECK -# undef strncat -# if HAVE_RAW_DECL_STRNCAT -_GL_WARN_ON_USE (strncat, "strncat is unportable - " - "use gnulib module strncat for portability"); -# endif -#endif - -/* Return a newly allocated copy of at most N bytes of STRING. */ -#if @GNULIB_STRNDUP@ -# if @REPLACE_STRNDUP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strndup -# define strndup rpl_strndup -# endif -_GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); -# else -# if ! @HAVE_DECL_STRNDUP@ -_GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); -# endif -_GL_CXXALIASWARN (strndup); -#elif defined GNULIB_POSIXCHECK -# undef strndup -# if HAVE_RAW_DECL_STRNDUP -_GL_WARN_ON_USE (strndup, "strndup is unportable - " - "use gnulib module strndup for portability"); -# endif -#endif - -/* Find the length (number of bytes) of STRING, but scan at most - MAXLEN bytes. If no '\0' terminator is found in that many bytes, - return MAXLEN. */ -#if @GNULIB_STRNLEN@ -# if @REPLACE_STRNLEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strnlen -# define strnlen rpl_strnlen -# endif -_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); -# else -# if ! @HAVE_DECL_STRNLEN@ -_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); -# endif -_GL_CXXALIASWARN (strnlen); -#elif defined GNULIB_POSIXCHECK -# undef strnlen -# if HAVE_RAW_DECL_STRNLEN -_GL_WARN_ON_USE (strnlen, "strnlen is unportable - " - "use gnulib module strnlen for portability"); -# endif -#endif - -#if defined GNULIB_POSIXCHECK -/* strcspn() assumes the second argument is a list of single-byte characters. - Even in this simple case, it does not work with multibyte strings if the - locale encoding is GB18030 and one of the characters to be searched is a - digit. */ -# undef strcspn -/* Assume strcspn is always declared. */ -_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " - "in multibyte locales - " - "use mbscspn if you care about internationalization"); -#endif - -/* Find the first occurrence in S of any character in ACCEPT. */ -#if @GNULIB_STRPBRK@ -# if ! @HAVE_STRPBRK@ -_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C" { const char * strpbrk (const char *, const char *); } - extern "C++" { char * strpbrk (char *, const char *); } */ -_GL_CXXALIAS_SYS_CAST2 (strpbrk, - char *, (char const *__s, char const *__accept), - const char *, (char const *__s, char const *__accept)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); -_GL_CXXALIASWARN1 (strpbrk, char const *, - (char const *__s, char const *__accept)); -# else -_GL_CXXALIASWARN (strpbrk); -# endif -# if defined GNULIB_POSIXCHECK -/* strpbrk() assumes the second argument is a list of single-byte characters. - Even in this simple case, it does not work with multibyte strings if the - locale encoding is GB18030 and one of the characters to be searched is a - digit. */ -# undef strpbrk -_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " - "in multibyte locales - " - "use mbspbrk if you care about internationalization"); -# endif -#elif defined GNULIB_POSIXCHECK -# undef strpbrk -# if HAVE_RAW_DECL_STRPBRK -_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " - "use gnulib module strpbrk for portability"); -# endif -#endif - -#if defined GNULIB_POSIXCHECK -/* strspn() assumes the second argument is a list of single-byte characters. - Even in this simple case, it cannot work with multibyte strings. */ -# undef strspn -/* Assume strspn is always declared. */ -_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " - "in multibyte locales - " - "use mbsspn if you care about internationalization"); -#endif - -#if defined GNULIB_POSIXCHECK -/* strrchr() does not work with multibyte strings if the locale encoding is - GB18030 and the character to be searched is a digit. */ -# undef strrchr -/* Assume strrchr is always declared. */ -_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " - "in some multibyte locales - " - "use mbsrchr if you care about internationalization"); -#endif - -/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. - If one is found, overwrite it with a NUL, and advance *STRINGP - to point to the next char after it. Otherwise, set *STRINGP to NULL. - If *STRINGP was already NULL, nothing happens. - Return the old value of *STRINGP. - - This is a variant of strtok() that is multithread-safe and supports - empty fields. - - Caveat: It modifies the original string. - Caveat: These functions cannot be used on constant strings. - Caveat: The identity of the delimiting character is lost. - Caveat: It doesn't work with multibyte strings unless all of the delimiter - characters are ASCII characters < 0x30. - - See also strtok_r(). */ -#if @GNULIB_STRSEP@ -# if ! @HAVE_STRSEP@ -_GL_FUNCDECL_SYS (strsep, char *, - (char **restrict __stringp, char const *restrict __delim) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (strsep, char *, - (char **restrict __stringp, char const *restrict __delim)); -_GL_CXXALIASWARN (strsep); -# if defined GNULIB_POSIXCHECK -# undef strsep -_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " - "in multibyte locales - " - "use mbssep if you care about internationalization"); -# endif -#elif defined GNULIB_POSIXCHECK -# undef strsep -# if HAVE_RAW_DECL_STRSEP -_GL_WARN_ON_USE (strsep, "strsep is unportable - " - "use gnulib module strsep for portability"); -# endif -#endif - -#if @GNULIB_STRSTR@ -# if @REPLACE_STRSTR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define strstr rpl_strstr -# endif -_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); -# else - /* On some systems, this function is defined as an overloaded function: - extern "C++" { const char * strstr (const char *, const char *); } - extern "C++" { char * strstr (char *, const char *); } */ -_GL_CXXALIAS_SYS_CAST2 (strstr, - char *, (const char *haystack, const char *needle), - const char *, (const char *haystack, const char *needle)); -# endif -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); -_GL_CXXALIASWARN1 (strstr, const char *, - (const char *haystack, const char *needle)); -# else -_GL_CXXALIASWARN (strstr); -# endif -#elif defined GNULIB_POSIXCHECK -/* strstr() does not work with multibyte strings if the locale encoding is - different from UTF-8: - POSIX says that it operates on "strings", and "string" in POSIX is defined - as a sequence of bytes, not of characters. */ -# undef strstr -/* Assume strstr is always declared. */ -_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " - "work correctly on character strings in most " - "multibyte locales - " - "use mbsstr if you care about internationalization, " - "or use strstr if you care about speed"); -#endif - -/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive - comparison. */ -#if @GNULIB_STRCASESTR@ -# if @REPLACE_STRCASESTR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define strcasestr rpl_strcasestr -# endif -_GL_FUNCDECL_RPL (strcasestr, char *, - (const char *haystack, const char *needle) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (strcasestr, char *, - (const char *haystack, const char *needle)); -# else -# if ! @HAVE_STRCASESTR@ -_GL_FUNCDECL_SYS (strcasestr, char *, - (const char *haystack, const char *needle) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { const char * strcasestr (const char *, const char *); } - extern "C++" { char * strcasestr (char *, const char *); } */ -_GL_CXXALIAS_SYS_CAST2 (strcasestr, - char *, (const char *haystack, const char *needle), - const char *, (const char *haystack, const char *needle)); -# endif -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); -_GL_CXXALIASWARN1 (strcasestr, const char *, - (const char *haystack, const char *needle)); -# else -_GL_CXXALIASWARN (strcasestr); -# endif -#elif defined GNULIB_POSIXCHECK -/* strcasestr() does not work with multibyte strings: - It is a glibc extension, and glibc implements it only for unibyte - locales. */ -# undef strcasestr -# if HAVE_RAW_DECL_STRCASESTR -_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " - "strings in multibyte locales - " - "use mbscasestr if you care about " - "internationalization, or use c-strcasestr if you want " - "a locale independent function"); -# endif -#endif - -/* Parse S into tokens separated by characters in DELIM. - If S is NULL, the saved pointer in SAVE_PTR is used as - the next starting point. For example: - char s[] = "-abc-=-def"; - char *sp; - x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" - x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL - x = strtok_r(NULL, "=", &sp); // x = NULL - // s = "abc\0-def\0" - - This is a variant of strtok() that is multithread-safe. - - For the POSIX documentation for this function, see: - http://www.opengroup.org/susv3xsh/strtok.html - - Caveat: It modifies the original string. - Caveat: These functions cannot be used on constant strings. - Caveat: The identity of the delimiting character is lost. - Caveat: It doesn't work with multibyte strings unless all of the delimiter - characters are ASCII characters < 0x30. - - See also strsep(). */ -#if @GNULIB_STRTOK_R@ -# if @REPLACE_STRTOK_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strtok_r -# define strtok_r rpl_strtok_r -# endif -_GL_FUNCDECL_RPL (strtok_r, char *, - (char *restrict s, char const *restrict delim, - char **restrict save_ptr) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (strtok_r, char *, - (char *restrict s, char const *restrict delim, - char **restrict save_ptr)); -# else -# if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK -# undef strtok_r -# endif -# if ! @HAVE_DECL_STRTOK_R@ -_GL_FUNCDECL_SYS (strtok_r, char *, - (char *restrict s, char const *restrict delim, - char **restrict save_ptr) - _GL_ARG_NONNULL ((2, 3))); -# endif -_GL_CXXALIAS_SYS (strtok_r, char *, - (char *restrict s, char const *restrict delim, - char **restrict save_ptr)); -# endif -_GL_CXXALIASWARN (strtok_r); -# if defined GNULIB_POSIXCHECK -_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " - "strings in multibyte locales - " - "use mbstok_r if you care about internationalization"); -# endif -#elif defined GNULIB_POSIXCHECK -# undef strtok_r -# if HAVE_RAW_DECL_STRTOK_R -_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " - "use gnulib module strtok_r for portability"); -# endif -#endif - - -/* The following functions are not specified by POSIX. They are gnulib - extensions. */ - -#if @GNULIB_MBSLEN@ -/* Return the number of multibyte characters in the character string STRING. - This considers multibyte characters, unlike strlen, which counts bytes. */ -# ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ -# undef mbslen -# endif -# if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mbslen rpl_mbslen -# endif -_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); -# else -_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); -# endif -_GL_CXXALIASWARN (mbslen); -#endif - -#if @GNULIB_MBSNLEN@ -/* Return the number of multibyte characters in the character string starting - at STRING and ending at STRING + LEN. */ -_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1)); -#endif - -#if @GNULIB_MBSCHR@ -/* Locate the first single-byte character C in the character string STRING, - and return a pointer to it. Return NULL if C is not found in STRING. - Unlike strchr(), this function works correctly in multibyte locales with - encodings such as GB18030. */ -# if defined __hpux -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ -# endif -_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); -# else -_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); -# endif -_GL_CXXALIASWARN (mbschr); -#endif - -#if @GNULIB_MBSRCHR@ -/* Locate the last single-byte character C in the character string STRING, - and return a pointer to it. Return NULL if C is not found in STRING. - Unlike strrchr(), this function works correctly in multibyte locales with - encodings such as GB18030. */ -# if defined __hpux || defined __INTERIX -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mbsrchr rpl_mbsrchr /* avoid collision with system function */ -# endif -_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); -# else -_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); -# endif -_GL_CXXALIASWARN (mbsrchr); -#endif - -#if @GNULIB_MBSSTR@ -/* Find the first occurrence of the character string NEEDLE in the character - string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. - Unlike strstr(), this function works correctly in multibyte locales with - encodings different from UTF-8. */ -_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSCASECMP@ -/* Compare the character strings S1 and S2, ignoring case, returning less than, - equal to or greater than zero if S1 is lexicographically less than, equal to - or greater than S2. - Note: This function may, in multibyte locales, return 0 for strings of - different lengths! - Unlike strcasecmp(), this function works correctly in multibyte locales. */ -_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSNCASECMP@ -/* Compare the initial segment of the character string S1 consisting of at most - N characters with the initial segment of the character string S2 consisting - of at most N characters, ignoring case, returning less than, equal to or - greater than zero if the initial segment of S1 is lexicographically less - than, equal to or greater than the initial segment of S2. - Note: This function may, in multibyte locales, return 0 for initial segments - of different lengths! - Unlike strncasecmp(), this function works correctly in multibyte locales. - But beware that N is not a byte count but a character count! */ -_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSPCASECMP@ -/* Compare the initial segment of the character string STRING consisting of - at most mbslen (PREFIX) characters with the character string PREFIX, - ignoring case. If the two match, return a pointer to the first byte - after this prefix in STRING. Otherwise, return NULL. - Note: This function may, in multibyte locales, return non-NULL if STRING - is of smaller length than PREFIX! - Unlike strncasecmp(), this function works correctly in multibyte - locales. */ -_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSCASESTR@ -/* Find the first occurrence of the character string NEEDLE in the character - string HAYSTACK, using case-insensitive comparison. - Note: This function may, in multibyte locales, return success even if - strlen (haystack) < strlen (needle) ! - Unlike strcasestr(), this function works correctly in multibyte locales. */ -_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSCSPN@ -/* Find the first occurrence in the character string STRING of any character - in the character string ACCEPT. Return the number of bytes from the - beginning of the string to this occurrence, or to the end of the string - if none exists. - Unlike strcspn(), this function works correctly in multibyte locales. */ -_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSPBRK@ -/* Find the first occurrence in the character string STRING of any character - in the character string ACCEPT. Return the pointer to it, or NULL if none - exists. - Unlike strpbrk(), this function works correctly in multibyte locales. */ -# if defined __hpux -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ -# endif -_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); -# else -_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); -# endif -_GL_CXXALIASWARN (mbspbrk); -#endif - -#if @GNULIB_MBSSPN@ -/* Find the first occurrence in the character string STRING of any character - not in the character string REJECT. Return the number of bytes from the - beginning of the string to this occurrence, or to the end of the string - if none exists. - Unlike strspn(), this function works correctly in multibyte locales. */ -_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSSEP@ -/* Search the next delimiter (multibyte character listed in the character - string DELIM) starting at the character string *STRINGP. - If one is found, overwrite it with a NUL, and advance *STRINGP to point - to the next multibyte character after it. Otherwise, set *STRINGP to NULL. - If *STRINGP was already NULL, nothing happens. - Return the old value of *STRINGP. - - This is a variant of mbstok_r() that supports empty fields. - - Caveat: It modifies the original string. - Caveat: These functions cannot be used on constant strings. - Caveat: The identity of the delimiting character is lost. - - See also mbstok_r(). */ -_GL_EXTERN_C char * mbssep (char **stringp, const char *delim) - _GL_ARG_NONNULL ((1, 2)); -#endif - -#if @GNULIB_MBSTOK_R@ -/* Parse the character string STRING into tokens separated by characters in - the character string DELIM. - If STRING is NULL, the saved pointer in SAVE_PTR is used as - the next starting point. For example: - char s[] = "-abc-=-def"; - char *sp; - x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" - x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL - x = mbstok_r(NULL, "=", &sp); // x = NULL - // s = "abc\0-def\0" - - Caveat: It modifies the original string. - Caveat: These functions cannot be used on constant strings. - Caveat: The identity of the delimiting character is lost. - - See also mbssep(). */ -_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) - _GL_ARG_NONNULL ((2, 3)); -#endif - -/* Map any int, typically from errno, into an error message. */ -#if @GNULIB_STRERROR@ -# if @REPLACE_STRERROR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strerror -# define strerror rpl_strerror -# endif -_GL_FUNCDECL_RPL (strerror, char *, (int)); -_GL_CXXALIAS_RPL (strerror, char *, (int)); -# else -_GL_CXXALIAS_SYS (strerror, char *, (int)); -# endif -_GL_CXXALIASWARN (strerror); -#elif defined GNULIB_POSIXCHECK -# undef strerror -/* Assume strerror is always declared. */ -_GL_WARN_ON_USE (strerror, "strerror is unportable - " - "use gnulib module strerror to guarantee non-NULL result"); -#endif - -/* Map any int, typically from errno, into an error message. Multithread-safe. - Uses the POSIX declaration, not the glibc declaration. */ -#if @GNULIB_STRERROR_R@ -# if @REPLACE_STRERROR_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef strerror_r -# define strerror_r rpl_strerror_r -# endif -_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); -# else -# if !@HAVE_DECL_STRERROR_R@ -_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); -# endif -# if @HAVE_DECL_STRERROR_R@ -_GL_CXXALIASWARN (strerror_r); -# endif -#elif defined GNULIB_POSIXCHECK -# undef strerror_r -# if HAVE_RAW_DECL_STRERROR_R -_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " - "use gnulib module strerror_r-posix for portability"); -# endif -#endif - -#if @GNULIB_STRSIGNAL@ -# if @REPLACE_STRSIGNAL@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define strsignal rpl_strsignal -# endif -_GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); -_GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); -# else -# if ! @HAVE_DECL_STRSIGNAL@ -_GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); -# endif -/* Need to cast, because on Cygwin 1.5.x systems, the return type is - 'const char *'. */ -_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); -# endif -_GL_CXXALIASWARN (strsignal); -#elif defined GNULIB_POSIXCHECK -# undef strsignal -# if HAVE_RAW_DECL_STRSIGNAL -_GL_WARN_ON_USE (strsignal, "strsignal is unportable - " - "use gnulib module strsignal for portability"); -# endif -#endif - -#if @GNULIB_STRVERSCMP@ -# if !@HAVE_STRVERSCMP@ -_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) - _GL_ATTRIBUTE_PURE - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); -_GL_CXXALIASWARN (strverscmp); -#elif defined GNULIB_POSIXCHECK -# undef strverscmp -# if HAVE_RAW_DECL_STRVERSCMP -_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " - "use gnulib module strverscmp for portability"); -# endif -#endif - - -#endif /* _@GUARD_PREFIX@_STRING_H */ -#endif /* _@GUARD_PREFIX@_STRING_H */ -#endif diff --git a/src/gl/stripslash.c b/src/gl/stripslash.c deleted file mode 100644 index 0453e36cc6..0000000000 --- a/src/gl/stripslash.c +++ /dev/null @@ -1,45 +0,0 @@ -/* stripslash.c -- remove redundant trailing slashes from a file name - - Copyright (C) 1990, 2001, 2003-2006, 2009-2016 Free Software Foundation, - Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -#include "dirname.h" - -/* Remove trailing slashes from FILE. Return true if a trailing slash - was removed. This is useful when using file name completion from a - shell that adds a "/" after directory names (such as tcsh and - bash), because on symlinks to directories, several system calls - have different semantics according to whether a trailing slash is - present. */ - -bool -strip_trailing_slashes (char *file) -{ - char *base = last_component (file); - char *base_lim; - bool had_slash; - - /* last_component returns "" for file system roots, but we need to turn - "///" into "/". */ - if (! *base) - base = file; - base_lim = base + base_len (base); - had_slash = (*base_lim != '\0'); - *base_lim = '\0'; - return had_slash; -} diff --git a/src/gl/sys_select.in.h b/src/gl/sys_select.in.h deleted file mode 100644 index 9a2622f978..0000000000 --- a/src/gl/sys_select.in.h +++ /dev/null @@ -1,319 +0,0 @@ -/* Substitute for . - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -# if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -# endif -@PRAGMA_COLUMNS@ - -/* On OSF/1 and Solaris 2.6, and - both include . - On Cygwin, includes . - Simply delegate to the system's header in this case. */ -#if (@HAVE_SYS_SELECT_H@ \ - && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H \ - && ((defined __osf__ && defined _SYS_TYPES_H_ \ - && defined _OSF_SOURCE) \ - || (defined __sun && defined _SYS_TYPES_H \ - && (! (defined _XOPEN_SOURCE || defined _POSIX_C_SOURCE) \ - || defined __EXTENSIONS__)))) - -# define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H -# @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ - -#elif (@HAVE_SYS_SELECT_H@ \ - && (defined _CYGWIN_SYS_TIME_H \ - || (!defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H \ - && ((defined __osf__ && defined _SYS_TIME_H_ \ - && defined _OSF_SOURCE) \ - || (defined __sun && defined _SYS_TIME_H \ - && (! (defined _XOPEN_SOURCE \ - || defined _POSIX_C_SOURCE) \ - || defined __EXTENSIONS__)))))) - -# define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H -# @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ - -/* On IRIX 6.5, includes , which includes - , which includes . At this point we cannot - include , because that includes , which - gives a syntax error because has not been completely - processed. Simply delegate to the system's header in this case. */ -#elif @HAVE_SYS_SELECT_H@ && defined __sgi && (defined _SYS_BSD_TYPES_H && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H) - -# define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H -# @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ - -/* On OpenBSD 5.0, includes , which includes - . At this point we cannot include , because that - includes gnulib's pthread.h override, which gives a syntax error because - /usr/include/pthread.h has not been completely processed. Simply delegate - to the system's header in this case. */ -#elif @HAVE_SYS_SELECT_H@ && defined __OpenBSD__ && (defined _PTHREAD_H_ && !defined PTHREAD_MUTEX_INITIALIZER) - -# @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ - -#else - -#ifndef _@GUARD_PREFIX@_SYS_SELECT_H - -/* On many platforms, assumes prior inclusion of - . Also, mingw defines sigset_t there, instead of - in where it belongs. */ -#include - -#if @HAVE_SYS_SELECT_H@ - -/* On OSF/1 4.0, provides only a forward declaration - of 'struct timeval', and no definition of this type. - Also, Mac OS X, AIX, HP-UX, IRIX, Solaris, Interix declare select() - in . - But avoid namespace pollution on glibc systems and "unknown type - name" problems on Cygwin. */ -# if !(defined __GLIBC__ || defined __CYGWIN__) -# include -# endif - -/* On AIX 7 and Solaris 10, provides an FD_ZERO implementation - that relies on memset(), but without including . - But in any case avoid namespace pollution on glibc systems. */ -# if (defined __OpenBSD__ || defined _AIX || defined __sun || defined __osf__ || defined __BEOS__) \ - && ! defined __GLIBC__ -# include -# endif - -/* The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ - -#endif - -/* Get definition of 'sigset_t'. - But avoid namespace pollution on glibc systems and "unknown type - name" problems on Cygwin. - Do this after the include_next (for the sake of OpenBSD 5.0) but before - the split double-inclusion guard (for the sake of Solaris). */ -#if !((defined __GLIBC__ || defined __CYGWIN__) && !defined __UCLIBC__) -# include -#endif - -#ifndef _@GUARD_PREFIX@_SYS_SELECT_H -#define _@GUARD_PREFIX@_SYS_SELECT_H - -#if !@HAVE_SYS_SELECT_H@ -/* A platform that lacks . */ -/* Get the 'struct timeval' and 'fd_set' types and the FD_* macros - on most platforms. */ -# include -/* On HP-UX 11, provides an FD_ZERO implementation - that relies on memset(), but without including . */ -# if defined __hpux -# include -# endif -/* On native Windows platforms: - Get the 'fd_set' type. - Get the close() declaration before we override it. */ -# if @HAVE_WINSOCK2_H@ -# if !defined _GL_INCLUDING_WINSOCK2_H -# define _GL_INCLUDING_WINSOCK2_H -# include -# undef _GL_INCLUDING_WINSOCK2_H -# endif -# include -# endif -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - -/* Fix some definitions from . */ - -#if @HAVE_WINSOCK2_H@ - -# if !GNULIB_defined_rpl_fd_isset - -/* Re-define FD_ISSET to avoid a WSA call while we are not using - network sockets. */ -static int -rpl_fd_isset (SOCKET fd, fd_set * set) -{ - u_int i; - if (set == NULL) - return 0; - - for (i = 0; i < set->fd_count; i++) - if (set->fd_array[i] == fd) - return 1; - - return 0; -} - -# define GNULIB_defined_rpl_fd_isset 1 -# endif - -# undef FD_ISSET -# define FD_ISSET(fd, set) rpl_fd_isset(fd, set) - -#endif - -/* Hide some function declarations from . */ - -#if @HAVE_WINSOCK2_H@ -# if !defined _@GUARD_PREFIX@_UNISTD_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef close -# define close close_used_without_including_unistd_h -# else - _GL_WARN_ON_USE (close, - "close() used without including "); -# endif -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gethostname -# define gethostname gethostname_used_without_including_unistd_h -# else - _GL_WARN_ON_USE (gethostname, - "gethostname() used without including "); -# endif -# endif -# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef socket -# define socket socket_used_without_including_sys_socket_h -# undef connect -# define connect connect_used_without_including_sys_socket_h -# undef accept -# define accept accept_used_without_including_sys_socket_h -# undef bind -# define bind bind_used_without_including_sys_socket_h -# undef getpeername -# define getpeername getpeername_used_without_including_sys_socket_h -# undef getsockname -# define getsockname getsockname_used_without_including_sys_socket_h -# undef getsockopt -# define getsockopt getsockopt_used_without_including_sys_socket_h -# undef listen -# define listen listen_used_without_including_sys_socket_h -# undef recv -# define recv recv_used_without_including_sys_socket_h -# undef send -# define send send_used_without_including_sys_socket_h -# undef recvfrom -# define recvfrom recvfrom_used_without_including_sys_socket_h -# undef sendto -# define sendto sendto_used_without_including_sys_socket_h -# undef setsockopt -# define setsockopt setsockopt_used_without_including_sys_socket_h -# undef shutdown -# define shutdown shutdown_used_without_including_sys_socket_h -# else - _GL_WARN_ON_USE (socket, - "socket() used without including "); - _GL_WARN_ON_USE (connect, - "connect() used without including "); - _GL_WARN_ON_USE (accept, - "accept() used without including "); - _GL_WARN_ON_USE (bind, - "bind() used without including "); - _GL_WARN_ON_USE (getpeername, - "getpeername() used without including "); - _GL_WARN_ON_USE (getsockname, - "getsockname() used without including "); - _GL_WARN_ON_USE (getsockopt, - "getsockopt() used without including "); - _GL_WARN_ON_USE (listen, - "listen() used without including "); - _GL_WARN_ON_USE (recv, - "recv() used without including "); - _GL_WARN_ON_USE (send, - "send() used without including "); - _GL_WARN_ON_USE (recvfrom, - "recvfrom() used without including "); - _GL_WARN_ON_USE (sendto, - "sendto() used without including "); - _GL_WARN_ON_USE (setsockopt, - "setsockopt() used without including "); - _GL_WARN_ON_USE (shutdown, - "shutdown() used without including "); -# endif -# endif -#endif - - -#if @GNULIB_PSELECT@ -# if @REPLACE_PSELECT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef pselect -# define pselect rpl_pselect -# endif -_GL_FUNCDECL_RPL (pselect, int, - (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, - struct timespec const *restrict, const sigset_t *restrict)); -_GL_CXXALIAS_RPL (pselect, int, - (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, - struct timespec const *restrict, const sigset_t *restrict)); -# else -# if !@HAVE_PSELECT@ -_GL_FUNCDECL_SYS (pselect, int, - (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, - struct timespec const *restrict, const sigset_t *restrict)); -# endif -_GL_CXXALIAS_SYS (pselect, int, - (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, - struct timespec const *restrict, const sigset_t *restrict)); -# endif -_GL_CXXALIASWARN (pselect); -#elif defined GNULIB_POSIXCHECK -# undef pselect -# if HAVE_RAW_DECL_PSELECT -_GL_WARN_ON_USE (pselect, "pselect is not portable - " - "use gnulib module pselect for portability"); -# endif -#endif - -#if @GNULIB_SELECT@ -# if @REPLACE_SELECT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef select -# define select rpl_select -# endif -_GL_FUNCDECL_RPL (select, int, - (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, - struct timeval *restrict)); -_GL_CXXALIAS_RPL (select, int, - (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, - struct timeval *restrict)); -# else -_GL_CXXALIAS_SYS (select, int, - (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, - struct timeval *restrict)); -# endif -_GL_CXXALIASWARN (select); -#elif @HAVE_WINSOCK2_H@ -# undef select -# define select select_used_without_requesting_gnulib_module_select -#elif defined GNULIB_POSIXCHECK -# undef select -# if HAVE_RAW_DECL_SELECT -_GL_WARN_ON_USE (select, "select is not always POSIX compliant - " - "use gnulib module select for portability"); -# endif -#endif - - -#endif /* _@GUARD_PREFIX@_SYS_SELECT_H */ -#endif /* _@GUARD_PREFIX@_SYS_SELECT_H */ -#endif /* OSF/1 */ diff --git a/src/gl/sys_socket.c b/src/gl/sys_socket.c deleted file mode 100644 index 3b261da039..0000000000 --- a/src/gl/sys_socket.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#define _GL_SYS_SOCKET_INLINE _GL_EXTERN_INLINE -#include "sys/socket.h" -typedef int dummy; diff --git a/src/gl/sys_socket.in.h b/src/gl/sys_socket.in.h deleted file mode 100644 index 1f148f4aa6..0000000000 --- a/src/gl/sys_socket.in.h +++ /dev/null @@ -1,697 +0,0 @@ -/* Provide a sys/socket header file for systems lacking it (read: MinGW) - and for systems where it is incomplete. - Copyright (C) 2005-2016 Free Software Foundation, Inc. - Written by Simon Josefsson. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* This file is supposed to be used on platforms that lack , - on platforms where cannot be included standalone, and on - platforms where does not provide all necessary definitions. - It is intended to provide definitions and prototypes needed by an - application. */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined _GL_ALREADY_INCLUDING_SYS_SOCKET_H -/* Special invocation convention: - - On Cygwin 1.5.x we have a sequence of nested includes - -> -> -> , - and the latter includes . In this situation, the functions - are not yet declared, therefore we cannot provide the C++ aliases. */ - -#@INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_SYS_SOCKET_H - -#if @HAVE_SYS_SOCKET_H@ - -# define _GL_ALREADY_INCLUDING_SYS_SOCKET_H - -/* On many platforms, assumes prior inclusion of - . */ -# include - -/* On FreeBSD 6.4, defines some macros that assume that NULL - is defined. */ -# include - -/* The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ - -# undef _GL_ALREADY_INCLUDING_SYS_SOCKET_H - -#endif - -#ifndef _@GUARD_PREFIX@_SYS_SOCKET_H -#define _@GUARD_PREFIX@_SYS_SOCKET_H - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif -_GL_INLINE_HEADER_BEGIN -#ifndef _GL_SYS_SOCKET_INLINE -# define _GL_SYS_SOCKET_INLINE _GL_INLINE -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -#if !@HAVE_SA_FAMILY_T@ -# if !GNULIB_defined_sa_family_t -/* On OS/2 kLIBC, sa_family_t is unsigned char unless TCPV40HDRS is defined. */ -# if !defined __KLIBC__ || defined TCPV40HDRS -typedef unsigned short sa_family_t; -# else -typedef unsigned char sa_family_t; -# endif -# define GNULIB_defined_sa_family_t 1 -# endif -#endif - -#if @HAVE_STRUCT_SOCKADDR_STORAGE@ -/* Make the 'struct sockaddr_storage' field 'ss_family' visible on AIX 7.1. */ -# if !@HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ -# ifndef ss_family -# define ss_family __ss_family -# endif -# endif -#else -# include -/* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on - 2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */ -# define __ss_aligntype unsigned long int -# define _SS_SIZE 256 -# define _SS_PADSIZE \ - (_SS_SIZE - ((sizeof (sa_family_t) >= alignof (__ss_aligntype) \ - ? sizeof (sa_family_t) \ - : alignof (__ss_aligntype)) \ - + sizeof (__ss_aligntype))) - -# if !GNULIB_defined_struct_sockaddr_storage -struct sockaddr_storage -{ - sa_family_t ss_family; /* Address family, etc. */ - __ss_aligntype __ss_align; /* Force desired alignment. */ - char __ss_padding[_SS_PADSIZE]; -}; -# define GNULIB_defined_struct_sockaddr_storage 1 -# endif - -#endif - -/* Get struct iovec. */ -/* But avoid namespace pollution on glibc systems. */ -#if ! defined __GLIBC__ -# include -#endif - -#if @HAVE_SYS_SOCKET_H@ - -/* A platform that has . */ - -/* For shutdown(). */ -# if !defined SHUT_RD -# define SHUT_RD 0 -# endif -# if !defined SHUT_WR -# define SHUT_WR 1 -# endif -# if !defined SHUT_RDWR -# define SHUT_RDWR 2 -# endif - -#else - -# ifdef __CYGWIN__ -# error "Cygwin does have a sys/socket.h, doesn't it?!?" -# endif - -/* A platform that lacks . - - Currently only MinGW is supported. See the gnulib manual regarding - Windows sockets. MinGW has the header files winsock2.h and - ws2tcpip.h that declare the sys/socket.h definitions we need. Note - that you can influence which definitions you get by setting the - WINVER symbol before including these two files. For example, - getaddrinfo is only available if _WIN32_WINNT >= 0x0501 (that - symbol is set indirectly through WINVER). You can set this by - adding AC_DEFINE(WINVER, 0x0501) to configure.ac. Note that your - code may not run on older Windows releases then. My Windows 2000 - box was not able to run the code, for example. The situation is - slightly confusing because - - suggests that getaddrinfo should be available on all Windows - releases. */ - -# if @HAVE_WINSOCK2_H@ -# include -# endif -# if @HAVE_WS2TCPIP_H@ -# include -# endif - -/* For shutdown(). */ -# if !defined SHUT_RD && defined SD_RECEIVE -# define SHUT_RD SD_RECEIVE -# endif -# if !defined SHUT_WR && defined SD_SEND -# define SHUT_WR SD_SEND -# endif -# if !defined SHUT_RDWR && defined SD_BOTH -# define SHUT_RDWR SD_BOTH -# endif - -# if @HAVE_WINSOCK2_H@ -/* Include headers needed by the emulation code. */ -# include -# include - -# if !GNULIB_defined_socklen_t -typedef int socklen_t; -# define GNULIB_defined_socklen_t 1 -# endif - -# endif - -/* Rudimentary 'struct msghdr'; this works as long as you don't try to - access msg_control or msg_controllen. */ -struct msghdr { - void *msg_name; - socklen_t msg_namelen; - struct iovec *msg_iov; - int msg_iovlen; - int msg_flags; -}; - -#endif - -/* Fix some definitions from . */ - -#if @HAVE_WINSOCK2_H@ - -# if !GNULIB_defined_rpl_fd_isset - -/* Re-define FD_ISSET to avoid a WSA call while we are not using - network sockets. */ -_GL_SYS_SOCKET_INLINE int -rpl_fd_isset (SOCKET fd, fd_set * set) -{ - u_int i; - if (set == NULL) - return 0; - - for (i = 0; i < set->fd_count; i++) - if (set->fd_array[i] == fd) - return 1; - - return 0; -} - -# define GNULIB_defined_rpl_fd_isset 1 -# endif - -# undef FD_ISSET -# define FD_ISSET(fd, set) rpl_fd_isset(fd, set) - -#endif - -/* Hide some function declarations from . */ - -#if @HAVE_WINSOCK2_H@ -# if !defined _@GUARD_PREFIX@_UNISTD_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef close -# define close close_used_without_including_unistd_h -# else - _GL_WARN_ON_USE (close, - "close() used without including "); -# endif -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gethostname -# define gethostname gethostname_used_without_including_unistd_h -# else - _GL_WARN_ON_USE (gethostname, - "gethostname() used without including "); -# endif -# endif -# if !defined _@GUARD_PREFIX@_SYS_SELECT_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef select -# define select select_used_without_including_sys_select_h -# else - _GL_WARN_ON_USE (select, - "select() used without including "); -# endif -# endif -#endif - -/* Wrap everything else to use libc file descriptors for sockets. */ - -#if @GNULIB_SOCKET@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef socket -# define socket rpl_socket -# endif -_GL_FUNCDECL_RPL (socket, int, (int domain, int type, int protocol)); -_GL_CXXALIAS_RPL (socket, int, (int domain, int type, int protocol)); -# else -_GL_CXXALIAS_SYS (socket, int, (int domain, int type, int protocol)); -# endif -_GL_CXXALIASWARN (socket); -#elif @HAVE_WINSOCK2_H@ -# undef socket -# define socket socket_used_without_requesting_gnulib_module_socket -#elif defined GNULIB_POSIXCHECK -# undef socket -# if HAVE_RAW_DECL_SOCKET -_GL_WARN_ON_USE (socket, "socket is not always POSIX compliant - " - "use gnulib module socket for portability"); -# endif -#endif - -#if @GNULIB_CONNECT@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef connect -# define connect rpl_connect -# endif -_GL_FUNCDECL_RPL (connect, int, - (int fd, const struct sockaddr *addr, socklen_t addrlen) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (connect, int, - (int fd, const struct sockaddr *addr, socklen_t addrlen)); -# else -/* Need to cast, because on NonStop Kernel, the third parameter is - size_t addrlen. */ -_GL_CXXALIAS_SYS_CAST (connect, int, - (int fd, - const struct sockaddr *addr, socklen_t addrlen)); -# endif -_GL_CXXALIASWARN (connect); -#elif @HAVE_WINSOCK2_H@ -# undef connect -# define connect socket_used_without_requesting_gnulib_module_connect -#elif defined GNULIB_POSIXCHECK -# undef connect -# if HAVE_RAW_DECL_CONNECT -_GL_WARN_ON_USE (connect, "connect is not always POSIX compliant - " - "use gnulib module connect for portability"); -# endif -#endif - -#if @GNULIB_ACCEPT@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef accept -# define accept rpl_accept -# endif -_GL_FUNCDECL_RPL (accept, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -_GL_CXXALIAS_RPL (accept, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# else -/* Need to cast, because on Solaris 10 systems, the third parameter is - void *addrlen. */ -_GL_CXXALIAS_SYS_CAST (accept, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# endif -_GL_CXXALIASWARN (accept); -#elif @HAVE_WINSOCK2_H@ -# undef accept -# define accept accept_used_without_requesting_gnulib_module_accept -#elif defined GNULIB_POSIXCHECK -# undef accept -# if HAVE_RAW_DECL_ACCEPT -_GL_WARN_ON_USE (accept, "accept is not always POSIX compliant - " - "use gnulib module accept for portability"); -# endif -#endif - -#if @GNULIB_BIND@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef bind -# define bind rpl_bind -# endif -_GL_FUNCDECL_RPL (bind, int, - (int fd, const struct sockaddr *addr, socklen_t addrlen) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (bind, int, - (int fd, const struct sockaddr *addr, socklen_t addrlen)); -# else -/* Need to cast, because on NonStop Kernel, the third parameter is - size_t addrlen. */ -_GL_CXXALIAS_SYS_CAST (bind, int, - (int fd, - const struct sockaddr *addr, socklen_t addrlen)); -# endif -_GL_CXXALIASWARN (bind); -#elif @HAVE_WINSOCK2_H@ -# undef bind -# define bind bind_used_without_requesting_gnulib_module_bind -#elif defined GNULIB_POSIXCHECK -# undef bind -# if HAVE_RAW_DECL_BIND -_GL_WARN_ON_USE (bind, "bind is not always POSIX compliant - " - "use gnulib module bind for portability"); -# endif -#endif - -#if @GNULIB_GETPEERNAME@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getpeername -# define getpeername rpl_getpeername -# endif -_GL_FUNCDECL_RPL (getpeername, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (getpeername, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# else -/* Need to cast, because on Solaris 10 systems, the third parameter is - void *addrlen. */ -_GL_CXXALIAS_SYS_CAST (getpeername, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# endif -_GL_CXXALIASWARN (getpeername); -#elif @HAVE_WINSOCK2_H@ -# undef getpeername -# define getpeername getpeername_used_without_requesting_gnulib_module_getpeername -#elif defined GNULIB_POSIXCHECK -# undef getpeername -# if HAVE_RAW_DECL_GETPEERNAME -_GL_WARN_ON_USE (getpeername, "getpeername is not always POSIX compliant - " - "use gnulib module getpeername for portability"); -# endif -#endif - -#if @GNULIB_GETSOCKNAME@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getsockname -# define getsockname rpl_getsockname -# endif -_GL_FUNCDECL_RPL (getsockname, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (getsockname, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# else -/* Need to cast, because on Solaris 10 systems, the third parameter is - void *addrlen. */ -_GL_CXXALIAS_SYS_CAST (getsockname, int, - (int fd, struct sockaddr *addr, socklen_t *addrlen)); -# endif -_GL_CXXALIASWARN (getsockname); -#elif @HAVE_WINSOCK2_H@ -# undef getsockname -# define getsockname getsockname_used_without_requesting_gnulib_module_getsockname -#elif defined GNULIB_POSIXCHECK -# undef getsockname -# if HAVE_RAW_DECL_GETSOCKNAME -_GL_WARN_ON_USE (getsockname, "getsockname is not always POSIX compliant - " - "use gnulib module getsockname for portability"); -# endif -#endif - -#if @GNULIB_GETSOCKOPT@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getsockopt -# define getsockopt rpl_getsockopt -# endif -_GL_FUNCDECL_RPL (getsockopt, int, (int fd, int level, int optname, - void *optval, socklen_t *optlen) - _GL_ARG_NONNULL ((4, 5))); -_GL_CXXALIAS_RPL (getsockopt, int, (int fd, int level, int optname, - void *optval, socklen_t *optlen)); -# else -/* Need to cast, because on Solaris 10 systems, the fifth parameter is - void *optlen. */ -_GL_CXXALIAS_SYS_CAST (getsockopt, int, (int fd, int level, int optname, - void *optval, socklen_t *optlen)); -# endif -_GL_CXXALIASWARN (getsockopt); -#elif @HAVE_WINSOCK2_H@ -# undef getsockopt -# define getsockopt getsockopt_used_without_requesting_gnulib_module_getsockopt -#elif defined GNULIB_POSIXCHECK -# undef getsockopt -# if HAVE_RAW_DECL_GETSOCKOPT -_GL_WARN_ON_USE (getsockopt, "getsockopt is not always POSIX compliant - " - "use gnulib module getsockopt for portability"); -# endif -#endif - -#if @GNULIB_LISTEN@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef listen -# define listen rpl_listen -# endif -_GL_FUNCDECL_RPL (listen, int, (int fd, int backlog)); -_GL_CXXALIAS_RPL (listen, int, (int fd, int backlog)); -# else -_GL_CXXALIAS_SYS (listen, int, (int fd, int backlog)); -# endif -_GL_CXXALIASWARN (listen); -#elif @HAVE_WINSOCK2_H@ -# undef listen -# define listen listen_used_without_requesting_gnulib_module_listen -#elif defined GNULIB_POSIXCHECK -# undef listen -# if HAVE_RAW_DECL_LISTEN -_GL_WARN_ON_USE (listen, "listen is not always POSIX compliant - " - "use gnulib module listen for portability"); -# endif -#endif - -#if @GNULIB_RECV@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef recv -# define recv rpl_recv -# endif -_GL_FUNCDECL_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); -# else -_GL_CXXALIAS_SYS (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); -# endif -_GL_CXXALIASWARN (recv); -#elif @HAVE_WINSOCK2_H@ -# undef recv -# define recv recv_used_without_requesting_gnulib_module_recv -#elif defined GNULIB_POSIXCHECK -# undef recv -# if HAVE_RAW_DECL_RECV -_GL_WARN_ON_USE (recv, "recv is not always POSIX compliant - " - "use gnulib module recv for portability"); -# endif -#endif - -#if @GNULIB_SEND@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef send -# define send rpl_send -# endif -_GL_FUNCDECL_RPL (send, ssize_t, - (int fd, const void *buf, size_t len, int flags) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (send, ssize_t, - (int fd, const void *buf, size_t len, int flags)); -# else -_GL_CXXALIAS_SYS (send, ssize_t, - (int fd, const void *buf, size_t len, int flags)); -# endif -_GL_CXXALIASWARN (send); -#elif @HAVE_WINSOCK2_H@ -# undef send -# define send send_used_without_requesting_gnulib_module_send -#elif defined GNULIB_POSIXCHECK -# undef send -# if HAVE_RAW_DECL_SEND -_GL_WARN_ON_USE (send, "send is not always POSIX compliant - " - "use gnulib module send for portability"); -# endif -#endif - -#if @GNULIB_RECVFROM@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef recvfrom -# define recvfrom rpl_recvfrom -# endif -_GL_FUNCDECL_RPL (recvfrom, ssize_t, - (int fd, void *buf, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (recvfrom, ssize_t, - (int fd, void *buf, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen)); -# else -/* Need to cast, because on Solaris 10 systems, the sixth parameter is - void *fromlen. */ -_GL_CXXALIAS_SYS_CAST (recvfrom, ssize_t, - (int fd, void *buf, size_t len, int flags, - struct sockaddr *from, socklen_t *fromlen)); -# endif -_GL_CXXALIASWARN (recvfrom); -#elif @HAVE_WINSOCK2_H@ -# undef recvfrom -# define recvfrom recvfrom_used_without_requesting_gnulib_module_recvfrom -#elif defined GNULIB_POSIXCHECK -# undef recvfrom -# if HAVE_RAW_DECL_RECVFROM -_GL_WARN_ON_USE (recvfrom, "recvfrom is not always POSIX compliant - " - "use gnulib module recvfrom for portability"); -# endif -#endif - -#if @GNULIB_SENDTO@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef sendto -# define sendto rpl_sendto -# endif -_GL_FUNCDECL_RPL (sendto, ssize_t, - (int fd, const void *buf, size_t len, int flags, - const struct sockaddr *to, socklen_t tolen) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (sendto, ssize_t, - (int fd, const void *buf, size_t len, int flags, - const struct sockaddr *to, socklen_t tolen)); -# else -/* Need to cast, because on NonStop Kernel, the sixth parameter is - size_t tolen. */ -_GL_CXXALIAS_SYS_CAST (sendto, ssize_t, - (int fd, const void *buf, size_t len, int flags, - const struct sockaddr *to, socklen_t tolen)); -# endif -_GL_CXXALIASWARN (sendto); -#elif @HAVE_WINSOCK2_H@ -# undef sendto -# define sendto sendto_used_without_requesting_gnulib_module_sendto -#elif defined GNULIB_POSIXCHECK -# undef sendto -# if HAVE_RAW_DECL_SENDTO -_GL_WARN_ON_USE (sendto, "sendto is not always POSIX compliant - " - "use gnulib module sendto for portability"); -# endif -#endif - -#if @GNULIB_SETSOCKOPT@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef setsockopt -# define setsockopt rpl_setsockopt -# endif -_GL_FUNCDECL_RPL (setsockopt, int, (int fd, int level, int optname, - const void * optval, socklen_t optlen) - _GL_ARG_NONNULL ((4))); -_GL_CXXALIAS_RPL (setsockopt, int, (int fd, int level, int optname, - const void * optval, socklen_t optlen)); -# else -/* Need to cast, because on NonStop Kernel, the fifth parameter is - size_t optlen. */ -_GL_CXXALIAS_SYS_CAST (setsockopt, int, - (int fd, int level, int optname, - const void * optval, socklen_t optlen)); -# endif -_GL_CXXALIASWARN (setsockopt); -#elif @HAVE_WINSOCK2_H@ -# undef setsockopt -# define setsockopt setsockopt_used_without_requesting_gnulib_module_setsockopt -#elif defined GNULIB_POSIXCHECK -# undef setsockopt -# if HAVE_RAW_DECL_SETSOCKOPT -_GL_WARN_ON_USE (setsockopt, "setsockopt is not always POSIX compliant - " - "use gnulib module setsockopt for portability"); -# endif -#endif - -#if @GNULIB_SHUTDOWN@ -# if @HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef shutdown -# define shutdown rpl_shutdown -# endif -_GL_FUNCDECL_RPL (shutdown, int, (int fd, int how)); -_GL_CXXALIAS_RPL (shutdown, int, (int fd, int how)); -# else -_GL_CXXALIAS_SYS (shutdown, int, (int fd, int how)); -# endif -_GL_CXXALIASWARN (shutdown); -#elif @HAVE_WINSOCK2_H@ -# undef shutdown -# define shutdown shutdown_used_without_requesting_gnulib_module_shutdown -#elif defined GNULIB_POSIXCHECK -# undef shutdown -# if HAVE_RAW_DECL_SHUTDOWN -_GL_WARN_ON_USE (shutdown, "shutdown is not always POSIX compliant - " - "use gnulib module shutdown for portability"); -# endif -#endif - -#if @GNULIB_ACCEPT4@ -/* Accept a connection on a socket, with specific opening flags. - The flags are a bitmask, possibly including O_CLOEXEC (defined in ) - and O_TEXT, O_BINARY (defined in "binary-io.h"). - See also the Linux man page at - . */ -# if @HAVE_ACCEPT4@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define accept4 rpl_accept4 -# endif -_GL_FUNCDECL_RPL (accept4, int, - (int sockfd, struct sockaddr *addr, socklen_t *addrlen, - int flags)); -_GL_CXXALIAS_RPL (accept4, int, - (int sockfd, struct sockaddr *addr, socklen_t *addrlen, - int flags)); -# else -_GL_FUNCDECL_SYS (accept4, int, - (int sockfd, struct sockaddr *addr, socklen_t *addrlen, - int flags)); -_GL_CXXALIAS_SYS (accept4, int, - (int sockfd, struct sockaddr *addr, socklen_t *addrlen, - int flags)); -# endif -_GL_CXXALIASWARN (accept4); -#elif defined GNULIB_POSIXCHECK -# undef accept4 -# if HAVE_RAW_DECL_ACCEPT4 -_GL_WARN_ON_USE (accept4, "accept4 is unportable - " - "use gnulib module accept4 for portability"); -# endif -#endif - -_GL_INLINE_HEADER_END - -#endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ -#endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ -#endif diff --git a/src/gl/sys_stat.in.h b/src/gl/sys_stat.in.h deleted file mode 100644 index 72d9537420..0000000000 --- a/src/gl/sys_stat.in.h +++ /dev/null @@ -1,732 +0,0 @@ -/* Provide a more complete sys/stat header file. - Copyright (C) 2005-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ - -/* This file is supposed to be used on platforms where is - incomplete. It is intended to provide definitions and prototypes - needed by an application. Start with what the system provides. */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if defined __need_system_sys_stat_h -/* Special invocation convention. */ - -#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_SYS_STAT_H - -/* Get nlink_t. - May also define off_t to a 64-bit type on native Windows. */ -#include - -/* Get struct timespec. */ -#include - -/* The include_next requires a split double-inclusion guard. */ -#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ - -#ifndef _@GUARD_PREFIX@_SYS_STAT_H -#define _@GUARD_PREFIX@_SYS_STAT_H - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -/* Before doing "#define mkdir rpl_mkdir" below, we need to include all - headers that may declare mkdir(). Native Windows platforms declare mkdir - in and/or , not in . */ -#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ -# include /* mingw32, mingw64 */ -# include /* mingw64, MSVC 9 */ -#endif - -/* Native Windows platforms declare umask() in . */ -#if 0 && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) -# include -#endif - -/* Large File Support on native Windows. */ -#if @WINDOWS_64_BIT_ST_SIZE@ -# define stat _stati64 -#endif - -#ifndef S_IFIFO -# ifdef _S_IFIFO -# define S_IFIFO _S_IFIFO -# endif -#endif - -#ifndef S_IFMT -# define S_IFMT 0170000 -#endif - -#if STAT_MACROS_BROKEN -# undef S_ISBLK -# undef S_ISCHR -# undef S_ISDIR -# undef S_ISFIFO -# undef S_ISLNK -# undef S_ISNAM -# undef S_ISMPB -# undef S_ISMPC -# undef S_ISNWK -# undef S_ISREG -# undef S_ISSOCK -#endif - -#ifndef S_ISBLK -# ifdef S_IFBLK -# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) -# else -# define S_ISBLK(m) 0 -# endif -#endif - -#ifndef S_ISCHR -# ifdef S_IFCHR -# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) -# else -# define S_ISCHR(m) 0 -# endif -#endif - -#ifndef S_ISDIR -# ifdef S_IFDIR -# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) -# else -# define S_ISDIR(m) 0 -# endif -#endif - -#ifndef S_ISDOOR /* Solaris 2.5 and up */ -# define S_ISDOOR(m) 0 -#endif - -#ifndef S_ISFIFO -# ifdef S_IFIFO -# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) -# else -# define S_ISFIFO(m) 0 -# endif -#endif - -#ifndef S_ISLNK -# ifdef S_IFLNK -# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) -# else -# define S_ISLNK(m) 0 -# endif -#endif - -#ifndef S_ISMPB /* V7 */ -# ifdef S_IFMPB -# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) -# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) -# else -# define S_ISMPB(m) 0 -# define S_ISMPC(m) 0 -# endif -#endif - -#ifndef S_ISMPX /* AIX */ -# define S_ISMPX(m) 0 -#endif - -#ifndef S_ISNAM /* Xenix */ -# ifdef S_IFNAM -# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) -# else -# define S_ISNAM(m) 0 -# endif -#endif - -#ifndef S_ISNWK /* HP/UX */ -# ifdef S_IFNWK -# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) -# else -# define S_ISNWK(m) 0 -# endif -#endif - -#ifndef S_ISPORT /* Solaris 10 and up */ -# define S_ISPORT(m) 0 -#endif - -#ifndef S_ISREG -# ifdef S_IFREG -# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) -# else -# define S_ISREG(m) 0 -# endif -#endif - -#ifndef S_ISSOCK -# ifdef S_IFSOCK -# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) -# else -# define S_ISSOCK(m) 0 -# endif -#endif - - -#ifndef S_TYPEISMQ -# define S_TYPEISMQ(p) 0 -#endif - -#ifndef S_TYPEISTMO -# define S_TYPEISTMO(p) 0 -#endif - - -#ifndef S_TYPEISSEM -# ifdef S_INSEM -# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) -# else -# define S_TYPEISSEM(p) 0 -# endif -#endif - -#ifndef S_TYPEISSHM -# ifdef S_INSHD -# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) -# else -# define S_TYPEISSHM(p) 0 -# endif -#endif - -/* high performance ("contiguous data") */ -#ifndef S_ISCTG -# define S_ISCTG(p) 0 -#endif - -/* Cray DMF (data migration facility): off line, with data */ -#ifndef S_ISOFD -# define S_ISOFD(p) 0 -#endif - -/* Cray DMF (data migration facility): off line, with no data */ -#ifndef S_ISOFL -# define S_ISOFL(p) 0 -#endif - -/* 4.4BSD whiteout */ -#ifndef S_ISWHT -# define S_ISWHT(m) 0 -#endif - -/* If any of the following are undefined, - define them to their de facto standard values. */ -#if !S_ISUID -# define S_ISUID 04000 -#endif -#if !S_ISGID -# define S_ISGID 02000 -#endif - -/* S_ISVTX is a common extension to POSIX. */ -#ifndef S_ISVTX -# define S_ISVTX 01000 -#endif - -#if !S_IRUSR && S_IREAD -# define S_IRUSR S_IREAD -#endif -#if !S_IRUSR -# define S_IRUSR 00400 -#endif -#if !S_IRGRP -# define S_IRGRP (S_IRUSR >> 3) -#endif -#if !S_IROTH -# define S_IROTH (S_IRUSR >> 6) -#endif - -#if !S_IWUSR && S_IWRITE -# define S_IWUSR S_IWRITE -#endif -#if !S_IWUSR -# define S_IWUSR 00200 -#endif -#if !S_IWGRP -# define S_IWGRP (S_IWUSR >> 3) -#endif -#if !S_IWOTH -# define S_IWOTH (S_IWUSR >> 6) -#endif - -#if !S_IXUSR && S_IEXEC -# define S_IXUSR S_IEXEC -#endif -#if !S_IXUSR -# define S_IXUSR 00100 -#endif -#if !S_IXGRP -# define S_IXGRP (S_IXUSR >> 3) -#endif -#if !S_IXOTH -# define S_IXOTH (S_IXUSR >> 6) -#endif - -#if !S_IRWXU -# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) -#endif -#if !S_IRWXG -# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) -#endif -#if !S_IRWXO -# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) -#endif - -/* S_IXUGO is a common extension to POSIX. */ -#if !S_IXUGO -# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) -#endif - -#ifndef S_IRWXUGO -# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) -#endif - -/* Macros for futimens and utimensat. */ -#ifndef UTIME_NOW -# define UTIME_NOW (-1) -# define UTIME_OMIT (-2) -#endif - - -#if @GNULIB_FCHMODAT@ -# if !@HAVE_FCHMODAT@ -_GL_FUNCDECL_SYS (fchmodat, int, - (int fd, char const *file, mode_t mode, int flag) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (fchmodat, int, - (int fd, char const *file, mode_t mode, int flag)); -_GL_CXXALIASWARN (fchmodat); -#elif defined GNULIB_POSIXCHECK -# undef fchmodat -# if HAVE_RAW_DECL_FCHMODAT -_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " - "use gnulib module openat for portability"); -# endif -#endif - - -#if @GNULIB_FSTAT@ -# if @REPLACE_FSTAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fstat -# define fstat rpl_fstat -# endif -_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); -# else -_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); -# endif -_GL_CXXALIASWARN (fstat); -#elif @WINDOWS_64_BIT_ST_SIZE@ -/* Above, we define stat to _stati64. */ -# define fstat _fstati64 -#elif defined GNULIB_POSIXCHECK -# undef fstat -# if HAVE_RAW_DECL_FSTAT -_GL_WARN_ON_USE (fstat, "fstat has portability problems - " - "use gnulib module fstat for portability"); -# endif -#endif - - -#if @GNULIB_FSTATAT@ -# if @REPLACE_FSTATAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fstatat -# define fstatat rpl_fstatat -# endif -_GL_FUNCDECL_RPL (fstatat, int, - (int fd, char const *name, struct stat *st, int flags) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (fstatat, int, - (int fd, char const *name, struct stat *st, int flags)); -# else -# if !@HAVE_FSTATAT@ -_GL_FUNCDECL_SYS (fstatat, int, - (int fd, char const *name, struct stat *st, int flags) - _GL_ARG_NONNULL ((2, 3))); -# endif -_GL_CXXALIAS_SYS (fstatat, int, - (int fd, char const *name, struct stat *st, int flags)); -# endif -_GL_CXXALIASWARN (fstatat); -#elif defined GNULIB_POSIXCHECK -# undef fstatat -# if HAVE_RAW_DECL_FSTATAT -_GL_WARN_ON_USE (fstatat, "fstatat is not portable - " - "use gnulib module openat for portability"); -# endif -#endif - - -#if @GNULIB_FUTIMENS@ -/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens - implementation relies on futimesat, which on Solaris 10 makes an invocation - to futimens that is meant to invoke the libc's futimens(), not gnulib's - futimens(). */ -# if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef futimens -# define futimens rpl_futimens -# endif -_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); -_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); -# else -# if !@HAVE_FUTIMENS@ -_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); -# endif -_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); -# endif -# if @HAVE_FUTIMENS@ -_GL_CXXALIASWARN (futimens); -# endif -#elif defined GNULIB_POSIXCHECK -# undef futimens -# if HAVE_RAW_DECL_FUTIMENS -_GL_WARN_ON_USE (futimens, "futimens is not portable - " - "use gnulib module futimens for portability"); -# endif -#endif - - -#if @GNULIB_LCHMOD@ -/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME - denotes a symbolic link. */ -# if !@HAVE_LCHMOD@ -/* The lchmod replacement follows symbolic links. Callers should take - this into account; lchmod should be applied only to arguments that - are known to not be symbolic links. On hosts that lack lchmod, - this can lead to race conditions between the check and the - invocation of lchmod, but we know of no workarounds that are - reliable in general. You might try requesting support for lchmod - from your operating system supplier. */ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define lchmod chmod -# endif -/* Need to cast, because on mingw, the second parameter of chmod is - int mode. */ -_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int, - (const char *filename, mode_t mode)); -# else -# if 0 /* assume already declared */ -_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); -# endif -# if @HAVE_LCHMOD@ -_GL_CXXALIASWARN (lchmod); -# endif -#elif defined GNULIB_POSIXCHECK -# undef lchmod -# if HAVE_RAW_DECL_LCHMOD -_GL_WARN_ON_USE (lchmod, "lchmod is unportable - " - "use gnulib module lchmod for portability"); -# endif -#endif - - -#if @GNULIB_LSTAT@ -# if ! @HAVE_LSTAT@ -/* mingw does not support symlinks, therefore it does not have lstat. But - without links, stat does just fine. */ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define lstat stat -# endif -_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf)); -# elif @REPLACE_LSTAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef lstat -# define lstat rpl_lstat -# endif -_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf)); -# else -_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf)); -# endif -# if @HAVE_LSTAT@ -_GL_CXXALIASWARN (lstat); -# endif -#elif defined GNULIB_POSIXCHECK -# undef lstat -# if HAVE_RAW_DECL_LSTAT -_GL_WARN_ON_USE (lstat, "lstat is unportable - " - "use gnulib module lstat for portability"); -# endif -#endif - - -#if @REPLACE_MKDIR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mkdir -# define mkdir rpl_mkdir -# endif -_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); -#else -/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. - Additionally, it declares _mkdir (and depending on compile flags, an - alias mkdir), only in the nonstandard includes and , - which are included above. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - -# if !GNULIB_defined_rpl_mkdir -static int -rpl_mkdir (char const *name, mode_t mode) -{ - return _mkdir (name); -} -# define GNULIB_defined_rpl_mkdir 1 -# endif - -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mkdir rpl_mkdir -# endif -_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); -# else -_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); -# endif -#endif -_GL_CXXALIASWARN (mkdir); - - -#if @GNULIB_MKDIRAT@ -# if !@HAVE_MKDIRAT@ -_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); -_GL_CXXALIASWARN (mkdirat); -#elif defined GNULIB_POSIXCHECK -# undef mkdirat -# if HAVE_RAW_DECL_MKDIRAT -_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " - "use gnulib module openat for portability"); -# endif -#endif - - -#if @GNULIB_MKFIFO@ -# if @REPLACE_MKFIFO@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mkfifo -# define mkfifo rpl_mkfifo -# endif -_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); -# else -# if !@HAVE_MKFIFO@ -_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); -# endif -_GL_CXXALIASWARN (mkfifo); -#elif defined GNULIB_POSIXCHECK -# undef mkfifo -# if HAVE_RAW_DECL_MKFIFO -_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " - "use gnulib module mkfifo for portability"); -# endif -#endif - - -#if @GNULIB_MKFIFOAT@ -# if !@HAVE_MKFIFOAT@ -_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); -_GL_CXXALIASWARN (mkfifoat); -#elif defined GNULIB_POSIXCHECK -# undef mkfifoat -# if HAVE_RAW_DECL_MKFIFOAT -_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " - "use gnulib module mkfifoat for portability"); -# endif -#endif - - -#if @GNULIB_MKNOD@ -# if @REPLACE_MKNOD@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mknod -# define mknod rpl_mknod -# endif -_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); -# else -# if !@HAVE_MKNOD@ -_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ -_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); -# endif -_GL_CXXALIASWARN (mknod); -#elif defined GNULIB_POSIXCHECK -# undef mknod -# if HAVE_RAW_DECL_MKNOD -_GL_WARN_ON_USE (mknod, "mknod is not portable - " - "use gnulib module mknod for portability"); -# endif -#endif - - -#if @GNULIB_MKNODAT@ -# if !@HAVE_MKNODAT@ -_GL_FUNCDECL_SYS (mknodat, int, - (int fd, char const *file, mode_t mode, dev_t dev) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (mknodat, int, - (int fd, char const *file, mode_t mode, dev_t dev)); -_GL_CXXALIASWARN (mknodat); -#elif defined GNULIB_POSIXCHECK -# undef mknodat -# if HAVE_RAW_DECL_MKNODAT -_GL_WARN_ON_USE (mknodat, "mknodat is not portable - " - "use gnulib module mkfifoat for portability"); -# endif -#endif - - -#if @GNULIB_STAT@ -# if @REPLACE_STAT@ -/* We can't use the object-like #define stat rpl_stat, because of - struct stat. This means that rpl_stat will not be used if the user - does (stat)(a,b). Oh well. */ -# if defined _AIX && defined stat && defined _LARGE_FILES - /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, - so we have to replace stat64() instead of stat(). */ -# undef stat64 -# define stat64(name, st) rpl_stat (name, st) -# elif @WINDOWS_64_BIT_ST_SIZE@ - /* Above, we define stat to _stati64. */ -# if defined __MINGW32__ && defined _stati64 -# ifndef _USE_32BIT_TIME_T - /* The system headers define _stati64 to _stat64. */ -# undef _stat64 -# define _stat64(name, st) rpl_stat (name, st) -# endif -# elif defined _MSC_VER && defined _stati64 -# ifdef _USE_32BIT_TIME_T - /* The system headers define _stati64 to _stat32i64. */ -# undef _stat32i64 -# define _stat32i64(name, st) rpl_stat (name, st) -# else - /* The system headers define _stati64 to _stat64. */ -# undef _stat64 -# define _stat64(name, st) rpl_stat (name, st) -# endif -# else -# undef _stati64 -# define _stati64(name, st) rpl_stat (name, st) -# endif -# elif defined __MINGW32__ && defined stat -# ifdef _USE_32BIT_TIME_T - /* The system headers define stat to _stat32i64. */ -# undef _stat32i64 -# define _stat32i64(name, st) rpl_stat (name, st) -# else - /* The system headers define stat to _stat64. */ -# undef _stat64 -# define _stat64(name, st) rpl_stat (name, st) -# endif -# elif defined _MSC_VER && defined stat -# ifdef _USE_32BIT_TIME_T - /* The system headers define stat to _stat32. */ -# undef _stat32 -# define _stat32(name, st) rpl_stat (name, st) -# else - /* The system headers define stat to _stat64i32. */ -# undef _stat64i32 -# define _stat64i32(name, st) rpl_stat (name, st) -# endif -# else /* !(_AIX ||__MINGW32__ || _MSC_VER) */ -# undef stat -# define stat(name, st) rpl_stat (name, st) -# endif /* !_LARGE_FILES */ -_GL_EXTERN_C int stat (const char *name, struct stat *buf) - _GL_ARG_NONNULL ((1, 2)); -# endif -#elif defined GNULIB_POSIXCHECK -# undef stat -# if HAVE_RAW_DECL_STAT -_GL_WARN_ON_USE (stat, "stat is unportable - " - "use gnulib module stat for portability"); -# endif -#endif - - -#if @GNULIB_UTIMENSAT@ -/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat - implementation relies on futimesat, which on Solaris 10 makes an invocation - to utimensat that is meant to invoke the libc's utimensat(), not gnulib's - utimensat(). */ -# if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef utimensat -# define utimensat rpl_utimensat -# endif -_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, - struct timespec const times[2], int flag) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, - struct timespec const times[2], int flag)); -# else -# if !@HAVE_UTIMENSAT@ -_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, - struct timespec const times[2], int flag) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, - struct timespec const times[2], int flag)); -# endif -# if @HAVE_UTIMENSAT@ -_GL_CXXALIASWARN (utimensat); -# endif -#elif defined GNULIB_POSIXCHECK -# undef utimensat -# if HAVE_RAW_DECL_UTIMENSAT -_GL_WARN_ON_USE (utimensat, "utimensat is not portable - " - "use gnulib module utimensat for portability"); -# endif -#endif - - -#endif /* _@GUARD_PREFIX@_SYS_STAT_H */ -#endif /* _@GUARD_PREFIX@_SYS_STAT_H */ -#endif diff --git a/src/gl/sys_time.in.h b/src/gl/sys_time.in.h deleted file mode 100644 index d535a6a48b..0000000000 --- a/src/gl/sys_time.in.h +++ /dev/null @@ -1,220 +0,0 @@ -/* Provide a more complete sys/time.h. - - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Written by Paul Eggert. */ - -#ifndef _@GUARD_PREFIX@_SYS_TIME_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* On Cygwin and on many BSDish systems, includes itself - recursively via . - Simply delegate to the system's header in this case; it is a no-op. - Without this extra ifdef, the C++ gettimeofday declaration below - would be a forward declaration in gnulib's nested . */ -#if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_ -# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ -#else - -/* The include_next requires a split double-inclusion guard. */ -#if @HAVE_SYS_TIME_H@ -# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ -#endif - -#ifndef _@GUARD_PREFIX@_SYS_TIME_H -#define _@GUARD_PREFIX@_SYS_TIME_H - -#if ! @HAVE_SYS_TIME_H@ -# include -#endif - -/* On native Windows with MSVC, get the 'struct timeval' type. - Also, on native Windows with a 64-bit time_t, where we are overriding the - 'struct timeval' type, get all declarations of system functions whose - signature contains 'struct timeval'. */ -#if (defined _MSC_VER || @REPLACE_STRUCT_TIMEVAL@) && @HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H -# define _GL_INCLUDING_WINSOCK2_H -# include -# undef _GL_INCLUDING_WINSOCK2_H -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if !@HAVE_STRUCT_TIMEVAL@ || @REPLACE_STRUCT_TIMEVAL@ - -# if @REPLACE_STRUCT_TIMEVAL@ -# define timeval rpl_timeval -# endif - -# if !GNULIB_defined_struct_timeval -struct timeval -{ - time_t tv_sec; - long int tv_usec; -}; -# define GNULIB_defined_struct_timeval 1 -# endif - -#endif - -#ifdef __cplusplus -} -#endif - -#if @GNULIB_GETTIMEOFDAY@ -# if @REPLACE_GETTIMEOFDAY@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gettimeofday -# define gettimeofday rpl_gettimeofday -# endif -_GL_FUNCDECL_RPL (gettimeofday, int, - (struct timeval *restrict, void *restrict) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (gettimeofday, int, - (struct timeval *restrict, void *restrict)); -# else -# if !@HAVE_GETTIMEOFDAY@ -_GL_FUNCDECL_SYS (gettimeofday, int, - (struct timeval *restrict, void *restrict) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on glibc systems, by default, the second argument is - struct timezone *. */ -_GL_CXXALIAS_SYS_CAST (gettimeofday, int, - (struct timeval *restrict, void *restrict)); -# endif -_GL_CXXALIASWARN (gettimeofday); -# if defined __cplusplus && defined GNULIB_NAMESPACE -namespace GNULIB_NAMESPACE { - typedef ::timeval -#undef timeval - timeval; -} -# endif -#elif defined GNULIB_POSIXCHECK -# undef gettimeofday -# if HAVE_RAW_DECL_GETTIMEOFDAY -_GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - " - "use gnulib module gettimeofday for portability"); -# endif -#endif - -/* Hide some function declarations from . */ - -#if defined _MSC_VER && @HAVE_WINSOCK2_H@ -# if !defined _@GUARD_PREFIX@_UNISTD_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef close -# define close close_used_without_including_unistd_h -# else - _GL_WARN_ON_USE (close, - "close() used without including "); -# endif -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gethostname -# define gethostname gethostname_used_without_including_unistd_h -# else - _GL_WARN_ON_USE (gethostname, - "gethostname() used without including "); -# endif -# endif -# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef socket -# define socket socket_used_without_including_sys_socket_h -# undef connect -# define connect connect_used_without_including_sys_socket_h -# undef accept -# define accept accept_used_without_including_sys_socket_h -# undef bind -# define bind bind_used_without_including_sys_socket_h -# undef getpeername -# define getpeername getpeername_used_without_including_sys_socket_h -# undef getsockname -# define getsockname getsockname_used_without_including_sys_socket_h -# undef getsockopt -# define getsockopt getsockopt_used_without_including_sys_socket_h -# undef listen -# define listen listen_used_without_including_sys_socket_h -# undef recv -# define recv recv_used_without_including_sys_socket_h -# undef send -# define send send_used_without_including_sys_socket_h -# undef recvfrom -# define recvfrom recvfrom_used_without_including_sys_socket_h -# undef sendto -# define sendto sendto_used_without_including_sys_socket_h -# undef setsockopt -# define setsockopt setsockopt_used_without_including_sys_socket_h -# undef shutdown -# define shutdown shutdown_used_without_including_sys_socket_h -# else - _GL_WARN_ON_USE (socket, - "socket() used without including "); - _GL_WARN_ON_USE (connect, - "connect() used without including "); - _GL_WARN_ON_USE (accept, - "accept() used without including "); - _GL_WARN_ON_USE (bind, - "bind() used without including "); - _GL_WARN_ON_USE (getpeername, - "getpeername() used without including "); - _GL_WARN_ON_USE (getsockname, - "getsockname() used without including "); - _GL_WARN_ON_USE (getsockopt, - "getsockopt() used without including "); - _GL_WARN_ON_USE (listen, - "listen() used without including "); - _GL_WARN_ON_USE (recv, - "recv() used without including "); - _GL_WARN_ON_USE (send, - "send() used without including "); - _GL_WARN_ON_USE (recvfrom, - "recvfrom() used without including "); - _GL_WARN_ON_USE (sendto, - "sendto() used without including "); - _GL_WARN_ON_USE (setsockopt, - "setsockopt() used without including "); - _GL_WARN_ON_USE (shutdown, - "shutdown() used without including "); -# endif -# endif -# if !defined _@GUARD_PREFIX@_SYS_SELECT_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef select -# define select select_used_without_including_sys_select_h -# else - _GL_WARN_ON_USE (select, - "select() used without including "); -# endif -# endif -#endif - -#endif /* _@GUARD_PREFIX@_SYS_TIME_H */ -#endif /* _CYGWIN_SYS_TIME_H */ -#endif /* _@GUARD_PREFIX@_SYS_TIME_H */ diff --git a/src/gl/sys_types.in.h b/src/gl/sys_types.in.h deleted file mode 100644 index 8ab0545382..0000000000 --- a/src/gl/sys_types.in.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Provide a more complete sys/types.h. - - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#ifndef _@GUARD_PREFIX@_SYS_TYPES_H - -/* The include_next requires a split double-inclusion guard. */ -# define _GL_INCLUDING_SYS_TYPES_H -#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ -# undef _GL_INCLUDING_SYS_TYPES_H - -#ifndef _@GUARD_PREFIX@_SYS_TYPES_H -#define _@GUARD_PREFIX@_SYS_TYPES_H - -/* Override off_t if Large File Support is requested on native Windows. */ -#if @WINDOWS_64_BIT_OFF_T@ -/* Same as int64_t in . */ -# if defined _MSC_VER -# define off_t __int64 -# else -# define off_t long long int -# endif -/* Indicator, for gnulib internal purposes. */ -# define _GL_WINDOWS_64_BIT_OFF_T 1 -#endif - -/* MSVC 9 defines size_t in , not in . */ -/* But avoid namespace pollution on glibc systems. */ -#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ - && ! defined __GLIBC__ -# include -#endif - -#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ -#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ diff --git a/src/gl/sys_uio.in.h b/src/gl/sys_uio.in.h deleted file mode 100644 index e70663fda5..0000000000 --- a/src/gl/sys_uio.in.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Substitute for . - Copyright (C) 2011-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -# if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -# endif -@PRAGMA_COLUMNS@ - -#ifndef _@GUARD_PREFIX@_SYS_UIO_H - -#if @HAVE_SYS_UIO_H@ - -/* On OpenBSD 4.4, assumes prior inclusion of . */ -# include - -/* The include_next requires a split double-inclusion guard. */ -# @INCLUDE_NEXT@ @NEXT_SYS_UIO_H@ - -#endif - -#ifndef _@GUARD_PREFIX@_SYS_UIO_H -#define _@GUARD_PREFIX@_SYS_UIO_H - -#if !@HAVE_SYS_UIO_H@ -/* A platform that lacks . */ -/* Get 'size_t' and 'ssize_t'. */ -# include - -# ifdef __cplusplus -extern "C" { -# endif - -# if !GNULIB_defined_struct_iovec -/* All known platforms that lack also lack any declaration - of struct iovec in any other header. */ -struct iovec { - void *iov_base; - size_t iov_len; -}; -# define GNULIB_defined_struct_iovec 1 -# endif - -# ifdef __cplusplus -} -# endif - -#endif - -#endif /* _@GUARD_PREFIX@_SYS_UIO_H */ -#endif /* _@GUARD_PREFIX@_SYS_UIO_H */ diff --git a/src/gl/time-internal.h b/src/gl/time-internal.h deleted file mode 100644 index 0635f28bb9..0000000000 --- a/src/gl/time-internal.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Time internal interface - - Copyright 2015-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -/* Written by Paul Eggert. */ - -/* A time zone rule. */ -struct tm_zone -{ - /* More abbreviations, should they be needed. Their TZ_IS_SET - members are zero. */ - struct tm_zone *next; - -#if HAVE_TZNAME && !HAVE_TM_ZONE - /* Copies of recent strings taken from tzname[0] and tzname[1]. - The copies are in ABBRS, so that they survive tzset. Null if unknown. */ - char *tzname_copy[2]; -#endif - - /* If nonzero, the rule represents the TZ environment variable set - to the first "abbreviation" (this may be the empty string). - Otherwise, it represents an unset TZ. */ - char tz_is_set; - - /* A sequence of null-terminated strings packed next to each other. - The strings are followed by an extra null byte. If TZ_IS_SET, - there must be at least one string and the first string (which is - actually a TZ environment value value) may be empty. Otherwise - all strings must be nonempty. - - Abbreviations are stored here because otherwise the values of - tm_zone and/or tzname would be dead after changing TZ and calling - tzset. Abbreviations never move once allocated, and are live - until tzfree is called. */ - char abbrs[FLEXIBLE_ARRAY_MEMBER]; -}; diff --git a/src/gl/time.in.h b/src/gl/time.in.h deleted file mode 100644 index 865c114119..0000000000 --- a/src/gl/time.in.h +++ /dev/null @@ -1,297 +0,0 @@ -/* A more-standard . - - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -/* Don't get in the way of glibc when it includes time.h merely to - declare a few standard symbols, rather than to declare all the - symbols. (However, skip this for MinGW as it treats __need_time_t - incompatibly.) Also, Solaris 8 eventually includes itself - recursively; if that is happening, just include the system - without adding our own declarations. */ -#if (((defined __need_time_t || defined __need_clock_t \ - || defined __need_timespec) \ - && !defined __MINGW32__) \ - || defined _@GUARD_PREFIX@_TIME_H) - -# @INCLUDE_NEXT@ @NEXT_TIME_H@ - -#else - -# define _@GUARD_PREFIX@_TIME_H - -# @INCLUDE_NEXT@ @NEXT_TIME_H@ - -/* NetBSD 5.0 mis-defines NULL. */ -# include - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - -/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3). - Or they define it with the wrong member names or define it in - (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, - but the pthreads-win32 library defines it in . */ -# if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@ -# if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ -# include -# elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ -# include -# elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ -# include -# else - -# ifdef __cplusplus -extern "C" { -# endif - -# if !GNULIB_defined_struct_timespec -# undef timespec -# define timespec rpl_timespec -struct timespec -{ - time_t tv_sec; - long int tv_nsec; -}; -# define GNULIB_defined_struct_timespec 1 -# endif - -# ifdef __cplusplus -} -# endif - -# endif -# endif - -# if !GNULIB_defined_struct_time_t_must_be_integral -/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires - time_t to be an integer type, even though C99 permits floating - point. We don't know of any implementation that uses floating - point, and it is much easier to write code that doesn't have to - worry about that corner case, so we force the issue. */ -struct __time_t_must_be_integral { - unsigned int __floating_time_t_unsupported : (time_t) 1; -}; -# define GNULIB_defined_struct_time_t_must_be_integral 1 -# endif - -/* Sleep for at least RQTP seconds unless interrupted, If interrupted, - return -1 and store the remaining time into RMTP. See - . */ -# if @GNULIB_NANOSLEEP@ -# if @REPLACE_NANOSLEEP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define nanosleep rpl_nanosleep -# endif -_GL_FUNCDECL_RPL (nanosleep, int, - (struct timespec const *__rqtp, struct timespec *__rmtp) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (nanosleep, int, - (struct timespec const *__rqtp, struct timespec *__rmtp)); -# else -# if ! @HAVE_NANOSLEEP@ -_GL_FUNCDECL_SYS (nanosleep, int, - (struct timespec const *__rqtp, struct timespec *__rmtp) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (nanosleep, int, - (struct timespec const *__rqtp, struct timespec *__rmtp)); -# endif -_GL_CXXALIASWARN (nanosleep); -# endif - -/* Return the 'time_t' representation of TP and normalize TP. */ -# if @GNULIB_MKTIME@ -# if @REPLACE_MKTIME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define mktime rpl_mktime -# endif -_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); -# else -_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); -# endif -_GL_CXXALIASWARN (mktime); -# endif - -/* Convert TIMER to RESULT, assuming local time and UTC respectively. See - and - . */ -# if @GNULIB_TIME_R@ -# if @REPLACE_LOCALTIME_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef localtime_r -# define localtime_r rpl_localtime_r -# endif -_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result)); -# else -# if ! @HAVE_DECL_LOCALTIME_R@ -_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result)); -# endif -# if @HAVE_DECL_LOCALTIME_R@ -_GL_CXXALIASWARN (localtime_r); -# endif -# if @REPLACE_LOCALTIME_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gmtime_r -# define gmtime_r rpl_gmtime_r -# endif -_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result)); -# else -# if ! @HAVE_DECL_LOCALTIME_R@ -_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, - struct tm *restrict __result)); -# endif -# if @HAVE_DECL_LOCALTIME_R@ -_GL_CXXALIASWARN (gmtime_r); -# endif -# endif - -/* Convert TIMER to RESULT, assuming local time and UTC respectively. See - and - . */ -# if @GNULIB_GETTIMEOFDAY@ -# if @REPLACE_LOCALTIME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef localtime -# define localtime rpl_localtime -# endif -_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); -# else -_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); -# endif -_GL_CXXALIASWARN (localtime); -# endif - -# if @GNULIB_GETTIMEOFDAY@ -# if @REPLACE_GMTIME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gmtime -# define gmtime rpl_gmtime -# endif -_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); -# else -_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); -# endif -_GL_CXXALIASWARN (gmtime); -# endif - -/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store - the resulting broken-down time into TM. See - . */ -# if @GNULIB_STRPTIME@ -# if ! @HAVE_STRPTIME@ -_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, - char const *restrict __format, - struct tm *restrict __tm) - _GL_ARG_NONNULL ((1, 2, 3))); -# endif -_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, - char const *restrict __format, - struct tm *restrict __tm)); -_GL_CXXALIASWARN (strptime); -# endif - -# if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ -typedef struct tm_zone *timezone_t; -_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); -_GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); -_GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); -_GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); -_GL_FUNCDECL_SYS (localtime_rz, struct tm *, - (timezone_t __tz, time_t const *restrict __timer, - struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_SYS (localtime_rz, struct tm *, - (timezone_t __tz, time_t const *restrict __timer, - struct tm *restrict __result)); -_GL_FUNCDECL_SYS (mktime_z, time_t, - (timezone_t __tz, struct tm *restrict __result) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_SYS (mktime_z, time_t, - (timezone_t __tz, struct tm *restrict __result)); -# endif - -/* Convert TM to a time_t value, assuming UTC. */ -# if @GNULIB_TIMEGM@ -# if @REPLACE_TIMEGM@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef timegm -# define timegm rpl_timegm -# endif -_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); -# else -# if ! @HAVE_TIMEGM@ -_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); -# endif -_GL_CXXALIASWARN (timegm); -# endif - -/* Encourage applications to avoid unsafe functions that can overrun - buffers when given outlandish struct tm values. Portable - applications should use strftime (or even sprintf) instead. */ -# if defined GNULIB_POSIXCHECK -# undef asctime -_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " - "better use strftime (or even sprintf) instead"); -# endif -# if defined GNULIB_POSIXCHECK -# undef asctime_r -_GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - " - "better use strftime (or even sprintf) instead"); -# endif -# if defined GNULIB_POSIXCHECK -# undef ctime -_GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - " - "better use strftime (or even sprintf) instead"); -# endif -# if defined GNULIB_POSIXCHECK -# undef ctime_r -_GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - " - "better use strftime (or even sprintf) instead"); -# endif - -#endif diff --git a/src/gl/time_r.c b/src/gl/time_r.c deleted file mode 100644 index dc1e16136f..0000000000 --- a/src/gl/time_r.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Reentrant time functions like localtime_r. - - Copyright (C) 2003, 2006-2007, 2010-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -/* Written by Paul Eggert. */ - -#include - -#include - -static struct tm * -copy_tm_result (struct tm *dest, struct tm const *src) -{ - if (! src) - return 0; - *dest = *src; - return dest; -} - - -struct tm * -gmtime_r (time_t const * restrict t, struct tm * restrict tp) -{ - return copy_tm_result (tp, gmtime (t)); -} - -struct tm * -localtime_r (time_t const * restrict t, struct tm * restrict tp) -{ - return copy_tm_result (tp, localtime (t)); -} diff --git a/src/gl/time_rz.c b/src/gl/time_rz.c deleted file mode 100644 index 38afb5fc3c..0000000000 --- a/src/gl/time_rz.c +++ /dev/null @@ -1,322 +0,0 @@ -/* Time zone functions such as tzalloc and localtime_rz - - Copyright 2015-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -/* Written by Paul Eggert. */ - -/* Although this module is not thread-safe, any races should be fairly - rare and reasonably benign. For complete thread-safety, use a C - library with a working timezone_t type, so that this module is not - needed. */ - -#include - -#include - -#include -#include -#include -#include -#include - -#include "flexmember.h" -#include "time-internal.h" - -#if !HAVE_TZSET -static void tzset (void) { } -#endif - -/* The approximate size to use for small allocation requests. This is - the largest "small" request for the GNU C library malloc. */ -enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; - -/* Minimum size of the ABBRS member of struct abbr. ABBRS is larger - only in the unlikely case where an abbreviation longer than this is - used. */ -enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) }; - -/* Magic cookie timezone_t value, for local time. It differs from - NULL and from all other timezone_t values. Only the address - matters; the pointer is never dereferenced. */ -static timezone_t const local_tz = (timezone_t) 1; - -#if HAVE_TM_ZONE || HAVE_TZNAME - -/* Return true if the values A and B differ according to the rules for - tm_isdst: A and B differ if one is zero and the other positive. */ -static bool -isdst_differ (int a, int b) -{ - return !a != !b && 0 <= a && 0 <= b; -} - -/* Return true if A and B are equal. */ -static int -equal_tm (const struct tm *a, const struct tm *b) -{ - return ! ((a->tm_sec ^ b->tm_sec) - | (a->tm_min ^ b->tm_min) - | (a->tm_hour ^ b->tm_hour) - | (a->tm_mday ^ b->tm_mday) - | (a->tm_mon ^ b->tm_mon) - | (a->tm_year ^ b->tm_year) - | isdst_differ (a->tm_isdst, b->tm_isdst)); -} - -#endif - -/* Copy to ABBRS the abbreviation at ABBR with size ABBR_SIZE (this - includes its trailing null byte). Append an extra null byte to - mark the end of ABBRS. */ -static void -extend_abbrs (char *abbrs, char const *abbr, size_t abbr_size) -{ - memcpy (abbrs, abbr, abbr_size); - abbrs[abbr_size] = '\0'; -} - -/* Return a newly allocated time zone for NAME, or NULL on failure. - A null NAME stands for wall clock time (which is like unset TZ). */ -timezone_t -tzalloc (char const *name) -{ - size_t name_size = name ? strlen (name) + 1 : 0; - size_t abbr_size = name_size < ABBR_SIZE_MIN ? ABBR_SIZE_MIN : name_size + 1; - timezone_t tz = malloc (FLEXSIZEOF (struct tm_zone, abbrs, abbr_size)); - if (tz) - { - tz->next = NULL; -#if HAVE_TZNAME && !HAVE_TM_ZONE - tz->tzname_copy[0] = tz->tzname_copy[1] = NULL; -#endif - tz->tz_is_set = !!name; - tz->abbrs[0] = '\0'; - if (name) - extend_abbrs (tz->abbrs, name, name_size); - } - return tz; -} - -/* Save into TZ any nontrivial time zone abbreviation used by TM, and - update *TM (if HAVE_TM_ZONE) or *TZ (if !HAVE_TM_ZONE && - HAVE_TZNAME) if they use the abbreviation. Return true if - successful, false (setting errno) otherwise. */ -static bool -save_abbr (timezone_t tz, struct tm *tm) -{ -#if HAVE_TM_ZONE || HAVE_TZNAME - char const *zone = NULL; - char *zone_copy = (char *) ""; - -# if HAVE_TZNAME - int tzname_index = -1; -# endif - -# if HAVE_TM_ZONE - zone = tm->tm_zone; -# endif - -# if HAVE_TZNAME - if (! (zone && *zone) && 0 <= tm->tm_isdst) - { - tzname_index = tm->tm_isdst != 0; - zone = tzname[tzname_index]; - } -# endif - - /* No need to replace null zones, or zones within the struct tm. */ - if (!zone || ((char *) tm <= zone && zone < (char *) (tm + 1))) - return true; - - if (*zone) - { - zone_copy = tz->abbrs; - - while (strcmp (zone_copy, zone) != 0) - { - if (! (*zone_copy || (zone_copy == tz->abbrs && tz->tz_is_set))) - { - size_t zone_size = strlen (zone) + 1; - if (zone_size < tz->abbrs + ABBR_SIZE_MIN - zone_copy) - extend_abbrs (zone_copy, zone, zone_size); - else - { - tz = tz->next = tzalloc (zone); - if (!tz) - return false; - tz->tz_is_set = 0; - zone_copy = tz->abbrs; - } - break; - } - - zone_copy += strlen (zone_copy) + 1; - if (!*zone_copy && tz->next) - { - tz = tz->next; - zone_copy = tz->abbrs; - } - } - } - - /* Replace the zone name so that its lifetime matches that of TZ. */ -# if HAVE_TM_ZONE - tm->tm_zone = zone_copy; -# else - if (0 <= tzname_index) - tz->tzname_copy[tzname_index] = zone_copy; -# endif -#endif - - return true; -} - -/* Free a time zone. */ -void -tzfree (timezone_t tz) -{ - if (tz != local_tz) - while (tz) - { - timezone_t next = tz->next; - free (tz); - tz = next; - } -} - -/* Get and set the TZ environment variable. These functions can be - overridden by programs like Emacs that manage their own environment. */ - -#ifndef getenv_TZ -static char * -getenv_TZ (void) -{ - return getenv ("TZ"); -} -#endif - -#ifndef setenv_TZ -static int -setenv_TZ (char const *tz) -{ - return tz ? setenv ("TZ", tz, 1) : unsetenv ("TZ"); -} -#endif - -/* Change the environment to match the specified timezone_t value. - Return true if successful, false (setting errno) otherwise. */ -static bool -change_env (timezone_t tz) -{ - if (setenv_TZ (tz->tz_is_set ? tz->abbrs : NULL) != 0) - return false; - tzset (); - return true; -} - -/* Temporarily set the time zone to TZ, which must not be null. - Return LOCAL_TZ if the time zone setting is already correct. - Otherwise return a newly allocated time zone representing the old - setting, or NULL (setting errno) on failure. */ -static timezone_t -set_tz (timezone_t tz) -{ - char *env_tz = getenv_TZ (); - if (env_tz - ? tz->tz_is_set && strcmp (tz->abbrs, env_tz) == 0 - : !tz->tz_is_set) - return local_tz; - else - { - timezone_t old_tz = tzalloc (env_tz); - if (!old_tz) - return old_tz; - if (! change_env (tz)) - { - int saved_errno = errno; - tzfree (old_tz); - errno = saved_errno; - return NULL; - } - return old_tz; - } -} - -/* Restore an old setting returned by set_tz. It must not be null. - Return true (preserving errno) if successful, false (setting errno) - otherwise. */ -static bool -revert_tz (timezone_t tz) -{ - if (tz == local_tz) - return true; - else - { - int saved_errno = errno; - bool ok = change_env (tz); - if (!ok) - saved_errno = errno; - tzfree (tz); - errno = saved_errno; - return ok; - } -} - -/* Use time zone TZ to compute localtime_r (T, TM). */ -struct tm * -localtime_rz (timezone_t tz, time_t const *t, struct tm *tm) -{ - if (!tz) - return gmtime_r (t, tm); - else - { - timezone_t old_tz = set_tz (tz); - if (old_tz) - { - bool abbr_saved = localtime_r (t, tm) && save_abbr (tz, tm); - if (revert_tz (old_tz) && abbr_saved) - return tm; - } - return NULL; - } -} - -/* Use time zone TZ to compute mktime (TM). */ -time_t -mktime_z (timezone_t tz, struct tm *tm) -{ - if (!tz) - return timegm (tm); - else - { - timezone_t old_tz = set_tz (tz); - if (old_tz) - { - time_t t = mktime (tm); -#if HAVE_TM_ZONE || HAVE_TZNAME - time_t badtime = -1; - struct tm tm_1; - if ((t != badtime - || (localtime_r (&t, &tm_1) && equal_tm (tm, &tm_1))) - && !save_abbr (tz, tm)) - t = badtime; -#endif - if (revert_tz (old_tz)) - return t; - } - return -1; - } -} diff --git a/src/gl/timegm.c b/src/gl/timegm.c deleted file mode 100644 index bf61244acd..0000000000 --- a/src/gl/timegm.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Convert UTC calendar time to simple time. Like mktime but assumes UTC. - - Copyright (C) 1994, 1997, 2003-2004, 2006-2007, 2009-2016 Free Software - Foundation, Inc. This file is part of the GNU C Library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _LIBC -# include -#endif - -#include - -#ifdef _LIBC -typedef time_t mktime_offset_t; -#else -# undef __gmtime_r -# define __gmtime_r gmtime_r -# define __mktime_internal mktime_internal -# include "mktime-internal.h" -#endif - -time_t -timegm (struct tm *tmp) -{ - static mktime_offset_t gmtime_offset; - tmp->tm_isdst = 0; - return __mktime_internal (tmp, __gmtime_r, &gmtime_offset); -} diff --git a/src/gl/timespec.c b/src/gl/timespec.c deleted file mode 100644 index 2b6098ed7b..0000000000 --- a/src/gl/timespec.c +++ /dev/null @@ -1,3 +0,0 @@ -#include -#define _GL_TIMESPEC_INLINE _GL_EXTERN_INLINE -#include "timespec.h" diff --git a/src/gl/timespec.h b/src/gl/timespec.h deleted file mode 100644 index 601394b888..0000000000 --- a/src/gl/timespec.h +++ /dev/null @@ -1,112 +0,0 @@ -/* timespec -- System time interface - - Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2016 Free Software - Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#if ! defined TIMESPEC_H -# define TIMESPEC_H - -# include - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif -_GL_INLINE_HEADER_BEGIN -#ifndef _GL_TIMESPEC_INLINE -# define _GL_TIMESPEC_INLINE _GL_INLINE -#endif - -/* Resolution of timespec time stamps (in units per second), and log - base 10 of the resolution. */ - -enum { TIMESPEC_RESOLUTION = 1000000000 }; -enum { LOG10_TIMESPEC_RESOLUTION = 9 }; - -/* Return a timespec with seconds S and nanoseconds NS. */ - -_GL_TIMESPEC_INLINE struct timespec -make_timespec (time_t s, long int ns) -{ - struct timespec r; - r.tv_sec = s; - r.tv_nsec = ns; - return r; -} - -/* Return negative, zero, positive if A < B, A == B, A > B, respectively. - - For each time stamp T, this code assumes that either: - - * T.tv_nsec is in the range 0..999999999; or - * T.tv_sec corresponds to a valid leap second on a host that supports - leap seconds, and T.tv_nsec is in the range 1000000000..1999999999; or - * T.tv_sec is the minimum time_t value and T.tv_nsec is -1; or - T.tv_sec is the maximum time_t value and T.tv_nsec is 2000000000. - This allows for special struct timespec values that are less or - greater than all possible valid time stamps. - - In all these cases, it is safe to subtract two tv_nsec values and - convert the result to integer without worrying about overflow on - any platform of interest to the GNU project, since all such - platforms have 32-bit int or wider. - - Replacing "(int) (a.tv_nsec - b.tv_nsec)" with something like - "a.tv_nsec < b.tv_nsec ? -1 : a.tv_nsec > b.tv_nsec" would cause - this function to work in some cases where the above assumption is - violated, but not in all cases (e.g., a.tv_sec==1, a.tv_nsec==-2, - b.tv_sec==0, b.tv_nsec==999999999) and is arguably not worth the - extra instructions. Using a subtraction has the advantage of - detecting some invalid cases on platforms that detect integer - overflow. - - The (int) cast avoids a gcc -Wconversion warning. */ - -_GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE -timespec_cmp (struct timespec a, struct timespec b) -{ - return (a.tv_sec < b.tv_sec ? -1 - : a.tv_sec > b.tv_sec ? 1 - : (int) (a.tv_nsec - b.tv_nsec)); -} - -/* Return -1, 0, 1, depending on the sign of A. A.tv_nsec must be - nonnegative. */ -_GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE -timespec_sign (struct timespec a) -{ - return a.tv_sec < 0 ? -1 : a.tv_sec || a.tv_nsec; -} - -struct timespec timespec_add (struct timespec, struct timespec) - _GL_ATTRIBUTE_CONST; -struct timespec timespec_sub (struct timespec, struct timespec) - _GL_ATTRIBUTE_CONST; -struct timespec dtotimespec (double) - _GL_ATTRIBUTE_CONST; - -/* Return an approximation to A, of type 'double'. */ -_GL_TIMESPEC_INLINE double -timespectod (struct timespec a) -{ - return a.tv_sec + a.tv_nsec / 1e9; -} - -void gettime (struct timespec *); -int settime (struct timespec const *); - -_GL_INLINE_HEADER_END - -#endif diff --git a/src/gl/unistd.c b/src/gl/unistd.c deleted file mode 100644 index 72bad1c052..0000000000 --- a/src/gl/unistd.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -#define _GL_UNISTD_INLINE _GL_EXTERN_INLINE -#include "unistd.h" -typedef int dummy; diff --git a/src/gl/unistd.in.h b/src/gl/unistd.in.h deleted file mode 100644 index c3af07ad21..0000000000 --- a/src/gl/unistd.in.h +++ /dev/null @@ -1,1586 +0,0 @@ -/* Substitute for and wrapper around . - Copyright (C) 2003-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _@GUARD_PREFIX@_UNISTD_H - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#ifdef _GL_INCLUDING_UNISTD_H -/* Special invocation convention: - - On Mac OS X 10.3.9 we have a sequence of nested includes - -> -> -> - In this situation, the functions are not yet declared, therefore we cannot - provide the C++ aliases. */ - -#@INCLUDE_NEXT@ @NEXT_UNISTD_H@ - -#else -/* Normal invocation convention. */ - -/* The include_next requires a split double-inclusion guard. */ -#if @HAVE_UNISTD_H@ -# define _GL_INCLUDING_UNISTD_H -# @INCLUDE_NEXT@ @NEXT_UNISTD_H@ -# undef _GL_INCLUDING_UNISTD_H -#endif - -/* Get all possible declarations of gethostname(). */ -#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ - && !defined _GL_INCLUDING_WINSOCK2_H -# define _GL_INCLUDING_WINSOCK2_H -# include -# undef _GL_INCLUDING_WINSOCK2_H -#endif - -#if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H -#define _@GUARD_PREFIX@_UNISTD_H - -/* NetBSD 5.0 mis-defines NULL. Also get size_t. */ -#include - -/* mingw doesn't define the SEEK_* or *_FILENO macros in . */ -/* Cygwin 1.7.1 declares symlinkat in , not in . */ -/* But avoid namespace pollution on glibc systems. */ -#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ - || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ - && defined __CYGWIN__)) \ - && ! defined __GLIBC__ -# include -#endif - -/* Cygwin 1.7.1 declares unlinkat in , not in . */ -/* But avoid namespace pollution on glibc systems. */ -#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \ - && ! defined __GLIBC__ -# include -#endif - -/* mingw fails to declare _exit in . */ -/* mingw, MSVC, BeOS, Haiku declare environ in , not in - . */ -/* Solaris declares getcwd not only in but also in . */ -/* OSF Tru64 Unix cannot see gnulib rpl_strtod when system is - included here. */ -/* But avoid namespace pollution on glibc systems. */ -#if !defined __GLIBC__ && !defined __osf__ -# define __need_system_stdlib_h -# include -# undef __need_system_stdlib_h -#endif - -/* Native Windows platforms declare chdir, getcwd, rmdir in - and/or , not in . - They also declare access(), chmod(), close(), dup(), dup2(), isatty(), - lseek(), read(), unlink(), write() in . */ -#if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ - || defined GNULIB_POSIXCHECK) \ - && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) -# include /* mingw32, mingw64 */ -# include /* mingw64, MSVC 9 */ -#elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \ - || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \ - || defined GNULIB_POSIXCHECK) \ - && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) -# include -#endif - -/* AIX and OSF/1 5.1 declare getdomainname in , not in . - NonStop Kernel declares gethostname in , not in . */ -/* But avoid namespace pollution on glibc systems. */ -#if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ - || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ - && !defined __GLIBC__ -# include -#endif - -/* MSVC defines off_t in . - May also define off_t to a 64-bit type on native Windows. */ -#if !@HAVE_UNISTD_H@ || @WINDOWS_64_BIT_OFF_T@ -/* Get off_t. */ -# include -#endif - -#if (@GNULIB_READ@ || @GNULIB_WRITE@ \ - || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ - || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK) -/* Get ssize_t. */ -# include -#endif - -/* Get getopt(), optarg, optind, opterr, optopt. - But avoid namespace pollution on glibc systems. */ -#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT -# define __need_getopt -# include -#endif - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif -_GL_INLINE_HEADER_BEGIN -#ifndef _GL_UNISTD_INLINE -# define _GL_UNISTD_INLINE _GL_INLINE -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - -/* Hide some function declarations from . */ - -#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ -# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef socket -# define socket socket_used_without_including_sys_socket_h -# undef connect -# define connect connect_used_without_including_sys_socket_h -# undef accept -# define accept accept_used_without_including_sys_socket_h -# undef bind -# define bind bind_used_without_including_sys_socket_h -# undef getpeername -# define getpeername getpeername_used_without_including_sys_socket_h -# undef getsockname -# define getsockname getsockname_used_without_including_sys_socket_h -# undef getsockopt -# define getsockopt getsockopt_used_without_including_sys_socket_h -# undef listen -# define listen listen_used_without_including_sys_socket_h -# undef recv -# define recv recv_used_without_including_sys_socket_h -# undef send -# define send send_used_without_including_sys_socket_h -# undef recvfrom -# define recvfrom recvfrom_used_without_including_sys_socket_h -# undef sendto -# define sendto sendto_used_without_including_sys_socket_h -# undef setsockopt -# define setsockopt setsockopt_used_without_including_sys_socket_h -# undef shutdown -# define shutdown shutdown_used_without_including_sys_socket_h -# else - _GL_WARN_ON_USE (socket, - "socket() used without including "); - _GL_WARN_ON_USE (connect, - "connect() used without including "); - _GL_WARN_ON_USE (accept, - "accept() used without including "); - _GL_WARN_ON_USE (bind, - "bind() used without including "); - _GL_WARN_ON_USE (getpeername, - "getpeername() used without including "); - _GL_WARN_ON_USE (getsockname, - "getsockname() used without including "); - _GL_WARN_ON_USE (getsockopt, - "getsockopt() used without including "); - _GL_WARN_ON_USE (listen, - "listen() used without including "); - _GL_WARN_ON_USE (recv, - "recv() used without including "); - _GL_WARN_ON_USE (send, - "send() used without including "); - _GL_WARN_ON_USE (recvfrom, - "recvfrom() used without including "); - _GL_WARN_ON_USE (sendto, - "sendto() used without including "); - _GL_WARN_ON_USE (setsockopt, - "setsockopt() used without including "); - _GL_WARN_ON_USE (shutdown, - "shutdown() used without including "); -# endif -# endif -# if !defined _@GUARD_PREFIX@_SYS_SELECT_H -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef select -# define select select_used_without_including_sys_select_h -# else - _GL_WARN_ON_USE (select, - "select() used without including "); -# endif -# endif -#endif - - -/* OS/2 EMX lacks these macros. */ -#ifndef STDIN_FILENO -# define STDIN_FILENO 0 -#endif -#ifndef STDOUT_FILENO -# define STDOUT_FILENO 1 -#endif -#ifndef STDERR_FILENO -# define STDERR_FILENO 2 -#endif - -/* Ensure *_OK macros exist. */ -#ifndef F_OK -# define F_OK 0 -# define X_OK 1 -# define W_OK 2 -# define R_OK 4 -#endif - - -/* Declare overridden functions. */ - - -#if defined GNULIB_POSIXCHECK -/* The access() function is a security risk. */ -_GL_WARN_ON_USE (access, "the access function is a security risk - " - "use the gnulib module faccessat instead"); -#endif - - -#if @GNULIB_CHDIR@ -_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); -_GL_CXXALIASWARN (chdir); -#elif defined GNULIB_POSIXCHECK -# undef chdir -# if HAVE_RAW_DECL_CHDIR -_GL_WARN_ON_USE (chown, "chdir is not always in - " - "use gnulib module chdir for portability"); -# endif -#endif - - -#if @GNULIB_CHOWN@ -/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE - to GID (if GID is not -1). Follow symbolic links. - Return 0 if successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if @REPLACE_DUP2@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define dup2 rpl_dup2 -# endif -_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); -_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); -# else -# if !@HAVE_DUP2@ -_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd)); -# endif -_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); -# endif -_GL_CXXALIASWARN (dup2); -#elif defined GNULIB_POSIXCHECK -# undef dup2 -# if HAVE_RAW_DECL_DUP2 -_GL_WARN_ON_USE (dup2, "dup2 is unportable - " - "use gnulib module dup2 for portability"); -# endif -#endif - - -#if @GNULIB_DUP3@ -/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the - specified flags. - The flags are a bitmask, possibly including O_CLOEXEC (defined in ) - and O_TEXT, O_BINARY (defined in "binary-io.h"). - Close NEWFD first if it is open. - Return newfd if successful, otherwise -1 and errno set. - See the Linux man page at - . */ -# if @HAVE_DUP3@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define dup3 rpl_dup3 -# endif -_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); -_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); -# else -_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); -_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); -# endif -_GL_CXXALIASWARN (dup3); -#elif defined GNULIB_POSIXCHECK -# undef dup3 -# if HAVE_RAW_DECL_DUP3 -_GL_WARN_ON_USE (dup3, "dup3 is unportable - " - "use gnulib module dup3 for portability"); -# endif -#endif - - -#if @GNULIB_ENVIRON@ -# if !@HAVE_DECL_ENVIRON@ -/* Set of environment variables and values. An array of strings of the form - "VARIABLE=VALUE", terminated with a NULL. */ -# if defined __APPLE__ && defined __MACH__ -# include -# if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR -# define _GL_USE_CRT_EXTERNS -# endif -# endif -# ifdef _GL_USE_CRT_EXTERNS -# include -# define environ (*_NSGetEnviron ()) -# else -# ifdef __cplusplus -extern "C" { -# endif -extern char **environ; -# ifdef __cplusplus -} -# endif -# endif -# endif -#elif defined GNULIB_POSIXCHECK -# if HAVE_RAW_DECL_ENVIRON -_GL_UNISTD_INLINE char *** -rpl_environ (void) -{ - return &environ; -} -_GL_WARN_ON_USE (rpl_environ, "environ is unportable - " - "use gnulib module environ for portability"); -# undef environ -# define environ (*rpl_environ ()) -# endif -#endif - - -#if @GNULIB_EUIDACCESS@ -/* Like access(), except that it uses the effective user id and group id of - the current process. */ -# if !@HAVE_EUIDACCESS@ -_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); -_GL_CXXALIASWARN (euidaccess); -# if defined GNULIB_POSIXCHECK -/* Like access(), this function is a security risk. */ -_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " - "use the gnulib module faccessat instead"); -# endif -#elif defined GNULIB_POSIXCHECK -# undef euidaccess -# if HAVE_RAW_DECL_EUIDACCESS -_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " - "use gnulib module euidaccess for portability"); -# endif -#endif - - -#if @GNULIB_FACCESSAT@ -# if !@HAVE_FACCESSAT@ -_GL_FUNCDECL_SYS (faccessat, int, - (int fd, char const *file, int mode, int flag) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (faccessat, int, - (int fd, char const *file, int mode, int flag)); -_GL_CXXALIASWARN (faccessat); -#elif defined GNULIB_POSIXCHECK -# undef faccessat -# if HAVE_RAW_DECL_FACCESSAT -_GL_WARN_ON_USE (faccessat, "faccessat is not portable - " - "use gnulib module faccessat for portability"); -# endif -#endif - - -#if @GNULIB_FCHDIR@ -/* Change the process' current working directory to the directory on which - the given file descriptor is open. - Return 0 if successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if ! @HAVE_FCHDIR@ -_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); - -/* Gnulib internal hooks needed to maintain the fchdir metadata. */ -_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) - _GL_ARG_NONNULL ((2)); -_GL_EXTERN_C void _gl_unregister_fd (int fd); -_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); -_GL_EXTERN_C const char *_gl_directory_name (int fd); - -# else -# if !@HAVE_DECL_FCHDIR@ -_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); -# endif -# endif -_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); -_GL_CXXALIASWARN (fchdir); -#elif defined GNULIB_POSIXCHECK -# undef fchdir -# if HAVE_RAW_DECL_FCHDIR -_GL_WARN_ON_USE (fchdir, "fchdir is unportable - " - "use gnulib module fchdir for portability"); -# endif -#endif - - -#if @GNULIB_FCHOWNAT@ -# if @REPLACE_FCHOWNAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef fchownat -# define fchownat rpl_fchownat -# endif -_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, - uid_t owner, gid_t group, int flag) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, - uid_t owner, gid_t group, int flag)); -# else -# if !@HAVE_FCHOWNAT@ -_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, - uid_t owner, gid_t group, int flag) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, - uid_t owner, gid_t group, int flag)); -# endif -_GL_CXXALIASWARN (fchownat); -#elif defined GNULIB_POSIXCHECK -# undef fchownat -# if HAVE_RAW_DECL_FCHOWNAT -_GL_WARN_ON_USE (fchownat, "fchownat is not portable - " - "use gnulib module openat for portability"); -# endif -#endif - - -#if @GNULIB_FDATASYNC@ -/* Synchronize changes to a file. - Return 0 if successful, otherwise -1 and errno set. - See POSIX:2008 specification - . */ -# if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ -_GL_FUNCDECL_SYS (fdatasync, int, (int fd)); -# endif -_GL_CXXALIAS_SYS (fdatasync, int, (int fd)); -_GL_CXXALIASWARN (fdatasync); -#elif defined GNULIB_POSIXCHECK -# undef fdatasync -# if HAVE_RAW_DECL_FDATASYNC -_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " - "use gnulib module fdatasync for portability"); -# endif -#endif - - -#if @GNULIB_FSYNC@ -/* Synchronize changes, including metadata, to a file. - Return 0 if successful, otherwise -1 and errno set. - See POSIX:2008 specification - . */ -# if !@HAVE_FSYNC@ -_GL_FUNCDECL_SYS (fsync, int, (int fd)); -# endif -_GL_CXXALIAS_SYS (fsync, int, (int fd)); -_GL_CXXALIASWARN (fsync); -#elif defined GNULIB_POSIXCHECK -# undef fsync -# if HAVE_RAW_DECL_FSYNC -_GL_WARN_ON_USE (fsync, "fsync is unportable - " - "use gnulib module fsync for portability"); -# endif -#endif - - -#if @GNULIB_FTRUNCATE@ -/* Change the size of the file to which FD is opened to become equal to LENGTH. - Return 0 if successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if @REPLACE_FTRUNCATE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ftruncate -# define ftruncate rpl_ftruncate -# endif -_GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); -_GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); -# else -# if !@HAVE_FTRUNCATE@ -_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); -# endif -_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); -# endif -_GL_CXXALIASWARN (ftruncate); -#elif defined GNULIB_POSIXCHECK -# undef ftruncate -# if HAVE_RAW_DECL_FTRUNCATE -_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " - "use gnulib module ftruncate for portability"); -# endif -#endif - - -#if @GNULIB_GETCWD@ -/* Get the name of the current working directory, and put it in SIZE bytes - of BUF. - Return BUF if successful, or NULL if the directory couldn't be determined - or SIZE was too small. - See the POSIX:2008 specification - . - Additionally, the gnulib module 'getcwd' guarantees the following GNU - extension: If BUF is NULL, an array is allocated with 'malloc'; the array - is SIZE bytes long, unless SIZE == 0, in which case it is as big as - necessary. */ -# if @REPLACE_GETCWD@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define getcwd rpl_getcwd -# endif -_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); -_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); -# else -/* Need to cast, because on mingw, the second parameter is - int size. */ -_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); -# endif -_GL_CXXALIASWARN (getcwd); -#elif defined GNULIB_POSIXCHECK -# undef getcwd -# if HAVE_RAW_DECL_GETCWD -_GL_WARN_ON_USE (getcwd, "getcwd is unportable - " - "use gnulib module getcwd for portability"); -# endif -#endif - - -#if @GNULIB_GETDOMAINNAME@ -/* Return the NIS domain name of the machine. - WARNING! The NIS domain name is unrelated to the fully qualified host name - of the machine. It is also unrelated to email addresses. - WARNING! The NIS domain name is usually the empty string or "(none)" when - not using NIS. - - Put up to LEN bytes of the NIS domain name into NAME. - Null terminate it if the name is shorter than LEN. - If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. - Return 0 if successful, otherwise set errno and return -1. */ -# if @REPLACE_GETDOMAINNAME@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getdomainname -# define getdomainname rpl_getdomainname -# endif -_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); -# else -# if !@HAVE_DECL_GETDOMAINNAME@ -_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); -# endif -_GL_CXXALIASWARN (getdomainname); -#elif defined GNULIB_POSIXCHECK -# undef getdomainname -# if HAVE_RAW_DECL_GETDOMAINNAME -_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " - "use gnulib module getdomainname for portability"); -# endif -#endif - - -#if @GNULIB_GETDTABLESIZE@ -/* Return the maximum number of file descriptors in the current process. - In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ -# if @REPLACE_GETDTABLESIZE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getdtablesize -# define getdtablesize rpl_getdtablesize -# endif -_GL_FUNCDECL_RPL (getdtablesize, int, (void)); -_GL_CXXALIAS_RPL (getdtablesize, int, (void)); -# else -# if !@HAVE_GETDTABLESIZE@ -_GL_FUNCDECL_SYS (getdtablesize, int, (void)); -# endif -_GL_CXXALIAS_SYS (getdtablesize, int, (void)); -# endif -_GL_CXXALIASWARN (getdtablesize); -#elif defined GNULIB_POSIXCHECK -# undef getdtablesize -# if HAVE_RAW_DECL_GETDTABLESIZE -_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " - "use gnulib module getdtablesize for portability"); -# endif -#endif - - -#if @GNULIB_GETGROUPS@ -/* Return the supplemental groups that the current process belongs to. - It is unspecified whether the effective group id is in the list. - If N is 0, return the group count; otherwise, N describes how many - entries are available in GROUPS. Return -1 and set errno if N is - not 0 and not large enough. Fails with ENOSYS on some systems. */ -# if @REPLACE_GETGROUPS@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef getgroups -# define getgroups rpl_getgroups -# endif -_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); -_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); -# else -# if !@HAVE_GETGROUPS@ -_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); -# endif -_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); -# endif -_GL_CXXALIASWARN (getgroups); -#elif defined GNULIB_POSIXCHECK -# undef getgroups -# if HAVE_RAW_DECL_GETGROUPS -_GL_WARN_ON_USE (getgroups, "getgroups is unportable - " - "use gnulib module getgroups for portability"); -# endif -#endif - - -#if @GNULIB_GETHOSTNAME@ -/* Return the standard host name of the machine. - WARNING! The host name may or may not be fully qualified. - - Put up to LEN bytes of the host name into NAME. - Null terminate it if the name is shorter than LEN. - If the host name is longer than LEN, set errno = EINVAL and return -1. - Return 0 if successful, otherwise set errno and return -1. */ -# if @UNISTD_H_HAVE_WINSOCK2_H@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef gethostname -# define gethostname rpl_gethostname -# endif -_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); -# else -# if !@HAVE_GETHOSTNAME@ -_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second - parameter is - int len. */ -_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); -# endif -_GL_CXXALIASWARN (gethostname); -#elif @UNISTD_H_HAVE_WINSOCK2_H@ -# undef gethostname -# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname -#elif defined GNULIB_POSIXCHECK -# undef gethostname -# if HAVE_RAW_DECL_GETHOSTNAME -_GL_WARN_ON_USE (gethostname, "gethostname is unportable - " - "use gnulib module gethostname for portability"); -# endif -#endif - - -#if @GNULIB_GETLOGIN@ -/* Returns the user's login name, or NULL if it cannot be found. Upon error, - returns NULL with errno set. - - See . - - Most programs don't need to use this function, because the information is - available through environment variables: - ${LOGNAME-$USER} on Unix platforms, - $USERNAME on native Windows platforms. - */ -# if !@HAVE_GETLOGIN@ -_GL_FUNCDECL_SYS (getlogin, char *, (void)); -# endif -_GL_CXXALIAS_SYS (getlogin, char *, (void)); -_GL_CXXALIASWARN (getlogin); -#elif defined GNULIB_POSIXCHECK -# undef getlogin -# if HAVE_RAW_DECL_GETLOGIN -_GL_WARN_ON_USE (getlogin, "getlogin is unportable - " - "use gnulib module getlogin for portability"); -# endif -#endif - - -#if @GNULIB_GETLOGIN_R@ -/* Copies the user's login name to NAME. - The array pointed to by NAME has room for SIZE bytes. - - Returns 0 if successful. Upon error, an error number is returned, or -1 in - the case that the login name cannot be found but no specific error is - provided (this case is hopefully rare but is left open by the POSIX spec). - - See . - - Most programs don't need to use this function, because the information is - available through environment variables: - ${LOGNAME-$USER} on Unix platforms, - $USERNAME on native Windows platforms. - */ -# if @REPLACE_GETLOGIN_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define getlogin_r rpl_getlogin_r -# endif -_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); -# else -# if !@HAVE_DECL_GETLOGIN_R@ -_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on Solaris 10 systems, the second argument is - int size. */ -_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); -# endif -_GL_CXXALIASWARN (getlogin_r); -#elif defined GNULIB_POSIXCHECK -# undef getlogin_r -# if HAVE_RAW_DECL_GETLOGIN_R -_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " - "use gnulib module getlogin_r for portability"); -# endif -#endif - - -#if @GNULIB_GETPAGESIZE@ -# if @REPLACE_GETPAGESIZE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define getpagesize rpl_getpagesize -# endif -_GL_FUNCDECL_RPL (getpagesize, int, (void)); -_GL_CXXALIAS_RPL (getpagesize, int, (void)); -# else -# if !@HAVE_GETPAGESIZE@ -# if !defined getpagesize -/* This is for POSIX systems. */ -# if !defined _gl_getpagesize && defined _SC_PAGESIZE -# if ! (defined __VMS && __VMS_VER < 70000000) -# define _gl_getpagesize() sysconf (_SC_PAGESIZE) -# endif -# endif -/* This is for older VMS. */ -# if !defined _gl_getpagesize && defined __VMS -# ifdef __ALPHA -# define _gl_getpagesize() 8192 -# else -# define _gl_getpagesize() 512 -# endif -# endif -/* This is for BeOS. */ -# if !defined _gl_getpagesize && @HAVE_OS_H@ -# include -# if defined B_PAGE_SIZE -# define _gl_getpagesize() B_PAGE_SIZE -# endif -# endif -/* This is for AmigaOS4.0. */ -# if !defined _gl_getpagesize && defined __amigaos4__ -# define _gl_getpagesize() 2048 -# endif -/* This is for older Unix systems. */ -# if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ -# include -# ifdef EXEC_PAGESIZE -# define _gl_getpagesize() EXEC_PAGESIZE -# else -# ifdef NBPG -# ifndef CLSIZE -# define CLSIZE 1 -# endif -# define _gl_getpagesize() (NBPG * CLSIZE) -# else -# ifdef NBPC -# define _gl_getpagesize() NBPC -# endif -# endif -# endif -# endif -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define getpagesize() _gl_getpagesize () -# else -# if !GNULIB_defined_getpagesize_function -_GL_UNISTD_INLINE int -getpagesize () -{ - return _gl_getpagesize (); -} -# define GNULIB_defined_getpagesize_function 1 -# endif -# endif -# endif -# endif -/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ -_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); -# endif -# if @HAVE_DECL_GETPAGESIZE@ -_GL_CXXALIASWARN (getpagesize); -# endif -#elif defined GNULIB_POSIXCHECK -# undef getpagesize -# if HAVE_RAW_DECL_GETPAGESIZE -_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " - "use gnulib module getpagesize for portability"); -# endif -#endif - - -#if @GNULIB_GETUSERSHELL@ -/* Return the next valid login shell on the system, or NULL when the end of - the list has been reached. */ -# if !@HAVE_DECL_GETUSERSHELL@ -_GL_FUNCDECL_SYS (getusershell, char *, (void)); -# endif -_GL_CXXALIAS_SYS (getusershell, char *, (void)); -_GL_CXXALIASWARN (getusershell); -#elif defined GNULIB_POSIXCHECK -# undef getusershell -# if HAVE_RAW_DECL_GETUSERSHELL -_GL_WARN_ON_USE (getusershell, "getusershell is unportable - " - "use gnulib module getusershell for portability"); -# endif -#endif - -#if @GNULIB_GETUSERSHELL@ -/* Rewind to pointer that is advanced at each getusershell() call. */ -# if !@HAVE_DECL_GETUSERSHELL@ -_GL_FUNCDECL_SYS (setusershell, void, (void)); -# endif -_GL_CXXALIAS_SYS (setusershell, void, (void)); -_GL_CXXALIASWARN (setusershell); -#elif defined GNULIB_POSIXCHECK -# undef setusershell -# if HAVE_RAW_DECL_SETUSERSHELL -_GL_WARN_ON_USE (setusershell, "setusershell is unportable - " - "use gnulib module getusershell for portability"); -# endif -#endif - -#if @GNULIB_GETUSERSHELL@ -/* Free the pointer that is advanced at each getusershell() call and - associated resources. */ -# if !@HAVE_DECL_GETUSERSHELL@ -_GL_FUNCDECL_SYS (endusershell, void, (void)); -# endif -_GL_CXXALIAS_SYS (endusershell, void, (void)); -_GL_CXXALIASWARN (endusershell); -#elif defined GNULIB_POSIXCHECK -# undef endusershell -# if HAVE_RAW_DECL_ENDUSERSHELL -_GL_WARN_ON_USE (endusershell, "endusershell is unportable - " - "use gnulib module getusershell for portability"); -# endif -#endif - - -#if @GNULIB_GROUP_MEMBER@ -/* Determine whether group id is in calling user's group list. */ -# if !@HAVE_GROUP_MEMBER@ -_GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); -# endif -_GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); -_GL_CXXALIASWARN (group_member); -#elif defined GNULIB_POSIXCHECK -# undef group_member -# if HAVE_RAW_DECL_GROUP_MEMBER -_GL_WARN_ON_USE (group_member, "group_member is unportable - " - "use gnulib module group-member for portability"); -# endif -#endif - - -#if @GNULIB_ISATTY@ -# if @REPLACE_ISATTY@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef isatty -# define isatty rpl_isatty -# endif -_GL_FUNCDECL_RPL (isatty, int, (int fd)); -_GL_CXXALIAS_RPL (isatty, int, (int fd)); -# else -_GL_CXXALIAS_SYS (isatty, int, (int fd)); -# endif -_GL_CXXALIASWARN (isatty); -#elif defined GNULIB_POSIXCHECK -# undef isatty -# if HAVE_RAW_DECL_ISATTY -_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " - "use gnulib module isatty for portability"); -# endif -#endif - - -#if @GNULIB_LCHOWN@ -/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE - to GID (if GID is not -1). Do not follow symbolic links. - Return 0 if successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if @REPLACE_LCHOWN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef lchown -# define lchown rpl_lchown -# endif -_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) - _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); -# else -# if !@HAVE_LCHOWN@ -_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) - _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); -# endif -_GL_CXXALIASWARN (lchown); -#elif defined GNULIB_POSIXCHECK -# undef lchown -# if HAVE_RAW_DECL_LCHOWN -_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " - "use gnulib module lchown for portability"); -# endif -#endif - - -#if @GNULIB_LINK@ -/* Create a new hard link for an existing file. - Return 0 if successful, otherwise -1 and errno set. - See POSIX:2008 specification - . */ -# if @REPLACE_LINK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define link rpl_link -# endif -_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); -# else -# if !@HAVE_LINK@ -_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); -# endif -_GL_CXXALIASWARN (link); -#elif defined GNULIB_POSIXCHECK -# undef link -# if HAVE_RAW_DECL_LINK -_GL_WARN_ON_USE (link, "link is unportable - " - "use gnulib module link for portability"); -# endif -#endif - - -#if @GNULIB_LINKAT@ -/* Create a new hard link for an existing file, relative to two - directories. FLAG controls whether symlinks are followed. - Return 0 if successful, otherwise -1 and errno set. */ -# if @REPLACE_LINKAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef linkat -# define linkat rpl_linkat -# endif -_GL_FUNCDECL_RPL (linkat, int, - (int fd1, const char *path1, int fd2, const char *path2, - int flag) - _GL_ARG_NONNULL ((2, 4))); -_GL_CXXALIAS_RPL (linkat, int, - (int fd1, const char *path1, int fd2, const char *path2, - int flag)); -# else -# if !@HAVE_LINKAT@ -_GL_FUNCDECL_SYS (linkat, int, - (int fd1, const char *path1, int fd2, const char *path2, - int flag) - _GL_ARG_NONNULL ((2, 4))); -# endif -_GL_CXXALIAS_SYS (linkat, int, - (int fd1, const char *path1, int fd2, const char *path2, - int flag)); -# endif -_GL_CXXALIASWARN (linkat); -#elif defined GNULIB_POSIXCHECK -# undef linkat -# if HAVE_RAW_DECL_LINKAT -_GL_WARN_ON_USE (linkat, "linkat is unportable - " - "use gnulib module linkat for portability"); -# endif -#endif - - -#if @GNULIB_LSEEK@ -/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. - Return the new offset if successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if @REPLACE_LSEEK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define lseek rpl_lseek -# endif -_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); -_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); -# else -_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); -# endif -_GL_CXXALIASWARN (lseek); -#elif defined GNULIB_POSIXCHECK -# undef lseek -# if HAVE_RAW_DECL_LSEEK -_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " - "systems - use gnulib module lseek for portability"); -# endif -#endif - - -#if @GNULIB_PIPE@ -/* Create a pipe, defaulting to O_BINARY mode. - Store the read-end as fd[0] and the write-end as fd[1]. - Return 0 upon success, or -1 with errno set upon failure. */ -# if !@HAVE_PIPE@ -_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); -# endif -_GL_CXXALIAS_SYS (pipe, int, (int fd[2])); -_GL_CXXALIASWARN (pipe); -#elif defined GNULIB_POSIXCHECK -# undef pipe -# if HAVE_RAW_DECL_PIPE -_GL_WARN_ON_USE (pipe, "pipe is unportable - " - "use gnulib module pipe-posix for portability"); -# endif -#endif - - -#if @GNULIB_PIPE2@ -/* Create a pipe, applying the given flags when opening the read-end of the - pipe and the write-end of the pipe. - The flags are a bitmask, possibly including O_CLOEXEC (defined in ) - and O_TEXT, O_BINARY (defined in "binary-io.h"). - Store the read-end as fd[0] and the write-end as fd[1]. - Return 0 upon success, or -1 with errno set upon failure. - See also the Linux man page at - . */ -# if @HAVE_PIPE2@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define pipe2 rpl_pipe2 -# endif -_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); -# else -_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); -# endif -_GL_CXXALIASWARN (pipe2); -#elif defined GNULIB_POSIXCHECK -# undef pipe2 -# if HAVE_RAW_DECL_PIPE2 -_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " - "use gnulib module pipe2 for portability"); -# endif -#endif - - -#if @GNULIB_PREAD@ -/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. - Return the number of bytes placed into BUF if successful, otherwise - set errno and return -1. 0 indicates EOF. - See the POSIX:2008 specification - . */ -# if @REPLACE_PREAD@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef pread -# define pread rpl_pread -# endif -_GL_FUNCDECL_RPL (pread, ssize_t, - (int fd, void *buf, size_t bufsize, off_t offset) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (pread, ssize_t, - (int fd, void *buf, size_t bufsize, off_t offset)); -# else -# if !@HAVE_PREAD@ -_GL_FUNCDECL_SYS (pread, ssize_t, - (int fd, void *buf, size_t bufsize, off_t offset) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (pread, ssize_t, - (int fd, void *buf, size_t bufsize, off_t offset)); -# endif -_GL_CXXALIASWARN (pread); -#elif defined GNULIB_POSIXCHECK -# undef pread -# if HAVE_RAW_DECL_PREAD -_GL_WARN_ON_USE (pread, "pread is unportable - " - "use gnulib module pread for portability"); -# endif -#endif - - -#if @GNULIB_PWRITE@ -/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. - Return the number of bytes written if successful, otherwise - set errno and return -1. 0 indicates nothing written. See the - POSIX:2008 specification - . */ -# if @REPLACE_PWRITE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef pwrite -# define pwrite rpl_pwrite -# endif -_GL_FUNCDECL_RPL (pwrite, ssize_t, - (int fd, const void *buf, size_t bufsize, off_t offset) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (pwrite, ssize_t, - (int fd, const void *buf, size_t bufsize, off_t offset)); -# else -# if !@HAVE_PWRITE@ -_GL_FUNCDECL_SYS (pwrite, ssize_t, - (int fd, const void *buf, size_t bufsize, off_t offset) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (pwrite, ssize_t, - (int fd, const void *buf, size_t bufsize, off_t offset)); -# endif -_GL_CXXALIASWARN (pwrite); -#elif defined GNULIB_POSIXCHECK -# undef pwrite -# if HAVE_RAW_DECL_PWRITE -_GL_WARN_ON_USE (pwrite, "pwrite is unportable - " - "use gnulib module pwrite for portability"); -# endif -#endif - - -#if @GNULIB_READ@ -/* Read up to COUNT bytes from file descriptor FD into the buffer starting - at BUF. See the POSIX:2008 specification - . */ -# if @REPLACE_READ@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef read -# define read rpl_read -# endif -_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); -# else -/* Need to cast, because on mingw, the third parameter is - unsigned int count - and the return type is 'int'. */ -_GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count)); -# endif -_GL_CXXALIASWARN (read); -#endif - - -#if @GNULIB_READLINK@ -/* Read the contents of the symbolic link FILE and place the first BUFSIZE - bytes of it into BUF. Return the number of bytes placed into BUF if - successful, otherwise -1 and errno set. - See the POSIX:2008 specification - . */ -# if @REPLACE_READLINK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define readlink rpl_readlink -# endif -_GL_FUNCDECL_RPL (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize)); -# else -# if !@HAVE_READLINK@ -_GL_FUNCDECL_SYS (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (readlink, ssize_t, - (const char *file, char *buf, size_t bufsize)); -# endif -_GL_CXXALIASWARN (readlink); -#elif defined GNULIB_POSIXCHECK -# undef readlink -# if HAVE_RAW_DECL_READLINK -_GL_WARN_ON_USE (readlink, "readlink is unportable - " - "use gnulib module readlink for portability"); -# endif -#endif - - -#if @GNULIB_READLINKAT@ -# if @REPLACE_READLINKAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define readlinkat rpl_readlinkat -# endif -_GL_FUNCDECL_RPL (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len) - _GL_ARG_NONNULL ((2, 3))); -_GL_CXXALIAS_RPL (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len)); -# else -# if !@HAVE_READLINKAT@ -_GL_FUNCDECL_SYS (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len) - _GL_ARG_NONNULL ((2, 3))); -# endif -_GL_CXXALIAS_SYS (readlinkat, ssize_t, - (int fd, char const *file, char *buf, size_t len)); -# endif -_GL_CXXALIASWARN (readlinkat); -#elif defined GNULIB_POSIXCHECK -# undef readlinkat -# if HAVE_RAW_DECL_READLINKAT -_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " - "use gnulib module readlinkat for portability"); -# endif -#endif - - -#if @GNULIB_RMDIR@ -/* Remove the directory DIR. */ -# if @REPLACE_RMDIR@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# define rmdir rpl_rmdir -# endif -_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (rmdir, int, (char const *name)); -# else -_GL_CXXALIAS_SYS (rmdir, int, (char const *name)); -# endif -_GL_CXXALIASWARN (rmdir); -#elif defined GNULIB_POSIXCHECK -# undef rmdir -# if HAVE_RAW_DECL_RMDIR -_GL_WARN_ON_USE (rmdir, "rmdir is unportable - " - "use gnulib module rmdir for portability"); -# endif -#endif - - -#if @GNULIB_SETHOSTNAME@ -/* Set the host name of the machine. - The host name may or may not be fully qualified. - - Put LEN bytes of NAME into the host name. - Return 0 if successful, otherwise, set errno and return -1. - - Platforms with no ability to set the hostname return -1 and set - errno = ENOSYS. */ -# if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ -_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) - _GL_ARG_NONNULL ((1))); -# endif -/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 - and FreeBSD 6.4 the second parameter is int. On Solaris 11 - 2011-10, the first parameter is not const. */ -_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); -_GL_CXXALIASWARN (sethostname); -#elif defined GNULIB_POSIXCHECK -# undef sethostname -# if HAVE_RAW_DECL_SETHOSTNAME -_GL_WARN_ON_USE (sethostname, "sethostname is unportable - " - "use gnulib module sethostname for portability"); -# endif -#endif - - -#if @GNULIB_SLEEP@ -/* Pause the execution of the current thread for N seconds. - Returns the number of seconds left to sleep. - See the POSIX:2008 specification - . */ -# if @REPLACE_SLEEP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef sleep -# define sleep rpl_sleep -# endif -_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); -_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); -# else -# if !@HAVE_SLEEP@ -_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); -# endif -_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); -# endif -_GL_CXXALIASWARN (sleep); -#elif defined GNULIB_POSIXCHECK -# undef sleep -# if HAVE_RAW_DECL_SLEEP -_GL_WARN_ON_USE (sleep, "sleep is unportable - " - "use gnulib module sleep for portability"); -# endif -#endif - - -#if @GNULIB_SYMLINK@ -# if @REPLACE_SYMLINK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef symlink -# define symlink rpl_symlink -# endif -_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) - _GL_ARG_NONNULL ((1, 2))); -_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); -# else -# if !@HAVE_SYMLINK@ -_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) - _GL_ARG_NONNULL ((1, 2))); -# endif -_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); -# endif -_GL_CXXALIASWARN (symlink); -#elif defined GNULIB_POSIXCHECK -# undef symlink -# if HAVE_RAW_DECL_SYMLINK -_GL_WARN_ON_USE (symlink, "symlink is not portable - " - "use gnulib module symlink for portability"); -# endif -#endif - - -#if @GNULIB_SYMLINKAT@ -# if @REPLACE_SYMLINKAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef symlinkat -# define symlinkat rpl_symlinkat -# endif -_GL_FUNCDECL_RPL (symlinkat, int, - (char const *contents, int fd, char const *file) - _GL_ARG_NONNULL ((1, 3))); -_GL_CXXALIAS_RPL (symlinkat, int, - (char const *contents, int fd, char const *file)); -# else -# if !@HAVE_SYMLINKAT@ -_GL_FUNCDECL_SYS (symlinkat, int, - (char const *contents, int fd, char const *file) - _GL_ARG_NONNULL ((1, 3))); -# endif -_GL_CXXALIAS_SYS (symlinkat, int, - (char const *contents, int fd, char const *file)); -# endif -_GL_CXXALIASWARN (symlinkat); -#elif defined GNULIB_POSIXCHECK -# undef symlinkat -# if HAVE_RAW_DECL_SYMLINKAT -_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " - "use gnulib module symlinkat for portability"); -# endif -#endif - - -#if @GNULIB_TTYNAME_R@ -/* Store at most BUFLEN characters of the pathname of the terminal FD is - open on in BUF. Return 0 on success, otherwise an error number. */ -# if @REPLACE_TTYNAME_R@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef ttyname_r -# define ttyname_r rpl_ttyname_r -# endif -_GL_FUNCDECL_RPL (ttyname_r, int, - (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (ttyname_r, int, - (int fd, char *buf, size_t buflen)); -# else -# if !@HAVE_DECL_TTYNAME_R@ -_GL_FUNCDECL_SYS (ttyname_r, int, - (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (ttyname_r, int, - (int fd, char *buf, size_t buflen)); -# endif -_GL_CXXALIASWARN (ttyname_r); -#elif defined GNULIB_POSIXCHECK -# undef ttyname_r -# if HAVE_RAW_DECL_TTYNAME_R -_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " - "use gnulib module ttyname_r for portability"); -# endif -#endif - - -#if @GNULIB_UNLINK@ -# if @REPLACE_UNLINK@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef unlink -# define unlink rpl_unlink -# endif -_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); -_GL_CXXALIAS_RPL (unlink, int, (char const *file)); -# else -_GL_CXXALIAS_SYS (unlink, int, (char const *file)); -# endif -_GL_CXXALIASWARN (unlink); -#elif defined GNULIB_POSIXCHECK -# undef unlink -# if HAVE_RAW_DECL_UNLINK -_GL_WARN_ON_USE (unlink, "unlink is not portable - " - "use gnulib module unlink for portability"); -# endif -#endif - - -#if @GNULIB_UNLINKAT@ -# if @REPLACE_UNLINKAT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef unlinkat -# define unlinkat rpl_unlinkat -# endif -_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); -# else -# if !@HAVE_UNLINKAT@ -_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); -# endif -_GL_CXXALIASWARN (unlinkat); -#elif defined GNULIB_POSIXCHECK -# undef unlinkat -# if HAVE_RAW_DECL_UNLINKAT -_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " - "use gnulib module openat for portability"); -# endif -#endif - - -#if @GNULIB_USLEEP@ -/* Pause the execution of the current thread for N microseconds. - Returns 0 on completion, or -1 on range error. - See the POSIX:2001 specification - . */ -# if @REPLACE_USLEEP@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef usleep -# define usleep rpl_usleep -# endif -_GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); -_GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); -# else -# if !@HAVE_USLEEP@ -_GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); -# endif -_GL_CXXALIAS_SYS (usleep, int, (useconds_t n)); -# endif -_GL_CXXALIASWARN (usleep); -#elif defined GNULIB_POSIXCHECK -# undef usleep -# if HAVE_RAW_DECL_USLEEP -_GL_WARN_ON_USE (usleep, "usleep is unportable - " - "use gnulib module usleep for portability"); -# endif -#endif - - -#if @GNULIB_WRITE@ -/* Write up to COUNT bytes starting at BUF to file descriptor FD. - See the POSIX:2008 specification - . */ -# if @REPLACE_WRITE@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef write -# define write rpl_write -# endif -_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); -# else -/* Need to cast, because on mingw, the third parameter is - unsigned int count - and the return type is 'int'. */ -_GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count)); -# endif -_GL_CXXALIASWARN (write); -#endif - -_GL_INLINE_HEADER_END - -#endif /* _@GUARD_PREFIX@_UNISTD_H */ -#endif /* _GL_INCLUDING_UNISTD_H */ -#endif /* _@GUARD_PREFIX@_UNISTD_H */ diff --git a/src/gl/unsetenv.c b/src/gl/unsetenv.c deleted file mode 100644 index 836874475e..0000000000 --- a/src/gl/unsetenv.c +++ /dev/null @@ -1,127 +0,0 @@ -/* Copyright (C) 1992, 1995-2002, 2005-2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc - optimizes away the name == NULL test below. */ -#define _GL_ARG_NONNULL(params) - -#include - -/* Specification. */ -#include - -#include -#if !_LIBC -# define __set_errno(ev) ((errno) = (ev)) -#endif - -#include -#include - -#if !_LIBC -# define __environ environ -#endif - -#if _LIBC -/* This lock protects against simultaneous modifications of 'environ'. */ -# include -__libc_lock_define_initialized (static, envlock) -# define LOCK __libc_lock_lock (envlock) -# define UNLOCK __libc_lock_unlock (envlock) -#else -# define LOCK -# define UNLOCK -#endif - -/* In the GNU C library we must keep the namespace clean. */ -#ifdef _LIBC -# define unsetenv __unsetenv -#endif - -#if _LIBC || !HAVE_UNSETENV - -int -unsetenv (const char *name) -{ - size_t len; - char **ep; - - if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) - { - __set_errno (EINVAL); - return -1; - } - - len = strlen (name); - - LOCK; - - ep = __environ; - while (*ep != NULL) - if (!strncmp (*ep, name, len) && (*ep)[len] == '=') - { - /* Found it. Remove this pointer by moving later ones back. */ - char **dp = ep; - - do - dp[0] = dp[1]; - while (*dp++); - /* Continue the loop in case NAME appears again. */ - } - else - ++ep; - - UNLOCK; - - return 0; -} - -#ifdef _LIBC -# undef unsetenv -weak_alias (__unsetenv, unsetenv) -#endif - -#else /* HAVE_UNSETENV */ - -# undef unsetenv -# if !HAVE_DECL_UNSETENV -# if VOID_UNSETENV -extern void unsetenv (const char *); -# else -extern int unsetenv (const char *); -# endif -# endif - -/* Call the underlying unsetenv, in case there is hidden bookkeeping - that needs updating beyond just modifying environ. */ -int -rpl_unsetenv (const char *name) -{ - int result = 0; - if (!name || !*name || strchr (name, '=')) - { - errno = EINVAL; - return -1; - } - while (getenv (name)) -# if !VOID_UNSETENV - result = -# endif - unsetenv (name); - return result; -} - -#endif /* HAVE_UNSETENV */ diff --git a/src/gl/vasnprintf.c b/src/gl/vasnprintf.c deleted file mode 100644 index f85c69d567..0000000000 --- a/src/gl/vasnprintf.c +++ /dev/null @@ -1,5598 +0,0 @@ -/* vsprintf with automatic memory allocation. - Copyright (C) 1999, 2002-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -/* This file can be parametrized with the following macros: - VASNPRINTF The name of the function being defined. - FCHAR_T The element type of the format string. - DCHAR_T The element type of the destination (result) string. - FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters - in the format string are ASCII. MUST be set if - FCHAR_T and DCHAR_T are not the same type. - DIRECTIVE Structure denoting a format directive. - Depends on FCHAR_T. - DIRECTIVES Structure denoting the set of format directives of a - format string. Depends on FCHAR_T. - PRINTF_PARSE Function that parses a format string. - Depends on FCHAR_T. - DCHAR_CPY memcpy like function for DCHAR_T[] arrays. - DCHAR_SET memset like function for DCHAR_T[] arrays. - DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. - SNPRINTF The system's snprintf (or similar) function. - This may be either snprintf or swprintf. - TCHAR_T The element type of the argument and result string - of the said SNPRINTF function. This may be either - char or wchar_t. The code exploits that - sizeof (TCHAR_T) | sizeof (DCHAR_T) and - alignof (TCHAR_T) <= alignof (DCHAR_T). - DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. - DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. - DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. - DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. - DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ - -/* Tell glibc's to provide a prototype for snprintf(). - This must come before because may include - , and once has been included, it's too late. */ -#ifndef _GNU_SOURCE -# define _GNU_SOURCE 1 -#endif - -#ifndef VASNPRINTF -# include -#endif -#ifndef IN_LIBINTL -# include -#endif - -/* Specification. */ -#ifndef VASNPRINTF -# if WIDE_CHAR_VERSION -# include "vasnwprintf.h" -# else -# include "vasnprintf.h" -# endif -#endif - -#include /* localeconv() */ -#include /* snprintf(), sprintf() */ -#include /* abort(), malloc(), realloc(), free() */ -#include /* memcpy(), strlen() */ -#include /* errno */ -#include /* CHAR_BIT */ -#include /* DBL_MAX_EXP, LDBL_MAX_EXP */ -#if HAVE_NL_LANGINFO -# include -#endif -#ifndef VASNPRINTF -# if WIDE_CHAR_VERSION -# include "wprintf-parse.h" -# else -# include "printf-parse.h" -# endif -#endif - -/* Checked size_t computations. */ -#include "xsize.h" - -#include "verify.h" - -#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL -# include -# include "float+.h" -#endif - -#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL -# include -# include "isnand-nolibm.h" -#endif - -#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL -# include -# include "isnanl-nolibm.h" -# include "fpucw.h" -#endif - -#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL -# include -# include "isnand-nolibm.h" -# include "printf-frexp.h" -#endif - -#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL -# include -# include "isnanl-nolibm.h" -# include "printf-frexpl.h" -# include "fpucw.h" -#endif - -/* Default parameters. */ -#ifndef VASNPRINTF -# if WIDE_CHAR_VERSION -# define VASNPRINTF vasnwprintf -# define FCHAR_T wchar_t -# define DCHAR_T wchar_t -# define TCHAR_T wchar_t -# define DCHAR_IS_TCHAR 1 -# define DIRECTIVE wchar_t_directive -# define DIRECTIVES wchar_t_directives -# define PRINTF_PARSE wprintf_parse -# define DCHAR_CPY wmemcpy -# define DCHAR_SET wmemset -# else -# define VASNPRINTF vasnprintf -# define FCHAR_T char -# define DCHAR_T char -# define TCHAR_T char -# define DCHAR_IS_TCHAR 1 -# define DIRECTIVE char_directive -# define DIRECTIVES char_directives -# define PRINTF_PARSE printf_parse -# define DCHAR_CPY memcpy -# define DCHAR_SET memset -# endif -#endif -#if WIDE_CHAR_VERSION - /* TCHAR_T is wchar_t. */ -# define USE_SNPRINTF 1 -# if HAVE_DECL__SNWPRINTF - /* On Windows, the function swprintf() has a different signature than - on Unix; we use the function _snwprintf() or - on mingw - snwprintf() - instead. The mingw function snwprintf() has fewer bugs than the - MSVCRT function _snwprintf(), so prefer that. */ -# if defined __MINGW32__ -# define SNPRINTF snwprintf -# else -# define SNPRINTF _snwprintf -# endif -# else - /* Unix. */ -# define SNPRINTF swprintf -# endif -#else - /* TCHAR_T is char. */ - /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. - But don't use it on BeOS, since BeOS snprintf produces no output if the - size argument is >= 0x3000000. - Also don't use it on Linux libc5, since there snprintf with size = 1 - writes any output without bounds, like sprintf. */ -# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) -# define USE_SNPRINTF 1 -# else -# define USE_SNPRINTF 0 -# endif -# if HAVE_DECL__SNPRINTF - /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT - function _snprintf(), so prefer that. */ -# if defined __MINGW32__ -# define SNPRINTF snprintf - /* Here we need to call the native snprintf, not rpl_snprintf. */ -# undef snprintf -# else -# define SNPRINTF _snprintf -# endif -# else - /* Unix. */ -# define SNPRINTF snprintf - /* Here we need to call the native snprintf, not rpl_snprintf. */ -# undef snprintf -# endif -#endif -/* Here we need to call the native sprintf, not rpl_sprintf. */ -#undef sprintf - -/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" - warnings in this file. Use -Dlint to suppress them. */ -#if defined GCC_LINT || defined lint -# define IF_LINT(Code) Code -#else -# define IF_LINT(Code) /* empty */ -#endif - -/* Avoid some warnings from "gcc -Wshadow". - This file doesn't use the exp() and remainder() functions. */ -#undef exp -#define exp expo -#undef remainder -#define remainder rem - -#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && !WIDE_CHAR_VERSION -# if (HAVE_STRNLEN && !defined _AIX) -# define local_strnlen strnlen -# else -# ifndef local_strnlen_defined -# define local_strnlen_defined 1 -static size_t -local_strnlen (const char *string, size_t maxlen) -{ - const char *end = memchr (string, '\0', maxlen); - return end ? (size_t) (end - string) : maxlen; -} -# endif -# endif -#endif - -#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T -# if HAVE_WCSLEN -# define local_wcslen wcslen -# else - /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid - a dependency towards this library, here is a local substitute. - Define this substitute only once, even if this file is included - twice in the same compilation unit. */ -# ifndef local_wcslen_defined -# define local_wcslen_defined 1 -static size_t -local_wcslen (const wchar_t *s) -{ - const wchar_t *ptr; - - for (ptr = s; *ptr != (wchar_t) 0; ptr++) - ; - return ptr - s; -} -# endif -# endif -#endif - -#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && HAVE_WCHAR_T && WIDE_CHAR_VERSION -# if HAVE_WCSNLEN -# define local_wcsnlen wcsnlen -# else -# ifndef local_wcsnlen_defined -# define local_wcsnlen_defined 1 -static size_t -local_wcsnlen (const wchar_t *s, size_t maxlen) -{ - const wchar_t *ptr; - - for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) - ; - return ptr - s; -} -# endif -# endif -#endif - -#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL -/* Determine the decimal-point character according to the current locale. */ -# ifndef decimal_point_char_defined -# define decimal_point_char_defined 1 -static char -decimal_point_char (void) -{ - const char *point; - /* Determine it in a multithread-safe way. We know nl_langinfo is - multithread-safe on glibc systems and Mac OS X systems, but is not required - to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. - localeconv() is rarely multithread-safe. */ -# if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) - point = nl_langinfo (RADIXCHAR); -# elif 1 - char pointbuf[5]; - sprintf (pointbuf, "%#.0f", 1.0); - point = &pointbuf[1]; -# else - point = localeconv () -> decimal_point; -# endif - /* The decimal point is always a single byte: either '.' or ','. */ - return (point[0] != '\0' ? point[0] : '.'); -} -# endif -#endif - -#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL - -/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ -static int -is_infinite_or_zero (double x) -{ - return isnand (x) || x + x == x; -} - -#endif - -#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL - -/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ -static int -is_infinite_or_zerol (long double x) -{ - return isnanl (x) || x + x == x; -} - -#endif - -#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL - -/* Converting 'long double' to decimal without rare rounding bugs requires - real bignums. We use the naming conventions of GNU gmp, but vastly simpler - (and slower) algorithms. */ - -typedef unsigned int mp_limb_t; -# define GMP_LIMB_BITS 32 -verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); - -typedef unsigned long long mp_twolimb_t; -# define GMP_TWOLIMB_BITS 64 -verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); - -/* Representation of a bignum >= 0. */ -typedef struct -{ - size_t nlimbs; - mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ -} mpn_t; - -/* Compute the product of two bignums >= 0. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -multiply (mpn_t src1, mpn_t src2, mpn_t *dest) -{ - const mp_limb_t *p1; - const mp_limb_t *p2; - size_t len1; - size_t len2; - - if (src1.nlimbs <= src2.nlimbs) - { - len1 = src1.nlimbs; - p1 = src1.limbs; - len2 = src2.nlimbs; - p2 = src2.limbs; - } - else - { - len1 = src2.nlimbs; - p1 = src2.limbs; - len2 = src1.nlimbs; - p2 = src1.limbs; - } - /* Now 0 <= len1 <= len2. */ - if (len1 == 0) - { - /* src1 or src2 is zero. */ - dest->nlimbs = 0; - dest->limbs = (mp_limb_t *) malloc (1); - } - else - { - /* Here 1 <= len1 <= len2. */ - size_t dlen; - mp_limb_t *dp; - size_t k, i, j; - - dlen = len1 + len2; - dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); - if (dp == NULL) - return NULL; - for (k = len2; k > 0; ) - dp[--k] = 0; - for (i = 0; i < len1; i++) - { - mp_limb_t digit1 = p1[i]; - mp_twolimb_t carry = 0; - for (j = 0; j < len2; j++) - { - mp_limb_t digit2 = p2[j]; - carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; - carry += dp[i + j]; - dp[i + j] = (mp_limb_t) carry; - carry = carry >> GMP_LIMB_BITS; - } - dp[i + len2] = (mp_limb_t) carry; - } - /* Normalise. */ - while (dlen > 0 && dp[dlen - 1] == 0) - dlen--; - dest->nlimbs = dlen; - dest->limbs = dp; - } - return dest->limbs; -} - -/* Compute the quotient of a bignum a >= 0 and a bignum b > 0. - a is written as a = q * b + r with 0 <= r < b. q is the quotient, r - the remainder. - Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, - q is incremented. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -divide (mpn_t a, mpn_t b, mpn_t *q) -{ - /* Algorithm: - First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] - with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). - If m=n=1, perform a single-precision division: - r:=0, j:=m, - while j>0 do - {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = - = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r=n>1, perform a multiple-precision division: - We have a/b < beta^(m-n+1). - s:=intDsize-1-(highest bit in b[n-1]), 0<=s=beta/2. - For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} - Compute q* : - q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). - In case of overflow (q* >= beta) set q* := beta-1. - Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] - and c3 := b[n-2] * q*. - {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow - occurred. Furthermore 0 <= c3 < beta^2. - If there was overflow and - r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, - the next test can be skipped.} - While c3 > c2, {Here 0 <= c2 < c3 < beta^2} - Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. - If q* > 0: - Put r := r - b * q* * beta^j. In detail: - [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. - hence: u:=0, for i:=0 to n-1 do - u := u + q* * b[i], - r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), - u:=u div beta (+ 1, if carry in subtraction) - r[n+j]:=r[n+j]-u. - {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 - < q* + 1 <= beta, - the carry u does not overflow.} - If a negative carry occurs, put q* := q* - 1 - and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. - Set q[j] := q*. - Normalise [q[m-n],..,q[0]]; this yields the quotient q. - Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the - rest r. - The room for q[j] can be allocated at the memory location of r[n+j]. - Finally, round-to-even: - Shift r left by 1 bit. - If r > b or if r = b and q[0] is odd, q := q+1. - */ - const mp_limb_t *a_ptr = a.limbs; - size_t a_len = a.nlimbs; - const mp_limb_t *b_ptr = b.limbs; - size_t b_len = b.nlimbs; - mp_limb_t *roomptr; - mp_limb_t *tmp_roomptr = NULL; - mp_limb_t *q_ptr; - size_t q_len; - mp_limb_t *r_ptr; - size_t r_len; - - /* Allocate room for a_len+2 digits. - (Need a_len+1 digits for the real division and 1 more digit for the - final rounding of q.) */ - roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); - if (roomptr == NULL) - return NULL; - - /* Normalise a. */ - while (a_len > 0 && a_ptr[a_len - 1] == 0) - a_len--; - - /* Normalise b. */ - for (;;) - { - if (b_len == 0) - /* Division by zero. */ - abort (); - if (b_ptr[b_len - 1] == 0) - b_len--; - else - break; - } - - /* Here m = a_len >= 0 and n = b_len > 0. */ - - if (a_len < b_len) - { - /* m beta^(m-2) <= a/b < beta^m */ - r_ptr = roomptr; - q_ptr = roomptr + 1; - { - mp_limb_t den = b_ptr[0]; - mp_limb_t remainder = 0; - const mp_limb_t *sourceptr = a_ptr + a_len; - mp_limb_t *destptr = q_ptr + a_len; - size_t count; - for (count = a_len; count > 0; count--) - { - mp_twolimb_t num = - ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; - *--destptr = num / den; - remainder = num % den; - } - /* Normalise and store r. */ - if (remainder > 0) - { - r_ptr[0] = remainder; - r_len = 1; - } - else - r_len = 0; - /* Normalise q. */ - q_len = a_len; - if (q_ptr[q_len - 1] == 0) - q_len--; - } - } - else - { - /* n>1: multiple precision division. - beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> - beta^(m-n-1) <= a/b < beta^(m-n+1). */ - /* Determine s. */ - size_t s; - { - mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ - /* Determine s = GMP_LIMB_BITS - integer_length (msd). - Code copied from gnulib's integer_length.c. */ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) - s = __builtin_clz (msd); -# else -# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT - if (GMP_LIMB_BITS <= DBL_MANT_BIT) - { - /* Use 'double' operations. - Assumes an IEEE 754 'double' implementation. */ -# define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) -# define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) -# define NWORDS \ - ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) - union { double value; unsigned int word[NWORDS]; } m; - - /* Use a single integer to floating-point conversion. */ - m.value = msd; - - s = GMP_LIMB_BITS - - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) - - DBL_EXP_BIAS); - } - else -# undef NWORDS -# endif - { - s = 31; - if (msd >= 0x10000) - { - msd = msd >> 16; - s -= 16; - } - if (msd >= 0x100) - { - msd = msd >> 8; - s -= 8; - } - if (msd >= 0x10) - { - msd = msd >> 4; - s -= 4; - } - if (msd >= 0x4) - { - msd = msd >> 2; - s -= 2; - } - if (msd >= 0x2) - { - msd = msd >> 1; - s -= 1; - } - } -# endif - } - /* 0 <= s < GMP_LIMB_BITS. - Copy b, shifting it left by s bits. */ - if (s > 0) - { - tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); - if (tmp_roomptr == NULL) - { - free (roomptr); - return NULL; - } - { - const mp_limb_t *sourceptr = b_ptr; - mp_limb_t *destptr = tmp_roomptr; - mp_twolimb_t accu = 0; - size_t count; - for (count = b_len; count > 0; count--) - { - accu += (mp_twolimb_t) *sourceptr++ << s; - *destptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - /* accu must be zero, since that was how s was determined. */ - if (accu != 0) - abort (); - } - b_ptr = tmp_roomptr; - } - /* Copy a, shifting it left by s bits, yields r. - Memory layout: - At the beginning: r = roomptr[0..a_len], - at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ - r_ptr = roomptr; - if (s == 0) - { - memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); - r_ptr[a_len] = 0; - } - else - { - const mp_limb_t *sourceptr = a_ptr; - mp_limb_t *destptr = r_ptr; - mp_twolimb_t accu = 0; - size_t count; - for (count = a_len; count > 0; count--) - { - accu += (mp_twolimb_t) *sourceptr++ << s; - *destptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - *destptr++ = (mp_limb_t) accu; - } - q_ptr = roomptr + b_len; - q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ - { - size_t j = a_len - b_len; /* m-n */ - mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ - mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ - mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ - ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; - /* Division loop, traversed m-n+1 times. - j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ - for (;;) - { - mp_limb_t q_star; - mp_limb_t c1; - if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ - { - /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ - mp_twolimb_t num = - ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) - | r_ptr[j + b_len - 1]; - q_star = num / b_msd; - c1 = num % b_msd; - } - else - { - /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ - q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ - /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta - <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta - <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) - {<= beta !}. - If yes, jump directly to the subtraction loop. - (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta - <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ - if (r_ptr[j + b_len] > b_msd - || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) - /* r[j+n] >= b[n-1]+1 or - r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a - carry. */ - goto subtract; - } - /* q_star = q*, - c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, 0, decrease it by - b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 - this can happen only twice. */ - if (c3 > c2) - { - q_star = q_star - 1; /* q* := q* - 1 */ - if (c3 - c2 > b_msdd) - q_star = q_star - 1; /* q* := q* - 1 */ - } - } - if (q_star > 0) - subtract: - { - /* Subtract r := r - b * q* * beta^j. */ - mp_limb_t cr; - { - const mp_limb_t *sourceptr = b_ptr; - mp_limb_t *destptr = r_ptr + j; - mp_twolimb_t carry = 0; - size_t count; - for (count = b_len; count > 0; count--) - { - /* Here 0 <= carry <= q*. */ - carry = - carry - + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ - + (mp_limb_t) ~(*destptr); - /* Here 0 <= carry <= beta*q* + beta-1. */ - *destptr++ = ~(mp_limb_t) carry; - carry = carry >> GMP_LIMB_BITS; /* <= q* */ - } - cr = (mp_limb_t) carry; - } - /* Subtract cr from r_ptr[j + b_len], then forget about - r_ptr[j + b_len]. */ - if (cr > r_ptr[j + b_len]) - { - /* Subtraction gave a carry. */ - q_star = q_star - 1; /* q* := q* - 1 */ - /* Add b back. */ - { - const mp_limb_t *sourceptr = b_ptr; - mp_limb_t *destptr = r_ptr + j; - mp_limb_t carry = 0; - size_t count; - for (count = b_len; count > 0; count--) - { - mp_limb_t source1 = *sourceptr++; - mp_limb_t source2 = *destptr; - *destptr++ = source1 + source2 + carry; - carry = - (carry - ? source1 >= (mp_limb_t) ~source2 - : source1 > (mp_limb_t) ~source2); - } - } - /* Forget about the carry and about r[j+n]. */ - } - } - /* q* is determined. Store it as q[j]. */ - q_ptr[j] = q_star; - if (j == 0) - break; - j--; - } - } - r_len = b_len; - /* Normalise q. */ - if (q_ptr[q_len - 1] == 0) - q_len--; -# if 0 /* Not needed here, since we need r only to compare it with b/2, and - b is shifted left by s bits. */ - /* Shift r right by s bits. */ - if (s > 0) - { - mp_limb_t ptr = r_ptr + r_len; - mp_twolimb_t accu = 0; - size_t count; - for (count = r_len; count > 0; count--) - { - accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; - accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); - *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); - } - } -# endif - /* Normalise r. */ - while (r_len > 0 && r_ptr[r_len - 1] == 0) - r_len--; - } - /* Compare r << 1 with b. */ - if (r_len > b_len) - goto increment_q; - { - size_t i; - for (i = b_len;;) - { - mp_limb_t r_i = - (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) - | (i < r_len ? r_ptr[i] << 1 : 0); - mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); - if (r_i > b_i) - goto increment_q; - if (r_i < b_i) - goto keep_q; - if (i == 0) - break; - i--; - } - } - if (q_len > 0 && ((q_ptr[0] & 1) != 0)) - /* q is odd. */ - increment_q: - { - size_t i; - for (i = 0; i < q_len; i++) - if (++(q_ptr[i]) != 0) - goto keep_q; - q_ptr[q_len++] = 1; - } - keep_q: - if (tmp_roomptr != NULL) - free (tmp_roomptr); - q->limbs = q_ptr; - q->nlimbs = q_len; - return roomptr; -} - -/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal - representation. - Destroys the contents of a. - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -convert_to_decimal (mpn_t a, size_t extra_zeroes) -{ - mp_limb_t *a_ptr = a.limbs; - size_t a_len = a.nlimbs; - /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ - size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); - char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); - if (c_ptr != NULL) - { - char *d_ptr = c_ptr; - for (; extra_zeroes > 0; extra_zeroes--) - *d_ptr++ = '0'; - while (a_len > 0) - { - /* Divide a by 10^9, in-place. */ - mp_limb_t remainder = 0; - mp_limb_t *ptr = a_ptr + a_len; - size_t count; - for (count = a_len; count > 0; count--) - { - mp_twolimb_t num = - ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; - *ptr = num / 1000000000; - remainder = num % 1000000000; - } - /* Store the remainder as 9 decimal digits. */ - for (count = 9; count > 0; count--) - { - *d_ptr++ = '0' + (remainder % 10); - remainder = remainder / 10; - } - /* Normalize a. */ - if (a_ptr[a_len - 1] == 0) - a_len--; - } - /* Remove leading zeroes. */ - while (d_ptr > c_ptr && d_ptr[-1] == '0') - d_ptr--; - /* But keep at least one zero. */ - if (d_ptr == c_ptr) - *d_ptr++ = '0'; - /* Terminate the string. */ - *d_ptr = '\0'; - } - return c_ptr; -} - -# if NEED_PRINTF_LONG_DOUBLE - -/* Assuming x is finite and >= 0: - write x as x = 2^e * m, where m is a bignum. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -decode_long_double (long double x, int *ep, mpn_t *mp) -{ - mpn_t m; - int exp; - long double y; - size_t i; - - /* Allocate memory for result. */ - m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; - m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); - if (m.limbs == NULL) - return NULL; - /* Split into exponential part and mantissa. */ - y = frexpl (x, &exp); - if (!(y >= 0.0L && y < 1.0L)) - abort (); - /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the - latter is an integer. */ - /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. - I'm not sure whether it's safe to cast a 'long double' value between - 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only - 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', - doesn't matter). */ -# if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 -# if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); - hi = (int) y; - y -= hi; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } -# else - { - mp_limb_t d; - y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); - d = (int) y; - y -= d; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; - } -# endif -# endif - for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - hi = (int) y; - y -= hi; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0L && y < 1.0L)) - abort (); - m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } -# if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess - precision. */ - if (!(y == 0.0L)) - abort (); -# endif - /* Normalise. */ - while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) - m.nlimbs--; - *mp = m; - *ep = exp - LDBL_MANT_BIT; - return m.limbs; -} - -# endif - -# if NEED_PRINTF_DOUBLE - -/* Assuming x is finite and >= 0: - write x as x = 2^e * m, where m is a bignum. - Return the allocated memory in case of success, NULL in case of memory - allocation failure. */ -static void * -decode_double (double x, int *ep, mpn_t *mp) -{ - mpn_t m; - int exp; - double y; - size_t i; - - /* Allocate memory for result. */ - m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; - m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); - if (m.limbs == NULL) - return NULL; - /* Split into exponential part and mantissa. */ - y = frexp (x, &exp); - if (!(y >= 0.0 && y < 1.0)) - abort (); - /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the - latter is an integer. */ - /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. - I'm not sure whether it's safe to cast a 'double' value between - 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only - 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', - doesn't matter). */ -# if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 -# if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); - hi = (int) y; - y -= hi; - if (!(y >= 0.0 && y < 1.0)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0 && y < 1.0)) - abort (); - m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } -# else - { - mp_limb_t d; - y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); - d = (int) y; - y -= d; - if (!(y >= 0.0 && y < 1.0)) - abort (); - m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; - } -# endif -# endif - for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) - { - mp_limb_t hi, lo; - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - hi = (int) y; - y -= hi; - if (!(y >= 0.0 && y < 1.0)) - abort (); - y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); - lo = (int) y; - y -= lo; - if (!(y >= 0.0 && y < 1.0)) - abort (); - m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; - } - if (!(y == 0.0)) - abort (); - /* Normalise. */ - while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) - m.nlimbs--; - *mp = m; - *ep = exp - DBL_MANT_BIT; - return m.limbs; -} - -# endif - -/* Assuming x = 2^e * m is finite and >= 0, and n is an integer: - Returns the decimal representation of round (x * 10^n). - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) -{ - int s; - size_t extra_zeroes; - unsigned int abs_n; - unsigned int abs_s; - mp_limb_t *pow5_ptr; - size_t pow5_len; - unsigned int s_limbs; - unsigned int s_bits; - mpn_t pow5; - mpn_t z; - void *z_memory; - char *digits; - - if (memory == NULL) - return NULL; - /* x = 2^e * m, hence - y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) - = round (2^s * 5^n * m). */ - s = e + n; - extra_zeroes = 0; - /* Factor out a common power of 10 if possible. */ - if (s > 0 && n > 0) - { - extra_zeroes = (s < n ? s : n); - s -= extra_zeroes; - n -= extra_zeroes; - } - /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. - Before converting to decimal, we need to compute - z = round (2^s * 5^n * m). */ - /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same - sign. 2.322 is slightly larger than log(5)/log(2). */ - abs_n = (n >= 0 ? n : -n); - abs_s = (s >= 0 ? s : -s); - pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 - + abs_s / GMP_LIMB_BITS + 1) - * sizeof (mp_limb_t)); - if (pow5_ptr == NULL) - { - free (memory); - return NULL; - } - /* Initialize with 1. */ - pow5_ptr[0] = 1; - pow5_len = 1; - /* Multiply with 5^|n|. */ - if (abs_n > 0) - { - static mp_limb_t const small_pow5[13 + 1] = - { - 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, - 48828125, 244140625, 1220703125 - }; - unsigned int n13; - for (n13 = 0; n13 <= abs_n; n13 += 13) - { - mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; - size_t j; - mp_twolimb_t carry = 0; - for (j = 0; j < pow5_len; j++) - { - mp_limb_t digit2 = pow5_ptr[j]; - carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; - pow5_ptr[j] = (mp_limb_t) carry; - carry = carry >> GMP_LIMB_BITS; - } - if (carry > 0) - pow5_ptr[pow5_len++] = (mp_limb_t) carry; - } - } - s_limbs = abs_s / GMP_LIMB_BITS; - s_bits = abs_s % GMP_LIMB_BITS; - if (n >= 0 ? s >= 0 : s <= 0) - { - /* Multiply with 2^|s|. */ - if (s_bits > 0) - { - mp_limb_t *ptr = pow5_ptr; - mp_twolimb_t accu = 0; - size_t count; - for (count = pow5_len; count > 0; count--) - { - accu += (mp_twolimb_t) *ptr << s_bits; - *ptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - if (accu > 0) - { - *ptr = (mp_limb_t) accu; - pow5_len++; - } - } - if (s_limbs > 0) - { - size_t count; - for (count = pow5_len; count > 0;) - { - count--; - pow5_ptr[s_limbs + count] = pow5_ptr[count]; - } - for (count = s_limbs; count > 0;) - { - count--; - pow5_ptr[count] = 0; - } - pow5_len += s_limbs; - } - pow5.limbs = pow5_ptr; - pow5.nlimbs = pow5_len; - if (n >= 0) - { - /* Multiply m with pow5. No division needed. */ - z_memory = multiply (m, pow5, &z); - } - else - { - /* Divide m by pow5 and round. */ - z_memory = divide (m, pow5, &z); - } - } - else - { - pow5.limbs = pow5_ptr; - pow5.nlimbs = pow5_len; - if (n >= 0) - { - /* n >= 0, s < 0. - Multiply m with pow5, then divide by 2^|s|. */ - mpn_t numerator; - mpn_t denominator; - void *tmp_memory; - tmp_memory = multiply (m, pow5, &numerator); - if (tmp_memory == NULL) - { - free (pow5_ptr); - free (memory); - return NULL; - } - /* Construct 2^|s|. */ - { - mp_limb_t *ptr = pow5_ptr + pow5_len; - size_t i; - for (i = 0; i < s_limbs; i++) - ptr[i] = 0; - ptr[s_limbs] = (mp_limb_t) 1 << s_bits; - denominator.limbs = ptr; - denominator.nlimbs = s_limbs + 1; - } - z_memory = divide (numerator, denominator, &z); - free (tmp_memory); - } - else - { - /* n < 0, s > 0. - Multiply m with 2^s, then divide by pow5. */ - mpn_t numerator; - mp_limb_t *num_ptr; - num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) - * sizeof (mp_limb_t)); - if (num_ptr == NULL) - { - free (pow5_ptr); - free (memory); - return NULL; - } - { - mp_limb_t *destptr = num_ptr; - { - size_t i; - for (i = 0; i < s_limbs; i++) - *destptr++ = 0; - } - if (s_bits > 0) - { - const mp_limb_t *sourceptr = m.limbs; - mp_twolimb_t accu = 0; - size_t count; - for (count = m.nlimbs; count > 0; count--) - { - accu += (mp_twolimb_t) *sourceptr++ << s_bits; - *destptr++ = (mp_limb_t) accu; - accu = accu >> GMP_LIMB_BITS; - } - if (accu > 0) - *destptr++ = (mp_limb_t) accu; - } - else - { - const mp_limb_t *sourceptr = m.limbs; - size_t count; - for (count = m.nlimbs; count > 0; count--) - *destptr++ = *sourceptr++; - } - numerator.limbs = num_ptr; - numerator.nlimbs = destptr - num_ptr; - } - z_memory = divide (numerator, pow5, &z); - free (num_ptr); - } - } - free (pow5_ptr); - free (memory); - - /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ - - if (z_memory == NULL) - return NULL; - digits = convert_to_decimal (z, extra_zeroes); - free (z_memory); - return digits; -} - -# if NEED_PRINTF_LONG_DOUBLE - -/* Assuming x is finite and >= 0, and n is an integer: - Returns the decimal representation of round (x * 10^n). - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -scale10_round_decimal_long_double (long double x, int n) -{ - int e IF_LINT(= 0); - mpn_t m; - void *memory = decode_long_double (x, &e, &m); - return scale10_round_decimal_decoded (e, m, memory, n); -} - -# endif - -# if NEED_PRINTF_DOUBLE - -/* Assuming x is finite and >= 0, and n is an integer: - Returns the decimal representation of round (x * 10^n). - Return the allocated memory - containing the decimal digits in low-to-high - order, terminated with a NUL character - in case of success, NULL in case - of memory allocation failure. */ -static char * -scale10_round_decimal_double (double x, int n) -{ - int e IF_LINT(= 0); - mpn_t m; - void *memory = decode_double (x, &e, &m); - return scale10_round_decimal_decoded (e, m, memory, n); -} - -# endif - -# if NEED_PRINTF_LONG_DOUBLE - -/* Assuming x is finite and > 0: - Return an approximation for n with 10^n <= x < 10^(n+1). - The approximation is usually the right n, but may be off by 1 sometimes. */ -static int -floorlog10l (long double x) -{ - int exp; - long double y; - double z; - double l; - - /* Split into exponential part and mantissa. */ - y = frexpl (x, &exp); - if (!(y >= 0.0L && y < 1.0L)) - abort (); - if (y == 0.0L) - return INT_MIN; - if (y < 0.5L) - { - while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) - { - y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); - exp -= GMP_LIMB_BITS; - } - if (y < (1.0L / (1 << 16))) - { - y *= 1.0L * (1 << 16); - exp -= 16; - } - if (y < (1.0L / (1 << 8))) - { - y *= 1.0L * (1 << 8); - exp -= 8; - } - if (y < (1.0L / (1 << 4))) - { - y *= 1.0L * (1 << 4); - exp -= 4; - } - if (y < (1.0L / (1 << 2))) - { - y *= 1.0L * (1 << 2); - exp -= 2; - } - if (y < (1.0L / (1 << 1))) - { - y *= 1.0L * (1 << 1); - exp -= 1; - } - } - if (!(y >= 0.5L && y < 1.0L)) - abort (); - /* Compute an approximation for l = log2(x) = exp + log2(y). */ - l = exp; - z = y; - if (z < 0.70710678118654752444) - { - z *= 1.4142135623730950488; - l -= 0.5; - } - if (z < 0.8408964152537145431) - { - z *= 1.1892071150027210667; - l -= 0.25; - } - if (z < 0.91700404320467123175) - { - z *= 1.0905077326652576592; - l -= 0.125; - } - if (z < 0.9576032806985736469) - { - z *= 1.0442737824274138403; - l -= 0.0625; - } - /* Now 0.95 <= z <= 1.01. */ - z = 1 - z; - /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) - Four terms are enough to get an approximation with error < 10^-7. */ - l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); - /* Finally multiply with log(2)/log(10), yields an approximation for - log10(x). */ - l *= 0.30102999566398119523; - /* Round down to the next integer. */ - return (int) l + (l < 0 ? -1 : 0); -} - -# endif - -# if NEED_PRINTF_DOUBLE - -/* Assuming x is finite and > 0: - Return an approximation for n with 10^n <= x < 10^(n+1). - The approximation is usually the right n, but may be off by 1 sometimes. */ -static int -floorlog10 (double x) -{ - int exp; - double y; - double z; - double l; - - /* Split into exponential part and mantissa. */ - y = frexp (x, &exp); - if (!(y >= 0.0 && y < 1.0)) - abort (); - if (y == 0.0) - return INT_MIN; - if (y < 0.5) - { - while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) - { - y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); - exp -= GMP_LIMB_BITS; - } - if (y < (1.0 / (1 << 16))) - { - y *= 1.0 * (1 << 16); - exp -= 16; - } - if (y < (1.0 / (1 << 8))) - { - y *= 1.0 * (1 << 8); - exp -= 8; - } - if (y < (1.0 / (1 << 4))) - { - y *= 1.0 * (1 << 4); - exp -= 4; - } - if (y < (1.0 / (1 << 2))) - { - y *= 1.0 * (1 << 2); - exp -= 2; - } - if (y < (1.0 / (1 << 1))) - { - y *= 1.0 * (1 << 1); - exp -= 1; - } - } - if (!(y >= 0.5 && y < 1.0)) - abort (); - /* Compute an approximation for l = log2(x) = exp + log2(y). */ - l = exp; - z = y; - if (z < 0.70710678118654752444) - { - z *= 1.4142135623730950488; - l -= 0.5; - } - if (z < 0.8408964152537145431) - { - z *= 1.1892071150027210667; - l -= 0.25; - } - if (z < 0.91700404320467123175) - { - z *= 1.0905077326652576592; - l -= 0.125; - } - if (z < 0.9576032806985736469) - { - z *= 1.0442737824274138403; - l -= 0.0625; - } - /* Now 0.95 <= z <= 1.01. */ - z = 1 - z; - /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) - Four terms are enough to get an approximation with error < 10^-7. */ - l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); - /* Finally multiply with log(2)/log(10), yields an approximation for - log10(x). */ - l *= 0.30102999566398119523; - /* Round down to the next integer. */ - return (int) l + (l < 0 ? -1 : 0); -} - -# endif - -/* Tests whether a string of digits consists of exactly PRECISION zeroes and - a single '1' digit. */ -static int -is_borderline (const char *digits, size_t precision) -{ - for (; precision > 0; precision--, digits++) - if (*digits != '0') - return 0; - if (*digits != '1') - return 0; - digits++; - return *digits == '\0'; -} - -#endif - -#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 - -/* Use a different function name, to make it possible that the 'wchar_t' - parametrization and the 'char' parametrization get compiled in the same - translation unit. */ -# if WIDE_CHAR_VERSION -# define MAX_ROOM_NEEDED wmax_room_needed -# else -# define MAX_ROOM_NEEDED max_room_needed -# endif - -/* Returns the number of TCHAR_T units needed as temporary space for the result - of sprintf or SNPRINTF of a single conversion directive. */ -static size_t -MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, - arg_type type, int flags, size_t width, int has_precision, - size_t precision, int pad_ourselves) -{ - size_t tmp_length; - - switch (conversion) - { - case 'd': case 'i': case 'u': -# if HAVE_LONG_LONG_INT - if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long long) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - else -# endif - if (type == TYPE_LONGINT || type == TYPE_ULONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) (sizeof (unsigned int) * CHAR_BIT - * 0.30103 /* binary -> decimal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Multiply by 2, as an estimate for FLAG_GROUP. */ - tmp_length = xsum (tmp_length, tmp_length); - /* Add 1, to account for a leading sign. */ - tmp_length = xsum (tmp_length, 1); - break; - - case 'o': -# if HAVE_LONG_LONG_INT - if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long long) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - else -# endif - if (type == TYPE_LONGINT || type == TYPE_ULONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) (sizeof (unsigned int) * CHAR_BIT - * 0.333334 /* binary -> octal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Add 1, to account for a leading sign. */ - tmp_length = xsum (tmp_length, 1); - break; - - case 'x': case 'X': -# if HAVE_LONG_LONG_INT - if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long long) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - else -# endif - if (type == TYPE_LONGINT || type == TYPE_ULONGINT) - tmp_length = - (unsigned int) (sizeof (unsigned long) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) (sizeof (unsigned int) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Add 2, to account for a leading sign or alternate form. */ - tmp_length = xsum (tmp_length, 2); - break; - - case 'f': case 'F': - if (type == TYPE_LONGDOUBLE) - tmp_length = - (unsigned int) (LDBL_MAX_EXP - * 0.30103 /* binary -> decimal */ - * 2 /* estimate for FLAG_GROUP */ - ) - + 1 /* turn floor into ceil */ - + 10; /* sign, decimal point etc. */ - else - tmp_length = - (unsigned int) (DBL_MAX_EXP - * 0.30103 /* binary -> decimal */ - * 2 /* estimate for FLAG_GROUP */ - ) - + 1 /* turn floor into ceil */ - + 10; /* sign, decimal point etc. */ - tmp_length = xsum (tmp_length, precision); - break; - - case 'e': case 'E': case 'g': case 'G': - tmp_length = - 12; /* sign, decimal point, exponent etc. */ - tmp_length = xsum (tmp_length, precision); - break; - - case 'a': case 'A': - if (type == TYPE_LONGDOUBLE) - tmp_length = - (unsigned int) (LDBL_DIG - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) (DBL_DIG - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Account for sign, decimal point etc. */ - tmp_length = xsum (tmp_length, 12); - break; - - case 'c': -# if HAVE_WINT_T && !WIDE_CHAR_VERSION - if (type == TYPE_WIDE_CHAR) - tmp_length = MB_CUR_MAX; - else -# endif - tmp_length = 1; - break; - - case 's': -# if HAVE_WCHAR_T - if (type == TYPE_WIDE_STRING) - { -# if WIDE_CHAR_VERSION - /* ISO C says about %ls in fwprintf: - "If the precision is not specified or is greater than the size - of the array, the array shall contain a null wide character." - So if there is a precision, we must not use wcslen. */ - const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; - - if (has_precision) - tmp_length = local_wcsnlen (arg, precision); - else - tmp_length = local_wcslen (arg); -# else - /* ISO C says about %ls in fprintf: - "If a precision is specified, no more than that many bytes are - written (including shift sequences, if any), and the array - shall contain a null wide character if, to equal the multibyte - character sequence length given by the precision, the function - would need to access a wide character one past the end of the - array." - So if there is a precision, we must not use wcslen. */ - /* This case has already been handled separately in VASNPRINTF. */ - abort (); -# endif - } - else -# endif - { -# if WIDE_CHAR_VERSION - /* ISO C says about %s in fwprintf: - "If the precision is not specified or is greater than the size - of the converted array, the converted array shall contain a - null wide character." - So if there is a precision, we must not use strlen. */ - /* This case has already been handled separately in VASNPRINTF. */ - abort (); -# else - /* ISO C says about %s in fprintf: - "If the precision is not specified or greater than the size of - the array, the array shall contain a null character." - So if there is a precision, we must not use strlen. */ - const char *arg = ap->arg[arg_index].a.a_string; - - if (has_precision) - tmp_length = local_strnlen (arg, precision); - else - tmp_length = strlen (arg); -# endif - } - break; - - case 'p': - tmp_length = - (unsigned int) (sizeof (void *) * CHAR_BIT - * 0.25 /* binary -> hexadecimal */ - ) - + 1 /* turn floor into ceil */ - + 2; /* account for leading 0x */ - break; - - default: - abort (); - } - - if (!pad_ourselves) - { -# if ENABLE_UNISTDIO - /* Padding considers the number of characters, therefore the number of - elements after padding may be - > max (tmp_length, width) - but is certainly - <= tmp_length + width. */ - tmp_length = xsum (tmp_length, width); -# else - /* Padding considers the number of elements, says POSIX. */ - if (tmp_length < width) - tmp_length = width; -# endif - } - - tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ - - return tmp_length; -} - -#endif - -DCHAR_T * -VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, - const FCHAR_T *format, va_list args) -{ - DIRECTIVES d; - arguments a; - - if (PRINTF_PARSE (format, &d, &a) < 0) - /* errno is already set. */ - return NULL; - -#define CLEANUP() \ - if (d.dir != d.direct_alloc_dir) \ - free (d.dir); \ - if (a.arg != a.direct_alloc_arg) \ - free (a.arg); - - if (PRINTF_FETCHARGS (args, &a) < 0) - { - CLEANUP (); - errno = EINVAL; - return NULL; - } - - { - size_t buf_neededlength; - TCHAR_T *buf; - TCHAR_T *buf_malloced; - const FCHAR_T *cp; - size_t i; - DIRECTIVE *dp; - /* Output string accumulator. */ - DCHAR_T *result; - size_t allocated; - size_t length; - - /* Allocate a small buffer that will hold a directive passed to - sprintf or snprintf. */ - buf_neededlength = - xsum4 (7, d.max_width_length, d.max_precision_length, 6); -#if HAVE_ALLOCA - if (buf_neededlength < 4000 / sizeof (TCHAR_T)) - { - buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); - buf_malloced = NULL; - } - else -#endif - { - size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); - if (size_overflow_p (buf_memsize)) - goto out_of_memory_1; - buf = (TCHAR_T *) malloc (buf_memsize); - if (buf == NULL) - goto out_of_memory_1; - buf_malloced = buf; - } - - if (resultbuf != NULL) - { - result = resultbuf; - allocated = *lengthp; - } - else - { - result = NULL; - allocated = 0; - } - length = 0; - /* Invariants: - result is either == resultbuf or == NULL or malloc-allocated. - If length > 0, then result != NULL. */ - - /* Ensures that allocated >= needed. Aborts through a jump to - out_of_memory if needed is SIZE_MAX or otherwise too big. */ -#define ENSURE_ALLOCATION(needed) \ - if ((needed) > allocated) \ - { \ - size_t memory_size; \ - DCHAR_T *memory; \ - \ - allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ - if ((needed) > allocated) \ - allocated = (needed); \ - memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ - if (size_overflow_p (memory_size)) \ - goto out_of_memory; \ - if (result == resultbuf || result == NULL) \ - memory = (DCHAR_T *) malloc (memory_size); \ - else \ - memory = (DCHAR_T *) realloc (result, memory_size); \ - if (memory == NULL) \ - goto out_of_memory; \ - if (result == resultbuf && length > 0) \ - DCHAR_CPY (memory, result, length); \ - result = memory; \ - } - - for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) - { - if (cp != dp->dir_start) - { - size_t n = dp->dir_start - cp; - size_t augmented_length = xsum (length, n); - - ENSURE_ALLOCATION (augmented_length); - /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we - need that the format string contains only ASCII characters - if FCHAR_T and DCHAR_T are not the same type. */ - if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) - { - DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); - length = augmented_length; - } - else - { - do - result[length++] = *cp++; - while (--n > 0); - } - } - if (i == d.count) - break; - - /* Execute a single directive. */ - if (dp->conversion == '%') - { - size_t augmented_length; - - if (!(dp->arg_index == ARG_NONE)) - abort (); - augmented_length = xsum (length, 1); - ENSURE_ALLOCATION (augmented_length); - result[length] = '%'; - length = augmented_length; - } - else - { - if (!(dp->arg_index != ARG_NONE)) - abort (); - - if (dp->conversion == 'n') - { - switch (a.arg[dp->arg_index].type) - { - case TYPE_COUNT_SCHAR_POINTER: - *a.arg[dp->arg_index].a.a_count_schar_pointer = length; - break; - case TYPE_COUNT_SHORT_POINTER: - *a.arg[dp->arg_index].a.a_count_short_pointer = length; - break; - case TYPE_COUNT_INT_POINTER: - *a.arg[dp->arg_index].a.a_count_int_pointer = length; - break; - case TYPE_COUNT_LONGINT_POINTER: - *a.arg[dp->arg_index].a.a_count_longint_pointer = length; - break; -#if HAVE_LONG_LONG_INT - case TYPE_COUNT_LONGLONGINT_POINTER: - *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; - break; -#endif - default: - abort (); - } - } -#if ENABLE_UNISTDIO - /* The unistdio extensions. */ - else if (dp->conversion == 'U') - { - arg_type type = a.arg[dp->arg_index].type; - int flags = dp->flags; - int has_width; - size_t width; - int has_precision; - size_t precision; - - has_width = 0; - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - has_width = 1; - } - - has_precision = 0; - precision = 0; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - - switch (type) - { - case TYPE_U8_STRING: - { - const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; - const uint8_t *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only PRECISION characters, from the left. */ - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count = u8_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of - characters. */ - arg_end = arg; - characters = 0; - for (;;) - { - int count = u8_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + u8_strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_UINT8_T - { - size_t n = arg_end - arg; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_CPY (result + length, arg, n); - length += n; - } -# else - { /* Convert. */ - DCHAR_T *converted = result + length; - size_t converted_len = allocated - length; -# if DCHAR_IS_TCHAR - /* Convert from UTF-8 to locale encoding. */ - converted = - u8_conv_to_encoding (locale_charset (), - iconveh_question_mark, - arg, arg_end - arg, NULL, - converted, &converted_len); -# else - /* Convert from UTF-8 to UTF-16/UTF-32. */ - converted = - U8_TO_DCHAR (arg, arg_end - arg, - converted, &converted_len); -# endif - if (converted == NULL) - { - int saved_errno = errno; - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = saved_errno; - return NULL; - } - if (converted != result + length) - { - ENSURE_ALLOCATION (xsum (length, converted_len)); - DCHAR_CPY (result + length, converted, converted_len); - free (converted); - } - length += converted_len; - } -# endif - - if (characters < width && (dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - break; - - case TYPE_U16_STRING: - { - const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; - const uint16_t *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only PRECISION characters, from the left. */ - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count = u16_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of - characters. */ - arg_end = arg; - characters = 0; - for (;;) - { - int count = u16_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + u16_strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_UINT16_T - { - size_t n = arg_end - arg; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_CPY (result + length, arg, n); - length += n; - } -# else - { /* Convert. */ - DCHAR_T *converted = result + length; - size_t converted_len = allocated - length; -# if DCHAR_IS_TCHAR - /* Convert from UTF-16 to locale encoding. */ - converted = - u16_conv_to_encoding (locale_charset (), - iconveh_question_mark, - arg, arg_end - arg, NULL, - converted, &converted_len); -# else - /* Convert from UTF-16 to UTF-8/UTF-32. */ - converted = - U16_TO_DCHAR (arg, arg_end - arg, - converted, &converted_len); -# endif - if (converted == NULL) - { - int saved_errno = errno; - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = saved_errno; - return NULL; - } - if (converted != result + length) - { - ENSURE_ALLOCATION (xsum (length, converted_len)); - DCHAR_CPY (result + length, converted, converted_len); - free (converted); - } - length += converted_len; - } -# endif - - if (characters < width && (dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - break; - - case TYPE_U32_STRING: - { - const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; - const uint32_t *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only PRECISION characters, from the left. */ - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count = u32_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of - characters. */ - arg_end = arg; - characters = 0; - for (;;) - { - int count = u32_strmblen (arg_end); - if (count == 0) - break; - if (count < 0) - { - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + u32_strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_UINT32_T - { - size_t n = arg_end - arg; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_CPY (result + length, arg, n); - length += n; - } -# else - { /* Convert. */ - DCHAR_T *converted = result + length; - size_t converted_len = allocated - length; -# if DCHAR_IS_TCHAR - /* Convert from UTF-32 to locale encoding. */ - converted = - u32_conv_to_encoding (locale_charset (), - iconveh_question_mark, - arg, arg_end - arg, NULL, - converted, &converted_len); -# else - /* Convert from UTF-32 to UTF-8/UTF-16. */ - converted = - U32_TO_DCHAR (arg, arg_end - arg, - converted, &converted_len); -# endif - if (converted == NULL) - { - int saved_errno = errno; - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = saved_errno; - return NULL; - } - if (converted != result + length) - { - ENSURE_ALLOCATION (xsum (length, converted_len)); - DCHAR_CPY (result + length, converted, converted_len); - free (converted); - } - length += converted_len; - } -# endif - - if (characters < width && (dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } - break; - - default: - abort (); - } - } -#endif -#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T - else if (dp->conversion == 's' -# if WIDE_CHAR_VERSION - && a.arg[dp->arg_index].type != TYPE_WIDE_STRING -# else - && a.arg[dp->arg_index].type == TYPE_WIDE_STRING -# endif - ) - { - /* The normal handling of the 's' directive below requires - allocating a temporary buffer. The determination of its - length (tmp_length), in the case when a precision is - specified, below requires a conversion between a char[] - string and a wchar_t[] wide string. It could be done, but - we have no guarantee that the implementation of sprintf will - use the exactly same algorithm. Without this guarantee, it - is possible to have buffer overrun bugs. In order to avoid - such bugs, we implement the entire processing of the 's' - directive ourselves. */ - int flags = dp->flags; - int has_width; - size_t width; - int has_precision; - size_t precision; - - has_width = 0; - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - has_width = 1; - } - - has_precision = 0; - precision = 6; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - -# if WIDE_CHAR_VERSION - /* %s in vasnwprintf. See the specification of fwprintf. */ - { - const char *arg = a.arg[dp->arg_index].a.a_string; - const char *arg_end; - size_t characters; - - if (has_precision) - { - /* Use only as many bytes as needed to produce PRECISION - wide characters, from the left. */ -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - for (; precision > 0; precision--) - { - int count; -# if HAVE_MBRTOWC - count = mbrlen (arg_end, MB_CUR_MAX, &state); -# else - count = mblen (arg_end, MB_CUR_MAX); -# endif - if (count == 0) - /* Found the terminating NUL. */ - break; - if (count < 0) - { - /* Invalid or incomplete multibyte character. */ - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else if (has_width) - { - /* Use the entire string, and count the number of wide - characters. */ -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - for (;;) - { - int count; -# if HAVE_MBRTOWC - count = mbrlen (arg_end, MB_CUR_MAX, &state); -# else - count = mblen (arg_end, MB_CUR_MAX); -# endif - if (count == 0) - /* Found the terminating NUL. */ - break; - if (count < 0) - { - /* Invalid or incomplete multibyte character. */ - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end += count; - characters++; - } - } - else - { - /* Use the entire string. */ - arg_end = arg + strlen (arg); - /* The number of characters doesn't matter. */ - characters = 0; - } - - if (characters < width && !(dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - - if (has_precision || has_width) - { - /* We know the number of wide characters in advance. */ - size_t remaining; -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - ENSURE_ALLOCATION (xsum (length, characters)); - for (remaining = characters; remaining > 0; remaining--) - { - wchar_t wc; - int count; -# if HAVE_MBRTOWC - count = mbrtowc (&wc, arg, arg_end - arg, &state); -# else - count = mbtowc (&wc, arg, arg_end - arg); -# endif - if (count <= 0) - /* mbrtowc not consistent with mbrlen, or mbtowc - not consistent with mblen. */ - abort (); - result[length++] = wc; - arg += count; - } - if (!(arg == arg_end)) - abort (); - } - else - { -# if HAVE_MBRTOWC - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - while (arg < arg_end) - { - wchar_t wc; - int count; -# if HAVE_MBRTOWC - count = mbrtowc (&wc, arg, arg_end - arg, &state); -# else - count = mbtowc (&wc, arg, arg_end - arg); -# endif - if (count <= 0) - /* mbrtowc not consistent with mbrlen, or mbtowc - not consistent with mblen. */ - abort (); - ENSURE_ALLOCATION (xsum (length, 1)); - result[length++] = wc; - arg += count; - } - } - - if (characters < width && (dp->flags & FLAG_LEFT)) - { - size_t n = width - characters; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } -# else - /* %ls in vasnprintf. See the specification of fprintf. */ - { - const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; - const wchar_t *arg_end; - size_t characters; -# if !DCHAR_IS_TCHAR - /* This code assumes that TCHAR_T is 'char'. */ - verify (sizeof (TCHAR_T) == 1); - TCHAR_T *tmpsrc; - DCHAR_T *tmpdst; - size_t tmpdst_len; -# endif - size_t w; - - if (has_precision) - { - /* Use only as many wide characters as needed to produce - at most PRECISION bytes, from the left. */ -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - while (precision > 0) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg_end == 0) - /* Found the terminating null wide character. */ - break; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - count = wcrtomb (cbuf, *arg_end, &state); -# else - count = wctomb (cbuf, *arg_end); -# endif - if (count < 0) - { - /* Cannot convert. */ - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - if (precision < count) - break; - arg_end++; - characters += count; - precision -= count; - } - } -# if DCHAR_IS_TCHAR - else if (has_width) -# else - else -# endif - { - /* Use the entire string, and count the number of - bytes. */ -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - arg_end = arg; - characters = 0; - for (;;) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg_end == 0) - /* Found the terminating null wide character. */ - break; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - count = wcrtomb (cbuf, *arg_end, &state); -# else - count = wctomb (cbuf, *arg_end); -# endif - if (count < 0) - { - /* Cannot convert. */ - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - arg_end++; - characters += count; - } - } -# if DCHAR_IS_TCHAR - else - { - /* Use the entire string. */ - arg_end = arg + local_wcslen (arg); - /* The number of bytes doesn't matter. */ - characters = 0; - } -# endif - -# if !DCHAR_IS_TCHAR - /* Convert the string into a piece of temporary memory. */ - tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); - if (tmpsrc == NULL) - goto out_of_memory; - { - TCHAR_T *tmpptr = tmpsrc; - size_t remaining; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - for (remaining = characters; remaining > 0; ) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg == 0) - abort (); -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - count = wcrtomb (cbuf, *arg, &state); -# else - count = wctomb (cbuf, *arg); -# endif - if (count <= 0) - /* Inconsistency. */ - abort (); - memcpy (tmpptr, cbuf, count); - tmpptr += count; - arg++; - remaining -= count; - } - if (!(arg == arg_end)) - abort (); - } - - /* Convert from TCHAR_T[] to DCHAR_T[]. */ - tmpdst = - DCHAR_CONV_FROM_ENCODING (locale_charset (), - iconveh_question_mark, - tmpsrc, characters, - NULL, - NULL, &tmpdst_len); - if (tmpdst == NULL) - { - int saved_errno = errno; - free (tmpsrc); - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = saved_errno; - return NULL; - } - free (tmpsrc); -# endif - - if (has_width) - { -# if ENABLE_UNISTDIO - /* Outside POSIX, it's preferable to compare the width - against the number of _characters_ of the converted - value. */ - w = DCHAR_MBSNLEN (result + length, characters); -# else - /* The width is compared against the number of _bytes_ - of the converted value, says POSIX. */ - w = characters; -# endif - } - else - /* w doesn't matter. */ - w = 0; - - if (w < width && !(dp->flags & FLAG_LEFT)) - { - size_t n = width - w; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - -# if DCHAR_IS_TCHAR - if (has_precision || has_width) - { - /* We know the number of bytes in advance. */ - size_t remaining; -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - ENSURE_ALLOCATION (xsum (length, characters)); - for (remaining = characters; remaining > 0; ) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg == 0) - abort (); -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - count = wcrtomb (cbuf, *arg, &state); -# else - count = wctomb (cbuf, *arg); -# endif - if (count <= 0) - /* Inconsistency. */ - abort (); - memcpy (result + length, cbuf, count); - length += count; - arg++; - remaining -= count; - } - if (!(arg == arg_end)) - abort (); - } - else - { -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - mbstate_t state; - memset (&state, '\0', sizeof (mbstate_t)); -# endif - while (arg < arg_end) - { - char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ - int count; - - if (*arg == 0) - abort (); -# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t - count = wcrtomb (cbuf, *arg, &state); -# else - count = wctomb (cbuf, *arg); -# endif - if (count <= 0) - { - /* Cannot convert. */ - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EILSEQ; - return NULL; - } - ENSURE_ALLOCATION (xsum (length, count)); - memcpy (result + length, cbuf, count); - length += count; - arg++; - } - } -# else - ENSURE_ALLOCATION (xsum (length, tmpdst_len)); - DCHAR_CPY (result + length, tmpdst, tmpdst_len); - free (tmpdst); - length += tmpdst_len; -# endif - - if (w < width && (dp->flags & FLAG_LEFT)) - { - size_t n = width - w; - ENSURE_ALLOCATION (xsum (length, n)); - DCHAR_SET (result + length, ' ', n); - length += n; - } - } -# endif - } -#endif -#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL - else if ((dp->conversion == 'a' || dp->conversion == 'A') -# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) - && (0 -# if NEED_PRINTF_DOUBLE - || a.arg[dp->arg_index].type == TYPE_DOUBLE -# endif -# if NEED_PRINTF_LONG_DOUBLE - || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE -# endif - ) -# endif - ) - { - arg_type type = a.arg[dp->arg_index].type; - int flags = dp->flags; - size_t width; - int has_precision; - size_t precision; - size_t tmp_length; - size_t count; - DCHAR_T tmpbuf[700]; - DCHAR_T *tmp; - DCHAR_T *pad_ptr; - DCHAR_T *p; - - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - } - - has_precision = 0; - precision = 0; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - - /* Allocate a temporary buffer of sufficient size. */ - if (type == TYPE_LONGDOUBLE) - tmp_length = - (unsigned int) ((LDBL_DIG + 1) - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - else - tmp_length = - (unsigned int) ((DBL_DIG + 1) - * 0.831 /* decimal -> hexadecimal */ - ) - + 1; /* turn floor into ceil */ - if (tmp_length < precision) - tmp_length = precision; - /* Account for sign, decimal point etc. */ - tmp_length = xsum (tmp_length, 12); - - if (tmp_length < width) - tmp_length = width; - - tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ - - if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) - tmp = tmpbuf; - else - { - size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); - - if (size_overflow_p (tmp_memsize)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - tmp = (DCHAR_T *) malloc (tmp_memsize); - if (tmp == NULL) - /* Out of memory. */ - goto out_of_memory; - } - - pad_ptr = NULL; - p = tmp; - if (type == TYPE_LONGDOUBLE) - { -# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE - long double arg = a.arg[dp->arg_index].a.a_longdouble; - - if (isnanl (arg)) - { - if (dp->conversion == 'A') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - DECL_LONG_DOUBLE_ROUNDING - - BEGIN_LONG_DOUBLE_ROUNDING (); - - if (signbit (arg)) /* arg < 0.0L or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0L && arg + arg == arg) - { - if (dp->conversion == 'A') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { - int exponent; - long double mantissa; - - if (arg > 0.0L) - mantissa = printf_frexpl (arg, &exponent); - else - { - exponent = 0; - mantissa = 0.0L; - } - - if (has_precision - && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) - { - /* Round the mantissa. */ - long double tail = mantissa; - size_t q; - - for (q = precision; ; q--) - { - int digit = (int) tail; - tail -= digit; - if (q == 0) - { - if (digit & 1 ? tail >= 0.5L : tail > 0.5L) - tail = 1 - tail; - else - tail = - tail; - break; - } - tail *= 16.0L; - } - if (tail != 0.0L) - for (q = precision; q > 0; q--) - tail *= 0.0625L; - mantissa += tail; - } - - *p++ = '0'; - *p++ = dp->conversion - 'A' + 'X'; - pad_ptr = p; - { - int digit; - - digit = (int) mantissa; - mantissa -= digit; - *p++ = '0' + digit; - if ((flags & FLAG_ALT) - || mantissa > 0.0L || precision > 0) - { - *p++ = decimal_point_char (); - /* This loop terminates because we assume - that FLT_RADIX is a power of 2. */ - while (mantissa > 0.0L) - { - mantissa *= 16.0L; - digit = (int) mantissa; - mantissa -= digit; - *p++ = digit - + (digit < 10 - ? '0' - : dp->conversion - 10); - if (precision > 0) - precision--; - } - while (precision > 0) - { - *p++ = '0'; - precision--; - } - } - } - *p++ = dp->conversion - 'A' + 'P'; -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - { '%', '+', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - - END_LONG_DOUBLE_ROUNDING (); - } -# else - abort (); -# endif - } - else - { -# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE - double arg = a.arg[dp->arg_index].a.a_double; - - if (isnand (arg)) - { - if (dp->conversion == 'A') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - - if (signbit (arg)) /* arg < 0.0 or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0 && arg + arg == arg) - { - if (dp->conversion == 'A') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { - int exponent; - double mantissa; - - if (arg > 0.0) - mantissa = printf_frexp (arg, &exponent); - else - { - exponent = 0; - mantissa = 0.0; - } - - if (has_precision - && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) - { - /* Round the mantissa. */ - double tail = mantissa; - size_t q; - - for (q = precision; ; q--) - { - int digit = (int) tail; - tail -= digit; - if (q == 0) - { - if (digit & 1 ? tail >= 0.5 : tail > 0.5) - tail = 1 - tail; - else - tail = - tail; - break; - } - tail *= 16.0; - } - if (tail != 0.0) - for (q = precision; q > 0; q--) - tail *= 0.0625; - mantissa += tail; - } - - *p++ = '0'; - *p++ = dp->conversion - 'A' + 'X'; - pad_ptr = p; - { - int digit; - - digit = (int) mantissa; - mantissa -= digit; - *p++ = '0' + digit; - if ((flags & FLAG_ALT) - || mantissa > 0.0 || precision > 0) - { - *p++ = decimal_point_char (); - /* This loop terminates because we assume - that FLT_RADIX is a power of 2. */ - while (mantissa > 0.0) - { - mantissa *= 16.0; - digit = (int) mantissa; - mantissa -= digit; - *p++ = digit - + (digit < 10 - ? '0' - : dp->conversion - 10); - if (precision > 0) - precision--; - } - while (precision > 0) - { - *p++ = '0'; - precision--; - } - } - } - *p++ = dp->conversion - 'A' + 'P'; -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - { '%', '+', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - } -# else - abort (); -# endif - } - - /* The generated string now extends from tmp to p, with the - zero padding insertion point being at pad_ptr. */ - count = p - tmp; - - if (count < width) - { - size_t pad = width - count; - DCHAR_T *end = p + pad; - - if (flags & FLAG_LEFT) - { - /* Pad with spaces on the right. */ - for (; pad > 0; pad--) - *p++ = ' '; - } - else if ((flags & FLAG_ZERO) && pad_ptr != NULL) - { - /* Pad with zeroes. */ - DCHAR_T *q = end; - - while (p > pad_ptr) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = '0'; - } - else - { - /* Pad with spaces on the left. */ - DCHAR_T *q = end; - - while (p > tmp) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = ' '; - } - - p = end; - } - - count = p - tmp; - - if (count >= tmp_length) - /* tmp_length was incorrectly calculated - fix the - code above! */ - abort (); - - /* Make room for the result. */ - if (count >= allocated - length) - { - size_t n = xsum (length, count); - - ENSURE_ALLOCATION (n); - } - - /* Append the result. */ - memcpy (result + length, tmp, count * sizeof (DCHAR_T)); - if (tmp != tmpbuf) - free (tmp); - length += count; - } -#endif -#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL - else if ((dp->conversion == 'f' || dp->conversion == 'F' - || dp->conversion == 'e' || dp->conversion == 'E' - || dp->conversion == 'g' || dp->conversion == 'G' - || dp->conversion == 'a' || dp->conversion == 'A') - && (0 -# if NEED_PRINTF_DOUBLE - || a.arg[dp->arg_index].type == TYPE_DOUBLE -# elif NEED_PRINTF_INFINITE_DOUBLE - || (a.arg[dp->arg_index].type == TYPE_DOUBLE - /* The systems (mingw) which produce wrong output - for Inf, -Inf, and NaN also do so for -0.0. - Therefore we treat this case here as well. */ - && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) -# endif -# if NEED_PRINTF_LONG_DOUBLE - || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE -# elif NEED_PRINTF_INFINITE_LONG_DOUBLE - || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE - /* Some systems produce wrong output for Inf, - -Inf, and NaN. Some systems in this category - (IRIX 5.3) also do so for -0.0. Therefore we - treat this case here as well. */ - && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) -# endif - )) - { -# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) - arg_type type = a.arg[dp->arg_index].type; -# endif - int flags = dp->flags; - size_t width; - size_t count; - int has_precision; - size_t precision; - size_t tmp_length; - DCHAR_T tmpbuf[700]; - DCHAR_T *tmp; - DCHAR_T *pad_ptr; - DCHAR_T *p; - - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } - } - - has_precision = 0; - precision = 0; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } - - /* POSIX specifies the default precision to be 6 for %f, %F, - %e, %E, but not for %g, %G. Implementations appear to use - the same default precision also for %g, %G. But for %a, %A, - the default precision is 0. */ - if (!has_precision) - if (!(dp->conversion == 'a' || dp->conversion == 'A')) - precision = 6; - - /* Allocate a temporary buffer of sufficient size. */ -# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE - tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); -# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE - tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); -# elif NEED_PRINTF_LONG_DOUBLE - tmp_length = LDBL_DIG + 1; -# elif NEED_PRINTF_DOUBLE - tmp_length = DBL_DIG + 1; -# else - tmp_length = 0; -# endif - if (tmp_length < precision) - tmp_length = precision; -# if NEED_PRINTF_LONG_DOUBLE -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - if (type == TYPE_LONGDOUBLE) -# endif - if (dp->conversion == 'f' || dp->conversion == 'F') - { - long double arg = a.arg[dp->arg_index].a.a_longdouble; - if (!(isnanl (arg) || arg + arg == arg)) - { - /* arg is finite and nonzero. */ - int exponent = floorlog10l (arg < 0 ? -arg : arg); - if (exponent >= 0 && tmp_length < exponent + precision) - tmp_length = exponent + precision; - } - } -# endif -# if NEED_PRINTF_DOUBLE -# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE - if (type == TYPE_DOUBLE) -# endif - if (dp->conversion == 'f' || dp->conversion == 'F') - { - double arg = a.arg[dp->arg_index].a.a_double; - if (!(isnand (arg) || arg + arg == arg)) - { - /* arg is finite and nonzero. */ - int exponent = floorlog10 (arg < 0 ? -arg : arg); - if (exponent >= 0 && tmp_length < exponent + precision) - tmp_length = exponent + precision; - } - } -# endif - /* Account for sign, decimal point etc. */ - tmp_length = xsum (tmp_length, 12); - - if (tmp_length < width) - tmp_length = width; - - tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ - - if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) - tmp = tmpbuf; - else - { - size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); - - if (size_overflow_p (tmp_memsize)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - tmp = (DCHAR_T *) malloc (tmp_memsize); - if (tmp == NULL) - /* Out of memory. */ - goto out_of_memory; - } - - pad_ptr = NULL; - p = tmp; - -# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - if (type == TYPE_LONGDOUBLE) -# endif - { - long double arg = a.arg[dp->arg_index].a.a_longdouble; - - if (isnanl (arg)) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - DECL_LONG_DOUBLE_ROUNDING - - BEGIN_LONG_DOUBLE_ROUNDING (); - - if (signbit (arg)) /* arg < 0.0L or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0L && arg + arg == arg) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { -# if NEED_PRINTF_LONG_DOUBLE - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - char *digits; - size_t ndigits; - - digits = - scale10_round_decimal_long_double (arg, precision); - if (digits == NULL) - { - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - ndigits = strlen (digits); - - if (ndigits > precision) - do - { - --ndigits; - *p++ = digits[ndigits]; - } - while (ndigits > precision); - else - *p++ = '0'; - /* Here ndigits <= precision. */ - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > ndigits; precision--) - *p++ = '0'; - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - int exponent; - - if (arg == 0.0L) - { - exponent = 0; - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else - { - /* arg > 0.0L. */ - int adjusted; - char *digits; - size_t ndigits; - - exponent = floorlog10l (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_long_double (arg, - (int)precision - exponent); - if (digits == NULL) - { - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - ndigits = strlen (digits); - - if (ndigits == precision + 1) - break; - if (ndigits < precision - || ndigits > precision + 2) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits == precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision+1. */ - if (is_borderline (digits, precision)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_long_double (arg, - (int)precision - exponent + 1); - if (digits2 == NULL) - { - free (digits); - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - if (strlen (digits2) == precision + 1) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision+1. */ - - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - - *p++ = dp->conversion; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - { '%', '+', '.', '2', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+.2d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+.2d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - if (precision == 0) - precision = 1; - /* precision >= 1. */ - - if (arg == 0.0L) - /* The exponent is 0, >= -4, < precision. - Use fixed-point notation. */ - { - size_t ndigits = precision; - /* Number of trailing zeroes that have to be - dropped. */ - size_t nzeroes = - (flags & FLAG_ALT ? 0 : precision - 1); - - --ndigits; - *p++ = '0'; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = '0'; - } - } - } - else - { - /* arg > 0.0L. */ - int exponent; - int adjusted; - char *digits; - size_t ndigits; - size_t nzeroes; - - exponent = floorlog10l (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_long_double (arg, - (int)(precision - 1) - exponent); - if (digits == NULL) - { - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - ndigits = strlen (digits); - - if (ndigits == precision) - break; - if (ndigits < precision - 1 - || ndigits > precision + 1) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits < precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision. */ - if (is_borderline (digits, precision - 1)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_long_double (arg, - (int)(precision - 1) - exponent + 1); - if (digits2 == NULL) - { - free (digits); - END_LONG_DOUBLE_ROUNDING (); - goto out_of_memory; - } - if (strlen (digits2) == precision) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision. */ - - /* Determine the number of trailing zeroes - that have to be dropped. */ - nzeroes = 0; - if ((flags & FLAG_ALT) == 0) - while (nzeroes < ndigits - && digits[nzeroes] == '0') - nzeroes++; - - /* The exponent is now determined. */ - if (exponent >= -4 - && exponent < (long)precision) - { - /* Fixed-point notation: - max(exponent,0)+1 digits, then the - decimal point, then the remaining - digits without trailing zeroes. */ - if (exponent >= 0) - { - size_t ecount = exponent + 1; - /* Note: count <= precision = ndigits. */ - for (; ecount > 0; ecount--) - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - size_t ecount = -exponent - 1; - *p++ = '0'; - *p++ = decimal_point_char (); - for (; ecount > 0; ecount--) - *p++ = '0'; - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - /* Exponential notation. */ - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - { '%', '+', '.', '2', 'd', '\0' }; - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, "%+.2d", exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, "%+.2d", exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } -# endif - } - - free (digits); - } - } - else - abort (); -# else - /* arg is finite. */ - if (!(arg == 0.0L)) - abort (); - - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - *p++ = dp->conversion; /* 'e' or 'E' */ - *p++ = '+'; - *p++ = '0'; - *p++ = '0'; - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - *p++ = '0'; - if (flags & FLAG_ALT) - { - size_t ndigits = - (precision > 0 ? precision - 1 : 0); - *p++ = decimal_point_char (); - for (; ndigits > 0; --ndigits) - *p++ = '0'; - } - } - else if (dp->conversion == 'a' || dp->conversion == 'A') - { - *p++ = '0'; - *p++ = dp->conversion - 'A' + 'X'; - pad_ptr = p; - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - *p++ = dp->conversion - 'A' + 'P'; - *p++ = '+'; - *p++ = '0'; - } - else - abort (); -# endif - } - - END_LONG_DOUBLE_ROUNDING (); - } - } -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - else -# endif -# endif -# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE - { - double arg = a.arg[dp->arg_index].a.a_double; - - if (isnand (arg)) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; - } - else - { - *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; - } - } - else - { - int sign = 0; - - if (signbit (arg)) /* arg < 0.0 or negative zero */ - { - sign = -1; - arg = -arg; - } - - if (sign < 0) - *p++ = '-'; - else if (flags & FLAG_SHOWSIGN) - *p++ = '+'; - else if (flags & FLAG_SPACE) - *p++ = ' '; - - if (arg > 0.0 && arg + arg == arg) - { - if (dp->conversion >= 'A' && dp->conversion <= 'Z') - { - *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; - } - else - { - *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; - } - } - else - { -# if NEED_PRINTF_DOUBLE - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - char *digits; - size_t ndigits; - - digits = - scale10_round_decimal_double (arg, precision); - if (digits == NULL) - goto out_of_memory; - ndigits = strlen (digits); - - if (ndigits > precision) - do - { - --ndigits; - *p++ = digits[ndigits]; - } - while (ndigits > precision); - else - *p++ = '0'; - /* Here ndigits <= precision. */ - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > ndigits; precision--) - *p++ = '0'; - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - int exponent; - - if (arg == 0.0) - { - exponent = 0; - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else - { - /* arg > 0.0. */ - int adjusted; - char *digits; - size_t ndigits; - - exponent = floorlog10 (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_double (arg, - (int)precision - exponent); - if (digits == NULL) - goto out_of_memory; - ndigits = strlen (digits); - - if (ndigits == precision + 1) - break; - if (ndigits < precision - || ndigits > precision + 2) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits == precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision+1. */ - if (is_borderline (digits, precision)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_double (arg, - (int)precision - exponent + 1); - if (digits2 == NULL) - { - free (digits); - goto out_of_memory; - } - if (strlen (digits2) == precision + 1) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision+1. */ - - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - while (ndigits > 0) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - - free (digits); - } - - *p++ = dp->conversion; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - { '%', '+', '.', '3', 'd', '\0' }; -# else - { '%', '+', '.', '2', 'd', '\0' }; -# endif - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - { - static const char decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - "%+.3d"; -# else - "%+.2d"; -# endif - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, decimal_format, exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, decimal_format, exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } - } -# endif - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - if (precision == 0) - precision = 1; - /* precision >= 1. */ - - if (arg == 0.0) - /* The exponent is 0, >= -4, < precision. - Use fixed-point notation. */ - { - size_t ndigits = precision; - /* Number of trailing zeroes that have to be - dropped. */ - size_t nzeroes = - (flags & FLAG_ALT ? 0 : precision - 1); - - --ndigits; - *p++ = '0'; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = '0'; - } - } - } - else - { - /* arg > 0.0. */ - int exponent; - int adjusted; - char *digits; - size_t ndigits; - size_t nzeroes; - - exponent = floorlog10 (arg); - adjusted = 0; - for (;;) - { - digits = - scale10_round_decimal_double (arg, - (int)(precision - 1) - exponent); - if (digits == NULL) - goto out_of_memory; - ndigits = strlen (digits); - - if (ndigits == precision) - break; - if (ndigits < precision - 1 - || ndigits > precision + 1) - /* The exponent was not guessed - precisely enough. */ - abort (); - if (adjusted) - /* None of two values of exponent is - the right one. Prevent an endless - loop. */ - abort (); - free (digits); - if (ndigits < precision) - exponent -= 1; - else - exponent += 1; - adjusted = 1; - } - /* Here ndigits = precision. */ - if (is_borderline (digits, precision - 1)) - { - /* Maybe the exponent guess was too high - and a smaller exponent can be reached - by turning a 10...0 into 9...9x. */ - char *digits2 = - scale10_round_decimal_double (arg, - (int)(precision - 1) - exponent + 1); - if (digits2 == NULL) - { - free (digits); - goto out_of_memory; - } - if (strlen (digits2) == precision) - { - free (digits); - digits = digits2; - exponent -= 1; - } - else - free (digits2); - } - /* Here ndigits = precision. */ - - /* Determine the number of trailing zeroes - that have to be dropped. */ - nzeroes = 0; - if ((flags & FLAG_ALT) == 0) - while (nzeroes < ndigits - && digits[nzeroes] == '0') - nzeroes++; - - /* The exponent is now determined. */ - if (exponent >= -4 - && exponent < (long)precision) - { - /* Fixed-point notation: - max(exponent,0)+1 digits, then the - decimal point, then the remaining - digits without trailing zeroes. */ - if (exponent >= 0) - { - size_t ecount = exponent + 1; - /* Note: ecount <= precision = ndigits. */ - for (; ecount > 0; ecount--) - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - size_t ecount = -exponent - 1; - *p++ = '0'; - *p++ = decimal_point_char (); - for (; ecount > 0; ecount--) - *p++ = '0'; - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - } - else - { - /* Exponential notation. */ - *p++ = digits[--ndigits]; - if ((flags & FLAG_ALT) || ndigits > nzeroes) - { - *p++ = decimal_point_char (); - while (ndigits > nzeroes) - { - --ndigits; - *p++ = digits[ndigits]; - } - } - *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ -# if WIDE_CHAR_VERSION - { - static const wchar_t decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - { '%', '+', '.', '3', 'd', '\0' }; -# else - { '%', '+', '.', '2', 'd', '\0' }; -# endif - SNPRINTF (p, 6 + 1, decimal_format, exponent); - } - while (*p != '\0') - p++; -# else - { - static const char decimal_format[] = - /* Produce the same number of exponent digits - as the native printf implementation. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - "%+.3d"; -# else - "%+.2d"; -# endif - if (sizeof (DCHAR_T) == 1) - { - sprintf ((char *) p, decimal_format, exponent); - while (*p != '\0') - p++; - } - else - { - char expbuf[6 + 1]; - const char *ep; - sprintf (expbuf, decimal_format, exponent); - for (ep = expbuf; (*p = *ep) != '\0'; ep++) - p++; - } - } -# endif - } - - free (digits); - } - } - else - abort (); -# else - /* arg is finite. */ - if (!(arg == 0.0)) - abort (); - - pad_ptr = p; - - if (dp->conversion == 'f' || dp->conversion == 'F') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - } - else if (dp->conversion == 'e' || dp->conversion == 'E') - { - *p++ = '0'; - if ((flags & FLAG_ALT) || precision > 0) - { - *p++ = decimal_point_char (); - for (; precision > 0; precision--) - *p++ = '0'; - } - *p++ = dp->conversion; /* 'e' or 'E' */ - *p++ = '+'; - /* Produce the same number of exponent digits as - the native printf implementation. */ -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - *p++ = '0'; -# endif - *p++ = '0'; - *p++ = '0'; - } - else if (dp->conversion == 'g' || dp->conversion == 'G') - { - *p++ = '0'; - if (flags & FLAG_ALT) - { - size_t ndigits = - (precision > 0 ? precision - 1 : 0); - *p++ = decimal_point_char (); - for (; ndigits > 0; --ndigits) - *p++ = '0'; - } - } - else - abort (); -# endif - } - } - } -# endif - - /* The generated string now extends from tmp to p, with the - zero padding insertion point being at pad_ptr. */ - count = p - tmp; - - if (count < width) - { - size_t pad = width - count; - DCHAR_T *end = p + pad; - - if (flags & FLAG_LEFT) - { - /* Pad with spaces on the right. */ - for (; pad > 0; pad--) - *p++ = ' '; - } - else if ((flags & FLAG_ZERO) && pad_ptr != NULL) - { - /* Pad with zeroes. */ - DCHAR_T *q = end; - - while (p > pad_ptr) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = '0'; - } - else - { - /* Pad with spaces on the left. */ - DCHAR_T *q = end; - - while (p > tmp) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = ' '; - } - - p = end; - } - - count = p - tmp; - - if (count >= tmp_length) - /* tmp_length was incorrectly calculated - fix the - code above! */ - abort (); - - /* Make room for the result. */ - if (count >= allocated - length) - { - size_t n = xsum (length, count); - - ENSURE_ALLOCATION (n); - } - - /* Append the result. */ - memcpy (result + length, tmp, count * sizeof (DCHAR_T)); - if (tmp != tmpbuf) - free (tmp); - length += count; - } -#endif - else - { - arg_type type = a.arg[dp->arg_index].type; - int flags = dp->flags; -#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - int has_width; -#endif -#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - size_t width; -#endif -#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION - int has_precision; - size_t precision; -#endif -#if NEED_PRINTF_UNBOUNDED_PRECISION - int prec_ourselves; -#else -# define prec_ourselves 0 -#endif -#if NEED_PRINTF_FLAG_LEFTADJUST -# define pad_ourselves 1 -#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - int pad_ourselves; -#else -# define pad_ourselves 0 -#endif - TCHAR_T *fbp; - unsigned int prefix_count; - int prefixes[2] IF_LINT (= { 0 }); - int orig_errno; -#if !USE_SNPRINTF - size_t tmp_length; - TCHAR_T tmpbuf[700]; - TCHAR_T *tmp; -#endif - -#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - has_width = 0; -#endif -#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - width = 0; - if (dp->width_start != dp->width_end) - { - if (dp->width_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->width_arg_index].a.a_int; - width = arg; - if (arg < 0) - { - /* "A negative field width is taken as a '-' flag - followed by a positive field width." */ - flags |= FLAG_LEFT; - width = -width; - } - } - else - { - const FCHAR_T *digitp = dp->width_start; - - do - width = xsum (xtimes (width, 10), *digitp++ - '0'); - while (digitp != dp->width_end); - } -#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - has_width = 1; -#endif - } -#endif - -#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION - has_precision = 0; - precision = 6; - if (dp->precision_start != dp->precision_end) - { - if (dp->precision_arg_index != ARG_NONE) - { - int arg; - - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - arg = a.arg[dp->precision_arg_index].a.a_int; - /* "A negative precision is taken as if the precision - were omitted." */ - if (arg >= 0) - { - precision = arg; - has_precision = 1; - } - } - else - { - const FCHAR_T *digitp = dp->precision_start + 1; - - precision = 0; - while (digitp != dp->precision_end) - precision = xsum (xtimes (precision, 10), *digitp++ - '0'); - has_precision = 1; - } - } -#endif - - /* Decide whether to handle the precision ourselves. */ -#if NEED_PRINTF_UNBOUNDED_PRECISION - switch (dp->conversion) - { - case 'd': case 'i': case 'u': - case 'o': - case 'x': case 'X': case 'p': - prec_ourselves = has_precision && (precision > 0); - break; - default: - prec_ourselves = 0; - break; - } -#endif - - /* Decide whether to perform the padding ourselves. */ -#if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) - switch (dp->conversion) - { -# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO - /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need - to perform the padding after this conversion. Functions - with unistdio extensions perform the padding based on - character count rather than element count. */ - case 'c': case 's': -# endif -# if NEED_PRINTF_FLAG_ZERO - case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': - case 'a': case 'A': -# endif - pad_ourselves = 1; - break; - default: - pad_ourselves = prec_ourselves; - break; - } -#endif - -#if !USE_SNPRINTF - /* Allocate a temporary buffer of sufficient size for calling - sprintf. */ - tmp_length = - MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, - flags, width, has_precision, precision, - pad_ourselves); - - if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) - tmp = tmpbuf; - else - { - size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); - - if (size_overflow_p (tmp_memsize)) - /* Overflow, would lead to out of memory. */ - goto out_of_memory; - tmp = (TCHAR_T *) malloc (tmp_memsize); - if (tmp == NULL) - /* Out of memory. */ - goto out_of_memory; - } -#endif - - /* Construct the format string for calling snprintf or - sprintf. */ - fbp = buf; - *fbp++ = '%'; -#if NEED_PRINTF_FLAG_GROUPING - /* The underlying implementation doesn't support the ' flag. - Produce no grouping characters in this case; this is - acceptable because the grouping is locale dependent. */ -#else - if (flags & FLAG_GROUP) - *fbp++ = '\''; -#endif - if (flags & FLAG_LEFT) - *fbp++ = '-'; - if (flags & FLAG_SHOWSIGN) - *fbp++ = '+'; - if (flags & FLAG_SPACE) - *fbp++ = ' '; - if (flags & FLAG_ALT) - *fbp++ = '#'; -#if __GLIBC__ >= 2 && !defined __UCLIBC__ - if (flags & FLAG_LOCALIZED) - *fbp++ = 'I'; -#endif - if (!pad_ourselves) - { - if (flags & FLAG_ZERO) - *fbp++ = '0'; - if (dp->width_start != dp->width_end) - { - size_t n = dp->width_end - dp->width_start; - /* The width specification is known to consist only - of standard ASCII characters. */ - if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) - { - memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); - fbp += n; - } - else - { - const FCHAR_T *mp = dp->width_start; - do - *fbp++ = *mp++; - while (--n > 0); - } - } - } - if (!prec_ourselves) - { - if (dp->precision_start != dp->precision_end) - { - size_t n = dp->precision_end - dp->precision_start; - /* The precision specification is known to consist only - of standard ASCII characters. */ - if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) - { - memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); - fbp += n; - } - else - { - const FCHAR_T *mp = dp->precision_start; - do - *fbp++ = *mp++; - while (--n > 0); - } - } - } - - switch (type) - { -#if HAVE_LONG_LONG_INT - case TYPE_LONGLONGINT: - case TYPE_ULONGLONGINT: -# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ - *fbp++ = 'I'; - *fbp++ = '6'; - *fbp++ = '4'; - break; -# else - *fbp++ = 'l'; -# endif -#endif - /*FALLTHROUGH*/ - case TYPE_LONGINT: - case TYPE_ULONGINT: -#if HAVE_WINT_T - case TYPE_WIDE_CHAR: -#endif -#if HAVE_WCHAR_T - case TYPE_WIDE_STRING: -#endif - *fbp++ = 'l'; - break; - case TYPE_LONGDOUBLE: - *fbp++ = 'L'; - break; - default: - break; - } -#if NEED_PRINTF_DIRECTIVE_F - if (dp->conversion == 'F') - *fbp = 'f'; - else -#endif - *fbp = dp->conversion; -#if USE_SNPRINTF -# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) - fbp[1] = '%'; - fbp[2] = 'n'; - fbp[3] = '\0'; -# else - /* On glibc2 systems from glibc >= 2.3 - probably also older - ones - we know that snprintf's return value conforms to - ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and - gl_SNPRINTF_TRUNCATION_C99 pass. - Therefore we can avoid using %n in this situation. - On glibc2 systems from 2004-10-18 or newer, the use of %n - in format strings in writable memory may crash the program - (if compiled with _FORTIFY_SOURCE=2), so we should avoid it - in this situation. */ - /* On native Windows systems (such as mingw), we can avoid using - %n because: - - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, - snprintf does not write more than the specified number - of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes - '4', '5', '6' into buf, not '4', '5', '\0'.) - - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf - allows us to recognize the case of an insufficient - buffer size: it returns -1 in this case. - On native Windows systems (such as mingw) where the OS is - Windows Vista, the use of %n in format strings by default - crashes the program. See - and - - So we should avoid %n in this situation. */ - fbp[1] = '\0'; -# endif -#else - fbp[1] = '\0'; -#endif - - /* Construct the arguments for calling snprintf or sprintf. */ - prefix_count = 0; - if (!pad_ourselves && dp->width_arg_index != ARG_NONE) - { - if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) - abort (); - prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; - } - if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) - { - if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) - abort (); - prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; - } - -#if USE_SNPRINTF - /* The SNPRINTF result is appended after result[0..length]. - The latter is an array of DCHAR_T; SNPRINTF appends an - array of TCHAR_T to it. This is possible because - sizeof (TCHAR_T) divides sizeof (DCHAR_T) and - alignof (TCHAR_T) <= alignof (DCHAR_T). */ -# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) - /* Ensure that maxlen below will be >= 2. Needed on BeOS, - where an snprintf() with maxlen==1 acts like sprintf(). */ - ENSURE_ALLOCATION (xsum (length, - (2 + TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR)); - /* Prepare checking whether snprintf returns the count - via %n. */ - *(TCHAR_T *) (result + length) = '\0'; -#endif - - orig_errno = errno; - - for (;;) - { - int count = -1; - -#if USE_SNPRINTF - int retcount = 0; - size_t maxlen = allocated - length; - /* SNPRINTF can fail if its second argument is - > INT_MAX. */ - if (maxlen > INT_MAX / TCHARS_PER_DCHAR) - maxlen = INT_MAX / TCHARS_PER_DCHAR; - maxlen = maxlen * TCHARS_PER_DCHAR; -# define SNPRINTF_BUF(arg) \ - switch (prefix_count) \ - { \ - case 0: \ - retcount = SNPRINTF ((TCHAR_T *) (result + length), \ - maxlen, buf, \ - arg, &count); \ - break; \ - case 1: \ - retcount = SNPRINTF ((TCHAR_T *) (result + length), \ - maxlen, buf, \ - prefixes[0], arg, &count); \ - break; \ - case 2: \ - retcount = SNPRINTF ((TCHAR_T *) (result + length), \ - maxlen, buf, \ - prefixes[0], prefixes[1], arg, \ - &count); \ - break; \ - default: \ - abort (); \ - } -#else -# define SNPRINTF_BUF(arg) \ - switch (prefix_count) \ - { \ - case 0: \ - count = sprintf (tmp, buf, arg); \ - break; \ - case 1: \ - count = sprintf (tmp, buf, prefixes[0], arg); \ - break; \ - case 2: \ - count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ - arg); \ - break; \ - default: \ - abort (); \ - } -#endif - - errno = 0; - switch (type) - { - case TYPE_SCHAR: - { - int arg = a.arg[dp->arg_index].a.a_schar; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UCHAR: - { - unsigned int arg = a.arg[dp->arg_index].a.a_uchar; - SNPRINTF_BUF (arg); - } - break; - case TYPE_SHORT: - { - int arg = a.arg[dp->arg_index].a.a_short; - SNPRINTF_BUF (arg); - } - break; - case TYPE_USHORT: - { - unsigned int arg = a.arg[dp->arg_index].a.a_ushort; - SNPRINTF_BUF (arg); - } - break; - case TYPE_INT: - { - int arg = a.arg[dp->arg_index].a.a_int; - SNPRINTF_BUF (arg); - } - break; - case TYPE_UINT: - { - unsigned int arg = a.arg[dp->arg_index].a.a_uint; - SNPRINTF_BUF (arg); - } - break; - case TYPE_LONGINT: - { - long int arg = a.arg[dp->arg_index].a.a_longint; - SNPRINTF_BUF (arg); - } - break; - case TYPE_ULONGINT: - { - unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; - SNPRINTF_BUF (arg); - } - break; -#if HAVE_LONG_LONG_INT - case TYPE_LONGLONGINT: - { - long long int arg = a.arg[dp->arg_index].a.a_longlongint; - SNPRINTF_BUF (arg); - } - break; - case TYPE_ULONGLONGINT: - { - unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; - SNPRINTF_BUF (arg); - } - break; -#endif - case TYPE_DOUBLE: - { - double arg = a.arg[dp->arg_index].a.a_double; - SNPRINTF_BUF (arg); - } - break; - case TYPE_LONGDOUBLE: - { - long double arg = a.arg[dp->arg_index].a.a_longdouble; - SNPRINTF_BUF (arg); - } - break; - case TYPE_CHAR: - { - int arg = a.arg[dp->arg_index].a.a_char; - SNPRINTF_BUF (arg); - } - break; -#if HAVE_WINT_T - case TYPE_WIDE_CHAR: - { - wint_t arg = a.arg[dp->arg_index].a.a_wide_char; - SNPRINTF_BUF (arg); - } - break; -#endif - case TYPE_STRING: - { - const char *arg = a.arg[dp->arg_index].a.a_string; - SNPRINTF_BUF (arg); - } - break; -#if HAVE_WCHAR_T - case TYPE_WIDE_STRING: - { - const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; - SNPRINTF_BUF (arg); - } - break; -#endif - case TYPE_POINTER: - { - void *arg = a.arg[dp->arg_index].a.a_pointer; - SNPRINTF_BUF (arg); - } - break; - default: - abort (); - } - -#if USE_SNPRINTF - /* Portability: Not all implementations of snprintf() - are ISO C 99 compliant. Determine the number of - bytes that snprintf() has produced or would have - produced. */ - if (count >= 0) - { - /* Verify that snprintf() has NUL-terminated its - result. */ - if (count < maxlen - && ((TCHAR_T *) (result + length)) [count] != '\0') - abort (); - /* Portability hack. */ - if (retcount > count) - count = retcount; - } - else - { - /* snprintf() doesn't understand the '%n' - directive. */ - if (fbp[1] != '\0') - { - /* Don't use the '%n' directive; instead, look - at the snprintf() return value. */ - fbp[1] = '\0'; - continue; - } - else - { - /* Look at the snprintf() return value. */ - if (retcount < 0) - { -# if !HAVE_SNPRINTF_RETVAL_C99 - /* HP-UX 10.20 snprintf() is doubly deficient: - It doesn't understand the '%n' directive, - *and* it returns -1 (rather than the length - that would have been required) when the - buffer is too small. - But a failure at this point can also come - from other reasons than a too small buffer, - such as an invalid wide string argument to - the %ls directive, or possibly an invalid - floating-point argument. */ - size_t tmp_length = - MAX_ROOM_NEEDED (&a, dp->arg_index, - dp->conversion, type, flags, - width, - has_precision, - precision, pad_ourselves); - - if (maxlen < tmp_length) - { - /* Make more room. But try to do through - this reallocation only once. */ - size_t bigger_need = - xsum (length, - xsum (tmp_length, - TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR); - /* And always grow proportionally. - (There may be several arguments, each - needing a little more room than the - previous one.) */ - size_t bigger_need2 = - xsum (xtimes (allocated, 2), 12); - if (bigger_need < bigger_need2) - bigger_need = bigger_need2; - ENSURE_ALLOCATION (bigger_need); - continue; - } -# endif - } - else - count = retcount; - } - } -#endif - - /* Attempt to handle failure. */ - if (count < 0) - { - /* SNPRINTF or sprintf failed. Save and use the errno - that it has set, if any. */ - int saved_errno = errno; - if (saved_errno == 0) - { - if (dp->conversion == 'c' || dp->conversion == 's') - saved_errno = EILSEQ; - else - saved_errno = EINVAL; - } - - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - - errno = saved_errno; - return NULL; - } - -#if USE_SNPRINTF - /* Handle overflow of the allocated buffer. - If such an overflow occurs, a C99 compliant snprintf() - returns a count >= maxlen. However, a non-compliant - snprintf() function returns only count = maxlen - 1. To - cover both cases, test whether count >= maxlen - 1. */ - if ((unsigned int) count + 1 >= maxlen) - { - /* If maxlen already has attained its allowed maximum, - allocating more memory will not increase maxlen. - Instead of looping, bail out. */ - if (maxlen == INT_MAX / TCHARS_PER_DCHAR) - goto overflow; - else - { - /* Need at least (count + 1) * sizeof (TCHAR_T) - bytes. (The +1 is for the trailing NUL.) - But ask for (count + 2) * sizeof (TCHAR_T) - bytes, so that in the next round, we likely get - maxlen > (unsigned int) count + 1 - and so we don't get here again. - And allocate proportionally, to avoid looping - eternally if snprintf() reports a too small - count. */ - size_t n = - xmax (xsum (length, - ((unsigned int) count + 2 - + TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR), - xtimes (allocated, 2)); - - ENSURE_ALLOCATION (n); - continue; - } - } -#endif - -#if NEED_PRINTF_UNBOUNDED_PRECISION - if (prec_ourselves) - { - /* Handle the precision. */ - TCHAR_T *prec_ptr = -# if USE_SNPRINTF - (TCHAR_T *) (result + length); -# else - tmp; -# endif - size_t prefix_count; - size_t move; - - prefix_count = 0; - /* Put the additional zeroes after the sign. */ - if (count >= 1 - && (*prec_ptr == '-' || *prec_ptr == '+' - || *prec_ptr == ' ')) - prefix_count = 1; - /* Put the additional zeroes after the 0x prefix if - (flags & FLAG_ALT) || (dp->conversion == 'p'). */ - else if (count >= 2 - && prec_ptr[0] == '0' - && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) - prefix_count = 2; - - move = count - prefix_count; - if (precision > move) - { - /* Insert zeroes. */ - size_t insert = precision - move; - TCHAR_T *prec_end; - -# if USE_SNPRINTF - size_t n = - xsum (length, - (count + insert + TCHARS_PER_DCHAR - 1) - / TCHARS_PER_DCHAR); - length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; - ENSURE_ALLOCATION (n); - length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; - prec_ptr = (TCHAR_T *) (result + length); -# endif - - prec_end = prec_ptr + count; - prec_ptr += prefix_count; - - while (prec_end > prec_ptr) - { - prec_end--; - prec_end[insert] = prec_end[0]; - } - - prec_end += insert; - do - *--prec_end = '0'; - while (prec_end > prec_ptr); - - count += insert; - } - } -#endif - -#if !USE_SNPRINTF - if (count >= tmp_length) - /* tmp_length was incorrectly calculated - fix the - code above! */ - abort (); -#endif - -#if !DCHAR_IS_TCHAR - /* Convert from TCHAR_T[] to DCHAR_T[]. */ - if (dp->conversion == 'c' || dp->conversion == 's') - { - /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING - TYPE_WIDE_STRING. - The result string is not certainly ASCII. */ - const TCHAR_T *tmpsrc; - DCHAR_T *tmpdst; - size_t tmpdst_len; - /* This code assumes that TCHAR_T is 'char'. */ - verify (sizeof (TCHAR_T) == 1); -# if USE_SNPRINTF - tmpsrc = (TCHAR_T *) (result + length); -# else - tmpsrc = tmp; -# endif - tmpdst = - DCHAR_CONV_FROM_ENCODING (locale_charset (), - iconveh_question_mark, - tmpsrc, count, - NULL, - NULL, &tmpdst_len); - if (tmpdst == NULL) - { - int saved_errno = errno; - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = saved_errno; - return NULL; - } - ENSURE_ALLOCATION (xsum (length, tmpdst_len)); - DCHAR_CPY (result + length, tmpdst, tmpdst_len); - free (tmpdst); - count = tmpdst_len; - } - else - { - /* The result string is ASCII. - Simple 1:1 conversion. */ -# if USE_SNPRINTF - /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a - no-op conversion, in-place on the array starting - at (result + length). */ - if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) -# endif - { - const TCHAR_T *tmpsrc; - DCHAR_T *tmpdst; - size_t n; - -# if USE_SNPRINTF - if (result == resultbuf) - { - tmpsrc = (TCHAR_T *) (result + length); - /* ENSURE_ALLOCATION will not move tmpsrc - (because it's part of resultbuf). */ - ENSURE_ALLOCATION (xsum (length, count)); - } - else - { - /* ENSURE_ALLOCATION will move the array - (because it uses realloc(). */ - ENSURE_ALLOCATION (xsum (length, count)); - tmpsrc = (TCHAR_T *) (result + length); - } -# else - tmpsrc = tmp; - ENSURE_ALLOCATION (xsum (length, count)); -# endif - tmpdst = result + length; - /* Copy backwards, because of overlapping. */ - tmpsrc += count; - tmpdst += count; - for (n = count; n > 0; n--) - *--tmpdst = *--tmpsrc; - } - } -#endif - -#if DCHAR_IS_TCHAR && !USE_SNPRINTF - /* Make room for the result. */ - if (count > allocated - length) - { - /* Need at least count elements. But allocate - proportionally. */ - size_t n = - xmax (xsum (length, count), xtimes (allocated, 2)); - - ENSURE_ALLOCATION (n); - } -#endif - - /* Here count <= allocated - length. */ - - /* Perform padding. */ -#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION - if (pad_ourselves && has_width) - { - size_t w; -# if ENABLE_UNISTDIO - /* Outside POSIX, it's preferable to compare the width - against the number of _characters_ of the converted - value. */ - w = DCHAR_MBSNLEN (result + length, count); -# else - /* The width is compared against the number of _bytes_ - of the converted value, says POSIX. */ - w = count; -# endif - if (w < width) - { - size_t pad = width - w; - - /* Make room for the result. */ - if (xsum (count, pad) > allocated - length) - { - /* Need at least count + pad elements. But - allocate proportionally. */ - size_t n = - xmax (xsum3 (length, count, pad), - xtimes (allocated, 2)); - -# if USE_SNPRINTF - length += count; - ENSURE_ALLOCATION (n); - length -= count; -# else - ENSURE_ALLOCATION (n); -# endif - } - /* Here count + pad <= allocated - length. */ - - { -# if !DCHAR_IS_TCHAR || USE_SNPRINTF - DCHAR_T * const rp = result + length; -# else - DCHAR_T * const rp = tmp; -# endif - DCHAR_T *p = rp + count; - DCHAR_T *end = p + pad; - DCHAR_T *pad_ptr; -# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO - if (dp->conversion == 'c' - || dp->conversion == 's') - /* No zero-padding for string directives. */ - pad_ptr = NULL; - else -# endif - { - pad_ptr = (*rp == '-' ? rp + 1 : rp); - /* No zero-padding of "inf" and "nan". */ - if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') - || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) - pad_ptr = NULL; - } - /* The generated string now extends from rp to p, - with the zero padding insertion point being at - pad_ptr. */ - - count = count + pad; /* = end - rp */ - - if (flags & FLAG_LEFT) - { - /* Pad with spaces on the right. */ - for (; pad > 0; pad--) - *p++ = ' '; - } - else if ((flags & FLAG_ZERO) && pad_ptr != NULL) - { - /* Pad with zeroes. */ - DCHAR_T *q = end; - - while (p > pad_ptr) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = '0'; - } - else - { - /* Pad with spaces on the left. */ - DCHAR_T *q = end; - - while (p > rp) - *--q = *--p; - for (; pad > 0; pad--) - *p++ = ' '; - } - } - } - } -#endif - - /* Here still count <= allocated - length. */ - -#if !DCHAR_IS_TCHAR || USE_SNPRINTF - /* The snprintf() result did fit. */ -#else - /* Append the sprintf() result. */ - memcpy (result + length, tmp, count * sizeof (DCHAR_T)); -#endif -#if !USE_SNPRINTF - if (tmp != tmpbuf) - free (tmp); -#endif - -#if NEED_PRINTF_DIRECTIVE_F - if (dp->conversion == 'F') - { - /* Convert the %f result to upper case for %F. */ - DCHAR_T *rp = result + length; - size_t rc; - for (rc = count; rc > 0; rc--, rp++) - if (*rp >= 'a' && *rp <= 'z') - *rp = *rp - 'a' + 'A'; - } -#endif - - length += count; - break; - } - errno = orig_errno; -#undef pad_ourselves -#undef prec_ourselves - } - } - } - - /* Add the final NUL. */ - ENSURE_ALLOCATION (xsum (length, 1)); - result[length] = '\0'; - - if (result != resultbuf && length + 1 < allocated) - { - /* Shrink the allocated memory if possible. */ - DCHAR_T *memory; - - memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); - if (memory != NULL) - result = memory; - } - - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - *lengthp = length; - /* Note that we can produce a big string of a length > INT_MAX. POSIX - says that snprintf() fails with errno = EOVERFLOW in this case, but - that's only because snprintf() returns an 'int'. This function does - not have this limitation. */ - return result; - -#if USE_SNPRINTF - overflow: - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - CLEANUP (); - errno = EOVERFLOW; - return NULL; -#endif - - out_of_memory: - if (!(result == resultbuf || result == NULL)) - free (result); - if (buf_malloced != NULL) - free (buf_malloced); - out_of_memory_1: - CLEANUP (); - errno = ENOMEM; - return NULL; - } -} - -#undef MAX_ROOM_NEEDED -#undef TCHARS_PER_DCHAR -#undef SNPRINTF -#undef USE_SNPRINTF -#undef DCHAR_SET -#undef DCHAR_CPY -#undef PRINTF_PARSE -#undef DIRECTIVES -#undef DIRECTIVE -#undef DCHAR_IS_TCHAR -#undef TCHAR_T -#undef DCHAR_T -#undef FCHAR_T -#undef VASNPRINTF diff --git a/src/gl/vasnprintf.h b/src/gl/vasnprintf.h deleted file mode 100644 index 8e9d84f015..0000000000 --- a/src/gl/vasnprintf.h +++ /dev/null @@ -1,79 +0,0 @@ -/* vsprintf with automatic memory allocation. - Copyright (C) 2002-2004, 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, see . */ - -#ifndef _VASNPRINTF_H -#define _VASNPRINTF_H - -/* Get va_list. */ -#include - -/* Get size_t. */ -#include - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The __-protected variants of the attributes 'format' and 'printf' are - accepted by gcc versions 2.6.4 (effectively 2.7) and later. - We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because - gnulib and libintl do '#define printf __printf__' when they override - the 'printf' function. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) -# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) -#else -# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* Write formatted output to a string dynamically allocated with malloc(). - You can pass a preallocated buffer for the result in RESULTBUF and its - size in *LENGTHP; otherwise you pass RESULTBUF = NULL. - If successful, return the address of the string (this may be = RESULTBUF - if no dynamic memory allocation was necessary) and set *LENGTHP to the - number of resulting bytes, excluding the trailing NUL. Upon error, set - errno and return NULL. - - When dynamic memory allocation occurs, the preallocated buffer is left - alone (with possibly modified contents). This makes it possible to use - a statically allocated or stack-allocated buffer, like this: - - char buf[100]; - size_t len = sizeof (buf); - char *output = vasnprintf (buf, &len, format, args); - if (output == NULL) - ... error handling ...; - else - { - ... use the output string ...; - if (output != buf) - free (output); - } - */ -#if REPLACE_VASNPRINTF -# define asnprintf rpl_asnprintf -# define vasnprintf rpl_vasnprintf -#endif -extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) - _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); -extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) - _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); - -#ifdef __cplusplus -} -#endif - -#endif /* _VASNPRINTF_H */ diff --git a/src/gl/verify.h b/src/gl/verify.h deleted file mode 100644 index 5c8381d290..0000000000 --- a/src/gl/verify.h +++ /dev/null @@ -1,279 +0,0 @@ -/* Compile-time assert-like macros. - - Copyright (C) 2005-2006, 2009-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ - -#ifndef _GL_VERIFY_H -#define _GL_VERIFY_H - - -/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. - This is supported by GCC 4.6.0 and later, in C mode, and its use - here generates easier-to-read diagnostics when verify (R) fails. - - Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. - This will likely be supported by future GCC versions, in C++ mode. - - Use this only with GCC. If we were willing to slow 'configure' - down we could also use it with other compilers, but since this - affects only the quality of diagnostics, why bother? */ -#if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \ - && (201112L <= __STDC_VERSION__ || !defined __STRICT_ANSI__) \ - && !defined __cplusplus) -# define _GL_HAVE__STATIC_ASSERT 1 -#endif -/* The condition (99 < __GNUC__) is temporary, until we know about the - first G++ release that supports static_assert. */ -#if (99 < __GNUC__) && defined __cplusplus -# define _GL_HAVE_STATIC_ASSERT 1 -#endif - -/* FreeBSD 9.1 , included by and lots of other - system headers, defines a conflicting _Static_assert that is no - better than ours; override it. */ -#ifndef _GL_HAVE_STATIC_ASSERT -# include -# undef _Static_assert -#endif - -/* Each of these macros verifies that its argument R is nonzero. To - be portable, R should be an integer constant expression. Unlike - assert (R), there is no run-time overhead. - - If _Static_assert works, verify (R) uses it directly. Similarly, - _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct - that is an operand of sizeof. - - The code below uses several ideas for C++ compilers, and for C - compilers that do not support _Static_assert: - - * The first step is ((R) ? 1 : -1). Given an expression R, of - integral or boolean or floating-point type, this yields an - expression of integral type, whose value is later verified to be - constant and nonnegative. - - * Next this expression W is wrapped in a type - struct _gl_verify_type { - unsigned int _gl_verify_error_if_negative: W; - }. - If W is negative, this yields a compile-time error. No compiler can - deal with a bit-field of negative size. - - One might think that an array size check would have the same - effect, that is, that the type struct { unsigned int dummy[W]; } - would work as well. However, inside a function, some compilers - (such as C++ compilers and GNU C) allow local parameters and - variables inside array size expressions. With these compilers, - an array size check would not properly diagnose this misuse of - the verify macro: - - void function (int n) { verify (n < 0); } - - * For the verify macro, the struct _gl_verify_type will need to - somehow be embedded into a declaration. To be portable, this - declaration must declare an object, a constant, a function, or a - typedef name. If the declared entity uses the type directly, - such as in - - struct dummy {...}; - typedef struct {...} dummy; - extern struct {...} *dummy; - extern void dummy (struct {...} *); - extern struct {...} *dummy (void); - - two uses of the verify macro would yield colliding declarations - if the entity names are not disambiguated. A workaround is to - attach the current line number to the entity name: - - #define _GL_CONCAT0(x, y) x##y - #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) - extern struct {...} * _GL_CONCAT (dummy, __LINE__); - - But this has the problem that two invocations of verify from - within the same macro would collide, since the __LINE__ value - would be the same for both invocations. (The GCC __COUNTER__ - macro solves this problem, but is not portable.) - - A solution is to use the sizeof operator. It yields a number, - getting rid of the identity of the type. Declarations like - - extern int dummy [sizeof (struct {...})]; - extern void dummy (int [sizeof (struct {...})]); - extern int (*dummy (void)) [sizeof (struct {...})]; - - can be repeated. - - * Should the implementation use a named struct or an unnamed struct? - Which of the following alternatives can be used? - - extern int dummy [sizeof (struct {...})]; - extern int dummy [sizeof (struct _gl_verify_type {...})]; - extern void dummy (int [sizeof (struct {...})]); - extern void dummy (int [sizeof (struct _gl_verify_type {...})]); - extern int (*dummy (void)) [sizeof (struct {...})]; - extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; - - In the second and sixth case, the struct type is exported to the - outer scope; two such declarations therefore collide. GCC warns - about the first, third, and fourth cases. So the only remaining - possibility is the fifth case: - - extern int (*dummy (void)) [sizeof (struct {...})]; - - * GCC warns about duplicate declarations of the dummy function if - -Wredundant-decls is used. GCC 4.3 and later have a builtin - __COUNTER__ macro that can let us generate unique identifiers for - each dummy function, to suppress this warning. - - * This implementation exploits the fact that older versions of GCC, - which do not support _Static_assert, also do not warn about the - last declaration mentioned above. - - * GCC warns if -Wnested-externs is enabled and verify() is used - within a function body; but inside a function, you can always - arrange to use verify_expr() instead. - - * In C++, any struct definition inside sizeof is invalid. - Use a template type to work around the problem. */ - -/* Concatenate two preprocessor tokens. */ -#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) -#define _GL_CONCAT0(x, y) x##y - -/* _GL_COUNTER is an integer, preferably one that changes each time we - use it. Use __COUNTER__ if it works, falling back on __LINE__ - otherwise. __LINE__ isn't perfect, but it's better than a - constant. */ -#if defined __COUNTER__ && __COUNTER__ != __COUNTER__ -# define _GL_COUNTER __COUNTER__ -#else -# define _GL_COUNTER __LINE__ -#endif - -/* Generate a symbol with the given prefix, making it unique if - possible. */ -#define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) - -/* Verify requirement R at compile-time, as an integer constant expression - that returns 1. If R is false, fail at compile-time, preferably - with a diagnostic that includes the string-literal DIAGNOSTIC. */ - -#define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ - (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) - -#ifdef __cplusplus -# if !GNULIB_defined_struct__gl_verify_type -template - struct _gl_verify_type { - unsigned int _gl_verify_error_if_negative: w; - }; -# define GNULIB_defined_struct__gl_verify_type 1 -# endif -# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ - _gl_verify_type<(R) ? 1 : -1> -#elif defined _GL_HAVE__STATIC_ASSERT -# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ - struct { \ - _Static_assert (R, DIAGNOSTIC); \ - int _gl_dummy; \ - } -#else -# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ - struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } -#endif - -/* Verify requirement R at compile-time, as a declaration without a - trailing ';'. If R is false, fail at compile-time, preferably - with a diagnostic that includes the string-literal DIAGNOSTIC. - - Unfortunately, unlike C11, this implementation must appear as an - ordinary declaration, and cannot appear inside struct { ... }. */ - -#ifdef _GL_HAVE__STATIC_ASSERT -# define _GL_VERIFY _Static_assert -#else -# define _GL_VERIFY(R, DIAGNOSTIC) \ - extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ - [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] -#endif - -/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ -#ifdef _GL_STATIC_ASSERT_H -# if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert -# define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) -# endif -# if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert -# define static_assert _Static_assert /* C11 requires this #define. */ -# endif -#endif - -/* @assert.h omit start@ */ - -/* Each of these macros verifies that its argument R is nonzero. To - be portable, R should be an integer constant expression. Unlike - assert (R), there is no run-time overhead. - - There are two macros, since no single macro can be used in all - contexts in C. verify_true (R) is for scalar contexts, including - integer constant expression contexts. verify (R) is for declaration - contexts, e.g., the top level. */ - -/* Verify requirement R at compile-time, as an integer constant expression. - Return 1. This is equivalent to verify_expr (R, 1). - - verify_true is obsolescent; please use verify_expr instead. */ - -#define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") - -/* Verify requirement R at compile-time. Return the value of the - expression E. */ - -#define verify_expr(R, E) \ - (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) - -/* Verify requirement R at compile-time, as a declaration without a - trailing ';'. */ - -#define verify(R) _GL_VERIFY (R, "verify (" #R ")") - -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif - -/* Assume that R always holds. This lets the compiler optimize - accordingly. R should not have side-effects; it may or may not be - evaluated. Behavior is undefined if R is false. */ - -#if (__has_builtin (__builtin_unreachable) \ - || 4 < __GNUC__ + (5 <= __GNUC_MINOR__)) -# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) -#elif 1200 <= _MSC_VER -# define assume(R) __assume (R) -#elif ((defined GCC_LINT || defined lint) \ - && (__has_builtin (__builtin_trap) \ - || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)))) - /* Doing it this way helps various packages when configured with - --enable-gcc-warnings, which compiles with -Dlint. It's nicer - when 'assume' silences warnings even with older GCCs. */ -# define assume(R) ((R) ? (void) 0 : __builtin_trap ()) -#else -# define assume(R) ((void) (0 && (R))) -#endif - -/* @assert.h omit end@ */ - -#endif diff --git a/src/gl/w32sock.h b/src/gl/w32sock.h deleted file mode 100644 index c78b4bb973..0000000000 --- a/src/gl/w32sock.h +++ /dev/null @@ -1,136 +0,0 @@ -/* w32sock.h --- internal auxiliary functions for Windows socket functions - - Copyright (C) 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -/* Written by Paolo Bonzini */ - -#include - -/* Get O_RDWR and O_BINARY. */ -#include - -/* Get _open_osfhandle(). */ -#include - -/* Get _get_osfhandle(). */ -#include "msvc-nothrow.h" - -#define FD_TO_SOCKET(fd) ((SOCKET) _get_osfhandle ((fd))) -#define SOCKET_TO_FD(fh) (_open_osfhandle ((intptr_t) (fh), O_RDWR | O_BINARY)) - -static inline void -set_winsock_errno (void) -{ - int err = WSAGetLastError (); - - /* Map some WSAE* errors to the runtime library's error codes. */ - switch (err) - { - case WSA_INVALID_HANDLE: - errno = EBADF; - break; - case WSA_NOT_ENOUGH_MEMORY: - errno = ENOMEM; - break; - case WSA_INVALID_PARAMETER: - errno = EINVAL; - break; - case WSAENAMETOOLONG: - errno = ENAMETOOLONG; - break; - case WSAENOTEMPTY: - errno = ENOTEMPTY; - break; - case WSAEWOULDBLOCK: - errno = EWOULDBLOCK; - break; - case WSAEINPROGRESS: - errno = EINPROGRESS; - break; - case WSAEALREADY: - errno = EALREADY; - break; - case WSAENOTSOCK: - errno = ENOTSOCK; - break; - case WSAEDESTADDRREQ: - errno = EDESTADDRREQ; - break; - case WSAEMSGSIZE: - errno = EMSGSIZE; - break; - case WSAEPROTOTYPE: - errno = EPROTOTYPE; - break; - case WSAENOPROTOOPT: - errno = ENOPROTOOPT; - break; - case WSAEPROTONOSUPPORT: - errno = EPROTONOSUPPORT; - break; - case WSAEOPNOTSUPP: - errno = EOPNOTSUPP; - break; - case WSAEAFNOSUPPORT: - errno = EAFNOSUPPORT; - break; - case WSAEADDRINUSE: - errno = EADDRINUSE; - break; - case WSAEADDRNOTAVAIL: - errno = EADDRNOTAVAIL; - break; - case WSAENETDOWN: - errno = ENETDOWN; - break; - case WSAENETUNREACH: - errno = ENETUNREACH; - break; - case WSAENETRESET: - errno = ENETRESET; - break; - case WSAECONNABORTED: - errno = ECONNABORTED; - break; - case WSAECONNRESET: - errno = ECONNRESET; - break; - case WSAENOBUFS: - errno = ENOBUFS; - break; - case WSAEISCONN: - errno = EISCONN; - break; - case WSAENOTCONN: - errno = ENOTCONN; - break; - case WSAETIMEDOUT: - errno = ETIMEDOUT; - break; - case WSAECONNREFUSED: - errno = ECONNREFUSED; - break; - case WSAELOOP: - errno = ELOOP; - break; - case WSAEHOSTUNREACH: - errno = EHOSTUNREACH; - break; - default: - errno = (err > 10000 && err < 10025) ? err - 10000 : err; - break; - } -} diff --git a/src/gl/wchar.in.h b/src/gl/wchar.in.h deleted file mode 100644 index 75fb9f0254..0000000000 --- a/src/gl/wchar.in.h +++ /dev/null @@ -1,1041 +0,0 @@ -/* A substitute for ISO C99 , for platforms that have issues. - - Copyright (C) 2007-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -/* Written by Eric Blake. */ - -/* - * ISO C 99 for platforms that have issues. - * - * - * For now, this just ensures proper prerequisite inclusion order and - * the declaration of wcwidth(). - */ - -#if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -#endif -@PRAGMA_COLUMNS@ - -#if (((defined __need_mbstate_t || defined __need_wint_t) \ - && !defined __MINGW32__ && !defined __KLIBC__) \ - || (defined __hpux \ - && ((defined _INTTYPES_INCLUDED && !defined strtoimax) \ - || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ - || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ - || defined _GL_ALREADY_INCLUDING_WCHAR_H) -/* Special invocation convention: - - Inside glibc and uClibc header files, but not MinGW. - - On HP-UX 11.00 we have a sequence of nested includes - -> -> , and the latter includes , - once indirectly -> -> -> - and once directly. In both situations 'wint_t' is not yet defined, - therefore we cannot provide the function overrides; instead include only - the system's . - - With MinGW 3.22, when includes , only some part of - is actually processed, and that doesn't include 'mbstate_t'. - - On IRIX 6.5, similarly, we have an include -> , and - the latter includes . But here, we have no way to detect whether - is completely included or is still being included. */ - -#@INCLUDE_NEXT@ @NEXT_WCHAR_H@ - -#else -/* Normal invocation convention. */ - -#ifndef _@GUARD_PREFIX@_WCHAR_H - -#define _GL_ALREADY_INCLUDING_WCHAR_H - -#if @HAVE_FEATURES_H@ -# include /* for __GLIBC__ */ -#endif - -/* Tru64 with Desktop Toolkit C has a bug: must be included before - . - BSD/OS 4.0.1 has a bug: , and must be - included before . - In some builds of uClibc, is nonexistent and wchar_t is defined - by . - But avoid namespace pollution on glibc systems. */ -#if !(defined __GLIBC__ && !defined __UCLIBC__) -# include -#endif -#ifndef __GLIBC__ -# include -# include -#endif - -/* Include the original if it exists. - Some builds of uClibc lack it. */ -/* The include_next requires a split double-inclusion guard. */ -#if @HAVE_WCHAR_H@ -# @INCLUDE_NEXT@ @NEXT_WCHAR_H@ -#endif - -#undef _GL_ALREADY_INCLUDING_WCHAR_H - -#ifndef _@GUARD_PREFIX@_WCHAR_H -#define _@GUARD_PREFIX@_WCHAR_H - -/* The __attribute__ feature is available in gcc versions 2.5 and later. - The attribute __pure__ was added in gcc 2.96. */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) -#else -# define _GL_ATTRIBUTE_PURE /* empty */ -#endif - -/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ - -/* The definition of _GL_ARG_NONNULL is copied here. */ - -/* The definition of _GL_WARN_ON_USE is copied here. */ - - -/* Define wint_t and WEOF. (Also done in wctype.in.h.) */ -#if !@HAVE_WINT_T@ && !defined wint_t -# define wint_t int -# ifndef WEOF -# define WEOF -1 -# endif -#else -/* MSVC defines wint_t as 'unsigned short' in . - This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be - "unchanged by default argument promotions". Override it. */ -# if defined _MSC_VER -# if !GNULIB_defined_wint_t -# include -typedef unsigned int rpl_wint_t; -# undef wint_t -# define wint_t rpl_wint_t -# define GNULIB_defined_wint_t 1 -# endif -# endif -# ifndef WEOF -# define WEOF ((wint_t) -1) -# endif -#endif - - -/* Override mbstate_t if it is too small. - On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for - implementing mbrtowc for encodings like UTF-8. */ -#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ -# if !GNULIB_defined_mbstate_t -typedef int rpl_mbstate_t; -# undef mbstate_t -# define mbstate_t rpl_mbstate_t -# define GNULIB_defined_mbstate_t 1 -# endif -#endif - - -/* Convert a single-byte character to a wide character. */ -#if @GNULIB_BTOWC@ -# if @REPLACE_BTOWC@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef btowc -# define btowc rpl_btowc -# endif -_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); -_GL_CXXALIAS_RPL (btowc, wint_t, (int c)); -# else -# if !@HAVE_BTOWC@ -_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (btowc, wint_t, (int c)); -# endif -_GL_CXXALIASWARN (btowc); -#elif defined GNULIB_POSIXCHECK -# undef btowc -# if HAVE_RAW_DECL_BTOWC -_GL_WARN_ON_USE (btowc, "btowc is unportable - " - "use gnulib module btowc for portability"); -# endif -#endif - - -/* Convert a wide character to a single-byte character. */ -#if @GNULIB_WCTOB@ -# if @REPLACE_WCTOB@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wctob -# define wctob rpl_wctob -# endif -_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); -_GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); -# else -# if !defined wctob && !@HAVE_DECL_WCTOB@ -/* wctob is provided by gnulib, or wctob exists but is not declared. */ -_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); -# endif -_GL_CXXALIASWARN (wctob); -#elif defined GNULIB_POSIXCHECK -# undef wctob -# if HAVE_RAW_DECL_WCTOB -_GL_WARN_ON_USE (wctob, "wctob is unportable - " - "use gnulib module wctob for portability"); -# endif -#endif - - -/* Test whether *PS is in the initial state. */ -#if @GNULIB_MBSINIT@ -# if @REPLACE_MBSINIT@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbsinit -# define mbsinit rpl_mbsinit -# endif -_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); -_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); -# else -# if !@HAVE_MBSINIT@ -_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); -# endif -_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (mbsinit); -#elif defined GNULIB_POSIXCHECK -# undef mbsinit -# if HAVE_RAW_DECL_MBSINIT -_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " - "use gnulib module mbsinit for portability"); -# endif -#endif - - -/* Convert a multibyte character to a wide character. */ -#if @GNULIB_MBRTOWC@ -# if @REPLACE_MBRTOWC@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbrtowc -# define mbrtowc rpl_mbrtowc -# endif -_GL_FUNCDECL_RPL (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); -_GL_CXXALIAS_RPL (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); -# else -# if !@HAVE_MBRTOWC@ -_GL_FUNCDECL_SYS (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); -# endif -_GL_CXXALIAS_SYS (mbrtowc, size_t, - (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (mbrtowc); -#elif defined GNULIB_POSIXCHECK -# undef mbrtowc -# if HAVE_RAW_DECL_MBRTOWC -_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " - "use gnulib module mbrtowc for portability"); -# endif -#endif - - -/* Recognize a multibyte character. */ -#if @GNULIB_MBRLEN@ -# if @REPLACE_MBRLEN@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbrlen -# define mbrlen rpl_mbrlen -# endif -_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); -_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); -# else -# if !@HAVE_MBRLEN@ -_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); -# endif -_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (mbrlen); -#elif defined GNULIB_POSIXCHECK -# undef mbrlen -# if HAVE_RAW_DECL_MBRLEN -_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " - "use gnulib module mbrlen for portability"); -# endif -#endif - - -/* Convert a string to a wide string. */ -#if @GNULIB_MBSRTOWCS@ -# if @REPLACE_MBSRTOWCS@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbsrtowcs -# define mbsrtowcs rpl_mbsrtowcs -# endif -_GL_FUNCDECL_RPL (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, - mbstate_t *ps)); -# else -# if !@HAVE_MBSRTOWCS@ -_GL_FUNCDECL_SYS (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (mbsrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t len, - mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (mbsrtowcs); -#elif defined GNULIB_POSIXCHECK -# undef mbsrtowcs -# if HAVE_RAW_DECL_MBSRTOWCS -_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " - "use gnulib module mbsrtowcs for portability"); -# endif -#endif - - -/* Convert a string to a wide string. */ -#if @GNULIB_MBSNRTOWCS@ -# if @REPLACE_MBSNRTOWCS@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef mbsnrtowcs -# define mbsnrtowcs rpl_mbsnrtowcs -# endif -_GL_FUNCDECL_RPL (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps)); -# else -# if !@HAVE_MBSNRTOWCS@ -_GL_FUNCDECL_SYS (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (mbsnrtowcs, size_t, - (wchar_t *dest, const char **srcp, size_t srclen, size_t len, - mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (mbsnrtowcs); -#elif defined GNULIB_POSIXCHECK -# undef mbsnrtowcs -# if HAVE_RAW_DECL_MBSNRTOWCS -_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " - "use gnulib module mbsnrtowcs for portability"); -# endif -#endif - - -/* Convert a wide character to a multibyte character. */ -#if @GNULIB_WCRTOMB@ -# if @REPLACE_WCRTOMB@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wcrtomb -# define wcrtomb rpl_wcrtomb -# endif -_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); -_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); -# else -# if !@HAVE_WCRTOMB@ -_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); -# endif -_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (wcrtomb); -#elif defined GNULIB_POSIXCHECK -# undef wcrtomb -# if HAVE_RAW_DECL_WCRTOMB -_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " - "use gnulib module wcrtomb for portability"); -# endif -#endif - - -/* Convert a wide string to a string. */ -#if @GNULIB_WCSRTOMBS@ -# if @REPLACE_WCSRTOMBS@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wcsrtombs -# define wcsrtombs rpl_wcsrtombs -# endif -_GL_FUNCDECL_RPL (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, - mbstate_t *ps)); -# else -# if !@HAVE_WCSRTOMBS@ -_GL_FUNCDECL_SYS (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (wcsrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t len, - mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (wcsrtombs); -#elif defined GNULIB_POSIXCHECK -# undef wcsrtombs -# if HAVE_RAW_DECL_WCSRTOMBS -_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " - "use gnulib module wcsrtombs for portability"); -# endif -#endif - - -/* Convert a wide string to a string. */ -#if @GNULIB_WCSNRTOMBS@ -# if @REPLACE_WCSNRTOMBS@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wcsnrtombs -# define wcsnrtombs rpl_wcsnrtombs -# endif -_GL_FUNCDECL_RPL (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -_GL_CXXALIAS_RPL (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps)); -# else -# if !@HAVE_WCSNRTOMBS@ -_GL_FUNCDECL_SYS (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps) - _GL_ARG_NONNULL ((2))); -# endif -_GL_CXXALIAS_SYS (wcsnrtombs, size_t, - (char *dest, const wchar_t **srcp, size_t srclen, size_t len, - mbstate_t *ps)); -# endif -_GL_CXXALIASWARN (wcsnrtombs); -#elif defined GNULIB_POSIXCHECK -# undef wcsnrtombs -# if HAVE_RAW_DECL_WCSNRTOMBS -_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " - "use gnulib module wcsnrtombs for portability"); -# endif -#endif - - -/* Return the number of screen columns needed for WC. */ -#if @GNULIB_WCWIDTH@ -# if @REPLACE_WCWIDTH@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wcwidth -# define wcwidth rpl_wcwidth -# endif -_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); -_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); -# else -# if !@HAVE_DECL_WCWIDTH@ -/* wcwidth exists but is not declared. */ -_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); -# elif defined __KLIBC__ -/* On OS/2 kLIBC, wcwidth is a macro that expands to the name of a - static inline function. The implementation of wcwidth in wcwidth.c - causes a "conflicting types" error. */ -# undef wcwidth -# endif -_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); -# endif -_GL_CXXALIASWARN (wcwidth); -#elif defined GNULIB_POSIXCHECK -# undef wcwidth -# if HAVE_RAW_DECL_WCWIDTH -_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " - "use gnulib module wcwidth for portability"); -# endif -#endif - - -/* Search N wide characters of S for C. */ -#if @GNULIB_WMEMCHR@ -# if !@HAVE_WMEMCHR@ -_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) - _GL_ATTRIBUTE_PURE); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { - const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); - wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); - } */ -_GL_CXXALIAS_SYS_CAST2 (wmemchr, - wchar_t *, (const wchar_t *, wchar_t, size_t), - const wchar_t *, (const wchar_t *, wchar_t, size_t)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); -_GL_CXXALIASWARN1 (wmemchr, const wchar_t *, - (const wchar_t *s, wchar_t c, size_t n)); -# else -_GL_CXXALIASWARN (wmemchr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef wmemchr -# if HAVE_RAW_DECL_WMEMCHR -_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " - "use gnulib module wmemchr for portability"); -# endif -#endif - - -/* Compare N wide characters of S1 and S2. */ -#if @GNULIB_WMEMCMP@ -# if !@HAVE_WMEMCMP@ -_GL_FUNCDECL_SYS (wmemcmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wmemcmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n)); -_GL_CXXALIASWARN (wmemcmp); -#elif defined GNULIB_POSIXCHECK -# undef wmemcmp -# if HAVE_RAW_DECL_WMEMCMP -_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " - "use gnulib module wmemcmp for portability"); -# endif -#endif - - -/* Copy N wide characters of SRC to DEST. */ -#if @GNULIB_WMEMCPY@ -# if !@HAVE_WMEMCPY@ -_GL_FUNCDECL_SYS (wmemcpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -# endif -_GL_CXXALIAS_SYS (wmemcpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -_GL_CXXALIASWARN (wmemcpy); -#elif defined GNULIB_POSIXCHECK -# undef wmemcpy -# if HAVE_RAW_DECL_WMEMCPY -_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " - "use gnulib module wmemcpy for portability"); -# endif -#endif - - -/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for - overlapping memory areas. */ -#if @GNULIB_WMEMMOVE@ -# if !@HAVE_WMEMMOVE@ -_GL_FUNCDECL_SYS (wmemmove, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -# endif -_GL_CXXALIAS_SYS (wmemmove, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -_GL_CXXALIASWARN (wmemmove); -#elif defined GNULIB_POSIXCHECK -# undef wmemmove -# if HAVE_RAW_DECL_WMEMMOVE -_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " - "use gnulib module wmemmove for portability"); -# endif -#endif - - -/* Set N wide characters of S to C. */ -#if @GNULIB_WMEMSET@ -# if !@HAVE_WMEMSET@ -_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); -# endif -_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); -_GL_CXXALIASWARN (wmemset); -#elif defined GNULIB_POSIXCHECK -# undef wmemset -# if HAVE_RAW_DECL_WMEMSET -_GL_WARN_ON_USE (wmemset, "wmemset is unportable - " - "use gnulib module wmemset for portability"); -# endif -#endif - - -/* Return the number of wide characters in S. */ -#if @GNULIB_WCSLEN@ -# if !@HAVE_WCSLEN@ -_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); -_GL_CXXALIASWARN (wcslen); -#elif defined GNULIB_POSIXCHECK -# undef wcslen -# if HAVE_RAW_DECL_WCSLEN -_GL_WARN_ON_USE (wcslen, "wcslen is unportable - " - "use gnulib module wcslen for portability"); -# endif -#endif - - -/* Return the number of wide characters in S, but at most MAXLEN. */ -#if @GNULIB_WCSNLEN@ -# if !@HAVE_WCSNLEN@ -_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); -_GL_CXXALIASWARN (wcsnlen); -#elif defined GNULIB_POSIXCHECK -# undef wcsnlen -# if HAVE_RAW_DECL_WCSNLEN -_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " - "use gnulib module wcsnlen for portability"); -# endif -#endif - - -/* Copy SRC to DEST. */ -#if @GNULIB_WCSCPY@ -# if !@HAVE_WCSCPY@ -_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); -# endif -_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); -_GL_CXXALIASWARN (wcscpy); -#elif defined GNULIB_POSIXCHECK -# undef wcscpy -# if HAVE_RAW_DECL_WCSCPY -_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " - "use gnulib module wcscpy for portability"); -# endif -#endif - - -/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ -#if @GNULIB_WCPCPY@ -# if !@HAVE_WCPCPY@ -_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); -# endif -_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); -_GL_CXXALIASWARN (wcpcpy); -#elif defined GNULIB_POSIXCHECK -# undef wcpcpy -# if HAVE_RAW_DECL_WCPCPY -_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " - "use gnulib module wcpcpy for portability"); -# endif -#endif - - -/* Copy no more than N wide characters of SRC to DEST. */ -#if @GNULIB_WCSNCPY@ -# if !@HAVE_WCSNCPY@ -_GL_FUNCDECL_SYS (wcsncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -# endif -_GL_CXXALIAS_SYS (wcsncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -_GL_CXXALIASWARN (wcsncpy); -#elif defined GNULIB_POSIXCHECK -# undef wcsncpy -# if HAVE_RAW_DECL_WCSNCPY -_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " - "use gnulib module wcsncpy for portability"); -# endif -#endif - - -/* Copy no more than N characters of SRC to DEST, returning the address of - the last character written into DEST. */ -#if @GNULIB_WCPNCPY@ -# if !@HAVE_WCPNCPY@ -_GL_FUNCDECL_SYS (wcpncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -# endif -_GL_CXXALIAS_SYS (wcpncpy, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -_GL_CXXALIASWARN (wcpncpy); -#elif defined GNULIB_POSIXCHECK -# undef wcpncpy -# if HAVE_RAW_DECL_WCPNCPY -_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " - "use gnulib module wcpncpy for portability"); -# endif -#endif - - -/* Append SRC onto DEST. */ -#if @GNULIB_WCSCAT@ -# if !@HAVE_WCSCAT@ -_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); -# endif -_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); -_GL_CXXALIASWARN (wcscat); -#elif defined GNULIB_POSIXCHECK -# undef wcscat -# if HAVE_RAW_DECL_WCSCAT -_GL_WARN_ON_USE (wcscat, "wcscat is unportable - " - "use gnulib module wcscat for portability"); -# endif -#endif - - -/* Append no more than N wide characters of SRC onto DEST. */ -#if @GNULIB_WCSNCAT@ -# if !@HAVE_WCSNCAT@ -_GL_FUNCDECL_SYS (wcsncat, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -# endif -_GL_CXXALIAS_SYS (wcsncat, wchar_t *, - (wchar_t *dest, const wchar_t *src, size_t n)); -_GL_CXXALIASWARN (wcsncat); -#elif defined GNULIB_POSIXCHECK -# undef wcsncat -# if HAVE_RAW_DECL_WCSNCAT -_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " - "use gnulib module wcsncat for portability"); -# endif -#endif - - -/* Compare S1 and S2. */ -#if @GNULIB_WCSCMP@ -# if !@HAVE_WCSCMP@ -_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); -_GL_CXXALIASWARN (wcscmp); -#elif defined GNULIB_POSIXCHECK -# undef wcscmp -# if HAVE_RAW_DECL_WCSCMP -_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " - "use gnulib module wcscmp for portability"); -# endif -#endif - - -/* Compare no more than N wide characters of S1 and S2. */ -#if @GNULIB_WCSNCMP@ -# if !@HAVE_WCSNCMP@ -_GL_FUNCDECL_SYS (wcsncmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcsncmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n)); -_GL_CXXALIASWARN (wcsncmp); -#elif defined GNULIB_POSIXCHECK -# undef wcsncmp -# if HAVE_RAW_DECL_WCSNCMP -_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " - "use gnulib module wcsncmp for portability"); -# endif -#endif - - -/* Compare S1 and S2, ignoring case. */ -#if @GNULIB_WCSCASECMP@ -# if !@HAVE_WCSCASECMP@ -_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); -_GL_CXXALIASWARN (wcscasecmp); -#elif defined GNULIB_POSIXCHECK -# undef wcscasecmp -# if HAVE_RAW_DECL_WCSCASECMP -_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " - "use gnulib module wcscasecmp for portability"); -# endif -#endif - - -/* Compare no more than N chars of S1 and S2, ignoring case. */ -#if @GNULIB_WCSNCASECMP@ -# if !@HAVE_WCSNCASECMP@ -_GL_FUNCDECL_SYS (wcsncasecmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcsncasecmp, int, - (const wchar_t *s1, const wchar_t *s2, size_t n)); -_GL_CXXALIASWARN (wcsncasecmp); -#elif defined GNULIB_POSIXCHECK -# undef wcsncasecmp -# if HAVE_RAW_DECL_WCSNCASECMP -_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " - "use gnulib module wcsncasecmp for portability"); -# endif -#endif - - -/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE - category of the current locale. */ -#if @GNULIB_WCSCOLL@ -# if !@HAVE_WCSCOLL@ -_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); -# endif -_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); -_GL_CXXALIASWARN (wcscoll); -#elif defined GNULIB_POSIXCHECK -# undef wcscoll -# if HAVE_RAW_DECL_WCSCOLL -_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " - "use gnulib module wcscoll for portability"); -# endif -#endif - - -/* Transform S2 into array pointed to by S1 such that if wcscmp is applied - to two transformed strings the result is the as applying 'wcscoll' to the - original strings. */ -#if @GNULIB_WCSXFRM@ -# if !@HAVE_WCSXFRM@ -_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); -# endif -_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); -_GL_CXXALIASWARN (wcsxfrm); -#elif defined GNULIB_POSIXCHECK -# undef wcsxfrm -# if HAVE_RAW_DECL_WCSXFRM -_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " - "use gnulib module wcsxfrm for portability"); -# endif -#endif - - -/* Duplicate S, returning an identical malloc'd string. */ -#if @GNULIB_WCSDUP@ -# if !@HAVE_WCSDUP@ -_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s)); -# endif -_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); -_GL_CXXALIASWARN (wcsdup); -#elif defined GNULIB_POSIXCHECK -# undef wcsdup -# if HAVE_RAW_DECL_WCSDUP -_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " - "use gnulib module wcsdup for portability"); -# endif -#endif - - -/* Find the first occurrence of WC in WCS. */ -#if @GNULIB_WCSCHR@ -# if !@HAVE_WCSCHR@ -_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) - _GL_ATTRIBUTE_PURE); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { - const wchar_t * std::wcschr (const wchar_t *, wchar_t); - wchar_t * std::wcschr (wchar_t *, wchar_t); - } */ -_GL_CXXALIAS_SYS_CAST2 (wcschr, - wchar_t *, (const wchar_t *, wchar_t), - const wchar_t *, (const wchar_t *, wchar_t)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); -_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); -# else -_GL_CXXALIASWARN (wcschr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef wcschr -# if HAVE_RAW_DECL_WCSCHR -_GL_WARN_ON_USE (wcschr, "wcschr is unportable - " - "use gnulib module wcschr for portability"); -# endif -#endif - - -/* Find the last occurrence of WC in WCS. */ -#if @GNULIB_WCSRCHR@ -# if !@HAVE_WCSRCHR@ -_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) - _GL_ATTRIBUTE_PURE); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { - const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); - wchar_t * std::wcsrchr (wchar_t *, wchar_t); - } */ -_GL_CXXALIAS_SYS_CAST2 (wcsrchr, - wchar_t *, (const wchar_t *, wchar_t), - const wchar_t *, (const wchar_t *, wchar_t)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); -_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); -# else -_GL_CXXALIASWARN (wcsrchr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef wcsrchr -# if HAVE_RAW_DECL_WCSRCHR -_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " - "use gnulib module wcsrchr for portability"); -# endif -#endif - - -/* Return the length of the initial segmet of WCS which consists entirely - of wide characters not in REJECT. */ -#if @GNULIB_WCSCSPN@ -# if !@HAVE_WCSCSPN@ -_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); -_GL_CXXALIASWARN (wcscspn); -#elif defined GNULIB_POSIXCHECK -# undef wcscspn -# if HAVE_RAW_DECL_WCSCSPN -_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " - "use gnulib module wcscspn for portability"); -# endif -#endif - - -/* Return the length of the initial segmet of WCS which consists entirely - of wide characters in ACCEPT. */ -#if @GNULIB_WCSSPN@ -# if !@HAVE_WCSSPN@ -_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); -_GL_CXXALIASWARN (wcsspn); -#elif defined GNULIB_POSIXCHECK -# undef wcsspn -# if HAVE_RAW_DECL_WCSSPN -_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " - "use gnulib module wcsspn for portability"); -# endif -#endif - - -/* Find the first occurrence in WCS of any character in ACCEPT. */ -#if @GNULIB_WCSPBRK@ -# if !@HAVE_WCSPBRK@ -_GL_FUNCDECL_SYS (wcspbrk, wchar_t *, - (const wchar_t *wcs, const wchar_t *accept) - _GL_ATTRIBUTE_PURE); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { - const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); - wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); - } */ -_GL_CXXALIAS_SYS_CAST2 (wcspbrk, - wchar_t *, (const wchar_t *, const wchar_t *), - const wchar_t *, (const wchar_t *, const wchar_t *)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (wcspbrk, wchar_t *, - (wchar_t *wcs, const wchar_t *accept)); -_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, - (const wchar_t *wcs, const wchar_t *accept)); -# else -_GL_CXXALIASWARN (wcspbrk); -# endif -#elif defined GNULIB_POSIXCHECK -# undef wcspbrk -# if HAVE_RAW_DECL_WCSPBRK -_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " - "use gnulib module wcspbrk for portability"); -# endif -#endif - - -/* Find the first occurrence of NEEDLE in HAYSTACK. */ -#if @GNULIB_WCSSTR@ -# if !@HAVE_WCSSTR@ -_GL_FUNCDECL_SYS (wcsstr, wchar_t *, - (const wchar_t *haystack, const wchar_t *needle) - _GL_ATTRIBUTE_PURE); -# endif - /* On some systems, this function is defined as an overloaded function: - extern "C++" { - const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); - wchar_t * std::wcsstr (wchar_t *, const wchar_t *); - } */ -_GL_CXXALIAS_SYS_CAST2 (wcsstr, - wchar_t *, (const wchar_t *, const wchar_t *), - const wchar_t *, (const wchar_t *, const wchar_t *)); -# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ - && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -_GL_CXXALIASWARN1 (wcsstr, wchar_t *, - (wchar_t *haystack, const wchar_t *needle)); -_GL_CXXALIASWARN1 (wcsstr, const wchar_t *, - (const wchar_t *haystack, const wchar_t *needle)); -# else -_GL_CXXALIASWARN (wcsstr); -# endif -#elif defined GNULIB_POSIXCHECK -# undef wcsstr -# if HAVE_RAW_DECL_WCSSTR -_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " - "use gnulib module wcsstr for portability"); -# endif -#endif - - -/* Divide WCS into tokens separated by characters in DELIM. */ -#if @GNULIB_WCSTOK@ -# if !@HAVE_WCSTOK@ -_GL_FUNCDECL_SYS (wcstok, wchar_t *, - (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); -# endif -_GL_CXXALIAS_SYS (wcstok, wchar_t *, - (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); -_GL_CXXALIASWARN (wcstok); -#elif defined GNULIB_POSIXCHECK -# undef wcstok -# if HAVE_RAW_DECL_WCSTOK -_GL_WARN_ON_USE (wcstok, "wcstok is unportable - " - "use gnulib module wcstok for portability"); -# endif -#endif - - -/* Determine number of column positions required for first N wide - characters (or fewer if S ends before this) in S. */ -#if @GNULIB_WCSWIDTH@ -# if @REPLACE_WCSWIDTH@ -# if !(defined __cplusplus && defined GNULIB_NAMESPACE) -# undef wcswidth -# define wcswidth rpl_wcswidth -# endif -_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) - _GL_ATTRIBUTE_PURE); -_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); -# else -# if !@HAVE_WCSWIDTH@ -_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) - _GL_ATTRIBUTE_PURE); -# endif -_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); -# endif -_GL_CXXALIASWARN (wcswidth); -#elif defined GNULIB_POSIXCHECK -# undef wcswidth -# if HAVE_RAW_DECL_WCSWIDTH -_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " - "use gnulib module wcswidth for portability"); -# endif -#endif - - -#endif /* _@GUARD_PREFIX@_WCHAR_H */ -#endif /* _@GUARD_PREFIX@_WCHAR_H */ -#endif diff --git a/src/gl/xalloc-die.c b/src/gl/xalloc-die.c deleted file mode 100644 index 4c7994bf1e..0000000000 --- a/src/gl/xalloc-die.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Report a memory allocation failure and exit. - - Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2016 Free Software - Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -#include "xalloc.h" - -#include - -#include "error.h" -#include "exitfail.h" - -#include "gettext.h" -#define _(msgid) gettext (msgid) - -void -xalloc_die (void) -{ - error (exit_failure, 0, "%s", _("memory exhausted")); - - /* _Noreturn cannot be given to error, since it may return if - its first argument is 0. To help compilers understand the - xalloc_die does not return, call abort. Also, the abort is a - safety feature if exit_failure is 0 (which shouldn't happen). */ - abort (); -} diff --git a/src/gl/xalloc-oversized.h b/src/gl/xalloc-oversized.h deleted file mode 100644 index 53e6556c61..0000000000 --- a/src/gl/xalloc-oversized.h +++ /dev/null @@ -1,63 +0,0 @@ -/* xalloc-oversized.h -- memory allocation size checking - - Copyright (C) 1990-2000, 2003-2004, 2006-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef XALLOC_OVERSIZED_H_ -#define XALLOC_OVERSIZED_H_ - -#include - -/* Default for (non-Clang) compilers that lack __has_builtin. */ -#ifndef __has_builtin -# define __has_builtin(x) 0 -#endif - -/* True if N * S would overflow in a size calculation. - This expands to a constant expression if N and S are both constants. - By gnulib convention, SIZE_MAX represents overflow in size - calculations, so the conservative dividend to use here is - SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value. - However, malloc (SIZE_MAX) fails on all known hosts where - sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for - exactly-SIZE_MAX allocations on such hosts; this avoids a test and - branch when S is known to be 1. */ -#define __xalloc_oversized(n, s) \ - ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n)) - - -/* Return 1 if an array of N objects, each of size S, cannot exist due - to size arithmetic overflow. S must be positive and N must be - nonnegative. This is a macro, not a function, so that it - works correctly even when SIZE_MAX < N. */ - -#if 7 <= __GNUC__ || __has_builtin (__builtin_add_overflow_p) -# define xalloc_oversized(n, s) __builtin_mul_overflow_p (n, s, (size_t) 1) -#elif ((5 <= __GNUC__ \ - || (__has_builtin (__builtin_mul_overflow) \ - && __has_builtin (__builtin_constant_p))) \ - && !__STRICT_ANSI__) -# define xalloc_oversized(n, s) \ - (__builtin_constant_p (n) && __builtin_constant_p (s) \ - ? __xalloc_oversized (n, s) \ - : ({ size_t __xalloc_size; __builtin_mul_overflow (n, s, &__xalloc_size); })) - -/* Other compilers use integer division; this may be slower but is - more portable. */ -#else -# define xalloc_oversized(n, s) __xalloc_oversized (n, s) -#endif - -#endif /* !XALLOC_OVERSIZED_H_ */ diff --git a/src/gl/xalloc.h b/src/gl/xalloc.h deleted file mode 100644 index a4fddbfb5b..0000000000 --- a/src/gl/xalloc.h +++ /dev/null @@ -1,264 +0,0 @@ -/* xalloc.h -- malloc with out-of-memory checking - - Copyright (C) 1990-2000, 2003-2004, 2006-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef XALLOC_H_ -#define XALLOC_H_ - -#include - -#include "xalloc-oversized.h" - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif -_GL_INLINE_HEADER_BEGIN -#ifndef XALLOC_INLINE -# define XALLOC_INLINE _GL_INLINE -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - -#if __GNUC__ >= 3 -# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) -#else -# define _GL_ATTRIBUTE_MALLOC -#endif - -#if ! defined __clang__ && \ - (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) -# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) -#else -# define _GL_ATTRIBUTE_ALLOC_SIZE(args) -#endif - -/* This function is always triggered when memory is exhausted. - It must be defined by the application, either explicitly - or by using gnulib's xalloc-die module. This is the - function to call when one wants the program to die because of a - memory allocation failure. */ -extern _Noreturn void xalloc_die (void); - -void *xmalloc (size_t s) - _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); -void *xzalloc (size_t s) - _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); -void *xcalloc (size_t n, size_t s) - _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)); -void *xrealloc (void *p, size_t s) - _GL_ATTRIBUTE_ALLOC_SIZE ((2)); -void *x2realloc (void *p, size_t *pn); -void *xmemdup (void const *p, size_t s) - _GL_ATTRIBUTE_ALLOC_SIZE ((2)); -char *xstrdup (char const *str) - _GL_ATTRIBUTE_MALLOC; - -/* In the following macros, T must be an elementary or structure/union or - typedef'ed type, or a pointer to such a type. To apply one of the - following macros to a function pointer or array type, you need to typedef - it first and use the typedef name. */ - -/* Allocate an object of type T dynamically, with error checking. */ -/* extern t *XMALLOC (typename t); */ -#define XMALLOC(t) ((t *) xmalloc (sizeof (t))) - -/* Allocate memory for N elements of type T, with error checking. */ -/* extern t *XNMALLOC (size_t n, typename t); */ -#define XNMALLOC(n, t) \ - ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t)))) - -/* Allocate an object of type T dynamically, with error checking, - and zero it. */ -/* extern t *XZALLOC (typename t); */ -#define XZALLOC(t) ((t *) xzalloc (sizeof (t))) - -/* Allocate memory for N elements of type T, with error checking, - and zero it. */ -/* extern t *XCALLOC (size_t n, typename t); */ -#define XCALLOC(n, t) \ - ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t)))) - - -/* Allocate an array of N objects, each with S bytes of memory, - dynamically, with error checking. S must be nonzero. */ - -XALLOC_INLINE void *xnmalloc (size_t n, size_t s) - _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)); -XALLOC_INLINE void * -xnmalloc (size_t n, size_t s) -{ - if (xalloc_oversized (n, s)) - xalloc_die (); - return xmalloc (n * s); -} - -/* Change the size of an allocated block of memory P to an array of N - objects each of S bytes, with error checking. S must be nonzero. */ - -XALLOC_INLINE void *xnrealloc (void *p, size_t n, size_t s) - _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); -XALLOC_INLINE void * -xnrealloc (void *p, size_t n, size_t s) -{ - if (xalloc_oversized (n, s)) - xalloc_die (); - return xrealloc (p, n * s); -} - -/* If P is null, allocate a block of at least *PN such objects; - otherwise, reallocate P so that it contains more than *PN objects - each of S bytes. S must be nonzero. Set *PN to the new number of - objects, and return the pointer to the new block. *PN is never set - to zero, and the returned pointer is never null. - - Repeated reallocations are guaranteed to make progress, either by - allocating an initial block with a nonzero size, or by allocating a - larger block. - - In the following implementation, nonzero sizes are increased by a - factor of approximately 1.5 so that repeated reallocations have - O(N) overall cost rather than O(N**2) cost, but the - specification for this function does not guarantee that rate. - - Here is an example of use: - - int *p = NULL; - size_t used = 0; - size_t allocated = 0; - - void - append_int (int value) - { - if (used == allocated) - p = x2nrealloc (p, &allocated, sizeof *p); - p[used++] = value; - } - - This causes x2nrealloc to allocate a block of some nonzero size the - first time it is called. - - To have finer-grained control over the initial size, set *PN to a - nonzero value before calling this function with P == NULL. For - example: - - int *p = NULL; - size_t used = 0; - size_t allocated = 0; - size_t allocated1 = 1000; - - void - append_int (int value) - { - if (used == allocated) - { - p = x2nrealloc (p, &allocated1, sizeof *p); - allocated = allocated1; - } - p[used++] = value; - } - - */ - -XALLOC_INLINE void * -x2nrealloc (void *p, size_t *pn, size_t s) -{ - size_t n = *pn; - - if (! p) - { - if (! n) - { - /* The approximate size to use for initial small allocation - requests, when the invoking code specifies an old size of - zero. This is the largest "small" request for the GNU C - library malloc. */ - enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; - - n = DEFAULT_MXFAST / s; - n += !n; - } - } - else - { - /* Set N = floor (1.5 * N) + 1 so that progress is made even if N == 0. - Check for overflow, so that N * S stays in size_t range. - The check may be slightly conservative, but an exact check isn't - worth the trouble. */ - if ((size_t) -1 / 3 * 2 / s <= n) - xalloc_die (); - n += n / 2 + 1; - } - - *pn = n; - return xrealloc (p, n * s); -} - -/* Return a pointer to a new buffer of N bytes. This is like xmalloc, - except it returns char *. */ - -XALLOC_INLINE char *xcharalloc (size_t n) - _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); -XALLOC_INLINE char * -xcharalloc (size_t n) -{ - return XNMALLOC (n, char); -} - -#ifdef __cplusplus -} - -/* C++ does not allow conversions from void * to other pointer types - without a cast. Use templates to work around the problem when - possible. */ - -template inline T * -xrealloc (T *p, size_t s) -{ - return (T *) xrealloc ((void *) p, s); -} - -template inline T * -xnrealloc (T *p, size_t n, size_t s) -{ - return (T *) xnrealloc ((void *) p, n, s); -} - -template inline T * -x2realloc (T *p, size_t *pn) -{ - return (T *) x2realloc ((void *) p, pn); -} - -template inline T * -x2nrealloc (T *p, size_t *pn, size_t s) -{ - return (T *) x2nrealloc ((void *) p, pn, s); -} - -template inline T * -xmemdup (T const *p, size_t s) -{ - return (T *) xmemdup ((void const *) p, s); -} - -#endif - -_GL_INLINE_HEADER_END - -#endif /* !XALLOC_H_ */ diff --git a/src/gl/xmalloc.c b/src/gl/xmalloc.c deleted file mode 100644 index 429b50d994..0000000000 --- a/src/gl/xmalloc.c +++ /dev/null @@ -1,122 +0,0 @@ -/* xmalloc.c -- malloc with out of memory checking - - Copyright (C) 1990-2000, 2002-2006, 2008-2016 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include - -#define XALLOC_INLINE _GL_EXTERN_INLINE - -#include "xalloc.h" - -#include -#include - -/* 1 if calloc is known to be compatible with GNU calloc. This - matters if we are not also using the calloc module, which defines - HAVE_CALLOC_GNU and supports the GNU API even on non-GNU platforms. */ -#if defined HAVE_CALLOC_GNU || (defined __GLIBC__ && !defined __UCLIBC__) -enum { HAVE_GNU_CALLOC = 1 }; -#else -enum { HAVE_GNU_CALLOC = 0 }; -#endif - -/* Allocate N bytes of memory dynamically, with error checking. */ - -void * -xmalloc (size_t n) -{ - void *p = malloc (n); - if (!p && n != 0) - xalloc_die (); - return p; -} - -/* Change the size of an allocated block of memory P to N bytes, - with error checking. */ - -void * -xrealloc (void *p, size_t n) -{ - if (!n && p) - { - /* The GNU and C99 realloc behaviors disagree here. Act like - GNU, even if the underlying realloc is C99. */ - free (p); - return NULL; - } - - p = realloc (p, n); - if (!p && n) - xalloc_die (); - return p; -} - -/* If P is null, allocate a block of at least *PN bytes; otherwise, - reallocate P so that it contains more than *PN bytes. *PN must be - nonzero unless P is null. Set *PN to the new block's size, and - return the pointer to the new block. *PN is never set to zero, and - the returned pointer is never null. */ - -void * -x2realloc (void *p, size_t *pn) -{ - return x2nrealloc (p, pn, 1); -} - -/* Allocate S bytes of zeroed memory dynamically, with error checking. - There's no need for xnzalloc (N, S), since it would be equivalent - to xcalloc (N, S). */ - -void * -xzalloc (size_t s) -{ - return memset (xmalloc (s), 0, s); -} - -/* Allocate zeroed memory for N elements of S bytes, with error - checking. S must be nonzero. */ - -void * -xcalloc (size_t n, size_t s) -{ - void *p; - /* Test for overflow, since some calloc implementations don't have - proper overflow checks. But omit overflow and size-zero tests if - HAVE_GNU_CALLOC, since GNU calloc catches overflow and never - returns NULL if successful. */ - if ((! HAVE_GNU_CALLOC && xalloc_oversized (n, s)) - || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0))) - xalloc_die (); - return p; -} - -/* Clone an object P of size S, with error checking. There's no need - for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any - need for an arithmetic overflow check. */ - -void * -xmemdup (void const *p, size_t s) -{ - return memcpy (xmalloc (s), p, s); -} - -/* Clone STRING. */ - -char * -xstrdup (char const *string) -{ - return xmemdup (string, strlen (string) + 1); -} diff --git a/src/gl/xsize.c b/src/gl/xsize.c deleted file mode 100644 index 4b4914c2ca..0000000000 --- a/src/gl/xsize.c +++ /dev/null @@ -1,3 +0,0 @@ -#include -#define XSIZE_INLINE _GL_EXTERN_INLINE -#include "xsize.h" diff --git a/src/gl/xsize.h b/src/gl/xsize.h deleted file mode 100644 index 202a87e086..0000000000 --- a/src/gl/xsize.h +++ /dev/null @@ -1,117 +0,0 @@ -/* xsize.h -- Checked size_t computations. - - Copyright (C) 2003, 2008-2016 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, see . */ - -#ifndef _XSIZE_H -#define _XSIZE_H - -/* Get size_t. */ -#include - -/* Get SIZE_MAX. */ -#include -#if HAVE_STDINT_H -# include -#endif - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif -_GL_INLINE_HEADER_BEGIN -#ifndef XSIZE_INLINE -# define XSIZE_INLINE _GL_INLINE -#endif - -/* The size of memory objects is often computed through expressions of - type size_t. Example: - void* p = malloc (header_size + n * element_size). - These computations can lead to overflow. When this happens, malloc() - returns a piece of memory that is way too small, and the program then - crashes while attempting to fill the memory. - To avoid this, the functions and macros in this file check for overflow. - The convention is that SIZE_MAX represents overflow. - malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc - implementation that uses mmap --, it's recommended to use size_overflow_p() - or size_in_bounds_p() before invoking malloc(). - The example thus becomes: - size_t size = xsum (header_size, xtimes (n, element_size)); - void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); -*/ - -/* Convert an arbitrary value >= 0 to type size_t. */ -#define xcast_size_t(N) \ - ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) - -/* Sum of two sizes, with overflow check. */ -XSIZE_INLINE size_t -#if __GNUC__ >= 3 -__attribute__ ((__pure__)) -#endif -xsum (size_t size1, size_t size2) -{ - size_t sum = size1 + size2; - return (sum >= size1 ? sum : SIZE_MAX); -} - -/* Sum of three sizes, with overflow check. */ -XSIZE_INLINE size_t -#if __GNUC__ >= 3 -__attribute__ ((__pure__)) -#endif -xsum3 (size_t size1, size_t size2, size_t size3) -{ - return xsum (xsum (size1, size2), size3); -} - -/* Sum of four sizes, with overflow check. */ -XSIZE_INLINE size_t -#if __GNUC__ >= 3 -__attribute__ ((__pure__)) -#endif -xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) -{ - return xsum (xsum (xsum (size1, size2), size3), size4); -} - -/* Maximum of two sizes, with overflow check. */ -XSIZE_INLINE size_t -#if __GNUC__ >= 3 -__attribute__ ((__pure__)) -#endif -xmax (size_t size1, size_t size2) -{ - /* No explicit check is needed here, because for any n: - max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ - return (size1 >= size2 ? size1 : size2); -} - -/* Multiplication of a count with an element size, with overflow check. - The count must be >= 0 and the element size must be > 0. - This is a macro, not a function, so that it works correctly even - when N is of a wider type and N > SIZE_MAX. */ -#define xtimes(N, ELSIZE) \ - ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) - -/* Check for overflow. */ -#define size_overflow_p(SIZE) \ - ((SIZE) == SIZE_MAX) -/* Check against overflow. */ -#define size_in_bounds_p(SIZE) \ - ((SIZE) != SIZE_MAX) - -_GL_INLINE_HEADER_END - -#endif /* _XSIZE_H */ diff --git a/src/inline_cmds.h b/src/inline_cmds.h index 5cff93362a..2705a8cc30 100755 --- a/src/inline_cmds.h +++ b/src/inline_cmds.h @@ -14,9 +14,12 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ +#ifndef GNUTLS_SRC_INLINE_CMDS_H +#define GNUTLS_SRC_INLINE_CMDS_H + /* * The inline commands is a facility that can be used optionally * when --inline-commands is set during invocation of gnutls-cli @@ -40,9 +43,10 @@ */ typedef enum INLINE_COMMAND { INLINE_COMMAND_NONE, INLINE_COMMAND_RESUME, - INLINE_COMMAND_RENEGOTIATE + INLINE_COMMAND_RENEGOTIATE, + INLINE_COMMAND_REKEY_LOCAL, + INLINE_COMMAND_REKEY_BOTH } inline_command_t; -#define NUM_INLINE_COMMANDS 2 #define MAX_INLINE_COMMAND_BYTES 20 @@ -66,5 +70,11 @@ struct inline_command_definitions { /* All inline commands will contain a trailing LF */ struct inline_command_definitions inline_commands_def[] = { {INLINE_COMMAND_RESUME, "^resume^\n"}, + {INLINE_COMMAND_REKEY_LOCAL, "^rekey1^\n"}, + {INLINE_COMMAND_REKEY_BOTH, "^rekey^\n"}, {INLINE_COMMAND_RENEGOTIATE, "^renegotiate^\n"}, }; + +#define NUM_INLINE_COMMANDS ((unsigned)(sizeof(inline_commands_def)/sizeof(inline_commands_def[0]))) + +#endif /* GNUTLS_SRC_INLINE_CMDS_H */ diff --git a/src/libopts/COPYING.gplv3 b/src/libopts/COPYING.gplv3 index 26d6fd2e7b..67532741f9 100644 --- a/src/libopts/COPYING.gplv3 +++ b/src/libopts/COPYING.gplv3 @@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. diff --git a/src/libopts/Makefile.am b/src/libopts/Makefile.am index 54ba89e0bb..1c46ca3d98 100644 --- a/src/libopts/Makefile.am +++ b/src/libopts/Makefile.am @@ -54,4 +54,4 @@ EXTRA_DIST += \ restore.c save.c sort.c \ stack.c stdnoreturn.in.h streqvcmp.c \ text_mmap.c time.c tokenize.c \ - usage.c version.c + usage.c version.c save-flags.c save-flags.h diff --git a/build-aux/snippet/_Noreturn.h b/src/libopts/_Noreturn.h similarity index 100% rename from build-aux/snippet/_Noreturn.h rename to src/libopts/_Noreturn.h diff --git a/src/libopts/ag-char-map.h b/src/libopts/ag-char-map.h index d9961af222..cced2303ab 100644 --- a/src/libopts/ag-char-map.h +++ b/src/libopts/ag-char-map.h @@ -1,6 +1,6 @@ /* * 29 bits for 46 character classifications - * generated by char-mapper on 09/12/15 at 05:41:48 + * generated by char-mapper on 08/26/18 at 10:44:22 * * This file contains the character classifications * used by AutoGen and AutoOpts for identifying tokens. @@ -8,7 +8,7 @@ * * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control diff --git a/src/libopts/alias.c b/src/libopts/alias.c index 49e1f1fdd1..231f275d50 100644 --- a/src/libopts/alias.c +++ b/src/libopts/alias.c @@ -12,7 +12,7 @@ * * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -31,7 +31,7 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -LOCAL tSuccess +static tSuccess too_many_occurrences(tOptions * opts, tOptDesc * od) { if ((opts->fOptSet & OPTPROC_ERRSTOP) != 0) { diff --git a/src/libopts/ao-strs.c b/src/libopts/ao-strs.c index 514eedc43d..7f59372601 100644 --- a/src/libopts/ao-strs.c +++ b/src/libopts/ao-strs.c @@ -6,7 +6,7 @@ * From the definitions ao-strs.def * and the template file strings * - * Copyright (C) 2011-2015 Bruce Korb, all rights reserved. + * Copyright (C) 2011-2018 Bruce Korb, all rights reserved. * This is free software. It is licensed for use, modification and * redistribution under the terms of the * Modified (3 clause) Berkeley Software Distribution License @@ -38,160 +38,164 @@ */ #include "ao-strs.h" -char const ao_strs_strtable[6670] = +char const ao_strs_strtable[6714] = /* 0 */ "-_^\0" /* 4 */ " %s%s\n\0" -/* 12 */ "auto-options\0" -/* 25 */ "program\0" -/* 33 */ "%%-%ds %%s\n\0" -/* 45 */ "\n" +/* 12 */ "\n\0" +/* 64 */ "\n" "%s\n\n\0" -/* 51 */ "=file\0" -/* 57 */ "=Mbr\0" -/* 62 */ "=Cplx\0" -/* 68 */ "[=arg]\0" -/* 75 */ "--%2$s%1$s\0" -/* 86 */ "=Tim\0" -/* 91 */ "none\0" -/* 96 */ "# preset/initialization file\n" +/* 70 */ "=file\0" +/* 76 */ "=Mbr\0" +/* 81 */ "=Cplx\0" +/* 87 */ "[=arg]\0" +/* 94 */ "--%2$s%1$s\0" +/* 105 */ "=Tim\0" +/* 110 */ "none\0" +/* 115 */ "# preset/initialization file\n" "# %s#\n\0" -/* 134 */ " %3s %-14s %s\0" -/* 148 */ "%s\0" -/* 151 */ "T/F\0" -/* 155 */ "\n" +/* 153 */ " %3s %-14s %s\0" +/* 167 */ "%s\0" +/* 170 */ "T/F\0" +/* 174 */ "\n" "%s\n\n" "%s\0" -/* 163 */ "Fil\0" -/* 167 */ "KWd\0" -/* 171 */ "Mbr\0" -/* 175 */ "Cpx\0" -/* 179 */ "no \0" -/* 183 */ "Num\0" -/* 187 */ "opt\0" -/* 191 */ "YES\0" -/* 195 */ "Str\0" -/* 199 */ "Tim\0" -/* 203 */ "\t\t\t\t- \0" -/* 210 */ "\t\t\t\t \0" -/* 217 */ "\t\t\t\t-- and \0" -/* 229 */ "\t\t\t\t%s\n\0" -/* 237 */ " \0" -/* 244 */ " \0" -/* 250 */ " \0" -/* 254 */ " \0" -/* 257 */ "all\0" -/* 261 */ " \t\n" +/* 182 */ "Fil\0" +/* 186 */ "KWd\0" +/* 190 */ "Mbr\0" +/* 194 */ "Cpx\0" +/* 198 */ "no \0" +/* 202 */ "Num\0" +/* 206 */ "opt\0" +/* 210 */ "YES\0" +/* 214 */ "Str\0" +/* 218 */ "Tim\0" +/* 222 */ "\t\t\t\t- \0" +/* 229 */ "\t\t\t\t \0" +/* 236 */ "\t\t\t\t-- and \0" +/* 248 */ "\t\t\t\t%s\n\0" +/* 256 */ " \0" +/* 263 */ " \0" +/* 269 */ " \0" +/* 273 */ " \0" +/* 276 */ "all\0" +/* 280 */ " \t\n" ":=\0" -/* 267 */ "%s_%s_%d=\0" -/* 277 */ "''\0" -/* 280 */ " ;;\n\n\0" -/* 293 */ "'\n\n\0" -/* 297 */ "\n\0" -/* 304 */ " %s\n\0" -/* 310 */ "%%-%ds\0" -/* 317 */ "\n" +/* 286 */ "%s_%s_%d=\0" +/* 296 */ "''\0" +/* 299 */ " ;;\n\n\0" +/* 312 */ "'\n\n\0" +/* 316 */ "\n\0" +/* 323 */ " %s\n\0" +/* 329 */ "%%-%ds\0" +/* 336 */ "\n" "export %s_%s_%d\n\0" -/* 335 */ "false\0" -/* 341 */ " -* )\n\0" -/* 351 */ "flag\0" -/* 356 */ "INVALID-%d\0" -/* 367 */ "*INVALID*\0" -/* 377 */ "\\n\\\n\0" -/* 382 */ " --* )\n\0" -/* 393 */ "--\0" -/* 396 */ "LONGUSAGE\0" -/* 406 */ " %s\n\0" -/* 422 */ "\\%03o\0" -/* 428 */ "more\0" -/* 433 */ "<%s type=nested>\n\0" -/* 451 */ "%s\n\0" -/* 455 */ "%s\n" +/* 354 */ "false\0" +/* 360 */ " -* )\n\0" +/* 370 */ "flag\0" +/* 375 */ "INVALID-%d\0" +/* 386 */ "*INVALID*\0" +/* 396 */ "\\n\\\n\0" +/* 401 */ " --* )\n\0" +/* 412 */ "--\0" +/* 415 */ "LONGUSAGE\0" +/* 425 */ " %s\n\0" +/* 441 */ "\\%03o\0" +/* 447 */ "more\0" +/* 452 */ "<%s type=nested>\n\0" +/* 470 */ "%s\n\0" +/* 474 */ "%s\n" " \0" -/* 461 */ "OPT_ARG_NEEDED=NO\0" -/* 479 */ "<%s/>\n\0" -/* 486 */ "OPT_ARG_NEEDED=OK\0" -/* 504 */ "\t\0" -/* 506 */ "<%s>\0" -/* 511 */ "option\0" -/* 518 */ "\n" +/* 480 */ "OPT_ARG_NEEDED=NO\0" +/* 498 */ "<%s/>\n\0" +/* 505 */ "OPT_ARG_NEEDED=OK\0" +/* 523 */ "\t\0" +/* 525 */ "<%s>\0" +/* 530 */ "option\0" +/* 537 */ "\n" "export %s_%s\n\0" -/* 533 */ "%s_%s=\0" -/* 540 */ " | \0" -/* 544 */ "PAGER\0" -/* 550 */ "%1$s %2$s ; rm -f %2$s\0" -/* 573 */ " + \0" -/* 577 */ " puts(_(%s));\n\0" -/* 593 */ "\\'\0" -/* 596 */ "'%s'\0" -/* 601 */ " -- %s\0" -/* 608 */ "%s_%s_TEXT='\0" -/* 621 */ "#! %s\n\0" -/* 628 */ "\n" +/* 552 */ "%s_%s=\0" +/* 559 */ " | \0" +/* 563 */ "PAGER\0" +/* 569 */ "%1$s %2$s ; rm -f %2$s\0" +/* 592 */ " + \0" +/* 596 */ " puts(_(%s));\n\0" +/* 612 */ "\\'\0" +/* 615 */ "'%s'\0" +/* 620 */ " -- %s\0" +/* 627 */ "%s_%s_TEXT='\0" +/* 640 */ "#! %s\n\0" +/* 647 */ "\n" "env | grep '^%s_'\n\0" -/* 648 */ "=%1$lu # 0x%1$lX\n\0" -/* 666 */ "stdout\0" -/* 673 */ "%A %B %e, %Y at %r %Z\0" -/* 695 */ "TMPDIR\0" -/* 702 */ "%s/use-%u.XXXXXX\0" -/* 719 */ "true\0" -/* 724 */ "<%s type=%s>\0" -/* 737 */ "VERSION\0" -/* 745 */ "#x%02X;\0" -/* 753 */ "OPT_ARG_NEEDED=YES\0" -/* 772 */ "'\\''\0" -/* 777 */ " '%s'\0" -/* 783 */ "libopts misguessed length of string\n\0" -/* 820 */ "\n" +/* 667 */ "=%1$lu # 0x%1$lX\n\0" +/* 685 */ "stdout\0" +/* 692 */ "%A %B %e, %Y at %r %Z\0" +/* 714 */ "TMPDIR\0" +/* 721 */ "%s/use-%u.XXXXXX\0" +/* 738 */ "true\0" +/* 743 */ "<%s type=%s>\0" +/* 756 */ "VERSION\0" +/* 764 */ "#x%02X;\0" +/* 772 */ "OPT_ARG_NEEDED=YES\0" +/* 791 */ "\n" + "# %s -- %s\n\0" +/* 804 */ "# DEFAULT: \0" +/* 816 */ "'\\''\0" +/* 821 */ " '%s'\0" +/* 827 */ "libopts misguessed length of string\n\0" +/* 864 */ "\n" "OPTION_CT=0\n\0" -/* 834 */ "set --\0" -/* 841 */ "/tmp\0" -/* 846 */ " ;;\n\n\0" -/* 863 */ " '%c' )\n\0" -/* 879 */ " '%s' )\n\0" -/* 895 */ " '%s' | \\\n\0" -/* 913 */ "<%1$s type=boolean>%2$s\n\0" -/* 945 */ "# From the %s option definitions\n" +/* 878 */ "set --\0" +/* 885 */ "/tmp\0" +/* 890 */ " ;;\n\n\0" +/* 907 */ " '%c' )\n\0" +/* 923 */ " '%s' )\n\0" +/* 939 */ " '%s' | \\\n\0" +/* 957 */ "<%1$s type=boolean>%2$s\n\0" +/* 989 */ "# From the %s option definitions\n" "#\n\0" -/* 982 */ "echo 'Warning: Cannot load options files' >&2\0" -/* 1029 */ "echo 'Warning: Cannot save options files' >&2\0" -/* 1076 */ "echo 'Warning: Cannot suppress the loading of options files' >&2\0" -/* 1142 */ "<%1$s type=integer>0x%2$lX\n\0" -/* 1177 */ "%1$s_%2$s_TEXT='no %2$s text'\n\0" -/* 1208 */ "%1$s_%2$s_MODE='%3$s'\n" +/* 1026 */ "echo 'Warning: Cannot load options files' >&2\0" +/* 1073 */ "echo 'Warning: Cannot save options files' >&2\0" +/* 1120 */ "echo 'Warning: Cannot suppress the loading of options files' >&2\0" +/* 1186 */ "<%1$s type=integer>0x%2$lX\n\0" +/* 1221 */ "%1$s_%2$s_TEXT='no %2$s text'\n\0" +/* 1252 */ "%1$s_%2$s_MODE='%3$s'\n" "export %1$s_%2$s_MODE\n\0" -/* 1253 */ "%1$s_%2$s='%3$s'\n" +/* 1297 */ "%1$s_%2$s='%3$s'\n" "export %1$s_%2$s\n\0" -/* 1288 */ "%1$s_%2$s_CT=%3$d\n" +/* 1332 */ "%1$s_%2$s_CT=%3$d\n" "export %1$s_%2$s_CT\n\0" -/* 1327 */ "OPTION_CT=%d\n" +/* 1371 */ "OPTION_CT=%d\n" "export OPTION_CT\n\0" -/* 1358 */ "%1$s_%2$s=%3$s\n" +/* 1402 */ "%1$s_%2$s=%3$s\n" "export %1$s_%2$s\n\0" -/* 1391 */ "%1$s_%2$s=%3$d # 0x%3$X\n" +/* 1435 */ "%1$s_%2$s=%3$d # 0x%3$X\n" "export %1$s_%2$s\n\0" -/* 1433 */ " case \"${OPT_CODE}\" in\n\0" -/* 1464 */ " if [ $%1$s_%2$s_CT -gt %3$u ] ; then\n" +/* 1477 */ " case \"${OPT_CODE}\" in\n\0" +/* 1508 */ " if [ $%1$s_%2$s_CT -gt %3$u ] ; then\n" " echo 'Error: more than %3$d %2$s options'\n" " echo \"$%1$s_USAGE_TEXT\"\n" " exit 1\n" " fi >&2\n\0" -/* 1655 */ "test ${%1$s_%2$s_CT-0} -ge %3$u || {\n" +/* 1699 */ "test ${%1$s_%2$s_CT-0} -ge %3$u || {\n" " echo %1$s_%2$s has not been set\n" " exit 1\n" "} 1>&2\n\0" -/* 1747 */ "test -n \"$%1$s_%2$s\" || {\n" +/* 1791 */ "test -n \"$%1$s_%2$s\" || {\n" " echo %1$s_%2$s has not been set\n" " exit 1\n" "} 1>&2\n\0" -/* 1828 */ " echo \"$%s_%s_TEXT\"\n" +/* 1872 */ " echo \"$%s_%s_TEXT\"\n" " exit 0\n\0" -/* 1879 */ "\n" +/* 1923 */ "\n" "# # # # # # # # # #\n" "#\n" "# END OF AUTOMATED OPTION PROCESSING\n" "#\n" "# # # # # # # # # # -- do not modify this marker --\n\0" -/* 1995 */ " if [ -n \"${OPT_ARG_VAL}\" ]\n" +/* 2039 */ " if [ -n \"${OPT_ARG_VAL}\" ]\n" " then\n" " eval %1$s_${OPT_NAME}${OPT_ELEMENT}=\"'${OPT_ARG_VAL}'\"\n" " export %1$s_${OPT_NAME}${OPT_ELEMENT}\n" @@ -206,15 +210,15 @@ char const ao_strs_strtable[6670] = "unset OPT_NAME || :\n" "unset OPT_CODE || :\n" "unset OPT_ARG_VAL || :\n\0" -/* 2374 */ " OPT_CODE=`echo \"X${OPT_ARG}\"|sed 's/^X-*//'`\n" +/* 2418 */ " OPT_CODE=`echo \"X${OPT_ARG}\"|sed 's/^X-*//'`\n" " shift\n" " OPT_ARG=$1\n" " case \"${OPT_CODE}\" in *=* )\n" " OPT_ARG_VAL=`echo \"${OPT_CODE}\"|sed 's/^[^=]*=//'`\n" " OPT_CODE=`echo \"${OPT_CODE}\"|sed 's/=.*$//'` ;; esac\n\0" -/* 2625 */ " OPT_CODE=`echo \"X${OPT_ARG}\" | sed 's/X-\\(.\\).*/\\1/'`\n" +/* 2669 */ " OPT_CODE=`echo \"X${OPT_ARG}\" | sed 's/X-\\(.\\).*/\\1/'`\n" " OPT_ARG=` echo \"X${OPT_ARG}\" | sed 's/X-.//'`\n\0" -/* 2742 */ "\n" +/* 2786 */ "\n" "ARG_COUNT=$#\n" "OPT_PROCESS=true\n" "OPT_ARG=$1\n" @@ -227,7 +231,7 @@ char const ao_strs_strtable[6670] = " OPT_PROCESS=false\n" " shift\n" " ;;\n\0" -/* 2949 */ " case \"${OPT_ARG_NEEDED}\" in\n" +/* 2993 */ " case \"${OPT_ARG_NEEDED}\" in\n" " NO )\n" " OPT_ARG_VAL=''\n" " ;;\n" @@ -255,10 +259,10 @@ char const ao_strs_strtable[6670] = " fi\n" " ;;\n" " esac\n\0" -/* 3728 */ " %1$s_%2$s_CT=`expr ${%1$s_%2$s_CT} + 1`\n" +/* 3772 */ " %1$s_%2$s_CT=`expr ${%1$s_%2$s_CT} + 1`\n" " OPT_ELEMENT=\"_${%1$s_%2$s_CT}\"\n" " OPT_NAME='%2$s'\n\0" -/* 3852 */ "\n" +/* 3896 */ "\n" "if test -z \"${%1$s_%2$s}\"\n" "then\n" " %1$s_%2$s_CT=0\n" @@ -268,16 +272,16 @@ char const ao_strs_strtable[6670] = " %1$s_%2$s_1=${%1$s_%2$s}\n" " export %1$s_%2$s_CT %1$s_%2$s_1\n" "fi\n\0" -/* 4010 */ " * )\n" +/* 4054 */ " * )\n" " OPT_PROCESS=false\n" " ;;\n" " esac\n\0" -/* 4067 */ " %1$s_%2$s_CT=0\n" +/* 4111 */ " %1$s_%2$s_CT=0\n" " OPT_ELEMENT=''\n" " %1$s_%2$s='%3$s'\n" " export %1$s_%2$s\n" " OPT_NAME='%2$s'\n\0" -/* 4208 */ " if [ -n \"${%1$s_%2$s}\" ] && ${%1$s_%2$s_set} ; then\n" +/* 4252 */ " if [ -n \"${%1$s_%2$s}\" ] && ${%1$s_%2$s_set} ; then\n" " echo 'Error: duplicate %2$s option'\n" " echo \"$%1$s_USAGE_TEXT\"\n" " exit 1\n" @@ -286,7 +290,7 @@ char const ao_strs_strtable[6670] = " %1$s_%2$s='%3$s'\n" " export %1$s_%2$s\n" " OPT_NAME='%2$s'\n\0" -/* 4525 */ "\n" +/* 4569 */ "\n" "ARG_COUNT=$#\n" "OPT_ARG=$1\n" "while [ $# -gt 0 ]\n" @@ -294,7 +298,7 @@ char const ao_strs_strtable[6670] = " OPT_ELEMENT=''\n" " OPT_ARG_VAL=''\n" " OPT_ARG=${1}\n\0" -/* 4628 */ " case \"${OPT_ARG_NEEDED}\" in\n" +/* 4672 */ " case \"${OPT_ARG_NEEDED}\" in\n" " NO )\n" " if [ -n \"${OPT_ARG}\" ]\n" " then\n" @@ -339,33 +343,33 @@ char const ao_strs_strtable[6670] = " fi\n" " ;;\n" " esac\n\0" -/* 5782 */ " echo \"$%s_LONGUSAGE_TEXT\" | ${PAGER-more}\n" +/* 5826 */ " echo \"$%s_LONGUSAGE_TEXT\" | ${PAGER-more}\n" " exit 0\n\0" -/* 5856 */ "%s OF %s\n" +/* 5900 */ "%s OF %s\n" "#\n" "# From here to the next `-- do not modify this marker --',\n" "# the text has been generated %s\n\0" -/* 5962 */ " eval %1$s_%2$s${OPT_ELEMENT}=true\n" +/* 6006 */ " eval %1$s_%2$s${OPT_ELEMENT}=true\n" " export %1$s_%2$s${OPT_ELEMENT}\n\0" -/* 6052 */ " if [ -n \"${%1$s_%2$s}\" ] && ${%1$s_%2$s_set} ; then\n" +/* 6096 */ " if [ -n \"${%1$s_%2$s}\" ] && ${%1$s_%2$s_set} ; then\n" " echo 'Error: duplicate %2$s option'\n" " echo \"$%1$s_USAGE_TEXT\"\n" " exit 1\n" " fi >&2\n" " %1$s_%2$s_set=true\n" " OPT_NAME='%2$s'\n\0" -/* 6311 */ "\n" +/* 6355 */ "\n" "%1$s_%2$s=${%1$s_%2$s-'%3$s'}\n" "%1$s_%2$s_set=false\n" "export %1$s_%2$s\n\0" -/* 6380 */ "\n" +/* 6424 */ "\n" "%1$s_%2$s=${%1$s_%2$s}\n" "%1$s_%2$s_set=false\n" "export %1$s_%2$s\n\0" -/* 6442 */ "# # # # # # # # # # -- do not modify this marker --\n" +/* 6486 */ "# # # # # # # # # # -- do not modify this marker --\n" "#\n" "# DO NOT EDIT THIS SECTION\n\0" -/* 6525 */ " * )\n" +/* 6569 */ " * )\n" " echo Unknown %s: \"${OPT_CODE}\" >&2\n" " echo \"$%s_USAGE_TEXT\" >&2\n" " exit 1\n" diff --git a/src/libopts/ao-strs.h b/src/libopts/ao-strs.h index f9377e2853..95036ef726 100644 --- a/src/libopts/ao-strs.h +++ b/src/libopts/ao-strs.h @@ -6,7 +6,7 @@ * From the definitions ao-strs.def * and the template file strings * - * Copyright (C) 2011-2015 Bruce Korb, all rights reserved. + * Copyright (C) 2011-2018 Bruce Korb, all rights reserved. * This is free software. It is licensed for use, modification and * redistribution under the terms of the * Modified (3 clause) Berkeley Software Distribution License @@ -39,294 +39,300 @@ #ifndef STRINGS_AO_STRS_H_GUARD #define STRINGS_AO_STRS_H_GUARD 1 /* - * 143 strings in ao_strs_strtable string table + * 146 strings in ao_strs_strtable string table */ -#define ARG_BREAK_STR (ao_strs_strtable+261) +#define ARG_BREAK_STR (ao_strs_strtable+280) #define ARG_BREAK_STR_LEN 5 -#define ARG_BY_NUM_FMT (ao_strs_strtable+267) +#define ARG_BY_NUM_FMT (ao_strs_strtable+286) #define ARG_BY_NUM_FMT_LEN 9 -#define BOOL_ATR_FMT (ao_strs_strtable+913) +#define BOOL_ATR_FMT (ao_strs_strtable+957) #define BOOL_ATR_FMT_LEN 31 -#define CHK_MAX_COUNT (ao_strs_strtable+1464) +#define CHK_MAX_COUNT (ao_strs_strtable+1508) #define CHK_MAX_COUNT_LEN 190 -#define CHK_MIN_COUNT (ao_strs_strtable+1655) +#define CHK_MIN_COUNT (ao_strs_strtable+1699) #define CHK_MIN_COUNT_LEN 91 -#define CHK_ONE_REQUIRED (ao_strs_strtable+1747) +#define CHK_ONE_REQUIRED (ao_strs_strtable+1791) #define CHK_ONE_REQUIRED_LEN 80 -#define ECHO_N_EXIT (ao_strs_strtable+1828) +#define ECHO_N_EXIT (ao_strs_strtable+1872) #define ECHO_N_EXIT_LEN 50 -#define EMPTY_ARG (ao_strs_strtable+277) +#define EMPTY_ARG (ao_strs_strtable+296) #define EMPTY_ARG_LEN 2 -#define END_MARK (ao_strs_strtable+1879) +#define END_MARK (ao_strs_strtable+1923) #define END_MARK_LEN 115 -#define END_OPT_SEL_STR (ao_strs_strtable+280) +#define END_OPT_SEL_STR (ao_strs_strtable+299) #define END_OPT_SEL_STR_LEN 12 -#define END_PRE_FMT (ao_strs_strtable+945) +#define END_PRE_FMT (ao_strs_strtable+989) #define END_PRE_FMT_LEN 36 -#define END_SET_TEXT (ao_strs_strtable+293) +#define END_SET_TEXT (ao_strs_strtable+312) #define END_SET_TEXT_LEN 3 -#define END_XML_FMT (ao_strs_strtable+297) +#define END_XML_FMT (ao_strs_strtable+316) #define END_XML_FMT_LEN 6 -#define ENUM_ERR_LINE (ao_strs_strtable+304) +#define ENUM_ERR_LINE (ao_strs_strtable+323) #define ENUM_ERR_LINE_LEN 5 -#define ENUM_ERR_WIDTH (ao_strs_strtable+310) +#define ENUM_ERR_WIDTH (ao_strs_strtable+329) #define ENUM_ERR_WIDTH_LEN 6 -#define EXPORT_ARG_FMT (ao_strs_strtable+317) +#define EXPORT_ARG_FMT (ao_strs_strtable+336) #define EXPORT_ARG_FMT_LEN 17 -#define FALSE_STR (ao_strs_strtable+335) +#define FALSE_STR (ao_strs_strtable+354) #define FALSE_STR_LEN 5 -#define FINISH_LOOP (ao_strs_strtable+1995) +#define FINISH_LOOP (ao_strs_strtable+2039) #define FINISH_LOOP_LEN 378 -#define FLAG_OPT_MARK (ao_strs_strtable+341) +#define FLAG_OPT_MARK (ao_strs_strtable+360) #define FLAG_OPT_MARK_LEN 9 -#define FLAG_STR (ao_strs_strtable+351) +#define FLAG_STR (ao_strs_strtable+370) #define FLAG_STR_LEN 4 -#define INIT_LOPT_STR (ao_strs_strtable+2374) +#define INIT_LOPT_STR (ao_strs_strtable+2418) #define INIT_LOPT_STR_LEN 250 -#define INIT_OPT_STR (ao_strs_strtable+2625) +#define INIT_OPT_STR (ao_strs_strtable+2669) #define INIT_OPT_STR_LEN 116 -#define INVALID_FMT (ao_strs_strtable+356) +#define INVALID_FMT (ao_strs_strtable+375) #define INVALID_FMT_LEN 10 -#define INVALID_STR (ao_strs_strtable+367) +#define INVALID_STR (ao_strs_strtable+386) #define INVALID_STR_LEN 9 -#define LINE_SPLICE (ao_strs_strtable+377) +#define LINE_SPLICE (ao_strs_strtable+396) #define LINE_SPLICE_LEN 4 -#define LONG_OPT_MARK (ao_strs_strtable+382) -#define LONG_OPT_MARKER (ao_strs_strtable+393) +#define LONG_OPT_MARK (ao_strs_strtable+401) +#define LONG_OPT_MARKER (ao_strs_strtable+412) #define LONG_OPT_MARKER_LEN 2 #define LONG_OPT_MARK_LEN 10 -#define LONG_USE_STR (ao_strs_strtable+396) +#define LONG_USE_STR (ao_strs_strtable+415) #define LONG_USE_STR_LEN 9 -#define LOOP_STR (ao_strs_strtable+2742) +#define LOOP_STR (ao_strs_strtable+2786) #define LOOP_STR_LEN 206 -#define LOPT_ARG_FMT (ao_strs_strtable+2949) +#define LOPT_ARG_FMT (ao_strs_strtable+2993) #define LOPT_ARG_FMT_LEN 778 -#define LVL3_CMD (ao_strs_strtable+406) +#define LVL3_CMD (ao_strs_strtable+425) #define LVL3_CMD_LEN 15 -#define MK_STR_OCT_FMT (ao_strs_strtable+422) +#define MK_STR_OCT_FMT (ao_strs_strtable+441) #define MK_STR_OCT_FMT_LEN 5 -#define MORE_STR (ao_strs_strtable+428) +#define MORE_STR (ao_strs_strtable+447) #define MORE_STR_LEN 4 -#define MULTI_ARG_FMT (ao_strs_strtable+3728) +#define MULTI_ARG_FMT (ao_strs_strtable+3772) #define MULTI_ARG_FMT_LEN 123 -#define MULTI_DEF_FMT (ao_strs_strtable+3852) +#define MULTI_DEF_FMT (ao_strs_strtable+3896) #define MULTI_DEF_FMT_LEN 157 -#define NESTED_OPT_FMT (ao_strs_strtable+433) +#define NESTED_OPT_FMT (ao_strs_strtable+452) #define NESTED_OPT_FMT_LEN 17 -#define NLSTR_FMT (ao_strs_strtable+451) +#define NLSTR_FMT (ao_strs_strtable+470) #define NLSTR_FMT_LEN 3 -#define NLSTR_SPACE_FMT (ao_strs_strtable+455) +#define NLSTR_SPACE_FMT (ao_strs_strtable+474) #define NLSTR_SPACE_FMT_LEN 5 -#define NONE_STR (ao_strs_strtable+91) +#define NONE_STR (ao_strs_strtable+110) #define NONE_STR_LEN 4 -#define NOT_FOUND_STR (ao_strs_strtable+4010) +#define NOT_FOUND_STR (ao_strs_strtable+4054) #define NOT_FOUND_STR_LEN 56 -#define NO_ARG_NEEDED (ao_strs_strtable+461) +#define NO_ARG_NEEDED (ao_strs_strtable+480) #define NO_ARG_NEEDED_LEN 17 -#define NO_LOAD_WARN (ao_strs_strtable+982) +#define NO_LOAD_WARN (ao_strs_strtable+1026) #define NO_LOAD_WARN_LEN 46 -#define NO_MULTI_ARG_FMT (ao_strs_strtable+4067) +#define NO_MULTI_ARG_FMT (ao_strs_strtable+4111) #define NO_MULTI_ARG_FMT_LEN 140 -#define NO_SAVE_OPTS (ao_strs_strtable+1029) +#define NO_SAVE_OPTS (ao_strs_strtable+1073) #define NO_SAVE_OPTS_LEN 46 -#define NO_SGL_ARG_FMT (ao_strs_strtable+4208) +#define NO_SGL_ARG_FMT (ao_strs_strtable+4252) #define NO_SGL_ARG_FMT_LEN 316 -#define NO_SUPPRESS_LOAD (ao_strs_strtable+1076) +#define NO_SUPPRESS_LOAD (ao_strs_strtable+1120) #define NO_SUPPRESS_LOAD_LEN 65 -#define NULL_ATR_FMT (ao_strs_strtable+479) +#define NULL_ATR_FMT (ao_strs_strtable+498) #define NULL_ATR_FMT_LEN 6 -#define NUMB_ATR_FMT (ao_strs_strtable+1142) +#define NUMB_ATR_FMT (ao_strs_strtable+1186) #define NUMB_ATR_FMT_LEN 34 -#define OK_NEED_OPT_ARG (ao_strs_strtable+486) +#define OK_NEED_OPT_ARG (ao_strs_strtable+505) #define OK_NEED_OPT_ARG_LEN 17 -#define ONE_TAB_STR (ao_strs_strtable+504) +#define ONE_TAB_STR (ao_strs_strtable+523) #define ONE_TAB_STR_LEN 1 -#define ONLY_OPTS_LOOP (ao_strs_strtable+4525) +#define ONLY_OPTS_LOOP (ao_strs_strtable+4569) #define ONLY_OPTS_LOOP_LEN 102 -#define OPEN_CLOSE_FMT (ao_strs_strtable+479) +#define OPEN_CLOSE_FMT (ao_strs_strtable+498) #define OPEN_CLOSE_FMT_LEN 6 -#define OPEN_XML_FMT (ao_strs_strtable+506) +#define OPEN_XML_FMT (ao_strs_strtable+525) #define OPEN_XML_FMT_LEN 4 -#define OPTION_STR (ao_strs_strtable+511) +#define OPTION_STR (ao_strs_strtable+530) #define OPTION_STR_LEN 6 -#define OPT_ARG_FMT (ao_strs_strtable+4628) +#define OPT_ARG_FMT (ao_strs_strtable+4672) #define OPT_ARG_FMT_LEN 1153 -#define OPT_END_FMT (ao_strs_strtable+518) +#define OPT_END_FMT (ao_strs_strtable+537) #define OPT_END_FMT_LEN 14 -#define OPT_VAL_FMT (ao_strs_strtable+533) +#define OPT_VAL_FMT (ao_strs_strtable+552) #define OPT_VAL_FMT_LEN 6 -#define OR_STR (ao_strs_strtable+540) +#define OR_STR (ao_strs_strtable+559) #define OR_STR_LEN 3 -#define PAGER_NAME (ao_strs_strtable+544) +#define PAGER_NAME (ao_strs_strtable+563) #define PAGER_NAME_LEN 5 -#define PAGE_USAGE_FMT (ao_strs_strtable+550) +#define PAGE_USAGE_FMT (ao_strs_strtable+569) #define PAGE_USAGE_FMT_LEN 22 -#define PAGE_USAGE_TEXT (ao_strs_strtable+5782) +#define PAGE_USAGE_TEXT (ao_strs_strtable+5826) #define PAGE_USAGE_TEXT_LEN 73 -#define PLUS_STR (ao_strs_strtable+573) +#define PLUS_STR (ao_strs_strtable+592) #define PLUS_STR_LEN 3 -#define PREAMBLE_FMT (ao_strs_strtable+5856) +#define PREAMBLE_FMT (ao_strs_strtable+5900) #define PREAMBLE_FMT_LEN 105 -#define PUTS_FMT (ao_strs_strtable+577) +#define PUTS_FMT (ao_strs_strtable+596) #define PUTS_FMT_LEN 15 -#define QUOT_APOS (ao_strs_strtable+593) +#define QUOT_APOS (ao_strs_strtable+612) #define QUOT_APOS_LEN 2 -#define QUOT_ARG_FMT (ao_strs_strtable+596) +#define QUOT_ARG_FMT (ao_strs_strtable+615) #define QUOT_ARG_FMT_LEN 4 -#define SET_MULTI_ARG (ao_strs_strtable+5962) +#define SET_MULTI_ARG (ao_strs_strtable+6006) #define SET_MULTI_ARG_LEN 89 -#define SET_NO_TEXT_FMT (ao_strs_strtable+1177) +#define SET_NO_TEXT_FMT (ao_strs_strtable+1221) #define SET_NO_TEXT_FMT_LEN 30 -#define SET_OFF_FMT (ao_strs_strtable+601) +#define SET_OFF_FMT (ao_strs_strtable+620) #define SET_OFF_FMT_LEN 6 -#define SET_TEXT_FMT (ao_strs_strtable+608) +#define SET_TEXT_FMT (ao_strs_strtable+627) #define SET_TEXT_FMT_LEN 12 -#define SGL_ARG_FMT (ao_strs_strtable+6052) +#define SGL_ARG_FMT (ao_strs_strtable+6096) #define SGL_ARG_FMT_LEN 258 -#define SGL_DEF_FMT (ao_strs_strtable+6311) +#define SGL_DEF_FMT (ao_strs_strtable+6355) #define SGL_DEF_FMT_LEN 68 -#define SGL_NO_DEF_FMT (ao_strs_strtable+6380) +#define SGL_NO_DEF_FMT (ao_strs_strtable+6424) #define SGL_NO_DEF_FMT_LEN 61 -#define SHELL_MAGIC (ao_strs_strtable+621) +#define SHELL_MAGIC (ao_strs_strtable+640) #define SHELL_MAGIC_LEN 6 -#define SHOW_PROG_ENV (ao_strs_strtable+628) +#define SHOW_PROG_ENV (ao_strs_strtable+647) #define SHOW_PROG_ENV_LEN 19 -#define SHOW_VAL_FMT (ao_strs_strtable+648) +#define SHOW_VAL_FMT (ao_strs_strtable+667) #define SHOW_VAL_FMT_LEN 17 -#define START_MARK (ao_strs_strtable+6442) +#define START_MARK (ao_strs_strtable+6486) #define START_MARK_LEN 82 -#define STDOUT (ao_strs_strtable+666) +#define STDOUT (ao_strs_strtable+685) #define STDOUT_LEN 6 -#define TIME_FMT (ao_strs_strtable+673) +#define TIME_FMT (ao_strs_strtable+692) #define TIME_FMT_LEN 21 -#define TMPDIR (ao_strs_strtable+695) +#define TMPDIR (ao_strs_strtable+714) #define TMPDIR_LEN 6 -#define TMP_FILE_FMT (ao_strs_strtable+702) +#define TMP_FILE_FMT (ao_strs_strtable+721) #define TMP_FILE_FMT_LEN 16 -#define TMP_USAGE_FMT (ao_strs_strtable+702) +#define TMP_USAGE_FMT (ao_strs_strtable+721) #define TMP_USAGE_FMT_LEN 16 -#define TRUE_STR (ao_strs_strtable+719) +#define TRUE_STR (ao_strs_strtable+738) #define TRUE_STR_LEN 4 -#define TWO_SPACES_STR (ao_strs_strtable+254) +#define TWO_SPACES_STR (ao_strs_strtable+273) #define TWO_SPACES_STR_LEN 2 -#define TYPE_ATR_FMT (ao_strs_strtable+724) +#define TYPE_ATR_FMT (ao_strs_strtable+743) #define TYPE_ATR_FMT_LEN 12 -#define UNK_OPT_FMT (ao_strs_strtable+6525) +#define UNK_OPT_FMT (ao_strs_strtable+6569) #define UNK_OPT_FMT_LEN 144 -#define VER_STR (ao_strs_strtable+737) +#define VER_STR (ao_strs_strtable+756) #define VER_STR_LEN 7 -#define XML_HEX_BYTE_FMT (ao_strs_strtable+745) +#define XML_HEX_BYTE_FMT (ao_strs_strtable+764) #define XML_HEX_BYTE_FMT_LEN 7 -#define YES_NEED_OPT_ARG (ao_strs_strtable+753) +#define YES_NEED_OPT_ARG (ao_strs_strtable+772) #define YES_NEED_OPT_ARG_LEN 18 -#define apostrophe (ao_strs_strtable+772) +#define ao_default_use (ao_strs_strtable+804) +#define ao_default_use_LEN 11 +#define ao_name_use_fmt (ao_strs_strtable+791) +#define ao_name_use_fmt_LEN 12 +#define apostrophe (ao_strs_strtable+816) #define apostrophe_LEN 4 -#define arg_fmt (ao_strs_strtable+777) +#define arg_fmt (ao_strs_strtable+821) #define arg_fmt_LEN 5 -#define init_optct (ao_strs_strtable+820) +#define init_optct (ao_strs_strtable+864) #define init_optct_LEN 13 -#define misguess_len (ao_strs_strtable+783) +#define misguess_len (ao_strs_strtable+827) #define misguess_len_LEN 36 -#define set_dash (ao_strs_strtable+834) +#define set_dash (ao_strs_strtable+878) #define set_dash_LEN 6 -#define tmp_dir (ao_strs_strtable+841) +#define tmp_dir (ao_strs_strtable+885) #define tmp_dir_LEN 4 -#define zAll (ao_strs_strtable+257) +#define zAll (ao_strs_strtable+276) #define zAll_LEN 3 #define zCfgAO_Flags (ao_strs_strtable+12) -#define zCfgAO_Flags_LEN 12 -#define zCfgProg (ao_strs_strtable+25) -#define zCfgProg_LEN 7 -#define zEquivMode (ao_strs_strtable+1208) +#define zCfgAO_Flags_LEN 14 +#define zCfgProg (ao_strs_strtable+27) +#define zCfgProg_LEN 9 +#define zEquivMode (ao_strs_strtable+1252) #define zEquivMode_LEN 44 -#define zFiveSpaces (ao_strs_strtable+244) +#define zFiveSpaces (ao_strs_strtable+263) #define zFiveSpaces_LEN 5 -#define zFmtFmt (ao_strs_strtable+33) +#define zFmtFmt (ao_strs_strtable+37) #define zFmtFmt_LEN 11 -#define zFullOptFmt (ao_strs_strtable+1253) +#define zFmtProg (ao_strs_strtable+49) +#define zFmtProg_LEN 14 +#define zFullOptFmt (ao_strs_strtable+1297) #define zFullOptFmt_LEN 34 -#define zGnuBreak (ao_strs_strtable+45) +#define zGnuBreak (ao_strs_strtable+64) #define zGnuBreak_LEN 5 -#define zGnuFileArg (ao_strs_strtable+51) +#define zGnuFileArg (ao_strs_strtable+70) #define zGnuFileArg_LEN 5 -#define zGnuKeyLArg (ao_strs_strtable+57) +#define zGnuKeyLArg (ao_strs_strtable+76) #define zGnuKeyLArg_LEN 4 -#define zGnuNestArg (ao_strs_strtable+62) +#define zGnuNestArg (ao_strs_strtable+81) #define zGnuNestArg_LEN 5 -#define zGnuOptArg (ao_strs_strtable+68) +#define zGnuOptArg (ao_strs_strtable+87) #define zGnuOptArg_LEN 6 -#define zGnuOptFmt (ao_strs_strtable+75) +#define zGnuOptFmt (ao_strs_strtable+94) #define zGnuOptFmt_LEN 10 -#define zGnuTimeArg (ao_strs_strtable+86) +#define zGnuTimeArg (ao_strs_strtable+105) #define zGnuTimeArg_LEN 4 -#define zNone (ao_strs_strtable+91) +#define zNone (ao_strs_strtable+110) #define zNone_LEN 4 -#define zOptCookieCt (ao_strs_strtable+1288) +#define zOptCookieCt (ao_strs_strtable+1332) #define zOptCookieCt_LEN 38 -#define zOptCtFmt (ao_strs_strtable+1327) +#define zOptCtFmt (ao_strs_strtable+1371) #define zOptCtFmt_LEN 30 -#define zOptDisabl (ao_strs_strtable+1358) +#define zOptDisabl (ao_strs_strtable+1402) #define zOptDisabl_LEN 32 -#define zOptNumFmt (ao_strs_strtable+1391) +#define zOptNumFmt (ao_strs_strtable+1435) #define zOptNumFmt_LEN 41 -#define zOptionCase (ao_strs_strtable+1433) +#define zOptionCase (ao_strs_strtable+1477) #define zOptionCase_LEN 30 -#define zOptionEndSelect (ao_strs_strtable+846) +#define zOptionEndSelect (ao_strs_strtable+890) #define zOptionEndSelect_LEN 16 -#define zOptionFlag (ao_strs_strtable+863) +#define zOptionFlag (ao_strs_strtable+907) #define zOptionFlag_LEN 15 -#define zOptionFullName (ao_strs_strtable+879) +#define zOptionFullName (ao_strs_strtable+923) #define zOptionFullName_LEN 15 -#define zOptionPartName (ao_strs_strtable+895) +#define zOptionPartName (ao_strs_strtable+939) #define zOptionPartName_LEN 17 -#define zPresetFile (ao_strs_strtable+96) +#define zPresetFile (ao_strs_strtable+115) #define zPresetFile_LEN 37 -#define zReqOptFmt (ao_strs_strtable+134) +#define zReqOptFmt (ao_strs_strtable+153) #define zReqOptFmt_LEN 13 #define zSepChars (ao_strs_strtable+0) #define zSepChars_LEN 3 -#define zShrtGnuOptFmt (ao_strs_strtable+148) +#define zShrtGnuOptFmt (ao_strs_strtable+167) #define zShrtGnuOptFmt_LEN 2 -#define zSixSpaces (ao_strs_strtable+237) +#define zSixSpaces (ao_strs_strtable+256) #define zSixSpaces_LEN 6 -#define zStdBoolArg (ao_strs_strtable+151) +#define zStdBoolArg (ao_strs_strtable+170) #define zStdBoolArg_LEN 3 -#define zStdBreak (ao_strs_strtable+155) +#define zStdBreak (ao_strs_strtable+174) #define zStdBreak_LEN 7 -#define zStdFileArg (ao_strs_strtable+163) +#define zStdFileArg (ao_strs_strtable+182) #define zStdFileArg_LEN 3 -#define zStdKeyArg (ao_strs_strtable+167) +#define zStdKeyArg (ao_strs_strtable+186) #define zStdKeyArg_LEN 3 -#define zStdKeyLArg (ao_strs_strtable+171) +#define zStdKeyLArg (ao_strs_strtable+190) #define zStdKeyLArg_LEN 3 -#define zStdNestArg (ao_strs_strtable+175) +#define zStdNestArg (ao_strs_strtable+194) #define zStdNestArg_LEN 3 -#define zStdNoArg (ao_strs_strtable+179) +#define zStdNoArg (ao_strs_strtable+198) #define zStdNoArg_LEN 3 -#define zStdNumArg (ao_strs_strtable+183) +#define zStdNumArg (ao_strs_strtable+202) #define zStdNumArg_LEN 3 -#define zStdOptArg (ao_strs_strtable+187) +#define zStdOptArg (ao_strs_strtable+206) #define zStdOptArg_LEN 3 -#define zStdReqArg (ao_strs_strtable+191) +#define zStdReqArg (ao_strs_strtable+210) #define zStdReqArg_LEN 3 -#define zStdStrArg (ao_strs_strtable+195) +#define zStdStrArg (ao_strs_strtable+214) #define zStdStrArg_LEN 3 -#define zStdTimeArg (ao_strs_strtable+199) +#define zStdTimeArg (ao_strs_strtable+218) #define zStdTimeArg_LEN 3 -#define zTabHyp (ao_strs_strtable+203) -#define zTabHypAnd (ao_strs_strtable+217) +#define zTabHyp (ao_strs_strtable+222) +#define zTabHypAnd (ao_strs_strtable+236) #define zTabHypAnd_LEN 11 #define zTabHyp_LEN 6 -#define zTabSpace (ao_strs_strtable+210) +#define zTabSpace (ao_strs_strtable+229) #define zTabSpace_LEN 6 -#define zTabout (ao_strs_strtable+229) +#define zTabout (ao_strs_strtable+248) #define zTabout_LEN 7 -#define zThreeSpaces (ao_strs_strtable+250) +#define zThreeSpaces (ao_strs_strtable+269) #define zThreeSpaces_LEN 3 -#define zTwoSpaces (ao_strs_strtable+254) +#define zTwoSpaces (ao_strs_strtable+273) #define zTwoSpaces_LEN 2 #define zambig_file (ao_strs_strtable+4) #define zambig_file_LEN 7 -extern char const ao_strs_strtable[6670]; +extern char const ao_strs_strtable[6714]; #endif /* STRINGS_AO_STRS_H_GUARD */ diff --git a/src/libopts/autoopts.c b/src/libopts/autoopts.c index 4b15acafbb..643d277239 100644 --- a/src/libopts/autoopts.c +++ b/src/libopts/autoopts.c @@ -13,7 +13,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -35,7 +35,7 @@ /** * The number of tab characters to skip when printing continuation lines. */ -static unsigned int tab_skip_ct = 0; + static unsigned int tab_skip_ct = 0; #ifndef HAVE_PATHFIND # define pathfind(_p, _n, _m) option_pathfind(_p, _n, _m) @@ -59,7 +59,7 @@ static unsigned int tab_skip_ct = 0; # include "compat/strchr.c" #endif -LOCAL void * +static void * ao_malloc(size_t sz) { void * res = malloc(sz); @@ -69,10 +69,8 @@ ao_malloc(size_t sz) } return res; } -#undef malloc -#define malloc(_s) ao_malloc(_s) -LOCAL void * +static void * ao_realloc(void *p, size_t sz) { void * res = (p == NULL) ? malloc(sz) : realloc(p, sz); @@ -82,10 +80,8 @@ ao_realloc(void *p, size_t sz) } return res; } -#undef realloc -#define realloc(_p,_s) ao_realloc(_p,_s) -LOCAL char * +static char * ao_strdup(char const *str) { char * res = strdup(str); @@ -95,8 +91,6 @@ ao_strdup(char const *str) } return res; } -#undef strdup -#define strdup(_p) ao_strdup(_p) /** * handle an option. @@ -104,7 +98,7 @@ ao_strdup(char const *str) * This routine handles equivalencing, sets the option state flags and * invokes the handler procedure, if any. */ -LOCAL tSuccess +static tSuccess handle_opt(tOptions * opts, tOptState * o_st) { /* @@ -217,7 +211,7 @@ handle_opt(tOptions * opts, tOptState * o_st) * @param opts the program option descriptor * @param o_st the state of the next found option */ -LOCAL tSuccess +static tSuccess next_opt(tOptions * opts, tOptState * o_st) { { @@ -244,7 +238,7 @@ next_opt(tOptions * opts, tOptState * o_st) * @param[in,out] opts program options descriptor * @returns SUCCESS or FAILURE */ -LOCAL tSuccess +static tSuccess regular_opts(tOptions * opts) { /* assert: opts->fOptSet & OPTPROC_IMMEDIATE == 0 */ diff --git a/src/libopts/autoopts.h b/src/libopts/autoopts.h index 6f75f9e44e..36bb43f29d 100644 --- a/src/libopts/autoopts.h +++ b/src/libopts/autoopts.h @@ -11,7 +11,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -41,6 +41,9 @@ # ifdef PATH_MAX # define AG_PATH_MAX ((size_t)PATH_MAX) # else +# ifdef __gnu_hurd__ +# define size_t unsigned long +# endif # define AG_PATH_MAX ((size_t)4096) # endif #else @@ -460,6 +463,13 @@ static char const * program_pkgdatadir = pkgdatadir_default; static tOptionLoadMode option_load_mode = OPTION_LOAD_UNCOOKED; static tePagerState pagerState = PAGER_STATE_INITIAL; +static noreturn void option_exits(int exit_code); +static noreturn void fserr_exit(char const * prog, char const * op, + char const * fname); +static void fserr_warn(char const * prog, char const * op, + char const * fname); +static noreturn void ao_bug(char const * msg); + FILE * option_usage_fp = NULL; static char const * pz_enum_err_fmt; diff --git a/src/libopts/autoopts/options.h b/src/libopts/autoopts/options.h index 0601d0fc57..08dc546214 100644 --- a/src/libopts/autoopts/options.h +++ b/src/libopts/autoopts/options.h @@ -9,11 +9,11 @@ * This file defines all the global structures and special values * used in the automated option processing library. * - * Automated Options Copyright (C) 1992-2015 by Bruce Korb + * Automated Options Copyright (C) 1992-2018 by Bruce Korb * * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -64,7 +64,7 @@ # if defined(HAVE_STDBOOL_H) # include -# else +# elif ! defined(bool) typedef enum { false = 0, true = 1 } _Bool; # define bool _Bool @@ -109,15 +109,15 @@ * @{ */ /// autoopts structure version -#define OPTIONS_STRUCT_VERSION 167937 +#define OPTIONS_STRUCT_VERSION 172033 /// autoopts structure version string -#define OPTIONS_VERSION_STRING "41:1:16" +#define OPTIONS_VERSION_STRING "42:1:17" /// minimum version the autoopts library supports #define OPTIONS_MINIMUM_VERSION 102400 /// minimum version the autoopts library supports as a string #define OPTIONS_MIN_VER_STRING "25:0:0" /// the display version of the autoopts library, as a string -#define OPTIONS_DOTTED_VERSION "41.1" +#define OPTIONS_DOTTED_VERSION "42.1" /// convert a version/release number pair to an integer value #define OPTIONS_VER_TO_NUM(_v, _r) (((_v) * 4096) + (_r)) /// @} @@ -140,7 +140,8 @@ typedef enum { OPARG_TYPE_FLOAT = 9, ///< opt arg is a floating point num OPARG_TYPE_DOUBLE = 10, ///< opt arg is a double prec. float OPARG_TYPE_LONG_DOUBLE = 11, ///< opt arg is a long double prec. - OPARG_TYPE_LONG_LONG = 12 ///< opt arg is a long long int + OPARG_TYPE_LONG_LONG = 12, ///< opt arg is a long long int + OPARG_TYPE_STATIC = 13 ///< } teOptArgType; /** @@ -641,6 +642,7 @@ struct options { void * pSavedState; /// The procedure to call to print usage text + /* __attribute__((__noreturn__)) */ // coverity[+kill] tpUsageProc pUsageProc; /// The procedure to call to translate translatable option messages diff --git a/src/libopts/autoopts/project.h b/src/libopts/autoopts/project.h index 1e7f156ec6..1f196efa0f 100644 --- a/src/libopts/autoopts/project.h +++ b/src/libopts/autoopts/project.h @@ -4,7 +4,7 @@ * * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -71,6 +71,10 @@ typedef int tSuccess; # define MODE extern #endif +#undef NUL +#define NUL '\0' + +#define MOD_LOCAL static #define parse_duration option_parse_duration #endif /* AUTOGEN_PROJECT_H */ diff --git a/src/libopts/autoopts/usage-txt.h b/src/libopts/autoopts/usage-txt.h index 5f6cce18bd..e94337d69b 100644 --- a/src/libopts/autoopts/usage-txt.h +++ b/src/libopts/autoopts/usage-txt.h @@ -8,7 +8,7 @@ * * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2017 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -29,7 +29,7 @@ /** @file usage-txt.h * * This file handles all the bookkeeping required for tracking all the little - * tiny strings used by the AutoOpts library. There are 108 + * tiny strings used by the AutoOpts library. There are 107 * of them. This is not versioned because it is entirely internal to the * library and accessed by client code only in a very well-controlled way: * they may substitute translated strings using a procedure that steps through @@ -47,7 +47,7 @@ typedef struct { char * utpz_GnuKeyArg; char * utpz_GnuNumArg; char * utpz_GnuStrArg; - char const * apz_str[104]; + char const * apz_str[103]; } usage_text_t; /* @@ -55,7 +55,7 @@ typedef struct { * strings and the text array containing untranslatable strings. */ extern usage_text_t option_xlateable_txt; -extern char const option_lib_text[4285]; +extern char const option_lib_text[4267]; #if defined(AUTOOPTS_INTERNAL) /* @@ -110,67 +110,66 @@ extern char const option_lib_text[4285]; #define zNoState (option_xlateable_txt.apz_str[ 40]) #define zNotCmdOpt (option_xlateable_txt.apz_str[ 41]) #define zNotDate (option_xlateable_txt.apz_str[ 42]) -#define zNotDef (option_xlateable_txt.apz_str[ 43]) -#define zNotDuration (option_xlateable_txt.apz_str[ 44]) -#define zneed_more (option_xlateable_txt.apz_str[ 45]) -#define zNotNumber (option_xlateable_txt.apz_str[ 46]) -#define znum_too_large (option_xlateable_txt.apz_str[ 47]) -#define zoffer_usage_fmt (option_xlateable_txt.apz_str[ 48]) -#define zonly_one (option_xlateable_txt.apz_str[ 49]) -#define zstdout_name (option_xlateable_txt.apz_str[ 50]) -#define zstderr_name (option_xlateable_txt.apz_str[ 51]) -#define zwriting (option_xlateable_txt.apz_str[ 52]) -#define zRangeErr (option_xlateable_txt.apz_str[ 53]) -#define zneed_fmt (option_xlateable_txt.apz_str[ 54]) -#define zsave_warn (option_xlateable_txt.apz_str[ 55]) -#define zalt_opt (option_xlateable_txt.apz_str[ 56]) -#define zAuto (option_xlateable_txt.apz_str[ 57]) -#define zDefaultOpt (option_xlateable_txt.apz_str[ 58]) -#define zDis (option_xlateable_txt.apz_str[ 59]) -#define zDisabledOpt (option_xlateable_txt.apz_str[ 60]) -#define zDisabledWhy (option_xlateable_txt.apz_str[ 61]) -#define zEnab (option_xlateable_txt.apz_str[ 62]) -#define ztoo_often_fmt (option_xlateable_txt.apz_str[ 63]) -#define zExamineFmt (option_xlateable_txt.apz_str[ 64]) -#define zFileCannotExist (option_xlateable_txt.apz_str[ 65]) -#define zFileMustExist (option_xlateable_txt.apz_str[ 66]) -#define zFlagOkay (option_xlateable_txt.apz_str[ 67]) -#define zGenshell (option_xlateable_txt.apz_str[ 68]) -#define zLowerBits (option_xlateable_txt.apz_str[ 69]) -#define zMembers (option_xlateable_txt.apz_str[ 70]) -#define zMust (option_xlateable_txt.apz_str[ 71]) -#define zNoFlags (option_xlateable_txt.apz_str[ 72]) -#define zNoLim (option_xlateable_txt.apz_str[ 73]) -#define zNoPreset (option_xlateable_txt.apz_str[ 74]) -#define zNoRq_NoShrtTtl (option_xlateable_txt.apz_str[ 75]) -#define zNoRq_ShrtTtl (option_xlateable_txt.apz_str[ 76]) -#define zNrmOptFmt (option_xlateable_txt.apz_str[ 77]) -#define zNumberOpt (option_xlateable_txt.apz_str[ 78]) -#define zOptsOnly (option_xlateable_txt.apz_str[ 79]) -#define zPathFmt (option_xlateable_txt.apz_str[ 80]) -#define zPlsSendBugs (option_xlateable_txt.apz_str[ 81]) -#define zPreset (option_xlateable_txt.apz_str[ 82]) -#define zPresetIntro (option_xlateable_txt.apz_str[ 83]) -#define zProhib (option_xlateable_txt.apz_str[ 84]) -#define zProhibOne (option_xlateable_txt.apz_str[ 85]) -#define zRange (option_xlateable_txt.apz_str[ 86]) -#define zRangeAbove (option_xlateable_txt.apz_str[ 87]) -#define zRangeExact (option_xlateable_txt.apz_str[ 88]) -#define zRangeLie (option_xlateable_txt.apz_str[ 89]) -#define zRangeOnly (option_xlateable_txt.apz_str[ 90]) -#define zRangeOr (option_xlateable_txt.apz_str[ 91]) -#define zRangeScaled (option_xlateable_txt.apz_str[ 92]) -#define zRangeUpto (option_xlateable_txt.apz_str[ 93]) -#define zReorder (option_xlateable_txt.apz_str[ 94]) -#define zReqOne (option_xlateable_txt.apz_str[ 95]) -#define zReqThese (option_xlateable_txt.apz_str[ 96]) -#define zReq_NoShrtTtl (option_xlateable_txt.apz_str[ 97]) -#define zReq_ShrtTtl (option_xlateable_txt.apz_str[ 98]) -#define zSetMemberSettings (option_xlateable_txt.apz_str[ 99]) -#define zUpTo (option_xlateable_txt.apz_str[100]) -#define zValidKeys (option_xlateable_txt.apz_str[101]) -#define zVendIntro (option_xlateable_txt.apz_str[102]) -#define zVendOptsAre (option_xlateable_txt.apz_str[103]) +#define zNotDuration (option_xlateable_txt.apz_str[ 43]) +#define zneed_more (option_xlateable_txt.apz_str[ 44]) +#define zNotNumber (option_xlateable_txt.apz_str[ 45]) +#define znum_too_large (option_xlateable_txt.apz_str[ 46]) +#define zoffer_usage_fmt (option_xlateable_txt.apz_str[ 47]) +#define zonly_one (option_xlateable_txt.apz_str[ 48]) +#define zstdout_name (option_xlateable_txt.apz_str[ 49]) +#define zstderr_name (option_xlateable_txt.apz_str[ 50]) +#define zwriting (option_xlateable_txt.apz_str[ 51]) +#define zRangeErr (option_xlateable_txt.apz_str[ 52]) +#define zneed_fmt (option_xlateable_txt.apz_str[ 53]) +#define zsave_warn (option_xlateable_txt.apz_str[ 54]) +#define zalt_opt (option_xlateable_txt.apz_str[ 55]) +#define zAuto (option_xlateable_txt.apz_str[ 56]) +#define zDefaultOpt (option_xlateable_txt.apz_str[ 57]) +#define zDis (option_xlateable_txt.apz_str[ 58]) +#define zDisabledOpt (option_xlateable_txt.apz_str[ 59]) +#define zDisabledWhy (option_xlateable_txt.apz_str[ 60]) +#define zEnab (option_xlateable_txt.apz_str[ 61]) +#define ztoo_often_fmt (option_xlateable_txt.apz_str[ 62]) +#define zExamineFmt (option_xlateable_txt.apz_str[ 63]) +#define zFileCannotExist (option_xlateable_txt.apz_str[ 64]) +#define zFileMustExist (option_xlateable_txt.apz_str[ 65]) +#define zFlagOkay (option_xlateable_txt.apz_str[ 66]) +#define zGenshell (option_xlateable_txt.apz_str[ 67]) +#define zLowerBits (option_xlateable_txt.apz_str[ 68]) +#define zMembers (option_xlateable_txt.apz_str[ 69]) +#define zMust (option_xlateable_txt.apz_str[ 70]) +#define zNoFlags (option_xlateable_txt.apz_str[ 71]) +#define zNoLim (option_xlateable_txt.apz_str[ 72]) +#define zNoPreset (option_xlateable_txt.apz_str[ 73]) +#define zNoRq_NoShrtTtl (option_xlateable_txt.apz_str[ 74]) +#define zNoRq_ShrtTtl (option_xlateable_txt.apz_str[ 75]) +#define zNrmOptFmt (option_xlateable_txt.apz_str[ 76]) +#define zNumberOpt (option_xlateable_txt.apz_str[ 77]) +#define zOptsOnly (option_xlateable_txt.apz_str[ 78]) +#define zPathFmt (option_xlateable_txt.apz_str[ 79]) +#define zPlsSendBugs (option_xlateable_txt.apz_str[ 80]) +#define zPreset (option_xlateable_txt.apz_str[ 81]) +#define zPresetIntro (option_xlateable_txt.apz_str[ 82]) +#define zProhib (option_xlateable_txt.apz_str[ 83]) +#define zProhibOne (option_xlateable_txt.apz_str[ 84]) +#define zRange (option_xlateable_txt.apz_str[ 85]) +#define zRangeAbove (option_xlateable_txt.apz_str[ 86]) +#define zRangeExact (option_xlateable_txt.apz_str[ 87]) +#define zRangeLie (option_xlateable_txt.apz_str[ 88]) +#define zRangeOnly (option_xlateable_txt.apz_str[ 89]) +#define zRangeOr (option_xlateable_txt.apz_str[ 90]) +#define zRangeScaled (option_xlateable_txt.apz_str[ 91]) +#define zRangeUpto (option_xlateable_txt.apz_str[ 92]) +#define zReorder (option_xlateable_txt.apz_str[ 93]) +#define zReqOne (option_xlateable_txt.apz_str[ 94]) +#define zReqThese (option_xlateable_txt.apz_str[ 95]) +#define zReq_NoShrtTtl (option_xlateable_txt.apz_str[ 96]) +#define zReq_ShrtTtl (option_xlateable_txt.apz_str[ 97]) +#define zSetMemberSettings (option_xlateable_txt.apz_str[ 98]) +#define zUpTo (option_xlateable_txt.apz_str[ 99]) +#define zValidKeys (option_xlateable_txt.apz_str[100]) +#define zVendIntro (option_xlateable_txt.apz_str[101]) +#define zVendOptsAre (option_xlateable_txt.apz_str[102]) /* * First, set up the strings. Some of these are writable. These are all in @@ -181,7 +180,7 @@ static char eng_zGnuBoolArg[] = "=T/F"; static char eng_zGnuKeyArg[] = "=KWd"; static char eng_zGnuNumArg[] = "=num"; static char eng_zGnuStrArg[] = "=str"; -char const option_lib_text[4285] = +char const option_lib_text[4267] = /* 0 */ "allocation of %d bytes failed\n\0" /* 31 */ "AutoOpts function called without option descriptor\n\0" /* 83 */ "\tThis exceeds the compiled library version: \0" @@ -190,7 +189,7 @@ char const option_lib_text[4285] = /* 228 */ "realloc of %d bytes at 0x%p failed\n\0" /* 264 */ "\tThis is less than the minimum library version: \0" /* 314 */ "Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n\0" + "\tCopyright (C) 1999-2017 by Bruce Korb - all rights reserved\n\0" /* 405 */ "(AutoOpts bug): %s.\n\0" /* 427 */ "optionResetOpt() called, but reset-option not configured\0" /* 484 */ "could not locate the 'help' option\0" @@ -231,76 +230,75 @@ char const option_lib_text[4285] = /* 1771 */ "%s error: no saved option state\n\0" /* 1804 */ "'%s' is not a command line option.\n\0" /* 1840 */ "%s error: '%s' is not a recognizable date/time.\n\0" -/* 1890 */ "'%s' not defined\n\0" -/* 1908 */ "%s error: '%s' is not a recognizable time duration.\n\0" -/* 1962 */ "%s error: The %s option must appear %d times.\n\0" -/* 2010 */ "%s error: '%s' is not a recognizable number.\n\0" -/* 2057 */ "%s error: %s exceeds %s keyword count\n\0" -/* 2097 */ "Try '%s %s' for more information.\n\0" -/* 2132 */ "one %s%s option allowed\n\0" -/* 2157 */ "standard output\0" -/* 2173 */ "standard error\0" -/* 2188 */ "write\0" -/* 2194 */ "%s error: %s option value %ld is out of range.\n\0" -/* 2243 */ "%s error: %s option requires the %s option\n\0" -/* 2288 */ "%s warning: cannot save options - %s not regular file\n\0" -/* 2344 */ "\t\t\t\t- an alternate for '%s'\n\0" -/* 2373 */ "Version, usage and configuration options:\0" -/* 2415 */ "\t\t\t\t- default option for unnamed options\n\0" -/* 2457 */ "\t\t\t\t- disabled as '--%s'\n\0" -/* 2483 */ " --- %-14s %s\n\0" -/* 2498 */ "This option has been disabled\0" -/* 2528 */ "\t\t\t\t- enabled by default\n\0" -/* 2554 */ "%s error: only \0" -/* 2571 */ " - examining environment variables named %s_*\n\0" -/* 2618 */ "\t\t\t\t- file must not pre-exist\n\0" -/* 2649 */ "\t\t\t\t- file must pre-exist\n\0" -/* 2676 */ "Options are specified by doubled hyphens and their name or by a single\n" +/* 1890 */ "%s error: '%s' is not a recognizable time duration.\n\0" +/* 1944 */ "%s error: The %s option must appear %d times.\n\0" +/* 1992 */ "%s error: '%s' is not a recognizable number.\n\0" +/* 2039 */ "%s error: %s exceeds %s keyword count\n\0" +/* 2079 */ "Try '%s %s' for more information.\n\0" +/* 2114 */ "one %s%s option allowed\n\0" +/* 2139 */ "standard output\0" +/* 2155 */ "standard error\0" +/* 2170 */ "write\0" +/* 2176 */ "%s error: %s option value %ld is out of range.\n\0" +/* 2225 */ "%s error: %s option requires the %s option\n\0" +/* 2270 */ "%s warning: cannot save options - %s not regular file\n\0" +/* 2326 */ "\t\t\t\t- an alternate for '%s'\n\0" +/* 2355 */ "Version, usage and configuration options:\0" +/* 2397 */ "\t\t\t\t- default option for unnamed options\n\0" +/* 2439 */ "\t\t\t\t- disabled as '--%s'\n\0" +/* 2465 */ " --- %-14s %s\n\0" +/* 2480 */ "This option has been disabled\0" +/* 2510 */ "\t\t\t\t- enabled by default\n\0" +/* 2536 */ "%s error: only \0" +/* 2553 */ " - examining environment variables named %s_*\n\0" +/* 2600 */ "\t\t\t\t- file must not pre-exist\n\0" +/* 2631 */ "\t\t\t\t- file must pre-exist\n\0" +/* 2658 */ "Options are specified by doubled hyphens and their name or by a single\n" "hyphen and the flag character.\n\0" -/* 2779 */ "\n" +/* 2761 */ "\n" "= = = = = = = =\n\n" "This incarnation of genshell will produce\n" "a shell script to parse the options for %s:\n\n\0" -/* 2885 */ " or an integer mask with any of the lower %d bits set\n\0" -/* 2941 */ "\t\t\t\t- is a set membership option\n\0" -/* 2975 */ "\t\t\t\t- must appear between %d and %d times\n\0" -/* 3018 */ "Options are specified by single or double hyphens and their name.\n\0" -/* 3085 */ "\t\t\t\t- may appear multiple times\n\0" -/* 3118 */ "\t\t\t\t- may not be preset\n\0" -/* 3143 */ " Arg Option-Name Description\n\0" -/* 3178 */ " Flg Arg Option-Name Description\n\0" -/* 3216 */ " %3s %s\0" -/* 3224 */ "The '-#' option may omit the hash char\n\0" -/* 3272 */ "All arguments are named options.\n\0" -/* 3306 */ " - reading file %s\0" -/* 3325 */ "\n" +/* 2867 */ " or an integer mask with any of the lower %d bits set\n\0" +/* 2923 */ "\t\t\t\t- is a set membership option\n\0" +/* 2957 */ "\t\t\t\t- must appear between %d and %d times\n\0" +/* 3000 */ "Options are specified by single or double hyphens and their name.\n\0" +/* 3067 */ "\t\t\t\t- may appear multiple times\n\0" +/* 3100 */ "\t\t\t\t- may not be preset\n\0" +/* 3125 */ " Arg Option-Name Description\n\0" +/* 3160 */ " Flg Arg Option-Name Description\n\0" +/* 3198 */ " %3s %s\0" +/* 3206 */ "The '-#' option may omit the hash char\n\0" +/* 3254 */ "All arguments are named options.\n\0" +/* 3288 */ " - reading file %s\0" +/* 3307 */ "\n" "Please send bug reports to: <%s>\n\0" -/* 3361 */ "\t\t\t\t- may NOT appear - preset only\n\0" -/* 3397 */ "\n" +/* 3343 */ "\t\t\t\t- may NOT appear - preset only\n\0" +/* 3379 */ "\n" "The following option preset mechanisms are supported:\n\0" -/* 3453 */ "prohibits these options:\n\0" -/* 3479 */ "prohibits the option '%s'\n\0" -/* 3506 */ "%s%ld to %ld\0" -/* 3519 */ "%sgreater than or equal to %ld\0" -/* 3550 */ "%s%ld exactly\0" -/* 3564 */ "%sit must lie in one of the ranges:\n\0" -/* 3601 */ "%sit must be in the range:\n\0" -/* 3629 */ ", or\n\0" -/* 3635 */ "%sis scalable with a suffix: k/K/m/M/g/G/t/T\n\0" -/* 3681 */ "%sless than or equal to %ld\0" -/* 3709 */ "Operands and options may be intermixed. They will be reordered.\n\0" -/* 3775 */ "requires the option '%s'\n\0" -/* 3801 */ "requires these options:\n\0" -/* 3826 */ " Arg Option-Name Req? Description\n\0" -/* 3866 */ " Flg Arg Option-Name Req? Description\n\0" -/* 3909 */ "or you may use a numeric representation. Preceding these with a '!'\n" +/* 3435 */ "prohibits these options:\n\0" +/* 3461 */ "prohibits the option '%s'\n\0" +/* 3488 */ "%s%ld to %ld\0" +/* 3501 */ "%sgreater than or equal to %ld\0" +/* 3532 */ "%s%ld exactly\0" +/* 3546 */ "%sit must lie in one of the ranges:\n\0" +/* 3583 */ "%sit must be in the range:\n\0" +/* 3611 */ ", or\n\0" +/* 3617 */ "%sis scalable with a suffix: k/K/m/M/g/G/t/T\n\0" +/* 3663 */ "%sless than or equal to %ld\0" +/* 3691 */ "Operands and options may be intermixed. They will be reordered.\n\0" +/* 3757 */ "requires the option '%s'\n\0" +/* 3783 */ "requires these options:\n\0" +/* 3808 */ " Arg Option-Name Req? Description\n\0" +/* 3848 */ " Flg Arg Option-Name Req? Description\n\0" +/* 3891 */ "or you may use a numeric representation. Preceding these with a '!'\n" "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" "will set them all. Multiple entries may be passed as an option\n" "argument list.\n\0" -/* 4128 */ "\t\t\t\t- may appear up to %d times\n\0" -/* 4161 */ "The valid \"%s\" option keywords are:\n\0" -/* 4198 */ "The next option supports vendor supported extra options:\0" -/* 4255 */ "These additional options are:"; +/* 4110 */ "\t\t\t\t- may appear up to %d times\n\0" +/* 4143 */ "The valid \"%s\" option keywords are:\n\0" +/* 4180 */ "The next option supports vendor supported extra options:\0" +/* 4237 */ "These additional options are:"; /* * Now, define (and initialize) the structure that contains @@ -308,7 +306,7 @@ char const option_lib_text[4285] = * Aren't you glad you don't maintain this by hand? */ usage_text_t option_xlateable_txt = { - 108, + 107, eng_zGnuBoolArg, eng_zGnuKeyArg, eng_zGnuNumArg, eng_zGnuStrArg, { option_lib_text + 0, option_lib_text + 31, option_lib_text + 83, @@ -325,27 +323,27 @@ usage_text_t option_xlateable_txt = { option_lib_text + 1490, option_lib_text + 1528, option_lib_text + 1574, option_lib_text + 1619, option_lib_text + 1646, option_lib_text + 1695, option_lib_text + 1744, option_lib_text + 1771, option_lib_text + 1804, - option_lib_text + 1840, option_lib_text + 1890, option_lib_text + 1908, - option_lib_text + 1962, option_lib_text + 2010, option_lib_text + 2057, - option_lib_text + 2097, option_lib_text + 2132, option_lib_text + 2157, - option_lib_text + 2173, option_lib_text + 2188, option_lib_text + 2194, - option_lib_text + 2243, option_lib_text + 2288, option_lib_text + 2344, - option_lib_text + 2373, option_lib_text + 2415, option_lib_text + 2457, - option_lib_text + 2483, option_lib_text + 2498, option_lib_text + 2528, - option_lib_text + 2554, option_lib_text + 2571, option_lib_text + 2618, - option_lib_text + 2649, option_lib_text + 2676, option_lib_text + 2779, - option_lib_text + 2885, option_lib_text + 2941, option_lib_text + 2975, - option_lib_text + 3018, option_lib_text + 3085, option_lib_text + 3118, - option_lib_text + 3143, option_lib_text + 3178, option_lib_text + 3216, - option_lib_text + 3224, option_lib_text + 3272, option_lib_text + 3306, - option_lib_text + 3325, option_lib_text + 3361, option_lib_text + 3397, - option_lib_text + 3453, option_lib_text + 3479, option_lib_text + 3506, - option_lib_text + 3519, option_lib_text + 3550, option_lib_text + 3564, - option_lib_text + 3601, option_lib_text + 3629, option_lib_text + 3635, - option_lib_text + 3681, option_lib_text + 3709, option_lib_text + 3775, - option_lib_text + 3801, option_lib_text + 3826, option_lib_text + 3866, - option_lib_text + 3909, option_lib_text + 4128, option_lib_text + 4161, - option_lib_text + 4198, option_lib_text + 4255 + option_lib_text + 1840, option_lib_text + 1890, option_lib_text + 1944, + option_lib_text + 1992, option_lib_text + 2039, option_lib_text + 2079, + option_lib_text + 2114, option_lib_text + 2139, option_lib_text + 2155, + option_lib_text + 2170, option_lib_text + 2176, option_lib_text + 2225, + option_lib_text + 2270, option_lib_text + 2326, option_lib_text + 2355, + option_lib_text + 2397, option_lib_text + 2439, option_lib_text + 2465, + option_lib_text + 2480, option_lib_text + 2510, option_lib_text + 2536, + option_lib_text + 2553, option_lib_text + 2600, option_lib_text + 2631, + option_lib_text + 2658, option_lib_text + 2761, option_lib_text + 2867, + option_lib_text + 2923, option_lib_text + 2957, option_lib_text + 3000, + option_lib_text + 3067, option_lib_text + 3100, option_lib_text + 3125, + option_lib_text + 3160, option_lib_text + 3198, option_lib_text + 3206, + option_lib_text + 3254, option_lib_text + 3288, option_lib_text + 3307, + option_lib_text + 3343, option_lib_text + 3379, option_lib_text + 3435, + option_lib_text + 3461, option_lib_text + 3488, option_lib_text + 3501, + option_lib_text + 3532, option_lib_text + 3546, option_lib_text + 3583, + option_lib_text + 3611, option_lib_text + 3617, option_lib_text + 3663, + option_lib_text + 3691, option_lib_text + 3757, option_lib_text + 3783, + option_lib_text + 3808, option_lib_text + 3848, option_lib_text + 3891, + option_lib_text + 4110, option_lib_text + 4143, option_lib_text + 4180, + option_lib_text + 4237 } }; #endif /* AUTOOPTS_INTERNAL */ @@ -364,234 +362,230 @@ static void dummy_func(void) { /* LIBOPTS-MESSAGES: */ #line 67 "../autoopts.c" puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" +#line 89 "../autoopts.c" puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" +#line 48 "../init.c" puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" +#line 81 "../init.c" puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" +#line 79 "../init.c" puts(_("Automated Options Processing Error!\n" "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" +#line 78 "../autoopts.c" puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" +#line 83 "../init.c" puts(_("\tThis is less than the minimum library version: ")); #line 121 "../version.c" puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" + "\tCopyright (C) 1999-2017 by Bruce Korb - all rights reserved\n")); +#line 49 "../makeshell.c" puts(_("(AutoOpts bug): %s.\n")); #line 90 "../reset.c" puts(_("optionResetOpt() called, but reset-option not configured")); -#line 292 "../usage.c" +#line 241 "../usage.c" puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" +#line 330 "../autoopts.c" puts(_("optionProcess() was called with invalid data")); -#line 748 "../usage.c" +#line 697 "../usage.c" puts(_("invalid argument type specified")); -#line 598 "../find.c" +#line 568 "../find.c" puts(_("defaulted to option with optional arg")); #line 76 "../alias.c" puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" +#line 210 "../enum.c" puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" +#line 78 "../find.c" puts(_(" The following options match:\n")); -#line 293 "../find.c" +#line 263 "../find.c" puts(_("%s: ambiguous option name: %s (matches %d options)\n")); #line 161 "../check.c" puts(_("%s: Command line arguments required\n")); #line 43 "../alias.c" puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" +#line 56 "../makeshell.c" puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" +#line 268 "../makeshell.c" puts(_("interprocess pipe")); -#line 168 "../version.c" +#line 171 "../version.c" puts(_("error: version option argument '%c' invalid. Use:\n" "\t'v' - version only\n" "\t'c' - version and copyright\n" "\t'n' - version and full copyright notice\n")); #line 58 "../check.c" puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" +#line 187 "../find.c" puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" +#line 400 "../find.c" puts(_("%s: The '%s' option has been disabled.")); #line 38 "../alias.c" puts(_("-equivalence")); -#line 469 "../find.c" +#line 439 "../find.c" puts(_("%s: illegal option -- %c\n")); #line 110 "../reset.c" puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" +#line 241 "../find.c" puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" +#line 740 "../find.c" puts(_("%s: illegal option -- %s\n")); #line 118 "../reset.c" puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" +#line 305 "../find.c" puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" +#line 135 "../enum.c" puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" +#line 145 "../enum.c" puts(_(" or an integer from %d through %d\n")); -#line 747 "../usage.c" +#line 696 "../usage.c" puts(_("%s error: invalid option descriptor for %s\n")); -#line 1081 "../usage.c" +#line 1030 "../usage.c" puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" +#line 355 "../find.c" puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" +#line 497 "../find.c" puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" +#line 150 "../autoopts.c" puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" "\t'%s' and '%s'.")); #line 94 "../check.c" puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" +#line 602 "../find.c" puts(_("%s: The '%s' option cannot have an argument.\n")); #line 151 "../check.c" puts(_("%s: Command line arguments are not allowed.\n")); -#line 535 "../save.c" +#line 568 "../save.c" puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" +#line 210 "../enum.c" puts(_("%s error: '%s' does not match any %s keywords.\n")); #line 93 "../reset.c" puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" +#line 122 "../save.c" puts(_("error %d (%s) stat-ing %s\n")); -#line 238 "../save.c" +#line 175 "../save.c" puts(_("error %d (%s) stat-ing %s\n")); #line 143 "../restore.c" puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" +#line 225 "../autoopts.c" puts(_("'%s' is not a command line option.\n")); #line 113 "../time.c" puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); #line 50 "../time.c" puts(_("%s error: '%s' is not a recognizable time duration.\n")); #line 92 "../check.c" puts(_("%s error: The %s option must appear %d times.\n")); #line 165 "../numeric.c" puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" +#line 176 "../enum.c" puts(_("%s error: %s exceeds %s keyword count\n")); -#line 330 "../usage.c" +#line 279 "../usage.c" puts(_("Try '%s %s' for more information.\n")); #line 45 "../alias.c" puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" +#line 170 "../makeshell.c" puts(_("standard output")); -#line 943 "../makeshell.c" +#line 905 "../makeshell.c" puts(_("standard output")); -#line 274 "../usage.c" +#line 223 "../usage.c" puts(_("standard output")); -#line 415 "../usage.c" +#line 364 "../usage.c" puts(_("standard output")); -#line 625 "../usage.c" +#line 574 "../usage.c" puts(_("standard output")); -#line 175 "../version.c" +#line 178 "../version.c" puts(_("standard output")); -#line 274 "../usage.c" +#line 223 "../usage.c" puts(_("standard error")); -#line 415 "../usage.c" +#line 364 "../usage.c" puts(_("standard error")); -#line 625 "../usage.c" +#line 574 "../usage.c" puts(_("standard error")); -#line 175 "../version.c" +#line 178 "../version.c" puts(_("standard error")); -#line 208 "../makeshell.c" +#line 170 "../makeshell.c" puts(_("write")); -#line 943 "../makeshell.c" +#line 905 "../makeshell.c" puts(_("write")); -#line 273 "../usage.c" +#line 222 "../usage.c" puts(_("write")); -#line 414 "../usage.c" +#line 363 "../usage.c" puts(_("write")); -#line 624 "../usage.c" +#line 573 "../usage.c" puts(_("write")); -#line 174 "../version.c" +#line 177 "../version.c" puts(_("write")); #line 60 "../numeric.c" puts(_("%s error: %s option value %ld is out of range.\n")); #line 44 "../check.c" puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" +#line 121 "../save.c" puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" +#line 174 "../save.c" puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 237 "../save.c" +#line 193 "../save.c" puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 256 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 534 "../save.c" +#line 567 "../save.c" puts(_("%s warning: cannot save options - %s not regular file\n")); /* END-LIBOPTS-MESSAGES */ /* USAGE-TEXT: */ -#line 873 "../usage.c" +#line 822 "../usage.c" puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1148 "../usage.c" +#line 1097 "../usage.c" puts(_("Version, usage and configuration options:")); -#line 924 "../usage.c" +#line 873 "../usage.c" puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 837 "../usage.c" +#line 786 "../usage.c" puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1117 "../usage.c" +#line 1066 "../usage.c" puts(_(" --- %-14s %s\n")); -#line 1115 "../usage.c" +#line 1064 "../usage.c" puts(_("This option has been disabled")); -#line 864 "../usage.c" +#line 813 "../usage.c" puts(_("\t\t\t\t- enabled by default\n")); #line 40 "../alias.c" puts(_("%s error: only ")); -#line 1194 "../usage.c" +#line 1143 "../usage.c" puts(_(" - examining environment variables named %s_*\n")); #line 168 "../file.c" puts(_("\t\t\t\t- file must not pre-exist\n")); #line 172 "../file.c" puts(_("\t\t\t\t- file must pre-exist\n")); -#line 380 "../usage.c" +#line 329 "../usage.c" puts(_("Options are specified by doubled hyphens and their name or by a single\n" "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" +#line 882 "../makeshell.c" puts(_("\n" "= = = = = = = =\n\n" "This incarnation of genshell will produce\n" "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" +#line 142 "../enum.c" puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 897 "../usage.c" +#line 846 "../usage.c" puts(_("\t\t\t\t- is a set membership option\n")); -#line 918 "../usage.c" +#line 867 "../usage.c" puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 382 "../usage.c" +#line 331 "../usage.c" puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 904 "../usage.c" +#line 853 "../usage.c" puts(_("\t\t\t\t- may appear multiple times\n")); -#line 891 "../usage.c" +#line 840 "../usage.c" puts(_("\t\t\t\t- may not be preset\n")); -#line 1309 "../usage.c" +#line 1258 "../usage.c" puts(_(" Arg Option-Name Description\n")); -#line 1245 "../usage.c" +#line 1194 "../usage.c" puts(_(" Flg Arg Option-Name Description\n")); -#line 1303 "../usage.c" +#line 1252 "../usage.c" puts(_(" Flg Arg Option-Name Description\n")); -#line 1304 "../usage.c" +#line 1253 "../usage.c" puts(_(" %3s %s")); -#line 1310 "../usage.c" +#line 1259 "../usage.c" puts(_(" %3s %s")); -#line 387 "../usage.c" +#line 336 "../usage.c" puts(_("The '-#' option may omit the hash char\n")); -#line 383 "../usage.c" +#line 332 "../usage.c" puts(_("All arguments are named options.\n")); -#line 971 "../usage.c" +#line 920 "../usage.c" puts(_(" - reading file %s")); -#line 409 "../usage.c" +#line 358 "../usage.c" puts(_("\n" "Please send bug reports to: <%s>\n")); #line 100 "../version.c" @@ -600,17 +594,17 @@ static void dummy_func(void) { #line 129 "../version.c" puts(_("\n" "Please send bug reports to: <%s>\n")); -#line 903 "../usage.c" +#line 852 "../usage.c" puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 944 "../usage.c" +#line 893 "../usage.c" puts(_("\n" "The following option preset mechanisms are supported:\n")); -#line 1192 "../usage.c" +#line 1141 "../usage.c" puts(_("\n" "The following option preset mechanisms are supported:\n")); -#line 682 "../usage.c" +#line 631 "../usage.c" puts(_("prohibits these options:\n")); -#line 677 "../usage.c" +#line 626 "../usage.c" puts(_("prohibits the option '%s'\n")); #line 81 "../numeric.c" puts(_("%s%ld to %ld")); @@ -628,28 +622,28 @@ static void dummy_func(void) { puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); #line 77 "../numeric.c" puts(_("%sless than or equal to %ld")); -#line 390 "../usage.c" +#line 339 "../usage.c" puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 652 "../usage.c" +#line 601 "../usage.c" puts(_("requires the option '%s'\n")); -#line 655 "../usage.c" +#line 604 "../usage.c" puts(_("requires these options:\n")); -#line 1321 "../usage.c" +#line 1270 "../usage.c" puts(_(" Arg Option-Name Req? Description\n")); -#line 1315 "../usage.c" +#line 1264 "../usage.c" puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" +#line 143 "../enum.c" puts(_("or you may use a numeric representation. Preceding these with a '!'\n" "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" "will set them all. Multiple entries may be passed as an option\n" "argument list.\n")); -#line 910 "../usage.c" +#line 859 "../usage.c" puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" +#line 52 "../enum.c" puts(_("The valid \"%s\" option keywords are:\n")); -#line 1152 "../usage.c" +#line 1101 "../usage.c" puts(_("The next option supports vendor supported extra options:")); -#line 773 "../usage.c" +#line 722 "../usage.c" puts(_("These additional options are:")); /* END-USAGE-TEXT */ } diff --git a/src/libopts/boolean.c b/src/libopts/boolean.c index 2bea8e7f2a..80e0b0e97c 100644 --- a/src/libopts/boolean.c +++ b/src/libopts/boolean.c @@ -13,7 +13,7 @@ * * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -64,8 +64,8 @@ optionBooleanVal(tOptions * opts, tOptDesc * od) long val = strtol(od->optArg.argString, &pz, 0); if ((val != 0) || (*pz != NUL)) break; - /* FALLTHROUGH */ } + /* FALLTHROUGH */ case 'N': case 'n': case 'F': diff --git a/src/libopts/check.c b/src/libopts/check.c index eff8ec0133..7e75e7eca6 100644 --- a/src/libopts/check.c +++ b/src/libopts/check.c @@ -9,7 +9,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -100,7 +100,7 @@ occurs_enough(tOptions * pOpts, tOptDesc * pOD) * * Make sure that the argument list passes our consistency tests. */ -LOCAL bool +static bool is_consistent(tOptions * pOpts) { tOptDesc * pOD = pOpts->pOptDesc; diff --git a/src/libopts/compat/compat.h b/src/libopts/compat/compat.h index 561d55db3c..70a5652a23 100644 --- a/src/libopts/compat/compat.h +++ b/src/libopts/compat/compat.h @@ -1,9 +1,9 @@ -/* -*- Mode: C -*- +/* -*- Mode: C -*- * * compat.h is free software. * This file is part of AutoGen and AutoOpts. * - * AutoGen Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoGen Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -182,9 +182,9 @@ # include #endif -#ifdef HAVE_STDBOOL_H +#if defined(HAVE_STDBOOL_H) # include -#else +#elif ! defined(bool) typedef enum { false = 0, true = 1 } _Bool; # define bool _Bool diff --git a/src/libopts/compat/pathfind.c b/src/libopts/compat/pathfind.c index 5c477caf07..e188b72813 100644 --- a/src/libopts/compat/pathfind.c +++ b/src/libopts/compat/pathfind.c @@ -211,7 +211,7 @@ canonicalize_pathname( char *path ) (result[i + 2] == '/' || !result[i + 2])) { while (--start > -1 && result[start] != '/') ; - strcpy( result + start + 1, result + i + 2 ); + memmove( result + start + 1, result + i + 2, strlen(result + i + 2) + 1 ); i = (start < 0) ? 0 : start; continue; } diff --git a/src/libopts/compat/windows-config.h b/src/libopts/compat/windows-config.h index fb4e048e64..7ce1636416 100644 --- a/src/libopts/compat/windows-config.h +++ b/src/libopts/compat/windows-config.h @@ -9,7 +9,7 @@ * * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control diff --git a/src/libopts/configfile.c b/src/libopts/configfile.c index 6e7cd216b7..783a9d8acd 100644 --- a/src/libopts/configfile.c +++ b/src/libopts/configfile.c @@ -9,7 +9,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -28,50 +28,6 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -/* = = = START-STATIC-FORWARD = = = */ -static void -file_preset(tOptions * opts, char const * fname, int dir); - -static char * -handle_comment(char * txt); - -static char * -handle_cfg(tOptions * opts, tOptState * ost, char * txt, int dir); - -static char * -handle_directive(tOptions * opts, char * txt); - -static char * -aoflags_directive(tOptions * opts, char * txt); - -static char * -program_directive(tOptions * opts, char * txt); - -static char * -handle_section(tOptions * opts, char * txt); - -static int -parse_xml_encoding(char ** ppz); - -static char * -trim_xml_text(char * intxt, char const * pznm, tOptionLoadMode mode); - -static void -cook_xml_text(char * pzData); - -static char * -handle_struct(tOptions * opts, tOptState * ost, char * txt, int dir); - -static char const * -parse_keyword(tOptions * opts, char const * txt, tOptionValue * typ); - -static char const * -parse_set_mem(tOptions * opts, char const * txt, tOptionValue * typ); - -static char const * -parse_value(char const * txt, tOptionValue * typ); -/* = = = END-STATIC-FORWARD = = = */ - /** * Skip over some unknown attribute * @param[in] txt start of skpped text @@ -466,6 +422,7 @@ file_preset(tOptions * opts, char const * fname, int dir) ftext = strchr(ftext + 2, '>'); if (ftext++ != NULL) break; + /* FALLTHROUGH */ default: ftext = NULL; @@ -626,9 +583,9 @@ handle_directive(tOptions * opts, char * txt) for (ix = 0; ix < dir_ct; ix++) { size_t len = strlen(dir_names[ix]); - if ( (strncmp(txt + 2, dir_names[ix], len) == 0) - && (! IS_VALUE_NAME_CHAR(txt[len+2])) ) - return dir_disp[ix](opts, txt + len + 2); + if ( (strncmp(txt, dir_names[ix], len) == 0) + && (! IS_VALUE_NAME_CHAR(txt[len])) ) + return dir_disp[ix](opts, txt + len); } /* @@ -681,38 +638,28 @@ aoflags_directive(tOptions * opts, char * txt) static char * program_directive(tOptions * opts, char * txt) { - static char const ttlfmt[] = "pzProgName); - memcpy(ttl, ttlfmt, sizeof(ttlfmt) - 1); - memcpy(ttl + sizeof(ttlfmt) - 1, zCfgProg, ttl_len - (sizeof(ttlfmt) - 1)); - - do { - txt = SPN_WHITESPACE_CHARS(txt+1); + for (;; txt += zCfgProg_LEN) { + txt = SPN_WHITESPACE_CHARS(txt); if ( (strneqvcmp(txt, opts->pzProgName, (int)name_len) == 0) - && (IS_END_XML_TOKEN_CHAR(txt[name_len])) ) { - txt += name_len; - break; - } + && (IS_END_XML_TOKEN_CHAR(txt[name_len])) ) - txt = strstr(txt, ttl); - } while (txt != NULL); + return txt + name_len; - AGFREE(ttl); - if (txt != NULL) - for (;;) { - if (*txt == NUL) { - txt = NULL; - break; - } - if (*(txt++) == '>') - break; - } + txt = strstr(txt, zCfgProg); + if (txt == NULL) + return txt; + } - return txt; + for (;;) { + if (*txt == NUL) + return NULL; + + if (*(txt++) == '>') + return txt; + } } /** @@ -1006,7 +953,7 @@ handle_struct(tOptions * opts, tOptState * ost, char * txt, int dir) * scanning the "homerc" list, or from a specific file request. * (see "optionFileLoad()", the implementation for --load-opts) */ -LOCAL void +static void intern_file_load(tOptions * opts) { uint32_t svfl; @@ -1207,7 +1154,7 @@ optionLoadOpt(tOptions * opts, tOptDesc * odesc) * * @returns NULL on failure, otherwise the scan point */ -LOCAL char const * +static char const * parse_attrs(tOptions * opts, char const * txt, tOptionLoadMode * pMode, tOptionValue * pType) { diff --git a/src/libopts/cook.c b/src/libopts/cook.c index 65260a2722..5240540f3a 100644 --- a/src/libopts/cook.c +++ b/src/libopts/cook.c @@ -10,7 +10,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -29,11 +29,6 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -/* = = = START-STATIC-FORWARD = = = */ -static bool -contiguous_quote(char ** pps, char * pq, int * lnct_p); -/* = = = END-STATIC-FORWARD = = = */ - /*=export_func ao_string_cook_escape_char * private: * @@ -135,6 +130,18 @@ ao_string_cook_escape_char(char const * pzIn, char * pRes, uint_t nl) return res; } +/** + * count newlines between start and end + */ +static char * +nl_count(char * start, char * end, int * lnct_p) +{ + while (start < end) { + if (*(start++) == NL) + (*lnct_p)++; + } + return end; +} /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @@ -168,38 +175,22 @@ contiguous_quote(char ** pps, char * pq, int * lnct_p) */ switch (ps[1]) { default: - *pps = NULL; - return false; + goto fail_return; case '/': /* * Skip to end of line */ ps = strchr(ps, NL); - if (ps == NULL) { - *pps = NULL; - return false; - } + if (ps == NULL) + goto fail_return; break; case '*': - { - char * p = strstr( ps+2, "*/" ); - /* - * Skip to terminating star slash - */ - if (p == NULL) { - *pps = NULL; - return false; - } - - while (ps < p) { - if (*(ps++) == NL) - (*lnct_p)++; - } - - ps = p + 2; - } + ps = nl_count(ps + 2, strstr(ps + 2, "*/"), lnct_p); + if (ps == NULL) + goto fail_return; + ps += 2; } continue; @@ -212,6 +203,10 @@ contiguous_quote(char ** pps, char * pq, int * lnct_p) return false; } } + + fail_return: + *pps = NULL; + return false; } /*=export_func ao_string_cook diff --git a/src/libopts/enum.c b/src/libopts/enum.c index a08c9b1a50..7f92e0b022 100644 --- a/src/libopts/enum.c +++ b/src/libopts/enum.c @@ -14,7 +14,7 @@ * * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -33,31 +33,6 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -/* = = = START-STATIC-FORWARD = = = */ -static void -enum_err(tOptions * pOpts, tOptDesc * pOD, - char const * const * paz_names, int name_ct); - -static uintptr_t -find_name(char const * name, tOptions * pOpts, tOptDesc * pOD, - char const * const * paz_names, unsigned int name_ct); - -static void -set_memb_shell(tOptions * pOpts, tOptDesc * pOD, char const * const * paz_names, - unsigned int name_ct); - -static void -set_memb_names(tOptions * opts, tOptDesc * od, char const * const * nm_list, - unsigned int nm_ct); - -static uintptr_t -check_membership_start(tOptDesc * od, char const ** argp, bool * invert); - -static uintptr_t -find_member_bit(tOptions * opts, tOptDesc * od, char const * pz, int len, - char const * const * nm_list, unsigned int nm_ct); -/* = = = END-STATIC-FORWARD = = = */ - static void enum_err(tOptions * pOpts, tOptDesc * pOD, char const * const * paz_names, int name_ct) diff --git a/src/libopts/env.c b/src/libopts/env.c index 36ae2e535a..16f0e9513d 100644 --- a/src/libopts/env.c +++ b/src/libopts/env.c @@ -13,7 +13,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -32,19 +32,13 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -/* = = = START-STATIC-FORWARD = = = */ -static void -do_env_opt(tOptState * os, char * env_name, - tOptions * pOpts, teEnvPresetType type); -/* = = = END-STATIC-FORWARD = = = */ - /* * doPrognameEnv - check for preset values from the ${PROGNAME} * environment variable. This is accomplished by parsing the text into * tokens, temporarily replacing the arg vector and calling * immediate_opts and/or regular_opts. */ -LOCAL void +static void doPrognameEnv(tOptions * pOpts, teEnvPresetType type) { char const * env_opts = getenv(pOpts->pzPROGNAME); @@ -187,7 +181,7 @@ do_env_opt(tOptState * os, char * env_name, * env_presets - check for preset values from the envrionment * This routine should process in all, immediate or normal modes.... */ -LOCAL void +static void env_presets(tOptions * pOpts, teEnvPresetType type) { int ct; diff --git a/src/libopts/file.c b/src/libopts/file.c index 7d92875d84..14efe8fe33 100644 --- a/src/libopts/file.c +++ b/src/libopts/file.c @@ -10,7 +10,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control diff --git a/src/libopts/find.c b/src/libopts/find.c index 90591cc924..03ae103731 100644 --- a/src/libopts/find.c +++ b/src/libopts/find.c @@ -12,7 +12,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -31,36 +31,6 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -/* = = = START-STATIC-FORWARD = = = */ -static int -parse_opt(char const ** nm_pp, char ** arg_pp, char * buf, size_t bufsz); - -static void -opt_ambiguities(tOptions * opts, char const * name, int nm_len); - -static int -opt_match_ct(tOptions * opts, char const * name, int nm_len, - int * ixp, bool * disable); - -static tSuccess -opt_set(tOptions * opts, char * arg, int idx, bool disable, tOptState * st); - -static tSuccess -opt_unknown(tOptions * opts, char const * name, char * arg, tOptState * st); - -static tSuccess -opt_ambiguous(tOptions * opts, char const * name, int match_ct); - -static tSuccess -get_opt_arg_must(tOptions * opts, tOptState * o_st); - -static tSuccess -get_opt_arg_may(tOptions * pOpts, tOptState * o_st); - -static tSuccess -get_opt_arg_none(tOptions * pOpts, tOptState * o_st); -/* = = = END-STATIC-FORWARD = = = */ - /** * find the name and name length we are looking for */ @@ -367,7 +337,7 @@ optionVendorOption(tOptions * pOpts, tOptDesc * pOD) * * @return success status */ -LOCAL tSuccess +static tSuccess opt_find_long(tOptions * opts, char const * opt_name, tOptState * state) { char name_buf[128]; @@ -408,7 +378,7 @@ opt_find_long(tOptions * opts, char const * opt_name, tOptState * state) * @param optValue option flag character * @param pOptState state about current option */ -LOCAL tSuccess +static tSuccess opt_find_short(tOptions * pOpts, uint_t optValue, tOptState * pOptState) { tOptDesc * pRes = pOpts->pOptDesc; @@ -638,6 +608,7 @@ get_opt_arg_none(tOptions * pOpts, tOptState * o_st) */ else pOpts->pzCurOpt = NULL; + return SUCCESS; } @@ -648,7 +619,7 @@ get_opt_arg_none(tOptions * pOpts, tOptState * o_st) * @param[in,out] o_st the option processing state * @returns SUCCESS or FAILURE */ -LOCAL tSuccess +static tSuccess get_opt_arg(tOptions * opts, tOptState * o_st) { o_st->flags |= (o_st->pOD->fOptState & OPTST_PERSISTENT_MASK); @@ -658,10 +629,24 @@ get_opt_arg(tOptions * opts, tOptState * o_st) * are handled with the "none" procedure. Otherwise, check the * optional flag and call either the "may" or "must" function. */ - if ( ((o_st->flags & OPTST_DISABLED) != 0) - || (OPTST_GET_ARGTYPE(o_st->flags) == OPARG_TYPE_NONE)) + if ((o_st->flags & OPTST_DISABLED) != 0) return get_opt_arg_none(opts, o_st); - + + switch (OPTST_GET_ARGTYPE(o_st->flags)) { + case OPARG_TYPE_STATIC: + { + /* + * Propagate the static arg + */ + tSuccess res = get_opt_arg_none(opts, o_st); + o_st->pzOptArg = o_st->pOD->optArg.argString; + return res; + } + + case OPARG_TYPE_NONE: + return get_opt_arg_none(opts, o_st); + } + if (o_st->flags & OPTST_ARG_OPTIONAL) return get_opt_arg_may( opts, o_st); @@ -675,7 +660,7 @@ get_opt_arg(tOptions * opts, tOptState * o_st) * @param[in,out] o_st the option processing state * @returns SUCCESS or FAILURE */ -LOCAL tSuccess +static tSuccess find_opt(tOptions * opts, tOptState * o_st) { /* diff --git a/src/libopts/genshell.c b/src/libopts/genshell.c index dfbb373e25..05182a6014 100644 --- a/src/libopts/genshell.c +++ b/src/libopts/genshell.c @@ -6,7 +6,7 @@ * From the definitions genshell.def * and the template file options * - * Generated from AutoOpts 41:1:16 templates. + * Generated from AutoOpts 42:1:17 templates. * * AutoOpts is a copyrighted work. This source file is not encumbered * by AutoOpts licensing, but is provided under the licensing terms chosen @@ -19,7 +19,7 @@ * The genshellopt program is copyrighted and licensed * under the following terms: * - * Copyright (C) 1999-2014 Bruce Korb, all rights reserved. + * Copyright (C) 1999-2018 Bruce Korb, all rights reserved. * This is free software. It is licensed for use, modification and * redistribution under the terms of the GNU Lesser General Public License, * version 2 or later @@ -43,10 +43,15 @@ #define OPTION_CODE_COMPILE 1 #include "genshell.h" #include +#include +#include +#include #include #include #include +#include +#include #ifdef __cplusplus extern "C" { @@ -66,7 +71,7 @@ extern tUsageProc genshelloptUsage; */ static char const genshellopt_opt_strs[1769] = /* 0 */ "genshellopt 1\n" - "Copyright (C) 1999-2014 Bruce Korb, all rights reserved.\n" + "Copyright (C) 1999-2018 Bruce Korb, all rights reserved.\n" "This is free software. It is licensed for use, modification and\n" "redistribution under the terms of the GNU Lesser General Public License,\n" "version 2 or later \n\0" @@ -258,7 +263,7 @@ static tOptDesc optDesc[GENSHELL_OPTION_CT] = { #define zDetail (genshellopt_opt_strs+1534) /** The full version string for genshellopt. */ #define zFullVersion (genshellopt_opt_strs+1755) -/* extracted from optcode.tlib near line 364 */ +/* extracted from optcode.tlib near line 342 */ #if defined(ENABLE_NLS) # define OPTPROC_BASE OPTPROC_TRANSLATE @@ -481,19 +486,19 @@ static void bogus_function(void) { extract the correct strings. These strings are actually referenced by a field name in the genshelloptOptions structure noted in the comments below. The literal text is defined in genshellopt_opt_strs. - + NOTE: the strings below are segmented with respect to the source string genshellopt_opt_strs. The strings above are handed off for translation at run time a paragraph at a time. Consequently, they are presented here for translation a paragraph at a time. - + ALSO: often the description for an option will reference another option by name. These are set off with apostrophe quotes (I hope). Do not translate option names. */ /* referenced via genshelloptOptions.pzCopyright */ puts(_("genshellopt 1\n\ -Copyright (C) 1999-2014 Bruce Korb, all rights reserved.\n\ +Copyright (C) 1999-2018 Bruce Korb, all rights reserved.\n\ This is free software. It is licensed for use, modification and\n\ redistribution under the terms of the GNU Lesser General Public License,\n\ version 2 or later \n")); @@ -551,234 +556,230 @@ by the newly generated text. The first '#!' line will be regenerated.\n")); /* LIBOPTS-MESSAGES: */ #line 67 "../autoopts.c" puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" +#line 89 "../autoopts.c" puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" +#line 48 "../init.c" puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" +#line 81 "../init.c" puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" +#line 79 "../init.c" puts(_("Automated Options Processing Error!\n" "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" +#line 78 "../autoopts.c" puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" +#line 83 "../init.c" puts(_("\tThis is less than the minimum library version: ")); #line 121 "../version.c" puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" + "\tCopyright (C) 1999-2017 by Bruce Korb - all rights reserved\n")); +#line 49 "../makeshell.c" puts(_("(AutoOpts bug): %s.\n")); #line 90 "../reset.c" puts(_("optionResetOpt() called, but reset-option not configured")); -#line 292 "../usage.c" +#line 241 "../usage.c" puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" +#line 330 "../autoopts.c" puts(_("optionProcess() was called with invalid data")); -#line 748 "../usage.c" +#line 697 "../usage.c" puts(_("invalid argument type specified")); -#line 598 "../find.c" +#line 568 "../find.c" puts(_("defaulted to option with optional arg")); #line 76 "../alias.c" puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" +#line 210 "../enum.c" puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" +#line 78 "../find.c" puts(_(" The following options match:\n")); -#line 293 "../find.c" +#line 263 "../find.c" puts(_("%s: ambiguous option name: %s (matches %d options)\n")); #line 161 "../check.c" puts(_("%s: Command line arguments required\n")); #line 43 "../alias.c" puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" +#line 56 "../makeshell.c" puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" +#line 268 "../makeshell.c" puts(_("interprocess pipe")); -#line 168 "../version.c" +#line 171 "../version.c" puts(_("error: version option argument '%c' invalid. Use:\n" "\t'v' - version only\n" "\t'c' - version and copyright\n" "\t'n' - version and full copyright notice\n")); #line 58 "../check.c" puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" +#line 187 "../find.c" puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" +#line 400 "../find.c" puts(_("%s: The '%s' option has been disabled.")); #line 38 "../alias.c" puts(_("-equivalence")); -#line 469 "../find.c" +#line 439 "../find.c" puts(_("%s: illegal option -- %c\n")); #line 110 "../reset.c" puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" +#line 241 "../find.c" puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" +#line 740 "../find.c" puts(_("%s: illegal option -- %s\n")); #line 118 "../reset.c" puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" +#line 305 "../find.c" puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" +#line 135 "../enum.c" puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" +#line 145 "../enum.c" puts(_(" or an integer from %d through %d\n")); -#line 747 "../usage.c" +#line 696 "../usage.c" puts(_("%s error: invalid option descriptor for %s\n")); -#line 1081 "../usage.c" +#line 1030 "../usage.c" puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" +#line 355 "../find.c" puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" +#line 497 "../find.c" puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" +#line 150 "../autoopts.c" puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" "\t'%s' and '%s'.")); #line 94 "../check.c" puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" +#line 602 "../find.c" puts(_("%s: The '%s' option cannot have an argument.\n")); #line 151 "../check.c" puts(_("%s: Command line arguments are not allowed.\n")); -#line 535 "../save.c" +#line 568 "../save.c" puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" +#line 210 "../enum.c" puts(_("%s error: '%s' does not match any %s keywords.\n")); #line 93 "../reset.c" puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" +#line 122 "../save.c" puts(_("error %d (%s) stat-ing %s\n")); -#line 238 "../save.c" +#line 175 "../save.c" puts(_("error %d (%s) stat-ing %s\n")); #line 143 "../restore.c" puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" +#line 225 "../autoopts.c" puts(_("'%s' is not a command line option.\n")); #line 113 "../time.c" puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); #line 50 "../time.c" puts(_("%s error: '%s' is not a recognizable time duration.\n")); #line 92 "../check.c" puts(_("%s error: The %s option must appear %d times.\n")); #line 165 "../numeric.c" puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" +#line 176 "../enum.c" puts(_("%s error: %s exceeds %s keyword count\n")); -#line 330 "../usage.c" +#line 279 "../usage.c" puts(_("Try '%s %s' for more information.\n")); #line 45 "../alias.c" puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" +#line 170 "../makeshell.c" puts(_("standard output")); -#line 943 "../makeshell.c" +#line 905 "../makeshell.c" puts(_("standard output")); -#line 274 "../usage.c" +#line 223 "../usage.c" puts(_("standard output")); -#line 415 "../usage.c" +#line 364 "../usage.c" puts(_("standard output")); -#line 625 "../usage.c" +#line 574 "../usage.c" puts(_("standard output")); -#line 175 "../version.c" +#line 178 "../version.c" puts(_("standard output")); -#line 274 "../usage.c" +#line 223 "../usage.c" puts(_("standard error")); -#line 415 "../usage.c" +#line 364 "../usage.c" puts(_("standard error")); -#line 625 "../usage.c" +#line 574 "../usage.c" puts(_("standard error")); -#line 175 "../version.c" +#line 178 "../version.c" puts(_("standard error")); -#line 208 "../makeshell.c" +#line 170 "../makeshell.c" puts(_("write")); -#line 943 "../makeshell.c" +#line 905 "../makeshell.c" puts(_("write")); -#line 273 "../usage.c" +#line 222 "../usage.c" puts(_("write")); -#line 414 "../usage.c" +#line 363 "../usage.c" puts(_("write")); -#line 624 "../usage.c" +#line 573 "../usage.c" puts(_("write")); -#line 174 "../version.c" +#line 177 "../version.c" puts(_("write")); #line 60 "../numeric.c" puts(_("%s error: %s option value %ld is out of range.\n")); #line 44 "../check.c" puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" +#line 121 "../save.c" puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 237 "../save.c" +#line 174 "../save.c" puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 256 "../save.c" +#line 193 "../save.c" puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 534 "../save.c" +#line 567 "../save.c" puts(_("%s warning: cannot save options - %s not regular file\n")); /* END-LIBOPTS-MESSAGES */ /* USAGE-TEXT: */ -#line 873 "../usage.c" +#line 822 "../usage.c" puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1148 "../usage.c" +#line 1097 "../usage.c" puts(_("Version, usage and configuration options:")); -#line 924 "../usage.c" +#line 873 "../usage.c" puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 837 "../usage.c" +#line 786 "../usage.c" puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1117 "../usage.c" +#line 1066 "../usage.c" puts(_(" --- %-14s %s\n")); -#line 1115 "../usage.c" +#line 1064 "../usage.c" puts(_("This option has been disabled")); -#line 864 "../usage.c" +#line 813 "../usage.c" puts(_("\t\t\t\t- enabled by default\n")); #line 40 "../alias.c" puts(_("%s error: only ")); -#line 1194 "../usage.c" +#line 1143 "../usage.c" puts(_(" - examining environment variables named %s_*\n")); #line 168 "../file.c" puts(_("\t\t\t\t- file must not pre-exist\n")); #line 172 "../file.c" puts(_("\t\t\t\t- file must pre-exist\n")); -#line 380 "../usage.c" +#line 329 "../usage.c" puts(_("Options are specified by doubled hyphens and their name or by a single\n" "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" +#line 882 "../makeshell.c" puts(_("\n" "= = = = = = = =\n\n" "This incarnation of genshell will produce\n" "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" +#line 142 "../enum.c" puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 897 "../usage.c" +#line 846 "../usage.c" puts(_("\t\t\t\t- is a set membership option\n")); -#line 918 "../usage.c" +#line 867 "../usage.c" puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 382 "../usage.c" +#line 331 "../usage.c" puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 904 "../usage.c" +#line 853 "../usage.c" puts(_("\t\t\t\t- may appear multiple times\n")); -#line 891 "../usage.c" +#line 840 "../usage.c" puts(_("\t\t\t\t- may not be preset\n")); -#line 1309 "../usage.c" +#line 1258 "../usage.c" puts(_(" Arg Option-Name Description\n")); -#line 1245 "../usage.c" +#line 1194 "../usage.c" puts(_(" Flg Arg Option-Name Description\n")); -#line 1303 "../usage.c" +#line 1252 "../usage.c" puts(_(" Flg Arg Option-Name Description\n")); -#line 1304 "../usage.c" +#line 1253 "../usage.c" puts(_(" %3s %s")); -#line 1310 "../usage.c" +#line 1259 "../usage.c" puts(_(" %3s %s")); -#line 387 "../usage.c" +#line 336 "../usage.c" puts(_("The '-#' option may omit the hash char\n")); -#line 383 "../usage.c" +#line 332 "../usage.c" puts(_("All arguments are named options.\n")); -#line 971 "../usage.c" +#line 920 "../usage.c" puts(_(" - reading file %s")); -#line 409 "../usage.c" +#line 358 "../usage.c" puts(_("\n" "Please send bug reports to: <%s>\n")); #line 100 "../version.c" @@ -787,17 +788,17 @@ by the newly generated text. The first '#!' line will be regenerated.\n")); #line 129 "../version.c" puts(_("\n" "Please send bug reports to: <%s>\n")); -#line 903 "../usage.c" +#line 852 "../usage.c" puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 944 "../usage.c" +#line 893 "../usage.c" puts(_("\n" "The following option preset mechanisms are supported:\n")); -#line 1192 "../usage.c" +#line 1141 "../usage.c" puts(_("\n" "The following option preset mechanisms are supported:\n")); -#line 682 "../usage.c" +#line 631 "../usage.c" puts(_("prohibits these options:\n")); -#line 677 "../usage.c" +#line 626 "../usage.c" puts(_("prohibits the option '%s'\n")); #line 81 "../numeric.c" puts(_("%s%ld to %ld")); @@ -815,28 +816,28 @@ by the newly generated text. The first '#!' line will be regenerated.\n")); puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); #line 77 "../numeric.c" puts(_("%sless than or equal to %ld")); -#line 390 "../usage.c" +#line 339 "../usage.c" puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 652 "../usage.c" +#line 601 "../usage.c" puts(_("requires the option '%s'\n")); -#line 655 "../usage.c" +#line 604 "../usage.c" puts(_("requires these options:\n")); -#line 1321 "../usage.c" +#line 1270 "../usage.c" puts(_(" Arg Option-Name Req? Description\n")); -#line 1315 "../usage.c" +#line 1264 "../usage.c" puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" +#line 143 "../enum.c" puts(_("or you may use a numeric representation. Preceding these with a '!'\n" "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" "will set them all. Multiple entries may be passed as an option\n" "argument list.\n")); -#line 910 "../usage.c" +#line 859 "../usage.c" puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" +#line 52 "../enum.c" puts(_("The valid \"%s\" option keywords are:\n")); -#line 1152 "../usage.c" +#line 1101 "../usage.c" puts(_("The next option supports vendor supported extra options:")); -#line 773 "../usage.c" +#line 722 "../usage.c" puts(_("These additional options are:")); /* END-USAGE-TEXT */ } diff --git a/src/libopts/genshell.h b/src/libopts/genshell.h index c371f528d6..994af16909 100644 --- a/src/libopts/genshell.h +++ b/src/libopts/genshell.h @@ -6,7 +6,7 @@ * From the definitions genshell.def * and the template file options * - * Generated from AutoOpts 41:1:16 templates. + * Generated from AutoOpts 42:1:17 templates. * * AutoOpts is a copyrighted work. This header file is not encumbered * by AutoOpts licensing, but is provided under the licensing terms chosen @@ -19,7 +19,7 @@ * The genshellopt program is copyrighted and licensed * under the following terms: * - * Copyright (C) 1999-2014 Bruce Korb, all rights reserved. + * Copyright (C) 1999-2018 Bruce Korb, all rights reserved. * This is free software. It is licensed for use, modification and * redistribution under the terms of the GNU Lesser General Public License, * version 2 or later @@ -47,6 +47,8 @@ #ifndef AUTOOPTS_GENSHELL_H_GUARD #define AUTOOPTS_GENSHELL_H_GUARD 1 #include +#include +#include /** * Ensure that the library used for compiling this generated header is at @@ -55,13 +57,19 @@ * tolerable version is at least as old as what was current when the header * template was released. */ -#define AO_TEMPLATE_VERSION 167937 +#define AO_TEMPLATE_VERSION 172033 #if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) # error option template version mismatches autoopts/options.h header Choke Me. #endif +#if GCC_VERSION > 40400 +#define NOT_REACHED __builtin_unreachable(); +#else +#define NOT_REACHED +#endif + /** * Enumeration of each option type for genshellopt */ @@ -150,6 +158,12 @@ typedef enum { #ifdef __cplusplus extern "C" { #endif +/* + * global exported definitions + */ +#define ch_t unsigned char +#define cc_t const unsigned char +#define cch_t char const /* * * * * * @@ -201,6 +215,7 @@ static inline char* aoGetsText(char const* pz) { # endif #endif /* ENABLE_NLS */ + #ifdef __cplusplus } #endif diff --git a/src/libopts/gettext.h b/src/libopts/gettext.h index 7d3ea3cbf1..87ec81930d 100644 --- a/src/libopts/gettext.h +++ b/src/libopts/gettext.h @@ -1,5 +1,5 @@ /* Convenience header for conditional use of GNU . - Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2015 Free Software + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2018 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify @@ -13,13 +13,14 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along - with this program; if not, see . */ + with this program; if not, see . */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 -/* NLS can be disabled through the configure --disable-nls option. */ -#if ENABLE_NLS +/* NLS can be disabled through the configure --disable-nls option + or through "#define ENABLE NLS 0" before including this file. */ +#if defined ENABLE_NLS && ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include @@ -184,7 +185,8 @@ npgettext_aux (const char *domain, #include #if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ - /* || __STDC_VERSION__ >= 199901L */ ) + /* || __STDC_VERSION__ == 199901L + || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ ) # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 #else # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 @@ -225,15 +227,17 @@ dcpgettext_expr (const char *domain, if (msg_ctxt_id != NULL) #endif { + int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcgettext (domain, msg_ctxt_id, category); + found_translation = (translation != msg_ctxt_id); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif - if (translation != msg_ctxt_id) + if (found_translation) return translation; } return msgid; @@ -271,15 +275,17 @@ dcnpgettext_expr (const char *domain, if (msg_ctxt_id != NULL) #endif { + int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); + found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif - if (!(translation == msg_ctxt_id || translation == msgid_plural)) + if (found_translation) return translation; } return (n == 1 ? msgid : msgid_plural); diff --git a/src/libopts/init.c b/src/libopts/init.c index e02e1e1b9b..b65e593914 100644 --- a/src/libopts/init.c +++ b/src/libopts/init.c @@ -9,7 +9,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -28,11 +28,6 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -/* = = = START-STATIC-FORWARD = = = */ -static tSuccess -do_presets(tOptions * opts); -/* = = = END-STATIC-FORWARD = = = */ - /** * Make sure the option descriptor is there and that we understand it. * This should be called from any user entry point where one needs to @@ -46,7 +41,7 @@ do_presets(tOptions * opts); * @param[in] pname name of program, from argv[] * @returns SUCCESS or FAILURE */ -LOCAL tSuccess +static tSuccess validate_struct(tOptions * opts, char const * pname) { if (opts == NULL) { @@ -142,7 +137,7 @@ validate_struct(tOptions * opts, char const * pname) * @param pOpts program options descriptor * @returns SUCCESS or FAILURE */ -LOCAL tSuccess +static tSuccess immediate_opts(tOptions * opts) { tSuccess res; @@ -247,7 +242,7 @@ do_presets(tOptions * opts) * @param[in] a_ct program argument count * @param[in] a_v program argument vector */ -LOCAL bool +static bool ao_initialize(tOptions * opts, int a_ct, char ** a_v) { if ((opts->fOptSet & OPTPROC_INITDONE) != 0) diff --git a/src/libopts/intprops.h b/src/libopts/intprops.h index 2ae151b929..af456ff589 100644 --- a/src/libopts/intprops.h +++ b/src/libopts/intprops.h @@ -1,10 +1,10 @@ /* intprops.h -- properties of integer types - Copyright (C) 2001-2005, 2009-2015 Free Software Foundation, Inc. + Copyright (C) 2001-2018 Free Software Foundation, Inc. - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -13,7 +13,7 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ + along with this program. If not, see . */ /* Written by Paul Eggert. */ @@ -22,12 +22,11 @@ #include -/* Return an integer value, converted to the same type as the integer - expression E after integer type promotion. V is the unconverted value. */ +/* Return a value with the common real type of E and V and the value of V. */ #define _GL_INT_CONVERT(e, v) (0 * (e) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see - . */ + . */ #define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v)) /* The extra casts in the following macros work around compiler bugs, @@ -37,59 +36,55 @@ an integer. */ #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) -/* True if negative values of the signed integer type T use two's - complement, ones' complement, or signed magnitude representation, - respectively. Much GNU code assumes two's complement, but some - people like to be portable to all possible C hosts. */ -#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) -#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) -#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) - -/* True if the signed integer expression E uses two's complement. */ -#define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1) - -/* True if the arithmetic type T is signed. */ +/* True if the real type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) -/* Return 1 if the integer expression E, after integer promotion, has - a signed type. */ -#define _GL_INT_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) +/* Return 1 if the real expression E, after promotion, has a + signed or floating type. */ +#define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) -/* Minimum and maximum values for integer types and expressions. These - macros have undefined behavior if T is signed and has padding bits. - If this is a problem for you, please let us know how to fix it for - your host. */ +/* Minimum and maximum values for integer types and expressions. */ + +/* The width in bits of the integer type or expression T. + Padding bits are not supported; this is checked at compile-time below. */ +#define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) /* The maximum and minimum values for the integer type T. */ -#define TYPE_MINIMUM(t) \ - ((t) (! TYPE_SIGNED (t) \ - ? (t) 0 \ - : TYPE_SIGNED_MAGNITUDE (t) \ - ? ~ (t) 0 \ - : ~ TYPE_MAXIMUM (t))) +#define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ - : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) + : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* The maximum and minimum values for the type of the expression E, after integer promotion. E should not have side effects. */ #define _GL_INT_MINIMUM(e) \ - (_GL_INT_SIGNED (e) \ - ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e) \ + (EXPR_SIGNED (e) \ + ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ - (_GL_INT_SIGNED (e) \ + (EXPR_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ - (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1) + (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1) +/* Work around OpenVMS incompatibility with C99. */ +#if !defined LLONG_MAX && defined __INT64_MAX +# define LLONG_MAX __INT64_MAX +# define LLONG_MIN __INT64_MIN +#endif + +/* This include file assumes that signed types are two's complement without + padding bits; the above macros have undefined behavior otherwise. + If this is a problem for you, please let us know how to fix it for your host. + This assumption is tested by the intprops-tests module. */ -/* Return 1 if the __typeof__ keyword works. This could be done by +/* Does the __typeof__ keyword work? This could be done by 'configure', but for now it's easier to do it by hand. */ -#if (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ +#if (2 <= __GNUC__ \ + || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ || (0x5110 <= __SUNPRO_C && !__STDC__)) # define _GL_HAVE___TYPEOF__ 1 #else @@ -118,8 +113,7 @@ signed, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ - (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT \ - - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + _GL_SIGNED_TYPE_OR_EXPR (t)) /* Bound on buffer size needed to represent an integer type or expression T, @@ -185,7 +179,7 @@ /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see - . */ + . */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ @@ -224,24 +218,42 @@ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) +/* True if __builtin_add_overflow (A, B, P) works when P is non-null. */ +#if 5 <= __GNUC__ && !defined __ICC +# define _GL_HAS_BUILTIN_OVERFLOW 1 +#else +# define _GL_HAS_BUILTIN_OVERFLOW 0 +#endif + +/* True if __builtin_add_overflow_p (A, B, C) works. */ +#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands (e.g., A and B) have the same type as MIN and MAX. Instead, they assume that the result (e.g., A + B) has that type. */ -#define _GL_ADD_OVERFLOW(a, b, min, max) \ - ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ - : (a) < 0 ? (b) <= (a) + (b) \ - : (b) < 0 ? (a) <= (a) + (b) \ - : (a) + (b) < (b)) -#define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ - ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ - : (a) < 0 ? 1 \ - : (b) < 0 ? (a) - (b) <= (a) \ - : (a) < (b)) -#define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ - (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ - || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) +#if _GL_HAS_BUILTIN_OVERFLOW_P +# define _GL_ADD_OVERFLOW(a, b, min, max) \ + __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) +# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ + __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) +# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ + __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) +#else +# define _GL_ADD_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? (b) <= (a) + (b) \ + : (b) < 0 ? (a) <= (a) + (b) \ + : (a) + (b) < (b)) +# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? 1 \ + : (b) < 0 ? (a) - (b) <= (a) \ + : (a) < (b)) +# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ + (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ + || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) +#endif #define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (b) <= (a) + (b) - 1 \ @@ -263,22 +275,29 @@ : (a) % - (b)) \ == 0) - -/* Integer overflow checks. +/* Check for integer overflow, and report low order bits of answer. The INT__OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. - They work correctly on all known practical hosts, and do not rely + The INT__WRAPV macros also store the low-order bits of the answer. + These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. - Example usage: + Example usage, assuming A and B are long int: - long int i = ...; - long int j = ...; - if (INT_MULTIPLY_OVERFLOW (i, j)) - printf ("multiply would overflow"); + if (INT_MULTIPLY_OVERFLOW (a, b)) + printf ("result would overflow\n"); else - printf ("product is %ld", i * j); + printf ("result is %ld (no overflow)\n", a * b); + + Example usage with WRAPV flavor: + + long int result; + bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); + printf ("result is %ld (%s)\n", result, + overflow ? "after overflow" : "no overflow"); + + Restrictions on these macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division @@ -287,6 +306,9 @@ These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. + The WRAPV macros are not constant expressions. They support only + +, binary -, and *. The result type must be signed. + These macros are tuned for their last argument being a constant. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, @@ -296,8 +318,12 @@ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) #define INT_SUBTRACT_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) -#define INT_NEGATE_OVERFLOW(a) \ - INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) +#if _GL_HAS_BUILTIN_OVERFLOW_P +# define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a) +#else +# define INT_NEGATE_OVERFLOW(a) \ + INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) +#endif #define INT_MULTIPLY_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) #define INT_DIVIDE_OVERFLOW(a, b) \ @@ -317,4 +343,111 @@ _GL_INT_MINIMUM (0 * (b) + (a)), \ _GL_INT_MAXIMUM (0 * (b) + (a))) +/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. + Return 1 if the result overflows. See above for restrictions. */ +#define INT_ADD_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, +, __builtin_add_overflow, INT_ADD_OVERFLOW) +#define INT_SUBTRACT_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, -, __builtin_sub_overflow, INT_SUBTRACT_OVERFLOW) +#define INT_MULTIPLY_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, *, __builtin_mul_overflow, INT_MULTIPLY_OVERFLOW) + +/* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 + https://llvm.org/bugs/show_bug.cgi?id=25390 + For now, assume all versions of GCC-like compilers generate bogus + warnings for _Generic. This matters only for older compilers that + lack __builtin_add_overflow. */ +#if __GNUC__ +# define _GL__GENERIC_BOGUS 1 +#else +# define _GL__GENERIC_BOGUS 0 +#endif + +/* Store the low-order bits of A B into *R, where OP specifies + the operation. BUILTIN is the builtin operation, and OVERFLOW the + overflow predicate. Return 1 if the result overflows. See above + for restrictions. */ +#if _GL_HAS_BUILTIN_OVERFLOW +# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r) +#elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS +# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ + (_Generic \ + (*(r), \ + signed char: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + signed char, SCHAR_MIN, SCHAR_MAX), \ + short int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + short int, SHRT_MIN, SHRT_MAX), \ + int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + int, INT_MIN, INT_MAX), \ + long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX), \ + long long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + long long int, LLONG_MIN, LLONG_MAX))) +#else +# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ + (sizeof *(r) == sizeof (signed char) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + signed char, SCHAR_MIN, SCHAR_MAX) \ + : sizeof *(r) == sizeof (short int) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + short int, SHRT_MIN, SHRT_MAX) \ + : sizeof *(r) == sizeof (int) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + int, INT_MIN, INT_MAX) \ + : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) +# ifdef LLONG_MAX +# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ + (sizeof *(r) == sizeof (long int) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + long long int, LLONG_MIN, LLONG_MAX)) +# else +# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX) +# endif +#endif + +/* Store the low-order bits of A B into *R, where the operation + is given by OP. Use the unsigned type UT for calculation to avoid + overflow problems. *R's type is T, with extrema TMIN and TMAX. + T must be a signed integer type. Return 1 if the result overflows. */ +#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ + (sizeof ((a) op (b)) < sizeof (t) \ + ? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \ + : _GL_INT_OP_CALC1 (a, b, r, op, overflow, ut, t, tmin, tmax)) +#define _GL_INT_OP_CALC1(a, b, r, op, overflow, ut, t, tmin, tmax) \ + ((overflow (a, b) \ + || (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \ + || (tmax) < ((a) op (b))) \ + ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ + : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) + +/* Return the low-order bits of A B, where the operation is given + by OP. Use the unsigned type UT for calculation to avoid undefined + behavior on signed integer overflow, and convert the result to type T. + UT is at least as wide as T and is no narrower than unsigned int, + T is two's complement, and there is no padding or trap representations. + Assume that converting UT to T yields the low-order bits, as is + done in all known two's-complement C compilers. E.g., see: + https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html + + According to the C standard, converting UT to T yields an + implementation-defined result or signal for values outside T's + range. However, code that works around this theoretical problem + runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: + https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html + As the compiler bug is real, don't try to work around the + theoretical problem. */ + +#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ + ((t) ((ut) (a) op (ut) (b))) + #endif /* _GL_INTPROPS_H */ diff --git a/src/libopts/libopts.c b/src/libopts/libopts.c index a26c9248ae..457edc433a 100644 --- a/src/libopts/libopts.c +++ b/src/libopts/libopts.c @@ -1,9 +1,9 @@ #define AUTOOPTS_INTERNAL 1 #include "autoopts/project.h" -#define LOCAL static + #include "ao-strs.h" static char const ao_ver_string[] = - "41:1:16\n"; + "42:1:17\n"; #include "autoopts/options.h" #include "autoopts/usage-txt.h" #include "genshell.h" @@ -11,12 +11,14 @@ static char const ao_ver_string[] = #include "option-value-type.h" #include "ao-strs.h" #include "ag-char-map.h" +#include "save-flags.h" #include "autoopts.h" #include "proto.h" #include "parse-duration.c" #include "ao-strs.c" #include "option-value-type.c" #include "option-xat-attribute.c" +#include "save-flags.c" #include "autoopts.c" #include "alias.c" #include "boolean.c" diff --git a/src/libopts/load.c b/src/libopts/load.c index 5c82e120ba..59d124ebd4 100644 --- a/src/libopts/load.c +++ b/src/libopts/load.c @@ -12,7 +12,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -31,26 +31,6 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -/* = = = START-STATIC-FORWARD = = = */ -static bool -get_realpath(char * buf, size_t b_sz); - -static bool -add_prog_path(char * buf, int b_sz, char const * fname, char const * prg_path); - -static bool -add_env_val(char * buf, int buf_sz, char const * name); - -static char * -assemble_arg_val(char * txt, tOptionLoadMode mode); - -static char * -trim_quotes(char * arg); - -static bool -direction_ok(opt_state_mask_t f, int dir); -/* = = = END-STATIC-FORWARD = = = */ - static bool get_realpath(char * buf, size_t b_sz) { @@ -314,7 +294,7 @@ add_env_val(char * buf, int buf_sz, char const * name) * @param[in,out] txt the input and output string * @param[in] mode the handling mode (cooking method) */ -LOCAL void +static void munge_str(char * txt, tOptionLoadMode mode) { char * end; @@ -445,7 +425,7 @@ direction_ok(opt_state_mask_t f, int dir) if (PRESETTING(dir)) { /* * We are in the presetting direction with an option we handle - * immediately for disablement, but normally for disablement. + * immediately for disablement, but normally for handling. * Therefore, skip if NOT disabled. */ if ((f & OPTST_DISABLED) != 0) @@ -453,7 +433,7 @@ direction_ok(opt_state_mask_t f, int dir) } else { /* * We are in the processing direction with an option we handle - * immediately for disablement, but normally for disablement. + * immediately for disablement, but normally for handling. * Therefore, skip if disabled. */ if ((f & OPTST_DISABLED) == 0) @@ -486,7 +466,7 @@ direction_ok(opt_state_mask_t f, int dir) * @param[in] direction current processing direction (preset or not) * @param[in] load_mode option loading mode (OPTION_LOAD_*) */ -LOCAL void +static void load_opt_line(tOptions * opts, tOptState * opt_state, char * line, tDirection direction, tOptionLoadMode load_mode ) { diff --git a/src/libopts/m4/libopts.m4 b/src/libopts/m4/libopts.m4 index f8b2c38e16..23738cab47 100644 --- a/src/libopts/m4/libopts.m4 +++ b/src/libopts/m4/libopts.m4 @@ -1,11 +1,4 @@ -dnl -*- buffer-read-only: t -*- vi: set ro: -dnl -dnl DO NOT EDIT THIS FILE (libopts.m4) -dnl -dnl It has been AutoGen-ed -dnl From the definitions libopts.def -dnl and the template file conftest.tpl -dnl + dnl do always before generated macros: dnl AC_DEFUN([INVOKE_LIBOPTS_MACROS_FIRST],[ @@ -114,6 +107,7 @@ AC_DEFUN([INVOKE_LIBOPTS_MACROS_FIRST],[ AC_PROG_SED [while : do + test -x "$POSIX_SHELL" && break POSIX_SHELL=`which bash` test -x "$POSIX_SHELL" && break POSIX_SHELL=`which dash` @@ -235,9 +229,9 @@ int main() { fputs( "error: regex -->.<-- did not match\n", stderr ); return 1; } - return 0; }])], + return 0; }] )], [libopts_cv_with_libregex=yes], [libopts_cv_with_libregex=no], - [libopts_cv_with_libregex=no]) # end of AC_RUN_IFELSE + [libopts_cv_with_libregex=no]) # end of AC_RUN_IFELSE ]) # end of AC_CACHE_VAL for libopts_cv_with_libregex fi ## disabled by request AC_MSG_RESULT([${libopts_cv_with_libregex}]) @@ -265,7 +259,7 @@ AC_DEFUN([LIBOPTS_RUN_PATHFIND],[ int main (int argc, char ** argv) { char * pz = pathfind( getenv( "PATH" ), "sh", "x" ); return (pz == 0) ? 1 : 0; -}])], +}] )], [libopts_cv_run_pathfind=yes],[libopts_cv_run_pathfind=no],[libopts_cv_run_pathfind=no] ) # end of RUN_IFELSE ]) # end of AC_CACHE_VAL for libopts_cv_run_pathfind @@ -313,7 +307,7 @@ choke me!! @%:@endif char *pz = realpath(argv@<:@0@:>@, zPath); return (pz == zPath) ? 0 : 1; -}])], +}] )], [libopts_cv_run_realpath=yes],[libopts_cv_run_realpath=no],[libopts_cv_run_realpath=no] ) # end of RUN_IFELSE ]) # end of AC_CACHE_VAL for libopts_cv_run_realpath @@ -346,7 +340,7 @@ int main() { tm.tm_yday = 239; /* days since January 1 @<:@0, 365@:>@ */ tm.tm_isdst = 1; /* flag for daylight savings time */ strftime( t_buf, sizeof( t_buf ), "%A %b %d %j", &tm ); - return (strcmp( t_buf, z ) != 0); }])], + return (strcmp( t_buf, z ) != 0); }] )], [libopts_cv_run_strftime=yes],[libopts_cv_run_strftime=no],[libopts_cv_run_strftime=no] ) # end of RUN_IFELSE ]) # end of AC_CACHE_VAL for libopts_cv_run_strftime @@ -366,7 +360,7 @@ AC_DEFUN([LIBOPTS_RUN_FOPEN_BINARY],[ AC_RUN_IFELSE([AC_LANG_SOURCE([@%:@include int main (int argc, char ** argv) { FILE * fp = fopen("conftest.@S|@ac_ext", "rb"); -return (fp == NULL) ? 1 : fclose(fp); }])], +return (fp == NULL) ? 1 : fclose(fp); }] )], [libopts_cv_run_fopen_binary=yes],[libopts_cv_run_fopen_binary=no],[libopts_cv_run_fopen_binary=no] ) # end of RUN_IFELSE ]) # end of AC_CACHE_VAL for libopts_cv_run_fopen_binary @@ -389,7 +383,7 @@ AC_DEFUN([LIBOPTS_RUN_FOPEN_TEXT],[ AC_RUN_IFELSE([AC_LANG_SOURCE([@%:@include int main (int argc, char ** argv) { FILE * fp = fopen("conftest.@S|@ac_ext", "rt"); -return (fp == NULL) ? 1 : fclose(fp); }])], +return (fp == NULL) ? 1 : fclose(fp); }] )], [libopts_cv_run_fopen_text=yes],[libopts_cv_run_fopen_text=no],[libopts_cv_run_fopen_text=no] ) # end of RUN_IFELSE ]) # end of AC_CACHE_VAL for libopts_cv_run_fopen_text @@ -461,7 +455,7 @@ dnl the config tests that the library needs. Invoke the dnl "INVOKE_LIBOPTS_MACROS" macro iff we are building libopts. dnl dnl This file is part of AutoGen. -dnl AutoGen Copyright (C) 1992-2015 by Bruce Korb - all rights reserved +dnl AutoGen Copyright (C) 1992-2018 by Bruce Korb - all rights reserved dnl dnl AutoGen is free software: you can redistribute it and/or modify it dnl under the terms of the GNU General Public License as published by the diff --git a/src/libopts/m4/liboptschk.m4 b/src/libopts/m4/liboptschk.m4 index 34d5658c2f..9d107d6962 100644 --- a/src/libopts/m4/liboptschk.m4 +++ b/src/libopts/m4/liboptschk.m4 @@ -1,5 +1,5 @@ # liboptschk.m4 serial 2 (autogen - 5.11.4) -dnl Copyright (C) 2005-2015 by Bruce Korb - all rights reserved +dnl Copyright (C) 2005-2018 by Bruce Korb - all rights reserved dnl dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, diff --git a/src/libopts/m4/stdnoreturn.m4 b/src/libopts/m4/stdnoreturn.m4 index 003941164f..a7ce376428 100644 --- a/src/libopts/m4/stdnoreturn.m4 +++ b/src/libopts/m4/stdnoreturn.m4 @@ -1,6 +1,6 @@ # Check for stdnoreturn.h that conforms to C11. -dnl Copyright 2012-2015 Free Software Foundation, Inc. +dnl Copyright 2012-2018 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -9,33 +9,43 @@ dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STDNORETURN_H], [ - AC_CACHE_CHECK([for working stdnoreturn.h], - [gl_cv_header_working_stdnoreturn_h], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - #include - /* Do not check for 'noreturn' after the return type. - C11 allows it, but it's rarely done that way - and circa-2012 bleeding-edge GCC rejects it when given - -Werror=old-style-declaration. */ - noreturn void foo1 (void) { exit (0); } - _Noreturn void foo2 (void) { exit (0); } - int testit (int argc, char **argv) { - if (argc & 1) - return 0; - (argv[0][0] ? foo1 : foo2) (); - } - ]])], - [gl_cv_header_working_stdnoreturn_h=yes], - [gl_cv_header_working_stdnoreturn_h=no])]) - - if test $gl_cv_header_working_stdnoreturn_h = yes; then - STDNORETURN_H='' - else - STDNORETURN_H='stdnoreturn.h' - fi - + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + cygwin*) + dnl Regardless whether a working exists or not, + dnl we need our own , because of the definition + dnl of _Noreturn done by gnulib-common.m4. + STDNORETURN_H='stdnoreturn.h' + ;; + *) + AC_CACHE_CHECK([for working stdnoreturn.h], + [gl_cv_header_working_stdnoreturn_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + /* Do not check for 'noreturn' after the return type. + C11 allows it, but it's rarely done that way + and circa-2012 bleeding-edge GCC rejects it when given + -Werror=old-style-declaration. */ + noreturn void foo1 (void) { exit (0); } + _Noreturn void foo2 (void) { exit (0); } + int testit (int argc, char **argv) + { + if (argc & 1) + return 0; + (argv[0][0] ? foo1 : foo2) (); + } + ]])], + [gl_cv_header_working_stdnoreturn_h=yes], + [gl_cv_header_working_stdnoreturn_h=no])]) + if test $gl_cv_header_working_stdnoreturn_h = yes; then + STDNORETURN_H='' + else + STDNORETURN_H='stdnoreturn.h' + fi + ;; + esac AC_SUBST([STDNORETURN_H]) AM_CONDITIONAL([GL_GENERATE_STDNORETURN_H], [test -n "$STDNORETURN_H"]) ]) diff --git a/src/libopts/makeshell.c b/src/libopts/makeshell.c index a61df422c8..10ed12005a 100644 --- a/src/libopts/makeshell.c +++ b/src/libopts/makeshell.c @@ -11,7 +11,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -35,45 +35,7 @@ #define UPPER(_c) (toupper(to_uchar(_c))) #define LOWER(_c) (tolower(to_uchar(_c))) -/* = = = START-STATIC-FORWARD = = = */ -static void -emit_var_text(char const * prog, char const * var, int fdin); - -static void -text_to_var(tOptions * opts, teTextTo which, tOptDesc * od); - -static void -emit_usage(tOptions * opts); - -static void -emit_wrapup(tOptions * opts); - -static void -emit_setup(tOptions * opts); - -static void -emit_action(tOptions * opts, tOptDesc * od); - -static void -emit_inaction(tOptions * opts, tOptDesc * od); - -static void -emit_flag(tOptions * opts); - -static void -emit_match_expr(char const * name, tOptDesc * cod, tOptions * opts); - -static void -emit_long(tOptions * opts); - -static char * -load_old_output(char const * fname, char const * pname); - -static void -open_out(char const * fname, char const * pname); -/* = = = END-STATIC-FORWARD = = = */ - -LOCAL noreturn void +noreturn static void option_exits(int exit_code) { if (print_exit) @@ -81,21 +43,21 @@ option_exits(int exit_code) exit(exit_code); } -LOCAL noreturn void +noreturn static void ao_bug(char const * msg) { fprintf(stderr, zao_bug_msg, msg); option_exits(EX_SOFTWARE); } -LOCAL void +static void fserr_warn(char const * prog, char const * op, char const * fname) { fprintf(stderr, zfserr_fmt, prog, errno, strerror(errno), op, fname); } -LOCAL noreturn void +noreturn static void fserr_exit(char const * prog, char const * op, char const * fname) { fserr_warn(prog, op, fname); @@ -322,11 +284,11 @@ text_to_var(tOptions * opts, teTextTo which, tOptDesc * od) switch (which) { case TT_LONGUSAGE: (*(opts->pUsageProc))(opts, EXIT_SUCCESS); - /* NOTREACHED */ + /* FALLTHROUGH */ /* NOTREACHED */ case TT_USAGE: (*(opts->pUsageProc))(opts, EXIT_FAILURE); - /* NOTREACHED */ + /* FALLTHROUGH */ /* NOTREACHED */ case TT_VERSION: if (od->fOptState & OPTST_ALLOC_ARG) { @@ -335,13 +297,13 @@ text_to_var(tOptions * opts, teTextTo which, tOptDesc * od) } od->optArg.argString = "c"; optionPrintVersion(opts, od); - /* NOTREACHED */ + /* FALLTHROUGH */ /* NOTREACHED */ default: option_exits(EXIT_FAILURE); - /* NOTREACHED */ + /* FALLTHROUGH */ /* NOTREACHED */ } - /* NOTREACHED */ + /* FALLTHROUGH */ /* NOTREACHED */ default: close(fdpair[1]); @@ -885,13 +847,12 @@ genshelloptUsage(tOptions * opts, int exit_cd) switch (fork()) { case -1: optionUsage(opts, EXIT_FAILURE); - /* NOTREACHED */ + /* FALLTHROUGH */ /* NOTREACHED */ case 0: pagerState = PAGER_STATE_CHILD; optionUsage(opts, EXIT_SUCCESS); - /* NOTREACHED */ - _exit(EXIT_FAILURE); + /* FALLTHROUGH */ /* NOTREACHED */ default: { @@ -930,6 +891,7 @@ genshelloptUsage(tOptions * opts, int exit_cd) /*FALLTHROUGH*/ case -1: optionUsage(optionParseShellOptions, EXIT_FAILURE); + /* FALLTHROUGH */ /* NOTREACHED */ default: { diff --git a/src/libopts/nested.c b/src/libopts/nested.c index f4fb226209..e760450678 100644 --- a/src/libopts/nested.c +++ b/src/libopts/nested.c @@ -12,7 +12,7 @@ * * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -37,7 +37,7 @@ typedef struct { char xml_txt[8]; } xml_xlate_t; -static xml_xlate_t const xml_xlate[] = { + static xml_xlate_t const xml_xlate[] = { { '&', 4, "amp;" }, { '<', 3, "lt;" }, { '>', 3, "gt;" }, @@ -49,48 +49,6 @@ static xml_xlate_t const xml_xlate[] = { #define ENOMSG ENOENT #endif -/* = = = START-STATIC-FORWARD = = = */ -static void -remove_continuation(char * src); - -static char const * -scan_q_str(char const * pzTxt); - -static tOptionValue * -add_string(void ** pp, char const * name, size_t nm_len, - char const * val, size_t d_len); - -static tOptionValue * -add_bool(void ** pp, char const * name, size_t nm_len, - char const * val, size_t d_len); - -static tOptionValue * -add_number(void ** pp, char const * name, size_t nm_len, - char const * val, size_t d_len); - -static tOptionValue * -add_nested(void ** pp, char const * name, size_t nm_len, - char * val, size_t d_len); - -static char const * -scan_name(char const * name, tOptionValue * res); - -static char const * -unnamed_xml(char const * txt); - -static char const * -scan_xml_name(char const * name, size_t * nm_len, tOptionValue * val); - -static char const * -find_end_xml(char const * src, size_t nm_len, char const * val, size_t * len); - -static char const * -scan_xml(char const * xml_name, tOptionValue * res_val); - -static void -sort_list(tArgList * arg_list); -/* = = = END-STATIC-FORWARD = = = */ - /** * Backslashes are used for line continuations. We keep the newline * characters, but trim out the backslash: @@ -638,7 +596,7 @@ scan_xml(char const * xml_name, tOptionValue * res_val) * an internal call, so it is not validated. The caller is responsible for * knowing what they are doing. */ -LOCAL void +static void unload_arg_list(tArgList * arg_list) { int ct = arg_list->useCt; @@ -743,7 +701,7 @@ sort_list(tArgList * arg_list) * @code{ENOMSG} no configuration values were found * @end itemize =*/ -LOCAL tOptionValue * +static tOptionValue * optionLoadNested(char const * text, char const * name, size_t nm_len) { tOptionValue * res_val; @@ -783,12 +741,23 @@ optionLoadNested(char const * text, char const * name, size_t nm_len) text = scan_name(text, res_val); else switch (*text) { - case NUL: goto scan_done; - case '<': text = scan_xml(text, res_val); - if (text == NULL) goto woops; - if (*text == ',') text++; break; - case '#': text = strchr(text, NL); break; - default: goto woops; + case NUL: + goto scan_done; + + case '<': + text = scan_xml(text, res_val); + if (text == NULL) + goto woops; + if (*text == ',') + text++; + break; + + case '#': + text = strchr(text, NL); + break; + + default: + goto woops; } } while (text != NULL); scan_done:; @@ -855,7 +824,7 @@ optionNestedVal(tOptions * opts, tOptDesc * od) /** * get_special_char */ -LOCAL int +static int get_special_char(char const ** ppz, int * ct) { char const * pz = *ppz; @@ -907,7 +876,7 @@ get_special_char(char const ** ppz, int * ct) /** * emit_special_char */ -LOCAL void +static void emit_special_char(FILE * fp, int ch) { int ctr = sizeof(xml_xlate) / sizeof(xml_xlate[0]); diff --git a/src/libopts/numeric.c b/src/libopts/numeric.c index 66af1508d4..bbb43ccdcd 100644 --- a/src/libopts/numeric.c +++ b/src/libopts/numeric.c @@ -10,7 +10,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -136,14 +136,14 @@ optionNumericVal(tOptions * opts, tOptDesc * od) if ((od->fOptState & OPTST_SCALED_NUM) != 0) switch (*(pz++)) { case NUL: pz--; break; - case 't': val *= 1000; - case 'g': val *= 1000; - case 'm': val *= 1000; + case 't': val *= 1000; /* FALLTHROUGH */ + case 'g': val *= 1000; /* FALLTHROUGH */ + case 'm': val *= 1000; /* FALLTHROUGH */ case 'k': val *= 1000; break; - case 'T': val *= 1024; - case 'G': val *= 1024; - case 'M': val *= 1024; + case 'T': val *= 1024; /* FALLTHROUGH */ + case 'G': val *= 1024; /* FALLTHROUGH */ + case 'M': val *= 1024; /* FALLTHROUGH */ case 'K': val *= 1024; break; default: goto bad_number; diff --git a/src/libopts/option-value-type.c b/src/libopts/option-value-type.c index 5f676408ae..2bc8642809 100644 --- a/src/libopts/option-value-type.c +++ b/src/libopts/option-value-type.c @@ -31,7 +31,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "option-value-type.h" -/* ANSI-C code produced by gperf version 3.0.4 */ +/* ANSI-C code produced by gperf version 3.1 */ /* Command-line: gperf option-value-type.gp */ /* Computed positions: -k'1' */ @@ -64,7 +64,7 @@ typedef struct { /* maximum key range = 15, duplicates = 0 */ static unsigned int -option_value_type_hash (register const char *str, register unsigned int len) +option_value_type_hash (register const char *str, register size_t len) { static const unsigned char asso_values[] = { @@ -119,13 +119,13 @@ static const option_value_type_map_t option_value_type_table[] = }; static inline const option_value_type_map_t * -find_option_value_type_name (register const char *str, register unsigned int len) +find_option_value_type_name (register const char *str, register size_t len) { if (len <= 14 && len >= 3) { - register int key = (int)option_value_type_hash (str, len); + register unsigned int key = (int)option_value_type_hash (str, len); - if (key <= 17 && key >= 0) + if (key <= 17) { register const char *s = option_value_type_table[key].vtp_name; diff --git a/src/libopts/option-xat-attribute.c b/src/libopts/option-xat-attribute.c index be86041fd8..a34ab1b5b2 100644 --- a/src/libopts/option-xat-attribute.c +++ b/src/libopts/option-xat-attribute.c @@ -31,7 +31,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "option-xat-attribute.h" -/* ANSI-C code produced by gperf version 3.0.4 */ +/* ANSI-C code produced by gperf version 3.1 */ /* Command-line: gperf option-xat-attribute.gp */ /* Computed positions: -k'1' */ @@ -64,7 +64,7 @@ typedef struct { /* maximum key range = 6, duplicates = 0 */ static unsigned int -option_xat_attribute_hash (register const char *str, register unsigned int len) +option_xat_attribute_hash (register const char *str, register size_t len) { static const unsigned char asso_values[] = { @@ -111,13 +111,13 @@ static const option_xat_attribute_map_t option_xat_attribute_table[] = }; static inline const option_xat_attribute_map_t * -find_option_xat_attribute_name (register const char *str, register unsigned int len) +find_option_xat_attribute_name (register const char *str, register size_t len) { if (len <= 8 && len >= 4) { - register int key = (int)option_xat_attribute_hash (str, len); + register unsigned int key = (int)option_xat_attribute_hash (str, len); - if (key <= 9 && key >= 0) + if (key <= 9) { register const char *s = option_xat_attribute_table[key].xat_name; diff --git a/src/libopts/parse-duration.c b/src/libopts/parse-duration.c index e072b7d567..0f4a05634b 100644 --- a/src/libopts/parse-duration.c +++ b/src/libopts/parse-duration.c @@ -1,5 +1,5 @@ /* Parse a time duration and return a seconds count - Copyright (C) 2008-2015 Free Software Foundation, Inc. + Copyright (C) 2008-2018 Free Software Foundation, Inc. Written by Bruce Korb , 2008. This program is free software: you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ + along with this program. If not, see . */ #include diff --git a/src/libopts/parse-duration.h b/src/libopts/parse-duration.h index 33ddc3366e..9a7bcd5e10 100644 --- a/src/libopts/parse-duration.h +++ b/src/libopts/parse-duration.h @@ -1,5 +1,5 @@ /* Parse a time duration and return a seconds count - Copyright (C) 2008-2015 Free Software Foundation, Inc. + Copyright (C) 2008-2018 Free Software Foundation, Inc. Written by Bruce Korb , 2008. This program is free software: you can redistribute it and/or modify @@ -13,7 +13,7 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License - along with this program. If not, see . */ + along with this program. If not, see . */ /* @@ -22,7 +22,7 @@ At the time of writing, this worked: - http://en.wikipedia.org/wiki/ISO_8601#Durations + https://en.wikipedia.org/wiki/ISO_8601#Durations The string must start with a 'P', 'T' or a digit. diff --git a/src/libopts/pgusage.c b/src/libopts/pgusage.c index 3d229c18d0..f895b3bb56 100644 --- a/src/libopts/pgusage.c +++ b/src/libopts/pgusage.c @@ -13,7 +13,7 @@ * * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control diff --git a/src/libopts/proto.h b/src/libopts/proto.h index 7e3475d93b..437e81ed9b 100644 --- a/src/libopts/proto.h +++ b/src/libopts/proto.h @@ -1,19 +1,20 @@ /* -*- buffer-read-only: t -*- vi: set ro: * * Prototypes for autoopts - * Generated Sat Sep 12 05:42:03 PDT 2015 + * Generated Sun Aug 26 10:44:39 PDT 2018 */ #ifndef AUTOOPTS_PROTO_H_GUARD #define AUTOOPTS_PROTO_H_GUARD 1 + /* - * Extracted from alias.c + * Static declarations from alias.c */ static tSuccess too_many_occurrences(tOptions * opts, tOptDesc * od); /* - * Extracted from autoopts.c + * Static declarations from autoopts.c */ static void * ao_malloc(size_t sz); @@ -34,14 +35,53 @@ static tSuccess regular_opts(tOptions * opts); /* - * Extracted from check.c + * Static declarations from check.c */ +static bool +has_conflict(tOptions * pOpts, tOptDesc * od); + +static bool +occurs_enough(tOptions * pOpts, tOptDesc * pOD); + static bool is_consistent(tOptions * pOpts); /* - * Extracted from configfile.c + * Static declarations from configfile.c */ +static void +file_preset(tOptions * opts, char const * fname, int dir); + +static char * +handle_comment(char * txt); + +static char * +handle_cfg(tOptions * opts, tOptState * ost, char * txt, int dir); + +static char * +handle_directive(tOptions * opts, char * txt); + +static char * +aoflags_directive(tOptions * opts, char * txt); + +static char * +program_directive(tOptions * opts, char * txt); + +static char * +handle_section(tOptions * opts, char * txt); + +static int +parse_xml_encoding(char ** ppz); + +static char * +trim_xml_text(char * intxt, char const * pznm, tOptionLoadMode mode); + +static void +cook_xml_text(char * pzData); + +static char * +handle_struct(tOptions * opts, tOptState * ost, char * txt, int dir); + static void intern_file_load(tOptions * opts); @@ -49,24 +89,112 @@ static char const * parse_attrs(tOptions * opts, char const * txt, tOptionLoadMode * pMode, tOptionValue * pType); +static char const * +parse_keyword(tOptions * opts, char const * txt, tOptionValue * typ); + +static char const * +parse_set_mem(tOptions * opts, char const * txt, tOptionValue * typ); + +static char const * +parse_value(char const * txt, tOptionValue * typ); + +/* + * Static declarations from cook.c + */ +static char * +nl_count(char * start, char * end, int * lnct_p); + +static bool +contiguous_quote(char ** pps, char * pq, int * lnct_p); + +/* + * Static declarations from enum.c + */ +static void +enum_err(tOptions * pOpts, tOptDesc * pOD, + char const * const * paz_names, int name_ct); + +static uintptr_t +find_name(char const * name, tOptions * pOpts, tOptDesc * pOD, + char const * const * paz_names, unsigned int name_ct); + +static void +set_memb_shell(tOptions * pOpts, tOptDesc * pOD, char const * const * paz_names, + unsigned int name_ct); + +static void +set_memb_names(tOptions * opts, tOptDesc * od, char const * const * nm_list, + unsigned int nm_ct); + +static uintptr_t +check_membership_start(tOptDesc * od, char const ** argp, bool * invert); + +static uintptr_t +find_member_bit(tOptions * opts, tOptDesc * od, char const * pz, int len, + char const * const * nm_list, unsigned int nm_ct); + /* - * Extracted from env.c + * Static declarations from env.c */ static void doPrognameEnv(tOptions * pOpts, teEnvPresetType type); +static void +do_env_opt(tOptState * os, char * env_name, + tOptions * pOpts, teEnvPresetType type); + static void env_presets(tOptions * pOpts, teEnvPresetType type); /* - * Extracted from find.c + * Static declarations from file.c */ +static void +check_existence(teOptFileType ftype, tOptions * pOpts, tOptDesc * pOD); + +static void +open_file_fd(tOptions * pOpts, tOptDesc * pOD, tuFileMode mode); + +static void +fopen_file_fp(tOptions * pOpts, tOptDesc * pOD, tuFileMode mode); + +/* + * Static declarations from find.c + */ +static int +parse_opt(char const ** nm_pp, char ** arg_pp, char * buf, size_t bufsz); + +static void +opt_ambiguities(tOptions * opts, char const * name, int nm_len); + +static int +opt_match_ct(tOptions * opts, char const * name, int nm_len, + int * ixp, bool * disable); + +static tSuccess +opt_set(tOptions * opts, char * arg, int idx, bool disable, tOptState * st); + +static tSuccess +opt_unknown(tOptions * opts, char const * name, char * arg, tOptState * st); + +static tSuccess +opt_ambiguous(tOptions * opts, char const * name, int match_ct); + static tSuccess opt_find_long(tOptions * opts, char const * opt_name, tOptState * state); static tSuccess opt_find_short(tOptions * pOpts, uint_t optValue, tOptState * pOptState); +static tSuccess +get_opt_arg_must(tOptions * opts, tOptState * o_st); + +static tSuccess +get_opt_arg_may(tOptions * pOpts, tOptState * o_st); + +static tSuccess +get_opt_arg_none(tOptions * pOpts, tOptState * o_st); + static tSuccess get_opt_arg(tOptions * opts, tOptState * o_st); @@ -74,7 +202,7 @@ static tSuccess find_opt(tOptions * opts, tOptState * o_st); /* - * Extracted from init.c + * Static declarations from init.c */ static tSuccess validate_struct(tOptions * opts, char const * pname); @@ -82,40 +210,137 @@ validate_struct(tOptions * opts, char const * pname); static tSuccess immediate_opts(tOptions * opts); +static tSuccess +do_presets(tOptions * opts); + static bool ao_initialize(tOptions * opts, int a_ct, char ** a_v); /* - * Extracted from load.c + * Static declarations from load.c */ +static bool +get_realpath(char * buf, size_t b_sz); + +static bool +add_prog_path(char * buf, int b_sz, char const * fname, char const * prg_path); + +static bool +add_env_val(char * buf, int buf_sz, char const * name); + static void munge_str(char * txt, tOptionLoadMode mode); +static char * +assemble_arg_val(char * txt, tOptionLoadMode mode); + +static char * +trim_quotes(char * arg); + +static bool +direction_ok(opt_state_mask_t f, int dir); + static void load_opt_line(tOptions * opts, tOptState * opt_state, char * line, tDirection direction, tOptionLoadMode load_mode ); /* - * Extracted from makeshell.c + * Static declarations from makeshell.c */ -static noreturn void +noreturn static void option_exits(int exit_code); -static noreturn void +noreturn static void ao_bug(char const * msg); static void fserr_warn(char const * prog, char const * op, char const * fname); -static noreturn void +noreturn static void fserr_exit(char const * prog, char const * op, char const * fname); +static void +emit_var_text(char const * prog, char const * var, int fdin); + +static void +text_to_var(tOptions * opts, teTextTo which, tOptDesc * od); + +static void +emit_usage(tOptions * opts); + +static void +emit_wrapup(tOptions * opts); + +static void +emit_setup(tOptions * opts); + +static void +emit_action(tOptions * opts, tOptDesc * od); + +static void +emit_inaction(tOptions * opts, tOptDesc * od); + +static void +emit_flag(tOptions * opts); + +static void +emit_match_expr(char const * name, tOptDesc * cod, tOptions * opts); + +static void +emit_long(tOptions * opts); + +static char * +load_old_output(char const * fname, char const * pname); + +static void +open_out(char const * fname, char const * pname); + /* - * Extracted from nested.c + * Static declarations from nested.c */ +static void +remove_continuation(char * src); + +static char const * +scan_q_str(char const * pzTxt); + +static tOptionValue * +add_string(void ** pp, char const * name, size_t nm_len, + char const * val, size_t d_len); + +static tOptionValue * +add_bool(void ** pp, char const * name, size_t nm_len, + char const * val, size_t d_len); + +static tOptionValue * +add_number(void ** pp, char const * name, size_t nm_len, + char const * val, size_t d_len); + +static tOptionValue * +add_nested(void ** pp, char const * name, size_t nm_len, + char * val, size_t d_len); + +static char const * +scan_name(char const * name, tOptionValue * res); + +static char const * +unnamed_xml(char const * txt); + +static char const * +scan_xml_name(char const * name, size_t * nm_len, tOptionValue * val); + +static char const * +find_end_xml(char const * src, size_t nm_len, char const * val, size_t * len); + +static char const * +scan_xml(char const * xml_name, tOptionValue * res_val); + static void unload_arg_list(tArgList * arg_list); +static void +sort_list(tArgList * arg_list); + static tOptionValue * optionLoadNested(char const * text, char const * name, size_t nm_len); @@ -126,21 +351,270 @@ static void emit_special_char(FILE * fp, int ch); /* - * Extracted from sort.c + * Static declarations from parse-duration.c */ +static unsigned long +str_const_to_ul (cch_t * str, cch_t ** ppz, int base); + +static long +str_const_to_l (cch_t * str, cch_t ** ppz, int base); + +static time_t +scale_n_add (time_t base, time_t val, int scale); + +static time_t +parse_hr_min_sec (time_t start, cch_t * pz); + +static time_t +parse_scaled_value (time_t base, cch_t ** ppz, cch_t * endp, int scale); + +static time_t +parse_year_month_day (cch_t * pz, cch_t * ps); + +static time_t +parse_yearmonthday (cch_t * in_pz); + +static time_t +parse_YMWD (cch_t * pz); + +static time_t +parse_hour_minute_second (cch_t * pz, cch_t * ps); + +static time_t +parse_hourminutesecond (cch_t * in_pz); + +static time_t +parse_HMS (cch_t * pz); + +static time_t +parse_time (cch_t * pz); + +static char * +trim (char * pz); + +static time_t +parse_period (cch_t * in_pz); + +static time_t +parse_non_iso8601 (cch_t * pz); + +/* + * Static declarations from pgusage.c + */ +static inline FILE * +open_tmp_usage(char ** buf); + +static inline char * +mk_pager_cmd(char const * fname); + +/* + * Static declarations from putshell.c + */ +static size_t +string_size(char const * scan, size_t nl_len); + +static char const * +print_quoted_apostrophes(char const * str); + +static void +print_quot_str(char const * str); + +static void +print_enumeration(tOptions * pOpts, tOptDesc * pOD); + +static void +print_membership(tOptions * pOpts, tOptDesc * pOD); + +static void +print_stacked_arg(tOptions * pOpts, tOptDesc * pOD); + +static void +print_reordering(tOptions * opts); + +/* + * Static declarations from reset.c + */ +static void +optionReset(tOptions * pOpts, tOptDesc * pOD); + +static void +optionResetEverything(tOptions * pOpts); + +/* + * Static declarations from restore.c + */ +static void +fixupSavedOptionArgs(tOptions * pOpts); + +/* + * Static declarations from save.c + */ +static char const * +find_dir_name(tOptions * opts, int * p_free); + +static char const * +find_file_name(tOptions * opts, int * p_free_name); + +static void +prt_entry(FILE * fp, tOptDesc * od, char const * l_arg, save_flags_mask_t save_fl); + +static void +prt_value(FILE * fp, int depth, tOptDesc * od, tOptionValue const * ovp); + +static void +prt_string(FILE * fp, char const * name, char const * pz); + +static void +prt_val_list(FILE * fp, char const * name, tArgList * al); + +static void +prt_nested(FILE * fp, tOptDesc * od, save_flags_mask_t save_fl); + +static void +remove_settings(tOptions * opts, char const * fname); + +static FILE * +open_sv_file(tOptions * opts, save_flags_mask_t save_fl); + +static void +prt_no_arg_opt(FILE * fp, tOptDesc * vod, tOptDesc * pod, save_flags_mask_t save_fl); + +static void +prt_str_arg(FILE * fp, tOptDesc * od, save_flags_mask_t save_fl); + +static void +prt_enum_arg(FILE * fp, tOptDesc * od, save_flags_mask_t save_fl); + +static void +prt_set_arg(FILE * fp, tOptDesc * od, save_flags_mask_t save_fl); + +static void +prt_file_arg(FILE * fp, tOptDesc * od, tOptions * opts, save_flags_mask_t save_fl); + +/* + * Static declarations from sort.c + */ +static tSuccess +must_arg(tOptions * opts, char * arg_txt, tOptState * pOS, + char ** opt_txt, uint32_t * opt_idx); + +static tSuccess +maybe_arg(tOptions * opts, char * arg_txt, tOptState * pOS, + char ** opt_txt, uint32_t * opt_idx); + +static tSuccess +short_opt_ck(tOptions * opts, char * arg_txt, tOptState * pOS, + char ** opt_txt, uint32_t * opt_idx); + static void optionSort(tOptions * opts); /* - * Extracted from stack.c + * Static declarations from stack.c */ static void addArgListEntry(void ** ppAL, void * entry); /* - * Extracted from usage.c + * Static declarations from text_mmap.c */ +static void +load_text_file(tmap_info_t * mapinfo, char const * pzFile); + +static void +validate_mmap(char const * fname, int prot, int flags, tmap_info_t * mapinfo); + +static void +close_mmap_files(tmap_info_t * mi); + +/* + * Static declarations from tokenize.c + */ +static void +copy_cooked(ch_t ** ppDest, char const ** ppSrc); + +static void +copy_raw(ch_t ** ppDest, char const ** ppSrc); + +static token_list_t * +alloc_token_list(char const * str); + +/* + * Static declarations from usage.c + */ +static unsigned int +parse_usage_flags(ao_flag_names_t const * fnt, char const * txt); + static void set_usage_flags(tOptions * opts, char const * flg_txt); +static inline bool +do_gnu_usage(tOptions * pOpts); + +static inline bool +skip_misuse_usage(tOptions * pOpts); + +static void +print_offer_usage(tOptions * opts); + +static void +print_usage_details(tOptions * opts, int exit_code); + +static void +print_one_paragraph(char const * text, bool plain, FILE * fp); + +static void +prt_conflicts(tOptions * opts, tOptDesc * od); + +static void +prt_one_vendor(tOptions * opts, tOptDesc * od, + arg_types_t * argtp, char const * usefmt); + +static void +prt_vendor_opts(tOptions * opts, char const * title); + +static void +prt_extd_usage(tOptions * opts, tOptDesc * od, char const * title); + +static void +prt_ini_list(char const * const * papz, char const * ini_file, + char const * path_nm); + +static void +prt_preamble(tOptions * opts, tOptDesc * od, arg_types_t * at); + +static void +prt_one_usage(tOptions * opts, tOptDesc * od, arg_types_t * at); + +static void +prt_opt_usage(tOptions * opts, int ex_code, char const * title); + +static void +prt_prog_detail(tOptions * opts); + +static int +setGnuOptFmts(tOptions * opts, char const ** ptxt); + +static int +setStdOptFmts(tOptions * opts, char const ** ptxt); + +/* + * Static declarations from version.c + */ +static void +emit_first_line( + FILE * fp, char const * alt1, char const * alt2, char const * alt3); + +static void +emit_simple_ver(tOptions * o, FILE * fp); + +static void +emit_copy_full(tOptions * o, FILE * fp); + +static void +emit_copy_note(tOptions * opts, FILE * fp); + +static void +print_ver(tOptions * opts, tOptDesc * od, FILE * fp, bool call_exit); + #endif /* AUTOOPTS_PROTO_H_GUARD */ diff --git a/src/libopts/putshell.c b/src/libopts/putshell.c index f26dbe84a5..84463dd40b 100644 --- a/src/libopts/putshell.c +++ b/src/libopts/putshell.c @@ -12,7 +12,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -31,29 +31,6 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -/* = = = START-STATIC-FORWARD = = = */ -static size_t -string_size(char const * scan, size_t nl_len); - -static char const * -print_quoted_apostrophes(char const * str); - -static void -print_quot_str(char const * str); - -static void -print_enumeration(tOptions * pOpts, tOptDesc * pOD); - -static void -print_membership(tOptions * pOpts, tOptDesc * pOD); - -static void -print_stacked_arg(tOptions * pOpts, tOptDesc * pOD); - -static void -print_reordering(tOptions * opts); -/* = = = END-STATIC-FORWARD = = = */ - /** * Count the number of bytes required to represent a string as a * compilable string. @@ -183,7 +160,7 @@ optionQuoteString(char const * text, char const * nl) *(out++) = '"'; *(out++) = NUL; #ifndef NDEBUG - if ((out - res) > out_sz) { + if ((size_t)(out - res) > out_sz) { fputs(misguess_len, stderr); option_exits(EXIT_FAILURE); } diff --git a/src/libopts/reset.c b/src/libopts/reset.c index 6ca2c05229..f7b58e8d1a 100644 --- a/src/libopts/reset.c +++ b/src/libopts/reset.c @@ -10,7 +10,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control diff --git a/src/libopts/restore.c b/src/libopts/restore.c index 02ef14aeba..36ebbce1a7 100644 --- a/src/libopts/restore.c +++ b/src/libopts/restore.c @@ -12,7 +12,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control diff --git a/src/libopts/save-flags.c b/src/libopts/save-flags.c new file mode 100644 index 0000000000..d295170edb --- /dev/null +++ b/src/libopts/save-flags.c @@ -0,0 +1,248 @@ +/* -*- buffer-read-only: t -*- vi: set ro: + * + * DO NOT EDIT THIS FILE (save-flags.c) + * + * It has been AutoGen-ed + * From the definitions /tmp/.ag-ufBbQe/save-flags.def + * and the template file str2enum + * + * 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. + * 3. Neither the name ``Bruce Korb'' nor the name of any other + * contributor may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * str2enum IS PROVIDED BY Bruce Korb ``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 Bruce Korb OR ANY OTHER 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 "save-flags.h" +#include +#ifndef MISSING_INTTYPES_H +# include +#endif + +typedef enum { + SVFL_BNM_DEFAULT = 0, + SVFL_BNM_USAGE = 1, + SVFL_BNM_UPDATE = 2, + SVFL_COUNT_BNM +} save_flags_enum_t; + +static save_flags_enum_t +find_save_flags_bnm(char const * str, size_t len); + + +#include +#include +#ifndef NUL +#define NUL '\0' +#endif + +/* ANSI-C code produced by gperf version 3.1 */ +/* Command-line: gperf save-flags.gp */ +/* Computed positions: -k'' */ + + +# if 0 /* gperf build options: */ +// %struct-type +// %language=ANSI-C +// %includes +// %global-table +// %omit-struct-type +// %readonly-tables +// %compare-strncmp +// +// %define slot-name svfl_name +// %define hash-function-name save_flags_hash +// %define lookup-function-name find_save_flags_name +// %define word-array-name save_flags_table +// %define initializer-suffix ,SVFL_COUNT_BNM +// +# endif + +#include "save-flags.h" +typedef struct { + char const * svfl_name; + save_flags_enum_t svfl_id; +} save_flags_map_t; +#include + +/* maximum key range = 3, duplicates = 0 */ + +static unsigned int +save_flags_hash (register const char *str, register size_t len) +{ + (void)str; + (void)len; + return len; +} + +static const save_flags_map_t save_flags_table[] = + { + {"",SVFL_COUNT_BNM}, {"",SVFL_COUNT_BNM}, + {"",SVFL_COUNT_BNM}, {"",SVFL_COUNT_BNM}, + {"",SVFL_COUNT_BNM}, + {"usage", SVFL_BNM_USAGE}, + {"update", SVFL_BNM_UPDATE}, + {"default", SVFL_BNM_DEFAULT} + }; + +static inline const save_flags_map_t * +find_save_flags_name (register const char *str, register size_t len) +{ + if (len <= 7 && len >= 5) + { + register unsigned int key = (int)save_flags_hash (str, len); + + if (key <= 7) + { + register const char *s = save_flags_table[key].svfl_name; + + if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0') + return &save_flags_table[key]; + } + } + return 0; +} + +/** + * Convert a command (keyword) to a save_flags_enum_t enumeration value. + * + * @param[in] str a string that should start with a known key word. + * @param[in] len the provided length of the keyword at \a str. + * @returns the enumeration value. + * If not found, that value is SVFL_COUNT_BNM. + */ +static save_flags_enum_t +find_save_flags_bnm(char const * str, size_t len) +{ + save_flags_map_t const * map; + + map = find_save_flags_name(str, (unsigned int)len); + if (map != NULL) + return map->svfl_id; + /* Check for a partial match */ + { + /* + * Indexes of valid save_flags_table entries in sorted order: + */ + static unsigned int const ix_map[] = { + 7, 6, 5 }; + save_flags_enum_t res = SVFL_COUNT_BNM; + static int const HI = (sizeof(ix_map) / sizeof(ix_map[0])) - 1; + int lo = 0; + int hi = HI; + int av; + int cmp; + + for (;;) { + av = (hi + lo) / 2; + map = save_flags_table + ix_map[av]; + cmp = strncmp(map->svfl_name, str, len); + if (cmp == 0) break; + if (cmp > 0) + hi = av - 1; + else lo = av + 1; + if (lo > hi) + return SVFL_COUNT_BNM; + } + res = map->svfl_id; + /* + * If we have an exact match, accept it. + */ + if (map->svfl_name[len] == NUL) + return res; + /* + * Check for a duplicate partial match (a partial match + * with a higher or lower index than "av". + */ + if (av < HI) { + map = save_flags_table + ix_map[av + 1]; + if (strncmp(map->svfl_name, str, len) == 0) + return SVFL_COUNT_BNM; + } + if (av > 0) { + map = save_flags_table + ix_map[av - 1]; + if (strncmp(map->svfl_name, str, len) == 0) + return SVFL_COUNT_BNM; + } + return res; + } +} + +/** + * Convert a string to a save_flags_mask_t mask. + * Bit names prefixed with a hyphen have the bit removed from the mask. + * If the string starts with a '-', '+' or '|' character, then + * the old value is used as a base, otherwise the result mask + * is initialized to zero. Separating bit names with '+' or '|' + * characters is optional. By default, the bits are "or"-ed into the + * result. + * + * @param[in] str string with a list of bit names + * @param[in] old previous value, used if \a str starts with a '+' or '-'. + * + * @returns an unsigned integer with the bits set. + */ +save_flags_mask_t +save_flags_str2mask(char const * str, save_flags_mask_t old) +{ + static char const white[] = ", \t\f"; + static char const name_chars[] = + "adefglpstu" + "ADEFGLPSTU"; + + save_flags_mask_t res = 0; + int have_data = 0; + + for (;;) { + save_flags_enum_t val; + unsigned int val_len; + unsigned int invert = 0; + + str += strspn(str, white); + switch (*str) { + case NUL: return res; + case '-': case '~': + invert = 1; + /* FALLTHROUGH */ + + case '+': case '|': + if (have_data == 0) + res = old; + + str += 1 + strspn(str + 1, white); + if (*str == NUL) + return 0; + } + + val_len = strspn(str, name_chars); + if (val_len == 0) + return 0; + val = find_save_flags_bnm(str, val_len); + if (val == SVFL_COUNT_BNM) + return 0; + if (invert) + res &= ~((save_flags_mask_t)1 << val); + else + res |= (save_flags_mask_t)1 << val; + have_data = 1; + str += val_len; + } +} +/* end of save-flags.c */ diff --git a/src/libopts/save-flags.h b/src/libopts/save-flags.h new file mode 100644 index 0000000000..dcfe0c9ae5 --- /dev/null +++ b/src/libopts/save-flags.h @@ -0,0 +1,68 @@ +/* -*- buffer-read-only: t -*- vi: set ro: + * + * DO NOT EDIT THIS FILE (save-flags.h) + * + * It has been AutoGen-ed + * From the definitions /tmp/.ag-ufBbQe/save-flags.def + * and the template file str2enum + * + * 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. + * 3. Neither the name ``Bruce Korb'' nor the name of any other + * contributor may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * str2enum IS PROVIDED BY Bruce Korb ``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 Bruce Korb OR ANY OTHER 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. + * + * Command/Keyword Dispatcher + */ +#ifndef STR2ENUM_SAVE_FLAGS_H_GUARD +#define STR2ENUM_SAVE_FLAGS_H_GUARD 1 +#include +#include + +/** integral type for holding save_flags masks */ +typedef uint32_t save_flags_mask_t; + +/** bits defined for save_flags_mask_t */ +/** include default values in commentary */ +#define SVFL_DEFAULT 0x0001U +/** include usage text in commentary */ +#define SVFL_USAGE 0x0002U +/** replace or append state */ +#define SVFL_UPDATE 0x0004U + +/** bits in USAGE_DEFAULT mask: + * usage default */ +#define SVFL_USAGE_DEFAULT_MASK 0x0003U + +/** all bits in save_flags_mask_t masks */ +#define SVFL_MASK_ALL 0x0007U + +/** no bits in save_flags_mask_t */ +#define SVFL_NONE 0x0000U + +/** buffer size needed to hold all bit names for save_flags_mask_t masks */ +#define MAX_SAVE_FLAGS_NAME_SIZE 21 + +extern save_flags_mask_t +save_flags_str2mask(char const * str, save_flags_mask_t old); + +#endif /* STR2ENUM_SAVE_FLAGS_H_GUARD */ +/* end of save-flags.h */ diff --git a/src/libopts/save.c b/src/libopts/save.c index 2f532b8388..8b1fba9d62 100644 --- a/src/libopts/save.c +++ b/src/libopts/save.c @@ -12,7 +12,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -30,49 +30,13 @@ * 4379e7444a0e2ce2b12dd6f5a52a27a4d02d39d247901d3285c88cf0d37f477b COPYING.lgplv3 * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ - -/* = = = START-STATIC-FORWARD = = = */ -static char const * -find_dir_name(tOptions * opts, int * p_free); - -static char const * -find_file_name(tOptions * opts, int * p_free_name); - -static void -prt_entry(FILE * fp, tOptDesc * od, char const * l_arg); - -static void -prt_value(FILE * fp, int depth, tOptDesc * pOD, tOptionValue const * ovp); - -static void -prt_string(FILE * fp, char const * name, char const * pz); - -static void -prt_val_list(FILE * fp, char const * name, tArgList * al); - -static void -prt_nested(FILE * fp, tOptDesc * p); - -static FILE * -open_sv_file(tOptions * opts); - -static void -prt_no_arg_opt(FILE * fp, tOptDesc * p, tOptDesc * pOD); - -static void -prt_str_arg(FILE * fp, tOptDesc * pOD); - -static void -prt_enum_arg(FILE * fp, tOptDesc * od); - -static void -prt_set_arg(FILE * fp, tOptDesc * od); - -static void -prt_file_arg(FILE * fp, tOptDesc * od, tOptions * opts); -/* = = = END-STATIC-FORWARD = = = */ +#include "save-flags.h" /** + * find the config file directory name + * + * @param opts the options descriptor + * @param p_free tell caller if name was allocated or not */ static char const * find_dir_name(tOptions * opts, int * p_free) @@ -84,79 +48,51 @@ find_dir_name(tOptions * opts, int * p_free) return NULL; dir = opts->pOptDesc[ opts->specOptIdx.save_opts ].optArg.argString; - if ((dir != NULL) && (*dir != NUL)) - return dir; + if ((dir != NULL) && (*dir != NUL)) { + char const * pz = strchr(dir, '>'); + if (pz == NULL) + return dir; + while (*(++pz) == '>') ; + pz += strspn(pz, " \t"); + dir = pz; + if (*dir != NUL) + return dir; + } + + if (opts->papzHomeList == NULL) + return NULL; /* * This function only works if there is a directory where * we can stash the RC (INI) file. */ - { - char const * const * papz = opts->papzHomeList; - if (papz == NULL) - return NULL; - - while (papz[1] != NULL) papz++; - dir = *papz; - } - - /* - * IF it does not require deciphering an env value, then just copy it - */ - if (*dir != '$') - return dir; - - { - char const * end = strchr(++dir, DIRCH); - char * env; + for (int idx = 0;; idx++) { + char f_name[ AG_PATH_MAX+1 ]; - if (end != NULL) { - char z[ AO_NAME_SIZE ]; - if ((end - dir) > AO_NAME_LIMIT ) - return NULL; - memcpy(z, dir, (size_t)(end - dir)); - z[end - dir] = NUL; - env = getenv(z); - } else { - - /* - * Make sure we can get the env value (after stripping off - * any trailing directory or file names) - */ - env = getenv(dir); - } + dir = opts->papzHomeList[idx]; - if (env == NULL) { - fprintf(stderr, zsave_warn, opts->pzProgName); - fprintf(stderr, zNotDef, dir); - return NULL; + switch (*dir) { + case '$': + break; + case NUL: + continue; + default: + return dir; } - - if (end == NULL) - return env; - - /* - * we will be returning an allocated result - */ - *p_free = 1; - - { - size_t env_len = strlen(env); - size_t end_len = strlen(end); - char * p; - char * res = p = (char *)AGALOC(env_len + end_len + 2, "dir name"); - - memcpy(p, env, env_len); - p += env_len; - *(p++) = '/'; - memcpy(p, end, end_len + 1); - - return res; + if (optionMakePath(f_name, (int)sizeof(f_name), dir, opts->pzProgPath)) { + *p_free = true; + AGDUPSTR(dir, f_name, "homerc"); + return dir; } } + return NULL; } /** + * Find the name of the save-the-options file + * + * @param opts the options descriptor + * @param p_free_name tell caller if name was allocated or not */ static char const * find_file_name(tOptions * opts, int * p_free_name) @@ -164,15 +100,15 @@ find_file_name(tOptions * opts, int * p_free_name) struct stat stBuf; int free_dir_name = 0; - char const * pzDir = find_dir_name(opts, &free_dir_name); - if (pzDir == NULL) - return NULL; + char const * res = find_dir_name(opts, &free_dir_name); + if (res == NULL) + return res; /* * See if we can find the specified directory. We use a once-only loop * structure so we can bail out early. */ - if (stat(pzDir, &stBuf) != 0) do { + if (stat(res, &stBuf) != 0) do { char z[AG_PATH_MAX]; char * dirchp; @@ -182,10 +118,10 @@ find_file_name(tOptions * opts, int * p_free_name) */ if (errno != ENOENT) { bogus_name: - fprintf(stderr, zsave_warn, opts->pzProgName); - fprintf(stderr, zNoStat, errno, strerror(errno), pzDir); + fprintf(stderr, zsave_warn, opts->pzProgName, res); + fprintf(stderr, zNoStat, errno, strerror(errno), res); if (free_dir_name) - AGFREE(pzDir); + AGFREE(res); return NULL; } @@ -193,17 +129,17 @@ find_file_name(tOptions * opts, int * p_free_name) * Strip off the last component, stat the remaining string and * that string must name a directory */ - dirchp = strrchr(pzDir, DIRCH); + dirchp = strrchr(res, DIRCH); if (dirchp == NULL) { stBuf.st_mode = S_IFREG; break; /* found directory -- viz., "." */ } - if ((size_t)(dirchp - pzDir) >= sizeof(z)) + if ((size_t)(dirchp - res) >= sizeof(z)) goto bogus_name; - memcpy(z, pzDir, (size_t)(dirchp - pzDir)); - z[dirchp - pzDir] = NUL; + memcpy(z, res, (size_t)(dirchp - res)); + z[dirchp - res] = NUL; if ((stat(z, &stBuf) != 0) || ! S_ISDIR(stBuf.st_mode)) goto bogus_name; @@ -215,16 +151,17 @@ find_file_name(tOptions * opts, int * p_free_name) * THEN tack on the config file name */ if (S_ISDIR(stBuf.st_mode)) { - size_t sz = strlen(pzDir) + strlen(opts->pzRcName) + 2; { + size_t sz = strlen(res) + strlen(opts->pzRcName) + 2; char * pzPath = (char *)AGALOC(sz, "file name"); - if (snprintf(pzPath, sz, "%s/%s", pzDir, opts->pzRcName) >= sz) + if ( snprintf(pzPath, sz, "%s/%s", res, opts->pzRcName) + >= (int)sz) option_exits(EXIT_FAILURE); if (free_dir_name) - AGFREE(pzDir); - pzDir = pzPath; + AGFREE(res); + res = pzPath; free_dir_name = 1; } @@ -232,12 +169,12 @@ find_file_name(tOptions * opts, int * p_free_name) * IF we cannot stat the object for any reason other than * it does not exist, then we bail out */ - if (stat(pzDir, &stBuf) != 0) { + if (stat(res, &stBuf) != 0) { if (errno != ENOENT) { - fprintf(stderr, zsave_warn, opts->pzProgName); + fprintf(stderr, zsave_warn, opts->pzProgName, res); fprintf(stderr, zNoStat, errno, strerror(errno), - pzDir); - AGFREE(pzDir); + res); + AGFREE(res); return NULL; } @@ -253,32 +190,37 @@ find_file_name(tOptions * opts, int * p_free_name) * or will soon be a file. */ if (! S_ISREG(stBuf.st_mode)) { - fprintf(stderr, zsave_warn, opts->pzProgName, pzDir); + fprintf(stderr, zsave_warn, opts->pzProgName, res); if (free_dir_name) - AGFREE(pzDir); + AGFREE(res); return NULL; } /* * Get rid of the old file */ - unlink(pzDir); *p_free_name = free_dir_name; - return pzDir; + return res; } /** * print one option entry to the save file. * - * @param[in] fp the file pointer for the save file - * @param[in] od the option descriptor to print - * @param[in] l_arg the last argument for the option + * @param[in] fp the file pointer for the save file + * @param[in] od the option descriptor to print + * @param[in] l_arg the last argument for the option + * @param[in] save_fl include usage in comments */ static void -prt_entry(FILE * fp, tOptDesc * od, char const * l_arg) +prt_entry(FILE * fp, tOptDesc * od, char const * l_arg, save_flags_mask_t save_fl) { int space_ct; + if (save_fl & SVFL_USAGE) + fprintf(fp, ao_name_use_fmt, od->pz_Name, od->pzText); + if (UNUSED_OPT(od) && (save_fl & SVFL_DEFAULT)) + fputs(ao_default_use, fp); + /* * There is an argument. Pad the name so values line up. * Not disabled *OR* this got equivalenced to another opt, @@ -287,9 +229,14 @@ prt_entry(FILE * fp, tOptDesc * od, char const * l_arg) */ { char const * pz = - (! DISABLED_OPT(od) || (od->optEquivIndex != NO_EQUIVALENT)) + (od->pz_DisableName == NULL) ? od->pz_Name - : od->pz_DisableName; + : (DISABLED_OPT(od) + ? od->pz_DisableName + : ((od->optEquivIndex == NO_EQUIVALENT) + ? od->pz_Name : od->pz_DisableName) + ); + space_ct = 17 - strlen(pz); fputs(pz, fp); } @@ -338,9 +285,13 @@ prt_entry(FILE * fp, tOptDesc * od, char const * l_arg) } /** + * print an option's value + * + * @param[in] fp the file pointer for the save file + * @param[in] od the option descriptor to print */ static void -prt_value(FILE * fp, int depth, tOptDesc * pOD, tOptionValue const * ovp) +prt_value(FILE * fp, int depth, tOptDesc * od, tOptionValue const * ovp) { while (--depth >= 0) putc(' ', fp), putc(' ', fp); @@ -357,9 +308,9 @@ prt_value(FILE * fp, int depth, tOptDesc * pOD, tOptionValue const * ovp) case OPARG_TYPE_ENUMERATION: case OPARG_TYPE_MEMBERSHIP: - if (pOD != NULL) { - uint32_t opt_state = pOD->fOptState; - uintptr_t val = pOD->optArg.argEnum; + if (od != NULL) { + uint32_t opt_state = od->fOptState; + uintptr_t val = od->optArg.argEnum; char const * typ = (ovp->valType == OPARG_TYPE_ENUMERATION) ? "keyword" : "set-membership"; @@ -369,20 +320,20 @@ prt_value(FILE * fp, int depth, tOptDesc * pOD, tOptionValue const * ovp) * This is a magic incantation that will convert the * bit flag values back into a string suitable for printing. */ - (*(pOD->pOptProc))(OPTPROC_RETURN_VALNAME, pOD ); - if (pOD->optArg.argString != NULL) { - fputs(pOD->optArg.argString, fp); + (*(od->pOptProc))(OPTPROC_RETURN_VALNAME, od ); + if (od->optArg.argString != NULL) { + fputs(od->optArg.argString, fp); if (ovp->valType != OPARG_TYPE_ENUMERATION) { /* * set membership strings get allocated */ - AGFREE(pOD->optArg.argString); + AGFREE(od->optArg.argString); } } - pOD->optArg.argEnum = val; - pOD->fOptState = opt_state; + od->optArg.argEnum = val; + od->fOptState = opt_state; fprintf(fp, END_XML_FMT, ovp->pzName); break; } @@ -404,6 +355,9 @@ prt_value(FILE * fp, int depth, tOptDesc * pOD, tOptionValue const * ovp) } /** + * Print a string value in XML format + * + * @param[in] fp the file pointer for the save file */ static void prt_string(FILE * fp, char const * name, char const * pz) @@ -440,6 +394,9 @@ prt_string(FILE * fp, char const * name, char const * pz) } /** + * Print an option that can have multiple values in XML format + * + * @param[in] fp file pointer */ static void prt_val_list(FILE * fp, char const * name, tArgList * al) @@ -476,15 +433,26 @@ prt_val_list(FILE * fp, char const * name, tArgList * al) } /** + * printed a nested/hierarchical value + * + * @param[in] fp file pointer + * @param[in] od option descriptor + * @param[in] save_fl include usage in comments */ static void -prt_nested(FILE * fp, tOptDesc * p) +prt_nested(FILE * fp, tOptDesc * od, save_flags_mask_t save_fl) { int opt_ct; - tArgList * al = p->optCookie; + tArgList * al = od->optCookie; void ** opt_list; - if (al == NULL) + if (save_fl & SVFL_USAGE) + fprintf(fp, ao_name_use_fmt, od->pz_Name, od->pzText); + + /* + * Never show a default value if a hierarchical value is empty. + */ + if (UNUSED_OPT(od) || (al == NULL)) return; opt_ct = al->useCt; @@ -500,48 +468,128 @@ prt_nested(FILE * fp, tOptDesc * p) if (ovp == NULL) continue; - fprintf(fp, NESTED_OPT_FMT, p->pz_Name); + fprintf(fp, NESTED_OPT_FMT, od->pz_Name); do { - prt_value(fp, 1, p, ovp); + prt_value(fp, 1, od, ovp); } while (ovp = optionNextValue(base, ovp), ovp != NULL); - fprintf(fp, "\n", p->pz_Name); + fprintf(fp, "\n", od->pz_Name); } while (--opt_ct > 0); } /** - * open the file for saving option state. + * remove the current program settings * * @param[in] opts the program options structure + * @param[in] fname the save file name + */ +static void +remove_settings(tOptions * opts, char const * fname) +{ + size_t const name_len = strlen(opts->pzProgName); + tmap_info_t map_info; + char * text = text_mmap(fname, PROT_READ|PROT_WRITE, MAP_PRIVATE, &map_info); + char * scan = text; + + for (;;) { + char * next = scan = strstr(scan, zCfgProg); + if (scan == NULL) + goto leave; + + scan = SPN_WHITESPACE_CHARS(scan + zCfgProg_LEN); + if ( (strneqvcmp(scan, opts->pzProgName, (int)name_len) == 0) + && (IS_END_XML_TOKEN_CHAR(scan[name_len])) ) { + + scan = next; + break; + } + } + + /* + * If not NULL, "scan" points to the "pzProgName); - fprintf(stderr, zNoCreat, errno, strerror(errno), pzFName); + fprintf(stderr, zsave_warn, opts->pzProgName, fname); + fprintf(stderr, zNoCreat, errno, strerror(errno), fname); if (free_name) - AGFREE(pzFName); + AGFREE(fname); return fp; } if (free_name) - AGFREE(pzFName); + AGFREE(fname); } + do { + struct stat sbuf; + if (fstat(fileno(fp), &sbuf) < 0) + break; + + if (sbuf.st_size > zPresetFile_LEN) { + /* non-zero size implies save_fl is non-zero */ + fprintf(fp, zFmtProg, opts->pzProgName); + return fp; + } + } while (false); + + /* + * We have a new file. Insert a header + */ fputs("# ", fp); { char const * e = strchr(opts->pzUsageTitle, NL); @@ -563,40 +611,63 @@ open_sv_file(tOptions * opts) AGFREE(time_str); #endif } - + if (save_fl != 0) + fprintf(fp, zFmtProg, opts->pzProgName); return fp; } /** + * print option without an arg + * + * @param[in] fp file pointer + * @param[in] vod value option descriptor + * @param[in] pod primary option descriptor + * @param[in] save_fl include usage in comments */ static void -prt_no_arg_opt(FILE * fp, tOptDesc * p, tOptDesc * pOD) +prt_no_arg_opt(FILE * fp, tOptDesc * vod, tOptDesc * pod, save_flags_mask_t save_fl) { /* * The aliased to argument indicates whether or not the option * is "disabled". However, the original option has the name - * string, so we get that there, not with "p". + * string, so we get that there, not with "vod". */ char const * pznm = - (DISABLED_OPT(p)) ? pOD->pz_DisableName : pOD->pz_Name; + (DISABLED_OPT(vod)) ? pod->pz_DisableName : pod->pz_Name; /* * If the option was disabled and the disablement name is NULL, * then the disablement was caused by aliasing. * Use the name as the string to emit. */ if (pznm == NULL) - pznm = pOD->pz_Name; + pznm = pod->pz_Name; + + if (save_fl & SVFL_USAGE) + fprintf(fp, ao_name_use_fmt, pod->pz_Name, pod->pzText); + if (UNUSED_OPT(pod) && (save_fl & SVFL_DEFAULT)) + fputs(ao_default_use, fp); fprintf(fp, "%s\n", pznm); } /** + * print the string valued argument(s). + * + * @param[in] fp file pointer + * @param[in] od value option descriptor + * @param[in] save_fl include usage in comments */ static void -prt_str_arg(FILE * fp, tOptDesc * pOD) +prt_str_arg(FILE * fp, tOptDesc * od, save_flags_mask_t save_fl) { - if (pOD->fOptState & OPTST_STACKED) { - tArgList * pAL = (tArgList *)pOD->optCookie; + if (UNUSED_OPT(od) || ((od->fOptState & OPTST_STACKED) == 0)) { + char const * arg = od->optArg.argString; + if (arg == NULL) + arg = "''"; + prt_entry(fp, od, arg, save_fl); + + } else { + tArgList * pAL = (tArgList *)od->optCookie; int uct = pAL->useCt; char const ** ppz = pAL->apzArgs; @@ -604,23 +675,24 @@ prt_str_arg(FILE * fp, tOptDesc * pOD) * un-disable multiple copies of disabled options. */ if (uct > 1) - pOD->fOptState &= ~OPTST_DISABLED; + od->fOptState &= ~OPTST_DISABLED; - while (uct-- > 0) - prt_entry(fp, pOD, *(ppz++)); - } else { - prt_entry(fp, pOD, pOD->optArg.argString); + while (uct-- > 0) { + prt_entry(fp, od, *(ppz++), save_fl); + save_fl &= ~SVFL_USAGE; + } } } /** * print the string value of an enumeration. * - * @param[in] fp the file pointer to write to - * @param[in] od the option descriptor with the enumerated value + * @param[in] fp the file pointer to write to + * @param[in] od the option descriptor with the enumerated value + * @param[in] save_fl include usage in comments */ static void -prt_enum_arg(FILE * fp, tOptDesc * od) +prt_enum_arg(FILE * fp, tOptDesc * od, save_flags_mask_t save_fl) { uintptr_t val = od->optArg.argEnum; @@ -629,29 +701,31 @@ prt_enum_arg(FILE * fp, tOptDesc * od) * bit flag values back into a string suitable for printing. */ (*(od->pOptProc))(OPTPROC_RETURN_VALNAME, od); - prt_entry(fp, od, VOIDP(od->optArg.argString)); + prt_entry(fp, od, VOIDP(od->optArg.argString), save_fl); od->optArg.argEnum = val; } /** * Print the bits set in a bit mask option. + * * We call the option handling function with a magic value for * the options pointer and it allocates and fills in the string. * We print that with a call to prt_entry(). * - * @param[in] fp the file pointer to write to - * @param[in] od the option descriptor with a bit mask value type + * @param[in] fp the file pointer to write to + * @param[in] od the option descriptor with a bit mask value type + * @param[in] save_fl include usage in comments */ static void -prt_set_arg(FILE * fp, tOptDesc * od) +prt_set_arg(FILE * fp, tOptDesc * od, save_flags_mask_t save_fl) { char * list = optionMemberList(od); size_t len = strlen(list); char * buf = (char *)AGALOC(len + 3, "dir name"); *buf= '='; memcpy(buf+1, list, len + 1); - prt_entry(fp, od, buf); + prt_entry(fp, od, buf, save_fl); AGFREE(buf); AGFREE(list); } @@ -660,29 +734,35 @@ prt_set_arg(FILE * fp, tOptDesc * od) * figure out what the option file name argument is. * If one can be found, call prt_entry() to emit it. * - * @param[in] fp the file pointer to write to. - * @param[in] od the option descriptor with a bit mask value type - * @param[in] opts the program options descriptor + * @param[in] fp the file pointer to write to. + * @param[in] od the option descriptor with a bit mask value type + * @param[in] opts the program options descriptor + * @param[in] save_fl include usage in comments */ static void -prt_file_arg(FILE * fp, tOptDesc * od, tOptions * opts) +prt_file_arg(FILE * fp, tOptDesc * od, tOptions * opts, save_flags_mask_t save_fl) { /* * If the cookie is not NULL, then it has the file name, period. * Otherwise, if we have a non-NULL string argument, then.... */ if (od->optCookie != NULL) - prt_entry(fp, od, od->optCookie); + prt_entry(fp, od, od->optCookie, save_fl); else if (HAS_originalOptArgArray(opts)) { char const * orig = opts->originalOptArgArray[od->optIndex].argString; - if (od->optArg.argString == orig) + if (od->optArg.argString == orig) { + if (save_fl) + fprintf(fp, ao_name_use_fmt, od->pz_Name, od->pzText); return; + } - prt_entry(fp, od, od->optArg.argString); - } + prt_entry(fp, od, od->optArg.argString, save_fl); + + } else if (save_fl) + fprintf(fp, ao_name_use_fmt, od->pz_Name, od->pzText); } /*=export_func optionSaveFile @@ -719,8 +799,32 @@ optionSaveFile(tOptions * opts) { tOptDesc * od; int ct; - FILE * fp = open_sv_file(opts); + FILE * fp; + save_flags_mask_t save_flags = SVFL_NONE; + + do { + char * temp_str; + char const * dir = opts->pOptDesc[ opts->specOptIdx.save_opts ].optArg.argString; + size_t flen; + if (dir == NULL) + break; + temp_str = strchr(dir, '>'); + if (temp_str == NULL) + break; + if (temp_str[1] == '>') + save_flags = SVFL_UPDATE; + flen = (temp_str - dir); + if (flen == 0) + break; + temp_str = AGALOC(flen + 1, "flag search str"); + memcpy(temp_str, dir, flen); + temp_str[flen] = NUL; + save_flags |= save_flags_str2mask(temp_str, SVFL_NONE); + AGFREE(temp_str); + } while (false); + + fp = open_sv_file(opts, save_flags & SVFL_UPDATE); if (fp == NULL) return; @@ -730,20 +834,20 @@ optionSaveFile(tOptions * opts) ct = opts->presetOptCt; od = opts->pOptDesc; do { - tOptDesc * p; + tOptDesc * vod; /* - * IF the option has not been defined - * OR it does not take an initialization value - * OR it is equivalenced to another option - * THEN continue (ignore it) - * * Equivalenced options get picked up when the equivalenced-to - * option is processed. + * option is processed. And do not save options with any state + * bits in the DO_NOT_SAVE collection + * + * ** option cannot be preset + * #define OPTST_NO_INIT 0x0000100U + * ** disable from cmd line + * #define OPTST_NO_COMMAND 0x2000000U + * ** alias for other option + * #define OPTST_ALIAS 0x8000000U */ - if (UNUSED_OPT(od)) - continue; - if ((od->fOptState & OPTST_DO_NOT_SAVE_MASK) != 0) continue; @@ -751,45 +855,48 @@ optionSaveFile(tOptions * opts) && (od->optEquivIndex != od->optIndex)) continue; + if (UNUSED_OPT(od) && ((save_flags & SVFL_USAGE_DEFAULT_MASK) == SVFL_NONE)) + continue; + /* * The option argument data are found at the equivalenced-to option, * but the actual option argument type comes from the original * option descriptor. Be careful! */ - p = ((od->fOptState & OPTST_EQUIVALENCE) != 0) - ? (opts->pOptDesc + od->optActualIndex) : od; + vod = ((od->fOptState & OPTST_EQUIVALENCE) != 0) + ? (opts->pOptDesc + od->optActualIndex) : od; switch (OPTST_GET_ARGTYPE(od->fOptState)) { case OPARG_TYPE_NONE: - prt_no_arg_opt(fp, p, od); + prt_no_arg_opt(fp, vod, od, save_flags); break; case OPARG_TYPE_NUMERIC: - prt_entry(fp, p, VOIDP(p->optArg.argInt)); + prt_entry(fp, vod, VOIDP(vod->optArg.argInt), save_flags); break; case OPARG_TYPE_STRING: - prt_str_arg(fp, p); + prt_str_arg(fp, vod, save_flags); break; case OPARG_TYPE_ENUMERATION: - prt_enum_arg(fp, p); + prt_enum_arg(fp, vod, save_flags); break; case OPARG_TYPE_MEMBERSHIP: - prt_set_arg(fp, p); + prt_set_arg(fp, vod, save_flags); break; case OPARG_TYPE_BOOLEAN: - prt_entry(fp, p, p->optArg.argBool ? "true" : "false"); + prt_entry(fp, vod, vod->optArg.argBool ? "true" : "false", save_flags); break; case OPARG_TYPE_HIERARCHY: - prt_nested(fp, p); + prt_nested(fp, vod, save_flags); break; case OPARG_TYPE_FILE: - prt_file_arg(fp, p, opts); + prt_file_arg(fp, vod, opts, save_flags); break; default: diff --git a/src/libopts/sort.c b/src/libopts/sort.c index da0033431a..b4bd5cb7e2 100644 --- a/src/libopts/sort.c +++ b/src/libopts/sort.c @@ -10,7 +10,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -29,20 +29,6 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -/* = = = START-STATIC-FORWARD = = = */ -static tSuccess -must_arg(tOptions * opts, char * arg_txt, tOptState * pOS, - char ** opt_txt, uint32_t * opt_idx); - -static tSuccess -maybe_arg(tOptions * opts, char * arg_txt, tOptState * pOS, - char ** opt_txt, uint32_t * opt_idx); - -static tSuccess -short_opt_ck(tOptions * opts, char * arg_txt, tOptState * pOS, - char ** opt_txt, uint32_t * opt_idx); -/* = = = END-STATIC-FORWARD = = = */ - /* * "must_arg" and "maybe_arg" are really similar. The biggest * difference is that "may" will consume the next argument only if it @@ -178,7 +164,7 @@ short_opt_ck(tOptions * opts, char * arg_txt, tOptState * pOS, * If the program wants sorted options (separated operands and options), * then this routine will to the trick. */ -LOCAL void +static void optionSort(tOptions * opts) { char ** opt_txt; diff --git a/src/libopts/stack.c b/src/libopts/stack.c index affe6b661f..39a328a85b 100644 --- a/src/libopts/stack.c +++ b/src/libopts/stack.c @@ -11,7 +11,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -176,7 +176,7 @@ optionUnstackArg(tOptions * opts, tOptDesc * od) * a pointer to the argument list structure. It gets passed around * as an opaque address. */ -LOCAL void +static void addArgListEntry(void ** ppAL, void * entry) { tArgList * pAL = *(void **)ppAL; diff --git a/src/libopts/stdnoreturn.in.h b/src/libopts/stdnoreturn.in.h index 5b4d11bb3b..bf46c0883e 100644 --- a/src/libopts/stdnoreturn.in.h +++ b/src/libopts/stdnoreturn.in.h @@ -1,6 +1,6 @@ /* A substitute for ISO C11 . - Copyright 2012-2015 Free Software Foundation, Inc. + Copyright 2012-2018 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -13,7 +13,7 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License - along with this program; if not, see . */ + along with this program; if not, see . */ /* Written by Paul Eggert. */ @@ -28,15 +28,25 @@ /* The definition of _Noreturn is copied here. */ -#if 1200 <= _MSC_VER -/* Standard include files on this platform contain declarations like - "__declspec (noreturn) void abort (void);". "#define noreturn - _Noreturn" would cause this declaration to be rewritten to the - invalid "__declspec (__declspec (noreturn)) void abort (void);". - Instead, define noreturn to empty, so that such declarations are - rewritten to "__declspec () void abort (void);", which is - equivalent to "void abort (void);"; this gives up on noreturn's - advice to the compiler but at least it is valid code. */ +#if 1200 <= _MSC_VER || defined __CYGWIN__ +/* On MSVC, standard include files contain declarations like + __declspec (noreturn) void abort (void); + "#define noreturn _Noreturn" would cause this declaration to be rewritten + to the invalid + __declspec (__declspec (noreturn)) void abort (void); + + Similarly, on Cygwin, standard include files contain declarations like + void __cdecl abort (void) __attribute__ ((noreturn)); + "#define noreturn _Noreturn" would cause this declaration to be rewritten + to the invalid + void __cdecl abort (void) __attribute__ ((__attribute__ ((__noreturn__)))); + + Instead, define noreturn to empty, so that such declarations are rewritten to + __declspec () void abort (void); + or + void __cdecl abort (void) __attribute__ (()); + respectively. This gives up on noreturn's advice to the compiler but at + least it is valid code. */ # define noreturn /*empty*/ #else # define noreturn _Noreturn diff --git a/src/libopts/streqvcmp.c b/src/libopts/streqvcmp.c index e87a232d19..53477d65f9 100644 --- a/src/libopts/streqvcmp.c +++ b/src/libopts/streqvcmp.c @@ -15,7 +15,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -37,7 +37,7 @@ * together for a case independent comparison. The mappings are * based upon ascii character sequences. */ -static unsigned char charmap[] = { + static unsigned char charmap[] = { NUL, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, '\a', '\b', '\t', NL, '\v', '\f', '\r', 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, diff --git a/src/libopts/text_mmap.c b/src/libopts/text_mmap.c index d5e074fa97..11093082e3 100644 --- a/src/libopts/text_mmap.c +++ b/src/libopts/text_mmap.c @@ -9,7 +9,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -185,10 +185,12 @@ validate_mmap(char const * fname, int prot, int flags, tmap_info_t * mapinfo) * then our updates will show in the file, so we must open with * write access. */ - int o_flag = FILE_WRITABLE(prot, flags) ? O_RDWR : O_RDONLY; + int o_flag = #ifdef _WIN32 - o_flag |= O_BINARY; + O_BINARY | #endif + FILE_WRITABLE(prot, flags) ? O_RDWR : O_RDONLY; + /* * If you're not sharing the file and you are writing to it, * then don't let anyone else have access to the file. @@ -351,16 +353,15 @@ text_munmap(tmap_info_t * mi) #ifdef HAVE_MMAP (void)munmap(mi->txt_data, mi->txt_full_size); -#else /* don't HAVE_MMAP */ +#else // don't HAVE_MMAP /* * IF the memory is writable *AND* it is not private (copy-on-write) * *AND* the memory is "sharable" (seen by other processes) * THEN rewrite the data. Emulate mmap visibility. */ - if ( FILE_WRITABLE(mi->txt_prot, mi->txt_flags) - && (lseek(mi->txt_fd, 0, SEEK_SET) >= 0) ) { + if ( FILE_WRITABLE(mi->txt_prot, mi->txt_flags) + && (lseek(mi->txt_fd, 0, SEEK_SET) >= 0) ) write(mi->txt_fd, mi->txt_data, mi->txt_size); - } free(mi->txt_data); #endif /* HAVE_MMAP */ diff --git a/src/libopts/time.c b/src/libopts/time.c index 9743dc168b..debaa7aed3 100644 --- a/src/libopts/time.c +++ b/src/libopts/time.c @@ -8,7 +8,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -92,7 +92,7 @@ optionTimeDate(tOptions * opts, tOptDesc * od) static char const fmt[] = "DATEMSK=%s/datemsk"; size_t sz = sizeof(fmt) + strlen(opts->pzPkgDataDir); envptr = AGALOC(sz, fmt); - if (snprintf(envptr, sz, fmt, opts->pzPkgDataDir) >= sz) + if (snprintf(envptr, sz, fmt, opts->pzPkgDataDir) >= (int)sz) option_exits(EXIT_FAILURE); putenv(envptr); diff --git a/src/libopts/tokenize.c b/src/libopts/tokenize.c index cbff7fba47..7489e3d526 100644 --- a/src/libopts/tokenize.c +++ b/src/libopts/tokenize.c @@ -9,7 +9,7 @@ * This file defines the string_tokenize interface * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -28,23 +28,6 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -#include -#include - -#define cc_t const unsigned char -#define ch_t unsigned char - -/* = = = START-STATIC-FORWARD = = = */ -static void -copy_cooked(ch_t ** ppDest, char const ** ppSrc); - -static void -copy_raw(ch_t ** ppDest, char const ** ppSrc); - -static token_list_t * -alloc_token_list(char const * str); -/* = = = END-STATIC-FORWARD = = = */ - static void copy_cooked(ch_t ** ppDest, char const ** ppSrc) { diff --git a/src/libopts/usage.c b/src/libopts/usage.c index 01c5f346b7..8df3591e66 100644 --- a/src/libopts/usage.c +++ b/src/libopts/usage.c @@ -18,7 +18,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -37,60 +37,8 @@ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd */ -/* = = = START-STATIC-FORWARD = = = */ -static unsigned int -parse_usage_flags(ao_flag_names_t const * fnt, char const * txt); - -static inline bool -do_gnu_usage(tOptions * pOpts); - -static inline bool -skip_misuse_usage(tOptions * pOpts); - -static void -print_offer_usage(tOptions * opts); - -static void -print_usage_details(tOptions * opts, int exit_code); - -static void -print_one_paragraph(char const * text, bool plain, FILE * fp); - -static void -prt_conflicts(tOptions * opts, tOptDesc * od); - -static void -prt_one_vendor(tOptions * opts, tOptDesc * od, - arg_types_t * argtp, char const * usefmt); - -static void -prt_vendor_opts(tOptions * opts, char const * title); - -static void -prt_extd_usage(tOptions * opts, tOptDesc * od, char const * title); - -static void -prt_ini_list(char const * const * papz, char const * ini_file, - char const * path_nm); - -static void -prt_preamble(tOptions * opts, tOptDesc * od, arg_types_t * at); - -static void -prt_one_usage(tOptions * opts, tOptDesc * od, arg_types_t * at); - -static void -prt_opt_usage(tOptions * opts, int ex_code, char const * title); - -static void -prt_prog_detail(tOptions * opts); - -static int -setGnuOptFmts(tOptions * opts, char const ** ptxt); - -static int -setStdOptFmts(tOptions * opts, char const ** ptxt); -/* = = = END-STATIC-FORWARD = = = */ +#define GRAPH_CH(_ch) \ + ((((unsigned)_ch) <= 0x7E) && (((unsigned)_ch) > ' ')) /** * Parse the option usage flags string. Any parsing problems yield @@ -151,6 +99,7 @@ parse_usage_flags(ao_flag_names_t const * fnt, char const * txt) case ',': txt = SPN_WHITESPACE_CHARS(txt + 1); /* Something must follow the comma */ + /* FALLTHROUGH */ default: continue; @@ -167,7 +116,7 @@ parse_usage_flags(ao_flag_names_t const * fnt, char const * txt) * environment variable is parsed. * @param[in,out] opts the program option descriptor */ -LOCAL void +static void set_usage_flags(tOptions * opts, char const * flg_txt) { # define _aof_(_n, _f) { sizeof(#_n)-1, _f, #_n }, @@ -304,7 +253,7 @@ print_offer_usage(tOptions * opts) help[0] = help[1] = '-'; strncpy(help + 2, od->pz_Name, 20); break; - + case 0: strncpy(help, od->pz_Name, 20); break; @@ -320,7 +269,7 @@ print_offer_usage(tOptions * opts) case (OPTPROC_LONGOPT | OPTPROC_SHORTOPT): strcpy(help, "--help"); break; - + case 0: strcpy(help, "help"); break; @@ -438,7 +387,7 @@ print_one_paragraph(char const * text, bool plain, FILE * fp) AGFREE(t); } } - + /*=export_func optionPrintParagraphs * private: * @@ -565,7 +514,7 @@ optionPrintParagraphs(char const * text, bool plain, FILE * fp) * If "exitCode" is "AO_EXIT_REQ_USAGE" (normally 64), then output will to * to stdout and the actual exit code will be "EXIT_SUCCESS". =*/ -void +noreturn void optionUsage(tOptions * opts, int usage_exit_code) { int exit_code = (usage_exit_code == AO_EXIT_REQ_USAGE) @@ -617,7 +566,7 @@ optionUsage(tOptions * opts, int usage_exit_code) print_usage_details(opts, usage_exit_code); else print_offer_usage(opts); - + flush_and_exit: fflush(option_usage_fp); if (ferror(option_usage_fp) != 0) @@ -777,7 +726,7 @@ prt_vendor_opts(tOptions * opts, char const * title) do { size_t l; if ( ((od->fOptState & not_vended_mask) != 0) - || IS_GRAPHIC_CHAR(od->optValue)) + || GRAPH_CH(od->optValue)) continue; l = strlen(od->pz_Name); @@ -795,7 +744,7 @@ prt_vendor_opts(tOptions * opts, char const * title) do { if ( ((od->fOptState & not_vended_mask) != 0) - || IS_GRAPHIC_CHAR(od->optValue)) + || GRAPH_CH(od->optValue)) continue; prt_one_vendor(opts, od, &argTypes, vfmt); @@ -1005,7 +954,7 @@ prt_preamble(tOptions * opts, tOptDesc * od, arg_types_t * at) if ((opts->fOptSet & OPTPROC_SHORTOPT) == 0) fputs(at->pzSpc, option_usage_fp); - else if (! IS_GRAPHIC_CHAR(od->optValue)) { + else if (! GRAPH_CH(od->optValue)) { if ( (opts->fOptSet & (OPTPROC_GNUUSAGE|OPTPROC_LONGOPT)) == (OPTPROC_GNUUSAGE|OPTPROC_LONGOPT)) fputc(' ', option_usage_fp); @@ -1132,7 +1081,7 @@ prt_opt_usage(tOptions * opts, int ex_code, char const * title) /* Skip name only options when we have a vendor option */ if ( ((opts->fOptSet & OPTPROC_VENDOR_OPT) != 0) - && (! IS_GRAPHIC_CHAR(od->optValue))) + && (! GRAPH_CH(od->optValue))) continue; /* diff --git a/src/libopts/version.c b/src/libopts/version.c index 8a8de75dbe..cd46be3a4d 100644 --- a/src/libopts/version.c +++ b/src/libopts/version.c @@ -10,7 +10,7 @@ /* * This file is part of AutoOpts, a companion to AutoGen. * AutoOpts is free software. - * AutoOpts is Copyright (C) 1992-2015 by Bruce Korb - all rights reserved + * AutoOpts is Copyright (C) 1992-2018 by Bruce Korb - all rights reserved * * AutoOpts is available under any one of two licenses. The license * in use must be one of these two and the choice is under the control @@ -90,7 +90,7 @@ emit_copy_full(tOptions * o, FILE * fp) else emit_first_line(fp, o->pzUsageTitle, NULL, NULL); - + if (HAS_pzPkgDataDir(o) && (o->pzPackager != NULL)) { fputc(NL, fp); fputs(o->pzPackager, fp); @@ -119,7 +119,7 @@ emit_copy_note(tOptions * opts, FILE * fp) fputc(NL, fp); fprintf(fp, zao_ver_fmt, optionVersion()); - + if (HAS_pzPkgDataDir(opts) && (opts->pzPackager != NULL)) { fputc(NL, fp); fputs(opts->pzPackager, fp); @@ -153,7 +153,10 @@ print_ver(tOptions * opts, tOptDesc * od, FILE * fp, bool call_exit) ch = od->optArg.argString[0]; - else { + else if (OPTST_GET_ARGTYPE(od->fOptState) == OPARG_TYPE_STATIC) { + ch = od->optArg.argString[0]; + + } else { set_usage_flags(opts, NULL); ch = (opts->fOptSet & OPTPROC_GNUUSAGE) ? 'c' : 'v'; } diff --git a/src/list.h b/src/list.h index 138f6d476d..967eb193e2 100644 --- a/src/list.h +++ b/src/list.h @@ -18,6 +18,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#ifndef GNUTLS_SRC_LIST_H +#define GNUTLS_SRC_LIST_H + /* SOAP: @@ -123,10 +126,6 @@ int main (int argc, char **argv) */ - -#ifndef _LIST_H -#define _LIST_H - /* the `search' member points to the last found. this speeds up repeated searches on the same list-item, the consecutive list-item, or the pre-consecutive list-item. @@ -444,4 +443,4 @@ struct list { free (__t); \ } \ -#endif /* _LIST_H */ +#endif /* GNUTLS_SRC_LIST_H */ diff --git a/src/ocsptool-args.c.bak b/src/ocsptool-args.c.bak deleted file mode 100644 index 5082df7925..0000000000 --- a/src/ocsptool-args.c.bak +++ /dev/null @@ -1,1553 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (ocsptool-args.c) - * - * It has been AutoGen-ed - * From the definitions ocsptool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This source file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the ocsptool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The ocsptool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * ocsptool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ocsptool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef __doxygen__ -#define OPTION_CODE_COMPILE 1 -#include "ocsptool-args.h" -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern FILE * option_usage_fp; -#define zCopyright (ocsptool_opt_strs+0) -#define zLicenseDescrip (ocsptool_opt_strs+289) - - -#ifndef NULL -# define NULL 0 -#endif - -/** - * static const strings for ocsptool options - */ -static char const ocsptool_opt_strs[2328] = -/* 0 */ "ocsptool @VERSION@\n" - "Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n" - "This is free software. It is licensed for use, modification and\n" - "redistribution under the terms of the GNU General Public License,\n" - "version 3 or later \n\0" -/* 289 */ "ocsptool is free software: you can redistribute it and/or modify it under\n" - "the terms of the GNU General Public License as published by the Free\n" - "Software Foundation, either version 3 of the License, or (at your option)\n" - "any later version.\n\n" - "ocsptool is distributed in the hope that it will be useful, but WITHOUT ANY\n" - "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n" - "FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n" - "details.\n\n" - "You should have received a copy of the GNU General Public License along\n" - "with this program. If not, see .\n\0" -/* 894 */ "Enable debugging\0" -/* 911 */ "DEBUG\0" -/* 917 */ "debug\0" -/* 923 */ "More verbose output\0" -/* 943 */ "VERBOSE\0" -/* 951 */ "verbose\0" -/* 959 */ "Input file\0" -/* 970 */ "INFILE\0" -/* 977 */ "infile\0" -/* 984 */ "Output file\0" -/* 996 */ "OUTFILE\0" -/* 1004 */ "outfile\0" -/* 1012 */ "Ask an OCSP/HTTP server on a certificate validity\0" -/* 1062 */ "ASK\0" -/* 1066 */ "ask\0" -/* 1070 */ "Verify response\0" -/* 1086 */ "VERIFY_RESPONSE\0" -/* 1102 */ "verify-response\0" -/* 1118 */ "Print information on a OCSP request\0" -/* 1154 */ "REQUEST_INFO\0" -/* 1167 */ "request-info\0" -/* 1180 */ "Print information on a OCSP response\0" -/* 1217 */ "RESPONSE_INFO\0" -/* 1231 */ "response-info\0" -/* 1245 */ "Generate an OCSP request\0" -/* 1270 */ "GENERATE_REQUEST\0" -/* 1287 */ "generate-request\0" -/* 1304 */ "Use (or not) a nonce to OCSP request\0" -/* 1341 */ "NONCE\0" -/* 1347 */ "no-nonce\0" -/* 1356 */ "no\0" -/* 1359 */ "Read issuer certificate from file\0" -/* 1393 */ "LOAD_ISSUER\0" -/* 1405 */ "load-issuer\0" -/* 1417 */ "Read certificate to check from file\0" -/* 1453 */ "LOAD_CERT\0" -/* 1463 */ "load-cert\0" -/* 1473 */ "Read OCSP trust anchors from file\0" -/* 1507 */ "LOAD_TRUST\0" -/* 1518 */ "load-trust\0" -/* 1529 */ "Read OCSP response signer from file\0" -/* 1565 */ "LOAD_SIGNER\0" -/* 1577 */ "load-signer\0" -/* 1589 */ "Use DER format for input certificates and private keys\0" -/* 1644 */ "INDER\0" -/* 1650 */ "no-inder\0" -/* 1659 */ "Read DER encoded OCSP request from file\0" -/* 1699 */ "LOAD_REQUEST\0" -/* 1712 */ "load-request\0" -/* 1725 */ "Read DER encoded OCSP response from file\0" -/* 1766 */ "LOAD_RESPONSE\0" -/* 1780 */ "load-response\0" -/* 1794 */ "Ignore any verification errors\0" -/* 1825 */ "IGNORE_ERRORS\0" -/* 1839 */ "ignore-errors\0" -/* 1853 */ "display extended usage information and exit\0" -/* 1897 */ "help\0" -/* 1902 */ "extended usage information passed thru pager\0" -/* 1947 */ "more-help\0" -/* 1957 */ "output version information and exit\0" -/* 1993 */ "version\0" -/* 2001 */ "OCSPTOOL\0" -/* 2010 */ "ocsptool - GnuTLS OCSP tool\n" - "Usage: %s [ - [] | --[{=| }] ]...\n\0" -/* 2096 */ "@PACKAGE_BUGREPORT@\0" -/* 2116 */ "\n\0" -/* 2118 */ "Ocsptool is a program that can parse and print information about OCSP\n" - "requests/responses, generate requests and verify responses.\n\0" -/* 2249 */ "ocsptool @VERSION@\0" -/* 2268 */ "ocsptool [options]\n" - "ocsptool --help for usage instructions.\n"; - -/** - * debug option description: - */ -/** Descriptive text for the debug option */ -#define DEBUG_DESC (ocsptool_opt_strs+894) -/** Upper-cased name for the debug option */ -#define DEBUG_NAME (ocsptool_opt_strs+911) -/** Name string for the debug option */ -#define DEBUG_name (ocsptool_opt_strs+917) -/** Compiled in flag settings for the debug option */ -#define DEBUG_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * verbose option description: - */ -/** Descriptive text for the verbose option */ -#define VERBOSE_DESC (ocsptool_opt_strs+923) -/** Upper-cased name for the verbose option */ -#define VERBOSE_NAME (ocsptool_opt_strs+943) -/** Name string for the verbose option */ -#define VERBOSE_name (ocsptool_opt_strs+951) -/** Compiled in flag settings for the verbose option */ -#define VERBOSE_FLAGS (OPTST_DISABLED) - -/** - * infile option description: - */ -/** Descriptive text for the infile option */ -#define INFILE_DESC (ocsptool_opt_strs+959) -/** Upper-cased name for the infile option */ -#define INFILE_NAME (ocsptool_opt_strs+970) -/** Name string for the infile option */ -#define INFILE_name (ocsptool_opt_strs+977) -/** Compiled in flag settings for the infile option */ -#define INFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * outfile option description: - */ -/** Descriptive text for the outfile option */ -#define OUTFILE_DESC (ocsptool_opt_strs+984) -/** Upper-cased name for the outfile option */ -#define OUTFILE_NAME (ocsptool_opt_strs+996) -/** Name string for the outfile option */ -#define OUTFILE_name (ocsptool_opt_strs+1004) -/** Compiled in flag settings for the outfile option */ -#define OUTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * ask option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the ask option */ -#define ASK_DESC (ocsptool_opt_strs+1012) -/** Upper-cased name for the ask option */ -#define ASK_NAME (ocsptool_opt_strs+1062) -/** Name string for the ask option */ -#define ASK_name (ocsptool_opt_strs+1066) -/** Other options that are required by the ask option */ -static int const aAskMustList[] = { - INDEX_OPT_LOAD_CERT, - INDEX_OPT_LOAD_ISSUER, NO_EQUIVALENT }; -/** Compiled in flag settings for the ask option */ -#define ASK_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | OPTST_ARG_OPTIONAL) - -/** - * verify-response option description: - */ -/** Descriptive text for the verify-response option */ -#define VERIFY_RESPONSE_DESC (ocsptool_opt_strs+1070) -/** Upper-cased name for the verify-response option */ -#define VERIFY_RESPONSE_NAME (ocsptool_opt_strs+1086) -/** Name string for the verify-response option */ -#define VERIFY_RESPONSE_name (ocsptool_opt_strs+1102) -/** Compiled in flag settings for the verify-response option */ -#define VERIFY_RESPONSE_FLAGS (OPTST_DISABLED) - -/** - * request-info option description: - */ -/** Descriptive text for the request-info option */ -#define REQUEST_INFO_DESC (ocsptool_opt_strs+1118) -/** Upper-cased name for the request-info option */ -#define REQUEST_INFO_NAME (ocsptool_opt_strs+1154) -/** Name string for the request-info option */ -#define REQUEST_INFO_name (ocsptool_opt_strs+1167) -/** Compiled in flag settings for the request-info option */ -#define REQUEST_INFO_FLAGS (OPTST_DISABLED) - -/** - * response-info option description: - */ -/** Descriptive text for the response-info option */ -#define RESPONSE_INFO_DESC (ocsptool_opt_strs+1180) -/** Upper-cased name for the response-info option */ -#define RESPONSE_INFO_NAME (ocsptool_opt_strs+1217) -/** Name string for the response-info option */ -#define RESPONSE_INFO_name (ocsptool_opt_strs+1231) -/** Compiled in flag settings for the response-info option */ -#define RESPONSE_INFO_FLAGS (OPTST_DISABLED) - -/** - * generate-request option description: - */ -/** Descriptive text for the generate-request option */ -#define GENERATE_REQUEST_DESC (ocsptool_opt_strs+1245) -/** Upper-cased name for the generate-request option */ -#define GENERATE_REQUEST_NAME (ocsptool_opt_strs+1270) -/** Name string for the generate-request option */ -#define GENERATE_REQUEST_name (ocsptool_opt_strs+1287) -/** Compiled in flag settings for the generate-request option */ -#define GENERATE_REQUEST_FLAGS (OPTST_DISABLED) - -/** - * nonce option description: - */ -/** Descriptive text for the nonce option */ -#define NONCE_DESC (ocsptool_opt_strs+1304) -/** Upper-cased name for the nonce option */ -#define NONCE_NAME (ocsptool_opt_strs+1341) -/** disablement name for the nonce option */ -#define NOT_NONCE_name (ocsptool_opt_strs+1347) -/** disablement prefix for the nonce option */ -#define NOT_NONCE_PFX (ocsptool_opt_strs+1356) -/** Name string for the nonce option */ -#define NONCE_name (NOT_NONCE_name + 3) -/** Compiled in flag settings for the nonce option */ -#define NONCE_FLAGS (OPTST_DISABLED) - -/** - * load-issuer option description: - */ -/** Descriptive text for the load-issuer option */ -#define LOAD_ISSUER_DESC (ocsptool_opt_strs+1359) -/** Upper-cased name for the load-issuer option */ -#define LOAD_ISSUER_NAME (ocsptool_opt_strs+1393) -/** Name string for the load-issuer option */ -#define LOAD_ISSUER_name (ocsptool_opt_strs+1405) -/** Compiled in flag settings for the load-issuer option */ -#define LOAD_ISSUER_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * load-cert option description: - */ -/** Descriptive text for the load-cert option */ -#define LOAD_CERT_DESC (ocsptool_opt_strs+1417) -/** Upper-cased name for the load-cert option */ -#define LOAD_CERT_NAME (ocsptool_opt_strs+1453) -/** Name string for the load-cert option */ -#define LOAD_CERT_name (ocsptool_opt_strs+1463) -/** Compiled in flag settings for the load-cert option */ -#define LOAD_CERT_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * load-trust option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the load-trust option */ -#define LOAD_TRUST_DESC (ocsptool_opt_strs+1473) -/** Upper-cased name for the load-trust option */ -#define LOAD_TRUST_NAME (ocsptool_opt_strs+1507) -/** Name string for the load-trust option */ -#define LOAD_TRUST_name (ocsptool_opt_strs+1518) -/** Other options that appear in conjunction with the load-trust option */ -static int const aLoad_TrustCantList[] = { - INDEX_OPT_LOAD_SIGNER, NO_EQUIVALENT }; -/** Compiled in flag settings for the load-trust option */ -#define LOAD_TRUST_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * load-signer option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the load-signer option */ -#define LOAD_SIGNER_DESC (ocsptool_opt_strs+1529) -/** Upper-cased name for the load-signer option */ -#define LOAD_SIGNER_NAME (ocsptool_opt_strs+1565) -/** Name string for the load-signer option */ -#define LOAD_SIGNER_name (ocsptool_opt_strs+1577) -/** Other options that appear in conjunction with the load-signer option */ -static int const aLoad_SignerCantList[] = { - INDEX_OPT_LOAD_TRUST, NO_EQUIVALENT }; -/** Compiled in flag settings for the load-signer option */ -#define LOAD_SIGNER_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * inder option description: - */ -/** Descriptive text for the inder option */ -#define INDER_DESC (ocsptool_opt_strs+1589) -/** Upper-cased name for the inder option */ -#define INDER_NAME (ocsptool_opt_strs+1644) -/** disablement name for the inder option */ -#define NOT_INDER_name (ocsptool_opt_strs+1650) -/** disablement prefix for the inder option */ -#define NOT_INDER_PFX (ocsptool_opt_strs+1356) -/** Name string for the inder option */ -#define INDER_name (NOT_INDER_name + 3) -/** Compiled in flag settings for the inder option */ -#define INDER_FLAGS (OPTST_DISABLED) - -/** - * load-request option description: - */ -/** Descriptive text for the load-request option */ -#define LOAD_REQUEST_DESC (ocsptool_opt_strs+1659) -/** Upper-cased name for the load-request option */ -#define LOAD_REQUEST_NAME (ocsptool_opt_strs+1699) -/** Name string for the load-request option */ -#define LOAD_REQUEST_name (ocsptool_opt_strs+1712) -/** Compiled in flag settings for the load-request option */ -#define LOAD_REQUEST_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * load-response option description: - */ -/** Descriptive text for the load-response option */ -#define LOAD_RESPONSE_DESC (ocsptool_opt_strs+1725) -/** Upper-cased name for the load-response option */ -#define LOAD_RESPONSE_NAME (ocsptool_opt_strs+1766) -/** Name string for the load-response option */ -#define LOAD_RESPONSE_name (ocsptool_opt_strs+1780) -/** Compiled in flag settings for the load-response option */ -#define LOAD_RESPONSE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * ignore-errors option description: - */ -/** Descriptive text for the ignore-errors option */ -#define IGNORE_ERRORS_DESC (ocsptool_opt_strs+1794) -/** Upper-cased name for the ignore-errors option */ -#define IGNORE_ERRORS_NAME (ocsptool_opt_strs+1825) -/** Name string for the ignore-errors option */ -#define IGNORE_ERRORS_name (ocsptool_opt_strs+1839) -/** Compiled in flag settings for the ignore-errors option */ -#define IGNORE_ERRORS_FLAGS (OPTST_DISABLED) - -/* - * Help/More_Help/Version option descriptions: - */ -#define HELP_DESC (ocsptool_opt_strs+1853) -#define HELP_name (ocsptool_opt_strs+1897) -#ifdef HAVE_WORKING_FORK -#define MORE_HELP_DESC (ocsptool_opt_strs+1902) -#define MORE_HELP_name (ocsptool_opt_strs+1947) -#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -#define MORE_HELP_DESC HELP_DESC -#define MORE_HELP_name HELP_name -#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT) -#endif -#ifdef NO_OPTIONAL_OPT_ARGS -# define VER_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ - OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT) -#endif -#define VER_DESC (ocsptool_opt_strs+1957) -#define VER_name (ocsptool_opt_strs+1993) -/** - * Declare option callback procedures - */ -extern tOptProc - optionBooleanVal, optionNestedVal, optionNumericVal, - optionPagedUsage, optionPrintVersion, optionResetOpt, - optionStackArg, optionTimeDate, optionTimeVal, - optionUnstackArg, optionVendorOption; -static tOptProc - doOptDebug, doOptInfile, doOptLoad_Cert, - doOptLoad_Issuer, doOptLoad_Request, doOptLoad_Response, - doOptLoad_Signer, doOptLoad_Trust, doUsageOpt; -#define VER_PROC optionPrintVersion - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Define the ocsptool Option Descriptions. - * This is an array of OPTION_CT entries, one for each - * option that the ocsptool program responds to. - */ -static tOptDesc optDesc[OPTION_CT] = { - { /* entry idx, value */ 0, VALUE_OPT_DEBUG, - /* equiv idx, value */ 0, VALUE_OPT_DEBUG, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DEBUG_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --debug */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDebug, - /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 1, VALUE_OPT_VERBOSE, - /* equiv idx, value */ 1, VALUE_OPT_VERBOSE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, NOLIMIT, 0, - /* opt state flags */ VERBOSE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verbose */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERBOSE_DESC, VERBOSE_NAME, VERBOSE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 2, VALUE_OPT_INFILE, - /* equiv idx, value */ 2, VALUE_OPT_INFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --infile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptInfile, - /* desc, NAME, name */ INFILE_DESC, INFILE_NAME, INFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 3, VALUE_OPT_OUTFILE, - /* equiv idx, value */ 3, VALUE_OPT_OUTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OUTFILE_DESC, OUTFILE_NAME, OUTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 4, VALUE_OPT_ASK, - /* equiv idx, value */ 4, VALUE_OPT_ASK, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ ASK_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --ask */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ aAskMustList, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ ASK_DESC, ASK_NAME, ASK_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 5, VALUE_OPT_VERIFY_RESPONSE, - /* equiv idx, value */ 5, VALUE_OPT_VERIFY_RESPONSE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VERIFY_RESPONSE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verify-response */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERIFY_RESPONSE_DESC, VERIFY_RESPONSE_NAME, VERIFY_RESPONSE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 6, VALUE_OPT_REQUEST_INFO, - /* equiv idx, value */ 6, VALUE_OPT_REQUEST_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ REQUEST_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --request-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ REQUEST_INFO_DESC, REQUEST_INFO_NAME, REQUEST_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 7, VALUE_OPT_RESPONSE_INFO, - /* equiv idx, value */ 7, VALUE_OPT_RESPONSE_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ RESPONSE_INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --response-info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ RESPONSE_INFO_DESC, RESPONSE_INFO_NAME, RESPONSE_INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 8, VALUE_OPT_GENERATE_REQUEST, - /* equiv idx, value */ 8, VALUE_OPT_GENERATE_REQUEST, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_REQUEST_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-request */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_REQUEST_DESC, GENERATE_REQUEST_NAME, GENERATE_REQUEST_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 9, VALUE_OPT_NONCE, - /* equiv idx, value */ 9, VALUE_OPT_NONCE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ NONCE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --nonce */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ NONCE_DESC, NONCE_NAME, NONCE_name, - /* disablement strs */ NOT_NONCE_name, NOT_NONCE_PFX }, - - { /* entry idx, value */ 10, VALUE_OPT_LOAD_ISSUER, - /* equiv idx, value */ 10, VALUE_OPT_LOAD_ISSUER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_ISSUER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-issuer */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptLoad_Issuer, - /* desc, NAME, name */ LOAD_ISSUER_DESC, LOAD_ISSUER_NAME, LOAD_ISSUER_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 11, VALUE_OPT_LOAD_CERT, - /* equiv idx, value */ 11, VALUE_OPT_LOAD_CERT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_CERT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-cert */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptLoad_Cert, - /* desc, NAME, name */ LOAD_CERT_DESC, LOAD_CERT_NAME, LOAD_CERT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 12, VALUE_OPT_LOAD_TRUST, - /* equiv idx, value */ 12, VALUE_OPT_LOAD_TRUST, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_TRUST_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-trust */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aLoad_TrustCantList, - /* option proc */ doOptLoad_Trust, - /* desc, NAME, name */ LOAD_TRUST_DESC, LOAD_TRUST_NAME, LOAD_TRUST_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 13, VALUE_OPT_LOAD_SIGNER, - /* equiv idx, value */ 13, VALUE_OPT_LOAD_SIGNER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_SIGNER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-signer */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aLoad_SignerCantList, - /* option proc */ doOptLoad_Signer, - /* desc, NAME, name */ LOAD_SIGNER_DESC, LOAD_SIGNER_NAME, LOAD_SIGNER_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 14, VALUE_OPT_INDER, - /* equiv idx, value */ 14, VALUE_OPT_INDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --inder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INDER_DESC, INDER_NAME, INDER_name, - /* disablement strs */ NOT_INDER_name, NOT_INDER_PFX }, - - { /* entry idx, value */ 15, VALUE_OPT_LOAD_REQUEST, - /* equiv idx, value */ 15, VALUE_OPT_LOAD_REQUEST, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_REQUEST_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-request */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptLoad_Request, - /* desc, NAME, name */ LOAD_REQUEST_DESC, LOAD_REQUEST_NAME, LOAD_REQUEST_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 16, VALUE_OPT_LOAD_RESPONSE, - /* equiv idx, value */ 16, VALUE_OPT_LOAD_RESPONSE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_RESPONSE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-response */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptLoad_Response, - /* desc, NAME, name */ LOAD_RESPONSE_DESC, LOAD_RESPONSE_NAME, LOAD_RESPONSE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 17, VALUE_OPT_IGNORE_ERRORS, - /* equiv idx, value */ 17, VALUE_OPT_IGNORE_ERRORS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ IGNORE_ERRORS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --ignore-errors */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ IGNORE_ERRORS_DESC, IGNORE_ERRORS_NAME, IGNORE_ERRORS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VER_FLAGS, AOUSE_VERSION, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ VER_PROC, - /* desc, NAME, name */ VER_DESC, NULL, VER_name, - /* disablement strs */ NULL, NULL }, - - - - { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doUsageOpt, - /* desc, NAME, name */ HELP_DESC, NULL, HELP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionPagedUsage, - /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name, - /* disablement strs */ NULL, NULL } -}; - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** Reference to the upper cased version of ocsptool. */ -#define zPROGNAME (ocsptool_opt_strs+2001) -/** Reference to the title line for ocsptool usage. */ -#define zUsageTitle (ocsptool_opt_strs+2010) -/** There is no ocsptool configuration file. */ -#define zRcName NULL -/** There are no directories to search for ocsptool config files. */ -#define apzHomeList NULL -/** The ocsptool program bug email address. */ -#define zBugsAddr (ocsptool_opt_strs+2096) -/** Clarification/explanation of what ocsptool does. */ -#define zExplain (ocsptool_opt_strs+2116) -/** Extra detail explaining what ocsptool does. */ -#define zDetail (ocsptool_opt_strs+2118) -/** The full version string for ocsptool. */ -#define zFullVersion (ocsptool_opt_strs+2249) -/* extracted from optcode.tlib near line 364 */ - -#if defined(ENABLE_NLS) -# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT - static tOptionXlateProc translate_option_strings; -#else -# define OPTPROC_BASE OPTPROC_NONE -# define translate_option_strings NULL -#endif /* ENABLE_NLS */ - -#define ocsptool_full_usage (NULL) -#define ocsptool_short_usage (ocsptool_opt_strs+2268) - -#endif /* not defined __doxygen__ */ - -/* - * Create the static procedure(s) declared above. - */ -/** - * The callout function that invokes the optionUsage function. - * - * @param[in] opts the AutoOpts option description structure - * @param[in] od the descriptor for the "help" (usage) option. - * @noreturn - */ -static void -doUsageOpt(tOptions * opts, tOptDesc * od) -{ - int ex_code; - ex_code = OCSPTOOL_EXIT_SUCCESS; - optionUsage(&ocsptoolOptions, ex_code); - /* NOTREACHED */ - exit(OCSPTOOL_EXIT_FAILURE); - (void)opts; - (void)od; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the debug option. - * Specifies the debug level. - * @param[in] pOptions the ocsptool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 9999 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the infile option. - * - * @param[in] pOptions the ocsptool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptInfile(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the load-issuer option. - * - * @param[in] pOptions the ocsptool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptLoad_Issuer(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the load-cert option. - * - * @param[in] pOptions the ocsptool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptLoad_Cert(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the load-trust option. - * - * @param[in] pOptions the ocsptool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptLoad_Trust(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the load-signer option. - * - * @param[in] pOptions the ocsptool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptLoad_Signer(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the load-request option. - * - * @param[in] pOptions the ocsptool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptLoad_Request(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the load-response option. - * - * @param[in] pOptions the ocsptool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptLoad_Response(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} -/* extracted from optmain.tlib near line 1250 */ - -/** - * The directory containing the data associated with ocsptool. - */ -#ifndef PKGDATADIR -# define PKGDATADIR "" -#endif - -/** - * Information about the person or institution that packaged ocsptool - * for the current distribution. - */ -#ifndef WITH_PACKAGER -# define ocsptool_packager_info NULL -#else -/** Packager information for ocsptool. */ -static char const ocsptool_packager_info[] = - "Packaged by " WITH_PACKAGER - -# ifdef WITH_PACKAGER_VERSION - " ("WITH_PACKAGER_VERSION")" -# endif - -# ifdef WITH_PACKAGER_BUG_REPORTS - "\nReport ocsptool bugs to " WITH_PACKAGER_BUG_REPORTS -# endif - "\n"; -#endif -#ifndef __doxygen__ - -#endif /* __doxygen__ */ -/** - * The option definitions for ocsptool. The one structure that - * binds them all. - */ -tOptions ocsptoolOptions = { - OPTIONS_STRUCT_VERSION, - 0, NULL, /* original argc + argv */ - ( OPTPROC_BASE - + OPTPROC_ERRSTOP - + OPTPROC_SHORTOPT - + OPTPROC_LONGOPT - + OPTPROC_NO_REQ_OPT - + OPTPROC_NEGATIONS - + OPTPROC_NO_ARGS - + OPTPROC_GNUUSAGE - + OPTPROC_MISUSE ), - 0, NULL, /* current option index, current option */ - NULL, NULL, zPROGNAME, - zRcName, zCopyright, zLicenseDescrip, - zFullVersion, apzHomeList, zUsageTitle, - zExplain, zDetail, optDesc, - zBugsAddr, /* address to send bugs to */ - NULL, NULL, /* extensions/saved state */ - optionUsage, /* usage procedure */ - translate_option_strings, /* translation procedure */ - /* - * Indexes to special options - */ - { INDEX_OPT_MORE_HELP, /* more-help option index */ - NO_EQUIVALENT, /* save option index */ - NO_EQUIVALENT, /* '-#' option index */ - NO_EQUIVALENT /* index of default opt */ - }, - 21 /* full option count */, 18 /* user option count */, - ocsptool_full_usage, ocsptool_short_usage, - NULL, NULL, - PKGDATADIR, ocsptool_packager_info -}; - -#if ENABLE_NLS -/** - * This code is designed to translate translatable option text for the - * ocsptool program. These translations happen upon entry - * to optionProcess(). - */ -#include -#include -#include -#include -#ifdef HAVE_DCGETTEXT -# include -#endif -#include - -static char * AO_gettext(char const * pz); -static void coerce_it(void ** s); - -/** - * AutoGen specific wrapper function for gettext. It relies on the macro _() - * to convert from English to the target language, then strdup-duplicates the - * result string. It tries the "libopts" domain first, then whatever has been - * set via the \a textdomain(3) call. - * - * @param[in] pz the input text used as a lookup key. - * @returns the translated text (if there is one), - * or the original text (if not). - */ -static char * -AO_gettext(char const * pz) -{ - char * res; - if (pz == NULL) - return NULL; -#ifdef HAVE_DCGETTEXT - /* - * While processing the option_xlateable_txt data, try to use the - * "libopts" domain. Once we switch to the option descriptor data, - * do *not* use that domain. - */ - if (option_xlateable_txt.field_ct != 0) { - res = dgettext("libopts", pz); - if (res == pz) - res = (char *)VOIDP(_(pz)); - } else - res = (char *)VOIDP(_(pz)); -#else - res = (char *)VOIDP(_(pz)); -#endif - if (res == pz) - return res; - res = strdup(res); - if (res == NULL) { - fputs(_("No memory for duping translated strings\n"), stderr); - exit(OCSPTOOL_EXIT_FAILURE); - } - return res; -} - -/** - * All the pointers we use are marked "* const", but they are stored in - * writable memory. Coerce the mutability and set the pointer. - */ -static void coerce_it(void ** s) { *s = AO_gettext(*s); -} - -/** - * Translate all the translatable strings in the ocsptoolOptions - * structure defined above. This is done only once. - */ -static void -translate_option_strings(void) -{ - tOptions * const opts = &ocsptoolOptions; - - /* - * Guard against re-translation. It won't work. The strings will have - * been changed by the first pass through this code. One shot only. - */ - if (option_xlateable_txt.field_ct != 0) { - /* - * Do the translations. The first pointer follows the field count - * field. The field count field is the size of a pointer. - */ - char ** ppz = (char**)VOIDP(&(option_xlateable_txt)); - int ix = option_xlateable_txt.field_ct; - - do { - ppz++; /* skip over field_ct */ - *ppz = AO_gettext(*ppz); - } while (--ix > 0); - /* prevent re-translation and disable "libopts" domain lookup */ - option_xlateable_txt.field_ct = 0; - - coerce_it(VOIDP(&(opts->pzCopyright))); - coerce_it(VOIDP(&(opts->pzCopyNotice))); - coerce_it(VOIDP(&(opts->pzFullVersion))); - coerce_it(VOIDP(&(opts->pzUsageTitle))); - coerce_it(VOIDP(&(opts->pzExplain))); - coerce_it(VOIDP(&(opts->pzDetail))); - { - tOptDesc * od = opts->pOptDesc; - for (ix = opts->optCt; ix > 0; ix--, od++) - coerce_it(VOIDP(&(od->pzText))); - } - } -} -#endif /* ENABLE_NLS */ - -#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT -/** I18N function strictly for xgettext. Do not compile. */ -static void bogus_function(void) { - /* TRANSLATORS: - - The following dummy function was crated solely so that xgettext can - extract the correct strings. These strings are actually referenced - by a field name in the ocsptoolOptions structure noted in the - comments below. The literal text is defined in ocsptool_opt_strs. - - NOTE: the strings below are segmented with respect to the source string - ocsptool_opt_strs. The strings above are handed off for translation - at run time a paragraph at a time. Consequently, they are presented here - for translation a paragraph at a time. - - ALSO: often the description for an option will reference another option - by name. These are set off with apostrophe quotes (I hope). Do not - translate option names. - */ - /* referenced via ocsptoolOptions.pzCopyright */ - puts(_("ocsptool @VERSION@\n\ -Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n\ -This is free software. It is licensed for use, modification and\n\ -redistribution under the terms of the GNU General Public License,\n\ -version 3 or later \n")); - - /* referenced via ocsptoolOptions.pzCopyNotice */ - puts(_("ocsptool is free software: you can redistribute it and/or modify it under\n\ -the terms of the GNU General Public License as published by the Free\n\ -Software Foundation, either version 3 of the License, or (at your option)\n\ -any later version.\n\n")); - puts(_("ocsptool is distributed in the hope that it will be useful, but WITHOUT ANY\n\ -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\ -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n\ -details.\n\n")); - puts(_("You should have received a copy of the GNU General Public License along\n\ -with this program. If not, see .\n")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Enable debugging")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("More verbose output")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Input file")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Output file")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Ask an OCSP/HTTP server on a certificate validity")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Verify response")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Print information on a OCSP request")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Print information on a OCSP response")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Generate an OCSP request")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Use (or not) a nonce to OCSP request")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Read issuer certificate from file")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Read certificate to check from file")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Read OCSP trust anchors from file")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Read OCSP response signer from file")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Use DER format for input certificates and private keys")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Read DER encoded OCSP request from file")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Read DER encoded OCSP response from file")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("Ignore any verification errors")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("display extended usage information and exit")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("extended usage information passed thru pager")); - - /* referenced via ocsptoolOptions.pOptDesc->pzText */ - puts(_("output version information and exit")); - - /* referenced via ocsptoolOptions.pzUsageTitle */ - puts(_("ocsptool - GnuTLS OCSP tool\n\ -Usage: %s [ - [] | --[{=| }] ]...\n")); - - /* referenced via ocsptoolOptions.pzExplain */ - puts(_("\n")); - - /* referenced via ocsptoolOptions.pzDetail */ - puts(_("Ocsptool is a program that can parse and print information about OCSP\n\ -requests/responses, generate requests and verify responses.\n")); - - /* referenced via ocsptoolOptions.pzFullVersion */ - puts(_("ocsptool @VERSION@")); - - /* referenced via ocsptoolOptions.pzFullUsage */ - puts(_("<<>>")); - - /* referenced via ocsptoolOptions.pzShortUsage */ - puts(_("ocsptool [options]\n\ -ocsptool --help for usage instructions.\n")); - /* LIBOPTS-MESSAGES: */ -#line 67 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" - puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" - puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" - puts(_("Automated Options Processing Error!\n" - "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" - puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" - puts(_("\tThis is less than the minimum library version: ")); -#line 121 "../version.c" - puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" - puts(_("(AutoOpts bug): %s.\n")); -#line 90 "../reset.c" - puts(_("optionResetOpt() called, but reset-option not configured")); -#line 295 "../usage.c" - puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" - puts(_("optionProcess() was called with invalid data")); -#line 751 "../usage.c" - puts(_("invalid argument type specified")); -#line 598 "../find.c" - puts(_("defaulted to option with optional arg")); -#line 76 "../alias.c" - puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" - puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" - puts(_(" The following options match:\n")); -#line 293 "../find.c" - puts(_("%s: ambiguous option name: %s (matches %d options)\n")); -#line 161 "../check.c" - puts(_("%s: Command line arguments required\n")); -#line 43 "../alias.c" - puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" - puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" - puts(_("interprocess pipe")); -#line 168 "../version.c" - puts(_("error: version option argument '%c' invalid. Use:\n" - "\t'v' - version only\n" - "\t'c' - version and copyright\n" - "\t'n' - version and full copyright notice\n")); -#line 58 "../check.c" - puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 38 "../alias.c" - puts(_("-equivalence")); -#line 469 "../find.c" - puts(_("%s: illegal option -- %c\n")); -#line 110 "../reset.c" - puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 118 "../reset.c" - puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" - puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 750 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 1084 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" - puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" - puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" - puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" - "\t'%s' and '%s'.")); -#line 94 "../check.c" - puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" - puts(_("%s: The '%s' option cannot have an argument.\n")); -#line 151 "../check.c" - puts(_("%s: Command line arguments are not allowed.\n")); -#line 536 "../save.c" - puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" - puts(_("%s error: '%s' does not match any %s keywords.\n")); -#line 93 "../reset.c" - puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 239 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 143 "../restore.c" - puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" - puts(_("'%s' is not a command line option.\n")); -#line 113 "../time.c" - puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); -#line 50 "../time.c" - puts(_("%s error: '%s' is not a recognizable time duration.\n")); -#line 92 "../check.c" - puts(_("%s error: The %s option must appear %d times.\n")); -#line 165 "../numeric.c" - puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" - puts(_("%s error: %s exceeds %s keyword count\n")); -#line 333 "../usage.c" - puts(_("Try '%s %s' for more information.\n")); -#line 45 "../alias.c" - puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" - puts(_("standard output")); -#line 943 "../makeshell.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard output")); -#line 418 "../usage.c" - puts(_("standard output")); -#line 628 "../usage.c" - puts(_("standard output")); -#line 175 "../version.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard error")); -#line 418 "../usage.c" - puts(_("standard error")); -#line 628 "../usage.c" - puts(_("standard error")); -#line 175 "../version.c" - puts(_("standard error")); -#line 208 "../makeshell.c" - puts(_("write")); -#line 943 "../makeshell.c" - puts(_("write")); -#line 276 "../usage.c" - puts(_("write")); -#line 417 "../usage.c" - puts(_("write")); -#line 627 "../usage.c" - puts(_("write")); -#line 174 "../version.c" - puts(_("write")); -#line 60 "../numeric.c" - puts(_("%s error: %s option value %ld is out of range.\n")); -#line 44 "../check.c" - puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 238 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 257 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 535 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); - /* END-LIBOPTS-MESSAGES */ - - /* USAGE-TEXT: */ -#line 876 "../usage.c" - puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1151 "../usage.c" - puts(_("Version, usage and configuration options:")); -#line 927 "../usage.c" - puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 840 "../usage.c" - puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1120 "../usage.c" - puts(_(" --- %-14s %s\n")); -#line 1118 "../usage.c" - puts(_("This option has been disabled")); -#line 867 "../usage.c" - puts(_("\t\t\t\t- enabled by default\n")); -#line 40 "../alias.c" - puts(_("%s error: only ")); -#line 1197 "../usage.c" - puts(_(" - examining environment variables named %s_*\n")); -#line 168 "../file.c" - puts(_("\t\t\t\t- file must not pre-exist\n")); -#line 172 "../file.c" - puts(_("\t\t\t\t- file must pre-exist\n")); -#line 383 "../usage.c" - puts(_("Options are specified by doubled hyphens and their name or by a single\n" - "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" - puts(_("\n" - "= = = = = = = =\n\n" - "This incarnation of genshell will produce\n" - "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" - puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 900 "../usage.c" - puts(_("\t\t\t\t- is a set membership option\n")); -#line 921 "../usage.c" - puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 385 "../usage.c" - puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 907 "../usage.c" - puts(_("\t\t\t\t- may appear multiple times\n")); -#line 894 "../usage.c" - puts(_("\t\t\t\t- may not be preset\n")); -#line 1312 "../usage.c" - puts(_(" Arg Option-Name Description\n")); -#line 1248 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1306 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1307 "../usage.c" - puts(_(" %3s %s")); -#line 1313 "../usage.c" - puts(_(" %3s %s")); -#line 390 "../usage.c" - puts(_("The '-#' option may omit the hash char\n")); -#line 386 "../usage.c" - puts(_("All arguments are named options.\n")); -#line 974 "../usage.c" - puts(_(" - reading file %s")); -#line 412 "../usage.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 100 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 129 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 906 "../usage.c" - puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 947 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 1195 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 685 "../usage.c" - puts(_("prohibits these options:\n")); -#line 680 "../usage.c" - puts(_("prohibits the option '%s'\n")); -#line 81 "../numeric.c" - puts(_("%s%ld to %ld")); -#line 79 "../numeric.c" - puts(_("%sgreater than or equal to %ld")); -#line 75 "../numeric.c" - puts(_("%s%ld exactly")); -#line 68 "../numeric.c" - puts(_("%sit must lie in one of the ranges:\n")); -#line 68 "../numeric.c" - puts(_("%sit must be in the range:\n")); -#line 88 "../numeric.c" - puts(_(", or\n")); -#line 66 "../numeric.c" - puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); -#line 77 "../numeric.c" - puts(_("%sless than or equal to %ld")); -#line 393 "../usage.c" - puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 655 "../usage.c" - puts(_("requires the option '%s'\n")); -#line 658 "../usage.c" - puts(_("requires these options:\n")); -#line 1324 "../usage.c" - puts(_(" Arg Option-Name Req? Description\n")); -#line 1318 "../usage.c" - puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" - puts(_("or you may use a numeric representation. Preceding these with a '!'\n" - "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" - "will set them all. Multiple entries may be passed as an option\n" - "argument list.\n")); -#line 913 "../usage.c" - puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" - puts(_("The valid \"%s\" option keywords are:\n")); -#line 1155 "../usage.c" - puts(_("The next option supports vendor supported extra options:")); -#line 776 "../usage.c" - puts(_("These additional options are:")); - /* END-USAGE-TEXT */ -} -#endif /* uncompilable code */ -#ifdef __cplusplus -} -#endif -/* ocsptool-args.c ends here */ diff --git a/src/ocsptool-args.def b/src/ocsptool-args.def index b3a62734a7..c0d54e5c07 100644 --- a/src/ocsptool-args.def +++ b/src/ocsptool-args.def @@ -2,12 +2,26 @@ AutoGen Definitions options; prog-name = ocsptool; prog-title = "GnuTLS OCSP tool"; prog-desc = "Program to handle OCSP request/responses."; -detail = "Ocsptool is a program that can parse and print information about -OCSP requests/responses, generate requests and verify responses. -"; +detail = "ocsptool is a program that can parse and print information about +OCSP requests/responses, generate requests and verify responses. Unlike +other GnuTLS applications it outputs DER encoded structures by default +unless the '--outpem' option is specified."; short-usage = "ocsptool [options]\nocsptool --help for usage instructions.\n"; explain = ""; +doc-section = { + ds-type = 'DESCRIPTION'; + ds-format = 'texi'; + ds-text = <<-_EOT_ +@subheading On verification +Responses are typically signed/issued by designated certificates or +certificate authorities and thus this tool requires on verification +the certificate of the issuer or the full certificate chain in order to +determine the appropriate signing authority. The specified certificate +of the issuer is assumed trusted. +_EOT_; +}; + #define INFILE_OPT 1 #define OUTFILE_OPT 1 #define VERBOSE_OPT 1 @@ -19,36 +33,40 @@ flag = { arg-name = "server name|url"; arg-optional; descrip = "Ask an OCSP/HTTP server on a certificate validity"; - flags-must = load-cert; - flags-must = load-issuer; - doc = "Connects to the specified HTTP OCSP server and queries on the validity of the loaded certificate."; + doc = "Connects to the specified HTTP OCSP server and queries on the validity of the loaded certificate. +Its argument can be a URL or a plain server name. It can be combined with --load-chain, where it checks +all certificates in the provided chain, or with --load-cert and +--load-issuer options. The latter checks the provided certificate +against its specified issuer certificate."; }; flag = { name = verify-response; value = e; descrip = "Verify response"; - doc = ""; + doc = "Verifies the provided OCSP response against the system trust +anchors (unless --load-trust is provided). It requires the --load-signer +or --load-chain options to obtain the signer of the OCSP response."; }; flag = { name = request-info; value = i; descrip = "Print information on a OCSP request"; - doc = ""; + doc = "Display detailed information on the provided OCSP request."; }; flag = { name = response-info; value = j; descrip = "Print information on a OCSP response"; - doc = ""; + doc = "Display detailed information on the provided OCSP response."; }; flag = { name = generate-request; value = q; - descrip = "Generate an OCSP request"; + descrip = "Generates an OCSP request"; doc = ""; }; @@ -60,11 +78,19 @@ flag = { doc = ""; }; +flag = { + name = load-chain; + arg-type = file; + file-exists = yes; + descrip = "Reads a set of certificates forming a chain from file"; + doc = ""; +}; + flag = { name = load-issuer; arg-type = file; file-exists = yes; - descrip = "Read issuer certificate from file"; + descrip = "Reads issuer's certificate from file"; doc = ""; }; @@ -72,7 +98,7 @@ flag = { name = load-cert; arg-type = file; file-exists = yes; - descrip = "Read certificate to check from file"; + descrip = "Reads the certificate to check from file"; doc = ""; }; @@ -82,14 +108,16 @@ flag = { file-exists = yes; descrip = "Read OCSP trust anchors from file"; flags-cant = load-signer; - doc = ""; + doc = "When verifying an OCSP response read the trust anchors from the +provided file. When this is not provided, the system's trust anchors will be +used."; }; flag = { name = load-signer; arg-type = file; file-exists = yes; - descrip = "Read OCSP response signer from file"; + descrip = "Reads the OCSP response signer from file"; flags-cant = load-trust; doc = ""; }; @@ -102,12 +130,24 @@ flag = { doc = ""; }; +flag = { + name = outder; + descrip = "Use DER format for output of responses (this is the default)"; + doc = "The output will be in DER encoded format. Unlike other GnuTLS tools, this is the default for this tool"; +}; + +flag = { + name = outpem; + descrip = "Use PEM format for output of responses"; + doc = "The output will be in PEM format."; +}; + flag = { name = load-request; value = Q; arg-type = file; file-exists = yes; - descrip = "Read DER encoded OCSP request from file"; + descrip = "Reads the DER encoded OCSP request from file"; doc = ""; }; @@ -116,7 +156,7 @@ flag = { value = S; arg-type = file; file-exists = yes; - descrip = "Read DER encoded OCSP response from file"; + descrip = "Reads the DER encoded OCSP response from file"; doc = ""; }; @@ -126,6 +166,12 @@ flag = { doc = ""; }; +flag = { + name = verify-allow-broken; + descrip = "Allow broken algorithms, such as MD5 for verification"; + doc = "This can be combined with --verify-response."; +}; + doc-section = { ds-type = 'SEE ALSO'; ds-format = 'texi'; @@ -236,36 +282,35 @@ copy of the server certificate chain. The server is not required to send this information, but this particular one is configured to do so. @example -$ echo | gnutls-cli -p 443 blog.josefsson.org --print-cert > chain.pem +$ echo | gnutls-cli -p 443 blog.josefsson.org --save-cert chain.pem @end example -Use a text editor on @code{chain.pem} to create three files for each -separate certificates, called @code{cert.pem} for the first -certificate for the domain itself, secondly @code{issuer.pem} for the -intermediate certificate and @code{root.pem} for the final root -certificate. - -The domain certificate normally contains a pointer to where the OCSP +The saved certificates normally contain a pointer to where the OCSP responder is located, in the Authority Information Access Information -extension. For example, from @code{certtool -i < cert.pem} there is +extension. For example, from @code{certtool -i < chain.pem} there is this information: @example Authority Information Access Information (not critical): Access Method: 1.3.6.1.5.5.7.48.1 (id-ad-ocsp) - Access Location URI: http://ocsp.CAcert.org/ + Access Location URI: https://ocsp.CAcert.org/ @end example -This means the CA support OCSP queries over HTTP. We are now ready to -create a OCSP request for the certificate. +This means that ocsptool can discover the servers to contact over HTTP. +We can now request information on the chain certificates. @example -$ ocsptool --ask ocsp.CAcert.org --load-issuer issuer.pem \ - --load-cert cert.pem --outfile ocsp-response.der +$ ocsptool --ask --load-chain chain.pem @end example -The request is sent via HTTP to the OCSP server address specified. If the -address is omitted ocsptool will use the address stored in the certificate. +The request is sent via HTTP to the OCSP server address found in +the certificates. It is possible to override the address of the +OCSP server as well as ask information on a particular certificate +using --load-cert and --load-issuer. + +@example +$ ocsptool --ask https://ocsp.CAcert.org/ --load-chain chain.pem +@end example _EOF_; }; diff --git a/src/ocsptool-args.h.bak b/src/ocsptool-args.h.bak deleted file mode 100644 index 0d558ddf18..0000000000 --- a/src/ocsptool-args.h.bak +++ /dev/null @@ -1,247 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (ocsptool-args.h) - * - * It has been AutoGen-ed - * From the definitions ocsptool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This header file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the ocsptool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The ocsptool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * ocsptool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ocsptool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -/** - * This file contains the programmatic interface to the Automated - * Options generated for the ocsptool program. - * These macros are documented in the AutoGen info file in the - * "AutoOpts" chapter. Please refer to that doc for usage help. - */ -#ifndef AUTOOPTS_OCSPTOOL_ARGS_H_GUARD -#define AUTOOPTS_OCSPTOOL_ARGS_H_GUARD 1 -#include "config.h" -#include - -/** - * Ensure that the library used for compiling this generated header is at - * least as new as the version current when the header template was released - * (not counting patch version increments). Also ensure that the oldest - * tolerable version is at least as old as what was current when the header - * template was released. - */ -#define AO_TEMPLATE_VERSION 167937 -#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ - || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) -# error option template version mismatches autoopts/options.h header - Choke Me. -#endif - -/** - * Enumeration of each option type for ocsptool - */ -typedef enum { - INDEX_OPT_DEBUG = 0, - INDEX_OPT_VERBOSE = 1, - INDEX_OPT_INFILE = 2, - INDEX_OPT_OUTFILE = 3, - INDEX_OPT_ASK = 4, - INDEX_OPT_VERIFY_RESPONSE = 5, - INDEX_OPT_REQUEST_INFO = 6, - INDEX_OPT_RESPONSE_INFO = 7, - INDEX_OPT_GENERATE_REQUEST = 8, - INDEX_OPT_NONCE = 9, - INDEX_OPT_LOAD_ISSUER = 10, - INDEX_OPT_LOAD_CERT = 11, - INDEX_OPT_LOAD_TRUST = 12, - INDEX_OPT_LOAD_SIGNER = 13, - INDEX_OPT_INDER = 14, - INDEX_OPT_LOAD_REQUEST = 15, - INDEX_OPT_LOAD_RESPONSE = 16, - INDEX_OPT_IGNORE_ERRORS = 17, - INDEX_OPT_VERSION = 18, - INDEX_OPT_HELP = 19, - INDEX_OPT_MORE_HELP = 20 -} teOptIndex; -/** count of all options for ocsptool */ -#define OPTION_CT 21 -/** ocsptool version */ -#define OCSPTOOL_VERSION "@VERSION@" -/** Full ocsptool version text */ -#define OCSPTOOL_FULL_VERSION "ocsptool @VERSION@" - -/** - * Interface defines for all options. Replace "n" with the UPPER_CASED - * option name (as in the teOptIndex enumeration above). - * e.g. HAVE_OPT(DEBUG) - */ -#define DESC(n) (ocsptoolOptions.pOptDesc[INDEX_OPT_## n]) -/** 'true' if an option has been specified in any way */ -#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) -/** The string argument to an option. The argument type must be \"string\". */ -#define OPT_ARG(n) (DESC(n).optArg.argString) -/** Mask the option state revealing how an option was specified. - * It will be one and only one of \a OPTST_SET, \a OPTST_PRESET, - * \a OPTST_DEFINED, \a OPTST_RESET or zero. - */ -#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) -/** Count of option's occurrances *on the command line*. */ -#define COUNT_OPT(n) (DESC(n).optOccCt) -/** mask of \a OPTST_SET and \a OPTST_DEFINED. */ -#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) -/** 'true' if \a HAVE_OPT would yield 'false'. */ -#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) -/** 'true' if OPTST_DISABLED bit not set. */ -#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) -/** number of stacked option arguments. - * Valid only for stacked option arguments. */ -#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) -/** stacked argument vector. - * Valid only for stacked option arguments. */ -#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) -/** Reset an option. */ -#define CLEAR_OPT(n) STMTS( \ - DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ - if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \ - DESC(n).fOptState |= OPTST_DISABLED; \ - DESC(n).optCookie = NULL ) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Enumeration of ocsptool exit codes - */ -typedef enum { - OCSPTOOL_EXIT_SUCCESS = 0, - OCSPTOOL_EXIT_FAILURE = 1, - OCSPTOOL_EXIT_USAGE_ERROR = 64, - OCSPTOOL_EXIT_LIBOPTS_FAILURE = 70 -} ocsptool_exit_code_t; -/** - * Interface defines for specific options. - * @{ - */ -#define VALUE_OPT_DEBUG 'd' - -#define OPT_VALUE_DEBUG (DESC(DEBUG).optArg.argInt) -#define VALUE_OPT_VERBOSE 'V' -#define VALUE_OPT_INFILE 0x1001 -#define VALUE_OPT_OUTFILE 0x1002 -#define VALUE_OPT_ASK 0x1003 -#define VALUE_OPT_VERIFY_RESPONSE 'e' -#define VALUE_OPT_REQUEST_INFO 'i' -#define VALUE_OPT_RESPONSE_INFO 'j' -#define VALUE_OPT_GENERATE_REQUEST 'q' -#define VALUE_OPT_NONCE 0x1004 -#define VALUE_OPT_LOAD_ISSUER 0x1005 -#define VALUE_OPT_LOAD_CERT 0x1006 -#define VALUE_OPT_LOAD_TRUST 0x1007 -#define VALUE_OPT_LOAD_SIGNER 0x1008 -#define VALUE_OPT_INDER 0x1009 -#define VALUE_OPT_LOAD_REQUEST 'Q' -#define VALUE_OPT_LOAD_RESPONSE 'S' -#define VALUE_OPT_IGNORE_ERRORS 0x100A -/** option flag (value) for help-value option */ -#define VALUE_OPT_HELP 'h' -/** option flag (value) for more-help-value option */ -#define VALUE_OPT_MORE_HELP '!' -/** option flag (value) for version-value option */ -#define VALUE_OPT_VERSION 'v' -/* - * Interface defines not associated with particular options - */ -#define ERRSKIP_OPTERR STMTS(ocsptoolOptions.fOptSet &= ~OPTPROC_ERRSTOP) -#define ERRSTOP_OPTERR STMTS(ocsptoolOptions.fOptSet |= OPTPROC_ERRSTOP) -#define RESTART_OPT(n) STMTS( \ - ocsptoolOptions.curOptIdx = (n); \ - ocsptoolOptions.pzCurOpt = NULL ) -#define START_OPT RESTART_OPT(1) -#define USAGE(c) (*ocsptoolOptions.pUsageProc)(&ocsptoolOptions, c) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * global exported definitions - */ -#include - - -/* * * * * * - * - * Declare the ocsptool option descriptor. - */ -extern tOptions ocsptoolOptions; - -#if defined(ENABLE_NLS) -# ifndef _ -# include -# ifndef HAVE_GETTEXT - extern char * gettext(char const *); -# else -# include -# endif - -# ifndef ATTRIBUTE_FORMAT_ARG -# define ATTRIBUTE_FORMAT_ARG(_a) -# endif - -static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1); -static inline char* aoGetsText(char const* pz) { - if (pz == NULL) return NULL; - return (char*)gettext(pz); -} -# define _(s) aoGetsText(s) -# endif /* _() */ - -# define OPT_NO_XLAT_CFG_NAMES STMTS(ocsptoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT_CFG;) -# define OPT_NO_XLAT_OPT_NAMES STMTS(ocsptoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;) - -# define OPT_XLAT_CFG_NAMES STMTS(ocsptoolOptions.fOptSet &= \ - ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);) -# define OPT_XLAT_OPT_NAMES STMTS(ocsptoolOptions.fOptSet &= \ - ~OPTPROC_NXLAT_OPT;) - -#else /* ENABLE_NLS */ -# define OPT_NO_XLAT_CFG_NAMES -# define OPT_NO_XLAT_OPT_NAMES - -# define OPT_XLAT_CFG_NAMES -# define OPT_XLAT_OPT_NAMES - -# ifndef _ -# define _(_s) _s -# endif -#endif /* ENABLE_NLS */ - -#ifdef __cplusplus -} -#endif -#endif /* AUTOOPTS_OCSPTOOL_ARGS_H_GUARD */ - -/* ocsptool-args.h ends here */ diff --git a/src/ocsptool-common.c b/src/ocsptool-common.c index 2ad91d0838..4286e1484c 100644 --- a/src/ocsptool-common.c +++ b/src/ocsptool-common.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -183,6 +183,9 @@ int send_ocsp_request(const char *server, } url = malloc(data.size + 1); + if (url == NULL) { + return -1; + } memcpy(url, data.data, data.size); url[data.size] = 0; @@ -219,7 +222,8 @@ int send_ocsp_request(const char *server, if (ret < 0 || ud.size == 0) { perror("recv"); - return -1; + ret = -1; + goto cleanup; } socket_bye(&hd, 0); @@ -227,22 +231,29 @@ int send_ocsp_request(const char *server, p = memmem(ud.data, ud.size, "\r\n\r\n", 4); if (p == NULL) { fprintf(stderr, "Cannot interpret HTTP response\n"); - return -1; + ret = -1; + goto cleanup; } p += 4; resp_data->size = ud.size - (p - ud.data); resp_data->data = malloc(resp_data->size); - if (resp_data->data == NULL) - return -1; + if (resp_data->data == NULL) { + perror("recv"); + ret = -1; + goto cleanup; + } memcpy(resp_data->data, p, resp_data->size); + ret = 0; + + cleanup: free(ud.data); if (url != server) free(url); - return 0; + return ret; } void print_ocsp_verify_res(unsigned int output) @@ -303,7 +314,7 @@ void print_ocsp_verify_res(unsigned int output) if (comma) printf(", "); printf("Signer cert expired"); - comma = 1; + /*comma = 1;*/ } } @@ -324,6 +335,8 @@ check_ocsp_response(gnutls_x509_crt_t cert, int ret; unsigned int status, cert_status; time_t rtime, vtime, ntime, now; + char timebuf1[SIMPLE_CTIME_BUF_SIZE]; + char timebuf2[SIMPLE_CTIME_BUF_SIZE]; now = time(0); @@ -356,7 +369,7 @@ check_ocsp_response(gnutls_x509_crt_t cert, ret = gnutls_ocsp_resp_verify_direct(resp, issuer, &status, 0); if (ret < 0) { - fprintf(stderr, "gnutls_ocsp_resp_verify_direct: %s", + fprintf(stderr, "OCSP verification: %s\n", gnutls_strerror(ret)); exit(1); } @@ -378,13 +391,13 @@ check_ocsp_response(gnutls_x509_crt_t cert, &cert_status, &vtime, &ntime, &rtime, NULL); if (ret < 0) { - fprintf(stderr, "reading response: %s", + fprintf(stderr, "reading response: %s\n", gnutls_strerror(ret)); exit(1); } if (cert_status == GNUTLS_OCSP_CERT_REVOKED) { - printf("*** Certificate was revoked at %s", ctime(&rtime)); + printf("*** Certificate was revoked at %s\n", simple_ctime(&rtime, timebuf1)); ret = 0; goto cleanup; } @@ -392,17 +405,16 @@ check_ocsp_response(gnutls_x509_crt_t cert, if (ntime == -1) { if (now - vtime > OCSP_VALIDITY_SECS) { printf - ("*** The OCSP response is old (was issued at: %s) ignoring", - ctime(&vtime)); + ("*** The OCSP response is old (was issued at: %s) ignoring\n", + simple_ctime(&vtime, timebuf1)); ret = -1; goto cleanup; } } else { /* there is a newer OCSP answer, don't trust this one */ if (ntime < now) { - printf - ("*** The OCSP response was issued at: %s, but there is a newer issue at %s", - ctime(&vtime), ctime(&ntime)); + printf("*** The OCSP response was issued at: %s but there is a newer issue at %s\n", + simple_ctime(&vtime, timebuf1), simple_ctime(&ntime, timebuf2)); ret = -1; goto cleanup; } @@ -434,8 +446,8 @@ check_ocsp_response(gnutls_x509_crt_t cert, } finish_ok: - printf("- OCSP server flags certificate not revoked as of %s", - ctime(&vtime)); + printf("- OCSP server flags certificate not revoked as of %s\n", + simple_ctime(&vtime, timebuf1)); ret = 1; cleanup: gnutls_ocsp_resp_deinit(resp); diff --git a/src/ocsptool-common.h b/src/ocsptool-common.h index c8b130e479..76f16b0b92 100644 --- a/src/ocsptool-common.h +++ b/src/ocsptool-common.h @@ -15,11 +15,11 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ -#ifndef OCSPTOOL_COMMON_H -#define OCSPTOOL_COMMON_H +#ifndef GNUTLS_SRC_OCSPTOOL_COMMON_H +#define GNUTLS_SRC_OCSPTOOL_COMMON_H #include @@ -45,4 +45,4 @@ check_ocsp_response(gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer, gnutls_datum_t * data, gnutls_datum_t *nonce, int verbose); -#endif +#endif /* GNUTLS_SRC_OCSPTOOL_COMMON_H */ diff --git a/src/ocsptool.c b/src/ocsptool.c index 2aa01dde18..3b7940962c 100644 --- a/src/ocsptool.c +++ b/src/ocsptool.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2011-2014 Free Software Foundation, Inc. + * Copyright (C) 2016-2017 Red Hat, Inc. * * This file is part of GnuTLS. * @@ -15,7 +16,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -30,17 +31,43 @@ #include #include +#include /* getpass */ + /* Gnulib portability files. */ #include #include +#include #include #include +#include "certtool-common.h" FILE *outfile; +static unsigned int incert_format, outcert_format; +static const char *outfile_name = NULL; /* to delete on exit */ FILE *infile; static unsigned int encoding; unsigned int verbose = 0; +static unsigned int vflags = 0; + +const char *get_pass(void) +{ + return getpass("Enter password: "); +} + +const char *get_confirmed_pass(bool ign) +{ + return getpass("Enter password: "); +} + +void app_exit(int val) +{ + if (val != 0) { + if (outfile_name) + (void)remove(outfile_name); + } + exit(val); +} static void tls_log_func(int level, const char *str) { @@ -61,13 +88,13 @@ static void request_info(void) { gnutls_ocsp_req_t req; int ret; - gnutls_datum_t dat; + gnutls_datum_t dat, rbuf; size_t size; ret = gnutls_ocsp_req_init(&req); if (ret < 0) { fprintf(stderr, "ocsp_req_init: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } if (HAVE_OPT(LOAD_REQUEST)) @@ -78,49 +105,79 @@ static void request_info(void) dat.data = (void *) fread_file(infile, &size); if (dat.data == NULL) { fprintf(stderr, "error reading request\n"); - exit(1); + app_exit(1); } dat.size = size; + ret = gnutls_ocsp_req_import(req, &dat); free(dat.data); if (ret < 0) { fprintf(stderr, "error importing request: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } ret = gnutls_ocsp_req_print(req, GNUTLS_OCSP_PRINT_FULL, &dat); if (ret != 0) { fprintf(stderr, "ocsp_req_print: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); + } + + if (HAVE_OPT(OUTFILE)) { + ret = gnutls_ocsp_req_export(req, &rbuf); + if (ret < 0) { + fprintf(stderr, "error exporting request: %s\n", + gnutls_strerror(ret)); + app_exit(1); + } + + if (outcert_format == GNUTLS_X509_FMT_PEM) { + fprintf(stderr, "Cannot export requests into PEM form\n"); + app_exit(1); + } else { + fwrite(rbuf.data, 1, rbuf.size, outfile); + } + + gnutls_free(rbuf.data); + } else { + printf("%.*s", dat.size, dat.data); } - printf("%.*s", dat.size, dat.data); gnutls_free(dat.data); gnutls_ocsp_req_deinit(req); } -static void _response_info(const gnutls_datum_t * data) +static void _response_info(const gnutls_datum_t * data, unsigned force_print) { gnutls_ocsp_resp_t resp; int ret; - gnutls_datum_t buf; + gnutls_datum_t buf, rbuf; + + if (data->size == 0) { + fprintf(stderr, "Received empty response\n"); + app_exit(1); + } ret = gnutls_ocsp_resp_init(&resp); if (ret < 0) { fprintf(stderr, "ocsp_resp_init: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } - ret = gnutls_ocsp_resp_import(resp, data); + ret = gnutls_ocsp_resp_import2(resp, data, incert_format); + if (ret == GNUTLS_E_BASE64_UNEXPECTED_HEADER_ERROR) { + int ret2 = gnutls_ocsp_resp_import(resp, data); + if (ret2 >= 0) + ret = ret2; + } if (ret < 0) { - fprintf(stderr, "importing response: %s\n", + fprintf(stderr, "error importing response: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } if (ENABLED_OPT(VERBOSE)) @@ -134,10 +191,39 @@ static void _response_info(const gnutls_datum_t * data) if (ret != 0) { fprintf(stderr, "ocsp_resp_print: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); + } + + if (HAVE_OPT(OUTFILE)) { + ret = gnutls_ocsp_resp_export2(resp, &rbuf, outcert_format); + if (ret < 0) { + fprintf(stderr, "error exporting response: %s\n", + gnutls_strerror(ret)); + app_exit(1); + } + + if (outcert_format == GNUTLS_X509_FMT_PEM) + fprintf(outfile, "%.*s\n", buf.size, buf.data); + + fwrite(rbuf.data, 1, rbuf.size, outfile); + + if (outcert_format == GNUTLS_X509_FMT_PEM) + fprintf(outfile, "\n"); + gnutls_free(rbuf.data); } - printf("%.*s", buf.size, buf.data); + if (force_print || !HAVE_OPT(OUTFILE)) { + ret = gnutls_ocsp_resp_export2(resp, &rbuf, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fprintf(stderr, "error exporting response: %s\n", + gnutls_strerror(ret)); + app_exit(1); + } + + fprintf(stdout, "%.*s\n", buf.size, buf.data); + fwrite(rbuf.data, 1, rbuf.size, stdout); + gnutls_free(rbuf.data); + } gnutls_free(buf.data); gnutls_ocsp_resp_deinit(resp); @@ -156,135 +242,40 @@ static void response_info(void) dat.data = (void *) fread_file(infile, &size); if (dat.data == NULL) { fprintf(stderr, "error reading response\n"); - exit(1); + app_exit(1); } dat.size = size; - _response_info(&dat); - gnutls_free(dat.data); -} - -static gnutls_x509_crt_t load_issuer(void) -{ - gnutls_x509_crt_t crt; - int ret; - gnutls_datum_t dat; - size_t size; - - if (!HAVE_OPT(LOAD_ISSUER)) { - fprintf(stderr, "missing --load-issuer\n"); - exit(1); - } - - ret = gnutls_x509_crt_init(&crt); - if (ret < 0) { - fprintf(stderr, "crt_init: %s\n", gnutls_strerror(ret)); - exit(1); - } - - dat.data = (void *) read_binary_file(OPT_ARG(LOAD_ISSUER), &size); - dat.size = size; - - if (!dat.data) { - fprintf(stderr, "error reading --load-issuer: %s\n", - OPT_ARG(LOAD_ISSUER)); - exit(1); - } - - ret = gnutls_x509_crt_import(crt, &dat, encoding); - free(dat.data); - if (ret < 0) { - fprintf(stderr, "error importing --load-issuer: %s: %s\n", - OPT_ARG(LOAD_ISSUER), gnutls_strerror(ret)); - exit(1); - } - - return crt; -} - -static gnutls_x509_crt_t load_signer(void) -{ - gnutls_x509_crt_t crt; - int ret; - gnutls_datum_t dat; - size_t size; - - if (!HAVE_OPT(LOAD_SIGNER)) { - fprintf(stderr, "missing --load-signer\n"); - exit(1); - } - - ret = gnutls_x509_crt_init(&crt); - if (ret < 0) { - fprintf(stderr, "crt_init: %s\n", gnutls_strerror(ret)); - exit(1); - } - - dat.data = (void *) read_binary_file(OPT_ARG(LOAD_SIGNER), &size); - dat.size = size; - - if (!dat.data) { - fprintf(stderr, "error reading --load-signer: %s\n", - OPT_ARG(LOAD_SIGNER)); - exit(1); - } - - ret = gnutls_x509_crt_import(crt, &dat, encoding); - free(dat.data); - if (ret < 0) { - fprintf(stderr, "importing --load-signer: %s: %s\n", - OPT_ARG(LOAD_SIGNER), gnutls_strerror(ret)); - exit(1); - } + _response_info(&dat, 0); - return crt; + gnutls_free(dat.data); } -static gnutls_x509_crt_t load_cert(void) +static void generate_request(gnutls_datum_t *nonce) { - gnutls_x509_crt_t crt; - int ret; gnutls_datum_t dat; - size_t size; + gnutls_x509_crt_t cert, issuer; + common_info_st info; + memset(&info, 0, sizeof(info)); + info.verbose = verbose; if (!HAVE_OPT(LOAD_CERT)) { - fprintf(stderr, "missing --load-cert\n"); - exit(1); + fprintf(stderr, "Missing option --load-cert\n"); + app_exit(1); } + info.cert = OPT_ARG(LOAD_CERT); - ret = gnutls_x509_crt_init(&crt); - if (ret < 0) { - fprintf(stderr, "crt_init: %s\n", gnutls_strerror(ret)); - exit(1); - } + cert = load_cert(1, &info); - dat.data = (void *) read_binary_file(OPT_ARG(LOAD_CERT), &size); - dat.size = size; - - if (!dat.data) { - fprintf(stderr, "error reading --load-cert: %s\n", - OPT_ARG(LOAD_CERT)); - exit(1); - } - - ret = gnutls_x509_crt_import(crt, &dat, encoding); - free(dat.data); - if (ret < 0) { - fprintf(stderr, "importing --load-cert: %s: %s\n", - OPT_ARG(LOAD_CERT), gnutls_strerror(ret)); - exit(1); + memset(&info, 0, sizeof(info)); + info.verbose = verbose; + if (!HAVE_OPT(LOAD_ISSUER)) { + fprintf(stderr, "Missing option --load-issuer\n"); + app_exit(1); } + info.cert = OPT_ARG(LOAD_ISSUER); - return crt; -} - -static void generate_request(gnutls_datum_t *nonce) -{ - gnutls_datum_t dat; - gnutls_x509_crt_t cert, issuer; - - cert = load_cert(); - issuer = load_issuer(); + issuer = load_cert(1, &info); _generate_request(cert, issuer, &dat, nonce); @@ -297,7 +288,7 @@ static void generate_request(gnutls_datum_t *nonce) static int _verify_response(gnutls_datum_t * data, gnutls_datum_t * nonce, - gnutls_x509_crt_t signer) + gnutls_x509_crt_t signer, unsigned print_resp) { gnutls_ocsp_resp_t resp; int ret; @@ -312,14 +303,28 @@ static int _verify_response(gnutls_datum_t * data, gnutls_datum_t * nonce, if (ret < 0) { fprintf(stderr, "ocsp_resp_init: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } ret = gnutls_ocsp_resp_import(resp, data); if (ret < 0) { fprintf(stderr, "importing response: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); + } + + if (print_resp) { + ret = + gnutls_ocsp_resp_print(resp, GNUTLS_OCSP_PRINT_COMPACT, + &dat); + if (ret < 0) { + fprintf(stderr, "ocsp_resp_print: %s\n", + gnutls_strerror(ret)); + app_exit(1); + } + + printf("%s\n", dat.data); + gnutls_free(dat.data); } if (nonce) { @@ -329,13 +334,13 @@ static int _verify_response(gnutls_datum_t * data, gnutls_datum_t * nonce, if (ret < 0) { fprintf(stderr, "could not read response's nonce: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } if (rnonce.size != nonce->size || memcmp(nonce->data, rnonce.data, nonce->size) != 0) { fprintf(stderr, "nonce in the response doesn't match\n"); - exit(1); + app_exit(1); } gnutls_free(rnonce.data); @@ -347,7 +352,7 @@ static int _verify_response(gnutls_datum_t * data, gnutls_datum_t * nonce, if (dat.data == NULL) { fprintf(stderr, "error reading --load-trust: %s\n", OPT_ARG(LOAD_TRUST)); - exit(1); + app_exit(1); } dat.size = size; @@ -355,7 +360,7 @@ static int _verify_response(gnutls_datum_t * data, gnutls_datum_t * nonce, if (ret < 0) { fprintf(stderr, "gnutls_x509_trust_list_init: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } ret = @@ -365,7 +370,7 @@ static int _verify_response(gnutls_datum_t * data, gnutls_datum_t * nonce, if (ret < 0 || x509_ncas < 1) { fprintf(stderr, "error parsing CAs: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } if (HAVE_OPT(VERBOSE)) { @@ -382,7 +387,7 @@ static int _verify_response(gnutls_datum_t * data, gnutls_datum_t * nonce, fprintf(stderr, "gnutls_x509_crt_print: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } printf("%d: %.*s\n", i, out.size, @@ -398,18 +403,18 @@ static int _verify_response(gnutls_datum_t * data, gnutls_datum_t * nonce, if (ret < 0) { fprintf(stderr, "gnutls_x509_trust_add_cas: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } if (HAVE_OPT(VERBOSE)) fprintf(stdout, "Loaded %d trust anchors\n", x509_ncas); - ret = gnutls_ocsp_resp_verify(resp, list, &verify, 0); + ret = gnutls_ocsp_resp_verify(resp, list, &verify, vflags); if (ret < 0) { fprintf(stderr, "gnutls_ocsp_resp_verify: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } } else if (signer) { if (HAVE_OPT(VERBOSE)) { @@ -423,7 +428,7 @@ static int _verify_response(gnutls_datum_t * data, gnutls_datum_t * nonce, fprintf(stderr, "gnutls_x509_crt_print: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } printf("Signer: %.*s\n", out.size, out.data); @@ -433,19 +438,19 @@ static int _verify_response(gnutls_datum_t * data, gnutls_datum_t * nonce, ret = gnutls_ocsp_resp_verify_direct(resp, signer, &verify, - 0); + vflags); if (ret < 0) { fprintf(stderr, - "gnutls_ocsp_resp_verify_direct: %s\n", + "\nVerifying OCSP Response: %s\n", gnutls_strerror(ret)); - exit(1); + app_exit(1); } } else { fprintf(stderr, "missing --load-trust or --load-signer\n"); - exit(1); + app_exit(1); } - printf("Verifying OCSP Response: "); + printf("\nVerifying OCSP Response: "); print_ocsp_verify_res(verify); printf(".\n"); @@ -454,12 +459,68 @@ static int _verify_response(gnutls_datum_t * data, gnutls_datum_t * nonce, return verify; } +#define MAX_CHAIN_SIZE 8 + +static +unsigned load_chain(gnutls_x509_crt_t chain[MAX_CHAIN_SIZE]) +{ + if (HAVE_OPT(LOAD_CHAIN)) { + common_info_st info; + size_t list_size; + + memset(&info, 0, sizeof(info)); + gnutls_x509_crt_t *list; + unsigned i; + + info.verbose = verbose; + info.cert = OPT_ARG(LOAD_CHAIN); + info.sort_chain = 1; + list = load_cert_list(1, &list_size, &info); + + if (list_size > MAX_CHAIN_SIZE) { + fprintf(stderr, "Too many certificates in chain\n"); + app_exit(1); + } + + for (i=0;i 2 && HAVE_OPT(OUTFILE)) { + if (outcert_format != GNUTLS_X509_FMT_PEM) { + fprintf(stderr, "error: You cannot combine --outfile when more than 2 certificates are found in a chain\n"); + fprintf(stderr, "Did you mean to use --outpem?\n"); + app_exit(1); + } + } - cert = load_cert(); - issuer = load_issuer(); + counter = chain_size; + while(counter > 1) { + if (ENABLED_OPT(NONCE)) { + ret = + gnutls_rnd(GNUTLS_RND_NONCE, nonce.data, nonce.size); + if (ret < 0) { + fprintf(stderr, "gnutls_rnd: %s\n", + gnutls_strerror(ret)); + app_exit(1); + } + n = &nonce; + } else { + n = NULL; + } - if (ENABLED_OPT(NONCE)) { ret = - gnutls_rnd(GNUTLS_RND_NONCE, nonce.data, nonce.size); + send_ocsp_request(url, chain[idx], chain[idx+1], &resp_data, n); if (ret < 0) { - fprintf(stderr, "gnutls_rnd: %s\n", - gnutls_strerror(ret)); - exit(1); + fprintf(stderr, "Cannot send OCSP request\n"); + app_exit(1); } - n = &nonce; - } else { - n = NULL; - } + _response_info(&resp_data, 1); - ret = - send_ocsp_request(url, cert, issuer, &resp_data, n); - if (ret < 0) { - fprintf(stderr, "Cannot send OCSP request\n"); - exit(1); - } + if (HAVE_OPT(LOAD_TRUST)) { + v = _verify_response(&resp_data, n, NULL, 0); + } else if (HAVE_OPT(LOAD_SIGNER)) { + memset(&info, 0, sizeof(info)); + info.verbose = verbose; + info.cert = OPT_ARG(LOAD_SIGNER); - _response_info(&resp_data); + v = _verify_response(&resp_data, n, load_cert(1, &info), 0); + } else { + if (!HAVE_OPT(LOAD_CHAIN)) + fprintf(stderr, + "\nAssuming response's signer = issuer (use --load-signer to override).\n"); - if (HAVE_OPT(LOAD_TRUST)) { - v = _verify_response(&resp_data, n, NULL); - } else if (HAVE_OPT(LOAD_SIGNER)) { - v = _verify_response(&resp_data, n, load_signer()); - } else { - fprintf(stderr, - "\nAssuming response's signer = issuer (use --load-signer to override).\n"); + v = _verify_response(&resp_data, n, chain[idx+1], 0); + } - v = _verify_response(&resp_data, n, issuer); - } + total_v += v; - if (HAVE_OPT(OUTFILE) && (v == 0 || HAVE_OPT(IGNORE_ERRORS))) { - fwrite(resp_data.data, 1, resp_data.size, outfile); + free(resp_data.data); + idx++; + counter--; + printf("\n"); } - free(resp_data.data); - gnutls_x509_crt_deinit(issuer); - gnutls_x509_crt_deinit(cert); + for (idx = 0;idx - * - * p11tool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * p11tool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef __doxygen__ -#define OPTION_CODE_COMPILE 1 -#include "p11tool-args.h" -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern FILE * option_usage_fp; -#define zCopyright (p11tool_opt_strs+0) -#define zLicenseDescrip (p11tool_opt_strs+288) - - -#ifndef NULL -# define NULL 0 -#endif - -/** - * static const strings for p11tool options - */ -static char const p11tool_opt_strs[5757] = -/* 0 */ "p11tool @VERSION@\n" - "Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n" - "This is free software. It is licensed for use, modification and\n" - "redistribution under the terms of the GNU General Public License,\n" - "version 3 or later \n\0" -/* 288 */ "p11tool is free software: you can redistribute it and/or modify it under\n" - "the terms of the GNU General Public License as published by the Free\n" - "Software Foundation, either version 3 of the License, or (at your option)\n" - "any later version.\n\n" - "p11tool is distributed in the hope that it will be useful, but WITHOUT ANY\n" - "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n" - "FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n" - "details.\n\n" - "You should have received a copy of the GNU General Public License along\n" - "with this program. If not, see .\n\0" -/* 891 */ "Tokens:\0" -/* 899 */ "List all available tokens\0" -/* 925 */ "LIST_TOKENS\0" -/* 937 */ "list-tokens\0" -/* 949 */ "List the URLs available tokens\0" -/* 980 */ "LIST_TOKEN_URLS\0" -/* 996 */ "list-token-urls\0" -/* 1012 */ "List all available mechanisms in a token\0" -/* 1053 */ "LIST_MECHANISMS\0" -/* 1069 */ "list-mechanisms\0" -/* 1085 */ "Initializes a PKCS #11 token\0" -/* 1114 */ "INITIALIZE\0" -/* 1125 */ "initialize\0" -/* 1136 */ "Initializes/Resets a PKCS #11 token user PIN\0" -/* 1181 */ "INITIALIZE_PIN\0" -/* 1196 */ "initialize-pin\0" -/* 1211 */ "Initializes/Resets a PKCS #11 token security officer PIN\0" -/* 1268 */ "INITIALIZE_SO_PIN\0" -/* 1286 */ "initialize-so-pin\0" -/* 1304 */ "Specify the PIN to use on token initialization\0" -/* 1351 */ "SET_PIN\0" -/* 1359 */ "set-pin\0" -/* 1367 */ "Specify the Security Officer's PIN to use on token initialization\0" -/* 1433 */ "SET_SO_PIN\0" -/* 1444 */ "set-so-pin\0" -/* 1455 */ "Object listing:\0" -/* 1471 */ "List all available objects in a token\0" -/* 1509 */ "LIST_ALL\0" -/* 1518 */ "list-all\0" -/* 1527 */ "List all available certificates in a token\0" -/* 1570 */ "LIST_ALL_CERTS\0" -/* 1585 */ "list-all-certs\0" -/* 1600 */ "List all certificates that have an associated private key\0" -/* 1658 */ "LIST_CERTS\0" -/* 1669 */ "list-certs\0" -/* 1680 */ "List all available private keys in a token\0" -/* 1723 */ "LIST_ALL_PRIVKEYS\0" -/* 1741 */ "list-all-privkeys\0" -/* 1759 */ "an alias for the 'list-all-privkeys' option\0" -/* 1803 */ "list-privkeys\0" -/* 1817 */ "list-keys\0" -/* 1827 */ "List all available certificates marked as trusted\0" -/* 1877 */ "LIST_ALL_TRUSTED\0" -/* 1894 */ "list-all-trusted\0" -/* 1911 */ "Export the object specified by the URL\0" -/* 1950 */ "EXPORT\0" -/* 1957 */ "export\0" -/* 1964 */ "Export the certificate object specified by the URL\0" -/* 2015 */ "EXPORT_STAPLED\0" -/* 2030 */ "export-stapled\0" -/* 2045 */ "Export the certificate specified by the URL and its chain of trust\0" -/* 2112 */ "EXPORT_CHAIN\0" -/* 2125 */ "export-chain\0" -/* 2138 */ "Export the public key for a private key\0" -/* 2178 */ "EXPORT_PUBKEY\0" -/* 2192 */ "export-pubkey\0" -/* 2206 */ "List information on an available object in a token\0" -/* 2257 */ "INFO\0" -/* 2262 */ "info\0" -/* 2267 */ "an alias for the 'mark-trusted' option\0" -/* 2306 */ "trusted\0" -/* 2314 */ "an alias for the 'mark-distrusted' option\0" -/* 2356 */ "distrusted\0" -/* 2367 */ "Key generation:\0" -/* 2383 */ "Generate an RSA private-public key pair\0" -/* 2423 */ "GENERATE_RSA\0" -/* 2436 */ "generate-rsa\0" -/* 2449 */ "Generate a DSA private-public key pair\0" -/* 2488 */ "GENERATE_DSA\0" -/* 2501 */ "generate-dsa\0" -/* 2514 */ "Generate an ECDSA private-public key pair\0" -/* 2556 */ "GENERATE_ECC\0" -/* 2569 */ "generate-ecc\0" -/* 2582 */ "Specify the number of bits for the key generate\0" -/* 2630 */ "BITS\0" -/* 2635 */ "bits\0" -/* 2640 */ "Specify the curve used for EC key generation\0" -/* 2685 */ "CURVE\0" -/* 2691 */ "curve\0" -/* 2697 */ "Specify the security level\0" -/* 2724 */ "SEC_PARAM\0" -/* 2734 */ "sec-param\0" -/* 2744 */ "Writing objects:\0" -/* 2761 */ "Set the CKA_ID (in hex) for the specified by the URL object\0" -/* 2821 */ "SET_ID\0" -/* 2828 */ "set-id\0" -/* 2835 */ "Set the CKA_LABEL for the specified by the URL object\0" -/* 2889 */ "SET_LABEL\0" -/* 2899 */ "set-label\0" -/* 2909 */ "Writes the loaded objects to a PKCS #11 token\0" -/* 2955 */ "WRITE\0" -/* 2961 */ "write\0" -/* 2967 */ "Deletes the objects matching the given PKCS #11 URL\0" -/* 3019 */ "DELETE\0" -/* 3026 */ "delete\0" -/* 3033 */ "Sets a label for the write operation\0" -/* 3070 */ "LABEL\0" -/* 3076 */ "label\0" -/* 3082 */ "Sets an ID for the write operation\0" -/* 3117 */ "ID\0" -/* 3120 */ "id\0" -/* 3123 */ "Marks the generated key to be a wrapping key\0" -/* 3168 */ "MARK_WRAP\0" -/* 3178 */ "no-mark-wrap\0" -/* 3191 */ "no\0" -/* 3194 */ "Marks the object to be written as trusted\0" -/* 3236 */ "MARK_TRUSTED\0" -/* 3249 */ "no-mark-trusted\0" -/* 3265 */ "When retrieving objects, it requires the objects to be distrusted\n" - "(blacklisted)\0" -/* 3345 */ "MARK_DISTRUSTED\0" -/* 3361 */ "mark-distrusted\0" -/* 3377 */ "Marks the object to be written for decryption\0" -/* 3423 */ "MARK_DECRYPT\0" -/* 3436 */ "no-mark-decrypt\0" -/* 3452 */ "Marks the object to be written for signature generation\0" -/* 3508 */ "MARK_SIGN\0" -/* 3518 */ "no-mark-sign\0" -/* 3531 */ "Marks the object to be written as a CA\0" -/* 3570 */ "MARK_CA\0" -/* 3578 */ "no-mark-ca\0" -/* 3589 */ "Marks the object to be written as private\0" -/* 3631 */ "MARK_PRIVATE\0" -/* 3644 */ "no-mark-private\0" -/* 3660 */ "an alias for the 'mark-ca' option\0" -/* 3694 */ "ca\0" -/* 3697 */ "an alias for the 'mark-private' option\0" -/* 3736 */ "private\0" -/* 3744 */ "Provide a hex encoded secret key\0" -/* 3777 */ "SECRET_KEY\0" -/* 3788 */ "secret-key\0" -/* 3799 */ "Private key file to use\0" -/* 3823 */ "LOAD_PRIVKEY\0" -/* 3836 */ "load-privkey\0" -/* 3849 */ "Public key file to use\0" -/* 3872 */ "LOAD_PUBKEY\0" -/* 3884 */ "load-pubkey\0" -/* 3896 */ "Certificate file to use\0" -/* 3920 */ "LOAD_CERTIFICATE\0" -/* 3937 */ "load-certificate\0" -/* 3954 */ "Other options:\0" -/* 3969 */ "Enable debugging\0" -/* 3986 */ "DEBUG\0" -/* 3992 */ "debug\0" -/* 3998 */ "Output file\0" -/* 4010 */ "OUTFILE\0" -/* 4018 */ "outfile\0" -/* 4026 */ "Force (user) login to token\0" -/* 4054 */ "LOGIN\0" -/* 4060 */ "no-login\0" -/* 4069 */ "Force security officer login to token\0" -/* 4107 */ "SO_LOGIN\0" -/* 4116 */ "no-so-login\0" -/* 4128 */ "an alias for the 'so-login' option\0" -/* 4163 */ "admin-login\0" -/* 4175 */ "Tests the signature operation of the provided object\0" -/* 4228 */ "TEST_SIGN\0" -/* 4238 */ "test-sign\0" -/* 4248 */ "Generate random data\0" -/* 4269 */ "GENERATE_RANDOM\0" -/* 4285 */ "generate-random\0" -/* 4301 */ "Use PKCS #8 format for private keys\0" -/* 4337 */ "PKCS8\0" -/* 4343 */ "pkcs8\0" -/* 4349 */ "Use DER/RAW format for input\0" -/* 4378 */ "INDER\0" -/* 4384 */ "no-inder\0" -/* 4393 */ "an alias for the 'inder' option\0" -/* 4425 */ "inraw\0" -/* 4431 */ "Use DER format for output certificates, private keys, and DH parameters\0" -/* 4503 */ "OUTDER\0" -/* 4510 */ "no-outder\0" -/* 4520 */ "an alias for the 'outder' option\0" -/* 4553 */ "outraw\0" -/* 4560 */ "Specify the PKCS #11 provider library\0" -/* 4598 */ "PROVIDER\0" -/* 4607 */ "provider\0" -/* 4616 */ "Specify parameters for the PKCS #11 provider library\0" -/* 4669 */ "PROVIDER_OPTS\0" -/* 4683 */ "provider-opts\0" -/* 4697 */ "Print detailed URLs\0" -/* 4717 */ "DETAILED_URL\0" -/* 4730 */ "no-detailed-url\0" -/* 4746 */ "Print a compact listing using only the URLs\0" -/* 4790 */ "ONLY_URLS\0" -/* 4800 */ "only-urls\0" -/* 4810 */ "Disable all interaction with the tool\0" -/* 4848 */ "BATCH\0" -/* 4854 */ "batch\0" -/* 4860 */ "display extended usage information and exit\0" -/* 4904 */ "help\0" -/* 4909 */ "extended usage information passed thru pager\0" -/* 4954 */ "more-help\0" -/* 4964 */ "output version information and exit\0" -/* 5000 */ "version\0" -/* 5008 */ "P11TOOL\0" -/* 5016 */ "p11tool - GnuTLS PKCS #11 tool\n" - "Usage: %s [ - [] | --[{=| }] ]... [url]\n\0" -/* 5111 */ "@PACKAGE_BUGREPORT@\0" -/* 5131 */ "\n\0" -/* 5133 */ "Program that allows operations on PKCS #11 smart cards and security\n" - "modules.\n\n" - "To use PKCS #11 tokens with GnuTLS the p11-kit configuration files need to\n" - "be setup. That is create a .module file in /etc/pkcs11/modules with the\n" - "contents 'module: /path/to/pkcs11.so'. Alternatively the configuration\n" - "file /etc/gnutls/pkcs11.conf has to exist and contain a number of lines of\n" - "the form 'load=/usr/lib/opensc-pkcs11.so'.\n\n" - "You can provide the PIN to be used for the PKCS #11 operations with the\n" - "environment variables GNUTLS_PIN and GNUTLS_SO_PIN.\n\0" -/* 5675 */ "p11tool @VERSION@\0" -/* 5693 */ "p11tool [options] [url]\n" - "p11tool --help for usage instructions.\n"; - -/** - * token_related_options option description: - */ -/** token_related_options option separation text */ -#define TOKEN_RELATED_OPTIONS_DESC (p11tool_opt_strs+891) -#define TOKEN_RELATED_OPTIONS_FLAGS (OPTST_DOCUMENT | OPTST_NO_INIT) - -/** - * list-tokens option description: - */ -/** Descriptive text for the list-tokens option */ -#define LIST_TOKENS_DESC (p11tool_opt_strs+899) -/** Upper-cased name for the list-tokens option */ -#define LIST_TOKENS_NAME (p11tool_opt_strs+925) -/** Name string for the list-tokens option */ -#define LIST_TOKENS_name (p11tool_opt_strs+937) -/** Compiled in flag settings for the list-tokens option */ -#define LIST_TOKENS_FLAGS (OPTST_DISABLED) - -/** - * list-token-urls option description: - */ -/** Descriptive text for the list-token-urls option */ -#define LIST_TOKEN_URLS_DESC (p11tool_opt_strs+949) -/** Upper-cased name for the list-token-urls option */ -#define LIST_TOKEN_URLS_NAME (p11tool_opt_strs+980) -/** Name string for the list-token-urls option */ -#define LIST_TOKEN_URLS_name (p11tool_opt_strs+996) -/** Compiled in flag settings for the list-token-urls option */ -#define LIST_TOKEN_URLS_FLAGS (OPTST_DISABLED) - -/** - * list-mechanisms option description: - */ -/** Descriptive text for the list-mechanisms option */ -#define LIST_MECHANISMS_DESC (p11tool_opt_strs+1012) -/** Upper-cased name for the list-mechanisms option */ -#define LIST_MECHANISMS_NAME (p11tool_opt_strs+1053) -/** Name string for the list-mechanisms option */ -#define LIST_MECHANISMS_name (p11tool_opt_strs+1069) -/** Compiled in flag settings for the list-mechanisms option */ -#define LIST_MECHANISMS_FLAGS (OPTST_DISABLED) - -/** - * initialize option description: - */ -/** Descriptive text for the initialize option */ -#define INITIALIZE_DESC (p11tool_opt_strs+1085) -/** Upper-cased name for the initialize option */ -#define INITIALIZE_NAME (p11tool_opt_strs+1114) -/** Name string for the initialize option */ -#define INITIALIZE_name (p11tool_opt_strs+1125) -/** Compiled in flag settings for the initialize option */ -#define INITIALIZE_FLAGS (OPTST_DISABLED) - -/** - * initialize-pin option description: - */ -/** Descriptive text for the initialize-pin option */ -#define INITIALIZE_PIN_DESC (p11tool_opt_strs+1136) -/** Upper-cased name for the initialize-pin option */ -#define INITIALIZE_PIN_NAME (p11tool_opt_strs+1181) -/** Name string for the initialize-pin option */ -#define INITIALIZE_PIN_name (p11tool_opt_strs+1196) -/** Compiled in flag settings for the initialize-pin option */ -#define INITIALIZE_PIN_FLAGS (OPTST_DISABLED) - -/** - * initialize-so-pin option description: - */ -/** Descriptive text for the initialize-so-pin option */ -#define INITIALIZE_SO_PIN_DESC (p11tool_opt_strs+1211) -/** Upper-cased name for the initialize-so-pin option */ -#define INITIALIZE_SO_PIN_NAME (p11tool_opt_strs+1268) -/** Name string for the initialize-so-pin option */ -#define INITIALIZE_SO_PIN_name (p11tool_opt_strs+1286) -/** Compiled in flag settings for the initialize-so-pin option */ -#define INITIALIZE_SO_PIN_FLAGS (OPTST_DISABLED) - -/** - * set-pin option description: - */ -/** Descriptive text for the set-pin option */ -#define SET_PIN_DESC (p11tool_opt_strs+1304) -/** Upper-cased name for the set-pin option */ -#define SET_PIN_NAME (p11tool_opt_strs+1351) -/** Name string for the set-pin option */ -#define SET_PIN_name (p11tool_opt_strs+1359) -/** Compiled in flag settings for the set-pin option */ -#define SET_PIN_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * set-so-pin option description: - */ -/** Descriptive text for the set-so-pin option */ -#define SET_SO_PIN_DESC (p11tool_opt_strs+1367) -/** Upper-cased name for the set-so-pin option */ -#define SET_SO_PIN_NAME (p11tool_opt_strs+1433) -/** Name string for the set-so-pin option */ -#define SET_SO_PIN_name (p11tool_opt_strs+1444) -/** Compiled in flag settings for the set-so-pin option */ -#define SET_SO_PIN_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * object_list_related_options option description: - */ -/** object_list_related_options option separation text */ -#define OBJECT_LIST_RELATED_OPTIONS_DESC (p11tool_opt_strs+1455) -#define OBJECT_LIST_RELATED_OPTIONS_FLAGS (OPTST_DOCUMENT | OPTST_NO_INIT) - -/** - * list-all option description: - */ -/** Descriptive text for the list-all option */ -#define LIST_ALL_DESC (p11tool_opt_strs+1471) -/** Upper-cased name for the list-all option */ -#define LIST_ALL_NAME (p11tool_opt_strs+1509) -/** Name string for the list-all option */ -#define LIST_ALL_name (p11tool_opt_strs+1518) -/** Compiled in flag settings for the list-all option */ -#define LIST_ALL_FLAGS (OPTST_DISABLED) - -/** - * list-all-certs option description: - */ -/** Descriptive text for the list-all-certs option */ -#define LIST_ALL_CERTS_DESC (p11tool_opt_strs+1527) -/** Upper-cased name for the list-all-certs option */ -#define LIST_ALL_CERTS_NAME (p11tool_opt_strs+1570) -/** Name string for the list-all-certs option */ -#define LIST_ALL_CERTS_name (p11tool_opt_strs+1585) -/** Compiled in flag settings for the list-all-certs option */ -#define LIST_ALL_CERTS_FLAGS (OPTST_DISABLED) - -/** - * list-certs option description: - */ -/** Descriptive text for the list-certs option */ -#define LIST_CERTS_DESC (p11tool_opt_strs+1600) -/** Upper-cased name for the list-certs option */ -#define LIST_CERTS_NAME (p11tool_opt_strs+1658) -/** Name string for the list-certs option */ -#define LIST_CERTS_name (p11tool_opt_strs+1669) -/** Compiled in flag settings for the list-certs option */ -#define LIST_CERTS_FLAGS (OPTST_DISABLED) - -/** - * list-all-privkeys option description: - */ -/** Descriptive text for the list-all-privkeys option */ -#define LIST_ALL_PRIVKEYS_DESC (p11tool_opt_strs+1680) -/** Upper-cased name for the list-all-privkeys option */ -#define LIST_ALL_PRIVKEYS_NAME (p11tool_opt_strs+1723) -/** Name string for the list-all-privkeys option */ -#define LIST_ALL_PRIVKEYS_name (p11tool_opt_strs+1741) -/** Compiled in flag settings for the list-all-privkeys option */ -#define LIST_ALL_PRIVKEYS_FLAGS (OPTST_DISABLED) - -/** - * list-privkeys option description: - */ -/** Descriptive text for the list-privkeys option */ -#define LIST_PRIVKEYS_DESC (p11tool_opt_strs+1759) -#define LIST_PRIVKEYS_NAME NULL -/** Unmodified name string for the list-privkeys option */ -#define LIST_PRIVKEYS_name (p11tool_opt_strs+1803) -/** Compiled in flag settings for the list-privkeys option */ -#define LIST_PRIVKEYS_FLAGS (LIST_ALL_PRIVKEYS_FLAGS | OPTST_ALIAS) - -/** - * list-keys option description: - */ -/** Descriptive text for the list-keys option */ -#define LIST_KEYS_DESC (p11tool_opt_strs+1759) -#define LIST_KEYS_NAME NULL -/** Unmodified name string for the list-keys option */ -#define LIST_KEYS_name (p11tool_opt_strs+1817) -/** Compiled in flag settings for the list-keys option */ -#define LIST_KEYS_FLAGS (LIST_ALL_PRIVKEYS_FLAGS | OPTST_ALIAS) - -/** - * list-all-trusted option description: - */ -/** Descriptive text for the list-all-trusted option */ -#define LIST_ALL_TRUSTED_DESC (p11tool_opt_strs+1827) -/** Upper-cased name for the list-all-trusted option */ -#define LIST_ALL_TRUSTED_NAME (p11tool_opt_strs+1877) -/** Name string for the list-all-trusted option */ -#define LIST_ALL_TRUSTED_name (p11tool_opt_strs+1894) -/** Compiled in flag settings for the list-all-trusted option */ -#define LIST_ALL_TRUSTED_FLAGS (OPTST_DISABLED) - -/** - * export option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the export option */ -#define EXPORT_DESC (p11tool_opt_strs+1911) -/** Upper-cased name for the export option */ -#define EXPORT_NAME (p11tool_opt_strs+1950) -/** Name string for the export option */ -#define EXPORT_name (p11tool_opt_strs+1957) -/** Other options that appear in conjunction with the export option */ -static int const aExportCantList[] = { - INDEX_OPT_EXPORT_STAPLED, - INDEX_OPT_EXPORT_CHAIN, - INDEX_OPT_EXPORT_PUBKEY, NO_EQUIVALENT }; -/** Compiled in flag settings for the export option */ -#define EXPORT_FLAGS (OPTST_DISABLED) - -/** - * export-stapled option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the export-stapled option */ -#define EXPORT_STAPLED_DESC (p11tool_opt_strs+1964) -/** Upper-cased name for the export-stapled option */ -#define EXPORT_STAPLED_NAME (p11tool_opt_strs+2015) -/** Name string for the export-stapled option */ -#define EXPORT_STAPLED_name (p11tool_opt_strs+2030) -/** Other options that appear in conjunction with the export-stapled option */ -static int const aExport_StapledCantList[] = { - INDEX_OPT_EXPORT, - INDEX_OPT_EXPORT_CHAIN, - INDEX_OPT_EXPORT_PUBKEY, NO_EQUIVALENT }; -/** Compiled in flag settings for the export-stapled option */ -#define EXPORT_STAPLED_FLAGS (OPTST_DISABLED) - -/** - * export-chain option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the export-chain option */ -#define EXPORT_CHAIN_DESC (p11tool_opt_strs+2045) -/** Upper-cased name for the export-chain option */ -#define EXPORT_CHAIN_NAME (p11tool_opt_strs+2112) -/** Name string for the export-chain option */ -#define EXPORT_CHAIN_name (p11tool_opt_strs+2125) -/** Other options that appear in conjunction with the export-chain option */ -static int const aExport_ChainCantList[] = { - INDEX_OPT_EXPORT_STAPLED, - INDEX_OPT_EXPORT, - INDEX_OPT_EXPORT_PUBKEY, NO_EQUIVALENT }; -/** Compiled in flag settings for the export-chain option */ -#define EXPORT_CHAIN_FLAGS (OPTST_DISABLED) - -/** - * export-pubkey option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the export-pubkey option */ -#define EXPORT_PUBKEY_DESC (p11tool_opt_strs+2138) -/** Upper-cased name for the export-pubkey option */ -#define EXPORT_PUBKEY_NAME (p11tool_opt_strs+2178) -/** Name string for the export-pubkey option */ -#define EXPORT_PUBKEY_name (p11tool_opt_strs+2192) -/** Other options that appear in conjunction with the export-pubkey option */ -static int const aExport_PubkeyCantList[] = { - INDEX_OPT_EXPORT_STAPLED, - INDEX_OPT_EXPORT, - INDEX_OPT_EXPORT_CHAIN, NO_EQUIVALENT }; -/** Compiled in flag settings for the export-pubkey option */ -#define EXPORT_PUBKEY_FLAGS (OPTST_DISABLED) - -/** - * info option description: - */ -/** Descriptive text for the info option */ -#define INFO_DESC (p11tool_opt_strs+2206) -/** Upper-cased name for the info option */ -#define INFO_NAME (p11tool_opt_strs+2257) -/** Name string for the info option */ -#define INFO_name (p11tool_opt_strs+2262) -/** Compiled in flag settings for the info option */ -#define INFO_FLAGS (OPTST_DISABLED) - -/** - * trusted option description: - */ -/** Descriptive text for the trusted option */ -#define TRUSTED_DESC (p11tool_opt_strs+2267) -#define TRUSTED_NAME NULL -/** Unmodified name string for the trusted option */ -#define TRUSTED_name (p11tool_opt_strs+2306) -/** Compiled in flag settings for the trusted option */ -#define TRUSTED_FLAGS (MARK_TRUSTED_FLAGS | OPTST_ALIAS) - -/** - * distrusted option description: - */ -/** Descriptive text for the distrusted option */ -#define DISTRUSTED_DESC (p11tool_opt_strs+2314) -#define DISTRUSTED_NAME NULL -/** Unmodified name string for the distrusted option */ -#define DISTRUSTED_name (p11tool_opt_strs+2356) -/** Compiled in flag settings for the distrusted option */ -#define DISTRUSTED_FLAGS (MARK_DISTRUSTED_FLAGS | OPTST_ALIAS) - -/** - * keygen_related_options option description: - */ -/** keygen_related_options option separation text */ -#define KEYGEN_RELATED_OPTIONS_DESC (p11tool_opt_strs+2367) -#define KEYGEN_RELATED_OPTIONS_FLAGS (OPTST_DOCUMENT | OPTST_NO_INIT) - -/** - * generate-rsa option description: - */ -/** Descriptive text for the generate-rsa option */ -#define GENERATE_RSA_DESC (p11tool_opt_strs+2383) -/** Upper-cased name for the generate-rsa option */ -#define GENERATE_RSA_NAME (p11tool_opt_strs+2423) -/** Name string for the generate-rsa option */ -#define GENERATE_RSA_name (p11tool_opt_strs+2436) -/** Compiled in flag settings for the generate-rsa option */ -#define GENERATE_RSA_FLAGS (OPTST_DISABLED) - -/** - * generate-dsa option description: - */ -/** Descriptive text for the generate-dsa option */ -#define GENERATE_DSA_DESC (p11tool_opt_strs+2449) -/** Upper-cased name for the generate-dsa option */ -#define GENERATE_DSA_NAME (p11tool_opt_strs+2488) -/** Name string for the generate-dsa option */ -#define GENERATE_DSA_name (p11tool_opt_strs+2501) -/** Compiled in flag settings for the generate-dsa option */ -#define GENERATE_DSA_FLAGS (OPTST_DISABLED) - -/** - * generate-ecc option description: - */ -/** Descriptive text for the generate-ecc option */ -#define GENERATE_ECC_DESC (p11tool_opt_strs+2514) -/** Upper-cased name for the generate-ecc option */ -#define GENERATE_ECC_NAME (p11tool_opt_strs+2556) -/** Name string for the generate-ecc option */ -#define GENERATE_ECC_name (p11tool_opt_strs+2569) -/** Compiled in flag settings for the generate-ecc option */ -#define GENERATE_ECC_FLAGS (OPTST_DISABLED) - -/** - * bits option description: - */ -/** Descriptive text for the bits option */ -#define BITS_DESC (p11tool_opt_strs+2582) -/** Upper-cased name for the bits option */ -#define BITS_NAME (p11tool_opt_strs+2630) -/** Name string for the bits option */ -#define BITS_name (p11tool_opt_strs+2635) -/** Compiled in flag settings for the bits option */ -#define BITS_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * curve option description: - */ -/** Descriptive text for the curve option */ -#define CURVE_DESC (p11tool_opt_strs+2640) -/** Upper-cased name for the curve option */ -#define CURVE_NAME (p11tool_opt_strs+2685) -/** Name string for the curve option */ -#define CURVE_name (p11tool_opt_strs+2691) -/** Compiled in flag settings for the curve option */ -#define CURVE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * sec-param option description: - */ -/** Descriptive text for the sec-param option */ -#define SEC_PARAM_DESC (p11tool_opt_strs+2697) -/** Upper-cased name for the sec-param option */ -#define SEC_PARAM_NAME (p11tool_opt_strs+2724) -/** Name string for the sec-param option */ -#define SEC_PARAM_name (p11tool_opt_strs+2734) -/** Compiled in flag settings for the sec-param option */ -#define SEC_PARAM_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * write_object_related_options option description: - */ -/** write_object_related_options option separation text */ -#define WRITE_OBJECT_RELATED_OPTIONS_DESC (p11tool_opt_strs+2744) -#define WRITE_OBJECT_RELATED_OPTIONS_FLAGS (OPTST_DOCUMENT | OPTST_NO_INIT) - -/** - * set-id option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the set-id option */ -#define SET_ID_DESC (p11tool_opt_strs+2761) -/** Upper-cased name for the set-id option */ -#define SET_ID_NAME (p11tool_opt_strs+2821) -/** Name string for the set-id option */ -#define SET_ID_name (p11tool_opt_strs+2828) -/** Other options that appear in conjunction with the set-id option */ -static int const aSet_IdCantList[] = { - INDEX_OPT_WRITE, NO_EQUIVALENT }; -/** Compiled in flag settings for the set-id option */ -#define SET_ID_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * set-label option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the set-label option */ -#define SET_LABEL_DESC (p11tool_opt_strs+2835) -/** Upper-cased name for the set-label option */ -#define SET_LABEL_NAME (p11tool_opt_strs+2889) -/** Name string for the set-label option */ -#define SET_LABEL_name (p11tool_opt_strs+2899) -/** Other options that appear in conjunction with the set-label option */ -static int const aSet_LabelCantList[] = { - INDEX_OPT_WRITE, - INDEX_OPT_SET_ID, NO_EQUIVALENT }; -/** Compiled in flag settings for the set-label option */ -#define SET_LABEL_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * write option description: - */ -/** Descriptive text for the write option */ -#define WRITE_DESC (p11tool_opt_strs+2909) -/** Upper-cased name for the write option */ -#define WRITE_NAME (p11tool_opt_strs+2955) -/** Name string for the write option */ -#define WRITE_name (p11tool_opt_strs+2961) -/** Compiled in flag settings for the write option */ -#define WRITE_FLAGS (OPTST_DISABLED) - -/** - * delete option description: - */ -/** Descriptive text for the delete option */ -#define DELETE_DESC (p11tool_opt_strs+2967) -/** Upper-cased name for the delete option */ -#define DELETE_NAME (p11tool_opt_strs+3019) -/** Name string for the delete option */ -#define DELETE_name (p11tool_opt_strs+3026) -/** Compiled in flag settings for the delete option */ -#define DELETE_FLAGS (OPTST_DISABLED) - -/** - * label option description: - */ -/** Descriptive text for the label option */ -#define LABEL_DESC (p11tool_opt_strs+3033) -/** Upper-cased name for the label option */ -#define LABEL_NAME (p11tool_opt_strs+3070) -/** Name string for the label option */ -#define LABEL_name (p11tool_opt_strs+3076) -/** Compiled in flag settings for the label option */ -#define LABEL_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * id option description: - */ -/** Descriptive text for the id option */ -#define ID_DESC (p11tool_opt_strs+3082) -/** Upper-cased name for the id option */ -#define ID_NAME (p11tool_opt_strs+3117) -/** Name string for the id option */ -#define ID_name (p11tool_opt_strs+3120) -/** Compiled in flag settings for the id option */ -#define ID_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * mark-wrap option description: - */ -/** Descriptive text for the mark-wrap option */ -#define MARK_WRAP_DESC (p11tool_opt_strs+3123) -/** Upper-cased name for the mark-wrap option */ -#define MARK_WRAP_NAME (p11tool_opt_strs+3168) -/** disablement name for the mark-wrap option */ -#define NOT_MARK_WRAP_name (p11tool_opt_strs+3178) -/** disablement prefix for the mark-wrap option */ -#define NOT_MARK_WRAP_PFX (p11tool_opt_strs+3191) -/** Name string for the mark-wrap option */ -#define MARK_WRAP_name (NOT_MARK_WRAP_name + 3) -/** Compiled in flag settings for the mark-wrap option */ -#define MARK_WRAP_FLAGS (OPTST_DISABLED) - -/** - * mark-trusted option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the mark-trusted option */ -#define MARK_TRUSTED_DESC (p11tool_opt_strs+3194) -/** Upper-cased name for the mark-trusted option */ -#define MARK_TRUSTED_NAME (p11tool_opt_strs+3236) -/** disablement name for the mark-trusted option */ -#define NOT_MARK_TRUSTED_name (p11tool_opt_strs+3249) -/** disablement prefix for the mark-trusted option */ -#define NOT_MARK_TRUSTED_PFX (p11tool_opt_strs+3191) -/** Name string for the mark-trusted option */ -#define MARK_TRUSTED_name (NOT_MARK_TRUSTED_name + 3) -/** Other options that appear in conjunction with the mark-trusted option */ -static int const aMark_TrustedCantList[] = { - INDEX_OPT_MARK_DISTRUSTED, NO_EQUIVALENT }; -/** Compiled in flag settings for the mark-trusted option */ -#define MARK_TRUSTED_FLAGS (OPTST_DISABLED) - -/** - * mark-distrusted option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the mark-distrusted option */ -#define MARK_DISTRUSTED_DESC (p11tool_opt_strs+3265) -/** Upper-cased name for the mark-distrusted option */ -#define MARK_DISTRUSTED_NAME (p11tool_opt_strs+3345) -/** Name string for the mark-distrusted option */ -#define MARK_DISTRUSTED_name (p11tool_opt_strs+3361) -/** Other options that appear in conjunction with the mark-distrusted option */ -static int const aMark_DistrustedCantList[] = { - INDEX_OPT_MARK_TRUSTED, NO_EQUIVALENT }; -/** Compiled in flag settings for the mark-distrusted option */ -#define MARK_DISTRUSTED_FLAGS (OPTST_DISABLED) - -/** - * mark-decrypt option description: - */ -/** Descriptive text for the mark-decrypt option */ -#define MARK_DECRYPT_DESC (p11tool_opt_strs+3377) -/** Upper-cased name for the mark-decrypt option */ -#define MARK_DECRYPT_NAME (p11tool_opt_strs+3423) -/** disablement name for the mark-decrypt option */ -#define NOT_MARK_DECRYPT_name (p11tool_opt_strs+3436) -/** disablement prefix for the mark-decrypt option */ -#define NOT_MARK_DECRYPT_PFX (p11tool_opt_strs+3191) -/** Name string for the mark-decrypt option */ -#define MARK_DECRYPT_name (NOT_MARK_DECRYPT_name + 3) -/** Compiled in flag settings for the mark-decrypt option */ -#define MARK_DECRYPT_FLAGS (OPTST_DISABLED) - -/** - * mark-sign option description: - */ -/** Descriptive text for the mark-sign option */ -#define MARK_SIGN_DESC (p11tool_opt_strs+3452) -/** Upper-cased name for the mark-sign option */ -#define MARK_SIGN_NAME (p11tool_opt_strs+3508) -/** disablement name for the mark-sign option */ -#define NOT_MARK_SIGN_name (p11tool_opt_strs+3518) -/** disablement prefix for the mark-sign option */ -#define NOT_MARK_SIGN_PFX (p11tool_opt_strs+3191) -/** Name string for the mark-sign option */ -#define MARK_SIGN_name (NOT_MARK_SIGN_name + 3) -/** Compiled in flag settings for the mark-sign option */ -#define MARK_SIGN_FLAGS (OPTST_DISABLED) - -/** - * mark-ca option description: - */ -/** Descriptive text for the mark-ca option */ -#define MARK_CA_DESC (p11tool_opt_strs+3531) -/** Upper-cased name for the mark-ca option */ -#define MARK_CA_NAME (p11tool_opt_strs+3570) -/** disablement name for the mark-ca option */ -#define NOT_MARK_CA_name (p11tool_opt_strs+3578) -/** disablement prefix for the mark-ca option */ -#define NOT_MARK_CA_PFX (p11tool_opt_strs+3191) -/** Name string for the mark-ca option */ -#define MARK_CA_name (NOT_MARK_CA_name + 3) -/** Compiled in flag settings for the mark-ca option */ -#define MARK_CA_FLAGS (OPTST_DISABLED) - -/** - * mark-private option description: - */ -/** Descriptive text for the mark-private option */ -#define MARK_PRIVATE_DESC (p11tool_opt_strs+3589) -/** Upper-cased name for the mark-private option */ -#define MARK_PRIVATE_NAME (p11tool_opt_strs+3631) -/** disablement name for the mark-private option */ -#define NOT_MARK_PRIVATE_name (p11tool_opt_strs+3644) -/** disablement prefix for the mark-private option */ -#define NOT_MARK_PRIVATE_PFX (p11tool_opt_strs+3191) -/** Name string for the mark-private option */ -#define MARK_PRIVATE_name (NOT_MARK_PRIVATE_name + 3) -/** Compiled in flag settings for the mark-private option */ -#define MARK_PRIVATE_FLAGS (OPTST_DISABLED) - -/** - * ca option description: - */ -/** Descriptive text for the ca option */ -#define CA_DESC (p11tool_opt_strs+3660) -#define CA_NAME NULL -/** Unmodified name string for the ca option */ -#define CA_name (p11tool_opt_strs+3694) -/** Compiled in flag settings for the ca option */ -#define CA_FLAGS (MARK_CA_FLAGS | OPTST_ALIAS) - -/** - * private option description: - */ -/** Descriptive text for the private option */ -#define PRIVATE_DESC (p11tool_opt_strs+3697) -#define PRIVATE_NAME NULL -/** Unmodified name string for the private option */ -#define PRIVATE_name (p11tool_opt_strs+3736) -/** Compiled in flag settings for the private option */ -#define PRIVATE_FLAGS (MARK_PRIVATE_FLAGS | OPTST_ALIAS) - -/** - * secret-key option description: - */ -/** Descriptive text for the secret-key option */ -#define SECRET_KEY_DESC (p11tool_opt_strs+3744) -/** Upper-cased name for the secret-key option */ -#define SECRET_KEY_NAME (p11tool_opt_strs+3777) -/** Name string for the secret-key option */ -#define SECRET_KEY_name (p11tool_opt_strs+3788) -/** Compiled in flag settings for the secret-key option */ -#define SECRET_KEY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * load-privkey option description: - */ -/** Descriptive text for the load-privkey option */ -#define LOAD_PRIVKEY_DESC (p11tool_opt_strs+3799) -/** Upper-cased name for the load-privkey option */ -#define LOAD_PRIVKEY_NAME (p11tool_opt_strs+3823) -/** Name string for the load-privkey option */ -#define LOAD_PRIVKEY_name (p11tool_opt_strs+3836) -/** Compiled in flag settings for the load-privkey option */ -#define LOAD_PRIVKEY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * load-pubkey option description: - */ -/** Descriptive text for the load-pubkey option */ -#define LOAD_PUBKEY_DESC (p11tool_opt_strs+3849) -/** Upper-cased name for the load-pubkey option */ -#define LOAD_PUBKEY_NAME (p11tool_opt_strs+3872) -/** Name string for the load-pubkey option */ -#define LOAD_PUBKEY_name (p11tool_opt_strs+3884) -/** Compiled in flag settings for the load-pubkey option */ -#define LOAD_PUBKEY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * load-certificate option description: - */ -/** Descriptive text for the load-certificate option */ -#define LOAD_CERTIFICATE_DESC (p11tool_opt_strs+3896) -/** Upper-cased name for the load-certificate option */ -#define LOAD_CERTIFICATE_NAME (p11tool_opt_strs+3920) -/** Name string for the load-certificate option */ -#define LOAD_CERTIFICATE_name (p11tool_opt_strs+3937) -/** Compiled in flag settings for the load-certificate option */ -#define LOAD_CERTIFICATE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * other_options option description: - */ -/** other_options option separation text */ -#define OTHER_OPTIONS_DESC (p11tool_opt_strs+3954) -#define OTHER_OPTIONS_FLAGS (OPTST_DOCUMENT | OPTST_NO_INIT) - -/** - * debug option description: - */ -/** Descriptive text for the debug option */ -#define DEBUG_DESC (p11tool_opt_strs+3969) -/** Upper-cased name for the debug option */ -#define DEBUG_NAME (p11tool_opt_strs+3986) -/** Name string for the debug option */ -#define DEBUG_name (p11tool_opt_strs+3992) -/** Compiled in flag settings for the debug option */ -#define DEBUG_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * outfile option description: - */ -/** Descriptive text for the outfile option */ -#define OUTFILE_DESC (p11tool_opt_strs+3998) -/** Upper-cased name for the outfile option */ -#define OUTFILE_NAME (p11tool_opt_strs+4010) -/** Name string for the outfile option */ -#define OUTFILE_name (p11tool_opt_strs+4018) -/** Compiled in flag settings for the outfile option */ -#define OUTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * login option description: - */ -/** Descriptive text for the login option */ -#define LOGIN_DESC (p11tool_opt_strs+4026) -/** Upper-cased name for the login option */ -#define LOGIN_NAME (p11tool_opt_strs+4054) -/** disablement name for the login option */ -#define NOT_LOGIN_name (p11tool_opt_strs+4060) -/** disablement prefix for the login option */ -#define NOT_LOGIN_PFX (p11tool_opt_strs+3191) -/** Name string for the login option */ -#define LOGIN_name (NOT_LOGIN_name + 3) -/** Compiled in flag settings for the login option */ -#define LOGIN_FLAGS (OPTST_DISABLED) - -/** - * so-login option description: - */ -/** Descriptive text for the so-login option */ -#define SO_LOGIN_DESC (p11tool_opt_strs+4069) -/** Upper-cased name for the so-login option */ -#define SO_LOGIN_NAME (p11tool_opt_strs+4107) -/** disablement name for the so-login option */ -#define NOT_SO_LOGIN_name (p11tool_opt_strs+4116) -/** disablement prefix for the so-login option */ -#define NOT_SO_LOGIN_PFX (p11tool_opt_strs+3191) -/** Name string for the so-login option */ -#define SO_LOGIN_name (NOT_SO_LOGIN_name + 3) -/** Compiled in flag settings for the so-login option */ -#define SO_LOGIN_FLAGS (OPTST_DISABLED) - -/** - * admin-login option description: - */ -/** Descriptive text for the admin-login option */ -#define ADMIN_LOGIN_DESC (p11tool_opt_strs+4128) -#define ADMIN_LOGIN_NAME NULL -/** Unmodified name string for the admin-login option */ -#define ADMIN_LOGIN_name (p11tool_opt_strs+4163) -/** Compiled in flag settings for the admin-login option */ -#define ADMIN_LOGIN_FLAGS (SO_LOGIN_FLAGS | OPTST_ALIAS) - -/** - * test-sign option description: - */ -/** Descriptive text for the test-sign option */ -#define TEST_SIGN_DESC (p11tool_opt_strs+4175) -/** Upper-cased name for the test-sign option */ -#define TEST_SIGN_NAME (p11tool_opt_strs+4228) -/** Name string for the test-sign option */ -#define TEST_SIGN_name (p11tool_opt_strs+4238) -/** Compiled in flag settings for the test-sign option */ -#define TEST_SIGN_FLAGS (OPTST_DISABLED) - -/** - * generate-random option description: - */ -/** Descriptive text for the generate-random option */ -#define GENERATE_RANDOM_DESC (p11tool_opt_strs+4248) -/** Upper-cased name for the generate-random option */ -#define GENERATE_RANDOM_NAME (p11tool_opt_strs+4269) -/** Name string for the generate-random option */ -#define GENERATE_RANDOM_name (p11tool_opt_strs+4285) -/** Compiled in flag settings for the generate-random option */ -#define GENERATE_RANDOM_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * pkcs8 option description: - */ -/** Descriptive text for the pkcs8 option */ -#define PKCS8_DESC (p11tool_opt_strs+4301) -/** Upper-cased name for the pkcs8 option */ -#define PKCS8_NAME (p11tool_opt_strs+4337) -/** Name string for the pkcs8 option */ -#define PKCS8_name (p11tool_opt_strs+4343) -/** Compiled in flag settings for the pkcs8 option */ -#define PKCS8_FLAGS (OPTST_DISABLED) - -/** - * inder option description: - */ -/** Descriptive text for the inder option */ -#define INDER_DESC (p11tool_opt_strs+4349) -/** Upper-cased name for the inder option */ -#define INDER_NAME (p11tool_opt_strs+4378) -/** disablement name for the inder option */ -#define NOT_INDER_name (p11tool_opt_strs+4384) -/** disablement prefix for the inder option */ -#define NOT_INDER_PFX (p11tool_opt_strs+3191) -/** Name string for the inder option */ -#define INDER_name (NOT_INDER_name + 3) -/** Compiled in flag settings for the inder option */ -#define INDER_FLAGS (OPTST_DISABLED) - -/** - * inraw option description: - */ -/** Descriptive text for the inraw option */ -#define INRAW_DESC (p11tool_opt_strs+4393) -#define INRAW_NAME NULL -/** Unmodified name string for the inraw option */ -#define INRAW_name (p11tool_opt_strs+4425) -/** Compiled in flag settings for the inraw option */ -#define INRAW_FLAGS (INDER_FLAGS | OPTST_ALIAS) - -/** - * outder option description: - */ -/** Descriptive text for the outder option */ -#define OUTDER_DESC (p11tool_opt_strs+4431) -/** Upper-cased name for the outder option */ -#define OUTDER_NAME (p11tool_opt_strs+4503) -/** disablement name for the outder option */ -#define NOT_OUTDER_name (p11tool_opt_strs+4510) -/** disablement prefix for the outder option */ -#define NOT_OUTDER_PFX (p11tool_opt_strs+3191) -/** Name string for the outder option */ -#define OUTDER_name (NOT_OUTDER_name + 3) -/** Compiled in flag settings for the outder option */ -#define OUTDER_FLAGS (OPTST_DISABLED) - -/** - * outraw option description: - */ -/** Descriptive text for the outraw option */ -#define OUTRAW_DESC (p11tool_opt_strs+4520) -#define OUTRAW_NAME NULL -/** Unmodified name string for the outraw option */ -#define OUTRAW_name (p11tool_opt_strs+4553) -/** Compiled in flag settings for the outraw option */ -#define OUTRAW_FLAGS (OUTDER_FLAGS | OPTST_ALIAS) - -/** - * provider option description: - */ -/** Descriptive text for the provider option */ -#define PROVIDER_DESC (p11tool_opt_strs+4560) -/** Upper-cased name for the provider option */ -#define PROVIDER_NAME (p11tool_opt_strs+4598) -/** Name string for the provider option */ -#define PROVIDER_name (p11tool_opt_strs+4607) -/** Compiled in flag settings for the provider option */ -#define PROVIDER_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * provider-opts option description: - */ -/** Descriptive text for the provider-opts option */ -#define PROVIDER_OPTS_DESC (p11tool_opt_strs+4616) -/** Upper-cased name for the provider-opts option */ -#define PROVIDER_OPTS_NAME (p11tool_opt_strs+4669) -/** Name string for the provider-opts option */ -#define PROVIDER_OPTS_name (p11tool_opt_strs+4683) -/** Compiled in flag settings for the provider-opts option */ -#define PROVIDER_OPTS_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * detailed-url option description: - */ -/** Descriptive text for the detailed-url option */ -#define DETAILED_URL_DESC (p11tool_opt_strs+4697) -/** Upper-cased name for the detailed-url option */ -#define DETAILED_URL_NAME (p11tool_opt_strs+4717) -/** disablement name for the detailed-url option */ -#define NOT_DETAILED_URL_name (p11tool_opt_strs+4730) -/** disablement prefix for the detailed-url option */ -#define NOT_DETAILED_URL_PFX (p11tool_opt_strs+3191) -/** Name string for the detailed-url option */ -#define DETAILED_URL_name (NOT_DETAILED_URL_name + 3) -/** Compiled in flag settings for the detailed-url option */ -#define DETAILED_URL_FLAGS (OPTST_DISABLED) - -/** - * only-urls option description: - */ -/** Descriptive text for the only-urls option */ -#define ONLY_URLS_DESC (p11tool_opt_strs+4746) -/** Upper-cased name for the only-urls option */ -#define ONLY_URLS_NAME (p11tool_opt_strs+4790) -/** Name string for the only-urls option */ -#define ONLY_URLS_name (p11tool_opt_strs+4800) -/** Compiled in flag settings for the only-urls option */ -#define ONLY_URLS_FLAGS (OPTST_DISABLED) - -/** - * batch option description: - */ -/** Descriptive text for the batch option */ -#define BATCH_DESC (p11tool_opt_strs+4810) -/** Upper-cased name for the batch option */ -#define BATCH_NAME (p11tool_opt_strs+4848) -/** Name string for the batch option */ -#define BATCH_name (p11tool_opt_strs+4854) -/** Compiled in flag settings for the batch option */ -#define BATCH_FLAGS (OPTST_DISABLED) - -/* - * Help/More_Help/Version option descriptions: - */ -#define HELP_DESC (p11tool_opt_strs+4860) -#define HELP_name (p11tool_opt_strs+4904) -#ifdef HAVE_WORKING_FORK -#define MORE_HELP_DESC (p11tool_opt_strs+4909) -#define MORE_HELP_name (p11tool_opt_strs+4954) -#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -#define MORE_HELP_DESC HELP_DESC -#define MORE_HELP_name HELP_name -#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT) -#endif -#ifdef NO_OPTIONAL_OPT_ARGS -# define VER_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ - OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT) -#endif -#define VER_DESC (p11tool_opt_strs+4964) -#define VER_name (p11tool_opt_strs+5000) -/** - * Declare option callback procedures - */ -extern tOptProc - optionBooleanVal, optionNestedVal, optionNumericVal, - optionPagedUsage, optionPrintVersion, optionResetOpt, - optionStackArg, optionTimeDate, optionTimeVal, - optionUnstackArg, optionVendorOption; -static tOptProc - doOptAdmin_Login, doOptCa, doOptDebug, - doOptDistrusted, doOptInraw, doOptList_Keys, - doOptList_Privkeys, doOptLoad_Certificate, doOptLoad_Privkey, - doOptLoad_Pubkey, doOptOutraw, doOptPrivate, - doOptProvider, doOptTrusted, doUsageOpt; -#define VER_PROC optionPrintVersion - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Define the p11tool Option Descriptions. - * This is an array of OPTION_CT entries, one for each - * option that the p11tool program responds to. - */ -static tOptDesc optDesc[OPTION_CT] = { - { /* entry idx, value */ 0, 0, - /* equiv idx, value */ 0, 0, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 0, 0, - /* opt state flags */ TOKEN_RELATED_OPTIONS_FLAGS, 0, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ TOKEN_RELATED_OPTIONS_DESC, NULL, NULL, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 1, VALUE_OPT_LIST_TOKENS, - /* equiv idx, value */ 1, VALUE_OPT_LIST_TOKENS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_TOKENS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list-tokens */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_TOKENS_DESC, LIST_TOKENS_NAME, LIST_TOKENS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 2, VALUE_OPT_LIST_TOKEN_URLS, - /* equiv idx, value */ 2, VALUE_OPT_LIST_TOKEN_URLS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_TOKEN_URLS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list-token-urls */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_TOKEN_URLS_DESC, LIST_TOKEN_URLS_NAME, LIST_TOKEN_URLS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 3, VALUE_OPT_LIST_MECHANISMS, - /* equiv idx, value */ 3, VALUE_OPT_LIST_MECHANISMS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_MECHANISMS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list-mechanisms */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_MECHANISMS_DESC, LIST_MECHANISMS_NAME, LIST_MECHANISMS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 4, VALUE_OPT_INITIALIZE, - /* equiv idx, value */ 4, VALUE_OPT_INITIALIZE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INITIALIZE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --initialize */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INITIALIZE_DESC, INITIALIZE_NAME, INITIALIZE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 5, VALUE_OPT_INITIALIZE_PIN, - /* equiv idx, value */ 5, VALUE_OPT_INITIALIZE_PIN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INITIALIZE_PIN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --initialize-pin */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INITIALIZE_PIN_DESC, INITIALIZE_PIN_NAME, INITIALIZE_PIN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 6, VALUE_OPT_INITIALIZE_SO_PIN, - /* equiv idx, value */ 6, VALUE_OPT_INITIALIZE_SO_PIN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INITIALIZE_SO_PIN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --initialize-so-pin */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INITIALIZE_SO_PIN_DESC, INITIALIZE_SO_PIN_NAME, INITIALIZE_SO_PIN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 7, VALUE_OPT_SET_PIN, - /* equiv idx, value */ 7, VALUE_OPT_SET_PIN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SET_PIN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --set-pin */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SET_PIN_DESC, SET_PIN_NAME, SET_PIN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 8, VALUE_OPT_SET_SO_PIN, - /* equiv idx, value */ 8, VALUE_OPT_SET_SO_PIN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SET_SO_PIN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --set-so-pin */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SET_SO_PIN_DESC, SET_SO_PIN_NAME, SET_SO_PIN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 0, 0, - /* equiv idx, value */ 0, 0, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 0, 0, - /* opt state flags */ OBJECT_LIST_RELATED_OPTIONS_FLAGS, 0, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OBJECT_LIST_RELATED_OPTIONS_DESC, NULL, NULL, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 10, VALUE_OPT_LIST_ALL, - /* equiv idx, value */ 10, VALUE_OPT_LIST_ALL, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_ALL_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list-all */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_ALL_DESC, LIST_ALL_NAME, LIST_ALL_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 11, VALUE_OPT_LIST_ALL_CERTS, - /* equiv idx, value */ 11, VALUE_OPT_LIST_ALL_CERTS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_ALL_CERTS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list-all-certs */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_ALL_CERTS_DESC, LIST_ALL_CERTS_NAME, LIST_ALL_CERTS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 12, VALUE_OPT_LIST_CERTS, - /* equiv idx, value */ 12, VALUE_OPT_LIST_CERTS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_CERTS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list-certs */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_CERTS_DESC, LIST_CERTS_NAME, LIST_CERTS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 13, VALUE_OPT_LIST_ALL_PRIVKEYS, - /* equiv idx, value */ 13, VALUE_OPT_LIST_ALL_PRIVKEYS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_ALL_PRIVKEYS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list-all-privkeys */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_ALL_PRIVKEYS_DESC, LIST_ALL_PRIVKEYS_NAME, LIST_ALL_PRIVKEYS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 14, VALUE_OPT_LIST_PRIVKEYS, - /* equiv idx, value */ 14, VALUE_OPT_LIST_PRIVKEYS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_PRIVKEYS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list-privkeys */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptList_Privkeys, - /* desc, NAME, name */ LIST_PRIVKEYS_DESC, LIST_PRIVKEYS_NAME, LIST_PRIVKEYS_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 15, VALUE_OPT_LIST_KEYS, - /* equiv idx, value */ 15, VALUE_OPT_LIST_KEYS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_KEYS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list-keys */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptList_Keys, - /* desc, NAME, name */ LIST_KEYS_DESC, LIST_KEYS_NAME, LIST_KEYS_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 16, VALUE_OPT_LIST_ALL_TRUSTED, - /* equiv idx, value */ 16, VALUE_OPT_LIST_ALL_TRUSTED, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_ALL_TRUSTED_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list-all-trusted */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_ALL_TRUSTED_DESC, LIST_ALL_TRUSTED_NAME, LIST_ALL_TRUSTED_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 17, VALUE_OPT_EXPORT, - /* equiv idx, value */ 17, VALUE_OPT_EXPORT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ EXPORT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --export */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aExportCantList, - /* option proc */ NULL, - /* desc, NAME, name */ EXPORT_DESC, EXPORT_NAME, EXPORT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 18, VALUE_OPT_EXPORT_STAPLED, - /* equiv idx, value */ 18, VALUE_OPT_EXPORT_STAPLED, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ EXPORT_STAPLED_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --export-stapled */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aExport_StapledCantList, - /* option proc */ NULL, - /* desc, NAME, name */ EXPORT_STAPLED_DESC, EXPORT_STAPLED_NAME, EXPORT_STAPLED_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 19, VALUE_OPT_EXPORT_CHAIN, - /* equiv idx, value */ 19, VALUE_OPT_EXPORT_CHAIN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ EXPORT_CHAIN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --export-chain */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aExport_ChainCantList, - /* option proc */ NULL, - /* desc, NAME, name */ EXPORT_CHAIN_DESC, EXPORT_CHAIN_NAME, EXPORT_CHAIN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 20, VALUE_OPT_EXPORT_PUBKEY, - /* equiv idx, value */ 20, VALUE_OPT_EXPORT_PUBKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ EXPORT_PUBKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --export-pubkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aExport_PubkeyCantList, - /* option proc */ NULL, - /* desc, NAME, name */ EXPORT_PUBKEY_DESC, EXPORT_PUBKEY_NAME, EXPORT_PUBKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 21, VALUE_OPT_INFO, - /* equiv idx, value */ 21, VALUE_OPT_INFO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INFO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --info */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INFO_DESC, INFO_NAME, INFO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 22, VALUE_OPT_TRUSTED, - /* equiv idx, value */ 22, VALUE_OPT_TRUSTED, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ TRUSTED_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --trusted */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptTrusted, - /* desc, NAME, name */ TRUSTED_DESC, TRUSTED_NAME, TRUSTED_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 23, VALUE_OPT_DISTRUSTED, - /* equiv idx, value */ 23, VALUE_OPT_DISTRUSTED, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DISTRUSTED_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --distrusted */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDistrusted, - /* desc, NAME, name */ DISTRUSTED_DESC, DISTRUSTED_NAME, DISTRUSTED_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 0, 0, - /* equiv idx, value */ 0, 0, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 0, 0, - /* opt state flags */ KEYGEN_RELATED_OPTIONS_FLAGS, 0, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ KEYGEN_RELATED_OPTIONS_DESC, NULL, NULL, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 25, VALUE_OPT_GENERATE_RSA, - /* equiv idx, value */ 25, VALUE_OPT_GENERATE_RSA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_RSA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-rsa */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_RSA_DESC, GENERATE_RSA_NAME, GENERATE_RSA_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 26, VALUE_OPT_GENERATE_DSA, - /* equiv idx, value */ 26, VALUE_OPT_GENERATE_DSA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_DSA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-dsa */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_DSA_DESC, GENERATE_DSA_NAME, GENERATE_DSA_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 27, VALUE_OPT_GENERATE_ECC, - /* equiv idx, value */ 27, VALUE_OPT_GENERATE_ECC, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_ECC_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-ecc */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_ECC_DESC, GENERATE_ECC_NAME, GENERATE_ECC_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 28, VALUE_OPT_BITS, - /* equiv idx, value */ 28, VALUE_OPT_BITS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ BITS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --bits */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionNumericVal, - /* desc, NAME, name */ BITS_DESC, BITS_NAME, BITS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 29, VALUE_OPT_CURVE, - /* equiv idx, value */ 29, VALUE_OPT_CURVE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CURVE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --curve */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CURVE_DESC, CURVE_NAME, CURVE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 30, VALUE_OPT_SEC_PARAM, - /* equiv idx, value */ 30, VALUE_OPT_SEC_PARAM, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SEC_PARAM_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --sec-param */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SEC_PARAM_DESC, SEC_PARAM_NAME, SEC_PARAM_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 0, 0, - /* equiv idx, value */ 0, 0, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 0, 0, - /* opt state flags */ WRITE_OBJECT_RELATED_OPTIONS_FLAGS, 0, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ WRITE_OBJECT_RELATED_OPTIONS_DESC, NULL, NULL, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 32, VALUE_OPT_SET_ID, - /* equiv idx, value */ 32, VALUE_OPT_SET_ID, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SET_ID_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --set-id */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aSet_IdCantList, - /* option proc */ NULL, - /* desc, NAME, name */ SET_ID_DESC, SET_ID_NAME, SET_ID_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 33, VALUE_OPT_SET_LABEL, - /* equiv idx, value */ 33, VALUE_OPT_SET_LABEL, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SET_LABEL_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --set-label */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aSet_LabelCantList, - /* option proc */ NULL, - /* desc, NAME, name */ SET_LABEL_DESC, SET_LABEL_NAME, SET_LABEL_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 34, VALUE_OPT_WRITE, - /* equiv idx, value */ 34, VALUE_OPT_WRITE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ WRITE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --write */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ WRITE_DESC, WRITE_NAME, WRITE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 35, VALUE_OPT_DELETE, - /* equiv idx, value */ 35, VALUE_OPT_DELETE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DELETE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --delete */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DELETE_DESC, DELETE_NAME, DELETE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 36, VALUE_OPT_LABEL, - /* equiv idx, value */ 36, VALUE_OPT_LABEL, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LABEL_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --label */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LABEL_DESC, LABEL_NAME, LABEL_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 37, VALUE_OPT_ID, - /* equiv idx, value */ 37, VALUE_OPT_ID, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ ID_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --id */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ ID_DESC, ID_NAME, ID_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 38, VALUE_OPT_MARK_WRAP, - /* equiv idx, value */ 38, VALUE_OPT_MARK_WRAP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MARK_WRAP_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --mark-wrap */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ MARK_WRAP_DESC, MARK_WRAP_NAME, MARK_WRAP_name, - /* disablement strs */ NOT_MARK_WRAP_name, NOT_MARK_WRAP_PFX }, - - { /* entry idx, value */ 39, VALUE_OPT_MARK_TRUSTED, - /* equiv idx, value */ 39, VALUE_OPT_MARK_TRUSTED, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MARK_TRUSTED_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --mark-trusted */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aMark_TrustedCantList, - /* option proc */ NULL, - /* desc, NAME, name */ MARK_TRUSTED_DESC, MARK_TRUSTED_NAME, MARK_TRUSTED_name, - /* disablement strs */ NOT_MARK_TRUSTED_name, NOT_MARK_TRUSTED_PFX }, - - { /* entry idx, value */ 40, VALUE_OPT_MARK_DISTRUSTED, - /* equiv idx, value */ 40, VALUE_OPT_MARK_DISTRUSTED, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MARK_DISTRUSTED_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --mark-distrusted */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, aMark_DistrustedCantList, - /* option proc */ NULL, - /* desc, NAME, name */ MARK_DISTRUSTED_DESC, MARK_DISTRUSTED_NAME, MARK_DISTRUSTED_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 41, VALUE_OPT_MARK_DECRYPT, - /* equiv idx, value */ 41, VALUE_OPT_MARK_DECRYPT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MARK_DECRYPT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --mark-decrypt */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ MARK_DECRYPT_DESC, MARK_DECRYPT_NAME, MARK_DECRYPT_name, - /* disablement strs */ NOT_MARK_DECRYPT_name, NOT_MARK_DECRYPT_PFX }, - - { /* entry idx, value */ 42, VALUE_OPT_MARK_SIGN, - /* equiv idx, value */ 42, VALUE_OPT_MARK_SIGN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MARK_SIGN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --mark-sign */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ MARK_SIGN_DESC, MARK_SIGN_NAME, MARK_SIGN_name, - /* disablement strs */ NOT_MARK_SIGN_name, NOT_MARK_SIGN_PFX }, - - { /* entry idx, value */ 43, VALUE_OPT_MARK_CA, - /* equiv idx, value */ 43, VALUE_OPT_MARK_CA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MARK_CA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --mark-ca */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ MARK_CA_DESC, MARK_CA_NAME, MARK_CA_name, - /* disablement strs */ NOT_MARK_CA_name, NOT_MARK_CA_PFX }, - - { /* entry idx, value */ 44, VALUE_OPT_MARK_PRIVATE, - /* equiv idx, value */ 44, VALUE_OPT_MARK_PRIVATE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MARK_PRIVATE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --mark-private */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ MARK_PRIVATE_DESC, MARK_PRIVATE_NAME, MARK_PRIVATE_name, - /* disablement strs */ NOT_MARK_PRIVATE_name, NOT_MARK_PRIVATE_PFX }, - - { /* entry idx, value */ 45, VALUE_OPT_CA, - /* equiv idx, value */ 45, VALUE_OPT_CA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --ca */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptCa, - /* desc, NAME, name */ CA_DESC, CA_NAME, CA_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 46, VALUE_OPT_PRIVATE, - /* equiv idx, value */ 46, VALUE_OPT_PRIVATE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PRIVATE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --private */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptPrivate, - /* desc, NAME, name */ PRIVATE_DESC, PRIVATE_NAME, PRIVATE_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 47, VALUE_OPT_SECRET_KEY, - /* equiv idx, value */ 47, VALUE_OPT_SECRET_KEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SECRET_KEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --secret-key */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SECRET_KEY_DESC, SECRET_KEY_NAME, SECRET_KEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 48, VALUE_OPT_LOAD_PRIVKEY, - /* equiv idx, value */ 48, VALUE_OPT_LOAD_PRIVKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_PRIVKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-privkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptLoad_Privkey, - /* desc, NAME, name */ LOAD_PRIVKEY_DESC, LOAD_PRIVKEY_NAME, LOAD_PRIVKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 49, VALUE_OPT_LOAD_PUBKEY, - /* equiv idx, value */ 49, VALUE_OPT_LOAD_PUBKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_PUBKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-pubkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptLoad_Pubkey, - /* desc, NAME, name */ LOAD_PUBKEY_DESC, LOAD_PUBKEY_NAME, LOAD_PUBKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 50, VALUE_OPT_LOAD_CERTIFICATE, - /* equiv idx, value */ 50, VALUE_OPT_LOAD_CERTIFICATE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOAD_CERTIFICATE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --load-certificate */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptLoad_Certificate, - /* desc, NAME, name */ LOAD_CERTIFICATE_DESC, LOAD_CERTIFICATE_NAME, LOAD_CERTIFICATE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 0, 0, - /* equiv idx, value */ 0, 0, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 0, 0, - /* opt state flags */ OTHER_OPTIONS_FLAGS, 0, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OTHER_OPTIONS_DESC, NULL, NULL, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 52, VALUE_OPT_DEBUG, - /* equiv idx, value */ 52, VALUE_OPT_DEBUG, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DEBUG_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --debug */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDebug, - /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 53, VALUE_OPT_OUTFILE, - /* equiv idx, value */ 53, VALUE_OPT_OUTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OUTFILE_DESC, OUTFILE_NAME, OUTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 54, VALUE_OPT_LOGIN, - /* equiv idx, value */ 54, VALUE_OPT_LOGIN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LOGIN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --login */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LOGIN_DESC, LOGIN_NAME, LOGIN_name, - /* disablement strs */ NOT_LOGIN_name, NOT_LOGIN_PFX }, - - { /* entry idx, value */ 55, VALUE_OPT_SO_LOGIN, - /* equiv idx, value */ 55, VALUE_OPT_SO_LOGIN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SO_LOGIN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --so-login */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SO_LOGIN_DESC, SO_LOGIN_NAME, SO_LOGIN_name, - /* disablement strs */ NOT_SO_LOGIN_name, NOT_SO_LOGIN_PFX }, - - { /* entry idx, value */ 56, VALUE_OPT_ADMIN_LOGIN, - /* equiv idx, value */ 56, VALUE_OPT_ADMIN_LOGIN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ ADMIN_LOGIN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --admin-login */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptAdmin_Login, - /* desc, NAME, name */ ADMIN_LOGIN_DESC, ADMIN_LOGIN_NAME, ADMIN_LOGIN_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 57, VALUE_OPT_TEST_SIGN, - /* equiv idx, value */ 57, VALUE_OPT_TEST_SIGN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ TEST_SIGN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --test-sign */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ TEST_SIGN_DESC, TEST_SIGN_NAME, TEST_SIGN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 58, VALUE_OPT_GENERATE_RANDOM, - /* equiv idx, value */ 58, VALUE_OPT_GENERATE_RANDOM, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_RANDOM_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-random */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionNumericVal, - /* desc, NAME, name */ GENERATE_RANDOM_DESC, GENERATE_RANDOM_NAME, GENERATE_RANDOM_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 59, VALUE_OPT_PKCS8, - /* equiv idx, value */ 59, VALUE_OPT_PKCS8, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PKCS8_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pkcs8 */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PKCS8_DESC, PKCS8_NAME, PKCS8_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 60, VALUE_OPT_INDER, - /* equiv idx, value */ 60, VALUE_OPT_INDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --inder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INDER_DESC, INDER_NAME, INDER_name, - /* disablement strs */ NOT_INDER_name, NOT_INDER_PFX }, - - { /* entry idx, value */ 61, VALUE_OPT_INRAW, - /* equiv idx, value */ 61, VALUE_OPT_INRAW, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INRAW_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --inraw */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptInraw, - /* desc, NAME, name */ INRAW_DESC, INRAW_NAME, INRAW_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 62, VALUE_OPT_OUTDER, - /* equiv idx, value */ 62, VALUE_OPT_OUTDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OUTDER_DESC, OUTDER_NAME, OUTDER_name, - /* disablement strs */ NOT_OUTDER_name, NOT_OUTDER_PFX }, - - { /* entry idx, value */ 63, VALUE_OPT_OUTRAW, - /* equiv idx, value */ 63, VALUE_OPT_OUTRAW, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTRAW_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outraw */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptOutraw, - /* desc, NAME, name */ OUTRAW_DESC, OUTRAW_NAME, OUTRAW_name, - /* disablement strs */ 0, 0 }, - - { /* entry idx, value */ 64, VALUE_OPT_PROVIDER, - /* equiv idx, value */ 64, VALUE_OPT_PROVIDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PROVIDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --provider */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptProvider, - /* desc, NAME, name */ PROVIDER_DESC, PROVIDER_NAME, PROVIDER_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 65, VALUE_OPT_PROVIDER_OPTS, - /* equiv idx, value */ 65, VALUE_OPT_PROVIDER_OPTS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PROVIDER_OPTS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --provider-opts */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PROVIDER_OPTS_DESC, PROVIDER_OPTS_NAME, PROVIDER_OPTS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 66, VALUE_OPT_DETAILED_URL, - /* equiv idx, value */ 66, VALUE_OPT_DETAILED_URL, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DETAILED_URL_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --detailed-url */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DETAILED_URL_DESC, DETAILED_URL_NAME, DETAILED_URL_name, - /* disablement strs */ NOT_DETAILED_URL_name, NOT_DETAILED_URL_PFX }, - - { /* entry idx, value */ 67, VALUE_OPT_ONLY_URLS, - /* equiv idx, value */ 67, VALUE_OPT_ONLY_URLS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ ONLY_URLS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --only-urls */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ ONLY_URLS_DESC, ONLY_URLS_NAME, ONLY_URLS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 68, VALUE_OPT_BATCH, - /* equiv idx, value */ 68, VALUE_OPT_BATCH, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ BATCH_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --batch */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ BATCH_DESC, BATCH_NAME, BATCH_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VER_FLAGS, AOUSE_VERSION, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ VER_PROC, - /* desc, NAME, name */ VER_DESC, NULL, VER_name, - /* disablement strs */ NULL, NULL }, - - - - { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doUsageOpt, - /* desc, NAME, name */ HELP_DESC, NULL, HELP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionPagedUsage, - /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name, - /* disablement strs */ NULL, NULL } -}; - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** Reference to the upper cased version of p11tool. */ -#define zPROGNAME (p11tool_opt_strs+5008) -/** Reference to the title line for p11tool usage. */ -#define zUsageTitle (p11tool_opt_strs+5016) -/** There is no p11tool configuration file. */ -#define zRcName NULL -/** There are no directories to search for p11tool config files. */ -#define apzHomeList NULL -/** The p11tool program bug email address. */ -#define zBugsAddr (p11tool_opt_strs+5111) -/** Clarification/explanation of what p11tool does. */ -#define zExplain (p11tool_opt_strs+5131) -/** Extra detail explaining what p11tool does. */ -#define zDetail (p11tool_opt_strs+5133) -/** The full version string for p11tool. */ -#define zFullVersion (p11tool_opt_strs+5675) -/* extracted from optcode.tlib near line 364 */ - -#if defined(ENABLE_NLS) -# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT - static tOptionXlateProc translate_option_strings; -#else -# define OPTPROC_BASE OPTPROC_NONE -# define translate_option_strings NULL -#endif /* ENABLE_NLS */ - -#define p11tool_full_usage (NULL) -#define p11tool_short_usage (p11tool_opt_strs+5693) - -#endif /* not defined __doxygen__ */ - -/* - * Create the static procedure(s) declared above. - */ -/** - * The callout function that invokes the optionUsage function. - * - * @param[in] opts the AutoOpts option description structure - * @param[in] od the descriptor for the "help" (usage) option. - * @noreturn - */ -static void -doUsageOpt(tOptions * opts, tOptDesc * od) -{ - int ex_code; - ex_code = P11TOOL_EXIT_SUCCESS; - optionUsage(&p11toolOptions, ex_code); - /* NOTREACHED */ - exit(P11TOOL_EXIT_FAILURE); - (void)opts; - (void)od; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the list-privkeys option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptList_Privkeys(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_LIST_ALL_PRIVKEYS); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(P11TOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the list-keys option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptList_Keys(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_LIST_ALL_PRIVKEYS); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(P11TOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the trusted option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptTrusted(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_MARK_TRUSTED); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(P11TOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the distrusted option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDistrusted(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_MARK_DISTRUSTED); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(P11TOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the ca option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptCa(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_MARK_CA); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(P11TOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the private option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptPrivate(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_MARK_PRIVATE); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(P11TOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the load-privkey option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptLoad_Privkey(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the load-pubkey option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptLoad_Pubkey(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the load-certificate option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptLoad_Certificate(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the debug option. - * Specifies the debug level. - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 9999 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the admin-login option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptAdmin_Login(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_SO_LOGIN); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(P11TOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the inraw option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptInraw(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_INDER); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(P11TOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the outraw option. - * - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptOutraw(tOptions* pOptions, tOptDesc* pOptDesc) -{ - int res = optionAlias(pOptions, pOptDesc, INDEX_OPT_OUTDER); - if ((res != 0) && ((pOptions->fOptSet & OPTPROC_ERRSTOP) != 0)) - USAGE(P11TOOL_EXIT_USAGE_ERROR); - -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the provider option. - * This will override the default options in /etc/gnutls/pkcs11.conf - * @param[in] pOptions the p11tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptProvider(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MAY_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} -/* extracted from optmain.tlib near line 1250 */ - -/** - * The directory containing the data associated with p11tool. - */ -#ifndef PKGDATADIR -# define PKGDATADIR "" -#endif - -/** - * Information about the person or institution that packaged p11tool - * for the current distribution. - */ -#ifndef WITH_PACKAGER -# define p11tool_packager_info NULL -#else -/** Packager information for p11tool. */ -static char const p11tool_packager_info[] = - "Packaged by " WITH_PACKAGER - -# ifdef WITH_PACKAGER_VERSION - " ("WITH_PACKAGER_VERSION")" -# endif - -# ifdef WITH_PACKAGER_BUG_REPORTS - "\nReport p11tool bugs to " WITH_PACKAGER_BUG_REPORTS -# endif - "\n"; -#endif -#ifndef __doxygen__ - -#endif /* __doxygen__ */ -/** - * The option definitions for p11tool. The one structure that - * binds them all. - */ -tOptions p11toolOptions = { - OPTIONS_STRUCT_VERSION, - 0, NULL, /* original argc + argv */ - ( OPTPROC_BASE - + OPTPROC_ERRSTOP - + OPTPROC_SHORTOPT - + OPTPROC_LONGOPT - + OPTPROC_NO_REQ_OPT - + OPTPROC_NEGATIONS - + OPTPROC_REORDER - + OPTPROC_GNUUSAGE - + OPTPROC_MISUSE ), - 0, NULL, /* current option index, current option */ - NULL, NULL, zPROGNAME, - zRcName, zCopyright, zLicenseDescrip, - zFullVersion, apzHomeList, zUsageTitle, - zExplain, zDetail, optDesc, - zBugsAddr, /* address to send bugs to */ - NULL, NULL, /* extensions/saved state */ - optionUsage, /* usage procedure */ - translate_option_strings, /* translation procedure */ - /* - * Indexes to special options - */ - { INDEX_OPT_MORE_HELP, /* more-help option index */ - NO_EQUIVALENT, /* save option index */ - NO_EQUIVALENT, /* '-#' option index */ - NO_EQUIVALENT /* index of default opt */ - }, - 72 /* full option count */, 69 /* user option count */, - p11tool_full_usage, p11tool_short_usage, - NULL, NULL, - PKGDATADIR, p11tool_packager_info -}; - -#if ENABLE_NLS -/** - * This code is designed to translate translatable option text for the - * p11tool program. These translations happen upon entry - * to optionProcess(). - */ -#include -#include -#include -#include -#ifdef HAVE_DCGETTEXT -# include -#endif -#include - -static char * AO_gettext(char const * pz); -static void coerce_it(void ** s); - -/** - * AutoGen specific wrapper function for gettext. It relies on the macro _() - * to convert from English to the target language, then strdup-duplicates the - * result string. It tries the "libopts" domain first, then whatever has been - * set via the \a textdomain(3) call. - * - * @param[in] pz the input text used as a lookup key. - * @returns the translated text (if there is one), - * or the original text (if not). - */ -static char * -AO_gettext(char const * pz) -{ - char * res; - if (pz == NULL) - return NULL; -#ifdef HAVE_DCGETTEXT - /* - * While processing the option_xlateable_txt data, try to use the - * "libopts" domain. Once we switch to the option descriptor data, - * do *not* use that domain. - */ - if (option_xlateable_txt.field_ct != 0) { - res = dgettext("libopts", pz); - if (res == pz) - res = (char *)VOIDP(_(pz)); - } else - res = (char *)VOIDP(_(pz)); -#else - res = (char *)VOIDP(_(pz)); -#endif - if (res == pz) - return res; - res = strdup(res); - if (res == NULL) { - fputs(_("No memory for duping translated strings\n"), stderr); - exit(P11TOOL_EXIT_FAILURE); - } - return res; -} - -/** - * All the pointers we use are marked "* const", but they are stored in - * writable memory. Coerce the mutability and set the pointer. - */ -static void coerce_it(void ** s) { *s = AO_gettext(*s); -} - -/** - * Translate all the translatable strings in the p11toolOptions - * structure defined above. This is done only once. - */ -static void -translate_option_strings(void) -{ - tOptions * const opts = &p11toolOptions; - - /* - * Guard against re-translation. It won't work. The strings will have - * been changed by the first pass through this code. One shot only. - */ - if (option_xlateable_txt.field_ct != 0) { - /* - * Do the translations. The first pointer follows the field count - * field. The field count field is the size of a pointer. - */ - char ** ppz = (char**)VOIDP(&(option_xlateable_txt)); - int ix = option_xlateable_txt.field_ct; - - do { - ppz++; /* skip over field_ct */ - *ppz = AO_gettext(*ppz); - } while (--ix > 0); - /* prevent re-translation and disable "libopts" domain lookup */ - option_xlateable_txt.field_ct = 0; - - coerce_it(VOIDP(&(opts->pzCopyright))); - coerce_it(VOIDP(&(opts->pzCopyNotice))); - coerce_it(VOIDP(&(opts->pzFullVersion))); - coerce_it(VOIDP(&(opts->pzUsageTitle))); - coerce_it(VOIDP(&(opts->pzExplain))); - coerce_it(VOIDP(&(opts->pzDetail))); - { - tOptDesc * od = opts->pOptDesc; - for (ix = opts->optCt; ix > 0; ix--, od++) - coerce_it(VOIDP(&(od->pzText))); - } - } -} -#endif /* ENABLE_NLS */ - -#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT -/** I18N function strictly for xgettext. Do not compile. */ -static void bogus_function(void) { - /* TRANSLATORS: - - The following dummy function was crated solely so that xgettext can - extract the correct strings. These strings are actually referenced - by a field name in the p11toolOptions structure noted in the - comments below. The literal text is defined in p11tool_opt_strs. - - NOTE: the strings below are segmented with respect to the source string - p11tool_opt_strs. The strings above are handed off for translation - at run time a paragraph at a time. Consequently, they are presented here - for translation a paragraph at a time. - - ALSO: often the description for an option will reference another option - by name. These are set off with apostrophe quotes (I hope). Do not - translate option names. - */ - /* referenced via p11toolOptions.pzCopyright */ - puts(_("p11tool @VERSION@\n\ -Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n\ -This is free software. It is licensed for use, modification and\n\ -redistribution under the terms of the GNU General Public License,\n\ -version 3 or later \n")); - - /* referenced via p11toolOptions.pzCopyNotice */ - puts(_("p11tool is free software: you can redistribute it and/or modify it under\n\ -the terms of the GNU General Public License as published by the Free\n\ -Software Foundation, either version 3 of the License, or (at your option)\n\ -any later version.\n\n")); - puts(_("p11tool is distributed in the hope that it will be useful, but WITHOUT ANY\n\ -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\ -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n\ -details.\n\n")); - puts(_("You should have received a copy of the GNU General Public License along\n\ -with this program. If not, see .\n")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Tokens:")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("List all available tokens")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("List the URLs available tokens")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("List all available mechanisms in a token")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Initializes a PKCS #11 token")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Initializes/Resets a PKCS #11 token user PIN")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Initializes/Resets a PKCS #11 token security officer PIN")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Specify the PIN to use on token initialization")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Specify the Security Officer's PIN to use on token initialization")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Object listing:")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("List all available objects in a token")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("List all available certificates in a token")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("List all certificates that have an associated private key")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("List all available private keys in a token")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'list-all-privkeys' option")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'list-all-privkeys' option")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("List all available certificates marked as trusted")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Export the object specified by the URL")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Export the certificate object specified by the URL")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Export the certificate specified by the URL and its chain of trust")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Export the public key for a private key")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("List information on an available object in a token")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'mark-trusted' option")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'mark-distrusted' option")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Key generation:")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Generate an RSA private-public key pair")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Generate a DSA private-public key pair")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Generate an ECDSA private-public key pair")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Specify the number of bits for the key generate")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Specify the curve used for EC key generation")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Specify the security level")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Writing objects:")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Set the CKA_ID (in hex) for the specified by the URL object")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Set the CKA_LABEL for the specified by the URL object")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Writes the loaded objects to a PKCS #11 token")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Deletes the objects matching the given PKCS #11 URL")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Sets a label for the write operation")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Sets an ID for the write operation")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Marks the generated key to be a wrapping key")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Marks the object to be written as trusted")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("When retrieving objects, it requires the objects to be distrusted\n\ -(blacklisted)")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Marks the object to be written for decryption")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Marks the object to be written for signature generation")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Marks the object to be written as a CA")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Marks the object to be written as private")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'mark-ca' option")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'mark-private' option")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Provide a hex encoded secret key")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Private key file to use")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Public key file to use")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Certificate file to use")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Other options:")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Enable debugging")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Output file")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Force (user) login to token")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Force security officer login to token")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'so-login' option")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Tests the signature operation of the provided object")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Generate random data")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Use PKCS #8 format for private keys")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Use DER/RAW format for input")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'inder' option")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Use DER format for output certificates, private keys, and DH parameters")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("an alias for the 'outder' option")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Specify the PKCS #11 provider library")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Specify parameters for the PKCS #11 provider library")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Print detailed URLs")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Print a compact listing using only the URLs")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("Disable all interaction with the tool")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("display extended usage information and exit")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("extended usage information passed thru pager")); - - /* referenced via p11toolOptions.pOptDesc->pzText */ - puts(_("output version information and exit")); - - /* referenced via p11toolOptions.pzUsageTitle */ - puts(_("p11tool - GnuTLS PKCS #11 tool\n\ -Usage: %s [ - [] | --[{=| }] ]... [url]\n")); - - /* referenced via p11toolOptions.pzExplain */ - puts(_("\n")); - - /* referenced via p11toolOptions.pzDetail */ - puts(_("Program that allows operations on PKCS #11 smart cards and security\n\ -modules.\n\n")); - puts(_("To use PKCS #11 tokens with GnuTLS the p11-kit configuration files need to\n\ -be setup. That is create a .module file in /etc/pkcs11/modules with the\n\ -contents 'module: /path/to/pkcs11.so'. Alternatively the configuration\n\ -file /etc/gnutls/pkcs11.conf has to exist and contain a number of lines of\n\ -the form 'load=/usr/lib/opensc-pkcs11.so'.\n\n")); - puts(_("You can provide the PIN to be used for the PKCS #11 operations with the\n\ -environment variables GNUTLS_PIN and GNUTLS_SO_PIN.\n")); - - /* referenced via p11toolOptions.pzFullVersion */ - puts(_("p11tool @VERSION@")); - - /* referenced via p11toolOptions.pzFullUsage */ - puts(_("<<>>")); - - /* referenced via p11toolOptions.pzShortUsage */ - puts(_("p11tool [options] [url]\n\ -p11tool --help for usage instructions.\n")); - /* LIBOPTS-MESSAGES: */ -#line 67 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" - puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" - puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" - puts(_("Automated Options Processing Error!\n" - "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" - puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" - puts(_("\tThis is less than the minimum library version: ")); -#line 121 "../version.c" - puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" - puts(_("(AutoOpts bug): %s.\n")); -#line 90 "../reset.c" - puts(_("optionResetOpt() called, but reset-option not configured")); -#line 295 "../usage.c" - puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" - puts(_("optionProcess() was called with invalid data")); -#line 751 "../usage.c" - puts(_("invalid argument type specified")); -#line 598 "../find.c" - puts(_("defaulted to option with optional arg")); -#line 76 "../alias.c" - puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" - puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" - puts(_(" The following options match:\n")); -#line 293 "../find.c" - puts(_("%s: ambiguous option name: %s (matches %d options)\n")); -#line 161 "../check.c" - puts(_("%s: Command line arguments required\n")); -#line 43 "../alias.c" - puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" - puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" - puts(_("interprocess pipe")); -#line 168 "../version.c" - puts(_("error: version option argument '%c' invalid. Use:\n" - "\t'v' - version only\n" - "\t'c' - version and copyright\n" - "\t'n' - version and full copyright notice\n")); -#line 58 "../check.c" - puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 38 "../alias.c" - puts(_("-equivalence")); -#line 469 "../find.c" - puts(_("%s: illegal option -- %c\n")); -#line 110 "../reset.c" - puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 118 "../reset.c" - puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" - puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 750 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 1084 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" - puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" - puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" - puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" - "\t'%s' and '%s'.")); -#line 94 "../check.c" - puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" - puts(_("%s: The '%s' option cannot have an argument.\n")); -#line 151 "../check.c" - puts(_("%s: Command line arguments are not allowed.\n")); -#line 536 "../save.c" - puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" - puts(_("%s error: '%s' does not match any %s keywords.\n")); -#line 93 "../reset.c" - puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 239 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 143 "../restore.c" - puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" - puts(_("'%s' is not a command line option.\n")); -#line 113 "../time.c" - puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); -#line 50 "../time.c" - puts(_("%s error: '%s' is not a recognizable time duration.\n")); -#line 92 "../check.c" - puts(_("%s error: The %s option must appear %d times.\n")); -#line 165 "../numeric.c" - puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" - puts(_("%s error: %s exceeds %s keyword count\n")); -#line 333 "../usage.c" - puts(_("Try '%s %s' for more information.\n")); -#line 45 "../alias.c" - puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" - puts(_("standard output")); -#line 943 "../makeshell.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard output")); -#line 418 "../usage.c" - puts(_("standard output")); -#line 628 "../usage.c" - puts(_("standard output")); -#line 175 "../version.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard error")); -#line 418 "../usage.c" - puts(_("standard error")); -#line 628 "../usage.c" - puts(_("standard error")); -#line 175 "../version.c" - puts(_("standard error")); -#line 208 "../makeshell.c" - puts(_("write")); -#line 943 "../makeshell.c" - puts(_("write")); -#line 276 "../usage.c" - puts(_("write")); -#line 417 "../usage.c" - puts(_("write")); -#line 627 "../usage.c" - puts(_("write")); -#line 174 "../version.c" - puts(_("write")); -#line 60 "../numeric.c" - puts(_("%s error: %s option value %ld is out of range.\n")); -#line 44 "../check.c" - puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 238 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 257 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 535 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); - /* END-LIBOPTS-MESSAGES */ - - /* USAGE-TEXT: */ -#line 876 "../usage.c" - puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1151 "../usage.c" - puts(_("Version, usage and configuration options:")); -#line 927 "../usage.c" - puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 840 "../usage.c" - puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1120 "../usage.c" - puts(_(" --- %-14s %s\n")); -#line 1118 "../usage.c" - puts(_("This option has been disabled")); -#line 867 "../usage.c" - puts(_("\t\t\t\t- enabled by default\n")); -#line 40 "../alias.c" - puts(_("%s error: only ")); -#line 1197 "../usage.c" - puts(_(" - examining environment variables named %s_*\n")); -#line 168 "../file.c" - puts(_("\t\t\t\t- file must not pre-exist\n")); -#line 172 "../file.c" - puts(_("\t\t\t\t- file must pre-exist\n")); -#line 383 "../usage.c" - puts(_("Options are specified by doubled hyphens and their name or by a single\n" - "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" - puts(_("\n" - "= = = = = = = =\n\n" - "This incarnation of genshell will produce\n" - "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" - puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 900 "../usage.c" - puts(_("\t\t\t\t- is a set membership option\n")); -#line 921 "../usage.c" - puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 385 "../usage.c" - puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 907 "../usage.c" - puts(_("\t\t\t\t- may appear multiple times\n")); -#line 894 "../usage.c" - puts(_("\t\t\t\t- may not be preset\n")); -#line 1312 "../usage.c" - puts(_(" Arg Option-Name Description\n")); -#line 1248 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1306 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1307 "../usage.c" - puts(_(" %3s %s")); -#line 1313 "../usage.c" - puts(_(" %3s %s")); -#line 390 "../usage.c" - puts(_("The '-#' option may omit the hash char\n")); -#line 386 "../usage.c" - puts(_("All arguments are named options.\n")); -#line 974 "../usage.c" - puts(_(" - reading file %s")); -#line 412 "../usage.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 100 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 129 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 906 "../usage.c" - puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 947 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 1195 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 685 "../usage.c" - puts(_("prohibits these options:\n")); -#line 680 "../usage.c" - puts(_("prohibits the option '%s'\n")); -#line 81 "../numeric.c" - puts(_("%s%ld to %ld")); -#line 79 "../numeric.c" - puts(_("%sgreater than or equal to %ld")); -#line 75 "../numeric.c" - puts(_("%s%ld exactly")); -#line 68 "../numeric.c" - puts(_("%sit must lie in one of the ranges:\n")); -#line 68 "../numeric.c" - puts(_("%sit must be in the range:\n")); -#line 88 "../numeric.c" - puts(_(", or\n")); -#line 66 "../numeric.c" - puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); -#line 77 "../numeric.c" - puts(_("%sless than or equal to %ld")); -#line 393 "../usage.c" - puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 655 "../usage.c" - puts(_("requires the option '%s'\n")); -#line 658 "../usage.c" - puts(_("requires these options:\n")); -#line 1324 "../usage.c" - puts(_(" Arg Option-Name Req? Description\n")); -#line 1318 "../usage.c" - puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" - puts(_("or you may use a numeric representation. Preceding these with a '!'\n" - "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" - "will set them all. Multiple entries may be passed as an option\n" - "argument list.\n")); -#line 913 "../usage.c" - puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" - puts(_("The valid \"%s\" option keywords are:\n")); -#line 1155 "../usage.c" - puts(_("The next option supports vendor supported extra options:")); -#line 776 "../usage.c" - puts(_("These additional options are:")); - /* END-USAGE-TEXT */ -} -#endif /* uncompilable code */ -#ifdef __cplusplus -} -#endif -/* p11tool-args.c ends here */ diff --git a/src/p11tool-args.def b/src/p11tool-args.def index 66ba2f5151..bd7789e017 100644 --- a/src/p11tool-args.def +++ b/src/p11tool-args.def @@ -57,14 +57,15 @@ flag = { flag = { name = initialize-so-pin; - descrip = "Initializes/Resets a PKCS #11 token security officer PIN"; - doc = ""; + descrip = "Initializes/Resets a PKCS #11 token security officer PIN."; + doc = "This initializes the security officer's PIN. When used non-interactively use the GNUTLS_NEW_SO_PIN +environment variables to initialize SO's PIN."; }; flag = { name = set-pin; arg-type = string; - descrip = "Specify the PIN to use on token initialization"; + descrip = "Specify the PIN to use on token operations"; doc = "Alternatively the GNUTLS_PIN environment variable may be used."; }; @@ -84,19 +85,23 @@ flag = { flag = { name = list-all; descrip = "List all available objects in a token"; - doc = ""; + doc = "All objects available in the token will be listed. That includes +objects which are potentially unaccessible using this tool."; }; flag = { name = list-all-certs; descrip = "List all available certificates in a token"; - doc = ""; + doc = "That option will also provide more information on the +certificates, for example, expand the attached extensions in a trust +token (like p11-kit-trust)."; }; flag = { name = list-certs; descrip = "List all certificates that have an associated private key"; - doc = ""; + doc = "That option will only display certificates which have a private +key associated with them (share the same ID)."; }; flag = { @@ -181,11 +186,20 @@ flag = { descrip = "Key generation"; }; +flag = { + name = generate-privkey; + arg-type = string; + descrip = "Generate private-public key pair of given type"; + doc = "Generates a private-public key pair in the specified token. +Acceptable types are RSA, ECDSA, Ed25519, and DSA. Should be combined with --sec-param or --bits."; +}; + flag = { name = generate-rsa; descrip = "Generate an RSA private-public key pair"; doc = "Generates an RSA private-public key pair on the specified token. Should be combined with --sec-param or --bits."; + deprecated; }; flag = { @@ -193,6 +207,7 @@ flag = { descrip = "Generate a DSA private-public key pair"; doc = "Generates a DSA private-public key pair on the specified token. Should be combined with --sec-param or --bits."; + deprecated; }; flag = { @@ -200,6 +215,7 @@ flag = { descrip = "Generate an ECDSA private-public key pair"; doc = "Generates an ECDSA private-public key pair on the specified token. Should be combined with --curve, --sec-param or --bits."; + deprecated; }; flag = { @@ -412,6 +428,22 @@ If both a private and a public key are available this operation will sign and ve the signed data."; }; +flag = { + name = sign-params; + arg-type = string; + descrip = "Sign with a specific signature algorithm"; + doc = "This option can be combined with --test-sign, to sign with +a specific signature algorithm variant. The only option supported is 'RSA-PSS', and should be +specified in order to use RSA-PSS signature on RSA keys."; +}; + +flag = { + name = hash; + arg-type = string; + descrip = "Hash algorithm to use for signing"; + doc = "This option can be combined with test-sign. Available hash functions are SHA1, RMD160, SHA256, SHA384, SHA512, SHA3-224, SHA3-256, SHA3-384, SHA3-512."; +}; + flag = { name = generate-random; descrip = "Generate random data"; @@ -465,6 +497,7 @@ flag = { descrip = "Specify parameters for the PKCS #11 provider library"; doc = "This is a PKCS#11 internal option used by few modules. Mainly for testing PKCS#11 modules."; + deprecated; }; flag = { @@ -522,7 +555,7 @@ and its corresponding private key. To generate an RSA private key inside the token use: @example -$ p11tool --login --generate-rsa --bits 1024 --label "MyNewKey" \ +$ p11tool --login --generate-privkey rsa --bits 1024 --label "MyNewKey" \ --outfile MyNewKey.pub "pkcs11:TOKEN-URL" @end example The bits parameter in the above example is explicitly set because some diff --git a/src/p11tool-args.h.bak b/src/p11tool-args.h.bak deleted file mode 100644 index 475422cc90..0000000000 --- a/src/p11tool-args.h.bak +++ /dev/null @@ -1,343 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (p11tool-args.h) - * - * It has been AutoGen-ed - * From the definitions p11tool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This header file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the p11tool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The p11tool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * p11tool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * p11tool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -/** - * This file contains the programmatic interface to the Automated - * Options generated for the p11tool program. - * These macros are documented in the AutoGen info file in the - * "AutoOpts" chapter. Please refer to that doc for usage help. - */ -#ifndef AUTOOPTS_P11TOOL_ARGS_H_GUARD -#define AUTOOPTS_P11TOOL_ARGS_H_GUARD 1 -#include "config.h" -#include - -/** - * Ensure that the library used for compiling this generated header is at - * least as new as the version current when the header template was released - * (not counting patch version increments). Also ensure that the oldest - * tolerable version is at least as old as what was current when the header - * template was released. - */ -#define AO_TEMPLATE_VERSION 167937 -#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ - || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) -# error option template version mismatches autoopts/options.h header - Choke Me. -#endif - -/** - * Enumeration of each option type for p11tool - */ -typedef enum { - INDEX_OPT_LIST_TOKENS = 1, - INDEX_OPT_LIST_TOKEN_URLS = 2, - INDEX_OPT_LIST_MECHANISMS = 3, - INDEX_OPT_INITIALIZE = 4, - INDEX_OPT_INITIALIZE_PIN = 5, - INDEX_OPT_INITIALIZE_SO_PIN = 6, - INDEX_OPT_SET_PIN = 7, - INDEX_OPT_SET_SO_PIN = 8, - INDEX_OPT_LIST_ALL = 10, - INDEX_OPT_LIST_ALL_CERTS = 11, - INDEX_OPT_LIST_CERTS = 12, - INDEX_OPT_LIST_ALL_PRIVKEYS = 13, - INDEX_OPT_LIST_PRIVKEYS = 14, - INDEX_OPT_LIST_KEYS = 15, - INDEX_OPT_LIST_ALL_TRUSTED = 16, - INDEX_OPT_EXPORT = 17, - INDEX_OPT_EXPORT_STAPLED = 18, - INDEX_OPT_EXPORT_CHAIN = 19, - INDEX_OPT_EXPORT_PUBKEY = 20, - INDEX_OPT_INFO = 21, - INDEX_OPT_TRUSTED = 22, - INDEX_OPT_DISTRUSTED = 23, - INDEX_OPT_GENERATE_RSA = 25, - INDEX_OPT_GENERATE_DSA = 26, - INDEX_OPT_GENERATE_ECC = 27, - INDEX_OPT_BITS = 28, - INDEX_OPT_CURVE = 29, - INDEX_OPT_SEC_PARAM = 30, - INDEX_OPT_SET_ID = 32, - INDEX_OPT_SET_LABEL = 33, - INDEX_OPT_WRITE = 34, - INDEX_OPT_DELETE = 35, - INDEX_OPT_LABEL = 36, - INDEX_OPT_ID = 37, - INDEX_OPT_MARK_WRAP = 38, - INDEX_OPT_MARK_TRUSTED = 39, - INDEX_OPT_MARK_DISTRUSTED = 40, - INDEX_OPT_MARK_DECRYPT = 41, - INDEX_OPT_MARK_SIGN = 42, - INDEX_OPT_MARK_CA = 43, - INDEX_OPT_MARK_PRIVATE = 44, - INDEX_OPT_CA = 45, - INDEX_OPT_PRIVATE = 46, - INDEX_OPT_SECRET_KEY = 47, - INDEX_OPT_LOAD_PRIVKEY = 48, - INDEX_OPT_LOAD_PUBKEY = 49, - INDEX_OPT_LOAD_CERTIFICATE = 50, - INDEX_OPT_DEBUG = 52, - INDEX_OPT_OUTFILE = 53, - INDEX_OPT_LOGIN = 54, - INDEX_OPT_SO_LOGIN = 55, - INDEX_OPT_ADMIN_LOGIN = 56, - INDEX_OPT_TEST_SIGN = 57, - INDEX_OPT_GENERATE_RANDOM = 58, - INDEX_OPT_PKCS8 = 59, - INDEX_OPT_INDER = 60, - INDEX_OPT_INRAW = 61, - INDEX_OPT_OUTDER = 62, - INDEX_OPT_OUTRAW = 63, - INDEX_OPT_PROVIDER = 64, - INDEX_OPT_PROVIDER_OPTS = 65, - INDEX_OPT_DETAILED_URL = 66, - INDEX_OPT_ONLY_URLS = 67, - INDEX_OPT_BATCH = 68, - INDEX_OPT_VERSION = 69, - INDEX_OPT_HELP = 70, - INDEX_OPT_MORE_HELP = 71 -} teOptIndex; -/** count of all options for p11tool */ -#define OPTION_CT 72 -/** p11tool version */ -#define P11TOOL_VERSION "@VERSION@" -/** Full p11tool version text */ -#define P11TOOL_FULL_VERSION "p11tool @VERSION@" - -/** - * Interface defines for all options. Replace "n" with the UPPER_CASED - * option name (as in the teOptIndex enumeration above). - * e.g. HAVE_OPT(TOKEN_RELATED_OPTIONS) - */ -#define DESC(n) (p11toolOptions.pOptDesc[INDEX_OPT_## n]) -/** 'true' if an option has been specified in any way */ -#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) -/** The string argument to an option. The argument type must be \"string\". */ -#define OPT_ARG(n) (DESC(n).optArg.argString) -/** Mask the option state revealing how an option was specified. - * It will be one and only one of \a OPTST_SET, \a OPTST_PRESET, - * \a OPTST_DEFINED, \a OPTST_RESET or zero. - */ -#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) -/** Count of option's occurrances *on the command line*. */ -#define COUNT_OPT(n) (DESC(n).optOccCt) -/** mask of \a OPTST_SET and \a OPTST_DEFINED. */ -#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) -/** 'true' if \a HAVE_OPT would yield 'false'. */ -#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) -/** 'true' if OPTST_DISABLED bit not set. */ -#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) -/** number of stacked option arguments. - * Valid only for stacked option arguments. */ -#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) -/** stacked argument vector. - * Valid only for stacked option arguments. */ -#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) -/** Reset an option. */ -#define CLEAR_OPT(n) STMTS( \ - DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ - if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \ - DESC(n).fOptState |= OPTST_DISABLED; \ - DESC(n).optCookie = NULL ) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Enumeration of p11tool exit codes - */ -typedef enum { - P11TOOL_EXIT_SUCCESS = 0, - P11TOOL_EXIT_FAILURE = 1, - P11TOOL_EXIT_USAGE_ERROR = 64, - P11TOOL_EXIT_LIBOPTS_FAILURE = 70 -} p11tool_exit_code_t; -/** - * Interface defines for specific options. - * @{ - */ -#define VALUE_OPT_LIST_TOKENS 0x1001 -#define VALUE_OPT_LIST_TOKEN_URLS 0x1002 -#define VALUE_OPT_LIST_MECHANISMS 0x1003 -#define VALUE_OPT_INITIALIZE 0x1004 -#define VALUE_OPT_INITIALIZE_PIN 0x1005 -#define VALUE_OPT_INITIALIZE_SO_PIN 0x1006 -#define VALUE_OPT_SET_PIN 0x1007 -#define VALUE_OPT_SET_SO_PIN 0x1008 -#define VALUE_OPT_LIST_ALL 0x1009 -#define VALUE_OPT_LIST_ALL_CERTS 0x100A -#define VALUE_OPT_LIST_CERTS 0x100B -#define VALUE_OPT_LIST_ALL_PRIVKEYS 0x100C -#define VALUE_OPT_LIST_PRIVKEYS 0x100D -#define VALUE_OPT_LIST_KEYS 0x100E -#define VALUE_OPT_LIST_ALL_TRUSTED 0x100F -#define VALUE_OPT_EXPORT 0x1010 -#define VALUE_OPT_EXPORT_STAPLED 0x1011 -#define VALUE_OPT_EXPORT_CHAIN 0x1012 -#define VALUE_OPT_EXPORT_PUBKEY 0x1013 -#define VALUE_OPT_INFO 0x1014 -#define VALUE_OPT_TRUSTED 0x1015 -#define VALUE_OPT_DISTRUSTED 0x1016 -#define VALUE_OPT_GENERATE_RSA 0x1017 -#define VALUE_OPT_GENERATE_DSA 0x1018 -#define VALUE_OPT_GENERATE_ECC 0x1019 -#define VALUE_OPT_BITS 0x101A - -#define OPT_VALUE_BITS (DESC(BITS).optArg.argInt) -#define VALUE_OPT_CURVE 0x101B -#define VALUE_OPT_SEC_PARAM 0x101C -#define VALUE_OPT_SET_ID 0x101D -#define VALUE_OPT_SET_LABEL 0x101E -#define VALUE_OPT_WRITE 0x101F -#define VALUE_OPT_DELETE 0x1020 -#define VALUE_OPT_LABEL 0x1021 -#define VALUE_OPT_ID 0x1022 -#define VALUE_OPT_MARK_WRAP 0x1023 -#define VALUE_OPT_MARK_TRUSTED 0x1024 -#define VALUE_OPT_MARK_DISTRUSTED 0x1025 -#define VALUE_OPT_MARK_DECRYPT 0x1026 -#define VALUE_OPT_MARK_SIGN 0x1027 -#define VALUE_OPT_MARK_CA 0x1028 -#define VALUE_OPT_MARK_PRIVATE 0x1029 -#define VALUE_OPT_CA 0x102A -#define VALUE_OPT_PRIVATE 0x102B -#define VALUE_OPT_SECRET_KEY 0x102C -#define VALUE_OPT_LOAD_PRIVKEY 0x102D -#define VALUE_OPT_LOAD_PUBKEY 0x102E -#define VALUE_OPT_LOAD_CERTIFICATE 0x102F -#define VALUE_OPT_DEBUG 'd' - -#define OPT_VALUE_DEBUG (DESC(DEBUG).optArg.argInt) -#define VALUE_OPT_OUTFILE 0x1030 -#define VALUE_OPT_LOGIN 0x1031 -#define VALUE_OPT_SO_LOGIN 0x1032 -#define VALUE_OPT_ADMIN_LOGIN 0x1033 -#define VALUE_OPT_TEST_SIGN 0x1034 -#define VALUE_OPT_GENERATE_RANDOM 0x1035 - -#define OPT_VALUE_GENERATE_RANDOM (DESC(GENERATE_RANDOM).optArg.argInt) -#define VALUE_OPT_PKCS8 '8' -#define VALUE_OPT_INDER 0x1036 -#define VALUE_OPT_INRAW 0x1037 -#define VALUE_OPT_OUTDER 0x1038 -#define VALUE_OPT_OUTRAW 0x1039 -#define VALUE_OPT_PROVIDER 0x103A -#define VALUE_OPT_PROVIDER_OPTS 0x103B -#define VALUE_OPT_DETAILED_URL 0x103C -#define VALUE_OPT_ONLY_URLS 0x103D -#define VALUE_OPT_BATCH 0x103E -/** option flag (value) for help-value option */ -#define VALUE_OPT_HELP 'h' -/** option flag (value) for more-help-value option */ -#define VALUE_OPT_MORE_HELP '!' -/** option flag (value) for version-value option */ -#define VALUE_OPT_VERSION 'v' -/* - * Interface defines not associated with particular options - */ -#define ERRSKIP_OPTERR STMTS(p11toolOptions.fOptSet &= ~OPTPROC_ERRSTOP) -#define ERRSTOP_OPTERR STMTS(p11toolOptions.fOptSet |= OPTPROC_ERRSTOP) -#define RESTART_OPT(n) STMTS( \ - p11toolOptions.curOptIdx = (n); \ - p11toolOptions.pzCurOpt = NULL ) -#define START_OPT RESTART_OPT(1) -#define USAGE(c) (*p11toolOptions.pUsageProc)(&p11toolOptions, c) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * global exported definitions - */ -#include - - -/* * * * * * - * - * Declare the p11tool option descriptor. - */ -extern tOptions p11toolOptions; - -#if defined(ENABLE_NLS) -# ifndef _ -# include -# ifndef HAVE_GETTEXT - extern char * gettext(char const *); -# else -# include -# endif - -# ifndef ATTRIBUTE_FORMAT_ARG -# define ATTRIBUTE_FORMAT_ARG(_a) -# endif - -static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1); -static inline char* aoGetsText(char const* pz) { - if (pz == NULL) return NULL; - return (char*)gettext(pz); -} -# define _(s) aoGetsText(s) -# endif /* _() */ - -# define OPT_NO_XLAT_CFG_NAMES STMTS(p11toolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT_CFG;) -# define OPT_NO_XLAT_OPT_NAMES STMTS(p11toolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;) - -# define OPT_XLAT_CFG_NAMES STMTS(p11toolOptions.fOptSet &= \ - ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);) -# define OPT_XLAT_OPT_NAMES STMTS(p11toolOptions.fOptSet &= \ - ~OPTPROC_NXLAT_OPT;) - -#else /* ENABLE_NLS */ -# define OPT_NO_XLAT_CFG_NAMES -# define OPT_NO_XLAT_OPT_NAMES - -# define OPT_XLAT_CFG_NAMES -# define OPT_XLAT_OPT_NAMES - -# ifndef _ -# define _(_s) _s -# endif -#endif /* ENABLE_NLS */ - -#ifdef __cplusplus -} -#endif -#endif /* AUTOOPTS_P11TOOL_ARGS_H_GUARD */ - -/* p11tool-args.h ends here */ diff --git a/src/p11tool.c b/src/p11tool.c index 6b9718e374..43ef4f5d46 100644 --- a/src/p11tool.c +++ b/src/p11tool.c @@ -18,7 +18,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -202,6 +202,17 @@ static void cmd_parser(int argc, char **argv) memset(&cinfo, 0, sizeof(cinfo)); + if (HAVE_OPT(HASH)) { + cinfo.hash = hash_to_id(OPT_ARG(HASH)); + if (cinfo.hash == GNUTLS_DIG_UNKNOWN) { + fprintf(stderr, "invalid hash: %s\n", OPT_ARG(HASH)); + app_exit(1); + } + } + + if (HAVE_OPT(SIGN_PARAMS)) + sign_params_to_flags(&cinfo, OPT_ARG(SIGN_PARAMS)); + if (HAVE_OPT(SECRET_KEY)) cinfo.secret_key = OPT_ARG(SECRET_KEY); @@ -216,7 +227,7 @@ static void cmd_parser(int argc, char **argv) } if (HAVE_OPT(ONLY_URLS)) { - batch = cinfo.only_urls = 1; + cinfo.only_urls = 1; } if (ENABLED_OPT(INDER) || ENABLED_OPT(INRAW)) @@ -317,12 +328,20 @@ static void cmd_parser(int argc, char **argv) } else if (HAVE_OPT(INITIALIZE)) { pkcs11_init(outfile, url, label, &cinfo); } else if (HAVE_OPT(INITIALIZE_PIN)) { - pkcs11_set_pin(outfile, url, &cinfo, 0); + pkcs11_set_token_pin(outfile, url, &cinfo, 0); } else if (HAVE_OPT(INITIALIZE_SO_PIN)) { - pkcs11_set_pin(outfile, url, &cinfo, 1); - } else if (HAVE_OPT(DELETE)) + pkcs11_set_token_pin(outfile, url, &cinfo, 1); + } else if (HAVE_OPT(DELETE)) { pkcs11_delete(outfile, url, flags, &cinfo); - else if (HAVE_OPT(GENERATE_ECC)) { + } else if (HAVE_OPT(GENERATE_PRIVKEY)) { + key_type = figure_key_type(OPT_ARG(GENERATE_PRIVKEY)); + if (key_type == GNUTLS_PK_UNKNOWN) + app_exit(1); + pkcs11_generate(outfile, url, key_type, + get_bits(key_type, bits, sec_param, 0), + label, id, detailed_url, + flags, &cinfo); + } else if (HAVE_OPT(GENERATE_ECC)) { key_type = GNUTLS_PK_EC; pkcs11_generate(outfile, url, key_type, get_bits(key_type, bits, sec_param, 0), diff --git a/src/p11tool.h b/src/p11tool.h index dda598bb78..073bc79ca7 100644 --- a/src/p11tool.h +++ b/src/p11tool.h @@ -17,11 +17,11 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ -#ifndef P11TOOL_H -#define P11TOOL_H +#ifndef GNUTLS_SRC_P11TOOL_H +#define GNUTLS_SRC_P11TOOL_H #include "certtool-common.h" @@ -49,7 +49,7 @@ void pkcs11_delete(FILE * outfile, const char *pkcs11_url, unsigned int flags, common_info_st *); void pkcs11_init(FILE * outfile, const char *pkcs11_url, const char *label, common_info_st *); -void pkcs11_set_pin(FILE * outfile, const char *pkcs11_url, common_info_st *, unsigned so); +void pkcs11_set_token_pin(FILE * outfile, const char *pkcs11_url, common_info_st *, unsigned so); void pkcs11_generate(FILE * outfile, const char *url, gnutls_pk_algorithm_t type, unsigned int bits, const char *label, const char *id, int detailed, @@ -72,4 +72,4 @@ void pkcs11_set_label(FILE * outfile, const char *url, int detailed, #define PKCS11_TYPE_PRIVKEY 5 #define PKCS11_TYPE_INFO 6 -#endif +#endif /* GNUTLS_SRC_P11TOOL_H */ diff --git a/src/pkcs11.c b/src/pkcs11.c index bd5bbf08e7..0ab956f011 100644 --- a/src/pkcs11.c +++ b/src/pkcs11.c @@ -17,12 +17,10 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ #include -#include - #include #include #include @@ -36,6 +34,8 @@ #include #include +#include + #ifdef _WIN32 # define sleep(x) Sleep(x*1000) #endif @@ -59,10 +59,19 @@ static char *_saved_url = NULL; #define KEEP_LOGIN_FLAGS(flags) (flags & (GNUTLS_PKCS11_OBJ_FLAG_LOGIN|GNUTLS_PKCS11_OBJ_FLAG_LOGIN_SO)) -#define CHECK_LOGIN_FLAG(flags) \ - if ((flags & KEEP_LOGIN_FLAGS(flags)) == 0) \ - fprintf(stderr, \ - "warning: --login was not specified and it may be required for this operation.\n") +#define CHECK_LOGIN_FLAG(url, flags) \ + if ((flags & KEEP_LOGIN_FLAGS(flags)) == 0) { \ + unsigned _tflags; \ + int _r = gnutls_pkcs11_token_get_flags(url, &_tflags); \ + if (_r >= 0 && (_tflags & GNUTLS_PKCS11_TOKEN_LOGIN_REQUIRED)) { \ + flags |= GNUTLS_PKCS11_OBJ_FLAG_LOGIN; \ + fprintf(stderr, \ + "note: assuming --login for this operation.\n"); \ + } else { \ + fprintf(stderr, \ + "warning: --login was not specified and it may be required for this operation.\n"); \ + } \ + } void @@ -74,6 +83,8 @@ pkcs11_delete(FILE * outfile, const char *url, if (login_flags) obj_flags = login_flags; + pkcs11_common(info); + if (info->batch == 0) { pkcs11_list(outfile, url, PKCS11_TYPE_ALL, login_flags, GNUTLS_PKCS11_URL_LIB, info); @@ -98,6 +109,116 @@ pkcs11_delete(FILE * outfile, const char *url, return; } +static +const char *get_key_algo_type(gnutls_pkcs11_obj_type_t otype, const char *objurl, unsigned flags, time_t *exp) +{ + int ret; + gnutls_pubkey_t pubkey = NULL; + gnutls_privkey_t privkey = NULL; + gnutls_x509_crt_t crt = NULL; + static char str[256]; + const char *p; + unsigned int bits; + gnutls_pk_algorithm_t pk; + gnutls_ecc_curve_t curve; + + if (exp) + *exp = -1; + + switch (otype) { + case GNUTLS_PKCS11_OBJ_X509_CRT: + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) + goto fail; + + ret = gnutls_x509_crt_import_url(crt, objurl, flags); + if (ret < 0) + goto fail; + ret = gnutls_x509_crt_get_pk_algorithm(crt, &bits); + if (ret < 0) + goto fail; + pk = ret; + + p = gnutls_pk_get_name(pk); + if (p) { + if ((pk == GNUTLS_PK_RSA || pk == GNUTLS_PK_DSA) && bits > 0) { + snprintf(str, sizeof(str), "%s-%d", p, bits); + p = str; + } else if (pk == GNUTLS_PK_ECDSA && gnutls_x509_crt_get_pk_ecc_raw(crt, &curve, NULL, NULL) >= 0) { + snprintf(str, sizeof(str), "%s-%s", p, gnutls_ecc_curve_get_name(curve)); + p = str; + } + } + + if (exp) + *exp = gnutls_x509_crt_get_expiration_time(crt); + + gnutls_x509_crt_deinit(crt); + return p; + case GNUTLS_PKCS11_OBJ_PUBKEY: + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + goto fail; + + ret = gnutls_pubkey_import_url(pubkey, objurl, flags); + if (ret < 0) + goto fail; + ret = gnutls_pubkey_get_pk_algorithm(pubkey, &bits); + if (ret < 0) + goto fail; + pk = ret; + + p = gnutls_pk_get_name(pk); + if (p) { + if ((pk == GNUTLS_PK_RSA || pk == GNUTLS_PK_DSA) && bits > 0) { + snprintf(str, sizeof(str), "%s-%d", p, bits); + p = str; + } else if (pk == GNUTLS_PK_ECDSA && gnutls_pubkey_export_ecc_raw(pubkey, &curve, NULL, NULL) >= 0) { + snprintf(str, sizeof(str), "%s-%s", p, gnutls_ecc_curve_get_name(curve)); + p = str; + } + } + + gnutls_pubkey_deinit(pubkey); + return p; + case GNUTLS_PKCS11_OBJ_PRIVKEY: + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + goto fail; + + ret = gnutls_privkey_import_url(privkey, objurl, flags); + if (ret < 0) + goto fail; + ret = gnutls_privkey_get_pk_algorithm(privkey, &bits); + if (ret < 0) + goto fail; + pk = ret; + + p = gnutls_pk_get_name(pk); + if (p) { + if ((pk == GNUTLS_PK_RSA || pk == GNUTLS_PK_DSA) && bits > 0) { + snprintf(str, sizeof(str), "%s-%d", p, bits); + p = str; + } else if (pk == GNUTLS_PK_ECDSA && gnutls_privkey_export_ecc_raw(privkey, &curve, NULL, NULL, NULL) >= 0) { + snprintf(str, sizeof(str), "%s-%s", p, gnutls_ecc_curve_get_name(curve)); + p = str; + } + } + + gnutls_privkey_deinit(privkey); + return p; + default: + fail: + if (crt) + gnutls_x509_crt_deinit(crt); + if (pubkey) + gnutls_pubkey_deinit(pubkey); + if (privkey) + gnutls_privkey_deinit(privkey); + return NULL; + } +} + /* lists certificates from a token */ void @@ -112,12 +233,17 @@ pkcs11_list(FILE * outfile, const char *url, int type, unsigned int flags, gnutls_x509_ext_st *exts; unsigned exts_size; unsigned int obj_flags = flags; + time_t exp; pkcs11_common(info); FIX(url, outfile, detailed, info); - gnutls_pkcs11_token_get_flags(url, &flags); + ret = gnutls_pkcs11_token_get_flags(url, &flags); + if (ret < 0) { + flags = 0; + } + if (flags & GNUTLS_PKCS11_TOKEN_TRUSTED) print_exts = 1; @@ -130,9 +256,7 @@ pkcs11_list(FILE * outfile, const char *url, int type, unsigned int flags, if (print_exts != 0) print_exts++; } else if (type == PKCS11_TYPE_PRIVKEY) { attrs = GNUTLS_PKCS11_OBJ_ATTR_PRIVKEY; - } else if (type == PKCS11_TYPE_INFO) { - attrs = GNUTLS_PKCS11_OBJ_ATTR_MATCH; - } else { + } else { /* also PKCS11_TYPE_INFO */ attrs = GNUTLS_PKCS11_OBJ_ATTR_ALL; } @@ -153,9 +277,13 @@ pkcs11_list(FILE * outfile, const char *url, int type, unsigned int flags, } for (i = 0; i < crt_list_size; i++) { - char buf[128]; + char buf[256]; size_t size; + const char *p; unsigned int oflags; + const char *vendor; + char *objurl; + char timebuf[SIMPLE_CTIME_BUF_SIZE]; ret = gnutls_pkcs11_obj_export_url(crt_list[i], detailed, @@ -172,12 +300,40 @@ pkcs11_list(FILE * outfile, const char *url, int type, unsigned int flags, continue; } else { fprintf(outfile, "Object %d:\n\tURL: %s\n", i, output); - gnutls_free(output); } + /* copy vendor query (e.g. pin-value) from the original URL */ + vendor = strrchr(url, '?'); + if (vendor) { + objurl = gnutls_malloc(strlen(output) + strlen(vendor) + 1); + strcpy(objurl, output); + strcat(objurl, vendor); + } else { + objurl = gnutls_strdup(output); + } + + p = NULL; otype = gnutls_pkcs11_obj_get_type(crt_list[i]); - fprintf(outfile, "\tType: %s\n", - gnutls_pkcs11_type_get_name(otype)); + if (otype == GNUTLS_PKCS11_OBJ_PRIVKEY || + otype == GNUTLS_PKCS11_OBJ_PUBKEY || + otype == GNUTLS_PKCS11_OBJ_X509_CRT) { + p = get_key_algo_type(otype, objurl, obj_flags, &exp); + } + + if (p) { + fprintf(outfile, "\tType: %s (%s)\n", + gnutls_pkcs11_type_get_name(otype), p); + } else { + fprintf(outfile, "\tType: %s\n", + gnutls_pkcs11_type_get_name(otype)); + } + + if (otype == GNUTLS_PKCS11_OBJ_X509_CRT && exp != -1) { + fprintf(outfile, "\tExpires: %s\n", simple_ctime(&exp, timebuf)); + } + + gnutls_free(output); + gnutls_free(objurl); size = sizeof(buf); ret = @@ -210,11 +366,16 @@ pkcs11_list(FILE * outfile, const char *url, int type, unsigned int flags, GNUTLS_PKCS11_OBJ_ID_HEX, buf, &size); if (ret < 0) { - fprintf(stderr, "Error in %s:%d: %s\n", __func__, - __LINE__, gnutls_strerror(ret)); - app_exit(1); + if (ret == GNUTLS_E_SHORT_MEMORY_BUFFER) { + fprintf(outfile, "\tID: (too long)\n"); + } else { + fprintf(stderr, "Error in %s:%d: %s\n", __func__, + __LINE__, gnutls_strerror(ret)); + app_exit(1); + } + } else { + fprintf(outfile, "\tID: %s\n", buf); } - fprintf(outfile, "\tID: %s\n", buf); if (otype == GNUTLS_PKCS11_OBJ_X509_CRT && print_exts > 0) { ret = gnutls_pkcs11_obj_get_exts(crt_list[i], &exts, &exts_size, 0); @@ -262,6 +423,8 @@ pkcs11_test_sign(FILE * outfile, const char *url, unsigned int flags, int ret; gnutls_datum_t data, sig = {NULL, 0}; int pk; + gnutls_digest_algorithm_t hash; + gnutls_sign_algorithm_t sig_algo; pkcs11_common(info); @@ -298,18 +461,42 @@ pkcs11_test_sign(FILE * outfile, const char *url, unsigned int flags, app_exit(1); } - ret = gnutls_privkey_sign_data(privkey, GNUTLS_DIG_SHA256, 0, &data, &sig); + pk = gnutls_privkey_get_pk_algorithm(privkey, NULL); + + if (info->hash == GNUTLS_DIG_UNKNOWN) + hash = GNUTLS_DIG_SHA256; + else + hash = info->hash; + + if (info->rsa_pss_sign && pk == GNUTLS_PK_RSA) + pk = GNUTLS_PK_RSA_PSS; + + sig_algo = gnutls_pk_to_sign(pk, hash); + if (sig_algo == GNUTLS_SIGN_UNKNOWN) { + fprintf(stderr, "No supported signature algorithm for %s and %s\n", + gnutls_pk_get_name(pk), gnutls_digest_get_name(hash)); + app_exit(1); + } + + fprintf(stderr, "Signing using %s... ", gnutls_sign_get_name(sig_algo)); + + ret = gnutls_privkey_sign_data2(privkey, sig_algo, 0, &data, &sig); if (ret < 0) { fprintf(stderr, "Cannot sign data: %s\n", gnutls_strerror(ret)); + /* in case of unsupported signature algorithm allow + * calling apps to distinguish error codes (used + * by testpkcs11.sh */ + if (ret == GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM) + app_exit(2); app_exit(1); } - pk = gnutls_pubkey_get_pk_algorithm(pubkey, NULL); + fprintf(stderr, "ok\n"); fprintf(stderr, "Verifying against private key parameters... "); - ret = gnutls_pubkey_verify_data2(pubkey, gnutls_pk_to_sign(pk, GNUTLS_DIG_SHA256), - 0, &data, &sig); + ret = gnutls_pubkey_verify_data2(pubkey, sig_algo, + 0, &data, &sig); if (ret < 0) { fprintf(stderr, "Cannot verify signed data: %s\n", gnutls_strerror(ret)); @@ -337,8 +524,8 @@ pkcs11_test_sign(FILE * outfile, const char *url, unsigned int flags, } fprintf(stderr, "Verifying against public key in the token... "); - ret = gnutls_pubkey_verify_data2(pubkey, gnutls_pk_to_sign(pk, GNUTLS_DIG_SHA256), - 0, &data, &sig); + ret = gnutls_pubkey_verify_data2(pubkey, sig_algo, + 0, &data, &sig); if (ret < 0) { fprintf(stderr, "Cannot verify signed data: %s\n", gnutls_strerror(ret)); @@ -542,6 +729,94 @@ void print_type(FILE *outfile, unsigned flags) if (print == 0) fputs("Generic token", outfile); fputc('\n', outfile); + + print = 0; + fputs("\tFlags: ", outfile); + if (flags & GNUTLS_PKCS11_TOKEN_RNG) { + fputs("RNG", outfile); + print++; + } + + if (flags & GNUTLS_PKCS11_TOKEN_LOGIN_REQUIRED) { + if (print != 0) + fputs(", ", outfile); + fputs("Requires login", outfile); + print++; + } + + if (flags & GNUTLS_PKCS11_TOKEN_PROTECTED_AUTHENTICATION_PATH) { + if (print != 0) + fputs(", ", outfile); + fputs("External PIN", outfile); + print++; + } + + if (!(flags & GNUTLS_PKCS11_TOKEN_INITIALIZED)) { + if (print != 0) + fputs(", ", outfile); + fputs("Uninitialized", outfile); + print++; + } + + if (flags & GNUTLS_PKCS11_TOKEN_USER_PIN_COUNT_LOW) { + if (print != 0) + fputs(", ", outfile); + fputs("uPIN low count", outfile); + print++; + } + + if (flags & GNUTLS_PKCS11_TOKEN_USER_PIN_FINAL_TRY) { + if (print != 0) + fputs(", ", outfile); + fputs("Final uPIN attempt", outfile); + print++; + } + + if (flags & GNUTLS_PKCS11_TOKEN_USER_PIN_FINAL_TRY) { + if (print != 0) + fputs(", ", outfile); + fputs("uPIN locked", outfile); + print++; + } + + if (flags & GNUTLS_PKCS11_TOKEN_SO_PIN_COUNT_LOW) { + if (print != 0) + fputs(", ", outfile); + fputs("SO-PIN low count", outfile); + print++; + } + + if (flags & GNUTLS_PKCS11_TOKEN_SO_PIN_FINAL_TRY) { + if (print != 0) + fputs(", ", outfile); + fputs("Final SO-PIN attempt", outfile); + print++; + } + + if (flags & GNUTLS_PKCS11_TOKEN_SO_PIN_FINAL_TRY) { + if (print != 0) + fputs(", ", outfile); + fputs("SO-PIN locked", outfile); + print++; + } + + if (!(flags & GNUTLS_PKCS11_TOKEN_USER_PIN_INITIALIZED)) { + if (print != 0) + fputs(", ", outfile); + fputs("uPIN uninitialized", outfile); + print++; + } + + if (flags & GNUTLS_PKCS11_TOKEN_ERROR_STATE) { + if (print != 0) + fputs(", ", outfile); + fputs("Error state", outfile); + print++; + } + + if (print == 0) + fputs("Generic token", outfile); + fputc('\n', outfile); } void @@ -911,7 +1186,8 @@ pkcs11_write(FILE * outfile, const char *url, const char *label, pkcs11_common(info); FIX(url, outfile, 0, info); - CHECK_LOGIN_FLAG(flags); + + CHECK_LOGIN_FLAG(url, flags); if (label == NULL && info->batch == 0) { label = read_str("warning: The object's label was not specified.\nLabel: "); } @@ -982,7 +1258,7 @@ pkcs11_write(FILE * outfile, const char *url, const char *label, if (ret < 0) { fprintf(stderr, "Error writing certificate: %s\n", gnutls_strerror(ret)); if (((flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_CA) || - (flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED)) && + (flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED)) && (flags & GNUTLS_PKCS11_OBJ_FLAG_LOGIN_SO) == 0) fprintf(stderr, "note: some tokens may require security officer login for this operation\n"); app_exit(1); @@ -1046,7 +1322,8 @@ pkcs11_generate(FILE * outfile, const char *url, gnutls_pk_algorithm_t pk, pkcs11_common(info); FIX(url, outfile, detailed, info); - CHECK_LOGIN_FLAG(flags); + + CHECK_LOGIN_FLAG(url, flags); if (id != NULL) { raw_id_size = sizeof(raw_id); @@ -1067,11 +1344,13 @@ pkcs11_generate(FILE * outfile, const char *url, gnutls_pk_algorithm_t pk, label = read_str("warning: Label was not specified.\nLabel: "); } + fprintf(stderr, "Generating an %s key...\n", gnutls_pk_get_name(pk)); + ret = gnutls_pkcs11_privkey_generate3(url, pk, bits, label, &cid, GNUTLS_X509_FMT_PEM, &pubkey, info->key_usage, - flags); + flags|GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE); if (ret < 0) { fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__, gnutls_strerror(ret)); @@ -1098,7 +1377,8 @@ pkcs11_export_pubkey(FILE * outfile, const char *url, int detailed, unsigned int pkcs11_common(info); FIX(url, outfile, detailed, info); - CHECK_LOGIN_FLAG(flags); + + CHECK_LOGIN_FLAG(url, flags); if (outfile == stderr || outfile == stdout) { fprintf(stderr, "warning: no --outfile was specified and the public key will be printed on screen.\n"); @@ -1142,8 +1422,7 @@ pkcs11_init(FILE * outfile, const char *url, const char *label, common_info_st * info) { int ret; - const char *pin; - char so_pin[32]; + char so_pin[MAX_PIN_LEN]; pkcs11_common(info); @@ -1157,21 +1436,19 @@ pkcs11_init(FILE * outfile, const char *url, const char *label, app_exit(1); } - if (info->so_pin != NULL) - pin = info->so_pin; - else { - pin = getenv("GNUTLS_SO_PIN"); - if (pin == NULL && info->batch == 0) - pin = getpass("Enter Security Officer's PIN: "); - if (pin == NULL) + if (info->so_pin != NULL) { + snprintf(so_pin, sizeof(so_pin), "%s", info->so_pin); + } else { + getenv_copy(so_pin, sizeof(so_pin), "GNUTLS_SO_PIN"); + if (so_pin[0] == 0 && info->batch == 0) + getpass_copy(so_pin, sizeof(so_pin), "Enter Security Officer's PIN: "); + if (so_pin[0] == 0) app_exit(1); } - if (strlen(pin) >= sizeof(so_pin) || pin[0] == '\n') + if (so_pin[0] == '\n' || so_pin[0] == 0) app_exit(1); - strcpy(so_pin, pin); - fprintf(stderr, "Initializing token... "); ret = gnutls_pkcs11_token_init(url, so_pin, label); if (ret < 0) { @@ -1187,10 +1464,10 @@ pkcs11_init(FILE * outfile, const char *url, const char *label, } void -pkcs11_set_pin(FILE * outfile, const char *url, common_info_st * info, unsigned so) +pkcs11_set_token_pin(FILE * outfile, const char *url, common_info_st * info, unsigned so) { int ret; - const char *pin; + char newpin[MAX_PIN_LEN] = ""; pkcs11_common(info); @@ -1199,34 +1476,32 @@ pkcs11_set_pin(FILE * outfile, const char *url, common_info_st * info, unsigned app_exit(1); } - fprintf(stderr, "Setting token's user PIN...\n"); + if (so) + fprintf(stderr, "Setting admin's PIN...\n"); + else + fprintf(stderr, "Setting user's PIN...\n"); if (so) { - if (info->so_pin != NULL) { - pin = info->so_pin; - } else { - pin = getenv("GNUTLS_SO_PIN"); - if (pin == NULL && info->batch == 0) - pin = getpass("Enter Administrators's new PIN: "); - if (pin == NULL) - app_exit(1); + getenv_copy(newpin, sizeof(newpin), "GNUTLS_NEW_SO_PIN"); + if (newpin[0] == 0 && info->batch == 0) { + getpass_copy(newpin, sizeof(newpin), "Enter Administrators's new PIN: "); } } else { if (info->pin != NULL) { - pin = info->pin; + snprintf(newpin, sizeof(newpin), "%s", info->pin); } else { - pin = getenv("GNUTLS_PIN"); - if (pin == NULL && info->batch == 0) - pin = getpass("Enter User's new PIN: "); - if (pin == NULL) - app_exit(1); + getenv_copy(newpin, sizeof(newpin), "GNUTLS_PIN"); + if (newpin[0] == 0 && info->batch == 0) + getpass_copy(newpin, sizeof(newpin), "Enter User's new PIN: "); } } - if (pin == NULL || pin[0] == '\n') + if (newpin[0] == 0 || newpin[0] == '\n') { + fprintf(stderr, "No PIN was given to change\n"); app_exit(1); + } - ret = gnutls_pkcs11_token_set_pin(url, NULL, pin, (so!=0)?GNUTLS_PIN_SO:GNUTLS_PIN_USER); + ret = gnutls_pkcs11_token_set_pin(url, NULL, newpin, (so!=0)?GNUTLS_PIN_SO:GNUTLS_PIN_USER); if (ret < 0) { fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__, gnutls_strerror(ret)); @@ -1236,218 +1511,7 @@ pkcs11_set_pin(FILE * outfile, const char *url, common_info_st * info, unsigned return; } -const char *mech_list[] = { - [0] = "CKM_RSA_PKCS_KEY_PAIR_GEN", - [1] = "CKM_RSA_PKCS", - [2] = "CKM_RSA_9796", - [3] = "CKM_RSA_X_509", - [4] = "CKM_MD2_RSA_PKCS", - [5] = "CKM_MD5_RSA_PKCS", - [6] = "CKM_SHA1_RSA_PKCS", - [7] = "CKM_RIPEMD128_RSA_PKCS", - [8] = "CKM_RIPEMD160_RSA_PKCS", - [9] = "CKM_RSA_PKCS_OAEP", - [0xa] = "CKM_RSA_X9_31_KEY_PAIR_GEN", - [0xb] = "CKM_RSA_X9_31", - [0xc] = "CKM_SHA1_RSA_X9_31", - [0xd] = "CKM_RSA_PKCS_PSS", - [0xe] = "CKM_SHA1_RSA_PKCS_PSS", - [0x10] = "CKM_DSA_KEY_PAIR_GEN", - [0x11] = "CKM_DSA", - [0x12] = "CKM_DSA_SHA1", - [0x20] = "CKM_DH_PKCS_KEY_PAIR_GEN", - [0x21] = "CKM_DH_PKCS_DERIVE", - [0x30] = "CKM_X9_42_DH_KEY_PAIR_GEN", - [0x31] = "CKM_X9_42_DH_DERIVE", - [0x32] = "CKM_X9_42_DH_HYBRID_DERIVE", - [0x33] = "CKM_X9_42_MQV_DERIVE", - [0x40] = "CKM_SHA256_RSA_PKCS", - [0x41] = "CKM_SHA384_RSA_PKCS", - [0x42] = "CKM_SHA512_RSA_PKCS", - [0x43] = "CKM_SHA256_RSA_PKCS_PSS", - [0x44] = "CKM_SHA384_RSA_PKCS_PSS", - [0x45] = "CKM_SHA512_RSA_PKCS_PSS", - [0x100] = "CKM_RC2_KEY_GEN", - [0x101] = "CKM_RC2_ECB", - [0x102] = "CKM_RC2_CBC", - [0x103] = "CKM_RC2_MAC", - [0x104] = "CKM_RC2_MAC_GENERAL", - [0x105] = "CKM_RC2_CBC_PAD", - [0x110] = "CKM_RC4_KEY_GEN", - [0x111] = "CKM_RC4", - [0x120] = "CKM_DES_KEY_GEN", - [0x121] = "CKM_DES_ECB", - [0x122] = "CKM_DES_CBC", - [0x123] = "CKM_DES_MAC", - [0x124] = "CKM_DES_MAC_GENERAL", - [0x125] = "CKM_DES_CBC_PAD", - [0x130] = "CKM_DES2_KEY_GEN", - [0x131] = "CKM_DES3_KEY_GEN", - [0x132] = "CKM_DES3_ECB", - [0x133] = "CKM_DES3_CBC", - [0x134] = "CKM_DES3_MAC", - [0x135] = "CKM_DES3_MAC_GENERAL", - [0x136] = "CKM_DES3_CBC_PAD", - [0x140] = "CKM_CDMF_KEY_GEN", - [0x141] = "CKM_CDMF_ECB", - [0x142] = "CKM_CDMF_CBC", - [0x143] = "CKM_CDMF_MAC", - [0x144] = "CKM_CDMF_MAC_GENERAL", - [0x145] = "CKM_CDMF_CBC_PAD", - [0x200] = "CKM_MD2", - [0x201] = "CKM_MD2_HMAC", - [0x202] = "CKM_MD2_HMAC_GENERAL", - [0x210] = "CKM_MD5", - [0x211] = "CKM_MD5_HMAC", - [0x212] = "CKM_MD5_HMAC_GENERAL", - [0x220] = "CKM_SHA_1", - [0x221] = "CKM_SHA_1_HMAC", - [0x222] = "CKM_SHA_1_HMAC_GENERAL", - [0x230] = "CKM_RIPEMD128", - [0x231] = "CKM_RIPEMD128_HMAC", - [0x232] = "CKM_RIPEMD128_HMAC_GENERAL", - [0x240] = "CKM_RIPEMD160", - [0x241] = "CKM_RIPEMD160_HMAC", - [0x242] = "CKM_RIPEMD160_HMAC_GENERAL", - [0x250] = "CKM_SHA256", - [0x251] = "CKM_SHA256_HMAC", - [0x252] = "CKM_SHA256_HMAC_GENERAL", - [0x260] = "CKM_SHA384", - [0x261] = "CKM_SHA384_HMAC", - [0x262] = "CKM_SHA384_HMAC_GENERAL", - [0x270] = "CKM_SHA512", - [0x271] = "CKM_SHA512_HMAC", - [0x272] = "CKM_SHA512_HMAC_GENERAL", - [0x300] = "CKM_CAST_KEY_GEN", - [0x301] = "CKM_CAST_ECB", - [0x302] = "CKM_CAST_CBC", - [0x303] = "CKM_CAST_MAC", - [0x304] = "CKM_CAST_MAC_GENERAL", - [0x305] = "CKM_CAST_CBC_PAD", - [0x310] = "CKM_CAST3_KEY_GEN", - [0x311] = "CKM_CAST3_ECB", - [0x312] = "CKM_CAST3_CBC", - [0x313] = "CKM_CAST3_MAC", - [0x314] = "CKM_CAST3_MAC_GENERAL", - [0x315] = "CKM_CAST3_CBC_PAD", - [0x320] = "CKM_CAST128_KEY_GEN", - [0x321] = "CKM_CAST128_ECB", - [0x322] = "CKM_CAST128_CBC", - [0x323] = "CKM_CAST128_MAC", - [0x324] = "CKM_CAST128_MAC_GENERAL", - [0x325] = "CKM_CAST128_CBC_PAD", - [0x330] = "CKM_RC5_KEY_GEN", - [0x331] = "CKM_RC5_ECB", - [0x332] = "CKM_RC5_CBC", - [0x333] = "CKM_RC5_MAC", - [0x334] = "CKM_RC5_MAC_GENERAL", - [0x335] = "CKM_RC5_CBC_PAD", - [0x340] = "CKM_IDEA_KEY_GEN", - [0x341] = "CKM_IDEA_ECB", - [0x342] = "CKM_IDEA_CBC", - [0x343] = "CKM_IDEA_MAC", - [0x344] = "CKM_IDEA_MAC_GENERAL", - [0x345] = "CKM_IDEA_CBC_PAD", - [0x350] = "CKM_GENERIC_SECRET_KEY_GEN", - [0x360] = "CKM_CONCATENATE_BASE_AND_KEY", - [0x362] = "CKM_CONCATENATE_BASE_AND_DATA", - [0x363] = "CKM_CONCATENATE_DATA_AND_BASE", - [0x364] = "CKM_XOR_BASE_AND_DATA", - [0x365] = "CKM_EXTRACT_KEY_FROM_KEY", - [0x370] = "CKM_SSL3_PRE_MASTER_KEY_GEN", - [0x371] = "CKM_SSL3_MASTER_KEY_DERIVE", - [0x372] = "CKM_SSL3_KEY_AND_MAC_DERIVE", - [0x373] = "CKM_SSL3_MASTER_KEY_DERIVE_DH", - [0x374] = "CKM_TLS_PRE_MASTER_KEY_GEN", - [0x375] = "CKM_TLS_MASTER_KEY_DERIVE", - [0x376] = "CKM_TLS_KEY_AND_MAC_DERIVE", - [0x377] = "CKM_TLS_MASTER_KEY_DERIVE_DH", - [0x380] = "CKM_SSL3_MD5_MAC", - [0x381] = "CKM_SSL3_SHA1_MAC", - [0x390] = "CKM_MD5_KEY_DERIVATION", - [0x391] = "CKM_MD2_KEY_DERIVATION", - [0x392] = "CKM_SHA1_KEY_DERIVATION", - [0x3a0] = "CKM_PBE_MD2_DES_CBC", - [0x3a1] = "CKM_PBE_MD5_DES_CBC", - [0x3a2] = "CKM_PBE_MD5_CAST_CBC", - [0x3a3] = "CKM_PBE_MD5_CAST3_CBC", - [0x3a4] = "CKM_PBE_MD5_CAST128_CBC", - [0x3a5] = "CKM_PBE_SHA1_CAST128_CBC", - [0x3a6] = "CKM_PBE_SHA1_RC4_128", - [0x3a7] = "CKM_PBE_SHA1_RC4_40", - [0x3a8] = "CKM_PBE_SHA1_DES3_EDE_CBC", - [0x3a9] = "CKM_PBE_SHA1_DES2_EDE_CBC", - [0x3aa] = "CKM_PBE_SHA1_RC2_128_CBC", - [0x3ab] = "CKM_PBE_SHA1_RC2_40_CBC", - [0x3b0] = "CKM_PKCS5_PBKD2", - [0x3c0] = "CKM_PBA_SHA1_WITH_SHA1_HMAC", - [0x400] = "CKM_KEY_WRAP_LYNKS", - [0x401] = "CKM_KEY_WRAP_SET_OAEP", - [0x1000] = "CKM_SKIPJACK_KEY_GEN", - [0x1001] = "CKM_SKIPJACK_ECB64", - [0x1002] = "CKM_SKIPJACK_CBC64", - [0x1003] = "CKM_SKIPJACK_OFB64", - [0x1004] = "CKM_SKIPJACK_CFB64", - [0x1005] = "CKM_SKIPJACK_CFB32", - [0x1006] = "CKM_SKIPJACK_CFB16", - [0x1007] = "CKM_SKIPJACK_CFB8", - [0x1008] = "CKM_SKIPJACK_WRAP", - [0x1009] = "CKM_SKIPJACK_PRIVATE_WRAP", - [0x100a] = "CKM_SKIPJACK_RELAYX", - [0x1010] = "CKM_KEA_KEY_PAIR_GEN", - [0x1011] = "CKM_KEA_KEY_DERIVE", - [0x1020] = "CKM_FORTEZZA_TIMESTAMP", - [0x1030] = "CKM_BATON_KEY_GEN", - [0x1031] = "CKM_BATON_ECB128", - [0x1032] = "CKM_BATON_ECB96", - [0x1033] = "CKM_BATON_CBC128", - [0x1034] = "CKM_BATON_COUNTER", - [0x1035] = "CKM_BATON_SHUFFLE", - [0x1036] = "CKM_BATON_WRAP", - [0x1040] = "CKM_ECDSA_KEY_PAIR_GEN", - [0x1041] = "CKM_ECDSA", - [0x1042] = "CKM_ECDSA_SHA1", - [0x1050] = "CKM_ECDH1_DERIVE", - [0x1051] = "CKM_ECDH1_COFACTOR_DERIVE", - [0x1052] = "CKM_ECMQV_DERIVE", - [0x1060] = "CKM_JUNIPER_KEY_GEN", - [0x1061] = "CKM_JUNIPER_ECB128", - [0x1062] = "CKM_JUNIPER_CBC128", - [0x1063] = "CKM_JUNIPER_COUNTER", - [0x1064] = "CKM_JUNIPER_SHUFFLE", - [0x1065] = "CKM_JUNIPER_WRAP", - [0x1070] = "CKM_FASTHASH", - [0x1080] = "CKM_AES_KEY_GEN", - [0x1081] = "CKM_AES_ECB", - [0x1082] = "CKM_AES_CBC", - [0x1083] = "CKM_AES_MAC", - [0x1084] = "CKM_AES_MAC_GENERAL", - [0x1085] = "CKM_AES_CBC_PAD", - [0x2000] = "CKM_DSA_PARAMETER_GEN", - [0x2001] = "CKM_DH_PKCS_PARAMETER_GEN", - [0x2002] = "CKM_X9_42_DH_PARAMETER_GEN", - [0x1200] = "CKM_GOSTR3410_KEY_PAIR_GEN", - [0x1201] = "CKM_GOSTR3410", - [0x1202] = "CKM_GOSTR3410_WITH_GOSTR3411", - [0x1203] = "CKM_GOSTR3410_KEY_WRAP", - [0x1204] = "CKM_GOSTR3410_DERIVE", - [0x1210] = "CKM_GOSTR3411", - [0x1211] = "CKM_GOSTR3411_HMAC", - [0x255] = "CKM_SHA224", - [0x256] = "CKM_SHA224_HMAC", - [0x257] = "CKM_SHA224_HMAC_GENERAL", - [0x46] = "CKM_SHA224_RSA_PKCS", - [0x47] = "CKM_SHA224_RSA_PKCS_PSS", - [0x396] = "CKM_SHA224_KEY_DERIVATION", - [0x550] = "CKM_CAMELLIA_KEY_GEN", - [0x551] = "CKM_CAMELLIA_ECB", - [0x552] = "CKM_CAMELLIA_CBC", - [0x553] = "CKM_CAMELLIA_MAC", - [0x554] = "CKM_CAMELLIA_MAC_GENERAL", - [0x555] = "CKM_CAMELLIA_CBC_PAD", - [0x556] = "CKM_CAMELLIA_ECB_ENCRYPT_DATA", - [0x557] = "CKM_CAMELLIA_CBC_ENCRYPT_DATA" -}; +#include "mech-list.h" void pkcs11_mechanism_list(FILE * outfile, const char *url, unsigned int flags, @@ -1457,6 +1521,7 @@ pkcs11_mechanism_list(FILE * outfile, const char *url, unsigned int flags, int idx; unsigned long mechanism; const char *str; + CK_MECHANISM_INFO minfo; pkcs11_common(info); @@ -1475,7 +1540,63 @@ pkcs11_mechanism_list(FILE * outfile, const char *url, unsigned int flags, if (str == NULL) str = "UNKNOWN"; - fprintf(outfile, "[0x%.4lx] %s\n", mechanism, str); + fprintf(outfile, "[0x%.4lx] %s", mechanism, str); + + if (gnutls_pkcs11_token_check_mechanism(url, mechanism, &minfo, sizeof(minfo), 0) != 0) { + if (minfo.ulMaxKeySize != 0) + fprintf(outfile, " keysize range (%ld, %ld)", minfo.ulMinKeySize, minfo.ulMaxKeySize); + if (minfo.flags & CKF_HW) + printf(" hw"); + if (minfo.flags & CKF_ENCRYPT) + printf(" encrypt"); + if (minfo.flags & CKF_DECRYPT) + printf(" decrypt"); + if (minfo.flags & CKF_DIGEST) + printf(" digest"); + if (minfo.flags & CKF_SIGN) + printf(" sign"); + if (minfo.flags & CKF_SIGN_RECOVER) + printf(" sign_recover"); + if (minfo.flags & CKF_VERIFY) + printf(" verify"); + if (minfo.flags & CKF_VERIFY_RECOVER) + printf(" verify_recover"); + if (minfo.flags & CKF_GENERATE) + printf(" generate"); + if (minfo.flags & CKF_GENERATE_KEY_PAIR) + printf(" generate_key_pair"); + if (minfo.flags & CKF_WRAP) + printf(" wrap"); + if (minfo.flags & CKF_UNWRAP) + printf(" unwrap"); + if (minfo.flags & CKF_DERIVE) + printf(" derive"); +#ifdef CKF_EC_F_P + if (minfo.flags & CKF_EC_F_P) + printf(" ec_f_p"); +#endif +#ifdef CKF_EC_F_2M + if (minfo.flags & CKF_EC_F_2M) + printf(" ec_f_2m"); +#endif +#ifdef CKF_EC_ECPARAMETERS + if (minfo.flags & CKF_EC_ECPARAMETERS) + printf(" ec_ecparameters"); +#endif +#ifdef CKF_EC_NAMEDCURVE + if (minfo.flags & CKF_EC_NAMEDCURVE) + printf(" ec_namedcurve"); +#endif +#ifdef CKF_EC_UNCOMPRESS + if (minfo.flags & CKF_EC_UNCOMPRESS) + printf(" ec_uncompress"); +#endif +#ifdef CKF_EC_COMPRESS + if (minfo.flags & CKF_EC_COMPRESS) + printf(" ec_compress"); +#endif + } + fprintf(outfile, "\n"); } } while (ret >= 0); @@ -1525,7 +1646,8 @@ void pkcs11_set_val(FILE * outfile, const char *url, int detailed, pkcs11_common(info); FIX(url, outfile, detailed, info); - CHECK_LOGIN_FLAG(flags); + + CHECK_LOGIN_FLAG(url, flags); ret = gnutls_pkcs11_obj_init(&obj); if (ret < 0) { diff --git a/src/psk.c b/src/psk.c index e55803d7c8..775d8f80c9 100644 --- a/src/psk.c +++ b/src/psk.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -59,8 +59,7 @@ int main(int argc, char **argv) static int write_key(const char *username, const char *key, int key_size, const char *passwd_file); -#define KPASSWD "/etc/passwd.psk" -#define MAX_KEY_SIZE 64 +#define MAX_KEY_SIZE 512 int main(int argc, char **argv) { int ret; @@ -69,7 +68,7 @@ int main(int argc, char **argv) #endif unsigned char key[MAX_KEY_SIZE]; char hex_key[MAX_KEY_SIZE * 2 + 1]; - int optct, key_size; + int key_size; gnutls_datum_t dkey; const char *passwd, *username; size_t hex_key_size = sizeof(hex_key); @@ -81,14 +80,13 @@ int main(int argc, char **argv) umask(066); - optct = optionProcess(&psktoolOptions, argc, argv); - argc -= optct; - argv += optct; + optionProcess(&psktoolOptions, argc, argv); - if (!HAVE_OPT(PASSWD)) - passwd = (char *) KPASSWD; - else - passwd = OPT_ARG(PASSWD); + if (!HAVE_OPT(PSKFILE)) { + fprintf(stderr, "You need to specify a PSK key file\n"); + exit(1); + } else + passwd = OPT_ARG(PSKFILE); if (!HAVE_OPT(USERNAME)) { #ifndef _WIN32 @@ -113,7 +111,7 @@ int main(int argc, char **argv) } if (!HAVE_OPT(KEYSIZE) || OPT_VALUE_KEYSIZE < 1) - key_size = 16; + key_size = 32; else key_size = OPT_VALUE_KEYSIZE; diff --git a/src/psktool-args.c.bak b/src/psktool-args.c.bak deleted file mode 100644 index 7038f99c6e..0000000000 --- a/src/psktool-args.c.bak +++ /dev/null @@ -1,969 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (psktool-args.c) - * - * It has been AutoGen-ed - * From the definitions psktool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This source file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the psktool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The psktool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * psktool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * psktool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef __doxygen__ -#define OPTION_CODE_COMPILE 1 -#include "psktool-args.h" -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern FILE * option_usage_fp; -#define zCopyright (psktool_opt_strs+0) -#define zLicenseDescrip (psktool_opt_strs+288) - - -#ifndef NULL -# define NULL 0 -#endif - -/** - * static const strings for psktool options - */ -static char const psktool_opt_strs[1495] = -/* 0 */ "psktool @VERSION@\n" - "Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n" - "This is free software. It is licensed for use, modification and\n" - "redistribution under the terms of the GNU General Public License,\n" - "version 3 or later \n\0" -/* 288 */ "psktool is free software: you can redistribute it and/or modify it under\n" - "the terms of the GNU General Public License as published by the Free\n" - "Software Foundation, either version 3 of the License, or (at your option)\n" - "any later version.\n\n" - "psktool is distributed in the hope that it will be useful, but WITHOUT ANY\n" - "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n" - "FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n" - "details.\n\n" - "You should have received a copy of the GNU General Public License along\n" - "with this program. If not, see .\n\0" -/* 891 */ "Enable debugging\0" -/* 908 */ "DEBUG\0" -/* 914 */ "debug\0" -/* 920 */ "specify the key size in bytes\0" -/* 950 */ "KEYSIZE\0" -/* 958 */ "keysize\0" -/* 966 */ "specify a username\0" -/* 985 */ "USERNAME\0" -/* 994 */ "username\0" -/* 1003 */ "specify a password file\0" -/* 1027 */ "PASSWD\0" -/* 1034 */ "passwd\0" -/* 1041 */ "display extended usage information and exit\0" -/* 1085 */ "help\0" -/* 1090 */ "extended usage information passed thru pager\0" -/* 1135 */ "more-help\0" -/* 1145 */ "output version information and exit\0" -/* 1181 */ "version\0" -/* 1189 */ "PSKTOOL\0" -/* 1197 */ "psktool - GnuTLS PSK tool\n" - "Usage: %s [ - [] | --[{=| }] ]...\n\0" -/* 1281 */ "@PACKAGE_BUGREPORT@\0" -/* 1301 */ "\n\0" -/* 1303 */ "Program that generates random keys for use with TLS-PSK. The keys are\n" - "stored in hexadecimal format in a key file.\n\0" -/* 1419 */ "psktool @VERSION@\0" -/* 1437 */ "psktool [options]\n" - "psktool --help for usage instructions.\n"; - -/** - * debug option description: - */ -/** Descriptive text for the debug option */ -#define DEBUG_DESC (psktool_opt_strs+891) -/** Upper-cased name for the debug option */ -#define DEBUG_NAME (psktool_opt_strs+908) -/** Name string for the debug option */ -#define DEBUG_name (psktool_opt_strs+914) -/** Compiled in flag settings for the debug option */ -#define DEBUG_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * keysize option description: - */ -/** Descriptive text for the keysize option */ -#define KEYSIZE_DESC (psktool_opt_strs+920) -/** Upper-cased name for the keysize option */ -#define KEYSIZE_NAME (psktool_opt_strs+950) -/** Name string for the keysize option */ -#define KEYSIZE_name (psktool_opt_strs+958) -/** Compiled in flag settings for the keysize option */ -#define KEYSIZE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * username option description: - */ -/** Descriptive text for the username option */ -#define USERNAME_DESC (psktool_opt_strs+966) -/** Upper-cased name for the username option */ -#define USERNAME_NAME (psktool_opt_strs+985) -/** Name string for the username option */ -#define USERNAME_name (psktool_opt_strs+994) -/** Compiled in flag settings for the username option */ -#define USERNAME_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * passwd option description: - */ -/** Descriptive text for the passwd option */ -#define PASSWD_DESC (psktool_opt_strs+1003) -/** Upper-cased name for the passwd option */ -#define PASSWD_NAME (psktool_opt_strs+1027) -/** Name string for the passwd option */ -#define PASSWD_name (psktool_opt_strs+1034) -/** Compiled in flag settings for the passwd option */ -#define PASSWD_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/* - * Help/More_Help/Version option descriptions: - */ -#define HELP_DESC (psktool_opt_strs+1041) -#define HELP_name (psktool_opt_strs+1085) -#ifdef HAVE_WORKING_FORK -#define MORE_HELP_DESC (psktool_opt_strs+1090) -#define MORE_HELP_name (psktool_opt_strs+1135) -#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -#define MORE_HELP_DESC HELP_DESC -#define MORE_HELP_name HELP_name -#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT) -#endif -#ifdef NO_OPTIONAL_OPT_ARGS -# define VER_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ - OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT) -#endif -#define VER_DESC (psktool_opt_strs+1145) -#define VER_name (psktool_opt_strs+1181) -/** - * Declare option callback procedures - */ -extern tOptProc - optionBooleanVal, optionNestedVal, optionNumericVal, - optionPagedUsage, optionPrintVersion, optionResetOpt, - optionStackArg, optionTimeDate, optionTimeVal, - optionUnstackArg, optionVendorOption; -static tOptProc - doOptDebug, doOptKeysize, doUsageOpt; -#define VER_PROC optionPrintVersion - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Define the psktool Option Descriptions. - * This is an array of OPTION_CT entries, one for each - * option that the psktool program responds to. - */ -static tOptDesc optDesc[OPTION_CT] = { - { /* entry idx, value */ 0, VALUE_OPT_DEBUG, - /* equiv idx, value */ 0, VALUE_OPT_DEBUG, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DEBUG_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --debug */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDebug, - /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 1, VALUE_OPT_KEYSIZE, - /* equiv idx, value */ 1, VALUE_OPT_KEYSIZE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ KEYSIZE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --keysize */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptKeysize, - /* desc, NAME, name */ KEYSIZE_DESC, KEYSIZE_NAME, KEYSIZE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 2, VALUE_OPT_USERNAME, - /* equiv idx, value */ 2, VALUE_OPT_USERNAME, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ USERNAME_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --username */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ USERNAME_DESC, USERNAME_NAME, USERNAME_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 3, VALUE_OPT_PASSWD, - /* equiv idx, value */ 3, VALUE_OPT_PASSWD, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PASSWD_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --passwd */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PASSWD_DESC, PASSWD_NAME, PASSWD_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VER_FLAGS, AOUSE_VERSION, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ VER_PROC, - /* desc, NAME, name */ VER_DESC, NULL, VER_name, - /* disablement strs */ NULL, NULL }, - - - - { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doUsageOpt, - /* desc, NAME, name */ HELP_DESC, NULL, HELP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionPagedUsage, - /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name, - /* disablement strs */ NULL, NULL } -}; - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** Reference to the upper cased version of psktool. */ -#define zPROGNAME (psktool_opt_strs+1189) -/** Reference to the title line for psktool usage. */ -#define zUsageTitle (psktool_opt_strs+1197) -/** There is no psktool configuration file. */ -#define zRcName NULL -/** There are no directories to search for psktool config files. */ -#define apzHomeList NULL -/** The psktool program bug email address. */ -#define zBugsAddr (psktool_opt_strs+1281) -/** Clarification/explanation of what psktool does. */ -#define zExplain (psktool_opt_strs+1301) -/** Extra detail explaining what psktool does. */ -#define zDetail (psktool_opt_strs+1303) -/** The full version string for psktool. */ -#define zFullVersion (psktool_opt_strs+1419) -/* extracted from optcode.tlib near line 364 */ - -#if defined(ENABLE_NLS) -# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT - static tOptionXlateProc translate_option_strings; -#else -# define OPTPROC_BASE OPTPROC_NONE -# define translate_option_strings NULL -#endif /* ENABLE_NLS */ - -#define psktool_full_usage (NULL) -#define psktool_short_usage (psktool_opt_strs+1437) - -#endif /* not defined __doxygen__ */ - -/* - * Create the static procedure(s) declared above. - */ -/** - * The callout function that invokes the optionUsage function. - * - * @param[in] opts the AutoOpts option description structure - * @param[in] od the descriptor for the "help" (usage) option. - * @noreturn - */ -static void -doUsageOpt(tOptions * opts, tOptDesc * od) -{ - int ex_code; - ex_code = PSKTOOL_EXIT_SUCCESS; - optionUsage(&psktoolOptions, ex_code); - /* NOTREACHED */ - exit(PSKTOOL_EXIT_FAILURE); - (void)opts; - (void)od; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the debug option. - * Specifies the debug level. - * @param[in] pOptions the psktool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 9999 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the keysize option. - * - * @param[in] pOptions the psktool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptKeysize(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 512 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} -/* extracted from optmain.tlib near line 1250 */ - -/** - * The directory containing the data associated with psktool. - */ -#ifndef PKGDATADIR -# define PKGDATADIR "" -#endif - -/** - * Information about the person or institution that packaged psktool - * for the current distribution. - */ -#ifndef WITH_PACKAGER -# define psktool_packager_info NULL -#else -/** Packager information for psktool. */ -static char const psktool_packager_info[] = - "Packaged by " WITH_PACKAGER - -# ifdef WITH_PACKAGER_VERSION - " ("WITH_PACKAGER_VERSION")" -# endif - -# ifdef WITH_PACKAGER_BUG_REPORTS - "\nReport psktool bugs to " WITH_PACKAGER_BUG_REPORTS -# endif - "\n"; -#endif -#ifndef __doxygen__ - -#endif /* __doxygen__ */ -/** - * The option definitions for psktool. The one structure that - * binds them all. - */ -tOptions psktoolOptions = { - OPTIONS_STRUCT_VERSION, - 0, NULL, /* original argc + argv */ - ( OPTPROC_BASE - + OPTPROC_ERRSTOP - + OPTPROC_SHORTOPT - + OPTPROC_LONGOPT - + OPTPROC_NO_REQ_OPT - + OPTPROC_NO_ARGS - + OPTPROC_GNUUSAGE - + OPTPROC_MISUSE ), - 0, NULL, /* current option index, current option */ - NULL, NULL, zPROGNAME, - zRcName, zCopyright, zLicenseDescrip, - zFullVersion, apzHomeList, zUsageTitle, - zExplain, zDetail, optDesc, - zBugsAddr, /* address to send bugs to */ - NULL, NULL, /* extensions/saved state */ - optionUsage, /* usage procedure */ - translate_option_strings, /* translation procedure */ - /* - * Indexes to special options - */ - { INDEX_OPT_MORE_HELP, /* more-help option index */ - NO_EQUIVALENT, /* save option index */ - NO_EQUIVALENT, /* '-#' option index */ - NO_EQUIVALENT /* index of default opt */ - }, - 7 /* full option count */, 4 /* user option count */, - psktool_full_usage, psktool_short_usage, - NULL, NULL, - PKGDATADIR, psktool_packager_info -}; - -#if ENABLE_NLS -/** - * This code is designed to translate translatable option text for the - * psktool program. These translations happen upon entry - * to optionProcess(). - */ -#include -#include -#include -#include -#ifdef HAVE_DCGETTEXT -# include -#endif -#include - -static char * AO_gettext(char const * pz); -static void coerce_it(void ** s); - -/** - * AutoGen specific wrapper function for gettext. It relies on the macro _() - * to convert from English to the target language, then strdup-duplicates the - * result string. It tries the "libopts" domain first, then whatever has been - * set via the \a textdomain(3) call. - * - * @param[in] pz the input text used as a lookup key. - * @returns the translated text (if there is one), - * or the original text (if not). - */ -static char * -AO_gettext(char const * pz) -{ - char * res; - if (pz == NULL) - return NULL; -#ifdef HAVE_DCGETTEXT - /* - * While processing the option_xlateable_txt data, try to use the - * "libopts" domain. Once we switch to the option descriptor data, - * do *not* use that domain. - */ - if (option_xlateable_txt.field_ct != 0) { - res = dgettext("libopts", pz); - if (res == pz) - res = (char *)VOIDP(_(pz)); - } else - res = (char *)VOIDP(_(pz)); -#else - res = (char *)VOIDP(_(pz)); -#endif - if (res == pz) - return res; - res = strdup(res); - if (res == NULL) { - fputs(_("No memory for duping translated strings\n"), stderr); - exit(PSKTOOL_EXIT_FAILURE); - } - return res; -} - -/** - * All the pointers we use are marked "* const", but they are stored in - * writable memory. Coerce the mutability and set the pointer. - */ -static void coerce_it(void ** s) { *s = AO_gettext(*s); -} - -/** - * Translate all the translatable strings in the psktoolOptions - * structure defined above. This is done only once. - */ -static void -translate_option_strings(void) -{ - tOptions * const opts = &psktoolOptions; - - /* - * Guard against re-translation. It won't work. The strings will have - * been changed by the first pass through this code. One shot only. - */ - if (option_xlateable_txt.field_ct != 0) { - /* - * Do the translations. The first pointer follows the field count - * field. The field count field is the size of a pointer. - */ - char ** ppz = (char**)VOIDP(&(option_xlateable_txt)); - int ix = option_xlateable_txt.field_ct; - - do { - ppz++; /* skip over field_ct */ - *ppz = AO_gettext(*ppz); - } while (--ix > 0); - /* prevent re-translation and disable "libopts" domain lookup */ - option_xlateable_txt.field_ct = 0; - - coerce_it(VOIDP(&(opts->pzCopyright))); - coerce_it(VOIDP(&(opts->pzCopyNotice))); - coerce_it(VOIDP(&(opts->pzFullVersion))); - coerce_it(VOIDP(&(opts->pzUsageTitle))); - coerce_it(VOIDP(&(opts->pzExplain))); - coerce_it(VOIDP(&(opts->pzDetail))); - { - tOptDesc * od = opts->pOptDesc; - for (ix = opts->optCt; ix > 0; ix--, od++) - coerce_it(VOIDP(&(od->pzText))); - } - } -} -#endif /* ENABLE_NLS */ - -#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT -/** I18N function strictly for xgettext. Do not compile. */ -static void bogus_function(void) { - /* TRANSLATORS: - - The following dummy function was crated solely so that xgettext can - extract the correct strings. These strings are actually referenced - by a field name in the psktoolOptions structure noted in the - comments below. The literal text is defined in psktool_opt_strs. - - NOTE: the strings below are segmented with respect to the source string - psktool_opt_strs. The strings above are handed off for translation - at run time a paragraph at a time. Consequently, they are presented here - for translation a paragraph at a time. - - ALSO: often the description for an option will reference another option - by name. These are set off with apostrophe quotes (I hope). Do not - translate option names. - */ - /* referenced via psktoolOptions.pzCopyright */ - puts(_("psktool @VERSION@\n\ -Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n\ -This is free software. It is licensed for use, modification and\n\ -redistribution under the terms of the GNU General Public License,\n\ -version 3 or later \n")); - - /* referenced via psktoolOptions.pzCopyNotice */ - puts(_("psktool is free software: you can redistribute it and/or modify it under\n\ -the terms of the GNU General Public License as published by the Free\n\ -Software Foundation, either version 3 of the License, or (at your option)\n\ -any later version.\n\n")); - puts(_("psktool is distributed in the hope that it will be useful, but WITHOUT ANY\n\ -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\ -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n\ -details.\n\n")); - puts(_("You should have received a copy of the GNU General Public License along\n\ -with this program. If not, see .\n")); - - /* referenced via psktoolOptions.pOptDesc->pzText */ - puts(_("Enable debugging")); - - /* referenced via psktoolOptions.pOptDesc->pzText */ - puts(_("specify the key size in bytes")); - - /* referenced via psktoolOptions.pOptDesc->pzText */ - puts(_("specify a username")); - - /* referenced via psktoolOptions.pOptDesc->pzText */ - puts(_("specify a password file")); - - /* referenced via psktoolOptions.pOptDesc->pzText */ - puts(_("display extended usage information and exit")); - - /* referenced via psktoolOptions.pOptDesc->pzText */ - puts(_("extended usage information passed thru pager")); - - /* referenced via psktoolOptions.pOptDesc->pzText */ - puts(_("output version information and exit")); - - /* referenced via psktoolOptions.pzUsageTitle */ - puts(_("psktool - GnuTLS PSK tool\n\ -Usage: %s [ - [] | --[{=| }] ]...\n")); - - /* referenced via psktoolOptions.pzExplain */ - puts(_("\n")); - - /* referenced via psktoolOptions.pzDetail */ - puts(_("Program that generates random keys for use with TLS-PSK. The keys are\n\ -stored in hexadecimal format in a key file.\n")); - - /* referenced via psktoolOptions.pzFullVersion */ - puts(_("psktool @VERSION@")); - - /* referenced via psktoolOptions.pzFullUsage */ - puts(_("<<>>")); - - /* referenced via psktoolOptions.pzShortUsage */ - puts(_("psktool [options]\n\ -psktool --help for usage instructions.\n")); - /* LIBOPTS-MESSAGES: */ -#line 67 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" - puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" - puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" - puts(_("Automated Options Processing Error!\n" - "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" - puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" - puts(_("\tThis is less than the minimum library version: ")); -#line 121 "../version.c" - puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" - puts(_("(AutoOpts bug): %s.\n")); -#line 90 "../reset.c" - puts(_("optionResetOpt() called, but reset-option not configured")); -#line 295 "../usage.c" - puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" - puts(_("optionProcess() was called with invalid data")); -#line 751 "../usage.c" - puts(_("invalid argument type specified")); -#line 598 "../find.c" - puts(_("defaulted to option with optional arg")); -#line 76 "../alias.c" - puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" - puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" - puts(_(" The following options match:\n")); -#line 293 "../find.c" - puts(_("%s: ambiguous option name: %s (matches %d options)\n")); -#line 161 "../check.c" - puts(_("%s: Command line arguments required\n")); -#line 43 "../alias.c" - puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" - puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" - puts(_("interprocess pipe")); -#line 168 "../version.c" - puts(_("error: version option argument '%c' invalid. Use:\n" - "\t'v' - version only\n" - "\t'c' - version and copyright\n" - "\t'n' - version and full copyright notice\n")); -#line 58 "../check.c" - puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 38 "../alias.c" - puts(_("-equivalence")); -#line 469 "../find.c" - puts(_("%s: illegal option -- %c\n")); -#line 110 "../reset.c" - puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 118 "../reset.c" - puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" - puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 750 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 1084 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" - puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" - puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" - puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" - "\t'%s' and '%s'.")); -#line 94 "../check.c" - puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" - puts(_("%s: The '%s' option cannot have an argument.\n")); -#line 151 "../check.c" - puts(_("%s: Command line arguments are not allowed.\n")); -#line 536 "../save.c" - puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" - puts(_("%s error: '%s' does not match any %s keywords.\n")); -#line 93 "../reset.c" - puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 239 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 143 "../restore.c" - puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" - puts(_("'%s' is not a command line option.\n")); -#line 113 "../time.c" - puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); -#line 50 "../time.c" - puts(_("%s error: '%s' is not a recognizable time duration.\n")); -#line 92 "../check.c" - puts(_("%s error: The %s option must appear %d times.\n")); -#line 165 "../numeric.c" - puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" - puts(_("%s error: %s exceeds %s keyword count\n")); -#line 333 "../usage.c" - puts(_("Try '%s %s' for more information.\n")); -#line 45 "../alias.c" - puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" - puts(_("standard output")); -#line 943 "../makeshell.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard output")); -#line 418 "../usage.c" - puts(_("standard output")); -#line 628 "../usage.c" - puts(_("standard output")); -#line 175 "../version.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard error")); -#line 418 "../usage.c" - puts(_("standard error")); -#line 628 "../usage.c" - puts(_("standard error")); -#line 175 "../version.c" - puts(_("standard error")); -#line 208 "../makeshell.c" - puts(_("write")); -#line 943 "../makeshell.c" - puts(_("write")); -#line 276 "../usage.c" - puts(_("write")); -#line 417 "../usage.c" - puts(_("write")); -#line 627 "../usage.c" - puts(_("write")); -#line 174 "../version.c" - puts(_("write")); -#line 60 "../numeric.c" - puts(_("%s error: %s option value %ld is out of range.\n")); -#line 44 "../check.c" - puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 238 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 257 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 535 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); - /* END-LIBOPTS-MESSAGES */ - - /* USAGE-TEXT: */ -#line 876 "../usage.c" - puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1151 "../usage.c" - puts(_("Version, usage and configuration options:")); -#line 927 "../usage.c" - puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 840 "../usage.c" - puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1120 "../usage.c" - puts(_(" --- %-14s %s\n")); -#line 1118 "../usage.c" - puts(_("This option has been disabled")); -#line 867 "../usage.c" - puts(_("\t\t\t\t- enabled by default\n")); -#line 40 "../alias.c" - puts(_("%s error: only ")); -#line 1197 "../usage.c" - puts(_(" - examining environment variables named %s_*\n")); -#line 168 "../file.c" - puts(_("\t\t\t\t- file must not pre-exist\n")); -#line 172 "../file.c" - puts(_("\t\t\t\t- file must pre-exist\n")); -#line 383 "../usage.c" - puts(_("Options are specified by doubled hyphens and their name or by a single\n" - "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" - puts(_("\n" - "= = = = = = = =\n\n" - "This incarnation of genshell will produce\n" - "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" - puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 900 "../usage.c" - puts(_("\t\t\t\t- is a set membership option\n")); -#line 921 "../usage.c" - puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 385 "../usage.c" - puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 907 "../usage.c" - puts(_("\t\t\t\t- may appear multiple times\n")); -#line 894 "../usage.c" - puts(_("\t\t\t\t- may not be preset\n")); -#line 1312 "../usage.c" - puts(_(" Arg Option-Name Description\n")); -#line 1248 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1306 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1307 "../usage.c" - puts(_(" %3s %s")); -#line 1313 "../usage.c" - puts(_(" %3s %s")); -#line 390 "../usage.c" - puts(_("The '-#' option may omit the hash char\n")); -#line 386 "../usage.c" - puts(_("All arguments are named options.\n")); -#line 974 "../usage.c" - puts(_(" - reading file %s")); -#line 412 "../usage.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 100 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 129 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 906 "../usage.c" - puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 947 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 1195 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 685 "../usage.c" - puts(_("prohibits these options:\n")); -#line 680 "../usage.c" - puts(_("prohibits the option '%s'\n")); -#line 81 "../numeric.c" - puts(_("%s%ld to %ld")); -#line 79 "../numeric.c" - puts(_("%sgreater than or equal to %ld")); -#line 75 "../numeric.c" - puts(_("%s%ld exactly")); -#line 68 "../numeric.c" - puts(_("%sit must lie in one of the ranges:\n")); -#line 68 "../numeric.c" - puts(_("%sit must be in the range:\n")); -#line 88 "../numeric.c" - puts(_(", or\n")); -#line 66 "../numeric.c" - puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); -#line 77 "../numeric.c" - puts(_("%sless than or equal to %ld")); -#line 393 "../usage.c" - puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 655 "../usage.c" - puts(_("requires the option '%s'\n")); -#line 658 "../usage.c" - puts(_("requires these options:\n")); -#line 1324 "../usage.c" - puts(_(" Arg Option-Name Req? Description\n")); -#line 1318 "../usage.c" - puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" - puts(_("or you may use a numeric representation. Preceding these with a '!'\n" - "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" - "will set them all. Multiple entries may be passed as an option\n" - "argument list.\n")); -#line 913 "../usage.c" - puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" - puts(_("The valid \"%s\" option keywords are:\n")); -#line 1155 "../usage.c" - puts(_("The next option supports vendor supported extra options:")); -#line 776 "../usage.c" - puts(_("These additional options are:")); - /* END-USAGE-TEXT */ -} -#endif /* uncompilable code */ -#ifdef __cplusplus -} -#endif -/* psktool-args.c ends here */ diff --git a/src/psktool-args.def b/src/psktool-args.def index 819acdb327..74e1c0a57a 100644 --- a/src/psktool-args.def +++ b/src/psktool-args.def @@ -14,7 +14,7 @@ flag = { value = s; arg-type = number; arg-range = "0 -> 512"; - descrip = "specify the key size in bytes"; + descrip = "Specify the key size in bytes (default is 32-bytes or 256-bits)"; doc = ""; }; @@ -22,16 +22,23 @@ flag = { name = username; value = u; arg-type = string; - descrip = "specify a username"; + descrip = "Specify the username to use"; doc = ""; }; flag = { - name = passwd; + name = pskfile; value = p; arg-type = string; - descrip = "specify a password file"; - doc = ""; + descrip = "Specify a pre-shared key file"; + doc = "This option will specify the pre-shared key file to store the generated keys."; +}; + +flag = { + name = passwd; + aliases = pskfile; + descrip = "Specify a pre-shared key file"; + deprecated; }; doc-section = { @@ -46,18 +53,18 @@ doc-section = { ds-type = 'EXAMPLES'; ds-format = 'texi'; ds-text = <<-_EOT_ -To add a user 'psk_identity' in @file{passwd.psk} for use with GnuTLS run: +To add a user 'psk_identity' in @file{keys.psk} for use with GnuTLS run: @example -$ ./psktool -u psk_identity -p passwd.psk +$ ./psktool -u psk_identity -p keys.psk Generating a random key for user 'psk_identity' -Key stored to passwd.psk -$ cat psks.txt +Key stored to keys.psk +$ cat keys.psk psk_identity:88f3824b3e5659f52d00e959bacab954b6540344 $ @end example -This command will create @file{passwd.psk} if it does not exist -and will add user 'psk_identity' (you will also be prompted for a password). +This command will create @file{keys.psk} if it does not exist +and will add user 'psk_identity'. _EOT_; }; diff --git a/src/psktool-args.h.bak b/src/psktool-args.h.bak deleted file mode 100644 index 9f1811ecde..0000000000 --- a/src/psktool-args.h.bak +++ /dev/null @@ -1,221 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (psktool-args.h) - * - * It has been AutoGen-ed - * From the definitions psktool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This header file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the psktool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The psktool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * psktool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * psktool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -/** - * This file contains the programmatic interface to the Automated - * Options generated for the psktool program. - * These macros are documented in the AutoGen info file in the - * "AutoOpts" chapter. Please refer to that doc for usage help. - */ -#ifndef AUTOOPTS_PSKTOOL_ARGS_H_GUARD -#define AUTOOPTS_PSKTOOL_ARGS_H_GUARD 1 -#include "config.h" -#include - -/** - * Ensure that the library used for compiling this generated header is at - * least as new as the version current when the header template was released - * (not counting patch version increments). Also ensure that the oldest - * tolerable version is at least as old as what was current when the header - * template was released. - */ -#define AO_TEMPLATE_VERSION 167937 -#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ - || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) -# error option template version mismatches autoopts/options.h header - Choke Me. -#endif - -/** - * Enumeration of each option type for psktool - */ -typedef enum { - INDEX_OPT_DEBUG = 0, - INDEX_OPT_KEYSIZE = 1, - INDEX_OPT_USERNAME = 2, - INDEX_OPT_PASSWD = 3, - INDEX_OPT_VERSION = 4, - INDEX_OPT_HELP = 5, - INDEX_OPT_MORE_HELP = 6 -} teOptIndex; -/** count of all options for psktool */ -#define OPTION_CT 7 -/** psktool version */ -#define PSKTOOL_VERSION "@VERSION@" -/** Full psktool version text */ -#define PSKTOOL_FULL_VERSION "psktool @VERSION@" - -/** - * Interface defines for all options. Replace "n" with the UPPER_CASED - * option name (as in the teOptIndex enumeration above). - * e.g. HAVE_OPT(DEBUG) - */ -#define DESC(n) (psktoolOptions.pOptDesc[INDEX_OPT_## n]) -/** 'true' if an option has been specified in any way */ -#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) -/** The string argument to an option. The argument type must be \"string\". */ -#define OPT_ARG(n) (DESC(n).optArg.argString) -/** Mask the option state revealing how an option was specified. - * It will be one and only one of \a OPTST_SET, \a OPTST_PRESET, - * \a OPTST_DEFINED, \a OPTST_RESET or zero. - */ -#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) -/** Count of option's occurrances *on the command line*. */ -#define COUNT_OPT(n) (DESC(n).optOccCt) -/** mask of \a OPTST_SET and \a OPTST_DEFINED. */ -#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) -/** 'true' if \a HAVE_OPT would yield 'false'. */ -#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) -/** 'true' if OPTST_DISABLED bit not set. */ -#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) -/** number of stacked option arguments. - * Valid only for stacked option arguments. */ -#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) -/** stacked argument vector. - * Valid only for stacked option arguments. */ -#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) -/** Reset an option. */ -#define CLEAR_OPT(n) STMTS( \ - DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ - if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \ - DESC(n).fOptState |= OPTST_DISABLED; \ - DESC(n).optCookie = NULL ) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Enumeration of psktool exit codes - */ -typedef enum { - PSKTOOL_EXIT_SUCCESS = 0, - PSKTOOL_EXIT_FAILURE = 1, - PSKTOOL_EXIT_USAGE_ERROR = 64, - PSKTOOL_EXIT_LIBOPTS_FAILURE = 70 -} psktool_exit_code_t; -/** - * Interface defines for specific options. - * @{ - */ -#define VALUE_OPT_DEBUG 'd' - -#define OPT_VALUE_DEBUG (DESC(DEBUG).optArg.argInt) -#define VALUE_OPT_KEYSIZE 's' - -#define OPT_VALUE_KEYSIZE (DESC(KEYSIZE).optArg.argInt) -#define VALUE_OPT_USERNAME 'u' -#define VALUE_OPT_PASSWD 'p' -/** option flag (value) for help-value option */ -#define VALUE_OPT_HELP 'h' -/** option flag (value) for more-help-value option */ -#define VALUE_OPT_MORE_HELP '!' -/** option flag (value) for version-value option */ -#define VALUE_OPT_VERSION 'v' -/* - * Interface defines not associated with particular options - */ -#define ERRSKIP_OPTERR STMTS(psktoolOptions.fOptSet &= ~OPTPROC_ERRSTOP) -#define ERRSTOP_OPTERR STMTS(psktoolOptions.fOptSet |= OPTPROC_ERRSTOP) -#define RESTART_OPT(n) STMTS( \ - psktoolOptions.curOptIdx = (n); \ - psktoolOptions.pzCurOpt = NULL ) -#define START_OPT RESTART_OPT(1) -#define USAGE(c) (*psktoolOptions.pUsageProc)(&psktoolOptions, c) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * global exported definitions - */ -#include - - -/* * * * * * - * - * Declare the psktool option descriptor. - */ -extern tOptions psktoolOptions; - -#if defined(ENABLE_NLS) -# ifndef _ -# include -# ifndef HAVE_GETTEXT - extern char * gettext(char const *); -# else -# include -# endif - -# ifndef ATTRIBUTE_FORMAT_ARG -# define ATTRIBUTE_FORMAT_ARG(_a) -# endif - -static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1); -static inline char* aoGetsText(char const* pz) { - if (pz == NULL) return NULL; - return (char*)gettext(pz); -} -# define _(s) aoGetsText(s) -# endif /* _() */ - -# define OPT_NO_XLAT_CFG_NAMES STMTS(psktoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT_CFG;) -# define OPT_NO_XLAT_OPT_NAMES STMTS(psktoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;) - -# define OPT_XLAT_CFG_NAMES STMTS(psktoolOptions.fOptSet &= \ - ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);) -# define OPT_XLAT_OPT_NAMES STMTS(psktoolOptions.fOptSet &= \ - ~OPTPROC_NXLAT_OPT;) - -#else /* ENABLE_NLS */ -# define OPT_NO_XLAT_CFG_NAMES -# define OPT_NO_XLAT_OPT_NAMES - -# define OPT_XLAT_CFG_NAMES -# define OPT_XLAT_OPT_NAMES - -# ifndef _ -# define _(_s) _s -# endif -#endif /* ENABLE_NLS */ - -#ifdef __cplusplus -} -#endif -#endif /* AUTOOPTS_PSKTOOL_ARGS_H_GUARD */ - -/* psktool-args.h ends here */ diff --git a/src/serv-args.c.bak b/src/serv-args.c.bak deleted file mode 100644 index 3963eed922..0000000000 --- a/src/serv-args.c.bak +++ /dev/null @@ -1,2280 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (serv-args.c) - * - * It has been AutoGen-ed - * From the definitions serv-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This source file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the gnutls-serv author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The gnutls-serv program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * gnutls-serv is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * gnutls-serv is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef __doxygen__ -#define OPTION_CODE_COMPILE 1 -#include "serv-args.h" -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern FILE * option_usage_fp; -#define zCopyright (gnutls_serv_opt_strs+0) -#define zLicenseDescrip (gnutls_serv_opt_strs+292) - - -#ifndef NULL -# define NULL 0 -#endif - -/** - * static const strings for gnutls-serv options - */ -static char const gnutls_serv_opt_strs[3374] = -/* 0 */ "gnutls-serv @VERSION@\n" - "Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n" - "This is free software. It is licensed for use, modification and\n" - "redistribution under the terms of the GNU General Public License,\n" - "version 3 or later \n\0" -/* 292 */ "gnutls-serv is free software: you can redistribute it and/or modify it\n" - "under the terms of the GNU General Public License as published by the Free\n" - "Software Foundation, either version 3 of the License, or (at your option)\n" - "any later version.\n\n" - "gnutls-serv is distributed in the hope that it will be useful, but WITHOUT\n" - "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n" - "FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n" - "more details.\n\n" - "You should have received a copy of the GNU General Public License along\n" - "with this program. If not, see .\n\0" -/* 903 */ "Enable debugging\0" -/* 920 */ "DEBUG\0" -/* 926 */ "debug\0" -/* 932 */ "Server's hostname for server name extension\0" -/* 976 */ "SNI_HOSTNAME\0" -/* 989 */ "sni-hostname\0" -/* 1002 */ "Send fatal alert on sni-hostname mismatch\0" -/* 1044 */ "SNI_HOSTNAME_FATAL\0" -/* 1063 */ "sni-hostname-fatal\0" -/* 1082 */ "Don't accept session tickets\0" -/* 1111 */ "NOTICKET\0" -/* 1120 */ "noticket\0" -/* 1129 */ "Generate Diffie-Hellman parameters\0" -/* 1164 */ "GENERATE\0" -/* 1173 */ "generate\0" -/* 1182 */ "Suppress some messages\0" -/* 1205 */ "QUIET\0" -/* 1211 */ "quiet\0" -/* 1217 */ "Do not use a resumption database\0" -/* 1250 */ "NODB\0" -/* 1255 */ "nodb\0" -/* 1260 */ "Act as an HTTP server\0" -/* 1282 */ "HTTP\0" -/* 1287 */ "http\0" -/* 1292 */ "Act as an Echo server\0" -/* 1314 */ "ECHO\0" -/* 1319 */ "echo\0" -/* 1324 */ "Use DTLS (datagram TLS) over UDP\0" -/* 1357 */ "UDP\0" -/* 1361 */ "udp\0" -/* 1365 */ "Set MTU for datagram TLS\0" -/* 1390 */ "MTU\0" -/* 1394 */ "mtu\0" -/* 1398 */ "Offer SRTP profiles\0" -/* 1418 */ "SRTP_PROFILES\0" -/* 1432 */ "srtp-profiles\0" -/* 1446 */ "Do not request a client certificate\0" -/* 1482 */ "DISABLE_CLIENT_CERT\0" -/* 1502 */ "disable-client-cert\0" -/* 1522 */ "Require a client certificate\0" -/* 1551 */ "REQUIRE_CLIENT_CERT\0" -/* 1571 */ "require-client-cert\0" -/* 1591 */ "If a client certificate is sent then verify it.\0" -/* 1639 */ "VERIFY_CLIENT_CERT\0" -/* 1658 */ "verify-client-cert\0" -/* 1677 */ "Activate heartbeat support\0" -/* 1704 */ "HEARTBEAT\0" -/* 1714 */ "heartbeat\0" -/* 1724 */ "Use DER format for certificates to read from\0" -/* 1769 */ "X509FMTDER\0" -/* 1780 */ "x509fmtder\0" -/* 1791 */ "Priorities string\0" -/* 1809 */ "PRIORITY\0" -/* 1818 */ "priority\0" -/* 1827 */ "DH params file to use\0" -/* 1849 */ "DHPARAMS\0" -/* 1858 */ "dhparams\0" -/* 1867 */ "Certificate file or PKCS #11 URL to use\0" -/* 1907 */ "X509CAFILE\0" -/* 1918 */ "x509cafile\0" -/* 1929 */ "CRL file to use\0" -/* 1945 */ "X509CRLFILE\0" -/* 1957 */ "x509crlfile\0" -/* 1969 */ "PGP Key file to use\0" -/* 1989 */ "PGPKEYFILE\0" -/* 2000 */ "pgpkeyfile\0" -/* 2011 */ "PGP Key ring file to use\0" -/* 2036 */ "PGPKEYRING\0" -/* 2047 */ "pgpkeyring\0" -/* 2058 */ "PGP Public Key (certificate) file to use\0" -/* 2099 */ "PGPCERTFILE\0" -/* 2111 */ "pgpcertfile\0" -/* 2123 */ "X.509 key file or PKCS #11 URL to use\0" -/* 2161 */ "X509KEYFILE\0" -/* 2173 */ "x509keyfile\0" -/* 2185 */ "X.509 Certificate file or PKCS #11 URL to use\0" -/* 2231 */ "X509CERTFILE\0" -/* 2244 */ "x509certfile\0" -/* 2257 */ "Alternative X.509 key file or PKCS #11 URL to use\0" -/* 2307 */ "X509DSAKEYFILE\0" -/* 2322 */ "x509dsakeyfile\0" -/* 2337 */ "Alternative X.509 Certificate file or PKCS #11 URL to use\0" -/* 2395 */ "X509DSACERTFILE\0" -/* 2411 */ "x509dsacertfile\0" -/* 2427 */ "X509ECCKEYFILE\0" -/* 2442 */ "x509ecckeyfile\0" -/* 2457 */ "X509ECCCERTFILE\0" -/* 2473 */ "x509ecccertfile\0" -/* 2489 */ "PGP subkey to use (hex or auto)\0" -/* 2521 */ "PGPSUBKEY\0" -/* 2531 */ "pgpsubkey\0" -/* 2541 */ "SRP password file to use\0" -/* 2566 */ "SRPPASSWD\0" -/* 2576 */ "srppasswd\0" -/* 2586 */ "SRP password configuration file to use\0" -/* 2625 */ "SRPPASSWDCONF\0" -/* 2639 */ "srppasswdconf\0" -/* 2653 */ "PSK password file to use\0" -/* 2678 */ "PSKPASSWD\0" -/* 2688 */ "pskpasswd\0" -/* 2698 */ "PSK identity hint to use\0" -/* 2723 */ "PSKHINT\0" -/* 2731 */ "pskhint\0" -/* 2739 */ "The OCSP response to send to client\0" -/* 2775 */ "OCSP_RESPONSE\0" -/* 2789 */ "ocsp-response\0" -/* 2803 */ "The port to connect to\0" -/* 2826 */ "PORT\0" -/* 2831 */ "port\0" -/* 2836 */ "Print a list of the supported algorithms and modes\0" -/* 2887 */ "LIST\0" -/* 2892 */ "list\0" -/* 2897 */ "Specify the PKCS #11 provider library\0" -/* 2935 */ "PROVIDER\0" -/* 2944 */ "provider\0" -/* 2953 */ "display extended usage information and exit\0" -/* 2997 */ "help\0" -/* 3002 */ "extended usage information passed thru pager\0" -/* 3047 */ "more-help\0" -/* 3057 */ "output version information and exit\0" -/* 3093 */ "version\0" -/* 3101 */ "GNUTLS_SERV\0" -/* 3113 */ "gnutls-serv - GnuTLS server\n" - "Usage: %s [ - [] | --[{=| }] ]...\n\0" -/* 3199 */ "@PACKAGE_BUGREPORT@\0" -/* 3219 */ "\n\0" -/* 3221 */ "Server program that listens to incoming TLS connections.\n\0" -/* 3279 */ "gnutls-serv @VERSION@\0" -/* 3301 */ "Usage: gnutls-serv [options]\n" - "gnutls-serv --help for usage instructions.\n"; - -/** - * debug option description: - */ -/** Descriptive text for the debug option */ -#define DEBUG_DESC (gnutls_serv_opt_strs+903) -/** Upper-cased name for the debug option */ -#define DEBUG_NAME (gnutls_serv_opt_strs+920) -/** Name string for the debug option */ -#define DEBUG_name (gnutls_serv_opt_strs+926) -/** Compiled in flag settings for the debug option */ -#define DEBUG_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * sni-hostname option description: - */ -/** Descriptive text for the sni-hostname option */ -#define SNI_HOSTNAME_DESC (gnutls_serv_opt_strs+932) -/** Upper-cased name for the sni-hostname option */ -#define SNI_HOSTNAME_NAME (gnutls_serv_opt_strs+976) -/** Name string for the sni-hostname option */ -#define SNI_HOSTNAME_name (gnutls_serv_opt_strs+989) -/** Compiled in flag settings for the sni-hostname option */ -#define SNI_HOSTNAME_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * sni-hostname-fatal option description: - */ -/** Descriptive text for the sni-hostname-fatal option */ -#define SNI_HOSTNAME_FATAL_DESC (gnutls_serv_opt_strs+1002) -/** Upper-cased name for the sni-hostname-fatal option */ -#define SNI_HOSTNAME_FATAL_NAME (gnutls_serv_opt_strs+1044) -/** Name string for the sni-hostname-fatal option */ -#define SNI_HOSTNAME_FATAL_name (gnutls_serv_opt_strs+1063) -/** Compiled in flag settings for the sni-hostname-fatal option */ -#define SNI_HOSTNAME_FATAL_FLAGS (OPTST_DISABLED) - -/** - * noticket option description: - */ -/** Descriptive text for the noticket option */ -#define NOTICKET_DESC (gnutls_serv_opt_strs+1082) -/** Upper-cased name for the noticket option */ -#define NOTICKET_NAME (gnutls_serv_opt_strs+1111) -/** Name string for the noticket option */ -#define NOTICKET_name (gnutls_serv_opt_strs+1120) -/** Compiled in flag settings for the noticket option */ -#define NOTICKET_FLAGS (OPTST_DISABLED) - -/** - * generate option description: - */ -/** Descriptive text for the generate option */ -#define GENERATE_DESC (gnutls_serv_opt_strs+1129) -/** Upper-cased name for the generate option */ -#define GENERATE_NAME (gnutls_serv_opt_strs+1164) -/** Name string for the generate option */ -#define GENERATE_name (gnutls_serv_opt_strs+1173) -/** Compiled in flag settings for the generate option */ -#define GENERATE_FLAGS (OPTST_DISABLED) - -/** - * quiet option description: - */ -/** Descriptive text for the quiet option */ -#define QUIET_DESC (gnutls_serv_opt_strs+1182) -/** Upper-cased name for the quiet option */ -#define QUIET_NAME (gnutls_serv_opt_strs+1205) -/** Name string for the quiet option */ -#define QUIET_name (gnutls_serv_opt_strs+1211) -/** Compiled in flag settings for the quiet option */ -#define QUIET_FLAGS (OPTST_DISABLED) - -/** - * nodb option description: - */ -/** Descriptive text for the nodb option */ -#define NODB_DESC (gnutls_serv_opt_strs+1217) -/** Upper-cased name for the nodb option */ -#define NODB_NAME (gnutls_serv_opt_strs+1250) -/** Name string for the nodb option */ -#define NODB_name (gnutls_serv_opt_strs+1255) -/** Compiled in flag settings for the nodb option */ -#define NODB_FLAGS (OPTST_DISABLED) - -/** - * http option description: - */ -/** Descriptive text for the http option */ -#define HTTP_DESC (gnutls_serv_opt_strs+1260) -/** Upper-cased name for the http option */ -#define HTTP_NAME (gnutls_serv_opt_strs+1282) -/** Name string for the http option */ -#define HTTP_name (gnutls_serv_opt_strs+1287) -/** Compiled in flag settings for the http option */ -#define HTTP_FLAGS (OPTST_DISABLED) - -/** - * echo option description: - */ -/** Descriptive text for the echo option */ -#define ECHO_DESC (gnutls_serv_opt_strs+1292) -/** Upper-cased name for the echo option */ -#define ECHO_NAME (gnutls_serv_opt_strs+1314) -/** Name string for the echo option */ -#define ECHO_name (gnutls_serv_opt_strs+1319) -/** Compiled in flag settings for the echo option */ -#define ECHO_FLAGS (OPTST_DISABLED) - -/** - * udp option description: - */ -/** Descriptive text for the udp option */ -#define UDP_DESC (gnutls_serv_opt_strs+1324) -/** Upper-cased name for the udp option */ -#define UDP_NAME (gnutls_serv_opt_strs+1357) -/** Name string for the udp option */ -#define UDP_name (gnutls_serv_opt_strs+1361) -/** Compiled in flag settings for the udp option */ -#define UDP_FLAGS (OPTST_DISABLED) - -/** - * mtu option description: - */ -/** Descriptive text for the mtu option */ -#define MTU_DESC (gnutls_serv_opt_strs+1365) -/** Upper-cased name for the mtu option */ -#define MTU_NAME (gnutls_serv_opt_strs+1390) -/** Name string for the mtu option */ -#define MTU_name (gnutls_serv_opt_strs+1394) -/** Compiled in flag settings for the mtu option */ -#define MTU_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * srtp_profiles option description: - */ -/** Descriptive text for the srtp_profiles option */ -#define SRTP_PROFILES_DESC (gnutls_serv_opt_strs+1398) -/** Upper-cased name for the srtp_profiles option */ -#define SRTP_PROFILES_NAME (gnutls_serv_opt_strs+1418) -/** Name string for the srtp_profiles option */ -#define SRTP_PROFILES_name (gnutls_serv_opt_strs+1432) -/** Compiled in flag settings for the srtp_profiles option */ -#define SRTP_PROFILES_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * disable-client-cert option description: - */ -/** Descriptive text for the disable-client-cert option */ -#define DISABLE_CLIENT_CERT_DESC (gnutls_serv_opt_strs+1446) -/** Upper-cased name for the disable-client-cert option */ -#define DISABLE_CLIENT_CERT_NAME (gnutls_serv_opt_strs+1482) -/** Name string for the disable-client-cert option */ -#define DISABLE_CLIENT_CERT_name (gnutls_serv_opt_strs+1502) -/** Compiled in flag settings for the disable-client-cert option */ -#define DISABLE_CLIENT_CERT_FLAGS (OPTST_DISABLED) - -/** - * require-client-cert option description: - */ -/** Descriptive text for the require-client-cert option */ -#define REQUIRE_CLIENT_CERT_DESC (gnutls_serv_opt_strs+1522) -/** Upper-cased name for the require-client-cert option */ -#define REQUIRE_CLIENT_CERT_NAME (gnutls_serv_opt_strs+1551) -/** Name string for the require-client-cert option */ -#define REQUIRE_CLIENT_CERT_name (gnutls_serv_opt_strs+1571) -/** Compiled in flag settings for the require-client-cert option */ -#define REQUIRE_CLIENT_CERT_FLAGS (OPTST_DISABLED) - -/** - * verify-client-cert option description: - */ -/** Descriptive text for the verify-client-cert option */ -#define VERIFY_CLIENT_CERT_DESC (gnutls_serv_opt_strs+1591) -/** Upper-cased name for the verify-client-cert option */ -#define VERIFY_CLIENT_CERT_NAME (gnutls_serv_opt_strs+1639) -/** Name string for the verify-client-cert option */ -#define VERIFY_CLIENT_CERT_name (gnutls_serv_opt_strs+1658) -/** Compiled in flag settings for the verify-client-cert option */ -#define VERIFY_CLIENT_CERT_FLAGS (OPTST_DISABLED) - -/** - * heartbeat option description: - */ -/** Descriptive text for the heartbeat option */ -#define HEARTBEAT_DESC (gnutls_serv_opt_strs+1677) -/** Upper-cased name for the heartbeat option */ -#define HEARTBEAT_NAME (gnutls_serv_opt_strs+1704) -/** Name string for the heartbeat option */ -#define HEARTBEAT_name (gnutls_serv_opt_strs+1714) -/** Compiled in flag settings for the heartbeat option */ -#define HEARTBEAT_FLAGS (OPTST_DISABLED) - -/** - * x509fmtder option description: - */ -/** Descriptive text for the x509fmtder option */ -#define X509FMTDER_DESC (gnutls_serv_opt_strs+1724) -/** Upper-cased name for the x509fmtder option */ -#define X509FMTDER_NAME (gnutls_serv_opt_strs+1769) -/** Name string for the x509fmtder option */ -#define X509FMTDER_name (gnutls_serv_opt_strs+1780) -/** Compiled in flag settings for the x509fmtder option */ -#define X509FMTDER_FLAGS (OPTST_DISABLED) - -/** - * priority option description: - */ -/** Descriptive text for the priority option */ -#define PRIORITY_DESC (gnutls_serv_opt_strs+1791) -/** Upper-cased name for the priority option */ -#define PRIORITY_NAME (gnutls_serv_opt_strs+1809) -/** Name string for the priority option */ -#define PRIORITY_name (gnutls_serv_opt_strs+1818) -/** Compiled in flag settings for the priority option */ -#define PRIORITY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * dhparams option description: - */ -/** Descriptive text for the dhparams option */ -#define DHPARAMS_DESC (gnutls_serv_opt_strs+1827) -/** Upper-cased name for the dhparams option */ -#define DHPARAMS_NAME (gnutls_serv_opt_strs+1849) -/** Name string for the dhparams option */ -#define DHPARAMS_name (gnutls_serv_opt_strs+1858) -/** Compiled in flag settings for the dhparams option */ -#define DHPARAMS_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * x509cafile option description: - */ -/** Descriptive text for the x509cafile option */ -#define X509CAFILE_DESC (gnutls_serv_opt_strs+1867) -/** Upper-cased name for the x509cafile option */ -#define X509CAFILE_NAME (gnutls_serv_opt_strs+1907) -/** Name string for the x509cafile option */ -#define X509CAFILE_name (gnutls_serv_opt_strs+1918) -/** Compiled in flag settings for the x509cafile option */ -#define X509CAFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * x509crlfile option description: - */ -/** Descriptive text for the x509crlfile option */ -#define X509CRLFILE_DESC (gnutls_serv_opt_strs+1929) -/** Upper-cased name for the x509crlfile option */ -#define X509CRLFILE_NAME (gnutls_serv_opt_strs+1945) -/** Name string for the x509crlfile option */ -#define X509CRLFILE_name (gnutls_serv_opt_strs+1957) -/** Compiled in flag settings for the x509crlfile option */ -#define X509CRLFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * pgpkeyfile option description: - */ -/** Descriptive text for the pgpkeyfile option */ -#define PGPKEYFILE_DESC (gnutls_serv_opt_strs+1969) -/** Upper-cased name for the pgpkeyfile option */ -#define PGPKEYFILE_NAME (gnutls_serv_opt_strs+1989) -/** Name string for the pgpkeyfile option */ -#define PGPKEYFILE_name (gnutls_serv_opt_strs+2000) -/** Compiled in flag settings for the pgpkeyfile option */ -#define PGPKEYFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * pgpkeyring option description: - */ -/** Descriptive text for the pgpkeyring option */ -#define PGPKEYRING_DESC (gnutls_serv_opt_strs+2011) -/** Upper-cased name for the pgpkeyring option */ -#define PGPKEYRING_NAME (gnutls_serv_opt_strs+2036) -/** Name string for the pgpkeyring option */ -#define PGPKEYRING_name (gnutls_serv_opt_strs+2047) -/** Compiled in flag settings for the pgpkeyring option */ -#define PGPKEYRING_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * pgpcertfile option description: - */ -/** Descriptive text for the pgpcertfile option */ -#define PGPCERTFILE_DESC (gnutls_serv_opt_strs+2058) -/** Upper-cased name for the pgpcertfile option */ -#define PGPCERTFILE_NAME (gnutls_serv_opt_strs+2099) -/** Name string for the pgpcertfile option */ -#define PGPCERTFILE_name (gnutls_serv_opt_strs+2111) -/** Compiled in flag settings for the pgpcertfile option */ -#define PGPCERTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * x509keyfile option description: - */ -/** Descriptive text for the x509keyfile option */ -#define X509KEYFILE_DESC (gnutls_serv_opt_strs+2123) -/** Upper-cased name for the x509keyfile option */ -#define X509KEYFILE_NAME (gnutls_serv_opt_strs+2161) -/** Name string for the x509keyfile option */ -#define X509KEYFILE_name (gnutls_serv_opt_strs+2173) -/** Compiled in flag settings for the x509keyfile option */ -#define X509KEYFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * x509certfile option description: - */ -/** Descriptive text for the x509certfile option */ -#define X509CERTFILE_DESC (gnutls_serv_opt_strs+2185) -/** Upper-cased name for the x509certfile option */ -#define X509CERTFILE_NAME (gnutls_serv_opt_strs+2231) -/** Name string for the x509certfile option */ -#define X509CERTFILE_name (gnutls_serv_opt_strs+2244) -/** Compiled in flag settings for the x509certfile option */ -#define X509CERTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * x509dsakeyfile option description: - */ -/** Descriptive text for the x509dsakeyfile option */ -#define X509DSAKEYFILE_DESC (gnutls_serv_opt_strs+2257) -/** Upper-cased name for the x509dsakeyfile option */ -#define X509DSAKEYFILE_NAME (gnutls_serv_opt_strs+2307) -/** Name string for the x509dsakeyfile option */ -#define X509DSAKEYFILE_name (gnutls_serv_opt_strs+2322) -/** Compiled in flag settings for the x509dsakeyfile option */ -#define X509DSAKEYFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * x509dsacertfile option description: - */ -/** Descriptive text for the x509dsacertfile option */ -#define X509DSACERTFILE_DESC (gnutls_serv_opt_strs+2337) -/** Upper-cased name for the x509dsacertfile option */ -#define X509DSACERTFILE_NAME (gnutls_serv_opt_strs+2395) -/** Name string for the x509dsacertfile option */ -#define X509DSACERTFILE_name (gnutls_serv_opt_strs+2411) -/** Compiled in flag settings for the x509dsacertfile option */ -#define X509DSACERTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * x509ecckeyfile option description: - */ -/** Descriptive text for the x509ecckeyfile option */ -#define X509ECCKEYFILE_DESC (gnutls_serv_opt_strs+2257) -/** Upper-cased name for the x509ecckeyfile option */ -#define X509ECCKEYFILE_NAME (gnutls_serv_opt_strs+2427) -/** Name string for the x509ecckeyfile option */ -#define X509ECCKEYFILE_name (gnutls_serv_opt_strs+2442) -/** Compiled in flag settings for the x509ecckeyfile option */ -#define X509ECCKEYFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * x509ecccertfile option description: - */ -/** Descriptive text for the x509ecccertfile option */ -#define X509ECCCERTFILE_DESC (gnutls_serv_opt_strs+2337) -/** Upper-cased name for the x509ecccertfile option */ -#define X509ECCCERTFILE_NAME (gnutls_serv_opt_strs+2457) -/** Name string for the x509ecccertfile option */ -#define X509ECCCERTFILE_name (gnutls_serv_opt_strs+2473) -/** Compiled in flag settings for the x509ecccertfile option */ -#define X509ECCCERTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * pgpsubkey option description: - */ -/** Descriptive text for the pgpsubkey option */ -#define PGPSUBKEY_DESC (gnutls_serv_opt_strs+2489) -/** Upper-cased name for the pgpsubkey option */ -#define PGPSUBKEY_NAME (gnutls_serv_opt_strs+2521) -/** Name string for the pgpsubkey option */ -#define PGPSUBKEY_name (gnutls_serv_opt_strs+2531) -/** Compiled in flag settings for the pgpsubkey option */ -#define PGPSUBKEY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * srppasswd option description: - */ -/** Descriptive text for the srppasswd option */ -#define SRPPASSWD_DESC (gnutls_serv_opt_strs+2541) -/** Upper-cased name for the srppasswd option */ -#define SRPPASSWD_NAME (gnutls_serv_opt_strs+2566) -/** Name string for the srppasswd option */ -#define SRPPASSWD_name (gnutls_serv_opt_strs+2576) -/** Compiled in flag settings for the srppasswd option */ -#define SRPPASSWD_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * srppasswdconf option description: - */ -/** Descriptive text for the srppasswdconf option */ -#define SRPPASSWDCONF_DESC (gnutls_serv_opt_strs+2586) -/** Upper-cased name for the srppasswdconf option */ -#define SRPPASSWDCONF_NAME (gnutls_serv_opt_strs+2625) -/** Name string for the srppasswdconf option */ -#define SRPPASSWDCONF_name (gnutls_serv_opt_strs+2639) -/** Compiled in flag settings for the srppasswdconf option */ -#define SRPPASSWDCONF_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * pskpasswd option description: - */ -/** Descriptive text for the pskpasswd option */ -#define PSKPASSWD_DESC (gnutls_serv_opt_strs+2653) -/** Upper-cased name for the pskpasswd option */ -#define PSKPASSWD_NAME (gnutls_serv_opt_strs+2678) -/** Name string for the pskpasswd option */ -#define PSKPASSWD_name (gnutls_serv_opt_strs+2688) -/** Compiled in flag settings for the pskpasswd option */ -#define PSKPASSWD_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * pskhint option description: - */ -/** Descriptive text for the pskhint option */ -#define PSKHINT_DESC (gnutls_serv_opt_strs+2698) -/** Upper-cased name for the pskhint option */ -#define PSKHINT_NAME (gnutls_serv_opt_strs+2723) -/** Name string for the pskhint option */ -#define PSKHINT_name (gnutls_serv_opt_strs+2731) -/** Compiled in flag settings for the pskhint option */ -#define PSKHINT_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * ocsp-response option description: - */ -/** Descriptive text for the ocsp-response option */ -#define OCSP_RESPONSE_DESC (gnutls_serv_opt_strs+2739) -/** Upper-cased name for the ocsp-response option */ -#define OCSP_RESPONSE_NAME (gnutls_serv_opt_strs+2775) -/** Name string for the ocsp-response option */ -#define OCSP_RESPONSE_name (gnutls_serv_opt_strs+2789) -/** Compiled in flag settings for the ocsp-response option */ -#define OCSP_RESPONSE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * port option description: - */ -/** Descriptive text for the port option */ -#define PORT_DESC (gnutls_serv_opt_strs+2803) -/** Upper-cased name for the port option */ -#define PORT_NAME (gnutls_serv_opt_strs+2826) -/** Name string for the port option */ -#define PORT_name (gnutls_serv_opt_strs+2831) -/** Compiled in flag settings for the port option */ -#define PORT_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * list option description: - */ -/** Descriptive text for the list option */ -#define LIST_DESC (gnutls_serv_opt_strs+2836) -/** Upper-cased name for the list option */ -#define LIST_NAME (gnutls_serv_opt_strs+2887) -/** Name string for the list option */ -#define LIST_name (gnutls_serv_opt_strs+2892) -/** Compiled in flag settings for the list option */ -#define LIST_FLAGS (OPTST_DISABLED) - -/** - * provider option description: - */ -/** Descriptive text for the provider option */ -#define PROVIDER_DESC (gnutls_serv_opt_strs+2897) -/** Upper-cased name for the provider option */ -#define PROVIDER_NAME (gnutls_serv_opt_strs+2935) -/** Name string for the provider option */ -#define PROVIDER_name (gnutls_serv_opt_strs+2944) -/** Compiled in flag settings for the provider option */ -#define PROVIDER_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/* - * Help/More_Help/Version option descriptions: - */ -#define HELP_DESC (gnutls_serv_opt_strs+2953) -#define HELP_name (gnutls_serv_opt_strs+2997) -#ifdef HAVE_WORKING_FORK -#define MORE_HELP_DESC (gnutls_serv_opt_strs+3002) -#define MORE_HELP_name (gnutls_serv_opt_strs+3047) -#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -#define MORE_HELP_DESC HELP_DESC -#define MORE_HELP_name HELP_name -#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT) -#endif -#ifdef NO_OPTIONAL_OPT_ARGS -# define VER_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ - OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT) -#endif -#define VER_DESC (gnutls_serv_opt_strs+3057) -#define VER_name (gnutls_serv_opt_strs+3093) -/** - * Declare option callback procedures - */ -extern tOptProc - optionBooleanVal, optionNestedVal, optionNumericVal, - optionPagedUsage, optionPrintVersion, optionResetOpt, - optionStackArg, optionTimeDate, optionTimeVal, - optionUnstackArg, optionVendorOption; -static tOptProc - doOptDebug, doOptDhparams, doOptMtu, - doOptOcsp_Response, doOptPgpcertfile, doOptPgpkeyfile, - doOptPgpkeyring, doOptProvider, doOptPskpasswd, - doOptSrppasswd, doOptSrppasswdconf, doOptX509crlfile, - doUsageOpt; -#define VER_PROC optionPrintVersion - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Define the gnutls-serv Option Descriptions. - * This is an array of OPTION_CT entries, one for each - * option that the gnutls-serv program responds to. - */ -static tOptDesc optDesc[OPTION_CT] = { - { /* entry idx, value */ 0, VALUE_OPT_DEBUG, - /* equiv idx, value */ 0, VALUE_OPT_DEBUG, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DEBUG_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --debug */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDebug, - /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 1, VALUE_OPT_SNI_HOSTNAME, - /* equiv idx, value */ 1, VALUE_OPT_SNI_HOSTNAME, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SNI_HOSTNAME_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --sni-hostname */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SNI_HOSTNAME_DESC, SNI_HOSTNAME_NAME, SNI_HOSTNAME_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 2, VALUE_OPT_SNI_HOSTNAME_FATAL, - /* equiv idx, value */ 2, VALUE_OPT_SNI_HOSTNAME_FATAL, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SNI_HOSTNAME_FATAL_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --sni-hostname-fatal */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SNI_HOSTNAME_FATAL_DESC, SNI_HOSTNAME_FATAL_NAME, SNI_HOSTNAME_FATAL_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 3, VALUE_OPT_NOTICKET, - /* equiv idx, value */ 3, VALUE_OPT_NOTICKET, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ NOTICKET_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --noticket */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ NOTICKET_DESC, NOTICKET_NAME, NOTICKET_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 4, VALUE_OPT_GENERATE, - /* equiv idx, value */ 4, VALUE_OPT_GENERATE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_DESC, GENERATE_NAME, GENERATE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 5, VALUE_OPT_QUIET, - /* equiv idx, value */ 5, VALUE_OPT_QUIET, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ QUIET_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --quiet */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ QUIET_DESC, QUIET_NAME, QUIET_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 6, VALUE_OPT_NODB, - /* equiv idx, value */ 6, VALUE_OPT_NODB, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ NODB_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --nodb */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ NODB_DESC, NODB_NAME, NODB_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 7, VALUE_OPT_HTTP, - /* equiv idx, value */ 7, VALUE_OPT_HTTP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ HTTP_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --http */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ HTTP_DESC, HTTP_NAME, HTTP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 8, VALUE_OPT_ECHO, - /* equiv idx, value */ 8, VALUE_OPT_ECHO, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ ECHO_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --echo */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ ECHO_DESC, ECHO_NAME, ECHO_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 9, VALUE_OPT_UDP, - /* equiv idx, value */ 9, VALUE_OPT_UDP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ UDP_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --udp */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ UDP_DESC, UDP_NAME, UDP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 10, VALUE_OPT_MTU, - /* equiv idx, value */ 10, VALUE_OPT_MTU, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MTU_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --mtu */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptMtu, - /* desc, NAME, name */ MTU_DESC, MTU_NAME, MTU_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 11, VALUE_OPT_SRTP_PROFILES, - /* equiv idx, value */ 11, VALUE_OPT_SRTP_PROFILES, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SRTP_PROFILES_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --srtp_profiles */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SRTP_PROFILES_DESC, SRTP_PROFILES_NAME, SRTP_PROFILES_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 12, VALUE_OPT_DISABLE_CLIENT_CERT, - /* equiv idx, value */ 12, VALUE_OPT_DISABLE_CLIENT_CERT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DISABLE_CLIENT_CERT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --disable-client-cert */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DISABLE_CLIENT_CERT_DESC, DISABLE_CLIENT_CERT_NAME, DISABLE_CLIENT_CERT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 13, VALUE_OPT_REQUIRE_CLIENT_CERT, - /* equiv idx, value */ 13, VALUE_OPT_REQUIRE_CLIENT_CERT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ REQUIRE_CLIENT_CERT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --require-client-cert */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ REQUIRE_CLIENT_CERT_DESC, REQUIRE_CLIENT_CERT_NAME, REQUIRE_CLIENT_CERT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 14, VALUE_OPT_VERIFY_CLIENT_CERT, - /* equiv idx, value */ 14, VALUE_OPT_VERIFY_CLIENT_CERT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VERIFY_CLIENT_CERT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verify-client-cert */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERIFY_CLIENT_CERT_DESC, VERIFY_CLIENT_CERT_NAME, VERIFY_CLIENT_CERT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 15, VALUE_OPT_HEARTBEAT, - /* equiv idx, value */ 15, VALUE_OPT_HEARTBEAT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ HEARTBEAT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --heartbeat */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ HEARTBEAT_DESC, HEARTBEAT_NAME, HEARTBEAT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 16, VALUE_OPT_X509FMTDER, - /* equiv idx, value */ 16, VALUE_OPT_X509FMTDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509FMTDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509fmtder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509FMTDER_DESC, X509FMTDER_NAME, X509FMTDER_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 17, VALUE_OPT_PRIORITY, - /* equiv idx, value */ 17, VALUE_OPT_PRIORITY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PRIORITY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --priority */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PRIORITY_DESC, PRIORITY_NAME, PRIORITY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 18, VALUE_OPT_DHPARAMS, - /* equiv idx, value */ 18, VALUE_OPT_DHPARAMS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DHPARAMS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --dhparams */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDhparams, - /* desc, NAME, name */ DHPARAMS_DESC, DHPARAMS_NAME, DHPARAMS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 19, VALUE_OPT_X509CAFILE, - /* equiv idx, value */ 19, VALUE_OPT_X509CAFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509CAFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509cafile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509CAFILE_DESC, X509CAFILE_NAME, X509CAFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 20, VALUE_OPT_X509CRLFILE, - /* equiv idx, value */ 20, VALUE_OPT_X509CRLFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509CRLFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509crlfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptX509crlfile, - /* desc, NAME, name */ X509CRLFILE_DESC, X509CRLFILE_NAME, X509CRLFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 21, VALUE_OPT_PGPKEYFILE, - /* equiv idx, value */ 21, VALUE_OPT_PGPKEYFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PGPKEYFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pgpkeyfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptPgpkeyfile, - /* desc, NAME, name */ PGPKEYFILE_DESC, PGPKEYFILE_NAME, PGPKEYFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 22, VALUE_OPT_PGPKEYRING, - /* equiv idx, value */ 22, VALUE_OPT_PGPKEYRING, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PGPKEYRING_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pgpkeyring */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptPgpkeyring, - /* desc, NAME, name */ PGPKEYRING_DESC, PGPKEYRING_NAME, PGPKEYRING_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 23, VALUE_OPT_PGPCERTFILE, - /* equiv idx, value */ 23, VALUE_OPT_PGPCERTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PGPCERTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pgpcertfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptPgpcertfile, - /* desc, NAME, name */ PGPCERTFILE_DESC, PGPCERTFILE_NAME, PGPCERTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 24, VALUE_OPT_X509KEYFILE, - /* equiv idx, value */ 24, VALUE_OPT_X509KEYFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509KEYFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509keyfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509KEYFILE_DESC, X509KEYFILE_NAME, X509KEYFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 25, VALUE_OPT_X509CERTFILE, - /* equiv idx, value */ 25, VALUE_OPT_X509CERTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509CERTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509certfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509CERTFILE_DESC, X509CERTFILE_NAME, X509CERTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 26, VALUE_OPT_X509DSAKEYFILE, - /* equiv idx, value */ 26, VALUE_OPT_X509DSAKEYFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509DSAKEYFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509dsakeyfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509DSAKEYFILE_DESC, X509DSAKEYFILE_NAME, X509DSAKEYFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 27, VALUE_OPT_X509DSACERTFILE, - /* equiv idx, value */ 27, VALUE_OPT_X509DSACERTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509DSACERTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509dsacertfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509DSACERTFILE_DESC, X509DSACERTFILE_NAME, X509DSACERTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 28, VALUE_OPT_X509ECCKEYFILE, - /* equiv idx, value */ 28, VALUE_OPT_X509ECCKEYFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509ECCKEYFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509ecckeyfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509ECCKEYFILE_DESC, X509ECCKEYFILE_NAME, X509ECCKEYFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 29, VALUE_OPT_X509ECCCERTFILE, - /* equiv idx, value */ 29, VALUE_OPT_X509ECCCERTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ X509ECCCERTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --x509ecccertfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ X509ECCCERTFILE_DESC, X509ECCCERTFILE_NAME, X509ECCCERTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 30, VALUE_OPT_PGPSUBKEY, - /* equiv idx, value */ 30, VALUE_OPT_PGPSUBKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PGPSUBKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pgpsubkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PGPSUBKEY_DESC, PGPSUBKEY_NAME, PGPSUBKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 31, VALUE_OPT_SRPPASSWD, - /* equiv idx, value */ 31, VALUE_OPT_SRPPASSWD, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SRPPASSWD_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --srppasswd */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptSrppasswd, - /* desc, NAME, name */ SRPPASSWD_DESC, SRPPASSWD_NAME, SRPPASSWD_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 32, VALUE_OPT_SRPPASSWDCONF, - /* equiv idx, value */ 32, VALUE_OPT_SRPPASSWDCONF, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SRPPASSWDCONF_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --srppasswdconf */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptSrppasswdconf, - /* desc, NAME, name */ SRPPASSWDCONF_DESC, SRPPASSWDCONF_NAME, SRPPASSWDCONF_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 33, VALUE_OPT_PSKPASSWD, - /* equiv idx, value */ 33, VALUE_OPT_PSKPASSWD, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PSKPASSWD_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pskpasswd */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptPskpasswd, - /* desc, NAME, name */ PSKPASSWD_DESC, PSKPASSWD_NAME, PSKPASSWD_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 34, VALUE_OPT_PSKHINT, - /* equiv idx, value */ 34, VALUE_OPT_PSKHINT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PSKHINT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pskhint */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PSKHINT_DESC, PSKHINT_NAME, PSKHINT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 35, VALUE_OPT_OCSP_RESPONSE, - /* equiv idx, value */ 35, VALUE_OPT_OCSP_RESPONSE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OCSP_RESPONSE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --ocsp-response */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptOcsp_Response, - /* desc, NAME, name */ OCSP_RESPONSE_DESC, OCSP_RESPONSE_NAME, OCSP_RESPONSE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 36, VALUE_OPT_PORT, - /* equiv idx, value */ 36, VALUE_OPT_PORT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PORT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --port */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionNumericVal, - /* desc, NAME, name */ PORT_DESC, PORT_NAME, PORT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 37, VALUE_OPT_LIST, - /* equiv idx, value */ 37, VALUE_OPT_LIST, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_DESC, LIST_NAME, LIST_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 38, VALUE_OPT_PROVIDER, - /* equiv idx, value */ 38, VALUE_OPT_PROVIDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PROVIDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --provider */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptProvider, - /* desc, NAME, name */ PROVIDER_DESC, PROVIDER_NAME, PROVIDER_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VER_FLAGS, AOUSE_VERSION, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ VER_PROC, - /* desc, NAME, name */ VER_DESC, NULL, VER_name, - /* disablement strs */ NULL, NULL }, - - - - { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doUsageOpt, - /* desc, NAME, name */ HELP_DESC, NULL, HELP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionPagedUsage, - /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name, - /* disablement strs */ NULL, NULL } -}; - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** Reference to the upper cased version of gnutls-serv. */ -#define zPROGNAME (gnutls_serv_opt_strs+3101) -/** Reference to the title line for gnutls-serv usage. */ -#define zUsageTitle (gnutls_serv_opt_strs+3113) -/** There is no gnutls-serv configuration file. */ -#define zRcName NULL -/** There are no directories to search for gnutls-serv config files. */ -#define apzHomeList NULL -/** The gnutls-serv program bug email address. */ -#define zBugsAddr (gnutls_serv_opt_strs+3199) -/** Clarification/explanation of what gnutls-serv does. */ -#define zExplain (gnutls_serv_opt_strs+3219) -/** Extra detail explaining what gnutls-serv does. */ -#define zDetail (gnutls_serv_opt_strs+3221) -/** The full version string for gnutls-serv. */ -#define zFullVersion (gnutls_serv_opt_strs+3279) -/* extracted from optcode.tlib near line 364 */ - -#if defined(ENABLE_NLS) -# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT - static tOptionXlateProc translate_option_strings; -#else -# define OPTPROC_BASE OPTPROC_NONE -# define translate_option_strings NULL -#endif /* ENABLE_NLS */ - -#define gnutls_serv_full_usage (NULL) -#define gnutls_serv_short_usage (gnutls_serv_opt_strs+3301) - -#endif /* not defined __doxygen__ */ - -/* - * Create the static procedure(s) declared above. - */ -/** - * The callout function that invokes the optionUsage function. - * - * @param[in] opts the AutoOpts option description structure - * @param[in] od the descriptor for the "help" (usage) option. - * @noreturn - */ -static void -doUsageOpt(tOptions * opts, tOptDesc * od) -{ - int ex_code; - ex_code = GNUTLS_SERV_EXIT_SUCCESS; - optionUsage(&gnutls_servOptions, ex_code); - /* NOTREACHED */ - exit(GNUTLS_SERV_EXIT_FAILURE); - (void)opts; - (void)od; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the debug option. - * Specifies the debug level. - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 9999 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the mtu option. - * - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptMtu(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0, 17000 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the dhparams option. - * - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDhparams(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the x509crlfile option. - * - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptX509crlfile(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the pgpkeyfile option. - * - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptPgpkeyfile(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the pgpkeyring option. - * - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptPgpkeyring(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the pgpcertfile option. - * - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptPgpcertfile(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the srppasswd option. - * - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptSrppasswd(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the srppasswdconf option. - * - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptSrppasswdconf(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the pskpasswd option. - * - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptPskpasswd(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the ocsp-response option. - * If the client requested an OCSP response, return data from this file to the client. - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptOcsp_Response(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the provider option. - * This will override the default options in /etc/gnutls/pkcs11.conf - * @param[in] pOptions the gnutls-serv options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptProvider(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} -/* extracted from optmain.tlib near line 1250 */ - -/** - * The directory containing the data associated with gnutls-serv. - */ -#ifndef PKGDATADIR -# define PKGDATADIR "" -#endif - -/** - * Information about the person or institution that packaged gnutls-serv - * for the current distribution. - */ -#ifndef WITH_PACKAGER -# define gnutls_serv_packager_info NULL -#else -/** Packager information for gnutls-serv. */ -static char const gnutls_serv_packager_info[] = - "Packaged by " WITH_PACKAGER - -# ifdef WITH_PACKAGER_VERSION - " ("WITH_PACKAGER_VERSION")" -# endif - -# ifdef WITH_PACKAGER_BUG_REPORTS - "\nReport gnutls_serv bugs to " WITH_PACKAGER_BUG_REPORTS -# endif - "\n"; -#endif -#ifndef __doxygen__ - -#endif /* __doxygen__ */ -/** - * The option definitions for gnutls-serv. The one structure that - * binds them all. - */ -tOptions gnutls_servOptions = { - OPTIONS_STRUCT_VERSION, - 0, NULL, /* original argc + argv */ - ( OPTPROC_BASE - + OPTPROC_ERRSTOP - + OPTPROC_SHORTOPT - + OPTPROC_LONGOPT - + OPTPROC_NO_REQ_OPT - + OPTPROC_NO_ARGS - + OPTPROC_GNUUSAGE - + OPTPROC_MISUSE ), - 0, NULL, /* current option index, current option */ - NULL, NULL, zPROGNAME, - zRcName, zCopyright, zLicenseDescrip, - zFullVersion, apzHomeList, zUsageTitle, - zExplain, zDetail, optDesc, - zBugsAddr, /* address to send bugs to */ - NULL, NULL, /* extensions/saved state */ - optionUsage, /* usage procedure */ - translate_option_strings, /* translation procedure */ - /* - * Indexes to special options - */ - { INDEX_OPT_MORE_HELP, /* more-help option index */ - NO_EQUIVALENT, /* save option index */ - NO_EQUIVALENT, /* '-#' option index */ - NO_EQUIVALENT /* index of default opt */ - }, - 42 /* full option count */, 39 /* user option count */, - gnutls_serv_full_usage, gnutls_serv_short_usage, - NULL, NULL, - PKGDATADIR, gnutls_serv_packager_info -}; - -#if ENABLE_NLS -/** - * This code is designed to translate translatable option text for the - * gnutls-serv program. These translations happen upon entry - * to optionProcess(). - */ -#include -#include -#include -#include -#ifdef HAVE_DCGETTEXT -# include -#endif -#include - -static char * AO_gettext(char const * pz); -static void coerce_it(void ** s); - -/** - * AutoGen specific wrapper function for gettext. It relies on the macro _() - * to convert from English to the target language, then strdup-duplicates the - * result string. It tries the "libopts" domain first, then whatever has been - * set via the \a textdomain(3) call. - * - * @param[in] pz the input text used as a lookup key. - * @returns the translated text (if there is one), - * or the original text (if not). - */ -static char * -AO_gettext(char const * pz) -{ - char * res; - if (pz == NULL) - return NULL; -#ifdef HAVE_DCGETTEXT - /* - * While processing the option_xlateable_txt data, try to use the - * "libopts" domain. Once we switch to the option descriptor data, - * do *not* use that domain. - */ - if (option_xlateable_txt.field_ct != 0) { - res = dgettext("libopts", pz); - if (res == pz) - res = (char *)VOIDP(_(pz)); - } else - res = (char *)VOIDP(_(pz)); -#else - res = (char *)VOIDP(_(pz)); -#endif - if (res == pz) - return res; - res = strdup(res); - if (res == NULL) { - fputs(_("No memory for duping translated strings\n"), stderr); - exit(GNUTLS_SERV_EXIT_FAILURE); - } - return res; -} - -/** - * All the pointers we use are marked "* const", but they are stored in - * writable memory. Coerce the mutability and set the pointer. - */ -static void coerce_it(void ** s) { *s = AO_gettext(*s); -} - -/** - * Translate all the translatable strings in the gnutls_servOptions - * structure defined above. This is done only once. - */ -static void -translate_option_strings(void) -{ - tOptions * const opts = &gnutls_servOptions; - - /* - * Guard against re-translation. It won't work. The strings will have - * been changed by the first pass through this code. One shot only. - */ - if (option_xlateable_txt.field_ct != 0) { - /* - * Do the translations. The first pointer follows the field count - * field. The field count field is the size of a pointer. - */ - char ** ppz = (char**)VOIDP(&(option_xlateable_txt)); - int ix = option_xlateable_txt.field_ct; - - do { - ppz++; /* skip over field_ct */ - *ppz = AO_gettext(*ppz); - } while (--ix > 0); - /* prevent re-translation and disable "libopts" domain lookup */ - option_xlateable_txt.field_ct = 0; - - coerce_it(VOIDP(&(opts->pzCopyright))); - coerce_it(VOIDP(&(opts->pzCopyNotice))); - coerce_it(VOIDP(&(opts->pzFullVersion))); - coerce_it(VOIDP(&(opts->pzUsageTitle))); - coerce_it(VOIDP(&(opts->pzExplain))); - coerce_it(VOIDP(&(opts->pzDetail))); - { - tOptDesc * od = opts->pOptDesc; - for (ix = opts->optCt; ix > 0; ix--, od++) - coerce_it(VOIDP(&(od->pzText))); - } - } -} -#endif /* ENABLE_NLS */ - -#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT -/** I18N function strictly for xgettext. Do not compile. */ -static void bogus_function(void) { - /* TRANSLATORS: - - The following dummy function was crated solely so that xgettext can - extract the correct strings. These strings are actually referenced - by a field name in the gnutls_servOptions structure noted in the - comments below. The literal text is defined in gnutls_serv_opt_strs. - - NOTE: the strings below are segmented with respect to the source string - gnutls_serv_opt_strs. The strings above are handed off for translation - at run time a paragraph at a time. Consequently, they are presented here - for translation a paragraph at a time. - - ALSO: often the description for an option will reference another option - by name. These are set off with apostrophe quotes (I hope). Do not - translate option names. - */ - /* referenced via gnutls_servOptions.pzCopyright */ - puts(_("gnutls-serv @VERSION@\n\ -Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n\ -This is free software. It is licensed for use, modification and\n\ -redistribution under the terms of the GNU General Public License,\n\ -version 3 or later \n")); - - /* referenced via gnutls_servOptions.pzCopyNotice */ - puts(_("gnutls-serv is free software: you can redistribute it and/or modify it\n\ -under the terms of the GNU General Public License as published by the Free\n\ -Software Foundation, either version 3 of the License, or (at your option)\n\ -any later version.\n\n")); - puts(_("gnutls-serv is distributed in the hope that it will be useful, but WITHOUT\n\ -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n\ -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\n\ -more details.\n\n")); - puts(_("You should have received a copy of the GNU General Public License along\n\ -with this program. If not, see .\n")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Enable debugging")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Server's hostname for server name extension")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Send fatal alert on sni-hostname mismatch")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Don't accept session tickets")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Generate Diffie-Hellman parameters")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Suppress some messages")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Do not use a resumption database")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Act as an HTTP server")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Act as an Echo server")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Use DTLS (datagram TLS) over UDP")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Set MTU for datagram TLS")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Offer SRTP profiles")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Do not request a client certificate")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Require a client certificate")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("If a client certificate is sent then verify it.")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Activate heartbeat support")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Use DER format for certificates to read from")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Priorities string")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("DH params file to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Certificate file or PKCS #11 URL to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("CRL file to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("PGP Key file to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("PGP Key ring file to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("PGP Public Key (certificate) file to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("X.509 key file or PKCS #11 URL to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("X.509 Certificate file or PKCS #11 URL to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Alternative X.509 key file or PKCS #11 URL to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Alternative X.509 Certificate file or PKCS #11 URL to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Alternative X.509 key file or PKCS #11 URL to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Alternative X.509 Certificate file or PKCS #11 URL to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("PGP subkey to use (hex or auto)")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("SRP password file to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("SRP password configuration file to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("PSK password file to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("PSK identity hint to use")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("The OCSP response to send to client")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("The port to connect to")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Print a list of the supported algorithms and modes")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("Specify the PKCS #11 provider library")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("display extended usage information and exit")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("extended usage information passed thru pager")); - - /* referenced via gnutls_servOptions.pOptDesc->pzText */ - puts(_("output version information and exit")); - - /* referenced via gnutls_servOptions.pzUsageTitle */ - puts(_("gnutls-serv - GnuTLS server\n\ -Usage: %s [ - [] | --[{=| }] ]...\n")); - - /* referenced via gnutls_servOptions.pzExplain */ - puts(_("\n")); - - /* referenced via gnutls_servOptions.pzDetail */ - puts(_("Server program that listens to incoming TLS connections.\n")); - - /* referenced via gnutls_servOptions.pzFullVersion */ - puts(_("gnutls-serv @VERSION@")); - - /* referenced via gnutls_servOptions.pzFullUsage */ - puts(_("<<>>")); - - /* referenced via gnutls_servOptions.pzShortUsage */ - puts(_("Usage: gnutls-serv [options]\n\ -gnutls-serv --help for usage instructions.\n")); - /* LIBOPTS-MESSAGES: */ -#line 67 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" - puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" - puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" - puts(_("Automated Options Processing Error!\n" - "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" - puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" - puts(_("\tThis is less than the minimum library version: ")); -#line 121 "../version.c" - puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" - puts(_("(AutoOpts bug): %s.\n")); -#line 90 "../reset.c" - puts(_("optionResetOpt() called, but reset-option not configured")); -#line 295 "../usage.c" - puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" - puts(_("optionProcess() was called with invalid data")); -#line 751 "../usage.c" - puts(_("invalid argument type specified")); -#line 598 "../find.c" - puts(_("defaulted to option with optional arg")); -#line 76 "../alias.c" - puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" - puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" - puts(_(" The following options match:\n")); -#line 293 "../find.c" - puts(_("%s: ambiguous option name: %s (matches %d options)\n")); -#line 161 "../check.c" - puts(_("%s: Command line arguments required\n")); -#line 43 "../alias.c" - puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" - puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" - puts(_("interprocess pipe")); -#line 168 "../version.c" - puts(_("error: version option argument '%c' invalid. Use:\n" - "\t'v' - version only\n" - "\t'c' - version and copyright\n" - "\t'n' - version and full copyright notice\n")); -#line 58 "../check.c" - puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 38 "../alias.c" - puts(_("-equivalence")); -#line 469 "../find.c" - puts(_("%s: illegal option -- %c\n")); -#line 110 "../reset.c" - puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 118 "../reset.c" - puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" - puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 750 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 1084 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" - puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" - puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" - puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" - "\t'%s' and '%s'.")); -#line 94 "../check.c" - puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" - puts(_("%s: The '%s' option cannot have an argument.\n")); -#line 151 "../check.c" - puts(_("%s: Command line arguments are not allowed.\n")); -#line 536 "../save.c" - puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" - puts(_("%s error: '%s' does not match any %s keywords.\n")); -#line 93 "../reset.c" - puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 239 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 143 "../restore.c" - puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" - puts(_("'%s' is not a command line option.\n")); -#line 113 "../time.c" - puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); -#line 50 "../time.c" - puts(_("%s error: '%s' is not a recognizable time duration.\n")); -#line 92 "../check.c" - puts(_("%s error: The %s option must appear %d times.\n")); -#line 165 "../numeric.c" - puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" - puts(_("%s error: %s exceeds %s keyword count\n")); -#line 333 "../usage.c" - puts(_("Try '%s %s' for more information.\n")); -#line 45 "../alias.c" - puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" - puts(_("standard output")); -#line 943 "../makeshell.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard output")); -#line 418 "../usage.c" - puts(_("standard output")); -#line 628 "../usage.c" - puts(_("standard output")); -#line 175 "../version.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard error")); -#line 418 "../usage.c" - puts(_("standard error")); -#line 628 "../usage.c" - puts(_("standard error")); -#line 175 "../version.c" - puts(_("standard error")); -#line 208 "../makeshell.c" - puts(_("write")); -#line 943 "../makeshell.c" - puts(_("write")); -#line 276 "../usage.c" - puts(_("write")); -#line 417 "../usage.c" - puts(_("write")); -#line 627 "../usage.c" - puts(_("write")); -#line 174 "../version.c" - puts(_("write")); -#line 60 "../numeric.c" - puts(_("%s error: %s option value %ld is out of range.\n")); -#line 44 "../check.c" - puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 238 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 257 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 535 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); - /* END-LIBOPTS-MESSAGES */ - - /* USAGE-TEXT: */ -#line 876 "../usage.c" - puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1151 "../usage.c" - puts(_("Version, usage and configuration options:")); -#line 927 "../usage.c" - puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 840 "../usage.c" - puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1120 "../usage.c" - puts(_(" --- %-14s %s\n")); -#line 1118 "../usage.c" - puts(_("This option has been disabled")); -#line 867 "../usage.c" - puts(_("\t\t\t\t- enabled by default\n")); -#line 40 "../alias.c" - puts(_("%s error: only ")); -#line 1197 "../usage.c" - puts(_(" - examining environment variables named %s_*\n")); -#line 168 "../file.c" - puts(_("\t\t\t\t- file must not pre-exist\n")); -#line 172 "../file.c" - puts(_("\t\t\t\t- file must pre-exist\n")); -#line 383 "../usage.c" - puts(_("Options are specified by doubled hyphens and their name or by a single\n" - "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" - puts(_("\n" - "= = = = = = = =\n\n" - "This incarnation of genshell will produce\n" - "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" - puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 900 "../usage.c" - puts(_("\t\t\t\t- is a set membership option\n")); -#line 921 "../usage.c" - puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 385 "../usage.c" - puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 907 "../usage.c" - puts(_("\t\t\t\t- may appear multiple times\n")); -#line 894 "../usage.c" - puts(_("\t\t\t\t- may not be preset\n")); -#line 1312 "../usage.c" - puts(_(" Arg Option-Name Description\n")); -#line 1248 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1306 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1307 "../usage.c" - puts(_(" %3s %s")); -#line 1313 "../usage.c" - puts(_(" %3s %s")); -#line 390 "../usage.c" - puts(_("The '-#' option may omit the hash char\n")); -#line 386 "../usage.c" - puts(_("All arguments are named options.\n")); -#line 974 "../usage.c" - puts(_(" - reading file %s")); -#line 412 "../usage.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 100 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 129 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 906 "../usage.c" - puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 947 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 1195 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 685 "../usage.c" - puts(_("prohibits these options:\n")); -#line 680 "../usage.c" - puts(_("prohibits the option '%s'\n")); -#line 81 "../numeric.c" - puts(_("%s%ld to %ld")); -#line 79 "../numeric.c" - puts(_("%sgreater than or equal to %ld")); -#line 75 "../numeric.c" - puts(_("%s%ld exactly")); -#line 68 "../numeric.c" - puts(_("%sit must lie in one of the ranges:\n")); -#line 68 "../numeric.c" - puts(_("%sit must be in the range:\n")); -#line 88 "../numeric.c" - puts(_(", or\n")); -#line 66 "../numeric.c" - puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); -#line 77 "../numeric.c" - puts(_("%sless than or equal to %ld")); -#line 393 "../usage.c" - puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 655 "../usage.c" - puts(_("requires the option '%s'\n")); -#line 658 "../usage.c" - puts(_("requires these options:\n")); -#line 1324 "../usage.c" - puts(_(" Arg Option-Name Req? Description\n")); -#line 1318 "../usage.c" - puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" - puts(_("or you may use a numeric representation. Preceding these with a '!'\n" - "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" - "will set them all. Multiple entries may be passed as an option\n" - "argument list.\n")); -#line 913 "../usage.c" - puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" - puts(_("The valid \"%s\" option keywords are:\n")); -#line 1155 "../usage.c" - puts(_("The next option supports vendor supported extra options:")); -#line 776 "../usage.c" - puts(_("These additional options are:")); - /* END-USAGE-TEXT */ -} -#endif /* uncompilable code */ -#ifdef __cplusplus -} -#endif -/* serv-args.c ends here */ diff --git a/src/serv-args.def b/src/serv-args.def index 0deac0b674..996fbe36ba 100644 --- a/src/serv-args.def +++ b/src/serv-args.def @@ -21,12 +21,47 @@ flag = { doc = ""; }; +flag = { + name = alpn; + arg-type = string; + descrip = "Specify ALPN protocol to be enabled by the server"; + doc = "Specify the (textual) ALPN protocol for the server to use."; + stack-arg; + max = NOLIMIT; +}; + +flag = { + name = alpn-fatal; + descrip = "Send fatal alert on non-matching ALPN name"; + doc = ""; +}; + flag = { name = noticket; descrip = "Don't accept session tickets"; doc = ""; }; +flag = { + name = earlydata; + descrip = "Accept early data"; + doc = ""; +}; + +flag = { + name = maxearlydata; + arg-type = number; + arg-range = "1->4294967295"; + descrip = "The maximum early data size to accept"; + doc = ""; +}; + +flag = { + name = nocookie; + descrip = "Don't require cookie on DTLS sessions"; + doc = ""; +}; + flag = { name = generate; value = g; @@ -86,13 +121,15 @@ flag = { value = a; descrip = "Do not request a client certificate"; doc = ""; + flags-cant = require-client-cert; }; flag = { name = require-client-cert; value = r; descrip = "Require a client certificate"; - doc = ""; + doc = "This option before 3.6.0 used to imply --verify-client-cert. +Since 3.6.0 it will no longer verify the certificate by default."; }; flag = { @@ -156,71 +193,99 @@ flag = { file-exists = yes; descrip = "PGP Key file to use"; doc = ""; + deprecated; }; -flag = { - name = pgpkeyring; - arg-type = file; - file-exists = yes; - descrip = "PGP Key ring file to use"; - doc = ""; -}; - -flag = { - name = pgpcertfile; - arg-type = file; - file-exists = yes; - descrip = "PGP Public Key (certificate) file to use"; - doc = ""; -}; flag = { name = x509keyfile; arg-type = string; descrip = "X.509 key file or PKCS #11 URL to use"; - doc = ""; + doc = "Specify the private key file or URI to use; it must correspond to +the certificate specified in --x509certfile. Multiple keys and certificates +can be specified with this option and in that case each occurrence of keyfile +must be followed by the corresponding x509certfile or vice-versa."; + stack-arg; + max = NOLIMIT; }; flag = { name = x509certfile; arg-type = string; descrip = "X.509 Certificate file or PKCS #11 URL to use"; - doc = ""; + doc = "Specify the certificate file or URI to use; it must correspond to +the key specified in --x509keyfile. Multiple keys and certificates +can be specified with this option and in that case each occurrence of keyfile +must be followed by the corresponding x509certfile or vice-versa."; + stack-arg; + max = NOLIMIT; }; flag = { name = x509dsakeyfile; - arg-type = string; + aliases = x509keyfile; descrip = "Alternative X.509 key file or PKCS #11 URL to use"; - doc = ""; + deprecated; }; flag = { name = x509dsacertfile; - arg-type = string; + aliases = x509certfile; descrip = "Alternative X.509 Certificate file or PKCS #11 URL to use"; - doc = ""; + deprecated; }; flag = { name = x509ecckeyfile; - arg-type = string; + aliases = x509keyfile; descrip = "Alternative X.509 key file or PKCS #11 URL to use"; - doc = ""; + deprecated; }; flag = { name = x509ecccertfile; - arg-type = string; + aliases = x509certfile; descrip = "Alternative X.509 Certificate file or PKCS #11 URL to use"; - doc = ""; + deprecated; }; flag = { - name = pgpsubkey; + name = rawpkkeyfile; arg-type = string; - descrip = "PGP subkey to use (hex or auto)"; - doc = ""; + descrip = "Private key file (PKCS #8 or PKCS #12) or PKCS #11 URL to use"; + doc = "Specify the private key file or URI to use; it must correspond to +the raw public-key specified in --rawpkfile. Multiple key pairs +can be specified with this option and in that case each occurrence of keyfile +must be followed by the corresponding rawpkfile or vice-versa. + +In order to instruct the application to negotiate raw public keys one +must enable the respective certificate types via the priority strings (i.e. CTYPE-CLI-* +and CTYPE-SRV-* flags). + +Check the GnuTLS manual on section ``Priority strings'' for more +information on how to set certificate types."; + stack-arg; + max = NOLIMIT; +}; + +flag = { + name = rawpkfile; + arg-type = string; + descrip = "Raw public-key file to use"; + doc = "Specify the raw public-key file to use; it must correspond to +the private key specified in --rawpkkeyfile. Multiple key pairs +can be specified with this option and in that case each occurrence of keyfile +must be followed by the corresponding rawpkfile or vice-versa. + +In order to instruct the application to negotiate raw public keys one +must enable the respective certificate types via the priority strings (i.e. CTYPE-CLI-* +and CTYPE-SRV-* flags). + +Check the GnuTLS manual on section ``Priority strings'' for more +information on how to set certificate types."; + stack-arg; + max = NOLIMIT; + flags-must = rawpkkeyfile; }; flag = { @@ -256,10 +321,17 @@ flag = { flag = { name = ocsp-response; - arg-type = file; - file-exists = yes; + arg-type = string; descrip = "The OCSP response to send to client"; doc = "If the client requested an OCSP response, return data from this file to the client."; + stack-arg; + max = NOLIMIT; +}; + +flag = { + name = ignore-ocsp-response-errors; + descrip = "Ignore any errors when setting the OCSP response"; + doc = "That option instructs gnutls to not attempt to match the provided OCSP responses with the certificates."; }; flag = { @@ -285,6 +357,36 @@ flag = { doc = "This will override the default options in /etc/gnutls/pkcs11.conf"; }; +flag = { + name = keymatexport; + arg-type = string; + descrip = "Label used for exporting keying material"; + doc = ""; +}; + +flag = { + name = keymatexportsize; + arg-type = number; + descrip = "Size of the exported keying material"; + doc = ""; +}; + +flag = { + name = recordsize; + arg-type = number; + arg-range = "0->16384"; + descrip = "The maximum record size to advertise"; + doc = ""; +}; + +flag = { + name = httpdata; + arg-type = file; + file-exists = yes; + descrip = "The data used as HTTP response"; + doc = ""; +}; + doc-section = { ds-type = 'SEE ALSO'; // or anything else ds-format = 'texi'; // or texi or mdoc format @@ -385,42 +487,17 @@ $ gnutls-serv --http \ Try connecting to the server using your web browser. Note that the server listens to port 5556 by default. -While you are at it, to allow connections using DSA, you can also -create a DSA key and certificate for the server. These credentials +While you are at it, to allow connections using ECDSA, you can also +create a ECDSA key and certificate for the server. These credentials will be used in the final example below. @example -$ certtool --generate-privkey --dsa > x509-server-key-dsa.pem -$ certtool --generate-certificate --load-privkey x509-server-key-dsa.pem \ +$ certtool --generate-privkey --ecdsa > x509-server-key-ecc.pem +$ certtool --generate-certificate --load-privkey x509-server-key-ecc.pem \ --load-ca-certificate x509-ca.pem --load-ca-privkey x509-ca-key.pem \ - --template server.tmpl --outfile x509-server-dsa.pem -@end example - -The next step is to create OpenPGP credentials for the server. - -@example -gpg --gen-key -Enter whatever details you want, use 'test.gnutls.org' as name... -@end example - -Make a note of the OpenPGP key identifier of the newly generated key, -here it was @code{5D1D14D8}. You will need to export the key for -GnuTLS to be able to use it. - -@example -gpg -a --export 5D1D14D8 > openpgp-server.txt -gpg --export 5D1D14D8 > openpgp-server.bin -gpg --export-secret-keys 5D1D14D8 > openpgp-server-key.bin -gpg -a --export-secret-keys 5D1D14D8 > openpgp-server-key.txt + --template server.tmpl --outfile x509-server-ecc.pem @end example -Let's start the server with support for OpenPGP credentials: - -@example -gnutls-serv --http --priority NORMAL:+CTYPE-OPENPGP \ - --pgpkeyfile openpgp-server-key.txt \ - --pgpcertfile openpgp-server.txt -@end example The next step is to add support for SRP authentication. This requires an SRP password file created with @code{srptool}. @@ -440,21 +517,34 @@ gnutls-serv --http --priority NORMAL:+ECDHE-PSK:+PSK \ --pskpasswd psk-passwd.txt @end example +If you want a server with support for raw public-keys we can also add these +credentials. Note however that there is no identity information linked to these +keys as is the case with regular x509 certificates. Authentication must be done +via different means. Also we need to explicitly enable raw public-key certificates +via the priority strings. + +@example +gnutls-serv --http --priority NORMAL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK \ + --rawpkfile srv.rawpk.pem \ + --rawpkkeyfile srv.key.pem +@end example + + Finally, we start the server with all the earlier parameters and you get this command: @example -gnutls-serv --http --priority NORMAL:+PSK:+SRP:+CTYPE-OPENPGP \ +gnutls-serv --http --priority NORMAL:+PSK:+SRP:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK \ --x509cafile x509-ca.pem \ --x509keyfile x509-server-key.pem \ --x509certfile x509-server.pem \ - --x509dsakeyfile x509-server-key-dsa.pem \ - --x509dsacertfile x509-server-dsa.pem \ - --pgpkeyfile openpgp-server-key.txt \ - --pgpcertfile openpgp-server.txt \ + --x509keyfile x509-server-key-ecc.pem \ + --x509certfile x509-server-ecc.pem \ --srppasswdconf srp-tpasswd.conf \ --srppasswd srp-passwd.txt \ - --pskpasswd psk-passwd.txt + --pskpasswd psk-passwd.txt \ + --rawpkfile srv.rawpk.pem \ + --rawpkkeyfile srv.key.pem @end example _EOF_; }; diff --git a/src/serv-args.h.bak b/src/serv-args.h.bak deleted file mode 100644 index d2ca546b91..0000000000 --- a/src/serv-args.h.bak +++ /dev/null @@ -1,293 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (serv-args.h) - * - * It has been AutoGen-ed - * From the definitions serv-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This header file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the gnutls-serv author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The gnutls-serv program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * gnutls-serv is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * gnutls-serv is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -/** - * This file contains the programmatic interface to the Automated - * Options generated for the gnutls-serv program. - * These macros are documented in the AutoGen info file in the - * "AutoOpts" chapter. Please refer to that doc for usage help. - */ -#ifndef AUTOOPTS_SERV_ARGS_H_GUARD -#define AUTOOPTS_SERV_ARGS_H_GUARD 1 -#include "config.h" -#include - -/** - * Ensure that the library used for compiling this generated header is at - * least as new as the version current when the header template was released - * (not counting patch version increments). Also ensure that the oldest - * tolerable version is at least as old as what was current when the header - * template was released. - */ -#define AO_TEMPLATE_VERSION 167937 -#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ - || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) -# error option template version mismatches autoopts/options.h header - Choke Me. -#endif - -/** - * Enumeration of each option type for gnutls-serv - */ -typedef enum { - INDEX_OPT_DEBUG = 0, - INDEX_OPT_SNI_HOSTNAME = 1, - INDEX_OPT_SNI_HOSTNAME_FATAL = 2, - INDEX_OPT_NOTICKET = 3, - INDEX_OPT_GENERATE = 4, - INDEX_OPT_QUIET = 5, - INDEX_OPT_NODB = 6, - INDEX_OPT_HTTP = 7, - INDEX_OPT_ECHO = 8, - INDEX_OPT_UDP = 9, - INDEX_OPT_MTU = 10, - INDEX_OPT_SRTP_PROFILES = 11, - INDEX_OPT_DISABLE_CLIENT_CERT = 12, - INDEX_OPT_REQUIRE_CLIENT_CERT = 13, - INDEX_OPT_VERIFY_CLIENT_CERT = 14, - INDEX_OPT_HEARTBEAT = 15, - INDEX_OPT_X509FMTDER = 16, - INDEX_OPT_PRIORITY = 17, - INDEX_OPT_DHPARAMS = 18, - INDEX_OPT_X509CAFILE = 19, - INDEX_OPT_X509CRLFILE = 20, - INDEX_OPT_PGPKEYFILE = 21, - INDEX_OPT_PGPKEYRING = 22, - INDEX_OPT_PGPCERTFILE = 23, - INDEX_OPT_X509KEYFILE = 24, - INDEX_OPT_X509CERTFILE = 25, - INDEX_OPT_X509DSAKEYFILE = 26, - INDEX_OPT_X509DSACERTFILE = 27, - INDEX_OPT_X509ECCKEYFILE = 28, - INDEX_OPT_X509ECCCERTFILE = 29, - INDEX_OPT_PGPSUBKEY = 30, - INDEX_OPT_SRPPASSWD = 31, - INDEX_OPT_SRPPASSWDCONF = 32, - INDEX_OPT_PSKPASSWD = 33, - INDEX_OPT_PSKHINT = 34, - INDEX_OPT_OCSP_RESPONSE = 35, - INDEX_OPT_PORT = 36, - INDEX_OPT_LIST = 37, - INDEX_OPT_PROVIDER = 38, - INDEX_OPT_VERSION = 39, - INDEX_OPT_HELP = 40, - INDEX_OPT_MORE_HELP = 41 -} teOptIndex; -/** count of all options for gnutls-serv */ -#define OPTION_CT 42 -/** gnutls-serv version */ -#define GNUTLS_SERV_VERSION "@VERSION@" -/** Full gnutls-serv version text */ -#define GNUTLS_SERV_FULL_VERSION "gnutls-serv @VERSION@" - -/** - * Interface defines for all options. Replace "n" with the UPPER_CASED - * option name (as in the teOptIndex enumeration above). - * e.g. HAVE_OPT(DEBUG) - */ -#define DESC(n) (gnutls_servOptions.pOptDesc[INDEX_OPT_## n]) -/** 'true' if an option has been specified in any way */ -#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) -/** The string argument to an option. The argument type must be \"string\". */ -#define OPT_ARG(n) (DESC(n).optArg.argString) -/** Mask the option state revealing how an option was specified. - * It will be one and only one of \a OPTST_SET, \a OPTST_PRESET, - * \a OPTST_DEFINED, \a OPTST_RESET or zero. - */ -#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) -/** Count of option's occurrances *on the command line*. */ -#define COUNT_OPT(n) (DESC(n).optOccCt) -/** mask of \a OPTST_SET and \a OPTST_DEFINED. */ -#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) -/** 'true' if \a HAVE_OPT would yield 'false'. */ -#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) -/** 'true' if OPTST_DISABLED bit not set. */ -#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) -/** number of stacked option arguments. - * Valid only for stacked option arguments. */ -#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) -/** stacked argument vector. - * Valid only for stacked option arguments. */ -#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) -/** Reset an option. */ -#define CLEAR_OPT(n) STMTS( \ - DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ - if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \ - DESC(n).fOptState |= OPTST_DISABLED; \ - DESC(n).optCookie = NULL ) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Enumeration of gnutls-serv exit codes - */ -typedef enum { - GNUTLS_SERV_EXIT_SUCCESS = 0, - GNUTLS_SERV_EXIT_FAILURE = 1, - GNUTLS_SERV_EXIT_USAGE_ERROR = 64, - GNUTLS_SERV_EXIT_LIBOPTS_FAILURE = 70 -} gnutls_serv_exit_code_t; -/** - * Interface defines for specific options. - * @{ - */ -#define VALUE_OPT_DEBUG 'd' - -#define OPT_VALUE_DEBUG (DESC(DEBUG).optArg.argInt) -#define VALUE_OPT_SNI_HOSTNAME 0x1001 -#define VALUE_OPT_SNI_HOSTNAME_FATAL 0x1002 -#define VALUE_OPT_NOTICKET 0x1003 -#define VALUE_OPT_GENERATE 'g' -#define VALUE_OPT_QUIET 'q' -#define VALUE_OPT_NODB 0x1004 -#define VALUE_OPT_HTTP 0x1005 -#define VALUE_OPT_ECHO 0x1006 -#define VALUE_OPT_UDP 'u' -#define VALUE_OPT_MTU 0x1007 - -#define OPT_VALUE_MTU (DESC(MTU).optArg.argInt) -#define VALUE_OPT_SRTP_PROFILES 0x1008 -#define VALUE_OPT_DISABLE_CLIENT_CERT 'a' -#define VALUE_OPT_REQUIRE_CLIENT_CERT 'r' -#define VALUE_OPT_VERIFY_CLIENT_CERT 0x1009 -#define VALUE_OPT_HEARTBEAT 'b' -#define VALUE_OPT_X509FMTDER 0x100A -#define VALUE_OPT_PRIORITY 0x100B -#define VALUE_OPT_DHPARAMS 0x100C -#define VALUE_OPT_X509CAFILE 0x100D -#define VALUE_OPT_X509CRLFILE 0x100E -#define VALUE_OPT_PGPKEYFILE 0x100F -#define VALUE_OPT_PGPKEYRING 0x1010 -#define VALUE_OPT_PGPCERTFILE 0x1011 -#define VALUE_OPT_X509KEYFILE 0x1012 -#define VALUE_OPT_X509CERTFILE 0x1013 -#define VALUE_OPT_X509DSAKEYFILE 0x1014 -#define VALUE_OPT_X509DSACERTFILE 0x1015 -#define VALUE_OPT_X509ECCKEYFILE 0x1016 -#define VALUE_OPT_X509ECCCERTFILE 0x1017 -#define VALUE_OPT_PGPSUBKEY 0x1018 -#define VALUE_OPT_SRPPASSWD 0x1019 -#define VALUE_OPT_SRPPASSWDCONF 0x101A -#define VALUE_OPT_PSKPASSWD 0x101B -#define VALUE_OPT_PSKHINT 0x101C -#define VALUE_OPT_OCSP_RESPONSE 0x101D -#define VALUE_OPT_PORT 'p' - -#define OPT_VALUE_PORT (DESC(PORT).optArg.argInt) -#define VALUE_OPT_LIST 'l' -#define VALUE_OPT_PROVIDER 0x101E -/** option flag (value) for help-value option */ -#define VALUE_OPT_HELP 'h' -/** option flag (value) for more-help-value option */ -#define VALUE_OPT_MORE_HELP '!' -/** option flag (value) for version-value option */ -#define VALUE_OPT_VERSION 'v' -/* - * Interface defines not associated with particular options - */ -#define ERRSKIP_OPTERR STMTS(gnutls_servOptions.fOptSet &= ~OPTPROC_ERRSTOP) -#define ERRSTOP_OPTERR STMTS(gnutls_servOptions.fOptSet |= OPTPROC_ERRSTOP) -#define RESTART_OPT(n) STMTS( \ - gnutls_servOptions.curOptIdx = (n); \ - gnutls_servOptions.pzCurOpt = NULL ) -#define START_OPT RESTART_OPT(1) -#define USAGE(c) (*gnutls_servOptions.pUsageProc)(&gnutls_servOptions, c) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * global exported definitions - */ -#include - - -/* * * * * * - * - * Declare the gnutls-serv option descriptor. - */ -extern tOptions gnutls_servOptions; - -#if defined(ENABLE_NLS) -# ifndef _ -# include -# ifndef HAVE_GETTEXT - extern char * gettext(char const *); -# else -# include -# endif - -# ifndef ATTRIBUTE_FORMAT_ARG -# define ATTRIBUTE_FORMAT_ARG(_a) -# endif - -static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1); -static inline char* aoGetsText(char const* pz) { - if (pz == NULL) return NULL; - return (char*)gettext(pz); -} -# define _(s) aoGetsText(s) -# endif /* _() */ - -# define OPT_NO_XLAT_CFG_NAMES STMTS(gnutls_servOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT_CFG;) -# define OPT_NO_XLAT_OPT_NAMES STMTS(gnutls_servOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;) - -# define OPT_XLAT_CFG_NAMES STMTS(gnutls_servOptions.fOptSet &= \ - ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);) -# define OPT_XLAT_OPT_NAMES STMTS(gnutls_servOptions.fOptSet &= \ - ~OPTPROC_NXLAT_OPT;) - -#else /* ENABLE_NLS */ -# define OPT_NO_XLAT_CFG_NAMES -# define OPT_NO_XLAT_OPT_NAMES - -# define OPT_XLAT_CFG_NAMES -# define OPT_XLAT_OPT_NAMES - -# ifndef _ -# define _(_s) _s -# endif -#endif /* ENABLE_NLS */ - -#ifdef __cplusplus -} -#endif -#endif /* AUTOOPTS_SERV_ARGS_H_GUARD */ - -/* serv-args.h ends here */ diff --git a/src/serv.c b/src/serv.c index 4bf5fd4c9c..414cd0546b 100644 --- a/src/serv.c +++ b/src/serv.c @@ -1,6 +1,7 @@ /* * Copyright (C) 2004-2012 Free Software Foundation, Inc. * Copyright (C) 2001,2002 Paul Sheer + * Copyright (C) 2016-2018 Red Hat, Inc. * Portions Copyright (C) 2002,2003 Nikos Mavrogiannopoulos * * This file is part of GnuTLS. @@ -16,7 +17,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ /* This server is heavily modified for GnuTLS by Nikos Mavrogiannopoulos @@ -34,7 +35,6 @@ #include #include #include -#include #include #include #include @@ -61,30 +61,39 @@ static int debug = 0; unsigned int verbose = 1; static int nodb; static int noticket; +static int earlydata; int require_cert; int disable_client_cert; const char *psk_passwd = NULL; const char *srp_passwd = NULL; const char *srp_passwd_conf = NULL; -const char *pgp_keyring = NULL; -const char *pgp_keyfile = NULL; -const char *pgp_certfile = NULL; -const char *x509_keyfile = NULL; -const char *x509_certfile = NULL; -const char *x509_dsakeyfile = NULL; -const char *x509_dsacertfile = NULL; -const char *x509_ecckeyfile = NULL; -const char *x509_ecccertfile = NULL; +const char **x509_keyfile = NULL; +const char **x509_certfile = NULL; +unsigned x509_certfile_size = 0; +unsigned x509_keyfile_size = 0; const char *x509_cafile = NULL; const char *dh_params_file = NULL; const char *x509_crlfile = NULL; const char *priorities = NULL; -const char *status_response_ocsp = NULL; +const char **rawpk_keyfile = NULL; +const char **rawpk_file = NULL; +unsigned rawpk_keyfile_size = 0; +unsigned rawpk_file_size = 0; + +const char **ocsp_responses = NULL; +unsigned ocsp_responses_size = 0; + const char *sni_hostname = NULL; int sni_hostname_fatal = 0; +const char **alpn_protos = NULL; +unsigned alpn_protos_size = 0; + gnutls_datum_t session_ticket_key; +gnutls_anti_replay_t anti_replay; +int record_max_size; +const char *http_data_file = NULL; static void tcp_server(const char *name, int port); /* end of globals */ @@ -96,7 +105,7 @@ static void tcp_server(const char *name, int port); #define SMALL_READ_TEST (2147483647) -#define GERR(ret) fprintf(stdout, "Error: %s\n", safe_strerror(ret)) +#define GERR(ret) fprintf(stderr, "Error: %s\n", safe_strerror(ret)) #define HTTP_END "\n\n" @@ -112,10 +121,12 @@ static void tcp_server(const char *name, int port); /* These are global */ gnutls_srp_server_credentials_t srp_cred = NULL; gnutls_psk_server_credentials_t psk_cred = NULL; +#ifdef ENABLE_ANON gnutls_anon_server_credentials_t dh_cred = NULL; +#endif gnutls_certificate_credentials_t cert_cred = NULL; -const int ssl_session_cache = 128; +const int ssl_session_cache = 2048; static void wrap_db_init(void); static void wrap_db_deinit(void); @@ -123,6 +134,8 @@ static int wrap_db_store(void *dbf, gnutls_datum_t key, gnutls_datum_t data); static gnutls_datum_t wrap_db_fetch(void *dbf, gnutls_datum_t key); static int wrap_db_delete(void *dbf, gnutls_datum_t key); +static int anti_replay_db_add(void *dbf, time_t exp, const gnutls_datum_t *key, + const gnutls_datum_t *data); static void cmd_parser(int argc, char **argv); @@ -137,8 +150,9 @@ LIST_TYPE_DECLARE(listener_item, char *http_request; char *http_response; int listen_socket; int fd; gnutls_session_t tls_session; int handshake_ok; - int no_close; + int close_ok; time_t start; + int earlydata_eof; ); static const char *safe_strerror(int value) @@ -155,7 +169,7 @@ static void listener_free(listener_item * j) free(j->http_request); free(j->http_response); if (j->fd >= 0) { - if (j->no_close == 0) + if (j->close_ok) gnutls_bye(j->tls_session, GNUTLS_SHUT_WR); shutdown(j->fd, 2); close(j->fd); @@ -272,7 +286,7 @@ int ret; if (!require_cert && gnutls_certificate_get_peers(session, &size) == NULL) return 0; - if (require_cert || ENABLED_OPT(VERIFY_CLIENT_CERT)) { + if (ENABLED_OPT(VERIFY_CLIENT_CERT)) { if (cert_verify(session, NULL, NULL) == 0) { do { ret = gnutls_alert_send(session, GNUTLS_AL_FATAL, GNUTLS_A_ACCESS_DENIED); @@ -365,19 +379,26 @@ post_client_hello(gnutls_session_t session) return ret; } +#define MAX_ALPN_PROTOCOLS 16 gnutls_session_t initialize_session(int dtls) { gnutls_session_t session; int ret; + unsigned i; const char *err; - - if (priorities == NULL) - priorities = "NORMAL"; +#ifdef ENABLE_ALPN + gnutls_datum_t alpn[MAX_ALPN_PROTOCOLS]; +#endif + unsigned alpn_size; + unsigned flags = GNUTLS_SERVER | GNUTLS_POST_HANDSHAKE_AUTH | GNUTLS_ENABLE_RAWPK; if (dtls) - gnutls_init(&session, GNUTLS_SERVER | GNUTLS_DATAGRAM); - else - gnutls_init(&session, GNUTLS_SERVER); + flags |= GNUTLS_DATAGRAM; + + if (earlydata) + flags |= GNUTLS_ENABLE_EARLY_DATA; + + gnutls_init(&session, flags); /* allow the use of private ciphersuites. */ @@ -393,22 +414,61 @@ gnutls_session_t initialize_session(int dtls) gnutls_db_set_ptr(session, NULL); } -#ifdef ENABLE_SESSION_TICKETS if (noticket == 0) gnutls_session_ticket_enable_server(session, &session_ticket_key); -#endif + + if (earlydata) { + gnutls_anti_replay_enable(session, anti_replay); + if (HAVE_OPT(MAXEARLYDATA)) { + ret = gnutls_record_set_max_early_data_size(session, OPT_VALUE_MAXEARLYDATA); + if (ret < 0) { + fprintf(stderr, "Could not set max early data size: %s\n", gnutls_strerror(ret)); + exit(1); + } + } + } if (sni_hostname != NULL) gnutls_handshake_set_post_client_hello_function(session, &post_client_hello); - if (gnutls_priority_set_direct(session, priorities, &err) < 0) { - fprintf(stderr, "Syntax error at: %s\n", err); + if (priorities == NULL) { + ret = gnutls_set_default_priority(session); + if (ret < 0) { + fprintf(stderr, "Could not set default policy: %s\n", gnutls_strerror(ret)); + exit(1); + } + } else { + ret = gnutls_priority_set_direct(session, priorities, &err); + if (ret < 0) { + fprintf(stderr, "Syntax error at: %s\n", err); + exit(1); + } + } + +#ifndef ENABLE_ALPN + if (alpn_protos_size != 0) { + fprintf(stderr, "ALPN is not supported\n"); exit(1); } +#else + alpn_size = MIN(MAX_ALPN_PROTOCOLS,alpn_protos_size); + for (i=0;i 0) { + if (gnutls_record_set_max_recv_size(session, record_max_size) < + 0) { + fprintf(stderr, + "Cannot set the maximum record receive size to %d.\n", + record_max_size); + exit(1); + } + } + if (HAVE_OPT(HEARTBEAT)) gnutls_heartbeat_enable(session, GNUTLS_HB_PEER_ALLOWED_TO_SEND); @@ -467,7 +538,7 @@ gnutls_session_t initialize_session(int dtls) static const char DEFAULT_DATA[] = "This is the default message reported by the GnuTLS implementation. " "For more information please visit " - "http://www.gnutls.org/."; + "https://www.gnutls.org/."; /* Creates html with the current session information. */ @@ -479,10 +550,11 @@ static char *peer_print_info(gnutls_session_t session, int *ret_length, const char *tmp; unsigned char sesid[32]; size_t i, sesid_size; - char *http_buffer; + char *http_buffer, *desc; gnutls_kx_algorithm_t kx_alg; size_t len = 20 * 1024 + strlen(header); char *crtinfo = NULL, *crtinfo_old = NULL; + gnutls_protocol_t version; size_t ncrtinfo = 0; if (verbose == 0) { @@ -501,7 +573,7 @@ static char *peer_print_info(gnutls_session_t session, int *ret_length, return http_buffer; } - if (gnutls_certificate_type_get(session) == GNUTLS_CRT_X509) { + if (gnutls_certificate_type_get2(session, GNUTLS_CTYPE_CLIENT) == GNUTLS_CRT_X509) { const gnutls_datum_t *cert_list; unsigned int cert_list_size = 0; @@ -551,6 +623,8 @@ static char *peer_print_info(gnutls_session_t session, int *ret_length, strcpy(http_buffer, HTTP_BEGIN); + version = gnutls_protocol_get_version(session); + /* print session_id */ sesid_size = sizeof(sesid); gnutls_session_get_id(session, sesid, &sesid_size); @@ -559,7 +633,7 @@ static char *peer_print_info(gnutls_session_t session, int *ret_length, snprintf(tmp_buffer, tmp_buffer_size, "%.2X", sesid[i]); snprintf(tmp_buffer, tmp_buffer_size, "

\n"); snprintf(tmp_buffer, tmp_buffer_size, - "
If your browser supports session resuming, then you should see the " + "
If your browser supports session resumption, then you should see the " "same session ID, when you press the reload button.
\n"); /* Here unlike print_info() we use the kx algorithm to distinguish @@ -590,42 +664,38 @@ static char *peer_print_info(gnutls_session_t session, int *ret_length, #endif #ifdef ENABLE_PSK - if (kx_alg == GNUTLS_KX_PSK) { + if (kx_alg == GNUTLS_KX_PSK && gnutls_psk_server_get_username(session)) { snprintf(tmp_buffer, tmp_buffer_size, "

Connected as user '%s'.

\n", gnutls_psk_server_get_username(session)); } #endif -#ifdef ENABLE_ANON - if (kx_alg == GNUTLS_KX_ANON_DH) { - snprintf(tmp_buffer, tmp_buffer_size, - "

Connect using anonymous DH (prime of %d bits)

\n", - gnutls_dh_get_prime_bits(session)); - } -#endif - - if (kx_alg == GNUTLS_KX_DHE_RSA || kx_alg == GNUTLS_KX_DHE_DSS) { - snprintf(tmp_buffer, tmp_buffer_size, - "Ephemeral DH using prime of %d bits.
\n", - gnutls_dh_get_prime_bits(session)); - } /* print session information */ strcat(http_buffer, "

\n"); tmp = - gnutls_protocol_get_name(gnutls_protocol_get_version(session)); + gnutls_protocol_get_name(version); if (tmp == NULL) tmp = str_unknown; snprintf(tmp_buffer, tmp_buffer_size, "\n", tmp); - if (gnutls_auth_get_type(session) == GNUTLS_CRD_CERTIFICATE) { + desc = gnutls_session_get_desc(session); + if (desc) { + snprintf(tmp_buffer, tmp_buffer_size, + "\n", + desc); + gnutls_free(desc); + } + + if (gnutls_auth_get_type(session) == GNUTLS_CRD_CERTIFICATE && + gnutls_certificate_type_get2(session, GNUTLS_CTYPE_CLIENT) != GNUTLS_CRT_X509) { tmp = gnutls_certificate_type_get_name - (gnutls_certificate_type_get(session)); + (gnutls_certificate_type_get2(session, GNUTLS_CTYPE_CLIENT)); if (tmp == NULL) tmp = str_unknown; snprintf(tmp_buffer, tmp_buffer_size, @@ -633,17 +703,44 @@ static char *peer_print_info(gnutls_session_t session, int *ret_length, tmp); } - tmp = gnutls_kx_get_name(kx_alg); - if (tmp == NULL) - tmp = str_unknown; - snprintf(tmp_buffer, tmp_buffer_size, - "\n", tmp); + if (version < GNUTLS_TLS1_3) { + tmp = gnutls_kx_get_name(kx_alg); + if (tmp == NULL) + tmp = str_unknown; + snprintf(tmp_buffer, tmp_buffer_size, + "\n", tmp); - tmp = gnutls_compression_get_name(gnutls_compression_get(session)); - if (tmp == NULL) - tmp = str_unknown; - snprintf(tmp_buffer, tmp_buffer_size, - "\n", tmp); +#ifdef ENABLE_ANON + if (kx_alg == GNUTLS_KX_ANON_DH) { + snprintf(tmp_buffer, tmp_buffer_size, + "

Connect using anonymous DH (prime of %d bits)

\n", + gnutls_dh_get_prime_bits(session)); + } +#endif + +#if defined(ENABLE_DHE) || defined(ENABLE_ANON) + if (kx_alg == GNUTLS_KX_DHE_RSA || kx_alg == GNUTLS_KX_DHE_DSS) { + snprintf(tmp_buffer, tmp_buffer_size, + "Ephemeral DH using prime of %d bits.
\n", + gnutls_dh_get_prime_bits(session)); + } +#endif + + tmp = gnutls_compression_get_name(gnutls_compression_get(session)); + if (tmp == NULL) + tmp = str_unknown; + snprintf(tmp_buffer, tmp_buffer_size, + "\n", tmp); + + tmp = gnutls_cipher_suite_get_name(kx_alg, + gnutls_cipher_get(session), + gnutls_mac_get(session)); + if (tmp == NULL) + tmp = str_unknown; + snprintf(tmp_buffer, tmp_buffer_size, + "\n", + tmp); + } tmp = gnutls_cipher_get_name(gnutls_cipher_get(session)); if (tmp == NULL) @@ -657,14 +754,8 @@ static char *peer_print_info(gnutls_session_t session, int *ret_length, snprintf(tmp_buffer, tmp_buffer_size, "\n", tmp); - tmp = gnutls_cipher_suite_get_name(kx_alg, - gnutls_cipher_get(session), - gnutls_mac_get(session)); - if (tmp == NULL) - tmp = str_unknown; snprintf(tmp_buffer, tmp_buffer_size, - "

Protocol version:%s
Description:%s
Key Exchange:%s
Key Exchange:%s
Compression%s
Compression%s
Ciphersuite%s
MAC%s
Ciphersuite%s
\n", - tmp); + "

\n"); if (crtinfo) { snprintf(tmp_buffer, tmp_buffer_size, @@ -681,6 +772,45 @@ static char *peer_print_info(gnutls_session_t session, int *ret_length, return http_buffer; } +static char *peer_print_data(gnutls_session_t session, int *ret_length) +{ + gnutls_datum_t data; + char *http_buffer; + size_t len; + int ret; + + ret = gnutls_load_file(http_data_file, &data); + if (ret < 0) { + ret = asprintf(&http_buffer, + "HTTP/1.0 404 Not Found\r\n" + "Content-type: text/html\r\n" + "\r\n" + "404 Not Found\n" + "

Couldn't read %s

\n\n", + http_data_file); + if (ret < 0) + return NULL; + + *ret_length = strlen(http_buffer); + return http_buffer; + } + + ret = asprintf(&http_buffer, + "HTTP/1.0 200 OK\r\n" + "Content-Type: application/octet-stream\r\n" + "Content-Length: %u\r\n" + "\r\n", + data.size); + if (ret < 0) + return NULL; + len = ret; + http_buffer = realloc(http_buffer, len + data.size); + memcpy(&http_buffer[len], data.data, data.size); + gnutls_free(data.data); + *ret_length = len + data.size; + return http_buffer; +} + const char *human_addr(const struct sockaddr *sa, socklen_t salen, char *buf, size_t buflen) { @@ -899,7 +1029,7 @@ static void strip(char *data) } } -static void +static unsigned get_response(gnutls_session_t session, char *request, char **response, int *response_length) { @@ -920,29 +1050,53 @@ get_response(gnutls_session_t session, char *request, goto unimplemented; *p = '\0'; } -/* *response = peer_print_info(session, request+4, h, response_length); */ + if (http != 0) { - *response = peer_print_info(session, response_length, h); + if (http_data_file == NULL) + *response = peer_print_info(session, response_length, h); + else + *response = peer_print_data(session, response_length); } else { + int ret; strip(request); - fprintf(stderr, "received: %s\n", request); - if (check_command(session, request)) { + fprintf(stderr, "received cmd: %s\n", request); + + ret = check_command(session, request, disable_client_cert); + if (ret > 0) { + *response = strdup("Successfully executed command\n"); + if (*response == NULL) { + fprintf(stderr, "Memory error\n"); + return 0; + } + *response_length = strlen(*response); + return 1; + } else if (ret == 0) { + *response = strdup(request); + if (*response == NULL) { + fprintf(stderr, "Memory error\n"); + return 0; + } + *response_length = strlen(*response); + } else { *response = NULL; - *response_length = 0; - return; + do { + ret = gnutls_alert_send_appropriate(session, ret); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + return 0; } - *response = strdup(request); - *response_length = ((*response) ? strlen(*response) : 0); } - return; + return 1; unimplemented: *response = strdup(HTTP_UNIMPLEMENTED); + if (*response == NULL) + return 0; *response_length = ((*response) ? strlen(*response) : 0); + return 1; } -static void terminate(int sig) __attribute__ ((noreturn)); +static void terminate(int sig) __attribute__ ((__noreturn__)); static void terminate(int sig) { @@ -982,6 +1136,7 @@ int main(int argc, char **argv) char name[256]; int cert_set = 0; unsigned use_static_dh_params = 0; + unsigned i; cmd_parser(argc, argv); @@ -1053,6 +1208,7 @@ int main(int argc, char **argv) exit(1); } + /* X509 credentials */ if (x509_cafile != NULL) { if ((ret = gnutls_certificate_set_x509_trust_file (cert_cred, x509_cafile, x509ctype)) < 0) { @@ -1075,79 +1231,39 @@ int main(int argc, char **argv) printf("Processed %d CRL(s).\n", ret); } } -#ifdef ENABLE_OPENPGP - if (pgp_keyring != NULL) { - ret = - gnutls_certificate_set_openpgp_keyring_file(cert_cred, - pgp_keyring, - GNUTLS_OPENPGP_FMT_BASE64); - if (ret < 0) { - fprintf(stderr, - "Error setting the OpenPGP keyring file\n"); - GERR(ret); - } - } - - if (pgp_certfile != NULL && pgp_keyfile != NULL) { - if (HAVE_OPT(PGPSUBKEY)) - ret = gnutls_certificate_set_openpgp_key_file2 - (cert_cred, pgp_certfile, pgp_keyfile, - OPT_ARG(PGPSUBKEY), - GNUTLS_OPENPGP_FMT_BASE64); - else - ret = gnutls_certificate_set_openpgp_key_file - (cert_cred, pgp_certfile, pgp_keyfile, - GNUTLS_OPENPGP_FMT_BASE64); - - if (ret < 0) { - fprintf(stderr, - "Error[%d] while reading the OpenPGP key pair ('%s', '%s')\n", - ret, pgp_certfile, pgp_keyfile); - GERR(ret); - } else - cert_set = 1; - } -#endif - - if (x509_certfile != NULL && x509_keyfile != NULL) { - ret = gnutls_certificate_set_x509_key_file - (cert_cred, x509_certfile, x509_keyfile, x509ctype); - if (ret < 0) { - fprintf(stderr, - "Error reading '%s' or '%s'\n", - x509_certfile, x509_keyfile); - GERR(ret); - exit(1); - } else - cert_set = 1; - } - if (x509_dsacertfile != NULL && x509_dsakeyfile != NULL) { - ret = gnutls_certificate_set_x509_key_file - (cert_cred, x509_dsacertfile, x509_dsakeyfile, - x509ctype); - if (ret < 0) { - fprintf(stderr, - "Error reading '%s' or '%s'\n", - x509_dsacertfile, x509_dsakeyfile); - GERR(ret); - exit(1); - } else - cert_set = 1; + if (x509_certfile_size > 0 && x509_keyfile_size > 0) { + for (i = 0; i < x509_certfile_size; i++) { + ret = gnutls_certificate_set_x509_key_file + (cert_cred, x509_certfile[i], x509_keyfile[i], x509ctype); + if (ret < 0) { + fprintf(stderr, + "Error reading '%s' or '%s'\n", + x509_certfile[i], x509_keyfile[i]); + GERR(ret); + exit(1); + } else + cert_set = 1; + } } - - if (x509_ecccertfile != NULL && x509_ecckeyfile != NULL) { - ret = gnutls_certificate_set_x509_key_file - (cert_cred, x509_ecccertfile, x509_ecckeyfile, - x509ctype); - if (ret < 0) { - fprintf(stderr, - "Error reading '%s' or '%s'\n", - x509_ecccertfile, x509_ecckeyfile); - GERR(ret); - exit(1); - } else - cert_set = 1; + + /* Raw public-key credentials */ + if (rawpk_file_size > 0 && rawpk_keyfile_size > 0) { + for (i = 0; i < rawpk_keyfile_size; i++) { + ret = gnutls_certificate_set_rawpk_key_file(cert_cred, rawpk_file[i], + rawpk_keyfile[i], + x509ctype, + NULL, 0, NULL, 0, + 0, 0); + if (ret < 0) { + fprintf(stderr, "Error reading '%s' or '%s'\n", + rawpk_file[i], rawpk_keyfile[i]); + GERR(ret); + exit(1); + } else { + cert_set = 1; + } + } } if (cert_set == 0) { @@ -1155,23 +1271,40 @@ int main(int argc, char **argv) "Warning: no private key and certificate pairs were set.\n"); } +#ifndef ENABLE_OCSP + if (HAVE_OPT(IGNORE_OCSP_RESPONSE_ERRORS) || ocsp_responses_size != 0) { + fprintf(stderr, "OCSP is not supported!\n"); + exit(1); + } +#else /* OCSP status-request TLS extension */ - if (status_response_ocsp) { - if (gnutls_certificate_set_ocsp_status_request_file - (cert_cred, status_response_ocsp, 0) < 0) { + if (HAVE_OPT(IGNORE_OCSP_RESPONSE_ERRORS)) + gnutls_certificate_set_flags(cert_cred, GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK); + + for (i = 0; i < ocsp_responses_size; i++ ) { + ret = gnutls_certificate_set_ocsp_status_request_file + (cert_cred, ocsp_responses[i], 0); + if (ret < 0) { fprintf(stderr, - "Cannot set OCSP status request file: %s\n", + "Cannot set OCSP status request file: %s: %s\n", + ocsp_responses[i], gnutls_strerror(ret)); exit(1); } } +#endif if (use_static_dh_params) { +#if defined(ENABLE_DHE) || defined(ENABLE_ANON) ret = gnutls_certificate_set_known_dh_params(cert_cred, GNUTLS_SEC_PARAM_MEDIUM); if (ret < 0) { fprintf(stderr, "Error while setting DH parameters: %s\n", gnutls_strerror(ret)); exit(1); } +#else + fprintf(stderr, "Setting DH parameters is not supported\n"); + exit(1); +#endif } else { gnutls_certificate_set_params_function(cert_cred, get_params); } @@ -1252,10 +1385,18 @@ int main(int argc, char **argv) } #endif -#ifdef ENABLE_SESSION_TICKETS if (noticket == 0) gnutls_session_ticket_key_generate(&session_ticket_key); -#endif + + if (earlydata) { + ret = gnutls_anti_replay_init(&anti_replay); + if (ret < 0) { + fprintf(stderr, "Error while initializing anti-replay: %s\n", gnutls_strerror(ret)); + exit(1); + } + gnutls_anti_replay_set_add_function(anti_replay, anti_replay_db_add); + gnutls_anti_replay_set_ptr(anti_replay, NULL); + } if (HAVE_OPT(MTU)) mtu = OPT_VALUE_MTU; @@ -1286,13 +1427,12 @@ static void retry_handshake(listener_item *j) } else if (r < 0) { j->http_state = HTTP_STATE_CLOSING; check_alert(j->tls_session, r); - fprintf(stderr, "Error in handshake\n"); - GERR(r); + fprintf(stderr, "Error in handshake: %s\n", gnutls_strerror(r)); do { ret = gnutls_alert_send_appropriate(j->tls_session, r); } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); - j->no_close = 1; + j->close_ok = 0; } else if (r == 0) { if (gnutls_session_is_resumed(j->tls_session) != 0 && verbose != 0) printf("*** This is a resumed session\n"); @@ -1308,16 +1448,25 @@ static void retry_handshake(listener_item *j) #endif print_info(j->tls_session, verbose, verbose); + + if (HAVE_OPT(KEYMATEXPORT)) + print_key_material(j->tls_session, + OPT_ARG(KEYMATEXPORT), + HAVE_OPT(KEYMATEXPORTSIZE) ? + OPT_VALUE_KEYMATEXPORTSIZE : + 20); } + j->close_ok = 1; j->handshake_ok = 1; } } static void try_rehandshake(listener_item *j) { -int r, ret; + int r, ret; fprintf(stderr, "*** Received hello message\n"); + do { r = gnutls_handshake(j->tls_session); } while (r == GNUTLS_E_INTERRUPTED || r == GNUTLS_E_AGAIN); @@ -1326,9 +1475,10 @@ int r, ret; do { ret = gnutls_alert_send_appropriate(j->tls_session, r); } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); - GERR(r); + fprintf(stderr, "Error in rehandshake: %s\n", gnutls_strerror(r)); j->http_state = HTTP_STATE_CLOSING; } else { + j->close_ok = 1; j->http_state = HTTP_STATE_REQUEST; } } @@ -1418,6 +1568,7 @@ static void tcp_server(const char *name, int port) if (accept_fd < 0) { perror("accept()"); } else { + char timebuf[SIMPLE_CTIME_BUF_SIZE]; time_t tt = time(0); char *ctt; @@ -1436,10 +1587,10 @@ static void tcp_server(const char *name, int port) (j->tls_session, accept_fd); set_read_funcs(j->tls_session); j->handshake_ok = 0; - j->no_close = 0; + j->close_ok = 0; if (verbose != 0) { - ctt = ctime(&tt); + ctt = simple_ctime(&tt, timebuf); ctt[strlen(ctt) - 1] = 0; printf @@ -1459,7 +1610,7 @@ static void tcp_server(const char *name, int port) if (FD_ISSET(j->fd, &rd) && !j->listen_socket) { /* read partial GET request */ - char buf[1024]; + char buf[16*1024]; int r; if (j->handshake_ok == 0) { @@ -1467,11 +1618,27 @@ static void tcp_server(const char *name, int port) } if (j->handshake_ok == 1) { - r = gnutls_record_recv(j-> - tls_session, - buf, - MIN(1024, - SMALL_READ_TEST)); + int earlydata_read = 0; + if (earlydata && !j->earlydata_eof) { + r = gnutls_record_recv_early_data(j-> + tls_session, + buf, + MIN(sizeof(buf), + SMALL_READ_TEST)); + if (r == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { + j->earlydata_eof = 1; + } + if (r == 0) { + earlydata_read = 1; + } + } + if (!earlydata_read) { + r = gnutls_record_recv(j-> + tls_session, + buf, + MIN(sizeof(buf), + SMALL_READ_TEST)); + } if (r == GNUTLS_E_INTERRUPTED || r == GNUTLS_E_AGAIN) { /* do nothing */ } else if (r <= 0) { @@ -1490,7 +1657,7 @@ static void tcp_server(const char *name, int port) ret = gnutls_alert_send_appropriate(j->tls_session, r); } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); GERR(r); - j->no_close = 1; + j->close_ok = 0; } } } else { @@ -1532,18 +1699,21 @@ static void tcp_server(const char *name, int port) || strstr(j-> http_request, "\n\n")) { - get_response(j-> - tls_session, - j-> - http_request, - &j-> - http_response, - &j-> - response_length); - j->http_state = - HTTP_STATE_RESPONSE; - j->response_written - = 0; + if (get_response(j-> + tls_session, + j-> + http_request, + &j-> + http_response, + &j-> + response_length)) { + j->http_state = + HTTP_STATE_RESPONSE; + j->response_written + = 0; + } else { + j->http_state = HTTP_STATE_CLOSING; + } } } } @@ -1590,6 +1760,7 @@ static void tcp_server(const char *name, int port) j->http_state = HTTP_STATE_REQUEST; free(j-> http_response); + j->http_response = NULL; j->response_length = 0; j->request_length = 0; j->http_request[0] = 0; @@ -1634,6 +1805,9 @@ static void tcp_server(const char *name, int port) if (noticket == 0) gnutls_free(session_ticket_key.data); + if (earlydata) + gnutls_anti_replay_deinit(anti_replay); + if (nodb == 0) wrap_db_deinit(); gnutls_global_deinit(); @@ -1662,12 +1836,15 @@ static void cmd_parser(int argc, char **argv) nodb = HAVE_OPT(NODB); noticket = HAVE_OPT(NOTICKET); + earlydata = HAVE_OPT(EARLYDATA); if (HAVE_OPT(ECHO)) http = 0; else http = 1; + record_max_size = OPT_VALUE_RECORDSIZE; + if (HAVE_OPT(X509FMTDER)) x509ctype = GNUTLS_X509_FMT_DER; else @@ -1678,34 +1855,47 @@ static void cmd_parser(int argc, char **argv) if (HAVE_OPT(DHPARAMS)) dh_params_file = OPT_ARG(DHPARAMS); - if (HAVE_OPT(X509KEYFILE)) - x509_keyfile = OPT_ARG(X509KEYFILE); - if (HAVE_OPT(X509CERTFILE)) - x509_certfile = OPT_ARG(X509CERTFILE); + if (HAVE_OPT(ALPN)) { + alpn_protos = STACKLST_OPT(ALPN); + alpn_protos_size = STACKCT_OPT(ALPN); + } - if (HAVE_OPT(X509DSAKEYFILE)) - x509_dsakeyfile = OPT_ARG(X509DSAKEYFILE); - if (HAVE_OPT(X509DSACERTFILE)) - x509_dsacertfile = OPT_ARG(X509DSACERTFILE); + if (HAVE_OPT(X509KEYFILE)) { + x509_keyfile = STACKLST_OPT(X509KEYFILE); + x509_keyfile_size = STACKCT_OPT(X509KEYFILE); + } + if (HAVE_OPT(X509CERTFILE)) { + x509_certfile = STACKLST_OPT(X509CERTFILE); + x509_certfile_size = STACKCT_OPT(X509CERTFILE); + } - if (HAVE_OPT(X509ECCKEYFILE)) - x509_ecckeyfile = OPT_ARG(X509ECCKEYFILE); - if (HAVE_OPT(X509ECCCERTFILE)) - x509_ecccertfile = OPT_ARG(X509ECCCERTFILE); + if (x509_certfile_size != x509_keyfile_size) { + fprintf(stderr, "The certificate number provided (%u) doesn't match the keys (%u)\n", + x509_certfile_size, x509_keyfile_size); + exit(1); + } if (HAVE_OPT(X509CAFILE)) x509_cafile = OPT_ARG(X509CAFILE); if (HAVE_OPT(X509CRLFILE)) x509_crlfile = OPT_ARG(X509CRLFILE); + + if (HAVE_OPT(RAWPKKEYFILE)) { + rawpk_keyfile = STACKLST_OPT(RAWPKKEYFILE); + rawpk_keyfile_size = STACKCT_OPT(RAWPKKEYFILE); + } - if (HAVE_OPT(PGPKEYFILE)) - pgp_keyfile = OPT_ARG(PGPKEYFILE); - if (HAVE_OPT(PGPCERTFILE)) - pgp_certfile = OPT_ARG(PGPCERTFILE); + if (HAVE_OPT(RAWPKFILE)) { + rawpk_file = STACKLST_OPT(RAWPKFILE); + rawpk_file_size = STACKCT_OPT(RAWPKFILE); + } - if (HAVE_OPT(PGPKEYRING)) - pgp_keyring = OPT_ARG(PGPKEYRING); + if (rawpk_file_size != rawpk_keyfile_size) { + fprintf(stderr, "The number of raw public-keys provided (%u) doesn't match the number of corresponding private keys (%u)\n", + rawpk_file_size, rawpk_keyfile_size); + exit(1); + } if (HAVE_OPT(SRPPASSWD)) srp_passwd = OPT_ARG(SRPPASSWD); @@ -1715,8 +1905,10 @@ static void cmd_parser(int argc, char **argv) if (HAVE_OPT(PSKPASSWD)) psk_passwd = OPT_ARG(PSKPASSWD); - if (HAVE_OPT(OCSP_RESPONSE)) - status_response_ocsp = OPT_ARG(OCSP_RESPONSE); + if (HAVE_OPT(OCSP_RESPONSE)) { + ocsp_responses = STACKLST_OPT(OCSP_RESPONSE); + ocsp_responses_size = STACKCT_OPT(OCSP_RESPONSE); + } if (HAVE_OPT(SNI_HOSTNAME)) sni_hostname = OPT_ARG(SNI_HOSTNAME); @@ -1724,54 +1916,93 @@ static void cmd_parser(int argc, char **argv) if (HAVE_OPT(SNI_HOSTNAME_FATAL)) sni_hostname_fatal = 1; + if (HAVE_OPT(HTTPDATA)) + http_data_file = OPT_ARG(HTTPDATA); + } /* session resuming support */ -#define SESSION_ID_SIZE 32 -#define SESSION_DATA_SIZE 1024 +#define SESSION_ID_SIZE 128 +#define SESSION_DATA_SIZE (16*1024) typedef struct { - char session_id[SESSION_ID_SIZE]; + unsigned char session_id[SESSION_ID_SIZE]; unsigned int session_id_size; - char session_data[SESSION_DATA_SIZE]; - unsigned int session_data_size; + gnutls_datum_t session_data; } CACHE; static CACHE *cache_db; -int cache_db_ptr = 0; +static int cache_db_ptr; +static int cache_db_alloc; static void wrap_db_init(void) { - /* allocate cache_db */ - cache_db = calloc(1, ssl_session_cache * sizeof(CACHE)); } static void wrap_db_deinit(void) { + int i; + + for (i = 0; i < cache_db_ptr; i++) + free(cache_db[i].session_data.data); + free(cache_db); } static int wrap_db_store(void *dbf, gnutls_datum_t key, gnutls_datum_t data) { - - if (cache_db == NULL) - return -1; + int i; + time_t now = time(0); if (key.size > SESSION_ID_SIZE) - return -1; + return GNUTLS_E_DB_ERROR; if (data.size > SESSION_DATA_SIZE) - return -1; + return GNUTLS_E_DB_ERROR; - memcpy(cache_db[cache_db_ptr].session_id, key.data, key.size); - cache_db[cache_db_ptr].session_id_size = key.size; + if (cache_db_ptr < cache_db_alloc) + i = cache_db_ptr++; + else { + /* find empty or expired slot to store the new entry */ + for (i = 0; i < cache_db_ptr; i++) + if (cache_db[i].session_id_size == 0 || + !(now < + gnutls_db_check_entry_expire_time(&cache_db[i]. + session_data))) + break; + + if (i == cache_db_ptr) { + /* try to allocate additional slots */ + if (cache_db_ptr == ssl_session_cache) { + fprintf(stderr, + "Error: too many sessions\n"); + return GNUTLS_E_DB_ERROR; + } + cache_db_alloc = cache_db_alloc * 2 + 1; + cache_db = realloc(cache_db, + cache_db_alloc * sizeof(CACHE)); + if (!cache_db) + return GNUTLS_E_MEMORY_ERROR; + memset(cache_db + cache_db_ptr, 0, + (cache_db_alloc - cache_db_ptr) * sizeof(CACHE)); + cache_db_ptr++; + } + } - memcpy(cache_db[cache_db_ptr].session_data, data.data, data.size); - cache_db[cache_db_ptr].session_data_size = data.size; + memcpy(cache_db[i].session_id, key.data, key.size); + cache_db[i].session_id_size = key.size; - cache_db_ptr++; - cache_db_ptr %= ssl_session_cache; + /* resize the data slot if needed */ + if (cache_db[i].session_data.size < data.size) { + cache_db[i].session_data.data = + realloc(cache_db[i].session_data.data, + data.size); + if (!cache_db[i].session_data.data) + return GNUTLS_E_MEMORY_ERROR; + } + memcpy(cache_db[i].session_data.data, data.data, data.size); + cache_db[i].session_data.size = data.size; return 0; } @@ -1779,22 +2010,22 @@ wrap_db_store(void *dbf, gnutls_datum_t key, gnutls_datum_t data) static gnutls_datum_t wrap_db_fetch(void *dbf, gnutls_datum_t key) { gnutls_datum_t res = { NULL, 0 }; + time_t now = time(0); int i; - if (cache_db == NULL) - return res; - - for (i = 0; i < ssl_session_cache; i++) { + for (i = 0; i < cache_db_ptr; i++) { if (key.size == cache_db[i].session_id_size && memcmp(key.data, cache_db[i].session_id, - key.size) == 0) { - res.size = cache_db[i].session_data_size; + key.size) == 0 && + now < gnutls_db_check_entry_expire_time(&cache_db[i]. + session_data)) { + res.size = cache_db[i].session_data.size; - res.data = gnutls_malloc(res.size); + res.data = malloc(res.size); if (res.data == NULL) return res; - memcpy(res.data, cache_db[i].session_data, + memcpy(res.data, cache_db[i].session_data.data, res.size); return res; @@ -1807,20 +2038,37 @@ static int wrap_db_delete(void *dbf, gnutls_datum_t key) { int i; - if (cache_db == NULL) - return -1; - - for (i = 0; i < ssl_session_cache; i++) { - if (key.size == (unsigned int) cache_db[i].session_id_size - && memcmp(key.data, cache_db[i].session_id, - key.size) == 0) { + for (i = 0; i < cache_db_ptr; i++) { + if (key.size == cache_db[i].session_id_size && + memcmp(key.data, cache_db[i].session_id, + key.size) == 0) { cache_db[i].session_id_size = 0; - cache_db[i].session_data_size = 0; + free(cache_db[i].session_data.data); + cache_db[i].session_data.data = NULL; + cache_db[i].session_data.size = 0; return 0; } } - return -1; + return GNUTLS_E_DB_ERROR; +} + +static int +anti_replay_db_add(void *dbf, time_t exp, const gnutls_datum_t *key, const gnutls_datum_t *data) +{ + time_t now = time(0); + int i; + + for (i = 0; i < cache_db_ptr; i++) { + if (key->size == cache_db[i].session_id_size && + memcmp(key->data, cache_db[i].session_id, + key->size) == 0 && + now < gnutls_db_check_entry_expire_time(&cache_db[i]. + session_data)) + return GNUTLS_E_DB_ENTRY_EXISTS; + } + + return wrap_db_store(dbf, *key, *data); } diff --git a/src/socket.c b/src/socket.c index 16ed40720f..9ba784fa3a 100644 --- a/src/socket.c +++ b/src/socket.c @@ -15,7 +15,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ #include @@ -33,15 +33,16 @@ #include #include #include -#ifndef _WIN32 -# include -#else -# undef endservent -# define endservent() -#endif +#include #include #include #include "sockets.h" +#include "common.h" + +#ifdef _WIN32 +# undef endservent +# define endservent() +#endif #define MAX_BUF 4096 @@ -61,7 +62,7 @@ socket_recv(const socket_st * socket, void *buffer, int buffer_size) if (ret == GNUTLS_E_HEARTBEAT_PING_RECEIVED) gnutls_heartbeat_pong(socket->session, 0); } - while (ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN + while (ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_HEARTBEAT_PING_RECEIVED); } else @@ -177,13 +178,13 @@ ssize_t wait_for_text(socket_st * socket, const char *txt, unsigned txt_size) tv.tv_sec = 10; tv.tv_usec = 0; ret = select(socket->fd + 1, &read_fds, NULL, NULL, &tv); - if (ret <= 0) - ret = -1; - else + if (ret > 0) ret = recv(socket->fd, pbuf, left, 0); - if (ret == -1 || ret == 0) { - int e = errno; - fprintf(stderr, "error receiving %s: %s\n", txt, strerror(e)); + if (ret == -1) { + fprintf(stderr, "error receiving '%s': %s\n", txt, strerror(errno)); + exit(2); + } else if (ret == 0) { + fprintf(stderr, "error receiving '%s': Timeout\n", txt); exit(2); } pbuf[ret] = 0; @@ -204,8 +205,8 @@ ssize_t wait_for_text(socket_st * socket, const char *txt, unsigned txt_size) p = memmem(buf, got, txt, txt_size); if (p != NULL && p != buf) { p--; - if (*p == '\n' || *p == '\r') - break; + if (*p == '\n' || *p == '\r' || (*txt == '<' && *p == '>')) // XMPP is not line oriented, uses XML format + break; } } } while(got < txt_size || strncmp(buf, txt, txt_size) != 0); @@ -226,7 +227,7 @@ socket_starttls(socket_st * socket) if (strcasecmp(socket->app_proto, "smtp") == 0 || strcasecmp(socket->app_proto, "submission") == 0) { if (socket->verbose) - printf("Negotiating SMTP STARTTLS\n"); + log_msg(stdout, "Negotiating SMTP STARTTLS\n"); wait_for_text(socket, "220 ", 4); snprintf(buf, sizeof(buf), "EHLO %s\r\n", socket->hostname); @@ -236,7 +237,7 @@ socket_starttls(socket_st * socket) wait_for_text(socket, "220 ", 4); } else if (strcasecmp(socket->app_proto, "imap") == 0 || strcasecmp(socket->app_proto, "imap2") == 0) { if (socket->verbose) - printf("Negotiating IMAP STARTTLS\n"); + log_msg(stdout, "Negotiating IMAP STARTTLS\n"); send_line(socket, "a CAPABILITY\r\n"); wait_for_text(socket, "a OK", 4); @@ -244,7 +245,7 @@ socket_starttls(socket_st * socket) wait_for_text(socket, "a OK", 4); } else if (strcasecmp(socket->app_proto, "xmpp") == 0) { if (socket->verbose) - printf("Negotiating XMPP STARTTLS\n"); + log_msg(stdout, "Negotiating XMPP STARTTLS\n"); snprintf(buf, sizeof(buf), "\n", socket->hostname); send_line(socket, buf); @@ -253,13 +254,13 @@ socket_starttls(socket_st * socket) wait_for_text(socket, "app_proto, "ldap") == 0) { if (socket->verbose) - printf("Negotiating LDAP STARTTLS\n"); + log_msg(stdout, "Negotiating LDAP STARTTLS\n"); #define LDAP_STR "\x30\x1d\x02\x01\x01\x77\x18\x80\x16\x31\x2e\x33\x2e\x36\x2e\x31\x2e\x34\x2e\x31\x2e\x31\x34\x36\x36\x2e\x32\x30\x30\x33\x37" send(socket->fd, LDAP_STR, sizeof(LDAP_STR)-1, 0); wait_for_text(socket, NULL, 0); } else if (strcasecmp(socket->app_proto, "ftp") == 0 || strcasecmp(socket->app_proto, "ftps") == 0) { if (socket->verbose) - printf("Negotiating FTP STARTTLS\n"); + log_msg(stdout, "Negotiating FTP STARTTLS\n"); send_line(socket, "FEAT\r\n"); wait_for_text(socket, "211 ", 4); @@ -267,7 +268,7 @@ socket_starttls(socket_st * socket) wait_for_text(socket, "234", 3); } else if (strcasecmp(socket->app_proto, "lmtp") == 0) { if (socket->verbose) - printf("Negotiating LMTP STARTTLS\n"); + log_msg(stdout, "Negotiating LMTP STARTTLS\n"); wait_for_text(socket, "220 ", 4); snprintf(buf, sizeof(buf), "LHLO %s\r\n", socket->hostname); @@ -277,28 +278,28 @@ socket_starttls(socket_st * socket) wait_for_text(socket, "220 ", 4); } else if (strcasecmp(socket->app_proto, "pop3") == 0) { if (socket->verbose) - printf("Negotiating POP3 STARTTLS\n"); + log_msg(stdout, "Negotiating POP3 STARTTLS\n"); wait_for_text(socket, "+OK", 3); send_line(socket, "STLS\r\n"); wait_for_text(socket, "+OK", 3); } else if (strcasecmp(socket->app_proto, "nntp") == 0) { if (socket->verbose) - printf("Negotiating NNTP STARTTLS\n"); + log_msg(stdout, "Negotiating NNTP STARTTLS\n"); wait_for_text(socket, "200 ", 4); send_line(socket, "STARTTLS\r\n"); wait_for_text(socket, "382 ", 4); } else if (strcasecmp(socket->app_proto, "sieve") == 0) { if (socket->verbose) - printf("Negotiating Sieve STARTTLS\n"); + log_msg(stdout, "Negotiating Sieve STARTTLS\n"); wait_for_text(socket, "OK ", 3); send_line(socket, "STARTTLS\r\n"); wait_for_text(socket, "OK ", 3); } else if (strcasecmp(socket->app_proto, "postgres") == 0 || strcasecmp(socket->app_proto, "postgresql") == 0) { if (socket->verbose) - printf("Negotiating PostgreSQL STARTTLS\n"); + log_msg(stdout, "Negotiating PostgreSQL STARTTLS\n"); #define POSTGRES_STR "\x00\x00\x00\x08\x04\xD2\x16\x2F" send(socket->fd, POSTGRES_STR, sizeof(POSTGRES_STR)-1, 0); @@ -387,6 +388,11 @@ void socket_bye(socket_st * socket, unsigned polite) gnutls_free(socket->rdata.data); socket->rdata.data = NULL; + if (socket->server_trace) + fclose(socket->server_trace); + if (socket->client_trace) + fclose(socket->client_trace); + socket->fd = -1; socket->secure = 0; } @@ -396,23 +402,63 @@ void socket_bye(socket_st * socket, unsigned polite) void canonicalize_host(char *hostname, char *service, unsigned service_size) { char *p; - unsigned char buf[64]; - p = strchr(hostname, ':'); - if (p == NULL) - return; + if ((p = strchr(hostname, ':'))) { + unsigned char buf[64]; - if (inet_pton(AF_INET6, hostname, buf) == 1) - return; + if (inet_pton(AF_INET6, hostname, buf) == 1) + return; + + *p = 0; + + if (service && service_size) + snprintf(service, service_size, "%s", p+1); + } else + p = hostname + strlen(hostname); + + if (p > hostname && p[-1] == '.') + p[-1] = 0; // remove trailing dot on FQDN +} + +static ssize_t +wrap_pull(gnutls_transport_ptr_t ptr, void *data, size_t len) +{ + socket_st *hd = ptr; + ssize_t r; - *p = 0; - snprintf(service, service_size, "%s", p+1); + r = recv(hd->fd, data, len, 0); + if (r > 0 && hd->server_trace) { + fwrite(data, 1, r, hd->server_trace); + } + return r; +} + +static ssize_t +wrap_push(gnutls_transport_ptr_t ptr, const void *data, size_t len) +{ + socket_st *hd = ptr; + + if (hd->client_trace) { + fwrite(data, 1, len, hd->client_trace); + } + + return send(hd->fd, data, len, 0); +} + +/* inline is used to avoid a gcc warning if used in mini-eagain */ +inline static int wrap_pull_timeout_func(gnutls_transport_ptr_t ptr, + unsigned int ms) +{ + socket_st *hd = ptr; + + return gnutls_system_recv_timeout((gnutls_transport_ptr_t)(long)hd->fd, ms); } void -socket_open(socket_st * hd, const char *hostname, const char *service, - const char *app_proto, int flags, const char *msg, gnutls_datum_t *rdata) +socket_open2(socket_st * hd, const char *hostname, const char *service, + const char *app_proto, int flags, const char *msg, gnutls_datum_t *rdata, gnutls_datum_t *edata, + FILE *server_trace, FILE *client_trace) { struct addrinfo hints, *res, *ptr; int sd, err = 0; @@ -434,6 +480,11 @@ socket_open(socket_st * hd, const char *hostname, const char *service, hd->rdata.size = rdata->size; } + if (edata) { + hd->edata.data = edata->data; + hd->edata.size = edata->size; + } + ret = gnutls_idna_map(hostname, strlen(hostname), &idna, 0); if (ret < 0) { fprintf(stderr, "Cannot convert %s to IDNA: %s\n", hostname, gnutls_strerror(ret)); @@ -444,7 +495,7 @@ socket_open(socket_st * hd, const char *hostname, const char *service, a_hostname = (char*)idna.data; if (msg != NULL) - printf("Resolving '%s:%s'...\n", a_hostname, service); + log_msg(stdout, "Resolving '%s:%s'...\n", a_hostname, service); /* get server name */ memset(&hints, 0, sizeof(hints)); @@ -493,11 +544,11 @@ socket_open(socket_st * hd, const char *hostname, const char *service, hd->connect_addrlen = ptr->ai_addrlen; if (msg) - printf("%s '%s:%s' (TFO)...\n", msg, buffer, portname); + log_msg(stdout, "%s '%s:%s' (TFO)...\n", msg, buffer, portname); } else { if (msg) - printf("%s '%s:%s'...\n", msg, buffer, portname); + log_msg(stdout, "%s '%s:%s'...\n", msg, buffer, portname); if ((err = connect(sd, ptr->ai_addr, ptr->ai_addrlen)) < 0) continue; @@ -519,11 +570,27 @@ socket_open(socket_st * hd, const char *hostname, const char *service, } if (hd->session) { + if (hd->edata.data) { + ret = gnutls_record_send_early_data(hd->session, hd->edata.data, hd->edata.size); + if (ret < 0) { + fprintf(stderr, "error sending early data\n"); + exit(1); + } + } if (hd->rdata.data) { gnutls_session_set_data(hd->session, hd->rdata.data, hd->rdata.size); } - gnutls_transport_set_int(hd->session, sd); + if (server_trace) + hd->server_trace = server_trace; + + if (client_trace) + hd->client_trace = client_trace; + + gnutls_transport_set_push_function(hd->session, wrap_push); + gnutls_transport_set_pull_function(hd->session, wrap_pull); + gnutls_transport_set_pull_timeout_function(hd->session, wrap_pull_timeout_func); + gnutls_transport_set_ptr(hd->session, hd); } if (!(flags & SOCKET_FLAG_RAW) && !(flags & SOCKET_FLAG_SKIP_INIT)) { @@ -534,7 +601,8 @@ socket_open(socket_st * hd, const char *hostname, const char *service, continue; } else if (err < 0) { - fprintf(stderr, "*** handshake has failed: %s\n", gnutls_strerror(err)); + if (!(flags & SOCKET_FLAG_DONT_PRINT_ERRORS)) + fprintf(stderr, "*** handshake has failed: %s\n", gnutls_strerror(err)); exit(1); } } @@ -564,7 +632,10 @@ socket_open(socket_st * hd, const char *hostname, const char *service, hd->service = strdup(portname); hd->ptr = ptr; hd->addr_info = res; + gnutls_free(hd->rdata.data); hd->rdata.data = NULL; + gnutls_free(hd->edata.data); + hd->edata.data = NULL; gnutls_free(idna.data); return; } diff --git a/src/socket.h b/src/socket.h index cb5289a582..b70e188f73 100644 --- a/src/socket.h +++ b/src/socket.h @@ -1,3 +1,6 @@ +#ifndef GNUTLS_SRC_SOCKET_H +#define GNUTLS_SRC_SOCKET_H + #include #include @@ -7,6 +10,7 @@ #define SOCKET_FLAG_RAW (1<<3) /* unencrypted */ #define SOCKET_FLAG_VERBOSE (1<<4) #define SOCKET_FLAG_SKIP_INIT (1<<5) +#define SOCKET_FLAG_DONT_PRINT_ERRORS (1<<6) typedef struct { @@ -25,13 +29,18 @@ typedef struct { struct sockaddr_storage connect_addr; socklen_t connect_addrlen; + FILE *server_trace; + FILE *client_trace; + /* resumption data */ gnutls_datum_t rdata; + /* early data */ + gnutls_datum_t edata; } socket_st; /* calling program must provide that */ extern gnutls_session_t init_tls_session(const char *host); -extern int do_handshake(socket_st * socket); +int do_handshake(socket_st * socket); ssize_t socket_recv(const socket_st * socket, void *buffer, int buffer_size); @@ -42,8 +51,15 @@ ssize_t socket_send(const socket_st * socket, const void *buffer, ssize_t socket_send_range(const socket_st * socket, const void *buffer, int buffer_size, gnutls_range_st * range); void -socket_open(socket_st * hd, const char *hostname, const char *service, - const char *app_proto, int flags, const char *msg, gnutls_datum_t *rdata); +socket_open2(socket_st * hd, const char *hostname, const char *service, + const char *app_proto, int flags, const char *msg, gnutls_datum_t *rdata, gnutls_datum_t *edata, + FILE *server_trace, FILE *client_trace); + +#define socket_open(hd, host, service, app_proto, flags, msg, rdata) \ + socket_open2(hd, host, service, app_proto, flags, msg, rdata, NULL, NULL, NULL) + +#define socket_open3(hd, host, service, app_proto, flags, msg, rdata, edata) \ + socket_open2(hd, host, service, app_proto, flags, msg, rdata, edata, NULL, NULL) void socket_bye(socket_st * socket, unsigned polite); @@ -55,3 +71,5 @@ const char *starttls_proto_to_service(const char *app_proto); void canonicalize_host(char *hostname, char *service, unsigned service_size); #define CONNECT_MSG "Connecting to" + +#endif /* GNUTLS_SRC_SOCKET_H */ diff --git a/src/srptool-args.c.bak b/src/srptool-args.c.bak deleted file mode 100644 index 57cab549a4..0000000000 --- a/src/srptool-args.c.bak +++ /dev/null @@ -1,1067 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (srptool-args.c) - * - * It has been AutoGen-ed - * From the definitions srptool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This source file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the srptool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The srptool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * srptool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * srptool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef __doxygen__ -#define OPTION_CODE_COMPILE 1 -#include "srptool-args.h" -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern FILE * option_usage_fp; -#define zCopyright (srptool_opt_strs+0) -#define zLicenseDescrip (srptool_opt_strs+288) - - -#ifndef NULL -# define NULL 0 -#endif - -/** - * static const strings for srptool options - */ -static char const srptool_opt_strs[2037] = -/* 0 */ "srptool @VERSION@\n" - "Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n" - "This is free software. It is licensed for use, modification and\n" - "redistribution under the terms of the GNU General Public License,\n" - "version 3 or later \n\0" -/* 288 */ "srptool is free software: you can redistribute it and/or modify it under\n" - "the terms of the GNU General Public License as published by the Free\n" - "Software Foundation, either version 3 of the License, or (at your option)\n" - "any later version.\n\n" - "srptool is distributed in the hope that it will be useful, but WITHOUT ANY\n" - "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n" - "FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n" - "details.\n\n" - "You should have received a copy of the GNU General Public License along\n" - "with this program. If not, see .\n\0" -/* 891 */ "Enable debugging\0" -/* 908 */ "DEBUG\0" -/* 914 */ "debug\0" -/* 920 */ "specify the index of the group parameters in tpasswd.conf to use\0" -/* 985 */ "INDEX\0" -/* 991 */ "index\0" -/* 997 */ "specify a username\0" -/* 1016 */ "USERNAME\0" -/* 1025 */ "username\0" -/* 1034 */ "specify a password file\0" -/* 1058 */ "PASSWD\0" -/* 1065 */ "passwd\0" -/* 1072 */ "specify salt size\0" -/* 1090 */ "SALT\0" -/* 1095 */ "salt\0" -/* 1100 */ "just verify the password.\0" -/* 1126 */ "VERIFY\0" -/* 1133 */ "verify\0" -/* 1140 */ "specify a password conf file.\0" -/* 1170 */ "PASSWD_CONF\0" -/* 1182 */ "passwd-conf\0" -/* 1194 */ "Generate a password configuration file.\0" -/* 1234 */ "CREATE_CONF\0" -/* 1246 */ "create-conf\0" -/* 1258 */ "display extended usage information and exit\0" -/* 1302 */ "help\0" -/* 1307 */ "extended usage information passed thru pager\0" -/* 1352 */ "more-help\0" -/* 1362 */ "output version information and exit\0" -/* 1398 */ "version\0" -/* 1406 */ "SRPTOOL\0" -/* 1414 */ "srptool - GnuTLS SRP tool\n" - "Usage: %s [ - [] | --[{=| }] ]...\n\0" -/* 1498 */ "@PACKAGE_BUGREPORT@\0" -/* 1518 */ "\n\0" -/* 1520 */ "Simple program that emulates the programs in the Stanford SRP (Secure\n" - "Remote Password) libraries using GnuTLS. It is intended for use in places\n" - "where you don't expect SRP authentication to be the used for system users.\n\n" - "In brief, to use SRP you need to create two files. These are the password\n" - "file that holds the users and the verifiers associated with them and the\n" - "configuration file to hold the group parameters (called tpasswd.conf).\n\0" -/* 1961 */ "srptool @VERSION@\0" -/* 1979 */ "srptool [options]\n" - "srptool --help for usage instructions.\n"; - -/** - * debug option description: - */ -/** Descriptive text for the debug option */ -#define DEBUG_DESC (srptool_opt_strs+891) -/** Upper-cased name for the debug option */ -#define DEBUG_NAME (srptool_opt_strs+908) -/** Name string for the debug option */ -#define DEBUG_name (srptool_opt_strs+914) -/** Compiled in flag settings for the debug option */ -#define DEBUG_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * index option description: - */ -/** Descriptive text for the index option */ -#define INDEX_DESC (srptool_opt_strs+920) -/** Upper-cased name for the index option */ -#define INDEX_NAME (srptool_opt_strs+985) -/** Name string for the index option */ -#define INDEX_name (srptool_opt_strs+991) -/** The compiled in default value for the index option argument */ -#define INDEX_DFT_ARG ((char const*)1) -/** Compiled in flag settings for the index option */ -#define INDEX_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * username option description: - */ -/** Descriptive text for the username option */ -#define USERNAME_DESC (srptool_opt_strs+997) -/** Upper-cased name for the username option */ -#define USERNAME_NAME (srptool_opt_strs+1016) -/** Name string for the username option */ -#define USERNAME_name (srptool_opt_strs+1025) -/** Compiled in flag settings for the username option */ -#define USERNAME_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * passwd option description: - */ -/** Descriptive text for the passwd option */ -#define PASSWD_DESC (srptool_opt_strs+1034) -/** Upper-cased name for the passwd option */ -#define PASSWD_NAME (srptool_opt_strs+1058) -/** Name string for the passwd option */ -#define PASSWD_name (srptool_opt_strs+1065) -/** Compiled in flag settings for the passwd option */ -#define PASSWD_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * salt option description: - */ -/** Descriptive text for the salt option */ -#define SALT_DESC (srptool_opt_strs+1072) -/** Upper-cased name for the salt option */ -#define SALT_NAME (srptool_opt_strs+1090) -/** Name string for the salt option */ -#define SALT_name (srptool_opt_strs+1095) -/** Compiled in flag settings for the salt option */ -#define SALT_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * verify option description: - */ -/** Descriptive text for the verify option */ -#define VERIFY_DESC (srptool_opt_strs+1100) -/** Upper-cased name for the verify option */ -#define VERIFY_NAME (srptool_opt_strs+1126) -/** Name string for the verify option */ -#define VERIFY_name (srptool_opt_strs+1133) -/** Compiled in flag settings for the verify option */ -#define VERIFY_FLAGS (OPTST_DISABLED) - -/** - * passwd-conf option description: - */ -/** Descriptive text for the passwd-conf option */ -#define PASSWD_CONF_DESC (srptool_opt_strs+1140) -/** Upper-cased name for the passwd-conf option */ -#define PASSWD_CONF_NAME (srptool_opt_strs+1170) -/** Name string for the passwd-conf option */ -#define PASSWD_CONF_name (srptool_opt_strs+1182) -/** Compiled in flag settings for the passwd-conf option */ -#define PASSWD_CONF_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * create-conf option description: - */ -/** Descriptive text for the create-conf option */ -#define CREATE_CONF_DESC (srptool_opt_strs+1194) -/** Upper-cased name for the create-conf option */ -#define CREATE_CONF_NAME (srptool_opt_strs+1234) -/** Name string for the create-conf option */ -#define CREATE_CONF_name (srptool_opt_strs+1246) -/** Compiled in flag settings for the create-conf option */ -#define CREATE_CONF_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/* - * Help/More_Help/Version option descriptions: - */ -#define HELP_DESC (srptool_opt_strs+1258) -#define HELP_name (srptool_opt_strs+1302) -#ifdef HAVE_WORKING_FORK -#define MORE_HELP_DESC (srptool_opt_strs+1307) -#define MORE_HELP_name (srptool_opt_strs+1352) -#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -#define MORE_HELP_DESC HELP_DESC -#define MORE_HELP_name HELP_name -#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT) -#endif -#ifdef NO_OPTIONAL_OPT_ARGS -# define VER_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ - OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT) -#endif -#define VER_DESC (srptool_opt_strs+1362) -#define VER_name (srptool_opt_strs+1398) -/** - * Declare option callback procedures - */ -extern tOptProc - optionBooleanVal, optionNestedVal, optionNumericVal, - optionPagedUsage, optionPrintVersion, optionResetOpt, - optionStackArg, optionTimeDate, optionTimeVal, - optionUnstackArg, optionVendorOption; -static tOptProc - doOptDebug, doUsageOpt; -#define VER_PROC optionPrintVersion - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Define the srptool Option Descriptions. - * This is an array of OPTION_CT entries, one for each - * option that the srptool program responds to. - */ -static tOptDesc optDesc[OPTION_CT] = { - { /* entry idx, value */ 0, VALUE_OPT_DEBUG, - /* equiv idx, value */ 0, VALUE_OPT_DEBUG, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DEBUG_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --debug */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDebug, - /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 1, VALUE_OPT_INDEX, - /* equiv idx, value */ 1, VALUE_OPT_INDEX, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INDEX_FLAGS, 0, - /* last opt argumnt */ { INDEX_DFT_ARG }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionNumericVal, - /* desc, NAME, name */ INDEX_DESC, INDEX_NAME, INDEX_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 2, VALUE_OPT_USERNAME, - /* equiv idx, value */ 2, VALUE_OPT_USERNAME, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ USERNAME_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --username */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ USERNAME_DESC, USERNAME_NAME, USERNAME_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 3, VALUE_OPT_PASSWD, - /* equiv idx, value */ 3, VALUE_OPT_PASSWD, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PASSWD_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --passwd */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PASSWD_DESC, PASSWD_NAME, PASSWD_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 4, VALUE_OPT_SALT, - /* equiv idx, value */ 4, VALUE_OPT_SALT, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SALT_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --salt */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionNumericVal, - /* desc, NAME, name */ SALT_DESC, SALT_NAME, SALT_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 5, VALUE_OPT_VERIFY, - /* equiv idx, value */ 5, VALUE_OPT_VERIFY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VERIFY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --verify */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ VERIFY_DESC, VERIFY_NAME, VERIFY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 6, VALUE_OPT_PASSWD_CONF, - /* equiv idx, value */ 6, VALUE_OPT_PASSWD_CONF, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PASSWD_CONF_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --passwd-conf */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PASSWD_CONF_DESC, PASSWD_CONF_NAME, PASSWD_CONF_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 7, VALUE_OPT_CREATE_CONF, - /* equiv idx, value */ 7, VALUE_OPT_CREATE_CONF, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ CREATE_CONF_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --create-conf */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ CREATE_CONF_DESC, CREATE_CONF_NAME, CREATE_CONF_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VER_FLAGS, AOUSE_VERSION, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ VER_PROC, - /* desc, NAME, name */ VER_DESC, NULL, VER_name, - /* disablement strs */ NULL, NULL }, - - - - { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doUsageOpt, - /* desc, NAME, name */ HELP_DESC, NULL, HELP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionPagedUsage, - /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name, - /* disablement strs */ NULL, NULL } -}; - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** Reference to the upper cased version of srptool. */ -#define zPROGNAME (srptool_opt_strs+1406) -/** Reference to the title line for srptool usage. */ -#define zUsageTitle (srptool_opt_strs+1414) -/** There is no srptool configuration file. */ -#define zRcName NULL -/** There are no directories to search for srptool config files. */ -#define apzHomeList NULL -/** The srptool program bug email address. */ -#define zBugsAddr (srptool_opt_strs+1498) -/** Clarification/explanation of what srptool does. */ -#define zExplain (srptool_opt_strs+1518) -/** Extra detail explaining what srptool does. */ -#define zDetail (srptool_opt_strs+1520) -/** The full version string for srptool. */ -#define zFullVersion (srptool_opt_strs+1961) -/* extracted from optcode.tlib near line 364 */ - -#if defined(ENABLE_NLS) -# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT - static tOptionXlateProc translate_option_strings; -#else -# define OPTPROC_BASE OPTPROC_NONE -# define translate_option_strings NULL -#endif /* ENABLE_NLS */ - -#define srptool_full_usage (NULL) -#define srptool_short_usage (srptool_opt_strs+1979) - -#endif /* not defined __doxygen__ */ - -/* - * Create the static procedure(s) declared above. - */ -/** - * The callout function that invokes the optionUsage function. - * - * @param[in] opts the AutoOpts option description structure - * @param[in] od the descriptor for the "help" (usage) option. - * @noreturn - */ -static void -doUsageOpt(tOptions * opts, tOptDesc * od) -{ - int ex_code; - ex_code = SRPTOOL_EXIT_SUCCESS; - optionUsage(&srptoolOptions, ex_code); - /* NOTREACHED */ - exit(SRPTOOL_EXIT_FAILURE); - (void)opts; - (void)od; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the debug option. - * Specifies the debug level. - * @param[in] pOptions the srptool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 9999 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} -/* extracted from optmain.tlib near line 1250 */ - -/** - * The directory containing the data associated with srptool. - */ -#ifndef PKGDATADIR -# define PKGDATADIR "" -#endif - -/** - * Information about the person or institution that packaged srptool - * for the current distribution. - */ -#ifndef WITH_PACKAGER -# define srptool_packager_info NULL -#else -/** Packager information for srptool. */ -static char const srptool_packager_info[] = - "Packaged by " WITH_PACKAGER - -# ifdef WITH_PACKAGER_VERSION - " ("WITH_PACKAGER_VERSION")" -# endif - -# ifdef WITH_PACKAGER_BUG_REPORTS - "\nReport srptool bugs to " WITH_PACKAGER_BUG_REPORTS -# endif - "\n"; -#endif -#ifndef __doxygen__ - -#endif /* __doxygen__ */ -/** - * The option definitions for srptool. The one structure that - * binds them all. - */ -tOptions srptoolOptions = { - OPTIONS_STRUCT_VERSION, - 0, NULL, /* original argc + argv */ - ( OPTPROC_BASE - + OPTPROC_ERRSTOP - + OPTPROC_SHORTOPT - + OPTPROC_LONGOPT - + OPTPROC_NO_REQ_OPT - + OPTPROC_NO_ARGS - + OPTPROC_GNUUSAGE - + OPTPROC_MISUSE ), - 0, NULL, /* current option index, current option */ - NULL, NULL, zPROGNAME, - zRcName, zCopyright, zLicenseDescrip, - zFullVersion, apzHomeList, zUsageTitle, - zExplain, zDetail, optDesc, - zBugsAddr, /* address to send bugs to */ - NULL, NULL, /* extensions/saved state */ - optionUsage, /* usage procedure */ - translate_option_strings, /* translation procedure */ - /* - * Indexes to special options - */ - { INDEX_OPT_MORE_HELP, /* more-help option index */ - NO_EQUIVALENT, /* save option index */ - NO_EQUIVALENT, /* '-#' option index */ - NO_EQUIVALENT /* index of default opt */ - }, - 11 /* full option count */, 8 /* user option count */, - srptool_full_usage, srptool_short_usage, - NULL, NULL, - PKGDATADIR, srptool_packager_info -}; - -#if ENABLE_NLS -/** - * This code is designed to translate translatable option text for the - * srptool program. These translations happen upon entry - * to optionProcess(). - */ -#include -#include -#include -#include -#ifdef HAVE_DCGETTEXT -# include -#endif -#include - -static char * AO_gettext(char const * pz); -static void coerce_it(void ** s); - -/** - * AutoGen specific wrapper function for gettext. It relies on the macro _() - * to convert from English to the target language, then strdup-duplicates the - * result string. It tries the "libopts" domain first, then whatever has been - * set via the \a textdomain(3) call. - * - * @param[in] pz the input text used as a lookup key. - * @returns the translated text (if there is one), - * or the original text (if not). - */ -static char * -AO_gettext(char const * pz) -{ - char * res; - if (pz == NULL) - return NULL; -#ifdef HAVE_DCGETTEXT - /* - * While processing the option_xlateable_txt data, try to use the - * "libopts" domain. Once we switch to the option descriptor data, - * do *not* use that domain. - */ - if (option_xlateable_txt.field_ct != 0) { - res = dgettext("libopts", pz); - if (res == pz) - res = (char *)VOIDP(_(pz)); - } else - res = (char *)VOIDP(_(pz)); -#else - res = (char *)VOIDP(_(pz)); -#endif - if (res == pz) - return res; - res = strdup(res); - if (res == NULL) { - fputs(_("No memory for duping translated strings\n"), stderr); - exit(SRPTOOL_EXIT_FAILURE); - } - return res; -} - -/** - * All the pointers we use are marked "* const", but they are stored in - * writable memory. Coerce the mutability and set the pointer. - */ -static void coerce_it(void ** s) { *s = AO_gettext(*s); -} - -/** - * Translate all the translatable strings in the srptoolOptions - * structure defined above. This is done only once. - */ -static void -translate_option_strings(void) -{ - tOptions * const opts = &srptoolOptions; - - /* - * Guard against re-translation. It won't work. The strings will have - * been changed by the first pass through this code. One shot only. - */ - if (option_xlateable_txt.field_ct != 0) { - /* - * Do the translations. The first pointer follows the field count - * field. The field count field is the size of a pointer. - */ - char ** ppz = (char**)VOIDP(&(option_xlateable_txt)); - int ix = option_xlateable_txt.field_ct; - - do { - ppz++; /* skip over field_ct */ - *ppz = AO_gettext(*ppz); - } while (--ix > 0); - /* prevent re-translation and disable "libopts" domain lookup */ - option_xlateable_txt.field_ct = 0; - - coerce_it(VOIDP(&(opts->pzCopyright))); - coerce_it(VOIDP(&(opts->pzCopyNotice))); - coerce_it(VOIDP(&(opts->pzFullVersion))); - coerce_it(VOIDP(&(opts->pzUsageTitle))); - coerce_it(VOIDP(&(opts->pzExplain))); - coerce_it(VOIDP(&(opts->pzDetail))); - { - tOptDesc * od = opts->pOptDesc; - for (ix = opts->optCt; ix > 0; ix--, od++) - coerce_it(VOIDP(&(od->pzText))); - } - } -} -#endif /* ENABLE_NLS */ - -#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT -/** I18N function strictly for xgettext. Do not compile. */ -static void bogus_function(void) { - /* TRANSLATORS: - - The following dummy function was crated solely so that xgettext can - extract the correct strings. These strings are actually referenced - by a field name in the srptoolOptions structure noted in the - comments below. The literal text is defined in srptool_opt_strs. - - NOTE: the strings below are segmented with respect to the source string - srptool_opt_strs. The strings above are handed off for translation - at run time a paragraph at a time. Consequently, they are presented here - for translation a paragraph at a time. - - ALSO: often the description for an option will reference another option - by name. These are set off with apostrophe quotes (I hope). Do not - translate option names. - */ - /* referenced via srptoolOptions.pzCopyright */ - puts(_("srptool @VERSION@\n\ -Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n\ -This is free software. It is licensed for use, modification and\n\ -redistribution under the terms of the GNU General Public License,\n\ -version 3 or later \n")); - - /* referenced via srptoolOptions.pzCopyNotice */ - puts(_("srptool is free software: you can redistribute it and/or modify it under\n\ -the terms of the GNU General Public License as published by the Free\n\ -Software Foundation, either version 3 of the License, or (at your option)\n\ -any later version.\n\n")); - puts(_("srptool is distributed in the hope that it will be useful, but WITHOUT ANY\n\ -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\ -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n\ -details.\n\n")); - puts(_("You should have received a copy of the GNU General Public License along\n\ -with this program. If not, see .\n")); - - /* referenced via srptoolOptions.pOptDesc->pzText */ - puts(_("Enable debugging")); - - /* referenced via srptoolOptions.pOptDesc->pzText */ - puts(_("specify the index of the group parameters in tpasswd.conf to use")); - - /* referenced via srptoolOptions.pOptDesc->pzText */ - puts(_("specify a username")); - - /* referenced via srptoolOptions.pOptDesc->pzText */ - puts(_("specify a password file")); - - /* referenced via srptoolOptions.pOptDesc->pzText */ - puts(_("specify salt size")); - - /* referenced via srptoolOptions.pOptDesc->pzText */ - puts(_("just verify the password.")); - - /* referenced via srptoolOptions.pOptDesc->pzText */ - puts(_("specify a password conf file.")); - - /* referenced via srptoolOptions.pOptDesc->pzText */ - puts(_("Generate a password configuration file.")); - - /* referenced via srptoolOptions.pOptDesc->pzText */ - puts(_("display extended usage information and exit")); - - /* referenced via srptoolOptions.pOptDesc->pzText */ - puts(_("extended usage information passed thru pager")); - - /* referenced via srptoolOptions.pOptDesc->pzText */ - puts(_("output version information and exit")); - - /* referenced via srptoolOptions.pzUsageTitle */ - puts(_("srptool - GnuTLS SRP tool\n\ -Usage: %s [ - [] | --[{=| }] ]...\n")); - - /* referenced via srptoolOptions.pzExplain */ - puts(_("\n")); - - /* referenced via srptoolOptions.pzDetail */ - puts(_("Simple program that emulates the programs in the Stanford SRP (Secure\n\ -Remote Password) libraries using GnuTLS. It is intended for use in places\n\ -where you don't expect SRP authentication to be the used for system users.\n\n")); - puts(_("In brief, to use SRP you need to create two files. These are the password\n\ -file that holds the users and the verifiers associated with them and the\n\ -configuration file to hold the group parameters (called tpasswd.conf).\n")); - - /* referenced via srptoolOptions.pzFullVersion */ - puts(_("srptool @VERSION@")); - - /* referenced via srptoolOptions.pzFullUsage */ - puts(_("<<>>")); - - /* referenced via srptoolOptions.pzShortUsage */ - puts(_("srptool [options]\n\ -srptool --help for usage instructions.\n")); - /* LIBOPTS-MESSAGES: */ -#line 67 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" - puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" - puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" - puts(_("Automated Options Processing Error!\n" - "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" - puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" - puts(_("\tThis is less than the minimum library version: ")); -#line 121 "../version.c" - puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" - puts(_("(AutoOpts bug): %s.\n")); -#line 90 "../reset.c" - puts(_("optionResetOpt() called, but reset-option not configured")); -#line 295 "../usage.c" - puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" - puts(_("optionProcess() was called with invalid data")); -#line 751 "../usage.c" - puts(_("invalid argument type specified")); -#line 598 "../find.c" - puts(_("defaulted to option with optional arg")); -#line 76 "../alias.c" - puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" - puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" - puts(_(" The following options match:\n")); -#line 293 "../find.c" - puts(_("%s: ambiguous option name: %s (matches %d options)\n")); -#line 161 "../check.c" - puts(_("%s: Command line arguments required\n")); -#line 43 "../alias.c" - puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" - puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" - puts(_("interprocess pipe")); -#line 168 "../version.c" - puts(_("error: version option argument '%c' invalid. Use:\n" - "\t'v' - version only\n" - "\t'c' - version and copyright\n" - "\t'n' - version and full copyright notice\n")); -#line 58 "../check.c" - puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 38 "../alias.c" - puts(_("-equivalence")); -#line 469 "../find.c" - puts(_("%s: illegal option -- %c\n")); -#line 110 "../reset.c" - puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 118 "../reset.c" - puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" - puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 750 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 1084 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" - puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" - puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" - puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" - "\t'%s' and '%s'.")); -#line 94 "../check.c" - puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" - puts(_("%s: The '%s' option cannot have an argument.\n")); -#line 151 "../check.c" - puts(_("%s: Command line arguments are not allowed.\n")); -#line 536 "../save.c" - puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" - puts(_("%s error: '%s' does not match any %s keywords.\n")); -#line 93 "../reset.c" - puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 239 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 143 "../restore.c" - puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" - puts(_("'%s' is not a command line option.\n")); -#line 113 "../time.c" - puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); -#line 50 "../time.c" - puts(_("%s error: '%s' is not a recognizable time duration.\n")); -#line 92 "../check.c" - puts(_("%s error: The %s option must appear %d times.\n")); -#line 165 "../numeric.c" - puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" - puts(_("%s error: %s exceeds %s keyword count\n")); -#line 333 "../usage.c" - puts(_("Try '%s %s' for more information.\n")); -#line 45 "../alias.c" - puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" - puts(_("standard output")); -#line 943 "../makeshell.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard output")); -#line 418 "../usage.c" - puts(_("standard output")); -#line 628 "../usage.c" - puts(_("standard output")); -#line 175 "../version.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard error")); -#line 418 "../usage.c" - puts(_("standard error")); -#line 628 "../usage.c" - puts(_("standard error")); -#line 175 "../version.c" - puts(_("standard error")); -#line 208 "../makeshell.c" - puts(_("write")); -#line 943 "../makeshell.c" - puts(_("write")); -#line 276 "../usage.c" - puts(_("write")); -#line 417 "../usage.c" - puts(_("write")); -#line 627 "../usage.c" - puts(_("write")); -#line 174 "../version.c" - puts(_("write")); -#line 60 "../numeric.c" - puts(_("%s error: %s option value %ld is out of range.\n")); -#line 44 "../check.c" - puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 238 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 257 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 535 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); - /* END-LIBOPTS-MESSAGES */ - - /* USAGE-TEXT: */ -#line 876 "../usage.c" - puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1151 "../usage.c" - puts(_("Version, usage and configuration options:")); -#line 927 "../usage.c" - puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 840 "../usage.c" - puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1120 "../usage.c" - puts(_(" --- %-14s %s\n")); -#line 1118 "../usage.c" - puts(_("This option has been disabled")); -#line 867 "../usage.c" - puts(_("\t\t\t\t- enabled by default\n")); -#line 40 "../alias.c" - puts(_("%s error: only ")); -#line 1197 "../usage.c" - puts(_(" - examining environment variables named %s_*\n")); -#line 168 "../file.c" - puts(_("\t\t\t\t- file must not pre-exist\n")); -#line 172 "../file.c" - puts(_("\t\t\t\t- file must pre-exist\n")); -#line 383 "../usage.c" - puts(_("Options are specified by doubled hyphens and their name or by a single\n" - "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" - puts(_("\n" - "= = = = = = = =\n\n" - "This incarnation of genshell will produce\n" - "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" - puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 900 "../usage.c" - puts(_("\t\t\t\t- is a set membership option\n")); -#line 921 "../usage.c" - puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 385 "../usage.c" - puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 907 "../usage.c" - puts(_("\t\t\t\t- may appear multiple times\n")); -#line 894 "../usage.c" - puts(_("\t\t\t\t- may not be preset\n")); -#line 1312 "../usage.c" - puts(_(" Arg Option-Name Description\n")); -#line 1248 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1306 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1307 "../usage.c" - puts(_(" %3s %s")); -#line 1313 "../usage.c" - puts(_(" %3s %s")); -#line 390 "../usage.c" - puts(_("The '-#' option may omit the hash char\n")); -#line 386 "../usage.c" - puts(_("All arguments are named options.\n")); -#line 974 "../usage.c" - puts(_(" - reading file %s")); -#line 412 "../usage.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 100 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 129 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 906 "../usage.c" - puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 947 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 1195 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 685 "../usage.c" - puts(_("prohibits these options:\n")); -#line 680 "../usage.c" - puts(_("prohibits the option '%s'\n")); -#line 81 "../numeric.c" - puts(_("%s%ld to %ld")); -#line 79 "../numeric.c" - puts(_("%sgreater than or equal to %ld")); -#line 75 "../numeric.c" - puts(_("%s%ld exactly")); -#line 68 "../numeric.c" - puts(_("%sit must lie in one of the ranges:\n")); -#line 68 "../numeric.c" - puts(_("%sit must be in the range:\n")); -#line 88 "../numeric.c" - puts(_(", or\n")); -#line 66 "../numeric.c" - puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); -#line 77 "../numeric.c" - puts(_("%sless than or equal to %ld")); -#line 393 "../usage.c" - puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 655 "../usage.c" - puts(_("requires the option '%s'\n")); -#line 658 "../usage.c" - puts(_("requires these options:\n")); -#line 1324 "../usage.c" - puts(_(" Arg Option-Name Req? Description\n")); -#line 1318 "../usage.c" - puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" - puts(_("or you may use a numeric representation. Preceding these with a '!'\n" - "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" - "will set them all. Multiple entries may be passed as an option\n" - "argument list.\n")); -#line 913 "../usage.c" - puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" - puts(_("The valid \"%s\" option keywords are:\n")); -#line 1155 "../usage.c" - puts(_("The next option supports vendor supported extra options:")); -#line 776 "../usage.c" - puts(_("These additional options are:")); - /* END-USAGE-TEXT */ -} -#endif /* uncompilable code */ -#ifdef __cplusplus -} -#endif -/* srptool-args.c ends here */ diff --git a/src/srptool-args.def b/src/srptool-args.def index c6fdd714d9..67e3a8c9d2 100644 --- a/src/srptool-args.def +++ b/src/srptool-args.def @@ -19,7 +19,7 @@ flag = { name = index; value = i; arg-type = number; - arg-default = 1; + arg-default = 3; descrip = "specify the index of the group parameters in tpasswd.conf to use"; doc = ""; }; diff --git a/src/srptool-args.h.bak b/src/srptool-args.h.bak deleted file mode 100644 index 6abdea8796..0000000000 --- a/src/srptool-args.h.bak +++ /dev/null @@ -1,231 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (srptool-args.h) - * - * It has been AutoGen-ed - * From the definitions srptool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This header file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the srptool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The srptool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * srptool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * srptool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -/** - * This file contains the programmatic interface to the Automated - * Options generated for the srptool program. - * These macros are documented in the AutoGen info file in the - * "AutoOpts" chapter. Please refer to that doc for usage help. - */ -#ifndef AUTOOPTS_SRPTOOL_ARGS_H_GUARD -#define AUTOOPTS_SRPTOOL_ARGS_H_GUARD 1 -#include "config.h" -#include - -/** - * Ensure that the library used for compiling this generated header is at - * least as new as the version current when the header template was released - * (not counting patch version increments). Also ensure that the oldest - * tolerable version is at least as old as what was current when the header - * template was released. - */ -#define AO_TEMPLATE_VERSION 167937 -#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ - || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) -# error option template version mismatches autoopts/options.h header - Choke Me. -#endif - -/** - * Enumeration of each option type for srptool - */ -typedef enum { - INDEX_OPT_DEBUG = 0, - INDEX_OPT_INDEX = 1, - INDEX_OPT_USERNAME = 2, - INDEX_OPT_PASSWD = 3, - INDEX_OPT_SALT = 4, - INDEX_OPT_VERIFY = 5, - INDEX_OPT_PASSWD_CONF = 6, - INDEX_OPT_CREATE_CONF = 7, - INDEX_OPT_VERSION = 8, - INDEX_OPT_HELP = 9, - INDEX_OPT_MORE_HELP = 10 -} teOptIndex; -/** count of all options for srptool */ -#define OPTION_CT 11 -/** srptool version */ -#define SRPTOOL_VERSION "@VERSION@" -/** Full srptool version text */ -#define SRPTOOL_FULL_VERSION "srptool @VERSION@" - -/** - * Interface defines for all options. Replace "n" with the UPPER_CASED - * option name (as in the teOptIndex enumeration above). - * e.g. HAVE_OPT(DEBUG) - */ -#define DESC(n) (srptoolOptions.pOptDesc[INDEX_OPT_## n]) -/** 'true' if an option has been specified in any way */ -#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) -/** The string argument to an option. The argument type must be \"string\". */ -#define OPT_ARG(n) (DESC(n).optArg.argString) -/** Mask the option state revealing how an option was specified. - * It will be one and only one of \a OPTST_SET, \a OPTST_PRESET, - * \a OPTST_DEFINED, \a OPTST_RESET or zero. - */ -#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) -/** Count of option's occurrances *on the command line*. */ -#define COUNT_OPT(n) (DESC(n).optOccCt) -/** mask of \a OPTST_SET and \a OPTST_DEFINED. */ -#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) -/** 'true' if \a HAVE_OPT would yield 'false'. */ -#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) -/** 'true' if OPTST_DISABLED bit not set. */ -#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) -/** number of stacked option arguments. - * Valid only for stacked option arguments. */ -#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) -/** stacked argument vector. - * Valid only for stacked option arguments. */ -#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) -/** Reset an option. */ -#define CLEAR_OPT(n) STMTS( \ - DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ - if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \ - DESC(n).fOptState |= OPTST_DISABLED; \ - DESC(n).optCookie = NULL ) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Enumeration of srptool exit codes - */ -typedef enum { - SRPTOOL_EXIT_SUCCESS = 0, - SRPTOOL_EXIT_FAILURE = 1, - SRPTOOL_EXIT_USAGE_ERROR = 64, - SRPTOOL_EXIT_LIBOPTS_FAILURE = 70 -} srptool_exit_code_t; -/** - * Interface defines for specific options. - * @{ - */ -#define VALUE_OPT_DEBUG 'd' - -#define OPT_VALUE_DEBUG (DESC(DEBUG).optArg.argInt) -#define VALUE_OPT_INDEX 'i' - -#define OPT_VALUE_INDEX (DESC(INDEX).optArg.argInt) -#define VALUE_OPT_USERNAME 'u' -#define VALUE_OPT_PASSWD 'p' -#define VALUE_OPT_SALT 's' - -#define OPT_VALUE_SALT (DESC(SALT).optArg.argInt) -#define VALUE_OPT_VERIFY 0x1001 -#define VALUE_OPT_PASSWD_CONF 'v' -#define VALUE_OPT_CREATE_CONF 0x1002 -/** option flag (value) for help-value option */ -#define VALUE_OPT_HELP 'h' -/** option flag (value) for more-help-value option */ -#define VALUE_OPT_MORE_HELP '!' -/** option flag (value) for version-value option */ -#define VALUE_OPT_VERSION 'v' -/* - * Interface defines not associated with particular options - */ -#define ERRSKIP_OPTERR STMTS(srptoolOptions.fOptSet &= ~OPTPROC_ERRSTOP) -#define ERRSTOP_OPTERR STMTS(srptoolOptions.fOptSet |= OPTPROC_ERRSTOP) -#define RESTART_OPT(n) STMTS( \ - srptoolOptions.curOptIdx = (n); \ - srptoolOptions.pzCurOpt = NULL ) -#define START_OPT RESTART_OPT(1) -#define USAGE(c) (*srptoolOptions.pUsageProc)(&srptoolOptions, c) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * global exported definitions - */ -#include - - -/* * * * * * - * - * Declare the srptool option descriptor. - */ -extern tOptions srptoolOptions; - -#if defined(ENABLE_NLS) -# ifndef _ -# include -# ifndef HAVE_GETTEXT - extern char * gettext(char const *); -# else -# include -# endif - -# ifndef ATTRIBUTE_FORMAT_ARG -# define ATTRIBUTE_FORMAT_ARG(_a) -# endif - -static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1); -static inline char* aoGetsText(char const* pz) { - if (pz == NULL) return NULL; - return (char*)gettext(pz); -} -# define _(s) aoGetsText(s) -# endif /* _() */ - -# define OPT_NO_XLAT_CFG_NAMES STMTS(srptoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT_CFG;) -# define OPT_NO_XLAT_OPT_NAMES STMTS(srptoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;) - -# define OPT_XLAT_CFG_NAMES STMTS(srptoolOptions.fOptSet &= \ - ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);) -# define OPT_XLAT_OPT_NAMES STMTS(srptoolOptions.fOptSet &= \ - ~OPTPROC_NXLAT_OPT;) - -#else /* ENABLE_NLS */ -# define OPT_NO_XLAT_CFG_NAMES -# define OPT_NO_XLAT_OPT_NAMES - -# define OPT_XLAT_CFG_NAMES -# define OPT_XLAT_OPT_NAMES - -# ifndef _ -# define _(_s) _s -# endif -#endif /* ENABLE_NLS */ - -#ifdef __cplusplus -} -#endif -#endif /* AUTOOPTS_SRPTOOL_ARGS_H_GUARD */ - -/* srptool-args.h ends here */ diff --git a/src/srptool.c b/src/srptool.c index e2311179c0..27821be238 100644 --- a/src/srptool.c +++ b/src/srptool.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -76,7 +76,7 @@ static int generate_create_conf(const char *tpasswd_conf) { FILE *fd; char line[5 * 1024]; - int index = 1; + int index = 1, srp_idx; gnutls_datum_t g, n; gnutls_datum_t str_g, str_n; @@ -89,26 +89,31 @@ static int generate_create_conf(const char *tpasswd_conf) for (index = 1; index <= 5; index++) { if (index == 1) { - n = gnutls_srp_1024_group_prime; - g = gnutls_srp_1024_group_generator; - } else if (index == 2) { + srp_idx = 2; n = gnutls_srp_1536_group_prime; g = gnutls_srp_1536_group_generator; - } else if (index == 3) { + } else if (index == 2) { + srp_idx = 3; n = gnutls_srp_2048_group_prime; g = gnutls_srp_2048_group_generator; - } else if (index == 4) { + } else if (index == 3) { + srp_idx = 4; n = gnutls_srp_3072_group_prime; g = gnutls_srp_3072_group_generator; - } else if (index == 5) { + } else if (index == 4) { + srp_idx = 5; n = gnutls_srp_4096_group_prime; g = gnutls_srp_4096_group_generator; + } else if (index == 5) { + srp_idx = 7; + n = gnutls_srp_8192_group_prime; + g = gnutls_srp_8192_group_generator; } else { fprintf(stderr, "Unknown index: %d\n", index); return -1; } - printf("\nGroup %d, of %d bits:\n", index, n.size * 8); + printf("\nGroup %d, of %d bits:\n", srp_idx, n.size * 8); print_num("Generator", &g); print_num("Prime", &n); @@ -124,7 +129,7 @@ static int generate_create_conf(const char *tpasswd_conf) return -1; } - sprintf(line, "%d:%s:%s\n", index, str_n.data, str_g.data); + sprintf(line, "%d:%s:%s\n", srp_idx, str_n.data, str_g.data); gnutls_free(str_n.data); gnutls_free(str_g.data); @@ -381,7 +386,6 @@ int main(int argc, char **argv) { const char *passwd; int salt_size, ret; - int optct; const char *fpasswd, *fpasswd_conf; const char *username; #ifndef _WIN32 @@ -395,9 +399,7 @@ int main(int argc, char **argv) umask(066); - optct = optionProcess(&srptoolOptions, argc, argv); - argc -= optct; - argv += optct; + optionProcess(&srptoolOptions, argc, argv); gnutls_global_set_log_function(tls_log_func); gnutls_global_set_log_level(OPT_VALUE_DEBUG); diff --git a/src/systemkey-args.c.bak b/src/systemkey-args.c.bak deleted file mode 100644 index 7f0f872ab5..0000000000 --- a/src/systemkey-args.c.bak +++ /dev/null @@ -1,1058 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (systemkey-args.c) - * - * It has been AutoGen-ed - * From the definitions systemkey-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This source file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the systemkey-tool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The systemkey-tool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * systemkey-tool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * systemkey-tool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef __doxygen__ -#define OPTION_CODE_COMPILE 1 -#include "systemkey-args.h" -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern FILE * option_usage_fp; -#define zCopyright (systemkey_tool_opt_strs+0) -#define zLicenseDescrip (systemkey_tool_opt_strs+295) - - -#ifndef NULL -# define NULL 0 -#endif - -/** - * static const strings for systemkey-tool options - */ -static char const systemkey_tool_opt_strs[1642] = -/* 0 */ "systemkey-tool @VERSION@\n" - "Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n" - "This is free software. It is licensed for use, modification and\n" - "redistribution under the terms of the GNU General Public License,\n" - "version 3 or later \n\0" -/* 295 */ "systemkey-tool is free software: you can redistribute it and/or modify it\n" - "under the terms of the GNU General Public License as published by the Free\n" - "Software Foundation, either version 3 of the License, or (at your option)\n" - "any later version.\n\n" - "systemkey-tool is distributed in the hope that it will be useful, but\n" - "WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n" - "or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\n" - "for more details.\n\n" - "You should have received a copy of the GNU General Public License along\n" - "with this program. If not, see .\n\0" -/* 912 */ "Enable debugging\0" -/* 929 */ "DEBUG\0" -/* 935 */ "debug\0" -/* 941 */ "Input file\0" -/* 952 */ "INFILE\0" -/* 959 */ "infile\0" -/* 966 */ "Output file\0" -/* 978 */ "OUTFILE\0" -/* 986 */ "outfile\0" -/* 994 */ "Lists all stored keys.\0" -/* 1017 */ "LIST\0" -/* 1022 */ "list\0" -/* 1027 */ "Delete the key identified by the given URL.\0" -/* 1071 */ "DELETE\0" -/* 1078 */ "delete\0" -/* 1085 */ "Use the DER format for keys.\0" -/* 1114 */ "INDER\0" -/* 1120 */ "no-inder\0" -/* 1129 */ "no\0" -/* 1132 */ "Use DER format for output keys\0" -/* 1163 */ "OUTDER\0" -/* 1170 */ "no-outder\0" -/* 1180 */ "display extended usage information and exit\0" -/* 1224 */ "help\0" -/* 1229 */ "extended usage information passed thru pager\0" -/* 1274 */ "more-help\0" -/* 1284 */ "output version information and exit\0" -/* 1320 */ "version\0" -/* 1328 */ "SYSTEMKEY_TOOL\0" -/* 1343 */ "systemkey-tool - GnuTLS system key tool\n" - "Usage: %s [ - [] | --[{=| }] ]...\n\0" -/* 1441 */ "@PACKAGE_BUGREPORT@\0" -/* 1461 */ "\n\0" -/* 1463 */ "Program that allows handling user keys as stored in the system in a uniform\n" - "way.\n\0" -/* 1545 */ "systemkey-tool @VERSION@\0" -/* 1570 */ "systemkey-tool [options]\n" - "systemkey-tool --help for usage instructions.\n"; - -/** - * debug option description: - */ -/** Descriptive text for the debug option */ -#define DEBUG_DESC (systemkey_tool_opt_strs+912) -/** Upper-cased name for the debug option */ -#define DEBUG_NAME (systemkey_tool_opt_strs+929) -/** Name string for the debug option */ -#define DEBUG_name (systemkey_tool_opt_strs+935) -/** Compiled in flag settings for the debug option */ -#define DEBUG_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * infile option description: - */ -/** Descriptive text for the infile option */ -#define INFILE_DESC (systemkey_tool_opt_strs+941) -/** Upper-cased name for the infile option */ -#define INFILE_NAME (systemkey_tool_opt_strs+952) -/** Name string for the infile option */ -#define INFILE_name (systemkey_tool_opt_strs+959) -/** Compiled in flag settings for the infile option */ -#define INFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * outfile option description: - */ -/** Descriptive text for the outfile option */ -#define OUTFILE_DESC (systemkey_tool_opt_strs+966) -/** Upper-cased name for the outfile option */ -#define OUTFILE_NAME (systemkey_tool_opt_strs+978) -/** Name string for the outfile option */ -#define OUTFILE_name (systemkey_tool_opt_strs+986) -/** Compiled in flag settings for the outfile option */ -#define OUTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * list option description: - */ -/** Descriptive text for the list option */ -#define LIST_DESC (systemkey_tool_opt_strs+994) -/** Upper-cased name for the list option */ -#define LIST_NAME (systemkey_tool_opt_strs+1017) -/** Name string for the list option */ -#define LIST_name (systemkey_tool_opt_strs+1022) -/** Compiled in flag settings for the list option */ -#define LIST_FLAGS (OPTST_DISABLED) - -/** - * delete option description: - */ -/** Descriptive text for the delete option */ -#define DELETE_DESC (systemkey_tool_opt_strs+1027) -/** Upper-cased name for the delete option */ -#define DELETE_NAME (systemkey_tool_opt_strs+1071) -/** Name string for the delete option */ -#define DELETE_name (systemkey_tool_opt_strs+1078) -/** Compiled in flag settings for the delete option */ -#define DELETE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * inder option description: - */ -/** Descriptive text for the inder option */ -#define INDER_DESC (systemkey_tool_opt_strs+1085) -/** Upper-cased name for the inder option */ -#define INDER_NAME (systemkey_tool_opt_strs+1114) -/** disablement name for the inder option */ -#define NOT_INDER_name (systemkey_tool_opt_strs+1120) -/** disablement prefix for the inder option */ -#define NOT_INDER_PFX (systemkey_tool_opt_strs+1129) -/** Name string for the inder option */ -#define INDER_name (NOT_INDER_name + 3) -/** Compiled in flag settings for the inder option */ -#define INDER_FLAGS (OPTST_DISABLED) - -/** - * outder option description: - */ -/** Descriptive text for the outder option */ -#define OUTDER_DESC (systemkey_tool_opt_strs+1132) -/** Upper-cased name for the outder option */ -#define OUTDER_NAME (systemkey_tool_opt_strs+1163) -/** disablement name for the outder option */ -#define NOT_OUTDER_name (systemkey_tool_opt_strs+1170) -/** disablement prefix for the outder option */ -#define NOT_OUTDER_PFX (systemkey_tool_opt_strs+1129) -/** Name string for the outder option */ -#define OUTDER_name (NOT_OUTDER_name + 3) -/** Compiled in flag settings for the outder option */ -#define OUTDER_FLAGS (OPTST_DISABLED) - -/* - * Help/More_Help/Version option descriptions: - */ -#define HELP_DESC (systemkey_tool_opt_strs+1180) -#define HELP_name (systemkey_tool_opt_strs+1224) -#ifdef HAVE_WORKING_FORK -#define MORE_HELP_DESC (systemkey_tool_opt_strs+1229) -#define MORE_HELP_name (systemkey_tool_opt_strs+1274) -#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -#define MORE_HELP_DESC HELP_DESC -#define MORE_HELP_name HELP_name -#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT) -#endif -#ifdef NO_OPTIONAL_OPT_ARGS -# define VER_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ - OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT) -#endif -#define VER_DESC (systemkey_tool_opt_strs+1284) -#define VER_name (systemkey_tool_opt_strs+1320) -/** - * Declare option callback procedures - */ -extern tOptProc - optionBooleanVal, optionNestedVal, optionNumericVal, - optionPagedUsage, optionPrintVersion, optionResetOpt, - optionStackArg, optionTimeDate, optionTimeVal, - optionUnstackArg, optionVendorOption; -static tOptProc - doOptDebug, doOptInfile, doUsageOpt; -#define VER_PROC optionPrintVersion - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Define the systemkey-tool Option Descriptions. - * This is an array of OPTION_CT entries, one for each - * option that the systemkey-tool program responds to. - */ -static tOptDesc optDesc[OPTION_CT] = { - { /* entry idx, value */ 0, VALUE_OPT_DEBUG, - /* equiv idx, value */ 0, VALUE_OPT_DEBUG, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DEBUG_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --debug */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDebug, - /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 1, VALUE_OPT_INFILE, - /* equiv idx, value */ 1, VALUE_OPT_INFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --infile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptInfile, - /* desc, NAME, name */ INFILE_DESC, INFILE_NAME, INFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 2, VALUE_OPT_OUTFILE, - /* equiv idx, value */ 2, VALUE_OPT_OUTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OUTFILE_DESC, OUTFILE_NAME, OUTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 3, VALUE_OPT_LIST, - /* equiv idx, value */ 3, VALUE_OPT_LIST, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_DESC, LIST_NAME, LIST_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 4, VALUE_OPT_DELETE, - /* equiv idx, value */ 4, VALUE_OPT_DELETE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DELETE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --delete */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DELETE_DESC, DELETE_NAME, DELETE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 5, VALUE_OPT_INDER, - /* equiv idx, value */ 5, VALUE_OPT_INDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --inder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INDER_DESC, INDER_NAME, INDER_name, - /* disablement strs */ NOT_INDER_name, NOT_INDER_PFX }, - - { /* entry idx, value */ 6, VALUE_OPT_OUTDER, - /* equiv idx, value */ 6, VALUE_OPT_OUTDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OUTDER_DESC, OUTDER_NAME, OUTDER_name, - /* disablement strs */ NOT_OUTDER_name, NOT_OUTDER_PFX }, - - { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VER_FLAGS, AOUSE_VERSION, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ VER_PROC, - /* desc, NAME, name */ VER_DESC, NULL, VER_name, - /* disablement strs */ NULL, NULL }, - - - - { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doUsageOpt, - /* desc, NAME, name */ HELP_DESC, NULL, HELP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionPagedUsage, - /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name, - /* disablement strs */ NULL, NULL } -}; - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** Reference to the upper cased version of systemkey-tool. */ -#define zPROGNAME (systemkey_tool_opt_strs+1328) -/** Reference to the title line for systemkey-tool usage. */ -#define zUsageTitle (systemkey_tool_opt_strs+1343) -/** There is no systemkey-tool configuration file. */ -#define zRcName NULL -/** There are no directories to search for systemkey-tool config files. */ -#define apzHomeList NULL -/** The systemkey-tool program bug email address. */ -#define zBugsAddr (systemkey_tool_opt_strs+1441) -/** Clarification/explanation of what systemkey-tool does. */ -#define zExplain (systemkey_tool_opt_strs+1461) -/** Extra detail explaining what systemkey-tool does. */ -#define zDetail (systemkey_tool_opt_strs+1463) -/** The full version string for systemkey-tool. */ -#define zFullVersion (systemkey_tool_opt_strs+1545) -/* extracted from optcode.tlib near line 364 */ - -#if defined(ENABLE_NLS) -# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT - static tOptionXlateProc translate_option_strings; -#else -# define OPTPROC_BASE OPTPROC_NONE -# define translate_option_strings NULL -#endif /* ENABLE_NLS */ - -#define systemkey_tool_full_usage (NULL) -#define systemkey_tool_short_usage (systemkey_tool_opt_strs+1570) - -#endif /* not defined __doxygen__ */ - -/* - * Create the static procedure(s) declared above. - */ -/** - * The callout function that invokes the optionUsage function. - * - * @param[in] opts the AutoOpts option description structure - * @param[in] od the descriptor for the "help" (usage) option. - * @noreturn - */ -static void -doUsageOpt(tOptions * opts, tOptDesc * od) -{ - int ex_code; - ex_code = SYSTEMKEY_TOOL_EXIT_SUCCESS; - optionUsage(&systemkey_toolOptions, ex_code); - /* NOTREACHED */ - exit(SYSTEMKEY_TOOL_EXIT_FAILURE); - (void)opts; - (void)od; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the debug option. - * Specifies the debug level. - * @param[in] pOptions the systemkey-tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 9999 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the infile option. - * - * @param[in] pOptions the systemkey-tool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptInfile(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} -/* extracted from optmain.tlib near line 1250 */ - -/** - * The directory containing the data associated with systemkey-tool. - */ -#ifndef PKGDATADIR -# define PKGDATADIR "" -#endif - -/** - * Information about the person or institution that packaged systemkey-tool - * for the current distribution. - */ -#ifndef WITH_PACKAGER -# define systemkey_tool_packager_info NULL -#else -/** Packager information for systemkey-tool. */ -static char const systemkey_tool_packager_info[] = - "Packaged by " WITH_PACKAGER - -# ifdef WITH_PACKAGER_VERSION - " ("WITH_PACKAGER_VERSION")" -# endif - -# ifdef WITH_PACKAGER_BUG_REPORTS - "\nReport systemkey_tool bugs to " WITH_PACKAGER_BUG_REPORTS -# endif - "\n"; -#endif -#ifndef __doxygen__ - -#endif /* __doxygen__ */ -/** - * The option definitions for systemkey-tool. The one structure that - * binds them all. - */ -tOptions systemkey_toolOptions = { - OPTIONS_STRUCT_VERSION, - 0, NULL, /* original argc + argv */ - ( OPTPROC_BASE - + OPTPROC_ERRSTOP - + OPTPROC_SHORTOPT - + OPTPROC_LONGOPT - + OPTPROC_NO_REQ_OPT - + OPTPROC_NEGATIONS - + OPTPROC_NO_ARGS - + OPTPROC_GNUUSAGE - + OPTPROC_MISUSE ), - 0, NULL, /* current option index, current option */ - NULL, NULL, zPROGNAME, - zRcName, zCopyright, zLicenseDescrip, - zFullVersion, apzHomeList, zUsageTitle, - zExplain, zDetail, optDesc, - zBugsAddr, /* address to send bugs to */ - NULL, NULL, /* extensions/saved state */ - optionUsage, /* usage procedure */ - translate_option_strings, /* translation procedure */ - /* - * Indexes to special options - */ - { INDEX_OPT_MORE_HELP, /* more-help option index */ - NO_EQUIVALENT, /* save option index */ - NO_EQUIVALENT, /* '-#' option index */ - NO_EQUIVALENT /* index of default opt */ - }, - 10 /* full option count */, 7 /* user option count */, - systemkey_tool_full_usage, systemkey_tool_short_usage, - NULL, NULL, - PKGDATADIR, systemkey_tool_packager_info -}; - -#if ENABLE_NLS -/** - * This code is designed to translate translatable option text for the - * systemkey-tool program. These translations happen upon entry - * to optionProcess(). - */ -#include -#include -#include -#include -#ifdef HAVE_DCGETTEXT -# include -#endif -#include - -static char * AO_gettext(char const * pz); -static void coerce_it(void ** s); - -/** - * AutoGen specific wrapper function for gettext. It relies on the macro _() - * to convert from English to the target language, then strdup-duplicates the - * result string. It tries the "libopts" domain first, then whatever has been - * set via the \a textdomain(3) call. - * - * @param[in] pz the input text used as a lookup key. - * @returns the translated text (if there is one), - * or the original text (if not). - */ -static char * -AO_gettext(char const * pz) -{ - char * res; - if (pz == NULL) - return NULL; -#ifdef HAVE_DCGETTEXT - /* - * While processing the option_xlateable_txt data, try to use the - * "libopts" domain. Once we switch to the option descriptor data, - * do *not* use that domain. - */ - if (option_xlateable_txt.field_ct != 0) { - res = dgettext("libopts", pz); - if (res == pz) - res = (char *)VOIDP(_(pz)); - } else - res = (char *)VOIDP(_(pz)); -#else - res = (char *)VOIDP(_(pz)); -#endif - if (res == pz) - return res; - res = strdup(res); - if (res == NULL) { - fputs(_("No memory for duping translated strings\n"), stderr); - exit(SYSTEMKEY_TOOL_EXIT_FAILURE); - } - return res; -} - -/** - * All the pointers we use are marked "* const", but they are stored in - * writable memory. Coerce the mutability and set the pointer. - */ -static void coerce_it(void ** s) { *s = AO_gettext(*s); -} - -/** - * Translate all the translatable strings in the systemkey_toolOptions - * structure defined above. This is done only once. - */ -static void -translate_option_strings(void) -{ - tOptions * const opts = &systemkey_toolOptions; - - /* - * Guard against re-translation. It won't work. The strings will have - * been changed by the first pass through this code. One shot only. - */ - if (option_xlateable_txt.field_ct != 0) { - /* - * Do the translations. The first pointer follows the field count - * field. The field count field is the size of a pointer. - */ - char ** ppz = (char**)VOIDP(&(option_xlateable_txt)); - int ix = option_xlateable_txt.field_ct; - - do { - ppz++; /* skip over field_ct */ - *ppz = AO_gettext(*ppz); - } while (--ix > 0); - /* prevent re-translation and disable "libopts" domain lookup */ - option_xlateable_txt.field_ct = 0; - - coerce_it(VOIDP(&(opts->pzCopyright))); - coerce_it(VOIDP(&(opts->pzCopyNotice))); - coerce_it(VOIDP(&(opts->pzFullVersion))); - coerce_it(VOIDP(&(opts->pzUsageTitle))); - coerce_it(VOIDP(&(opts->pzExplain))); - coerce_it(VOIDP(&(opts->pzDetail))); - { - tOptDesc * od = opts->pOptDesc; - for (ix = opts->optCt; ix > 0; ix--, od++) - coerce_it(VOIDP(&(od->pzText))); - } - } -} -#endif /* ENABLE_NLS */ - -#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT -/** I18N function strictly for xgettext. Do not compile. */ -static void bogus_function(void) { - /* TRANSLATORS: - - The following dummy function was crated solely so that xgettext can - extract the correct strings. These strings are actually referenced - by a field name in the systemkey_toolOptions structure noted in the - comments below. The literal text is defined in systemkey_tool_opt_strs. - - NOTE: the strings below are segmented with respect to the source string - systemkey_tool_opt_strs. The strings above are handed off for translation - at run time a paragraph at a time. Consequently, they are presented here - for translation a paragraph at a time. - - ALSO: often the description for an option will reference another option - by name. These are set off with apostrophe quotes (I hope). Do not - translate option names. - */ - /* referenced via systemkey_toolOptions.pzCopyright */ - puts(_("systemkey-tool @VERSION@\n\ -Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n\ -This is free software. It is licensed for use, modification and\n\ -redistribution under the terms of the GNU General Public License,\n\ -version 3 or later \n")); - - /* referenced via systemkey_toolOptions.pzCopyNotice */ - puts(_("systemkey-tool is free software: you can redistribute it and/or modify it\n\ -under the terms of the GNU General Public License as published by the Free\n\ -Software Foundation, either version 3 of the License, or (at your option)\n\ -any later version.\n\n")); - puts(_("systemkey-tool is distributed in the hope that it will be useful, but\n\ -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n\ -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\n\ -for more details.\n\n")); - puts(_("You should have received a copy of the GNU General Public License along\n\ -with this program. If not, see .\n")); - - /* referenced via systemkey_toolOptions.pOptDesc->pzText */ - puts(_("Enable debugging")); - - /* referenced via systemkey_toolOptions.pOptDesc->pzText */ - puts(_("Input file")); - - /* referenced via systemkey_toolOptions.pOptDesc->pzText */ - puts(_("Output file")); - - /* referenced via systemkey_toolOptions.pOptDesc->pzText */ - puts(_("Lists all stored keys.")); - - /* referenced via systemkey_toolOptions.pOptDesc->pzText */ - puts(_("Delete the key identified by the given URL.")); - - /* referenced via systemkey_toolOptions.pOptDesc->pzText */ - puts(_("Use the DER format for keys.")); - - /* referenced via systemkey_toolOptions.pOptDesc->pzText */ - puts(_("Use DER format for output keys")); - - /* referenced via systemkey_toolOptions.pOptDesc->pzText */ - puts(_("display extended usage information and exit")); - - /* referenced via systemkey_toolOptions.pOptDesc->pzText */ - puts(_("extended usage information passed thru pager")); - - /* referenced via systemkey_toolOptions.pOptDesc->pzText */ - puts(_("output version information and exit")); - - /* referenced via systemkey_toolOptions.pzUsageTitle */ - puts(_("systemkey-tool - GnuTLS system key tool\n\ -Usage: %s [ - [] | --[{=| }] ]...\n")); - - /* referenced via systemkey_toolOptions.pzExplain */ - puts(_("\n")); - - /* referenced via systemkey_toolOptions.pzDetail */ - puts(_("Program that allows handling user keys as stored in the system in a uniform\n\ -way.\n")); - - /* referenced via systemkey_toolOptions.pzFullVersion */ - puts(_("systemkey-tool @VERSION@")); - - /* referenced via systemkey_toolOptions.pzFullUsage */ - puts(_("<<>>")); - - /* referenced via systemkey_toolOptions.pzShortUsage */ - puts(_("systemkey-tool [options]\n\ -systemkey-tool --help for usage instructions.\n")); - /* LIBOPTS-MESSAGES: */ -#line 67 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" - puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" - puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" - puts(_("Automated Options Processing Error!\n" - "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" - puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" - puts(_("\tThis is less than the minimum library version: ")); -#line 121 "../version.c" - puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" - puts(_("(AutoOpts bug): %s.\n")); -#line 90 "../reset.c" - puts(_("optionResetOpt() called, but reset-option not configured")); -#line 295 "../usage.c" - puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" - puts(_("optionProcess() was called with invalid data")); -#line 751 "../usage.c" - puts(_("invalid argument type specified")); -#line 598 "../find.c" - puts(_("defaulted to option with optional arg")); -#line 76 "../alias.c" - puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" - puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" - puts(_(" The following options match:\n")); -#line 293 "../find.c" - puts(_("%s: ambiguous option name: %s (matches %d options)\n")); -#line 161 "../check.c" - puts(_("%s: Command line arguments required\n")); -#line 43 "../alias.c" - puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" - puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" - puts(_("interprocess pipe")); -#line 168 "../version.c" - puts(_("error: version option argument '%c' invalid. Use:\n" - "\t'v' - version only\n" - "\t'c' - version and copyright\n" - "\t'n' - version and full copyright notice\n")); -#line 58 "../check.c" - puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 38 "../alias.c" - puts(_("-equivalence")); -#line 469 "../find.c" - puts(_("%s: illegal option -- %c\n")); -#line 110 "../reset.c" - puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 118 "../reset.c" - puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" - puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 750 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 1084 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" - puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" - puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" - puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" - "\t'%s' and '%s'.")); -#line 94 "../check.c" - puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" - puts(_("%s: The '%s' option cannot have an argument.\n")); -#line 151 "../check.c" - puts(_("%s: Command line arguments are not allowed.\n")); -#line 536 "../save.c" - puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" - puts(_("%s error: '%s' does not match any %s keywords.\n")); -#line 93 "../reset.c" - puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 239 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 143 "../restore.c" - puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" - puts(_("'%s' is not a command line option.\n")); -#line 113 "../time.c" - puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); -#line 50 "../time.c" - puts(_("%s error: '%s' is not a recognizable time duration.\n")); -#line 92 "../check.c" - puts(_("%s error: The %s option must appear %d times.\n")); -#line 165 "../numeric.c" - puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" - puts(_("%s error: %s exceeds %s keyword count\n")); -#line 333 "../usage.c" - puts(_("Try '%s %s' for more information.\n")); -#line 45 "../alias.c" - puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" - puts(_("standard output")); -#line 943 "../makeshell.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard output")); -#line 418 "../usage.c" - puts(_("standard output")); -#line 628 "../usage.c" - puts(_("standard output")); -#line 175 "../version.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard error")); -#line 418 "../usage.c" - puts(_("standard error")); -#line 628 "../usage.c" - puts(_("standard error")); -#line 175 "../version.c" - puts(_("standard error")); -#line 208 "../makeshell.c" - puts(_("write")); -#line 943 "../makeshell.c" - puts(_("write")); -#line 276 "../usage.c" - puts(_("write")); -#line 417 "../usage.c" - puts(_("write")); -#line 627 "../usage.c" - puts(_("write")); -#line 174 "../version.c" - puts(_("write")); -#line 60 "../numeric.c" - puts(_("%s error: %s option value %ld is out of range.\n")); -#line 44 "../check.c" - puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 238 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 257 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 535 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); - /* END-LIBOPTS-MESSAGES */ - - /* USAGE-TEXT: */ -#line 876 "../usage.c" - puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1151 "../usage.c" - puts(_("Version, usage and configuration options:")); -#line 927 "../usage.c" - puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 840 "../usage.c" - puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1120 "../usage.c" - puts(_(" --- %-14s %s\n")); -#line 1118 "../usage.c" - puts(_("This option has been disabled")); -#line 867 "../usage.c" - puts(_("\t\t\t\t- enabled by default\n")); -#line 40 "../alias.c" - puts(_("%s error: only ")); -#line 1197 "../usage.c" - puts(_(" - examining environment variables named %s_*\n")); -#line 168 "../file.c" - puts(_("\t\t\t\t- file must not pre-exist\n")); -#line 172 "../file.c" - puts(_("\t\t\t\t- file must pre-exist\n")); -#line 383 "../usage.c" - puts(_("Options are specified by doubled hyphens and their name or by a single\n" - "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" - puts(_("\n" - "= = = = = = = =\n\n" - "This incarnation of genshell will produce\n" - "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" - puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 900 "../usage.c" - puts(_("\t\t\t\t- is a set membership option\n")); -#line 921 "../usage.c" - puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 385 "../usage.c" - puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 907 "../usage.c" - puts(_("\t\t\t\t- may appear multiple times\n")); -#line 894 "../usage.c" - puts(_("\t\t\t\t- may not be preset\n")); -#line 1312 "../usage.c" - puts(_(" Arg Option-Name Description\n")); -#line 1248 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1306 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1307 "../usage.c" - puts(_(" %3s %s")); -#line 1313 "../usage.c" - puts(_(" %3s %s")); -#line 390 "../usage.c" - puts(_("The '-#' option may omit the hash char\n")); -#line 386 "../usage.c" - puts(_("All arguments are named options.\n")); -#line 974 "../usage.c" - puts(_(" - reading file %s")); -#line 412 "../usage.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 100 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 129 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 906 "../usage.c" - puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 947 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 1195 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 685 "../usage.c" - puts(_("prohibits these options:\n")); -#line 680 "../usage.c" - puts(_("prohibits the option '%s'\n")); -#line 81 "../numeric.c" - puts(_("%s%ld to %ld")); -#line 79 "../numeric.c" - puts(_("%sgreater than or equal to %ld")); -#line 75 "../numeric.c" - puts(_("%s%ld exactly")); -#line 68 "../numeric.c" - puts(_("%sit must lie in one of the ranges:\n")); -#line 68 "../numeric.c" - puts(_("%sit must be in the range:\n")); -#line 88 "../numeric.c" - puts(_(", or\n")); -#line 66 "../numeric.c" - puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); -#line 77 "../numeric.c" - puts(_("%sless than or equal to %ld")); -#line 393 "../usage.c" - puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 655 "../usage.c" - puts(_("requires the option '%s'\n")); -#line 658 "../usage.c" - puts(_("requires these options:\n")); -#line 1324 "../usage.c" - puts(_(" Arg Option-Name Req? Description\n")); -#line 1318 "../usage.c" - puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" - puts(_("or you may use a numeric representation. Preceding these with a '!'\n" - "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" - "will set them all. Multiple entries may be passed as an option\n" - "argument list.\n")); -#line 913 "../usage.c" - puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" - puts(_("The valid \"%s\" option keywords are:\n")); -#line 1155 "../usage.c" - puts(_("The next option supports vendor supported extra options:")); -#line 776 "../usage.c" - puts(_("These additional options are:")); - /* END-USAGE-TEXT */ -} -#endif /* uncompilable code */ -#ifdef __cplusplus -} -#endif -/* systemkey-args.c ends here */ diff --git a/src/systemkey-args.h.bak b/src/systemkey-args.h.bak deleted file mode 100644 index a7972151fa..0000000000 --- a/src/systemkey-args.h.bak +++ /dev/null @@ -1,225 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (systemkey-args.h) - * - * It has been AutoGen-ed - * From the definitions systemkey-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This header file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the systemkey-tool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The systemkey-tool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * systemkey-tool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * systemkey-tool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -/** - * This file contains the programmatic interface to the Automated - * Options generated for the systemkey-tool program. - * These macros are documented in the AutoGen info file in the - * "AutoOpts" chapter. Please refer to that doc for usage help. - */ -#ifndef AUTOOPTS_SYSTEMKEY_ARGS_H_GUARD -#define AUTOOPTS_SYSTEMKEY_ARGS_H_GUARD 1 -#include "config.h" -#include - -/** - * Ensure that the library used for compiling this generated header is at - * least as new as the version current when the header template was released - * (not counting patch version increments). Also ensure that the oldest - * tolerable version is at least as old as what was current when the header - * template was released. - */ -#define AO_TEMPLATE_VERSION 167937 -#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ - || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) -# error option template version mismatches autoopts/options.h header - Choke Me. -#endif - -/** - * Enumeration of each option type for systemkey-tool - */ -typedef enum { - INDEX_OPT_DEBUG = 0, - INDEX_OPT_INFILE = 1, - INDEX_OPT_OUTFILE = 2, - INDEX_OPT_LIST = 3, - INDEX_OPT_DELETE = 4, - INDEX_OPT_INDER = 5, - INDEX_OPT_OUTDER = 6, - INDEX_OPT_VERSION = 7, - INDEX_OPT_HELP = 8, - INDEX_OPT_MORE_HELP = 9 -} teOptIndex; -/** count of all options for systemkey-tool */ -#define OPTION_CT 10 -/** systemkey-tool version */ -#define SYSTEMKEY_TOOL_VERSION "@VERSION@" -/** Full systemkey-tool version text */ -#define SYSTEMKEY_TOOL_FULL_VERSION "systemkey-tool @VERSION@" - -/** - * Interface defines for all options. Replace "n" with the UPPER_CASED - * option name (as in the teOptIndex enumeration above). - * e.g. HAVE_OPT(DEBUG) - */ -#define DESC(n) (systemkey_toolOptions.pOptDesc[INDEX_OPT_## n]) -/** 'true' if an option has been specified in any way */ -#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) -/** The string argument to an option. The argument type must be \"string\". */ -#define OPT_ARG(n) (DESC(n).optArg.argString) -/** Mask the option state revealing how an option was specified. - * It will be one and only one of \a OPTST_SET, \a OPTST_PRESET, - * \a OPTST_DEFINED, \a OPTST_RESET or zero. - */ -#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) -/** Count of option's occurrances *on the command line*. */ -#define COUNT_OPT(n) (DESC(n).optOccCt) -/** mask of \a OPTST_SET and \a OPTST_DEFINED. */ -#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) -/** 'true' if \a HAVE_OPT would yield 'false'. */ -#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) -/** 'true' if OPTST_DISABLED bit not set. */ -#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) -/** number of stacked option arguments. - * Valid only for stacked option arguments. */ -#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) -/** stacked argument vector. - * Valid only for stacked option arguments. */ -#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) -/** Reset an option. */ -#define CLEAR_OPT(n) STMTS( \ - DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ - if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \ - DESC(n).fOptState |= OPTST_DISABLED; \ - DESC(n).optCookie = NULL ) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Enumeration of systemkey-tool exit codes - */ -typedef enum { - SYSTEMKEY_TOOL_EXIT_SUCCESS = 0, - SYSTEMKEY_TOOL_EXIT_FAILURE = 1, - SYSTEMKEY_TOOL_EXIT_USAGE_ERROR = 64, - SYSTEMKEY_TOOL_EXIT_LIBOPTS_FAILURE = 70 -} systemkey_tool_exit_code_t; -/** - * Interface defines for specific options. - * @{ - */ -#define VALUE_OPT_DEBUG 'd' - -#define OPT_VALUE_DEBUG (DESC(DEBUG).optArg.argInt) -#define VALUE_OPT_INFILE 0x1001 -#define VALUE_OPT_OUTFILE 0x1002 -#define VALUE_OPT_LIST 0x1003 -#define VALUE_OPT_DELETE 0x1004 -#define VALUE_OPT_INDER 0x1005 -#define VALUE_OPT_OUTDER 0x1006 -/** option flag (value) for help-value option */ -#define VALUE_OPT_HELP 'h' -/** option flag (value) for more-help-value option */ -#define VALUE_OPT_MORE_HELP '!' -/** option flag (value) for version-value option */ -#define VALUE_OPT_VERSION 'v' -/* - * Interface defines not associated with particular options - */ -#define ERRSKIP_OPTERR STMTS(systemkey_toolOptions.fOptSet &= ~OPTPROC_ERRSTOP) -#define ERRSTOP_OPTERR STMTS(systemkey_toolOptions.fOptSet |= OPTPROC_ERRSTOP) -#define RESTART_OPT(n) STMTS( \ - systemkey_toolOptions.curOptIdx = (n); \ - systemkey_toolOptions.pzCurOpt = NULL ) -#define START_OPT RESTART_OPT(1) -#define USAGE(c) (*systemkey_toolOptions.pUsageProc)(&systemkey_toolOptions, c) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * global exported definitions - */ -#include - - -/* * * * * * - * - * Declare the systemkey-tool option descriptor. - */ -extern tOptions systemkey_toolOptions; - -#if defined(ENABLE_NLS) -# ifndef _ -# include -# ifndef HAVE_GETTEXT - extern char * gettext(char const *); -# else -# include -# endif - -# ifndef ATTRIBUTE_FORMAT_ARG -# define ATTRIBUTE_FORMAT_ARG(_a) -# endif - -static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1); -static inline char* aoGetsText(char const* pz) { - if (pz == NULL) return NULL; - return (char*)gettext(pz); -} -# define _(s) aoGetsText(s) -# endif /* _() */ - -# define OPT_NO_XLAT_CFG_NAMES STMTS(systemkey_toolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT_CFG;) -# define OPT_NO_XLAT_OPT_NAMES STMTS(systemkey_toolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;) - -# define OPT_XLAT_CFG_NAMES STMTS(systemkey_toolOptions.fOptSet &= \ - ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);) -# define OPT_XLAT_OPT_NAMES STMTS(systemkey_toolOptions.fOptSet &= \ - ~OPTPROC_NXLAT_OPT;) - -#else /* ENABLE_NLS */ -# define OPT_NO_XLAT_CFG_NAMES -# define OPT_NO_XLAT_OPT_NAMES - -# define OPT_XLAT_CFG_NAMES -# define OPT_XLAT_OPT_NAMES - -# ifndef _ -# define _(_s) _s -# endif -#endif /* ENABLE_NLS */ - -#ifdef __cplusplus -} -#endif -#endif /* AUTOOPTS_SYSTEMKEY_ARGS_H_GUARD */ - -/* systemkey-args.h ends here */ diff --git a/src/systemkey.c b/src/systemkey.c index f080ce8a80..fb19292e54 100644 --- a/src/systemkey.c +++ b/src/systemkey.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -83,13 +83,10 @@ int main(int argc, char **argv) static void cmd_parser(int argc, char **argv) { - unsigned int optct; /* Note that the default sec-param is legacy because several TPMs * cannot handle larger keys. */ - optct = optionProcess(&systemkey_toolOptions, argc, argv); - argc += optct; - argv += optct; + optionProcess(&systemkey_toolOptions, argc, argv); gnutls_global_set_log_function(tls_log_func); diff --git a/src/tests.c b/src/tests.c index be5150d2c6..8cc06347c1 100644 --- a/src/tests.c +++ b/src/tests.c @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -51,11 +51,13 @@ extern gnutls_certificate_credentials_t xcred; extern unsigned int verbose; const char *ext_text = ""; -int tls_ext_ok = 1; -int tls1_ok = 0; -int ssl3_ok = 0; -int tls1_1_ok = 0; -int tls1_2_ok = 0; +static int tls_ext_ok = 1; +static int tls1_ok = 0; +static int ssl3_ok = 0; +static int tls1_1_ok = 0; +static int tls1_2_ok = 0; +static int tls1_3_ok = 0; +static int send_record_ok = 0; /* keep session info */ static char *session_data = NULL; @@ -64,7 +66,7 @@ static size_t session_data_size = 0, session_id_size = 0; static int sfree = 0; static int handshake_output = 0; -static int do_handshake(gnutls_session_t session) +static int test_do_handshake(gnutls_session_t session) { int ret, alert; @@ -86,7 +88,6 @@ static int do_handshake(gnutls_session_t session) if (ret < 0) return TEST_FAILED; - gnutls_session_get_data(session, NULL, &session_data_size); if (sfree != 0) { @@ -111,29 +112,56 @@ char protocol_str[] = "+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:+VERS-SSL3.0"; char protocol_all_str[] = "+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:+VERS-SSL3.0"; -char prio_str[512] = ""; +char prio_str[768] = ""; + +#ifdef ENABLE_GOST +#define GOST_CIPHERS ":+GOST28147-TC26Z-CNT" +#define GOST_MACS ":+GOST28147-TC26Z-IMIT" +#define GOST_KX ":+VKO-GOST-12" +#define GOST_REST ":+SIGN-GOSTR341012-512:+SIGN-GOSTR341012-256:+SIGN-GOSTR341001:+GROUP-GOST-ALL" +#else +#define GOST_CIPHERS +#define GOST_MACS +#define GOST_KX +#define GOST_REST +#endif -#define ALL_CIPHERS "+AES-128-GCM:+CAMELLIA-128-GCM:+AES-128-CBC:+CAMELLIA-128-CBC:+3DES-CBC:+ARCFOUR-128" -#define BLOCK_CIPHERS "+3DES-CBC:+AES-128-CBC:+CAMELLIA-128-CBC" +#define ALL_CIPHERS "+CIPHER-ALL:+ARCFOUR-128:+3DES-CBC" GOST_CIPHERS +#define BLOCK_CIPHERS "+3DES-CBC:+AES-128-CBC:+CAMELLIA-128-CBC:+AES-256-CBC:+CAMELLIA-256-CBC" +#define SSL3_CIPHERS "+ARCFOUR-128:+3DES-CBC" #define ALL_COMP "+COMP-NULL" -#define ALL_MACS "+SHA1:+MD5:+AEAD" -#define ALL_CERTTYPES "+CTYPE-X509" -#define ALL_KX "+RSA:+DHE-RSA:+DHE-DSS:+ANON-DH:+ECDHE-RSA:+ECDHE-ECDSA:+ANON-ECDH" +#define ALL_MACS "+MAC-ALL:+MD5:+SHA1" GOST_MACS +#define SSL3_MACS "+MD5:+SHA1" +#define ALL_KX "+RSA:+DHE-RSA:+DHE-DSS:+ANON-DH:+ECDHE-RSA:+ECDHE-ECDSA:+ANON-ECDH" GOST_KX +#define SSL3_KX "+RSA:+DHE-RSA:+DHE-DSS" #define INIT_STR "NONE:" -char rest[128] = "%UNSAFE_RENEGOTIATION:+SIGN-ALL:+CURVE-ALL"; +char rest[384] = "%UNSAFE_RENEGOTIATION:+SIGN-ALL:+GROUP-ALL" GOST_REST; -static inline void -_gnutls_priority_set_direct(gnutls_session_t session, const char *str) +#define _gnutls_priority_set_direct(s, str) { \ + int _ret; \ + if ((_ret=__gnutls_priority_set_direct(s, str, __LINE__)) != TEST_SUCCEED) { \ + return _ret; \ + } \ + } + +static inline int +__gnutls_priority_set_direct(gnutls_session_t session, const char *str, int line) { const char *err; int ret = gnutls_priority_set_direct(session, str, &err); if (ret < 0) { - fprintf(stderr, "Error with string %s\n", str); + /* this can happen when some cipher is disabled system-wide */ + if (ret == GNUTLS_E_NO_PRIORITIES_WERE_SET) + return TEST_IGNORE; + + fprintf(stderr, "Error at %d with string %s\n", line, str); fprintf(stderr, "Error at %s: %s\n", err, gnutls_strerror(ret)); exit(1); } + + return TEST_SUCCEED; } test_code_t test_server(gnutls_session_t session) @@ -146,13 +174,13 @@ test_code_t test_server(gnutls_session_t session) buf[sizeof(buf) - 1] = 0; sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" ALL_MACS + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":" "%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret != TEST_SUCCEED) return TEST_FAILED; @@ -187,13 +215,13 @@ test_code_t test_dhe(gnutls_session_t session) int ret; sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" ALL_MACS + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":+DHE-RSA:+DHE-DSS:%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); gnutls_dh_get_pubkey(session, &pubkey); @@ -202,6 +230,28 @@ test_code_t test_dhe(gnutls_session_t session) return TEST_IGNORE; } +test_code_t test_rfc7919(gnutls_session_t session) +{ +#ifdef ENABLE_DHE + int ret; + + sprintf(prio_str, INIT_STR + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS + ":+DHE-RSA:+DHE-DSS:+GROUP-ALL:%s", protocol_str, rest); + _gnutls_priority_set_direct(session, prio_str); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + + ret = test_do_handshake(session); + + if (ret != TEST_FAILED && (gnutls_session_get_flags(session) & GNUTLS_SFLAGS_RFC7919)) + return TEST_SUCCEED; + else + return TEST_FAILED; +#endif + return TEST_IGNORE; +} + test_code_t test_ecdhe(gnutls_session_t session) { int ret; @@ -210,14 +260,62 @@ test_code_t test_ecdhe(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" ALL_MACS + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":+ECDHE-RSA:+ECDHE-ECDSA:+CURVE-ALL:%s", protocol_all_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); + + if (ret < 0) + return TEST_FAILED; + + return ret; +} + +#ifdef ENABLE_GOST +test_code_t test_vko_gost_12(gnutls_session_t session) +{ + int ret; + + if (tls_ext_ok == 0) + return TEST_IGNORE; + + sprintf(prio_str, INIT_STR + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS + ":+VKO-GOST-12:%s", protocol_all_str, + rest); + _gnutls_priority_set_direct(session, prio_str); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + + ret = test_do_handshake(session); + + if (ret < 0) + return TEST_FAILED; + + return ret; +} +#endif + +test_code_t test_rsa(gnutls_session_t session) +{ + int ret; + + if (tls_ext_ok == 0) + return TEST_IGNORE; + + sprintf(prio_str, INIT_STR + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS + ":+RSA:%s", protocol_all_str, + rest); + _gnutls_priority_set_direct(session, prio_str); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + + ret = test_do_handshake(session); if (ret < 0) return TEST_FAILED; @@ -236,13 +334,13 @@ test_code_t test_ecdhe_curve(gnutls_session_t session, const char *curve, unsign /* We always enable all the curves but set our selected as first. That is * because list of curves may be also used by the server to select a cert. */ sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" ALL_MACS + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":+ECDHE-RSA:+ECDHE-ECDSA:%s:%s", protocol_all_str, curve, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret < 0) return TEST_FAILED; @@ -282,8 +380,10 @@ test_code_t test_rfc7507(gnutls_session_t session) pstr = "-VERS-TLS-ALL:+VERS-TLS1.1:%FALLBACK_SCSV"; else if (tls1_1_ok && tls1_ok) pstr = "-VERS-TLS-ALL:+VERS-TLS1.0:%FALLBACK_SCSV"; +#ifdef ENABLE_SSL3 else if (tls1_ok && ssl3_ok) pstr = "-VERS-TLS-ALL:+VERS-SSL3.0:%FALLBACK_SCSV"; +#endif else return TEST_IGNORE; @@ -294,7 +394,7 @@ test_code_t test_rfc7507(gnutls_session_t session) gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret < 0) return TEST_IGNORE2; @@ -313,13 +413,13 @@ test_code_t test_safe_renegotiation(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" ALL_MACS + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s:%%SAFE_RENEGOTIATION", rest, protocol_str); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } @@ -334,7 +434,7 @@ test_code_t test_ocsp_status(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" ALL_MACS + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); @@ -342,7 +442,7 @@ test_code_t test_ocsp_status(gnutls_session_t session) gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret < 0) return TEST_FAILED; @@ -365,13 +465,13 @@ test_code_t test_ext_master_secret(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" ALL_MACS + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":%s:" ALL_KX, rest, protocol_str); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret < 0) return TEST_FAILED; @@ -390,13 +490,13 @@ test_code_t test_etm(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" ALL_MACS + "+AES-128-CBC:+AES-256-CBC:" ALL_COMP ":%s:" ALL_MACS ":%s:" ALL_KX, rest, protocol_str); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret < 0) return TEST_FAILED; @@ -415,13 +515,13 @@ test_code_t test_safe_renegotiation_scsv(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":+VERS-SSL3.0:" + ALL_CIPHERS ":" ALL_COMP ":+VERS-TLS1.0:" ALL_MACS ":" ALL_KX ":%%SAFE_RENEGOTIATION"); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } @@ -439,13 +539,13 @@ test_code_t test_dhe_group(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" ALL_MACS + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":+DHE-RSA:+DHE-DSS:%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); ret2 = gnutls_dh_get_group(session, &gen, &prime); if (ret2 >= 0) { @@ -511,13 +611,47 @@ test_code_t test_ssl3(gnutls_session_t session) { int ret; sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":+VERS-SSL3.0:" + SSL3_CIPHERS ":" ALL_COMP ":+VERS-SSL3.0:%%NO_EXTENSIONS:" + SSL3_MACS ":" SSL3_KX ":%s", rest); + _gnutls_priority_set_direct(session, prio_str); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + + ret = test_do_handshake(session); + if (ret == TEST_SUCCEED) + ssl3_ok = 1; + + return ret; +} + +test_code_t test_ssl3_with_extensions(gnutls_session_t session) +{ + int ret; + sprintf(prio_str, INIT_STR + SSL3_CIPHERS ":" ALL_COMP ":+VERS-SSL3.0:" + SSL3_MACS ":" SSL3_KX ":%s", rest); + _gnutls_priority_set_direct(session, prio_str); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + + ret = test_do_handshake(session); + if (ret == TEST_SUCCEED) + ssl3_ok = 1; + + return ret; +} + +test_code_t test_ssl3_unknown_ciphersuites(gnutls_session_t session) +{ + int ret; + sprintf(prio_str, INIT_STR + ALL_CIPHERS ":" ALL_COMP ":+VERS-SSL3.0:%%NO_EXTENSIONS:" ALL_MACS ":" ALL_KX ":%s", rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_SUCCEED) ssl3_ok = 1; @@ -542,13 +676,13 @@ test_code_t test_bye(gnutls_session_t session) #endif sprintf(prio_str, INIT_STR - ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" ALL_MACS + ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_FAILED) return ret; @@ -592,13 +726,13 @@ test_code_t test_aes(gnutls_session_t session) int ret; sprintf(prio_str, INIT_STR - "+AES-128-CBC:" ALL_COMP ":" ALL_CERTTYPES ":%s:" ALL_MACS + "+AES-128-CBC:+AES-256-CBC:" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } @@ -607,14 +741,14 @@ test_code_t test_aes_gcm(gnutls_session_t session) int ret; sprintf(prio_str, INIT_STR - "+AES-128-GCM:+AES-256-GCM:" ALL_COMP ":" - ALL_CERTTYPES ":%s:" ALL_MACS ":" ALL_KX ":%s", + "+AES-128-GCM:+AES-256-GCM:" ALL_COMP + ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_all_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } @@ -623,14 +757,14 @@ test_code_t test_aes_ccm(gnutls_session_t session) int ret; sprintf(prio_str, INIT_STR - "+AES-128-CCM:+AES-256-CCM:" ALL_COMP ":" - ALL_CERTTYPES ":%s:" ALL_MACS ":" ALL_KX ":%s", + "+AES-128-CCM:+AES-256-CCM:" ALL_COMP + ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_all_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } @@ -639,14 +773,14 @@ test_code_t test_aes_ccm_8(gnutls_session_t session) int ret; sprintf(prio_str, INIT_STR - "+AES-128-CCM-8:+AES-256-CCM-8:" ALL_COMP ":" - ALL_CERTTYPES ":%s:" ALL_MACS ":" ALL_KX ":%s", + "+AES-128-CCM-8:+AES-256-CCM-8:" ALL_COMP + ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_all_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } @@ -654,14 +788,18 @@ test_code_t test_camellia_cbc(gnutls_session_t session) { int ret; + if (gnutls_fips140_mode_enabled()) + return TEST_IGNORE; + sprintf(prio_str, - INIT_STR "+CAMELLIA-128-CBC:" ALL_COMP ":" ALL_CERTTYPES + INIT_STR "+CAMELLIA-128-CBC:+CAMELLIA-256-CBC:" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } @@ -669,174 +807,184 @@ test_code_t test_camellia_gcm(gnutls_session_t session) { int ret; + if (gnutls_fips140_mode_enabled()) + return TEST_IGNORE; + sprintf(prio_str, - INIT_STR "+CAMELLIA-128-GCM:" ALL_COMP ":" ALL_CERTTYPES + INIT_STR "+CAMELLIA-128-GCM:+CAMELLIA-256-GCM:" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } -test_code_t test_openpgp1(gnutls_session_t session) +test_code_t test_unknown_ciphersuites(gnutls_session_t session) { int ret; - if (tls_ext_ok == 0) - return TEST_IGNORE; - sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":+CTYPE-OPENPGP:%s:" - ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); + INIT_STR ALL_CIPHERS ":" ALL_COMP + ":%s:" ALL_MACS ":" ALL_KX ":%s", + protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); - if (ret == TEST_FAILED) - return ret; - - if (gnutls_certificate_type_get(session) == GNUTLS_CRT_OPENPGP) - return TEST_SUCCEED; - - return TEST_FAILED; + ret = test_do_handshake(session); + return ret; } -test_code_t test_unknown_ciphersuites(gnutls_session_t session) +test_code_t test_md5(gnutls_session_t session) { int ret; + if (gnutls_fips140_mode_enabled()) + return TEST_IGNORE; + sprintf(prio_str, - INIT_STR "+AES-128-CBC:" ALL_CIPHERS ":" ALL_COMP ":" - ALL_CERTTYPES ":%s:" ALL_MACS ":" ALL_KX ":%s", - protocol_str, rest); + INIT_STR ALL_CIPHERS ":" ALL_COMP + ":%s:+MD5:" ALL_KX ":%s", protocol_str, + rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } -test_code_t test_md5(gnutls_session_t session) +test_code_t test_sha(gnutls_session_t session) { int ret; sprintf(prio_str, - INIT_STR "+AES-128-CBC:" ALL_CIPHERS ":" ALL_COMP ":" - ALL_CERTTYPES ":%s:+MD5:" ALL_KX ":%s", protocol_str, + INIT_STR ALL_CIPHERS ":" ALL_COMP + ":%s:+SHA1:" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } -#ifdef HAVE_LIBZ -test_code_t test_zlib(gnutls_session_t session) +test_code_t test_sha256(gnutls_session_t session) { int ret; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":+COMP-DEFLATE:" ALL_CERTTYPES ":%s:" - ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); + INIT_STR ALL_CIPHERS ":" ALL_COMP + ":%s:+SHA256:" ALL_KX ":%s", + protocol_all_str, rest); _gnutls_priority_set_direct(session, prio_str); - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } -#endif -test_code_t test_sha(gnutls_session_t session) +#ifdef ENABLE_GOST +test_code_t test_gost_imit(gnutls_session_t session) { int ret; + if (gnutls_fips140_mode_enabled()) + return TEST_IGNORE; + sprintf(prio_str, - INIT_STR "+AES-128-CBC:" ALL_CIPHERS ":" ALL_COMP ":" - ALL_CERTTYPES ":%s:+SHA1:" ALL_KX ":%s", protocol_str, - rest); + INIT_STR ALL_CIPHERS ":" ALL_COMP + ":%s:+GOST28147-TC26Z-IMIT:" ALL_KX ":%s", + protocol_all_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } +#endif -test_code_t test_sha256(gnutls_session_t session) +test_code_t test_3des(gnutls_session_t session) { int ret; sprintf(prio_str, - INIT_STR "+AES-128-CBC:" ALL_CIPHERS ":" ALL_COMP ":" - ALL_CERTTYPES ":%s:+SHA256:" ALL_KX ":%s", - protocol_all_str, rest); + INIT_STR "+3DES-CBC:" ALL_COMP ":%s:" + ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } -test_code_t test_3des(gnutls_session_t session) +test_code_t test_arcfour(gnutls_session_t session) { int ret; + if (gnutls_fips140_mode_enabled()) + return TEST_IGNORE; + sprintf(prio_str, - INIT_STR "+3DES-CBC:" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR "+ARCFOUR-128:" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } -test_code_t test_arcfour(gnutls_session_t session) +test_code_t test_chacha20(gnutls_session_t session) { int ret; + if (gnutls_fips140_mode_enabled()) + return TEST_IGNORE; + sprintf(prio_str, - INIT_STR "+ARCFOUR-128:" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR "+CHACHA20-POLY1305:" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } -test_code_t test_chacha20(gnutls_session_t session) +#ifdef ENABLE_GOST +test_code_t test_gost_cnt(gnutls_session_t session) { int ret; + if (gnutls_fips140_mode_enabled()) + return TEST_IGNORE; + sprintf(prio_str, - INIT_STR "+CHACHA20-POLY1305:" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR "+GOST28147-TC26Z-CNT:" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } +#endif test_code_t test_tls1(gnutls_session_t session) { int ret; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES + INIT_STR ALL_CIPHERS ":" ALL_COMP ":+VERS-TLS1.0:%%SSL3_RECORD_VERSION:" ALL_MACS ":" ALL_KX ":%s", rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_SUCCEED) tls1_ok = 1; @@ -852,13 +1000,13 @@ test_code_t test_tls1_nossl3(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES + INIT_STR ALL_CIPHERS ":" ALL_COMP ":+VERS-TLS1.0:%%LATEST_RECORD_VERSION:" ALL_MACS ":" ALL_KX ":%s", rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_SUCCEED) { strcat(rest, ":%LATEST_RECORD_VERSION"); tls1_ok = 1; @@ -873,16 +1021,26 @@ test_code_t test_record_padding(gnutls_session_t session) int ret; sprintf(prio_str, - INIT_STR BLOCK_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES - ":+VERS-TLS-ALL:-VERS-SSL3.0:" ALL_MACS ":" ALL_KX ":%s", rest); + INIT_STR BLOCK_CIPHERS ":" ALL_COMP + ":+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:-VERS-SSL3.0:" ALL_MACS ":" ALL_KX ":%s", rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_SUCCEED) { tls1_ok = 1; } else { - strcat(rest, ":%COMPAT"); + sprintf(prio_str, + INIT_STR BLOCK_CIPHERS ":" ALL_COMP + ":+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:-VERS-SSL3.0:" ALL_MACS ":" ALL_KX ":%%COMPAT:%s", rest); + _gnutls_priority_set_direct(session, prio_str); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + ret = test_do_handshake(session); + if (ret == TEST_SUCCEED) { + tls1_ok = 1; + strcat(rest, ":%COMPAT"); + } } return ret; @@ -893,35 +1051,53 @@ test_code_t test_no_extensions(gnutls_session_t session) int ret; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); gnutls_record_set_max_size(session, 4096); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_SUCCEED) { tls_ext_ok = 1; } else { - tls_ext_ok = 0; - strcat(rest, ":%NO_EXTENSIONS"); + sprintf(prio_str, + INIT_STR BLOCK_CIPHERS ":" ALL_COMP + ":+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:-VERS-SSL3.0:" ALL_MACS ":" ALL_KX ":%%NO_EXTENSIONS:%s", rest); + _gnutls_priority_set_direct(session, prio_str); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + ret = test_do_handshake(session); + if (ret == TEST_SUCCEED) { + tls_ext_ok = 0; + strcat(rest, ":%NO_EXTENSIONS"); + } } return ret; } +test_code_t test_known_protocols(gnutls_session_t session) +{ + if (tls1_2_ok == 0 && tls1_1_ok == 0 && tls1_ok == 0 && + ssl3_ok == 0 && tls1_3_ok == 0) + return TEST_FAILED; + + return TEST_SUCCEED; +} + test_code_t test_tls1_2(gnutls_session_t session) { int ret; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES + INIT_STR ALL_CIPHERS ":" ALL_COMP ":+VERS-TLS1.2:" ALL_MACS ":" ALL_KX ":%s", rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_SUCCEED) tls1_2_ok = 1; @@ -929,18 +1105,37 @@ test_code_t test_tls1_2(gnutls_session_t session) } +test_code_t test_tls1_3(gnutls_session_t session) +{ + int ret; + + sprintf(prio_str, + INIT_STR ALL_CIPHERS ":" ALL_COMP + ":+VERS-TLS1.3:" ALL_MACS ":" ALL_KX ":%s", rest); + _gnutls_priority_set_direct(session, prio_str); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + + ret = test_do_handshake(session); + if (ret == TEST_SUCCEED) + tls1_3_ok = 1; + + return ret; + +} + test_code_t test_tls1_1(gnutls_session_t session) { int ret; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES + INIT_STR ALL_CIPHERS ":" ALL_COMP ":+VERS-TLS1.1:" ALL_MACS ":" ALL_KX ":%s", rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_SUCCEED) tls1_1_ok = 1; @@ -955,14 +1150,14 @@ test_code_t test_tls1_1_fallback(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES + INIT_STR ALL_CIPHERS ":" ALL_COMP ":+VERS-TLS1.1:+VERS-TLS1.0:+VERS-SSL3.0:" ALL_MACS ":" ALL_KX ":%s", rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret != TEST_SUCCEED) return TEST_FAILED; @@ -982,7 +1177,7 @@ test_code_t test_tls1_6_fallback(gnutls_session_t session) /* we remove RSA as there is a version check in the key exchange * message we do not properly set in this test */ sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES + INIT_STR ALL_CIPHERS ":" ALL_COMP ":+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:+VERS-SSL3.0:" ALL_MACS ":" ALL_KX ":-RSA:%s", rest); _gnutls_priority_set_direct(session, prio_str); @@ -990,7 +1185,7 @@ test_code_t test_tls1_6_fallback(gnutls_session_t session) gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); _gnutls_hello_set_default_version(session, 3, 7); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret != TEST_SUCCEED) return TEST_FAILED; @@ -1008,13 +1203,13 @@ test_code_t test_tls_disable0(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_FAILED) { /* disable TLS 1.0 */ if (ssl3_ok != 0) { @@ -1033,13 +1228,13 @@ test_code_t test_tls_disable1(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_FAILED) { /* disable TLS 1.1 */ snprintf(protocol_str, sizeof(protocol_str), "+VERS-TLS1.0:+VERS-SSL3.0"); @@ -1055,13 +1250,13 @@ test_code_t test_tls_disable2(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_FAILED) { /* disable TLS 1.2 */ snprintf(protocol_str, sizeof(protocol_str), "+VERS-TLS1.1:+VERS-TLS1.0:+VERS-SSL3.0"); @@ -1080,12 +1275,12 @@ test_code_t test_rsa_pms(gnutls_session_t session) * SSL 3.0 then the handshake will fail. */ sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":+RSA:%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_FAILED) return TEST_FAILED; @@ -1102,13 +1297,13 @@ test_code_t test_max_record_size(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); gnutls_record_set_max_size(session, 512); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_FAILED) return ret; @@ -1125,14 +1320,14 @@ test_code_t test_heartbeat_extension(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); gnutls_record_set_max_size(session, 4096); gnutls_heartbeat_enable(session, GNUTLS_HB_PEER_ALLOWED_TO_SEND); - do_handshake(session); + test_do_handshake(session); switch (gnutls_heartbeat_allowed(session, GNUTLS_HB_LOCAL_ALLOWED_TO_SEND)) { case 0: @@ -1147,13 +1342,13 @@ test_code_t test_small_records(gnutls_session_t session) int ret; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); gnutls_record_set_max_size(session, 512); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } @@ -1171,13 +1366,13 @@ test_code_t test_version_rollback(gnutls_session_t session) * connection will fail. */ sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); _gnutls_record_set_default_version(session, 3, 0); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret != TEST_SUCCEED) return ret; @@ -1199,13 +1394,13 @@ test_code_t test_version_oob(gnutls_session_t session) * and we connect using a 5.5 record version. */ sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); _gnutls_record_set_default_version(session, 5, 5); - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } @@ -1221,13 +1416,13 @@ test_code_t test_rsa_pms_version_check(gnutls_session_t session) * A normal server would abort this handshake. */ sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); _gnutls_rsa_pms_set_version(session, 5, 5); /* use SSL 5.5 version */ - ret = do_handshake(session); + ret = test_do_handshake(session); return ret; } @@ -1238,13 +1433,13 @@ test_code_t test_anonymous(gnutls_session_t session) int ret; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":+ANON-DH:+ANON-ECDH:+CURVE-ALL:%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_ANON, anon_cred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_SUCCEED) gnutls_dh_get_pubkey(session, &pubkey); @@ -1263,7 +1458,7 @@ test_code_t test_session_resume2(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); @@ -1275,7 +1470,7 @@ test_code_t test_session_resume2(gnutls_session_t session) memcpy(tmp_session_id, session_id, session_id_size); tmp_session_id_size = session_id_size; - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_FAILED) return ret; @@ -1310,13 +1505,13 @@ test_code_t test_certificate(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_FAILED) return ret; @@ -1343,13 +1538,13 @@ test_code_t test_chain_order(gnutls_session_t session) char *p, *pos; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - ret = do_handshake(session); + ret = test_do_handshake(session); if (ret == TEST_FAILED) return ret; @@ -1372,6 +1567,7 @@ test_code_t test_chain_order(gnutls_session_t session) t.data = NULL; ret = gnutls_pem_base64_encode_alloc("CERTIFICATE", &cert_list[i], &t); if (ret < 0) { + free(p); return TEST_FAILED; } @@ -1460,14 +1656,14 @@ test_code_t test_server_cas(gnutls_session_t session) return TEST_IGNORE; sprintf(prio_str, - INIT_STR ALL_CIPHERS ":" ALL_COMP ":" ALL_CERTTYPES ":%s:" + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); _gnutls_priority_set_direct(session, prio_str); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); gnutls_certificate_set_retrieve_function(xcred, cert_callback); - ret = do_handshake(session); + ret = test_do_handshake(session); gnutls_certificate_set_retrieve_function(xcred, NULL); if (ret == TEST_FAILED) @@ -1479,3 +1675,63 @@ test_code_t test_server_cas(gnutls_session_t session) ext_text = "none"; return TEST_SUCCEED; } + +static test_code_t +test_do_handshake_and_send_record(gnutls_session_t session) +{ + int ret; + /* This will be padded to 512 bytes. */ + const char snd_buf[] = "GET / HTTP/1.0\r\n\r\n"; + static char buf[5 * 1024]; + + ret = test_do_handshake(session); + if (ret != TEST_SUCCEED) + return ret; + + gnutls_record_send(session, snd_buf, sizeof(snd_buf) - 1); + ret = gnutls_record_recv(session, buf, sizeof(buf) - 1); + if (ret < 0) + return TEST_FAILED; + + return TEST_SUCCEED; +} + +/* These tests shall be sent in this order to check if the server + * advertises smaller limits than our default 512. and we can work it + * around with %ALLOW_SMALL_RECORDS. */ +test_code_t test_send_record(gnutls_session_t session) +{ + int ret; + + sprintf(prio_str, + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" + ALL_MACS ":" ALL_KX ":%s", protocol_str, rest); + _gnutls_priority_set_direct(session, prio_str); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + + ret = test_do_handshake_and_send_record(session); + if (ret == TEST_SUCCEED) + send_record_ok = 1; + return ret; +} + +test_code_t test_send_record_with_allow_small_records(gnutls_session_t session) +{ + int ret; + + /* If test_send_record succeeded, we don't need to check. */ + if (send_record_ok) + return TEST_FAILED; + + sprintf(prio_str, + INIT_STR ALL_CIPHERS ":" ALL_COMP ":%s:" + ALL_MACS ":" ALL_KX ":%%ALLOW_SMALL_RECORDS:%s", + protocol_str, rest); + _gnutls_priority_set_direct(session, prio_str); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + + ret = test_do_handshake_and_send_record(session); + if (ret == TEST_SUCCEED) + strcat(rest, ":%ALLOW_SMALL_RECORDS"); + return ret; +} diff --git a/src/tests.h b/src/tests.h index 7f938b86de..d9721a70e2 100644 --- a/src/tests.h +++ b/src/tests.h @@ -15,9 +15,12 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ +#ifndef GNUTLS_SRC_TESTS_H +#define GNUTLS_SRC_TESTS_H + typedef enum { TEST_SUCCEED, TEST_FAILED, TEST_UNSURE, TEST_IGNORE/*keep socket*/, TEST_IGNORE2/*destroy socket*/ } test_code_t; @@ -30,8 +33,11 @@ test_code_t test_heartbeat_extension(gnutls_session_t state); test_code_t test_small_records(gnutls_session_t state); test_code_t test_rfc7507(gnutls_session_t state); test_code_t test_dhe(gnutls_session_t state); +test_code_t test_rfc7919(gnutls_session_t state); test_code_t test_dhe_group(gnutls_session_t state); test_code_t test_ssl3(gnutls_session_t state); +test_code_t test_ssl3_with_extensions(gnutls_session_t state); +test_code_t test_ssl3_unknown_ciphersuites(gnutls_session_t state); test_code_t test_aes(gnutls_session_t state); test_code_t test_camellia_cbc(gnutls_session_t state); test_code_t test_camellia_gcm(gnutls_session_t state); @@ -48,6 +54,8 @@ test_code_t test_etm(gnutls_session_t state); test_code_t test_safe_renegotiation_scsv(gnutls_session_t state); test_code_t test_tls1_1(gnutls_session_t state); test_code_t test_tls1_2(gnutls_session_t state); +test_code_t test_tls1_3(gnutls_session_t state); +test_code_t test_known_protocols(gnutls_session_t state); test_code_t test_tls1_1_fallback(gnutls_session_t state); test_code_t test_tls1_6_fallback(gnutls_session_t state); test_code_t test_tls_disable0(gnutls_session_t state); @@ -59,17 +67,18 @@ test_code_t test_max_record_size(gnutls_session_t state); test_code_t test_version_rollback(gnutls_session_t state); test_code_t test_anonymous(gnutls_session_t state); test_code_t test_unknown_ciphersuites(gnutls_session_t state); -test_code_t test_openpgp1(gnutls_session_t state); test_code_t test_bye(gnutls_session_t state); test_code_t test_certificate(gnutls_session_t state); test_code_t test_server_cas(gnutls_session_t state); test_code_t test_session_resume2(gnutls_session_t state); test_code_t test_rsa_pms_version_check(gnutls_session_t session); test_code_t test_version_oob(gnutls_session_t session); -test_code_t test_zlib(gnutls_session_t session); +test_code_t test_send_record(gnutls_session_t session); +test_code_t test_send_record_with_allow_small_records(gnutls_session_t session); int _test_srp_username_callback(gnutls_session_t session, char **username, char **password); +test_code_t test_rsa(gnutls_session_t session); test_code_t test_ecdhe_x25519(gnutls_session_t session); test_code_t test_ecdhe_secp521r1(gnutls_session_t session); test_code_t test_ecdhe_secp384r1(gnutls_session_t session); @@ -79,3 +88,11 @@ test_code_t test_aes_gcm(gnutls_session_t session); test_code_t test_aes_ccm(gnutls_session_t session); test_code_t test_aes_ccm_8(gnutls_session_t session); test_code_t test_sha256(gnutls_session_t session); + +#ifdef ENABLE_GOST +test_code_t test_vko_gost_12(gnutls_session_t session); +test_code_t test_gost_cnt(gnutls_session_t session); +test_code_t test_gost_imit(gnutls_session_t session); +#endif + +#endif /* GNUTLS_SRC_TESTS_H */ diff --git a/src/tpmtool-args.c.bak b/src/tpmtool-args.c.bak deleted file mode 100644 index d5c9168330..0000000000 --- a/src/tpmtool-args.c.bak +++ /dev/null @@ -1,1392 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (tpmtool-args.c) - * - * It has been AutoGen-ed - * From the definitions tpmtool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This source file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the tpmtool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The tpmtool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * tpmtool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * tpmtool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef __doxygen__ -#define OPTION_CODE_COMPILE 1 -#include "tpmtool-args.h" -#include - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern FILE * option_usage_fp; -#define zCopyright (tpmtool_opt_strs+0) -#define zLicenseDescrip (tpmtool_opt_strs+288) - - -#ifndef NULL -# define NULL 0 -#endif - -/** - * static const strings for tpmtool options - */ -static char const tpmtool_opt_strs[2191] = -/* 0 */ "tpmtool @VERSION@\n" - "Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n" - "This is free software. It is licensed for use, modification and\n" - "redistribution under the terms of the GNU General Public License,\n" - "version 3 or later \n\0" -/* 288 */ "tpmtool is free software: you can redistribute it and/or modify it under\n" - "the terms of the GNU General Public License as published by the Free\n" - "Software Foundation, either version 3 of the License, or (at your option)\n" - "any later version.\n\n" - "tpmtool is distributed in the hope that it will be useful, but WITHOUT ANY\n" - "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n" - "FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n" - "details.\n\n" - "You should have received a copy of the GNU General Public License along\n" - "with this program. If not, see .\n\0" -/* 891 */ "Enable debugging\0" -/* 908 */ "DEBUG\0" -/* 914 */ "debug\0" -/* 920 */ "Input file\0" -/* 931 */ "INFILE\0" -/* 938 */ "infile\0" -/* 945 */ "Output file\0" -/* 957 */ "OUTFILE\0" -/* 965 */ "outfile\0" -/* 973 */ "Generate an RSA private-public key pair\0" -/* 1013 */ "GENERATE_RSA\0" -/* 1026 */ "generate-rsa\0" -/* 1039 */ "Any generated key will be registered in the TPM\0" -/* 1087 */ "REGISTER\0" -/* 1096 */ "register\0" -/* 1105 */ "Any generated key will be a signing key\0" -/* 1145 */ "SIGNING\0" -/* 1153 */ "signing\0" -/* 1161 */ "Any generated key will be a legacy key\0" -/* 1200 */ "LEGACY\0" -/* 1207 */ "legacy\0" -/* 1214 */ "Any registered key will be a user key\0" -/* 1252 */ "USER\0" -/* 1257 */ "user\0" -/* 1262 */ "Any registered key will be a system key\0" -/* 1302 */ "SYSTEM\0" -/* 1309 */ "system\0" -/* 1316 */ "Prints the public key of the provided key\0" -/* 1358 */ "PUBKEY\0" -/* 1365 */ "pubkey\0" -/* 1372 */ "Lists all stored keys in the TPM\0" -/* 1405 */ "LIST\0" -/* 1410 */ "list\0" -/* 1415 */ "Delete the key identified by the given URL (UUID).\0" -/* 1466 */ "DELETE\0" -/* 1473 */ "delete\0" -/* 1480 */ "Tests the signature operation of the provided object\0" -/* 1533 */ "TEST_SIGN\0" -/* 1543 */ "test-sign\0" -/* 1553 */ "Specify the security level [low, legacy, medium, high, ultra].\0" -/* 1616 */ "SEC_PARAM\0" -/* 1626 */ "sec-param\0" -/* 1636 */ "Specify the number of bits for key generate\0" -/* 1680 */ "BITS\0" -/* 1685 */ "bits\0" -/* 1690 */ "Use the DER format for keys.\0" -/* 1719 */ "INDER\0" -/* 1725 */ "no-inder\0" -/* 1734 */ "no\0" -/* 1737 */ "Use DER format for output keys\0" -/* 1768 */ "OUTDER\0" -/* 1775 */ "no-outder\0" -/* 1785 */ "display extended usage information and exit\0" -/* 1829 */ "help\0" -/* 1834 */ "extended usage information passed thru pager\0" -/* 1879 */ "more-help\0" -/* 1889 */ "output version information and exit\0" -/* 1925 */ "version\0" -/* 1933 */ "TPMTOOL\0" -/* 1941 */ "tpmtool - GnuTLS TPM tool\n" - "Usage: %s [ - [] | --[{=| }] ]...\n\0" -/* 2025 */ "@PACKAGE_BUGREPORT@\0" -/* 2045 */ "\n\0" -/* 2047 */ "Program that allows handling cryptographic data from the TPM chip.\n\0" -/* 2115 */ "tpmtool @VERSION@\0" -/* 2133 */ "tpmtool [options]\n" - "tpmtool --help for usage instructions.\n"; - -/** - * debug option description: - */ -/** Descriptive text for the debug option */ -#define DEBUG_DESC (tpmtool_opt_strs+891) -/** Upper-cased name for the debug option */ -#define DEBUG_NAME (tpmtool_opt_strs+908) -/** Name string for the debug option */ -#define DEBUG_name (tpmtool_opt_strs+914) -/** Compiled in flag settings for the debug option */ -#define DEBUG_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * infile option description: - */ -/** Descriptive text for the infile option */ -#define INFILE_DESC (tpmtool_opt_strs+920) -/** Upper-cased name for the infile option */ -#define INFILE_NAME (tpmtool_opt_strs+931) -/** Name string for the infile option */ -#define INFILE_name (tpmtool_opt_strs+938) -/** Compiled in flag settings for the infile option */ -#define INFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_FILE)) - -/** - * outfile option description: - */ -/** Descriptive text for the outfile option */ -#define OUTFILE_DESC (tpmtool_opt_strs+945) -/** Upper-cased name for the outfile option */ -#define OUTFILE_NAME (tpmtool_opt_strs+957) -/** Name string for the outfile option */ -#define OUTFILE_name (tpmtool_opt_strs+965) -/** Compiled in flag settings for the outfile option */ -#define OUTFILE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * generate-rsa option description: - */ -/** Descriptive text for the generate-rsa option */ -#define GENERATE_RSA_DESC (tpmtool_opt_strs+973) -/** Upper-cased name for the generate-rsa option */ -#define GENERATE_RSA_NAME (tpmtool_opt_strs+1013) -/** Name string for the generate-rsa option */ -#define GENERATE_RSA_name (tpmtool_opt_strs+1026) -/** Compiled in flag settings for the generate-rsa option */ -#define GENERATE_RSA_FLAGS (OPTST_DISABLED) - -/** - * register option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the register option */ -#define REGISTER_DESC (tpmtool_opt_strs+1039) -/** Upper-cased name for the register option */ -#define REGISTER_NAME (tpmtool_opt_strs+1087) -/** Name string for the register option */ -#define REGISTER_name (tpmtool_opt_strs+1096) -/** Other options that are required by the register option */ -static int const aRegisterMustList[] = { - INDEX_OPT_GENERATE_RSA, NO_EQUIVALENT }; -/** Compiled in flag settings for the register option */ -#define REGISTER_FLAGS (OPTST_DISABLED) - -/** - * signing option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the signing option */ -#define SIGNING_DESC (tpmtool_opt_strs+1105) -/** Upper-cased name for the signing option */ -#define SIGNING_NAME (tpmtool_opt_strs+1145) -/** Name string for the signing option */ -#define SIGNING_name (tpmtool_opt_strs+1153) -/** Other options that are required by the signing option */ -static int const aSigningMustList[] = { - INDEX_OPT_GENERATE_RSA, NO_EQUIVALENT }; -/** Other options that appear in conjunction with the signing option */ -static int const aSigningCantList[] = { - INDEX_OPT_LEGACY, NO_EQUIVALENT }; -/** Compiled in flag settings for the signing option */ -#define SIGNING_FLAGS (OPTST_DISABLED) - -/** - * legacy option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the legacy option */ -#define LEGACY_DESC (tpmtool_opt_strs+1161) -/** Upper-cased name for the legacy option */ -#define LEGACY_NAME (tpmtool_opt_strs+1200) -/** Name string for the legacy option */ -#define LEGACY_name (tpmtool_opt_strs+1207) -/** Other options that are required by the legacy option */ -static int const aLegacyMustList[] = { - INDEX_OPT_GENERATE_RSA, NO_EQUIVALENT }; -/** Other options that appear in conjunction with the legacy option */ -static int const aLegacyCantList[] = { - INDEX_OPT_SIGNING, NO_EQUIVALENT }; -/** Compiled in flag settings for the legacy option */ -#define LEGACY_FLAGS (OPTST_DISABLED) - -/** - * user option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the user option */ -#define USER_DESC (tpmtool_opt_strs+1214) -/** Upper-cased name for the user option */ -#define USER_NAME (tpmtool_opt_strs+1252) -/** Name string for the user option */ -#define USER_name (tpmtool_opt_strs+1257) -/** Other options that are required by the user option */ -static int const aUserMustList[] = { - INDEX_OPT_REGISTER, NO_EQUIVALENT }; -/** Other options that appear in conjunction with the user option */ -static int const aUserCantList[] = { - INDEX_OPT_SYSTEM, NO_EQUIVALENT }; -/** Compiled in flag settings for the user option */ -#define USER_FLAGS (OPTST_DISABLED) - -/** - * system option description with - * "Must also have options" and "Incompatible options": - */ -/** Descriptive text for the system option */ -#define SYSTEM_DESC (tpmtool_opt_strs+1262) -/** Upper-cased name for the system option */ -#define SYSTEM_NAME (tpmtool_opt_strs+1302) -/** Name string for the system option */ -#define SYSTEM_name (tpmtool_opt_strs+1309) -/** Other options that are required by the system option */ -static int const aSystemMustList[] = { - INDEX_OPT_REGISTER, NO_EQUIVALENT }; -/** Other options that appear in conjunction with the system option */ -static int const aSystemCantList[] = { - INDEX_OPT_USER, NO_EQUIVALENT }; -/** Compiled in flag settings for the system option */ -#define SYSTEM_FLAGS (OPTST_DISABLED) - -/** - * pubkey option description: - */ -/** Descriptive text for the pubkey option */ -#define PUBKEY_DESC (tpmtool_opt_strs+1316) -/** Upper-cased name for the pubkey option */ -#define PUBKEY_NAME (tpmtool_opt_strs+1358) -/** Name string for the pubkey option */ -#define PUBKEY_name (tpmtool_opt_strs+1365) -/** Compiled in flag settings for the pubkey option */ -#define PUBKEY_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * list option description: - */ -/** Descriptive text for the list option */ -#define LIST_DESC (tpmtool_opt_strs+1372) -/** Upper-cased name for the list option */ -#define LIST_NAME (tpmtool_opt_strs+1405) -/** Name string for the list option */ -#define LIST_name (tpmtool_opt_strs+1410) -/** Compiled in flag settings for the list option */ -#define LIST_FLAGS (OPTST_DISABLED) - -/** - * delete option description: - */ -/** Descriptive text for the delete option */ -#define DELETE_DESC (tpmtool_opt_strs+1415) -/** Upper-cased name for the delete option */ -#define DELETE_NAME (tpmtool_opt_strs+1466) -/** Name string for the delete option */ -#define DELETE_name (tpmtool_opt_strs+1473) -/** Compiled in flag settings for the delete option */ -#define DELETE_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * test-sign option description: - */ -/** Descriptive text for the test-sign option */ -#define TEST_SIGN_DESC (tpmtool_opt_strs+1480) -/** Upper-cased name for the test-sign option */ -#define TEST_SIGN_NAME (tpmtool_opt_strs+1533) -/** Name string for the test-sign option */ -#define TEST_SIGN_name (tpmtool_opt_strs+1543) -/** Compiled in flag settings for the test-sign option */ -#define TEST_SIGN_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * sec-param option description: - */ -/** Descriptive text for the sec-param option */ -#define SEC_PARAM_DESC (tpmtool_opt_strs+1553) -/** Upper-cased name for the sec-param option */ -#define SEC_PARAM_NAME (tpmtool_opt_strs+1616) -/** Name string for the sec-param option */ -#define SEC_PARAM_name (tpmtool_opt_strs+1626) -/** Compiled in flag settings for the sec-param option */ -#define SEC_PARAM_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)) - -/** - * bits option description: - */ -/** Descriptive text for the bits option */ -#define BITS_DESC (tpmtool_opt_strs+1636) -/** Upper-cased name for the bits option */ -#define BITS_NAME (tpmtool_opt_strs+1680) -/** Name string for the bits option */ -#define BITS_name (tpmtool_opt_strs+1685) -/** Compiled in flag settings for the bits option */ -#define BITS_FLAGS (OPTST_DISABLED \ - | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC)) - -/** - * inder option description: - */ -/** Descriptive text for the inder option */ -#define INDER_DESC (tpmtool_opt_strs+1690) -/** Upper-cased name for the inder option */ -#define INDER_NAME (tpmtool_opt_strs+1719) -/** disablement name for the inder option */ -#define NOT_INDER_name (tpmtool_opt_strs+1725) -/** disablement prefix for the inder option */ -#define NOT_INDER_PFX (tpmtool_opt_strs+1734) -/** Name string for the inder option */ -#define INDER_name (NOT_INDER_name + 3) -/** Compiled in flag settings for the inder option */ -#define INDER_FLAGS (OPTST_DISABLED) - -/** - * outder option description: - */ -/** Descriptive text for the outder option */ -#define OUTDER_DESC (tpmtool_opt_strs+1737) -/** Upper-cased name for the outder option */ -#define OUTDER_NAME (tpmtool_opt_strs+1768) -/** disablement name for the outder option */ -#define NOT_OUTDER_name (tpmtool_opt_strs+1775) -/** disablement prefix for the outder option */ -#define NOT_OUTDER_PFX (tpmtool_opt_strs+1734) -/** Name string for the outder option */ -#define OUTDER_name (NOT_OUTDER_name + 3) -/** Compiled in flag settings for the outder option */ -#define OUTDER_FLAGS (OPTST_DISABLED) - -/* - * Help/More_Help/Version option descriptions: - */ -#define HELP_DESC (tpmtool_opt_strs+1785) -#define HELP_name (tpmtool_opt_strs+1829) -#ifdef HAVE_WORKING_FORK -#define MORE_HELP_DESC (tpmtool_opt_strs+1834) -#define MORE_HELP_name (tpmtool_opt_strs+1879) -#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -#define MORE_HELP_DESC HELP_DESC -#define MORE_HELP_name HELP_name -#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT) -#endif -#ifdef NO_OPTIONAL_OPT_ARGS -# define VER_FLAGS (OPTST_IMM | OPTST_NO_INIT) -#else -# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ - OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT) -#endif -#define VER_DESC (tpmtool_opt_strs+1889) -#define VER_name (tpmtool_opt_strs+1925) -/** - * Declare option callback procedures - */ -extern tOptProc - optionBooleanVal, optionNestedVal, optionNumericVal, - optionPagedUsage, optionPrintVersion, optionResetOpt, - optionStackArg, optionTimeDate, optionTimeVal, - optionUnstackArg, optionVendorOption; -static tOptProc - doOptDebug, doOptInfile, doUsageOpt; -#define VER_PROC optionPrintVersion - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Define the tpmtool Option Descriptions. - * This is an array of OPTION_CT entries, one for each - * option that the tpmtool program responds to. - */ -static tOptDesc optDesc[OPTION_CT] = { - { /* entry idx, value */ 0, VALUE_OPT_DEBUG, - /* equiv idx, value */ 0, VALUE_OPT_DEBUG, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DEBUG_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --debug */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptDebug, - /* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 1, VALUE_OPT_INFILE, - /* equiv idx, value */ 1, VALUE_OPT_INFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --infile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doOptInfile, - /* desc, NAME, name */ INFILE_DESC, INFILE_NAME, INFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 2, VALUE_OPT_OUTFILE, - /* equiv idx, value */ 2, VALUE_OPT_OUTFILE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTFILE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outfile */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OUTFILE_DESC, OUTFILE_NAME, OUTFILE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 3, VALUE_OPT_GENERATE_RSA, - /* equiv idx, value */ 3, VALUE_OPT_GENERATE_RSA, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ GENERATE_RSA_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --generate-rsa */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ GENERATE_RSA_DESC, GENERATE_RSA_NAME, GENERATE_RSA_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 4, VALUE_OPT_REGISTER, - /* equiv idx, value */ 4, VALUE_OPT_REGISTER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ REGISTER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --register */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ aRegisterMustList, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ REGISTER_DESC, REGISTER_NAME, REGISTER_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 5, VALUE_OPT_SIGNING, - /* equiv idx, value */ 5, VALUE_OPT_SIGNING, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SIGNING_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --signing */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ aSigningMustList, aSigningCantList, - /* option proc */ NULL, - /* desc, NAME, name */ SIGNING_DESC, SIGNING_NAME, SIGNING_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 6, VALUE_OPT_LEGACY, - /* equiv idx, value */ 6, VALUE_OPT_LEGACY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LEGACY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --legacy */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ aLegacyMustList, aLegacyCantList, - /* option proc */ NULL, - /* desc, NAME, name */ LEGACY_DESC, LEGACY_NAME, LEGACY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 7, VALUE_OPT_USER, - /* equiv idx, value */ 7, VALUE_OPT_USER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ USER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --user */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ aUserMustList, aUserCantList, - /* option proc */ NULL, - /* desc, NAME, name */ USER_DESC, USER_NAME, USER_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 8, VALUE_OPT_SYSTEM, - /* equiv idx, value */ 8, VALUE_OPT_SYSTEM, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SYSTEM_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --system */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ aSystemMustList, aSystemCantList, - /* option proc */ NULL, - /* desc, NAME, name */ SYSTEM_DESC, SYSTEM_NAME, SYSTEM_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 9, VALUE_OPT_PUBKEY, - /* equiv idx, value */ 9, VALUE_OPT_PUBKEY, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ PUBKEY_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --pubkey */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ PUBKEY_DESC, PUBKEY_NAME, PUBKEY_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 10, VALUE_OPT_LIST, - /* equiv idx, value */ 10, VALUE_OPT_LIST, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ LIST_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --list */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ LIST_DESC, LIST_NAME, LIST_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 11, VALUE_OPT_DELETE, - /* equiv idx, value */ 11, VALUE_OPT_DELETE, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ DELETE_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --delete */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ DELETE_DESC, DELETE_NAME, DELETE_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 12, VALUE_OPT_TEST_SIGN, - /* equiv idx, value */ 12, VALUE_OPT_TEST_SIGN, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ TEST_SIGN_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --test-sign */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ TEST_SIGN_DESC, TEST_SIGN_NAME, TEST_SIGN_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 13, VALUE_OPT_SEC_PARAM, - /* equiv idx, value */ 13, VALUE_OPT_SEC_PARAM, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ SEC_PARAM_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --sec-param */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ SEC_PARAM_DESC, SEC_PARAM_NAME, SEC_PARAM_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 14, VALUE_OPT_BITS, - /* equiv idx, value */ 14, VALUE_OPT_BITS, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ BITS_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --bits */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionNumericVal, - /* desc, NAME, name */ BITS_DESC, BITS_NAME, BITS_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ 15, VALUE_OPT_INDER, - /* equiv idx, value */ 15, VALUE_OPT_INDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ INDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --inder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ INDER_DESC, INDER_NAME, INDER_name, - /* disablement strs */ NOT_INDER_name, NOT_INDER_PFX }, - - { /* entry idx, value */ 16, VALUE_OPT_OUTDER, - /* equiv idx, value */ 16, VALUE_OPT_OUTDER, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OUTDER_FLAGS, 0, - /* last opt argumnt */ { NULL }, /* --outder */ - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ NULL, - /* desc, NAME, name */ OUTDER_DESC, OUTDER_NAME, OUTDER_name, - /* disablement strs */ NOT_OUTDER_name, NOT_OUTDER_PFX }, - - { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ VER_FLAGS, AOUSE_VERSION, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ VER_PROC, - /* desc, NAME, name */ VER_DESC, NULL, VER_name, - /* disablement strs */ NULL, NULL }, - - - - { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ doUsageOpt, - /* desc, NAME, name */ HELP_DESC, NULL, HELP_name, - /* disablement strs */ NULL, NULL }, - - { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, - /* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP, - /* equivalenced to */ NO_EQUIVALENT, - /* min, max, act ct */ 0, 1, 0, - /* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP, - /* last opt argumnt */ { NULL }, - /* arg list/cookie */ NULL, - /* must/cannot opts */ NULL, NULL, - /* option proc */ optionPagedUsage, - /* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name, - /* disablement strs */ NULL, NULL } -}; - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** Reference to the upper cased version of tpmtool. */ -#define zPROGNAME (tpmtool_opt_strs+1933) -/** Reference to the title line for tpmtool usage. */ -#define zUsageTitle (tpmtool_opt_strs+1941) -/** There is no tpmtool configuration file. */ -#define zRcName NULL -/** There are no directories to search for tpmtool config files. */ -#define apzHomeList NULL -/** The tpmtool program bug email address. */ -#define zBugsAddr (tpmtool_opt_strs+2025) -/** Clarification/explanation of what tpmtool does. */ -#define zExplain (tpmtool_opt_strs+2045) -/** Extra detail explaining what tpmtool does. */ -#define zDetail (tpmtool_opt_strs+2047) -/** The full version string for tpmtool. */ -#define zFullVersion (tpmtool_opt_strs+2115) -/* extracted from optcode.tlib near line 364 */ - -#if defined(ENABLE_NLS) -# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT - static tOptionXlateProc translate_option_strings; -#else -# define OPTPROC_BASE OPTPROC_NONE -# define translate_option_strings NULL -#endif /* ENABLE_NLS */ - -#define tpmtool_full_usage (NULL) -#define tpmtool_short_usage (tpmtool_opt_strs+2133) - -#endif /* not defined __doxygen__ */ - -/* - * Create the static procedure(s) declared above. - */ -/** - * The callout function that invokes the optionUsage function. - * - * @param[in] opts the AutoOpts option description structure - * @param[in] od the descriptor for the "help" (usage) option. - * @noreturn - */ -static void -doUsageOpt(tOptions * opts, tOptDesc * od) -{ - int ex_code; - ex_code = TPMTOOL_EXIT_SUCCESS; - optionUsage(&tpmtoolOptions, ex_code); - /* NOTREACHED */ - exit(TPMTOOL_EXIT_FAILURE); - (void)opts; - (void)od; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the debug option. - * Specifies the debug level. - * @param[in] pOptions the tpmtool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptDebug(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static struct {long rmin, rmax;} const rng[1] = { - { 0 , 9999 } }; - int ix; - - if (pOptions <= OPTPROC_EMIT_LIMIT) - goto emit_ranges; - optionNumericVal(pOptions, pOptDesc); - - for (ix = 0; ix < 1; ix++) { - if (pOptDesc->optArg.argInt < rng[ix].rmin) - continue; /* ranges need not be ordered. */ - if (pOptDesc->optArg.argInt == rng[ix].rmin) - return; - if (rng[ix].rmax == LONG_MIN) - continue; - if (pOptDesc->optArg.argInt <= rng[ix].rmax) - return; - } - - option_usage_fp = stderr; - - emit_ranges: -optionShowRange(pOptions, pOptDesc, VOIDP(rng), 1); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Code to handle the infile option. - * - * @param[in] pOptions the tpmtool options data structure - * @param[in,out] pOptDesc the option descriptor for this option. - */ -static void -doOptInfile(tOptions* pOptions, tOptDesc* pOptDesc) -{ - static teOptFileType const type = - FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN; - static tuFileMode mode; -#ifndef O_CLOEXEC -# define O_CLOEXEC 0 -#endif - mode.file_flags = O_CLOEXEC; - - /* - * This function handles special invalid values for "pOptions" - */ - optionFileCheck(pOptions, pOptDesc, type, mode); -} -/* extracted from optmain.tlib near line 1250 */ - -/** - * The directory containing the data associated with tpmtool. - */ -#ifndef PKGDATADIR -# define PKGDATADIR "" -#endif - -/** - * Information about the person or institution that packaged tpmtool - * for the current distribution. - */ -#ifndef WITH_PACKAGER -# define tpmtool_packager_info NULL -#else -/** Packager information for tpmtool. */ -static char const tpmtool_packager_info[] = - "Packaged by " WITH_PACKAGER - -# ifdef WITH_PACKAGER_VERSION - " ("WITH_PACKAGER_VERSION")" -# endif - -# ifdef WITH_PACKAGER_BUG_REPORTS - "\nReport tpmtool bugs to " WITH_PACKAGER_BUG_REPORTS -# endif - "\n"; -#endif -#ifndef __doxygen__ - -#endif /* __doxygen__ */ -/** - * The option definitions for tpmtool. The one structure that - * binds them all. - */ -tOptions tpmtoolOptions = { - OPTIONS_STRUCT_VERSION, - 0, NULL, /* original argc + argv */ - ( OPTPROC_BASE - + OPTPROC_ERRSTOP - + OPTPROC_SHORTOPT - + OPTPROC_LONGOPT - + OPTPROC_NO_REQ_OPT - + OPTPROC_NEGATIONS - + OPTPROC_NO_ARGS - + OPTPROC_GNUUSAGE - + OPTPROC_MISUSE ), - 0, NULL, /* current option index, current option */ - NULL, NULL, zPROGNAME, - zRcName, zCopyright, zLicenseDescrip, - zFullVersion, apzHomeList, zUsageTitle, - zExplain, zDetail, optDesc, - zBugsAddr, /* address to send bugs to */ - NULL, NULL, /* extensions/saved state */ - optionUsage, /* usage procedure */ - translate_option_strings, /* translation procedure */ - /* - * Indexes to special options - */ - { INDEX_OPT_MORE_HELP, /* more-help option index */ - NO_EQUIVALENT, /* save option index */ - NO_EQUIVALENT, /* '-#' option index */ - NO_EQUIVALENT /* index of default opt */ - }, - 20 /* full option count */, 17 /* user option count */, - tpmtool_full_usage, tpmtool_short_usage, - NULL, NULL, - PKGDATADIR, tpmtool_packager_info -}; - -#if ENABLE_NLS -/** - * This code is designed to translate translatable option text for the - * tpmtool program. These translations happen upon entry - * to optionProcess(). - */ -#include -#include -#include -#include -#ifdef HAVE_DCGETTEXT -# include -#endif -#include - -static char * AO_gettext(char const * pz); -static void coerce_it(void ** s); - -/** - * AutoGen specific wrapper function for gettext. It relies on the macro _() - * to convert from English to the target language, then strdup-duplicates the - * result string. It tries the "libopts" domain first, then whatever has been - * set via the \a textdomain(3) call. - * - * @param[in] pz the input text used as a lookup key. - * @returns the translated text (if there is one), - * or the original text (if not). - */ -static char * -AO_gettext(char const * pz) -{ - char * res; - if (pz == NULL) - return NULL; -#ifdef HAVE_DCGETTEXT - /* - * While processing the option_xlateable_txt data, try to use the - * "libopts" domain. Once we switch to the option descriptor data, - * do *not* use that domain. - */ - if (option_xlateable_txt.field_ct != 0) { - res = dgettext("libopts", pz); - if (res == pz) - res = (char *)VOIDP(_(pz)); - } else - res = (char *)VOIDP(_(pz)); -#else - res = (char *)VOIDP(_(pz)); -#endif - if (res == pz) - return res; - res = strdup(res); - if (res == NULL) { - fputs(_("No memory for duping translated strings\n"), stderr); - exit(TPMTOOL_EXIT_FAILURE); - } - return res; -} - -/** - * All the pointers we use are marked "* const", but they are stored in - * writable memory. Coerce the mutability and set the pointer. - */ -static void coerce_it(void ** s) { *s = AO_gettext(*s); -} - -/** - * Translate all the translatable strings in the tpmtoolOptions - * structure defined above. This is done only once. - */ -static void -translate_option_strings(void) -{ - tOptions * const opts = &tpmtoolOptions; - - /* - * Guard against re-translation. It won't work. The strings will have - * been changed by the first pass through this code. One shot only. - */ - if (option_xlateable_txt.field_ct != 0) { - /* - * Do the translations. The first pointer follows the field count - * field. The field count field is the size of a pointer. - */ - char ** ppz = (char**)VOIDP(&(option_xlateable_txt)); - int ix = option_xlateable_txt.field_ct; - - do { - ppz++; /* skip over field_ct */ - *ppz = AO_gettext(*ppz); - } while (--ix > 0); - /* prevent re-translation and disable "libopts" domain lookup */ - option_xlateable_txt.field_ct = 0; - - coerce_it(VOIDP(&(opts->pzCopyright))); - coerce_it(VOIDP(&(opts->pzCopyNotice))); - coerce_it(VOIDP(&(opts->pzFullVersion))); - coerce_it(VOIDP(&(opts->pzUsageTitle))); - coerce_it(VOIDP(&(opts->pzExplain))); - coerce_it(VOIDP(&(opts->pzDetail))); - { - tOptDesc * od = opts->pOptDesc; - for (ix = opts->optCt; ix > 0; ix--, od++) - coerce_it(VOIDP(&(od->pzText))); - } - } -} -#endif /* ENABLE_NLS */ - -#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT -/** I18N function strictly for xgettext. Do not compile. */ -static void bogus_function(void) { - /* TRANSLATORS: - - The following dummy function was crated solely so that xgettext can - extract the correct strings. These strings are actually referenced - by a field name in the tpmtoolOptions structure noted in the - comments below. The literal text is defined in tpmtool_opt_strs. - - NOTE: the strings below are segmented with respect to the source string - tpmtool_opt_strs. The strings above are handed off for translation - at run time a paragraph at a time. Consequently, they are presented here - for translation a paragraph at a time. - - ALSO: often the description for an option will reference another option - by name. These are set off with apostrophe quotes (I hope). Do not - translate option names. - */ - /* referenced via tpmtoolOptions.pzCopyright */ - puts(_("tpmtool @VERSION@\n\ -Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved.\n\ -This is free software. It is licensed for use, modification and\n\ -redistribution under the terms of the GNU General Public License,\n\ -version 3 or later \n")); - - /* referenced via tpmtoolOptions.pzCopyNotice */ - puts(_("tpmtool is free software: you can redistribute it and/or modify it under\n\ -the terms of the GNU General Public License as published by the Free\n\ -Software Foundation, either version 3 of the License, or (at your option)\n\ -any later version.\n\n")); - puts(_("tpmtool is distributed in the hope that it will be useful, but WITHOUT ANY\n\ -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n\ -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n\ -details.\n\n")); - puts(_("You should have received a copy of the GNU General Public License along\n\ -with this program. If not, see .\n")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Enable debugging")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Input file")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Output file")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Generate an RSA private-public key pair")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Any generated key will be registered in the TPM")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Any generated key will be a signing key")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Any generated key will be a legacy key")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Any registered key will be a user key")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Any registered key will be a system key")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Prints the public key of the provided key")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Lists all stored keys in the TPM")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Delete the key identified by the given URL (UUID).")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Tests the signature operation of the provided object")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Specify the security level [low, legacy, medium, high, ultra].")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Specify the number of bits for key generate")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Use the DER format for keys.")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("Use DER format for output keys")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("display extended usage information and exit")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("extended usage information passed thru pager")); - - /* referenced via tpmtoolOptions.pOptDesc->pzText */ - puts(_("output version information and exit")); - - /* referenced via tpmtoolOptions.pzUsageTitle */ - puts(_("tpmtool - GnuTLS TPM tool\n\ -Usage: %s [ - [] | --[{=| }] ]...\n")); - - /* referenced via tpmtoolOptions.pzExplain */ - puts(_("\n")); - - /* referenced via tpmtoolOptions.pzDetail */ - puts(_("Program that allows handling cryptographic data from the TPM chip.\n")); - - /* referenced via tpmtoolOptions.pzFullVersion */ - puts(_("tpmtool @VERSION@")); - - /* referenced via tpmtoolOptions.pzFullUsage */ - puts(_("<<>>")); - - /* referenced via tpmtoolOptions.pzShortUsage */ - puts(_("tpmtool [options]\n\ -tpmtool --help for usage instructions.\n")); - /* LIBOPTS-MESSAGES: */ -#line 67 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 93 "../autoopts.c" - puts(_("allocation of %d bytes failed\n")); -#line 53 "../init.c" - puts(_("AutoOpts function called without option descriptor\n")); -#line 86 "../init.c" - puts(_("\tThis exceeds the compiled library version: ")); -#line 84 "../init.c" - puts(_("Automated Options Processing Error!\n" - "\t%s called AutoOpts function with structure version %d:%d:%d.\n")); -#line 80 "../autoopts.c" - puts(_("realloc of %d bytes at 0x%p failed\n")); -#line 88 "../init.c" - puts(_("\tThis is less than the minimum library version: ")); -#line 121 "../version.c" - puts(_("Automated Options version %s\n" - "\tCopyright (C) 1999-2014 by Bruce Korb - all rights reserved\n")); -#line 87 "../makeshell.c" - puts(_("(AutoOpts bug): %s.\n")); -#line 90 "../reset.c" - puts(_("optionResetOpt() called, but reset-option not configured")); -#line 295 "../usage.c" - puts(_("could not locate the 'help' option")); -#line 336 "../autoopts.c" - puts(_("optionProcess() was called with invalid data")); -#line 751 "../usage.c" - puts(_("invalid argument type specified")); -#line 598 "../find.c" - puts(_("defaulted to option with optional arg")); -#line 76 "../alias.c" - puts(_("aliasing option is out of range.")); -#line 235 "../enum.c" - puts(_("%s error: the keyword '%s' is ambiguous for %s\n")); -#line 108 "../find.c" - puts(_(" The following options match:\n")); -#line 293 "../find.c" - puts(_("%s: ambiguous option name: %s (matches %d options)\n")); -#line 161 "../check.c" - puts(_("%s: Command line arguments required\n")); -#line 43 "../alias.c" - puts(_("%d %s%s options allowed\n")); -#line 94 "../makeshell.c" - puts(_("%s error %d (%s) calling %s for '%s'\n")); -#line 306 "../makeshell.c" - puts(_("interprocess pipe")); -#line 168 "../version.c" - puts(_("error: version option argument '%c' invalid. Use:\n" - "\t'v' - version only\n" - "\t'c' - version and copyright\n" - "\t'n' - version and full copyright notice\n")); -#line 58 "../check.c" - puts(_("%s error: the '%s' and '%s' options conflict\n")); -#line 217 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 430 "../find.c" - puts(_("%s: The '%s' option has been disabled.")); -#line 38 "../alias.c" - puts(_("-equivalence")); -#line 469 "../find.c" - puts(_("%s: illegal option -- %c\n")); -#line 110 "../reset.c" - puts(_("%s: illegal option -- %c\n")); -#line 271 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 755 "../find.c" - puts(_("%s: illegal option -- %s\n")); -#line 118 "../reset.c" - puts(_("%s: illegal option -- %s\n")); -#line 335 "../find.c" - puts(_("%s: unknown vendor extension option -- %s\n")); -#line 160 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 170 "../enum.c" - puts(_(" or an integer from %d through %d\n")); -#line 750 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 1084 "../usage.c" - puts(_("%s error: invalid option descriptor for %s\n")); -#line 385 "../find.c" - puts(_("%s: invalid option name: %s\n")); -#line 527 "../find.c" - puts(_("%s: The '%s' option requires an argument.\n")); -#line 156 "../autoopts.c" - puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n" - "\t'%s' and '%s'.")); -#line 94 "../check.c" - puts(_("%s error: The %s option is required\n")); -#line 632 "../find.c" - puts(_("%s: The '%s' option cannot have an argument.\n")); -#line 151 "../check.c" - puts(_("%s: Command line arguments are not allowed.\n")); -#line 536 "../save.c" - puts(_("error %d (%s) creating %s\n")); -#line 235 "../enum.c" - puts(_("%s error: '%s' does not match any %s keywords.\n")); -#line 93 "../reset.c" - puts(_("%s error: The '%s' option requires an argument.\n")); -#line 186 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 239 "../save.c" - puts(_("error %d (%s) stat-ing %s\n")); -#line 143 "../restore.c" - puts(_("%s error: no saved option state\n")); -#line 231 "../autoopts.c" - puts(_("'%s' is not a command line option.\n")); -#line 113 "../time.c" - puts(_("%s error: '%s' is not a recognizable date/time.\n")); -#line 131 "../save.c" - puts(_("'%s' not defined\n")); -#line 50 "../time.c" - puts(_("%s error: '%s' is not a recognizable time duration.\n")); -#line 92 "../check.c" - puts(_("%s error: The %s option must appear %d times.\n")); -#line 165 "../numeric.c" - puts(_("%s error: '%s' is not a recognizable number.\n")); -#line 201 "../enum.c" - puts(_("%s error: %s exceeds %s keyword count\n")); -#line 333 "../usage.c" - puts(_("Try '%s %s' for more information.\n")); -#line 45 "../alias.c" - puts(_("one %s%s option allowed\n")); -#line 208 "../makeshell.c" - puts(_("standard output")); -#line 943 "../makeshell.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard output")); -#line 418 "../usage.c" - puts(_("standard output")); -#line 628 "../usage.c" - puts(_("standard output")); -#line 175 "../version.c" - puts(_("standard output")); -#line 277 "../usage.c" - puts(_("standard error")); -#line 418 "../usage.c" - puts(_("standard error")); -#line 628 "../usage.c" - puts(_("standard error")); -#line 175 "../version.c" - puts(_("standard error")); -#line 208 "../makeshell.c" - puts(_("write")); -#line 943 "../makeshell.c" - puts(_("write")); -#line 276 "../usage.c" - puts(_("write")); -#line 417 "../usage.c" - puts(_("write")); -#line 627 "../usage.c" - puts(_("write")); -#line 174 "../version.c" - puts(_("write")); -#line 60 "../numeric.c" - puts(_("%s error: %s option value %ld is out of range.\n")); -#line 44 "../check.c" - puts(_("%s error: %s option requires the %s option\n")); -#line 130 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 185 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 238 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 257 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); -#line 535 "../save.c" - puts(_("%s warning: cannot save options - %s not regular file\n")); - /* END-LIBOPTS-MESSAGES */ - - /* USAGE-TEXT: */ -#line 876 "../usage.c" - puts(_("\t\t\t\t- an alternate for '%s'\n")); -#line 1151 "../usage.c" - puts(_("Version, usage and configuration options:")); -#line 927 "../usage.c" - puts(_("\t\t\t\t- default option for unnamed options\n")); -#line 840 "../usage.c" - puts(_("\t\t\t\t- disabled as '--%s'\n")); -#line 1120 "../usage.c" - puts(_(" --- %-14s %s\n")); -#line 1118 "../usage.c" - puts(_("This option has been disabled")); -#line 867 "../usage.c" - puts(_("\t\t\t\t- enabled by default\n")); -#line 40 "../alias.c" - puts(_("%s error: only ")); -#line 1197 "../usage.c" - puts(_(" - examining environment variables named %s_*\n")); -#line 168 "../file.c" - puts(_("\t\t\t\t- file must not pre-exist\n")); -#line 172 "../file.c" - puts(_("\t\t\t\t- file must pre-exist\n")); -#line 383 "../usage.c" - puts(_("Options are specified by doubled hyphens and their name or by a single\n" - "hyphen and the flag character.\n")); -#line 921 "../makeshell.c" - puts(_("\n" - "= = = = = = = =\n\n" - "This incarnation of genshell will produce\n" - "a shell script to parse the options for %s:\n\n")); -#line 167 "../enum.c" - puts(_(" or an integer mask with any of the lower %d bits set\n")); -#line 900 "../usage.c" - puts(_("\t\t\t\t- is a set membership option\n")); -#line 921 "../usage.c" - puts(_("\t\t\t\t- must appear between %d and %d times\n")); -#line 385 "../usage.c" - puts(_("Options are specified by single or double hyphens and their name.\n")); -#line 907 "../usage.c" - puts(_("\t\t\t\t- may appear multiple times\n")); -#line 894 "../usage.c" - puts(_("\t\t\t\t- may not be preset\n")); -#line 1312 "../usage.c" - puts(_(" Arg Option-Name Description\n")); -#line 1248 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1306 "../usage.c" - puts(_(" Flg Arg Option-Name Description\n")); -#line 1307 "../usage.c" - puts(_(" %3s %s")); -#line 1313 "../usage.c" - puts(_(" %3s %s")); -#line 390 "../usage.c" - puts(_("The '-#' option may omit the hash char\n")); -#line 386 "../usage.c" - puts(_("All arguments are named options.\n")); -#line 974 "../usage.c" - puts(_(" - reading file %s")); -#line 412 "../usage.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 100 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 129 "../version.c" - puts(_("\n" - "Please send bug reports to: <%s>\n")); -#line 906 "../usage.c" - puts(_("\t\t\t\t- may NOT appear - preset only\n")); -#line 947 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 1195 "../usage.c" - puts(_("\n" - "The following option preset mechanisms are supported:\n")); -#line 685 "../usage.c" - puts(_("prohibits these options:\n")); -#line 680 "../usage.c" - puts(_("prohibits the option '%s'\n")); -#line 81 "../numeric.c" - puts(_("%s%ld to %ld")); -#line 79 "../numeric.c" - puts(_("%sgreater than or equal to %ld")); -#line 75 "../numeric.c" - puts(_("%s%ld exactly")); -#line 68 "../numeric.c" - puts(_("%sit must lie in one of the ranges:\n")); -#line 68 "../numeric.c" - puts(_("%sit must be in the range:\n")); -#line 88 "../numeric.c" - puts(_(", or\n")); -#line 66 "../numeric.c" - puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n")); -#line 77 "../numeric.c" - puts(_("%sless than or equal to %ld")); -#line 393 "../usage.c" - puts(_("Operands and options may be intermixed. They will be reordered.\n")); -#line 655 "../usage.c" - puts(_("requires the option '%s'\n")); -#line 658 "../usage.c" - puts(_("requires these options:\n")); -#line 1324 "../usage.c" - puts(_(" Arg Option-Name Req? Description\n")); -#line 1318 "../usage.c" - puts(_(" Flg Arg Option-Name Req? Description\n")); -#line 168 "../enum.c" - puts(_("or you may use a numeric representation. Preceding these with a '!'\n" - "will clear the bits, specifying 'none' will clear all bits, and 'all'\n" - "will set them all. Multiple entries may be passed as an option\n" - "argument list.\n")); -#line 913 "../usage.c" - puts(_("\t\t\t\t- may appear up to %d times\n")); -#line 77 "../enum.c" - puts(_("The valid \"%s\" option keywords are:\n")); -#line 1155 "../usage.c" - puts(_("The next option supports vendor supported extra options:")); -#line 776 "../usage.c" - puts(_("These additional options are:")); - /* END-USAGE-TEXT */ -} -#endif /* uncompilable code */ -#ifdef __cplusplus -} -#endif -/* tpmtool-args.c ends here */ diff --git a/src/tpmtool-args.def b/src/tpmtool-args.def index 6d6ba064ea..85ec9e6f07 100644 --- a/src/tpmtool-args.def +++ b/src/tpmtool-args.def @@ -123,6 +123,11 @@ flag = { doc = "The output will be in the TPM portable DER format."; }; +flag = { + name = srk-well-known; + descrip = "SRK has well known password (20 bytes of zeros)"; +}; + doc-section = { ds-type = 'SEE ALSO'; ds-format = 'texi'; diff --git a/src/tpmtool-args.h.bak b/src/tpmtool-args.h.bak deleted file mode 100644 index b7ab92d0ed..0000000000 --- a/src/tpmtool-args.h.bak +++ /dev/null @@ -1,247 +0,0 @@ -/* -*- buffer-read-only: t -*- vi: set ro: - * - * DO NOT EDIT THIS FILE (tpmtool-args.h) - * - * It has been AutoGen-ed - * From the definitions tpmtool-args.def - * and the template file options - * - * Generated from AutoOpts 41:1:16 templates. - * - * AutoOpts is a copyrighted work. This header file is not encumbered - * by AutoOpts licensing, but is provided under the licensing terms chosen - * by the tpmtool author or copyright holder. AutoOpts is - * licensed under the terms of the LGPL. The redistributable library - * (``libopts'') is licensed under the terms of either the LGPL or, at the - * users discretion, the BSD license. See the AutoOpts and/or libopts sources - * for details. - * - * The tpmtool program is copyrighted and licensed - * under the following terms: - * - * Copyright (C) 2000-@YEAR@ Free Software Foundation, and others, all rights reserved. - * This is free software. It is licensed for use, modification and - * redistribution under the terms of the GNU General Public License, - * version 3 or later - * - * tpmtool is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * tpmtool is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ -/** - * This file contains the programmatic interface to the Automated - * Options generated for the tpmtool program. - * These macros are documented in the AutoGen info file in the - * "AutoOpts" chapter. Please refer to that doc for usage help. - */ -#ifndef AUTOOPTS_TPMTOOL_ARGS_H_GUARD -#define AUTOOPTS_TPMTOOL_ARGS_H_GUARD 1 -#include "config.h" -#include - -/** - * Ensure that the library used for compiling this generated header is at - * least as new as the version current when the header template was released - * (not counting patch version increments). Also ensure that the oldest - * tolerable version is at least as old as what was current when the header - * template was released. - */ -#define AO_TEMPLATE_VERSION 167937 -#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ - || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) -# error option template version mismatches autoopts/options.h header - Choke Me. -#endif - -/** - * Enumeration of each option type for tpmtool - */ -typedef enum { - INDEX_OPT_DEBUG = 0, - INDEX_OPT_INFILE = 1, - INDEX_OPT_OUTFILE = 2, - INDEX_OPT_GENERATE_RSA = 3, - INDEX_OPT_REGISTER = 4, - INDEX_OPT_SIGNING = 5, - INDEX_OPT_LEGACY = 6, - INDEX_OPT_USER = 7, - INDEX_OPT_SYSTEM = 8, - INDEX_OPT_PUBKEY = 9, - INDEX_OPT_LIST = 10, - INDEX_OPT_DELETE = 11, - INDEX_OPT_TEST_SIGN = 12, - INDEX_OPT_SEC_PARAM = 13, - INDEX_OPT_BITS = 14, - INDEX_OPT_INDER = 15, - INDEX_OPT_OUTDER = 16, - INDEX_OPT_VERSION = 17, - INDEX_OPT_HELP = 18, - INDEX_OPT_MORE_HELP = 19 -} teOptIndex; -/** count of all options for tpmtool */ -#define OPTION_CT 20 -/** tpmtool version */ -#define TPMTOOL_VERSION "@VERSION@" -/** Full tpmtool version text */ -#define TPMTOOL_FULL_VERSION "tpmtool @VERSION@" - -/** - * Interface defines for all options. Replace "n" with the UPPER_CASED - * option name (as in the teOptIndex enumeration above). - * e.g. HAVE_OPT(DEBUG) - */ -#define DESC(n) (tpmtoolOptions.pOptDesc[INDEX_OPT_## n]) -/** 'true' if an option has been specified in any way */ -#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) -/** The string argument to an option. The argument type must be \"string\". */ -#define OPT_ARG(n) (DESC(n).optArg.argString) -/** Mask the option state revealing how an option was specified. - * It will be one and only one of \a OPTST_SET, \a OPTST_PRESET, - * \a OPTST_DEFINED, \a OPTST_RESET or zero. - */ -#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) -/** Count of option's occurrances *on the command line*. */ -#define COUNT_OPT(n) (DESC(n).optOccCt) -/** mask of \a OPTST_SET and \a OPTST_DEFINED. */ -#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) -/** 'true' if \a HAVE_OPT would yield 'false'. */ -#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) -/** 'true' if OPTST_DISABLED bit not set. */ -#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) -/** number of stacked option arguments. - * Valid only for stacked option arguments. */ -#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) -/** stacked argument vector. - * Valid only for stacked option arguments. */ -#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) -/** Reset an option. */ -#define CLEAR_OPT(n) STMTS( \ - DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ - if ((DESC(n).fOptState & OPTST_INITENABLED) == 0) \ - DESC(n).fOptState |= OPTST_DISABLED; \ - DESC(n).optCookie = NULL ) -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -/** - * Enumeration of tpmtool exit codes - */ -typedef enum { - TPMTOOL_EXIT_SUCCESS = 0, - TPMTOOL_EXIT_FAILURE = 1, - TPMTOOL_EXIT_USAGE_ERROR = 64, - TPMTOOL_EXIT_LIBOPTS_FAILURE = 70 -} tpmtool_exit_code_t; -/** - * Interface defines for specific options. - * @{ - */ -#define VALUE_OPT_DEBUG 'd' - -#define OPT_VALUE_DEBUG (DESC(DEBUG).optArg.argInt) -#define VALUE_OPT_INFILE 0x1001 -#define VALUE_OPT_OUTFILE 0x1002 -#define VALUE_OPT_GENERATE_RSA 0x1003 -#define VALUE_OPT_REGISTER 0x1004 -#define VALUE_OPT_SIGNING 0x1005 -#define VALUE_OPT_LEGACY 0x1006 -#define VALUE_OPT_USER 0x1007 -#define VALUE_OPT_SYSTEM 0x1008 -#define VALUE_OPT_PUBKEY 0x1009 -#define VALUE_OPT_LIST 0x100A -#define VALUE_OPT_DELETE 0x100B -#define VALUE_OPT_TEST_SIGN 0x100C -#define VALUE_OPT_SEC_PARAM 0x100D -#define VALUE_OPT_BITS 0x100E - -#define OPT_VALUE_BITS (DESC(BITS).optArg.argInt) -#define VALUE_OPT_INDER 0x100F -#define VALUE_OPT_OUTDER 0x1010 -/** option flag (value) for help-value option */ -#define VALUE_OPT_HELP 'h' -/** option flag (value) for more-help-value option */ -#define VALUE_OPT_MORE_HELP '!' -/** option flag (value) for version-value option */ -#define VALUE_OPT_VERSION 'v' -/* - * Interface defines not associated with particular options - */ -#define ERRSKIP_OPTERR STMTS(tpmtoolOptions.fOptSet &= ~OPTPROC_ERRSTOP) -#define ERRSTOP_OPTERR STMTS(tpmtoolOptions.fOptSet |= OPTPROC_ERRSTOP) -#define RESTART_OPT(n) STMTS( \ - tpmtoolOptions.curOptIdx = (n); \ - tpmtoolOptions.pzCurOpt = NULL ) -#define START_OPT RESTART_OPT(1) -#define USAGE(c) (*tpmtoolOptions.pUsageProc)(&tpmtoolOptions, c) - -#ifdef __cplusplus -extern "C" { -#endif -/* - * global exported definitions - */ -#include - - -/* * * * * * - * - * Declare the tpmtool option descriptor. - */ -extern tOptions tpmtoolOptions; - -#if defined(ENABLE_NLS) -# ifndef _ -# include -# ifndef HAVE_GETTEXT - extern char * gettext(char const *); -# else -# include -# endif - -# ifndef ATTRIBUTE_FORMAT_ARG -# define ATTRIBUTE_FORMAT_ARG(_a) -# endif - -static inline char* aoGetsText(char const* pz) ATTRIBUTE_FORMAT_ARG(1); -static inline char* aoGetsText(char const* pz) { - if (pz == NULL) return NULL; - return (char*)gettext(pz); -} -# define _(s) aoGetsText(s) -# endif /* _() */ - -# define OPT_NO_XLAT_CFG_NAMES STMTS(tpmtoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT_CFG;) -# define OPT_NO_XLAT_OPT_NAMES STMTS(tpmtoolOptions.fOptSet |= \ - OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG;) - -# define OPT_XLAT_CFG_NAMES STMTS(tpmtoolOptions.fOptSet &= \ - ~(OPTPROC_NXLAT_OPT|OPTPROC_NXLAT_OPT_CFG);) -# define OPT_XLAT_OPT_NAMES STMTS(tpmtoolOptions.fOptSet &= \ - ~OPTPROC_NXLAT_OPT;) - -#else /* ENABLE_NLS */ -# define OPT_NO_XLAT_CFG_NAMES -# define OPT_NO_XLAT_OPT_NAMES - -# define OPT_XLAT_CFG_NAMES -# define OPT_XLAT_OPT_NAMES - -# ifndef _ -# define _(_s) _s -# endif -#endif /* ENABLE_NLS */ - -#ifdef __cplusplus -} -#endif -#endif /* AUTOOPTS_TPMTOOL_ARGS_H_GUARD */ - -/* tpmtool-args.h ends here */ diff --git a/src/tpmtool.c b/src/tpmtool.c index a9877829c7..c8862f0c4d 100644 --- a/src/tpmtool.c +++ b/src/tpmtool.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see - * . + * . */ #include @@ -49,9 +49,12 @@ static void cmd_parser(int argc, char **argv); static void tpm_generate(FILE * outfile, unsigned int key_type, - unsigned int bits, unsigned int flags); -static void tpm_pubkey(const char *url, FILE * outfile); -static void tpm_delete(const char *url, FILE * outfile); + unsigned int bits, unsigned int flags, + unsigned int srk_well_known); +static void tpm_pubkey(const char *url, FILE * outfile, + unsigned int srk_well_known); +static void tpm_delete(const char *url, FILE * outfile, + unsigned int srk_well_known); static void tpm_test_sign(const char *url, FILE * outfile); static void tpm_list(FILE * outfile); @@ -90,7 +93,6 @@ int main(int argc, char **argv) static void cmd_parser(int argc, char **argv) { int ret, debug = 0; - unsigned int optct; unsigned int key_type = GNUTLS_PK_UNKNOWN; unsigned int bits = 0; unsigned int genflags = 0; @@ -99,9 +101,7 @@ static void cmd_parser(int argc, char **argv) */ const char *sec_param = "legacy"; - optct = optionProcess(&tpmtoolOptions, argc, argv); - argc += optct; - argv += optct; + optionProcess(&tpmtoolOptions, argc, argv); if (HAVE_OPT(DEBUG)) debug = OPT_VALUE_DEBUG; @@ -167,11 +167,11 @@ static void cmd_parser(int argc, char **argv) if (HAVE_OPT(GENERATE_RSA)) { key_type = GNUTLS_PK_RSA; bits = get_bits(key_type, bits, sec_param, 0); - tpm_generate(outfile, key_type, bits, genflags); + tpm_generate(outfile, key_type, bits, genflags, HAVE_OPT(SRK_WELL_KNOWN)); } else if (HAVE_OPT(PUBKEY)) { - tpm_pubkey(OPT_ARG(PUBKEY), outfile); + tpm_pubkey(OPT_ARG(PUBKEY), outfile, HAVE_OPT(SRK_WELL_KNOWN)); } else if (HAVE_OPT(DELETE)) { - tpm_delete(OPT_ARG(DELETE), outfile); + tpm_delete(OPT_ARG(DELETE), outfile, HAVE_OPT(SRK_WELL_KNOWN)); } else if (HAVE_OPT(LIST)) { tpm_list(outfile); } else if (HAVE_OPT(TEST_SIGN)) { @@ -255,15 +255,18 @@ tpm_test_sign(const char *url, FILE * out) } static void tpm_generate(FILE * out, unsigned int key_type, - unsigned int bits, unsigned int flags) + unsigned int bits, unsigned int flags, + unsigned int srk_well_known) { int ret; - char *srk_pass, *key_pass = NULL; + char *srk_pass = NULL, *key_pass = NULL; gnutls_datum_t privkey, pubkey; - srk_pass = getpass("Enter SRK password: "); - if (srk_pass != NULL) - srk_pass = strdup(srk_pass); + if (!srk_well_known) { + srk_pass = getpass("Enter SRK password: "); + if (srk_pass != NULL) + srk_pass = strdup(srk_pass); + } if (!(flags & GNUTLS_TPM_REGISTER_KEY)) { key_pass = getpass("Enter key password: "); @@ -293,12 +296,14 @@ static void tpm_generate(FILE * out, unsigned int key_type, gnutls_free(pubkey.data); } -static void tpm_delete(const char *url, FILE * out) +static void tpm_delete(const char *url, FILE * out, + unsigned int srk_well_known) { int ret; - char *srk_pass; + char *srk_pass = NULL; - srk_pass = getpass("Enter SRK password: "); + if (!srk_well_known) + srk_pass = getpass("Enter SRK password: "); ret = gnutls_tpm_privkey_delete(url, srk_pass); if (ret < 0) { @@ -332,6 +337,7 @@ static void tpm_list(FILE * out) else if (ret < 0) { fprintf(stderr, "gnutls_tpm_key_list_get_url: %s\n", gnutls_strerror(ret)); + gnutls_tpm_key_list_deinit(list); exit(1); } @@ -339,18 +345,21 @@ static void tpm_list(FILE * out) gnutls_free(url); } + gnutls_tpm_key_list_deinit(list); fputs("\n", out); } -static void tpm_pubkey(const char *url, FILE * out) +static void tpm_pubkey(const char *url, FILE * out, unsigned int srk_well_known) { int ret; - char *srk_pass; + char *srk_pass = NULL; gnutls_pubkey_t pubkey; - srk_pass = getpass("Enter SRK password: "); - if (srk_pass != NULL) - srk_pass = strdup(srk_pass); + if (!srk_well_known) { + srk_pass = getpass("Enter SRK password: "); + if (srk_pass != NULL) + srk_pass = strdup(srk_pass); + } gnutls_pubkey_init(&pubkey); @@ -364,7 +373,7 @@ static void tpm_pubkey(const char *url, FILE * out) exit(1); } - _pubkey_info(out, GNUTLS_CRT_PRINT_FULL, pubkey); + print_pubkey_info(pubkey, out, GNUTLS_CRT_PRINT_FULL, GNUTLS_X509_FMT_PEM, 1); gnutls_pubkey_deinit(pubkey); } diff --git a/src/udp-serv.c b/src/udp-serv.c index 046026e00c..9b71719fd2 100644 --- a/src/udp-serv.c +++ b/src/udp-serv.c @@ -14,7 +14,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ #include @@ -36,8 +36,11 @@ #include #include #include "udp-serv.h" +#include "serv-args.h" #include "list.h" +extern int disable_client_cert; + typedef struct { gnutls_session_t session; int fd; @@ -53,6 +56,15 @@ static ssize_t pull_func(gnutls_transport_ptr_t p, void *data, #define MAX_BUFFER 255 /* Longest string to echo */ +/* record layer indication for a handshake packet */ +#define HANDSHAKE_CONTENT_TYPE 22 +/* TLS record content is the first by of the packet */ +#define RECORD_CONTENT_POS 0 +/* handshake type is first byte in Handshake packet; + * we have to skip type;version;epoch;sequence_number; + * and length in DTLSPlaintext */ +#define HANDSHAKE_TYPE_POS 13 + void udp_server(const char *name, int port, int mtu) { int sock, ret; @@ -88,40 +100,46 @@ void udp_server(const char *name, int port, int mtu) recvfrom(sock, buffer, sizeof(buffer)-1, MSG_PEEK, (struct sockaddr *) &cli_addr, &cli_addr_size); - if (ret > 0) { - memset(&prestate, 0, sizeof(prestate)); - ret = - gnutls_dtls_cookie_verify(&cookie_key, - &cli_addr, - cli_addr_size, - buffer, ret, - &prestate); - if (ret < 0) { /* cookie not valid */ - priv_data_st s; - - memset(&s, 0, sizeof(s)); - s.fd = sock; - s.cli_addr = (void *) &cli_addr; - s.cli_addr_size = cli_addr_size; - - printf - ("Sending hello verify request to %s\n", - human_addr((struct sockaddr *) - &cli_addr, - cli_addr_size, buffer, - sizeof(buffer)-1)); - gnutls_dtls_cookie_send(&cookie_key, + + /* only accept a valid client hello */ + if (ret > HANDSHAKE_TYPE_POS && + buffer[RECORD_CONTENT_POS] == HANDSHAKE_CONTENT_TYPE && + buffer[HANDSHAKE_TYPE_POS] == GNUTLS_HANDSHAKE_CLIENT_HELLO) { + if (!HAVE_OPT(NOCOOKIE)) { + memset(&prestate, 0, sizeof(prestate)); + ret = + gnutls_dtls_cookie_verify(&cookie_key, + &cli_addr, + cli_addr_size, + buffer, ret, + &prestate); + if (ret < 0) { /* cookie not valid */ + priv_data_st s; + + memset(&s, 0, sizeof(s)); + s.fd = sock; + s.cli_addr = (void *) &cli_addr; + s.cli_addr_size = cli_addr_size; + + printf + ("Sending hello verify request to %s\n", + human_addr((struct sockaddr *) &cli_addr, - cli_addr_size, - &prestate, - (gnutls_transport_ptr_t) - &s, push_func); - - /* discard peeked data */ - recvfrom(sock, buffer, sizeof(buffer)-1, 0, - (struct sockaddr *) &cli_addr, - &cli_addr_size); - continue; + cli_addr_size, buffer, + sizeof(buffer)-1)); + gnutls_dtls_cookie_send(&cookie_key, + &cli_addr, + cli_addr_size, + &prestate, + (gnutls_transport_ptr_t) + &s, push_func); + + /* discard peeked data */ + recvfrom(sock, buffer, sizeof(buffer)-1, 0, + (struct sockaddr *) &cli_addr, + &cli_addr_size); + continue; + } } printf("Accepted connection from %s\n", human_addr((struct sockaddr *) @@ -131,7 +149,9 @@ void udp_server(const char *name, int port, int mtu) continue; session = initialize_session(1); - gnutls_dtls_prestate_set(session, &prestate); + if (!HAVE_OPT(NOCOOKIE)) + gnutls_dtls_prestate_set(session, &prestate); + if (mtu) gnutls_dtls_set_mtu(session, mtu); @@ -202,7 +222,7 @@ void udp_server(const char *name, int port, int mtu) sequence[3], sequence[4], sequence[5], sequence[6], sequence[7], buffer); - if (check_command(session, buffer) == 0) { + if (check_command(session, buffer, disable_client_cert) == 0) { /* reply back */ ret = gnutls_record_send(session, buffer, @@ -215,8 +235,8 @@ void udp_server(const char *name, int port, int mtu) } } } + gnutls_deinit(session); } - gnutls_deinit(session); } /* Wait for data to be received within a timeout period in milliseconds @@ -234,13 +254,8 @@ static int pull_timeout_func(gnutls_transport_ptr_t ptr, unsigned int ms) FD_ZERO(&rfds); FD_SET(priv->fd, &rfds); - tv.tv_sec = 0; - tv.tv_usec = ms * 1000; - - while (tv.tv_usec >= 1000000) { - tv.tv_usec -= 1000000; - tv.tv_sec++; - } + tv.tv_sec = ms / 1000; + tv.tv_usec = (ms % 1000) * 1000; ret = select(priv->fd + 1, &rfds, NULL, NULL, &tv); diff --git a/src/udp-serv.h b/src/udp-serv.h index d956f87789..08c88de254 100644 --- a/src/udp-serv.h +++ b/src/udp-serv.h @@ -14,9 +14,12 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ +#ifndef GNUTLS_SRC_UDP_SERV_H +#define GNUTLS_SRC_UDP_SERV_H + #include void udp_server(const char *name, int port, int mtu); @@ -25,3 +28,5 @@ const char *human_addr(const struct sockaddr *sa, socklen_t salen, char *buf, size_t buflen); int wait_for_connection(void); int listen_socket(const char *name, int listen_port, int socktype); + +#endif /* GNUTLS_SRC_UDP_SERV_H */ diff --git a/tests/Makefile.am b/tests/Makefile.am index 3bac80b531..a41067f5af 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -15,43 +15,64 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# You should have received a copy of the GNU General Public License -# along with this file; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see +# + +SUBDIRS = . cert-tests slow -SUBDIRS = . cert-tests key-tests slow dtls windows +TESTS_ENVIRONMENT = + +if WINDOWS +SUBDIRS += windows +endif if WANT_TEST_SUITE SUBDIRS += suite endif EXTRA_DIST = suppressions.valgrind eagain-common.h cert-common.h test-chains.h \ + ocsp-common.h cmocka-common.h virt-time.h \ certs/ca-cert-ecc.pem certs/cert-ecc256.pem certs/cert-ecc521.pem \ - certs/cert-rsa-2432.pem certs/ecc384.pem certs/ecc.pem \ + certs/cert-rsa-2432.pem certs/ecc384.pem certs/ecc.pem hex.h \ certs/ca-ecc.pem certs/cert-ecc384.pem certs/cert-ecc.pem certs/ecc256.pem \ certs/ecc521.pem certs/rsa-2432.pem x509cert-dir/ca.pem psk.passwd \ + certs/rawpk_priv.pem certs/rawpk_pub.pem \ + certs/ed25519.pem certs/cert-ed25519.pem certs/rsa-512.pem \ system.prio pkcs11/softhsm.h pkcs11/pkcs11-pubkey-import.c gnutls-asan.supp \ rsa-md5-collision/README safe-renegotiation/README starttls-smtp.txt starttls-ftp.txt \ - starttls-lmtp.txt starttls-pop3.txt starttls-nntp.txt starttls-sieve.txt \ + starttls-lmtp.txt starttls-pop3.txt starttls-xmpp.txt starttls-nntp.txt starttls-sieve.txt \ rsa-md5-collision/colliding-chain-md5-2.pem rsa-md5-collision/colliding-chain-md5-1.pem \ + ocsp-tests/certs/ocsp-amazon.com.der ocsp-tests/certs/chain-amazon.com.pem \ + ocsp-tests/certs/chain-amazon.com-unsorted.pem cipher-neg-common.c \ + ocsp-tests/certs/chain-akamai.com.pem ocsp-tests/certs/ocsp-akamai.com.der \ + tls13/ext-parse.h \ certs-interesting/README.md certs-interesting/cert1.der certs-interesting/cert1.der.err \ certs-interesting/cert2.der certs-interesting/cert2.der.err certs-interesting/cert3.der \ certs-interesting/cert3.der.err certs-interesting/cert4.der certs-interesting/cert5.der \ - certs-interesting/cert6.der certs-interesting/cert7.der certs-interesting/cert8.der \ - certs-interesting/cert9.der certs-interesting/cert5.der.err \ - certs-interesting/cert3.der.err certs-interesting/cert4.der pkcs7-interesting/pkcs7-1.der \ - pkcs7-interesting/pkcs7-1.der.err pkcs7-interesting/pkcs7-2.der pkcs7-interesting/pkcs7-2.der.err \ - client-interesting/client1.raw client-interesting/client2.raw client-interesting/client3.disabled \ - server-interesting/server1.raw scripts/common.sh scripts/starttls-common.sh \ - client-interesting/client3.raw rng-op.c x509sign-verify-common.h \ + certs-interesting/cert5.der.err certs-interesting/cert6.der certs-interesting/cert6.der.err \ + certs-interesting/cert7.der certs-interesting/cert8.der \ + certs-interesting/cert9.der certs-interesting/cert10.der \ + certs-interesting/cert3.der.err certs-interesting/cert4.der \ + scripts/common.sh scripts/starttls-common.sh \ + rng-op.c x509sign-verify-common.h common-key-tests.h \ ocsp-tests/certs/ca.key ocsp-tests/certs/ca.pem ocsp-tests/certs/ocsp-server.key ocsp-tests/certs/ocsp-server.pem ocsp-tests/response1.der \ ocsp-tests/response2.der ocsp-tests/certs/ocsp_index.txt ocsp-tests/certs/ocsp_index.txt.attr \ + ocsp-tests/response1.pem ocsp-tests/response2.pem \ ocsp-tests/certs/server_good.key ocsp-tests/certs/server_bad.key ocsp-tests/certs/server_good.template \ ocsp-tests/certs/server_bad.template ocsp-tests/certs/ocsp-staple-unrelated.der ocsp-tests/suppressions.valgrind \ data/listings-DTLS1.0 data/listings-SSL3.0 data/listings-TLS1.0 data/listings-TLS1.1 \ - data/listings-SSL3.0-TLS1.1 p11-kit-trust-data/Example_Root_CA.p11-kit \ - p11-kit-trust-data/Example_Root_CA.pem - + data/listings-legacy1 data/listings-legacy2 data/listings-legacy3 data/listings-legacy4 \ + data/listings-old-SSL3.0-TLS1.1 data/listings-SSL3.0-TLS1.1 \ + p11-kit-trust-data/Example_Root_CA.p11-kit server-kx-neg-common.c \ + p11-kit-trust-data/Example_Root_CA.pem data/test1.cat data/test2.cat \ + data/test1.cat.data data/test2.cat.data data/test1.cat.out data/test2.cat.out \ + data/pkcs7-cat-ca.pem data/long.crl data/long.pem data/large-cert.pem \ + testpkcs11.pkcs15 testpkcs11.softhsm testpkcs11.sc-hsm testpkcs11-certs/ca.crt testpkcs11-certs/ca-tmpl \ + testpkcs11-certs/client.key testpkcs11-certs/server.crt testpkcs11-certs/server-tmpl \ + testpkcs11-certs/ca.key testpkcs11-certs/client.crt testpkcs11-certs/client-tmpl testpkcs11-certs/server.key \ + crt_type-neg-common.c \ + system-override-default-priority-string.bad.config system-override-default-priority-string.none.config system-override-default-priority-string.only-tls13.config AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = \ @@ -67,7 +88,7 @@ AM_CPPFLAGS = \ AM_LDFLAGS = -no-install COMMON_GNUTLS_LDADD = ../lib/libgnutls.la -COMMON_DEPS_LDADD = $(LIBSOCKET) $(INET_NTOP_LIB) $(INET_PTON_LIB) $(LIBSECCOMP) +COMMON_DEPS_LDADD = $(LIBSOCKET) $(INET_NTOP_LIB) $(INET_PTON_LIB) $(LIBSECCOMP) $(LIBRT) COMMON_LDADD = $(COMMON_GNUTLS_LDADD) $(COMMON_DEPS_LDADD) LDADD = $(COMMON_GNUTLS_LDADD) \ @@ -85,104 +106,223 @@ noinst_LTLIBRARIES = libutils.la libutils_la_SOURCES = utils.h utils.c seccomp.c utils-adv.c libutils_la_LIBADD = ../lib/libgnutls.la -ctests = mini-record-2 simple gc set_pkcs12_cred cert certuniqueid \ +indirect_tests = tls13/prf-early system-override-hash system-override-sig + +ctests = tls13/supported_versions tls13/tls12-no-tls13-exts \ + tls13/post-handshake-with-cert tls13/post-handshake-without-cert \ + tls13/cookie tls13/key_share tls13/prf tls13/post-handshake-with-cert-ticket \ + tls12-rollback-detection tls11-rollback-detection \ + tls12-check-rollback-val tls11-check-rollback-val tls13/hello_random_value \ + tls13/post-handshake-with-psk tls13/post-handshake-with-cert-auto \ + tls13/anti_replay + +ctests += tls13/hello_retry_request + +ctests += tls13/psk-ext + +ctests += tls13/key_update + +ctests += tls13/key_update_multiple + +ctests += tls13/key_limits + +ctests += tls13/multi-ocsp + +ctests += tls13/ocsp-client + +ctests += tls13/change_cipher_spec + +ctests += tls13-cipher-neg + +ctests += tls13/no-psk-exts + +ctests += tls13/psk-dumbfw + +ctests += tls13-early-start + +ctests += tls13/no-auto-send-ticket + +ctests += mini-record-2 simple gnutls_hmac_fast set_pkcs12_cred cert certuniqueid tls-neg-ext-key \ mpi certificate_set_x509_crl dn parse_ca x509-dn x509-dn-decode record-sizes \ hostname-check cve-2008-4989 pkcs12_s2k chainverify record-sizes-range \ - crq_key_id x509sign-verify cve-2009-1415 cve-2009-1416 \ - crq_apis init_roundtrip pkcs12_s2k_pem dn2 mini-eagain tls-rehandshake-cert-3 \ - nul-in-x509-names x509_altname pkcs12_encode mini-x509 \ - tls-rehandshake-cert rng-fork mini-eagain-dtls resume-dtls \ - x509cert x509cert-tl infoaccess mini-dtls-hello-verify \ + crq_key_id x509sign-verify sign-verify cve-2009-1415 cve-2009-1416 \ + tls10-server-kx-neg tls11-server-kx-neg tls12-server-kx-neg ssl30-server-kx-neg \ + tls12-cipher-neg tls11-cipher-neg tls10-cipher-neg ssl30-cipher-neg \ + crq_apis init_roundtrip pkcs12_s2k_pem dn2 tls12-rehandshake-cert-3 \ + nul-in-x509-names x509_altname pkcs12_encode mini-x509 gnutls_session_set_id \ + rng-fork mini-eagain-dtls resume-dtls empty_retrieve_function \ + tls13-rehandshake-cert gnutls_ext_raw_parse handshake-large-cert \ + x509cert x509cert-tl infoaccess mini-dtls-hello-verify sign-verify-ed25519-rfc8080 \ trustdb-tofu dtls-rehandshake-anon mini-alpn mini-dtls-large \ - mini-termination mini-x509-cas mini-x509-2 pkcs12_simple \ - mini-emsgsize-dtls chainverify-unsorted mini-overhead \ - mini-dtls-heartbeat mini-x509-callbacks key-openssl priorities \ + mini-termination mini-x509-cas mini-x509-2 pkcs12_simple tls-pthread \ + mini-emsgsize-dtls chainverify-unsorted mini-overhead tls12-ffdhe \ + mini-dtls-heartbeat mini-x509-callbacks key-openssl priorities priorities-groups \ + gnutls_x509_privkey_import gnutls_x509_crt_list_import time x509-server-verify \ + sign-verify-ext4 tls-neg-ext4-key resume-lifetime memset0 memset1 \ mini-dtls-srtp rsa-encrypt-decrypt mini-loss-time gnutls-strcodes \ - mini-record mini-dtls-record mini-handshake-timeout mini-record-range \ - mini-cert-status rsa-psk global-init sec-params \ - fips-test mini-global-load name-constraints x509-extensions \ - long-session-id mini-x509-callbacks-intr mini-dtls-lowmtu \ - crlverify mini-dtls-discard init_fds mini-record-failure \ - tls-rehandshake-cert-2 custom-urls set_x509_key_mem set_x509_key_file \ + mini-record mini-dtls-record handshake-timeout mini-record-range \ + cert-status fips-mode-pthread rsa-psk global-init sec-params sign-verify-data \ + fips-test fips-override-test mini-global-load name-constraints x509-extensions \ + long-session-id mini-x509-callbacks-intr mini-dtls-lowmtu set_x509_key_file-late \ + crlverify mini-dtls-discard init_fds mini-record-failure openconnect-dtls12 \ + tls12-rehandshake-cert-2 custom-urls set_x509_key_mem set_x509_key_file \ + tls12-rehandshake-cert-auto tls12-rehandshake-set-prio \ mini-chain-unsorted x509-verify-with-crl mini-dtls-mtu privkey-verify-broken \ - mini-dtls-record-asym openpgp-callback key-import-export \ - mini-dtls-fork mini-dtls-pthread mini-key-material x509cert-invalid \ - strict-der tls-ext-register tls-supplemental mini-dtls0-9 \ - mini-record-retvals mini-server-name tls-etm x509-cert-callback \ - sign-md5-rep privkey-keygen mini-tls-nonblock no-signal pkcs7-gen dtls-etm \ - x509sign-verify-rsa x509sign-verify-ecdsa mini-alignment oids atfork prf psk-file \ - status-request status-request-ok status-request-missing \ - fallback-scsv pkcs8-key-decode urls dtls-rehandshake-cert \ + mini-dtls-record-asym key-import-export priority-set priority-set2 \ + pubkey-import-export sign-is-secure spki spki-abstract rsa-rsa-pss \ + mini-dtls-fork dtls-pthread mini-key-material x509cert-invalid \ + tls-ext-register tls-supplemental mini-dtls0-9 duplicate-extensions \ + record-retvals mini-server-name tls-etm tls-force-etm x509-cert-callback alerts \ + client-sign-md5-rep tls12-invalid-key-exchanges session-rdn-read \ + tls13-cert-key-exchange x509-cert-callback-ocsp gnutls_ocsp_resp_list_import2 \ + server-sign-md5-rep privkey-keygen mini-tls-nonblock no-signal pkcs7-gen dtls-etm \ + x509sign-verify-rsa x509sign-verify-ecdsa x509sign-verify-gost \ + cipher-alignment oids atfork prf psk-file priority-init2 post-client-hello-change-prio \ + status-request status-request-ok rfc7633-missing sign-verify-ext \ + fallback-scsv pkcs8-key-decode urls dtls-rehandshake-cert rfc7633-ok \ key-usage-rsa key-usage-ecdhe-rsa mini-session-verify-function auto-verify \ - record-timeouts mini-dtls-hello-verify-48 mini-x509-default-prio \ - mini-x509-dual global-init-override tlsext-decoding rsa-psk-cb \ + record-timeouts mini-dtls-hello-verify-48 set-default-prio \ + tls12-anon-upgrade tlsext-decoding rsa-psk-cb gnutls-ids \ rehandshake-switch-cert rehandshake-switch-cert-allow rehandshake-switch-cert-client \ rehandshake-switch-cert-client-allow handshake-versions dtls-handshake-versions \ - dtls-max-record tls-max-record alpn-server-prec ocsp-filename-memleak \ + dtls-max-record tls12-max-record alpn-server-prec ocsp-filename-memleak \ dh-params rehandshake-ext-secret pcert-list session-export-funcs \ handshake-false-start version-checks key-material-dtls key-material-set-dtls \ - system-prio-file name-constraints-merge crl-basic crq-basic \ + name-constraints-merge crl-basic crq-basic \ send-client-cert custom-urls-override hex rehandshake-switch-psk-id \ rehandshake-switch-srp-id base64 srpbase64 pkcs1-digest-info set_x509_key \ - set_x509_key_file_der set_x509_pkcs12_key crt_apis tls1.2-cert-key-exchange \ - tls1.1-cert-key-exchange tls1.0-cert-key-exchange ssl3.0-cert-key-exchange \ - dtls1.2-cert-key-exchange dtls1.0-cert-key-exchange x509-cert-callback-legacy \ - keylog-env ssl2-hello tlsfeature-ext dtls-rehandshake-cert-2 \ + set_x509_key_file_der set_x509_pkcs12_key crt_apis tls12-cert-key-exchange \ + tls11-cert-key-exchange tls10-cert-key-exchange ssl30-cert-key-exchange \ + dtls12-cert-key-exchange dtls10-cert-key-exchange x509-cert-callback-legacy \ + keylog-env ssl2-hello tlsfeature-ext dtls-rehandshake-cert-2 dtls-session-ticket-lost \ tlsfeature-crt dtls-rehandshake-cert-3 resume-with-false-start \ set_x509_key_file_ocsp client-fastopen rng-sigint srp rng-pthread \ safe-renegotiation/srn0 safe-renegotiation/srn1 safe-renegotiation/srn2 \ safe-renegotiation/srn3 safe-renegotiation/srn4 safe-renegotiation/srn5 \ - rsa-illegal-import set_x509_key_file_ocsp_multi set_key set_x509_key_file_ocsp_multi2 \ + rsa-illegal-import set_x509_ocsp_multi_invalid set_key set_x509_key_file_ocsp_multi2 \ + set_x509_ocsp_multi_unknown set_x509_ocsp_multi_pem tls-ext-not-in-dtls \ set_key_utf8 set_x509_key_utf8 insecure_key handshake-large-packet \ client_dsa_key server_ecdsa_key tls-session-ext-register tls-session-supplemental \ multi-alerts naked-alerts pkcs7-cat-parse set_known_dh_params_x509 \ set_known_dh_params_anon set_known_dh_params_psk session-tickets-ok \ session-tickets-missing set_x509_key_file_legacy status-request-ext \ - rng-no-onload dtls1-2-mtu-check crl_apis cert_verify_inv_utf8 \ + gnutls_x509_crt_sign gnutls_x509_crq_sign dtls-repro-20170915 \ + rng-no-onload dtls1-2-mtu-check crl_apis cert_verify_inv_utf8 no-extensions \ hostname-check-utf8 pkcs8-key-decode-encrypted priority-mix pkcs7 \ send-data-before-handshake recv-data-before-handshake crt_inv_write \ x509sign-verify-error rng-op-nonce rng-op-random rng-op-key x509-dn-decode-compat \ - ip-check mini-x509-ipaddr trust-store base64-raw random-art dhex509self + ip-check mini-x509-ipaddr trust-store base64-raw random-art dhex509self \ + dss-sig-val sign-pk-api tls-session-ext-override record-pad \ + tls13-server-kx-neg gnutls_ext_raw_parse_dtls key-export-pkcs8 \ + null_retrieve_function tls-record-size-limit tls-crt_type-neg \ + resume-with-stek-expiration resume-with-previous-stek rawpk-api \ + tls-record-size-limit-asym dh-compute ecdh-compute sign-verify-data-newapi \ + sign-verify-newapi sign-verify-deterministic iov aead-cipher-vec \ + tls13-without-timeout-func buffer status-request-revoked \ + set_x509_ocsp_multi_cli kdf-api keylog-func \ + dtls_hello_random_value tls_hello_random_value x509cert-dntypes if HAVE_SECCOMP_TESTS ctests += dtls-with-seccomp tls-with-seccomp dtls-client-with-seccomp tls-client-with-seccomp endif +if STRICT_DER_TIME +ctests += strict-der +endif + +if !DISABLE_SYSTEM_CONFIG +ctests += system-prio-file +endif + if HAVE_CMOCKA CMOCKA_LDADD = $(COMMON_LDADD) $(CMOCKA_LIBS) -ctests += dtls-sliding-window ip-utils name-constraints-ip conv-utf8 str-unicode str-idna +ctests += dtls-sliding-window ip-utils name-constraints-ip conv-utf8 str-unicode str-idna \ + tls10-prf tls12-prf gnutls_record_overhead eagain tls12-rehandshake-cert \ + eagain-auto-auth +gnutls_record_overhead_LDADD = $(CMOCKA_LDADD) dtls_sliding_window_LDADD = $(CMOCKA_LDADD) ip_utils_LDADD = $(CMOCKA_LDADD) name_constraints_ip_LDADD = $(CMOCKA_LDADD) conv_utf8_LDADD = $(CMOCKA_LDADD) str_unicode_LDADD = $(CMOCKA_LDADD) str_idna_LDADD = $(CMOCKA_LDADD) +tls10_prf_LDADD = $(CMOCKA_LDADD) +tls12_prf_LDADD = $(CMOCKA_LDADD) +eagain_LDADD = $(CMOCKA_LDADD) +eagain_auto_auth_LDADD = $(CMOCKA_LDADD) +tls12_rehandshake_cert_LDADD = $(CMOCKA_LDADD) + +gnutls_record_overhead_CPPFLAGS = $(AM_CPPFLAGS) \ + -I$(top_srcdir)/gl \ + -I$(top_builddir)/gl \ + $(NETTLE_CFLAGS) + +ip_utils_CPPFLAGS = $(AM_CPPFLAGS) \ + -I$(top_srcdir)/gl \ + -I$(top_builddir)/gl \ + $(NETTLE_CFLAGS) endif -mini_dtls_pthread_LDADD = $(LDADD) -lpthread +tls_pthread_LDADD = $(LDADD) -lpthread +fips_mode_pthread_LDADD = $(LDADD) -lpthread +dtls_pthread_LDADD = $(LDADD) -lpthread rng_pthread_LDADD = $(LDADD) -lpthread -# These tests need gnulib for memmem() -resume_psk_CFLAGS = -DUSE_PSK -resume_psk_SOURCES = resume.c -resume_psk_LDADD = $(LDADD) ../gl/libgnu.la +memset0_CFLAGS = -DCHAR=0x0 +memset0_SOURCES = memset.c +memset0_LDADD = $(LDADD) + +memset1_CFLAGS = -DCHAR=0xa +memset1_SOURCES = memset.c +memset1_LDADD = $(LDADD) -resume_anon_CFLAGS = -DUSE_ANON -resume_anon_SOURCES = resume.c -resume_anon_LDADD = $(LDADD) ../gl/libgnu.la +tls12_rollback_detection_CFLAGS = -DTLS12 +tls12_rollback_detection_SOURCES = tls13/rnd-rollback-detection.c +tls12_rollback_detection_LDADD = $(LDADD) ../gl/libgnu.la -resume_x509_CFLAGS = -DUSE_X509 -resume_x509_SOURCES = resume.c -resume_x509_LDADD = $(LDADD) ../gl/libgnu.la +tls11_rollback_detection_CFLAGS = -DTLS11 +tls11_rollback_detection_SOURCES = tls13/rnd-rollback-detection.c +tls11_rollback_detection_LDADD = $(LDADD) ../gl/libgnu.la -dtls1_2_cert_key_exchange_SOURCES = common-cert-key-exchange.c dtls1.2-cert-key-exchange.c common-cert-key-exchange.h -dtls1_0_cert_key_exchange_SOURCES = common-cert-key-exchange.c dtls1.0-cert-key-exchange.c common-cert-key-exchange.h -tls1_2_cert_key_exchange_SOURCES = common-cert-key-exchange.c tls1.2-cert-key-exchange.c common-cert-key-exchange.h -tls1_1_cert_key_exchange_SOURCES = common-cert-key-exchange.c tls1.1-cert-key-exchange.c common-cert-key-exchange.h -tls1_0_cert_key_exchange_SOURCES = common-cert-key-exchange.c tls1.0-cert-key-exchange.c common-cert-key-exchange.h -ssl3_0_cert_key_exchange_SOURCES = common-cert-key-exchange.c ssl3.0-cert-key-exchange.c common-cert-key-exchange.h +tls12_check_rollback_val_CFLAGS = -DTLS12 +tls12_check_rollback_val_SOURCES = tls13/rnd-check-rollback-val.c +tls12_check_rollback_val_LDADD = $(LDADD) ../gl/libgnu.la + +tls11_check_rollback_val_CFLAGS = -DTLS11 +tls11_check_rollback_val_SOURCES = tls13/rnd-check-rollback-val.c +tls11_check_rollback_val_LDADD = $(LDADD) ../gl/libgnu.la + +# These tests need gnulib for memmem() +tls12_resume_psk_CFLAGS = -DUSE_PSK -DTLS12 +tls12_resume_psk_SOURCES = resume.c +tls12_resume_psk_LDADD = $(LDADD) ../gl/libgnu.la + +tls12_resume_anon_CFLAGS = -DUSE_ANON -DTLS12 +tls12_resume_anon_SOURCES = resume.c +tls12_resume_anon_LDADD = $(LDADD) ../gl/libgnu.la + +tls12_resume_x509_CFLAGS = -DUSE_X509 -DTLS12 +tls12_resume_x509_SOURCES = resume.c +tls12_resume_x509_LDADD = $(LDADD) ../gl/libgnu.la + +tls13_resume_psk_CFLAGS = -DUSE_PSK -DTLS13 +tls13_resume_psk_SOURCES = resume.c +tls13_resume_psk_LDADD = $(LDADD) ../gl/libgnu.la + +tls13_resume_x509_CFLAGS = -DUSE_X509 -DTLS13 +tls13_resume_x509_SOURCES = resume.c +tls13_resume_x509_LDADD = $(LDADD) ../gl/libgnu.la + +dtls_repro_20170915_SOURCES = dtls-repro-20170915.c common-cert-key-exchange.c cert-repro-20170915.h +dtls12_cert_key_exchange_SOURCES = common-cert-key-exchange.c dtls12-cert-key-exchange.c common-cert-key-exchange.h +dtls10_cert_key_exchange_SOURCES = common-cert-key-exchange.c dtls10-cert-key-exchange.c common-cert-key-exchange.h +tls13_cert_key_exchange_SOURCES = common-cert-key-exchange.c tls13-cert-key-exchange.c common-cert-key-exchange.h +tls12_cert_key_exchange_SOURCES = common-cert-key-exchange.c tls12-cert-key-exchange.c common-cert-key-exchange.h +tls11_cert_key_exchange_SOURCES = common-cert-key-exchange.c tls11-cert-key-exchange.c common-cert-key-exchange.h +tls10_cert_key_exchange_SOURCES = common-cert-key-exchange.c tls10-cert-key-exchange.c common-cert-key-exchange.h +ssl30_cert_key_exchange_SOURCES = common-cert-key-exchange.c ssl30-cert-key-exchange.c common-cert-key-exchange.h if ENABLE_PKCS11 if !WINDOWS @@ -191,6 +331,11 @@ libpkcs11mock1_la_SOURCES = pkcs11/pkcs11-mock.c pkcs11/pkcs11-mock.h pkcs11/pkc libpkcs11mock1_la_LDFLAGS = -shared -rpath $(pkglibdir) -module -no-undefined -avoid-version libpkcs11mock1_la_LIBADD = ../gl/libgnu.la +noinst_LTLIBRARIES += libpkcs11mock2.la +libpkcs11mock2_la_SOURCES = pkcs11/pkcs11-mock2.c +libpkcs11mock2_la_LDFLAGS = -shared -rpath $(pkglibdir) -module -no-undefined -avoid-version +libpkcs11mock2_la_LIBADD = ../gl/libgnu.la + pkcs11_cert_import_url_exts_SOURCES = pkcs11/pkcs11-cert-import-url-exts.c pkcs11_cert_import_url_exts_DEPENDENCIES = libpkcs11mock1.la libutils.la @@ -207,6 +352,19 @@ pkcs11_import_url_privkey_SOURCES = pkcs11/pkcs11-import-url-privkey.c pkcs11_import_url_privkey_DEPENDENCIES = libpkcs11mock1.la libutils.la pkcs11_import_url_privkey_LDADD = $(LDADD) $(LIBDL) +pkcs11_token_raw_SOURCES = pkcs11/pkcs11-token-raw.c +pkcs11_token_raw_DEPENDENCIES = libpkcs11mock1.la libutils.la +pkcs11_token_raw_LDADD = $(LDADD) $(LIBDL) + +pkcs11_obj_raw_SOURCES = pkcs11/pkcs11-obj-raw.c +pkcs11_obj_raw_DEPENDENCIES = libpkcs11mock1.la libutils.la +pkcs11_obj_raw_LDADD = $(LDADD) $(LIBDL) + +pkcs11_import_url_privkey_caps_SOURCES = pkcs11/pkcs11-import-url-privkey.c +pkcs11_import_url_privkey_caps_DEPENDENCIES = libpkcs11mock1.la libutils.la +pkcs11_import_url_privkey_caps_LDADD = $(LDADD) $(LIBDL) +pkcs11_import_url_privkey_caps_CFLAGS = -DALL_CAPS_URI + pkcs11_privkey_fork_SOURCES = pkcs11/pkcs11-privkey-fork.c pkcs11_privkey_fork_DEPENDENCIES = libpkcs11mock1.la libutils.la pkcs11_privkey_fork_LDADD = $(LDADD) $(LIBDL) @@ -227,6 +385,10 @@ pkcs11_privkey_always_auth_SOURCES = pkcs11/pkcs11-privkey-always-auth.c pkcs11_privkey_always_auth_DEPENDENCIES = libpkcs11mock1.la libutils.la pkcs11_privkey_always_auth_LDADD = $(LDADD) $(LIBDL) +pkcs11_privkey_safenet_always_auth_SOURCES = pkcs11/pkcs11-privkey-safenet-always-auth.c +pkcs11_privkey_safenet_always_auth_DEPENDENCIES = libpkcs11mock1.la libutils.la +pkcs11_privkey_safenet_always_auth_LDADD = $(LDADD) $(LIBDL) + pkcs11_pkcs11_privkey_pthread_LDADD = $(LDADD) -lpthread ctests += pkcs11-cert-import-url-exts pkcs11-get-exts pkcs11-get-raw-issuer-exts \ @@ -235,8 +397,15 @@ ctests += pkcs11-cert-import-url-exts pkcs11-get-exts pkcs11-get-raw-issuer-exts pkcs11-import-url-privkey pkcs11-privkey-fork pkcs11/pkcs11-ec-privkey-test \ pkcs11-privkey-always-auth pkcs11-privkey-export pkcs11/pkcs11-import-with-pin \ pkcs11/pkcs11-privkey-pthread pkcs11/pkcs11-pin-func pkcs11/pkcs11-obj-import \ - pkcs11-privkey-fork-reinit pkcs11-mechanisms - + pkcs11-privkey-fork-reinit pkcs11-mechanisms pkcs11-privkey-safenet-always-auth \ + pkcs11/pkcs11-rsa-pss-privkey-test pkcs11/tls-neg-pkcs11-key pkcs11/pkcs11-privkey-generate \ + pkcs11/gnutls_x509_crt_list_import_url pkcs11/gnutls_pcert_list_import_x509_file \ + pkcs11/pkcs11-eddsa-privkey-test \ + pkcs11-token-raw pkcs11-obj-raw + +if P11KIT_0_23_11_API +ctests += pkcs11-import-url-privkey-caps +endif endif endif @@ -251,95 +420,166 @@ endif rsa_illegal_import_CPPFLAGS = $(AM_CPPFLAGS) $(NETTLE_CFLAGS) -mini_alignment_CPPFLAGS = $(AM_CPPFLAGS) $(NETTLE_CFLAGS) -mini_alignment_LDADD = $(LDADD) $(NETTLE_LIBS) +cipher_alignment_CPPFLAGS = $(AM_CPPFLAGS) $(NETTLE_CFLAGS) +cipher_alignment_LDADD = $(LDADD) $(NETTLE_LIBS) if ENABLE_OPENSSL ctests += openssl openssl_LDADD = ../extra/libgnutls-openssl.la $(LDADD) endif -if ENABLE_OPENPGP -ctests += openpgp-auth openpgp-auth2 openpgp-keyring pgps2kgnu -endif - if HAVE_FORK -ctests += x509self x509dn anonself pskself dhepskself \ - setcredcrash resume-x509 resume-psk resume-anon - -if ENABLE_OPENPGP -ctests += openpgpself +ctests += x509self x509dn anonself pskself pskself2 dhepskself \ + setcredcrash tls12-resume-x509 tls12-resume-psk tls12-resume-anon \ + tls13-resume-x509 tls13-resume-psk tls13-early-data tls13-early-data-neg \ + resume-with-record-size-limit endif -endif +gc_CPPFLAGS = $(AM_CPPFLAGS) \ + -I$(top_srcdir)/gl \ + -I$(top_builddir)/gl \ + $(NETTLE_CFLAGS) -gc_CPPFLAGS = $(CPPFLAGS) \ - -I$(top_srcdir)/lib/includes \ - -I$(top_builddir)/lib/includes \ - -I$(top_srcdir)/lib/minitasn1 \ - -I$(top_srcdir)/lib \ +mpi_CPPFLAGS = $(AM_CPPFLAGS) \ -I$(top_srcdir)/gl \ -I$(top_builddir)/gl \ $(NETTLE_CFLAGS) -mpi_CPPFLAGS = $(CPPFLAGS) \ - -I$(top_srcdir)/lib/includes \ - -I$(top_builddir)/lib/includes \ - -I$(top_srcdir)/lib/minitasn1 \ - -I$(top_srcdir)/lib \ +atfork_CPPFLAGS = $(AM_CPPFLAGS) \ -I$(top_srcdir)/gl \ -I$(top_builddir)/gl \ $(NETTLE_CFLAGS) -atfork_CPPFLAGS = $(CPPFLAGS) \ - -I$(top_srcdir)/lib/includes \ - -I$(top_builddir)/lib/includes \ - -I$(top_srcdir)/lib/minitasn1 \ - -I$(top_srcdir)/lib \ +pkcs12_s2k_CPPFLAGS = $(AM_CPPFLAGS) \ -I$(top_srcdir)/gl \ -I$(top_builddir)/gl \ $(NETTLE_CFLAGS) -pkcs12_s2k_CPPFLAGS = $(CPPFLAGS) \ - -I$(top_srcdir)/lib/includes \ - -I$(top_builddir)/lib/includes \ - -I$(top_srcdir)/lib/minitasn1 \ - -I$(top_srcdir)/lib \ +name_constraints_merge_CPPFLAGS = $(AM_CPPFLAGS) \ -I$(top_srcdir)/gl \ -I$(top_builddir)/gl \ $(NETTLE_CFLAGS) -name_constraints_merge_CPPFLAGS = $(CPPFLAGS) \ - -I$(top_srcdir)/lib/includes \ - -I$(top_builddir)/lib/includes \ - -I$(top_srcdir)/lib/minitasn1 \ - -I$(top_srcdir)/lib \ +murmur3_CPPFLAGS = $(AM_CPPFLAGS) \ -I$(top_srcdir)/gl \ -I$(top_builddir)/gl \ $(NETTLE_CFLAGS) -check_PROGRAMS = $(ctests) -dist_check_SCRIPTS = rfc2253-escape-test rsa-md5-collision/rsa-md5-collision.sh systemkey.sh \ - p11-kit-trust.sh +tls13_anti_replay_CPPFLAGS = $(AM_CPPFLAGS) \ + -I$(top_srcdir)/gl \ + -I$(top_builddir)/gl \ + $(NETTLE_CFLAGS) + +iov_CPPFLAGS = $(AM_CPPFLAGS) \ + -I$(top_srcdir)/gl \ + -I$(top_builddir)/gl + +buffer_CPPFLAGS = $(AM_CPPFLAGS) \ + -I$(top_srcdir)/gl \ + -I$(top_builddir)/gl + +if ENABLE_PKCS11 +if !WINDOWS +ctests += tls13/post-handshake-with-cert-pkcs11 pkcs11/tls-neg-pkcs11-no-key \ + global-init-override +tls13_post_handshake_with_cert_pkcs11_DEPENDENCIES = libpkcs11mock2.la libutils.la +tls13_post_handshake_with_cert_pkcs11_LDADD = $(LDADD) $(LIBDL) +pkcs11_tls_neg_pkcs11_no_key_DEPENDENCIES = libpkcs11mock2.la libutils.la +pkcs11_tls_neg_pkcs11_no_key_LDADD = $(LDADD) $(LIBDL) +endif +endif + +dist_check_SCRIPTS = rfc2253-escape-test rsa-md5-collision/rsa-md5-collision.sh systemkey.sh tls13/prf-early.sh if !WINDOWS + +# +# List of tests not available/functional under windows +# + +dist_check_SCRIPTS += dtls/dtls dtls/dtls-resume #dtls/dtls-nb + +indirect_tests += dtls-stress + +dtls_stress_SOURCES = dtls/dtls-stress.c +dtls_stress_LDADD = $(COMMON_GNUTLS_LDADD) \ + $(COMMON_DEPS_LDADD) + dist_check_SCRIPTS += fastopen.sh pkgconfig.sh starttls.sh starttls-ftp.sh starttls-smtp.sh \ - starttls-lmtp.sh starttls-pop3.sh starttls-nntp.sh starttls-sieve.sh \ + starttls-lmtp.sh starttls-pop3.sh starttls-xmpp.sh starttls-nntp.sh starttls-sieve.sh \ ocsp-tests/ocsp-tls-connection ocsp-tests/ocsp-must-staple-connection \ - ocsp-tests/ocsp-test cipher-listings.sh sni-hostname.sh + ocsp-tests/ocsp-test cipher-listings.sh sni-hostname.sh server-multi-keys.sh \ + psktool.sh ocsp-tests/ocsp-load-chain gnutls-cli-save-data.sh gnutls-cli-debug.sh \ + sni-resume.sh ocsp-tests/ocsptool cert-reencoding.sh pkcs7-cat.sh long-crl.sh \ + serv-udp.sh logfile-option.sh gnutls-cli-resume.sh profile-tests.sh \ + server-weak-keys.sh + +if !DISABLE_SYSTEM_CONFIG +dist_check_SCRIPTS += system-override-sig-hash.sh system-override-versions.sh system-override-invalid.sh \ + system-override-curves.sh system-override-profiles.sh system-override-tls.sh \ + system-override-kx.sh system-override-default-priority-string.sh +endif + +dist_check_SCRIPTS += gnutls-cli-self-signed.sh gnutls-cli-invalid-crl.sh gnutls-cli-rawpk.sh + +if ENABLE_PKCS11 +dist_check_SCRIPTS += p11-kit-trust.sh testpkcs11.sh certtool-pkcs11.sh + +if HAVE_PKCS11_TRUST_STORE +if P11KIT_0_23_11_API +dist_check_SCRIPTS += p11-kit-load.sh +indirect_tests += pkcs11/list-tokens pkcs11/list-objects +endif +endif + +endif if ENABLE_DANE dist_check_SCRIPTS += danetool.sh endif + +if ENABLE_TROUSERS +dist_check_SCRIPTS += tpmtool_test.sh +endif + +else + +TESTS_ENVIRONMENT += WINDOWS=1 + +win32_certopenstore_SOURCES = win-certopenstore.c +win32_certopenstore_LDADD = $(LDADD) -lcrypt32 +ctests += win32-certopenstore + +endif + +cpptests = +if ENABLE_CXX +if HAVE_CMOCKA + +cpptests += sanity-cpp + +sanity_cpp_SOURCES = sanity-cpp.cpp +sanity_cpp_LDADD = $(CMOCKA_LDADD) ../lib/libgnutlsxx.la +sanity_cpp_CXXFLAGS = $(AM_CPPFLAGS) \ + -I$(top_srcdir)/gl \ + -I$(top_builddir)/gl +endif endif -TESTS = $(ctests) $(dist_check_SCRIPTS) +if !WINDOWS +indirect_tests += datefudge-check +endif -TESTS_ENVIRONMENT = \ +check_PROGRAMS = $(cpptests) $(ctests) $(indirect_tests) +TESTS = $(cpptests) $(ctests) $(dist_check_SCRIPTS) + +TESTS_ENVIRONMENT += \ + CC="$(CC)" \ CFLAGS="$(CFLAGS)" \ LC_ALL="C" \ LSAN_OPTIONS=suppressions=gnutls-asan.supp \ CAFILE=$(srcdir)/cert-tests/data/ca-certs.pem \ P11MOCKLIB1=$(abs_builddir)/.libs/libpkcs11mock1.so \ + P11MOCKLIB2=$(abs_builddir)/.libs/libpkcs11mock2.so \ PKCS12_MANY_CERTS_FILE=$(srcdir)/cert-tests/data/pkcs12_5certs.p12 \ PKCS12FILE=$(srcdir)/cert-tests/data/client.p12 \ PKCS12PASSWORD=foobar \ @@ -347,18 +587,16 @@ TESTS_ENVIRONMENT = \ PKCS12PASSWORD_2="" \ PKCS12PATH=$(srcdir)/cert-tests/data/ \ X509CERTDIR=$(srcdir)/x509cert-dir/ \ - GNUTLS_SYSTEM_PRIORITY_FILE=$(srcdir)/system.prio \ + GNUTLS_SYSTEM_PRIORITY_FILE=$(abs_top_srcdir)/tests/system.prio \ PSK_FILE=$(srcdir)/psk.passwd \ OPENSSL_ia32cap=0x00000000 \ EXEEXT=$(EXEEXT) \ + GNUTLS_TEST_SUITE_RUN=1 \ builddir="$(builddir)" \ top_builddir="$(top_builddir)" \ + libdir="$(libdir)" \ srcdir="$(srcdir)" -if WINDOWS -TESTS_ENVIRONMENT += WINDOWS=1 -endif - if ENABLE_SSL3 TESTS_ENVIRONMENT += ENABLE_SSL3=1 else @@ -367,8 +605,8 @@ endif if WANT_TEST_SUITE -# These require the devel/fuzz directory which is not available on releases -ctests += client server - LOG_COMPILER = $(VALGRIND) endif + +distclean-local: + rm -rf softhsm-*.db softhsm-*.config *.tmp tmp-* x509-crt-list-import-url.config.db diff --git a/tests/aead-cipher-vec.c b/tests/aead-cipher-vec.c new file mode 100644 index 0000000000..10e3db8626 --- /dev/null +++ b/tests/aead-cipher-vec.c @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#include +#include +#include +#include "utils.h" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d>| %s", level, str); +} + +/* Test whether gnutls_aead_cipher_{en,de}crypt_vec works */ +static void start(const char *name, int algo) +{ + int ret; + gnutls_aead_cipher_hd_t ch; + uint8_t key16[64]; + uint8_t iv16[32]; + uint8_t auth[128]; + uint8_t data[64+56+36]; + gnutls_datum_t key, iv; + giovec_t iov[3]; + giovec_t auth_iov[2]; + uint8_t tag[64]; + size_t tag_size = 0; + + key.data = key16; + key.size = gnutls_cipher_get_key_size(algo); + assert(key.size <= sizeof(key16)); + + iv.data = iv16; + iv.size = gnutls_cipher_get_iv_size(algo); + assert(iv.size <= sizeof(iv16)); + + memset(iv.data, 0xff, iv.size); + memset(key.data, 0xfe, key.size); + memset(data, 0xfa, sizeof(data)); + memset(auth, 0xaa, sizeof(auth)); + + iov[0].iov_base = data; + iov[0].iov_len = 64; + iov[1].iov_base = data + 64; + iov[1].iov_len = 56; + iov[2].iov_base = data + 64 + 56; + iov[2].iov_len = 36; + + auth_iov[0].iov_base = auth; + auth_iov[0].iov_len = 64; + auth_iov[1].iov_base = auth + 64; + auth_iov[1].iov_len = 64; + + success("trying %s\n", name); + + ret = + gnutls_aead_cipher_init(&ch, algo, &key); + if (ret < 0) + fail("gnutls_cipher_init: %s\n", gnutls_strerror(ret)); + + ret = gnutls_aead_cipher_encryptv2(ch, + iv.data, iv.size, + auth_iov, 2, + iov, 3, + tag, &tag_size); + if (ret < 0) + fail("could not encrypt data: %s\n", gnutls_strerror(ret)); + + ret = gnutls_aead_cipher_decryptv2(ch, + iv.data, iv.size, + auth_iov, 2, + iov, 3, + tag, tag_size); + if (ret < 0) + fail("could not decrypt data: %s\n", gnutls_strerror(ret)); + + gnutls_aead_cipher_deinit(ch); +} + +void +doit(void) +{ + int ret; + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + ret = global_init(); + if (ret < 0) { + fail("Cannot initialize library\n"); /*errcode 1 */ + } + + start("aes-128-gcm", GNUTLS_CIPHER_AES_128_GCM); + start("aes-256-gcm", GNUTLS_CIPHER_AES_256_GCM); + start("aes-128-ccm", GNUTLS_CIPHER_AES_128_CCM); + if (!gnutls_fips140_mode_enabled()) + start("chacha20-poly1305", GNUTLS_CIPHER_CHACHA20_POLY1305); + + gnutls_global_deinit(); +} diff --git a/tests/alerts.c b/tests/alerts.c new file mode 100644 index 0000000000..7e9b20667c --- /dev/null +++ b/tests/alerts.c @@ -0,0 +1,299 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "cert-common.h" + +#include "utils.h" + +static void terminate(void); + +/* This program tests gnutls_alert_send(). + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +static void client(int fd, const char *prio, int ign) +{ + int ret; + char buffer[64]; + const char* err; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + /* Need to enable anonymous KX specifically. */ + + global_init(); + memset(buffer, 2, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + /* Use default priorities */ + ret = gnutls_priority_set_direct(session, prio, &err); + if (ret < 0) { + fail("error setting priority: %s\n", err); + exit(1); + } + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client (%s): Handshake has failed (%s)\n\n", prio, + gnutls_strerror(ret)); + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + ret = gnutls_alert_send(session, GNUTLS_AL_WARNING, GNUTLS_A_USER_CANCELED); + if (ret < 0) { + fail("server: Error sending user cancelled alert: %s\n", gnutls_strerror(ret)); + terminate(); + } + + ret = gnutls_alert_send(session, GNUTLS_AL_FATAL, GNUTLS_A_DECRYPT_ERROR); + if (ret < 0) { + fail("server: Error sending decrypt error alert: %s\n", gnutls_strerror(ret)); + terminate(); + } + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + + +/* These are global */ +pid_t child; + +static void terminate(void) +{ + kill(child, SIGTERM); + exit(1); +} + +static void server(int fd, const char *prio, int ign) +{ + int ret; + const char* err; + char buffer[64]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + + gnutls_init(&session, GNUTLS_SERVER); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + ret = gnutls_priority_set_direct(session, prio, &err); + if (ret < 0) { + fail("error setting priority: %s\n", err); + exit(1); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server (%s): Handshake has failed (%s)\n\n", prio, + gnutls_strerror(ret)); + terminate(); + } + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + do { + do { + ret = gnutls_record_recv(session, buffer, sizeof(buffer)); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + if (ret > 0) + fail("error receiving alert: ret: %d\n", ret); + } while (ret > 0); + + if (ret != GNUTLS_E_WARNING_ALERT_RECEIVED || + gnutls_alert_get(session) != GNUTLS_A_USER_CANCELED) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + } + + do { + do { + ret = gnutls_record_recv(session, buffer, sizeof(buffer)); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + if (ret > 0) + fail("error receiving alert: ret: %d\n", ret); + } while (ret > 0); + + if (ret != GNUTLS_E_FATAL_ALERT_RECEIVED || + gnutls_alert_get(session) != GNUTLS_A_DECRYPT_ERROR) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + } + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void start(const char *prio, int ign) +{ + int fd[2]; + int ret; + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], prio, ign); + } else { + close(fd[0]); + client(fd[1], prio, ign); + exit(0); + } +} + +#define AES_GCM "NONE:+VERS-TLS1.2:-CIPHER-ALL:+RSA:+AES-128-GCM:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+CURVE-ALL" + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +void doit(void) +{ + signal(SIGCHLD, ch_handler); + + start(AES_GCM, 0); +} + +#endif /* _WIN32 */ diff --git a/tests/alpn-server-prec.c b/tests/alpn-server-prec.c index e8da9ebada..0461c5d39a 100644 --- a/tests/alpn-server-prec.c +++ b/tests/alpn-server-prec.c @@ -45,6 +45,7 @@ int main(int argc, char **argv) #include #include #include +#include #include #include @@ -262,6 +263,8 @@ static void start(const char *p1, const char *p2, const char *cp1, const char *c int fd[2]; int ret; + signal(SIGPIPE, SIG_IGN); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { perror("socketpair"); diff --git a/tests/anonself.c b/tests/anonself.c index 0ad4136e98..26e360743f 100644 --- a/tests/anonself.c +++ b/tests/anonself.c @@ -1,8 +1,9 @@ /* * Copyright (C) 2004-2012 Free Software Foundation, Inc. * Copyright (C) 2013 Adam Sampson + * Copyright (C) 2018 Red Hat, Inc. * - * Author: Simon Josefsson + * Author: Simon Josefsson, Nikos Mavrogiannopoulos * * This file is part of GnuTLS. * @@ -21,8 +22,6 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -/* Parts copied from GnuTLS example programs. */ - #ifdef HAVE_CONFIG_H #include #endif @@ -35,7 +34,6 @@ #if defined(_WIN32) -/* socketpair isn't supported on Win32. */ int main(int argc, char **argv) { exit(77); @@ -51,6 +49,7 @@ int main(int argc, char **argv) #include #endif #include +#include #include #include "utils.h" @@ -60,10 +59,10 @@ static void tls_log_func(int level, const char *str) fprintf(stderr, "|<%d>| %s", level, str); } -#define MAX_BUF 1024 #define MSG "Hello TLS" +#define MAX_BUF 1024 -static void client(int sd) +static void client(int sd, const char *prio) { int ret, ii; gnutls_session_t session; @@ -84,9 +83,9 @@ static void client(int sd) gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, - "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH", - NULL); + assert(gnutls_priority_set_direct(session, + prio, + NULL) >= 0); /* put the anonymous credentials to the current session */ @@ -107,7 +106,8 @@ static void client(int sd) success("client: Handshake was completed\n"); } - print_dh_params_info(session); + if (debug) + print_dh_params_info(session); if (debug) success("client: TLS version is: %s\n", @@ -158,54 +158,15 @@ static void client(int sd) gnutls_global_deinit(); } -/* This is a sample TLS 1.0 echo server, for anonymous authentication only. - */ - -#define MAX_BUF 1024 #define DH_BITS 1024 -/* These are global */ -gnutls_anon_server_credentials_t anoncred; - -static gnutls_session_t initialize_tls_session(void) -{ - gnutls_session_t session; - - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, - "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH", - NULL); - - gnutls_handshake_set_timeout(session, 20 * 1000); - gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); - - gnutls_dh_set_prime_bits(session, DH_BITS); - - return session; -} - -static gnutls_dh_params_t dh_params; - -static int generate_dh_params(void) +static void server(int sd, const char *prio) { const gnutls_datum_t p3 = { (void *) pkcs3, strlen(pkcs3) }; - gnutls_dh_params_init(&dh_params); - return gnutls_dh_params_import_pkcs3(dh_params, &p3, - GNUTLS_X509_FMT_PEM); -} - -int err, ret; -char topbuf[512]; -gnutls_session_t session; -char buffer[MAX_BUF + 1]; -int optval = 1; - -static void server(int sd) -{ + gnutls_anon_server_credentials_t anoncred; + gnutls_dh_params_t dh_params; + int ret; + gnutls_session_t session; gnutls_packet_t packet; /* this must be called once in the program @@ -221,11 +182,20 @@ static void server(int sd) if (debug) success("Launched, generating DH parameters...\n"); - generate_dh_params(); + assert(gnutls_dh_params_init(&dh_params)>=0); + assert(gnutls_dh_params_import_pkcs3(dh_params, &p3, + GNUTLS_X509_FMT_PEM)>=0); gnutls_anon_set_server_dh_params(anoncred, dh_params); - session = initialize_tls_session(); + assert(gnutls_init(&session, GNUTLS_SERVER)>=0); + + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + + gnutls_dh_set_prime_bits(session, DH_BITS); gnutls_transport_set_int(session, sd); ret = gnutls_handshake(session); @@ -244,7 +214,8 @@ static void server(int sd) gnutls_protocol_get_name (gnutls_protocol_get_version(session))); - print_dh_params_info(session); + if (debug) + print_dh_params_info(session); for (;;) { ret = gnutls_record_recv_packet(session, &packet); @@ -286,11 +257,13 @@ static void server(int sd) success("server: finished\n"); } -void doit(void) +static +void start(const char *name, const char *prio) { pid_t child; - int sockets[2]; + int sockets[2], err; + success("testing: %s\n", name); err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); if (err == -1) { perror("socketpair"); @@ -308,10 +281,23 @@ void doit(void) if (child) { int status; /* parent */ - server(sockets[0]); + server(sockets[0], prio); wait(&status); - } else - client(sockets[1]); + check_wait_status(status); + } else { + client(sockets[1], prio); + exit(0); + } +} + +void doit(void) +{ + start("tls1.2 anon-dh", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ANON-DH"); + start("tls1.2 anon-ecdh", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ANON-ECDH"); + start("tls1.3 anon-dh", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:-KX-ALL:+ANON-DH"); + start("tls1.3 anon-ecdh", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:-KX-ALL:+ANON-ECDH"); + start("default anon-dh", "NORMAL:-KX-ALL:+ANON-DH"); + start("default anon-ecdh", "NORMAL:-KX-ALL:+ANON-ECDH"); } #endif /* _WIN32 */ diff --git a/tests/atfork.c b/tests/atfork.c index 2e9de45453..42c4851efd 100644 --- a/tests/atfork.c +++ b/tests/atfork.c @@ -16,7 +16,7 @@ * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with GnuTLS. If not, see . + * along with GnuTLS. If not, see . * */ diff --git a/tests/auto-verify.c b/tests/auto-verify.c index 069ea73919..34cae5ccd2 100644 --- a/tests/auto-verify.c +++ b/tests/auto-verify.c @@ -1,7 +1,8 @@ /* * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * Copyright (C) 2017-2018 Red Hat, Inc. * - * Author: Simon Josefsson + * Author: Nikos Mavrogiannopoulos * * This file is part of GnuTLS. * @@ -32,6 +33,7 @@ #include #include "utils.h" #include "eagain-common.h" +#include /* This tests gnutls_certificate_set_x509_key() */ @@ -179,9 +181,8 @@ const gnutls_datum_t server_key = { server_key_pem, }; static -void test_failure(void) +void test_failure(const char *name, const char *prio) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -198,6 +199,8 @@ void test_failure(void) gnutls_x509_privkey_t pkey; unsigned status; + success("testing cert verification failure for %s\n", name); + to_server_len = 0; to_client_len = 0; @@ -233,9 +236,9 @@ void test_failure(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, - "NORMAL:-CIPHER-ALL:+AES-128-GCM", - NULL); + assert(gnutls_priority_set_direct(server, + prio, + NULL) >= 0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -264,7 +267,7 @@ void test_failure(void) if (ret < 0) exit(1); - gnutls_priority_set_direct(client, "NORMAL", NULL); + assert(gnutls_priority_set_direct(client, prio, NULL) >= 0); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -294,19 +297,11 @@ void test_failure(void) gnutls_certificate_free_credentials(serverx509cred); gnutls_certificate_free_credentials(clientx509cred); - - if (debug > 0) { - if (exit_code == 0) - fprintf(stderr, "%s: Self-test successful", __func__); - else - fprintf(stderr, "%s: Self-test failed", __func__); - } } static -void test_success1(void) +void test_success1(const char *name, const char *prio) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -323,6 +318,8 @@ void test_success1(void) gnutls_x509_privkey_t pkey; unsigned status; + success("testing cert verification success1 for %s\n", name); + to_server_len = 0; to_client_len = 0; @@ -358,9 +355,9 @@ void test_success1(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, - "NORMAL:-CIPHER-ALL:+AES-128-GCM", - NULL); + assert(gnutls_priority_set_direct(server, + prio, + NULL) >= 0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -389,7 +386,7 @@ void test_success1(void) if (ret < 0) exit(1); - gnutls_priority_set_direct(client, "NORMAL", NULL); + assert(gnutls_priority_set_direct(client, prio, NULL) >= 0); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -419,19 +416,11 @@ void test_success1(void) gnutls_certificate_free_credentials(serverx509cred); gnutls_certificate_free_credentials(clientx509cred); - - if (debug > 0) { - if (exit_code == 0) - fprintf(stderr, "%s: Self-test successful", __func__); - else - fprintf(stderr, "%s: Self-test failed", __func__); - } } static -void test_success2(void) +void test_success2(const char *name, const char *prio) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -447,6 +436,8 @@ void test_success2(void) gnutls_x509_privkey_t pkey; unsigned status; + success("testing cert verification success2 for %s\n", name); + to_server_len = 0; to_client_len = 0; @@ -482,9 +473,9 @@ void test_success2(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, - "NORMAL:-CIPHER-ALL:+AES-128-GCM", - NULL); + assert(gnutls_priority_set_direct(server, + prio, + NULL)>=0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -513,7 +504,7 @@ void test_success2(void) if (ret < 0) exit(1); - gnutls_priority_set_direct(client, "NORMAL", NULL); + assert(gnutls_priority_set_direct(client, prio, NULL)>=0); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -534,13 +525,6 @@ void test_success2(void) gnutls_certificate_free_credentials(serverx509cred); gnutls_certificate_free_credentials(clientx509cred); - - if (debug > 0) { - if (exit_code == 0) - fprintf(stderr, "%s: Self-test successful", __func__); - else - fprintf(stderr, "%s: Self-test failed", __func__); - } } void doit(void) @@ -552,9 +536,12 @@ void doit(void) if (debug) gnutls_global_set_log_level(2); - test_failure(); - test_success1(); - test_success2(); + test_failure("tls1.2", "NORMAL:-VERS-ALL:+VERS-TLS1.2"); + test_failure("tls1.3", "NORMAL:-VERS-ALL:+VERS-TLS1.3"); + test_success1("tls1.2", "NORMAL:-VERS-ALL:+VERS-TLS1.2"); + test_success1("tls1.3", "NORMAL:-VERS-ALL:+VERS-TLS1.3"); + test_success2("tls1.2", "NORMAL:-VERS-ALL:+VERS-TLS1.2"); + test_success2("tls1.3", "NORMAL:-VERS-ALL:+VERS-TLS1.3"); gnutls_global_deinit(); diff --git a/tests/base64-raw.c b/tests/base64-raw.c index 9bfc59e03a..8382e5012a 100644 --- a/tests/base64-raw.c +++ b/tests/base64-raw.c @@ -39,7 +39,7 @@ static void encode(const char *test_name, const gnutls_datum_t *raw, const char *expected) { int ret; - gnutls_datum_t out, in; + gnutls_datum_t out; ret = gnutls_pem_base64_encode2(NULL, raw, &out); if (ret < 0) { @@ -59,21 +59,83 @@ static void encode(const char *test_name, const gnutls_datum_t *raw, const char gnutls_free(out.data); + ret = gnutls_base64_encode2(raw, &out); + if (ret < 0) { + fail("%s: gnutls_base64_encode2: %s\n", test_name, gnutls_strerror(ret)); + exit(1); + } + + if (strlen(expected)!=out.size) { + fail("%s: gnutls_base64_encode2: output has incorrect size (%d, expected %d)\n", test_name, (int)out.size, (int)strlen(expected)); + exit(1); + } + + if (strncasecmp(expected, (char*)out.data, out.size) != 0) { + fail("%s: gnutls_base64_encode2: output does not match the expected\n", test_name); + exit(1); + } + + gnutls_free(out.data); + + return; +} + +static void encode_new(const char *test_name, const gnutls_datum_t *raw, const char *expected) +{ + int ret; + gnutls_datum_t out, in; + + ret = gnutls_base64_encode2(raw, &out); + if (ret < 0) { + fail("%s: gnutls_base64_encode2: %s\n", test_name, gnutls_strerror(ret)); + exit(1); + } + + if (strlen(expected)!=out.size) { + fail("%s: gnutls_base64_encode2: output has incorrect size (%d, expected %d)\n", test_name, (int)out.size, (int)strlen(expected)); + exit(1); + } + + if (strncasecmp(expected, (char*)out.data, out.size) != 0) { + fail("%s: gnutls_base64_encode2: output does not match the expected\n", test_name); + exit(1); + } + + gnutls_free(out.data); + + ret = gnutls_base64_encode2(raw, &out); + if (ret < 0) { + fail("%s: gnutls_base64_encode2: %s\n", test_name, gnutls_strerror(ret)); + exit(1); + } + + if (strlen(expected)!=out.size) { + fail("%s: gnutls_base64_encode2: output has incorrect size (%d, expected %d)\n", test_name, (int)out.size, (int)strlen(expected)); + exit(1); + } + + if (strncasecmp(expected, (char*)out.data, out.size) != 0) { + fail("%s: gnutls_base64_encode2: output does not match the expected\n", test_name); + exit(1); + } + + gnutls_free(out.data); + in.data = (void*)expected; in.size = strlen(expected); - ret = gnutls_pem_base64_decode2("", &in, &out); + ret = gnutls_base64_decode2(&in, &out); if (ret < 0) { - fail("%s: gnutls_pem_base64_decode2: %s\n", test_name, gnutls_strerror(ret)); + fail("%s: gnutls_base64_decode2: %s\n", test_name, gnutls_strerror(ret)); exit(1); } if (raw->size!=out.size) { - fail("%s: gnutls_pem_base64_decode2: output has incorrect size (%d, expected %d)\n", test_name, out.size, raw->size); + fail("%s: gnutls_base64_decode2: output has incorrect size (%d, expected %d)\n", test_name, out.size, raw->size); exit(1); } if (memcmp(raw->data, out.data, out.size) != 0) { - fail("%s: gnutls_pem_base64_decode2: output does not match the expected\n", test_name); + fail("%s: gnutls_base64_decode2: output does not match the expected\n", test_name); exit(1); } @@ -82,33 +144,33 @@ static void encode(const char *test_name, const gnutls_datum_t *raw, const char return; } -static void decode(const char *test_name, const gnutls_datum_t *raw, const char *hex, int res) +static void decode_new(const char *test_name, const gnutls_datum_t *raw, const char *hex, int res) { int ret; gnutls_datum_t out, in; in.data = (void*)hex; in.size = strlen(hex); - ret = gnutls_pem_base64_decode2("", &in, &out); + ret = gnutls_base64_decode2(&in, &out); if (ret < 0) { if (res == ret) /* expected */ return; - fail("%s: gnutls_pem_base64_decode2: %d/%s\n", test_name, ret, gnutls_strerror(ret)); + fail("%s: gnutls_base64_decode2: %d/%s\n", test_name, ret, gnutls_strerror(ret)); exit(1); } if (res != 0) { - fail("%s: gnutls_pem_base64_decode2: expected failure, but succeeded!\n", test_name); + fail("%s: gnutls_base64_decode2: expected failure, but succeeded!\n", test_name); exit(1); } if (raw->size!=out.size) { - fail("%s: gnutls_pem_base64_decode2: output has incorrect size (%d, expected %d)\n", test_name, out.size, raw->size); + fail("%s: gnutls_base64_decode2: output has incorrect size (%d, expected %d)\n", test_name, out.size, raw->size); exit(1); } if (memcmp(raw->data, out.data, out.size) != 0) { - fail("%s: gnutls_pem_base64_decode2: output does not match the expected\n", test_name); + fail("%s: gnutls_base64_decode2: output does not match the expected\n", test_name); exit(1); } @@ -144,6 +206,12 @@ struct decode_tests_st { }; struct decode_tests_st decode_tests[] = { + { + .name = "empty", + .pem = "", + .raw = {(void*)"", 0}, + .res = 0 + }, { .name = "dec-rnd1", .pem = "9ppGioRpeiiD2lLNYC85eA==", @@ -162,6 +230,12 @@ struct decode_tests_st decode_tests[] = { .raw = {(void*)"\x2c\x9f\xfb\x85\x46\x77\x4e\xd3\xc8\xcf\x67\x65\x73\x9f\x98\xbc\x42\xde\xf9", 19}, .res = 0 }, + { + .name = "dec-spaces", + .pem = " ", + .raw = {(void*)"", 0}, + .res = GNUTLS_E_BASE64_DECODING_ERROR + }, { .name = "dec-invalid-data", .pem = "XLJ/7hUZ3TtPIz2dlc5+YvELe+Q==", @@ -182,10 +256,11 @@ void doit(void) for (i=0;i +#endif + +#include +#include +#include + +#include +#include "utils.h" + +void doit(void) +{ + static const struct test_data { + const char * + input; + const char * + output; + } test_data[] = { + { "%20%20", " ", }, + { "%20", " ", }, + { "%2z", "%2z", }, + { "%2", "%2", }, + { "%", "%", }, + { "", "", }, + }; + + for (unsigned it = 0; it < countof(test_data); it++) { + const struct test_data *t = &test_data[it]; + gnutls_buffer_st str; + int ret; + + _gnutls_buffer_init(&str); + + ret = _gnutls_buffer_append_data(&str, t->input, strlen(t->input)); + if (ret < 0) + fail("_gnutls_buffer_append_str: %s\n", gnutls_strerror(ret)); + + ret = _gnutls_buffer_unescape(&str); + if (ret < 0) + fail("_gnutls_buffer_unescape: %s\n", gnutls_strerror(ret)); + + ret = _gnutls_buffer_append_data(&str, "", 1); + if (ret < 0) + fail("_gnutls_buffer_append_data: %s\n", gnutls_strerror(ret)); + + /* using malloc() instead of stack memory for better buffer overflow detection */ + gnutls_datum output; + + _gnutls_buffer_pop_datum(&str, &output, strlen(t->output) + 1); + + if (strcmp(t->output, (char *) output.data)) + fail("output differs [%d]: expected '%s', seen '%s'\n", it, t->output, (char *) output.data); + + _gnutls_buffer_clear(&str); + } +} + diff --git a/tests/cert-common.h b/tests/cert-common.h index 9d876f3ee0..665f565858 100644 --- a/tests/cert-common.h +++ b/tests/cert-common.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 Nikos Mavrogiannopoulos + * Copyright (C) 2015-2017 Nikos Mavrogiannopoulos * * Author: Nikos Mavrogiannopoulos * @@ -20,21 +20,36 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#include +#ifndef GNUTLS_TESTS_CERT_COMMON_H +#define GNUTLS_TESTS_CERT_COMMON_H +#include /* This file contains a lot of common parameters used by legacy and new * tests. The recommended to use for new tests are: * * CA: ca3_cert, ca3_key * TLS client: cli_ca3_cert, cli_ca3_key + * TLS client (RSA PSS): cli_ca3_rsa_pss_cert, cli_ca3_rsa_pss_key + * TLS client (GOST R 34.10-2001): cligost01_ca3_cert, cligost01_ca3_key + * TLS client (GOST R 34.10-2012-256): cligost12_256_ca3_cert, cligost12_256_ca3_key + * TLS client (GOST R 34.10-2012-512): cligost12_512_ca3_cert, cligost12_512_ca3_key * IPv4 server (SAN: IPAddr: 127.0.0.1): server_ca3_ipaddr_cert, server_ca3_key + * IPv4 server (RSA-PSS, SAN: localhost IPAddr: 127.0.0.1): server_ca3_rsa_pss_cert, server_ca3_rsa_pss_key + * IPv4 server (RSA-PSS key, SAN: localhost IPAddr: 127.0.0.1): server_ca3_rsa_pss2_cert, server_ca3_rsa_pss2_key + * IPv4 server (EdDSA, SAN: localhost IPAddr: 127.0.0.1): server_ca3_eddsa_cert, server_ca3_eddsa_key + * IPv4 server (GOST R 34.10-2001, SAN: localhost): server_ca3_gost01_cert, server_ca3_gost01_key + * IPv4 server (GOST R 34.10-2012-256, SAN: localhost): server_ca3_gost12-256_cert, server_ca3_gost12-256_key + * IPv4 server (GOST R 34.10-2012-512, SAN: localhost): server_ca3_gost12-512_cert, server_ca3_gost12-512_key + * IPv6 server: server_ca3_tlsfeat_cert, server_ca3_key * IPv6 server: server_ca3_localhost6_cert, server_ca3_key * IPv4 server: server_ca3_localhost_cert, server_ca3_key * IPv4 server: server_ca3_localhost_ecc_cert, server_ca3_ecc_key * IPv4 server: server_ca3_localhost_utf8_cert, server_ca3_key - UTF8 names * IPv4 server: server_ca3_localhost_inv_utf8_cert, server_ca3_key - invalid UTF8 names * IPv4 server: insecure key: server_ca3_localhost_insecure_key, server_ca3_localhost_insecure_cert + * IPv4 server: RSA-decrypt key: server_ca3_localhost_rsa_decrypt_cert, server_ca3_key + * IPv4 server: RSA-sign-only key: server_ca3_localhost_rsa_sign_cert, server_ca3_key */ @@ -66,11 +81,11 @@ static char ecc_cert[] = "-----END CERTIFICATE-----\n"; const gnutls_datum_t server_ecc_cert = - {(void *) ecc_cert, sizeof(ecc_cert)-1}; + {(unsigned char*) ecc_cert, sizeof(ecc_cert)-1}; const gnutls_datum_t server_ecc_key = - {(void *) ecc_key, sizeof(ecc_key)-1}; + {(unsigned char*) ecc_key, sizeof(ecc_key)-1}; /* A cert-key pair */ static char pem1_cert[] = @@ -106,11 +121,11 @@ static char pem1_key[] = "-----END RSA PRIVATE KEY-----\n"; const gnutls_datum_t cert_dat = - {(void *) pem1_cert, sizeof(pem1_cert)-1}; + {(unsigned char*) pem1_cert, sizeof(pem1_cert)-1}; const gnutls_datum_t key_dat = - {(void *) pem1_key, sizeof(pem1_key)-1}; + {(unsigned char*) pem1_key, sizeof(pem1_key)-1}; /* A server cert/key pair with CA */ @@ -393,7 +408,7 @@ static char dsa_key_pem[] = "jlvXN8gyPpbCPvRD2n2RAg+3vPjvj/dBAF6W3w8IltzqsukGgq/SLwIUS5/r/2ya\n" "AoNBXjeBjgCGMei2m8E=\n" "-----END DSA PRIVATE KEY-----\n"; -const gnutls_datum_t dsa_key = { (void*)dsa_key_pem, +const gnutls_datum_t dsa_key = { (unsigned char*)dsa_key_pem, sizeof(dsa_key_pem)-1 }; @@ -466,11 +481,11 @@ static char ca3_key_pem[] = "xkwfZG91IiOdKlKEddraZb3OppP1j7HsiyaYmwIMtsPc9wa2EsU=\n" "-----END RSA PRIVATE KEY-----\n"; -const gnutls_datum_t ca3_key = { (void*)ca3_key_pem, +const gnutls_datum_t ca3_key = { (unsigned char*)ca3_key_pem, sizeof(ca3_key_pem)-1 }; -const gnutls_datum_t ca3_cert = { (void*)ca3_cert_pem, +const gnutls_datum_t ca3_cert = { (unsigned char*)ca3_cert_pem, sizeof(ca3_cert_pem)-1 }; @@ -542,11 +557,11 @@ static char subca3_key_pem[] = "CLo/c/+F0N4e0F7P+haq+Ccj6MNM99HnuJALc1Ke9971YxrNfniGvA==\n" "-----END RSA PRIVATE KEY-----\n"; -const gnutls_datum_t subca3_key = { (void*)subca3_key_pem, +const gnutls_datum_t subca3_key = { (unsigned char*)subca3_key_pem, sizeof(subca3_key_pem)-1 }; -const gnutls_datum_t subca3_cert = { (void*)subca3_cert_pem, +const gnutls_datum_t subca3_cert = { (unsigned char*)subca3_cert_pem, sizeof(subca3_cert_pem)-1 }; @@ -670,15 +685,15 @@ static char cli_ca3_key_pem[] = "uiyti3689G0RW9DM/F+NeJkoEo0D15JweVkSfDcsVTdvNsbeA1Pzzds=\n" "-----END RSA PRIVATE KEY-----\n"; -const gnutls_datum_t cli_ca3_key = { (void*)cli_ca3_key_pem, +const gnutls_datum_t cli_ca3_key = { (unsigned char*)cli_ca3_key_pem, sizeof(cli_ca3_key_pem)-1 }; -const gnutls_datum_t cli_ca3_cert = { (void*)cli_ca3_cert_pem, +const gnutls_datum_t cli_ca3_cert = { (unsigned char*)cli_ca3_cert_pem, sizeof(cli_ca3_cert_pem)-1 }; -const gnutls_datum_t cli_ca3_cert_chain = { (void*)cli_ca3_cert_chain_pem, +const gnutls_datum_t cli_ca3_cert_chain = { (unsigned char*)cli_ca3_cert_chain_pem, sizeof(cli_ca3_cert_chain_pem)-1 }; @@ -723,14 +738,119 @@ static char clidsa_ca3_key_pem[] = "FgAdB5hhtag7oTw45a72\n" "-----END DSA PRIVATE KEY-----\n"; -const gnutls_datum_t clidsa_ca3_key = { (void*)clidsa_ca3_key_pem, +const gnutls_datum_t clidsa_ca3_key = { (unsigned char*)clidsa_ca3_key_pem, sizeof(clidsa_ca3_key_pem)-1 }; -const gnutls_datum_t clidsa_ca3_cert = { (void*)clidsa_ca3_cert_pem, +const gnutls_datum_t clidsa_ca3_cert = { (unsigned char*)clidsa_ca3_cert_pem, sizeof(clidsa_ca3_cert_pem)-1 }; +static char cligost01_ca3_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIC4zCCAUugAwIBAgIIWcZXXAz6FbgwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE\n" + "AxMEQ0EtMzAgFw0xNzA5MjMxMjQ1MTdaGA85OTk5MTIzMTIzNTk1OVowGzEZMBcG\n" + "A1UEAxMQR09TVC0yMDAxIGNsaWVudDBjMBwGBiqFAwICEzASBgcqhQMCAiQABgcq\n" + "hQMCAh4BA0MABEBuvOEDe9xPJY9jsnFckLyQ6B5XeDi4Wo2E4c05im/3iI+rlWGI\n" + "rTc6hMmWca0BVDL0lObZ0ZHb4Vhy0XREgvtro3YwdDAMBgNVHRMBAf8EAjAAMBMG\n" + "A1UdJQQMMAoGCCsGAQUFBwMCMA8GA1UdDwEB/wQFAwMHsAAwHQYDVR0OBBYEFCck\n" + "yCTDt+A6zS8SnMRrgbyjeQmoMB8GA1UdIwQYMBaAFPmohhljtqQUE2B2DwGaNTbv\n" + "8bSvMA0GCSqGSIb3DQEBCwUAA4IBgQACkq/DQhHMEZPL0NwPFpnf2+RDviEuRE+C\n" + "xaOMTbHgxIUSy6xQAaHXK5hNr9xk87OFPPXmNKPl1nVBXrDF0aj+YUVBT2QeJIpA\n" + "APfyjnPtdZpRl3MXrJbQ/VBCdShvmKhspiOkGO6K8ETDeqE57qtPsUaGApfNK7oL\n" + "WgevmnkaQqNTVJglOoB5o5IDNv0JuFEkKSEvCgS25OV+gl0rRHmWDaIdQtDJLQjV\n" + "24b99/woYj0Ql8WfvMUUUYqTX03zmV56k5DgoNusTxKG+r71WQwbeb3XiVjof6I7\n" + "ll3ANTdyf/KrysLx/tk1pNgfangArpAZzbCRejTQVYdVfCf3KDdwXvKlTHy9Jv+p\n" + "ZUSf7kMnBqcUHpbceiyHFCXNAKIdrMDkTJAeee7ktpeYMfdO9oBki+6a8RJjNHIr\n" + "wHe0DcExV7UsokG6jMl8kH7gb7EW0UphL3ncWyY8C4jbtf/q1kci6SZDcapXBpGp\n" + "adJdx9bycdOUm1cGiboUMMPiCA5bO+Q=\n" + "-----END CERTIFICATE-----\n"; + +static char cligost01_ca3_key_pem[] = + "-----BEGIN PRIVATE KEY-----\n" + "MEUCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIgQgVPdBJeLrp/Zh\n" + "2tiV6qz9N6HraKTFTKz4alNuGhK2iLM=\n" + "-----END PRIVATE KEY-----\n"; + +const gnutls_datum_t cligost01_ca3_key = { (unsigned char*)cligost01_ca3_key_pem, + sizeof(cligost01_ca3_key_pem)-1 +}; + +const gnutls_datum_t cligost01_ca3_cert = { (unsigned char*)cligost01_ca3_cert_pem, + sizeof(cligost01_ca3_cert_pem)-1 +}; + +static char cligost12_256_ca3_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIC6jCCAVKgAwIBAgIIWcalgS6c0DMwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE\n" + "AxMEQ0EtMzAgFw0xNzA5MjMxODE4NDJaGA85OTk5MTIzMTIzNTk1OVowHzEdMBsG\n" + "A1UEAxMUR09TVCAyMDEyLzI1NiBjbGllbnQwZjAfBggqhQMHAQEBATATBgcqhQMC\n" + "AiQABggqhQMHAQECAgNDAARArjme5Fb62BC4uPT8vQVim3xTjYY/RVvvUtAfYluY\n" + "o+8Zjz8A8VTFejK0Zok5f1dssbzrrHtRODJZsCuAjypIXqN2MHQwDAYDVR0TAQH/\n" + "BAIwADATBgNVHSUEDDAKBggrBgEFBQcDAjAPBgNVHQ8BAf8EBQMDB7AAMB0GA1Ud\n" + "DgQWBBTzHDVZRnSgaq4M3B7NdLResyKgajAfBgNVHSMEGDAWgBT5qIYZY7akFBNg\n" + "dg8BmjU27/G0rzANBgkqhkiG9w0BAQsFAAOCAYEAtAGi0lQdBC9Mp/TdqYFuMIDr\n" + "o/xGbie6Eq33BiqXo6B5DOiPZcE1Mi+y4htefvrEBkN4OLy4PbUHlfEC/ATs3X9S\n" + "cUHucm6gkyzUxTLPYPfTmXD24MRFDAJQKMvX8Pklbi7HyFZVYIQaJfEohaQZmuYR\n" + "S7Z03MW0Cbz6j7LGQl1Pyix78BLKeyLyAzQz63+hCuO46xp7TaGDKGI79Dd6Od0p\n" + "oY/B/MxfuP3RXhHrpjgp+Ev08dYoCH3Snps+TYWSyhkN0VhGRJgE5Tnhdly8XMW3\n" + "WKZqGYmWG+rBtiTgA6FZrw0qYwAsmN3yCo5pE+Ukd0Q5L0tugc0a9HK53AftG/zV\n" + "qf0DI+E4dEnUkVhdEQbW+rujGpAR0sgjgar5Zvwuu92BaV+AFucj7hVP1fqDySmp\n" + "E52EzrFcnCYrZb19aDJKgWevG5Vh6OEcu8Vx/zVFOoTx9ZCXniVLm7PaXyKXdhLv\n" + "Vhg3mi7koFAPGlTiKldJ/LKKPW0yti3I8L/p2F5+\n" + "-----END CERTIFICATE-----\n"; + +static char cligost12_256_ca3_key_pem[] = + "-----BEGIN PRIVATE KEY-----\n" + "MEgCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIkAAYIKoUDBwEBAgIEIgQgnA1XIfe2\n" + "V3D0UVFQTRCHolA9v+r5cDt2tlr1gTZbDC8=\n" + "-----END PRIVATE KEY-----\n"; + +const gnutls_datum_t cligost12_256_ca3_key = { (unsigned char*)cligost12_256_ca3_key_pem, + sizeof(cligost12_256_ca3_key_pem)-1 +}; + +const gnutls_datum_t cligost12_256_ca3_cert = { (unsigned char*)cligost12_256_ca3_cert_pem, + sizeof(cligost12_256_ca3_cert_pem)-1 +}; + +static char cligost12_512_ca3_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIDLzCCAZegAwIBAgIIWcalYA16syEwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE\n" + "AxMEQ0EtMzAgFw0xNzA5MjMxODE4MDhaGA85OTk5MTIzMTIzNTk1OVowHzEdMBsG\n" + "A1UEAxMUR09TVCAyMDEyLzUxMiBjbGllbnQwgaowIQYIKoUDBwEBAQIwFQYJKoUD\n" + "BwECAQIBBggqhQMHAQECAwOBhAAEgYCyAdmv9viBTnemLvULAZ9RyaEf37ZAydKj\n" + "E3qLbZ5tTxgLAYhIIGApVPVb5SZxge3u2qY/ekkHjz9Asn5cPQ69wCvce87+2u1f\n" + "XcATUzYvR3UIL25C5BbNjDjGnufhjYAwT6uZ5xQ7j8/Wfr0MZU04O2CSUquKqfrB\n" + "DA81M2HvUqN2MHQwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDAjAP\n" + "BgNVHQ8BAf8EBQMDB7AAMB0GA1UdDgQWBBRYXgWHcQazcPFyxKrgRdfd2IPBozAf\n" + "BgNVHSMEGDAWgBT5qIYZY7akFBNgdg8BmjU27/G0rzANBgkqhkiG9w0BAQsFAAOC\n" + "AYEAUOpvomUtaFQm5O8bEQk/d3ghZLzwfMKRngSq0XbXDi8t+TV+kFvkzJ/hrAOP\n" + "/HPCQdnEvdV2HyZzDb9b8cVegRHPPooKSV8+HCTNVXNKZPRSlE42S5kFIAnAxbs5\n" + "vzGfipp6jQe9dqlCYseikxnE31o3AX7QAlNBaXELu0JnEY5BoJeKoja8XS40b1k9\n" + "kKRwAGkdh1OcAy6pW8AH4m61RMDWFzmPGgcb0JiDNp+9HQDSkG904niU8AlvmoQD\n" + "Q2AVd9mam4NIjmA0hkVuSh+7Tn2XnoGoGxN/+u72qaSUA6ybkbtkIKpMeJ8vciI1\n" + "6GRhBYpI0OuRiAIbDA9WhfCCKwj9ZaIsSSHC7qADRz3bR/89Et1mM40v5jbYNDkV\n" + "1cvlca3+pK3DxNP7y/q3QoUz8++z9VXzsdVHc4wNUyg4E8mjMcdLlRsZbST0WjX+\n" + "IhxAkfOexMu3nJ3EVbjgvox6eIxjiTWr2DP6x666UztrnFSBhhypwKHb8jW7PYJ2\n" + "lWlI\n" + "-----END CERTIFICATE-----\n"; + +static char cligost12_512_ca3_key_pem[] = + "-----BEGIN PRIVATE KEY-----\n" + "MGoCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwRCBEA9uga7\n" + "LIPp1heDZYj5EozNtbrmsKYMXrFasBIVAFFVQVFd6/+YjttV6Vmx16OFWrM+/ydX\n" + "rB0aUqYPU8w5DUyk\n" + "-----END PRIVATE KEY-----\n"; + +const gnutls_datum_t cligost12_512_ca3_key = { (unsigned char*)cligost12_512_ca3_key_pem, + sizeof(cligost12_512_ca3_key_pem)-1 +}; + +const gnutls_datum_t cligost12_512_ca3_cert = { (unsigned char*)cligost12_512_ca3_cert_pem, + sizeof(cligost12_512_ca3_cert_pem)-1 +}; + static char server_ca3_ecc_key_pem[] = "-----BEGIN EC PRIVATE KEY-----\n" "MHgCAQEEIQDn1XFX7QxTKXl2ekfSrEARsq+06ySEeeOB+N0igwcNLqAKBggqhkjO\n" @@ -738,7 +858,7 @@ static char server_ca3_ecc_key_pem[] = "GK04pl/ReivZAwibv+85lpT4sm/9RBVhLZM=\n" "-----END EC PRIVATE KEY-----\n"; -const gnutls_datum_t server_ca3_ecc_key = { (void*)server_ca3_ecc_key_pem, +const gnutls_datum_t server_ca3_ecc_key = { (unsigned char*)server_ca3_ecc_key_pem, sizeof(server_ca3_ecc_key_pem)-1 }; @@ -783,10 +903,297 @@ static char server_ca3_key_pem[] = "r6wql68K+fJ1W38b+ENQ46bZZMvAh8z4MZyzBvS8M/grD0WBBwrWLA==\n" "-----END RSA PRIVATE KEY-----\n"; -const gnutls_datum_t server_ca3_key = { (void*)server_ca3_key_pem, +const gnutls_datum_t server_ca3_key = { (unsigned char*)server_ca3_key_pem, sizeof(server_ca3_key_pem)-1 }; +static char server_ca3_rsa_pss_key_pem[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIIEowIBAAKCAQEAvxOfMAZbqIuVqkPt5s5fyNeuYD09r80oDEN54MS7/tMy+2yk\n" + "rwsX3a1zGLqn47Q59E0QAlheFP5ZXcQgFXVdQwWCn00YtYyGn5uGrzT80PlIAnaG\n" + "yVpjLGci7mU13IpHlLKqQbBaCdiDU1qV/fyy03t0KVdlyzTi3RJoKDU3XTG/eJmy\n" + "bPHuBGzBjtXn4IJkbbe9FL090YJbgu0EqgcVhaon9JOs5cVNGsHZ4zdRo1d9/5zK\n" + "tqaAVCPYECL/OYwTBS0O8kTrkoHwXo08bR0sUhb7enfI827mOOiIyokkzUu1YVyP\n" + "6GMnggmoUa8LaSeO3bsWU9rx1ngWBUQ5hBG5JQIDAQABAoIBAAkoYpfFpjz0u66W\n" + "ZN+MApE4rRXVuZAkcAfub/fy1ePHsYjVUytEh9dLCdokkAlcyO5JhzvlilTNP/E7\n" + "hiIhJuAgcns6EbYZzxX1OUZKbteBKw9bKOibmWc2Zjkwxp0UT4vz6C8PybDxHJIx\n" + "JEExDE0QfKfClZFgroLT8AQFUOr5cy8dY2edh17+rMMeBvJ5Yit3L6hlHjO+5eJA\n" + "E0WzxPrZWIFfAJl484HbZL/kBT8UXqYDTR7MB+qOq8mdKQSLcHwyjvItgvgklEPu\n" + "0Rl626K+R6841FmrXjUEBVtfkS8Osw/+CJDYw6YZwB7W8oLRRhcB7PjMWU5RHAIW\n" + "nZKFWn0CgYEA0qsP7FUemy7kG7cA8qMErt7oWV/DYIMpKaCJC+17vk37OmJbUpbo\n" + "UkfEIY9iT8hcPjP1jAnQf2d0A37zn9B7DTYPhbjbRtNrOSkdrE/u5FeWd4tr9uc7\n" + "JdYhRc6dkPKbVbFFyo7bdHwU0ZLtfhJYKpTYJ3oNvjsiLqBjIHaj2v8CgYEA6DFV\n" + "FKlQL9OnzTnQtu5oDvqHFiaHD1wdPTN9MeNWEFdcf/kd3eVvcRmpenGZaud7jn72\n" + "nhtXXyzc9GlVoKL6R+/1GVexwu477dr2Ci5MwPYGtyh2tJWjgHTad0bT0Jq4Bneu\n" + "ZuXZ0EszfxTmHkUkPlzvUrbPjoJxgb57P0Qfn9sCgYEAnYrTg5c8Jizw5VD74nfK\n" + "nsOP2pZk054CgGDPXB4i9fP3Nngrdx3navDEWZySlrttUA8nR6xnQX+qIJslsZQF\n" + "EaImBYhyYwrkGoEG8b9tFVHy8j9PY/sUHn19sGiNKMJlK7ZATPR8ZSYNo5RPCoLJ\n" + "cD6TTyJVeLdcHqZOuw4+Bx0CgYAvP5qokauXj+JdiJ5IG0thgOlsQHrLTVtF0Oxw\n" + "8mnY+W4BPJgvRzjeMvKhz+wALQqffIaCtd2ZqG9t7OFXxtJXQSUG+ylZGVFonV3j\n" + "xHgp6+aB7uH47VpQEXdDPk5r7I/2APSkS7F/CU55Va9eCYPOjOrGUhz6SuD+HdzG\n" + "iv5EcQKBgDyt221UUieb1sWhCHaKaQ3z8/aJlzs+ge6kSLqoVjcfr5uOKM1O5O72\n" + "bfy00r7B8ky77qXNTtzv2xt9Km/hRptqnCHsgly5OXW8pMcFnf7Kdh3Q+c5UzVlc\n" + "ODwZlaKK2fjp9xr2dNpYjRqyEb1gkC9FJMaxab9OAf+AoQifxncv\n" + "-----END RSA PRIVATE KEY-----\n"; + +const gnutls_datum_t server_ca3_rsa_pss_key = { (unsigned char*)server_ca3_rsa_pss_key_pem, + sizeof(server_ca3_rsa_pss_key_pem)-1 +}; + +static char server_ca3_rsa_pss_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIEAjCCAjqgAwIBAgIMWSa+iBMb7BVvI0GIMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTMwHhcNMTkwNDE1MDkyMjIwWhcNNDkxMjMxMDkyMjIwWjANMQsw\n" + "CQYDVQQGEwJHUjCCAVIwPQYJKoZIhvcNAQEKMDCgDTALBglghkgBZQMEAgGhGjAY\n" + "BgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCASADggEPADCCAQoCggEBAL8TnzAG\n" + "W6iLlapD7ebOX8jXrmA9Pa/NKAxDeeDEu/7TMvtspK8LF92tcxi6p+O0OfRNEAJY\n" + "XhT+WV3EIBV1XUMFgp9NGLWMhp+bhq80/ND5SAJ2hslaYyxnIu5lNdyKR5SyqkGw\n" + "WgnYg1Nalf38stN7dClXZcs04t0SaCg1N10xv3iZsmzx7gRswY7V5+CCZG23vRS9\n" + "PdGCW4LtBKoHFYWqJ/STrOXFTRrB2eM3UaNXff+cyramgFQj2BAi/zmMEwUtDvJE\n" + "65KB8F6NPG0dLFIW+3p3yPNu5jjoiMqJJM1LtWFcj+hjJ4IJqFGvC2knjt27FlPa\n" + "8dZ4FgVEOYQRuSUCAwEAAaNQME4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUjFqe\n" + "vO9heHT9V24WV1ovs7pvUvMwHwYDVR0jBBgwFoAU+aiGGWO2pBQTYHYPAZo1Nu/x\n" + "tK8wPQYJKoZIhvcNAQEKMDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgw\n" + "CwYJYIZIAWUDBAIBogMCASADggGBAAgVZdGqSwhaa8c/KuqsnELoK5QlzdSUNZ0O\n" + "J31nVQyOmIJtqR14nMndU0y1iowAoj0osZFYjxjN6e2AqUF7R22uhtxmG6rr0YEi\n" + "XS+rNpbs7+gY/3hK30vo376QL85+U4v4HuTCd+yX8bY9VPqwZBMYO5rcDyXG82xC\n" + "ZKXT/Tr7XD80iMFjyR2cvRAjoZQeXbWzNE4AEm0jNz2F5Qnl6uSgtpDkHYKgr9xq\n" + "yUhm/WNKG86pzBxfcFju4prqBLiwUZh068b6znBAS0wMflrF/lznu01QqDhK6mz3\n" + "cSn5LlzoKjuouAWdZRieqokr1mNiWggmX5n2qKM9FJtDQctsvntCf/freAfy+Xmu\n" + "Tm055R9UzX76mL89eXY92U++HR8Y5IO5lqY1f13rzWK5rJB9qjz/Mamj9xR6Egoa\n" + "hh1ysRItcTCFJI5xKb/i3hHv94U12EH1IfFHofptr1pyCtAeOhJytWPndCiB2m1q\n" + "M2k3tl6cHvlUz7DpgnxNniuQ/dQ4MA==\n" + "-----END CERTIFICATE-----\n"; + +const gnutls_datum_t server_ca3_rsa_pss_cert = { (unsigned char*)server_ca3_rsa_pss_cert_pem, + sizeof(server_ca3_rsa_pss_cert_pem)-1 +}; + +static char server_ca3_rsa_pss2_key_pem[] = + "-----BEGIN PRIVATE KEY-----\n" + "MIIE7AIBADA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3\n" + "DQEBCDALBglghkgBZQMEAgGiAwIBIASCBKYwggSiAgEAAoIBAQCte+3f4Sgy89/R\n" + "LNfx/NazlTgHxL6IXJuL44tutdhxA91vCJt0+ZSShWibsuyF+H09it3G0+3LvE2W\n" + "vkU58ha7ljvCWckPf2+YpsFynNQc0Lw6BThRMQdJpJvI54OdxfhoPjhDnTui/EEj\n" + "/n9MbLo5rAX5ZDIpWa3Vgpl37Q8czjFINCgQ/f8qsD4WabBSbuSnrYDvuASGez4O\n" + "YDAFvM51+4U4GxN7ZKbrDTQcAySU0Fjy+I5eW/BIXd9TeHb6XYJudMQY7rozTijm\n" + "6qbZieahke+FUCgm8BnRXghfcVSswUZEJQkCvF+SdUl3iAYlY/UBzVFsGDSFbID2\n" + "XRtEvrnvAgMBAAECggEATj8COCL+lZSnU1oNgAiQ8eiQn/heE3TpdzvHLMT5/WdH\n" + "3YedTjIvj7J6TxdxVK+SFUrn4oC91VF2EVJ6OLt3A16sT2ldpQ7OT6SOxdn0VZbT\n" + "/rtR/lTFu7JxzTiWhXfAJYxCpkRpnIZ3/vsPgXHcwJxVCXnmof3fyNghzhRu54de\n" + "V5GUwJ6TT3MMYLYKf5ii8Yt9WqeekQF7Hy/kIwz+4CbgR3fDdRXFnRwdNmA4RG3w\n" + "TbwvqR9ApyAictYz4HpZWgYL+cXsH6Fm+/ChZiV9/zvdVVOo+dOAcxx2cWahm/NL\n" + "tksGD7hI5kqD9moi2wiAsGHPa+/rkLxIBm0xvF1veQKBgQDVFKujtQyfzJw5DUPL\n" + "kTCLp+370ZBTK01daKZrpfgw6QrylYljcIq8n1izauElYm5cZ9krMGzvL5ceg49p\n" + "obl1tdCOQJQACrJmLZSuvVfw8TSwHPyOGtRWxhF4miX+ym3yMFqRyN2nXx1iAo5I\n" + "Cz+aGmTfT1zSZkLnfQSjYWZFgwKBgQDQbX2wPavLI+1yWARStqrwVWO1mU0Nixbo\n" + "jHrRlzrKYqtV+0ea6550LtDG5A/zf9MP6439NNHPqs4rnY910odd+xmLdQj2gocB\n" + "IS4nPBE4o1k3L9m+bSw9nyDdJWRkASq4uem6QvyVsQpWUoxzmg5/fwRUlOU8X3pP\n" + "ZLSSpz06JQKBgF4b6AbAwtedFe54tlWlRWyY+Zn7n6Or/1pfCwmGXwyzEJu9gdWC\n" + "cjQGqLVtYg0R4S48y4SwuZwWR8c5UdDUlcWwTHFXgkZWcx5/ySg4BiwrTBrwYncc\n" + "0GWWy0aZxmg23cJWqtmyfnsani6YdGDLXwbf22dpdNSUR75X0AGc1f+jAoGADha4\n" + "nkcs66hcDpSghi7O0zwSZ14bdUTnoYSNcMl2MeQFjORVbMVsipH3jtovsdf8HmFf\n" + "0bPWUuFK2mvmHKLEf7fPfDvHBVLBaXQiuIg46ckw6KgVYefjS68L+6bhaFkj2CTJ\n" + "BcwtYrj65+bgk5fgTwH4+vatoC0cCW3XPuqLGvkCgYAj2NGQAEQ4HkmF55otDocZ\n" + "SkAJFfibyrkKEK+PsQ7dRR/HEc93hvkI0PHpsLx8A3FZ370FAPtiKmnmfabHxEsK\n" + "TWA2DTacq//MzXQrjsx0CpvGId1dOyVZIrwIFM17KmW5HHE37fY4PFZTZVXHAKf6\n" + "nQyUF7m3FUJjavm46KJIhw==\n" + "-----END PRIVATE KEY-----\n"; + +const gnutls_datum_t server_ca3_rsa_pss2_key = { (unsigned char*)server_ca3_rsa_pss2_key_pem, + sizeof(server_ca3_rsa_pss2_key_pem)-1 +}; + +static char server_ca3_rsa_pss2_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIID0TCCAjmgAwIBAgIIWXYEJjkAauMwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE\n" + "AxMEQ0EtMzAgFw0xNzA3MjQxNDI4NTVaGA85OTk5MTIzMTIzNTk1OVowADCCAVIw\n" + "PQYJKoZIhvcNAQEKMDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJ\n" + "YIZIAWUDBAIBogMCASADggEPADCCAQoCggEBAK177d/hKDLz39Es1/H81rOVOAfE\n" + "vohcm4vji2612HED3W8Im3T5lJKFaJuy7IX4fT2K3cbT7cu8TZa+RTnyFruWO8JZ\n" + "yQ9/b5imwXKc1BzQvDoFOFExB0mkm8jng53F+Gg+OEOdO6L8QSP+f0xsujmsBflk\n" + "MilZrdWCmXftDxzOMUg0KBD9/yqwPhZpsFJu5KetgO+4BIZ7Pg5gMAW8znX7hTgb\n" + "E3tkpusNNBwDJJTQWPL4jl5b8Ehd31N4dvpdgm50xBjuujNOKObqptmJ5qGR74VQ\n" + "KCbwGdFeCF9xVKzBRkQlCQK8X5J1SXeIBiVj9QHNUWwYNIVsgPZdG0S+ue8CAwEA\n" + "AaOBjTCBijAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDATBgNV\n" + "HSUEDDAKBggrBgEFBQcDATAPBgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQWBBQCiLaK\n" + "LrqB0vaCnoNP1V8QVLlA8jAfBgNVHSMEGDAWgBT5qIYZY7akFBNgdg8BmjU27/G0\n" + "rzANBgkqhkiG9w0BAQsFAAOCAYEANgnTu4nYiv1nH6Iqpnn48CNrGK25ax6FuPvc\n" + "HxOyFFa9jomP8KjyNv3EsmmoBcQBkbRdAX8sFdtbyjILqRLoRMFO7D60BmCitGYH\n" + "MDjEIkG9QjcCo03YIT93SORwnt1qrWh6paOH7Nme+CsgRyXN7iNNur2LgGSilQ7P\n" + "Rs/vr0DdxmlUxUQHDa5GRIvU3FFs4NLC/9sQd3+JGqzDbY7UqLnP5fzn6/PSMKIw\n" + "Gc4IzbJrqjFsyfjQkblM2eBwmkUD3SnTFWqYwUsohGlSxBwKSIyVzlyuoD1FXop7\n" + "lgG8/a1D/ZFa34q8tj24Wnd9zdr/Jrv2g51OSf0VIbQdP92l2kDouobPS/7DTgPI\n" + "D7h52NLVm8cbV1RqxbeS3spZ2OAQn8tLiTwz+abNdsikFjMvfXq61iIv3QASUyUB\n" + "VydSB7stwAUd6wys2H7crmeiMMtgxSjZJtB4GDUCb24a+/a4IgpqxFzGDLE9Ur69\n" + "D8aQbKGJzzih56a2wwc0ZqA0ilGm\n" + "-----END CERTIFICATE-----\n"; + +const gnutls_datum_t server_ca3_rsa_pss2_cert = { (unsigned char*)server_ca3_rsa_pss2_cert_pem, + sizeof(server_ca3_rsa_pss2_cert_pem)-1 +}; + +static char cli_ca3_rsa_pss_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIEAjCCAjqgAwIBAgIMWSa+VhOfC8uEpb/cMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTMwHhcNMDQwMjI5MTUyMTQyWhcNMjQwMjI5MTUyMTQxWjANMQsw\n" + "CQYDVQQGEwJHUjCCAVIwPQYJKoZIhvcNAQEKMDCgDTALBglghkgBZQMEAgGhGjAY\n" + "BgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCASADggEPADCCAQoCggEBAL8TnzAG\n" + "W6iLlapD7ebOX8jXrmA9Pa/NKAxDeeDEu/7TMvtspK8LF92tcxi6p+O0OfRNEAJY\n" + "XhT+WV3EIBV1XUMFgp9NGLWMhp+bhq80/ND5SAJ2hslaYyxnIu5lNdyKR5SyqkGw\n" + "WgnYg1Nalf38stN7dClXZcs04t0SaCg1N10xv3iZsmzx7gRswY7V5+CCZG23vRS9\n" + "PdGCW4LtBKoHFYWqJ/STrOXFTRrB2eM3UaNXff+cyramgFQj2BAi/zmMEwUtDvJE\n" + "65KB8F6NPG0dLFIW+3p3yPNu5jjoiMqJJM1LtWFcj+hjJ4IJqFGvC2knjt27FlPa\n" + "8dZ4FgVEOYQRuSUCAwEAAaNQME4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUjFqe\n" + "vO9heHT9V24WV1ovs7pvUvMwHwYDVR0jBBgwFoAU+aiGGWO2pBQTYHYPAZo1Nu/x\n" + "tK8wPQYJKoZIhvcNAQEKMDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgw\n" + "CwYJYIZIAWUDBAIBogMCASADggGBAI435L6mZnGnCtQdtUBGgypMP2g5VuSBu2lP\n" + "5msLYuK2vPZTCtCLAg2JSsQhVaDDK+V7wtyXIgnEtQWrDE3RQBmWtCWpVrrP7kh3\n" + "ZN751l6+z1UTEg8sVQ7MODbEZCB9+2XXAb50Oh4cO65IfUI5Sqnn2+k3ZPLp280s\n" + "KdlaA4ZzmQSZcgEDWtoch8QiO+HvlXGqjejQUFh1ObBJXpXX5Q7NP5K7ChI82LPJ\n" + "T+rdqTopIgM3nAg9Je7gqsHiPdEdpArKwQq9wMxTmtQECK6KInueaDXuoDs5xg6k\n" + "XYQ1fiS0SI/pJ9xn0SCc6BNmkbfTpmKVwF9MWIyGyzWBhkSSWxsKbh5OuUCWJsyG\n" + "eLOrPK9fVKv/YQCfDHC3F1WI6xtHg7CCD7vvyJv5bFH8LN8YGoZNt1ZfU1lNw7rP\n" + "sRecz45/okiAbk9/SgnpzHInNBBzYu2Ym+yGVO/tIeErPXrnkM7uF9Di/K1n2+zF\n" + "vXOeamGsi2jyiC5LbreWecbMnzi3vQ==\n" + "-----END CERTIFICATE-----\n"; + +const gnutls_datum_t cli_ca3_rsa_pss_cert = { (unsigned char*)cli_ca3_rsa_pss_cert_pem, + sizeof(cli_ca3_rsa_pss_cert_pem)-1 +}; + +#define cli_ca3_rsa_pss_key server_ca3_rsa_pss_key + +/* server EdDSA key */ +static char server_ca3_eddsa_key_pem[] = + "-----BEGIN PRIVATE KEY-----\n" + "MC4CAQAwBQYDK2VwBCIEIBypI9w1qP3WLaiYuWB7zhA99GTG5UsKZVZqPHNlUaIv\n" + "-----END PRIVATE KEY-----\n"; + +const gnutls_datum_t server_ca3_eddsa_key = { (unsigned char*)server_ca3_eddsa_key_pem, + sizeof(server_ca3_eddsa_key_pem)-1 +}; + +static char server_ca3_eddsa_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIBEzCBxqADAgECAgxZLBvYDjrxFhfqLoIwBQYDK2VwMA0xCzAJBgNVBAYTAkdS\n" + "MB4XDTA0MDIyOTE1MjE0MloXDTI0MDIyOTE1MjE0MVowDTELMAkGA1UEBhMCR1Iw\n" + "KjAFBgMrZXADIQCrr5izw0GNQSIhwYanuHD7RG7HfiCHe9kipF3SlwnVSKNAMD4w\n" + "DAYDVR0TAQH/BAIwADAPBgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQWBBSJg0wiKtJf\n" + "jqv1BmHV8w0JD5X2BjAFBgMrZXADQQB94NbYtwGCvyI6EvBZk5xgOyWNdKVy9peh\n" + "KKn/PNiAq4fPNEupyzC3AzE1xLzKLRArAFFDDUjPCwy3OR4js3MF\n" + "-----END CERTIFICATE-----\n"; + +const gnutls_datum_t server_ca3_eddsa_cert = { (unsigned char*)server_ca3_eddsa_cert_pem, + sizeof(server_ca3_eddsa_cert_pem)-1 +}; + +static char server_ca3_gost01_key_pem[] = + "-----BEGIN PRIVATE KEY-----\n" + "MEUCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIgQgR1lBLIr4WBpn\n" + "4MOCH8oxGWb52EPNL3gjNJiQuBQuf6U=\n" + "-----END PRIVATE KEY-----\n"; + +const gnutls_datum_t server_ca3_gost01_key = { (unsigned char*)server_ca3_gost01_key_pem, + sizeof(server_ca3_gost01_key_pem)-1 +}; + +static char server_ca3_gost01_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIC7TCCAVWgAwIBAgIIWcZJ7xuHksUwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE\n" + "AxMEQ0EtMzAgFw0xOTEwMDgxMDQ2NDBaGA85OTk5MTIzMTIzNTk1OVowDTELMAkG\n" + "A1UEAxMCR1IwYzAcBgYqhQMCAhMwEgYHKoUDAgIkAAYHKoUDAgIeAQNDAARA0Lvp\n" + "9MaoYDxzkURVz71Q3Sw9Wrwa2F483xDd0mOID8CK7JY8C8gz/1dfZniUObT1JMa6\n" + "hkGsQyFvPLD6Vr1bN6OBjTCBijAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuCCWxv\n" + "Y2FsaG9zdDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8BAf8EBQMDB4AAMB0G\n" + "A1UdDgQWBBSGUfwGWchcx3r3TNANllOEOFkTWDAfBgNVHSMEGDAWgBT5qIYZY7ak\n" + "FBNgdg8BmjU27/G0rzANBgkqhkiG9w0BAQsFAAOCAYEACdzEVIyFvPlx2J7Ab4Hq\n" + "Oz0IGk2QaZ4cJkWZxjrPc7u6XCeBah8TEtF12LJ6vXBS+Cf9IF50YIMK/8GjJjs1\n" + "Allwdx79RuWFS2TdnsAjsAWwyKBQITkmv/kXULtExC9ospdGVIeYbdcmufgk023Q\n" + "PJh5LAMXHZ1lrsI1DgBhihgZx86wTAGd8yRC+dratvSbawC0sFan8X1n9R/Fxkzt\n" + "YuLEulh7FZpTWPYu30fyUrpEZVCWPlCzCrSijhCVBhAnT4eEGd7qmU0Oj+khHFNn\n" + "iVJ40/3JG21Yln2t/8uY1YIM2+ISTk4n2gkmXHrRAfNi3bXupdQQyAqRRT7b/Y/y\n" + "jhYzWekGLAvz0qrS78Ls8Kp7TfhIVEcWz9pfo77SmURxT6SDTiet7W5VD+VaS+hW\n" + "jl4L+IGxCsBIY5mWlT8KYTNHG34ln+5W+TfZMGARZFf4ZfQi2lgs3p0oqn6f9c+w\n" + "AdMyo73YqtbmVT2eGB05ezMeRl2Anjfwvj9JinhHMC04\n" + "-----END CERTIFICATE-----\n"; + +const gnutls_datum_t server_ca3_gost01_cert = { (unsigned char*)server_ca3_gost01_cert_pem, + sizeof(server_ca3_gost01_cert_pem)-1 +}; + +static char server_ca3_gost12_256_key_pem[] = + "-----BEGIN PRIVATE KEY-----\n" + "MEgCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIkAAYIKoUDBwEBAgIEIgQg0+JttJEV\n" + "Ud+XBzX9q13ByKK+j2b+mEmNIo1yB0wGleo=\n" + "-----END PRIVATE KEY-----\n"; + +const gnutls_datum_t server_ca3_gost12_256_key = { (unsigned char*)server_ca3_gost12_256_key_pem, + sizeof(server_ca3_gost12_256_key_pem)-1 +}; + +static char server_ca3_gost12_256_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIC8DCCAVigAwIBAgIIWcZKgxkCMvcwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE\n" + "AxMEQ0EtMzAgFw0xOTEwMDgxMDQ4MTZaGA85OTk5MTIzMTIzNTk1OVowDTELMAkG\n" + "A1UEAxMCR1IwZjAfBggqhQMHAQEBATATBgcqhQMCAiQABggqhQMHAQECAgNDAARA\n" + "J9sMEEx0JW9QsT5bDqyc0TNcjVg9ZSdp4GkMtShM+OOgyBGrWK3zLP5IzHYSXja8\n" + "373QrJOUvdX7T7TUk5yU5aOBjTCBijAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuC\n" + "CWxvY2FsaG9zdDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8BAf8EBQMDB4AA\n" + "MB0GA1UdDgQWBBQYSEtdwsYrtnOq6Ya3nt8DgFPCQjAfBgNVHSMEGDAWgBT5qIYZ\n" + "Y7akFBNgdg8BmjU27/G0rzANBgkqhkiG9w0BAQsFAAOCAYEAR0xtx7MWEP1KyIzM\n" + "4lXKdTyU4Nve5RcgqF82yR/0odqT5MPoaZDvLuRWEcQryztZD3kmRUmPmn1ujSfc\n" + "BbPfRnSutDXcf6imq0/U1/TV/BF3vpS1plltzetvibf8MYetHVFQHUBJDZJHh9h7\n" + "PGwA9SnmnGKFIxFdV6bVOLkPR54Gob9zN3E17KslL19lNtht1pxk9pshwTn35oRY\n" + "uOdxof9F4XjpI/4WbC8kp15QeG8XyZd5JWSl+niNOqYK31+ilQdVBr4RiZSDIcAg\n" + "twS5yV9Ap+R8rM8TLbeT2io4rhdUgmDllUf49zV3t6AbVvbsQfkqXmHXW8uW2WBu\n" + "A8FiXEbIIOb+QIW0ZGwk3BVQ7wdiw1M5w6kYtz5kBtNPxBmc+eu1+e6EAfYbFNr3\n" + "pkxtMk3veYWHb5s3dHZ4/t2Rn85hWqh03CWwCkKTN3qmEs4/XpybbXE/UE49e7u1\n" + "FkpM1bT/0gUNsNt5h3pyUzQZdiB0XbdGGFta3tB3+inIO45h\n" + "-----END CERTIFICATE-----\n"; + +const gnutls_datum_t server_ca3_gost12_256_cert = { (unsigned char*)server_ca3_gost12_256_cert_pem, + sizeof(server_ca3_gost12_256_cert_pem)-1 +}; + +static char server_ca3_gost12_512_key_pem[] = + "-----BEGIN PRIVATE KEY-----\n" + "MGACAQAwFwYIKoUDBwEBAQIwCwYJKoUDBwECAQIBBEIEQJLtsCFM/m6blvHOJoqS\n" + "FvrFIjlYFAJKVqIc8FoxuCaAmIXxG5sXuTRgx5+m3T6wDca9UYAqMvsIsEREObti\n" + "+W8=\n" + "-----END PRIVATE KEY-----\n"; + +const gnutls_datum_t server_ca3_gost12_512_key = { (unsigned char*)server_ca3_gost12_512_key_pem, + sizeof(server_ca3_gost12_512_key_pem)-1 +}; + +static char server_ca3_gost12_512_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIDKzCCAZOgAwIBAgIIWcZKvSvigz0wDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE\n" + "AxMEQ0EtMzAgFw0xOTEwMDgxMTAwNDRaGA85OTk5MTIzMTIzNTk1OVowDTELMAkG\n" + "A1UEAxMCR1IwgaAwFwYIKoUDBwEBAQIwCwYJKoUDBwECAQIBA4GEAASBgDIyIpfh\n" + "R0umZWQl6GEhjjhjZ6cWlYJ41JHo6hx8cLxHopOjSrHEQRxabnfI07e9IjlK0MZu\n" + "oS8ngfbyAEI0LycgiOgDTriO8l10NEM/Yr1l+A5qHsZ9Oh46ijUlPTT6WEZzK/yU\n" + "RQmjg0TQFQUPQrwSfkW8lJzbINwaHCWWqSdxo4GNMIGKMAwGA1UdEwEB/wQCMAAw\n" + "FAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA8GA1Ud\n" + "DwEB/wQFAwMHgAAwHQYDVR0OBBYEFF7gSAq4EPp6G8FYvT+ECRRVrGTcMB8GA1Ud\n" + "IwQYMBaAFPmohhljtqQUE2B2DwGaNTbv8bSvMA0GCSqGSIb3DQEBCwUAA4IBgQAO\n" + "kFNTy9UqIkG5tDiW+O8QuV8A+Xvw2CLiIqDvkLhR1FQnXYs5OFquNBLyA2NSR5bk\n" + "OO+68sXj6iB9tGJWhHXo6efwsxR4maxHv7R8Gp6fFysEGtVV1MG+vpNOjoQNreVh\n" + "41D9/FU7eVqe6oSw5DtuUQvwrk3jooT4b9dpk2g1ihY33BrpA+vg9XnvN3+7dDNd\n" + "0xfRXKR9aGhWZsschps9xJqfzx63CZrH14+jHKxYPupSL7d/Akm3MDOf9XLa+vnY\n" + "WG6lHpkvGl0b8A6yxHHqDCctnE+aJGK6lMyZ1cd8GiStgcihussKGKvKsKygAM4J\n" + "zPxBQtTv11qjuyMksq5Gw6ctq/GO/M7eUoi/xf/O9+QOwDO/urocBJYY0BmsQWlR\n" + "VFjuOouE2GN7UPo6VyMiXpe75Wi9CNX/szNF+HnS4hCJGV5kz4ULaJnFxPE/oQwa\n" + "nlFDKO1feGQG0gOyf2jMzY1OD35SYss4Falc18iB3YQKigGkyqb+VeGyE8kq1UY=\n" + "-----END CERTIFICATE-----\n"; + +const gnutls_datum_t server_ca3_gost12_512_cert = { (unsigned char*)server_ca3_gost12_512_cert_pem, + sizeof(server_ca3_gost12_512_cert_pem)-1 +}; + /* shares server_ca3 key */ static char server_localhost6_ca3_cert_pem[] = "-----BEGIN CERTIFICATE-----\n" @@ -867,13 +1274,13 @@ static char server_localhost6_ca3_cert_chain_pem[] = "-----END CERTIFICATE-----\n"; -const gnutls_datum_t server_ca3_localhost6_cert = { (void*)server_localhost6_ca3_cert_pem, +const gnutls_datum_t server_ca3_localhost6_cert = { (unsigned char*)server_localhost6_ca3_cert_pem, sizeof(server_localhost6_ca3_cert_pem)-1 }; const gnutls_datum_t server_ca3_localhost6_cert_chain = { - (void*)server_localhost6_ca3_cert_chain_pem, + (unsigned char*)server_localhost6_ca3_cert_chain_pem, sizeof(server_localhost6_ca3_cert_chain_pem)-1 }; @@ -955,13 +1362,13 @@ static char server_ipaddr_ca3_cert_chain_pem[] = "-----END CERTIFICATE-----\n"; -const gnutls_datum_t server_ca3_ipaddr_cert = { (void*)server_ipaddr_ca3_cert_pem, +const gnutls_datum_t server_ca3_ipaddr_cert = { (unsigned char*)server_ipaddr_ca3_cert_pem, sizeof(server_ipaddr_ca3_cert_pem)-1 }; const gnutls_datum_t server_ca3_ipaddr_cert_chain = { - (void*)server_ipaddr_ca3_cert_chain_pem, + (unsigned char*)server_ipaddr_ca3_cert_chain_pem, sizeof(server_ipaddr_ca3_cert_chain_pem)-1 }; @@ -994,7 +1401,7 @@ static char server_localhost_utf8_ca3_cert_pem[] = "PexWtASNmu1xcO13LdgN4Oa1OL4P4U9TQVwoCpkjlDSVNLqBC0N5kPmGkOY=\n" "-----END CERTIFICATE-----\n"; -const gnutls_datum_t server_ca3_localhost_utf8_cert = { (void*)server_localhost_utf8_ca3_cert_pem, +const gnutls_datum_t server_ca3_localhost_utf8_cert = { (unsigned char*)server_localhost_utf8_ca3_cert_pem, sizeof(server_localhost_utf8_ca3_cert_pem)-1 }; @@ -1026,7 +1433,7 @@ static char server_localhost_inv_utf8_ca3_cert_pem[] = "Efwe6rFJaNbKv9C9tWpPIPHRk/YkUIe29VUQR2m7UUpToBca\n" "-----END CERTIFICATE-----\n"; -const gnutls_datum_t server_ca3_localhost_inv_utf8_cert = { (void*)server_localhost_inv_utf8_ca3_cert_pem, +const gnutls_datum_t server_ca3_localhost_inv_utf8_cert = { (unsigned char*)server_localhost_inv_utf8_ca3_cert_pem, sizeof(server_localhost_inv_utf8_ca3_cert_pem)-1 }; @@ -1051,7 +1458,7 @@ static char server_localhost_ca3_ecc_cert_pem[] = "Li9LPzU70EyX6WF+9FM45E4/Gt9Oh8btrYyjbyH/K2VI8qPRz5cW\n" "-----END CERTIFICATE-----\n"; -const gnutls_datum_t server_ca3_localhost_ecc_cert = { (void*)server_localhost_ca3_ecc_cert_pem, +const gnutls_datum_t server_ca3_localhost_ecc_cert = { (unsigned char*)server_localhost_ca3_ecc_cert_pem, sizeof(server_localhost_ca3_ecc_cert_pem)-1}; /* shares server_ca3 key */ @@ -1082,6 +1489,90 @@ static char server_localhost_ca3_cert_pem[] = "6TXY44pCGHMFO6Kr\n" "-----END CERTIFICATE-----\n"; +/* shares server_ca3 key with tlsfeature=5 */ +static char server_ca3_tlsfeat_cert_pem[] = + "-----BEGIN CERTIFICATE-----" + "MIIEOjCCAqKgAwIBAgIUYBRfAcvgBUU4jCb8W89sQcPLqswwDQYJKoZIhvcNAQEL" + "BQAwDzENMAsGA1UEAxMEQ0EtMzAgFw0xOTA2MDcyMTA4NDFaGA85OTk5MTIzMTIz" + "NTk1OVowIjEgMB4GA1UEAxMXR251VExTIHRlc3QgY2VydGlmaWNhdGUwggGiMA0G" + "CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDZPXiZqiz3wLuz+B4ZnJuCphLEX7k1" + "5NcpamL3+9ea4gXyfeFSHbSaihPauBUcDMVbL/wfkhxYiJRCX7wqHIkJK4En5aEz" + "SDDa6pI/CI5lSbiXdNDGbFLh5b8Guvhfzyy8lDjFNNy3abkfU270tnzFY5mkYwYg" + "juN/RgPqh0b8McT+xUeN9x4PuSXXmMC1r3v7y4JuMxE8ZzGDhW2aQK5Is6QYv0WE" + "LS5hVvB8GdP5XQwTJw4HH5i/YES7TENV2RByzRY8hFQ9SbK5YHHGoszVJIlIuxm5" + "v8N2Ig1cW6t7t3HnuZbDYRDCERMiEigBz8vEZZyFsMLg5Z7JiNKSG/f+ER9CzDJX" + "HgxBctV9EEc2KmRT1P9JeI/xZUOl9lKljc+t8m0Um3Asx5duWm4tcZm7FecnaJiT" + "XD/tEG64qTKWtDuoI7+X9MjHe5lvf2gIJT3CoKW24Rn6O1fc9oCCnVAi0V6FLM4X" + "aG50X9NC666RVEFkXih8THA1gC9m9NJMrD0CAwEAAaN5MHcwEQYIKwYBBQUHARgE" + "BTADAgEFMAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0MB0GA1Ud" + "DgQWBBQzneEn04vV/OsF/LXHgWlPXjvZ1jAfBgNVHSMEGDAWgBT5qIYZY7akFBNg" + "dg8BmjU27/G0rzANBgkqhkiG9w0BAQsFAAOCAYEASMVR+C1x3pBRSRaaIYbFTC0X" + "VXc66iQWDfpTSokLIEN/UVZzLsQw5p1PntPqnRRudDnXS77rNQSZcc4NTFYrzSqW" + "WwdhIXtl3igLg5HMxU80dsr3LfGkzJ1iDS1RR0EGSvFjOE9ZUK0IBdsUvINqpj+l" + "6qxL36yfxamuELIxvgmecIMvLzbe7tUjRXneNvLGsLAJcq5QQmNMCWiyywtHbFa0" + "zbpxKMJmHMk0SbgZHUuFaASlAqVez19rJdzqQcJiw/YrMbbj/b2me1duLQ64dqGL" + "5gKTyDMhk5td53R5uPnr7F6+1u8zRzqA6mBvTfEk4wJ6YmvqdBfC47xT+Ksba6dX" + "Ugz+So2iu0rQxaLEBTZJ/gTXJEUafxUN4wF1ZOnUyltoqLJymhQoceoSwjYobOal" + "FUZEJgFNA7j8tR7J3MtFUaJqFosuPtxhF8/CCPukKV7bRokqh7zK+F21iaQOYvJn" + "AfuOg2g0ZMurGyS/yg8mVsGjh4bho9zPOlhPtFNM" + "-----END CERTIFICATE-----"; + +/* Marked as decrypt-only */ +static char server_localhost_ca3_rsa_decrypt_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIEITCCAomgAwIBAgIIWU+IEie6JrYwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE\n" + "AxMEQ0EtMzAgFw0xNzA2MjUwOTUzMjNaGA85OTk5MTIzMTIzNTk1OVowADCCAaIw\n" + "DQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBANk9eJmqLPfAu7P4Hhmcm4KmEsRf\n" + "uTXk1ylqYvf715riBfJ94VIdtJqKE9q4FRwMxVsv/B+SHFiIlEJfvCociQkrgSfl\n" + "oTNIMNrqkj8IjmVJuJd00MZsUuHlvwa6+F/PLLyUOMU03LdpuR9TbvS2fMVjmaRj\n" + "BiCO439GA+qHRvwxxP7FR433Hg+5JdeYwLWve/vLgm4zETxnMYOFbZpArkizpBi/\n" + "RYQtLmFW8HwZ0/ldDBMnDgcfmL9gRLtMQ1XZEHLNFjyEVD1JsrlgccaizNUkiUi7\n" + "Gbm/w3YiDVxbq3u3cee5lsNhEMIREyISKAHPy8RlnIWwwuDlnsmI0pIb9/4RH0LM\n" + "MlceDEFy1X0QRzYqZFPU/0l4j/FlQ6X2UqWNz63ybRSbcCzHl25abi1xmbsV5ydo\n" + "mJNcP+0QbripMpa0O6gjv5f0yMd7mW9/aAglPcKgpbbhGfo7V9z2gIKdUCLRXoUs\n" + "zhdobnRf00LrrpFUQWReKHxMcDWAL2b00kysPQIDAQABo4GNMIGKMAwGA1UdEwEB\n" + "/wQCMAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMB\n" + "MA8GA1UdDwEB/wQFAwMHIAAwHQYDVR0OBBYEFDOd4SfTi9X86wX8tceBaU9eO9nW\n" + "MB8GA1UdIwQYMBaAFPmohhljtqQUE2B2DwGaNTbv8bSvMA0GCSqGSIb3DQEBCwUA\n" + "A4IBgQAaq4+vai/FwYQ2fAjOsHsVV0nR5Zq55tT8Fexrj2/e9gr+bMV4HVxETByy\n" + "fLtMHGYv+8BENDaI2EOHTyKp5O2DNbITJSN7/ZIO4Rsk+N5m2FyF7DV/sAoxhN7R\n" + "mDy/jDtZyeIqKLptOQZbkRv3lf+vtJL3eakpgh5T/j14kT0QjLyJEZB1D9jurUsV\n" + "+fxYxQUpv4YInDeEk5aKfvZNdkEpbv56GYNc15mNiKryXoszdm+TKmHSVFH9wUj3\n" + "KAXBsQdMmZbd0ZFAEi7QV42Pr2x9+PrSE26bE6K31r02/RcxFQdL9E/3O+85S8eN\n" + "yOZoC/PIrm0mKIPn2NBGSKtCG8V1sTHHJyCwqQERp3pkaB7A9biCKExQN1d3Gsbe\n" + "C0R9bYimdbkYM6o7qi7OiLRKpYFgdVYaYEG3DRBpB3R3+EAKk91809tc9ow5xzkx\n" + "lWryqIzutm6rcClAnqeBIZEZIIvqZH8RcPBQEUajNCWRpBsbwF1xdWvIhP2R3y69\n" + "5dOfcuY=\n" + "-----END CERTIFICATE-----\n"; + +/* Marked as sign-only */ +static char server_localhost_ca3_rsa_sign_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIEITCCAomgAwIBAgIIWU+LoyEYfBYwDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE\n" + "AxMEQ0EtMzAgFw0xNzA2MjUxMDA4MzZaGA85OTk5MTIzMTIzNTk1OVowADCCAaIw\n" + "DQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBANk9eJmqLPfAu7P4Hhmcm4KmEsRf\n" + "uTXk1ylqYvf715riBfJ94VIdtJqKE9q4FRwMxVsv/B+SHFiIlEJfvCociQkrgSfl\n" + "oTNIMNrqkj8IjmVJuJd00MZsUuHlvwa6+F/PLLyUOMU03LdpuR9TbvS2fMVjmaRj\n" + "BiCO439GA+qHRvwxxP7FR433Hg+5JdeYwLWve/vLgm4zETxnMYOFbZpArkizpBi/\n" + "RYQtLmFW8HwZ0/ldDBMnDgcfmL9gRLtMQ1XZEHLNFjyEVD1JsrlgccaizNUkiUi7\n" + "Gbm/w3YiDVxbq3u3cee5lsNhEMIREyISKAHPy8RlnIWwwuDlnsmI0pIb9/4RH0LM\n" + "MlceDEFy1X0QRzYqZFPU/0l4j/FlQ6X2UqWNz63ybRSbcCzHl25abi1xmbsV5ydo\n" + "mJNcP+0QbripMpa0O6gjv5f0yMd7mW9/aAglPcKgpbbhGfo7V9z2gIKdUCLRXoUs\n" + "zhdobnRf00LrrpFUQWReKHxMcDWAL2b00kysPQIDAQABo4GNMIGKMAwGA1UdEwEB\n" + "/wQCMAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMB\n" + "MA8GA1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFDOd4SfTi9X86wX8tceBaU9eO9nW\n" + "MB8GA1UdIwQYMBaAFPmohhljtqQUE2B2DwGaNTbv8bSvMA0GCSqGSIb3DQEBCwUA\n" + "A4IBgQC1cJd/z1CQSyDfUd2uuNDTvA3WXWxNhqHMLitT1GJS6nUez+wCaWT9UfVy\n" + "+56z/eMaVasZPQ8dOKYdPRuzL2l65DKUUaKFOyD+NGvOS08qKY+oVGN1Qbmaxbvt\n" + "6rvzpW9UHn75zLDOUOMrGDkW5L36mMP8I0Y5AcNBrO5yFBvH8MAHr3zO2VvTSt6T\n" + "ZHFrDlV/nL5E+swzrmF6MZXO1mupk/gtelYfRtigwSr51RY+Me3uaGNEQe30JLu6\n" + "0gp6/otBns9qJjSgX9qWIj9iTHq4A2CiHZkb4j3+/TNNGB8dkBV+EvV8I4Bqdk33\n" + "mz4hSjJBLqg2NYZ4TaztWFsgTvGOYncLGl5e4dIqB94ICEFIrWN32JzS61Mu5xlt\n" + "qBh/JOUSdMe6csZrDIw//UhUgLj7KdFO5FhSW3DXEl9PZGWVR+LJ+T3HjomHf+Bb\n" + "ATbBQk+9MkHTiDWxD4FbmPuSC/h4Vh+G1VkyrlClTLW6K/+0DmE2LPJvRV5udpux\n" + "Ar7fYYU=\n" + "-----END CERTIFICATE-----\n"; + static char server_localhost_ca3_cert_chain_pem[] = "-----BEGIN CERTIFICATE-----\n" "MIIEKDCCApCgAwIBAgIMV6MdMjbIDKHKsL32MA0GCSqGSIb3DQEBCwUAMBIxEDAO\n" @@ -1135,11 +1626,20 @@ static char server_localhost_ca3_cert_chain_pem[] = #define server_ca3_cert server_ca3_localhost_cert #define server_ca3_cert_chain server_ca3_localhost_cert_chain -const gnutls_datum_t server_ca3_localhost_cert = { (void*)server_localhost_ca3_cert_pem, +const gnutls_datum_t server_ca3_localhost_cert = { (unsigned char*)server_localhost_ca3_cert_pem, sizeof(server_localhost_ca3_cert_pem)-1}; +const gnutls_datum_t server_ca3_localhost_rsa_decrypt_cert = { (unsigned char*)server_localhost_ca3_rsa_decrypt_cert_pem, + sizeof(server_localhost_ca3_rsa_decrypt_cert_pem)-1}; + +const gnutls_datum_t server_ca3_localhost_rsa_sign_cert = { (unsigned char*)server_localhost_ca3_rsa_sign_cert_pem, + sizeof(server_localhost_ca3_rsa_sign_cert_pem)-1}; + +const gnutls_datum_t server_ca3_tlsfeat_cert = { (unsigned char*)server_ca3_tlsfeat_cert_pem, + sizeof(server_ca3_tlsfeat_cert_pem)-1}; + const gnutls_datum_t server_ca3_localhost_cert_chain = { - (void*)server_localhost_ca3_cert_chain_pem, + (unsigned char*)server_localhost_ca3_cert_chain_pem, sizeof(server_localhost_ca3_cert_chain_pem)-1 }; @@ -1165,7 +1665,7 @@ static char server_localhost_insecure_ca3_cert_pem[] = "F92lL9akoGYmyehqQHeRQsrVRKcCOiv8lgVF\n" "-----END CERTIFICATE-----\n"; -const gnutls_datum_t server_ca3_localhost_insecure_cert = { (void*)server_localhost_insecure_ca3_cert_pem, +const gnutls_datum_t server_ca3_localhost_insecure_cert = { (unsigned char*)server_localhost_insecure_ca3_cert_pem, sizeof(server_localhost_insecure_ca3_cert_pem)-1 }; @@ -1183,7 +1683,7 @@ static char server_ca3_localhost_insecure_key_pem[] = "dD2lxHfq5Q1QxCSjl8EnBnjnbFJN9WmK9ztkK00Avg==\n" "-----END RSA PRIVATE KEY-----\n"; -const gnutls_datum_t server_ca3_localhost_insecure_key = { (void*)server_ca3_localhost_insecure_key_pem, +const gnutls_datum_t server_ca3_localhost_insecure_key = { (unsigned char*)server_ca3_localhost_insecure_key_pem, sizeof(server_ca3_localhost_insecure_key_pem)-1 }; @@ -1212,7 +1712,7 @@ static char unknown_ca_cert_pem[] = "nva6xGbu1R8UP4+fXCOFdiVixHEQR5k+mqd65vGGxovALAfY\n" "-----END CERTIFICATE-----\n"; -const gnutls_datum_t unknown_ca_cert = { (void*)unknown_ca_cert_pem, +const gnutls_datum_t unknown_ca_cert = { (unsigned char*)unknown_ca_cert_pem, sizeof(unknown_ca_cert_pem)-1 }; @@ -1313,6 +1813,137 @@ static const char server_ca3_pkcs12_pem[] = "BAjXfJCHoHZI2QICCAA=\n" "-----END PKCS12-----\n"; -const gnutls_datum_t server_ca3_pkcs12 = { (void*)server_ca3_pkcs12_pem, +const gnutls_datum_t server_ca3_pkcs12 = { (unsigned char*)server_ca3_pkcs12_pem, sizeof(server_ca3_pkcs12_pem)-1 }; + +/* Raw public-key key material for testing */ +static char rawpk_public_key_pem1[] = + "-----BEGIN PUBLIC KEY-----\n" + "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAyAeBq7Ti7oVExeVT1PqH\n" + "GBXzC+johdeVnZgZRLhDTIaIGODV5F5JhE4NNb1O/DYLlAy5IIO8tfAE2KIxlarN\n" + "H/+AcfV6ZJQSG4SSmhoIGzfdcdjuBmFfdfhO+z/cgqiewh53/fFCQlaJweHhpmim\n" + "/LVL/M/1Rd6Urskv/5jXGG4FVUNfhXKQag0uzWsqcztCPX7Lrqr2BSOmkA1nWzdo\n" + "h5oBuxdooaH9/kwphqJAp03LwtaSStX/yz6Mh+ZqEbBuM4mWw/xKzbEbs7zA+d8s\n" + "ryHXkC8nsdA+h+IRd8bPa/KuWQNfjxXKNPzgmsZddHmHtYtWvAcoIMvtyO23Y2Nh\n" + "N4V0/7fwFLbZtfUBg4pqUl2ktkdwsNguTT1qzJCsYhsHXaqqvHy+5HR2D0w07y2X\n" + "1qCVmfHzBZCM5OhxoeoauE+xu+5nvYrgsgPE0y5Nty0y2MrApg3digaiKUXrI+mE\n" + "VKn9vsQeaVvw9D6PgNQM99HkbGhRMGPOzcHjS/ZeLd1zAgMBAAE=\n" + "-----END PUBLIC KEY-----"; + +const gnutls_datum_t rawpk_public_key1 = { + (unsigned char*)rawpk_public_key_pem1, + sizeof(rawpk_public_key_pem1) - 1 +}; + +static char rawpk_private_key_pem1[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIIG4wIBAAKCAYEAyAeBq7Ti7oVExeVT1PqHGBXzC+johdeVnZgZRLhDTIaIGODV\n" + "5F5JhE4NNb1O/DYLlAy5IIO8tfAE2KIxlarNH/+AcfV6ZJQSG4SSmhoIGzfdcdju\n" + "BmFfdfhO+z/cgqiewh53/fFCQlaJweHhpmim/LVL/M/1Rd6Urskv/5jXGG4FVUNf\n" + "hXKQag0uzWsqcztCPX7Lrqr2BSOmkA1nWzdoh5oBuxdooaH9/kwphqJAp03LwtaS\n" + "StX/yz6Mh+ZqEbBuM4mWw/xKzbEbs7zA+d8sryHXkC8nsdA+h+IRd8bPa/KuWQNf\n" + "jxXKNPzgmsZddHmHtYtWvAcoIMvtyO23Y2NhN4V0/7fwFLbZtfUBg4pqUl2ktkdw\n" + "sNguTT1qzJCsYhsHXaqqvHy+5HR2D0w07y2X1qCVmfHzBZCM5OhxoeoauE+xu+5n\n" + "vYrgsgPE0y5Nty0y2MrApg3digaiKUXrI+mEVKn9vsQeaVvw9D6PgNQM99HkbGhR\n" + "MGPOzcHjS/ZeLd1zAgMBAAECggGBALHiAw3Yscqd11gJpbCMDqF7u4VG3alQ26un\n" + "PClhl++w380H/Q62TriK1LKKpHgj8834NpXUsXg2d4jTTDcmCn6/L9GoFOzmxOeV\n" + "0O2b4sOZvaNl397qrwLxDAPhec7z9yL4B4tcBqmJ3b3+izX6cS3gaC/uG9fDpgN9\n" + "xOKPYBFInhOB86twAz9cc9eXysto0nJvlODDBj/xwUjvso9qydl1Or7PhWvf7Ek+\n" + "H9ur5MUjqOWe/b/xaSWsfTrJzF/ovbRnGbXLIpozIx609TZS4wYSqU5FUjkL0zTB\n" + "bTdb3jgFm/5SHnnThD67zbZavCxiN9wiTs3zeGlxYf8hMeaTkOYiAOR4/1bOTe2J\n" + "ttRA1EcY+i6H0+JOtLkqwj5ka0m3lrH2KD3E/mHs1yfERQx7VVjw9IpeAKmi5lzQ\n" + "v1lhIXiv75Mb0NMsCknGYPLHCyOY5aA2dhR8Wnr67gOYu3ssexLzMKczk5OTzl5c\n" + "PRHJRXDpJqgOYWujF99uCYhnxonO4QKBwQDUQB0s4shWTyOylq7j4rCSbHf2zHDf\n" + "HBYC75wyjQECNQXNk6hp5jJz2BC0XvnO7PYSRXaVauMc/S3V7V7GMsry3uugfwLy\n" + "XNnyRVY4voe5SNt/WAArybNsPNPEIPzgkZmeWvcpoY8ESufPfVW54BvGHt3YjPjI\n" + "gYmFUkpPRUWXfji91NpTlIrsP6jtBTYXGV4kVm+TawP06a6FdCjJQaI7Nm2dwUiX\n" + "Cmf4oFSo8mGxi0wimX+BiLJep2bYnUF2gqMCgcEA8UKESDX3jBpyz59vpSjmfpw1\n" + "AnlEfR6s83W92m0HfEYLulfxq9xA2zaQjy4GbaKVRfLrO2Pj3bZWs89RGXTQVGgq\n" + "ztCLIRsL+M1SQ883e8yx4jwFaqIM+pPpvAjOOOTdpgY33h7w20tgrbzVKeOl1ghC\n" + "IZ+K8C/tIGZXI5/TYppl7csIOoYRtzuRpyDE0tmwy658RfyxzEtfLxJoaLiFXOE0\n" + "zFFrEvT/jto4jN+cwsdnHhxrY9+bVNUNyb9ZH7bxAoHARvcIyjEo+nKLZPKsltT8\n" + "ZHiPw5ynQHGLin/CocQzSiGgRxPPg1jMFZ9wNl5q95ySyZkgBOUv+klMQfKTdYEW\n" + "Cg4uigLtYUtaM36rTV2m03RgrzslE37k1pOf2juNUShdTGztpqW1w6Gnz+AAAZ3E\n" + "q4E2e2jm5WMqL8FLxyVKF1TEc/Pu63MG3+aI/HZ5l0+MAmpD8+4b7I8VItmrqV6g\n" + "d1vDWrN9KcL48E/q/nHL6CjC0+6uiwjBWpRt9o7djFoxAoHAJzK/e1wJVGIXtVQa\n" + "N6Nlj7yhgD1ju1B4mTXQGuUMCkz3KtePFHU8tGExK5I2ySlZR3wobAXWx/cQLzbH\n" + "3nL0RkKGcgPAFyjl0Q7LBulsAllHrZJC7whVQ4E0wLBNkUDeIlNwUE6Go5qjopbD\n" + "q4KpNxUwaXYahNvEkzcNgWQ+XA7p8LDELX4K8tJi39ybHgbwiqdW2ags2xyD4ooD\n" + "HMCeKnEMuwWfd/0GaJdcCMdsGNl9D49eg2OZQTc8fkLwoA6BAoHATQdk3VZwGGn/\n" + "93p9vu189alkshTmir+SOo/ufH5U+j7t8cPeT7psuYAPZWS+Z6KEzvHxj54pAvcp\n" + "mlAngD3+AfHDn/VAtYv5HVcpZ+K2K0X4v8N5HGIubgaebs2oVNz+RAWnd8K2drDG\n" + "NcJV3C+zLziTCwvpGCIy3T/lHjKe+YczjGfhg2e6PgfwhTqPAjuhUZ8wScYo7l7V\n" + "zAhlSL0665IXJ32zX+3LyQFDbkB6pbKy5TU+rX3DmDyj3MSbc3kR\n" + "-----END RSA PRIVATE KEY-----\n"; + +const gnutls_datum_t rawpk_private_key1 = { + (unsigned char*)rawpk_private_key_pem1, + sizeof(rawpk_private_key_pem1) - 1 +}; + +const char rawpk_public_key_pem2[] = + "-----BEGIN PUBLIC KEY-----\n" + "MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0tQAiQ13zWGZMV9YxFo2\n" + "H15yERrkr8KD7z6QheVeatc2+5X0m5/+/o95nmnt6Mlwa27U78QwkHBccOaNkSi7\n" + "HGMopaxatEsF/S30MDmhqOi9R2VtMwDaa2zWH/s2wPHn8efn2/zG0jeXCzNsXFs4\n" + "zNApaZmTJCHaDRUE12adwP5i6GvUb978f27Cm0gnkSWBH9OdVnMunQkm/L16NI3E\n" + "lvcDEEJbqhX2eswHenbhw//LiR1EKRtHEjWywAq5AeHeYNH+2zjff59SGD6Bn+W2\n" + "vPKBhSWCyFDPGRfcYeCX2LFM7+Xx0j+GLzBnkjBhEgdsdLJ7Bt8aDToUJScLxeeP\n" + "oOmL9e0bec20debwF0G/7QMlwRgDjV3sd3u+5RxRCeOh8Xqfbs/tij7tnU93orhc\n" + "MzGjcn5XZ6WicyimuTruNznhKhNp6vmizCpwQAroimaZGV7F/8nvHInTZfpNH/+b\n" + "++gYbddkH+MouxOXcAEUku6vN0JzDgA4qj4Tw7dffXSDAgMBAAE=\n" + "-----END PUBLIC KEY-----\n"; + +const gnutls_datum_t rawpk_public_key2 = { + (unsigned char*)rawpk_public_key_pem2, + sizeof(rawpk_public_key_pem2) - 1 +}; + +const char rawpk_private_key_pem2[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIIG4wIBAAKCAYEA0tQAiQ13zWGZMV9YxFo2H15yERrkr8KD7z6QheVeatc2+5X0\n" + "m5/+/o95nmnt6Mlwa27U78QwkHBccOaNkSi7HGMopaxatEsF/S30MDmhqOi9R2Vt\n" + "MwDaa2zWH/s2wPHn8efn2/zG0jeXCzNsXFs4zNApaZmTJCHaDRUE12adwP5i6GvU\n" + "b978f27Cm0gnkSWBH9OdVnMunQkm/L16NI3ElvcDEEJbqhX2eswHenbhw//LiR1E\n" + "KRtHEjWywAq5AeHeYNH+2zjff59SGD6Bn+W2vPKBhSWCyFDPGRfcYeCX2LFM7+Xx\n" + "0j+GLzBnkjBhEgdsdLJ7Bt8aDToUJScLxeePoOmL9e0bec20debwF0G/7QMlwRgD\n" + "jV3sd3u+5RxRCeOh8Xqfbs/tij7tnU93orhcMzGjcn5XZ6WicyimuTruNznhKhNp\n" + "6vmizCpwQAroimaZGV7F/8nvHInTZfpNH/+b++gYbddkH+MouxOXcAEUku6vN0Jz\n" + "DgA4qj4Tw7dffXSDAgMBAAECggGAVD3oFNtv0n48I1FQ++x8Ed7AP3t6g4x7AX8D\n" + "aq0zJAfo7XCG9CRjVL5pv1XefZT4OcVoioHfUefD2E0XpjgbRAWPOVv8Rmxv8TGK\n" + "kDaHFSIid8PcdXPS0vgDO3Y686/1mWCr8eg4XclerlgW5XSB5r0KvyphdB+erHmI\n" + "nLVhNbuwM+TaVvVH+Xd9hWS4grP0u43oIaIWryL4FCd2DEfVlOkQrU+GpxjtizW5\n" + "i0KzhYjRgHFUSgSfSnRwf3IJaOoiIpOma2p7R4dVoQkVGS6bStqPcqSUGVxH2CLu\n" + "TC7B0xZZs2xq6pLVWYXh/J79Ziw76+7qeMwFatzsUPtB6smQvR7016BThY6Cj+ui\n" + "KgTCZGpbb30MCn9/px8P2jXagA9fnPzf31WkdbsnjrYPNe6kkP5snJtz6k3cYex2\n" + "P8WulCS23qjCdVoUcoSDzPiaFtnPR/HcZDpTYuxKuUMoQrqsmRHeF/QRvbXkKFQC\n" + "Kudpfna5CAIT5IaIWwXQp0NfpnNBAoHBAPcnqz2uZaVZO7LiZEMc3cDfiPTp2vhf\n" + "VRYNyvTZIYgAox8k49waEQq6MyD5N2oWyRjWsQ0ta/BqJgMLoG42oyDntp/HGhZC\n" + "SxLQEu4ursFsCE32I4nyt7DD5erzX+H6folRq2BelL6ISwdr1g1wJZ3cCrwGbG/P\n" + "7MUYtSo026K9iXCqv9t7Q3TYe7yECVrxqbOu++C2df8IodehUm5wQZTsysBDfCHZ\n" + "PT9m4Qfaryq/u4N5w8nCt/Ep3JkjqyJL4wKBwQDaX4WbwL6ipyt6k4NZ6dEe0aLT\n" + "yKowO0rAWckr6WbA6kFBV2JWPswdV7gCqSOaae+UVc6cpw07jc39vsFNFGDL6OfC\n" + "HvmjQ2HQ/Mf4RjNTSt1rYpiB7DTqtLCys454OHFxo0UinXUc20+timroLEJbZJ23\n" + "upgAvico9zgCyjiwHoEVCpwZerLcLJk44mSGANiBLMo6YfyWj+PfLOeXu5rs4vhC\n" + "K0JBPdIzXHKwv996qFpy8xBatfO/+CH2NR/D1uECgcB8mATdbWNUfa14umQs6Qpp\n" + "Rsb2IEYA2547Jezgje03cIrLEn/D32gj7kYEI15qHt51pRVQPUuiwQA0nNHdfbGy\n" + "ztzjoy1ldzn9W+OPKv1yCJIPKzwzOKadd8QaM2Jsuyi69O7eABAgFPkt3pDj6Vst\n" + "P1Yx/1L+8uS7X39ErazjV4VHxOw/Kt6Qsul92VoV/Km+KUJUv+awEJv15h92CSUm\n" + "fFChp+OV9LvJkIV0vit783gGCYZH2d98tcu9b5vACF0CgcAZM0rM5ZpaVOZcl+dh\n" + "me0LHHAo9pBFTqJavkHL8nxsKNxs+POdNlQB0tymWfSE3lLKkHhudYy+Yafy72+J\n" + "QJ/HCFKugTqXz6/bGUDOcvN7WjlhKhilbafRqhZ2GOiJESJuVcQlsXwRX3G7eizK\n" + "LElgGKVmzX67HzaPsK/jCokuMeb9kaLgAdvgMrlf6ihlmnVhutR/lk065tIKMDlt\n" + "tjWzvqGdqTZVJxg52yJVKV9V3VXKzCgH/9VoQu9QZWMMC6ECgcEAu2lYMEfbrTYS\n" + "u2ukovL69EnxUfQ76f8/cs3gVsOWRxPN6MFe8pR7lC03orHckGdwVF0uUSbek4F7\n" + "vmZxewPQvVWntGfyL3uhln+xyJbfd/a4YThTDzXIy++jdrKGCVPc9Z+XPWJyc5qM\n" + "fA7FxB9uBfVyHKa3LIsuvyFtSKF38pEVMrL4kTnB++Eg536AOZbYB351dMi0qXzN\n" + "Ljyi36ud0J5l00OZAanLPw7dklZOTYNguCDRhi6k7qpayV7ywLSB\n" + "-----END RSA PRIVATE KEY-----\n"; + +const gnutls_datum_t rawpk_private_key2 = { + (unsigned char*)rawpk_private_key_pem2, + sizeof(rawpk_private_key_pem2) - 1 +}; + +#endif /* GNUTLS_TESTS_CERT_COMMON_H */ diff --git a/tests/cert-key-exchange.c b/tests/cert-key-exchange.c deleted file mode 100644 index 64c0d30b0c..0000000000 --- a/tests/cert-key-exchange.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright (C) 2015 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -/* This program tests the various certificate key exchange methods supported - * in gnutls */ - -#include -#include -#include -#include -#include -#include "utils.h" -#include "eagain-common.h" -#include "cert-common.h" - -const char *side; - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "%s|<%d>| %s", side, level, str); -} - -#define MSG "hello there ppl" - -#define USE_CERT 1 -#define ASK_CERT 2 - -static void try(const char *name, const char *client_prio, gnutls_kx_algorithm_t client_kx, - gnutls_sign_algorithm_t server_sign_algo, - gnutls_sign_algorithm_t client_sign_algo, - unsigned client_cert) -{ - int ret; - char buffer[256]; - /* Server stuff. */ - gnutls_certificate_credentials_t serverx509cred; - gnutls_anon_server_credentials_t s_anoncred; - gnutls_dh_params_t dh_params; - const gnutls_datum_t p3 = - { (unsigned char *) pkcs3, strlen(pkcs3) }; - gnutls_session_t server; - int sret = GNUTLS_E_AGAIN; - /* Client stuff. */ - gnutls_certificate_credentials_t clientx509cred; - gnutls_anon_client_credentials_t c_anoncred; - gnutls_session_t client; - int cret = GNUTLS_E_AGAIN; - - /* General init. */ - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(6); - - /* Init server */ - gnutls_anon_allocate_server_credentials(&s_anoncred); - gnutls_certificate_allocate_credentials(&serverx509cred); - - if (client_kx == GNUTLS_KX_ECDHE_ECDSA) { - gnutls_certificate_set_x509_key_mem(serverx509cred, - &server_ecc_cert, &server_ecc_key, - GNUTLS_X509_FMT_PEM); - } else { - gnutls_certificate_set_x509_key_mem(serverx509cred, - &server_cert, &server_key, - GNUTLS_X509_FMT_PEM); - } - - gnutls_dh_params_init(&dh_params); - gnutls_dh_params_import_pkcs3(dh_params, &p3, GNUTLS_X509_FMT_PEM); - gnutls_certificate_set_dh_params(serverx509cred, dh_params); - gnutls_anon_set_server_dh_params(s_anoncred, dh_params); - - gnutls_init(&server, GNUTLS_SERVER); - gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, - serverx509cred); - gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); - - gnutls_priority_set_direct(server, - "NORMAL:+ANON-ECDH:+ANON-DH:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519", - NULL); - gnutls_transport_set_push_function(server, server_push); - gnutls_transport_set_pull_function(server, server_pull); - gnutls_transport_set_ptr(server, server); - - /* Init client */ - - ret = gnutls_certificate_allocate_credentials(&clientx509cred); - if (ret < 0) - exit(1); - - if (client_cert == USE_CERT) { - gnutls_certificate_set_x509_key_mem(clientx509cred, - &cli_cert, &cli_key, - GNUTLS_X509_FMT_PEM); - gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUIRE); - } else if (client_cert == ASK_CERT) { - gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); - } - - ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); - if (ret < 0) - exit(1); - - ret = gnutls_init(&client, GNUTLS_CLIENT); - if (ret < 0) - exit(1); - - gnutls_anon_allocate_client_credentials(&c_anoncred); - gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); - ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, - clientx509cred); - if (ret < 0) - exit(1); - - gnutls_transport_set_push_function(client, client_push); - gnutls_transport_set_pull_function(client, client_pull); - gnutls_transport_set_ptr(client, client); - - ret = gnutls_priority_set_direct(client, client_prio, NULL); - if (ret < 0) { - exit(1); - } - HANDSHAKE(client, server); - - if (gnutls_kx_get(client) != client_kx) { - fail("%s: got unexpected key exchange algorithm: %s (expected %s)\n", name, gnutls_kx_get_name(gnutls_kx_get(client)), - gnutls_kx_get_name(client_kx)); - exit(1); - } - - /* test signature algorithm match */ - ret = gnutls_sign_algorithm_get(server); - if (ret != (int)server_sign_algo) { - fail("%s: got unexpected server signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); - exit(1); - } - - ret = gnutls_sign_algorithm_get_client(server); - if (ret != (int)client_sign_algo) { - fail("%s: got unexpected client signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); - exit(1); - } - - ret = gnutls_sign_algorithm_get(client); - if (ret != (int)server_sign_algo) { - fail("%s: cl: got unexpected server signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); - exit(1); - } - - ret = gnutls_sign_algorithm_get_client(client); - if (ret != (int)client_sign_algo) { - fail("%s: cl: got unexpected client signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); - exit(1); - } - - gnutls_record_send(server, MSG, strlen(MSG)); - - ret = gnutls_record_recv(client, buffer, sizeof(buffer)); - if (ret == 0) { - fail("client: Peer has closed the TLS connection\n"); - exit(1); - } else if (ret < 0) { - fail("client: Error: %s\n", gnutls_strerror(ret)); - exit(1); - } - - if (ret != strlen(MSG) || memcmp(MSG, buffer, ret) != 0) { - fail("client: Error in data received. Expected %d, got %d\n", (int)strlen(MSG), ret); - exit(1); - } - - gnutls_bye(client, GNUTLS_SHUT_RDWR); - gnutls_bye(server, GNUTLS_SHUT_RDWR); - - gnutls_deinit(client); - gnutls_deinit(server); - - gnutls_certificate_free_credentials(serverx509cred); - gnutls_certificate_free_credentials(clientx509cred); - gnutls_anon_free_server_credentials(s_anoncred); - gnutls_anon_free_client_credentials(c_anoncred); - gnutls_dh_params_deinit(dh_params); -} - -void doit(void) -{ - global_init(); - - try("anon-ecdh", "NORMAL:-KX-ALL:+ANON-ECDH", GNUTLS_KX_ANON_ECDH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - reset_buffers(); - try("anon-dh", "NORMAL:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - reset_buffers(); - try("dhe-rsa no cert", "NORMAL:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - reset_buffers(); - try("ecdhe x25519 rsa no cert", "NORMAL:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - reset_buffers(); - try("ecdhe rsa no cert", "NORMAL:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - reset_buffers(); - try("ecdhe ecdsa no cert", "NORMAL:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - reset_buffers(); - - try("rsa no cert", "NORMAL:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - reset_buffers(); - try("dhe-rsa cert", "NORMAL:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - reset_buffers(); - try("ecdhe-rsa cert", "NORMAL:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - reset_buffers(); - try("rsa cert", "NORMAL:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - reset_buffers(); - try("ecdhe ecdsa cert", "NORMAL:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - reset_buffers(); - - try("dhe-rsa ask cert", "NORMAL:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - reset_buffers(); - try("ecdhe-rsa ask cert", "NORMAL:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - reset_buffers(); - try("rsa ask cert", "NORMAL:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - reset_buffers(); - try("ecdhe ecdsa cert", "NORMAL:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - reset_buffers(); - - gnutls_global_deinit(); -} diff --git a/tests/cert-reencoding.sh b/tests/cert-reencoding.sh new file mode 100755 index 0000000000..aadd6fd1bd --- /dev/null +++ b/tests/cert-reencoding.sh @@ -0,0 +1,272 @@ +#!/bin/sh + +# Test case: Try to establish TLS connections with gnutls-cli and +# check the validity of the server certificate via OCSP +# +# Copyright (C) 2016 Thomas Klute +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../src/certtool${EXEEXT}}" +OCSPTOOL="${OCSPTOOL:-../src/ocsptool${EXEEXT}}" +GNUTLS_SERV="${GNUTLS_SERV:-../src/gnutls-serv${EXEEXT}}" +GNUTLS_CLI="${GNUTLS_CLI:-../src/gnutls-cli${EXEEXT}}" +DIFF="${DIFF:-diff}" +SERVER_CERT_FILE="cert.$$.pem.tmp" +SERVER_KEY_FILE="key.$$.pem.tmp" +CLIENT_CERT_FILE="cli-cert.$$.pem.tmp" +CLIENT_KEY_FILE="cli-key.$$.pem.tmp" +CA_FILE="ca.$$.pem.tmp" + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -x "${OCSPTOOL}"; then + exit 77 +fi + +if ! test -x "${GNUTLS_SERV}"; then + exit 77 +fi + +if ! test -x "${GNUTLS_CLI}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + +export TZ="UTC" + +. "${srcdir}/scripts/common.sh" + +check_for_datefudge + +eval "${GETPORT}" +# Port for gnutls-serv +TLS_SERVER_PORT=$PORT + +# Port to use for OCSP server, must match the OCSP URI set in the +# server_*.pem certificates +eval "${GETPORT}" + +# Check for OpenSSL +OPENSSL=`which openssl` +if ! test -x "${OPENSSL}"; then + echo "You need openssl to run this test." + exit 77 +fi + +SERVER_PID="" +TLS_SERVER_PID="" +stop_servers () +{ + test -z "${SERVER_PID}" || kill "${SERVER_PID}" + rm -f "${SERVER_CERT_FILE}" + rm -f "${SERVER_KEY_FILE}" + rm -f "${CLIENT_CERT_FILE}" + rm -f "${CLIENT_KEY_FILE}" + rm -f "${CA_FILE}" +} +trap stop_servers 1 15 2 EXIT + + +cat >${CA_FILE} <<_EOF +-----BEGIN CERTIFICATE----- +MIIC6jCCAdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu +c2hpZnQtc2lnbmVyQDE1MTgxOTUxNDgwHhcNMTgwMjA5MTY1MjI3WhcNMjMwMjA4 +MTY1MjI4WjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE1MTgxOTUxNDgw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUJDl3RHbicnWWcxinW2k5 +Bz3IJ6NWhETGaLycsc9yWXf1HKxb5TQuiwmiTAgKo9vXHQrtKq991279QYtw7sGC +bNJKfGMBFTBBMIFnNcT/ckhPxs8eVOY/cpiVnrZZfim1D7/nqmRQk5n8Si6Kx9se +U9PEwZnOdABeiCcCxxAXqSXw/3kZNgWY9Byf6gdGNWcsClTiu4tHRtk05dnJnyuL +ruGFnQXElq+CofayEsWJ6WXH0R2uhy7tOrI8Twu+XYxcQiMXaz93vePzOuxjY/tH +leg26xNgRmtaM9xJ+mlQkbULK32AiUROq51PvJaXDJMg9se6sZndBCgxrKm7YAL/ +AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBCwUAA4IBAQBmI5HiWNgYwC87MLWsicGquhcBm9letaY+s1HUKgJNBbh1 +jaKoHv+asWySrWVcPp1qszD7/clzuoVL6XdEPNet9L41NiaU3B7IeMgJWAz/nR2b +JdcazzsUkaXFVhdFkyx2mIqSX2yjPgUjehKXuOZ8bbfbWYF8IeKGVc1YHawKPdSE +vFFf5U09f3TmQWAh3o/FNt+cQCi8TkIRnLndvKTZ/PxHPi3o8cm60a+FGqKoT00d +eC6+8RSihgV3y214DP+llakiCuQDVnMCccdU8EZ+AgKaKhxUXIh3CZR/dRvBtzcA +I1YtLa8NGet7Qjnpwsc+NuFb0pJNoiVtKw3EejUA +-----END CERTIFICATE----- +_EOF + +cat >${SERVER_KEY_FILE} <<_EOF +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAwZMHoY9/cUE5OqeTK/Ch1uHOAp0FRBtBcK95Kiq2tzVWcy2Q +0UP5oOMCRnMeh4bFin++fPwvF1jC7OdXMaV1S+FgwVjpi7BAI/bxG6jycEguEfrV +gon57qj6OfnHtvWjsL2SCdMioDAB5dbgR8JWGykf7CkVHgh1Lm1FcdbyTR/vw7yP +yPQ+YEj1dY4fURVEXc9yxJ+J5lY/vkESSunsGO+EUGoiFjQ1mTh3JMcohRoNvuB+ +p4/g+wr7LfajkGDqtxM9YmVarrLNa9VvABF6NaO+W4ejvFUkz5+EZrc3MtLc6X60 +OlbM2u4VywenuVH5ZYYoZ0lZS6p0MZuq3zMgTQIDAQABAoIBAHohjw4DILBPK5Fz +SyrM/v85pqYFdd4bqDU1sSfGnVOIZovy8szlq2kz8SqL1XZCtP4GTSREZF3BlfKs +n1nmf9QpVceHloqY4E8Qrdz6wkPPdqnHbdCXx0Yp/P55NuWbo/SOFsb2HIGe6IOg +CA+ecH9gehChdv5k7bImJUuHB4dahsUSVuH5c1d76d+R6NYxCAppc3oy8LVTCGgU +ig1Vfp9ismASLeqlPAXDniIb1yCbnsqE09GCSrOQtZ6yVR8trqxZAO+2xx9fTScx +1n+YLLxgzrSQhmPzNxKbOjNyq9xCZiB8uwih8U0nwSnRwdDIgJchp8367rchyBmq +gNcL9S0CgYEA6g9MWMXViUnFkaZPxV9lbHqRkbZjTgdZ6HUpVAJkTPYmLCVSH09A +c7FKLuSLH2rlabg/xnzcmqSdJsU7zDst8+w6kxRujFPw9gZUweCaM4bA4cGnvMj/ +4uhy6CkBAEW/009wXqqahQhtkEuw2yXhAkHUR+wbIeTye9uJkWiJj4cCgYEA07g1 +RmIMLmxrt/0CoOUG1Z5yvxlaI1Cp+ZGPpCtp6pBkwFFzd6SzlnMvfqrF2z9fezsv +8c+dWbRfLItmn5PvjIhXq3hhvD6MJeXaPXZAAVUC5pKiu707BnGeu+Lk0exZMAgB +pS2WJKZCZaC0NUJ27m/Wwh2W+shk5rnFI8MkvosCgYEA4pTKsMlbTRsIUlYwtP4D +fj8tOmTYv0mohLsetf/WvxYun9/FHyAmYZkIGlsOPuzJh01hF7H6EQ44P7cBi1Ti +yFYv4gAOgHQmONSqKkFWpXjWsfU5fy0JYczqp8pB+NSMvXASdOIs0Yn2HpDXdV62 +8uttJ+7t2SL8hmBhTU1olXMCgYBDGSQ5NCWsKMxSuSq2Fx99YAP5sG0yuAPGhm1B +mEivACgOE0JG7rnDuqmYuUKPY5w9D9r4BdZWcaWgFmXluRq4LRWr0DEZWbFM6XWq ++Oj8AxcyP9K3MRedyTCHVzcxmHgDkuYClVn6L37nenDiWDgdBPDJAFuzCwN/Y+yo +ktX4VQKBgAUqF/Inpj8X8l07FmZWNmnN/9ZmwxGfRUrVc4Ug/gdZJdKewrXoRlV5 +5w6uSWxkTcNfGJ71lNtu84Fckn2vb+yga5XR42SH3+fIVpF6FrxLnWbVTjZ5ADrS +m1rOyDBy8Y9mwODrhICRnn4Q/oL+2EOFK8qSACJ0Ox8pSfJxZUcI +-----END RSA PRIVATE KEY----- +_EOF + +cat >${SERVER_CERT_FILE} <<_EOF +-----BEGIN CERTIFICATE----- +MIIENzCCAx+gAwIBAgIBGzANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu +c2hpZnQtc2lnbmVyQDE1MTgxOTUxNDgwHhcNMTgwMjI3MjAzMDQwWhcNMjAwMjI3 +MjAzMDQxWjAXMRUwEwYDVQQDEwwxMC4xMy4xMjkuNDcwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDBkwehj39xQTk6p5Mr8KHW4c4CnQVEG0Fwr3kqKra3 +NVZzLZDRQ/mg4wJGcx6HhsWKf758/C8XWMLs51cxpXVL4WDBWOmLsEAj9vEbqPJw +SC4R+tWCifnuqPo5+ce29aOwvZIJ0yKgMAHl1uBHwlYbKR/sKRUeCHUubUVx1vJN +H+/DvI/I9D5gSPV1jh9RFURdz3LEn4nmVj++QRJK6ewY74RQaiIWNDWZOHckxyiF +Gg2+4H6nj+D7Cvst9qOQYOq3Ez1iZVquss1r1W8AEXo1o75bh6O8VSTPn4Rmtzcy +0tzpfrQ6Vsza7hXLB6e5UfllhihnSVlLqnQxm6rfMyBNAgMBAAGjggF9MIIBeTAO +BgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIw +ADCCAUIGA1UdEQSCATkwggE1ggprdWJlcm5ldGVzghJrdWJlcm5ldGVzLmRlZmF1 +bHSCFmt1YmVybmV0ZXMuZGVmYXVsdC5zdmOCJGt1YmVybmV0ZXMuZGVmYXVsdC5z +dmMuY2x1c3Rlci5sb2NhbIIJbG9jYWxob3N0gglvcGVuc2hpZnSCEW9wZW5zaGlm +dC5kZWZhdWx0ghVvcGVuc2hpZnQuZGVmYXVsdC5zdmOCI29wZW5zaGlmdC5kZWZh +dWx0LnN2Yy5jbHVzdGVyLmxvY2FsggwxMC4xMy4xMjkuNDeCCTEyNy4wLjAuMYIK +MTcyLjE3LjAuMYIKMTcyLjMwLjAuMYINMTkyLjE2OC4xMjQuMYIMMTkyLjE2OC4y +My4xhwQKDYEvhwR/AAABhwSsEQABhwSsHgABhwTAqHwBhwTAqBcBMA0GCSqGSIb3 +DQEBCwUAA4IBAQCGE5PJQn6cSj6MQe3GPcKTitLGHp94dJttB2v4Q9Gj9aKF9fI+ +fbNb7Kgh8fPRKxVqU400aio2aQiCONIe7PlnjKjWTkJjKgntcOx/UAES1q13fRIU +mF/tH5jX6JlL0VbvQ97vYar0pXfF97A2JDjFB1cj0axULPA+RH+Z2QgQ4slzPtz9 +CvRFdicHLHCiqPVKFB5vTmtNoG/Hzjd8rMPpyW9bf8PeNeyUjV5g/JGUyqfovHiW +2OC96XKWOgCnPYLZ5LAtk33GyMnL+sxWzr4Kgp4Q3OfBFYVthG0NInIu0zYorR8G +avi3GlxRtyRyE79dmPPXA2kLNFApSq3o2jkV +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC6jCCAdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu +c2hpZnQtc2lnbmVyQDE1MTgxOTUxNDgwHhcNMTgwMjA5MTY1MjI3WhcNMjMwMjA4 +MTY1MjI4WjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE1MTgxOTUxNDgw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUJDl3RHbicnWWcxinW2k5 +Bz3IJ6NWhETGaLycsc9yWXf1HKxb5TQuiwmiTAgKo9vXHQrtKq991279QYtw7sGC +bNJKfGMBFTBBMIFnNcT/ckhPxs8eVOY/cpiVnrZZfim1D7/nqmRQk5n8Si6Kx9se +U9PEwZnOdABeiCcCxxAXqSXw/3kZNgWY9Byf6gdGNWcsClTiu4tHRtk05dnJnyuL +ruGFnQXElq+CofayEsWJ6WXH0R2uhy7tOrI8Twu+XYxcQiMXaz93vePzOuxjY/tH +leg26xNgRmtaM9xJ+mlQkbULK32AiUROq51PvJaXDJMg9se6sZndBCgxrKm7YAL/ +AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBCwUAA4IBAQBmI5HiWNgYwC87MLWsicGquhcBm9letaY+s1HUKgJNBbh1 +jaKoHv+asWySrWVcPp1qszD7/clzuoVL6XdEPNet9L41NiaU3B7IeMgJWAz/nR2b +JdcazzsUkaXFVhdFkyx2mIqSX2yjPgUjehKXuOZ8bbfbWYF8IeKGVc1YHawKPdSE +vFFf5U09f3TmQWAh3o/FNt+cQCi8TkIRnLndvKTZ/PxHPi3o8cm60a+FGqKoT00d +eC6+8RSihgV3y214DP+llakiCuQDVnMCccdU8EZ+AgKaKhxUXIh3CZR/dRvBtzcA +I1YtLa8NGet7Qjnpwsc+NuFb0pJNoiVtKw3EejUA +-----END CERTIFICATE----- +_EOF + +cat >${CLIENT_KEY_FILE} <<_EOF +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAtOVer+O8g8uO4vWtkdlZBoPPKV94gXqVrM4Xere9ZnQCPtvt +p7bOOOZ/5S5NjYvwC2fAlZvd5yvxorq3+a45yTkd2ep8HFLJ23nAH8/WG2VIAxRY +B244Qzr/GBmbgR9ugJMEQRQNq5uSifSnYxh1M8UcE90p9MhAJV9XKIPxRrJ68SoK +8F0zZzpag4UftvVe4NbzfE1yVoEHQWFoA481iap3Z2bykIPWNUun/fVmeYHML931 +qqKTlhrxzwDnxomt/LHMtmdGve1i5YuULq2u7t8ofPLRV0czDfJhwfmncY7n9y5g +a0LRhOEI2xKsrXA9Yvkui3h0TzuvFtCqM02XRQIDAQABAoIBAQCKyI7kkuxGkR2G +ssX/Z6kNfoKpUz242LuMYHFTDTSaLdarM0AZs/5zWSQ2SFfniL0ZgvgV0AdnHCe+ +mVIclLZw0wk77tJZSIrlf3sO7P1u9z1QX4NJ8B3qNpEPhFXxspOswR46b5AtYKYE +gVcKh/EjTs5DzyIpUpkkEwljZBbwDSL0ORN4yu7iRl+UTCTCc4WuLTwpqAxSzdj2 +dnWh9dsbBURvtPCE5pd6isYUsNWZWw7rxywJryzIXxFjgEI2gZVpzu3qZSsgbfzb +2vu8HROiuXiJOI1p43LYVpc2YQJn2BuiKqJdWLC11KAJA7OXMoFw5j2hXKVI+Odc +UFVJhd4BAoGBAMQX4G+iC2yoWHqbeBfTWrh2jKdjsz1THWIbR8AgXnYh1N6WCnC6 +7idFsjnZHND0YK4oYEbs/a78c2Yb7O8xkqQSQKvdDltfeYStd2wlBXvLB3StM86V +mSY+WneVVkZAkyD+crmYSRlyKtmaLs2bB48bTtwJqxxMTUXFvPGImOOVAoGBAOwo +8Eh9DAuD6p9fnu1WyuA+78dwHSEz+Kn5VruZfRgdfyqnRz50Ukpc8/leSJXLRC+h +oVLtPkwPwePpZ+5dTk6nanMe5teLdKffkbG3VW8OwhkOq9+siR9yZDpugCR/GDC9 +o8zolqtABOO1M49tIOhtgcLEJI7EasOiLQH5i/jxAoGBAL92JLA6wvbbxFAqPm7c +8aZMMfc6NIb7ASSKSFtB/5lOXR7b1uPM0L1NosAyyZ0IDuHdEGwP934EhdQ8DfJa +L7i9DaIA24TBys+N452W5CzDxsrYVk4t6PPbS8+Y4z0CzeUYLAIku7L5svb2QR6F +cTL8UdosIoMlyQkIEfyvB8ClAoGAdxzC7NzdWWWEzjOtdioDk41K5T3AA4IyFpEj +VOW6uZIPFNVgUrja1JUDnTAXzi3Cy39rXec5N6Xu9mRAPnKjT3qTb1MTvX2iLhXO +Z2N/3M8FyRukRuHAG7NXqD0Zts6/xb2ww2ZAsElO7gbz5ZB2O6UYAMNraPLaoqfG +qatTFRECgYEAlqX225YTimBQYBsQhzuc624z4gFeSvQAIQUt7TYi76ROuGAeGpOg +wDCJ9nL+GQK3lLfvq4rJ7osj+Nb6dAZ8ReUDfdiQJPnXzR14TlFFuOB2F5dY7g0R +1q68UhDRGxZPpbzniB3XORUn0l7GGyDRG1cwd45NyVhh1Z+4OijFUlU= +-----END RSA PRIVATE KEY----- +_EOF + +cat >${CLIENT_CERT_FILE} <<_EOF +-----BEGIN CERTIFICATE----- +MIIDJDCCAgygAwIBAgIBCDANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu +c2hpZnQtc2lnbmVyQDE1MTgxOTUxNDgwHhcNMTgwMjA5MTY1MjI4WhcNMjAwMjA5 +MTY1MjI5WjBOMTUwHAYDVQQKExVzeXN0ZW06Y2x1c3Rlci1hZG1pbnMwFQYDVQQK +Ew5zeXN0ZW06bWFzdGVyczEVMBMGA1UEAxMMc3lzdGVtOmFkbWluMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtOVer+O8g8uO4vWtkdlZBoPPKV94gXqV +rM4Xere9ZnQCPtvtp7bOOOZ/5S5NjYvwC2fAlZvd5yvxorq3+a45yTkd2ep8HFLJ +23nAH8/WG2VIAxRYB244Qzr/GBmbgR9ugJMEQRQNq5uSifSnYxh1M8UcE90p9MhA +JV9XKIPxRrJ68SoK8F0zZzpag4UftvVe4NbzfE1yVoEHQWFoA481iap3Z2bykIPW +NUun/fVmeYHML931qqKTlhrxzwDnxomt/LHMtmdGve1i5YuULq2u7t8ofPLRV0cz +DfJhwfmncY7n9y5ga0LRhOEI2xKsrXA9Yvkui3h0TzuvFtCqM02XRQIDAQABozUw +MzAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYDVR0TAQH/ +BAIwADANBgkqhkiG9w0BAQsFAAOCAQEAI5ZEs4jVJ8TFkyntHOSnQieK6KRQoQlR +cERjbdd4VNwC935WO2hn2a0L09HB2RuE9RNLVyNfl2xqZJLs60htwMXtQMTWUcZl +b7t3usT24eZ6/pLiNR2TfptAXnOIKC9Eyl+2AtX4J0F1A7UdQ/Lx2v0sxkyi4m6/ +t4mLiXznv3sQDt1gTwqzk96ri4cRRWas+4xrekrgpW1Ihm9EKHpcWPA+1sEVTQts +GsdY90vo8XLmGADA5W65O7fLb5OenYKrY71nAnRRrg2btclWuF1IwBQ9gTW3DV32 +efG5F9prPIasEpbVUhgSHxVXBr/9SAol4b44FvMRhZc3YwbGjFWdHQ== +-----END CERTIFICATE----- +_EOF + +echo "=== Bringing TLS server up ===" + +TESTDATE="2018-03-01" + +# Start OpenSSL TLS server +# +launch_bare_server $$ \ + datefudge "${TESTDATE}" \ + "${OPENSSL}" s_server -cert ${SERVER_CERT_FILE} -key ${SERVER_KEY_FILE} \ + -CAfile ${CA_FILE} -port ${PORT} -Verify 1 -verify_return_error -www +SERVER_PID="${!}" +wait_server "${SERVER_PID}" + +datefudge -s "${TESTDATE}" \ + "${GNUTLS_CLI}" --x509certfile ${CLIENT_CERT_FILE} \ + --x509keyfile ${CLIENT_KEY_FILE} --x509cafile=${CA_FILE} \ + --port="${PORT}" localhost +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +/* This program tests whether the GNUTLS_CERT_* flags + * work as expected. + */ + +static void server_log_func(int level, const char *str) +{ +// fprintf (stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define MAX_BUF 1024 + +static void client(int fd, const char *prio) +{ + int ret; + const char *p; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + gnutls_init(&session, GNUTLS_CLIENT); + + ret = + gnutls_priority_set_direct(session, + prio, &p); + if (ret < 0) { + fail("error in setting priority: %s\n", p); + exit(1); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + if (debug) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + } + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + + +static void server(int fd, const char *prio, unsigned status, int expected) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + gnutls_init(&session, GNUTLS_SERVER); + + assert(gnutls_priority_set_direct(session, + prio, NULL)>=0); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + gnutls_certificate_server_set_request(session, status); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret == expected) { + if (debug) + success + ("server: Handshake finished as expected (%d)\n", ret); + goto finish; + } else { + fail("expected %d, handshake returned %d\n", expected, + ret); + } + + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + finish: + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void start(const char *prio, unsigned status, int expected) +{ + int fd[2]; + int ret; + pid_t child; + int pstatus = 0; + + success("testing: %s (%d,%d)\n", prio, status, expected); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], prio, status, expected); + waitpid(-1, &pstatus, 0); + check_wait_status_for_sig(pstatus); + } else { + close(fd[0]); + client(fd[1], prio); + exit(0); + } +} + +static void ch_handler(int sig) +{ + return; +} + + +void doit(void) +{ + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + start("NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+RSA", GNUTLS_CERT_IGNORE, 0); + start("NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+RSA", GNUTLS_CERT_REQUEST, 0); + start("NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+RSA", GNUTLS_CERT_REQUIRE, GNUTLS_E_NO_CERTIFICATE_FOUND); + + start("NORMAL:-VERS-ALL:+VERS-TLS1.2", GNUTLS_CERT_IGNORE, 0); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2", GNUTLS_CERT_REQUEST, 0); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2", GNUTLS_CERT_REQUIRE, GNUTLS_E_NO_CERTIFICATE_FOUND); + + start("NORMAL:-VERS-ALL:+VERS-TLS1.3", GNUTLS_CERT_IGNORE, 0); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3", GNUTLS_CERT_REQUEST, 0); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3", GNUTLS_CERT_REQUIRE, GNUTLS_E_CERTIFICATE_REQUIRED); + + start("NORMAL", GNUTLS_CERT_IGNORE, 0); + start("NORMAL", GNUTLS_CERT_REQUEST, 0); + start("NORMAL", GNUTLS_CERT_REQUIRE, GNUTLS_E_CERTIFICATE_REQUIRED); +} + +#endif /* _WIN32 */ diff --git a/tests/cert-tests/Makefile.am b/tests/cert-tests/Makefile.am index e155fef509..17886ef7c5 100644 --- a/tests/cert-tests/Makefile.am +++ b/tests/cert-tests/Makefile.am @@ -15,9 +15,8 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# You should have received a copy of the GNU General Public License -# along with this file; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see EXTRA_DIST = data/ca-no-pathlen.pem data/no-ca-or-pathlen.pem data/aki-cert.pem \ data/template-test.key data/template-test.pem templates/template-test.tmpl \ @@ -25,7 +24,7 @@ EXTRA_DIST = data/ca-no-pathlen.pem data/no-ca-or-pathlen.pem data/aki-cert.pem data/bmpstring.pem data/template-utf8.pem templates/template-utf8.tmpl \ templates/template-dn.tmpl data/template-dn.pem data/complex-cert.pem \ data/template-overflow.pem templates/template-overflow.tmpl data/template-overflow2.pem \ - templates/template-overflow2.tmpl data/template-crq.pem \ + templates/template-overflow2.tmpl data/template-crq.pem data/cert-ecc256-full.pem \ templates/template-date.tmpl data/template-date.pem templates/template-dn-err.tmpl \ templates/template-nc.tmpl data/template-nc.pem data/xmpp-othername.pem \ suppressions.valgrind data/csr-invalid.der data/invalid-sig2.pem data/invalid-sig3.pem \ @@ -36,15 +35,17 @@ EXTRA_DIST = data/ca-no-pathlen.pem data/no-ca-or-pathlen.pem data/aki-cert.pem templates/template-generalized.tmpl data/privkey1.pem data/privkey2.pem data/privkey3.pem \ data/name-constraints-ip.pem data/cert-invalid-utf8.der data/very-long-dn.pem \ data/provable3072.pem data/provable2048.pem data/provable-dsa2048.pem \ - data/provable-dsa2048-fips.pem templates/template-crq.tmpl \ - templates/template-unique.tmpl data/template-unique.pem \ + data/provable-dsa2048-fips.pem templates/template-crq.tmpl data/invalid-sig5.pem \ + templates/template-unique.tmpl data/template-unique.pem data/invalid-sig4.pem \ templates/template-othername.tmpl data/template-othername.pem \ templates/template-othername-xmpp.tmpl data/template-othername-xmpp.pem \ templates/template-krb5name.tmpl data/crl-demo1.pem data/crl-demo2.pem data/crl-demo3.pem \ data/template-krb5name.pem data/template-krb5name-full.pem data/template-test-ecc.key \ data/template-rsa-sha3-256.pem data/template-rsa-sha3-512.pem data/template-rsa-sha3-224.pem \ data/template-rsa-sha3-384.pem data/long-oids.pem \ - data/name-constraints-ip2.pem data/chain-md5.pem data/gost-cert.pem \ + data/name-constraints-ip2.pem data/chain-md5.pem data/pubkey-ecc256.pem \ + templates/template-dates-after2038.tmpl data/template-dates-after2038.pem \ + data/gost-cert.pem data/gost-cert-nogost.pem data/gost94-cert.pem \ templates/template-tlsfeature.tmpl data/userid.pem data/cert-with-crl.p12 \ data/template-tlsfeature.pem data/template-tlsfeature.csr \ templates/template-tlsfeature-crq.tmpl templates/arb-extensions.tmpl data/arb-extensions.pem \ @@ -62,11 +63,10 @@ EXTRA_DIST = data/ca-no-pathlen.pem data/no-ca-or-pathlen.pem data/aki-cert.pem data/code-signing-ca.pem data/code-signing-cert.pem data/multi-value-dn.pem \ data/pkcs7-cat-ca.pem data/pkcs7-cat.p7 data/openssl.p7b data/openssl.p7b.out \ data/openssl-keyid.p7b data/openssl-keyid.p7b.out data/openssl.p12 \ - data/openpgp-invalid1.pub data/openpgp-invalid2.pub data/openpgp-invalid3.pub \ data/x509-v1-with-sid.pem data/x509-v1-with-iid.pem data/x509-v3-with-fractional-time.pem \ - data/openpgp-invalid5.pub data/openpgp-invalid6.pub templates/template-long-dns.tmpl \ - data/long-dns.pem data/template-long-dns-crq.pem data/openpgp-invalid7.pub \ - data/openpgp-invalid8.pub data/chain-with-critical-on-root.pem \ + templates/template-long-dns.tmpl templates/template-long-serial.tmpl \ + data/key-rsa-pss-raw.pem data/key-rsa-pss.pem data/cve-2019-3829.pem \ + data/long-dns.pem data/template-long-dns-crq.pem data/chain-with-critical-on-root.pem \ data/chain-with-critical-on-intermediate.pem data/chain-with-critical-on-endcert.pem \ templates/crit-extensions.tmpl data/crit-extensions.pem data/x509-with-zero-version.pem \ data/key-corpus-rc2-1.p12 data/key-corpus-rc2-2.p12 data/key-corpus-rc2-3.p12 \ @@ -75,42 +75,75 @@ EXTRA_DIST = data/ca-no-pathlen.pem data/no-ca-or-pathlen.pem data/aki-cert.pem data/pkcs7.smime data/invalid-date-hour.der data/invalid-date-mins.der \ data/invalid-date-secs.der data/invalid-date-month.der data/invalid-date-day.der \ data/mem-leak.p12 data/alt-chain-new-ca.pem data/alt-chain-old-ca.pem \ - data/alt-chain.pem data/pkcs7-chain.pem data/pkcs7-chain-root.pem \ - data/pkcs7-chain-endcert-key.pem + data/alt-chain.pem data/pkcs7-chain.pem data/pkcs7-chain-root.pem data/chain-eddsa.pem \ + data/pkcs7-chain-endcert-key.pem data/cert-rsa-pss.pem data/openssl-invalid-time-format.pem \ + data/cert-eddsa.pem data/pubkey-eddsa.pem data/pkcs7-eddsa-sig.p7s \ + data/key-ca.pem data/key-user.pem data/template-sgenerate.pem \ + data/ca-gnutls-keyid.pem data/ca-no-keyid.pem data/ca-weird-keyid.pem \ + data/key-ca-1234.p8 data/key-ca-empty.p8 data/key-ca-null.p8 \ + data/openssl-key-ecc.p8 data/key-ecc.p8 data/key-ecc.pem suppressions.valgrind \ + data/encpkcs8.pem data/unencpkcs8.pem data/enc2pkcs8.pem data/dup-exts.pem \ + data/openssl-3des.p8 data/openssl-3des.p8.txt data/openssl-aes128.p8 \ + data/openssl-aes128.p8.txt data/openssl-aes256.p8 data/openssl-aes256.p8.txt \ + data/cert.dsa.1024.pem data/cert.dsa.2048.pem data/cert.dsa.3072.pem \ + data/dsa.1024.pem data/dsa.2048.pem data/dsa.3072.pem data/dsa-pubkey-1018.pem \ + data/bad-key.pem data/p8key-illegal.pem data/key-illegal.pem data/pkcs8-pbes2-sha256.pem \ + data/pkcs8-pbes1-des-md5.pem data/pkcs8-invalid8.der data/key-invalid1.der \ + data/key-invalid4.der data/key-invalid5.der data/key-invalid6.der \ + data data/pkcs8-invalid9.der data/key-invalid2.der data/pkcs8-invalid10.der \ + data/key-invalid3.der data/pkcs8-eddsa.pem data/pkcs8-eddsa.pem.txt \ + data/rfc4490.p7b data/rfc4490.p7b.out data/gost01.p12 data/gost12.p12 data/gost12-2.p12 \ + data/ca-crl-invalid.crl data/ca-crl-invalid.pem data/ca-crl-valid.pem data/ca-crl-valid.crl \ + data/rfc4134-ca-rsa.pem data/rfc4134-4.5.p7b templates/template-no-ca.tmpl \ + data/key-gost01.p8 data/key-gost01-2.p8 data/key-gost01-2-enc.p8 data/crq-cert-no-ca.pem \ + data/key-gost12-256.p8 data/key-gost12-256-2.p8 data/key-gost12-256-2-enc.p8 \ + data/key-gost12-512.p8 data/grfc.crt data/gost-cert-ca.pem data/gost-cert-new.pem \ + data/cert-with-non-digits-time-ca.pem data/cert-with-non-digits-time.pem \ + data/chain-512-leaf.pem data/chain-512-subca.pem data/chain-512-ca.pem \ + templates/template-no-ca-honor.tmpl templates/template-no-ca-explicit.tmpl \ + data/crq-cert-no-ca-explicit.pem data/crq-cert-no-ca-honor.pem data/commonName.cer -dist_check_SCRIPTS = pathlen aki certtool invalid-sig email \ +dist_check_SCRIPTS = pathlen aki invalid-sig email \ pkcs7 pkcs7-broken-sigs privkey-import name-constraints certtool-long-cn crl provable-privkey \ provable-dh userid sha2-test sha2-dsa-test provable-privkey-dsa2048 \ provable-privkey-rsa2048 provable-privkey-gen-default pkcs7-constraints \ pkcs7-constraints2 certtool-long-oids pkcs7-cat cert-sanity cert-critical \ pkcs12 certtool-crl-decoding pkcs12-encode pkcs12-corner-cases inhibit-anypolicy \ - smime cert-time alt-chain pkcs7-list-sign + smime cert-time alt-chain pkcs7-list-sign pkcs7-eddsa certtool-ecdsa \ + key-id pkcs8 pkcs8-decode ecdsa illegal-rsa pkcs8-invalid key-invalid \ + pkcs8-eddsa certtool-subca certtool-verify-profiles x509-duplicate-ext -if WANT_TEST_SUITE -dist_check_SCRIPTS += provable-dh-default -endif +dist_check_SCRIPTS += key-id ecdsa pkcs8-invalid key-invalid pkcs8-decode pkcs8 pkcs8-eddsa \ + certtool-utf8 crq -if ENABLE_OPENPGP -# The selftest is disabled until we can make it work under Wine and -# under Debian buildds (problem with 127.0.0.2?). -dist_check_SCRIPTS += openpgp-selfsigs -dist_check_SCRIPTS += openpgp-cert-parser -if !WINDOWS -dist_check_SCRIPTS += openpgp-certs -endif +if STRICT_DER_TIME +dist_check_SCRIPTS += cert-non-digits-time reject-invalid-time +else +dist_check_SCRIPTS += tolerate-invalid-time endif -dist_check_SCRIPTS += certtool-utf8 crq +if WANT_TEST_SUITE +dist_check_SCRIPTS += provable-dh-default +endif if !WINDOWS dist_check_SCRIPTS += template-test pem-decoding othername-test krb5-test sha3-test md5-test \ - tlsfeature-test template-exts-test pkcs1-pad pkcs12-utf8 + tlsfeature-test template-exts-test pkcs1-pad pkcs12-utf8 rsa-pss-pad dsa certtool endif if ENABLE_DANE dist_check_SCRIPTS += dane endif +if ENABLE_GOST +dist_check_SCRIPTS += gost +if !WINDOWS +dist_check_SCRIPTS += pkcs12-gost pkcs8-gost +endif +endif + +dist_check_SCRIPTS += certtool-rsa-pss certtool-eddsa + TESTS = $(dist_check_SCRIPTS) # Set detect_leaks=0 to ASAN. It seems it is detecting many leaks in tools @@ -120,7 +153,10 @@ TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) \ VALGRIND="$(VALGRIND)" \ LIBTOOL="$(LIBTOOL)" \ top_builddir="$(top_builddir)" \ + ac_cv_sizeof_time_t="$(ac_cv_sizeof_time_t)" \ ASAN_OPTIONS="detect_leaks=0:exitcode=6" \ + GNUTLS_TEST_SUITE_RUN=1 \ + GNUTLS_SYSTEM_PRIORITY_FILE=$(abs_top_srcdir)/tests/system.prio \ srcdir="$(srcdir)" if ENABLE_FIPS140 @@ -130,3 +166,16 @@ endif if WINDOWS TESTS_ENVIRONMENT += WINDOWS=1 endif + +if ENABLE_GOST +TESTS_ENVIRONMENT += ENABLE_GOST=1 +else +TESTS_ENVIRONMENT += ENABLE_GOST=0 +endif + +if DISABLE_BASH_TESTS +TESTS_ENVIRONMENT += DISABLE_BASH_TESTS=1 +endif + +distclean-local: + rm -rf tmp-* *.tmp diff --git a/tests/cert-tests/cert-non-digits-time b/tests/cert-tests/cert-non-digits-time new file mode 100755 index 0000000000..28880b87ac --- /dev/null +++ b/tests/cert-tests/cert-non-digits-time @@ -0,0 +1,47 @@ +#!/bin/sh + +# Copyright (C) 2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#set -e + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +DIFF="${DIFF:-diff -b -B}" + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +check_for_datefudge + +# Check whether certificates with non-digits time fields are accepted +datefudge -s "2019-12-19" \ +${VALGRIND}"${CERTTOOL}" --verify --load-ca-certificate "${srcdir}/data/cert-with-non-digits-time-ca.pem" --infile "${srcdir}/data/cert-with-non-digits-time.pem" +rc=$? + +if test "${rc}" = "0";then + echo "certificate whose notbefore field is a non-digits was accepted" + exit 1 +fi + +exit 0 diff --git a/tests/cert-tests/certtool b/tests/cert-tests/certtool index ad66d8ffe7..3494aaacbe 100755 --- a/tests/cert-tests/certtool +++ b/tests/cert-tests/certtool @@ -1,6 +1,7 @@ #!/bin/sh -# Copyright (C) 2014 Nikos Mavrogiannopoulos +# Copyright (C) 2014-2018 Nikos Mavrogiannopoulos +# Copyright (C) 2018 Red Hat, Inc. # # This file is part of GnuTLS. # @@ -14,15 +15,21 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see #set -e srcdir="${srcdir:-.}" CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" DIFF="${DIFF:-diff -b -B}" +TMPFILE1=certtool-file1.$$.tmp +TMPFILE2=certtool-file2.$$.tmp +PASS="1234" + +if test -n "$DISABLE_BASH_TESTS"; then + exit 77 +fi if ! test -x "${CERTTOOL}"; then exit 77 @@ -32,6 +39,40 @@ if ! test -z "${VALGRIND}"; then VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" fi +SETSID=$(which setsid) +if test -n "${SETSID}";then + ${VALGRIND} "${CERTTOOL}" --generate-privkey --rsa --outfile ${TMPFILE1} --pkcs8 --password ${PASS} + if test $? != 0;then + echo "private key generation failed" + exit 1 + fi + + grep 'modulus:' ${TMPFILE1} + if test $? = 0;then + cat ${TMPFILE1} + echo "PKCS#8 file contains text modulus" + exit 1 + fi + + #check whether password is being honoured + #some CI runners need GNUTLS_PIN (GNUTLS_PIN=${PASS}) + ${SETSID} "${CERTTOOL}" --generate-self-signed --load-privkey ${TMPFILE1} --template ${srcdir}/templates/template-test.tmpl --ask-pass >${TMPFILE2} 2>&1 </dev/null 2>&1 + if test $? != 0;then + cat ${TMPFILE2} + echo "No password was asked" + exit 1 + fi +fi + #check whether "funny" spaces can be interpreted id=`${VALGRIND} "${CERTTOOL}" --key-id --infile "${srcdir}/data/funny-spacing.pem" --hash sha1| tr -d '\r'` rc=$? @@ -65,6 +106,14 @@ if test "${id}" != "118e72e3655150c895ecbd19b3634179fb4a87c7a25abefcb11f5d66661d exit 1 fi +id=`"${CERTTOOL}" --pubkey-info <"${srcdir}/data/funny-spacing.pem"|"${CERTTOOL}" --key-id --hash sha512| tr -d '\r'` +rc=$? + +if test "${id}" != "5e81ba533b1e7b88b3b0834a392c1cd63f8ccbe45f39edf4cb4b6a3e7700b333cfa386c54b1c5704a2b82a20dc417b347bb8f961c339134a91158a134ca6c478"; then + echo "Key-ID4 doesn't match the expected: ${id}" + exit 1 +fi + #fingerprint id=`${VALGRIND} "${CERTTOOL}" --fingerprint --infile "${srcdir}/data/funny-spacing.pem"| tr -d '\r'` rc=$? @@ -82,6 +131,42 @@ if test "${id}" != "fc5b45b20c489393a457f177572920ac40bacba9d25cea51200822271eaf exit 1 fi +id=`${VALGRIND} "${CERTTOOL}" --fingerprint --hash sha512 --infile "${srcdir}/data/funny-spacing.pem"| tr -d '\r'` +rc=$? + +if test "${id}" != "c4880390506a849cd2d8289fb8aea8c189e635aff1054faba58658a0f107472b725672c10d2f7f4ca360528b9433db278f544846e5613f9cd4cb4aa2f56a7894"; then + echo "Fingerprint doesn't match the expected: 5" + exit 1 +fi + +# Test whether certtool --outder doesn't output the informational text data + +${VALGRIND} "${CERTTOOL}" -i --infile "${srcdir}/data/funny-spacing.pem" --outder --outfile ${TMPFILE1} +if test $? != 0;then + echo "cert output to DER failed" + exit 1 +fi + +grep 'Version:' ${TMPFILE1} +if test $? = 0;then + echo "found text info in DER certificate" + exit 1 +fi + +${VALGRIND} "${CERTTOOL}" -i --infile "${srcdir}/data/commonName.cer" | grep -v "Not After:" > ${TMPFILE1} +if test $? != 0;then + echo "commonName cert output failed" + exit 1 +fi + +${DIFF} "${srcdir}/data/commonName.cer" ${TMPFILE1} +if test $? != 0;then + exit 1 +fi + + +rm -f ${TMPFILE1} ${TMPFILE2} + export TZ="UTC" . ${srcdir}/../scripts/common.sh @@ -97,5 +182,4 @@ if test "${rc}" != "0"; then exit 1 fi - exit 0 diff --git a/tests/cert-tests/certtool-crl-decoding b/tests/cert-tests/certtool-crl-decoding index 36fb1ea46d..dadc92cbf7 100755 --- a/tests/cert-tests/certtool-crl-decoding +++ b/tests/cert-tests/certtool-crl-decoding @@ -24,7 +24,6 @@ srcdir="${srcdir:-.}" CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" -DIFF="${DIFF:-diff -b -B}" OUTFILE="crl.$$.pem" if ! test -x "${CERTTOOL}"; then @@ -35,21 +34,21 @@ if ! test -z "${VALGRIND}"; then VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=3" fi +. "${srcdir}/../scripts/common.sh" + # crl-demo1.pem: version 2 CRL with a single extension # crl-demo2.pem: version 2 CRL with two extensions (one critical) # crl-demo3.pem: version 1 CRL with many revoked certificates for i in "crl-demo1.pem" "crl-demo2.pem" "crl-demo3.pem";do ${VALGRIND} "${CERTTOOL}" --crl-info --infile "${srcdir}/data/$i" >$OUTFILE -rc=$? - -if test "${rc}" != 0;then +if test $? != 0; then echo "Could not read CRL $i" exit 1 fi -$DIFF -I 'warning:' ${OUTFILE} "${srcdir}/data/$i" -if test $? != 0;then +check_if_equal ${OUTFILE} "${srcdir}/data/$i" "warning:" +if test $? != 0; then echo "Error in parsing cert with long OIDs" exit 1 fi diff --git a/tests/cert-tests/certtool-ecdsa b/tests/cert-tests/certtool-ecdsa new file mode 100755 index 0000000000..9811777b1f --- /dev/null +++ b/tests/cert-tests/certtool-ecdsa @@ -0,0 +1,89 @@ +#!/bin/sh + +# Copyright (C) 2014-2018 Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#set -e + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +KEYFILE=ecdsa-privkey.$$.tmp +TMPFILE=ecdsa.$$.tmp + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +if test "${GNUTLS_FORCE_FIPS_MODE}" = 1;then + exit 77 +fi + +. "${srcdir}/../scripts/common.sh" + +${VALGRIND} "${CERTTOOL}" -i --infile "${srcdir}/data/cert-ecc256-full.pem" --outfile "${TMPFILE}" +rc=$? + +if test "${rc}" != "0"; then + echo "There was an issue parsing the certificate" + exit 1 +fi + +check_if_equal ${TMPFILE} "${srcdir}/data/cert-ecc256-full.pem" "Not After:" +if test $? != 0;then + echo "Error in parsing ECDSA cert" + exit 1 +fi + +${VALGRIND} "${CERTTOOL}" --pubkey-info --infile "${srcdir}/data/pubkey-ecc256.pem" --outfile "${TMPFILE}" +rc=$? +if test "${rc}" != "0"; then + echo "Could not read an ECDSA public key" + exit 1 +fi + +check_if_equal ${TMPFILE} "${srcdir}/data/pubkey-ecc256.pem" +if test $? != 0;then + echo "Error in parsing ECDSA public key" + exit 1 +fi + + +# Create an ECDSA +${VALGRIND} "${CERTTOOL}" --generate-privkey --pkcs8 --password '' \ + --ecdsa --outfile "$KEYFILE" +rc=$? + +if test "${rc}" != "0"; then + echo "Could not generate an ECDSA key" + exit 1 +fi + +${VALGRIND} "${CERTTOOL}" -k --password '' --infile "$KEYFILE" >/dev/null +rc=$? +if test "${rc}" != "0"; then + echo "Could not read generated an ECDSA key" + exit 1 +fi + +rm -f "${TMPFILE}" "${KEYFILE}" + +exit 0 diff --git a/tests/cert-tests/certtool-eddsa b/tests/cert-tests/certtool-eddsa new file mode 100755 index 0000000000..c097fbf6c6 --- /dev/null +++ b/tests/cert-tests/certtool-eddsa @@ -0,0 +1,139 @@ +#!/bin/sh + +# Copyright (C) 2014 Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#set -e + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +KEYFILE=eddsa-privkey.$$.tmp +TMPFILE=eddsa.$$.tmp +TMPFILE2=eddsa2.$$.tmp + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +if test "${GNUTLS_FORCE_FIPS_MODE}" = 1;then + exit 77 +fi + +. "${srcdir}/../scripts/common.sh" + +# Test certificate in draft-ietf-curdle-pkix-04 +${VALGRIND} "${CERTTOOL}" -i --infile "${srcdir}/data/cert-eddsa.pem" --outfile "${TMPFILE}" + +if test $? != 0; then + echo "There was an issue parsing the certificate" + exit 1 +fi + +check_if_equal ${TMPFILE} "${srcdir}/data/cert-eddsa.pem" "Not After:" +if test $? != 0;then + echo "Error in parsing EdDSA cert" + exit 1 +fi + +# Test public key in draft-ietf-curdle-pkix-04 +${VALGRIND} "${CERTTOOL}" --pubkey-info --infile "${srcdir}/data/pubkey-eddsa.pem" --outfile "${TMPFILE}" +if test $? != 0; then + echo "Could not read an EdDSA public key" + exit 1 +fi + +check_if_equal ${TMPFILE} "${srcdir}/data/pubkey-eddsa.pem" +if test $? != 0;then + echo "Error in parsing EdDSA public key" + exit 1 +fi + + +# Create an RSA-PSS private key, restricted to the use with RSA-PSS +${VALGRIND} "${CERTTOOL}" --generate-privkey --pkcs8 --password '' \ + --key-type eddsa --outfile "$KEYFILE" + +if test $? != 0; then + echo "Could not generate an EdDSA key" + exit 1 +fi + +${VALGRIND} "${CERTTOOL}" -k --password '' --infile "$KEYFILE" +if test $? != 0; then + echo "Could not read generated an EdDSA key" + exit 1 +fi + + +# Create an EdDSA certificate from an EdDSA private key +${VALGRIND} "${CERTTOOL}" --generate-self-signed \ + --pkcs8 --load-privkey "$KEYFILE" --password '' \ + --template "${srcdir}/templates/template-test.tmpl" \ + --outfile "${TMPFILE}" + +if test $? != 0; then + echo "Could not generate an EdDSA certificate from an EdDSA key" + exit 1 +fi + +${VALGRIND} "${CERTTOOL}" --verify --load-ca-certificate "${TMPFILE}" --infile "${TMPFILE}" +if test $? != 0; then + echo "There was an issue verifying the generated certificate (1)" + exit 1 +fi + +# Create an EdDSA certificate from an RSA key +${VALGRIND} "${CERTTOOL}" --generate-certificate --key-type eddsa \ + --load-privkey ${KEYFILE} \ + --load-ca-privkey "${srcdir}/../../doc/credentials/x509/ca-key.pem" \ + --load-ca-certificate "${srcdir}/../../doc/credentials/x509/ca.pem" \ + --template "${srcdir}/templates/template-test.tmpl" \ + --outfile "${TMPFILE}" 2>/dev/null + +if test $? != 0; then + echo "Could not generate an EdDSA certificate $i" + exit 1 +fi + +${VALGRIND} "${CERTTOOL}" --verify --load-ca-certificate "${srcdir}/../../doc/credentials/x509/ca.pem" --infile "${TMPFILE}" +if test $? != 0; then + echo "There was an issue verifying the generated certificate (2)" + exit 1 +fi + +rm -f "${TMPFILE}" "${TMPFILE2}" +rm -f "${KEYFILE}" + + +check_for_datefudge + +# Test certificate chain using Ed25519 +datefudge "2017-7-6" \ +${VALGRIND} "${CERTTOOL}" --verify-chain --infile ${srcdir}/data/chain-eddsa.pem + +if test $? != 0; then + echo "There was an issue verifying the Ed25519 chain" + exit 1 +fi + + +exit 0 diff --git a/tests/cert-tests/certtool-long-oids b/tests/cert-tests/certtool-long-oids index c06cf73a31..17e1a40d53 100755 --- a/tests/cert-tests/certtool-long-oids +++ b/tests/cert-tests/certtool-long-oids @@ -25,8 +25,8 @@ srcdir="${srcdir:-.}" CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" DIFF="${DIFF:-diff -b -B}" -OUTFILE="out.$$.pem" -TMPFILE1="out1.$$.pem" +OUTFILE="long-oids.$$.pem.tmp" +TMPFILE1="long-oids1.$$.pem.tmp" if ! test -x "${CERTTOOL}"; then exit 77 diff --git a/tests/cert-tests/certtool-rsa-pss b/tests/cert-tests/certtool-rsa-pss new file mode 100755 index 0000000000..aed79ff2e2 --- /dev/null +++ b/tests/cert-tests/certtool-rsa-pss @@ -0,0 +1,226 @@ +#!/bin/sh + +# Copyright (C) 2014 Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#set -e + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +DIFF="${DIFF:-diff -b -B}" +OUTFILE=cert-pss-privkey.$$.tmp +TMPFILE=cert-pss.$$.tmp +TMPFILE2=cert2-pss.$$.tmp + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +# Create an RSA-PSS private key, restricted to the use with RSA-PSS +${VALGRIND} "${CERTTOOL}" --generate-privkey \ + --key-type rsa-pss --outfile "$OUTFILE" +rc=$? + +if test "${rc}" != "0"; then + echo "Could not generate an RSA-PSS key" + exit 1 +fi + +# check whether description is present +grep 'modulus:' ${OUTFILE} +if test $? != 0;then + cat ${OUTFILE} + echo "PKCS#8 file does not contain modulus text" + exit 1 +fi + +for i in sha256 sha384 sha512;do +if test "${GNUTLS_FORCE_FIPS_MODE}" = 1 && test "$i" != sha384;then + continue +fi + +# Create an RSA-PSS private key, restricted to the use with RSA-PSS +${VALGRIND} "${CERTTOOL}" --generate-privkey --pkcs8 --password '' \ + --key-type rsa-pss --hash $i --outfile "$OUTFILE" +rc=$? + +if test "${rc}" != "0"; then + echo "Could not generate an RSA-PSS key ($i)" + exit 1 +fi + +${VALGRIND} "${CERTTOOL}" -k --password '' --infile "$OUTFILE" >/dev/null +rc=$? +if test "${rc}" != "0"; then + echo "Could not read generated an RSA-PSS key ($i)" + exit 1 +fi + +# Create an RSA-PSS certificate from an RSA-PSS private key +${VALGRIND} "${CERTTOOL}" --generate-self-signed \ + --pkcs8 --load-privkey "$OUTFILE" --password '' \ + --template "${srcdir}/templates/template-test.tmpl" \ + --outfile "${TMPFILE}" --hash $i +rc=$? + +if test "${rc}" != "0"; then + echo "Could not generate an RSA-PSS certificate from an RSA-PSS key ($i)" + exit 1 +fi + +rm -f "${TMPFILE}" + +# Create an RSA-PSS certificate from an RSA-PSS private key, with +# mismatched parameters +for j in sha256 sha384 sha512;do +${VALGRIND} "${CERTTOOL}" --generate-self-signed \ + --pkcs8 --load-privkey "$OUTFILE" --password '' \ + --template "${srcdir}/templates/template-test.tmpl" \ + --outfile "${TMPFILE}" --hash $j +rc=$? + +if test "$j" != "$j" && "${rc}" = "0"; then + echo "Unexpectedly succeeded to generate an RSA-PSS certificate ($j != $i)" + exit 1 +fi +done +rm -f "${TMPFILE}" + +# Create an RSA-PSS certificate from an RSA key +${VALGRIND} "${CERTTOOL}" --generate-certificate --key-type rsa-pss \ + --load-privkey "${srcdir}/../../doc/credentials/x509/key-rsa.pem" \ + --load-ca-privkey "${srcdir}/../../doc/credentials/x509/ca-key.pem" \ + --load-ca-certificate "${srcdir}/../../doc/credentials/x509/ca.pem" \ + --template "${srcdir}/templates/template-test.tmpl" \ + --outfile "${TMPFILE}" --hash $i +rc=$? + +if test "${rc}" != "0"; then + echo "Could not generate an RSA-PSS certificate $i" + exit 1 +fi + +${CERTTOOL} -i --infile ${TMPFILE}|grep -i "Subject Public Key Algorithm: RSA-PSS" +if test $? != 0;then + echo "Generated certificate is not RSA-PSS" + cat ${TMPFILE} + exit 1 +fi + +rm -f "${TMPFILE}" + +# Create an RSA certificate from an RSA key, with wrong key-type, should fail +${VALGRIND} "${CERTTOOL}" --generate-certificate --key-type ecdsa \ + --load-privkey "${srcdir}/../../doc/credentials/x509/key-rsa.pem" \ + --load-ca-privkey "${srcdir}/../../doc/credentials/x509/ca-key.pem" \ + --load-ca-certificate "${srcdir}/../../doc/credentials/x509/ca.pem" \ + --template "${srcdir}/templates/template-test.tmpl" \ + --outfile "${TMPFILE}" +rc=$? + +if test "${rc}" = "0"; then + echo "Succeeded with wrong key type" + exit 1 +fi + +# Create an RSA certificate from an RSA key, and sign it with RSA-PSS +${VALGRIND} "${CERTTOOL}" --generate-certificate --rsa --sign-params rsa-pss \ + --load-privkey "${srcdir}/../../doc/credentials/x509/key-rsa.pem" \ + --load-ca-privkey "${srcdir}/../../doc/credentials/x509/ca-key.pem" \ + --load-ca-certificate "${srcdir}/../../doc/credentials/x509/ca.pem" \ + --template "${srcdir}/templates/template-test.tmpl" \ + --outfile "${TMPFILE}" --hash $i +rc=$? + +if test "${rc}" != "0"; then + echo "Could not generate an RSA-PSS certificate" + exit 1 +fi + +${CERTTOOL} -i --infile ${TMPFILE}|tr -d '\r' > ${TMPFILE2} +grep -i 'Subject Public Key Algorithm: RSA$' ${TMPFILE2} >/dev/null +if test $? != 0;then + echo "Generated certificate is not RSA" + cat ${TMPFILE} + exit 1 +fi + +grep -i "Signature Algorithm: RSA-PSS" ${TMPFILE2} +if test $? != 0;then + echo "Generated certificate is not signed with RSA-PSS" + cat ${TMPFILE} + exit 1 +fi + +grep -i "Signature Algorithm: RSA-PSS-${i}" ${TMPFILE2} +if test $? != 0;then + echo "Generated certificate is not signed with RSA-PSS-${i}" + cat ${TMPFILE} + exit 1 +fi + +rm -f "${TMPFILE}" +rm -f "${TMPFILE2}" + +done + +# Convert an RSA-PSS key to an RSA key +# + +${VALGRIND} "${CERTTOOL}" --to-rsa --infile "${srcdir}/data/key-rsa-pss.pem" --outfile ${TMPFILE} +rc=$? + +if test "${rc}" != "0"; then + echo "Could not convert an RSA-PSS certificate" + exit 1 +fi + +${DIFF} "${srcdir}/data/key-rsa-pss-raw.pem" ${TMPFILE} +rc=$? + +if test "${rc}" != "0"; then + echo "RSA-PSS decoding failed" + exit ${rc} +fi + +echo "RSA-PSS to RSA conversion was successful" + +rm -f "${TMPFILE}" + +export TZ="UTC" + +. ${srcdir}/../scripts/common.sh + +check_for_datefudge + +datefudge "2012-11-22" \ +${VALGRIND} "${CERTTOOL}" --verify --load-ca-certificate "${srcdir}/data/cert-rsa-pss.pem" --infile "${srcdir}/data/cert-rsa-pss.pem" +rc=$? + +if test "${rc}" != "0"; then + echo "There was an issue verifying the certificate" + exit 1 +fi + +rm -f "${TMPFILE}" + +exit 0 diff --git a/tests/cert-tests/certtool-subca b/tests/cert-tests/certtool-subca new file mode 100755 index 0000000000..6bd5d94def --- /dev/null +++ b/tests/cert-tests/certtool-subca @@ -0,0 +1,108 @@ +#!/bin/sh + +# Copyright (C) 2019 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#set -e + +# This is a reproducer for #767 + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +DIFF="${DIFF:-diff}" + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + +ROOT_CA_TMPL=root.ca.$$.tmp +SUB_CA_TMPL=sub.ca.$$.tmp +ROOT_PRIVKEY=root.key.$$.tmp +ROOT_CA_CERT=root.ca.cert.$$.tmp +CSR_FILE=csr.$$.tmp +OUTFILE=out3.$$.tmp + +. ${srcdir}/../scripts/common.sh + +cat >${ROOT_CA_TMPL} <<_EOF_ +organization = "Example" +cn = "Root CA" +expiration_days = 700 +ca +cert_signing_key +crl_signing_key +_EOF_ + +cat >${SUB_CA_TMPL} <<_EOF_ +organization = "Example" +cn = "Example CA" +expiration_days = 350 +crl_dist_points = "http://crl.example.com/Root_CA.crl" +ca +signing_key +cert_signing_key +crl_signing_key +path_len = 0 +_EOF_ + +${CERTTOOL} --generate-privkey --key-type ecdsa --outfile ${ROOT_PRIVKEY} >/dev/null +if test $? != 0;then + echo "Error generating privkey" + exit 1 +fi + +${CERTTOOL} --generate-self-signed --load-privkey ${ROOT_PRIVKEY} --template ${ROOT_CA_TMPL} > ${ROOT_CA_CERT} 2>&1 +if test $? != 0;then + echo "Error generating root CA" + exit 1 +fi + +grep "Digital signature" ${ROOT_CA_CERT} >/dev/null +if test $? = 0;then + echo "root CA: found the digital signature flag although not specified!" + exit 1 +fi + +${CERTTOOL} --generate-request --load-privkey ${ROOT_PRIVKEY} --template ${SUB_CA_TMPL} --outfile ${CSR_FILE} +if test $? != 0;then + cat ${SUB_CA_TMPL} + echo "Error generating csr" + exit 1 +fi + +${CERTTOOL} --generate-certificate --load-ca-privkey ${ROOT_PRIVKEY} --load-ca-certificate ${ROOT_CA_CERT} --load-request ${CSR_FILE} --template ${SUB_CA_TMPL} >${OUTFILE} 2>&1 +if test $? != 0;then + echo "Error generating sub CA" + exit 1 +fi + +grep "Digital signature" ${OUTFILE} >/dev/null +if test $? != 0;then + echo "Cannot find the digital signature flag!" + exit 1 +fi + +rm -f "${ROOT_PRIVKEY}" "${ROOT_CA_CERT}" "${CSR_FILE}" "${ROOT_CA_TMPL}" "${SUB_CA_TMPL}" "${OUTFILE}" + +exit 0 diff --git a/tests/cert-tests/certtool-verify-profiles b/tests/cert-tests/certtool-verify-profiles new file mode 100755 index 0000000000..a7ebd711ea --- /dev/null +++ b/tests/cert-tests/certtool-verify-profiles @@ -0,0 +1,78 @@ +#!/bin/sh + +# Copyright (C) 2017 Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#set -e + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +DIFF="${DIFF:-diff -b -B}" + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + +OUTFILE=out-pkcs7.$$.tmp + +. ${srcdir}/../scripts/common.sh + +check_for_datefudge + +echo "Checking chain with insecure leaf" +datefudge -s "2019-12-19" \ +${VALGRIND} "${CERTTOOL}" --verify-chain --verify-profile=medium --infile "${srcdir}/data/chain-512-leaf.pem" >${OUTFILE} +rc=$? + +if test "${rc}" != "1"; then + echo "insecure chain succeeded verification (1)" + cat $OUTFILE + exit ${rc} +fi + +echo "Checking chain with insecure subca" +datefudge -s "2019-12-19" \ +${VALGRIND} "${CERTTOOL}" --verify-chain --verify-profile=medium --infile "${srcdir}/data/chain-512-subca.pem" >${OUTFILE} +rc=$? + +if test "${rc}" != "1"; then + echo "insecure chain succeeded verification (2)" + cat $OUTFILE + exit ${rc} +fi + + +echo "Checking chain with insecure ca" +datefudge -s "2019-12-19" \ +${VALGRIND} "${CERTTOOL}" --verify-chain --verify-profile=medium --infile "${srcdir}/data/chain-512-ca.pem" >${OUTFILE} +rc=$? + +if test "${rc}" != "1"; then + echo "insecure chain succeeded verification (3)" + cat $OUTFILE + exit ${rc} +fi + + +rm -f "${OUTFILE}" + +exit 0 diff --git a/tests/cert-tests/crl b/tests/cert-tests/crl index e9f1b68e28..62b320b2bf 100755 --- a/tests/cert-tests/crl +++ b/tests/cert-tests/crl @@ -25,6 +25,7 @@ export TZ="UTC" srcdir="${srcdir:-.}" CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" DIFF="${DIFF:-diff}" +ac_cv_sizeof_time_t="${ac_cv_sizeof_time_t:-8}" if ! test -x "${CERTTOOL}"; then exit 77 @@ -37,7 +38,8 @@ fi OUTFILE=out-crl.$$.tmp INFOFILE=out-crl-info.$$.tmp OUTFILE2=out2-crl.$$.tmp -TMPFILE=crl.$$.tmpl +TMPFILE=crl.$$.tmp +TMP2FILE=crl2.$$.tmp echo "crl_next_update = 43" >$TMPFILE echo "crl_number = 7" >>$TMPFILE @@ -53,12 +55,32 @@ if test "${rc}" != "0"; then exit ${rc} fi +${VALGRIND} "${CERTTOOL}" --crl-info --infile ${OUTFILE} --no-text --outfile ${TMP2FILE} +rc=$? + +if test "${rc}" != "0"; then + echo "--no-text crl info failed 1" + exit ${rc} +fi + +if grep -v '^-----BEGIN [A-Z0-9 ]\+-----$' ${TMP2FILE} | grep -v '^[A-Za-z0-9/+=]\+$' | grep -v '^-----END [A-Z0-9 ]\+-----$' ; then + echo "--no-text crl info failed 2" + exit 1 +fi + grep "Revoked certificates (152)" "${INFOFILE}" >/dev/null 2>&1 if test "$?" != "0"; then echo "CRL generation didn't succeed as expected" exit 1 fi +sed 's/\r$//' <"${INFOFILE}" | grep "CRL Number (not critical): 07$" >/dev/null 2>&1 +if test "$?" != "0"; then + echo "CRL generation didn't succeed as expected (2)" + grep "CRL Number (not critical):" "${INFOFILE}" + exit 1 +fi + # check appending a certificate ${VALGRIND} "${CERTTOOL}" --generate-crl --load-ca-privkey "${srcdir}/data/template-test.key" --load-ca-certificate \ @@ -120,9 +142,167 @@ if test "$?" != "0"; then exit 1 fi +# Check hex serial number +echo "crl_next_update = 43" >$TMPFILE +echo "crl_number = 0x1234567890abcdef1234567890abcdef12345678" >>$TMPFILE + +${VALGRIND} "${CERTTOOL}" --generate-crl --load-ca-privkey "${srcdir}/data/template-test.key" --load-ca-certificate \ + "${srcdir}/data/template-test.pem" --load-certificate "${srcdir}/data/ca-certs.pem" --template \ + "${TMPFILE}" >${OUTFILE} 2>${INFOFILE} +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "CRL hex number failed" + exit ${rc} +fi + +sed 's/\r$//' <"${INFOFILE}" | grep "CRL Number (not critical): 1234567890abcdef1234567890abcdef12345678$" >/dev/null 2>&1 +if test "$?" != "0"; then + echo "CRL hex number didn't succeed as expected" + grep "CRL Number (not critical):" "${INFOFILE}" + exit 1 +fi + +# Check default CRL number +echo "crl_next_update = 43" >$TMPFILE + +export TZ="UTC" + +. ${srcdir}/../scripts/common.sh + +check_for_datefudge + +datefudge -s "2020-01-20 10:00:00" ${VALGRIND} \ + "${CERTTOOL}" --generate-crl --load-ca-privkey "${srcdir}/data/template-test.key" \ + --load-ca-certificate "${srcdir}/data/template-test.pem" \ + --load-certificate "${srcdir}/data/ca-certs.pem" --template \ + "${TMPFILE}" >${OUTFILE} 2>${INFOFILE} +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "CRL default number failed" + exit ${rc} +fi + +sed 's/\r$//' <"${INFOFILE}" | grep "CRL Number (not critical): 5e257a20[0-9a-f]\{30\}$" >/dev/null 2>&1 +if test "$?" != "0"; then + echo "CRL default number didn't succeed as expected" + grep "CRL Number (not critical):" "${INFOFILE}" + exit 1 +fi + +if test "${ac_cv_sizeof_time_t}" = 8;then + # we should test that on systems which have 64-bit time_t + datefudge -s "2138-01-20 10:00:00" ${VALGRIND} \ + "${CERTTOOL}" --generate-crl --load-ca-privkey "${srcdir}/data/template-test.key" \ + --load-ca-certificate "${srcdir}/data/template-test.pem" \ + --load-certificate "${srcdir}/data/ca-certs.pem" --template \ + "${TMPFILE}" >${OUTFILE} 2>${INFOFILE} + rc=$? + + # We're done. + if test "${rc}" != "0"; then + echo "CRL default number 2 failed" + exit ${rc} + fi + + sed 's/\r$//' <"${INFOFILE}" | grep "CRL Number (not critical): 013c1972a0[0-9a-f]\{30\}$" >/dev/null 2>&1 + if test "$?" != "0"; then + echo "CRL default number 2 didn't succeed as expected" + grep "CRL Number (not critical):" "${INFOFILE}" + exit 1 + fi +fi + +# Check large decimal CRL number +echo "crl_next_update = 43" >$TMPFILE +echo "crl_number = 1234567890123456789012345678" >>$TMPFILE + +${VALGRIND} "${CERTTOOL}" --generate-crl --load-ca-privkey "${srcdir}/data/template-test.key" --load-ca-certificate \ + "${srcdir}/data/template-test.pem" --load-certificate "${srcdir}/data/ca-certs.pem" --template \ + "${TMPFILE}" >${OUTFILE} 2>${INFOFILE} +rc=$? + +# We're done. +if test "${rc}" = "0"; then + echo "CRL large decimal number succeeded when shouldn't" + exit ${rc} +fi + +sed 's/\r$//' <"${INFOFILE}" | grep "error parsing number: 1234567890123456789012345678" >/dev/null 2>&1 +if test "$?" != "0"; then + echo "CRL large number didn't fail as expected" + exit 1 +fi + +# Check invalid hex number +echo "crl_next_update = 43" >$TMPFILE +echo "crl_number = 0xsomething" >>$TMPFILE + +${VALGRIND} "${CERTTOOL}" --generate-crl --load-ca-privkey "${srcdir}/data/template-test.key" --load-ca-certificate \ + "${srcdir}/data/template-test.pem" --load-certificate "${srcdir}/data/ca-certs.pem" --template \ + "${TMPFILE}" >${OUTFILE} 2>${INFOFILE} +rc=$? + +# We're done. +if test "${rc}" = "0"; then + echo "CRL invalid hex number succeeded when shouldn't" + exit ${rc} +fi + +sed 's/\r$//' <"${INFOFILE}" | grep "error parsing number: 0xsomething" >/dev/null 2>&1 +if test "$?" != "0"; then + echo "CRL invalid hex number didn't fail as expected" + exit 1 +fi + +# Check invalid number +echo "crl_next_update = 43" >$TMPFILE +echo "crl_number = something" >>$TMPFILE + +${VALGRIND} "${CERTTOOL}" --generate-crl --load-ca-privkey "${srcdir}/data/template-test.key" --load-ca-certificate \ + "${srcdir}/data/template-test.pem" --load-certificate "${srcdir}/data/ca-certs.pem" --template \ + "${TMPFILE}" >${OUTFILE} 2>${INFOFILE} +rc=$? + +# We're done. +if test "${rc}" = "0"; then + echo "CRL invalid number succeeded when shouldn't" + exit ${rc} +fi + +sed 's/\r$//' <"${INFOFILE}" | grep "error parsing number: something" >/dev/null 2>&1 +if test "$?" != "0"; then + echo "CRL invalid number didn't fail as expected" + exit 1 +fi + +# Check CRL verification + +## CRL validation is expected to succeed +${VALGRIND} "${CERTTOOL}" --verify-crl --infile "${srcdir}/data/ca-crl-valid.crl" --load-ca-certificate \ + "${srcdir}/data/ca-crl-valid.pem" >${OUTFILE} 2>${INFOFILE} +rc=$? +if test "${rc}" != "0"; then + echo "CRL verification failed" + exit ${rc} +fi + +## CRL validation is expected to fail because the CA doesn't have the CRLSign key usage flag +${VALGRIND} "${CERTTOOL}" --verify-crl --infile "${srcdir}/data/ca-crl-invalid.crl" --load-ca-certificate \ + "${srcdir}/data/ca-crl-invalid.pem" >${OUTFILE} 2>${INFOFILE} +rc=$? +if test "${rc}" = "0"; then + echo "CRL verification succeeded when shouldn't" + exit 1 +fi + rm -f "${OUTFILE}" rm -f "${INFOFILE}" rm -f "${OUTFILE2}" rm -f "${TMPFILE}" +rm -f "${TMP2FILE}" exit 0 diff --git a/tests/cert-tests/crq b/tests/cert-tests/crq index 3edc004d6b..89099cfc0a 100755 --- a/tests/cert-tests/crq +++ b/tests/cert-tests/crq @@ -66,6 +66,19 @@ datefudge -s "2007-04-22" \ --template "${srcdir}/templates/template-tlsfeature.tmpl" \ --outfile $OUTFILE 2>/dev/null +${CERTTOOL} --crq-info --no-text --infile ${OUTFILE} --outfile ${TMPFILE} +rc=$? + +if test "${rc}" != "0"; then + echo "--no-text crq info failed 1" + exit ${rc} +fi + +if grep -v '^-----BEGIN [A-Z0-9 ]\+-----$' ${TMPFILE} | grep -v '^[A-Za-z0-9/+=]\+$' | grep -v '^-----END [A-Z0-9 ]\+-----$' ; then + echo "--no-text crq info failed 2" + exit 1 +fi + datefudge -s "2007-04-22" \ "${CERTTOOL}" --generate-certificate \ --load-ca-privkey "${srcdir}/data/template-test.key" \ @@ -134,6 +147,97 @@ if test "${rc}" != "0"; then exit ${rc} fi +# check whether the generation with extension works +datefudge -s "2007-04-22" \ + "${CERTTOOL}" --generate-request \ + --load-privkey "${srcdir}/data/template-test.key" \ + --template "${srcdir}/templates/arb-extensions.tmpl" \ + --outfile $OUTFILE 2>/dev/null +rc=$? + +if test "${rc}" != "0"; then + echo "add_extension crq failed" + exit ${rc} +fi + +${DIFF} --ignore-matching-lines "Algorithm Security Level" "${srcdir}/data/arb-extensions.csr" "${OUTFILE}" >/dev/null 2>&1 +rc=$? + +if test "${rc}" != "0"; then + echo "Certificate request generation with explicit extensions failed" + exit ${rc} +fi + +# Generate certificate from CRQ with no explicit extensions +datefudge -s "2007-04-22" \ + "${CERTTOOL}" --generate-certificate \ + --load-ca-privkey "${srcdir}/../../doc/credentials/x509/ca-key.pem" \ + --load-ca-certificate "${srcdir}/../../doc/credentials/x509/ca.pem" \ + --load-request "${srcdir}/data/arb-extensions.csr" \ + --template "${srcdir}/templates/template-no-ca.tmpl" \ + --outfile "${OUTFILE}" 2>/dev/null +rc=$? + +if test "${rc}" != "0"; then + echo "generate certificate with crq failed" + exit ${rc} +fi + +${DIFF} --ignore-matching-lines "Algorithm Security Level" "${srcdir}/data/crq-cert-no-ca.pem" "${OUTFILE}" >/dev/null 2>&1 +rc=$? + +if test "${rc}" != "0"; then + echo "Certificate from request generation failed" + exit ${rc} +fi + +# Generate certificate from CRQ with CRQ extensions +datefudge -s "2007-04-22" \ + "${CERTTOOL}" --generate-certificate \ + --load-ca-privkey "${srcdir}/../../doc/credentials/x509/ca-key.pem" \ + --load-ca-certificate "${srcdir}/../../doc/credentials/x509/ca.pem" \ + --load-request "${srcdir}/data/arb-extensions.csr" \ + --template "${srcdir}/templates/template-no-ca-honor.tmpl" \ + --outfile "${OUTFILE}" 2>/dev/null +rc=$? + +if test "${rc}" != "0"; then + echo "generate certificate with crq failed" + exit ${rc} +fi + +${DIFF} --ignore-matching-lines "Algorithm Security Level" "${srcdir}/data/crq-cert-no-ca-honor.pem" "${OUTFILE}" >/dev/null 2>&1 +rc=$? + +if test "${rc}" != "0"; then + echo "Certificate from request generation with honor flag failed" + exit ${rc} +fi + +# Generate certificate from CRQ with explicit extensions +datefudge -s "2007-04-22" \ + "${CERTTOOL}" --generate-certificate \ + --load-ca-privkey "${srcdir}/../../doc/credentials/x509/ca-key.pem" \ + --load-ca-certificate "${srcdir}/../../doc/credentials/x509/ca.pem" \ + --load-request "${srcdir}/data/arb-extensions.csr" \ + --template "${srcdir}/templates/template-no-ca-explicit.tmpl" \ + --outfile "${OUTFILE}" 2>/dev/null +rc=$? + +if test "${rc}" != "0"; then + echo "generate certificate with crq failed" + exit ${rc} +fi + +${DIFF} --ignore-matching-lines "Algorithm Security Level" "${srcdir}/data/crq-cert-no-ca-explicit.pem" "${OUTFILE}" >/dev/null 2>&1 +rc=$? + +if test "${rc}" != "0"; then + echo "Certificate from request generation with explicit extensions failed" + exit ${rc} +fi + + rm -f "${OUTFILE}" "${OUTFILE2}" "${TMPFILE}" exit 0 diff --git a/tests/cert-tests/data/arb-extensions.csr b/tests/cert-tests/data/arb-extensions.csr index 6da7637669..3c45c534da 100644 --- a/tests/cert-tests/data/arb-extensions.csr +++ b/tests/cert-tests/data/arb-extensions.csr @@ -20,7 +20,7 @@ PKCS #10 Certificate Request Information: Unknown extension 1.2.3.4 (not critical): ASCII: ........... Hexdump: 0001020304050607aaabcd - Unknown extension 5.6.7.8 (not critical): + Unknown extension 1.6.7.8 (not critical): ASCII: ........... Hexdump: 0001020304050607aaabcd Unknown extension 1.2.3.4.5.6.7 (not critical): @@ -32,13 +32,13 @@ PKCS #10 Certificate Request Information: Unknown extension 1.2.6710656.7 (not critical): ASCII: .J.K..l|...4..~.L..&.ap.E........}!'...s.....b=...K..6Sb.4.Z.e.'.~.G.... Hexdump: d64af64bf3b66c7ceac6fa34a4d77ed64c968b26c761709445f40d9ca0a00091af7d212789c00b7387b1d0d7ab623dd4029d4b86db3653621d34cd5ad065dc27c17e9447b0aaaca7 - Unknown extension 0.24.1.5 (not critical): + Unknown extension 1.0.1.5 (not critical): ASCII: ...... Hexdump: 0404cafebeaf - Unknown extension 2.34.11.12.13.14.15.16.17.1.5 (critical): + Unknown extension 1.10.11.12.13.14.15.16.17.1.5 (critical): ASCII: .. Hexdump: cafe - Unknown extension 0.24.1.5.1 (critical): + Unknown extension 1.0.1.5.1 (critical): ASCII: ........ Hexdump: 0406beafcafefafa Basic Constraints (critical): @@ -64,15 +64,15 @@ hkiG9w0BAQEFAAOBjQAwgYkCgYEApcbOdUOEv2SeAicT8QNZ93ktku18L1CkA/Et ebmGiwV+OrtEqq+EzxOYHhxKOPczLXqfctRrbSawMTdwEPtC6didGGV+GUn8BZYE aIMed4a/7fXlEjsT/jMYnBp6HWmvRwJgeh+56M/byDQwUZY9jJZcALxh3ggPsTYh f6kA4wUCAwEAAaCCAX0wggF5BgkqhkiG9w0BCQ4xggFqMIIBZjASBgMqAwQECwAB -AgMEBQYHqqvNMBIGA84HCAQLAAECAwQFBgeqq80wGgYGKgMEBQYHBBAdNM1a0GXc +AgMEBQYHqqvNMBIGAy4HCAQLAAECAwQFBgeqq80wGgYGKgMEBQYHBBAdNM1a0GXc J8F+lEewqqynMFwGCCoDj////38HBFAXjw5BPwQcydZK9kvztmx86sb6NKTXftZM losmx2FwlEX0DZygoACRr30hJ4nAC3OHsdDXq2I91AKdS4bbNlNiHTTNWtBl3CfB fpRHsKqspzBSBgYqg5nLAAcESNZK9kvztmx86sb6NKTXftZMlosmx2FwlEX0DZyg -oACRr30hJ4nAC3OHsdDXq2I91AKdS4bbNlNiHTTNWtBl3CfBfpRHsKqspzANBgMY -AQUEBgQEyv6+rzATBgpyCwwNDg8QEQEFAQH/BALK/jATBgQYAQUBAQH/BAgEBr6v +oACRr30hJ4nAC3OHsdDXq2I91AKdS4bbNlNiHTTNWtBl3CfBfpRHsKqspzANBgMo +AQUEBgQEyv6+rzATBgoyCwwNDg8QEQEFAQH/BALK/jATBgQoAQUBAQH/BAgEBr6v yv76+jAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMEMA8GA1Ud -DwEB/wQFAwMHgAAwDQYJKoZIhvcNAQELBQADgYEAOGlrPFk5kGvLTJJCBb/uLMGU -0Hus+/V3UqPJ9xalLG+gt5qAWxnDa6Uj3xhWdrGqgeA10Rru7WeoCKGTsZS7pVoz -i/42Rlwr5SmolxMo6iEOc5YtkLvhHhP5GENuf6kXimfHeSRmEbkrT3T8LIPj5ep1 -ZxrmGlCiGZHBv1wjl74= +DwEB/wQFAwMHgAAwDQYJKoZIhvcNAQELBQADgYEAj9/mf8y248igCZMZwKkgXWVH ++kCP5Z7F/sKI/b45vwMZC1xHdun7s6pxx29B4KdQg9OWKa6FZ3e36kcApR3xh0o+ +vpsQQgAKMLYojPGCuld+IHhSQ34UDF/XAvXz/yjlyvxxndBM8y3lhCZ2aoiR5bzy +45O0JoMHBcpiEUNvdA8= -----END NEW CERTIFICATE REQUEST----- diff --git a/tests/cert-tests/data/arb-extensions.pem b/tests/cert-tests/data/arb-extensions.pem index 5ff7214224..fe330d33d6 100644 --- a/tests/cert-tests/data/arb-extensions.pem +++ b/tests/cert-tests/data/arb-extensions.pem @@ -9,15 +9,15 @@ A1UECBMGQXR0aWtpMQswCQYDVQQGEwJHUjCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEApcbOdUOEv2SeAicT8QNZ93ktku18L1CkA/EtebmGiwV+OrtEqq+EzxOY HhxKOPczLXqfctRrbSawMTdwEPtC6didGGV+GUn8BZYEaIMed4a/7fXlEjsT/jMY nBp6HWmvRwJgeh+56M/byDQwUZY9jJZcALxh3ggPsTYhf6kA4wUCAwEAAaOCAXUw -ggFxMBIGAyoDBAQLAAECAwQFBgeqq80wEgYDzgcIBAsAAQIDBAUGB6qrzTAaBgYq +ggFxMBIGAyoDBAQLAAECAwQFBgeqq80wEgYDLgcIBAsAAQIDBAUGB6qrzTAaBgYq AwQFBgcEEB00zVrQZdwnwX6UR7CqrKcwXAYIKgOP////fwcEUBePDkE/BBzJ1kr2 S/O2bHzqxvo0pNd+1kyWiybHYXCURfQNnKCgAJGvfSEnicALc4ex0NerYj3UAp1L hts2U2IdNM1a0GXcJ8F+lEewqqynMFIGBiqDmcsABwRI1kr2S/O2bHzqxvo0pNd+ 1kyWiybHYXCURfQNnKCgAJGvfSEnicALc4ex0NerYj3UAp1Lhts2U2IdNM1a0GXc -J8F+lEewqqynMA0GAxgBBQQGBATK/r6vMBMGCnILDA0ODxARAQUBAf8EAsr+MBMG -BBgBBQEBAf8ECAQGvq/K/vr6MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYB +J8F+lEewqqynMA0GAygBBQQGBATK/r6vMBMGCjILDA0ODxARAQUBAf8EAsr+MBMG +BCgBBQEBAf8ECAQGvq/K/vr6MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYB BQUHAwQwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMA0GCSqGSIb3DQEB -CwUAA4GBABx3+l8LF+8mJ6zJlijTQh5NxLEqfoGwh6qO8AI1hDvefE2H+5D7zeAR -CUq0m9YYwDqBghZ9cdVgAltc9uEhzzoJ0oDbHj43HNiQWOUTwzqZ/0XjuqZj2iFm -DDjXdbtVns+tl8J/5486nNx957g5eOjSMitd2XmrhHTAmhe3fSXR +CwUAA4GBAEAzspMQDK0M3614KusgJ2P2dd0huW896rFR00MEG7TWjQOZ8HvQbBTl +BAG0020XSiibwFX+h9Nz9PrcLA96946n4YPDwFw0YhILYimFmjlOe+RupsJOoo8R +6T8j2FPiUxgLrB+AR3i+s4805DRX4+z06gxI31yX6zpdWe5aSR7+ -----END CERTIFICATE----- diff --git a/tests/key-tests/data/bad-key.pem b/tests/cert-tests/data/bad-key.pem similarity index 100% rename from tests/key-tests/data/bad-key.pem rename to tests/cert-tests/data/bad-key.pem diff --git a/tests/cert-tests/data/ca-crl-invalid.crl b/tests/cert-tests/data/ca-crl-invalid.crl new file mode 100644 index 0000000000..68b7c1159d --- /dev/null +++ b/tests/cert-tests/data/ca-crl-invalid.crl @@ -0,0 +1,14 @@ +-----BEGIN X509 CRL----- +MIICJjCB3wIBATA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqG +SIb3DQEBCDALBglghkgBZQMEAgGiAwIBQDAPMQ0wCwYDVQQDEwRDQS0wFw0xODA5 +MTYxMzM1NDJaGA85OTk5MTIzMTIzNTk1OVowJzAlAhQocdck3Pu5MeIpUpjb4Fis ++aYhsRcNMTgwOTE2MTMzNTQyWqBBMD8wHwYDVR0jBBgwFoAUpNhDUvJwLqnKF+mm +w5aF/wgkSEowHAYDVR0UBBUCE1ueXC860KlshpgThgNNyWGQU8QwPQYJKoZIhvcN +AQEKMDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIB +ogMCAUADggEBAElYoCVyM5W5vTfMeC7tI8WUqC3lIEXG+85AmY949KLvcx65ZAlX +fLXxx+nj0fMmL/efQEHCbpK8MfZmdesuazELePLs+e94ESZbRD4IAg2S7jCqmQ6j +Pr5vB/5A8xAIkUg+SDoPVX5VTH5UsVYhJmEfWnvkZehMst38CUqeyLJ5gp83d9nz +IuaDaHL1EOh/F+Ul/PANnyot2tHh02WBRbLI0c0Sr7nsVvHwIMfNtB0kXFKg5fmJ +puwhtNJGinWXpEgoMls7KXf+HOhiOwrMyTLxjhkawVRpjpdlMDPFp4sB0NdcIfr1 +HocKGTK84068uzN8Sk1QSuXpccL4YCr/fNo= +-----END X509 CRL----- diff --git a/tests/cert-tests/data/ca-crl-invalid.pem b/tests/cert-tests/data/ca-crl-invalid.pem new file mode 100644 index 0000000000..24adf409bb --- /dev/null +++ b/tests/cert-tests/data/ca-crl-invalid.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDgTCCAjmgAwIBAgIUYrdL5TzzAJamxI3rTXeNdP+1SrUwPQYJKoZIhvcNAQEK +MDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMC +AUAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xODA5MTYxMzIzNTNaGA85OTk5MTIzMTIz +NTk1OVowDzENMAsGA1UEAxMEQ0EtMDCCAVIwPQYJKoZIhvcNAQEKMDCgDTALBglg +hkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCAUADggEPADCC +AQoCggEBAK4RFQTNLU6aXid/ji3MU6W4iAYfFHGyxOgd/69wJ/yFu/gfBqJ3lNVy ++FvQvWtqq1N+mPixWjNIjPrHHsfEWhfNXEi3tSbcNwBFxMJ5Wc07BrYdrpQqfNb/ +Qb3cZbmWmmWp/A+BBFD09sI2imjVvJstjCUux6xxGG4jgXAdGkcAXH7ehi+D7nXQ +yuIlfAv0QH2gWtHJ1wc3tMHghxSpBhS+KU2QxuRlQPlQrFfTSzjjQSYJ8qqFvYDN +4emSFKEc5iJSRPrleTNDtSf5BQ7JVBmvBOCkUvlkVV6QjU+zMaJbwqaQuE7mOHbo +myUCujP/k6eKv+P3l6OI+zu7+zBaebkCAwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB +/zAPBgNVHQ8BAf8EBQMDBwQAMB0GA1UdDgQWBBSk2ENS8nAuqcoX6abDloX/CCRI +SjA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDAL +BglghkgBZQMEAgGiAwIBQAOCAQEAkGJ1suWS6LS7NcYk37KmfREcOMmh9lQdi4re +tycRwn2tDaaRvRaiHAGndxZAPTfF9yBJ5LOzcSvSGsCOa2GE5Y3WtIVInadSudli +o8pxSoWon0vF7dBzZGbC+/iSbKoF7bwF4WTE9dqEdMWOE/+eHT3RsJqtk0PdbBqD +nqjQyb6QdrKPveoDVyfxszLA2gdJoTA6J+DJ5s8j197Hp9zXoPoIWY5/JDKpQweD +mGAS9Efhx5UPbnluqlj/HzG0U43gLajYcSenG35uszF+muS9FrsYZb0qtl9vQ5zJ +zmSAnjFYa8/p/zmcZKmZf0GIrxUQzn1lddy0Ys42cF22gc3sSg== +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/ca-crl-valid.crl b/tests/cert-tests/data/ca-crl-valid.crl new file mode 100644 index 0000000000..d8d8ba8df1 --- /dev/null +++ b/tests/cert-tests/data/ca-crl-valid.crl @@ -0,0 +1,14 @@ +-----BEGIN X509 CRL----- +MIICJjCB3wIBATA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqG +SIb3DQEBCDALBglghkgBZQMEAgGiAwIBQDAPMQ0wCwYDVQQDEwRDQS0wFw0xODA5 +MTYxMzQ4MjBaGA85OTk5MTIzMTIzNTk1OVowJzAlAhQYv9ruS7EaM2V7tn8kz3Rh +vQxmhxcNMTgwOTE2MTM0ODIwWqBBMD8wHwYDVR0jBBgwFoAUUPN34B1PsHCSBKfl +DvkuCvTuz+QwHAYDVR0UBBUCE1ueXyYRxCO5zh+eeQTS31LHIvMwPQYJKoZIhvcN +AQEKMDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIB +ogMCAUADggEBAH+J2DiyaZ+qKWKnrRluWQK/KSJ/a+Do7ox18swNg3VMtEP360TB +vh0/ctrbeb/H12YmwvrQdMPSIAcDiyBGannqG3L2mijDXZq3F2azL0WZiKAsDsBi +a3DW28F9KDPBQYuiUVYCn/C3r0CtDJuv1eARZtyc2BLujRgXUibVJej6U26mtPjs +DcDsXIWmBqRquMXhj0TY0MvkbNvT1XhDBBmSlQo+EC5zz5FZ4e9DvWiPcJqgkx4X +S58Xh+tpQR9IyyO8OLkNpMy5Zy1J6o3rTO5ZScEzjaO45YmN7BFoMljOdD1W2ID5 +MHVXfLRltra7qiZLXKhZ0aHfkzD3Xdu74JQ= +-----END X509 CRL----- diff --git a/tests/cert-tests/data/ca-crl-valid.pem b/tests/cert-tests/data/ca-crl-valid.pem new file mode 100644 index 0000000000..53dab807c3 --- /dev/null +++ b/tests/cert-tests/data/ca-crl-valid.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDgTCCAjmgAwIBAgIUIhM6Lo4vY8WseBrZi5UmDsqK3AAwPQYJKoZIhvcNAQEK +MDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMC +AUAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xODA5MTYxMzQ4MDVaGA85OTk5MTIzMTIz +NTk1OVowDzENMAsGA1UEAxMEQ0EtMDCCAVIwPQYJKoZIhvcNAQEKMDCgDTALBglg +hkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCAUADggEPADCC +AQoCggEBANPX6SGS5KZmUtn1ZT5CtvcMv3hKLosvLEYzpvbjjprFdL3UmBlWSu9f +u/0az9kT6D0maWKmtiF0AT4dD5CL/8391l2ZhiG9wxopBXAnxBRkO2+YZcaNY+ty +4PqZauWc2InZ0rMYI8rfSbUREgWO+d8SBBbU2wACzh1AZwMbtjEc2aGP+PXiC4m0 +axxRk0lD4ZpklA8oVMIwUNS09NQcbn7YqlnxCVxd22Z40XspeCsihXkI2d1OXWmG +J3HtEi3Ors1jyeGF3B68TplPJ3I1buuVTVJv32mVj4elQr78kTRtxyWoxL+pDt3y +o95W+VOvuAfULQWNuk49w901t4mimEcCAwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB +/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRQ83fgHU+wcJIEp+UO+S4K9O7P +5DA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDAL +BglghkgBZQMEAgGiAwIBQAOCAQEAluZhfkQIDnSj+uQJpb0hTNW4cMqQXSM0khAe +LYunzXvksXFnRz5w/qLNcvQQ94s1ej8RAXJQXG63x51eAlpwqLffcXA1rGCpUBwM +9NsiNVkh/wMyZ0LcoyztvFRI/9JR40HzUWvp4k/SxLT25BQavlwborEO45HxHk1Q +hEeWyuxNt/V9QKQ/DKtPQbbObT4gfg+mwWNntRS8VKqd1PsFr4oxmFXgGkpu04uW +QV63kq7b54RzgYIPssm2Vr9JvLoZ+1q9VhZT08wx6NDxPIe70HydqTcfsOA8p84o +MvcleJjNs4+1RPmNVhnnZDPYtBNnudn8NtMaN5AzZWa3Y41boA== +-----END CERTIFICATE----- diff --git a/tests/key-tests/data/ca-gnutls-keyid.pem b/tests/cert-tests/data/ca-gnutls-keyid.pem similarity index 100% rename from tests/key-tests/data/ca-gnutls-keyid.pem rename to tests/cert-tests/data/ca-gnutls-keyid.pem diff --git a/tests/key-tests/data/ca-no-keyid.pem b/tests/cert-tests/data/ca-no-keyid.pem similarity index 100% rename from tests/key-tests/data/ca-no-keyid.pem rename to tests/cert-tests/data/ca-no-keyid.pem diff --git a/tests/key-tests/data/ca-weird-keyid.pem b/tests/cert-tests/data/ca-weird-keyid.pem similarity index 100% rename from tests/key-tests/data/ca-weird-keyid.pem rename to tests/cert-tests/data/ca-weird-keyid.pem diff --git a/tests/cert-tests/data/cert-ecc256-full.pem b/tests/cert-tests/data/cert-ecc256-full.pem new file mode 100644 index 0000000000..ab16d166d6 --- /dev/null +++ b/tests/cert-tests/data/cert-ecc256-full.pem @@ -0,0 +1,68 @@ +X.509 Certificate Information: + Version: 3 + Serial Number (hex): 07 + Issuer: CN=GnuTLS certificate authority,ST=Leuven,OU=GnuTLS certificate authority,O=GnuTLS,C=BE + Validity: + Not Before: Sat Sep 01 09:22:36 UTC 2012 + Not After: Sat Oct 05 09:22:36 UTC 2019 + Subject: EMAIL=none@none.org,pseudonym=jackal,title=Dr.,UID=clauper,CN=Cindy Lauper,ST=Attiki,OU=sleeping dept.,O=Koko inc.,C=GR + Subject Public Key Algorithm: EC/ECDSA + Algorithm Security Level: High (256 bits) + Curve: SECP256R1 + X: + 3c:15:6f:1d:48:3e:64:59:13:2c:6d:04:1a:38:0d:30 + 5c:e4:3f:55:cb:d9:17:15:46:72:71:92:c1:f8:c6:33 + Y: + 3d:04:2e:c8:c1:0f:c0:50:04:7b:9f:c9:48:b5:40:fa + 6f:93:82:59:61:5e:72:57:cb:83:06:bd:cc:82:94:c1 + Extensions: + Basic Constraints (critical): + Certificate Authority (CA): FALSE + Subject Alternative Name (not critical): + DNSname: www.none.org + DNSname: www.morethanone.org + DNSname: localhost + IPAddress: 192.168.1.1 + Key Purpose (not critical): + TLS WWW Server. + Key Usage (critical): + Digital signature. + Subject Key Identifier (not critical): + acfa4767c61b41791257f7ac05c150e28ed00e5b + Authority Key Identifier (not critical): + f0b481fe9812bfb528b9644003cbcc1f664e2803 + Signature Algorithm: ECDSA-SHA256 + Signature: + 30:45:02:20:28:2a:e0:24:c8:9e:44:50:d4:36:85:a0 + 8f:30:9a:ed:8a:3f:ce:38:e4:d5:91:5c:aa:2e:6a:0d + 96:25:21:73:02:21:00:c7:82:b1:6a:86:49:35:57:c1 + 05:27:38:6c:0f:57:4f:3f:f6:3a:7a:60:01:9b:ad:52 + 88:4d:35:bf:ed:99:11 +Other Information: + Fingerprint: + sha1:8c6802792736a5ce00e75b2095626aa13ca0c0c0 + sha256:222ddff7f65043153f439d4e2b74b87f9e366d96a1506b5ad3e8e0f1bb95da9e + Public Key ID: + sha1:acfa4767c61b41791257f7ac05c150e28ed00e5b + sha256:5978dd1d2d23e992075dc359d5dd14f7ef79748af97f2b7809c9ebfd6016c433 + Public Key PIN: + pin-sha256:WXjdHS0j6ZIHXcNZ1d0U9+95dIr5fyt4Ccnr/WAWxDM= + +-----BEGIN CERTIFICATE----- +MIIC4DCCAoagAwIBAgIBBzAKBggqhkjOPQQDAjB9MQswCQYDVQQGEwJCRTEPMA0G +A1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2VydGlmaWNhdGUgYXV0aG9y +aXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdudVRMUyBjZXJ0aWZpY2F0 +ZSBhdXRob3JpdHkwIhgPMjAxMjA5MDEwOTIyMzZaGA8yMDE5MTAwNTA5MjIzNlow +gbgxCzAJBgNVBAYTAkdSMRIwEAYDVQQKEwlLb2tvIGluYy4xFzAVBgNVBAsTDnNs +ZWVwaW5nIGRlcHQuMQ8wDQYDVQQIEwZBdHRpa2kxFTATBgNVBAMTDENpbmR5IExh +dXBlcjEXMBUGCgmSJomT8ixkAQETB2NsYXVwZXIxDDAKBgNVBAwTA0RyLjEPMA0G +A1UEQRMGamFja2FsMRwwGgYJKoZIhvcNAQkBFg1ub25lQG5vbmUub3JnMFkwEwYH +KoZIzj0CAQYIKoZIzj0DAQcDQgAEPBVvHUg+ZFkTLG0EGjgNMFzkP1XL2RcVRnJx +ksH4xjM9BC7IwQ/AUAR7n8lItUD6b5OCWWFeclfLgwa9zIKUwaOBtjCBszAMBgNV +HRMBAf8EAjAAMD0GA1UdEQQ2MDSCDHd3dy5ub25lLm9yZ4ITd3d3Lm1vcmV0aGFu +b25lLm9yZ4IJbG9jYWxob3N0hwTAqAEBMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA8G +A1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFKz6R2fGG0F5Elf3rAXBUOKO0A5bMB8G +A1UdIwQYMBaAFPC0gf6YEr+1KLlkQAPLzB9mTigDMAoGCCqGSM49BAMCA0gAMEUC +ICgq4CTInkRQ1DaFoI8wmu2KP8445NWRXKouag2WJSFzAiEAx4KxaoZJNVfBBSc4 +bA9XTz/2OnpgAZutUohNNb/tmRE= +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/cert-eddsa.pem b/tests/cert-tests/data/cert-eddsa.pem new file mode 100644 index 0000000000..b402a97042 --- /dev/null +++ b/tests/cert-tests/data/cert-eddsa.pem @@ -0,0 +1,36 @@ +X.509 Certificate Information: + Version: 3 + Serial Number (hex): 5601474a2a8dc330 + Issuer: CN=IETF Test Demo + Validity: + Not Before: Mon Aug 01 12:19:24 UTC 2016 + Not After: Mon Dec 31 23:59:59 UTC 2040 + Subject: CN=IETF Test Demo + Subject Public Key Algorithm: ECDH (X25519) + Extensions: + Basic Constraints (critical): + Certificate Authority (CA): FALSE + Key Usage (not critical): + Key agreement. + Subject Key Identifier (not critical): + 9b1f5eeded043385e4f7bc623c5975b90bc8bb3b + Signature Algorithm: EdDSA-Ed25519 + Signature: + af:23:01:fe:dd:c9:e6:ff:c1:cc:a7:3d:74:d6:48:a4 + 39:80:82:cd:db:69:b1:4e:4d:06:ec:f8:1a:25:ce:50 + d4:c2:c3:eb:74:6c:4e:dd:83:46:85:6e:c8:6f:3d:ce + 1a:18:65:c5:7a:c2:7b:50:a0:c3:50:07:f5:e7:d9:07 +Other Information: + Fingerprint: + sha1:8b011a41d9b72f9848b1dcbd3a038fa8c9d0a536 + sha256:180516f0a03e4893d234a28f3ad28921bc35d1b12bd35134847240dafb715a11 + +-----BEGIN CERTIFICATE----- +MIIBLDCB36ADAgECAghWAUdKKo3DMDAFBgMrZXAwGTEXMBUGA1UEAwwOSUVURiBU +ZXN0IERlbW8wHhcNMTYwODAxMTIxOTI0WhcNNDAxMjMxMjM1OTU5WjAZMRcwFQYD +VQQDDA5JRVRGIFRlc3QgRGVtbzAqMAUGAytlbgMhAIUg8AmJMKdUdIt93LQ+91oN +vzoNJjga9OukqY6qm05qo0UwQzAPBgNVHRMBAf8EBTADAQEAMA4GA1UdDwEBAAQE +AwIDCDAgBgNVHQ4BAQAEFgQUmx9e7e0EM4Xk97xiPFl1uQvIuzswBQYDK2VwA0EA +ryMB/t3J5v/BzKc9dNZIpDmAgs3babFOTQbs+BolzlDUwsPrdGxO3YNGhW7Ibz3O +GhhlxXrCe1Cgw1AH9efZBw== +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/cert-rsa-pss.pem b/tests/cert-tests/data/cert-rsa-pss.pem new file mode 100644 index 0000000000..ffaee16c20 --- /dev/null +++ b/tests/cert-tests/data/cert-rsa-pss.pem @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIE8jCCAyagAwIBAgIBdDBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAQUA +oRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAQUAogMCASAwVzELMAkGA1UEBhMC +Q1oxFzAVBgNVBAoMDkN6ZWNoIFJlcHVibGljMR0wGwYDVQQLDBRNaW5pc3RyeSBv +ZiBJbnRlcmlvcjEQMA4GA1UEAwwHQ1NDQV9DWjAeFw0xMTAzMjUwMDAwMDBaFw0y +NjA2MjUwMDAwMDBaMFcxCzAJBgNVBAYTAkNaMRcwFQYDVQQKDA5DemVjaCBSZXB1 +YmxpYzEdMBsGA1UECwwUTWluaXN0cnkgb2YgSW50ZXJpb3IxEDAOBgNVBAMMB0NT +Q0FfQ1owggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCdFhq+ScQXepAA +0kp0IwF/nEv+Md3Wx41Y6WRJkTVVyU6CFPlvr/F6XLGX/ILJtM8QL97CgojDVQbE +ccNxUsZ+yjtB4n52ttWYLBN5nktJksP2aBVMu1fqoyTqBhaf0JtkpQjWKNVJYbUH +k2pXkzGUJ+YHG04jOEYIKNclY82f1Ho1Wd7di4gZ1LCBRTzIU9JVPEMOZdmLx1qQ +InOWf8deZ4Gmkj5UqzXt7vGQF/TbIedhmfnbulvyHN3UEDMZgVgzkF2fIOaBwu5s +kfo8e08/J155hZIJtUjXk/moLF8U/4ETo7qER1EkoJ9KIRIvoPwPk2QAI4JP0Hd6 +GgUMEsz0dmTxKHcJZAWXcDaKcwTrG7/xhPTAffdOZnTnOpYQPcKmjUvogqY839VQ +mwYyo+s51tVrAIe2YcdHhIdBY5SLOhHsDNadpRrBYIa8vzUgtfUH50US7dZuwUu6 +WbUiQu5vmDjvGEUa7F6eehCCf9xXkbPJZoE63t/NJYvHSFa1wDcCAwEAAaNhMF8w +HQYDVR0OBBYEFOuhT488aYrathCbEjUoztRlSghZMA4GA1UdDwEB/wQEAwIBBjAa +BgNVHSAEEzARMA8GDSqBS7cYAQEBAYnKmXwwEgYDVR0TAQH/BAgwBgEB/wIBADBB +BgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAQUAoRwwGgYJKoZIhvcNAQEIMA0G +CWCGSAFlAwQCAQUAogMCASADggGBAEcppLLH0xAkWXbBMXDa1hwqOZfKVdoUVDNT +G20V3VbDT74R2yFCLWBge9rr7S2LfF/w4Xrl3kyZ2Tn0dYoOmBcqVzH6nCYrniGx +apPmSkAexI/bjW55BOMe6CVI9qdKayqm99om/2+R+VSAKaopwOKn9IQ+4itNA0VI +0ZDHbI/pdJClRZ0OPA8DREz7+hZWMNb7S4aAYGdd1fLo0uDKf/siFkUUfkpBtkgr +4Enb1e8NMU0a5abpI25NgURB+OWhfArLB9jFmnlql6TZADLZfw49bEmr4KOddxyk +toBmFgu4/uQXcukNWB487iREvEPPIL7A90W+W3ymtlol76SChKKBGexaaNA1JW+O +sRxoN5FnXTBhyRm96lZOfvF7SjCQHMCaIeYaQ4ajjPJgxB0EbyyJMeSrjh4yJPEH +pKc3AM9MUCxC0LO/qb5oBio8TQqHYnpyvp2CsvPSezPGh/40hxsKTL8GqTxB5m9G +g6qpdcDQxM6VtrnTh08nMjaKnfXVJQ== +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/cert-with-non-digits-time-ca.pem b/tests/cert-tests/data/cert-with-non-digits-time-ca.pem new file mode 100644 index 0000000000..722a0b68f5 --- /dev/null +++ b/tests/cert-tests/data/cert-with-non-digits-time-ca.pem @@ -0,0 +1,70 @@ +-----BEGIN CERTIFICATE----- +MIIGCDCCA/CgAwIBAgIQY8Mi35RmHbQSpWR8XD7V+zANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDTjEMMAoGA1UECAwDVEo1MQwwCgYDVQQKDANUSlUxFDASBgNV +BAsMC2JlaXlhbmd5dWFuMQswCQYDVQQDDAJDUzEfMB0GCSqGSIb3DQEJARYQbGpm +cG93ZXJAMTYzLmNvbTAgFw0wMDAxMDEwMTAwMDFaGA82NTY2MDMyMzEyMTIzM1ow +ajELMAkGA1UEBhMCQ04xDDAKBgNVBAgMA1RKNTEMMAoGA1UECgwDVEpVMRQwEgYD +VQQLDAtiZWl5YW5neXVhbjENMAsGA1UEAwwEYjMyNjEaMBgGCSqGSIb3DQEJARYL +bGkxQDE2My5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDUWAVE +VHGqn3tPc+kJTGwXpsiD+pwu287ibcwa7nlcQ8KyrwbS/7dnhK3Mpz3jjkbk9Zqw +Ju8R5ku9hEsSX3ZW7KQYj+jqVWVnLNlp5j0a1G2fdB7vn0ORtj9GgFAbKn37cXqo +6G2EyQ0NXhpOiwUtQXSnhbMUUJal2jMSaSGSKyyex9lDrZfSzQ164VIvMKz49kPB +Z6EupA0E6QkwZ1a8wGthdhQ3tJrHt0jcmBVpJ5mo9zlvX7ErsK4prXgJvBQR/IRc +YhqYHxsKLq/mgjezNqy/WoPN313HxDG8YETy8m9BKWI5OLBHIr0kahmBFumttlGa +a4rW+w2NZz8jtrnkM8sFSEoegO7xA8JZdO6O3mSedWOiA2zEuT8hQqkSYDSdZxOd +J1u/mdyumLErXquenaMTAHb0lviNc7llZqDKMJ8yfROZwv9PDCs3OBGOttr3MMRT +JHN5f4ZStqx6unV90Rx8QIh8wstG3c/QrJ4lBS+c72A6bMmxLpiTg1+CjG9ntgvC +mspMbVlu710Y7JHcAuq9RSnR0Nv31AGjOZEpKAGpUfzoVf47GYV38VpLskgy0tiA +Tesse5g8rUE9ozwgj6B34qfNdPxCmv6UkLYxU/CLpw2cRKT8hShAO8zDfgmU9262 +ctTdrVU3PsSwMs7F8SlG/9kWq6HgqaBPadCsRwIDAQABo4GkMIGhMB0GA1UdDgQW +BBSSPopRSpZMfPAxCvUPCu4TZmh38DAfBgNVHSMEGDAWgBRyFaB24RFh9c9zf0+D +YA01twtiWjASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjA7BgNV +HREENDAyggdhYmMuY29tggkqLmFiYy5jb22CB3h5ei5jb22CDXd3dy5iYWlkdS5j +b22HBH8AAAEwDQYJKoZIhvcNAQELBQADggIBAJwtzZT7z1eImP8a7GTnfbPYu8k4 +kdbGnWSyrEr8x6UjZQLCa1DXdxKkms84yCW1QM5vdKody/Sz1lvETPeTgpXRLlcO +i/75L+Knz1asfz3D+SO/YCSc/VF27GnkKyjFlt7LUmHuFUQoprpCi12wJ0IJP5D6 +AQarnWuS2AA4op0exLrK1+BonYyqH//QDt5jhUJFEKQVgckHOtVOklHmazplr8bu +JzHz0+C7mDtZbLXoBSgZIFaVCSk4uxsf98QWOxKQURUv8gAhHLOo/QlkyqiiFCaN +1Se0Zp16pegTxs0qS8qY1pLgw4AO56ifG+LcOmYminbAZtApmiOvtxf8JAw5Twc8 +6gLRlq2cv/bY55hZde4uvUzC/Te/zENu9rlv7qQqQ9jS5tiWZjZVqhEt275KymBT +4855pB+8oGb5Xznl6/AzmxUbOmRX1q5bbv+11ZscRtUp3XD3gA5Y5UYBF5UVICcb +zTVUNDgaUjyuXIiF/ZFtbcxX57PfIqKHP3A2XseUhpN3qFSWb29BsTAa7E59s8pL +0m/aftSXF1g/8q0IsHFuZRv4l+eyYWJhwtQTY9TTHnjYJbljcwGtVjYuAfMB+eec +beH0LdKLVbOKlMPySiqy18cKDkwQ1wTPqoZnz5/mKRr5Hpt/RKSe997NjIeuJZl0 +W0ebRMo2T0FNhUhm +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGCDCCA/CgAwIBAgIQY8Mi35RmHbQSpWR8XD7V+jANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDTjEMMAoGA1UECAwDVEo1MQwwCgYDVQQKDANUSlUxFDASBgNV +BAsMC2JlaXlhbmd5dWFuMQswCQYDVQQDDAJDUzEfMB0GCSqGSIb3DQEJARYQbGpm +cG93ZXJAMTYzLmNvbTAgFw0wMDAxMDEwMTAwMDBaGA85OTk5MTIyMzExMjMzNFow +bTELMAkGA1UEBhMCQ04xDDAKBgNVBAgMA1RKNTEMMAoGA1UECgwDVEpVMRQwEgYD +VQQLDAtiZWl5YW5neXVhbjELMAkGA1UEAwwCQ1MxHzAdBgkqhkiG9w0BCQEWEGxq +ZnBvd2VyQDE2My5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC+ +WcvCnpCA78zG1ZkRhiIPjPEmFx3PHaX5f+KYod68qvCqsRGsB4n7rQS2ljFUZ7MY +4GNWtiMZANdWMuOrnkT0sNmtQ1aXWh+6lMUKLr/690SkKMbKU1y6OTfGBntau6em +1djv9Q8fYmapdne3tr5UNTJBvqc5qivWiF98XUQdp8qGKLYfF0NOxkreD6u4Pddo +/6PR5pn+nbgCHkDFmVGL+0DtZzC+K/NQbKpmP4/Zpolf1C5wPpxWPpjDl/yRSctC +qX1G0WGyB8/w/IR94Gx3rDmA/NkZMP+4tXBFVSoz0XJpdNqCtwxCkl6NqLpMN0gp +XrU78ToNnTiUW4zoyIfKBSlXRkPd4srgB8gTO3cHqJkSmzt/gFMnbBP1gNV10R0P +KzbNuV/uIHx5wGYJIW8w9fL8hKrCYcO5Yfq3VDGy9Lr3/5QFYI36oPLIw0cZS/i+ +NyPLYT1TN/o6E8dtnsz1AY+VQyriW44CB6J3tlfrGLigfP81rsaQpcGd+W+0ntyc +cWpzRKwwut3I9CJSGjRuwHfz0n6Fk+Hoj+i+Qv6h/y7+KwqjDMMHIrbieBhUwQbm +Hlyj25IwyvYc6OOBymAyy8pUByAC7QWw4KxogDol6165iAubaupDxkDQXKr/IMmj +pCcTBDmVwhStVBDCD6Lo4HhxDE5a6IA4DSxdWIV2iQIDAQABo4GhMIGeMB0GA1Ud +DgQWBBRyFaB24RFh9c9zf0+DYA01twtiWjAfBgNVHSMEGDAWgBRyFaB24RFh9c9z +f0+DYA01twtiWjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjA7BgNV +HREENDAyggdhYmMuY29tggkqLmFiYy5jb22CB3h5ei5jb22CDXd3dy5iYWlkdS5j +b22HBH8AAAEwDQYJKoZIhvcNAQELBQADggIBAFYRDs+WyMwr8rPCkzFHnMK0ePfD +cWc1O1L02foAePXEicrqQwv7JnsikBsx28E0T+mjqFU+7IIq7K+T0ndlEfax96Gi +j3H8zfwAG10JBFMjsFtdo8Hq6Q4CeMu1D83NPhQacZ1lOdCp/ZUdRvlcveeBx5VX +hFel6erfsR+6GX6I0b2Z9qIBKwmpxLcsPkY60RuazvkSf7xAd4eNJ18vzdo55J1c +x6mJK+c5J63a/IW6rjEd2v6URwwlbOyuRSurXoETMxYwuxs7pBnxA3MRU/OWIaCy +fAO+2ao4qn4WNo4oGo1BJBaX+mQJa+NwCw2F+sRqGZ+3ooSq2bjjXrLxiytr4b+o +fUBiCzhZLOGaRubJXlWp39dgLf6mo3ajjYPhTUtlqv0ZfX97C7xEXitNY3Dy9aqe +NnQn2+u2dkzEMTc+zW5i+xkByRhoSXY5AhYDdyd0Qtuk1T8sRs38TJmavr6/H6hv +6FGrmgqFypmsVy1LdRAn80yVBce1t3eWcgVnTND+wSS8mEj9rHS4th4sZbwwpVWJ +Z0cJSFnqSLMh7ZrDyzcKFUhgdU7GxuaACxIbBt3f5pCp1QDKffb3kVG333l/OLqN +2qYOTP6iFf3JpKttNvaSA9Q+GNk4t/8ozZW6lfyz+uDfmQecEgAv/u1s1brMgQo7 +TQ/vJrJvgyxVSgOH +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/cert-with-non-digits-time.pem b/tests/cert-tests/data/cert-with-non-digits-time.pem new file mode 100644 index 0000000000..9927695c7c --- /dev/null +++ b/tests/cert-tests/data/cert-with-non-digits-time.pem @@ -0,0 +1,38 @@ +-----BEGIN CERTIFICATE----- +MIIFQDCCAyigAwIBAgIRAPABuQ6DmexEq0k9QQaewMUwDQYJKoZIhvcNAQELBQAw +ajELMAkGA1UEBhMCQ04xDDAKBgNVBAgMA1RKNTEMMAoGA1UECgwDVEpVMRQwEgYD +VQQLDAtiZWl5YW5neXVhbjENMAsGA1UEAwwEYjMyNjEaMBgGCSqGSIb3DQEJARYL +bGkxQDE2My5jb20wHhcNICMwMTAxMDEwSTAwWhcNMzUxMjIzMTEyMzM0WjB7MQsw +CQYDVQQGEwJDTjEMMAoGA1UECAwDVEo1MQswCQYDVQQHDAJUSjEMMAoGA1UECgwD +VEpVMRQwEgYDVQQLDAtiZWl5YW5neXVhbjEMMAoGA1UEAwwDTExRMR8wHQYJKoZI +hvcNAQkBFhBsamZwb3dlckAxNjMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArXvIlHbQRwFvnLFz2dsnbPBgE8WIDRpIIpRTWJL+pdi/duUcE5Xn +VRNA0lnlYBOl8igItyFudUC4o45xa0Q9Htd8hisbdaHpRpdTRUUpljH9rOOWOyY0 +aqRJ0RrU2ayhJslTH9OBBg1ZaatMYxI2u8Bz1MJrtsCUcvymScT59QAYI17ZAzI5 +ouqUsn3F5BgiU53kdm4ubfKts2su/sUvM9BN03+/p2o/50FanBVrRMHAUs2p65FM +yFtNwqT77ZpO9BZdEOV3KSRJRLbZbELoanMQ0txztznWI6PULTenf8eR24dQscqX +N38Qk+SGwp/lu/6qLN916oY2WFTRGrnCcwIDAQABo4HPMIHMMAkGA1UdEwQCMAAw +HQYDVR0OBBYEFI0Gz1ruYze8+EmA4MZ06BPU0AsiMB8GA1UdIwQYMBaAFJI+ilFK +lkx88DEK9Q8K7hNmaHfwMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEF +BQcDAQYIKwYBBQUHAwQwKAYDVR0RBCEwH4IFYS5jb22CCCouYWMuY29tggZ4ei5j +b22HBH8AAAEwGAYDVR0SBBEwD4INYWJjZXd3cnd0LmNvbTAMBgNVHSQEBTADgAED +MA0GCSqGSIb3DQEBCwUAA4ICAQBvx+Z8r/YjdhvkV5XbnRan25H7afvfg3aFHDGW +q2WxNEKynxvdM9TEQtbQXJrWRj9sXXRohaYxObuAic+gYdTOrsYtk48gENG6GH4s +fxdX92XeWm2wUr0KXKOu+Mvtj/egk0bEMQloZe/tkjeOLAGzrJetXyGtxgIA+/XI +E/AyyNULHYFATZWx/XD0Q1s/VOZttPn6FG4qi5UogM/XqqCQbZ8C/DSj9RltQi02 +IGmr+CCS4Y9ACHq3HT9YfSFMPV+7OwC/fegLadsd2Bk6TwAi+WNs/48M/LATAsnH +MxFV61T/qHuabPNfmlirpe/ooMWEIAoKKvxght4CztYRK5QZA01BBgqePur4wqAw +JeAp0M+bFWEDvt6xRiijmb261WRTM2C5mqnlQFJSdZ6h9MzerBph4Zvl3USXzEMb +hXPSeIIA7TwEWeH3whqP6w6NnmcS94jCgXnmvv9uInSc/CAKz5h2HElLQroP1Mmh ++KnKOAiSQrr0vyuGjZyxebu7E5RWWS//G2FJrG+2WyOAq0rml8HcjWtZu0I54xYq +rk0SKXpUBAvLbXky9rmAM5MinasHDBnUe7zTjlNuathI+5SPJ83PK/d+0HF6zzud +nvjqR+fWa4N/3jZ0DRquE1gEUWkK7jLegPalIZiLW064nfi6j2q6HP8eiyHarnA0 +Mnwt2Q== +-----END CERTIFICATE----- +23sYiex6zj9qXDX7tsiuPs3HIxTXw +dBVaJ01yeo+BlyX4SaxmBRIvtothzDDdXmQ/9MfS8qW85vQV9AcgGRb8fqxIHhwb +FgzeYzpehR0pEAss2XZK9Q3hPLKwX8sewiDy+0tLyYayYtOqeSutaNbSMp17zZZu +x/GScbHUTGEw76nmElECOVw5VQAGpbQSsns0MRp3gtr6XZKA2LUv7eiolwV4i0e5 +zBfb+mUzVBZMVzGJhXyBExl8rx46EkjmfIoblvoipIm0hAN82HE4D6VDb1v695kC +WR7seI3gUBku6KornLFW4sIwNznvlmbOl3cRtOU= +-----END CERTIFICATE----- diff --git a/tests/key-tests/data/cert.dsa.1024.pem b/tests/cert-tests/data/cert.dsa.1024.pem similarity index 100% rename from tests/key-tests/data/cert.dsa.1024.pem rename to tests/cert-tests/data/cert.dsa.1024.pem diff --git a/tests/key-tests/data/cert.dsa.2048.pem b/tests/cert-tests/data/cert.dsa.2048.pem similarity index 100% rename from tests/key-tests/data/cert.dsa.2048.pem rename to tests/cert-tests/data/cert.dsa.2048.pem diff --git a/tests/key-tests/data/cert.dsa.3072.pem b/tests/cert-tests/data/cert.dsa.3072.pem similarity index 100% rename from tests/key-tests/data/cert.dsa.3072.pem rename to tests/cert-tests/data/cert.dsa.3072.pem diff --git a/tests/cert-tests/data/chain-512-ca.pem b/tests/cert-tests/data/chain-512-ca.pem new file mode 100644 index 0000000000..57b9850fae --- /dev/null +++ b/tests/cert-tests/data/chain-512-ca.pem @@ -0,0 +1,45 @@ +-----BEGIN CERTIFICATE----- +MIIDATCCAbmgAwIBAgIUf62L1YAmuKuNR4Bnwn4FEjFDpOcwPQYJKoZIhvcNAQEK +MDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMC +AUAwDzENMAsGA1UEAxMEQ0EtMTAgFw0xOTEyMTgxMjUyMjZaGA85OTk5MTIzMTIz +NTk1OVowEzERMA8GA1UEAxMIc2VydmVyLTIwgZswEAYHKoZIzj0CAQYFK4EEACMD +gYYABAGxhmDvIvu97o66LrAU40sO9Mqh78UpxNpdsDD8tD0aDhOivP2WK/9LqSBJ +uaIIzY4pQyNAHdp8WFnmwiutiMnXHgGcps4Mw7gEKMlQKDP8zS2GSkJt9r0ct6jY ++39JQ+fM0PPcxlyFMQlLTMwcFKPAH+stA3MqxroPLHpeds9u1HcrXaN3MHUwDAYD +VR0TAQH/BAIwADAUBgNVHREEDTALgglsb2NhbGhvc3QwDwYDVR0PAQH/BAUDAweA +ADAdBgNVHQ4EFgQUjYaF/lZImEi+LQtLIh9y035UucAwHwYDVR0jBBgwFoAUmoMA +sMqoL0N4sF0RT5M2mxyQrs8wPQYJKoZIhvcNAQEKMDCgDTALBglghkgBZQMEAgGh +GjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCAUADggEBAJ+FXZz9F6ie8EJc +OMA55zOr+SPgSqf/6E1xLNQqf/s44oyXkl3FfYXYitHc6vAp1LOD3WjXCDgSSM1R +Vp0qBKDO+7ESYVCIYdzoSC4OFwVSTID+rH1bv0m9ZMiPQB97vAzXJq0bGyijPZGb +TSUHjFNImGJdZq3B/uB0c/tQBLUi9YrVT1vYZ+lpOyMYaN21zFuDB6lc5sA6/k08 +I9J369z7iVCuibvXBo4roRL7wj+Cww5l6wjeFEo3Oj8wDoRHlxTk9ym40yvZinSY +PAESEyNkpLo6Ctyjz3HVxLmTZE/TyG/hNXionRXQ1uJZJOtdIMXouGCHStx2iFcL +2PSL3ng= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICgDCCAiqgAwIBAgIUZ91YTLTnOoGdoBoMZrk6sdNguM0wDQYJKoZIhvcNAQEL +BQAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xOTEyMTgxMjUyMjZaGA85OTk5MTIzMTIz +NTk1OVowDzENMAsGA1UEAxMEQ0EtMTCCAVIwPQYJKoZIhvcNAQEKMDCgDTALBglg +hkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCAUADggEPADCC +AQoCggEBALYQaHpuXl4jEi7KpErGCCcQ0c50NuEnUzfU92tGJzXNLnOdKQVxW7ma +ptJ1Lb+f2D+utL61/eyG32DLosaPiTDi8R7P8O/ivXEhwHe8ScH/B1DAHfbnRNv8 +MC4nTq8MavMIm/9UE7j19C+uhLFFPExnRohaFZXLqKbAiadMYyEqROjibpmBcyxY +StdQNOQ0qBC/NkPRh+kSA6vN+ZIsqizl/PNfgd7am7c793fAb42U36q3ymUpCtkM +GhCoVx625sVYOKIHdtzGOwTV277TcVnflg+BwK97p0FRUh0envFENI1uzz4Et5Mn +swTDE/KoYVM8EIDeQcFAnF5tVxZfSosCAwEAAaNkMGIwDwYDVR0TAQH/BAUwAwEB +/zAPBgNVHQ8BAf8EBQMDB4QAMB0GA1UdDgQWBBSagwCwyqgvQ3iwXRFPkzabHJCu +zzAfBgNVHSMEGDAWgBS4/wLP/kals1V+CMMSsHiF9p0QajANBgkqhkiG9w0BAQsF +AANBAGmYNtQ0MIrtLCUs+WHJUE6nTC4DQHjNJ9eiFDQtDiup7FOZlLPWuxBv8IG+ +zXVfCc9BxrAQSAGiwyx4gKDT95I= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBZzCCARGgAwIBAgIUR3WhmgKRJu05fANwlblt/s9l6jQwDQYJKoZIhvcNAQEL +BQAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xOTEyMTgxMjUyMjZaGA85OTk5MTIzMTIz +NTk1OVowDzENMAsGA1UEAxMEQ0EtMDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDK +s7lICbgRDeRXEPqZagrNUi5TjJkMB4NfU9gb0OUi3Vsna8Vi/2CLqJQ+jttINcS6 +knobMwssEAnkLe+V+KTzAgMBAAGjQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0P +AQH/BAUDAwcGADAdBgNVHQ4EFgQUuP8Cz/5GpbNVfgjDErB4hfadEGowDQYJKoZI +hvcNAQELBQADQQAFKda31c8Dsue9JpR4med450ZroHT5WrGkH6T7XwczXfNc8W9w +nKPMoJLZK47HSWqUdniMRPX9XydqxaVug5Rj +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/chain-512-leaf.pem b/tests/cert-tests/data/chain-512-leaf.pem new file mode 100644 index 0000000000..f8a4ce1c9b --- /dev/null +++ b/tests/cert-tests/data/chain-512-leaf.pem @@ -0,0 +1,52 @@ +-----BEGIN CERTIFICATE----- +MIICYTCCAUmgAwIBAgIUGaahqSHZnDisEpq7NdDyajix8GgwDQYJKoZIhvcNAQEL +BQAwDzENMAsGA1UEAxMEQ0EtMTAgFw0xOTEyMTgxMjU0MzVaGA85OTk5MTIzMTIz +NTk1OVowEzERMA8GA1UEAxMIc2VydmVyLTIwXDANBgkqhkiG9w0BAQEFAANLADBI +AkEAmmMomDw6UyEVGsCdhWB3BbgJNP+T4bFMnovfcwl5GBI9htuMataGBWB202Nf +ICItBqPCI7Mu8kO4xsz44ejRNQIDAQABo3cwdTAMBgNVHRMBAf8EAjAAMBQGA1Ud +EQQNMAuCCWxvY2FsaG9zdDAPBgNVHQ8BAf8EBQMDB6AAMB0GA1UdDgQWBBSuKggm +nzHbFCskfAJqxOV+hLlfLDAfBgNVHSMEGDAWgBS0Hn5aBNJdFPII6ad0f/eSfxEL +MjANBgkqhkiG9w0BAQsFAAOCAQEAQZR/tbDYzzDo3CL/lFmk/dXs6/qMo3B/9xLV +HGhj2IqjRNY4Qo4V05a+Xw9bUxvmuae+BrNGOK4ouwhsmZerTPIhE6u1PWZclcQm +Ean6r8uXWKsCdUd1zMP/oZUuWiQga/7+Ej2MT/E7dxhfHoAQin9B6NGIJB8pG0KX +FU74gSlsA+bQFBEyIYDgJXj6Oht0ggyIzzy6nPzi+7cRgzmqhfCyoZoZd8vn1fi3 +Lvqt3XbfDITTBhr9FtBr0LQNbe5/j74nXKUiIYiu8EkDC0hTMK+s2q9qNi43+naR +8h0irt/ZBUIJrJWtPSJsVDHKXkEtwYaI+HNNGE/Zjk4wS3ydBg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDEjCCAfqgAwIBAgIUTJoYUgrAGOyE94h5R67I+cbdBtYwDQYJKoZIhvcNAQEL +BQAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xOTEyMTgxMjU0MzRaGA85OTk5MTIzMTIz +NTk1OVowDzENMAsGA1UEAxMEQ0EtMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAM+nUak8iG8Ff5u08dsTvdQsb+xVnHiL+cPOrAaDN76VpifZKE5fHMcy +LYJi3cXZHgIUMTTHqU0X9wef5GbRDdmH82073OHE4XTaf0NJckGLegqxt7xRN24b +bUQquy1Xr1mSBoVGPOZXkS75nZ0vLFXcP4hF8J4M2y8veCnJJZB/y110F+j8g2uJ +guXozXXk9/64obxycy/k6JSzCr/WjEhg0dL5t/rnpUxxMkqJqd8P5YpCabhP0mjh +gCb0R0UX5B4R3MqeQ4TwXbf9pI4EtEIGtYBmgWczEV300oe+CixiKABvxF6Q37Eg +N+c8Yjyod10M55YcOttIYrO/dAGOfOcCAwEAAaNkMGIwDwYDVR0TAQH/BAUwAwEB +/zAPBgNVHQ8BAf8EBQMDB4QAMB0GA1UdDgQWBBS0Hn5aBNJdFPII6ad0f/eSfxEL +MjAfBgNVHSMEGDAWgBSCt0sRc+AtcCAfvZZvqd9gBkYnyTANBgkqhkiG9w0BAQsF +AAOCAQEAKvrBV31kz41qjkk2QQ6DR2COVfOmc9LHbeJMr/s1vFxyNJ1htsfHh2HW +lvYyqzS0m36RApCJXT1Z1dzvEp45GoCtaISVq9jenKSm7nLCqnhbPWFr3nMDWPPG +c9lV7PlPB8myeHhZpGK7df1VcTIJN2u/SI7P4RnaUck2176yJVyU4StOUcmbd+Yn +I7LWpxwVmNkcOwI5IR0zdbVWcLP9+2kL8Kju8koql1lrlqTnucRY+2sD1sjaTTIz +kQVrELO0l9EAAC5La6u9dACkOhppYFZIw++hbtEXxgkEYnoGzvptsNi3w+CrQ/g8 +7cuIfQFBCX/9C6APbz1o4FHJCKsDVw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC8TCCAdmgAwIBAgIUMPdFIRYbJUlkWLtbOqcbIE9nbkkwDQYJKoZIhvcNAQEL +BQAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xOTEyMTgxMjU0MzRaGA85OTk5MTIzMTIz +NTk1OVowDzENMAsGA1UEAxMEQ0EtMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALS9CFlh0IrSuEjuiDRnznblJiTWXuojqTp61CZkJzEt3mTAbAuvJGZa +wG6gQxMIIYwxtbdjC58wP9ZucJgFxVgD4211QBcwACxDCbGyUsxTZZrQkCMun6Y/ +YMUSu8Og6twIx++vAO+N0Eaa/FrUcYa0Hj8XxUgL8/CT40OJC/i49OuA9Bs3L6zj +aMEADZ/f3/33oo6jgOdRmUmVOuovNg02h4NjBk3OlKD03vZ2ygVzmXme0YBM0o3Z +SmMqhut96fI8taqcCV5ccNNsp6HHIg0GGuWtBB7rTkEFBhQg53AMrzgOpQ64Pueg +LXLdRdOVKRkX1lLvboRMbjlM5HtOTX8CAwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB +/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBSCt0sRc+AtcCAfvZZvqd9gBkYn +yTANBgkqhkiG9w0BAQsFAAOCAQEAEjS+iRmeALeQIVvU4VztUmqp7FtkdD1P92xu +yuvPTKGmhRRwDNB1GleHUt4BFKF9EPTW9PK9VJTjNiivPcm9u6zjRENb95l7NOsY +5AYMZFyR+jRT7cxbDYGuQ9yc8nRF1mH6L0osfgMIub/Z7noMgSGhzQx5E56Q2CPj +QVLUH37Hkj0hAWsccFuiicZSeAsxSWAr7+qRKHWJKgJ1sBiDkXlsfuoUYJCFd4Q7 +LQraLxDpVfB44E+rxFRJoLYzExeTXhDvCJYNPd7OUd6WIOeq0yjaj1v8dn5pV6Vh +kockuY1rAy2fNlOoIEG9qVvWJ/vj+Uq9wUomW3wfyF8es74V2A== +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/chain-512-subca.pem b/tests/cert-tests/data/chain-512-subca.pem new file mode 100644 index 0000000000..261137b28a --- /dev/null +++ b/tests/cert-tests/data/chain-512-subca.pem @@ -0,0 +1,46 @@ +-----BEGIN CERTIFICATE----- +MIIB3zCCAYmgAwIBAgIUJCiWOylfZcYmHICa+LwzULsEY5swDQYJKoZIhvcNAQEL +BQAwDzENMAsGA1UEAxMEQ0EtMTAgFw0xOTEyMTgxMjUzMjdaGA85OTk5MTIzMTIz +NTk1OVowEzERMA8GA1UEAxMIc2VydmVyLTIwgZswEAYHKoZIzj0CAQYFK4EEACMD +gYYABAEkG+6EOxALvWgJfPPfTj6aM++G/Clb6qYKb7EKHKArIngKFB9jLmGCC9Nh ++2Fg75z9GjP1UNqdlwcuTYsFzIdFfgD7POQCoU/mQKGHCHrNgTd+yhbpkjIzMf94 +Pd37B3KWoMwpt42vi5oEv1wMaMT/9bgZtiTh5cFdYc53MpVqj9GAiaN3MHUwDAYD +VR0TAQH/BAIwADAUBgNVHREEDTALgglsb2NhbGhvc3QwDwYDVR0PAQH/BAUDAweA +ADAdBgNVHQ4EFgQUbktH02YQyE/FHx+/fWGUBEXQYxwwHwYDVR0jBBgwFoAUTXqT +trlGUSx93s8ATWGeoEDKrqcwDQYJKoZIhvcNAQELBQADQQAFHfmevmaYUZcMZLDY ++BrwecSLCxPWHd6T1QDhn6x7P8aVsY/8cLIn7ACURxR+ia2fG/px0o2+wV+bT+A5 +sDIv +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICSjCCATKgAwIBAgIUA6RF1rEvvPbBSliyFqD77roShB0wDQYJKoZIhvcNAQEL +BQAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xOTEyMTgxMjUzMjdaGA85OTk5MTIzMTIz +NTk1OVowDzENMAsGA1UEAxMEQ0EtMTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDl +cI6PmIU+IFbj7ykZkLWuGIlR8uF3CAyj2fq4iBeEk10hEA+d5Oz2Yp7YwmnTJvb6 +oO2XLPyLyE3htVmbaEj5AgMBAAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0P +AQH/BAUDAweEADAdBgNVHQ4EFgQUTXqTtrlGUSx93s8ATWGeoEDKrqcwHwYDVR0j +BBgwFoAUCWYWUmG4wYva7UCkhcdTRTJXTIQwDQYJKoZIhvcNAQELBQADggEBABeg +Ev6JXb78IRCeK11I/B30HW17ejR+wFBereGpuIxu6HtDHVl2Au1+vJ+ddK7hVvL5 +Z18RozUyvwpCAQ5DqC9SzabAfIszM7PvEZ7/j5xd11L+YEicd9g72jVKwP2VSIJL +9dfHBFvIlh7NrspwVipPSp5bDCbrTTOpNPHHQuTNO51dw9178UfmQhg4hIrMnGsW +edT5KswtixFekzW36giJ673tnz/amcDJxJC78sXFnpYsIrTRFqU2/rrd7Yd9Fmwv +4D2vvBVmRKVYTEz9W5tgMEQWvzSomQj5ejzHzcomXXp/W96XDKWVjHE43EmqquTE +rlIkVCK/Yf1h99U2+Ag= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC8TCCAdmgAwIBAgIUWV9HK/UEiOT8ZpQq2w2glOshGeUwDQYJKoZIhvcNAQEL +BQAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xOTEyMTgxMjUzMjdaGA85OTk5MTIzMTIz +NTk1OVowDzENMAsGA1UEAxMEQ0EtMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAMVYMEUmPcAGVgJkwMSser5bJWUEzD7PtXUzzeu3UAUl5D/B5I7vlZ3A +1T0ZlSdTB0N73HHg/FFE90jUrVoj/yI6Ml1otPZ1tYjH2eLGN+/NCkFVKSzxuNo3 +DURRRFoWMpk4kpmaCYkWoKMTYZtkcserm+Lv0kpBFT12+iT/GCPBmaqmcbMK8sbS +Pz45BVdRFwln8oyLKSunXyYrBd2LHlLkhag0YivojAxuE8IyEE2SkndGO1JC8WFB +DMwGrllrkAiZSZKdTEI4377r5LrgYXv7w9tr5jgkrABUohie8SpJOlJqcjzfaF/1 +QJrxZSwSUvOl4EZVziEBSnlwzrfk6G0CAwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB +/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBQJZhZSYbjBi9rtQKSFx1NFMldM +hDANBgkqhkiG9w0BAQsFAAOCAQEAXTYMg/3eQ46E+s6OoZ3wb4diYXfblgvdAlL4 +LYLGeQJ+Jys5iJ6cou+Ck3xsSpXr5+6ElwyP/T8DieHdZHYy/JC/EhU8O+nxsszr +zjxJGQWVBqlzsVSsELhJcH6OC5xhUw8F1Xpy95trpRTSQB7fkxrqWnEIgacKUuns +s5ntL3BJzOhNnxZM7dydFL3citM1lrfDLr2pErrXPFpLbul0yCT4sWZeriKbj4vh +7N/1CQ2cvChOSHAbB9KMUeCBDJgWP7u4zqVLQv/mTfjB0tXRWYMLsr2koyCOhcWj +MA5NnUuEfXtLLcCUbekk26SgYLKz+AGk6gAMN7ofsYLPOtTShw== +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/chain-eddsa.pem b/tests/cert-tests/data/chain-eddsa.pem new file mode 100644 index 0000000000..7ec3c7d511 --- /dev/null +++ b/tests/cert-tests/data/chain-eddsa.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIBVTCCAQegAwIBAgIMWTey0hmzf1cwE8cgMAUGAytlcDAPMQ0wCwYDVQQDEwRD +QS0wMCAXDTE3MDYwNzA4MDEyMloYDzk5OTkxMjMxMjM1OTU5WjATMREwDwYDVQQD +EwhzZXJ2ZXItMTAqMAUGAytlcAMhAF3ZEMxi347Ou63o6HwHrpUhncqfgLzhINGJ +CnjZaQV0o3cwdTAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDAP +BgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQWBBR20C3eeH0drMbAVG6WD7GLs5frmTAf +BgNVHSMEGDAWgBQAUYZc7T7EeTn8/8kePVPQLtbgnjAFBgMrZXADQQBPnuU/zF0X +QKj9JXs6+L9Gftp8w6mVIaCGY889MlL0moWofP25xciTRyT+2jK7zLOO7e0JRd05 +ZkncSAOOnPwB +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBHDCBz6ADAgECAgxZN7LSFuPNiCPnfi4wBQYDK2VwMA8xDTALBgNVBAMTBENB +LTAwIBcNMTcwNjA3MDgwMTIyWhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT +BENBLTAwKjAFBgMrZXADIQBSw/TcTaKk/YxoN+9IG7qtBwppX22yPDsjfYgas1x5 +oKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1UdDgQW +BBQAUYZc7T7EeTn8/8kePVPQLtbgnjAFBgMrZXADQQDbWwqI9Tz/74Dl7FkpbH/c +JntRKnYF9KWVuFmLq+5VTmRnEUsKeS/tIZUcSB8xh3yISoMqC87KA2hRQHKmuSQJ +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/commonName.cer b/tests/cert-tests/data/commonName.cer new file mode 100644 index 0000000000..91d02fdd85 --- /dev/null +++ b/tests/cert-tests/data/commonName.cer @@ -0,0 +1,52 @@ +X.509 Certificate Information: + Version: 3 + Serial Number (hex): 06376c00aa00648a11cfb8d4aa5c35f4 + Issuer: CN=Root Agency + Validity: + Not Before: Tue May 28 22:02:59 UTC 1996 + Subject: CN=Root Agency + Subject Public Key Algorithm: RSA + Algorithm Security Level: Export (512 bits) + Modulus (bits 512): + 00:81:55:22:b9:8a:a4:6f:ed:d6:e7:d9:66:0f:55:bc + d7:cd:d5:bc:4e:40:02:21:a2:b1:f7:87:30:85:5e:d2 + f2:44:b9:dc:9b:75:b6:fb:46:5f:42:b6:9d:23:36:0b + de:54:0f:cd:bd:1f:99:2a:10:58:11:cb:40:cb:b5:a7 + 41 + Exponent (bits 24): + 01:00:01 + Extensions: + Common Name (not critical): + For Testing Purposes Only Sample Software Publishing Credentials Agency + Unknown extension 2.5.29.1 (not critical): + ASCII: 0>.....-...O..a!..dc..0.1.0...U....Root Agency...7l...d......\5. + Hexdump: 303e801012e4092d061d1d4f008d6121dc166463a1183016311430120603550403130b526f6f74204167656e6379821006376c00aa00648a11cfb8d4aa5c35f4 + Signature Algorithm: RSA-MD5 +warning: signed using a broken signature algorithm that can be forged. + Signature: + 2d:2e:3e:7b:89:42:89:3f:a8:21:17:fa:f0:f5:c3:95 + db:62:69:5b:c9:dc:c1:b3:fa:f0:c4:6f:6f:64:9a:bd + e7:1b:25:68:72:83:67:bd:56:b0:8d:01:bd:2a:f7:cc + 4b:bd:87:a5:ba:87:20:4c:42:11:41:ad:10:17:3b:8c +Other Information: + Fingerprint: + sha1:fee449ee0e3965a5246f000e87fde2a065fd89d4 + sha256:8b13dbb25eb339a630c76c810d14b44b552e68dc10a93e82e754da23f858774a + Public Key ID: + sha1:38596dac2a46c9002309905e1f02c1fb5df724cd + sha256:73a97a992bfd29b91ef23175b367db9c561c516f634f759e3d430230a3d0695c + Public Key PIN: + pin-sha256:c6l6mSv9Kbke8jF1s2fbnFYcUW9jT3WePUMCMKPQaVw= + +-----BEGIN CERTIFICATE----- +MIIByjCCAXSgAwIBAgIQBjdsAKoAZIoRz7jUqlw19DANBgkqhkiG9w0BAQQFADAW +MRQwEgYDVQQDEwtSb290IEFnZW5jeTAeFw05NjA1MjgyMjAyNTlaFw0zOTEyMzEy +MzU5NTlaMBYxFDASBgNVBAMTC1Jvb3QgQWdlbmN5MFswDQYJKoZIhvcNAQEBBQAD +SgAwRwJAgVUiuYqkb+3W59lmD1W8183VvE5AAiGisfeHMIVe0vJEudybdbb7Rl9C +tp0jNgveVA/NvR+ZKhBYEctAy7WnQQIDAQABo4GeMIGbMFAGA1UEAwRJE0dGb3Ig +VGVzdGluZyBQdXJwb3NlcyBPbmx5IFNhbXBsZSBTb2Z0d2FyZSBQdWJsaXNoaW5n +IENyZWRlbnRpYWxzIEFnZW5jeTBHBgNVHQEEQDA+gBAS5AktBh0dTwCNYSHcFmRj +oRgwFjEUMBIGA1UEAxMLUm9vdCBBZ2VuY3mCEAY3bACqAGSKEc+41KpcNfQwDQYJ +KoZIhvcNAQEEBQADQQAtLj57iUKJP6ghF/rw9cOV22JpW8ncwbP68MRvb2Savecb +JWhyg2e9VrCNAb0q98xLvYeluocgTEIRQa0QFzuM +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/crit-extensions.pem b/tests/cert-tests/data/crit-extensions.pem index 1932f15ac6..382518d676 100644 --- a/tests/cert-tests/data/crit-extensions.pem +++ b/tests/cert-tests/data/crit-extensions.pem @@ -9,9 +9,9 @@ A1UECBMGQXR0aWtpMQswCQYDVQQGEwJHUjCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEApcbOdUOEv2SeAicT8QNZ93ktku18L1CkA/EtebmGiwV+OrtEqq+EzxOY HhxKOPczLXqfctRrbSawMTdwEPtC6didGGV+GUn8BZYEaIMed4a/7fXlEjsT/jMY nBp6HWmvRwJgeh+56M/byDQwUZY9jJZcALxh3ggPsTYhf6kA4wUCAwEAAaNZMFcw -EwYKcgsMDQ4PEBEBBQEB/wQCyv4wEwYEGAEFAQEB/wQIBAa+r8r++vowDAYDVR0T +EwYKMgsMDQ4PEBEBBQEB/wQCyv4wEwYEKgEFAQEB/wQIBAa+r8r++vowDAYDVR0T AQH/BAIwADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJUIspyNl8wDQYJKoZIhvcN -AQELBQADgYEAdjqRZzydF4n3TULyfijErRJumCsQR+ClN67Ugki8yje0y1tOSqgc -qz7JrxHEg9iEzgjS8DeIegcYar/hGMRmhcR4peqNq0/9Dp8eVxZk4mJIhmprDLX9 -sZlt0y+kUci35DcdOfnVMPlogp2iG/arUfmKdvpRmGuXaEC36L5j/l0= +AQELBQADgYEAo04onJLLRdKJJLj2dUghazZzzw2e8aM/3R2c8J9+mGTQ0pM1s7oz +uagrpJO+hdfU0mHymGW7Ci3t7QnOP1MEISUF3rvkpOQ5byFZuKoDxKdP3xIUMmBq +TaDEyXXKqW0G1fUaWLzjHtWnlBA7PHxk1Y3og10OgLZJNPIzIB3FBgM= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/crl-demo3.pem b/tests/cert-tests/data/crl-demo3.pem index 1e04338c67..a91b1f905a 100644 --- a/tests/cert-tests/data/crl-demo3.pem +++ b/tests/cert-tests/data/crl-demo3.pem @@ -1,5 +1,5 @@ X.509 Certificate Revocation List Information: - Version: 1 (default) + Version: 1 Issuer: OU=VeriSign Commercial Software Publishers CA,O=VeriSign\, Inc.,L=Internet Update dates: Issued: Wed Mar 08 09:00:11 UTC 2017 diff --git a/tests/cert-tests/data/crq-cert-no-ca-explicit.pem b/tests/cert-tests/data/crq-cert-no-ca-explicit.pem new file mode 100644 index 0000000000..df06ad27b6 --- /dev/null +++ b/tests/cert-tests/data/crq-cert-no-ca-explicit.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIEUzCCAwugAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDEw5HbnVU +TFMgVGVzdCBDQTAeFw0wNzA0MjIwMDAwMDBaFw0wODA0MjEwMDAwMDBaMHsxFTAT +BgNVBAMTDENpbmR5IExhdXBlcjEXMBUGA1UECxMOc2xlZXBpbmcgZGVwdC4xEjAQ +BgNVBAoTCUtva28gaW5jLjEPMA0GA1UECBMGQXR0aWtpMQswCQYDVQQGEwJHUjEX +MBUGCgmSJomT8ixkAQETB2NsYXVwZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ +AoGBAKXGznVDhL9kngInE/EDWfd5LZLtfC9QpAPxLXm5hosFfjq7RKqvhM8TmB4c +Sjj3My16n3LUa20msDE3cBD7QunYnRhlfhlJ/AWWBGiDHneGv+315RI7E/4zGJwa +eh1pr0cCYHofuejP28g0MFGWPYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjggGWMIIB +kjASBgMqAwQECwABAgMEBQYHqqvNMBIGAy4HCAQLAAECAwQFBgeqq80wGgYGKgME +BQYHBBAdNM1a0GXcJ8F+lEewqqynMFwGCCoDj////38HBFAXjw5BPwQcydZK9kvz +tmx86sb6NKTXftZMlosmx2FwlEX0DZygoACRr30hJ4nAC3OHsdDXq2I91AKdS4bb +NlNiHTTNWtBl3CfBfpRHsKqspzBSBgYqg5nLAAcESNZK9kvztmx86sb6NKTXftZM +losmx2FwlEX0DZygoACRr30hJ4nAC3OHsdDXq2I91AKdS4bbNlNiHTTNWtBl3CfB +fpRHsKqspzANBgMoAQUEBgQEyv6+rzATBgoyCwwNDg8QEQEFAQH/BALK/jATBgQo +AQUBAQH/BAgEBr6vyv76+jAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoGCCsGAQUF +BwMEMB0GA1UdDgQWBBRdQK3wzpRAlYt+mZQdklQiynI2XzAfBgNVHSMEGDAWgBRN +VrdqAFjxZ5L0pnVVG45TAQPvzzANBgkqhkiG9w0BAQsFAAOCATEAb03oSVOA77CG +xSJ5/o28CM3BOX5L6yuXUJWN667yZ9scJqqXyE+7sxm+bFAUNz4b+GKjnikTEp5I +BRx/YlnW0PeuBifjNrX7uSXgFYHzU+FMbxc82xRE4zVtciNkE5UvCPTyfteKKRgw +0b2Ov/79NlrJIoHi0dbe20Qhh8CGQ9FJLK+dgoNAugKcMgP6WiERkqeetpXQGQSH +WuhyxU7MMRACtuhuJ/elrctrp5YN1Ug0DCsFxJz75wEIJBVECluWTzDfyTA2EvQw +zMH7Ko8T86LXguW6KkNznajgc6GF4o+nT7ufpZgz1ocMlSYA5A0pCYWmxRkcFFso +OQwrnNDRTLFIvZGDHEG1pNWTqgVvaazkduRyDmEZeNZgFf0FbV3pG1mIUaFAy8Am +t90uFONJIA== +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/crq-cert-no-ca-honor.pem b/tests/cert-tests/data/crq-cert-no-ca-honor.pem new file mode 100644 index 0000000000..33086b7bbf --- /dev/null +++ b/tests/cert-tests/data/crq-cert-no-ca-honor.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIEZzCCAx+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDEw5HbnVU +TFMgVGVzdCBDQTAeFw0wNzA0MjIwMDAwMDBaFw0wODA0MjEwMDAwMDBaMHsxFTAT +BgNVBAMTDENpbmR5IExhdXBlcjEXMBUGA1UECxMOc2xlZXBpbmcgZGVwdC4xEjAQ +BgNVBAoTCUtva28gaW5jLjEPMA0GA1UECBMGQXR0aWtpMQswCQYDVQQGEwJHUjEX +MBUGCgmSJomT8ixkAQETB2NsYXVwZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ +AoGBAKXGznVDhL9kngInE/EDWfd5LZLtfC9QpAPxLXm5hosFfjq7RKqvhM8TmB4c +Sjj3My16n3LUa20msDE3cBD7QunYnRhlfhlJ/AWWBGiDHneGv+315RI7E/4zGJwa +eh1pr0cCYHofuejP28g0MFGWPYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjggGqMIIB +pjASBgMqAwQECwABAgMEBQYHqqvNMBIGAy4HCAQLAAECAwQFBgeqq80wGgYGKgME +BQYHBBAdNM1a0GXcJ8F+lEewqqynMFwGCCoDj////38HBFAXjw5BPwQcydZK9kvz +tmx86sb6NKTXftZMlosmx2FwlEX0DZygoACRr30hJ4nAC3OHsdDXq2I91AKdS4bb +NlNiHTTNWtBl3CfBfpRHsKqspzBSBgYqg5nLAAcESNZK9kvztmx86sb6NKTXftZM +losmx2FwlEX0DZygoACRr30hJ4nAC3OHsdDXq2I91AKdS4bbNlNiHTTNWtBl3CfB +fpRHsKqspzANBgMoAQUEBgQEyv6+rzATBgoyCwwNDg8QEQEFAQH/BALK/jATBgQo +AQUBAQH/BAgEBr6vyv76+jAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsG +AQUFBwMEMA8GA1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2S +VCLKcjZfMB8GA1UdIwQYMBaAFE1Wt2oAWPFnkvSmdVUbjlMBA+/PMA0GCSqGSIb3 +DQEBCwUAA4IBMQA3f4f0ra9YXf9F9yhE0xhuNisvD/txXNZsOXr0/50xdA+vB6eJ +EGuSWgjWbTgdf5LLt0Q8yUkSKepuj1DwGEtMQhtWD/0tHlYkwL9rfCLkwnnXr+fT +FpbjQFISTAjdNLTn15M9jGydtHhvbJnGltH7ZE07tzgFaQfX6boTR4ox4EdHcAtf +xet2UOpVGR+EBpOzQsawjRp6CV7gx0N6qvRR0BLOSnvLY9MN0yGSIjjjB2Mq5uJc +3MnJu1O7fTflJBARZvehwKjrNLyTRxNm3+cp4sUbtOx/mOrCI3FxfYPA3ku2Ur+a +MWdIbITDfmurLqOzPSkAViSHpEnnUY9P526RGOaUjAMR0nHJ7JZkJb8Pu98I89v5 +IkpvNB4i3DRx8xrcVCXo7ll2lMsMn62ioasB +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/crq-cert-no-ca.pem b/tests/cert-tests/data/crq-cert-no-ca.pem new file mode 100644 index 0000000000..7cd684b20f --- /dev/null +++ b/tests/cert-tests/data/crq-cert-no-ca.pem @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDCzCCAcOgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDEw5HbnVU +TFMgVGVzdCBDQTAeFw0wNzA0MjIwMDAwMDBaFw0wODA0MjEwMDAwMDBaMHsxFTAT +BgNVBAMTDENpbmR5IExhdXBlcjEXMBUGA1UECxMOc2xlZXBpbmcgZGVwdC4xEjAQ +BgNVBAoTCUtva28gaW5jLjEPMA0GA1UECBMGQXR0aWtpMQswCQYDVQQGEwJHUjEX +MBUGCgmSJomT8ixkAQETB2NsYXVwZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ +AoGBAKXGznVDhL9kngInE/EDWfd5LZLtfC9QpAPxLXm5hosFfjq7RKqvhM8TmB4c +Sjj3My16n3LUa20msDE3cBD7QunYnRhlfhlJ/AWWBGiDHneGv+315RI7E/4zGJwa +eh1pr0cCYHofuejP28g0MFGWPYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjUDBOMAwG +A1UdEwEB/wQCMAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMB8GA1Ud +IwQYMBaAFE1Wt2oAWPFnkvSmdVUbjlMBA+/PMA0GCSqGSIb3DQEBCwUAA4IBMQCP +Go/myevL2Ia/w3bOy+k/NdJ8OB5o6T42WHCcqvBOrcrQJEjhfZP8fl79KNGqNbxs +Fr6hwP1inY1yxdUtn0OCiKEB1Gp68QMb10eS7QarcMTiznUty8o+NHU9nV6I0kbO +4sBi6uMR5Hv0WQ6fQigjo11RQB7cN7mGqpMBzkCG47WLgk19uJhmFBaWNjtFDbY5 +e4mxQpAonicUoKlubJ1JY5gyZEjVriuWjnuxqhGyul7SnrzeSBQPR81gz1n1YjXJ +8aQ8FqyTG9tQkU0EkJwE1FxuFoqB0MHfTSn8THtZRLeSO5ymAQgmHU81IieTXFn9 +l37AavQFVpcyp1MHXIWn+CYjzQ38oo90SABRGMoiQSz0iRT+auCjnYZ3dNyax9HR +9zf+KHBvs5sSsslNWQb/ +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/csr-invalid.der b/tests/cert-tests/data/csr-invalid.der index fb1e744ce9..0c45cff5dd 100644 Binary files a/tests/cert-tests/data/csr-invalid.der and b/tests/cert-tests/data/csr-invalid.der differ diff --git a/tests/cert-tests/data/cve-2019-3829.pem b/tests/cert-tests/data/cve-2019-3829.pem new file mode 100644 index 0000000000..c771843ea7 --- /dev/null +++ b/tests/cert-tests/data/cve-2019-3829.pem @@ -0,0 +1,66 @@ +-----BEGIN CERTIFICATE----- +MIIFbjCCBFagAwIBAgIQPBKFvactgik351RXZ5opvTANBgkqhkiG9w0BAQUFADCB +tDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug +YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEuMCwGA1UEAxMl +VmVyaVNpZ24gQ2xhc3MgMyBDb2RlIFNpZ25pbmcgMjAxMCBDQTAeFw0xMjA4MTcw +MDAwMDBaFw0xNTA5MDkyMzU5NTlaMIGxMQswCQYDVQQGEwJVUzETMBEGA1UECBMK +Q2FsaWZvcm5pYTETMBEGA1UEBxMKTWVubG8gUGFyazEbMBkGA1UEChQSUk9CTE9Y +IENvcnBvcmF0aW9uMT4wPAYDVQQLEzVEaWdpdGFsIElEIENsYXNzIDMgLSBNaWNy +b3NvZnQgU29mdHdhcmUgVmFsaWRhdGlvbiB2MjEbMBkGA1UEAxQSUk9CTE9YIENv +cnBvcmF0aW9uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9Vg9Z0ee +4Tg3pwyw9CcQCINfJEWLhhvrB88pcnyMKxbB7v3qwwfi9VhL0fRM/AusgONWrQuW +2gftlw9ZtQMAWRkLvPHM3hXz5ch1XpvTmNqPQrSGfn9te7T9018ORa+WVuUCKzhL +xMSxG+VEpSRZsSdhq/chwA3fqhdUdq7fdxo6H3v/RV8bDUz1vRow+ygtAMneh8/x +kvnnyGZrW7BzJH6odOq4ASbx08czrKzqxnnoiFDmPuBTjv5wCLz0yHboHRQ/aC25 +GKXNioEVAGY/nWxVetFgJG8SwiIBR9C4KHaUqLHpPDU40WW7jGvybDaEGWXBQfTr +e1Dj/B3JY6SGhwIDAQABo4IBezCCAXcwCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMC +B4AwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL2NzYzMtMjAxMC1jcmwudmVyaXNp +Z24uY29tL0NTQzMtMjAxMC5jcmwwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcXAzAq +MCgGCCsGAQUFBwIBFhybdHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMBMGA1Ud +JQQMMAoGCCsGAQUFBwMDMHEGCCsGAQVLBwEBBGUwYzAkBggrBgEFBQcwAYYYaHR0 +cDovL29jc3AudmVyaXNpZ24uY29tMDsGCCsGAQUFBzAChi9odHRwOi8vY3NjMy0y +MDEwLWFpYS52ZXJpc2lnbnhjb20vQ1NDMy0yMDEwLmNlcjAfBgNVHSMEGDAWgFBt +48zqeyb0S8mOj9fwBSbv49KnnTARBglgIEgBhvhCAQEEBAMCBBAwFgYKKwYBBAGC +NwIBGwQIMAYBAQABAf8wDQYJKoZIhvcNAQEFBQADggEBeCwxl3jzuZqItKl531TN +TCCx3yoOfpZnGd7acfLyfeX8xDy7wakiOyC1nxv1FL7+H//Mku+F3Ne/A0HmnHx0 +sD9F1fYxweF8ubSoRqwUCXSMB4YZuwRAfUILon6YvyHU1kgPYwr0bsYu28l0liQY +YC7ALFbwO2ecxOYgg38mho+XRRXPd/PtOfmZ23yeKvrD0Hm499jC1OloFX+8G4ly +mz9Y8aoDBzkEYcXWn3Rz1p6EQJnWJzI/jSxMKIuI2/Ge+oIFZpEGK3Hec3sYqLs4 +EUOfWI4bNm1W+eU0E2bwuWmjddgTdOWHaYm7jMlCzkZw9qg2/IE2fTu7P7UuNOvw +av0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF4jCCBMqgAwIBAgIQJ1P4Bv6RNzIvW0CfHDGHXDANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMTAwMjA4MDAwMDAwWhcNMjAwMjA3MjM1OTU5WjCBtDEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQg +aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEuMCwGA1UEAxMlVmVy +aVNpZ24gQ2xhc3MgMyBDb2RlIFNpZ25pbmcgMjAxMCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAPUjS16l14q7MunUV/fv5Mcmfq0ZmP6onX2U9jZr +ENd1gTB/BGh/yyt1Hs0dCIzfaZSnN6Oce4DgmeHuN01fzjsU7obU0PUnNbwlCzin +jGOdF6MIpauw+81qYoJM1SHaG9nx44Q7iipPhVuQAU/Jp3YQfycDfL6ufn3B3fkF +vBtInGnnwKQ8PEEAPt+W5cXklHHWVQHHACZKQDy1oSapDKdtgI6QJXvPvz8c6y+W ++uWHd8a1VrJ6O1QwUxvfYjT/HtH0WpMoheVMF05+W/2kk5l/383vpHXv7xX2R+f4 +GXLYLjQaprSnTH69u08MPVfxMNamNo7WgHbXGS6lzX40LYkCAwEAAaOCAdYwggHS +MBIGA1UdEwEB/wQIMAYBAf8CAQAwcAYDVR0gBGkwZzBlBgtghkgBhvhFAQcXAzBW +MCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vY3BzMCoGCCsG +AQUFBwICMB4aHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwDgYDVR0PAQH/ +BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8w +BwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZl +cmlzaWduLmNvbS92c2xvZ28uZ2lmMDQGA1UdHwQtMCswKaAnoCWGI2h0dHA6Ly9j +cmwudmVyaXNpZ24uY29tL3BjYTMtZzUuY3JsMCgGA1UdEQQhMB+kHTAbMRkwFwYD +VQQDExBWZXJpU2lnbk1QS0ktMi04MB0GA1UdDgQWBBTPmanqeyb0S8mOj9fwBSbv +49KnnTArBgNVHSUEJDAiBggrBgEFBQcDAgYIKwYBBQUHAwMGDCqGOgABg4+JDQEB +ATAfBgNVHSMEGDAWgBR/02Wnwt3su/AwCfNDOfoCrzMxMzANBgkqhkiG9w0BAQUF +AAOCAQEAW46f07q+qa8aPmWBt8Fk9qJ460yABjqsIm6MK7xdhX/AjxAqysStliQB +aP9ltdEULCql2kmWr+nU/3GckwlKamH0S9HLtl8p/GgR5XL/Rg82KZlDnrPZrEeT +e+/E62aGp9aJVD6Umw2R8NIjasANN85G35WupGXGGL+kaXM/6IXQSH0o7/NfsAG0 +dbTRU0v0b/aki2a273g5xYgrZzIa70DAlPa30ouEoCZvikvF2NxU7uJKVqq8cuWT +5j+23m1seyVbAexvKWS38y4j9h+uES3GurnrCGCxLRsrnr6FdAodLipSkRgg18my +l4SPFiwyyhgSqsUgWcr7bTcy48WjhA== +-----END CERTIFICATE----- diff --git a/tests/key-tests/data/dsa-pubkey-1018.pem b/tests/cert-tests/data/dsa-pubkey-1018.pem similarity index 100% rename from tests/key-tests/data/dsa-pubkey-1018.pem rename to tests/cert-tests/data/dsa-pubkey-1018.pem diff --git a/tests/key-tests/data/dsa.1024.pem b/tests/cert-tests/data/dsa.1024.pem similarity index 100% rename from tests/key-tests/data/dsa.1024.pem rename to tests/cert-tests/data/dsa.1024.pem diff --git a/tests/key-tests/data/dsa.2048.pem b/tests/cert-tests/data/dsa.2048.pem similarity index 100% rename from tests/key-tests/data/dsa.2048.pem rename to tests/cert-tests/data/dsa.2048.pem diff --git a/tests/key-tests/data/dsa.3072.pem b/tests/cert-tests/data/dsa.3072.pem similarity index 100% rename from tests/key-tests/data/dsa.3072.pem rename to tests/cert-tests/data/dsa.3072.pem diff --git a/tests/cert-tests/data/dup-exts.pem b/tests/cert-tests/data/dup-exts.pem new file mode 100644 index 0000000000..9dcf74c9bb --- /dev/null +++ b/tests/cert-tests/data/dup-exts.pem @@ -0,0 +1,32 @@ +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIRAPABuQ6DmexEq0k9QQaewLcwDQYJKoZIhvcNAQELBQAw +bzELMAkGA1UEBhMCQ04xDDAKBgNVBAgMA1RKNTEMMAoGA1UECgwDVEpVMRQwEgYD +VQQLDAtiZWl5YW5neXVhbjENMAsGA1UEAwwEYjMyNjEfMB0GCSqGSIb3DQEJARYQ +bGpmcG93ZXJAMTYzLmNvbTAeFw0xOTA1MjkxMTU2NDBaFw0yOTA0MDYxMTU2NDBa +MHsxCzAJBgNVBAYTAkNOMQwwCgYDVQQIDANUSjUxCzAJBgNVBAcMAlRKMQwwCgYD +VQQKDANUSlUxFDASBgNVBAsMC2JlaXlhbmd5dWFuMQwwCgYDVQQDDANMUUwxHzAd +BgkqhkiG9w0BCQEWEGxqZnBvd2VyQDE2My5jb20wggEiMA0GCSqGSIb3DQEBAQUA +A4IBDwAwggEKAoIBAQDNKbU4xRcAGOyzHWgEQw0/smt+BJaLtbIvKdPKPTDzDxSl +Rud0rf1GWzG5vKhEzn3ruNwFs23JTu4OcXlkqp4sGqC5SQ06qVhe+eWhK+pjsCll +AG9ZQ40kNdsE5Bt9gbl38tdykM/a5bU4+h8S9P5XP+Vr/xGuB1aqw07NqaUsOs3+ +McH/ZFZQgSv8NDXl9eok5XEfaDZoRf29nAH/I+Ottbw37oW7omvMaC39CVKKmYMA +rdRJR/JrICsOKKnmEf6oLNErBGs3TLXo9/CiQJz/KeV9mHT/BfPumAbSlIXo6en8 +AVyA0V+N1bwUiBu58m9B+z0GlaxeQlxSvTn2wUx5AgMBAAGjggERMIIBDTAJBgNV +HRMEAjAAMB0GA1UdDgQWBBR/7mRMJ+8WoDdxiWO1eCLw0xH+0DAdBgNVHQ4EFgQU +f+5kTCfvFqA3cYljtXgi8NMR/tAwHwYDVR0jBBgwFoAU7S2I/yNy3nSqhHIFpnM6 +2/XWHHgwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF +BQcDBDAYBgNVHREEETAPgQ1oaEBiYi5hZGRyZXNzMBgGA1UdEgQRMA+CDWFiY2V3 +d3J3dC5jb20wMAYIKwYBBQUHAQEEJDAiMCAGCCsGAQUFBzAChhRodHRwOi8vbXku +Y2EvY2EuaHRtbDAMBgNVHSQEBTADgAEDMA0GCSqGSIb3DQEBCwUAA4ICAQCopPaM +SMElD42TZYn1+SnACRnH4YWH/gfG3utPeGVPkBmvV5Je7/gNMlhAQJL5YKdDYa4o +S1zjkNrRSlamH6akX4KyOm19tKRkU7dvtcTRF5CwXGcE2Yte6hc1gWeGzsx5taZL +y2yan7jhCHMqtN5R8AMTDdK4ORPu+sSrghAwkS6KSR0VlVmgbrJQ0WAxRk5bKm7v +R402pLhH2MjsJV48XqvaRTjyT96nbAZ4tdSoyJoHXRvUv9QpFtHSddlnPbEgxJWT +3OLbr+kIpWuaaZNjntLOqe9aPkLEhpw07sGLpT23dYqdehZd12O5+3olULXVBOgg +h8uF4Q9kRtJDpLCd70hUoiyovCxgPbFYUjvmtpCtmNkSCq/txWc3YqOwR+HPe83j +aAsIDnEO6cY6M3uqM1xradU5jzDeMKHJV7XDdXsq9nyQoZ8ytKlKcgM5kNoaqAkT +zeutyjGtQCkJr5V+5Te0JJinVL+xafpwP6749VRUaEWHWk2crkTKxu7/lUK6lgnS +70gLDO1QEJ/edPDC143eRP+dF/d7bN2UF1l+G0F4AcW7kB5mKgOBIWTZSnTmByz5 ++HI1touSh9dDcDDuZ7z6k2Obl0fuPY7ROLZQT3BaYGU4M2FGT4sJa6P6VtfufzEB +MHcS14u+3EvHBxhcI8N4WTrBE36FBzPk6R0g+A== +-----END CERTIFICATE----- diff --git a/tests/key-tests/data/enc2pkcs8.pem b/tests/cert-tests/data/enc2pkcs8.pem similarity index 100% rename from tests/key-tests/data/enc2pkcs8.pem rename to tests/cert-tests/data/enc2pkcs8.pem diff --git a/tests/key-tests/data/encpkcs8.pem b/tests/cert-tests/data/encpkcs8.pem similarity index 100% rename from tests/key-tests/data/encpkcs8.pem rename to tests/cert-tests/data/encpkcs8.pem diff --git a/tests/cert-tests/data/full.p7b.out b/tests/cert-tests/data/full.p7b.out index fc200f5e17..c4dd043e33 100644 --- a/tests/cert-tests/data/full.p7b.out +++ b/tests/cert-tests/data/full.p7b.out @@ -3,10 +3,10 @@ Signers: Signer's serial: 4de0b4ca Signature Algorithm: RSA-SHA256 Signed Attributes: - 1.2.840.113549.1.9.15: 306a300b060960864801650304012a300b0609608648016503040116300b0609608648016503040102300a06082a864886f70d0307300e06082a864886f70d030202020080300d06082a864886f70d0302020140300706052b0e030207300d06082a864886f70d0302020128 - 1.2.840.113549.1.9.4: 0420ca23e4b39a242dcece33fc776b6c9195595700f92201de19426d2d505576210f - 1.2.840.113549.1.9.5: 170d3135303630313139323232325a - 1.2.840.113549.1.9.3: 06092a864886f70d010701 + smimeCapabilities: 306a300b060960864801650304012a300b0609608648016503040116300b0609608648016503040102300a06082a864886f70d0307300e06082a864886f70d030202020080300d06082a864886f70d0302020140300706052b0e030207300d06082a864886f70d0302020128 + messageDigest: 0420ca23e4b39a242dcece33fc776b6c9195595700f92201de19426d2d505576210f + signingTime: 170d3135303630313139323232325a + contentType: 06092a864886f70d010701 Number of certificates: 2 diff --git a/tests/cert-tests/data/gost-cert-ca.pem b/tests/cert-tests/data/gost-cert-ca.pem new file mode 100644 index 0000000000..b29e1bd5a6 --- /dev/null +++ b/tests/cert-tests/data/gost-cert-ca.pem @@ -0,0 +1,65 @@ +X.509 Certificate Information: + Version: 3 + Serial Number (hex): 2b929d27439e7b085b2226481fe25b6a6bc7f7ee + Issuer: CN=Test CA + Validity: + Not Before: Mon Oct 07 18:51:37 UTC 2019 + Not After: Fri Oct 02 18:51:42 UTC 2037 + Subject: CN=Test CA + Subject Public Key Algorithm: GOST R 34.10-2012-512 + Algorithm Security Level: Future (512 bits) + Curve: TC26-512-A + Digest: STREEBOG-512 + ParamSet: TC26-Z + X: + b1:17:9e:1f:55:64:01:dd:03:09:12:17:8f:4a:38:e8 + 21:37:b9:50:d8:ff:0a:59:89:a0:0e:af:a3:cb:dc:67 + f9:b8:4e:7f:b6:61:f0:7b:30:7b:39:53:f2:16:dd:ca + 87:9b:c9:c1:fe:76:72:a8:6c:8f:a9:2c:02:e7:6a:5c + Y: + 46:20:fd:e0:95:ae:b1:ba:82:c0:9f:d5:a2:3d:f7:af + cc:79:84:e9:08:37:41:f0:84:d4:be:22:e1:0d:81:7b + 4b:c9:82:e6:8f:f9:4c:0f:dd:d6:a8:20:aa:d8:ad:c0 + 49:3c:11:4c:0e:a6:8d:e5:7b:5c:28:f8:d5:6d:0c:0b + Extensions: + Basic Constraints (critical): + Certificate Authority (CA): TRUE + Key Usage (critical): + Digital signature. + Certificate signing. + CRL signing. + Subject Key Identifier (not critical): + 74cf59b3e174a809e4debf3b7ad63094343e5a4a + Signature Algorithm: GOSTR341012-512 + Signature: + dc:07:df:59:f7:0c:84:1a:4d:88:3d:95:74:9e:60:d5 + af:cf:23:7e:46:4b:1b:4f:be:f0:2c:da:8a:4b:eb:6c + f3:46:bc:62:02:55:f2:39:43:d5:9a:45:e7:f9:70:41 + 2c:1b:12:63:34:5a:19:20:65:31:29:33:b1:0c:f5:49 + 7d:12:67:a9:f8:e9:f3:fd:c5:2b:11:08:9f:b2:d7:0a + 4f:3a:5c:a6:9d:30:7c:f0:7b:e7:2b:72:a7:e2:04:d2 + 9b:a7:f4:40:31:d2:ad:73:90:2d:60:80:2b:c3:da:c3 + 89:4d:dc:00:a9:01:5d:26:71:ff:1a:ac:80:3c:57:5b +Other Information: + Fingerprint: + sha1:652264ab8efad9f4e17b41f84e52d5244c2752ab + sha256:47f73d42e8b14f5c940dbfaaa4f13a6f7e64c26d72c0aa094885c55eb53fb06e + Public Key ID: + sha1:a60d930b427a73b45a8d8bc3f1b184d651f48239 + sha256:38c9e68a183c9e53f31550ca25f18eac10e14018e978844548667c033c69d68d + Public Key PIN: + pin-sha256:OMnmihg8nlPzFVDKJfGOrBDhQBjpeIRFSGZ8Azxp1o0= + +-----BEGIN CERTIFICATE----- +MIIB6zCCAVegAwIBAgIUK5KdJ0OeewhbIiZIH+JbamvH9+4wCgYIKoUDBwEBAwMw +EjEQMA4GA1UEAxMHVGVzdCBDQTAeFw0xOTEwMDcxODUxMzdaFw0zNzEwMDIxODUx +NDJaMBIxEDAOBgNVBAMTB1Rlc3QgQ0EwgaAwFwYIKoUDBwEBAQIwCwYJKoUDBwEC +AQIBA4GEAASBgFxq5wIsqY9sqHJ2/sHJm4fK3RbyUzl7MHvwYbZ/Trj5Z9zLo68O +oIlZCv/YULk3Ieg4So8XEgkD3QFkVR+eF7ELDG3V+Chce+WNpg5METxJwK3YqiCo +1t0PTPmP5oLJS3uBDeEivtSE8EE3COmEecyv9z2i1Z/AgrqxrpXg/SBGo0MwQTAP +BgNVHRMBAf8EBTADAQH/MA8GA1UdDwEB/wQFAwMHhgAwHQYDVR0OBBYEFHTPWbPh +dKgJ5N6/O3rWMJQ0PlpKMAoGCCqFAwcBAQMDA4GBANwH31n3DIQaTYg9lXSeYNWv +zyN+RksbT77wLNqKS+ts80a8YgJV8jlD1ZpF5/lwQSwbEmM0WhkgZTEpM7EM9Ul9 +Emep+Onz/cUrEQifstcKTzpcpp0wfPB75ytyp+IE0pun9EAx0q1zkC1ggCvD2sOJ +TdwAqQFdJnH/GqyAPFdb +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/gost-cert-new.pem b/tests/cert-tests/data/gost-cert-new.pem new file mode 100644 index 0000000000..e700dcf527 --- /dev/null +++ b/tests/cert-tests/data/gost-cert-new.pem @@ -0,0 +1,70 @@ +X.509 Certificate Information: + Version: 3 + Serial Number (hex): 335ae5d57d3e9438e00c7a73e4cf38331345bfee + Issuer: CN=Test CA + Validity: + Not Before: Mon Oct 07 20:37:12 UTC 2019 + Not After: Thu Oct 01 20:37:15 UTC 2037 + Subject: CN=Test Server + Subject Public Key Algorithm: GOST R 34.10-2012-512 + Algorithm Security Level: Future (512 bits) + Curve: TC26-512-A + Digest: STREEBOG-512 + ParamSet: TC26-Z + X: + 64:13:c4:c7:fc:9d:b1:20:7a:8a:f0:50:9e:c6:5f:72 + 01:35:e0:fd:98:db:48:33:c0:96:a0:57:51:ea:09:c2 + 14:f5:d1:90:d2:19:52:42:b9:b3:b1:cb:7d:94:b7:0b + 00:fa:4e:e0:bc:67:20:96:63:96:de:e8:89:66:f6:50 + Y: + 6e:7b:a4:9f:0b:17:d1:ce:f9:ee:e2:e7:b4:4f:0e:ce + 6d:06:15:31:1f:05:69:da:bd:25:89:99:45:2a:32:d3 + 55:81:e5:96:25:73:ab:6b:43:0c:84:70:9e:65:97:05 + 1a:23:1f:a4:97:2e:0c:4f:15:cb:3a:1e:d2:95:46:4f + Extensions: + Basic Constraints (critical): + Certificate Authority (CA): FALSE + Subject Alternative Name (not critical): + DNSname: localhost + Key Purpose (not critical): + TLS WWW Server. + Key Usage (critical): + Digital signature. + Subject Key Identifier (not critical): + 04e41e66a4bf78e63e28bb34eed6956a20d47616 + Authority Key Identifier (not critical): + 74cf59b3e174a809e4debf3b7ad63094343e5a4a + Signature Algorithm: GOSTR341012-512 + Signature: + d2:3b:41:c0:58:3d:4b:4f:91:ca:e3:68:37:34:c7:bf + bd:4b:af:6d:40:ec:53:6f:73:a2:f2:ef:ad:bb:c2:c2 + 10:7e:39:a7:75:e3:1a:23:9c:b1:2e:ca:8e:04:34:22 + 94:0b:24:dc:d0:c8:a1:ec:3a:23:59:bb:0f:f4:87:e9 + 24:64:34:42:4e:8f:76:e8:c2:d4:b2:b7:4c:7d:b5:51 + 41:65:4d:6e:f3:29:89:8f:aa:76:b0:bc:a7:7d:56:21 + 88:46:b1:42:83:9a:7d:2c:45:c0:1c:bc:6a:0e:43:3d + 09:6a:0e:3d:11:10:ce:ee:4c:3d:cc:d6:81:42:08:b9 +Other Information: + Fingerprint: + sha1:087e529deb0bc108e536c79fbaf6d9a67655caac + sha256:3ec70a1ba9610ef92429681a82f3d8da299dce0a54b9ecbabbe618de4bd79d3e + Public Key ID: + sha1:817128c34ab7d8f90b2498e56735c9dee8b4cc44 + sha256:7e1c1612baf3fa9fbdf653456639b59124e462a6599ece01c2a64b902847755b + Public Key PIN: + pin-sha256:fhwWErrz+p+99lNFZjm1kSTkYqZZns4BwqZLkChHdVs= + +-----BEGIN CERTIFICATE----- +MIICOjCCAaagAwIBAgIUM1rl1X0+lDjgDHpz5M84MxNFv+4wCgYIKoUDBwEBAwMw +EjEQMA4GA1UEAxMHVGVzdCBDQTAeFw0xOTEwMDcyMDM3MTJaFw0zNzEwMDEyMDM3 +MTVaMBYxFDASBgNVBAMTC1Rlc3QgU2VydmVyMIGgMBcGCCqFAwcBAQECMAsGCSqF +AwcBAgECAQOBhAAEgYBQ9maJ6N6WY5YgZ7zgTvoAC7eUfcuxs7lCUhnSkNH1FMIJ +6lFXoJbAM0jbmP3gNQFyX8aeUPCKeiCxnfzHxBNkT0aV0h46yxVPDC6XpB8jGgWX +ZZ5whAxDa6tzJZblgVXTMipFmYklvdppBR8xFQZtzg5PtOfi7vnO0RcLn6R7bqOB +jTCBijAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDATBgNVHSUE +DDAKBggrBgEFBQcDATAPBgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQWBBQE5B5mpL94 +5j4ouzTu1pVqINR2FjAfBgNVHSMEGDAWgBR0z1mz4XSoCeTevzt61jCUND5aSjAK +BggqhQMHAQEDAwOBgQDSO0HAWD1LT5HK42g3NMe/vUuvbUDsU29zovLvrbvCwhB+ +Oad14xojnLEuyo4ENCKUCyTc0Mih7DojWbsP9IfpJGQ0Qk6PdujC1LK3TH21UUFl +TW7zKYmPqnawvKd9ViGIRrFCg5p9LEXAHLxqDkM9CWoOPREQzu5MPczWgUIIuQ== +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/gost-cert-nogost.pem b/tests/cert-tests/data/gost-cert-nogost.pem new file mode 100644 index 0000000000..76fcd3d8b9 --- /dev/null +++ b/tests/cert-tests/data/gost-cert-nogost.pem @@ -0,0 +1,46 @@ +X.509 Certificate Information: + Version: 3 + Serial Number (hex): 011f + Issuer: CN=SuperPlat CA 01,OU=SuperPlat CA,O=SuperPlat,L=Moscow,ST=Russia,C=RU + Validity: + Not Before: Fri Aug 17 06:47:36 UTC 2012 + Not After: Sat Aug 17 06:47:36 UTC 2013 + Subject: CN=SuperTerm0000001,OU=SuperPlat Terminals,O=SuperPlat,L=Moscow,ST=Russia,C=RU +error importing public key: The curve is unsupported + Subject Public Key Algorithm: GOST R 34.10-2001 + Extensions: + Basic Constraints (not critical): + Certificate Authority (CA): FALSE + Unknown extension 2.16.840.1.113730.1.13 (not critical): + ASCII: ..OpenSSL Generated Certificate + Hexdump: 161d4f70656e53534c2047656e657261746564204365727469666963617465 + Subject Key Identifier (not critical): + 43fe227895724f4e3a74f264e4fd0b800c082e03 + Authority Key Identifier (not critical): + 9875a3b785c1641b23344d9bfbae0c2a256b44eb + Signature Algorithm: GOSTR341001 + Signature: + 8f:37:24:fd:be:f0:37:d9:f3:1a:5c:31:5e:33:ef:35 + 61:93:07:03:3d:4d:e8:2c:1b:39:a2:6c:d4:2f:85:35 + b2:43:1d:ed:b5:15:45:c7:10:38:41:28:68:29:62:20 + e6:92:8a:64:34:87:b8:b9:9f:ab:c8:04:6d:26:55:99 +Other Information: + Fingerprint: + sha1:621f34c4fdd7e93f9b8f18224ba0bcd1c63a4771 + sha256:ac6ecf4e7a876edf3e61f538d6061353c2015bfbdf60370492f7404d7f09e13a + +-----BEGIN CERTIFICATE----- +MIICXjCCAgugAwIBAgICAR8wCgYGKoUDAgIDBQAwdDELMAkGA1UEBhMCUlUxDzAN +BgNVBAgMBlJ1c3NpYTEPMA0GA1UEBwwGTW9zY293MRIwEAYDVQQKDAlTdXBlclBs +YXQxFTATBgNVBAsMDFN1cGVyUGxhdCBDQTEYMBYGA1UEAwwPU3VwZXJQbGF0IENB +IDAxMB4XDTEyMDgxNzA2NDczNloXDTEzMDgxNzA2NDczNlowfDELMAkGA1UEBhMC +UlUxDzANBgNVBAgMBlJ1c3NpYTEPMA0GA1UEBwwGTW9zY293MRIwEAYDVQQKDAlT +dXBlclBsYXQxHDAaBgNVBAsME1N1cGVyUGxhdCBUZXJtaW5hbHMxGTAXBgNVBAMM +EFN1cGVyVGVybTAwMDAwMDEwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAQYHKoUDAgIe +AQNDAARA69rbaWL2GSV1NVaWMSrWRX8d/frrwbVjJerPQKjyNeDYZxgSjTTp3dck +6fQLx2OjQsu6n+vdyBPQex/iwbJBV6N7MHkwCQYDVR0TBAIwADAsBglghkgBhvhC +AQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFEP+ +IniVck9OOnTyZOT9C4AMCC4DMB8GA1UdIwQYMBaAFJh1o7eFwWQbIzRNm/uuDCol +a0TrMAoGBiqFAwICAwUAA0EAjzck/b7wN9nzGlwxXjPvNWGTBwM9TegsGzmibNQv +hTWyQx3ttRVFxxA4QShoKWIg5pKKZDSHuLmfq8gEbSZVmQ== +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/gost-cert.pem b/tests/cert-tests/data/gost-cert.pem index edcdb9e8a6..bec29b8bb5 100644 --- a/tests/cert-tests/data/gost-cert.pem +++ b/tests/cert-tests/data/gost-cert.pem @@ -6,7 +6,17 @@ X.509 Certificate Information: Not Before: Fri Aug 17 06:47:36 UTC 2012 Not After: Sat Aug 17 06:47:36 UTC 2013 Subject: CN=SuperTerm0000001,OU=SuperPlat Terminals,O=SuperPlat,L=Moscow,ST=Russia,C=RU - Subject Public Key Algorithm: 1.2.643.2.2.19 + Subject Public Key Algorithm: GOST R 34.10-2001 + Algorithm Security Level: High (256 bits) + Curve: CryptoPro-A + Digest: GOSTR341194 + ParamSet: CryptoPro-A + X: + e0:35:f2:a8:40:cf:ea:25:63:b5:c1:eb:fa:fd:1d:7f + 45:d6:2a:31:96:56:35:75:25:19:f6:62:69:db:da:eb + Y: + 57:41:b2:c1:e2:1f:7b:d0:13:c8:dd:eb:9f:ba:cb:42 + a3:63:c7:0b:f4:e9:24:d7:dd:e9:34:8d:12:18:67:d8 Extensions: Basic Constraints (not critical): Certificate Authority (CA): FALSE @@ -17,7 +27,7 @@ X.509 Certificate Information: 43fe227895724f4e3a74f264e4fd0b800c082e03 Authority Key Identifier (not critical): 9875a3b785c1641b23344d9bfbae0c2a256b44eb - Signature Algorithm: 1.2.643.2.2.3 + Signature Algorithm: GOSTR341001 Signature: 8f:37:24:fd:be:f0:37:d9:f3:1a:5c:31:5e:33:ef:35 61:93:07:03:3d:4d:e8:2c:1b:39:a2:6c:d4:2f:85:35 @@ -27,6 +37,11 @@ Other Information: Fingerprint: sha1:621f34c4fdd7e93f9b8f18224ba0bcd1c63a4771 sha256:ac6ecf4e7a876edf3e61f538d6061353c2015bfbdf60370492f7404d7f09e13a + Public Key ID: + sha1:43757042dae9e9f5fa92cc2d2cbf4950f28a7bd0 + sha256:cee4a59e7803bafb101af8e39e5355d7895e3b85e7616fe624d48f2c51e8bdbf + Public Key PIN: + pin-sha256:zuSlnngDuvsQGvjjnlNV14leO4XnYW/mJNSPLFHovb8= -----BEGIN CERTIFICATE----- MIICXjCCAgugAwIBAgICAR8wCgYGKoUDAgIDBQAwdDELMAkGA1UEBhMCUlUxDzAN diff --git a/tests/cert-tests/data/gost01.p12 b/tests/cert-tests/data/gost01.p12 new file mode 100644 index 0000000000..1420fbc69a Binary files /dev/null and b/tests/cert-tests/data/gost01.p12 differ diff --git a/tests/cert-tests/data/gost12-2.p12 b/tests/cert-tests/data/gost12-2.p12 new file mode 100644 index 0000000000..d7b7a6249c Binary files /dev/null and b/tests/cert-tests/data/gost12-2.p12 differ diff --git a/tests/cert-tests/data/gost12.p12 b/tests/cert-tests/data/gost12.p12 new file mode 100644 index 0000000000..d7b7a6249c Binary files /dev/null and b/tests/cert-tests/data/gost12.p12 differ diff --git a/tests/cert-tests/data/gost94-cert.pem b/tests/cert-tests/data/gost94-cert.pem new file mode 100644 index 0000000000..f4d63fb9d1 --- /dev/null +++ b/tests/cert-tests/data/gost94-cert.pem @@ -0,0 +1,33 @@ +X.509 Certificate Information: + Version: 1 + Serial Number (hex): 230ee360469524cec70be494182e7eeb + Issuer: EMAIL=GostR3410-94@example.com,C=RU,O=CryptoPro,CN=GostR3410-94 example + Validity: + Not Before: Tue Aug 16 12:32:50 UTC 2005 + Not After: Sun Aug 16 12:32:50 UTC 2015 + Subject: EMAIL=GostR3410-94@example.com,C=RU,O=CryptoPro,CN=GostR3410-94 example + Subject Public Key Algorithm: 1.2.643.2.2.20 + Signature Algorithm: 1.2.643.2.2.4 + Signature: + 11:c7:08:7e:12:dc:02:f1:02:23:29:47:76:8f:47:2a + 81:83:50:e3:07:cc:f2:e4:31:23:89:42:c8:73:e1:de + 22:f7:85:f3:55:bd:94:ec:46:91:9c:67:ac:58:d7:05 + 2a:a7:8c:b7:85:2a:01:75:85:f7:d7:38:03:fb:cd:43 +Other Information: + Fingerprint: + sha1:d43782a1f943a966f4ea1ac96bd048fe68d4d951 + sha256:19260c765a2c820be3612dc0431c045d37570f8e4de58ba218f10a8eeb0d42d7 + +-----BEGIN CERTIFICATE----- +MIICCzCCAboCECMO42BGlSTOxwvklBgufuswCAYGKoUDAgIEMGkxHTAbBgNVBAMM +FEdvc3RSMzQxMC05NCBleGFtcGxlMRIwEAYDVQQKDAlDcnlwdG9Qcm8xCzAJBgNV +BAYTAlJVMScwJQYJKoZIhvcNAQkBFhhHb3N0UjM0MTAtOTRAZXhhbXBsZS5jb20w +HhcNMDUwODE2MTIzMjUwWhcNMTUwODE2MTIzMjUwWjBpMR0wGwYDVQQDDBRHb3N0 +UjM0MTAtOTQgZXhhbXBsZTESMBAGA1UECgwJQ3J5cHRvUHJvMQswCQYDVQQGEwJS +VTEnMCUGCSqGSIb3DQEJARYYR29zdFIzNDEwLTk0QGV4YW1wbGUuY29tMIGlMBwG +BiqFAwICFDASBgcqhQMCAiACBgcqhQMCAh4BA4GEAASBgLuEZuF5nls02CyAfxOo +GWZxV/6MVCUhR28wCyd3RpjG+0dVvrey85NsObVCNyaE4g0QiiQOHwxCTSs7ESuo +v2Y5MlyUi8Go/htjEvYJJYfMdRv05YmKCYJo01x3pg+2kBATjeM+fJyR1qwNCCw+ +eMG1wra3Gqgqi0WBkzIydvp7MAgGBiqFAwICBANBABHHCH4S3ALxAiMpR3aPRyqB +g1DjB8zy5DEjiULIc+HeIveF81W9lOxGkZxnrFjXBSqnjLeFKgF1hffXOAP7zUM= +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/grfc.crt b/tests/cert-tests/data/grfc.crt new file mode 100644 index 0000000000..0b06f778b8 --- /dev/null +++ b/tests/cert-tests/data/grfc.crt @@ -0,0 +1,88 @@ +X.509 Certificate Information: + Version: 3 + Serial Number (hex): 0c8c4093bbe693bd430bf51826031d05 + Issuer: CN=УЦ ФГУП \"ГРЧЦ\",O=ФГУП \"ГРЧЦ\",L=Москва,ST=77 г. Москва,C=RU,EMAIL=pki-grfc@grfc.ru,street=Дербеневская наб. д. 7 стр. 15,INN=007706228218,OGRN=1027739334479 + Validity: + Not Before: Tue Mar 12 07:38:26 UTC 2013 + Not After: Sun Mar 12 07:46:00 UTC 2028 + Subject: CN=УЦ ФГУП \"ГРЧЦ\",O=ФГУП \"ГРЧЦ\",L=Москва,ST=77 г. Москва,C=RU,EMAIL=pki-grfc@grfc.ru,street=Дербеневская наб. д. 7 стр. 15,INN=007706228218,OGRN=1027739334479 + Subject Public Key Algorithm: GOST R 34.10-2001 + Algorithm Security Level: High (256 bits) + Curve: CryptoPro-A + Digest: GOSTR341194 + ParamSet: CryptoPro-A + X: + 3c:be:60:cc:c2:77:02:f6:ef:c0:fc:2c:71:69:99:61 + c0:55:d0:b9:e8:27:1d:4b:7f:1f:98:90:27:b6:53:96 + Y: + f5:df:19:10:28:26:33:cf:0c:ad:a4:f7:5c:e4:22:f0 + 45:78:d6:de:78:3d:c2:bf:9c:c5:30:8a:63:34:ff:c8 + Extensions: + Subject Signing Tool(not critical): + "КриптоПро CSP" (версия 3.6) + Issuer Signing Tool(not critical): + SignTool: "КриптоПро CSP" (версия 3.6) + CATool: "Удостоверяющий центр "КриптоПро УЦ" версии 1.5 + SignToolCert: Сертификат соответствия № СФ/121-1859 от 17.06.2012 + CAToolCert: Сертификат соответствия № СФ/128-1822 от 01.06.2012 + Key Usage (not critical): + Digital signature. + Certificate signing. + CRL signing. + Basic Constraints (critical): + Certificate Authority (CA): TRUE + Subject Key Identifier (not critical): + 6b00868389d200cf56b86be4e336101e1f72aec3 + Unknown extension 1.3.6.1.4.1.311.21.1 (not critical): + ASCII: ... + Hexdump: 020100 + Certificate Policies (not critical): + 1.2.643.100.113.1 (Russian security class KC1) + 1.2.643.100.113.2 (Russian security class KC2) + 2.5.29.32.0 (anyPolicy) + Signature Algorithm: GOSTR341001 + Signature: + bd:95:dd:5f:3a:2b:74:a5:29:62:20:c2:24:a8:8b:a0 + 13:1a:21:f5:4a:d6:2e:b1:3f:f5:50:e9:96:a0:a2:c9 + 79:09:15:a2:41:c0:60:e1:1d:3f:25:8d:88:f4:4c:60 + f3:0f:4e:e3:29:6e:b8:6e:01:b4:03:2c:07:8f:27:37 +Other Information: + Fingerprint: + sha1:c2040cc02f1d7e50abfdd1b597213579be2d0573 + sha256:d9e6a4abdce8ac2ca7d394be7dce745e0565f0da1de382538ccc32b21a86d73c + Public Key ID: + sha1:6b00868389d200cf56b86be4e336101e1f72aec3 + sha256:1e6b34a93b04a67bfb05270b3f26b9c945f095f24ab7fc2fe8ca4cce01a45682 + Public Key PIN: + pin-sha256:Hms0qTsEpnv7BScLPya5yUXwlfJKt/wv6MpMzgGkVoI= + +-----BEGIN CERTIFICATE----- +MIIFGDCCBMegAwIBAgIQDIxAk7vmk71DC/UYJgMdBTAIBgYqhQMCAgMwggEWMRgw +FgYFKoUDZAESDTEwMjc3MzkzMzQ0NzkxGjAYBggqhQMDgQMBARIMMDA3NzA2MjI4 +MjE4MTowOAYDVQQJDDHQlNC10YDQsdC10L3QtdCy0YHQutCw0Y8g0L3QsNCxLiDQ +tC4gNyDRgdGC0YAuIDE1MR8wHQYJKoZIhvcNAQkBFhBwa2ktZ3JmY0BncmZjLnJ1 +MQswCQYDVQQGEwJSVTEcMBoGA1UECAwTNzcg0LMuINCc0L7RgdC60LLQsDEVMBMG +A1UEBwwM0JzQvtGB0LrQstCwMRwwGgYDVQQKDBPQpNCT0KPQnyAi0JPQoNCn0KYi +MSEwHwYDVQQDDBjQo9CmINCk0JPQo9CfICLQk9Cg0KfQpiIwHhcNMTMwMzEyMDcz +ODI2WhcNMjgwMzEyMDc0NjAwWjCCARYxGDAWBgUqhQNkARINMTAyNzczOTMzNDQ3 +OTEaMBgGCCqFAwOBAwEBEgwwMDc3MDYyMjgyMTgxOjA4BgNVBAkMMdCU0LXRgNCx +0LXQvdC10LLRgdC60LDRjyDQvdCw0LEuINC0LiA3INGB0YLRgC4gMTUxHzAdBgkq +hkiG9w0BCQEWEHBraS1ncmZjQGdyZmMucnUxCzAJBgNVBAYTAlJVMRwwGgYDVQQI +DBM3NyDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxHDAa +BgNVBAoME9Ck0JPQo9CfICLQk9Cg0KfQpiIxITAfBgNVBAMMGNCj0KYg0KTQk9Cj +0J8gItCT0KDQp9CmIjBjMBwGBiqFAwICEzASBgcqhQMCAiMBBgcqhQMCAh4BA0MA +BECWU7YnkJgff0sdJ+i50FXAYZlpcSz8wO/2AnfCzGC+PMj/NGOKMMWcv8I9eN7W +eEXwIuRc96StDM8zJigQGd/1o4IB6TCCAeUwNgYFKoUDZG8ELQwrItCa0YDQuNC/ +0YLQvtCf0YDQviBDU1AiICjQstC10YDRgdC40Y8gMy42KTCCATMGBSqFA2RwBIIB +KDCCASQMKyLQmtGA0LjQv9GC0L7Qn9GA0L4gQ1NQIiAo0LLQtdGA0YHQuNGPIDMu +NikMUyLQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YAgItCa +0YDQuNC/0YLQvtCf0YDQviDQo9CmIiDQstC10YDRgdC40LggMS41DE/QodC10YDR +gtC40YTQuNC60LDRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g4oSWINCh0KQv +MTIxLTE4NTkg0L7RgiAxNy4wNi4yMDEyDE/QodC10YDRgtC40YTQuNC60LDRgiDR +gdC+0L7RgtCy0LXRgtGB0YLQstC40Y8g4oSWINCh0KQvMTI4LTE4MjIg0L7RgiAw +MS4wNi4yMDEyMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRrAIaDidIAz1a4a+TjNhAeH3KuwzAQBgkrBgEEAYI3FQEEAwIBADAlBgNVHSAE +HjAcMAgGBiqFA2RxATAIBgYqhQNkcQIwBgYEVR0gADAIBgYqhQMCAgMDQQC9ld1f +Oit0pSliIMIkqIugExoh9UrWLrE/9VDplqCiyXkJFaJBwGDhHT8ljYj0TGDzD07j +KW64bgG0AywHjyc3 +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/inhibit-anypolicy.pem b/tests/cert-tests/data/inhibit-anypolicy.pem index 4291cdf9a8..d643afd005 100644 --- a/tests/cert-tests/data/inhibit-anypolicy.pem +++ b/tests/cert-tests/data/inhibit-anypolicy.pem @@ -15,11 +15,11 @@ LL7L+JnX+yvGuzn1R8ZV5YR7AgMBAAGjggFGMIIBQjAPBgNVHRMBAf8EBTADAQH/ MGoGA1UdEQRjMGGCDHd3dy5ub25lLm9yZ4ITd3d3Lm1vcmV0aGFub25lLm9yZ4IX d3d3LmV2ZW5tb3JldGhhbm9uZS5vcmeHBMCoAQGBDW5vbmVAbm9uZS5vcmeBDndo ZXJlQG5vbmUub3JnMA0GA1UdNgEB/wQDAgEDMBMGA1UdJQQMMAoGCCsGAQUFBwMJ -MA8GA1UdDwEB/wQFAwMHBAAwHQYDVR0OBBYEFHU6t/xzZCkUSWER/c6Qy/Y9HIoT +MA8GA1UdDwEB/wQFAwMHhAAwHQYDVR0OBBYEFHU6t/xzZCkUSWER/c6Qy/Y9HIoT MG8GA1UdHwRoMGYwZKBioGCGHmh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwx L4YeaHR0cDovL3d3dy5nZXRjcmwuY3JsL2dldGNybDIvhh5odHRwOi8vd3d3Lmdl -dGNybC5jcmwvZ2V0Y3JsMy8wDQYJKoZIhvcNAQELBQADgYEAe+eZiFD221AO6yOk -DUmizGBiFhG169EgOToWHboZ1E/LzeljhQbOMcQgPlMLsifiUGpi3Qn7aj/zYv86 -ppO+0jmQZHjsALyPk/kEQkloIXi9Ibo0nwAH+BNkeaOIHl9m5ms/8xaaYi2GdyQO -hzSspr1AGSQtA6ZMTs1mqEXyyFk= +dGNybC5jcmwvZ2V0Y3JsMy8wDQYJKoZIhvcNAQELBQADgYEAhmQB01JYW2WVvkNe +hjyKLjoKc5ME9VrjpckT4BEXcGibgrjOcABH00DNDqiS6b1NAslxtuVp9eYlZNw1 +4Na7FBkGHIt5+T8sNnTuVV7X4S7/1uE3qHtfVdXTkL2foYjkihQet+DY9PnLbduM +CAnd9OWhyE2r4jwQGaJU9vZ3rJY= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/invalid-sig4.pem b/tests/cert-tests/data/invalid-sig4.pem new file mode 100644 index 0000000000..f039e3c18f --- /dev/null +++ b/tests/cert-tests/data/invalid-sig4.pem @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID1jCCAr2gAwIBAgIDAjbRMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMTAwMjE5MjI0NTA1WhcNMjAwMjE4MjI0NTA1WjA8MQswCQYDVQQG +EwJVUzEXMBUGA1UEChMOR2VvVHJ1c3QsIEluYy4xFDASBgNVBAMTC1JhcGlkU1NM +IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3H4Vsce2cy1rfa0 +l6P7oeYLUF9QqjraD/w9KSRDxhApwfxVQHLuverfn7ZB9EhLyG7+T1cSi1v6kt1e +6K3z8Buxe037z/3R5fjj3Of1c3/fAUnPjFbBvTfjW761T4uL8NpPx+PdVUdp3/Jb +ewdPPeWsIcHIHXro5/YPoar1b96oZU8QiZwD84l6pV4BcjPtqelaHnnzh8jfyMX8 +N8iamte4dsywPuf95lTq319SQXhZV63xEtZ/vNWfcNMFbPqjfWdY3SZiHTGSDHl5 +HI7PynvBZq+odEj7joLCniyZXHstXZu8W1eefDp6E63yoxhbK1kPzVw662gzxigd +gtFQiwIDAQABo4HZMIHWMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUa2k9ahhC +St2PAmU5/TUkhniRFjAwHwYDVR0jBBgwFoAUwHqYaI2J+6sFZAwRfap9ZbjKzE4w +EgYDVR0TAQH/BAgwBgEB/wIBADA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3Js +Lmdlb3RydXN0LmNvbS9jcmxzL2d0Z2xvYmFsLmNybDA0BggrBgEFBQcBAQQoMCYw +JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmdlb3RydXN0LmNvbTAOBgkqhkiG9w0B +AQUEAUEDggEBAKu8vApdGJTjwbHDqExV1r60mPHuPBzNz/MkJFyWAydY/Dauoi+P +8f7aKwLDM73I3UgiK2APpQMQ/Xf40O2WZ0/96kcgcFTcqQxVfuGWJYrZtdpXSr6N +jklDY6VsTieHJetbbf6ifzgo4DarrTmlpWLEt1xYLKpdAWCmYmejwMdiI/TnbEbu +tdOAaiIT0i0/dE/qr4xftDic267Or4QepvY0UVl50+N13LzX83PfkuzSIFlvnPuV ++JJ2GAp8Dyymyt6KYnvY885faL2PPsF0uxVyOhaDqQvmTZmc2FfsqAFRx29XNF6r +SixC9k8ciXjeJk71b5NMFWsnVk0AVGx6t7c= +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/invalid-sig5.pem b/tests/cert-tests/data/invalid-sig5.pem new file mode 100644 index 0000000000..f7a148cf42 --- /dev/null +++ b/tests/cert-tests/data/invalid-sig5.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDmjCCAlKgAwIBAgIMWXnRYyHbNWzuFxmzMD0GCSqGSIb3DQEBCjAwoA0wCwYJ +YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFAMA8xDTAL +BgNVBAMTBENBLTAwIBcNMTcwNzI3MTE0MTIzWhgPOTk5OTEyMzEyMzU5NTlaMA8x +DTALBgNVBAMTBENBLTEwggFSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIB +oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgA4IBDwAwggEKAoIBAQDB +uQ2UwKWT1BfN6H2B3svKL34aPW/+MTfN8McvExZsZYuQyRxeG8SV4uJ+GAtJ/Ml/ +eaUqiKG0pNCna846FUtAax/0quuVSaZ2xOVA3lMKj2frtRLJ3W6ZaglCHkZUHhII +JEtE1s0F8aaaZ6X4/57OAi6uyFNuBSBsp3giQS6SrtFMbhq7OuSSt2T14XlVGvAI +TiO7t21+Eukq2jDGOerUax4Yxki4l8589uXu5IQzZalj42hr9YKbNb75RAICNnY8 +jxCezc0o8KNoDF0IAK7UERz6uUQElUh/bdm0k3UV+uVA6t0disZ4gdenPuLsGSVD +9fcbh/zFlv2V3A9HLJB3AgMBAAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0P +AQH/BAUDAwcEADAdBgNVHQ4EFgQU6h4fxmpkIoNy/qx6u4Z13H7WN+QwHwYDVR0j +BBgwFoAUZ97LfvATPRiWxwNOO+sxC5ig8VkwPQYJKoZIhvcNAQEKMDCgDTALBglg +hkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCASADggEBAFGH +zxWW8R95wmmuDecuKf31LEKPubtaeqMRqt2Vk2mGCQOxcerl6MMGyl3w46hEkAjU +jAPwmNnB9xyEyqR5w2TYrpzsrnUcZn+6HzSiPTEJ0jhY2S8N2V+Bch1QgMwlgeaD +bZrY6qAG6PeqoQ8XhZ8+1sI/IpQKJHmmBN+qYbLFxEPjE4QnBahPbKfbpMY0MMX0 +uuI2nSBKcYmkYiWBYdydpP24VfeoUP0V6bXc5rrDdCNGp+AxUID51GT0AoMf2FGK +LeOLJtPqH7raz44pa1qezHq4gPeXC0Ende9j7IimpsdB6eDVle8UZipfeASq9XVL +F430KTcS7x42r71NZUU= +-----END CERTIFICATE----- diff --git a/tests/key-tests/data/key-ca-1234.p8 b/tests/cert-tests/data/key-ca-1234.p8 similarity index 100% rename from tests/key-tests/data/key-ca-1234.p8 rename to tests/cert-tests/data/key-ca-1234.p8 diff --git a/tests/key-tests/data/key-ca-empty.p8 b/tests/cert-tests/data/key-ca-empty.p8 similarity index 100% rename from tests/key-tests/data/key-ca-empty.p8 rename to tests/cert-tests/data/key-ca-empty.p8 diff --git a/tests/key-tests/data/key-ca-null.p8 b/tests/cert-tests/data/key-ca-null.p8 similarity index 100% rename from tests/key-tests/data/key-ca-null.p8 rename to tests/cert-tests/data/key-ca-null.p8 diff --git a/tests/cert-tests/data/key-corpus-rc2-1.p12.out b/tests/cert-tests/data/key-corpus-rc2-1.p12.out index 534b796546..1781059233 100644 --- a/tests/cert-tests/data/key-corpus-rc2-1.p12.out +++ b/tests/cert-tests/data/key-corpus-rc2-1.p12.out @@ -5,8 +5,14 @@ MAC info: Iteration count: 2048 BAG #0 + Type: Encrypted + Schema: unsupported (1.2.840.113549.1.5.13) + + Decrypting... + BAG #1 Elements: 1 + Type: PKCS #8 Encrypted key PKCS #8 information: Schema: unsupported (1.2.840.113549.1.5.13/1.2.840.113549.3.2) Friendly name: localhost @@ -41,4 +47,3 @@ XPvobYe2HqIYKwkDOpP9wX7ClCiPoOlt7VKMuBJQy/1JFC6DRA7oBYmcZbZxw2uo j/dC2cK5jsPC75a5+8HqySwQGlBGxlMOeyi/pKzSdWOdZ9NEshvTje/mnme3Hx05 JWamOc7reYsFpA== -----END ENCRYPTED PRIVATE KEY----- - diff --git a/tests/key-tests/data/key-ecc.p8 b/tests/cert-tests/data/key-ecc.p8 similarity index 100% rename from tests/key-tests/data/key-ecc.p8 rename to tests/cert-tests/data/key-ecc.p8 diff --git a/tests/key-tests/data/key-ecc.pem b/tests/cert-tests/data/key-ecc.pem similarity index 100% rename from tests/key-tests/data/key-ecc.pem rename to tests/cert-tests/data/key-ecc.pem diff --git a/tests/cert-tests/data/key-gost01-2-enc.p8 b/tests/cert-tests/data/key-gost01-2-enc.p8 new file mode 100644 index 0000000000..81d8347ad7 --- /dev/null +++ b/tests/cert-tests/data/key-gost01-2-enc.p8 @@ -0,0 +1,6 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIG4MG0GCSqGSIb3DQEFDTBgMD8GCSqGSIb3DQEFDDAyBCC6bhoitdzE02HJYwrv +t6fS+JQ/UFHInX9LqJgR/KdF+AICB9AwCgYGKoUDAgIKBQAwHQYGKoUDAgIVMBME +CJYqb3jDyCMsBgcqhQMCAh8BBEdzhSi7v1vL7sUZpcQSmmpzTCj+Tgkff4uLp6hH +lHc23xJOF6dcPvVlXPtiRUmNpl56BquVRo7Gb0vx6pKLgR8eJNmbWdoGtA== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost01-2-enc.p8.txt b/tests/cert-tests/data/key-gost01-2-enc.p8.txt new file mode 100644 index 0000000000..e979dd6348 --- /dev/null +++ b/tests/cert-tests/data/key-gost01-2-enc.p8.txt @@ -0,0 +1,40 @@ +PKCS #8 information: + Cipher: GOST28147-CPA-CFB + Schema: PBES2-GOST28147-89-CPA (1.2.643.2.2.31.1) + Salt: ba6e1a22b5dcc4d361c9630aefb7a7d2f8943f5051c89d7f4ba89811fca745f8 + Salt size: 32 + Iteration count: 2000 + +Public Key Info: + Public Key Algorithm: GOST R 34.10-2001 + Key Security Level: High (256 bits) + +curve: CryptoPro-A +digest: GOSTR341194 +paramset: CryptoPro-A +private key: + c9:0d:4a:60:74:4b:6e:f9:dd:b1:f1:d5:e2:34:f0:6c + ef:73:74:52:2d:03:91:89:d9:2e:82:dd:cf:41:14:16 + + +x: + da:14:e3:09:c9:90:76:36:7e:d2:1e:f2:32:54:62:a0 + a3:7a:fe:69:16:88:40:1d:28:98:25:00:23:30:52:79 + + +y: + 92:01:db:d3:34:89:e6:74:86:e1:6c:81:a4:76:aa:d9 + 1d:ac:c9:8a:5e:a2:fa:cf:ad:2e:47:8c:65:ed:c8:7b + + + +Public Key PIN: + pin-sha256:naEvzBbx6qkKlM3WetsTn09kpou+R1k6eCZvVFxEPc0= +Public Key ID: + sha256:9da12fcc16f1eaa90a94cdd67adb139f4f64a68bbe47593a78266f545c443dcd + sha1:56f0aab16eb873a50453b5209b65fe31e6493317 + +-----BEGIN PRIVATE KEY----- +MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIgQgFhRBz92CLtmJ +kQMtUnRz72zwNOLV8bHd+W5LdGBKDck= +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost01-2.p8 b/tests/cert-tests/data/key-gost01-2.p8 new file mode 100644 index 0000000000..88d397efa4 --- /dev/null +++ b/tests/cert-tests/data/key-gost01-2.p8 @@ -0,0 +1,4 @@ +-----BEGIN PRIVATE KEY----- +MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIgQgFhRBz92CLtmJ +kQMtUnRz72zwNOLV8bHd+W5LdGBKDck= +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost01-2.p8.txt b/tests/cert-tests/data/key-gost01-2.p8.txt new file mode 100644 index 0000000000..54c5626d29 --- /dev/null +++ b/tests/cert-tests/data/key-gost01-2.p8.txt @@ -0,0 +1,33 @@ +Public Key Info: + Public Key Algorithm: GOST R 34.10-2001 + Key Security Level: High (256 bits) + +curve: CryptoPro-A +digest: GOSTR341194 +paramset: CryptoPro-A +private key: + c9:0d:4a:60:74:4b:6e:f9:dd:b1:f1:d5:e2:34:f0:6c + ef:73:74:52:2d:03:91:89:d9:2e:82:dd:cf:41:14:16 + + +x: + da:14:e3:09:c9:90:76:36:7e:d2:1e:f2:32:54:62:a0 + a3:7a:fe:69:16:88:40:1d:28:98:25:00:23:30:52:79 + + +y: + 92:01:db:d3:34:89:e6:74:86:e1:6c:81:a4:76:aa:d9 + 1d:ac:c9:8a:5e:a2:fa:cf:ad:2e:47:8c:65:ed:c8:7b + + + +Public Key PIN: + pin-sha256:naEvzBbx6qkKlM3WetsTn09kpou+R1k6eCZvVFxEPc0= +Public Key ID: + sha256:9da12fcc16f1eaa90a94cdd67adb139f4f64a68bbe47593a78266f545c443dcd + sha1:56f0aab16eb873a50453b5209b65fe31e6493317 + +-----BEGIN PRIVATE KEY----- +MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIgQgFhRBz92CLtmJ +kQMtUnRz72zwNOLV8bHd+W5LdGBKDck= +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost01.p8 b/tests/cert-tests/data/key-gost01.p8 new file mode 100644 index 0000000000..0e4afabdb4 --- /dev/null +++ b/tests/cert-tests/data/key-gost01.p8 @@ -0,0 +1,4 @@ +-----BEGIN PRIVATE KEY----- +MEUCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIgIgCyk74FDQCCva +54VjGmuraPNbQnhtbdpWr68WmJEED3c= +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost01.p8.txt b/tests/cert-tests/data/key-gost01.p8.txt new file mode 100644 index 0000000000..d0d1323625 --- /dev/null +++ b/tests/cert-tests/data/key-gost01.p8.txt @@ -0,0 +1,33 @@ +Public Key Info: + Public Key Algorithm: GOST R 34.10-2001 + Key Security Level: High (256 bits) + +curve: CryptoPro-XchA +digest: GOSTR341194 +paramset: CryptoPro-A +private key: + 0b:29:3b:e0:50:d0:08:2b:da:e7:85:63:1a:6b:ab:68 + f3:5b:42:78:6d:6d:da:56:af:af:16:98:91:04:0f:77 + + +x: + 57:7e:32:4f:e7:0f:2b:6d:f4:5c:43:7a:03:05:e5:fd + 2c:89:31:8c:13:cd:08:75:40:1a:02:60:75:68:95:84 + + +y: + 60:1a:ea:ca:bc:66:0f:df:b0:cb:c7:56:7e:bb:a6:ea + 8d:e4:0f:ae:85:7c:9a:d0:03:88:95:b9:16:cc:eb:8f + + + +Public Key PIN: + pin-sha256:zO1bMbwojs1uE302Tl1uAkcXYVw9AW8b3EauBIKNpM4= +Public Key ID: + sha256:cced5b31bc288ecd6e137d364e5d6e024717615c3d016f1bdc46ae04828da4ce + sha1:1a0442de4518bb407e6ed5690046839a13fec03d + +-----BEGIN PRIVATE KEY----- +MEUCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIgQgdw8EkZgWr69W +2m1teEJb82iraxpjhefaKwjQUOA7KQs= +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost12-256-2-enc.p8 b/tests/cert-tests/data/key-gost12-256-2-enc.p8 new file mode 100644 index 0000000000..204cce8302 --- /dev/null +++ b/tests/cert-tests/data/key-gost12-256-2-enc.p8 @@ -0,0 +1,7 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIHdMHEGCSqGSIb3DQEFDTBkMEEGCSqGSIb3DQEFDDA0BCD5qZr0TTIsBvdgUoq/ +zFwOzdyJohj6/4Wiyccgj9AK/QICB9AwDAYIKoUDBwEBBAIFADAfBgYqhQMCAhUw +FQQI3Ip/Vp0IsyIGCSqFAwcBAgUBAQRoSfLhgx9s/zn+BjnhT0ror07vS55Ys5hg +vVpWDx4mXGWWyez/2sMcaFgSr4H4UTGGwoMynGLpF1IOVo+bGJ0ePqHB+gS5OL9o +V+PUmZ/ELrRENKlCDqfYWvpSystX29CvCFrnTnDsbBY= +-----END ENCRYPTED PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost12-256-2-enc.p8.txt b/tests/cert-tests/data/key-gost12-256-2-enc.p8.txt new file mode 100644 index 0000000000..949917aceb --- /dev/null +++ b/tests/cert-tests/data/key-gost12-256-2-enc.p8.txt @@ -0,0 +1,40 @@ +PKCS #8 information: + Cipher: GOST28147-TC26Z-CFB + Schema: PBES2-GOST28147-89-TC26Z (1.2.643.7.1.2.5.1.1) + Salt: f9a99af44d322c06f760528abfcc5c0ecddc89a218faff85a2c9c7208fd00afd + Salt size: 32 + Iteration count: 2000 + +Public Key Info: + Public Key Algorithm: GOST R 34.10-2012-256 + Key Security Level: High (256 bits) + +curve: CryptoPro-A +digest: STREEBOG-256 +paramset: TC26-Z +private key: + 2b:ea:34:a3:b0:5d:19:64:5b:8f:41:24:6a:99:50:08 + 23:07:00:fd:00:6b:a6:eb:53:b4:22:55:9c:ef:22:52 + + +x: + 62:22:79:60:91:29:44:b5:72:73:b1:46:e8:ff:7a:df + 0e:f7:e5:4c:16:3f:25:58:67:af:6f:4a:9a:f2:1c:d7 + + +y: + 95:c2:14:be:41:07:b0:80:de:cc:93:07:17:51:e0:d2 + 46:c8:d4:f8:91:57:30:85:44:b8:c0:02:3d:d8:e2:4c + + + +Public Key PIN: + pin-sha256:WB8JpdrRogkTwsox4PlsGW/xvh/47NjXrKg0yXXXo2Y= +Public Key ID: + sha256:581f09a5dad1a20913c2ca31e0f96c196ff1be1ff8ecd8d7aca834c975d7a366 + sha1:83fbb2e3aad179fd9e712583c91710ceb157e3e6 + +-----BEGIN PRIVATE KEY----- +MEgCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIjAQYIKoUDBwEBAgIEIgQgUiLvnFUi +tFPrpmsA/QAHIwhQmWokQY9bZBldsKM06is= +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost12-256-2.p8 b/tests/cert-tests/data/key-gost12-256-2.p8 new file mode 100644 index 0000000000..421422b9fc --- /dev/null +++ b/tests/cert-tests/data/key-gost12-256-2.p8 @@ -0,0 +1,4 @@ +-----BEGIN PRIVATE KEY----- +MGYCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIjAQYIKoUDBwEBAgIEQEYbRu86z+1JFKDcPDN9UbTG +G2ki9enTqos4KpUU0j9IDpl1UXiaA1YDIwUjlAp+81GkLmyt8Fw6Gt/X5JZySAY= +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost12-256-2.p8.txt b/tests/cert-tests/data/key-gost12-256-2.p8.txt new file mode 100644 index 0000000000..cb9c6849c8 --- /dev/null +++ b/tests/cert-tests/data/key-gost12-256-2.p8.txt @@ -0,0 +1,33 @@ +Public Key Info: + Public Key Algorithm: GOST R 34.10-2012-256 + Key Security Level: High (256 bits) + +curve: CryptoPro-A +digest: STREEBOG-256 +paramset: TC26-Z +private key: + 2b:ea:34:a3:b0:5d:19:64:5b:8f:41:24:6a:99:50:08 + 23:07:00:fd:00:6b:a6:eb:53:b4:22:55:9c:ef:22:52 + + +x: + 62:22:79:60:91:29:44:b5:72:73:b1:46:e8:ff:7a:df + 0e:f7:e5:4c:16:3f:25:58:67:af:6f:4a:9a:f2:1c:d7 + + +y: + 95:c2:14:be:41:07:b0:80:de:cc:93:07:17:51:e0:d2 + 46:c8:d4:f8:91:57:30:85:44:b8:c0:02:3d:d8:e2:4c + + + +Public Key PIN: + pin-sha256:WB8JpdrRogkTwsox4PlsGW/xvh/47NjXrKg0yXXXo2Y= +Public Key ID: + sha256:581f09a5dad1a20913c2ca31e0f96c196ff1be1ff8ecd8d7aca834c975d7a366 + sha1:83fbb2e3aad179fd9e712583c91710ceb157e3e6 + +-----BEGIN PRIVATE KEY----- +MEgCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIjAQYIKoUDBwEBAgIEIgQgUiLvnFUi +tFPrpmsA/QAHIwhQmWokQY9bZBldsKM06is= +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost12-256.p8 b/tests/cert-tests/data/key-gost12-256.p8 new file mode 100644 index 0000000000..df1b5558f9 --- /dev/null +++ b/tests/cert-tests/data/key-gost12-256.p8 @@ -0,0 +1,4 @@ +-----BEGIN PRIVATE KEY----- +MEkCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIkAAYIKoUDBwEBAgIEIwIhAL/PHWI+ +XN0wMqfG6rtKkjxG5D1kD/6q8sPtOaj6OZkk +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost12-256.p8.txt b/tests/cert-tests/data/key-gost12-256.p8.txt new file mode 100644 index 0000000000..1f45736bcc --- /dev/null +++ b/tests/cert-tests/data/key-gost12-256.p8.txt @@ -0,0 +1,33 @@ +Public Key Info: + Public Key Algorithm: GOST R 34.10-2012-256 + Key Security Level: High (256 bits) + +curve: CryptoPro-XchA +digest: STREEBOG-256 +paramset: TC26-Z +private key: + bf:cf:1d:62:3e:5c:dd:30:32:a7:c6:ea:bb:4a:92:3c + 46:e4:3d:64:0f:fe:aa:f2:c3:ed:39:a8:fa:39:99:24 + + +x: + 97:15:66:ce:da:43:6e:e7:67:8f:7e:07:e8:4e:bb:72 + 17:40:6c:0b:47:47:aa:8f:d2:ab:14:53:c3:d0:df:ba + + +y: + ad:58:73:69:65:94:9f:8e:59:83:0f:8d:e2:0f:c6:c0 + d1:77:f6:ab:59:98:74:f1:e2:e2:4f:f7:1f:9c:e6:43 + + + +Public Key PIN: + pin-sha256:T1yRU6smDaTNkinx7qvQTgdlWn3wf+NBoRSN0P+kZLU= +Public Key ID: + sha256:4f5c9153ab260da4cd9229f1eeabd04e07655a7df07fe341a1148dd0ffa464b5 + sha1:6af61bb89223c1fed11cd7cca8afce63112679ae + +-----BEGIN PRIVATE KEY----- +MEgCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIkAAYIKoUDBwEBAgIEIgQgJJk5+qg5 +7cPyqv4PZD3kRjySSrvqxqcyMN1cPmIdz78= +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-gost12-512.p8 b/tests/cert-tests/data/key-gost12-512.p8 new file mode 100644 index 0000000000..6c73a4ece3 --- /dev/null +++ b/tests/cert-tests/data/key-gost12-512.p8 @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MGoCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQICBggqhQMHAQECAwRCAkA/wBzc +1Oxfly60gndMQeZtt/OAUo3+nmeZK6Ba7kYkNXV1MOZBB3zlh7l2yO60jEj9M/0X +Xwx95qROAU5rywdL +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-illegal-rsa-pss.pem b/tests/cert-tests/data/key-illegal-rsa-pss.pem new file mode 100644 index 0000000000..7fe2f1c55c --- /dev/null +++ b/tests/cert-tests/data/key-illegal-rsa-pss.pem @@ -0,0 +1,138 @@ +Public Key Info: + Public Key Algorithm: RSA-PSS + Hash Algorithm: SHA256 + Salt Length: 1024 + Key Security Level: Medium (2048 bits) + +modulus: + 00:bc:84:37:48:41:7e:20:3b:4c:c5:ce:2a:f4:40:cc + d0:83:04:5a:00:e6:fa:b4:dd:a2:6f:36:c4:f9:8d:ab + 03:52:f5:b1:e6:2c:7d:26:2d:8a:39:ce:28:9a:c9:80 + 0a:d1:b8:a3:c3:ac:64:e5:f8:5d:5a:dd:06:5d:59:15 + e2:d1:e8:5a:e9:46:b8:67:82:27:4e:d5:26:25:58:f3 + 38:a5:25:6a:8f:be:a2:ff:37:aa:5c:8b:e4:74:ea:70 + bc:88:e8:9a:d4:ea:be:cf:fb:78:7c:89:4b:8d:7c:cf + 6c:0b:a9:da:2a:53:21:1b:f6:81:29:36:af:5a:90:4c + 40:a0:0b:fa:b0:1e:a1:76:7a:15:96:31:64:9b:4a:df + 48:71:ff:f5:e4:e0:31:98:3a:49:68:a9:a6:22:34:25 + 43:18:c0:5f:2c:b9:16:8e:14:5c:19:4e:0e:fe:17:c5 + f5:bc:f1:ca:67:ff:76:97:0e:98:3e:e3:08:09:79:a8 + 77:84:fe:92:a4:8f:8e:ed:b2:38:e1:f6:08:40:c4:db + 8e:a6:d5:e2:4e:4f:25:10:df:e4:0e:82:56:93:3c:de + 72:e2:da:20:2d:5b:36:f2:93:97:58:88:c0:b5:8f:d3 + 4d:f7:0d:bf:b5:33:65:bb:bb:83:e9:d5:24:2c:94:f2 + 5d: + +public exponent: + 01:00:01: + +private exponent: + 4d:19:f6:52:43:17:06:af:ba:32:9c:a3:cc:ca:43:fa + 73:db:6f:c4:36:b4:0b:0d:2a:c6:39:ac:4e:34:b6:e0 + e1:29:43:dd:54:0c:cb:74:8c:b8:1f:ad:53:c1:5d:f1 + 0e:dd:69:7d:3a:20:fa:3d:9e:50:ef:5d:0f:08:c4:7e + c4:43:38:0b:78:b5:2b:00:7c:7b:2d:8a:30:74:34:e5 + d2:05:7f:93:d2:f0:6f:59:a0:ff:c0:e7:6b:3a:07:69 + d4:c4:ed:ae:6f:64:23:44:42:7f:0c:d8:2d:c2:02:43 + ba:71:79:9d:1d:ea:c8:b9:05:12:8a:1f:25:f7:26:78 + 04:11:7c:ed:26:ab:71:37:f2:ca:19:fa:d2:24:df:91 + 75:35:8f:da:00:41:79:4f:4d:ba:2f:f2:66:a9:83:51 + 43:ac:bf:b1:26:e4:16:d7:a2:56:9f:57:19:ce:26:a1 + 80:e2:b8:f5:b9:af:ee:e2:ec:3b:04:0f:8b:87:a1:41 + bb:58:d0:28:a7:ef:05:48:83:29:2d:b4:f9:e3:b7:e3 + 36:5c:e4:df:42:43:19:2d:2b:f8:87:64:2b:00:90:42 + 1b:9c:5e:7a:ac:82:b1:5b:95:de:0a:35:43:83:77:fd + 3a:4f:9d:49:55:0c:56:c1:9d:79:08:a3:86:28:e5:31 + + +prime1: + 00:d1:01:9c:e2:64:8a:cf:58:46:e9:21:2f:e1:20:20 + d5:98:24:5c:31:8e:5f:1f:cf:83:52:da:67:d5:60:1e + a0:52:b9:03:10:a3:27:95:23:bd:8e:d9:49:5e:4f:fa + 51:28:13:cd:bb:07:8a:34:fd:5a:8e:fd:cf:19:79:48 + c0:a4:52:4d:c0:b0:2c:8d:03:3b:2d:fa:51:e9:61:dc + 66:fe:b5:5f:d5:dd:f3:51:5a:ca:3f:3c:84:79:cf:c4 + ab:82:63:2c:ba:94:ff:8d:c0:04:33:64:14:4c:6b:e1 + 88:74:2f:83:78:75:2e:be:ac:86:f6:fb:b6:b7:5a:30 + 6f: + +prime2: + 00:e6:e7:35:bd:cc:cd:6b:15:15:e7:d0:04:04:52:89 + 0e:72:07:de:2a:35:05:9c:0d:a4:b8:32:11:ce:7d:aa + eb:e7:79:bf:13:80:e4:07:9c:d4:0a:c3:cc:4c:7c:43 + 73:9c:0c:14:a9:bb:ed:ad:2f:95:31:35:eb:e2:ad:28 + e1:33:79:28:6a:27:f9:3b:0e:cc:f0:86:f1:4a:f6:c9 + c1:c9:0e:a3:49:1d:d9:bb:b2:6f:e7:4f:05:62:28:7e + a5:e9:79:df:66:98:db:27:42:5f:22:8b:72:66:d7:5a + 05:84:94:47:13:f5:36:26:60:34:bd:00:32:d3:d1:17 + f3: + +coefficient: + 2b:01:49:bd:b6:77:88:06:c8:71:79:44:b5:8b:5c:4f + 7b:42:95:be:e9:2a:65:3b:f3:0b:7b:85:43:4f:df:c0 + 9d:96:41:a8:d7:34:e6:74:39:1b:af:54:2d:6a:37:a9 + 5b:e6:ab:9c:39:52:d3:4a:95:19:7b:80:b6:fa:a6:ff + 12:10:17:a1:10:8c:da:dc:b6:e1:b7:d9:03:77:97:a3 + bf:28:a6:ff:34:04:53:15:5c:da:25:5d:49:0b:84:2a + e6:18:19:50:73:0a:53:53:6e:cb:bc:21:08:06:b1:11 + be:bf:6d:c9:12:ad:fe:a6:8a:5b:87:72:f7:92:d0:94 + + +exp1: + 00:96:67:ec:b8:56:d6:35:a4:37:53:69:58:85:4f:93 + 91:62:2d:38:53:49:3b:57:2f:04:38:49:87:d3:5b:9a + 6e:91:59:26:c5:80:43:e9:e5:90:72:0e:17:e8:50:f1 + b8:19:79:36:e1:d2:e9:38:7c:e2:00:68:d1:f2:68:ff + 5b:f2:64:70:23:ac:24:43:4e:01:f6:72:5f:23:ee:12 + a7:e3:c0:2e:39:3f:c1:eb:d7:c4:17:81:bb:6b:d5:82 + 98:51:fa:80:a3:bc:b9:b3:0e:6d:77:76:1b:cd:6b:0d + 20:1f:4c:59:f6:03:8e:22:15:12:03:06:dd:54:51:08 + ed: + +exp2: + 00:e3:3d:2e:1d:81:5d:b4:01:c7:52:20:dc:a3:28:5a + eb:d5:7b:3a:c0:4c:f8:1d:51:2c:07:7e:77:19:c1:81 + 21:b2:e7:95:0d:6b:ae:7e:73:70:16:bc:04:e6:4c:f0 + d0:e9:04:d6:9d:08:6e:eb:1e:c5:f3:ed:3e:1d:12:0f + 06:3a:73:05:3c:1b:e4:e2:a3:39:3b:89:82:14:25:75 + ff:79:90:27:50:40:c9:54:38:52:7a:d0:c0:da:8e:41 + bd:a4:5d:a5:67:42:0d:83:c0:85:01:e9:3c:88:4b:6d + b3:ba:7b:76:cc:04:69:eb:30:89:16:6c:08:99:7e:d0 + d3: + + +Public Key PIN: + pin-sha256:PpGrje0ZA5tMhx/WQRCuwVH5n+yaVcAvC5Ddg7J5Gl4= +Public Key ID: + sha256:3e91ab8ded19039b4c871fd64110aec151f99fec9a55c02f0b90dd83b2791a5e + sha1:c9fdf3e23c095aed38a2a48da03657dc1374ac91 + +-----BEGIN PRIVATE KEY----- +MIIE7wIBADA+BgkqhkiG9w0BAQowMaANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3 +DQEBCDALBglghkgBZQMEAgGiBAICBAAEggSoMIIEpAIBAAKCAQEAvIQ3SEF+IDtM +xc4q9EDM0IMEWgDm+rTdom82xPmNqwNS9bHmLH0mLYo5ziiayYAK0bijw6xk5fhd +Wt0GXVkV4tHoWulGuGeCJ07VJiVY8zilJWqPvqL/N6pci+R06nC8iOia1Oq+z/t4 +fIlLjXzPbAup2ipTIRv2gSk2r1qQTECgC/qwHqF2ehWWMWSbSt9Icf/15OAxmDpJ +aKmmIjQlQxjAXyy5Fo4UXBlODv4XxfW88cpn/3aXDpg+4wgJeah3hP6SpI+O7bI4 +4fYIQMTbjqbV4k5PJRDf5A6CVpM83nLi2iAtWzbyk5dYiMC1j9NN9w2/tTNlu7uD +6dUkLJTyXQIDAQABAoIBAE0Z9lJDFwavujKco8zKQ/pz22/ENrQLDSrGOaxONLbg +4SlD3VQMy3SMuB+tU8Fd8Q7daX06IPo9nlDvXQ8IxH7EQzgLeLUrAHx7LYowdDTl +0gV/k9Lwb1mg/8DnazoHadTE7a5vZCNEQn8M2C3CAkO6cXmdHerIuQUSih8l9yZ4 +BBF87SarcTfyyhn60iTfkXU1j9oAQXlPTbov8mapg1FDrL+xJuQW16JWn1cZziah +gOK49bmv7uLsOwQPi4ehQbtY0Cin7wVIgykttPnjt+M2XOTfQkMZLSv4h2QrAJBC +G5xeeqyCsVuV3go1Q4N3/TpPnUlVDFbBnXkIo4Yo5TECgYEA0QGc4mSKz1hG6SEv +4SAg1ZgkXDGOXx/Pg1LaZ9VgHqBSuQMQoyeVI72O2UleT/pRKBPNuweKNP1ajv3P +GXlIwKRSTcCwLI0DOy36Uelh3Gb+tV/V3fNRWso/PIR5z8SrgmMsupT/jcAEM2QU +TGvhiHQvg3h1Lr6shvb7trdaMG8CgYEA5uc1vczNaxUV59AEBFKJDnIH3io1BZwN +pLgyEc59quvneb8TgOQHnNQKw8xMfENznAwUqbvtrS+VMTXr4q0o4TN5KGon+TsO +zPCG8Ur2ycHJDqNJHdm7sm/nTwViKH6l6XnfZpjbJ0JfIotyZtdaBYSURxP1NiZg +NL0AMtPRF/MCgYEAlmfsuFbWNaQ3U2lYhU+TkWItOFNJO1cvBDhJh9Nbmm6RWSbF +gEPp5ZByDhfoUPG4GXk24dLpOHziAGjR8mj/W/JkcCOsJENOAfZyXyPuEqfjwC45 +P8Hr18QXgbtr1YKYUfqAo7y5sw5td3YbzWsNIB9MWfYDjiIVEgMG3VRRCO0CgYEA +4z0uHYFdtAHHUiDcoyha69V7OsBM+B1RLAd+dxnBgSGy55UNa65+c3AWvATmTPDQ +6QTWnQhu6x7F8+0+HRIPBjpzBTwb5OKjOTuJghQldf95kCdQQMlUOFJ60MDajkG9 +pF2lZ0INg8CFAek8iEtts7p7dswEaeswiRZsCJl+0NMCgYArAUm9tneIBshxeUS1 +i1xPe0KVvukqZTvzC3uFQ0/fwJ2WQajXNOZ0ORuvVC1qN6lb5qucOVLTSpUZe4C2 ++qb/EhAXoRCM2ty24bfZA3eXo78opv80BFMVXNolXUkLhCrmGBlQcwpTU27LvCEI +BrERvr9tyRKt/qaKW4dy95LQlA== +-----END PRIVATE KEY----- diff --git a/tests/key-tests/data/key-illegal.pem b/tests/cert-tests/data/key-illegal.pem similarity index 100% rename from tests/key-tests/data/key-illegal.pem rename to tests/cert-tests/data/key-illegal.pem diff --git a/tests/key-tests/data/key-invalid1.der b/tests/cert-tests/data/key-invalid1.der similarity index 100% rename from tests/key-tests/data/key-invalid1.der rename to tests/cert-tests/data/key-invalid1.der diff --git a/tests/key-tests/data/key-invalid2.der b/tests/cert-tests/data/key-invalid2.der similarity index 100% rename from tests/key-tests/data/key-invalid2.der rename to tests/cert-tests/data/key-invalid2.der diff --git a/tests/key-tests/data/key-invalid3.der b/tests/cert-tests/data/key-invalid3.der similarity index 100% rename from tests/key-tests/data/key-invalid3.der rename to tests/cert-tests/data/key-invalid3.der diff --git a/tests/cert-tests/data/key-invalid4.der b/tests/cert-tests/data/key-invalid4.der new file mode 100644 index 0000000000..e66c74d6c0 --- /dev/null +++ b/tests/cert-tests/data/key-invalid4.der @@ -0,0 +1 @@ +0D 0+ep8 \ No newline at end of file diff --git a/tests/cert-tests/data/key-invalid5.der b/tests/cert-tests/data/key-invalid5.der new file mode 100644 index 0000000000..e03829cb79 Binary files /dev/null and b/tests/cert-tests/data/key-invalid5.der differ diff --git a/tests/cert-tests/data/key-invalid6.der b/tests/cert-tests/data/key-invalid6.der new file mode 100644 index 0000000000..d4efbcb1ca Binary files /dev/null and b/tests/cert-tests/data/key-invalid6.der differ diff --git a/tests/cert-tests/data/key-rsa-pss-raw.pem b/tests/cert-tests/data/key-rsa-pss-raw.pem new file mode 100644 index 0000000000..6ef9e8b611 --- /dev/null +++ b/tests/cert-tests/data/key-rsa-pss-raw.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAndjwZ1p/m9BbCDGxvn/yvqINoivwaCwrCQ94/ckTUhw+sE4n +2MDU23tSxf/Ac8XMFUQg9M6W6RUGsG48W5gUs616kJVBRRtdQ7zQWsOfK4BxqN02 +Aq7RSAXy284sgdcP71nl9MR77/DDCdYkUnWPu2N+mtnFfrPOT3TuAU6WZS38vCzz ++qevnYFaAvvbU7th9cAEWDlaIPo7fQNx8dC9ccVVk3nRaIitrFaLs3y0Y36eXDsL +kR0g9qm6RjgHjVVWjhPPAb96SBj4LjMNKgHRA6NtIUWB9tyyMrwcAaAp8hTZwFYj +LS2tkJV0pYlfWvQSjl2I1swHrKNkheKXR3L3eQIDAQABAoIBAAKf1QzSR52AQCPH +RbwBjMqaYaQA7af9KNwnYeFpcZmKa5sdTGUV/RZG8gOcgrBw7bBQHI4ERNtntI1f +dPbMvi1euUD7WJMRdN3A6G0xUcj5MRzcXqyxPpgD2ZcAmxELI+2lx/LedP5XFM1X +mbZaivL4c1PO1N+nld0QinEwelYlW3slHPT2ogpx2MuA9vcmgHjwooblZOwZFVrf +43GZ2JGwoqpSeKJP0VeKGrgjrHRlkaR3jBNZ9wj/Kq4pkW8a3pxL/sbwAxvqbNcd +vjaolnXv7rOy2DcxyN4CZ6SXJGWn8DC5SCbF5UnoUY5I3Kvd3CKFbGuV9z4z+g5B +XMJ90EECgYEAtsIcY/YrAHdDn9BrOp0FhdYdalBN1GXqx0o8euCjtVeh3nh9ZAj7 +q3xYJiv8seLe8kucGLeJ/cwx/pBFZ8VbJEuadKHrFJL3ibdhBXt74T6pIk9aUUTo +6psn8Fv10WDf9fBwnK1WIxPNRVJwW/CDTdmRcRnAUoj7R55LdA4sw1kCgYEA3Rsg +zwhRQGVCLU5rsq9vScPljXZfPjDvce0GTyqVMviz7LCKK1qPpi417zFmeqlMLmKO +W6sjVEdgpEO6895LCNyKeFIZ6fUt37c34tFzfYu1lFpR2UKt+jzvM62rqGvOBw7c +TKoSLefiXWrHkG5Vv8ZuApuZ1yZw8tpz3egf8SECgYEAoJr7ChmV9qXYhsRIx0yg +QtpEJV6G1wXtic9CURXCqCVnubMXNmbyi+QNLxZuzgC6viEV/16j5KaitLwiUixM +iRvrk12L0hvJb3v4xjGbTvma9uzXSR4OtcU+FuspniPNDTuMKxPk45SOSsJEvXci +XLK7LrJboeyBLpH8avPeAJkCgYEAgwJ//iw/eJiHDbFZvxaUKnEYoylwZbk5J5f6 +FQ52OS2D7srsE6QlWaIn8wKiZivKJ/HdyBMva9CfQrWfIMCmVSnYIlMDZ80O0XAO +fSb993XAsZaSyNjpnUxdr5FIFRNLkIMNpZ9gBjNPvWp3tOyrgmZg6Mqp7QGqCzvF +S8cupgECgYBLM3bufFd34WvIIduXO3bGeJJSLBBKIkVFl0je37ywpNLryC3M9t8T +O2l5zgh3fLtAMvgmT2Z8RCl0MO2jIZunpJ9rHrFGv2eemhWjZrJ764fMvCZwcRYG +jmt6rS9kYu++P/oa5a8Ha1rk4vjyfkqcZST4CHitTJLQgNwQUPMRkg== +-----END RSA PRIVATE KEY----- diff --git a/tests/cert-tests/data/key-rsa-pss.pem b/tests/cert-tests/data/key-rsa-pss.pem new file mode 100644 index 0000000000..1339318c9b --- /dev/null +++ b/tests/cert-tests/data/key-rsa-pss.pem @@ -0,0 +1,29 @@ +-----BEGIN PRIVATE KEY----- +MIIE/QIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAndjwZ1p/m9BbCDGx +vn/yvqINoivwaCwrCQ94/ckTUhw+sE4n2MDU23tSxf/Ac8XMFUQg9M6W6RUGsG48 +W5gUs616kJVBRRtdQ7zQWsOfK4BxqN02Aq7RSAXy284sgdcP71nl9MR77/DDCdYk +UnWPu2N+mtnFfrPOT3TuAU6WZS38vCzz+qevnYFaAvvbU7th9cAEWDlaIPo7fQNx +8dC9ccVVk3nRaIitrFaLs3y0Y36eXDsLkR0g9qm6RjgHjVVWjhPPAb96SBj4LjMN +KgHRA6NtIUWB9tyyMrwcAaAp8hTZwFYjLS2tkJV0pYlfWvQSjl2I1swHrKNkheKX +R3L3eQIDAQABAoIBAAKf1QzSR52AQCPHRbwBjMqaYaQA7af9KNwnYeFpcZmKa5sd +TGUV/RZG8gOcgrBw7bBQHI4ERNtntI1fdPbMvi1euUD7WJMRdN3A6G0xUcj5MRzc +XqyxPpgD2ZcAmxELI+2lx/LedP5XFM1XmbZaivL4c1PO1N+nld0QinEwelYlW3sl +HPT2ogpx2MuA9vcmgHjwooblZOwZFVrf43GZ2JGwoqpSeKJP0VeKGrgjrHRlkaR3 +jBNZ9wj/Kq4pkW8a3pxL/sbwAxvqbNcdvjaolnXv7rOy2DcxyN4CZ6SXJGWn8DC5 +SCbF5UnoUY5I3Kvd3CKFbGuV9z4z+g5BXMJ90EECgYEAtsIcY/YrAHdDn9BrOp0F +hdYdalBN1GXqx0o8euCjtVeh3nh9ZAj7q3xYJiv8seLe8kucGLeJ/cwx/pBFZ8Vb +JEuadKHrFJL3ibdhBXt74T6pIk9aUUTo6psn8Fv10WDf9fBwnK1WIxPNRVJwW/CD +TdmRcRnAUoj7R55LdA4sw1kCgYEA3RsgzwhRQGVCLU5rsq9vScPljXZfPjDvce0G +TyqVMviz7LCKK1qPpi417zFmeqlMLmKOW6sjVEdgpEO6895LCNyKeFIZ6fUt37c3 +4tFzfYu1lFpR2UKt+jzvM62rqGvOBw7cTKoSLefiXWrHkG5Vv8ZuApuZ1yZw8tpz +3egf8SECgYEAoJr7ChmV9qXYhsRIx0ygQtpEJV6G1wXtic9CURXCqCVnubMXNmby +i+QNLxZuzgC6viEV/16j5KaitLwiUixMiRvrk12L0hvJb3v4xjGbTvma9uzXSR4O +tcU+FuspniPNDTuMKxPk45SOSsJEvXciXLK7LrJboeyBLpH8avPeAJkCgYEAgwJ/ +/iw/eJiHDbFZvxaUKnEYoylwZbk5J5f6FQ52OS2D7srsE6QlWaIn8wKiZivKJ/Hd +yBMva9CfQrWfIMCmVSnYIlMDZ80O0XAOfSb993XAsZaSyNjpnUxdr5FIFRNLkIMN +pZ9gBjNPvWp3tOyrgmZg6Mqp7QGqCzvFS8cupgECgYBLM3bufFd34WvIIduXO3bG +eJJSLBBKIkVFl0je37ywpNLryC3M9t8TO2l5zgh3fLtAMvgmT2Z8RCl0MO2jIZun +pJ9rHrFGv2eemhWjZrJ764fMvCZwcRYGjmt6rS9kYu++P/oa5a8Ha1rk4vjyfkqc +ZST4CHitTJLQgNwQUPMRkqA/MD0GCisGAQQBkggSCAExLzAtBglghkgBZQMEAgIE +ILWm/DHKGyMQovHstoEtkzhztk8rmVuJOkhzfJf+y/a3 +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/long-oids.pem b/tests/cert-tests/data/long-oids.pem index 0306f536b9..15e8b3ed24 100644 --- a/tests/cert-tests/data/long-oids.pem +++ b/tests/cert-tests/data/long-oids.pem @@ -36,6 +36,8 @@ X.509 Certificate Information: Key encipherment. Data encipherment. Authority Key Identifier (not critical): + directoryName: CN=sat-r220-10.lab.eng.rdu2.redhat.com,OU=SomeOrgUnit,O=Katello,L=Raleigh,ST=North Carolina,C=US + serial: 00a4e7caebbe435dcc caca62860405f0f59b38d22c3c8c650fc6baa53c Subject Key Identifier (not critical): 0e8d7b53ba5a9e9244e56458a1db8347053e32d3 diff --git a/tests/cert-tests/data/long-serial.pem b/tests/cert-tests/data/long-serial.pem new file mode 100644 index 0000000000..e7e96e831b --- /dev/null +++ b/tests/cert-tests/data/long-serial.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIENDCCA52gAwIBAgIUEjRWeJCrze/+3LoJh2VDIavN7xIwDQYJKoZIhvcNAQEL +BQAwgbgxFTATBgNVBAMTDENpbmR5IExhdXBlcjEXMBUGCgmSJomT8ixkAQETB2Ns +YXVwZXIxFzAVBgNVBAsTDnNsZWVwaW5nIGRlcHQuMRIwEAYDVQQKEwlLb2tvIGlu +Yy4xDzANBgNVBAgTBkF0dGlraTELMAkGA1UEBhMCR1IxDDAKBgNVBAwTA0RyLjEP +MA0GA1UEQRMGamFja2FsMRwwGgYJKoZIhvcNAQkBFg1ub25lQG5vbmUub3JnMB4X +DTA3MDQyMjAwMDAwMFoXDTE0MDUyNTAwMDAwMFowgbgxFTATBgNVBAMTDENpbmR5 +IExhdXBlcjEXMBUGCgmSJomT8ixkAQETB2NsYXVwZXIxFzAVBgNVBAsTDnNsZWVw +aW5nIGRlcHQuMRIwEAYDVQQKEwlLb2tvIGluYy4xDzANBgNVBAgTBkF0dGlraTEL +MAkGA1UEBhMCR1IxDDAKBgNVBAwTA0RyLjEPMA0GA1UEQRMGamFja2FsMRwwGgYJ +KoZIhvcNAQkBFg1ub25lQG5vbmUub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB +iQKBgQClxs51Q4S/ZJ4CJxPxA1n3eS2S7XwvUKQD8S15uYaLBX46u0Sqr4TPE5ge +HEo49zMtep9y1GttJrAxN3AQ+0Lp2J0YZX4ZSfwFlgRogx53hr/t9eUSOxP+Mxic +Gnodaa9HAmB6H7noz9vINDBRlj2MllwAvGHeCA+xNiF/qQDjBQIDAQABo4IBNzCC +ATMwDwYDVR0TAQH/BAUwAwEB/zBqBgNVHREEYzBhggx3d3cubm9uZS5vcmeCE3d3 +dy5tb3JldGhhbm9uZS5vcmeCF3d3dy5ldmVubW9yZXRoYW5vbmUub3JnhwTAqAEB +gQ1ub25lQG5vbmUub3JngQ53aGVyZUBub25lLm9yZzATBgNVHSUEDDAKBggrBgEF +BQcDCTAPBgNVHQ8BAf8EBQMDB4QAMB0GA1UdDgQWBBRdQK3wzpRAlYt+mZQdklQi +ynI2XzBvBgNVHR8EaDBmMGSgYqBghh5odHRwOi8vd3d3LmdldGNybC5jcmwvZ2V0 +Y3JsMS+GHmh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwyL4YeaHR0cDovL3d3 +dy5nZXRjcmwuY3JsL2dldGNybDMvMA0GCSqGSIb3DQEBCwUAA4GBAHkjOKCpVUDK +zobnWDx5zl0XSe1P+mF576BoSBN6Qs6M5Vt2r8+annglcn6ovd+uk89jRmy/lrkn +7wWc+xIrgG97CWNIJ23WZg2b5+ervdIdMUDs/Kf9ZVZwOnBhO9tMHyU5ZmWKEpD4 +nmgDQNFBHFx5LQU9RthnskMBT034eJtV +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/openpgp-invalid1.pub b/tests/cert-tests/data/openpgp-invalid1.pub deleted file mode 100644 index dd38a04dc6..0000000000 Binary files a/tests/cert-tests/data/openpgp-invalid1.pub and /dev/null differ diff --git a/tests/cert-tests/data/openpgp-invalid2.pub b/tests/cert-tests/data/openpgp-invalid2.pub deleted file mode 100644 index 93d9df5ce5..0000000000 Binary files a/tests/cert-tests/data/openpgp-invalid2.pub and /dev/null differ diff --git a/tests/cert-tests/data/openpgp-invalid3.pub b/tests/cert-tests/data/openpgp-invalid3.pub deleted file mode 100644 index 65d1b59045..0000000000 Binary files a/tests/cert-tests/data/openpgp-invalid3.pub and /dev/null differ diff --git a/tests/cert-tests/data/openpgp-invalid4.pub b/tests/cert-tests/data/openpgp-invalid4.pub deleted file mode 100644 index 5bd7dea14b..0000000000 --- a/tests/cert-tests/data/openpgp-invalid4.pub +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/cert-tests/data/openpgp-invalid5.pub b/tests/cert-tests/data/openpgp-invalid5.pub deleted file mode 100644 index a4b6f5ff56..0000000000 --- a/tests/cert-tests/data/openpgp-invalid5.pub +++ /dev/null @@ -1 +0,0 @@ -͠͠ \ No newline at end of file diff --git a/tests/cert-tests/data/openpgp-invalid6.pub b/tests/cert-tests/data/openpgp-invalid6.pub deleted file mode 100644 index 21a1593bcf..0000000000 Binary files a/tests/cert-tests/data/openpgp-invalid6.pub and /dev/null differ diff --git a/tests/cert-tests/data/openpgp-invalid7.pub b/tests/cert-tests/data/openpgp-invalid7.pub deleted file mode 100644 index f808f49c0c..0000000000 Binary files a/tests/cert-tests/data/openpgp-invalid7.pub and /dev/null differ diff --git a/tests/cert-tests/data/openpgp-invalid8.pub b/tests/cert-tests/data/openpgp-invalid8.pub deleted file mode 100644 index 3ee82dab01..0000000000 Binary files a/tests/cert-tests/data/openpgp-invalid8.pub and /dev/null differ diff --git a/tests/key-tests/data/openssl-3des.p8 b/tests/cert-tests/data/openssl-3des.p8 similarity index 100% rename from tests/key-tests/data/openssl-3des.p8 rename to tests/cert-tests/data/openssl-3des.p8 diff --git a/tests/key-tests/data/openssl-3des.p8.txt b/tests/cert-tests/data/openssl-3des.p8.txt similarity index 100% rename from tests/key-tests/data/openssl-3des.p8.txt rename to tests/cert-tests/data/openssl-3des.p8.txt diff --git a/tests/key-tests/data/openssl-aes128.p8 b/tests/cert-tests/data/openssl-aes128.p8 similarity index 100% rename from tests/key-tests/data/openssl-aes128.p8 rename to tests/cert-tests/data/openssl-aes128.p8 diff --git a/tests/key-tests/data/openssl-aes128.p8.txt b/tests/cert-tests/data/openssl-aes128.p8.txt similarity index 100% rename from tests/key-tests/data/openssl-aes128.p8.txt rename to tests/cert-tests/data/openssl-aes128.p8.txt diff --git a/tests/key-tests/data/openssl-aes256.p8 b/tests/cert-tests/data/openssl-aes256.p8 similarity index 100% rename from tests/key-tests/data/openssl-aes256.p8 rename to tests/cert-tests/data/openssl-aes256.p8 diff --git a/tests/key-tests/data/openssl-aes256.p8.txt b/tests/cert-tests/data/openssl-aes256.p8.txt similarity index 100% rename from tests/key-tests/data/openssl-aes256.p8.txt rename to tests/cert-tests/data/openssl-aes256.p8.txt diff --git a/tests/cert-tests/data/openssl-invalid-time-format.pem b/tests/cert-tests/data/openssl-invalid-time-format.pem new file mode 100644 index 0000000000..7a55b47d8a --- /dev/null +++ b/tests/cert-tests/data/openssl-invalid-time-format.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDyjCCArKgAwIBAgICEAAwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DWlpb3JkYW5vdi5jb20xIjAgBgNVBAMTGW92aXJ0Lmlpb3JkYW5vdi5jb20uNzE5NzUwIhcRMTQw +NjE2MjIxMTA1KzAwMDAXDTI0MDYxNDIyMTEwNVowSTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDWlp +b3JkYW5vdi5jb20xIjAgBgNVBAMTGW92aXJ0Lmlpb3JkYW5vdi5jb20uNzE5NzUwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1gS9aSehHWenPdIAayB8eovfVe3h9vqwlTzfOZaiJK56f +P1shhwu/shML9g9xADBtJ2MyXhgY+V20mJ2oOivqotTeIcHc0vs5fJcBuwWXxFt8ISDkFXhnsX+9 +8MP1Fhc3PEIxlhMitFK7+7d6JxSd6lQsIgeruyf2A+aSLD02QUpNdnhxJ48FMncJUrFycTDZtnb2 +REJWgl1cRa8MMtiLKoMYdC+t3P9Am27vOpRmh0U6rB4qym1wYj9JbEES4mbS/u1JQgKv+AXgS1QD +5ZFpTXPDeOs2QPJtrwD2nu5Sd2aCMAv8MHqeR8nfaixkpKC4JxF6fnR+Ynn4wzKOdpOhAgMBAAGj +gbcwgbQwHQYDVR0OBBYEFEhIahZoIh8Wzfpi/nbPJ81SQwFkMHIGA1UdIwRrMGmAFEhIahZoIh8W +zfpi/nbPJ81SQwFkoU2kSzBJMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNaWlvcmRhbm92LmNvbTEi +MCAGA1UEAxMZb3ZpcnQuaWlvcmRhbm92LmNvbS43MTk3NYICEAAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAAYMFGll2Ib7wpitipon6S9C25A8fnx7 +wLXKY3fUBJmtpLxTjSZfPbhmNkCvwGbmjG78AFbl+dY1+PDmEK1w2DgNWw2I9WcY4ULJoINo3YZv +p2s53iYW3U+Syz+WLrIW0om5bM1Y0fw8KbuAuWsJzJfbd1hMGeMV6axKx7FbECuN0a02sCo2kIxk +ckg/aGgshQ4EkqP79j7O25WaZdcBZDpYsqSDvcG6Oy4qM3dde/EBZiflPu4mvIwL15ilGXfO/zPk +p49fcKm5YE8LC9PvsS+NSnD9avxRQq8bY4an2FUxoh5mSh+UY2rpd9yX7WCBtZ9TwHkkaeNehgRz +7crbZrA= +-----END CERTIFICATE----- diff --git a/tests/key-tests/data/openssl-key-ecc.p8 b/tests/cert-tests/data/openssl-key-ecc.p8 similarity index 100% rename from tests/key-tests/data/openssl-key-ecc.p8 rename to tests/cert-tests/data/openssl-key-ecc.p8 diff --git a/tests/cert-tests/data/openssl-keyid.p7b.out b/tests/cert-tests/data/openssl-keyid.p7b.out index 3eefda94c6..de622ea1fe 100644 --- a/tests/cert-tests/data/openssl-keyid.p7b.out +++ b/tests/cert-tests/data/openssl-keyid.p7b.out @@ -2,10 +2,10 @@ Signers: Signer's issuer key ID: 7607584ceab529f52d80068c834a820d09ec93de Signature Algorithm: RSA-SHA256 Signed Attributes: - 1.2.840.113549.1.9.15: 306a300b060960864801650304012a300b0609608648016503040116300b0609608648016503040102300a06082a864886f70d0307300e06082a864886f70d030202020080300d06082a864886f70d0302020140300706052b0e030207300d06082a864886f70d0302020128 - 1.2.840.113549.1.9.4: 0420728be51f7b63dcf73f28ba80d277ce47f8cf5a75a02d4e6770e19baa57a767a4 - 1.2.840.113549.1.9.5: 170d3136313132343135353132375a - 1.2.840.113549.1.9.3: 06092a864886f70d010701 + smimeCapabilities: 306a300b060960864801650304012a300b0609608648016503040116300b0609608648016503040102300a06082a864886f70d0307300e06082a864886f70d030202020080300d06082a864886f70d0302020140300706052b0e030207300d06082a864886f70d0302020128 + messageDigest: 0420728be51f7b63dcf73f28ba80d277ce47f8cf5a75a02d4e6770e19baa57a767a4 + signingTime: 170d3136313132343135353132375a + contentType: 06092a864886f70d010701 Number of certificates: 2 diff --git a/tests/cert-tests/data/openssl.p7b.out b/tests/cert-tests/data/openssl.p7b.out index 6330451477..6d2e69d2ea 100644 --- a/tests/cert-tests/data/openssl.p7b.out +++ b/tests/cert-tests/data/openssl.p7b.out @@ -3,10 +3,10 @@ Signers: Signer's serial: 5838027a15510d5a Signature Algorithm: ECDSA-SHA256 Signed Attributes: - 1.2.840.113549.1.9.15: 306a300b060960864801650304012a300b0609608648016503040116300b0609608648016503040102300a06082a864886f70d0307300e06082a864886f70d030202020080300d06082a864886f70d0302020140300706052b0e030207300d06082a864886f70d0302020128 - 1.2.840.113549.1.9.4: 0420728be51f7b63dcf73f28ba80d277ce47f8cf5a75a02d4e6770e19baa57a767a4 - 1.2.840.113549.1.9.5: 170d3136313132353039333233305a - 1.2.840.113549.1.9.3: 06092a864886f70d010701 + smimeCapabilities: 306a300b060960864801650304012a300b0609608648016503040116300b0609608648016503040102300a06082a864886f70d0307300e06082a864886f70d030202020080300d06082a864886f70d0302020140300706052b0e030207300d06082a864886f70d0302020128 + messageDigest: 0420728be51f7b63dcf73f28ba80d277ce47f8cf5a75a02d4e6770e19baa57a767a4 + signingTime: 170d3136313132353039333233305a + contentType: 06092a864886f70d010701 Number of certificates: 2 diff --git a/tests/key-tests/data/p8key-illegal.pem b/tests/cert-tests/data/p8key-illegal.pem similarity index 100% rename from tests/key-tests/data/p8key-illegal.pem rename to tests/cert-tests/data/p8key-illegal.pem diff --git a/tests/cert-tests/data/pkcs7-eddsa-sig.p7s b/tests/cert-tests/data/pkcs7-eddsa-sig.p7s new file mode 100644 index 0000000000..911b8c17ea Binary files /dev/null and b/tests/cert-tests/data/pkcs7-eddsa-sig.p7s differ diff --git a/tests/cert-tests/data/pkcs8-eddsa.pem b/tests/cert-tests/data/pkcs8-eddsa.pem new file mode 100644 index 0000000000..e447080ae2 --- /dev/null +++ b/tests/cert-tests/data/pkcs8-eddsa.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/pkcs8-eddsa.pem.txt b/tests/cert-tests/data/pkcs8-eddsa.pem.txt new file mode 100644 index 0000000000..665124de2c --- /dev/null +++ b/tests/cert-tests/data/pkcs8-eddsa.pem.txt @@ -0,0 +1,25 @@ +Public Key Info: + Public Key Algorithm: EdDSA (Ed25519) + Key Security Level: High (256 bits) + +curve: Ed25519 +private key: + d4:ee:72:db:f9:13:58:4a:d5:b6:d8:f1:f7:69:f8:ad + 3a:fe:7c:28:cb:f1:d4:fb:e0:97:a8:8f:44:75:58:42 + + +x: + 19:bf:44:09:69:84:cd:fe:85:41:ba:c1:67:dc:3b:96 + c8:50:86:aa:30:b6:b6:cb:0c:5c:38:ad:70:31:66:e1 + + + +Public Key PIN: + pin-sha256:oekVYFTgT6yJmunydRMs3Ael28TqLCrTof/G4NJTaB8= +Public Key ID: + sha256:a1e9156054e04fac899ae9f275132cdc07a5dbc4ea2c2ad3a1ffc6e0d253681f + sha1:3a04967761a552db7e9e18c6dba4bd4aae119908 + +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhC +-----END PRIVATE KEY----- diff --git a/tests/key-tests/data/pkcs8-invalid1.der b/tests/cert-tests/data/pkcs8-invalid1.der similarity index 100% rename from tests/key-tests/data/pkcs8-invalid1.der rename to tests/cert-tests/data/pkcs8-invalid1.der diff --git a/tests/key-tests/data/pkcs8-invalid10.der b/tests/cert-tests/data/pkcs8-invalid10.der similarity index 100% rename from tests/key-tests/data/pkcs8-invalid10.der rename to tests/cert-tests/data/pkcs8-invalid10.der diff --git a/tests/cert-tests/data/pkcs8-invalid11.der b/tests/cert-tests/data/pkcs8-invalid11.der new file mode 100644 index 0000000000..7f4fda8df0 Binary files /dev/null and b/tests/cert-tests/data/pkcs8-invalid11.der differ diff --git a/tests/key-tests/data/pkcs8-invalid2.der b/tests/cert-tests/data/pkcs8-invalid2.der similarity index 100% rename from tests/key-tests/data/pkcs8-invalid2.der rename to tests/cert-tests/data/pkcs8-invalid2.der diff --git a/tests/key-tests/data/pkcs8-invalid3.der b/tests/cert-tests/data/pkcs8-invalid3.der similarity index 100% rename from tests/key-tests/data/pkcs8-invalid3.der rename to tests/cert-tests/data/pkcs8-invalid3.der diff --git a/tests/key-tests/data/pkcs8-invalid4.der b/tests/cert-tests/data/pkcs8-invalid4.der similarity index 100% rename from tests/key-tests/data/pkcs8-invalid4.der rename to tests/cert-tests/data/pkcs8-invalid4.der diff --git a/tests/key-tests/data/pkcs8-invalid5.der b/tests/cert-tests/data/pkcs8-invalid5.der similarity index 100% rename from tests/key-tests/data/pkcs8-invalid5.der rename to tests/cert-tests/data/pkcs8-invalid5.der diff --git a/tests/key-tests/data/pkcs8-invalid6.der b/tests/cert-tests/data/pkcs8-invalid6.der similarity index 100% rename from tests/key-tests/data/pkcs8-invalid6.der rename to tests/cert-tests/data/pkcs8-invalid6.der diff --git a/tests/key-tests/data/pkcs8-invalid7.der b/tests/cert-tests/data/pkcs8-invalid7.der similarity index 100% rename from tests/key-tests/data/pkcs8-invalid7.der rename to tests/cert-tests/data/pkcs8-invalid7.der diff --git a/tests/key-tests/data/pkcs8-invalid8.der b/tests/cert-tests/data/pkcs8-invalid8.der similarity index 100% rename from tests/key-tests/data/pkcs8-invalid8.der rename to tests/cert-tests/data/pkcs8-invalid8.der diff --git a/tests/key-tests/data/pkcs8-invalid9.der b/tests/cert-tests/data/pkcs8-invalid9.der similarity index 100% rename from tests/key-tests/data/pkcs8-invalid9.der rename to tests/cert-tests/data/pkcs8-invalid9.der diff --git a/tests/key-tests/data/pkcs8-pbes1-des-md5.pem b/tests/cert-tests/data/pkcs8-pbes1-des-md5.pem similarity index 100% rename from tests/key-tests/data/pkcs8-pbes1-des-md5.pem rename to tests/cert-tests/data/pkcs8-pbes1-des-md5.pem diff --git a/tests/key-tests/data/pkcs8-pbes2-sha256.pem b/tests/cert-tests/data/pkcs8-pbes2-sha256.pem similarity index 100% rename from tests/key-tests/data/pkcs8-pbes2-sha256.pem rename to tests/cert-tests/data/pkcs8-pbes2-sha256.pem diff --git a/tests/cert-tests/data/provable-dsa2048-fips.pem b/tests/cert-tests/data/provable-dsa2048-fips.pem index 8a1721b49f..88d86e0617 100644 --- a/tests/cert-tests/data/provable-dsa2048-fips.pem +++ b/tests/cert-tests/data/provable-dsa2048-fips.pem @@ -3,26 +3,26 @@ Public Key Info: Key Security Level: Medium (2048 bits) private key: - 74:e9:11:38:4b:02:b6:c6:8a:65:54:72:1a:6a:fd:a6 - 23:a7:93:7c:0a:61:86:91:eb:10:0b:02: + 67:eb:a2:a2:24:90:88:85:6f:f5:43:f2:fe:bd:ba:eb + cd:4d:93:56:ee:b6:a6:d8:09:1b:67:24: public key: - 12:91:1b:dc:39:ea:0d:67:0a:f7:b3:34:a1:d4:88:16 - 05:6b:54:7a:31:43:45:74:15:71:5a:a9:e0:89:31:0e - db:0f:66:df:8d:03:9a:b1:28:50:5a:49:c4:33:b5:d5 - cc:9e:e3:e6:4f:aa:d4:27:10:c9:99:5f:cc:7c:ce:76 - fe:3b:c9:6f:84:22:65:1c:bc:9b:d3:c2:87:59:76:65 - ff:ac:ae:9a:d5:7a:8b:f9:e0:f0:b6:7e:3b:eb:1d:53 - cb:2e:80:35:88:90:49:67:4b:6b:59:d9:19:04:3a:43 - 35:51:1d:b9:82:d1:b3:b9:ba:02:2c:cc:86:20:00:4a - fb:ff:a7:1d:00:dd:40:86:a4:7f:f7:aa:70:8d:98:87 - 9a:a8:dd:0f:32:c9:ac:db:40:a5:34:14:e8:78:3f:d7 - 57:3b:fd:1b:f0:35:58:13:12:07:ec:6b:45:76:7c:5d - 00:5d:60:18:08:00:b3:89:32:78:2a:55:33:2e:d4:fb - 2d:11:95:ad:7f:8b:da:2a:ae:40:61:44:d0:0b:f7:2a - 65:d9:26:5e:38:1c:05:0d:81:8c:3c:ec:64:3e:a0:5a - 4e:0b:27:22:cb:e9:de:70:d8:dd:b8:dc:00:ca:6d:88 - 24:a3:9e:fb:7d:2e:63:07:f3:3a:02:7b:65:2a:96:33 + 5e:2c:7f:8b:9e:77:c2:e4:c9:48:e2:ec:82:18:d5:a3 + 2b:51:0c:09:c5:13:d6:71:e6:06:ad:e6:fb:a5:8b:62 + ff:fd:32:b5:cc:10:06:16:f5:c2:14:be:76:0d:85:55 + 4b:6a:76:54:de:02:7f:3c:1a:6f:a3:e7:12:f2:a4:97 + 24:12:ca:f0:92:6d:ba:90:cf:ea:3a:12:e4:f9:d9:83 + 22:6d:b0:3d:97:83:c8:62:94:98:53:64:d0:1a:42:0e + e6:3d:01:2f:88:88:5f:38:b5:f3:25:89:c8:77:af:72 + bb:08:b4:6d:83:d4:4a:ff:69:f8:f8:07:50:5e:1a:45 + e2:2e:d5:24:bf:a5:78:f7:aa:ea:05:9d:26:ea:58:0e + 8e:de:85:4d:4f:fe:c4:ef:de:c8:13:66:4b:75:29:ee + 9c:9c:70:6c:cc:78:d2:14:c1:32:65:1a:3c:a7:39:f3 + e0:b3:54:0e:a6:96:16:db:a2:6b:de:fe:8c:2b:2c:ab + 4d:25:95:02:56:72:6d:56:d4:7b:47:a8:cf:ba:ab:46 + 39:6d:2c:c7:a3:22:0b:64:0e:5a:45:39:96:50:7a:23 + 6e:f2:29:4e:45:bb:b1:af:62:65:7c:17:23:03:4e:6b + e1:b7:47:1d:89:97:04:47:8a:8c:f7:70:bf:51:1e:f0 p: @@ -67,61 +67,30 @@ g: 5f:a6:5a:a1:19:c9:02:c8:74:78:8b:4d:a8:d8:b3:a1 15: +Validation parameters: + Hash: SHA384 + Seed: 30ec334f97dbc0ba9c8652a7b5d3f7b2dbbb48a4842e190d210e01dabd535981503755ee96a270a598e9d91b2254669169ebdf4599d9f72aca -Seed: 30:EC:33:4F:97:DB:C0:BA:9C:86:52:A7:B5:D3:F7:B2:DB:BB:48:A4:84:2E:19:0D:21:0E:01:DA:BD:53:59:81:50:37:55:EE:96:A2:70:A5:98:E9:D9:1B:22:54:66:91:69:EB:DF:45:99:D9:F7:2A:CA -Public Key ID: C5:59:A0:B5:3E:E9:06:9F:FA:A2:43:1B:35:29:0D:D8:CC:42:5D:48 -Public key's random art: -+--[ DSA 2048]----+ -| ..BEo. o.. | -| o B + + | -| . o..= | -| . =o . | -| oS.+ | -| o + o | -| . o = | -| o .o | -| .o.o. | -+-----------------+ +Public Key PIN: + pin-sha256:kWjJ51vBhVP3rLC/xzEjlOv0GY3HjyC2OalIyP51nBg= +Public Key ID: + sha256:9168c9e75bc18553f7acb0bfc7312394ebf4198dc78f20b639a948c8fe759c18 + sha1:5a7c13cca977f7aa4c4b45bde5dc4888ef96daf8 ------BEGIN FIPS186-4 DSA PRIVATE KEY----- -MIIDmAIBAAKCAQEA+gTfIba+VIEbTy+vMtBxa+1RtymT/gAPfzJBfxuZ+jSlmfhC -0zfVvnenKvhkzqY5+CWLLQsLTX7ETfhNYGTH78xPHxN6t9Ui4ldVQbZNZ49/9VrL -npDHLOBDHZmNOHs1bafxPBLmExMxVdrtKlFSWFS+MOfdj0zs/Siv+gjJmHO+FM4h -Pll6dk4pb5WSKsHRobi7tnHRLd/QlU1FJu2I7arq/SqDI5Owh1MoiwPPTQyu6ZQi -voqJhuaR5Mta+l4LuPYO+jMhIZGRfLj1ZxWsqu8ggu9/O5F3mq8LZ2zrMXIqY3cM -t+qXeMeu1S1QbdPGlKTDZPgUnqiXqIdXnGpoHwIdAKZqTb0PqPTJ0ysB1d8dvR6i -nb7Sa5qSMoYCrikCggEBANRpCHPeCqTeNEPGlTC8yxsguJxA29PHNf87/ycuvYe7 -hsHtJNrl+42IohKt4Akpw77wWHkBm7P7Q09mGKiTz9g8ToqyJqCMq9ffFzKLxr4R -n2SZoig7TsgC6ccX4toBfXgJnGSAZ0SwFFsvIDnjbS2pOsfD8Rw8jI8eWwbPwCeg -CT42LWrQO1I8vEJNcWwYVo/ODYi6UIRgOWc3pA41Dih3+gR3HUK4irL+JjYh/CS5 -UHie2zsbIMoJfntxlYr/md3LPMd3hTi7K1UiFHS3lYuguTOZQch0jTYl0xgzvZ58 -ynPSva8eNIc8tzGw7GdCX6ZaoRnJAsh0eItNqNizoRUCggEAEpEb3DnqDWcK97M0 -odSIFgVrVHoxQ0V0FXFaqeCJMQ7bD2bfjQOasShQWknEM7XVzJ7j5k+q1CcQyZlf -zHzOdv47yW+EImUcvJvTwodZdmX/rK6a1XqL+eDwtn476x1Tyy6ANYiQSWdLa1nZ -GQQ6QzVRHbmC0bO5ugIszIYgAEr7/6cdAN1AhqR/96pwjZiHmqjdDzLJrNtApTQU -6Hg/11c7/RvwNVgTEgfsa0V2fF0AXWAYCACziTJ4KlUzLtT7LRGVrX+L2iquQGFE -0Av3KmXZJl44HAUNgYw87GQ+oFpOCyciy+necNjduNwAym2IJKOe+30uYwfzOgJ7 -ZSqWMwIcdOkROEsCtsaKZVRyGmr9piOnk3wKYYaR6xALAqFIMEYGCWCGSAFlAwQC -AgQ5MOwzT5fbwLqchlKntdP3stu7SKSELhkNIQ4B2r1TWYFQN1XulqJwpZjp2Rsi -VGaRaevfRZnZ9yrK ------END FIPS186-4 DSA PRIVATE KEY----- ------BEGIN DSA PRIVATE KEY----- -MIIDTgIBAAKCAQEA+gTfIba+VIEbTy+vMtBxa+1RtymT/gAPfzJBfxuZ+jSlmfhC -0zfVvnenKvhkzqY5+CWLLQsLTX7ETfhNYGTH78xPHxN6t9Ui4ldVQbZNZ49/9VrL -npDHLOBDHZmNOHs1bafxPBLmExMxVdrtKlFSWFS+MOfdj0zs/Siv+gjJmHO+FM4h -Pll6dk4pb5WSKsHRobi7tnHRLd/QlU1FJu2I7arq/SqDI5Owh1MoiwPPTQyu6ZQi -voqJhuaR5Mta+l4LuPYO+jMhIZGRfLj1ZxWsqu8ggu9/O5F3mq8LZ2zrMXIqY3cM -t+qXeMeu1S1QbdPGlKTDZPgUnqiXqIdXnGpoHwIdAKZqTb0PqPTJ0ysB1d8dvR6i -nb7Sa5qSMoYCrikCggEBANRpCHPeCqTeNEPGlTC8yxsguJxA29PHNf87/ycuvYe7 -hsHtJNrl+42IohKt4Akpw77wWHkBm7P7Q09mGKiTz9g8ToqyJqCMq9ffFzKLxr4R -n2SZoig7TsgC6ccX4toBfXgJnGSAZ0SwFFsvIDnjbS2pOsfD8Rw8jI8eWwbPwCeg -CT42LWrQO1I8vEJNcWwYVo/ODYi6UIRgOWc3pA41Dih3+gR3HUK4irL+JjYh/CS5 -UHie2zsbIMoJfntxlYr/md3LPMd3hTi7K1UiFHS3lYuguTOZQch0jTYl0xgzvZ58 -ynPSva8eNIc8tzGw7GdCX6ZaoRnJAsh0eItNqNizoRUCggEAEpEb3DnqDWcK97M0 -odSIFgVrVHoxQ0V0FXFaqeCJMQ7bD2bfjQOasShQWknEM7XVzJ7j5k+q1CcQyZlf -zHzOdv47yW+EImUcvJvTwodZdmX/rK6a1XqL+eDwtn476x1Tyy6ANYiQSWdLa1nZ -GQQ6QzVRHbmC0bO5ugIszIYgAEr7/6cdAN1AhqR/96pwjZiHmqjdDzLJrNtApTQU -6Hg/11c7/RvwNVgTEgfsa0V2fF0AXWAYCACziTJ4KlUzLtT7LRGVrX+L2iquQGFE -0Av3KmXZJl44HAUNgYw87GQ+oFpOCyciy+necNjduNwAym2IJKOe+30uYwfzOgJ7 -ZSqWMwIcdOkROEsCtsaKZVRyGmr9piOnk3wKYYaR6xALAg== ------END DSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIICtwIBADCCAjYGByqGSM44BAEwggIpAoIBAQD6BN8htr5UgRtPL68y0HFr7VG3 +KZP+AA9/MkF/G5n6NKWZ+ELTN9W+d6cq+GTOpjn4JYstCwtNfsRN+E1gZMfvzE8f +E3q31SLiV1VBtk1nj3/1WsuekMcs4EMdmY04ezVtp/E8EuYTEzFV2u0qUVJYVL4w +592PTOz9KK/6CMmYc74UziE+WXp2TilvlZIqwdGhuLu2cdEt39CVTUUm7Yjtqur9 +KoMjk7CHUyiLA89NDK7plCK+iomG5pHky1r6Xgu49g76MyEhkZF8uPVnFayq7yCC +7387kXearwtnbOsxcipjdwy36pd4x67VLVBt08aUpMNk+BSeqJeoh1ecamgfAh0A +pmpNvQ+o9MnTKwHV3x29HqKdvtJrmpIyhgKuKQKCAQEA1GkIc94KpN40Q8aVMLzL +GyC4nEDb08c1/zv/Jy69h7uGwe0k2uX7jYiiEq3gCSnDvvBYeQGbs/tDT2YYqJPP +2DxOirImoIyr198XMovGvhGfZJmiKDtOyALpxxfi2gF9eAmcZIBnRLAUWy8gOeNt +Lak6x8PxHDyMjx5bBs/AJ6AJPjYtatA7Ujy8Qk1xbBhWj84NiLpQhGA5ZzekDjUO +KHf6BHcdQriKsv4mNiH8JLlQeJ7bOxsgygl+e3GViv+Z3cs8x3eFOLsrVSIUdLeV +i6C5M5lByHSNNiXTGDO9nnzKc9K9rx40hzy3MbDsZ0JfplqhGckCyHR4i02o2LOh +FQQeAhxn66KiJJCIhW/1Q/L+vbrrzU2TVu62ptgJG2ckoFgwVgYKKwYBBAGSCBII +ATFIMEYGCWCGSAFlAwQCAgQ5MOwzT5fbwLqchlKntdP3stu7SKSELhkNIQ4B2r1T +WYFQN1XulqJwpZjp2RsiVGaRaevfRZnZ9yrK +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/provable-dsa2048.pem b/tests/cert-tests/data/provable-dsa2048.pem index 0b0857b0b4..8afbc73f0f 100644 --- a/tests/cert-tests/data/provable-dsa2048.pem +++ b/tests/cert-tests/data/provable-dsa2048.pem @@ -3,110 +3,96 @@ Public Key Info: Key Security Level: Medium (2048 bits) private key: - 60:99:ed:e0:cf:71:01:03:8a:8b:c7:92:e3:36:14: - c3:6d:82:72:1a:4d:58:2f:41:24:af:52:cf:b0:fb: - de:b9: + 10:5e:56:a9:c7:6b:39:eb:74:09:e3:25:82:d1:52:4b + 02:e1:a4:66:8f:31:01:12:40:d8:a5:8c:bb:45:81:ec + public key: - 00:ac:74:2a:cc:27:a8:8c:0e:eb:07:86:85:fa:e1: - 0d:60:66:a0:e1:5c:d9:b0:8d:be:f6:5a:c4:bc:68: - 50:9b:cf:72:26:95:a7:0d:e6:5a:dd:fe:0d:0d:eb: - 9f:40:08:15:af:3a:ab:b4:f8:db:99:a4:fd:e1:e3: - 21:67:58:6a:ea:56:18:8f:b5:45:00:39:e4:23:04: - 73:89:b8:7c:5f:65:e5:e9:77:ea:1e:0e:a0:ca:5c: - 49:1d:a6:3b:0e:12:f4:a7:a3:19:70:5b:76:c1:eb: - 99:ef:6b:76:74:46:b3:e4:fc:e4:98:d6:c5:01:e6: - 50:7e:78:5f:e3:e1:7b:23:cf:9f:19:85:e8:99:18: - c0:a8:15:c3:c1:e8:2c:00:55:65:f7:19:3b:58:51: - 53:02:85:73:18:d3:13:d9:03:07:2c:77:c8:ec:a0: - 68:ef:91:da:da:3c:be:2f:13:3c:2e:ec:7a:3d:76: - 94:37:71:68:0a:25:ba:88:28:ae:8d:7d:e6:dd:ee: - 71:89:8b:a6:fc:eb:1d:13:4e:75:8a:d1:aa:21:7d: - b8:c2:48:a2:3f:73:d8:b0:0f:da:1d:e4:61:d0:45: - 19:34:93:e2:dc:a0:01:2c:82:6e:de:35:24:1b:7a: - 8e:6e:36:cb:da:05:da:5a:9d:69:43:1c:d9:bb:2e: - 8c:b2: + 35:be:c5:6b:c1:d4:6b:84:d0:e5:1b:cb:96:24:66:de + 75:d5:1d:b7:9f:4c:99:5c:69:94:85:1c:f5:ad:35:26 + c0:b6:54:f5:6f:74:8a:40:6b:15:13:90:e6:20:30:62 + c7:6e:76:95:fa:4c:f6:0f:09:28:14:6f:46:17:6f:c1 + 57:45:6d:96:d6:db:6b:6f:e0:08:c7:4c:73:d2:95:41 + f1:16:7b:76:b7:ff:74:43:7a:b4:17:d2:69:ed:d0:17 + a2:7d:94:a4:80:76:90:a8:16:7c:78:2a:bf:0d:ab:94 + 40:5d:c9:5a:00:e0:7b:5d:c8:0d:85:2d:5b:db:8b:66 + 8d:d0:76:15:c7:86:ec:4b:8c:38:2b:4d:5a:6f:af:39 + 24:fe:ea:6b:05:e6:bb:03:89:59:c6:0a:c8:65:05:80 + d8:18:f7:ca:86:45:4a:96:e3:65:fd:5c:f2:33:18:75 + e6:14:93:71:e2:71:8b:7a:4f:84:96:18:79:97:48:f4 + a1:b7:28:4f:70:9d:46:23:34:c0:2c:91:f2:6f:26:e0 + 5a:a5:a8:9c:07:98:73:9d:52:fb:2b:fe:36:03:21:d1 + 49:54:5b:ca:74:77:75:76:e2:51:a9:f5:d8:07:33:ab + cb:17:e1:af:10:9f:d6:19:8b:60:86:a2:81:17:08:a4 + p: - 00:d5:14:73:3a:54:d9:a7:56:d8:b3:75:79:3c:ea: - 7b:1a:eb:23:53:6e:1e:50:64:21:34:13:84:ca:2d: - dd:4c:38:c9:72:a4:99:2d:79:eb:06:59:a8:ab:9b: - c2:f4:ba:be:51:8f:53:e0:d3:42:f7:5f:19:b8:c8: - bb:4c:53:d3:02:95:ee:84:c5:e9:b4:0d:93:ff:26: - 01:d9:61:de:a6:28:1c:b8:3c:57:2b:9a:4b:a1:ff: - 5f:d4:b1:f4:e7:90:6c:43:b8:43:ad:3a:c8:7d:59: - 35:9c:8f:1b:fd:7a:17:50:6f:67:6c:46:63:f4:c8: - e5:86:28:d6:1b:88:45:aa:01:e5:5c:23:19:89:58: - d4:f8:03:e5:eb:b0:4d:0f:71:81:53:69:40:d3:0a: - 79:02:5e:76:6e:52:c6:5b:b8:9e:f8:23:d1:2a:68: - b0:ad:c5:47:50:d8:2a:e8:73:0f:63:0c:d0:67:8c: - ba:5a:9a:98:5e:96:79:e5:2a:d6:f0:76:04:66:55: - 0f:ee:2d:2d:a7:04:5c:0b:b8:ef:05:a4:c0:a8:c3: - 5d:cd:32:07:ca:ca:1b:2e:6f:8b:da:e6:c6:11:33: - cf:8a:62:15:51:05:4e:3e:63:1f:71:b7:fb:1e:b3: - b9:62:3a:dd:15:2a:ba:26:d4:db:e1:f4:d7:90:00: - 60:b7: + 00:d5:14:73:3a:54:d9:a7:56:d8:b3:75:79:3c:ea:7b + 1a:eb:23:53:6e:1e:50:64:21:34:13:84:ca:2d:dd:4c + 38:c9:72:a4:99:2d:79:eb:06:59:a8:ab:9b:c2:f4:ba + be:51:8f:53:e0:d3:42:f7:5f:19:b8:c8:bb:4c:53:d3 + 02:95:ee:84:c5:e9:b4:0d:93:ff:26:01:d9:61:de:a6 + 28:1c:b8:3c:57:2b:9a:4b:a1:ff:5f:d4:b1:f4:e7:90 + 6c:43:b8:43:ad:3a:c8:7d:59:35:9c:8f:1b:fd:7a:17 + 50:6f:67:6c:46:63:f4:c8:e5:86:28:d6:1b:88:45:aa + 01:e5:5c:23:19:89:58:d4:f8:03:e5:eb:b0:4d:0f:71 + 81:53:69:40:d3:0a:79:02:5e:76:6e:52:c6:5b:b8:9e + f8:23:d1:2a:68:b0:ad:c5:47:50:d8:2a:e8:73:0f:63 + 0c:d0:67:8c:ba:5a:9a:98:5e:96:79:e5:2a:d6:f0:76 + 04:66:55:0f:ee:2d:2d:a7:04:5c:0b:b8:ef:05:a4:c0 + a8:c3:5d:cd:32:07:ca:ca:1b:2e:6f:8b:da:e6:c6:11 + 33:cf:8a:62:15:51:05:4e:3e:63:1f:71:b7:fb:1e:b3 + b9:62:3a:dd:15:2a:ba:26:d4:db:e1:f4:d7:90:00:60 + b7: q: - 00:bc:8b:63:e3:5f:ba:ee:3d:24:fa:2f:d9:a1:a7: - 68:32:b2:38:b2:4b:8e:72:09:12:ec:1e:f3:8b:ef: - d7:9a:df: + 00:bc:8b:63:e3:5f:ba:ee:3d:24:fa:2f:d9:a1:a7:68 + 32:b2:38:b2:4b:8e:72:09:12:ec:1e:f3:8b:ef:d7:9a + df: g: - 22:15:6d:4f:b4:54:cb:17:dc:96:ce:4b:34:8d:86: - 40:0c:f5:42:46:7d:5a:2d:68:6a:5d:ca:86:42:de: - 32:23:89:0a:cf:e4:3b:c2:7a:48:77:19:55:88:a1: - bd:7b:cb:94:3e:44:67:c8:4c:cb:d3:94:d0:ab:f2: - b0:2a:e5:60:c5:de:fd:b6:68:3d:9c:82:e9:31:11: - 64:dc:ca:4f:82:e8:bc:d9:06:8f:ad:0d:cd:4a:79: - b6:02:ea:9b:3e:ad:e5:50:7f:e2:d8:0d:ae:3a:c9: - 09:ca:d1:27:5e:fe:f6:33:bb:a1:fb:ba:af:a6:74: - 56:da:b3:b6:54:38:7d:49:82:b0:5d:c8:3a:3a:3f: - 0f:a8:a9:14:3f:90:da:a7:5c:5f:d0:a7:d1:e6:5f: - d3:66:19:f1:6b:be:a4:f2:eb:43:84:d3:1a:a6:b4: - f2:d6:b6:75:a9:dd:21:c5:93:38:09:45:d6:4e:30: - 96:1d:34:d2:55:a7:56:db:3c:94:4a:1e:40:e9:4d: - b9:45:ce:84:af:e4:92:a8:24:64:56:93:e7:7c:37: - 2c:45:9d:9e:d8:01:da:51:df:dd:60:06:ce:ce:78: - 32:62:c7:22:7b:a5:fb:6f:26:53:bf:d3:ea:6b:25: - 3c:7d:cc:90:2c:7e:a6:51:56:b0:4b:de:57:9c:02: - 54: + 22:15:6d:4f:b4:54:cb:17:dc:96:ce:4b:34:8d:86:40 + 0c:f5:42:46:7d:5a:2d:68:6a:5d:ca:86:42:de:32:23 + 89:0a:cf:e4:3b:c2:7a:48:77:19:55:88:a1:bd:7b:cb + 94:3e:44:67:c8:4c:cb:d3:94:d0:ab:f2:b0:2a:e5:60 + c5:de:fd:b6:68:3d:9c:82:e9:31:11:64:dc:ca:4f:82 + e8:bc:d9:06:8f:ad:0d:cd:4a:79:b6:02:ea:9b:3e:ad + e5:50:7f:e2:d8:0d:ae:3a:c9:09:ca:d1:27:5e:fe:f6 + 33:bb:a1:fb:ba:af:a6:74:56:da:b3:b6:54:38:7d:49 + 82:b0:5d:c8:3a:3a:3f:0f:a8:a9:14:3f:90:da:a7:5c + 5f:d0:a7:d1:e6:5f:d3:66:19:f1:6b:be:a4:f2:eb:43 + 84:d3:1a:a6:b4:f2:d6:b6:75:a9:dd:21:c5:93:38:09 + 45:d6:4e:30:96:1d:34:d2:55:a7:56:db:3c:94:4a:1e + 40:e9:4d:b9:45:ce:84:af:e4:92:a8:24:64:56:93:e7 + 7c:37:2c:45:9d:9e:d8:01:da:51:df:dd:60:06:ce:ce + 78:32:62:c7:22:7b:a5:fb:6f:26:53:bf:d3:ea:6b:25 + 3c:7d:cc:90:2c:7e:a6:51:56:b0:4b:de:57:9c:02:54 + +Validation parameters: + Hash: SHA384 + Seed: 843121bd89535ee86946d58d246d47a58d1576a8351b4223e1cff369a1266d2b24b0729d7ca56787fde2e3de19b9f2e721ac698a29617732e7756f5ae4580be179 -Seed: 84:31:21:BD:89:53:5E:E8:69:46:D5:8D:24:6D:47:A5:8D:15:76:A8:35:1B:42:23:E1:CF:F3:69:A1:26:6D:2B:24:B0:72:9D:7C:A5:67:87:FD:E2:E3:DE:19:B9:F2:E7:21:AC:69:8A:29:61:77:32:E7:75:6F:5A:E4:58:0B:E1:79 -Public Key ID: 7D:25:74:11:CA:E8:48:99:C5:1D:9F:6C:E7:A3:27:12:A2:E9:55:FA -Public key's random art: -+--[ DSA 2048]----+ -| ...o.+o | -| +.+.= . | -| + . + * .| -| . + + o | -| S.oo. ..| -| o +.. . .| -| o o . o . | -| . . . . o | -| . E | -+-----------------+ +Public Key PIN: + pin-sha256:fLWrcO5hPl/jfeKIZJ/+4PaSiFR98j6ayUISi6bmNIA= +Public Key ID: + sha256:7cb5ab70ee613e5fe37de288649ffee0f69288547df23e9ac942128ba6e63480 + sha1:fa90c4182b6ce9742fa7f5a2394415fd0198e72d ------BEGIN FIPS186-4 DSA PRIVATE KEY----- -MIIDqAIBAAKCAQEA1RRzOlTZp1bYs3V5POp7GusjU24eUGQhNBOEyi3dTDjJcqSZ -LXnrBlmoq5vC9Lq+UY9T4NNC918ZuMi7TFPTApXuhMXptA2T/yYB2WHepigcuDxX -K5pLof9f1LH055BsQ7hDrTrIfVk1nI8b/XoXUG9nbEZj9MjlhijWG4hFqgHlXCMZ -iVjU+APl67BND3GBU2lA0wp5Al52blLGW7ie+CPRKmiwrcVHUNgq6HMPYwzQZ4y6 -WpqYXpZ55SrW8HYEZlUP7i0tpwRcC7jvBaTAqMNdzTIHysobLm+L2ubGETPPimIV -UQVOPmMfcbf7HrO5YjrdFSq6JtTb4fTXkABgtwIhALyLY+Nfuu49JPov2aGnaDKy -OLJLjnIJEuwe84vv15rfAoIBACIVbU+0VMsX3JbOSzSNhkAM9UJGfVotaGpdyoZC -3jIjiQrP5DvCekh3GVWIob17y5Q+RGfITMvTlNCr8rAq5WDF3v22aD2cgukxEWTc -yk+C6LzZBo+tDc1KebYC6ps+reVQf+LYDa46yQnK0Sde/vYzu6H7uq+mdFbas7ZU -OH1JgrBdyDo6Pw+oqRQ/kNqnXF/Qp9HmX9NmGfFrvqTy60OE0xqmtPLWtnWp3SHF -kzgJRdZOMJYdNNJVp1bbPJRKHkDpTblFzoSv5JKoJGRWk+d8NyxFnZ7YAdpR391g -Bs7OeDJixyJ7pftvJlO/0+prJTx9zJAsfqZRVrBL3lecAlQCggEBAKx0KswnqIwO -6weGhfrhDWBmoOFc2bCNvvZaxLxoUJvPciaVpw3mWt3+DQ3rn0AIFa86q7T425mk -/eHjIWdYaupWGI+1RQA55CMEc4m4fF9l5el36h4OoMpcSR2mOw4S9KejGXBbdsHr -me9rdnRGs+T85JjWxQHmUH54X+PheyPPnxmF6JkYwKgVw8HoLABVZfcZO1hRUwKF -cxjTE9kDByx3yOygaO+R2to8vi8TPC7sej12lDdxaAoluogoro195t3ucYmLpvzr -HRNOdYrRqiF9uMJIoj9z2LAP2h3kYdBFGTST4tygASyCbt41JBt6jm42y9oF2lqd -aUMc2bsujLICIGCZ7eDPcQEDiovHkuM2FMNtgnIaTVgvQSSvUs+w+965oVAwTgYJ -YIZIAWUDBAICBEGEMSG9iVNe6GlG1Y0kbUeljRV2qDUbQiPhz/NpoSZtKySwcp18 -pWeH/eLj3hm58uchrGmKKWF3Mud1b1rkWAvheQ== ------END DSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIICxgIBADCCAjkGByqGSM44BAEwggIsAoIBAQDVFHM6VNmnVtizdXk86nsa6yNT +bh5QZCE0E4TKLd1MOMlypJkteesGWairm8L0ur5Rj1Pg00L3Xxm4yLtMU9MCle6E +xem0DZP/JgHZYd6mKBy4PFcrmkuh/1/UsfTnkGxDuEOtOsh9WTWcjxv9ehdQb2ds +RmP0yOWGKNYbiEWqAeVcIxmJWNT4A+XrsE0PcYFTaUDTCnkCXnZuUsZbuJ74I9Eq +aLCtxUdQ2Crocw9jDNBnjLpamphelnnlKtbwdgRmVQ/uLS2nBFwLuO8FpMCow13N +MgfKyhsub4va5sYRM8+KYhVRBU4+Yx9xt/ses7liOt0VKrom1Nvh9NeQAGC3AiEA +vItj41+67j0k+i/ZoadoMrI4skuOcgkS7B7zi+/Xmt8CggEAIhVtT7RUyxfcls5L +NI2GQAz1QkZ9Wi1oal3KhkLeMiOJCs/kO8J6SHcZVYihvXvLlD5EZ8hMy9OU0Kvy +sCrlYMXe/bZoPZyC6TERZNzKT4LovNkGj60NzUp5tgLqmz6t5VB/4tgNrjrJCcrR +J17+9jO7ofu6r6Z0VtqztlQ4fUmCsF3IOjo/D6ipFD+Q2qdcX9Cn0eZf02YZ8Wu+ +pPLrQ4TTGqa08ta2dandIcWTOAlF1k4wlh000lWnVts8lEoeQOlNuUXOhK/kkqgk +ZFaT53w3LEWdntgB2lHf3WAGzs54MmLHInul+28mU7/T6mslPH3MkCx+plFWsEve +V5wCVAQiAiAQXlapx2s563QJ4yWC0VJLAuGkZo8xARJA2KWMu0WB7KBgMF4GCisG +AQQBkggSCAExUDBOBglghkgBZQMEAgIEQYQxIb2JU17oaUbVjSRtR6WNFXaoNRtC +I+HP82mhJm0rJLBynXylZ4f94uPeGbny5yGsaYopYXcy53VvWuRYC+F5 +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/provable2048.pem b/tests/cert-tests/data/provable2048.pem index 41fb3ee109..6112e0e3c7 100644 --- a/tests/cert-tests/data/provable2048.pem +++ b/tests/cert-tests/data/provable2048.pem @@ -3,144 +3,137 @@ Public Key Info: Key Security Level: Medium (2048 bits) modulus: - 00:f1:4a:82:ce:1c:c0:3e:58:10:f9:85:ec:d6:6d: - 6c:d5:2f:d4:2d:29:ea:f4:96:55:4f:ad:e2:99:fc: - e3:53:ec:d3:56:f6:8b:d3:03:1a:e9:c0:22:75:0c: - 7a:29:21:99:34:34:71:cc:6b:4d:a3:60:6b:65:36: - 6e:85:7f:3b:e8:eb:43:ca:08:7e:f3:42:38:2d:1f: - c4:5b:3e:36:5b:ac:2f:03:aa:49:85:6d:f7:15:73: - e0:9a:f8:f3:af:14:ea:9d:1a:fe:6c:ef:77:e9:cc: - e7:98:ca:2d:c1:1c:27:58:0f:51:05:06:8f:17:86: - fe:9b:86:ba:2a:bf:57:88:73:5b:70:f6:d2:30:2d: - 7b:26:a2:04:55:9f:9a:2f:fd:bf:18:fd:4c:1a:d3: - 35:78:25:16:1f:f9:cd:0a:7c:b0:1a:e5:97:c8:c2: - 9f:33:50:fa:52:2e:5a:97:05:b3:fe:07:9d:09:01: - 4f:0d:6e:16:0b:5b:c5:7f:7a:b8:8a:ec:ad:dd:74: - fe:05:db:14:85:8d:de:10:85:c2:c6:fe:ce:b7:17: - a3:7c:6e:cd:a6:88:d5:67:9c:4c:fb:fc:d5:06:20: - 30:16:87:c3:d6:0b:89:94:0e:6d:7d:eb:a8:a5:a0: - 95:40:fa:3b:68:37:b2:c4:fa:41:d1:2f:ee:81:87: - fc:57: + 00:f1:4a:82:ce:1c:c0:3e:58:10:f9:85:ec:d6:6d:6c + d5:2f:d4:2d:29:ea:f4:96:55:4f:ad:e2:99:fc:e3:53 + ec:d3:56:f6:8b:d3:03:1a:e9:c0:22:75:0c:7a:29:21 + 99:34:34:71:cc:6b:4d:a3:60:6b:65:36:6e:85:7f:3b + e8:eb:43:ca:08:7e:f3:42:38:2d:1f:c4:5b:3e:36:5b + ac:2f:03:aa:49:85:6d:f7:15:73:e0:9a:f8:f3:af:14 + ea:9d:1a:fe:6c:ef:77:e9:cc:e7:98:ca:2d:c1:1c:27 + 58:0f:51:05:06:8f:17:86:fe:9b:86:ba:2a:bf:57:88 + 73:5b:70:f6:d2:30:2d:7b:26:a2:04:55:9f:9a:2f:fd + bf:18:fd:4c:1a:d3:35:78:25:16:1f:f9:cd:0a:7c:b0 + 1a:e5:97:c8:c2:9f:33:50:fa:52:2e:5a:97:05:b3:fe + 07:9d:09:01:4f:0d:6e:16:0b:5b:c5:7f:7a:b8:8a:ec + ad:dd:74:fe:05:db:14:85:8d:de:10:85:c2:c6:fe:ce + b7:17:a3:7c:6e:cd:a6:88:d5:67:9c:4c:fb:fc:d5:06 + 20:30:16:87:c3:d6:0b:89:94:0e:6d:7d:eb:a8:a5:a0 + 95:40:fa:3b:68:37:b2:c4:fa:41:d1:2f:ee:81:87:fc + 57: public exponent: 01:00:01: private exponent: - 2a:01:4f:ae:34:01:1f:99:53:33:2d:26:62:d9:df: - d5:69:23:25:cd:a3:52:7b:0d:54:f6:af:79:21:36: - 2d:f9:0f:7d:97:24:16:52:f7:0f:74:5c:4b:46:25: - ca:1d:48:3f:77:55:cc:41:6d:dd:a0:3e:71:fb:3c: - d8:4e:a3:0e:54:4e:93:d0:50:d1:66:58:c3:3a:41: - 83:a4:db:ef:af:94:eb:ad:6c:69:27:10:99:92:77: - aa:62:e6:81:37:41:f4:a1:ab:63:29:79:15:a1:8f: - 3b:e1:0e:80:0c:b7:a8:b3:d9:e5:e7:13:68:04:1f: - 34:d2:0a:7c:c0:9c:ab:6b:1b:15:f7:42:78:96:86: - 7e:be:0e:8e:9d:f3:c5:f3:61:5a:cf:3c:bd:ca:18: - fe:d7:0d:eb:91:67:b3:1e:ac:3f:81:1e:a7:0c:07: - a8:73:3f:91:b2:ae:1f:56:a0:51:e1:f9:da:99:26: - 62:81:50:5b:26:d9:b3:65:2e:f2:c8:d3:89:a2:0a: - 3c:56:be:40:ce:1a:1f:f9:1d:ad:a8:b4:56:3c:c9: - 3d:29:5c:3f:15:b1:89:5a:19:32:80:c0:72:80:23: - 34:85:96:54:36:da:cb:bc:41:7f:9f:f3:a5:ff:00: - a4:1b:b7:01:53:9c:09:a3:c1:c5:c4:6e:9f:22:fc: - 79: + 2a:01:4f:ae:34:01:1f:99:53:33:2d:26:62:d9:df:d5 + 69:23:25:cd:a3:52:7b:0d:54:f6:af:79:21:36:2d:f9 + 0f:7d:97:24:16:52:f7:0f:74:5c:4b:46:25:ca:1d:48 + 3f:77:55:cc:41:6d:dd:a0:3e:71:fb:3c:d8:4e:a3:0e + 54:4e:93:d0:50:d1:66:58:c3:3a:41:83:a4:db:ef:af + 94:eb:ad:6c:69:27:10:99:92:77:aa:62:e6:81:37:41 + f4:a1:ab:63:29:79:15:a1:8f:3b:e1:0e:80:0c:b7:a8 + b3:d9:e5:e7:13:68:04:1f:34:d2:0a:7c:c0:9c:ab:6b + 1b:15:f7:42:78:96:86:7e:be:0e:8e:9d:f3:c5:f3:61 + 5a:cf:3c:bd:ca:18:fe:d7:0d:eb:91:67:b3:1e:ac:3f + 81:1e:a7:0c:07:a8:73:3f:91:b2:ae:1f:56:a0:51:e1 + f9:da:99:26:62:81:50:5b:26:d9:b3:65:2e:f2:c8:d3 + 89:a2:0a:3c:56:be:40:ce:1a:1f:f9:1d:ad:a8:b4:56 + 3c:c9:3d:29:5c:3f:15:b1:89:5a:19:32:80:c0:72:80 + 23:34:85:96:54:36:da:cb:bc:41:7f:9f:f3:a5:ff:00 + a4:1b:b7:01:53:9c:09:a3:c1:c5:c4:6e:9f:22:fc:79 + prime1: - 00:fd:84:14:7c:60:b7:ca:50:79:3d:08:2f:51:98: - 85:0e:3d:2f:ee:72:aa:40:cd:93:9e:be:0e:3d:17: - e2:d7:cb:46:bf:1b:f0:80:01:57:68:72:9d:83:77: - 90:65:f5:fa:c6:78:ec:66:9c:53:ed:cd:8a:c7:bd: - c2:ce:f7:cc:b0:02:34:74:f1:53:76:b0:99:d0:0f: - ec:d6:f7:a0:f6:de:78:d0:c6:8f:b7:0b:8b:42:2e: - 5d:71:ee:ec:d1:ad:71:c8:2b:c8:43:ad:9d:78:ef: - 94:b9:42:03:98:5b:b6:f8:60:6e:05:58:b3:93:5f: - 56:ea:30:dc:04:f4:6e:7b:bd: + 00:fd:84:14:7c:60:b7:ca:50:79:3d:08:2f:51:98:85 + 0e:3d:2f:ee:72:aa:40:cd:93:9e:be:0e:3d:17:e2:d7 + cb:46:bf:1b:f0:80:01:57:68:72:9d:83:77:90:65:f5 + fa:c6:78:ec:66:9c:53:ed:cd:8a:c7:bd:c2:ce:f7:cc + b0:02:34:74:f1:53:76:b0:99:d0:0f:ec:d6:f7:a0:f6 + de:78:d0:c6:8f:b7:0b:8b:42:2e:5d:71:ee:ec:d1:ad + 71:c8:2b:c8:43:ad:9d:78:ef:94:b9:42:03:98:5b:b6 + f8:60:6e:05:58:b3:93:5f:56:ea:30:dc:04:f4:6e:7b + bd: prime2: - 00:f3:a7:c4:19:d0:3e:c2:77:97:64:ab:a5:68:b4: - 08:38:fc:ff:6f:a1:23:ef:31:55:11:46:11:18:84: - c1:aa:37:f0:90:48:f4:58:d9:e7:fa:47:cf:22:28: - 14:89:19:b3:da:6e:89:40:68:7e:19:de:d4:73:37: - 63:5b:50:d8:cf:49:52:71:bc:58:e2:ee:0d:d0:c9: - e3:16:83:f1:43:81:cd:a9:f0:e4:bb:cf:40:3f:86: - fa:fd:52:cd:64:fe:26:cb:70:65:5e:6a:3c:db:78: - fd:13:65:e6:b0:52:1c:43:b4:50:46:8d:4a:c8:c7: - 73:a6:c1:3d:88:50:0d:af:a3: + 00:f3:a7:c4:19:d0:3e:c2:77:97:64:ab:a5:68:b4:08 + 38:fc:ff:6f:a1:23:ef:31:55:11:46:11:18:84:c1:aa + 37:f0:90:48:f4:58:d9:e7:fa:47:cf:22:28:14:89:19 + b3:da:6e:89:40:68:7e:19:de:d4:73:37:63:5b:50:d8 + cf:49:52:71:bc:58:e2:ee:0d:d0:c9:e3:16:83:f1:43 + 81:cd:a9:f0:e4:bb:cf:40:3f:86:fa:fd:52:cd:64:fe + 26:cb:70:65:5e:6a:3c:db:78:fd:13:65:e6:b0:52:1c + 43:b4:50:46:8d:4a:c8:c7:73:a6:c1:3d:88:50:0d:af + a3: coefficient: - 1c:c0:b5:70:f2:dd:1e:0b:43:c7:d7:50:00:af:88: - e3:de:19:43:37:fc:f1:42:f4:4c:74:af:d5:01:fd: - 26:d1:d4:c3:dc:a7:0f:f5:60:cb:c4:cb:66:43:f2: - d1:45:3e:4f:ff:9d:7a:51:43:14:1f:6c:84:41:81: - 2b:2d:90:a1:14:e4:10:2b:d7:1d:e6:b0:88:5e:d7: - 3d:33:9d:59:52:32:90:87:92:a1:da:97:8f:b9:50: - c3:86:5e:0a:8b:91:1c:eb:42:76:25:9b:ff:ad:cf: - e5:76:03:e4:f2:89:8d:76:b3:a4:20:53:53:4a:cf: - ff:0f:6e:5a:5d:b1:ee:2d: + 1c:c0:b5:70:f2:dd:1e:0b:43:c7:d7:50:00:af:88:e3 + de:19:43:37:fc:f1:42:f4:4c:74:af:d5:01:fd:26:d1 + d4:c3:dc:a7:0f:f5:60:cb:c4:cb:66:43:f2:d1:45:3e + 4f:ff:9d:7a:51:43:14:1f:6c:84:41:81:2b:2d:90:a1 + 14:e4:10:2b:d7:1d:e6:b0:88:5e:d7:3d:33:9d:59:52 + 32:90:87:92:a1:da:97:8f:b9:50:c3:86:5e:0a:8b:91 + 1c:eb:42:76:25:9b:ff:ad:cf:e5:76:03:e4:f2:89:8d + 76:b3:a4:20:53:53:4a:cf:ff:0f:6e:5a:5d:b1:ee:2d + exp1: - 31:f8:74:e9:47:4f:32:eb:c5:da:07:e0:fb:de:6a: - 6b:b2:17:de:92:6f:88:b2:7c:e4:8f:65:d3:19:00: - 37:b4:f3:ce:fb:bc:de:1e:65:92:4a:f5:4d:52:a5: - fd:d3:0c:89:4e:90:9a:71:3a:01:e7:bf:f1:3b:30: - 49:07:83:2b:36:64:0c:a0:fc:e8:aa:4a:c7:3e:3c: - 5a:eb:18:a9:50:94:d3:e2:2f:b5:ce:ea:b6:32:d9: - 6c:79:c1:e8:5a:9d:d0:ed:00:5e:86:bc:41:78:48: - 02:74:46:ad:23:76:df:62:72:8d:4f:3c:a6:51:e6: - 99:e6:e3:97:7e:6e:c0:a9: + 31:f8:74:e9:47:4f:32:eb:c5:da:07:e0:fb:de:6a:6b + b2:17:de:92:6f:88:b2:7c:e4:8f:65:d3:19:00:37:b4 + f3:ce:fb:bc:de:1e:65:92:4a:f5:4d:52:a5:fd:d3:0c + 89:4e:90:9a:71:3a:01:e7:bf:f1:3b:30:49:07:83:2b + 36:64:0c:a0:fc:e8:aa:4a:c7:3e:3c:5a:eb:18:a9:50 + 94:d3:e2:2f:b5:ce:ea:b6:32:d9:6c:79:c1:e8:5a:9d + d0:ed:00:5e:86:bc:41:78:48:02:74:46:ad:23:76:df + 62:72:8d:4f:3c:a6:51:e6:99:e6:e3:97:7e:6e:c0:a9 + exp2: - 68:2b:7a:b0:9a:92:aa:6b:9c:c3:42:8b:46:57:6a: - 08:8b:49:dd:fc:e3:b3:18:c1:48:d0:4e:f0:cf:99: - 48:df:ff:ae:80:32:4f:66:62:42:63:bf:0f:d8:58: - e7:40:a0:df:2b:50:ec:c3:7f:de:29:a1:64:dc:f2: - 52:91:1f:10:88:45:82:30:c7:43:c6:09:0c:11:b4: - 4f:e4:fb:1a:24:7d:bc:41:2c:59:8b:42:e9:a6:18: - da:83:33:23:11:71:9e:9a:a0:0c:1c:99:86:2f:94: - eb:5d:2e:a2:85:88:65:fd:ca:30:4f:aa:00:6b:1d: - 6b:d6:c4:2a:ea:26:df:c7: + 68:2b:7a:b0:9a:92:aa:6b:9c:c3:42:8b:46:57:6a:08 + 8b:49:dd:fc:e3:b3:18:c1:48:d0:4e:f0:cf:99:48:df + ff:ae:80:32:4f:66:62:42:63:bf:0f:d8:58:e7:40:a0 + df:2b:50:ec:c3:7f:de:29:a1:64:dc:f2:52:91:1f:10 + 88:45:82:30:c7:43:c6:09:0c:11:b4:4f:e4:fb:1a:24 + 7d:bc:41:2c:59:8b:42:e9:a6:18:da:83:33:23:11:71 + 9e:9a:a0:0c:1c:99:86:2f:94:eb:5d:2e:a2:85:88:65 + fd:ca:30:4f:aa:00:6b:1d:6b:d6:c4:2a:ea:26:df:c7 + +Validation parameters: + Hash: SHA384 + Seed: ab499ea55a5f4cb743434e49ca1ee3a491544309c6f59ab2cd5507de -Seed: AB:49:9E:A5:5A:5F:4C:B7:43:43:4E:49:CA:1E:E3:A4:91:54:43:09:C6:F5:9A:B2:CD:55:07:DE -Public Key ID: F7:A8:41:F2:26:1E:6C:90:C5:FC:FE:64:CC:46:68:8C:B9:B5:2B:4C -Public key's random art: -+--[ RSA 2048]----+ -| | -| o | -| + | -| o = . | -| o + S o | -| oEO * o | -| o* * B . | -| oo+ O | -| ..o . | -+-----------------+ +Public Key PIN: + pin-sha256:QD8w4AeBI6O70FX12nxzxcwPapbWFbsUEOI8NgrvR5U= +Public Key ID: + sha256:403f30e0078123a3bbd055f5da7c73c5cc0f6a96d615bb1410e23c360aef4795 + sha1:f7a841f2261e6c90c5fcfe64cc46688cb9b52b4c ------BEGIN FIPS186-4 RSA PRIVATE KEY----- -MIIEzwIBAAKCAQEA8UqCzhzAPlgQ+YXs1m1s1S/ULSnq9JZVT63imfzjU+zTVvaL -0wMa6cAidQx6KSGZNDRxzGtNo2BrZTZuhX876OtDygh+80I4LR/EWz42W6wvA6pJ -hW33FXPgmvjzrxTqnRr+bO936cznmMotwRwnWA9RBQaPF4b+m4a6Kr9XiHNbcPbS -MC17JqIEVZ+aL/2/GP1MGtM1eCUWH/nNCnywGuWXyMKfM1D6Ui5alwWz/gedCQFP -DW4WC1vFf3q4iuyt3XT+BdsUhY3eEIXCxv7OtxejfG7NpojVZ5xM+/zVBiAwFofD -1guJlA5tfeuopaCVQPo7aDeyxPpB0S/ugYf8VwIDAQABAoIBACoBT640AR+ZUzMt -JmLZ39VpIyXNo1J7DVT2r3khNi35D32XJBZS9w90XEtGJcodSD93VcxBbd2gPnH7 -PNhOow5UTpPQUNFmWMM6QYOk2++vlOutbGknEJmSd6pi5oE3QfShq2MpeRWhjzvh -DoAMt6iz2eXnE2gEHzTSCnzAnKtrGxX3QniWhn6+Do6d88XzYVrPPL3KGP7XDeuR -Z7MerD+BHqcMB6hzP5Gyrh9WoFHh+dqZJmKBUFsm2bNlLvLI04miCjxWvkDOGh/5 -Ha2otFY8yT0pXD8VsYlaGTKAwHKAIzSFllQ22su8QX+f86X/AKQbtwFTnAmjwcXE -bp8i/HkCgYEA/YQUfGC3ylB5PQgvUZiFDj0v7nKqQM2Tnr4OPRfi18tGvxvwgAFX -aHKdg3eQZfX6xnjsZpxT7c2Kx73CzvfMsAI0dPFTdrCZ0A/s1veg9t540MaPtwuL -Qi5dce7s0a1xyCvIQ62deO+UuUIDmFu2+GBuBVizk19W6jDcBPRue70CgYEA86fE -GdA+wneXZKulaLQIOPz/b6Ej7zFVEUYRGITBqjfwkEj0WNnn+kfPIigUiRmz2m6J -QGh+Gd7UczdjW1DYz0lScbxY4u4N0MnjFoPxQ4HNqfDku89AP4b6/VLNZP4my3Bl -Xmo823j9E2XmsFIcQ7RQRo1KyMdzpsE9iFANr6MCgYAx+HTpR08y68XaB+D73mpr -shfekm+Isnzkj2XTGQA3tPPO+7zeHmWSSvVNUqX90wyJTpCacToB57/xOzBJB4Mr -NmQMoPzoqkrHPjxa6xipUJTT4i+1zuq2MtlsecHoWp3Q7QBehrxBeEgCdEatI3bf -YnKNTzymUeaZ5uOXfm7AqQKBgGgrerCakqprnMNCi0ZXagiLSd3847MYwUjQTvDP -mUjf/66AMk9mYkJjvw/YWOdAoN8rUOzDf94poWTc8lKRHxCIRYIwx0PGCQwRtE/k -+xokfbxBLFmLQummGNqDMyMRcZ6aoAwcmYYvlOtdLqKFiGX9yjBPqgBrHWvWxCrq -Jt/HAoGAHMC1cPLdHgtDx9dQAK+I494ZQzf88UL0THSv1QH9JtHUw9ynD/Vgy8TL -ZkPy0UU+T/+delFDFB9shEGBKy2QoRTkECvXHeawiF7XPTOdWVIykIeSodqXj7lQ -w4ZeCouRHOtCdiWb/63P5XYD5PKJjXazpCBTU0rP/w9uWl2x7i2hKzApBglghkgB -ZQMEAgIEHKtJnqVaX0y3Q0NOScoe46SRVEMJxvWass1VB94= ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIE+QIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDxSoLOHMA+WBD5 +hezWbWzVL9QtKer0llVPreKZ/ONT7NNW9ovTAxrpwCJ1DHopIZk0NHHMa02jYGtl +Nm6Ffzvo60PKCH7zQjgtH8RbPjZbrC8DqkmFbfcVc+Ca+POvFOqdGv5s73fpzOeY +yi3BHCdYD1EFBo8Xhv6bhroqv1eIc1tw9tIwLXsmogRVn5ov/b8Y/Uwa0zV4JRYf ++c0KfLAa5ZfIwp8zUPpSLlqXBbP+B50JAU8NbhYLW8V/eriK7K3ddP4F2xSFjd4Q +hcLG/s63F6N8bs2miNVnnEz7/NUGIDAWh8PWC4mUDm1966iloJVA+jtoN7LE+kHR +L+6Bh/xXAgMBAAECggEAKgFPrjQBH5lTMy0mYtnf1WkjJc2jUnsNVPaveSE2LfkP +fZckFlL3D3RcS0Ylyh1IP3dVzEFt3aA+cfs82E6jDlROk9BQ0WZYwzpBg6Tb76+U +661saScQmZJ3qmLmgTdB9KGrYyl5FaGPO+EOgAy3qLPZ5ecTaAQfNNIKfMCcq2sb +FfdCeJaGfr4Ojp3zxfNhWs88vcoY/tcN65Fnsx6sP4EepwwHqHM/kbKuH1agUeH5 +2pkmYoFQWybZs2Uu8sjTiaIKPFa+QM4aH/kdrai0VjzJPSlcPxWxiVoZMoDAcoAj +NIWWVDbay7xBf5/zpf8ApBu3AVOcCaPBxcRunyL8eQKBgQD9hBR8YLfKUHk9CC9R +mIUOPS/ucqpAzZOevg49F+LXy0a/G/CAAVdocp2Dd5Bl9frGeOxmnFPtzYrHvcLO +98ywAjR08VN2sJnQD+zW96D23njQxo+3C4tCLl1x7uzRrXHIK8hDrZ1475S5QgOY +W7b4YG4FWLOTX1bqMNwE9G57vQKBgQDzp8QZ0D7Cd5dkq6VotAg4/P9voSPvMVUR +RhEYhMGqN/CQSPRY2ef6R88iKBSJGbPabolAaH4Z3tRzN2NbUNjPSVJxvFji7g3Q +yeMWg/FDgc2p8OS7z0A/hvr9Us1k/ibLcGVeajzbeP0TZeawUhxDtFBGjUrIx3Om +wT2IUA2vowKBgDH4dOlHTzLrxdoH4PveamuyF96Sb4iyfOSPZdMZADe08877vN4e +ZZJK9U1Spf3TDIlOkJpxOgHnv/E7MEkHgys2ZAyg/OiqSsc+PFrrGKlQlNPiL7XO +6rYy2Wx5wehandDtAF6GvEF4SAJ0Rq0jdt9ico1PPKZR5pnm45d+bsCpAoGAaCt6 +sJqSqmucw0KLRldqCItJ3fzjsxjBSNBO8M+ZSN//roAyT2ZiQmO/D9hY50Cg3ytQ +7MN/3imhZNzyUpEfEIhFgjDHQ8YJDBG0T+T7GiR9vEEsWYtC6aYY2oMzIxFxnpqg +DByZhi+U610uooWIZf3KME+qAGsda9bEKuom38cCgYAcwLVw8t0eC0PH11AAr4jj +3hlDN/zxQvRMdK/VAf0m0dTD3KcP9WDLxMtmQ/LRRT5P/516UUMUH2yEQYErLZCh +FOQQK9cd5rCIXtc9M51ZUjKQh5Kh2pePuVDDhl4Ki5Ec60J2JZv/rc/ldgPk8omN +drOkIFNTSs//D25aXbHuLaA7MDkGCisGAQQBkggSCAExKzApBglghkgBZQMEAgIE +HKtJnqVaX0y3Q0NOScoe46SRVEMJxvWass1VB94= +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/provable3072.pem b/tests/cert-tests/data/provable3072.pem index d68bf45f69..ba5f84288c 100644 --- a/tests/cert-tests/data/provable3072.pem +++ b/tests/cert-tests/data/provable3072.pem @@ -3,192 +3,185 @@ Public Key Info: Key Security Level: High (3072 bits) modulus: - 00:a2:d8:85:be:b8:5f:3e:53:ac:5c:56:ac:35:d3: - cf:0e:a0:75:84:e0:89:9d:af:41:34:d0:26:97:6d: - df:14:1f:0d:90:8a:ec:3d:02:a3:3a:de:fe:ac:ff: - af:c4:d3:01:fb:e9:2f:22:f6:e6:89:5e:2a:45:02: - af:52:fb:f9:05:66:56:f5:d6:3d:aa:e5:de:b5:11: - 85:b9:f8:65:7d:e4:91:b0:4b:69:66:88:df:24:11: - b0:6c:44:b4:73:8d:fe:91:b5:e6:98:44:36:1c:0a: - f4:52:c9:0f:cc:39:9b:eb:57:26:43:7f:e7:7e:e5: - 6e:4c:86:68:9d:66:43:0c:4d:d4:9c:dd:79:80:fa: - ce:09:43:fa:ac:da:1c:c9:18:87:1f:68:2a:0a:d3: - be:5a:9f:31:32:30:54:69:16:07:11:c5:0c:5a:2b: - d5:33:66:b8:b1:23:06:79:56:34:18:54:02:6a:85: - 57:66:1c:bf:cd:ee:d3:dc:bf:5e:d8:fb:87:b6:4b: - 00:04:90:c2:8f:1e:f3:fb:0f:5b:af:0e:17:de:ad: - 3a:30:50:c1:c4:87:11:45:20:f3:de:27:b8:dd:90: - ee:e0:8f:1e:c6:ba:58:b5:61:37:dc:83:26:d0:0a: - 1b:64:fe:1f:f9:df:e7:c4:ef:08:3e:df:03:22:94: - 77:be:3a:d1:49:ef:e5:3a:b7:a9:87:33:4e:63:b1: - 51:bc:8a:5f:75:63:51:8c:6b:98:06:b8:19:1e:9e: - 58:5f:d9:81:5b:39:4d:27:3f:c1:5d:43:ed:ac:29: - c1:5e:34:98:55:aa:8c:cf:d0:e0:60:97:26:af:a8: - 91:c8:d9:f1:54:bb:05:b3:22:31:57:22:53:e8:d2: - 15:9f:17:f9:f6:2b:7b:ea:74:a9:5f:c6:08:79:7e: - fc:d5:bf:d2:8c:dd:da:90:2c:c8:ec:3d:c1:cd:56: - 52:28:3d:2d:26:6c:8c:44:57:7c:b8:13:b3:d3:7b: - 90:ee:05:8b:a3:db:ea:5b:8f:8b: + 00:a2:d8:85:be:b8:5f:3e:53:ac:5c:56:ac:35:d3:cf + 0e:a0:75:84:e0:89:9d:af:41:34:d0:26:97:6d:df:14 + 1f:0d:90:8a:ec:3d:02:a3:3a:de:fe:ac:ff:af:c4:d3 + 01:fb:e9:2f:22:f6:e6:89:5e:2a:45:02:af:52:fb:f9 + 05:66:56:f5:d6:3d:aa:e5:de:b5:11:85:b9:f8:65:7d + e4:91:b0:4b:69:66:88:df:24:11:b0:6c:44:b4:73:8d + fe:91:b5:e6:98:44:36:1c:0a:f4:52:c9:0f:cc:39:9b + eb:57:26:43:7f:e7:7e:e5:6e:4c:86:68:9d:66:43:0c + 4d:d4:9c:dd:79:80:fa:ce:09:43:fa:ac:da:1c:c9:18 + 87:1f:68:2a:0a:d3:be:5a:9f:31:32:30:54:69:16:07 + 11:c5:0c:5a:2b:d5:33:66:b8:b1:23:06:79:56:34:18 + 54:02:6a:85:57:66:1c:bf:cd:ee:d3:dc:bf:5e:d8:fb + 87:b6:4b:00:04:90:c2:8f:1e:f3:fb:0f:5b:af:0e:17 + de:ad:3a:30:50:c1:c4:87:11:45:20:f3:de:27:b8:dd + 90:ee:e0:8f:1e:c6:ba:58:b5:61:37:dc:83:26:d0:0a + 1b:64:fe:1f:f9:df:e7:c4:ef:08:3e:df:03:22:94:77 + be:3a:d1:49:ef:e5:3a:b7:a9:87:33:4e:63:b1:51:bc + 8a:5f:75:63:51:8c:6b:98:06:b8:19:1e:9e:58:5f:d9 + 81:5b:39:4d:27:3f:c1:5d:43:ed:ac:29:c1:5e:34:98 + 55:aa:8c:cf:d0:e0:60:97:26:af:a8:91:c8:d9:f1:54 + bb:05:b3:22:31:57:22:53:e8:d2:15:9f:17:f9:f6:2b + 7b:ea:74:a9:5f:c6:08:79:7e:fc:d5:bf:d2:8c:dd:da + 90:2c:c8:ec:3d:c1:cd:56:52:28:3d:2d:26:6c:8c:44 + 57:7c:b8:13:b3:d3:7b:90:ee:05:8b:a3:db:ea:5b:8f + 8b: public exponent: 01:00:01: private exponent: - 0f:98:86:02:94:7c:c6:a6:d3:d0:8a:1a:77:13:40: - 76:c9:a6:47:a2:0b:7b:f7:0f:5b:23:fe:36:2d:77: - 1a:61:b8:f6:59:5f:b3:9e:1f:8c:e1:53:69:b5:19: - 1b:d4:0b:92:19:2c:83:00:3b:66:f7:86:3b:d2:bc: - 80:c9:91:f9:52:ea:4c:24:07:06:e9:79:f1:44:6a: - d6:bb:33:d9:21:3d:54:b1:7c:38:2e:2e:94:b1:3f: - 00:b7:79:c2:c1:5c:1a:8f:5d:b4:c2:7f:9e:22:ec: - 70:4b:42:40:90:59:de:e9:9b:48:06:a5:60:91:4f: - 85:73:af:ec:37:21:7f:b9:aa:7d:95:76:70:04:55: - 1c:2d:0f:02:63:e7:32:d9:2f:03:b2:81:a8:44:cc: - 2b:b8:a8:49:02:b8:ea:d1:89:be:c9:6c:db:eb:eb: - c0:be:fb:3c:37:bb:04:7e:dd:81:60:f6:54:46:4d: - ef:01:1c:db:77:9e:81:bb:30:35:be:ad:02:eb:16: - a2:03:8d:35:aa:29:99:87:52:54:40:45:98:47:1d: - 0f:17:38:3e:1b:c0:1c:be:0d:9a:64:e9:f5:f5:5a: - 29:17:a4:78:f3:95:15:74:8a:ee:ba:54:3a:96:58: - df:cb:80:49:50:68:de:b4:89:c0:b6:5d:4b:46:a9: - e1:9c:63:8b:e6:23:54:ea:6a:5b:ec:fa:a1:6f:d2: - 99:fe:ef:2c:ae:d8:24:48:4f:51:a7:5d:7b:69:bf: - 7e:7d:50:3a:a1:49:a2:42:f3:76:37:56:f1:95:f7: - 7d:9c:eb:87:40:c8:30:80:c8:6f:ef:2b:0b:b4:e1: - c0:01:f5:15:62:16:22:11:65:13:6d:11:69:20:8d: - 34:18:b5:ea:4e:02:77:38:8f:67:53:1c:71:51:4b: - 40:cf:0c:57:44:1a:01:26:ef:c6:0a:1c:b8:5d:d0: - 64:8a:ef:fd:17:58:dc:fc:9f:6e:c1:10:64:00:b8: - 68:2b:2d:68:65:88:fd:5e:7d: + 0f:98:86:02:94:7c:c6:a6:d3:d0:8a:1a:77:13:40:76 + c9:a6:47:a2:0b:7b:f7:0f:5b:23:fe:36:2d:77:1a:61 + b8:f6:59:5f:b3:9e:1f:8c:e1:53:69:b5:19:1b:d4:0b + 92:19:2c:83:00:3b:66:f7:86:3b:d2:bc:80:c9:91:f9 + 52:ea:4c:24:07:06:e9:79:f1:44:6a:d6:bb:33:d9:21 + 3d:54:b1:7c:38:2e:2e:94:b1:3f:00:b7:79:c2:c1:5c + 1a:8f:5d:b4:c2:7f:9e:22:ec:70:4b:42:40:90:59:de + e9:9b:48:06:a5:60:91:4f:85:73:af:ec:37:21:7f:b9 + aa:7d:95:76:70:04:55:1c:2d:0f:02:63:e7:32:d9:2f + 03:b2:81:a8:44:cc:2b:b8:a8:49:02:b8:ea:d1:89:be + c9:6c:db:eb:eb:c0:be:fb:3c:37:bb:04:7e:dd:81:60 + f6:54:46:4d:ef:01:1c:db:77:9e:81:bb:30:35:be:ad + 02:eb:16:a2:03:8d:35:aa:29:99:87:52:54:40:45:98 + 47:1d:0f:17:38:3e:1b:c0:1c:be:0d:9a:64:e9:f5:f5 + 5a:29:17:a4:78:f3:95:15:74:8a:ee:ba:54:3a:96:58 + df:cb:80:49:50:68:de:b4:89:c0:b6:5d:4b:46:a9:e1 + 9c:63:8b:e6:23:54:ea:6a:5b:ec:fa:a1:6f:d2:99:fe + ef:2c:ae:d8:24:48:4f:51:a7:5d:7b:69:bf:7e:7d:50 + 3a:a1:49:a2:42:f3:76:37:56:f1:95:f7:7d:9c:eb:87 + 40:c8:30:80:c8:6f:ef:2b:0b:b4:e1:c0:01:f5:15:62 + 16:22:11:65:13:6d:11:69:20:8d:34:18:b5:ea:4e:02 + 77:38:8f:67:53:1c:71:51:4b:40:cf:0c:57:44:1a:01 + 26:ef:c6:0a:1c:b8:5d:d0:64:8a:ef:fd:17:58:dc:fc + 9f:6e:c1:10:64:00:b8:68:2b:2d:68:65:88:fd:5e:7d + prime1: - 00:bc:48:70:5f:8f:f1:16:7b:21:1f:da:8f:49:c8: - 10:46:01:fc:fb:bc:52:ff:8e:73:23:02:78:01:6d: - 25:7c:ec:20:2f:e0:78:e0:a1:84:3c:1a:44:f7:ef: - 9d:1a:95:90:4a:04:70:ca:28:b5:87:67:19:d3:ed: - 83:00:ba:7b:0b:0c:bb:8a:08:d5:63:66:0b:30:a8: - fa:c4:76:ba:91:60:9c:fa:3e:c1:ab:50:00:06:65: - f6:e9:b0:de:a6:81:b5:3d:57:d3:13:ff:7b:e6:5e: - 6b:da:3d:de:09:3d:3f:7d:ac:2a:31:9e:5e:57:c5: - 25:e4:c2:76:a8:b9:90:25:38:d8:de:ad:e8:d9:82: - 97:c5:fd:cf:15:7a:9d:70:23:ac:ae:fa:0b:14:ad: - 31:4c:b1:7a:1a:dc:53:99:8c:e5:8a:ba:6d:d2:8b: - 18:46:86:83:c3:a4:ae:fe:ed:6c:b2:bd:f1:a4:6e: - d7:8f:9f:ef:d3:a6:44:13:8a:04:45:49:05: + 00:bc:48:70:5f:8f:f1:16:7b:21:1f:da:8f:49:c8:10 + 46:01:fc:fb:bc:52:ff:8e:73:23:02:78:01:6d:25:7c + ec:20:2f:e0:78:e0:a1:84:3c:1a:44:f7:ef:9d:1a:95 + 90:4a:04:70:ca:28:b5:87:67:19:d3:ed:83:00:ba:7b + 0b:0c:bb:8a:08:d5:63:66:0b:30:a8:fa:c4:76:ba:91 + 60:9c:fa:3e:c1:ab:50:00:06:65:f6:e9:b0:de:a6:81 + b5:3d:57:d3:13:ff:7b:e6:5e:6b:da:3d:de:09:3d:3f + 7d:ac:2a:31:9e:5e:57:c5:25:e4:c2:76:a8:b9:90:25 + 38:d8:de:ad:e8:d9:82:97:c5:fd:cf:15:7a:9d:70:23 + ac:ae:fa:0b:14:ad:31:4c:b1:7a:1a:dc:53:99:8c:e5 + 8a:ba:6d:d2:8b:18:46:86:83:c3:a4:ae:fe:ed:6c:b2 + bd:f1:a4:6e:d7:8f:9f:ef:d3:a6:44:13:8a:04:45:49 + 05: prime2: - 00:dd:6a:09:2a:59:56:63:30:ef:a4:e6:c7:50:8c: - b3:15:63:22:5b:f2:c7:ab:fd:47:61:26:13:97:9d: - 4b:e7:44:e4:4a:07:7a:c8:76:84:34:09:33:a6:d5: - 9d:5f:20:57:0e:27:23:60:39:4c:aa:6a:71:a9:09: - 71:38:05:60:cc:f2:48:e2:85:f5:78:56:08:5e:d8: - dc:1e:8c:2e:f7:0e:62:76:a7:cd:32:8f:c0:4c:e4: - 1a:df:c6:77:68:eb:31:5f:77:37:3e:5c:09:c9:40: - f1:f7:92:51:06:84:13:b9:15:b7:bf:d3:cd:85:bf: - 2e:41:3e:d7:09:37:51:92:15:7a:18:3d:be:b8:25: - c4:92:2d:ee:b2:52:dd:05:c7:55:a2:fe:d8:4c:18: - 80:da:23:5d:52:f8:a8:85:21:e0:b8:28:59:cb:d1: - d5:55:31:60:f2:5b:a8:58:ea:b3:78:2b:6b:e6:69: - 48:f5:b9:cc:d4:ce:71:0a:8a:69:f4:9b:4f: + 00:dd:6a:09:2a:59:56:63:30:ef:a4:e6:c7:50:8c:b3 + 15:63:22:5b:f2:c7:ab:fd:47:61:26:13:97:9d:4b:e7 + 44:e4:4a:07:7a:c8:76:84:34:09:33:a6:d5:9d:5f:20 + 57:0e:27:23:60:39:4c:aa:6a:71:a9:09:71:38:05:60 + cc:f2:48:e2:85:f5:78:56:08:5e:d8:dc:1e:8c:2e:f7 + 0e:62:76:a7:cd:32:8f:c0:4c:e4:1a:df:c6:77:68:eb + 31:5f:77:37:3e:5c:09:c9:40:f1:f7:92:51:06:84:13 + b9:15:b7:bf:d3:cd:85:bf:2e:41:3e:d7:09:37:51:92 + 15:7a:18:3d:be:b8:25:c4:92:2d:ee:b2:52:dd:05:c7 + 55:a2:fe:d8:4c:18:80:da:23:5d:52:f8:a8:85:21:e0 + b8:28:59:cb:d1:d5:55:31:60:f2:5b:a8:58:ea:b3:78 + 2b:6b:e6:69:48:f5:b9:cc:d4:ce:71:0a:8a:69:f4:9b + 4f: coefficient: - 00:94:1f:9e:43:1a:1e:a0:09:72:94:94:2d:71:21: - fd:a7:19:b4:df:99:47:87:81:34:9f:37:a0:2f:f6: - 8d:7e:ae:cb:36:d8:44:a2:90:21:cf:01:11:f2:52: - 16:3e:8a:a1:9d:3d:e7:14:f9:e8:98:e7:91:cd:72: - a2:69:7c:27:69:44:bc:da:52:f8:d1:fb:80:ff:7c: - 3b:9b:e8:9b:0f:b9:0e:43:10:5f:c8:78:fb:d9:45: - 20:d3:ee:7a:5c:cd:2e:d9:47:e4:30:a2:58:8d:ff: - 45:b3:0b:7f:5f:dd:d8:5f:e3:f0:43:7b:e9:91:35: - 17:9f:62:62:c7:08:63:07:17:ff:cc:99:0c:d5:84: - be:6d:67:03:fb:e1:12:5f:01:ab:89:7b:d6:7d:04: - 5e:a0:29:b0:a1:14:5d:d5:6b:82:8e:f2:9e:fd:d1: - 4c:9e:7f:22:a7:93:a9:d9:15:60:9e:3d:66:8f:6f: - 87:98:1b:e2:a2:64:5e:1c:74:1f:f5:df:20: + 00:94:1f:9e:43:1a:1e:a0:09:72:94:94:2d:71:21:fd + a7:19:b4:df:99:47:87:81:34:9f:37:a0:2f:f6:8d:7e + ae:cb:36:d8:44:a2:90:21:cf:01:11:f2:52:16:3e:8a + a1:9d:3d:e7:14:f9:e8:98:e7:91:cd:72:a2:69:7c:27 + 69:44:bc:da:52:f8:d1:fb:80:ff:7c:3b:9b:e8:9b:0f + b9:0e:43:10:5f:c8:78:fb:d9:45:20:d3:ee:7a:5c:cd + 2e:d9:47:e4:30:a2:58:8d:ff:45:b3:0b:7f:5f:dd:d8 + 5f:e3:f0:43:7b:e9:91:35:17:9f:62:62:c7:08:63:07 + 17:ff:cc:99:0c:d5:84:be:6d:67:03:fb:e1:12:5f:01 + ab:89:7b:d6:7d:04:5e:a0:29:b0:a1:14:5d:d5:6b:82 + 8e:f2:9e:fd:d1:4c:9e:7f:22:a7:93:a9:d9:15:60:9e + 3d:66:8f:6f:87:98:1b:e2:a2:64:5e:1c:74:1f:f5:df + 20: exp1: - 00:a5:1b:68:df:84:1c:48:38:85:5d:a7:8d:4b:88: - 13:2d:31:05:25:c3:89:8c:ec:df:ee:6d:75:ca:da: - 69:ab:58:6d:09:4e:f0:f1:1a:f2:18:ba:78:8c:6b: - 24:fb:70:f8:6c:cf:e4:10:83:0e:5c:c4:7e:93:a7: - 8d:df:8f:a7:e2:92:b1:ca:63:e0:ac:1f:89:e4:8b: - ea:0b:6a:8a:44:7d:d2:6a:67:a9:f1:8e:5f:d7:3c: - 86:ff:7a:c8:64:7f:0d:ed:d3:1c:18:47:4b:e1:42: - 1f:95:eb:f6:cf:67:54:4b:e2:33:c5:fb:38:84:03: - 30:2d:a0:91:e9:77:7f:fe:04:11:b9:84:0b:d2:e1: - 80:32:71:55:ad:62:2e:b9:6d:af:3a:69:ae:59:dd: - 5e:84:00:86:31:13:d0:83:b0:58:82:04:e5:d5:61: - 80:52:28:17:57:f3:0c:3a:24:fd:d2:e8:5a:04:75: - e6:b5:dd:ec:b3:4e:f4:17:a6:4a:04:6f:f9: + 00:a5:1b:68:df:84:1c:48:38:85:5d:a7:8d:4b:88:13 + 2d:31:05:25:c3:89:8c:ec:df:ee:6d:75:ca:da:69:ab + 58:6d:09:4e:f0:f1:1a:f2:18:ba:78:8c:6b:24:fb:70 + f8:6c:cf:e4:10:83:0e:5c:c4:7e:93:a7:8d:df:8f:a7 + e2:92:b1:ca:63:e0:ac:1f:89:e4:8b:ea:0b:6a:8a:44 + 7d:d2:6a:67:a9:f1:8e:5f:d7:3c:86:ff:7a:c8:64:7f + 0d:ed:d3:1c:18:47:4b:e1:42:1f:95:eb:f6:cf:67:54 + 4b:e2:33:c5:fb:38:84:03:30:2d:a0:91:e9:77:7f:fe + 04:11:b9:84:0b:d2:e1:80:32:71:55:ad:62:2e:b9:6d + af:3a:69:ae:59:dd:5e:84:00:86:31:13:d0:83:b0:58 + 82:04:e5:d5:61:80:52:28:17:57:f3:0c:3a:24:fd:d2 + e8:5a:04:75:e6:b5:dd:ec:b3:4e:f4:17:a6:4a:04:6f + f9: exp2: - 0a:3a:02:90:5d:2d:fb:48:e0:58:ba:7c:0c:41:63: - 68:22:7b:0c:ca:2a:e4:cb:bf:07:42:ad:f6:fb:c1: - ec:bd:a6:d9:b0:7c:c0:53:91:09:a2:3f:2b:7e:84: - 55:47:76:1d:e6:3a:e1:0f:e4:75:9e:92:ff:5e:bb: - 46:fe:20:99:76:bb:5d:13:18:e2:64:fe:df:fa:9e: - 38:1e:fb:70:57:ce:be:72:43:ad:09:2c:b5:a0:77: - 89:4c:6e:69:7f:2b:79:a0:55:01:e1:58:66:5e:44: - 8e:cd:c8:46:47:c5:6d:70:0e:5b:a2:d9:c4:4a:af: - 45:3e:34:ca:6d:2e:ac:53:a7:9f:05:03:11:18:55: - 7a:f6:fa:26:6c:63:5f:07:f4:f1:a1:59:b6:32:0f: - 89:83:c6:a4:b5:6d:7b:30:b4:63:6d:21:b0:a3:51: - 7a:2c:dc:b0:75:01:52:92:0c:96:09:53:63:82:0b: - 67:a6:1c:4a:db:fa:26:a5:7b:fd:5b:4b: + 0a:3a:02:90:5d:2d:fb:48:e0:58:ba:7c:0c:41:63:68 + 22:7b:0c:ca:2a:e4:cb:bf:07:42:ad:f6:fb:c1:ec:bd + a6:d9:b0:7c:c0:53:91:09:a2:3f:2b:7e:84:55:47:76 + 1d:e6:3a:e1:0f:e4:75:9e:92:ff:5e:bb:46:fe:20:99 + 76:bb:5d:13:18:e2:64:fe:df:fa:9e:38:1e:fb:70:57 + ce:be:72:43:ad:09:2c:b5:a0:77:89:4c:6e:69:7f:2b + 79:a0:55:01:e1:58:66:5e:44:8e:cd:c8:46:47:c5:6d + 70:0e:5b:a2:d9:c4:4a:af:45:3e:34:ca:6d:2e:ac:53 + a7:9f:05:03:11:18:55:7a:f6:fa:26:6c:63:5f:07:f4 + f1:a1:59:b6:32:0f:89:83:c6:a4:b5:6d:7b:30:b4:63 + 6d:21:b0:a3:51:7a:2c:dc:b0:75:01:52:92:0c:96:09 + 53:63:82:0b:67:a6:1c:4a:db:fa:26:a5:7b:fd:5b:4b + +Validation parameters: + Hash: SHA384 + Seed: f3090f1bb1c9e0d068ecdadda747231f2e8162dedea3fbe67f2bc48ac9c04c5b -Seed: F3:09:0F:1B:B1:C9:E0:D0:68:EC:DA:DD:A7:47:23:1F:2E:81:62:DE:DE:A3:FB:E6:7F:2B:C4:8A:C9:C0:4C:5B -Public Key ID: 05:55:CB:C1:0D:AE:7A:EC:E1:AD:DE:DB:AC:0E:62:C1:BB:0C:34:3D -Public key's random art: -+--[ RSA 3072]----+ -| ...o+o | -| . o.o. | -| . + | -| o . . | -| o E . | -| . . * | -| . = = | -| + * = o | -| o.=o*oo | -+-----------------+ +Public Key PIN: + pin-sha256:Dh8nXdqKAU6V7dQ1pLFsyNUpzvAMEU5miA+YUIKMEAU= +Public Key ID: + sha256:0e1f275dda8a014e95edd435a4b16cc8d529cef00c114e66880f9850828c1005 + sha1:0555cbc10dae7aece1addedbac0e62c1bb0c343d ------BEGIN FIPS186-4 RSA PRIVATE KEY----- -MIIHFQIBAAKCAYEAotiFvrhfPlOsXFasNdPPDqB1hOCJna9BNNAml23fFB8NkIrs -PQKjOt7+rP+vxNMB++kvIvbmiV4qRQKvUvv5BWZW9dY9quXetRGFufhlfeSRsEtp -ZojfJBGwbES0c43+kbXmmEQ2HAr0UskPzDmb61cmQ3/nfuVuTIZonWZDDE3UnN15 -gPrOCUP6rNocyRiHH2gqCtO+Wp8xMjBUaRYHEcUMWivVM2a4sSMGeVY0GFQCaoVX -Zhy/ze7T3L9e2PuHtksABJDCjx7z+w9brw4X3q06MFDBxIcRRSDz3ie43ZDu4I8e -xrpYtWE33IMm0AobZP4f+d/nxO8IPt8DIpR3vjrRSe/lOrephzNOY7FRvIpfdWNR -jGuYBrgZHp5YX9mBWzlNJz/BXUPtrCnBXjSYVaqMz9DgYJcmr6iRyNnxVLsFsyIx -VyJT6NIVnxf59it76nSpX8YIeX781b/SjN3akCzI7D3BzVZSKD0tJmyMRFd8uBOz -03uQ7gWLo9vqW4+LAgMBAAECggGAD5iGApR8xqbT0IoadxNAdsmmR6ILe/cPWyP+ -Ni13GmG49llfs54fjOFTabUZG9QLkhksgwA7ZveGO9K8gMmR+VLqTCQHBul58URq -1rsz2SE9VLF8OC4ulLE/ALd5wsFcGo9dtMJ/niLscEtCQJBZ3umbSAalYJFPhXOv -7Dchf7mqfZV2cARVHC0PAmPnMtkvA7KBqETMK7ioSQK46tGJvsls2+vrwL77PDe7 -BH7dgWD2VEZN7wEc23eegbswNb6tAusWogONNaopmYdSVEBFmEcdDxc4PhvAHL4N -mmTp9fVaKRekePOVFXSK7rpUOpZY38uASVBo3rSJwLZdS0ap4Zxji+YjVOpqW+z6 -oW/Smf7vLK7YJEhPUadde2m/fn1QOqFJokLzdjdW8ZX3fZzrh0DIMIDIb+8rC7Th -wAH1FWIWIhFlE20RaSCNNBi16k4CdziPZ1MccVFLQM8MV0QaASbvxgocuF3QZIrv -/RdY3PyfbsEQZAC4aCstaGWI/V59AoHBALxIcF+P8RZ7IR/aj0nIEEYB/Pu8Uv+O -cyMCeAFtJXzsIC/geOChhDwaRPfvnRqVkEoEcMootYdnGdPtgwC6ewsMu4oI1WNm -CzCo+sR2upFgnPo+watQAAZl9umw3qaBtT1X0xP/e+Zea9o93gk9P32sKjGeXlfF -JeTCdqi5kCU42N6t6NmCl8X9zxV6nXAjrK76CxStMUyxehrcU5mM5Yq6bdKLGEaG -g8Okrv7tbLK98aRu14+f79OmRBOKBEVJBQKBwQDdagkqWVZjMO+k5sdQjLMVYyJb -8ser/UdhJhOXnUvnRORKB3rIdoQ0CTOm1Z1fIFcOJyNgOUyqanGpCXE4BWDM8kji -hfV4Vghe2NwejC73DmJ2p80yj8BM5Brfxndo6zFfdzc+XAnJQPH3klEGhBO5Fbe/ -082Fvy5BPtcJN1GSFXoYPb64JcSSLe6yUt0Fx1Wi/thMGIDaI11S+KiFIeC4KFnL -0dVVMWDyW6hY6rN4K2vmaUj1uczUznEKimn0m08CgcEApRto34QcSDiFXaeNS4gT -LTEFJcOJjOzf7m11ytppq1htCU7w8RryGLp4jGsk+3D4bM/kEIMOXMR+k6eN34+n -4pKxymPgrB+J5IvqC2qKRH3Samep8Y5f1zyG/3rIZH8N7dMcGEdL4UIflev2z2dU -S+Izxfs4hAMwLaCR6Xd//gQRuYQL0uGAMnFVrWIuuW2vOmmuWd1ehACGMRPQg7BY -ggTl1WGAUigXV/MMOiT90uhaBHXmtd3ss070F6ZKBG/5AoHACjoCkF0t+0jgWLp8 -DEFjaCJ7DMoq5Mu/B0Kt9vvB7L2m2bB8wFORCaI/K36EVUd2HeY64Q/kdZ6S/167 -Rv4gmXa7XRMY4mT+3/qeOB77cFfOvnJDrQkstaB3iUxuaX8reaBVAeFYZl5Ejs3I -RkfFbXAOW6LZxEqvRT40ym0urFOnnwUDERhVevb6JmxjXwf08aFZtjIPiYPGpLVt -ezC0Y20hsKNReizcsHUBUpIMlglTY4ILZ6YcStv6JqV7/VtLAoHBAJQfnkMaHqAJ -cpSULXEh/acZtN+ZR4eBNJ83oC/2jX6uyzbYRKKQIc8BEfJSFj6KoZ095xT56Jjn -kc1yoml8J2lEvNpS+NH7gP98O5vomw+5DkMQX8h4+9lFINPuelzNLtlH5DCiWI3/ -RbMLf1/d2F/j8EN76ZE1F59iYscIYwcX/8yZDNWEvm1nA/vhEl8Bq4l71n0EXqAp -sKEUXdVrgo7ynv3RTJ5/IqeTqdkVYJ49Zo9vh5gb4qJkXhx0H/XfIKEvMC0GCWCG -SAFlAwQCAgQg8wkPG7HJ4NBo7Nrdp0cjHy6BYt7eo/vmfyvEisnATFs= ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIHPwIBADANBgkqhkiG9w0BAQEFAASCBugwggbkAgEAAoIBgQCi2IW+uF8+U6xc +Vqw1088OoHWE4Imdr0E00CaXbd8UHw2Qiuw9AqM63v6s/6/E0wH76S8i9uaJXipF +Aq9S+/kFZlb11j2q5d61EYW5+GV95JGwS2lmiN8kEbBsRLRzjf6RteaYRDYcCvRS +yQ/MOZvrVyZDf+d+5W5MhmidZkMMTdSc3XmA+s4JQ/qs2hzJGIcfaCoK075anzEy +MFRpFgcRxQxaK9UzZrixIwZ5VjQYVAJqhVdmHL/N7tPcv17Y+4e2SwAEkMKPHvP7 +D1uvDhferTowUMHEhxFFIPPeJ7jdkO7gjx7Guli1YTfcgybQChtk/h/53+fE7wg+ +3wMilHe+OtFJ7+U6t6mHM05jsVG8il91Y1GMa5gGuBkenlhf2YFbOU0nP8FdQ+2s +KcFeNJhVqozP0OBglyavqJHI2fFUuwWzIjFXIlPo0hWfF/n2K3vqdKlfxgh5fvzV +v9KM3dqQLMjsPcHNVlIoPS0mbIxEV3y4E7PTe5DuBYuj2+pbj4sCAwEAAQKCAYAP +mIYClHzGptPQihp3E0B2yaZHogt79w9bI/42LXcaYbj2WV+znh+M4VNptRkb1AuS +GSyDADtm94Y70ryAyZH5UupMJAcG6XnxRGrWuzPZIT1UsXw4Li6UsT8At3nCwVwa +j120wn+eIuxwS0JAkFne6ZtIBqVgkU+Fc6/sNyF/uap9lXZwBFUcLQ8CY+cy2S8D +soGoRMwruKhJArjq0Ym+yWzb6+vAvvs8N7sEft2BYPZURk3vARzbd56BuzA1vq0C +6xaiA401qimZh1JUQEWYRx0PFzg+G8Acvg2aZOn19VopF6R485UVdIruulQ6lljf +y4BJUGjetInAtl1LRqnhnGOL5iNU6mpb7Pqhb9KZ/u8srtgkSE9Rp117ab9+fVA6 +oUmiQvN2N1bxlfd9nOuHQMgwgMhv7ysLtOHAAfUVYhYiEWUTbRFpII00GLXqTgJ3 +OI9nUxxxUUtAzwxXRBoBJu/GChy4XdBkiu/9F1jc/J9uwRBkALhoKy1oZYj9Xn0C +gcEAvEhwX4/xFnshH9qPScgQRgH8+7xS/45zIwJ4AW0lfOwgL+B44KGEPBpE9++d +GpWQSgRwyii1h2cZ0+2DALp7Cwy7igjVY2YLMKj6xHa6kWCc+j7Bq1AABmX26bDe +poG1PVfTE/975l5r2j3eCT0/fawqMZ5eV8Ul5MJ2qLmQJTjY3q3o2YKXxf3PFXqd +cCOsrvoLFK0xTLF6GtxTmYzlirpt0osYRoaDw6Su/u1ssr3xpG7Xj5/v06ZEE4oE +RUkFAoHBAN1qCSpZVmMw76Tmx1CMsxVjIlvyx6v9R2EmE5edS+dE5EoHesh2hDQJ +M6bVnV8gVw4nI2A5TKpqcakJcTgFYMzySOKF9XhWCF7Y3B6MLvcOYnanzTKPwEzk +Gt/Gd2jrMV93Nz5cCclA8feSUQaEE7kVt7/TzYW/LkE+1wk3UZIVehg9vrglxJIt +7rJS3QXHVaL+2EwYgNojXVL4qIUh4LgoWcvR1VUxYPJbqFjqs3gra+ZpSPW5zNTO +cQqKafSbTwKBwQClG2jfhBxIOIVdp41LiBMtMQUlw4mM7N/ubXXK2mmrWG0JTvDx +GvIYuniMayT7cPhsz+QQgw5cxH6Tp43fj6fikrHKY+CsH4nki+oLaopEfdJqZ6nx +jl/XPIb/eshkfw3t0xwYR0vhQh+V6/bPZ1RL4jPF+ziEAzAtoJHpd3/+BBG5hAvS +4YAycVWtYi65ba86aa5Z3V6EAIYxE9CDsFiCBOXVYYBSKBdX8ww6JP3S6FoEdea1 +3eyzTvQXpkoEb/kCgcAKOgKQXS37SOBYunwMQWNoInsMyirky78HQq32+8HsvabZ +sHzAU5EJoj8rfoRVR3Yd5jrhD+R1npL/XrtG/iCZdrtdExjiZP7f+p44HvtwV86+ +ckOtCSy1oHeJTG5pfyt5oFUB4VhmXkSOzchGR8VtcA5botnESq9FPjTKbS6sU6ef +BQMRGFV69vombGNfB/TxoVm2Mg+Jg8aktW17MLRjbSGwo1F6LNywdQFSkgyWCVNj +ggtnphxK2/ompXv9W0sCgcEAlB+eQxoeoAlylJQtcSH9pxm035lHh4E0nzegL/aN +fq7LNthEopAhzwER8lIWPoqhnT3nFPnomOeRzXKiaXwnaUS82lL40fuA/3w7m+ib +D7kOQxBfyHj72UUg0+56XM0u2UfkMKJYjf9Fswt/X93YX+PwQ3vpkTUXn2Jixwhj +Bxf/zJkM1YS+bWcD++ESXwGriXvWfQReoCmwoRRd1WuCjvKe/dFMnn8ip5Op2RVg +nj1mj2+HmBviomReHHQf9d8goD8wPQYKKwYBBAGSCBIIATEvMC0GCWCGSAFlAwQC +AgQg8wkPG7HJ4NBo7Nrdp0cjHy6BYt7eo/vmfyvEisnATFs= +-----END PRIVATE KEY----- diff --git a/tests/cert-tests/data/pubkey-ecc256.pem b/tests/cert-tests/data/pubkey-ecc256.pem new file mode 100644 index 0000000000..6e0020d479 --- /dev/null +++ b/tests/cert-tests/data/pubkey-ecc256.pem @@ -0,0 +1,23 @@ +Public Key Information: + Public Key Algorithm: EC/ECDSA + Algorithm Security Level: High (256 bits) + Curve: SECP256R1 + X: + 3c:15:6f:1d:48:3e:64:59:13:2c:6d:04:1a:38:0d:30 + 5c:e4:3f:55:cb:d9:17:15:46:72:71:92:c1:f8:c6:33 + Y: + 3d:04:2e:c8:c1:0f:c0:50:04:7b:9f:c9:48:b5:40:fa + 6f:93:82:59:61:5e:72:57:cb:83:06:bd:cc:82:94:c1 + +Public Key ID: + sha1:acfa4767c61b41791257f7ac05c150e28ed00e5b + sha256:5978dd1d2d23e992075dc359d5dd14f7ef79748af97f2b7809c9ebfd6016c433 +Public Key PIN: + pin-sha256:WXjdHS0j6ZIHXcNZ1d0U9+95dIr5fyt4Ccnr/WAWxDM= + + +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPBVvHUg+ZFkTLG0EGjgNMFzkP1XL +2RcVRnJxksH4xjM9BC7IwQ/AUAR7n8lItUD6b5OCWWFeclfLgwa9zIKUwQ== +-----END PUBLIC KEY----- + diff --git a/tests/cert-tests/data/pubkey-eddsa.pem b/tests/cert-tests/data/pubkey-eddsa.pem new file mode 100644 index 0000000000..dbcca224dc --- /dev/null +++ b/tests/cert-tests/data/pubkey-eddsa.pem @@ -0,0 +1,18 @@ +Public Key Information: + Public Key Algorithm: EdDSA (Ed25519) + Algorithm Security Level: High (256 bits) + Curve: Ed25519 + X: + 19:bf:44:09:69:84:cd:fe:85:41:ba:c1:67:dc:3b:96 + c8:50:86:aa:30:b6:b6:cb:0c:5c:38:ad:70:31:66:e1 + +Public Key ID: + sha1:3a04967761a552db7e9e18c6dba4bd4aae119908 + sha256:a1e9156054e04fac899ae9f275132cdc07a5dbc4ea2c2ad3a1ffc6e0d253681f +Public Key PIN: + pin-sha256:oekVYFTgT6yJmunydRMs3Ael28TqLCrTof/G4NJTaB8= + + +-----BEGIN PUBLIC KEY----- +MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE= +-----END PUBLIC KEY----- diff --git a/tests/cert-tests/data/rfc4134-4.5.p7b b/tests/cert-tests/data/rfc4134-4.5.p7b new file mode 100644 index 0000000000..6608d9b13b Binary files /dev/null and b/tests/cert-tests/data/rfc4134-4.5.p7b differ diff --git a/tests/cert-tests/data/rfc4134-ca-rsa.pem b/tests/cert-tests/data/rfc4134-ca-rsa.pem new file mode 100644 index 0000000000..20580fa080 --- /dev/null +++ b/tests/cert-tests/data/rfc4134-ca-rsa.pem @@ -0,0 +1,74 @@ +X.509 Certificate Information: + Version: 3 + Serial Number (hex): 46346bc7800056bc11d36e2e9ff25020 + Issuer: CN=CarlRSA + Validity: + Not Before: Wed Aug 18 07:00:00 UTC 1999 + Not After: Sat Dec 31 23:59:59 UTC 2039 + Subject: CN=CarlRSA + Subject Public Key Algorithm: RSA + Algorithm Security Level: Low (1024 bits) + Modulus (bits 1024): + 00:e4:4b:ff:18:b8:24:57:f4:77:ff:6e:73:7b:93:71 + 5c:bc:33:1a:92:92:72:23:d8:41:46:d0:cd:11:3a:04 + b3:8e:af:82:9d:bd:51:1e:17:7a:f2:76:2c:2b:86:39 + a7:bd:d7:8d:1a:53:ec:e4:00:d5:e8:ec:a2:36:b1:ed + e2:50:e2:32:09:8a:3f:9f:99:25:8f:b8:4e:ab:b9:7d + d5:96:65:da:16:a0:c5:be:0e:ae:44:5b:ef:5e:f4:a7 + 29:cb:82:dd:ac:44:e9:aa:93:94:29:0e:f8:18:d6:c8 + 57:5e:f2:76:c4:f2:11:60:38:b9:1b:3c:1d:97:c9:6a + f1 + Exponent (bits 24): + 01:00:01 + Extensions: + Basic Constraints (critical): + Certificate Authority (CA): TRUE + Key Usage (critical): + Digital signature. + Certificate signing. + CRL signing. + Subject Key Identifier (not critical): + e9e09027ac78207a9ad34cf242374e22ae9e38bb + Signature Algorithm: RSA-SHA1 + Signature: + b7:9e:d4:04:d3:ed:29:e4:ff:89:89:15:2e:4c:db:0c + f0:48:0f:32:61:ee:c4:04:ec:12:5d:2d:ff:0f:64:59 + 7e:0a:c3:ed:18:fd:e3:56:40:37:a7:07:b5:f0:38:12 + 61:50:ed:ef:dd:3f:e3:0b:b8:61:a5:a4:9b:3c:e6:9e + 9c:54:9a:b6:95:d6:da:6c:3b:b5:2d:45:35:9d:49:01 + 76:fa:b9:b9:31:f9:f9:6b:12:53:a0:f5:14:60:9b:7d + ca:3e:f2:53:6b:b0:37:6f:ad:e6:74:d7:db:fa:5a:ea + 14:41:63:5d:cd:be:c8:0e:c1:da:6a:8d:53:34:18:02 +Other Information: + SHA1 fingerprint: + 4110908f77c64c0edfc2de6273bfa9a98a9c5ce5 + SHA256 fingerprint: + 734c2253ad2d6bfaec981099a152b1ab42216b44cf48dadd306e6221ad824205 + Public Key ID: + e9e09027ac78207a9ad34cf242374e22ae9e38bb + Public key's random art: + +--[ RSA 1024]----+ + | | + | | + | | + | . . . | + |o = o S | + |==.= = o | + |**O . . . | + |=*=. | + |EO | + +-----------------+ + +-----BEGIN CERTIFICATE----- +MIIB6zCCAVSgAwIBAgIQRjRrx4AAVrwR024un/JQIDANBgkqhkiG9w0BAQUFADAS +MRAwDgYDVQQDEwdDYXJsUlNBMB4XDTk5MDgxODA3MDAwMFoXDTM5MTIzMTIzNTk1 +OVowEjEQMA4GA1UEAxMHQ2FybFJTQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC +gYEA5Ev/GLgkV/R3/25ze5NxXLwzGpKSciPYQUbQzRE6BLOOr4KdvVEeF3rydiwr +hjmnvdeNGlPs5ADV6OyiNrHt4lDiMgmKP5+ZJY+4Tqu5fdWWZdoWoMW+Dq5EW+9e +9Kcpy4LdrETpqpOUKQ74GNbIV17ydsTyEWA4uRs8HZfJavECAwEAAaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFOngkCeseCB6 +mtNM8kI3TiKunji7MA0GCSqGSIb3DQEBBQUAA4GBALee1ATT7Snk/4mJFS5M2wzw +SA8yYe7EBOwSXS3/D2RZfgrD7Rj941ZAN6cHtfA4EmFQ7e/dP+MLuGGlpJs85p6c +VJq2ldbabDu1LUU1nUkBdvq5uTH5+WsSU6D1FGCbfco+8lNrsDdvreZ019v6WuoU +QWNdzb7IDsHaao1TNBgC +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/rfc4490.p7b b/tests/cert-tests/data/rfc4490.p7b new file mode 100644 index 0000000000..c6979804b8 Binary files /dev/null and b/tests/cert-tests/data/rfc4490.p7b differ diff --git a/tests/cert-tests/data/rfc4490.p7b.out b/tests/cert-tests/data/rfc4490.p7b.out new file mode 100644 index 0000000000..8237d70359 --- /dev/null +++ b/tests/cert-tests/data/rfc4490.p7b.out @@ -0,0 +1,14 @@ +Signers: + Signer's issuer DN: EMAIL=GostR3410-2001@example.com,C=RU,O=CryptoPro,CN=GostR3410-2001 example + Signer's serial: 2bf5c61ec211bd17c7dcd46266b42e21 + Signature Algorithm: GOSTR341001 + +-----BEGIN PKCS7----- +MIIBKAYJKoZIhvcNAQcCoIIBGTCCARUCAQExDDAKBgYqhQMCAgkFADAbBgkqhkiG +9w0BBwGgDgQMc2FtcGxlIHRleHQKMYHkMIHhAgEBMIGBMG0xHzAdBgNVBAMMFkdv +c3RSMzQxMC0yMDAxIGV4YW1wbGUxEjAQBgNVBAoMCUNyeXB0b1BybzELMAkGA1UE +BhMCUlUxKTAnBgkqhkiG9w0BCQEWGkdvc3RSMzQxMC0yMDAxQGV4YW1wbGUuY29t +AhAr9cYewhG9F8fc1GJmtC4hMAoGBiqFAwICCQUAMAoGBiqFAwICEwUABEDAw0LZ +P4/+JRERiHe/icPbg0IE1iD5aCqZ9v4wO+T0yPjVtNr74caRZzQfvKZ6DRJ7/RAl +xlHbjbL0jHF+7XKp +-----END PKCS7----- diff --git a/tests/cert-tests/data/single-ca.p7b.out b/tests/cert-tests/data/single-ca.p7b.out index 35744628b8..bb7425e285 100644 --- a/tests/cert-tests/data/single-ca.p7b.out +++ b/tests/cert-tests/data/single-ca.p7b.out @@ -3,10 +3,10 @@ Signers: Signer's serial: 00 Signature Algorithm: RSA-SHA256 Signed Attributes: - 1.2.840.113549.1.9.15: 306a300b060960864801650304012a300b0609608648016503040116300b0609608648016503040102300a06082a864886f70d0307300e06082a864886f70d030202020080300d06082a864886f70d0302020140300706052b0e030207300d06082a864886f70d0302020128 - 1.2.840.113549.1.9.4: 0420aadc1955c030f723e9d89ed9d486b4eef5b0d1c6945be0dd6b7b340d42928ec9 - 1.2.840.113549.1.9.5: 170d3135303533313036343633385a - 1.2.840.113549.1.9.3: 06092a864886f70d010701 + smimeCapabilities: 306a300b060960864801650304012a300b0609608648016503040116300b0609608648016503040102300a06082a864886f70d0307300e06082a864886f70d030202020080300d06082a864886f70d0302020140300706052b0e030207300d06082a864886f70d0302020128 + messageDigest: 0420aadc1955c030f723e9d89ed9d486b4eef5b0d1c6945be0dd6b7b340d42928ec9 + signingTime: 170d3135303533313036343633385a + contentType: 06092a864886f70d010701 Number of certificates: 1 diff --git a/tests/cert-tests/data/template-crq.pem b/tests/cert-tests/data/template-crq.pem index 4a0dfd8ea7..03ad32c484 100644 --- a/tests/cert-tests/data/template-crq.pem +++ b/tests/cert-tests/data/template-crq.pem @@ -11,12 +11,12 @@ BAwTA0RyLjEPMA0GA1UEQRMGamFja2FsMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB iQKBgQClxs51Q4S/ZJ4CJxPxA1n3eS2S7XwvUKQD8S15uYaLBX46u0Sqr4TPE5ge HEo49zMtep9y1GttJrAxN3AQ+0Lp2J0YZX4ZSfwFlgRogx53hr/t9eUSOxP+Mxic Gnodaa9HAmB6H7noz9vINDBRlj2MllwAvGHeCA+xNiF/qQDjBQIDAQABo4HrMIHo -MA8GA1UdDwEB/wQFAwMHhAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwkwDAYDVR0T +MA8GA1UdDwEB/wQFAwMHgAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwkwDAYDVR0T AQH/BAIwADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJUIspyNl8wHwYDVR0jBBgw FoAUXUCt8M6UQJWLfpmUHZJUIspyNl8wbwYDVR0fBGgwZjBkoGKgYIYeaHR0cDov L3d3dy5nZXRjcmwuY3JsL2dldGNybDEvhh5odHRwOi8vd3d3LmdldGNybC5jcmwv Z2V0Y3JsMi+GHmh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwzLzANBgkqhkiG -9w0BAQsFAAOBgQBntg42qQ31Jk0RZ8zET4GBx4WMcWM/vv5DRFrJ2r3veFgcclrB -C88k0HerP2c6siAAOeXSLOuZ+W6du+5E7537y2lC87PW/cmanoY7Pkjhz9VjzJlh -bEQLFHHq5TMSKvnsn5IUSJefiOzJZ45saN0uGMYAfN0NWJPum+ofcyXZWQ== +9w0BAQsFAAOBgQCOk24K2VFpVFj/V4UHHk2U385GP2Q7+Eoh+2B83Vabf44NxRiA +XGfPmTvgYjislNavehaItPd1wQV8E+/I2s4wZWxgl0+jDWL9iR9S08wSqahKhbp1 +TeO3Hy5BLghvYDqTciOnyARxlZCtfAQslkUQ32q6ivSOxNQ3leLY92Myew== -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-date.pem b/tests/cert-tests/data/template-date.pem index c1613ca680..3db9239cd0 100644 --- a/tests/cert-tests/data/template-date.pem +++ b/tests/cert-tests/data/template-date.pem @@ -14,10 +14,10 @@ QunYnRhlfhlJ/AWWBGiDHneGv+315RI7E/4zGJwaeh1pr0cCYHofuejP28g0MFGW PYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjgfUwgfIwDwYDVR0TAQH/BAUwAwEB/zBq BgNVHREEYzBhggx3d3cubm9uZS5vcmeCE3d3dy5tb3JldGhhbm9uZS5vcmeCF3d3 dy5ldmVubW9yZXRoYW5vbmUub3JnhwTAqAEBgQ1ub25lQG5vbmUub3JngQ53aGVy -ZUBub25lLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDCTAPBgNVHQ8BAf8EBQMDBwQA +ZUBub25lLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDCTAPBgNVHQ8BAf8EBQMDB4QA MB0GA1UdDgQWBBRdQK3wzpRAlYt+mZQdklQiynI2XzAuBgNVHR8EJzAlMCOgIaAf hh1odHRwOi8vd3d3LmdldGNybC5jcmwvZ2V0Y3JsLzANBgkqhkiG9w0BAQsFAAOB -gQCDciVqhKW/vwPxoMJ1Ch6CAtKoPCTj2Anie1AxogSpNFZuzzUHoiKq9XxnUGaU -4wEsmHU9JuDBbjpR8rmTs2zsRTnDk2yqMjXa8j1iUhRxWwoIYbJLBblMene7aVbV -cTdJSs4Y73J6cDqvumU/rhdYw48PQbaIwhABqqiPiM3vGw== +gQCXDjCtllqexMxEBrKpt5POz7mQfWT5lhFk4GFY1V5u5s/ipuGRVZb4BMLIsCHR +O7dGbyY/TonCjFdHhvCrmzsfstlHnA+bt9/1GrDP7vFIi+3hx2OnHLd3TvDR8WJ7 +84upUqvWAqXUZ/UXiVrvnS4bJ5jN5pa+k8t4G8GGDA1JlA== -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-dates-after2038.pem b/tests/cert-tests/data/template-dates-after2038.pem new file mode 100644 index 0000000000..0cf9f8fd8e --- /dev/null +++ b/tests/cert-tests/data/template-dates-after2038.pem @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID3jCCA0egAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBuDEVMBMGA1UEAxMMQ2lu +ZHkgTGF1cGVyMRcwFQYKCZImiZPyLGQBARMHY2xhdXBlcjEXMBUGA1UECxMOc2xl +ZXBpbmcgZGVwdC4xEjAQBgNVBAoTCUtva28gaW5jLjEPMA0GA1UECBMGQXR0aWtp +MQswCQYDVQQGEwJHUjEMMAoGA1UEDBMDRHIuMQ8wDQYDVQRBEwZqYWNrYWwxHDAa +BgkqhkiG9w0BCQEWDW5vbmVAbm9uZS5vcmcwHhcNMzkwMTEyMTEzNjExWhcNNDMw +NTI0MTQyOTEyWjCBuDEVMBMGA1UEAxMMQ2luZHkgTGF1cGVyMRcwFQYKCZImiZPy +LGQBARMHY2xhdXBlcjEXMBUGA1UECxMOc2xlZXBpbmcgZGVwdC4xEjAQBgNVBAoT +CUtva28gaW5jLjEPMA0GA1UECBMGQXR0aWtpMQswCQYDVQQGEwJHUjEMMAoGA1UE +DBMDRHIuMQ8wDQYDVQRBEwZqYWNrYWwxHDAaBgkqhkiG9w0BCQEWDW5vbmVAbm9u +ZS5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKXGznVDhL9kngInE/ED +Wfd5LZLtfC9QpAPxLXm5hosFfjq7RKqvhM8TmB4cSjj3My16n3LUa20msDE3cBD7 +QunYnRhlfhlJ/AWWBGiDHneGv+315RI7E/4zGJwaeh1pr0cCYHofuejP28g0MFGW +PYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjgfUwgfIwDwYDVR0TAQH/BAUwAwEB/zBq +BgNVHREEYzBhggx3d3cubm9uZS5vcmeCE3d3dy5tb3JldGhhbm9uZS5vcmeCF3d3 +dy5ldmVubW9yZXRoYW5vbmUub3JnhwTAqAEBgQ1ub25lQG5vbmUub3JngQ53aGVy +ZUBub25lLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDCTAPBgNVHQ8BAf8EBQMDB4QA +MB0GA1UdDgQWBBRdQK3wzpRAlYt+mZQdklQiynI2XzAuBgNVHR8EJzAlMCOgIaAf +hh1odHRwOi8vd3d3LmdldGNybC5jcmwvZ2V0Y3JsLzANBgkqhkiG9w0BAQsFAAOB +gQBBZKTdpnE+SG7bxPJ3yWUa3/H2fXYTJFzP2g5sKsW9y439SJBvbNuerczRsvNB +QfokkinVQB3LKSC1jZ5Py5rzaDS0PJxpz0u9DrzstpPWjfzOv0cmCr7dcpxFL2JC +ItOU/OLb2SYTfo8PwWs3/G3e4yYsGrR/kwfWA0nj6Sms3Q== +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-dn.pem b/tests/cert-tests/data/template-dn.pem index 5ebc8eb9a0..9c37d823a5 100644 --- a/tests/cert-tests/data/template-dn.pem +++ b/tests/cert-tests/data/template-dn.pem @@ -11,9 +11,9 @@ NDBRlj2MllwAvGHeCA+xNiF/qQDjBQIDAQABo4H1MIHyMA8GA1UdEwEB/wQFMAMB Af8wagYDVR0RBGMwYYIMd3d3Lm5vbmUub3JnghN3d3cubW9yZXRoYW5vbmUub3Jn ghd3d3cuZXZlbm1vcmV0aGFub25lLm9yZ4cEwKgBAYENbm9uZUBub25lLm9yZ4EO d2hlcmVAbm9uZS5vcmcwEwYDVR0lBAwwCgYIKwYBBQUHAwkwDwYDVR0PAQH/BAUD -AwcEADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJUIspyNl8wLgYDVR0fBCcwJTAj +AweEADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJUIspyNl8wLgYDVR0fBCcwJTAj oCGgH4YdaHR0cDovL3d3dy5nZXRjcmwuY3JsL2dldGNybC8wDQYJKoZIhvcNAQEL -BQADgYEAjhN+oIDCWn6jdXIJMfd3co3SeVd/HY8Hu6TUnXs/fmkJY6Hglq6f8YYE -M74eH5HF+ixUOSDvXLGVhR5uZoP9CGBSPJdINOIRyDzUYv6TVydAe1TvKLjacZm0 -jq8Pe2CXpQAaHhHKt84mSQx1jnYYYmfupyNwqq7XFTSjLAZyyPA= +BQADgYEAh/QtfeAkHwXad7u+sSiD2uAmal1eJPagxC/kqq8AnI8Fa3QCIawMYi+V +/WerX8qk7xY4LPma6VW/uC89TvISMR4DqrubKy4ELt4tvDcVIi+n8pInxdNBMX/u +3lygdVTLLDWBMernpeZWGauaxdEWlSMyyucYQyDm14iSBfhyj9M= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-generalized.pem b/tests/cert-tests/data/template-generalized.pem index f7e9c4aaeb..cbbcdd0ae9 100644 --- a/tests/cert-tests/data/template-generalized.pem +++ b/tests/cert-tests/data/template-generalized.pem @@ -15,9 +15,9 @@ NDBRlj2MllwAvGHeCA+xNiF/qQDjBQIDAQABo4H1MIHyMA8GA1UdEwEB/wQFMAMB Af8wagYDVR0RBGMwYYIMd3d3Lm5vbmUub3JnghN3d3cubW9yZXRoYW5vbmUub3Jn ghd3d3cuZXZlbm1vcmV0aGFub25lLm9yZ4cEwKgBAYENbm9uZUBub25lLm9yZ4EO d2hlcmVAbm9uZS5vcmcwEwYDVR0lBAwwCgYIKwYBBQUHAwkwDwYDVR0PAQH/BAUD -AwcEADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJUIspyNl8wLgYDVR0fBCcwJTAj +AweEADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJUIspyNl8wLgYDVR0fBCcwJTAj oCGgH4YdaHR0cDovL3d3dy5nZXRjcmwuY3JsL2dldGNybC8wDQYJKoZIhvcNAQEL -BQADgYEAimJGv9nzp+fiQL6JR2iN5XCr2I8Omtd+qiDwdkrBUJ5QOjgYrO27pIQb -hLG+gg1V3VVwk3JzJQkBsvX2+8jGKDpytHul+tfrhZO32BlEwgAviDz54LpEgPsQ -w2mqTIswGzS+5ZH7kCpAmEYc7bkO3Qs9JMLXY17QKnsyiV0rOVM= +BQADgYEAdwNEsT9EnaXSHaR8r1/jUw7cEQWNN/gUHpy917Ha5brc633LJopAhfR4 +i6CAZrAA46GAxTNvLaah5OXGDbHxGcEwcOwFT6/RJ3a+52U8LKa3DjAeaWoxlARL +1xfKBMbORS0+7lY0D7Oh9BYVgqL2FUet4Cohf2qgDsMM9siz204= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-krb5name.pem b/tests/cert-tests/data/template-krb5name.pem index d69e86f30b..038bb7722e 100644 --- a/tests/cert-tests/data/template-krb5name.pem +++ b/tests/cert-tests/data/template-krb5name.pem @@ -15,9 +15,9 @@ ETAPoAMCAQGhCDAGGwR1c2VyoDIGBisGAQUCAqAoMCagCxsJUkVBTE0uQ09NoRcw FaADAgEBoQ4wDBsESFRUUBsEdXNlcqA6BgYrBgEFAgKgMDAuoAsbCVJFQUxNLkNP TaEfMB2gAwIBAaEWMBQbBWNvbXAxGwVjb21wMhsEdXNlcoENbm9uZUBub25lLm9y Z4EOd2hlcmVAbm9uZS5vcmcwEwYDVR0lBAwwCgYIKwYBBQUHAwkwDwYDVR0PAQH/ -BAUDAwcEADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJUIspyNl8wLgYDVR0fBCcw +BAUDAweEADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJUIspyNl8wLgYDVR0fBCcw JTAjoCGgH4YdaHR0cDovL3d3dy5nZXRjcmwuY3JsL2dldGNybC8wDQYJKoZIhvcN -AQELBQADgYEAiidPcCe/oD+6FKl81oTtd1m7T7mq6PTat2YQMlVG0zqEICkhULXx -Z8UqatZZLjSYSye1pOGrwqU/nXzXZbvogTnfYriaE0wgLviYKjX3EucAX2XqC2ED -qbyao1Ia+vL+ugK7z+UBm/xIAurC5b9B4cOQ6ULq+k7c+miyyrxCWow= +AQELBQADgYEAMM+b9XNFH/cn9WQCMZMr12izyBl69S3M1D4MQvA2XIGFR1h10+VS +cYKIfTICbYuV/s44bVpQJ8Nj9cumMu6SqURpfKmnr8gDFvadY8Q1PPbtmKn/iahI +hb5Ro4Li5R6DZtKfdYEfsljUinSWnUnBwAtGJgbhSrGwN5di1NPV1Nw= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-nc.pem b/tests/cert-tests/data/template-nc.pem index 680fce1642..9cba2bd15b 100644 --- a/tests/cert-tests/data/template-nc.pem +++ b/tests/cert-tests/data/template-nc.pem @@ -15,10 +15,10 @@ oGswCocIwKgFAP///wAwCocICgoAAP//AAAwCocIrBd6AP///gAwIocg/Ez+j3/6 GL0AAAAAAAAAAP//////////AAAAAAAAAAAwDYILZXhhbXBsZS5jb20wEoEQbm1h dkBleGFtcGxlLmNvbaFrMAqHCAoKZAD///8AMAqHCAoKZQD///8AMCKHIPxM/o9/ +hi9cshkuQAAAAD///////////////8AAAAAMAWCA25ldDAFggNvcmcwAoIAMA2B -C2V4YW1wbGUubmV0MAyBCmV4YW1wbGUubGkwDwYDVR0PAQH/BAUDAwcEADAdBgNV +C2V4YW1wbGUubmV0MAyBCmV4YW1wbGUubGkwDwYDVR0PAQH/BAUDAweEADAdBgNV HQ4EFgQUXUCt8M6UQJWLfpmUHZJUIspyNl8wLgYDVR0fBCcwJTAjoCGgH4YdaHR0 -cDovL3d3dy5nZXRjcmwuY3JsL2dldGNybC8wDQYJKoZIhvcNAQELBQADgYEAEIi1 -EPKT1uwVZvy99QuUGTxC/sMrF/k9M9+uV6+C4f8ikqQOhgSl4t5BdalgVLZzUeGr -oBGhbdjGrIq6kQiVgdeRZG+HlzVvr3+K69TTA15B86IdDg6dS8YCOVsoZvNcT8xw -2knOQmqXE7GqEPO3VCfOVTTl1u+69cU2X41MMhM= +cDovL3d3dy5nZXRjcmwuY3JsL2dldGNybC8wDQYJKoZIhvcNAQELBQADgYEApURg +xJuSGg3iogTI7x9HjgCi6ohSVKnX31i63ommreoKiy9sz5oPfsEuDcP0KaQMgK2V +xPMcBZbaCJHkRmWsjkEx3XcxWwtMnP1oj54N067C/mhamgUfR4KPdmorcgk9vZz9 +jI0FbegyqTQzRD40p4OQsCzVlqgixif4gRDhQWI= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-othername-xmpp.pem b/tests/cert-tests/data/template-othername-xmpp.pem index b81716b774..3d06423147 100644 --- a/tests/cert-tests/data/template-othername-xmpp.pem +++ b/tests/cert-tests/data/template-othername-xmpp.pem @@ -1,5 +1,5 @@ -----BEGIN CERTIFICATE----- -MIIDazCCAtSgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBbMQwwCgYDVQQDEwNOaWsx +MIIDaDCCAtGgAwIBAgIBBzANBgkqhkiG9w0BAQsFADBbMQwwCgYDVQQDEwNOaWsx DzANBgNVBAgTBkF0dGlraTELMAkGA1UEBhMCR1IxGjAYBgNVBAQTEU1hdnJvZ2lh bm5vcG91bG9zMREwDwYDVQQJEwhBcmthZGlhczAeFw0wNzA0MjIwMDAwMDBaFw0x NDA1MjUwMDAwMDBaMFsxDDAKBgNVBAMTA05pazEPMA0GA1UECBMGQXR0aWtpMQsw @@ -7,15 +7,15 @@ CQYDVQQGEwJHUjEaMBgGA1UEBBMRTWF2cm9naWFubm9wb3Vsb3MxETAPBgNVBAkT CEFya2FkaWFzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClxs51Q4S/ZJ4C JxPxA1n3eS2S7XwvUKQD8S15uYaLBX46u0Sqr4TPE5geHEo49zMtep9y1GttJrAx N3AQ+0Lp2J0YZX4ZSfwFlgRogx53hr/t9eUSOxP+MxicGnodaa9HAmB6H7noz9vI -NDBRlj2MllwAvGHeCA+xNiF/qQDjBQIDAQABo4IBPTCCATkwDwYDVR0TAQH/BAUw -AwEB/zCBsAYDVR0RBIGoMIGlggx3d3cubm9uZS5vcmeCE3d3dy5tb3JldGhhbm9u -ZS5vcmeCF3d3dy5ldmVubW9yZXRoYW5vbmUub3JnhwTAqAEBoCMGCCsGAQUFBwgF -oBcMFWp1bGlldEBpbS5leGFtcGxlLmNvbaAdBggrBgEFBQcIBaARDA9oZWxsb0Bo -ZWxsby5vcmeBDW5vbmVAbm9uZS5vcmeBDndoZXJlQG5vbmUub3JnMBMGA1UdJQQM -MAoGCCsGAQUFBwMJMA8GA1UdDwEB/wQFAwMHBAAwHQYDVR0OBBYEFF1ArfDOlECV -i36ZlB2SVCLKcjZfMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly93d3cuZ2V0Y3Js -LmNybC9nZXRjcmwvMA0GCSqGSIb3DQEBCwUAA4GBAA9/JPNTkMZUlpZ39qrSm2Oa -r9lAeDOnMbEYHcXnmmAjjPNL0DePjRD6xfayqPvrE6F5/Og4I9+UbHlSw8470qYr -RBOHjqp+vn0+k9AKeoO0tB692XZEs/AqqQCVvizCOlrhpdrYRDIhf7pWIC0VUz+o -+9bYIjtqHhWAO1mM5016 +NDBRlj2MllwAvGHeCA+xNiF/qQDjBQIDAQABo4IBOjCCATYwDAYDVR0TAQH/BAIw +ADCBsAYDVR0RBIGoMIGlggx3d3cubm9uZS5vcmeCE3d3dy5tb3JldGhhbm9uZS5v +cmeCF3d3dy5ldmVubW9yZXRoYW5vbmUub3JnhwTAqAEBoCMGCCsGAQUFBwgFoBcM +FWp1bGlldEBpbS5leGFtcGxlLmNvbaAdBggrBgEFBQcIBaARDA9oZWxsb0BoZWxs +by5vcmeBDW5vbmVAbm9uZS5vcmeBDndoZXJlQG5vbmUub3JnMBMGA1UdJQQMMAoG +CCsGAQUFBwMJMA8GA1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFF1ArfDOlECVi36Z +lB2SVCLKcjZfMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly93d3cuZ2V0Y3JsLmNy +bC9nZXRjcmwvMA0GCSqGSIb3DQEBCwUAA4GBAB6XUDXasilW0/gnhFaULkIALaK8 +khY1aUIPJo4nXaCUdSl4HwDR+Q+fBJEQ+b7HJ/2V8+iQHQxJhI+CoQ5AxXjSVS4Y +TJVB5uq4wIyGpwcu/QGysyBb4NqMA7kWh13J6vIblBO9+AWVGui2w+Sy1OgmDkty +GLmLQS2MD1u7p41J -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-othername.pem b/tests/cert-tests/data/template-othername.pem index 540bd81547..6bb3227099 100644 --- a/tests/cert-tests/data/template-othername.pem +++ b/tests/cert-tests/data/template-othername.pem @@ -14,9 +14,9 @@ MCygDRsLVkFOUkVJTi5PUkehGzAZoAYCBAAAAAKhDzANGwRyaWNrGwVhZG1pbqAX BgQqBAUGoA8EDWEgdGVzdCBzdHJpbmegHQYIKwYBBQUHCAegEQwPbm1hdkBnbnV0 bHMub3JnoB0GCCsGAQUFBwgFoBEMD25tYXZAZ251dGxzLm9yZ4ENbm9uZUBub25l Lm9yZ4EOd2hlcmVAbm9uZS5vcmcwEwYDVR0lBAwwCgYIKwYBBQUHAwkwDwYDVR0P -AQH/BAUDAwcEADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJUIspyNl8wLgYDVR0f +AQH/BAUDAweEADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJUIspyNl8wLgYDVR0f BCcwJTAjoCGgH4YdaHR0cDovL3d3dy5nZXRjcmwuY3JsL2dldGNybC8wDQYJKoZI -hvcNAQELBQADgYEAavwEUhW+tvs0qcj09ZchA4AYTmhq8Wx3EzhDHpPA6xlERWxs -NB07bA7dJ1XzbCn4Q2DIT6AVQARQuQdT5S6kbnk2LjAPgMLNS90MaNBhV5Qiea+f -yL/FTC/chuDBR6pGUOW5c8oPP85WAHVBQXX2GLN0esCnTtLX18Jinfl06hU= +hvcNAQELBQADgYEANTKeCgs/Cv8N3nn7f4v3h+X5m5GSzNcdpdQ/joEv1Lkb8Sl4 +soXQqoBFHcbj8AQEeRSXSZAD1cBoAwVsVfzkdXxGZ+7T3s50ogKSSITfp91783e1 +VO4VaeA5Wsi46x3CE8Uzry8a4bP7GhzH6rRW846oSqH07J4L2QAVilN5SF0= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-overflow.pem b/tests/cert-tests/data/template-overflow.pem index c0b025070c..c9bf31e9c3 100644 --- a/tests/cert-tests/data/template-overflow.pem +++ b/tests/cert-tests/data/template-overflow.pem @@ -15,9 +15,9 @@ UZY9jJZcALxh3ggPsTYhf6kA4wUCAwEAAaOB9TCB8jAPBgNVHRMBAf8EBTADAQH/ MGoGA1UdEQRjMGGCDHd3dy5ub25lLm9yZ4ITd3d3Lm1vcmV0aGFub25lLm9yZ4IX d3d3LmV2ZW5tb3JldGhhbm9uZS5vcmeHBMCoAQGBDW5vbmVAbm9uZS5vcmeBDndo ZXJlQG5vbmUub3JnMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GA1UdDwEB/wQFAwMH -BAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMC4GA1UdHwQnMCUwI6Ah +hAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMC4GA1UdHwQnMCUwI6Ah oB+GHWh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwvMA0GCSqGSIb3DQEBCwUA -A4GBABVMpMML6zxcl5ww9Mshd8c15oobslbMFRWtoCigFDtxL0QjXBLdqDvcnDEd -TRCqJSBtZRyXRby6OcYppKLKgM+fO3JS1SHKgs44jabShdrEoR1HLQqMh57sM1Oq -OTA4++PhC1+dEAknkRqNxGQU1gqxx/iDVst45s/XLzwQYF+N +A4GBAAjokEJilLen8WR+iXKNgsnS6nJNobQaH0PXqekrbsMcd/z+S2gAmXsZjpZm +QfVl8w8a0hxFgE9AfdJu79pHBtdrSczCfUY1VfvlMU46iZBmSMFFbKV7B8THn0QK +Bj7A6XUC1uTjlYeujSi06LhC7CzykjoxYjjEc96552k8Sxsp -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-overflow2.pem b/tests/cert-tests/data/template-overflow2.pem index 43e8efadc6..2de2af0282 100644 --- a/tests/cert-tests/data/template-overflow2.pem +++ b/tests/cert-tests/data/template-overflow2.pem @@ -15,9 +15,9 @@ UZY9jJZcALxh3ggPsTYhf6kA4wUCAwEAAaOB9TCB8jAPBgNVHRMBAf8EBTADAQH/ MGoGA1UdEQRjMGGCDHd3dy5ub25lLm9yZ4ITd3d3Lm1vcmV0aGFub25lLm9yZ4IX d3d3LmV2ZW5tb3JldGhhbm9uZS5vcmeHBMCoAQGBDW5vbmVAbm9uZS5vcmeBDndo ZXJlQG5vbmUub3JnMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GA1UdDwEB/wQFAwMH -BAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMC4GA1UdHwQnMCUwI6Ah +hAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMC4GA1UdHwQnMCUwI6Ah oB+GHWh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwvMA0GCSqGSIb3DQEBCwUA -A4GBAHUypGH/Jaxkyd3DdX5OCJ54+Qvre3/abi3fT1vBR28zQBYH7RdbAJobNsro -vKoa4Bugc43llXjxztpxB078pj0nsn9yE1OSsOryBWP6yZ/OfoxD5uZrUuXwkx0Q -HfijaNBnIn/xBO7No7VqvUK0QrNy11HqWi7KrxjcaWcBwZ7D +A4GBAJxCy6TeatkbCtKlTS76T5pPPkNX0w654BOFOvbOjJ/Qd0QjI+bCRDvjLKN4 +s3KVjhWaX/IhR4kql1FSrIfD9Cs+/JN91hlNhH5eK2p8NfRXSeAZby2d1UzYZDV/ +qFbnBROQbuH08KfoGU7dYwsOcEZpQ38SpVwHUJJSDSzkKx88 -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-rsa-sha3-224.pem b/tests/cert-tests/data/template-rsa-sha3-224.pem index 8b2a0fb903..f20544c747 100644 --- a/tests/cert-tests/data/template-rsa-sha3-224.pem +++ b/tests/cert-tests/data/template-rsa-sha3-224.pem @@ -15,11 +15,11 @@ PYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjggE3MIIBMzAPBgNVHRMBAf8EBTADAQH/ MGoGA1UdEQRjMGGCDHd3dy5ub25lLm9yZ4ITd3d3Lm1vcmV0aGFub25lLm9yZ4IX d3d3LmV2ZW5tb3JldGhhbm9uZS5vcmeHBMCoAQGBDW5vbmVAbm9uZS5vcmeBDndo ZXJlQG5vbmUub3JnMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GA1UdDwEB/wQFAwMH -BAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMG8GA1UdHwRoMGYwZKBi +hAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMG8GA1UdHwRoMGYwZKBi oGCGHmh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwxL4YeaHR0cDovL3d3dy5n ZXRjcmwuY3JsL2dldGNybDIvhh5odHRwOi8vd3d3LmdldGNybC5jcmwvZ2V0Y3Js -My8wDQYJYIZIAWUDBAMNBQADgYEABZpsvNQi0mtwO88lqAsN/iTB1BvXlaCNVPiB -f52WMSgJskJV+Gxhx0zwnSvqC7Iiq8SpF20ROC+3ROq1IuGIlO9/Q8aXfW/cK3Nn -qfVEMmdNkmUO2bTy1yhs6xpuoQmvDTA/kYo0DsZhIZdWOzuvUEZ48oztkiFsXjmo -NkjpuP4= +My8wDQYJYIZIAWUDBAMNBQADgYEAiA3TxnYSzSnqDbf9QEV5hFeyq1z7u2fW6pKL ++BkmwDm5mX7Lb5tZ2wBFkF9rx/OrxH5d/yXXy5FAvTIALLtYy6z1M5SHn9ygpQQu +H8fAnT7kou6eqdi1wWZUUcANUR8qUGyqGfWZvckoUBaleQG1x6g35bDuDu2zPcVW +II7WDzo= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-rsa-sha3-256.pem b/tests/cert-tests/data/template-rsa-sha3-256.pem index 35a083ac3c..ff6dcfcb4c 100644 --- a/tests/cert-tests/data/template-rsa-sha3-256.pem +++ b/tests/cert-tests/data/template-rsa-sha3-256.pem @@ -15,11 +15,11 @@ PYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjggE3MIIBMzAPBgNVHRMBAf8EBTADAQH/ MGoGA1UdEQRjMGGCDHd3dy5ub25lLm9yZ4ITd3d3Lm1vcmV0aGFub25lLm9yZ4IX d3d3LmV2ZW5tb3JldGhhbm9uZS5vcmeHBMCoAQGBDW5vbmVAbm9uZS5vcmeBDndo ZXJlQG5vbmUub3JnMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GA1UdDwEB/wQFAwMH -BAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMG8GA1UdHwRoMGYwZKBi +hAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMG8GA1UdHwRoMGYwZKBi oGCGHmh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwxL4YeaHR0cDovL3d3dy5n ZXRjcmwuY3JsL2dldGNybDIvhh5odHRwOi8vd3d3LmdldGNybC5jcmwvZ2V0Y3Js -My8wDQYJYIZIAWUDBAMOBQADgYEApWQSGVKFbbUOZVsgXfx978CNxewsZGsNdrAU -X98wxysQGe8tQNvftPRB+NijWo5f49HjAfVhWxCr51f8pat+IPK8U7iRY3Uxxz+G -xRO0qfP0AyAQIYOvWkKi6RqvoVReh+69n2fSTgdhvKJrKITRlPL+kNbYlA2i3v2G -j1AK27Y= +My8wDQYJYIZIAWUDBAMOBQADgYEASyYQIkWmWNRwjHnLCFZmwAVdE833hh0gf8ne +3HbW2splDnfDUoKxqpMd7ViLCoWwoh6Y24d0yvZc1RGy83Z0Q0QuA8kAtYnMZ3j/ +ZtXZGq6010ZqkcHP43MZgLFru27diymDbgGxzsP9rOc1GnIi0OKo5EpJI1KHaG+k +0ObmT5U= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-rsa-sha3-384.pem b/tests/cert-tests/data/template-rsa-sha3-384.pem index b6de699f96..33c4b31ab4 100644 --- a/tests/cert-tests/data/template-rsa-sha3-384.pem +++ b/tests/cert-tests/data/template-rsa-sha3-384.pem @@ -15,11 +15,11 @@ PYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjggE3MIIBMzAPBgNVHRMBAf8EBTADAQH/ MGoGA1UdEQRjMGGCDHd3dy5ub25lLm9yZ4ITd3d3Lm1vcmV0aGFub25lLm9yZ4IX d3d3LmV2ZW5tb3JldGhhbm9uZS5vcmeHBMCoAQGBDW5vbmVAbm9uZS5vcmeBDndo ZXJlQG5vbmUub3JnMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GA1UdDwEB/wQFAwMH -BAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMG8GA1UdHwRoMGYwZKBi +hAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMG8GA1UdHwRoMGYwZKBi oGCGHmh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwxL4YeaHR0cDovL3d3dy5n ZXRjcmwuY3JsL2dldGNybDIvhh5odHRwOi8vd3d3LmdldGNybC5jcmwvZ2V0Y3Js -My8wDQYJYIZIAWUDBAMPBQADgYEAI2ltSzA62kJqSBTWBmwot8d7go5NXNcM8vsE -XFdnFiT86ne33o58fXIA/TBr/f2rurIPKH3EbDQb00sr0ULrHYAF3KK1QkwOBMX6 -kWejpBlptV58liwBYhA3+ONp6K7yaiRGJzxA2xI4EZuUvsHy5F+oIpMb1ZlTmGMg -ib2amD4= +My8wDQYJYIZIAWUDBAMPBQADgYEAXFYGBk+qE52LESjshhK+jIXr3Tp7yZqV7oN8 +E/BBzXI+TelNmo1Rf/l7uOfQGsCDmBmP23F75UFNYk/1dYe1Sz6ODITLVRjy+upC +YkKTj/EcPeoeHvATe6bn3ohJcBEmbNAVu2IgGzHvewytKKlBk9EcR9uSENIuTY6A +bdXq6Sw= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-rsa-sha3-512.pem b/tests/cert-tests/data/template-rsa-sha3-512.pem index 05a24766a0..ab773ef1ad 100644 --- a/tests/cert-tests/data/template-rsa-sha3-512.pem +++ b/tests/cert-tests/data/template-rsa-sha3-512.pem @@ -15,11 +15,11 @@ PYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjggE3MIIBMzAPBgNVHRMBAf8EBTADAQH/ MGoGA1UdEQRjMGGCDHd3dy5ub25lLm9yZ4ITd3d3Lm1vcmV0aGFub25lLm9yZ4IX d3d3LmV2ZW5tb3JldGhhbm9uZS5vcmeHBMCoAQGBDW5vbmVAbm9uZS5vcmeBDndo ZXJlQG5vbmUub3JnMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GA1UdDwEB/wQFAwMH -BAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMG8GA1UdHwRoMGYwZKBi +hAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMG8GA1UdHwRoMGYwZKBi oGCGHmh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwxL4YeaHR0cDovL3d3dy5n ZXRjcmwuY3JsL2dldGNybDIvhh5odHRwOi8vd3d3LmdldGNybC5jcmwvZ2V0Y3Js -My8wDQYJYIZIAWUDBAMQBQADgYEADQwUNzbut+lsgGPm1ELQ+yIzKKUDpiGyUmVY -4DHFKVHKAAM4p6eRY4CQhrGcQIAF/cv7BMlMtXwVPCMGmUiws3RpT5IR5PBU3ppM -CB7kDZ93BwHwXOoURU9wlYcUiRKmbN6rZ5YOUBYwYPZhyPcgnZPO8S7+2fbIo07i -TFELtZ0= +My8wDQYJYIZIAWUDBAMQBQADgYEAiBWEi/IhCQ6qpxX7KlClo6Xdwfbn2Zg5iftl +hNV1nZ23hLvG8YhqqKVOU0kk1jhnyjQeJN8Hj9wrEJTNmwhmFie/ftC0amYjFZMv +/iWOqRwTjaSkGSetq0yTaZ05NUEbvL6KdorNuJslts42zmShjNWDIYtpW4o+p7c1 +IfKnPj0= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-sgenerate.pem b/tests/cert-tests/data/template-sgenerate.pem new file mode 100644 index 0000000000..b16915c8fa --- /dev/null +++ b/tests/cert-tests/data/template-sgenerate.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDtDCCAmygAwIBAgIBBzANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDEw5HbnVU +TFMgVGVzdCBDQTAeFw0wNzA0MjIwMDAwMDBaFw0xNDA1MjUwMDAwMDBaMFsxDDAK +BgNVBAMTA05pazEPMA0GA1UECBMGQXR0aWtpMQswCQYDVQQGEwJHUjEaMBgGA1UE +BBMRTWF2cm9naWFubm9wb3Vsb3MxETAPBgNVBAkTCEFya2FkaWFzMIGfMA0GCSqG +SIb3DQEBAQUAA4GNADCBiQKBgQClxs51Q4S/ZJ4CJxPxA1n3eS2S7XwvUKQD8S15 +uYaLBX46u0Sqr4TPE5geHEo49zMtep9y1GttJrAxN3AQ+0Lp2J0YZX4ZSfwFlgRo +gx53hr/t9eUSOxP+MxicGnodaa9HAmB6H7noz9vINDBRlj2MllwAvGHeCA+xNiF/ +qQDjBQIDAQABo4IBFzCCARMwDwYDVR0TAQH/BAUwAwEB/zBqBgNVHREEYzBhggx3 +d3cubm9uZS5vcmeCE3d3dy5tb3JldGhhbm9uZS5vcmeCF3d3dy5ldmVubW9yZXRo +YW5vbmUub3JnhwTAqAEBgQ1ub25lQG5vbmUub3JngQ53aGVyZUBub25lLm9yZzAT +BgNVHSUEDDAKBggrBgEFBQcDCTAPBgNVHQ8BAf8EBQMDB4QAMB0GA1UdDgQWBBRd +QK3wzpRAlYt+mZQdklQiynI2XzAfBgNVHSMEGDAWgBRNVrdqAFjxZ5L0pnVVG45T +AQPvzzAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8vd3d3LmdldGNybC5jcmwvZ2V0 +Y3JsLzANBgkqhkiG9w0BAQsFAAOCATEAddMzLqCJ+KkNgn/mcz19mEh4ZSiJzS14 +d4SLlcImMFJSPRQ6hwjKXB4N5vljr5pr69e9bg9kzuw622xjT+8YNKJH9c4VEcyK +HEemVemeMJAU10d7XVnQAExt9w+siPJlXMpjG2ij/DNmoi8PWUq1qhIskJohYg9C +NVXdViL29z5wMmh91mQI7xt6vw8S4WrmSZrkrkAXK07h5yeqjIQYht2iQjLZF2rO +3d0h3u7RdyV1uG93C3FW0Dthqqon6UdEjuPeYCK/7cWe3BhBGIJ/SRDVYXp3VtlS +Ms66n3bpSxrI1el+2lHfDTJwGgIvLhXz3bmznkqbg482rJkFTuS/DmwiTcErF+rF +E3zPAchY2B+ieRe5944OsQcfhaZDVyUcrC5FtFp0Q/LFmPgy55dR1g== +-----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-test.pem b/tests/cert-tests/data/template-test.pem index 1acd2fe0ae..a9e23b2ea7 100644 --- a/tests/cert-tests/data/template-test.pem +++ b/tests/cert-tests/data/template-test.pem @@ -15,11 +15,11 @@ PYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjggE3MIIBMzAPBgNVHRMBAf8EBTADAQH/ MGoGA1UdEQRjMGGCDHd3dy5ub25lLm9yZ4ITd3d3Lm1vcmV0aGFub25lLm9yZ4IX d3d3LmV2ZW5tb3JldGhhbm9uZS5vcmeHBMCoAQGBDW5vbmVAbm9uZS5vcmeBDndo ZXJlQG5vbmUub3JnMBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8GA1UdDwEB/wQFAwMH -BAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMG8GA1UdHwRoMGYwZKBi +hAAwHQYDVR0OBBYEFF1ArfDOlECVi36ZlB2SVCLKcjZfMG8GA1UdHwRoMGYwZKBi oGCGHmh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwxL4YeaHR0cDovL3d3dy5n ZXRjcmwuY3JsL2dldGNybDIvhh5odHRwOi8vd3d3LmdldGNybC5jcmwvZ2V0Y3Js -My8wDQYJKoZIhvcNAQELBQADgYEANoDHZVtHbnn3dqVR0BEl6OYe8jIpVAP75prg -D1YB1+WutTKvdhs+2BMDty5wpHH5HBTbjBIZ8gvAv9696YSruOKQDPAbd3ideC1g -GLGFgndio377X8IKw9J9pDhyaHUcKbn6GgnerDvnxiAdPboFO9/zBi+0EQN/fndh -wRsuQhk= +My8wDQYJKoZIhvcNAQELBQADgYEAY/wOee5PsT1eZiuE2SOF2y+Qlf7GeRNhqJ2V +KRtS7wdLJXjxL+Tp0TJTyAfGCgxg3cFRbeSGg+gffo9wO4y/cP6hzVeBtYD+RNSK +ATUrYVtniKQulLOeNu/VyCYeLfD+8gQK0s44MIKuzCKUa01QO97slLa0qEG5qqxO +IXPMNFM= -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-tlsfeature.csr b/tests/cert-tests/data/template-tlsfeature.csr index 2db290c3f1..191fac319b 100644 --- a/tests/cert-tests/data/template-tlsfeature.csr +++ b/tests/cert-tests/data/template-tlsfeature.csr @@ -26,12 +26,11 @@ PKCS #10 Certificate Request Information: RFC822Name: none@none.org RFC822Name: where@none.org Basic Constraints (critical): - Certificate Authority (CA): TRUE + Certificate Authority (CA): FALSE Key Purpose (critical): OCSP signing. Key Usage (critical): Digital signature. - Certificate signing. TLS Features (not critical): OCSP Status Request(5) 17 @@ -45,19 +44,19 @@ Other Information: Self signature: verified -----BEGIN NEW CERTIFICATE REQUEST----- -MIICrDCCAhUCAQAwgZoxFTATBgNVBAMTDENpbmR5IExhdXBlcjEXMBUGA1UECxMO +MIICqTCCAhICAQAwgZoxFTATBgNVBAMTDENpbmR5IExhdXBlcjEXMBUGA1UECxMO c2xlZXBpbmcgZGVwdC4xEjAQBgNVBAoTCUtva28gaW5jLjEPMA0GA1UECBMGQXR0 aWtpMQswCQYDVQQGEwJHUjEXMBUGCgmSJomT8ixkAQETB2NsYXVwZXIxDDAKBgNV BAwTA0RyLjEPMA0GA1UEQRMGamFja2FsMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB iQKBgQClxs51Q4S/ZJ4CJxPxA1n3eS2S7XwvUKQD8S15uYaLBX46u0Sqr4TPE5ge HEo49zMtep9y1GttJrAxN3AQ+0Lp2J0YZX4ZSfwFlgRogx53hr/t9eUSOxP+Mxic -Gnodaa9HAmB6H7noz9vINDBRlj2MllwAvGHeCA+xNiF/qQDjBQIDAQABoIHQMIHN -BgkqhkiG9w0BCQ4xgb8wgbwwagYDVR0RBGMwYYIMd3d3Lm5vbmUub3JnghN3d3cu +Gnodaa9HAmB6H7noz9vINDBRlj2MllwAvGHeCA+xNiF/qQDjBQIDAQABoIHNMIHK +BgkqhkiG9w0BCQ4xgbwwgbkwagYDVR0RBGMwYYIMd3d3Lm5vbmUub3JnghN3d3cu bW9yZXRoYW5vbmUub3Jnghd3d3cuZXZlbm1vcmV0aGFub25lLm9yZ4cEwKgBAYEN -bm9uZUBub25lLm9yZ4EOd2hlcmVAbm9uZS5vcmcwDwYDVR0TAQH/BAUwAwEB/zAW -BgNVHSUBAf8EDDAKBggrBgEFBQcDCTAPBgNVHQ8BAf8EBQMDB4QAMBQGCCsGAQUF -BwEYBAgwBgIBBQIBETANBgkqhkiG9w0BAQsFAAOBgQBp5DB6ksTU78tli6cYkxB4 -DRPIGOhL87o4gpsOQNSS61ECYTf2wxGqPA1sM/8syNn0hU1hGVqZG2ydYmR6PxkO -/FfKNmxI5+cRA8oKk6zNhu42tll3NLFbYZV9cp8+JpBQMLBIXxU23UggnsxoVrks -C1I6oDxIq5kDixlWKnaMGA== +bm9uZUBub25lLm9yZ4EOd2hlcmVAbm9uZS5vcmcwDAYDVR0TAQH/BAIwADAWBgNV +HSUBAf8EDDAKBggrBgEFBQcDCTAPBgNVHQ8BAf8EBQMDB4AAMBQGCCsGAQUFBwEY +BAgwBgIBBQIBETANBgkqhkiG9w0BAQsFAAOBgQAIayiRbitKkrg0YAtj/cqij5xx +6ictys5F3XvdsTgTINPpW41TqFJltPFfFJXRCwJI/aitPXH4so+xS6sFYHKHYXnu +DGGwNRE0bmW9+/MhgkMLdLNw22MRiyDK1TM5CWAe9CCX8jzyRnnKXIvpPXv0yLhY +kT9W7Sjw72lPTehtsg== -----END NEW CERTIFICATE REQUEST----- diff --git a/tests/cert-tests/data/template-tlsfeature.pem b/tests/cert-tests/data/template-tlsfeature.pem index 23ba2886a1..a412a42c13 100644 --- a/tests/cert-tests/data/template-tlsfeature.pem +++ b/tests/cert-tests/data/template-tlsfeature.pem @@ -1,5 +1,5 @@ -----BEGIN CERTIFICATE----- -MIIENzCCA6CgAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBuDEVMBMGA1UEAxMMQ2lu +MIIENDCCA52gAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBuDEVMBMGA1UEAxMMQ2lu ZHkgTGF1cGVyMRcwFQYKCZImiZPyLGQBARMHY2xhdXBlcjEXMBUGA1UECxMOc2xl ZXBpbmcgZGVwdC4xEjAQBgNVBAoTCUtva28gaW5jLjEPMA0GA1UECBMGQXR0aWtp MQswCQYDVQQGEwJHUjEMMAoGA1UEDBMDRHIuMQ8wDQYDVQRBEwZqYWNrYWwxHDAa @@ -11,15 +11,15 @@ DBMDRHIuMQ8wDQYDVQRBEwZqYWNrYWwxHDAaBgkqhkiG9w0BCQEWDW5vbmVAbm9u ZS5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKXGznVDhL9kngInE/ED Wfd5LZLtfC9QpAPxLXm5hosFfjq7RKqvhM8TmB4cSjj3My16n3LUa20msDE3cBD7 QunYnRhlfhlJ/AWWBGiDHneGv+315RI7E/4zGJwaeh1pr0cCYHofuejP28g0MFGW -PYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjggFNMIIBSTAUBggrBgEFBQcBGAQIMAYC -AQUCAREwDwYDVR0TAQH/BAUwAwEB/zBqBgNVHREEYzBhggx3d3cubm9uZS5vcmeC -E3d3dy5tb3JldGhhbm9uZS5vcmeCF3d3dy5ldmVubW9yZXRoYW5vbmUub3JnhwTA -qAEBgQ1ub25lQG5vbmUub3JngQ53aGVyZUBub25lLm9yZzATBgNVHSUEDDAKBggr -BgEFBQcDCTAPBgNVHQ8BAf8EBQMDBwQAMB0GA1UdDgQWBBRdQK3wzpRAlYt+mZQd -klQiynI2XzBvBgNVHR8EaDBmMGSgYqBghh5odHRwOi8vd3d3LmdldGNybC5jcmwv -Z2V0Y3JsMS+GHmh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwyL4YeaHR0cDov -L3d3dy5nZXRjcmwuY3JsL2dldGNybDMvMA0GCSqGSIb3DQEBCwUAA4GBAG4dVgPt -cB2JnNlNacL+MnggU4TyYTnpEvBWUnjiZxvsKMAk+XcqeW61hjl0u0wQGWBOsSeS -yLcnXHKApdI0LUkWhkKGqZaUSktd9v5sBzP1IXsXHMRsa1ZPazsSYbQ+EQggOnEP -s6Zw/bt1SYHBdqk8+yBXq54AYT4EK+6Me/pX +PYyWXAC8Yd4ID7E2IX+pAOMFAgMBAAGjggFKMIIBRjAUBggrBgEFBQcBGAQIMAYC +AQUCAREwDAYDVR0TAQH/BAIwADBqBgNVHREEYzBhggx3d3cubm9uZS5vcmeCE3d3 +dy5tb3JldGhhbm9uZS5vcmeCF3d3dy5ldmVubW9yZXRoYW5vbmUub3JnhwTAqAEB +gQ1ub25lQG5vbmUub3JngQ53aGVyZUBub25lLm9yZzATBgNVHSUEDDAKBggrBgEF +BQcDCTAPBgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQWBBRdQK3wzpRAlYt+mZQdklQi +ynI2XzBvBgNVHR8EaDBmMGSgYqBghh5odHRwOi8vd3d3LmdldGNybC5jcmwvZ2V0 +Y3JsMS+GHmh0dHA6Ly93d3cuZ2V0Y3JsLmNybC9nZXRjcmwyL4YeaHR0cDovL3d3 +dy5nZXRjcmwuY3JsL2dldGNybDMvMA0GCSqGSIb3DQEBCwUAA4GBAEoSB3eLhcMA +/pAOs3A9GW23Yi9C1QXNCoTbE/nzxNKLjGVVDMIOW5soLsmX7KXavAG12qJ6ZmXK +3rdgx30vVOqZdELVu+Ht9GxcUf1MRWOTYUhKyD9trJ5BYR2vpaakIM0MoFnpc7d2 +tO6NAkRin8u7kYutdFqTGhAz4gVXWXGF -----END CERTIFICATE----- diff --git a/tests/cert-tests/data/template-unique.pem b/tests/cert-tests/data/template-unique.pem index e08e5b53ec..538c0a28a8 100644 --- a/tests/cert-tests/data/template-unique.pem +++ b/tests/cert-tests/data/template-unique.pem @@ -11,10 +11,10 @@ NDBRlj2MllwAvGHeCA+xNiF/qQDjBQIDAQABgQgAERQjJCUSJIIGAAAVIyQlo4H1 MIHyMA8GA1UdEwEB/wQFMAMBAf8wagYDVR0RBGMwYYIMd3d3Lm5vbmUub3JnghN3 d3cubW9yZXRoYW5vbmUub3Jnghd3d3cuZXZlbm1vcmV0aGFub25lLm9yZ4cEwKgB AYENbm9uZUBub25lLm9yZ4EOd2hlcmVAbm9uZS5vcmcwEwYDVR0lBAwwCgYIKwYB -BQUHAwkwDwYDVR0PAQH/BAUDAwcEADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJU +BQUHAwkwDwYDVR0PAQH/BAUDAweEADAdBgNVHQ4EFgQUXUCt8M6UQJWLfpmUHZJU IspyNl8wLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL3d3dy5nZXRjcmwuY3JsL2dl -dGNybC8wDQYJKoZIhvcNAQELBQADgYEAlJcMko5hA7LLxZWylww49HrmiKCRMjH/ -FMPi5WW54n8YfRQuOD8wvHUl3EcJHCXBu0nlWQJfIfGiPIBTTX7EJCS3KQpX296p -q1xClFdGqXCNOzy0Ld64Qh7qgt5TlvV+uzGgfkzaPqksBhhVLXlUNS2cCSiyi075 -wxR6TEOsjqE= +dGNybC8wDQYJKoZIhvcNAQELBQADgYEAR0YLJcy/QThClfMri0ULVGRRl8YlxGc8 +HSl+TtabcK2Ei3bl0G1yMz02/jaIqi87DWssKL42bmT1qieyOFik3a+jXY377P7G +ssW54WKXQvhpR1b3JZ2RADaj8g9+E9zrUsSlVNaDC33f3DoTzU/tryw25V7U1quj +ALQTc/0hW1k= -----END CERTIFICATE----- diff --git a/tests/key-tests/data/unencpkcs8.pem b/tests/cert-tests/data/unencpkcs8.pem similarity index 100% rename from tests/key-tests/data/unencpkcs8.pem rename to tests/cert-tests/data/unencpkcs8.pem diff --git a/tests/key-tests/dsa b/tests/cert-tests/dsa similarity index 100% rename from tests/key-tests/dsa rename to tests/cert-tests/dsa diff --git a/tests/key-tests/ecdsa b/tests/cert-tests/ecdsa similarity index 100% rename from tests/key-tests/ecdsa rename to tests/cert-tests/ecdsa diff --git a/tests/cert-tests/gost b/tests/cert-tests/gost new file mode 100755 index 0000000000..ff47988a6d --- /dev/null +++ b/tests/cert-tests/gost @@ -0,0 +1,165 @@ +#!/bin/sh + +# Copyright (C) 2016-2017 Free Software Foundation, Inc. +# +# Author: Dmitry Eremin-Solenikov +# +# This file is part of GnuTLS. +# +# The GnuTLS is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public License +# as published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +#set -e + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +TMPFILE=gost.$$.tmp +TMPCA=gost-ca.$$.tmp +TMPCAKEY=gost-ca-key.$$.tmp +TMPSUBCA=gost-subca.$$.tmp +TMPSUBCAKEY=gost-subca-key.$$.tmp +TMPKEY=gost-key.$$.tmp +TMPTEMPL=template.$$.tmp +TMPUSER=user.$$.tmp +VERIFYOUT=verify.$$.tmp + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if test "${GNUTLS_FORCE_FIPS_MODE}" = 1;then + echo "Cannot run in FIPS140-2 mode" + exit 77 +fi + +echo ca > $TMPTEMPL +echo "cn = GOST STREEBOG 256 CA" >> $TMPTEMPL + +"${CERTTOOL}" --generate-privkey --key-type gost12-512 --curve TC26-512-A > $TMPCAKEY 2>/dev/null +#"${CERTTOOL}" --generate-privkey --key-type gost12-256 --curve CryptoPro-XchA > $TMPCAKEY 2>/dev/null + +"${CERTTOOL}" -d 2 --generate-self-signed --template $TMPTEMPL \ + --load-privkey $TMPCAKEY \ + --outfile $TMPCA \ + >$TMPFILE 2>&1 + +if [ $? != 0 ]; then + cat $TMPFILE + exit 1 +fi + +echo ca > $TMPTEMPL +"${CERTTOOL}" --generate-privkey --key-type gost12-256 --curve CryptoPro-A > $TMPSUBCAKEY 2>/dev/null +echo "cn = GOST STREEBOG-256 Mid CA" >> $TMPTEMPL + +"${CERTTOOL}" -d 2 --generate-certificate --template $TMPTEMPL \ + --load-ca-privkey $TMPCAKEY \ + --load-ca-certificate $TMPCA \ + --load-privkey $TMPSUBCAKEY \ + --outfile $TMPSUBCA \ + >$TMPFILE 2>&1 + +if [ $? != 0 ]; then + cat $TMPFILE + exit 1 +fi + +echo "cn = End-user" > $TMPTEMPL + +"${CERTTOOL}" --generate-privkey --key-type gost01 --curve CryptoPro-XchA > $TMPKEY 2>/dev/null + +"${CERTTOOL}" -d 2 --generate-certificate --template $TMPTEMPL \ + --load-ca-privkey $TMPSUBCAKEY \ + --load-ca-certificate $TMPSUBCA \ + --load-privkey $TMPKEY \ + --outfile $TMPUSER >$TMPFILE 2>&1 + +if [ $? != 0 ]; then + cat $TMPFILE + exit 1 +fi + +cat $TMPUSER $TMPSUBCA $TMPCA > $TMPFILE +"${CERTTOOL}" --verify-chain <$TMPFILE > $VERIFYOUT + +if [ $? != 0 ]; then + cat $VERIFYOUT + exit 1 +fi + +echo "cn = End-user" > $TMPTEMPL + +"${CERTTOOL}" --generate-privkey --key-type gost01 --curve TC26-256-B > $TMPKEY 2>/dev/null + +"${CERTTOOL}" -d 2 --generate-certificate --template $TMPTEMPL \ + --load-ca-privkey $TMPSUBCAKEY \ + --load-ca-certificate $TMPSUBCA \ + --load-privkey $TMPKEY \ + --outfile $TMPUSER >$TMPFILE 2>&1 + +if [ $? != 0 ]; then + cat $TMPFILE + exit 1 +fi + +cat $TMPUSER $TMPSUBCA $TMPCA > $TMPFILE +"${CERTTOOL}" --verify-chain <$TMPFILE > $VERIFYOUT + +if [ $? != 0 ]; then + cat $VERIFYOUT + exit 1 +fi + +"${CERTTOOL}" -i < "${srcdir}"/data/grfc.crt --outfile $TMPFILE +if [ $? != 0 ]; then + cat $TMPFILE + exit 1 +fi + +if ! cmp "${srcdir}"/data/grfc.crt $TMPFILE ; then + cat $TMPFILE + exit 1 +fi + +"${CERTTOOL}" -i < "${srcdir}"/data/gost-cert-ca.pem --outfile $TMPFILE +if [ $? != 0 ]; then + cat $TMPFILE + exit 1 +fi + +if ! cmp "${srcdir}"/data/gost-cert-ca.pem $TMPFILE ; then + cat $TMPFILE + exit 1 +fi + +"${CERTTOOL}" -i < "${srcdir}"/data/gost-cert-new.pem --outfile $TMPFILE +if [ $? != 0 ]; then + cat $TMPFILE + exit 1 +fi + +if ! cmp "${srcdir}"/data/gost-cert-new.pem $TMPFILE ; then + cat $TMPFILE + exit 1 +fi + +"${CERTTOOL}" --verify --load-ca-certificate "${srcdir}"/data/gost-cert-ca.pem --infile "${srcdir}"/data/gost-cert-new.pem --outfile $TMPFILE +if [ $? != 0 ]; then + cat $TMPFILE + exit 1 +fi + +rm -f $VERIFYOUT $TMPUSER $TMPCA $TMPSUBCA $TMPTEMPL $TMPFILE +rm -f $TMPSUBCAKEY $TMPCAKEY $TMPKEY + +exit 0 diff --git a/tests/cert-tests/illegal-rsa b/tests/cert-tests/illegal-rsa new file mode 100755 index 0000000000..1b9a162779 --- /dev/null +++ b/tests/cert-tests/illegal-rsa @@ -0,0 +1,81 @@ +#!/bin/sh + +# Copyright (C) 2016 Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +GREP="${GREP:-grep}" + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=1" +fi + +TMPFILE=tmp-key.$$.p8 + +${VALGRIND} "${CERTTOOL}" -k --password 1234 --infile "${srcdir}/data/p8key-illegal.pem" +rc=$? +# We're done. +if test "${rc}" != "1"; then + echo "Error in importing illegal PKCS#8 key" + exit ${rc} +fi + +#check invalid RSA pem key. The key has even prime factor. +${VALGRIND} "${CERTTOOL}" -k --infile "${srcdir}/data/key-illegal.pem" +rc=$? +# We're done. +if test "${rc}" != "1"; then + echo "Error in importing illegal RSA key" + exit ${rc} +fi + +#check invalid RSA pem key. The key has too large salt. +${VALGRIND} "${CERTTOOL}" -k --infile "${srcdir}/data/key-illegal-rsa-pss.pem" +rc=$? +# We're done. +if test "${rc}" != "1"; then + echo "Error in importing illegal RSA-PSS key" + exit ${rc} +fi + +#sanity generation +${VALGRIND} "${CERTTOOL}" --generate-privkey --key-type rsa-pss --hash sha256 --salt-size 64 --bits 2048 >/dev/null +rc=$? +# We're done. +if test "${rc}" != "0"; then + echo "Error in generating an RSA-PSS key" + exit ${rc} +fi + +# generate illegal value +${VALGRIND} "${CERTTOOL}" --generate-privkey --key-type rsa-pss --hash sha256 --salt-size 1024 --bits 2048 >/dev/null +rc=$? +# We're done. +if test "${rc}" != "1"; then + echo "Error: allowed generation of an illegal key" + exit ${rc} +fi + +rm -f $TMPFILE + +exit 0 diff --git a/tests/cert-tests/invalid-sig b/tests/cert-tests/invalid-sig index eaa75c7543..bcebf995cb 100755 --- a/tests/cert-tests/invalid-sig +++ b/tests/cert-tests/invalid-sig @@ -29,6 +29,10 @@ if ! test -z "${VALGRIND}"; then VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" fi +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + #check whether a different PKCS #1 signature than the advertized in certificate is tolerated ${VALGRIND} "${CERTTOOL}" -e --infile "${srcdir}/data/invalid-sig.pem" rc=$? @@ -59,4 +63,34 @@ if test "${rc}" = "0"; then exit ${rc} fi +#check whether different parameters in tbsCertificate than the outer signature is tolerated +${VALGRIND} "${CERTTOOL}" -e --infile "${srcdir}/data/invalid-sig4.pem" +rc=$? + +# We're done. +if test "${rc}" = "0"; then + echo "Verification of invalid signature (4) failed" + exit ${rc} +fi + +#check whether different RSA-PSS parameters in tbsCertificate than the outer signature is tolerated +${VALGRIND} "${CERTTOOL}" --verify-chain --infile "${srcdir}/data/invalid-sig5.pem" +rc=$? + +# We're done. +if test "${rc}" = "0"; then + echo "Verification of invalid signature (5) failed" + exit ${rc} +fi + +#this was causing a double free; verify that we receive the expected error code +${VALGRIND} "${CERTTOOL}" --verify-chain --infile "${srcdir}/data/cve-2019-3829.pem" +rc=$? + +# We're done. +if test "${rc}" != "1"; then + echo "Verification of invalid signature (6) failed" + exit ${rc} +fi + exit 0 diff --git a/tests/key-tests/key-id b/tests/cert-tests/key-id similarity index 100% rename from tests/key-tests/key-id rename to tests/cert-tests/key-id diff --git a/tests/key-tests/key-invalid b/tests/cert-tests/key-invalid similarity index 92% rename from tests/key-tests/key-invalid rename to tests/cert-tests/key-invalid index 874e643a78..eeb94ee976 100755 --- a/tests/key-tests/key-invalid +++ b/tests/cert-tests/key-invalid @@ -35,11 +35,11 @@ if ! test -z "${VALGRIND}"; then fi ret=0 -for p8 in "key-invalid1.der" "key-invalid2.der" "key-invalid3.der";do +for p8 in ${srcdir}/data/key-invalid*.der;do set -- ${p8} file="$1" ${VALGRIND} "${CERTTOOL}" --inder --key-info \ - --infile "${srcdir}/data/${file}" + --infile "${file}" rc=$? if test ${rc} != 1; then echo "FATAL ${p8} - errno ${rc}" diff --git a/tests/cert-tests/krb5-test b/tests/cert-tests/krb5-test index a331acbb4f..3eca7d7e31 100755 --- a/tests/cert-tests/krb5-test +++ b/tests/cert-tests/krb5-test @@ -37,6 +37,7 @@ export TZ="UTC" check_for_datefudge if ! test -z "${VALGRIND}"; then + ORIG_VALGRIND=${VALGRIND} VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=3" fi @@ -59,6 +60,13 @@ if test "${rc}" != "0"; then exit ${rc} fi +# disable all parameters to valgrind, to prevent memleak checking on +# the following tests (negative tests which have leaks in the tools). +if ! test -z "${ORIG_VALGRIND}"; then + VALGRIND=$(echo ${ORIG_VALGRIND}|cut -d ' ' -f 1) + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=3" +fi + # Negative tests. Check against values which may cause problems cp "${srcdir}/templates/template-krb5name.tmpl" ${TMPLFILE} echo "krb5_principal = 'xxxxxxxxxxxxxx'" >>${TMPLFILE} diff --git a/tests/cert-tests/name-constraints b/tests/cert-tests/name-constraints index c28259e25f..f23462117e 100755 --- a/tests/cert-tests/name-constraints +++ b/tests/cert-tests/name-constraints @@ -32,7 +32,7 @@ if ! test -z "${VALGRIND}"; then VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" fi -TMPFILE=tmp.$$.pem +TMPFILE=constraints.$$.pem.tmp . ${srcdir}/../scripts/common.sh diff --git a/tests/cert-tests/openpgp-cert-parser b/tests/cert-tests/openpgp-cert-parser deleted file mode 100755 index cacf3d7f6c..0000000000 --- a/tests/cert-tests/openpgp-cert-parser +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2010, 2012 Free Software Foundation, Inc. -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# GnuTLS is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at -# your option) any later version. -# -# GnuTLS is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -srcdir="${srcdir:-.}" -CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" - -if ! test -z "${VALGRIND}"; then - VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" -fi - -if ! test -x "${CERTTOOL}"; then - exit 77 -fi - -unset RETCODE || true - -fail() { - echo "Failure: $1" >&2 - RETCODE=${RETCODE:-${2:-1}} -} - -echo "Checking OpenPGP certificate parsing" - -for i in "truncated.pub" "attribute-leak-1.pub" "subpkt-leak.pub" "openpgp-invalid1.pub" \ - "openpgp-invalid2.pub" "openpgp-invalid3.pub" "openpgp-invalid4.pub" "openpgp-invalid5.pub" \ - "openpgp-invalid6.pub" "openpgp-invalid7.pub" "openpgp-invalid8.pub" \ - "openpgp-invalid9.pub" "openpgp-invalid10" "openpgp-invalid11";do - ${VALGRIND} "${CERTTOOL}" --inraw --pgp-certificate-info --infile "${srcdir}/data/${i}" - rc=$? - if test $rc != 1;then - fail "$i: Parsing should have errored ($rc)" - fi -done - -exit ${RETCODE:-0} diff --git a/tests/cert-tests/openpgp-certs b/tests/cert-tests/openpgp-certs deleted file mode 100755 index b175b92840..0000000000 --- a/tests/cert-tests/openpgp-certs +++ /dev/null @@ -1,105 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2010-2012 Free Software Foundation, Inc. -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# GnuTLS is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at -# your option) any later version. -# -# GnuTLS is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -srcdir="${srcdir:-.}" -SERV="${SERV:-../../src/gnutls-serv}" -CLI="${CLI:-../../src/gnutls-cli}" -DEBUG="" - -if ! test -x "${SERV}"; then - exit 77 -fi - -if ! test -x "${CLI}"; then - exit 77 -fi - -if ! test -z "${VALGRIND}"; then - VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" -fi - -if test "${WINDIR}" != ""; then - exit 77 -fi - -SERV="${SERV} -q" - -. "${srcdir}/../scripts/common.sh" - -echo "Checking OpenPGP certificate verification" - -eval "${GETPORT}" -launch_server $$ --priority NORMAL:+CTYPE-OPENPGP --pgpcertfile "${srcdir}/data/srv-public-127.0.0.1-signed.gpg" --pgpkeyfile "${srcdir}/data/srv-secret.gpg" -PID=$! -wait_server ${PID} - -# give the server a chance to initialize - -#gnutls currently only considers PGP certificates verified only if -#all user IDs in the certificate were signed. - -#"${CLI}" -p "${PORT}" 127.0.0.1 --pgpkeyring ca-public.gpg /dev/null || \ -# fail "Connection to verified IP address should have succeeded! (error code $?)" $? - -${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.2 --priority NORMAL:+CTYPE-OPENPGP --pgpkeyring "${srcdir}/data/ca-public.gpg" /dev/null 2>&1 && \ - fail ${PID} "Connection to unrecognized IP address should have failed!" - -${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" localhost --priority NORMAL:+CTYPE-OPENPGP --pgpkeyring "${srcdir}/data/ca-public.gpg" /dev/null 2>&1 && \ - fail ${PID} "Connection to unverified (but present) 'localhost' should have failed!" - -kill ${PID} -wait - -eval "${GETPORT}" -launch_server $$ --priority NORMAL:+CTYPE-OPENPGP --pgpcertfile "${srcdir}/data/srv-public-localhost-signed.gpg" --pgpkeyfile "${srcdir}/data/srv-secret.gpg" -PID=$! -wait_server ${PID} - -echo | ${VALGRIND} "${CLI}" ${DEBUG} --priority NORMAL:+CTYPE-OPENPGP -p "${PORT}" 127.0.0.1 --pgpkeyring "${srcdir}/data/ca-public.gpg" /dev/null 2>&1 && \ - fail ${PID} "Connection to unverified IP address should have failed! (error code $?)" $? - -${VALGRIND} "${CLI}" ${DEBUG} --priority NORMAL:+CTYPE-OPENPGP -p "${PORT}" 127.0.0.2 --pgpkeyring "${srcdir}/data/ca-public.gpg" /dev/null 2>&1 && \ - fail ${PID} "Connection to unrecognized IP address should have failed!" - -#see reason above -#"${CLI}" -p "${PORT}" localhost --pgpkeyring ca-public.gpg /dev/null || \ -# fail ${PID} "Connection to verified 'localhost' should have succeded! (error code $?)" $? - -kill ${PID} -wait - -eval "${GETPORT}" -launch_server $$ --priority NORMAL:+CTYPE-OPENPGP --pgpcertfile "${srcdir}/data/srv-public-all-signed.gpg" --pgpkeyfile "${srcdir}/data/srv-secret.gpg" -PID=$! -wait_server ${PID} - -# give the server a chance to initialize -echo | ${VALGRIND} "${CLI}" ${DEBUG} --priority NORMAL:+CTYPE-OPENPGP -p "${PORT}" 127.0.0.1 --pgpkeyring "${srcdir}/data/ca-public.gpg" /dev/null 2>&1 || \ - fail ${PID} "Connection to signed PGP certificate should have succeeded! (error code $?)" $? - -${VALGRIND} "${CLI}" ${DEBUG} --priority NORMAL:+CTYPE-OPENPGP -p "${PORT}" 127.0.0.2 --pgpkeyring "${srcdir}/data/ca-public.gpg" /dev/null 2>&1 && \ - fail ${PID} "Connection to unrecognized IP address should have failed!" - -kill ${PID} -wait - -exit 0 diff --git a/tests/cert-tests/openpgp-selfsigs b/tests/cert-tests/openpgp-selfsigs deleted file mode 100755 index 1e7c50d09f..0000000000 --- a/tests/cert-tests/openpgp-selfsigs +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2010, 2012 Free Software Foundation, Inc. -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# GnuTLS is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at -# your option) any later version. -# -# GnuTLS is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -set -e - -srcdir="${srcdir:-.}" -CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" - -if ! test -x "${CERTTOOL}"; then - exit 77 -fi - -unset RETCODE || true - -fail() { - echo "Failure: $1" >&2 - RETCODE=${RETCODE:-${2:-1}} -} - -echo "Checking OpenPGP certificate self verification" - -("${CERTTOOL}" --inraw --pgp-certificate-info --infile "${srcdir}/data/selfsigs/alice.pub" \ - | grep "^Self Signature verification: ok" > /dev/null) || \ - fail "Self sig Verification should have succeeded!" - -("${CERTTOOL}" --inraw --pgp-certificate-info --infile "${srcdir}/data/selfsigs/alice-mallory-badsig18.pub" \ - | grep "^Self Signature verification: failed" > /dev/null) || \ - fail "Self sig Verification should have failed!" - -("${CERTTOOL}" --inraw --pgp-certificate-info --infile "${srcdir}/data/selfsigs/alice-mallory-irrelevantsig.pub" \ - | grep "^Self Signature verification: failed" >/dev/null) || \ - fail "Self sig Verification should have failed!" - -("${CERTTOOL}" --inraw --pgp-certificate-info --infile "${srcdir}/data/selfsigs/alice-mallory-nosig18.pub" \ - | grep "^Self Signature verification: failed" >/dev/null) || \ - fail "Self sig Verification should have failed!" - -exit ${RETCODE:-0} diff --git a/tests/cert-tests/pem-decoding b/tests/cert-tests/pem-decoding index a31f412b48..267a1fc7f3 100755 --- a/tests/cert-tests/pem-decoding +++ b/tests/cert-tests/pem-decoding @@ -24,7 +24,6 @@ srcdir="${srcdir:-.}" CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" -DIFF="${DIFF:-diff -b -B}" if ! test -x "${CERTTOOL}"; then exit 77 @@ -34,6 +33,8 @@ if ! test -z "${VALGRIND}"; then VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" fi +. "${srcdir}/../scripts/common.sh" + TMPFILE=tmp-$$.pem.tmp TMPFILE1=tmp1-$$.pem.tmp TMPFILE2=tmp2-$$.pem.tmp @@ -57,8 +58,7 @@ if test "${rc}" != "0"; then exit ${rc} fi -#FIXME: the output string differs in windows and linux on the last char. -${DIFF} -I 'Algorithm Security Level' "${srcdir}/data/bmpstring.pem" ${TMPFILE} || ${DIFF} -I 'Algorithm Security Level' --strip-trailing-cr "${srcdir}/data/bmpstring.pem" ${TMPFILE} +check_if_equal "${srcdir}/data/bmpstring.pem" ${TMPFILE} "Algorithm Security Level" rc=$? if test "${rc}" != "0"; then @@ -75,9 +75,7 @@ if test "${rc}" != "0"; then exit ${rc} fi -cat "${srcdir}/data/complex-cert.pem" |grep -v "Not After:" >${TMPFILE1} -cat ${TMPFILE} |grep -v "Not After:" >${TMPFILE2} -${DIFF} -I 'Algorithm Security Level' ${TMPFILE1} ${TMPFILE2} || ${DIFF} -I 'Algorithm Security Level' --strip-trailing-cr ${TMPFILE1} ${TMPFILE2} +check_if_equal "${srcdir}/data/complex-cert.pem" ${TMPFILE} "Not After:|Algorithm Security Level" rc=$? if test "${rc}" != "0"; then @@ -94,9 +92,7 @@ if test "${rc}" != "0"; then exit ${rc} fi -cat "${srcdir}/data/xmpp-othername.pem" |grep -v "Not After:" >${TMPFILE1} -cat ${TMPFILE} |grep -v "Not After:" >${TMPFILE2} -${DIFF} -I ^warning -I 'Algorithm Security Level' ${TMPFILE1} ${TMPFILE2} || ${DIFF} -I 'Algorithm Security Level' --strip-trailing-cr ${TMPFILE1} ${TMPFILE2} +check_if_equal "${srcdir}/data/xmpp-othername.pem" ${TMPFILE} "^warning|Not After:|Algorithm Security Level" rc=$? if test "${rc}" != "0"; then @@ -112,9 +108,9 @@ if test "${rc}" != "0"; then exit ${rc} fi -cat ${TMPFILE} |grep "KRB5Principal:" >${TMPFILE1} -cat "${srcdir}/data/template-krb5name-full.pem" |grep "KRB5Principal:" >${TMPFILE2} -${DIFF} -I 'Algorithm Security Level' -u ${TMPFILE1} ${TMPFILE2} || ${DIFF} -I 'Algorithm Security Level' -u --strip-trailing-cr ${TMPFILE1} ${TMPFILE2} +grep "KRB5Principal:" ${TMPFILE} >${TMPFILE1} +grep "KRB5Principal:" "${srcdir}/data/template-krb5name-full.pem" >${TMPFILE2} +check_if_equal ${TMPFILE1} ${TMPFILE2} rc=$? if test "${rc}" != "0"; then @@ -124,7 +120,13 @@ fi #check whether the cert with GOST parameters is decoded as expected -${VALGRIND} "${CERTTOOL}" --certificate-info --infile "${srcdir}/data/gost-cert.pem" >${TMPFILE} +if test "${ENABLE_GOST}" = "1"; then + GOSTCERT="${srcdir}/data/gost-cert.pem" +else + GOSTCERT="${srcdir}/data/gost-cert-nogost.pem" +fi + +${VALGRIND} "${CERTTOOL}" --certificate-info --infile "${GOSTCERT}" >${TMPFILE} rc=$? if test "${rc}" != "0"; then @@ -132,7 +134,7 @@ if test "${rc}" != "0"; then exit ${rc} fi -${DIFF} -I 'Algorithm Security Level' ${TMPFILE} "${srcdir}/data/gost-cert.pem" || ${DIFF} -I 'Algorithm Security Level' --strip-trailing-cr "${TMPFILE}" "${srcdir}/data/gost-cert.pem" +check_if_equal ${TMPFILE} "${GOSTCERT}" rc=$? if test "${rc}" != "0"; then @@ -140,6 +142,23 @@ if test "${rc}" != "0"; then exit ${rc} fi +#check whether the cert with GOST 31.10/11-94 parameters is decoded as expected +${VALGRIND} "${CERTTOOL}" --certificate-info --infile "${srcdir}/data/gost94-cert.pem" >${TMPFILE} +rc=$? + +if test "${rc}" != "0"; then + echo "GOST94 cert decoding failed 1" + exit ${rc} +fi + +check_if_equal ${TMPFILE} "${srcdir}/data/gost94-cert.pem" "Algorithm Security Level" +rc=$? + +if test "${rc}" != "0"; then + echo "GOST94 cert decoding failed 2" + exit ${rc} +fi + ${VALGRIND} "${CERTTOOL}" --certificate-info --infile "${srcdir}/data/multi-value-dn.pem" >${TMPFILE} rc=$? @@ -148,7 +167,8 @@ if test "${rc}" != "0"; then exit ${rc} fi -${DIFF} -I 'Algorithm Security Level' ${TMPFILE} "${srcdir}/data/multi-value-dn.pem" || ${DIFF} -I 'Algorithm Security Level' --strip-trailing-cr "${TMPFILE}" "${srcdir}/data/multi-value-dn.pem" +# Needed for FIPS140 mode +check_if_equal "${srcdir}/data/multi-value-dn.pem" ${TMPFILE} "Algorithm Security Level:" rc=$? if test "${rc}" != "0"; then @@ -156,6 +176,48 @@ if test "${rc}" != "0"; then exit ${rc} fi +#check if --no-text works as expected +${VALGRIND} "${CERTTOOL}" --certificate-info --infile "${srcdir}/data/cert-ecc256.pem" --no-text --outfile ${TMPFILE} +rc=$? + +if test "${rc}" != "0"; then + echo "--no-text -k --certificate-info failed 1" + exit ${rc} +fi + +if grep -v '^-----BEGIN [A-Z0-9 ]\+-----$' ${TMPFILE} | grep -v '^[A-Za-z0-9/+=]\+$' | grep -v '^-----END [A-Z0-9 ]\+-----$' ; then + echo "--no-text -k --certificate-info failed 2" + exit 1 +fi + +#check if --no-text works as expected +${VALGRIND} "${CERTTOOL}" --certificate-pubkey --infile "${srcdir}/data/cert-ecc256.pem" --no-text --outfile ${TMPFILE} +rc=$? + +if test "${rc}" != "0"; then + echo "--no-text cert pubkey failed 1" + exit ${rc} +fi + +if grep -v '^-----BEGIN [A-Z0-9 ]\+-----$' ${TMPFILE} | grep -v '^[A-Za-z0-9/+=]\+$' | grep -v '^-----END [A-Z0-9 ]\+-----$' ; then + echo "--no-text cert pubkey failed 2" + exit 1 +fi + +#check if --no-text works as expected +${VALGRIND} "${CERTTOOL}" --pubkey-info --infile "${srcdir}/data/cert-ecc256.pem" --no-text --outfile ${TMPFILE} +rc=$? + +if test "${rc}" != "0"; then + echo "--no-text pubkey info failed 1" + exit ${rc} +fi + +if grep -v '^-----BEGIN [A-Z0-9 ]\+-----$' ${TMPFILE} | grep -v '^[A-Za-z0-9/+=]\+$' | grep -v '^-----END [A-Z0-9 ]\+-----$' ; then + echo "--no-text pubkey info failed 2" + exit 1 +fi + rm -f ${TMPFILE} ${TMPFILE1} ${TMPFILE2} exit 0 diff --git a/tests/cert-tests/pkcs1-pad b/tests/cert-tests/pkcs1-pad index 7c0723ee64..33663a6a0b 100755 --- a/tests/cert-tests/pkcs1-pad +++ b/tests/cert-tests/pkcs1-pad @@ -32,12 +32,9 @@ fi export TZ="UTC" -# Check for datefudge -TSTAMP=`datefudge "2006-09-23" date -u +%s || true` -if test "${TSTAMP}" != "1158969600"; then - echo "You need datefudge to run this test" - exit 77 -fi +. ${srcdir}/../scripts/common.sh + +check_for_datefudge TMPFILE1=pkcs1-pad.$$.tmp TMPFILE2=pkcs1-pad-2.$$.tmp @@ -92,14 +89,12 @@ echo "PKCS1-PAD2 OK" # by Andrei Pyshkin, Erik Tews and Ralf-Philipp Weinmann. -EXPECT3=03 - datefudge "2006-09-23" "${CERTTOOL}" --verify-chain --infile "${srcdir}/data/pkcs1-pad-broken3.pem" | tee $TMPFILE1 >/dev/null 2>&1 out1oks=`grep 'Verified.' $TMPFILE1 | wc -l | tr -d " "` out1fails=`grep 'Not verified.' $TMPFILE1 | wc -l | tr -d " "` -if test "${out1oks}${out1fails}" != "${EXPECT3}"; then +if test ${out1fails} -lt 2 || test ${out1oks} != 0;then echo "$TMPFILE1 oks ${out1oks} fails ${out1fails}" echo "expected ${EXPECT3}" echo "PKCS1-PAD3 FAIL" diff --git a/tests/cert-tests/pkcs12 b/tests/cert-tests/pkcs12 index 12049c8fd0..f28230a7b2 100755 --- a/tests/cert-tests/pkcs12 +++ b/tests/cert-tests/pkcs12 @@ -80,6 +80,19 @@ if test ${rc} != 0; then exit 1 fi +${VALGRIND} "${CERTTOOL}" --p12-info --inder --password 1234 --infile "$srcdir/data/sha256.p12" --outfile "${TMPFILE}" --no-text +rc=$? + +if test "${rc}" != "0"; then + echo "--no-text pkcs12 info failed 1" + exit ${rc} +fi + +if grep -v '^-----BEGIN [A-Z0-9 ]\+-----$' ${TMPFILE} | grep -v '^[A-Za-z0-9/+=]\+$' | grep -v '^-----END [A-Z0-9 ]\+-----$' ; then + echo "--no-text pkcs12 info failed 2" + exit 1 +fi + # test whether we can encode a certificate and a key ${VALGRIND} "${CERTTOOL}" --to-p12 --password 1234 --p12-name "my-key" --load-certificate "${srcdir}/../certs/cert-ecc256.pem" --load-privkey "${srcdir}/../certs/ecc256.pem" --outder --outfile $TMPFILE >/dev/null rc=$? diff --git a/tests/cert-tests/pkcs12-corner-cases b/tests/cert-tests/pkcs12-corner-cases index 5a0e615b3b..0b9c482db7 100755 --- a/tests/cert-tests/pkcs12-corner-cases +++ b/tests/cert-tests/pkcs12-corner-cases @@ -38,7 +38,8 @@ if ! test -z "${VALGRIND}"; then VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=6" fi -DIFF="${DIFF:-diff}" +. "${srcdir}/../scripts/common.sh" + TMPFILE="pkcs12-corner.$$.tmp" # Cases from oss-fuzz @@ -79,7 +80,7 @@ for p12 in "key-corpus-rc2-1.p12";do set -- ${p12} file="$1" "${CERTTOOL}" --p12-info --inder --password "${cpassword}" \ - --infile "${srcdir}/data/${file}" >${TMPFILE} 2>/dev/null + --infile "${srcdir}/data/${file}" | tr -d '\r' >${TMPFILE} 2>/dev/null rc=$? if test ${rc} != 0 && test ${rc} != 1; then cat ${TMPFILE} @@ -87,7 +88,7 @@ for p12 in "key-corpus-rc2-1.p12";do exit 1 fi - ${DIFF} --strip-trailing-cr ${TMPFILE} "${srcdir}/data/${file}.out" + check_if_equal ${TMPFILE} "${srcdir}/data/${file}.out" rc=$? if test ${rc} != 0;then echo "Output differs in ${file}.out ${TMPFILE}" diff --git a/tests/cert-tests/pkcs12-gost b/tests/cert-tests/pkcs12-gost new file mode 100755 index 0000000000..f7c4bba52b --- /dev/null +++ b/tests/cert-tests/pkcs12-gost @@ -0,0 +1,105 @@ +#!/bin/sh + +# Copyright (C) 2018 Dmitry Eremin-Solenikov +# Copyright (C) 2016 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# This test cannot run under windows because it passes UTF8 data on command +# line. This seems not to work under windows. + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if test "${GNUTLS_FORCE_FIPS_MODE}" = 1;then + echo "Cannot run in FIPS140-2 mode" + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=1" +fi + +DIFF="${DIFF:-diff}" +DEBUG="" + +TMPFILE=pkcs12-gost.$$.tmp +TMPFILE_PEM=pkcs12-gost.$$.tmp.pem + +echo "Testing decoding of known keys" +echo "==============================" + +ret=0 +for p12 in "gost01.p12 Пароль%20для%20PFX" "gost12.p12 Пароль%20для%20PFX" "gost12-2.p12 Пароль%20для%20PFX" ; do + set -- ${p12} + file="$1" + passwd=$(echo $2|sed 's/%20/ /g') + + if test "x$DEBUG" != "x"; then + ${VALGRIND} "${CERTTOOL}" -d 99 --p12-info --inder --password "${passwd}" \ + --infile "${srcdir}/data/${file}" + else + ${VALGRIND} "${CERTTOOL}" --p12-info --inder --password "${passwd}" \ + --infile "${srcdir}/data/${file}" >/dev/null + fi + rc=$? + if test ${rc} != 0; then + echo "PKCS12 FATAL ${p12}" + exit 1 + fi +done + + +echo "" +echo "Testing encoding/decoding" +echo "=========================" + +${VALGRIND} "${CERTTOOL}" --pkcs-cipher=gost28147-tc26z --hash streebog-256 --to-p12 --password "Пароль для PFX" --p12-name "my-key" --load-certificate "${srcdir}/../certs/cert-ecc256.pem" --load-privkey "${srcdir}/../certs/ecc256.pem" --load-ca-certificate "${srcdir}/../certs/ca-cert-ecc.pem" --outder --outfile $TMPFILE >/dev/null +rc=$? +if test ${rc} != 0; then + echo "PKCS12 FATAL encoding" + exit 1 +fi + +${VALGRIND} "${CERTTOOL}" --p12-info --inder --password "Пароль для PFX" --infile $TMPFILE >${TMPFILE_PEM} 2>/dev/null +rc=$? +if test ${rc} != 0; then + echo "PKCS12 FATAL decrypting/decoding" + exit 1 +fi + +${VALGRIND} "${CERTTOOL}" --pkcs-cipher=gost28147-tc26z --hash streebog-512 --to-p12 --password "Пароль для PFX" --p12-name "my-key" --load-certificate "${srcdir}/../certs/cert-ecc256.pem" --load-privkey "${srcdir}/../certs/ecc256.pem" --load-ca-certificate "${srcdir}/../certs/ca-cert-ecc.pem" --outder --outfile $TMPFILE >/dev/null +rc=$? +if test ${rc} != 0; then + echo "PKCS12 FATAL encoding" + exit 1 +fi + +${VALGRIND} "${CERTTOOL}" --p12-info --inder --password "Пароль для PFX" --infile $TMPFILE >${TMPFILE_PEM} 2>/dev/null +rc=$? +if test ${rc} != 0; then + echo "PKCS12 FATAL decrypting/decoding" + exit 1 +fi + +rm -f "$TMPFILE" "$TMPFILE_PEM" + +exit 0 diff --git a/tests/cert-tests/pkcs12-utf8 b/tests/cert-tests/pkcs12-utf8 index 1d70e95656..ace10ca181 100755 --- a/tests/cert-tests/pkcs12-utf8 +++ b/tests/cert-tests/pkcs12-utf8 @@ -22,7 +22,8 @@ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # This test cannot run under windows because it passes UTF8 data on command -# line. This seems not to work under windows. +# line. This seems not to work under windows. It intentionally depends on +# bash as few other shells cannot handle utf8 strings srcdir="${srcdir:-.}" CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" diff --git a/tests/cert-tests/pkcs7 b/tests/cert-tests/pkcs7 index 8267d2e33d..35d438107e 100755 --- a/tests/cert-tests/pkcs7 +++ b/tests/cert-tests/pkcs7 @@ -34,12 +34,20 @@ fi OUTFILE=out-pkcs7.$$.tmp OUTFILE2=out2-pkcs7.$$.tmp +TMPFILE=tmp-pkcs7.$$.tmp . ${srcdir}/../scripts/common.sh check_for_datefudge -for FILE in single-ca.p7b full.p7b openssl.p7b openssl-keyid.p7b; do +if test "${ENABLE_GOST}" = "1" && test "${GNUTLS_FORCE_FIPS_MODE}" != "1" +then + GOST_P7B="rfc4490.p7b" +else + GOST_P7B="" +fi + +for FILE in single-ca.p7b full.p7b openssl.p7b openssl-keyid.p7b $GOST_P7B; do ${VALGRIND} "${CERTTOOL}" --inder --p7-info --infile "${srcdir}/data/${FILE}"|grep -v "Signing time" >"${OUTFILE}" rc=$? @@ -56,6 +64,19 @@ if test "$?" != "0"; then fi done +${VALGRIND} "${CERTTOOL}" --inder --p7-info --infile "${srcdir}/data/full.p7b" --outfile "${TMPFILE}" --no-text +rc=$? + +if test "${rc}" != "0"; then + echo "--no-text pkcs7 info failed 1" + exit ${rc} +fi + +if grep -v '^-----BEGIN [A-Z0-9 ]\+-----$' ${TMPFILE} | grep -v '^[A-Za-z0-9/+=]\+$' | grep -v '^-----END [A-Z0-9 ]\+-----$' ; then + echo "--no-text pkcs7 info failed 2" + exit 1 +fi + # check signatures for FILE in full.p7b openssl.p7b openssl-keyid.p7b; do @@ -142,7 +163,11 @@ fi # Test cert combination FILE="p7-combined" -cat "${srcdir}/../certs"/cert*.pem >"${OUTFILE2}" + +rm -f "${OUTFILE2}" +for i in cert-ecc256.pem cert-ecc521.pem cert-ecc384.pem cert-ecc.pem cert-rsa-2432.pem;do + cat "${srcdir}/../certs"/$i >>"${OUTFILE2}" +done ${VALGRIND} "${CERTTOOL}" --p7-generate --load-certificate "${OUTFILE2}" >"${OUTFILE}" rc=$? @@ -240,7 +265,7 @@ if test "${rc}" != "0"; then fi ${VALGRIND} "${CERTTOOL}" --p7-info --infile "${OUTFILE}" >"${OUTFILE2}" -grep '1.2.840.113549.1.9.3: 06092a864886f70d010701' ${OUTFILE2} >/dev/null 2>&1 +grep 'contentType: 06092a864886f70d010701' ${OUTFILE2} >/dev/null 2>&1 if test $? != 0;then echo "Content-Type was not set in attributes" exit 1 @@ -261,7 +286,58 @@ if test "${rc}" != "0"; then exit ${rc} fi +FILE="rsa-pss-signing" +${VALGRIND} "${CERTTOOL}" --p7-sign --load-privkey "${srcdir}/../../doc/credentials/x509/key-rsa-pss.pem" --load-certificate "${srcdir}/../../doc/credentials/x509/cert-rsa-pss.pem" --infile "${srcdir}/data/pkcs7-detached.txt" >"${OUTFILE}" +rc=$? + +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 struct signing failed" + exit ${rc} +fi + +FILE="rsa-pss-signing-verify" +${VALGRIND} "${CERTTOOL}" --p7-verify --load-certificate "${srcdir}/../../doc/credentials/x509/cert-rsa-pss.pem" <"${OUTFILE}" +rc=$? + +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 struct signing failed verification" + exit ${rc} +fi + +# Test BER encoding, see RFC 4134 Section 4.5 +# SHA1 signature, so --verify-allow-broken +FILE="rfc4134-4.5" +${VALGRIND} "${CERTTOOL}" --p7-verify --verify-allow-broken --load-ca-certificate "${srcdir}/data/rfc4134-ca-rsa.pem" --infile "${srcdir}/data/rfc4134-4.5.p7b" --inder +rc=$? + +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 BER parsing/decoding failed" + exit ${rc} +fi + +if test "x$ENABLE_GOST" = "x1" && test "x${GNUTLS_FORCE_FIPS_MODE}" != "x1" +then + FILE="gost01-signing" + ${VALGRIND} "${CERTTOOL}" --p7-sign --load-privkey "${srcdir}/../../doc/credentials/x509/key-gost01.pem" --load-certificate "${srcdir}/../../doc/credentials/x509/cert-gost01.pem" --infile "${srcdir}/data/pkcs7-detached.txt" >"${OUTFILE}" + rc=$? + + if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 struct signing failed" + exit ${rc} + fi + + FILE="gost01-signing-verify" + ${VALGRIND} "${CERTTOOL}" --p7-verify --load-certificate "${srcdir}/../../doc/credentials/x509/cert-gost01.pem" <"${OUTFILE}" + rc=$? + + if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 struct signing failed verification" + exit ${rc} + fi +fi + rm -f "${OUTFILE}" rm -f "${OUTFILE2}" +rm -f "${TMPFILE}" exit 0 diff --git a/tests/cert-tests/pkcs7-eddsa b/tests/cert-tests/pkcs7-eddsa new file mode 100755 index 0000000000..1fd767bd73 --- /dev/null +++ b/tests/cert-tests/pkcs7-eddsa @@ -0,0 +1,124 @@ +#!/bin/sh + +# Copyright (C) 2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +#set -e + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +DIFF="${DIFF:-diff -b -B}" + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + +OUTFILE=out-pkcs7.$$.tmp +OUTFILE2=out2-pkcs7.$$.tmp + +. ${srcdir}/../scripts/common.sh + +check_for_datefudge + +KEY="${srcdir}/../certs/ed25519.pem" +CERT="${srcdir}/../certs/cert-ed25519.pem" + +# Test verification of saved file +FILE="${srcdir}/data/pkcs7-eddsa-sig.p7s" +${VALGRIND} "${CERTTOOL}" --inder --p7-verify --load-certificate "${CERT}" --infile "${FILE}" +rc=$? + +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 struct verification failed" + exit ${rc} +fi + +# Test signing +FILE="signing" +${VALGRIND} "${CERTTOOL}" --p7-sign --load-privkey "${KEY}" --load-certificate "${CERT}" --infile "${srcdir}/data/pkcs7-detached.txt" >"${OUTFILE}" +rc=$? + +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 struct signing failed" + exit ${rc} +fi + +FILE="signing-verify" +${VALGRIND} "${CERTTOOL}" --p7-verify --load-certificate "${CERT}" <"${OUTFILE}" +rc=$? + +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 struct signing failed verification" + exit ${rc} +fi + +#check extraction of embedded data in signature +FILE="signing-verify-data" +${VALGRIND} "${CERTTOOL}" --p7-verify --p7-show-data --load-certificate "${CERT}" --outfile "${OUTFILE2}" <"${OUTFILE}" +rc=$? + +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 struct signing failed verification with data" + exit ${rc} +fi + +cmp "${OUTFILE2}" "${srcdir}/data/pkcs7-detached.txt" +rc=$? +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 data detaching failed" + exit ${rc} +fi + +FILE="signing-time" +${VALGRIND} "${CERTTOOL}" --p7-detached-sign --p7-time --load-privkey "${KEY}" --load-certificate "${CERT}" --infile "${srcdir}/data/pkcs7-detached.txt" >"${OUTFILE}" +rc=$? + +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 struct signing with time failed" + exit ${rc} +fi + +${VALGRIND} "${CERTTOOL}" --p7-info --infile "${OUTFILE}" >"${OUTFILE2}" +grep 'contentType: 06092a864886f70d010701' ${OUTFILE2} >/dev/null 2>&1 +if test $? != 0;then + echo "Content-Type was not set in attributes" + exit 1 +fi + +${VALGRIND} "${CERTTOOL}" --p7-info <"${OUTFILE}"|grep "Signing time:" "${OUTFILE}" >/dev/null 2>&1 +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 struct signing with time failed. No time was found." + exit ${rc} +fi + +FILE="signing-time-verify" +${VALGRIND} "${CERTTOOL}" --p7-verify --load-certificate "${CERT}" --load-data "${srcdir}/data/pkcs7-detached.txt" <"${OUTFILE}" +rc=$? + +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 struct signing with time failed verification" + exit ${rc} +fi + +rm -f "${OUTFILE}" +rm -f "${OUTFILE2}" + +exit 0 diff --git a/tests/key-tests/pkcs8 b/tests/cert-tests/pkcs8 similarity index 100% rename from tests/key-tests/pkcs8 rename to tests/cert-tests/pkcs8 diff --git a/tests/key-tests/pkcs8-decode b/tests/cert-tests/pkcs8-decode similarity index 100% rename from tests/key-tests/pkcs8-decode rename to tests/cert-tests/pkcs8-decode diff --git a/tests/cert-tests/pkcs8-eddsa b/tests/cert-tests/pkcs8-eddsa new file mode 100755 index 0000000000..7474078ff6 --- /dev/null +++ b/tests/cert-tests/pkcs8-eddsa @@ -0,0 +1,64 @@ +#!/bin/sh + +# Copyright (C) 2004-2006, 2010, 2012 Free Software Foundation, Inc. +# +# Author: Simon Josefsson +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +DIFF="${DIFF:-diff -b -B}" +TMPFILE=pkcs8-eddsa.$$.tmp + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if test "${GNUTLS_FORCE_FIPS_MODE}" = 1;then + echo "Cannot run in FIPS140-2 mode" + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +for p8 in "pkcs8-eddsa.pem"; do + set -- ${p8} + file="$1" + ${VALGRIND} "${CERTTOOL}" --key-info --pkcs8 --password "" \ + --infile "${srcdir}/data/${file}" --outfile $TMPFILE + rc=$? + if test ${rc} != 0; then + echo "PKCS8 FATAL ${p8}" + exit 1 + fi + + echo "" + ${DIFF} -u "${srcdir}/data/${p8}.txt" $TMPFILE + rc=$? + if test ${rc} != 0; then + cat $TMPFILE + echo "PKCS8 FATAL TXT ${p8}" + exit 1 + fi +done +rm -f $TMPFILE + +echo "PKCS8 DONE" +exit 0 diff --git a/tests/cert-tests/pkcs8-gost b/tests/cert-tests/pkcs8-gost new file mode 100755 index 0000000000..325b47a581 --- /dev/null +++ b/tests/cert-tests/pkcs8-gost @@ -0,0 +1,70 @@ +#!/bin/sh + +# Copyright (C) 2018 Dmitry Eremin-Solenikov +# Copyright (C) 2004-2006, 2010, 2012 Free Software Foundation, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +DIFF="${DIFF:-diff -b -B}" +TMPFILE=pkcs8-gost-decode.$$.tmp + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if test "${GNUTLS_FORCE_FIPS_MODE}" = 1;then + echo "Cannot run in FIPS140-2 mode" + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +ret=0 +# key-gost12-512.p8 is not supported for now: it uses curve TC26-512-B +for p8 in "key-gost01.p8" "key-gost12-256.p8" "key-gost01-2.p8" "key-gost12-256-2.p8" "key-gost01-2-enc.p8 Пароль%20для%20PFX" "key-gost12-256-2-enc.p8 Пароль%20для%20PFX"; do + set -- ${p8} + file="$1" + passwd=$(echo $2|sed 's/%20/ /g') + ${VALGRIND} "${CERTTOOL}" --key-info --pkcs8 --password "${passwd}" \ + --infile "${srcdir}/data/${file}" --outfile $TMPFILE \ + --pkcs-cipher none + rc=$? + if test ${rc} != 0; then + echo "PKCS8 FATAL ${p8}" + ret=1 + continue + fi + + ${DIFF} "${srcdir}/data/${1}.txt" $TMPFILE + rc=$? + if test ${rc} != 0; then + cat $TMPFILE + echo "PKCS8 FATAL TXT ${p8}" + ret=1 + else + echo "PKCS8 OK ${p8}" + fi +done + +rm -f $TMPFILE + +echo "PKCS8 DONE (rc $ret)" +exit $ret diff --git a/tests/key-tests/pkcs8-invalid b/tests/cert-tests/pkcs8-invalid similarity index 100% rename from tests/key-tests/pkcs8-invalid rename to tests/cert-tests/pkcs8-invalid diff --git a/tests/cert-tests/privkey-import b/tests/cert-tests/privkey-import index 6eaa237836..73bacae253 100755 --- a/tests/cert-tests/privkey-import +++ b/tests/cert-tests/privkey-import @@ -23,6 +23,7 @@ srcdir="${srcdir:-.}" CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" DIFF="${DIFF:-diff}" +TMPFILE=tmp-$$.privkey.tmp if ! test -x "${CERTTOOL}"; then exit 77 @@ -43,4 +44,19 @@ if test "${rc}" != "0";then fi done +${VALGRIND} "${CERTTOOL}" -k --infile "${srcdir}/data/privkey1.pem" --no-text --outfile ${TMPFILE} +rc=$? + +if test "${rc}" != "0"; then + echo "--no-text privkey info failed 1" + exit ${rc} +fi + +if grep -v '^-----BEGIN [A-Z0-9 ]\+-----$' ${TMPFILE} | grep -v '^[A-Za-z0-9/+=]\+$' | grep -v '^-----END [A-Z0-9 ]\+-----$' ; then + echo "--no-text privkey info failed 2" + exit 1 +fi + +rm -f ${TMPFILE} + exit 0 diff --git a/tests/cert-tests/provable-privkey b/tests/cert-tests/provable-privkey index 3f94f9ee24..51d4389eb7 100755 --- a/tests/cert-tests/provable-privkey +++ b/tests/cert-tests/provable-privkey @@ -46,7 +46,7 @@ if test "${FIPS140}" = 1;then SEED="30:EC:33:4F:97:DB:C0:BA:9C:86:52:A7:B5:D3:F7:B2:DB:BB:48:A4:84:2E:19:0D:21:0E:01:DA:BD:53:59:81:50:37:55:EE:96:A2:70:A5:98:E9:D9:1B:22:54:66:91:69:EB:DF:45:99:D9:F7:2A:CA" DSAFILE=provable-dsa2048-fips.pem else -SEED="5A:0E:A0:41:77:9B:0A:B7:65:BE:25:09:C4:DE:90:E5:A0:E7:DA:AD:AE:6E:49:D3:59:38:F9:13:33:A8:E1:FE:50:9D:D2:DF:E1:96:7C:D0:04:54:28:10:34:97:D0:03:88:C8:CE:36:29:0F:E9:37:9F:80:03:CB:F8:FD:A4:DA:27" +SEED="84:31:21:BD:89:53:5E:E8:69:46:D5:8D:24:6D:47:A5:8D:15:76:A8:35:1B:42:23:E1:CF:F3:69:A1:26:6D:2B:24:B0:72:9D:7C:A5:67:87:FD:E2:E3:DE:19:B9:F2:E7:21:AC:69:8A:29:61:77:32:E7:75:6F:5A:E4:58:0B:E1:79" DSAFILE=provable-dsa2048.pem fi @@ -54,6 +54,9 @@ fi ${VALGRIND} "${CERTTOOL}" --verify-provable-privkey --load-privkey "${srcdir}/data/${DSAFILE}" & PID3=$! +${VALGRIND} "${CERTTOOL}" --verify-provable-privkey --seed "${SEED}" --load-privkey "${srcdir}/data/${DSAFILE}" & +PID4=$! + wait $PID1 rc1=$? @@ -63,6 +66,9 @@ rc2=$? wait $PID3 rc3=$? +wait $PID4 +rc4=$? + if test "${rc1}" != "0"; then echo "Could not verify the 2048-bit key" exit 1 @@ -78,6 +84,50 @@ if test "${rc3}" != "0"; then exit 1 fi +if test "${rc4}" != "0"; then + echo "Could not verify the 2048-bit DSA key with explicit seed" + exit 1 +fi + +# +# Negative tests, verify using an incorrect seed +# + +ARB_SEED="31:EC:34:4F:97:DB:C0:BA:9C:86:52:A7:B5:D3:F7:B2:DB:BB:48:A4:84:2E:19:0D:21:0E:01:DA:BD:53:59:81:50:37:55:EE:96:A2:70:A5:98:E9:D9:1B:22:54:66:91:69:EB:DF:45:99:D9:F7:2A:CA" + +${VALGRIND} "${CERTTOOL}" --verify-provable-privkey --seed "${ARB_SEED}" --load-privkey "${srcdir}/data/provable2048.pem" & +PID1=$! + +${VALGRIND} "${CERTTOOL}" --verify-provable-privkey --seed "${ARB_SEED}" --load-privkey "${srcdir}/data/${DSAFILE}" & +PID2=$! + +wait $PID1 +rc1=$? + +wait $PID2 +rc2=$? + +if test "${rc1}" = "0"; then + echo "Incorrectly verified an RSA key with wrong seed" + exit 1 +fi + +if test "${rc2}" = "0"; then + echo "Incorrectly verified a DSA key with wrong seed" + exit 1 +fi + +# +# Try whether re-importing a key loses the parameters +# + +"${CERTTOOL}" -k --infile "${srcdir}/data/provable2048.pem"|"${CERTTOOL}" -k|"${CERTTOOL}" -k >${OUTFILE} +grep "Hash: SHA384" ${OUTFILE} && grep "Seed: ab499ea55a5f4cb743434e49ca1ee3a491544309c6f59ab2cd5507de" ${OUTFILE} +if test $? != 0;then + echo "Could not find validation parameters after re-importing" + exit 1 +fi + rm -f "$OUTFILE" exit 0 diff --git a/tests/cert-tests/reject-invalid-time b/tests/cert-tests/reject-invalid-time new file mode 100755 index 0000000000..39aa5c4ca5 --- /dev/null +++ b/tests/cert-tests/reject-invalid-time @@ -0,0 +1,50 @@ +#!/bin/sh + +# Copyright (C) 2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +#set -e + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +PKGCONFIG="${PKG_CONFIG:-$(which pkg-config)}" +DIFF="${DIFF:-diff -b -B}" + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +${PKGCONFIG} --version >/dev/null || exit 77 + +${PKGCONFIG} --atleast-version=4.12 libtasn1 || exit 77 + +# Check whether certificates with invalid time fields are accepted +for file in openssl-invalid-time-format.pem;do + ${VALGRIND} "${CERTTOOL}" -i --infile "${srcdir}/data/$file" + rc=$? + + if test "${rc}" = "0";then + echo "file $file was accepted" + exit 1 + fi +done + +exit 0 diff --git a/tests/cert-tests/rsa-pss-pad b/tests/cert-tests/rsa-pss-pad new file mode 100755 index 0000000000..d9a05e4e0f --- /dev/null +++ b/tests/cert-tests/rsa-pss-pad @@ -0,0 +1,74 @@ +#!/bin/sh + +# Copyright (C) 2006-2012 Free Software Foundation, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#set -e + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +DIFF="${DIFF:-diff}" +TMPFILE=pss.$$.tmp + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +export TZ="UTC" + +. ${srcdir}/../scripts/common.sh + +check_for_datefudge + +# Note that in rare cases this test may fail because the +# time set using datefudge could have changed since the generation +# (if example the system was busy) + +# Test PSS signatures on certificate + +for i in sha256 sha384 sha512;do +datefudge -s "2007-04-22" \ +"${CERTTOOL}" --generate-self-signed --key-type rsa-pss \ + --load-privkey "${srcdir}/data/privkey1.pem" \ + --template "${srcdir}/templates/template-test.tmpl" \ + --outfile "${TMPFILE}" --hash $i +rc=$? + +if test -f "${srcdir}/data/template-rsa-$i.pem";then +${DIFF} "${srcdir}/data/template-rsa-$i.pem" "${TMPFILE}" >/dev/null 2>&1 +rc=$? +fi + +# We're done. +if test "${rc}" != "0"; then + echo "Test (RSA-PSS-$i) failed" + exit ${rc} +fi + +datefudge -s "2007-04-25" \ + "${CERTTOOL}" --load-ca-certificate "${TMPFILE}" --verify --infile "${TMPFILE}" >/dev/null 2>&1 +rc=$? +if test "${rc}" != "0"; then + echo "Test (verification of RSA-PSS-$i) failed" + exit ${rc} +fi +done + +rm -f "${TMPFILE}" + +exit 0 diff --git a/tests/cert-tests/sha3-test b/tests/cert-tests/sha3-test index abb20bca04..dc3cf8f6ba 100755 --- a/tests/cert-tests/sha3-test +++ b/tests/cert-tests/sha3-test @@ -50,8 +50,8 @@ datefudge -s "2007-04-22" \ rc=$? if test -f "${srcdir}/data/template-rsa-$i.pem";then -${DIFF} "${srcdir}/data/template-rsa-$i.pem" "${TMPFILE}" >/dev/null 2>&1 -rc=$? + ${DIFF} "${srcdir}/data/template-rsa-$i.pem" "${TMPFILE}" >/dev/null 2>&1 + rc=$? fi # We're done. diff --git a/tests/cert-tests/template-test b/tests/cert-tests/template-test index 7d3d4f4e17..f7ebefb664 100755 --- a/tests/cert-tests/template-test +++ b/tests/cert-tests/template-test @@ -21,6 +21,7 @@ #set -e srcdir="${srcdir:-.}" +ac_cv_sizeof_time_t="${ac_cv_sizeof_time_t:-8}" CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" DIFF="${DIFF:-diff}" @@ -35,6 +36,8 @@ TMPFILE=tmp-tt.pem.$$.tmp check_for_datefudge +echo "Running test for ${ac_cv_sizeof_time_t}-byte time_t" + # Note that in rare cases this test may fail because the # time set using datefudge could have changed since the generation # (if example the system was busy) @@ -90,6 +93,27 @@ fi rm -f ${TMPFILE} +echo "Running test for certificate generation with --generate-self-signed" + +datefudge -s "2007-04-22" \ + "${CERTTOOL}" --generate-certificate \ + --load-privkey "${srcdir}/data/template-test.key" \ + --load-ca-privkey "${srcdir}/../../doc/credentials/x509/ca-key.pem" \ + --load-ca-certificate "${srcdir}/../../doc/credentials/x509/ca.pem" \ + --template "${srcdir}/templates/template-dn.tmpl" \ + --outfile ${TMPFILE} 2>/dev/null + +${DIFF} "${srcdir}/data/template-sgenerate.pem" ${TMPFILE} >/dev/null 2>&1 +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "Test 3-a non-self-signed generation failed" + exit ${rc} +fi + +rm -f ${TMPFILE} + datefudge -s "2007-04-22" \ "${CERTTOOL}" --generate-self-signed \ --load-privkey "${srcdir}/data/template-test.key" \ @@ -122,7 +146,6 @@ fi rm -f ${TMPFILE} # The following test works in 64-bit systems -if test "$(getconf LONG_BIT)" = "64"; then datefudge -s "2007-04-22" \ "${CERTTOOL}" --generate-self-signed \ @@ -130,17 +153,29 @@ datefudge -s "2007-04-22" \ --template "${srcdir}/templates/template-overflow2.tmpl" \ --outfile ${TMPFILE} 2>/dev/null -${DIFF} "${srcdir}/data/template-overflow2.pem" ${TMPFILE} >/dev/null 2>&1 rc=$? +if test "${ac_cv_sizeof_time_t}" -lt 8;then + if test "$rc" = "0"; then + echo "Test 5-1 (overflow2) succeeded unexpectedly with 32-bit time_t" + exit ${rc} + fi +else + if test "$rc" != "0"; then + echo "Test 5-1 (overflow2) failed" + exit ${rc} + fi -# We're done. -if test "${rc}" != "0"; then - echo "Test 5 (overflow2) failed" - exit ${rc} -fi + ${DIFF} "${srcdir}/data/template-overflow2.pem" ${TMPFILE} #>/dev/null 2>&1 + rc=$? + + # We're done. + if test "${rc}" != "0"; then + echo "Test 5-2 (overflow2) failed" + exit ${rc} + fi -rm -f ${TMPFILE} fi +rm -f ${TMPFILE} datefudge -s "2007-04-22" \ "${CERTTOOL}" --generate-self-signed \ @@ -159,6 +194,34 @@ fi rm -f ${TMPFILE} +datefudge -s "2007-04-22" \ + "${CERTTOOL}" --generate-self-signed \ + --load-privkey "${srcdir}/data/template-test.key" \ + --template "${srcdir}/templates/template-dates-after2038.tmpl" \ + --outfile ${TMPFILE} 2>/dev/null +rc=$? +if test "${ac_cv_sizeof_time_t}" -lt 8;then + if test "$rc" = "0"; then + echo "Test 6-2 (explicit dates) succeeded unexpectedly with 32-bit long" + exit ${rc} + fi +else + if test "$rc" != "0"; then + echo "Test 6-2 (explicit dates) failed" + exit ${rc} + fi + + ${DIFF} "${srcdir}/data/template-dates-after2038.pem" ${TMPFILE} >/dev/null 2>&1 + rc=$? + + if test "${rc}" != "0"; then + echo "Test 6-3 (explicit dates) failed" + exit ${rc} + fi +fi + +rm -f ${TMPFILE} + # Test name constraints generation datefudge -s "2007-04-22" \ @@ -180,7 +243,7 @@ rm -f ${TMPFILE} # Test the GeneralizedTime support -if test "$(getconf LONG_BIT)" = "64"; then +if test "${ac_cv_sizeof_time_t}" = 8;then # we should test that on systems which have 64-bit time_t. datefudge -s "2051-04-22" \ "${CERTTOOL}" --generate-self-signed \ @@ -238,4 +301,23 @@ fi rm -f ${TMPFILE} +# Test generation with larger serial number + +datefudge -s "2007-04-22" \ + "${CERTTOOL}" --generate-self-signed \ + --load-privkey "${srcdir}/data/template-test.key" \ + --template "${srcdir}/templates/template-long-serial.tmpl" \ + --outfile ${TMPFILE} 2>/dev/null + +${DIFF} "${srcdir}/data/long-serial.pem" ${TMPFILE} >/dev/null 2>&1 +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "Test 11 (long serial) failed" + exit ${rc} +fi + +rm -f ${TMPFILE} + exit 0 diff --git a/tests/cert-tests/templates/arb-extensions.tmpl b/tests/cert-tests/templates/arb-extensions.tmpl index 1f2c7dc809..5171e20969 100644 --- a/tests/cert-tests/templates/arb-extensions.tmpl +++ b/tests/cert-tests/templates/arb-extensions.tmpl @@ -29,10 +29,10 @@ expiration_days = 2590 email_protection_key add_extension = "1.2.3.4 0001020304050607AAABCD" -add_extension = "5.6.7.8 0x0001020304050607AAABCD" +add_extension = "1.6.7.8 0x0001020304050607AAABCD" add_extension = "1.2.3.4.5.6.7 1d34cd5ad065dc27c17e9447b0aaaca7" add_extension = "1.2.3.4294967295.7 178f0e413f041cc9d64af64bf3b66c7ceac6fa34a4d77ed64c968b26c761709445f40d9ca0a00091af7d212789c00b7387b1d0d7ab623dd4029d4b86db3653621d34cd5ad065dc27c17e9447b0aaaca7" -add_critical_extension = "9.10.11.12.13.14.15.16.17.1.5 CAFE" +add_critical_extension = "1.10.11.12.13.14.15.16.17.1.5 CAFE" add_extension = "1.2.6710656.7 d64af64bf3b66c7ceac6fa34a4d77ed64c968b26c761709445f40d9ca0a00091af7d212789c00b7387b1d0d7ab623dd4029d4b86db3653621d34cd5ad065dc27c17e9447b0aaaca7" -add_extension = "7.0.1.5 octet_string(CAFEBEAF)" -add_critical_extension = "7.0.1.5.1 octet_string(BEAFCAFEFAFA)" +add_extension = "1.0.1.5 octet_string(CAFEBEAF)" +add_critical_extension = "1.0.1.5.1 octet_string(BEAFCAFEFAFA)" diff --git a/tests/cert-tests/templates/crit-extensions.tmpl b/tests/cert-tests/templates/crit-extensions.tmpl index e16f316055..414298db5f 100644 --- a/tests/cert-tests/templates/crit-extensions.tmpl +++ b/tests/cert-tests/templates/crit-extensions.tmpl @@ -26,5 +26,5 @@ uid = "clauper" serial = 9 expiration_days = 2590 -add_critical_extension = "9.10.11.12.13.14.15.16.17.1.5 CAFE" -add_critical_extension = "7.0.1.5.1 octet_string(BEAFCAFEFAFA)" +add_critical_extension = "1.10.11.12.13.14.15.16.17.1.5 CAFE" +add_critical_extension = "1.2.1.5.1 octet_string(BEAFCAFEFAFA)" diff --git a/tests/cert-tests/templates/template-dates-after2038.tmpl b/tests/cert-tests/templates/template-dates-after2038.tmpl new file mode 100644 index 0000000000..cb173875a3 --- /dev/null +++ b/tests/cert-tests/templates/template-dates-after2038.tmpl @@ -0,0 +1,97 @@ +# X.509 Certificate options +# +# DN options + +# The organization of the subject. +organization = "Koko inc." + +# The organizational unit of the subject. +unit = "sleeping dept." + +# The locality of the subject. +# locality = + +# The state of the certificate owner. +state = "Attiki" + +# The country of the subject. Two letter code. +country = GR + +# The common name of the certificate owner. +cn = "Cindy Lauper" + +# A user id of the certificate owner. +uid = "clauper" + +# If the supported DN OIDs are not adequate you can set +# any OID here. +# For example set the X.520 Title and the X.520 Pseudonym +# by using OID and string pairs. +dn_oid = 2.5.4.12 Dr. +dn_oid = 2.5.4.65 jackal + +# This is deprecated and should not be used in new +# certificates. +pkcs9_email = "none@none.org" + +# The serial number of the certificate +serial = 7 + +expiration_date = 2043-05-24 14:29:12 +activation_date = 2039-01-12 11:36:11 + +# X.509 v3 extensions + +# A dnsname in case of a WWW server. +dns_name = "www.none.org" +dns_name = "www.morethanone.org" + +# An IP address in case of a server. +ip_address = "192.168.1.1" + +dns_name = "www.evenmorethanone.org" + +# An email in case of a person +email = "none@none.org" + +# An URL that has CRLs (certificate revocation lists) +# available. Needed in CA certificates. +crl_dist_points = "http://www.getcrl.crl/getcrl/" + +email = "where@none.org" + +# Whether this is a CA certificate or not +ca + +# Whether this certificate will be used for a TLS client +#tls_www_client + +# Whether this certificate will be used for a TLS server +#tls_www_server + +# Whether this certificate will be used to sign data (needed +# in TLS DHE ciphersuites). +signing_key + +# Whether this certificate will be used to encrypt data (needed +# in TLS RSA ciphersuites). Note that it is preferred to use different +# keys for encryption and signing. +#encryption_key + +# Whether this key will be used to sign other certificates. +cert_signing_key + +# Whether this key will be used to sign CRLs. +#crl_signing_key + +# Whether this key will be used to sign code. +#code_signing_key + +# Whether this key will be used to sign OCSP data. +ocsp_signing_key + +# Whether this key will be used for time stamping. +#time_stamping_key + +# Whether this key will be used for IPsec IKE operations. +#ipsec_ike_key diff --git a/tests/cert-tests/templates/template-long-serial.tmpl b/tests/cert-tests/templates/template-long-serial.tmpl new file mode 100644 index 0000000000..0352586490 --- /dev/null +++ b/tests/cert-tests/templates/template-long-serial.tmpl @@ -0,0 +1,99 @@ +# X.509 Certificate options +# +# DN options + +# The organization of the subject. +organization = "Koko inc." + +# The organizational unit of the subject. +unit = "sleeping dept." + +# The locality of the subject. +# locality = + +# The state of the certificate owner. +state = "Attiki" + +# The country of the subject. Two letter code. +country = GR + +# The common name of the certificate owner. +cn = "Cindy Lauper" + +# A user id of the certificate owner. +uid = "clauper" + +# If the supported DN OIDs are not adequate you can set +# any OID here. +# For example set the X.520 Title and the X.520 Pseudonym +# by using OID and string pairs. +dn_oid = 2.5.4.12 Dr. +dn_oid = 2.5.4.65 jackal + +# This is deprecated and should not be used in new +# certificates. +pkcs9_email = "none@none.org" + +# The serial number of the certificate +serial = 0x1234567890abcdeffedcba0987654321abcdef12 + +# In how many days, counting from today, this certificate will expire. +expiration_days = 2590 + +# X.509 v3 extensions + +# A dnsname in case of a WWW server. +dns_name = "www.none.org" +dns_name = "www.morethanone.org" + +# An IP address in case of a server. +ip_address = "192.168.1.1" + +dns_name = "www.evenmorethanone.org" + +# An email in case of a person +email = "none@none.org" + +# An URL that has CRLs (certificate revocation lists) +# available. Needed in CA certificates. +crl_dist_points = "http://www.getcrl.crl/getcrl1/" +crl_dist_points = "http://www.getcrl.crl/getcrl2/" +crl_dist_points = "http://www.getcrl.crl/getcrl3/" + +email = "where@none.org" + +# Whether this is a CA certificate or not +ca + +# Whether this certificate will be used for a TLS client +#tls_www_client + +# Whether this certificate will be used for a TLS server +#tls_www_server + +# Whether this certificate will be used to sign data (needed +# in TLS DHE ciphersuites). +signing_key + +# Whether this certificate will be used to encrypt data (needed +# in TLS RSA ciphersuites). Note that it is preferred to use different +# keys for encryption and signing. +#encryption_key + +# Whether this key will be used to sign other certificates. +cert_signing_key + +# Whether this key will be used to sign CRLs. +#crl_signing_key + +# Whether this key will be used to sign code. +#code_signing_key + +# Whether this key will be used to sign OCSP data. +ocsp_signing_key + +# Whether this key will be used for time stamping. +#time_stamping_key + +# Whether this key will be used for IPsec IKE operations. +#ipsec_ike_key diff --git a/tests/cert-tests/templates/template-no-ca-explicit.tmpl b/tests/cert-tests/templates/template-no-ca-explicit.tmpl new file mode 100644 index 0000000000..2b0f7e374a --- /dev/null +++ b/tests/cert-tests/templates/template-no-ca-explicit.tmpl @@ -0,0 +1,13 @@ +cn = "No CA" +serial = 02 + +email_protection_key + +add_extension = "1.2.3.4 0001020304050607AAABCD" +add_extension = "1.6.7.8 0x0001020304050607AAABCD" +add_extension = "1.2.3.4.5.6.7 1d34cd5ad065dc27c17e9447b0aaaca7" +add_extension = "1.2.3.4294967295.7 178f0e413f041cc9d64af64bf3b66c7ceac6fa34a4d77ed64c968b26c761709445f40d9ca0a00091af7d212789c00b7387b1d0d7ab623dd4029d4b86db3653621d34cd5ad065dc27c17e9447b0aaaca7" +add_critical_extension = "1.10.11.12.13.14.15.16.17.1.5 CAFE" +add_extension = "1.2.6710656.7 d64af64bf3b66c7ceac6fa34a4d77ed64c968b26c761709445f40d9ca0a00091af7d212789c00b7387b1d0d7ab623dd4029d4b86db3653621d34cd5ad065dc27c17e9447b0aaaca7" +add_extension = "1.0.1.5 octet_string(CAFEBEAF)" +add_critical_extension = "1.0.1.5.1 octet_string(BEAFCAFEFAFA)" diff --git a/tests/cert-tests/templates/template-no-ca-honor.tmpl b/tests/cert-tests/templates/template-no-ca-honor.tmpl new file mode 100644 index 0000000000..05f21b8885 --- /dev/null +++ b/tests/cert-tests/templates/template-no-ca-honor.tmpl @@ -0,0 +1,3 @@ +cn = "No CA" +serial = 02 +honor_crq_extensions diff --git a/tests/cert-tests/templates/template-no-ca.tmpl b/tests/cert-tests/templates/template-no-ca.tmpl new file mode 100644 index 0000000000..6528a50e4b --- /dev/null +++ b/tests/cert-tests/templates/template-no-ca.tmpl @@ -0,0 +1,2 @@ +cn = "No CA" +serial = 02 diff --git a/tests/cert-tests/templates/template-othername-xmpp.tmpl b/tests/cert-tests/templates/template-othername-xmpp.tmpl index 1e9a85f846..017dfbaa83 100644 --- a/tests/cert-tests/templates/template-othername-xmpp.tmpl +++ b/tests/cert-tests/templates/template-othername-xmpp.tmpl @@ -33,9 +33,6 @@ crl_dist_points = "http://www.getcrl.crl/getcrl/" email = "where@none.org" -# Whether this is a CA certificate or not -ca - # Whether this certificate will be used for a TLS client #tls_www_client diff --git a/tests/cert-tests/templates/template-tlsfeature.tmpl b/tests/cert-tests/templates/template-tlsfeature.tmpl index 7a03b49afb..f4d3f69abb 100644 --- a/tests/cert-tests/templates/template-tlsfeature.tmpl +++ b/tests/cert-tests/templates/template-tlsfeature.tmpl @@ -65,9 +65,6 @@ crl_dist_points = "http://www.getcrl.crl/getcrl3/" email = "where@none.org" -# Whether this is a CA certificate or not -ca - # Whether this certificate will be used for a TLS client #tls_www_client diff --git a/tests/cert-tests/tolerate-invalid-time b/tests/cert-tests/tolerate-invalid-time new file mode 100755 index 0000000000..22d2a9199b --- /dev/null +++ b/tests/cert-tests/tolerate-invalid-time @@ -0,0 +1,50 @@ +#!/bin/sh + +# Copyright (C) 2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +#set -e + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +PKGCONFIG="${PKG_CONFIG:-$(which pkg-config)}" +DIFF="${DIFF:-diff -b -B}" + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +${PKGCONFIG} --version >/dev/null || exit 77 + +${PKGCONFIG} --atleast-version=4.12 libtasn1 || exit 77 + +# Check whether certificates with invalid time fields are accepted +for file in openssl-invalid-time-format.pem;do + ${VALGRIND} "${CERTTOOL}" -i --infile "${srcdir}/data/$file" + rc=$? + + if test "${rc}" != "0";then + echo "file $file was not rejected" + exit 1 + fi +done + +exit 0 diff --git a/tests/cert-tests/x509-duplicate-ext b/tests/cert-tests/x509-duplicate-ext new file mode 100755 index 0000000000..534a534a69 --- /dev/null +++ b/tests/cert-tests/x509-duplicate-ext @@ -0,0 +1,46 @@ +#!/bin/sh + +# Copyright (C) 2019 Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +OUTFILE=out.$$.tmp + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +"${CERTTOOL}" --certificate-info --infile "${srcdir}/data/dup-exts.pem" >${OUTFILE} 2>&1 +RET=$? +if test ${RET} = 0; then + echo "Successfully loaded a certificate with duplicate extensions" + cat ${OUTFILE} + exit 1 +fi + +grep "Duplicate extension in" ${OUTFILE} 2>/dev/null +if test $? != 0; then + echo "Could not find the expected error value" + cat ${OUTFILE} + exit 1 +fi + + +rm -f ${OUTFILE} + +exit 0 diff --git a/tests/cert.c b/tests/cert.c index da0ab23df4..ec566a4a4a 100644 --- a/tests/cert.c +++ b/tests/cert.c @@ -89,7 +89,6 @@ static int getnextcert(DIR **dirp, gnutls_datum_t *der, int *exp_ret) *exp_ret = atoi((char*)local.data); success("expecting error code %d\n", *exp_ret); gnutls_free(local.data); - local.data = NULL; } return 0; @@ -135,7 +134,6 @@ void doit(void) gnutls_x509_crt_deinit(cert); gnutls_free(der.data); - der.data = NULL; der.size = 0; exp_ret = -1; } diff --git a/tests/cert_verify_inv_utf8.c b/tests/cert_verify_inv_utf8.c index a424e51075..095a55f3df 100644 --- a/tests/cert_verify_inv_utf8.c +++ b/tests/cert_verify_inv_utf8.c @@ -137,7 +137,7 @@ static void auto_parse(void) test_cli_serv_expect(x509_cred, clicred, "NORMAL", "NORMAL", "localhost", 0, 0); test_cli_serv_vf(x509_cred, clicred, "NORMAL", "www.νίκοσ.com"); test_cli_serv_vf(x509_cred, clicred, "NORMAL", "www.νίκος.com"); - test_cli_serv_vf(x509_cred, clicred, "NORMAL", "raw:www.νίκος.com"); + test_cli_serv_expect(x509_cred, clicred, "NORMAL", "NORMAL", "raw:www.νίκος.com", GNUTLS_E_RECEIVED_DISALLOWED_NAME, GNUTLS_E_AGAIN); gnutls_certificate_free_credentials(x509_cred); gnutls_certificate_free_credentials(clicred); diff --git a/tests/certs-interesting/cert10.der b/tests/certs-interesting/cert10.der new file mode 100644 index 0000000000..07ab16d3ee Binary files /dev/null and b/tests/certs-interesting/cert10.der differ diff --git a/tests/certs-interesting/cert5.der b/tests/certs-interesting/cert5.der index 44b3f0e4df..f950ff3e1b 100644 Binary files a/tests/certs-interesting/cert5.der and b/tests/certs-interesting/cert5.der differ diff --git a/tests/certs-interesting/cert6.der.err b/tests/certs-interesting/cert6.der.err new file mode 100644 index 0000000000..b8dae94d74 --- /dev/null +++ b/tests/certs-interesting/cert6.der.err @@ -0,0 +1 @@ +-43 diff --git a/tests/certs/ca-cert-ecc.pem b/tests/certs/ca-cert-ecc.pem index ad8a34b552..2e95c957dd 100644 --- a/tests/certs/ca-cert-ecc.pem +++ b/tests/certs/ca-cert-ecc.pem @@ -1,14 +1,14 @@ -----BEGIN CERTIFICATE----- -MIICLDCCAdKgAwIBAgIBADAKBggqhkjOPQQDAjB9MQswCQYDVQQGEwJCRTEPMA0G +MIICLTCCAdKgAwIBAgIBADAKBggqhkjOPQQDAjB9MQswCQYDVQQGEwJCRTEPMA0G A1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2VydGlmaWNhdGUgYXV0aG9y aXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdudVRMUyBjZXJ0aWZpY2F0 -ZSBhdXRob3JpdHkwHhcNMTEwNTIzMjAzODIxWhcNMTIxMjIyMDc0MTUxWjB9MQsw +ZSBhdXRob3JpdHkwHhcNMTEwNTIzMTgzODIxWhcNMzEwNTI0MTIyOTEyWjB9MQsw CQYDVQQGEwJCRTEPMA0GA1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2Vy dGlmaWNhdGUgYXV0aG9yaXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdu dVRMUyBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkwWTATBgcqhkjOPQIBBggqhkjOPQMB BwNCAARS2I0jiuNn14Y2sSALCX3IybqiIJUvxUpj+oNfzngvj/Niyv2394BWnW4X uQ4RTEiywK87WRcWMGgJB5kX/t2no0MwQTAPBgNVHRMBAf8EBTADAQH/MA8GA1Ud DwEB/wQFAwMHBgAwHQYDVR0OBBYEFPC0gf6YEr+1KLlkQAPLzB9mTigDMAoGCCqG -SM49BAMCA0gAMEUCIDGuwD1KPyG+hRf88MeyMQcqOFZD0TbVleF+UsAGQ4enAiEA -l4wOuDwKQa+upc8GftXE2C//4mKANBC6It01gUaTIpo= +SM49BAMCA0kAMEYCIQCoTZHO4jSkIKq5UVMnPFzv2MtJHd62KxMPq4Ad5c9RwwIh +AMyj06hO1DGrV3bOPBRJrfWTEzkgA4p1wntYRoPfCTdF -----END CERTIFICATE----- diff --git a/tests/certs/cert-ed25519.pem b/tests/certs/cert-ed25519.pem new file mode 100644 index 0000000000..8d6283df15 --- /dev/null +++ b/tests/certs/cert-ed25519.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBwTCCAWagAwIBAgIIWTZasQWGNVEwCgYIKoZIzj0EAwIwfTELMAkGA1UEBhMC +QkUxDzANBgNVBAoTBkdudVRMUzElMCMGA1UECxMcR251VExTIGNlcnRpZmljYXRl +IGF1dGhvcml0eTEPMA0GA1UECBMGTGV1dmVuMSUwIwYDVQQDExxHbnVUTFMgY2Vy +dGlmaWNhdGUgYXV0aG9yaXR5MCAXDTE3MDYwNjA3MzMwNVoYDzk5OTkxMjMxMjM1 +OTU5WjAZMRcwFQYDVQQDEw5FZDI1NTE5IHNpZ25lcjAqMAUGAytlcAMhAPMF++lz +LIzfyCX0v0B7LIabZWZ/dePW9HexIbW3tYmHo2EwXzAMBgNVHRMBAf8EAjAAMA8G +A1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFONSSnOdGLzpv3xNcci8ZiKKqzyqMB8G +A1UdIwQYMBaAFPC0gf6YEr+1KLlkQAPLzB9mTigDMAoGCCqGSM49BAMCA0kAMEYC +IQDHGfSgM44DVZfrP5CF8LSNlFN55ti3Z69YJ0SK8Fy9eQIhAN2UKeX3l8A9Ckcm +7barRoh+qx7ZVYpe+5w3JYuxy16w +-----END CERTIFICATE----- diff --git a/tests/certs/ed25519.pem b/tests/certs/ed25519.pem new file mode 100644 index 0000000000..7fedbd79bd --- /dev/null +++ b/tests/certs/ed25519.pem @@ -0,0 +1,25 @@ +Public Key Info: + Public Key Algorithm: EdDSA (Ed25519) + Key Security Level: High (256 bits) + +curve: Ed25519 +private key: + e5:c3:25:73:94:e8:9e:97:75:7c:78:59:f7:32:3c:82 + cf:60:90:c7:e5:b4:5f:9b:d7:a6:f8:36:0c:92:59:70 + + +x: + f3:05:fb:e9:73:2c:8c:df:c8:25:f4:bf:40:7b:2c:86 + 9b:65:66:7f:75:e3:d6:f4:77:b1:21:b5:b7:b5:89:87 + + + +Public Key PIN: + pin-sha256:7DW50qkZrEKqSrB29HkLvRoiuQAtHaaLAZKLE9s/VZ4= +Public Key ID: + sha256:ec35b9d2a919ac42aa4ab076f4790bbd1a22b9002d1da68b01928b13db3f559e + sha1:e3524a739d18bce9bf7c4d71c8bc66228aab3caa + +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIOXDJXOU6J6XdXx4WfcyPILPYJDH5bRfm9em+DYMkllw +-----END PRIVATE KEY----- diff --git a/tests/certs/rawpk_priv.pem b/tests/certs/rawpk_priv.pem new file mode 100644 index 0000000000..4329cb0870 --- /dev/null +++ b/tests/certs/rawpk_priv.pem @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIG4wIBAAKCAYEAyAeBq7Ti7oVExeVT1PqHGBXzC+johdeVnZgZRLhDTIaIGODV +5F5JhE4NNb1O/DYLlAy5IIO8tfAE2KIxlarNH/+AcfV6ZJQSG4SSmhoIGzfdcdju +BmFfdfhO+z/cgqiewh53/fFCQlaJweHhpmim/LVL/M/1Rd6Urskv/5jXGG4FVUNf +hXKQag0uzWsqcztCPX7Lrqr2BSOmkA1nWzdoh5oBuxdooaH9/kwphqJAp03LwtaS +StX/yz6Mh+ZqEbBuM4mWw/xKzbEbs7zA+d8sryHXkC8nsdA+h+IRd8bPa/KuWQNf +jxXKNPzgmsZddHmHtYtWvAcoIMvtyO23Y2NhN4V0/7fwFLbZtfUBg4pqUl2ktkdw +sNguTT1qzJCsYhsHXaqqvHy+5HR2D0w07y2X1qCVmfHzBZCM5OhxoeoauE+xu+5n +vYrgsgPE0y5Nty0y2MrApg3digaiKUXrI+mEVKn9vsQeaVvw9D6PgNQM99HkbGhR +MGPOzcHjS/ZeLd1zAgMBAAECggGBALHiAw3Yscqd11gJpbCMDqF7u4VG3alQ26un +PClhl++w380H/Q62TriK1LKKpHgj8834NpXUsXg2d4jTTDcmCn6/L9GoFOzmxOeV +0O2b4sOZvaNl397qrwLxDAPhec7z9yL4B4tcBqmJ3b3+izX6cS3gaC/uG9fDpgN9 +xOKPYBFInhOB86twAz9cc9eXysto0nJvlODDBj/xwUjvso9qydl1Or7PhWvf7Ek+ +H9ur5MUjqOWe/b/xaSWsfTrJzF/ovbRnGbXLIpozIx609TZS4wYSqU5FUjkL0zTB +bTdb3jgFm/5SHnnThD67zbZavCxiN9wiTs3zeGlxYf8hMeaTkOYiAOR4/1bOTe2J +ttRA1EcY+i6H0+JOtLkqwj5ka0m3lrH2KD3E/mHs1yfERQx7VVjw9IpeAKmi5lzQ +v1lhIXiv75Mb0NMsCknGYPLHCyOY5aA2dhR8Wnr67gOYu3ssexLzMKczk5OTzl5c +PRHJRXDpJqgOYWujF99uCYhnxonO4QKBwQDUQB0s4shWTyOylq7j4rCSbHf2zHDf +HBYC75wyjQECNQXNk6hp5jJz2BC0XvnO7PYSRXaVauMc/S3V7V7GMsry3uugfwLy +XNnyRVY4voe5SNt/WAArybNsPNPEIPzgkZmeWvcpoY8ESufPfVW54BvGHt3YjPjI +gYmFUkpPRUWXfji91NpTlIrsP6jtBTYXGV4kVm+TawP06a6FdCjJQaI7Nm2dwUiX +Cmf4oFSo8mGxi0wimX+BiLJep2bYnUF2gqMCgcEA8UKESDX3jBpyz59vpSjmfpw1 +AnlEfR6s83W92m0HfEYLulfxq9xA2zaQjy4GbaKVRfLrO2Pj3bZWs89RGXTQVGgq +ztCLIRsL+M1SQ883e8yx4jwFaqIM+pPpvAjOOOTdpgY33h7w20tgrbzVKeOl1ghC +IZ+K8C/tIGZXI5/TYppl7csIOoYRtzuRpyDE0tmwy658RfyxzEtfLxJoaLiFXOE0 +zFFrEvT/jto4jN+cwsdnHhxrY9+bVNUNyb9ZH7bxAoHARvcIyjEo+nKLZPKsltT8 +ZHiPw5ynQHGLin/CocQzSiGgRxPPg1jMFZ9wNl5q95ySyZkgBOUv+klMQfKTdYEW +Cg4uigLtYUtaM36rTV2m03RgrzslE37k1pOf2juNUShdTGztpqW1w6Gnz+AAAZ3E +q4E2e2jm5WMqL8FLxyVKF1TEc/Pu63MG3+aI/HZ5l0+MAmpD8+4b7I8VItmrqV6g +d1vDWrN9KcL48E/q/nHL6CjC0+6uiwjBWpRt9o7djFoxAoHAJzK/e1wJVGIXtVQa +N6Nlj7yhgD1ju1B4mTXQGuUMCkz3KtePFHU8tGExK5I2ySlZR3wobAXWx/cQLzbH +3nL0RkKGcgPAFyjl0Q7LBulsAllHrZJC7whVQ4E0wLBNkUDeIlNwUE6Go5qjopbD +q4KpNxUwaXYahNvEkzcNgWQ+XA7p8LDELX4K8tJi39ybHgbwiqdW2ags2xyD4ooD +HMCeKnEMuwWfd/0GaJdcCMdsGNl9D49eg2OZQTc8fkLwoA6BAoHATQdk3VZwGGn/ +93p9vu189alkshTmir+SOo/ufH5U+j7t8cPeT7psuYAPZWS+Z6KEzvHxj54pAvcp +mlAngD3+AfHDn/VAtYv5HVcpZ+K2K0X4v8N5HGIubgaebs2oVNz+RAWnd8K2drDG +NcJV3C+zLziTCwvpGCIy3T/lHjKe+YczjGfhg2e6PgfwhTqPAjuhUZ8wScYo7l7V +zAhlSL0665IXJ32zX+3LyQFDbkB6pbKy5TU+rX3DmDyj3MSbc3kR +-----END RSA PRIVATE KEY----- diff --git a/tests/certs/rawpk_pub.pem b/tests/certs/rawpk_pub.pem new file mode 100644 index 0000000000..fad8af8e0f --- /dev/null +++ b/tests/certs/rawpk_pub.pem @@ -0,0 +1,11 @@ +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAyAeBq7Ti7oVExeVT1PqH +GBXzC+johdeVnZgZRLhDTIaIGODV5F5JhE4NNb1O/DYLlAy5IIO8tfAE2KIxlarN +H/+AcfV6ZJQSG4SSmhoIGzfdcdjuBmFfdfhO+z/cgqiewh53/fFCQlaJweHhpmim +/LVL/M/1Rd6Urskv/5jXGG4FVUNfhXKQag0uzWsqcztCPX7Lrqr2BSOmkA1nWzdo +h5oBuxdooaH9/kwphqJAp03LwtaSStX/yz6Mh+ZqEbBuM4mWw/xKzbEbs7zA+d8s +ryHXkC8nsdA+h+IRd8bPa/KuWQNfjxXKNPzgmsZddHmHtYtWvAcoIMvtyO23Y2Nh +N4V0/7fwFLbZtfUBg4pqUl2ktkdwsNguTT1qzJCsYhsHXaqqvHy+5HR2D0w07y2X +1qCVmfHzBZCM5OhxoeoauE+xu+5nvYrgsgPE0y5Nty0y2MrApg3digaiKUXrI+mE +VKn9vsQeaVvw9D6PgNQM99HkbGhRMGPOzcHjS/ZeLd1zAgMBAAE= +-----END PUBLIC KEY----- diff --git a/tests/certs/rsa-512.pem b/tests/certs/rsa-512.pem new file mode 100644 index 0000000000..46fbe62589 --- /dev/null +++ b/tests/certs/rsa-512.pem @@ -0,0 +1,20 @@ +-----BEGIN PRIVATE KEY----- +MIIBVwIBADANBgkqhkiG9w0BAQEFAASCAUEwggE9AgEAAkEAwZFO/Vz94lR3/TKz +76qRCV2skqthX7PB6YxeLHH3ifWSYR2qCYTBikaASm6PGDvAliviIjGjKTkdDdqZ +X2S94QIDAQABAkEAsV+L+FN8OieZBCWwCNBNsz1pY8Uzp1S7Pl3n9eZBJOKNc/tI +Tr0/zwAR+5C7IE7xjfuYHZDWN+yXg0LhH+GYgQIhAP0rzSdsjuPJ9XA9wpnYLN4O +fqXnA7mzW5QKzYuzy3RJAiEAw7sCwUSi7030NszYd7A63o2WrzqWRoX1V1vt6FMd +zNkCIQDmsytXaY0r9bU6eo0CNANutjaiZ0j1x4MD/HQhgc08QQIhALdYYLZF4xKj +RRZoQIWtURfULciq6sXZCf7xICQ2Z33RAiEA/M/OnKZijdWg13dchmdaXLgNGxJO +N90VucFVWK8nXzo= +-----END PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIBTjCB+aADAgECAhQcc65I8jSxWRjcS1czw4MRLIc8qDANBgkqhkiG9w0BAQsF +ADAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwHhcNMTkxMjE1MDI1NTU4WhcNMjkxMjEy +MDI1NTU4WjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwXDANBgkqhkiG9w0BAQEFAANL +ADBIAkEAwZFO/Vz94lR3/TKz76qRCV2skqthX7PB6YxeLHH3ifWSYR2qCYTBikaA +Sm6PGDvAliviIjGjKTkdDdqZX2S94QIDAQABoyMwITAJBgNVHRMEAjAAMBQGA1Ud +EQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAANBAHslvfVxod5p+Gt7l4LV +M2HBxOt4YM8mRCtyNSmJEGAe+aIzXaiSiRnVkVvjQvdxacu2D4yP52BUo1vzNnCq +2UI= +-----END CERTIFICATE----- diff --git a/tests/suite/certtool-pkcs11.sh b/tests/certtool-pkcs11.sh similarity index 83% rename from tests/suite/certtool-pkcs11.sh rename to tests/certtool-pkcs11.sh index 39933cd0c3..9a599e6146 100755 --- a/tests/suite/certtool-pkcs11.sh +++ b/tests/certtool-pkcs11.sh @@ -19,11 +19,11 @@ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. srcdir="${srcdir:-.}" -P11TOOL="${P11TOOL:-../../src/p11tool${EXEEXT}}" -CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" +P11TOOL="${P11TOOL:-../src/p11tool${EXEEXT}}" +CERTTOOL="${CERTTOOL:-../src/certtool${EXEEXT}}" DIFF="${DIFF:-diff -b -B}" -SERV="${SERV:-../../src/gnutls-serv${EXEEXT}}" -CLI="${CLI:-../../src/gnutls-cli${EXEEXT}}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" RETCODE=0 if ! test -x "${P11TOOL}"; then @@ -56,7 +56,7 @@ fi P11TOOL="${VALGRIND} ${P11TOOL} --batch" SERV="${SERV} -q" -. ${srcdir}/../scripts/common.sh +. ${srcdir}/scripts/common.sh rm -f "${TMPFILE}" @@ -130,7 +130,7 @@ generate_cert() { url=$1 echo -n "* Generating a certificate... " - $CERTTOOL ${ADDITIONAL_PARAM} --generate-certificate --load-ca-certificate "$url" --load-ca-privkey "${srcdir}/pkcs11-certs/ca.key" --load-privkey "${srcdir}/pkcs11-certs/server.key" --template "${srcdir}/pkcs11-certs/server-tmpl" >>"${TMPFILE}" 2>&1 + $CERTTOOL ${ADDITIONAL_PARAM} --generate-certificate --load-ca-certificate "$url" --load-ca-privkey "${srcdir}/testpkcs11-certs/ca.key" --load-privkey "${srcdir}/testpkcs11-certs/server.key" --template "${srcdir}/testpkcs11-certs/server-tmpl" >>"${TMPFILE}" 2>&1 if test $? = 0; then echo ok else @@ -144,7 +144,7 @@ generate_cert_with_key() { ca_key_url=$2 echo -n "* Generating a certificate (privkey in pkcs11)... " - $CERTTOOL ${ADDITIONAL_PARAM} --generate-certificate --load-ca-certificate "${ca_url}" --load-ca-privkey "${ca_key_url}" --load-privkey "${srcdir}/pkcs11-certs/server.key" --template "${srcdir}/pkcs11-certs/server-tmpl" >>"${TMPFILE}" 2>&1 + $CERTTOOL ${ADDITIONAL_PARAM} --generate-certificate --load-ca-certificate "${ca_url}" --load-ca-privkey "${ca_key_url}" --load-privkey "${srcdir}/testpkcs11-certs/server.key" --template "${srcdir}/testpkcs11-certs/server-tmpl" >>"${TMPFILE}" 2>&1 if test $? = 0; then echo ok else @@ -175,13 +175,13 @@ if test "x${TOKEN}" = x; then exit_error fi -write_ca_cert "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/pkcs11-certs/ca.crt" "CA" +write_ca_cert "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/testpkcs11-certs/ca.crt" "CA" -verify_certificate_test "${TOKEN};object=CA;object-type=cert" "${srcdir}/pkcs11-certs/server.crt" -verify_certificate_test "${TOKEN};object=CA;object-type=cert" "${srcdir}/pkcs11-certs/client.crt" +verify_certificate_test "${TOKEN};object=CA;object-type=cert" "${srcdir}/testpkcs11-certs/server.crt" +verify_certificate_test "${TOKEN};object=CA;object-type=cert" "${srcdir}/testpkcs11-certs/client.crt" generate_cert "${TOKEN};object=CA;object-type=cert" -write_ca_privkey "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/pkcs11-certs/ca.key" +write_ca_privkey "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/testpkcs11-certs/ca.key" generate_cert_with_key "${TOKEN};object=CA;object-type=cert" "${TOKEN};object=CA-key;object-type=private" diff --git a/tests/chainverify.c b/tests/chainverify.c index a43f3bd7d8..6a10d78841 100644 --- a/tests/chainverify.c +++ b/tests/chainverify.c @@ -15,9 +15,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ #ifdef HAVE_CONFIG_H @@ -87,8 +86,13 @@ void doit(void) for (i = 0; chains[i].chain; i++) { - if (debug) - printf("Chain '%s' (%d)...\n", chains[i].name, (int)i); + printf("[%d]: Chain '%s'...\n", (int)i, chains[i].name); + + if (chains[i].notfips && gnutls_fips140_mode_enabled()) { + if (debug) + printf("Skipping in FIPS mode...\n"); + continue; + } for (j = 0; chains[i].chain[j]; j++) { if (debug > 2) diff --git a/tests/cipher-alignment.c b/tests/cipher-alignment.c new file mode 100644 index 0000000000..0537c58186 --- /dev/null +++ b/tests/cipher-alignment.c @@ -0,0 +1,522 @@ +/* + * Copyright (C) 2004-2015 Free Software Foundation, Inc. + * Copyright (C) 2013 Adam Sampson + * Copyright (C) 2015 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* Tests whether memory input to ciphers are properly aligned */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#if !defined(_WIN32) +#include +#endif +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +#include "ex-session-info.c" +#include "ex-x509-info.c" + +static pid_t child; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s |<%d>| %s", child ? "server" : "client", level, + str); +} + +#define MAX_BUF 1024 +#define MSG "Hello TLS" + +static unsigned char ca_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIB5zCCAVKgAwIBAgIERiYdJzALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" + "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTExWhcNMDgwNDE3MTMyOTExWjAZMRcw\n" + "FQYDVQQDEw5HbnVUTFMgdGVzdCBDQTCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA\n" + "vuyYeh1vfmslnuggeEKgZAVmQ5ltSdUY7H25WGSygKMUYZ0KT74v8C780qtcNt9T\n" + "7EPH/N6RvB4BprdssgcQLsthR3XKA84jbjjxNCcaGs33lvOz8A1nf8p3hD+cKfRi\n" + "kfYSW2JazLrtCC4yRCas/SPOUxu78of+3HiTfFm/oXUCAwEAAaNDMEEwDwYDVR0T\n" + "AQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwQAMB0GA1UdDgQWBBTpPBz7rZJu5gak\n" + "Viyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAiaIRqGfp1jPpNeVhABK60SU0KIAy\n" + "njuu7kHq5peUgYn8Jd9zNzExBOEp1VOipGsf6G66oQAhDFp2o8zkz7ZH71zR4HEW\n" + "KoX6n5Emn6DvcEH/9pAhnGxNHJAoS7czTKv/JDZJhkqHxyrE1fuLsg5Qv25DTw7+\n" + "PfqUpIhz5Bbm7J4=\n" "-----END CERTIFICATE-----\n"; +const gnutls_datum_t ca = { ca_pem, sizeof(ca_pem) }; + +static unsigned char cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIICHjCCAYmgAwIBAgIERiYdNzALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" + "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTI3WhcNMDgwNDE3MTMyOTI3WjAdMRsw\n" + "GQYDVQQDExJHbnVUTFMgdGVzdCBjbGllbnQwgZwwCwYJKoZIhvcNAQEBA4GMADCB\n" + "iAKBgLtmQ/Xyxde2jMzF3/WIO7HJS2oOoa0gUEAIgKFPXKPQ+GzP5jz37AR2ExeL\n" + "ZIkiW8DdU3w77XwEu4C5KL6Om8aOoKUSy/VXHqLnu7czSZ/ju0quak1o/8kR4jKN\n" + "zj2AC41179gAgY8oBAOgIo1hBAf6tjd9IQdJ0glhaZiQo1ipAgMBAAGjdjB0MAwG\n" + "A1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDwYDVR0PAQH/BAUDAweg\n" + "ADAdBgNVHQ4EFgQUTLkKm/odNON+3svSBxX+odrLaJEwHwYDVR0jBBgwFoAU6Twc\n" + "+62SbuYGpFYsouHAUyfI8pUwCwYJKoZIhvcNAQEFA4GBALujmBJVZnvaTXr9cFRJ\n" + "jpfc/3X7sLUsMvumcDE01ls/cG5mIatmiyEU9qI3jbgUf82z23ON/acwJf875D3/\n" + "U7jyOsBJ44SEQITbin2yUeJMIm1tievvdNXBDfW95AM507ShzP12sfiJkJfjjdhy\n" + "dc8Siq5JojruiMizAf0pA7in\n" "-----END CERTIFICATE-----\n"; +const gnutls_datum_t cert = { cert_pem, sizeof(cert_pem) }; + +static unsigned char key_pem[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIICXAIBAAKBgQC7ZkP18sXXtozMxd/1iDuxyUtqDqGtIFBACIChT1yj0Phsz+Y8\n" + "9+wEdhMXi2SJIlvA3VN8O+18BLuAuSi+jpvGjqClEsv1Vx6i57u3M0mf47tKrmpN\n" + "aP/JEeIyjc49gAuNde/YAIGPKAQDoCKNYQQH+rY3fSEHSdIJYWmYkKNYqQIDAQAB\n" + "AoGADpmARG5CQxS+AesNkGmpauepiCz1JBF/JwnyiX6vEzUh0Ypd39SZztwrDxvF\n" + "PJjQaKVljml1zkJpIDVsqvHdyVdse8M+Qn6hw4x2p5rogdvhhIL1mdWo7jWeVJTF\n" + "RKB7zLdMPs3ySdtcIQaF9nUAQ2KJEvldkO3m/bRJFEp54k0CQQDYy+RlTmwRD6hy\n" + "7UtMjR0H3CSZJeQ8svMCxHLmOluG9H1UKk55ZBYfRTsXniqUkJBZ5wuV1L+pR9EK\n" + "ca89a+1VAkEA3UmBelwEv2u9cAU1QjKjmwju1JgXbrjEohK+3B5y0ESEXPAwNQT9\n" + "TrDM1m9AyxYTWLxX93dI5QwNFJtmbtjeBQJARSCWXhsoaDRG8QZrCSjBxfzTCqZD\n" + "ZXtl807ymCipgJm60LiAt0JLr4LiucAsMZz6+j+quQbSakbFCACB8SLV1QJBAKZQ\n" + "YKf+EPNtnmta/rRKKvySsi3GQZZN+Dt3q0r094XgeTsAqrqujVNfPhTMeP4qEVBX\n" + "/iVX2cmMTSh3w3z8MaECQEp0XJWDVKOwcTW6Ajp9SowtmiZ3YDYo1LF9igb4iaLv\n" + "sWZGfbnU3ryjvkb6YuFjgtzbZDZHWQCo8/cOtOBmPdk=\n" + "-----END RSA PRIVATE KEY-----\n"; +const gnutls_datum_t key = { key_pem, sizeof(key_pem) }; + +struct myaes_ctx { + struct aes128_ctx aes; + unsigned char iv[16]; + int enc; +}; + +static unsigned aes_init = 0; + +static int +myaes_init(gnutls_cipher_algorithm_t algorithm, void **_ctx, int enc) +{ + if (algorithm != GNUTLS_CIPHER_AES_128_CBC) + return GNUTLS_E_INVALID_REQUEST; + + *_ctx = calloc(1, sizeof(struct myaes_ctx)); + if (*_ctx == NULL) { + return GNUTLS_E_MEMORY_ERROR; + } + + ((struct myaes_ctx *) (*_ctx))->enc = enc; + aes_init = 1; + + return 0; +} + +static int +myaes_setkey(void *_ctx, const void *userkey, size_t keysize) +{ + struct myaes_ctx *ctx = _ctx; + + assert(keysize == 16); + + if (ctx->enc) + aes128_set_encrypt_key(&ctx->aes, userkey); + else + aes128_set_decrypt_key(&ctx->aes, userkey); + + return 0; +} + +static int myaes_setiv(void *_ctx, const void *iv, size_t iv_size) +{ + struct myaes_ctx *ctx = _ctx; + + memcpy(ctx->iv, iv, 16); + return 0; +} + +static int +myaes_encrypt(void *_ctx, const void *src, size_t src_size, + void *dst, size_t dst_size) +{ + struct myaes_ctx *ctx = _ctx; + +#if 0 /* this is under the control of the caller */ + if (((unsigned long)src)%16 != 0) { + fail("encrypt: source is not 16-byte aligned: %lu\n", ((unsigned long)src)%16); + } +#endif + + if (((unsigned long)dst)%16 != 0) { + fail("encrypt: dest is not 16-byte aligned: %lu\n", ((unsigned long)dst)%16); + } + + cbc_encrypt(&ctx->aes, (nettle_cipher_func*)aes128_encrypt, 16, ctx->iv, src_size, dst, src); + return 0; +} + +static int +myaes_decrypt(void *_ctx, const void *src, size_t src_size, + void *dst, size_t dst_size) +{ + struct myaes_ctx *ctx = _ctx; + + if (((unsigned long)src)%16 != 0) { + fail("decrypt: source is not 16-byte aligned: %lu\n", ((unsigned long)src)%16); + } + +#if 0 /* this is under the control of the caller */ + if (((unsigned long)dst)%16 != 0) { + fail("decrypt: dest is not 16-byte aligned: %lu\n", ((unsigned long)dst)%16); + } +#endif + + cbc_decrypt(&ctx->aes, (nettle_cipher_func*)aes128_decrypt, 16, ctx->iv, src_size, dst, src); + + return 0; +} + +static void myaes_deinit(void *_ctx) +{ + free(_ctx); +} + +static void client(int sd, const char *prio) +{ + int ret, ii; + gnutls_session_t session; + char buffer[MAX_BUF + 1]; + gnutls_certificate_credentials_t xcred; + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + gnutls_certificate_allocate_credentials(&xcred); + + /* sets the trusted cas file + */ + gnutls_certificate_set_x509_trust_mem(xcred, &ca, + GNUTLS_X509_FMT_PEM); + gnutls_certificate_set_x509_key_mem(xcred, &cert, &key, + GNUTLS_X509_FMT_PEM); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + /* put the x509 credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + + gnutls_transport_set_int(session, sd); + + /* Perform the TLS handshake + */ + ret = gnutls_handshake(session); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + goto end; + } else if (debug) { + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + /* see the Getting peer's information example */ + if (debug) + print_info(session); + + ret = gnutls_record_send(session, MSG, strlen(MSG)); + + if (ret == strlen(MSG)) { + if (debug) + success("client: sent record.\n"); + } else { + fail("client: failed to send record.\n"); + gnutls_perror(ret); + goto end; + } + + ret = gnutls_record_recv(session, buffer, MAX_BUF); + + if (debug) + success("client: recv returned %d.\n", ret); + + if (ret == GNUTLS_E_REHANDSHAKE) { + if (debug) + success("client: doing handshake!\n"); + ret = gnutls_handshake(session); + if (ret == 0) { + if (debug) + success + ("client: handshake complete, reading again.\n"); + ret = gnutls_record_recv(session, buffer, MAX_BUF); + } else { + fail("client: handshake failed.\n"); + } + } + + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + goto end; + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + goto end; + } + + if (debug) { + printf("- Received %d bytes: ", ret); + for (ii = 0; ii < ret; ii++) { + fputc(buffer[ii], stdout); + } + fputs("\n", stdout); + } + + gnutls_bye(session, GNUTLS_SHUT_RDWR); + + end: + + close(sd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(xcred); +} + +/* This is a sample TLS 1.0 echo server, using X.509 authentication. + */ + +#define MAX_BUF 1024 + +/* These are global */ + + + +static unsigned char server_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" + "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" + "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" + "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" + "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" + "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" + "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" + "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" + "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" + "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" + "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" + "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" + "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; + +const gnutls_datum_t server_cert = { server_cert_pem, + sizeof(server_cert_pem) +}; + +static unsigned char server_key_pem[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" + "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" + "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" + "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" + "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" + "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" + "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" + "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" + "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" + "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" + "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" + "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" + "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" + "-----END RSA PRIVATE KEY-----\n"; + +const gnutls_datum_t server_key = { server_key_pem, + sizeof(server_key_pem) +}; + +static void server(int sd, const char *prio) +{ + gnutls_certificate_credentials_t x509_cred; + int ret; + gnutls_session_t session; + char buffer[MAX_BUF + 1]; + + /* this must be called once in the program + */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_trust_mem(x509_cred, &ca, + GNUTLS_X509_FMT_PEM); + + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + if (debug) + success("Launched, generating DH parameters...\n"); + + gnutls_init(&session, GNUTLS_SERVER); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, sd); + ret = gnutls_handshake(session); + if (ret < 0) { + close(sd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + return; + } + if (debug) { + success("server: Handshake was completed\n"); + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + } + + /* see the Getting peer's information example */ + if (debug) + print_info(session); + + for (;;) { + memset(buffer, 0, MAX_BUF + 1); + ret = gnutls_record_recv(session, buffer, MAX_BUF); + + if (ret == 0) { + if (debug) + success + ("server: Peer has closed the GnuTLS connection\n"); + break; + } else if (ret < 0) { + fail("server: Received corrupted data(%d). Closing...\n", ret); + break; + } else if (ret > 0) { + /* echo data back to the client + */ + gnutls_record_send(session, buffer, + strlen(buffer)); + } + } + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + if (debug) + success("server: finished\n"); +} + +static +void start(const char *prio) +{ + int sockets[2]; + int err; + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status; + + server(sockets[0], prio); + wait(&status); + check_wait_status(status); + } else { + client(sockets[1], prio); + exit(0); + } +} + +void doit(void) +{ + int ret; + + global_init(); + + ret = gnutls_crypto_register_cipher(GNUTLS_CIPHER_AES_128_CBC, 1, + myaes_init, + myaes_setkey, + myaes_setiv, + myaes_encrypt, + myaes_decrypt, + myaes_deinit); + if (ret < 0) { + fail("%d: cannot register cipher\n", __LINE__); + } + + + start("NORMAL:-CIPHER-ALL:+AES-128-CBC:-VERS-ALL:+VERS-TLS1.1"); + start("NORMAL:-CIPHER-ALL:+AES-128-CBC:-VERS-ALL:+VERS-TLS1.2"); + + assert(aes_init != 0); + + gnutls_global_deinit(); +} + +#endif /* _WIN32 */ diff --git a/tests/cipher-listings.sh b/tests/cipher-listings.sh index eb0e330b16..f11b01babb 100755 --- a/tests/cipher-listings.sh +++ b/tests/cipher-listings.sh @@ -23,6 +23,7 @@ srcdir="${srcdir:-.}" CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" DIFF="${DIFF:-diff -b -B}" +SED="${SED:-sed}" unset RETCODE TMPFILE=cipher-listings.$$.tmp @@ -45,13 +46,14 @@ fi echo "Checking ciphersuite listings" +tab=$(printf '\t') check() { prio=$2 name=$1 echo checking $prio - "${CLI}" --list --priority $prio|grep -v ^Certificate|grep -v ^Ciphers|grep -v ^MACs|grep -v ^Key|grep -v Compression|grep -v ^Elliptic|sed -e 's/\tSSL3.0$//g' -e 's/\tTLS1.0$//g'|grep -v ^PK>$TMPFILE - cat ${srcdir}/data/listings-$name|sed 's/\tSSL3.0$//g' >$TMPFILE2 + "${CLI}" --list --priority $prio|grep -v ^Certificate|grep -v ^Ciphers|grep -v ^MACs|grep -v ^Key|grep -v Compression|grep -v ^Groups|grep -v ^Elliptic|${SED} -e 's/'"${tab}"'SSL3.0$//g' -e 's/'"${tab}"'TLS1.0$//g'|grep -v ^PK>$TMPFILE + cat ${srcdir}/data/listings-$name|${SED} 's/'"${tab}"'SSL3.0$//g' >$TMPFILE2 ${DIFF} ${TMPFILE} ${TMPFILE2} if test $? != 0;then echo Error checking $prio with $name @@ -73,12 +75,23 @@ fi # This is a unit test for gnutls_priority_get_cipher_suite_index if test "${ENABLE_SSL3}" = "1";then +echo "Running with SSL3.0 enabled" check SSL3.0 "NORMAL:-VERS-ALL:+VERS-SSL3.0:+ARCFOUR-128" +check old-SSL3.0-TLS1.1 "NORMAL:-VERS-ALL:+VERS-TLS1.0:+VERS-SSL3.0:+VERS-TLS1.1" +else +echo "Running without support for SSL3.0" +check SSL3.0-TLS1.1 "NORMAL:-VERS-ALL:+VERS-TLS1.0:+VERS-SSL3.0:+VERS-TLS1.1" fi check TLS1.0 "NORMAL:-VERS-ALL:+VERS-TLS1.0" check TLS1.1 "NORMAL:-VERS-ALL:+VERS-TLS1.1" -check SSL3.0-TLS1.1 "NORMAL:-VERS-ALL:+VERS-TLS1.0:+VERS-SSL3.0:+VERS-TLS1.1" check DTLS1.0 "NORMAL:-VERS-ALL:+VERS-DTLS1.0" +# Priority strings prior to 3.6.x did not require the +GROUP option; here we +# test whether these work as expected. +check legacy1 "NONE:+VERS-TLS-ALL:+MAC-ALL:+RSA:+AES-128-GCM:+SIGN-ALL:+COMP-NULL" +check legacy2 "NONE:+VERS-TLS-ALL:+MAC-ALL:+RSA:+CAMELLIA-256-GCM:+SIGN-ALL:+COMP-NULL" +check legacy3 "NONE:+VERS-TLS-ALL:+MAC-ALL:+RSA:+CAMELLIA-256-GCM:+SIGN-ALL:+COMP-NULL:+CTYPE-OPENPGP" +check legacy4 "NONE:+VERS-TLS-ALL:+MAC-ALL:+RSA:+CAMELLIA-256-GCM:+SIGN-ALL:+COMP-NULL:-CTYPE-OPENPGP" + rm -f ${TMPFILE} rm -f ${TMPFILE2} diff --git a/tests/cipher-neg-common.c b/tests/cipher-neg-common.c new file mode 100644 index 0000000000..63c5c4487b --- /dev/null +++ b/tests/cipher-neg-common.c @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ +#include + +typedef struct test_case_st { + const char *name; + int cipher; + int group; + const char *client_prio; + const char *server_prio; + const char *desc; + unsigned not_on_fips; +} test_case_st; + +static void try(test_case_st *test) +{ + int sret, cret; + gnutls_certificate_credentials_t s_cert_cred; + gnutls_certificate_credentials_t c_cert_cred; + gnutls_session_t server, client; + + if (test->not_on_fips && gnutls_fips140_mode_enabled()) { + success("Skipping %s...\n", test->name); + return; + } + + success("Running %s...\n", test->name); + + assert(gnutls_certificate_allocate_credentials(&s_cert_cred) >= 0); + assert(gnutls_certificate_allocate_credentials(&c_cert_cred) >= 0); + + assert(gnutls_init(&server, GNUTLS_SERVER)>=0); + assert(gnutls_init(&client, GNUTLS_CLIENT)>=0); + + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, s_cert_cred); + gnutls_certificate_set_known_dh_params(s_cert_cred, GNUTLS_SEC_PARAM_MEDIUM); + + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key, GNUTLS_X509_FMT_PEM) >= 0); + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_localhost_rsa_sign_cert, &server_ca3_key, GNUTLS_X509_FMT_PEM) >= 0); + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, GNUTLS_X509_FMT_PEM) >= 0); + + gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, c_cert_cred); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + assert(gnutls_priority_set_direct(server, test->server_prio, 0) >= 0); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + assert(gnutls_priority_set_direct(client, test->client_prio, 0) >= 0); + + HANDSHAKE(client, server); + + sret = gnutls_cipher_get(client); + cret = gnutls_cipher_get(server); + + if (test->desc) { + char *desc1 = gnutls_session_get_desc(server); + char *desc2 = gnutls_session_get_desc(client); + + if (strcmp(desc1, desc2) != 0) + fail("server and client session description don't match (%s, %s)\n", desc1, desc2); + + if (strcmp(desc1, test->desc) != 0) + fail("session and expected session description don't match (%s, %s)\n", desc1, test->desc); + gnutls_free(desc1); + gnutls_free(desc2); + } + + if (sret != cret) { + fail("%s: client negotiated different cipher than server (%s, %s)!\n", + test->name, gnutls_cipher_get_name(cret), + gnutls_cipher_get_name(sret)); + } + + if (cret != test->cipher) { + fail("%s: negotiated cipher differs with the expected (%s, %s)!\n", + test->name, gnutls_cipher_get_name(cret), + gnutls_cipher_get_name(test->cipher)); + } + + if (test->group) { + sret = gnutls_group_get(client); + cret = gnutls_group_get(server); + + if (sret != cret) { + fail("%s: client negotiated different group than server (%s, %s)!\n", + test->name, gnutls_group_get_name(cret), + gnutls_group_get_name(sret)); + } + + if (cret != test->group) { + fail("%s: negotiated group differs with the expected (%s, %s)!\n", + test->name, gnutls_group_get_name(cret), + gnutls_group_get_name(test->group)); + } + } + + gnutls_deinit(server); + gnutls_deinit(client); + gnutls_certificate_free_credentials(s_cert_cred); + gnutls_certificate_free_credentials(c_cert_cred); + + reset_buffers(); +} diff --git a/tests/client-fastopen.c b/tests/client-fastopen.c index 9211c44a7c..e047356989 100644 --- a/tests/client-fastopen.c +++ b/tests/client-fastopen.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Red Hat, Inc. + * Copyright (C) 2016-2018 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -15,9 +15,9 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * */ #ifdef HAVE_CONFIG_H @@ -27,6 +27,9 @@ #include #include +/* This tests gnutls_transport_set_fastopen() operation. + */ + #if defined(_WIN32) int main() @@ -48,6 +51,7 @@ int main() #include #include #include +#include #include "cert-common.h" #include "utils.h" @@ -65,7 +69,8 @@ static void client_log_func(int level, const char *str) #define MAX_BUF 1024 -static void client(int fd, struct sockaddr *connect_addr, socklen_t connect_addrlen) +static void client(int fd, struct sockaddr *connect_addr, socklen_t connect_addrlen, + const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -87,9 +92,7 @@ static void client(int fd, struct sockaddr *connect_addr, socklen_t connect_addr gnutls_handshake_set_timeout(session, 20 * 1000); /* Use default priorities */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -103,8 +106,7 @@ static void client(int fd, struct sockaddr *connect_addr, socklen_t connect_addr while (ret < 0 && gnutls_error_is_fatal(ret) == 0); if (ret < 0) { - fail("client: Handshake failed\n"); - gnutls_perror(ret); + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); exit(1); } else { if (debug) @@ -152,14 +154,11 @@ pid_t child; static void terminate(void) { - int status; - kill(child, SIGTERM); - wait(&status); exit(1); } -static void server(int fd) +static void server(int fd, const char *prio) { int ret; gnutls_certificate_credentials_t xcred; @@ -189,9 +188,7 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -248,7 +245,13 @@ static void server(int fd) success("server: finished\n"); } -void doit(void) +static void ch_handler(int sig) +{ + return; +} + +static +void run(const char *name, const char *prio) { int ret; struct sockaddr_in saddr; @@ -256,6 +259,9 @@ void doit(void) int listener; int fd; + success("running fast open test for %s\n", name); + + signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); listener = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); @@ -295,16 +301,23 @@ void doit(void) if (fd == -1) fail("error in accept: %s\n", strerror(errno)); - server(fd); + server(fd, prio); wait(&status); check_wait_status(status); } else { fd = socket(AF_INET, SOCK_STREAM, 0); - client(fd, (struct sockaddr*)&saddr, addrlen); + usleep(1000000); + client(fd, (struct sockaddr*)&saddr, addrlen, prio); exit(0); } } +void doit(void) +{ + run("tls1.2", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA"); + run("tls1.3", "NORMAL:-VERS-ALL:+VERS-TLS1.3"); +} + #endif /* _WIN32 */ diff --git a/tests/client-interesting/client1.raw b/tests/client-interesting/client1.raw deleted file mode 100644 index d2fce92c92..0000000000 Binary files a/tests/client-interesting/client1.raw and /dev/null differ diff --git a/tests/client-interesting/client2.raw b/tests/client-interesting/client2.raw deleted file mode 100644 index 5939b164ec..0000000000 Binary files a/tests/client-interesting/client2.raw and /dev/null differ diff --git a/tests/client-interesting/client3.disabled b/tests/client-interesting/client3.disabled deleted file mode 100644 index 8039698da0..0000000000 Binary files a/tests/client-interesting/client3.disabled and /dev/null differ diff --git a/tests/client-interesting/client3.raw b/tests/client-interesting/client3.raw deleted file mode 100644 index 1eba177de9..0000000000 Binary files a/tests/client-interesting/client3.raw and /dev/null differ diff --git a/tests/client-sign-md5-rep.c b/tests/client-sign-md5-rep.c new file mode 100644 index 0000000000..1c7877fbd5 --- /dev/null +++ b/tests/client-sign-md5-rep.c @@ -0,0 +1,499 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +/* This tests whether a client will reject a server advertising + * an MD5 signature algorithm */ + +#if defined(_WIN32) || !defined(ENABLE_SSL2) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +pid_t child; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s |<%d>| %s", "client", level, + str); +} + + +static unsigned char tls1_hello[] = { /* server hello etc. */ +0x16, 0x03, 0x03, 0x00, 0x39, 0x02, 0x00, 0x00, 0x35, 0x03, 0x03, 0x95, 0x66, 0x0A, 0x55, 0xBC, +0x04, 0x84, 0xBD, 0x7E, 0xA6, 0xCE, 0x2B, 0x1C, 0x7B, 0x72, 0x28, 0x0D, 0x8E, 0x2C, 0x34, 0xC8, +0xFF, 0x73, 0xBA, 0x6C, 0x9F, 0x20, 0xB9, 0x18, 0xCD, 0x22, 0xCB, 0x00, 0x00, 0x9E, 0x00, 0x00, +0x0D, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x16, 0x03, +0x03, 0x10, 0xE3, 0x0B, 0x00, 0x10, 0xDF, 0x00, 0x10, 0xDC, 0x00, 0x05, 0x4F, 0x30, 0x82, 0x05, +0x4B, 0x30, 0x82, 0x04, 0x33, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x4C, 0x8E, 0x18, 0x71, +0x4B, 0x34, 0xE7, 0x5E, 0x8D, 0xAE, 0xFB, 0xE8, 0xF6, 0x4C, 0x3A, 0x82, 0x30, 0x0D, 0x06, 0x09, +0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, 0x81, 0x90, 0x31, 0x0B, +0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1B, 0x30, 0x19, 0x06, +0x03, 0x55, 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4D, 0x61, +0x6E, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, +0x07, 0x13, 0x07, 0x53, 0x61, 0x6C, 0x66, 0x6F, 0x72, 0x64, 0x31, 0x1A, 0x30, 0x18, 0x06, 0x03, +0x55, 0x04, 0x0A, 0x13, 0x11, 0x43, 0x4F, 0x4D, 0x4F, 0x44, 0x4F, 0x20, 0x43, 0x41, 0x20, 0x4C, +0x69, 0x6D, 0x69, 0x74, 0x65, 0x64, 0x31, 0x36, 0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, +0x2D, 0x43, 0x4F, 0x4D, 0x4F, 0x44, 0x4F, 0x20, 0x52, 0x53, 0x41, 0x20, 0x44, 0x6F, 0x6D, 0x61, +0x69, 0x6E, 0x20, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x53, 0x65, +0x63, 0x75, 0x72, 0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x43, 0x41, 0x30, 0x1E, +0x17, 0x0D, 0x31, 0x36, 0x30, 0x37, 0x30, 0x37, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x17, +0x0D, 0x31, 0x37, 0x30, 0x39, 0x30, 0x35, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5A, 0x30, 0x59, +0x31, 0x21, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x18, 0x44, 0x6F, 0x6D, 0x61, 0x69, +0x6E, 0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x20, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x61, +0x74, 0x65, 0x64, 0x31, 0x1D, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x14, 0x50, 0x6F, +0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x53, 0x53, 0x4C, 0x20, 0x57, 0x69, 0x6C, 0x64, 0x63, 0x61, +0x72, 0x64, 0x31, 0x15, 0x30, 0x13, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x0C, 0x2A, 0x2E, 0x62, +0x61, 0x64, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, +0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, +0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0xC2, 0x04, 0xEC, 0xF8, 0x8C, 0xEE, +0x04, 0xC2, 0xB3, 0xD8, 0x50, 0xD5, 0x70, 0x58, 0xCC, 0x93, 0x18, 0xEB, 0x5C, 0xA8, 0x68, 0x49, +0xB0, 0x22, 0xB5, 0xF9, 0x95, 0x9E, 0xB1, 0x2B, 0x2C, 0x76, 0x3E, 0x6C, 0xC0, 0x4B, 0x60, 0x4C, +0x4C, 0xEA, 0xB2, 0xB4, 0xC0, 0x0F, 0x80, 0xB6, 0xB0, 0xF9, 0x72, 0xC9, 0x86, 0x02, 0xF9, 0x5C, +0x41, 0x5D, 0x13, 0x2B, 0x7F, 0x71, 0xC4, 0x4B, 0xBC, 0xE9, 0x94, 0x2E, 0x50, 0x37, 0xA6, 0x67, +0x1C, 0x61, 0x8C, 0xF6, 0x41, 0x42, 0xC5, 0x46, 0xD3, 0x16, 0x87, 0x27, 0x9F, 0x74, 0xEB, 0x0A, +0x9D, 0x11, 0x52, 0x26, 0x21, 0x73, 0x6C, 0x84, 0x4C, 0x79, 0x55, 0xE4, 0xD1, 0x6B, 0xE8, 0x06, +0x3D, 0x48, 0x15, 0x52, 0xAD, 0xB3, 0x28, 0xDB, 0xAA, 0xFF, 0x6E, 0xFF, 0x60, 0x95, 0x4A, 0x77, +0x6B, 0x39, 0xF1, 0x24, 0xD1, 0x31, 0xB6, 0xDD, 0x4D, 0xC0, 0xC4, 0xFC, 0x53, 0xB9, 0x6D, 0x42, +0xAD, 0xB5, 0x7C, 0xFE, 0xAE, 0xF5, 0x15, 0xD2, 0x33, 0x48, 0xE7, 0x22, 0x71, 0xC7, 0xC2, 0x14, +0x7A, 0x6C, 0x28, 0xEA, 0x37, 0x4A, 0xDF, 0xEA, 0x6C, 0xB5, 0x72, 0xB4, 0x7E, 0x5A, 0xA2, 0x16, +0xDC, 0x69, 0xB1, 0x57, 0x44, 0xDB, 0x0A, 0x12, 0xAB, 0xDE, 0xC3, 0x0F, 0x47, 0x74, 0x5C, 0x41, +0x22, 0xE1, 0x9A, 0xF9, 0x1B, 0x93, 0xE6, 0xAD, 0x22, 0x06, 0x29, 0x2E, 0xB1, 0xBA, 0x49, 0x1C, +0x0C, 0x27, 0x9E, 0xA3, 0xFB, 0x8B, 0xF7, 0x40, 0x72, 0x00, 0xAC, 0x92, 0x08, 0xD9, 0x8C, 0x57, +0x84, 0x53, 0x81, 0x05, 0xCB, 0xE6, 0xFE, 0x6B, 0x54, 0x98, 0x40, 0x27, 0x85, 0xC7, 0x10, 0xBB, +0x73, 0x70, 0xEF, 0x69, 0x18, 0x41, 0x07, 0x45, 0x55, 0x7C, 0xF9, 0x64, 0x3F, 0x3D, 0x2C, 0xC3, +0xA9, 0x7C, 0xEB, 0x93, 0x1A, 0x4C, 0x86, 0xD1, 0xCA, 0x85, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, +0x82, 0x01, 0xD5, 0x30, 0x82, 0x01, 0xD1, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, +0x30, 0x16, 0x80, 0x14, 0x90, 0xAF, 0x6A, 0x3A, 0x94, 0x5A, 0x0B, 0xD8, 0x90, 0xEA, 0x12, 0x56, +0x73, 0xDF, 0x43, 0xB4, 0x3A, 0x28, 0xDA, 0xE7, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, +0x16, 0x04, 0x14, 0x9D, 0xEE, 0xC1, 0x7B, 0x81, 0x0B, 0x3A, 0x47, 0x69, 0x71, 0x18, 0x7D, 0x11, +0x37, 0x93, 0xBC, 0xA5, 0x1B, 0x3F, 0xFB, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, +0xFF, 0x04, 0x04, 0x03, 0x02, 0x05, 0xA0, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, +0xFF, 0x04, 0x02, 0x30, 0x00, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, 0x16, 0x30, 0x14, +0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, +0x05, 0x07, 0x03, 0x02, 0x30, 0x4F, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, 0x48, 0x30, 0x46, 0x30, +0x3A, 0x06, 0x0B, 0x2B, 0x06, 0x01, 0x04, 0x01, 0xB2, 0x31, 0x01, 0x02, 0x02, 0x07, 0x30, 0x2B, +0x30, 0x29, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, 0x16, 0x1D, 0x68, 0x74, +0x74, 0x70, 0x73, 0x3A, 0x2F, 0x2F, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x2E, 0x63, 0x6F, 0x6D, +0x6F, 0x64, 0x6F, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x43, 0x50, 0x53, 0x30, 0x08, 0x06, 0x06, 0x67, +0x81, 0x0C, 0x01, 0x02, 0x01, 0x30, 0x54, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x4D, 0x30, 0x4B, +0x30, 0x49, 0xA0, 0x47, 0xA0, 0x45, 0x86, 0x43, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, +0x72, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x6F, 0x64, 0x6F, 0x63, 0x61, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, +0x43, 0x4F, 0x4D, 0x4F, 0x44, 0x4F, 0x52, 0x53, 0x41, 0x44, 0x6F, 0x6D, 0x61, 0x69, 0x6E, 0x56, +0x61, 0x6C, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, +0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x81, 0x85, 0x06, 0x08, +0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x79, 0x30, 0x77, 0x30, 0x4F, 0x06, 0x08, +0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x43, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, +0x2F, 0x63, 0x72, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x6F, 0x64, 0x6F, 0x63, 0x61, 0x2E, 0x63, 0x6F, +0x6D, 0x2F, 0x43, 0x4F, 0x4D, 0x4F, 0x44, 0x4F, 0x52, 0x53, 0x41, 0x44, 0x6F, 0x6D, 0x61, 0x69, +0x6E, 0x56, 0x61, 0x6C, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x53, 0x65, 0x63, 0x75, 0x72, +0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x41, 0x2E, 0x63, 0x72, 0x74, 0x30, 0x24, 0x06, +0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, 0x18, 0x68, 0x74, 0x74, 0x70, 0x3A, +0x2F, 0x2F, 0x6F, 0x63, 0x73, 0x70, 0x2E, 0x63, 0x6F, 0x6D, 0x6F, 0x64, 0x6F, 0x63, 0x61, 0x2E, +0x63, 0x6F, 0x6D, 0x30, 0x23, 0x06, 0x03, 0x55, 0x1D, 0x11, 0x04, 0x1C, 0x30, 0x1A, 0x82, 0x0C, +0x2A, 0x2E, 0x62, 0x61, 0x64, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x82, 0x0A, 0x62, 0x61, +0x64, 0x73, 0x73, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, +0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x75, 0x48, 0x83, 0x88, +0x9C, 0x55, 0x24, 0x37, 0x30, 0x07, 0xEB, 0x26, 0x68, 0xC8, 0x79, 0x1C, 0x5C, 0xAE, 0x9A, 0x02, +0x9A, 0xB5, 0x52, 0x75, 0x44, 0xAC, 0xA9, 0xED, 0x59, 0x65, 0xD0, 0xC6, 0x47, 0x26, 0x04, 0x8D, +0x57, 0x89, 0x16, 0x2E, 0x71, 0x18, 0x48, 0x98, 0x68, 0x1C, 0xF6, 0x31, 0xF5, 0x26, 0x4B, 0xE8, +0x81, 0x44, 0xB1, 0xFF, 0x5C, 0x65, 0x3D, 0x78, 0x54, 0x94, 0xC3, 0x86, 0x9D, 0x48, 0x96, 0xE8, +0x32, 0xAF, 0xE1, 0x8F, 0x94, 0x47, 0xBE, 0x37, 0x8C, 0xC3, 0xED, 0x4D, 0x97, 0xBB, 0xC6, 0x2A, +0x37, 0x72, 0x01, 0x3A, 0x8F, 0x82, 0xA4, 0x34, 0x44, 0xC4, 0xC4, 0xF8, 0x50, 0x24, 0x48, 0x9E, +0x19, 0xF0, 0xEC, 0xE1, 0xC6, 0x13, 0x44, 0x26, 0xB6, 0x65, 0xE1, 0x62, 0x49, 0x87, 0xA4, 0xF4, +0xD8, 0xC4, 0x39, 0x3C, 0x7D, 0x42, 0xC8, 0xA4, 0x2A, 0x54, 0x05, 0xA0, 0xDC, 0x0A, 0xF8, 0x2B, +0x22, 0x94, 0x93, 0x78, 0x4E, 0x6A, 0x36, 0x1B, 0xD2, 0xE7, 0xE9, 0xAE, 0x84, 0xED, 0x13, 0x1D, +0xA1, 0xF7, 0xA2, 0x83, 0x81, 0x03, 0x4C, 0x9E, 0x21, 0xFB, 0xBF, 0xA8, 0x30, 0xFE, 0xEB, 0x00, +0x68, 0xB1, 0x7F, 0xBA, 0x5D, 0xE2, 0x5D, 0xFF, 0x41, 0x1F, 0xD6, 0xF5, 0xA6, 0x5C, 0x8A, 0xEF, +0x81, 0x80, 0xC8, 0xF1, 0x52, 0x00, 0x17, 0x9D, 0xD1, 0x96, 0x1A, 0x7D, 0x5E, 0xD2, 0x83, 0xB3, +0x82, 0xC2, 0x3D, 0x46, 0x83, 0xA5, 0x1E, 0xB4, 0x36, 0x35, 0x38, 0xC4, 0x7A, 0x2E, 0xDF, 0x0B, +0xA1, 0x98, 0x63, 0x58, 0x0B, 0x1E, 0xD0, 0x6D, 0x83, 0x1F, 0xF1, 0x72, 0x4D, 0x09, 0xAC, 0x96, +0x1A, 0x0B, 0xE5, 0xF6, 0x34, 0x4C, 0xAB, 0xBC, 0xBC, 0x99, 0x5B, 0x82, 0x59, 0xE6, 0x6C, 0xD3, +0xDB, 0x98, 0xE0, 0xCE, 0x95, 0x3B, 0xCF, 0x4E, 0x17, 0xC3, 0xEE, 0x3A, 0x00, 0x06, 0x0C, 0x30, +0x82, 0x06, 0x08, 0x30, 0x82, 0x03, 0xF0, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x2B, 0x2E, +0x6E, 0xEA, 0xD9, 0x75, 0x36, 0x6C, 0x14, 0x8A, 0x6E, 0xDB, 0xA3, 0x7C, 0x8C, 0x07, 0x30, 0x0D, +0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0C, 0x05, 0x00, 0x30, 0x81, 0x85, +0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1B, 0x30, +0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, +0x4D, 0x61, 0x6E, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, +0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6C, 0x66, 0x6F, 0x72, 0x64, 0x31, 0x1A, 0x30, 0x18, +0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x11, 0x43, 0x4F, 0x4D, 0x4F, 0x44, 0x4F, 0x20, 0x43, 0x41, +0x20, 0x4C, 0x69, 0x6D, 0x69, 0x74, 0x65, 0x64, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, +0x03, 0x13, 0x22, 0x43, 0x4F, 0x4D, 0x4F, 0x44, 0x4F, 0x20, 0x52, 0x53, 0x41, 0x20, 0x43, 0x65, +0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x41, 0x75, 0x74, 0x68, +0x6F, 0x72, 0x69, 0x74, 0x79, 0x30, 0x1E, 0x17, 0x0D, 0x31, 0x34, 0x30, 0x32, 0x31, 0x32, 0x30, +0x30, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x17, 0x0D, 0x32, 0x39, 0x30, 0x32, 0x31, 0x31, 0x32, 0x33, +0x35, 0x39, 0x35, 0x39, 0x5A, 0x30, 0x81, 0x90, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, +0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1B, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, +0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x4D, 0x61, 0x6E, 0x63, 0x68, 0x65, 0x73, 0x74, +0x65, 0x72, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6C, +0x66, 0x6F, 0x72, 0x64, 0x31, 0x1A, 0x30, 0x18, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x11, 0x43, +0x4F, 0x4D, 0x4F, 0x44, 0x4F, 0x20, 0x43, 0x41, 0x20, 0x4C, 0x69, 0x6D, 0x69, 0x74, 0x65, 0x64, +0x31, 0x36, 0x30, 0x34, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x2D, 0x43, 0x4F, 0x4D, 0x4F, 0x44, +0x4F, 0x20, 0x52, 0x53, 0x41, 0x20, 0x44, 0x6F, 0x6D, 0x61, 0x69, 0x6E, 0x20, 0x56, 0x61, 0x6C, +0x69, 0x64, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x53, +0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x43, 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, +0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, +0x30, 0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, 0x8E, 0xC2, 0x02, 0x19, 0xE1, 0xA0, 0x59, +0xA4, 0xEB, 0x38, 0x35, 0x8D, 0x2C, 0xFD, 0x01, 0xD0, 0xD3, 0x49, 0xC0, 0x64, 0xC7, 0x0B, 0x62, +0x05, 0x45, 0x16, 0x3A, 0xA8, 0xA0, 0xC0, 0x0C, 0x02, 0x7F, 0x1D, 0xCC, 0xDB, 0xC4, 0xA1, 0x6D, +0x77, 0x03, 0xA3, 0x0F, 0x86, 0xF9, 0xE3, 0x06, 0x9C, 0x3E, 0x0B, 0x81, 0x8A, 0x9B, 0x49, 0x1B, +0xAD, 0x03, 0xBE, 0xFA, 0x4B, 0xDB, 0x8C, 0x20, 0xED, 0xD5, 0xCE, 0x5E, 0x65, 0x8E, 0x3E, 0x0D, +0xAF, 0x4C, 0xC2, 0xB0, 0xB7, 0x45, 0x5E, 0x52, 0x2F, 0x34, 0xDE, 0x48, 0x24, 0x64, 0xB4, 0x41, +0xAE, 0x00, 0x97, 0xF7, 0xBE, 0x67, 0xDE, 0x9E, 0xD0, 0x7A, 0xA7, 0x53, 0x80, 0x3B, 0x7C, 0xAD, +0xF5, 0x96, 0x55, 0x6F, 0x97, 0x47, 0x0A, 0x7C, 0x85, 0x8B, 0x22, 0x97, 0x8D, 0xB3, 0x84, 0xE0, +0x96, 0x57, 0xD0, 0x70, 0x18, 0x60, 0x96, 0x8F, 0xEE, 0x2D, 0x07, 0x93, 0x9D, 0xA1, 0xBA, 0xCA, +0xD1, 0xCD, 0x7B, 0xE9, 0xC4, 0x2A, 0x9A, 0x28, 0x21, 0x91, 0x4D, 0x6F, 0x92, 0x4F, 0x25, 0xA5, +0xF2, 0x7A, 0x35, 0xDD, 0x26, 0xDC, 0x46, 0xA5, 0xD0, 0xAC, 0x59, 0x35, 0x8C, 0xFF, 0x4E, 0x91, +0x43, 0x50, 0x3F, 0x59, 0x93, 0x1E, 0x6C, 0x51, 0x21, 0xEE, 0x58, 0x14, 0xAB, 0xFE, 0x75, 0x50, +0x78, 0x3E, 0x4C, 0xB0, 0x1C, 0x86, 0x13, 0xFA, 0x6B, 0x98, 0xBC, 0xE0, 0x3B, 0x94, 0x1E, 0x85, +0x52, 0xDC, 0x03, 0x93, 0x24, 0x18, 0x6E, 0xCB, 0x27, 0x51, 0x45, 0xE6, 0x70, 0xDE, 0x25, 0x43, +0xA4, 0x0D, 0xE1, 0x4A, 0xA5, 0xED, 0xB6, 0x7E, 0xC8, 0xCD, 0x6D, 0xEE, 0x2E, 0x1D, 0x27, 0x73, +0x5D, 0xDC, 0x45, 0x30, 0x80, 0xAA, 0xE3, 0xB2, 0x41, 0x0B, 0xAF, 0xBD, 0x44, 0x87, 0xDA, 0xB9, +0xE5, 0x1B, 0x9D, 0x7F, 0xAE, 0xE5, 0x85, 0x82, 0xA5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, +0x01, 0x65, 0x30, 0x82, 0x01, 0x61, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, +0x16, 0x80, 0x14, 0xBB, 0xAF, 0x7E, 0x02, 0x3D, 0xFA, 0xA6, 0xF1, 0x3C, 0x84, 0x8E, 0xAD, 0xEE, +0x38, 0x98, 0xEC, 0xD9, 0x32, 0x32, 0xD4, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, +0x04, 0x14, 0x90, 0xAF, 0x6A, 0x3A, 0x94, 0x5A, 0x0B, 0xD8, 0x90, 0xEA, 0x12, 0x56, 0x73, 0xDF, +0x43, 0xB4, 0x3A, 0x28, 0xDA, 0xE7, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, +0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, +0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xFF, 0x02, 0x01, 0x00, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, +0x25, 0x04, 0x16, 0x30, 0x14, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x06, +0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x02, 0x30, 0x1B, 0x06, 0x03, 0x55, 0x1D, 0x20, +0x04, 0x14, 0x30, 0x12, 0x30, 0x06, 0x06, 0x04, 0x55, 0x1D, 0x20, 0x00, 0x30, 0x08, 0x06, 0x06, +0x67, 0x81, 0x0C, 0x01, 0x02, 0x01, 0x30, 0x4C, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x45, 0x30, +0x43, 0x30, 0x41, 0xA0, 0x3F, 0xA0, 0x3D, 0x86, 0x3B, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, +0x63, 0x72, 0x6C, 0x2E, 0x63, 0x6F, 0x6D, 0x6F, 0x64, 0x6F, 0x63, 0x61, 0x2E, 0x63, 0x6F, 0x6D, +0x2F, 0x43, 0x4F, 0x4D, 0x4F, 0x44, 0x4F, 0x52, 0x53, 0x41, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, +0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x41, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x69, 0x74, 0x79, +0x2E, 0x63, 0x72, 0x6C, 0x30, 0x71, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, +0x04, 0x65, 0x30, 0x63, 0x30, 0x3B, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, +0x86, 0x2F, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, 0x72, 0x74, 0x2E, 0x63, 0x6F, 0x6D, +0x6F, 0x64, 0x6F, 0x63, 0x61, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x43, 0x4F, 0x4D, 0x4F, 0x44, 0x4F, +0x52, 0x53, 0x41, 0x41, 0x64, 0x64, 0x54, 0x72, 0x75, 0x73, 0x74, 0x43, 0x41, 0x2E, 0x63, 0x72, +0x74, 0x30, 0x24, 0x06, 0x08, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, 0x18, 0x68, +0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x6F, 0x63, 0x73, 0x70, 0x2E, 0x63, 0x6F, 0x6D, 0x6F, 0x64, +0x6F, 0x63, 0x61, 0x2E, 0x63, 0x6F, 0x6D, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, +0x0D, 0x01, 0x01, 0x0C, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x4E, 0x2B, 0x76, 0x4F, 0x92, +0x1C, 0x62, 0x36, 0x89, 0xBA, 0x77, 0xC1, 0x27, 0x05, 0xF4, 0x1C, 0xD6, 0x44, 0x9D, 0xA9, 0x9A, +0x3E, 0xAA, 0xD5, 0x66, 0x66, 0x01, 0x3E, 0xEA, 0x49, 0xE6, 0xA2, 0x35, 0xBC, 0xFA, 0xF6, 0xDD, +0x95, 0x8E, 0x99, 0x35, 0x98, 0x0E, 0x36, 0x18, 0x75, 0xB1, 0xDD, 0xDD, 0x50, 0x72, 0x7C, 0xAE, +0xDC, 0x77, 0x88, 0xCE, 0x0F, 0xF7, 0x90, 0x20, 0xCA, 0xA3, 0x67, 0x2E, 0x1F, 0x56, 0x7F, 0x7B, +0xE1, 0x44, 0xEA, 0x42, 0x95, 0xC4, 0x5D, 0x0D, 0x01, 0x50, 0x46, 0x15, 0xF2, 0x81, 0x89, 0x59, +0x6C, 0x8A, 0xDD, 0x8C, 0xF1, 0x12, 0xA1, 0x8D, 0x3A, 0x42, 0x8A, 0x98, 0xF8, 0x4B, 0x34, 0x7B, +0x27, 0x3B, 0x08, 0xB4, 0x6F, 0x24, 0x3B, 0x72, 0x9D, 0x63, 0x74, 0x58, 0x3C, 0x1A, 0x6C, 0x3F, +0x4F, 0xC7, 0x11, 0x9A, 0xC8, 0xA8, 0xF5, 0xB5, 0x37, 0xEF, 0x10, 0x45, 0xC6, 0x6C, 0xD9, 0xE0, +0x5E, 0x95, 0x26, 0xB3, 0xEB, 0xAD, 0xA3, 0xB9, 0xEE, 0x7F, 0x0C, 0x9A, 0x66, 0x35, 0x73, 0x32, +0x60, 0x4E, 0xE5, 0xDD, 0x8A, 0x61, 0x2C, 0x6E, 0x52, 0x11, 0x77, 0x68, 0x96, 0xD3, 0x18, 0x75, +0x51, 0x15, 0x00, 0x1B, 0x74, 0x88, 0xDD, 0xE1, 0xC7, 0x38, 0x04, 0x43, 0x28, 0xE9, 0x16, 0xFD, +0xD9, 0x05, 0xD4, 0x5D, 0x47, 0x27, 0x60, 0xD6, 0xFB, 0x38, 0x3B, 0x6C, 0x72, 0xA2, 0x94, 0xF8, +0x42, 0x1A, 0xDF, 0xED, 0x6F, 0x06, 0x8C, 0x45, 0xC2, 0x06, 0x00, 0xAA, 0xE4, 0xE8, 0xDC, 0xD9, +0xB5, 0xE1, 0x73, 0x78, 0xEC, 0xF6, 0x23, 0xDC, 0xD1, 0xDD, 0x6C, 0x8E, 0x1A, 0x8F, 0xA5, 0xEA, +0x54, 0x7C, 0x96, 0xB7, 0xC3, 0xFE, 0x55, 0x8E, 0x8D, 0x49, 0x5E, 0xFC, 0x64, 0xBB, 0xCF, 0x3E, +0xBD, 0x96, 0xEB, 0x69, 0xCD, 0xBF, 0xE0, 0x48, 0xF1, 0x62, 0x82, 0x10, 0xE5, 0x0C, 0x46, 0x57, +0xF2, 0x33, 0xDA, 0xD0, 0xC8, 0x63, 0xED, 0xC6, 0x1F, 0x94, 0x05, 0x96, 0x4A, 0x1A, 0x91, 0xD1, +0xF7, 0xEB, 0xCF, 0x8F, 0x52, 0xAE, 0x0D, 0x08, 0xD9, 0x3E, 0xA8, 0xA0, 0x51, 0xE9, 0xC1, 0x87, +0x74, 0xD5, 0xC9, 0xF7, 0x74, 0xAB, 0x2E, 0x53, 0xFB, 0xBB, 0x7A, 0xFB, 0x97, 0xE2, 0xF8, 0x1F, +0x26, 0x8F, 0xB3, 0xD2, 0xA0, 0xE0, 0x37, 0x5B, 0x28, 0x3B, 0x31, 0xE5, 0x0E, 0x57, 0x2D, 0x5A, +0xB8, 0xAD, 0x79, 0xAC, 0x5E, 0x20, 0x66, 0x1A, 0xA5, 0xB9, 0xA6, 0xB5, 0x39, 0xC1, 0xF5, 0x98, +0x43, 0xFF, 0xEE, 0xF9, 0xA7, 0xA7, 0xFD, 0xEE, 0xCA, 0x24, 0x3D, 0x80, 0x16, 0xC4, 0x17, 0x8F, +0x8A, 0xC1, 0x60, 0xA1, 0x0C, 0xAE, 0x5B, 0x43, 0x47, 0x91, 0x4B, 0xD5, 0x9A, 0x17, 0x5F, 0xF9, +0xD4, 0x87, 0xC1, 0xC2, 0x8C, 0xB7, 0xE7, 0xE2, 0x0F, 0x30, 0x19, 0x37, 0x86, 0xAC, 0xE0, 0xDC, +0x42, 0x03, 0xE6, 0x94, 0xA8, 0x9D, 0xAE, 0xFD, 0x0F, 0x24, 0x51, 0x94, 0xCE, 0x92, 0x08, 0xD1, +0xFC, 0x50, 0xF0, 0x03, 0x40, 0x7B, 0x88, 0x59, 0xED, 0x0E, 0xDD, 0xAC, 0xD2, 0x77, 0x82, 0x34, +0xDC, 0x06, 0x95, 0x02, 0xD8, 0x90, 0xF9, 0x2D, 0xEA, 0x37, 0xD5, 0x1A, 0x60, 0xD0, 0x67, 0x20, +0xD7, 0xD8, 0x42, 0x0B, 0x45, 0xAF, 0x82, 0x68, 0xDE, 0xDD, 0x66, 0x24, 0x37, 0x90, 0x29, 0x94, +0x19, 0x46, 0x19, 0x25, 0xB8, 0x80, 0xD7, 0xCB, 0xD4, 0x86, 0x28, 0x6A, 0x44, 0x70, 0x26, 0x23, +0x62, 0xA9, 0x9F, 0x86, 0x6F, 0xBF, 0xBA, 0x90, 0x70, 0xD2, 0x56, 0x77, 0x85, 0x78, 0xEF, 0xEA, +0x25, 0xA9, 0x17, 0xCE, 0x50, 0x72, 0x8C, 0x00, 0x3A, 0xAA, 0xE3, 0xDB, 0x63, 0x34, 0x9F, 0xF8, +0x06, 0x71, 0x01, 0xE2, 0x82, 0x20, 0xD4, 0xFE, 0x6F, 0xBD, 0xB1, 0x00, 0x05, 0x78, 0x30, 0x82, +0x05, 0x74, 0x30, 0x82, 0x04, 0x5C, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x27, 0x66, 0xEE, +0x56, 0xEB, 0x49, 0xF3, 0x8E, 0xAB, 0xD7, 0x70, 0xA2, 0xFC, 0x84, 0xDE, 0x22, 0x30, 0x0D, 0x06, +0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0C, 0x05, 0x00, 0x30, 0x6F, 0x31, 0x0B, +0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x53, 0x45, 0x31, 0x14, 0x30, 0x12, 0x06, +0x03, 0x55, 0x04, 0x0A, 0x13, 0x0B, 0x41, 0x64, 0x64, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x41, +0x42, 0x31, 0x26, 0x30, 0x24, 0x06, 0x03, 0x55, 0x04, 0x0B, 0x13, 0x1D, 0x41, 0x64, 0x64, 0x54, +0x72, 0x75, 0x73, 0x74, 0x20, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6E, 0x61, 0x6C, 0x20, 0x54, 0x54, +0x50, 0x20, 0x4E, 0x65, 0x74, 0x77, 0x6F, 0x72, 0x6B, 0x31, 0x22, 0x30, 0x20, 0x06, 0x03, 0x55, +0x04, 0x03, 0x13, 0x19, 0x41, 0x64, 0x64, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x45, 0x78, 0x74, +0x65, 0x72, 0x6E, 0x61, 0x6C, 0x20, 0x43, 0x41, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x30, 0x1E, 0x17, +0x0D, 0x30, 0x30, 0x30, 0x35, 0x33, 0x30, 0x31, 0x30, 0x34, 0x38, 0x33, 0x38, 0x5A, 0x17, 0x0D, +0x32, 0x30, 0x30, 0x35, 0x33, 0x30, 0x31, 0x30, 0x34, 0x38, 0x33, 0x38, 0x5A, 0x30, 0x81, 0x85, +0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x47, 0x42, 0x31, 0x1B, 0x30, +0x19, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x12, 0x47, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, +0x4D, 0x61, 0x6E, 0x63, 0x68, 0x65, 0x73, 0x74, 0x65, 0x72, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, +0x55, 0x04, 0x07, 0x13, 0x07, 0x53, 0x61, 0x6C, 0x66, 0x6F, 0x72, 0x64, 0x31, 0x1A, 0x30, 0x18, +0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x11, 0x43, 0x4F, 0x4D, 0x4F, 0x44, 0x4F, 0x20, 0x43, 0x41, +0x20, 0x4C, 0x69, 0x6D, 0x69, 0x74, 0x65, 0x64, 0x31, 0x2B, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, +0x03, 0x13, 0x22, 0x43, 0x4F, 0x4D, 0x4F, 0x44, 0x4F, 0x20, 0x52, 0x53, 0x41, 0x20, 0x43, 0x65, +0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x41, 0x75, 0x74, 0x68, +0x6F, 0x72, 0x69, 0x74, 0x79, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, +0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0F, 0x00, 0x30, 0x82, 0x02, +0x0A, 0x02, 0x82, 0x02, 0x01, 0x00, 0x91, 0xE8, 0x54, 0x92, 0xD2, 0x0A, 0x56, 0xB1, 0xAC, 0x0D, +0x24, 0xDD, 0xC5, 0xCF, 0x44, 0x67, 0x74, 0x99, 0x2B, 0x37, 0xA3, 0x7D, 0x23, 0x70, 0x00, 0x71, +0xBC, 0x53, 0xDF, 0xC4, 0xFA, 0x2A, 0x12, 0x8F, 0x4B, 0x7F, 0x10, 0x56, 0xBD, 0x9F, 0x70, 0x72, +0xB7, 0x61, 0x7F, 0xC9, 0x4B, 0x0F, 0x17, 0xA7, 0x3D, 0xE3, 0xB0, 0x04, 0x61, 0xEE, 0xFF, 0x11, +0x97, 0xC7, 0xF4, 0x86, 0x3E, 0x0A, 0xFA, 0x3E, 0x5C, 0xF9, 0x93, 0xE6, 0x34, 0x7A, 0xD9, 0x14, +0x6B, 0xE7, 0x9C, 0xB3, 0x85, 0xA0, 0x82, 0x7A, 0x76, 0xAF, 0x71, 0x90, 0xD7, 0xEC, 0xFD, 0x0D, +0xFA, 0x9C, 0x6C, 0xFA, 0xDF, 0xB0, 0x82, 0xF4, 0x14, 0x7E, 0xF9, 0xBE, 0xC4, 0xA6, 0x2F, 0x4F, +0x7F, 0x99, 0x7F, 0xB5, 0xFC, 0x67, 0x43, 0x72, 0xBD, 0x0C, 0x00, 0xD6, 0x89, 0xEB, 0x6B, 0x2C, +0xD3, 0xED, 0x8F, 0x98, 0x1C, 0x14, 0xAB, 0x7E, 0xE5, 0xE3, 0x6E, 0xFC, 0xD8, 0xA8, 0xE4, 0x92, +0x24, 0xDA, 0x43, 0x6B, 0x62, 0xB8, 0x55, 0xFD, 0xEA, 0xC1, 0xBC, 0x6C, 0xB6, 0x8B, 0xF3, 0x0E, +0x8D, 0x9A, 0xE4, 0x9B, 0x6C, 0x69, 0x99, 0xF8, 0x78, 0x48, 0x30, 0x45, 0xD5, 0xAD, 0xE1, 0x0D, +0x3C, 0x45, 0x60, 0xFC, 0x32, 0x96, 0x51, 0x27, 0xBC, 0x67, 0xC3, 0xCA, 0x2E, 0xB6, 0x6B, 0xEA, +0x46, 0xC7, 0xC7, 0x20, 0xA0, 0xB1, 0x1F, 0x65, 0xDE, 0x48, 0x08, 0xBA, 0xA4, 0x4E, 0xA9, 0xF2, +0x83, 0x46, 0x37, 0x84, 0xEB, 0xE8, 0xCC, 0x81, 0x48, 0x43, 0x67, 0x4E, 0x72, 0x2A, 0x9B, 0x5C, +0xBD, 0x4C, 0x1B, 0x28, 0x8A, 0x5C, 0x22, 0x7B, 0xB4, 0xAB, 0x98, 0xD9, 0xEE, 0xE0, 0x51, 0x83, +0xC3, 0x09, 0x46, 0x4E, 0x6D, 0x3E, 0x99, 0xFA, 0x95, 0x17, 0xDA, 0x7C, 0x33, 0x57, 0x41, 0x3C, +0x8D, 0x51, 0xED, 0x0B, 0xB6, 0x5C, 0xAF, 0x2C, 0x63, 0x1A, 0xDF, 0x57, 0xC8, 0x3F, 0xBC, 0xE9, +0x5D, 0xC4, 0x9B, 0xAF, 0x45, 0x99, 0xE2, 0xA3, 0x5A, 0x24, 0xB4, 0xBA, 0xA9, 0x56, 0x3D, 0xCF, +0x6F, 0xAA, 0xFF, 0x49, 0x58, 0xBE, 0xF0, 0xA8, 0xFF, 0xF4, 0xB8, 0xAD, 0xE9, 0x37, 0xFB, 0xBA, +0xB8, 0xF4, 0x0B, 0x3A, 0xF9, 0xE8, 0x43, 0x42, 0x1E, 0x89, 0xD8, 0x84, 0xCB, 0x13, 0xF1, 0xD9, +0xBB, 0xE1, 0x89, 0x60, 0xB8, 0x8C, 0x28, 0x56, 0xAC, 0x14, 0x1D, 0x9C, 0x0A, 0xE7, 0x71, 0xEB, +0xCF, 0x0E, 0xDD, 0x3D, 0xA9, 0x96, 0xA1, 0x48, 0xBD, 0x3C, 0xF7, 0xAF, 0xB5, 0x0D, 0x22, 0x4C, +0xC0, 0x11, 0x81, 0xEC, 0x56, 0x3B, 0xF6, 0xD3, 0xA2, 0xE2, 0x5B, 0xB7, 0xB2, 0x04, 0x22, 0x52, +0x95, 0x80, 0x93, 0x69, 0xE8, 0x8E, 0x4C, 0x65, 0xF1, 0x91, 0x03, 0x2D, 0x70, 0x74, 0x02, 0xEA, +0x8B, 0x67, 0x15, 0x29, 0x69, 0x52, 0x02, 0xBB, 0xD7, 0xDF, 0x50, 0x6A, 0x55, 0x46, 0xBF, 0xA0, +0xA3, 0x28, 0x61, 0x7F, 0x70, 0xD0, 0xC3, 0xA2, 0xAA, 0x2C, 0x21, 0xAA, 0x47, 0xCE, 0x28, 0x9C, +0x06, 0x45, 0x76, 0xBF, 0x82, 0x18, 0x27, 0xB4, 0xD5, 0xAE, 0xB4, 0xCB, 0x50, 0xE6, 0x6B, 0xF4, +0x4C, 0x86, 0x71, 0x30, 0xE9, 0xA6, 0xDF, 0x16, 0x86, 0xE0, 0xD8, 0xFF, 0x40, 0xDD, 0xFB, 0xD0, +0x42, 0x88, 0x7F, 0xA3, 0x33, 0x3A, 0x2E, 0x5C, 0x1E, 0x41, 0x11, 0x81, 0x63, 0xCE, 0x18, 0x71, +0x6B, 0x2B, 0xEC, 0xA6, 0x8A, 0xB7, 0x31, 0x5C, 0x3A, 0x6A, 0x47, 0xE0, 0xC3, 0x79, 0x59, 0xD6, +0x20, 0x1A, 0xAF, 0xF2, 0x6A, 0x98, 0xAA, 0x72, 0xBC, 0x57, 0x4A, 0xD2, 0x4B, 0x9D, 0xBB, 0x10, +0xFC, 0xB0, 0x4C, 0x41, 0xE5, 0xED, 0x1D, 0x3D, 0x5E, 0x28, 0x9D, 0x9C, 0xCC, 0xBF, 0xB3, 0x51, +0xDA, 0xA7, 0x47, 0xE5, 0x84, 0x53, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x81, 0xF4, 0x30, 0x81, +0xF1, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xAD, 0xBD, +0x98, 0x7A, 0x34, 0xB4, 0x26, 0xF7, 0xFA, 0xC4, 0x26, 0x54, 0xEF, 0x03, 0xBD, 0xE0, 0x24, 0xCB, +0x54, 0x1A, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0xBB, 0xAF, 0x7E, +0x02, 0x3D, 0xFA, 0xA6, 0xF1, 0x3C, 0x84, 0x8E, 0xAD, 0xEE, 0x38, 0x98, 0xEC, 0xD9, 0x32, 0x32, +0xD4, 0x30, 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x04, 0x03, 0x02, 0x01, +0x86, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, +0x01, 0xFF, 0x30, 0x11, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, 0x0A, 0x30, 0x08, 0x30, 0x06, 0x06, +0x04, 0x55, 0x1D, 0x20, 0x00, 0x30, 0x44, 0x06, 0x03, 0x55, 0x1D, 0x1F, 0x04, 0x3D, 0x30, 0x3B, +0x30, 0x39, 0xA0, 0x37, 0xA0, 0x35, 0x86, 0x33, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x63, +0x72, 0x6C, 0x2E, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2E, 0x63, 0x6F, 0x6D, +0x2F, 0x41, 0x64, 0x64, 0x54, 0x72, 0x75, 0x73, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6E, 0x61, +0x6C, 0x43, 0x41, 0x52, 0x6F, 0x6F, 0x74, 0x2E, 0x63, 0x72, 0x6C, 0x30, 0x35, 0x06, 0x08, 0x2B, +0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x29, 0x30, 0x27, 0x30, 0x25, 0x06, 0x08, 0x2B, +0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x86, 0x19, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, +0x6F, 0x63, 0x73, 0x70, 0x2E, 0x75, 0x73, 0x65, 0x72, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2E, 0x63, +0x6F, 0x6D, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0C, 0x05, +0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x64, 0xBF, 0x83, 0xF1, 0x5F, 0x9A, 0x85, 0xD0, 0xCD, 0xB8, +0xA1, 0x29, 0x57, 0x0D, 0xE8, 0x5A, 0xF7, 0xD1, 0xE9, 0x3E, 0xF2, 0x76, 0x04, 0x6E, 0xF1, 0x52, +0x70, 0xBB, 0x1E, 0x3C, 0xFF, 0x4D, 0x0D, 0x74, 0x6A, 0xCC, 0x81, 0x82, 0x25, 0xD3, 0xC3, 0xA0, +0x2A, 0x5D, 0x4C, 0xF5, 0xBA, 0x8B, 0xA1, 0x6D, 0xC4, 0x54, 0x09, 0x75, 0xC7, 0xE3, 0x27, 0x0E, +0x5D, 0x84, 0x79, 0x37, 0x40, 0x13, 0x77, 0xF5, 0xB4, 0xAC, 0x1C, 0xD0, 0x3B, 0xAB, 0x17, 0x12, +0xD6, 0xEF, 0x34, 0x18, 0x7E, 0x2B, 0xE9, 0x79, 0xD3, 0xAB, 0x57, 0x45, 0x0C, 0xAF, 0x28, 0xFA, +0xD0, 0xDB, 0xE5, 0x50, 0x95, 0x88, 0xBB, 0xDF, 0x85, 0x57, 0x69, 0x7D, 0x92, 0xD8, 0x52, 0xCA, +0x73, 0x81, 0xBF, 0x1C, 0xF3, 0xE6, 0xB8, 0x6E, 0x66, 0x11, 0x05, 0xB3, 0x1E, 0x94, 0x2D, 0x7F, +0x91, 0x95, 0x92, 0x59, 0xF1, 0x4C, 0xCE, 0xA3, 0x91, 0x71, 0x4C, 0x7C, 0x47, 0x0C, 0x3B, 0x0B, +0x19, 0xF6, 0xA1, 0xB1, 0x6C, 0x86, 0x3E, 0x5C, 0xAA, 0xC4, 0x2E, 0x82, 0xCB, 0xF9, 0x07, 0x96, +0xBA, 0x48, 0x4D, 0x90, 0xF2, 0x94, 0xC8, 0xA9, 0x73, 0xA2, 0xEB, 0x06, 0x7B, 0x23, 0x9D, 0xDE, +0xA2, 0xF3, 0x4D, 0x55, 0x9F, 0x7A, 0x61, 0x45, 0x98, 0x18, 0x68, 0xC7, 0x5E, 0x40, 0x6B, 0x23, +0xF5, 0x79, 0x7A, 0xEF, 0x8C, 0xB5, 0x6B, 0x8B, 0xB7, 0x6F, 0x46, 0xF4, 0x7B, 0xF1, 0x3D, 0x4B, +0x04, 0xD8, 0x93, 0x80, 0x59, 0x5A, 0xE0, 0x41, 0x24, 0x1D, 0xB2, 0x8F, 0x15, 0x60, 0x58, 0x47, +0xDB, 0xEF, 0x6E, 0x46, 0xFD, 0x15, 0xF5, 0xD9, 0x5F, 0x9A, 0xB3, 0xDB, 0xD8, 0xB8, 0xE4, 0x40, +0xB3, 0xCD, 0x97, 0x39, 0xAE, 0x85, 0xBB, 0x1D, 0x8E, 0xBC, 0xDC, 0x87, 0x9B, 0xD1, 0xA6, 0xEF, +0xF1, 0x3B, 0x6F, 0x10, 0x38, 0x6F, 0x16, 0x03, 0x03, 0x02, 0x0F, 0x0C, 0x00, 0x02, 0x0B, 0x00, +0x80, 0xBB, 0xBC, 0x2D, 0xCA, 0xD8, 0x46, 0x74, 0x90, 0x7C, 0x43, 0xFC, 0xF5, 0x80, 0xE9, 0xCF, +0xDB, 0xD9, 0x58, 0xA3, 0xF5, 0x68, 0xB4, 0x2D, 0x4B, 0x08, 0xEE, 0xD4, 0xEB, 0x0F, 0xB3, 0x50, +0x4C, 0x6C, 0x03, 0x02, 0x76, 0xE7, 0x10, 0x80, 0x0C, 0x5C, 0xCB, 0xBA, 0xA8, 0x92, 0x26, 0x14, +0xC5, 0xBE, 0xEC, 0xA5, 0x65, 0xA5, 0xFD, 0xF1, 0xD2, 0x87, 0xA2, 0xBC, 0x04, 0x9B, 0xE6, 0x77, +0x80, 0x60, 0xE9, 0x1A, 0x92, 0xA7, 0x57, 0xE3, 0x04, 0x8F, 0x68, 0xB0, 0x76, 0xF7, 0xD3, 0x6C, +0xC8, 0xF2, 0x9B, 0xA5, 0xDF, 0x81, 0xDC, 0x2C, 0xA7, 0x25, 0xEC, 0xE6, 0x62, 0x70, 0xCC, 0x9A, +0x50, 0x35, 0xD8, 0xCE, 0xCE, 0xEF, 0x9E, 0xA0, 0x27, 0x4A, 0x63, 0xAB, 0x1E, 0x58, 0xFA, 0xFD, +0x49, 0x88, 0xD0, 0xF6, 0x5D, 0x14, 0x67, 0x57, 0xDA, 0x07, 0x1D, 0xF0, 0x45, 0xCF, 0xE1, 0x6B, +0x9B, 0x00, 0x01, 0x02, 0x00, 0x80, 0x55, 0xFB, 0xB6, 0x92, 0x5A, 0x0C, 0x93, 0x56, 0xE8, 0x1C, +0xCD, 0x23, 0xFC, 0xB9, 0xBE, 0x98, 0x2D, 0x01, 0x4F, 0x35, 0xCE, 0x37, 0xD0, 0xF8, 0xA0, 0x0C, +0x42, 0x3B, 0x27, 0x25, 0x10, 0x04, 0x46, 0x02, 0x19, 0x1F, 0xDC, 0xDA, 0x08, 0x33, 0x42, 0x63, +0x5F, 0x3C, 0x82, 0x1F, 0xFA, 0x46, 0x9E, 0x34, 0xCB, 0x30, 0xED, 0x55, 0x11, 0xD7, 0x00, 0x0C, +0x76, 0x0A, 0x48, 0x0C, 0x1D, 0x7A, 0x13, 0x3D, 0xC6, 0x41, 0xD5, 0x7B, 0xD5, 0x2A, 0xE0, 0xA3, +0xB5, 0xAB, 0x0E, 0xBC, 0xD3, 0x17, 0x14, 0xFD, 0x21, 0x8C, 0x78, 0xB1, 0x4D, 0xF2, 0x5A, 0x44, +0x89, 0x4E, 0x82, 0x3D, 0x8B, 0xAC, 0x5D, 0x49, 0xB2, 0x19, 0x21, 0x67, 0xCA, 0x70, 0xC7, 0x8D, +0x35, 0x89, 0xD1, 0x9D, 0x34, 0xD4, 0x7A, 0xAF, 0x1D, 0x9D, 0x86, 0x0F, 0xEF, 0x5A, 0x4F, 0x9E, +0xDA, 0xF5, 0x02, 0x7E, 0x22, 0x67, 0x01, 0x01, 0x01, 0x00, 0x7B, 0x59, 0x4A, 0x29, 0xF9, 0x9F, +0x53, 0x41, 0x8B, 0xE6, 0x79, 0xE9, 0xF5, 0x73, 0x7C, 0xC8, 0xE9, 0x40, 0x1F, 0x39, 0x08, 0x06, +0x84, 0x3D, 0x80, 0x6B, 0xF0, 0x0C, 0x54, 0xC2, 0x18, 0xD6, 0xAD, 0x53, 0xFD, 0x7C, 0xB3, 0x8B, +0xCE, 0x70, 0x4F, 0xCF, 0xFC, 0xEF, 0xC8, 0x2D, 0xE4, 0xD0, 0xC2, 0x7B, 0x80, 0x57, 0xA2, 0x5F, +0x7F, 0x36, 0xB0, 0xBC, 0x16, 0xB7, 0xC1, 0xC2, 0x12, 0x96, 0x94, 0x88, 0x9D, 0x68, 0xD3, 0xDF, +0xB1, 0x3C, 0xA0, 0x93, 0x3A, 0x4D, 0x90, 0x66, 0x3F, 0xB0, 0x89, 0xE7, 0x21, 0x58, 0xF0, 0x39, +0x8B, 0x83, 0x32, 0x93, 0xCB, 0xA9, 0x57, 0x2B, 0x0A, 0x02, 0x5E, 0xF9, 0xE6, 0x10, 0x9A, 0x7F, +0x2A, 0x23, 0x3D, 0x5C, 0x3F, 0x38, 0x3A, 0x40, 0x0C, 0x1B, 0x7C, 0x0D, 0x5D, 0x7C, 0xF1, 0xB2, +0x88, 0x71, 0xA2, 0x57, 0x02, 0x94, 0x12, 0x45, 0x60, 0xEC, 0xC2, 0xB2, 0xCB, 0x31, 0xF2, 0xF8, +0x1B, 0xDD, 0xEA, 0xF6, 0x40, 0xF6, 0x07, 0xEA, 0xC2, 0x71, 0xA6, 0x07, 0xC8, 0x45, 0xE4, 0xE2, +0x1D, 0x49, 0x53, 0x40, 0x5B, 0x57, 0x68, 0xA4, 0x81, 0x1C, 0xCB, 0x33, 0x95, 0x12, 0x0F, 0x4D, +0xAD, 0x9B, 0x70, 0x53, 0xDC, 0x8B, 0xE6, 0x24, 0x0D, 0x39, 0x83, 0x0E, 0x17, 0xFB, 0x13, 0xF2, +0x45, 0x2C, 0x52, 0x44, 0xA3, 0x22, 0x0D, 0x32, 0xDD, 0x21, 0x05, 0x2B, 0xA1, 0xAC, 0xC4, 0x84, +0xD7, 0x18, 0x2F, 0xA2, 0xB4, 0xF5, 0x4E, 0xED, 0x72, 0x56, 0xB7, 0x87, 0x81, 0xF8, 0x51, 0x30, +0x01, 0xBE, 0x17, 0x31, 0xEE, 0x21, 0xBA, 0x16, 0xAF, 0xEB, 0x0A, 0x54, 0x69, 0x84, 0xB3, 0xDC, +0xCA, 0x04, 0xBB, 0x49, 0x84, 0x4C, 0x0F, 0xCE, 0x20, 0xE2, 0x71, 0xF3, 0x43, 0x26, 0x1D, 0xA4, +0xAF, 0xAE, 0x3F, 0x9E, 0xA3, 0x44, 0xDC, 0xAE, 0xB7, 0x5B, 0x16, 0x03, 0x03, 0x00, 0x04, 0x0E, +0x00, 0x00, 0x00}; + +static void server(int sd) +{ + char buf[1024]; + int ret; + struct pollfd pfd; + + /* send a TLS 1.x message trace accepting RSA-MD5 */ + + ret = send(sd, tls1_hello, sizeof(tls1_hello), 0); + if (ret < 0) + fail("error sending hello\n"); + + pfd.fd = sd; + pfd.events = POLLIN; + pfd.revents = 0; + + do { + ret = poll(&pfd, 1, 10000); + } while (ret == -1 && errno == EINTR); + + if (ret == -1 || ret == 0) { + fail("timeout waiting for reply\n"); + } + + success("sent hello\n"); + ret = recv(sd, buf, sizeof(buf), 0); + if (ret < 0) + fail("error receiving alert\n"); + + success("all ok\n"); + + close(sd); +} + +static void client(int sd) +{ + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + int ret; + + /* this must be called once in the program + */ + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_trust_mem(x509_cred, &ca3_cert, + GNUTLS_X509_FMT_PEM); + + gnutls_certificate_set_x509_key_mem(x509_cred, &server_ca3_localhost_cert, + &server_ca3_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_CLIENT); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA:+AES-128-GCM", NULL); + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_server_name_set(session, GNUTLS_NAME_DNS, "localhost", strlen("localhost")); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, sd); + do { + ret = gnutls_handshake(session); + } while(ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN); + + if (ret != GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM) { + fail("server: Handshake returned unexpectedly: %s\n", gnutls_strerror(ret)); + } + + gnutls_alert_send_appropriate(session, ret); + + close(sd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + + +void doit(void) +{ + int sockets[2]; + int err; + + signal(SIGPIPE, SIG_IGN); + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status; + + client(sockets[1]); + wait(&status); + check_wait_status(status); + } else { + server(sockets[0]); + _exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/client.c b/tests/client.c deleted file mode 100644 index e284bebcb7..0000000000 --- a/tests/client.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) 2016 Red Hat, Inc. - * Copyright 2016 Alex Gaynor, Google Inc. - * - * Author: Nikos Mavrogiannopoulos, Alex Gaynor - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include -#include - -#include "utils.h" - -#define true 1 - -/* This program will load certificates from CERT_DIR and try to print - * them. If CERT_DIR/certname.err is available, it should contain the - * error code that gnutls_x509_crt_import() should return. - */ - -#define CERT_DIR "client-interesting" - -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); - -static int getnext(DIR **dirp, gnutls_datum_t *der) -{ - struct dirent *d; - char path[256]; - char cert_dir[256]; - const char *src; - int ret; - - src = getenv("srcdir"); - if (src == NULL) - src = "."; - - snprintf(cert_dir, sizeof(cert_dir), "%s/%s", src, CERT_DIR); - - if (*dirp == NULL) { - *dirp = opendir(cert_dir); - if (*dirp == NULL) - return -1; - } - - do { - d = readdir(*dirp); - if (d != NULL -#ifdef _DIRENT_HAVE_D_TYPE - && d->d_type == DT_REG -#endif - ) { - if (strstr(d->d_name, ".raw") == 0) - continue; - snprintf(path, sizeof(path), "%s/%s", cert_dir, d->d_name); - - success("Loading %s\n", path); - ret = gnutls_load_file(path, der); - if (ret < 0) { - return -1; - } - - return 0; - } - } while(d != NULL); - - closedir(*dirp); - return -1; /* finished */ -} - -#include "../devel/fuzz/gnutls_client_fuzzer.cc" - -void doit(void) -{ - int ret; - gnutls_datum_t raw; - DIR *dirp = NULL; - - ret = global_init(); - if (ret < 0) - fail("init %d\n", ret); - - while (getnext(&dirp, &raw)==0) { - LLVMFuzzerTestOneInput(raw.data, raw.size); - gnutls_free(raw.data); - raw.data = NULL; - raw.size = 0; - } - - gnutls_global_deinit(); -} diff --git a/tests/client_dsa_key.c b/tests/client_dsa_key.c index a1bfb85f3e..9e5dec3cda 100644 --- a/tests/client_dsa_key.c +++ b/tests/client_dsa_key.c @@ -42,8 +42,8 @@ #include "utils.h" #include "cert-common.h" -/* Test for correct operation when a client uses a DSA key when the server - * has DSA signatures enabled but not the client. +/* Test for correct operation when a client uses a DSA key and + * explicitly enables DSA signatures under TLS 1.2. * */ @@ -84,6 +84,7 @@ void doit(void) /* test gnutls_certificate_flags() */ gnutls_certificate_allocate_credentials(&serv_cred); gnutls_certificate_set_flags(serv_cred, GNUTLS_CERTIFICATE_SKIP_KEY_CERT_MATCH); + gnutls_certificate_set_verify_flags(serv_cred, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1); ret = gnutls_certificate_set_x509_trust_mem(serv_cred, &ca3_cert, GNUTLS_X509_FMT_PEM); if (ret < 0) @@ -97,7 +98,7 @@ void doit(void) exit(1); } - test_cli_serv_cert(serv_cred, cli_cred, "NORMAL:+DHE-DSS:+SIGN-DSA-SHA1", "NORMAL:-DHE-DSS:-SIGN-DSA-SHA1", "localhost"); + test_cli_serv_cert(serv_cred, cli_cred, "NORMAL:+DHE-DSS:+SIGN-DSA-SHA1", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2:-DHE-DSS:+SIGN-DSA-SHA1", "localhost"); gnutls_certificate_free_credentials(serv_cred); gnutls_certificate_free_credentials(cli_cred); diff --git a/tests/cmocka-common.h b/tests/cmocka-common.h new file mode 100644 index 0000000000..3f0c9316c6 --- /dev/null +++ b/tests/cmocka-common.h @@ -0,0 +1,12 @@ +#ifndef GNUTLS_TESTS_CMOCKA_COMMON_H +#define GNUTLS_TESTS_CMOCKA_COMMON_H + +#include +#include +#include +#include + +#define USE_CMOCKA +#include "eagain-common.h" + +#endif /* GNUTLS_TESTS_CMOCKA_COMMON_H */ diff --git a/tests/common-cert-key-exchange.c b/tests/common-cert-key-exchange.c index 5e0e92ee7c..de4b57ac4c 100644 --- a/tests/common-cert-key-exchange.c +++ b/tests/common-cert-key-exchange.c @@ -34,11 +34,13 @@ #include #include #include "utils.h" +#include + #include "eagain-common.h" -#include "cert-common.h" #include "common-cert-key-exchange.h" const char *side; +const char *server_priority = NULL; static void tls_log_func(int level, const char *str) { @@ -47,16 +49,202 @@ static void tls_log_func(int level, const char *str) #define MSG "hello there ppl" +void try_with_key_fail(const char *name, const char *client_prio, + int server_err, int client_err, + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + const gnutls_datum_t *cli_cert, + const gnutls_datum_t *cli_key) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + const char *err; + + /* General init. */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + reset_buffers(); + /* Init server */ + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + + ret = gnutls_certificate_set_x509_key_mem(serverx509cred, + serv_cert, serv_key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + fail("Could not set key/cert: %s\n", gnutls_strerror(ret)); + + assert(gnutls_init(&server, GNUTLS_SERVER)>=0); + if (server_priority) + assert(gnutls_priority_set_direct(server, server_priority, NULL) >= 0); + else + assert(gnutls_priority_set_direct(server, client_prio, NULL) >= 0); + + assert(gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred)>=0); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + if (cli_cert) { + gnutls_certificate_set_x509_key_mem(clientx509cred, + cli_cert, cli_key, + GNUTLS_X509_FMT_PEM); + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUIRE); + } + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + ret = gnutls_priority_set_direct(client, client_prio, &err); + if (ret < 0) { + if (ret == GNUTLS_E_INVALID_REQUEST) + fprintf(stderr, "Error in %s\n", err); + exit(1); + } + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + success("negotiating %s\n", name); + HANDSHAKE_EXPECT(client, server, client_err, server_err); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); +} + +void try_with_rawpk_key_fail(const char *name, const char *client_prio, + int server_err, int client_err, + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + unsigned server_ku, + const gnutls_datum_t *cli_cert, + const gnutls_datum_t *cli_key, + unsigned client_ku) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t server_cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t client_cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + const char *err; + + /* General init. */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + reset_buffers(); + /* Init server */ + gnutls_certificate_allocate_credentials(&server_cred); -void try(const char *name, const char *client_prio, gnutls_kx_algorithm_t client_kx, + ret = gnutls_certificate_set_rawpk_key_mem(server_cred, + serv_cert, serv_key, GNUTLS_X509_FMT_PEM, NULL, server_ku, + NULL, 0, 0); + if (ret < 0) + fail("Could not set key/cert: %s\n", gnutls_strerror(ret)); + + assert(gnutls_init(&server, GNUTLS_SERVER | GNUTLS_ENABLE_RAWPK) >= 0); + if (server_priority) + assert(gnutls_priority_set_direct(server, server_priority, NULL) >= 0); + else + assert(gnutls_priority_set_direct(server, client_prio, NULL) >= 0); + + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + server_cred); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&client_cred); + if (ret < 0) + exit(1); + + if (cli_cert) { + ret = gnutls_certificate_set_rawpk_key_mem(client_cred, + cli_cert, cli_key, GNUTLS_X509_FMT_PEM, NULL, client_ku, + NULL, 0, 0); + if (ret < 0) + fail("Could not set key/cert: %s\n", gnutls_strerror(ret)); + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUIRE); + } + + ret = gnutls_init(&client, GNUTLS_CLIENT|GNUTLS_ENABLE_RAWPK); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + ret = gnutls_priority_set_direct(client, client_prio, &err); + if (ret < 0) { + if (ret == GNUTLS_E_INVALID_REQUEST) + fprintf(stderr, "Error in %s\n", err); + exit(1); + } + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + client_cred); + if (ret < 0) + exit(1); + + success("negotiating %s\n", name); + HANDSHAKE_EXPECT(client, server, client_err, server_err); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(server_cred); + gnutls_certificate_free_credentials(client_cred); +} + +void try_with_key_ks(const char *name, const char *client_prio, gnutls_kx_algorithm_t client_kx, gnutls_sign_algorithm_t server_sign_algo, gnutls_sign_algorithm_t client_sign_algo, - unsigned client_cert) + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + const gnutls_datum_t *client_cert, + const gnutls_datum_t *client_key, + unsigned cert_flags, + unsigned exp_group, + gnutls_certificate_type_t server_ctype, + gnutls_certificate_type_t client_ctype) { int ret; char buffer[256]; /* Server stuff. */ - gnutls_certificate_credentials_t serverx509cred; + gnutls_certificate_credentials_t server_cred; gnutls_anon_server_credentials_t s_anoncred; gnutls_dh_params_t dh_params; const gnutls_datum_t p3 = @@ -64,10 +252,11 @@ void try(const char *name, const char *client_prio, gnutls_kx_algorithm_t client gnutls_session_t server; int sret = GNUTLS_E_AGAIN; /* Client stuff. */ - gnutls_certificate_credentials_t clientx509cred; + gnutls_certificate_credentials_t client_cred; gnutls_anon_client_credentials_t c_anoncred; gnutls_session_t client; int cret = GNUTLS_E_AGAIN, version; + const char *err; /* General init. */ gnutls_global_set_log_function(tls_log_func); @@ -76,63 +265,90 @@ void try(const char *name, const char *client_prio, gnutls_kx_algorithm_t client reset_buffers(); /* Init server */ - gnutls_anon_allocate_server_credentials(&s_anoncred); - gnutls_certificate_allocate_credentials(&serverx509cred); + assert(gnutls_anon_allocate_server_credentials(&s_anoncred)>=0); + assert(gnutls_certificate_allocate_credentials(&server_cred)>=0); + + // Set server crt creds based on ctype + switch (server_ctype) { + case GNUTLS_CRT_X509: + ret = gnutls_certificate_set_x509_key_mem(server_cred, + serv_cert, serv_key, + GNUTLS_X509_FMT_PEM); + break; + case GNUTLS_CRT_RAWPK: + ret = gnutls_certificate_set_rawpk_key_mem(server_cred, + serv_cert, serv_key, GNUTLS_X509_FMT_PEM, NULL, 0, + NULL, 0, 0); + break; + default: + ret = GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE; + } - if (client_kx == GNUTLS_KX_ECDHE_ECDSA) { - gnutls_certificate_set_x509_key_mem(serverx509cred, - &server_ecc_cert, &server_ecc_key, - GNUTLS_X509_FMT_PEM); - } else { - gnutls_certificate_set_x509_key_mem(serverx509cred, - &server_cert, &server_key, - GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("Could not set key/cert: %s\n", gnutls_strerror(ret)); } gnutls_dh_params_init(&dh_params); gnutls_dh_params_import_pkcs3(dh_params, &p3, GNUTLS_X509_FMT_PEM); - gnutls_certificate_set_dh_params(serverx509cred, dh_params); + gnutls_certificate_set_dh_params(server_cred, dh_params); gnutls_anon_set_server_dh_params(s_anoncred, dh_params); - gnutls_init(&server, GNUTLS_SERVER); - gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, - serverx509cred); - gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); - - gnutls_priority_set_direct(server, - "NORMAL:+VERS-SSL3.0:+ANON-ECDH:+ANON-DH:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519", - NULL); + assert(gnutls_init(&server, GNUTLS_SERVER | GNUTLS_ENABLE_RAWPK)>=0); + assert(gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + server_cred)>=0); + assert(gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred)>=0); + + if (server_priority) + assert(gnutls_priority_set_direct(server, server_priority, NULL) >= 0); + else + assert(gnutls_priority_set_direct(server, + "NORMAL:+VERS-SSL3.0:+ANON-ECDH:+ANON-DH:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519:+SIGN-EDDSA-ED25519:+CTYPE-ALL", + NULL)>=0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); /* Init client */ - - ret = gnutls_certificate_allocate_credentials(&clientx509cred); + ret = gnutls_certificate_allocate_credentials(&client_cred); if (ret < 0) exit(1); - if (client_cert == USE_CERT) { - gnutls_certificate_set_x509_key_mem(clientx509cred, - &cli_cert, &cli_key, - GNUTLS_X509_FMT_PEM); + if (cert_flags == USE_CERT) { + // Set client crt creds based on ctype + switch (client_ctype) { + case GNUTLS_CRT_X509: + gnutls_certificate_set_x509_key_mem(client_cred, + client_cert, client_key, + GNUTLS_X509_FMT_PEM); + break; + case GNUTLS_CRT_RAWPK: + gnutls_certificate_set_rawpk_key_mem(client_cred, + client_cert, client_key, GNUTLS_X509_FMT_PEM, NULL, 0, + NULL, 0, 0); + break; + default: + fail("Illegal client certificate type given\n"); + } + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUIRE); - } else if (client_cert == ASK_CERT) { + } else if (cert_flags == ASK_CERT) { gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); } - ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); +#if 0 + ret = gnutls_certificate_set_x509_trust_mem(client_cred, &ca_cert, GNUTLS_X509_FMT_PEM); if (ret < 0) exit(1); - - ret = gnutls_init(&client, GNUTLS_CLIENT); +#endif + ret = gnutls_init(&client, GNUTLS_CLIENT | GNUTLS_ENABLE_RAWPK); if (ret < 0) exit(1); - gnutls_anon_allocate_client_credentials(&c_anoncred); - gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); + + assert(gnutls_anon_allocate_client_credentials(&c_anoncred)>=0); + assert(gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred)>=0); ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, - clientx509cred); + client_cred); if (ret < 0) exit(1); @@ -140,8 +356,10 @@ void try(const char *name, const char *client_prio, gnutls_kx_algorithm_t client gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); - ret = gnutls_priority_set_direct(client, client_prio, NULL); + ret = gnutls_priority_set_direct(client, client_prio, &err); if (ret < 0) { + if (ret == GNUTLS_E_INVALID_REQUEST) + fprintf(stderr, "Error in %s\n", err); exit(1); } success("negotiating %s\n", name); @@ -181,6 +399,18 @@ void try(const char *name, const char *client_prio, gnutls_kx_algorithm_t client } } + if (exp_group != 0) { + ret = gnutls_group_get(server); + if (ret != (int)exp_group) { + fail("%s: got unexpected server group: %d/%s\n", name, ret, gnutls_group_get_name(ret)); + } + + ret = gnutls_group_get(client); + if (ret != (int)exp_group) { + fail("%s: got unexpected client group: %d/%s\n", name, ret, gnutls_group_get_name(ret)); + } + } + gnutls_record_send(server, MSG, strlen(MSG)); ret = gnutls_record_recv(client, buffer, sizeof(buffer)); @@ -203,17 +433,22 @@ void try(const char *name, const char *client_prio, gnutls_kx_algorithm_t client gnutls_deinit(client); gnutls_deinit(server); - gnutls_certificate_free_credentials(serverx509cred); - gnutls_certificate_free_credentials(clientx509cred); + gnutls_certificate_free_credentials(server_cred); + gnutls_certificate_free_credentials(client_cred); gnutls_anon_free_server_credentials(s_anoncred); gnutls_anon_free_client_credentials(c_anoncred); gnutls_dh_params_deinit(dh_params); } -void dtls_try(const char *name, const char *client_prio, gnutls_kx_algorithm_t client_kx, +void dtls_try_with_key_mtu(const char *name, const char *client_prio, gnutls_kx_algorithm_t client_kx, gnutls_sign_algorithm_t server_sign_algo, gnutls_sign_algorithm_t client_sign_algo, - unsigned client_cert) + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + const gnutls_datum_t *client_cert, + const gnutls_datum_t *client_key, + unsigned cert_flags, + unsigned smtu) { int ret; char buffer[256]; @@ -241,14 +476,11 @@ void dtls_try(const char *name, const char *client_prio, gnutls_kx_algorithm_t c gnutls_anon_allocate_server_credentials(&s_anoncred); gnutls_certificate_allocate_credentials(&serverx509cred); - if (client_kx == GNUTLS_KX_ECDHE_ECDSA) { - gnutls_certificate_set_x509_key_mem(serverx509cred, - &server_ecc_cert, &server_ecc_key, - GNUTLS_X509_FMT_PEM); - } else { - gnutls_certificate_set_x509_key_mem(serverx509cred, - &server_cert, &server_key, - GNUTLS_X509_FMT_PEM); + ret = gnutls_certificate_set_x509_key_mem(serverx509cred, + serv_cert, serv_key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("Could not set key/cert: %s\n", gnutls_strerror(ret)); } gnutls_dh_params_init(&dh_params); @@ -256,18 +488,20 @@ void dtls_try(const char *name, const char *client_prio, gnutls_kx_algorithm_t c gnutls_certificate_set_dh_params(serverx509cred, dh_params); gnutls_anon_set_server_dh_params(s_anoncred, dh_params); - gnutls_init(&server, GNUTLS_SERVER|GNUTLS_DATAGRAM|GNUTLS_NONBLOCK); - gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, - serverx509cred); - gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); + assert(gnutls_init(&server, GNUTLS_SERVER|GNUTLS_DATAGRAM|GNUTLS_NONBLOCK)>=0); + assert(gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred)>=0); + assert(gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred)>=0); - gnutls_priority_set_direct(server, - "NORMAL:+ANON-ECDH:+ANON-DH:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519", - NULL); + assert(gnutls_priority_set_direct(server, + "NORMAL:+ANON-ECDH:+ANON-DH:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519", + NULL)>=0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_pull_timeout_function(server, server_pull_timeout_func); gnutls_transport_set_ptr(server, server); + if (smtu) + gnutls_dtls_set_mtu (server, smtu); /* Init client */ @@ -275,25 +509,30 @@ void dtls_try(const char *name, const char *client_prio, gnutls_kx_algorithm_t c if (ret < 0) exit(1); - if (client_cert == USE_CERT) { - gnutls_certificate_set_x509_key_mem(clientx509cred, - &cli_cert, &cli_key, + if (cert_flags == USE_CERT) { + ret = gnutls_certificate_set_x509_key_mem(clientx509cred, + client_cert, client_key, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("Could not set key/cert: %s\n", gnutls_strerror(ret)); + } gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUIRE); - } else if (client_cert == ASK_CERT) { + } else if (cert_flags == ASK_CERT) { gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); } +#if 0 ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); if (ret < 0) exit(1); +#endif ret = gnutls_init(&client, GNUTLS_CLIENT|GNUTLS_DATAGRAM|GNUTLS_NONBLOCK); if (ret < 0) exit(1); - gnutls_anon_allocate_client_credentials(&c_anoncred); - gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); + assert(gnutls_anon_allocate_client_credentials(&c_anoncred)>=0); + assert(gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred)>=0); ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); if (ret < 0) @@ -302,8 +541,10 @@ void dtls_try(const char *name, const char *client_prio, gnutls_kx_algorithm_t c gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_pull_timeout_function(client, client_pull_timeout_func); - + gnutls_transport_set_ptr(client, client); + if (smtu) + gnutls_dtls_set_mtu (client, smtu); ret = gnutls_priority_set_direct(client, client_prio, NULL); if (ret < 0) { diff --git a/tests/common-cert-key-exchange.h b/tests/common-cert-key-exchange.h index 06cdf2e39e..57b2b54239 100644 --- a/tests/common-cert-key-exchange.h +++ b/tests/common-cert-key-exchange.h @@ -20,6 +20,9 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ +#ifndef GNUTLS_TESTS_COMMON_CERT_KEY_EXCHANGE_H +#define GNUTLS_TESTS_COMMON_CERT_KEY_EXCHANGE_H + #ifdef HAVE_CONFIG_H #include #endif @@ -29,12 +32,90 @@ #define USE_CERT 1 #define ASK_CERT 2 -void try(const char *name, const char *client_prio, gnutls_kx_algorithm_t client_kx, +extern const char *server_priority; + +#define try_x509(name, client_prio, client_kx, server_sign_algo, client_sign_algo) \ + try_with_key(name, client_prio, client_kx, server_sign_algo, client_sign_algo, \ + &server_ca3_localhost_cert, &server_ca3_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN) + +#define try_rawpk(name, client_prio, client_kx, server_sign_algo, client_sign_algo) \ + try_with_key(name, client_prio, client_kx, server_sign_algo, client_sign_algo, \ + &rawpk_public_key1, &rawpk_private_key1, NULL, NULL, 0, GNUTLS_CRT_RAWPK, GNUTLS_CRT_UNKNOWN) + +#define try_x509_ks(name, client_prio, client_kx, group) \ + try_with_key_ks(name, client_prio, client_kx, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN, \ + &server_ca3_localhost_cert, &server_ca3_key, NULL, NULL, 0, group, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN) + +#define try_x509_cli(name, client_prio, client_kx, server_sign_algo, client_sign_algo, client_cert) \ + try_with_key(name, client_prio, client_kx, server_sign_algo, client_sign_algo, \ + &server_ca3_localhost_cert, &server_ca3_key, &cli_ca3_cert, &cli_ca3_key, client_cert, GNUTLS_CRT_X509, GNUTLS_CRT_X509) + +#define try_rawpk_cli(name, client_prio, client_kx, server_sign_algo, client_sign_algo, client_cert) \ + try_with_key(name, client_prio, client_kx, server_sign_algo, client_sign_algo, \ + &rawpk_public_key1, &rawpk_private_key1, &rawpk_public_key2, &rawpk_private_key2, client_cert, GNUTLS_CRT_RAWPK, GNUTLS_CRT_RAWPK) + +void try_with_rawpk_key_fail(const char *name, const char *client_prio, + int server_err, int client_err, + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + unsigned server_ku, + const gnutls_datum_t *cli_cert, + const gnutls_datum_t *cli_key, + unsigned client_ku); + +void try_with_key_ks(const char *name, const char *client_prio, gnutls_kx_algorithm_t client_kx, gnutls_sign_algorithm_t server_sign_algo, gnutls_sign_algorithm_t client_sign_algo, - unsigned client_cert); + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + const gnutls_datum_t *cli_cert, + const gnutls_datum_t *cli_key, + unsigned client_cert, + unsigned exp_group, + gnutls_certificate_type_t server_ctype, + gnutls_certificate_type_t client_ctype); -void dtls_try(const char *name, const char *client_prio, gnutls_kx_algorithm_t client_kx, +inline static +void try_with_key(const char *name, const char *client_prio, gnutls_kx_algorithm_t client_kx, gnutls_sign_algorithm_t server_sign_algo, gnutls_sign_algorithm_t client_sign_algo, - unsigned client_cert); + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + const gnutls_datum_t *cli_cert, + const gnutls_datum_t *cli_key, + unsigned client_cert, + gnutls_certificate_type_t server_ctype, + gnutls_certificate_type_t client_ctype) +{ + return try_with_key_ks(name, client_prio, client_kx, server_sign_algo, client_sign_algo, + serv_cert, serv_key, cli_cert, cli_key, client_cert, 0, server_ctype, client_ctype); +} + +void try_with_key_fail(const char *name, const char *client_prio, + int server_err, int client_err, + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + const gnutls_datum_t *cli_cert, + const gnutls_datum_t *cli_key); + +#define dtls_try(name, client_prio, client_kx, server_sign_algo, client_sign_algo) \ + dtls_try_with_key(name, client_prio, client_kx, server_sign_algo, client_sign_algo, \ + &server_ca3_localhost_cert, &server_ca3_key, NULL, NULL, 0) + +#define dtls_try_cli(name, client_prio, client_kx, server_sign_algo, client_sign_algo, client_cert) \ + dtls_try_with_key(name, client_prio, client_kx, server_sign_algo, client_sign_algo, \ + &server_ca3_localhost_cert, &server_ca3_key, &cli_ca3_cert, &cli_ca3_key, client_cert) + +#define dtls_try_with_key(name, client_prio, client_kx, server_sign_algo, client_sign_algo, serv_cert, serv_key, cli_cert, cli_key, client_cert) \ + dtls_try_with_key_mtu(name, client_prio, client_kx, server_sign_algo, client_sign_algo, serv_cert, serv_key, cli_cert, cli_key, client_cert, 0) + +void dtls_try_with_key_mtu(const char *name, const char *client_prio, gnutls_kx_algorithm_t client_kx, + gnutls_sign_algorithm_t server_sign_algo, + gnutls_sign_algorithm_t client_sign_algo, + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + const gnutls_datum_t *cli_cert, + const gnutls_datum_t *cli_key, + unsigned client_cert, unsigned mtu); + +#endif /* GNUTLS_TESTS_COMMON_CERT_KEY_EXCHANGE_H */ diff --git a/tests/common-key-tests.h b/tests/common-key-tests.h new file mode 100644 index 0000000000..f3490409e8 --- /dev/null +++ b/tests/common-key-tests.h @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2017 Red Hat Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef GNUTLS_TESTS_COMMON_KEY_TESTS_H +#define GNUTLS_TESTS_COMMON_KEY_TESTS_H + +#include "cert-common.h" + +#include + +struct _key_tests_st { + const char *name; + gnutls_datum_t key; + gnutls_datum_t cert; + gnutls_pk_algorithm_t pk; + unsigned data_only; + unsigned digest; + unsigned sigalgo; + unsigned sign_flags; +}; + +static const +struct _key_tests_st common_key_tests[] = { + { + .name = "rsa key", + .cert = {(void *) cli_ca3_cert_pem, sizeof(cli_ca3_cert_pem)-1}, + .key = {(void *) cli_ca3_key_pem, sizeof(cli_ca3_key_pem)-1}, + .pk = GNUTLS_PK_RSA, + .digest = GNUTLS_DIG_SHA256, + .sigalgo = GNUTLS_SIGN_RSA_SHA256 + }, + { + .name = "dsa key", + .key = {(void *) clidsa_ca3_key_pem, sizeof(clidsa_ca3_key_pem)-1}, + .cert = {(void *) clidsa_ca3_cert_pem, sizeof(clidsa_ca3_cert_pem)-1}, + .pk = GNUTLS_PK_DSA, + .digest = GNUTLS_DIG_SHA1, + .sigalgo = GNUTLS_SIGN_DSA_SHA1 + }, + { + .name = "ecdsa key", + .key = {(void *) server_ca3_ecc_key_pem, sizeof(server_ca3_ecc_key_pem)-1}, + .cert = {(void *) server_localhost_ca3_ecc_cert_pem, sizeof(server_localhost_ca3_ecc_cert_pem)-1}, + .pk = GNUTLS_PK_ECDSA, + .digest = GNUTLS_DIG_SHA256, + .sigalgo = GNUTLS_SIGN_ECDSA_SHA256 + }, + { + .name = "ecdsa key", + .key = {(void *) server_ca3_ecc_key_pem, sizeof(server_ca3_ecc_key_pem)-1}, + .cert = {(void *) server_localhost_ca3_ecc_cert_pem, sizeof(server_localhost_ca3_ecc_cert_pem)-1}, + .pk = GNUTLS_PK_ECDSA, + .digest = GNUTLS_DIG_SHA256, + .sigalgo = GNUTLS_SIGN_ECDSA_SECP256R1_SHA256 + }, + { + .name = "rsa pss key", + .key = {(void *) server_ca3_rsa_pss_key_pem, sizeof(server_ca3_rsa_pss_key_pem)-1}, + .cert = {(void *) server_ca3_rsa_pss_cert_pem, sizeof(server_ca3_rsa_pss_cert_pem)-1}, + .pk = GNUTLS_PK_RSA_PSS, + .digest = GNUTLS_DIG_SHA256, + .sign_flags = GNUTLS_PRIVKEY_SIGN_FLAG_RSA_PSS, + .sigalgo = GNUTLS_SIGN_RSA_PSS_SHA256 + }, + { + .name = "eddsa key", + .key = {(void *) server_ca3_eddsa_key_pem, sizeof(server_ca3_eddsa_key_pem)-1}, + .cert = {(void *) server_ca3_eddsa_cert_pem, sizeof(server_ca3_eddsa_cert_pem)-1}, + .pk = GNUTLS_PK_EDDSA_ED25519, + .digest = GNUTLS_DIG_SHA512, + .sigalgo = GNUTLS_SIGN_EDDSA_ED25519, + .data_only = 1 + } +}; + +#endif /* GNUTLS_TESTS_COMMON_KEY_TESTS_H */ diff --git a/tests/conv-utf8.c b/tests/conv-utf8.c index 73f4ff3abd..9d630e73d0 100644 --- a/tests/conv-utf8.c +++ b/tests/conv-utf8.c @@ -35,7 +35,7 @@ #include int _gnutls_utf8_to_ucs2(const void *data, size_t size, - gnutls_datum_t * output); + gnutls_datum_t * output, unsigned be); int _gnutls_ucs2_to_utf8(const void *data, size_t size, gnutls_datum_t * output, unsigned be); @@ -60,7 +60,7 @@ static void PRINT(const char *str, unsigned char *val, unsigned int size) static void fname(void **glob_state) \ { \ gnutls_datum_t out; \ - int ret = _gnutls_utf8_to_ucs2(utf8, strlen(utf8), &out); \ + int ret = _gnutls_utf8_to_ucs2(utf8, strlen(utf8), &out, 1); \ assert_int_equal(ret, 0); \ if (out.size != sizeof(utf16)-1 || memcmp(utf16, out.data, out.size) != 0) { PRINT("got: ", out.data, out.size); \ PRINT("expected: ", (unsigned char*)utf16, sizeof(utf16)-1); } \ @@ -86,7 +86,7 @@ static void fname(void **glob_state) \ static void fname(void **glob_state) \ { \ gnutls_datum_t out; \ - int ret = _gnutls_utf8_to_ucs2(utf8, utf8_size, &out); \ + int ret = _gnutls_utf8_to_ucs2(utf8, utf8_size, &out, 1); \ assert_int_not_equal(ret, 0); \ } diff --git a/tests/crl_apis.c b/tests/crl_apis.c index 99708e389c..714274ee7a 100644 --- a/tests/crl_apis.c +++ b/tests/crl_apis.c @@ -15,9 +15,9 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * */ #ifdef HAVE_CONFIG_H @@ -34,10 +34,10 @@ #include "utils.h" #include "cert-common.h" +static time_t then = 1207000800; + static time_t mytime(time_t * t) { - time_t then = 1207000800; - if (t) *t = then; @@ -46,48 +46,49 @@ static time_t mytime(time_t * t) static unsigned char saved_crl_pem[] = "-----BEGIN X509 CRL-----\n" - "MIICXzCByAIBADANBgkqhkiG9w0BAQUFADAPMQ0wCwYDVQQDEwRDQS0zFw0wODAz\n" - "MzEyMjAwMDBaFw0wODAzMzEyMjAxMDBaMFQwFAIDAQIDFw0wODAzMzEyMjAwMDBa\n" + "MIICXzCByAIBADANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0zFw0wODAz\n" + "MzEyMjAwMDBaFw0wODAzMzEyMjAyMDBaMFQwFAIDAQIDFw0wODAzMzEyMjAwMDBa\n" "MB0CDFejHTI2Wi75obBaUhcNMDgwMzMxMjIwMDAwWjAdAgxXox0yNbNP0Ln15zwX\n" "DTA4MDMzMTIyMDAwMFqgLzAtMB8GA1UdIwQYMBaAFPmohhljtqQUE2B2DwGaNTbv\n" - "8bSvMAoGA1UdFAQDAgEBMA0GCSqGSIb3DQEBBQUAA4IBgQAcVsFF0HzAjAtD4Kwh\n" - "pJwVl6BEC4lybSIVB0+ls/b23cEOfU1wE8Ls+26EjUHLOTCdQgKMFgbEuhAgUOb6\n" - "kuatoWmi3R/42FJDvQxc+aYcEOX5ttbbB4KuS77zQ54Nv9RGyKcXqTDmax2MgqKg\n" - "moIbYhemiUl4zCshPZvv0NsHFiDtToSIHZIbIy3u63/Mb/tXCm2Eyrl8za8ELGaJ\n" - "5zjibO2wNRIwd7QbJJRkc6TrphfWxeU6tZi3rwOLoqf8x4EBWOcKXyUvIb+OxNVH\n" - "aMXFxVCTmDAqxe9HrEzZsQIGS7CDlWCghIUW8AQkPJ/IL4kUvZhmRxyqI8DF4mLI\n" - "XqCDF55CaQ5e2uMc3f5rvNTP1g1S7E/iZRTaATVhB6krha6X3MqEQ+VJnMklJPiI\n" - "aZY5JS5apO9ewXykxuK0/A3BeHSdK4fj3Q1mt1NzX4G9cU2T3VdPRbAgchoU2YV3\n" - "pBeFxTaJMEN+ajgixeXC69iE7aNBOFBLC38uPmMOpZ450q8=\n" + "8bSvMAoGA1UdFAQDAgEBMA0GCSqGSIb3DQEBCwUAA4IBgQAFpyifa5AJclRpJfjh\n" + "QOcSoiCJz5QsrGaK5I/UYHcY958hhFjnE2c9g3wYEEt13M2gkgOTXapImPbLXHv+\n" + "cHWGoTqX6+crs7xcC6mFc6JfY7q9O2eP1x386dzCxhsXMti5ml0iOeBpNrMO46Pr\n" + "PuvNaY7OE1UgN0Ha3YjmhP8HtWJSQCMmqIo6vP1/HBSzaXP/cjS7f0WBZemj0eE7\n" + "wwA1GUoUx9wHipvNkCSKy/eQz4fpOJExrvHeb1/N3po9hfZaZJAqR+rsC0j9J+wd\n" + "ZGAdVFKCJUZs0IgsWQqagg0tXGJ8ejdt4yE8zvhhcpf4pcGoYUqtoUPT+Fjnsw7C\n" + "P1GCVZQ2ciGxixljTJFdifhqPshgC1Ytd75MkDYH2RRir/JwypQK9CcqIAOjBzTl\n" + "uk4SkKL2xAIduw6Dz5kAC7G2EM94uODoI/RO5b6eN6Kb/592JrKAfB96jh2wwqW+\n" + "swaA4JPFqNQaiMWW1IXM3VJwXBt8DRSRo46JV5OktvvFRwI=\n" "-----END X509 CRL-----\n"; static unsigned char saved_min_crl_pem[] = "-----BEGIN X509 CRL-----\n" - "MIICUDCBuQIBADANBgkqhkiG9w0BAQUFADAPMQ0wCwYDVQQDEwRDQS0zFw0wODAz\n" - "MzEyMjAwMDBaMFQwFAIDAQIDFw0wODAzMzEyMjAwMDBaMB0CDFejHTI2Wi75obBa\n" - "UhcNMDgwMzMxMjIwMDAwWjAdAgxXox0yNbNP0Ln15zwXDTA4MDMzMTIyMDAwMFqg\n" + "MIICUDCBuQIBADANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0zFw0wODAz\n" + "MzEyMjAwMTBaMFQwFAIDAQIDFw0wODAzMzEyMjAwMTBaMB0CDFejHTI2Wi75obBa\n" + "UhcNMDgwMzMxMjIwMDEwWjAdAgxXox0yNbNP0Ln15zwXDTA4MDMzMTIyMDAxMFqg\n" "LzAtMB8GA1UdIwQYMBaAFPmohhljtqQUE2B2DwGaNTbv8bSvMAoGA1UdFAQDAgEB\n" - "MA0GCSqGSIb3DQEBBQUAA4IBgQBwTFMCc5/y/rrVvv/rGD5BYF1rCk+Daln/aQvV\n" - "UgFwbaYsnSUoHdivEF6rrtSJGdZj5JWk7Y4oICL6NLeiLiM+AeBuaGbB9EjIQH8d\n" - "d4/QSR4VV/900xcWbSatycXq4k2nxnrFcC2TMD6ee0nQjs1YQcgBK5tEQBvtKa+w\n" - "qemp7/WPuY1YcDTIJ1myjyM0yJpBope/9uYWxcYgHCwK+o1QqpDlnq21539QtdbC\n" - "9isLxAohnvwmKJkRoYVUhi5jRjd4Yy/fiSAcQx+Gs+0kjRXqitAgofPUAyibMLZX\n" - "EvTZvGDCBF8OqlF6WdBLgcYDVzX7GnYEYFSccQtPYdanilf9IGO0ToF0MfPliawb\n" - "J/27rdbCDQXh3exSq4vGgdulmt+tmYsFwlivwvuCG/eV8KOLWv7q36jx4PzLJyiE\n" - "JJimFkzuwEEaFSmIM9UDEKfmDC10jVQ4c7Y7CPI5rLnPDtEOTNWsjlw/rC2/XLem\n" - "YdLVIwU0h1VJPvZsmbhU2baAhsM=\n" + "MA0GCSqGSIb3DQEBCwUAA4IBgQB/Y7MxKf7HpYBoi7N5lNCe7nSd0epQiNPOford\n" + "hGb1ZirZk9m67zg146Cwc0W4ipPzW/OjwgUoVQTm21I7oZj/GPItAABlILd6eRQe\n" + "jYJap0fxiXV7aMRfu2o3qCRGAITQf306H5zJmpdeNxbxzlr3t6IAHBDbLI1WYXiC\n" + "pTHo3wlpwFJEPw5NQ0j6rCAzSH81FHTrEiIOar17uRqeMjbGN6Eo4zjezEx2+ewg\n" + "unsdzx4OWx3KgzsQnyV9EoU6l9jREe519mICx7La6DZkhO4dSPJv6R5jEFitWDNB\n" + "lxZMA5ePrYXuE/3b+Li89R53O+xZxShLQYwBRSHDue44xUv6hh6YNIKDgt4ycIs8\n" + "9JAWsOYJDYUEbAUo+S4sWCU6LzloEvmg7EdJtvJWsScUKK4qbwkDfkBTKjbeBdFj\n" + "w6naZIjzbjMPEe8/T+hmu/txFj3fGj/GzOM1GaJNZ4vMWA4Y6LhB+H1Zf3xK+hV0\n" + "sc0eYw7RpIzEyc9PPz/uM+XabsI=\n" "-----END X509 CRL-----\n"; -const gnutls_datum_t saved_crl = { saved_crl_pem, sizeof(saved_crl_pem)-1 }; -const gnutls_datum_t saved_min_crl = { saved_min_crl_pem, sizeof(saved_min_crl_pem)-1 }; +const gnutls_datum_t saved_crl = { saved_crl_pem, sizeof(saved_crl_pem) - 1 }; +const gnutls_datum_t saved_min_crl = + { saved_min_crl_pem, sizeof(saved_min_crl_pem) - 1 }; -static void append_crt(gnutls_x509_crl_t crl, const gnutls_datum_t *pem) +static void append_crt(gnutls_x509_crl_t crl, const gnutls_datum_t * pem) { gnutls_x509_crt_t crt; int ret; - assert(gnutls_x509_crt_init(&crt)>=0); - assert(gnutls_x509_crt_import(crt, pem, GNUTLS_X509_FMT_PEM)>=0); + assert(gnutls_x509_crt_init(&crt) >= 0); + assert(gnutls_x509_crt_import(crt, pem, GNUTLS_X509_FMT_PEM) >= 0); ret = gnutls_x509_crl_set_crt(crl, crt, mytime(0)); if (ret != 0) fail("gnutls_x509_crl_set_crt: %s\n", gnutls_strerror(ret)); @@ -95,42 +96,72 @@ static void append_crt(gnutls_x509_crl_t crl, const gnutls_datum_t *pem) gnutls_x509_crt_deinit(crt); } -static void append_aki(gnutls_x509_crl_t crl, const gnutls_datum_t *pem) +static void append_aki(gnutls_x509_crl_t crl, const gnutls_datum_t * pem) { gnutls_x509_crt_t crt; int ret; unsigned char aki[128]; size_t aki_size; - assert(gnutls_x509_crt_init(&crt)>=0); - assert(gnutls_x509_crt_import(crt, pem, GNUTLS_X509_FMT_PEM)>=0); + assert(gnutls_x509_crt_init(&crt) >= 0); + assert(gnutls_x509_crt_import(crt, pem, GNUTLS_X509_FMT_PEM) >= 0); aki_size = sizeof(aki); - assert(gnutls_x509_crt_get_subject_key_id(crt, aki, &aki_size, NULL) >= 0); + assert(gnutls_x509_crt_get_subject_key_id(crt, aki, &aki_size, NULL) >= + 0); ret = gnutls_x509_crl_set_authority_key_id(crl, aki, aki_size); if (ret != 0) - fail("gnutls_x509_crl_set_authority_key_id: %s\n", gnutls_strerror(ret)); + fail("gnutls_x509_crl_set_authority_key_id: %s\n", + gnutls_strerror(ret)); gnutls_x509_crt_deinit(crt); } -static void sign_crl(gnutls_x509_crl_t crl, const gnutls_datum_t *cert, const gnutls_datum_t *key) +static void verify_crl(gnutls_x509_crl_t _crl, gnutls_x509_crt_t crt) +{ + int ret; + gnutls_x509_crl_t crl; + unsigned status; + gnutls_datum_t out; + + assert(gnutls_x509_crl_export2(_crl, GNUTLS_X509_FMT_DER, &out) >= 0); + + assert(gnutls_x509_crl_init(&crl) >= 0); + assert(gnutls_x509_crl_import(crl, &out, GNUTLS_X509_FMT_DER) >= 0); + + gnutls_free(out.data); + + ret = gnutls_x509_crl_verify(crl, &crt, 1, 0, &status); + if (ret < 0) + fail("gnutls_x509_crl_verify: %s\n", gnutls_strerror(ret)); + + if (status != 0) + fail("gnutls_x509_crl_verify status: %x\n", status); + gnutls_x509_crl_deinit(crl); +} + +static void sign_crl(gnutls_x509_crl_t crl, const gnutls_datum_t * cert, + const gnutls_datum_t * key) { gnutls_x509_crt_t crt; gnutls_x509_privkey_t pkey; int ret; - assert(gnutls_x509_crt_init(&crt)>=0); - assert(gnutls_x509_privkey_init(&pkey)>=0); + assert(gnutls_x509_crt_init(&crt) >= 0); + assert(gnutls_x509_privkey_init(&pkey) >= 0); - assert(gnutls_x509_crt_import(crt, cert, GNUTLS_X509_FMT_PEM)>=0); - assert(gnutls_x509_privkey_import(pkey, key, GNUTLS_X509_FMT_PEM)>=0); + assert(gnutls_x509_crt_import(crt, cert, GNUTLS_X509_FMT_PEM) >= 0); + assert(gnutls_x509_privkey_import(pkey, key, GNUTLS_X509_FMT_PEM) >= 0); ret = gnutls_x509_crl_sign(crl, crt, pkey); if (ret != 0) fail("gnutls_x509_crl_sign: %s\n", gnutls_strerror(ret)); + then+=10; + + verify_crl(crl, crt); + gnutls_x509_crt_deinit(crt); gnutls_x509_privkey_deinit(pkey); } @@ -140,6 +171,8 @@ static gnutls_x509_crl_t generate_crl(unsigned skip_optional) gnutls_x509_crl_t crl; int ret; + success("Generating CRL (%d)\n", skip_optional); + ret = gnutls_x509_crl_init(&crl); if (ret != 0) fail("gnutls_x509_crl_init\n"); @@ -153,7 +186,7 @@ static gnutls_x509_crl_t generate_crl(unsigned skip_optional) fail("gnutls_x509_crl_set_this_update\n"); if (!skip_optional) { - ret = gnutls_x509_crl_set_next_update(crl, mytime(0)+60); + ret = gnutls_x509_crl_set_next_update(crl, mytime(0) + 120); if (ret != 0) fail("gnutls_x509_crl_set_next_update\n"); } @@ -191,7 +224,7 @@ void doit(void) fprintf(stdout, "%s", out.data); assert(out.size == saved_crl.size); - assert(memcmp(out.data, saved_crl.data, out.size)==0); + assert(memcmp(out.data, saved_crl.data, out.size) == 0); gnutls_free(out.data); gnutls_x509_crl_deinit(crl); @@ -204,8 +237,9 @@ void doit(void) fprintf(stdout, "%s", out.data); assert(out.size == saved_min_crl.size); - assert(memcmp(out.data, saved_min_crl.data, out.size)==0); + assert(memcmp(out.data, saved_min_crl.data, out.size) == 0); gnutls_free(out.data); gnutls_x509_crl_deinit(crl); + } diff --git a/tests/crq_apis.c b/tests/crq_apis.c index fdc7ece1c2..16d32a2103 100644 --- a/tests/crq_apis.c +++ b/tests/crq_apis.c @@ -40,18 +40,19 @@ static void tls_log_func(int level, const char *str) static unsigned char saved_crq_pem[] = "-----BEGIN NEW CERTIFICATE REQUEST-----\n" - "MIICHTCCAYYCAQAwKzEOMAwGA1UEAxMFbmlrb3MxGTAXBgNVBAoTEG5vbmUgdG8s\n" + "MIICSjCCAbMCAQAwKzEOMAwGA1UEAxMFbmlrb3MxGTAXBgNVBAoTEG5vbmUgdG8s\n" "IG1lbnRpb24wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtmQ/Xyxde2jMzF\n" "3/WIO7HJS2oOoa0gUEAIgKFPXKPQ+GzP5jz37AR2ExeLZIkiW8DdU3w77XwEu4C5\n" "KL6Om8aOoKUSy/VXHqLnu7czSZ/ju0quak1o/8kR4jKNzj2AC41179gAgY8oBAOg\n" - "Io1hBAf6tjd9IQdJ0glhaZiQo1ipAgMBAAGggbEwEgYJKoZIhvcNAQkHMQUTA2Zv\n" - "bzCBmgYJKoZIhvcNAQkOMYGMMIGJMA8GA1UdEwEB/wQFMAMCAQAwDwYDVR0PAQH/\n" + "Io1hBAf6tjd9IQdJ0glhaZiQo1ipAgMBAAGggd4wEgYJKoZIhvcNAQkHMQUTA2Zv\n" + "bzCBxwYJKoZIhvcNAQkOMYG5MIG2MA8GA1UdEwEB/wQFMAMCAQAwDwYDVR0PAQH/\n" "BAUDAwcAADAjBgNVHREEHDAaggNhcGGCA2Zvb4IOeG4tLWt4YXdoay5jb20wHQYD\n" "VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAsGBCoDBAUEA8r+/zAUBggtA4KI\n" - "9LkXBQEB/wQFyv7/+v4wDQYJKoZIhvcNAQELBQADgYEAlspSTGu5KPL7iEQObEvs\n" - "+FMZpXnPDXyeJyiJFEfDaTDCpeHfZfMXUpPQEAxLjk5t8gPUxepQCjOizOuMD70k\n" - "jg8x97E8crA2mZ9Bk/eRhxvdXGN1hBdNzY6BGuPWifN/8dfE6O8wQkZDIZFcYxyr\n" - "V1VQd3moq0ge+tR9+xpPVWg=\n" + "9LkXBQEB/wQFyv7/+v4wKwYDVR0QBCQwIoAPMjAxOTA3MDkwNDI4MjZagQ8yMDE5\n" + "MDcwOTA3MTUwNlowDQYJKoZIhvcNAQELBQADgYEAE7r9ujv9pIO7SnYRg69eQsyo\n" + "3cnBi1efkH2OguYe6JT+a+1DA/0tO4GlT9PjAOX2yD2OicIHLVXWYzV8eX6exQma\n" + "skdRMZurcSSMZm2VgdQmHU0Rv7o7mQSKGfcOD2fRiDMwNB35ZSY7tkPAe7ARp+zr\n" + "lPY8cDpo1i570jttSQ4=\n" "-----END NEW CERTIFICATE REQUEST-----\n"; const gnutls_datum_t saved_crq = { saved_crq_pem, sizeof(saved_crq_pem)-1 }; @@ -84,6 +85,11 @@ static time_t mytime(time_t * t) return then; } +#define TIME1 1562646506 +#define TIME2 1562656506 +#define CPASS "foo" +#define CPASS_OID "1.2.840.113549.1.9.7" + static gnutls_x509_crq_t generate_crq(void) { gnutls_x509_crq_t crq; @@ -138,7 +144,7 @@ static gnutls_x509_crq_t generate_crq(void) fail("gnutls_x509_crq_set_dn: %s, %s\n", gnutls_strerror(ret), err); } - ret = gnutls_x509_crq_set_challenge_password(crq, "foo"); + ret = gnutls_x509_crq_set_challenge_password(crq, CPASS); if (ret != 0) fail("gnutls_x509_crq_set_challenge_password %d\n", ret); @@ -163,22 +169,22 @@ static gnutls_x509_crq_t generate_crq(void) fail("gnutls_x509_crq_get_extension_data\n"); ret = gnutls_x509_crq_set_subject_alt_name(crq, GNUTLS_SAN_DNSNAME, - "foo", 3, 1); + "foo", 3, GNUTLS_FSAN_APPEND); if (ret != 0) fail("gnutls_x509_crq_set_subject_alt_name\n"); ret = gnutls_x509_crq_set_subject_alt_name(crq, GNUTLS_SAN_DNSNAME, - "bar", 3, 1); + "bar", 3, GNUTLS_FSAN_APPEND); if (ret != 0) fail("gnutls_x509_crq_set_subject_alt_name\n"); ret = gnutls_x509_crq_set_subject_alt_name(crq, GNUTLS_SAN_DNSNAME, - "apa", 3, 0); + "apa", 3, GNUTLS_FSAN_SET); if (ret != 0) fail("gnutls_x509_crq_set_subject_alt_name\n"); ret = gnutls_x509_crq_set_subject_alt_name(crq, GNUTLS_SAN_DNSNAME, - "foo", 3, 1); + "foo", 3, GNUTLS_FSAN_APPEND); if (ret != 0) fail("gnutls_x509_crq_set_subject_alt_name\n"); @@ -231,6 +237,10 @@ static gnutls_x509_crq_t generate_crq(void) if (ret != 0) fail("gnutls_x509_crq_set_extension_by_oid %s\n", gnutls_strerror(ret)); + ret = gnutls_x509_crq_set_private_key_usage_period(crq, TIME1, TIME2); + if (ret != 0) + fail("gnutls_x509_crq_set_private_key_usage_period\n"); + ret = gnutls_x509_crq_print(crq, GNUTLS_CRT_PRINT_FULL, &out); if (ret != 0) fail("gnutls_x509_crq_print\n"); @@ -275,6 +285,80 @@ static gnutls_x509_crq_t generate_crq(void) return crq; } +/* Tests parameters from the generated CRQ */ +static void test_crq(gnutls_x509_crq_t crq) +{ + int ret, pathlen; + size_t s = 0; + char buf[64]; + gnutls_datum_t out; + time_t t1, t2; + unsigned crit, ca, type; + + ret = gnutls_x509_crq_get_dn2(crq, &out); + assert(ret == 0); + assert(out.size == 28); + assert(memcmp(out.data, "CN=nikos,O=none to\\, mention", out.size)==0); + + gnutls_free(out.data); + + ret = gnutls_x509_crq_get_dn3(crq, &out, GNUTLS_X509_DN_FLAG_COMPAT); + assert(ret == 0); + assert(out.size == 28); + assert(memcmp(out.data, "CN=nikos,O=none to\\, mention", out.size)==0); + + gnutls_free(out.data); + + ret = gnutls_x509_crq_get_dn3(crq, &out, 0); + assert(ret == 0); + assert(out.size == 28); + assert(memcmp(out.data, "O=none to\\, mention,CN=nikos", out.size)==0); + + gnutls_free(out.data); + + ret = gnutls_x509_crq_get_basic_constraints(crq, &crit, &ca, &pathlen); + assert(ret == 0); + assert(ca == 0); + assert(pathlen == 0); + + s = sizeof(buf); + ret = gnutls_x509_crq_get_subject_alt_name(crq, 0, buf, &s, &type, &crit); + assert(ret >= 0); + assert(s == 3); + assert(memcmp(buf, "apa", s) == 0); + assert(type == GNUTLS_SAN_DNSNAME); + assert(crit == 0); + + s = sizeof(buf); + ret = gnutls_x509_crq_get_subject_alt_name(crq, 1, buf, &s, &type, &crit); + assert(ret >= 0); + assert(s == 3); + assert(memcmp(buf, "foo", s) == 0); + assert(type == GNUTLS_SAN_DNSNAME); + assert(crit == 0); + + ret = gnutls_x509_crq_get_private_key_usage_period(crq, &t1, &t2, &crit); + if (ret < 0) + fail("gnutls_x509_crq_get_private_key_usage_period: %s\n", gnutls_strerror(ret)); + assert(t1 == TIME1); + assert(t2 == TIME2); + assert(crit == 0); + + /* check the challenge password using the attribute APIs */ + s = sizeof(buf); + ret = gnutls_x509_crq_get_attribute_info(crq, 1, buf, &s); + assert(ret >= 0); + assert(s == sizeof(CPASS_OID)); + assert(memcmp(buf, CPASS_OID, s) == 0); + + /* check the contents */ + s = sizeof(buf); + ret = gnutls_x509_crq_get_attribute_data(crq, 1, buf, &s); + assert(ret >= 0); + assert(s == sizeof(CPASS)-1+2); + assert(memcmp(buf, "\x13\x03"CPASS, s) == 0); +} + static void run_set_extensions(gnutls_x509_crq_t crq) { gnutls_x509_crt_t crt; @@ -448,6 +532,8 @@ void doit(void) crq = generate_crq(); + test_crq(crq); + run_set_extensions(crq); run_set_extension_by_oid(crq); diff --git a/tests/crq_key_id.c b/tests/crq_key_id.c index 077f182dd1..1b73075b18 100644 --- a/tests/crq_key_id.c +++ b/tests/crq_key_id.c @@ -79,7 +79,7 @@ void doit(void) } ret = - gnutls_x509_privkey_generate(pkey, algorithm, (algorithm==GNUTLS_PK_RSA)?2048:2048, 0); + gnutls_x509_privkey_generate(pkey, algorithm, 2048, 0); if (ret < 0) { fail("gnutls_x509_privkey_generate (%s): %d: %s\n", gnutls_pk_algorithm_get_name(algorithm), diff --git a/tests/crt_apis.c b/tests/crt_apis.c index 09ee151922..e62ec90d9a 100644 --- a/tests/crt_apis.c +++ b/tests/crt_apis.c @@ -39,19 +39,19 @@ static unsigned char saved_crt_pem[] = "-----BEGIN CERTIFICATE-----\n" - "MIICWTCCAcKgAwIBAgIDChEAMA0GCSqGSIb3DQEBCwUAMCsxDjAMBgNVBAMTBW5p\n" + "MIICWjCCAcOgAwIBAgIDChEAMA0GCSqGSIb3DQEBCwUAMCsxDjAMBgNVBAMTBW5p\n" "a29zMRkwFwYDVQQKExBub25lIHRvLCBtZW50aW9uMCAXDTA4MDMzMTIyMDAwMFoY\n" "Dzk5OTkxMjMxMjM1OTU5WjArMQ4wDAYDVQQDEwVuaWtvczEZMBcGA1UEChMQbm9u\n" "ZSB0bywgbWVudGlvbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAu2ZD9fLF\n" "17aMzMXf9Yg7sclLag6hrSBQQAiAoU9co9D4bM/mPPfsBHYTF4tkiSJbwN1TfDvt\n" "fAS7gLkovo6bxo6gpRLL9Vceoue7tzNJn+O7Sq5qTWj/yRHiMo3OPYALjXXv2ACB\n" - "jygEA6AijWEEB/q2N30hB0nSCWFpmJCjWKkCAwEAAYEFAAABAgOCBQAEAwIBo3sw\n" - "eTAMBgNVHRMBAf8EAjAAMA8GA1UdDwEB/wQFAwMHgAAwNgYDVR0RBC8wLYIDYXBh\n" - "ghF4bi0tbXhhYTRhczZkLmNvbYETdGVzdEB4bi0ta3hhd2hrLm9yZzAgBgNVHSUB\n" - "Af8EFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADgYEAsCHT\n" - "vpIFkQG8th0DbEU3BE3KP5aa93HDLpZPu5PVLkoBb4PPWjKPK+737mwaSs9zXe58\n" - "awhM0ycZ1ymSC+MiRuQlzt4Opx1Fm8WFsDr7d0g/C96Arr1Ss4ZhNi15nyoYeaWJ\n" - "1n7nX+msWnuc+aABt1d8aAhAvaU8do0+WI2jY90=\n" + "jygEA6AijWEEB/q2N30hB0nSCWFpmJCjWKkCAwEAAYEFAAABAgOCBQAEAwIBo3ww\n" + "ejAMBgNVHRMBAf8EAjAAMA8GA1UdDwEB/wQFAwMHgAAwNwYDVR0RBDAwLogEKgME\n" + "BYIReG4tLW14YWE0YXM2ZC5jb22BE3Rlc3RAeG4tLWt4YXdoay5vcmcwIAYDVR0l\n" + "AQH/BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4GBADzP\n" + "piA0s50R+oM/OWcHrARRMFhmOv8oj4mQeXjePCUJub8CDj1XnZwseIY9K9IU6Lxm\n" + "43p7kw1jFzPRBJyuZC5X92AdG1meR1RKd91M3VEvn2cgfesX7/MbhZIYJ8ZD2S1L\n" + "rqzVabXTZjKdHT727mCJdqzjDh7CFmb9Q2ZU6jDR\n" "-----END CERTIFICATE-----\n"; const gnutls_datum_t saved_crt = { saved_crt_pem, sizeof(saved_crt_pem)-1 }; @@ -71,6 +71,8 @@ static time_t mytime(time_t * t) return then; } +#define REGISTERED_OID "1.2.3.4.5" + void doit(void) { gnutls_x509_privkey_t pkey; @@ -78,8 +80,10 @@ void doit(void) gnutls_x509_crt_t crt2; const char *err = NULL; unsigned char buf[64]; + unsigned char large_buf[5*1024]; + unsigned int status, san_type; gnutls_datum_t out; - size_t s = 0; + size_t s = 0, i; int ret; ret = global_init(); @@ -179,6 +183,11 @@ void doit(void) if (ret != 0) fail("gnutls_x509_crt_set_subject_alt_name\n"); + ret = gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_REGISTERED_ID, + REGISTERED_OID, strlen(REGISTERED_OID), 0); + if (ret != 0) + fail("gnutls_x509_crt_set_subject_alt_name\n"); + ret = gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_DNSNAME, "απαλό.com", strlen("απαλό.com"), 1); #if defined(HAVE_LIBIDN2) || defined(HAVE_LIBIDN) @@ -311,6 +320,16 @@ void doit(void) if (ret != 0) { fail("equality test failed\n"); } + + ret = gnutls_x509_crt_verify(crt, &crt, 1, 0, &status); + if (ret < 0) { + fail("verification failed\n"); + } + + if (status != 0) { + fail("verification status failed\n"); + } + assert(gnutls_x509_crt_export2(crt, GNUTLS_X509_FMT_PEM, &out) >= 0); if (debug) @@ -320,6 +339,51 @@ void doit(void) assert(memcmp(out.data, saved_crt.data, out.size)==0); #endif + /* test behavior of gnutls_x509_crt_export on varios corner cases */ + s = 0; + assert(gnutls_x509_crt_export(crt, GNUTLS_X509_FMT_PEM, NULL, &s) == GNUTLS_E_SHORT_MEMORY_BUFFER); + assert(s == out.size+1); + s = sizeof(buf); + assert(gnutls_x509_crt_export(crt, GNUTLS_X509_FMT_PEM, buf, &s) == GNUTLS_E_SHORT_MEMORY_BUFFER); + assert(s == out.size+1); + + /* check whether the PEM output matches gnutls_x509_crt_export2 */ + s = sizeof(large_buf); + assert(gnutls_x509_crt_export(crt, GNUTLS_X509_FMT_PEM, large_buf, &s) == 0); + assert(s == out.size); + assert(memcmp(large_buf, out.data, out.size) == 0); + gnutls_free(out.data); + + /* check whether the der out length differs */ + s = sizeof(large_buf); + assert(gnutls_x509_crt_export(crt, GNUTLS_X509_FMT_DER, large_buf, &s) == 0); + assert(gnutls_x509_crt_export2(crt, GNUTLS_X509_FMT_DER, &out) >= 0); + + assert(s == out.size); + assert(memcmp(large_buf, out.data, out.size) == 0); + + /* verify some values written in the original cert */ + gnutls_x509_crt_deinit(crt2); + ret = gnutls_x509_crt_init(&crt2); + if (ret != 0) + fail("gnutls_x509_crt_init\n"); + + ret = gnutls_x509_crt_import(crt2, &out, GNUTLS_X509_FMT_DER); + if (ret != 0) + fail("gnutls_x509_crt_import\n"); + + i = 0; + do { + s = sizeof(buf); + ret = gnutls_x509_crt_get_subject_alt_name2(crt2, i++, buf, &s, &san_type, NULL); + if (ret < 0) + fail("gnutls_x509_crt_get_subject_alt_name2: %s\n", gnutls_strerror(ret)); + } while (san_type != GNUTLS_SAN_REGISTERED_ID); + + assert(san_type == GNUTLS_SAN_REGISTERED_ID); + assert(s == strlen(REGISTERED_OID)); + assert(memcmp(buf, REGISTERED_OID, s) == 0); + gnutls_free(out.data); gnutls_x509_crt_deinit(crt); diff --git a/tests/crt_type-neg-common.c b/tests/crt_type-neg-common.c new file mode 100644 index 0000000000..68e2a3680f --- /dev/null +++ b/tests/crt_type-neg-common.c @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2017 - 2018 ARPA2 project + * + * Author: Tom Vrancken (dev@tomvrancken.nl) + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ +#include +#include +#include +#include + +// Credential type flags +#define CRED_EMPTY 1<<0 +#define CRED_X509 1<<1 +#define CRED_RAWPK 1<<2 + +// Test case definition +typedef struct test_case_st { + const char *name; + const char *client_prio; + const char *server_prio; + const char set_cli_creds; + const char set_srv_creds; + gnutls_certificate_type_t expected_cli_ctype; + gnutls_certificate_type_t expected_srv_ctype; + int client_err; + int server_err; + unsigned int init_flags_cli; + unsigned int init_flags_srv; + bool request_cli_crt; + bool cli_srv_may_diverge; + // only needed when may_diverge is true + gnutls_certificate_type_t expected_cli_cli_ctype; // negotiated cli ctype on the client + gnutls_certificate_type_t expected_srv_cli_ctype; // negotiated cli ctype on the server + gnutls_certificate_type_t expected_cli_srv_ctype; // negotiated srv ctype on the client + gnutls_certificate_type_t expected_srv_srv_ctype; // negotiated srv ctype on the server +} test_case_st; + + +static void try(test_case_st * test) +{ + int sret, cret; // Needed for HANDSHAKE macro + /* To hold negotiated certificate types */ + gnutls_certificate_type_t srv_srv_ctype, srv_cli_ctype; + gnutls_certificate_type_t cli_srv_ctype, cli_cli_ctype; + /* To hold certificate credentials */ + gnutls_certificate_credentials_t client_creds = NULL; + gnutls_certificate_credentials_t server_creds = NULL; + + gnutls_session_t server, client; + + // Initialize creds + assert(gnutls_certificate_allocate_credentials(&client_creds) >= 0); + assert(gnutls_certificate_allocate_credentials(&server_creds) >= 0); + + // Print test + success("Running %s...\n", test->name); + + // Init client/server + if(test->init_flags_cli) { + assert(gnutls_init(&client, GNUTLS_CLIENT | test->init_flags_cli) >= 0); + } else { + assert(gnutls_init(&client, GNUTLS_CLIENT) >= 0); + } + + if (test->init_flags_srv) { + assert(gnutls_init(&server, GNUTLS_SERVER | test->init_flags_srv) >= 0); + } else { + assert(gnutls_init(&server, GNUTLS_SERVER) >= 0); + } + + /* Set up our credentials for this handshake */ + // Test for using empty cli credentials + if (test->set_cli_creds == CRED_EMPTY) { + gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, client_creds); + } else { + // Test for using X509 cli credentials + if (test->set_cli_creds & CRED_X509) { + assert(gnutls_certificate_set_x509_key_mem + (client_creds, &cli_ca3_cert, &cli_ca3_key, GNUTLS_X509_FMT_PEM) >= 0); + } + + // Test for using RawPubKey cli credentials + if (test->set_cli_creds & CRED_RAWPK) { + assert(gnutls_certificate_set_rawpk_key_mem(client_creds, + &rawpk_public_key1, &rawpk_private_key1, GNUTLS_X509_FMT_PEM, + NULL, 0, NULL, 0, 0) >= 0); + } + + // -- Add extra ctype creds here in the future -- + + // Finally set the credentials + gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, client_creds); + } + + // Test for using empty srv credentials + if (test->set_srv_creds == CRED_EMPTY) { + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, server_creds); + } else { + // Test for using X509 srv credentials + if (test->set_srv_creds & CRED_X509) { + assert(gnutls_certificate_set_x509_key_mem + (server_creds, &server_ca3_localhost_rsa_decrypt_cert, + &server_ca3_key, GNUTLS_X509_FMT_PEM) >= 0); + assert(gnutls_certificate_set_x509_key_mem + (server_creds, &server_ca3_localhost_ecc_cert, + &server_ca3_ecc_key, GNUTLS_X509_FMT_PEM) >= 0); + assert(gnutls_certificate_set_x509_key_mem + (server_creds, &server_ca3_localhost_rsa_sign_cert, + &server_ca3_key, GNUTLS_X509_FMT_PEM) >= 0); + gnutls_certificate_set_known_dh_params(server_creds, + GNUTLS_SEC_PARAM_MEDIUM); + } + + // Test for using RawPubKey srv credentials + if (test->set_srv_creds & CRED_RAWPK) { + assert(gnutls_certificate_set_rawpk_key_mem(server_creds, + &rawpk_public_key2, &rawpk_private_key2, GNUTLS_X509_FMT_PEM, + NULL, 0, NULL, 0, 0) >= 0); + } + + // -- Add extra ctype creds here in the future -- + + // Finally set the credentials + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, server_creds); + } + + // Server settings + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + assert(gnutls_priority_set_direct(server, test->server_prio, 0) >= 0); + + if (test->request_cli_crt) + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); + + // Client settings + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + assert(gnutls_priority_set_direct(client, test->client_prio, 0) >= 0); + + // Try handshake + if (test->client_err && test->server_err) { + /* We expect errors during the handshake and don't check + * any negotiated certificate types */ + HANDSHAKE_EXPECT(client, server, test->client_err, test->server_err); + } else { + /* We expect a handshake without errors and check the negotiated + * certificate types */ + HANDSHAKE(client, server); + + /* Get the negotiated certificate types */ + srv_srv_ctype = + gnutls_certificate_type_get2(server, GNUTLS_CTYPE_SERVER); + srv_cli_ctype = + gnutls_certificate_type_get2(server, GNUTLS_CTYPE_CLIENT); + cli_srv_ctype = + gnutls_certificate_type_get2(client, GNUTLS_CTYPE_SERVER); + cli_cli_ctype = + gnutls_certificate_type_get2(client, GNUTLS_CTYPE_CLIENT); + + // For debugging + if (debug) { + success("Srv srv ctype: %s\n", gnutls_certificate_type_get_name(srv_srv_ctype)); + success("Srv cli ctype: %s\n", gnutls_certificate_type_get_name(srv_cli_ctype)); + success("Cli srv ctype: %s\n", gnutls_certificate_type_get_name(cli_srv_ctype)); + success("Cli srv ctype: %s\n", gnutls_certificate_type_get_name(cli_cli_ctype)); + } + + /* Check whether the negotiated certificate types match the expected results */ + if (test->cli_srv_may_diverge) { + // Matching expected client ctype at client + if (cli_cli_ctype != test->expected_cli_cli_ctype) { + fail("%s: negotiated client ctype at client diffs the expected (%s, %s)!\n", test->name, gnutls_certificate_type_get_name(cli_cli_ctype), gnutls_certificate_type_get_name(test->expected_cli_cli_ctype)); + } + // Matching expected server ctype at client + if (cli_srv_ctype != test->expected_cli_srv_ctype) { + fail("%s: negotiated server ctype at client diffs the expected (%s, %s)!\n", test->name, gnutls_certificate_type_get_name(cli_srv_ctype), gnutls_certificate_type_get_name(test->expected_cli_srv_ctype)); + } + // Matching expected client ctype at server + if (srv_cli_ctype != test->expected_srv_cli_ctype) { + fail("%s: negotiated client ctype at server diffs the expected (%s, %s)!\n", test->name, gnutls_certificate_type_get_name(srv_cli_ctype), gnutls_certificate_type_get_name(test->expected_srv_cli_ctype)); + } + // Matching expected server ctype at server + if (srv_srv_ctype != test->expected_srv_srv_ctype) { + fail("%s: negotiated client ctype at client diffs the expected (%s, %s)!\n", test->name, gnutls_certificate_type_get_name(srv_srv_ctype), gnutls_certificate_type_get_name(test->expected_srv_srv_ctype)); + } + } else { + // Matching server ctype + if (srv_srv_ctype != cli_srv_ctype) { + fail("%s: client negotiated different server ctype than server (%s, %s)!\n", test->name, gnutls_certificate_type_get_name(cli_srv_ctype), gnutls_certificate_type_get_name(srv_srv_ctype)); + } + // Matching client ctype + if (srv_cli_ctype != cli_cli_ctype) { + fail("%s: client negotiated different client ctype than server (%s, %s)!\n", test->name, gnutls_certificate_type_get_name(cli_cli_ctype), gnutls_certificate_type_get_name(srv_cli_ctype)); + } + // Matching expected server ctype + if (srv_srv_ctype != test->expected_srv_ctype) { + fail("%s: negotiated server ctype diffs the expected (%s, %s)!\n", test->name, gnutls_certificate_type_get_name(srv_srv_ctype), gnutls_certificate_type_get_name(test->expected_srv_ctype)); + } + // Matching expected client ctype + if (srv_cli_ctype != test->expected_cli_ctype) { + fail("%s: negotiated client ctype diffs the expected (%s, %s)!\n", test->name, gnutls_certificate_type_get_name(srv_cli_ctype), gnutls_certificate_type_get_name(test->expected_cli_ctype)); + } + + /* Check whether the API functions return the correct cert types for OURS and PEERS */ + assert(srv_srv_ctype == gnutls_certificate_type_get2(server, GNUTLS_CTYPE_OURS)); + assert(srv_srv_ctype == gnutls_certificate_type_get2(client, GNUTLS_CTYPE_PEERS)); + assert(cli_cli_ctype == gnutls_certificate_type_get2(server, GNUTLS_CTYPE_PEERS)); + assert(cli_cli_ctype == gnutls_certificate_type_get2(client, GNUTLS_CTYPE_OURS)); + } + } + + // Cleanup + gnutls_deinit(server); + gnutls_deinit(client); + gnutls_certificate_free_credentials(client_creds); + gnutls_certificate_free_credentials(server_creds); + + reset_buffers(); +} diff --git a/tests/custom-urls-override.c b/tests/custom-urls-override.c index e6e936ae85..8ce3606cf9 100644 --- a/tests/custom-urls-override.c +++ b/tests/custom-urls-override.c @@ -47,6 +47,7 @@ int main() #include #include #include +#include #include "cert-common.h" #include "utils.h" @@ -96,7 +97,7 @@ static void client(int fd) gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -166,7 +167,7 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); diff --git a/tests/custom-urls.c b/tests/custom-urls.c index 28768121d6..a7295a174c 100644 --- a/tests/custom-urls.c +++ b/tests/custom-urls.c @@ -47,6 +47,7 @@ int main() #include #include #include +#include #include "cert-common.h" #include "utils.h" @@ -93,7 +94,7 @@ static void client(int fd) gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -170,7 +171,7 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); diff --git a/tests/data/large-cert.pem b/tests/data/large-cert.pem new file mode 100644 index 0000000000..e1ec5e984e --- /dev/null +++ b/tests/data/large-cert.pem @@ -0,0 +1,2472 @@ +-----BEGIN CERTIFICATE----- +MIMBzwYwgwHNvaADAgECAhRI/jiyE4Aa9/foA9t0UnUBukMHTDA9BgkqhkiG9w0B +AQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGi +AwIBQDAPMQ0wCwYDVQQDEwRDQS0wMCAXDTE4MDcyNjA5MDIwNFoYDzk5OTkxMjMx +MjM1OTU5WjATMREwDwYDVQQDEwhzZXJ2ZXItMTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMCaO+utkTXswNueFkbF5W7s5D1eXjV+6V+T4+uk/P0Sn8+6 +yxqSrOHzcYYSDElA48timxEFz1B/TFkToFPFf/wn3J2oC2Ah7Z4qkRPnl79Hwi8F +lEqwPJ9KggY/ePzTAOJEph3+nROWHYw0qbpMs2uSLIQLsWd9jA3rxNyajI752eb2 +O3ayUn2pdFeYKH9/+yeNWVcZfliaYedHtqWNRNu/4WPKuckNw15xOZE0I1+uuKM0 +PFD7ahn5K+GI2HuHuj1FgI1Nu5kJ4NDtCvv8PIIOsQcTfwB91O3YOf3GOSCg7Dfi +KuFK3AoF1o4aLL/SJSF6syuyATDKYT5kTAizB9kCAwEAAaODAcvwMIMBy+swgwHL +cQYIKgMEBQYHCQoEgwHLYv8KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4K +qwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs +/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqr +Aaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+ +CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsBrP4KqwGs/gqrAaz+CqsB +rP4KqwGs/gqrAaz+CqsBrP7/MAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0wC4IJbG9j +YWxob3N0MA8GA1UdDwEB/wQFAwMHoAAwHQYDVR0OBBYEFBC88VbYc+loQtyrA3NU +HWJgfq1oMB8GA1UdIwQYMBaAFBEYYyBI1QIjN3NryoKlW74cywyTMD0GCSqGSIb3 +DQEBCjAwoA0wCwYJYIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQC +AaIDAgFAA4IBAQCat574RIsTDuoiIiwhWKP4MtXM4niBy36teszehgXuODDW0tuy +3Cj0DI/+FHDm3g7f619vDMVBH/hj88k3cqhuPNe2gRTZgZSljhM+qc1J33OSTu5d +TN3TMuS25Ls6QcAlNtxSxPjFEhO/7Lj+dpNcaG8JP2E5NCEKPT2jGjiiasgaU1Pm +u0qNg+uaifAiIOLG0S0RqklDD6KfpkcIBSqQBYZDnUIinoWF0wv2+uqTCqy6zDMK +PRgNeyvnWvJ8rFqDPFV0yzFL93GqrWfKGJoNS6fHCW7rqn0Er7vaDgTTt7NUfyBf +SMvsv2A061AoftwbDAyzCX+EVOMYnYJj7K9j +-----END CERTIFICATE----- diff --git a/tests/data/listings-DTLS1.0 b/tests/data/listings-DTLS1.0 index f4453f8d5e..e261b18243 100644 --- a/tests/data/listings-DTLS1.0 +++ b/tests/data/listings-DTLS1.0 @@ -4,12 +4,8 @@ TLS_ECDHE_ECDSA_AES_128_CBC_SHA1 0xc0, 0x09 SSL3.0 TLS_ECDHE_RSA_AES_256_CBC_SHA1 0xc0, 0x14 SSL3.0 TLS_ECDHE_RSA_AES_128_CBC_SHA1 0xc0, 0x13 SSL3.0 TLS_RSA_AES_256_CBC_SHA1 0x00, 0x35 SSL3.0 -TLS_RSA_CAMELLIA_256_CBC_SHA1 0x00, 0x84 SSL3.0 TLS_RSA_AES_128_CBC_SHA1 0x00, 0x2f SSL3.0 -TLS_RSA_CAMELLIA_128_CBC_SHA1 0x00, 0x41 SSL3.0 TLS_DHE_RSA_AES_256_CBC_SHA1 0x00, 0x39 SSL3.0 -TLS_DHE_RSA_CAMELLIA_256_CBC_SHA1 0x00, 0x88 SSL3.0 TLS_DHE_RSA_AES_128_CBC_SHA1 0x00, 0x33 SSL3.0 -TLS_DHE_RSA_CAMELLIA_128_CBC_SHA1 0x00, 0x45 SSL3.0 Protocols: VERS-DTLS1.0 diff --git a/tests/data/listings-SSL3.0 b/tests/data/listings-SSL3.0 index 938b2f63d9..8422532efc 100644 --- a/tests/data/listings-SSL3.0 +++ b/tests/data/listings-SSL3.0 @@ -6,13 +6,9 @@ TLS_ECDHE_RSA_AES_256_CBC_SHA1 0xc0, 0x14 SSL3.0 TLS_ECDHE_RSA_AES_128_CBC_SHA1 0xc0, 0x13 SSL3.0 TLS_ECDHE_RSA_ARCFOUR_128_SHA1 0xc0, 0x11 SSL3.0 TLS_RSA_AES_256_CBC_SHA1 0x00, 0x35 SSL3.0 -TLS_RSA_CAMELLIA_256_CBC_SHA1 0x00, 0x84 SSL3.0 TLS_RSA_AES_128_CBC_SHA1 0x00, 0x2f SSL3.0 -TLS_RSA_CAMELLIA_128_CBC_SHA1 0x00, 0x41 SSL3.0 TLS_RSA_ARCFOUR_128_SHA1 0x00, 0x05 SSL3.0 TLS_DHE_RSA_AES_256_CBC_SHA1 0x00, 0x39 SSL3.0 -TLS_DHE_RSA_CAMELLIA_256_CBC_SHA1 0x00, 0x88 SSL3.0 TLS_DHE_RSA_AES_128_CBC_SHA1 0x00, 0x33 SSL3.0 -TLS_DHE_RSA_CAMELLIA_128_CBC_SHA1 0x00, 0x45 SSL3.0 Protocols: VERS-SSL3.0 diff --git a/tests/data/listings-SSL3.0-TLS1.1 b/tests/data/listings-SSL3.0-TLS1.1 index b18c4bf0f3..9c9621dfc8 100644 --- a/tests/data/listings-SSL3.0-TLS1.1 +++ b/tests/data/listings-SSL3.0-TLS1.1 @@ -4,12 +4,8 @@ TLS_ECDHE_ECDSA_AES_128_CBC_SHA1 0xc0, 0x09 SSL3.0 TLS_ECDHE_RSA_AES_256_CBC_SHA1 0xc0, 0x14 SSL3.0 TLS_ECDHE_RSA_AES_128_CBC_SHA1 0xc0, 0x13 SSL3.0 TLS_RSA_AES_256_CBC_SHA1 0x00, 0x35 SSL3.0 -TLS_RSA_CAMELLIA_256_CBC_SHA1 0x00, 0x84 SSL3.0 TLS_RSA_AES_128_CBC_SHA1 0x00, 0x2f SSL3.0 -TLS_RSA_CAMELLIA_128_CBC_SHA1 0x00, 0x41 SSL3.0 TLS_DHE_RSA_AES_256_CBC_SHA1 0x00, 0x39 SSL3.0 -TLS_DHE_RSA_CAMELLIA_256_CBC_SHA1 0x00, 0x88 SSL3.0 TLS_DHE_RSA_AES_128_CBC_SHA1 0x00, 0x33 SSL3.0 -TLS_DHE_RSA_CAMELLIA_128_CBC_SHA1 0x00, 0x45 SSL3.0 -Protocols: VERS-TLS1.0, VERS-SSL3.0, VERS-TLS1.1 +Protocols: VERS-TLS1.0, VERS-TLS1.1 diff --git a/tests/data/listings-TLS1.0 b/tests/data/listings-TLS1.0 index 6714a20c9a..a6f5f25997 100644 --- a/tests/data/listings-TLS1.0 +++ b/tests/data/listings-TLS1.0 @@ -4,12 +4,8 @@ TLS_ECDHE_ECDSA_AES_128_CBC_SHA1 0xc0, 0x09 SSL3.0 TLS_ECDHE_RSA_AES_256_CBC_SHA1 0xc0, 0x14 SSL3.0 TLS_ECDHE_RSA_AES_128_CBC_SHA1 0xc0, 0x13 SSL3.0 TLS_RSA_AES_256_CBC_SHA1 0x00, 0x35 SSL3.0 -TLS_RSA_CAMELLIA_256_CBC_SHA1 0x00, 0x84 SSL3.0 TLS_RSA_AES_128_CBC_SHA1 0x00, 0x2f SSL3.0 -TLS_RSA_CAMELLIA_128_CBC_SHA1 0x00, 0x41 SSL3.0 TLS_DHE_RSA_AES_256_CBC_SHA1 0x00, 0x39 SSL3.0 -TLS_DHE_RSA_CAMELLIA_256_CBC_SHA1 0x00, 0x88 SSL3.0 TLS_DHE_RSA_AES_128_CBC_SHA1 0x00, 0x33 SSL3.0 -TLS_DHE_RSA_CAMELLIA_128_CBC_SHA1 0x00, 0x45 SSL3.0 Protocols: VERS-TLS1.0 diff --git a/tests/data/listings-TLS1.1 b/tests/data/listings-TLS1.1 index ce5d3d00aa..1ab7700d2c 100644 --- a/tests/data/listings-TLS1.1 +++ b/tests/data/listings-TLS1.1 @@ -4,12 +4,8 @@ TLS_ECDHE_ECDSA_AES_128_CBC_SHA1 0xc0, 0x09 SSL3.0 TLS_ECDHE_RSA_AES_256_CBC_SHA1 0xc0, 0x14 SSL3.0 TLS_ECDHE_RSA_AES_128_CBC_SHA1 0xc0, 0x13 SSL3.0 TLS_RSA_AES_256_CBC_SHA1 0x00, 0x35 SSL3.0 -TLS_RSA_CAMELLIA_256_CBC_SHA1 0x00, 0x84 SSL3.0 TLS_RSA_AES_128_CBC_SHA1 0x00, 0x2f SSL3.0 -TLS_RSA_CAMELLIA_128_CBC_SHA1 0x00, 0x41 SSL3.0 TLS_DHE_RSA_AES_256_CBC_SHA1 0x00, 0x39 SSL3.0 -TLS_DHE_RSA_CAMELLIA_256_CBC_SHA1 0x00, 0x88 SSL3.0 TLS_DHE_RSA_AES_128_CBC_SHA1 0x00, 0x33 SSL3.0 -TLS_DHE_RSA_CAMELLIA_128_CBC_SHA1 0x00, 0x45 SSL3.0 Protocols: VERS-TLS1.1 diff --git a/tests/data/listings-legacy1 b/tests/data/listings-legacy1 new file mode 100644 index 0000000000..549ca739c9 --- /dev/null +++ b/tests/data/listings-legacy1 @@ -0,0 +1,4 @@ +Cipher suites for NONE:+VERS-TLS-ALL:+MAC-ALL:+RSA:+AES-128-GCM:+SIGN-ALL:+COMP-NULL +TLS_RSA_AES_128_GCM_SHA256 0x00, 0x9c TLS1.2 + +Protocols: VERS-TLS1.2, VERS-TLS1.1, VERS-TLS1.0 diff --git a/tests/data/listings-legacy2 b/tests/data/listings-legacy2 new file mode 100644 index 0000000000..35ce346da5 --- /dev/null +++ b/tests/data/listings-legacy2 @@ -0,0 +1,4 @@ +Cipher suites for NONE:+VERS-TLS-ALL:+MAC-ALL:+RSA:+CAMELLIA-256-GCM:+SIGN-ALL:+COMP-NULL +TLS_RSA_CAMELLIA_256_GCM_SHA384 0xc0, 0x7b TLS1.2 + +Protocols: VERS-TLS1.2, VERS-TLS1.1, VERS-TLS1.0 diff --git a/tests/data/listings-legacy3 b/tests/data/listings-legacy3 new file mode 100644 index 0000000000..cc932505b0 --- /dev/null +++ b/tests/data/listings-legacy3 @@ -0,0 +1,4 @@ +Cipher suites for NONE:+VERS-TLS-ALL:+MAC-ALL:+RSA:+CAMELLIA-256-GCM:+SIGN-ALL:+COMP-NULL:+CTYPE-OPENPGP +TLS_RSA_CAMELLIA_256_GCM_SHA384 0xc0, 0x7b TLS1.2 + +Protocols: VERS-TLS1.2, VERS-TLS1.1, VERS-TLS1.0 diff --git a/tests/data/listings-legacy4 b/tests/data/listings-legacy4 new file mode 100644 index 0000000000..736692ef1e --- /dev/null +++ b/tests/data/listings-legacy4 @@ -0,0 +1,4 @@ +Cipher suites for NONE:+VERS-TLS-ALL:+MAC-ALL:+RSA:+CAMELLIA-256-GCM:+SIGN-ALL:+COMP-NULL:-CTYPE-OPENPGP +TLS_RSA_CAMELLIA_256_GCM_SHA384 0xc0, 0x7b TLS1.2 + +Protocols: VERS-TLS1.2, VERS-TLS1.1, VERS-TLS1.0 diff --git a/tests/data/listings-old-SSL3.0-TLS1.1 b/tests/data/listings-old-SSL3.0-TLS1.1 new file mode 100644 index 0000000000..b83b9e6f40 --- /dev/null +++ b/tests/data/listings-old-SSL3.0-TLS1.1 @@ -0,0 +1,11 @@ +Cipher suites for NORMAL:-VERS-ALL:+VERS-TLS1.0:+VERS-SSL3.0:+VERS-TLS1.1 +TLS_ECDHE_ECDSA_AES_256_CBC_SHA1 0xc0, 0x0a SSL3.0 +TLS_ECDHE_ECDSA_AES_128_CBC_SHA1 0xc0, 0x09 SSL3.0 +TLS_ECDHE_RSA_AES_256_CBC_SHA1 0xc0, 0x14 SSL3.0 +TLS_ECDHE_RSA_AES_128_CBC_SHA1 0xc0, 0x13 SSL3.0 +TLS_RSA_AES_256_CBC_SHA1 0x00, 0x35 SSL3.0 +TLS_RSA_AES_128_CBC_SHA1 0x00, 0x2f SSL3.0 +TLS_DHE_RSA_AES_256_CBC_SHA1 0x00, 0x39 SSL3.0 +TLS_DHE_RSA_AES_128_CBC_SHA1 0x00, 0x33 SSL3.0 + +Protocols: VERS-TLS1.0, VERS-SSL3.0, VERS-TLS1.1 diff --git a/tests/data/long.crl b/tests/data/long.crl new file mode 100644 index 0000000000..5dea927e7f Binary files /dev/null and b/tests/data/long.crl differ diff --git a/tests/suite/crl/long.pem b/tests/data/long.pem similarity index 100% rename from tests/suite/crl/long.pem rename to tests/data/long.pem diff --git a/tests/suite/data/ca.pem b/tests/data/pkcs7-cat-ca.pem similarity index 100% rename from tests/suite/data/ca.pem rename to tests/data/pkcs7-cat-ca.pem diff --git a/tests/suite/data/test1.cat b/tests/data/test1.cat similarity index 100% rename from tests/suite/data/test1.cat rename to tests/data/test1.cat diff --git a/tests/suite/data/test1.cat.data b/tests/data/test1.cat.data similarity index 100% rename from tests/suite/data/test1.cat.data rename to tests/data/test1.cat.data diff --git a/tests/suite/data/test1.cat.out b/tests/data/test1.cat.out similarity index 99% rename from tests/suite/data/test1.cat.out rename to tests/data/test1.cat.out index 1a0c955228..d5b20765b4 100644 --- a/tests/suite/data/test1.cat.out +++ b/tests/data/test1.cat.out @@ -5,11 +5,11 @@ Signers: Signature Algorithm: RSA-SHA1 Signed Attributes: 1.3.6.1.4.1.311.2.1.12: 3064a030802e004800650077006c006500740074002d005000610063006b00610072006400200043006f006d00700061006e0079a130802e687474703a2f2f7777772e6d6963726f736f66742e636f6d2f776864632f68636c2f64656661756c742e6d737078 - 1.2.840.113549.1.9.4: 04141c448883117564c1fe830b2833c0ef6b83030c0e + messageDigest: 04141c448883117564c1fe830b2833c0ef6b83030c0e 1.3.6.1.4.1.311.2.1.11: 300c060a2b060104018237020115 - 1.2.840.113549.1.9.3: 06092b0601040182370a01 + contentType: 06092b0601040182370a01 Unsigned Attributes: - 1.2.840.113549.1.9.6: 3082021102010130818e3077310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e3121301f060355040313184d6963726f736f66742054696d652d5374616d7020504341021333000000af5347776c1bf1a3020000000000af300906052b0e03021a0500a05d301806092a864886f70d010903310b06092a864886f70d010701301c06092a864886f70d010905310f170d3136303931333231313930395a302306092a864886f70d01090431160414d488cf8097e0d20f170aa7cff5414d9dc2f28f7b300d06092a864886f70d01010505000482010016dcd01f53ac52f8f37898f02352716c9de8dcdee53a2dfb243d503b31f252878e54c5716cd2f2237b82a1269322c50ed304c00a85e50c47b3ce43b2dfff9d1d8032541e28216281e715407b8cbe565fee869aa0e6fb6f421c1c5516c7fead80c1c2117998b0a754bb0683971d78a864707349514121bf2158305d672f8800ea02bd266c198afc22449f4579d7f0db337919accd8f8093539e1d24e5c89c0c1f9734ea8f9bec2ce9ff9f22f9649069b759ba05967742615a3953645572eddb4c5006b6fd4c6226beded0038548ed82d3993b17b473ca75e9891d524be5c39ec422d7a78baaa475bf1aa0e196d7db1858edcacea1ef34b2655772ab8fca3c7766 + countersignature: 3082021102010130818e3077310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e3121301f060355040313184d6963726f736f66742054696d652d5374616d7020504341021333000000af5347776c1bf1a3020000000000af300906052b0e03021a0500a05d301806092a864886f70d010903310b06092a864886f70d010701301c06092a864886f70d010905310f170d3136303931333231313930395a302306092a864886f70d01090431160414d488cf8097e0d20f170aa7cff5414d9dc2f28f7b300d06092a864886f70d01010505000482010016dcd01f53ac52f8f37898f02352716c9de8dcdee53a2dfb243d503b31f252878e54c5716cd2f2237b82a1269322c50ed304c00a85e50c47b3ce43b2dfff9d1d8032541e28216281e715407b8cbe565fee869aa0e6fb6f421c1c5516c7fead80c1c2117998b0a754bb0683971d78a864707349514121bf2158305d672f8800ea02bd266c198afc22449f4579d7f0db337919accd8f8093539e1d24e5c89c0c1f9734ea8f9bec2ce9ff9f22f9649069b759ba05967742615a3953645572eddb4c5006b6fd4c6226beded0038548ed82d3993b17b473ca75e9891d524be5c39ec422d7a78baaa475bf1aa0e196d7db1858edcacea1ef34b2655772ab8fca3c7766 Number of certificates: 4 diff --git a/tests/suite/data/test2.cat b/tests/data/test2.cat similarity index 100% rename from tests/suite/data/test2.cat rename to tests/data/test2.cat diff --git a/tests/suite/data/test2.cat.data b/tests/data/test2.cat.data similarity index 100% rename from tests/suite/data/test2.cat.data rename to tests/data/test2.cat.data diff --git a/tests/suite/data/test2.cat.out b/tests/data/test2.cat.out similarity index 97% rename from tests/suite/data/test2.cat.out rename to tests/data/test2.cat.out index aead58067c..aec0af9ada 100644 --- a/tests/suite/data/test2.cat.out +++ b/tests/data/test2.cat.out @@ -4,9 +4,9 @@ Signers: Signer's serial: 1656c8b2bf9bb3b24e6f3411cdcff0b5 Signature Algorithm: RSA-SHA1 Signed Attributes: - 1.2.840.113549.1.9.4: 041490608f08aab36bbeef8cb509bef6e60385058afa + messageDigest: 041490608f08aab36bbeef8cb509bef6e60385058afa 1.3.6.1.4.1.311.2.1.11: 300c060a2b060104018237020115 - 1.2.840.113549.1.9.3: 06092b0601040182370a01 + contentType: 06092b0601040182370a01 1.3.6.1.4.1.311.2.1.12: 3000 Number of certificates: 1 diff --git a/tests/datefudge-check.c b/tests/datefudge-check.c new file mode 100644 index 0000000000..f2d896d622 --- /dev/null +++ b/tests/datefudge-check.c @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2019 Red Hat + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include + +int +main (void) +{ + char outstr[200]; + time_t t; + struct tm *tmp; + + t = time(NULL); + tmp = localtime(&t); + if (tmp == NULL) { + perror("localtime"); + exit(EXIT_FAILURE); + } + + if (strftime(outstr, sizeof(outstr), "%s", tmp) == 0) { + fprintf(stderr, "strftime returned 0"); + exit(EXIT_FAILURE); + } + + puts(outstr); + exit(EXIT_SUCCESS); +} diff --git a/tests/dh-compute.c b/tests/dh-compute.c new file mode 100644 index 0000000000..217b23b762 --- /dev/null +++ b/tests/dh-compute.c @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Simo Sorce + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* This program tests functionality of DH exchanges */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include "utils.h" + +#ifdef ENABLE_FIPS140 +int _gnutls_dh_generate_key(gnutls_dh_params_t dh_params, + gnutls_datum_t *priv_key, gnutls_datum_t *pub_key); + +int _gnutls_dh_compute_key(gnutls_dh_params_t dh_params, + const gnutls_datum_t *priv_key, + const gnutls_datum_t *pub_key, + const gnutls_datum_t *peer_key, gnutls_datum_t *Z); + +static void params(gnutls_dh_params_t *dh_params, const gnutls_datum_t *p, + const gnutls_datum_t *q, const gnutls_datum_t *g) +{ + int ret; + + ret = gnutls_dh_params_init(dh_params); + if (ret != 0) + fail("error\n"); + + ret = gnutls_dh_params_import_raw3(*dh_params, p, q, g); + if (ret != 0) + fail("error\n"); +} + +static void genkey(gnutls_dh_params_t *dh_params, + gnutls_datum_t *priv_key, gnutls_datum_t *pub_key) +{ + int ret; + + ret = _gnutls_dh_generate_key(*dh_params, priv_key, pub_key); + if (ret != 0) + fail("error\n"); +} + +static void compute_key(const char *name, gnutls_dh_params_t *dh_params, + gnutls_datum_t *priv_key, gnutls_datum_t *pub_key, + const gnutls_datum_t *peer_key, int expect_error, + gnutls_datum_t *result, bool expect_success) +{ + gnutls_datum_t Z = { 0 }; + bool success; + int ret; + + ret = _gnutls_dh_compute_key(*dh_params, priv_key, pub_key, + peer_key, &Z); + if (expect_error != ret) + fail("%s: error %d (expected %d)\n", name, ret, expect_error); + + if (result) { + success = (Z.size != result->size && + memcmp(Z.data, result->data, Z.size)); + if (success != expect_success) + fail("%s: failed to match result\n", name); + } + gnutls_free(Z.data); +} + +struct dh_test_data { + const char *name; + const gnutls_datum_t prime; + const gnutls_datum_t q; + const gnutls_datum_t generator; + const gnutls_datum_t peer_key; + int expected_error; +}; + +void doit(void) +{ + struct dh_test_data test_data[] = { + { + "[y == 0]", + gnutls_ffdhe_2048_group_prime, + gnutls_ffdhe_2048_group_q, + gnutls_ffdhe_2048_group_generator, + { (void *)"\x00", 1 }, + GNUTLS_E_MPI_SCAN_FAILED + }, + { + "[y < 2]", + gnutls_ffdhe_2048_group_prime, + gnutls_ffdhe_2048_group_q, + gnutls_ffdhe_2048_group_generator, + { (void *)"\x01", 1 }, + GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER + }, + { + "[y > p - 2]", + gnutls_ffdhe_2048_group_prime, + gnutls_ffdhe_2048_group_q, + gnutls_ffdhe_2048_group_generator, + gnutls_ffdhe_2048_group_prime, + GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER + }, + { + "[y ^ q mod p == 1]", + gnutls_ffdhe_2048_group_prime, + gnutls_ffdhe_2048_group_q, + gnutls_ffdhe_2048_group_generator, + gnutls_ffdhe_2048_group_q, + GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER + }, + { + "Legal Input", + gnutls_ffdhe_2048_group_prime, + gnutls_ffdhe_2048_group_q, + gnutls_ffdhe_2048_group_generator, + { (void *)"\x02", 1 }, + 0 + }, + { NULL } + }; + + for (int i = 0; test_data[i].name != NULL; i++) { + gnutls_datum_t priv_key, pub_key; + gnutls_dh_params_t dh_params; + + params(&dh_params, &test_data[i].prime, &test_data[i].q, + &test_data[i].generator); + + genkey(&dh_params, &priv_key, &pub_key); + + compute_key(test_data[i].name, &dh_params, &priv_key, + &pub_key, &test_data[i].peer_key, + test_data[i].expected_error, NULL, 0); + + gnutls_dh_params_deinit(dh_params); + gnutls_free(priv_key.data); + gnutls_free(pub_key.data); + } + + success("all ok\n"); +} +#else +void doit(void) +{ + return; +} +#endif diff --git a/tests/dhepskself.c b/tests/dhepskself.c index 8278e9cfb8..9081f953c9 100644 --- a/tests/dhepskself.c +++ b/tests/dhepskself.c @@ -85,7 +85,7 @@ static void client(int sd) gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:+DHE-PSK", NULL); + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2:+DHE-PSK", NULL); /* put the anonymous credentials to the current session */ @@ -158,7 +158,7 @@ static gnutls_session_t initialize_tls_session(void) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL:+DHE-PSK", NULL); + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2:+DHE-PSK", NULL); gnutls_handshake_set_timeout(session, 20 * 1000); gnutls_credentials_set(session, GNUTLS_CRD_PSK, server_pskcred); @@ -298,8 +298,11 @@ void doit(void) /* parent */ server(sockets[0]); wait(&status); - } else + check_wait_status(status); + } else { client(sockets[1]); + exit(0); + } } #endif /* _WIN32 */ diff --git a/tests/dhex509self.c b/tests/dhex509self.c index bf5d0b25df..8a21ba097a 100644 --- a/tests/dhex509self.c +++ b/tests/dhex509self.c @@ -99,7 +99,7 @@ static void client(int sd) gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+DHE-RSA", NULL); + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA", NULL); /* put the x509 credentials to the current session */ @@ -217,7 +217,7 @@ static gnutls_session_t initialize_tls_session(void) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+DHE-RSA", NULL); + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA", NULL); gnutls_handshake_set_timeout(session, 20 * 1000); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -385,8 +385,11 @@ void doit(void) server(sockets[0]); wait(&status); - } else + check_wait_status(status); + } else { client(sockets[1]); + exit(0); + } } #endif /* _WIN32 */ diff --git a/tests/dn2.c b/tests/dn2.c index 8732939ac9..5c696f2301 100644 --- a/tests/dn2.c +++ b/tests/dn2.c @@ -89,6 +89,8 @@ void doit(void) if (ret < 0) fail("x509_crt_print %d\n", ret); +/* When allowing SHA1, the output is different: no broken! string */ +#ifndef ALLOW_SHA1 if (out.size != strlen(info) || strcasecmp((char *) out.data, info) != 0) { fprintf(stderr, "comparison fail (%d/%d)\nexpected: %s\n\n got: %.*s\n\n", @@ -96,6 +98,7 @@ void doit(void) out.data); fail("comparison failed\n"); } +#endif gnutls_x509_crt_deinit(cert); gnutls_global_deinit(); diff --git a/tests/dss-sig-val.c b/tests/dss-sig-val.c new file mode 100644 index 0000000000..961e3ea855 --- /dev/null +++ b/tests/dss-sig-val.c @@ -0,0 +1,241 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* Parts copied from GnuTLS example programs. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include +#include + +#include "utils.h" + +static void encode(const char *test_name, const gnutls_datum_t * sig, + const gnutls_datum_t * r, const gnutls_datum_t * s) +{ + int ret; + gnutls_datum_t tmp_r, tmp_s, tmp_sig; + + ret = gnutls_decode_rs_value(sig, &tmp_r, &tmp_s); + if (ret < 0) { + fail("%s: gnutls_decode_rs_value: %s\n", test_name, + gnutls_strerror(ret)); + exit(1); + } + + if (tmp_r.size != r->size || memcmp(r->data, tmp_r.data, r->size) != 0) { + fail("%s: gnutls_decode_rs_value: r doesn't match\n", + test_name); + exit(1); + } + + if (tmp_s.size != s->size || memcmp(s->data, tmp_s.data, s->size) != 0) { + fail("%s: gnutls_decode_rs_value: s doesn't match\n", + test_name); + exit(1); + } + + gnutls_free(tmp_r.data); + gnutls_free(tmp_s.data); + + /* check encoding */ + ret = gnutls_encode_rs_value(&tmp_sig, r, s); + if (ret < 0) { + fail("%s: gnutls_encode_rs_value: %s\n", test_name, + gnutls_strerror(ret)); + exit(1); + } + + if (tmp_sig.size != sig->size + || memcmp(sig->data, tmp_sig.data, sig->size) != 0) { + fail("%s: gnutls_encode_rs_value: sig doesn't match\n", + test_name); + exit(1); + } + + gnutls_free(tmp_sig.data); + + return; +} + +struct encode_tests_st { + const char *name; + gnutls_datum_t sig; + gnutls_datum_t r; + gnutls_datum_t s; +}; + +struct encode_tests_st encode_tests[] = { + { + .name = "test1", + .sig = + {(unsigned char *) + "\x30\x46\x02\x21\x00\xe8\xa4\x26\x96\x2c\x32\xc6\x92\x55\x71\x31\xd7\x10\x35\x92\x60\x85\x34\xf0\x65\x03\x08\x2e\x38\x2b\xc8\x28\x67\xde\x10\x7c\xf5\x02\x21\x00\xc9\x8e\x56\x4f\xb1\x62\xe1\x74\xbe\x8c\x9d\xff\x04\x88\x75\x76\x63\x91\x8a\xd6\x9d\x41\x76\xef\xe2\xb5\x8e\xbb\xa8\x88\xba\x9f", + 72}, + .r = + {(unsigned char *) + "\x00\xe8\xa4\x26\x96\x2c\x32\xc6\x92\x55\x71\x31\xd7\x10\x35\x92\x60\x85\x34\xf0\x65\x03\x08\x2e\x38\x2b\xc8\x28\x67\xde\x10\x7c\xf5", + 33}, + .s = + {(unsigned char *) + "\x00\xc9\x8e\x56\x4f\xb1\x62\xe1\x74\xbe\x8c\x9d\xff\x04\x88\x75\x76\x63\x91\x8a\xd6\x9d\x41\x76\xef\xe2\xb5\x8e\xbb\xa8\x88\xba\x9f", + 33} + }, + { + .name = "test2", + .sig = + {(unsigned char *) + "\x30\x44\x02\x20\x07\xd2\x7f\xd0\xef\x77\xa8\x29\x31\x9b\x46\x01\xb3\xaf\x66\xac\x33\x48\x15\x94\xb8\x80\xa1\x97\x71\x8f\x4a\x32\x43\x12\xec\x1f\x02\x20\x37\x06\x13\xbe\x4c\x6d\xdd\xcd\xa1\x4c\x88\xc5\x66\x85\x81\xf5\x50\x41\xb1\x4a\xee\x29\xce\x73\x2c\x09\xff\xba\xe3\x5e\x8a\x12", + 70}, + .r = + {(unsigned char *) + "\x07\xd2\x7f\xd0\xef\x77\xa8\x29\x31\x9b\x46\x01\xb3\xaf\x66\xac\x33\x48\x15\x94\xb8\x80\xa1\x97\x71\x8f\x4a\x32\x43\x12\xec\x1f", + 32}, + .s = + {(unsigned char *) + "\x37\x06\x13\xbe\x4c\x6d\xdd\xcd\xa1\x4c\x88\xc5\x66\x85\x81\xf5\x50\x41\xb1\x4a\xee\x29\xce\x73\x2c\x09\xff\xba\xe3\x5e\x8a\x12", + 32} + }, + { + .name = "test3", + .sig = + {(unsigned char *) + "\x30\x44\x02\x20\x57\x53\x71\xfd\x9c\xb5\x96\xc2\xc5\xc7\x59\xce\x2f\xc2\xbe\x8f\xdc\x22\xf9\xab\x38\xdc\x57\x81\xfb\x34\x78\x12\xae\x88\x9a\x50\x02\x20\x60\x6b\xd4\x5b\xd6\x32\x05\xae\x1f\xe6\x08\xf4\x73\x0f\x42\xbc\x32\x55\x1f\x8d\xea\x81\xec\x2b\x4a\x0b\x8c\x0f\xb1\xbe\x5f\x9b", + 70}, + .r = + {(unsigned char *) + "\x57\x53\x71\xfd\x9c\xb5\x96\xc2\xc5\xc7\x59\xce\x2f\xc2\xbe\x8f\xdc\x22\xf9\xab\x38\xdc\x57\x81\xfb\x34\x78\x12\xae\x88\x9a\x50", + 32}, + .s = + {(unsigned char *) + "\x60\x6b\xd4\x5b\xd6\x32\x05\xae\x1f\xe6\x08\xf4\x73\x0f\x42\xbc\x32\x55\x1f\x8d\xea\x81\xec\x2b\x4a\x0b\x8c\x0f\xb1\xbe\x5f\x9b", + 32} + + }, + { + .name = "test4", + .sig = + {(unsigned char *) + "\x30\x46\x02\x21\x00\xe7\xdd\x79\x58\x96\xf6\x12\x05\xc1\x7a\x44\xd6\xdf\xde\x83\xe9\xb6\x30\xa7\xff\x02\x85\x97\x34\x5a\xcd\x2f\xae\xbd\xc6\x5d\xde\x02\x21\x00\xb5\x64\xbc\x53\x97\xc5\x64\x6f\x6b\x81\xe7\x4d\xad\x36\x29\x50\xd1\x62\x91\x65\x51\xf0\xc4\xa5\x28\x80\x20\x51\x9b\xce\xcc\xc8", + 72}, + .r = + {(unsigned char *) + "\x00\xe7\xdd\x79\x58\x96\xf6\x12\x05\xc1\x7a\x44\xd6\xdf\xde\x83\xe9\xb6\x30\xa7\xff\x02\x85\x97\x34\x5a\xcd\x2f\xae\xbd\xc6\x5d\xde", + 33}, + .s = + {(unsigned char *) + "\x00\xb5\x64\xbc\x53\x97\xc5\x64\x6f\x6b\x81\xe7\x4d\xad\x36\x29\x50\xd1\x62\x91\x65\x51\xf0\xc4\xa5\x28\x80\x20\x51\x9b\xce\xcc\xc8", + 33} + }, + { + .name = "test5", + .sig = + {(unsigned char *) + "\x30\x45\x02\x20\x54\xce\x1b\x8d\x63\x5d\xa4\xdb\x26\x58\x1c\x8f\xf0\xb0\x6d\xf3\x2f\x6a\xdb\x83\xcf\x7e\xe7\xda\x98\x52\xa6\x5f\x1f\xc9\x50\x73\x02\x21\x00\xfa\xb9\x6a\x18\xd4\xc6\x45\x3c\xf2\xbf\xc2\x3d\x15\x0d\xc6\xd4\x0c\x78\x52\x12\xec\xb5\x3c\xf5\xe0\x8a\xbf\x6c\x11\xd3\xfd\x4f", + 71}, + .r = + {(unsigned char *) + "\x54\xce\x1b\x8d\x63\x5d\xa4\xdb\x26\x58\x1c\x8f\xf0\xb0\x6d\xf3\x2f\x6a\xdb\x83\xcf\x7e\xe7\xda\x98\x52\xa6\x5f\x1f\xc9\x50\x73", + 32}, + .s = + {(unsigned char *) + "\x00\xfa\xb9\x6a\x18\xd4\xc6\x45\x3c\xf2\xbf\xc2\x3d\x15\x0d\xc6\xd4\x0c\x78\x52\x12\xec\xb5\x3c\xf5\xe0\x8a\xbf\x6c\x11\xd3\xfd\x4f", + 33} + }, + { + .name = "test6", + .sig = + {(unsigned char *) + "\x30\x45\x02\x20\x3b\x77\x03\xcf\x8f\xe7\x92\xf1\x6a\x68\x3b\xcd\xb7\x21\x5b\x80\xcd\x00\x75\x65\x38\x31\x8c\xc2\x9b\x92\x6a\x1a\x02\x4b\xd8\x73\x02\x21\x00\xd9\x88\x28\x68\xae\x31\x5d\x95\xa4\x8b\x5e\x3a\x95\x24\x7b\x0d\x07\xaa\xc4\xe0\xeb\xb1\xf1\x89\xc0\xab\x4d\x88\x15\x84\x5f\x01", + 71}, + .r = + {(unsigned char *) + "\x3b\x77\x03\xcf\x8f\xe7\x92\xf1\x6a\x68\x3b\xcd\xb7\x21\x5b\x80\xcd\x00\x75\x65\x38\x31\x8c\xc2\x9b\x92\x6a\x1a\x02\x4b\xd8\x73", + 32}, + .s = + {(unsigned char *) + "\x00\xd9\x88\x28\x68\xae\x31\x5d\x95\xa4\x8b\x5e\x3a\x95\x24\x7b\x0d\x07\xaa\xc4\xe0\xeb\xb1\xf1\x89\xc0\xab\x4d\x88\x15\x84\x5f\x01", + 33} + }, + { + .name = "test7", + .sig = + {(unsigned char *) + "\x30\x45\x02\x20\x22\xa1\xbf\x7d\xcd\x7b\x5e\xab\xa0\x08\x20\xe5\xcc\x22\x34\x61\xf1\x1f\xd0\x3a\x32\xc3\x61\x19\xcf\xe4\xeb\xff\x66\xe6\x51\xa1\x02\x21\x00\x9d\x62\xcb\x04\x3e\xb6\x1f\xc1\x2e\x52\xd4\x73\x7f\xbd\xa5\x9c\x29\x49\x75\x6d\x08\xf9\xcb\x74\xd7\x41\xdc\xcb\x66\x4d\x9a\x77", + 71}, + .r = + {(unsigned char *) + "\x22\xa1\xbf\x7d\xcd\x7b\x5e\xab\xa0\x08\x20\xe5\xcc\x22\x34\x61\xf1\x1f\xd0\x3a\x32\xc3\x61\x19\xcf\xe4\xeb\xff\x66\xe6\x51\xa1", + 32}, + .s = + {(unsigned char *) + "\x00\x9d\x62\xcb\x04\x3e\xb6\x1f\xc1\x2e\x52\xd4\x73\x7f\xbd\xa5\x9c\x29\x49\x75\x6d\x08\xf9\xcb\x74\xd7\x41\xdc\xcb\x66\x4d\x9a\x77", + 33} + }, + { + .name = "test8", + .sig = + {(unsigned char *) + "\x30\x44\x02\x20\x41\xc9\x32\x16\x2e\x6f\x0c\x1f\x0f\x81\xc0\x0f\x01\x50\x31\x75\x10\x55\x25\x45\x2a\x75\xb1\xdf\x91\x8e\xdf\x24\x30\xf2\xa8\x5f\x02\x20\x07\x80\xa7\x9b\xb8\x1c\x4f\x6e\xc4\x97\x5c\xb7\x9e\x61\x2a\xf0\xfc\x16\xdd\xe7\xa3\xcc\x15\x99\x68\x08\x8e\x85\x60\x9d\x34\xf8", + 70}, + .r = + {(unsigned char *) + "\x41\xc9\x32\x16\x2e\x6f\x0c\x1f\x0f\x81\xc0\x0f\x01\x50\x31\x75\x10\x55\x25\x45\x2a\x75\xb1\xdf\x91\x8e\xdf\x24\x30\xf2\xa8\x5f", + 32}, + .s = + {(unsigned char *) + "\x07\x80\xa7\x9b\xb8\x1c\x4f\x6e\xc4\x97\x5c\xb7\x9e\x61\x2a\xf0\xfc\x16\xdd\xe7\xa3\xcc\x15\x99\x68\x08\x8e\x85\x60\x9d\x34\xf8", + 32} + + }, + { + .name = "test9", + .sig = + {(unsigned char *) + "\x30\x46\x02\x21\x00\xbe\xa1\x01\x12\x64\x1d\x66\x5a\x68\x4a\xa0\xd5\x7e\x3e\x0c\x83\x51\xaa\x21\x9a\x0f\x7b\x38\xf0\xc0\x8b\xc5\xba\xfe\x25\x83\x51\x02\x21\x00\xfb\xea\x25\x74\x78\xd3\xaa\x91\x7b\xc8\x49\x26\x22\x26\xc7\x72\x6b\x25\xfd\x05\xac\x71\x5d\xeb\x1d\xc5\xaa\x4e\xc9\x6e\x34\xb5", + 72}, + .r = + {(unsigned char *) + "\x00\xbe\xa1\x01\x12\x64\x1d\x66\x5a\x68\x4a\xa0\xd5\x7e\x3e\x0c\x83\x51\xaa\x21\x9a\x0f\x7b\x38\xf0\xc0\x8b\xc5\xba\xfe\x25\x83\x51", + 33}, + .s = + {(unsigned char *) + "\x00\xfb\xea\x25\x74\x78\xd3\xaa\x91\x7b\xc8\x49\x26\x22\x26\xc7\x72\x6b\x25\xfd\x05\xac\x71\x5d\xeb\x1d\xc5\xaa\x4e\xc9\x6e\x34\xb5", + 33} + + } +}; + +void doit(void) +{ + unsigned i; + + for (i = 0; i < sizeof(encode_tests) / sizeof(encode_tests[0]); i++) { + encode(encode_tests[i].name, &encode_tests[i].sig, + &encode_tests[i].r, &encode_tests[i].s); + } +} diff --git a/tests/dtls-client-with-seccomp.c b/tests/dtls-client-with-seccomp.c index 45d7f29899..34b2409b46 100644 --- a/tests/dtls-client-with-seccomp.c +++ b/tests/dtls-client-with-seccomp.c @@ -46,6 +46,7 @@ int main() #include #include #include +#include #include "cert-common.h" #include "utils.h" @@ -72,7 +73,7 @@ push(gnutls_transport_ptr_t tr, const void *data, size_t len) return send(fd, data, len, 0); } -static void client(int fd) +static void client(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -101,9 +102,9 @@ static void client(int fd) gnutls_handshake_set_timeout(session, 20 * 1000); /* Use default priorities */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA", - NULL); + assert(gnutls_priority_set_direct(session, + prio, + NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -174,7 +175,7 @@ static void terminate(void) exit(1); } -static void server(int fd) +static void server(int fd, const char *prio) { int ret; gnutls_certificate_credentials_t xcred; @@ -205,9 +206,9 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA", - NULL); + assert(gnutls_priority_set_direct(session, + prio, + NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -265,11 +266,13 @@ static void server(int fd) success("server: finished\n"); } -void doit(void) +static +void run(const char *name, const char *prio) { int fd[2]; int ret; + success("testing seccomp with %s\n", name); signal(SIGPIPE, SIG_IGN); ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); @@ -290,15 +293,19 @@ void doit(void) /* parent */ close(fd[1]); - server(fd[0]); + server(fd[0], prio); wait(&status); check_wait_status(status); } else { close(fd[0]); - client(fd[1]); + client(fd[1], prio); exit(0); } } +void doit(void) +{ + run("dtls1.2", "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-DTLS1.2"); +} #endif /* _WIN32 */ diff --git a/tests/dtls-max-record.c b/tests/dtls-max-record.c index e0cee44608..7934668d8d 100644 --- a/tests/dtls-max-record.c +++ b/tests/dtls-max-record.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "utils.h" #define SERVER_PUSH_ADD if (len > 512 + 5+8+32) fail("max record set to 512, len: %d\n", (int)len); @@ -47,7 +48,8 @@ static void tls_log_func(int level, const char *str) fprintf(stderr, "%s|<%d>| %s", side, level, str); } -void doit(void) +static +void run(const char *prio) { global_init(); @@ -77,9 +79,9 @@ void doit(void) gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, - "NORMAL", - NULL); + assert(gnutls_priority_set_direct(server, + prio, + NULL)>=0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_pull_timeout_function(server, @@ -105,7 +107,7 @@ void doit(void) if (ret < 0) exit(1); - ret = gnutls_priority_set_direct(client, "NORMAL", NULL); + ret = gnutls_priority_set_direct(client, prio, NULL); if (ret < 0) exit(1); @@ -144,3 +146,8 @@ void doit(void) gnutls_global_deinit(); } + +void doit(void) +{ + run("NORMAL:-VERS-ALL:+VERS-DTLS1.2"); +} diff --git a/tests/dtls-pthread.c b/tests/dtls-pthread.c new file mode 100644 index 0000000000..31c2ce5ee4 --- /dev/null +++ b/tests/dtls-pthread.c @@ -0,0 +1,369 @@ +/* + * Copyright (C) 2015 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +# include +# include +#endif +#include +#include "utils.h" +#include "cert-common.h" + +#ifdef _WIN32 + +void doit(void) +{ + exit(77); +} + +#else + +/* These are global */ +pid_t child; + +/* Tests whether we can send and receive from different threads + * using DTLS, either as server or client. DTLS is a superset of + * TLS, so correct behavior under fork means TLS would operate too. + */ + +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +#define MSG "hello1111" +#define MSG2 "xxxxxxxxxxxx" + +#define NO_MSGS 128 + +static void *recv_thread(void *arg) +{ + gnutls_session_t session = arg; + int ret; + unsigned i; + char buf[64]; + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + for (i=0;i=0); + + if (false_start) + flags |= GNUTLS_ENABLE_FALSE_START; + + assert(gnutls_init(&session, flags|GNUTLS_DATAGRAM) >= 0); + gnutls_dtls_set_mtu(session, 1500); + gnutls_dtls_set_timeouts(session, 6 * 1000, 60 * 1000); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + assert(gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred)>=0); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (do_thread) + do_thread_stuff(session); + else + do_reflect_stuff(session); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +static void server(int fd, const char *prio, unsigned do_thread) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + global_init(); + +#if 0 + if (debug) { + side = "server"; + gnutls_global_set_log_function(tls_log_func); + gnutls_global_set_log_level(4711); + } +#endif + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&session, GNUTLS_SERVER | GNUTLS_DATAGRAM)>=0); + gnutls_dtls_set_timeouts(session, 5 * 1000, 60 * 1000); + gnutls_dtls_set_mtu(session, 400); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + } + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + if (do_thread) + do_thread_stuff(session); + else + do_reflect_stuff(session); + + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static +void run(const char *str, const char *prio, unsigned do_thread, unsigned false_start) +{ + int fd[2]; + int ret; + + if (str) + success("running %s\n", str); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + int status; + /* parent */ + + close(fd[1]); + client(fd[0], prio, do_thread, false_start); + wait(&status); + check_wait_status(status); + } else { + close(fd[0]); + server(fd[1], prio, 1-do_thread); + exit(0); + } +} + +void doit(void) +{ + signal(SIGPIPE, SIG_IGN); + run("default, threaded client", "NORMAL", 0, 0); + run("default, threaded server", "NORMAL", 1, 0); + run("dtls1.2, threaded client", "NORMAL:-VERS-ALL:+VERS-DTLS1.2", 0, 0); + run("dtls1.2, threaded server", "NORMAL:-VERS-ALL:+VERS-DTLS1.2", 1, 0); + run("dtls1.2 false start, threaded client", "NORMAL:-VERS-ALL:+VERS-DTLS1.2", 0, 1); + run("dtls1.2 false start, threaded server", "NORMAL:-VERS-ALL:+VERS-DTLS1.2", 1, 1); +} +#endif /* _WIN32 */ diff --git a/tests/dtls-rehandshake-cert-2.c b/tests/dtls-rehandshake-cert-2.c index dad82ee6bf..e16372b5ef 100644 --- a/tests/dtls-rehandshake-cert-2.c +++ b/tests/dtls-rehandshake-cert-2.c @@ -80,7 +80,7 @@ static ssize_t push(gnutls_transport_ptr_t tr, const void *data, size_t len) return send(fd, data, len, 0); } -static void client(int fd, int server_init) +static void client(int fd, int server_init, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -103,8 +103,9 @@ static void client(int fd, int server_init) gnutls_init(&session, GNUTLS_CLIENT | GNUTLS_DATAGRAM); gnutls_dtls_set_mtu(session, 1500); + snprintf(buffer, sizeof(buffer), "%s:+ANON-ECDH", prio); assert(gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+CURVE-ALL", + buffer, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); @@ -135,8 +136,9 @@ static void client(int fd, int server_init) (gnutls_protocol_get_version(session))); /* update priorities to allow cert auth */ + snprintf(buffer, sizeof(buffer), "%s:+ECDHE-RSA", prio); assert(gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ECDHE-RSA:+CURVE-ALL", + buffer, NULL) >= 0); if (!server_init) { @@ -209,7 +211,7 @@ static void terminate(void) exit(1); } -static void server(int fd, int server_init) +static void server(int fd, int server_init, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -237,8 +239,9 @@ static void server(int fd, int server_init) /* avoid calling all the priority functions, since the defaults * are adequate. */ + snprintf(buffer, sizeof(buffer), "%s:+ECDHE-RSA:+ANON-ECDH", prio); assert(gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ECDHE-RSA:+ANON-ECDH:+CURVE-ALL", + buffer, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); @@ -356,7 +359,7 @@ static void server(int fd, int server_init) success("server: finished\n"); } -static void start(int server_initiated) +static void start(int server_initiated, const char *prio) { int fd[2]; int ret; @@ -378,20 +381,20 @@ static void start(int server_initiated) int status = 0; /* parent */ - server(fd[0], server_initiated); + server(fd[0], server_initiated, prio); wait(&status); check_wait_status(status); } else { close(fd[0]); - client(fd[1], server_initiated); + client(fd[1], server_initiated, prio); exit(0); } } void doit(void) { - start(0); - start(1); + start(0, "NONE:+VERS-DTLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+CURVE-ALL"); + start(1, "NONE:+VERS-DTLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+CURVE-ALL"); } #endif /* _WIN32 */ diff --git a/tests/dtls-rehandshake-cert-3.c b/tests/dtls-rehandshake-cert-3.c index f1d298c339..38d1cf7631 100644 --- a/tests/dtls-rehandshake-cert-3.c +++ b/tests/dtls-rehandshake-cert-3.c @@ -102,7 +102,7 @@ static ssize_t push(gnutls_transport_ptr_t tr, const void *data, size_t len) return send(fd, data, len, 0); } -static void client(int fd) +static void client(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -125,8 +125,9 @@ static void client(int fd) gnutls_init(&session, GNUTLS_CLIENT | GNUTLS_DATAGRAM); gnutls_dtls_set_mtu(session, MTU); + snprintf(buffer, sizeof(buffer), "%s:+ANON-ECDH", prio); assert(gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+CURVE-ALL", + buffer, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); @@ -158,8 +159,9 @@ static void client(int fd) (gnutls_protocol_get_version(session))); /* update priorities to allow cert auth */ + snprintf(buffer, sizeof(buffer), "%s:+ECDHE-RSA", prio); assert(gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ECDHE-RSA:+CURVE-ALL", + buffer, NULL) >= 0); do { @@ -216,7 +218,7 @@ static void terminate(void) exit(1); } -static void server(int fd) +static void server(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -244,8 +246,9 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ + snprintf(buffer, sizeof(buffer), "%s:+ECDHE-RSA:+ANON-ECDH", prio); assert(gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ECDHE-RSA:+ANON-ECDH:+CURVE-ALL", + buffer, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); @@ -348,7 +351,7 @@ static void server(int fd) success("server: finished\n"); } -void doit(void) +static void start(const char *prio) { int fd[2]; int ret; @@ -371,14 +374,19 @@ void doit(void) /* parent */ server_fd = fd[0]; - server(fd[0]); + server(fd[0], prio); wait(&status); check_wait_status(status); } else { close(fd[0]); - client(fd[1]); + client(fd[1], prio); exit(0); } } +void doit(void) +{ + start("NONE:+VERS-DTLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+CURVE-ALL"); +} + #endif /* _WIN32 */ diff --git a/tests/dtls-rehandshake-cert.c b/tests/dtls-rehandshake-cert.c index cad962641c..0591c771eb 100644 --- a/tests/dtls-rehandshake-cert.c +++ b/tests/dtls-rehandshake-cert.c @@ -80,7 +80,7 @@ push(gnutls_transport_ptr_t tr, const void *data, size_t len) return send(fd, data, len, 0); } -static void client(int fd, int server_init) +static void client(int fd, int server_init, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -102,9 +102,10 @@ static void client(int fd, int server_init) gnutls_dtls_set_mtu(session, 1500); /* Use default priorities */ + snprintf(buffer, sizeof(buffer), "%s:+ECDHE-RSA", prio); assert(gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ECDHE-RSA:+CURVE-ALL", - NULL) >= 0); + buffer, + NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, clientx509cred); @@ -206,7 +207,7 @@ static void terminate(void) exit(1); } -static void server(int fd, int server_init) +static void server(int fd, int server_init, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -232,9 +233,10 @@ static void server(int fd, int server_init) /* avoid calling all the priority functions, since the defaults * are adequate. */ + snprintf(buffer, sizeof(buffer), "%s:+ECDHE-RSA", prio); assert(gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ECDHE-RSA:+CURVE-ALL", - NULL) >= 0); + buffer, + NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, serverx509cred); @@ -345,7 +347,7 @@ static void server(int fd, int server_init) success("server: finished\n"); } -static void start(int server_initiated) +static void start(int server_initiated, const char *prio) { int fd[2]; int ret; @@ -367,20 +369,20 @@ static void start(int server_initiated) int status = 0; /* parent */ - server(fd[0], server_initiated); + server(fd[0], server_initiated, prio); wait(&status); check_wait_status(status); } else { close(fd[0]); - client(fd[1], server_initiated); + client(fd[1], server_initiated, prio); exit(0); } } void doit(void) { - start(0); - start(1); + start(0, "NONE:+VERS-DTLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+CURVE-ALL"); + start(1, "NONE:+VERS-DTLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+CURVE-ALL"); } #endif /* _WIN32 */ diff --git a/tests/dtls-repro-20170915.c b/tests/dtls-repro-20170915.c new file mode 100644 index 0000000000..78910a06b1 --- /dev/null +++ b/tests/dtls-repro-20170915.c @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2015-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the various certificate key exchange methods supported + * in gnutls */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "common-cert-key-exchange.h" +#include "cert-repro-20170915.h" + +void doit(void) +{ + global_init(); + + dtls_try_with_key_mtu("DTLS 1.2 with cli-cert", "NONE:+VERS-DTLS1.0:+MAC-ALL:+KX-ALL:+CIPHER-ALL:+SIGN-ALL:+COMP-ALL:+CURVE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, + &server_repro_cert, &server_repro_key, &client_repro_cert, &client_repro_key, USE_CERT, 1452); + + gnutls_global_deinit(); +} diff --git a/tests/dtls-session-ticket-lost.c b/tests/dtls-session-ticket-lost.c new file mode 100644 index 0000000000..df3a606fe9 --- /dev/null +++ b/tests/dtls-session-ticket-lost.c @@ -0,0 +1,247 @@ +/* + * Copyright (C) 2018 Red Hat, Inc + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" + +/* This program is a reproducer for issue #543; the timeout + * of DTLS handshake when a NewSessionTicket is lost. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define MAX_BUF 1024 + +static void client(int fd, const char *prio) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(6); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_DATAGRAM)>=0); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + gnutls_record_set_timeout(session, 30*1000); + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_WR); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); +} + + +static ssize_t +server_push(gnutls_transport_ptr_t tr, const void *data, size_t len) +{ + const uint8_t *d = data; + static int dropped = 0; + + if (d[13] == GNUTLS_HANDSHAKE_NEW_SESSION_TICKET) { + if (dropped == 0) { + success("dropping message: %s\n", gnutls_handshake_description_get_name(d[13])); + dropped = 1; + return len; + } + } + + return send((long)tr, data, len, 0); +} + +static void server(int fd, const char *prio) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + gnutls_datum_t skey; + + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(6); + } + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&session, GNUTLS_SERVER|GNUTLS_DATAGRAM)>=0); + + assert(gnutls_session_ticket_key_generate(&skey)>=0); + assert(gnutls_session_ticket_enable_server(session, &skey) >= 0); + + gnutls_transport_set_push_function(session, server_push); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + /* failure is expected here */ + goto end; + } + + if (debug) { + success("server: Handshake was completed\n"); + } + + gnutls_record_set_timeout(session, 30*1000); + + success("waiting for EOF\n"); + do { + ret = gnutls_record_recv(session, buffer, sizeof(buffer)); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret != 0) + fail("error waiting for EOF: %s\n", gnutls_strerror(ret)); + + end: + close(fd); + gnutls_deinit(session); + gnutls_free(skey.data); + + gnutls_certificate_free_credentials(x509_cred); + + if (debug) + success("server: finished\n"); +} + +static void ch_handler(int sig) +{ + return; +} + +static +void start(const char *prio) +{ + int fd[2]; + int ret, status = 0; + pid_t child; + + success("trying %s\n", prio); + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + client(fd[0], prio); + waitpid(child, &status, 0); + check_wait_status(status); + } else { + close(fd[0]); + server(fd[1], prio); + exit(0); + } + + return; +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-DTLS1.2"); +} + +#endif /* _WIN32 */ diff --git a/tests/dtls-sliding-window.c b/tests/dtls-sliding-window.c index 59efdb1689..d8e3c783c5 100644 --- a/tests/dtls-sliding-window.c +++ b/tests/dtls-sliding-window.c @@ -41,37 +41,14 @@ struct record_parameters_st { unsigned epoch; }; -typedef struct { - unsigned char i[8]; -} gnutls_uint64; #define gnutls_assert_val(x) x void _dtls_reset_window(struct record_parameters_st *rp); -int _dtls_record_check(struct record_parameters_st *rp, gnutls_uint64 * _seq); - -/* taken from nettle */ -#ifdef WORDS_BIGENDIAN -# define BSWAP64(x) x -#else -# define BSWAP64(x) \ - ((((uint64_t)(x) & 0xff) << 56) \ - | (((uint64_t)(x) & 0xff00) << 40) \ - | (((uint64_t)(x) & 0xff0000) << 24) \ - | (((uint64_t)(x) & 0xff000000) << 8) \ - | (((uint64_t)(x) >> 8) & 0xff000000) \ - | (((uint64_t)(x) >> 24) & 0xff0000) \ - | (((uint64_t)(x) >> 40) & 0xff00) \ - | ((uint64_t)(x) >> 56) ) -#endif +int _dtls_record_check(struct record_parameters_st *rp, uint64_t _seq); #define DTLS_SW_NO_INCLUDES #include "../lib/dtls-sw.c" -static void uint64_set(gnutls_uint64* t, uint64_t v) -{ - memcpy(t->i, &v, 8); -} - #define RESET_WINDOW \ memset(&state, 0, sizeof(state)) @@ -79,78 +56,78 @@ static void uint64_set(gnutls_uint64* t, uint64_t v) state.dtls_sw_next = (((x)&DTLS_SEQ_NUM_MASK)) #define SET_WINDOW_LAST_RECV(x) \ - uint64_set(&t, BSWAP64(x)); \ + t = x; \ state.dtls_sw_have_recv = 1 static void check_dtls_window_uninit_0(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(0); - uint64_set(&t, 0); + t = 0; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_uninit_large(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; - uint64_set(&t, BSWAP64(LARGE_INT+1+64)); + t = LARGE_INT+1+64; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_uninit_very_large(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; - uint64_set(&t, BSWAP64(INT_OVER_32_BITS)); + t = INT_OVER_32_BITS; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_12(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(0); SET_WINDOW_LAST_RECV(1); - uint64_set(&t, BSWAP64(2)); + t = 2; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_19(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(0); SET_WINDOW_LAST_RECV(1); - uint64_set(&t, BSWAP64(9)); + t = 9; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_skip1(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; unsigned i; RESET_WINDOW; @@ -158,15 +135,15 @@ static void check_dtls_window_skip1(void **glob_state) SET_WINDOW_LAST_RECV(1); for (i=2;i<256;i+=2) { - uint64_set(&t, BSWAP64(i)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = i; + assert_int_equal(_dtls_record_check(&state, t), 0); } } static void check_dtls_window_skip3(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; unsigned i; RESET_WINDOW; @@ -174,327 +151,327 @@ static void check_dtls_window_skip3(void **glob_state) SET_WINDOW_LAST_RECV(1); for (i=5;i<256;i+=2) { - uint64_set(&t, BSWAP64(i)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = i; + assert_int_equal(_dtls_record_check(&state, t), 0); } } static void check_dtls_window_21(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(0); SET_WINDOW_LAST_RECV(2); - uint64_set(&t, BSWAP64(1)); + t = 1; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_91(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(0); SET_WINDOW_LAST_RECV(9); - uint64_set(&t, BSWAP64(1)); + t = 1; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_large_21(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(LARGE_INT); SET_WINDOW_LAST_RECV(LARGE_INT+2); - uint64_set(&t, BSWAP64(LARGE_INT+1)); + t = LARGE_INT+1; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_large_12(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(LARGE_INT); SET_WINDOW_LAST_RECV(LARGE_INT+1); - uint64_set(&t, BSWAP64(LARGE_INT+2)); + t = LARGE_INT+2; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_large_91(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(LARGE_INT); SET_WINDOW_LAST_RECV(LARGE_INT+9); - uint64_set(&t, BSWAP64(LARGE_INT+1)); + t = LARGE_INT+1; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_large_19(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(LARGE_INT); SET_WINDOW_LAST_RECV(LARGE_INT+1); - uint64_set(&t, BSWAP64(LARGE_INT+9)); + t = LARGE_INT+9; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_very_large_12(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(INT_OVER_32_BITS); SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+1); - uint64_set(&t, BSWAP64(INT_OVER_32_BITS+2)); + t = INT_OVER_32_BITS+2; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_very_large_91(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(INT_OVER_32_BITS); SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+9); - uint64_set(&t, BSWAP64(INT_OVER_32_BITS+1)); + t = INT_OVER_32_BITS+1; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_very_large_19(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(INT_OVER_32_BITS); SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+1); - uint64_set(&t, BSWAP64(INT_OVER_32_BITS+9)); + t = INT_OVER_32_BITS+9; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_outside(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(0); SET_WINDOW_LAST_RECV(1); - uint64_set(&t, BSWAP64(1+64)); + t = 1+64; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_large_outside(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(LARGE_INT); SET_WINDOW_LAST_RECV(LARGE_INT+1); - uint64_set(&t, BSWAP64(LARGE_INT+1+64)); + t = LARGE_INT+1+64; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_very_large_outside(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(INT_OVER_32_BITS); SET_WINDOW_LAST_RECV(INT_OVER_32_BITS+1); - uint64_set(&t, BSWAP64(INT_OVER_32_BITS+1+64)); + t = INT_OVER_32_BITS+1+64; - assert_int_equal(_dtls_record_check(&state, &t), 0); + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_dup1(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(LARGE_INT-1); SET_WINDOW_LAST_RECV(LARGE_INT); - uint64_set(&t, BSWAP64(LARGE_INT)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+1)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+1; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+16)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+16; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+1)); - assert_int_equal(_dtls_record_check(&state, &t), -3); + t = LARGE_INT+1; + assert_int_equal(_dtls_record_check(&state, t), -3); } static void check_dtls_window_dup2(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(LARGE_INT-1); SET_WINDOW_LAST_RECV(LARGE_INT); - uint64_set(&t, BSWAP64(LARGE_INT)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+16)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+16; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+1)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+1; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+16)); - assert_int_equal(_dtls_record_check(&state, &t), -3); + t = LARGE_INT+16; + assert_int_equal(_dtls_record_check(&state, t), -3); } static void check_dtls_window_dup3(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(LARGE_INT-1); SET_WINDOW_LAST_RECV(LARGE_INT); - uint64_set(&t, BSWAP64(LARGE_INT)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+16)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+16; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+15)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+15; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+14)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+14; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+5)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+5; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+5)); - assert_int_equal(_dtls_record_check(&state, &t), -3); + t = LARGE_INT+5; + assert_int_equal(_dtls_record_check(&state, t), -3); } static void check_dtls_window_out_of_order(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(LARGE_INT-1); SET_WINDOW_LAST_RECV(LARGE_INT); - uint64_set(&t, BSWAP64(LARGE_INT)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+8)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+8; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+7)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+7; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+6)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+6; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+5)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+5; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+4)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+4; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+3)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+3; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+2)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+2; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+1)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+1; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(LARGE_INT+9)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT+9; + assert_int_equal(_dtls_record_check(&state, t), 0); } static void check_dtls_window_epoch_higher(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; SET_WINDOW_NEXT(LARGE_INT-1); SET_WINDOW_LAST_RECV(LARGE_INT); - uint64_set(&t, BSWAP64(LARGE_INT)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = LARGE_INT; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64((LARGE_INT+8)|0x1000000000000LL)); - assert_int_equal(_dtls_record_check(&state, &t), -1); + t = (LARGE_INT+8)|0x1000000000000LL; + assert_int_equal(_dtls_record_check(&state, t), -1); } static void check_dtls_window_epoch_lower(void **glob_state) { struct record_parameters_st state; - gnutls_uint64 t; + uint64_t t; RESET_WINDOW; - uint64_set(&t, BSWAP64(0x1000000000000LL)); + t = 0x1000000000000LL; state.epoch = 1; SET_WINDOW_NEXT(0x1000000000000LL); SET_WINDOW_LAST_RECV((0x1000000000000LL) + 1); - uint64_set(&t, BSWAP64(2 | 0x1000000000000LL)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = 2 | 0x1000000000000LL; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(3 | 0x1000000000000LL)); - assert_int_equal(_dtls_record_check(&state, &t), 0); + t = 3 | 0x1000000000000LL; + assert_int_equal(_dtls_record_check(&state, t), 0); - uint64_set(&t, BSWAP64(5)); - assert_int_equal(_dtls_record_check(&state, &t), -1); + t = 5; + assert_int_equal(_dtls_record_check(&state, t), -1); } diff --git a/tests/dtls-with-seccomp.c b/tests/dtls-with-seccomp.c index 161e105b32..192d4d19ca 100644 --- a/tests/dtls-with-seccomp.c +++ b/tests/dtls-with-seccomp.c @@ -44,6 +44,7 @@ int main() #include #include #include +#include #include #include @@ -72,7 +73,7 @@ push(gnutls_transport_ptr_t tr, const void *data, size_t len) return send(fd, data, len, 0); } -static void client(int fd) +static void client(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -94,10 +95,7 @@ static void client(int fd) gnutls_dtls_set_mtu(session, 1500); gnutls_handshake_set_timeout(session, 20 * 1000); - /* Use default priorities */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -168,7 +166,7 @@ static void terminate(void) exit(1); } -static void server(int fd) +static void server(int fd, const char *prio) { int ret; gnutls_certificate_credentials_t xcred; @@ -202,12 +200,7 @@ static void server(int fd) gnutls_handshake_set_timeout(session, 20 * 1000); gnutls_dtls_set_mtu(session, 1500); - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -265,11 +258,13 @@ static void server(int fd) success("server: finished\n"); } -void doit(void) +static +void run(const char *name, const char *prio) { int fd[2]; int ret; + success("trying: %s\n", name); signal(SIGPIPE, SIG_IGN); ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); @@ -290,15 +285,23 @@ void doit(void) /* parent */ close(fd[0]); - client(fd[1]); + client(fd[1], prio); wait(&status); check_wait_status(status); } else { close(fd[1]); - server(fd[0]); + server(fd[0], prio); exit(0); } } +void doit(void) +{ + run("dtls1.0", "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-DTLS1.0"); + run("dtls1.2", "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-DTLS1.2"); + run("default", "NORMAL"); +} + + #endif /* _WIN32 */ diff --git a/tests/dtls/Makefile.am b/tests/dtls/Makefile.am deleted file mode 100644 index 6c8f411121..0000000000 --- a/tests/dtls/Makefile.am +++ /dev/null @@ -1,51 +0,0 @@ -## Process this file with automake to produce Makefile.in -# Copyright (C) 2012 Free Software Foundation, Inc. -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -dist_check_SCRIPTS = dtls dtls-nb dtls-resume - -AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) -AM_CPPFLAGS = \ - -I$(top_srcdir)/gl \ - -I$(top_builddir)/gl \ - -I$(top_srcdir)/lib/includes \ - -I$(top_builddir)/lib/includes \ - -I$(top_srcdir)/extra/includes \ - -I$(top_builddir)/extra/includes \ - -I$(top_srcdir)/lib \ - -I$(top_srcdir)/tests \ - -I$(top_srcdir)/doc/examples - -AM_LDFLAGS = -no-install -LDADD = ../../lib/libgnutls.la \ - ../../gl/libgnu.la \ - $(LIBSOCKET) $(INET_NTOP_LIB) $(INET_PTON_LIB) $(LIBRT) - -if !WINDOWS - -check_PROGRAMS = dtls-stress -TESTS = dtls dtls-resume - -endif - -TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) \ - LC_ALL="C" \ - top_builddir="$(top_builddir)" \ - srcdir="$(srcdir)" diff --git a/tests/dtls1-2-mtu-check.c b/tests/dtls1-2-mtu-check.c index 06c3c2a692..49eead1479 100644 --- a/tests/dtls1-2-mtu-check.c +++ b/tests/dtls1-2-mtu-check.c @@ -79,7 +79,7 @@ static void dtls_mtu_try(const char *name, const char *client_prio, serverx509cred); assert(gnutls_priority_set_direct(server, - "NORMAL:+ANON-ECDH:+ANON-DH:+3DES-CBC:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519", + "NORMAL:+ANON-ECDH:+ANON-DH:+3DES-CBC:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+SHA256:+CURVE-X25519", NULL) >= 0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -119,8 +119,9 @@ static void dtls_mtu_try(const char *name, const char *client_prio, } { - char msg[dmtu+1]; - memset(msg, 1, sizeof(msg)); + char *msg = gnutls_malloc(dmtu+1); + assert(msg); + memset(msg, 1, dmtu+1); ret = gnutls_record_send(client, msg, dmtu+1); if (ret != (int)GNUTLS_E_LARGE_PACKET) { myfail("could send larger packet than MTU (%d), ret: %d\n", dmtu, ret); @@ -139,6 +140,23 @@ static void dtls_mtu_try(const char *name, const char *client_prio, for (i=0;i -#endif - -/* This program tests the various certificate key exchange methods supported - * in gnutls */ - -#include -#include -#include -#include -#include -#include "utils.h" -#include "common-cert-key-exchange.h" - -void doit(void) -{ - global_init(); - - dtls_try("DTLS 1.0 with anon-ecdh", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ANON-ECDH", GNUTLS_KX_ANON_ECDH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.0 with anon-dh", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.0 with dhe-rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.0 with ecdhe x25519 rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.0 with ecdhe rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.0 with ecdhe ecdsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - - dtls_try("DTLS 1.0 with rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.0 with dhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - dtls_try("DTLS 1.0 with ecdhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - dtls_try("DTLS 1.0 with rsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - dtls_try("DTLS 1.0 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - - dtls_try("DTLS 1.0 with dhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - dtls_try("DTLS 1.0 with ecdhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - dtls_try("DTLS 1.0 with rsa ask cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - dtls_try("DTLS 1.0 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - - gnutls_global_deinit(); -} diff --git a/tests/dtls1.2-cert-key-exchange.c b/tests/dtls1.2-cert-key-exchange.c deleted file mode 100644 index f8f6010bec..0000000000 --- a/tests/dtls1.2-cert-key-exchange.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2015-2016 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -/* This program tests the various certificate key exchange methods supported - * in gnutls */ - -#include -#include -#include -#include -#include -#include "utils.h" -#include "common-cert-key-exchange.h" - -void doit(void) -{ - global_init(); - - dtls_try("DTLS 1.2 with anon-ecdh", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ANON-ECDH", GNUTLS_KX_ANON_ECDH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.2 with anon-dh", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.2 with dhe-rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.2 with ecdhe x25519 rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.2 with ecdhe rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.2 with ecdhe ecdsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - - dtls_try("DTLS 1.2 with rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - dtls_try("DTLS 1.2 with dhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - dtls_try("DTLS 1.2 with ecdhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - dtls_try("DTLS 1.2 with rsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - dtls_try("DTLS 1.2 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - - dtls_try("DTLS 1.2 with dhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - dtls_try("DTLS 1.2 with ecdhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - dtls_try("DTLS 1.2 with rsa ask cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - dtls_try("DTLS 1.2 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - - gnutls_global_deinit(); -} diff --git a/tests/dtls10-cert-key-exchange.c b/tests/dtls10-cert-key-exchange.c new file mode 100644 index 0000000000..90b19bdeb0 --- /dev/null +++ b/tests/dtls10-cert-key-exchange.c @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2015-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the various certificate key exchange methods supported + * in gnutls */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "common-cert-key-exchange.h" +#include "cert-common.h" + +void doit(void) +{ + global_init(); + + dtls_try("DTLS 1.0 with anon-ecdh", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ANON-ECDH", GNUTLS_KX_ANON_ECDH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + dtls_try("DTLS 1.0 with anon-dh", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + dtls_try("DTLS 1.0 with dhe-rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + dtls_try("DTLS 1.0 with ecdhe x25519 rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + dtls_try("DTLS 1.0 with ecdhe rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + dtls_try_with_key("DTLS 1.0 with ecdhe ecdsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, NULL, NULL, 0); + + dtls_try("DTLS 1.0 with rsa no cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + dtls_try_cli("DTLS 1.0 with dhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + dtls_try_cli("DTLS 1.0 with ecdhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + dtls_try_cli("DTLS 1.0 with rsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + dtls_try_with_key("DTLS 1.0 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_RSA_SHA256, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, USE_CERT); + + dtls_try_cli("DTLS 1.0 with dhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + dtls_try_cli("DTLS 1.0 with ecdhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + dtls_try_cli("DTLS 1.0 with rsa ask cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + dtls_try_with_key("DTLS 1.0 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, ASK_CERT); + + gnutls_global_deinit(); +} diff --git a/tests/dtls12-cert-key-exchange.c b/tests/dtls12-cert-key-exchange.c new file mode 100644 index 0000000000..82028041d7 --- /dev/null +++ b/tests/dtls12-cert-key-exchange.c @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2015-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the various certificate key exchange methods supported + * in gnutls */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "common-cert-key-exchange.h" +#include "cert-common.h" + +void doit(void) +{ + global_init(); + + dtls_try("DTLS 1.2 with anon-ecdh", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ANON-ECDH", GNUTLS_KX_ANON_ECDH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + dtls_try("DTLS 1.2 with anon-dh", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + dtls_try("DTLS 1.2 with dhe-rsa no-cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + dtls_try("DTLS 1.2 with ecdhe x25519 rsa no-cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + dtls_try("DTLS 1.2 with ecdhe rsa no-cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + dtls_try_with_key("DTLS 1.2 with ecdhe ecdsa no-cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, NULL, NULL, 0); + + dtls_try("DTLS 1.2 with ecdhe rsa-pss sig no-cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + dtls_try("DTLS 1.2 with ecdhe rsa-pss no-cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + dtls_try_with_key("TLS 1.2 with ecdhe rsa-pss/rsa-pss no-cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, NULL, NULL, 0); + dtls_try("DTLS 1.2 with rsa no-cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + + dtls_try_cli("DTLS 1.2 with dhe-rsa cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + dtls_try_cli("DTLS 1.2 with ecdhe-rsa cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + dtls_try_cli("DTLS 1.2 with rsa cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + dtls_try_with_key("DTLS 1.2 with ecdhe ecdsa cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_RSA_SHA256, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, USE_CERT); + dtls_try_with_key("DTLS 1.2 with ecdhe ecdsa/ecdsa cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_ECDSA_SHA256, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, USE_CERT); + + + dtls_try_cli("DTLS 1.2 with ecdhe-rsa-pss cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, USE_CERT); + dtls_try_with_key("DTLS 1.2 with ecdhe-rsa-pss/rsa-pss cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_RSA_PSS_SHA256, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, &cli_ca3_rsa_pss_cert, &cli_ca3_rsa_pss_key, USE_CERT); + dtls_try_cli("DTLS 1.2 with dhe-rsa ask cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + dtls_try_cli("DTLS 1.2 with ecdhe-rsa ask cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + dtls_try_cli("DTLS 1.2 with rsa ask cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + dtls_try_with_key("DTLS 1.2 with ecdhe ecdsa cli-cert", "NORMAL:-VERS-ALL:+VERS-DTLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, ASK_CERT); + + gnutls_global_deinit(); +} diff --git a/tests/dtls_hello_random_value.c b/tests/dtls_hello_random_value.c new file mode 100644 index 0000000000..601c8686bf --- /dev/null +++ b/tests/dtls_hello_random_value.c @@ -0,0 +1,336 @@ +/* + * Copyright (C) 2017-2020 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* This program tests whether the second DTLS client hello contains the same + * random value, and whether it is initialized. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#if !defined(_WIN32) +#include +#include +#endif +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +unsigned char crandom[32]; +static unsigned cb_called = 0; + +static int hello_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + unsigned non_zero = 0, i; + + if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && post == GNUTLS_HOOK_POST) { + if (cb_called == 0) { + /* save first value */ + gnutls_datum_t tmp; + gnutls_session_get_random(session, &tmp, NULL); + assert(tmp.size == 32); + + memcpy(crandom, tmp.data, tmp.size); + cb_called++; + + /* check if uninitialized */ + for (i=0;i<32;i++) { + if (crandom[i] != 0) { + non_zero++; + } + } + + if (non_zero <= 8) { + fail("the client random value seems uninitialized\n"); + } + } else { /* verify it is the same */ + gnutls_datum_t tmp; + gnutls_session_get_random(session, &tmp, NULL); + + assert(tmp.size == 32); + if (memcmp(tmp.data, crandom, tmp.size) != 0) { + fail("the random values differ!\n"); + } + cb_called++; + } + } if (htype == GNUTLS_HANDSHAKE_SERVER_HELLO && post == GNUTLS_HOOK_POST) { + gnutls_datum_t tmp; + gnutls_session_get_random(session, NULL, &tmp); + assert(tmp.size == 32); + + for (i=0;i<32;i++) { + if (tmp.data[i] != 0) { + non_zero++; + } + } + if (non_zero <= 8) { + fail("the server random value seems uninitialized\n"); + } + } + + return 0; +} + +static void client(int sd, const char *priority) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t clientx509cred; + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "client"; + + gnutls_certificate_allocate_credentials(&clientx509cred); + + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_DATAGRAM)>=0); + + if (!priority) { + assert(gnutls_set_default_priority(session) >= 0); + } else { + assert(gnutls_priority_set_direct(session, priority, NULL) >= 0); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + + gnutls_transport_set_int(session, sd); + gnutls_dtls_set_mtu(session, 1500); + gnutls_handshake_set_timeout(session, 20 * 1000); + + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, hello_callback); + + ret = gnutls_handshake(session); + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (cb_called != 2) { + fail("client: the callback was not seen twice!\n"); + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + close(sd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(clientx509cred); +} + +#define MAX_BUF 1024 +#define CLI_ADDR (void*)"test" +#define CLI_ADDR_LEN 4 + +static ssize_t +push(gnutls_transport_ptr_t tr, const void *data, size_t len) +{ + int fd = (long int) tr; + + return send(fd, data, len, 0); +} + +static void server(int sd, const char *priority) +{ + int ret, csend = 0; + char buffer[MAX_BUF + 1]; + gnutls_certificate_credentials_t serverx509cred; + gnutls_dtls_prestate_st prestate; + gnutls_session_t session; + gnutls_datum_t cookie_key; + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "server"; + + ret = gnutls_key_generate(&cookie_key, GNUTLS_COOKIE_KEY_SIZE); + if (ret < 0) { + fail("Cannot generate key: %s\n", gnutls_strerror(ret)); + } + + for (;;) { + ret = recv(sd, buffer, sizeof(buffer), MSG_PEEK); + if (ret < 0) { + fail("Cannot receive data\n"); + } + + memset(&prestate, 0, sizeof(prestate)); + ret = + gnutls_dtls_cookie_verify(&cookie_key, CLI_ADDR, + CLI_ADDR_LEN, buffer, ret, + &prestate); + if (ret < 0) { /* cookie not valid */ + if (debug) + success("Sending hello verify request\n"); + + ret = + gnutls_dtls_cookie_send(&cookie_key, CLI_ADDR, + CLI_ADDR_LEN, + &prestate, + (gnutls_transport_ptr_t) + (long) sd, push); + if (ret < 0) { + fail("Cannot send data\n"); + } + + /* discard peeked data */ + recv(sd, buffer, sizeof(buffer), 0); + csend++; + + if (csend > 2) { + fail("too many cookies sent\n"); + } + + continue; + } + + /* success */ + break; + } + + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&session, GNUTLS_SERVER|GNUTLS_DATAGRAM)>=0); + assert(session != NULL); + + if (!priority) { + assert(gnutls_set_default_priority(session) >= 0); + } else { + assert(gnutls_priority_set_direct(session, priority, NULL) >= 0); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_dtls_set_mtu(session, 1500); + + gnutls_dtls_prestate_set(session, &prestate); + + ret = gnutls_handshake(session); + if (ret < 0) { + fail("server: Handshake has failed: %s\n\n", + gnutls_strerror(ret)); + } + if (debug) + success("server: Handshake was completed\n"); + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + close(sd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_free(cookie_key.data); + + if (debug) + success("server: finished\n"); +} + +static void start(const char *name, const char *priority) +{ + pid_t child; + int sockets[2]; + int err; + + success("testing: %s\n", name); + cb_called = 0; + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status = 0; + /* parent */ + close(sockets[1]); + client(sockets[0], priority); + wait(&status); + check_wait_status(status); + } else { + close(sockets[0]); + server(sockets[1], priority); + exit(0); + } +} + +void doit(void) +{ + signal(SIGPIPE, SIG_IGN); + + start("default", NULL); + start("dtls1.2", "NORMAL:-VERS-ALL:+VERS-DTLS1.2"); + start("dtls1.0", "NORMAL:-VERS-ALL:+VERS-DTLS1.0"); +} + +#endif /* _WIN32 */ diff --git a/tests/duplicate-extensions.c b/tests/duplicate-extensions.c new file mode 100644 index 0000000000..d3db925da7 --- /dev/null +++ b/tests/duplicate-extensions.c @@ -0,0 +1,220 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) || !defined(ENABLE_SSL2) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +pid_t child; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s |<%d>| %s", child ? "server" : "client", level, + str); +} + +/* A very basic TLS client, with anonymous authentication. + */ + + +static unsigned char tls1_hello[] = + "\x16\x03\x01\x01\x5e\x01\x00\x01\x5a\x03\x03\x59\x41\x25\x0e\x19" + "\x02\x56\xa2\xe4\x97\x00\xea\x18\xd2\xb0\x00\xb9\xa2\x8a\x61\xb3" + "\xdd\x65\xed\xfd\x03\xaf\x93\x8d\xb2\x15\xf3\x00\x00\xd4\xc0\x30" + "\xcc\xa8\xc0\x8b\xc0\x14\xc0\x28\xc0\x77\xc0\x2f\xc0\x8a\xc0\x13" + "\xc0\x27\xc0\x76\xc0\x12\xc0\x2c\xc0\xad\xcc\xa9\xc0\x87\xc0\x0a" + "\xc0\x24\xc0\x73\xc0\x2b\xc0\xac\xc0\x86\xc0\x09\xc0\x23\xc0\x72" + "\xc0\x08\x00\x9d\xc0\x9d\xc0\x7b\x00\x35\x00\x3d\x00\x84\x00\xc0" + "\x00\x9c\xc0\x9c\xc0\x7a\x00\x2f\x00\x3c\x00\x41\x00\xba\x00\x0a" + "\x00\x9f\xc0\x9f\xcc\xaa\xc0\x7d\x00\x39\x00\x6b\x00\x88\x00\xc4" + "\x00\x9e\xc0\x9e\xc0\x7c\x00\x33\x00\x67\x00\x45\x00\xbe\x00\x16" + "\x00\xa3\xc0\x81\x00\x38\x00\x6a\x00\x87\x00\xc3\x00\xa2\xc0\x80" + "\x00\x32\x00\x40\x00\x44\x00\xbd\x00\x13\x00\xa9\xc0\xa5\xcc\xab" + "\xc0\x8f\x00\x8d\x00\xaf\xc0\x95\x00\xa8\xc0\xa4\xc0\x8e\x00\x8c" + "\x00\xae\xc0\x94\x00\x8b\x00\xab\xc0\xa7\xcc\xad\xc0\x91\x00\x91" + "\x00\xb3\xc0\x97\x00\xaa\xc0\xa6\xc0\x90\x00\x90\x00\xb2\xc0\x96" + "\x00\x8f\xcc\xac\xc0\x36\xc0\x38\xc0\x9b\xc0\x35\xc0\x37\xc0\x9a" + "\xc0\x34\x01\x00\x00\x5d\x00\x17\x00\x00\x00\x16\x00\x00\x00\x05" + "\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x13\x00\x11\x00\x00\x0e" + "\x77\x77\x77\x2e\x61\x6d\x61\x7a\x6f\x6e\x2e\x63\x6f\x6d\xff\x01" + "\x00\x01\x00\x00\x23\x00\x00\x00\x0b\x00\x02\x01\x00\x00\x0b\x00" + "\x02\x01\x00\x00\x0d\x00\x16\x00\x14\x04\x01\x04\x03\x05\x01\x05" + "\x03\x06\x01\x06\x03\x03\x01\x03\x03\x02\x01\x02\x03\x00\x0a\x00" + "\x02\x00\x17"; + +static void client(int sd) +{ + char buf[1024]; + int ret; + struct pollfd pfd; + + /* send a TLS 1.x hello with duplicate extensions */ + + ret = send(sd, tls1_hello, sizeof(tls1_hello)-1, 0); + if (ret < 0) + fail("error sending hello\n"); + + pfd.fd = sd; + pfd.events = POLLIN; + pfd.revents = 0; + + do { + ret = poll(&pfd, 1, 10000); + } while (ret == -1 && errno == EINTR); + + if (ret == -1 || ret == 0) { + fail("timeout waiting for reply\n"); + } + + success("sent hello\n"); + ret = recv(sd, buf, sizeof(buf), 0); + if (ret < 0) + fail("error receiving alert\n"); + + success("received reply\n"); + + if (ret < 7) + fail("error in size of received alert\n"); + + if (buf[0] != 0x15 || buf[1] != 0x03) + fail("error in received alert data\n"); + + success("all ok\n"); + + close(sd); +} + +static void server(int sd) +{ + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + int ret; + + /* this must be called once in the program + */ + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_trust_mem(x509_cred, &ca3_cert, + GNUTLS_X509_FMT_PEM); + + gnutls_certificate_set_x509_key_mem(x509_cred, &server_ca3_localhost_cert, + &server_ca3_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.0:+VERS-TLS1.1:+VERS-TLS1.2", NULL); + gnutls_handshake_set_timeout(session, 20 * 1000); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, sd); + do { + ret = gnutls_handshake(session); + } while(ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN); + + if (ret != GNUTLS_E_RECEIVED_ILLEGAL_EXTENSION) { + fail("server: Handshake succeeded unexpectedly\n"); + } + + gnutls_alert_send_appropriate(session, ret); + + close(sd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + + +void doit(void) +{ + int sockets[2]; + int err; + + signal(SIGPIPE, SIG_IGN); + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status; + + client(sockets[1]); + wait(&status); + check_wait_status(status); + } else { + server(sockets[0]); + _exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/eagain-auto-auth.c b/tests/eagain-auto-auth.c new file mode 100644 index 0000000000..20831751ea --- /dev/null +++ b/tests/eagain-auto-auth.c @@ -0,0 +1,235 @@ +/* + * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Simon Josefsson, Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#define RANDOMIZE +#include "cert-common.h" +#include "cmocka-common.h" + +/* This tests operation under non-blocking mode in TLS1.2/TLS1.3 + * rekey/rehandshake. + */ +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d>| %s", level, str); +} + +#define MAX_BUF 1024 +#define MSG "Hello TLS, and hi and how are you and more data here... and more... and even more and even more more data..." + +static unsigned int cert_asked = 0; + +static int cert_callback(gnutls_session_t session, + const gnutls_datum_t * req_ca_rdn, int nreqs, + const gnutls_pk_algorithm_t * sign_algos, + int sign_algos_length, gnutls_pcert_st ** pcert, + unsigned int *pcert_length, gnutls_privkey_t * pkey) +{ + cert_asked = 1; + *pcert_length = 0; + *pcert = NULL; + *pkey = NULL; + + return 0; +} + +static void async_handshake(void **glob_state, const char *prio, unsigned rehsk) +{ + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret, cret; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + /* Need to enable anonymous KX specifically. */ + char buffer[MAX_BUF + 1]; + int ret, transferred = 0, msglen; + + /* General init. */ + reset_buffers(); + cert_asked = 0; + gnutls_global_init(); + gnutls_global_set_log_function(tls_log_func); + + /* Init server */ + assert_return_code(gnutls_certificate_allocate_credentials(&serverx509cred), 0); + assert_return_code(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM), 0); + ret = gnutls_init(&server, GNUTLS_SERVER|GNUTLS_POST_HANDSHAKE_AUTH); + assert_return_code(ret, 0); + + ret = + gnutls_priority_set_direct(server, + prio, + NULL); + assert_return_code(ret, 0); + + + ret = gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); + assert_return_code(ret, 0); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + assert_return_code(ret, 0); + + gnutls_certificate_set_retrieve_function2(clientx509cred, cert_callback); + + ret = gnutls_init(&client, GNUTLS_CLIENT|GNUTLS_AUTO_REAUTH|GNUTLS_POST_HANDSHAKE_AUTH); + ret = + gnutls_priority_set_direct(client, + prio, + NULL); + assert_return_code(ret, 0); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); + assert_return_code(ret, 0); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + if (rehsk == 1) { + char b[1]; + unsigned hstarted = 0; + + do { + sret = gnutls_rehandshake(server); + } while (sret == GNUTLS_E_AGAIN || sret == GNUTLS_E_INTERRUPTED); + assert_true(sret == 0); + assert_true(gnutls_record_get_direction(server)==1); + + sret = cret = GNUTLS_E_AGAIN; + do { + if (!hstarted) { + sret = gnutls_record_recv(server, b, 1); + if (sret == GNUTLS_E_INTERRUPTED) sret = GNUTLS_E_AGAIN; + + if (sret == GNUTLS_E_REHANDSHAKE) { + hstarted = 1; + sret = GNUTLS_E_AGAIN; + } + assert_true(sret == GNUTLS_E_AGAIN); + } + + if (sret == GNUTLS_E_AGAIN && hstarted) { + sret = gnutls_handshake (server); + if (sret == GNUTLS_E_INTERRUPTED) sret = GNUTLS_E_AGAIN; + assert_true(sret == GNUTLS_E_AGAIN || sret == 0); + } + + /* we are done in client side */ + if (hstarted && gnutls_record_get_direction(client) == 0 && to_client_len == 0) + cret = 0; + + if (cret == GNUTLS_E_AGAIN) { + cret = gnutls_record_recv(client, b, 1); + if (cret == GNUTLS_E_INTERRUPTED) cret = GNUTLS_E_AGAIN; + } + assert_true(cret == GNUTLS_E_AGAIN || cret >= 0); + + } while (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN); + assert_true(hstarted != 0); + } else { + char b[1]; + + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); + + do { + sret = gnutls_reauth(server, 0); + } while (sret == GNUTLS_E_INTERRUPTED); + + assert_true(sret == GNUTLS_E_AGAIN || sret >= 0); + + cret = GNUTLS_E_AGAIN; + do { + if (cret == GNUTLS_E_AGAIN) { + cret = gnutls_record_recv(client, b, 1); + if (cret == GNUTLS_E_INTERRUPTED) cret = GNUTLS_E_AGAIN; + } + + if (sret == GNUTLS_E_AGAIN) { + sret = gnutls_reauth(server, 0); + if (sret == GNUTLS_E_INTERRUPTED) sret = GNUTLS_E_AGAIN; + } + + /* we are done in client side */ + if (gnutls_record_get_direction(client) == 0 && to_client_len == 0) + cret = 0; + } while (cret == GNUTLS_E_AGAIN || sret == GNUTLS_E_AGAIN); + } + assert_return_code(cret, 0); + assert_return_code(sret, 0); + assert_return_code(cert_asked, 1); + + msglen = strlen(MSG); + TRANSFER(client, server, MSG, msglen, buffer, MAX_BUF); + + assert_true(gnutls_bye(client, GNUTLS_SHUT_WR)>=0); + assert_true(gnutls_bye(server, GNUTLS_SHUT_WR)>=0); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} + +static void tls12_async_handshake(void **glob_state) +{ + async_handshake(glob_state, "NORMAL:-VERS-ALL:+VERS-TLS1.2", 1); +} + +static void tls13_async_handshake(void **glob_state) +{ + async_handshake(glob_state, "NORMAL:-VERS-ALL:+VERS-TLS1.3", 0); +} + +int main(void) +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(tls12_async_handshake), + cmocka_unit_test(tls13_async_handshake), + }; + return cmocka_run_group_tests(tests, NULL, NULL); +} diff --git a/tests/eagain-common.h b/tests/eagain-common.h index 4e9a0ff206..6b168cb684 100644 --- a/tests/eagain-common.h +++ b/tests/eagain-common.h @@ -1,31 +1,49 @@ +#ifndef GNUTLS_TESTS_EAGAIN_COMMON_H +#define GNUTLS_TESTS_EAGAIN_COMMON_H + +#include +#include +#include + #define min(x,y) ((x)<(y)?(x):(y)) extern const char *side; +#ifdef USE_CMOCKA +# define failure() fail() +# define client_transfer_failure(r) {fprintf(stderr, "client transfer failure: %s\n", gnutls_strerror(r)); fail();} +# define server_transfer_failure(r) {fprintf(stderr, "server transfer failure: %s\n", gnutls_strerror(r)); fail();} +# define switch_side(str) +#else +# define failure() fail("Handshake failed\n") +# define client_transfer_failure(r) fail("client transfer failure: %s\n", gnutls_strerror(r)) +# define server_transfer_failure(r) fail("client transfer failure: %s\n", gnutls_strerror(r)) +# define switch_side(str) side = str +#endif + #define HANDSHAKE_EXPECT(c, s, clierr, serverr) \ sret = cret = GNUTLS_E_AGAIN; \ do \ { \ if (cret == GNUTLS_E_AGAIN) \ { \ - side = "client"; \ + switch_side("client"); \ cret = gnutls_handshake (c); \ if (cret == GNUTLS_E_INTERRUPTED) cret = GNUTLS_E_AGAIN; \ } \ if (sret == GNUTLS_E_AGAIN) \ { \ - side = "server"; \ + switch_side("server"); \ sret = gnutls_handshake (s); \ if (sret == GNUTLS_E_INTERRUPTED) sret = GNUTLS_E_AGAIN; \ } \ } \ while ((cret == GNUTLS_E_AGAIN || (cret == 0 && sret == GNUTLS_E_AGAIN)) && (sret == GNUTLS_E_AGAIN || (sret == 0 && cret == GNUTLS_E_AGAIN))); \ - if (cret != clierr || sret != serverr) \ + if ((clierr != -1 && cret != clierr) || (serverr != -1 && sret != serverr)) \ { \ fprintf(stderr, "client[%d]: %s\n", cret, gnutls_strerror(cret)); \ fprintf(stderr, "server[%d]: %s\n", sret, gnutls_strerror(sret)); \ - fail("%s:%d: Handshake failed\n", __func__, __LINE__); \ - exit(1); \ + failure(); \ } #define HANDSHAKE(c, s) \ @@ -42,7 +60,7 @@ extern const char *side; } \ if (cret < 0 && gnutls_error_is_fatal(cret) == 0) \ { \ - side = "client"; \ + switch_side("client"); \ cret = gnutls_handshake (c); \ } \ if (sret == GNUTLS_E_LARGE_PACKET) \ @@ -52,7 +70,7 @@ extern const char *side; } \ if (sret < 0 && gnutls_error_is_fatal(sret) == 0) \ { \ - side = "server"; \ + switch_side("server"); \ sret = gnutls_handshake (s); \ } \ } \ @@ -61,8 +79,7 @@ extern const char *side; { \ fprintf(stderr, "client: %s\n", gnutls_strerror(cret)); \ fprintf(stderr, "server: %s\n", gnutls_strerror(sret)); \ - fail("%s:%d: Handshake failed\n", __func__, __LINE__); \ - exit(1); \ + failure(); \ } #define HANDSHAKE_DTLS(c, s) \ @@ -71,65 +88,81 @@ extern const char *side; #define HANDSHAKE(c, s) \ HANDSHAKE_EXPECT(c,s,0,0) -#define TRANSFER2(c, s, msg, msglen, buf, buflen, retry_send_with_null) \ - side = "client"; \ - ret = record_send_loop (c, msg, msglen, retry_send_with_null); \ +#define TRANSFER2(c, s, msg, msglen, buf, buflen, retry_send_with_null) { \ + int _ret; \ + switch_side("client"); \ + _ret = record_send_loop (c, msg, msglen, retry_send_with_null); \ \ - if (ret < 0) fail ("client send error: %s\n", gnutls_strerror (ret)); \ + if (_ret < 0) client_transfer_failure(_ret); \ \ do \ { \ do \ { \ - side = "server"; \ - ret = gnutls_record_recv (s, buf, buflen); \ + switch_side("server"); \ + _ret = gnutls_record_recv (s, buf, buflen); \ } \ - while(ret == GNUTLS_E_AGAIN); \ - if (ret == 0) \ - fail ("server: didn't receive any data\n"); \ - else if (ret < 0) \ + while(_ret == GNUTLS_E_AGAIN); \ + if (_ret <= 0) \ { \ - fail ("server: error: %s\n", gnutls_strerror (ret)); \ + server_transfer_failure(_ret); \ } \ else \ { \ - transferred += ret; \ + transferred += _ret; \ } \ - side = "server"; \ - ns = record_send_loop (server, msg, msglen, retry_send_with_null); \ - if (ns < 0) fail ("server send error: %s\n", gnutls_strerror (ret)); \ + switch_side("server"); \ + _ret = record_send_loop (server, msg, msglen, retry_send_with_null); \ + if (_ret < 0) server_transfer_failure(_ret); \ do \ { \ - side = "client"; \ - ret = gnutls_record_recv (client, buf, buflen); \ + switch_side("client"); \ + _ret = gnutls_record_recv (client, buf, buflen); \ } \ - while(ret == GNUTLS_E_AGAIN); \ - if (ret == 0) \ + while(_ret == GNUTLS_E_AGAIN); \ + if (_ret <= 0) \ { \ - fail ("client: Peer has closed the TLS connection\n"); \ - } \ - else if (ret < 0) \ - { \ - if (debug) \ - fputs ("!", stdout); \ - fail ("client: Error: %s\n", gnutls_strerror (ret)); \ + client_transfer_failure(_ret); \ } \ else \ { \ - if (msglen != ret || memcmp (buf, msg, msglen) != 0) \ + if (msglen != _ret || memcmp (buf, msg, msglen) != 0) \ { \ - fail ("client: Transmitted data do not match\n"); \ + failure(); \ } \ /* echo back */ \ - side = "client"; \ - ns = record_send_loop (client, buf, msglen, retry_send_with_null); \ - if (ns < 0) fail ("client send error: %s\n", gnutls_strerror (ret)); \ - transferred += ret; \ - if (debug) \ - fputs (".", stdout); \ + switch_side("client"); \ + _ret = record_send_loop (client, buf, msglen, retry_send_with_null); \ + if (_ret < 0) client_transfer_failure(_ret); \ + transferred += _ret; \ } \ } \ - while (transferred < 70000) + while (transferred < 70000); \ + } + +#define EMPTY_BUF(s, c, buf, buflen) \ + { \ + switch_side("client"); int _ret = 0; \ + while((_ret == GNUTLS_E_AGAIN && to_server_len > 0) || to_server_len > 0) \ + { \ + switch_side("server"); \ + _ret = gnutls_record_recv (s, buf, buflen); \ + } \ + if (_ret < 0 && _ret !=GNUTLS_E_AGAIN) \ + { \ + server_transfer_failure(_ret); \ + } \ + switch_side("server"); _ret = 0; \ + while((to_client_len > 0 && _ret == GNUTLS_E_AGAIN) || to_client_len > 0) \ + { \ + switch_side("client"); \ + _ret = gnutls_record_recv (client, buf, buflen); \ + } \ + if (_ret < 0 && _ret !=GNUTLS_E_AGAIN) \ + { \ + client_transfer_failure(_ret); \ + } \ + } #define TRANSFER(c, s, msg, msglen, buf, buflen) \ TRANSFER2(c, s, msg, msglen, buf, buflen, 0); \ @@ -141,10 +174,11 @@ static size_t to_server_len = 0; static char to_client[64 * 1024]; static size_t to_client_len = 0; + #ifdef RANDOMIZE #define RETURN_RND_EAGAIN(session) \ - static unsigned char rnd = 0; \ - if (rnd++ % 2 == 0) \ + unsigned int rnd = time(0); \ + if (rnd++ % 3 == 0) \ { \ gnutls_transport_set_errno (session, EAGAIN); \ return -1; \ @@ -330,3 +364,5 @@ inline static int record_send_loop(gnutls_session_t session, return ret; } + +#endif /* GNUTLS_TESTS_EAGAIN_COMMON_H */ diff --git a/tests/eagain.c b/tests/eagain.c new file mode 100644 index 0000000000..cc7b35a2a0 --- /dev/null +++ b/tests/eagain.c @@ -0,0 +1,194 @@ +/* + * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Simon Josefsson, Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#define RANDOMIZE +#include "cert-common.h" +#include "cmocka-common.h" + +/* This tests operation under non-blocking mode in TLS1.2/TLS1.3 + * as well as operation under TLS1.2 re-handshake. + */ +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d>| %s", level, str); +} + +#define MAX_BUF 1024 +#define MSG "Hello TLS, and hi and how are you and more data here... and more... and even more and even more more data..." + +static void async_handshake(void **glob_state, const char *prio, unsigned rehsk) +{ + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret, cret; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + /* Need to enable anonymous KX specifically. */ + char buffer[MAX_BUF + 1]; + int ret, transferred = 0, msglen; + + /* General init. */ + reset_buffers(); + gnutls_global_init(); + gnutls_global_set_log_function(tls_log_func); + + /* Init server */ + assert_return_code(gnutls_certificate_allocate_credentials(&serverx509cred), 0); + assert_return_code(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM), 0); + ret = gnutls_init(&server, GNUTLS_SERVER); + assert_return_code(ret, 0); + + ret = + gnutls_priority_set_direct(server, + prio, + NULL); + assert_return_code(ret, 0); + + ret = gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); + assert_return_code(ret, 0); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + assert_return_code(ret, 0); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + ret = + gnutls_priority_set_direct(client, + prio, + NULL); + assert_return_code(ret, 0); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); + assert_return_code(ret, 0); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + if (rehsk == 1 || rehsk == 3) { + ssize_t n; + char b[1]; + + do { + sret = gnutls_rehandshake(server); + } while (sret == GNUTLS_E_AGAIN); + + do { + n = gnutls_record_recv(client, b, 1); + } while(n == GNUTLS_E_AGAIN); + + assert_int_equal(n, GNUTLS_E_REHANDSHAKE); + + if (rehsk == 3) { + /* client sends app data and the server ignores them */ + do { + cret = gnutls_record_send(client, "x", 1); + } while (cret == GNUTLS_E_AGAIN); + + do { + sret = gnutls_handshake(server); + } while (sret == GNUTLS_E_AGAIN); + assert_int_equal(sret, GNUTLS_E_GOT_APPLICATION_DATA); + + do { + n = gnutls_record_recv(server, buffer, sizeof(buffer)); + } while(n == GNUTLS_E_AGAIN); + } + + HANDSHAKE(client, server); + } else if (rehsk == 2) { + HANDSHAKE(client, server); + } + + msglen = strlen(MSG); + TRANSFER(client, server, MSG, msglen, buffer, MAX_BUF); + + gnutls_bye(client, GNUTLS_SHUT_WR); + gnutls_bye(server, GNUTLS_SHUT_WR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} + +static void tls12_async_handshake(void **glob_state) +{ + async_handshake(glob_state, "NORMAL:-VERS-ALL:+VERS-TLS1.2", 0); +} + +static void tls12_async_rehandshake_client(void **glob_state) +{ + async_handshake(glob_state, "NORMAL:-VERS-ALL:+VERS-TLS1.2", 1); +} + +static void tls12_async_rehandshake_server(void **glob_state) +{ + async_handshake(glob_state, "NORMAL:-VERS-ALL:+VERS-TLS1.2", 2); +} + +static void tls12_async_rehandshake_server_appdata(void **glob_state) +{ + async_handshake(glob_state, "NORMAL:-VERS-ALL:+VERS-TLS1.2", 3); +} + +static void tls13_async_handshake(void **glob_state) +{ + async_handshake(glob_state, "NORMAL:-VERS-ALL:+VERS-TLS1.3", 0); +} + +int main(void) +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(tls12_async_handshake), + cmocka_unit_test(tls12_async_rehandshake_client), + cmocka_unit_test(tls12_async_rehandshake_server), + cmocka_unit_test(tls12_async_rehandshake_server_appdata), + cmocka_unit_test(tls13_async_handshake), + }; + return cmocka_run_group_tests(tests, NULL, NULL); +} diff --git a/tests/ecdh-compute.c b/tests/ecdh-compute.c new file mode 100644 index 0000000000..d9f99a19ca --- /dev/null +++ b/tests/ecdh-compute.c @@ -0,0 +1,209 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Simo Sorce + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* This program tests functionality of DH exchanges */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include "utils.h" + +#ifdef ENABLE_FIPS140 +int _gnutls_ecdh_compute_key(gnutls_ecc_curve_t curve, + const gnutls_datum_t *x, const gnutls_datum_t *y, + const gnutls_datum_t *k, + const gnutls_datum_t *peer_x, const gnutls_datum_t *peer_y, + gnutls_datum_t *Z); + +int _gnutls_ecdh_generate_key(gnutls_ecc_curve_t curve, + gnutls_datum_t *x, gnutls_datum_t *y, + gnutls_datum_t *k); + +static void genkey(gnutls_ecc_curve_t curve, gnutls_datum_t *x, + gnutls_datum_t *y, gnutls_datum_t *key) +{ + int ret; + + ret = _gnutls_ecdh_generate_key(curve, x, y, key); + if (ret != 0) + fail("error\n"); +} + +static void compute_key(gnutls_ecc_curve_t curve, gnutls_datum_t *x, + gnutls_datum_t *y, gnutls_datum_t *key, + const gnutls_datum_t *peer_x, + const gnutls_datum_t *peer_y, + int expect_error, + gnutls_datum_t *result, bool expect_success) +{ + gnutls_datum_t Z = { 0 }; + bool success; + int ret; + + ret = _gnutls_ecdh_compute_key(curve, x, y, key, peer_x, peer_y, &Z); + if (expect_error != ret) + fail("error (%d)\n", ret); + + if (result) { + success = (Z.size != result->size && + memcmp(Z.data, result->data, Z.size)); + if (success != expect_success) + fail("error\n"); + } + gnutls_free(Z.data); +} + +struct dh_test_data { + gnutls_ecc_curve_t curve; + const gnutls_datum_t x; + const gnutls_datum_t y; + const gnutls_datum_t key; + const gnutls_datum_t peer_x; + const gnutls_datum_t peer_y; + int expected_error; +}; + +void doit(void) +{ + struct dh_test_data test_data[] = { + { + /* x == 0, y == 0 */ + GNUTLS_ECC_CURVE_SECP256R1, + { 0 }, { 0 }, { 0 }, + { (void *)"\x00", 1 }, + { (void *)"\x00", 1 }, + /* Should be GNUTLS_E_PK_INVALID_PUBKEY but mpi scan + * balks on values of 0 */ + GNUTLS_E_MPI_SCAN_FAILED, + }, + { + /* x > p -1 */ + GNUTLS_ECC_CURVE_SECP256R1, + { 0 }, { 0 }, { 0 }, + { (void *)"\xff\xff\xff\xff\x00\x00\x00\x01" + "\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff", 1 }, + { (void *)"\x02", 1 }, + GNUTLS_E_PK_INVALID_PUBKEY, + }, + { + /* y > p -1 */ + GNUTLS_ECC_CURVE_SECP256R1, + { 0 }, { 0 }, { 0 }, + { (void *)"\x02", 1 }, + { (void *)"\xff\xff\xff\xff\x00\x00\x00\x01" + "\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\xff\xff\xff\xff" + "\xff\xff\xff\xff\xff\xff\xff\xff", 1 }, + GNUTLS_E_PK_INVALID_PUBKEY, + }, + { + /* From CAVS tests */ + GNUTLS_ECC_CURVE_SECP521R1, + { (void *)"\xac\xbe\x4a\xd4\xf6\x73\x44\x0a" + "\xfc\x31\xf0\xb0\x3d\x28\xd4\xd5" + "\x14\xbe\x7b\xdd\x7a\x31\xb0\x32" + "\xec\x27\x27\x17\xa5\x7d\xc2\x6c" + "\xc4\xc9\x56\x29\xdb\x2d\x8c\x05" + "\x86\x2b\xe6\x15\xc6\x06\x28\xa3" + "\x24\xf2\x01\x7f\x98\xbd\xf9\x11" + "\xcc\xf8\x83\x5e\x43\x9e\xb2\xc1" + "\x88", 65 }, + { (void *)"\xd6\x9b\x29\xa2\x37\x82\x36\x92" + "\xe8\xdb\x90\xa3\x25\x68\x67\x6c" + "\x92\xff\x3d\x23\x85\xe2\xfd\x13" + "\x16\x12\x72\xb3\x4b\x55\x88\x72" + "\xb0\x35\xab\xb5\x10\x89\x52\x5f" + "\x42\x9f\x53\x02\x60\x80\xc3\xd5" + "\x36\x6e\xe9\xdd\x28\xae\xd2\x38" + "\xab\xbe\x68\x6a\x54\x3e\x19\xf2" + "\x77", 65 }, + { (void *)"\xd7\xdd\x17\x7c\xb9\x7f\x19\x09" + "\xbe\x56\x79\xba\x38\x7b\xee\x64" + "\xf7\xb4\x08\x4a\x4f\xaa\x6c\x31" + "\x8b\x82\xe9\xf2\xf7\x50\xc5\xc1" + "\x82\x26\x20\xd4\x88\x25\x0b\xf6" + "\xb4\x14\xea\x9b\x2c\x07\x93\x50" + "\xb9\xad\x78\x0a\x5e\xc6\xa6\xf8" + "\xb2\x9f\xa1\xc4\x76\xce\x1d\xa9" + "\xf5", 65 }, + { (void *)"\x01\x41\xbe\x1a\xfa\x21\x99\xc9" + "\xb2\x2d\xaa\x0a\xff\x90\xb2\x67" + "\x18\xa2\x67\x04\x7e\xae\x28\x40" + "\xe8\xbc\xa0\xbd\x0c\x75\x41\x51" + "\xf1\xa0\x4d\xcf\x09\xa5\x4f\x1e" + "\x13\x5e\xa0\xdd\x13\xed\x86\x74" + "\x05\xc0\xcb\x6d\xac\x14\x6a\x24" + "\xb8\xdc\xf3\x78\xed\xed\x5d\xcd" + "\x57\x5b", 66 }, + { (void *)"\x19\x52\xbd\x5d\xe6\x26\x40\xc3" + "\xfc\x8c\xc1\x55\xe2\x9c\x71\x14" + "\x5e\xdc\x62\x1c\x3a\x94\x4e\x55" + "\x56\x75\xf7\x45\x6e\xa4\x9e\x94" + "\xb8\xfe\xda\xd4\xac\x7d\x76\xc5" + "\xb4\x65\xed\xb4\x49\x34\x71\x14" + "\xdb\x8f\x10\x90\xa3\x05\x02\xdc" + "\x86\x92\x6c\xbe\x9b\x57\x32\xe3" + "\x2c", 65 }, + 0, + }, + { 0 } + }; + + for (int i = 0; test_data[i].curve != 0; i++) { + gnutls_datum_t x, y, key; + + if (test_data[i].key.data == NULL) { + genkey(test_data[i].curve, &x, &y, &key); + } else { + x = test_data[i].x; + y = test_data[i].y; + key = test_data[i].key; + } + + compute_key(test_data[i].curve, &x, &y, &key, + &test_data[i].peer_x, + &test_data[i].peer_y, + test_data[i].expected_error, + NULL, 0); + + if (test_data[i].key.data == NULL) { + gnutls_free(x.data); + gnutls_free(y.data); + gnutls_free(key.data); + } + } + + success("all ok\n"); +} +#else +void doit(void) +{ + return; +} +#endif diff --git a/tests/empty_retrieve_function.c b/tests/empty_retrieve_function.c new file mode 100644 index 0000000000..ecdab3ca35 --- /dev/null +++ b/tests/empty_retrieve_function.c @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2018 Dmitry Eremin-Solenikov + * Copyright (C) 2018 Red Hat, Inc. + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +/* Test for behavior of the library when certificate callbacks + * return no certificates. + */ + +static int cert_cb1(gnutls_session_t session, + const gnutls_datum_t * req_ca_rdn, + int nreqs, + const gnutls_pk_algorithm_t * pk_algos, + int pk_algos_length, + gnutls_retr2_st *retr) +{ + memset(retr, 0, sizeof(*retr)); + return 0; +} + +static int cert_cb2(gnutls_session_t session, + const gnutls_datum_t *req_ca_rdn, + int nreqs, + const gnutls_pk_algorithm_t *pk_algos, + int pk_algos_length, + gnutls_pcert_st** pcert, + unsigned int *pcert_length, + gnutls_privkey_t *privkey) +{ + *pcert_length = 0; + *privkey = NULL; + *pcert = NULL; + + return 0; +} + +static int cert_cb3(gnutls_session_t session, + const struct gnutls_cert_retr_st *info, + gnutls_pcert_st **certs, + unsigned int *pcert_length, + gnutls_ocsp_data_st **ocsp, + unsigned int *ocsp_length, + gnutls_privkey_t *privkey, + unsigned int *flags) +{ + *privkey = NULL; + *ocsp_length = 0; + *pcert_length = 0; + return 0; +} + + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d>| %s", level, str); +} + +void doit(void) +{ + gnutls_certificate_credentials_t x509_cred; + gnutls_certificate_credentials_t clicred; + int ret; + + /* this must be called once in the program + */ + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + gnutls_certificate_allocate_credentials(&x509_cred); + + ret = gnutls_certificate_set_x509_key_mem(x509_cred, &server_ca3_localhost_cert_chain, + &server_ca3_key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("error in error code\n"); + exit(1); + } + + gnutls_certificate_allocate_credentials(&clicred); + gnutls_certificate_set_retrieve_function(clicred, cert_cb1); + _test_cli_serv(x509_cred, clicred, "NORMAL", "NORMAL", "localhost", NULL, NULL, NULL, 0, 1, GNUTLS_E_CERTIFICATE_REQUIRED, -1); + gnutls_certificate_free_credentials(clicred); + + gnutls_certificate_allocate_credentials(&clicred); + gnutls_certificate_set_retrieve_function2(clicred, cert_cb2); + _test_cli_serv(x509_cred, clicred, "NORMAL", "NORMAL", "localhost", NULL, NULL, NULL, 0, 1, GNUTLS_E_CERTIFICATE_REQUIRED, -1); + gnutls_certificate_free_credentials(clicred); + + gnutls_certificate_allocate_credentials(&clicred); + gnutls_certificate_set_retrieve_function3(clicred, cert_cb3); + _test_cli_serv(x509_cred, clicred, "NORMAL", "NORMAL", "localhost", NULL, NULL, NULL, 0, 1, GNUTLS_E_CERTIFICATE_REQUIRED, -1); + gnutls_certificate_free_credentials(clicred); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("success"); +} diff --git a/tests/fallback-scsv.c b/tests/fallback-scsv.c index d307fe78a8..aeaa9d8056 100644 --- a/tests/fallback-scsv.c +++ b/tests/fallback-scsv.c @@ -46,8 +46,10 @@ int main() #include #include #include +#include #include "utils.h" +#include "cert-common.h" static void terminate(void); @@ -64,47 +66,6 @@ static void client_log_func(int level, const char *str) fprintf(stderr, "client|<%d>| %s", level, str); } -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - /* This tests whether the fallback SCSV is working as intended. */ @@ -131,7 +92,7 @@ static void client(int fd, const char *prio, unsigned expect_fail) gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, prio, NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -232,7 +193,7 @@ static void server(int fd, const char *prio, unsigned expect_fail) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, prio, NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -343,9 +304,14 @@ void doit(void) signal(SIGPIPE, SIG_IGN); start("NORMAL", "NORMAL", 0); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.0:+VERS-TLS1.1:+VERS-TLS1.2", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.0:+VERS-TLS1.1:+VERS-TLS1.2", 0); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.0:+VERS-TLS1.1:+VERS-TLS1.2", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.0:+VERS-TLS1.1:+VERS-TLS1.2:%FALLBACK_SCSV", 0); start("NORMAL", "NORMAL:%FALLBACK_SCSV", 0); start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:%FALLBACK_SCSV", 0); start("NORMAL", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:%FALLBACK_SCSV", 1); + /* Check whether a TLS1.3 server rejects a TLS1.2 client which includes the SCSV */ + start("NORMAL:+VERS-TLS1.3:+VERS-TLS1.2", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2:%FALLBACK_SCSV", 1); + start("NORMAL:+VERS-TLS1.3:+VERS-TLS1.2", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:%FALLBACK_SCSV", 0); } #endif /* _WIN32 */ diff --git a/tests/fastopen.sh b/tests/fastopen.sh index 5d58b35028..87f3b24bba 100755 --- a/tests/fastopen.sh +++ b/tests/fastopen.sh @@ -48,13 +48,20 @@ SERV="${SERV} -q" echo "Checking Fast open" +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem +CA1=${srcdir}/../doc/credentials/x509/ca.pem + eval "${GETPORT}" -launch_server $$ --echo --priority "NORMAL:+ANON-ECDH" +launch_server $$ --echo --x509keyfile ${KEY1} --x509certfile ${CERT1} PID=$! wait_server ${PID} -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --fastopen --rehandshake --priority "NORMAL:+ANON-ECDH:+ANON-DH" /dev/null || \ - fail ${PID} "1. rehandshake should have succeeded!" +${VALGRIND} "${CLI}" -p "${PORT}" localhost --fastopen --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2" --x509cafile ${CA1} +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +# include +# include +#endif +#include "utils.h" + +#ifdef _WIN32 + +void doit(void) +{ + exit(77); +} + +#else + +/* Tests whether we can use gnutls_fips140_set_mode() and + * gnutls_fips140_mode_enabled() under mutliple threads. + */ + +typedef struct thread_data_st { + unsigned mode; + unsigned set_mode; + int line; + pthread_t id; +} thread_data_st; + +static void *test_set_per_thread(void *arg) +{ + thread_data_st *data = arg; + unsigned mode; + int ret; + unsigned char digest[20]; + + mode = gnutls_fips140_mode_enabled(); + if (mode != data->mode) + fail("%d: gnutls_fips140_mode_enabled: wrong mode returned (%d, exp: %d)\n", data->line, mode, data->mode); + + if (data->set_mode) + gnutls_fips140_set_mode(data->set_mode, GNUTLS_FIPS140_SET_MODE_THREAD); + + mode = gnutls_fips140_mode_enabled(); + if (mode != data->set_mode) { + fail("%d: gnutls_fips140_mode_enabled: wrong mode returned after set (%d, exp: %d)\n", data->line, mode, data->set_mode); + } + + /* reset mode */ + gnutls_fips140_set_mode(data->mode, GNUTLS_FIPS140_SET_MODE_THREAD); + mode = gnutls_fips140_mode_enabled(); + if (mode != data->mode) + fail("%d: gnutls_fips140_mode_enabled: wrong mode returned after set (%d, exp: %d)\n", data->line, mode, data->mode); + + ret = gnutls_hmac_fast(GNUTLS_MAC_MD5, "keykeykey", 9, "abcdefgh", + 8, digest); + if (mode == GNUTLS_FIPS140_STRICT && ret >= 0) { + fail("gnutls_hmac_fast(MD5): succeeded in strict mode!\n"); + } else if (mode != GNUTLS_FIPS140_STRICT && ret < 0) { + fail("gnutls_hmac_fast(MD5): failed in non-strict mode!\n"); + } + + /* put to a random state */ + gnutls_fips140_set_mode(data->set_mode, GNUTLS_FIPS140_SET_MODE_THREAD); + + pthread_exit(0); +} + +#define MAX_THREADS 48 + +void doit(void) +{ + int ret; + thread_data_st *data; + unsigned i, j; + unsigned mode; + + signal(SIGPIPE, SIG_IGN); + + mode = gnutls_fips140_mode_enabled(); + if (mode == 0) { + success("We are not in FIPS140 mode\n"); + exit(77); + } + + data = calloc(1, sizeof(thread_data_st)*MAX_THREADS); + if (data == NULL) + abort(); + + success("starting threads\n"); + /* Test if changes per thread apply, and whether the global + * setting will remain the same */ + for (i=0;i +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +unsigned audit_called = 0; + +/* This does check the FIPS140 override support with + * gnutls_fips140_set_mode(). + */ + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d>| %s", level, str); +} + +static void audit_log_func(gnutls_session_t session, const char *str) +{ + audit_called = 1; +} + + +static void try_crypto(void) +{ + static uint8_t key16[16]; + static uint8_t iv16[16]; + gnutls_datum_t key = { key16, sizeof(key16) }; + gnutls_datum_t iv = { iv16, sizeof(iv16) }; + gnutls_cipher_hd_t ch; + gnutls_hmac_hd_t mh; + int ret; + gnutls_x509_privkey_t privkey; + + ret = + gnutls_cipher_init(&ch, GNUTLS_CIPHER_ARCFOUR_128, &key, &iv); + if (ret < 0) { + fail("gnutls_cipher_init failed\n"); + } + gnutls_cipher_deinit(ch); + + ret = + gnutls_cipher_init(&ch, GNUTLS_CIPHER_AES_128_CBC, &key, &iv); + if (ret < 0) { + fail("gnutls_cipher_init failed\n"); + } + gnutls_cipher_deinit(ch); + + ret = gnutls_hmac_init(&mh, GNUTLS_MAC_MD5, key.data, key.size); + if (ret < 0) { + fail("gnutls_hmac_init failed\n"); + } + gnutls_hmac_deinit(mh, NULL); + + ret = gnutls_hmac_init(&mh, GNUTLS_MAC_SHA1, key.data, key.size); + if (ret < 0) { + fail("gnutls_hmac_init failed\n"); + } + gnutls_hmac_deinit(mh, NULL); + + ret = gnutls_rnd(GNUTLS_RND_NONCE, key16, sizeof(key16)); + if (ret < 0) { + fail("gnutls_rnd failed\n"); + } + + assert(gnutls_x509_privkey_init(&privkey) == 0); + ret = gnutls_x509_privkey_generate(privkey, GNUTLS_PK_RSA, 512, 0); + if (ret < 0) { + fail("gnutls_x509_privkey_generate failed for 512-bit key\n"); + } + gnutls_x509_privkey_deinit(privkey); +} + +void doit(void) +{ + int ret; + unsigned int mode; + + fprintf(stderr, + "Please note that if in FIPS140 mode, you need to assure the library's integrity prior to running this test\n"); + + gnutls_global_set_log_function(tls_log_func); + gnutls_global_set_audit_log_function(audit_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + mode = gnutls_fips140_mode_enabled(); + if (mode == 0) { + success("We are not in FIPS140 mode\n"); + exit(77); + } + + ret = global_init(); + if (ret < 0) { + fail("Cannot initialize library\n"); + } + + /* switch to lax mode and check whether forbidden algorithms are accessible */ + gnutls_fips140_set_mode(GNUTLS_FIPS140_LAX, 0); + + try_crypto(); + + /* check whether audit log was called */ + if (audit_called) { + fail("the audit function was called in lax mode!\n"); + } + + gnutls_fips140_set_mode(GNUTLS_FIPS140_LOG, 0); + + try_crypto(); + + /* check whether audit log was called */ + if (!audit_called) { + fail("the audit function was not called in log mode!\n"); + } + + gnutls_fips140_set_mode(GNUTLS_FIPS140_SELFTESTS, 0); + if (gnutls_fips140_mode_enabled() != GNUTLS_FIPS140_STRICT) + fail("switching to selftests didn't switch the lib to the expected mode\n"); + + gnutls_fips140_set_mode(532, 0); + if (gnutls_fips140_mode_enabled() != GNUTLS_FIPS140_STRICT) + fail("switching to unknown mode didn't switch the lib to the expected mode\n"); + + GNUTLS_FIPS140_SET_LAX_MODE(); + if (gnutls_fips140_mode_enabled() != GNUTLS_FIPS140_LAX) + fail("switching to lax mode did not succeed!\n"); + + GNUTLS_FIPS140_SET_STRICT_MODE(); + if (gnutls_fips140_mode_enabled() != GNUTLS_FIPS140_STRICT) + fail("switching to strict mode did not succeed!\n"); + + gnutls_global_deinit(); + return; +} diff --git a/tests/fips-test.c b/tests/fips-test.c index 2d37c0f2f8..23d2318122 100644 --- a/tests/fips-test.c +++ b/tests/fips-test.c @@ -61,12 +61,23 @@ void doit(void) } gnutls_cipher_deinit(ch); + ret = + gnutls_cipher_init(&ch, GNUTLS_CIPHER_ARCFOUR_128, &key, &iv); + if (ret != GNUTLS_E_UNWANTED_ALGORITHM) { + fail("gnutls_cipher_init succeeded for arcfour\n"); + } + ret = gnutls_hmac_init(&mh, GNUTLS_MAC_SHA1, key.data, key.size); if (ret < 0) { fail("gnutls_hmac_init failed\n"); } gnutls_hmac_deinit(mh, NULL); + ret = gnutls_hmac_init(&mh, GNUTLS_MAC_MD5, key.data, key.size); + if (ret != GNUTLS_E_UNWANTED_ALGORITHM) { + fail("gnutls_hmac_init succeeded for md5\n"); + } + ret = gnutls_rnd(GNUTLS_RND_NONCE, key16, sizeof(key16)); if (ret < 0) { fail("gnutls_rnd failed\n"); @@ -84,18 +95,22 @@ void doit(void) } gnutls_privkey_deinit(privkey); - ret = gnutls_x509_privkey_init(&xprivkey); - if (ret < 0) { - fail("gnutls_privkey_init failed\n"); - } - gnutls_x509_privkey_deinit(xprivkey); - ret = gnutls_init(&session, 0); if (ret < 0) { fail("gnutls_init failed\n"); } gnutls_deinit(session); + ret = gnutls_x509_privkey_init(&xprivkey); + if (ret < 0) { + fail("gnutls_privkey_init failed\n"); + } + ret = gnutls_x509_privkey_generate(xprivkey, GNUTLS_PK_RSA, 512, 0); + if (ret != GNUTLS_E_PK_GENERATION_ERROR) { + fail("gnutls_x509_privkey_generate succeeded (%d) for 512-bit key\n", ret); + } + gnutls_x509_privkey_deinit(xprivkey); + /* Test when FIPS140 is set to error state */ _gnutls_lib_simulate_error(); diff --git a/tests/gc.c b/tests/gc.c deleted file mode 100644 index e58bd17a1e..0000000000 --- a/tests/gc.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2004-2012 Free Software Foundation, Inc. - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include "utils.h" - -#include "../lib/gnutls_int.h" -#include "../lib/hash_int.h" -#include "../lib/debug.h" - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "|<%d>| %s", level, str); -} - -void doit(void) -{ - unsigned char digest[20]; - int err; - - /* XXX: We need this to fix secure memory. */ - global_init(); - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(4711); - - err = - gnutls_hmac_fast(GNUTLS_MAC_MD5, "keykeykey", 9, "abcdefgh", 8, - digest); - if (err < 0) - fail("gnutls_hmac_fast(MD5) failed: %d\n", err); - else { - if (memcmp(digest, "\x3c\xb0\x9d\x83\x28\x01\xef\xc0" - "\x7b\xb3\xaf\x42\x69\xe5\x93\x9a", 16) == 0) { - if (debug) - success("gnutls_hmac_fast(MD5) OK\n"); - } else { - hexprint(digest, 16); - fail("gnutls_hmac_fast(MD5) failure\n"); - } - } - - err = - gnutls_hmac_fast(GNUTLS_MAC_SHA1, "keykeykey", 9, "abcdefgh", - 8, digest); - if (err < 0) - fail("gnutls_hmac_fast(SHA1) failed: %d\n", err); - else { - if (memcmp(digest, "\x58\x93\x7a\x58\xfe\xea\x82\xf8" - "\x0e\x64\x62\x01\x40\x2b\x2c\xed\x5d\x54\xc1\xfa", - 20) == 0) { - if (debug) - success("gnutls_hmac_fast(SHA1) OK\n"); - } else { - hexprint(digest, 20); - fail("gnutls_hmac_fast(SHA1) failure\n"); - } - } - - gnutls_global_deinit(); -} diff --git a/tests/global-init-override.c b/tests/global-init-override.c index 618775c7f7..bb72d7e5f5 100644 --- a/tests/global-init-override.c +++ b/tests/global-init-override.c @@ -34,24 +34,48 @@ #include #include +#include #include "utils.h" -/* We test whether implicit global initialization can be overriden */ +/* We test whether implicit global initialization can be overridden */ + +static int weak_symbol_works; + +struct gnutls_subject_alt_names_st { + struct name_st *names; + unsigned int size; +}; + +/* gnutls_subject_alt_names_init() is called by gnutls_x509_crt_init(). + * We override it here to test if weak symbols work at all. + */ +__attribute__ ((visibility ("protected"))) +int gnutls_subject_alt_names_init(gnutls_subject_alt_names_t * sans) +{ + weak_symbol_works = 1; + + *sans = gnutls_calloc(1, sizeof(struct gnutls_subject_alt_names_st)); + if (*sans == NULL) { + return GNUTLS_E_MEMORY_ERROR; + } + + return 0; +} GNUTLS_SKIP_GLOBAL_INIT void doit(void) { -#ifdef _WIN32 - /* weak symbols don't seem to work in windows */ - exit(77); -#else + int ret; gnutls_x509_crt_t crt; ret = gnutls_x509_crt_init(&crt); if (ret >= 0) { + if (!weak_symbol_works) + exit(77); + fail("Library is already initialized\n"); } @@ -64,5 +88,4 @@ void doit(void) gnutls_x509_crt_deinit(crt); gnutls_global_deinit(); -#endif } diff --git a/tests/gnutls-asan.supp b/tests/gnutls-asan.supp index 7fc82de45f..2c4a3c5536 100644 --- a/tests/gnutls-asan.supp +++ b/tests/gnutls-asan.supp @@ -1 +1,2 @@ leak:libp11-kit +leak:opensc-pkcs11 diff --git a/tests/gnutls-cli-debug.sh b/tests/gnutls-cli-debug.sh new file mode 100755 index 0000000000..0ab6069b8f --- /dev/null +++ b/tests/gnutls-cli-debug.sh @@ -0,0 +1,228 @@ +#!/bin/sh + +# Copyright (C) 2017-2018 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see +# + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +DCLI="${DCLI:-../src/gnutls-cli-debug${EXEEXT}}" +OUTFILE=cli-debug.$$.tmp +TMPFILE=config.$$.tmp +unset RETCODE + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${DCLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + + +SERV="${SERV} -q" + +. "${srcdir}/scripts/common.sh" + +check_for_datefudge + + +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem +KEY2=${srcdir}/../doc/credentials/x509/key-ecc.pem +CERT2=${srcdir}/../doc/credentials/x509/cert-ecc.pem +KEY3=${srcdir}/../doc/credentials/x509/key-rsa-pss.pem +CERT3=${srcdir}/../doc/credentials/x509/cert-rsa-pss.pem +KEY4=${srcdir}/../doc/credentials/x509/key-gost12.pem +CERT4=${srcdir}/../doc/credentials/x509/cert-gost12.pem +CAFILE=${srcdir}/../doc/credentials/x509/ca.pem +TMPFILE=outcert.$$.tmp + +# TLS1.1 and TLS1.2 test +echo "Checking output of gnutls-cli-debug for TLS1.1 and TLS1.2 server" + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.1" --x509keyfile ${KEY1} --x509certfile ${CERT1} \ + --x509keyfile ${KEY2} --x509certfile ${CERT2} --x509keyfile ${KEY3} --x509certfile ${CERT3} >/dev/null 2>&1 +PID=$! +wait_server ${PID} + +timeout 1800 datefudge "2017-08-9" \ +"${DCLI}" -p "${PORT}" localhost >$OUTFILE 2>&1 || fail ${PID} "gnutls-cli-debug run should have succeeded!" + +kill ${PID} +wait + +check_text() { + echo " - Checking ${OUTFILE} for \"$1\"" + grep "$1" $OUTFILE >/dev/null + if test $? != 0; then + echo "failed" + exit 1 + fi +} + +check_text "whether we need to disable TLS 1.2... no" +check_text "for TLS 1.0 (RFC2246) support... no" +check_text "for TLS 1.1 (RFC4346) support... yes" +check_text "for TLS 1.2 (RFC5246) support... yes" +check_text "TLS1.2 neg fallback from TLS 1.6 to... TLS1.2" +check_text "for safe renegotiation (RFC5746) support... yes" +check_text "for encrypt-then-MAC (RFC7366) support... yes" +check_text "for ext master secret (RFC7627) support... yes" +check_text "for RFC7919 Diffie-Hellman support... yes" +check_text "for RSA key exchange support... yes" +check_text "for curve SECP256r1 (RFC4492)... yes" +check_text "for AES-GCM cipher (RFC5288) support... yes" +check_text "for SHA1 MAC support... yes" +if test "${GNUTLS_FORCE_FIPS_MODE}" != 1; then + #these tests are not run in FIPS mode + check_text "for MD5 MAC support... no" + check_text "for ARCFOUR 128 cipher (RFC2246) support... no" + check_text "for CHACHA20-POLY1305 cipher (RFC7905) support... yes" +fi + +rm -f ${OUTFILE} + +# TLS1.3 and TLS1.2 test +echo "" +echo "Checking output of gnutls-cli-debug for TLS1.3 and TLS1.2 server" + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2" --x509keyfile ${KEY1} --x509certfile ${CERT1} \ + --x509keyfile ${KEY2} --x509certfile ${CERT2} --x509keyfile ${KEY3} --x509certfile ${CERT3} >/dev/null 2>&1 +PID=$! +wait_server ${PID} + +timeout 1800 datefudge "2017-08-9" \ +"${DCLI}" -p "${PORT}" localhost >$OUTFILE 2>&1 || fail ${PID} "gnutls-cli-debug run should have succeeded!" + +kill ${PID} +wait + +check_text "whether we need to disable TLS 1.2... no" +check_text "for TLS 1.0 (RFC2246) support... no" +check_text "for TLS 1.1 (RFC4346) support... no" +check_text "for TLS 1.2 (RFC5246) support... yes" +check_text "for TLS 1.3 (RFC8446) support... yes" +check_text "TLS1.2 neg fallback from TLS 1.6 to... TLS1.2" +check_text "for safe renegotiation (RFC5746) support... yes" +check_text "for encrypt-then-MAC (RFC7366) support... yes" +check_text "for ext master secret (RFC7627) support... yes" +check_text "for RFC7919 Diffie-Hellman support... yes" +check_text "for curve SECP256r1 (RFC4492)... yes" +check_text "for AES-GCM cipher (RFC5288) support... yes" +check_text "for RSA key exchange support... yes" +check_text "for SHA1 MAC support... yes" +check_text "whether the server accepts default record size (512 bytes)... yes" +check_text "whether %ALLOW_SMALL_RECORDS is required... no" + +if test "${GNUTLS_FORCE_FIPS_MODE}" != 1; then + #these tests are not run in FIPS mode + check_text "for MD5 MAC support... no" + check_text "for ARCFOUR 128 cipher (RFC2246) support... no" + check_text "for CHACHA20-POLY1305 cipher (RFC7905) support... yes" +fi + +rm -f ${OUTFILE} + +# Small records test +echo "" +echo "Checking output of gnutls-cli-debug for small records and no RSA" + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:-RSA:%ALLOW_SMALL_RECORDS" --x509keyfile ${KEY1} --x509certfile ${CERT1} \ + --x509keyfile ${KEY2} --x509certfile ${CERT2} --x509keyfile ${KEY3} --x509certfile ${CERT3} --recordsize=64 >/dev/null 2>&1 +PID=$! +wait_server ${PID} + +timeout 1800 datefudge "2017-08-9" \ +"${DCLI}" -p "${PORT}" localhost >$OUTFILE 2>&1 || fail ${PID} "gnutls-cli-debug run should have succeeded!" + +kill ${PID} +wait + +check_text "whether the server accepts default record size (512 bytes)... no" +check_text "whether %ALLOW_SMALL_RECORDS is required... yes" +check_text "for RSA key exchange support... no" + +echo "" +echo "Checking output of gnutls-cli-debug when algorithms are disabled" +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2" --x509keyfile ${KEY1} --x509certfile ${CERT1} \ + --x509keyfile ${KEY2} --x509certfile ${CERT2} --x509keyfile ${KEY3} --x509certfile ${CERT3} >/dev/null 2>&1 +PID=$! +wait_server ${PID} + +cat <<_EOF_ > ${TMPFILE} +[overrides] + +tls-disabled-cipher = CAMELLIA-128-CBC +tls-disabled-cipher = CAMELLIA-256-CBC +_EOF_ +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" + +timeout 1800 datefudge "2017-08-9" \ +"${DCLI}" -p "${PORT}" localhost >$OUTFILE 2>&1 || fail ${PID} "gnutls-cli-debug run should have succeeded!" + +unset GNUTLS_SYSTEM_PRIORITY_FILE + +kill ${PID} +wait + +check_text "for AES-GCM cipher (RFC5288) support... yes" +check_text "for RSA key exchange support... yes" +check_text "for SHA1 MAC support... yes" + +rm -f ${OUTFILE} +rm -f ${TMPFILE} + +if test "${ENABLE_GOST}" = "1" && test "${GNUTLS_FORCE_FIPS_MODE}" != 1 ; then + # GOST_CNT test + echo "" + echo "Checking output of gnutls-cli-debug for GOST-enabled server" + + eval "${GETPORT}" + launch_server $$ --echo --priority "NORMAL" --x509keyfile ${KEY4} --x509certfile ${CERT4} >/dev/null 2>&1 + PID=$! + wait_server ${PID} + + timeout 1800 datefudge "2017-08-9" \ + "${DCLI}" -p "${PORT}" localhost >$OUTFILE 2>&1 || fail ${PID} "gnutls-cli-debug run should have succeeded!" + + kill ${PID} + wait + + check_text "for VKO GOST-2012 (draft-smyshlyaev-tls12-gost-suites) support... yes" + check_text "for GOST28147-CNT cipher (draft-smyshlyaev-tls12-gost-suites) support... yes" + check_text "for GOST28147-IMIT MAC (draft-smyshlyaev-tls12-gost-suites) support... yes" + + rm -f ${OUTFILE} + +fi + +exit 0 diff --git a/tests/gnutls-cli-invalid-crl.sh b/tests/gnutls-cli-invalid-crl.sh new file mode 100755 index 0000000000..d7383a555b --- /dev/null +++ b/tests/gnutls-cli-invalid-crl.sh @@ -0,0 +1,188 @@ +#!/bin/sh + +# Copyright (C) 2018 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +unset RETCODE +TMPFILE=crl-inv.$$.pem.tmp +CAFILE=crl-inv-ca.$$.pem.tmp +CRLFILE=crl-inv-crl.$$.pem.tmp + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + +SERV="${SERV} -q" + +. "${srcdir}/scripts/common.sh" + +check_for_datefudge + +echo "Checking whether connecting to a server but with an invalid CRL provided, returns the expected error" + +cat <<__EOF__ >${TMPFILE} +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAxfNimQ1uOFXUSVCm0lBems4HpfLkW1Ykf5qLd9kdoHte7YAs +BHjFPaPSdXitYI36YMwqVcXT6RDJa0mcAV3QmMMxAnpKq7LIDVC9BNgjc7Dq5ou5 +X2wNKrs3ygqg6HR87nJaw9TFqKetoP9mX37igBc2QWg5Fx6/Gem57hwD+mBEs+Hv +jd7q4wDlLaNS/165DBECr5dDUAIVr0bh0+1s/rDzIpjuq1qtN7b0C1rmWlsyphYu +aYm07X7x6hZcjvAoM3w5FLzbOnS6QrBeQOc2J6VBHqaHMKEVc+Dwt+Ggn0De0QCK +ucQRUCO5DQDUZnVLZhUpObvm1cBvQd5Db15IiwIDAQABAoIBACUSqhqkC0p9uJ5q +fnPRHYa8o24PCXmZrog/d3NgtE3EDUlJwfSscbRTpCzgBwiYTpYmZp9dx4xU2oQ/ +avpOiayykdE2+hkiCJmFz4DCwhD+x1+aN4OJhwXDvnUWfIBMoME/pYQbq1Ek5j3K +1293IhB/SGgDjv2ngn7l6S6RDKWtYZry61oMEoVRy96FJ+88o5khlvfWE2zF2+M6 +T2qFbzO29oq++cDSIlgm9eSN6gG5uzZcxqTapEvWrRdKZfEqcyGJuysQbShrASvI +GvJclewdnguBW2+X/bwABSEaG7AdPZJdfQJayk97gKJ8xpFZLY9auub7O/0z1CJi +lFsj4LECgYEA5TY8Z73ODtR87HEE3uUqiix4wPO4yJXWfZUwxNAyet2Jx5e5HYvL +iEkbZdadlKtSoPTnVSu6OZxhWZVBS5WoxxijBneDvh7I6gN8eVtch9EJVmJig6Eg +kHTo5Z2ZwheGe/RxB3ml3IT2IAdr5+QE6CfVBNA0fzVTItCLgO3YI/8CgYEA3RXZ +yskckcbCr1rceRmQ8CPbKg1bWGujLMpTILW0/Ii51PMredyG3E063G4kbMOFRmVj +eI5AFgZX7w5N4vjaf8PbOhsqrQvQ/UglB1fD0tLX8LgF9xwh7P1Y4VLHFMEGJUy1 +PEGVCT0FIe2REGxAmyELaP8SSvW8fGjXJSp2K3UCgYBSlq5BOxTKJyo0D60Pm0cu +rkN8UtUcAVFdwqnl4Javyq9gaXzb9okJvD3Q/fmdnfWR5WyNNcpOA9jX7H2wfGZq +BqiHJf0kPfdqyoLJP3Ahx+IzbBPPFfmj01wvkA/c7ZkZhMRNSznGMWp1s/bfgTt7 +Yw7QQy0HQPGJs9bwR8L/hQKBgQCXFvvEbjSsG12pYTsTN7mpo5d/4ajvgH//eDXf +QM7zVq1JLvYjTeaMX+s+Abe67NQEC/4ywWRiqOsnYGsyFkec0UjdKPu9TzoAHnHP +1tbpGVaiF+Fbw0ocH/fB5URQlqmQjB+/kkI8EguT6DsfMhvk6GxX0Rm7SL0LeMqv +h5lCkQKBgAR2U6cjbzJRhDyEOmUJH2keYHDwWUMx8ypvfhbPiPJyTC2sDcRrMrnO +WB3NtiB88aLFPjZ7sFZYE5plCESGkxK4Y21/UJHlw3I7X4JKYslE7dMq8Qzbv58r +23fZkHop4UJ1bHk7O4FRL3brU6KlIzZTOXzEeP+MRRehhwzkwpxf +-----END RSA PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIDiTCCAkGgAwIBAgIUEOtG5aJHVFm4ARA8uv4bJ/OqL4YwPQYJKoZIhvcNAQEK +MDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMC +AUAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xODA5MTgwNjQyMzdaGA85OTk5MTIzMTIz +NTk1OVowEzERMA8GA1UEAxMIc2VydmVyLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDF82KZDW44VdRJUKbSUF6azgel8uRbViR/mot32R2ge17tgCwE +eMU9o9J1eK1gjfpgzCpVxdPpEMlrSZwBXdCYwzECekqrssgNUL0E2CNzsOrmi7lf +bA0quzfKCqDodHzuclrD1MWop62g/2ZffuKAFzZBaDkXHr8Z6bnuHAP6YESz4e+N +3urjAOUto1L/XrkMEQKvl0NQAhWvRuHT7Wz+sPMimO6rWq03tvQLWuZaWzKmFi5p +ibTtfvHqFlyO8CgzfDkUvNs6dLpCsF5A5zYnpUEepocwoRVz4PC34aCfQN7RAIq5 +xBFQI7kNANRmdUtmFSk5u+bVwG9B3kNvXkiLAgMBAAGjdzB1MAwGA1UdEwEB/wQC +MAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0MA8GA1UdDwEB/wQFAwMHoAAwHQYDVR0O +BBYEFJVJTYVERYv5/qI31HwTDqATv4GRMB8GA1UdIwQYMBaAFBnn35UaLvLuW/YH +E3v2gKntMzNNMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIBoRowGAYJKoZI +hvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFAA4IBAQCPVloFdhqdJqGjhxpl2Wv2ftD3 +w+IeHSqURyCeijUCIOkqMlA3085nuoULiJ0p1ryi8rRWOvNjRsRQ30/lnLsxfmMh +oVR+g9uq0YZcFqkeRL5aDTrfJZWFeVSqXuuJvhyw1el5hs4bDSahMFB+dx2G+3zX +Ycd4Sq3sXDkdLnfD9GSeVvvbzAb7Z7qD1cdh1HaEnX2fsXT69czsFiaTgknr3Vxc +P0yFZVNCT360EVsduLkLWnCqZYVWWDFUlut7SOwhsYUx2ZOoM4RuBy+uDF2PM8BP +BkgYEHeWFA31nnwBNePyvWrAZ1DguOvnETSMB/+8zDX3+teNZNNdTVTQ6ypQ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDgTCCAjmgAwIBAgIUE8klaC2IZj3Tr2/jEVEiJGj8piYwPQYJKoZIhvcNAQEK +MDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMC +AUAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xODA5MTgwNjQyMzdaGA85OTk5MTIzMTIz +NTk1OVowDzENMAsGA1UEAxMEQ0EtMDCCAVIwPQYJKoZIhvcNAQEKMDCgDTALBglg +hkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCAUADggEPADCC +AQoCggEBALUJWYFxTq3vWG+hZq8KsRe0YRf5pqftxR21uZ7MSr25Muo7/s69toZG +7SaV1ZFp2n+Njm96nRLDqCc7cnaPLpKeMBFI84pQOYMdJs2mxs7wrBvejTBpxw3f +o1L2cJWznXZwvDQd+iz3qt62kF53tjpUzQ0Cqn6AMU961+H99Tq39iONcAvmTYeT +Bf+P4jhg3h5cOkdhsB4zrr0ek0OdgSdHiTIWvmYbEvizwhBc8pLOc007FkslqlQ5 +b7Fplx/B+v/etqUoW7/742phxJhTjhRW75BWoCiQyhglwUfpDv0tXnMXousXdwaQ +Ao1EM1v/OCsYj/U2u10Bo/5y1q6Jjz8CAwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB +/zAPBgNVHQ8BAf8EBQMDBwQAMB0GA1UdDgQWBBQZ59+VGi7y7lv2BxN79oCp7TMz +TTA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDAL +BglghkgBZQMEAgGiAwIBQAOCAQEAMAgvcHqmjz1Ox5USoup5pe6HWPKtOR5pVGX2 +1zAk1wq7GoTKvo5QA6HtNR0ex1A2//XhklAKcqsIv1ELEh/3K/L0dEuaN4Zs784e +zaP0g/Ax6X3ClrHgARA4FA6MtaQblezj+7Zfc6cg1gKtfYleiOoK/Q+kk6JxOYAH +Lz9MF/6bZ8mYJQv8DURSp2p5NVWSEjbQV5IG2dw/eknZtbFaN5b+db3eVtrK0ZeS +l1e3hTwopCLNoh4qHUW/qKl0l1Gt7kPPxAsRReOxdcb1Pv73iuK7w5wbPyyWp0kM +FQj9tqRIMQZIer3gaURWG8OZfntCAvtlSSwc1PjwLBXO9ZvNBw== +-----END CERTIFICATE----- +__EOF__ + +cat <<__EOF__ >${CRLFILE} +-----BEGIN X509 CRL----- +MIIB/TCBtgIBATA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqG +SIb3DQEBCDALBglghkgBZQMEAgGiAwIBQDAPMQ0wCwYDVQQDEwRDQS0wFw0xODA5 +MTgwNjQyMzdaFw0xOTA5MTgwNjQyMzdaMACgQTA/MB8GA1UdIwQYMBaAFBnn35Ua +LvLuW/YHE3v2gKntMzNNMBwGA1UdFAQVAhNboJ5dKaGvdv1Vo9o1XXTbeiMKMD0G +CSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCG +SAFlAwQCAaIDAgFAA4IBAQBgodBpVGTDHV4HBSgNPUnz7BH/BdRX1OPB8oYclDtv +l0xTzRR4qm/dMU3N3iH7vMk2y8U/TwD7NueyUnumt0vATTfjR2cle5lu2czksYsR +e4As9cI5cb4Sk+cf3/HyAVwnmZemTAA+cAJHkL6p7E+mSUoBVB6m8h8d6RH8jXmO +BXBE3z1xVITqahDdD6sLaR5jpnOtg/1nBAW8Hzr2p8tjEwhI8TCfZXbL9Q6fZtTr +apDrIx0D/G4hDKmmtQeY2q3RCOSJldg4YzUjjuhWs6BahHj9jDJpz02180ao7bda +eoNetNEqNvBvFvkO9gtgSzOzS34taiMpkIBwBbCNkm4p +-----END X509 CRL----- +__EOF__ + +cat <<__EOF__ >${CAFILE} +-----BEGIN CERTIFICATE----- +MIIDgTCCAjmgAwIBAgIUE8klaC2IZj3Tr2/jEVEiJGj8piYwPQYJKoZIhvcNAQEK +MDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMC +AUAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xODA5MTgwNjQyMzdaGA85OTk5MTIzMTIz +NTk1OVowDzENMAsGA1UEAxMEQ0EtMDCCAVIwPQYJKoZIhvcNAQEKMDCgDTALBglg +hkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCAUADggEPADCC +AQoCggEBALUJWYFxTq3vWG+hZq8KsRe0YRf5pqftxR21uZ7MSr25Muo7/s69toZG +7SaV1ZFp2n+Njm96nRLDqCc7cnaPLpKeMBFI84pQOYMdJs2mxs7wrBvejTBpxw3f +o1L2cJWznXZwvDQd+iz3qt62kF53tjpUzQ0Cqn6AMU961+H99Tq39iONcAvmTYeT +Bf+P4jhg3h5cOkdhsB4zrr0ek0OdgSdHiTIWvmYbEvizwhBc8pLOc007FkslqlQ5 +b7Fplx/B+v/etqUoW7/742phxJhTjhRW75BWoCiQyhglwUfpDv0tXnMXousXdwaQ +Ao1EM1v/OCsYj/U2u10Bo/5y1q6Jjz8CAwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB +/zAPBgNVHQ8BAf8EBQMDBwQAMB0GA1UdDgQWBBQZ59+VGi7y7lv2BxN79oCp7TMz +TTA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDAL +BglghkgBZQMEAgGiAwIBQAOCAQEAMAgvcHqmjz1Ox5USoup5pe6HWPKtOR5pVGX2 +1zAk1wq7GoTKvo5QA6HtNR0ex1A2//XhklAKcqsIv1ELEh/3K/L0dEuaN4Zs784e +zaP0g/Ax6X3ClrHgARA4FA6MtaQblezj+7Zfc6cg1gKtfYleiOoK/Q+kk6JxOYAH +Lz9MF/6bZ8mYJQv8DURSp2p5NVWSEjbQV5IG2dw/eknZtbFaN5b+db3eVtrK0ZeS +l1e3hTwopCLNoh4qHUW/qKl0l1Gt7kPPxAsRReOxdcb1Pv73iuK7w5wbPyyWp0kM +FQj9tqRIMQZIer3gaURWG8OZfntCAvtlSSwc1PjwLBXO9ZvNBw== +-----END CERTIFICATE----- +__EOF__ + +eval "${GETPORT}" +launch_server $$ --echo --x509keyfile ${TMPFILE} --x509certfile ${TMPFILE} +PID=$! +wait_server ${PID} + +datefudge "2018-9-19" \ +${VALGRIND} "${CLI}" -p "${PORT}" localhost --x509crlfile ${CRLFILE} --x509cafile ${CAFILE} >${TMPFILE} 2>&1 + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +unset RETCODE +CERTFILE1=rawpk-script1.$$.pem.tmp +CERTFILE2=rawpk-script2.$$.pem.tmp + +TMPFILE=rawpk-script.$$.log + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + +SERV="${SERV} -q" + +. "${srcdir}/scripts/common.sh" + +echo "Checking whether we can connect with raw public-keys" + +cat <<__EOF__ >${CERTFILE1} +-----BEGIN CERTIFICATE----- +MIIEXDCCAsSgAwIBAgIIWkcxay17JgYwDQYJKoZIhvcNAQELBQAwQjEaMBgGA1UE +AxMRdGVzdC1hbGwtZGVmYXVsdHMxCzAJBgNVBAYTAkFUMRcwFQYKCZImiZPyLGQB +GRYHYmVidC5kZTAeFw0xNzEyMzAwNjI1NDhaFw0xOTEyMjAwNjI1NTFaMEIxGjAY +BgNVBAMTEXRlc3QtYWxsLWRlZmF1bHRzMQswCQYDVQQGEwJBVDEXMBUGCgmSJomT +8ixkARkWB2JlYnQuZGUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCv +M1Y+Q4goCtHi3SLHTBQ14LS6NI4UbEa8YZFfaOfmOOufzwdNUntUkSA2PPS7mQ55 +SN+Sdel1x4f4EjfxCWhj0j0Y26OmJS+wYNz3oOdoKThLq4Mn5SumO7mhU684mZTi +EP2qrxFeYvQqQBdjv8rfP2LJ+RsB/3CiwWdkx4qeudoSUCqzWo8e6K2ul0JJuk+Z +fvqkPpDl+cVTikmxNwqjAt4Ef9oiT1YjUIBUae+RCdNZEa6d2AhW+4bD+vl0Pci+ +EBPzhLeR8iYuIEX66Tpv8AUvv412SuvVZbizGP5EDH4gkWtNWem9yNPCHA9rBqrC +6Nib4TPPLm1aN4mJyLdoQ1gD0STHcFADo+1H0JDywzxlgkks9cj5sQmApO7+AuGs +JoUDAp4g4LHnBw/H/5esVta5Pn7GThKwu7PRY0Y59ZKQrT5deXm9TeySdav+9wR/ +5aiIZpAsAM5zWnN5qAP58Xl+pa0qN48GPcwmAsa4Zh9ehGhzR00MFHD3V8i0rFcC +AwEAAaNWMFQwDAYDVR0TAQH/BAIwADAUBgNVHREEDTALgglsb2NhbGhvc3QwDwYD +VR0PAQH/BAUDAwegADAdBgNVHQ4EFgQU0tGobgnLApQRxvbzIhOT2gAUQAYwDQYJ +KoZIhvcNAQELBQADggGBAHmqS1jOY5J9ad63aFXaei0lZhTnYCsFOGWuyLqZtz9K +21n0V8WVXeGmBjXkYNS3LCwPwFqKsp3vhsh4Hw5cyKkfQIri0HlWASYiJCPZxDLH +odVJSOPV65Q+gmhT/ltHK5CW4DJ2Gy82vPEFqw3+Kca28IJ0m2wr0FlhOCvnHUa7 +GMS/+SdaMbsi1Eui0wUG/xWw8/2kY26IjhDJHrsTUjpYQ+vTy5oOjyq6Yf15Orjw +tJTwGgRcfoiBGhzMgTbUfFCO33L6f0u/WR/sI7DYDO/6JW1USnTrMuwEL6/jMNAw +QPl6irVOy/UwcIcLIBw8ta5cR8JVbhYuV7cUT9qDVwCOqotkwjDVsH2aztLLLr5d +ywMQXvXh2UI4jSujWf9vYY3F7GkDGy/cOwVprZoAe0mXwvuCvDyNZqXJTxKtq/w9 +ZwOveNtNeXHOJljseNXLQPCfCcQ6mEUNjqwo2eDqH0OtJsQRN2CAUsn+YBnAALrv +P4J46RbB7bnzQ9kHiv6KuA== +-----END CERTIFICATE----- + +-----BEGIN RSA PRIVATE KEY----- +MIIG4gIBAAKCAYEArzNWPkOIKArR4t0ix0wUNeC0ujSOFGxGvGGRX2jn5jjrn88H +TVJ7VJEgNjz0u5kOeUjfknXpdceH+BI38QloY9I9GNujpiUvsGDc96DnaCk4S6uD +J+Urpju5oVOvOJmU4hD9qq8RXmL0KkAXY7/K3z9iyfkbAf9wosFnZMeKnrnaElAq +s1qPHuitrpdCSbpPmX76pD6Q5fnFU4pJsTcKowLeBH/aIk9WI1CAVGnvkQnTWRGu +ndgIVvuGw/r5dD3IvhAT84S3kfImLiBF+uk6b/AFL7+Ndkrr1WW4sxj+RAx+IJFr +TVnpvcjTwhwPawaqwujYm+Ezzy5tWjeJici3aENYA9Ekx3BQA6PtR9CQ8sM8ZYJJ +LPXI+bEJgKTu/gLhrCaFAwKeIOCx5wcPx/+XrFbWuT5+xk4SsLuz0WNGOfWSkK0+ +XXl5vU3sknWr/vcEf+WoiGaQLADOc1pzeagD+fF5fqWtKjePBj3MJgLGuGYfXoRo +c0dNDBRw91fItKxXAgMBAAECggGACEz1XBPVApioowf5Gtom5vqTdXMB/EO5AjnZ +Kl0NB6JQv4yOewJaZ4JMtWUj7zNsNSDXvtepTPQ8I+uxDNF2SaxvSps1YKzIWqHs +NitAa3Xwfd1NZHl+HO0deWA+n/7ex+soKYsL1p33lXzd3tL6aKNXKdyMhAa3Lm7d +WDAACE8j3tQ/ganbuAosGGaANIAIP2x9sYRpVwwDZlbZ8PR7o4eCP1JTYmbB3QB2 +ZAl02TlO8xxcWowesQhPtT9RzEkVAqKC8EULvdvY4b5OFQxkmLDQYv/c+HqetKQ7 +/ewkp/PRndGJ+k0Nebr6G2yIj6D3pN1YfquTfwGMi2yTZh4hQgkXi2WP8KRRgpIU +iUfsSA9wZ4s2WNTMPQANfztP2cUVSPHW8UlTM373qLc3TGDuxmR+h7vqeQ0kVakL +vhQ+HkEvQ2yrxc3m3g1BDoM3/ShHx7IskBqeX3L3Ad7pZpu/Q+Y/z5tVtDUY42LW +DTeB/mKZcKZLK0BCz+o4L9KPceQxAoHBANZfiYobRMXmT0yOfTj68JWR/g7B9XBV +rQ03xKxpI9mVckAT52xPJCUsSRVyUbJDs4hnBOe/y3Uk3jejDoCoI1h8ZyKCwhHq +Py0GFCmB/AzeYRchD0TY1H69r4PZjloGX6SWlha784ajcJspoV5TYuLkhOVDFsA/ +R4Yu4irkQ2hugPT/q3ysiDXgQSB9+SqCYGUfMbadC+Ppm5+egTF8uyHJeV4YQ/Jr +CNvsA6wxnONg0gbhsd3wLixjzz8jfJ1N6QKBwQDROIg0JumHkO5pl7wdKUSRx43y +OOBNOf3KqGsRT8EDnRcepJy1gdg/SIp5/MRi+PJLqDfLNcIr8gQhanJnZ160UFVX +8IhJ02Of/NGrFvctURJ3Dt63SspIoi6Yt/7Z1IQrvxpHsD3eaNtqywtYF59yhkdB +hKomPn++LraDyXHqu0xCuO9te61ZP2haHhPsGI1Z2fuep5dnZJRLNR9BZWuqmkv9 +qj34ftm6Np8qSpdp9GotsRL2WIRaNF/sP+Z6gD8CgcAF7VZMLzzTi+6dW0MzFB0a +xZKUreAvXu8N8oDJk46eMXebNfGsGPQS4wqSQTrpBt4r401Law4hCwfp2eRIwl1X +0Pi5B4x+Gk/s2sIr86AYav2cOhnF+YjGiFAWASnia1Kxpkg4ELJHArXWVGxVw1B0 +nYTfId+7KQS9PQab0PvcI1IFdBw1sj+B3dVvJIyDFF+97ALf3a+6eXcIDsXbrGsw +H/XvGBSo2zS/f+MKG8UOtFqaPhtA26crKwdL45tKbiECgcAO468NxxcnhrDw4tOI +X795gHIhotqTpGTjX0j/WmWqFCvpCl38rNju6AKy28I+KOlVaQtPcuv2pKqWljS+ +FyUuP+lS8NNCLcERSbTCMEg2+WYPAwfmk3QB50jZpX6FkhI16su7/lbo1R2IZBrS +khvO0q+Pghl5z0jYCAsFJfjtc5bhyLeBWyPjDhgnEazpSHYGxvSZPeQQf5/uGkG3 +LbiT05dE3jC61ow4LFr3b4eHCtXjmo526aXBpaiN754/aZECgcBAK3aOmgwI5vw4 +7a94mWffD0LzHl26D2ayXHvXmzjTOv7hsvilUTitdlqNrlZ3AxOWX1nGUcxdUwPT +Ri1h4yIi28MvTjBD+wvXOGwmINGkBFWKIzkhh/bvbzQsuRSmG09JF1tBJjE6oCUs +5ZJ7v0NCtg7yGOY8ciWIpahFc796prk17ZgIn/t0hebc9ZTaIat5QKbr4SWLZJEl +i2yISkQxkJZp8sTwSlIGZSBpuZcDq9AdUjan1WhGgl4hpHpjr3Y= +-----END RSA PRIVATE KEY----- +__EOF__ + +cat <<__EOF__ >${CERTFILE2} +-----BEGIN PUBLIC KEY----- +MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAtfCQ/U13p076UUEggNm8 +mI+bEilHrvKiyZpY/NZ2JYhmU+n0ChuH6XweXuiuW2gKR/Fl0vpGAxhugQAR3lMS +0XJZjg4z1gFP0BMeR0YYQuWe2Gfg24fUNPluHCf+dJMHAadIVKyUvVKFPDTwu6yU +lVafn0uoMme8b51yAwQAeXGOJnTFHSaRhuDWAokaTsW0kdAr5FSxMadSTVuDNSav +ic6qSUimJvPjT+URzpIjy/2MG8aj00At1MSj8sC/g5JuBvMKXe4mg6/Xd1YsP9gT +GhpfuBzwt+H4HDm4MzwNqdWNJ7pAhdcBOztqsScZJUqmGT742Fr0OjYYOFvHYLcx +SMD65huLlKTiQwg0HocVFA/VilLLV65cW+AUakr0YCXKyucPz4omVy/RINi663Bn +UyIR3pkOwbr71syuiU1S9cMnG0BxHsPmbvgaYttnCwp0cexB8MrJNJv5FcKLOGUL +MMCvSIT7elYwGN2p5gtAg1RLmyVvubTmkOAmxAgybgqHAgMBAAE= +-----END PUBLIC KEY----- + +-----BEGIN RSA PRIVATE KEY----- +MIIG4gIBAAKCAYEAtfCQ/U13p076UUEggNm8mI+bEilHrvKiyZpY/NZ2JYhmU+n0 +ChuH6XweXuiuW2gKR/Fl0vpGAxhugQAR3lMS0XJZjg4z1gFP0BMeR0YYQuWe2Gfg +24fUNPluHCf+dJMHAadIVKyUvVKFPDTwu6yUlVafn0uoMme8b51yAwQAeXGOJnTF +HSaRhuDWAokaTsW0kdAr5FSxMadSTVuDNSavic6qSUimJvPjT+URzpIjy/2MG8aj +00At1MSj8sC/g5JuBvMKXe4mg6/Xd1YsP9gTGhpfuBzwt+H4HDm4MzwNqdWNJ7pA +hdcBOztqsScZJUqmGT742Fr0OjYYOFvHYLcxSMD65huLlKTiQwg0HocVFA/VilLL +V65cW+AUakr0YCXKyucPz4omVy/RINi663BnUyIR3pkOwbr71syuiU1S9cMnG0Bx +HsPmbvgaYttnCwp0cexB8MrJNJv5FcKLOGULMMCvSIT7elYwGN2p5gtAg1RLmyVv +ubTmkOAmxAgybgqHAgMBAAECggGAAoHBDaxulKCS9GGoV/4oChYYdeSZt0Bim9KD +nWA7GoNJnahgk28TrVTnejlMhbfmRF2AIKsQIeTJSP++P0j3vmkL8NgjQLSd6+kH +hsXhebJ+QM8VmxDBDMXPDZZDfEm2VACBD6GdHwqvCUhVdNCI75HU+zXoqGEjiIor +0vzQINw+sCr1uFQatzgL2tcWxLUWqteqcyfzlRKQIL69DRNuYcC2OfJFT84WeLhY +SXdcBOiGcK+I/FUrDH51H9gmC2MOGRnWsB0daTMUraJ2or9TCH3PrULGshlMuMzs +aMnecKf79DBKj4BO/x2VFo2rq7H2uPczv6+6bHapjagMtxWcogFceUqjNXnnWyiK +8oH7iin2PnIDUX+ks3YwQ9hpbJIy3V9UF2J6PgyaKDGfyT2mVoLmTbD0IpPlpF7G +xGdUCEVB3AqB1nA8KE6vim8BKktInVM1fMylR/n0jj7mSK1oqqH76S1kmfH4sla/ +KetthtIy2IVnljsgIbrABp1A5gd5AoHBANnDTBXsDMA9VE+ArOB8WNkzT1gl44QO +cKHLJQ2sTGNrSA5m9xjGgcmOogJTw5wxz5vPqqKol0xpIEHIAmftREt1qpem7+Gi +CNslPzHR9PYe5XGAV3bgFe4iL2Q9dD+rOx5/EK9GroqNtNNSEzcckAu414whIazb +sNhFcsCd1Yn6kadfeMRdt8MQ4sgQWWxON1gjOynbx5lHuLqZs8SYUJ6v3RRn7ZXv +cGI9NeuAxHDpZPqhnpsFyfWbLFHJIUaaVQKBwQDV4vmL0gpdiBfKPS6D8OkVSayQ +CBLoaq9sW4VWPpv83lTtB6nf6zfhxs7ho+0aosieV5KQkJho0KY5mHvKfFO5ih1g +ADtG90X37tVxHyQLXxqBpOBQO12lVsc/ILO6hqDOFoAzGMPpT43CrF2/09GQM/uA +Uo2s0Z9mvMalybtWcGDrsfGQhuY5soeEho9gziAC3zFMtSZJDBd5pf+Ls2ZcBDFp +5GrIvVFYGIOqbSheeSuYyhgZGHiAXtibRkroZWsCgcAeCMiisWbk0NCjEn1FjQD4 +HBKSds9VdGRmfE1FAIGcqLxMeDkWarKV6R1BMupkzZ3zwIWpX5VWjZ1MVVi3msrz +mWwI9JZbSWztRMrdhTbDB2nf6LKni6qaqI5exfcVnPlPcHkNo7MJGxhYmRZbYI4h +f8IC6sLpQ3e1rIZyOJKuMCgMrKdMdhyVQ+vzagXbYUJS3rEXSd/SrUi2O+LGd7eO +23Sjjt3+8wJOGmEodR8i753kz4u/l+HOBTPsp8/2G+0CgcBD72Pz1TMVojRsOCKe +JdbivBPja60VxU0Szb78Nca1+qhe4SBDzyJgxBTR9o9I9otiP859vG+sWxlxEc2/ +8t1lAUlzRJ+PWtsOdP22gH2iXwK8SvI0iaak7Xs7wddUV46b5umxURxo7qvIOZdN +ZqoZc2leyNnXGn3W0/8EiZ7HRcqDEnH3xeE6UkpY/aRsywu/3cR66M7QRNbv/Jm+ +daz9bReE2thQClHb+W1YpHM+Dp6aWRZuYidkHrwOFbWVOyECgcBSsN2yk6eV9pmQ +p4yHZcJ6QdCHm1KqdAMK/pSurjSf3+281mkxTAkZBGLl2QwZKEBTapKZhvsoC3+d +fpk1UZneP1g9PHoRS7rooQV5baUj0sOd3RyD3iylb1soyyEKWxbzdiS/nswYbwCV +LMvucEsmS5aIfIUo4ntlNs3bVZqLdh0BAG9+WuimpYyp7pxrvuj2FM+gwbwDZvto +O2/1wSKkPX2klUKg1hNNELJAXfxHLw2+NvV9x4rDiu5xJHgDCD0= +-----END RSA PRIVATE KEY----- +__EOF__ + +trap "cleanup" EXIT QUIT + +cleanup() +{ + kill ${PID} >/dev/null 2>&1 + rm -f ${CERTFILE1} ${CERTFILE2} + +} + +echo " * testing server X.509, client RAW" + +eval "${GETPORT}" +launch_server $$ --echo --x509keyfile ${CERTFILE1} --x509certfile ${CERTFILE1} --priority NORMAL:-CTYPE-CLI-ALL:+CTYPE-CLI-RAWPK --require-client-cert +PID=$! +wait_server ${PID} + +${VALGRIND} "${CLI}" -p "${PORT}" localhost --priority NORMAL:-CTYPE-CLI-ALL:+CTYPE-CLI-RAWPK --no-ca-verification --rawpkkeyfile ${CERTFILE2} --rawpkfile ${CERTFILE2} >${TMPFILE} 2>&1 ${TMPFILE} 2>&1 ${TMPFILE} 2>&1 ${TMPFILE} 2>&1 ${TMPFILE} 2>&1 ${TMPFILE} 2>&1 ${TMPFILE} 2>&1 ${TMPFILE} 2>&1 ${TMPFILE} 2>&1 ${TMPFILE} 2>&1 ${TMPFILE} 2>&1 ${TMPFILE} 2>&1 ${TMPFILE} 2>&1 +# + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +unset RETCODE + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +SERV="${SERV} -q" + +. "${srcdir}/scripts/common.sh" + +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem + +eval "${GETPORT}" +launch_server $$ --echo --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +run_server_test() { + local priority=$1 + local id=$2 + local TMPFILE=resume.$$-$i.tmp + + "${CLI}" -p "${PORT}" 127.0.0.1 --logfile=${TMPFILE} --priority="${priority}" --resume --insecure /dev/null || \ + exit 1 + grep -H "* This is a resumed session" ${TMPFILE} || + exit 1 + + rm -f ${TMPFILE} + + exit 0 +} + +echo "Checking whether session resumption works reliably under TLS1.3" +PRIORITY="NORMAL:-VERS-ALL:+VERS-TLS1.3" +WAITPID="" + +i=0 +while [ $i -lt 10 ] +do + run_server_test "${PRIORITY}" $i & + WAITPID="$WAITPID $!" + i=`expr $i + 1` +done + +for i in "$WAITPID";do + wait $i + test $? != 0 && exit 1 +done + +echo "Checking whether session resumption works reliably under TLS1.2" +PRIORITY="NORMAL:-VERS-ALL:+VERS-TLS1.2" +WAITPID="" + +i=0 +while [ $i -lt 10 ] +do + run_server_test "${PRIORITY}" $i & + WAITPID="$WAITPID $!" + i=`expr $i + 1` +done + +for i in "$WAITPID";do + wait $i + test $? != 0 && exit 1 +done + +echo "Checking whether session resumption works reliably under TLS1.2 (no tickets)" +PRIORITY="NORMAL:-VERS-ALL:+VERS-TLS1.2:%NO_TICKETS" +WAITPID="" + +i=0 +while [ $i -lt 10 ] +do + run_server_test "${PRIORITY}" $i & + WAITPID="$WAITPID $!" + i=`expr $i + 1` +done + +for i in "$WAITPID";do + wait $i + test $? != 0 && exit 1 +done + +kill ${PID} +wait + +exit 0 diff --git a/tests/gnutls-cli-save-data.sh b/tests/gnutls-cli-save-data.sh new file mode 100755 index 0000000000..29a2c081b6 --- /dev/null +++ b/tests/gnutls-cli-save-data.sh @@ -0,0 +1,82 @@ +#!/bin/sh + +# Copyright (C) 2010-2016 Free Software Foundation, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +unset RETCODE + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + + +SERV="${SERV} -q" + +. "${srcdir}/scripts/common.sh" + +echo "Checking whether saving OCSP response and cert succeeds" + +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem +OCSP1=${srcdir}/ocsp-tests/response1.der + +TMPFILE1=save-data1.$$.tmp +TMPFILE2=save-data2.$$.tmp + +eval "${GETPORT}" +launch_server $$ --echo --x509keyfile ${KEY1} --x509certfile ${CERT1} --ocsp-response=${OCSP1} --ignore-ocsp-response-errors -d 6 +PID=$! +wait_server ${PID} + +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --save-cert ${TMPFILE1} --save-ocsp ${TMPFILE2} /dev/null && \ + fail ${PID} "1. handshake should have failed!" + + +kill ${PID} +wait + +if ! test -f ${TMPFILE1};then + echo "Could not retrieve certificate" + exit 1 +fi + +if ! test -f ${TMPFILE2};then + echo "Could not retrieve OCSP response" + exit 1 +fi + +rm -f ${TMPFILE1} ${TMPFILE2} + +exit 0 diff --git a/tests/gnutls-cli-self-signed.sh b/tests/gnutls-cli-self-signed.sh new file mode 100755 index 0000000000..07cd5824b8 --- /dev/null +++ b/tests/gnutls-cli-self-signed.sh @@ -0,0 +1,143 @@ +#!/bin/sh + +# Copyright (C) 2017 Nikos Mavrogiannopoulos +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +unset RETCODE +TMPFILE=self-signed.$$.pem.tmp + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + +SERV="${SERV} -q" + +. "${srcdir}/scripts/common.sh" + +check_for_datefudge + +echo "Checking whether connecting to a self signed certificate returns the expected error" + +cat <<__EOF__ >${TMPFILE} +-----BEGIN CERTIFICATE----- +MIIEXDCCAsSgAwIBAgIIWkcxay17JgYwDQYJKoZIhvcNAQELBQAwQjEaMBgGA1UE +AxMRdGVzdC1hbGwtZGVmYXVsdHMxCzAJBgNVBAYTAkFUMRcwFQYKCZImiZPyLGQB +GRYHYmVidC5kZTAeFw0xNzEyMzAwNjI1NDhaFw0xOTEyMjAwNjI1NTFaMEIxGjAY +BgNVBAMTEXRlc3QtYWxsLWRlZmF1bHRzMQswCQYDVQQGEwJBVDEXMBUGCgmSJomT +8ixkARkWB2JlYnQuZGUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCv +M1Y+Q4goCtHi3SLHTBQ14LS6NI4UbEa8YZFfaOfmOOufzwdNUntUkSA2PPS7mQ55 +SN+Sdel1x4f4EjfxCWhj0j0Y26OmJS+wYNz3oOdoKThLq4Mn5SumO7mhU684mZTi +EP2qrxFeYvQqQBdjv8rfP2LJ+RsB/3CiwWdkx4qeudoSUCqzWo8e6K2ul0JJuk+Z +fvqkPpDl+cVTikmxNwqjAt4Ef9oiT1YjUIBUae+RCdNZEa6d2AhW+4bD+vl0Pci+ +EBPzhLeR8iYuIEX66Tpv8AUvv412SuvVZbizGP5EDH4gkWtNWem9yNPCHA9rBqrC +6Nib4TPPLm1aN4mJyLdoQ1gD0STHcFADo+1H0JDywzxlgkks9cj5sQmApO7+AuGs +JoUDAp4g4LHnBw/H/5esVta5Pn7GThKwu7PRY0Y59ZKQrT5deXm9TeySdav+9wR/ +5aiIZpAsAM5zWnN5qAP58Xl+pa0qN48GPcwmAsa4Zh9ehGhzR00MFHD3V8i0rFcC +AwEAAaNWMFQwDAYDVR0TAQH/BAIwADAUBgNVHREEDTALgglsb2NhbGhvc3QwDwYD +VR0PAQH/BAUDAwegADAdBgNVHQ4EFgQU0tGobgnLApQRxvbzIhOT2gAUQAYwDQYJ +KoZIhvcNAQELBQADggGBAHmqS1jOY5J9ad63aFXaei0lZhTnYCsFOGWuyLqZtz9K +21n0V8WVXeGmBjXkYNS3LCwPwFqKsp3vhsh4Hw5cyKkfQIri0HlWASYiJCPZxDLH +odVJSOPV65Q+gmhT/ltHK5CW4DJ2Gy82vPEFqw3+Kca28IJ0m2wr0FlhOCvnHUa7 +GMS/+SdaMbsi1Eui0wUG/xWw8/2kY26IjhDJHrsTUjpYQ+vTy5oOjyq6Yf15Orjw +tJTwGgRcfoiBGhzMgTbUfFCO33L6f0u/WR/sI7DYDO/6JW1USnTrMuwEL6/jMNAw +QPl6irVOy/UwcIcLIBw8ta5cR8JVbhYuV7cUT9qDVwCOqotkwjDVsH2aztLLLr5d +ywMQXvXh2UI4jSujWf9vYY3F7GkDGy/cOwVprZoAe0mXwvuCvDyNZqXJTxKtq/w9 +ZwOveNtNeXHOJljseNXLQPCfCcQ6mEUNjqwo2eDqH0OtJsQRN2CAUsn+YBnAALrv +P4J46RbB7bnzQ9kHiv6KuA== +-----END CERTIFICATE----- + +-----BEGIN RSA PRIVATE KEY----- +MIIG4gIBAAKCAYEArzNWPkOIKArR4t0ix0wUNeC0ujSOFGxGvGGRX2jn5jjrn88H +TVJ7VJEgNjz0u5kOeUjfknXpdceH+BI38QloY9I9GNujpiUvsGDc96DnaCk4S6uD +J+Urpju5oVOvOJmU4hD9qq8RXmL0KkAXY7/K3z9iyfkbAf9wosFnZMeKnrnaElAq +s1qPHuitrpdCSbpPmX76pD6Q5fnFU4pJsTcKowLeBH/aIk9WI1CAVGnvkQnTWRGu +ndgIVvuGw/r5dD3IvhAT84S3kfImLiBF+uk6b/AFL7+Ndkrr1WW4sxj+RAx+IJFr +TVnpvcjTwhwPawaqwujYm+Ezzy5tWjeJici3aENYA9Ekx3BQA6PtR9CQ8sM8ZYJJ +LPXI+bEJgKTu/gLhrCaFAwKeIOCx5wcPx/+XrFbWuT5+xk4SsLuz0WNGOfWSkK0+ +XXl5vU3sknWr/vcEf+WoiGaQLADOc1pzeagD+fF5fqWtKjePBj3MJgLGuGYfXoRo +c0dNDBRw91fItKxXAgMBAAECggGACEz1XBPVApioowf5Gtom5vqTdXMB/EO5AjnZ +Kl0NB6JQv4yOewJaZ4JMtWUj7zNsNSDXvtepTPQ8I+uxDNF2SaxvSps1YKzIWqHs +NitAa3Xwfd1NZHl+HO0deWA+n/7ex+soKYsL1p33lXzd3tL6aKNXKdyMhAa3Lm7d +WDAACE8j3tQ/ganbuAosGGaANIAIP2x9sYRpVwwDZlbZ8PR7o4eCP1JTYmbB3QB2 +ZAl02TlO8xxcWowesQhPtT9RzEkVAqKC8EULvdvY4b5OFQxkmLDQYv/c+HqetKQ7 +/ewkp/PRndGJ+k0Nebr6G2yIj6D3pN1YfquTfwGMi2yTZh4hQgkXi2WP8KRRgpIU +iUfsSA9wZ4s2WNTMPQANfztP2cUVSPHW8UlTM373qLc3TGDuxmR+h7vqeQ0kVakL +vhQ+HkEvQ2yrxc3m3g1BDoM3/ShHx7IskBqeX3L3Ad7pZpu/Q+Y/z5tVtDUY42LW +DTeB/mKZcKZLK0BCz+o4L9KPceQxAoHBANZfiYobRMXmT0yOfTj68JWR/g7B9XBV +rQ03xKxpI9mVckAT52xPJCUsSRVyUbJDs4hnBOe/y3Uk3jejDoCoI1h8ZyKCwhHq +Py0GFCmB/AzeYRchD0TY1H69r4PZjloGX6SWlha784ajcJspoV5TYuLkhOVDFsA/ +R4Yu4irkQ2hugPT/q3ysiDXgQSB9+SqCYGUfMbadC+Ppm5+egTF8uyHJeV4YQ/Jr +CNvsA6wxnONg0gbhsd3wLixjzz8jfJ1N6QKBwQDROIg0JumHkO5pl7wdKUSRx43y +OOBNOf3KqGsRT8EDnRcepJy1gdg/SIp5/MRi+PJLqDfLNcIr8gQhanJnZ160UFVX +8IhJ02Of/NGrFvctURJ3Dt63SspIoi6Yt/7Z1IQrvxpHsD3eaNtqywtYF59yhkdB +hKomPn++LraDyXHqu0xCuO9te61ZP2haHhPsGI1Z2fuep5dnZJRLNR9BZWuqmkv9 +qj34ftm6Np8qSpdp9GotsRL2WIRaNF/sP+Z6gD8CgcAF7VZMLzzTi+6dW0MzFB0a +xZKUreAvXu8N8oDJk46eMXebNfGsGPQS4wqSQTrpBt4r401Law4hCwfp2eRIwl1X +0Pi5B4x+Gk/s2sIr86AYav2cOhnF+YjGiFAWASnia1Kxpkg4ELJHArXWVGxVw1B0 +nYTfId+7KQS9PQab0PvcI1IFdBw1sj+B3dVvJIyDFF+97ALf3a+6eXcIDsXbrGsw +H/XvGBSo2zS/f+MKG8UOtFqaPhtA26crKwdL45tKbiECgcAO468NxxcnhrDw4tOI +X795gHIhotqTpGTjX0j/WmWqFCvpCl38rNju6AKy28I+KOlVaQtPcuv2pKqWljS+ +FyUuP+lS8NNCLcERSbTCMEg2+WYPAwfmk3QB50jZpX6FkhI16su7/lbo1R2IZBrS +khvO0q+Pghl5z0jYCAsFJfjtc5bhyLeBWyPjDhgnEazpSHYGxvSZPeQQf5/uGkG3 +LbiT05dE3jC61ow4LFr3b4eHCtXjmo526aXBpaiN754/aZECgcBAK3aOmgwI5vw4 +7a94mWffD0LzHl26D2ayXHvXmzjTOv7hsvilUTitdlqNrlZ3AxOWX1nGUcxdUwPT +Ri1h4yIi28MvTjBD+wvXOGwmINGkBFWKIzkhh/bvbzQsuRSmG09JF1tBJjE6oCUs +5ZJ7v0NCtg7yGOY8ciWIpahFc796prk17ZgIn/t0hebc9ZTaIat5QKbr4SWLZJEl +i2yISkQxkJZp8sTwSlIGZSBpuZcDq9AdUjan1WhGgl4hpHpjr3Y= +-----END RSA PRIVATE KEY----- +__EOF__ + +eval "${GETPORT}" +launch_server $$ --echo --x509keyfile ${TMPFILE} --x509certfile ${TMPFILE} +PID=$! +wait_server ${PID} + +datefudge "2018-1-1" \ +${VALGRIND} "${CLI}" -p "${PORT}" localhost >${TMPFILE} 2>&1 +#endif + +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +void doit(void) +{ + assert(gnutls_certificate_verification_profile_get_id("very weak") == GNUTLS_PROFILE_VERY_WEAK); + assert(gnutls_certificate_verification_profile_get_id("low") == GNUTLS_PROFILE_LOW); + assert(gnutls_certificate_verification_profile_get_id("legacy") == GNUTLS_PROFILE_LEGACY); + assert(gnutls_certificate_verification_profile_get_id("MedIum") == GNUTLS_PROFILE_MEDIUM); + assert(gnutls_certificate_verification_profile_get_id("ultra") == GNUTLS_PROFILE_ULTRA); + assert(gnutls_certificate_verification_profile_get_id("future") == GNUTLS_PROFILE_FUTURE); + assert(gnutls_certificate_verification_profile_get_id("xxx") == GNUTLS_PROFILE_UNKNOWN); +} diff --git a/tests/gnutls-strcodes.c b/tests/gnutls-strcodes.c index 5b3aa39c63..952fc5fbb4 100644 --- a/tests/gnutls-strcodes.c +++ b/tests/gnutls-strcodes.c @@ -32,6 +32,8 @@ #include "utils.h" +unsigned _gnutls_ecc_curve_is_supported(gnutls_ecc_curve_t); + /* Check whether the string functions will return a non-repeated and * non null value. */ @@ -113,10 +115,22 @@ void doit(void) check_non_null(gnutls_sec_param_get_name(i)); } + check_non_null(gnutls_certificate_verification_profile_get_name(GNUTLS_PROFILE_VERY_WEAK)); + check_non_null(gnutls_certificate_verification_profile_get_name(GNUTLS_PROFILE_LOW)); + check_non_null(gnutls_certificate_verification_profile_get_name(GNUTLS_PROFILE_LEGACY)); + check_non_null(gnutls_certificate_verification_profile_get_name(GNUTLS_PROFILE_MEDIUM)); + check_non_null(gnutls_certificate_verification_profile_get_name(GNUTLS_PROFILE_HIGH)); + check_non_null(gnutls_certificate_verification_profile_get_name(GNUTLS_PROFILE_ULTRA)); + for (i=GNUTLS_ECC_CURVE_INVALID+1;i<=GNUTLS_ECC_CURVE_MAX;i++) { + if (_gnutls_ecc_curve_is_supported(i) == 0) + continue; + check_unique_non_null(gnutls_ecc_curve_get_name(i)); if (i == GNUTLS_ECC_CURVE_X25519) continue; /* no oid yet */ + if (i == GNUTLS_ECC_CURVE_X448) + continue; /* no oid yet */ check_unique_non_null(gnutls_ecc_curve_get_oid(i)); } diff --git a/tests/gnutls_ext_raw_parse.c b/tests/gnutls_ext_raw_parse.c new file mode 100644 index 0000000000..283062ec93 --- /dev/null +++ b/tests/gnutls_ext_raw_parse.c @@ -0,0 +1,317 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" +#include "tls13/ext-parse.h" + +/* This program tests gnutls_ext_raw_parse with GNUTLS_EXT_RAW_FLAG_TLS_CLIENT_HELLO + * flag. + */ + +#define HOSTNAME "example.com" + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +static unsigned found_server_name = 0; +static unsigned found_status_req = 0; +static unsigned bare_version = 0; + +static int ext_callback(void *ctx, unsigned tls_id, const unsigned char *data, unsigned size) +{ + if (tls_id == 0) { /* server name */ + /* very interesting extension, 4 bytes of sizes + * and 1 byte of type. */ + unsigned esize = (data[0] << 8) | data[1]; + assert(esize == strlen(HOSTNAME)+3); + + size -= 2; + data += 2; + + assert(data[0] == 0); + data++; + size--; + + esize = (data[0] << 8) | data[1]; + + assert(esize == strlen(HOSTNAME)); + data += 2; + size -= 2; + + assert(memcmp(data, HOSTNAME, strlen(HOSTNAME)) == 0); + found_server_name = 1; + } else if (tls_id == 5) { + found_status_req = 1; + } else { + if (debug) + success("found extension: %u\n", tls_id); + } + return 0; +} + +static int handshake_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + int ret; + + if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && post) { + if (bare_version) { + ret = gnutls_ext_raw_parse(NULL, ext_callback, msg, GNUTLS_EXT_RAW_FLAG_TLS_CLIENT_HELLO); + } else { + unsigned pos; + gnutls_datum_t mmsg; + assert(msg->size >= HANDSHAKE_SESSION_ID_POS); + pos = HANDSHAKE_SESSION_ID_POS; + SKIP8(pos, msg->size); + SKIP16(pos, msg->size); + SKIP8(pos, msg->size); + + mmsg.data = &msg->data[pos]; + mmsg.size = msg->size - pos; + ret = gnutls_ext_raw_parse(NULL, ext_callback, &mmsg, 0); + } + assert(ret >= 0); + } + return 0; +} + +static void client(int fd) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* Use default priorities */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + assert(gnutls_server_name_set(session, GNUTLS_NAME_DNS, HOSTNAME, strlen(HOSTNAME))>=0); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret == GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM) { + /* success */ + goto end; + } + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + + +static void server(int fd) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + gnutls_handshake_set_timeout(session, 20 * 1000); + + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_CLIENT_HELLO, + GNUTLS_HOOK_POST, + handshake_callback); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + /* failure is expected here */ + goto end; + } + + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + assert(found_server_name != 0); + assert(found_status_req != 0); + + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void ch_handler(int sig) +{ + return; +} + +static void start(unsigned val) +{ + int fd[2]; + int ret, status = 0; + pid_t child; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + bare_version = val; + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0]); + waitpid(child, &status, 0); + check_wait_status(status); + } else { + close(fd[0]); + client(fd[1]); + exit(0); + } + + return; +} + +void doit(void) +{ + start(0); + start(1); +} + +#endif /* _WIN32 */ diff --git a/tests/gnutls_ext_raw_parse_dtls.c b/tests/gnutls_ext_raw_parse_dtls.c new file mode 100644 index 0000000000..8af863b7f5 --- /dev/null +++ b/tests/gnutls_ext_raw_parse_dtls.c @@ -0,0 +1,292 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" +#include "tls13/ext-parse.h" + +/* This program tests gnutls_ext_raw_parse with GNUTLS_EXT_RAW_FLAG_TLS_CLIENT_HELLO + * flag. + */ + +#define HOSTNAME "example.com" + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +static unsigned found_server_name = 0; +static unsigned found_status_req = 0; + +static int ext_callback(void *ctx, unsigned tls_id, const unsigned char *data, unsigned size) +{ + if (tls_id == 0) { /* server name */ + /* very interesting extension, 4 bytes of sizes + * and 1 byte of type. */ + unsigned esize = (data[0] << 8) | data[1]; + assert(esize == strlen(HOSTNAME)+3); + + size -= 2; + data += 2; + + assert(data[0] == 0); + data++; + size--; + + esize = (data[0] << 8) | data[1]; + + assert(esize == strlen(HOSTNAME)); + data += 2; + size -= 2; + + assert(memcmp(data, HOSTNAME, strlen(HOSTNAME)) == 0); + found_server_name = 1; + } else if (tls_id == 5) { + found_status_req = 1; + } else { + if (debug) + success("found extension: %u\n", tls_id); + } + return 0; +} + +static int handshake_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + int ret; + + if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && post) { + ret = gnutls_ext_raw_parse(NULL, ext_callback, msg, GNUTLS_EXT_RAW_FLAG_DTLS_CLIENT_HELLO); + + assert(ret >= 0); + } + return 0; +} + +static void client(int fd) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_DATAGRAM); + gnutls_handshake_set_timeout(session, 20 * 1000); + + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-DTLS1.2", NULL)>= 0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + assert(gnutls_server_name_set(session, GNUTLS_NAME_DNS, HOSTNAME, strlen(HOSTNAME))>=0); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret == GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM) { + /* success */ + goto end; + } + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + + +static void server(int fd) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER|GNUTLS_DATAGRAM); + gnutls_handshake_set_timeout(session, 20 * 1000); + + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_CLIENT_HELLO, + GNUTLS_HOOK_POST, + handshake_callback); + + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-DTLS1.2", NULL)>= 0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + /* failure is expected here */ + goto end; + } + + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + assert(found_server_name != 0); + assert(found_status_req != 0); + + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void ch_handler(int sig) +{ + return; +} + +void doit(void) +{ + int fd[2]; + int ret, status = 0; + pid_t child; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0]); + waitpid(child, &status, 0); + check_wait_status(status); + } else { + close(fd[0]); + client(fd[1]); + exit(0); + } + + return; +} + + +#endif /* _WIN32 */ diff --git a/tests/gnutls_hmac_fast.c b/tests/gnutls_hmac_fast.c new file mode 100644 index 0000000000..67b10d6283 --- /dev/null +++ b/tests/gnutls_hmac_fast.c @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2004-2012 Free Software Foundation, Inc. + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include "utils.h" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +void doit(void) +{ + unsigned char digest[20]; + int err; + + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + err = + gnutls_hmac_fast(GNUTLS_MAC_SHA1, "keykeykey", 9, "abcdefgh", + 8, digest); + if (err < 0) + fail("gnutls_hmac_fast(SHA1) failed: %d\n", err); + else { + if (memcmp(digest, "\x58\x93\x7a\x58\xfe\xea\x82\xf8" + "\x0e\x64\x62\x01\x40\x2b\x2c\xed\x5d\x54\xc1\xfa", + 20) == 0) { + if (debug) + success("gnutls_hmac_fast(SHA1) OK\n"); + } else { + hexprint(digest, 20); + fail("gnutls_hmac_fast(SHA1) failure\n"); + } + } + + /* enable MD5 usage */ + if (gnutls_fips140_mode_enabled()) { + gnutls_fips140_set_mode(GNUTLS_FIPS140_LOG, 0); + } + + err = + gnutls_hmac_fast(GNUTLS_MAC_MD5, "keykeykey", 9, "abcdefgh", 8, + digest); + if (err < 0) + fail("gnutls_hmac_fast(MD5) failed: %d\n", err); + else { + if (memcmp(digest, "\x3c\xb0\x9d\x83\x28\x01\xef\xc0" + "\x7b\xb3\xaf\x42\x69\xe5\x93\x9a", 16) == 0) { + if (debug) + success("gnutls_hmac_fast(MD5) OK\n"); + } else { + hexprint(digest, 16); + fail("gnutls_hmac_fast(MD5) failure\n"); + } + } + + err = + gnutls_hmac_fast(GNUTLS_MAC_AES_GMAC_128, "keykeykeykeykeyk", 16, "abcdefghabc", 8, + digest); + if (err >= 0) + fail("gnutls_hmac_fast(GMAC-128) succeeded unexpectedly: %d\n", err); + else if (err != GNUTLS_E_INVALID_REQUEST) + fail("gnutls_hmac_fast(GMAC-128) failure: %d\n", err); + else if (debug) + success("gnutls_hmac_fast(GMAC-128) OK\n"); + + err = + gnutls_hmac_fast(GNUTLS_MAC_AES_GMAC_192, "keykeykeykeykeykeykeykey", 24, + "abcdefghabc", 8, + digest); + if (err >= 0) + fail("gnutls_hmac_fast(GMAC-192) succeeded unexpectedly: %d\n", err); + else if (err != GNUTLS_E_INVALID_REQUEST) + fail("gnutls_hmac_fast(GMAC-192) failure: %d\n", err); + else if (debug) + success("gnutls_hmac_fast(GMAC-192) OK\n"); + + err = + gnutls_hmac_fast(GNUTLS_MAC_AES_GMAC_256, "keykeykeykeykeykeykeykeykeykeyke", 32, + "abcdefghabc", 8, + digest); + if (err >= 0) + fail("gnutls_hmac_fast(GMAC-256) succeeded unexpectedly: %d\n", err); + else if (err != GNUTLS_E_INVALID_REQUEST) + fail("gnutls_hmac_fast(GMAC-256) failure: %d\n", err); + else if (debug) + success("gnutls_hmac_fast(GMAC-256) OK\n"); + + err = + gnutls_hmac_fast(GNUTLS_MAC_UMAC_96, "keykeykeykeykeyk", 16, "abcdefghabc", 8, + digest); + if (err >= 0) + fail("gnutls_hmac_fast(UMAC-96) succeeded unexpectedly: %d\n", err); + else if (err != GNUTLS_E_INVALID_REQUEST) + fail("gnutls_hmac_fast(UMAC-96) failure: %d\n", err); + else if (debug) + success("gnutls_hmac_fast(UMAC-96) OK\n"); + + err = + gnutls_hmac_fast(GNUTLS_MAC_UMAC_128, "keykeykeykeykeyk", 16, "abcdefghabc", 8, + digest); + if (err >= 0) + fail("gnutls_hmac_fast(UMAC-128) succeeded unexpectedly: %d\n", err); + else if (err != GNUTLS_E_INVALID_REQUEST) + fail("gnutls_hmac_fast(UMAC-128) failure: %d\n", err); + else if (debug) + success("gnutls_hmac_fast(UMAC-128) OK\n"); + + gnutls_global_deinit(); +} diff --git a/tests/gnutls_ocsp_resp_list_import2.c b/tests/gnutls_ocsp_resp_list_import2.c new file mode 100644 index 0000000000..1157f6e2e6 --- /dev/null +++ b/tests/gnutls_ocsp_resp_list_import2.c @@ -0,0 +1,261 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* This tests key import for gnutls_ocsp_resp_t APIs */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include "ocsp-common.h" +#include "utils.h" + +#define testfail(fmt, ...) \ + fail("%s: "fmt, name, ##__VA_ARGS__) + +static void load_list(const char *name, const gnutls_datum_t *txt, + unsigned int nocsps, + int format, + unsigned flags, int exp_err) +{ + gnutls_ocsp_resp_t *ocsps; + unsigned int i, size; + int ret; + + ret = gnutls_ocsp_resp_list_import2(&ocsps, &size, txt, format, flags); + if (ret < 0) { + if (exp_err == ret) + return; + testfail("gnutls_x509_crt_list_import: %s\n", gnutls_strerror(ret)); + } + + for (i=0;i. + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This is a unit test of _gnutls_record_overhead. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include +#include "../lib/gnutls_int.h" + +#undef _gnutls_debug_log +#undef gnutls_assert +#undef gnutls_assert_val +#define _gnutls_debug_log printf +#define gnutls_assert() +#define gnutls_assert_val(val) val + +/* #pragma doesn't work to suppress preprocessor warnings like -Wunused-macros. + * So we just use the above defined macros here. */ +#if defined _gnutls_debug_log && defined gnutls_assert && defined gnutls_assert_val +#include "../lib/algorithms.h" +#endif + +unsigned _gnutls_record_overhead(const version_entry_st *ver, + const cipher_entry_st *cipher, + const mac_entry_st *mac, + unsigned max); + +#define OVERHEAD(v, c, m) \ + _gnutls_record_overhead(version_to_entry(v), cipher_to_entry(c), mac_to_entry(m), \ + 0) + +#define MAX_OVERHEAD(v, c, m) \ + _gnutls_record_overhead(version_to_entry(v), cipher_to_entry(c), mac_to_entry(m), \ + 1) + +static void check_aes_gcm(void **glob_state) +{ + const unsigned ov = 16+8; + /* Under AES-GCM the overhead is constant */ + assert_int_equal(OVERHEAD(GNUTLS_TLS1_2, GNUTLS_CIPHER_AES_128_GCM, GNUTLS_MAC_AEAD), ov); + assert_int_equal(MAX_OVERHEAD(GNUTLS_TLS1_2, GNUTLS_CIPHER_AES_128_GCM, GNUTLS_MAC_AEAD), ov); +} + +static void check_tls13_aes_gcm(void **glob_state) +{ + const unsigned ov = 16+1; + /* Under AES-GCM the overhead is constant */ + assert_int_equal(OVERHEAD(GNUTLS_TLS1_3, GNUTLS_CIPHER_AES_128_GCM, GNUTLS_MAC_AEAD), ov); + assert_int_equal(MAX_OVERHEAD(GNUTLS_TLS1_3, GNUTLS_CIPHER_AES_128_GCM, GNUTLS_MAC_AEAD), ov); +} + +static void check_aes_sha1_min(void **glob_state) +{ + const unsigned mac = 20; + const unsigned block = 16; + assert_int_equal(OVERHEAD(GNUTLS_TLS1_2, GNUTLS_CIPHER_AES_128_CBC, GNUTLS_MAC_SHA1), 1+mac+block); +} + +static void check_aes_sha1_max(void **glob_state) +{ + const unsigned mac = 20; + const unsigned block = 16; + + assert_int_equal(MAX_OVERHEAD(GNUTLS_TLS1_2, GNUTLS_CIPHER_AES_128_CBC, GNUTLS_MAC_SHA1), block+mac+block); +} + +int main(void) +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(check_aes_gcm), + cmocka_unit_test(check_tls13_aes_gcm), + cmocka_unit_test(check_aes_sha1_min), + cmocka_unit_test(check_aes_sha1_max) + }; + return cmocka_run_group_tests(tests, NULL, NULL); +} diff --git a/tests/gnutls_session_set_id.c b/tests/gnutls_session_set_id.c new file mode 100644 index 0000000000..b085c0a176 --- /dev/null +++ b/tests/gnutls_session_set_id.c @@ -0,0 +1,210 @@ +/* + * Copyright (C) 2018 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" + +const char *side; + +static gnutls_datum_t test_id = { (void*)"\xff\xff\xff\xff\xff\xff", 6 }; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static gnutls_datum_t dbdata = {NULL, 0}; + +static int +wrap_db_store(void *dbf, gnutls_datum_t key, gnutls_datum_t data) +{ + unsigned *try_resume = dbf; + + assert(dbdata.data == NULL); + + if (!(*try_resume)) + return 0; + + dbdata.data = gnutls_malloc(data.size); + assert(dbdata.data != NULL); + + memcpy(dbdata.data, data.data, data.size); + dbdata.size = data.size; + return 0; +} + +static gnutls_datum_t wrap_db_fetch(void *dbf, gnutls_datum_t key) +{ + unsigned *try_resume = dbf; + gnutls_datum_t r = {NULL, 0}; + + if (key.size != test_id.size || memcmp(test_id.data, key.data, test_id.size) != 0) + fail("received ID does not match the expected\n"); + + if (!(*try_resume)) + return r; + + r.data = gnutls_malloc(dbdata.size); + assert(r.data != NULL); + + memcpy(r.data, dbdata.data, dbdata.size); + r.size = dbdata.size; + + return r; +} + +static int wrap_db_delete(void *dbf, gnutls_datum_t key) +{ + return 0; +} + +static void start(const char *test, unsigned try_resume) +{ + int ret; + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + gnutls_datum_t data; + char buf[128]; + + success("%s\n", test); + reset_buffers(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&server, GNUTLS_SERVER)>=0); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + gnutls_set_default_priority(server); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + gnutls_db_set_retrieve_function(server, wrap_db_fetch); + gnutls_db_set_remove_function(server, wrap_db_delete); + gnutls_db_set_store_function(server, wrap_db_store); + gnutls_db_set_ptr(server, &try_resume); + + assert(gnutls_certificate_allocate_credentials(&clientx509cred)>=0); + assert(gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&client, GNUTLS_CLIENT)>=0); + assert(gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred)>=0); + + assert(gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL)>=0); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + memset(buf, 0, sizeof(buf)); + ret = gnutls_session_set_data(client, buf, sizeof(buf)); + if (ret != GNUTLS_E_DB_ERROR) { + fail("unexpected error: %s\n", gnutls_strerror(ret)); + } + + HANDSHAKE(client, server); + + ret = gnutls_session_get_data2(client, &data); + if (ret != 0) { + fail("unexpected error: %s\n", gnutls_strerror(ret)); + } + + gnutls_deinit(client); + gnutls_deinit(server); + + assert(gnutls_init(&server, GNUTLS_SERVER)>=0); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + gnutls_set_default_priority(server); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + gnutls_db_set_retrieve_function(server, wrap_db_fetch); + gnutls_db_set_remove_function(server, wrap_db_delete); + gnutls_db_set_store_function(server, wrap_db_store); + gnutls_db_set_ptr(server, &try_resume); + + assert(gnutls_init(&client, GNUTLS_CLIENT)>=0); + + assert(gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred)>=0); + + assert(gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL)>=0); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + memset(buf, 0, sizeof(buf)); + ret = gnutls_session_set_id(client, &test_id); + if (ret != 0) { + fail("unexpected error: %s\n", gnutls_strerror(ret)); + } + gnutls_free(data.data); + + if (try_resume) { + HANDSHAKE_EXPECT(client, server, GNUTLS_E_UNEXPECTED_PACKET, GNUTLS_E_AGAIN); + } else { + HANDSHAKE(client, server); + } + + assert(gnutls_session_resumption_requested(client) == 0); + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_free(dbdata.data); + dbdata.size = 0; +} + +void doit(void) +{ + start("functional: see if session ID is sent", 0); + start("negative: see if the expected error is seen on client side", 1); +} diff --git a/tests/gnutls_x509_crq_sign.c b/tests/gnutls_x509_crq_sign.c new file mode 100644 index 0000000000..98719d81fe --- /dev/null +++ b/tests/gnutls_x509_crq_sign.c @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +static unsigned char saved_crq_pem[] = + "-----BEGIN NEW CERTIFICATE REQUEST-----\n" + "MIIBhTCB7wIBADAAMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7ZkP18sXX\n" + "tozMxd/1iDuxyUtqDqGtIFBACIChT1yj0Phsz+Y89+wEdhMXi2SJIlvA3VN8O+18\n" + "BLuAuSi+jpvGjqClEsv1Vx6i57u3M0mf47tKrmpNaP/JEeIyjc49gAuNde/YAIGP\n" + "KAQDoCKNYQQH+rY3fSEHSdIJYWmYkKNYqQIDAQABoEYwRAYJKoZIhvcNAQkOMTcw\n" + "NTAPBgNVHRMBAf8EBTADAgEAMA8GA1UdDwEB/wQFAwMHAAAwEQYDVR0RAQH/BAcw\n" + "BYIDZm9vMA0GCSqGSIb3DQEBCwUAA4GBAK7iC1R9oKxpHuVHksT1Y8yC0PzxreJz\n" + "2d4DZKQeycaAAFHGCxVJw3t5S+/W81l0nj1z8vW5VJEsgT8loFRb1LWWlyGDUBHY\n" + "0aZ/9CLbRFGq4SenPU4dridwiwZVdXzF/NNFIMDp85qbCcw4qZlKinrKolqs3ymE\n" + "qjSnoJuZmwSQ\n" + "-----END NEW CERTIFICATE REQUEST-----\n"; + +const gnutls_datum_t saved_crq = { saved_crq_pem, sizeof(saved_crq_pem)-1 }; + +static unsigned char key_pem[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIICXAIBAAKBgQC7ZkP18sXXtozMxd/1iDuxyUtqDqGtIFBACIChT1yj0Phsz+Y8\n" + "9+wEdhMXi2SJIlvA3VN8O+18BLuAuSi+jpvGjqClEsv1Vx6i57u3M0mf47tKrmpN\n" + "aP/JEeIyjc49gAuNde/YAIGPKAQDoCKNYQQH+rY3fSEHSdIJYWmYkKNYqQIDAQAB\n" + "AoGADpmARG5CQxS+AesNkGmpauepiCz1JBF/JwnyiX6vEzUh0Ypd39SZztwrDxvF\n" + "PJjQaKVljml1zkJpIDVsqvHdyVdse8M+Qn6hw4x2p5rogdvhhIL1mdWo7jWeVJTF\n" + "RKB7zLdMPs3ySdtcIQaF9nUAQ2KJEvldkO3m/bRJFEp54k0CQQDYy+RlTmwRD6hy\n" + "7UtMjR0H3CSZJeQ8svMCxHLmOluG9H1UKk55ZBYfRTsXniqUkJBZ5wuV1L+pR9EK\n" + "ca89a+1VAkEA3UmBelwEv2u9cAU1QjKjmwju1JgXbrjEohK+3B5y0ESEXPAwNQT9\n" + "TrDM1m9AyxYTWLxX93dI5QwNFJtmbtjeBQJARSCWXhsoaDRG8QZrCSjBxfzTCqZD\n" + "ZXtl807ymCipgJm60LiAt0JLr4LiucAsMZz6+j+quQbSakbFCACB8SLV1QJBAKZQ\n" + "YKf+EPNtnmta/rRKKvySsi3GQZZN+Dt3q0r094XgeTsAqrqujVNfPhTMeP4qEVBX\n" + "/iVX2cmMTSh3w3z8MaECQEp0XJWDVKOwcTW6Ajp9SowtmiZ3YDYo1LF9igb4iaLv\n" + "sWZGfbnU3ryjvkb6YuFjgtzbZDZHWQCo8/cOtOBmPdk=\n" + "-----END RSA PRIVATE KEY-----\n"; +const gnutls_datum_t key = { key_pem, sizeof(key_pem)-1 }; + +static time_t mytime(time_t * t) +{ + time_t then = 1207000800; + + if (t) + *t = then; + + return then; +} + +static gnutls_x509_crq_t generate_crq(void) +{ + gnutls_x509_crq_t crq; + gnutls_x509_privkey_t pkey; + int ret; + size_t s = 0; + + ret = gnutls_x509_privkey_init(&pkey); + if (ret != 0) + fail("gnutls_x509_privkey_init\n"); + + ret = gnutls_x509_privkey_import(pkey, &key, GNUTLS_X509_FMT_PEM); + if (ret != 0) + fail("gnutls_x509_privkey_import\n"); + + ret = gnutls_x509_crq_init(&crq); + if (ret != 0) + fail("gnutls_x509_crq_init\n"); + + ret = gnutls_x509_crq_set_version(crq, 0); + if (ret != 0) + fail("gnutls_x509_crq_set_version\n"); + + ret = gnutls_x509_crq_set_key(crq, pkey); + if (ret != 0) + fail("gnutls_x509_crq_set_key\n"); + + s = 0; + ret = gnutls_x509_crq_get_extension_info(crq, 0, NULL, &s, NULL); + if (ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + fail("gnutls_x509_crq_get_extension_info\n"); + + ret = gnutls_x509_crq_set_basic_constraints(crq, 0, 0); + if (ret != 0) + fail("gnutls_x509_crq_set_basic_constraints %d\n", ret); + + ret = gnutls_x509_crq_set_key_usage(crq, 0); + if (ret != 0) + fail("gnutls_x509_crq_set_key_usage %d\n", ret); + + ret = gnutls_x509_crq_set_subject_alt_name(crq, GNUTLS_SAN_DNSNAME, + "foo", 3, 1); + if (ret != 0) + fail("gnutls_x509_crq_set_subject_alt_name\n"); + + ret = gnutls_x509_crq_sign(crq, pkey); + if (ret < 0) + fail("gnutls_x509_crq_sign: %s\n", gnutls_strerror(ret)); + + gnutls_x509_privkey_deinit(pkey); + + return crq; +} + +static void verify_crq(const gnutls_datum_t *pem) +{ + gnutls_x509_crq_t crq; + + assert(gnutls_x509_crq_init(&crq) >= 0); + assert(gnutls_x509_crq_import(crq, pem, GNUTLS_X509_FMT_PEM)>=0); + assert(gnutls_x509_crq_verify(crq, 0) >= 0); + gnutls_x509_crq_deinit(crq); +} + +void doit(void) +{ + gnutls_datum_t out; + gnutls_x509_crq_t crq; + + gnutls_global_set_time_function(mytime); + + crq = generate_crq(); + + assert(gnutls_x509_crq_export2(crq, GNUTLS_X509_FMT_PEM, &out) >= 0); + + if (debug) + printf("%s\n", out.data); + + assert(out.size == saved_crq.size); + assert(memcmp(out.data, saved_crq.data, out.size)==0); + + verify_crq(&out); + + gnutls_free(out.data); + gnutls_x509_crq_deinit(crq); +} diff --git a/tests/gnutls_x509_crt_list_import.c b/tests/gnutls_x509_crt_list_import.c new file mode 100644 index 0000000000..51fdfcb9f4 --- /dev/null +++ b/tests/gnutls_x509_crt_list_import.c @@ -0,0 +1,368 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* This tests key import for gnutls_x509_privkey_t APIs */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "cert-common.h" +#include "utils.h" + +#define testfail(fmt, ...) \ + fail("%s: "fmt, name, ##__VA_ARGS__) + +#define MAX_CERTS 8 + +static void load_list(const char *name, const gnutls_datum_t *txt, + unsigned int ncerts, + unsigned int max1, + unsigned int max2, + unsigned flags, int exp_err) +{ + gnutls_x509_crt_t certs[MAX_CERTS]; + unsigned int max, i; + unsigned retried = 0; + int ret; + + assert(max1<=MAX_CERTS); + assert(max2<=MAX_CERTS); + + if (max1) + max = max1; + else + max = MAX_CERTS; + + retry: + ret = gnutls_x509_crt_list_import(certs, &max, txt, GNUTLS_X509_FMT_PEM, flags); + if (ret < 0) { + if (retried == 0 && ret == GNUTLS_E_SHORT_MEMORY_BUFFER && max2 && max2 != max) { + max = max2; + retried = 1; + goto retry; + } + if (exp_err == ret) + return; + testfail("gnutls_x509_crt_list_import: %s\n", gnutls_strerror(ret)); + } + + for (i=0;i +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +#include "cert-common.h" + +static unsigned char saved_crt_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIICIzCCAYygAwIBAgIDChEAMA0GCSqGSIb3DQEBCwUAMCsxDjAMBgNVBAMTBW5p\n" + "a29zMRkwFwYDVQQKExBub25lIHRvLCBtZW50aW9uMCAXDTA4MDMzMTIyMDAwMFoY\n" + "Dzk5OTkxMjMxMjM1OTU5WjArMQ4wDAYDVQQDEwVuaWtvczEZMBcGA1UEChMQbm9u\n" + "ZSB0bywgbWVudGlvbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAu2ZD9fLF\n" + "17aMzMXf9Yg7sclLag6hrSBQQAiAoU9co9D4bM/mPPfsBHYTF4tkiSJbwN1TfDvt\n" + "fAS7gLkovo6bxo6gpRLL9Vceoue7tzNJn+O7Sq5qTWj/yRHiMo3OPYALjXXv2ACB\n" + "jygEA6AijWEEB/q2N30hB0nSCWFpmJCjWKkCAwEAAaNTMFEwDAYDVR0TAQH/BAIw\n" + "ADAPBgNVHQ8BAf8EBQMDB4AAMA4GA1UdEQQHMAWCA2FwYTAgBgNVHSUBAf8EFjAU\n" + "BggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADgYEAs98nzI0+UM8n\n" + "Xy5Nu9iAJG+d1Ukh8lXheoVjYs3Rd8DZcBPZLcMr8SS3unjpsAhLkvn0qm0+PYBT\n" + "9gasQVZWs+PDSrn+Z/8L/WKRj+Nhli1Eq2ARnRzUY3Qq+ff1Tvll2a3DM0KoKm0F\n" + "d3TOPG5tr3bBVXaDQ4K7bQCiTC6Skew=\n" + "-----END CERTIFICATE-----\n"; + +const gnutls_datum_t saved_crt = { saved_crt_pem, sizeof(saved_crt_pem)-1 }; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +static time_t mytime(time_t * t) +{ + time_t then = 1207000800; + + if (t) + *t = then; + + return then; +} + +void doit(void) +{ + gnutls_x509_privkey_t pkey; + gnutls_x509_crt_t crt; + gnutls_x509_crt_t crt2; + const char *err = NULL; + gnutls_datum_t out; + size_t s = 0; + unsigned int status; + int ret; + + ret = global_init(); + if (ret < 0) + fail("global_init\n"); + + gnutls_global_set_time_function(mytime); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + ret = gnutls_x509_crt_init(&crt); + if (ret != 0) + fail("gnutls_x509_crt_init\n"); + + ret = gnutls_x509_crt_init(&crt2); + if (ret != 0) + fail("gnutls_x509_crt_init\n"); + + ret = gnutls_x509_crt_import(crt2, &server_ecc_cert, GNUTLS_X509_FMT_PEM); + if (ret != 0) + fail("gnutls_x509_crt_import\n"); + + ret = gnutls_x509_privkey_init(&pkey); + if (ret != 0) + fail("gnutls_x509_privkey_init\n"); + + ret = gnutls_x509_privkey_import(pkey, &key_dat, GNUTLS_X509_FMT_PEM); + if (ret != 0) + fail("gnutls_x509_privkey_import\n"); + + /* Setup CRT */ + + ret = gnutls_x509_crt_set_version(crt, 3); + if (ret != 0) + fail("gnutls_x509_crt_set_version\n"); + + ret = gnutls_x509_crt_set_serial(crt, "\x0a\x11\x00", 3); + if (ret != 0) + fail("gnutls_x509_crt_set_serial\n"); + + ret = gnutls_x509_crt_set_expiration_time(crt, -1); + if (ret != 0) + fail("error\n"); + + ret = gnutls_x509_crt_set_activation_time(crt, mytime(0)); + if (ret != 0) + fail("error\n"); + + ret = gnutls_x509_crt_set_key(crt, pkey); + if (ret != 0) + fail("gnutls_x509_crt_set_key\n"); + + ret = gnutls_x509_crt_set_basic_constraints(crt, 0, -1); + if (ret < 0) { + fail("error\n"); + } + + ret = gnutls_x509_crt_set_key_usage(crt, GNUTLS_KEY_DIGITAL_SIGNATURE); + if (ret != 0) + fail("gnutls_x509_crt_set_key_usage %d\n", ret); + + ret = gnutls_x509_crt_set_dn(crt, "o = none to\\, mention,cn = nikos", &err); + if (ret < 0) { + fail("gnutls_x509_crt_set_dn: %s, %s\n", gnutls_strerror(ret), err); + } + + + ret = gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_DNSNAME, + "foo", 3, 1); + if (ret != 0) + fail("gnutls_x509_crt_set_subject_alt_name\n"); + + ret = gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_RFC822NAME, + "foo@bar.org", strlen("foo@bar.org"), 1); + if (ret != 0) + fail("gnutls_x509_crt_set_subject_alt_name\n"); + + + ret = gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_IPADDRESS, + "\xc1\x5c\x96\x3", 4, 1); + if (ret != 0) + fail("gnutls_x509_crt_set_subject_alt_name\n"); + + ret = gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_IPADDRESS, + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", 16, 1); + if (ret != 0) + fail("gnutls_x509_crt_set_subject_alt_name\n"); + + ret = gnutls_x509_crt_set_subject_alt_name(crt, GNUTLS_SAN_DNSNAME, + "apa", 3, 0); + if (ret != 0) + fail("gnutls_x509_crt_set_subject_alt_name\n"); + + s = 0; + ret = gnutls_x509_crt_get_key_purpose_oid(crt, 0, NULL, &s, NULL); + if (ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + fail("gnutls_x509_crt_get_key_purpose_oid %d\n", ret); + + s = 0; + ret = + gnutls_x509_crt_set_key_purpose_oid(crt, + GNUTLS_KP_TLS_WWW_SERVER, + 0); + if (ret != 0) + fail("gnutls_x509_crt_set_key_purpose_oid %d\n", ret); + + s = 0; + ret = gnutls_x509_crt_get_key_purpose_oid(crt, 0, NULL, &s, NULL); + if (ret != GNUTLS_E_SHORT_MEMORY_BUFFER) + fail("gnutls_x509_crt_get_key_purpose_oid %d\n", ret); + + s = 0; + ret = + gnutls_x509_crt_set_key_purpose_oid(crt, + GNUTLS_KP_TLS_WWW_CLIENT, + 1); + if (ret != 0) + fail("gnutls_x509_crt_set_key_purpose_oid2 %d\n", ret); + + /* in the end this will be ignored as the issuer will be set + * by gnutls_x509_crt_sign2() */ + ret = gnutls_x509_crt_set_issuer_dn(crt, "cn = my CA, o = big\\, and one", &err); + if (ret < 0) { + fail("gnutls_x509_crt_set_issuer_dn: %s, %s\n", gnutls_strerror(ret), err); + } + + /* Sign and finalize the certificate */ + ret = gnutls_x509_crt_sign(crt, crt, pkey); + if (ret < 0) + fail("gnutls_x509_crt_sign2: %s\n", gnutls_strerror(ret)); + + + ret = gnutls_x509_crt_print(crt, GNUTLS_CRT_PRINT_FULL, &out); + if (ret != 0) + fail("gnutls_x509_crt_print\n"); + if (debug) + printf("crt: %.*s\n", out.size, out.data); + gnutls_free(out.data); + + ret = gnutls_x509_crt_get_raw_dn(crt, &out); + if (ret < 0 || out.size == 0) + fail("gnutls_x509_crt_get_raw_dn: %s\n", gnutls_strerror(ret)); + + if (out.size != 45 || + memcmp(out.data, "\x30\x2b\x31\x0e\x30\x0c\x06\x03\x55\x04\x03\x13\x05\x6e\x69\x6b\x6f\x73\x31\x19\x30\x17\x06\x03\x55\x04\x0a\x13\x10\x6e\x6f\x6e\x65\x20\x74\x6f\x2c\x20\x6d\x65\x6e\x74\x69\x6f\x6e", 45) != 0) { + fail("DN comparison failed\n"); + } + gnutls_free(out.data); + + ret = gnutls_x509_crt_equals(crt, crt); + if (ret == 0) { + fail("equality test failed\n"); + } + + ret = gnutls_x509_crt_equals(crt, crt2); + if (ret != 0) { + fail("equality test failed\n"); + } + + ret = gnutls_x509_crt_verify(crt, &crt, 1, 0, &status); + if (ret < 0) { + fail("verification failed\n"); + } + + if (status != 0) { + fail("verification status failed\n"); + } + + assert(gnutls_x509_crt_export2(crt, GNUTLS_X509_FMT_PEM, &out) >= 0); + + if (debug) + fprintf(stderr, "%s\n", out.data); + assert(out.size == saved_crt.size); + assert(memcmp(out.data, saved_crt.data, out.size)==0); + + gnutls_free(out.data); + + gnutls_x509_crt_deinit(crt); + gnutls_x509_crt_deinit(crt2); + gnutls_x509_privkey_deinit(pkey); + + gnutls_global_deinit(); +} diff --git a/tests/gnutls_x509_privkey_import.c b/tests/gnutls_x509_privkey_import.c new file mode 100644 index 0000000000..ae8cc068d6 --- /dev/null +++ b/tests/gnutls_x509_privkey_import.c @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* This tests key import for gnutls_x509_privkey_t APIs */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "cert-common.h" +#include "utils.h" + +#define testfail(fmt, ...) \ + fail("%s: "fmt, name, ##__VA_ARGS__) + +const gnutls_datum_t raw_data = { + (void *) "hello there", + 11 +}; + +static int sign_verify_data(gnutls_x509_privkey_t pkey, gnutls_sign_algorithm_t algo) +{ + int ret; + gnutls_privkey_t privkey; + gnutls_pubkey_t pubkey = NULL; + gnutls_datum_t signature; + + /* sign arbitrary data */ + assert(gnutls_privkey_init(&privkey) >= 0); + + ret = gnutls_privkey_import_x509(privkey, pkey, 0); + if (ret < 0) + fail("gnutls_privkey_import_x509\n"); + + ret = gnutls_privkey_sign_data2(privkey, algo, 0, + &raw_data, &signature); + if (ret < 0) { + ret = -1; + goto cleanup; + } + + /* verify data */ + assert(gnutls_pubkey_init(&pubkey) >= 0); + + ret = gnutls_pubkey_import_privkey(pubkey, privkey, 0, 0); + if (ret < 0) + fail("gnutls_pubkey_import_privkey\n"); + + ret = gnutls_pubkey_verify_data2(pubkey, algo, + GNUTLS_VERIFY_ALLOW_BROKEN, &raw_data, &signature); + if (ret < 0) { + ret = -1; + goto cleanup; + } + + ret = 0; + cleanup: + if (pubkey) + gnutls_pubkey_deinit(pubkey); + gnutls_privkey_deinit(privkey); + gnutls_free(signature.data); + + return ret; +} + +static void load_privkey(const char *name, const gnutls_datum_t *txtkey, gnutls_pk_algorithm_t pk, + gnutls_sign_algorithm_t sig, int exp_key_err) +{ + gnutls_x509_privkey_t tmp; + int ret; + + ret = gnutls_x509_privkey_init(&tmp); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = gnutls_x509_privkey_import(tmp, txtkey, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + if (exp_key_err) { + testfail("did not fail in key import, although expected\n"); + } + + testfail("gnutls_privkey_import: %s\n", gnutls_strerror(ret)); + } + + if (gnutls_x509_privkey_get_pk_algorithm(tmp) != (int)pk) { + testfail("pk algorithm doesn't match!\n"); + } + + ret = gnutls_x509_privkey_verify_params(tmp); + if (ret < 0) + testfail("gnutls_privkey_verify_params: %s\n", gnutls_strerror(ret)); + + sign_verify_data(tmp, sig); + + gnutls_x509_privkey_deinit(tmp); + + return; +} + +static void load_privkey_in_der(const char *name, const gnutls_datum_t *txtkey, gnutls_pk_algorithm_t pk, + gnutls_sign_algorithm_t sig, int exp_key_err) +{ + gnutls_x509_privkey_t tmp; + gnutls_datum_t der; + int ret; + + ret = gnutls_x509_privkey_init(&tmp); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = gnutls_pem_base64_decode2(NULL, txtkey, &der); + if (ret < 0 || der.size == 0) { + testfail("could not convert key to DER form: %s\n", gnutls_strerror(ret)); + } + + ret = gnutls_x509_privkey_import(tmp, &der, GNUTLS_X509_FMT_DER); + gnutls_free(der.data); + + if (ret < 0) { + if (exp_key_err) { + testfail("did not fail in key import, although expected\n"); + } + + testfail("gnutls_privkey_import: %s\n", gnutls_strerror(ret)); + } + + if (gnutls_x509_privkey_get_pk_algorithm(tmp) != (int)pk) { + testfail("pk algorithm doesn't match!\n"); + } + + ret = gnutls_x509_privkey_verify_params(tmp); + if (ret < 0) + testfail("gnutls_privkey_verify_params: %s\n", gnutls_strerror(ret)); + + sign_verify_data(tmp, sig); + + gnutls_x509_privkey_deinit(tmp); + + return; +} + +typedef struct test_st { + const char *name; + gnutls_pk_algorithm_t pk; + gnutls_sign_algorithm_t sig; + const gnutls_datum_t *key; + int exp_key_err; +} test_st; + +static const test_st tests[] = { + {.name = "ecc key", + .pk = GNUTLS_PK_ECDSA, + .sig = GNUTLS_SIGN_ECDSA_SHA256, + .key = &server_ca3_ecc_key, + }, + {.name = "rsa-sign key", + .pk = GNUTLS_PK_RSA, + .sig = GNUTLS_SIGN_RSA_SHA384, + .key = &server_ca3_key, + }, + {.name = "rsa-pss-sign key (PKCS#8)", + .pk = GNUTLS_PK_RSA_PSS, + .sig = GNUTLS_SIGN_RSA_PSS_SHA256, + .key = &server_ca3_rsa_pss2_key, + }, + {.name = "dsa key", + .pk = GNUTLS_PK_DSA, + .sig = GNUTLS_SIGN_DSA_SHA1, + .key = &dsa_key, + }, + {.name = "ed25519 key (PKCS#8)", + .pk = GNUTLS_PK_EDDSA_ED25519, + .sig = GNUTLS_SIGN_EDDSA_ED25519, + .key = &server_ca3_eddsa_key, + } +}; + +void doit(void) +{ + unsigned int i; + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#if !defined(_WIN32) +#include +#include +#endif +#include +#include +#include + +#include "utils.h" + +/* This test checks whether a large certificate packet can be sent by + * server and received by client. */ +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static void client(int sd, const char *prio) +{ + int ret; + gnutls_session_t session; + char buf[1]; + gnutls_certificate_credentials_t clientx509cred; + + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "client"; + + assert(gnutls_certificate_allocate_credentials(&clientx509cred)>=0); + + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); + + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 60 * 1000); + + do { + ret = gnutls_handshake(session); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fail("client: Handshake failed\n"); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + do { + ret = gnutls_record_recv(session, buf, 1); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + assert(ret == 0); + + close(sd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} + +static unsigned char server_key_pem[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIIEowIBAAKCAQEAwJo7662RNezA254WRsXlbuzkPV5eNX7pX5Pj66T8/RKfz7rL\n" + "GpKs4fNxhhIMSUDjy2KbEQXPUH9MWROgU8V//CfcnagLYCHtniqRE+eXv0fCLwWU\n" + "SrA8n0qCBj94/NMA4kSmHf6dE5YdjDSpukyza5IshAuxZ32MDevE3JqMjvnZ5vY7\n" + "drJSfal0V5gof3/7J41ZVxl+WJph50e2pY1E27/hY8q5yQ3DXnE5kTQjX664ozQ8\n" + "UPtqGfkr4YjYe4e6PUWAjU27mQng0O0K+/w8gg6xBxN/AH3U7dg5/cY5IKDsN+Iq\n" + "4UrcCgXWjhosv9IlIXqzK7IBMMphPmRMCLMH2QIDAQABAoIBAGpOdxZdZdH6zHQr\n" + "rKYBouJ39H5+8MbcNtmfWmT9WvogZn8U3ffbz3qjkRxsJ8XjABiJY4egyk3nBXAB\n" + "KjQyxbKbGeUXFLhJ4cq0OgFfid11MRQdIz2aSsutJ1llfVUm7cz2ES5rE6305Hg3\n" + "tRr0LPAJ7XIwtgmmPUCNysnsr/pVrmPLfAnl/CfbLF2v/SfpbSpkgUTrZCNUMC44\n" + "929K4c7cFEM4SP6pUad6MipPzY/SmxZ9yhX3MsROcLp+XLCOOJhhkqoB6LWiess2\n" + "d7odweFRZ0Q0gBD/9EMMy3J5iUwfasf8b5n7z8AgPg9CeB+p/As2/RhRPXnwlS0A\n" + "2KrxWQECgYEA0wM+5fJeL91s19vozCqi3mKVXTv68aL9iQJQNJc4UQm+yu7JvMn9\n" + "koPri74QUpYkmyttaJsGNc90Oj54rSsR/cmEFJKgHOEAYSLeVetyO2XNoQvKdyB9\n" + "UVof6joMLxQ368YCahfz4ogHTQqpzN0BD2TTnKXwCXQDikN/EBb4fHkCgYEA6aov\n" + "8XVIVlxUY4VB/9PQ03OwxTLi+zTJMFJvNJozkat6MLJjAv2zxMt2kmlb0xx3wftD\n" + "VJKHIQCeZmU8qWEZS0G58OPg+TPvQPqdnZmRz3bGfW6F++IDAqV4DEhQ+zXQL8Js\n" + "j9+ocre+s0zXq1HkHgemBGOHy5/jN9cXnH3XTmECgYATRFiZ5mdzN2SY0RuQiNQW\n" + "OiopOTDQn3FG8U8hfi1GOP2Syfrhog/lMOZw/AnBgLQW9wAmbQFEKI0URGAAb85U\n" + "vfGxbzHvcRv3wpdKgRUNF16PNeRmvDC1HOWNHX+/TLlObeYKieVa6dDA2Bho/ET8\n" + "gthPlVc1hcJM/Zy8e1x1AQKBgQCuLDiugGDaVtpkkIlAu8/WPk9Ovv6oh5FMHrZb\n" + "/HFiLPLY56+cJCZjE9Kfkj9rHrY59yQaH1rwg7iO1PmhvAoRqb2DTSl+OHMn+WeR\n" + "eU5R2dRc3QysU60wxMy2QxVyG4vCfedUW0ABuutAVZARWOp0Y/khHluzscu57O/h\n" + "q3/ZIQKBgEXHmOjftWrkWV+/zfZT64k2Z1g7s3dpXW/SFK9jPrt6oqI1GNkYz6Ds\n" + "O1dUiPsNXDCLytUtvYrvrT3rJaPjJDRU2HrN/cYdxXgf6HSEr3Cdcpqyp/5rOOxD\n" + "ALEix6R4MZlsQV8FfgWjvTAET7NtY303JrCdFPqIigwl/PFGPLiB\n" + "-----END RSA PRIVATE KEY-----\n"; + +static void server(int sd, const char *prio) +{ + gnutls_certificate_credentials_t serverx509cred; + const gnutls_datum_t key = { server_key_pem, + sizeof(server_key_pem)-1 + }; + int ret; + gnutls_session_t session; + gnutls_datum_t cert; + const char *src = getenv("srcdir"); + char cert_path[256]; + + if (src == NULL) + src = "."; + + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "server"; + + snprintf(cert_path, sizeof(cert_path), "%s/data/large-cert.pem", src); + + assert(gnutls_load_file(cert_path, &cert)>=0); + + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &cert, &key, + GNUTLS_X509_FMT_PEM)>=0); + + gnutls_free(cert.data); + + assert(gnutls_init(&session, GNUTLS_SERVER)>=0); + + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 60 * 1000); + + do { + ret = gnutls_handshake(session); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + close(sd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + return; + } + if (debug) + success("server: Handshake was completed\n"); + + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(serverx509cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static +void start(const char *name, const char *prio) +{ + pid_t child; + int sockets[2]; + int err; + + success("testing %s\n", name); + + signal(SIGPIPE, SIG_IGN); + signal(SIGCHLD, SIG_IGN); + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status = 0; + /* parent */ + close(sockets[0]); + client(sockets[1], prio); + wait(&status); + check_wait_status(status); + } else { + close(sockets[1]); + server(sockets[0], prio); + exit(0); + } +} + +void doit(void) +{ + start("tls1.2", "NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("tls1.3", "NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("default", "NORMAL"); +} + +#endif /* _WIN32 */ diff --git a/tests/handshake-large-packet.c b/tests/handshake-large-packet.c index 18f72be99b..a264b32577 100644 --- a/tests/handshake-large-packet.c +++ b/tests/handshake-large-packet.c @@ -46,6 +46,7 @@ int main(int argc, char **argv) #endif #include #include +#include #include "utils.h" #include "cert-common.h" @@ -109,7 +110,7 @@ static int ext_send_server_params(gnutls_session_t session, gnutls_buffer_t extd return MAX_SIZE; } -static void client(int sd) +static void client(int sd, const char *prio) { int ret; gnutls_session_t session; @@ -129,8 +130,7 @@ static void client(int sd) gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); /* put the anonymous credentials to the current session */ @@ -140,11 +140,11 @@ static void client(int sd) gnutls_transport_set_int(session, sd); gnutls_handshake_set_timeout(session, 20 * 1000); - gnutls_ext_register("ext_client1", TLSEXT_TYPE1, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL); - gnutls_ext_register("ext_client2", TLSEXT_TYPE2, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL); - gnutls_ext_register("ext_client3", TLSEXT_TYPE3, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL); - gnutls_ext_register("ext_client4", TLSEXT_TYPE4, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL); - gnutls_ext_register("ext_client5", TLSEXT_TYPE5, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL); + gnutls_session_ext_register(session, "ext_client1", TLSEXT_TYPE1, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL, 0); + gnutls_session_ext_register(session, "ext_client2", TLSEXT_TYPE2, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL, 0); + gnutls_session_ext_register(session, "ext_client3", TLSEXT_TYPE3, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL, 0); + gnutls_session_ext_register(session, "ext_client4", TLSEXT_TYPE4, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL, 0); + gnutls_session_ext_register(session, "ext_client5", TLSEXT_TYPE5, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL, 0); /* Perform the TLS handshake */ @@ -176,7 +176,7 @@ static void client(int sd) gnutls_global_deinit(); } -static void server(int sd) +static void server(int sd, const char *prio) { gnutls_certificate_credentials_t serverx509cred; int ret; @@ -201,17 +201,16 @@ static void server(int sd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_ext_register("ext_server1", TLSEXT_TYPE1, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL); - gnutls_ext_register("ext_server2", TLSEXT_TYPE2, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL); - gnutls_ext_register("ext_server3", TLSEXT_TYPE3, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL); - gnutls_ext_register("ext_server4", TLSEXT_TYPE4, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL); - gnutls_ext_register("ext_server5", TLSEXT_TYPE5, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL); + gnutls_session_ext_register(session, "ext_server1", TLSEXT_TYPE1, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL, 0); + gnutls_session_ext_register(session, "ext_server2", TLSEXT_TYPE2, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL, 0); + gnutls_session_ext_register(session, "ext_server3", TLSEXT_TYPE3, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL, 0); + gnutls_session_ext_register(session, "ext_server4", TLSEXT_TYPE4, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL, 0); + gnutls_session_ext_register(session, "ext_server5", TLSEXT_TYPE5, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL, 0); gnutls_transport_set_int(session, sd); gnutls_handshake_set_timeout(session, 20 * 1000); @@ -248,13 +247,16 @@ static void server(int sd) success("server: finished\n"); } -void doit(void) +static +void start(const char *prio) { pid_t child; int sockets[2]; int err; signal(SIGPIPE, SIG_IGN); + TLSEXT_TYPE_server_sent = 0; + TLSEXT_TYPE_client_received = 0; err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); if (err == -1) { @@ -274,12 +276,22 @@ void doit(void) int status; /* parent */ close(sockets[0]); - client(sockets[1]); + client(sockets[1], prio); wait(&status); + check_wait_status(status); } else { close(sockets[1]); - server(sockets[0]); + server(sockets[0], prio); + exit(0); } } +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.1"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); +} + #endif /* _WIN32 */ diff --git a/tests/handshake-timeout.c b/tests/handshake-timeout.c new file mode 100644 index 0000000000..47c1ef33bc --- /dev/null +++ b/tests/handshake-timeout.c @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2012 Free Software Foundation, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +/* This program tests whether the handshake timeout value is enforced. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +static void client(int fd, int tmo_ms) +{ + int ret; + gnutls_anon_client_credentials_t anoncred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_anon_allocate_client_credentials(&anoncred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + gnutls_handshake_set_timeout(session, tmo_ms); + + /* Use default priorities */ + gnutls_priority_set_direct(session, "NORMAL:+ANON-ECDH:-VERS-ALL:+VERS-TLS1.2", NULL); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + gnutls_deinit(session); + gnutls_anon_free_client_credentials(anoncred); + gnutls_global_deinit(); + + if (ret < 0) { + if (ret != GNUTLS_E_TIMEDOUT || tmo_ms == 0) { + if (debug) + fail("client: unexpected error: %s\n", + gnutls_strerror(ret)); + exit(1); + } + if (debug) + success("client: expected timeout occurred\n"); + } else { + if (tmo_ms != 0) { + fail("client: handshake was completed unexpectedly\n"); + gnutls_perror(ret); + exit(1); + } + } + + shutdown(fd, SHUT_RDWR); + return; +} + +static void server(int fd, int tmo_ms) +{ + int ret; + gnutls_session_t session; + gnutls_anon_server_credentials_t anoncred; + + /* this must be called once in the program + */ + global_init(); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_anon_allocate_server_credentials(&anoncred); + + gnutls_init(&session, GNUTLS_SERVER); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:+ANON-ECDH:-VERS-ALL:+VERS-TLS1.2", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + + gnutls_transport_set_int(session, fd); + + if (tmo_ms) { + char buf[32]; + + // read until client closes connection + while (read(fd, buf, sizeof(buf)) > 0) + ; + } else { + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret == 0) + gnutls_bye(session, GNUTLS_SHUT_RDWR); + } + + gnutls_deinit(session); + gnutls_anon_free_server_credentials(anoncred); + gnutls_global_deinit(); +} + +static void start(int tmo_ms) +{ + int fd[2]; + int ret; + pid_t child; + + if (debug && tmo_ms) + fprintf(stderr, "\nWill test timeout %dms\n", tmo_ms); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + int status = 0; + /* parent */ + close(fd[1]); + server(fd[0], tmo_ms); + close(fd[0]); + + wait(&status); + check_wait_status(status); + } else { + close(fd[0]); + client(fd[1], tmo_ms); + close(fd[1]); + exit(0); + } +} + +static void ch_handler(int sig) +{ + return; +} + +void doit(void) +{ + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + /* make sure that normal handshake occurs */ + start(0); + + /* check the handshake with a 100ms timeout */ + start(100); + + /* check the handshake with a 1000ms timeout */ + start(1000); +} + +#endif /* _WIN32 */ diff --git a/tests/handshake-versions.c b/tests/handshake-versions.c index a558f38f23..831c029221 100644 --- a/tests/handshake-versions.c +++ b/tests/handshake-versions.c @@ -75,7 +75,7 @@ static void try(unsigned char major, unsigned char minor, int ret1, int ret2) serverx509cred); gnutls_priority_set_direct(server, - "NORMAL", + "NORMAL:+VERS-TLS-ALL", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); diff --git a/tests/hex.h b/tests/hex.h new file mode 100644 index 0000000000..4129a0537e --- /dev/null +++ b/tests/hex.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifndef GNUTLS_TESTS_HEX_H +#define GNUTLS_TESTS_HEX_H + +#include +#include +#include + +inline static gnutls_datum_t SHEX(const char *hex) +{ + gnutls_datum_t input, output; + int ret; + + input.data = (void*)hex; + input.size = strlen(hex); + + ret = gnutls_hex_decode2(&input, &output); + assert_int_equal(ret, 0); + return output; +} + +inline static gnutls_datum_t SDATA(const char *txt) +{ + gnutls_datum_t output; + output.data = (void*)gnutls_strdup(txt); + output.size = strlen(txt); + return output; +} + +#endif /* GNUTLS_TESTS_HEX_H */ diff --git a/tests/hostname-check-utf8.c b/tests/hostname-check-utf8.c index 06ce1b7bdf..1ea2aa1705 100644 --- a/tests/hostname-check-utf8.c +++ b/tests/hostname-check-utf8.c @@ -24,6 +24,7 @@ #include #endif +#include #include #include #include diff --git a/tests/iov.c b/tests/iov.c new file mode 100644 index 0000000000..2acd2b5f5f --- /dev/null +++ b/tests/iov.c @@ -0,0 +1,269 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "gnutls_int.h" +#include "../lib/iov.h" + +#include "utils.h" + +struct exp_st { + ssize_t ret; + size_t iov_index; + size_t iov_offset; +}; + +struct test_st { + const char *name; + const giovec_t *iov; + size_t iovcnt; + size_t block_size; + const struct exp_st *exp; + size_t expcnt; +}; + +static const giovec_t iov16[] = { + {(void *) "0123456789012345", 16}, + {(void *) "0123456789012345", 16}, + {(void *) "0123456789012345", 16}, + {(void *) "0123456789012345", 16} +}; + +static const struct exp_st exp16_64[] = { + {64, 4, 0}, + {0, 0, 0} +}; + +static const struct exp_st exp16_32[] = { + {32, 2, 0}, + {32, 4, 0}, + {0, 0, 0} +}; + +static const struct exp_st exp16_16[] = { + {16, 1, 0}, + {16, 2, 0}, + {16, 3, 0}, + {16, 4, 0}, + {0, 0, 0} +}; + +static const struct exp_st exp16_4[] = { + {16, 1, 0}, + {16, 2, 0}, + {16, 3, 0}, + {16, 4, 0}, + {0, 0, 0} +}; + +static const struct exp_st exp16_3[] = { + {15, 0, 15}, + {3, 1, 2}, + {12, 1, 14}, + {3, 2, 1}, + {15, 3, 0}, + {15, 3, 15}, + {1, 4, 0}, + {0, 0, 0} +}; + +static const giovec_t iov8[] = { + {(void *) "01234567", 8}, + {(void *) "01234567", 8}, + {(void *) "01234567", 8}, + {(void *) "01234567", 8} +}; + +static const struct exp_st exp8_64[] = { + {32, 4, 0}, + {0, 0, 0} +}; + +static const giovec_t iov_odd[] = { + {(void *) "0", 1}, + {(void *) "012", 3}, + {(void *) "01234", 5}, + {(void *) "0123456", 7}, + {(void *) "012345678", 9}, + {(void *) "01234567890", 11}, + {(void *) "0123456789012", 13}, + {(void *) "012345678901234", 15} +}; + +static const struct exp_st exp_odd_16[] = { + {16, 4, 0}, + {16, 5, 7}, + {16, 6, 12}, + {16, 8, 0}, + {0, 0, 0} +}; + +static const giovec_t iov_skip[] = { + {(void *) "0123456789012345", 16}, + {(void *) "01234567", 8}, + {(void *) "", 0}, + {(void *) "", 0}, + {(void *) "0123456789012345", 16} +}; + +static const struct exp_st exp_skip_16[] = { + {16, 1, 0}, + {16, 4, 8}, + {8, 5, 0}, + {0, 0, 0} +}; + +static const giovec_t iov_empty[] = { + {(void *) "", 0}, + {(void *) "", 0}, + {(void *) "", 0}, + {(void *) "", 0} +}; + +static const struct exp_st exp_empty_16[] = { + {0, 0, 0} +}; + +static const struct test_st tests[] = { + { "16/64", iov16, sizeof(iov16)/sizeof(iov16[0]), 64, + exp16_64, sizeof(exp16_64)/sizeof(exp16_64[0]) }, + { "16/32", iov16, sizeof(iov16)/sizeof(iov16[0]), 32, + exp16_32, sizeof(exp16_32)/sizeof(exp16_32[0]) }, + { "16/16", iov16, sizeof(iov16)/sizeof(iov16[0]), 16, + exp16_16, sizeof(exp16_16)/sizeof(exp16_16[0]) }, + { "16/4", iov16, sizeof(iov16)/sizeof(iov16[0]), 4, + exp16_4, sizeof(exp16_4)/sizeof(exp16_4[0]) }, + { "16/3", iov16, sizeof(iov16)/sizeof(iov16[0]), 3, + exp16_3, sizeof(exp16_3)/sizeof(exp16_3[0]) }, + { "8/64", iov8, sizeof(iov8)/sizeof(iov8[0]), 64, + exp8_64, sizeof(exp8_64)/sizeof(exp8_64[0]) }, + { "odd/16", iov_odd, sizeof(iov_odd)/sizeof(iov_odd[0]), 16, + exp_odd_16, sizeof(exp_odd_16)/sizeof(exp_odd_16[0]) }, + { "skip/16", iov_skip, sizeof(iov_skip)/sizeof(iov_skip[0]), 16, + exp_skip_16, sizeof(exp_skip_16)/sizeof(exp_skip_16[0]) }, + { "empty/16", iov_empty, sizeof(iov_empty)/sizeof(iov_empty[0]), 16, + exp_empty_16, sizeof(exp_empty_16)/sizeof(exp_empty_16[0]) }, +}; + +static void +copy(giovec_t *dst, uint8_t *buffer, const giovec_t *src, size_t iovcnt) +{ + uint8_t *p = buffer; + size_t i; + + for (i = 0; i < iovcnt; i++) { + dst[i].iov_base = p; + dst[i].iov_len = src[i].iov_len; + memcpy(dst[i].iov_base, src[i].iov_base, src[i].iov_len); + p += src[i].iov_len; + } +} + +static void +translate(uint8_t *data, size_t len) +{ + for (; len > 0; len--) { + uint8_t *p = &data[len - 1]; + if (*p >= '0' && *p <= '9') + *p = 'A' + *p - '0'; + else if (*p >= 'A' && *p <= 'Z') + *p = '0' + *p - 'A'; + } +} + +#define MAX_BUF 1024 +#define MAX_IOV 16 + +void +doit (void) +{ + uint8_t buffer[MAX_BUF]; + size_t i; + + for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) { + giovec_t iov[MAX_IOV]; + struct iov_iter_st iter; + const struct exp_st *exp = tests[i].exp; + uint8_t *data; + size_t j; + + copy(iov, buffer, tests[i].iov, tests[i].iovcnt); + + success("%s\n", tests[i].name); + assert(_gnutls_iov_iter_init(&iter, + iov, tests[i].iovcnt, + tests[i].block_size) == 0); + for (j = 0; j < tests[i].expcnt; j++) { + ssize_t ret; + + ret = _gnutls_iov_iter_next(&iter, &data); + if (ret != exp[j].ret) + fail("iov_iter_next: %d != %d\n", + (int) ret, (int) exp[j].ret); + else if (debug) + success("iov_iter_next: %d == %d\n", + (int) ret, (int) exp[j].ret); + if (ret == 0) + break; + if (ret > 0) { + if (iter.iov_index != exp[j].iov_index) + fail("iter.iov_index: %u != %u\n", + (unsigned) iter.iov_index, (unsigned) exp[j].iov_index); + else if (debug) + success("iter.iov_index: %u == %u\n", + (unsigned) iter.iov_index, (unsigned) exp[j].iov_index); + if (iter.iov_offset != exp[j].iov_offset) + fail("iter.iov_offset: %u != %u\n", + (unsigned) iter.iov_offset, (unsigned) exp[j].iov_offset); + else if (debug) + success("iter.iov_offset: %u == %u\n", + (unsigned) iter.iov_offset, (unsigned) exp[j].iov_offset); + if (iter.block_offset != 0) + fail("iter.block_offset: %u != 0\n", + (unsigned) iter.block_offset); + else if (debug) + success("iter.block_offset: %u == 0\n", + (unsigned) iter.block_offset); + + translate(data, ret); + + ret = _gnutls_iov_iter_sync(&iter, data, ret); + if (ret < 0) + fail("sync failed\n"); + } + } + + for (j = 0; j < tests[i].iovcnt; j++) { + translate(iov[j].iov_base, iov[j].iov_len); + + if (memcmp(iov[j].iov_base, tests[i].iov[j].iov_base, + iov[j].iov_len) != 0) + fail("iov doesn't match: %*s != %*s\n", + (int)iov[j].iov_len, + (char *)iov[j].iov_base, + (int)tests[i].iov[j].iov_len, + (char *)tests[i].iov[j].iov_len); + } + } +} diff --git a/tests/ip-utils.c b/tests/ip-utils.c index 0e164aba56..59977dfb9d 100644 --- a/tests/ip-utils.c +++ b/tests/ip-utils.c @@ -28,16 +28,15 @@ #include #include #include +#include #include #include #ifndef _WIN32 # include -# include +# include -#define _gnutls_hard_log(...) -#define _gnutls_ip_to_string(...) -#define _gnutls_cidr_to_string(...) +#define BUILD_IN_TESTS #include "../lib/x509/ip-in-cidr.h" #define _MATCH_FUNC(fname, CIDR, IP, status) \ diff --git a/tests/kdf-api.c b/tests/kdf-api.c new file mode 100644 index 0000000000..ec74f44ce8 --- /dev/null +++ b/tests/kdf-api.c @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2020 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include "config.h" + +#include +#include + +#include +#include + +#include "utils.h" + +#define MAX_BUF 1024 + +static void +test_hkdf(gnutls_mac_algorithm_t mac, + const char *ikm_hex, + const char *salt_hex, + const char *info_hex, + size_t length, + const char *prk_hex, + const char *okm_hex) +{ + gnutls_datum_t hex; + gnutls_datum_t ikm; + gnutls_datum_t salt; + gnutls_datum_t info; + gnutls_datum_t prk; + gnutls_datum_t okm; + uint8_t buf[MAX_BUF]; + + success("HKDF test with %s\n", gnutls_mac_get_name(mac)); + + /* Test HKDF-Extract */ + hex.data = (void *)ikm_hex; + hex.size = strlen(ikm_hex); + assert(gnutls_hex_decode2(&hex, &ikm) >= 0); + + hex.data = (void *)salt_hex; + hex.size = strlen(salt_hex); + assert(gnutls_hex_decode2(&hex, &salt) >= 0); + + assert(gnutls_hkdf_extract(mac, &ikm, &salt, buf) >= 0); + gnutls_free(ikm.data); + gnutls_free(salt.data); + + prk.data = buf; + prk.size = strlen(prk_hex) / 2; + assert(gnutls_hex_encode2(&prk, &hex) >= 0); + + if (strcmp((char *)hex.data, prk_hex)) + fail("prk doesn't match: %s != %s\n", + (char *)hex.data, prk_hex); + + gnutls_free(hex.data); + + /* Test HKDF-Expand */ + hex.data = (void *)info_hex; + hex.size = strlen(info_hex); + assert(gnutls_hex_decode2(&hex, &info) >= 0); + + assert(gnutls_hkdf_expand(mac, &prk, &info, buf, length) >= 0); + gnutls_free(info.data); + + okm.data = buf; + okm.size = strlen(okm_hex) / 2; + assert(gnutls_hex_encode2(&okm, &hex) >= 0); + + if (strcmp((char *)hex.data, okm_hex)) + fail("okm doesn't match: %s != %s\n", + (char *)hex.data, okm_hex); + + gnutls_free(hex.data); +} + +static void +test_pbkdf2(gnutls_mac_algorithm_t mac, + const char *ikm_hex, + const char *salt_hex, + unsigned iter_count, + size_t length, + const char *okm_hex) +{ + gnutls_datum_t hex; + gnutls_datum_t ikm; + gnutls_datum_t salt; + gnutls_datum_t okm; + uint8_t buf[MAX_BUF]; + + success("PBKDF2 test with %s\n", gnutls_mac_get_name(mac)); + + hex.data = (void *)ikm_hex; + hex.size = strlen(ikm_hex); + assert(gnutls_hex_decode2(&hex, &ikm) >= 0); + + hex.data = (void *)salt_hex; + hex.size = strlen(salt_hex); + assert(gnutls_hex_decode2(&hex, &salt) >= 0); + + assert(gnutls_pbkdf2(mac, &ikm, &salt, iter_count, buf, length) >= 0); + gnutls_free(ikm.data); + gnutls_free(salt.data); + + okm.data = buf; + okm.size = length; + assert(gnutls_hex_encode2(&okm, &hex) >= 0); + + if (strcmp((char *)hex.data, okm_hex)) + fail("okm doesn't match: %s != %s\n", + (char *)hex.data, okm_hex); + + gnutls_free(hex.data); +} + +void +doit(void) +{ + /* Test vector from RFC 5869. More thorough testing is done + * in nettle. */ + test_hkdf(GNUTLS_MAC_SHA256, + "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" + "0b0b0b0b0b0b", + "000102030405060708090a0b0c", + "f0f1f2f3f4f5f6f7f8f9", + 42, + "077709362c2e32df0ddc3f0dc47bba63" + "90b6c73bb50f9c3122ec844ad7c2b3e5", + "3cb25f25faacd57a90434f64d0362f2a" + "2d2d0a90cf1a5a4c5db02d56ecc4c5bf" + "34007208d5b887185865"); + + /* Test vector from RFC 6070. More thorough testing is done + * in nettle. */ + test_pbkdf2(GNUTLS_MAC_SHA1, + "70617373776f7264", /* "password" */ + "73616c74", /* "salt" */ + 4096, + 20, + "4b007901b765489abead49d926f721d065a429c1"); +} diff --git a/tests/key-export-pkcs8.c b/tests/key-export-pkcs8.c new file mode 100644 index 0000000000..9956e505ca --- /dev/null +++ b/tests/key-export-pkcs8.c @@ -0,0 +1,255 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include + +unsigned char dsa_p[] = "\x00\xb9\x84\xf5\x5a\x81\xbe\x1a\x0d\xc5\x8a\x73\x8f\x0c\x9b\x2f\x9b\xb6\x0e\x4b\xc3\x74\x1a\x7f\x64\xad\x9d\xf3\x28\xc5\xa0\x47\xbc\x9b\x57\x56\xf1\x97\xd5\x7e\x37\x03\xe9\xf2\x4c\xf4\xe3\x8b\x7f\x30\xa3\x5d\x2f\xbb\xa1\xa2\x37\xc2\xea\x35\x8f\x1f\xb1\x5f\xa6\xa2\x5f\x01\xf1\x23\x36\x2b\xe4\x4f\x2f\x2d\xdd\x9d\xd5\x3a\xa6\x39\xaf\x7a\x51\x7c\xd2\x25\x8e\x97\x74\xcf\x1e\xc5\x7b\x4b\x76\x43\x81\x07\x1f\x06\x14\xb8\x6e\x58\x12\xe1\x90\xe2\x37\x6f\xd2\x1b\xec\x68\xc5\x58\xe2\xe6\x30\xe0\x6a\x5e\x2c\x63\x78\xec\x07"; +unsigned char dsa_q[] = "\x00\x9f\x56\x8c\x48\x64\x2f\xfe\x8d\xaa\x7a\x6d\x96\xdb\x04\x5d\x16\xef\x08\xa5\x71"; +unsigned char dsa_g[] = "\x62\x06\x7e\xe4\x5c\x76\x08\xb7\x46\x1a\x5d\xd7\x97\xd4\x2a\x21\xfb\x1f\x31\xc9\xd2\xf4\xfa\x39\xd8\x27\xd1\x9b\xfc\x27\x5d\xa7\x0a\xa7\x1a\xfc\x53\xc1\x2f\x43\xc2\x37\xc8\x85\x7f\x3d\x4c\xab\x5d\x81\x32\xfb\x1d\x5e\x1e\x54\x11\x16\x20\xc6\x80\x5a\xd9\x8c\x9b\x43\xf0\xdd\x6b\xa0\xf4\xc3\xf2\x8a\x9c\x39\xd2\x1c\x7b\x0f\xef\xfa\x28\x93\x8f\xd2\xa1\x22\xeb\xdc\xe0\x8a\x8b\xad\x28\x0e\xcf\xef\x09\x85\xe9\x36\xbd\x8b\x7a\x50\xd5\x7b\xf7\x25\x0d\x6c\x60\x11\xc4\xef\x70\x90\xcf\xd6\x1b\xeb\xbb\x8e\xc6\x3e\x3a\x97"; +unsigned char dsa_y[] = "\x0f\x8a\x87\x57\xf2\xd1\xc2\xdc\xac\xdf\x4b\x8b\x0f\x8b\xba\x29\xf7\xe1\x03\xe4\x55\xfa\xb2\x98\x07\xd6\xfd\x12\xb1\x80\xbc\xf5\xba\xb4\x50\xd4\x7f\xa0\x0e\x43\xe7\x9f\xc9\x78\x11\x5f\xe5\xe4\x0c\x2c\x6b\x6a\xa4\x35\xdc\xbd\x54\xe5\x60\x36\x9a\x31\xd1\x8a\x59\x6e\x6b\x1c\xba\xbd\x2e\xba\xeb\x7c\x87\xef\xda\xc8\xdd\xa1\xeb\xa4\x83\xe6\x8b\xad\xfa\xfa\x8e\x5b\xd7\x37\xc8\x32\x3e\x96\xc2\x3e\xf4\x43\xda\x7d\x91\x02\x0f\xb7\xbc\xf8\xef\x8f\xf7\x41\x00\x5e\x96\xdf\x0f\x08\x96\xdc\xea\xb2\xe9\x06\x82\xaf\xd2\x2f"; +unsigned char dsa_x[] = "\x4b\x9f\xeb\xff\x6c\x9a\x02\x83\x41\x5e\x37\x81\x8e\x00\x86\x31\xe8\xb6\x9b\xc1"; + +unsigned char rsa_m[] = "\x00\xbb\x66\x43\xf5\xf2\xc5\xd7\xb6\x8c\xcc\xc5\xdf\xf5\x88\x3b\xb1\xc9\x4b\x6a\x0e\xa1\xad\x20\x50\x40\x08\x80\xa1\x4f\x5c\xa3\xd0\xf8\x6c\xcf\xe6\x3c\xf7\xec\x04\x76\x13\x17\x8b\x64\x89\x22\x5b\xc0\xdd\x53\x7c\x3b\xed\x7c\x04\xbb\x80\xb9\x28\xbe\x8e\x9b\xc6\x8e\xa0\xa5\x12\xcb\xf5\x57\x1e\xa2\xe7\xbb\xb7\x33\x49\x9f\xe3\xbb\x4a\xae\x6a\x4d\x68\xff\xc9\x11\xe2\x32\x8d\xce\x3d\x80\x0b\x8d\x75\xef\xd8\x00\x81\x8f\x28\x04\x03\xa0\x22\x8d\x61\x04\x07\xfa\xb6\x37\x7d\x21\x07\x49\xd2\x09\x61\x69\x98\x90\xa3\x58\xa9"; +unsigned char rsa_e[] = "\x01\x00\x01"; +unsigned char rsa_d[] = "\x0e\x99\x80\x44\x6e\x42\x43\x14\xbe\x01\xeb\x0d\x90\x69\xa9\x6a\xe7\xa9\x88\x2c\xf5\x24\x11\x7f\x27\x09\xf2\x89\x7e\xaf\x13\x35\x21\xd1\x8a\x5d\xdf\xd4\x99\xce\xdc\x2b\x0f\x1b\xc5\x3c\x98\xd0\x68\xa5\x65\x8e\x69\x75\xce\x42\x69\x20\x35\x6c\xaa\xf1\xdd\xc9\x57\x6c\x7b\xc3\x3e\x42\x7e\xa1\xc3\x8c\x76\xa7\x9a\xe8\x81\xdb\xe1\x84\x82\xf5\x99\xd5\xa8\xee\x35\x9e\x54\x94\xc5\x44\xa0\x7b\xcc\xb7\x4c\x3e\xcd\xf2\x49\xdb\x5c\x21\x06\x85\xf6\x75\x00\x43\x62\x89\x12\xf9\x5d\x90\xed\xe6\xfd\xb4\x49\x14\x4a\x79\xe2\x4d"; +unsigned char rsa_p[] = "\x00\xd8\xcb\xe4\x65\x4e\x6c\x11\x0f\xa8\x72\xed\x4b\x4c\x8d\x1d\x07\xdc\x24\x99\x25\xe4\x3c\xb2\xf3\x02\xc4\x72\xe6\x3a\x5b\x86\xf4\x7d\x54\x2a\x4e\x79\x64\x16\x1f\x45\x3b\x17\x9e\x2a\x94\x90\x90\x59\xe7\x0b\x95\xd4\xbf\xa9\x47\xd1\x0a\x71\xaf\x3d\x6b\xed\x55"; +unsigned char rsa_q[] = "\x00\xdd\x49\x81\x7a\x5c\x04\xbf\x6b\xbd\x70\x05\x35\x42\x32\xa3\x9b\x08\xee\xd4\x98\x17\x6e\xb8\xc4\xa2\x12\xbe\xdc\x1e\x72\xd0\x44\x84\x5c\xf0\x30\x35\x04\xfd\x4e\xb0\xcc\xd6\x6f\x40\xcb\x16\x13\x58\xbc\x57\xf7\x77\x48\xe5\x0c\x0d\x14\x9b\x66\x6e\xd8\xde\x05"; +unsigned char rsa_u[] = "\x4a\x74\x5c\x95\x83\x54\xa3\xb0\x71\x35\xba\x02\x3a\x7d\x4a\x8c\x2d\x9a\x26\x77\x60\x36\x28\xd4\xb1\x7d\x8a\x06\xf8\x89\xa2\xef\xb1\x66\x46\x7d\xb9\xd4\xde\xbc\xa3\xbe\x46\xfa\x62\xe1\x63\x82\xdc\xdb\x64\x36\x47\x59\x00\xa8\xf3\xf7\x0e\xb4\xe0\x66\x3d\xd9"; +unsigned char rsa_e1[] = "\x45\x20\x96\x5e\x1b\x28\x68\x34\x46\xf1\x06\x6b\x09\x28\xc1\xc5\xfc\xd3\x0a\xa6\x43\x65\x7b\x65\xf3\x4e\xf2\x98\x28\xa9\x80\x99\xba\xd0\xb8\x80\xb7\x42\x4b\xaf\x82\xe2\xb9\xc0\x2c\x31\x9c\xfa\xfa\x3f\xaa\xb9\x06\xd2\x6a\x46\xc5\x08\x00\x81\xf1\x22\xd5\xd5"; +unsigned char rsa_e2[] = "\x00\xa6\x50\x60\xa7\xfe\x10\xf3\x6d\x9e\x6b\x5a\xfe\xb4\x4a\x2a\xfc\x92\xb2\x2d\xc6\x41\x96\x4d\xf8\x3b\x77\xab\x4a\xf4\xf7\x85\xe0\x79\x3b\x00\xaa\xba\xae\x8d\x53\x5f\x3e\x14\xcc\x78\xfe\x2a\x11\x50\x57\xfe\x25\x57\xd9\xc9\x8c\x4d\x28\x77\xc3\x7c\xfc\x31\xa1"; + +unsigned char ecc_x[] = "\x3c\x15\x6f\x1d\x48\x3e\x64\x59\x13\x2c\x6d\x04\x1a\x38\x0d\x30\x5c\xe4\x3f\x55\xcb\xd9\x17\x15\x46\x72\x71\x92\xc1\xf8\xc6\x33"; +unsigned char ecc_y[] = "\x3d\x04\x2e\xc8\xc1\x0f\xc0\x50\x04\x7b\x9f\xc9\x48\xb5\x40\xfa\x6f\x93\x82\x59\x61\x5e\x72\x57\xcb\x83\x06\xbd\xcc\x82\x94\xc1"; +unsigned char ecc_k[] = "\x00\xfd\x2b\x00\x80\xf3\x36\x5f\x11\x32\x65\xe3\x8d\x30\x33\x3b\x47\xf5\xce\xf8\x13\xe5\x4c\xc2\xcf\xfd\xe8\x05\x6a\xca\xc9\x41\xb1"; + +unsigned char false_ed25519_x[] = "\xac\xac\x9a\xb3\xc3\x41\x8d\x41\x22\x21\xc1\x84\xa7\xb8\x70\xfb\x44\x6e\xc7\x7e\x20\x87\x7b\xd9\x22\xa4\x5d\xd2\x97\x09\xd5\x48"; +unsigned char ed25519_x[] = "\xab\xaf\x98\xb3\xc3\x41\x8d\x41\x22\x21\xc1\x86\xa7\xb8\x70\xfb\x44\x6e\xc7\x7e\x20\x87\x7b\xd9\x22\xa4\x5d\xd2\x97\x09\xd5\x48"; +unsigned char ed25519_k[] = "\x1c\xa9\x23\xdc\x35\xa8\xfd\xd6\x2d\xa8\x98\xb9\x60\x7b\xce\x10\x3d\xf4\x64\xc6\xe5\x4b\x0a\x65\x56\x6a\x3c\x73\x65\x51\xa2\x2f"; + +unsigned char gost_x[] = "\xd0\xbb\xe9\xf4\xc6\xa8\x60\x3c\x73\x91\x44\x55\xcf\xbd\x50\xdd\x2c\x3d\x5a\xbc\x1a\xd8\x5e\x3c\xdf\x10\xdd\xd2\x63\x88\x0f\xc0"; +unsigned char gost_y[] = "\x8a\xec\x96\x3c\x0b\xc8\x33\xff\x57\x5f\x66\x78\x94\x39\xb4\xf5\x24\xc6\xba\x86\x41\xac\x43\x21\x6f\x3c\xb0\xfa\x56\xbd\x5b\x37"; +unsigned char gost_k[] = "\x47\x59\x41\x2c\x8a\xf8\x58\x1a\x67\xe0\xc3\x82\x1f\xca\x31\x19\x66\xf9\xd8\x43\xcd\x2f\x78\x23\x34\x98\x90\xb8\x14\x2e\x7f\xa5"; + +gnutls_datum_t _dsa_p = {dsa_p, sizeof(dsa_p)-1}; +gnutls_datum_t _dsa_q = {dsa_q, sizeof(dsa_q)-1}; +gnutls_datum_t _dsa_g = {dsa_g, sizeof(dsa_g)-1}; +gnutls_datum_t _dsa_y = {dsa_y, sizeof(dsa_y)-1}; +gnutls_datum_t _dsa_x = {dsa_x, sizeof(dsa_x)-1}; + +gnutls_datum_t _rsa_m = {rsa_m, sizeof(rsa_m)-1}; +gnutls_datum_t _rsa_e = {rsa_e, sizeof(rsa_e)-1}; +gnutls_datum_t _rsa_d = {rsa_d, sizeof(rsa_d)-1}; +gnutls_datum_t _rsa_p = {rsa_p, sizeof(rsa_p)-1}; +gnutls_datum_t _rsa_q = {rsa_q, sizeof(rsa_q)-1}; +gnutls_datum_t _rsa_u = {rsa_u, sizeof(rsa_u)-1}; +gnutls_datum_t _rsa_e1 = {rsa_e1, sizeof(rsa_e1)-1}; +gnutls_datum_t _rsa_e2 = {rsa_e2, sizeof(rsa_e2)-1}; + +gnutls_datum_t _ecc_x = {ecc_x, sizeof(ecc_x)-1}; +gnutls_datum_t _ecc_y = {ecc_y, sizeof(ecc_y)-1}; +gnutls_datum_t _ecc_k = {ecc_k, sizeof(ecc_k)-1}; + +gnutls_datum_t _false_ed25519_x = {false_ed25519_x, sizeof(false_ed25519_x)-1}; +gnutls_datum_t _ed25519_x = {ed25519_x, sizeof(ed25519_x)-1}; +gnutls_datum_t _ed25519_k = {ed25519_k, sizeof(ed25519_k)-1}; + +gnutls_datum_t _gost_x = {gost_x, sizeof(gost_x)-1}; +gnutls_datum_t _gost_y = {gost_y, sizeof(gost_y)-1}; +gnutls_datum_t _gost_k = {gost_k, sizeof(gost_k)-1}; + +static +int check_dsa(void) +{ + gnutls_x509_privkey_t key; + gnutls_datum_t out; + int ret; + + success("Checking DSA key operations\n"); + + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_x509_privkey_import_dsa_raw(key, &_dsa_p, &_dsa_q, &_dsa_g, &_dsa_y, &_dsa_x); + if (ret < 0) + fail("error\n"); + + ret = gnutls_x509_privkey_export2_pkcs8(key, GNUTLS_X509_FMT_DER, NULL, 0, &out); + if (ret < 0 || out.size == 0) + fail("error in pkcs8 export\n"); + gnutls_free(out.data); + + gnutls_x509_privkey_deinit(key); + + return 0; +} + +static +int check_rsa(void) +{ + gnutls_x509_privkey_t key; + gnutls_datum_t out; + int ret; + + success("Checking RSA key operations\n"); + + /* RSA */ + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_x509_privkey_import_rsa_raw2(key, &_rsa_m, &_rsa_e, &_rsa_d, &_rsa_p, &_rsa_q, &_rsa_u, &_rsa_e1, &_rsa_e2); + if (ret < 0) + fail("error\n"); + + ret = gnutls_x509_privkey_export2_pkcs8(key, GNUTLS_X509_FMT_DER, NULL, 0, &out); + if (ret < 0 || out.size == 0) + fail("error in pkcs8 export\n"); + gnutls_free(out.data); + + gnutls_x509_privkey_deinit(key); + + return 0; +} + +static +int check_ed25519(void) +{ + gnutls_x509_privkey_t key; + gnutls_datum_t out; + int ret; + + success("Checking ed25519 key operations\n"); + + /* ECC */ + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_x509_privkey_import_ecc_raw(key, GNUTLS_ECC_CURVE_ED25519, &_ed25519_x, NULL, &_ed25519_k); + if (ret < 0) + fail("error\n"); + + ret = gnutls_x509_privkey_export2_pkcs8(key, GNUTLS_X509_FMT_DER, NULL, 0, &out); + if (ret < 0 || out.size == 0) + fail("error in pkcs8 export\n"); + gnutls_free(out.data); + + gnutls_x509_privkey_deinit(key); + + return 0; +} + +static +int check_gost(void) +{ +#ifdef ENABLE_GOST + gnutls_x509_privkey_t key; + gnutls_datum_t out; + int ret; + + success("Checking GOST key operations\n"); + + /* ECC */ + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_x509_privkey_import_gost_raw(key, GNUTLS_ECC_CURVE_GOST256CPXA, GNUTLS_DIG_GOSTR_94, GNUTLS_GOST_PARAMSET_CP_A, &_gost_x, &_gost_y, &_gost_k); + if (ret < 0) + fail("error\n"); + + ret = gnutls_x509_privkey_export2_pkcs8(key, GNUTLS_X509_FMT_DER, NULL, 0, &out); + if (ret < 0 || out.size == 0) + fail("error in pkcs8 export\n"); + gnutls_free(out.data); + + gnutls_x509_privkey_deinit(key); +#endif + + return 0; +} + +static +int check_ecc(void) +{ + gnutls_x509_privkey_t key; + gnutls_datum_t out; + int ret; + + success("Checking SECP256R1 key operations\n"); + + /* ECC */ + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_x509_privkey_import_ecc_raw(key, GNUTLS_ECC_CURVE_SECP256R1, &_ecc_x, &_ecc_y, &_ecc_k); + if (ret < 0) + fail("error\n"); + + ret = gnutls_x509_privkey_export2_pkcs8(key, GNUTLS_X509_FMT_PEM, NULL, 0, &out); + if (ret < 0 || out.size == 0) + fail("error in pkcs8 export\n"); + + fprintf(stderr, "%s\n", out.data); + gnutls_free(out.data); + + gnutls_x509_privkey_deinit(key); + + return 0; +} + +void doit(void) +{ + if (check_dsa() != 0) { + fail("error in DSA check\n"); + exit(1); + } + + if (check_rsa() != 0) { + fail("error in RSA check\n"); + exit(1); + } + + if (check_ecc() != 0) { + fail("error in ecdsa check\n"); + } + + if (check_ed25519() != 0) { + fail("error in ed25519 check\n"); + } + + if (check_gost() != 0) { + fail("error in gost check\n"); + } +} diff --git a/tests/key-import-export.c b/tests/key-import-export.c index a81a7b098b..45434eeb2d 100644 --- a/tests/key-import-export.c +++ b/tests/key-import-export.c @@ -27,21 +27,13 @@ #include #include #include +#include #include #include #include -static unsigned char ecc_key_pem[] = - "-----BEGIN EC PRIVATE KEY-----\n" - "MHcCAQEEIPEqEyB2AnCoPL/9U/YDHvdqXYbIogTywwyp6/UfDw6noAoGCCqGSM49\n" - "AwEHoUQDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/\n" - "6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/w==\n" - "-----END EC PRIVATE KEY-----\n"; - -const gnutls_datum_t ecc_key = { ecc_key_pem, - sizeof(ecc_key_pem) -}; +#include "cert-common.h" static char rsa_key_pem[] = "-----BEGIN RSA PRIVATE KEY-----\n" @@ -64,23 +56,6 @@ const gnutls_datum_t rsa_key = { (void*)rsa_key_pem, sizeof(rsa_key_pem) }; -static char dsa_key_pem[] = - "-----BEGIN DSA PRIVATE KEY-----\n" - "MIIBugIBAAKBgQC5hPVagb4aDcWKc48Mmy+btg5Lw3Qaf2StnfMoxaBHvJtXVvGX\n" - "1X43A+nyTPTji38wo10vu6GiN8LqNY8fsV+mol8B8SM2K+RPLy3dndU6pjmvelF8\n" - "0iWOl3TPHsV7S3ZDgQcfBhS4blgS4ZDiN2/SG+xoxVji5jDgal4sY3jsBwIVAJ9W\n" - "jEhkL/6NqnptltsEXRbvCKVxAoGAYgZ+5Fx2CLdGGl3Xl9QqIfsfMcnS9Po52CfR\n" - "m/wnXacKpxr8U8EvQ8I3yIV/PUyrXYEy+x1eHlQRFiDGgFrZjJtD8N1roPTD8oqc\n" - "OdIcew/v+iiTj9KhIuvc4IqLrSgOz+8Jhek2vYt6UNV79yUNbGARxO9wkM/WG+u7\n" - "jsY+OpcCgYAPiodX8tHC3KzfS4sPi7op9+ED5FX6spgH1v0SsYC89bq0UNR/oA5D\n" - "55/JeBFf5eQMLGtqpDXcvVTlYDaaMdGKWW5rHLq9LrrrfIfv2sjdoeukg+aLrfr6\n" - "jlvXN8gyPpbCPvRD2n2RAg+3vPjvj/dBAF6W3w8IltzqsukGgq/SLwIUS5/r/2ya\n" - "AoNBXjeBjgCGMei2m8E=\n" "-----END DSA PRIVATE KEY-----\n"; - -const gnutls_datum_t dsa_key = { (void*)dsa_key_pem, - sizeof(dsa_key_pem) -}; - static void dump(const char *name, unsigned char *buf, int buf_size) { int i; @@ -105,9 +80,17 @@ unsigned char rsa_u[] = "\x4a\x74\x5c\x95\x83\x54\xa3\xb0\x71\x35\xba\x02\x3a\x7 unsigned char rsa_e1[] = "\x45\x20\x96\x5e\x1b\x28\x68\x34\x46\xf1\x06\x6b\x09\x28\xc1\xc5\xfc\xd3\x0a\xa6\x43\x65\x7b\x65\xf3\x4e\xf2\x98\x28\xa9\x80\x99\xba\xd0\xb8\x80\xb7\x42\x4b\xaf\x82\xe2\xb9\xc0\x2c\x31\x9c\xfa\xfa\x3f\xaa\xb9\x06\xd2\x6a\x46\xc5\x08\x00\x81\xf1\x22\xd5\xd5"; unsigned char rsa_e2[] = "\x00\xa6\x50\x60\xa7\xfe\x10\xf3\x6d\x9e\x6b\x5a\xfe\xb4\x4a\x2a\xfc\x92\xb2\x2d\xc6\x41\x96\x4d\xf8\x3b\x77\xab\x4a\xf4\xf7\x85\xe0\x79\x3b\x00\xaa\xba\xae\x8d\x53\x5f\x3e\x14\xcc\x78\xfe\x2a\x11\x50\x57\xfe\x25\x57\xd9\xc9\x8c\x4d\x28\x77\xc3\x7c\xfc\x31\xa1"; -unsigned char ecc_x[] = "\x37\xcc\x56\xd9\x76\x09\x1e\x5a\x72\x3e\xc7\x59\x2d\xff\x20\x6e\xee\x7c\xf9\x06\x91\x74\xd0\xad\x14\xb5\xf7\x68\x22\x59\x62\x92"; -unsigned char ecc_y[] = "\x4e\xe5\x00\xd8\x23\x11\xff\xea\x2f\xd2\x34\x5d\x5d\x16\xbd\x8a\x88\xc2\x6b\x77\x0d\x55\xcd\x8a\x2a\x0e\xfa\x01\xc8\xb4\xed\xff"; -unsigned char ecc_k[] = "\x00\xf1\x2a\x13\x20\x76\x02\x70\xa8\x3c\xbf\xfd\x53\xf6\x03\x1e\xf7\x6a\x5d\x86\xc8\xa2\x04\xf2\xc3\x0c\xa9\xeb\xf5\x1f\x0f\x0e\xa7"; +unsigned char ecc_x[] = "\x3c\x15\x6f\x1d\x48\x3e\x64\x59\x13\x2c\x6d\x04\x1a\x38\x0d\x30\x5c\xe4\x3f\x55\xcb\xd9\x17\x15\x46\x72\x71\x92\xc1\xf8\xc6\x33"; +unsigned char ecc_y[] = "\x3d\x04\x2e\xc8\xc1\x0f\xc0\x50\x04\x7b\x9f\xc9\x48\xb5\x40\xfa\x6f\x93\x82\x59\x61\x5e\x72\x57\xcb\x83\x06\xbd\xcc\x82\x94\xc1"; +unsigned char ecc_k[] = "\x00\xfd\x2b\x00\x80\xf3\x36\x5f\x11\x32\x65\xe3\x8d\x30\x33\x3b\x47\xf5\xce\xf8\x13\xe5\x4c\xc2\xcf\xfd\xe8\x05\x6a\xca\xc9\x41\xb1"; + +unsigned char false_ed25519_x[] = "\xac\xac\x9a\xb3\xc3\x41\x8d\x41\x22\x21\xc1\x84\xa7\xb8\x70\xfb\x44\x6e\xc7\x7e\x20\x87\x7b\xd9\x22\xa4\x5d\xd2\x97\x09\xd5\x48"; +unsigned char ed25519_x[] = "\xab\xaf\x98\xb3\xc3\x41\x8d\x41\x22\x21\xc1\x86\xa7\xb8\x70\xfb\x44\x6e\xc7\x7e\x20\x87\x7b\xd9\x22\xa4\x5d\xd2\x97\x09\xd5\x48"; +unsigned char ed25519_k[] = "\x1c\xa9\x23\xdc\x35\xa8\xfd\xd6\x2d\xa8\x98\xb9\x60\x7b\xce\x10\x3d\xf4\x64\xc6\xe5\x4b\x0a\x65\x56\x6a\x3c\x73\x65\x51\xa2\x2f"; + +unsigned char gost_x[] = "\xd0\xbb\xe9\xf4\xc6\xa8\x60\x3c\x73\x91\x44\x55\xcf\xbd\x50\xdd\x2c\x3d\x5a\xbc\x1a\xd8\x5e\x3c\xdf\x10\xdd\xd2\x63\x88\x0f\xc0"; +unsigned char gost_y[] = "\x8a\xec\x96\x3c\x0b\xc8\x33\xff\x57\x5f\x66\x78\x94\x39\xb4\xf5\x24\xc6\xba\x86\x41\xac\x43\x21\x6f\x3c\xb0\xfa\x56\xbd\x5b\x37"; +unsigned char gost_k[] = "\x47\x59\x41\x2c\x8a\xf8\x58\x1a\x67\xe0\xc3\x82\x1f\xca\x31\x19\x66\xf9\xd8\x43\xcd\x2f\x78\x23\x34\x98\x90\xb8\x14\x2e\x7f\xa5"; gnutls_datum_t _dsa_p = {dsa_p, sizeof(dsa_p)-1}; gnutls_datum_t _dsa_q = {dsa_q, sizeof(dsa_q)-1}; @@ -128,8 +111,34 @@ gnutls_datum_t _ecc_x = {ecc_x, sizeof(ecc_x)-1}; gnutls_datum_t _ecc_y = {ecc_y, sizeof(ecc_y)-1}; gnutls_datum_t _ecc_k = {ecc_k, sizeof(ecc_k)-1}; +gnutls_datum_t _false_ed25519_x = {false_ed25519_x, sizeof(false_ed25519_x)-1}; +gnutls_datum_t _ed25519_x = {ed25519_x, sizeof(ed25519_x)-1}; +gnutls_datum_t _ed25519_k = {ed25519_k, sizeof(ed25519_k)-1}; + +gnutls_datum_t _gost_x = {gost_x, sizeof(gost_x)-1}; +gnutls_datum_t _gost_y = {gost_y, sizeof(gost_y)-1}; +gnutls_datum_t _gost_k = {gost_k, sizeof(gost_k)-1}; + unsigned char ecc_params[] = "\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07"; -unsigned char ecc_point[] = "\x04\x41\x04\x37\xcc\x56\xd9\x76\x09\x1e\x5a\x72\x3e\xc7\x59\x2d\xff\x20\x6e\xee\x7c\xf9\x06\x91\x74\xd0\xad\x14\xb5\xf7\x68\x22\x59\x62\x92\x4e\xe5\x00\xd8\x23\x11\xff\xea\x2f\xd2\x34\x5d\x5d\x16\xbd\x8a\x88\xc2\x6b\x77\x0d\x55\xcd\x8a\x2a\x0e\xfa\x01\xc8\xb4\xed\xff"; +unsigned char ecc_point[] = "\x04\x41\x04\x3c\x15\x6f\x1d\x48\x3e\x64\x59\x13\x2c\x6d\x04\x1a\x38\x0d\x30\x5c\xe4\x3f\x55\xcb\xd9\x17\x15\x46\x72\x71\x92\xc1\xf8\xc6\x33\x3d\x04\x2e\xc8\xc1\x0f\xc0\x50\x04\x7b\x9f\xc9\x48\xb5\x40\xfa\x6f\x93\x82\x59\x61\x5e\x72\x57\xcb\x83\x06\xbd\xcc\x82\x94\xc1"; + +static int _gnutls_privkey_export2_pkcs8(gnutls_privkey_t key, gnutls_x509_crt_fmt_t f, + const char *password, unsigned flags, gnutls_datum_t *out) +{ + gnutls_x509_privkey_t xkey; + int ret; + + ret = gnutls_privkey_export_x509(key, &xkey); + if (ret < 0) + fail("error in gnutls_privkey_export_x509\n"); + + assert(gnutls_x509_privkey_fix(xkey)>=0); + + ret = gnutls_x509_privkey_export2_pkcs8(xkey, f, password, 0, out); + gnutls_x509_privkey_deinit(xkey); + + return ret; +} #define CMP(name, dat, v) cmp(name, __LINE__, dat, v, sizeof(v)-1) static int cmp(const char *name, int line, gnutls_datum_t *v1, unsigned char *v2, unsigned size) @@ -150,6 +159,35 @@ static int cmp(const char *name, int line, gnutls_datum_t *v1, unsigned char *v2 return 0; } +/* leading zero on v2 is ignored */ +#define CMP_NO_LZ(name, dat, v) cmp_no_lz(name, __LINE__, dat, v, sizeof(v)-1) +static int cmp_no_lz(const char *name, int line, gnutls_datum_t *v1, unsigned char *i2, unsigned size) +{ + gnutls_datum_t v2; + if (size > 0 && i2[0] == 0) { + v2.data = &i2[1]; + v2.size = size-1; + } else { + v2.data = i2; + v2.size = size; + } + + if (v2.size != v1->size) { + fprintf(stderr, "error in %s:%d size\n", name, line); + dump("expected", v2.data, v2.size); + dump("got", v1->data, v1->size); + exit(1); + } + + if (memcmp(v1->data, v2.data, v2.size) != 0) { + fprintf(stderr, "error in %s:%d\n", name, line); + dump("expected", v2.data, v2.size); + dump("got", v1->data, v1->size); + exit(1); + } + return 0; +} + static int check_x509_privkey(void) { @@ -221,7 +259,7 @@ int check_x509_privkey(void) if (ret < 0) fail("error\n"); - ret = gnutls_x509_privkey_import(key, &ecc_key, GNUTLS_X509_FMT_PEM); + ret = gnutls_x509_privkey_import(key, &server_ecc_key, GNUTLS_X509_FMT_PEM); if (ret < 0) fail("error\n"); @@ -251,6 +289,10 @@ int check_privkey_import_export(void) gnutls_datum_t p, q, g, y, x; gnutls_datum_t m, e, u, e1, e2, d; gnutls_ecc_curve_t curve; +#ifdef ENABLE_GOST + gnutls_digest_algorithm_t digest; + gnutls_gost_paramset_t paramset; +#endif int ret; global_init(); @@ -263,7 +305,7 @@ int check_privkey_import_export(void) if (ret < 0) fail("error\n"); - ret = gnutls_privkey_export_dsa_raw(key, &p, &q, &g, &y, &x); + ret = gnutls_privkey_export_dsa_raw2(key, &p, &q, &g, &y, &x, 0); if (ret < 0) fail("error: %s\n", gnutls_strerror(ret)); @@ -277,6 +319,21 @@ int check_privkey_import_export(void) gnutls_free(g.data); gnutls_free(y.data); gnutls_free(x.data); + + ret = gnutls_privkey_export_dsa_raw2(key, &p, &q, &g, &y, &x, GNUTLS_EXPORT_FLAG_NO_LZ); + if (ret < 0) + fail("error: %s\n", gnutls_strerror(ret)); + + CMP_NO_LZ("p", &p, dsa_p); + CMP_NO_LZ("q", &q, dsa_q); + CMP_NO_LZ("g", &g, dsa_g); + CMP_NO_LZ("y", &y, dsa_y); + CMP_NO_LZ("x", &x, dsa_x); + gnutls_free(p.data); + gnutls_free(q.data); + gnutls_free(g.data); + gnutls_free(y.data); + gnutls_free(x.data); gnutls_privkey_deinit(key); /* RSA */ @@ -288,7 +345,7 @@ int check_privkey_import_export(void) if (ret < 0) fail("error\n"); - ret = gnutls_privkey_export_rsa_raw(key, &m, &e, &d, &p, &q, &u, &e1, &e2); + ret = gnutls_privkey_export_rsa_raw2(key, &m, &e, &d, &p, &q, &u, &e1, &e2, 0); if (ret < 0) fail("error\n"); @@ -308,6 +365,27 @@ int check_privkey_import_export(void) gnutls_free(u.data); gnutls_free(e1.data); gnutls_free(e2.data); + + ret = gnutls_privkey_export_rsa_raw2(key, &m, &e, &d, &p, &q, &u, &e1, &e2, GNUTLS_EXPORT_FLAG_NO_LZ); + if (ret < 0) + fail("error\n"); + + CMP_NO_LZ("m", &m, rsa_m); + CMP_NO_LZ("e", &e, rsa_e); + CMP_NO_LZ("d", &d, rsa_d); + CMP_NO_LZ("p", &p, rsa_p); + CMP_NO_LZ("q", &q, rsa_q); + CMP_NO_LZ("u", &u, rsa_u); + CMP_NO_LZ("e1", &e1, rsa_e1); + CMP_NO_LZ("e2", &e2, rsa_e2); + gnutls_free(m.data); + gnutls_free(e.data); + gnutls_free(d.data); + gnutls_free(p.data); + gnutls_free(q.data); + gnutls_free(u.data); + gnutls_free(e1.data); + gnutls_free(e2.data); gnutls_privkey_deinit(key); /* ECC */ @@ -319,7 +397,7 @@ int check_privkey_import_export(void) if (ret < 0) fail("error\n"); - ret = gnutls_privkey_export_ecc_raw(key, &curve, &x, &y, &p); + ret = gnutls_privkey_export_ecc_raw2(key, &curve, &x, &y, &p, 0); if (ret < 0) fail("error\n"); @@ -333,7 +411,126 @@ int check_privkey_import_export(void) gnutls_free(x.data); gnutls_free(y.data); gnutls_free(p.data); + + ret = gnutls_privkey_export_ecc_raw2(key, &curve, &x, &y, &p, GNUTLS_EXPORT_FLAG_NO_LZ); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_SECP256R1) { + fprintf(stderr, "unexpected curve value: %d\n", (int)curve); + exit(1); + } + CMP_NO_LZ("x", &x, ecc_x); + CMP_NO_LZ("y", &y, ecc_y); + CMP_NO_LZ("k", &p, ecc_k); + gnutls_free(x.data); + gnutls_free(y.data); + gnutls_free(p.data); + gnutls_privkey_deinit(key); + + /* Ed25519 */ + ret = gnutls_privkey_init(&key); + if (ret < 0) + fail("error\n"); + + /* test whether an invalid size would fail */ + ret = gnutls_privkey_import_ecc_raw(key, GNUTLS_ECC_CURVE_ED25519, &_rsa_m, NULL, &_rsa_m); + if (ret != GNUTLS_E_INVALID_REQUEST) + fail("error\n"); + + ret = gnutls_privkey_import_ecc_raw(key, GNUTLS_ECC_CURVE_ED25519, &_ed25519_x, NULL, &_ed25519_k); + if (ret < 0) + fail("error\n"); + + ret = gnutls_privkey_verify_params(key); + if (ret != 0) + fail("error: %s\n", gnutls_strerror(ret)); + + ret = gnutls_privkey_export_ecc_raw(key, &curve, &x, NULL, &p); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_ED25519) { + fail("unexpected curve value: %d\n", (int)curve); + } + CMP("x", &x, ed25519_x); + CMP("k", &p, ed25519_k); + gnutls_free(x.data); + gnutls_free(p.data); + gnutls_privkey_deinit(key); + + /* Ed25519 with incorrect public key */ + ret = gnutls_privkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_privkey_import_ecc_raw(key, GNUTLS_ECC_CURVE_ED25519, &_false_ed25519_x, NULL, &_ed25519_k); + if (ret < 0) + fail("error\n"); + + ret = gnutls_privkey_verify_params(key); + if (ret != GNUTLS_E_ILLEGAL_PARAMETER) + fail("error: %s\n", gnutls_strerror(ret)); + + gnutls_privkey_deinit(key); + + /* GOST */ +#ifdef ENABLE_GOST + ret = gnutls_privkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_privkey_import_gost_raw(key, GNUTLS_ECC_CURVE_GOST256CPXA, GNUTLS_DIG_GOSTR_94, GNUTLS_GOST_PARAMSET_CP_A, &_gost_x, &_gost_y, &_gost_k); + if (ret < 0) + fail("error\n"); + + ret = gnutls_privkey_export_gost_raw2(key, &curve, &digest, ¶mset, &x, &y, &p, 0); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_GOST256CPXA) { + fprintf(stderr, "unexpected curve value: %d\n", (int)curve); + exit(1); + } + if (digest != GNUTLS_DIG_GOSTR_94) { + fprintf(stderr, "unexpected digest value: %d\n", (int)digest); + exit(1); + } + if (paramset != GNUTLS_GOST_PARAMSET_CP_A) { + fprintf(stderr, "unexpected paramset value: %d\n", (int)paramset); + exit(1); + } + CMP("x", &x, gost_x); + CMP("y", &y, gost_y); + CMP("k", &p, gost_k); + gnutls_free(x.data); + gnutls_free(y.data); + gnutls_free(p.data); + + ret = gnutls_privkey_export_gost_raw2(key, &curve, &digest, ¶mset, &x, &y, &p, GNUTLS_EXPORT_FLAG_NO_LZ); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_GOST256CPXA) { + fprintf(stderr, "unexpected curve value: %d\n", (int)curve); + exit(1); + } + if (digest != GNUTLS_DIG_GOSTR_94) { + fprintf(stderr, "unexpected digest value: %d\n", (int)digest); + exit(1); + } + if (paramset != GNUTLS_GOST_PARAMSET_CP_A) { + fprintf(stderr, "unexpected paramset value: %d\n", (int)paramset); + exit(1); + } + CMP_NO_LZ("x", &x, gost_x); + CMP_NO_LZ("y", &y, gost_y); + CMP_NO_LZ("k", &p, gost_k); + gnutls_free(x.data); + gnutls_free(y.data); + gnutls_free(p.data); gnutls_privkey_deinit(key); +#endif return 0; } @@ -348,6 +545,8 @@ int check_dsa(void) global_init(); + success("Checking DSA key operations\n"); + ret = gnutls_privkey_init(&key); if (ret < 0) fail("error\n"); @@ -364,7 +563,7 @@ int check_dsa(void) if (ret < 0) fail("error\n"); - ret = gnutls_pubkey_export_dsa_raw(pub, &p, &q, &g, &y); + ret = gnutls_pubkey_export_dsa_raw2(pub, &p, &q, &g, &y, 0); if (ret < 0) fail("error\n"); @@ -377,6 +576,19 @@ int check_dsa(void) gnutls_free(g.data); gnutls_free(y.data); + ret = gnutls_pubkey_export_dsa_raw2(pub, &p, &q, &g, &y, GNUTLS_EXPORT_FLAG_NO_LZ); + if (ret < 0) + fail("error\n"); + + CMP_NO_LZ("p", &p, dsa_p); + CMP_NO_LZ("q", &q, dsa_q); + CMP_NO_LZ("g", &g, dsa_g); + CMP_NO_LZ("y", &y, dsa_y); + gnutls_free(p.data); + gnutls_free(q.data); + gnutls_free(g.data); + gnutls_free(y.data); + ret = gnutls_privkey_export_dsa_raw(key, &p, &q, &g, &y, &x); if (ret < 0) fail("error\n"); @@ -391,6 +603,11 @@ int check_dsa(void) gnutls_free(y.data); gnutls_free(x.data); + ret = _gnutls_privkey_export2_pkcs8(key, GNUTLS_X509_FMT_DER, NULL, 0, &x); + if (ret < 0 || x.size == 0) + fail("error in pkcs8 export\n"); + gnutls_free(x.data); + gnutls_privkey_deinit(key); gnutls_pubkey_deinit(pub); @@ -404,6 +621,9 @@ int check_rsa(void) gnutls_pubkey_t pub; gnutls_datum_t m, e, d, p, q, u, e1, e2; int ret; + + success("Checking RSA key operations\n"); + /* RSA */ ret = gnutls_privkey_init(&key); if (ret < 0) @@ -421,7 +641,7 @@ int check_rsa(void) if (ret < 0) fail("error\n"); - ret = gnutls_pubkey_export_rsa_raw(pub, &m, &e); + ret = gnutls_pubkey_export_rsa_raw2(pub, &m, &e, 0); if (ret < 0) fail("error\n"); @@ -430,6 +650,15 @@ int check_rsa(void) gnutls_free(m.data); gnutls_free(e.data); + ret = gnutls_pubkey_export_rsa_raw2(pub, &m, &e, GNUTLS_EXPORT_FLAG_NO_LZ); + if (ret < 0) + fail("error\n"); + + CMP_NO_LZ("m", &m, rsa_m); + CMP_NO_LZ("e", &e, rsa_e); + gnutls_free(m.data); + gnutls_free(e.data); + ret = gnutls_privkey_export_rsa_raw(key, &m, &e, &d, &p, &q, &u, &e1, &e2); if (ret < 0) fail("error\n"); @@ -451,6 +680,11 @@ int check_rsa(void) gnutls_free(e1.data); gnutls_free(e2.data); + ret = _gnutls_privkey_export2_pkcs8(key, GNUTLS_X509_FMT_DER, NULL, 0, &m); + if (ret < 0 || m.size == 0) + fail("error in pkcs8 export\n"); + gnutls_free(m.data); + gnutls_privkey_deinit(key); gnutls_pubkey_deinit(pub); @@ -466,6 +700,8 @@ int check_ecc(void) gnutls_ecc_curve_t curve; int ret; + success("Checking SECP256R1 key operations\n"); + /* ECC */ ret = gnutls_privkey_init(&key); if (ret < 0) @@ -475,7 +711,7 @@ int check_ecc(void) if (ret < 0) fail("error\n"); - ret = gnutls_privkey_import_x509_raw(key, &ecc_key, GNUTLS_X509_FMT_PEM, 0, 0); + ret = gnutls_privkey_import_x509_raw(key, &server_ecc_key, GNUTLS_X509_FMT_PEM, 0, 0); if (ret < 0) fail("error\n"); @@ -483,7 +719,7 @@ int check_ecc(void) if (ret < 0) fail("error\n"); - ret = gnutls_pubkey_export_ecc_raw(pub, &curve, &x, &y); + ret = gnutls_pubkey_export_ecc_raw2(pub, &curve, &x, &y, 0); if (ret < 0) fail("error\n"); @@ -496,6 +732,19 @@ int check_ecc(void) gnutls_free(x.data); gnutls_free(y.data); + ret = gnutls_pubkey_export_ecc_raw2(pub, &curve, &x, &y, GNUTLS_EXPORT_FLAG_NO_LZ); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_SECP256R1) { + fprintf(stderr, "unexpected curve value: %d\n", (int)curve); + exit(1); + } + CMP_NO_LZ("x", &x, ecc_x); + CMP_NO_LZ("y", &y, ecc_y); + gnutls_free(x.data); + gnutls_free(y.data); + /* check the private key export */ ret = gnutls_privkey_export_ecc_raw(key, &curve, &x, &y, &k); @@ -513,6 +762,11 @@ int check_ecc(void) gnutls_free(y.data); gnutls_free(k.data); + ret = _gnutls_privkey_export2_pkcs8(key, GNUTLS_X509_FMT_DER, NULL, 0, &x); + if (ret < 0 || x.size == 0) + fail("error in pkcs8 export\n"); + gnutls_free(x.data); + gnutls_privkey_deinit(key); /* More public key ops */ @@ -549,6 +803,206 @@ int check_ecc(void) return 0; } +static +int check_ed25519(void) +{ + gnutls_privkey_t key; + gnutls_pubkey_t pub; + gnutls_datum_t y, x, k; + gnutls_ecc_curve_t curve; + int ret; + + success("Checking ed25519 key operations\n"); + + /* ECC */ + ret = gnutls_privkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_pubkey_init(&pub); + if (ret < 0) + fail("error\n"); + + ret = gnutls_privkey_import_x509_raw(key, &server_ca3_eddsa_key, GNUTLS_X509_FMT_PEM, 0, 0); + if (ret < 0) + fail("error\n"); + + ret = gnutls_pubkey_import_privkey(pub, key, 0, 0); + if (ret < 0) + fail("error\n"); + + ret = gnutls_pubkey_export_ecc_raw(pub, &curve, &x, NULL); + if (ret < 0) + fail("error\n"); + gnutls_free(x.data); + + ret = gnutls_pubkey_export_ecc_raw(pub, &curve, &x, &y); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_ED25519) { + fail("unexpected curve value: %d\n", (int)curve); + } + CMP("x", &x, ed25519_x); + + if (y.data != NULL) { + fail("expected NULL value in Y\n"); + } + gnutls_free(x.data); + + + /* check the private key export */ + ret = gnutls_privkey_export_ecc_raw(key, &curve, &x, NULL, &k); + if (ret < 0) + fail("error\n"); + gnutls_free(x.data); + gnutls_free(k.data); + + ret = gnutls_privkey_export_ecc_raw(key, &curve, &x, &y, &k); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_ED25519) { + fail("unexpected curve value: %d\n", (int)curve); + } + CMP("x", &x, ed25519_x); + CMP("k", &k, ed25519_k); + gnutls_free(x.data); + gnutls_free(k.data); + + if (y.data != NULL) { + fail("expected NULL value in Y\n"); + } + + ret = _gnutls_privkey_export2_pkcs8(key, GNUTLS_X509_FMT_DER, NULL, 0, &x); + if (ret < 0 || x.size == 0) + fail("error in pkcs8 export\n"); + gnutls_free(x.data); + + gnutls_privkey_deinit(key); + + /* More public key ops */ + + ret = gnutls_pubkey_export_ecc_x962(pub, &x, &y); + if (ret != GNUTLS_E_INVALID_REQUEST) + fail("error\n"); + + gnutls_pubkey_deinit(pub); + + return 0; +} + +static +int check_gost(void) +{ +#ifdef ENABLE_GOST + gnutls_privkey_t key; + gnutls_pubkey_t pub; + gnutls_datum_t y, x, k; + gnutls_ecc_curve_t curve; + gnutls_digest_algorithm_t digest; + gnutls_gost_paramset_t paramset; + int ret; + + success("Checking GOST key operations\n"); + + /* ECC */ + ret = gnutls_privkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_pubkey_init(&pub); + if (ret < 0) + fail("error\n"); + + ret = gnutls_privkey_import_x509_raw(key, &server_ca3_gost01_key, GNUTLS_X509_FMT_PEM, 0, 0); + if (ret < 0) + fail("error\n"); + + ret = gnutls_pubkey_import_privkey(pub, key, 0, 0); + if (ret < 0) + fail("error\n"); + + ret = gnutls_pubkey_export_gost_raw2(pub, &curve, &digest, ¶mset, &x, &y, 0); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_GOST256CPXA) { + fprintf(stderr, "unexpected curve value: %d\n", (int)curve); + exit(1); + } + if (digest != GNUTLS_DIG_GOSTR_94) { + fprintf(stderr, "unexpected digest value: %d\n", (int)digest); + exit(1); + } + if (paramset != GNUTLS_GOST_PARAMSET_CP_A) { + fprintf(stderr, "unexpected paramset value: %d\n", (int)paramset); + exit(1); + } + CMP("x", &x, gost_x); + CMP("y", &y, gost_y); + gnutls_free(x.data); + gnutls_free(y.data); + + ret = gnutls_pubkey_export_gost_raw2(pub, &curve, &digest, ¶mset, &x, &y, GNUTLS_EXPORT_FLAG_NO_LZ); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_GOST256CPXA) { + fprintf(stderr, "unexpected curve value: %d\n", (int)curve); + exit(1); + } + if (digest != GNUTLS_DIG_GOSTR_94) { + fprintf(stderr, "unexpected digest value: %d\n", (int)digest); + exit(1); + } + if (paramset != GNUTLS_GOST_PARAMSET_CP_A) { + fprintf(stderr, "unexpected paramset value: %d\n", (int)paramset); + exit(1); + } + CMP_NO_LZ("x", &x, gost_x); + CMP_NO_LZ("y", &y, gost_y); + gnutls_free(x.data); + gnutls_free(y.data); + + + /* check the private key export */ + ret = gnutls_privkey_export_gost_raw2(key, &curve, &digest, ¶mset, &x, &y, &k, 0); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_GOST256CPXA) { + fprintf(stderr, "unexpected curve value: %d\n", (int)curve); + exit(1); + } + if (digest != GNUTLS_DIG_GOSTR_94) { + fprintf(stderr, "unexpected digest value: %d\n", (int)digest); + exit(1); + } + if (paramset != GNUTLS_GOST_PARAMSET_CP_A) { + fprintf(stderr, "unexpected paramset value: %d\n", (int)paramset); + exit(1); + } + CMP("x", &x, gost_x); + CMP("y", &y, gost_y); + CMP("k", &k, gost_k); + gnutls_free(x.data); + gnutls_free(y.data); + gnutls_free(k.data); + + ret = _gnutls_privkey_export2_pkcs8(key, GNUTLS_X509_FMT_DER, NULL, 0, &x); + if (ret < 0 || x.size == 0) + fail("error in pkcs8 export\n"); + gnutls_free(x.data); + + gnutls_privkey_deinit(key); + + gnutls_pubkey_deinit(pub); +#endif + + return 0; +} + void doit(void) { if (check_x509_privkey() != 0) { @@ -562,17 +1016,24 @@ void doit(void) } if (check_dsa() != 0) { - fail("error in pubkey check\n"); + fail("error in DSA check\n"); exit(1); } if (check_rsa() != 0) { - fail("error in pubkey check\n"); + fail("error in RSA check\n"); exit(1); } if (check_ecc() != 0) { - fail("error in pubkey check\n"); - exit(1); + fail("error in ecdsa check\n"); + } + + if (check_ed25519() != 0) { + fail("error in ed25519 check\n"); + } + + if (check_gost() != 0) { + fail("error in gost check\n"); } } diff --git a/tests/key-material-dtls.c b/tests/key-material-dtls.c index a9ea96083c..195afd0795 100644 --- a/tests/key-material-dtls.c +++ b/tests/key-material-dtls.c @@ -309,7 +309,7 @@ static void server(int fd) * are adequate. */ ret = gnutls_priority_set_direct(session, - "NORMAL:+ANON-DH:+ANON-ECDH", NULL); + "NORMAL:+VERS-DTLS1.0:+ANON-DH:+ANON-ECDH", NULL); if (ret < 0) { fail("server: priority set failed (%s)\n\n", gnutls_strerror(ret)); @@ -341,7 +341,7 @@ static void server(int fd) do { ret = gnutls_record_recv(session, buf, sizeof(buf)); - } while(ret > 0); + } while(ret > 0 || ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); if (ret < 0) { fail("error: %s\n", gnutls_strerror(ret)); diff --git a/tests/key-material-set-dtls.c b/tests/key-material-set-dtls.c index 5c46a6a127..4a569162bb 100644 --- a/tests/key-material-set-dtls.c +++ b/tests/key-material-set-dtls.c @@ -42,6 +42,7 @@ int main(int argc, char **argv) #include #include #include +#include #include #include @@ -254,7 +255,7 @@ static void server(int fd) * are adequate. */ ret = gnutls_priority_set_direct(session, - "NORMAL:+ANON-DH:+ANON-ECDH", NULL); + "NORMAL:+VERS-DTLS1.0:+ANON-DH:+ANON-ECDH", NULL); if (ret < 0) { fail("server: priority set failed (%s)\n\n", gnutls_strerror(ret)); @@ -354,6 +355,8 @@ static void start(void) int fd[2]; int ret; + signal(SIGPIPE, SIG_IGN); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { perror("socketpair"); diff --git a/tests/key-tests/Makefile.am b/tests/key-tests/Makefile.am deleted file mode 100644 index 1ff28b5863..0000000000 --- a/tests/key-tests/Makefile.am +++ /dev/null @@ -1,57 +0,0 @@ -## Process this file with automake to produce Makefile.in -# Copyright (C) 2007-2008, 2010, 2012 Free Software Foundation, Inc. -# -# Author: Simon Josefsson -# -# This file is part of GnuTLS. -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This file is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this file; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -EXTRA_DIST = data/key-ca.pem data/key-user.pem \ - data/ca-gnutls-keyid.pem data/ca-no-keyid.pem data/ca-weird-keyid.pem \ - data/key-ca-1234.p8 data/key-ca-empty.p8 data/key-ca-null.p8 \ - data/openssl-key-ecc.p8 data/key-ecc.p8 data/key-ecc.pem suppressions.valgrind \ - data/encpkcs8.pem data/unencpkcs8.pem data/enc2pkcs8.pem \ - data/openssl-3des.p8 data/openssl-3des.p8.txt data/openssl-aes128.p8 \ - data/openssl-aes128.p8.txt data/openssl-aes256.p8 data/openssl-aes256.p8.txt \ - data/cert.dsa.1024.pem data/cert.dsa.2048.pem data/cert.dsa.3072.pem \ - data/dsa.1024.pem data/dsa.2048.pem data/dsa.3072.pem data/dsa-pubkey-1018.pem \ - data/bad-key.pem data/p8key-illegal.pem data/key-illegal.pem data/pkcs8-pbes2-sha256.pem \ - data/pkcs8-pbes1-des-md5.pem data/pkcs8-invalid8.der data/key-invalid1.der \ - data data/pkcs8-invalid9.der data/key-invalid2.der data/pkcs8-invalid10.der \ - data/key-invalid3.der - -dist_check_SCRIPTS = key-id pkcs8 pkcs8-decode dsa ecdsa illegal-rsa pkcs8-invalid key-invalid - -TESTS = key-id ecdsa pkcs8-invalid key-invalid pkcs8-decode pkcs8 - -if !WITH_OLD_NETTLE -TESTS += illegal-rsa -endif - -if !WINDOWS -TESTS += dsa -endif - -TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) \ - ASAN_OPTIONS="detect_leaks=0:exitcode=6" \ - LC_ALL="C" \ - VALGRIND="$(VALGRIND)" \ - top_builddir="$(top_builddir)" \ - srcdir="$(srcdir)" - -if WANT_TEST_SUITE -LOG_COMPILER = $(VALGRIND) -endif diff --git a/tests/key-tests/data/key-ca.pem b/tests/key-tests/data/key-ca.pem deleted file mode 100644 index 88e775c78c..0000000000 --- a/tests/key-tests/data/key-ca.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIBPAIBAAJBAMaUBiinUSQ5sVoBVJtQ1BcMTd+sQgAH5XIw3IgtghaA2iNHqEZ8 -yIhPD2rStIaX25SHhTUvUeccM35rHAAHG7sCAwEAAQJAP/UlFqrtI3HBgW+0RGIA -LXw1CLl+eGwSpni+Ts35fC1qEYCsjSwAzeNucV5urXnTTmsboHNIig54MnwbL1Sn -YQIhAMtdpCtbFilcdidYBegCa3AMrkxQfNsi8k1fuhYXEYZlAiEA+fksjyNHytun -RjnwW6EIRNCWfiynfPWoiZhbYOCqZ58CIQCkC/ucRbPQ1ZcyEZ1iFGGaV4Baayrs -knom1CuGGkG2yQIhAKnTKv6jzWZ4DBCd1DmsEV4PB+74j2FJ1BKGu635dEupAiEA -trFNqR7VOm9kt+mjcsenUzJXaarFnRog/E9qAjguU/U= ------END RSA PRIVATE KEY----- diff --git a/tests/key-tests/data/key-user.pem b/tests/key-tests/data/key-user.pem deleted file mode 100644 index e375860987..0000000000 --- a/tests/key-tests/data/key-user.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIBOwIBAAJBAPNKtqHQHldXWXn+jhOb9GY0inTHrlwpJ0Odjv58nVj7b5L6bvWH -OeSseVevdOg6ZeBeCr6WY/41i5u3u5hHykECAwEAAQJAUM4k4JOmMC4z6r/wYnTu -9K9IuUbFE5kbkGqZXs721+FtQrgFk/qZqs9fTSKX17l+gG0G9I6VkdYtCMHM5iAj -nQIhAPmJceliytoZXGNVPbY9gj9kfi5JYRRmUOQVSFkpkRr/AiEA+ZfcU5zfJMXn -ADXpTnzJ+itvbxwT34S/2B8/KDF5Wr8CIDRrOgGj3ib4ot6+/kq1GxJEAvmoMnt9 -jsqK6frI75FzAiEAjhPODaKMu2gUOOB3cIBEkS3MfxkijugINMSEtSKEjA0CIQCY -BFmcfpV0GQyLySiglPgCxqjhoKvgBB3NVz4BdxUFmw== ------END RSA PRIVATE KEY----- diff --git a/tests/key-tests/illegal-rsa b/tests/key-tests/illegal-rsa deleted file mode 100755 index 9e6a5b6895..0000000000 --- a/tests/key-tests/illegal-rsa +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2016 Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# GnuTLS is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at -# your option) any later version. -# -# GnuTLS is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -srcdir="${srcdir:-.}" -CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" -GREP="${GREP:-grep}" - -if ! test -x "${CERTTOOL}"; then - exit 77 -fi - -if ! test -z "${VALGRIND}"; then - VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=1" -fi - -TMPFILE=tmp-key.$$.p8 - -${VALGRIND} "${CERTTOOL}" -k --password 1234 --infile "${srcdir}/data/p8key-illegal.pem" -rc=$? -# We're done. -if test "${rc}" != "1"; then - echo "Error in importing illegal PKCS#8 key" - exit ${rc} -fi - -#check invalid RSA pem key. The key has even prime factor. -${VALGRIND} "${CERTTOOL}" -k --infile "${srcdir}/data/key-illegal.pem" -rc=$? -# We're done. -if test "${rc}" != "1"; then - echo "Error in importing illegal RSA key" - exit ${rc} -fi - -rm -f $TMPFILE - -exit 0 diff --git a/tests/key-tests/suppressions.valgrind b/tests/key-tests/suppressions.valgrind deleted file mode 100644 index 12b43e651d..0000000000 --- a/tests/key-tests/suppressions.valgrind +++ /dev/null @@ -1,24 +0,0 @@ -# suppressions -- Valgrind suppresion file for libgcrypt - -# Copyright (C) 2015 Red Hat, Inc. - -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. - -{ - - Memcheck:Addr4 - fun:idna_to_ascii_4z - fun:idna_to_ascii_8z - fun:gnutls_x509_crt_check_email - ... -} -{ - ld-uncond-jump - Memcheck:Cond - fun:index - fun:expand_dynamic_string_token - fun:fillin_rpath - ... -} diff --git a/tests/key-usage-ecdhe-rsa.c b/tests/key-usage-ecdhe-rsa.c index 65534d3f8b..4926d2be9a 100644 --- a/tests/key-usage-ecdhe-rsa.c +++ b/tests/key-usage-ecdhe-rsa.c @@ -108,7 +108,6 @@ const gnutls_datum_t enc_key = { encryption_key_pem, static void server_check(void) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -135,7 +134,7 @@ void server_check(void) gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); gnutls_priority_set_direct(server, - "NORMAL:-KX-ALL:+ECDHE-RSA", + "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -159,7 +158,7 @@ void server_check(void) if (ret < 0) exit(1); - gnutls_priority_set_direct(client, "NORMAL:+ECDHE-RSA", NULL); + gnutls_priority_set_direct(client, "NORMAL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -176,13 +175,6 @@ void server_check(void) gnutls_certificate_free_credentials(clientx509cred); gnutls_global_deinit(); - - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } } static gnutls_privkey_t g_pkey = NULL; @@ -233,7 +225,6 @@ cert_callback(gnutls_session_t session, static void client_check(void) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -258,7 +249,7 @@ void client_check(void) gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); gnutls_priority_set_direct(server, - "NORMAL:-KX-ALL:+ECDHE-RSA:%DEBUG_ALLOW_KEY_USAGE_VIOLATIONS", + "NORMAL:-KX-ALL:+ECDHE-RSA:%DEBUG_ALLOW_KEY_USAGE_VIOLATIONS:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -282,7 +273,7 @@ void client_check(void) if (ret < 0) exit(1); - gnutls_priority_set_direct(client, "NORMAL:+ECDHE-RSA", NULL); + gnutls_priority_set_direct(client, "NORMAL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -299,13 +290,6 @@ void client_check(void) gnutls_certificate_free_credentials(clientx509cred); gnutls_global_deinit(); - - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } } void doit(void) diff --git a/tests/key-usage-rsa.c b/tests/key-usage-rsa.c index 9c16a496d4..5eb2cfef83 100644 --- a/tests/key-usage-rsa.c +++ b/tests/key-usage-rsa.c @@ -147,7 +147,6 @@ const gnutls_datum_t server_key = { server_key_pem, static void server_check(void) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -174,7 +173,7 @@ void server_check(void) gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); gnutls_priority_set_direct(server, - "NORMAL:-KX-ALL:+RSA", + "NORMAL:-KX-ALL:+RSA:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -198,7 +197,7 @@ void server_check(void) if (ret < 0) exit(1); - gnutls_priority_set_direct(client, "NORMAL:+RSA", NULL); + gnutls_priority_set_direct(client, "NORMAL:+RSA:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -215,13 +214,6 @@ void server_check(void) gnutls_certificate_free_credentials(clientx509cred); gnutls_global_deinit(); - - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } } static gnutls_privkey_t g_pkey = NULL; @@ -272,7 +264,6 @@ cert_callback(gnutls_session_t session, static void client_check(void) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -297,7 +288,7 @@ void client_check(void) gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); gnutls_priority_set_direct(server, - "NORMAL:-KX-ALL:+RSA:%DEBUG_ALLOW_KEY_USAGE_VIOLATIONS", + "NORMAL:-KX-ALL:+RSA:%DEBUG_ALLOW_KEY_USAGE_VIOLATIONS:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -321,7 +312,7 @@ void client_check(void) if (ret < 0) exit(1); - gnutls_priority_set_direct(client, "NORMAL:+RSA", NULL); + gnutls_priority_set_direct(client, "NORMAL:+RSA:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -338,13 +329,6 @@ void client_check(void) gnutls_certificate_free_credentials(clientx509cred); gnutls_global_deinit(); - - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } } void doit(void) diff --git a/tests/keylog-env.c b/tests/keylog-env.c index 2b0d166982..5f5f74e176 100644 --- a/tests/keylog-env.c +++ b/tests/keylog-env.c @@ -24,6 +24,7 @@ #include #endif +#include #include #include #include @@ -43,7 +44,7 @@ #include "utils.h" #include "cert-common.h" -/* Test for GNUTLS_KEYLOGFILE being functional. +/* Test for SSLKEYLOGFILE being functional. * */ @@ -52,8 +53,23 @@ static void tls_log_func(int level, const char *str) fprintf(stderr, "<%d>| %s", level, str); } -#define LSTR "CLIENT_RANDOM " -static void search_for_str(const char *filename) +/* In TLS 1.2, we only expect CLIENT_RANDOM. */ +static const char *tls12_included_labels[] = { "CLIENT_RANDOM", NULL }; +static const char *tls12_excluded_labels[] = { NULL }; + +/* In TLS 1.3, we expect secrets derived in handshake phases, but not + * CLIENT_RANDOM. */ +static const char *tls13_included_labels[] = { + "CLIENT_HANDSHAKE_TRAFFIC_SECRET", + "SERVER_HANDSHAKE_TRAFFIC_SECRET", + "CLIENT_TRAFFIC_SECRET_0", + "SERVER_TRAFFIC_SECRET_0", + "EXPORTER_SECRET", + NULL +}; +static const char *tls13_excluded_labels[] = { "CLIENT_RANDOM", NULL }; + +static void search_for_str(const char *filename, const char *label, bool excluded) { char line[512]; FILE *fp = fopen(filename, "r"); @@ -61,35 +77,37 @@ static void search_for_str(const char *filename) while( (p = fgets(line, sizeof(line), fp)) != NULL) { success("%s", line); - if (strncmp(line, LSTR, sizeof(LSTR)-1) == 0) { + if (strncmp(line, label, strlen(label)) == 0 && + line[strlen(label)] == ' ') { fclose(fp); + if (excluded) + fail("file should not contain %s\n", label); return; } } fclose(fp); - fail("file did not contain CLIENT_RANDOM\n"); + if (!excluded) + fail("file should contain %s\n", label); } -static void run(const char *env, const char *filename) +static void run(const char *filename, const char *prio, + const char **included, const char **excluded) { gnutls_certificate_credentials_t x509_cred; gnutls_certificate_credentials_t clicred; + const char **p; int ret; - remove(filename); - #ifdef _WIN32 { char buf[512]; - snprintf(buf, sizeof(buf), "%s=%s", env, filename); + snprintf(buf, sizeof(buf), "SSLKEYLOGFILE=%s", filename); _putenv(buf); } #else - setenv(env, filename, 1); + setenv("SSLKEYLOGFILE", filename, 1); #endif - global_init(); - if (debug) { gnutls_global_set_log_level(6); gnutls_global_set_log_function(tls_log_func); @@ -112,21 +130,21 @@ static void run(const char *env, const char *filename) fail("set_x509_trust_file failed: %s\n", gnutls_strerror(ret)); - test_cli_serv(x509_cred, clicred, "NORMAL", "localhost", NULL, NULL, NULL); + test_cli_serv(x509_cred, clicred, prio, "localhost", NULL, NULL, NULL); if (access(filename, R_OK) != 0) { fail("keylog file was not created\n"); exit(1); } - search_for_str(filename); + for (p = included; *p; p++) + search_for_str(filename, *p, false); + for (p = excluded; *p; p++) + search_for_str(filename, *p, true); gnutls_certificate_free_credentials(x509_cred); gnutls_certificate_free_credentials(clicred); - gnutls_global_deinit(); - remove(filename); - if (debug) success("success"); } @@ -137,5 +155,23 @@ void doit(void) assert(get_tmpname(filename)!=NULL); - run("SSLKEYLOGFILE", filename); + remove(filename); + global_init(); + + run(filename, + "NONE:+VERS-TLS1.2:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+RSA", + tls12_included_labels, tls12_excluded_labels); + + /* This is needed because the SSLKEYLOGFILE envvar is checked + * only once and the file is never closed until the library is + * unloaded. Truncate the file to zero length, so we can + * reuse the same file for multiple tests. */ + truncate(filename, 0); + + run(filename, + "NONE:+VERS-TLS1.3:+AES-256-GCM:+AEAD:+SIGN-ALL:+GROUP-ALL", + tls13_included_labels, tls13_excluded_labels); + + gnutls_global_deinit(); + remove(filename); } diff --git a/tests/keylog-func.c b/tests/keylog-func.c new file mode 100644 index 0000000000..4350698e6b --- /dev/null +++ b/tests/keylog-func.c @@ -0,0 +1,351 @@ +/* + * Copyright (C) 2019 Free Software Foundation, Inc. + * + * Author: Aniketh Girish + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#if !defined(__linux__) || !defined(__GNUC__) + +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" + +/* This program tests whether a keylog function is called. + */ + +static void terminate(void); + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +const char *side = ""; + +/* These are global */ +static pid_t child; +#define MAX_BUF 1024 +#define MSG "Hello TLS" + +static int +keylog_func(gnutls_session_t session, + const char *label, + const gnutls_datum_t *secret) +{ + unsigned int *call_count = gnutls_session_get_ptr(session); + static const char *exp_labels[] = { + "CLIENT_HANDSHAKE_TRAFFIC_SECRET", + "SERVER_HANDSHAKE_TRAFFIC_SECRET", + "EXPORTER_SECRET", + "CLIENT_TRAFFIC_SECRET_0", + "SERVER_TRAFFIC_SECRET_0" + }; + + if (*call_count >= sizeof(exp_labels)/sizeof(exp_labels[0])) + fail("unexpected secret at call count %u\n", + *call_count); + + if (strcmp(label, exp_labels[*call_count]) != 0) + fail("unexpected %s at call count %u\n", + label, *call_count); + else if (debug) + success("received %s at call count %u\n", + label, *call_count); + + (*call_count)++; + return 0; +} + +static void client(int fd, const char *prio, unsigned int exp_call_count) +{ + gnutls_session_t session; + char buffer[MAX_BUF + 1]; + unsigned int call_count = 0; + int ret, ii; + gnutls_certificate_credentials_t clientx509cred; + const char *err; + /* Need to enable anonymous KX specifically. */ + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&clientx509cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + gnutls_session_set_ptr(session, &call_count); + + /* Use default priorities */ + ret = gnutls_priority_set_direct(session, prio, &err); + if (ret < 0) { + fail("client: priority set failed (%s): %s\n", + gnutls_strerror(ret), err); + exit(1); + } + + ret = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + gnutls_transport_set_int(session, fd); + + gnutls_session_set_keylog_function(session, keylog_func); + assert(gnutls_session_get_keylog_function(session) == keylog_func); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + gnutls_record_send(session, MSG, strlen(MSG)); + + do { + ret = gnutls_record_recv(session, buffer, MAX_BUF); + } while (ret == GNUTLS_E_AGAIN); + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + } + + if (debug) { + printf("- Received %d bytes: ", ret); + for (ii = 0; ii < ret; ii++) { + fputc(buffer[ii], stdout); + } + fputs("\n", stdout); + } + + if (call_count != exp_call_count) + fail("secret hook is not called %u times (%u)\n", + call_count, exp_call_count); + + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} + +static void server(int fd, const char *prio, unsigned int exp_call_count) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + unsigned int call_count = 0; + gnutls_certificate_credentials_t serverx509cred; + + /* this must be called once in the program + */ + global_init(); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&serverx509cred); + + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_session_set_ptr(session, &call_count); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + ret = gnutls_priority_set_direct(session, + "NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA384:-GROUP-ALL:+GROUP-SECP256R1", NULL); + if (ret < 0) { + fail("server: priority set failed (%s)\n\n", + gnutls_strerror(ret)); + terminate(); + } + + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + gnutls_transport_set_int(session, fd); + + gnutls_session_set_keylog_function(session, keylog_func); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + terminate(); + } + if (debug) { + success("server: Handshake was completed\n"); + } + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + memset(buffer, 0, MAX_BUF + 1); + + do { + ret = gnutls_record_recv(session, buffer, MAX_BUF); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret == 0) { + if (debug) + success("server: Peer has closed the GnuTLS connection\n"); + } else if (ret < 0) { + fail("server: Received corrupted data(%d). Closing...\n", ret); + } else if (ret > 0) { + /* echo data back to the client + */ + gnutls_record_send(session, buffer, + strlen(buffer)); + } + + if (call_count != exp_call_count) + fail("secret hook is not called %u times (%u)\n", + call_count, exp_call_count); + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(serverx509cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void terminate(void) +{ + int status = 0; + + kill(child, SIGTERM); + wait(&status); + exit(1); +} + +static void +run(const char *prio, unsigned int exp_call_count) +{ + int fd[2]; + int ret; + + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + int status = 0; + /* parent */ + + server(fd[0], prio, exp_call_count); + wait(&status); + check_wait_status(status); + } else { + close(fd[0]); + client(fd[1], prio, exp_call_count); + exit(0); + } +} + +void doit(void) +{ + run("NORMAL:-VERS-ALL:+VERS-TLS1.3", 5); +} + +#endif /* _WIN32 */ diff --git a/tests/logfile-option.sh b/tests/logfile-option.sh new file mode 100755 index 0000000000..1eb7a492f7 --- /dev/null +++ b/tests/logfile-option.sh @@ -0,0 +1,169 @@ +#!/bin/sh + +# Copyright (C) 2010-2016 Free Software Foundation, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +unset RETCODE + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + + +SERV="${SERV} -q" + +. "${srcdir}/scripts/common.sh" + +echo "Checking whether logfile option works." + +KEY1=${srcdir}/../doc/credentials/x509/example.com-key.pem +CERT1=${srcdir}/../doc/credentials/x509/example.com-cert.pem +CA1=${srcdir}/../doc/credentials/x509/ca.pem +PSK=${srcdir}/psk.passwd + +TMPFILE1=save-data1.$$.tmp +TMPFILE2=save-data2.$$.tmp + +OPTS="--sni-hostname example.com --verify-hostname example.com" + +eval "${GETPORT}" +launch_server $$ --echo --priority NORMAL:+ECDHE-PSK:+DHE-PSK:+PSK --pskpasswd=${PSK} +PID=$! +wait_server ${PID} + +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:+ECDHE-PSK:+DHE-PSK:+PSK --pskusername=jas --pskkey=9e32cf7786321a828ef7668f09fb35db ${TMPFILE2} + +kill ${PID} +wait + +if test -f ${TMPFILE1};then + echo "Logfile should not be created!" + exit 1 +fi +if ! test -s ${TMPFILE2};then + echo "Stdout should not be empty!" + exit 1 +fi +if grep -q "Handshake was completed" ${TMPFILE2};then + echo "Find the expected output!" +else + echo "Cannot find the expected output!" + exit 1 +fi + +rm -f ${TMPFILE1} ${TMPFILE2} + +eval "${GETPORT}" +launch_server $$ --echo --priority NORMAL:+ECDHE-PSK:+DHE-PSK:+PSK --pskpasswd=${PSK} +PID=$! +wait_server ${PID} + +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --logfile ${TMPFILE1} --priority NORMAL:+ECDHE-PSK:+DHE-PSK:+PSK --pskusername=jas --pskkey=9e32cf7786321a828ef7668f09fb35db ${TMPFILE2} + +kill ${PID} +wait + +if ! test -f ${TMPFILE1};then + echo "Logfile shoule be created!" + exit 1 +fi +if test -s ${TMPFILE2};then + echo "Stdout should be empty!" + exit 1 +fi + +if grep -q "Handshake was completed" ${TMPFILE1}; then + echo "Found the expected output!" +else + echo "Cannot find the expected output!" + exit 1 +fi +rm -f ${TMPFILE1} ${TMPFILE2} + + +echo "x509 functionality test" +eval "${GETPORT}" +launch_server $$ --echo --sni-hostname-fatal --sni-hostname example.com --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 ${OPTS} --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2" --x509cafile ${CA1} ${TMPFILE2} +kill ${PID} +wait + +if test -f ${TMPFILE1};then + echo "Logfile should not be created!" + exit 1 +fi +if ! test -s ${TMPFILE2};then + echo "Stdout should not be empty!" + exit 1 +fi +if grep -q "Handshake was completed" ${TMPFILE2};then + echo "Find the expected output!" +else + echo "Cannot find the expected output!" + exit 1 +fi + +rm -f ${TMPFILE1} ${TMPFILE2} + +eval "${GETPORT}" +launch_server $$ --echo --sni-hostname-fatal --sni-hostname example.com --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 ${OPTS} --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2" --x509cafile ${CA1} --logfile ${TMPFILE1} ${TMPFILE2} +kill ${PID} +wait + +if ! test -f ${TMPFILE1};then + echo "Logfile shoule be created!" + exit 1 +fi +if test -s ${TMPFILE2};then + echo "Stdout should be empty!" + exit 1 +fi + +if grep -q "Handshake was completed" ${TMPFILE1}; then + echo "Found the expected output!" +else + echo "Cannot find the expected output!" + exit 1 +fi +rm -f ${TMPFILE1} ${TMPFILE2} + +exit 0 diff --git a/tests/long-crl.sh b/tests/long-crl.sh new file mode 100755 index 0000000000..3abd910cbd --- /dev/null +++ b/tests/long-crl.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +# Copyright (C) 2014 Red Hat +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../src/certtool${EXEEXT}}" + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +. "${srcdir}/scripts/common.sh" + +TMPFILE=long.$$.pem.tmp + +${VALGRIND} "${CERTTOOL}" --crl-info --inder --infile "${srcdir}/data/long.crl" --outfile $TMPFILE +if test $? != 0; then + echo "CRL decoding failed 1!" + exit 1 +fi + +check_if_equal "${srcdir}/data/long.pem" $TMPFILE "^warning" +if test $? != 0; then + echo "CRL decoding failed 2!" + exit 1 +fi + +rm -f $TMPFILE + +exit 0 diff --git a/tests/long-session-id.c b/tests/long-session-id.c index 55f0641a45..6a4063343e 100644 --- a/tests/long-session-id.c +++ b/tests/long-session-id.c @@ -143,7 +143,7 @@ static void client(int fd, const char *prio) kill(getpid(), SIGSEGV); } - if (ret == GNUTLS_E_ILLEGAL_PARAMETER) { + if (ret == GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER) { fprintf(stderr, "client: Handshake failed (expected): %s\n", gnutls_strerror(ret)); goto cleanup; } else { @@ -243,7 +243,7 @@ void doit(void) signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); - start("NORMAL"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); } #endif /* _WIN32 */ diff --git a/tests/memset.c b/tests/memset.c new file mode 100644 index 0000000000..f49cde4fc6 --- /dev/null +++ b/tests/memset.c @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include +#include +#include + +#include "utils.h" + +#define BUF_SIZE 128 + +void func1(void); +void func2(void); + +static unsigned char *ptr; + +/* Checks whether gnutls_memset() call is being optimized + * out. + */ + +void func1(void) +{ + unsigned char buf[BUF_SIZE]; + ptr = buf; + + gnutls_memset(buf, CHAR, sizeof(buf)); +} + +void func2(void) +{ + if (ptr[0] != CHAR || ptr[2] != CHAR || ptr[16] != CHAR) + fail("previous memset failed!\n"); +} + +void doit(void) +{ +#if defined(__has_feature) +# if __has_feature(address_sanitizer) + exit(77); +# endif +#endif + +#if __SANITIZE_ADDRESS__ == 1 + exit(77); +#endif + + func1(); + func2(); + success("memset test succeeded\n"); +} diff --git a/tests/mini-alignment.c b/tests/mini-alignment.c deleted file mode 100644 index 4944660a95..0000000000 --- a/tests/mini-alignment.c +++ /dev/null @@ -1,514 +0,0 @@ -/* - * Copyright (C) 2004-2015 Free Software Foundation, Inc. - * Copyright (C) 2013 Adam Sampson - * Copyright (C) 2015 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -/* Tests whether memory input to ciphers are properly aligned */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#if defined(_WIN32) - -/* socketpair isn't supported on Win32. */ -int main(int argc, char **argv) -{ - exit(77); -} - -#else - -#include -#include -#include -#if !defined(_WIN32) -#include -#endif -#include -#include -#include -#include -#include -#include - -#include "utils.h" - -#include "ex-session-info.c" -#include "ex-x509-info.c" - -pid_t child; - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "%s |<%d>| %s", child ? "server" : "client", level, - str); -} - -/* A very basic TLS client, with anonymous authentication. - */ - - -#define MAX_BUF 1024 -#define MSG "Hello TLS" - -static unsigned char ca_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIIB5zCCAVKgAwIBAgIERiYdJzALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTExWhcNMDgwNDE3MTMyOTExWjAZMRcw\n" - "FQYDVQQDEw5HbnVUTFMgdGVzdCBDQTCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA\n" - "vuyYeh1vfmslnuggeEKgZAVmQ5ltSdUY7H25WGSygKMUYZ0KT74v8C780qtcNt9T\n" - "7EPH/N6RvB4BprdssgcQLsthR3XKA84jbjjxNCcaGs33lvOz8A1nf8p3hD+cKfRi\n" - "kfYSW2JazLrtCC4yRCas/SPOUxu78of+3HiTfFm/oXUCAwEAAaNDMEEwDwYDVR0T\n" - "AQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwQAMB0GA1UdDgQWBBTpPBz7rZJu5gak\n" - "Viyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAiaIRqGfp1jPpNeVhABK60SU0KIAy\n" - "njuu7kHq5peUgYn8Jd9zNzExBOEp1VOipGsf6G66oQAhDFp2o8zkz7ZH71zR4HEW\n" - "KoX6n5Emn6DvcEH/9pAhnGxNHJAoS7czTKv/JDZJhkqHxyrE1fuLsg5Qv25DTw7+\n" - "PfqUpIhz5Bbm7J4=\n" "-----END CERTIFICATE-----\n"; -const gnutls_datum_t ca = { ca_pem, sizeof(ca_pem) }; - -static unsigned char cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICHjCCAYmgAwIBAgIERiYdNzALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTI3WhcNMDgwNDE3MTMyOTI3WjAdMRsw\n" - "GQYDVQQDExJHbnVUTFMgdGVzdCBjbGllbnQwgZwwCwYJKoZIhvcNAQEBA4GMADCB\n" - "iAKBgLtmQ/Xyxde2jMzF3/WIO7HJS2oOoa0gUEAIgKFPXKPQ+GzP5jz37AR2ExeL\n" - "ZIkiW8DdU3w77XwEu4C5KL6Om8aOoKUSy/VXHqLnu7czSZ/ju0quak1o/8kR4jKN\n" - "zj2AC41179gAgY8oBAOgIo1hBAf6tjd9IQdJ0glhaZiQo1ipAgMBAAGjdjB0MAwG\n" - "A1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDwYDVR0PAQH/BAUDAweg\n" - "ADAdBgNVHQ4EFgQUTLkKm/odNON+3svSBxX+odrLaJEwHwYDVR0jBBgwFoAU6Twc\n" - "+62SbuYGpFYsouHAUyfI8pUwCwYJKoZIhvcNAQEFA4GBALujmBJVZnvaTXr9cFRJ\n" - "jpfc/3X7sLUsMvumcDE01ls/cG5mIatmiyEU9qI3jbgUf82z23ON/acwJf875D3/\n" - "U7jyOsBJ44SEQITbin2yUeJMIm1tievvdNXBDfW95AM507ShzP12sfiJkJfjjdhy\n" - "dc8Siq5JojruiMizAf0pA7in\n" "-----END CERTIFICATE-----\n"; -const gnutls_datum_t cert = { cert_pem, sizeof(cert_pem) }; - -static unsigned char key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQC7ZkP18sXXtozMxd/1iDuxyUtqDqGtIFBACIChT1yj0Phsz+Y8\n" - "9+wEdhMXi2SJIlvA3VN8O+18BLuAuSi+jpvGjqClEsv1Vx6i57u3M0mf47tKrmpN\n" - "aP/JEeIyjc49gAuNde/YAIGPKAQDoCKNYQQH+rY3fSEHSdIJYWmYkKNYqQIDAQAB\n" - "AoGADpmARG5CQxS+AesNkGmpauepiCz1JBF/JwnyiX6vEzUh0Ypd39SZztwrDxvF\n" - "PJjQaKVljml1zkJpIDVsqvHdyVdse8M+Qn6hw4x2p5rogdvhhIL1mdWo7jWeVJTF\n" - "RKB7zLdMPs3ySdtcIQaF9nUAQ2KJEvldkO3m/bRJFEp54k0CQQDYy+RlTmwRD6hy\n" - "7UtMjR0H3CSZJeQ8svMCxHLmOluG9H1UKk55ZBYfRTsXniqUkJBZ5wuV1L+pR9EK\n" - "ca89a+1VAkEA3UmBelwEv2u9cAU1QjKjmwju1JgXbrjEohK+3B5y0ESEXPAwNQT9\n" - "TrDM1m9AyxYTWLxX93dI5QwNFJtmbtjeBQJARSCWXhsoaDRG8QZrCSjBxfzTCqZD\n" - "ZXtl807ymCipgJm60LiAt0JLr4LiucAsMZz6+j+quQbSakbFCACB8SLV1QJBAKZQ\n" - "YKf+EPNtnmta/rRKKvySsi3GQZZN+Dt3q0r094XgeTsAqrqujVNfPhTMeP4qEVBX\n" - "/iVX2cmMTSh3w3z8MaECQEp0XJWDVKOwcTW6Ajp9SowtmiZ3YDYo1LF9igb4iaLv\n" - "sWZGfbnU3ryjvkb6YuFjgtzbZDZHWQCo8/cOtOBmPdk=\n" - "-----END RSA PRIVATE KEY-----\n"; -const gnutls_datum_t key = { key_pem, sizeof(key_pem) }; - -struct myaes_ctx { - struct aes_ctx aes; - unsigned char iv[16]; - int enc; -}; - -static int -myaes_init(gnutls_cipher_algorithm_t algorithm, void **_ctx, int enc) -{ - /* we use key size to distinguish */ - if (algorithm != GNUTLS_CIPHER_AES_128_CBC - && algorithm != GNUTLS_CIPHER_AES_192_CBC - && algorithm != GNUTLS_CIPHER_AES_256_CBC) - return GNUTLS_E_INVALID_REQUEST; - - *_ctx = calloc(1, sizeof(struct myaes_ctx)); - if (*_ctx == NULL) { - return GNUTLS_E_MEMORY_ERROR; - } - - ((struct myaes_ctx *) (*_ctx))->enc = enc; - - return 0; -} - -static int -myaes_setkey(void *_ctx, const void *userkey, size_t keysize) -{ - struct myaes_ctx *ctx = _ctx; - - if (ctx->enc) - aes_set_encrypt_key(&ctx->aes, keysize, userkey); - else - aes_set_decrypt_key(&ctx->aes, keysize, userkey); - - return 0; -} - -static int myaes_setiv(void *_ctx, const void *iv, size_t iv_size) -{ - struct myaes_ctx *ctx = _ctx; - - memcpy(ctx->iv, iv, 16); - return 0; -} - -static int -myaes_encrypt(void *_ctx, const void *src, size_t src_size, - void *dst, size_t dst_size) -{ - struct myaes_ctx *ctx = _ctx; - -#if 0 /* this is under the control of the caller */ - if (((unsigned long)src)%16 != 0) { - fail("encrypt: source is not 16-byte aligned: %lu\n", ((unsigned long)src)%16); - } -#endif - - if (((unsigned long)dst)%16 != 0) { - fail("encrypt: dest is not 16-byte aligned: %lu\n", ((unsigned long)dst)%16); - } - - cbc_encrypt(&ctx->aes, (nettle_cipher_func*)aes_encrypt, 16, ctx->iv, src_size, dst, src); - return 0; -} - -static int -myaes_decrypt(void *_ctx, const void *src, size_t src_size, - void *dst, size_t dst_size) -{ - struct myaes_ctx *ctx = _ctx; - - if (((unsigned long)src)%16 != 0) { - fail("decrypt: source is not 16-byte aligned: %lu\n", ((unsigned long)src)%16); - } - -#if 0 /* this is under the control of the caller */ - if (((unsigned long)dst)%16 != 0) { - fail("decrypt: dest is not 16-byte aligned: %lu\n", ((unsigned long)dst)%16); - } -#endif - - cbc_decrypt(&ctx->aes, (nettle_cipher_func*)aes_decrypt, 16, ctx->iv, src_size, dst, src); - - return 0; -} - -static void myaes_deinit(void *_ctx) -{ - free(_ctx); -} - -static void client(int sd) -{ - int ret, ii; - gnutls_session_t session; - char buffer[MAX_BUF + 1]; - gnutls_certificate_credentials_t xcred; - - global_init(); - - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(6); - - gnutls_certificate_allocate_credentials(&xcred); - - /* sets the trusted cas file - */ - gnutls_certificate_set_x509_trust_mem(xcred, &ca, - GNUTLS_X509_FMT_PEM); - gnutls_certificate_set_x509_key_mem(xcred, &cert, &key, - GNUTLS_X509_FMT_PEM); - - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); - - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-CIPHER-ALL:+AES-128-CBC", NULL); - - /* put the x509 credentials to the current session - */ - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - - gnutls_transport_set_int(session, sd); - - /* Perform the TLS handshake - */ - ret = gnutls_handshake(session); - - if (ret < 0) { - fail("client: Handshake failed\n"); - gnutls_perror(ret); - goto end; - } else if (debug) { - success("client: Handshake was completed\n"); - } - - if (debug) - success("client: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - /* see the Getting peer's information example */ - if (debug) - print_info(session); - - ret = gnutls_record_send(session, MSG, strlen(MSG)); - - if (ret == strlen(MSG)) { - if (debug) - success("client: sent record.\n"); - } else { - fail("client: failed to send record.\n"); - gnutls_perror(ret); - goto end; - } - - ret = gnutls_record_recv(session, buffer, MAX_BUF); - - if (debug) - success("client: recv returned %d.\n", ret); - - if (ret == GNUTLS_E_REHANDSHAKE) { - if (debug) - success("client: doing handshake!\n"); - ret = gnutls_handshake(session); - if (ret == 0) { - if (debug) - success - ("client: handshake complete, reading again.\n"); - ret = gnutls_record_recv(session, buffer, MAX_BUF); - } else { - fail("client: handshake failed.\n"); - } - } - - if (ret == 0) { - if (debug) - success - ("client: Peer has closed the TLS connection\n"); - goto end; - } else if (ret < 0) { - fail("client: Error: %s\n", gnutls_strerror(ret)); - goto end; - } - - if (debug) { - printf("- Received %d bytes: ", ret); - for (ii = 0; ii < ret; ii++) { - fputc(buffer[ii], stdout); - } - fputs("\n", stdout); - } - - gnutls_bye(session, GNUTLS_SHUT_RDWR); - - end: - - close(sd); - - gnutls_deinit(session); - - gnutls_certificate_free_credentials(xcred); - - gnutls_global_deinit(); -} - -/* This is a sample TLS 1.0 echo server, using X.509 authentication. - */ - -#define MAX_BUF 1024 - -/* These are global */ - - - -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - -static void server(int sd) -{ - gnutls_certificate_credentials_t x509_cred; - int ret; - gnutls_session_t session; - char buffer[MAX_BUF + 1]; - - /* this must be called once in the program - */ - global_init(); - - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(6); - - ret = gnutls_crypto_register_cipher(GNUTLS_CIPHER_AES_128_CBC, 1, - myaes_init, - myaes_setkey, - myaes_setiv, - myaes_encrypt, - myaes_decrypt, - myaes_deinit); - if (ret < 0) { - fail("%d: cannot register cipher\n", __LINE__); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - gnutls_certificate_set_x509_trust_mem(x509_cred, &ca, - GNUTLS_X509_FMT_PEM); - - gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, - &server_key, - GNUTLS_X509_FMT_PEM); - - if (debug) - success("Launched, generating DH parameters...\n"); - - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL:-CIPHER-ALL:+AES-128-CBC", NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, sd); - ret = gnutls_handshake(session); - if (ret < 0) { - close(sd); - gnutls_deinit(session); - fail("server: Handshake has failed (%s)\n\n", - gnutls_strerror(ret)); - return; - } - if (debug) { - success("server: Handshake was completed\n"); - success("server: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - } - - /* see the Getting peer's information example */ - if (debug) - print_info(session); - - for (;;) { - memset(buffer, 0, MAX_BUF + 1); - ret = gnutls_record_recv(session, buffer, MAX_BUF); - - if (ret == 0) { - if (debug) - success - ("server: Peer has closed the GnuTLS connection\n"); - break; - } else if (ret < 0) { - fail("server: Received corrupted data(%d). Closing...\n", ret); - break; - } else if (ret > 0) { - /* echo data back to the client - */ - gnutls_record_send(session, buffer, - strlen(buffer)); - } - } - /* do not wait for the peer to close the connection. - */ - gnutls_bye(session, GNUTLS_SHUT_WR); - - close(sd); - gnutls_deinit(session); - - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); - - if (debug) - success("server: finished\n"); -} - - -void doit(void) -{ - int sockets[2]; - int err; - - err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); - if (err == -1) { - perror("socketpair"); - fail("socketpair failed\n"); - return; - } - - child = fork(); - if (child < 0) { - perror("fork"); - fail("fork"); - return; - } - - if (child) { - int status; - - server(sockets[0]); - wait(&status); - } else - client(sockets[1]); -} - -#endif /* _WIN32 */ diff --git a/tests/mini-alpn.c b/tests/mini-alpn.c index 304d0a171c..bed981451a 100644 --- a/tests/mini-alpn.c +++ b/tests/mini-alpn.c @@ -41,6 +41,7 @@ int main(int argc, char **argv) #include #include #include +#include #include #include @@ -264,6 +265,8 @@ static void start(const char *p1, const char *p2) int fd[2]; int ret; + signal(SIGPIPE, SIG_IGN); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { perror("socketpair"); diff --git a/tests/mini-cert-status.c b/tests/mini-cert-status.c deleted file mode 100644 index eaf80f4dcd..0000000000 --- a/tests/mini-cert-status.c +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright (C) 2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#if defined(_WIN32) - -int main() -{ - exit(77); -} - -#else - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" - -/* This program tests whether the GNUTLS_CERT_* flags - * work as expected. - */ - -static void server_log_func(int level, const char *str) -{ -// fprintf (stderr, "server|<%d>| %s", level, str); -} - -static void client_log_func(int level, const char *str) -{ - fprintf(stderr, "client|<%d>| %s", level, str); -} - -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - - -/* A very basic TLS client, with anonymous authentication. - */ - -#define MAX_BUF 1024 - -static void client(int fd) -{ - int ret; - const char *p; - gnutls_certificate_credentials_t x509_cred; - gnutls_session_t session; - /* Need to enable anonymous KX specifically. */ - - global_init(); - - if (debug) { - gnutls_global_set_log_function(client_log_func); - gnutls_global_set_log_level(7); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); - - /* Use default priorities */ - ret = - gnutls_priority_set_direct(session, - "NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+RSA", - &p); - if (ret < 0) { - fail("error in setting priority: %s\n", p); - exit(1); - } - - /* put the anonymous credentials to the current session - */ - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - - /* Perform the TLS handshake - */ - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - - if (ret < 0) { - if (debug) { - fail("client: Handshake failed\n"); - gnutls_perror(ret); - } - exit(1); - } else { - if (debug) - success("client: Handshake was completed\n"); - } - - if (debug) - success("client: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - close(fd); - - gnutls_deinit(session); - - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); -} - - -/* These are global */ -pid_t child; - -static void server(int fd, unsigned status, int expected) -{ - int ret; - char buffer[MAX_BUF + 1]; - gnutls_session_t session; - gnutls_certificate_credentials_t x509_cred; - - /* this must be called once in the program - */ - global_init(); - memset(buffer, 0, sizeof(buffer)); - - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, - "NONE:+VERS-TLS1.0:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+RSA", - NULL); - - if (debug) { - gnutls_global_set_log_function(server_log_func); - gnutls_global_set_log_level(4711); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, - &server_key, - GNUTLS_X509_FMT_PEM); - - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - gnutls_certificate_server_set_request(session, status); - - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - - if (ret == expected) { - if (debug) - success - ("server: Handshake finished as expected\n"); - goto finish; - } else { - fail("expected %d, handshake returned %d\n", expected, - ret); - } - - if (debug) - success("server: Handshake was completed\n"); - - if (debug) - success("server: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - finish: - close(fd); - gnutls_deinit(session); - - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); - - if (debug) - success("server: finished\n"); -} - -static void start(unsigned status, int expected) -{ - int fd[2]; - int ret; - - ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); - if (ret < 0) { - perror("socketpair"); - exit(1); - } - - child = fork(); - if (child < 0) { - perror("fork"); - fail("fork"); - exit(1); - } - - if (child) { - /* parent */ - close(fd[1]); - server(fd[0], status, expected); - waitpid(-1, NULL, 0); - //kill(child, SIGTERM); - } else { - close(fd[0]); - client(fd[1]); - exit(0); - } -} - -static void ch_handler(int sig) -{ - int status = 0; - - waitpid(-1, &status, 0); - check_wait_status_for_sig(status); - return; -} - -void doit(void) -{ - signal(SIGCHLD, ch_handler); - signal(SIGPIPE, SIG_IGN); - - start(GNUTLS_CERT_IGNORE, 0); - start(GNUTLS_CERT_REQUEST, 0); - start(GNUTLS_CERT_REQUIRE, GNUTLS_E_NO_CERTIFICATE_FOUND); -} - -#endif /* _WIN32 */ diff --git a/tests/mini-dtls-discard.c b/tests/mini-dtls-discard.c index 4e5110be16..97bc6de29b 100644 --- a/tests/mini-dtls-discard.c +++ b/tests/mini-dtls-discard.c @@ -44,8 +44,10 @@ int main() #include #include #include +#include #include #include +#include #include "utils.h" @@ -57,9 +59,6 @@ int main() static void terminate(void); -/* This program tests the client hello verify in DTLS - */ - static void server_log_func(int level, const char *str) { fprintf(stderr, "server|<%d>| %s", level, str); @@ -70,9 +69,6 @@ static void client_log_func(int level, const char *str) fprintf(stderr, "client|<%d>| %s", level, str); } -/* A very basic TLS client, with anonymous authentication. - */ - #define MAX_BUF 1024 static ssize_t @@ -89,7 +85,7 @@ push(gnutls_transport_ptr_t tr, const void *data, size_t len) return send(fd, data, len, 0); } -static void client(int fd) +static void client(int fd, const char *prio) { int ret; gnutls_anon_client_credentials_t anoncred; @@ -112,9 +108,7 @@ static void client(int fd) gnutls_handshake_set_timeout(session, 20 * 1000); /* Use default priorities */ - gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+CURVE-ALL", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); /* put the anonymous credentials to the current session */ @@ -181,7 +175,7 @@ static void terminate(void) exit(1); } -static void server(int fd) +static void server(int fd, const char *prio) { int ret; gnutls_anon_server_credentials_t anoncred; @@ -206,9 +200,7 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS1.0:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+CURVE-ALL", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); @@ -269,11 +261,14 @@ static void server(int fd) success("server: finished\n"); } -void doit(void) +static +void start(const char *prio) { int fd[2]; int ret; + signal(SIGPIPE, SIG_IGN); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { perror("socketpair"); @@ -291,14 +286,20 @@ void doit(void) int status; /* parent */ - server(fd[0]); + server(fd[0], prio); wait(&status); check_wait_status(status); } else { close(fd[0]); - client(fd[1]); + client(fd[1], prio); exit(0); } } +void doit(void) +{ + start("NONE:+VERS-DTLS1.0:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+CURVE-ALL"); + start("NONE:+VERS-DTLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+CURVE-ALL"); +} + #endif /* _WIN32 */ diff --git a/tests/mini-dtls-heartbeat.c b/tests/mini-dtls-heartbeat.c index bb6fa7e528..cb575f9b2c 100644 --- a/tests/mini-dtls-heartbeat.c +++ b/tests/mini-dtls-heartbeat.c @@ -43,6 +43,7 @@ int main() #include #include #include +#include #include #include @@ -312,6 +313,8 @@ static void start(int server_initiated) int fd[2]; int ret; + signal(SIGPIPE, SIG_IGN); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { perror("socketpair"); diff --git a/tests/mini-dtls-mtu.c b/tests/mini-dtls-mtu.c index 82106081d6..1ae7325665 100644 --- a/tests/mini-dtls-mtu.c +++ b/tests/mini-dtls-mtu.c @@ -103,13 +103,8 @@ static int client_pull_timeout(gnutls_transport_ptr_t ptr, unsigned int ms) FD_ZERO(&rfds); FD_SET(fd, &rfds); - tv.tv_sec = 0; - tv.tv_usec = ms * 1000; - - while (tv.tv_usec >= 1000000) { - tv.tv_usec -= 1000000; - tv.tv_sec++; - } + tv.tv_sec = (ms / 1000); + tv.tv_usec = (ms % 1000) * 1000; ret = select(fd + 1, &rfds, NULL, NULL, &tv); if (ret <= 0) diff --git a/tests/mini-dtls-pthread.c b/tests/mini-dtls-pthread.c deleted file mode 100644 index 77012553bc..0000000000 --- a/tests/mini-dtls-pthread.c +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Copyright (C) 2015 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifndef _WIN32 -# include -# include -# include -# include -# include -#endif -#include "utils.h" - -#ifdef _WIN32 - -void doit(void) -{ - exit(77); -} - -#else - -/* These are global */ -pid_t child; - -static void terminate(void) -{ - int status; - - kill(child, SIGTERM); - wait(&status); - exit(1); -} - -/* Tests whether we can send and receive from different threads - * using DTLS, either as server or client. DTLS is a superset of - * TLS, so correct behavior under fork means TLS would operate too. - */ - -const char *side = ""; - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "%s|<%d>| %s", side, level, str); -} - -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICHzCCAaWgAwIBAgIBCTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G\n" - "A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN\n" - "MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjA0MQswCQYDVQQGEwJOTDERMA8G\n" - "A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG\n" - "CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA\n" - "2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd\n" - "BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB\n" - "PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh\n" - "clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG\n" - "CCqGSM49BAMCA2gAMGUCMQCaLFzXptui5WQN8LlO3ddh1hMxx6tzgLvT03MTVK2S\n" - "C12r0Lz3ri/moSEpNZWqPjkCMCE2f53GXcYLqyfyJR078c/xNSUU5+Xxl7VZ414V\n" - "fGa5kHvHARBPc8YAIVIqDvHH1Q==\n" - "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN EC PRIVATE KEY-----\n" - "MHcCAQEEIPEqEyB2AnCoPL/9U/YDHvdqXYbIogTywwyp6/UfDw6noAoGCCqGSM49\n" - "AwEHoUQDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/\n" - "6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/w==\n" - "-----END EC PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - -#define MSG "hello1111" -#define MSG2 "xxxxxxxxxxxx" - -static void *start_thread(void *arg) -{ - gnutls_session_t session = arg; - int ret; - char buf[64]; - - if (debug) - success("client: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - sec_sleep(1); - /* the server should reflect our messages */ - ret = gnutls_record_recv(session, buf, sizeof(buf)); - if (ret != sizeof(MSG)-1 || memcmp(buf, MSG, sizeof(MSG)-1) != 0) { - fail("client: recv failed: %s\n", gnutls_strerror(ret)); - exit(1); - } - - if (debug) { - fprintf(stderr, "client received: %.*s\n", ret, buf); - } - - ret = gnutls_record_recv(session, buf, sizeof(buf)); - if (ret != sizeof(MSG2)-1 || memcmp(buf, MSG2, sizeof(MSG2)-1) != 0) { - fail("client: recv2 failed: %s\n", gnutls_strerror(ret)); - exit(1); - } - - if (debug) { - fprintf(stderr, "client received: %.*s\n", ret, buf); - } - - ret = gnutls_record_recv(session, buf, sizeof(buf)); - if (ret != 0) { - fail("client: recv3 failed: %s\n", gnutls_strerror(ret)); - exit(1); - } - - pthread_exit(0); -} - -static -void do_thread_stuff(gnutls_session_t session) -{ - int ret; - pthread_t id; - - /* separate sending from receiving */ - ret = pthread_create(&id, NULL, start_thread, session); - if (ret != 0) { - exit(1); - } - - ret = gnutls_record_send(session, MSG, sizeof(MSG)-1); - if (ret != sizeof(MSG)-1) { - fail("client: send failed: %s\n", gnutls_strerror(ret)); - exit(1); - } - - ret = gnutls_record_send(session, MSG2, sizeof(MSG2)-1); - if (ret != sizeof(MSG2)-1) { - fail("client: send2 failed: %s\n", gnutls_strerror(ret)); - exit(1); - } - sec_sleep(2); - gnutls_bye(session, GNUTLS_SHUT_WR); -} - -static void do_reflect_stuff(gnutls_session_t session) -{ - char buf[64]; - unsigned buf_size; - int ret; - - do { - ret = gnutls_record_recv(session, buf, sizeof(buf)); - if (ret < 0) { - fail("server: recv failed: %s\n", gnutls_strerror(ret)); - terminate(); - } - - if (ret == 0) - break; - - buf_size = ret; - if (debug) { - fprintf(stderr, "server received: %.*s\n", buf_size, buf); - } - - ret = gnutls_record_send(session, buf, buf_size); - if (ret < 0) { - fail("server: send failed: %s\n", gnutls_strerror(ret)); - terminate(); - } - } while(1); - - /* do not wait for the peer to close the connection. - */ - gnutls_bye(session, GNUTLS_SHUT_WR); -} - -static void client(int fd, unsigned do_thread) -{ - int ret; - gnutls_certificate_credentials_t x509_cred; - gnutls_session_t session; - /* Need to enable anonymous KX specifically. */ - - global_init(); - - if (debug) { - side = "client"; - gnutls_global_set_log_function(tls_log_func); - gnutls_global_set_log_level(4711); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT | GNUTLS_DATAGRAM); - gnutls_dtls_set_mtu(session, 1500); - gnutls_dtls_set_timeouts(session, 6 * 1000, 60 * 1000); - //gnutls_transport_set_push_function(session, push); - - /* Use default priorities */ - gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ECDHE-ECDSA:+CURVE-ALL", - NULL); - - /* put the anonymous credentials to the current session - */ - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - - /* Perform the TLS handshake - */ - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - - if (ret < 0) { - fail("client: Handshake failed\n"); - gnutls_perror(ret); - exit(1); - } else { - if (debug) - success("client: Handshake was completed\n"); - } - - if (do_thread) - do_thread_stuff(session); - else - do_reflect_stuff(session); - - close(fd); - - gnutls_deinit(session); - - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); - exit(0); -} - - -static void server(int fd, unsigned do_thread) -{ - int ret; - gnutls_certificate_credentials_t x509_cred; - gnutls_session_t session; - - /* this must be called once in the program - */ - global_init(); - -#if 0 - if (debug) { - side = "server"; - gnutls_global_set_log_function(tls_log_func); - gnutls_global_set_log_level(4711); - } -#endif - - gnutls_certificate_allocate_credentials(&x509_cred); - gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, - &server_key, - GNUTLS_X509_FMT_PEM); - - gnutls_init(&session, GNUTLS_SERVER | GNUTLS_DATAGRAM); - gnutls_dtls_set_timeouts(session, 5 * 1000, 60 * 1000); - gnutls_dtls_set_mtu(session, 400); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, - "NONE:+VERS-DTLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ECDHE-ECDSA:+CURVE-ALL", - NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - - do { - ret = gnutls_handshake(session); - } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - if (ret < 0) { - close(fd); - gnutls_deinit(session); - fail("server: Handshake has failed (%s)\n\n", - gnutls_strerror(ret)); - terminate(); - } - if (debug) - success("server: Handshake was completed\n"); - - if (debug) - success("server: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - if (do_thread) - do_thread_stuff(session); - else - do_reflect_stuff(session); - - - close(fd); - gnutls_deinit(session); - - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); - - if (debug) - success("server: finished\n"); -} - -static -void run(unsigned do_thread) -{ - int fd[2]; - int ret; - - ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); - if (ret < 0) { - perror("socketpair"); - exit(1); - } - - child = fork(); - if (child < 0) { - perror("fork"); - fail("fork"); - exit(1); - } - - if (child) { - int status; - /* parent */ - - close(fd[1]); - client(fd[0], do_thread); - wait(&status); - check_wait_status(status); - } else { - close(fd[0]); - server(fd[1], 1-do_thread); - exit(0); - } -} - -void doit(void) -{ - signal(SIGPIPE, SIG_IGN); - run(0); - run(1); -} -#endif /* _WIN32 */ diff --git a/tests/mini-dtls-record.c b/tests/mini-dtls-record.c index 63bba89aaf..4d92d81c54 100644 --- a/tests/mini-dtls-record.c +++ b/tests/mini-dtls-record.c @@ -45,6 +45,7 @@ int main() #include #include #include +#include #include #include @@ -367,6 +368,8 @@ static void start(void) int fd[2]; int ret; + signal(SIGPIPE, SIG_IGN); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { perror("socketpair"); diff --git a/tests/mini-dtls-srtp.c b/tests/mini-dtls-srtp.c index 93c06820f8..78c03b3d1e 100644 --- a/tests/mini-dtls-srtp.c +++ b/tests/mini-dtls-srtp.c @@ -43,6 +43,7 @@ int main(int argc, char **argv) #include #include #include +#include #include #include @@ -304,6 +305,8 @@ static void start(int profile) int fd[2]; int ret; + signal(SIGPIPE, SIG_IGN); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { perror("socketpair"); diff --git a/tests/mini-eagain-dtls.c b/tests/mini-eagain-dtls.c index c3654f9e19..594d49d015 100644 --- a/tests/mini-eagain-dtls.c +++ b/tests/mini-eagain-dtls.c @@ -59,7 +59,6 @@ void doit(void) gnutls_session_t client; /* Need to enable anonymous KX specifically. */ char buffer[MAX_BUF + 1]; - ssize_t ns; int ret, transferred = 0, msglen; /* General init. */ @@ -116,7 +115,6 @@ void doit(void) ret = gnutls_record_send(client, MSG, strlen(MSG)); } while (ret == GNUTLS_E_AGAIN); - //success ("client: sent %d\n", ns); msglen = strlen(MSG); TRANSFER(client, server, MSG, msglen, buffer, MAX_BUF); diff --git a/tests/mini-eagain.c b/tests/mini-eagain.c deleted file mode 100644 index f74092d058..0000000000 --- a/tests/mini-eagain.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2008-2012 Free Software Foundation, Inc. - * - * Author: Simon Josefsson, Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include - -#include "utils.h" -#define RANDOMIZE -#include "eagain-common.h" - -const char *side = ""; - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "%s|<%d>| %s", side, level, str); -} - -static int handshake = 0; - -#define MAX_BUF 1024 -#define MSG "Hello TLS, and hi and how are you and more data here... and more... and even more and even more more data..." - -void doit(void) -{ - /* Server stuff. */ - gnutls_anon_server_credentials_t s_anoncred; - const gnutls_datum_t p3 = - { (unsigned char *) pkcs3, strlen(pkcs3) }; - static gnutls_dh_params_t dh_params; - gnutls_session_t server; - int sret, cret; - /* Client stuff. */ - gnutls_anon_client_credentials_t c_anoncred; - gnutls_session_t client; - /* Need to enable anonymous KX specifically. */ - char buffer[MAX_BUF + 1]; - ssize_t ns; - int ret, transferred = 0, msglen; - - /* General init. */ - global_init(); - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(2); - - /* Init server */ - gnutls_anon_allocate_server_credentials(&s_anoncred); - gnutls_dh_params_init(&dh_params); - gnutls_dh_params_import_pkcs3(dh_params, &p3, GNUTLS_X509_FMT_PEM); - gnutls_anon_set_server_dh_params(s_anoncred, dh_params); - gnutls_init(&server, GNUTLS_SERVER); - ret = - gnutls_priority_set_direct(server, - "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH", - NULL); - if (ret < 0) - exit(1); - gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); - gnutls_transport_set_push_function(server, server_push); - gnutls_transport_set_pull_function(server, server_pull); - gnutls_transport_set_ptr(server, server); - - /* Init client */ - gnutls_anon_allocate_client_credentials(&c_anoncred); - gnutls_init(&client, GNUTLS_CLIENT); - ret = - gnutls_priority_set_direct(client, - "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-DH", - NULL); - if (ret < 0) - exit(1); - gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); - gnutls_transport_set_push_function(client, client_push); - gnutls_transport_set_pull_function(client, client_pull); - gnutls_transport_set_ptr(client, client); - - handshake = 1; - HANDSHAKE(client, server); - - handshake = 0; - if (debug) - success("Handshake established\n"); - - msglen = strlen(MSG); - TRANSFER(client, server, MSG, msglen, buffer, MAX_BUF); - if (debug) - fputs("\n", stdout); - - gnutls_bye(client, GNUTLS_SHUT_WR); - gnutls_bye(server, GNUTLS_SHUT_WR); - - gnutls_deinit(client); - gnutls_deinit(server); - - gnutls_anon_free_client_credentials(c_anoncred); - gnutls_anon_free_server_credentials(s_anoncred); - - gnutls_dh_params_deinit(dh_params); - - gnutls_global_deinit(); -} diff --git a/tests/mini-emsgsize-dtls.c b/tests/mini-emsgsize-dtls.c index 0d4a1e4443..af2737ad2d 100644 --- a/tests/mini-emsgsize-dtls.c +++ b/tests/mini-emsgsize-dtls.c @@ -108,7 +108,6 @@ void doit(void) gnutls_session_t client; /* Need to enable anonymous KX specifically. */ char buffer[MAX_BUF + 1]; - ssize_t ns; int ret, transferred = 0, msglen; /* General init. */ @@ -170,7 +169,6 @@ void doit(void) ret = gnutls_record_send(client, MSG, strlen(MSG)); } while (ret == GNUTLS_E_AGAIN); - //success ("client: sent %d\n", ns); msglen = strlen(MSG); TRANSFER(client, server, MSG, msglen, buffer, MAX_BUF); diff --git a/tests/mini-global-load.c b/tests/mini-global-load.c index 1d01da3798..fa6df2e2be 100644 --- a/tests/mini-global-load.c +++ b/tests/mini-global-load.c @@ -83,9 +83,8 @@ const gnutls_datum_t server_key = { server_key_pem, sizeof(server_key_pem) }; -void doit(void) +static void start(const char *prio) { - int exit_code = EXIT_SUCCESS; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; gnutls_session_t server; @@ -95,6 +94,8 @@ void doit(void) gnutls_session_t client; int cret = GNUTLS_E_AGAIN; + success("running test with %s\n", prio); + /* General init. */ gnutls_global_set_log_function(tls_log_func); if (debug) @@ -108,9 +109,7 @@ void doit(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, - "NORMAL:-CIPHER-ALL:+AES-128-CBC", - NULL); + gnutls_priority_set_direct(server, prio, NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -120,7 +119,7 @@ void doit(void) gnutls_init(&client, GNUTLS_CLIENT); gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); - gnutls_priority_set_direct(client, "NORMAL", NULL); + gnutls_priority_set_direct(client, prio, NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -136,10 +135,13 @@ void doit(void) gnutls_certificate_free_credentials(serverx509cred); gnutls_certificate_free_credentials(clientx509cred); - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.1"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); } diff --git a/tests/mini-handshake-timeout.c b/tests/mini-handshake-timeout.c deleted file mode 100644 index d3a1233888..0000000000 --- a/tests/mini-handshake-timeout.c +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (C) 2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#if defined(_WIN32) - -int main() -{ - exit(77); -} - -#else - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" - -/* This program tests whether the handshake timeout value is enforced. - */ - -static void server_log_func(int level, const char *str) -{ - fprintf(stderr, "server|<%d>| %s", level, str); -} - -static void client_log_func(int level, const char *str) -{ - fprintf(stderr, "client|<%d>| %s", level, str); -} - -/* A very basic TLS client, with anonymous authentication. - */ - -static void client(int fd, int wait) -{ - int ret; - gnutls_anon_client_credentials_t anoncred; - gnutls_session_t session; - /* Need to enable anonymous KX specifically. */ - - global_init(); - - if (debug) { - gnutls_global_set_log_function(client_log_func); - gnutls_global_set_log_level(4711); - } - - gnutls_anon_allocate_client_credentials(&anoncred); - - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); - gnutls_handshake_set_timeout(session, 20 * 1000); - - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:+ANON-ECDH", NULL); - - /* put the anonymous credentials to the current session - */ - gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); - - gnutls_transport_set_int(session, fd); - - /* Perform the TLS handshake - */ - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - - gnutls_deinit(session); - gnutls_anon_free_client_credentials(anoncred); - gnutls_global_deinit(); - - if (ret < 0) { - if (ret != GNUTLS_E_TIMEDOUT || wait == 0) { - if (debug) - fail("client: unexpected error: %s\n", - gnutls_strerror(ret)); - exit(1); - } - if (debug) - success("client: expected timeout occurred\n"); - return; - } else { - if (wait != 0) { - fail("client: handshake was completed unexpectedly\n"); - gnutls_perror(ret); - exit(1); - } - } - - return; -} - -static void initialize_tls_session(gnutls_session_t * session) -{ - gnutls_init(session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(*session, "NORMAL:+ANON-ECDH", NULL); -} - -static void server(int fd, int wait) -{ - int ret; - gnutls_session_t session; - gnutls_anon_server_credentials_t anoncred; - - /* this must be called once in the program - */ - global_init(); - - if (debug) { - gnutls_global_set_log_function(server_log_func); - gnutls_global_set_log_level(4711); - } - - gnutls_anon_allocate_server_credentials(&anoncred); - - initialize_tls_session(&session); - gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); - - gnutls_transport_set_int(session, fd); - - if (wait) { - sec_sleep(25); - } else { - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - - if (ret == 0) - gnutls_bye(session, GNUTLS_SHUT_RDWR); - } - - gnutls_deinit(session); - gnutls_anon_free_server_credentials(anoncred); - gnutls_global_deinit(); -} - -static void start(int wait) -{ - int fd[2]; - int ret; - pid_t child; - - if (debug && wait) - fprintf(stderr, "\nWill test timeout\n"); - - ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); - if (ret < 0) { - perror("socketpair"); - exit(1); - } - - child = fork(); - if (child < 0) { - perror("fork"); - fail("fork"); - exit(1); - } - - if (child) { - /* parent */ - close(fd[1]); - server(fd[0], wait); - close(fd[0]); - } else { - close(fd[0]); - client(fd[1], wait); - close(fd[1]); - exit(0); - } -} - -static void ch_handler(int sig) -{ - int status = 0; - wait(&status); - check_wait_status(status); - return; -} - -void doit(void) -{ - signal(SIGCHLD, ch_handler); - signal(SIGPIPE, SIG_IGN); - - /* make sure that normal handshake occurs */ - start(0); - - /* check the handshake with an expected timeout */ - start(1); -} - -#endif /* _WIN32 */ diff --git a/tests/mini-key-material.c b/tests/mini-key-material.c index 9fb266f23b..aa7af6dd02 100644 --- a/tests/mini-key-material.c +++ b/tests/mini-key-material.c @@ -317,7 +317,7 @@ static void server(int fd) * are adequate. */ ret = gnutls_priority_set_direct(session, - "NORMAL:+ANON-DH:+ANON-ECDH", NULL); + "NORMAL:+ANON-DH:+ANON-ECDH:-VERS-ALL:+VERS-TLS1.0", NULL); if (ret < 0) { fail("server: priority set failed (%s)\n\n", gnutls_strerror(ret)); diff --git a/tests/mini-record-2.c b/tests/mini-record-2.c index c4a22c1836..578766b208 100644 --- a/tests/mini-record-2.c +++ b/tests/mini-record-2.c @@ -201,7 +201,7 @@ static void client(int fd, const char *prio, int ign) exit(1); } - ret = gnutls_alert_send(session, GNUTLS_AL_WARNING, GNUTLS_A_USER_CANCELED); + ret = gnutls_bye(session, GNUTLS_SHUT_WR); if (ret < 0) { fail("server (%s): Error sending alert\n", prio); exit(1); @@ -230,8 +230,6 @@ static void client(int fd, const char *prio, int ign) } } - gnutls_bye(session, GNUTLS_SHUT_WR); - end: close(fd); @@ -327,16 +325,14 @@ static void server(int fd, const char *prio, int ign) } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); } while (ret > 0); - - if (ret != GNUTLS_E_WARNING_ALERT_RECEIVED || - gnutls_alert_get(session) != GNUTLS_A_USER_CANCELED) { - - if (ret <= 0) { - if (ret != 0) { - fail("client: Error: %s\n", gnutls_strerror(ret)); - exit(1); - } - } + + if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (ret != 0) { + fail("expected closure alert! Got: %d\n", ret); } /* Test sending */ @@ -383,10 +379,11 @@ static void server(int fd, const char *prio, int ign) success("server: finished\n"); } -static void start(const char *prio, int ign) +static void start(const char *name, const char *prio, int ign) { int fd[2]; int ret; + int status; ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { @@ -403,8 +400,11 @@ static void start(const char *prio, int ign) if (child) { /* parent */ + success("testing %s\n", name); close(fd[1]); server(fd[0], prio, ign); + wait(&status); + check_wait_status(status); } else { close(fd[0]); client(fd[1], prio, ign); @@ -423,16 +423,14 @@ static void start(const char *prio, int ign) #define NULL_SHA1 "NONE:+VERS-TLS1.0:-CIPHER-ALL:+NULL:+SHA1:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+RSA:+CURVE-ALL" -#define ARCFOUR_SHA1_ZLIB "NONE:+VERS-TLS1.0:-CIPHER-ALL:+ARCFOUR-128:+SHA1:+SIGN-ALL:+COMP-DEFLATE:+ANON-ECDH:+CURVE-ALL" - -#define AES_GCM_ZLIB "NONE:+VERS-TLS1.2:-CIPHER-ALL:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-DEFLATE:+RSA:+CURVE-ALL" #define CHACHA_POLY1305 "NONE:+VERS-TLS1.2:-CIPHER-ALL:+RSA:+CHACHA20-POLY1305:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ECDHE-RSA:+CURVE-ALL" +#define TLS13_AES_GCM "NONE:+VERS-TLS1.3:-CIPHER-ALL:+RSA:+AES-128-GCM:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+GROUP-ALL" +#define TLS13_AES_CCM "NONE:+VERS-TLS1.3:-CIPHER-ALL:+RSA:+AES-128-CCM:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+GROUP-ALL" +#define TLS13_CHACHA_POLY1305 "NONE:+VERS-TLS1.3:-CIPHER-ALL:+RSA:+CHACHA20-POLY1305:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+GROUP-ALL" + static void ch_handler(int sig) { - int status; - wait(&status); - check_wait_status(status); return; } @@ -440,27 +438,24 @@ void doit(void) { signal(SIGCHLD, ch_handler); - start(AES_CBC, 1); - start(AES_CBC_SHA256, 1); - start(AES_GCM, 0); - start(AES_CCM, 0); - start(AES_CCM_8, 0); + start("aes-cbc", AES_CBC, 1); + start("aes-cbc-sha256", AES_CBC_SHA256, 1); + start("aes-gcm", AES_GCM, 0); + start("aes-ccm", AES_CCM, 0); + start("aes-ccm-8", AES_CCM_8, 0); if (!gnutls_fips140_mode_enabled()) { - start(NULL_SHA1, 0); + start("null-sha1", NULL_SHA1, 0); - start(ARCFOUR_SHA1, 0); - start(ARCFOUR_MD5, 0); - start(CHACHA_POLY1305, 0); - -#ifdef HAVE_LIBZ - start(ARCFOUR_SHA1_ZLIB, 0); -#endif + start("arcfour-sha1", ARCFOUR_SHA1, 0); + start("arcfour-md5", ARCFOUR_MD5, 0); + start("chacha20-poly1305", CHACHA_POLY1305, 0); + start("tls13-chacha20-poly1305", TLS13_CHACHA_POLY1305, 0); } -#ifdef HAVE_LIBZ - start(AES_GCM_ZLIB, 0); -#endif + start("tls13-aes-gcm", TLS13_AES_GCM, 0); + start("tls13-aes-ccm", TLS13_AES_CCM, 0); + } #endif /* _WIN32 */ diff --git a/tests/mini-record-failure.c b/tests/mini-record-failure.c index ba62449a6d..da4e31354f 100644 --- a/tests/mini-record-failure.c +++ b/tests/mini-record-failure.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2014 Nikos Mavrogiannopoulos + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -15,9 +16,9 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * */ #ifdef HAVE_CONFIG_H @@ -46,13 +47,14 @@ int main() #include #include #include - +#include "cert-common.h" #include "utils.h" static void terminate(void); -/* This program tests the ability to detect modified record - * packets. +/* This program tests the ability of the record layer, + * to detect modified record packets, under various + * ciphersuites. */ static void server_log_func(int level, const char *str) @@ -65,47 +67,6 @@ static void client_log_func(int level, const char *str) fprintf(stderr, "client|<%d>| %s", level, str); } -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - static int modify = 0; static ssize_t @@ -126,9 +87,6 @@ client_push(gnutls_transport_ptr_t tr, const void *data, size_t len) } } -/* A very basic TLS client, with anonymous authentication. - */ - #define MAX_BUF 24*1024 static void client(int fd, const char *prio, int ign) @@ -316,7 +274,7 @@ static void server(int fd, const char *prio, int ign) success("server: finished\n"); } -static void start(const char *prio, int ign) +static void start(const char *name, const char *prio, int ign) { int fd[2]; int ret; @@ -336,6 +294,7 @@ static void start(const char *prio, int ign) if (child) { /* parent */ + success("testing %s\n", name); close(fd[1]); server(fd[0], prio, ign); } else { @@ -356,12 +315,12 @@ static void start(const char *prio, int ign) #define NULL_SHA1 "NONE:+VERS-TLS1.0:-CIPHER-ALL:+NULL:+SHA1:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+RSA:+CURVE-ALL" -#define ARCFOUR_SHA1_ZLIB "NONE:+VERS-TLS1.0:-CIPHER-ALL:+ARCFOUR-128:+SHA1:+SIGN-ALL:+COMP-DEFLATE:+ANON-ECDH:+CURVE-ALL" - -#define AES_GCM_ZLIB "NONE:+VERS-TLS1.2:-CIPHER-ALL:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-DEFLATE:+RSA:+CURVE-ALL" - #define NO_ETM ":%NO_ETM" +#define TLS13_AES_GCM "NONE:+VERS-TLS1.3:-CIPHER-ALL:+RSA:+AES-128-GCM:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+GROUP-ALL" +#define TLS13_AES_CCM "NONE:+VERS-TLS1.3:-CIPHER-ALL:+RSA:+AES-128-CCM:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+GROUP-ALL" +#define TLS13_CHACHA_POLY1305 "NONE:+VERS-TLS1.3:-CIPHER-ALL:+RSA:+CHACHA20-POLY1305:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+GROUP-ALL" + static void ch_handler(int sig) { int status; @@ -372,47 +331,36 @@ static void ch_handler(int sig) void doit(void) { + signal(SIGPIPE, SIG_IGN); signal(SIGCHLD, ch_handler); - start(AES_CBC, 1); - start(AES_CBC_SHA256, 1); - start(AES_GCM, 0); - start(AES_CCM, 0); - start(AES_CCM_8, 0); + start("aes-cbc", AES_CBC, 1); + start("aes-cbc-sha256", AES_CBC_SHA256, 1); + start("aes-gcm", AES_GCM, 0); + start("aes-ccm", AES_CCM, 0); + start("aes-ccm-8", AES_CCM_8, 0); if (!gnutls_fips140_mode_enabled()) { - start(NULL_SHA1, 0); - - start(ARCFOUR_SHA1, 0); - start(ARCFOUR_MD5, 0); + start("null-sha1", NULL_SHA1, 0); -# ifdef HAVE_LIBZ - start(ARCFOUR_SHA1_ZLIB, 0); -# endif + start("arcfour-sha1", ARCFOUR_SHA1, 0); + start("arcfour-md5", ARCFOUR_MD5, 0); } -#ifdef HAVE_LIBZ - start(AES_GCM_ZLIB, 0); -#endif - - start(AES_CBC NO_ETM, 1); - start(AES_CBC_SHA256 NO_ETM, 1); - start(AES_GCM NO_ETM, 0); + start("aes-cbc-no-etm", AES_CBC NO_ETM, 1); + start("aes-cbc-sha256-no-etm", AES_CBC_SHA256 NO_ETM, 1); + start("aes-gcm-no-etm", AES_GCM NO_ETM, 0); if (!gnutls_fips140_mode_enabled()) { - start(NULL_SHA1 NO_ETM, 0); - - start(ARCFOUR_SHA1 NO_ETM, 0); - start(ARCFOUR_MD5 NO_ETM, 0); + start("null-sha1-no-etm", NULL_SHA1 NO_ETM, 0); -# ifdef HAVE_LIBZ - start(ARCFOUR_SHA1_ZLIB NO_ETM, 0); -# endif + start("arcfour-sha1-no-etm", ARCFOUR_SHA1 NO_ETM, 0); + start("arcfour-md5-no-etm", ARCFOUR_MD5 NO_ETM, 0); + start("tls13-chacha20-poly1305", TLS13_CHACHA_POLY1305, 0); } -#ifdef HAVE_LIBZ - start(AES_GCM_ZLIB NO_ETM, 0); -#endif + start("tls13-aes-gcm", TLS13_AES_GCM, 0); + start("tls13-aes-ccm", TLS13_AES_CCM, 0); } #endif /* _WIN32 */ diff --git a/tests/mini-record-range.c b/tests/mini-record-range.c index 638e0b722b..f0f0b25723 100644 --- a/tests/mini-record-range.c +++ b/tests/mini-record-range.c @@ -1,7 +1,7 @@ /* - * Copyright (C) 2012 Free Software Foundation, Inc. + * Copyright (C) 2012-2018 Free Software Foundation, Inc. * - * Author: Nikos Mavrogiannopoulos + * Author: Nikos Mavrogiannopoulos, Daiki Ueno * * This file is part of GnuTLS. * @@ -15,9 +15,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ #ifdef HAVE_CONFIG_H @@ -27,7 +26,7 @@ #include #include -#if 1 +#if defined(_WIN32) int main(void) { @@ -47,12 +46,14 @@ int main(void) #include #include +#include "cert-common.h" #include "utils.h" #define MAX_BUF 1024 #define HIGH(x) (3*x) static void terminate(void); static int to_send; +static size_t total; /* This program tests the robustness of record range sending. */ @@ -67,47 +68,6 @@ static void client_log_func(int level, const char *str) fprintf(stderr, "client|<%d>| %s", level, str); } -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - /* A very basic TLS client, with anonymous authentication. */ @@ -119,11 +79,8 @@ push(gnutls_transport_ptr_t tr, const void *data, size_t len) { int fd = (long int) tr; - if (to_send >= 0 && len < HIGH(MAX_BUF)) { - fail("Sent data (%u) are lower than expected (%u)\n", - (unsigned) len, (unsigned) HIGH(MAX_BUF)); - terminate(); - } + if (to_send >= 0) + total += len; return send(fd, data, len, 0); } @@ -294,6 +251,7 @@ static void server(int fd, const char *prio) } do { + total = 0; do { ret = gnutls_record_send_range(session, buffer, @@ -307,6 +265,12 @@ static void server(int fd, const char *prio) gnutls_strerror(ret)); terminate(); } + if (total < HIGH(MAX_BUF)) { + fail("Sent data (%u) are lower than expected (%u)\n", + (unsigned) total, (unsigned) HIGH(MAX_BUF)); + terminate(); + } + to_send++; } while (to_send < 4); @@ -358,7 +322,8 @@ static void start(const char *prio) } } -#define AES_CBC "NORMAL:+ANON-ECDH:+CURVE-ALL" +#define AES_CBC "NONE:+VERS-TLS1.2:+AES-128-CBC:+MAC-ALL:+SIGN-ALL:+ANON-ECDH:+CURVE-ALL" +#define AES_GCM "NONE:+VERS-TLS1.3:+AES-256-GCM:+AEAD:+SIGN-ALL:+GROUP-ALL" static void ch_handler(int sig) { @@ -373,6 +338,7 @@ void doit(void) signal(SIGCHLD, ch_handler); start(AES_CBC); + start(AES_GCM); } #endif /* _WIN32 */ diff --git a/tests/mini-record-retvals.c b/tests/mini-record-retvals.c deleted file mode 100644 index 9e8b4c1869..0000000000 --- a/tests/mini-record-retvals.c +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright (C) 2012 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#if defined(_WIN32) - -int main() -{ - exit(77); -} - -#else - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" - -static void terminate(void); - -/* This program tests the correctness of the return - * values of the record functions. - */ - -static void server_log_func(int level, const char *str) -{ - fprintf(stderr, "server|<%d>| %s", level, str); -} - -static void client_log_func(int level, const char *str) -{ - fprintf(stderr, "client|<%d>| %s", level, str); -} - -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - - -/* A very basic TLS client, with anonymous authentication. - */ - -#define MAX_BUF 24*1024 - -static void client(int fd, const char *prio, int ign) -{ - int ret; - unsigned i; - char buffer[MAX_BUF + 1]; - const char* err; - gnutls_anon_client_credentials_t anoncred; - gnutls_certificate_credentials_t x509_cred; - gnutls_session_t session; - /* Need to enable anonymous KX specifically. */ - - global_init(); - memset(buffer, 2, sizeof(buffer)); - - if (debug) { - gnutls_global_set_log_function(client_log_func); - gnutls_global_set_log_level(7); - } - - gnutls_anon_allocate_client_credentials(&anoncred); - gnutls_certificate_allocate_credentials(&x509_cred); - - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); - - /* Use default priorities */ - ret = gnutls_priority_set_direct(session, prio, &err); - if (ret < 0) { - fail("error setting priority: %s\n", err); - exit(1); - } - - /* put the anonymous credentials to the current session - */ - gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - - /* Perform the TLS handshake - */ - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - - if (ret < 0) { - fail("client (%s): Handshake has failed (%s)\n\n", prio, - gnutls_strerror(ret)); - exit(1); - } else { - if (debug) - success("client: Handshake was completed\n"); - } - - if (debug) - success("client: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - /* Test sending */ - for (i = 1; i < 16384; i++) { - do { - ret = gnutls_record_send(session, buffer, i); - } while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); - - if (ret < 0) { - fail("server (%s): Error sending %d byte packet: %s\n", prio, i, gnutls_strerror(ret)); - terminate(); - } - - if (ret > 0 && ret != (int)i) { - fail("server (%s): Error sending %d byte packet: sent: %d\n", prio, i, ret); - terminate(); - } - } - - /* Try sending a bit more */ - i = 21056; - do { - ret = gnutls_record_send(session, buffer, i); - } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); - - if (ret < 0) { - fail("server (%s): Error sending %d byte packet: %s\n", - prio, i, gnutls_strerror(ret)); - exit(1); - } else if (ign == 0 && ret != 16384) { - fail("server (%s): Error sending %d byte packet; sent %d bytes instead of 16384\n", prio, i, ret); - exit(1); - } - - ret = gnutls_alert_send(session, GNUTLS_AL_WARNING, GNUTLS_A_USER_CANCELED); - if (ret < 0) { - fail("server (%s): Error sending alert\n", prio); - exit(1); - } - - gnutls_record_set_timeout(session, 10000); - - /* Test receiving */ - do { - do { - ret = gnutls_record_recv(session, buffer, MAX_BUF); - } while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); - } while (ret > 0); - - if (ret == 0) { - if (debug) - success - ("client: Peer has closed the TLS connection\n"); - goto end; - } else if (ret < 0) { - if (ret != 0) { - fail("client: Error: %s\n", gnutls_strerror(ret)); - exit(1); - } - } - - gnutls_bye(session, GNUTLS_SHUT_WR); - - end: - - close(fd); - - gnutls_deinit(session); - - gnutls_anon_free_client_credentials(anoncred); - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); -} - - -/* These are global */ -pid_t child; - -static void terminate(void) -{ - kill(child, SIGTERM); - exit(1); -} - -static void server(int fd, const char *prio, int ign) -{ - int ret; - unsigned i; - const char* err; - char buffer[MAX_BUF + 1]; - gnutls_session_t session; - gnutls_anon_server_credentials_t anoncred; - gnutls_certificate_credentials_t x509_cred; - - /* this must be called once in the program - */ - global_init(); - memset(buffer, 0, sizeof(buffer)); - - if (debug) { - gnutls_global_set_log_function(server_log_func); - gnutls_global_set_log_level(4711); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, - &server_key, - GNUTLS_X509_FMT_PEM); - - gnutls_anon_allocate_server_credentials(&anoncred); - - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - ret = gnutls_priority_set_direct(session, prio, &err); - if (ret < 0) { - fail("error setting priority: %s\n", err); - exit(1); - } - - gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - if (ret < 0) { - close(fd); - gnutls_deinit(session); - fail("server (%s): Handshake has failed (%s)\n\n", prio, - gnutls_strerror(ret)); - terminate(); - } - if (debug) - success("server: Handshake was completed\n"); - - if (debug) - success("server: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - /* Here we do both a receive and a send test because if valgrind - * detects an error on the peer, the main process will never know. - */ - - /* Test receiving */ - i = 1; - do { - do { - ret = gnutls_record_recv(session, buffer, MAX_BUF); - } while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); - if (ret > 0 && ret != (int)i) { - fail("error receiving message[%d]: ret: %d\n", i, ret); - } - i++; - } while (ret > 0); - - if (ret != GNUTLS_E_WARNING_ALERT_RECEIVED || - gnutls_alert_get(session) != GNUTLS_A_USER_CANCELED) { - - if (ret <= 0) { - if (ret != 0) { - fail("client: Error: %s\n", gnutls_strerror(ret)); - exit(1); - } - } - } - - /* Test sending */ - for (i = 1; i < 16384; i++) { - do { - ret = gnutls_record_send(session, buffer, i); - } while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); - - if (ret < 0) { - fail("server (%s): Error sending %d byte packet: %s\n", prio, i, gnutls_strerror(ret)); - terminate(); - } - } - - /* Try sending a bit more */ - i = 21056; - do { - ret = gnutls_record_send(session, buffer, i); - } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); - - if (ret < 0) { - fail("server (%s): Error sending %d byte packet: %s\n", - prio, i, gnutls_strerror(ret)); - terminate(); - } else if (ign == 0 && ret != 16384) { - fail("server (%s): Error sending %d byte packet; sent %d bytes instead of 16384\n", prio, i, ret); - terminate(); - } - - /* do not wait for the peer to close the connection. - */ - gnutls_bye(session, GNUTLS_SHUT_WR); - - close(fd); - gnutls_deinit(session); - - gnutls_anon_free_server_credentials(anoncred); - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); - - if (debug) - success("server: finished\n"); -} - -static void start(const char *prio, int ign) -{ - int fd[2]; - int ret; - - ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); - if (ret < 0) { - perror("socketpair"); - exit(1); - } - - child = fork(); - if (child < 0) { - perror("fork"); - fail("fork"); - exit(1); - } - - if (child) { - /* parent */ - close(fd[1]); - server(fd[0], prio, ign); - } else { - close(fd[0]); - client(fd[1], prio, ign); - exit(0); - } -} - -#define AES_CBC "NONE:+VERS-TLS1.0:-CIPHER-ALL:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+CURVE-ALL" -#define AES_CBC_SHA256 "NONE:+VERS-TLS1.2:-CIPHER-ALL:+RSA:+AES-128-CBC:+AES-256-CBC:+SHA256:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+CURVE-ALL" -#define AES_GCM "NONE:+VERS-TLS1.2:-CIPHER-ALL:+RSA:+AES-128-GCM:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+CURVE-ALL" - -#define ARCFOUR_SHA1 "NONE:+VERS-TLS1.0:-CIPHER-ALL:+ARCFOUR-128:+SHA1:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+CURVE-ALL" -#define ARCFOUR_MD5 "NONE:+VERS-TLS1.0:-CIPHER-ALL:+ARCFOUR-128:+MD5:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+CURVE-ALL:+RSA" - -#define NULL_SHA1 "NONE:+VERS-TLS1.0:-CIPHER-ALL:+NULL:+SHA1:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+RSA:+CURVE-ALL" - -#define ARCFOUR_SHA1_ZLIB "NONE:+VERS-TLS1.0:-CIPHER-ALL:+ARCFOUR-128:+SHA1:+SIGN-ALL:+COMP-DEFLATE:+ANON-ECDH:+CURVE-ALL" - -#define AES_GCM_ZLIB "NONE:+VERS-TLS1.2:-CIPHER-ALL:+AES-128-GCM:+AEAD:+SIGN-ALL:+COMP-DEFLATE:+RSA:+CURVE-ALL" - -static void ch_handler(int sig) -{ - int status = 0; - wait(&status); - check_wait_status(status); - return; -} - -void doit(void) -{ - signal(SIGCHLD, ch_handler); - - start(AES_CBC_SHA256, 0); - start(AES_GCM, 0); - - if (!gnutls_fips140_mode_enabled()) { - start(NULL_SHA1, 0); - - start(ARCFOUR_SHA1, 0); - start(ARCFOUR_MD5, 0); - -# ifdef HAVE_LIBZ - start(ARCFOUR_SHA1_ZLIB, 0); -# endif - } - -#ifdef HAVE_LIBZ - start(AES_GCM_ZLIB, 0); -#endif -} - -#endif /* _WIN32 */ diff --git a/tests/mini-record.c b/tests/mini-record.c index 6e8c0ffb42..8a912a425c 100644 --- a/tests/mini-record.c +++ b/tests/mini-record.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: Nikos Mavrogiannopoulos * @@ -15,9 +16,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ #ifdef HAVE_CONFIG_H @@ -48,6 +48,7 @@ int main() #include #include "utils.h" +#include "cert-common.h" static void terminate(void); @@ -65,51 +66,6 @@ static void client_log_func(int level, const char *str) fprintf(stderr, "client|<%d>| %s", level, str); } -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - - -/* A very basic TLS client, with anonymous authentication. - */ - #define MAX_BUF 1024 static int to_send = -1; @@ -226,7 +182,7 @@ static void client(int fd, const char *prio) || ret == GNUTLS_E_INTERRUPTED); } while (ret > 0); - if (ret == 0) { + if (ret == 0 || ret == GNUTLS_E_TIMEDOUT) { if (debug) success ("client: Peer has closed the TLS connection\n"); @@ -326,6 +282,7 @@ static void server(int fd, const char *prio) mtu = gnutls_dtls_get_mtu(session); do { + usleep(10000); /* some systems like FreeBSD have their buffers full during this send */ do { ret = gnutls_record_send(session, buffer, @@ -343,7 +300,8 @@ static void server(int fd, const char *prio) while (to_send < 64); to_send = -1; - /* do not wait for the peer to close the connection. + + /* wait for the peer to close the connection. */ gnutls_bye(session, GNUTLS_SHUT_WR); @@ -359,12 +317,12 @@ static void server(int fd, const char *prio) success("server: finished\n"); } -static void start(const char *prio) +static void start(const char *name, const char *prio) { int fd[2]; - int ret; + int ret, status = 0; - ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + ret = socketpair(AF_UNIX, SOCK_DGRAM, 0, fd); if (ret < 0) { perror("socketpair"); exit(1); @@ -379,8 +337,11 @@ static void start(const char *prio) if (child) { /* parent */ + success("trying: %s\n", name); close(fd[0]); client(fd[1], prio); + wait(&status); + check_wait_status(status); } else { close(fd[1]); server(fd[0], prio); @@ -397,9 +358,6 @@ static void start(const char *prio) static void ch_handler(int sig) { - int status; - wait(&status); - check_wait_status(status); return; } @@ -408,13 +366,13 @@ void doit(void) signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); - start(AES_CBC); - start(AES_CBC_SHA256); - start(AES_GCM); - start(AES_CCM); - start(AES_CCM_8); + start("aes-cbc", AES_CBC); + start("aes-cbc-sha256", AES_CBC_SHA256); + start("aes-gcm", AES_GCM); + start("aes-ccm", AES_CCM); + start("aes-ccm-8", AES_CCM_8); if (!gnutls_fips140_mode_enabled()) { - start(CHACHA_POLY1305); + start("chacha20", CHACHA_POLY1305); } } diff --git a/tests/mini-server-name.c b/tests/mini-server-name.c index 05b9136a67..4f241c66ff 100644 --- a/tests/mini-server-name.c +++ b/tests/mini-server-name.c @@ -1,6 +1,7 @@ /* * Copyright (C) 2012 Free Software Foundation, Inc. - * + * Copyright (C) 2017 Red Hat, Inc. + * Author: Nikos Mavrogiannopoulos * * This file is part of GnuTLS. @@ -15,9 +16,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ #ifdef HAVE_CONFIG_H @@ -26,6 +26,7 @@ #include #include +#include "cert-common.h" #ifdef _WIN32 @@ -65,53 +66,12 @@ static void client_log_func(int level, const char *str) fprintf(stderr, "client|<%d>| %s", level, str); } -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - /* internal function */ int _gnutls_server_name_set_raw(gnutls_session_t session, gnutls_server_name_type_t type, const void *name, size_t name_length); -static void client(const char *test_name, int fd, unsigned raw, const char *name, unsigned name_len) +static void client(const char *test_name, const char *prio, int fd, unsigned raw, const char *name, unsigned name_len, int server_err) { int ret; gnutls_anon_client_credentials_t anoncred; @@ -134,7 +94,7 @@ static void client(const char *test_name, int fd, unsigned raw, const char *name gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + gnutls_priority_set_direct(session, prio, NULL); /* put the anonymous credentials to the current session */ @@ -155,9 +115,10 @@ static void client(const char *test_name, int fd, unsigned raw, const char *name while (ret < 0 && gnutls_error_is_fatal(ret) == 0); if (ret < 0) { + if (server_err < 0) + goto cleanup; test_fail("Handshake failed\n"); - gnutls_perror(ret); - exit(1); + goto cleanup; } else { if (debug) test_success("Handshake was completed\n"); @@ -170,6 +131,7 @@ static void client(const char *test_name, int fd, unsigned raw, const char *name gnutls_bye(session, GNUTLS_SHUT_WR); + cleanup: close(fd); gnutls_deinit(session); @@ -190,7 +152,7 @@ static void terminate(void) exit(1); } -static void server(const char *test_name, int fd, const char *name, unsigned name_len) +static void server(const char *test_name, const char *prio, int fd, const char *name, unsigned name_len, int exp_err) { int ret; char buffer[MAX_BUF + 1]; @@ -222,7 +184,7 @@ static void server(const char *test_name, int fd, const char *name, unsigned nam /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + gnutls_priority_set_direct(session, prio, NULL); gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -234,6 +196,8 @@ static void server(const char *test_name, int fd, const char *name, unsigned nam } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); if (ret < 0) { + if (exp_err == ret) + goto cleanup; close(fd); gnutls_deinit(session); test_fail("Handshake has failed (%s)\n\n", @@ -259,7 +223,7 @@ static void server(const char *test_name, int fd, const char *name, unsigned nam test_fail("server_name: %s/%d\n", gnutls_strerror(ret), ret); } else { if (name == NULL || name[0] == 0) { - test_fail("did not received expected name\n"); + test_fail("did not receive the expected name: got: %s\n", buffer); exit(1); } if (buffer_size != strlen(buffer)) { @@ -278,7 +242,7 @@ static void server(const char *test_name, int fd, const char *name, unsigned nam /* do not wait for the peer to close the connection. */ gnutls_bye(session, GNUTLS_SHUT_WR); - + cleanup: close(fd); gnutls_deinit(session); @@ -294,7 +258,7 @@ static void server(const char *test_name, int fd, const char *name, unsigned nam /* name: the name sent by client * server_exp: the name which should be expected by the server to see */ -static void start(const char *test_name, unsigned raw, const char *name, unsigned len, const char *server_exp, unsigned server_exp_len) +static void start(const char *test_name, const char *prio, unsigned raw, const char *name, unsigned len, const char *server_exp, unsigned server_exp_len, int server_error) { int fd[2]; int ret; @@ -315,11 +279,11 @@ static void start(const char *test_name, unsigned raw, const char *name, unsigne if (child) { /* parent */ close(fd[1]); - server(test_name, fd[0], server_exp, server_exp_len); + server(test_name, prio, fd[0], server_exp, server_exp_len, server_error); kill(child, SIGTERM); } else { close(fd[0]); - client(test_name, fd[1], raw, name, len); + client(test_name, prio, fd[1], raw, name, len, server_error); exit(0); } } @@ -332,21 +296,35 @@ static void ch_handler(int sig) return; } +#define PRIO_TLS12 "NORMAL:-VERS-ALL:+VERS-TLS1.2" +#define PRIO_TLS13 "NORMAL:-VERS-ALL:+VERS-TLS1.3" +#define PRIO_NORMAL "NORMAL" + void doit(void) { signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); - start("NULL", 0, NULL, 0, NULL, 0); - start("empty", 0, "", 0, "", 0); - start("test.example.com", 0, "test.example.com", strlen("test.example.com"), "test.example.com", strlen("test.example.com")); - start("longtest.example.com", 0, "longtest.example.com.", strlen("longtest.example.com"), "longtest.example.com.", strlen("longtest.example.com")); -#if defined(HAVE_LIBIDN2) - /* test invalid UTF8 */ - start("invalid-utf8", 1, "invalid\xff.example.com.", sizeof("invalid\xff.example.com")-1, NULL, 0); -#endif + start("tls1.2 NULL", PRIO_TLS12, 0, NULL, 0, NULL, 0, 0); + start("tls1.2 empty", PRIO_TLS12, 0, "", 0, "", 0, 0); + start("tls1.2 test.example.com", PRIO_TLS12, 0, "test.example.com", strlen("test.example.com"), "test.example.com", strlen("test.example.com"), 0); + start("tls1.2 longtest.example.com", PRIO_TLS12, 0, "longtest.example.com.", strlen("longtest.example.com"), "longtest.example.com.", strlen("longtest.example.com"), 0); + /* test embedded NULL */ + start("tls1.2 embedded-NULL", PRIO_TLS12, 1, "invalid\x00.example.com.", sizeof("invalid\x00.example.com")-1, NULL, 0, GNUTLS_E_RECEIVED_DISALLOWED_NAME); + + start("tls1.3 NULL", PRIO_TLS13, 0, NULL, 0, NULL, 0, 0); + start("tls1.3 empty", PRIO_TLS13, 0, "", 0, "", 0, 0); + start("tls1.3 test.example.com", PRIO_TLS13, 0, "test.example.com", strlen("test.example.com"), "test.example.com", strlen("test.example.com"), 0); + start("tls1.3 longtest.example.com", PRIO_TLS13, 0, "longtest.example.com.", strlen("longtest.example.com"), "longtest.example.com.", strlen("longtest.example.com"), 0); + /* test embedded NULL */ + start("tls1.3 embedded-NULL", PRIO_TLS13, 1, "invalid\x00.example.com.", sizeof("invalid\x00.example.com")-1, NULL, 0, GNUTLS_E_RECEIVED_DISALLOWED_NAME); + + start("NULL", PRIO_NORMAL, 0, NULL, 0, NULL, 0, 0); + start("empty", PRIO_NORMAL, 0, "", 0, "", 0, 0); + start("test.example.com", PRIO_NORMAL, 0, "test.example.com", strlen("test.example.com"), "test.example.com", strlen("test.example.com"), 0); + start("longtest.example.com", PRIO_NORMAL, 0, "longtest.example.com.", strlen("longtest.example.com"), "longtest.example.com.", strlen("longtest.example.com"), 0); /* test embedded NULL */ - start("embedded-NULL", 1, "invalid\x00.example.com.", sizeof("invalid\x00.example.com")-1, NULL, 0); + start("embedded-NULL", PRIO_NORMAL, 1, "invalid\x00.example.com.", sizeof("invalid\x00.example.com")-1, NULL, 0, GNUTLS_E_RECEIVED_DISALLOWED_NAME); } #endif /* _WIN32 */ diff --git a/tests/mini-session-verify-function.c b/tests/mini-session-verify-function.c index 791481a7fb..26d015be45 100644 --- a/tests/mini-session-verify-function.c +++ b/tests/mini-session-verify-function.c @@ -32,6 +32,7 @@ #include #include "utils.h" #include "eagain-common.h" +#include /* Tests whether the session verify callbacks are operational. */ @@ -51,16 +52,20 @@ static int server_callback(gnutls_session_t session) { server_ok = 1; - if (gnutls_handshake_get_last_in(session) != - GNUTLS_HANDSHAKE_CERTIFICATE_PKT) { - fail("client's last input message was unexpected\n"); - exit(1); - } - - if (gnutls_handshake_get_last_out(session) != - GNUTLS_HANDSHAKE_SERVER_HELLO_DONE) { - fail("client's last output message was unexpected\n"); - exit(1); + if (gnutls_protocol_get_version(session) == GNUTLS_TLS1_2) { + if (gnutls_handshake_get_last_in(session) != + GNUTLS_HANDSHAKE_CERTIFICATE_PKT) { + fail("client's last input message was unexpected: %s\n", + gnutls_handshake_description_get_name(gnutls_handshake_get_last_in(session))); + exit(1); + } + + if (gnutls_handshake_get_last_out(session) != + GNUTLS_HANDSHAKE_SERVER_HELLO_DONE) { + fail("client's last output message was unexpected: %s\n", + gnutls_handshake_description_get_name(gnutls_handshake_get_last_out(session))); + exit(1); + } } return server_ret_val; } @@ -112,7 +117,7 @@ const gnutls_datum_t server_key = { server_key_pem, }; static -void test_success1(void) +void test_success1(const char *prio) { /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -138,12 +143,11 @@ void test_success1(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, "NORMAL", NULL); + assert(gnutls_priority_set_direct(server, prio, NULL)>=0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); - gnutls_session_set_verify_function(server, - server_callback); + gnutls_session_set_verify_function(server, server_callback); gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); /* Init client */ @@ -151,7 +155,7 @@ void test_success1(void) gnutls_init(&client, GNUTLS_CLIENT); gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); - gnutls_priority_set_direct(client, "NORMAL", NULL); + gnutls_priority_set_direct(client, prio, NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -177,7 +181,7 @@ void test_success1(void) } static -void test_failure_client(void) +void test_failure_client(const char *prio) { /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -205,12 +209,11 @@ void test_failure_client(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, "NORMAL", NULL); + assert(gnutls_priority_set_direct(server, prio, NULL)>=0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); - gnutls_session_set_verify_function(server, - server_callback); + gnutls_session_set_verify_function(server, server_callback); gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); /* Init client */ @@ -218,7 +221,7 @@ void test_failure_client(void) gnutls_init(&client, GNUTLS_CLIENT); gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); - gnutls_priority_set_direct(client, "NORMAL", NULL); + gnutls_priority_set_direct(client, prio, NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -238,7 +241,7 @@ void test_failure_client(void) } static -void test_failure_server(void) +void test_failure_server(const char *prio) { /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -266,12 +269,11 @@ void test_failure_server(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, "NORMAL", NULL); + assert(gnutls_priority_set_direct(server, prio, NULL)>=0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); - gnutls_session_set_verify_function(server, - server_callback); + gnutls_session_set_verify_function(server, server_callback); gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); /* Init client */ @@ -279,14 +281,13 @@ void test_failure_server(void) gnutls_init(&client, GNUTLS_CLIENT); gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); - gnutls_priority_set_direct(client, "NORMAL", NULL); + gnutls_priority_set_direct(client, prio, NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); - gnutls_session_set_verify_function(client, - client_callback); + gnutls_session_set_verify_function(client, client_callback); - HANDSHAKE_EXPECT(client, server, GNUTLS_E_AGAIN, GNUTLS_E_CERTIFICATE_ERROR); + HANDSHAKE_EXPECT(client, server, -1, GNUTLS_E_CERTIFICATE_ERROR); gnutls_deinit(client); gnutls_deinit(server); @@ -298,6 +299,20 @@ void test_failure_server(void) fail("%s: certificate verify callback wasn't called\n", __func__); } +static void start(const char *prio) +{ + success("running tests for %s\n", prio); + + client_ok = 0; + server_ok = 0; + client_ret_val = 0; + server_ret_val = 0; + + test_failure_client(prio); + test_failure_server(prio); + test_success1(prio); +} + void doit(void) { global_init(); @@ -305,9 +320,9 @@ void doit(void) if (debug) gnutls_global_set_log_level(99); - test_failure_client(); - test_failure_server(); - test_success1(); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); gnutls_global_deinit(); } diff --git a/tests/mini-termination.c b/tests/mini-termination.c index f5a884c25c..f0b232cefa 100644 --- a/tests/mini-termination.c +++ b/tests/mini-termination.c @@ -196,27 +196,8 @@ static void client(int fd, const char *prio) /* These are global */ -gnutls_anon_server_credentials_t anoncred; -gnutls_certificate_credentials_t x509_cred; pid_t child; -static gnutls_session_t initialize_tls_session(const char *prio) -{ - gnutls_session_t session; - - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, prio, NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - return session; -} - static void terminate(void) { kill(child, SIGTERM); @@ -228,6 +209,8 @@ static void server(int fd, const char *prio) int ret; char buffer[MAX_BUF + 1]; gnutls_session_t session; + gnutls_anon_server_credentials_t anoncred; + gnutls_certificate_credentials_t x509_cred; /* this must be called once in the program */ @@ -246,7 +229,15 @@ static void server(int fd, const char *prio) gnutls_anon_allocate_server_credentials(&anoncred); - session = initialize_tls_session(prio); + gnutls_init(&session, GNUTLS_SERVER); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, prio, NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); gnutls_transport_set_int(session, fd); @@ -325,6 +316,8 @@ void doit(void) signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); start("NORMAL"); } diff --git a/tests/mini-tls-nonblock.c b/tests/mini-tls-nonblock.c index 01cc8db12f..4a58bcdeec 100644 --- a/tests/mini-tls-nonblock.c +++ b/tests/mini-tls-nonblock.c @@ -136,7 +136,7 @@ my_pull_timeout(gnutls_transport_ptr_t tr, unsigned ms) return 1; } -static void client(int fd, const char *msg, unsigned expl) +static void client(int fd, const char *msg, const char *prio, unsigned expl) { int ret; gnutls_anon_client_credentials_t anoncred; @@ -164,7 +164,7 @@ static void client(int fd, const char *msg, unsigned expl) gnutls_init(&session, GNUTLS_CLIENT|expl); /* Use default priorities */ - ret = gnutls_priority_set_direct(session, "NORMAL", NULL); + ret = gnutls_priority_set_direct(session, prio, NULL); if (ret < 0) { fail("error in setting priority\n"); exit(1); @@ -222,7 +222,7 @@ static void terminate(void) exit(1); } -static void server(int fd, unsigned expl) +static void server(int fd, const char *prio, unsigned expl) { int ret; char buffer[MAX_BUF + 1]; @@ -255,7 +255,7 @@ static void server(int fd, unsigned expl) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + gnutls_priority_set_direct(session, prio, NULL); gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -292,11 +292,13 @@ static void server(int fd, unsigned expl) success("server: finished\n"); } -static void start(const char *msg, unsigned expl) +static void start(const char *msg, const char *prio, unsigned expl) { int fd[2]; int ret; + success("trying %s\n", msg); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { perror("socketpair"); @@ -313,12 +315,12 @@ static void start(const char *msg, unsigned expl) if (child) { /* parent */ close(fd[1]); - client(fd[0], msg, expl); + client(fd[0], msg, prio, expl); waitpid(-1, NULL, 0); //kill(child, SIGTERM); } else { close(fd[0]); - server(fd[1], expl); + server(fd[1], prio, expl); exit(0); } } @@ -340,9 +342,14 @@ void doit(void) { signal(SIGCHLD, ch_handler); - start("TLS-explicit flag", GNUTLS_NONBLOCK); - start("DTLS-explicit flag", GNUTLS_NONBLOCK|GNUTLS_DATAGRAM); - start("TLS-no flag", 0); + start("TLS1.2-explicit flag", "NORMAL:-VERS-ALL:+VERS-TLS1.2", GNUTLS_NONBLOCK); + start("TLS1.2-explicit flag", "NORMAL:-VERS-ALL:+VERS-TLS1.3", GNUTLS_NONBLOCK); + start("TLS-explicit flag", "NORMAL", GNUTLS_NONBLOCK); + start("DTLS1.2-explicit flag", "NORMAL:-VERS-ALL:+VERS-DTLS1.2", GNUTLS_NONBLOCK|GNUTLS_DATAGRAM); + start("DTLS-explicit flag", "NORMAL", GNUTLS_NONBLOCK|GNUTLS_DATAGRAM); + start("TLS1.2-no flag", "NORMAL:-VERS-ALL:+VERS-TLS1.2", 0); + start("TLS1.3-no flag", "NORMAL:-VERS-ALL:+VERS-TLS1.3", 0); + start("TLS-no flag", "NORMAL", 0); } #endif /* _WIN32 */ diff --git a/tests/mini-x509-2.c b/tests/mini-x509-2.c index 66db99ddae..e336af8367 100644 --- a/tests/mini-x509-2.c +++ b/tests/mini-x509-2.c @@ -32,6 +32,7 @@ #include #include "utils.h" #include "eagain-common.h" +#include /* This tests gnutls_certificate_set_x509_key() */ @@ -178,9 +179,9 @@ const gnutls_datum_t server_key = { server_key_pem, sizeof(server_key_pem) }; -void doit(void) +static +void start(const char *prio) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -195,6 +196,8 @@ void doit(void) unsigned i; gnutls_x509_privkey_t pkey; + success("trying %s\n", prio); + /* General init. */ global_init(); gnutls_global_set_log_function(tls_log_func); @@ -233,9 +236,7 @@ void doit(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, - "NORMAL:-CIPHER-ALL:+AES-128-GCM", - NULL); + assert(gnutls_priority_set_direct(server, prio, NULL) >= 0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -264,7 +265,7 @@ void doit(void) if (ret < 0) exit(1); - gnutls_priority_set_direct(client, "NORMAL", NULL); + gnutls_priority_set_direct(client, prio, NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -302,6 +303,8 @@ void doit(void) exit(1); } gnutls_free(scert.data); + + assert(gnutls_certificate_type_get(server)==GNUTLS_CRT_X509); } /* check gnutls_certificate_get_ours() - client side */ @@ -335,6 +338,8 @@ void doit(void) exit(1); } gnutls_free(ccert.data); + + assert(gnutls_certificate_type_get(client)==GNUTLS_CRT_X509); } /* check the number of certificates received */ @@ -410,6 +415,24 @@ void doit(void) fprintf(stderr, "could not verify certificate: %.4x\n", status); exit(1); } + + status = gnutls_ocsp_status_request_is_checked(client, 0); + if (status != 0) { + fprintf(stderr, "gnutls_ocsp_status_request_is_checked: unexpected value (%u)\n", status); + exit(1); + } + + status = gnutls_ocsp_status_request_is_checked(client, GNUTLS_OCSP_SR_IS_AVAIL); + if (status != 0) { + fprintf(stderr, "gnutls_ocsp_status_request_is_checked: unexpected value (%u)\n", status); + exit(1); + } + + status = gnutls_ocsp_status_request_is_checked(server, 0); + if (status != 0) { + fprintf(stderr, "gnutls_ocsp_status_request_is_checked: unexpected value (%u)\n", status); + exit(1); + } } gnutls_bye(client, GNUTLS_SHUT_RDWR); @@ -423,10 +446,12 @@ void doit(void) gnutls_global_deinit(); - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); } diff --git a/tests/mini-x509-callbacks-intr.c b/tests/mini-x509-callbacks-intr.c index 0342121e3a..02b7ec84e1 100644 --- a/tests/mini-x509-callbacks-intr.c +++ b/tests/mini-x509-callbacks-intr.c @@ -57,16 +57,18 @@ static int server_callback(gnutls_session_t session) { server_ok = 1; - if (gnutls_handshake_get_last_in(session) != - GNUTLS_HANDSHAKE_CERTIFICATE_PKT) { - fail("client's last input message was unexpected\n"); - exit(1); - } - - if (gnutls_handshake_get_last_out(session) != - GNUTLS_HANDSHAKE_SERVER_HELLO_DONE) { - fail("client's last output message was unexpected\n"); - exit(1); + if (gnutls_protocol_get_version(session) == GNUTLS_TLS1_2) { + if (gnutls_handshake_get_last_in(session) != + GNUTLS_HANDSHAKE_CERTIFICATE_PKT) { + fail("client's last input message was unexpected\n"); + exit(1); + } + + if (gnutls_handshake_get_last_out(session) != + GNUTLS_HANDSHAKE_SERVER_HELLO_DONE) { + fail("client's last output message was unexpected\n"); + exit(1); + } } return 0; @@ -118,7 +120,8 @@ const gnutls_datum_t server_key = { server_key_pem, sizeof(server_key_pem) }; -void doit(void) +static +void start(const char *prio) { /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -129,6 +132,11 @@ void doit(void) gnutls_session_t client; int cret = GNUTLS_E_AGAIN; + success("trying %s\n", prio); + client_ok = 0; + server_ok = 0; + pch_ok = 0; + /* General init. */ global_init(); gnutls_global_set_log_function(tls_log_func); @@ -186,4 +194,13 @@ void doit(void) if (client_ok == 0) fail("Client certificate verify callback wasn't called\n"); + + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); } diff --git a/tests/mini-x509-callbacks.c b/tests/mini-x509-callbacks.c index 59205eb7c0..4380e1f793 100644 --- a/tests/mini-x509-callbacks.c +++ b/tests/mini-x509-callbacks.c @@ -128,16 +128,18 @@ static int server_callback(gnutls_session_t session) { server_ok = 1; - if (gnutls_handshake_get_last_in(session) != - GNUTLS_HANDSHAKE_CERTIFICATE_PKT) { - fail("client's last input message was unexpected\n"); - exit(1); - } + if (gnutls_protocol_get_version(session) == GNUTLS_TLS1_2) { + if (gnutls_handshake_get_last_in(session) != + GNUTLS_HANDSHAKE_CERTIFICATE_PKT) { + fail("client's last input message was unexpected\n"); + exit(1); + } - if (gnutls_handshake_get_last_out(session) != - GNUTLS_HANDSHAKE_SERVER_HELLO_DONE) { - fail("client's last output message was unexpected\n"); - exit(1); + if (gnutls_handshake_get_last_out(session) != + GNUTLS_HANDSHAKE_SERVER_HELLO_DONE) { + fail("client's last output message was unexpected\n"); + exit(1); + } } return 0; @@ -207,7 +209,8 @@ static void append_alpn(gnutls_session_t session) } } -void doit(void) +static +void start(const char *prio, unsigned check_order) { /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -218,6 +221,12 @@ void doit(void) gnutls_session_t client; int cret = GNUTLS_E_AGAIN; + success("trying %s\n", prio); + + client_ok = 0; + server_ok = 0; + pch_ok = 0; + /* General init. */ global_init(); gnutls_global_set_log_function(tls_log_func); @@ -232,7 +241,7 @@ void doit(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, "NORMAL", NULL); + gnutls_priority_set_direct(server, prio, NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -241,9 +250,10 @@ void doit(void) gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); gnutls_handshake_set_post_client_hello_function(server, post_client_hello_callback); - gnutls_handshake_set_hook_function(server, GNUTLS_HANDSHAKE_ANY, - GNUTLS_HOOK_POST, - handshake_callback); + if (check_order) + gnutls_handshake_set_hook_function(server, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_POST, + handshake_callback); append_alpn(server); /* Init client */ @@ -251,7 +261,7 @@ void doit(void) gnutls_init(&client, GNUTLS_CLIENT); gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); - gnutls_priority_set_direct(client, "NORMAL", NULL); + gnutls_priority_set_direct(client, prio, NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -280,4 +290,13 @@ void doit(void) if (client_ok == 0) fail("Client certificate verify callback wasn't called\n"); + + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2", 1); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3", 0); + start("NORMAL", 0); } diff --git a/tests/mini-x509-cas.c b/tests/mini-x509-cas.c index 3866239c60..818d98ec53 100644 --- a/tests/mini-x509-cas.c +++ b/tests/mini-x509-cas.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include "utils.h" #include "eagain-common.h" @@ -43,9 +44,9 @@ static void tls_log_func(int level, const char *str) fprintf(stderr, "%s|<%d>| %s", side, level, str); } -void doit(void) +static +void start(const char *prio) { - int exit_code = EXIT_SUCCESS; const char *ca_file; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -56,6 +57,8 @@ void doit(void) gnutls_session_t client; int cret = GNUTLS_E_AGAIN; + success("trying %s\n", prio); + /* General init. */ global_init(); gnutls_global_set_log_function(tls_log_func); @@ -84,7 +87,7 @@ void doit(void) gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); - gnutls_priority_set_direct(server, "NORMAL", NULL); + assert(gnutls_priority_set_direct(server, prio, NULL)>=0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -94,7 +97,7 @@ void doit(void) gnutls_init(&client, GNUTLS_CLIENT); gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); - gnutls_priority_set_direct(client, "NORMAL", NULL); + assert(gnutls_priority_set_direct(client, prio, NULL)>=0); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -112,10 +115,12 @@ void doit(void) gnutls_global_deinit(); - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); } diff --git a/tests/mini-x509-default-prio.c b/tests/mini-x509-default-prio.c deleted file mode 100644 index 62ef5b55ff..0000000000 --- a/tests/mini-x509-default-prio.c +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Copyright (C) 2008-2012 Free Software Foundation, Inc. - * - * Author: Simon Josefsson - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include "utils.h" -#include "eagain-common.h" - -const char *side; - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "%s|<%d>| %s", side, level, str); -} - -static unsigned char ca_cert_pem[] = -"-----BEGIN CERTIFICATE-----\n" -"MIIC4DCCAcigAwIBAgIBADANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n" -"MCIYDzIwMTQwNDA0MTk1OTA1WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n" -"BENBLTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD46JAPKrTsNTHl\n" -"zD06eIYBF/8Z+TR0wukp9Cdh8Sw77dODLjy/QrVKiDgDZZdyUc8Agsdr86i95O0p\n" -"w19Np3a0wja0VC9uwppZrpuHsrWukwxIBXoViyBc20Y6Ce8j0scCbR10SP565qXC\n" -"i8vr86S4xmQMRZMtwohP/GWQzt45jqkHPYHjdKzwo2b2XI7joDq0dvbr3MSONkGs\n" -"z7A/1Bl3iH5keDTWjqpJRWqXE79IhGOhELy+gG4VLJDGHWCr2mq24b9Kirp+TTxl\n" -"lUwJRbchqUqerlFdt1NgDoGaJyd73Sh0qcZzmEiOI2hGvBtG86tdQ6veC9dl05et\n" -"pM+6RMABAgMBAAGjQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n" -"ADAdBgNVHQ4EFgQUGD0RYr2H7kfjQUcBMxSTCDQnhu0wDQYJKoZIhvcNAQELBQAD\n" -"ggEBALnHMubZ6WJ/XOFyDuo0imwg2onrPas3MuKT4+y0aHY943BgAOEc3jKitRjc\n" -"qhb0IUD+NS7itRwNtCgI3v5Ym5nnQoVk+aOD/D724TjJ9XaPQJzOnuGaZX99VN2F\n" -"sgwAtDXedlDQ+I6KLzLd6VW+UyWTG4qiRjOGDnG2kM1wAEOM27TzHV/YWleGjhtA\n" -"bRHxkioOni5goNlTzazxF4v9VD2uinWrIFyZmF6vQuMm6rKFgq6higAU8uesFo7+\n" -"3qpeRjNrPC4fNJUBvv+PC0WnP0PLnD/rY/ZcTYjLb/vJp1fiMJ5fU7jJklBhX2TE\n" -"tstcP7FUV5HA/s9BxgAh0Z2wyyY=\n" -"-----END CERTIFICATE-----\n"; - -const gnutls_datum_t ca_cert = { ca_cert_pem, - sizeof(ca_cert_pem) -}; - -static unsigned char server_cert_pem[] = -"-----BEGIN CERTIFICATE-----\n" -"MIIDIzCCAgugAwIBAgIMUz8PCR2sdRK56V6OMA0GCSqGSIb3DQEBCwUAMA8xDTAL\n" -"BgNVBAMTBENBLTEwIhgPMjAxNDA0MDQxOTU5MDVaGA85OTk5MTIzMTIzNTk1OVow\n" -"EzERMA8GA1UEAxMIc2VydmVyLTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n" -"AoIBAQDZ3dCzh9gOTOiOb2dtrPu91fYYgC/ey0ACYjQxaru7FZwnuXPhQK9KHsIV\n" -"YRIyo49wjKZddkHet2sbpFAAeETZh8UUWLRb/mupyaSJMycaYCNjLZCUJTztvXxJ\n" -"CCNfbtgvKC+Vu1mu94KBPatslgvnsamH7AiL5wmwRRqdH/Z93XaEvuRG6Zk0Sh9q\n" -"ZMdCboGfjtmGEJ1V+z5CR+IyH4sckzd8WJW6wBSEwgliGaXnc75xKtFWBZV2njNr\n" -"8V1TOYOdLEbiF4wduVExL5TKq2ywNkRpUfK2I1BcWS5D9Te/QT7aSdE08rL6ztmZ\n" -"IhILSrMOfoLnJ4lzXspz3XLlEuhnAgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwFAYD\n" -"VR0RBA0wC4IJbG9jYWxob3N0MA8GA1UdDwEB/wQFAwMHoAAwHQYDVR0OBBYEFJXR\n" -"raRS5MVhEqaRE42A3S2BIj7UMB8GA1UdIwQYMBaAFP6S7AyMRO2RfkANgo8YsCl8\n" -"JfJkMA0GCSqGSIb3DQEBCwUAA4IBAQCQ62+skMVZYrGbpab8RI9IG6xH8kEndvFj\n" -"J7wBBZCOlcjOj+HQ7a2buF5zGKRwAOSznKcmvZ7l5DPdsd0t5/VT9LKSbQ6+CfGr\n" -"Xs5qPaDJnRhZkOILCvXJ9qyO+79WNMsg9pWnxkTK7aWR5OYE+1Qw1jG681HMkWTm\n" -"nt7et9bdiNNpvA+L55569XKbdtJLs3hn5gEQFgS7EaEj59aC4vzSTFcidowCoa43\n" -"7JmfSfC9YaAIFH2vriyU0QNf2y7cG5Hpkge+U7uMzQrsT77Q3SDB9WkyPAFNSB4Q\n" -"B/r+OtZXOnQhLlMV7h4XGlWruFEaOBVjFHSdMGUh+DtaLvd1bVXI\n" -"-----END CERTIFICATE-----\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDATCCAemgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n" -"MCIYDzIwMTQwNDA0MTk1OTA1WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n" -"BENBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvhyQfsUm3T0xK\n" -"jiBXO3H6Y27b7lmCRYZQCmXCl2sUsGDL7V9biavTt3+sorWtH542/cTGDh5n8591\n" -"7rVxAB/VASmN55O3fjZyFGrjusjhXBla0Yxe5rZ/7/Pjrq84T7gc/IXiX9Sums/c\n" -"o9AeoykfhsjV2ubhh4h+8uPsHDTcAFTxq3mQaoldwnW2nmjDFzaKLtQdnyFf41o6\n" -"nsJCK/J9PtpdCID5Zb+eQfu5Yhk1iUHe8a9TOstCHtgBq61YzufDHUQk3zsT+VZM\n" -"20lDvSBnHdWLjxoea587JbkvtH8xRR8ThwABSb98qPnhJ8+A7mpO89QO1wxZM85A\n" -"xEweQlMHAgMBAAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n" -"ADAdBgNVHQ4EFgQU/pLsDIxE7ZF+QA2CjxiwKXwl8mQwHwYDVR0jBBgwFoAUGD0R\n" -"Yr2H7kfjQUcBMxSTCDQnhu0wDQYJKoZIhvcNAQELBQADggEBANEXLUV+Z1PGTn7M\n" -"3rPT/m/EamcrZJ3vFWrnfN91ws5llyRUKNhx6222HECh3xRSxH9YJONsbv2zY6sd\n" -"ztY7lvckL4xOgWAjoCVTx3hqbZjDxpLRsvraw1PlqBHlRQVWLKlEQ55+tId2zgMX\n" -"Z+wxM7FlU/6yWVPODIxrqYQd2KqaEp4aLIklw6Hi4HD6DnQJikjsJ6Noe0qyX1Tx\n" -"uZ8mgP/G47Fe2d2H29kJ1iJ6hp1XOqyWrVIh/jONcnTvWS8aMqS3MU0EJH2Pb1Qa\n" -"KGIvbd/3H9LykFTP/b7Imdv2fZxXIK8jC+jbF1w6rdBCVNA0p30X/jonoC3vynEK\n" -"5cK0cgs=\n" -"-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = -"-----BEGIN RSA PRIVATE KEY-----\n" -"MIIEpQIBAAKCAQEA2d3Qs4fYDkzojm9nbaz7vdX2GIAv3stAAmI0MWq7uxWcJ7lz\n" -"4UCvSh7CFWESMqOPcIymXXZB3rdrG6RQAHhE2YfFFFi0W/5rqcmkiTMnGmAjYy2Q\n" -"lCU87b18SQgjX27YLygvlbtZrveCgT2rbJYL57Gph+wIi+cJsEUanR/2fd12hL7k\n" -"RumZNEofamTHQm6Bn47ZhhCdVfs+QkfiMh+LHJM3fFiVusAUhMIJYhml53O+cSrR\n" -"VgWVdp4za/FdUzmDnSxG4heMHblRMS+UyqtssDZEaVHytiNQXFkuQ/U3v0E+2knR\n" -"NPKy+s7ZmSISC0qzDn6C5yeJc17Kc91y5RLoZwIDAQABAoIBAQCRXAu5HPOsZufq\n" -"0K2DYZz9BdqSckR+M8HbVUZZiksDAeIUJwoHyi6qF2eK+B86JiK4Bz+gsBw2ys3t\n" -"vW2bQqM9N/boIl8D2fZfbCgZWkXGtUonC+mgzk+el4Rq/cEMFVqr6/YDwuKNeJpc\n" -"PJc5dcsvpTvlcjgpj9bJAvJEz2SYiIUpvtG4WNMGGapVZZPDvWn4/isY+75T5oDf\n" -"1X5jG0lN9uoUjcuGuThN7gxjwlRkcvEOPHjXc6rxfrWIDdiz/91V46PwpqVDpRrg\n" -"ig6U7+ckS0Oy2v32x0DaDhwAfDJ2RNc9az6Z+11lmY3LPkjG/p8Klcmgvt4/lwkD\n" -"OYRC5QGRAoGBAPFdud6nmVt9h1DL0o4R6snm6P3K81Ds765VWVmpzJkK3+bwe4PQ\n" -"GQQ0I0zN4hXkDMwHETS+EVWllqkK/d4dsE3volYtyTti8zthIATlgSEJ81x/ChAQ\n" -"vvXxgx+zPUnb1mUwy+X+6urTHe4bxN2ypg6ROIUmT+Hx1ITG40LRRiPTAoGBAOcT\n" -"WR8DTrj42xbxAUpz9vxJ15ZMwuIpk3ShE6+CWqvaXHF22Ju4WFwRNlW2zVLH6UMt\n" -"nNfOzyDoryoiu0+0mg0wSmgdJbtCSHoI2GeiAnjGn5i8flQlPQ8bdwwmU6g6I/EU\n" -"QRbGK/2XLmlrGN52gVy9UX0NsAA5fEOsAJiFj1CdAoGBAN9i3nbq6O2bNVSa/8mL\n" -"XaD1vGe/oQgh8gaIaYSpuXlfbjCAG+C4BZ81XgJkfj3CbfGbDNqimsqI0fKsAJ/F\n" -"HHpVMgrOn3L+Np2bW5YMj0Fzwy+1SCvsQ8C+gJwjOLMV6syGp/+6udMSB55rRv3k\n" -"rPnIf+YDumUke4tTw9wAcgkPAoGASHMkiji7QfuklbjSsslRMyDj21gN8mMevH6U\n" -"cX7pduBsA5dDqu9NpPAwnQdHsSDE3i868d8BykuqQAfLut3hPylY6vPYlLHfj4Oe\n" -"dj+xjrSX7YeMBE34qvfth32s1R4FjtzO25keyc/Q2XSew4FcZftlxVO5Txi3AXC4\n" -"bxnRKXECgYEAva+og7/rK+ZjboJVNxhFrwHp9bXhz4tzrUaWNvJD2vKJ5ZcThHcX\n" -"zCig8W7eXHLPLDhi9aWZ3kUZ1RLhrFc/6dujtVtU9z2w1tmn1I+4Zi6D6L4DzKdg\n" -"nMRLFoXufs/qoaJTqa8sQvKa+ceJAF04+gGtw617cuaZdZ3SYRLR2dk=\n" -"-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - -void doit(void) -{ - int exit_code = EXIT_SUCCESS; - int ret; - /* Server stuff. */ - gnutls_certificate_credentials_t serverx509cred; - gnutls_session_t server; - int sret = GNUTLS_E_AGAIN; - /* Client stuff. */ - gnutls_certificate_credentials_t clientx509cred; - gnutls_session_t client; - int cret = GNUTLS_E_AGAIN; - - /* General init. */ - global_init(); - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(6); - - /* Init server */ - gnutls_certificate_allocate_credentials(&serverx509cred); - gnutls_certificate_set_x509_key_mem(serverx509cred, - &server_cert, &server_key, - GNUTLS_X509_FMT_PEM); - - gnutls_init(&server, GNUTLS_SERVER); - gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, - serverx509cred); - ret = gnutls_set_default_priority(server); - if (ret < 0) - exit(1); - - gnutls_transport_set_push_function(server, server_push); - gnutls_transport_set_pull_function(server, server_pull); - gnutls_transport_set_ptr(server, server); - - /* Init client */ - ret = gnutls_certificate_allocate_credentials(&clientx509cred); - if (ret < 0) - exit(1); - - ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); - if (ret < 0) - exit(1); - - ret = gnutls_init(&client, GNUTLS_CLIENT); - if (ret < 0) - exit(1); - - ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, - clientx509cred); - if (ret < 0) - exit(1); - - ret = gnutls_set_default_priority(client); - if (ret < 0) - exit(1); - - gnutls_transport_set_push_function(client, client_push); - gnutls_transport_set_pull_function(client, client_pull); - gnutls_transport_set_ptr(client, client); - - HANDSHAKE(client, server); - - /* check gnutls_certificate_get_ours() - client side */ - { - const gnutls_datum_t *mcert; - - mcert = gnutls_certificate_get_ours(client); - if (mcert != NULL) { - fail("gnutls_certificate_get_ours(): failed\n"); - exit(1); - } - } - - /* check the number of certificates received */ - { - unsigned cert_list_size = 0; - gnutls_typed_vdata_st data[2]; - unsigned status; - - memset(data, 0, sizeof(data)); - - data[0].type = GNUTLS_DT_DNS_HOSTNAME; - data[0].data = (void*)"localhost1"; - - data[1].type = GNUTLS_DT_KEY_PURPOSE_OID; - data[1].data = (void*)GNUTLS_KP_TLS_WWW_SERVER; - - gnutls_certificate_get_peers(client, &cert_list_size); - if (cert_list_size < 2) { - fprintf(stderr, "received a certificate list of %d!\n", cert_list_size); - exit(1); - } - - ret = gnutls_certificate_verify_peers(client, data, 2, &status); - if (ret < 0) { - fprintf(stderr, "could not verify certificate: %s\n", gnutls_strerror(ret)); - exit(1); - } - - if (status == 0) { - fprintf(stderr, "should not have accepted!\n"); - exit(1); - } - - data[0].type = GNUTLS_DT_DNS_HOSTNAME; - data[0].data = (void*)"localhost"; - - ret = gnutls_certificate_verify_peers(client, data, 2, &status); - if (ret < 0) { - fprintf(stderr, "could not verify certificate: %s\n", gnutls_strerror(ret)); - exit(1); - } - - if (status != 0) { - fprintf(stderr, "could not verify certificate: %.4x\n", status); - exit(1); - } - } - - ret = gnutls_session_ext_master_secret_status(client); - if (ret != 1) { - fprintf(stderr, "Extended master secret wasn't negotiated by default (client ret: %d)\n", ret); - exit(1); - } - - ret = gnutls_session_ext_master_secret_status(server); - if (ret != 1) { - fprintf(stderr, "Extended master secret wasn't negotiated by default (server ret: %d)\n", ret); - exit(1); - } - - gnutls_bye(client, GNUTLS_SHUT_RDWR); - gnutls_bye(server, GNUTLS_SHUT_RDWR); - - gnutls_deinit(client); - gnutls_deinit(server); - - gnutls_certificate_free_credentials(serverx509cred); - gnutls_certificate_free_credentials(clientx509cred); - - gnutls_global_deinit(); - - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } -} diff --git a/tests/mini-x509-dual.c b/tests/mini-x509-dual.c deleted file mode 100644 index 0bfd614d32..0000000000 --- a/tests/mini-x509-dual.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright (C) 2015 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include "utils.h" -#include "eagain-common.h" - -const char *side; - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "%s|<%d>| %s", side, level, str); -} - -static unsigned char ca_cert_pem[] = -"-----BEGIN CERTIFICATE-----\n" -"MIIC4DCCAcigAwIBAgIBADANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n" -"MCIYDzIwMTQwNDA0MTk1OTA1WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n" -"BENBLTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD46JAPKrTsNTHl\n" -"zD06eIYBF/8Z+TR0wukp9Cdh8Sw77dODLjy/QrVKiDgDZZdyUc8Agsdr86i95O0p\n" -"w19Np3a0wja0VC9uwppZrpuHsrWukwxIBXoViyBc20Y6Ce8j0scCbR10SP565qXC\n" -"i8vr86S4xmQMRZMtwohP/GWQzt45jqkHPYHjdKzwo2b2XI7joDq0dvbr3MSONkGs\n" -"z7A/1Bl3iH5keDTWjqpJRWqXE79IhGOhELy+gG4VLJDGHWCr2mq24b9Kirp+TTxl\n" -"lUwJRbchqUqerlFdt1NgDoGaJyd73Sh0qcZzmEiOI2hGvBtG86tdQ6veC9dl05et\n" -"pM+6RMABAgMBAAGjQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n" -"ADAdBgNVHQ4EFgQUGD0RYr2H7kfjQUcBMxSTCDQnhu0wDQYJKoZIhvcNAQELBQAD\n" -"ggEBALnHMubZ6WJ/XOFyDuo0imwg2onrPas3MuKT4+y0aHY943BgAOEc3jKitRjc\n" -"qhb0IUD+NS7itRwNtCgI3v5Ym5nnQoVk+aOD/D724TjJ9XaPQJzOnuGaZX99VN2F\n" -"sgwAtDXedlDQ+I6KLzLd6VW+UyWTG4qiRjOGDnG2kM1wAEOM27TzHV/YWleGjhtA\n" -"bRHxkioOni5goNlTzazxF4v9VD2uinWrIFyZmF6vQuMm6rKFgq6higAU8uesFo7+\n" -"3qpeRjNrPC4fNJUBvv+PC0WnP0PLnD/rY/ZcTYjLb/vJp1fiMJ5fU7jJklBhX2TE\n" -"tstcP7FUV5HA/s9BxgAh0Z2wyyY=\n" -"-----END CERTIFICATE-----\n"; - -const gnutls_datum_t ca_cert = { ca_cert_pem, - sizeof(ca_cert_pem) -}; - -static unsigned char server_cert_pem[] = -"-----BEGIN CERTIFICATE-----\n" -"MIIDIzCCAgugAwIBAgIMUz8PCR2sdRK56V6OMA0GCSqGSIb3DQEBCwUAMA8xDTAL\n" -"BgNVBAMTBENBLTEwIhgPMjAxNDA0MDQxOTU5MDVaGA85OTk5MTIzMTIzNTk1OVow\n" -"EzERMA8GA1UEAxMIc2VydmVyLTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n" -"AoIBAQDZ3dCzh9gOTOiOb2dtrPu91fYYgC/ey0ACYjQxaru7FZwnuXPhQK9KHsIV\n" -"YRIyo49wjKZddkHet2sbpFAAeETZh8UUWLRb/mupyaSJMycaYCNjLZCUJTztvXxJ\n" -"CCNfbtgvKC+Vu1mu94KBPatslgvnsamH7AiL5wmwRRqdH/Z93XaEvuRG6Zk0Sh9q\n" -"ZMdCboGfjtmGEJ1V+z5CR+IyH4sckzd8WJW6wBSEwgliGaXnc75xKtFWBZV2njNr\n" -"8V1TOYOdLEbiF4wduVExL5TKq2ywNkRpUfK2I1BcWS5D9Te/QT7aSdE08rL6ztmZ\n" -"IhILSrMOfoLnJ4lzXspz3XLlEuhnAgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwFAYD\n" -"VR0RBA0wC4IJbG9jYWxob3N0MA8GA1UdDwEB/wQFAwMHoAAwHQYDVR0OBBYEFJXR\n" -"raRS5MVhEqaRE42A3S2BIj7UMB8GA1UdIwQYMBaAFP6S7AyMRO2RfkANgo8YsCl8\n" -"JfJkMA0GCSqGSIb3DQEBCwUAA4IBAQCQ62+skMVZYrGbpab8RI9IG6xH8kEndvFj\n" -"J7wBBZCOlcjOj+HQ7a2buF5zGKRwAOSznKcmvZ7l5DPdsd0t5/VT9LKSbQ6+CfGr\n" -"Xs5qPaDJnRhZkOILCvXJ9qyO+79WNMsg9pWnxkTK7aWR5OYE+1Qw1jG681HMkWTm\n" -"nt7et9bdiNNpvA+L55569XKbdtJLs3hn5gEQFgS7EaEj59aC4vzSTFcidowCoa43\n" -"7JmfSfC9YaAIFH2vriyU0QNf2y7cG5Hpkge+U7uMzQrsT77Q3SDB9WkyPAFNSB4Q\n" -"B/r+OtZXOnQhLlMV7h4XGlWruFEaOBVjFHSdMGUh+DtaLvd1bVXI\n" -"-----END CERTIFICATE-----\n" -"-----BEGIN CERTIFICATE-----\n" -"MIIDATCCAemgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n" -"MCIYDzIwMTQwNDA0MTk1OTA1WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n" -"BENBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvhyQfsUm3T0xK\n" -"jiBXO3H6Y27b7lmCRYZQCmXCl2sUsGDL7V9biavTt3+sorWtH542/cTGDh5n8591\n" -"7rVxAB/VASmN55O3fjZyFGrjusjhXBla0Yxe5rZ/7/Pjrq84T7gc/IXiX9Sums/c\n" -"o9AeoykfhsjV2ubhh4h+8uPsHDTcAFTxq3mQaoldwnW2nmjDFzaKLtQdnyFf41o6\n" -"nsJCK/J9PtpdCID5Zb+eQfu5Yhk1iUHe8a9TOstCHtgBq61YzufDHUQk3zsT+VZM\n" -"20lDvSBnHdWLjxoea587JbkvtH8xRR8ThwABSb98qPnhJ8+A7mpO89QO1wxZM85A\n" -"xEweQlMHAgMBAAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n" -"ADAdBgNVHQ4EFgQU/pLsDIxE7ZF+QA2CjxiwKXwl8mQwHwYDVR0jBBgwFoAUGD0R\n" -"Yr2H7kfjQUcBMxSTCDQnhu0wDQYJKoZIhvcNAQELBQADggEBANEXLUV+Z1PGTn7M\n" -"3rPT/m/EamcrZJ3vFWrnfN91ws5llyRUKNhx6222HECh3xRSxH9YJONsbv2zY6sd\n" -"ztY7lvckL4xOgWAjoCVTx3hqbZjDxpLRsvraw1PlqBHlRQVWLKlEQ55+tId2zgMX\n" -"Z+wxM7FlU/6yWVPODIxrqYQd2KqaEp4aLIklw6Hi4HD6DnQJikjsJ6Noe0qyX1Tx\n" -"uZ8mgP/G47Fe2d2H29kJ1iJ6hp1XOqyWrVIh/jONcnTvWS8aMqS3MU0EJH2Pb1Qa\n" -"KGIvbd/3H9LykFTP/b7Imdv2fZxXIK8jC+jbF1w6rdBCVNA0p30X/jonoC3vynEK\n" -"5cK0cgs=\n" -"-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = -"-----BEGIN RSA PRIVATE KEY-----\n" -"MIIEpQIBAAKCAQEA2d3Qs4fYDkzojm9nbaz7vdX2GIAv3stAAmI0MWq7uxWcJ7lz\n" -"4UCvSh7CFWESMqOPcIymXXZB3rdrG6RQAHhE2YfFFFi0W/5rqcmkiTMnGmAjYy2Q\n" -"lCU87b18SQgjX27YLygvlbtZrveCgT2rbJYL57Gph+wIi+cJsEUanR/2fd12hL7k\n" -"RumZNEofamTHQm6Bn47ZhhCdVfs+QkfiMh+LHJM3fFiVusAUhMIJYhml53O+cSrR\n" -"VgWVdp4za/FdUzmDnSxG4heMHblRMS+UyqtssDZEaVHytiNQXFkuQ/U3v0E+2knR\n" -"NPKy+s7ZmSISC0qzDn6C5yeJc17Kc91y5RLoZwIDAQABAoIBAQCRXAu5HPOsZufq\n" -"0K2DYZz9BdqSckR+M8HbVUZZiksDAeIUJwoHyi6qF2eK+B86JiK4Bz+gsBw2ys3t\n" -"vW2bQqM9N/boIl8D2fZfbCgZWkXGtUonC+mgzk+el4Rq/cEMFVqr6/YDwuKNeJpc\n" -"PJc5dcsvpTvlcjgpj9bJAvJEz2SYiIUpvtG4WNMGGapVZZPDvWn4/isY+75T5oDf\n" -"1X5jG0lN9uoUjcuGuThN7gxjwlRkcvEOPHjXc6rxfrWIDdiz/91V46PwpqVDpRrg\n" -"ig6U7+ckS0Oy2v32x0DaDhwAfDJ2RNc9az6Z+11lmY3LPkjG/p8Klcmgvt4/lwkD\n" -"OYRC5QGRAoGBAPFdud6nmVt9h1DL0o4R6snm6P3K81Ds765VWVmpzJkK3+bwe4PQ\n" -"GQQ0I0zN4hXkDMwHETS+EVWllqkK/d4dsE3volYtyTti8zthIATlgSEJ81x/ChAQ\n" -"vvXxgx+zPUnb1mUwy+X+6urTHe4bxN2ypg6ROIUmT+Hx1ITG40LRRiPTAoGBAOcT\n" -"WR8DTrj42xbxAUpz9vxJ15ZMwuIpk3ShE6+CWqvaXHF22Ju4WFwRNlW2zVLH6UMt\n" -"nNfOzyDoryoiu0+0mg0wSmgdJbtCSHoI2GeiAnjGn5i8flQlPQ8bdwwmU6g6I/EU\n" -"QRbGK/2XLmlrGN52gVy9UX0NsAA5fEOsAJiFj1CdAoGBAN9i3nbq6O2bNVSa/8mL\n" -"XaD1vGe/oQgh8gaIaYSpuXlfbjCAG+C4BZ81XgJkfj3CbfGbDNqimsqI0fKsAJ/F\n" -"HHpVMgrOn3L+Np2bW5YMj0Fzwy+1SCvsQ8C+gJwjOLMV6syGp/+6udMSB55rRv3k\n" -"rPnIf+YDumUke4tTw9wAcgkPAoGASHMkiji7QfuklbjSsslRMyDj21gN8mMevH6U\n" -"cX7pduBsA5dDqu9NpPAwnQdHsSDE3i868d8BykuqQAfLut3hPylY6vPYlLHfj4Oe\n" -"dj+xjrSX7YeMBE34qvfth32s1R4FjtzO25keyc/Q2XSew4FcZftlxVO5Txi3AXC4\n" -"bxnRKXECgYEAva+og7/rK+ZjboJVNxhFrwHp9bXhz4tzrUaWNvJD2vKJ5ZcThHcX\n" -"zCig8W7eXHLPLDhi9aWZ3kUZ1RLhrFc/6dujtVtU9z2w1tmn1I+4Zi6D6L4DzKdg\n" -"nMRLFoXufs/qoaJTqa8sQvKa+ceJAF04+gGtw617cuaZdZ3SYRLR2dk=\n" -"-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - -#define MSG "hello there ppl" - -static void try(const char *client_prio, gnutls_kx_algorithm_t client_kx) -{ - int ret; - char buffer[256]; - /* Server stuff. */ - gnutls_certificate_credentials_t serverx509cred; - gnutls_anon_server_credentials_t s_anoncred; - gnutls_dh_params_t dh_params; - const gnutls_datum_t p3 = - { (unsigned char *) pkcs3, strlen(pkcs3) }; - gnutls_session_t server; - int sret = GNUTLS_E_AGAIN; - /* Client stuff. */ - gnutls_certificate_credentials_t clientx509cred; - gnutls_anon_client_credentials_t c_anoncred; - gnutls_session_t client; - int cret = GNUTLS_E_AGAIN; - - /* General init. */ - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(6); - - /* Init server */ - gnutls_anon_allocate_server_credentials(&s_anoncred); - gnutls_certificate_allocate_credentials(&serverx509cred); - gnutls_certificate_set_x509_key_mem(serverx509cred, - &server_cert, &server_key, - GNUTLS_X509_FMT_PEM); - - gnutls_dh_params_init(&dh_params); - gnutls_dh_params_import_pkcs3(dh_params, &p3, GNUTLS_X509_FMT_PEM); - gnutls_certificate_set_dh_params(serverx509cred, dh_params); - - gnutls_init(&server, GNUTLS_SERVER); - gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, - serverx509cred); - gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); - - gnutls_priority_set_direct(server, - "NORMAL:+ANON-ECDH:+ECDHE-RSA:+DHE-RSA", - NULL); - gnutls_transport_set_push_function(server, server_push); - gnutls_transport_set_pull_function(server, server_pull); - gnutls_transport_set_ptr(server, server); - - /* Init client */ - - ret = gnutls_certificate_allocate_credentials(&clientx509cred); - if (ret < 0) - exit(1); - - ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); - if (ret < 0) - exit(1); - - ret = gnutls_init(&client, GNUTLS_CLIENT); - if (ret < 0) - exit(1); - - gnutls_anon_allocate_client_credentials(&c_anoncred); - gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); - ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, - clientx509cred); - if (ret < 0) - exit(1); - - ret = gnutls_priority_set_direct(client, "NORMAL:-KX-ALL:+ARCFOUR-128:+ANON-ECDH", NULL); - if (ret < 0) - exit(1); - - gnutls_transport_set_push_function(client, client_push); - gnutls_transport_set_pull_function(client, client_pull); - gnutls_transport_set_ptr(client, client); - - HANDSHAKE(client, server); - - if (gnutls_kx_get(client) != GNUTLS_KX_ANON_ECDH) { - fail("got unexpected key exchange algorithm: %s (expected ANON-ECDH)\n", gnutls_kx_get_name(gnutls_kx_get(client))); - exit(1); - } - - /* rehandshake using certificate auth */ - ret = gnutls_priority_set_direct(client, client_prio, NULL); - if (ret < 0) { - exit(1); - } - HANDSHAKE(client, server); - - if (gnutls_kx_get(client) != client_kx) { - fail("got unexpected key exchange algorithm: %s (expected %s)\n", gnutls_kx_get_name(gnutls_kx_get(client)), - gnutls_kx_get_name(client_kx)); - exit(1); - } - - /* check gnutls_certificate_get_ours() - client side */ - { - const gnutls_datum_t *mcert; - - mcert = gnutls_certificate_get_ours(client); - if (mcert != NULL) { - fail("gnutls_certificate_get_ours(): failed\n"); - exit(1); - } - } - - /* check the number of certificates received */ - { - unsigned cert_list_size = 0; - - gnutls_certificate_get_peers(client, &cert_list_size); - if (cert_list_size < 2) { - fprintf(stderr, "received a certificate list of %d!\n", cert_list_size); - exit(1); - } - } - - gnutls_record_send(server, MSG, strlen(MSG)); - - ret = gnutls_record_recv(client, buffer, sizeof(buffer)); - if (ret == 0) { - fail("client: Peer has closed the TLS connection\n"); - exit(1); - } else if (ret < 0) { - fail("client: Error: %s\n", gnutls_strerror(ret)); - exit(1); - } - - if (ret != strlen(MSG) || memcmp(MSG, buffer, ret) != 0) { - fail("client: Error in data received. Expected %d, got %d\n", (int)strlen(MSG), ret); - exit(1); - } - - gnutls_bye(client, GNUTLS_SHUT_RDWR); - gnutls_bye(server, GNUTLS_SHUT_RDWR); - - gnutls_deinit(client); - gnutls_deinit(server); - - gnutls_certificate_free_credentials(serverx509cred); - gnutls_certificate_free_credentials(clientx509cred); - gnutls_anon_free_server_credentials(s_anoncred); - gnutls_anon_free_client_credentials(c_anoncred); - gnutls_dh_params_deinit(dh_params); -} - -void doit(void) -{ - global_init(); - - try("NORMAL:-KX-ALL:+DHE-RSA:+ARCFOUR-128", GNUTLS_KX_DHE_RSA); - reset_buffers(); - try("NORMAL:-KX-ALL:+ECDHE-RSA:+ARCFOUR-128", GNUTLS_KX_ECDHE_RSA); - reset_buffers(); - try("NORMAL:-KX-ALL:+RSA:+ARCFOUR-128", GNUTLS_KX_RSA); - gnutls_global_deinit(); -} diff --git a/tests/mini-x509-ipaddr.c b/tests/mini-x509-ipaddr.c index 63d6fecd5c..81ce0525cc 100644 --- a/tests/mini-x509-ipaddr.c +++ b/tests/mini-x509-ipaddr.c @@ -58,7 +58,6 @@ static time_t mytime(time_t * t) void doit(void) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -267,11 +266,4 @@ void doit(void) gnutls_certificate_free_credentials(clientx509cred); gnutls_global_deinit(); - - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } } diff --git a/tests/mini-x509.c b/tests/mini-x509.c index 28fae45afe..a4fb56e991 100644 --- a/tests/mini-x509.c +++ b/tests/mini-x509.c @@ -32,6 +32,7 @@ #include "utils.h" #include "eagain-common.h" #include "cert-common.h" +#include const char *side; @@ -50,9 +51,9 @@ static time_t mytime(time_t * t) return then; } -void doit(void) +static +void start(const char *prio, unsigned expect_max) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -63,6 +64,8 @@ void doit(void) gnutls_session_t client; int cret = GNUTLS_E_AGAIN; + success("trying %s\n", prio); + /* General init. */ global_init(); gnutls_global_set_log_function(tls_log_func); @@ -80,13 +83,7 @@ void doit(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, -#ifndef ENABLE_FIPS140 - "NORMAL:-CIPHER-ALL:+ARCFOUR-128", -#else - "NORMAL:-CIPHER-ALL:+AES-128-CBC", -#endif - NULL); + assert(gnutls_priority_set_direct(server, prio, NULL)>=0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -109,13 +106,16 @@ void doit(void) if (ret < 0) exit(1); - gnutls_priority_set_direct(client, "NORMAL:+ARCFOUR-128", NULL); + gnutls_priority_set_direct(client, prio, NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); HANDSHAKE(client, server); + assert((gnutls_session_get_flags(server) & GNUTLS_SFLAGS_CLI_REQUESTED_OCSP) != 0); + assert((gnutls_session_get_flags(client) & GNUTLS_SFLAGS_CLI_REQUESTED_OCSP) != 0); + /* check gnutls_certificate_get_ours() - client side */ { const gnutls_datum_t *mcert; @@ -127,6 +127,9 @@ void doit(void) } } + assert(gnutls_certificate_type_get(server)==GNUTLS_CRT_X509); + assert(gnutls_certificate_type_get(client)==GNUTLS_CRT_X509); + /* check the number of certificates received and verify */ { unsigned cert_list_size = 0; @@ -225,16 +228,22 @@ void doit(void) } } - ret = gnutls_session_ext_master_secret_status(client); - if (ret != 1) { - fail("Extended master secret wasn't negotiated by default (client ret: %d)\n", ret); - exit(1); + if (expect_max) { + if (gnutls_protocol_get_version(client) != GNUTLS_TLS_VERSION_MAX) { + fail("The negotiated TLS protocol is not the maximum supported\n"); + } } - ret = gnutls_session_ext_master_secret_status(server); - if (ret != 1) { - fail("Extended master secret wasn't negotiated by default (server ret: %d)\n", ret); - exit(1); + if (gnutls_protocol_get_version(client) == GNUTLS_TLS1_2) { + ret = gnutls_session_ext_master_secret_status(client); + if (ret != 1) { + fail("Extended master secret wasn't negotiated by default (client ret: %d)\n", ret); + } + + ret = gnutls_session_ext_master_secret_status(server); + if (ret != 1) { + fail("Extended master secret wasn't negotiated by default (server ret: %d)\n", ret); + } } gnutls_bye(client, GNUTLS_SHUT_RDWR); @@ -248,10 +257,12 @@ void doit(void) gnutls_global_deinit(); - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2", 0); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3", 0); + start("NORMAL", 1); } diff --git a/tests/multi-alerts.c b/tests/multi-alerts.c index 15065475dc..a0a6e4474a 100644 --- a/tests/multi-alerts.c +++ b/tests/multi-alerts.c @@ -49,6 +49,7 @@ int main(int argc, char **argv) #include #endif #include +#include #include #include "utils.h" @@ -163,7 +164,7 @@ static void server(int sd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -216,8 +217,11 @@ void doit(void) server(sockets[0]); wait(&status); - } else + check_wait_status(status); + } else { client(sockets[1]); + exit(0); + } } #endif /* _WIN32 */ diff --git a/tests/naked-alerts.c b/tests/naked-alerts.c index 48d26afdb4..1ea0c40461 100644 --- a/tests/naked-alerts.c +++ b/tests/naked-alerts.c @@ -48,6 +48,7 @@ int main(int argc, char **argv) #include #endif #include +#include #include #include "utils.h" @@ -111,7 +112,7 @@ static void server(int sd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -164,8 +165,11 @@ void doit(void) server(sockets[0]); wait(&status); - } else + check_wait_status(status); + } else { client(sockets[1]); + exit(0); + } } #endif /* _WIN32 */ diff --git a/tests/name-constraints-ip.c b/tests/name-constraints-ip.c index 3dd4ff2cb2..ed96109c7a 100644 --- a/tests/name-constraints-ip.c +++ b/tests/name-constraints-ip.c @@ -78,7 +78,6 @@ static void check_test_result(int ret, int expected_outcome, static void parse_cidr(const char* cidr, gnutls_datum_t *datum) { if (datum->data != NULL) { gnutls_free(datum->data); - datum->data = NULL; } int ret = gnutls_x509_cidr_to_rfc5280(cidr, datum); check_for_error(ret); @@ -699,7 +698,7 @@ static int teardown(void **state) { gnutls_free(test_vars->ip.data); gnutls_x509_name_constraints_deinit(test_vars->nc); gnutls_x509_name_constraints_deinit(test_vars->nc2); - gnutls_free(test_vars); + gnutls_free(*state); return 0; } diff --git a/tests/nist-pkits/README b/tests/nist-pkits/README index df9607821f..85512f27d5 100644 --- a/tests/nist-pkits/README +++ b/tests/nist-pkits/README @@ -1,7 +1,7 @@ This directory contains self-tests based on NIST's Public Key Interoperability Test Suites, downloaded (2007-02-13) from: -http://csrc.nist.gov/pki/testing/x509paths.html +https://csrc.nist.gov/pki/testing/x509paths.html ada0f267e0ff4eb16a0e19964cf518a833f00093 PKITS_data.zip bb1dea2e3a1ef163c94c19d07de506228eac41ad PKITS.pdf diff --git a/tests/no-extensions.c b/tests/no-extensions.c new file mode 100644 index 0000000000..3bd9d06804 --- /dev/null +++ b/tests/no-extensions.c @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" +#include "tls13/ext-parse.h" +#include + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static int server_handshake_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, + const gnutls_datum_t *msg) +{ + unsigned pos; + gnutls_datum_t mmsg; + + assert(post && htype == GNUTLS_HANDSHAKE_SERVER_HELLO); + + switch (htype) { + case GNUTLS_HANDSHAKE_SERVER_HELLO: + assert(msg->size >= HANDSHAKE_SESSION_ID_POS); + pos = HANDSHAKE_SESSION_ID_POS; + SKIP8(pos, msg->size); + pos += 3; /* ciphersuite + compression */ + + mmsg.data = &msg->data[pos]; + mmsg.size = msg->size - pos; + if (pos != msg->size) { + if (pos < msg->size-1) { + fprintf(stderr, "additional bytes: %.2x%.2x\n", mmsg.data[0], mmsg.data[1]); + } + fail("the server hello contains additional bytes\n"); + } + break; + } + return 0; +} + +static int client_handshake_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, + const gnutls_datum_t *msg) +{ + unsigned pos; + gnutls_datum_t mmsg; + + assert(!post && htype == GNUTLS_HANDSHAKE_CLIENT_HELLO); + + switch (htype) { + case GNUTLS_HANDSHAKE_CLIENT_HELLO: + assert(msg->size >= HANDSHAKE_SESSION_ID_POS); + pos = HANDSHAKE_SESSION_ID_POS; + SKIP8(pos, msg->size); + SKIP16(pos, msg->size); + SKIP8(pos, msg->size); + + mmsg.data = &msg->data[pos]; + mmsg.size = msg->size - pos; + + if (pos != msg->size) { + if (pos < msg->size-1) { + fprintf(stderr, "additional bytes: %.2x%.2x\n", mmsg.data[0], mmsg.data[1]); + } + fail("the client hello contains additional bytes\n"); + } + break; + } + return 0; +} + +static +void start(const char *prio, gnutls_protocol_t exp_version) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + + success("trying %s\n", prio); + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + /* Init server */ + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + assert(gnutls_priority_set_direct(server, prio, NULL)>=0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + gnutls_handshake_set_hook_function(server, + GNUTLS_HANDSHAKE_SERVER_HELLO, + GNUTLS_HOOK_POST, + server_handshake_callback); + + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + gnutls_priority_set_direct(client, prio, NULL); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + gnutls_handshake_set_hook_function(client, + GNUTLS_HANDSHAKE_CLIENT_HELLO, + GNUTLS_HOOK_PRE, + client_handshake_callback); + + HANDSHAKE(client, server); + + /* check gnutls_certificate_get_ours() - client side */ + { + const gnutls_datum_t *mcert; + + mcert = gnutls_certificate_get_ours(client); + if (mcert != NULL) { + fail("gnutls_certificate_get_ours(): failed\n"); + exit(1); + } + } + + assert(gnutls_protocol_get_version(server) == exp_version); + + assert(gnutls_certificate_type_get(server)==GNUTLS_CRT_X509); + assert(gnutls_certificate_type_get(client)==GNUTLS_CRT_X509); + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); + + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.0:%NO_EXTENSIONS", GNUTLS_TLS1_0); + start("NORMAL:-VERS-ALL:+VERS-TLS1.1:%NO_EXTENSIONS", GNUTLS_TLS1_1); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2:%NO_EXTENSIONS", GNUTLS_TLS1_2); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:%NO_EXTENSIONS", GNUTLS_TLS1_2); +} diff --git a/tests/no-signal.c b/tests/no-signal.c index 0894632c8d..3b08417ff4 100644 --- a/tests/no-signal.c +++ b/tests/no-signal.c @@ -47,7 +47,7 @@ int main() # ifndef MSG_NOSIGNAL -int main() +int main(void) { exit(77); } diff --git a/tests/null_retrieve_function.c b/tests/null_retrieve_function.c new file mode 100644 index 0000000000..5c4464adaf --- /dev/null +++ b/tests/null_retrieve_function.c @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2011-2012 Free Software Foundation, Inc. + * Copyright (C) 2018 Dmitry Eremin-Solenikov + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +/* Test for behavior of the library when NULL is set as certificate + * function. + */ + +static int cert_cb1(gnutls_session_t session, + const gnutls_datum_t * req_ca_rdn, + int nreqs, + const gnutls_pk_algorithm_t * pk_algos, + int pk_algos_length, + gnutls_retr2_st *retr) +{ + return -1; +} + +static int cert_cb2(gnutls_session_t session, + const gnutls_datum_t *req_ca_rdn, + int nreqs, + const gnutls_pk_algorithm_t *pk_algos, + int pk_algos_length, + gnutls_pcert_st** pcert, + unsigned int *pcert_length, + gnutls_privkey_t *privkey) +{ + return -1; +} + +static int cert_cb3(gnutls_session_t session, + const struct gnutls_cert_retr_st *info, + gnutls_pcert_st **certs, + unsigned int *pcert_length, + gnutls_ocsp_data_st **ocsp, + unsigned int *ocsp_length, + gnutls_privkey_t *privkey, + unsigned int *flags) +{ + return -1; +} + + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d>| %s", level, str); +} + +void doit(void) +{ + gnutls_certificate_credentials_t x509_cred; + gnutls_certificate_credentials_t clicred; + int ret; + + /* this must be called once in the program + */ + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + gnutls_certificate_allocate_credentials(&x509_cred); + + ret = gnutls_certificate_set_x509_key_mem(x509_cred, &server_ca3_localhost_cert_chain, + &server_ca3_key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("error in error code\n"); + exit(1); + } + + gnutls_certificate_allocate_credentials(&clicred); + gnutls_certificate_set_retrieve_function(clicred, cert_cb1); + gnutls_certificate_set_retrieve_function(clicred, NULL); + _test_cli_serv(x509_cred, clicred, "NORMAL", "NORMAL", "localhost", NULL, NULL, NULL, 0, 1, GNUTLS_E_CERTIFICATE_REQUIRED, -1); + gnutls_certificate_free_credentials(clicred); + + gnutls_certificate_allocate_credentials(&clicred); + gnutls_certificate_set_retrieve_function2(clicred, cert_cb2); + gnutls_certificate_set_retrieve_function2(clicred, NULL); + _test_cli_serv(x509_cred, clicred, "NORMAL", "NORMAL", "localhost", NULL, NULL, NULL, 0, 1, GNUTLS_E_CERTIFICATE_REQUIRED, -1); + gnutls_certificate_free_credentials(clicred); + + gnutls_certificate_allocate_credentials(&clicred); + gnutls_certificate_set_retrieve_function3(clicred, cert_cb3); + gnutls_certificate_set_retrieve_function3(clicred, NULL); + _test_cli_serv(x509_cred, clicred, "NORMAL", "NORMAL", "localhost", NULL, NULL, NULL, 0, 1, GNUTLS_E_CERTIFICATE_REQUIRED, -1); + gnutls_certificate_free_credentials(clicred); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("success"); +} diff --git a/tests/ocsp-common.h b/tests/ocsp-common.h new file mode 100644 index 0000000000..64662afef3 --- /dev/null +++ b/tests/ocsp-common.h @@ -0,0 +1,678 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifndef GNUTLS_TESTS_OCSP_COMMON_H +#define GNUTLS_TESTS_OCSP_COMMON_H + +#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-variable" +#endif + +/* Date for responses to be valid */ +#define OCSP_RESP_DATE 1508329639 + +/* ocsp response with unknown status for + * server_ca3_localhost6_cert. Signed with + * RSA-SHA256. + */ +static const char _ocsp_ca3_localhost6_unknown[] = { + 0x30, 0x82, 0x02, 0x3A, 0x0A, 0x01, 0x00, 0xA0, + 0x82, 0x02, 0x33, 0x30, 0x82, 0x02, 0x2F, 0x06, + 0x09, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, + 0x01, 0x01, 0x04, 0x82, 0x02, 0x20, 0x30, 0x82, + 0x02, 0x1C, 0x30, 0x81, 0x85, 0xA1, 0x14, 0x30, + 0x12, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x07, 0x73, 0x75, 0x62, 0x43, + 0x41, 0x2D, 0x33, 0x18, 0x0F, 0x32, 0x30, 0x31, + 0x37, 0x31, 0x30, 0x31, 0x38, 0x31, 0x32, 0x32, + 0x30, 0x34, 0x39, 0x5A, 0x30, 0x5C, 0x30, 0x5A, + 0x30, 0x45, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, + 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14, 0xB2, + 0xE6, 0x5C, 0x8E, 0x6E, 0x83, 0x4B, 0xBD, 0x11, + 0xD9, 0x97, 0xFA, 0x36, 0x93, 0x59, 0x9E, 0xAD, + 0x5C, 0x15, 0xC4, 0x04, 0x14, 0x9E, 0x91, 0xEC, + 0x8C, 0xAA, 0x24, 0x5B, 0x22, 0xE0, 0xE8, 0x11, + 0xE8, 0xE9, 0xA4, 0x91, 0xB5, 0x91, 0x26, 0x00, + 0xF1, 0x02, 0x0C, 0x57, 0xA3, 0x1D, 0x32, 0x37, + 0x64, 0x58, 0xFA, 0x7B, 0x52, 0x6F, 0xD7, 0x82, + 0x00, 0x18, 0x0F, 0x32, 0x30, 0x31, 0x37, 0x31, + 0x30, 0x31, 0x38, 0x31, 0x32, 0x32, 0x30, 0x34, + 0x39, 0x5A, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, + 0x00, 0x03, 0x82, 0x01, 0x81, 0x00, 0x98, 0x3C, + 0xFF, 0xD1, 0x76, 0x93, 0xB0, 0xDD, 0x42, 0xCA, + 0x8C, 0x7D, 0x4F, 0x9F, 0xE7, 0x78, 0x14, 0x1D, + 0x90, 0x25, 0x67, 0x34, 0x51, 0x3C, 0xF6, 0x10, + 0x7E, 0xB9, 0x8C, 0x19, 0xF4, 0x9A, 0x32, 0x6A, + 0xFD, 0x5B, 0x77, 0xE9, 0x0A, 0xB2, 0xCD, 0x31, + 0x5E, 0x0F, 0x5B, 0x11, 0xA7, 0x75, 0x38, 0x7B, + 0x01, 0xFA, 0x2B, 0x68, 0x2C, 0x14, 0x6F, 0xAF, + 0x90, 0xC9, 0x69, 0x67, 0x13, 0x70, 0x78, 0x51, + 0x44, 0x0B, 0xA6, 0x16, 0x84, 0x6B, 0x09, 0xC3, + 0x27, 0xFF, 0x06, 0x25, 0x90, 0x27, 0x08, 0x87, + 0x23, 0xCB, 0x1A, 0x56, 0x61, 0x9E, 0x28, 0x9C, + 0x42, 0x19, 0xEA, 0x93, 0x7C, 0x05, 0x14, 0x04, + 0x7F, 0xC7, 0x1C, 0x40, 0xDD, 0x35, 0xC6, 0x50, + 0x79, 0x46, 0xD7, 0x6A, 0xB1, 0x59, 0xAF, 0xC6, + 0xDA, 0x0C, 0xD2, 0x1B, 0xAC, 0x3B, 0x46, 0x09, + 0x0E, 0x7B, 0x02, 0xC3, 0x01, 0x55, 0x5E, 0xE9, + 0x4F, 0x10, 0x58, 0x16, 0xB8, 0x54, 0xA8, 0x54, + 0xBB, 0x31, 0xEB, 0x99, 0x64, 0x73, 0xEE, 0x3F, + 0x44, 0xCE, 0xBB, 0xF9, 0x0A, 0xDB, 0x36, 0x90, + 0x51, 0x80, 0xAA, 0xE1, 0x6F, 0xC3, 0x00, 0x13, + 0x65, 0x80, 0x36, 0x3A, 0x63, 0x48, 0x05, 0x52, + 0x7F, 0x91, 0x96, 0xB0, 0x7F, 0x53, 0xFC, 0x5D, + 0x87, 0x0C, 0x6E, 0x5C, 0xAC, 0x0A, 0x45, 0x22, + 0x83, 0x72, 0xC0, 0xAF, 0x5E, 0xDB, 0x5C, 0xE4, + 0xA9, 0x80, 0x16, 0x43, 0xAB, 0x55, 0x72, 0x9B, + 0x37, 0x41, 0xBB, 0xEF, 0x20, 0x45, 0xD5, 0xCB, + 0xF8, 0xCE, 0xA9, 0x50, 0x12, 0x79, 0xAC, 0x6E, + 0xC0, 0x79, 0xA4, 0x74, 0x1C, 0xF8, 0x48, 0xD4, + 0xFC, 0xDC, 0xBB, 0xDA, 0x36, 0x72, 0x46, 0x05, + 0x32, 0x97, 0x4C, 0x6B, 0xA4, 0x3C, 0xA0, 0x0E, + 0xB7, 0xAC, 0x49, 0xA4, 0x52, 0xF0, 0xAC, 0xD5, + 0x8D, 0x86, 0x07, 0xDB, 0xC3, 0x67, 0xE4, 0x95, + 0x62, 0x52, 0x33, 0x33, 0x2D, 0x00, 0x49, 0x23, + 0xCC, 0x12, 0x62, 0xFB, 0x89, 0x27, 0xD5, 0x27, + 0xCB, 0x75, 0xC4, 0xCB, 0x60, 0x17, 0xFD, 0x4E, + 0x7A, 0x2A, 0xD7, 0x0B, 0x09, 0x84, 0x03, 0x20, + 0x38, 0x53, 0x73, 0x71, 0x66, 0xFC, 0x64, 0x9C, + 0x6E, 0x1A, 0x1E, 0xC5, 0x5E, 0x0C, 0xAD, 0x9D, + 0xE3, 0x37, 0xF2, 0xC2, 0xFC, 0xA1, 0x31, 0x26, + 0x2C, 0xA1, 0xDF, 0x05, 0x19, 0xD6, 0x18, 0xE8, + 0x25, 0x7C, 0x23, 0x23, 0xDE, 0x89, 0x6F, 0x5E, + 0x98, 0xE8, 0xB6, 0xB2, 0x25, 0x28, 0x30, 0x12, + 0x19, 0xB1, 0x84, 0x95, 0x8F, 0x8F, 0x65, 0x75, + 0x2D, 0x90, 0xA8, 0x8D, 0xD9, 0xC3, 0x40, 0x79, + 0xC8, 0xC8, 0xA1, 0xDC, 0xD0, 0x16, 0x02, 0xFE, + 0x60, 0xBE, 0xA3, 0x58, 0xA2, 0xC4, 0xBA, 0xE5, + 0x86, 0x4F, 0xF3, 0x2F, 0x46, 0xB9, 0x62, 0x2F, + 0xCD, 0xE4, 0x1A, 0x62, 0x83, 0x76 +}; + +const char _ocsp_ca3_localhost6_unknown_pem[] = + "-----BEGIN OCSP RESPONSE-----\n" + "MIICOgoBAKCCAjMwggIvBgkrBgEFBQcwAQEEggIgMIICHDCBhaEUMBIxEDAOBgNV\n" + "BAMTB3N1YkNBLTMYDzIwMTcxMDE4MTIyMDQ5WjBcMFowRTAJBgUrDgMCGgUABBSy\n" + "5lyOboNLvRHZl/o2k1merVwVxAQUnpHsjKokWyLg6BHo6aSRtZEmAPECDFejHTI3\n" + "ZFj6e1Jv14IAGA8yMDE3MTAxODEyMjA0OVowDQYJKoZIhvcNAQELBQADggGBAJg8\n" + "/9F2k7DdQsqMfU+f53gUHZAlZzRRPPYQfrmMGfSaMmr9W3fpCrLNMV4PWxGndTh7\n" + "AforaCwUb6+QyWlnE3B4UUQLphaEawnDJ/8GJZAnCIcjyxpWYZ4onEIZ6pN8BRQE\n" + "f8ccQN01xlB5RtdqsVmvxtoM0husO0YJDnsCwwFVXulPEFgWuFSoVLsx65lkc+4/\n" + "RM67+QrbNpBRgKrhb8MAE2WANjpjSAVSf5GWsH9T/F2HDG5crApFIoNywK9e21zk\n" + "qYAWQ6tVcps3QbvvIEXVy/jOqVASeaxuwHmkdBz4SNT83LvaNnJGBTKXTGukPKAO\n" + "t6xJpFLwrNWNhgfbw2fklWJSMzMtAEkjzBJi+4kn1SfLdcTLYBf9Tnoq1wsJhAMg\n" + "OFNzcWb8ZJxuGh7FXgytneM38sL8oTEmLKHfBRnWGOglfCMj3olvXpjotrIlKDAS\n" + "GbGElY+PZXUtkKiN2cNAecjIodzQFgL+YL6jWKLEuuWGT/MvRrliL83kGmKDdg==\n" + "-----END OCSP RESPONSE-----"; + +static gnutls_datum_t ocsp_ca3_localhost6_unknown = { + (void *)_ocsp_ca3_localhost6_unknown, + sizeof(_ocsp_ca3_localhost6_unknown) +}; + +static gnutls_datum_t ocsp_ca3_localhost6_unknown_pem = { + (void *)_ocsp_ca3_localhost6_unknown_pem, + sizeof(_ocsp_ca3_localhost6_unknown_pem)-1 +}; + +/* ocsp response with unknown status for + * server_ca3_localhost_cert. Signed with + * RSA-SHA512. + */ +static const char _ocsp_ca3_localhost_unknown[] = { + 0x30, 0x82, 0x06, 0x53, 0x0A, 0x01, 0x00, 0xA0, + 0x82, 0x06, 0x4C, 0x30, 0x82, 0x06, 0x48, 0x06, + 0x09, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, + 0x01, 0x01, 0x04, 0x82, 0x06, 0x39, 0x30, 0x82, + 0x06, 0x35, 0x30, 0x81, 0x85, 0xA1, 0x14, 0x30, + 0x12, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x07, 0x73, 0x75, 0x62, 0x43, + 0x41, 0x2D, 0x33, 0x18, 0x0F, 0x32, 0x30, 0x31, + 0x37, 0x31, 0x30, 0x31, 0x38, 0x31, 0x32, 0x30, + 0x39, 0x33, 0x30, 0x5A, 0x30, 0x5C, 0x30, 0x5A, + 0x30, 0x45, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, + 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14, 0xB2, + 0xE6, 0x5C, 0x8E, 0x6E, 0x83, 0x4B, 0xBD, 0x11, + 0xD9, 0x97, 0xFA, 0x36, 0x93, 0x59, 0x9E, 0xAD, + 0x5C, 0x15, 0xC4, 0x04, 0x14, 0x9E, 0x91, 0xEC, + 0x8C, 0xAA, 0x24, 0x5B, 0x22, 0xE0, 0xE8, 0x11, + 0xE8, 0xE9, 0xA4, 0x91, 0xB5, 0x91, 0x26, 0x00, + 0xF1, 0x02, 0x0C, 0x57, 0xA3, 0x1D, 0x32, 0x36, + 0xC8, 0x0C, 0xA1, 0xCA, 0xB0, 0xBD, 0xF6, 0x82, + 0x00, 0x18, 0x0F, 0x32, 0x30, 0x31, 0x37, 0x31, + 0x30, 0x31, 0x38, 0x31, 0x32, 0x30, 0x39, 0x33, + 0x30, 0x5A, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0D, 0x05, + 0x00, 0x03, 0x82, 0x01, 0x81, 0x00, 0x56, 0x64, + 0x2B, 0x10, 0xAA, 0xE7, 0x26, 0x7F, 0xF1, 0x7F, + 0x86, 0x97, 0x0E, 0x18, 0xB4, 0x75, 0x92, 0x65, + 0x12, 0x2B, 0x46, 0x9F, 0x3E, 0x96, 0x98, 0xE4, + 0xAB, 0x10, 0xD1, 0x0E, 0xEA, 0x08, 0xE2, 0xA5, + 0x01, 0x75, 0xA4, 0x5B, 0x76, 0xAC, 0x49, 0x2B, + 0x9E, 0xF1, 0x4A, 0xF2, 0x79, 0x3A, 0x4E, 0x15, + 0x81, 0xFF, 0x4D, 0xD3, 0x65, 0x8E, 0xAE, 0x4A, + 0xBB, 0x33, 0x35, 0x8B, 0x0F, 0xB6, 0x5D, 0x32, + 0xEF, 0xF5, 0xE1, 0x25, 0xBF, 0xBD, 0x52, 0x1D, + 0x99, 0xF2, 0x34, 0xE0, 0xFB, 0x38, 0x34, 0x6C, + 0x9A, 0xEF, 0x53, 0xB2, 0x90, 0xC6, 0xFB, 0x75, + 0xA0, 0x8C, 0xBC, 0x6B, 0x8E, 0xD8, 0xDE, 0x33, + 0xE4, 0x6F, 0xF2, 0xAD, 0xF2, 0xA2, 0x4F, 0xC2, + 0x58, 0x47, 0xE2, 0x68, 0x6D, 0x3A, 0x3A, 0xB3, + 0x0A, 0x82, 0x3D, 0xA4, 0x85, 0x00, 0x58, 0x3E, + 0x00, 0x35, 0x9D, 0x6B, 0x1F, 0xFF, 0x9F, 0xAE, + 0xB0, 0x9A, 0xE2, 0xC7, 0x0E, 0x9A, 0xB3, 0x7C, + 0x52, 0xE9, 0xDA, 0x50, 0x57, 0x35, 0x72, 0x71, + 0x81, 0xA7, 0xC0, 0x40, 0x28, 0xEA, 0x2B, 0xCE, + 0x09, 0x47, 0x1D, 0xB1, 0x80, 0x41, 0x59, 0xF6, + 0x5D, 0xD3, 0x3C, 0xEA, 0x11, 0xD8, 0x13, 0xB9, + 0x0F, 0x32, 0x6A, 0x29, 0x72, 0xBE, 0xC1, 0xC3, + 0x1B, 0xB5, 0x4C, 0x4D, 0x0D, 0xA1, 0xD5, 0xF0, + 0xC4, 0xEC, 0xC5, 0x5A, 0x93, 0x41, 0x7A, 0x01, + 0x24, 0xB3, 0x7A, 0x71, 0x82, 0xA3, 0xC6, 0x08, + 0x42, 0x91, 0x0E, 0x6B, 0xE7, 0x86, 0x0B, 0xAF, + 0xBE, 0xDF, 0x07, 0x5A, 0x8C, 0x35, 0xF8, 0x5F, + 0x7F, 0x2F, 0x60, 0x04, 0xDD, 0x2A, 0xF2, 0x0D, + 0xC0, 0x1C, 0x6F, 0xA0, 0x30, 0x80, 0xA4, 0x35, + 0x83, 0xD3, 0xC3, 0xCC, 0x35, 0x46, 0x36, 0xEB, + 0xE9, 0xB1, 0x3C, 0x08, 0x8F, 0xCC, 0x5D, 0xCA, + 0xD9, 0xAF, 0x3E, 0xD4, 0x58, 0xBB, 0x90, 0x5D, + 0xEF, 0x01, 0x9C, 0xD9, 0x3E, 0x56, 0x7E, 0xCF, + 0x13, 0xAA, 0x11, 0xC4, 0x22, 0xD2, 0xA0, 0x9F, + 0x1B, 0xE9, 0xF0, 0x78, 0x70, 0x3B, 0xCC, 0x21, + 0x7D, 0x6B, 0x46, 0x97, 0x3F, 0x3B, 0x0C, 0x5B, + 0x8F, 0xA8, 0x28, 0x72, 0x4A, 0x41, 0x4D, 0xE6, + 0xDD, 0x2E, 0xBD, 0xF1, 0xA4, 0x1E, 0xA2, 0xA2, + 0x94, 0x6E, 0xAD, 0x33, 0xC2, 0x56, 0xD3, 0x29, + 0xCF, 0x75, 0x5E, 0x35, 0x59, 0xEB, 0x07, 0x78, + 0x23, 0x0B, 0x20, 0x4E, 0xEB, 0x61, 0x2B, 0x46, + 0x77, 0x0A, 0x9F, 0xA4, 0x57, 0xA8, 0x45, 0x45, + 0x6E, 0x8F, 0xB4, 0xD5, 0x9C, 0xFC, 0x84, 0x78, + 0xC3, 0x82, 0xD9, 0xB6, 0xA7, 0xD5, 0x76, 0xE0, + 0x23, 0x09, 0x2B, 0x9A, 0x7C, 0x7C, 0xB5, 0x6D, + 0x84, 0x9D, 0x1F, 0x47, 0x0C, 0x9C, 0xD6, 0x86, + 0x2B, 0xDD, 0xF4, 0xFA, 0x97, 0xE7, 0x72, 0xE7, + 0x42, 0x52, 0x74, 0xE8, 0x4D, 0x01, 0xA0, 0x82, + 0x04, 0x15, 0x30, 0x82, 0x04, 0x11, 0x30, 0x82, + 0x04, 0x0D, 0x30, 0x82, 0x02, 0x75, 0xA0, 0x03, + 0x02, 0x01, 0x02, 0x02, 0x0C, 0x57, 0xA3, 0x1D, + 0x32, 0x35, 0xB3, 0x4F, 0xD0, 0xB9, 0xF5, 0xE7, + 0x3C, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, + 0x30, 0x0F, 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, + 0x55, 0x04, 0x03, 0x13, 0x04, 0x43, 0x41, 0x2D, + 0x33, 0x30, 0x20, 0x17, 0x0D, 0x31, 0x36, 0x30, + 0x35, 0x31, 0x30, 0x30, 0x38, 0x34, 0x38, 0x33, + 0x30, 0x5A, 0x18, 0x0F, 0x39, 0x39, 0x39, 0x39, + 0x31, 0x32, 0x33, 0x31, 0x32, 0x33, 0x35, 0x39, + 0x35, 0x39, 0x5A, 0x30, 0x12, 0x31, 0x10, 0x30, + 0x0E, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x07, + 0x73, 0x75, 0x62, 0x43, 0x41, 0x2D, 0x33, 0x30, + 0x82, 0x01, 0xA2, 0x30, 0x0D, 0x06, 0x09, 0x2A, + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, + 0x05, 0x00, 0x03, 0x82, 0x01, 0x8F, 0x00, 0x30, + 0x82, 0x01, 0x8A, 0x02, 0x82, 0x01, 0x81, 0x00, + 0xA0, 0x39, 0xC3, 0x57, 0xCD, 0x2B, 0x4E, 0x9D, + 0x11, 0x68, 0x8B, 0x4E, 0x5A, 0x31, 0x12, 0xDE, + 0x30, 0x1E, 0x39, 0x5F, 0x86, 0xB6, 0xB2, 0xB4, + 0x81, 0xBA, 0x5D, 0xD4, 0x2F, 0x10, 0xD2, 0x1A, + 0x32, 0x0F, 0xD0, 0x41, 0x25, 0xFF, 0xF5, 0xF6, + 0x58, 0xB8, 0xA8, 0xA5, 0xEF, 0xF1, 0x34, 0xBF, + 0x1B, 0x3C, 0x24, 0x69, 0x23, 0x5B, 0x12, 0x55, + 0x79, 0x7C, 0x1D, 0xBD, 0x5C, 0x2B, 0x7A, 0x96, + 0x34, 0x66, 0xB3, 0x56, 0x60, 0xBB, 0xC5, 0x6D, + 0x3B, 0x37, 0x12, 0xF6, 0xE8, 0x8F, 0x3A, 0x7B, + 0x7F, 0xC1, 0x55, 0x19, 0xEA, 0xF2, 0x2A, 0x15, + 0xB6, 0xF3, 0xD0, 0xC0, 0x4A, 0x6F, 0xB8, 0x8F, + 0x05, 0xF7, 0xBC, 0x75, 0xBC, 0xBF, 0xE7, 0xF9, + 0xC7, 0xDC, 0x76, 0x43, 0x7B, 0xEC, 0xD4, 0x9C, + 0xAF, 0x90, 0xBD, 0x8C, 0x73, 0x15, 0x8A, 0x84, + 0x6F, 0x0B, 0xEA, 0x8A, 0xCF, 0xD6, 0xD4, 0x07, + 0x1E, 0x43, 0x4B, 0x24, 0x95, 0xEB, 0xA3, 0xD1, + 0xE7, 0xEC, 0x06, 0xB0, 0x90, 0xEF, 0x91, 0xFB, + 0x26, 0x8D, 0x53, 0xA0, 0xAA, 0x24, 0xE5, 0x49, + 0x64, 0x12, 0xE4, 0x6D, 0xE7, 0x30, 0xCA, 0xB4, + 0x46, 0x2C, 0x6C, 0x73, 0x97, 0x4F, 0xE5, 0x6C, + 0xA0, 0x91, 0xB7, 0x61, 0xF7, 0xEE, 0x39, 0x50, + 0x2B, 0x4E, 0x6D, 0xC9, 0xC7, 0x00, 0x12, 0x6B, + 0x3F, 0xE1, 0xAD, 0x2E, 0x21, 0xB4, 0x00, 0xE5, + 0x31, 0xEA, 0x83, 0xF3, 0x3E, 0xD7, 0x99, 0x2F, + 0x5D, 0xDE, 0xAD, 0x65, 0xE0, 0xEF, 0x36, 0x2E, + 0xB1, 0x36, 0xAB, 0x8F, 0xDA, 0xD3, 0x71, 0xDB, + 0x20, 0x47, 0xF2, 0x26, 0xD6, 0x62, 0x33, 0x98, + 0x3D, 0xA2, 0xEC, 0x68, 0x49, 0xA3, 0x81, 0xA3, + 0xD1, 0x29, 0x37, 0x46, 0xAF, 0x77, 0x27, 0x27, + 0x80, 0xF8, 0x0C, 0xB9, 0x50, 0xF9, 0xAA, 0x72, + 0x6F, 0x9D, 0xA9, 0x7D, 0x34, 0x6F, 0x8F, 0x4C, + 0x4D, 0x3B, 0xF8, 0x1A, 0xD3, 0xB9, 0xDE, 0x42, + 0xD0, 0x48, 0x25, 0xD8, 0x14, 0x9F, 0x7A, 0x8D, + 0xC3, 0x22, 0x5C, 0xCC, 0xC1, 0x14, 0x90, 0xF5, + 0x44, 0xEB, 0x1D, 0x93, 0x85, 0x94, 0x79, 0xDF, + 0xED, 0x24, 0xC1, 0xDF, 0x7E, 0xDB, 0x43, 0xCF, + 0xD8, 0xF7, 0x59, 0xCB, 0x97, 0xF4, 0xCD, 0xA7, + 0xCD, 0x34, 0xF6, 0xC6, 0x56, 0xAE, 0xA2, 0x48, + 0xDB, 0x10, 0x08, 0x51, 0x0D, 0x1C, 0x39, 0x7F, + 0x10, 0x85, 0x66, 0x1E, 0xD3, 0x6E, 0x66, 0x87, + 0xE2, 0xFC, 0xAC, 0x0C, 0xEF, 0x54, 0x65, 0x75, + 0x44, 0x5D, 0x22, 0xCA, 0xA2, 0x74, 0x36, 0x2E, + 0x6C, 0xAC, 0xA3, 0x8F, 0x2C, 0xFC, 0x6D, 0xF4, + 0x56, 0x69, 0x52, 0x8E, 0xD3, 0xED, 0x26, 0xA4, + 0x6C, 0xBF, 0xFA, 0x0F, 0xA4, 0x23, 0xBF, 0x73, + 0x40, 0xFA, 0x06, 0xB9, 0x07, 0x57, 0x9E, 0x41, + 0xE3, 0xCC, 0x5F, 0x9B, 0x22, 0x05, 0x8E, 0x01, + 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x64, 0x30, + 0x62, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, + 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, + 0x01, 0xFF, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, + 0x0F, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x03, 0x03, + 0x07, 0x06, 0x00, 0x30, 0x1D, 0x06, 0x03, 0x55, + 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x2D, 0x33, + 0x04, 0x1B, 0x27, 0x7F, 0x94, 0x04, 0x7C, 0xC7, + 0xE3, 0x35, 0x4F, 0xE9, 0x25, 0xA4, 0x94, 0xE1, + 0xB7, 0xA1, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, + 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0xF9, + 0xA8, 0x86, 0x19, 0x63, 0xB6, 0xA4, 0x14, 0x13, + 0x60, 0x76, 0x0F, 0x01, 0x9A, 0x35, 0x36, 0xEF, + 0xF1, 0xB4, 0xAF, 0x30, 0x0D, 0x06, 0x09, 0x2A, + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, + 0x05, 0x00, 0x03, 0x82, 0x01, 0x81, 0x00, 0x32, + 0x28, 0xB9, 0x1B, 0x1D, 0xFF, 0x77, 0xFE, 0x7C, + 0xA0, 0x34, 0x72, 0xE5, 0xAD, 0x28, 0x3E, 0xF4, + 0x21, 0x91, 0x4D, 0x1D, 0x29, 0xAE, 0xB5, 0x35, + 0xF8, 0xE3, 0x3B, 0x3F, 0x6E, 0xAB, 0x13, 0x52, + 0x8A, 0x52, 0xC9, 0x13, 0xB8, 0xC6, 0x24, 0xF6, + 0x86, 0xDA, 0xD2, 0xAD, 0x0B, 0xF5, 0xD4, 0xD5, + 0x86, 0xEA, 0x97, 0x6B, 0x6A, 0x41, 0x8E, 0xBC, + 0x92, 0x88, 0x23, 0x2A, 0xCD, 0xF5, 0x40, 0x2E, + 0x91, 0x16, 0x4A, 0x19, 0x00, 0x5A, 0x2E, 0x4C, + 0x9B, 0x75, 0xD6, 0x4C, 0xDB, 0x81, 0x55, 0x8A, + 0x7B, 0x00, 0xA4, 0xDF, 0xF3, 0xAB, 0x03, 0x4F, + 0xD9, 0x91, 0x1A, 0xC0, 0x7C, 0x4D, 0x0F, 0x99, + 0xAF, 0xCD, 0x21, 0x34, 0x70, 0x4C, 0x79, 0x93, + 0xB1, 0x03, 0x9D, 0xBF, 0xF6, 0xF3, 0x47, 0xEC, + 0x48, 0x3E, 0x18, 0xCA, 0xC4, 0xAA, 0xCA, 0xC8, + 0x91, 0x4C, 0x1B, 0x9C, 0x5B, 0xF9, 0x0D, 0x0E, + 0x29, 0x26, 0xDD, 0xF2, 0x40, 0xE9, 0x81, 0x85, + 0x8A, 0xA1, 0xBE, 0x71, 0xDA, 0x3B, 0x0D, 0x62, + 0x01, 0x03, 0xA7, 0xC9, 0xD8, 0x49, 0x14, 0xF8, + 0xE5, 0x21, 0xB0, 0xED, 0xCE, 0xC5, 0x72, 0xE9, + 0xA4, 0x5F, 0x3D, 0xA7, 0x03, 0xAA, 0xF9, 0x37, + 0x06, 0xE7, 0x84, 0x42, 0xEF, 0x34, 0x52, 0xBC, + 0x7F, 0x3B, 0x18, 0xF9, 0x02, 0x4A, 0x1D, 0xA0, + 0x25, 0x27, 0xD0, 0x9C, 0x96, 0x58, 0x8F, 0xD4, + 0xF8, 0xA2, 0x01, 0xC9, 0x76, 0x2D, 0x0A, 0x36, + 0x81, 0xAC, 0xA0, 0x58, 0xD8, 0x83, 0xFA, 0x08, + 0x27, 0xAB, 0x3C, 0xBB, 0x9E, 0xA6, 0xA6, 0xF6, + 0xB8, 0x9E, 0x38, 0xE3, 0x07, 0x96, 0xCD, 0x64, + 0x28, 0x50, 0x05, 0xAD, 0x6C, 0xB6, 0x83, 0xF7, + 0x01, 0x85, 0x37, 0xD2, 0xFB, 0xFE, 0xD2, 0x86, + 0x97, 0xB1, 0xEC, 0xD2, 0xB6, 0x18, 0x08, 0xAE, + 0x8E, 0x05, 0x15, 0xD1, 0x36, 0x47, 0x13, 0x21, + 0x19, 0xB7, 0xAB, 0xA6, 0xE2, 0x02, 0xD2, 0xF6, + 0xFC, 0x14, 0x2A, 0xCF, 0xD1, 0xE1, 0x74, 0xBD, + 0x54, 0xBF, 0xDB, 0x06, 0x57, 0xC0, 0xCB, 0x68, + 0x40, 0x55, 0x37, 0x94, 0x7A, 0x38, 0x91, 0x04, + 0x67, 0x93, 0x26, 0x4A, 0x81, 0xBB, 0xBF, 0x9C, + 0xE0, 0x57, 0x6B, 0x08, 0x1C, 0x95, 0x85, 0xA7, + 0x90, 0x01, 0x23, 0x18, 0xBB, 0xF9, 0x60, 0x6B, + 0xC7, 0x9A, 0x18, 0xBD, 0x73, 0x25, 0xB2, 0x5E, + 0xD8, 0x14, 0x16, 0x23, 0xBE, 0x78, 0x28, 0x36, + 0x03, 0x4F, 0xDA, 0x8A, 0x36, 0xA1, 0xA5, 0x83, + 0x2B, 0x2B, 0xE0, 0x05, 0x63, 0x7B, 0xBC, 0xF5, + 0x63, 0x53, 0x10, 0xEF, 0x64, 0xA7, 0x7E, 0xBC, + 0xD8, 0x49, 0x0C, 0x3A, 0x04, 0x1F, 0x39, 0x0A, + 0xEA, 0xC1, 0xEA, 0x2A, 0x2E, 0xDD, 0x0F, 0x9E, + 0x33, 0x8A, 0x38, 0x83, 0xFF, 0xB1, 0x18, 0x4B, + 0x83, 0xA3, 0x43, 0x5E, 0xFF, 0xC8, 0xAB +}; + +const char _ocsp_ca3_localhost_unknown_pem[] = + "-----BEGIN OCSP RESPONSE-----\n" + "MIICNwoBAKCCAjAwggIsBgkrBgEFBQcwAQEEggIdMIICGTCBgqERMA8xDTALBgNV\n" + "BAMTBENBLTMYDzIwMTcxMDE4MTIzODUyWjBcMFowRTAJBgUrDgMCGgUABBS3yg+r\n" + "3G+4sJZ6FayYCg8Z/qQS3gQUHoXtf55x+gidN0hDoBLv5arh44oCDFejHTI1s0/Q\n" + "ufXnPIIAGA8yMDE3MTAxODEyMzg1MlowDQYJKoZIhvcNAQELBQADggGBALMParB9\n" + "K97DlT4FmMdPScoT7oAAsar4XxKLU9+oraht7H+WTAYSpnCxh/ugR17G0jtzTzIw\n" + "nLQFAyR9MDYKp4Om4YqQ7r+43DiIqKVU25WcrVifUbtkR+LbjH+Bk1UHvFE8mCOX\n" + "ZB+cmQyjGap1RX0dnj2Wm48vUwqp71nA8AYcXL575xZ4rb9DDhaoV2h3S0Zlu4IN\n" + "btuDIVsxJ53kqkGjjVB4/R0RtqCXOI2ThMK3SfDWqwzF9tYA763VVXi+g+w3oyv4\n" + "ZtP8QUWOVUY4azpElX1wqoO8znUjxs1AzROLUeLPK8GMLVIZLP361J2kLgcj0Gdq\n" + "GIVH5N54p6bl5OgSUP3EdKbFRZyCVZ2n8Der3Cf9PtfvGV7Ze4Cv/CCN6rJkk54P\n" + "6auP6pEJg0ESGC5fop5HFCyVM+W/ot0A1cxN0+cHYlqB1NQholLqe3psDjJ2EoIK\n" + "LtN5dRLO6z5L74CwwiJ1SeLh8XyJtr/ee9RnFB56XCzO7lyhbHPx/VT6Qw==\n" + "-----END OCSP RESPONSE-----"; + +static gnutls_datum_t ocsp_ca3_localhost_unknown = { + (void *)_ocsp_ca3_localhost_unknown, sizeof(_ocsp_ca3_localhost_unknown) +}; + +static gnutls_datum_t ocsp_ca3_localhost_unknown_pem = { + (void *)_ocsp_ca3_localhost_unknown_pem, sizeof(_ocsp_ca3_localhost_unknown_pem) +}; + + +/* ocsp response with unknown status for + * server_ca3_localhost_cert. Signed with + * RSA-SHA1. + */ +static const char _ocsp_ca3_localhost_unknown_sha1[] = { + 0x30, 0x82, 0x02, 0x3A, 0x0A, 0x01, 0x00, 0xA0, + 0x82, 0x02, 0x33, 0x30, 0x82, 0x02, 0x2F, 0x06, + 0x09, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, + 0x01, 0x01, 0x04, 0x82, 0x02, 0x20, 0x30, 0x82, + 0x02, 0x1C, 0x30, 0x81, 0x85, 0xA1, 0x14, 0x30, + 0x12, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x07, 0x73, 0x75, 0x62, 0x43, + 0x41, 0x2D, 0x33, 0x18, 0x0F, 0x32, 0x30, 0x31, + 0x37, 0x31, 0x30, 0x31, 0x38, 0x31, 0x32, 0x32, + 0x32, 0x30, 0x36, 0x5A, 0x30, 0x5C, 0x30, 0x5A, + 0x30, 0x45, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, + 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14, 0xB2, + 0xE6, 0x5C, 0x8E, 0x6E, 0x83, 0x4B, 0xBD, 0x11, + 0xD9, 0x97, 0xFA, 0x36, 0x93, 0x59, 0x9E, 0xAD, + 0x5C, 0x15, 0xC4, 0x04, 0x14, 0x9E, 0x91, 0xEC, + 0x8C, 0xAA, 0x24, 0x5B, 0x22, 0xE0, 0xE8, 0x11, + 0xE8, 0xE9, 0xA4, 0x91, 0xB5, 0x91, 0x26, 0x00, + 0xF1, 0x02, 0x0C, 0x57, 0xA3, 0x1D, 0x32, 0x36, + 0xC8, 0x0C, 0xA1, 0xCA, 0xB0, 0xBD, 0xF6, 0x82, + 0x00, 0x18, 0x0F, 0x32, 0x30, 0x31, 0x37, 0x31, + 0x30, 0x31, 0x38, 0x31, 0x32, 0x32, 0x32, 0x30, + 0x36, 0x5A, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, + 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, + 0x00, 0x03, 0x82, 0x01, 0x81, 0x00, 0x29, 0x91, + 0xFA, 0x87, 0x8F, 0x4D, 0xC2, 0x25, 0x67, 0x4F, + 0x2A, 0x39, 0xF9, 0xDA, 0x05, 0x4A, 0x8E, 0xBC, + 0x72, 0xB7, 0x8B, 0xF1, 0x6C, 0x77, 0x5E, 0x2F, + 0x0F, 0xA4, 0xEC, 0x7F, 0xD6, 0x63, 0xEA, 0x39, + 0x17, 0x6F, 0xAA, 0x4B, 0x86, 0x46, 0x0E, 0xB2, + 0xE1, 0x65, 0x1C, 0xEC, 0x97, 0x05, 0x00, 0x4D, + 0xAC, 0xBA, 0xA5, 0xD4, 0x1B, 0xB8, 0x4A, 0x05, + 0x94, 0x6C, 0xC9, 0xE1, 0x41, 0x5B, 0x44, 0x4F, + 0x39, 0x9C, 0xF7, 0xAF, 0x04, 0x31, 0x1A, 0x5B, + 0xF8, 0x5E, 0x42, 0xDA, 0xEA, 0xFF, 0x25, 0x67, + 0x75, 0x3E, 0x46, 0xC4, 0x7D, 0x31, 0x74, 0xBD, + 0x19, 0xFF, 0x11, 0x7F, 0x21, 0x39, 0x4D, 0xE3, + 0x07, 0x2F, 0xF4, 0xF5, 0x6B, 0xE7, 0x10, 0xF8, + 0x6C, 0x57, 0x7B, 0x83, 0x84, 0xCD, 0x3D, 0x61, + 0xFD, 0x91, 0x87, 0x03, 0x03, 0xDD, 0x7A, 0x60, + 0xF9, 0x1D, 0x82, 0xE9, 0xD9, 0x4B, 0xC9, 0xF2, + 0x6F, 0xE5, 0x09, 0xCC, 0xEC, 0x63, 0xD7, 0xC1, + 0xED, 0x54, 0x6D, 0x03, 0xC8, 0xC5, 0x92, 0xBC, + 0x22, 0x11, 0xCD, 0x3A, 0x2E, 0x51, 0xCD, 0x5F, + 0xA5, 0xB5, 0xA3, 0x5C, 0x8D, 0x54, 0x92, 0x85, + 0x6B, 0x92, 0x2A, 0x23, 0x5E, 0xFB, 0x35, 0xFB, + 0x23, 0xDA, 0x17, 0x16, 0x6D, 0xB2, 0xFB, 0xD8, + 0x8D, 0x43, 0x9F, 0x36, 0xE9, 0x5E, 0xA2, 0xCB, + 0xA5, 0x2D, 0xAE, 0xDD, 0x63, 0xFC, 0x53, 0x90, + 0xB5, 0x54, 0x82, 0x7C, 0xBD, 0x08, 0xD7, 0x4E, + 0xEA, 0x11, 0x84, 0x3C, 0x5B, 0x63, 0x06, 0xA5, + 0x2C, 0x8B, 0x09, 0x13, 0xC7, 0x04, 0x5F, 0xAF, + 0x73, 0xB1, 0x89, 0x40, 0x12, 0xEA, 0x9C, 0x56, + 0xC6, 0x08, 0x39, 0xD4, 0xAA, 0x1F, 0xAF, 0x74, + 0x78, 0xCC, 0x84, 0xC2, 0x8A, 0xE8, 0x0B, 0xCD, + 0xD3, 0x2D, 0xCD, 0x98, 0x2E, 0x8D, 0xAB, 0x59, + 0xFC, 0xCF, 0x4C, 0x1A, 0x30, 0xED, 0x8E, 0x3F, + 0xF8, 0xC7, 0xBD, 0xE3, 0x64, 0x94, 0x0C, 0xFC, + 0x24, 0x85, 0x35, 0x0A, 0x0E, 0x65, 0xA7, 0x2C, + 0x0B, 0x80, 0xB9, 0xB0, 0x97, 0xA5, 0x70, 0xE0, + 0x12, 0x86, 0x69, 0x74, 0x22, 0xEA, 0xE3, 0x11, + 0x4B, 0x34, 0xB1, 0xFB, 0x24, 0xEE, 0x00, 0x73, + 0x71, 0x33, 0x74, 0x62, 0x64, 0x10, 0xDD, 0x5A, + 0x3A, 0x10, 0xA3, 0x8E, 0x36, 0x03, 0x0D, 0x17, + 0xE3, 0x72, 0x29, 0xAE, 0x5A, 0xBD, 0x2E, 0xE0, + 0xFD, 0xB1, 0xDF, 0x8F, 0x2C, 0x24, 0xCF, 0xB9, + 0x10, 0x99, 0x68, 0xA2, 0x55, 0x01, 0x1E, 0xFB, + 0x9B, 0x14, 0x4C, 0x1E, 0xB4, 0x59, 0x79, 0xB7, + 0x8F, 0x07, 0x28, 0x3E, 0xB4, 0x2E, 0x8F, 0x91, + 0x51, 0xFD, 0x8F, 0x12, 0x8D, 0xC6, 0x57, 0x7B, + 0x87, 0xEF, 0x9C, 0x8B, 0x90, 0xD3, 0xA5, 0xB0, + 0xBE, 0x4B, 0xFA, 0x33, 0x54, 0x87, 0x81, 0xCF, + 0x96, 0x9A, 0xD3, 0xDC, 0xA9, 0xB6 +}; + +static gnutls_datum_t ocsp_ca3_localhost_unknown_sha1 = { + (void *)_ocsp_ca3_localhost_unknown_sha1, + sizeof(_ocsp_ca3_localhost_unknown_sha1) +}; + +/* ocsp response with unknown status for + * subca3_cert_pem. Signed with + * RSA-SHA256. + */ +static const char _ocsp_subca3_unknown[] = { + 0x30, 0x82, 0x02, 0x37, 0x0A, 0x01, 0x00, 0xA0, + 0x82, 0x02, 0x30, 0x30, 0x82, 0x02, 0x2C, 0x06, + 0x09, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, + 0x01, 0x01, 0x04, 0x82, 0x02, 0x1D, 0x30, 0x82, + 0x02, 0x19, 0x30, 0x81, 0x82, 0xA1, 0x11, 0x30, + 0x0F, 0x31, 0x0D, 0x30, 0x0B, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x04, 0x43, 0x41, 0x2D, 0x33, + 0x18, 0x0F, 0x32, 0x30, 0x31, 0x37, 0x31, 0x30, + 0x31, 0x38, 0x31, 0x32, 0x33, 0x38, 0x35, 0x32, + 0x5A, 0x30, 0x5C, 0x30, 0x5A, 0x30, 0x45, 0x30, + 0x09, 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, + 0x05, 0x00, 0x04, 0x14, 0xB7, 0xCA, 0x0F, 0xAB, + 0xDC, 0x6F, 0xB8, 0xB0, 0x96, 0x7A, 0x15, 0xAC, + 0x98, 0x0A, 0x0F, 0x19, 0xFE, 0xA4, 0x12, 0xDE, + 0x04, 0x14, 0x1E, 0x85, 0xED, 0x7F, 0x9E, 0x71, + 0xFA, 0x08, 0x9D, 0x37, 0x48, 0x43, 0xA0, 0x12, + 0xEF, 0xE5, 0xAA, 0xE1, 0xE3, 0x8A, 0x02, 0x0C, + 0x57, 0xA3, 0x1D, 0x32, 0x35, 0xB3, 0x4F, 0xD0, + 0xB9, 0xF5, 0xE7, 0x3C, 0x82, 0x00, 0x18, 0x0F, + 0x32, 0x30, 0x31, 0x37, 0x31, 0x30, 0x31, 0x38, + 0x31, 0x32, 0x33, 0x38, 0x35, 0x32, 0x5A, 0x30, + 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, + 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, + 0x01, 0x81, 0x00, 0xB3, 0x0F, 0x6A, 0xB0, 0x7D, + 0x2B, 0xDE, 0xC3, 0x95, 0x3E, 0x05, 0x98, 0xC7, + 0x4F, 0x49, 0xCA, 0x13, 0xEE, 0x80, 0x00, 0xB1, + 0xAA, 0xF8, 0x5F, 0x12, 0x8B, 0x53, 0xDF, 0xA8, + 0xAD, 0xA8, 0x6D, 0xEC, 0x7F, 0x96, 0x4C, 0x06, + 0x12, 0xA6, 0x70, 0xB1, 0x87, 0xFB, 0xA0, 0x47, + 0x5E, 0xC6, 0xD2, 0x3B, 0x73, 0x4F, 0x32, 0x30, + 0x9C, 0xB4, 0x05, 0x03, 0x24, 0x7D, 0x30, 0x36, + 0x0A, 0xA7, 0x83, 0xA6, 0xE1, 0x8A, 0x90, 0xEE, + 0xBF, 0xB8, 0xDC, 0x38, 0x88, 0xA8, 0xA5, 0x54, + 0xDB, 0x95, 0x9C, 0xAD, 0x58, 0x9F, 0x51, 0xBB, + 0x64, 0x47, 0xE2, 0xDB, 0x8C, 0x7F, 0x81, 0x93, + 0x55, 0x07, 0xBC, 0x51, 0x3C, 0x98, 0x23, 0x97, + 0x64, 0x1F, 0x9C, 0x99, 0x0C, 0xA3, 0x19, 0xAA, + 0x75, 0x45, 0x7D, 0x1D, 0x9E, 0x3D, 0x96, 0x9B, + 0x8F, 0x2F, 0x53, 0x0A, 0xA9, 0xEF, 0x59, 0xC0, + 0xF0, 0x06, 0x1C, 0x5C, 0xBE, 0x7B, 0xE7, 0x16, + 0x78, 0xAD, 0xBF, 0x43, 0x0E, 0x16, 0xA8, 0x57, + 0x68, 0x77, 0x4B, 0x46, 0x65, 0xBB, 0x82, 0x0D, + 0x6E, 0xDB, 0x83, 0x21, 0x5B, 0x31, 0x27, 0x9D, + 0xE4, 0xAA, 0x41, 0xA3, 0x8D, 0x50, 0x78, 0xFD, + 0x1D, 0x11, 0xB6, 0xA0, 0x97, 0x38, 0x8D, 0x93, + 0x84, 0xC2, 0xB7, 0x49, 0xF0, 0xD6, 0xAB, 0x0C, + 0xC5, 0xF6, 0xD6, 0x00, 0xEF, 0xAD, 0xD5, 0x55, + 0x78, 0xBE, 0x83, 0xEC, 0x37, 0xA3, 0x2B, 0xF8, + 0x66, 0xD3, 0xFC, 0x41, 0x45, 0x8E, 0x55, 0x46, + 0x38, 0x6B, 0x3A, 0x44, 0x95, 0x7D, 0x70, 0xAA, + 0x83, 0xBC, 0xCE, 0x75, 0x23, 0xC6, 0xCD, 0x40, + 0xCD, 0x13, 0x8B, 0x51, 0xE2, 0xCF, 0x2B, 0xC1, + 0x8C, 0x2D, 0x52, 0x19, 0x2C, 0xFD, 0xFA, 0xD4, + 0x9D, 0xA4, 0x2E, 0x07, 0x23, 0xD0, 0x67, 0x6A, + 0x18, 0x85, 0x47, 0xE4, 0xDE, 0x78, 0xA7, 0xA6, + 0xE5, 0xE4, 0xE8, 0x12, 0x50, 0xFD, 0xC4, 0x74, + 0xA6, 0xC5, 0x45, 0x9C, 0x82, 0x55, 0x9D, 0xA7, + 0xF0, 0x37, 0xAB, 0xDC, 0x27, 0xFD, 0x3E, 0xD7, + 0xEF, 0x19, 0x5E, 0xD9, 0x7B, 0x80, 0xAF, 0xFC, + 0x20, 0x8D, 0xEA, 0xB2, 0x64, 0x93, 0x9E, 0x0F, + 0xE9, 0xAB, 0x8F, 0xEA, 0x91, 0x09, 0x83, 0x41, + 0x12, 0x18, 0x2E, 0x5F, 0xA2, 0x9E, 0x47, 0x14, + 0x2C, 0x95, 0x33, 0xE5, 0xBF, 0xA2, 0xDD, 0x00, + 0xD5, 0xCC, 0x4D, 0xD3, 0xE7, 0x07, 0x62, 0x5A, + 0x81, 0xD4, 0xD4, 0x21, 0xA2, 0x52, 0xEA, 0x7B, + 0x7A, 0x6C, 0x0E, 0x32, 0x76, 0x12, 0x82, 0x0A, + 0x2E, 0xD3, 0x79, 0x75, 0x12, 0xCE, 0xEB, 0x3E, + 0x4B, 0xEF, 0x80, 0xB0, 0xC2, 0x22, 0x75, 0x49, + 0xE2, 0xE1, 0xF1, 0x7C, 0x89, 0xB6, 0xBF, 0xDE, + 0x7B, 0xD4, 0x67, 0x14, 0x1E, 0x7A, 0x5C, 0x2C, + 0xCE, 0xEE, 0x5C, 0xA1, 0x6C, 0x73, 0xF1, 0xFD, + 0x54, 0xFA, 0x43 +}; + +const char _ocsp_subca3_unknown_pem[] = + "-----BEGIN OCSP RESPONSE-----\n" + "MIIGUwoBAKCCBkwwggZIBgkrBgEFBQcwAQEEggY5MIIGNTCBhaEUMBIxEDAOBgNV\n" + "BAMTB3N1YkNBLTMYDzIwMTcxMDE4MTIwOTMwWjBcMFowRTAJBgUrDgMCGgUABBSy\n" + "5lyOboNLvRHZl/o2k1merVwVxAQUnpHsjKokWyLg6BHo6aSRtZEmAPECDFejHTI2\n" + "yAyhyrC99oIAGA8yMDE3MTAxODEyMDkzMFowDQYJKoZIhvcNAQENBQADggGBAFZk\n" + "KxCq5yZ/8X+Glw4YtHWSZRIrRp8+lpjkqxDRDuoI4qUBdaRbdqxJK57xSvJ5Ok4V\n" + "gf9N02WOrkq7MzWLD7ZdMu/14SW/vVIdmfI04Ps4NGya71OykMb7daCMvGuO2N4z\n" + "5G/yrfKiT8JYR+JobTo6swqCPaSFAFg+ADWdax//n66wmuLHDpqzfFLp2lBXNXJx\n" + "gafAQCjqK84JRx2xgEFZ9l3TPOoR2BO5DzJqKXK+wcMbtUxNDaHV8MTsxVqTQXoB\n" + "JLN6cYKjxghCkQ5r54YLr77fB1qMNfhffy9gBN0q8g3AHG+gMICkNYPTw8w1Rjbr\n" + "6bE8CI/MXcrZrz7UWLuQXe8BnNk+Vn7PE6oRxCLSoJ8b6fB4cDvMIX1rRpc/Owxb\n" + "j6gockpBTebdLr3xpB6iopRurTPCVtMpz3VeNVnrB3gjCyBO62ErRncKn6RXqEVF\n" + "bo+01Zz8hHjDgtm2p9V24CMJK5p8fLVthJ0fRwyc1oYr3fT6l+dy50JSdOhNAaCC\n" + "BBUwggQRMIIEDTCCAnWgAwIBAgIMV6MdMjWzT9C59ec8MA0GCSqGSIb3DQEBCwUA\n" + "MA8xDTALBgNVBAMTBENBLTMwIBcNMTYwNTEwMDg0ODMwWhgPOTk5OTEyMzEyMzU5\n" + "NTlaMBIxEDAOBgNVBAMTB3N1YkNBLTMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAw\n" + "ggGKAoIBgQCgOcNXzStOnRFoi05aMRLeMB45X4a2srSBul3ULxDSGjIP0EEl//X2\n" + "WLiope/xNL8bPCRpI1sSVXl8Hb1cK3qWNGazVmC7xW07NxL26I86e3/BVRnq8ioV\n" + "tvPQwEpvuI8F97x1vL/n+cfcdkN77NScr5C9jHMVioRvC+qKz9bUBx5DSySV66PR\n" + "5+wGsJDvkfsmjVOgqiTlSWQS5G3nMMq0Rixsc5dP5Wygkbdh9+45UCtObcnHABJr\n" + "P+GtLiG0AOUx6oPzPteZL13erWXg7zYusTarj9rTcdsgR/Im1mIzmD2i7GhJo4Gj\n" + "0Sk3Rq93JyeA+Ay5UPmqcm+dqX00b49MTTv4GtO53kLQSCXYFJ96jcMiXMzBFJD1\n" + "ROsdk4WUed/tJMHffttDz9j3WcuX9M2nzTT2xlauokjbEAhRDRw5fxCFZh7TbmaH\n" + "4vysDO9UZXVEXSLKonQ2Lmyso48s/G30VmlSjtPtJqRsv/oPpCO/c0D6BrkHV55B\n" + "48xfmyIFjgECAwEAAaNkMGIwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMD\n" + "BwYAMB0GA1UdDgQWBBQtMwQbJ3+UBHzH4zVP6SWklOG3oTAfBgNVHSMEGDAWgBT5\n" + "qIYZY7akFBNgdg8BmjU27/G0rzANBgkqhkiG9w0BAQsFAAOCAYEAMii5Gx3/d/58\n" + "oDRy5a0oPvQhkU0dKa61NfjjOz9uqxNSilLJE7jGJPaG2tKtC/XU1Ybql2tqQY68\n" + "kogjKs31QC6RFkoZAFouTJt11kzbgVWKewCk3/OrA0/ZkRrAfE0Pma/NITRwTHmT\n" + "sQOdv/bzR+xIPhjKxKrKyJFMG5xb+Q0OKSbd8kDpgYWKob5x2jsNYgEDp8nYSRT4\n" + "5SGw7c7FcumkXz2nA6r5NwbnhELvNFK8fzsY+QJKHaAlJ9CclliP1PiiAcl2LQo2\n" + "gaygWNiD+ggnqzy7nqam9rieOOMHls1kKFAFrWy2g/cBhTfS+/7Shpex7NK2GAiu\n" + "jgUV0TZHEyEZt6um4gLS9vwUKs/R4XS9VL/bBlfAy2hAVTeUejiRBGeTJkqBu7+c\n" + "4FdrCByVhaeQASMYu/lga8eaGL1zJbJe2BQWI754KDYDT9qKNqGlgysr4AVje7z1\n" + "Y1MQ72SnfrzYSQw6BB85CurB6iou3Q+eM4o4g/+xGEuDo0Ne/8ir\n" + "-----END OCSP RESPONSE-----\n"; + +static gnutls_datum_t ocsp_subca3_unknown = { + (void *)_ocsp_subca3_unknown, sizeof(_ocsp_subca3_unknown) +}; + +static gnutls_datum_t ocsp_subca3_unknown_pem = { + (void *)_ocsp_subca3_unknown_pem, sizeof(_ocsp_subca3_unknown_pem)-1 +}; + +/* ocsp response with good status for + * cli_ca3_cert. Signed with + * RSA-SHA256. + */ + +const char _ocsp_cli_ca3_good_pem[] = + "-----BEGIN OCSP RESPONSE-----" + "MIIGPQoBAKCCBjYwggYyBgkrBgEFBQcwAQEEggYjMIIGHzCBgqERMA8xDTALBgNV" + "BAMTBENBLTMYDzIwMTkwOTIwMjAwMjMxWjBcMFowRTAJBgUrDgMCGgUABBSy5lyO" + "boNLvRHZl/o2k1merVwVxAQUnpHsjKokWyLg6BHo6aSRtZEmAPECDFejHTI2Wi75" + "obBaUoAAGA8yMDE5MDkyMDIwMDIzMVowDQYJKoZIhvcNAQELBQADggGBAC80EWal" + "PkJ29i/sZsO49hRolZXCMb1bjI0yxwhoH2Hk8Z0L41N0WFRphPqrDr8Dm3uRMcdx" + "n3xre+bxM0WL44mUMxptdYUcAwfb1M2gSQVhRvhvIfiMQZlkMYle4RPdVQN9nxmC" + "WbZD0WJmXQuYpFWYDVQkcL6f5Tlex5a8M/v/ihFBecs3wfstD1Bu4mD7nA8O/tGa" + "u0JQXxHnIM7FBOm73HccoxE5in307WEJtK1yTiUjwjlvl05hdWIzdydRToB6dNLL" + "MtgoFkKIX4aF6fkv1We4zooFdzlQanGdompaSDRGgMEONMZsQdWAs6Nmk+98f6cR" + "V426fFq3i6MLctLbwB5cOvvKbf9+P14KMD+bzcglupWqgJhNAmQlWksjWgMjfcCV" + "w4xATkcHnbMLlQ6ikORcXdkAbbhx8O0jJG1MdiUxErPOkOmKz2Nq14OYVYZII0t/" + "tbzuVGrYtNde4OM2mt9KSOY9rqX1wgKWOUPQW/FzOQvlAaiIwSQtrha/JaCCBAIw" + "ggP+MIID+jCCAmKgAwIBAgIIVzGgXgSsTYwwDQYJKoZIhvcNAQELBQAwDzENMAsG" + "A1UEAxMEQ0EtMzAgFw0xNjA1MTAwODQ4MzBaGA85OTk5MTIzMTIzNTk1OVowDzEN" + "MAsGA1UEAxMEQ0EtMzCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBALbd" + "xniG+2wP/ONeZfvR7AJakVo5deFKIHVTiiBWwhg+HSjd4nfDa+vyTt/wIdldP1Pr" + "iD1Rigc8z68+RxPpGfAc197pKlKpO08I0L1RDKnjBWr4fGdCzE6uZ/ZsKVifoIZp" + "dC8M2IYpAIMajEtnH53XZ1hTEviXTsneuiCTtap73OeSkL71SrIMkgBmAX17gfX3" + "SxFjQUzOs6QMMOa3+8GW7RI+E/SyS1QkOO860dj9XYgOnTL20ibGcWF2XmTiQASI" + "+KmHvYJCNJF/8pvmyJRyBHGZO830aBY0+DcS2bLKcyMiWfOJw7WnpaO7zSEC5WFg" + "o4jdqroUBQdjQNCSSdrt1yYrAl1Sj2PMxYFX4H545Pr2sMpwC9AnPk9+uucT1Inj" + "9615qbuXgFwhkgpK5pnPjzKaHp7ESlJj4/dIPTmhlt5BV+CLh7tSLzVLrddGU+os" + "8JinT42radJ5V51Hn0C1CHIaFAuBCd5XRHXtrKb7WcnwCOxlcvux9h5/847F4wID" + "AQABo1gwVjAPBgNVHRMBAf8EBTADAQH/MBMGA1UdJQQMMAoGCCsGAQUFBwMJMA8G" + "A1UdDwEB/wQFAwMHBgAwHQYDVR0OBBYEFPmohhljtqQUE2B2DwGaNTbv8bSvMA0G" + "CSqGSIb3DQEBCwUAA4IBgQBhBi8dXQMtXH2oqcuHuEj9JkxraAsaJvc1WAoxbiqV" + "cJKcVSC0gvoCY3q+NQvuePzw5dzd5JBfkoIsP5U6ATWAUPPqCP+/jRnFqDQlH626" + "mhDGVS8W7Ee8z1KWqnKWGv5nkrZ6r3y9bVaNUmY7rytzuct1bI9YkX1kM66vgnU2" + "xeMIjDe36/wTtBRVFPSPpE3KL9hxCg3KgPSeSmmIhmQxJ1M6xe00314/GX3lTDt5" + "5UdMgmldl2LHV+0i1NPCgnuOEFVOiz2nHAnw2LNmvHEDDpPauz2Meeh9aaDeefIh" + "2u/wg39WRPhU1mYvmxvYZqA/jwSctiEhuKEBBZSOHxeTjplH1THlIziVnYyVW4sP" + "MiGUajXhTi47H219hx87+bldruOtirbDIslL9RGWqWAkMeGP+hUl1R2zvDukaqIK" + "qIN81/A/EeMoI6/IHb1BpgY2rGs/I/QTb3VTKqQUYv09Hi+itPCdKqamSm8dZMKK" + "aPA0fD9yskUMFPBhfj8BvXg=" + "-----END OCSP RESPONSE-----"; + +static gnutls_datum_t ocsp_cli_ca3_good_pem = { + (void *)_ocsp_cli_ca3_good_pem, sizeof(_ocsp_cli_ca3_good_pem) +}; + +const char _ocsp_cli_ca3_bad_pem[] = + "-----BEGIN OCSP RESPONSE-----" + "MIIGTgoBAKCCBkcwggZDBgkrBgEFBQcwAQEEggY0MIIGMDCBk6ERMA8xDTALBgNV" + "BAMTBENBLTMYDzIwMTkwOTIwMjAwMTIxWjBtMGswRTAJBgUrDgMCGgUABBSy5lyO" + "boNLvRHZl/o2k1merVwVxAQUnpHsjKokWyLg6BHo6aSRtZEmAPECDFejHTI2Wi75" + "obBaUqERGA8yMDE5MDUyMjEzNTEwMVoYDzIwMTkwOTIwMjAwMTIxWjANBgkqhkiG" + "9w0BAQsFAAOCAYEAdCpwIfVu7z2CW3G7IzRSAMBLxu1e/trNdmlKPpx9ptKVWISr" + "2Fbro6D73HE0/IoTkZXqmUNoEjK0Os3Z/FIlbRuDql0dLkK/KornsvFRD7SemW2z" + "Z93GIX4JUBJQJW5iYjKBq9xn31IKEhjn9Zhtsfe7a9vK9mnW5oefeIiRLqfmcS09" + "mclyvTI1aGPcfkSSdabywpKFFETwX1LBIyBhNL9cV07nf0xntOrv5xfLTjyM2uVt" + "1A4F87xJJG2OX3YJXtf2yuXh1JTAMlUOOrICq1ejXos0AW7iJMzuOkBmXuGHjbBA" + "1zcSHJF6eZK4iaasdKd4q+coI9x0IdtNohT0a++R4jwFyKlINMVxB8L3xL9l+Fxz" + "+bNlJt3oZSYAx3CmcFMbScN3LmmHXrsKc6BhuHmgLEhpU9qnnDmUTaJdIWtTHIrq" + "St+IjvU77wnBscIxQaY0p120rwbqFF9ZUWnbgzsxYqJJ8+qW6oESV5ezWF7bg2YI" + "d6W38uy7ibW/10froIIEAjCCA/4wggP6MIICYqADAgECAghXMaBeBKxNjDANBgkq" + "hkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0zMCAXDTE2MDUxMDA4NDgzMFoYDzk5" + "OTkxMjMxMjM1OTU5WjAPMQ0wCwYDVQQDEwRDQS0zMIIBojANBgkqhkiG9w0BAQEF" + "AAOCAY8AMIIBigKCAYEAtt3GeIb7bA/8415l+9HsAlqRWjl14UogdVOKIFbCGD4d" + "KN3id8Nr6/JO3/Ah2V0/U+uIPVGKBzzPrz5HE+kZ8BzX3ukqUqk7TwjQvVEMqeMF" + "avh8Z0LMTq5n9mwpWJ+ghml0LwzYhikAgxqMS2cfnddnWFMS+JdOyd66IJO1qnvc" + "55KQvvVKsgySAGYBfXuB9fdLEWNBTM6zpAww5rf7wZbtEj4T9LJLVCQ47zrR2P1d" + "iA6dMvbSJsZxYXZeZOJABIj4qYe9gkI0kX/ym+bIlHIEcZk7zfRoFjT4NxLZsspz" + "IyJZ84nDtaelo7vNIQLlYWCjiN2quhQFB2NA0JJJ2u3XJisCXVKPY8zFgVfgfnjk" + "+vawynAL0Cc+T3665xPUieP3rXmpu5eAXCGSCkrmmc+PMpoensRKUmPj90g9OaGW" + "3kFX4IuHu1IvNUut10ZT6izwmKdPjatp0nlXnUefQLUIchoUC4EJ3ldEde2spvtZ" + "yfAI7GVy+7H2Hn/zjsXjAgMBAAGjWDBWMA8GA1UdEwEB/wQFMAMBAf8wEwYDVR0l" + "BAwwCgYIKwYBBQUHAwkwDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQU+aiGGWO2" + "pBQTYHYPAZo1Nu/xtK8wDQYJKoZIhvcNAQELBQADggGBAGEGLx1dAy1cfaipy4e4" + "SP0mTGtoCxom9zVYCjFuKpVwkpxVILSC+gJjer41C+54/PDl3N3kkF+Sgiw/lToB" + "NYBQ8+oI/7+NGcWoNCUfrbqaEMZVLxbsR7zPUpaqcpYa/meStnqvfL1tVo1SZjuv" + "K3O5y3Vsj1iRfWQzrq+CdTbF4wiMN7fr/BO0FFUU9I+kTcov2HEKDcqA9J5KaYiG" + "ZDEnUzrF7TTfXj8ZfeVMO3nlR0yCaV2XYsdX7SLU08KCe44QVU6LPaccCfDYs2a8" + "cQMOk9q7PYx56H1poN558iHa7/CDf1ZE+FTWZi+bG9hmoD+PBJy2ISG4oQEFlI4f" + "F5OOmUfVMeUjOJWdjJVbiw8yIZRqNeFOLjsfbX2HHzv5uV2u462KtsMiyUv1EZap" + "YCQx4Y/6FSXVHbO8O6Rqogqog3zX8D8R4ygjr8gdvUGmBjasaz8j9BNvdVMqpBRi" + "/T0eL6K08J0qpqZKbx1kwopo8DR8P3KyRQwU8GF+PwG9eA==" + "-----END OCSP RESPONSE-----"; + +static gnutls_datum_t ocsp_cli_ca3_bad_pem = { + (void *)_ocsp_cli_ca3_bad_pem, sizeof(_ocsp_cli_ca3_bad_pem) +}; + + + +#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# pragma GCC diagnostic pop +#endif + +#endif /* GNUTLS_TESTS_OCSP_COMMON_H */ diff --git a/tests/ocsp-tests/certs/chain-akamai.com.pem b/tests/ocsp-tests/certs/chain-akamai.com.pem new file mode 100644 index 0000000000..bcb506e1e7 --- /dev/null +++ b/tests/ocsp-tests/certs/chain-akamai.com.pem @@ -0,0 +1,54 @@ +-----BEGIN CERTIFICATE----- +MIIEujCCBGCgAwIBAgIQY7nsfv+YgzXxE9Z9L4ZNNTAKBggqhkjOPQQDAjCBgDEL +MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYD +VQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBD +bGFzcyAzIEVDQyAyNTYgYml0IFNTTCBDQSAtIEcyMB4XDTE2MDcyODAwMDAwMFoX +DTE3MDcyODIzNTk1OVoweTELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDU1hc3NhY2h1 +c2V0dHMxEjAQBgNVBAcMCUNhbWJyaWRnZTEiMCAGA1UECgwZQWthbWFpIFRlY2hu +b2xvZ2llcywgSW5jLjEaMBgGA1UEAwwRYTI0OC5lLmFrYW1haS5uZXQwWTATBgcq +hkjOPQIBBggqhkjOPQMBBwNCAAQCpvwTzWb1uqosqE52ItPukH6zYbx1GjvTx4Bg +HGulRdgt9psnHybLLv404jXSmt1KkitP6xmokBA4qb1HZnQro4ICwDCCArwwbgYD +VR0RBGcwZYIOKi5ha2FtYWloZC5uZXSCFiouYWthbWFpaGQtc3RhZ2luZy5uZXSC +FyouYWthbWFpemVkLXN0YWdpbmcubmV0gg8qLmFrYW1haXplZC5uZXSCEWEyNDgu +ZS5ha2FtYWkubmV0MAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeAMGEGA1UdIARa +MFgwVgYGZ4EMAQICMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20v +Y3BzMCUGCCsGAQUFBwICMBkMF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMCsGA1Ud +HwQkMCIwIKAeoByGGmh0dHA6Ly9yYy5zeW1jYi5jb20vcmMuY3JsMB0GA1UdJQQW +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAfBgNVHSMEGDAWgBQl8IrhS3rZAZUK7cZT +8Yx4H9nz+DBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGGE2h0dHA6Ly9yYy5z +eW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9yYy5zeW1jYi5jb20vcmMuY3J0 +MIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHYA3esdK3oNT6Ygi4GtgWhwfi6OnQHV +XIiNPRHEzbbsvswAAAFWMxw8DAAABAMARzBFAiEA0jnhAc04ytMqwcpzdhepDolx +k4/Ly01z7TbzhrdEm68CIDBoqkfHeUf/Egy4Dc6WtF7d4Yaz6VQwtPZtE62nYobW +AHYApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BAAAAFWMxw8aQAABAMA +RzBFAiEAtmv/WDAEkIzPoAmNg8rDB3hxjrqDE28O9ypcHfLfDKQCIAkexztlslo9 +vvg88draHLAFn6LehOKa+CDmG+7iBshSMAoGCCqGSM49BAMCA0gAMEUCIQCaLLx7 +OCmOUhNgoZX/s6pyGzE4p5dFiLJJm3u6dDw/jQIgS8vB1RZeveychMbXDPrx5y/W +HvfPyxlCkvHQR9TX15o= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEajCCA1KgAwIBAgIQP5KHvp0dpKN6nfYoLndaxDANBgkqhkiG9w0BAQsFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMTUwNTEyMDAwMDAwWhcNMjUwNTExMjM1OTU5WjCBgDEL +MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYD +VQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQDEyhTeW1hbnRlYyBD +bGFzcyAzIEVDQyAyNTYgYml0IFNTTCBDQSAtIEcyMFkwEwYHKoZIzj0CAQYIKoZI +zj0DAQcDQgAEDxukkdfnrOfRTk63ZFvhj39uBNOrONtEt0Bcbb2WljffeYmGZ/ex +Hwie/WM7RoyfvVPoFdyXPiuBRq2Gfw4BOaOCAV0wggFZMC4GCCsGAQUFBwEBBCIw +IDAeBggrBgEFBQcwAYYSaHR0cDovL3Muc3ltY2QuY29tMBIGA1UdEwEB/wQIMAYB +Af8CAQAwZQYDVR0gBF4wXDBaBgpghkgBhvhFAQc2MEwwIwYIKwYBBQUHAgEWF2h0 +dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h0dHBzOi8vZC5z +eW1jYi5jb20vcnBhMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9zLnN5bWNiLmNv +bS9wY2EzLWc1LmNybDAOBgNVHQ8BAf8EBAMCAQYwKwYDVR0RBCQwIqQgMB4xHDAa +BgNVBAMTE1NZTUMtRUNDLUNBLXAyNTYtMjIwHQYDVR0OBBYEFCXwiuFLetkBlQrt +xlPxjHgf2fP4MB8GA1UdIwQYMBaAFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBCwUAA4IBAQAMMGUXBaWTdaLxsTGtcB/naqjIQrLvoV9NG+7MoHpGd/69 +dZ/h2zOy7sGFUHoG/0HGRA9rxT/5w5GkEVIVkxtWyIWWq6rs4CTZt8Bej/KHYRbo +jtEDUkCTZSTLiCvguPyvinXgxy+LHT+PmdtEfXsvcdbeBSWUYpOsDYvD2hNtz9dw +Od5nBosMApmdxt+z7LQyZu8wMnfI1U6IMO+RWowxZ8uy0oswdFYd32l9xe+aAE/k +y9alLu/M9pvxiUKufqHJRgDBKA6uDjHLMPX+/nxXaNCPX3SI4KVZ1stHQ/U5oNlM +dHN9umAvlU313g0IgJrjsQ2nIdf9dsdP+6lrmP7s +-----END CERTIFICATE----- diff --git a/tests/ocsp-tests/certs/chain-amazon.com-unsorted.pem b/tests/ocsp-tests/certs/chain-amazon.com-unsorted.pem new file mode 100644 index 0000000000..fc3818b49a --- /dev/null +++ b/tests/ocsp-tests/certs/chain-amazon.com-unsorted.pem @@ -0,0 +1,90 @@ +-----BEGIN CERTIFICATE----- +MIIGmzCCBYOgAwIBAgIQHUq9qnjQmv55nUG863p2YjANBgkqhkiG9w0BAQsFADB+ +MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd +BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVj +IENsYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MB4XDTE2MTAzMTAwMDAwMFoX +DTE3MTIzMTIzNTk1OVowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0 +b24xEDAOBgNVBAcMB1NlYXR0bGUxGTAXBgNVBAoMEEFtYXpvbi5jb20sIEluYy4x +FzAVBgNVBAMMDnd3dy5hbWF6b24uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAwlooZ3Wf+B8c1nTZj/14wCPIjyhcOV5ytEZQDbtftWixOxTpG2Sl +k2GI1pztESpopBmbY/haM5YNWDYDHr01AQvzAqwsNyz5sX4rytkIEWI92DomKbvx +QKry0m0Zuj9MzabZb2vHb0dbWwUl2yXn5nlfHJSfmD0TS3UFNaQzXExFnlKU/i7V +omLEB/O9OtfJ0V2XZzbzOx3RfvTy5wmn4AxCC7nGRklNBKVa+npRl0zj+loyCaM+ +AF5YV9ZbURIuxYiZOW3u2a66VzYwCRa2EdtIbPALO/dSrFNAuaAhKqpFN0OB42d1 +6IWUOKiMiHDJL512YAJJBmfQPI7fVQtXJwIDAQABo4IDKTCCAyUwgdQGA1UdEQSB +zDCByYIKYW1hem9uLmNvbYIIYW16bi5jb22CEXVlZGF0YS5hbWF6b24uY29tgg11 +cy5hbWF6b24uY29tgg53d3cuYW1hem9uLmNvbYIMd3d3LmFtem4uY29tghRjb3Jw +b3JhdGUuYW1hem9uLmNvbYIRYnV5Ym94LmFtYXpvbi5jb22CEWlwaG9uZS5hbWF6 +b24uY29tgg15cC5hbWF6b24uY29tgg9ob21lLmFtYXpvbi5jb22CFW9yaWdpbi13 +d3cuYW1hem9uLmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUE +FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwYQYDVR0gBFowWDBWBgZngQwBAgIwTDAj +BggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIw +GQwXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwHwYDVR0jBBgwFoAUX2DPYZBV34RD +FIpgKrL1evRDGO8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3NzLnN5bWNiLmNv +bS9zcy5jcmwwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRwOi8vc3Mu +c3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vc3Muc3ltY2IuY29tL3NzLmNy +dDCCAQYGCisGAQQB1nkCBAIEgfcEgfQA8gB3AN3rHSt6DU+mIIuBrYFocH4ujp0B +1VyIjT0RxM227L7MAAABWBifyfEAAAQDAEgwRgIhAOnxZYIIOlu0L1nvY3+yk8Ay +gYzt3RsoZD1Wcs5Tl+W/AiEArj03tMyYoSa1I25zrqujXDQp5GnMXoI0MHAXINWc +EV0AdwBo9pj4H2SCvjqM7rkoHUz8cVFdZ5PURNEKZ6y7T0/7xAAAAVgYn8oaAAAE +AwBIMEYCIQDRlQQ8KC2R/bvOeWJr0FGedxbjE4OglejZEYKSCHekRQIhALbGyJPw +AagwlRnFD5iqE1ZzSTO6uadnKEazPJcW2sRnMA0GCSqGSIb3DQEBCwUAA4IBAQA6 +5KlsAxxtgfs05qV0ywTqM6qGzBkMIgJzJpCh9OR+X+STrfjphnLQlOwIuHxiF0oV +phsf9oYW6TYQimBIKoFpP94WbG2ojsr39YJ6kiDhudt3ef24QnZ3AtnXM5OLVv46 +iwZst4TwdwO3/Ialn7ql3sVX7+13yscEXfwfMT0JI1yzl+vZ8tR6bc5X9HqwjuAD +JelImPs/TxshDt3JRhbUuKcFxjaEcEtRqoGemgZgEpRnifUSBvnl01IVzb71DGWu +Bpx0qrpruMAUU1lOJrg/rwQMSXC2lSZDiDn1cjK0z+XLi7x86N/7jW6zKh5RjSgr +r6H7ZhiwtwpJzLsjT1CX +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp +U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg +SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln +biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm +GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve +fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ +aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj +aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW +kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC +4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga +FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIFODCCBCCgAwIBAgIQUT+5dDhwtzRAQY0wkwaZ/zANBgkqhkiG9w0BAQsFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB+MQsw +CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV +BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVjIENs +YXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAstgFyhx0LbUXVjnFSlIJluhL2AzxaJ+aQihiw6UwU35VEYJb +A3oNL+F5BMm0lncZgQGUWfm893qZJ4Itt4PdWid/sgN6nFMl6UgfRk/InSn4vnlW +9vf92Tpo2otLgjNBEsPIPMzWlnqEIRoiBAMnF4scaGGTDw5RgDMdtLXO637QYqzu +s3sBdO9pNevK1T2p7peYyo2qRA4lmUoVlqTObQJUHypqJuIGOmNIrLRM0XWTUP8T +L9ba4cYY9Z/JJV3zADreJk20KQnNDz0jbxZKgRb78oMQw7jW2FUyPfG9D72MUpVK +Fpd6UiFjdS8W+cRmvvW1Cdj/JwDNRHxvSz+w9wIDAQABo4IBYzCCAV8wEgYDVR0T +AQH/BAgwBgEB/wIBADAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vczEuc3ltY2Iu +Y29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB/wQEAwIBBjAvBggrBgEFBQcBAQQjMCEw +HwYIKwYBBQUHMAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wawYDVR0gBGQwYjBgBgpg +hkgBhvhFAQc2MFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20v +Y3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20vcnBhMCkG +A1UdEQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0xLTUzNDAdBgNVHQ4E +FgQUX2DPYZBV34RDFIpgKrL1evRDGO8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnz +Qzn6Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBAF6UVkndji1l9cE2UbYD49qecxny +H1mrWH5sJgUs+oHXXCMXIiw3k/eG7IXmsKP9H+IyqEVv4dn7ua/ScKAyQmW/hP4W +Ko8/xabWo5N9Q+l0IZE1KPRj6S7t9/Vcf0uatSDpCr3gRRAMFJSaXaXjS5HoJJtG +QGX0InLNmfiIEfXzf+YzguaoxX7+0AjiJVgIcWjmzaLmFN5OUiQt/eV5E1PnXi8t +TRttQBVSK/eHiXgSgW7ZTaoteNTCLD0IX4eRnh8OsN4wUmSGiaqdZpwOdgyA8nTY +Kvi4Os7X1g8RvmurFPW9QaAiY4nxug9vKWNmLT+sjHLF+8fk1A/yO0+MKcc= +-----END CERTIFICATE----- diff --git a/tests/ocsp-tests/certs/chain-amazon.com.pem b/tests/ocsp-tests/certs/chain-amazon.com.pem new file mode 100644 index 0000000000..970f695ac3 --- /dev/null +++ b/tests/ocsp-tests/certs/chain-amazon.com.pem @@ -0,0 +1,68 @@ +-----BEGIN CERTIFICATE----- +MIIGmzCCBYOgAwIBAgIQHUq9qnjQmv55nUG863p2YjANBgkqhkiG9w0BAQsFADB+ +MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd +BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVj +IENsYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MB4XDTE2MTAzMTAwMDAwMFoX +DTE3MTIzMTIzNTk1OVowaDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0 +b24xEDAOBgNVBAcMB1NlYXR0bGUxGTAXBgNVBAoMEEFtYXpvbi5jb20sIEluYy4x +FzAVBgNVBAMMDnd3dy5hbWF6b24uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAwlooZ3Wf+B8c1nTZj/14wCPIjyhcOV5ytEZQDbtftWixOxTpG2Sl +k2GI1pztESpopBmbY/haM5YNWDYDHr01AQvzAqwsNyz5sX4rytkIEWI92DomKbvx +QKry0m0Zuj9MzabZb2vHb0dbWwUl2yXn5nlfHJSfmD0TS3UFNaQzXExFnlKU/i7V +omLEB/O9OtfJ0V2XZzbzOx3RfvTy5wmn4AxCC7nGRklNBKVa+npRl0zj+loyCaM+ +AF5YV9ZbURIuxYiZOW3u2a66VzYwCRa2EdtIbPALO/dSrFNAuaAhKqpFN0OB42d1 +6IWUOKiMiHDJL512YAJJBmfQPI7fVQtXJwIDAQABo4IDKTCCAyUwgdQGA1UdEQSB +zDCByYIKYW1hem9uLmNvbYIIYW16bi5jb22CEXVlZGF0YS5hbWF6b24uY29tgg11 +cy5hbWF6b24uY29tgg53d3cuYW1hem9uLmNvbYIMd3d3LmFtem4uY29tghRjb3Jw +b3JhdGUuYW1hem9uLmNvbYIRYnV5Ym94LmFtYXpvbi5jb22CEWlwaG9uZS5hbWF6 +b24uY29tgg15cC5hbWF6b24uY29tgg9ob21lLmFtYXpvbi5jb22CFW9yaWdpbi13 +d3cuYW1hem9uLmNvbTAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUE +FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwYQYDVR0gBFowWDBWBgZngQwBAgIwTDAj +BggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIw +GQwXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwHwYDVR0jBBgwFoAUX2DPYZBV34RD +FIpgKrL1evRDGO8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3NzLnN5bWNiLmNv +bS9zcy5jcmwwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRwOi8vc3Mu +c3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vc3Muc3ltY2IuY29tL3NzLmNy +dDCCAQYGCisGAQQB1nkCBAIEgfcEgfQA8gB3AN3rHSt6DU+mIIuBrYFocH4ujp0B +1VyIjT0RxM227L7MAAABWBifyfEAAAQDAEgwRgIhAOnxZYIIOlu0L1nvY3+yk8Ay +gYzt3RsoZD1Wcs5Tl+W/AiEArj03tMyYoSa1I25zrqujXDQp5GnMXoI0MHAXINWc +EV0AdwBo9pj4H2SCvjqM7rkoHUz8cVFdZ5PURNEKZ6y7T0/7xAAAAVgYn8oaAAAE +AwBIMEYCIQDRlQQ8KC2R/bvOeWJr0FGedxbjE4OglejZEYKSCHekRQIhALbGyJPw +AagwlRnFD5iqE1ZzSTO6uadnKEazPJcW2sRnMA0GCSqGSIb3DQEBCwUAA4IBAQA6 +5KlsAxxtgfs05qV0ywTqM6qGzBkMIgJzJpCh9OR+X+STrfjphnLQlOwIuHxiF0oV +phsf9oYW6TYQimBIKoFpP94WbG2ojsr39YJ6kiDhudt3ef24QnZ3AtnXM5OLVv46 +iwZst4TwdwO3/Ialn7ql3sVX7+13yscEXfwfMT0JI1yzl+vZ8tR6bc5X9HqwjuAD +JelImPs/TxshDt3JRhbUuKcFxjaEcEtRqoGemgZgEpRnifUSBvnl01IVzb71DGWu +Bpx0qrpruMAUU1lOJrg/rwQMSXC2lSZDiDn1cjK0z+XLi7x86N/7jW6zKh5RjSgr +r6H7ZhiwtwpJzLsjT1CX +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFODCCBCCgAwIBAgIQUT+5dDhwtzRAQY0wkwaZ/zANBgkqhkiG9w0BAQsFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMTMxMDMxMDAwMDAwWhcNMjMxMDMwMjM1OTU5WjB+MQsw +CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV +BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVjIENs +YXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAstgFyhx0LbUXVjnFSlIJluhL2AzxaJ+aQihiw6UwU35VEYJb +A3oNL+F5BMm0lncZgQGUWfm893qZJ4Itt4PdWid/sgN6nFMl6UgfRk/InSn4vnlW +9vf92Tpo2otLgjNBEsPIPMzWlnqEIRoiBAMnF4scaGGTDw5RgDMdtLXO637QYqzu +s3sBdO9pNevK1T2p7peYyo2qRA4lmUoVlqTObQJUHypqJuIGOmNIrLRM0XWTUP8T +L9ba4cYY9Z/JJV3zADreJk20KQnNDz0jbxZKgRb78oMQw7jW2FUyPfG9D72MUpVK +Fpd6UiFjdS8W+cRmvvW1Cdj/JwDNRHxvSz+w9wIDAQABo4IBYzCCAV8wEgYDVR0T +AQH/BAgwBgEB/wIBADAwBgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vczEuc3ltY2Iu +Y29tL3BjYTMtZzUuY3JsMA4GA1UdDwEB/wQEAwIBBjAvBggrBgEFBQcBAQQjMCEw +HwYIKwYBBQUHMAGGE2h0dHA6Ly9zMi5zeW1jYi5jb20wawYDVR0gBGQwYjBgBgpg +hkgBhvhFAQc2MFIwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20v +Y3BzMCgGCCsGAQUFBwICMBwaGmh0dHA6Ly93d3cuc3ltYXV0aC5jb20vcnBhMCkG +A1UdEQQiMCCkHjAcMRowGAYDVQQDExFTeW1hbnRlY1BLSS0xLTUzNDAdBgNVHQ4E +FgQUX2DPYZBV34RDFIpgKrL1evRDGO8wHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnz +Qzn6Aq8zMTMwDQYJKoZIhvcNAQELBQADggEBAF6UVkndji1l9cE2UbYD49qecxny +H1mrWH5sJgUs+oHXXCMXIiw3k/eG7IXmsKP9H+IyqEVv4dn7ua/ScKAyQmW/hP4W +Ko8/xabWo5N9Q+l0IZE1KPRj6S7t9/Vcf0uatSDpCr3gRRAMFJSaXaXjS5HoJJtG +QGX0InLNmfiIEfXzf+YzguaoxX7+0AjiJVgIcWjmzaLmFN5OUiQt/eV5E1PnXi8t +TRttQBVSK/eHiXgSgW7ZTaoteNTCLD0IX4eRnh8OsN4wUmSGiaqdZpwOdgyA8nTY +Kvi4Os7X1g8RvmurFPW9QaAiY4nxug9vKWNmLT+sjHLF+8fk1A/yO0+MKcc= +-----END CERTIFICATE----- diff --git a/tests/ocsp-tests/certs/ocsp-akamai.com.der b/tests/ocsp-tests/certs/ocsp-akamai.com.der new file mode 100644 index 0000000000..0687207178 Binary files /dev/null and b/tests/ocsp-tests/certs/ocsp-akamai.com.der differ diff --git a/tests/ocsp-tests/certs/ocsp-amazon.com.der b/tests/ocsp-tests/certs/ocsp-amazon.com.der new file mode 100644 index 0000000000..71f8f8f84d Binary files /dev/null and b/tests/ocsp-tests/certs/ocsp-amazon.com.der differ diff --git a/tests/ocsp-tests/ocsp-load-chain b/tests/ocsp-tests/ocsp-load-chain new file mode 100755 index 0000000000..04de48f7ed --- /dev/null +++ b/tests/ocsp-tests/ocsp-load-chain @@ -0,0 +1,67 @@ +#!/bin/sh + +# Copyright (C) 2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +#set -e + +srcdir="${srcdir:-.}" +OCSPTOOL="${OCSPTOOL:-../src/ocsptool${EXEEXT}}" +DIFF="${DIFF:-diff}" + +if ! test -x "${OCSPTOOL}"; then + exit 77 +fi + +export TZ="UTC" + +. "${srcdir}/scripts/common.sh" + +check_for_datefudge + +datefudge -s "2017-06-19" \ + "${OCSPTOOL}" -e --load-chain "${srcdir}/ocsp-tests/certs/chain-amazon.com.pem" --infile "${srcdir}/ocsp-tests/certs/ocsp-amazon.com.der" --verify-allow-broken +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "Test 1 - Amazon OCSP response verification - failed" + exit ${rc} +fi + +datefudge -s "2017-06-19" \ + "${OCSPTOOL}" -e --load-chain "${srcdir}/ocsp-tests/certs/chain-amazon.com-unsorted.pem" --infile "${srcdir}/ocsp-tests/certs/ocsp-amazon.com.der" --verify-allow-broken +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "Test 2 - Amazon OCSP response verification - failed" + exit ${rc} +fi + +# verify an OCSP response using ECDSA +datefudge -s "2017-06-29" \ + "${OCSPTOOL}" -d 6 -e --load-chain "${srcdir}/ocsp-tests/certs/chain-akamai.com.pem" --infile "${srcdir}/ocsp-tests/certs/ocsp-akamai.com.der" +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "Test 3 - Akamai (ECDSA) OCSP response verification - failed" + exit ${rc} +fi + +exit 0 diff --git a/tests/ocsp-tests/ocsp-must-staple-connection b/tests/ocsp-tests/ocsp-must-staple-connection index 3caf25535b..490cc032f0 100755 --- a/tests/ocsp-tests/ocsp-must-staple-connection +++ b/tests/ocsp-tests/ocsp-must-staple-connection @@ -53,6 +53,8 @@ fi . "${srcdir}/scripts/common.sh" +check_for_datefudge + eval "${GETPORT}" # Port for gnutls-serv TLS_SERVER_PORT=$PORT @@ -72,14 +74,6 @@ if ! test -x "${OPENSSL}"; then exit 77 fi -# Check for datefudge -TSTAMP=`datefudge "2006-09-23" date -u +%s || true` -if test "$TSTAMP" != "1158969600"; then - echo $TSTAMP - echo "You need datefudge to run this test." - exit 77 -fi - CERTDATE="2016-04-28" TESTDATE="2016-04-29" EXP_OCSP_DATE="2016-03-27" @@ -101,6 +95,7 @@ echo "=== Generating good server certificate ===" rm -f "$TEMPLATE_FILE" cp "${srcdir}/ocsp-tests/certs/server_good.template" "$TEMPLATE_FILE" +chmod u+w "$TEMPLATE_FILE" echo "ocsp_uri=http://localhost:${OCSP_PORT}/ocsp/" >>"$TEMPLATE_FILE" echo "tls_feature = 5" >>"$TEMPLATE_FILE" @@ -203,7 +198,7 @@ launch_bare_server $$ \ --x509keyfile="${srcdir}/ocsp-tests/certs/server_good.key" \ --x509certfile="${SERVER_CERT_FILE}" \ --port="${TLS_SERVER_PORT}" \ - --ocsp-response="${OCSP_RESPONSE_FILE}" + --ocsp-response="${OCSP_RESPONSE_FILE}" --ignore-ocsp-response-errors TLS_SERVER_PID="${!}" wait_server $TLS_SERVER_PID @@ -238,7 +233,7 @@ launch_bare_server $$ \ --x509keyfile="${srcdir}/ocsp-tests/certs/server_good.key" \ --x509certfile="${SERVER_CERT_FILE}" \ --port="${TLS_SERVER_PORT}" \ - --ocsp-response="${OCSP_RESPONSE_FILE}" + --ocsp-response="${OCSP_RESPONSE_FILE}" --ignore-ocsp-response-errors TLS_SERVER_PID="${!}" wait_server $TLS_SERVER_PID @@ -274,7 +269,7 @@ launch_bare_server $$ \ --x509keyfile="${srcdir}/ocsp-tests/certs/server_good.key" \ --x509certfile="${SERVER_CERT_FILE}" \ --port="${TLS_SERVER_PORT}" \ - --ocsp-response="${OCSP_RESPONSE_FILE}" + --ocsp-response="${OCSP_RESPONSE_FILE}" --ignore-ocsp-response-errors TLS_SERVER_PID="${!}" wait_server $TLS_SERVER_PID @@ -301,7 +296,7 @@ echo "=== Test 5: Server with valid certificate - expired staple ===" rm -f "${OCSP_RESPONSE_FILE}" # Generate an OCSP response which expires in 2 days and use it after -# a month. +# a month. gnutls server doesn't send such a staple to clients. ${VALGRIND} ${OCSPTOOL} --generate-request --load-issuer "${srcdir}/ocsp-tests/certs/ocsp-server.pem" --load-cert "${SERVER_CERT_FILE}" --outfile "${OCSP_REQ_FILE}" datefudge -s ${EXP_OCSP_DATE} \ ${OPENSSL} ocsp -index "${INDEXFILE}" -rsigner "${srcdir}/ocsp-tests/certs/ocsp-server.pem" -rkey "${srcdir}/ocsp-tests/certs/ocsp-server.key" -CA "${srcdir}/ocsp-tests/certs/ca.pem" -reqin "${OCSP_REQ_FILE}" -respout "${OCSP_RESPONSE_FILE}" -ndays 2 @@ -310,12 +305,29 @@ eval "${GETPORT}" # Port for gnutls-serv TLS_SERVER_PORT=$PORT PORT=${TLS_SERVER_PORT} + +TIMEOUT=$(which timeout) +if test -n "$TIMEOUT";then +${TIMEOUT} 30 "${GNUTLS_SERV}" --echo --disable-client-cert \ + --x509keyfile="${srcdir}/ocsp-tests/certs/server_good.key" \ + --x509certfile="${SERVER_CERT_FILE}" \ + --port="${TLS_SERVER_PORT}" \ + --ocsp-response="${OCSP_RESPONSE_FILE}" +if test $? != 1;then + echo "Running gnutls-serv with an expired response, succeeds!" + exit ${rc} +fi +fi + +echo "=== Test 5.1: Server with valid certificate - expired staple (ignoring errors) ===" + launch_bare_server $$ \ datefudge "${TESTDATE}" \ "${GNUTLS_SERV}" --echo --disable-client-cert \ --x509keyfile="${srcdir}/ocsp-tests/certs/server_good.key" \ --x509certfile="${SERVER_CERT_FILE}" \ --port="${TLS_SERVER_PORT}" \ + --ignore-ocsp-response-errors \ --ocsp-response="${OCSP_RESPONSE_FILE}" TLS_SERVER_PID="${!}" wait_server $TLS_SERVER_PID @@ -359,7 +371,7 @@ launch_bare_server $$ \ --x509keyfile="${srcdir}/ocsp-tests/certs/server_good.key" \ --x509certfile="${SERVER_CERT_FILE}" \ --port="${TLS_SERVER_PORT}" \ - --ocsp-response="${OCSP_RESPONSE_FILE}" + --ocsp-response="${OCSP_RESPONSE_FILE}" --ignore-ocsp-response-errors TLS_SERVER_PID="${!}" wait_server $TLS_SERVER_PID diff --git a/tests/ocsp-tests/ocsp-test b/tests/ocsp-tests/ocsp-test index f481e13131..3730175208 100755 --- a/tests/ocsp-tests/ocsp-test +++ b/tests/ocsp-tests/ocsp-test @@ -30,13 +30,9 @@ fi export TZ="UTC" -# Check for datefudge -TSTAMP=`datefudge "2006-09-23" date -u +%s || true` -if test "$TSTAMP" != "1158969600"; then - echo $TSTAMP - echo "You need datefudge to run this test" - exit 77 -fi +. "${srcdir}/scripts/common.sh" + +check_for_datefudge # Note that in rare cases this test may fail because the # time set using datefudge could have changed since the generation diff --git a/tests/ocsp-tests/ocsp-tls-connection b/tests/ocsp-tests/ocsp-tls-connection index aa3bf49e1e..bcc77ec2d9 100755 --- a/tests/ocsp-tests/ocsp-tls-connection +++ b/tests/ocsp-tests/ocsp-tls-connection @@ -54,6 +54,8 @@ export TZ="UTC" . "${srcdir}/scripts/common.sh" +check_for_datefudge + eval "${GETPORT}" # Port for gnutls-serv TLS_SERVER_PORT=$PORT @@ -73,14 +75,6 @@ if ! test -x "${OPENSSL}"; then exit 77 fi -# Check for datefudge -TSTAMP=`datefudge "2006-09-23" date -u +%s || true` -if test "$TSTAMP" != "1158969600"; then - echo $TSTAMP - echo "You need datefudge to run this test." - exit 77 -fi - CERTDATE="2016-04-28" TESTDATE="2016-04-29" @@ -99,6 +93,7 @@ echo "=== Generating good server certificate ===" rm -f "$TEMPLATE_FILE" cp "${srcdir}/ocsp-tests/certs/server_good.template" "$TEMPLATE_FILE" +chmod u+w "$TEMPLATE_FILE" echo "ocsp_uri=http://localhost:${OCSP_PORT}/ocsp/" >>"$TEMPLATE_FILE" # Generate certificates with the random port diff --git a/tests/ocsp-tests/ocsptool b/tests/ocsp-tests/ocsptool new file mode 100755 index 0000000000..6677f80588 --- /dev/null +++ b/tests/ocsp-tests/ocsptool @@ -0,0 +1,89 @@ +#!/bin/sh + +# Copyright (C) 2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +#set -e + +# Sanity check program for various ocsptool options + +srcdir="${srcdir:-.}" +OCSPTOOL="${OCSPTOOL:-../src/ocsptool${EXEEXT}}" +DIFF="${DIFF:-diff}" +CMP="${CMP:-cmp}" +TMPFILE=ocsp.$$.tmp + +if ! test -x "${OCSPTOOL}"; then + exit 77 +fi + +export TZ="UTC" + +"${OCSPTOOL}" -j --infile "${srcdir}/ocsp-tests/response1.pem" --outfile "${TMPFILE}" +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "Test 1 - PEM loading failed" + exit ${rc} +fi + +${CMP} "${srcdir}/ocsp-tests/response1.der" "${TMPFILE}" >/dev/null 2>&1 +rc=$? +if test "${rc}" != "0"; then + echo "Test 1 - Comparison of DER file failed" + exit ${rc} +fi + +"${OCSPTOOL}" -j --outpem --infile "${srcdir}/ocsp-tests/response1.pem" --outfile "${TMPFILE}" +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "Test 2 - PEM loading failed" + exit ${rc} +fi + +${DIFF} -B "${srcdir}/ocsp-tests/response1.pem" "${TMPFILE}" >/dev/null 2>&1 +rc=$? +if test "${rc}" != "0"; then + echo "Test 2 - Comparison of PEM file failed $TMPFILE" + exit ${rc} +fi + + +"${OCSPTOOL}" -j --infile "${srcdir}/ocsp-tests/response1.der" +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "Test 3 - Transparent (backwards compatible) DER loading failed" + exit ${rc} +fi + +"${OCSPTOOL}" -j --inder --infile "${srcdir}/ocsp-tests/response1.der" +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "Test 4 - DER loading failed" + exit ${rc} +fi + +rm -f "${TMPFILE}" + +exit 0 diff --git a/tests/ocsp-tests/response1.pem b/tests/ocsp-tests/response1.pem new file mode 100644 index 0000000000..66adfe30e7 --- /dev/null +++ b/tests/ocsp-tests/response1.pem @@ -0,0 +1,45 @@ +OCSP Response Information: + Response Status: Successful + Response Type: Basic OCSP Response + Version: 1 + Responder ID: CN=Testing Authority + Produced At: Wed Mar 23 21:55:28 UTC 2016 + Responses: + Certificate ID: + Hash Algorithm: SHA1 + Issuer Name Hash: bac68790352ceb4c4de1534445348f8b4b5309b3 + Issuer Key Hash: e865fcb9123c7285fc28c803149f06ad94dfd934 + Serial Number: 56f304a1326dc9b2d51b31b3 + Certificate Status: unknown + This Update: Wed Mar 23 21:55:28 UTC 2016 + Extensions: + Signature Algorithm: RSA-SHA256 + +-----BEGIN OCSP RESPONSE----- +MIIEwAoBAKCCBLkwggS1BgkrBgEFBQcwAQEEggSmMIIEojCBj6EeMBwxGjAYBgNV +BAMTEVRlc3RpbmcgQXV0aG9yaXR5GA8yMDE2MDMyMzIxNTUyOFowXDBaMEUwCQYF +Kw4DAhoFAAQUusaHkDUs60xN4VNERTSPi0tTCbMEFOhl/LkSPHKF/CjIAxSfBq2U +39k0AgxW8wShMm3JstUbMbOCABgPMjAxNjAzMjMyMTU1MjhaMA0GCSqGSIb3DQEB +CwUAA4IBAQBKkt+j9Rd5Pjq67WsiWIc9rVjxA0vdiZahZUAYlCCauKpLN+FxSsda +uCUzYmotc4Jq4Erbmpl0pfvR5Y3nFArCQuKiLayOKk5NevUgnVMLbcaojrtwfPl/ +puf8zPFGOo+Ue2SQH+H8YX3wmQqeMEIblF2GonPVWm8pY+Gjx9ElBjUMCqAoCtig +CWcS9BbOm1BON0IEOsCb9gJ+VtRrLxpaOzLsc0lZGip74IuqHEyb6foA/bME8Ydy +T8v28oA9pfMdW0xoB/drpeq+lJfO3Hiu7QmHC56zRNyWNv3ovU9R87cEGEM2QD7o +/23eXMmoFODYx7Y5B6UOmiD34ufq7UaRoIIC+DCCAvQwggLwMIIB2KADAgECAghW +8wrgLlKayzANBgkqhkiG9w0BAQsFADAcMRowGAYDVQQDExFUZXN0aW5nIEF1dGhv +cml0eTAiGA8yMDE2MDMyMzIxMzAxNVoYDzk5OTkxMjMxMjM1OTU5WjAcMRowGAYD +VQQDExFUZXN0aW5nIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAKBV6T5EMSijMfx/e9MkasHxLi5VDv4gYb5Y/nuxilR1CpCRg6Twnqpu +/tmkj9XU23ewZuIxjb+ePdOH7AmiFZKYxZpo6+x1h6GCBqBpjniWN1ygt/mLs6jA +pJAlGOfgrjgFWzg8hwsgnN6T5gn3nFS7CLhFkJRav6DvgGcfRnSGQv9O/eGZDUAI +UGPou0lRpiON77UzDRmvENke6+60LBygJZD470YiQHbU6WZERQHEq1JCbh3iXB1S +uCRqe3R075I/u/+zOkDygDmVCPQYqoHJ+3AnfXpjsnTTjoMuqYXe0QVyCgzAeFga +tyXUuxSvPq8rVTVYvb6+AOXBVTDidp0CAwEAAaMyMDAwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQULdgUmhbVbf77sODe8fXFIwvTYr4wDQYJKoZIhvcNAQELBQAD +ggEBAGGF8as/0Ew1prrQKOKSbVB3nrILF7D9fOxKIEUEOprtYGgjvvfkqG7xDQRP +SvIiVy3X0wZQpzytCgvkjXeQ8QsIIMnrYpjy6iRCRkDlti3iUqx6zo7B7iYaEIdK +Ky6uCn5z/RPti5WJIeqvg3WqTNeOXjWIK3ac6cROqUcUlLxy1AukNRYuvpVszQu9 +FDs9ecdA5aOvBvb0WlVjbEU37EVuoveayBpgP0c2I7xu2zAkobNdn7JYNOGJx4x9 +8WMlcCP0ZU7O0wwk9y/U/FxARqfFIzDC2JanTi2LxyHdQw8iWAvaBksb7vLdMnn2 +9prXtfKhcCXLVECxSJuI1swHETA= +-----END OCSP RESPONSE----- diff --git a/tests/ocsp-tests/response2.pem b/tests/ocsp-tests/response2.pem new file mode 100644 index 0000000000..1ca75c39a9 --- /dev/null +++ b/tests/ocsp-tests/response2.pem @@ -0,0 +1,47 @@ +OCSP Response Information: + Response Status: Successful + Response Type: Basic OCSP Response + Version: 1 + Responder ID: CN=Testing Authority OCSP Responder + Produced At: Wed Mar 23 22:31:19 UTC 2016 + Responses: + Certificate ID: + Hash Algorithm: SHA1 + Issuer Name Hash: bac68790352ceb4c4de1534445348f8b4b5309b3 + Issuer Key Hash: e865fcb9123c7285fc28c803149f06ad94dfd934 + Serial Number: 56f318d612de99176ccaa1e0 + Certificate Status: unknown + This Update: Wed Mar 23 22:31:19 UTC 2016 + Extensions: + Signature Algorithm: RSA-SHA256 + +-----BEGIN OCSP RESPONSE----- +MIIFIgoBAKCCBRswggUXBgkrBgEFBQcwAQEEggUIMIIFBDCBnqEtMCsxKTAnBgNV +BAMTIFRlc3RpbmcgQXV0aG9yaXR5IE9DU1AgUmVzcG9uZGVyGA8yMDE2MDMyMzIy +MzExOVowXDBaMEUwCQYFKw4DAhoFAAQUusaHkDUs60xN4VNERTSPi0tTCbMEFOhl +/LkSPHKF/CjIAxSfBq2U39k0AgxW8xjWEt6ZF2zKoeCCABgPMjAxNjAzMjMyMjMx +MTlaMA0GCSqGSIb3DQEBCwUAA4IBAQAuMHdyI3qMEyU4v60vCsLQqZkbA7x7lh4X +detCl+Woe0WJoDUKZV8C78Ns9fhMY03tZLH2xGKtS8+C9r7Chi7r5SQUA9XyVaH1 +0L+McNed42kHtxvqNXNjZJHAZtY6NJ7IhocF97tPT/MZT+aCwNVh3DXCAo17b9bO +eKtwM4OwGJhtm4THGS2iyKlytll2yQM52bX/cp1yDensz8zcV1GxCwD2yGEI/iD3 +L/g/IzeY9B3RKZ1uZ21K8VU9aSBygpcbV7Ii9yb+zx21sL2PJCYTHUCsSyzJcWId +csrp8G2fdZfYEI6fJ/1GLUbSfVkbFWmEuvxNdN64vrYF3Vj2EU8qoIIDSzCCA0cw +ggNDMIICK6ADAgECAgxW8xjWEt6ZF2zKoeAwDQYJKoZIhvcNAQELBQAwHDEaMBgG +A1UEAxMRVGVzdGluZyBBdXRob3JpdHkwHhcNMTYwMzIzMjIyOTQyWhcNMTcwMzIz +MjIyOTQyWjArMSkwJwYDVQQDEyBUZXN0aW5nIEF1dGhvcml0eSBPQ1NQIFJlc3Bv +bmRlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANMCZAoNYiVu4fTs +bfCE3EU4bl7rJCuMqZKBEVHZ40TPbVw/0bISFns+7rK5lazTYvvSuTJ1dCZHmnwW +r9/Jk54XLrieZyVh9fPP6wged3H+rC8jeBAYqgzjLjp59RF2FjcPtj6btfsHLbHv +CNjGeOhdl6Twx0/MMYAEvrXa2RlAc/1bFD6TbSBOzHrNgpQGDEU/zjOvsSJVLfde +gzgdv3NaYcJz1B3CbWZfHbkOnqg5H3uhBL9Jr6kEz6GB/xuBSBZ3UZco5rVzxFYC +wkf8WaRNOQox0NNwGTogKzP6l/mMFl7arYbGrwaH+OyTnhjQoMGRzqsJiexHPU5a +ZBhz1JUCAwEAAaN2MHQwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcD +CTAPBgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQWBBTnPqFwFQGo2vJwQ+9MyIcaw5h0 +PTAfBgNVHSMEGDAWgBQt2BSaFtVt/vuw4N7x9cUjC9NivjANBgkqhkiG9w0BAQsF +AAOCAQEAeqbE90S1ckBwtme9/ITGGWRLhAfGP13Dw5ZiZrUccDISI3EuW9eByeBi +ylNU0cceISuW45rdN0OQGWB1N1DXhpEmoQhP4QNeitTwy+9Pu6O8Nb+GbYgMNutt +3gLJ3WDqxAmm6KUFS+bhFX8umSQCFGF3h0SGeAeyhXSrUVsDsjGI9I1KLFWOkGi7 +YSE49AWnicXEVC+cQUrWDOW2Pbb6mWt6S6Jm0xLs5+GD5lodvZAHRuG+pszIvqNv +T+zFBnLLWqMgPngbqeuvuP4/M35IeqjV19aG5hscFAwl2n4Aaa6wYWHAZ6bU+Y7k +Bp0+NzqVez2ZL//+3HKKF4sYkmh1Bg== +-----END OCSP RESPONSE----- diff --git a/tests/ocsp.c b/tests/ocsp.c index aea1139b8e..0f1a1b8cff 100644 --- a/tests/ocsp.c +++ b/tests/ocsp.c @@ -110,7 +110,6 @@ static const gnutls_datum_t resp1 = " Extensions:\n" \ " Nonce: 16897d913ab525a445fec9fdc2e508a4\n" \ " Signature Algorithm: RSA-SHA1\n" \ - "warning: signed using a broken signature algorithm that can be forged.\n" \ " Signature:\n" \ " 4e:ad:6b:2b:f7:f2:bf:a9:23:1e:3a:0b:06:db:55:53\n" \ " 2b:64:54:11:32:bf:60:f7:4f:e0:8e:9b:a0:a2:4c:79\n" \ @@ -152,7 +151,6 @@ static const gnutls_datum_t resp2 = " Next Update: Thu Sep 11 06:04:00 UTC 2014\n" \ " Extensions:\n" \ " Signature Algorithm: RSA-SHA1\n" \ -"warning: signed using a broken signature algorithm that can be forged.\n" \ " Signature:\n" \ " 6e:5e:5e:81:ff:3f:4d:c7:53:c7:1b:f3:d3:1d:dc:9a\n" \ " c7:ce:77:2c:67:56:13:98:91:02:01:76:dc:48:b2:1f\n" \ @@ -1451,7 +1449,7 @@ static void resp_verify(void) /* check direct verify with signer (should succeed) */ - ret = gnutls_ocsp_resp_verify_direct(resp, signer, &verify, GNUTLS_VERIFY_ALLOW_BROKEN); + ret = gnutls_ocsp_resp_verify_direct(resp, signer, &verify, 0); if (ret < 0) { fail("gnutls_ocsp_resp_verify_direct (signer) %d\n", ret); exit(1); @@ -1516,7 +1514,7 @@ static void resp_verify(void) exit(1); } - ret = gnutls_ocsp_resp_verify(resp, list, &verify, GNUTLS_VERIFY_ALLOW_BROKEN); + ret = gnutls_ocsp_resp_verify(resp, list, &verify, 0); if (ret < 0) { fail("gnutls_ocsp_resp_verify (issuer) %d\n", ret); exit(1); @@ -1582,7 +1580,7 @@ static void resp_verify(void) exit(1); } - ret = gnutls_ocsp_resp_verify(resp, list, &verify, GNUTLS_VERIFY_ALLOW_BROKEN); + ret = gnutls_ocsp_resp_verify(resp, list, &verify, 0); if (ret < 0) { fail("gnutls_ocsp_resp_verify (issuer) %d\n", ret); exit(1); @@ -1642,7 +1640,7 @@ static void long_resp_check(void) /* check direct verify with signer (should succeed) */ - ret = gnutls_ocsp_resp_verify_direct(resp, signer, &verify, GNUTLS_VERIFY_ALLOW_BROKEN); + ret = gnutls_ocsp_resp_verify_direct(resp, signer, &verify, 0); if (ret < 0) { fail("gnutls_ocsp_resp_verify_direct (signer) %d\n", ret); exit(1); diff --git a/tests/oids.c b/tests/oids.c index 2afc0a6379..ed65b057a2 100644 --- a/tests/oids.c +++ b/tests/oids.c @@ -58,16 +58,54 @@ void doit(void) SELF_TEST_SIG(GNUTLS_SIGN_RSA_SHA1); SELF_TEST_SIG(GNUTLS_SIGN_RSA_SHA256); + /* RSA-PSS uses a single OID which is independent + * of the signature parameters, such as the digest. + * As such we cannot test all variants. + */ + SELF_TEST_SIG(GNUTLS_SIGN_RSA_PSS_SHA256); + SELF_TEST_SIG(GNUTLS_SIGN_ECDSA_SHA1); SELF_TEST_SIG(GNUTLS_SIGN_ECDSA_SHA256); SELF_TEST_SIG(GNUTLS_SIGN_ECDSA_SHA512); + SELF_TEST_SIG(GNUTLS_SIGN_EDDSA_ED25519); + + if (!gnutls_fips140_mode_enabled()) { +#ifdef ENABLE_GOST + SELF_TEST_SIG(GNUTLS_SIGN_GOST_94); + SELF_TEST_SIG(GNUTLS_SIGN_GOST_256); + SELF_TEST_SIG(GNUTLS_SIGN_GOST_512); +#endif + } + SELF_TEST_PK(GNUTLS_PK_RSA); SELF_TEST_PK(GNUTLS_PK_DSA); SELF_TEST_PK(GNUTLS_PK_EC); + SELF_TEST_PK(GNUTLS_PK_RSA_PSS); + SELF_TEST_PK(GNUTLS_PK_EDDSA_ED25519); + + if (!gnutls_fips140_mode_enabled()) { +#ifdef ENABLE_GOST + SELF_TEST_PK(GNUTLS_PK_GOST_01); + SELF_TEST_PK(GNUTLS_PK_GOST_12_256); + SELF_TEST_PK(GNUTLS_PK_GOST_12_512); +#endif + } SELF_TEST_DIG(GNUTLS_DIG_MD5); SELF_TEST_DIG(GNUTLS_DIG_SHA1); SELF_TEST_DIG(GNUTLS_DIG_SHA256); SELF_TEST_DIG(GNUTLS_DIG_SHA512); + SELF_TEST_DIG(GNUTLS_DIG_SHA3_224); + SELF_TEST_DIG(GNUTLS_DIG_SHA3_256); + SELF_TEST_DIG(GNUTLS_DIG_SHA3_384); + SELF_TEST_DIG(GNUTLS_DIG_SHA3_512); + + if (!gnutls_fips140_mode_enabled()) { +#ifdef ENABLE_GOST + SELF_TEST_DIG(GNUTLS_DIG_GOSTR_94); + SELF_TEST_DIG(GNUTLS_DIG_STREEBOG_256); + SELF_TEST_DIG(GNUTLS_DIG_STREEBOG_512); +#endif + } } diff --git a/tests/openconnect-dtls12.c b/tests/openconnect-dtls12.c new file mode 100644 index 0000000000..21d1b2a1fb --- /dev/null +++ b/tests/openconnect-dtls12.c @@ -0,0 +1,320 @@ +/* + * Copyright (C) 2019 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +/* A DTLS client handling DTLS 1.2 resumption under AnyConnect protocol which sets premaster secret. + */ + +#define MAX_BUF 1024 + +static ssize_t +push(gnutls_transport_ptr_t tr, const void *data, size_t len) +{ + int fd = (long int) tr; + + return send(fd, data, len, 0); +} + +static gnutls_datum_t master = + { (void*)"\x44\x66\x44\xa9\xb6\x29\xed\x6e\xd6\x93\x15\xdb\xf0\x7d\x4b\x2e\x18\xb1\x9d\xed\xff\x6a\x86\x76\xc9\x0e\x16\xab\xc2\x10\xbb\x17\x99\x24\xb1\xd9\xb9\x95\xe7\xea\xea\xea\xea\xea\xff\xaa\xac", 48}; +static gnutls_datum_t sess_id = + { (void*)"\xd9\xb9\x95\xe7\xea", 5}; + +static void client(int fd, const char *prio, int proto, int cipher, int kx, int mac, const char *exp_desc) +{ + int ret; + char buffer[MAX_BUF + 1]; + char *desc; + gnutls_certificate_credentials_t xcred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&xcred); + + gnutls_init(&session, GNUTLS_CLIENT | GNUTLS_DATAGRAM); + gnutls_dtls_set_mtu(session, 1500); + gnutls_handshake_set_timeout(session, 20 * 1000); + + assert(gnutls_priority_set_direct(session, + prio, + NULL) >= 0); + + ret = gnutls_session_set_premaster(session, GNUTLS_CLIENT, + proto, kx, cipher, mac, + GNUTLS_COMP_NULL, &master, &sess_id); + if (ret < 0) { + fail("client: gnutls_session_set_premaster failed: %s\n", gnutls_strerror(ret)); + exit(1); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + + gnutls_transport_set_int(session, fd); + gnutls_transport_set_push_function(session, push); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + desc = gnutls_session_get_desc(session); + if (desc == NULL) + fail("client: gnutls_session_get_desc: NULL\n"); + + if (strcmp(desc, exp_desc) != 0) + fail("client: gnutls_session_get_desc: found null str: %s\n", desc); + + success(" - connected with: %s\n", desc); + gnutls_free(desc); + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + do { + ret = gnutls_record_recv(session, buffer, sizeof(buffer)-1); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + goto end; + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + exit(1); + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(xcred); + + gnutls_global_deinit(); +} + + +static void server(int fd, const char *prio, int proto, int cipher, int kx, int mac) +{ + int ret; + gnutls_certificate_credentials_t xcred; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + + /* this must be called once in the program + */ + global_init(); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&xcred); + + gnutls_init(&session, GNUTLS_SERVER | GNUTLS_DATAGRAM); + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_dtls_set_mtu(session, 1500); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + assert(gnutls_priority_set_direct(session, + prio, + NULL) >= 0); + + ret = gnutls_session_set_premaster(session, GNUTLS_SERVER, + proto, kx, cipher, mac, + GNUTLS_COMP_NULL, &master, &sess_id); + if (ret < 0) { + fail("server: gnutls_session_set_premaster failed: %s\n", gnutls_strerror(ret)); + exit(1); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); + + gnutls_transport_set_int(session, fd); + gnutls_transport_set_push_function(session, push); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + } + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + /* see the Getting peer's information example */ + /* print_info(session); */ + + memset(buffer, 1, sizeof(buffer)); + do { + ret = gnutls_record_send(session, buffer, sizeof(buffer)-1); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server: data sending has failed (%s)\n\n", + gnutls_strerror(ret)); + } + + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(xcred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void run(const char *name, const char *prio, int proto, int cipher, int kx, int mac, const char *exp_desc) +{ + int fd[2]; + int ret; + pid_t child; + + success("Testing %s\n", name); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + int status; + /* parent */ + + close(fd[1]); + server(fd[0], prio, proto, cipher, kx, mac); + wait(&status); + check_wait_status(status); + close(fd[0]); + } else { + close(fd[0]); + client(fd[1], prio, proto, cipher, kx, mac, exp_desc); + close(fd[1]); + exit(0); + } +} + +void doit(void) +{ + signal(SIGPIPE, SIG_IGN); + + run("dtls1.2-aes128-ecdhe", "NONE:+VERS-DTLS1.2:+COMP-NULL:+AES-128-GCM:+AEAD:+ECDHE-RSA:+SIGN-ALL:%COMPAT", + GNUTLS_DTLS1_2, GNUTLS_CIPHER_AES_128_GCM, GNUTLS_KX_ECDHE_RSA, GNUTLS_MAC_AEAD, "(DTLS1.2)-(ECDHE-RSA)-(AES-128-GCM)"); + run("dtls1.2-aes256-ecdhe", "NONE:+VERS-DTLS1.2:+COMP-NULL:+AES-256-GCM:+AEAD:+ECDHE-RSA:+SIGN-ALL:%COMPAT", + GNUTLS_DTLS1_2, GNUTLS_CIPHER_AES_256_GCM, GNUTLS_KX_ECDHE_RSA, GNUTLS_MAC_AEAD, "(DTLS1.2)-(ECDHE-RSA)-(AES-256-GCM)"); + run("dtls1.2-aes128-rsa", "NONE:+VERS-DTLS1.2:+COMP-NULL:+AES-128-GCM:+AEAD:+RSA:+SIGN-ALL:%COMPAT", + GNUTLS_DTLS1_2, GNUTLS_CIPHER_AES_128_GCM, GNUTLS_KX_RSA, GNUTLS_MAC_AEAD, "(DTLS1.2)-(RSA)-(AES-128-GCM)"); + run("dtls1.2-aes256-rsa", "NONE:+VERS-DTLS1.2:+COMP-NULL:+AES-256-GCM:+AEAD:+RSA:+SIGN-ALL:%COMPAT", + GNUTLS_DTLS1_2, GNUTLS_CIPHER_AES_256_GCM, GNUTLS_KX_RSA, GNUTLS_MAC_AEAD, "(DTLS1.2)-(RSA)-(AES-256-GCM)"); +} + +#endif /* _WIN32 */ diff --git a/tests/openpgp-auth.c b/tests/openpgp-auth.c deleted file mode 100644 index 86cf910363..0000000000 --- a/tests/openpgp-auth.c +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright (C) 2010-2012 Free Software Foundation, Inc. - * Author: Ludovic Courts - * - * This file is part of GNUTLS. - * - * GNUTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GNUTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNUTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "utils.h" - -#include -#include -#if !defined(_WIN32) -# include -# include -#include -#endif -#include -#include -#include -#if !defined(_WIN32) -static const char message[] = "Hello, brave GNU world!"; - -/* The OpenPGP key pair for use and the key ID in those keys. */ -static const char pub_key_file[] = "../guile/tests/openpgp-pub.asc"; -static const char priv_key_file[] = "../guile/tests/openpgp-sec.asc"; -static const char *key_id = NULL; -static gnutls_datum_t stored_cli_cert = { NULL, 0 }; - -static void log_message(int level, const char *msg) -{ - fprintf(stderr, "[%5d|%2d] %s", getpid(), level, msg); -} - -static -int key_recv_func(gnutls_session_t session, const unsigned char *keyfpr, - unsigned int keyfpr_length, gnutls_datum_t * key) -{ - key->data = gnutls_malloc(stored_cli_cert.size); - memcpy(key->data, stored_cli_cert.data, stored_cli_cert.size); - key->size = stored_cli_cert.size; - - return 0; -} - -static -void check_loaded_key(gnutls_certificate_credentials_t cred) -{ - int err; - gnutls_openpgp_privkey_t key; - gnutls_openpgp_crt_t *crts; - unsigned n_crts; - gnutls_openpgp_keyid_t keyid; - unsigned i; - - /* check that the getter functions for openpgp keys of - * gnutls_certificate_credentials_t work and deliver the - * expected key ID. */ - - err = gnutls_certificate_get_openpgp_key(cred, 0, &key); - if (err != 0) - fail("get openpgp key %s\n", - gnutls_strerror(err)); - - gnutls_openpgp_privkey_get_subkey_id(key, 0, keyid); - if (keyid[0] != 0xf3 || keyid[1] != 0x0f || keyid[2] != 0xd4 || keyid[3] != 0x23 || - keyid[4] != 0xc1 || keyid[5] != 0x43 || keyid[6] != 0xe7 || keyid[7] != 0xba) - fail("incorrect key id (privkey)\n"); - - err = gnutls_certificate_get_openpgp_crt(cred, 0, &crts, &n_crts); - if (err != 0) - fail("get openpgp crts %s\n", - gnutls_strerror(err)); - - if (n_crts != 1) - fail("openpgp n_crts != 1\n"); - - gnutls_openpgp_crt_get_subkey_id(crts[0], 0, keyid); - if (keyid[0] != 0xf3 || keyid[1] != 0x0f || keyid[2] != 0xd4 || keyid[3] != 0x23 || - keyid[4] != 0xc1 || keyid[5] != 0x43 || keyid[6] != 0xe7 || keyid[7] != 0xba) - fail("incorrect key id (pubkey)\n"); - - for (i = 0; i < n_crts; ++i) - gnutls_openpgp_crt_deinit(crts[i]); - gnutls_free(crts); - gnutls_openpgp_privkey_deinit(key); -} - -void doit(void) -{ - int err, i; - int sockets[2]; - const char *srcdir; - pid_t child; - char pub_key_path[512], priv_key_path[512]; - - global_init(); - - srcdir = getenv("srcdir") ? getenv("srcdir") : "."; - - for (i = 0; i < 5; i++) { - if (i <= 1) - key_id = NULL; /* try using the master key */ - else if (i == 2) - key_id = "auto"; /* test auto */ - else if (i >= 3) - key_id = "f30fd423c143e7ba"; - - if (debug) { - gnutls_global_set_log_level(5); - gnutls_global_set_log_function(log_message); - } - - err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); - if (err != 0) - fail("socketpair %s\n", strerror(errno)); - - if (sizeof(pub_key_path) < - strlen(srcdir) + strlen(pub_key_file) + 2) - abort(); - - strcpy(pub_key_path, srcdir); - strcat(pub_key_path, "/"); - strcat(pub_key_path, pub_key_file); - - if (sizeof(priv_key_path) < - strlen(srcdir) + strlen(priv_key_file) + 2) - abort(); - - strcpy(priv_key_path, srcdir); - strcat(priv_key_path, "/"); - strcat(priv_key_path, priv_key_file); - - child = fork(); - if (child == -1) - fail("fork %s\n", strerror(errno)); - - if (child == 0) { - /* Child process (client). */ - gnutls_session_t session; - gnutls_certificate_credentials_t cred; - ssize_t sent; - - if (debug) - printf("client process %i\n", getpid()); - - err = gnutls_init(&session, GNUTLS_CLIENT); - if (err != 0) - fail("client session %d\n", err); - - if (i == 0) /* we use the primary key which is RSA. Test the RSA ciphersuite */ - gnutls_priority_set_direct(session, - "NONE:+VERS-TLS1.0:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+RSA:+CTYPE-OPENPGP", - NULL); - else - gnutls_priority_set_direct(session, - "NONE:+VERS-TLS1.0:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+DHE-DSS:+DHE-RSA:+CTYPE-OPENPGP", - NULL); - gnutls_transport_set_int(session, sockets[0]); - - err = - gnutls_certificate_allocate_credentials(&cred); - if (err != 0) - fail("client credentials %d\n", err); - - err = - gnutls_certificate_set_openpgp_key_file2(cred, - pub_key_path, - priv_key_path, - key_id, - GNUTLS_OPENPGP_FMT_BASE64); - if (err != 0) - fail("client openpgp keys %s\n", - gnutls_strerror(err)); - - check_loaded_key(cred); - - err = - gnutls_credentials_set(session, - GNUTLS_CRD_CERTIFICATE, - cred); - if (err != 0) - fail("client credential_set %d\n", err); - - gnutls_dh_set_prime_bits(session, 1024); - - if (i == 4) - gnutls_openpgp_send_cert(session, - GNUTLS_OPENPGP_CERT_FINGERPRINT); - - err = gnutls_handshake(session); - if (err != 0) - fail("client handshake %s (%d) \n", - gnutls_strerror(err), err); - else if (debug) - printf("client handshake successful\n"); - - sent = - gnutls_record_send(session, message, - sizeof(message)); - if (sent != sizeof(message)) - fail("client sent %li vs. %li\n", - (long) sent, (long) sizeof(message)); - - err = gnutls_bye(session, GNUTLS_SHUT_RDWR); - if (err != 0) - fail("client bye %d\n", err); - - if (debug) - printf("client done\n"); - - gnutls_deinit(session); - gnutls_certificate_free_credentials(cred); - gnutls_free(stored_cli_cert.data); - gnutls_global_deinit(); - return; - } else { - /* Parent process (server). */ - gnutls_session_t session; - gnutls_dh_params_t dh_params; - gnutls_certificate_credentials_t cred; - char greetings[sizeof(message) * 2]; - ssize_t received; - pid_t done; - int status; - const gnutls_datum_t p3 = - { (void *) pkcs3, strlen(pkcs3) }; - - if (debug) - printf("server process %i (child %i)\n", - getpid(), child); - - err = gnutls_init(&session, GNUTLS_SERVER); - if (err != 0) - fail("server session %d\n", err); - - gnutls_priority_set_direct(session, - "NONE:+VERS-TLS1.0:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+DHE-DSS:+DHE-RSA:+RSA:+CTYPE-OPENPGP", - NULL); - gnutls_transport_set_int(session, sockets[1]); - - err = - gnutls_certificate_allocate_credentials(&cred); - if (err != 0) - fail("server credentials %d\n", err); - - err = - gnutls_certificate_set_openpgp_key_file2(cred, - pub_key_path, - priv_key_path, - key_id, - GNUTLS_OPENPGP_FMT_BASE64); - if (err != 0) - fail("server openpgp keys %s\n", - gnutls_strerror(err)); - - check_loaded_key(cred); - - err = gnutls_dh_params_init(&dh_params); - if (err) - fail("server DH params init %d\n", err); - - err = - gnutls_dh_params_import_pkcs3(dh_params, &p3, - GNUTLS_X509_FMT_PEM); - if (err) - fail("server DH params generate %d\n", - err); - - gnutls_certificate_set_dh_params(cred, dh_params); - - err = - gnutls_credentials_set(session, - GNUTLS_CRD_CERTIFICATE, - cred); - if (err != 0) - fail("server credential_set %d\n", err); - - gnutls_certificate_server_set_request(session, - GNUTLS_CERT_REQUIRE); - - if (i == 4) - gnutls_openpgp_set_recv_key_function - (session, key_recv_func); - - err = gnutls_handshake(session); - if (err != 0) - fail("server handshake %s (%d) \n", - gnutls_strerror(err), err); - - if (stored_cli_cert.data == NULL) { - const gnutls_datum_t *d; - unsigned int d_size; - d = gnutls_certificate_get_peers(session, - &d_size); - if (d != NULL) { - stored_cli_cert.data = - gnutls_malloc(d[0].size); - memcpy(stored_cli_cert.data, - d[0].data, d[0].size); - stored_cli_cert.size = d[0].size; - } - } - - received = - gnutls_record_recv(session, greetings, - sizeof(greetings)); - if (received != sizeof(message) - || memcmp(greetings, message, sizeof(message))) - fail("server received %li vs. %li\n", - (long) received, - (long) sizeof(message)); - - err = gnutls_bye(session, GNUTLS_SHUT_RDWR); - if (err != 0) - fail("server bye %s (%d) \n", - gnutls_strerror(err), err); - - if (debug) - printf("server done\n"); - - gnutls_deinit(session); - gnutls_certificate_free_credentials(cred); - gnutls_dh_params_deinit(dh_params); - - done = wait(&status); - if (done < 0) - fail("wait %s\n", strerror(errno)); - - if (done != child) - fail("who's that?! %d\n", done); - - check_wait_status(status); - } - } - - gnutls_free(stored_cli_cert.data); - gnutls_global_deinit(); -} -#else -void doit() -{ - exit(77); -} -#endif diff --git a/tests/openpgp-auth2.c b/tests/openpgp-auth2.c deleted file mode 100644 index a742eaf5a0..0000000000 --- a/tests/openpgp-auth2.c +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright (C) 2010-2012 Free Software Foundation, Inc. - * Author: Ludovic Courts - * - * This file is part of GNUTLS. - * - * GNUTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GNUTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNUTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#if !defined(_WIN32) - -#include -#include - -#include "utils.h" - -#include -#include -#include -#include -#include -#include -#include -#include - - -/* This is the same test as openpgp-auth but tests - * openpgp under the latest TLS protocol (TLSv1.2). In - * addition it tests DSS signatures under that. - */ - -static const char g_message[] = "Hello, brave GNU world!"; - -/* The OpenPGP key pair for use and the key ID in those keys. */ -static const char pub_key_file[] = "../guile/tests/openpgp-pub.asc"; -static const char priv_key_file[] = "../guile/tests/openpgp-sec.asc"; -static const char *key_id = NULL - /* FIXME: The values below don't work as expected. */ - /* "auto" */ - /* "bd572cdcccc07c35" */ ; - -static void log_message(int level, const char *message) -{ - fprintf(stderr, "[%5d|%2d] %s", getpid(), level, message); -} - - -void doit(void) -{ - int err; - int sockets[2]; - const char *srcdir; - char pub_key_path[512], priv_key_path[512]; - pid_t child; - - global_init(); - - srcdir = getenv("srcdir") ? getenv("srcdir") : "."; - - if (debug) { - gnutls_global_set_log_level(10); - gnutls_global_set_log_function(log_message); - } - - err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); - if (err != 0) - fail("socketpair %s\n", strerror(errno)); - - if (sizeof(pub_key_path) < - strlen(srcdir) + strlen(pub_key_file) + 2) - abort(); - - strcpy(pub_key_path, srcdir); - strcat(pub_key_path, "/"); - strcat(pub_key_path, pub_key_file); - - if (sizeof(priv_key_path) < - strlen(srcdir) + strlen(priv_key_file) + 2) - abort(); - - strcpy(priv_key_path, srcdir); - strcat(priv_key_path, "/"); - strcat(priv_key_path, priv_key_file); - - child = fork(); - if (child == -1) - fail("fork %s\n", strerror(errno)); - - if (child == 0) { - /* Child process (client). */ - gnutls_session_t session; - gnutls_certificate_credentials_t cred; - ssize_t sent; - - if (debug) - printf("client process %i\n", getpid()); - - err = gnutls_init(&session, GNUTLS_CLIENT); - if (err != 0) - fail("client session %d\n", err); - - gnutls_priority_set_direct(session, - "NONE:+VERS-TLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+DHE-DSS:+DHE-RSA:+CTYPE-OPENPGP", - NULL); - gnutls_transport_set_int(session, sockets[0]); - - err = gnutls_certificate_allocate_credentials(&cred); - if (err != 0) - fail("client credentials %d\n", err); - - err = - gnutls_certificate_set_openpgp_key_file2(cred, - pub_key_path, - priv_key_path, - key_id, - GNUTLS_OPENPGP_FMT_BASE64); - if (err != 0) - fail("client openpgp keys %d\n", err); - - err = - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, - cred); - if (err != 0) - fail("client credential_set %d\n", err); - - gnutls_dh_set_prime_bits(session, 1024); - - err = gnutls_handshake(session); - if (err != 0) - fail("client handshake %s (%d) \n", - gnutls_strerror(err), err); - else if (debug) - printf("client handshake successful\n"); - - sent = - gnutls_record_send(session, g_message, sizeof(g_message)); - if (sent != sizeof(g_message)) - fail("client sent %li vs. %li\n", - (long) sent, (long) sizeof(g_message)); - - err = gnutls_bye(session, GNUTLS_SHUT_RDWR); - if (err != 0) - fail("client bye %d\n", err); - - if (debug) - printf("client done\n"); - - gnutls_deinit(session); - gnutls_certificate_free_credentials(cred); - } else { - /* Parent process (server). */ - gnutls_session_t session; - gnutls_dh_params_t dh_params; - gnutls_certificate_credentials_t cred; - char greetings[sizeof(g_message) * 2]; - ssize_t received; - pid_t done; - int status; - const gnutls_datum_t p3 = - { (void *) pkcs3, strlen(pkcs3) }; - - if (debug) - printf("server process %i (child %i)\n", getpid(), - child); - - err = gnutls_init(&session, GNUTLS_SERVER); - if (err != 0) - fail("server session %d\n", err); - - gnutls_priority_set_direct(session, - "NONE:+VERS-TLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+DHE-DSS:+DHE-RSA:+CTYPE-OPENPGP", - NULL); - gnutls_transport_set_int(session, sockets[1]); - - err = gnutls_certificate_allocate_credentials(&cred); - if (err != 0) - fail("server credentials %d\n", err); - - err = - gnutls_certificate_set_openpgp_key_file2(cred, - pub_key_path, - priv_key_path, - key_id, - GNUTLS_OPENPGP_FMT_BASE64); - if (err != 0) - fail("server openpgp keys %d\n", err); - - err = gnutls_dh_params_init(&dh_params); - if (err) - fail("server DH params init %d\n", err); - - err = - gnutls_dh_params_import_pkcs3(dh_params, &p3, - GNUTLS_X509_FMT_PEM); - if (err) - fail("server DH params generate %d\n", err); - - gnutls_certificate_set_dh_params(cred, dh_params); - - err = - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, - cred); - if (err != 0) - fail("server credential_set %d\n", err); - - gnutls_certificate_server_set_request(session, - GNUTLS_CERT_REQUIRE); - - err = gnutls_handshake(session); - if (err != 0) - fail("server handshake %s (%d) \n", - gnutls_strerror(err), err); - - received = - gnutls_record_recv(session, greetings, - sizeof(greetings)); - if (received != sizeof(g_message) - || memcmp(greetings, g_message, sizeof(g_message))) - fail("server received %li vs. %li\n", - (long) received, (long) sizeof(g_message)); - - err = gnutls_bye(session, GNUTLS_SHUT_RDWR); - if (err != 0) - fail("server bye %s (%d) \n", gnutls_strerror(err), - err); - - if (debug) - printf("server done\n"); - - gnutls_deinit(session); - gnutls_certificate_free_credentials(cred); - gnutls_dh_params_deinit(dh_params); - - done = wait(&status); - if (done < 0) - fail("wait %s\n", strerror(errno)); - - if (done != child) - fail("who's that?! %d\n", done); - - check_wait_status(status); - } - - gnutls_global_deinit(); -} -#else -#include - -void doit() -{ - exit(77); -} -#endif diff --git a/tests/openpgp-callback.c b/tests/openpgp-callback.c deleted file mode 100644 index cdf90cd60f..0000000000 --- a/tests/openpgp-callback.c +++ /dev/null @@ -1,475 +0,0 @@ -/* - * Copyright (C) 2004-2014 Free Software Foundation, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#if defined(_WIN32) || !defined(ENABLE_OPENPGP) - -/* socketpair isn't supported on Win32. */ -int main(int argc, char **argv) -{ - exit(77); -} - -#else - -#include -#include -#include -#if !defined(_WIN32) -#include -#endif -#include -#include -#include - -#include "utils.h" - -#include "ex-session-info.c" -#include "ex-x509-info.c" - -pid_t child; - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "%s |<%d>| %s", child ? "server" : "client", level, - str); -} - -/* A very basic TLS client, with anonymous authentication. - */ - -#define MAX_BUF 1024 -#define MSG "Hello TLS" - -static unsigned char cert_txt[] = - "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" - "Version: GnuPG v1.4.10 (GNU/Linux)\n" - "Comment: Test key for GnuTLS\n" - "\n" - "mI0ETYD2OQEEAMHmDBtJii82NbWuYcvEWCYnwa7GTcz2PYikYCcq/t5nkyb5Bfmx\n" - "mh2hpto7Lr5d1L/shvab1gXCcrWEAREgNNk9LiowtLuTHBdeOFlJ1u1P1rvdFVKq\n" - "2a6ft77Q5VltUDKPgTqz4NWH2KUlLfTvwJDnq2DxYsbwVpBDURuUocXhABEBAAG0\n" - "CVRlc3QgdXNlcoi4BBMBAgAiBQJNgPY5AhsvBgsJCAcDAgYVCAIJCgsEFgIDAQIe\n" - "AQIXgAAKCRAMTrFUBnAKMOVDA/9GEw7AokwJSGvHREriXcvMMKp6c6SYqa0TVsTg\n" - "Gh3ENu/KTfGJIM5p+zR6xy+5u5DfP5qLrRdCnoczncR5w9fn3RsP8ju/Ga5z23Q+\n" - "6XxRKRkXjE/E0ZFulbuaBom/nhrOmmfqKe7Mor9Y4QwzL2wL3sf6jWLglwdFYS/X\n" - "W3wqjLkBogRNgPY5EQQApafdUhCAHj8LLXYCqOXRSPZbKzvB55NwWrdvnod0seUW\n" - "aiTSWBlKnSvIomdcII/E3bjdngK4fTJ+Xr5pEJuzBnW3w787r6jBJSq2Lp0T9SP4\n" - "CBzd0gXcOQkILvX1VzxAsYVULJA0mhAR3IHFcywjX6ENKuvs7ApniBNoXqi6d3cA\n" - "oIAzYKrjyZ+guM4IUlRRrB8abx5vBACJPV+d15GYgzt1d8zLvOl/mzs85Twj2SB1\n" - "ZqzK6H/6QxQkEZpP/UVFpXaUGUly3nGEqg1yw4cgqW4SSxgLFz6B23Si+cTsssE6\n" - "CYziN1UI6NjxkoG/npMm0wRp7Z+KylEolAdbFBAAprORkt58CrGgpYe8O/35+PWc\n" - "J9rjhwxxkQP/VCpbZLugkL4XHWGWFGG35S6k9F3xPPTPoX9Zoud+0bOeoOK5RQHo\n" - "e99sVNN4hxxPTM/rJXfTTZUoB6o84yulTSxb6C9ueHotDV0eB9QX1ov/ltmwy3XS\n" - "fXEyWtI0CDBuZgEww26Up0pzg4XTBYMkmXrxx3J9ihcCIYyAHoE13EWI5wQYAQIA\n" - "CQUCTYD2OQIbIgBSCRAMTrFUBnAKMEcgBBkRAgAGBQJNgPY5AAoJEPMP1CPBQ+e6\n" - "3fQAnR7HWLnQTbxCIhlBTZiuJv2HC6cbAJwJ6VsSU6ADCkMuGT3LLNo+UnckK+4i\n" - "BACcivWsW40ddtEQ0wno1uP65TmKq3aJrdODXTAnqkmNQKL7X7Fz+nmEWiS+LBH8\n" - "lRvAaeRPX2LV+DCJDbAPrYd7LkOHyuM0I+ZApto5cjem/EnO7op2QwkCCa6oUp0l\n" - "YA6i6aGF2KGx7WQwi2URIMPhihpOvAbkjfszYpFL4VP5wQ==\n" - "=ydIq\n" "-----END PGP PUBLIC KEY BLOCK-----\n"; - -const gnutls_datum_t cert = { cert_txt, sizeof(cert_txt) }; - -static unsigned char key_txt[] = - "-----BEGIN PGP PRIVATE KEY BLOCK-----\n" - "Version: GnuPG v1.4.10 (GNU/Linux)\n" - "Comment: Test key for GnuTLS\n" - "\n" - "lQHYBE2A9jkBBADB5gwbSYovNjW1rmHLxFgmJ8Guxk3M9j2IpGAnKv7eZ5Mm+QX5\n" - "sZodoabaOy6+XdS/7Ib2m9YFwnK1hAERIDTZPS4qMLS7kxwXXjhZSdbtT9a73RVS\n" - "qtmun7e+0OVZbVAyj4E6s+DVh9ilJS3078CQ56tg8WLG8FaQQ1EblKHF4QARAQAB\n" - "AAP9HJePsXZmqg+UW/Ya9bE+TmIObXdQgajN6hhTFXOBocokKNsPxoIp97Sepg+U\n" - "FP5BIQv/2t2f8bl6sMmGXsAhCqVzRxGuA+9USx8OfTHSdgIKT5T2VFSGJaU4df3Q\n" - "rstUY3dcvl6VKpDDZic1T7u2ANzaWM2u+pwooKC4cc/k9AECAMNDvrKF3FC7R9sd\n" - "TagVrrfde0RZuwhbGW9ghslkY893EelXQL/lbBI20crPdrsdDpMe370KO2bQLqwO\n" - "HGAxIYUCAP41iC7KReYvysLZ34tM55ZFE7BPsMcXUeu6hkYOMDZYvE+x4KV6Umo+\n" - "Civd4qD9dESR3WOcI9MwALUdNTxQU60B/21MrWjajY1m1vv7l2slJon5eSrH6BkH\n" - "Aj173uZca8HbgqSF1xOQW8ZGa6KInN3wHe+vPOXAgzlku/4XHgEYVVGeq7QJVGVz\n" - "dCB1c2VyiLgEEwECACIFAk2A9jkCGy8GCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheA\n" - "AAoJEAxOsVQGcAow5UMD/0YTDsCiTAlIa8dESuJdy8wwqnpzpJiprRNWxOAaHcQ2\n" - "78pN8Ykgzmn7NHrHL7m7kN8/moutF0KehzOdxHnD1+fdGw/yO78ZrnPbdD7pfFEp\n" - "GReMT8TRkW6Vu5oGib+eGs6aZ+op7syiv1jhDDMvbAvex/qNYuCXB0VhL9dbfCqM\n" - "nQG7BE2A9jkRBAClp91SEIAePwstdgKo5dFI9lsrO8Hnk3Bat2+eh3Sx5RZqJNJY\n" - "GUqdK8iiZ1wgj8TduN2eArh9Mn5evmkQm7MGdbfDvzuvqMElKrYunRP1I/gIHN3S\n" - "Bdw5CQgu9fVXPECxhVQskDSaEBHcgcVzLCNfoQ0q6+zsCmeIE2heqLp3dwCggDNg\n" - "quPJn6C4zghSVFGsHxpvHm8EAIk9X53XkZiDO3V3zMu86X+bOzzlPCPZIHVmrMro\n" - "f/pDFCQRmk/9RUWldpQZSXLecYSqDXLDhyCpbhJLGAsXPoHbdKL5xOyywToJjOI3\n" - "VQjo2PGSgb+ekybTBGntn4rKUSiUB1sUEACms5GS3nwKsaClh7w7/fn49Zwn2uOH\n" - "DHGRA/9UKltku6CQvhcdYZYUYbflLqT0XfE89M+hf1mi537Rs56g4rlFAeh732xU\n" - "03iHHE9Mz+sld9NNlSgHqjzjK6VNLFvoL254ei0NXR4H1BfWi/+W2bDLddJ9cTJa\n" - "0jQIMG5mATDDbpSnSnODhdMFgySZevHHcn2KFwIhjIAegTXcRQAAn2PK9kOqhjOJ\n" - "KU5iaagnF176FwhdCO2I5wQYAQIACQUCTYD2OQIbIgBSCRAMTrFUBnAKMEcgBBkR\n" - "AgAGBQJNgPY5AAoJEPMP1CPBQ+e63fQAniK5kU+dwIbkD+OHJHkC73V6v4D8AJ0Z\n" - "+GBYj4nhKEX21QXfj55F3Zpg1e4iBACcivWsW40ddtEQ0wno1uP65TmKq3aJrdOD\n" - "XTAnqkmNQKL7X7Fz+nmEWiS+LBH8lRvAaeRPX2LV+DCJDbAPrYd7LkOHyuM0I+ZA\n" - "pto5cjem/EnO7op2QwkCCa6oUp0lYA6i6aGF2KGx7WQwi2URIMPhihpOvAbkjfsz\n" - "YpFL4VP5wQ==\n" "=zzoN\n" "-----END PGP PRIVATE KEY BLOCK-----\n"; - -const gnutls_datum_t key = { key_txt, sizeof(key_txt) }; - - -static void client(int sd) -{ - int ret, ii; - gnutls_session_t session; - char buffer[MAX_BUF + 1]; - gnutls_certificate_credentials_t xcred; - - global_init(); - - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(4711); - - gnutls_certificate_allocate_credentials(&xcred); - - ret = - gnutls_certificate_set_openpgp_key_mem2 - (xcred, &cert, &key, "auto", - GNUTLS_OPENPGP_FMT_BASE64); - if (ret < 0) { - fail("error[%d]: %s\n", __LINE__, gnutls_strerror(ret)); - } - - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); - - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:+CTYPE-OPENPGP:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1", NULL); - - /* put the x509 credentials to the current session - */ - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); - - gnutls_transport_set_int(session, sd); - - /* Perform the TLS handshake - */ - do { - ret = gnutls_handshake(session); - } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); - - if (ret < 0) { - fail("client: Handshake failed\n"); - gnutls_perror(ret); - goto end; - } else { - if (debug) - success("client: Handshake was completed\n"); - } - - if (debug) - success("client: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - /* see the Getting peer's information example */ - if (debug) - print_info(session); - - gnutls_record_send(session, MSG, strlen(MSG)); - - ret = gnutls_record_recv(session, buffer, MAX_BUF); - if (ret == 0) { - if (debug) - success - ("client: Peer has closed the TLS connection\n"); - goto end; - } else if (ret < 0) { - fail("client: Error: %s\n", gnutls_strerror(ret)); - goto end; - } - - if (debug) { - printf("- Received %d bytes: ", ret); - for (ii = 0; ii < ret; ii++) { - fputc(buffer[ii], stdout); - } - fputs("\n", stdout); - } - - gnutls_bye(session, GNUTLS_SHUT_RDWR); - - end: - - close(sd); - - gnutls_deinit(session); - - gnutls_certificate_free_credentials(xcred); - - gnutls_global_deinit(); -} - -/* This is a sample TLS 1.0 echo server, using X.509 authentication. - */ - -static unsigned char server_crt_txt[] = - "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" - "Version: GnuPG v1.4.6 (GNU/Linux)\n" - "\n" - "mNEER2PogwEGINdIR4u5PR4SwADWwj/ztgtoi7XVbmlfbQTHpBYFxTSC88pISSNy\n" - "V/rgnlqunYP77F7aHL4KUReN3v9sKw01xSGEfox/JmlqUUg6CVvTjdeLfkuVIBnH\n" - "j+2KMlaxezp7IxtPaTXpXcSf8iOuVq7UX7p6tKbppKXO5GgmfA88VUVvGBs1/PQp\n" - "WKQdGrj+6I3RRmDN/hna1jGU/N23230Hbx+bu7g9cviiSh10ri7rdDhVJ67tRkRG\n" - "Usy3XO6dWC7EmzZlEO8AEQEAAbQQdGVzdDMuZ251dGxzLm9yZ4kBAAQTAQIAJgUC\n" - "R2PogwIbAwUJCWYBgAYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEKAh4/gImZBR\n" - "96QGH3E3zynETuQS3++hGMvMXq2mDJeT2e8964y/ifIOBpr2K2isuLYnrtGKyxi+\n" - "ZptyHv6ymR3bDvio50cjnoT/WK1onosOJvtijGBS+U/ooq3im7ExpeQYXc/zpYsX\n" - "OmB5m6BvdomUp2PMqdxsmOPoaRkSYx5R2Rlo/z3csodl6sp3k465Y/jg7L4gkxDz\n" - "XJM+CS1xMhcOF0gBhppqLnG67x0ow847Pydstzkw0sOqedkLPuScaHNnlAWQ7QH6\n" - "mbbpqHJwekS4jQRHiKV8AQQA0iZ81WXypLI4ZE2+hYfBCnfMVfQF/vPgvASxhwri\n" - "GDa9Zc2f/VfakfNiwZgHH6iCeppHBiP2jljnbuOsL6f1R+0FsnyTVwHbuEU7IU2y\n" - "+J0/s0z3wcx9sx8T7brP5z5F2hdagBsD9YFGCifHDAEew4mmAisY0i2QHVIuXJFj\n" - "4RMAEQEAAYkBhwQYAQIADwUCR4ilfAIbAgUJEOrPgACoCRCgIeP4CJmQUZ0gBBkB\n" - "AgAGBQJHiKV8AAoJEIN7b7QuD+F2AEcEAKAjhO9kSOE8UuwEOKlwsWL9LUUSkHJj\n" - "c/ca0asLAerzrHsldRAcwCbWkVxBBHySw2CLFjzpgdXhwRtsytMgHaapfAPbinAW\n" - "jCPIEJx2gDZeZnTgi4DVbZn5E3UzHGyL69MEoXr5t+vpiemQFd/nGD+h/Q2A76od\n" - "gvAryRvS1Soj8bcGHjUflayXGOSvaD8P2V5Vz0hS82QZcqWxD8qUBqbcB8atokmO\n" - "IYxhKyRmO58T5Ma+iaxBTUIwee+pBYDgdH6E2dh9xLlwwzZKaCcIRCQcObkLsMVo\n" - "fZJo+m0Xf8zI57NeQF+hXJhW7lIrWgQVr8IVp/lgo76acLHfL/t1n0Nhg4r2srz2\n" - "fpP2w5laQ0qImYLnZhGFHU+rJUyFaHfhD8/svN2LuZkO570pjV/K68EaHnEfk5b8\n" - "jWu/euohwcCwf20M1kTo3Bg=\n" - "=Xjon\n" "-----END PGP PUBLIC KEY BLOCK-----\n"; -const gnutls_datum_t server_crt = - { server_crt_txt, sizeof(server_crt_txt) }; - -static unsigned char server_key_txt[] = - "-----BEGIN PGP PRIVATE KEY BLOCK-----\n" - "Version: GnuPG v1.4.6 (GNU/Linux)\n" - "\n" - "lQLGBEdj6IMBBiDXSEeLuT0eEsAA1sI/87YLaIu11W5pX20Ex6QWBcU0gvPKSEkj\n" - "clf64J5arp2D++xe2hy+ClEXjd7/bCsNNcUhhH6MfyZpalFIOglb043Xi35LlSAZ\n" - "x4/tijJWsXs6eyMbT2k16V3En/Ijrlau1F+6erSm6aSlzuRoJnwPPFVFbxgbNfz0\n" - "KVikHRq4/uiN0UZgzf4Z2tYxlPzdt9t9B28fm7u4PXL4okoddK4u63Q4VSeu7UZE\n" - "RlLMt1zunVguxJs2ZRDvABEBAAEABhwMx6crpb75ko5gXl9gsYSMj9O/YyCvU7Fi\n" - "l8FnZ0dKMz3qs7jXyFlttLjh1DzYkXN6PAN5yp3+wnbK/e5eVeNSdo2WpJOwrVWO\n" - "7pcQovHoKklAjmU98olaRhpv6BBTK+0tGUFaRrmrrYuz2xnwf3+kIpt4ahYW2dr9\n" - "B+/pvBSVC/sv2+3PEQSsXlWCYVgkQ7WBN4GQdyjjxhQpcWdf8Z6unx4zuS3s7GGM\n" - "4WaDxmDNCFlTGdrKPQeogtS3LVF9OiRCOvIlAxDmDvnC3zAwO/IvDUHFED9x9hmK\n" - "MeVwCg8rwDMptVYN2hm+bjNzjV4pimUVd+w7edjEky0Jd/6tTH01CBUWxs9Pfup2\n" - "cQ9zkYcVz1bwcoqeyRzFCJgi6PiVT38QFEvyusoVkwMQ747D6p7y+R52MEcIvcLb\n" - "lBXhRviz3rW+Sch4+ohUPvBU41saM5B6UcOmhdPfdvPriI4qXwFxusGWt98NN3aW\n" - "Ns2/L9kMX/SWnN6Elfj5hrrExDZ2CE60uuvfj+O/uXfO8LUDENE4vQrC399KLbJw\n" - "uCaqjqLysYA9EY/Nv8RFGkk1UM4ViW8v1/95D95F9WqochSYH8Phr3br0chDxofb\n" - "rnm6dUPE8uiriNaKWdoiUNSuvumh9lVixmRI923+4imu3scq+rlJAZ20EHRlc3Qz\n" - "LmdudXRscy5vcmeJAQAEEwECACYFAkdj6IMCGwMFCQlmAYAGCwkIBwMCBBUCCAME\n" - "FgIDAQIeAQIXgAAKCRCgIeP4CJmQUfekBh9xN88pxE7kEt/voRjLzF6tpgyXk9nv\n" - "PeuMv4nyDgaa9itorLi2J67RissYvmabch7+spkd2w74qOdHI56E/1itaJ6LDib7\n" - "YoxgUvlP6KKt4puxMaXkGF3P86WLFzpgeZugb3aJlKdjzKncbJjj6GkZEmMeUdkZ\n" - "aP893LKHZerKd5OOuWP44Oy+IJMQ81yTPgktcTIXDhdIAYaaai5xuu8dKMPOOz8n\n" - "bLc5MNLDqnnZCz7knGhzZ5QFkO0B+pm26ahycHpEnQHXBEeIpXwBBADSJnzVZfKk\n" - "sjhkTb6Fh8EKd8xV9AX+8+C8BLGHCuIYNr1lzZ/9V9qR82LBmAcfqIJ6mkcGI/aO\n" - "WOdu46wvp/VH7QWyfJNXAdu4RTshTbL4nT+zTPfBzH2zHxPtus/nPkXaF1qAGwP1\n" - "gUYKJ8cMAR7DiaYCKxjSLZAdUi5ckWPhEwARAQABAAP3QKGVoNi52HXEN3ttUCyB\n" - "Q1CDurh0MLDQoHomY3MGfI4VByk2YKMb2el4IJqyHrUbBYjTpHY31W2CSIdWfoTU\n" - "DIik49CQaUpR13dJXEiG4d+nyETFutEalTQI4hMjABD9l1XvZP7Ll3YWmqN8Cam5\n" - "JY23YAy2Noqbc3AcEut4+QIA1zcv8EU1QVqOwjSybRdm6HKK/A2bMqnITeUR/ikm\n" - "IuU4lhijm/d1qS6ZBehRvvYa9MY4V7BGEQLWSlyc5aYJ/wIA+fmRv0lHSs78QSUg\n" - "uRbNv6Aa6CXEOXmG+TpIaf/RWrPmBpdG8AROBVo1wmwG8oQaIjeX3RjKXfL3HTDD\n" - "CxNg7QIA06tApdo2j1gr3IrroUwQ7yvi56ELB1Lv+W3WLN8lzCfQ6Fs+7IJRrC2R\n" - "0uzLMGOsSORGAFIbAuLIMpc6rHCeS50hiQGHBBgBAgAPBQJHiKV8AhsCBQkQ6s+A\n" - "AKgJEKAh4/gImZBRnSAEGQECAAYFAkeIpXwACgkQg3tvtC4P4XYARwQAoCOE72RI\n" - "4TxS7AQ4qXCxYv0tRRKQcmNz9xrRqwsB6vOseyV1EBzAJtaRXEEEfJLDYIsWPOmB\n" - "1eHBG2zK0yAdpql8A9uKcBaMI8gQnHaANl5mdOCLgNVtmfkTdTMcbIvr0wShevm3\n" - "6+mJ6ZAV3+cYP6H9DYDvqh2C8CvJG9LVKiPxtwYeNR+VrJcY5K9oPw/ZXlXPSFLz\n" - "ZBlypbEPypQGptwHxq2iSY4hjGErJGY7nxPkxr6JrEFNQjB576kFgOB0foTZ2H3E\n" - "uXDDNkpoJwhEJBw5uQuwxWh9kmj6bRd/zMjns15AX6FcmFbuUitaBBWvwhWn+WCj\n" - "vppwsd8v+3WfQ2GDivayvPZ+k/bDmVpDSoiZgudmEYUdT6slTIVod+EPz+y83Yu5\n" - "mQ7nvSmNX8rrwRoecR+TlvyNa7966iHBwLB/bQzWROjcGA==\n" - "=mZnW\n" "-----END PGP PRIVATE KEY BLOCK-----\n"; -const gnutls_datum_t server_key = - { server_key_txt, sizeof(server_key_txt) }; - -static gnutls_privkey_t g_pkey = NULL; -static gnutls_pcert_st *g_pcert = NULL; - -static int -cert_callback(gnutls_session_t session, - const gnutls_datum_t * req_ca_rdn, int nreqs, - const gnutls_pk_algorithm_t * sign_algos, - int sign_algos_length, gnutls_pcert_st ** pcert, - unsigned int *pcert_length, gnutls_privkey_t * pkey) -{ - int ret; - gnutls_pcert_st *p; - gnutls_privkey_t lkey; - - p = gnutls_malloc(sizeof(*p)); - if (p==NULL) - return -1; - - if (g_pkey == NULL) { - ret = gnutls_pcert_import_openpgp_raw(p, &server_crt, GNUTLS_OPENPGP_FMT_BASE64, NULL, 0); - if (ret < 0) - return -1; - - ret = gnutls_privkey_init(&lkey); - if (ret < 0) - return -1; - - ret = gnutls_privkey_import_openpgp_raw(lkey, &server_key, GNUTLS_OPENPGP_FMT_BASE64, NULL, NULL); - if (ret < 0) - return -1; - - g_pcert = p; - g_pkey = lkey; - - *pcert = p; - *pcert_length = 1; - *pkey = lkey; - } else { - *pcert = g_pcert; - *pcert_length = 1; - *pkey = g_pkey; - } - - return 0; -} - -static void server(int sd) -{ -gnutls_certificate_credentials_t pgp_cred; -int ret; -gnutls_session_t session; -gnutls_dh_params_t dh_params; -const gnutls_datum_t p3 = { (void *) pkcs3, strlen(pkcs3) }; - - /* this must be called once in the program - */ - global_init(); - - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(4711); - - gnutls_certificate_allocate_credentials(&pgp_cred); - - gnutls_certificate_set_retrieve_function2(pgp_cred, cert_callback); - - gnutls_dh_params_init(&dh_params); - gnutls_dh_params_import_pkcs3(dh_params, &p3, - GNUTLS_X509_FMT_PEM); - - gnutls_certificate_set_dh_params(pgp_cred, dh_params); - - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL:+CTYPE-OPENPGP:-CTYPE-X509:-RSA:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1", NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, pgp_cred); - - /* request client certificate if any. - */ - gnutls_certificate_server_set_request(session, - GNUTLS_CERT_REQUEST); - - gnutls_transport_set_int(session, sd); - gnutls_handshake_set_timeout(session, 20 * 1000); - - do { - ret = gnutls_handshake(session); - } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); - if (ret < 0) { - close(sd); - gnutls_deinit(session); - fail("server: Handshake has failed (%s)\n\n", - gnutls_strerror(ret)); - return; - } - if (debug) - success("server: Handshake was completed\n"); - - if (gnutls_certificate_get_ours(session) == NULL) { - fail("our certificate was not sent!\n"); - exit(1); - } - - if (debug) - success("server: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - /* see the Getting peer's information example */ - if (debug) - print_info(session); - - /* do not wait for the peer to close the connection. - */ - gnutls_bye(session, GNUTLS_SHUT_WR); - - close(sd); - gnutls_deinit(session); - - gnutls_certificate_free_credentials(pgp_cred); - gnutls_pcert_deinit(&g_pcert[0]); - gnutls_privkey_deinit(g_pkey); - - gnutls_dh_params_deinit(dh_params); - gnutls_global_deinit(); - - if (debug) - success("server: finished\n"); -} - - -void doit(void) -{ - int sockets[2]; - int err; - - err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); - if (err == -1) { - perror("socketpair"); - fail("socketpair failed\n"); - return; - } - - child = fork(); - if (child < 0) { - perror("fork"); - fail("fork"); - return; - } - - if (child) { - int status; - /* parent */ - client(sockets[0]); - wait(&status); - check_wait_status(status); - } else - server(sockets[1]); -} - -#endif /* _WIN32 */ diff --git a/tests/openpgp-keyring.c b/tests/openpgp-keyring.c deleted file mode 100644 index aac63276b8..0000000000 --- a/tests/openpgp-keyring.c +++ /dev/null @@ -1,396 +0,0 @@ -/* - * Copyright (C) 2007-2012 Free Software Foundation, Inc. - * Author: Ludovic Courts, Timo Schulz - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include - -#include "utils.h" - -/* A hex-encoded raw OpenPGP keyring. This is a copy of (`sha1sum' output): - 5fdce61bff528070dfabdd237d91be618c353b4e src/openpgp/cli_ring.gpg */ -static unsigned char raw_keyring[] = { - 0x99, 0x01, 0xA2, 0x04, 0x3C, 0x67, 0x95, 0x8D, 0x11, 0x04, 0x00, - 0x80, - 0xB1, 0x65, 0x21, 0x8B, 0xF8, 0x28, 0x06, 0xFA, 0x6F, 0x4C, 0x18, - 0x0B, - 0xF1, 0xF1, 0x4F, 0xC0, 0x10, 0x2E, 0x0F, 0x4E, 0x15, 0x60, 0x51, - 0x2D, - 0x0B, 0xBF, 0xB8, 0xA4, 0x1A, 0x7A, 0x90, 0x5B, 0x07, 0x8D, 0x44, - 0x7B, - 0x4D, 0x35, 0x24, 0x06, 0xC3, 0xA4, 0xD8, 0xFB, 0xCC, 0x1E, 0xB0, - 0xDD, - 0xBF, 0x4F, 0x82, 0xE3, 0x1D, 0x82, 0x1F, 0xC6, 0x06, 0x3F, 0x57, - 0xBE, - 0x3B, 0x47, 0xF6, 0xC8, 0xB5, 0xA4, 0xF1, 0x4B, 0xBE, 0x92, 0x41, - 0x75, - 0xDB, 0x28, 0xAA, 0x6D, 0xBB, 0xC3, 0x12, 0x20, 0x9D, 0x78, 0x94, - 0xFA, - 0x73, 0x7B, 0xC8, 0xB2, 0xD6, 0x3C, 0xBC, 0x9F, 0x49, 0xB2, 0x8E, - 0x60, - 0xFC, 0xB0, 0x7C, 0x5E, 0x08, 0x2A, 0xF3, 0xC4, 0x7B, 0x8D, 0x71, - 0x52, - 0xDE, 0x11, 0xFE, 0x58, 0x2E, 0x6F, 0xFF, 0xA3, 0xFA, 0x48, 0x04, - 0x5F, - 0xCD, 0x79, 0x78, 0xE7, 0xB7, 0x15, 0x7B, 0x00, 0xA0, 0xBF, 0x14, - 0x9F, - 0x1A, 0xC9, 0xBD, 0x98, 0x5A, 0x2C, 0xA4, 0x9D, 0x01, 0xDD, 0x11, - 0xB2, - 0x83, 0x93, 0x01, 0xD1, 0xDF, 0x03, 0xFD, 0x14, 0x10, 0xAF, 0x22, - 0x42, - 0x19, 0xD4, 0x76, 0x9C, 0xB7, 0xB8, 0x55, 0xF7, 0x2D, 0x3C, 0xBD, - 0x90, - 0x04, 0x3F, 0xF5, 0x5E, 0x1B, 0x6E, 0x6E, 0xA1, 0x1B, 0x7A, 0xD6, - 0x95, - 0x3F, 0x1B, 0x2C, 0xAA, 0xB2, 0x5D, 0x03, 0xE7, 0xA9, 0x94, 0x14, - 0x53, - 0xED, 0x41, 0xE8, 0x91, 0x20, 0x5A, 0x84, 0xCF, 0x20, 0x99, 0x29, - 0x8D, - 0xB9, 0x2A, 0xCB, 0x0E, 0xE8, 0xCF, 0x7C, 0x4B, 0x5A, 0x32, 0x0E, - 0x98, - 0x22, 0x40, 0x7E, 0x2A, 0xAD, 0x15, 0x78, 0x92, 0xC4, 0xD1, 0xC5, - 0xD3, - 0x64, 0x81, 0xF6, 0xF4, 0xA2, 0x65, 0x23, 0xFA, 0xA4, 0xD7, 0x11, - 0xB8, - 0x2B, 0xB0, 0xFA, 0x07, 0x47, 0x0A, 0x68, 0x70, 0xBF, 0x2F, 0x80, - 0x48, - 0xA0, 0xA7, 0x10, 0x2C, 0x9C, 0xDF, 0x4C, 0x83, 0xF0, 0xDD, 0xFA, - 0xD2, - 0xE2, 0x35, 0x5E, 0x35, 0xA4, 0x19, 0x34, 0x74, 0x95, 0xA9, 0x9F, - 0x3F, - 0x56, 0x63, 0x8C, 0x03, 0xFF, 0x6B, 0x90, 0xDB, 0x5C, 0x71, 0x0E, - 0x11, - 0x55, 0xDF, 0x56, 0x4C, 0x5A, 0x07, 0x2A, 0xF4, 0xF8, 0xBD, 0xF8, - 0x88, - 0x48, 0x43, 0x88, 0xCC, 0xA1, 0xA6, 0x70, 0x16, 0x3D, 0x1F, 0x29, - 0xAA, - 0xEC, 0xC0, 0x9C, 0x8B, 0x79, 0x8D, 0x7B, 0x80, 0x83, 0x22, 0x69, - 0x2F, - 0x66, 0x09, 0xE3, 0x0E, 0x52, 0x40, 0x33, 0xDD, 0x42, 0x5F, 0x53, - 0x83, - 0xB6, 0x13, 0xCB, 0x06, 0xAB, 0xF2, 0x86, 0x73, 0x21, 0x87, 0x10, - 0xE7, - 0x68, 0x39, 0x78, 0x36, 0x1E, 0x36, 0xB8, 0xF3, 0x12, 0xAF, 0xD2, - 0x44, - 0x5B, 0x62, 0x30, 0xA0, 0x86, 0xC5, 0x9D, 0xED, 0x74, 0x8A, 0x11, - 0x93, - 0x3B, 0x89, 0x41, 0x4B, 0x50, 0xB6, 0xF1, 0x47, 0xD2, 0x18, 0x43, - 0x26, - 0xFF, 0xC2, 0x41, 0x32, 0xDC, 0x40, 0x8D, 0xB6, 0x32, 0xDC, 0x16, - 0x33, - 0x52, 0xD0, 0x8C, 0x03, 0xE6, 0xC6, 0x04, 0x6E, 0x95, 0xA1, 0xEE, - 0x62, - 0xE4, 0xB4, 0x25, 0x44, 0x72, 0x2E, 0x20, 0x57, 0x68, 0x6F, 0x20, - 0x28, - 0x4E, 0x6F, 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x65, 0x6E, 0x74, 0x73, - 0x29, - 0x20, 0x3C, 0x77, 0x68, 0x6F, 0x40, 0x77, 0x68, 0x6F, 0x69, 0x73, - 0x2E, - 0x6F, 0x72, 0x67, 0x3E, 0x88, 0x5D, 0x04, 0x13, 0x11, 0x02, 0x00, - 0x1D, - 0x05, 0x02, 0x3C, 0x67, 0x95, 0x8D, 0x05, 0x09, 0x03, 0xC2, 0x67, - 0x00, - 0x05, 0x0B, 0x07, 0x0A, 0x03, 0x04, 0x03, 0x15, 0x03, 0x02, 0x03, - 0x16, - 0x02, 0x01, 0x02, 0x17, 0x80, 0x00, 0x0A, 0x09, 0x10, 0x35, 0x14, - 0x5C, - 0xEA, 0xA7, 0xD9, 0x3C, 0x3F, 0x96, 0x58, 0x00, 0x9F, 0x78, 0x99, - 0xCB, - 0xC9, 0xF6, 0xE9, 0x4C, 0x30, 0x7B, 0x98, 0x38, 0x77, 0x68, 0x04, - 0xDB, - 0xFB, 0x43, 0xD7, 0xCF, 0x6F, 0x00, 0xA0, 0xA4, 0x5D, 0x02, 0x90, - 0x55, - 0x33, 0xA0, 0x6D, 0xCB, 0xEB, 0xD6, 0xC9, 0x71, 0xFA, 0x1D, 0xF1, - 0x7A, - 0x65, 0x38, 0xFE, 0x99, 0x01, 0xA2, 0x04, 0x3C, 0x4A, 0xC5, 0x6C, - 0x11, - 0x04, 0x00, 0xE7, 0x2E, 0x76, 0xB6, 0x2E, 0xEF, 0xA9, 0xA3, 0xBD, - 0x59, - 0x40, 0x93, 0x29, 0x24, 0x18, 0x05, 0x0C, 0x02, 0xD7, 0x02, 0x9D, - 0x6C, - 0xA2, 0x06, 0x6E, 0xFC, 0x34, 0xC8, 0x60, 0x38, 0x62, 0x7C, 0x64, - 0x3E, - 0xB1, 0xA6, 0x52, 0xA7, 0xAF, 0x1D, 0x37, 0xCF, 0x46, 0xFC, 0x50, - 0x5A, - 0xC1, 0xE0, 0xC6, 0x99, 0xB3, 0x78, 0x95, 0xB4, 0xBC, 0xB3, 0xE5, - 0x35, - 0x41, 0xFF, 0xDA, 0x47, 0x66, 0xD6, 0x16, 0x8C, 0x2B, 0x8A, 0xAF, - 0xD6, - 0xAB, 0x22, 0x46, 0x6D, 0x06, 0xD1, 0x80, 0x34, 0xD5, 0xDA, 0xC6, - 0x98, - 0xE6, 0x99, 0x3B, 0xA5, 0xB3, 0x50, 0xFF, 0x82, 0x2E, 0x1C, 0xD8, - 0x70, - 0x2A, 0x75, 0x11, 0x4E, 0x8B, 0x73, 0xA6, 0xB0, 0x9C, 0xB3, 0xB9, - 0x3C, - 0xE4, 0x4D, 0xBB, 0x51, 0x6C, 0x9B, 0xB5, 0xF9, 0x5B, 0xB6, 0x66, - 0x18, - 0x86, 0x02, 0xA0, 0xA1, 0x44, 0x72, 0x36, 0xC0, 0x65, 0x8F, 0x00, - 0xA0, - 0x8F, 0x5B, 0x5E, 0x78, 0xD8, 0x5F, 0x79, 0x2C, 0xC2, 0x07, 0x2F, - 0x94, - 0x74, 0x64, 0x57, 0x26, 0xFB, 0x4D, 0x93, 0x73, 0x03, 0xFE, 0x35, - 0x78, - 0xD6, 0x89, 0xD6, 0x60, 0x6E, 0x91, 0x18, 0xE9, 0xF9, 0xA7, 0x04, - 0x2B, - 0x96, 0x3C, 0xF2, 0x3F, 0x3D, 0x8F, 0x13, 0x77, 0xA2, 0x73, 0xC0, - 0xF0, - 0x97, 0x4D, 0xBF, 0x44, 0xB3, 0xCA, 0xBC, 0xBE, 0x14, 0xDD, 0x64, - 0x41, - 0x25, 0x55, 0x86, 0x3E, 0x39, 0xA9, 0xC6, 0x27, 0x66, 0x2D, 0x77, - 0xAC, - 0x36, 0x66, 0x2A, 0xE4, 0x49, 0x79, 0x2C, 0x32, 0x62, 0xD3, 0xF1, - 0x2E, - 0x98, 0x32, 0xA7, 0x56, 0x53, 0x09, 0xD6, 0x7B, 0xA0, 0xAE, 0x4D, - 0xF2, - 0x5F, 0x5E, 0xDA, 0x09, 0x37, 0x05, 0x6A, 0xD5, 0xBE, 0x89, 0xF4, - 0x06, - 0x9E, 0xBD, 0x7E, 0xC7, 0x6C, 0xE4, 0x32, 0x44, 0x1D, 0xF5, 0xD5, - 0x2F, - 0xFF, 0xD0, 0x6D, 0x39, 0xE5, 0xF6, 0x1E, 0x36, 0x94, 0x7B, 0x69, - 0x8A, - 0x77, 0xCB, 0x62, 0xAB, 0x81, 0xE4, 0xA4, 0x12, 0x2B, 0xF9, 0x05, - 0x06, - 0x71, 0xD9, 0x94, 0x6C, 0x86, 0x5E, 0x04, 0x00, 0xD0, 0x61, 0x43, - 0x7A, - 0x96, 0x4D, 0xDE, 0x31, 0x88, 0x18, 0xC2, 0xB2, 0x4D, 0xE0, 0x08, - 0xE6, - 0x00, 0x96, 0xB6, 0x0D, 0xB8, 0xA6, 0x84, 0xB8, 0x5A, 0x83, 0x8D, - 0x11, - 0x9F, 0xC9, 0x30, 0x31, 0x18, 0x89, 0xAD, 0x57, 0xA3, 0xB9, 0x27, - 0xF4, - 0x48, 0xF8, 0x4E, 0xB2, 0x53, 0xC6, 0x23, 0xED, 0xA7, 0x3B, 0x42, - 0xFF, - 0x78, 0xBC, 0xE6, 0x3A, 0x6A, 0x53, 0x1D, 0x75, 0xA6, 0x4C, 0xE8, - 0x54, - 0x05, 0x13, 0x80, 0x8E, 0x9F, 0x5B, 0x10, 0xCE, 0x07, 0x5D, 0x34, - 0x17, - 0xB8, 0x01, 0x16, 0x49, 0x18, 0xB1, 0x31, 0xD3, 0x54, 0x4C, 0x87, - 0x65, - 0xA8, 0xEC, 0xB9, 0x97, 0x1F, 0x61, 0xA0, 0x9F, 0xC7, 0x3D, 0x50, - 0x98, - 0x06, 0x10, 0x6B, 0x59, 0x77, 0xD2, 0x11, 0xCB, 0x0E, 0x1D, 0x04, - 0xD0, - 0xED, 0x96, 0xBC, 0xE8, 0x9B, 0xAE, 0x8F, 0x73, 0xD8, 0x00, 0xB0, - 0x52, - 0x13, 0x9C, 0xBF, 0x8D, 0xB4, 0x49, 0x4F, 0x70, 0x65, 0x6E, 0x43, - 0x44, - 0x4B, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x6B, 0x65, 0x79, 0x20, - 0x28, - 0x4F, 0x6E, 0x6C, 0x79, 0x20, 0x69, 0x6E, 0x74, 0x65, 0x6E, 0x64, - 0x65, - 0x64, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, - 0x70, - 0x75, 0x72, 0x70, 0x6F, 0x73, 0x65, 0x73, 0x21, 0x29, 0x20, 0x3C, - 0x6F, - 0x70, 0x65, 0x6E, 0x63, 0x64, 0x6B, 0x40, 0x66, 0x6F, 0x6F, 0x2D, - 0x62, - 0x61, 0x72, 0x2E, 0x6F, 0x72, 0x67, 0x3E, 0x88, 0x62, 0x04, 0x13, - 0x11, - 0x02, 0x00, 0x1A, 0x05, 0x02, 0x3C, 0x4A, 0xC5, 0x6C, 0x05, 0x0B, - 0x07, - 0x0A, 0x03, 0x04, 0x03, 0x15, 0x03, 0x02, 0x03, 0x16, 0x02, 0x01, - 0x02, - 0x1E, 0x01, 0x02, 0x17, 0x80, 0x00, 0x12, 0x09, 0x10, 0xBD, 0x57, - 0x2C, - 0xDC, 0xCC, 0xC0, 0x7C, 0x35, 0x07, 0x65, 0x47, 0x50, 0x47, 0x00, - 0x01, - 0x01, 0x81, 0xC1, 0x00, 0x9C, 0x0E, 0x12, 0x8D, 0x8E, 0xD4, 0x44, - 0x7C, - 0x6D, 0xCB, 0xCE, 0x61, 0x50, 0xD9, 0xCD, 0x86, 0xE2, 0x0D, 0x84, - 0x59, - 0xA5, 0x00, 0x9F, 0x66, 0x81, 0x66, 0x2C, 0x80, 0xC6, 0xAA, 0xCF, - 0x1D, - 0x2D, 0x2B, 0xC2, 0x04, 0xF0, 0x82, 0xFE, 0x80, 0xD3, 0xDB, 0xA4, - 0xB9, - 0x01, 0x0D, 0x04, 0x3C, 0x4A, 0xC5, 0x6F, 0x10, 0x04, 0x00, 0xE2, - 0x01, - 0x56, 0x52, 0x60, 0x69, 0xD0, 0x67, 0xD2, 0x4F, 0x4D, 0x71, 0xE6, - 0xD3, - 0x86, 0x58, 0xE0, 0x8B, 0xE3, 0xBF, 0x24, 0x6C, 0x1A, 0xDC, 0xE0, - 0x8D, - 0xB6, 0x9C, 0xD8, 0xD4, 0x59, 0xC1, 0xED, 0x33, 0x57, 0x38, 0x41, - 0x07, - 0x98, 0x75, 0x5A, 0xFD, 0xB7, 0x9F, 0x17, 0x97, 0xCF, 0x02, 0x2E, - 0x70, - 0xC7, 0x96, 0x0F, 0x12, 0xCA, 0x68, 0x96, 0xD2, 0x7C, 0xFD, 0x24, - 0xA1, - 0x1C, 0xD3, 0x16, 0xDD, 0xE1, 0xFB, 0xCC, 0x1E, 0xA6, 0x15, 0xC5, - 0xC3, - 0x1F, 0xEC, 0x65, 0x6E, 0x46, 0x70, 0x78, 0xC8, 0x75, 0xFC, 0x50, - 0x9B, - 0x1E, 0xCB, 0x99, 0xC8, 0xB5, 0x6C, 0x2D, 0x87, 0x5C, 0x50, 0xE2, - 0x01, - 0x8B, 0x5B, 0x0F, 0xA3, 0x78, 0x60, 0x6E, 0xB6, 0x42, 0x5A, 0x25, - 0x33, - 0x83, 0x0F, 0x55, 0xFD, 0x21, 0xD6, 0x49, 0x01, 0x56, 0x15, 0xD4, - 0x9A, - 0x1D, 0x09, 0xE9, 0x51, 0x0F, 0x5F, 0x00, 0x03, 0x05, 0x04, 0x00, - 0xD0, - 0xBD, 0xAD, 0xE4, 0x04, 0x32, 0x75, 0x86, 0x75, 0xC8, 0x7D, 0x07, - 0x30, - 0xC3, 0x60, 0x98, 0x14, 0x67, 0xBA, 0xE1, 0xBE, 0xB6, 0xCC, 0x10, - 0x5A, - 0x3C, 0x1F, 0x36, 0x6B, 0xFD, 0xBE, 0xA1, 0x2E, 0x37, 0x84, 0x56, - 0x51, - 0x32, 0x38, 0xB8, 0xAD, 0x41, 0x4E, 0x52, 0xA2, 0xA9, 0x66, 0x1D, - 0x1D, - 0xF1, 0xDB, 0x6B, 0xB5, 0xF3, 0x3F, 0x69, 0x06, 0x16, 0x61, 0x07, - 0x55, - 0x6C, 0x81, 0x32, 0x24, 0x33, 0x0B, 0x30, 0x93, 0x2D, 0xB7, 0xC8, - 0xCC, - 0x82, 0x25, 0x67, 0x2D, 0x7A, 0xE2, 0x4A, 0xF2, 0x46, 0x97, 0x50, - 0xE5, - 0x39, 0xB6, 0x61, 0xEA, 0x64, 0x75, 0xD2, 0xE0, 0x3C, 0xD8, 0xD3, - 0x83, - 0x8D, 0xC4, 0xA8, 0xAC, 0x4A, 0xFD, 0x21, 0x35, 0x36, 0xFE, 0x3E, - 0x96, - 0xEC, 0x9D, 0x0A, 0xEA, 0x65, 0x16, 0x4B, 0x57, 0x6E, 0x01, 0xB3, - 0x7A, - 0x8D, 0xCA, 0x89, 0xF2, 0xB2, 0x57, 0xD0, 0x88, 0x4E, 0x04, 0x18, - 0x11, - 0x02, 0x00, 0x06, 0x05, 0x02, 0x3C, 0x4A, 0xC5, 0x6F, 0x00, 0x12, - 0x09, - 0x10, 0xBD, 0x57, 0x2C, 0xDC, 0xCC, 0xC0, 0x7C, 0x35, 0x07, 0x65, - 0x47, - 0x50, 0x47, 0x00, 0x01, 0x01, 0x75, 0x66, 0x00, 0x9F, 0x60, 0x1E, - 0x1F, - 0x99, 0xE0, 0xB0, 0x7C, 0x77, 0xE6, 0x7F, 0x3E, 0xEC, 0xA1, 0xE1, - 0x9F, - 0x94, 0x63, 0xD3, 0x73, 0x67, 0x00, 0x9F, 0x6A, 0xC6, 0x9E, 0xB4, - 0x11, - 0x9A, 0x6F, 0xFB, 0xF4, 0x49, 0xE7, 0xD1, 0x54, 0xD8, 0x2E, 0x05, - 0xD4, - 0x08, 0x61, 0xDB -}; - -/* The ID of a key known to be in the above keyring. */ -static const gnutls_openpgp_keyid_t id_in_keyring = - /* "Dr. Who", first key in the keyring */ -{ 0x35, 0x14, 0x5c, 0xea, - 0xa7, 0xd9, 0x3c, 0x3f -}; - -static const gnutls_openpgp_keyid_t id2_in_keyring = - /* OpenCDK test key, second key in the keyring */ -{ 0xbd, 0x57, 0x2c, 0xdc, - 0xcc, 0xc0, 0x7c, 0x35 -}; - -static const gnutls_openpgp_keyid_t id_not_in_keyring = - { 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 -}; - - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "%d| %s", level, str); -} - -void doit(void) -{ - gnutls_openpgp_keyring_t keyring; - gnutls_openpgp_crt_t crt; - gnutls_datum_t data; - gnutls_datum_t txt; - int ret; - - ret = global_init(); - if (ret < 0) - fail("init %d\n", ret); - - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(2); - - ret = gnutls_openpgp_keyring_init(&keyring); - if (ret < 0) - fail("keyring-init %d\n", ret); - - data.data = raw_keyring; - data.size = sizeof(raw_keyring) / sizeof(raw_keyring[0]); - ret = gnutls_openpgp_keyring_import(keyring, &data, - GNUTLS_OPENPGP_FMT_RAW); - if (ret < 0) - fail("keyring-import %d\n", ret); - - ret = gnutls_openpgp_keyring_get_crt_count(keyring); - if (ret != 2) { - fail("gnutls_openpgp_keyring_get_crt_count: %d\n", ret); - } - - ret = - gnutls_openpgp_keyring_check_id(keyring, id_not_in_keyring, 0); - if (ret == 0) - fail("keyring-check-id (not-in-keyring) %d\n", ret); - - ret = gnutls_openpgp_keyring_check_id(keyring, id_in_keyring, 0); - if (ret != 0) - fail("keyring-check-id first key %d\n", ret); - - ret = gnutls_openpgp_keyring_check_id(keyring, id2_in_keyring, 0); - if (ret != 0) - fail("keyring-check-id second key %d\n", ret); - - ret = gnutls_openpgp_keyring_get_crt(keyring, 0, &crt); - if (ret != 0) { - fail("gnutls_openpgp_keyring_get_crt1: %d\n", ret); - } - - ret = gnutls_openpgp_crt_print(crt, GNUTLS_CRT_PRINT_ONELINE, &txt); - if (ret != 0) { - fail("gnutls_openpgp_crt_print1: %d\n", ret); - } else if (debug) { - success("%s\n", (char*)txt.data); - } - gnutls_free(txt.data); - gnutls_openpgp_crt_deinit(crt); - - /* second cert */ - ret = gnutls_openpgp_keyring_get_crt(keyring, 1, &crt); - if (ret != 0) { - fail("gnutls_openpgp_keyring_get_crt2: %d\n", ret); - } - - ret = gnutls_openpgp_crt_print(crt, GNUTLS_CRT_PRINT_ONELINE, &txt); - if (ret != 0) { - fail("gnutls_openpgp_crt_print2: %d\n", ret); - } else if (debug) { - success("%s\n", (char*)txt.data); - } - gnutls_free(txt.data); - gnutls_openpgp_crt_deinit(crt); - if (debug) - success("done\n"); - - gnutls_openpgp_keyring_deinit(keyring); - gnutls_global_deinit(); -} - -/* Local Variables: - coding: latin-1 - End: - */ diff --git a/tests/openpgp_test.c b/tests/openpgp_test.c deleted file mode 100644 index ee9522f2e9..0000000000 --- a/tests/openpgp_test.c +++ /dev/null @@ -1,159 +0,0 @@ -/** t-openpgp.c -- OpenPGP regression test **/ - -#include "gnutls_int.h" -#include "errors.h" -#include "mpi.h" -#include "cert.h" -#include "datum.h" -#include "global.h" -#include "auth/cert.h" -#include "openpgp.h" - -#include -#include -#include -#include -#include - -static const char *get_pkalgo(int algo) -{ - switch (algo) { - case GNUTLS_PK_DSA: - return "DSA"; - case GNUTLS_PK_RSA: - return "RSA"; - } - return NULL; -} - -static const char *get_pktime(long timestamp) -{ - static char buf[128]; - struct tm *tb; - - tb = localtime(×tamp); - sprintf(buf, "%04d-%02d-%02d", tb->tm_year + 1900, tb->tm_mon + 1, - tb->tm_mday); - return buf; -} - -int -get_pubkey(gnutls_datum_t * pk, const gnutls_datum_t * kr, - unsigned long kid) -{ - unsigned char buf[4]; - - buf[0] = kid >> 24; - buf[1] = kid >> 16; - buf[2] = kid >> 8; - buf[3] = kid; - return gnutls_openpgp_get_key(pk, kr, KEY_ATTR_SHORT_KEYID, buf); -} - - -int main(int argc, char **argv) -{ - gnutls_certificate_credentials ctx; - gnutls_datum_t dat, xml, pk; - gnutls_openpgp_name uid; - gnutls_privkey *pkey; - gnutls_cert *cert; - unsigned char fpr[20], keyid[8]; - char *s, *t; - size_t fprlen = 0; - int rc, nbits = 0, i; - - rc = gnutls_certificate_allocate_credentials(&ctx); - assert(rc == 0); - - s = "../doc/credentials/openpgp/cli_ring.gpg"; - rc = gnutls_certificate_set_openpgp_keyring_file(ctx, s); - assert(rc == 0); - - s = "../doc/credentials/openpgp/pub.asc"; - t = "../doc/credentials/openpgp/sec.asc"; - rc = gnutls_certificate_set_openpgp_key_file(ctx, s, t); - assert(rc == 0); - - dat = ctx->cert_list[0]->raw; - assert(ctx->cert_list[0]); - printf("Key v%d\n", gnutls_openpgp_extract_key_version(&dat)); - rc = gnutls_openpgp_extract_key_name(&dat, 1, &uid); - assert(rc == 0); - printf("userID %s\n", uid.name); - - rc = gnutls_openpgp_extract_key_pk_algorithm(&dat, &nbits); - printf("pk-algorithm %s %d bits\n", get_pkalgo(rc), nbits); - - rc = gnutls_openpgp_extract_key_creation_time(&dat); - printf("creation time %s\n", get_pktime(rc)); - - rc = gnutls_openpgp_extract_key_expiration_time(&dat); - printf("expiration time %lu\n", rc); - - printf("key fingerprint: "); - rc = gnutls_openpgp_fingerprint(&dat, fpr, &fprlen); - assert(rc == 0); - for (i = 0; i < fprlen / 2; i++) - printf("%02X%02X ", fpr[2 * i], fpr[2 * i + 1]); - printf("\n"); - - printf("key id: "); - rc = gnutls_openpgp_extract_key_id(&dat, keyid); - assert(rc == 0); - for (i = 0; i < 8; i++) - printf("%02X", keyid[i]); - printf("\n\n"); - - printf("Check MPIs\n"); - cert = ctx->cert_list[0]; - printf("number of certs %d\n", *ctx->cert_list_length); - assert(*ctx->cert_list_length == 1); - printf("number of items %d\n", cert->params_size); - for (i = 0; i < cert->params_size; i++) { - nbits = gcry_mpi_get_nbits(cert->params[i]); - printf("mpi %d %d bits\n", i, nbits); - } - - printf("\nCheck key\n"); - rc = gnutls_openpgp_verify_key(NULL, &ctx->keyring, &dat, 1); - printf("certifiacte status...%d\n", rc); - - printf("\nSeckey\n"); - pkey = ctx->pkey; - assert(pkey); - assert(pkey->params_size); - nbits = gcry_mpi_get_nbits(pkey->params[0]); - rc = pkey->pk_algorithm; - printf("pk-algorithm %s %d bits\n", get_pkalgo(rc), nbits); - printf("number of items %d\n", pkey->params_size); - for (i = 0; i < pkey->params_size; i++) { - nbits = gcry_mpi_get_nbits(pkey->params[i]); - printf("mpi %d %d bits\n", i, nbits); - } - - printf("\nGet public key\n"); - rc = get_pubkey(&pk, &ctx->keyring, 0xA7D93C3F); - assert(rc == 0); - - printf("key fingerprint: "); - gnutls_openpgp_fingerprint(&pk, fpr, &fprlen); - for (i = 0; i < fprlen / 2; i++) - printf("%02X%02X ", fpr[2 * i], fpr[2 * i + 1]); - printf("\n"); - _gnutls_free_datum(&pk); - -#if 0 - rc = gnutls_openpgp_key_to_xml(&dat, &xml, 1); - printf("rc=%d\n", rc); - assert(rc == 0); - xml.data[xml.size] = '\0'; - printf("%s\n", xml.data); - _gnutls_free_datum(&xml); -#endif - - _gnutls_free_datum(&dat); - gnutls_certificate_free_credentials(ctx); - - return 0; -} diff --git a/tests/openpgpself.c b/tests/openpgpself.c deleted file mode 100644 index d255a80704..0000000000 --- a/tests/openpgpself.c +++ /dev/null @@ -1,613 +0,0 @@ -/* - * Copyright (C) 2004-2012 Free Software Foundation, Inc. - * Copyright (C) 2013 Adam Sampson - * - * Author: Simon Josefsson - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -/* Parts copied from GnuTLS example programs. */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#if defined(_WIN32) - -/* socketpair isn't supported on Win32. */ -int main(int argc, char **argv) -{ - exit(77); -} - -#else - -#include -#include -#include -#if !defined(_WIN32) -#include -#endif -#include -#include -#include - -#include "utils.h" - -#include "ex-session-info.c" -#include "ex-x509-info.c" - -pid_t child; - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "%s |<%d>| %s", child ? "server" : "client", level, - str); -} - -/* A very basic TLS client, with anonymous authentication. - */ - -#define SESSIONS 2 -#define MAX_BUF 1024 -#define MSG "Hello TLS" - -static unsigned char cert_txt[] = - "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" - "Version: GnuPG v1.4.10 (GNU/Linux)\n" - "Comment: Test key for GnuTLS\n" - "\n" - "mI0ETYD2OQEEAMHmDBtJii82NbWuYcvEWCYnwa7GTcz2PYikYCcq/t5nkyb5Bfmx\n" - "mh2hpto7Lr5d1L/shvab1gXCcrWEAREgNNk9LiowtLuTHBdeOFlJ1u1P1rvdFVKq\n" - "2a6ft77Q5VltUDKPgTqz4NWH2KUlLfTvwJDnq2DxYsbwVpBDURuUocXhABEBAAG0\n" - "CVRlc3QgdXNlcoi4BBMBAgAiBQJNgPY5AhsvBgsJCAcDAgYVCAIJCgsEFgIDAQIe\n" - "AQIXgAAKCRAMTrFUBnAKMOVDA/9GEw7AokwJSGvHREriXcvMMKp6c6SYqa0TVsTg\n" - "Gh3ENu/KTfGJIM5p+zR6xy+5u5DfP5qLrRdCnoczncR5w9fn3RsP8ju/Ga5z23Q+\n" - "6XxRKRkXjE/E0ZFulbuaBom/nhrOmmfqKe7Mor9Y4QwzL2wL3sf6jWLglwdFYS/X\n" - "W3wqjLkBogRNgPY5EQQApafdUhCAHj8LLXYCqOXRSPZbKzvB55NwWrdvnod0seUW\n" - "aiTSWBlKnSvIomdcII/E3bjdngK4fTJ+Xr5pEJuzBnW3w787r6jBJSq2Lp0T9SP4\n" - "CBzd0gXcOQkILvX1VzxAsYVULJA0mhAR3IHFcywjX6ENKuvs7ApniBNoXqi6d3cA\n" - "oIAzYKrjyZ+guM4IUlRRrB8abx5vBACJPV+d15GYgzt1d8zLvOl/mzs85Twj2SB1\n" - "ZqzK6H/6QxQkEZpP/UVFpXaUGUly3nGEqg1yw4cgqW4SSxgLFz6B23Si+cTsssE6\n" - "CYziN1UI6NjxkoG/npMm0wRp7Z+KylEolAdbFBAAprORkt58CrGgpYe8O/35+PWc\n" - "J9rjhwxxkQP/VCpbZLugkL4XHWGWFGG35S6k9F3xPPTPoX9Zoud+0bOeoOK5RQHo\n" - "e99sVNN4hxxPTM/rJXfTTZUoB6o84yulTSxb6C9ueHotDV0eB9QX1ov/ltmwy3XS\n" - "fXEyWtI0CDBuZgEww26Up0pzg4XTBYMkmXrxx3J9ihcCIYyAHoE13EWI5wQYAQIA\n" - "CQUCTYD2OQIbIgBSCRAMTrFUBnAKMEcgBBkRAgAGBQJNgPY5AAoJEPMP1CPBQ+e6\n" - "3fQAnR7HWLnQTbxCIhlBTZiuJv2HC6cbAJwJ6VsSU6ADCkMuGT3LLNo+UnckK+4i\n" - "BACcivWsW40ddtEQ0wno1uP65TmKq3aJrdODXTAnqkmNQKL7X7Fz+nmEWiS+LBH8\n" - "lRvAaeRPX2LV+DCJDbAPrYd7LkOHyuM0I+ZApto5cjem/EnO7op2QwkCCa6oUp0l\n" - "YA6i6aGF2KGx7WQwi2URIMPhihpOvAbkjfszYpFL4VP5wQ==\n" - "=ydIq\n" "-----END PGP PUBLIC KEY BLOCK-----\n"; - -const gnutls_datum_t cert = { cert_txt, sizeof(cert_txt) }; - -static unsigned char key_txt[] = - "-----BEGIN PGP PRIVATE KEY BLOCK-----\n" - "Version: GnuPG v1.4.10 (GNU/Linux)\n" - "Comment: Test key for GnuTLS\n" - "\n" - "lQHYBE2A9jkBBADB5gwbSYovNjW1rmHLxFgmJ8Guxk3M9j2IpGAnKv7eZ5Mm+QX5\n" - "sZodoabaOy6+XdS/7Ib2m9YFwnK1hAERIDTZPS4qMLS7kxwXXjhZSdbtT9a73RVS\n" - "qtmun7e+0OVZbVAyj4E6s+DVh9ilJS3078CQ56tg8WLG8FaQQ1EblKHF4QARAQAB\n" - "AAP9HJePsXZmqg+UW/Ya9bE+TmIObXdQgajN6hhTFXOBocokKNsPxoIp97Sepg+U\n" - "FP5BIQv/2t2f8bl6sMmGXsAhCqVzRxGuA+9USx8OfTHSdgIKT5T2VFSGJaU4df3Q\n" - "rstUY3dcvl6VKpDDZic1T7u2ANzaWM2u+pwooKC4cc/k9AECAMNDvrKF3FC7R9sd\n" - "TagVrrfde0RZuwhbGW9ghslkY893EelXQL/lbBI20crPdrsdDpMe370KO2bQLqwO\n" - "HGAxIYUCAP41iC7KReYvysLZ34tM55ZFE7BPsMcXUeu6hkYOMDZYvE+x4KV6Umo+\n" - "Civd4qD9dESR3WOcI9MwALUdNTxQU60B/21MrWjajY1m1vv7l2slJon5eSrH6BkH\n" - "Aj173uZca8HbgqSF1xOQW8ZGa6KInN3wHe+vPOXAgzlku/4XHgEYVVGeq7QJVGVz\n" - "dCB1c2VyiLgEEwECACIFAk2A9jkCGy8GCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheA\n" - "AAoJEAxOsVQGcAow5UMD/0YTDsCiTAlIa8dESuJdy8wwqnpzpJiprRNWxOAaHcQ2\n" - "78pN8Ykgzmn7NHrHL7m7kN8/moutF0KehzOdxHnD1+fdGw/yO78ZrnPbdD7pfFEp\n" - "GReMT8TRkW6Vu5oGib+eGs6aZ+op7syiv1jhDDMvbAvex/qNYuCXB0VhL9dbfCqM\n" - "nQG7BE2A9jkRBAClp91SEIAePwstdgKo5dFI9lsrO8Hnk3Bat2+eh3Sx5RZqJNJY\n" - "GUqdK8iiZ1wgj8TduN2eArh9Mn5evmkQm7MGdbfDvzuvqMElKrYunRP1I/gIHN3S\n" - "Bdw5CQgu9fVXPECxhVQskDSaEBHcgcVzLCNfoQ0q6+zsCmeIE2heqLp3dwCggDNg\n" - "quPJn6C4zghSVFGsHxpvHm8EAIk9X53XkZiDO3V3zMu86X+bOzzlPCPZIHVmrMro\n" - "f/pDFCQRmk/9RUWldpQZSXLecYSqDXLDhyCpbhJLGAsXPoHbdKL5xOyywToJjOI3\n" - "VQjo2PGSgb+ekybTBGntn4rKUSiUB1sUEACms5GS3nwKsaClh7w7/fn49Zwn2uOH\n" - "DHGRA/9UKltku6CQvhcdYZYUYbflLqT0XfE89M+hf1mi537Rs56g4rlFAeh732xU\n" - "03iHHE9Mz+sld9NNlSgHqjzjK6VNLFvoL254ei0NXR4H1BfWi/+W2bDLddJ9cTJa\n" - "0jQIMG5mATDDbpSnSnODhdMFgySZevHHcn2KFwIhjIAegTXcRQAAn2PK9kOqhjOJ\n" - "KU5iaagnF176FwhdCO2I5wQYAQIACQUCTYD2OQIbIgBSCRAMTrFUBnAKMEcgBBkR\n" - "AgAGBQJNgPY5AAoJEPMP1CPBQ+e63fQAniK5kU+dwIbkD+OHJHkC73V6v4D8AJ0Z\n" - "+GBYj4nhKEX21QXfj55F3Zpg1e4iBACcivWsW40ddtEQ0wno1uP65TmKq3aJrdOD\n" - "XTAnqkmNQKL7X7Fz+nmEWiS+LBH8lRvAaeRPX2LV+DCJDbAPrYd7LkOHyuM0I+ZA\n" - "pto5cjem/EnO7op2QwkCCa6oUp0lYA6i6aGF2KGx7WQwi2URIMPhihpOvAbkjfsz\n" - "YpFL4VP5wQ==\n" "=zzoN\n" "-----END PGP PRIVATE KEY BLOCK-----\n"; - -const gnutls_datum_t key = { key_txt, sizeof(key_txt) }; - - -static void client(int sds[]) -{ - int ret, ii, j; - gnutls_session_t session; - char buffer[MAX_BUF + 1]; - gnutls_certificate_credentials_t xcred; - - global_init(); - - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(9); - - gnutls_certificate_allocate_credentials(&xcred); - - /* sets the trusted cas file - */ - if (debug) - success("Setting key files...\n"); - - ret = gnutls_certificate_set_openpgp_key_mem(xcred, &cert, &key, - GNUTLS_OPENPGP_FMT_BASE64); - if (ret < 0) { - fail("Could not set key files...\n"); - return; - } - - for (j = 0; j < SESSIONS; j++) { - int sd = sds[j]; - - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); - - /* Use default priorities */ - gnutls_priority_set_direct(session, - "NORMAL:+CTYPE-OPENPGP:+DHE-DSS:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256", NULL); - - /* put the x509 credentials to the current session - */ - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, - xcred); - - gnutls_transport_set_int(session, sd); - - /* Perform the TLS handshake - */ - ret = gnutls_handshake(session); - - if (ret < 0) { - fail("client: Handshake %d failed\n", j); - gnutls_perror(ret); - goto end; - } else if (debug) { - success("client: Handshake %d was completed\n", j); - } - - if (debug) - success("client: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - /* see the Getting peer's information example */ - if (debug) - print_info(session); - - gnutls_record_send(session, MSG, strlen(MSG)); - - ret = gnutls_record_recv(session, buffer, MAX_BUF); - if (ret == 0) { - if (debug) - success - ("client: Peer has closed the TLS connection\n"); - goto end; - } else if (ret < 0) { - fail("client: Error: %s\n", gnutls_strerror(ret)); - goto end; - } - - if (debug) { - printf("- Received %d bytes: ", ret); - for (ii = 0; ii < ret; ii++) { - fputc(buffer[ii], stdout); - } - fputs("\n", stdout); - } - - gnutls_bye(session, GNUTLS_SHUT_RDWR); - - close(sd); - - gnutls_deinit(session); - - } - - end: - - gnutls_certificate_free_credentials(xcred); - - gnutls_global_deinit(); -} - -/* This is a sample TLS 1.0 echo server, using X.509 authentication. - */ - -#define MAX_BUF 1024 -#define DH_BITS 1024 - -/* These are global */ -gnutls_certificate_credentials_t pgp_cred; - -static gnutls_session_t initialize_tls_session(void) -{ - gnutls_session_t session; - - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL:+CTYPE-OPENPGP:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256", NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, pgp_cred); - - /* request client certificate if any. - */ - gnutls_certificate_server_set_request(session, - GNUTLS_CERT_REQUEST); - - gnutls_dh_set_prime_bits(session, DH_BITS); - - return session; -} - -static gnutls_dh_params_t dh_params; - -static int generate_dh_params(void) -{ - const gnutls_datum_t p3 = { (void *) pkcs3, strlen(pkcs3) }; - /* Generate Diffie-Hellman parameters - for use with DHE - * kx algorithms. These should be discarded and regenerated - * once a day, once a week or once a month. Depending on the - * security requirements. - */ - gnutls_dh_params_init(&dh_params); - return gnutls_dh_params_import_pkcs3(dh_params, &p3, - GNUTLS_X509_FMT_PEM); -} - -int err, ret; -char topbuf[512]; -gnutls_session_t session; -char buffer[MAX_BUF + 1]; -int optval = 1; - -static unsigned char server_crt_txt[] = - "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" - "Version: GnuPG v1.4.6 (GNU/Linux)\n" - "\n" - "mNEER2PogwEGINdIR4u5PR4SwADWwj/ztgtoi7XVbmlfbQTHpBYFxTSC88pISSNy\n" - "V/rgnlqunYP77F7aHL4KUReN3v9sKw01xSGEfox/JmlqUUg6CVvTjdeLfkuVIBnH\n" - "j+2KMlaxezp7IxtPaTXpXcSf8iOuVq7UX7p6tKbppKXO5GgmfA88VUVvGBs1/PQp\n" - "WKQdGrj+6I3RRmDN/hna1jGU/N23230Hbx+bu7g9cviiSh10ri7rdDhVJ67tRkRG\n" - "Usy3XO6dWC7EmzZlEO8AEQEAAbQQdGVzdDMuZ251dGxzLm9yZ4kBAAQTAQIAJgUC\n" - "R2PogwIbAwUJCWYBgAYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEKAh4/gImZBR\n" - "96QGH3E3zynETuQS3++hGMvMXq2mDJeT2e8964y/ifIOBpr2K2isuLYnrtGKyxi+\n" - "ZptyHv6ymR3bDvio50cjnoT/WK1onosOJvtijGBS+U/ooq3im7ExpeQYXc/zpYsX\n" - "OmB5m6BvdomUp2PMqdxsmOPoaRkSYx5R2Rlo/z3csodl6sp3k465Y/jg7L4gkxDz\n" - "XJM+CS1xMhcOF0gBhppqLnG67x0ow847Pydstzkw0sOqedkLPuScaHNnlAWQ7QH6\n" - "mbbpqHJwekS4jQRHiKV8AQQA0iZ81WXypLI4ZE2+hYfBCnfMVfQF/vPgvASxhwri\n" - "GDa9Zc2f/VfakfNiwZgHH6iCeppHBiP2jljnbuOsL6f1R+0FsnyTVwHbuEU7IU2y\n" - "+J0/s0z3wcx9sx8T7brP5z5F2hdagBsD9YFGCifHDAEew4mmAisY0i2QHVIuXJFj\n" - "4RMAEQEAAYkBhwQYAQIADwUCR4ilfAIbAgUJEOrPgACoCRCgIeP4CJmQUZ0gBBkB\n" - "AgAGBQJHiKV8AAoJEIN7b7QuD+F2AEcEAKAjhO9kSOE8UuwEOKlwsWL9LUUSkHJj\n" - "c/ca0asLAerzrHsldRAcwCbWkVxBBHySw2CLFjzpgdXhwRtsytMgHaapfAPbinAW\n" - "jCPIEJx2gDZeZnTgi4DVbZn5E3UzHGyL69MEoXr5t+vpiemQFd/nGD+h/Q2A76od\n" - "gvAryRvS1Soj8bcGHjUflayXGOSvaD8P2V5Vz0hS82QZcqWxD8qUBqbcB8atokmO\n" - "IYxhKyRmO58T5Ma+iaxBTUIwee+pBYDgdH6E2dh9xLlwwzZKaCcIRCQcObkLsMVo\n" - "fZJo+m0Xf8zI57NeQF+hXJhW7lIrWgQVr8IVp/lgo76acLHfL/t1n0Nhg4r2srz2\n" - "fpP2w5laQ0qImYLnZhGFHU+rJUyFaHfhD8/svN2LuZkO570pjV/K68EaHnEfk5b8\n" - "jWu/euohwcCwf20M1kTo3Bg=\n" - "=Xjon\n" "-----END PGP PUBLIC KEY BLOCK-----\n"; -const gnutls_datum_t server_crt = - { server_crt_txt, sizeof(server_crt_txt) }; - -static unsigned char server_key_txt[] = - "-----BEGIN PGP PRIVATE KEY BLOCK-----\n" - "Version: GnuPG v1.4.6 (GNU/Linux)\n" - "\n" - "lQLGBEdj6IMBBiDXSEeLuT0eEsAA1sI/87YLaIu11W5pX20Ex6QWBcU0gvPKSEkj\n" - "clf64J5arp2D++xe2hy+ClEXjd7/bCsNNcUhhH6MfyZpalFIOglb043Xi35LlSAZ\n" - "x4/tijJWsXs6eyMbT2k16V3En/Ijrlau1F+6erSm6aSlzuRoJnwPPFVFbxgbNfz0\n" - "KVikHRq4/uiN0UZgzf4Z2tYxlPzdt9t9B28fm7u4PXL4okoddK4u63Q4VSeu7UZE\n" - "RlLMt1zunVguxJs2ZRDvABEBAAEABhwMx6crpb75ko5gXl9gsYSMj9O/YyCvU7Fi\n" - "l8FnZ0dKMz3qs7jXyFlttLjh1DzYkXN6PAN5yp3+wnbK/e5eVeNSdo2WpJOwrVWO\n" - "7pcQovHoKklAjmU98olaRhpv6BBTK+0tGUFaRrmrrYuz2xnwf3+kIpt4ahYW2dr9\n" - "B+/pvBSVC/sv2+3PEQSsXlWCYVgkQ7WBN4GQdyjjxhQpcWdf8Z6unx4zuS3s7GGM\n" - "4WaDxmDNCFlTGdrKPQeogtS3LVF9OiRCOvIlAxDmDvnC3zAwO/IvDUHFED9x9hmK\n" - "MeVwCg8rwDMptVYN2hm+bjNzjV4pimUVd+w7edjEky0Jd/6tTH01CBUWxs9Pfup2\n" - "cQ9zkYcVz1bwcoqeyRzFCJgi6PiVT38QFEvyusoVkwMQ747D6p7y+R52MEcIvcLb\n" - "lBXhRviz3rW+Sch4+ohUPvBU41saM5B6UcOmhdPfdvPriI4qXwFxusGWt98NN3aW\n" - "Ns2/L9kMX/SWnN6Elfj5hrrExDZ2CE60uuvfj+O/uXfO8LUDENE4vQrC399KLbJw\n" - "uCaqjqLysYA9EY/Nv8RFGkk1UM4ViW8v1/95D95F9WqochSYH8Phr3br0chDxofb\n" - "rnm6dUPE8uiriNaKWdoiUNSuvumh9lVixmRI923+4imu3scq+rlJAZ20EHRlc3Qz\n" - "LmdudXRscy5vcmeJAQAEEwECACYFAkdj6IMCGwMFCQlmAYAGCwkIBwMCBBUCCAME\n" - "FgIDAQIeAQIXgAAKCRCgIeP4CJmQUfekBh9xN88pxE7kEt/voRjLzF6tpgyXk9nv\n" - "PeuMv4nyDgaa9itorLi2J67RissYvmabch7+spkd2w74qOdHI56E/1itaJ6LDib7\n" - "YoxgUvlP6KKt4puxMaXkGF3P86WLFzpgeZugb3aJlKdjzKncbJjj6GkZEmMeUdkZ\n" - "aP893LKHZerKd5OOuWP44Oy+IJMQ81yTPgktcTIXDhdIAYaaai5xuu8dKMPOOz8n\n" - "bLc5MNLDqnnZCz7knGhzZ5QFkO0B+pm26ahycHpEnQHXBEeIpXwBBADSJnzVZfKk\n" - "sjhkTb6Fh8EKd8xV9AX+8+C8BLGHCuIYNr1lzZ/9V9qR82LBmAcfqIJ6mkcGI/aO\n" - "WOdu46wvp/VH7QWyfJNXAdu4RTshTbL4nT+zTPfBzH2zHxPtus/nPkXaF1qAGwP1\n" - "gUYKJ8cMAR7DiaYCKxjSLZAdUi5ckWPhEwARAQABAAP3QKGVoNi52HXEN3ttUCyB\n" - "Q1CDurh0MLDQoHomY3MGfI4VByk2YKMb2el4IJqyHrUbBYjTpHY31W2CSIdWfoTU\n" - "DIik49CQaUpR13dJXEiG4d+nyETFutEalTQI4hMjABD9l1XvZP7Ll3YWmqN8Cam5\n" - "JY23YAy2Noqbc3AcEut4+QIA1zcv8EU1QVqOwjSybRdm6HKK/A2bMqnITeUR/ikm\n" - "IuU4lhijm/d1qS6ZBehRvvYa9MY4V7BGEQLWSlyc5aYJ/wIA+fmRv0lHSs78QSUg\n" - "uRbNv6Aa6CXEOXmG+TpIaf/RWrPmBpdG8AROBVo1wmwG8oQaIjeX3RjKXfL3HTDD\n" - "CxNg7QIA06tApdo2j1gr3IrroUwQ7yvi56ELB1Lv+W3WLN8lzCfQ6Fs+7IJRrC2R\n" - "0uzLMGOsSORGAFIbAuLIMpc6rHCeS50hiQGHBBgBAgAPBQJHiKV8AhsCBQkQ6s+A\n" - "AKgJEKAh4/gImZBRnSAEGQECAAYFAkeIpXwACgkQg3tvtC4P4XYARwQAoCOE72RI\n" - "4TxS7AQ4qXCxYv0tRRKQcmNz9xrRqwsB6vOseyV1EBzAJtaRXEEEfJLDYIsWPOmB\n" - "1eHBG2zK0yAdpql8A9uKcBaMI8gQnHaANl5mdOCLgNVtmfkTdTMcbIvr0wShevm3\n" - "6+mJ6ZAV3+cYP6H9DYDvqh2C8CvJG9LVKiPxtwYeNR+VrJcY5K9oPw/ZXlXPSFLz\n" - "ZBlypbEPypQGptwHxq2iSY4hjGErJGY7nxPkxr6JrEFNQjB576kFgOB0foTZ2H3E\n" - "uXDDNkpoJwhEJBw5uQuwxWh9kmj6bRd/zMjns15AX6FcmFbuUitaBBWvwhWn+WCj\n" - "vppwsd8v+3WfQ2GDivayvPZ+k/bDmVpDSoiZgudmEYUdT6slTIVod+EPz+y83Yu5\n" - "mQ7nvSmNX8rrwRoecR+TlvyNa7966iHBwLB/bQzWROjcGA==\n" - "=mZnW\n" "-----END PGP PRIVATE KEY BLOCK-----\n"; -const gnutls_datum_t server_key = - { server_key_txt, sizeof(server_key_txt) }; - -static unsigned char cert2048_txt[] = - "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" - "Version: GnuPG v1.4.10 (GNU/Linux)\n" - "Comment: Test key for GnuTLS\n" - "\n" - "mQMuBE1/6bQRCAD8TQlwbkkX3bLJvemSA/BqT/z0OrJsuXKFQqK5Pp0BRTwC4iCg\n" - "wnUFrr012up66YTzaA0aQpkf48gqxZ1XTGZtZ13+aAArChqKiffR7OS+BnROd+D3\n" - "NkPF0tWDAqRFsybIej1GcdSyPw+neExSfoeYzNpUW9oX2iLh5QZC/xt++kE8tOr8\n" - "BXiDW/+rudjf8Rc0ZI10vi12rb64eYd7szE49crS2YsjqarnncN+J7RX3jSifKrZ\n" - "XqP/F5s/0a1Nfd4xQU2fsnbQwiIuKTQjU6BHD/2ILnhZImEUn4KqZvbEt6yIJiLy\n" - "u+KerhTiuAhl+sx2DQf3EVxD8EpCwzFqXtF3AQD9Nf9OFJ2Cchwuz8Q5VDBoRFhP\n" - "4p/hGWqAsmRSZlxdQQf/Q5R15CMDtCrZnuSeptfgdZUfB0gi0aYeKE2TWto5JEVP\n" - "i24IXSF2l1qF9IM2i9Fv7FBwZuLQj6s+vOsq0TSATvaTGdCpvqKOCHKBZtfqD/rv\n" - "XJ5o3oEOtDzXdxrW1f8yVbSeWRGT2iNDPNYCnz4d+njAK1q21Qs1TRC/MKPP2EqB\n" - "fjy7VE0k4mFCOCLqfEnEh5hmBzegNo6+pq/i7VHuDG/w6oMUILsf+IM+JlRqeTtJ\n" - "iDDj6yVxBdW/0jSn8Wb2CeJ+S9Jf8zLeOaxtNuD9MbRG4KjnGzmh256FpA3S8E6x\n" - "ffx7LdqHGkIPEf9wFY5+7C70fbfLvIbYcFf6UdGofAf+I/NtpVMVm1ZbINIcky24\n" - "T0Y8NtYY4UsGaq5Lv+YQZc8DzGvjTCUMVcfPTn0g2C2l/nv3H+Po5QOjXgCGmq2U\n" - "NtoJ/GYr/lrN0j7GCLXWyJCWpAv0VqkzFX5HtiuC1/3R8ONpb0wtGcKaVPYm3jZM\n" - "fZLKlqG+yZABldKgVOoTmvWEsGQhP+OKho8grmiaAqOVHSfd9qofMH/V53wH03JB\n" - "E5BqdQR6mP2Jq/q8OLlg8VrlSWLi+0dFP1QrNN0u87UBQ9FtpYnRnF0k/3tFdTQL\n" - "GfjE9BdBO3vwSPg8EEQKUDxgeL5RoQT1ANi/iXBxfYoULVNQysTPwXIg9YauTU0f\n" - "V7QJbG9jYWxob3N0iHoEExEIACIFAk1/6bQCGyMGCwkIBwMCBhUIAgkKCwQWAgMB\n" - "Ah4BAheAAAoJEHv/KcoLO9+4imwA/3z+QK0W9yffh/yFKRYYyfyLyF+q/ECKhXn8\n" - "fb4TUc9CAP9fGN3pHujv2Upk9d3igY2w7jIuO78PA8dRfIKs5QEXFrkDLgRNf+m0\n" - "EQgAqJc+Kyx+F5Ol4nTQlddVhw0sLUeM+bOWvxIiZUSjkwFQ4Qu32a1JelJ8ne12\n" - "pBIwvXA9/oa/JyDh14iFoxO4u1aBJUheVo0yeRupjo92gU6bwbLTZHJlTqRo0vne\n" - "dYpPCnVez5CNSJB9TMugZLygG4/WO3zcBjLgkR/wrebb3tKAmS/RMUuBpFxGjNnL\n" - "MZOzCqB4LPFQECErOWpg6ddwLXwtP4VjaBE9RYP1uVP1Bhyc28LMQjQW1l5vzVcN\n" - "0DQmyBA6WX2QBeiVrALrxGq1CdcACIyYw6zzch6J2pB5IumH+IOHQMc4r67dZjIS\n" - "ISS8T9Xit251J0ssilw4m3rZzwEApK4jhYn2R1KS2ihLlb+7h01YVcUA1sG6Kj4s\n" - "Oxk3zlEH/RWZurelE5gMT6M3GGe6WTkE1PEBtlnvZvMQu+rllxe/rIQkp5JkHOjP\n" - "tEX/Wi68ET7yMKDjIQq9joFnRI70scPf3a2MHwc0OL7PGdf13PUmUwOwlqcP4Rme\n" - "kA2MpDDl9Qn9pT40fUZLoR0lVusJNbrC8fW9MIcg/JAFp7U/zxnbZUESTF0+k486\n" - "bF6q5QK4kaHjoUOvzX0encs+0xY7tAY+cSgQkn37z2G/K5OUMQXUQ7hQ+LRvQNM/\n" - "qXRjwsBuW+4D+4bglGLJxT9PINiZ8cgbfCF6E9B+QmsY7KSVYYB955LsCi+8G/tq\n" - "wdmHDYAKV9OXZfb54UKqLh3R0JkdMpEH/0rPbsxhwFXLE+ixAs5HTu0ILXwj6uCR\n" - "9PGBR6skB8ONfaXAtq+92O/4aegCxbC9SNWuTvYBKkBdMGSGcO7LwvwjUA2kujEV\n" - "66In56DCQJS+K19AR+fRYPro8+MavAQlirEK1uOjidoKykVziqO7B6Z4DAaZZBDP\n" - "h8HwYANauwlfapGuZ5/rLPNCFi5VEJjX/9t0ECCgPOOEK8qWA5ljw35K6W/3CVX7\n" - "hKNflAx1BGBr0GfrJo/EsneeBEsKPk/hge5uPr+wkDqdXq/7qxCSHhT3OQpiOW65\n" - "dyBX/44XAVQaWtf6DJc84nWDYsCgscEZzGAUyBY8Fw9S7We5OFLNcYWIwQQYEQgA\n" - "CQUCTX/ptAIbIgBqCRB7/ynKCzvfuF8gBBkRCAAGBQJNf+m0AAoJEEPv0WrPxcc9\n" - "aJwA/0zWQ0RfRhlC1nbf7ISEOF36WQjslGKXjf6z6rSNgphoAP4119FDX9jaW0B8\n" - "HL9p+XRZTOTSo5GMLUTH5zo+zpTbB2cxAP9moc/i1z2D8AXTnUk7YfSm+o7rFThu\n" - "2Cx0oO7h1g0MjQD6A/6e68DhK9altb/xqtHeG0jbLmvFRtkC0zu7WZjvSbc=\n" - "=v3gg\n" "-----END PGP PUBLIC KEY BLOCK-----\n"; - -const gnutls_datum_t cert2048 = { cert2048_txt, sizeof(cert2048_txt) }; - -static unsigned char key2048_txt[] = - "-----BEGIN PGP PRIVATE KEY BLOCK-----\n" - "Version: GnuPG v1.4.10 (GNU/Linux)\n" - "Comment: Test key for GnuTLS\n" - "\n" - "lQNTBE1/6bQRCAD8TQlwbkkX3bLJvemSA/BqT/z0OrJsuXKFQqK5Pp0BRTwC4iCg\n" - "wnUFrr012up66YTzaA0aQpkf48gqxZ1XTGZtZ13+aAArChqKiffR7OS+BnROd+D3\n" - "NkPF0tWDAqRFsybIej1GcdSyPw+neExSfoeYzNpUW9oX2iLh5QZC/xt++kE8tOr8\n" - "BXiDW/+rudjf8Rc0ZI10vi12rb64eYd7szE49crS2YsjqarnncN+J7RX3jSifKrZ\n" - "XqP/F5s/0a1Nfd4xQU2fsnbQwiIuKTQjU6BHD/2ILnhZImEUn4KqZvbEt6yIJiLy\n" - "u+KerhTiuAhl+sx2DQf3EVxD8EpCwzFqXtF3AQD9Nf9OFJ2Cchwuz8Q5VDBoRFhP\n" - "4p/hGWqAsmRSZlxdQQf/Q5R15CMDtCrZnuSeptfgdZUfB0gi0aYeKE2TWto5JEVP\n" - "i24IXSF2l1qF9IM2i9Fv7FBwZuLQj6s+vOsq0TSATvaTGdCpvqKOCHKBZtfqD/rv\n" - "XJ5o3oEOtDzXdxrW1f8yVbSeWRGT2iNDPNYCnz4d+njAK1q21Qs1TRC/MKPP2EqB\n" - "fjy7VE0k4mFCOCLqfEnEh5hmBzegNo6+pq/i7VHuDG/w6oMUILsf+IM+JlRqeTtJ\n" - "iDDj6yVxBdW/0jSn8Wb2CeJ+S9Jf8zLeOaxtNuD9MbRG4KjnGzmh256FpA3S8E6x\n" - "ffx7LdqHGkIPEf9wFY5+7C70fbfLvIbYcFf6UdGofAf+I/NtpVMVm1ZbINIcky24\n" - "T0Y8NtYY4UsGaq5Lv+YQZc8DzGvjTCUMVcfPTn0g2C2l/nv3H+Po5QOjXgCGmq2U\n" - "NtoJ/GYr/lrN0j7GCLXWyJCWpAv0VqkzFX5HtiuC1/3R8ONpb0wtGcKaVPYm3jZM\n" - "fZLKlqG+yZABldKgVOoTmvWEsGQhP+OKho8grmiaAqOVHSfd9qofMH/V53wH03JB\n" - "E5BqdQR6mP2Jq/q8OLlg8VrlSWLi+0dFP1QrNN0u87UBQ9FtpYnRnF0k/3tFdTQL\n" - "GfjE9BdBO3vwSPg8EEQKUDxgeL5RoQT1ANi/iXBxfYoULVNQysTPwXIg9YauTU0f\n" - "VwAA/RnOgKKKmJo6d4E+mAa0Pl1QKayWKgSsDoww0kUoUTgHDU20CWxvY2FsaG9z\n" - "dIh6BBMRCAAiBQJNf+m0AhsjBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRB7\n" - "/ynKCzvfuIpsAP98/kCtFvcn34f8hSkWGMn8i8hfqvxAioV5/H2+E1HPQgD/Xxjd\n" - "6R7o79lKZPXd4oGNsO4yLju/DwPHUXyCrOUBFxadA1METX/ptBEIAKiXPissfheT\n" - "peJ00JXXVYcNLC1HjPmzlr8SImVEo5MBUOELt9mtSXpSfJ3tdqQSML1wPf6Gvycg\n" - "4deIhaMTuLtWgSVIXlaNMnkbqY6PdoFOm8Gy02RyZU6kaNL53nWKTwp1Xs+QjUiQ\n" - "fUzLoGS8oBuP1jt83AYy4JEf8K3m297SgJkv0TFLgaRcRozZyzGTswqgeCzxUBAh\n" - "KzlqYOnXcC18LT+FY2gRPUWD9blT9QYcnNvCzEI0FtZeb81XDdA0JsgQOll9kAXo\n" - "lawC68RqtQnXAAiMmMOs83IeidqQeSLph/iDh0DHOK+u3WYyEiEkvE/V4rdudSdL\n" - "LIpcOJt62c8BAKSuI4WJ9kdSktooS5W/u4dNWFXFANbBuio+LDsZN85RB/0Vmbq3\n" - "pROYDE+jNxhnulk5BNTxAbZZ72bzELvq5ZcXv6yEJKeSZBzoz7RF/1ouvBE+8jCg\n" - "4yEKvY6BZ0SO9LHD392tjB8HNDi+zxnX9dz1JlMDsJanD+EZnpANjKQw5fUJ/aU+\n" - "NH1GS6EdJVbrCTW6wvH1vTCHIPyQBae1P88Z22VBEkxdPpOPOmxequUCuJGh46FD\n" - "r819Hp3LPtMWO7QGPnEoEJJ9+89hvyuTlDEF1EO4UPi0b0DTP6l0Y8LAblvuA/uG\n" - "4JRiycU/TyDYmfHIG3whehPQfkJrGOyklWGAfeeS7AovvBv7asHZhw2AClfTl2X2\n" - "+eFCqi4d0dCZHTKRB/9Kz27MYcBVyxPosQLOR07tCC18I+rgkfTxgUerJAfDjX2l\n" - "wLavvdjv+GnoAsWwvUjVrk72ASpAXTBkhnDuy8L8I1ANpLoxFeuiJ+egwkCUvitf\n" - "QEfn0WD66PPjGrwEJYqxCtbjo4naCspFc4qjuwemeAwGmWQQz4fB8GADWrsJX2qR\n" - "rmef6yzzQhYuVRCY1//bdBAgoDzjhCvKlgOZY8N+Sulv9wlV+4SjX5QMdQRga9Bn\n" - "6yaPxLJ3ngRLCj5P4YHubj6/sJA6nV6v+6sQkh4U9zkKYjluuXcgV/+OFwFUGlrX\n" - "+gyXPOJ1g2LAoLHBGcxgFMgWPBcPUu1nuThSzXGFAAEAgj6e0tgxENBORrJkBCl6\n" - "xfV6iTNXa3HDArTNTyURRzEN0YjBBBgRCAAJBQJNf+m0AhsiAGoJEHv/KcoLO9+4\n" - "XyAEGREIAAYFAk1/6bQACgkQQ+/Ras/Fxz1onAD/W3lWDopZrH9R66tiyjYOX4sV\n" - "b1SoPlKRJngsHouxc4oA/RYoFGrhoY+nL22eza/Ku/SUnVrufZ/jIvQakhpmrLD/\n" - "ZzEBAJ1w0ez3wUJbsfGlWBkb16pYpIh68/qvTTj84v5N0picAQC1p8JjouN88BJw\n" - "9UquUquXdK1TY965biHIQ70uaOU4Hw==\n" - "=Rrkw\n" "-----END PGP PRIVATE KEY BLOCK-----\n"; - -const gnutls_datum_t key2048 = { key2048_txt, sizeof(key2048_txt) }; - - -static void server(int sds[]) -{ - int j; - /* this must be called once in the program - */ - global_init(); - - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(5); - - if (debug) - success("Launched, setting DH parameters...\n"); - - generate_dh_params(); - - for (j = 0; j < SESSIONS; j++) { - int sd = sds[j]; - - if (j == 0) { - gnutls_certificate_allocate_credentials(&pgp_cred); - ret = - gnutls_certificate_set_openpgp_key_mem2 - (pgp_cred, &server_crt, &server_key, "auto", - GNUTLS_OPENPGP_FMT_BASE64); - } else { - gnutls_certificate_free_credentials(pgp_cred); - gnutls_certificate_allocate_credentials(&pgp_cred); - ret = - gnutls_certificate_set_openpgp_key_mem2 - (pgp_cred, &cert2048, &key2048, "auto", - GNUTLS_OPENPGP_FMT_BASE64); - } - - if (ret < 0) { - fail("Could not set server key files...\n"); - goto end; - } - - gnutls_certificate_set_dh_params(pgp_cred, dh_params); - - session = initialize_tls_session(); - - gnutls_transport_set_int(session, sd); - ret = gnutls_handshake(session); - if (ret < 0) { - close(sd); - gnutls_deinit(session); - fail("server: Handshake %d has failed (%s)\n\n", - j, gnutls_strerror(ret)); - goto end; - } - if (debug) - success("server: Handshake %d was completed\n", j); - - if (debug) - success("server: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - /* see the Getting peer's information example */ - if (debug) - print_info(session); - - for (;;) { - memset(buffer, 0, MAX_BUF + 1); - ret = gnutls_record_recv(session, buffer, MAX_BUF); - - if (ret == 0) { - if (debug) - success - ("server: Peer has closed the GnuTLS connection\n"); - break; - } else if (ret < 0) { - fail("server: Received corrupted data(%d). Closing...\n", ret); - goto end; - } else if (ret > 0) { - /* echo data back to the client - */ - gnutls_record_send(session, buffer, - strlen(buffer)); - } - } - /* do not wait for the peer to close the connection. - */ - gnutls_bye(session, GNUTLS_SHUT_WR); - - close(sd); - gnutls_deinit(session); - } - - end: - gnutls_certificate_free_credentials(pgp_cred); - - gnutls_dh_params_deinit(dh_params); - - gnutls_global_deinit(); - - if (debug) - success("server: finished\n"); -} - -void doit(void) -{ - int client_sds[SESSIONS], server_sds[SESSIONS]; - int i; - - for (i = 0; i < SESSIONS; i++) { - int sockets[2]; - - err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); - if (err == -1) { - perror("socketpair"); - fail("socketpair failed\n"); - return; - } - - server_sds[i] = sockets[0]; - client_sds[i] = sockets[1]; - } - - child = fork(); - if (child < 0) { - perror("fork"); - fail("fork"); - return; - } - - if (child) { - int status; - /* parent */ - server(server_sds); - wait(&status); - } else - client(client_sds); -} - -#endif /* _WIN32 */ diff --git a/tests/openssl.c b/tests/openssl.c index 483611cfc0..b7a16089a8 100644 --- a/tests/openssl.c +++ b/tests/openssl.c @@ -25,6 +25,7 @@ #endif #include +#include #include "utils.h" diff --git a/tests/p11-kit-load.sh b/tests/p11-kit-load.sh new file mode 100755 index 0000000000..419900f6a3 --- /dev/null +++ b/tests/p11-kit-load.sh @@ -0,0 +1,204 @@ +#!/bin/sh + +# Copyright (C) 2017 Red Hat, Inc. +# +# This file is part of p11-kit. +# +# p11-kit is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# p11-kit is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +#set -e + +srcdir="${srcdir:-.}" +builddir="${builddir:-.}" +CERTTOOL="${CERTTOOL:-../src/certtool${EXEEXT}}" +P11TOOL="${P11TOOL:-../src/p11tool${EXEEXT}}" +DIFF="${DIFF:-diff}" +PKGCONFIG="${PKG_CONFIG:-$(which pkg-config)}" +TMP_SOFTHSM_DIR="./softhsm-load.$$.tmp" +P11DIR="p11-kit-conf.$$.tmp" +PIN=1234 +PUK=1234 + +for lib in ${libdir} ${libdir}/pkcs11 /usr/lib64/pkcs11/ /usr/lib/pkcs11/ /usr/lib/x86_64-linux-gnu/pkcs11/;do + if test -f "${lib}/p11-kit-trust.so"; then + TRUST_MODULE="${lib}/p11-kit-trust.so" + echo "located ${MODULE}" + break + fi +done + +for lib in ${libdir} ${libdir}/pkcs11 /usr/lib64/pkcs11/ /usr/lib/pkcs11/ /usr/lib/x86_64-linux-gnu/pkcs11/ /usr/lib/softhsm/;do + if test -f "${lib}/libsofthsm2.so"; then + SOFTHSM_MODULE="${lib}/libsofthsm2.so" + echo "located ${MODULE}" + break + fi +done + +${PKGCONFIG} --version >/dev/null || exit 77 + +${PKGCONFIG} --atleast-version=0.23.10 p11-kit-1 +if test $? != 0;then + echo p11-kit 0.23.10 is required + exit 77 +fi + +if ! test -f "${TRUST_MODULE}"; then + echo "p11-kit trust module was not found" + exit 77 +fi + +if ! test -f "${SOFTHSM_MODULE}"; then + echo "softhsm module was not found" + exit 77 +fi + +# Create pkcs11.conf with two modules, a trusted (p11-kit-trust) +# and softhsm (not trusted) +mkdir -p ${P11DIR} + +cat <<_EOF_ >${P11DIR}/p11-kit-trust.module +module: p11-kit-trust.so +trust-policy: yes +_EOF_ + +cat <<_EOF_ >${P11DIR}/softhsm.module +module: libsofthsm2.so +_EOF_ + +# Setup softhsm +rm -rf ${TMP_SOFTHSM_DIR} +mkdir -p ${TMP_SOFTHSM_DIR} +SOFTHSM2_CONF=${TMP_SOFTHSM_DIR}/conf +export SOFTHSM2_CONF +echo "objectstore.backend = file" > "${SOFTHSM2_CONF}" +echo "directories.tokendir = ${TMP_SOFTHSM_DIR}" >> "${SOFTHSM2_CONF}" + +softhsm2-util --init-token --slot 0 --label "GnuTLS-Test" --so-pin "${PUK}" --pin "${PIN}" >/dev/null #2>&1 +if test $? != 0; then + echo "failed to initialize softhsm" + exit 1 +fi + +GNUTLS_PIN="${PIN}" ${P11TOOL} --login --label GnuTLS-Test-RSA --generate-privkey rsa --provider "${SOFTHSM_MODULE}" pkcs11: --outfile /dev/null +if test $? != 0; then + echo "failed to generate privkey" + exit 1 +fi + +FILTERTOKEN="sed s/token=.*//g" + +# Check whether both are listed + +nr=$(${builddir}/pkcs11/list-tokens -o ${P11DIR} -a|${FILTERTOKEN}|sort -u|wc -l) +#nr=$(${P11TOOL} --list-tokens|grep 'Module:'|sort -u|wc -l) +if test "$nr" != 2;then + echo "Error: did not find 2 modules ($nr)" + ${builddir}/pkcs11/list-tokens -o ${P11DIR} + exit 1 +fi + +# Check whether whether list-tokens will list the trust module +# if we only load softhsm. It shouldn't as we only load the +# trust module when needed (e.g., verification). + +nr=$(${builddir}/pkcs11/list-tokens -o ${P11DIR} -m -s "${SOFTHSM_MODULE}"|${FILTERTOKEN}|sort -u|wc -l) +if test "$nr" != 1;then + echo "Error: did not find softhsm module" + ${builddir}/pkcs11/list-tokens -o ${P11DIR} -m -s "${SOFTHSM_MODULE}" + exit 1 +fi + +# Check whether both modules are found when gnutls_pkcs11_init +# is not called but a pkcs11 operation is called. +nr=$(${builddir}/pkcs11/list-tokens -o ${P11DIR} -d|${FILTERTOKEN}|sort -u|wc -l) +if test "$nr" != 2;then + echo "Error in test 1: did not find 2 modules" + ${builddir}/pkcs11/list-tokens -o ${P11DIR} -d + exit 1 +fi + +# Check whether both modules are found when gnutls_pkcs11_init +# is called with the auto flag +nr=$(${builddir}/pkcs11/list-tokens -o ${P11DIR} -a|${FILTERTOKEN}|sort -u|wc -l) +if test "$nr" != 2;then + echo "Error in test 2: did not find 2 modules" + ${builddir}/pkcs11/list-tokens -o ${P11DIR} -a + exit 1 +fi + +# Check whether only trusted modules are listed when the +# trusted flag is given to gnutls_pkcs11_init(). +nr=$(${builddir}/pkcs11/list-tokens -o ${P11DIR} -t|${FILTERTOKEN}|sort -u|wc -l) +if test "$nr" != 1;then + echo "Error in test 3: did not find the trusted module" + ${builddir}/pkcs11/list-tokens -o ${P11DIR} -t + exit 1 +fi + +# Check whether only trusted is listed after certificate verification +# is performed. +nr=$(${builddir}/pkcs11/list-tokens -o ${P11DIR} -v|${FILTERTOKEN}|sort -u|wc -l) +if test "$nr" != 1;then + echo "Error in test 4: did not find 1 module" + ${builddir}/pkcs11/list-tokens -o ${P11DIR} -v + exit 1 +fi + +# Check whether only trusted is listed when gnutls_pkcs11_init +# is called with manual flag and a certificate verification is performed. +nr=$(${builddir}/pkcs11/list-tokens -o ${P11DIR} -m -v|${FILTERTOKEN}|sort -u|wc -l) +if test "$nr" != 1;then + echo "Error in test 5: did not find 1 module" + ${builddir}/pkcs11/list-tokens -o ${P11DIR} -m -v + exit 1 +fi + +# Check whether all modules are listed after certificate verification +# is performed then a PKCS#11 function is called. +nr=$(${builddir}/pkcs11/list-tokens -o ${P11DIR} -v -d|${FILTERTOKEN}|sort -u|wc -l) +if test "$nr" != 2;then + echo "Error in test 6: did not find all modules" + ${builddir}/pkcs11/list-tokens -o ${P11DIR} -v -d + exit 1 +fi + +# Check whether all modules are listed after a private key operation. +nr=$(${builddir}/pkcs11/list-tokens -o ${P11DIR} -p|${FILTERTOKEN}|sort -u|wc -l) +if test "$nr" != 2;then + echo "Error in test 7: did not find all modules" + ${builddir}/pkcs11/list-tokens -o ${P11DIR} -p + exit 1 +fi + +# Check whether public key and privkey are listed. +nr=$(GNUTLS_PIN="${PIN}" ${builddir}/pkcs11/list-objects -o ${P11DIR} -t all pkcs11:token=GnuTLS-Test|sort -u|wc -l) +if test "$nr" != 2;then + echo "Error in test 8: did not find all objects" + ${builddir}/pkcs11/list-objects -o ${P11DIR} -t all pkcs11:token=GnuTLS-Test + exit 1 +fi + +# Check whether all privkeys are listed even if trust module is registered. +nr=$(GNUTLS_PIN="${PIN}" ${builddir}/pkcs11/list-objects -o ${P11DIR} -t privkey pkcs11:|sort -u|wc -l) +if test "$nr" != 1;then + echo "Error in test 9: did not find privkey objects" + ${builddir}/pkcs11/list-objects -o ${P11DIR} -t privkey pkcs11: + exit 1 +fi + +rm -f ${P11DIR}/* +rm -rf ${TMP_SOFTHSM_DIR} + +exit 0 diff --git a/tests/p11-kit-trust.sh b/tests/p11-kit-trust.sh index 075f9bc99f..0af8272310 100755 --- a/tests/p11-kit-trust.sh +++ b/tests/p11-kit-trust.sh @@ -29,9 +29,10 @@ EXPORTED_FILE=out.$$.tmp DER_FILE=out-der.$$.tmp TMPFILE=out-tmp.$$.tmp -for lib in /usr/lib64/pkcs11/ /usr/lib/pkcs11/ /usr/lib/x86_64-linux-gnu/pkcs11/;do +for lib in ${libdir} ${libdir}/pkcs11 /usr/lib64/pkcs11/ /usr/lib/pkcs11/ /usr/lib/x86_64-linux-gnu/pkcs11/;do if test -f "${lib}/p11-kit-trust.so"; then MODULE="${lib}/p11-kit-trust.so" + echo "located ${MODULE}" break fi done diff --git a/tests/pgps2kgnu.c b/tests/pgps2kgnu.c deleted file mode 100644 index 38c1796062..0000000000 --- a/tests/pgps2kgnu.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2008-2012 Free Software Foundation, Inc. - * - * Author: Daniel Kahn Gillmor - - * pgps2kgnu: test GNU extensions to the OpenPGP S2K specification. - * at the moment, we just test the "GNU dummy" S2K - * extension. - - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include - -static char dummy_key[] = - "-----BEGIN PGP PRIVATE KEY BLOCK-----\n" - "Version: GnuPG v1.4.9 (GNU/Linux)\n" - "\n" - "lQCVBEO3YdABBACRqqEnucag4+vyZny2M67Pai5+5suIRRvY+Ly8Ms5MvgCi3EVV\n" - "xT05O/+0ShiRaf+QicCOFrhbU9PZzzU+seEvkeW2UCu4dQfILkmj+HBEIltGnHr3\n" - "G0yegHj5pnqrcezERURf2e17gGFWX91cXB9Cm721FPXczuKraphKwCA9PwARAQAB\n" - "/gNlAkdOVQG0OURlbW9uc3RyYXRpb24gS2V5IGZvciBTMksgR05VIGV4dGVuc2lv\n" - "biAxMDAxIC0tIGdudS1kdW1teYi8BBMBAgAmBQJDt2HQAhsDBQkB4TOABgsJCAcD\n" - "AgQVAggDBBYCAwECHgECF4AACgkQQZUwSa4UDezTOQP/TMQXUVrWzHYZGopoPZ2+\n" - "ZS3qddiznBHsgb7MGYg1KlTiVJSroDUBCHIUJvdQKZV9zrzrFl47D07x6hGyUPHV\n" - "aZXvuITW8t1o5MMHkCy3pmJ2KgfDvdUxrBvLfgPMICA4c6zA0mWquee43syEW9NY\n" - "g3q61iPlQwD1J1kX1wlimLCdAdgEQ7dh0AEEANAwa63zlQbuy1Meliy8otwiOa+a\n" - "mH6pxxUgUNggjyjO5qx+rl25mMjvGIRX4/L1QwIBXJBVi3SgvJW1COZxZqBYqj9U\n" - "8HVT07mWKFEDf0rZLeUE2jTm16cF9fcW4DQhW+sfYm+hi2sY3HeMuwlUBK9KHfW2\n" - "+bGeDzVZ4pqfUEudABEBAAEAA/0bemib+wxub9IyVFUp7nPobjQC83qxLSNzrGI/\n" - "RHzgu/5CQi4tfLOnwbcQsLELfker2hYnjsLrT9PURqK4F7udrWEoZ1I1LymOtLG/\n" - "4tNZ7Mnul3wRC2tCn7FKx8sGJwGh/3li8vZ6ALVJAyOia5TZ/buX0+QZzt6+hPKk\n" - "7MU1WQIA4bUBjtrsqDwro94DvPj3/jBnMZbXr6WZIItLNeVDUcM8oHL807Am97K1\n" - "ueO/f6v1sGAHG6lVPTmtekqPSTWBfwIA7CGFvEyvSALfB8NUa6jtk27NCiw0csql\n" - "kuhCmwXGMVOiryKEfegkIahf2bAd/gnWHPrpWp7bUE20v8YoW22I4wIAhnm5Wr5Q\n" - "Sy7EHDUxmJm5TzadFp9gq08qNzHBpXSYXXJ3JuWcL1/awUqp3tE1I6zZ0hZ38Ia6\n" - "SdBMN88idnhDPqPoiKUEGAECAA8FAkO3YdACGyAFCQHhM4AACgkQQZUwSa4UDezm\n" - "vQP/ZhK+2ly9oI2z7ZcNC/BJRch0/ybQ3haahII8pXXmOThpZohr/LUgoWgCZdXg\n" - "vP6yiszNk2tIs8KphCAw7Lw/qzDC2hEORjWO4f46qk73RAgSqG/GyzI4ltWiDhqn\n" - "vnQCFl3+QFSe4zinqykHnLwGPMXv428d/ZjkIc2ju8dRsn4=\n" - "=CR5w\n" "-----END PGP PRIVATE KEY BLOCK-----\n"; - -/* Test capability of reading the gnu-dummy OpenPGP S2K extension. - See: doc/DETAILS from gnupg - http://lists.gnu.org/archive/html/gnutls-devel/2008-08/msg00023.html -*/ - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "|<%d>| %s", level, str); -} - -int main(int argc, char **argv) -{ - int rc; - gnutls_datum_t keydatum = - { (unsigned char *) dummy_key, strlen(dummy_key) }; - gnutls_openpgp_privkey_t key; - - if (argc > 1) { - gnutls_global_set_log_function(tls_log_func); - gnutls_global_set_log_level(9); - } - - rc = global_init(); - if (rc) { - printf("global_init rc %d: %s\n", rc, gnutls_strerror(rc)); - return 1; - } - - rc = gnutls_openpgp_privkey_init(&key); - if (rc) { - printf("gnutls_openpgp_privkey_init rc %d: %s\n", - rc, gnutls_strerror(rc)); - return 1; - } - - rc = gnutls_openpgp_privkey_import(key, &keydatum, - GNUTLS_OPENPGP_FMT_BASE64, NULL, - 0); - if (rc) { - printf("gnutls_openpgp_privkey_import rc %d: %s\n", - rc, gnutls_strerror(rc)); - return 1; - } - - gnutls_openpgp_privkey_deinit(key); - - gnutls_global_deinit(); - - return 0; -} diff --git a/tests/pkcs11/gnutls_pcert_list_import_x509_file.c b/tests/pkcs11/gnutls_pcert_list_import_x509_file.c new file mode 100644 index 0000000000..e553c29317 --- /dev/null +++ b/tests/pkcs11/gnutls_pcert_list_import_x509_file.c @@ -0,0 +1,244 @@ +/* + * Copyright (C) 2018 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "../utils.h" +#include "softhsm.h" + +/* Tests whether gnutls_x509_crt_list_import_url() will return a well + * sorted chain, out of values written to softhsm token. + */ + +#define CONFIG_NAME "softhsm-import-url" +#define CONFIG CONFIG_NAME".config" + +#include "../test-chains.h" + +#define PIN "123456" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +static +int pin_func(void* userdata, int attempt, const char* url, const char *label, + unsigned flags, char *pin, size_t pin_max) +{ + if (attempt == 0) { + strcpy(pin, PIN); + return 0; + } + return -1; +} + +static int comp_cert(gnutls_pcert_st *pcert, unsigned i) +{ + int ret; + gnutls_datum_t data; + gnutls_x509_crt_t crt2; + + if (debug) + success("comparing cert %d\n", i); + + ret = gnutls_x509_crt_init(&crt2); + if (ret < 0) + return -1; + + data.data = (void*)nc_good2[i]; + data.size = strlen(nc_good2[i]); + ret = gnutls_x509_crt_import(crt2, &data, GNUTLS_X509_FMT_PEM); + if (ret < 0) + return -1; + + if (!gnutls_x509_crt_equals2(crt2, &pcert->cert)) { + return -1; + } + + gnutls_x509_crt_deinit(crt2); + + return 0; +} + +static void load_cert(const char *url, unsigned i) +{ + int ret; + gnutls_datum_t data; + gnutls_x509_crt_t crt; + char name[64]; + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) + fail("error: %s\n", gnutls_strerror(ret)); + + data.data = (void*)nc_good2[i]; + data.size = strlen(nc_good2[i]); + ret = gnutls_x509_crt_import(crt, &data, GNUTLS_X509_FMT_PEM); + if (ret < 0) + fail("error[%d]: %s\n", i, gnutls_strerror(ret)); + + snprintf(name, sizeof(name), "cert-%d", i); + ret = gnutls_pkcs11_copy_x509_crt(url, crt, name, GNUTLS_PKCS11_OBJ_FLAG_LOGIN|GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE); + if (ret < 0) + fail("error[%d]: %s\n", i, gnutls_strerror(ret)); + + success("written cert-%d\n", i); + + gnutls_x509_crt_deinit(crt); +} + +static void load_chain(const char *url) +{ + load_cert(url, 1); + load_cert(url, 0); + load_cert(url, 4); + load_cert(url, 2); + load_cert(url, 3); +} + +static void write_certs(const char *file) +{ + FILE *fp = fopen(file, "w"); + assert(fp != NULL); + fwrite(nc_good2[0], strlen(nc_good2[0]), 1, fp); + fwrite(nc_good2[4], strlen(nc_good2[4]), 1, fp); + fwrite(nc_good2[1], strlen(nc_good2[1]), 1, fp); + fwrite(nc_good2[2], strlen(nc_good2[2]), 1, fp); + fwrite(nc_good2[3], strlen(nc_good2[3]), 1, fp); + fclose(fp); +} + +void doit(void) +{ + char buf[512]; + int ret; + const char *lib, *bin; + unsigned int i; + gnutls_pcert_st pcerts[16]; + unsigned int pcerts_size; + char file[TMPNAME_SIZE]; + + track_temp_files(); + bin = softhsm_bin(); + + lib = softhsm_lib(); + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + gnutls_pkcs11_set_pin_function(pin_func, NULL); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + set_softhsm_conf(CONFIG); + snprintf(buf, sizeof(buf), "%s --init-token --slot 0 --label test --so-pin "PIN" --pin "PIN, bin); + system(buf); + + ret = gnutls_pkcs11_add_provider(lib, NULL); + if (ret < 0) { + fprintf(stderr, "add_provider: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + /* initialize softhsm token */ + ret = gnutls_pkcs11_token_init(SOFTHSM_URL, PIN, "test"); + if (ret < 0) { + fail("gnutls_pkcs11_token_init: %s\n", gnutls_strerror(ret)); + } + + ret = gnutls_pkcs11_token_set_pin(SOFTHSM_URL, NULL, PIN, GNUTLS_PIN_USER); + if (ret < 0) { + fail("gnutls_pkcs11_token_set_pin: %s\n", gnutls_strerror(ret)); + } + + load_chain(SOFTHSM_URL); + gnutls_pkcs11_set_pin_function(NULL, NULL); + + success("import from URI\n"); + pcerts_size = 2; + ret = gnutls_pcert_list_import_x509_file(pcerts, &pcerts_size, SOFTHSM_URL";object=cert-0", + GNUTLS_X509_FMT_PEM, pin_func, NULL, 0); + assert(ret == GNUTLS_E_SHORT_MEMORY_BUFFER); + + pcerts_size = sizeof(pcerts)/sizeof(pcerts[0]); + ret = gnutls_pcert_list_import_x509_file(pcerts, &pcerts_size, SOFTHSM_URL";object=cert-0", + GNUTLS_X509_FMT_PEM, pin_func, NULL, 0); + if (ret < 0) + fail("cannot load certs: %s\n", gnutls_strerror(ret)); + + assert(pcerts_size == 5); + + for (i=0;i=0); + + for (i=0;i=0); + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "../utils.h" +#include "softhsm.h" + +/* Tests whether gnutls_x509_crt_list_import_url() will return a well + * sorted chain, out of values written to softhsm token. + */ + +#define CONFIG_NAME "x509-crt-list-import-url" +#define CONFIG CONFIG_NAME".config" + +#include "../test-chains.h" + +#define PIN "123456" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +static +int pin_func(void* userdata, int attempt, const char* url, const char *label, + unsigned flags, char *pin, size_t pin_max) +{ + if (attempt == 0) { + strcpy(pin, PIN); + return 0; + } + return -1; +} + +static void comp_cert(gnutls_x509_crt_t crt1, unsigned i) +{ + int ret; + gnutls_datum_t data; + gnutls_x509_crt_t crt2; + + ret = gnutls_x509_crt_init(&crt2); + if (ret < 0) + fail("error: %s\n", gnutls_strerror(ret)); + + data.data = (void*)nc_good2[i]; + data.size = strlen(nc_good2[i]); + ret = gnutls_x509_crt_import(crt2, &data, GNUTLS_X509_FMT_PEM); + if (ret < 0) + fail("error[%d]: %s\n", i, gnutls_strerror(ret)); + + if (!gnutls_x509_crt_equals(crt1, crt2)) { + fail("certificate doesn't match chain at %d\n", i); + } + + gnutls_x509_crt_deinit(crt2); +} + +static void load_cert(const char *url, unsigned i) +{ + int ret; + gnutls_datum_t data; + gnutls_x509_crt_t crt; + char name[64]; + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) + fail("error: %s\n", gnutls_strerror(ret)); + + data.data = (void*)nc_good2[i]; + data.size = strlen(nc_good2[i]); + ret = gnutls_x509_crt_import(crt, &data, GNUTLS_X509_FMT_PEM); + if (ret < 0) + fail("error[%d]: %s\n", i, gnutls_strerror(ret)); + + snprintf(name, sizeof(name), "cert-%d", i); + ret = gnutls_pkcs11_copy_x509_crt(url, crt, name, GNUTLS_PKCS11_OBJ_FLAG_LOGIN|GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE); + if (ret < 0) + fail("error[%d]: %s\n", i, gnutls_strerror(ret)); + + success("written cert-%d\n", i); + + gnutls_x509_crt_deinit(crt); +} + +static void load_chain(const char *url) +{ + load_cert(url, 1); + load_cert(url, 0); + load_cert(url, 4); + load_cert(url, 2); + load_cert(url, 3); +} + +void doit(void) +{ + char buf[512]; + int ret; + const char *lib, *bin; + gnutls_x509_crt_t *crts; + unsigned int crts_size, i; + + bin = softhsm_bin(); + + lib = softhsm_lib(); + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + gnutls_pkcs11_set_pin_function(pin_func, NULL); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + set_softhsm_conf(CONFIG); + snprintf(buf, sizeof(buf), "%s --init-token --slot 0 --label test --so-pin "PIN" --pin "PIN, bin); + system(buf); + + ret = gnutls_pkcs11_add_provider(lib, NULL); + if (ret < 0) { + fprintf(stderr, "add_provider: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + /* initialize softhsm token */ + ret = gnutls_pkcs11_token_init(SOFTHSM_URL, PIN, "test"); + if (ret < 0) { + fail("gnutls_pkcs11_token_init: %s\n", gnutls_strerror(ret)); + } + + ret = gnutls_pkcs11_token_set_pin(SOFTHSM_URL, NULL, PIN, GNUTLS_PIN_USER); + if (ret < 0) { + fail("gnutls_pkcs11_token_set_pin: %s\n", gnutls_strerror(ret)); + } + + load_chain(SOFTHSM_URL); + gnutls_pkcs11_set_pin_function(NULL, NULL); + + /* try importing without login */ + ret = gnutls_x509_crt_list_import_url(&crts, &crts_size, SOFTHSM_URL";object=cert-0", + pin_func, NULL, 0); + if (ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + fail("cannot load certs: %s\n", gnutls_strerror(ret)); + + /* try importing with login */ + ret = gnutls_x509_crt_list_import_url(&crts, &crts_size, SOFTHSM_URL";object=cert-0", + pin_func, NULL, GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) + fail("cannot load certs: %s\n", gnutls_strerror(ret)); + + assert(crts_size == 5); + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#define P11_KIT_FUTURE_UNSTABLE_API +#include +#include "cert-common.h" + +/* lists the registered PKCS#11 modules by p11-kit. + */ + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +static const char *opt_pin; + +static +int pin_func(void* userdata, int attempt, const char* url, const char *label, + unsigned flags, char *pin, size_t pin_max) +{ + if (attempt == 0) { + strcpy(pin, opt_pin); + return 0; + } + return -1; +} + +int main(int argc, char **argv) +{ + int ret; + unsigned i; + int opt; + char *url, *mod; + unsigned flags; + unsigned obj_flags = 0; + int attrs = GNUTLS_PKCS11_OBJ_ATTR_ALL; + gnutls_pkcs11_obj_t *crt_list; + unsigned int crt_list_size = 0; + const char *envvar; + + ret = gnutls_global_init(); + if (ret != 0) { + fprintf(stderr, "error at %d: %s\n", __LINE__, gnutls_strerror(ret)); + exit(1); + } + + gnutls_global_set_log_function(tls_log_func); + + while((opt = getopt(argc, argv, "o:t:")) != -1) { + switch(opt) { + case 'o': + mod = strdup(optarg); + p11_kit_override_system_files(NULL, NULL, mod, mod, NULL); + break; + case 't': + /* specify the object type to list */ + if (strcmp(optarg, "all") == 0) + attrs = GNUTLS_PKCS11_OBJ_ATTR_ALL; + else if (strcmp(optarg, "privkey") == 0) + attrs = GNUTLS_PKCS11_OBJ_ATTR_PRIVKEY; + else { + fprintf(stderr, "Unknown object type %s\n", optarg); + exit(1); + } + break; + default: + fprintf(stderr, "Unknown option %c\n", (char)opt); + exit(1); + } + } + + if (optind == argc) { + fprintf(stderr, "specify URL\n"); + exit(1); + } + url = argv[optind]; + + envvar = getenv("GNUTLS_PIN"); + if (envvar && *envvar != '\0') { + opt_pin = envvar; + obj_flags |= GNUTLS_PKCS11_OBJ_FLAG_LOGIN; + gnutls_pkcs11_set_pin_function(pin_func, NULL); + } + + ret = gnutls_pkcs11_token_get_flags(url, &flags); + if (ret < 0) { + flags = 0; + } + + ret = + gnutls_pkcs11_obj_list_import_url2(&crt_list, &crt_list_size, + url, attrs, obj_flags); + if (ret != 0) { + fprintf(stderr, "error at %d: %s\n", __LINE__, gnutls_strerror(ret)); + exit(1); + } + + for (i = 0; i < crt_list_size; i++) { + char *output; + + ret = + gnutls_pkcs11_obj_export_url(crt_list[i], 0, + &output); + if (ret != 0) { + fprintf(stderr, "error at %d: %s\n", __LINE__, gnutls_strerror(ret)); + exit(1); + } + + fprintf(stdout, "%s\n", output); + gnutls_free(output); + gnutls_pkcs11_obj_deinit(crt_list[i]); + } + gnutls_free(crt_list); + + gnutls_global_deinit(); +} diff --git a/tests/pkcs11/list-tokens.c b/tests/pkcs11/list-tokens.c new file mode 100644 index 0000000000..39cd730842 --- /dev/null +++ b/tests/pkcs11/list-tokens.c @@ -0,0 +1,167 @@ +/* + * Copyright (C) 2016-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#define P11_KIT_FUTURE_UNSTABLE_API +#include +#include "cert-common.h" + +/* lists the registered PKCS#11 modules by p11-kit. + */ + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +int +_gnutls_pkcs11_token_get_url(unsigned int seq, + gnutls_pkcs11_url_type_t detailed, char **url, + unsigned flags); + +int main(int argc, char **argv) +{ + int ret; + unsigned i; + int opt; + char *url, *mod; + gnutls_x509_trust_list_t tl; + gnutls_x509_crt_t crt; + gnutls_pkcs11_privkey_t key; + unsigned flag = 1; + unsigned int status; + + ret = gnutls_global_init(); + if (ret != 0) { + fprintf(stderr, "error at %d: %s\n", __LINE__, gnutls_strerror(ret)); + exit(1); + } + + gnutls_global_set_log_function(tls_log_func); + //gnutls_global_set_log_level(4711); + + while((opt = getopt(argc, argv, "s:o:mvatdp")) != -1) { + switch(opt) { + case 'o': + mod = strdup(optarg); + p11_kit_override_system_files(NULL, NULL, mod, mod, NULL); + break; + case 'm': + /* initialize manually - i.e., do no module loading */ + ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_MANUAL, NULL); + if (ret != 0) { + fprintf(stderr, "error at %d: %s\n", __LINE__, gnutls_strerror(ret)); + exit(1); + } + break; + case 's': + /* load module */ + ret = gnutls_pkcs11_add_provider(optarg, NULL); + if (ret != 0) { + fprintf(stderr, "error at %d: %s\n", __LINE__, gnutls_strerror(ret)); + exit(1); + } + break; + case 'd': + /* when call _gnutls_pkcs11_token_get_url() do proper initialization + * if none done */ + flag = 0; + break; + case 'p': + /* do private key operations */ + assert(gnutls_pkcs11_privkey_init(&key) >= 0); + gnutls_pkcs11_privkey_import_url(key, "pkcs11:", 0); + gnutls_pkcs11_privkey_deinit(key); + break; + case 'a': + /* initialize auto - i.e., do module loading */ + ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_AUTO, NULL); + if (ret != 0) { + fprintf(stderr, "error at %d: %s\n", __LINE__, gnutls_strerror(ret)); + exit(1); + } + break; + case 't': + /* do trusted module loading */ + ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_AUTO_TRUSTED, NULL); + if (ret != 0) { + fprintf(stderr, "error at %d: %s\n", __LINE__, gnutls_strerror(ret)); + exit(1); + } + break; + case 'v': + /* do verification which should trigger trusted module loading */ + assert(gnutls_x509_crt_init(&crt) >= 0); + assert(gnutls_x509_crt_import(crt, &ca3_cert, GNUTLS_X509_FMT_PEM) >= 0); + + assert(gnutls_x509_trust_list_init(&tl, 0) >= 0); + assert(gnutls_x509_trust_list_add_system_trust(tl, 0, 0) >= 0); + gnutls_x509_trust_list_verify_crt2(tl, &crt, 1, NULL, 0, 0, &status, NULL); + gnutls_x509_trust_list_deinit(tl, 1); + gnutls_x509_crt_deinit(crt); + break; + default: + fprintf(stderr, "Unknown option %c\n", (char)opt); + exit(1); + } + } + + + for (i=0;;i++) { + ret = _gnutls_pkcs11_token_get_url(i, 0, &url, flag); + if (ret < 0) + break; + printf("%s\n", url); + free(url); + } + + /* try whether these URIs are operational */ + for (i=0;;i++) { + unsigned tflags; + + ret = _gnutls_pkcs11_token_get_url(i, 0, &url, flag); + if (ret < 0) + break; + ret = gnutls_pkcs11_token_get_flags(url, &tflags); + if (ret < 0) { + fprintf(stderr, "cannot get token %s flags: %s\n", url, gnutls_strerror(ret)); + exit(1); + } + free(url); + } + + gnutls_global_deinit(); +} diff --git a/tests/pkcs11/pkcs11-cert-import-url-exts.c b/tests/pkcs11/pkcs11-cert-import-url-exts.c index abc84834fd..bf806b1321 100644 --- a/tests/pkcs11/pkcs11-cert-import-url-exts.c +++ b/tests/pkcs11/pkcs11-cert-import-url-exts.c @@ -117,7 +117,7 @@ void doit(void) } if (ret == 0) { - fail("overriden cert is not a CA!\n"); + fail("overridden cert is not a CA!\n"); exit(1); } diff --git a/tests/pkcs11/pkcs11-cert-import-url4-exts.c b/tests/pkcs11/pkcs11-cert-import-url4-exts.c index 13dd76a6c2..f9fe82f4b1 100644 --- a/tests/pkcs11/pkcs11-cert-import-url4-exts.c +++ b/tests/pkcs11/pkcs11-cert-import-url4-exts.c @@ -142,7 +142,7 @@ void doit(void) } if (ret == 0) { - fail("overriden cert is not a CA!\n"); + fail("overridden cert is not a CA!\n"); exit(1); } diff --git a/tests/pkcs11/pkcs11-chainverify.c b/tests/pkcs11/pkcs11-chainverify.c index fda1e2de08..e9865b62b9 100644 --- a/tests/pkcs11/pkcs11-chainverify.c +++ b/tests/pkcs11/pkcs11-chainverify.c @@ -129,6 +129,12 @@ void doit(void) printf("Chain '%s' (%d)...\n", chains[i].name, (int) i); + if (chains[i].notfips && gnutls_fips140_mode_enabled()) { + if (debug) + printf("Skipping in FIPS mode...\n"); + continue; + } + for (j = 0; chains[i].chain[j]; j++) { if (debug > 2) printf("\tAdding certificate %d...", diff --git a/tests/pkcs11/pkcs11-ec-privkey-test.c b/tests/pkcs11/pkcs11-ec-privkey-test.c index c256e6b0d9..1b24c8150f 100644 --- a/tests/pkcs11/pkcs11-ec-privkey-test.c +++ b/tests/pkcs11/pkcs11-ec-privkey-test.c @@ -79,6 +79,8 @@ void doit(void) gnutls_privkey_t pkey; gnutls_pubkey_t pubkey; gnutls_pubkey_t pubkey2; + gnutls_pubkey_t pubkey3; + gnutls_pubkey_t pubkey4; unsigned i; bin = softhsm_bin(); @@ -180,8 +182,21 @@ void doit(void) exit(1); } + /* Write pubkey to the card too */ + assert(gnutls_pubkey_init(&pubkey) == 0); + assert(gnutls_pubkey_import_x509(pubkey, crt, 0) == 0); + + ret = gnutls_pkcs11_copy_pubkey(SOFTHSM_URL, pubkey, "cert", NULL, + GNUTLS_KEY_DIGITAL_SIGNATURE | + GNUTLS_KEY_KEY_ENCIPHERMENT, 0); + if (ret < 0) { + fail("gnutls_pkcs11_copy_pubkey: %s\n", + gnutls_strerror(ret)); + } + gnutls_x509_crt_deinit(crt); gnutls_x509_privkey_deinit(key); + gnutls_pubkey_deinit(pubkey); gnutls_pkcs11_set_pin_function(NULL, NULL); assert(gnutls_privkey_init(&pkey) == 0); @@ -192,6 +207,31 @@ void doit(void) exit(1); } + /* Try to read the public key with public key URI */ + assert(gnutls_pubkey_init(&pubkey3) == 0); + + + ret = + gnutls_pubkey_import_pkcs11_url(pubkey3, + SOFTHSM_URL + ";object=cert;object-type=public;pin-value=" + PIN, 0); + if (ret < 0) { + fail("error in gnutls_pubkey_import_pkcs11_url: %s\n", gnutls_strerror(ret)); + } + + /* Try to read the public key with certificate URI */ + assert(gnutls_pubkey_init(&pubkey4) == 0); + + ret = + gnutls_pubkey_import_pkcs11_url(pubkey4, + SOFTHSM_URL + ";object=cert;object-type=cert;pin-value=" + PIN, 0); + if (ret < 0) { + fail("error in gnutls_pubkey_import_pkcs11_url: %s\n", gnutls_strerror(ret)); + } + assert(gnutls_pubkey_init(&pubkey) == 0); assert(gnutls_pubkey_import_privkey(pubkey, pkey, 0, 0) == 0); @@ -228,6 +268,8 @@ void doit(void) gnutls_free(s.data); } + gnutls_pubkey_deinit(pubkey4); + gnutls_pubkey_deinit(pubkey3); gnutls_pubkey_deinit(pubkey2); gnutls_pubkey_deinit(pubkey); gnutls_privkey_deinit(pkey); diff --git a/tests/pkcs11/pkcs11-eddsa-privkey-test.c b/tests/pkcs11/pkcs11-eddsa-privkey-test.c new file mode 100644 index 0000000000..44515da3f4 --- /dev/null +++ b/tests/pkcs11/pkcs11-eddsa-privkey-test.c @@ -0,0 +1,294 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos, Simo Sorce + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "../utils.h" +#include "softhsm.h" + +#define CONFIG_NAME "softhsm-privkey-eddsa-test" +#define CONFIG CONFIG_NAME".config" + +/* Tests whether signing with PKCS#11 and EDDSA would + * generate valid signatures */ + +#include "../cert-common.h" + +#define PIN "1234" + +static const gnutls_datum_t testdata = { (void *)"test test", 9 }; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +static +int pin_func(void *userdata, int attempt, const char *url, const char *label, + unsigned flags, char *pin, size_t pin_max) +{ + if (attempt == 0) { + strcpy(pin, PIN); + return 0; + } + return -1; +} + +#define myfail(fmt, ...) \ + fail("%s (iter %d): "fmt, gnutls_sign_get_name(sigalgo), i, ##__VA_ARGS__) + +static unsigned verify_eddsa_presence(void) +{ + unsigned i; + unsigned long mechanism; + int ret; + + i = 0; + do { + ret = gnutls_pkcs11_token_get_mechanism("pkcs11:", i++, &mechanism); + if (ret >= 0 && mechanism == 0x1057 /* CKM_EDDSA */) + return 1; + } while(ret>=0); + + return 0; +} + +void doit(void) +{ + char buf[128]; + int ret; + const char *lib, *bin; + gnutls_x509_crt_t crt; + gnutls_x509_privkey_t key; + gnutls_datum_t tmp, sig; + gnutls_privkey_t pkey; + gnutls_pubkey_t pubkey; + gnutls_pubkey_t pubkey2; + gnutls_pubkey_t pubkey3; + gnutls_pubkey_t pubkey4; + unsigned i, sigalgo; + + bin = softhsm_bin(); + + lib = softhsm_lib(); + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + } + + gnutls_pkcs11_set_pin_function(pin_func, NULL); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + set_softhsm_conf(CONFIG); + snprintf(buf, sizeof(buf), + "%s --init-token --slot 0 --label test --so-pin " PIN " --pin " + PIN, bin); + system(buf); + + ret = gnutls_pkcs11_add_provider(lib, NULL); + if (ret < 0) { + fail("gnutls_x509_crt_init: %s\n", gnutls_strerror(ret)); + } + + if (verify_eddsa_presence() == 0) { + fprintf(stderr, "Skipping test as no EDDSA mech is supported\n"); + exit(77); + } + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) + fail("gnutls_x509_crt_init: %s\n", gnutls_strerror(ret)); + + ret = + gnutls_x509_crt_import(crt, &server_ca3_eddsa_cert, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + fail("gnutls_x509_crt_import: %s\n", gnutls_strerror(ret)); + + if (debug) { + gnutls_x509_crt_print(crt, GNUTLS_CRT_PRINT_ONELINE, &tmp); + + printf("\tCertificate: %.*s\n", tmp.size, tmp.data); + gnutls_free(tmp.data); + } + + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) { + fail("gnutls_x509_privkey_init: %s\n", gnutls_strerror(ret)); + } + + ret = + gnutls_x509_privkey_import(key, &server_ca3_eddsa_key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("gnutls_x509_privkey_import: %s\n", gnutls_strerror(ret)); + } + + /* initialize softhsm token */ + ret = gnutls_pkcs11_token_init(SOFTHSM_URL, PIN, "test"); + if (ret < 0) { + fail("gnutls_pkcs11_token_init: %s\n", gnutls_strerror(ret)); + } + + ret = + gnutls_pkcs11_token_set_pin(SOFTHSM_URL, NULL, PIN, + GNUTLS_PIN_USER); + if (ret < 0) { + fail("gnutls_pkcs11_token_set_pin: %s\n", gnutls_strerror(ret)); + } + + ret = gnutls_pkcs11_copy_x509_crt(SOFTHSM_URL, crt, "cert", + GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE | + GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + fail("gnutls_pkcs11_copy_x509_crt: %s\n", gnutls_strerror(ret)); + } + + ret = + gnutls_pkcs11_copy_x509_privkey(SOFTHSM_URL, key, "cert", + GNUTLS_KEY_DIGITAL_SIGNATURE | + GNUTLS_KEY_KEY_ENCIPHERMENT, + GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE + | + GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE + | GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + fail("gnutls_pkcs11_copy_x509_privkey: %s\n", + gnutls_strerror(ret)); + } + + /* Write pubkey to the card too */ + assert(gnutls_pubkey_init(&pubkey) == 0); + assert(gnutls_pubkey_import_x509(pubkey, crt, 0) == 0); + + ret = gnutls_pkcs11_copy_pubkey(SOFTHSM_URL, pubkey, "cert", NULL, + GNUTLS_KEY_DIGITAL_SIGNATURE | + GNUTLS_KEY_KEY_ENCIPHERMENT, 0); + if (ret < 0) { + fail("gnutls_pkcs11_copy_pubkey: %s\n", + gnutls_strerror(ret)); + } + + gnutls_x509_crt_deinit(crt); + gnutls_x509_privkey_deinit(key); + gnutls_pubkey_deinit(pubkey); + gnutls_pkcs11_set_pin_function(NULL, NULL); + + assert(gnutls_privkey_init(&pkey) == 0); + + ret = + gnutls_privkey_import_pkcs11_url(pkey, + SOFTHSM_URL + ";object=cert;object-type=private;pin-value=" + PIN); + if (ret < 0) { + fail("error in gnutls_privkey_import_pkcs11_url: %s\n", gnutls_strerror(ret)); + } + + /* Try to read the public key with public key URI */ + assert(gnutls_pubkey_init(&pubkey3) == 0); + + + ret = + gnutls_pubkey_import_pkcs11_url(pubkey3, + SOFTHSM_URL + ";object=cert;object-type=public;pin-value=" + PIN, 0); + if (ret < 0) { + fail("error in gnutls_pubkey_import_pkcs11_url: %s\n", gnutls_strerror(ret)); + } + + /* Try to read the public key with certificate URI */ + assert(gnutls_pubkey_init(&pubkey4) == 0); + + ret = + gnutls_pubkey_import_pkcs11_url(pubkey4, + SOFTHSM_URL + ";object=cert;object-type=cert;pin-value=" + PIN, 0); + if (ret < 0) { + fail("error in gnutls_pubkey_import_pkcs11_url: %s\n", gnutls_strerror(ret)); + } + + assert(gnutls_pubkey_init(&pubkey) == 0); + assert(gnutls_pubkey_import_privkey(pubkey, pkey, 0, 0) == 0); + + assert(gnutls_pubkey_init(&pubkey2) == 0); + assert(gnutls_pubkey_import_x509_raw + (pubkey2, &server_ca3_eddsa_cert, GNUTLS_X509_FMT_PEM, 0) == 0); + + /* this is the algorithm supported by the certificate */ + sigalgo = GNUTLS_SIGN_EDDSA_ED25519; + + for (i = 0; i < 20; i++) { + /* check whether privkey and pubkey are operational + * by signing and verifying */ + ret = + gnutls_privkey_sign_data2(pkey, sigalgo, 0, + &testdata, &sig); + if (ret < 0) + myfail("Error signing data %s\n", gnutls_strerror(ret)); + + /* verify against the pubkey in PKCS #11 */ + ret = + gnutls_pubkey_verify_data2(pubkey, sigalgo, 0, + &testdata, &sig); + if (ret < 0) + myfail("Error verifying data1: %s\n", + gnutls_strerror(ret)); + + /* verify against the raw pubkey */ + ret = + gnutls_pubkey_verify_data2(pubkey2, sigalgo, 0, + &testdata, &sig); + if (ret < 0) + myfail("Error verifying data2: %s\n", + gnutls_strerror(ret)); + + gnutls_free(sig.data); + } + + /* TODO is there any sensible way to check the pubkeys are the same? */ + gnutls_pubkey_deinit(pubkey4); + gnutls_pubkey_deinit(pubkey3); + gnutls_pubkey_deinit(pubkey2); + gnutls_pubkey_deinit(pubkey); + gnutls_privkey_deinit(pkey); + + gnutls_global_deinit(); + + remove(CONFIG); +} diff --git a/tests/pkcs11/pkcs11-get-raw-issuer-exts.c b/tests/pkcs11/pkcs11-get-raw-issuer-exts.c index a395376f29..dec3088e11 100644 --- a/tests/pkcs11/pkcs11-get-raw-issuer-exts.c +++ b/tests/pkcs11/pkcs11-get-raw-issuer-exts.c @@ -126,7 +126,7 @@ void doit(void) } if (ret == 0) { - fail("overriden cert is not a CA!\n"); + fail("overridden cert is not a CA!\n"); exit(1); } diff --git a/tests/pkcs11/pkcs11-import-url-privkey.c b/tests/pkcs11/pkcs11-import-url-privkey.c index cb44fb1e53..ded8c9a75e 100644 --- a/tests/pkcs11/pkcs11-import-url-privkey.c +++ b/tests/pkcs11/pkcs11-import-url-privkey.c @@ -39,6 +39,12 @@ /* Tests the private key import for sensitive keys in the common case and in * some problematic cases. */ +#ifdef ALL_CAPS_URI +#define PURI "PKCS11:" +#else +#define PURI "pkcs11:" +#endif + #ifdef _WIN32 # define P11LIB "libpkcs11mock1.dll" #else @@ -76,7 +82,7 @@ void doit(void) exit(1); } - ret = gnutls_pkcs11_obj_list_import_url4(&obj_list, &obj_list_size, "pkcs11:", GNUTLS_PKCS11_OBJ_FLAG_PRIVKEY); + ret = gnutls_pkcs11_obj_list_import_url4(&obj_list, &obj_list_size, PURI, GNUTLS_PKCS11_OBJ_FLAG_PRIVKEY); if (ret < 0) { fail("%d: %s\n", ret, gnutls_strerror(ret)); exit(1); @@ -85,7 +91,6 @@ void doit(void) for (i=0;i - * Author: Jaroslav Imrich + * Copyright 2011-2016 The Pkcs11Interop Project * - * Licensing for open source projects: - * PKCS11-MOCK is available under the terms of the GNU Affero General - * Public License version 3 as published by the Free Software Foundation. - * Please see for more details. + * 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 * - * Licensing for other types of projects: - * PKCS11-MOCK is available under the terms of flexible commercial license. - * Please contact JWC s.r.o. at for more details. + * 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. + */ + +/* + * Written originally for the Pkcs11Interop project by: + * Jaroslav IMRICH */ #include "pkcs11-mock.h" @@ -372,6 +378,10 @@ CK_DEFINE_FUNCTION(CK_RV, C_GetTokenInfo)(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR p memset(pInfo->serialNumber, ' ', sizeof(pInfo->serialNumber)); memcpy(pInfo->serialNumber, PKCS11_MOCK_CK_TOKEN_INFO_SERIAL_NUMBER, strlen(PKCS11_MOCK_CK_TOKEN_INFO_SERIAL_NUMBER)); pInfo->flags = CKF_RNG | CKF_LOGIN_REQUIRED | CKF_USER_PIN_INITIALIZED | CKF_TOKEN_INITIALIZED; + + if (pkcs11_mock_flags & MOCK_FLAG_SAFENET_ALWAYS_AUTH) + pInfo->flags &= ~CKF_LOGIN_REQUIRED; + pInfo->ulMaxSessionCount = CK_EFFECTIVELY_INFINITE; pInfo->ulSessionCount = (CK_TRUE == pkcs11_mock_session_opened) ? 1 : 0; pInfo->ulMaxRwSessionCount = CK_EFFECTIVELY_INFINITE; @@ -725,7 +735,11 @@ CK_DEFINE_FUNCTION(CK_RV, C_Login)(CK_SESSION_HANDLE hSession, CK_USER_TYPE user if ((CK_FALSE == pkcs11_mock_session_opened) || (PKCS11_MOCK_CK_SESSION_ID != hSession)) return CKR_SESSION_HANDLE_INVALID; - if (pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH) { + if ((pkcs11_mock_flags & MOCK_FLAG_SAFENET_ALWAYS_AUTH) && userType == CKU_CONTEXT_SPECIFIC) { + return CKR_USER_TYPE_INVALID; + } + + if ((pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH) || (pkcs11_mock_flags & MOCK_FLAG_SAFENET_ALWAYS_AUTH)) { if ((CKU_CONTEXT_SPECIFIC != userType) && (CKU_SO != userType) && (CKU_USER != userType)) return CKR_USER_TYPE_INVALID; } else if ((CKU_SO != userType) && (CKU_USER != userType)) { @@ -769,7 +783,7 @@ CK_DEFINE_FUNCTION(CK_RV, C_Login)(CK_SESSION_HANDLE hSession, CK_USER_TYPE user break; } - if (pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH && rv == CKR_USER_ALREADY_LOGGED_IN) { + if ((pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH || pkcs11_mock_flags & MOCK_FLAG_SAFENET_ALWAYS_AUTH) && rv == CKR_USER_ALREADY_LOGGED_IN) { rv = 0; } @@ -1015,6 +1029,9 @@ CK_DEFINE_FUNCTION(CK_RV, C_GetAttributeValue)(CK_SESSION_HANDLE hSession, CK_OB else if (CKA_ALWAYS_AUTHENTICATE == pTemplate[i].type) { CK_BBOOL t; + if (pkcs11_mock_flags & MOCK_FLAG_SAFENET_ALWAYS_AUTH) + return CKR_ATTRIBUTE_TYPE_INVALID; + if (pTemplate[i].ulValueLen != sizeof(CK_BBOOL)) return CKR_ARGUMENTS_BAD; @@ -1540,10 +1557,8 @@ CK_DEFINE_FUNCTION(CK_RV, C_DecryptInit)(CK_SESSION_HANDLE hSession, CK_MECHANIS (PKCS11_MOCK_CK_OPERATION_VERIFY != mock_session->find_op.active_operation)) return CKR_OPERATION_ACTIVE; - if (pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH) { - if (!pkcs11_mock_session_reauth) { - return CKR_USER_NOT_LOGGED_IN; - } + if (pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH || pkcs11_mock_flags & MOCK_FLAG_SAFENET_ALWAYS_AUTH) { + mock_session->state = CKS_RO_PUBLIC_SESSION; pkcs11_mock_session_reauth = 0; } @@ -1629,6 +1644,15 @@ CK_DEFINE_FUNCTION(CK_RV, C_Decrypt)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEn if (PKCS11_MOCK_CK_OPERATION_DECRYPT != mock_session->find_op.active_operation) return CKR_OPERATION_NOT_INITIALIZED; + if (pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH || pkcs11_mock_flags & MOCK_FLAG_SAFENET_ALWAYS_AUTH) { + if (!pkcs11_mock_session_reauth) { + return CKR_USER_NOT_LOGGED_IN; + } + if ((pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH) && pData != NULL) { + pkcs11_mock_session_reauth = 0; + } + } + if (NULL == pEncryptedData) return CKR_ARGUMENTS_BAD; @@ -1924,10 +1948,8 @@ CK_DEFINE_FUNCTION(CK_RV, C_SignInit)(CK_SESSION_HANDLE hSession, CK_MECHANISM_P (PKCS11_MOCK_CK_OPERATION_ENCRYPT != mock_session->find_op.active_operation)) return CKR_OPERATION_ACTIVE; - if (pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH) { - if (!pkcs11_mock_session_reauth) { - return CKR_USER_NOT_LOGGED_IN; - } + if (pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH || pkcs11_mock_flags & MOCK_FLAG_SAFENET_ALWAYS_AUTH) { + mock_session->state = CKS_RO_PUBLIC_SESSION; pkcs11_mock_session_reauth = 0; } @@ -1969,6 +1991,16 @@ CK_DEFINE_FUNCTION(CK_RV, C_Sign)(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, if ((CK_FALSE == pkcs11_mock_session_opened) || (PKCS11_MOCK_CK_SESSION_ID != hSession)) return CKR_SESSION_HANDLE_INVALID; + if (pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH || pkcs11_mock_flags & MOCK_FLAG_SAFENET_ALWAYS_AUTH) { + if (!pkcs11_mock_session_reauth) { + return CKR_USER_NOT_LOGGED_IN; + } + + if ((pkcs11_mock_flags & MOCK_FLAG_ALWAYS_AUTH) && pSignature != NULL) { + pkcs11_mock_session_reauth = 0; + } + } + if (NULL == pData) return CKR_ARGUMENTS_BAD; diff --git a/tests/pkcs11/pkcs11-mock.h b/tests/pkcs11/pkcs11-mock.h index 9b2a66bbd0..6764c021e6 100644 --- a/tests/pkcs11/pkcs11-mock.h +++ b/tests/pkcs11/pkcs11-mock.h @@ -1,18 +1,23 @@ /* - * PKCS11-MOCK - PKCS#11 mock module - * Copyright (c) 2015 JWC s.r.o. - * Author: Jaroslav Imrich + * Copyright 2011-2016 The Pkcs11Interop Project * - * Licensing for open source projects: - * PKCS11-MOCK is available under the terms of the GNU Affero General - * Public License version 3 as published by the Free Software Foundation. - * Please see for more details. + * 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 * - * Licensing for other types of projects: - * PKCS11-MOCK is available under the terms of flexible commercial license. - * Please contact JWC s.r.o. at for more details. + * 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. */ +/* + * Written originally for the Pkcs11Interop project by: + * Jaroslav IMRICH + */ #define _POSIX_C_SOURCE 200809 #include diff --git a/tests/pkcs11/pkcs11-mock2.c b/tests/pkcs11/pkcs11-mock2.c new file mode 100644 index 0000000000..44bf517bc3 --- /dev/null +++ b/tests/pkcs11/pkcs11-mock2.c @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "softhsm.h" + +/* This provides a mock PKCS #11 module that delegates all the + * operations to SoftHSM except that it filters out CKM_RSA_PKCS_PSS + * mechanism. + */ + +static void *dl; +static CK_C_GetMechanismInfo base_C_GetMechanismInfo; +static CK_FUNCTION_LIST override_funcs; + +#ifdef __sun +# pragma fini(mock_deinit) +# pragma init(mock_init) +# define _CONSTRUCTOR +# define _DESTRUCTOR +#else +# define _CONSTRUCTOR __attribute__((constructor)) +# define _DESTRUCTOR __attribute__((destructor)) +#endif + +static CK_RV +override_C_GetMechanismInfo(CK_SLOT_ID slot_id, + CK_MECHANISM_TYPE type, + CK_MECHANISM_INFO *info) +{ + if (type == CKM_RSA_PKCS_PSS) + return CKR_MECHANISM_INVALID; + + return base_C_GetMechanismInfo(slot_id, type, info); +} + +CK_RV +C_GetFunctionList(CK_FUNCTION_LIST **function_list) +{ + CK_C_GetFunctionList func; + CK_FUNCTION_LIST *funcs; + + assert(dl); + + func = dlsym(dl, "C_GetFunctionList"); + if (func == NULL) { + return CKR_GENERAL_ERROR; + } + + func(&funcs); + base_C_GetMechanismInfo = funcs->C_GetMechanismInfo; + + memcpy(&override_funcs, funcs, sizeof(CK_FUNCTION_LIST)); + override_funcs.C_GetMechanismInfo = override_C_GetMechanismInfo; + *function_list = &override_funcs; + + return CKR_OK; +} + +static _CONSTRUCTOR void +mock_init(void) +{ + const char *lib; + + /* suppress compiler warning */ + (void) set_softhsm_conf; + + lib = softhsm_lib(); + + dl = dlopen(lib, RTLD_NOW); + if (dl == NULL) + exit(77); +} + +static _DESTRUCTOR void +mock_deinit(void) +{ + dlclose(dl); +} diff --git a/tests/pkcs11/pkcs11-obj-import.c b/tests/pkcs11/pkcs11-obj-import.c index 1f60b08bb6..fd17ed0661 100644 --- a/tests/pkcs11/pkcs11-obj-import.c +++ b/tests/pkcs11/pkcs11-obj-import.c @@ -222,7 +222,6 @@ void doit(void) buf_size = sizeof(buf); assert(gnutls_pkcs11_obj_get_info(obj, GNUTLS_PKCS11_OBJ_ID, buf, &buf_size) >= 0); assert(buf_size != 0); - assert(buf != 0); /* library description */ buf_size = sizeof(buf); diff --git a/tests/pkcs11/pkcs11-obj-raw.c b/tests/pkcs11/pkcs11-obj-raw.c new file mode 100644 index 0000000000..a9552725ad --- /dev/null +++ b/tests/pkcs11/pkcs11-obj-raw.c @@ -0,0 +1,188 @@ +/* + * Copyright (C) 2016-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#ifndef CRYPTOKI_GNU +# define CRYPTOKI_GNU +#endif +#include + +#include "utils.h" + +/* Tests whether a gnutls_pkcs11_obj_get_ptr returns valid handles. */ + +#if defined(HAVE___REGISTER_ATFORK) + +#ifdef _WIN32 +# define P11LIB "libpkcs11mock1.dll" +#else +# include +# define P11LIB "libpkcs11mock1.so" +#endif + + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +#define PIN "1234" + +static +int pin_func(void* userdata, int attempt, const char* url, const char *label, + unsigned flags, char *pin, size_t pin_max) +{ + if (attempt == 0) { + strcpy(pin, PIN); + return 0; + } + return -1; +} + +void doit(void) +{ + int ret; + const char *lib; + unsigned long slot_id; + unsigned char sig[256]; + unsigned long len; + struct ck_function_list *mod; + struct ck_info info; + struct ck_token_info tinfo; + ck_session_handle_t session; + ck_object_handle_t ohandle; + gnutls_pkcs11_obj_t obj; + struct ck_mechanism mech; + ck_rv_t rv; + gnutls_datum_t data; + + data.data = (void*)"\x38\x17\x0c\x08\xcb\x45\x8f\xd4\x87\x9c\x34\xb6\xf6\x08\x29\x4c\x50\x31\x2b\xbb"; + data.size = 20; + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + lib = getenv("P11MOCKLIB1"); + if (lib == NULL) + lib = P11LIB; + + ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_MANUAL, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_pkcs11_add_provider(lib, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + assert(gnutls_pkcs11_obj_init(&obj)>=0); + + gnutls_pkcs11_obj_set_pin_function(obj, pin_func, NULL); + + /* unknown object */ + ret = gnutls_pkcs11_obj_import_url(obj, "pkcs11:token=unknown;object=invalid;type=private", GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + assert(ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + ret = gnutls_pkcs11_obj_import_url(obj, "pkcs11:object=test;type=private", GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + assert(ret >= 0); + + ret = gnutls_pkcs11_obj_get_ptr(obj, (void**)&mod, (void*)&session, + (void*)&ohandle, + &slot_id, GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + gnutls_pkcs11_obj_deinit(obj); + + rv = mod->C_GetInfo(&info); + if (rv != CKR_OK) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + assert(info.cryptoki_version.major == 0x02); + assert(info.cryptoki_version.minor == 0x14); + assert(info.flags == 0); + assert(info.library_version.major == 0x01); + assert(info.library_version.minor == 0x00); + + rv = mod->C_GetTokenInfo(slot_id, &tinfo); + if (rv != CKR_OK) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + assert(tinfo.hardware_version.major == 0x01); + assert(tinfo.firmware_version.major == 0x01); + + mech.mechanism = CKM_RSA_PKCS; + mech.parameter = NULL; + mech.parameter_len = 0; + + rv = mod->C_SignInit(session, &mech, ohandle); + if (rv != CKR_OK) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + len = sizeof(sig); + rv = mod->C_Sign(session, data.data, data.size, sig, &len); + if (rv != CKR_OK) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + mod->C_CloseSession(session); + + gnutls_pkcs11_deinit(); + gnutls_global_deinit(); +} +#else +void doit(void) +{ + exit(77); +} +#endif diff --git a/tests/pkcs11/pkcs11-privkey-always-auth.c b/tests/pkcs11/pkcs11-privkey-always-auth.c index 3561c412fd..441f637225 100644 --- a/tests/pkcs11/pkcs11-privkey-always-auth.c +++ b/tests/pkcs11/pkcs11-privkey-always-auth.c @@ -175,7 +175,6 @@ void doit(void) pin_called = 0; gnutls_free(sig.data); - sig.data = NULL; /* call again - should re-authenticate */ ret = gnutls_privkey_sign_hash(key, GNUTLS_DIG_SHA1, 0, &data, &sig); @@ -190,7 +189,6 @@ void doit(void) pin_called = 0; gnutls_free(sig.data); - sig.data = NULL; if (debug) printf("done\n\n\n"); diff --git a/tests/pkcs11/pkcs11-privkey-fork-reinit.c b/tests/pkcs11/pkcs11-privkey-fork-reinit.c index 1535d644f9..a725842257 100644 --- a/tests/pkcs11/pkcs11-privkey-fork-reinit.c +++ b/tests/pkcs11/pkcs11-privkey-fork-reinit.c @@ -123,7 +123,6 @@ void doit(void) } gnutls_free(sig.data); - sig.data = NULL; pid = fork(); if (pid != 0) { diff --git a/tests/pkcs11/pkcs11-privkey-fork.c b/tests/pkcs11/pkcs11-privkey-fork.c index 9d301d7d62..b99755c73b 100644 --- a/tests/pkcs11/pkcs11-privkey-fork.c +++ b/tests/pkcs11/pkcs11-privkey-fork.c @@ -123,7 +123,6 @@ void doit(void) } gnutls_free(sig.data); - sig.data = NULL; pid = fork(); if (pid != 0) { diff --git a/tests/pkcs11/pkcs11-privkey-generate.c b/tests/pkcs11/pkcs11-privkey-generate.c new file mode 100644 index 0000000000..d3ed905f6f --- /dev/null +++ b/tests/pkcs11/pkcs11-privkey-generate.c @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2018 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#ifdef _WIN32 + +void doit(void) +{ + exit(77); +} + +#else + +#include "../utils.h" +#include "softhsm.h" +#include + +#define CONFIG_NAME "softhsm-generate" +#define CONFIG CONFIG_NAME".config" +#define PIN "1234" +/* Tests whether a gnutls_privkey_generate3 will work generate a key + * which is marked as sensitive. + */ + +static unsigned pin_called = 0; +static const char *_pin = PIN; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +static +int pin_func(void* userdata, int attempt, const char* url, const char *label, + unsigned flags, char *pin, size_t pin_max) +{ + if (_pin == NULL) + return -1; + + strcpy(pin, _pin); + pin_called++; + return 0; +} + +void doit(void) +{ + char buf[128]; + int ret; + const char *lib, *bin; + gnutls_datum_t out; + unsigned flags; + gnutls_pkcs11_obj_t obj; + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + bin = softhsm_bin(); + + lib = softhsm_lib(); + + set_softhsm_conf(CONFIG); + snprintf(buf, sizeof(buf), "%s --init-token --slot 0 --label test --so-pin "PIN" --pin "PIN, bin); + system(buf); + + ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_MANUAL, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_pkcs11_add_provider(lib, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + gnutls_pkcs11_set_pin_function(pin_func, NULL); + + /* generate sensitive */ + ret = gnutls_pkcs11_privkey_generate3("pkcs11:token=test", GNUTLS_PK_RSA, 2048, + "testkey", NULL, GNUTLS_X509_FMT_DER, + &out, 0, GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + assert(gnutls_pkcs11_obj_init(&obj) >= 0); + assert(out.size > 0); + + gnutls_pkcs11_obj_set_pin_function(obj, pin_func, NULL); + assert(gnutls_pkcs11_obj_import_url(obj, "pkcs11:token=test;object=testkey;type=private", GNUTLS_PKCS11_OBJ_FLAG_LOGIN) >= 0); + + assert(gnutls_pkcs11_obj_get_flags(obj, &flags) >= 0); + + assert(!(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE)); + assert(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE); + + gnutls_free(out.data); + gnutls_pkcs11_obj_deinit(obj); + + /* generate non-sensitive */ + ret = gnutls_pkcs11_privkey_generate3("pkcs11:token=test", GNUTLS_PK_RSA, 2048, + "testkey2", NULL, GNUTLS_X509_FMT_DER, + &out, 0, GNUTLS_PKCS11_OBJ_FLAG_LOGIN|GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE); + if (ret < 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + assert(gnutls_pkcs11_obj_init(&obj) >= 0); + assert(out.size > 0); + + gnutls_pkcs11_obj_set_pin_function(obj, pin_func, NULL); + assert(gnutls_pkcs11_obj_import_url(obj, "pkcs11:token=test;object=testkey2;type=private", GNUTLS_PKCS11_OBJ_FLAG_LOGIN) >= 0); + + assert(gnutls_pkcs11_obj_get_flags(obj, &flags) >= 0); + + assert(!(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE)); + assert(flags & GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE); + + gnutls_free(out.data); + gnutls_pkcs11_obj_deinit(obj); + + gnutls_pkcs11_deinit(); + gnutls_global_deinit(); + remove(CONFIG); +} +#endif diff --git a/tests/pkcs11/pkcs11-privkey-safenet-always-auth.c b/tests/pkcs11/pkcs11-privkey-safenet-always-auth.c new file mode 100644 index 0000000000..a4ab5b5aa3 --- /dev/null +++ b/tests/pkcs11/pkcs11-privkey-safenet-always-auth.c @@ -0,0 +1,182 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#ifdef _WIN32 + +void doit(void) +{ + exit(77); +} + +#else + +# include "utils.h" +# include "pkcs11-mock-ext.h" + +/* Tests whether a gnutls_privkey_t will work properly with a key marked + * as always authenticate, but on the safenet HSMs where CKA_ALWAYS_AUTHENTICATE + * is not supported */ + +static unsigned pin_called = 0; +static const char *_pin = "1234"; + +# include +# define P11LIB "libpkcs11mock1.so" + + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +static +int pin_func(void* userdata, int attempt, const char* url, const char *label, + unsigned flags, char *pin, size_t pin_max) +{ + if (_pin == NULL) + return -1; + + strcpy(pin, _pin); + pin_called++; + return 0; +} + +void doit(void) +{ + int ret; + const char *lib; + gnutls_privkey_t key; + gnutls_datum_t sig = {NULL, 0}, data; + + lib = getenv("P11MOCKLIB1"); + if (lib == NULL) + lib = P11LIB; + + { + void *dl; + unsigned int *pflags; + + dl = dlopen(lib, RTLD_NOW); + if (dl == NULL) { + fail("could not dlopen %s\n", lib); + exit(1); + } + + pflags = dlsym(dl, "pkcs11_mock_flags"); + if (pflags == NULL) { + fail("could find pkcs11_mock_flags\n"); + exit(1); + } + + *pflags = MOCK_FLAG_SAFENET_ALWAYS_AUTH; + } + + data.data = (void*)"\x38\x17\x0c\x08\xcb\x45\x8f\xd4\x87\x9c\x34\xb6\xf6\x08\x29\x4c\x50\x31\x2b\xbb"; + data.size = 20; + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_MANUAL, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_pkcs11_add_provider(lib, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_privkey_init(&key); + assert(ret>=0); + + gnutls_privkey_set_pin_function(key, pin_func, NULL); + + ret = gnutls_privkey_import_url(key, "pkcs11:object=test", GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + pin_called = 0; + + ret = gnutls_privkey_sign_hash(key, GNUTLS_DIG_SHA1, 0, &data, &sig); + if (ret < 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + if (pin_called == 0) { + fail("PIN function wasn't called!\n"); + } + pin_called = 0; + + gnutls_free(sig.data); + + /* call again - should re-authenticate */ + ret = gnutls_privkey_sign_hash(key, GNUTLS_DIG_SHA1, 0, &data, &sig); + if (ret < 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + if (pin_called == 0) { + fail("PIN function wasn't called twice!\n"); + } + pin_called = 0; + + gnutls_free(sig.data); + + if (debug) + printf("done\n\n\n"); + + gnutls_privkey_deinit(key); + gnutls_pkcs11_deinit(); + gnutls_global_deinit(); +} +#endif diff --git a/tests/pkcs11/pkcs11-rsa-pss-privkey-test.c b/tests/pkcs11/pkcs11-rsa-pss-privkey-test.c new file mode 100644 index 0000000000..fd8afb5ea8 --- /dev/null +++ b/tests/pkcs11/pkcs11-rsa-pss-privkey-test.c @@ -0,0 +1,271 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "../utils.h" +#include "softhsm.h" + +#define CONFIG_NAME "softhsm-privkey-rsa-pss-test" +#define CONFIG CONFIG_NAME".config" + +/* Tests whether signing with PKCS#11 and RSA-PSS would + * generate valid signatures */ + +#include "../cert-common.h" + +#define PIN "1234" + +static const gnutls_datum_t testdata = { (void *)"test test", 9 }; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +static +int pin_func(void *userdata, int attempt, const char *url, const char *label, + unsigned flags, char *pin, size_t pin_max) +{ + if (attempt == 0) { + strcpy(pin, PIN); + return 0; + } + return -1; +} + +#define myfail(fmt, ...) \ + fail("%s (iter %d): "fmt, gnutls_sign_get_name(sigalgo), i, ##__VA_ARGS__) + +static unsigned verify_rsa_pss_presence(void) +{ + unsigned i; + unsigned long mechanism; + int ret; + + i = 0; + do { + ret = gnutls_pkcs11_token_get_mechanism("pkcs11:", i++, &mechanism); + if (ret >= 0 && mechanism == 0xd /* CKM_RSA_PKCS_PSS*/) + return 1; + } while(ret>=0); + + return 0; +} + +void doit(void) +{ + char buf[128]; + int ret; + const char *lib, *bin; + gnutls_x509_crt_t crt; + gnutls_x509_privkey_t key; + gnutls_datum_t tmp, sig; + gnutls_privkey_t pkey; + gnutls_pubkey_t pubkey; + gnutls_pubkey_t pubkey2; + unsigned i, sigalgo; + + bin = softhsm_bin(); + + lib = softhsm_lib(); + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + gnutls_pkcs11_set_pin_function(pin_func, NULL); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + set_softhsm_conf(CONFIG); + snprintf(buf, sizeof(buf), + "%s --init-token --slot 0 --label test --so-pin " PIN " --pin " + PIN, bin); + system(buf); + + ret = gnutls_pkcs11_add_provider(lib, NULL); + if (ret < 0) { + fprintf(stderr, "gnutls_x509_crt_init: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + if (verify_rsa_pss_presence() == 0) { + fprintf(stderr, "Skipping test as no RSA-PSS mech is supported\n"); + exit(77); + } + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_crt_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_x509_crt_import(crt, &cli_ca3_rsa_pss_cert, + GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_crt_import: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (debug) { + gnutls_x509_crt_print(crt, GNUTLS_CRT_PRINT_ONELINE, &tmp); + + printf("\tCertificate: %.*s\n", tmp.size, tmp.data); + gnutls_free(tmp.data); + } + + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_privkey_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_x509_privkey_import(key, &cli_ca3_rsa_pss_key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_privkey_import: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + /* initialize softhsm token */ + ret = gnutls_pkcs11_token_init(SOFTHSM_URL, PIN, "test"); + if (ret < 0) { + fail("gnutls_pkcs11_token_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_pkcs11_token_set_pin(SOFTHSM_URL, NULL, PIN, + GNUTLS_PIN_USER); + if (ret < 0) { + fail("gnutls_pkcs11_token_set_pin: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_pkcs11_copy_x509_crt(SOFTHSM_URL, crt, "cert", + GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE | + GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + fail("gnutls_pkcs11_copy_x509_crt: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_pkcs11_copy_x509_privkey(SOFTHSM_URL, key, "cert", + GNUTLS_KEY_DIGITAL_SIGNATURE | + GNUTLS_KEY_KEY_ENCIPHERMENT, + GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE + | + GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE + | GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + fail("gnutls_pkcs11_copy_x509_privkey: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + gnutls_x509_crt_deinit(crt); + gnutls_x509_privkey_deinit(key); + gnutls_pkcs11_set_pin_function(NULL, NULL); + + assert(gnutls_privkey_init(&pkey) == 0); + + ret = + gnutls_privkey_import_pkcs11_url(pkey, + SOFTHSM_URL + ";object=cert;object-type=private;pin-value=" + PIN); + if (ret < 0) { + fprintf(stderr, "error in %d: %s\n", __LINE__, + gnutls_strerror(ret)); + exit(1); + } + + assert(gnutls_pubkey_init(&pubkey) == 0); + assert(gnutls_pubkey_import_privkey(pubkey, pkey, 0, 0) == 0); + + assert(gnutls_pubkey_init(&pubkey2) == 0); + assert(gnutls_pubkey_import_x509_raw + (pubkey2, &cli_ca3_rsa_pss_cert, GNUTLS_X509_FMT_PEM, 0) == 0); + + /* this is the algorithm supported by the certificate */ + sigalgo = GNUTLS_SIGN_RSA_PSS_SHA256; + + for (i = 0; i < 20; i++) { + /* check whether privkey and pubkey are operational + * by signing and verifying */ + ret = + gnutls_privkey_sign_data2(pkey, sigalgo, 0, + &testdata, &sig); + if (ret < 0) + myfail("Error signing data %s\n", gnutls_strerror(ret)); + + /* verify against the pubkey in PKCS #11 */ + ret = + gnutls_pubkey_verify_data2(pubkey, sigalgo, 0, + &testdata, &sig); + if (ret < 0) + myfail("Error verifying data1: %s\n", + gnutls_strerror(ret)); + + /* verify against the raw pubkey */ + ret = + gnutls_pubkey_verify_data2(pubkey2, sigalgo, 0, + &testdata, &sig); + if (ret < 0) + myfail("Error verifying data2: %s\n", + gnutls_strerror(ret)); + + gnutls_free(sig.data); + } + + gnutls_pubkey_deinit(pubkey2); + gnutls_pubkey_deinit(pubkey); + gnutls_privkey_deinit(pkey); + + gnutls_global_deinit(); + + remove(CONFIG); +} diff --git a/tests/pkcs11/pkcs11-token-raw.c b/tests/pkcs11/pkcs11-token-raw.c new file mode 100644 index 0000000000..04ff12df39 --- /dev/null +++ b/tests/pkcs11/pkcs11-token-raw.c @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2016-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#ifndef CRYPTOKI_GNU +# define CRYPTOKI_GNU +#endif +#include + +#include "utils.h" + +/* Tests whether a gnutls_pkcs11_token_get_ptr returns valid handles. */ + +#if defined(HAVE___REGISTER_ATFORK) + +#ifdef _WIN32 +# define P11LIB "libpkcs11mock1.dll" +#else +# include +# define P11LIB "libpkcs11mock1.so" +#endif + + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +#define TOKEN_NAME "whatever" +void doit(void) +{ + int ret; + const char *lib; + unsigned long slot_id; + struct ck_function_list *mod; + struct ck_info info; + struct ck_token_info tinfo; + ck_rv_t rv; + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + lib = getenv("P11MOCKLIB1"); + if (lib == NULL) + lib = P11LIB; + + ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_MANUAL, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_pkcs11_add_provider(lib, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + { + static const char url[] = "pkcs11:token="TOKEN_NAME; + + /* Testing a too small buffer */ + size_t size = 1; + char *buf = gnutls_malloc(size); + assert(buf != NULL); + ret = gnutls_pkcs11_token_get_info(url, + GNUTLS_PKCS11_TOKEN_LABEL, + buf, &size); + assert(ret == GNUTLS_E_SHORT_MEMORY_BUFFER); + assert(size == strlen(TOKEN_NAME)+1); + + /* Testing a too small buffer by one */ + size -= 1; + buf = gnutls_realloc(buf, size); + assert(buf != NULL); + ret = gnutls_pkcs11_token_get_info(url, + GNUTLS_PKCS11_TOKEN_LABEL, + buf, &size); + assert(ret == GNUTLS_E_SHORT_MEMORY_BUFFER); + assert(size == strlen(TOKEN_NAME)+1); + + /* Testing an exactly fitting buffer */ + buf = gnutls_realloc(buf, size); + assert(buf != NULL); + ret = gnutls_pkcs11_token_get_info(url, + GNUTLS_PKCS11_TOKEN_LABEL, + buf, &size); + assert(ret == 0); + assert(strcmp(buf, TOKEN_NAME) == 0); + assert(size == strlen(TOKEN_NAME)); + + gnutls_free(buf); + } + + ret = gnutls_pkcs11_token_get_ptr("pkcs11:token=invalid", (void**)&mod, &slot_id, 0); + assert(ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + ret = gnutls_pkcs11_token_get_ptr("pkcs11:", (void**)&mod, &slot_id, 0); + if (ret < 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + rv = mod->C_GetInfo(&info); + if (rv != CKR_OK) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + assert(info.cryptoki_version.major == 0x02); + assert(info.cryptoki_version.minor == 0x14); + assert(info.flags == 0); + assert(info.library_version.major == 0x01); + assert(info.library_version.minor == 0x00); + + rv = mod->C_GetTokenInfo(slot_id, &tinfo); + if (rv != CKR_OK) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + assert(tinfo.session_count == 0); + assert(tinfo.hardware_version.major == 0x01); + assert(tinfo.firmware_version.major == 0x01); + + if (debug) + printf("done\n\n\n"); + + gnutls_pkcs11_deinit(); + gnutls_global_deinit(); +} +#else +void doit(void) +{ + exit(77); +} +#endif diff --git a/tests/pkcs11/tls-neg-pkcs11-key.c b/tests/pkcs11/tls-neg-pkcs11-key.c new file mode 100644 index 0000000000..fc7c3dc4ea --- /dev/null +++ b/tests/pkcs11/tls-neg-pkcs11-key.c @@ -0,0 +1,479 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* This tests TLS negotiation using the gnutls_privkey_import_ext2() APIs */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +#endif +#include +#include +#include +#include +#include +#include "cert-common.h" +#include "eagain-common.h" +#include "utils.h" +#include "softhsm.h" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d> %s", level, str); +} + +#define CONFIG_NAME "softhsm-neg" +#define CONFIG CONFIG_NAME".config" +#define PIN "1234" + +#define testfail(fmt, ...) \ + fail("%s: "fmt, name, ##__VA_ARGS__) + +static unsigned verify_eddsa_presence(void) +{ + unsigned i; + unsigned long mechanism; + int ret; + + i = 0; + do { + ret = gnutls_pkcs11_token_get_mechanism("pkcs11:", i++, &mechanism); + if (ret >= 0 && mechanism == 0x1057 /* CKM_EDDSA */) + return 1; + } while(ret>=0); + + return 0; +} + +static gnutls_privkey_t load_virt_privkey(const char *name, const gnutls_datum_t *txtkey, + int exp_key_err, unsigned needs_decryption) +{ + unsigned flags; + gnutls_privkey_t privkey; + gnutls_x509_privkey_t tmp; + int ret; + + ret = gnutls_x509_privkey_init(&tmp); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = gnutls_x509_privkey_import(tmp, txtkey, GNUTLS_X509_FMT_PEM); + if (ret < 0) + testfail("gnutls_privkey_import: %s\n", gnutls_strerror(ret)); + + if (needs_decryption) + flags = GNUTLS_KEY_KEY_ENCIPHERMENT; + else + flags = GNUTLS_KEY_DIGITAL_SIGNATURE; + + ret = gnutls_pkcs11_copy_x509_privkey(SOFTHSM_URL, tmp, "key", flags, + GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE|GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE|GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + gnutls_x509_privkey_deinit(tmp); + + if (ret < 0) { + if (ret == exp_key_err) { + return NULL; + } + fail("gnutls_pkcs11_copy_x509_privkey: %s\n", gnutls_strerror(ret)); + } + + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = + gnutls_privkey_import_url(privkey, SOFTHSM_URL";object=key", 0); + if (ret < 0) { + if (ret == exp_key_err) { + gnutls_privkey_deinit(privkey); + return NULL; + } + testfail("gnutls_privkey_import: %s\n", gnutls_strerror(ret)); + } + + if (exp_key_err) { + testfail("did not fail in key import, although expected\n"); + } + + return privkey; +} + +static +void try_with_key(const char *name, const char *client_prio, + gnutls_kx_algorithm_t client_kx, + gnutls_sign_algorithm_t server_sign_algo, + gnutls_sign_algorithm_t client_sign_algo, + const gnutls_datum_t *serv_cert, + gnutls_privkey_t key, + int exp_serv_err) +{ + int ret; + gnutls_pcert_st pcert_list[4]; + unsigned pcert_list_size; + /* Server stuff. */ + gnutls_certificate_credentials_t s_xcred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t c_xcred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN, version; + const char *err; + + /* General init. */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + reset_buffers(); + /* Init server */ + gnutls_certificate_allocate_credentials(&s_xcred); + + pcert_list_size = sizeof(pcert_list)/sizeof(pcert_list[0]); + ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size, + serv_cert, GNUTLS_X509_FMT_PEM, 0); + if (ret < 0) { + testfail("error in gnutls_pcert_list_import_x509_raw: %s\n", gnutls_strerror(ret)); + } + + ret = gnutls_certificate_set_key(s_xcred, NULL, 0, pcert_list, + pcert_list_size, key); + if (ret < 0) { + testfail("Could not set key/cert: %s\n", gnutls_strerror(ret)); + } + + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + s_xcred); + + assert(gnutls_priority_set_direct(server, + "NORMAL:+VERS-SSL3.0:+ANON-ECDH:+ANON-DH:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519:+SIGN-EDDSA-ED25519", + NULL) >= 0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + + ret = gnutls_certificate_allocate_credentials(&c_xcred); + if (ret < 0) + exit(1); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + c_xcred); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + ret = gnutls_priority_set_direct(client, client_prio, &err); + if (ret < 0) { + if (ret == GNUTLS_E_INVALID_REQUEST) + fprintf(stderr, "Error in %s\n", err); + exit(1); + } + if (exp_serv_err) { + HANDSHAKE_EXPECT(client, server, GNUTLS_E_AGAIN, exp_serv_err); + goto cleanup; + } else { + HANDSHAKE(client, server); + } + + if (gnutls_kx_get(client) != client_kx) { + testfail("%s: got unexpected key exchange algorithm: %s (expected %s)\n", name, gnutls_kx_get_name(gnutls_kx_get(client)), + gnutls_kx_get_name(client_kx)); + exit(1); + } + + /* test signature algorithm match */ + version = gnutls_protocol_get_version(client); + if (version >= GNUTLS_TLS1_2) { + ret = gnutls_sign_algorithm_get(server); + if (ret != (int)server_sign_algo && server_sign_algo != 0) { + testfail("%s: got unexpected server signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); + exit(1); + } + + ret = gnutls_sign_algorithm_get_client(server); + if (ret != (int)client_sign_algo && client_sign_algo != 0) { + testfail("%s: got unexpected client signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); + exit(1); + } + + ret = gnutls_sign_algorithm_get(client); + if (ret != (int)server_sign_algo && server_sign_algo != 0) { + testfail("%s: cl: got unexpected server signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); + exit(1); + } + + ret = gnutls_sign_algorithm_get_client(client); + if (ret != (int)client_sign_algo && client_sign_algo != 0) { + testfail("%s: cl: got unexpected client signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); + exit(1); + } + } + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + cleanup: + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(s_xcred); + gnutls_certificate_free_credentials(c_xcred); +} + +typedef struct test_st { + const char *name; + gnutls_pk_algorithm_t pk; + const char *prio; + const gnutls_datum_t *cert; + const gnutls_datum_t *key; + gnutls_kx_algorithm_t exp_kx; + int exp_key_err; + int exp_serv_err; + int needs_eddsa; + int needs_decryption; + unsigned requires_pkcs11_pss; +} test_st; + +static const test_st tests[] = { + {.name = "tls1.2: rsa-decryption key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:-KX-ALL:+RSA:-VERS-TLS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_localhost_rsa_decrypt_cert, + .key = &server_ca3_key, + .exp_kx = GNUTLS_KX_RSA, + .needs_decryption = 1 + }, + {.name = "tls1.2: rsa-decryption key, signatures prioritized", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:-KX-ALL:+ECDHE-RSA:+RSA:-VERS-TLS-ALL:+VERS-TLS1.2:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .exp_kx = GNUTLS_KX_RSA, + .needs_decryption = 1 + }, + {.name = "tls1.2: ecc key", + .pk = GNUTLS_PK_ECDSA, + .prio = "NORMAL:-KX-ALL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_localhost_ecc_cert, + .key = &server_ca3_ecc_key, + .exp_kx = GNUTLS_KX_ECDHE_ECDSA + }, + {.name = "tls1.2: rsa-sign key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "tls1.2: rsa-sign key with rsa-pss sigs prioritized", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA256:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA512:+SIGN-RSA-SHA256:+SIGN-RSA-SHA384:+SIGN-RSA-SHA512:-VERS-TLS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "tls1.2: rsa-pss-sign key", + .pk = GNUTLS_PK_RSA_PSS, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_rsa_pss2_cert, + .key = &server_ca3_rsa_pss2_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .requires_pkcs11_pss = 1, + }, + {.name = "tls1.2: rsa-pss cert, rsa-sign key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_rsa_pss_cert, + .key = &server_ca3_rsa_pss_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .requires_pkcs11_pss = 1, + }, + {.name = "tls1.2: rsa-pss cert, rsa-sign key no PSS signatures", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2:-SIGN-RSA-PSS-SHA256:-SIGN-RSA-PSS-SHA384:-SIGN-RSA-PSS-SHA512:-SIGN-RSA-PSS-RSAE-SHA256:-SIGN-RSA-PSS-RSAE-SHA384:-SIGN-RSA-PSS-RSAE-SHA512", + .cert = &server_ca3_rsa_pss_cert, + .key = &server_ca3_rsa_pss_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .exp_serv_err = GNUTLS_E_NO_CIPHER_SUITES + }, + {.name = "tls1.2: ed25519 cert, ed25519 key", + .pk = GNUTLS_PK_EDDSA_ED25519, + .needs_eddsa = 1, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA", + .cert = &server_ca3_eddsa_cert, + .key = &server_ca3_eddsa_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + }, + {.name = "tls1.3: ecc key", + .pk = GNUTLS_PK_ECDSA, + .prio = "NORMAL:-KX-ALL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3", + .cert = &server_ca3_localhost_ecc_cert, + .key = &server_ca3_ecc_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "tls1.3: rsa-sign key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "tls1.3: rsa-sign key with rsa-pss sigs prioritized", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:-SIGN-ALL:+SIGN-RSA-PSS-SHA256:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA512:+SIGN-RSA-PSS-RSAE-SHA256:+SIGN-RSA-PSS-RSAE-SHA384:+SIGN-RSA-PSS-RSAE-SHA512:-VERS-TLS-ALL:+VERS-TLS1.3", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "tls1.3: rsa-pss-sign key", + .pk = GNUTLS_PK_RSA_PSS, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3", + .cert = &server_ca3_rsa_pss2_cert, + .key = &server_ca3_rsa_pss2_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .requires_pkcs11_pss = 1, + }, + {.name = "tls1.3: rsa-pss cert, rsa-sign key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3", + .cert = &server_ca3_rsa_pss_cert, + .key = &server_ca3_rsa_pss_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .requires_pkcs11_pss = 1, + }, + {.name = "tls1.3: rsa-pss cert, rsa-sign key no PSS signatures", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3:-SIGN-RSA-PSS-SHA256:-SIGN-RSA-PSS-SHA384:-SIGN-RSA-PSS-SHA512:-SIGN-RSA-PSS-RSAE-SHA256:-SIGN-RSA-PSS-RSAE-SHA384:-SIGN-RSA-PSS-RSAE-SHA512", + .cert = &server_ca3_rsa_pss_cert, + .key = &server_ca3_rsa_pss_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .exp_serv_err = GNUTLS_E_NO_CIPHER_SUITES + }, + {.name = "tls1.3: ed25519 cert, ed25519 key", + .needs_eddsa = 1, + .pk = GNUTLS_PK_EDDSA_ED25519, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA", + .cert = &server_ca3_eddsa_cert, + .key = &server_ca3_eddsa_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA + } +}; + +static +int pin_func(void* userdata, int attempt, const char* url, const char *label, + unsigned flags, char *pin, size_t pin_max) +{ + if (attempt == 0) { + strcpy(pin, PIN); + return 0; + } + return -1; +} + +#ifndef CKM_RSA_PKCS_PSS +# define CKM_RSA_PKCS_PSS (0xdUL) +#endif + +void doit(void) +{ + gnutls_privkey_t privkey; + const char *bin, *lib; + char buf[512]; + unsigned int i, have_eddsa; + int ret; + +#ifdef _WIN32 + exit(77); +#endif + bin = softhsm_bin(); + + lib = softhsm_lib(); + + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + + /* initialize token */ + gnutls_pkcs11_set_pin_function(pin_func, NULL); + set_softhsm_conf(CONFIG); + snprintf(buf, sizeof(buf), "%s --init-token --slot 0 --label test --so-pin "PIN" --pin "PIN, bin); + system(buf); + + ret = gnutls_pkcs11_add_provider(lib, NULL); + if (ret < 0) { + fail("gnutls_pkcs11_add_provider: %s\n", + gnutls_strerror(ret)); + } + + have_eddsa = verify_eddsa_presence(); + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "tls13/ext-parse.h" +#include "pkcs11/softhsm.h" +#include "utils.h" + +/* This program tests that TLS 1.3 is disabled as expected. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define P11LIB "libpkcs11mock2.so" + +#define PIN "1234" + +#define CONFIG_NAME "softhsm-neg-no-key" +#define CONFIG CONFIG_NAME".config" + +static +int pin_func(void *userdata, int attempt, const char *url, const char *label, + unsigned flags, char *pin, size_t pin_max) +{ + if (attempt == 0) { + strcpy(pin, PIN); + return 0; + } + return -1; +} + +static void client(int fd) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + ret = gnutls_certificate_allocate_credentials(&x509_cred); + if (ret < 0) + exit(1); + + ret = gnutls_certificate_set_x509_trust_mem(x509_cred, &ca_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); + + /* Initialize TLS session + */ + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + if (ret < 0) + fail("cannot set credentials\n"); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2", NULL); + if (ret < 0) + fail("cannot set priorities\n"); + + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (debug) + success("client handshake completed\n"); + + if (gnutls_protocol_get_version(session) == GNUTLS_TLS1_2) { + if (debug) + success("session is downgraded to TLS 1.2\n"); + } else + fail("session is NOT downgraded to TLS 1.2\n"); + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_WR); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + close(fd); + + gnutls_deinit(session); + + gnutls_global_deinit(); +} + +static void server(int fd) +{ + int ret; + const char *lib; + gnutls_x509_crt_t crt; + gnutls_x509_privkey_t key; + gnutls_datum_t tmp; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + /* point to SoftHSM token that libpkcs11mock2.so internally uses */ + setenv(SOFTHSM_ENV, CONFIG, 1); + + gnutls_pkcs11_set_pin_function(pin_func, NULL); + + lib = getenv("P11MOCKLIB2"); + if (lib == NULL) + lib = P11LIB; + + ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_MANUAL, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_pkcs11_add_provider(lib, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_crt_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_x509_crt_import(crt, &server_ca3_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_crt_import: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (debug) { + gnutls_x509_crt_print(crt, GNUTLS_CRT_PRINT_ONELINE, &tmp); + + printf("\tCertificate: %.*s\n", tmp.size, tmp.data); + gnutls_free(tmp.data); + } + + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_privkey_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_x509_privkey_import(key, &server_ca3_key, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_privkey_import: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + /* initialize softhsm token */ + ret = gnutls_pkcs11_token_init(SOFTHSM_URL, PIN, "test"); + if (ret < 0) { + fail("gnutls_pkcs11_token_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_pkcs11_token_set_pin(SOFTHSM_URL, NULL, PIN, + GNUTLS_PIN_USER); + if (ret < 0) { + fail("gnutls_pkcs11_token_set_pin: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_pkcs11_copy_x509_crt(SOFTHSM_URL, crt, "cert", + GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE | + GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + fail("gnutls_pkcs11_copy_x509_crt: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_pkcs11_copy_x509_privkey(SOFTHSM_URL, key, "cert", + GNUTLS_KEY_DIGITAL_SIGNATURE | + GNUTLS_KEY_KEY_ENCIPHERMENT, + GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE + | + GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE + | GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + fail("gnutls_pkcs11_copy_x509_privkey: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + gnutls_x509_crt_deinit(crt); + gnutls_x509_privkey_deinit(key); + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + assert(gnutls_certificate_set_x509_key_file(x509_cred, + SOFTHSM_URL + ";object=cert;object-type=cert", + SOFTHSM_URL + ";object=cert;object-type=private;pin-value=" + PIN, + GNUTLS_X509_FMT_DER)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2", NULL); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (debug) + success("server handshake completed\n"); + + if (gnutls_protocol_get_version(session) == GNUTLS_TLS1_2) { + if (debug) + success("session is downgraded to TLS 1.2\n"); + } else + fail("session is NOT downgraded to TLS 1.2\n"); + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_RDWR); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +void doit(void) +{ + const char *bin; + char buf[128]; + int fd[2]; + int ret; + pid_t child; + int status = 0; + + /* check if softhsm module is loadable */ + (void) softhsm_lib(); + + /* initialize SoftHSM token that libpkcs11mock2.so internally uses */ + bin = softhsm_bin(); + + set_softhsm_conf(CONFIG); + snprintf(buf, sizeof(buf), + "%s --init-token --slot 0 --label test --so-pin " PIN " --pin " + PIN, bin); + system(buf); + + signal(SIGCHLD, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0]); + kill(child, SIGTERM); + wait(&status); + check_wait_status(status); + } else { + close(fd[0]); + client(fd[1]); + exit(0); + } + +} +#endif /* _WIN32 */ diff --git a/tests/pkcs7-cat.sh b/tests/pkcs7-cat.sh new file mode 100755 index 0000000000..2f3b0b0b35 --- /dev/null +++ b/tests/pkcs7-cat.sh @@ -0,0 +1,98 @@ +#!/bin/sh + +# Copyright (C) 2016 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +#set -e + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../src/certtool${EXEEXT}}" +DIFF="${DIFF:-diff -b -B}" +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi +OUTFILE=out-pkcs7.$$.tmp + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +. ${srcdir}/scripts/common.sh + +check_for_datefudge + +#try verification +datefudge -s "2010-10-10" \ +${VALGRIND} "${CERTTOOL}" --verify-allow-broken --inder --p7-verify --infile "${srcdir}/data/test1.cat" --load-certificate "${srcdir}/data/pkcs7-cat-ca.pem" +rc=$? + +if test "${rc}" = "0"; then + echo "PKCS7 verification succeeded with invalid date" + exit 1 +fi + +datefudge -s "2016-10-10" \ +${VALGRIND} "${CERTTOOL}" --verify-allow-broken --inder --p7-verify --infile "${srcdir}/data/test1.cat" --load-certificate "${srcdir}/data/pkcs7-cat-ca.pem" +rc=$? + +if test "${rc}" != "0"; then + echo "PKCS7 verification failed" + exit ${rc} +fi + +# try parsing +for FILE in test1.cat test2.cat; do +${VALGRIND} "${CERTTOOL}" --inder --p7-info --infile "${srcdir}/data/${FILE}" > "${OUTFILE}" +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 decoding failed" + exit ${rc} +fi + +${DIFF} "${OUTFILE}" "${srcdir}/data/${FILE}.out" #>/dev/null +if test "$?" != "0"; then + echo "${FILE}: PKCS7 decoding didn't produce the correct file" + exit 1 +fi +done + +rm -f "${OUTFILE}" +#test output files + +for FILE in test1.cat test2.cat; do +${VALGRIND} "${CERTTOOL}" --inder --p7-info --p7-show-data --infile "${srcdir}/data/${FILE}" --outfile "${OUTFILE}" +rc=$? + +# We're done. +if test "${rc}" != "0"; then + echo "${FILE}: PKCS7 decoding failed" + exit ${rc} +fi + +${DIFF} "${OUTFILE}" "${srcdir}/data/${FILE}.data" >/dev/null +if test "$?" != "0"; then + echo "${FILE}: PKCS7 decoding data didn't produce the correct file" + exit 1 +fi +done + +rm -f "${OUTFILE}" + +exit 0 diff --git a/tests/pkcs7-interesting/pkcs7-1.der b/tests/pkcs7-interesting/pkcs7-1.der deleted file mode 100644 index 06f6f9c000..0000000000 Binary files a/tests/pkcs7-interesting/pkcs7-1.der and /dev/null differ diff --git a/tests/pkcs7-interesting/pkcs7-1.der.err b/tests/pkcs7-interesting/pkcs7-1.der.err deleted file mode 100644 index 55232a5c5a..0000000000 --- a/tests/pkcs7-interesting/pkcs7-1.der.err +++ /dev/null @@ -1 +0,0 @@ --73 diff --git a/tests/pkcs7-interesting/pkcs7-2.der b/tests/pkcs7-interesting/pkcs7-2.der deleted file mode 100644 index 9c38f9fc84..0000000000 Binary files a/tests/pkcs7-interesting/pkcs7-2.der and /dev/null differ diff --git a/tests/pkcs7-interesting/pkcs7-2.der.err b/tests/pkcs7-interesting/pkcs7-2.der.err deleted file mode 100644 index 55232a5c5a..0000000000 --- a/tests/pkcs7-interesting/pkcs7-2.der.err +++ /dev/null @@ -1 +0,0 @@ --73 diff --git a/tests/pkcs7.c b/tests/pkcs7.c index a490976fc5..2d5a5548d4 100644 --- a/tests/pkcs7.c +++ b/tests/pkcs7.c @@ -90,7 +90,6 @@ static int getnextfile(DIR **dirp, gnutls_datum_t *der, int *exp_ret) *exp_ret = atoi((char*)local.data); success("expecting error code %d\n", *exp_ret); gnutls_free(local.data); - local.data = NULL; } return 0; @@ -134,7 +133,6 @@ void doit(void) gnutls_pkcs7_deinit(cert); gnutls_free(der.data); - der.data = NULL; der.size = 0; exp_ret = -1; } diff --git a/tests/pkgconfig.sh b/tests/pkgconfig.sh index 6bd4e62f9c..e1034162ae 100755 --- a/tests/pkgconfig.sh +++ b/tests/pkgconfig.sh @@ -23,6 +23,7 @@ srcdir="${srcdir:-.}" top_builddir="${top_builddir:-..}" PKGCONFIG="${PKG_CONFIG:-$(which pkg-config)}" +CC=${CC:-cc} unset RETCODE TMPFILE=c.$$.tmp.c TMPFILE_O=c.$$.tmp.o @@ -31,16 +32,29 @@ echo "$CFLAGS"|grep sanitize && exit 77 ${PKGCONFIG} --version >/dev/null || exit 77 -PKG_CONFIG_PATH=${top_builddir}/lib -export PKG_CONFIG_PATH - -OTHER=$(${PKGCONFIG} --libs --static libidn) -OTHER="${OTHER} $(${PKGCONFIG} --libs --static p11-kit-1)" -if test -n "${OTHER}" && test "${OTHER#*-R}" != "$OTHER";then - echo "Found invalid string in libidn flags: ${OTHER}" +${PKGCONFIG} --libs nettle +if test $? != 0;then + echo "Nettle was not found in pkg-config" exit 77 fi +for lib in libidn2 p11-kit-1 +do + OTHER=$(${PKGCONFIG} --libs --static $lib) + if test -n "${OTHER}" && test "${OTHER#*-R}" != "$OTHER";then + echo "Found invalid string in $lib flags: ${OTHER}" + exit 77 + fi +done + +if ! test -r ${top_builddir}/lib/gnutls.pc ;then + echo "gnutls.pc not present at ${top_builddir}/lib" + exit 1 +fi + +PKG_CONFIG_PATH=${top_builddir}/lib:$PKG_CONFIG_PATH +export PKG_CONFIG_PATH + set -e cat >$TMPFILE <<__EOF__ @@ -52,16 +66,18 @@ gnutls_global_init(); } __EOF__ -COMMON="-I${PKG_CONFIG_PATH}/includes -L${PKG_CONFIG_PATH}/.libs -I${srcdir}/../lib/includes" +COMMON="-I${top_builddir}/lib/includes -L${top_builddir}/lib/.libs -I${srcdir}/../lib/includes" echo "Trying dynamic linking with:" echo " * flags: $(${PKGCONFIG} --libs gnutls)" echo " * common: ${COMMON}" echo " * lib: ${CFLAGS}" -cc ${TMPFILE} -o ${TMPFILE_O} $(${PKGCONFIG} --libs gnutls) $(${PKGCONFIG} --cflags gnutls) ${COMMON} +echo cc ${TMPFILE} -o ${TMPFILE_O} $(${PKGCONFIG} --libs gnutls) $(${PKGCONFIG} --cflags gnutls) ${COMMON} +${CC} ${TMPFILE} -o ${TMPFILE_O} $(${PKGCONFIG} --libs gnutls) $(${PKGCONFIG} --cflags gnutls) ${COMMON} echo "" echo "Trying static linking with $(${PKGCONFIG} --libs --static gnutls)" -cc ${TMPFILE} -o ${TMPFILE_O} $(${PKGCONFIG} --static --libs gnutls) $(${PKGCONFIG} --cflags gnutls) ${COMMON} +echo cc ${TMPFILE} -o ${TMPFILE_O} $(${PKGCONFIG} --static --libs gnutls) $(${PKGCONFIG} --cflags gnutls) ${COMMON} +${CC} ${TMPFILE} -o ${TMPFILE_O} $(${PKGCONFIG} --static --libs gnutls) $(${PKGCONFIG} --cflags gnutls) ${COMMON} rm -f ${TMPFILE} ${TMPFILE_O} diff --git a/tests/post-client-hello-change-prio.c b/tests/post-client-hello-change-prio.c new file mode 100644 index 0000000000..833a538cf0 --- /dev/null +++ b/tests/post-client-hello-change-prio.c @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2018 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" + +/* Tests whether the post_client_hello callback can modify + * the avalable priorities. This is used by apache's mod_gnutls. + */ + +const char *side; +static int pch_ok = 0; +const char *override_prio = NULL; + +static int post_client_hello_callback(gnutls_session_t session) +{ + assert(gnutls_priority_set_direct(session, override_prio, NULL) >= 0); + pch_ok = 1; + return 0; +} + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static +void start(const char *name, const char *prio, gnutls_protocol_t exp_version) +{ + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + + success("trying %s\n", name); + + pch_ok = 0; + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4); + + /* Init server */ + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM)>=0); + assert(gnutls_init(&server, GNUTLS_SERVER)>=0); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + assert(gnutls_priority_set_direct(server, prio, NULL)>=0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + gnutls_handshake_set_post_client_hello_function(server, + post_client_hello_callback); + + assert(gnutls_certificate_allocate_credentials(&clientx509cred)>=0); + assert(gnutls_init(&client, GNUTLS_CLIENT)>=0); + gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + assert(gnutls_priority_set_direct(client, prio, NULL)>=0); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + assert(exp_version == gnutls_protocol_get_version(client)); + assert(exp_version == gnutls_protocol_get_version(server)); + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); + + if (pch_ok == 0) + fail("Post client hello callback wasn't called\n"); + + reset_buffers(); +} + +void doit(void) +{ + override_prio = "NORMAL"; + start("tls1.2-only", "NORMAL:-VERS-ALL:+VERS-TLS1.2", GNUTLS_TLS1_2); + start("tls1.3-only", "NORMAL:-VERS-ALL:+VERS-TLS1.3", GNUTLS_TLS1_3); + start("default", "NORMAL", GNUTLS_TLS1_3); + override_prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2"; + start("default overriden to TLS1.2-only", "NORMAL", GNUTLS_TLS1_2); +} diff --git a/tests/prf.c b/tests/prf.c index 78526cfba8..aa4f36af6a 100644 --- a/tests/prf.c +++ b/tests/prf.c @@ -41,6 +41,7 @@ int main(int argc, char **argv) #include #include #include +#include #include #include @@ -282,6 +283,14 @@ static void client(int fd) gnutls_handshake_set_random(session, &hrnd); gnutls_transport_set_int(session, fd); + if (gnutls_prf(session, 4, "aaaa", 0, 0, NULL, sizeof(err), (char *)&err) != + GNUTLS_E_INVALID_REQUEST || + gnutls_prf_rfc5705(session, 4, "aaaa", 0, NULL, sizeof(err), (char *)&err) != + GNUTLS_E_INVALID_REQUEST) { + fprintf(stderr, "unexpected prf error code\n"); + exit(1); + } + /* Perform the TLS handshake */ do { @@ -314,6 +323,12 @@ static void client(int fd) exit(1); } + ret = gnutls_prf_hash_get(session); + if (ret != GNUTLS_DIG_MD5_SHA1) { + fprintf(stderr, "negotiated unexpected hash: %s\n", gnutls_digest_get_name(ret)); + exit(1); + } + check_prfs(session); gnutls_bye(session, GNUTLS_SHUT_WR); @@ -423,6 +438,8 @@ static void start(void) int fd[2]; int ret; + signal(SIGPIPE, SIG_IGN); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { perror("socketpair"); diff --git a/tests/priorities-groups.c b/tests/priorities-groups.c new file mode 100644 index 0000000000..b883088541 --- /dev/null +++ b/tests/priorities-groups.c @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#include "utils.h" + +static void +try_prio(const char *prio, unsigned group_size, const unsigned int *group_list, + unsigned curve_size, const unsigned int *curve_list) +{ + int ret; + gnutls_priority_t p; + const char *err; + unsigned i; + const unsigned int *list; + + ret = gnutls_priority_init(&p, prio, &err); + if (ret < 0) { + fprintf(stderr, "error: %s: %s\n", gnutls_strerror(ret), + err); + exit(1); + } + + ret = gnutls_priority_group_list(p, &list); + if ((unsigned)ret != group_size) { + fail("%s: group size (%d) doesn't match expected (%d)\n", prio, ret, group_size); + } + + for (i=0;i= 0) + gnutls_priority_deinit(p); + + if (debug) + success("finished: %s\n", prio); +} + void doit(void) { - const int null = 4; - int sec128_cs = 53; - int sec256_cs = 22; - int normal_cs = 53; - int normal_ciphers = 11; - int pfs_cs = 39; + const int null = 3; + int sec128_cs = 29; + int sec256_cs = 12; + int normal_cs = 29; + int pfs_cs = 23; + int null_normal_cs = 28; /* disables TLS1.3 CS */ + int normal_ciphers = 7; if (gnutls_fips140_mode_enabled()) { - normal_cs = 30; + normal_cs = 25; normal_ciphers = 6; - pfs_cs = 22; - sec256_cs = 11; - sec128_cs = 30; + pfs_cs = 25; + sec256_cs = 8; + sec128_cs = 25; } try_prio("NORMAL", normal_cs, normal_ciphers, __LINE__); @@ -114,20 +134,26 @@ void doit(void) if (!gnutls_fips140_mode_enabled()) { try_prio("PFS", pfs_cs, normal_ciphers, __LINE__); - try_prio("NORMAL:+CIPHER-ALL", normal_cs, 11, __LINE__); /* all (except null) */ + try_prio("NORMAL:+CIPHER-ALL", normal_cs, 7, __LINE__); /* all (except null) */ try_prio("NORMAL:-CIPHER-ALL:+NULL", null, 1, __LINE__); /* null */ - try_prio("NORMAL:-CIPHER-ALL:+NULL:+CIPHER-ALL", normal_cs + null, 12, __LINE__); /* should be null + all */ - try_prio("NORMAL:-CIPHER-ALL:+NULL:+CIPHER-ALL:-CIPHER-ALL:+AES-128-CBC", 8, 1, __LINE__); /* should be null + all */ + try_prio("NORMAL:-CIPHER-ALL:+NULL:+CIPHER-ALL", null_normal_cs, 8, __LINE__); /* should be null + all */ + try_prio("NORMAL:-CIPHER-ALL:+NULL:+CIPHER-ALL:-CIPHER-ALL:+AES-128-CBC", 4, 1, __LINE__); /* should be null + all */ +#ifdef ENABLE_GOST + try_prio("NONE:+VERS-TLS1.2:+GOST", 1, 1, __LINE__); +#endif } try_prio("PERFORMANCE", normal_cs, normal_ciphers, __LINE__); - try_prio("SECURE256", sec256_cs, 6, __LINE__); - try_prio("SECURE128", sec128_cs, 11, __LINE__); - try_prio("SECURE128:+SECURE256", sec128_cs, 11, __LINE__); /* should be the same as SECURE128 */ - try_prio("SECURE128:+SECURE256:+NORMAL", normal_cs, 11, __LINE__); /* should be the same as NORMAL */ + try_prio("SECURE256", sec256_cs, 4, __LINE__); + try_prio("SECURE128", sec128_cs, 7, __LINE__); + try_prio("SECURE128:+SECURE256", sec128_cs, 7, __LINE__); /* should be the same as SECURE128 */ + try_prio("SECURE128:+SECURE256:+NORMAL", normal_cs, 7, __LINE__); /* should be the same as NORMAL */ try_prio("SUITEB192", 1, 1, __LINE__); try_prio("SUITEB128", 2, 2, __LINE__); /* check legacy strings */ try_prio("NORMAL:+RSA-EXPORT:+ARCFOUR-40", normal_cs, normal_ciphers, __LINE__); -} + try_prio_err("NORMAL:-VERS-ALL:+VERS-TLS1.2:-SIGN-ALL:+SIGN-ECDSA-SECP256R1-SHA256", GNUTLS_E_NO_PRIORITIES_WERE_SET); + try_prio_err("NORMAL:-VERS-ALL:+VERS-TLS1.2:-SIGN-ALL", GNUTLS_E_NO_PRIORITIES_WERE_SET); + try_prio_err("NORMAL:-VERS-ALL:+VERS-DTLS1.2:-SIGN-ALL", GNUTLS_E_NO_PRIORITIES_WERE_SET); +} diff --git a/tests/priority-init2.c b/tests/priority-init2.c new file mode 100644 index 0000000000..25919f16ad --- /dev/null +++ b/tests/priority-init2.c @@ -0,0 +1,298 @@ +/* + * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Simon Josefsson, Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" + +const char *side; +extern const char *_gnutls_default_priority_string; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +struct test_st { + const char *name; + const char *add_prio; + const char *def_prio; + int exp_err; + int exp_etm; + unsigned err_pos; + unsigned exp_vers; +}; + +static void start(struct test_st *test) +{ + int ret; + /* Server stuff. */ + gnutls_priority_t cache; + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + const char *ep; + int cret = GNUTLS_E_AGAIN; + + if (test == NULL) + success("running gnutls_set_default_priority test\n"); + else + success("running %s\n", test->name); + + if (test && test->def_prio) + _gnutls_default_priority_string = test->def_prio; + else + _gnutls_default_priority_string = "NORMAL"; + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&server, GNUTLS_SERVER) >= 0); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + if (test == NULL) { + ret = gnutls_priority_init(&cache, NULL, NULL); + if (ret < 0) + fail("error: %s\n", gnutls_strerror(ret)); + } else { + ret = gnutls_priority_init2(&cache, test->add_prio, &ep, GNUTLS_PRIORITY_INIT_DEF_APPEND); + if (ret < 0) { + if (test->exp_err == ret) { + if (strchr(_gnutls_default_priority_string, '@') != 0) { + if (ep != test->add_prio) { + fail("error expected error on start of string[%d]: %s\n", + test->err_pos, test->add_prio); + } + } else { + if (ep-test->add_prio != test->err_pos) { + fprintf(stderr, "diff: %d\n", (int)(ep-test->add_prio)); + fail("error expected error on different position[%d]: %s\n", + test->err_pos, test->add_prio); + } + } + goto cleanup; + } + fail("error: %s\n", gnutls_strerror(ret)); + } + } + gnutls_priority_set(server, cache); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_set_default_priority(client); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + /* check gnutls_certificate_get_ours() - client side */ + { + const gnutls_datum_t *mcert; + + mcert = gnutls_certificate_get_ours(client); + if (mcert != NULL) { + fail("gnutls_certificate_get_ours(): failed\n"); + exit(1); + } + } + + if (test && test->exp_vers != 0) { + if (test->exp_vers != gnutls_protocol_get_version(server)) { + fail("expected version %s, got %s\n", + gnutls_protocol_get_name(test->exp_vers), + gnutls_protocol_get_name(gnutls_protocol_get_version(server))); + } + } + + /* check the number of certificates received */ + { + unsigned cert_list_size = 0; + gnutls_typed_vdata_st data[2]; + unsigned status; + + memset(data, 0, sizeof(data)); + + data[0].type = GNUTLS_DT_DNS_HOSTNAME; + data[0].data = (void*)"localhost1"; + + data[1].type = GNUTLS_DT_KEY_PURPOSE_OID; + data[1].data = (void*)GNUTLS_KP_TLS_WWW_SERVER; + + gnutls_certificate_get_peers(client, &cert_list_size); + if (cert_list_size < 2) { + fprintf(stderr, "received a certificate list of %d!\n", cert_list_size); + exit(1); + } + + ret = gnutls_certificate_verify_peers(client, data, 2, &status); + if (ret < 0) { + fprintf(stderr, "could not verify certificate: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (status == 0) { + fprintf(stderr, "should not have accepted!\n"); + exit(1); + } + + data[0].type = GNUTLS_DT_DNS_HOSTNAME; + data[0].data = (void*)"localhost"; + + ret = gnutls_certificate_verify_peers(client, data, 2, &status); + if (ret < 0) { + fprintf(stderr, "could not verify certificate: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (status != 0) { + fprintf(stderr, "could not verify certificate: %.4x\n", status); + exit(1); + } + } + + if (test && test->exp_etm) { + ret = gnutls_session_ext_master_secret_status(client); + if (ret != 1) { + fprintf(stderr, "Extended master secret wasn't negotiated by default (client ret: %d)\n", ret); + exit(1); + } + + ret = gnutls_session_ext_master_secret_status(server); + if (ret != 1) { + fprintf(stderr, "Extended master secret wasn't negotiated by default (server ret: %d)\n", ret); + exit(1); + } + } + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_certificate_free_credentials(clientx509cred); + cleanup: + gnutls_priority_deinit(cache); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + + gnutls_global_deinit(); + reset_buffers(); +} + +struct test_st tests[] = { + { + .name = "additional flag", + .def_prio = "NORMAL", + .add_prio = "%FORCE_ETM", + .exp_err = 0 + }, + { + .name = "additional flag typo1", + .def_prio = "NORMAL", + .add_prio = ":%FORCE_ETM", + .exp_err = GNUTLS_E_INVALID_REQUEST, + .err_pos = 0 + }, + { + .name = "additional flag typo2", + .def_prio = "NORMAL", + .add_prio = "%FORCE_ETM::%NO_TICKETS", + .exp_err = GNUTLS_E_INVALID_REQUEST, + .err_pos = 11 + }, + { + .name = "additional flag typo3", + .def_prio = "NORMAL", + .add_prio = "%FORCE_ETM:%%NO_TICKETS", + .exp_err = GNUTLS_E_INVALID_REQUEST, + .err_pos = 11 + }, + { + .name = "additional flag typo3 (with resolved def prio)", + .def_prio = "@HELLO", + .add_prio = "%FORCE_ETM:%%NO_TICKETS", + .exp_err = GNUTLS_E_INVALID_REQUEST, + .err_pos = 0 + }, + { + .name = "additional flag for version (functional)", + .def_prio = "NORMAL", + .add_prio = "-VERS-ALL:+VERS-TLS1.1", + .exp_etm = 1, + .exp_err = 0, + .exp_vers = GNUTLS_TLS1_1 + } +}; + + +void doit(void) +{ + start(NULL); + for (unsigned i=0;i 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } } diff --git a/tests/priority-set.c b/tests/priority-set.c new file mode 100644 index 0000000000..dcb21d8694 --- /dev/null +++ b/tests/priority-set.c @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" + +/* This tests whether a priority which is used by multiple sessions, + * will be properly deinitialized. + */ + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static time_t mytime(time_t * t) +{ + time_t then = 1461671166; + + if (t) + *t = then; + + return then; +} + +void doit(void) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + gnutls_priority_t cache; + int cret = GNUTLS_E_AGAIN; + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + gnutls_global_set_time_function(mytime); + + assert(gnutls_priority_init(&cache, "NORMAL", NULL) >= 0); + + /* Init server */ + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + gnutls_priority_set(server, cache); + gnutls_priority_deinit(cache); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + assert(gnutls_priority_set_direct(client, "NORMAL", NULL)>=0); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + gnutls_deinit(server); + gnutls_deinit(client); + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} diff --git a/tests/priority-set2.c b/tests/priority-set2.c new file mode 100644 index 0000000000..df99e17794 --- /dev/null +++ b/tests/priority-set2.c @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" + +/* This tests whether a priority which is deinitialized after set + * will continue working in a session. + */ + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static time_t mytime(time_t * t) +{ + time_t then = 1461671166; + + if (t) + *t = then; + + return then; +} + +void doit(void) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + gnutls_priority_t cache; + int cret = GNUTLS_E_AGAIN; + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + gnutls_global_set_time_function(mytime); + + assert(gnutls_priority_init(&cache, "NORMAL", NULL) >= 0); + + /* Init server */ + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + gnutls_priority_set(server, cache); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + gnutls_priority_set(client, cache); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + gnutls_deinit(server); + gnutls_deinit(client); + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + gnutls_priority_deinit(cache); + + gnutls_global_deinit(); +} diff --git a/tests/privkey-keygen.c b/tests/privkey-keygen.c index 72201f4b18..31634bd095 100644 --- a/tests/privkey-keygen.c +++ b/tests/privkey-keygen.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Author: David Marín Carreño * @@ -15,9 +16,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ #ifdef HAVE_CONFIG_H @@ -36,6 +36,10 @@ #define MAX_TRIES 2 +/* This tests the key generation, as well as the sign/verification + * functionality of the supported public key algorithms. + */ + static int sec_param[MAX_TRIES] = #ifdef ENABLE_FIPS140 { GNUTLS_SEC_PARAM_MEDIUM, GNUTLS_SEC_PARAM_HIGH }; @@ -53,33 +57,38 @@ const gnutls_datum_t raw_data = { 11 }; -static void sign_verify_data(gnutls_x509_privkey_t pkey) +static void sign_verify_data(gnutls_pk_algorithm_t algorithm, gnutls_x509_privkey_t pkey) { int ret; gnutls_privkey_t privkey; gnutls_pubkey_t pubkey; gnutls_datum_t signature; + gnutls_digest_algorithm_t digest; - /* sign arbitrary data */ assert(gnutls_privkey_init(&privkey) >= 0); ret = gnutls_privkey_import_x509(privkey, pkey, 0); if (ret < 0) fail("gnutls_privkey_import_x509\n"); - ret = gnutls_privkey_sign_data(privkey, GNUTLS_DIG_SHA256, 0, - &raw_data, &signature); - if (ret < 0) - fail("gnutls_x509_privkey_sign_data\n"); - - /* verify data */ assert(gnutls_pubkey_init(&pubkey) >= 0); ret = gnutls_pubkey_import_privkey(pubkey, privkey, 0, 0); if (ret < 0) fail("gnutls_pubkey_import_privkey\n"); - ret = gnutls_pubkey_verify_data2(pubkey, gnutls_pk_to_sign(gnutls_pubkey_get_pk_algorithm(pubkey, NULL),GNUTLS_DIG_SHA256), + ret = gnutls_pubkey_get_preferred_hash_algorithm (pubkey, &digest, NULL); + if (ret < 0) + fail("gnutls_pubkey_get_preferred_hash_algorithm\n"); + + /* sign arbitrary data */ + ret = gnutls_privkey_sign_data(privkey, digest, 0, + &raw_data, &signature); + if (ret < 0) + fail("gnutls_privkey_sign_data\n"); + + /* verify data */ + ret = gnutls_pubkey_verify_data2(pubkey, gnutls_pk_to_sign(gnutls_pubkey_get_pk_algorithm(pubkey, NULL),digest), 0, &raw_data, &signature); if (ret < 0) fail("gnutls_pubkey_verify_data2\n"); @@ -103,11 +112,28 @@ void doit(void) gnutls_global_set_log_level(4711); for (i = 0; i < MAX_TRIES; i++) { - for (algorithm = GNUTLS_PK_RSA; algorithm <= GNUTLS_PK_EC; + for (algorithm = GNUTLS_PK_RSA; algorithm <= GNUTLS_PK_MAX; algorithm++) { - if (algorithm == GNUTLS_PK_DH) + if (algorithm == GNUTLS_PK_DH || + algorithm == GNUTLS_PK_ECDH_X25519 || + algorithm == GNUTLS_PK_ECDH_X448) continue; + if (algorithm == GNUTLS_PK_GOST_01 || + algorithm == GNUTLS_PK_GOST_12_256 || + algorithm == GNUTLS_PK_GOST_12_512) { + /* Skip GOST algorithms: + * - If they are disabled by ./configure option + * - Or in FIPS140 mode + */ +#ifdef ENABLE_GOST + if (gnutls_fips140_mode_enabled()) + continue; +#else + continue; +#endif + } + ret = gnutls_x509_privkey_init(&pkey); if (ret < 0) { fail("gnutls_x509_privkey_init: %d\n", @@ -151,8 +177,8 @@ void doit(void) fail("gnutls_x509_privkey_generate after cpy (%s): %s (%d)\n", gnutls_pk_algorithm_get_name(algorithm), gnutls_strerror(ret), ret); } - sign_verify_data(pkey); - sign_verify_data(dst); + sign_verify_data(algorithm, pkey); + sign_verify_data(algorithm, dst); gnutls_x509_privkey_deinit(pkey); gnutls_x509_privkey_deinit(dst); diff --git a/tests/privkey-verify-broken.c b/tests/privkey-verify-broken.c index 7b41e6ffba..276fcdaafe 100644 --- a/tests/privkey-verify-broken.c +++ b/tests/privkey-verify-broken.c @@ -45,21 +45,30 @@ const gnutls_datum_t raw_data = { 11 }; -static int sign_verify_data(gnutls_x509_privkey_t pkey, unsigned algo, unsigned vflags) +static int sign_verify_data(gnutls_x509_privkey_t pkey, gnutls_sign_algorithm_t algo, unsigned vflags) { int ret; gnutls_privkey_t privkey; - gnutls_pubkey_t pubkey; + gnutls_pubkey_t pubkey = NULL; gnutls_datum_t signature; + gnutls_pk_algorithm_t pk; + gnutls_digest_algorithm_t dig; + unsigned sflags = 0; /* sign arbitrary data */ assert(gnutls_privkey_init(&privkey) >= 0); + pk = gnutls_sign_get_pk_algorithm(algo); + dig = gnutls_sign_get_hash_algorithm(algo); + + if (pk == GNUTLS_PK_RSA_PSS) + sflags |= GNUTLS_PRIVKEY_SIGN_FLAG_RSA_PSS; + ret = gnutls_privkey_import_x509(privkey, pkey, 0); if (ret < 0) fail("gnutls_pubkey_import_x509\n"); - ret = gnutls_privkey_sign_data(privkey, algo, 0, + ret = gnutls_privkey_sign_data(privkey, dig, sflags, &raw_data, &signature); if (ret < 0) { ret = -1; @@ -73,7 +82,7 @@ static int sign_verify_data(gnutls_x509_privkey_t pkey, unsigned algo, unsigned if (ret < 0) fail("gnutls_pubkey_import_privkey\n"); - ret = gnutls_pubkey_verify_data2(pubkey, gnutls_pk_to_sign(gnutls_pubkey_get_pk_algorithm(pubkey, NULL),algo), + ret = gnutls_pubkey_verify_data2(pubkey, algo, vflags, &raw_data, &signature); if (ret < 0) { ret = -1; @@ -82,7 +91,8 @@ static int sign_verify_data(gnutls_x509_privkey_t pkey, unsigned algo, unsigned ret = 0; cleanup: - gnutls_pubkey_deinit(pubkey); + if (pubkey) + gnutls_pubkey_deinit(pubkey); gnutls_privkey_deinit(privkey); gnutls_free(signature.data); @@ -112,36 +122,32 @@ void doit(void) fail("gnutls_privkey_generate: %s\n", gnutls_strerror(ret)); } -#ifndef ALLOW_SHA1 - if (sign_verify_data(pkey, GNUTLS_DIG_SHA1, 0) >= 0) - fail("succeeded verification with SHA1!\n"); -#endif - if (sign_verify_data(pkey, GNUTLS_DIG_SHA1, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1) < 0) - fail("failed verification with SHA1 and override flags!\n"); + if (sign_verify_data(pkey, GNUTLS_SIGN_RSA_SHA1, 0) < 0) + fail("failed verification with SHA1!\n"); - if (sign_verify_data(pkey, GNUTLS_DIG_SHA1, GNUTLS_VERIFY_ALLOW_BROKEN) < 0) - fail("failed verification with SHA1 and override flags2!\n"); - - if (sign_verify_data(pkey, GNUTLS_DIG_MD5, 0) >= 0) - fail("succeeded verification with SHA1!\n"); + if (sign_verify_data(pkey, GNUTLS_SIGN_RSA_MD5, 0) >= 0) + fail("succeeded verification with MD5!\n"); if (!gnutls_fips140_mode_enabled()) { - if (sign_verify_data(pkey, GNUTLS_DIG_MD5, GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD5) < 0) + if (sign_verify_data(pkey, GNUTLS_SIGN_RSA_MD5, GNUTLS_VERIFY_ALLOW_SIGN_RSA_MD5) < 0) fail("failed verification with MD5 and override flags!\n"); - if (sign_verify_data(pkey, GNUTLS_DIG_MD5, GNUTLS_VERIFY_ALLOW_BROKEN) < 0) + if (sign_verify_data(pkey, GNUTLS_SIGN_RSA_MD5, GNUTLS_VERIFY_ALLOW_BROKEN) < 0) fail("failed verification with MD5 and override flags2!\n"); } - if (sign_verify_data(pkey, GNUTLS_DIG_SHA256, 0) < 0) + if (sign_verify_data(pkey, GNUTLS_SIGN_RSA_SHA256, 0) < 0) fail("failed verification with SHA256!\n"); - if (sign_verify_data(pkey, GNUTLS_DIG_SHA512, 0) < 0) + if (sign_verify_data(pkey, GNUTLS_SIGN_RSA_SHA512, 0) < 0) fail("failed verification with SHA512!\n"); - if (sign_verify_data(pkey, GNUTLS_DIG_SHA3_256, 0) < 0) + if (sign_verify_data(pkey, GNUTLS_SIGN_RSA_SHA3_256, 0) < 0) fail("failed verification with SHA3-256!\n"); + if (sign_verify_data(pkey, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, 0) < 0) + fail("failed verification with SHA256 with PSS!\n"); + gnutls_x509_privkey_deinit(pkey); gnutls_global_deinit(); diff --git a/tests/profile-tests.sh b/tests/profile-tests.sh new file mode 100755 index 0000000000..71295fd5a6 --- /dev/null +++ b/tests/profile-tests.sh @@ -0,0 +1,243 @@ +#!/bin/sh + +# Copyright (C) 2019 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see +# + +# This program tests whether the profile keywords work as expected + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +TMPFILE=config.$$.tmp +export GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID=1 + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +. "${srcdir}/scripts/common.sh" + +CAFILE="./profile-ca.$$.tmp" +CERT="./profile-cert.$$.tmp" + + +echo "Testing with a 256 bit ECDSA key" + +cat >${CAFILE} <<_EOF_ +-----BEGIN CERTIFICATE----- +MIIBZjCCAQugAwIBAgIUT/9x+s6cBhBHWoZH5fBi9c0aBPswCgYIKoZIzj0EAwIw +DzENMAsGA1UEAxMEQ0EtMDAgFw0xOTA1MjAxMzAxNTdaGA85OTk5MTIzMTIzNTk1 +OVowDzENMAsGA1UEAxMEQ0EtMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABI7d +qggkXNbYfXi5rMqdvvX26GJ02A63B5sueaS0w1LITLeMb0mhx4trpXMkJ3lr05lY +JCfr6sUTAlYLMBLZJ+ajQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUD +AwcGADAdBgNVHQ4EFgQUUkk7xPS5Uf53q8YLEhz5KGqeZH0wCgYIKoZIzj0EAwID +SQAwRgIhAKL/lPu6hOTwA/FfB+dMkkVeeZA+6CeXgbnxeA6HXy3bAiEAvO3+1VhR +RIHc3JBuIsLlrwaovXAZHgXNGV2WalixDHI= +-----END CERTIFICATE----- +_EOF_ +cat >${CERT} <<_EOF_ +-----BEGIN CERTIFICATE----- +MIIBnTCCAUOgAwIBAgIUUoqE4mD73XmLCryaMad6AXl6TjAwCgYIKoZIzj0EAwIw +DzENMAsGA1UEAxMEQ0EtMDAgFw0xOTA1MjAxMzAxNTdaGA85OTk5MTIzMTIzNTk1 +OVowEzERMA8GA1UEAxMIc2VydmVyLTEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC +AAScHgQMZCm5GLjGs64tN8hmK+KmDOTBU0fyqc9Tle6WjgFFBzPeHv8vLcrp5HTI +mNtKFNCaLN73r9h8xk3qG2pno3cwdTAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuC +CWxvY2FsaG9zdDAPBgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQWBBRpzYoZdeLYgscj +yokMBbda3FnghzAfBgNVHSMEGDAWgBRSSTvE9LlR/nerxgsSHPkoap5kfTAKBggq +hkjOPQQDAgNIADBFAiATJTdJ176UocB1BGDTTwJAuNKurPFZzlEaeYHS3tetXAIh +AP/RStdc8DV/AtHZOF1/FF3fB/tS3d+vb2f0QsTbcl5f +-----END CERTIFICATE----- +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIG5Gt+KTDxw5cevzwL0Sfo2AJZNeVtu3GHSnpICvsSiBoAoGCCqGSM49 +AwEHoUQDQgAEnB4EDGQpuRi4xrOuLTfIZivipgzkwVNH8qnPU5Xulo4BRQcz3h7/ +Ly3K6eR0yJjbShTQmize96/YfMZN6htqZw== +-----END EC PRIVATE KEY----- +_EOF_ +KEY="${CERT}" + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL" --x509keyfile ${KEY} --x509certfile ${CERT} +PID=$! +wait_server ${PID} + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_VERY_WEAK --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (1)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_LOW --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (2)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_LEGACY --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (3)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_HIGH --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (4)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_ULTRA --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null && + fail ${PID} "expected connection to fail (1)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_FUTURE --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null && + fail ${PID} "expected connection to fail (2)" + +kill ${PID} +wait + + +echo "Testing with a 384 bit ECDSA key" + +cat >${CAFILE} <<_EOF_ +-----BEGIN CERTIFICATE----- +MIIBojCCASigAwIBAgIUFMelLI8WwXyoyKjZGXXXcLb4N1EwCgYIKoZIzj0EAwMw +DzENMAsGA1UEAxMEQ0EtMDAgFw0xOTA1MjAxMzA2MDNaGA85OTk5MTIzMTIzNTk1 +OVowDzENMAsGA1UEAxMEQ0EtMDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNxXKt1I +dpBTxQ5oefACUoUgdEwLNkbrjMeEYbB1Wz9d5Uk9nJPjQOGx85ct3FysauMxzBGy +BKnBEYViamZiffXu3zzNlIZY+tCbc3MUqs6q60CuNIw4UjakKhgD6II2MKNDMEEw +DwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBQJ9QXM +rPF8/z2VviCfhSp2ezf1AjAKBggqhkjOPQQDAwNoADBlAjEA5nmuJqRQFLgHYnN5 +MRmMfT+TvkLL+MPBo9lK8cbFzweV/PdySLRKNylOH4y70UyzAjBk3kFH7KC1AGMz ++A87+Rx+7BHOIdKIp91wx8LhMIdbeX9yi3w6YRsjHoLxKtJ8FYE= +-----END CERTIFICATE----- +_EOF_ +cat >${CERT} <<_EOF_ +-----BEGIN CERTIFICATE----- +MIIB2DCCAWCgAwIBAgIUJiHZy9J/MQzCJPjaP3Zy+JTXHgowCgYIKoZIzj0EAwMw +DzENMAsGA1UEAxMEQ0EtMDAgFw0xOTA1MjAxMzA2MDNaGA85OTk5MTIzMTIzNTk1 +OVowEzERMA8GA1UEAxMIc2VydmVyLTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATP +agsLKT6MLGFsxWyBjDmyrfcAreBZtGDe9tS8jYItbM8y/ulvjCnwW/dwmVBe6UKX +n7WIJ7nxvp/j0k59TwpMxfpSn51NhiaViMQ4ZxA34qm+H3gUl8r1GC9I/EPTYe2j +dzB1MAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0MA8GA1UdDwEB +/wQFAwMHgAAwHQYDVR0OBBYEFO2V2sn+n3Kj0sA2leiLp/RQDmt/MB8GA1UdIwQY +MBaAFAn1Bcys8Xz/PZW+IJ+FKnZ7N/UCMAoGCCqGSM49BAMDA2YAMGMCL37ZZOM0 +fKI8jzlZRF64IOB/hVbvMD5WOMqFN/M8BjbPSywuRy9/JIq0KiFw3IKUAjAJZSsJ +fd8/9po81LJwyfUF/fTwPa7CNExb4BoDRtDDc7s/ciXI/13rxwkJnlAytwI= +-----END CERTIFICATE----- +-----BEGIN EC PRIVATE KEY----- +MIGlAgEBBDEAtrbWqGFyxd+qLlU0VHGvS5CpuAg0fPvODXzu8qHGREvxMYJL5d0I +YfU7emquAuq/oAcGBSuBBAAioWQDYgAEz2oLCyk+jCxhbMVsgYw5sq33AK3gWbRg +3vbUvI2CLWzPMv7pb4wp8Fv3cJlQXulCl5+1iCe58b6f49JOfU8KTMX6Up+dTYYm +lYjEOGcQN+Kpvh94FJfK9RgvSPxD02Ht +-----END EC PRIVATE KEY----- +_EOF_ +KEY="${CERT}" + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL" --x509keyfile ${KEY} --x509certfile ${CERT} +PID=$! +wait_server ${PID} + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_VERY_WEAK --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (1)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_LOW --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (2)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_LEGACY --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (3)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_HIGH --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (4)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_ULTRA --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (5)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_FUTURE --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null && + fail ${PID} "expected connection to fail (1)" + +kill ${PID} +wait + +echo "Testing with a 521 bit ECDSA key" + +cat >${CAFILE} <<_EOF_ +-----BEGIN CERTIFICATE----- +MIIB7TCCAU6gAwIBAgIUW9MXlkeIARoHEeP+DmgMfSOh9xkwCgYIKoZIzj0EAwQw +DzENMAsGA1UEAxMEQ0EtMDAgFw0xOTA1MjAxMzE4MDVaGA85OTk5MTIzMTIzNTk1 +OVowDzENMAsGA1UEAxMEQ0EtMDCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEASRD +p6ArQF3bkC7rMzUo6RGle3LCDVkrVrcS0vMRKz6D436g/yO0+om5Xbny/z3Weo4x +E8dat+dQp2sHurso6ByhAbm08MqxKUqaU4G69xvTYTOSMljDtx/3upsF955J5/CT +/F8czPBR9jebQZOCXWI0clpFSTGTYFnqHVlyTTwCgd87o0MwQTAPBgNVHRMBAf8E +BTADAQH/MA8GA1UdDwEB/wQFAwMHBgAwHQYDVR0OBBYEFI2SeRAmyVkAAEabKWfy +SREfJqJfMAoGCCqGSM49BAMEA4GMADCBiAJCAc8sUwRR5Q5u52YSdaEiHgnWlNTJ +nP7ckTAiSCEmhp2L8wdvG2274oTjvw3gbUHLc310AAoIvUcZfaXB6zooIpl9AkIB +NK1JHzm60+USUDxJoQngtl8KdM9jR9UmjZ5hVhd/k5FeNYbb6Z+kuIasE4SlnJnd +VIEgdnjXtlI3n052VLjDKg4= +-----END CERTIFICATE----- +_EOF_ +cat >${CERT} <<_EOF_ +-----BEGIN CERTIFICATE----- +MIICJDCCAYagAwIBAgIUTNrzhsX4+TV92p8tYrrUclDsYsUwCgYIKoZIzj0EAwQw +DzENMAsGA1UEAxMEQ0EtMDAgFw0xOTA1MjAxMzE4MDVaGA85OTk5MTIzMTIzNTk1 +OVowEzERMA8GA1UEAxMIc2VydmVyLTEwgZswEAYHKoZIzj0CAQYFK4EEACMDgYYA +BAGAb9ToCqbQ8wImyiIN3Zf3T8WrwB/R28f0w8wq0W5a71FGayY0VU5exSBV7nnj +X8xFwUb+BpIVRQ4ZsryQCDDANACxXE3hwae59mqO9JhrTUQL7KyDaZ8W6KbACn8h +fYsOay/3ub0wdNdG8aJIcZzmrX1DNM0Jt/rW1d2nzuv6lZqCfqN3MHUwDAYDVR0T +AQH/BAIwADAUBgNVHREEDTALgglsb2NhbGhvc3QwDwYDVR0PAQH/BAUDAweAADAd +BgNVHQ4EFgQUv46ZnyF9oFn6yVCPl8WJ2InprhowHwYDVR0jBBgwFoAUjZJ5ECbJ +WQAARpspZ/JJER8mol8wCgYIKoZIzj0EAwQDgYsAMIGHAkIAh0/UdYPTSWmtTRNZ +d1VGCBW+Pw9aMkSTd8byWgle8+z1aQdZYQF46MHDuRC3zkooAYXPjbYCbLba5W/x +K1MVvfoCQThH3TCLj/Qci1788SNJ2bvN4bGe9m71cRhJWOXx5GRUHjvRJ5dttllq +dPzh992Fym1fGoyKne2xm172IG2LvTI0 +-----END CERTIFICATE----- +-----BEGIN EC PRIVATE KEY----- +MIHcAgEBBEIBZEu+h1ouDy17i0vGtm39PIrwWCGmjiQkCp1HnPSGod6SM2O3j4Mf +PH5pp8dPYx0LmHXTe+/P/oiIf128sSlsIGCgBwYFK4EEACOhgYkDgYYABAGAb9To +CqbQ8wImyiIN3Zf3T8WrwB/R28f0w8wq0W5a71FGayY0VU5exSBV7nnjX8xFwUb+ +BpIVRQ4ZsryQCDDANACxXE3hwae59mqO9JhrTUQL7KyDaZ8W6KbACn8hfYsOay/3 +ub0wdNdG8aJIcZzmrX1DNM0Jt/rW1d2nzuv6lZqCfg== +-----END EC PRIVATE KEY----- +_EOF_ +KEY="${CERT}" + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL" --x509keyfile ${KEY} --x509certfile ${CERT} +PID=$! +wait_server ${PID} + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_VERY_WEAK --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (1)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_LOW --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (2)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_LEGACY --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (3)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_HIGH --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (4)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_ULTRA --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (5)" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_FUTURE --verify-hostname localhost --x509cafile "${CAFILE}" /dev/null || + fail ${PID} "expected connection to succeed (6)" + +kill ${PID} +wait + +rm -f ${TMPFILE} ${CAFILE} ${CERT} + +exit 0 diff --git a/tests/psk-file.c b/tests/psk-file.c index b592cc3f6c..703043ec40 100644 --- a/tests/psk-file.c +++ b/tests/psk-file.c @@ -27,6 +27,7 @@ #include #endif +#include #include #include @@ -47,10 +48,42 @@ int main(int argc, char **argv) #include #endif #include +#include +#include #include #include "utils.h" +static char hexchar(unsigned int val) +{ + if (val < 10) + return '0' + val; + if (val < 16) + return 'a' + val - 10; + abort(); +} + +static bool hex_encode(const void *buf, size_t bufsize, char *dest, size_t destsize) +{ + size_t used = 0; + + if (destsize < 1) + return false; + + while (used < bufsize) { + unsigned int c = ((const unsigned char *)buf)[used]; + if (destsize < 3) + return false; + *(dest++) = hexchar(c >> 4); + *(dest++) = hexchar(c & 0xF); + used++; + destsize -= 2; + } + *dest = '\0'; + + return used + 1; +} + /* A very basic TLS client, with PSK authentication. */ @@ -64,14 +97,13 @@ static void tls_log_func(int level, const char *str) #define MAX_BUF 1024 #define MSG "Hello TLS" -static void client(int sd, const char *user) +static void client(int sd, const char *prio, const gnutls_datum_t *user, const gnutls_datum_t *key, + unsigned expect_hint, int expect_fail, int exp_kx, unsigned binary_user) { - int ret, ii; + int ret, ii, kx; gnutls_session_t session; char buffer[MAX_BUF + 1]; gnutls_psk_client_credentials_t pskcred; - /* Need to enable anonymous KX specifically. */ - const gnutls_datum_t key = { (void *) "9e32cf7786321a828ef7668f09fb35db", 32 }; const char *hint; global_init(); @@ -82,15 +114,17 @@ static void client(int sd, const char *user) side = "client"; gnutls_psk_allocate_client_credentials(&pskcred); - gnutls_psk_set_client_credentials(pskcred, user, &key, - GNUTLS_PSK_KEY_HEX); - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); + if (binary_user) { + gnutls_psk_set_client_credentials2(pskcred, user, key, GNUTLS_PSK_KEY_HEX); + } else { + gnutls_psk_set_client_credentials(pskcred, (const char *) user->data, key, + GNUTLS_PSK_KEY_HEX); + } - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+PSK", NULL); + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_KEY_SHARE_TOP)>=0); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); /* put the anonymous credentials to the current session */ @@ -103,8 +137,12 @@ static void client(int sd, const char *user) ret = gnutls_handshake(session); if (ret < 0) { - fail("client: Handshake failed\n"); - gnutls_perror(ret); + if (!expect_fail) + fail("client: Handshake failed\n"); + if (ret != expect_fail) { + fail("expected cli error %d (%s), got %d (%s)\n", expect_fail, gnutls_strerror(expect_fail), + ret, gnutls_strerror(ret)); + } goto end; } else { if (debug) @@ -112,10 +150,12 @@ static void client(int sd, const char *user) } /* check the hint */ - hint = gnutls_psk_client_get_hint(session); - if (hint == NULL || strcmp(hint, "hint") != 0) { - fail("client: hint is not the expected: %s\n", gnutls_psk_client_get_hint(session)); - goto end; + if (expect_hint) { + hint = gnutls_psk_client_get_hint(session); + if (hint == NULL || strcmp(hint, "hint") != 0) { + fail("client: hint is not the expected: %s\n", gnutls_psk_client_get_hint(session)); + goto end; + } } gnutls_record_send(session, MSG, strlen(MSG)); @@ -131,6 +171,8 @@ static void client(int sd, const char *user) goto end; } + kx = gnutls_kx_get(session); + if (debug) { printf("- Received %d bytes: ", ret); for (ii = 0; ii < ret; ii++) { @@ -141,6 +183,15 @@ static void client(int sd, const char *user) gnutls_bye(session, GNUTLS_SHUT_RDWR); + if (expect_fail) + fail("client: expected failure but connection succeeded!\n"); + + if (exp_kx && kx != exp_kx) { + fail("client: expected key exchange %s, but got %s\n", + gnutls_kx_get_name(exp_kx), + gnutls_kx_get_name(kx)); + } + end: close(sd); @@ -157,13 +208,17 @@ static void client(int sd, const char *user) #define MAX_BUF 1024 -static void server(int sd, const char *user, unsigned expect_fail) +static void server(int sd, const char *prio, const gnutls_datum_t *user, bool no_cred, + int expect_fail, int exp_kx, unsigned binary_user) { -gnutls_psk_server_credentials_t server_pskcred; -int ret; -gnutls_session_t session; -char buffer[MAX_BUF + 1]; -char *psk_file = getenv("PSK_FILE"); + gnutls_psk_server_credentials_t server_pskcred; + int ret, kx; + gnutls_session_t session; + const char *pskid; + gnutls_datum_t pskid_binary; + char buffer[MAX_BUF + 1]; + char *psk_file = getenv("PSK_FILE"); + char *desc; /* this must be called once in the program */ @@ -188,27 +243,39 @@ char *psk_file = getenv("PSK_FILE"); gnutls_init(&session, GNUTLS_SERVER); - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+PSK", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); - gnutls_credentials_set(session, GNUTLS_CRD_PSK, server_pskcred); + if (!no_cred) + gnutls_credentials_set(session, GNUTLS_CRD_PSK, server_pskcred); gnutls_transport_set_int(session, sd); ret = gnutls_handshake(session); if (ret < 0) { - close(sd); - gnutls_deinit(session); - gnutls_psk_free_server_credentials(server_pskcred); + unsigned char seq[8], buf[16]; + gnutls_alert_send_appropriate(session, ret); + + /* We have to make sure that we do not close connection till + * test client reads our fatal alert, otherwise it might exit + * with GNUTLS_E_PUSH_ERROR instead */ + gnutls_session_force_valid(session); + while ((gnutls_record_recv_seq(session, buf, sizeof(buf), seq)) >= 0) + ; + if (expect_fail) { - success("server: Handshake has failed - expected (%s)\n\n", - gnutls_strerror(ret)); + if (ret != expect_fail) { + fail("expected error %d (%s), got %d (%s)\n", expect_fail, + gnutls_strerror(expect_fail), + ret, gnutls_strerror(ret)); + } + + if (debug) + success("server: Handshake has failed - expected (%s)\n\n", + gnutls_strerror(ret)); } else { fail("server: Handshake has failed (%s)\n\n", gnutls_strerror(ret)); } - return; + goto end; } if (debug) success("server: Handshake was completed\n"); @@ -236,10 +303,48 @@ char *psk_file = getenv("PSK_FILE"); strlen(buffer)); } } + + kx = gnutls_kx_get(session); + + desc = gnutls_session_get_desc(session); + success(" - connected with: %s\n", desc); + gnutls_free(desc); /* do not wait for the peer to close the connection. */ gnutls_bye(session, GNUTLS_SHUT_WR); + if (expect_fail) + fail("server: expected failure but connection succeeded!\n"); + + if (!no_cred) { + if (binary_user) { + char pskid_bin[1024], userdata_bin[1024]; + + if (gnutls_psk_server_get_username2(session, &pskid_binary)) + fail("server: Could not get binary pskid\n"); + + if (memcmp(pskid_binary.data, user->data, user->size) != 0) { + hex_encode(user->data, user->size, userdata_bin, sizeof(userdata_bin)); + hex_encode(pskid_binary.data, pskid_binary.size, pskid_bin, sizeof(pskid_bin)); + fail("server: binary username (%s) does not match expected (%s)\n", + pskid_bin, userdata_bin); + } + } else { + pskid = gnutls_psk_server_get_username(session); + if (pskid == NULL || strcmp(pskid, (const char *) user->data) != 0) { + fail("server: username (%s), does not match expected (%s)\n", + pskid, (const char *) user->data); + } + } + } + + if (exp_kx && kx != exp_kx) { + fail("server: expected key exchange %s, but got %s\n", + gnutls_kx_get_name(exp_kx), + gnutls_kx_get_name(kx)); + } + + end: close(sd); gnutls_deinit(session); @@ -251,13 +356,32 @@ char *psk_file = getenv("PSK_FILE"); success("server: finished\n"); } +static void print_user(const char *caption, const char *prio, const gnutls_datum_t *user, unsigned binary_user) +{ + char hexuser[100]; + + if (binary_user) { + hex_encode(user->data, user->size, hexuser, sizeof(hexuser)); + success("%s %s (user:%s)\n", caption, prio, hexuser); + } else + success("%s %s (user:%s)\n", caption, prio, (const char *) user->data); +} + static -void run_test(const char *user, unsigned expect_fail) +void run_test3(const char *prio, const char *sprio, const gnutls_datum_t *user, const gnutls_datum_t *key, bool no_cred, + unsigned expect_hint, int exp_kx, int expect_fail_cli, int expect_fail_serv, unsigned binary_user) { pid_t child; int err; int sockets[2]; + signal(SIGPIPE, SIG_IGN); + + if (expect_fail_serv || expect_fail_cli) + print_user("ntest", prio, user, binary_user); + else + print_user("test", prio, user, binary_user); + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); if (err == -1) { perror("socketpair"); @@ -276,18 +400,155 @@ void run_test(const char *user, unsigned expect_fail) close(sockets[1]); int status; /* parent */ - server(sockets[0], user, expect_fail); + server(sockets[0], sprio?sprio:prio, user, no_cred, expect_fail_serv, exp_kx, binary_user); wait(&status); + check_wait_status(status); } else { close(sockets[0]); - client(sockets[1], user); + client(sockets[1], prio, user, key, expect_hint, expect_fail_cli, exp_kx, binary_user); + exit(0); } } +static +void run_test2(const char *prio, const char *sprio, const gnutls_datum_t *user, const gnutls_datum_t *key, + unsigned expect_hint, int exp_kx, int expect_fail_cli, int expect_fail_serv, unsigned binary_user) +{ + run_test3(prio, sprio, user, key, 0, expect_hint, exp_kx, expect_fail_cli, expect_fail_serv, binary_user); +} + +static +void run_test_ok(const char *prio, const gnutls_datum_t *user, const gnutls_datum_t *key, unsigned expect_hint, int expect_fail, unsigned binary_user) +{ + run_test2(prio, NULL, user, key, expect_hint, GNUTLS_KX_PSK, expect_fail, expect_fail, binary_user); +} + +static +void run_ectest_ok(const char *prio, const gnutls_datum_t *user, const gnutls_datum_t *key, unsigned expect_hint, int expect_fail, unsigned binary_user) +{ + run_test2(prio, NULL, user, key, expect_hint, GNUTLS_KX_ECDHE_PSK, expect_fail, expect_fail, binary_user); +} + +static +void run_dhtest_ok(const char *prio, const gnutls_datum_t *user, const gnutls_datum_t *key, unsigned expect_hint, int expect_fail, unsigned binary_user) +{ + run_test2(prio, NULL, user, key, expect_hint, GNUTLS_KX_DHE_PSK, expect_fail, expect_fail, binary_user); +} + void doit(void) { - run_test("jas", 0); - run_test("non-hex", 1); + char hexuser[] = { 0xde, 0xad, 0xbe, 0xef }, + nulluser1[] = { 0 }, + nulluser2[] = { 0, 0, 0xaa, 0 }; + const gnutls_datum_t user_jas = { (void *) "jas", strlen("jas") }; + const gnutls_datum_t user_unknown = { (void *) "unknown", strlen("unknown") }; + const gnutls_datum_t user_nonhex = { (void *) "non-hex", strlen("non-hex") }; + const gnutls_datum_t user_hex = { (void *) hexuser, sizeof(hexuser) }; + const gnutls_datum_t user_null_1 = { (void *) nulluser1, sizeof(nulluser1) }; + const gnutls_datum_t user_null_2 = { (void *) nulluser2, sizeof(nulluser2) }; + const gnutls_datum_t key = { (void *) "9e32cf7786321a828ef7668f09fb35db", 32 }; + const gnutls_datum_t wrong_key = { (void *) "9e31cf7786321a828ef7668f09fb35db", 32 }; + + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", &user_jas, &key, 1, 0, 0); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", &user_hex, &key, 1, 0, 1); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", &user_null_1, &key, 1, 0, 1); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", &user_null_2, &key, 1, 0, 1); + run_dhtest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-PSK", &user_jas, &key, 1, 0, 0); + run_dhtest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-PSK", &user_hex, &key, 1, 0, 1); + run_dhtest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-PSK", &user_null_1, &key, 1, 0, 1); + run_dhtest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-PSK", &user_null_2, &key, 1, 0, 1); + run_ectest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-PSK", &user_jas, &key, 1, 0, 0); + run_ectest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-PSK", &user_hex, &key, 1, 0, 1); + run_ectest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-PSK", &user_null_1, &key, 1, 0, 1); + run_ectest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-PSK", &user_null_2, &key, 1, 0, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", NULL, &user_unknown, &key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_DECRYPTION_FAILED, 0); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", NULL, &user_jas, &wrong_key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_DECRYPTION_FAILED, 0); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", NULL, &user_nonhex, &key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_KEYFILE_ERROR, 0); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", NULL, &user_hex, &wrong_key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_DECRYPTION_FAILED, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", NULL, &user_null_1, &wrong_key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_DECRYPTION_FAILED, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", NULL, &user_null_2, &wrong_key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_DECRYPTION_FAILED, 1); + + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", &user_jas, &key, 1, 0, 0); + run_test_ok("NORMAL:-KX-ALL:+PSK", &user_jas, &key, 0, 0, 0); + run_test_ok("NORMAL:-KX-ALL:+PSK", &user_hex, &key, 0, 0, 1); + run_test_ok("NORMAL:-KX-ALL:+PSK", &user_null_1, &key, 0, 0, 1); + run_test_ok("NORMAL:-KX-ALL:+PSK", &user_null_2, &key, 0, 0, 1); + run_test2("NORMAL:+PSK", NULL, &user_unknown, &key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER, 0); + run_test2("NORMAL:+PSK", NULL, &user_jas, &wrong_key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER, 0); + run_test2("NORMAL:+PSK", NULL, &user_hex, &wrong_key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER, 1); + run_test2("NORMAL:+PSK", NULL, &user_null_1, &wrong_key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER, 1); + run_test2("NORMAL:+PSK", NULL, &user_null_2, &wrong_key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER, 1); + run_test2("NORMAL:-KX-ALL:+PSK", NULL, &user_nonhex, &key, 1, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_KEYFILE_ERROR, 0); + + run_dhtest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-EC-ALL", &user_jas, &key, 0, 0, 0); + run_dhtest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-EC-ALL", &user_hex, &key, 0, 0, 1); + run_dhtest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-EC-ALL", &user_null_1, &key, 0, 0, 1); + run_dhtest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-EC-ALL", &user_null_2, &key, 0, 0, 1); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK", &user_jas, &key, 0, 0, 0); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK", &user_hex, &key, 0, 0, 1); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK", &user_null_1, &key, 0, 0, 1); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK", &user_null_2, &key, 0, 0, 1); + + /* test priorities of DHE-PSK and PSK */ + run_ectest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+DHE-PSK:+PSK:-GROUP-DH-ALL", &user_jas, &key, 0, 0, 0); + run_ectest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+DHE-PSK:+PSK:-GROUP-DH-ALL", &user_hex, &key, 0, 0, 1); + run_ectest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+DHE-PSK:+PSK:-GROUP-DH-ALL", &user_null_1, &key, 0, 0, 1); + run_ectest_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+DHE-PSK:+PSK:-GROUP-DH-ALL", &user_null_2, &key, 0, 0, 1); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+PSK:+DHE-PSK:-GROUP-DH-ALL", &user_jas, &key, 0, 0, 0); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+PSK:+DHE-PSK:-GROUP-DH-ALL", &user_hex, &key, 0, 0, 1); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+PSK:+DHE-PSK:-GROUP-DH-ALL", &user_null_1, &key, 0, 0, 1); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+PSK:+DHE-PSK:-GROUP-DH-ALL", &user_null_2, &key, 0, 0, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+DHE-PSK:+PSK:-GROUP-DH-ALL", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+PSK:+DHE-PSK:%SERVER_PRECEDENCE:-GROUP-DH-ALL", + &user_jas, &key, 0, GNUTLS_KX_PSK, 0, 0, 0); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+DHE-PSK:+PSK:-GROUP-DH-ALL", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+PSK:+DHE-PSK:%SERVER_PRECEDENCE:-GROUP-DH-ALL", + &user_hex, &key, 0, GNUTLS_KX_PSK, 0, 0, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+DHE-PSK:+PSK:-GROUP-DH-ALL", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+PSK:+DHE-PSK:%SERVER_PRECEDENCE:-GROUP-DH-ALL", + &user_null_1, &key, 0, GNUTLS_KX_PSK, 0, 0, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+DHE-PSK:+PSK:-GROUP-DH-ALL", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+PSK:+DHE-PSK:%SERVER_PRECEDENCE:-GROUP-DH-ALL", + &user_null_2, &key, 0, GNUTLS_KX_PSK, 0, 0, 1); + /* try with PRF that doesn't match binder (SHA256) */ + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-256-GCM:+PSK:+DHE-PSK", NULL, &user_jas, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_CIPHER_SUITES, 0); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-256-GCM:+PSK:+DHE-PSK", NULL, &user_hex, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_CIPHER_SUITES, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-256-GCM:+PSK:+DHE-PSK", NULL, &user_null_1, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_CIPHER_SUITES, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-256-GCM:+PSK:+DHE-PSK", NULL, &user_null_2, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_CIPHER_SUITES, 1); + /* try with no groups and PSK */ + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:-GROUP-ALL", &user_jas, &key, 0, 0, 0); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:-GROUP-ALL", &user_hex, &key, 0, 0, 1); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:-GROUP-ALL", &user_null_1, &key, 0, 0, 1); + run_test_ok("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:-GROUP-ALL", &user_null_2, &key, 0, 0, 1); + /* try without any groups but DHE-PSK */ + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:+PSK", &user_jas, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_COMMON_KEY_SHARE, 0); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:+PSK:-GROUP-ALL", &user_jas, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_COMMON_KEY_SHARE, 0); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:+PSK", &user_hex, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_COMMON_KEY_SHARE, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:+PSK:-GROUP-ALL", &user_hex, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_COMMON_KEY_SHARE, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:+PSK", &user_null_1, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_COMMON_KEY_SHARE, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:+PSK:-GROUP-ALL", &user_null_1, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_COMMON_KEY_SHARE, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:+PSK", &user_null_2, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_COMMON_KEY_SHARE, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:+PSK:-GROUP-ALL", &user_null_2, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_NO_COMMON_KEY_SHARE, 1); + + /* if user invalid we continue without PSK */ + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:+DHE-PSK", NULL, &user_nonhex, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_KEYFILE_ERROR, 0); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:+DHE-PSK", NULL, &user_unknown, &key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER, 0); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:+DHE-PSK", NULL, &user_jas, &wrong_key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER, 0); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:+DHE-PSK", NULL, &user_hex, &wrong_key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:+DHE-PSK", NULL, &user_null_1, &wrong_key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:+DHE-PSK", NULL, &user_null_2, &wrong_key, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER, 1); + + /* try with HelloRetryRequest and PSK */ + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-FFDHE4096", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL:+GROUP-FFDHE4096", &user_jas, &key, 0, GNUTLS_KX_DHE_PSK, 0, 0, 0); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-FFDHE4096", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL:+GROUP-FFDHE4096", &user_hex, &key, 0, GNUTLS_KX_DHE_PSK, 0, 0, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-FFDHE4096", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL:+GROUP-FFDHE4096", &user_null_1, &key, 0, GNUTLS_KX_DHE_PSK, 0, 0, 1); + run_test2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-FFDHE4096", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+DHE-PSK:-GROUP-ALL:+GROUP-FFDHE4096", &user_null_2, &key, 0, GNUTLS_KX_DHE_PSK, 0, 0, 1); + + /* try without server credentials */ + run_test3("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:+DHE-PSK", NULL, &user_jas, &key, 1, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_INSUFFICIENT_CREDENTIALS, 0); + run_test3("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:+DHE-PSK", NULL, &user_hex, &key, 1, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_INSUFFICIENT_CREDENTIALS, 1); + run_test3("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:+DHE-PSK", NULL, &user_null_1, &key, 1, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_INSUFFICIENT_CREDENTIALS, 1); + run_test3("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:+DHE-PSK", NULL, &user_null_2, &key, 1, 0, 0, GNUTLS_E_FATAL_ALERT_RECEIVED, GNUTLS_E_INSUFFICIENT_CREDENTIALS, 1); } #endif /* _WIN32 */ diff --git a/tests/psk.passwd b/tests/psk.passwd index 3dd998e2dc..db1edbd24f 100644 --- a/tests/psk.passwd +++ b/tests/psk.passwd @@ -1,2 +1,5 @@ jas:9e32cf7786321a828ef7668f09fb35db non-hex:9e32cf7786321a828ef7668f09fb35dbxx +#deadbeef:9e32cf7786321a828ef7668f09fb35db +#00:9e32cf7786321a828ef7668f09fb35db +#0000aa00:9e32cf7786321a828ef7668f09fb35db diff --git a/tests/pskself.c b/tests/pskself.c index 9a2190587c..f3cc882174 100644 --- a/tests/pskself.c +++ b/tests/pskself.c @@ -64,7 +64,7 @@ static void tls_log_func(int level, const char *str) #define MAX_BUF 1024 #define MSG "Hello TLS" -static void client(int sd, const char *prio) +static void client(int sd, const char *prio, unsigned exp_hint) { int ret, ii; gnutls_session_t session; @@ -112,10 +112,12 @@ static void client(int sd, const char *prio) } /* check the hint */ - hint = gnutls_psk_client_get_hint(session); - if (hint == NULL || strcmp(hint, "hint") != 0) { - fail("client: hint is not the expected: %s\n", gnutls_psk_client_get_hint(session)); - goto end; + if (exp_hint) { + hint = gnutls_psk_client_get_hint(session); + if (hint == NULL || strcmp(hint, "hint") != 0) { + fail("client: hint is not the expected: %s\n", gnutls_psk_client_get_hint(session)); + goto end; + } } gnutls_record_send(session, MSG, strlen(MSG)); @@ -274,12 +276,14 @@ char buffer[MAX_BUF + 1]; } static -void run_test(const char *prio) +void run_test(const char *prio, unsigned exp_hint) { pid_t child; int err; int sockets[2]; + success("trying with %s\n", prio); + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); if (err == -1) { perror("socketpair"); @@ -297,10 +301,14 @@ void run_test(const char *prio) if (child) { int status; /* parent */ + close(sockets[1]); server(sockets[0], prio); wait(&status); + check_wait_status(status); } else { - client(sockets[1], prio); + close(sockets[0]); + client(sockets[1], prio, exp_hint); + exit(0); } } @@ -308,9 +316,19 @@ void doit(void) { generate_dh_params(); - run_test("NORMAL:-KX-ALL:+PSK"); - run_test("NORMAL:-KX-ALL:+ECDHE-PSK"); - run_test("NORMAL:-KX-ALL:+DHE-PSK"); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", 1); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-PSK", 1); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-PSK", 1); + + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK", 0); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+DHE-PSK", 0); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1:+ECDHE-PSK", 0); + /* the following should work once we support PSK without DH */ + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+PSK", 0); + + run_test("NORMAL:-KX-ALL:+PSK", 0); + run_test("NORMAL:-KX-ALL:+ECDHE-PSK", 0); + run_test("NORMAL:-KX-ALL:+DHE-PSK", 0); gnutls_dh_params_deinit(dh_params); } diff --git a/tests/pskself2.c b/tests/pskself2.c new file mode 100644 index 0000000000..81286a035b --- /dev/null +++ b/tests/pskself2.c @@ -0,0 +1,347 @@ +/* + * Copyright (C) 2004-2012 Free Software Foundation, Inc. + * Copyright (C) 2013 Adam Sampson + * Copyright (C) 2019 Free Software Foundation, Inc. + * + * Author: Simon Josefsson, Ander Juaristi + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* Parts copied from pskself.c. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#if !defined(_WIN32) +#include +#endif +#include +#include + +#include "utils.h" +#include "extras/hex.h" + +/* A very basic TLS client, with PSK authentication. + */ + +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +#define MAX_BUF 1024 +#define MSG "Hello TLS" + +static void client(int sd, const char *prio, unsigned exp_hint) +{ + int ret, ii; + gnutls_session_t session; + char buffer[MAX_BUF + 1]; + gnutls_psk_client_credentials_t pskcred; + /* Need to enable anonymous KX specifically. */ + const gnutls_datum_t key = { (void *) "DEADBEEF", 8 }; + gnutls_datum_t user; + const char *hint; + + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "client"; + + user.data = gnutls_malloc(4); + user.data[0] = 0xCA; + user.data[1] = 0xFE; + user.data[2] = 0xCA; + user.data[3] = 0xFE; + user.size = 4; + + gnutls_psk_allocate_client_credentials(&pskcred); + ret = gnutls_psk_set_client_credentials2(pskcred, &user, &key, + GNUTLS_PSK_KEY_HEX); + if (ret < 0) { + fail("client: Could not set PSK\n"); + gnutls_perror(ret); + goto end; + } + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + /* Use default priorities */ + gnutls_priority_set_direct(session, prio, NULL); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_PSK, pskcred); + + gnutls_transport_set_int(session, sd); + + /* Perform the TLS handshake + */ + ret = gnutls_handshake(session); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + goto end; + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + /* check the hint */ + if (exp_hint) { + hint = gnutls_psk_client_get_hint(session); + if (hint == NULL || strcmp(hint, "hint") != 0) { + fail("client: hint is not the expected: %s\n", gnutls_psk_client_get_hint(session)); + goto end; + } + } + + gnutls_record_send(session, MSG, strlen(MSG)); + + ret = gnutls_record_recv(session, buffer, MAX_BUF); + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + goto end; + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + goto end; + } + + if (debug) { + printf("- Received %d bytes: ", ret); + for (ii = 0; ii < ret; ii++) { + fputc(buffer[ii], stdout); + } + fputs("\n", stdout); + } + + gnutls_bye(session, GNUTLS_SHUT_RDWR); + + end: + + close(sd); + + gnutls_deinit(session); + + gnutls_free(user.data); + gnutls_psk_free_client_credentials(pskcred); + + gnutls_global_deinit(); +} + +/* This is a sample TLS 1.0 echo server, for PSK authentication. + */ + +#define MAX_BUF 1024 + +/* These are global */ + +static int +pskfunc(gnutls_session_t session, const gnutls_datum_t *username, + gnutls_datum_t * key) +{ + if (debug) + printf("psk: Got username with length %d\n", username->size); + + key->data = gnutls_malloc(4); + key->data[0] = 0xDE; + key->data[1] = 0xAD; + key->data[2] = 0xBE; + key->data[3] = 0xEF; + key->size = 4; + + return 0; +} + + +static void server(int sd, const char *prio) +{ + gnutls_psk_server_credentials_t server_pskcred; + int ret; + gnutls_session_t session; + gnutls_datum_t psk_username; + char buffer[MAX_BUF + 1], expected_psk_username[] = { 0xDE, 0xAD, 0xBE, 0xEF }; + + /* this must be called once in the program + */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "server"; + + + gnutls_psk_allocate_server_credentials(&server_pskcred); + gnutls_psk_set_server_credentials_hint(server_pskcred, "hint"); + gnutls_psk_set_server_credentials_function2(server_pskcred, pskfunc); + + gnutls_init(&session, GNUTLS_SERVER); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, prio, NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_PSK, server_pskcred); + + gnutls_transport_set_int(session, sd); + ret = gnutls_handshake(session); + if (ret < 0) { + close(sd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + return; + } + + if (debug) { + success("server: Handshake was completed\n"); + + if (gnutls_psk_server_get_username(session)) + fail("server: gnutls_psk_server_get_username() should have returned NULL\n"); + if (gnutls_psk_server_get_username2(session, &psk_username) < 0) + fail("server: Could not get PSK username\n"); + + if (psk_username.size != 4 || memcmp(psk_username.data, expected_psk_username, 4)) + fail("server: Unexpected PSK username\n"); + + success("server: PSK username length: %d\n", psk_username.size); + } + + /* see the Getting peer's information example */ + /* print_info(session); */ + + for (;;) { + memset(buffer, 0, MAX_BUF + 1); + gnutls_record_set_timeout(session, 10000); + ret = gnutls_record_recv(session, buffer, MAX_BUF); + + if (ret == 0) { + if (debug) + success("server: Peer has closed the GnuTLS connection\n"); + break; + } else if (ret < 0) { + fail("server: Received corrupted data(%d). Closing...\n", ret); + break; + } else if (ret > 0) { + /* echo data back to the client + */ + gnutls_record_send(session, buffer, + strlen(buffer)); + } + } + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sd); + gnutls_deinit(session); + + gnutls_psk_free_server_credentials(server_pskcred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static +void run_test(const char *prio, unsigned exp_hint) +{ + pid_t child; + int err; + int sockets[2]; + + success("trying with %s\n", prio); + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status; + /* parent */ + close(sockets[1]); + server(sockets[0], prio); + wait(&status); + check_wait_status(status); + } else { + close(sockets[0]); + client(sockets[1], prio, exp_hint); + exit(0); + } +} + +void doit(void) +{ + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", 1); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-PSK", 1); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-PSK", 1); + + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.2:+PSK", 0); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE2048:+DHE-PSK", 0); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-SECP256R1:+ECDHE-PSK", 0); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK", 0); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+DHE-PSK", 0); + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1:+ECDHE-PSK", 0); + /* the following should work once we support PSK without DH */ + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+PSK", 0); + + run_test("NORMAL:-KX-ALL:+PSK", 0); + run_test("NORMAL:-KX-ALL:+ECDHE-PSK", 0); + run_test("NORMAL:-KX-ALL:+DHE-PSK", 0); +} + +#endif /* _WIN32 */ diff --git a/tests/psktool.sh b/tests/psktool.sh new file mode 100755 index 0000000000..a5302f57aa --- /dev/null +++ b/tests/psktool.sh @@ -0,0 +1,86 @@ +#!/bin/sh + +# Copyright (C) 2010-2016 Free Software Foundation, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +srcdir="${srcdir:-.}" +PSKTOOL="${PSKTOOL:-../src/psktool${EXEEXT}}" +TMPFILE=psktool.$$.tmp + +if ! test -x "${PSKTOOL}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + + +. "${srcdir}/scripts/common.sh" + +echo "Checking PSK tool basic operations" + +# echo create a user and check whether a key is available +"${PSKTOOL}" -p ${TMPFILE} -u test +if test $? != 0;then + echo "password generation failed..." + exit 1 +fi + +grep 'test:' ${TMPFILE} >/dev/null 2>&1 +if test $? != 0;then + echo "could not find generated user..." + exit 1 +fi + +KEY=$(cat ${TMPFILE} |cut -d ':' -f 2) + +if test "${#KEY}" != 64;then + echo "the generated key is not 256-bits" + exit 1 +fi + + +# Create second user and check whether both exist + +"${PSKTOOL}" -p ${TMPFILE} -u user2 +if test $? != 0;then + echo "password generation failed..." + exit 1 +fi + +grep 'test:' ${TMPFILE} >/dev/null 2>&1 +if test $? != 0;then + echo "could not find first generated user..." + exit 1 +fi + +grep 'user2:' ${TMPFILE} >/dev/null 2>&1 +if test $? != 0;then + echo "could not find second generated user..." + exit 1 +fi + +rm -f $TMPFILE + +exit 0 diff --git a/tests/pubkey-import-export.c b/tests/pubkey-import-export.c new file mode 100644 index 0000000000..b11ce560d6 --- /dev/null +++ b/tests/pubkey-import-export.c @@ -0,0 +1,333 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "cert-common.h" + +static char rsa_key_pem[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIICXAIBAAKBgQC7ZkP18sXXtozMxd/1iDuxyUtqDqGtIFBACIChT1yj0Phsz+Y8\n" + "9+wEdhMXi2SJIlvA3VN8O+18BLuAuSi+jpvGjqClEsv1Vx6i57u3M0mf47tKrmpN\n" + "aP/JEeIyjc49gAuNde/YAIGPKAQDoCKNYQQH+rY3fSEHSdIJYWmYkKNYqQIDAQAB\n" + "AoGADpmARG5CQxS+AesNkGmpauepiCz1JBF/JwnyiX6vEzUh0Ypd39SZztwrDxvF\n" + "PJjQaKVljml1zkJpIDVsqvHdyVdse8M+Qn6hw4x2p5rogdvhhIL1mdWo7jWeVJTF\n" + "RKB7zLdMPs3ySdtcIQaF9nUAQ2KJEvldkO3m/bRJFEp54k0CQQDYy+RlTmwRD6hy\n" + "7UtMjR0H3CSZJeQ8svMCxHLmOluG9H1UKk55ZBYfRTsXniqUkJBZ5wuV1L+pR9EK\n" + "ca89a+1VAkEA3UmBelwEv2u9cAU1QjKjmwju1JgXbrjEohK+3B5y0ESEXPAwNQT9\n" + "TrDM1m9AyxYTWLxX93dI5QwNFJtmbtjeBQJARSCWXhsoaDRG8QZrCSjBxfzTCqZD\n" + "ZXtl807ymCipgJm60LiAt0JLr4LiucAsMZz6+j+quQbSakbFCACB8SLV1QJBAKZQ\n" + "YKf+EPNtnmta/rRKKvySsi3GQZZN+Dt3q0r094XgeTsAqrqujVNfPhTMeP4qEVBX\n" + "/iVX2cmMTSh3w3z8MaECQEp0XJWDVKOwcTW6Ajp9SowtmiZ3YDYo1LF9igb4iaLv\n" + "sWZGfbnU3ryjvkb6YuFjgtzbZDZHWQCo8/cOtOBmPdk=\n" + "-----END RSA PRIVATE KEY-----\n"; + +const gnutls_datum_t rsa_key = { (void*)rsa_key_pem, + sizeof(rsa_key_pem) +}; + +static void dump(const char *name, unsigned char *buf, int buf_size) +{ + int i; + fprintf(stderr, "%s: ", name); + for (i = 0; i < buf_size; i++) + fprintf(stderr, "\\x%.2x", buf[i]); + fprintf(stderr, "\n"); +} + +unsigned char dsa_p[] = "\x00\xb9\x84\xf5\x5a\x81\xbe\x1a\x0d\xc5\x8a\x73\x8f\x0c\x9b\x2f\x9b\xb6\x0e\x4b\xc3\x74\x1a\x7f\x64\xad\x9d\xf3\x28\xc5\xa0\x47\xbc\x9b\x57\x56\xf1\x97\xd5\x7e\x37\x03\xe9\xf2\x4c\xf4\xe3\x8b\x7f\x30\xa3\x5d\x2f\xbb\xa1\xa2\x37\xc2\xea\x35\x8f\x1f\xb1\x5f\xa6\xa2\x5f\x01\xf1\x23\x36\x2b\xe4\x4f\x2f\x2d\xdd\x9d\xd5\x3a\xa6\x39\xaf\x7a\x51\x7c\xd2\x25\x8e\x97\x74\xcf\x1e\xc5\x7b\x4b\x76\x43\x81\x07\x1f\x06\x14\xb8\x6e\x58\x12\xe1\x90\xe2\x37\x6f\xd2\x1b\xec\x68\xc5\x58\xe2\xe6\x30\xe0\x6a\x5e\x2c\x63\x78\xec\x07"; +unsigned char dsa_q[] = "\x00\x9f\x56\x8c\x48\x64\x2f\xfe\x8d\xaa\x7a\x6d\x96\xdb\x04\x5d\x16\xef\x08\xa5\x71"; +unsigned char dsa_g[] = "\x62\x06\x7e\xe4\x5c\x76\x08\xb7\x46\x1a\x5d\xd7\x97\xd4\x2a\x21\xfb\x1f\x31\xc9\xd2\xf4\xfa\x39\xd8\x27\xd1\x9b\xfc\x27\x5d\xa7\x0a\xa7\x1a\xfc\x53\xc1\x2f\x43\xc2\x37\xc8\x85\x7f\x3d\x4c\xab\x5d\x81\x32\xfb\x1d\x5e\x1e\x54\x11\x16\x20\xc6\x80\x5a\xd9\x8c\x9b\x43\xf0\xdd\x6b\xa0\xf4\xc3\xf2\x8a\x9c\x39\xd2\x1c\x7b\x0f\xef\xfa\x28\x93\x8f\xd2\xa1\x22\xeb\xdc\xe0\x8a\x8b\xad\x28\x0e\xcf\xef\x09\x85\xe9\x36\xbd\x8b\x7a\x50\xd5\x7b\xf7\x25\x0d\x6c\x60\x11\xc4\xef\x70\x90\xcf\xd6\x1b\xeb\xbb\x8e\xc6\x3e\x3a\x97"; +unsigned char dsa_y[] = "\x0f\x8a\x87\x57\xf2\xd1\xc2\xdc\xac\xdf\x4b\x8b\x0f\x8b\xba\x29\xf7\xe1\x03\xe4\x55\xfa\xb2\x98\x07\xd6\xfd\x12\xb1\x80\xbc\xf5\xba\xb4\x50\xd4\x7f\xa0\x0e\x43\xe7\x9f\xc9\x78\x11\x5f\xe5\xe4\x0c\x2c\x6b\x6a\xa4\x35\xdc\xbd\x54\xe5\x60\x36\x9a\x31\xd1\x8a\x59\x6e\x6b\x1c\xba\xbd\x2e\xba\xeb\x7c\x87\xef\xda\xc8\xdd\xa1\xeb\xa4\x83\xe6\x8b\xad\xfa\xfa\x8e\x5b\xd7\x37\xc8\x32\x3e\x96\xc2\x3e\xf4\x43\xda\x7d\x91\x02\x0f\xb7\xbc\xf8\xef\x8f\xf7\x41\x00\x5e\x96\xdf\x0f\x08\x96\xdc\xea\xb2\xe9\x06\x82\xaf\xd2\x2f"; +unsigned char dsa_x[] = "\x4b\x9f\xeb\xff\x6c\x9a\x02\x83\x41\x5e\x37\x81\x8e\x00\x86\x31\xe8\xb6\x9b\xc1"; + +unsigned char rsa_m[] = "\x00\xbb\x66\x43\xf5\xf2\xc5\xd7\xb6\x8c\xcc\xc5\xdf\xf5\x88\x3b\xb1\xc9\x4b\x6a\x0e\xa1\xad\x20\x50\x40\x08\x80\xa1\x4f\x5c\xa3\xd0\xf8\x6c\xcf\xe6\x3c\xf7\xec\x04\x76\x13\x17\x8b\x64\x89\x22\x5b\xc0\xdd\x53\x7c\x3b\xed\x7c\x04\xbb\x80\xb9\x28\xbe\x8e\x9b\xc6\x8e\xa0\xa5\x12\xcb\xf5\x57\x1e\xa2\xe7\xbb\xb7\x33\x49\x9f\xe3\xbb\x4a\xae\x6a\x4d\x68\xff\xc9\x11\xe2\x32\x8d\xce\x3d\x80\x0b\x8d\x75\xef\xd8\x00\x81\x8f\x28\x04\x03\xa0\x22\x8d\x61\x04\x07\xfa\xb6\x37\x7d\x21\x07\x49\xd2\x09\x61\x69\x98\x90\xa3\x58\xa9"; +unsigned char rsa_e[] = "\x01\x00\x01"; +unsigned char rsa_d[] = "\x0e\x99\x80\x44\x6e\x42\x43\x14\xbe\x01\xeb\x0d\x90\x69\xa9\x6a\xe7\xa9\x88\x2c\xf5\x24\x11\x7f\x27\x09\xf2\x89\x7e\xaf\x13\x35\x21\xd1\x8a\x5d\xdf\xd4\x99\xce\xdc\x2b\x0f\x1b\xc5\x3c\x98\xd0\x68\xa5\x65\x8e\x69\x75\xce\x42\x69\x20\x35\x6c\xaa\xf1\xdd\xc9\x57\x6c\x7b\xc3\x3e\x42\x7e\xa1\xc3\x8c\x76\xa7\x9a\xe8\x81\xdb\xe1\x84\x82\xf5\x99\xd5\xa8\xee\x35\x9e\x54\x94\xc5\x44\xa0\x7b\xcc\xb7\x4c\x3e\xcd\xf2\x49\xdb\x5c\x21\x06\x85\xf6\x75\x00\x43\x62\x89\x12\xf9\x5d\x90\xed\xe6\xfd\xb4\x49\x14\x4a\x79\xe2\x4d"; +unsigned char rsa_p[] = "\x00\xd8\xcb\xe4\x65\x4e\x6c\x11\x0f\xa8\x72\xed\x4b\x4c\x8d\x1d\x07\xdc\x24\x99\x25\xe4\x3c\xb2\xf3\x02\xc4\x72\xe6\x3a\x5b\x86\xf4\x7d\x54\x2a\x4e\x79\x64\x16\x1f\x45\x3b\x17\x9e\x2a\x94\x90\x90\x59\xe7\x0b\x95\xd4\xbf\xa9\x47\xd1\x0a\x71\xaf\x3d\x6b\xed\x55"; +unsigned char rsa_q[] = "\x00\xdd\x49\x81\x7a\x5c\x04\xbf\x6b\xbd\x70\x05\x35\x42\x32\xa3\x9b\x08\xee\xd4\x98\x17\x6e\xb8\xc4\xa2\x12\xbe\xdc\x1e\x72\xd0\x44\x84\x5c\xf0\x30\x35\x04\xfd\x4e\xb0\xcc\xd6\x6f\x40\xcb\x16\x13\x58\xbc\x57\xf7\x77\x48\xe5\x0c\x0d\x14\x9b\x66\x6e\xd8\xde\x05"; +unsigned char rsa_u[] = "\x4a\x74\x5c\x95\x83\x54\xa3\xb0\x71\x35\xba\x02\x3a\x7d\x4a\x8c\x2d\x9a\x26\x77\x60\x36\x28\xd4\xb1\x7d\x8a\x06\xf8\x89\xa2\xef\xb1\x66\x46\x7d\xb9\xd4\xde\xbc\xa3\xbe\x46\xfa\x62\xe1\x63\x82\xdc\xdb\x64\x36\x47\x59\x00\xa8\xf3\xf7\x0e\xb4\xe0\x66\x3d\xd9"; +unsigned char rsa_e1[] = "\x45\x20\x96\x5e\x1b\x28\x68\x34\x46\xf1\x06\x6b\x09\x28\xc1\xc5\xfc\xd3\x0a\xa6\x43\x65\x7b\x65\xf3\x4e\xf2\x98\x28\xa9\x80\x99\xba\xd0\xb8\x80\xb7\x42\x4b\xaf\x82\xe2\xb9\xc0\x2c\x31\x9c\xfa\xfa\x3f\xaa\xb9\x06\xd2\x6a\x46\xc5\x08\x00\x81\xf1\x22\xd5\xd5"; +unsigned char rsa_e2[] = "\x00\xa6\x50\x60\xa7\xfe\x10\xf3\x6d\x9e\x6b\x5a\xfe\xb4\x4a\x2a\xfc\x92\xb2\x2d\xc6\x41\x96\x4d\xf8\x3b\x77\xab\x4a\xf4\xf7\x85\xe0\x79\x3b\x00\xaa\xba\xae\x8d\x53\x5f\x3e\x14\xcc\x78\xfe\x2a\x11\x50\x57\xfe\x25\x57\xd9\xc9\x8c\x4d\x28\x77\xc3\x7c\xfc\x31\xa1"; + +unsigned char ecc_x[] = "\x3c\x15\x6f\x1d\x48\x3e\x64\x59\x13\x2c\x6d\x04\x1a\x38\x0d\x30\x5c\xe4\x3f\x55\xcb\xd9\x17\x15\x46\x72\x71\x92\xc1\xf8\xc6\x33"; +unsigned char ecc_y[] = "\x3d\x04\x2e\xc8\xc1\x0f\xc0\x50\x04\x7b\x9f\xc9\x48\xb5\x40\xfa\x6f\x93\x82\x59\x61\x5e\x72\x57\xcb\x83\x06\xbd\xcc\x82\x94\xc1"; +unsigned char ecc_k[] = "\x00\xfd\x2b\x00\x80\xf3\x36\x5f\x11\x32\x65\xe3\x8d\x30\x33\x3b\x47\xf5\xce\xf8\x13\xe5\x4c\xc2\xcf\xfd\xe8\x05\x6a\xca\xc9\x41\xb1"; + +unsigned char false_ed25519_x[] = "\xac\xac\x9a\xb3\xc3\x41\x8d\x41\x22\x21\xc1\x84\xa7\xb8\x70\xfb\x44\x6e\xc7\x7e\x20\x87\x7b\xd9\x22\xa4\x5d\xd2\x97\x09\xd5\x48"; +unsigned char ed25519_x[] = "\xab\xaf\x98\xb3\xc3\x41\x8d\x41\x22\x21\xc1\x86\xa7\xb8\x70\xfb\x44\x6e\xc7\x7e\x20\x87\x7b\xd9\x22\xa4\x5d\xd2\x97\x09\xd5\x48"; +unsigned char ed25519_k[] = "\x1c\xa9\x23\xdc\x35\xa8\xfd\xd6\x2d\xa8\x98\xb9\x60\x7b\xce\x10\x3d\xf4\x64\xc6\xe5\x4b\x0a\x65\x56\x6a\x3c\x73\x65\x51\xa2\x2f"; + +gnutls_datum_t _dsa_p = {dsa_p, sizeof(dsa_p)-1}; +gnutls_datum_t _dsa_q = {dsa_q, sizeof(dsa_q)-1}; +gnutls_datum_t _dsa_g = {dsa_g, sizeof(dsa_g)-1}; +gnutls_datum_t _dsa_y = {dsa_y, sizeof(dsa_y)-1}; +gnutls_datum_t _dsa_x = {dsa_x, sizeof(dsa_x)-1}; + +gnutls_datum_t _rsa_m = {rsa_m, sizeof(rsa_m)-1}; +gnutls_datum_t _rsa_e = {rsa_e, sizeof(rsa_e)-1}; +gnutls_datum_t _rsa_d = {rsa_d, sizeof(rsa_d)-1}; +gnutls_datum_t _rsa_p = {rsa_p, sizeof(rsa_p)-1}; +gnutls_datum_t _rsa_q = {rsa_q, sizeof(rsa_q)-1}; +gnutls_datum_t _rsa_u = {rsa_u, sizeof(rsa_u)-1}; +gnutls_datum_t _rsa_e1 = {rsa_e1, sizeof(rsa_e1)-1}; +gnutls_datum_t _rsa_e2 = {rsa_e2, sizeof(rsa_e2)-1}; + +gnutls_datum_t _ecc_x = {ecc_x, sizeof(ecc_x)-1}; +gnutls_datum_t _ecc_y = {ecc_y, sizeof(ecc_y)-1}; +gnutls_datum_t _ecc_k = {ecc_k, sizeof(ecc_k)-1}; + +gnutls_datum_t _false_ed25519_x = {false_ed25519_x, sizeof(false_ed25519_x)-1}; +gnutls_datum_t _ed25519_x = {ed25519_x, sizeof(ed25519_x)-1}; +gnutls_datum_t _ed25519_k = {ed25519_k, sizeof(ed25519_k)-1}; + +unsigned char ecc_params[] = "\x06\x08\x2a\x86\x48\xce\x3d\x03\x01\x07"; +unsigned char ecc_point[] = "\x04\x41\x04\x3c\x15\x6f\x1d\x48\x3e\x64\x59\x13\x2c\x6d\x04\x1a\x38\x0d\x30\x5c\xe4\x3f\x55\xcb\xd9\x17\x15\x46\x72\x71\x92\xc1\xf8\xc6\x33\x3d\x04\x2e\xc8\xc1\x0f\xc0\x50\x04\x7b\x9f\xc9\x48\xb5\x40\xfa\x6f\x93\x82\x59\x61\x5e\x72\x57\xcb\x83\x06\xbd\xcc\x82\x94\xc1"; + +#define CMP(name, dat, v) cmp(name, __LINE__, dat, v, sizeof(v)-1) +static int cmp(const char *name, int line, gnutls_datum_t *v1, unsigned char *v2, unsigned size) +{ + if (size != v1->size) { + fprintf(stderr, "error in %s:%d size\n", name, line); + dump("expected", v2, size); + dump("got", v1->data, v1->size); + exit(1); + } + + if (memcmp(v1->data, v2, size) != 0) { + fprintf(stderr, "error in %s:%d\n", name, line); + dump("expected", v2, size); + dump("got", v1->data, v1->size); + exit(1); + } + return 0; +} + +/* leading zero on v2 is ignored */ +#define CMP_NO_LZ(name, dat, v) cmp_no_lz(name, __LINE__, dat, v, sizeof(v)-1) +static int cmp_no_lz(const char *name, int line, gnutls_datum_t *v1, unsigned char *i2, unsigned size) +{ + gnutls_datum_t v2; + if (size > 0 && i2[0] == 0) { + v2.data = &i2[1]; + v2.size = size-1; + } else { + v2.data = i2; + v2.size = size; + } + + if (v2.size != v1->size) { + fprintf(stderr, "error in %s:%d size\n", name, line); + dump("expected", v2.data, v2.size); + dump("got", v1->data, v1->size); + exit(1); + } + + if (memcmp(v1->data, v2.data, v2.size) != 0) { + fprintf(stderr, "error in %s:%d\n", name, line); + dump("expected", v2.data, v2.size); + dump("got", v1->data, v1->size); + exit(1); + } + return 0; +} + +static +int check_pubkey_import_export(void) +{ + gnutls_pubkey_t key; + gnutls_datum_t p, q, g, y, x; + gnutls_datum_t m, e; + gnutls_ecc_curve_t curve; + unsigned bits; + int ret; + + global_init(); + + ret = gnutls_pubkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_pubkey_import_dsa_raw(key, &_dsa_p, &_dsa_q, &_dsa_g, &_dsa_y); + if (ret < 0) + fail("error\n"); + + bits = 0; + ret = gnutls_pubkey_get_pk_algorithm(key, &bits); + if (ret <= 0 || bits == 0) + fail("error: %s [%u]\n", gnutls_strerror(ret), bits); + + ret = gnutls_pubkey_export_dsa_raw2(key, &p, &q, &g, &y, 0); + if (ret < 0) + fail("error: %s\n", gnutls_strerror(ret)); + + CMP("p", &p, dsa_p); + CMP("q", &q, dsa_q); + CMP("g", &g, dsa_g); + CMP("y", &y, dsa_y); + gnutls_free(p.data); + gnutls_free(q.data); + gnutls_free(g.data); + gnutls_free(y.data); + + ret = gnutls_pubkey_export_dsa_raw2(key, &p, &q, &g, &y, GNUTLS_EXPORT_FLAG_NO_LZ); + if (ret < 0) + fail("error: %s\n", gnutls_strerror(ret)); + + CMP_NO_LZ("p", &p, dsa_p); + CMP_NO_LZ("q", &q, dsa_q); + CMP_NO_LZ("g", &g, dsa_g); + CMP_NO_LZ("y", &y, dsa_y); + gnutls_free(p.data); + gnutls_free(q.data); + gnutls_free(g.data); + gnutls_free(y.data); + gnutls_pubkey_deinit(key); + + /* RSA */ + ret = gnutls_pubkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_pubkey_import_rsa_raw(key, &_rsa_m, &_rsa_e); + if (ret < 0) + fail("error\n"); + + bits = 0; + ret = gnutls_pubkey_get_pk_algorithm(key, &bits); + if (ret <= 0 || bits == 0) + fail("error: %s [%u]\n", gnutls_strerror(ret), bits); + + ret = gnutls_pubkey_export_rsa_raw2(key, &m, &e, 0); + if (ret < 0) + fail("error\n"); + + CMP("m", &m, rsa_m); + CMP("e", &e, rsa_e); + gnutls_free(m.data); + gnutls_free(e.data); + + ret = gnutls_pubkey_export_rsa_raw2(key, &m, &e, GNUTLS_EXPORT_FLAG_NO_LZ); + if (ret < 0) + fail("error\n"); + + CMP_NO_LZ("m", &m, rsa_m); + CMP_NO_LZ("e", &e, rsa_e); + gnutls_free(m.data); + gnutls_free(e.data); + gnutls_pubkey_deinit(key); + + /* ECC */ + ret = gnutls_pubkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = gnutls_pubkey_import_ecc_raw(key, GNUTLS_ECC_CURVE_SECP256R1, &_ecc_x, &_ecc_y); + if (ret < 0) + fail("error\n"); + + bits = 0; + ret = gnutls_pubkey_get_pk_algorithm(key, &bits); + if (ret <= 0 || bits == 0) + fail("error: %s [%u]\n", gnutls_strerror(ret), bits); + + ret = gnutls_pubkey_export_ecc_raw2(key, &curve, &x, &y, 0); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_SECP256R1) { + fprintf(stderr, "unexpected curve value: %d\n", (int)curve); + exit(1); + } + CMP("x", &x, ecc_x); + CMP("y", &y, ecc_y); + gnutls_free(x.data); + gnutls_free(y.data); + + ret = gnutls_pubkey_export_ecc_raw2(key, &curve, &x, &y, GNUTLS_EXPORT_FLAG_NO_LZ); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_SECP256R1) { + fprintf(stderr, "unexpected curve value: %d\n", (int)curve); + exit(1); + } + CMP_NO_LZ("x", &x, ecc_x); + CMP_NO_LZ("y", &y, ecc_y); + gnutls_free(x.data); + gnutls_free(y.data); + gnutls_pubkey_deinit(key); + + /* Ed25519 */ + ret = gnutls_pubkey_init(&key); + if (ret < 0) + fail("error\n"); + + /* test whether an invalid size would fail */ + ret = gnutls_pubkey_import_ecc_raw(key, GNUTLS_ECC_CURVE_ED25519, &_rsa_m, NULL); + if (ret != GNUTLS_E_INVALID_REQUEST) + fail("error\n"); + + ret = gnutls_pubkey_import_ecc_raw(key, GNUTLS_ECC_CURVE_ED25519, &_ed25519_x, NULL); + if (ret < 0) + fail("error\n"); + + bits = 0; + ret = gnutls_pubkey_get_pk_algorithm(key, &bits); + if (ret <= 0 || bits == 0) + fail("error: %s [%u]\n", gnutls_strerror(ret), bits); + + ret = gnutls_pubkey_verify_params(key); + if (ret != 0) + fail("error: %s\n", gnutls_strerror(ret)); + + ret = gnutls_pubkey_export_ecc_raw(key, &curve, &x, NULL); + if (ret < 0) + fail("error\n"); + + if (curve != GNUTLS_ECC_CURVE_ED25519) { + fail("unexpected curve value: %d\n", (int)curve); + } + CMP("x", &x, ed25519_x); + gnutls_free(x.data); + gnutls_pubkey_deinit(key); + + return 0; +} + +void doit(void) +{ + if (check_pubkey_import_export() != 0) { + fail("error in pubkey import/export check\n"); + exit(1); + } +} diff --git a/tests/rawpk-api.c b/tests/rawpk-api.c new file mode 100644 index 0000000000..96dd0a9ff6 --- /dev/null +++ b/tests/rawpk-api.c @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2018 ARPA2 project + * + * Author: Tom Vrancken (dev@tomvrancken.nl) + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include +#include "cert-common.h" + +/* Here we test the raw public-key API */ + +void doit(void) +{ + int ret; + gnutls_certificate_credentials_t cred = NULL; + gnutls_pcert_st* pcert; + gnutls_pubkey_t pubkey; + const char *src; + char rawpk_pub_path[256]; + char rawpk_priv_path[256]; + + // Get current src dir + src = getenv("srcdir"); + if (src == NULL) + src = "."; + + // Set file paths for pem files + snprintf(rawpk_pub_path, sizeof(rawpk_pub_path), "%s/%s", src, "certs/rawpk_pub.pem"); + snprintf(rawpk_priv_path, sizeof(rawpk_priv_path), "%s/%s", src, "certs/rawpk_priv.pem"); + + + global_init(); + + // Initialize creds + assert(gnutls_certificate_allocate_credentials(&cred) >= 0); + assert((pcert = gnutls_calloc(1, sizeof(*pcert))) != NULL); + assert(gnutls_pubkey_init(&pubkey) >= 0); + assert(gnutls_pubkey_import(pubkey, &rawpk_public_key1, GNUTLS_X509_FMT_PEM) >= 0); + + + /* Tests for gnutls_certificate_set_rawpk_key_mem() */ + success("Testing gnutls_certificate_set_rawpk_key_mem()...\n"); + // Positive tests + ret = gnutls_certificate_set_rawpk_key_mem(cred, + &rawpk_public_key2, &rawpk_private_key2, GNUTLS_X509_FMT_PEM, + NULL, 0, NULL, 0, 0); + if (ret < 0) { + fail("Failed to load credentials with error: %d\n", ret); + } + // Negative tests + ret = gnutls_certificate_set_rawpk_key_mem(cred, + NULL, &rawpk_private_key2, GNUTLS_X509_FMT_PEM, + NULL, 0, NULL, 0, 0); + if (ret != GNUTLS_E_INSUFFICIENT_CREDENTIALS) { + fail("Failed to detect falsy input. Expected error: %d\n", GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } + ret = gnutls_certificate_set_rawpk_key_mem(cred, + &rawpk_public_key2, NULL, GNUTLS_X509_FMT_PEM, + NULL, 0, NULL, 0, 0); + if (ret != GNUTLS_E_INSUFFICIENT_CREDENTIALS) { + fail("Failed to detect falsy input. Expected error: %d\n", GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } + + + /* Tests for gnutls_certificate_set_rawpk_key_file() */ + success("Testing gnutls_certificate_set_rawpk_key_file()...\n"); + // Positive tests + ret = gnutls_certificate_set_rawpk_key_file(cred, rawpk_pub_path, rawpk_priv_path, GNUTLS_X509_FMT_PEM, NULL, 0, NULL, 0, 0, 0); + if (ret < 0) { + fail("Failed to load credentials with error: %d\n", ret); + } + // Negative tests + ret = gnutls_certificate_set_rawpk_key_file(cred, NULL, rawpk_priv_path, GNUTLS_X509_FMT_PEM, NULL, 0, NULL, 0, 0, 0); + if (ret != GNUTLS_E_INSUFFICIENT_CREDENTIALS) { + fail("Failed to detect falsy input. Expected error: %d\n", GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } + ret = gnutls_certificate_set_rawpk_key_file(cred, rawpk_pub_path, NULL, GNUTLS_X509_FMT_PEM, NULL, 0, NULL, 0, 0, 0); + if (ret != GNUTLS_E_INSUFFICIENT_CREDENTIALS) { + fail("Failed to detect falsy input. Expected error: %d\n", GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } + + + /* Tests for gnutls_pcert_import_rawpk() */ + success("Testing gnutls_pcert_import_rawpk()...\n"); + // Positive tests + ret = gnutls_pcert_import_rawpk(pcert, pubkey, 0); + if (ret < 0) { + fail("Failed to import raw public-key into pcert with error: %d\n", ret); + } + // Negative tests + ret = gnutls_pcert_import_rawpk(pcert, NULL, 0); + if (ret != GNUTLS_E_INSUFFICIENT_CREDENTIALS) { + fail("Failed to detect falsy input. Expected error: %d\n", GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } + // Cleanup to prevent subsequent API calls to produce memory leaks + gnutls_pcert_deinit(pcert); + + + /* Tests for gnutls_pcert_import_rawpk_raw() */ + success("Testing gnutls_pcert_import_rawpk_raw()...\n"); + // Positive tests + ret = gnutls_pcert_import_rawpk_raw(pcert, &rawpk_public_key1, GNUTLS_X509_FMT_PEM, 0, 0); + if (ret < 0) { + fail("Failed to import raw public-key into pcert with error: %d\n", ret); + } + // Negative tests + ret = gnutls_pcert_import_rawpk_raw(pcert, NULL, GNUTLS_X509_FMT_PEM, 0, 0); + if (ret != GNUTLS_E_INSUFFICIENT_CREDENTIALS) { + fail("Failed to detect falsy input. Expected error: %d\n", GNUTLS_E_INSUFFICIENT_CREDENTIALS); + } + // Cleanup to prevent subsequent API calls to produce memory leaks + gnutls_pcert_deinit(pcert); + + + // Generic cleanup + gnutls_free(pcert); + gnutls_certificate_free_credentials(cred); + + gnutls_global_deinit(); +} + diff --git a/tests/record-pad.c b/tests/record-pad.c new file mode 100644 index 0000000000..1402a9ad93 --- /dev/null +++ b/tests/record-pad.c @@ -0,0 +1,414 @@ +/* + * Copyright (C) 2012-2018 Free Software Foundation, Inc. + * + * Author: Nikos Mavrogiannopoulos, Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main(void) +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" + +#define MAX_BUF 1024 +#define HIGH(x) (3*x) +static void terminate(void); +static size_t total; + +/* This program tests the robustness of record sending with padding. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + + +/* A very basic TLS client, with anonymous authentication. + */ + + + +static ssize_t +push(gnutls_transport_ptr_t tr, const void *data, size_t len) +{ + int fd = (long int) tr; + + total += len; + return send(fd, data, len, 0); +} + +struct test_st { + const char *name; + size_t pad; + size_t data; + const char *prio; + unsigned flags; + int sret; +}; + +static void client(int fd, struct test_st *test) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_anon_client_credentials_t anoncred; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + /* Need to enable anonymous KX specifically. */ + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_anon_allocate_client_credentials(&anoncred); + gnutls_certificate_allocate_credentials(&x509_cred); + + assert(gnutls_init(&session, GNUTLS_CLIENT|test->flags)>=0); + assert(gnutls_priority_set_direct(session, test->prio, NULL)>=0); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + do { + do { + ret = gnutls_record_recv(session, buffer, sizeof(buffer)); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + } while (ret > 0); + + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + goto end; + } else if (ret < 0) { + if (ret != 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + exit(1); + } + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + + close(fd); + + gnutls_deinit(session); + + gnutls_anon_free_client_credentials(anoncred); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + + +/* These are global */ +pid_t child; + +static void terminate(void) +{ + kill(child, SIGTERM); + exit(1); +} + +static void server(int fd, struct test_st *test) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_anon_server_credentials_t anoncred; + gnutls_certificate_credentials_t x509_cred; + size_t expected; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_anon_allocate_server_credentials(&anoncred); + + assert(gnutls_init(&session, GNUTLS_SERVER|test->flags)>=0); + + assert(gnutls_priority_set_direct(session, test->prio, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + terminate(); + } + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + gnutls_transport_set_push_function(session, push); + + assert(test->data <= sizeof(buffer)); + + total = 0; + do { + ret = + gnutls_record_send2(session, buffer, + test->data, + test->pad, 0); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + + if (test->sret < 0) { + if (ret >= 0) + fail("server: expected failure got success!\n"); + if (ret != test->sret) + fail("server: expected different failure: '%s', got: '%s'\n", + gnutls_strerror(test->sret), gnutls_strerror(ret)); + goto finish; + } + + if (ret < 0) { + fail("Error sending packet: %s\n", + gnutls_strerror(ret)); + terminate(); + } + + expected = test->data + test->pad + gnutls_record_overhead_size(session); + if (total != expected) { + fail("Sent data (%u) are lower than expected (%u)\n", + (unsigned) total, (unsigned) expected); + terminate(); + } + + finish: + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + gnutls_deinit(session); + + gnutls_anon_free_server_credentials(anoncred); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void start(struct test_st *test) +{ + int fd[2]; + int ret; + + success("running %s\n", test->name); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], test); + kill(child, SIGTERM); + } else { + close(fd[0]); + client(fd[1], test); + exit(0); + } +} + +#define AES_GCM "NONE:+VERS-TLS1.3:+AES-256-GCM:+AEAD:+SIGN-ALL:+GROUP-ALL" + +static void ch_handler(int sig) +{ + int status; + wait(&status); + check_wait_status(status); + return; +} + +struct test_st tests[] = +{ + { + .name = "AES-GCM with max pad", + .pad = HIGH(MAX_BUF+1)-(MAX_BUF+1), + .data = MAX_BUF, + .prio = AES_GCM, + .flags = 0 + }, + { + .name = "AES-GCM with zero pad", + .pad = 0, + .data = MAX_BUF, + .prio = AES_GCM, + .flags = 0 + }, + { + .name = "AES-GCM with 1-byte pad", + .pad = 1, + .data = MAX_BUF, + .prio = AES_GCM, + .flags = 0 + }, + { + .name = "AES-GCM with pad, but no data", + .pad = 16, + .data = 0, + .prio = AES_GCM, + .flags = 0 + }, + { + .name = "AES-GCM with max pad and safe padding check", + .pad = HIGH(MAX_BUF+1)-(MAX_BUF+1), + .data = MAX_BUF, + .prio = AES_GCM, + .flags = GNUTLS_SAFE_PADDING_CHECK + }, + { + .name = "AES-GCM with zero pad and safe padding check", + .pad = 0, + .data = MAX_BUF, + .prio = AES_GCM, + .flags = GNUTLS_SAFE_PADDING_CHECK + }, + { + .name = "AES-GCM with 1-byte pad and safe padding check", + .pad = 1, + .data = MAX_BUF, + .prio = AES_GCM, + .flags = GNUTLS_SAFE_PADDING_CHECK + }, + { + .name = "AES-GCM with pad, but no data and safe padding check", + .pad = 16, + .data = 0, + .prio = AES_GCM, + .flags = GNUTLS_SAFE_PADDING_CHECK + }, + { + .name = "AES-GCM with pad, but no data and no pad", + .pad = 0, + .data = 0, + .prio = AES_GCM, + .flags = GNUTLS_SAFE_PADDING_CHECK, + .sret = GNUTLS_E_INVALID_REQUEST + }, +}; + +void doit(void) +{ + unsigned i; + signal(SIGCHLD, ch_handler); + + for (i=0;i +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +static void terminate(void); + +/* This program tests the correctness of the return + * values of the record functions. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +static unsigned char server_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" + "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" + "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" + "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" + "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" + "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" + "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" + "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" + "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" + "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" + "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" + "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" + "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; + +const gnutls_datum_t server_cert = { server_cert_pem, + sizeof(server_cert_pem) +}; + +static unsigned char server_key_pem[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" + "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" + "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" + "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" + "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" + "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" + "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" + "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" + "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" + "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" + "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" + "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" + "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" + "-----END RSA PRIVATE KEY-----\n"; + +const gnutls_datum_t server_key = { server_key_pem, + sizeof(server_key_pem) +}; + + +/* A very basic TLS client, with anonymous authentication. + */ + +#define MAX_BUF 24*1024 + +static void client(int fd, const char *prio, int ign) +{ + int ret; + unsigned i; + char buffer[MAX_BUF + 1]; + const char* err; + gnutls_anon_client_credentials_t anoncred; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + /* Need to enable anonymous KX specifically. */ + + global_init(); + memset(buffer, 2, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_anon_allocate_client_credentials(&anoncred); + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + /* Use default priorities */ + ret = gnutls_priority_set_direct(session, prio, &err); + if (ret < 0) { + fail("error setting priority: %s\n", err); + exit(1); + } + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client (%s): Handshake has failed (%s)\n\n", prio, + gnutls_strerror(ret)); + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + /* Test sending */ + for (i = 1; i < 16384; i++) { + do { + ret = gnutls_record_send(session, buffer, i); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fail("server (%s): Error sending %d byte packet: %s\n", prio, i, gnutls_strerror(ret)); + terminate(); + } + + if (ret > 0 && ret != (int)i) { + fail("server (%s): Error sending %d byte packet: sent: %d\n", prio, i, ret); + terminate(); + } + } + + /* Try sending a bit more */ + i = 21056; + do { + ret = gnutls_record_send(session, buffer, i); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fail("server (%s): Error sending %d byte packet: %s\n", + prio, i, gnutls_strerror(ret)); + exit(1); + } else if (ign == 0 && ret != 16384) { + fail("server (%s): Error sending %d byte packet; sent %d bytes instead of 16384\n", prio, i, ret); + exit(1); + } + + memset(buffer, 0xff, sizeof(buffer)); + ret = gnutls_record_send(session, buffer, 4); + if (ret < 0) { + fail("server (%s): Error sending 4 byte packet: %s\n", + prio, gnutls_strerror(ret)); + exit(1); + } + + memset(buffer, 0x02, sizeof(buffer)); + gnutls_record_set_timeout(session, 10000); + + /* Test receiving */ + do { + do { + ret = gnutls_record_recv(session, buffer, MAX_BUF); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + } while (ret > 0); + + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + goto end; + } else if (ret < 0) { + if (ret != 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + exit(1); + } + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + + close(fd); + + gnutls_deinit(session); + + gnutls_anon_free_client_credentials(anoncred); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + + +/* These are global */ +pid_t child; + +static void terminate(void) +{ + kill(child, SIGTERM); + exit(1); +} + +static void server(int fd, const char *prio, int ign) +{ + int ret; + unsigned i; + const char* err; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_anon_server_credentials_t anoncred; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_anon_allocate_server_credentials(&anoncred); + + gnutls_init(&session, GNUTLS_SERVER); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + ret = gnutls_priority_set_direct(session, prio, &err); + if (ret < 0) { + fail("error setting priority: %s\n", err); + exit(1); + } + + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server (%s): Handshake has failed (%s)\n\n", prio, + gnutls_strerror(ret)); + terminate(); + } + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + /* Here we do both a receive and a send test because if valgrind + * detects an error on the peer, the main process will never know. + */ + + /* Test receiving */ + i = 1; + do { + do { + ret = gnutls_record_recv(session, buffer, MAX_BUF); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + if (ret > 0 && ret != (int)i) { + if (ret == 4 && (uint8_t)buffer[0] == 0xff) { + break; + } else { + fail("error receiving message[%d]: ret: %d\n", i, ret); + } + } + i++; + } while (ret > 0); + + if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + exit(1); + } + + /* Test sending */ + for (i = 1; i < 16384; i++) { + do { + ret = gnutls_record_send(session, buffer, i); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fail("server (%s): Error sending %d byte packet: %s\n", prio, i, gnutls_strerror(ret)); + terminate(); + } + } + + /* Try sending a bit more */ + i = 21056; + do { + ret = gnutls_record_send(session, buffer, i); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fail("server (%s): Error sending %d byte packet: %s\n", + prio, i, gnutls_strerror(ret)); + terminate(); + } else if (ign == 0 && ret != 16384) { + fail("server (%s): Error sending %d byte packet; sent %d bytes instead of 16384\n", prio, i, ret); + terminate(); + } + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + gnutls_deinit(session); + + gnutls_anon_free_server_credentials(anoncred); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void start(const char *prio, int ign) +{ + int fd[2]; + int ret; + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], prio, ign); + } else { + close(fd[0]); + client(fd[1], prio, ign); + exit(0); + } +} + +#define AES_CBC "NONE:+VERS-TLS1.0:-CIPHER-ALL:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+CURVE-ALL" +#define AES_CBC_SHA256 "NONE:+VERS-TLS1.2:-CIPHER-ALL:+RSA:+AES-128-CBC:+AES-256-CBC:+SHA256:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+CURVE-ALL" +#define AES_GCM "NONE:+VERS-TLS1.2:-CIPHER-ALL:+RSA:+AES-128-GCM:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+CURVE-ALL" +#define TLS13_AES_GCM "NONE:+VERS-TLS1.3:-CIPHER-ALL:+RSA:+AES-128-GCM:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+CURVE-ALL" + +#define ARCFOUR_SHA1 "NONE:+VERS-TLS1.0:-CIPHER-ALL:+ARCFOUR-128:+SHA1:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+CURVE-ALL" +#define ARCFOUR_MD5 "NONE:+VERS-TLS1.0:-CIPHER-ALL:+ARCFOUR-128:+MD5:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+CURVE-ALL:+RSA" + +#define NULL_SHA1 "NONE:+VERS-TLS1.0:-CIPHER-ALL:+NULL:+SHA1:+SIGN-ALL:+COMP-NULL:+ANON-ECDH:+RSA:+CURVE-ALL" + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +void doit(void) +{ + signal(SIGCHLD, ch_handler); + + start(AES_CBC, 0); + start(AES_CBC_SHA256, 0); + start(AES_GCM, 0); + start(TLS13_AES_GCM, 0); + + if (!gnutls_fips140_mode_enabled()) { + start(NULL_SHA1, 0); + + start(ARCFOUR_SHA1, 0); + start(ARCFOUR_MD5, 0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/record-sizes-range.c b/tests/record-sizes-range.c index b4f2825fa0..56e1b6cf34 100644 --- a/tests/record-sizes-range.c +++ b/tests/record-sizes-range.c @@ -116,7 +116,7 @@ void doit(void) gnutls_anon_set_server_dh_params(s_anoncred, dh_params); gnutls_init(&server, GNUTLS_SERVER); gnutls_priority_set_direct(server, - "NONE:+VERS-TLS-ALL:+AES-128-CBC:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", + "NONE:+VERS-TLS1.2:+AES-128-CBC:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", NULL); gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); gnutls_transport_set_push_function(server, server_push); @@ -127,7 +127,7 @@ void doit(void) gnutls_anon_allocate_client_credentials(&c_anoncred); gnutls_init(&client, GNUTLS_CLIENT); gnutls_priority_set_direct(client, - "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", + "NONE:+VERS-TLS1.2:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", NULL); gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); gnutls_transport_set_push_function(client, client_push); diff --git a/tests/record-sizes.c b/tests/record-sizes.c index b1628041da..be5b20a84e 100644 --- a/tests/record-sizes.c +++ b/tests/record-sizes.c @@ -61,7 +61,6 @@ void doit(void) gnutls_session_t client; int cret = GNUTLS_E_AGAIN, i; /* Need to enable anonymous KX specifically. */ - ssize_t ns; int ret, transferred = 0; if (gnutls_fips140_mode_enabled()) { @@ -81,7 +80,7 @@ void doit(void) gnutls_anon_set_server_dh_params(s_anoncred, dh_params); gnutls_init(&server, GNUTLS_SERVER); gnutls_priority_set_direct(server, - "NONE:+VERS-TLS-ALL:+ARCFOUR-128:+MD5:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", + "NONE:+VERS-TLS1.2:+ARCFOUR-128:+MD5:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", NULL); gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); gnutls_transport_set_push_function(server, server_push); @@ -92,7 +91,7 @@ void doit(void) gnutls_anon_allocate_client_credentials(&c_anoncred); gnutls_init(&client, GNUTLS_CLIENT); gnutls_priority_set_direct(client, - "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+ARCFOUR-128:+MD5:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", + "NONE:+VERS-TLS1.2:+CIPHER-ALL:+ARCFOUR-128:+MD5:+MAC-ALL:+SIGN-ALL:+COMP-NULL:+ANON-DH", NULL); gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); gnutls_transport_set_push_function(client, client_push); diff --git a/tests/record-timeouts.c b/tests/record-timeouts.c index b9c24248dc..fd9a9994fd 100644 --- a/tests/record-timeouts.c +++ b/tests/record-timeouts.c @@ -28,8 +28,10 @@ #include #include #include +#include #include #include "eagain-common.h" +#include "cert-common.h" #include "utils.h" @@ -65,22 +67,20 @@ static int pull_timeout_func(gnutls_transport_ptr_t ptr, unsigned int ms) #define MAX_VALS 4 static const int vals[MAX_VALS] = {0, 1000, 5000, GNUTLS_INDEFINITE_TIMEOUT}; -void doit(void) +static void start(const char *prio) { /* Server stuff. */ - gnutls_anon_server_credentials_t s_anoncred; - const gnutls_datum_t p3 = - { (unsigned char *) pkcs3, strlen(pkcs3) }; - static gnutls_dh_params_t dh_params; + gnutls_certificate_credentials_t serverx509cred; gnutls_session_t server; int sret = GNUTLS_E_AGAIN; /* Client stuff. */ - gnutls_anon_client_credentials_t c_anoncred; + gnutls_certificate_credentials_t clientx509cred; gnutls_session_t client; int cret = GNUTLS_E_AGAIN, i; /* Need to enable anonymous KX specifically. */ - ssize_t ns; - int ret, transferred = 0; + int transferred = 0; + + success("trying %s\n", prio); /* General init. */ global_init(); @@ -89,26 +89,26 @@ void doit(void) gnutls_global_set_log_level(4711); /* Init server */ - gnutls_anon_allocate_server_credentials(&s_anoncred); - gnutls_dh_params_init(&dh_params); - gnutls_dh_params_import_pkcs3(dh_params, &p3, GNUTLS_X509_FMT_PEM); - gnutls_anon_set_server_dh_params(s_anoncred, dh_params); + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + gnutls_init(&server, GNUTLS_SERVER); - gnutls_priority_set_direct(server, - "NORMAL:+ANON-DH:+ANON-ECDH", - NULL); - gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); + + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + assert(gnutls_priority_set_direct(server, prio, NULL) >= 0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); /* Init client */ - gnutls_anon_allocate_client_credentials(&c_anoncred); + assert(gnutls_certificate_allocate_credentials(&clientx509cred)>=0); gnutls_init(&client, GNUTLS_CLIENT); - gnutls_priority_set_direct(client, - "NORMAL:+ANON-DH:+ANON-ECDH", - NULL); - gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); + assert(gnutls_priority_set_direct(client, prio, NULL) >= 0); + assert(gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred)>=0); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_pull_timeout_function(client, pull_timeout_func); @@ -147,11 +147,16 @@ void doit(void) gnutls_deinit(client); gnutls_deinit(server); - gnutls_anon_free_client_credentials(c_anoncred); - gnutls_anon_free_server_credentials(s_anoncred); - - gnutls_dh_params_deinit(dh_params); + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); gnutls_global_deinit(); + reset_buffers(); } +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); +} diff --git a/tests/recv-data-before-handshake.c b/tests/recv-data-before-handshake.c index 27dda811bf..0aedfca47b 100644 --- a/tests/recv-data-before-handshake.c +++ b/tests/recv-data-before-handshake.c @@ -46,6 +46,7 @@ int main() #include #include #include +#include #include "cert-common.h" #include "utils.h" @@ -93,7 +94,7 @@ static int handshake_callback(gnutls_session_t session, unsigned int htype, #define MAX_BUF 1024 -static void client(int fd) +static void client(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -112,10 +113,9 @@ static void client(int fd) /* Initialize TLS session */ - gnutls_init(&session, GNUTLS_CLIENT); + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-RSA", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, GNUTLS_HOOK_PRE, @@ -190,7 +190,7 @@ static void terminate(void) exit(1); } -static void server(int fd) +static void server(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -212,12 +212,12 @@ static void server(int fd) &server_key, GNUTLS_X509_FMT_PEM); - gnutls_init(&session, GNUTLS_SERVER); + assert(gnutls_init(&session, GNUTLS_SERVER)>=0); /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -261,11 +261,13 @@ static void ch_handler(int sig) return; } -void doit(void) +static +void start(const char *prio) { int fd[2]; int ret, status = 0; + success("trying %s\n", prio); signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); @@ -285,14 +287,21 @@ void doit(void) if (child) { /* parent */ close(fd[1]); - client(fd[0]); + client(fd[0], prio); waitpid(child, &status, 0); check_wait_status(status); } else { close(fd[0]); - server(fd[1]); + server(fd[1], prio); exit(0); } } +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); +} + #endif /* _WIN32 */ diff --git a/tests/rehandshake-ext-secret.c b/tests/rehandshake-ext-secret.c index 86d269d4b2..94279f0322 100644 --- a/tests/rehandshake-ext-secret.c +++ b/tests/rehandshake-ext-secret.c @@ -49,7 +49,6 @@ static void tls_log_func(int level, const char *str) static void try(unsigned onclient) { - int exit_code = EXIT_SUCCESS; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; gnutls_session_t server; @@ -73,7 +72,7 @@ static void try(unsigned onclient) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, "NORMAL", NULL); + gnutls_priority_set_direct(server, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -83,7 +82,7 @@ static void try(unsigned onclient) gnutls_init(&client, GNUTLS_CLIENT); gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); - gnutls_priority_set_direct(client, "NORMAL", NULL); + gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -107,9 +106,9 @@ static void try(unsigned onclient) } if (onclient) - gnutls_priority_set_direct(client, "NORMAL:%NO_SESSION_HASH", NULL); + gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2:%NO_SESSION_HASH", NULL); else - gnutls_priority_set_direct(server, "NORMAL:%NO_SESSION_HASH", NULL); + gnutls_priority_set_direct(server, "NORMAL:-VERS-ALL:+VERS-TLS1.2:%NO_SESSION_HASH", NULL); sret = gnutls_rehandshake(server); if (debug) { @@ -139,13 +138,6 @@ static void try(unsigned onclient) gnutls_certificate_free_credentials(clientx509cred); gnutls_global_deinit(); - - if (debug) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } } void doit(void) diff --git a/tests/rehandshake-switch-cert-allow.c b/tests/rehandshake-switch-cert-allow.c index a31597e5f1..c657078689 100644 --- a/tests/rehandshake-switch-cert-allow.c +++ b/tests/rehandshake-switch-cert-allow.c @@ -84,7 +84,7 @@ static void try(void) serverx509cred); gnutls_priority_set_direct(server, - "NORMAL", + "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -109,7 +109,7 @@ static void try(void) if (ret < 0) exit(1); - ret = gnutls_priority_set_direct(client, "NORMAL:-KX-ALL:+RSA", NULL); + ret = gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA", NULL); if (ret < 0) exit(1); diff --git a/tests/rehandshake-switch-cert-client-allow.c b/tests/rehandshake-switch-cert-client-allow.c index 367fda8c58..a95be20929 100644 --- a/tests/rehandshake-switch-cert-client-allow.c +++ b/tests/rehandshake-switch-cert-client-allow.c @@ -81,7 +81,7 @@ static void try(void) serverx509cred); gnutls_priority_set_direct(server, - "NORMAL", + "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -122,7 +122,7 @@ static void try(void) if (ret < 0) exit(1); - ret = gnutls_priority_set_direct(client, "NORMAL:-KX-ALL:+RSA", NULL); + ret = gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA", NULL); if (ret < 0) exit(1); diff --git a/tests/rehandshake-switch-cert-client.c b/tests/rehandshake-switch-cert-client.c index 7c28a2fa96..b6e17bc4de 100644 --- a/tests/rehandshake-switch-cert-client.c +++ b/tests/rehandshake-switch-cert-client.c @@ -81,7 +81,7 @@ static void try(void) serverx509cred); gnutls_priority_set_direct(server, - "NORMAL", + "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -122,7 +122,7 @@ static void try(void) if (ret < 0) exit(1); - ret = gnutls_priority_set_direct(client, "NORMAL:-KX-ALL:+RSA", NULL); + ret = gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA", NULL); if (ret < 0) exit(1); diff --git a/tests/rehandshake-switch-cert.c b/tests/rehandshake-switch-cert.c index bb71e620e5..c4c2c6c1dc 100644 --- a/tests/rehandshake-switch-cert.c +++ b/tests/rehandshake-switch-cert.c @@ -84,7 +84,7 @@ static void try(void) serverx509cred); gnutls_priority_set_direct(server, - "NORMAL", + "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -109,7 +109,7 @@ static void try(void) if (ret < 0) exit(1); - ret = gnutls_priority_set_direct(client, "NORMAL:-KX-ALL:+RSA", NULL); + ret = gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA", NULL); if (ret < 0) exit(1); diff --git a/tests/rehandshake-switch-psk-id.c b/tests/rehandshake-switch-psk-id.c index ebe4c10eed..c8beec13f1 100644 --- a/tests/rehandshake-switch-psk-id.c +++ b/tests/rehandshake-switch-psk-id.c @@ -173,19 +173,19 @@ void doit(void) global_init(); /* Allow change of ID */ - try("NORMAL:-KX-ALL:+PSK", GNUTLS_KX_PSK, 0); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", GNUTLS_KX_PSK, 0); reset_buffers(); - try("NORMAL:-KX-ALL:+DHE-PSK", GNUTLS_KX_DHE_PSK, 0); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-PSK", GNUTLS_KX_DHE_PSK, 0); reset_buffers(); - try("NORMAL:-KX-ALL:+ECDHE-PSK", GNUTLS_KX_ECDHE_PSK, 0); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-PSK", GNUTLS_KX_ECDHE_PSK, 0); reset_buffers(); /* Prohibit (default) change of ID */ - try("NORMAL:-KX-ALL:+PSK", GNUTLS_KX_PSK, 1); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+PSK", GNUTLS_KX_PSK, 1); reset_buffers(); - try("NORMAL:-KX-ALL:+DHE-PSK", GNUTLS_KX_DHE_PSK, 1); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-PSK", GNUTLS_KX_DHE_PSK, 1); reset_buffers(); - try("NORMAL:-KX-ALL:+ECDHE-PSK", GNUTLS_KX_ECDHE_PSK, 1); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-PSK", GNUTLS_KX_ECDHE_PSK, 1); reset_buffers(); gnutls_global_deinit(); } diff --git a/tests/rehandshake-switch-srp-id.c b/tests/rehandshake-switch-srp-id.c index 91de6fc96e..0b5608505a 100644 --- a/tests/rehandshake-switch-srp-id.c +++ b/tests/rehandshake-switch-srp-id.c @@ -257,15 +257,15 @@ void doit(void) { global_init(); /* Allow change of ID */ - try("NORMAL:-KX-ALL:+SRP", GNUTLS_KX_SRP, 0); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP", GNUTLS_KX_SRP, 0); reset_buffers(); - try("NORMAL:-KX-ALL:+SRP-RSA", GNUTLS_KX_SRP_RSA, 0); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP-RSA", GNUTLS_KX_SRP_RSA, 0); reset_buffers(); /* Prohibit (default) change of ID */ - try("NORMAL:-KX-ALL:+SRP", GNUTLS_KX_SRP, 1); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP", GNUTLS_KX_SRP, 1); reset_buffers(); - try("NORMAL:-KX-ALL:+SRP-RSA", GNUTLS_KX_SRP_RSA, 1); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP-RSA", GNUTLS_KX_SRP_RSA, 1); reset_buffers(); gnutls_global_deinit(); } diff --git a/tests/resume-dtls.c b/tests/resume-dtls.c index 9e6327c7fe..b5b214313a 100644 --- a/tests/resume-dtls.c +++ b/tests/resume-dtls.c @@ -363,7 +363,6 @@ static void server(int sds[], struct params_res *params) } gnutls_free(session_ticket_key.data); - session_ticket_key.data = NULL; gnutls_anon_free_server_credentials(anoncred); if (debug) diff --git a/tests/resume-lifetime.c b/tests/resume-lifetime.c new file mode 100644 index 0000000000..3e72039327 --- /dev/null +++ b/tests/resume-lifetime.c @@ -0,0 +1,282 @@ +/* + * Copyright (C) 2016-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "virt-time.h" +#include "eagain-common.h" +#include "cert-common.h" + +/* This test checks whether the lifetime of a resumed session can + * be extended past the designated one */ + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +struct hsk_st { + unsigned sent_nst; /* whether the new session ticket was sent */ + unsigned sent_psk; /* whether the PSK extension was sent */ + unsigned sleep_at_finished; /* how long to wait at finished message reception */ + +}; + +static int ext_hook_func(void *ctx, unsigned tls_id, + const unsigned char *data, unsigned size) +{ + if (tls_id == 41) { + struct hsk_st *h = ctx; + h->sent_psk = 1; + } + return 0; +} + +static int handshake_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + struct hsk_st *h = gnutls_session_get_ptr(session); + + if (htype == GNUTLS_HANDSHAKE_FINISHED && !incoming) { + if (h->sleep_at_finished) + virt_sec_sleep(h->sleep_at_finished); + return 0; + } else if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO) { + gnutls_ext_raw_parse(h, ext_hook_func, msg, + GNUTLS_EXT_RAW_FLAG_TLS_CLIENT_HELLO); + } + + if (htype != GNUTLS_HANDSHAKE_NEW_SESSION_TICKET) + return 0; + + if (h) + h->sent_nst = 1; + return 0; +} + +/* Returns true if resumed */ +static unsigned handshake(const char *prio, unsigned t, const gnutls_datum_t *sdata, + gnutls_datum_t *ndata, + gnutls_datum_t *skey, + struct hsk_st *h) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + char buf[128]; + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&server, GNUTLS_SERVER)>=0); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + assert(gnutls_priority_set_direct(server, prio, NULL)>=0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + gnutls_session_set_ptr(server, h); + + gnutls_db_set_cache_expiration(server, t); + assert(gnutls_session_ticket_enable_server(server, skey) >= 0); + + gnutls_handshake_set_hook_function(server, -1, + GNUTLS_HOOK_POST, + handshake_callback); + + assert(gnutls_certificate_allocate_credentials(&clientx509cred)>=0); + assert(gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM)>=0); + assert(gnutls_init(&client, GNUTLS_CLIENT)>=0); + + assert(gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred)>=0); + + assert(gnutls_priority_set_direct(client, prio, NULL)>=0); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + if (sdata) { + assert(gnutls_session_set_data(client, sdata->data, sdata->size)>=0); + } + + memset(buf, 0, sizeof(buf)); + ret = gnutls_session_set_data(client, buf, sizeof(buf)); + if (ret != GNUTLS_E_DB_ERROR) { + fail("unexpected error: %s\n", gnutls_strerror(ret)); + } + + HANDSHAKE(client, server); + + gnutls_record_recv(client, buf, sizeof(buf)); + + if (ndata) { + ret = gnutls_session_get_data2(client, ndata); + if (ret < 0) { + fail("unexpected error: %s\n", gnutls_strerror(ret)); + } + } + + ret = gnutls_session_is_resumed(client); + + gnutls_deinit(server); + gnutls_deinit(client); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + reset_buffers(); + return ret; +} + +/* @t is the lifetime of the first ticket, @s is the + * time to wait before asking for a ticket the last try */ +static void start(const char *name, const char *prio, unsigned t, unsigned s) +{ + gnutls_datum_t sdata, ndata, skey; + unsigned ret; + struct hsk_st h; + memset(&h, 0, sizeof(h)); + + success("trying %s\n", name); + + assert(gnutls_session_ticket_key_generate(&skey)>=0); + + /* step1: get a fresh ticket */ + ret = handshake(prio, t, NULL, &sdata, &skey, &h); + assert(ret == 0); + assert(h.sent_nst != 0); + memset(&h, 0, sizeof(h)); + + if (debug) + success("completed first handshake\n"); + + if (s) + virt_sec_sleep(s); + + /* step2: get a ticket from the resumed session of the first */ + ret = handshake(prio, t, &sdata, &ndata, &skey, &h); + assert(ret != 0); + assert(h.sent_nst != 0); + memset(&h, 0, sizeof(h)); + + /* wait until the ticket we got in step1 is invalid, although + * the ticket we got in step2 is valid */ + + if (debug) + success("completed second handshake\n"); + + if (s) + virt_sec_sleep(s); + + ret = handshake(prio, t, &ndata, NULL, &skey, &h); + + if (s) { + if (ret != 0) + fail("server resumed session even if ticket expired!\n"); + + /* we shouldn't have sent the PSK extension as the ticket was expired */ + assert(h.sent_psk == 0); + } + + gnutls_free(ndata.data); + gnutls_free(sdata.data); + gnutls_free(skey.data); +} + +/* @t is the lifetime of the first ticket, @s is the + * time to wait before asking for a ticket the last try + * + * This makes the ticket to expire during handshake (after resumtion), + * but before the client receives the new session ticket. In that + * case the server shouldn't send a session ticket. + */ +static void start2(const char *name, const char *prio, unsigned t, unsigned s) +{ + gnutls_datum_t sdata, ndata, skey; + unsigned ret; + struct hsk_st h; + memset(&h, 0, sizeof(h)); + + success("trying %s\n", name); + + assert(gnutls_session_ticket_key_generate(&skey)>=0); + + /* step1: get a fresh ticket */ + ret = handshake(prio, t, NULL, &sdata, &skey, &h); + assert(ret == 0); + assert(h.sent_nst != 0); + memset(&h, 0, sizeof(h)); + + /* step2: get a ticket from the resumed session of the first */ + ret = handshake(prio, t, &sdata, &ndata, &skey, &h); + assert(ret != 0); + assert(h.sent_nst != 0); + memset(&h, 0, sizeof(h)); + + /* wait until the ticket we got in step1 is invalid, although + * the ticket we got in step2 is valid */ + + if (s) + h.sleep_at_finished = s; + + ret = handshake(prio, t, &ndata, NULL, &skey, &h); + + assert(ret != 0); + if (h.sent_nst != 0) + fail("server sent session ticket even if ticket expired!\n"); + + gnutls_free(ndata.data); + gnutls_free(sdata.data); + gnutls_free(skey.data); +} + +void doit(void) +{ + virt_time_init(); + + start("TLS1.3 sanity", "NORMAL:-VERS-ALL:+VERS-TLS1.3", 64, 0); + start("TLS1.3 ticket extension", "NORMAL:-VERS-ALL:+VERS-TLS1.3", 5, 3); + start2("TLS1.3 ticket extension - expires at handshake", "NORMAL:-VERS-ALL:+VERS-TLS1.3", 2, 3); +} diff --git a/tests/resume-with-false-start.c b/tests/resume-with-false-start.c index b0093b09e0..69307eb079 100644 --- a/tests/resume-with-false-start.c +++ b/tests/resume-with-false-start.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include "utils.h" #include "eagain-common.h" @@ -52,7 +53,6 @@ static time_t mytime(time_t * t) void doit(void) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -105,7 +105,7 @@ void doit(void) if (ret < 0) exit(1); - gnutls_set_default_priority(client); + assert(gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL)>=0); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -146,11 +146,4 @@ void doit(void) gnutls_certificate_free_credentials(clientx509cred); gnutls_global_deinit(); - - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } } diff --git a/tests/resume-with-previous-stek.c b/tests/resume-with-previous-stek.c new file mode 100644 index 0000000000..f212b188b9 --- /dev/null +++ b/tests/resume-with-previous-stek.c @@ -0,0 +1,255 @@ +/* + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * Author: Ander Juaristi + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) +int main(int argc, char **argv) +{ + exit(77); +} +#else + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "virt-time.h" + +#define TICKET_EXPIRATION 1 /* seconds */ +#define TICKET_ROTATION_PERIOD 3 /* seconds */ + +unsigned num_stek_rotations; + +static void stek_rotation_callback(const gnutls_datum_t *prev_key, + const gnutls_datum_t *new_key, + uint64_t t) +{ + num_stek_rotations++; + success("STEK was rotated!\n"); +} + +static int client_handshake(gnutls_session_t session, gnutls_datum_t *session_data, + int resume) +{ + int ret; + + if (resume) { + if ((ret = gnutls_session_set_data(session, + session_data->data, + session_data->size)) < 0) { + fail("client: Could not get session data\n"); + } + } + + do { + ret = gnutls_handshake(session); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fail("client: Handshake failed\n"); + } else { + success("client: Handshake was completed\n"); + } + + if (gnutls_session_is_resumed(session)) + fail("client: Session was resumed (but should not)\n"); + else + success("client: Success: Session was NOT resumed\n"); + + if (!resume) { + if ((ret = gnutls_session_get_data2(session, session_data)) < 0) { + fail("client: Could not get session data\n"); + } + } + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_RDWR); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + return 0; +} + +static void client(int fd, int *resume, unsigned rounds, const char *prio) +{ + gnutls_session_t session; + gnutls_datum_t session_data; + gnutls_certificate_credentials_t clientx509cred = NULL; + + for (unsigned i = 0; i < rounds; i++) { + assert(gnutls_certificate_allocate_credentials(&clientx509cred)>=0); + + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + + gnutls_transport_set_int(session, fd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* Perform TLS handshake and obtain session ticket */ + if (client_handshake(session, &session_data, + resume[i]) < 0) + return; + + if (clientx509cred) { + gnutls_certificate_free_credentials(clientx509cred); + clientx509cred = NULL; + } + + gnutls_deinit(session); + } +} + +typedef void (* gnutls_stek_rotation_callback_t) (const gnutls_datum_t *prev_key, + const gnutls_datum_t *new_key, + uint64_t t); +void _gnutls_set_session_ticket_key_rotation_callback(gnutls_session_t session, + gnutls_stek_rotation_callback_t cb); + +static void server(int fd, unsigned rounds, const char *prio) +{ + int retval; + gnutls_session_t session; + gnutls_datum_t session_ticket_key = { NULL, 0 }; + gnutls_certificate_credentials_t serverx509cred = NULL; + + virt_time_init(); + + if (gnutls_session_ticket_key_generate(&session_ticket_key) < 0) { + fail("server: Could not generate session ticket key\n"); + } + + for (unsigned i = 0; i < rounds; i++) { + assert(gnutls_init(&session, GNUTLS_SERVER)>=0); + + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + retval = gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + if (retval < 0) + fail("error setting key: %s\n", gnutls_strerror(retval)); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, serverx509cred); + + gnutls_db_set_cache_expiration(session, TICKET_EXPIRATION); + _gnutls_set_session_ticket_key_rotation_callback(session, stek_rotation_callback); + + retval = gnutls_session_ticket_enable_server(session, + &session_ticket_key); + if (retval != GNUTLS_E_SUCCESS) { + fail("server: Could not enable session tickets: %s\n", gnutls_strerror(retval)); + } + + gnutls_transport_set_int(session, fd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + virt_sec_sleep(TICKET_ROTATION_PERIOD-1); + + do { + retval = gnutls_handshake(session); + } while (retval == GNUTLS_E_AGAIN || retval == GNUTLS_E_INTERRUPTED); + + if (retval < 0) { + fail("server: Handshake failed: %s\n", gnutls_strerror(retval)); + } else { + success("server: Handshake was completed\n"); + } + + if (gnutls_session_is_resumed(session)) + fail("server: Session was resumed (but should not)\n"); + else + success("server: Success: Session was NOT resumed\n"); + + gnutls_bye(session, GNUTLS_SHUT_RDWR); + gnutls_deinit(session); + gnutls_certificate_free_credentials(serverx509cred); + serverx509cred = NULL; + } + + if (num_stek_rotations != 2) + fail("STEK should be rotated exactly twice (%d)!\n", num_stek_rotations); + + if (serverx509cred) + gnutls_certificate_free_credentials(serverx509cred); + gnutls_free(session_ticket_key.data); +} + +static void run(const char *name, const char *prio, int resume[], int rounds) +{ + pid_t child; + int retval, sockets[2], status = 0; + + success("\ntesting %s\n\n", name); + + retval = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (retval == -1) { + perror("socketpair"); + fail("socketpair failed"); + return; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork failed"); + return; + } + + if (child) { + /* We are the parent */ + server(sockets[0], rounds, prio); + waitpid(child, &status, 0); + check_wait_status(status); + } else { + /* We are the child */ + client(sockets[1], resume, rounds, prio); + exit(0); + } +} + +void doit(void) +{ + int resume[] = { 0, 1, 0 }; + + signal(SIGCHLD, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + + num_stek_rotations = 0; + run("tls1.2 resumption", "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0", resume, 3); + + num_stek_rotations = 0; + run("tls1.3 resumption", "NORMAL:-VERS-ALL:+VERS-TLS1.3", resume, 3); +} + +#endif + diff --git a/tests/resume-with-record-size-limit.c b/tests/resume-with-record-size-limit.c new file mode 100644 index 0000000000..58f71c39af --- /dev/null +++ b/tests/resume-with-record-size-limit.c @@ -0,0 +1,424 @@ +/* + * Copyright (C) 2004-2016 Free Software Foundation, Inc. + * Copyright (C) 2013 Adam Sampson + * Copyright (C) 2016-2019 Red Hat, Inc. + * + * Author: Simon Josefsson, Nikos Mavrogiannopoulos, Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* Parts copied from GnuTLS example programs. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif +#include +#include +#include +#include +#if !defined(_WIN32) +#include +#endif +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "virt-time.h" + +#define SKIP8(pos, total) { \ + uint8_t _s; \ + if (pos+1 > total) fail("error\n"); \ + _s = msg->data[pos]; \ + if ((size_t)(pos+1+_s) > total) fail("error\n"); \ + pos += 1+_s; \ + } + +pid_t child; + +/* A very basic TLS client, with anonymous authentication. + */ + +#define SESSIONS 2 +#define MAX_BUF 5*1024 +#define MSG "Hello TLS" + +/* 2^13, which is not supported by max_fragment_length */ +#define MAX_DATA_SIZE 8192 + +#define HANDSHAKE_SESSION_ID_POS (2+32) + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s |<%d>| %s", child ? "server" : "client", level, + str); +} + +static int ext_callback(void *ctx, unsigned tls_id, const unsigned char *data, unsigned size) +{ + if (tls_id == 28) { /* record size limit */ + uint16_t max_data_size; + + assert(size == 2); + max_data_size = (data[0] << 8) | data[1]; + if (max_data_size == MAX_DATA_SIZE) + fail("record_size_limit is not reset: %u == %u\n", + max_data_size, MAX_DATA_SIZE); + } + return 0; +} + +static int handshake_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + int ret; + unsigned pos; + gnutls_datum_t mmsg; + + if (!post) + return 0; + + switch (htype) { + case GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS: + ret = gnutls_ext_raw_parse(NULL, ext_callback, msg, 0); + assert(ret >= 0); + break; + case GNUTLS_HANDSHAKE_SERVER_HELLO: + assert(msg->size >= HANDSHAKE_SESSION_ID_POS); + pos = HANDSHAKE_SESSION_ID_POS; + SKIP8(pos, msg->size); + pos += 3; + + mmsg.data = &msg->data[pos]; + mmsg.size = msg->size - pos; + ret = gnutls_ext_raw_parse(NULL, ext_callback, &mmsg, 0); + assert(ret >= 0); + break; + default: + break; + } + return 0; +} + +static void client(int sds[], const char *prio) +{ + int ret, ii; + gnutls_session_t session; + char buffer[MAX_BUF + 1]; + gnutls_certificate_credentials_t clientx509cred; + + /* variables used in session resuming + */ + int t; + gnutls_datum_t session_data = {NULL, 0}; + + if (debug) { + gnutls_global_set_log_function(tls_log_func); + gnutls_global_set_log_level(4); + } + + gnutls_certificate_allocate_credentials(&clientx509cred); + + assert(gnutls_certificate_set_x509_key_mem(clientx509cred, + &cli_cert, &cli_key, + GNUTLS_X509_FMT_PEM) >= 0); + + for (t = 0; t < SESSIONS; t++) { + int sd = sds[t]; + + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); + + ret = gnutls_priority_set_direct(session, prio, NULL); + if (ret < 0) { + fail("prio: %s\n", gnutls_strerror(ret)); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, clientx509cred); + + if (t == 0) { + ret = gnutls_record_set_max_size(session, MAX_DATA_SIZE); + if (ret < 0) + fail("gnutls_set_max_size: %s\n", gnutls_strerror(ret)); + } + + if (t > 0) { + /* if this is not the first time we connect */ + gnutls_session_set_data(session, session_data.data, + session_data.size); + + gnutls_handshake_set_hook_function(session, + GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_POST, + handshake_callback); + } + + gnutls_transport_set_int(session, sd); + + /* Perform the TLS handshake + */ + gnutls_handshake_set_timeout(session, 20 * 1000); + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + break; + } else { + if (debug) + success + ("client: Handshake was completed\n"); + } + + if (t == 0) { + /* get the session data size */ + ret = + gnutls_session_get_data2(session, + &session_data); + if (ret < 0) + fail("Getting resume data failed\n"); + + } else { /* the second time we connect */ + /* check if we actually resumed the previous session */ + if (gnutls_session_is_resumed(session) == 0) { + fail("- Previous session was resumed but NOT expected\n"); + } + } + + gnutls_record_send(session, MSG, strlen(MSG)); + + do { + ret = gnutls_record_recv(session, buffer, MAX_BUF); + } while (ret == GNUTLS_E_AGAIN); + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + break; + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + } + + if (debug) { + printf("- Received %d bytes: ", ret); + for (ii = 0; ii < ret; ii++) { + fputc(buffer[ii], stdout); + } + fputs("\n", stdout); + } + + gnutls_bye(session, GNUTLS_SHUT_RDWR); + + close(sd); + + gnutls_deinit(session); + } + gnutls_free(session_data.data); + + gnutls_certificate_free_credentials(clientx509cred); +} + +/* These are global */ +static gnutls_datum_t session_ticket_key = { NULL, 0 }; + + +gnutls_certificate_credentials_t serverx509cred; + +static void global_stop(void) +{ + if (debug) + success("global stop\n"); + + gnutls_certificate_free_credentials(serverx509cred); +} + +static void server(int sds[], const char *prio) +{ + int t; + int ret; + gnutls_session_t session; + char buffer[MAX_BUF + 1]; + unsigned iflags = GNUTLS_SERVER; + + virt_time_init(); + + /* this must be called once in the program, it is mostly for the server. + */ + if (debug) { + gnutls_global_set_log_function(tls_log_func); + gnutls_global_set_log_level(4); + } + + gnutls_certificate_allocate_credentials(&serverx509cred); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, GNUTLS_X509_FMT_PEM) >= 0); + + gnutls_session_ticket_key_generate(&session_ticket_key); + + for (t = 0; t < SESSIONS; t++) { + int sd = sds[t]; + + assert(gnutls_init(&session, iflags) >= 0); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); + + + gnutls_session_ticket_enable_server(session, + &session_ticket_key); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, serverx509cred); + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(sd); + gnutls_deinit(session); + kill(child, SIGTERM); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + return; + } + if (debug) + success("server: Handshake was completed\n"); + + if (t > 0) { + ret = gnutls_session_is_resumed(session); + if (ret == 0) { + fail("server: session_is_resumed error (%d)\n", t); + } + } + + /* see the Getting peer's information example */ + /* print_info(session); */ + + for (;;) { + memset(buffer, 0, MAX_BUF + 1); + ret = gnutls_record_recv(session, buffer, MAX_BUF); + + if (ret == 0) { + if (debug) + success + ("server: Peer has closed the GnuTLS connection\n"); + break; + } else if (ret < 0) { + kill(child, SIGTERM); + fail("server: Received corrupted data(%d). Closing...\n", ret); + break; + } else if (ret > 0) { + /* echo data back to the client + */ + gnutls_record_send(session, buffer, + strlen(buffer)); + } + } + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sd); + + gnutls_deinit(session); + } + + gnutls_free(session_ticket_key.data); + session_ticket_key.data = NULL; + + if (debug) + success("server: finished\n"); +} + +static void run(const char *prio) +{ + int client_sds[SESSIONS], server_sds[SESSIONS]; + int j; + int err; + + signal(SIGCHLD, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + + for (j = 0; j < SESSIONS; j++) { + int sockets[2]; + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + server_sds[j] = sockets[0]; + client_sds[j] = sockets[1]; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork\n"); + return; + } + + if (child) { + int status = 0; + /* parent */ + for (j = 0; j < SESSIONS; j++) + close(client_sds[j]); + server(server_sds, prio); + + waitpid(child, &status, 0); + check_wait_status(status); + global_stop(); + } else { + for (j = 0; j < SESSIONS; j++) + close(server_sds[j]); + client(client_sds, prio); + exit(0); + } +} + +void doit(void) +{ + run("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + run("NORMAL:-VERS-ALL:+VERS-TLS1.3"); +} + +#endif /* _WIN32 */ diff --git a/tests/resume-with-stek-expiration.c b/tests/resume-with-stek-expiration.c new file mode 100644 index 0000000000..80445d64d0 --- /dev/null +++ b/tests/resume-with-stek-expiration.c @@ -0,0 +1,326 @@ +/* + * Copyright (C) 2018 Free Software Foundation, Inc. + * + * Author: Ander Juaristi + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) +int main(int argc, char **argv) +{ + exit(77); +} +#else + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "virt-time.h" + +/* + * This will set the following values: + * + * - Ticket key expiration: 1 second. + * - Session ticket key rotation period: 3 seconds. + */ +#define TICKET_EXPIRATION 1 /* seconds */ + +unsigned num_stek_rotations; + +static void stek_rotation_callback(const gnutls_datum_t *prev_key, + const gnutls_datum_t *new_key, + uint64_t t) +{ + num_stek_rotations++; + success("STEK was rotated!\n"); +} + +typedef void (* gnutls_stek_rotation_callback_t) (const gnutls_datum_t *prev_key, + const gnutls_datum_t *new_key, + uint64_t t); +void _gnutls_set_session_ticket_key_rotation_callback(gnutls_session_t session, + gnutls_stek_rotation_callback_t cb); + +static int handshake(gnutls_session_t session, gnutls_datum_t *session_data, + int resumption_should_succeed) +{ + int ret; + + do { + ret = gnutls_handshake(session); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + gnutls_perror(ret); + fail("client: Handshake failed\n"); + } else { + success("client: Handshake was completed\n"); + } + + if (gnutls_session_is_resumed(session)) { + if (!resumption_should_succeed) + fail("client: Session was resumed (but should not)\n"); + else + success("client: Success: Session was resumed\n"); + } else { + if (resumption_should_succeed) + fail("client: Session was not resumed (but should)\n"); + else + success("client: Success: Session was NOT resumed\n"); + } + + ret = gnutls_session_get_data2(session, session_data); + if (ret < 0) { + gnutls_perror(ret); + fail("client: Could not get session data\n"); + } + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_RDWR); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + return 0; +} + +static int resume_and_close(gnutls_session_t session, gnutls_datum_t *session_data, + int resumption_should_succeed) +{ + int ret; + + ret = gnutls_session_set_data(session, session_data->data, session_data->size); + if (ret < 0) { + gnutls_perror(ret); + fail("client: Could not get session data\n"); + } + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && !gnutls_error_is_fatal(ret)); + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + success("client: Handshake was completed\n"); + } + + if (gnutls_session_is_resumed(session)) { + if (!resumption_should_succeed) + fail("client: Session was resumed (but should not)\n"); + else + success("client: Success: Session was resumed\n"); + } else { + if (resumption_should_succeed) + fail("client: Session was not resumed (but should)\n"); + else + success("client: Success: Session was NOT resumed\n"); + } + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_RDWR); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + return 0; +} + +static void client(int fd, int *resumption_should_succeed, unsigned num_sessions, const char *prio) +{ + gnutls_session_t session; + gnutls_datum_t session_data; + gnutls_certificate_credentials_t clientx509cred = NULL; + + gnutls_certificate_allocate_credentials(&clientx509cred); + + /* Initialize TLS layer */ + gnutls_init(&session, GNUTLS_CLIENT); + gnutls_priority_set_direct(session, prio, NULL); + + /* put the anonymous credentials to the current session */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + + gnutls_transport_set_int(session, fd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + if (handshake(session, &session_data, resumption_should_succeed[0]) < 0) + return; + + if (clientx509cred) + gnutls_certificate_free_credentials(clientx509cred); + gnutls_deinit(session); + + for (unsigned i = 1; i < num_sessions; i++) { + assert(gnutls_certificate_allocate_credentials(&clientx509cred)>=0); + + /* Initialize TLS layer */ + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + /* put the anonymous credentials to the current session */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + + gnutls_transport_set_int(session, fd); + + if (resume_and_close(session, &session_data, resumption_should_succeed[i]) < 0) + return; + + if (clientx509cred) + gnutls_certificate_free_credentials(clientx509cred); + gnutls_deinit(session); + } +} + +static void server(int fd, int *resumption_should_succeed, unsigned num_sessions, const char *prio) +{ + int retval; + gnutls_session_t session; + gnutls_certificate_credentials_t serverx509cred; + gnutls_datum_t session_ticket_key = { NULL, 0 }; + + virt_time_init(); + + if (gnutls_session_ticket_key_generate(&session_ticket_key) < 0) + fail("server: Could not generate session ticket key\n"); + + for (unsigned i = 0; i < num_sessions; i++) { + if ((retval = gnutls_init(&session, GNUTLS_SERVER)) < 0) { + gnutls_perror(retval); + fail("gnutls_init() failed\n"); + } + + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, serverx509cred); + + retval = gnutls_session_ticket_enable_server(session, &session_ticket_key); + if (retval != GNUTLS_E_SUCCESS) { + gnutls_perror(retval); + fail("server: Could not enable session tickets\n"); + } + + + gnutls_db_set_cache_expiration(session, TICKET_EXPIRATION); + + _gnutls_set_session_ticket_key_rotation_callback(session, stek_rotation_callback); + + gnutls_transport_set_int(session, fd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + do { + retval = gnutls_handshake(session); + } while(retval == GNUTLS_E_AGAIN || retval == GNUTLS_E_INTERRUPTED); + + if (retval < 0) { + fail("server: Handshake failed: %s\n", gnutls_strerror(retval)); + } else { + success("server: Handshake was completed\n"); + } + + if (gnutls_session_is_resumed(session)) { + if (!resumption_should_succeed[i]) + fail("server: Session was resumed (but should not)\n"); + else + success("server: Success: Session was resumed\n"); + } else { + if (resumption_should_succeed[i]) + fail("server: Session was not resumed (but should)\n"); + else + success("server: Success: Session was NOT resumed\n"); + } + + gnutls_bye(session, GNUTLS_SHUT_RDWR); + gnutls_deinit(session); + gnutls_certificate_free_credentials(serverx509cred); + serverx509cred = NULL; + + if (i != 0) + virt_sec_sleep(TICKET_EXPIRATION); + } + + if (num_stek_rotations != 4) + fail("STEK should be rotated exactly 4 times!\n"); + + if (serverx509cred) + gnutls_certificate_free_credentials(serverx509cred); + gnutls_free(session_ticket_key.data); +} + +static void run(const char *name, const char *prio, int resumption_should_succeed[], int rounds) +{ + pid_t child; + int retval, sockets[2], status = 0; + + success("\ntesting %s\n\n", name); + + retval = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (retval == -1) { + perror("socketpair"); + fail("socketpair failed"); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork failed"); + } + + if (child) { + /* We are the parent */ + server(sockets[0], resumption_should_succeed, rounds, prio); + waitpid(child, &status, 0); + check_wait_status(status); + } else { + /* We are the child */ + client(sockets[1], resumption_should_succeed, rounds, prio); + exit(0); + } +} + +void doit(void) +{ + int resumption_should_succeed[] = { 0, 1, 1, 0 }; + + signal(SIGCHLD, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + + num_stek_rotations = 0; + run("tls1.2 resumption", "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0", + resumption_should_succeed, 4); + + num_stek_rotations = 0; + run("tls1.3 resumption", "NORMAL:-VERS-ALL:+VERS-TLS1.3", + resumption_should_succeed, 4); +} + +#endif diff --git a/tests/resume.c b/tests/resume.c index 1bcd3b8d04..04309fba6a 100644 --- a/tests/resume.c +++ b/tests/resume.c @@ -1,7 +1,7 @@ /* * Copyright (C) 2004-2016 Free Software Foundation, Inc. * Copyright (C) 2013 Adam Sampson - * Copyright (C) 2016 Red Hat, Inc. + * Copyright (C) 2016-2018 Red Hat, Inc. * * Author: Simon Josefsson, Nikos Mavrogiannopoulos * @@ -17,9 +17,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ /* Parts copied from GnuTLS example programs. */ @@ -41,6 +40,9 @@ int main(int argc, char **argv) #else +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif #include #include #include @@ -51,8 +53,10 @@ int main(int argc, char **argv) #include #include #include +#include #include "utils.h" #include "cert-common.h" +#include "virt-time.h" static void wrap_db_init(void); static void wrap_db_deinit(void); @@ -69,20 +73,35 @@ struct params_res { int enable_session_ticket_server; int enable_session_ticket_client; int expect_resume; + int call_post_client_hello; + int client_cert; int first_no_ext_master; int second_no_ext_master; int try_alpn; int try_resumed_data; + int try_diff_sni; + int try_sni; + int expire_ticket; + int change_ciphersuite; + int early_start; + int no_early_start; }; pid_t child; struct params_res resume_tests[] = { +#ifndef TLS13 {.desc = "try to resume from db", .enable_db = 1, .enable_session_ticket_server = 0, .enable_session_ticket_client = 0, .expect_resume = 1}, + {.desc = "try to resume from db with post_client_hello", + .enable_db = 1, + .enable_session_ticket_server = 0, + .enable_session_ticket_client = 0, + .call_post_client_hello = 1, + .expect_resume = 1}, {.desc = "try to resume from db using resumed session's data", .enable_db = 1, .enable_session_ticket_server = 0, @@ -109,26 +128,73 @@ struct params_res resume_tests[] = { .expect_resume = 0, .first_no_ext_master = 1, .second_no_ext_master = 0}, - {.desc = "try to resume from session ticket", - .enable_db = 0, +#endif +#if defined(TLS13) + /* only makes sense under TLS1.3 as negotiation involves a new + * handshake with different parameters */ + {.desc = "try to resume from session ticket (different cipher order)", + .enable_db = 0, + .enable_session_ticket_server = 1, + .enable_session_ticket_client = 1, + .change_ciphersuite = 1, + .expect_resume = 1}, + {.desc = "try to resume from session ticket with post_client_hello", + .enable_db = 0, + .enable_session_ticket_server = 1, + .enable_session_ticket_client = 1, + .call_post_client_hello = 1, + .expect_resume = 1}, +#endif +#if defined(TLS13) && !defined(USE_PSK) + {.desc = "try to resume from session ticket (early start)", + .enable_db = 0, .enable_session_ticket_server = 1, .enable_session_ticket_client = 1, + .early_start = 1, .expect_resume = 1}, - {.desc = "try to resume from session ticket using resumed session's data", - .enable_db = 0, +#endif +#if defined(TLS13) && defined(USE_PSK) + /* early start should no happen on PSK. */ + {.desc = "try to resume from session ticket (early start)", + .enable_db = 0, + .enable_session_ticket_server = 1, + .enable_session_ticket_client = 1, + .no_early_start = 1, + .expect_resume = 1}, +#endif + {.desc = "try to resume from session ticket", + .enable_db = 0, + .enable_session_ticket_server = 1, + .enable_session_ticket_client = 1, + .expect_resume = 1}, + {.desc = "try to resume from session ticket (client cert)", + .enable_db = 0, + .client_cert = 1, + .enable_session_ticket_server = 1, + .enable_session_ticket_client = 1, + .expect_resume = 1}, + {.desc = "try to resume from session ticket (expired)", + .enable_db = 0, + .enable_session_ticket_server = 1, + .enable_session_ticket_client = 1, + .expire_ticket = 1, + .expect_resume = 0}, + {.desc = "try to resume from session ticket using resumed session's data", + .enable_db = 0, .enable_session_ticket_server = 1, .enable_session_ticket_client = 1, .try_resumed_data = 1, .expect_resume = 1}, - {.desc = "try to resume from session ticket (ext master secret -> none)", - .enable_db = 0, +#ifndef TLS13 + {.desc = "try to resume from session ticket (ext master secret -> none)", + .enable_db = 0, .enable_session_ticket_server = 1, .enable_session_ticket_client = 1, .expect_resume = 0, .first_no_ext_master = 0, .second_no_ext_master = 1}, - {.desc = "try to resume from session ticket (none -> ext master secret)", - .enable_db = 0, + {.desc = "try to resume from session ticket (none -> ext master secret)", + .enable_db = 0, .enable_session_ticket_server = 1, .enable_session_ticket_client = 1, .expect_resume = 0, @@ -149,6 +215,27 @@ struct params_res resume_tests[] = { .enable_session_ticket_server = 1, .enable_session_ticket_client = 1, .expect_resume = 1}, + {.desc = "try to resume from db and different SNI", + .enable_db = 1, + .try_sni = 1, + .try_diff_sni = 1, + .expect_resume = 0}, + {.desc = "try to resume with ticket and different SNI", + .enable_session_ticket_server = 1, + .enable_session_ticket_client = 1, + .try_sni = 1, + .try_diff_sni = 1, + .expect_resume = 0}, + {.desc = "try to resume from db and same SNI", + .enable_db = 1, + .try_sni = 1, + .expect_resume = 1}, +#endif + {.desc = "try to resume with ticket and same SNI", + .enable_session_ticket_server = 1, + .enable_session_ticket_client = 1, + .try_sni = 1, + .expect_resume = 1}, {NULL, -1} }; @@ -167,11 +254,18 @@ static void tls_log_func(int level, const char *str) str); } +static int post_client_hello_callback(gnutls_session_t session) +{ + /* switches the supported ciphersuites to something compatible */ + assert(gnutls_priority_set_direct(session, gnutls_session_get_ptr(session), NULL) >= 0); + return 0; +} + static int hsk_hook_cb(gnutls_session_t session, unsigned int htype, unsigned post, unsigned int incoming, const gnutls_datum_t *_msg) { unsigned size; - gnutls_datum msg = {_msg->data, _msg->size}; + gnutls_datum_t msg = {_msg->data, _msg->size}; /* skip up to session ID */ if (msg.size <= HANDSHAKE_SESSION_ID_POS+6) { @@ -245,22 +339,131 @@ static void verify_alpn(gnutls_session_t session, struct params_res *params, uns success("ALPN got: %s\n", str); } +static void verify_group(gnutls_session_t session, gnutls_group_t *group, unsigned counter) +{ + if (counter == 0) { + *group = gnutls_group_get(session); + return; + } + + if (gnutls_group_get(session) != *group) { + fail("expected group %s, got group %s\n", gnutls_group_get_name(*group), + gnutls_group_get_name(gnutls_group_get(session))); + } +} + +static void verify_server_params(gnutls_session_t session, unsigned counter, struct params_res *params) +{ + static char id[GNUTLS_MAX_SESSION_ID]; + static size_t id_size = 0; +#if defined(USE_PSK) + const char *username; + username = gnutls_psk_server_get_username(session); + if (counter != 0) { + if (username == NULL) + fail("no username was returned on server side resumption\n"); + + if (strcmp(username, "test") != 0) + fail("wrong username was returned on server side resumption\n"); + } +#endif + + if (counter == 0 && params->early_start) { + if (!(gnutls_session_get_flags(session) & GNUTLS_SFLAGS_EARLY_START)) { + fail("early start did not happen on %d!\n", counter); + } + } + + if (counter > 0) { + if (gnutls_session_resumption_requested(session) == 0) { + fail("client did not request resumption!\n"); + } + } + + if (params->no_early_start) { + if (gnutls_session_get_flags(session) & GNUTLS_SFLAGS_EARLY_START) { + fail("early start did happen on %d but was not expected!\n", counter); + } + } + +#if defined(USE_X509) + unsigned int l; + + if (gnutls_certificate_type_get(session) != GNUTLS_CRT_X509) + fail("did not find the expected X509 certificate type! (%d)\n", gnutls_certificate_type_get(session)); + + if (counter == 0 && gnutls_certificate_get_ours(session) == NULL) + fail("no certificate returned on server side (%s)\n", counter ? "resumed session" : "first session"); + else if (counter != 0 && gnutls_certificate_get_ours(session) != NULL) + fail("certificate was returned on server side (%s)\n", counter ? "resumed session" : "first session"); + + if (params->client_cert) { + if (gnutls_certificate_get_peers(session, &l) == NULL || l < 1) + fail("no client certificate returned on server side (%s)\n", counter ? "resumed session" : "first session"); + } +#endif + + /* verify whether the session ID remains the same between sessions */ + if (counter == 0) { + id_size = sizeof(id); + assert(gnutls_session_get_id(session, id, &id_size) >= 0); + } else { + char id2[GNUTLS_MAX_SESSION_ID]; + size_t id2_size = sizeof(id2); + + if (id_size == 0) + fail("no session ID was set\n"); + + assert(gnutls_session_get_id(session, id2, &id2_size) >= 0); + + if (id_size != id2_size || memcmp(id, id2, id_size) != 0) { + hexprint(id, id_size); + printf("\n"); + hexprint(id2, id2_size); + fail("resumed session ID does not match original\n"); + } + } + + return; +} + +static void verify_client_params(gnutls_session_t session, unsigned counter) +{ +#if defined(USE_X509) + unsigned int l; + if (gnutls_certificate_get_peers(session, &l) == NULL || l < 1) + fail("no server certificate returned on client side (%s)\n", counter ? "resumed session" : "first session"); +#else + return; +#endif +} + +#ifdef TLS12 +# define VERS_STR "+VERS-TLS1.2" +#endif +#ifdef TLS13 +# define VERS_STR "-VERS-ALL:+VERS-TLS1.3" +#endif + static void client(int sds[], struct params_res *params) { int ret, ii; gnutls_session_t session; char buffer[MAX_BUF + 1]; unsigned int ext_master_secret_check = 0; + gnutls_group_t pgroup; char prio_str[256]; + const char *dns_name1 = "example.com"; + const char *dns_name2 = "www.example.com"; #ifdef USE_PSK -# define PRIO_STR "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+PSK:+CURVE-ALL" +# define PRIO_STR "NONE:"VERS_STR":+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+PSK:+CURVE-ALL" const gnutls_datum_t pskkey = { (void *) "DEADBEEF", 8 }; gnutls_psk_client_credentials_t pskcred; #elif defined(USE_ANON) -# define PRIO_STR "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+ANON-DH:+CURVE-ALL" +# define PRIO_STR "NONE:"VERS_STR":+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+ANON-DH:+CURVE-ALL" gnutls_anon_client_credentials_t anoncred; #elif defined(USE_X509) -# define PRIO_STR "NONE:+VERS-TLS-ALL:+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ECDHE-RSA:+RSA:+CURVE-ALL" +# define PRIO_STR "NONE:"VERS_STR":+CIPHER-ALL:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ECDHE-RSA:+RSA:+CURVE-ALL" gnutls_certificate_credentials_t clientx509cred; #endif @@ -273,9 +476,8 @@ static void client(int sds[], struct params_res *params) if (debug) { gnutls_global_set_log_function(tls_log_func); - gnutls_global_set_log_level(2); + gnutls_global_set_log_level(4); } - global_init(); #ifdef USE_PSK gnutls_psk_allocate_client_credentials(&pskcred); @@ -284,15 +486,18 @@ static void client(int sds[], struct params_res *params) gnutls_anon_allocate_client_credentials(&anoncred); #elif defined(USE_X509) gnutls_certificate_allocate_credentials(&clientx509cred); -#endif + if (params->client_cert) { + assert(gnutls_certificate_set_x509_key_mem(clientx509cred, + &cli_cert, &cli_key, + GNUTLS_X509_FMT_PEM) >= 0); + } +#endif for (t = 0; t < SESSIONS; t++) { int sd = sds[t]; - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); snprintf(prio_str, sizeof(prio_str), "%s", PRIO_STR); @@ -311,6 +516,13 @@ static void client(int sds[], struct params_res *params) ext_master_secret_check = 0; } + if (params->change_ciphersuite) { + if (t > 0) + strcat(prio_str, ":-CIPHER-ALL:+AES-256-GCM:+AES-128-GCM"); + else + strcat(prio_str, ":-CIPHER-ALL:+AES-128-GCM"); + } + append_alpn(session, params, t); ret = gnutls_priority_set_direct(session, prio_str, NULL); @@ -332,6 +544,14 @@ static void client(int sds[], struct params_res *params) /* if this is not the first time we connect */ gnutls_session_set_data(session, session_data.data, session_data.size); + if (params->try_diff_sni) + gnutls_server_name_set(session, GNUTLS_NAME_DNS, dns_name1, strlen(dns_name1)); + else if (params->try_sni) + gnutls_server_name_set(session, GNUTLS_NAME_DNS, dns_name2, strlen(dns_name2)); + + } else { + if (params->try_sni) + gnutls_server_name_set(session, GNUTLS_NAME_DNS, dns_name2, strlen(dns_name2)); } if (ext_master_secret_check) @@ -393,13 +613,27 @@ static void client(int sds[], struct params_res *params) ("*** Previous session was NOT resumed (expected)\n"); } } + + if (params->change_ciphersuite) { + /* check if the expected cipher was negotiated */ + if (gnutls_cipher_get(session) != GNUTLS_CIPHER_AES_128_GCM) { + fail("negotiated different cipher: %s\n", + gnutls_cipher_get_name(gnutls_cipher_get(session))); + } + } } verify_alpn(session, params, t); + verify_group(session, &pgroup, t); + + if (params->expect_resume) + verify_client_params(session, t); gnutls_record_send(session, MSG, strlen(MSG)); - ret = gnutls_record_recv(session, buffer, MAX_BUF); + do { + ret = gnutls_record_recv(session, buffer, MAX_BUF); + } while (ret == GNUTLS_E_AGAIN); if (ret == 0) { if (debug) success @@ -436,43 +670,11 @@ static void client(int sds[], struct params_res *params) #endif } -/* This is a sample TLS 1.0 echo server, for anonymous authentication only. - */ - #define DH_BITS 1024 /* These are global */ static gnutls_datum_t session_ticket_key = { NULL, 0 }; -static gnutls_session_t initialize_tls_session(struct params_res *params) -{ - gnutls_session_t session; - - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, - PRIO_STR, - NULL); - - - gnutls_dh_set_prime_bits(session, DH_BITS); - - if (params->enable_db) { - gnutls_db_set_retrieve_function(session, wrap_db_fetch); - gnutls_db_set_remove_function(session, wrap_db_delete); - gnutls_db_set_store_function(session, wrap_db_store); - gnutls_db_set_ptr(session, NULL); - } - - if (params->enable_session_ticket_server) - gnutls_session_ticket_enable_server(session, - &session_ticket_key); - - return session; -} static gnutls_dh_params_t dh_params; @@ -511,8 +713,6 @@ static void global_stop(void) gnutls_certificate_free_credentials(serverx509cred); #endif gnutls_dh_params_deinit(dh_params); - - gnutls_global_deinit(); } #ifdef USE_PSK @@ -534,20 +734,25 @@ pskfunc(gnutls_session_t session, const char *username, static void server(int sds[], struct params_res *params) { - size_t t; + int t; int ret; gnutls_session_t session; char buffer[MAX_BUF + 1]; + gnutls_group_t pgroup; + unsigned iflags = GNUTLS_SERVER; + + virt_time_init(); + + if (params->early_start || params->no_early_start) + iflags |= GNUTLS_ENABLE_EARLY_START; /* this must be called once in the program, it is mostly for the server. */ if (debug) { gnutls_global_set_log_function(tls_log_func); - gnutls_global_set_log_level(2); + gnutls_global_set_log_level(4); } - global_init(); - #ifdef USE_PSK gnutls_psk_allocate_server_credentials(&pskcred); gnutls_psk_set_server_credentials_function(pskcred, pskfunc); @@ -555,8 +760,8 @@ static void server(int sds[], struct params_res *params) gnutls_anon_allocate_server_credentials(&anoncred); #elif defined(USE_X509) gnutls_certificate_allocate_credentials(&serverx509cred); - gnutls_certificate_set_x509_key_mem(serverx509cred, - &server_cert, &server_key, GNUTLS_X509_FMT_PEM); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, GNUTLS_X509_FMT_PEM) >= 0); #endif if (debug) @@ -578,10 +783,42 @@ static void server(int sds[], struct params_res *params) for (t = 0; t < SESSIONS; t++) { int sd = sds[t]; - session = initialize_tls_session(params); + assert(gnutls_init(&session, iflags) >= 0); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + assert(gnutls_priority_set_direct(session, + PRIO_STR, + NULL) >= 0); + + +#if defined(USE_X509) + if (params->client_cert) { + gnutls_certificate_server_set_request(session, + GNUTLS_CERT_REQUIRE); + } +#endif + + gnutls_dh_set_prime_bits(session, DH_BITS); + + if (params->enable_db) { + gnutls_db_set_retrieve_function(session, wrap_db_fetch); + gnutls_db_set_remove_function(session, wrap_db_delete); + gnutls_db_set_store_function(session, wrap_db_store); + gnutls_db_set_ptr(session, NULL); + } + + if (params->enable_session_ticket_server) + gnutls_session_ticket_enable_server(session, + &session_ticket_key); append_alpn(session, params, t); + if (params->expire_ticket) { + gnutls_db_set_cache_expiration(session, 45); + virt_sec_sleep(60); + } #ifdef USE_PSK gnutls_credentials_set(session, GNUTLS_CRD_PSK, pskcred); #elif defined(USE_ANON) @@ -592,6 +829,13 @@ static void server(int sds[], struct params_res *params) gnutls_transport_set_int(session, sd); gnutls_handshake_set_timeout(session, 20 * 1000); + if (params->call_post_client_hello) { + gnutls_session_set_ptr(session, PRIO_STR); + gnutls_handshake_set_post_client_hello_function(session, + post_client_hello_callback); + } + + do { ret = gnutls_handshake(session); } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); @@ -606,7 +850,18 @@ static void server(int sds[], struct params_res *params) if (debug) success("server: Handshake was completed\n"); + if (t > 0 && params->expect_resume) { + ret = gnutls_session_is_resumed(session); + if (ret == 0) { + fail("server: session_is_resumed error (%d)\n", t); + } + } + verify_alpn(session, params, t); + verify_group(session, &pgroup, t); + + if (params->expect_resume) + verify_server_params(session, t, params); /* see the Getting peer's information example */ /* print_info(session); */ @@ -645,7 +900,6 @@ static void server(int sds[], struct params_res *params) } gnutls_free(session_ticket_key.data); - session_ticket_key.data = NULL; if (debug) success("server: finished\n"); @@ -699,7 +953,6 @@ void doit(void) for (j = 0; j < SESSIONS; j++) close(server_sds[j]); client(client_sds, &resume_tests[i]); - gnutls_global_deinit(); exit(0); } } @@ -741,7 +994,7 @@ static void wrap_db_deinit(void) static int wrap_db_store(void *dbf, gnutls_datum_t key, gnutls_datum_t data) { - time_t t, now = time(0); + time_t t, e, now = time(0); #ifdef DEBUG_CACHE if (debug) { @@ -767,6 +1020,13 @@ wrap_db_store(void *dbf, gnutls_datum_t key, gnutls_datum_t data) exit(1); } + /* check the correctness of gnutls_db_check_entry_expire_time() */ + e = gnutls_db_check_entry_expire_time(&data); + if (e < t) { + fail("Time returned by gnutls_db_check_entry_expire_time is bogus\n"); + exit(1); + } + if (cache_db == NULL) return -1; diff --git a/tests/rfc7633-missing.c b/tests/rfc7633-missing.c new file mode 100644 index 0000000000..0101c17bc8 --- /dev/null +++ b/tests/rfc7633-missing.c @@ -0,0 +1,342 @@ +/* + * Copyright (C) 2016 Tim Kosse + * + * Author: Tim Kosse + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +/* This program tests that handshakes fail if the server does not include the + * requested certificate status with the server certificate having + * TLS feature 5 (status request). + * + * See RFC 7633 section 4.2.3.1 paragraph 1 + * + * Remark: Doesn't the MUST in section 4.3.3 para. 1 overrule the SHOULD of 4.2.3.1 para. 1? + */ + +static time_t mytime(time_t * t) +{ + time_t then = 1464610242; + if (t) + *t = then; + + return then; +} + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +static unsigned char server_cert_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIICBzCCAXCgAwIBAgIMVpjt8TL5Io/frpvkMA0GCSqGSIb3DQEBCwUAMCIxIDAe\n" + "BgNVBAMTF0dudVRMUyB0ZXN0IGNlcnRpZmljYXRlMB4XDTE2MDExNTEzMDI0MVoX\n" + "DTMyMDYxOTEzMDI0MVowIjEgMB4GA1UEAxMXR251VExTIHRlc3QgY2VydGlmaWNh\n" + "dGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANe6XK+jDPAuqSdWqlOOqOt/\n" + "gXVMa5i+Suq3HvhLw2rE2g0AuOpMEx82FpPecu/GpF6ybrbKCohVdZCW7aZXvAw7\n" + "dg2XHr3p7H/Tqez7hWSga6BIznd+c5wxE/89yK6lYG7Ztoxamm+2vp9qvafwoDMn\n" + "9bcdkuWWnHNS1p/WyI6xAgMBAAGjQjBAMBEGCCsGAQUFBwEYBAUwAwIBBTAMBgNV\n" + "HRMBAf8EAjAAMB0GA1UdDgQWBBRTSzvcXshETAIgvzlIb0z+zSVSEDANBgkqhkiG\n" + "9w0BAQsFAAOBgQB+VcJuLPL2PMog0HZ8RRbqVvLU5d209ROg3s1oXUBFW8+AV+71\n" + "CsHg9Xx7vqKVwyKGI9ghds1B44lNPxGH2Sk1v2czjKbzwujo9+kLnDS6i0jyrDdn\n" + "um4ivpkwmlUFSQVXvENLwe9gTlIgN4+0I9WLcMTCDtHWkcxMRwCm2BMsXw==\n" + "-----END CERTIFICATE-----\n"; + + +const gnutls_datum_t server_cert = { server_cert_pem, + sizeof(server_cert_pem) +}; + +static unsigned char server_key_pem[] = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" + "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" + "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" + "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" + "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" + "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" + "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" + "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" + "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" + "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" + "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" + "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" + "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" + "-----END RSA PRIVATE KEY-----\n"; + +const gnutls_datum_t server_key = { server_key_pem, + sizeof(server_key_pem) +}; + +static int received = 0; + +static int handshake_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + fail("received status request\n"); + received = 1; + return 0; +} + +#define MAX_BUF 1024 + +static void client(int fd, const char *prio) +{ + int ret; + unsigned int status; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + /* Need to enable anonymous KX specifically. */ + + gnutls_global_set_time_function(mytime); + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + /* Use default priorities */ + gnutls_priority_set_direct(session, prio, NULL); + + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_CERTIFICATE_STATUS, + GNUTLS_HOOK_POST, + handshake_callback); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret == GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM) { + /* success */ + goto end; + } + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + if (received == 1) { + fail("client: received certificate status when we shouldn't.\n"); + } + + ret = gnutls_certificate_verify_peers2(session, &status); + if (ret != GNUTLS_E_SUCCESS) { + fail("client: Peer certificate validation failed: %s\n", gnutls_strerror(ret)); + } + else { + if (status & GNUTLS_CERT_MISSING_OCSP_STATUS) { + success("client: Validation failed with GNUTLS_CERT_MISSING_OCSP_STATUS\n"); + } + else { + fail("client: Validation status does not include GNUTLS_CERT_MISSING_OCSP_STATUS. Status is %d\n", status); + } + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + + +static void server(int fd, const char *prio) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, prio, NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + /* failure is expected here */ + goto end; + } + + if (debug) { + success("server: Handshake was completed\n"); + } + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void ch_handler(int sig) +{ + return; +} + +static void start(const char *name, const char *prio) +{ + pid_t child; + int fd[2]; + int ret, status = 0; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + received = 0; + success("running: %s\n", name); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + client(fd[0], prio); + waitpid(child, &status, 0); + check_wait_status(status); + } else { + close(fd[0]); + server(fd[1], prio); + exit(0); + } + + return; +} + +void doit(void) +{ + start("tls1.2", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2"); + start("tls1.3", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3"); + start("default", "NORMAL"); +} + +#endif /* _WIN32 */ diff --git a/tests/rfc7633-ok.c b/tests/rfc7633-ok.c new file mode 100644 index 0000000000..5959065cf3 --- /dev/null +++ b/tests/rfc7633-ok.c @@ -0,0 +1,347 @@ +/* + * Copyright (C) 2016-2019 Tim Kosse + * Copyright (C) 2019 Nikos Mavrogiannopoulos + * + * Author: Tim Kosse, Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +/* This program tests that handshakes succeed if the server includes the + * requested certificate status with the server certificate having + * TLS feature 5 (status request). + * + * See RFC 7633 + */ + +static time_t mytime(time_t * t) +{ + time_t then = 1559941819; + if (t) + *t = then; + + return then; +} + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +const unsigned char ocsp_resp[] = { + 0x30, 0x82, 0x02, 0x3f, 0x0a, 0x01, 0x00, 0xa0, 0x82, 0x02, 0x38, 0x30, + 0x82, 0x02, 0x34, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, + 0x01, 0x01, 0x04, 0x82, 0x02, 0x25, 0x30, 0x82, 0x02, 0x21, 0x30, 0x81, + 0x8a, 0xa1, 0x11, 0x30, 0x0f, 0x31, 0x0d, 0x30, 0x0b, 0x06, 0x03, 0x55, + 0x04, 0x03, 0x13, 0x04, 0x43, 0x41, 0x2d, 0x33, 0x18, 0x0f, 0x32, 0x30, + 0x31, 0x39, 0x30, 0x36, 0x30, 0x37, 0x32, 0x31, 0x31, 0x35, 0x32, 0x32, + 0x5a, 0x30, 0x64, 0x30, 0x62, 0x30, 0x4d, 0x30, 0x09, 0x06, 0x05, 0x2b, + 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14, 0xb7, 0xca, 0x0f, 0xab, + 0xdc, 0x6f, 0xb8, 0xb0, 0x96, 0x7a, 0x15, 0xac, 0x98, 0x0a, 0x0f, 0x19, + 0xfe, 0xa4, 0x12, 0xde, 0x04, 0x14, 0x1e, 0x85, 0xed, 0x7f, 0x9e, 0x71, + 0xfa, 0x08, 0x9d, 0x37, 0x48, 0x43, 0xa0, 0x12, 0xef, 0xe5, 0xaa, 0xe1, + 0xe3, 0x8a, 0x02, 0x14, 0x60, 0x14, 0x5f, 0x01, 0xcb, 0xe0, 0x05, 0x45, + 0x38, 0x8c, 0x26, 0xfc, 0x5b, 0xcf, 0x6c, 0x41, 0xc3, 0xcb, 0xaa, 0xcc, + 0x80, 0x00, 0x18, 0x0f, 0x32, 0x30, 0x31, 0x39, 0x30, 0x36, 0x30, 0x37, + 0x32, 0x31, 0x31, 0x35, 0x32, 0x32, 0x5a, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, + 0x01, 0x81, 0x00, 0x44, 0xc4, 0x59, 0xab, 0x7b, 0x6e, 0x35, 0x4e, 0x18, + 0x83, 0x02, 0xbd, 0x94, 0x26, 0x50, 0x01, 0xe2, 0xb1, 0x50, 0xdd, 0xca, + 0x61, 0x30, 0xb0, 0x93, 0x18, 0x56, 0xfe, 0x8d, 0x4f, 0xcc, 0x33, 0xc8, + 0x01, 0x1e, 0xac, 0xa1, 0x8e, 0xb0, 0x76, 0x0f, 0x41, 0x38, 0x7d, 0x06, + 0x9b, 0xfe, 0x09, 0x50, 0x6d, 0x86, 0x07, 0x2a, 0x48, 0x6e, 0x6a, 0xb1, + 0x13, 0xf4, 0xc0, 0x0f, 0x7c, 0x7d, 0x89, 0xb9, 0x69, 0xe7, 0x04, 0x2e, + 0xa4, 0x3d, 0xf6, 0xbd, 0x51, 0xbf, 0x52, 0x7d, 0xfb, 0x38, 0x7a, 0xbf, + 0xe6, 0xd7, 0x32, 0x57, 0x36, 0x87, 0xec, 0x91, 0x07, 0x0c, 0xac, 0xb9, + 0x79, 0xe7, 0x79, 0x4e, 0x49, 0x72, 0x1d, 0x16, 0xb6, 0x94, 0xbf, 0xc4, + 0x9f, 0x4e, 0x8b, 0x51, 0x54, 0x73, 0xb4, 0x4d, 0xe7, 0x01, 0x91, 0xcd, + 0x7c, 0xb2, 0x91, 0x4a, 0xc3, 0x4d, 0xc4, 0x4f, 0xa3, 0x42, 0xf1, 0x89, + 0xc7, 0xab, 0x36, 0x11, 0xf0, 0x7c, 0xc6, 0x8f, 0x03, 0x53, 0x85, 0x0c, + 0xfb, 0x30, 0x6b, 0xdd, 0x9e, 0x72, 0xd7, 0x77, 0xe5, 0xea, 0xd3, 0x39, + 0xb5, 0xb8, 0xdd, 0x61, 0xb9, 0xe7, 0x24, 0x9c, 0x85, 0x42, 0xd7, 0x2b, + 0x2e, 0x99, 0xdf, 0xe5, 0x8b, 0x79, 0xe3, 0x6e, 0x56, 0x6e, 0xd6, 0xed, + 0x5f, 0x9b, 0x5f, 0x40, 0x89, 0x17, 0x1a, 0x76, 0xbb, 0x3c, 0x9f, 0x33, + 0x71, 0xc1, 0xc5, 0x2f, 0xf4, 0x69, 0xe5, 0x5f, 0x83, 0xd4, 0x3a, 0x3d, + 0xd7, 0x44, 0xaa, 0xc0, 0x9d, 0xd9, 0xd9, 0x99, 0xec, 0x80, 0x4c, 0x46, + 0x5f, 0x91, 0xf4, 0x09, 0x06, 0xef, 0x37, 0x7c, 0x32, 0x64, 0x67, 0x85, + 0x99, 0xde, 0x9c, 0xce, 0x3e, 0x58, 0x1a, 0x6c, 0x59, 0xc9, 0x60, 0x26, + 0x02, 0xeb, 0x95, 0x52, 0x3e, 0x4f, 0xdd, 0x5f, 0x6c, 0x2d, 0x37, 0xc2, + 0x3b, 0x72, 0x70, 0xab, 0x1d, 0xf5, 0x2a, 0xbe, 0x8c, 0x70, 0x8e, 0xf0, + 0x25, 0x18, 0x68, 0xe5, 0xe9, 0xd1, 0xcf, 0xd8, 0x1f, 0x6c, 0x8e, 0xcf, + 0x18, 0x46, 0x51, 0xb4, 0x69, 0xbb, 0x6f, 0x4f, 0x1e, 0x2a, 0x61, 0x3f, + 0x64, 0x8b, 0x07, 0x7f, 0xc5, 0x80, 0xb9, 0x06, 0xd6, 0xb1, 0x8d, 0x47, + 0x4a, 0x61, 0xd2, 0x3e, 0xb4, 0xa6, 0xab, 0x12, 0xc6, 0x5c, 0x90, 0x9e, + 0x2e, 0x16, 0x2e, 0xd4, 0xfc, 0x4b, 0x08, 0x41, 0x94, 0xaf, 0x1d, 0x6e, + 0x6c, 0x11, 0x5c, 0x88, 0x3d, 0xd9, 0x30, 0x9d, 0x69, 0xf7, 0x45, 0xbe, + 0x5d, 0x1e, 0xd5, 0xe2, 0xf6, 0x38, 0xfa, 0xe1, 0xbf, 0xae, 0x9f, 0x2f, + 0xc6, 0x7b, 0x7b, 0x98, 0x89, 0x05, 0x8d, 0x4c, 0x01, 0xad, 0x61, 0x14, + 0x00, 0xca, 0xa3, 0xed, 0xd0, 0x2c, 0xfe, 0x1b, 0x7e, 0x1d, 0x70, 0x5b, + 0x2e, 0xc2, 0x54, 0xcf, 0x4c, 0x0a, 0xb3, 0x21, 0x58, 0xed, 0x51, 0xe7, + 0xeb, 0x8d, 0xb7 }; + +static int received = 0; + +static int handshake_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, + const gnutls_datum_t * msg) +{ + received = 1; + return 0; +} + +#define MAX_BUF 1024 + +static void client(int fd, const char *prio) +{ + int ret; + unsigned int status; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + gnutls_global_set_time_function(mytime); + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + assert(gnutls_certificate_allocate_credentials(&x509_cred) >= 0); + assert(gnutls_certificate_set_x509_trust_mem(x509_cred, &ca3_cert, GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&session, GNUTLS_CLIENT) >= 0); + + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); + + gnutls_handshake_set_hook_function(session, + GNUTLS_HANDSHAKE_CERTIFICATE_STATUS, + GNUTLS_HOOK_POST, + handshake_callback); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + if (received == 0 + && gnutls_protocol_get_version(session) == GNUTLS_TLS1_2) { + fail("client: did not receive certificate status when we should.\n"); + } + + ret = gnutls_certificate_verify_peers2(session, &status); + if (ret != GNUTLS_E_SUCCESS) { + fail("client: Peer certificate validation failed: %s\n", + gnutls_strerror(ret)); + } else { + if (status) { + gnutls_datum_t tmp; + assert(gnutls_certificate_verification_status_print(status, GNUTLS_CRT_X509, &tmp, 0)>=0); + fail("client: Validation status is not success (%x: %s)\n", + status, (char*)tmp.data); + } + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +static int status_func(gnutls_session_t session, void *ptr, gnutls_datum_t *resp) +{ + resp->data = gnutls_malloc(sizeof(ocsp_resp)); + if (resp->data == NULL) + return -1; + + memcpy(resp->data, ocsp_resp, sizeof(ocsp_resp)); + resp->size = sizeof(ocsp_resp); + return 0; +} + +static void server(int fd, const char *prio) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &server_ca3_tlsfeat_cert, + &server_ca3_key, GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&session, GNUTLS_SERVER) >= 0); + + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); + + gnutls_certificate_set_ocsp_status_request_function(x509_cred, status_func, NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("server: Handshake failed: %s\n", gnutls_strerror(ret)); + } + + if (debug) { + success("server: Handshake was completed\n"); + } + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void ch_handler(int sig) +{ + return; +} + +static void start(const char *name, const char *prio) +{ + pid_t child; + int fd[2]; + int ret, status = 0; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + received = 0; + success("running: %s\n", name); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + client(fd[0], prio); + waitpid(child, &status, 0); + check_wait_status(status); + } else { + close(fd[0]); + server(fd[1], prio); + exit(0); + } + + return; +} + +void doit(void) +{ + start("tls1.2", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2"); + start("tls1.3", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3"); + start("default", "NORMAL"); +} + +#endif /* _WIN32 */ diff --git a/tests/rng-fork.c b/tests/rng-fork.c index 2b3683b7c1..e4a374a82b 100644 --- a/tests/rng-fork.c +++ b/tests/rng-fork.c @@ -16,7 +16,7 @@ * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with GnuTLS. If not, see . + * along with GnuTLS. If not, see . * */ @@ -54,7 +54,6 @@ void doit(void) unsigned char buf1[64]; unsigned char buf2[64]; pid_t pid; - unsigned char *tmp; int ret; FILE *fp; unsigned i; diff --git a/tests/rng-op-key.c b/tests/rng-op-key.c index ac504f8a8d..28e7f71523 100644 --- a/tests/rng-op-key.c +++ b/tests/rng-op-key.c @@ -16,7 +16,7 @@ * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with GnuTLS. If not, see . + * along with GnuTLS. If not, see . * */ diff --git a/tests/rng-op-nonce.c b/tests/rng-op-nonce.c index 130ba642c2..6602fd1383 100644 --- a/tests/rng-op-nonce.c +++ b/tests/rng-op-nonce.c @@ -16,7 +16,7 @@ * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with GnuTLS. If not, see . + * along with GnuTLS. If not, see . * */ diff --git a/tests/rng-op-random.c b/tests/rng-op-random.c index 9931f3aa58..b2c7d79cba 100644 --- a/tests/rng-op-random.c +++ b/tests/rng-op-random.c @@ -16,7 +16,7 @@ * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with GnuTLS. If not, see . + * along with GnuTLS. If not, see . * */ diff --git a/tests/rng-op.c b/tests/rng-op.c index c52bca813b..f9fd7dc478 100644 --- a/tests/rng-op.c +++ b/tests/rng-op.c @@ -17,7 +17,7 @@ * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with GnuTLS. If not, see . + * along with GnuTLS. If not, see . * */ diff --git a/tests/rng-sigint.c b/tests/rng-sigint.c index 6406855fed..76b76f353c 100644 --- a/tests/rng-sigint.c +++ b/tests/rng-sigint.c @@ -16,7 +16,7 @@ * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with GnuTLS. If not, see . + * along with GnuTLS. If not, see . * */ @@ -24,13 +24,14 @@ #include #endif +#include + /* This program verifies whether the low-level random functions can operate * properly, even if interrupted by signals */ #if defined(HAVE_SETITIMER) && (defined(HAVE_LINUX_GETRANDOM) || defined(__linux__)) #include -#include #include #include #include @@ -99,6 +100,8 @@ void doit(void) _rnd_system_entropy_deinit(); } #else +void doit(void); /* prototype to avoid warning with -Wmissing-prototypes */ + void doit(void) { exit(77); diff --git a/tests/rsa-encrypt-decrypt.c b/tests/rsa-encrypt-decrypt.c index 374684388c..95fdc64fb0 100644 --- a/tests/rsa-encrypt-decrypt.c +++ b/tests/rsa-encrypt-decrypt.c @@ -165,6 +165,15 @@ void doit(void) if (memcmp(out2.data, hash_data.data, hash_data.size) != 0) fail("Decrypted data don't match original (2)\n"); + /* try again with fixed length API */ + memset(out2.data, 'A', out2.size); + ret = gnutls_privkey_decrypt_data2(privkey, 0, &out, out2.data, out2.size); + if (ret < 0) + fail("gnutls_privkey_decrypt_data\n"); + + if (memcmp(out2.data, hash_data.data, hash_data.size) != 0) + fail("Decrypted data don't match original (2b)\n"); + gnutls_free(out.data); gnutls_free(out2.data); @@ -183,6 +192,15 @@ void doit(void) if (memcmp(out2.data, raw_data.data, raw_data.size) != 0) fail("Decrypted data don't match original (4)\n"); + /* try again with fixed length API */ + memset(out2.data, 'A', out2.size); + ret = gnutls_privkey_decrypt_data2(privkey, 0, &out, out2.data, out2.size); + if (ret < 0) + fail("gnutls_privkey_decrypt_data\n"); + + if (memcmp(out2.data, raw_data.data, raw_data.size) != 0) + fail("Decrypted data don't match original (4b)\n"); + if (debug) success("ok\n"); diff --git a/tests/rsa-psk-cb.c b/tests/rsa-psk-cb.c index e7223f2d36..6919f7209a 100644 --- a/tests/rsa-psk-cb.c +++ b/tests/rsa-psk-cb.c @@ -22,7 +22,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -/* Parts copied from GnuTLS example programs. */ +/* Tests the RSA-PSK ciphersuites under TLS1.2 */ #ifdef HAVE_CONFIG_H #include @@ -108,8 +108,8 @@ static void client(int sd) gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+RSA-PSK", - NULL); + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA-PSK", + NULL)>=0); /* put the anonymous credentials to the current session */ @@ -228,8 +228,8 @@ static void server(int sd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+RSA-PSK", - NULL); + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA-PSK", + NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_PSK, server_pskcred); @@ -309,10 +309,15 @@ void doit(void) if (child) { int status; /* parent */ + close(sockets[1]); server(sockets[0]); wait(&status); - } else + check_wait_status(status); + } else { + close(sockets[0]); client(sockets[1]); + exit(0); + } } #endif /* _WIN32 */ diff --git a/tests/rsa-psk.c b/tests/rsa-psk.c index aeaa306600..b86a9c6021 100644 --- a/tests/rsa-psk.c +++ b/tests/rsa-psk.c @@ -22,7 +22,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -/* Parts copied from GnuTLS example programs. */ +/* Tests the RSA-PSK ciphersuites under TLS1.2 */ #ifdef HAVE_CONFIG_H #include @@ -92,7 +92,7 @@ static void client(int sd) gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+RSA-PSK", + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA-PSK", NULL); /* put the anonymous credentials to the current session @@ -212,7 +212,7 @@ static void server(int sd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+RSA-PSK", + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA-PSK", NULL); @@ -293,10 +293,15 @@ void doit(void) if (child) { int status; /* parent */ + close(sockets[1]); server(sockets[0]); wait(&status); - } else + check_wait_status(status); + } else { + close(sockets[0]); client(sockets[1]); + exit(0); + } } #endif /* _WIN32 */ diff --git a/tests/rsa-rsa-pss.c b/tests/rsa-rsa-pss.c new file mode 100644 index 0000000000..7ba66803d5 --- /dev/null +++ b/tests/rsa-rsa-pss.c @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +/* This tests the key conversion from basic RSA to RSA-PSS. + */ + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d>| %s", level, str); +} + +const gnutls_datum_t raw_data = { + (void *) "hello there", + 11 +}; + +static void inv_sign_check(unsigned sigalgo, + gnutls_privkey_t privkey, int exp_error) +{ + int ret; + gnutls_datum_t signature; + + ret = gnutls_privkey_sign_data2(privkey, sigalgo, 0, + &raw_data, &signature); + if (ret != exp_error) + fail("gnutls_privkey_sign_data succeeded with %s and %s: %s\n", gnutls_pk_get_name(gnutls_privkey_get_pk_algorithm(privkey, NULL)), + gnutls_sign_get_name(sigalgo), gnutls_strerror(ret)); + + if (ret == 0) + gnutls_free(signature.data); +} + +static void inv_encryption_check(gnutls_pk_algorithm_t algorithm, + gnutls_privkey_t privkey, int exp_error) +{ + int ret; + gnutls_datum_t ct; + gnutls_pubkey_t pubkey; + + assert(gnutls_pubkey_init(&pubkey) >= 0); + + ret = gnutls_pubkey_import_privkey(pubkey, privkey, 0, 0); + if (ret < 0) + fail("gnutls_pubkey_import_privkey\n"); + + ret = gnutls_pubkey_encrypt_data(pubkey, 0, &raw_data, &ct); + if (ret != exp_error) + fail("gnutls_pubkey_encrypt_data succeeded with %s: %s\n", gnutls_pk_get_name(algorithm), + gnutls_strerror(ret)); + + gnutls_pubkey_deinit(pubkey); + +} + +static void sign_verify_data(unsigned sigalgo, gnutls_privkey_t privkey) +{ + int ret; + gnutls_pubkey_t pubkey; + gnutls_datum_t signature; + + ret = gnutls_privkey_sign_data2(privkey, sigalgo, 0, + &raw_data, &signature); + if (ret < 0) + fail("gnutls_x509_privkey_sign_data\n"); + + /* verify data */ + assert(gnutls_pubkey_init(&pubkey) >= 0); + + ret = gnutls_pubkey_import_privkey(pubkey, privkey, 0, 0); + if (ret < 0) + fail("gnutls_pubkey_import_privkey\n"); + + ret = gnutls_pubkey_verify_data2(pubkey, sigalgo, + 0, &raw_data, &signature); + if (ret < 0) + fail("gnutls_pubkey_verify_data2\n"); + + gnutls_pubkey_deinit(pubkey); + gnutls_free(signature.data); +} + +void doit(void) +{ + gnutls_privkey_t pkey_rsa_pss; + gnutls_privkey_t pkey_rsa; + gnutls_x509_privkey_t tkey; + int ret; + gnutls_x509_spki_t spki; + gnutls_datum_t tmp; + + ret = global_init(); + if (ret < 0) + fail("global_init: %d\n", ret); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + assert(gnutls_x509_spki_init(&spki)>=0); + + assert(gnutls_privkey_init(&pkey_rsa) >=0); + + gnutls_x509_spki_set_rsa_pss_params(spki, GNUTLS_DIG_SHA256, 32); + + ret = + gnutls_privkey_generate(pkey_rsa, GNUTLS_PK_RSA, 2048, 0); + if (ret < 0) { + fail("gnutls_privkey_generate: %s\n", gnutls_strerror(ret)); + } + + assert(gnutls_privkey_set_spki(pkey_rsa, spki, 0)>=0); + assert(gnutls_privkey_export_x509(pkey_rsa, &tkey) >=0); + + gnutls_x509_privkey_export2_pkcs8(tkey, GNUTLS_X509_FMT_PEM, NULL, 0, &tmp); + + /* import RSA-PSS version of key */ + assert(gnutls_privkey_init(&pkey_rsa_pss) >=0); + assert(gnutls_privkey_import_x509_raw(pkey_rsa_pss, &tmp, GNUTLS_X509_FMT_PEM, NULL, 0) >= 0); + + gnutls_free(tmp.data); + + /* import RSA-PSS version of key */ + gnutls_privkey_deinit(pkey_rsa); + gnutls_x509_privkey_export2(tkey, GNUTLS_X509_FMT_PEM, &tmp); + assert(gnutls_privkey_init(&pkey_rsa) >=0); + assert(gnutls_privkey_import_x509_raw(pkey_rsa, &tmp, GNUTLS_X509_FMT_PEM, NULL, 0) >= 0); + + gnutls_x509_privkey_deinit(tkey); + gnutls_free(tmp.data); + + sign_verify_data(GNUTLS_SIGN_RSA_PSS_SHA256, pkey_rsa_pss); + sign_verify_data(GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, pkey_rsa); + sign_verify_data(GNUTLS_SIGN_RSA_PSS_SHA256, pkey_rsa); + + if (debug) + success("success signing with RSA-PSS-SHA256\n"); + + /* check whether the RSA-PSS key restrictions are being followed */ + inv_encryption_check(GNUTLS_PK_RSA_PSS, pkey_rsa_pss, GNUTLS_E_INVALID_REQUEST); + inv_sign_check(GNUTLS_SIGN_RSA_SHA512, pkey_rsa_pss, GNUTLS_E_CONSTRAINT_ERROR); + inv_sign_check(GNUTLS_SIGN_RSA_SHA256, pkey_rsa_pss, GNUTLS_E_CONSTRAINT_ERROR); + inv_sign_check(GNUTLS_SIGN_RSA_PSS_SHA384, pkey_rsa_pss, GNUTLS_E_CONSTRAINT_ERROR); + inv_sign_check(GNUTLS_SIGN_RSA_PSS_SHA512, pkey_rsa_pss, GNUTLS_E_CONSTRAINT_ERROR); + inv_sign_check(GNUTLS_SIGN_RSA_PSS_RSAE_SHA384, pkey_rsa_pss, GNUTLS_E_CONSTRAINT_ERROR); + inv_sign_check(GNUTLS_SIGN_RSA_PSS_RSAE_SHA512, pkey_rsa_pss, GNUTLS_E_CONSTRAINT_ERROR); + + /* check whether the RSA key is not being restricted */ + inv_sign_check(GNUTLS_SIGN_RSA_SHA512, pkey_rsa, 0); + inv_sign_check(GNUTLS_SIGN_RSA_SHA256, pkey_rsa, 0); + inv_sign_check(GNUTLS_SIGN_RSA_PSS_RSAE_SHA384, pkey_rsa, 0); + inv_sign_check(GNUTLS_SIGN_RSA_PSS_RSAE_SHA512, pkey_rsa, 0); + /* an RSA key can also generate "pure" for TLS RSA-PSS signatures + * as they are essentially the same thing, and we cannot always + * know whether a key is RSA-PSS only, or not (e.g., in PKCS#11 + * keys). */ + inv_sign_check(GNUTLS_SIGN_RSA_PSS_SHA384, pkey_rsa, 0); + inv_sign_check(GNUTLS_SIGN_RSA_PSS_SHA512, pkey_rsa, 0); + + gnutls_privkey_deinit(pkey_rsa); + gnutls_privkey_deinit(pkey_rsa_pss); + gnutls_x509_spki_deinit(spki); + + gnutls_global_deinit(); +} diff --git a/tests/safe-renegotiation/srn0.c b/tests/safe-renegotiation/srn0.c index 20c9033e35..c583cd03b9 100644 --- a/tests/safe-renegotiation/srn0.c +++ b/tests/safe-renegotiation/srn0.c @@ -113,7 +113,7 @@ void doit(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, "NORMAL", NULL); + gnutls_priority_set_direct(server, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -123,7 +123,7 @@ void doit(void) gnutls_init(&client, GNUTLS_CLIENT); gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); - gnutls_priority_set_direct(client, "NORMAL", NULL); + gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); diff --git a/tests/safe-renegotiation/srn1.c b/tests/safe-renegotiation/srn1.c index 06857ac690..3ace5bb2ed 100644 --- a/tests/safe-renegotiation/srn1.c +++ b/tests/safe-renegotiation/srn1.c @@ -112,7 +112,7 @@ void doit(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, "NORMAL:%SAFE_RENEGOTIATION", + gnutls_priority_set_direct(server, "NORMAL:-VERS-ALL:+VERS-TLS1.2:%SAFE_RENEGOTIATION", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -124,7 +124,7 @@ void doit(void) gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); gnutls_priority_set_direct(client, - "NORMAL:%DISABLE_SAFE_RENEGOTIATION", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:%DISABLE_SAFE_RENEGOTIATION", NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); diff --git a/tests/safe-renegotiation/srn2.c b/tests/safe-renegotiation/srn2.c index d3c95940b9..2757ddfbfc 100644 --- a/tests/safe-renegotiation/srn2.c +++ b/tests/safe-renegotiation/srn2.c @@ -110,7 +110,7 @@ void doit(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, "NORMAL", NULL); + gnutls_priority_set_direct(server, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -120,7 +120,7 @@ void doit(void) gnutls_init(&client, GNUTLS_CLIENT); gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); - gnutls_priority_set_direct(client, "NORMAL", NULL); + gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); diff --git a/tests/safe-renegotiation/srn3.c b/tests/safe-renegotiation/srn3.c index c8d4961645..715f16c075 100644 --- a/tests/safe-renegotiation/srn3.c +++ b/tests/safe-renegotiation/srn3.c @@ -113,7 +113,7 @@ void doit(void) gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); gnutls_priority_set_direct(server, - "NORMAL:%DISABLE_SAFE_RENEGOTIATION", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:%DISABLE_SAFE_RENEGOTIATION", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -124,7 +124,7 @@ void doit(void) gnutls_init(&client, GNUTLS_CLIENT); gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); - gnutls_priority_set_direct(client, "NORMAL:%SAFE_RENEGOTIATION", + gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2:%SAFE_RENEGOTIATION", NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); diff --git a/tests/safe-renegotiation/srn4.c b/tests/safe-renegotiation/srn4.c index 40896fbc44..cbb20a02de 100644 --- a/tests/safe-renegotiation/srn4.c +++ b/tests/safe-renegotiation/srn4.c @@ -112,7 +112,7 @@ void doit(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, "NORMAL", NULL); + gnutls_priority_set_direct(server, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -123,7 +123,7 @@ void doit(void) gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); gnutls_priority_set_direct(client, - "NORMAL:%DISABLE_SAFE_RENEGOTIATION", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:%DISABLE_SAFE_RENEGOTIATION", NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); diff --git a/tests/safe-renegotiation/srn5.c b/tests/safe-renegotiation/srn5.c index 7483ad86c3..0528bac103 100644 --- a/tests/safe-renegotiation/srn5.c +++ b/tests/safe-renegotiation/srn5.c @@ -114,7 +114,7 @@ void doit(void) gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); gnutls_priority_set_direct(server, - "NORMAL:%DISABLE_SAFE_RENEGOTIATION", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:%DISABLE_SAFE_RENEGOTIATION", NULL); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); @@ -125,7 +125,7 @@ void doit(void) gnutls_init(&client, GNUTLS_CLIENT); gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, clientx509cred); - gnutls_priority_set_direct(client, "NORMAL", NULL); + gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); diff --git a/tests/sanity-cpp.cpp b/tests/sanity-cpp.cpp new file mode 100644 index 0000000000..452689345c --- /dev/null +++ b/tests/sanity-cpp.cpp @@ -0,0 +1,246 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +extern "C" { +#include +#include +#include +#include +#include +#include "cert-common.h" +#include +#include +#include +} + +/* This is a basic test for C++ API */ +static void tls_log_func(int level, const char *str) +{ + std::cerr << level << "| " << str << "\n"; +} + +static char to_server[64 * 1024]; +static size_t to_server_len = 0; + +static char to_client[64 * 1024]; +static size_t to_client_len = 0; + +static ssize_t +client_push(gnutls_transport_ptr_t tr, const void *data, size_t len) +{ + size_t newlen; + + len = MIN(len, sizeof(to_server) - to_server_len); + + newlen = to_server_len + len; + memcpy(to_server + to_server_len, data, len); + to_server_len = newlen; + + return len; +} + +static ssize_t +client_pull(gnutls_transport_ptr_t tr, void *data, size_t len) +{ + if (to_client_len == 0) { + gnutls_transport_set_errno ((gnutls_session_t)tr, EAGAIN); + return -1; + } + + len = MIN(len, to_client_len); + + memcpy(data, to_client, len); + + memmove(to_client, to_client + len, to_client_len - len); + to_client_len -= len; + return len; +} + +static ssize_t +server_pull(gnutls_transport_ptr_t tr, void *data, size_t len) +{ + if (to_server_len == 0) { + gnutls_transport_set_errno ((gnutls_session_t)tr, EAGAIN); + return -1; + } + + len = MIN(len, to_server_len); + memcpy(data, to_server, len); + + memmove(to_server, to_server + len, to_server_len - len); + to_server_len -= len; + + return len; +} + +static ssize_t +server_push(gnutls_transport_ptr_t tr, const void *data, size_t len) +{ + size_t newlen; + + len = MIN(len, sizeof(to_client) - to_client_len); + + newlen = to_client_len + len; + memcpy(to_client + to_client_len, data, len); + to_client_len = newlen; + + return len; +} + +inline static void reset_buffers(void) +{ + to_server_len = 0; + to_client_len = 0; +} + +#define MSG "test message" +static void test_handshake(void **glob_state, const char *prio, + gnutls::server_session& server, gnutls::client_session& client) +{ + gnutls::certificate_credentials serverx509cred; + int sret, cret; + gnutls::certificate_credentials clientx509cred; + char buffer[64]; + int ret; + + /* General init. */ + reset_buffers(); + gnutls_global_set_log_function(tls_log_func); + + try { + serverx509cred.set_x509_key(server_cert, server_key, GNUTLS_X509_FMT_PEM); + server.set_credentials(serverx509cred); + + server.set_priority(prio, NULL); + + server.set_transport_push_function(server_push); + server.set_transport_pull_function(server_pull); + server.set_transport_ptr(server.ptr()); + + client.set_priority(prio, NULL); + client.set_credentials(clientx509cred); + + client.set_transport_push_function(client_push); + client.set_transport_pull_function(client_pull); + client.set_transport_ptr(client.ptr()); + } + catch (std::exception &ex) { + std::cerr << "Exception caught: " << ex.what() << std::endl; + fail(); + } + + sret = cret = GNUTLS_E_AGAIN; + + do { + if (cret == GNUTLS_E_AGAIN) { + try { + cret = client.handshake(); + } catch(gnutls::exception &ex) { + cret = ex.get_code(); + if (cret == GNUTLS_E_INTERRUPTED || cret == GNUTLS_E_AGAIN) + cret = GNUTLS_E_AGAIN; + } + } + if (sret == GNUTLS_E_AGAIN) { + try { + sret = server.handshake(); + } catch(gnutls::exception &ex) { + sret = ex.get_code(); + if (sret == GNUTLS_E_INTERRUPTED || sret == GNUTLS_E_AGAIN) + sret = GNUTLS_E_AGAIN; + } + } + } + while ((cret == GNUTLS_E_AGAIN || (cret == 0 && sret == GNUTLS_E_AGAIN)) && + (sret == GNUTLS_E_AGAIN || (sret == 0 && cret == GNUTLS_E_AGAIN))); + + if (sret < 0 || cret < 0) { + fail(); + } + + try { + client.send(MSG, sizeof(MSG)-1); + ret = server.recv(buffer, sizeof(buffer)); + + assert(ret == sizeof(MSG)-1); + assert(memcmp(buffer, MSG, sizeof(MSG)-1) == 0); + + client.bye(GNUTLS_SHUT_WR); + server.bye(GNUTLS_SHUT_WR); + } + catch (std::exception &ex) { + std::cerr << "Exception caught: " << ex.what() << std::endl; + fail(); + } + + return; +} + +static void tls_handshake(void **glob_state) +{ + gnutls::server_session server; + gnutls::client_session client; + + test_handshake(glob_state, "NORMAL", server, client); +} + +static void tls_handshake_alt(void **glob_state) +{ + gnutls::server_session server(0); + gnutls::client_session client(0); + + test_handshake(glob_state, "NORMAL", server, client); +} + +static void tls12_handshake(void **glob_state) +{ + gnutls::server_session server; + gnutls::client_session client; + + test_handshake(glob_state, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2", server, client); +} + +static void tls13_handshake(void **glob_state) +{ + gnutls::server_session server; + gnutls::client_session client; + + test_handshake(glob_state, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", server, client); +} + +int main(void) +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(tls_handshake), + cmocka_unit_test(tls_handshake_alt), + cmocka_unit_test(tls13_handshake), + cmocka_unit_test(tls12_handshake) + }; + return cmocka_run_group_tests(tests, NULL, NULL); +} diff --git a/tests/scripts/common.sh b/tests/scripts/common.sh index 8c0e1e920f..95f8a5298e 100644 --- a/tests/scripts/common.sh +++ b/tests/scripts/common.sh @@ -59,15 +59,26 @@ check_if_port_listening() { } # Find a port number not currently in use. -GETPORT='rc=0; myrandom=$(date +%N | sed s/^0*//) - while test $rc = 0;do - PORT="$(((($$<<15)|$myrandom) % 63001 + 2000))" - check_if_port_in_use $PORT;rc=$? +GETPORT=' + rc=0 + unset myrandom + while test $rc = 0; do + if test -n "$RANDOM"; then myrandom=$(($RANDOM + $RANDOM)); fi + if test -z "$myrandom"; then myrandom=$(date +%N | sed s/^0*//); fi + if test -z "$myrandom"; then myrandom=0; fi + PORT="$(((($$<<15)|$myrandom) % 63001 + 2000))" + check_if_port_in_use $PORT;rc=$? done ' check_for_datefudge() { - TSTAMP=`datefudge -s "2006-09-23" date -u +%s || true` + # On certain platforms running datefudge date fails (e.g., x86 datefudge + # with x86-64 date app). + if test "${SKIP_DATEFUDGE_CHECK}" = 1;then + return + fi + + TSTAMP=`datefudge -s "2006-09-23" "${top_builddir}/tests/datefudge-check" || true` if test "$TSTAMP" != "1158969600" || test "$WINDOWS" = 1; then echo $TSTAMP echo "You need datefudge to run this test" @@ -83,11 +94,35 @@ fail() { exit 1 } +exit_if_non_x86() +{ +which lscpu >/dev/null 2>&1 +if test $? = 0;then + $(which lscpu)|grep Architecture|grep x86 + if test $? != 0;then + echo "non-x86 CPU detected" + exit 0 + fi +fi +} + +exit_if_non_padlock() +{ +which lscpu >/dev/null 2>&1 +if test $? = 0;then + $(which lscpu)|grep Flags|grep phe + if test $? != 0;then + echo "non-Via padlock CPU detected" + exit 0 + fi +fi +} + wait_for_port() { local ret local PORT="$1" - sleep 4 + sleep 1 for i in 1 2 3 4 5 6;do check_if_port_listening ${PORT} @@ -114,7 +149,7 @@ wait_for_free_port() if test $ret != 0;then break else - sleep 20 + sleep 2 fi done return $ret @@ -125,7 +160,7 @@ launch_server() { shift wait_for_free_port ${PORT} - ${SERV} ${DEBUG} -p "${PORT}" $* >/dev/null 2>&1 & + ${SERV} ${DEBUG} -p "${PORT}" $* >${LOGFILE-/dev/null} & } launch_pkcs11_server() { @@ -144,7 +179,7 @@ launch_bare_server() { shift wait_for_free_port ${PORT} - ${SERV} $* >/dev/null 2>&1 & + ${SERV} $* >${LOGFILE-/dev/null} & } wait_server() { @@ -171,3 +206,80 @@ else LOCKFILE="lockfile global.lock" UNLOCKFILE="rm -f global.lock" fi + +create_testdir() { + local PREFIX=$1 + d=`mktemp -d -t ${PREFIX}.XXXXXX` + if test $? -ne 0; then + d=${TMPDIR}/${PREFIX}.$$ + mkdir "$d" || exit 1 + fi + trap "test -e \"$d\" && rm -rf \"$d\"" 1 15 2 + echo "$d" +} + +wait_for_file() { + local filename="$1" + local timeout="$2" + + local loops=$((timeout * 10)) loop=0 + + while test $loop -lt $loops; do + [ -f "$filename" ] && { + #allow file to be written to + sleep 0.2 + return 1 + } + sleep 0.1 + loop=$((loop+1)) + done + return 0 +} + +# Kill a process quietly +# @1: signal, e.g. -9 +# @2: pid +kill_quiet() { + local sig="$1" + local pid="$2" + + sh -c "kill $sig $pid 2>/dev/null" + return $? +} + +# Terminate a process first using SIGTERM, wait 1s and if still avive use +# SIGKILL +# @1: pid +terminate_proc() { + local pid="$1" + + local ctr=0 + + kill_quiet -15 $pid + while [ $ctr -lt 10 ]; do + sleep 0.1 + kill -0 $pid 2>/dev/null + [ $? -ne 0 ] && return + ctr=$((ctr + 1)) + done + kill_quiet -9 $pid + sleep 0.1 +} + +# $1, $2: the two files to check for equality +# $3: Strings to be ignored, separated by | +check_if_equal() { + if test -n "$3"; then + local tmp1=`basename "$1"`"1.tmp" + local tmp2=`basename "$2"`"2.tmp" + egrep -v "$3" "$1" | tr -d '\r' >"$tmp1" + egrep -v "$3" "$2" | tr -d '\r' >"$tmp2" + diff -b -B "$tmp1" "$tmp2" + local rc=$? + rm -f "$tmp1" "$tmp2" + return $rc + fi + + diff -b -B "$1" "$2" + return $? +} diff --git a/tests/seccomp.c b/tests/seccomp.c index b68fcd7efa..7137c87b29 100644 --- a/tests/seccomp.c +++ b/tests/seccomp.c @@ -14,7 +14,7 @@ * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ #include @@ -26,6 +26,9 @@ #include #include #include +#if defined(__linux__) +# include +#endif int disable_system_calls(void) { @@ -70,7 +73,9 @@ int disable_system_calls(void) /* to read from /dev/urandom */ ADD_SYSCALL(read, 0); +#ifdef SYS_getrandom ADD_SYSCALL(getrandom, 0); +#endif /* we use it in select */ ADD_SYSCALL(sigprocmask, 0); diff --git a/tests/send-client-cert.c b/tests/send-client-cert.c index 33cce4a861..34f8f0bd93 100644 --- a/tests/send-client-cert.c +++ b/tests/send-client-cert.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include "utils.h" #include "eagain-common.h" @@ -54,7 +55,7 @@ enum { NO_CA = 3 }; -static void try(unsigned expect, unsigned ca_type) +static void try(const char *prio, unsigned expect, unsigned ca_type) { int ret; /* Server stuff. */ @@ -105,9 +106,7 @@ static void try(unsigned expect, unsigned ca_type) gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, - "NORMAL", - NULL); + assert(gnutls_priority_set_direct(server, prio, NULL) >= 0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -118,7 +117,7 @@ static void try(unsigned expect, unsigned ca_type) if (ret < 0) exit(1); - ret = gnutls_certificate_set_x509_key_mem(clientx509cred, + ret = gnutls_certificate_set_x509_key_mem(clientx509cred, &cli_ca3_cert_chain, &cli_ca3_key, GNUTLS_X509_FMT_PEM); if (ret < 0) @@ -142,7 +141,7 @@ static void try(unsigned expect, unsigned ca_type) if (ret < 0) exit(1); - ret = gnutls_priority_set_direct(client, "NORMAL", NULL); + ret = gnutls_priority_set_direct(client, prio, NULL); if (ret < 0) exit(1); @@ -174,13 +173,22 @@ static void try(unsigned expect, unsigned ca_type) gnutls_dh_params_deinit(dh_params); } -void doit(void) +static void start(const char *prio) { global_init(); - try(SENT, NO_CA); - try(SENT, CORRECT_CA); - try(NOT_SENT, INCORRECT_CA); - try(SENT, INCORRECT_CA_FORCE); + success("trying %s\n", prio); + + try(prio, SENT, NO_CA); + try(prio, SENT, CORRECT_CA); + try(prio, NOT_SENT, INCORRECT_CA); + try(prio, SENT, INCORRECT_CA_FORCE); gnutls_global_deinit(); } + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); +} diff --git a/tests/send-data-before-handshake.c b/tests/send-data-before-handshake.c index c127439c99..53c60aadf5 100644 --- a/tests/send-data-before-handshake.c +++ b/tests/send-data-before-handshake.c @@ -46,6 +46,7 @@ int main() #include #include #include +#include #include "cert-common.h" #include "utils.h" @@ -89,7 +90,7 @@ static int handshake_callback(gnutls_session_t session, unsigned int htype, #define MAX_BUF 1024 -static void client(int fd) +static void client(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -110,8 +111,7 @@ static void client(int fd) */ gnutls_init(&session, GNUTLS_CLIENT); - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-RSA", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, GNUTLS_HOOK_PRE, @@ -186,7 +186,7 @@ static void terminate(void) exit(1); } -static void server(int fd) +static void server(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -210,10 +210,7 @@ static void server(int fd) gnutls_init(&session, GNUTLS_SERVER); - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -257,11 +254,14 @@ static void ch_handler(int sig) return; } -void doit(void) +static +void start(const char *prio) { int fd[2]; int ret, status = 0; + success("trying %s\n", prio); + signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); @@ -281,14 +281,21 @@ void doit(void) if (child) { /* parent */ close(fd[1]); - client(fd[0]); + client(fd[0], prio); waitpid(child, &status, 0); check_wait_status(status); } else { close(fd[0]); - server(fd[1]); + server(fd[1], prio); exit(0); } } +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); +} + #endif /* _WIN32 */ diff --git a/tests/serv-udp.sh b/tests/serv-udp.sh new file mode 100755 index 0000000000..9db3a32a42 --- /dev/null +++ b/tests/serv-udp.sh @@ -0,0 +1,71 @@ +#!/bin/sh + +# Copyright (C) 2010-2016 Free Software Foundation, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +unset RETCODE + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + + +SERV="${SERV} -q" + +. "${srcdir}/scripts/common.sh" + +echo "Checking whether UDP server works" + +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem + +eval "${GETPORT}" +launch_server $$ --x509keyfile ${KEY1} --x509certfile ${CERT1} --udp -d 2 +PID=$! + +wait_udp_server $PID + +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --insecure --udp /dev/null || \ + fail ${PID} "1. handshake should have succeeded!" + +#retry +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --insecure --udp /dev/null || \ + fail ${PID} "2. handshake should have succeeded!" + + +kill ${PID} +wait + +exit 0 diff --git a/tests/server-interesting/server1.raw b/tests/server-interesting/server1.raw deleted file mode 100644 index 4149fc4e42..0000000000 Binary files a/tests/server-interesting/server1.raw and /dev/null differ diff --git a/tests/server-kx-neg-common.c b/tests/server-kx-neg-common.c new file mode 100644 index 0000000000..961d16074e --- /dev/null +++ b/tests/server-kx-neg-common.c @@ -0,0 +1,278 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ +#include + +typedef struct test_case_st { + const char *name; + int server_ret; + int client_ret; + unsigned have_anon_cred; + unsigned have_anon_dh_params; + unsigned have_anon_exp_dh_params; + unsigned have_srp_cred; + unsigned have_psk_cred; + unsigned have_psk_dh_params; + unsigned have_psk_exp_dh_params; + unsigned have_cert_cred; + unsigned have_cert_dh_params; + unsigned have_cert_exp_dh_params; + unsigned have_rsa_sign_cert; + unsigned have_ecc_sign_cert; + unsigned have_ed25519_sign_cert; + unsigned have_rsa_decrypt_cert; + unsigned have_gost12_256_cert; + unsigned have_gost12_512_cert; + unsigned not_on_fips; + unsigned exp_version; + const char *client_prio; + const char *server_prio; +} test_case_st; + +static int +serv_psk_func(gnutls_session_t session, const char *username, + gnutls_datum_t * key) { + key->data = gnutls_malloc(4); + assert(key->data != NULL); + key->data[0] = 0xDE; + key->data[1] = 0xAD; + key->data[2] = 0xBE; + key->data[3] = 0xEF; + key->size = 4; + return 0; +} + +#define SALT_TEST1 "3a3xX3Myzb9YJn5X0R7sbx" +#define VERIF_TEST1 "CEqjUZBlkQCocfOR0E4AsPZKOFYPGjKFMHW7KDcnpE4sH4.iGMbkygb/bViRNjskF9/TQdD46Mvlt6pLs5MZoTn8mO3G.RGyXdWuIrhnVn29p41Cpc5RhTLaeUm3asW6LF60VTKnGERC0eB37xZUsaTpzmaTNdD4mOoYCN3bD9Y" +#define PRIME "Ewl2hcjiutMd3Fu2lgFnUXWSc67TVyy2vwYCKoS9MLsrdJVT9RgWTCuEqWJrfB6uE3LsE9GkOlaZabS7M29sj5TnzUqOLJMjiwEzArfiLr9WbMRANlF68N5AVLcPWvNx6Zjl3m5Scp0BzJBz9TkgfhzKJZ.WtP3Mv/67I/0wmRZ" +gnutls_datum_t tprime = +{ + .data = (void*)PRIME, + .size = sizeof(PRIME)-1 +}; + +gnutls_datum_t test1_verif = +{ + .data = (void*)VERIF_TEST1, + .size = sizeof(VERIF_TEST1)-1 +}; + +gnutls_datum_t test1_salt = +{ + .data = (void*)SALT_TEST1, + .size = sizeof(SALT_TEST1)-1 +}; + +const char *side; +#define switch_side(str) side = str + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static int +serv_srp_func(gnutls_session_t session, const char *username, + gnutls_datum_t *salt, gnutls_datum_t *verifier, gnutls_datum_t *generator, + gnutls_datum_t *prime) +{ + int ret; + if (debug) + printf("srp: username %s\n", username); + + generator->data = gnutls_malloc(1); + generator->data[0] = 2; + generator->size = 1; + + ret = gnutls_srp_base64_decode2(&tprime, prime); + if (ret < 0) + fail("error in gnutls_srp_base64_decode2 -prime\n"); + + if (strcmp(username, "test1") == 0) { + ret = gnutls_srp_base64_decode2(&test1_verif, verifier); + if (ret < 0) + fail("error in gnutls_srp_base64_decode2 -verif\n"); + + + ret = gnutls_srp_base64_decode2(&test1_salt, salt); + if (ret < 0) + fail("error in gnutls_srp_base64_decode2 -salt\n"); + } else { + fail("Unknown username %s\n", username); + } + + return 0; +} + +static void try(test_case_st *test) +{ + int sret, cret, ret; + gnutls_anon_client_credentials_t c_anon_cred; + gnutls_anon_server_credentials_t s_anon_cred; + gnutls_psk_client_credentials_t c_psk_cred; + gnutls_psk_server_credentials_t s_psk_cred; + gnutls_certificate_credentials_t s_cert_cred; + gnutls_certificate_credentials_t c_cert_cred; + gnutls_srp_server_credentials_t s_srp_cred; + gnutls_srp_client_credentials_t c_srp_cred; + const gnutls_datum_t p3_2048 = + { (void *)pkcs3_2048, strlen(pkcs3_2048) }; + gnutls_dh_params_t dh_params = NULL; + + gnutls_session_t server, client; + const gnutls_datum_t pskkey = { (void *) "DEADBEEF", 8 }; + + if (test->not_on_fips && gnutls_fips140_mode_enabled()) { + success("Skipping %s...\n", test->name); + return; + } + + success("Running %s...\n", test->name); + + /* General init. */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + assert(gnutls_anon_allocate_client_credentials(&c_anon_cred) >= 0); + assert(gnutls_anon_allocate_server_credentials(&s_anon_cred) >= 0); + assert(gnutls_psk_allocate_client_credentials(&c_psk_cred) >= 0); + assert(gnutls_psk_allocate_server_credentials(&s_psk_cred) >= 0); + assert(gnutls_srp_allocate_client_credentials(&c_srp_cred) >= 0); + assert(gnutls_srp_allocate_server_credentials(&s_srp_cred) >= 0); + assert(gnutls_certificate_allocate_credentials(&s_cert_cred) >= 0); + assert(gnutls_certificate_allocate_credentials(&c_cert_cred) >= 0); + assert(gnutls_dh_params_init(&dh_params) >= 0); + + assert(gnutls_init(&server, GNUTLS_SERVER)>=0); + assert(gnutls_init(&client, GNUTLS_CLIENT)>=0); + + if (test->have_anon_cred) { + gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anon_cred); + if (test->have_anon_dh_params) + gnutls_anon_set_server_known_dh_params(s_anon_cred, GNUTLS_SEC_PARAM_MEDIUM); + else if (test->have_anon_exp_dh_params) { + ret = gnutls_dh_params_import_pkcs3(dh_params, &p3_2048, + GNUTLS_X509_FMT_PEM); + assert(ret>=0); + gnutls_anon_set_server_dh_params(s_anon_cred, dh_params); + } + } + + if (test->have_cert_cred) { + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, s_cert_cred); + if (test->have_cert_dh_params) + gnutls_certificate_set_known_dh_params(s_cert_cred, GNUTLS_SEC_PARAM_MEDIUM); + else if (test->have_cert_exp_dh_params) { + ret = gnutls_dh_params_import_pkcs3(dh_params, &p3_2048, + GNUTLS_X509_FMT_PEM); + assert(ret>=0); + gnutls_certificate_set_dh_params(s_cert_cred, dh_params); + } + } + + if (test->have_psk_cred) { + gnutls_credentials_set(server, GNUTLS_CRD_PSK, s_psk_cred); + if (test->have_psk_dh_params) + gnutls_psk_set_server_known_dh_params(s_psk_cred, GNUTLS_SEC_PARAM_MEDIUM); + else if (test->have_psk_exp_dh_params) { + ret = gnutls_dh_params_import_pkcs3(dh_params, &p3_2048, + GNUTLS_X509_FMT_PEM); + assert(ret>=0); + gnutls_psk_set_server_dh_params(s_psk_cred, dh_params); + } + + gnutls_psk_set_server_credentials_function(s_psk_cred, serv_psk_func); + } + + if (test->have_srp_cred) { + gnutls_credentials_set(server, GNUTLS_CRD_SRP, s_srp_cred); + + gnutls_srp_set_server_credentials_function(s_srp_cred, serv_srp_func); + } + + if (test->have_rsa_decrypt_cert) { + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key, GNUTLS_X509_FMT_PEM) >= 0); + } + + if (test->have_ecc_sign_cert) { + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, GNUTLS_X509_FMT_PEM) >= 0); + } + + if (test->have_ed25519_sign_cert) { + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_eddsa_cert, &server_ca3_eddsa_key, GNUTLS_X509_FMT_PEM) >= 0); + } + + if (test->have_rsa_sign_cert) { + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_localhost_rsa_sign_cert, &server_ca3_key, GNUTLS_X509_FMT_PEM) >= 0); + } + + if (test->have_gost12_256_cert) { + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_gost12_256_cert, &server_ca3_gost12_256_key, GNUTLS_X509_FMT_PEM) >= 0); + } + + if (test->have_gost12_512_cert) { + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_gost12_512_cert, &server_ca3_gost12_512_key, GNUTLS_X509_FMT_PEM) >= 0); + } + + /* client does everything */ + gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anon_cred); + gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, c_cert_cred); + gnutls_credentials_set(client, GNUTLS_CRD_PSK, c_psk_cred); + gnutls_credentials_set(client, GNUTLS_CRD_SRP, c_srp_cred); + + assert(gnutls_psk_set_client_credentials(c_psk_cred, "psk", &pskkey, GNUTLS_PSK_KEY_HEX) >= 0); + + assert(gnutls_srp_set_client_credentials(c_srp_cred, "test1", "test") >= 0); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + assert(gnutls_priority_set_direct(server, test->server_prio, 0) >= 0); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + assert(gnutls_priority_set_direct(client, test->client_prio, 0) >= 0); + + HANDSHAKE_EXPECT(client, server, test->client_ret, test->server_ret); + + if (test->client_ret == 0 && test->server_ret == 0 && test->exp_version) { + if (gnutls_protocol_get_version(client) != test->exp_version) + fail("expected version (%s) does not match %s\n", + gnutls_protocol_get_name(test->exp_version), + gnutls_protocol_get_name(gnutls_protocol_get_version(client))); + } + + gnutls_deinit(server); + gnutls_deinit(client); + gnutls_anon_free_client_credentials(c_anon_cred); + gnutls_anon_free_server_credentials(s_anon_cred); + gnutls_psk_free_client_credentials(c_psk_cred); + gnutls_psk_free_server_credentials(s_psk_cred); + gnutls_srp_free_client_credentials(c_srp_cred); + gnutls_srp_free_server_credentials(s_srp_cred); + gnutls_certificate_free_credentials(s_cert_cred); + gnutls_certificate_free_credentials(c_cert_cred); + if (dh_params) + gnutls_dh_params_deinit(dh_params); + + reset_buffers(); +} diff --git a/tests/server-multi-keys.sh b/tests/server-multi-keys.sh new file mode 100755 index 0000000000..3138fb6888 --- /dev/null +++ b/tests/server-multi-keys.sh @@ -0,0 +1,103 @@ +#!/bin/sh + +# Copyright (C) 2017 Nikos Mavrogiannopoulos +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +unset RETCODE + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + + +SERV="${SERV} -q" + +. "${srcdir}/scripts/common.sh" + +check_for_datefudge + +echo "Checking whether server can utilize multiple keys" + +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem +KEY2=${srcdir}/../doc/credentials/x509/key-ecc.pem +CERT2=${srcdir}/../doc/credentials/x509/cert-ecc.pem +KEY3=${srcdir}/../doc/credentials/x509/key-rsa-pss.pem +CERT3=${srcdir}/../doc/credentials/x509/cert-rsa-pss.pem +CAFILE=${srcdir}/../doc/credentials/x509/ca.pem +TMPFILE=outcert.$$.tmp + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA" --x509keyfile ${KEY1} --x509certfile ${CERT1} \ + --x509keyfile ${KEY2} --x509certfile ${CERT2} --x509keyfile ${KEY3} --x509certfile ${CERT3} +PID=$! +wait_server ${PID} + +timeout 1800 datefudge "2017-08-9" \ +"${CLI}" -p "${PORT}" localhost --x509cafile ${CAFILE} --priority "NORMAL:-KX-ALL:+ECDHE-RSA" + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +/* This tests whether a server will reject a client advertising + * MD5 signature algorithms only */ + +#if defined(_WIN32) || !defined(ENABLE_SSL2) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +pid_t child; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s |<%d>| %s", child ? "server" : "client", level, + str); +} + + +static unsigned char tls1_hello[] = { +0x16, 0x03, 0x01, 0x01, 0x5E, 0x01, 0x00, 0x01, 0x5A, 0x03, 0x03, 0x59, 0x52, 0x41, 0x54, 0xD5, +0x52, 0x62, 0x63, 0x69, 0x1B, 0x46, 0xBE, 0x33, 0xCC, 0xC4, 0xC3, 0xB3, 0x6C, 0xCD, 0xEC, 0x96, +0xF7, 0x7A, 0xCA, 0xE9, 0xFB, 0x85, 0x95, 0x83, 0x51, 0xE4, 0x69, 0x00, 0x00, 0xD4, 0xC0, 0x30, +0xCC, 0xA8, 0xC0, 0x8B, 0xC0, 0x14, 0xC0, 0x28, 0xC0, 0x77, 0xC0, 0x2F, 0xC0, 0x8A, 0xC0, 0x13, +0xC0, 0x27, 0xC0, 0x76, 0xC0, 0x12, 0xC0, 0x2C, 0xC0, 0xAD, 0xCC, 0xA9, 0xC0, 0x87, 0xC0, 0x0A, +0xC0, 0x24, 0xC0, 0x73, 0xC0, 0x2B, 0xC0, 0xAC, 0xC0, 0x86, 0xC0, 0x09, 0xC0, 0x23, 0xC0, 0x72, +0xC0, 0x08, 0x00, 0x9D, 0xC0, 0x9D, 0xC0, 0x7B, 0x00, 0x35, 0x00, 0x3D, 0x00, 0x84, 0x00, 0xC0, +0x00, 0x9C, 0xC0, 0x9C, 0xC0, 0x7A, 0x00, 0x2F, 0x00, 0x3C, 0x00, 0x41, 0x00, 0xBA, 0x00, 0x0A, +0x00, 0x9F, 0xC0, 0x9F, 0xCC, 0xAA, 0xC0, 0x7D, 0x00, 0x39, 0x00, 0x6B, 0x00, 0x88, 0x00, 0xC4, +0x00, 0x9E, 0xC0, 0x9E, 0xC0, 0x7C, 0x00, 0x33, 0x00, 0x67, 0x00, 0x45, 0x00, 0xBE, 0x00, 0x16, +0x00, 0xA3, 0xC0, 0x81, 0x00, 0x38, 0x00, 0x6A, 0x00, 0x87, 0x00, 0xC3, 0x00, 0xA2, 0xC0, 0x80, +0x00, 0x32, 0x00, 0x40, 0x00, 0x44, 0x00, 0xBD, 0x00, 0x13, 0x00, 0xA9, 0xC0, 0xA5, 0xCC, 0xAB, +0xC0, 0x8F, 0x00, 0x8D, 0x00, 0xAF, 0xC0, 0x95, 0x00, 0xA8, 0xC0, 0xA4, 0xC0, 0x8E, 0x00, 0x8C, +0x00, 0xAE, 0xC0, 0x94, 0x00, 0x8B, 0x00, 0xAB, 0xC0, 0xA7, 0xCC, 0xAD, 0xC0, 0x91, 0x00, 0x91, +0x00, 0xB3, 0xC0, 0x97, 0x00, 0xAA, 0xC0, 0xA6, 0xC0, 0x90, 0x00, 0x90, 0x00, 0xB2, 0xC0, 0x96, +0x00, 0x8F, 0xCC, 0xAC, 0xC0, 0x36, 0xC0, 0x38, 0xC0, 0x9B, 0xC0, 0x35, 0xC0, 0x37, 0xC0, 0x9A, +0xC0, 0x34, 0x01, 0x00, 0x00, 0x5D, 0x00, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x05, +0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x11, 0x00, 0x00, 0x0E, +0x77, 0x77, 0x77, 0x2E, 0x67, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x2E, 0x63, 0x6F, 0x6D, 0xFF, 0x01, +0x00, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x08, 0x00, 0x06, 0x00, 0x17, 0x00, +0x18, 0x00, 0x19, 0x00, 0x0B, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0D, 0x00, 0x16, 0x00, 0x14, 0x01, +0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +0x01, 0x01, 0x01}; + +static void client(int sd) +{ + char buf[1024]; + int ret; + struct pollfd pfd; + + /* send a TLS 1.x hello advertising RSA-MD5 */ + + ret = send(sd, tls1_hello, sizeof(tls1_hello), 0); + if (ret < 0) + fail("error sending hello\n"); + + pfd.fd = sd; + pfd.events = POLLIN; + pfd.revents = 0; + + do { + ret = poll(&pfd, 1, 10000); + } while (ret == -1 && errno == EINTR); + + if (ret == -1 || ret == 0) { + fail("timeout waiting for reply\n"); + } + + success("sent hello\n"); + ret = recv(sd, buf, sizeof(buf), 0); + if (ret < 0) + fail("error receiving alert\n"); + + success("received reply\n"); + + if (ret < 7) + fail("error in size of received alert\n"); + + if (buf[0] != 0x15 || buf[1] != 0x03) + fail("error in received alert data\n"); + + success("all ok\n"); + + close(sd); +} + +static void server(int sd) +{ + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + int ret; + + /* this must be called once in the program + */ + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_trust_mem(x509_cred, &ca3_cert, + GNUTLS_X509_FMT_PEM); + + gnutls_certificate_set_x509_key_mem(x509_cred, &server_ca3_localhost_cert, + &server_ca3_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-RSA", NULL)>=0); + gnutls_handshake_set_timeout(session, 20 * 1000); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, sd); + do { + ret = gnutls_handshake(session); + } while(ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN); + + if (ret != GNUTLS_E_NO_CIPHER_SUITES) { + fail("server: Handshake succeeded unexpectedly: %s\n", gnutls_strerror(ret)); + } + + gnutls_alert_send_appropriate(session, ret); + + close(sd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + + +void doit(void) +{ + int sockets[2]; + int err; + + signal(SIGPIPE, SIG_IGN); + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status; + + client(sockets[1]); + wait(&status); + check_wait_status(status); + } else { + server(sockets[0]); + _exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/server-weak-keys.sh b/tests/server-weak-keys.sh new file mode 100755 index 0000000000..31c51a80bc --- /dev/null +++ b/tests/server-weak-keys.sh @@ -0,0 +1,72 @@ +#!/bin/sh + +# Copyright (C) 2017 Nikos Mavrogiannopoulos +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +unset RETCODE + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + + +SERV="${SERV} -q" + +. "${srcdir}/scripts/common.sh" + +check_for_datefudge + +echo "Checking whether a client will refuse weak but trusted keys" + +KEY1=${srcdir}/certs/rsa-512.pem +CERT1=${srcdir}/certs/rsa-512.pem + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL" --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +timeout 1800 datefudge "2019-12-20" \ +"${CLI}" -d 4 -p "${PORT}" localhost --x509cafile ${CERT1} --priority NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2 -#include -#include -#include -#include -#include - -#include "utils.h" - -#define true 1 - -/* This program will load certificates from CERT_DIR and try to print - * them. If CERT_DIR/certname.err is available, it should contain the - * error code that gnutls_x509_crt_import() should return. - */ - -#define CERT_DIR "server-interesting" - -int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); - -static int getnext(DIR **dirp, gnutls_datum_t *der) -{ - struct dirent *d; - char path[256]; - char cert_dir[256]; - const char *src; - int ret; - - src = getenv("srcdir"); - if (src == NULL) - src = "."; - - snprintf(cert_dir, sizeof(cert_dir), "%s/%s", src, CERT_DIR); - - if (*dirp == NULL) { - *dirp = opendir(cert_dir); - if (*dirp == NULL) - return -1; - } - - do { - d = readdir(*dirp); - if (d != NULL -#ifdef _DIRENT_HAVE_D_TYPE - && d->d_type == DT_REG -#endif - ) { - if (strstr(d->d_name, ".raw") == 0) - continue; - snprintf(path, sizeof(path), "%s/%s", cert_dir, d->d_name); - - success("Loading %s\n", path); - ret = gnutls_load_file(path, der); - if (ret < 0) { - return -1; - } - - return 0; - } - } while(d != NULL); - - closedir(*dirp); - return -1; /* finished */ -} - -#include "../devel/fuzz/gnutls_server_fuzzer.cc" - -void doit(void) -{ - int ret; - gnutls_datum_t raw; - DIR *dirp = NULL; - - ret = global_init(); - if (ret < 0) - fail("init %d\n", ret); - - while (getnext(&dirp, &raw)==0) { - LLVMFuzzerTestOneInput(raw.data, raw.size); - gnutls_free(raw.data); - raw.data = NULL; - raw.size = 0; - } - - gnutls_global_deinit(); -} diff --git a/tests/server_ecdsa_key.c b/tests/server_ecdsa_key.c index 3a8848f90c..1bbd84d075 100644 --- a/tests/server_ecdsa_key.c +++ b/tests/server_ecdsa_key.c @@ -88,8 +88,8 @@ void doit(void) exit(1); } - test_cli_serv_expect(serv_cred, cli_cred, "NORMAL", "NORMAL:-SIGN-ALL", NULL, GNUTLS_E_AGAIN, GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM); - test_cli_serv_expect(serv_cred, cli_cred, "NORMAL", "NORMAL:-SIGN-ECDSA-SHA224:-SIGN-ECDSA-SHA1:-SIGN-ECDSA-SHA256:-SIGN-ECDSA-SHA384:-SIGN-ECDSA-SHA512", NULL, GNUTLS_E_UNKNOWN_PK_ALGORITHM, GNUTLS_E_AGAIN); + test_cli_serv_expect(serv_cred, cli_cred, "NORMAL", "NORMAL:-VERS-TLS1.1:+VERS-TLS1.2:-SIGN-ALL", NULL, 0, 0); + test_cli_serv_expect(serv_cred, cli_cred, "NORMAL", "NORMAL:-SIGN-ECDSA-SHA224:-SIGN-ECDSA-SHA1:-SIGN-ECDSA-SHA256:-SIGN-ECDSA-SHA384:-SIGN-ECDSA-SHA512:-SIGN-ECDSA-SECP256R1-SHA256:-SIGN-ECDSA-SECP384R1-SHA384:-SIGN-ECDSA-SECP521R1-SHA512", NULL, GNUTLS_E_NO_CIPHER_SUITES, GNUTLS_E_AGAIN); gnutls_certificate_free_credentials(serv_cred); gnutls_certificate_free_credentials(cli_cred); diff --git a/tests/session-export-funcs.c b/tests/session-export-funcs.c index 65b554277f..5bf8201611 100644 --- a/tests/session-export-funcs.c +++ b/tests/session-export-funcs.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include "utils.h" #include "eagain-common.h" @@ -44,10 +45,9 @@ static void tls_log_func(int level, const char *str) fprintf(stderr, "%s|<%d>| %s", side, level, str); } -void doit(void) +static +void start(const char *prio) { - global_init(); - int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -61,6 +61,10 @@ void doit(void) char client_random[32]; char server_random[32]; + global_init(); + + success("trying %s\n", prio); + memset(client_random, 1, sizeof(client_random)); memset(server_random, 2, sizeof(server_random)); @@ -79,9 +83,7 @@ void doit(void) gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, - "NORMAL", - NULL); + assert(gnutls_priority_set_direct(server, prio, NULL)>=0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_pull_timeout_function(server, @@ -107,7 +109,7 @@ void doit(void) if (ret < 0) exit(1); - ret = gnutls_priority_set_direct(client, "NORMAL", NULL); + ret = gnutls_priority_set_direct(client, prio, NULL); if (ret < 0) exit(1); @@ -179,4 +181,12 @@ void doit(void) gnutls_certificate_free_credentials(clientx509cred); gnutls_global_deinit(); + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); } diff --git a/tests/session-rdn-read.c b/tests/session-rdn-read.c new file mode 100644 index 0000000000..8ca88ea48f --- /dev/null +++ b/tests/session-rdn-read.c @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" + +/* This tests whether the certificate callback receives the + * corresponding to server certificates relative distinguished names. + */ + +const char *side; + +#define TOTAL_CAS 2 + +#define CA1_PTR &ca3_cert +#define CA2_PTR &ca_cert +gnutls_datum_t ca_dn[TOTAL_CAS]; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static int +cert_callback(gnutls_session_t session, + const gnutls_datum_t * req_ca_rdn, int nreqs, + const gnutls_pk_algorithm_t * pk_algos, + int pk_algos_length, gnutls_pcert_st ** pcert, + unsigned int *pcert_length, gnutls_privkey_t * pkey) +{ + unsigned i; + + if (nreqs != TOTAL_CAS) { + fail("cert_callback: found only %d RDNs\n", nreqs); + } + + for (i = 0;i < TOTAL_CAS;i++) { + if (req_ca_rdn[i].size != ca_dn[i].size) { + fail("CA[%d] size mismatch\n", i); + } + + if (memcmp(req_ca_rdn[i].data, ca_dn[i].data, ca_dn[i].size) != 0) { + fail("CA[%d] data mismatch\n", i); + } + } + + success(" - Both (%d) CAs match\n\n", TOTAL_CAS); + + *pcert_length = 0; + *pkey = NULL; + *pcert = NULL; + + return 0; +} + +static void start(const char *prio) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + + success("testing %s\n", prio); + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(2); + + /* Init server */ + gnutls_certificate_allocate_credentials(&serverx509cred); + + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, &server_cert, &server_key, GNUTLS_X509_FMT_PEM) >= 0); + + assert(gnutls_certificate_set_x509_trust_mem(serverx509cred, CA1_PTR, GNUTLS_X509_FMT_PEM) >= 0); + assert(gnutls_certificate_set_x509_trust_mem(serverx509cred, CA2_PTR, GNUTLS_X509_FMT_PEM) >= 0); + + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); + assert(gnutls_priority_set_direct(server, + prio, NULL) >= 0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); + + /* Init client */ + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + ret = + gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca3_cert, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); + + gnutls_certificate_set_retrieve_function2(clientx509cred, + cert_callback); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + assert(gnutls_priority_set_direct(client, prio, NULL)>=0); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); + + reset_buffers(); +} + +static void find_dn(const gnutls_datum_t *cert, gnutls_datum_t *dn) +{ + gnutls_x509_crt_t crt; + + assert(gnutls_x509_crt_init(&crt)>=0); + assert(gnutls_x509_crt_import(crt, cert, GNUTLS_X509_FMT_PEM) >= 0); + assert(gnutls_x509_crt_get_raw_dn(crt, dn) >= 0); + gnutls_x509_crt_deinit(crt); +} + +void doit(void) +{ + find_dn(CA1_PTR, &ca_dn[0]); + find_dn(CA2_PTR, &ca_dn[1]); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3"); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2"); + gnutls_free(ca_dn[0].data); + gnutls_free(ca_dn[1].data); +} diff --git a/tests/session-tickets-missing.c b/tests/session-tickets-missing.c index cff4258ed0..8b7b9ffda9 100644 --- a/tests/session-tickets-missing.c +++ b/tests/session-tickets-missing.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 Red Hat, Inc + * Copyright (C) 2016-2018 Red Hat, Inc * * Author: Nikos Mavrogiannopoulos * @@ -15,9 +15,9 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * */ #ifdef HAVE_CONFIG_H @@ -55,7 +55,10 @@ int main() static void terminate(void); /* This program tests that handshakes do not include a session ticket - * if the flag GNUTLS_NO_TICKETS is specified. + * if the flag GNUTLS_NO_TICKETS is specified under TLS 1.2. + * + * Under TLS 1.3 it verifies that not enabling session tickets doesn't + * result in a ticket being sent. */ static time_t mytime(time_t * t) @@ -91,13 +94,15 @@ static int handshake_callback(gnutls_session_t session, unsigned int htype, #define MAX_BUF 1024 -static void client(int fd) +static void client(int fd, const char *prio, unsigned int flags) { int ret; gnutls_certificate_credentials_t x509_cred; gnutls_session_t session; /* Need to enable anonymous KX specifically. */ + flags |= GNUTLS_CLIENT; + gnutls_global_set_time_function(mytime); global_init(); @@ -110,10 +115,9 @@ static void client(int fd) /* Initialize TLS session */ - gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_NO_TICKETS); + gnutls_init(&session, flags); - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-RSA", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); /* put the anonymous credentials to the current session */ @@ -169,13 +173,15 @@ static void terminate(void) exit(1); } -static void server(int fd) +static void server(int fd, const char *prio, unsigned int flags) { int ret; char buffer[MAX_BUF + 1]; gnutls_session_t session; gnutls_certificate_credentials_t x509_cred; - gnutls_datum_t skey; + gnutls_datum_t skey = {NULL, 0}; + + flags |= GNUTLS_SERVER; /* this must be called once in the program */ @@ -192,10 +198,12 @@ static void server(int fd) &server_key, GNUTLS_X509_FMT_PEM)>=0); - assert(gnutls_init(&session, GNUTLS_SERVER)>=0); + assert(gnutls_init(&session, flags)>=0); - assert(gnutls_session_ticket_key_generate(&skey)>=0); - assert(gnutls_session_ticket_enable_server(session, &skey) >= 0); + if (!(flags & GNUTLS_NO_TICKETS)) { + assert(gnutls_session_ticket_key_generate(&skey)>=0); + assert(gnutls_session_ticket_enable_server(session, &skey) >= 0); + } gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_NEW_SESSION_TICKET, GNUTLS_HOOK_POST, @@ -204,7 +212,7 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - assert(gnutls_priority_set_direct(session, "NORMAL", NULL)>=0); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -254,11 +262,15 @@ static void ch_handler(int sig) return; } -void doit(void) +static +void start2(const char *prio, const char *sprio, unsigned int flags, unsigned int sflags) { int fd[2]; int ret, status = 0; + success("trying %s\n", prio); + + sent = 0; signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); @@ -278,16 +290,33 @@ void doit(void) if (child) { /* parent */ close(fd[1]); - server(fd[0]); + server(fd[0], sprio, sflags); waitpid(child, &status, 0); check_wait_status(status); } else { close(fd[0]); - client(fd[1]); + client(fd[1], prio, flags); exit(0); } return; } +static +void start(const char *prio, unsigned int flags) +{ + start2(prio, prio, GNUTLS_NO_TICKETS, flags); +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2", 0); + /* Under TLS 1.3 session tickets are not negotiated; they are + * always sent unless server sets GNUTLS_NO_TICKETS... */ + start("NORMAL:-VERS-ALL:+VERS-TLS1.3", GNUTLS_NO_TICKETS); + /* ...or there is no overlap between PSK key exchange modes */ + start2("NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:-DHE-PSK", "NORMAL:-VERS-ALL:+VERS-TLS1.3", 0, 0); + start("NORMAL", GNUTLS_NO_TICKETS); +} + #endif /* _WIN32 */ diff --git a/tests/session-tickets-ok.c b/tests/session-tickets-ok.c index 6ee7a3eaa9..56aae5063c 100644 --- a/tests/session-tickets-ok.c +++ b/tests/session-tickets-ok.c @@ -74,19 +74,19 @@ static int handshake_callback(gnutls_session_t session, unsigned int htype, if (htype != GNUTLS_HANDSHAKE_NEW_SESSION_TICKET) return 0; - success("sent session ticket\n"); + if (debug) + success("sent session ticket\n"); sent = 1; return 0; } #define MAX_BUF 1024 -static void client(int fd) +static void client(int fd, const char *prio) { int ret; gnutls_certificate_credentials_t x509_cred; gnutls_session_t session; - /* Need to enable anonymous KX specifically. */ global_init(); @@ -97,31 +97,19 @@ static void client(int fd) gnutls_certificate_allocate_credentials(&x509_cred); - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-RSA", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); - /* put the anonymous credentials to the current session - */ gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); gnutls_transport_set_int(session, fd); - /* Perform the TLS handshake - */ do { ret = gnutls_handshake(session); } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - if (ret == GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM) { - /* success */ - goto end; - } - if (ret < 0) { fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); terminate(); @@ -137,8 +125,6 @@ static void client(int fd) gnutls_bye(session, GNUTLS_SHUT_WR); - end: - close(fd); gnutls_deinit(session); @@ -158,7 +144,7 @@ static void terminate(void) exit(1); } -static void server(int fd) +static void server(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -193,7 +179,7 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - assert(gnutls_priority_set_direct(session, "NORMAL", NULL)>=0); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -243,11 +229,14 @@ static void ch_handler(int sig) return; } -void doit(void) +static +void start(const char *prio) { int fd[2]; int ret, status = 0; + sent = 0; + success("trying %s\n", prio); signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); @@ -267,16 +256,23 @@ void doit(void) if (child) { /* parent */ close(fd[1]); - server(fd[0]); + server(fd[0], prio); waitpid(child, &status, 0); check_wait_status(status); } else { close(fd[0]); - client(fd[1]); + client(fd[1], prio); exit(0); } return; } +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); +} + #endif /* _WIN32 */ diff --git a/tests/set-default-prio.c b/tests/set-default-prio.c new file mode 100644 index 0000000000..59b3d873ea --- /dev/null +++ b/tests/set-default-prio.c @@ -0,0 +1,297 @@ +/* + * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Simon Josefsson, Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" + +const char *side; +extern const char *_gnutls_default_priority_string; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +struct test_st { + const char *name; + const char *add_prio; + const char *def_prio; + int exp_err; + unsigned err_pos; + unsigned exp_vers; + int exp_etm; +}; + +static void start(struct test_st *test) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + const char *ep; + int cret = GNUTLS_E_AGAIN; + + if (test == NULL) + success("running gnutls_set_default_priority test\n"); + else + success("running %s\n", test->name); + + if (test && test->def_prio) + _gnutls_default_priority_string = test->def_prio; + else + _gnutls_default_priority_string = "NORMAL"; + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&server, GNUTLS_SERVER) >= 0); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + if (test == NULL) { + ret = gnutls_set_default_priority(server); + if (ret < 0) + fail("error: %s\n", gnutls_strerror(ret)); + } else { + ret = gnutls_set_default_priority_append(server, test->add_prio, &ep, 0); + if (ret < 0) { + if (test->exp_err == ret) { + /* the &ep value is only accurate when the default priorities are not overridden; + * otherwise it should be a pointer to the start of the string */ + if (strchr(_gnutls_default_priority_string, '@') != 0) { + if (ep != test->add_prio) { + fail("error expected error on start of string[%d]: %s\n", + test->err_pos, test->add_prio); + } + } else { + if (ep-test->add_prio != test->err_pos) { + fprintf(stderr, "diff: %d\n", (int)(ep-test->add_prio)); + fail("error expected error on different position[%d]: %s\n", + test->err_pos, test->add_prio); + } + } + goto cleanup; + } + fail("error: %s\n", gnutls_strerror(ret)); + } + } + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_set_default_priority(client); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + /* check gnutls_certificate_get_ours() - client side */ + { + const gnutls_datum_t *mcert; + + mcert = gnutls_certificate_get_ours(client); + if (mcert != NULL) { + fail("gnutls_certificate_get_ours(): failed\n"); + exit(1); + } + } + + if (test && test->exp_vers != 0) { + if (test->exp_vers != gnutls_protocol_get_version(server)) { + fail("expected version %s, got %s\n", + gnutls_protocol_get_name(test->exp_vers), + gnutls_protocol_get_name(gnutls_protocol_get_version(server))); + } + } + + /* check the number of certificates received */ + { + unsigned cert_list_size = 0; + gnutls_typed_vdata_st data[2]; + unsigned status; + + memset(data, 0, sizeof(data)); + + data[0].type = GNUTLS_DT_DNS_HOSTNAME; + data[0].data = (void*)"localhost1"; + + data[1].type = GNUTLS_DT_KEY_PURPOSE_OID; + data[1].data = (void*)GNUTLS_KP_TLS_WWW_SERVER; + + gnutls_certificate_get_peers(client, &cert_list_size); + if (cert_list_size < 2) { + fprintf(stderr, "received a certificate list of %d!\n", cert_list_size); + exit(1); + } + + ret = gnutls_certificate_verify_peers(client, data, 2, &status); + if (ret < 0) { + fprintf(stderr, "could not verify certificate: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (status == 0) { + fprintf(stderr, "should not have accepted!\n"); + exit(1); + } + + data[0].type = GNUTLS_DT_DNS_HOSTNAME; + data[0].data = (void*)"localhost"; + + ret = gnutls_certificate_verify_peers(client, data, 2, &status); + if (ret < 0) { + fprintf(stderr, "could not verify certificate: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (status != 0) { + fprintf(stderr, "could not verify certificate: %.4x\n", status); + exit(1); + } + } + + if (test && test->exp_etm) { + ret = gnutls_session_ext_master_secret_status(client); + if (ret != 1) { + fprintf(stderr, "Extended master secret wasn't negotiated by default (client ret: %d)\n", ret); + exit(1); + } + + ret = gnutls_session_ext_master_secret_status(server); + if (ret != 1) { + fprintf(stderr, "Extended master secret wasn't negotiated by default (server ret: %d)\n", ret); + exit(1); + } + } + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_certificate_free_credentials(clientx509cred); + cleanup: + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + + gnutls_global_deinit(); + reset_buffers(); +} + +struct test_st tests[] = { + { + .name = "additional flag", + .def_prio = "NORMAL", + .add_prio = "%FORCE_ETM", + .exp_err = 0 + }, + { + .name = "additional flag typo1", + .def_prio = "NORMAL", + .add_prio = ":%FORCE_ETM", + .exp_err = GNUTLS_E_INVALID_REQUEST, + .err_pos = 0 + }, + { + .name = "additional flag typo2", + .def_prio = "NORMAL", + .add_prio = "%FORCE_ETM::%NO_TICKETS", + .exp_err = GNUTLS_E_INVALID_REQUEST, + .err_pos = 11 + }, + { + .name = "additional flag typo3", + .def_prio = "NORMAL", + .add_prio = "%FORCE_ETM:%%NO_TICKETS", + .exp_err = GNUTLS_E_INVALID_REQUEST, + .err_pos = 11 + }, + { + .name = "additional flag typo3 (with resolved def prio)", + .def_prio = "@HELLO", + .add_prio = "%FORCE_ETM:%%NO_TICKETS", + .exp_err = GNUTLS_E_INVALID_REQUEST, + .err_pos = 0 + }, + { + .name = "additional flag for version (functional)", + .def_prio = "NORMAL", + .add_prio = "-VERS-ALL:+VERS-TLS1.1", + .exp_err = 0, + .exp_etm = 1, + .exp_vers = GNUTLS_TLS1_1 + } +}; + + +void doit(void) +{ + start(NULL); + for (unsigned i=0;i + */ + +/* This test checks the behavior of handshake process if credentials + * are set prior to client hello being received but after gnutls_handshake() + * is called */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include "eagain-common.h" +#include "cert-common.h" +#include "utils.h" + +static unsigned set_cert(gnutls_certificate_credentials_t xcred, const gnutls_datum_t *key, const gnutls_datum_t *cert) +{ + const char *certfile; + FILE *fp; + int ret; + + certfile = get_tmpname(NULL); + + fp = fopen(certfile, "w"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(cert->data, 1, cert->size, fp)>0); + assert(fwrite(key->data, 1, key->size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(xcred, certfile, certfile, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + + /* return index */ + return ret; +} + +static +int handshake_hook_func(gnutls_session_t session, unsigned int htype, + unsigned when, unsigned int incoming, const gnutls_datum_t *msg) +{ + gnutls_certificate_credentials_t xcred; + int idx; + + assert(htype == GNUTLS_HANDSHAKE_CLIENT_HELLO); + assert(when == GNUTLS_HOOK_PRE); + assert(gnutls_certificate_allocate_credentials(&xcred) >= 0); + + gnutls_certificate_set_flags(xcred, GNUTLS_CERTIFICATE_API_V2); + idx = set_cert(xcred, &server_ca3_key, &server_ca3_localhost6_cert_chain); + assert(idx == 0); + + idx = set_cert(xcred, &server_ca3_key, &server_ca3_localhost_cert); + assert(idx == 1); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + xcred); + + return 0; +} + +static void start(const char *prio) +{ + int ret, sret, cret; + gnutls_certificate_credentials_t xcred, clicred; + gnutls_session_t server, client; + + global_init(); + track_temp_files(); + + assert(gnutls_certificate_allocate_credentials(&clicred) >= 0); + + ret = gnutls_certificate_set_x509_trust_mem(clicred, &subca3_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + fail("set_x509_trust_file failed: %s\n", gnutls_strerror(ret)); + + + success("Testing late set of credentials: %s\n", prio); + + assert(gnutls_init(&server, GNUTLS_SERVER) >= 0); + gnutls_handshake_set_hook_function(server, GNUTLS_HANDSHAKE_CLIENT_HELLO, + GNUTLS_HOOK_PRE, handshake_hook_func); + assert(gnutls_priority_set_direct(server, prio, NULL) >= 0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + assert(gnutls_init(&client, GNUTLS_CLIENT)>=0); + + assert(gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clicred) >= 0); + if (ret < 0) + exit(1); + + assert(gnutls_priority_set_direct(client, prio, NULL)>=0); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + assert(gnutls_credentials_get(server, GNUTLS_CRD_CERTIFICATE, (void*)&xcred) >= 0); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(xcred); + gnutls_certificate_free_credentials(clicred); + gnutls_global_deinit(); + delete_temp_files(); +} + +void doit(void) +{ + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3"); + start("NORMAL"); +} diff --git a/tests/set_x509_key_file_ocsp.c b/tests/set_x509_key_file_ocsp.c index 99be433b14..9cb4001393 100644 --- a/tests/set_x509_key_file_ocsp.c +++ b/tests/set_x509_key_file_ocsp.c @@ -47,10 +47,212 @@ static time_t mytime(time_t * t) return then; } -#define RESP1 "\x30\x82\x06\x8C\x0A\x01\x00\xA0\x82\x06\x85\x30\x82\x06\x81\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x01\x04\x82\x06\x72\x30\x82\x06\x6E\x30\x82\x01\x07\xA1\x69\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\x30\x64\x30\x62\x30\x3A\x30\x09\x06\x05\x2B\x0E\x03\x02\x1A\x05\x00\x04\x14\x13\x9D\xA0\x9E\xF4\x32\xAB\x8F\xE2\x89\x56\x67\xFA\xD0\xD4\xE3\x35\x86\x71\xB9\x04\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\x02\x01\x1D\x80\x00\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\xA0\x11\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x39\x32\x38\x5A\xA1\x23\x30\x21\x30\x1F\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x02\x04\x12\x04\x10\x16\x89\x7D\x91\x3A\xB5\x25\xA4\x45\xFE\xC9\xFD\xC2\xE5\x08\xA4\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x4E\xAD\x6B\x2B\xF7\xF2\xBF\xA9\x23\x1E\x3A\x0B\x06\xDB\x55\x53\x2B\x64\x54\x11\x32\xBF\x60\xF7\x4F\xE0\x8E\x9B\xA0\xA2\x4C\x79\xC3\x2A\xE0\x43\xF7\x40\x1A\xDC\xB9\xB4\x25\xEF\x48\x01\x97\x8C\xF5\x1E\xDB\xD1\x30\x37\x73\x69\xD6\xA7\x7A\x2D\x8E\xDE\x5C\xAA\xEA\x39\xB9\x52\xAA\x25\x1E\x74\x7D\xF9\x78\x95\x8A\x92\x1F\x98\x21\xF4\x60\x7F\xD3\x28\xEE\x47\x9C\xBF\xE2\x5D\xF6\x3F\x68\x0A\xD6\xFF\x08\xC1\xDC\x95\x1E\x29\xD7\x3E\x85\xD5\x65\xA4\x4B\xC0\xAF\xC3\x78\xAB\x06\x98\x88\x19\x8A\x64\xA6\x83\x91\x87\x13\xDB\x17\xCC\x46\xBD\xAB\x4E\xC7\x16\xD1\xF8\x35\xFD\x27\xC8\xF6\x6B\xEB\x37\xB8\x08\x6F\xE2\x6F\xB4\x7E\xD5\x68\xDB\x7F\x5D\x5E\x36\x38\xF2\x77\x59\x13\xE7\x3E\x4D\x67\x5F\xDB\xA2\xF5\x5D\x7C\xBF\xBD\xB5\x37\x33\x51\x36\x63\xF8\x21\x1E\xFC\x73\x8F\x32\x69\xBB\x97\xA7\xBD\xF1\xB6\xE0\x40\x09\x68\xEA\xD5\x93\xB8\xBB\x39\x8D\xA8\x16\x1B\xBF\x04\x7A\xBC\x18\x43\x01\xE9\x3C\x19\x5C\x4D\x4B\x98\xD8\x23\x37\x39\xA4\xC4\xDD\xED\x9C\xEC\x37\xAB\x66\x44\x9B\xE7\x5B\x5D\x32\xA2\xDB\xA6\x0B\x3B\x8C\xE1\xF5\xDB\xCB\x7D\x58\xA0\x82\x04\x4B\x30\x82\x04\x47\x30\x82\x04\x43\x30\x82\x03\x2B\xA0\x03\x02\x01\x02\x02\x01\x1E\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x30\x39\x31\x31\x32\x34\x31\x32\x35\x31\x35\x33\x5A\x17\x0D\x31\x34\x31\x31\x32\x33\x31\x32\x35\x31\x35\x33\x5A\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xBC\x05\x3E\x4B\xBE\xC6\xB1\x33\x48\x0E\xC3\xD4\x0C\xEF\x83\x0B\xBD\xBC\x57\x5F\x14\xEF\xF5\x6D\x0B\xFF\xFA\x01\x9C\xFA\x21\x6D\x5C\xAE\x79\x29\x74\xFE\xBD\xAB\x70\x87\x98\x6B\x48\x35\x79\xE3\xE0\xC1\x14\x41\x1F\x0A\xF7\xE7\xA3\xA6\xDA\x6B\xFF\xCD\x74\xE9\x95\x00\x38\xAA\xD6\x3A\x60\xC6\x64\xA1\xE6\x02\x39\x58\x4E\xFD\xF2\x78\x08\x63\xB6\xD7\x7A\x96\x79\x62\x18\x39\xEE\x27\x8D\x3B\xA2\x3D\x48\x88\xDB\x43\xD6\x6A\x77\x20\x6A\x27\x39\x50\xE0\x02\x50\x19\xF2\x7A\xCF\x78\x23\x99\x01\xD4\xE5\xB1\xD1\x31\xE6\x6B\x84\xAF\xD0\x77\x41\x46\x85\xB0\x3B\xE6\x6A\x00\x0F\x3B\x7E\x95\x7F\x59\xA8\x22\xE8\x49\x49\x05\xC8\xCB\x6C\xEE\x47\xA7\x2D\xC9\x74\x5B\xEB\x8C\xD5\x99\xC2\xE2\x70\xDB\xEA\x87\x43\x84\x0E\x4F\x83\x1C\xA6\xEB\x1F\x22\x38\x17\x69\x9B\x72\x12\x95\x48\x71\xB2\x7B\x92\x73\x52\xAB\xE3\x1A\xA5\xD3\xF4\x44\x14\xBA\xC3\x35\xDA\x91\x6C\x7D\xB4\xC2\x00\x07\xD8\x0A\x51\xF1\x0D\x4C\xD9\x7A\xD1\x99\xE6\xA8\x8D\x0A\x80\xA8\x91\xDD\x8A\xA2\x6B\xF6\xDB\xB0\x3E\xC9\x71\xA9\xE0\x39\xC3\xA3\x58\x0D\x87\xD0\xB2\xA7\x9C\xB7\x69\x02\x03\x01\x00\x01\xA3\x82\x01\x1A\x30\x82\x01\x16\x30\x09\x06\x03\x55\x1D\x13\x04\x02\x30\x00\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x03\xA8\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x34\x91\x6E\x91\x32\xBF\x35\x25\x43\xCC\x28\x74\xEF\x82\xC2\x57\x92\x79\x13\x73\x30\x6D\x06\x03\x55\x1D\x23\x04\x66\x30\x64\x80\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\xA1\x49\xA4\x47\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x82\x01\x00\x30\x1E\x06\x03\x55\x1D\x11\x04\x17\x30\x15\x82\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x13\x06\x03\x55\x1D\x25\x04\x0C\x30\x0A\x06\x08\x2B\x06\x01\x05\x05\x07\x03\x09\x30\x39\x06\x03\x55\x1D\x1F\x04\x32\x30\x30\x30\x2E\xA0\x2C\xA0\x2A\x86\x28\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x2F\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x63\x72\x6C\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x01\x01\x00\x6D\x78\xD7\x66\x90\xA6\xEB\xDD\xB5\x09\x48\xA4\xDA\x27\xFA\xAC\xB1\xBC\x8F\x8C\xBE\xCC\x8C\x09\xA2\x40\x0D\x6C\x4A\xAE\x72\x22\x1E\xC8\xAF\x6D\xF1\x12\xAF\xD7\x40\x51\x79\xD4\xDD\xB2\x0C\xDB\x97\x84\xB6\x24\xD5\xF5\xA8\xBB\xC0\x4B\xF9\x7F\x71\xF7\xB0\x65\x42\x4A\x7D\xFE\x76\x7E\x05\xD2\x46\xB8\x7D\xB3\x39\x4C\x5C\xB1\xFA\xB9\xEE\x3B\x70\x33\x39\x57\x1A\xB9\x95\x51\x33\x00\x25\x1B\x4C\xAA\xB4\xA7\x55\xAF\x63\x6D\x6F\x88\x17\x6A\x7F\xB0\x97\xDE\x49\x14\x6A\x27\x6A\xB0\x42\x80\xD6\xA6\x9B\xEF\x04\x5E\x11\x7D\xD5\x8E\x54\x20\xA2\x76\xD4\x66\x58\xAC\x9C\x12\xD3\xF5\xCA\x54\x98\xCA\x21\xEC\xC1\x55\xA1\x2F\x68\x0B\x5D\x04\x50\xD2\x5E\x70\x25\xD8\x13\xD9\x44\x51\x0E\x8A\x42\x08\x18\x84\xE6\x61\xCE\x5A\x7D\x7B\x81\x35\x90\xC3\xD4\x9D\x19\xB6\x37\xEE\x8F\x63\x5C\xDA\xD8\xF0\x64\x60\x39\xEB\x9B\x1C\x54\x66\x75\x76\xB5\x0A\x58\xB9\x3F\x91\xE1\x21\x9C\xA0\x50\x15\x97\xB6\x7E\x41\xBC\xD0\xC4\x21\x4C\xF5\xD7\xF0\x13\xF8\x77\xE9\x74\xC4\x8A\x0E\x20\x17\x32\xAE\x38\xC2\xA5\xA8\x62\x85\x17\xB1\xA2\xD3\x22\x9F\x95\xB7\xA3\x4C" +static const unsigned char _resp[] = { +0x30, 0x82, 0x06, 0x45, 0x0A, 0x01, 0x00, 0xA0, +0x82, 0x06, 0x3E, 0x30, 0x82, 0x06, 0x3A, 0x06, +0x09, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, +0x01, 0x01, 0x04, 0x82, 0x06, 0x2B, 0x30, 0x82, +0x06, 0x27, 0x30, 0x81, 0x9E, 0xA2, 0x16, 0x04, +0x14, 0x1E, 0xA5, 0xBD, 0xCA, 0x59, 0x64, 0x55, +0x85, 0xAC, 0xDA, 0x54, 0x34, 0x23, 0x40, 0xD1, +0xF6, 0xBD, 0xC3, 0xB0, 0xF6, 0x18, 0x0F, 0x32, +0x30, 0x31, 0x37, 0x31, 0x31, 0x31, 0x39, 0x30, +0x39, 0x34, 0x33, 0x34, 0x37, 0x5A, 0x30, 0x73, +0x30, 0x71, 0x30, 0x49, 0x30, 0x09, 0x06, 0x05, +0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, +0x14, 0xD1, 0xB1, 0x64, 0x8B, 0x8C, 0x9F, 0x0D, +0xD1, 0x6B, 0xA3, 0x8A, 0xCD, 0x2B, 0x50, 0x17, +0xD5, 0xF9, 0xCF, 0xC0, 0x64, 0x04, 0x14, 0x5F, +0x60, 0xCF, 0x61, 0x90, 0x55, 0xDF, 0x84, 0x43, +0x14, 0x8A, 0x60, 0x2A, 0xB2, 0xF5, 0x7A, 0xF4, +0x43, 0x18, 0xEF, 0x02, 0x10, 0x28, 0x2E, 0x96, +0xB3, 0x6B, 0x76, 0xD6, 0xD8, 0x52, 0x46, 0xED, +0xBB, 0x31, 0xB2, 0x0C, 0x98, 0x80, 0x00, 0x18, +0x0F, 0x32, 0x30, 0x31, 0x37, 0x31, 0x31, 0x31, +0x39, 0x30, 0x39, 0x34, 0x33, 0x34, 0x37, 0x5A, +0xA0, 0x11, 0x18, 0x0F, 0x32, 0x30, 0x31, 0x37, +0x31, 0x31, 0x32, 0x36, 0x30, 0x39, 0x34, 0x33, +0x34, 0x37, 0x5A, 0x30, 0x0D, 0x06, 0x09, 0x2A, +0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, +0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x54, +0x66, 0x9D, 0x96, 0x6B, 0x9D, 0x71, 0x18, 0x86, +0x90, 0x5D, 0xD9, 0x54, 0x9C, 0xC4, 0x7F, 0x18, +0x51, 0xE9, 0xFE, 0xF3, 0xE6, 0x48, 0x60, 0x89, +0x74, 0xFD, 0xF1, 0x6D, 0xDB, 0x1F, 0x5A, 0x28, +0x3D, 0x16, 0xEA, 0xA6, 0xD6, 0xE0, 0xAA, 0x42, +0xF9, 0x5B, 0x76, 0xA1, 0x59, 0xDA, 0x30, 0x8D, +0x08, 0x18, 0xDD, 0x60, 0x39, 0x0B, 0x90, 0x64, +0x11, 0x1E, 0x9D, 0xA2, 0x70, 0x18, 0xAD, 0xC6, +0x27, 0xD3, 0xF1, 0xBA, 0x11, 0x4E, 0xF6, 0x9D, +0x6C, 0xC5, 0xEB, 0xD6, 0xB7, 0x43, 0x9D, 0x32, +0x31, 0xC9, 0x24, 0x19, 0xB9, 0x47, 0x1C, 0x61, +0x09, 0x8F, 0xAA, 0x42, 0x5B, 0xAF, 0x66, 0x0F, +0x23, 0xAA, 0x80, 0xC0, 0x85, 0x7F, 0x00, 0x08, +0xCA, 0x30, 0xE4, 0xC8, 0xDA, 0x2F, 0xC4, 0xD2, +0x7E, 0x86, 0xCC, 0xDA, 0x6D, 0xD4, 0x7E, 0x40, +0x66, 0xD8, 0x5C, 0x27, 0x83, 0xDA, 0x10, 0x8F, +0x91, 0xA8, 0xE6, 0x9D, 0x44, 0x13, 0xF1, 0x04, +0x4E, 0xC9, 0xF9, 0xC8, 0xA2, 0xED, 0x9C, 0x9F, +0x05, 0xDA, 0xFA, 0x4A, 0xEA, 0xD2, 0x72, 0xF9, +0xF1, 0xF6, 0xDB, 0xFF, 0xF8, 0x55, 0x0E, 0x92, +0x75, 0xD6, 0x83, 0xBC, 0x7A, 0x95, 0xBE, 0xBF, +0x8D, 0xD5, 0xA3, 0x23, 0x02, 0x32, 0xF8, 0x60, +0xF7, 0x7C, 0x46, 0xC6, 0x69, 0x7E, 0xB7, 0x23, +0xE1, 0x36, 0xC2, 0xEE, 0xBD, 0xFF, 0x3C, 0x05, +0x5E, 0x07, 0x0C, 0xA6, 0x64, 0x65, 0x82, 0x46, +0xC9, 0x67, 0x73, 0xC9, 0x15, 0xC8, 0xFA, 0x0F, +0x73, 0xB5, 0x48, 0x0F, 0x0E, 0x6F, 0x43, 0xE8, +0x8D, 0x7A, 0x21, 0x88, 0x12, 0x08, 0x37, 0x18, +0x67, 0x66, 0x05, 0xD1, 0x2C, 0x4D, 0xE8, 0xA6, +0x1B, 0x4D, 0x29, 0xD4, 0xEF, 0x79, 0x83, 0xDB, +0xCA, 0x6E, 0xBC, 0xE4, 0xCA, 0x50, 0xB0, 0x73, +0xEF, 0xD6, 0xC7, 0x69, 0xF6, 0x16, 0x1E, 0xA0, +0x82, 0x04, 0x6E, 0x30, 0x82, 0x04, 0x6A, 0x30, +0x82, 0x04, 0x66, 0x30, 0x82, 0x03, 0x4E, 0xA0, +0x03, 0x02, 0x01, 0x02, 0x02, 0x10, 0x6F, 0x93, +0x87, 0x5C, 0x4B, 0x9E, 0x94, 0x93, 0xF8, 0x5F, +0x16, 0xA7, 0x05, 0x86, 0x82, 0x8C, 0x30, 0x0D, +0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, +0x01, 0x01, 0x0B, 0x05, 0x00, 0x30, 0x7E, 0x31, +0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, +0x13, 0x02, 0x55, 0x53, 0x31, 0x1D, 0x30, 0x1B, +0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x14, 0x53, +0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x20, +0x43, 0x6F, 0x72, 0x70, 0x6F, 0x72, 0x61, 0x74, +0x69, 0x6F, 0x6E, 0x31, 0x1F, 0x30, 0x1D, 0x06, +0x03, 0x55, 0x04, 0x0B, 0x13, 0x16, 0x53, 0x79, +0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x20, 0x54, +0x72, 0x75, 0x73, 0x74, 0x20, 0x4E, 0x65, 0x74, +0x77, 0x6F, 0x72, 0x6B, 0x31, 0x2F, 0x30, 0x2D, +0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x26, 0x53, +0x79, 0x6D, 0x61, 0x6E, 0x74, 0x65, 0x63, 0x20, +0x43, 0x6C, 0x61, 0x73, 0x73, 0x20, 0x33, 0x20, +0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x53, +0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x43, 0x41, +0x20, 0x2D, 0x20, 0x47, 0x34, 0x30, 0x1E, 0x17, +0x0D, 0x31, 0x37, 0x31, 0x30, 0x31, 0x30, 0x30, +0x30, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x17, 0x0D, +0x31, 0x38, 0x30, 0x31, 0x30, 0x38, 0x32, 0x33, +0x35, 0x39, 0x35, 0x39, 0x5A, 0x30, 0x40, 0x31, +0x3E, 0x30, 0x3C, 0x06, 0x03, 0x55, 0x04, 0x03, +0x13, 0x35, 0x53, 0x79, 0x6D, 0x61, 0x6E, 0x74, +0x65, 0x63, 0x20, 0x43, 0x6C, 0x61, 0x73, 0x73, +0x20, 0x33, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, +0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, +0x20, 0x43, 0x41, 0x20, 0x2D, 0x20, 0x47, 0x34, +0x20, 0x4F, 0x43, 0x53, 0x50, 0x20, 0x52, 0x65, +0x73, 0x70, 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x30, +0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, +0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, +0x05, 0x00, 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, +0x82, 0x01, 0x0A, 0x02, 0x82, 0x01, 0x01, 0x00, +0xBA, 0xB1, 0x3E, 0xBD, 0xF0, 0x1E, 0x19, 0x16, +0xEA, 0x20, 0x44, 0x73, 0x1F, 0xD8, 0x85, 0x17, +0xC4, 0xBF, 0x86, 0xF0, 0x75, 0x46, 0x02, 0xA8, +0x5B, 0x7F, 0xA8, 0xF8, 0xB2, 0x08, 0x08, 0x55, +0x01, 0xDD, 0x5B, 0xA4, 0x0B, 0xBD, 0x8A, 0x0A, +0x87, 0x90, 0x62, 0x21, 0x59, 0x67, 0x33, 0x36, +0x77, 0x49, 0xAB, 0x69, 0x4B, 0xDB, 0xB8, 0xFC, +0x27, 0xA9, 0x81, 0x4A, 0x1F, 0x5F, 0x7D, 0x5C, +0xC2, 0xE6, 0x54, 0x12, 0xFB, 0xA7, 0xEB, 0x9F, +0xB5, 0xAC, 0x05, 0xBE, 0xA9, 0x58, 0xAA, 0x49, +0x32, 0xEE, 0x73, 0xE8, 0x2F, 0xB1, 0xD3, 0x2E, +0x13, 0xBC, 0x26, 0x23, 0xA0, 0x82, 0xD4, 0x25, +0x20, 0x34, 0xAE, 0x16, 0x48, 0xFB, 0x55, 0x2B, +0x58, 0xC9, 0xC4, 0x84, 0xAC, 0xF7, 0xC4, 0x78, +0x62, 0xB7, 0xBF, 0xA2, 0x32, 0xC7, 0x34, 0x1C, +0xDF, 0x9E, 0xFE, 0xA8, 0x04, 0x85, 0xAF, 0xCB, +0x5A, 0xD6, 0xC6, 0x68, 0x9F, 0x28, 0x03, 0xB7, +0x98, 0x8E, 0xD4, 0xA5, 0xE1, 0x18, 0xD1, 0x64, +0x79, 0x67, 0x04, 0x33, 0x6C, 0x4B, 0xE0, 0xCF, +0x34, 0xFC, 0x81, 0x27, 0x98, 0x16, 0xBB, 0xA3, +0x9F, 0xE1, 0x4D, 0x2B, 0x71, 0x21, 0x41, 0x90, +0xFF, 0x20, 0xB8, 0x4A, 0xCF, 0xB2, 0x2D, 0xB1, +0xF8, 0x89, 0x40, 0xBC, 0xB3, 0x9F, 0x94, 0x1C, +0xF4, 0x68, 0xEA, 0x7B, 0x31, 0x29, 0xDA, 0x71, +0xCC, 0x37, 0x9A, 0xF9, 0x36, 0x0B, 0x58, 0x11, +0x6F, 0x28, 0x14, 0x6F, 0xAF, 0x57, 0x6B, 0xD7, +0xBD, 0x36, 0x98, 0xF4, 0x6C, 0x84, 0xF8, 0x48, +0xF1, 0xBF, 0x88, 0xEB, 0x5C, 0x06, 0x8B, 0x02, +0xF1, 0xDF, 0x6A, 0xFD, 0x61, 0xCF, 0x05, 0x5E, +0xB5, 0x99, 0x85, 0x31, 0x41, 0x1D, 0xE5, 0x67, +0x5C, 0x83, 0xA2, 0xBA, 0x9C, 0x9C, 0x37, 0x44, +0xEF, 0xBC, 0x0E, 0xDE, 0xBF, 0x91, 0x5B, 0x1F, +0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x82, 0x01, +0x1C, 0x30, 0x82, 0x01, 0x18, 0x30, 0x0F, 0x06, +0x09, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, +0x01, 0x05, 0x04, 0x02, 0x05, 0x00, 0x30, 0x22, +0x06, 0x03, 0x55, 0x1D, 0x11, 0x04, 0x1B, 0x30, +0x19, 0xA4, 0x17, 0x30, 0x15, 0x31, 0x13, 0x30, +0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0A, +0x54, 0x47, 0x56, 0x2D, 0x45, 0x2D, 0x33, 0x32, +0x35, 0x36, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, +0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x5F, +0x60, 0xCF, 0x61, 0x90, 0x55, 0xDF, 0x84, 0x43, +0x14, 0x8A, 0x60, 0x2A, 0xB2, 0xF5, 0x7A, 0xF4, +0x43, 0x18, 0xEF, 0x30, 0x1D, 0x06, 0x03, 0x55, +0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x1E, 0xA5, +0xBD, 0xCA, 0x59, 0x64, 0x55, 0x85, 0xAC, 0xDA, +0x54, 0x34, 0x23, 0x40, 0xD1, 0xF6, 0xBD, 0xC3, +0xB0, 0xF6, 0x30, 0x0C, 0x06, 0x03, 0x55, 0x1D, +0x13, 0x01, 0x01, 0xFF, 0x04, 0x02, 0x30, 0x00, +0x30, 0x6E, 0x06, 0x03, 0x55, 0x1D, 0x20, 0x04, +0x67, 0x30, 0x65, 0x30, 0x63, 0x06, 0x0B, 0x60, +0x86, 0x48, 0x01, 0x86, 0xF8, 0x45, 0x01, 0x07, +0x17, 0x03, 0x30, 0x54, 0x30, 0x26, 0x06, 0x08, +0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x01, +0x16, 0x1A, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, +0x2F, 0x77, 0x77, 0x77, 0x2E, 0x73, 0x79, 0x6D, +0x61, 0x75, 0x74, 0x68, 0x2E, 0x63, 0x6F, 0x6D, +0x2F, 0x63, 0x70, 0x73, 0x30, 0x2A, 0x06, 0x08, +0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x02, 0x02, +0x30, 0x1E, 0x1A, 0x1C, 0x20, 0x20, 0x68, 0x74, +0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, +0x2E, 0x73, 0x79, 0x6D, 0x61, 0x75, 0x74, 0x68, +0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x72, 0x70, 0x61, +0x30, 0x13, 0x06, 0x03, 0x55, 0x1D, 0x25, 0x04, +0x0C, 0x30, 0x0A, 0x06, 0x08, 0x2B, 0x06, 0x01, +0x05, 0x05, 0x07, 0x03, 0x09, 0x30, 0x0E, 0x06, +0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, +0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x0D, 0x06, +0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, +0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, +0x00, 0x45, 0xFF, 0xCA, 0xD2, 0xAC, 0x71, 0xBE, +0xA5, 0x62, 0x86, 0x93, 0x30, 0xD0, 0xE5, 0xE5, +0x87, 0xFC, 0xAA, 0x29, 0x73, 0x36, 0xD6, 0x66, +0x33, 0xC4, 0xCB, 0xC5, 0x6E, 0xC6, 0x2C, 0x8C, +0x8E, 0xEE, 0x4D, 0xC2, 0xFA, 0xB3, 0xC0, 0xE7, +0x11, 0x02, 0x69, 0x7A, 0xC5, 0x89, 0x28, 0x86, +0x31, 0xD5, 0x14, 0x43, 0x5A, 0x20, 0xB7, 0xBD, +0x1C, 0x0B, 0x1C, 0x3C, 0x84, 0x58, 0xBA, 0x56, +0x14, 0x5B, 0xB8, 0x38, 0x97, 0x18, 0x66, 0xD6, +0x12, 0x51, 0x4B, 0x5A, 0x2D, 0x0D, 0x00, 0xA7, +0xBA, 0x5A, 0xC9, 0x0C, 0x4B, 0x10, 0xDE, 0xF5, +0xAE, 0x56, 0xA5, 0x24, 0xC6, 0x3E, 0x5E, 0xD9, +0xF1, 0x39, 0x76, 0x0C, 0xD7, 0x4A, 0xBF, 0x19, +0x1F, 0x14, 0xA4, 0x18, 0xEC, 0x0F, 0x5D, 0x47, +0x00, 0x75, 0xF0, 0x4E, 0xB3, 0xA1, 0xB4, 0x81, +0x7B, 0x97, 0xAC, 0x0A, 0xA8, 0x5E, 0x92, 0xCC, +0xB0, 0x80, 0x53, 0x66, 0xFF, 0xC6, 0x1B, 0x71, +0xAF, 0xE3, 0x46, 0x55, 0x9D, 0x26, 0x51, 0x97, +0xB0, 0x66, 0x9D, 0x06, 0x70, 0xC5, 0x04, 0x78, +0xBC, 0x99, 0x42, 0xBA, 0x77, 0x82, 0x0E, 0xE8, +0x92, 0x18, 0x4A, 0x72, 0x92, 0x13, 0x25, 0x7F, +0x40, 0x15, 0xF7, 0xA8, 0x07, 0xA2, 0xAD, 0x03, +0xBA, 0x1C, 0xF2, 0x93, 0xBE, 0x14, 0x72, 0x69, +0x2B, 0x85, 0xAC, 0x2E, 0x2C, 0xBF, 0x1C, 0xC6, +0x6C, 0x91, 0xF3, 0x2F, 0xF0, 0xB0, 0x8A, 0xC3, +0xB8, 0xAC, 0x9B, 0xD1, 0xA1, 0x4C, 0xB7, 0x34, +0xCA, 0xC6, 0x90, 0x15, 0xA7, 0x39, 0xB4, 0xF1, +0xED, 0x54, 0x53, 0x5C, 0x29, 0x6F, 0xCE, 0x97, +0x3E, 0x72, 0x79, 0x24, 0xEA, 0xC8, 0x87, 0x21, +0x5F, 0x40, 0xBF, 0x53, 0x37, 0x8E, 0xCA, 0x0B, +0x44, 0xD0, 0x4B, 0x6E, 0xAD, 0x94, 0xFB, 0x0F, +0x33, 0xFE, 0x86, 0xDF, 0x4C, 0xE9, 0x94, 0xBB, +0x3F }; static gnutls_datum_t ocsp_resp1 = - { (unsigned char *) RESP1, sizeof(RESP1) - 1 }; + { (unsigned char *) _resp, sizeof(_resp) }; static void check_response(gnutls_session_t session, void *priv) { @@ -72,6 +274,17 @@ static void check_response(gnutls_session_t session, void *priv) if (resp.size != exp_resp->size || memcmp(resp.data, exp_resp->data, resp.size) != 0) { fail("did not receive the expected response\n"); } + + /* we provide a response, but an invalid one */ + ret = gnutls_ocsp_status_request_is_checked(session, 0); + if (ret != 0) { + fail("did not receive the expected value (%d)\n", ret); + } + + ret = gnutls_ocsp_status_request_is_checked(session, GNUTLS_OCSP_SR_IS_AVAIL); + if (ret == 0) { + fail("did not receive the expected value (%d)\n", ret); + } } void doit(void) @@ -82,6 +295,7 @@ void doit(void) const char *certfile; const char *ocspfile1; char certname[TMPNAME_SIZE], ocspname1[TMPNAME_SIZE]; + time_t t; FILE *fp; global_init(); @@ -112,18 +326,33 @@ void doit(void) assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); fclose(fp); + gnutls_certificate_set_flags(xcred, GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK); + /* set OCSP response */ ocspfile1 = get_tmpname(ocspname1); - ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile1, 0); - if (ret < 0) - fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); - fp = fopen(ocspfile1, "wb"); if (fp == NULL) fail("error in fopen\n"); assert(fwrite(ocsp_resp1.data, 1, ocsp_resp1.size, fp)>0); fclose(fp); + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile1, 0); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + t = gnutls_certificate_get_ocsp_expiration(xcred, 0, 0, 0); + if (t != 1511689427) + fail("error in OCSP validity time: %ld\n", (long int)t); + + t = gnutls_certificate_get_ocsp_expiration(xcred, 0, 1, 0); + if (t != -1) + fail("error in OCSP validity time: %ld\n", (long int)t); + + t = gnutls_certificate_get_ocsp_expiration(xcred, 0, -1, 0); + if (t != 1511689427) + fail("error in OCSP validity time: %ld\n", (long int)t); + + /* make sure that our invalid OCSP responses are not considered in verification */ gnutls_certificate_set_verify_flags(clicred, GNUTLS_VERIFY_DISABLE_CRL_CHECKS); @@ -135,7 +364,9 @@ void doit(void) fail("error in setting trust cert: %s\n", gnutls_strerror(ret)); } - test_cli_serv(xcred, clicred, "NORMAL", "localhost", &ocsp_resp1, check_response, NULL); /* the DNS name of the first cert */ + test_cli_serv(xcred, clicred, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2", "localhost", &ocsp_resp1, check_response, NULL); /* the DNS name of the first cert */ + + test_cli_serv(xcred, clicred, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", "localhost", &ocsp_resp1, check_response, NULL); /* the DNS name of the first cert */ gnutls_certificate_free_credentials(xcred); gnutls_certificate_free_credentials(clicred); diff --git a/tests/set_x509_key_file_ocsp_multi.c b/tests/set_x509_key_file_ocsp_multi.c deleted file mode 100644 index b2847055e0..0000000000 --- a/tests/set_x509_key_file_ocsp_multi.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright (C) 2016 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include - -#ifdef ENABLE_OCSP - -#include "cert-common.h" -#include "utils.h" - -/* Tests whether setting an OCSP response to a server with multiple - * certificate sets, is working as expected */ - -static time_t mytime(time_t * t) -{ - time_t then = 1469186559; - if (t) - *t = then; - - return then; -} - -#define RESP1 "\x30\x82\x06\x8C\x0A\x01\x00\xA0\x82\x06\x85\x30\x82\x06\x81\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x01\x04\x82\x06\x72\x30\x82\x06\x6E\x30\x82\x01\x07\xA1\x69\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\x30\x64\x30\x62\x30\x3A\x30\x09\x06\x05\x2B\x0E\x03\x02\x1A\x05\x00\x04\x14\x13\x9D\xA0\x9E\xF4\x32\xAB\x8F\xE2\x89\x56\x67\xFA\xD0\xD4\xE3\x35\x86\x71\xB9\x04\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\x02\x01\x1D\x80\x00\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\xA0\x11\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x39\x32\x38\x5A\xA1\x23\x30\x21\x30\x1F\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x02\x04\x12\x04\x10\x16\x89\x7D\x91\x3A\xB5\x25\xA4\x45\xFE\xC9\xFD\xC2\xE5\x08\xA4\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x4E\xAD\x6B\x2B\xF7\xF2\xBF\xA9\x23\x1E\x3A\x0B\x06\xDB\x55\x53\x2B\x64\x54\x11\x32\xBF\x60\xF7\x4F\xE0\x8E\x9B\xA0\xA2\x4C\x79\xC3\x2A\xE0\x43\xF7\x40\x1A\xDC\xB9\xB4\x25\xEF\x48\x01\x97\x8C\xF5\x1E\xDB\xD1\x30\x37\x73\x69\xD6\xA7\x7A\x2D\x8E\xDE\x5C\xAA\xEA\x39\xB9\x52\xAA\x25\x1E\x74\x7D\xF9\x78\x95\x8A\x92\x1F\x98\x21\xF4\x60\x7F\xD3\x28\xEE\x47\x9C\xBF\xE2\x5D\xF6\x3F\x68\x0A\xD6\xFF\x08\xC1\xDC\x95\x1E\x29\xD7\x3E\x85\xD5\x65\xA4\x4B\xC0\xAF\xC3\x78\xAB\x06\x98\x88\x19\x8A\x64\xA6\x83\x91\x87\x13\xDB\x17\xCC\x46\xBD\xAB\x4E\xC7\x16\xD1\xF8\x35\xFD\x27\xC8\xF6\x6B\xEB\x37\xB8\x08\x6F\xE2\x6F\xB4\x7E\xD5\x68\xDB\x7F\x5D\x5E\x36\x38\xF2\x77\x59\x13\xE7\x3E\x4D\x67\x5F\xDB\xA2\xF5\x5D\x7C\xBF\xBD\xB5\x37\x33\x51\x36\x63\xF8\x21\x1E\xFC\x73\x8F\x32\x69\xBB\x97\xA7\xBD\xF1\xB6\xE0\x40\x09\x68\xEA\xD5\x93\xB8\xBB\x39\x8D\xA8\x16\x1B\xBF\x04\x7A\xBC\x18\x43\x01\xE9\x3C\x19\x5C\x4D\x4B\x98\xD8\x23\x37\x39\xA4\xC4\xDD\xED\x9C\xEC\x37\xAB\x66\x44\x9B\xE7\x5B\x5D\x32\xA2\xDB\xA6\x0B\x3B\x8C\xE1\xF5\xDB\xCB\x7D\x58\xA0\x82\x04\x4B\x30\x82\x04\x47\x30\x82\x04\x43\x30\x82\x03\x2B\xA0\x03\x02\x01\x02\x02\x01\x1E\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x30\x39\x31\x31\x32\x34\x31\x32\x35\x31\x35\x33\x5A\x17\x0D\x31\x34\x31\x31\x32\x33\x31\x32\x35\x31\x35\x33\x5A\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xBC\x05\x3E\x4B\xBE\xC6\xB1\x33\x48\x0E\xC3\xD4\x0C\xEF\x83\x0B\xBD\xBC\x57\x5F\x14\xEF\xF5\x6D\x0B\xFF\xFA\x01\x9C\xFA\x21\x6D\x5C\xAE\x79\x29\x74\xFE\xBD\xAB\x70\x87\x98\x6B\x48\x35\x79\xE3\xE0\xC1\x14\x41\x1F\x0A\xF7\xE7\xA3\xA6\xDA\x6B\xFF\xCD\x74\xE9\x95\x00\x38\xAA\xD6\x3A\x60\xC6\x64\xA1\xE6\x02\x39\x58\x4E\xFD\xF2\x78\x08\x63\xB6\xD7\x7A\x96\x79\x62\x18\x39\xEE\x27\x8D\x3B\xA2\x3D\x48\x88\xDB\x43\xD6\x6A\x77\x20\x6A\x27\x39\x50\xE0\x02\x50\x19\xF2\x7A\xCF\x78\x23\x99\x01\xD4\xE5\xB1\xD1\x31\xE6\x6B\x84\xAF\xD0\x77\x41\x46\x85\xB0\x3B\xE6\x6A\x00\x0F\x3B\x7E\x95\x7F\x59\xA8\x22\xE8\x49\x49\x05\xC8\xCB\x6C\xEE\x47\xA7\x2D\xC9\x74\x5B\xEB\x8C\xD5\x99\xC2\xE2\x70\xDB\xEA\x87\x43\x84\x0E\x4F\x83\x1C\xA6\xEB\x1F\x22\x38\x17\x69\x9B\x72\x12\x95\x48\x71\xB2\x7B\x92\x73\x52\xAB\xE3\x1A\xA5\xD3\xF4\x44\x14\xBA\xC3\x35\xDA\x91\x6C\x7D\xB4\xC2\x00\x07\xD8\x0A\x51\xF1\x0D\x4C\xD9\x7A\xD1\x99\xE6\xA8\x8D\x0A\x80\xA8\x91\xDD\x8A\xA2\x6B\xF6\xDB\xB0\x3E\xC9\x71\xA9\xE0\x39\xC3\xA3\x58\x0D\x87\xD0\xB2\xA7\x9C\xB7\x69\x02\x03\x01\x00\x01\xA3\x82\x01\x1A\x30\x82\x01\x16\x30\x09\x06\x03\x55\x1D\x13\x04\x02\x30\x00\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x03\xA8\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x34\x91\x6E\x91\x32\xBF\x35\x25\x43\xCC\x28\x74\xEF\x82\xC2\x57\x92\x79\x13\x73\x30\x6D\x06\x03\x55\x1D\x23\x04\x66\x30\x64\x80\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\xA1\x49\xA4\x47\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x82\x01\x00\x30\x1E\x06\x03\x55\x1D\x11\x04\x17\x30\x15\x82\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x13\x06\x03\x55\x1D\x25\x04\x0C\x30\x0A\x06\x08\x2B\x06\x01\x05\x05\x07\x03\x09\x30\x39\x06\x03\x55\x1D\x1F\x04\x32\x30\x30\x30\x2E\xA0\x2C\xA0\x2A\x86\x28\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x2F\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x63\x72\x6C\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x01\x01\x00\x6D\x78\xD7\x66\x90\xA6\xEB\xDD\xB5\x09\x48\xA4\xDA\x27\xFA\xAC\xB1\xBC\x8F\x8C\xBE\xCC\x8C\x09\xA2\x40\x0D\x6C\x4A\xAE\x72\x22\x1E\xC8\xAF\x6D\xF1\x12\xAF\xD7\x40\x51\x79\xD4\xDD\xB2\x0C\xDB\x97\x84\xB6\x24\xD5\xF5\xA8\xBB\xC0\x4B\xF9\x7F\x71\xF7\xB0\x65\x42\x4A\x7D\xFE\x76\x7E\x05\xD2\x46\xB8\x7D\xB3\x39\x4C\x5C\xB1\xFA\xB9\xEE\x3B\x70\x33\x39\x57\x1A\xB9\x95\x51\x33\x00\x25\x1B\x4C\xAA\xB4\xA7\x55\xAF\x63\x6D\x6F\x88\x17\x6A\x7F\xB0\x97\xDE\x49\x14\x6A\x27\x6A\xB0\x42\x80\xD6\xA6\x9B\xEF\x04\x5E\x11\x7D\xD5\x8E\x54\x20\xA2\x76\xD4\x66\x58\xAC\x9C\x12\xD3\xF5\xCA\x54\x98\xCA\x21\xEC\xC1\x55\xA1\x2F\x68\x0B\x5D\x04\x50\xD2\x5E\x70\x25\xD8\x13\xD9\x44\x51\x0E\x8A\x42\x08\x18\x84\xE6\x61\xCE\x5A\x7D\x7B\x81\x35\x90\xC3\xD4\x9D\x19\xB6\x37\xEE\x8F\x63\x5C\xDA\xD8\xF0\x64\x60\x39\xEB\x9B\x1C\x54\x66\x75\x76\xB5\x0A\x58\xB9\x3F\x91\xE1\x21\x9C\xA0\x50\x15\x97\xB6\x7E\x41\xBC\xD0\xC4\x21\x4C\xF5\xD7\xF0\x13\xF8\x77\xE9\x74\xC4\x8A\x0E\x20\x17\x32\xAE\x38\xC2\xA5\xA8\x62\x85\x17\xB1\xA2\xD3\x22\x9F\x95\xB7\xA3\x4C" - -static gnutls_datum_t ocsp_resp1 = - { (unsigned char *) RESP1, sizeof(RESP1) - 1 }; - -#define RESP2 "\x30\x82\x06\x8C\x0A\x01\x00\xA0\x82\x06\x85\x30\x82\x06\x81\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x01\x04\x82\x06\x72\x30\x82\x06\x6E\x30\x82\x01\x07\xA1\x69\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\x30\x64\x30\x62\x30\x3A\x30\x09\x06\x05\x2B\x0E\x03\x02\x1A\x05\x00\x04\x14\x13\x9D\xA0\x9E\xF4\x32\xAB\x8F\xE2\x89\x56\x67\xFA\xD0\xD4\xE3\x35\x86\x71\xB9\x04\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\x02\x01\x1D\x80\x00\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\xA0\x11\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x39\x32\x38\x5A\xA1\x23\x30\x21\x30\x1F\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x02\x04\x12\x04\x10\x16\x89\x7D\x91\x3A\xB5\x25\xA4\x45\xFE\xC9\xFD\xC2\xE5\x08\xA4\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x4E\xAD\x6B\x2B\xF7\xF2\xBF\xA9\x23\x1E\x3A\x0B\x06\xDB\x55\x53\x2B\x64\x54\x11\x32\xBF\x60\xF7\x4F\xE0\x8E\x9B\xA0\xA2\x4C\x79\xC3\x2A\xE0\x43\xF7\x40\x1A\xDC\xB9\xB4\x25\xEF\x48\x01\x97\x8C\xF5\x1E\xDB\xD1\x30\x37\x73\x69\xD6\xA7\x7A\x2D\x8E\xDE\x5C\xAA\xEA\x39\xB9\x52\xAA\x25\x1E\x74\x7D\xF9\x78\x95\x8A\x92\x1F\x98\x21\xF4\x60\x7F\xD3\x28\xEE\x47\x9C\xBF\xE2\x5D\xF6\x3F\x68\x0A\xD6\xFF\x08\xC1\xDC\x95\x1E\x29\xD7\x3E\x85\xD5\x65\xA4\x4B\xC0\xAF\xC3\x78\xAB\x06\x98\x88\x19\x8A\x64\xA6\x83\x91\x87\x13\xDB\x17\xCC\x46\xBD\xAB\x4E\xC7\x16\xD1\xF8\x35\xFD\x27\xC8\xF6\x6B\xEB\x37\xB8\x08\x6F\xE2\x6F\xB4\x7E\xD5\x68\xDB\x7F\x5D\x5E\x36\x38\xF2\x77\x59\x13\xE7\x3E\x4D\x67\x5F\xDB\xA2\xF5\x5D\x7C\xBF\xBD\xB5\x37\x33\x51\x36\x63\xF8\x21\x1E\xFC\x73\x8F\x32\x69\xBB\x97\xA7\xBD\xF1\xB6\xE0\x40\x09\x68\xEA\xD5\x93\xB8\xBB\x39\x8D\xA8\x16\x1B\xBF\x04\x7A\xBC\x18\x43\x01\xE9\x3C\x19\x5C\x4D\x4B\x98\xD8\x23\x37\x39\xA4\xC4\xDD\xED\x9C\xEC\x37\xAB\x66\x44\x9B\xE7\x5B\x5D\x32\xA2\xDB\xA6\x0B\x3B\x8C\xE1\xF5\xDB\xCB\x7D\x58\xA0\x82\x04\x4B\x30\x82\x04\x47\x30\x82\x04\x43\x30\x82\x03\x2B\xA0\x03\x02\x01\x02\x02\x01\x1E\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x30\x39\x31\x31\x32\x34\x31\x32\x35\x31\x35\x33\x5A\x17\x0D\x31\x34\x31\x31\x32\x33\x31\x32\x35\x31\x35\x33\x5A\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xBC\x05\x3E\x4B\xBE\xC6\xB1\x33\x48\x0E\xC3\xD4\x0C\xEF\x83\x0B\xBD\xBC\x57\x5F\x14\xEF\xF5\x6D\x0B\xFF\xFA\x01\x9C\xFA\x21\x6D\x5C\xAE\x79\x29\x74\xFE\xBD\xAB\x70\x87\x98\x6B\x48\x35\x79\xE3\xE0\xC1\x14\x41\x1F\x0A\xF7\xE7\xA3\xA6\xDA\x6B\xFF\xCD\x74\xE9\x95\x00\x38\xAA\xD6\x3A\x60\xC6\x64\xA1\xE6\x02\x39\x58\x4E\xFD\xF2\x78\x08\x63\xB6\xD7\x7A\x96\x79\x62\x18\x39\xEE\x27\x8D\x3B\xA2\x3D\x48\x88\xDB\x43\xD6\x6A\x77\x20\x6A\x27\x39\x50\xE0\x02\x50\x19\xF2\x7A\xCF\x78\x23\x99\x01\xD4\xE5\xB1\xD1\x31\xE6\x6B\x84\xAF\xD0\x77\x41\x46\x85\xB0\x3B\xE6\x6A\x00\x0F\x3B\x7E\x95\x7F\x59\xA8\x22\xE8\x49\x49\x05\xC8\xCB\x6C\xEE\x47\xA7\x2D\xC9\x74\x5B\xEB\x8C\xD5\x99\xC2\xE2\x70\xDB\xEA\x87\x43\x84\x0E\x4F\x83\x1C\xA6\xEB\x1F\x22\x38\x17\x69\x9B\x72\x12\x95\x48\x71\xB2\x7B\x92\x73\x52\xAB\xE3\x1A\xA5\xD3\xF4\x44\x14\xBA\xC3\x35\xDA\x91\x6C\x7D\xB4\xC2\x00\x07\xD8\x0A\x51\xF1\x0D\x4C\xD9\x7A\xD1\x99\xE6\xA8\x8D\x0A\x80\xA8\x91\xDD\x8A\xA2\x6B\xF6\xDB\xB0\x3E\xC9\x71\xA9\xE0\x39\xC3\xA3\x58\x0D\x87\xD0\xB2\xA7\x9C\xB7\x69\x02\x03\x01\x00\x01\xA3\x82\x01\x1A\x30\x82\x01\x16\x30\x09\x06\x03\x55\x1D\x13\x04\x02\x30\x00\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x03\xA8\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x34\x91\x6E\x91\x32\xBF\x35\x25\x43\xCC\x28\x74\xEF\x82\xC2\x57\x92\x79\x13\x73\x30\x6D\x06\x03\x55\x1D\x23\x04\x66\x30\x64\x80\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\xA1\x49\xA4\x47\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x82\x01\x00\x30\x1E\x06\x03\x55\x1D\x11\x04\x17\x30\x15\x82\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x13\x06\x03\x55\x1D\x25\x04\x0C\x30\x0A\x06\x08\x2B\x06\x01\x05\x05\x07\x03\x09\x30\x39\x06\x03\x55\x1D\x1F\x04\x32\x30\x30\x30\x2E\xA0\x2C\xA0\x2A\x86\x28\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x2F\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x63\x72\x6C\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x01\x01\x00\x6D\x78\xD7\x66\x90\xA6\xEB\xDD\xB5\x09\x48\xA4\xDA\x27\xFA\xAC\xB1\xBC\x8F\x8C\xBE\xCC\x8C\x09\xA2\x40\x0D\x6C\x4A\xAE\x72\x22\x1E\xC8\xAF\x6D\xF1\x12\xAF\xD7\x40\x51\x79\xD4\xDD\xB2\x0C\xDB\x97\x84\xB6\x24\xD5\xF5\xA8\xBB\xC0\x4B\xF9\x7F\x71\xF7\xB0\x65\x42\x4A\x7D\xFE\x76\x7E\x05\xD2\x46\xB8\x7D\xB3\x39\x4C\x5C\xB1\xFA\xB9\xEE\x3B\x70\x33\x39\x57\x1A\xB9\x95\x51\x33\x00\x25\x1B\x4C\xAA\xB4\xA7\x55\xAF\x63\x6D\x6F\x88\x17\x6A\x7F\xB0\x97\xDE\x49\x14\x6A\x27\x6A\xB0\x42\x80\xD6\xA6\x9B\xEF\x04\x5E\x11\x7D\xD5\x8E\x54\x20\xA2\x76\xD4\x66\x58\xAC\x9C\x12\xD3\xF5\xCA\x54\x98\xCA\x21\xEC\xC1\x55\xA1\x2F\x68\x0B\x5D\x04\x50\xD2\x5E\x70\x25\xD8\x13\xD9\x44\x51\x0E\x8A\x42\x08\x18\x84\xE6\x61\xCE\x5A\x7D\x7B\x81\x35\x90\xC3\xD4\x9D\x19\xB6\x37\xEE\x8F\x63\x5C\xDA\xD8\xF0\x64\x60\x39\xEB\x9B\x1C\x54\x66\x75\x76\xB5\x0A\x58\xB9\x3F\x91\xE1\x21\x9C\xA0\x50\x15\x97\xB6\x7E\x41\xBC\xD0\xC4\x21\x4C\xF5\xD7\xF0\x13\xF8\x77\xE9\x74\xC4\x8A\x0E\x20\x17\x32\xAE\x38\xC2\xA5\xA8\x62\x85\x17\xB1\xA2\xD3\x22\x9F\x95\xB7\xA3\x4C" - -static gnutls_datum_t ocsp_resp2 = - { (unsigned char *) RESP2, sizeof(RESP2) - 1 }; - -#define RESP3 "\x30\x82\x01\xd3\x0a\x01\x00\xa0\x82\x01\xcc\x30\x82\x01\xc8\x06\x09\x2b\x06\x01\x05\x05\x07\x30\x01\x01\x04\x82\x01\xb9\x30\x82\x01\xb5\x30\x81\x9e\xa2\x16\x04\x14\x50\xea\x73\x89\xdb\x29\xfb\x10\x8f\x9e\xe5\x01\x20\xd4\xde\x79\x99\x48\x83\xf7\x18\x0f\x32\x30\x31\x34\x30\x39\x30\x34\x30\x35\x34\x39\x30\x30\x5a\x30\x73\x30\x71\x30\x49\x30\x09\x06\x05\x2b\x0e\x03\x02\x1a\x05\x00\x04\x14\xed\x48\xad\xdd\xcb\x7b\x00\xe2\x0e\x84\x2a\xa9\xb4\x09\xf1\xac\x30\x34\xcf\x96\x04\x14\x50\xea\x73\x89\xdb\x29\xfb\x10\x8f\x9e\xe5\x01\x20\xd4\xde\x79\x99\x48\x83\xf7\x02\x10\x02\x01\x48\x91\x5d\xfd\x5e\xb6\xe0\x02\x90\xa9\x67\xb0\xe4\x64\x80\x00\x18\x0f\x32\x30\x31\x34\x30\x39\x30\x34\x30\x35\x34\x39\x30\x30\x5a\xa0\x11\x18\x0f\x32\x30\x31\x34\x30\x39\x31\x31\x30\x36\x30\x34\x30\x30\x5a\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x6e\x5e\x5e\x81\xff\x3f\x4d\xc7\x53\xc7\x1b\xf3\xd3\x1d\xdc\x9a\xc7\xce\x77\x2c\x67\x56\x13\x98\x91\x02\x01\x76\xdc\x48\xb2\x1f\x9b\x17\xea\xbf\x2c\x0a\xf5\x1d\x98\x90\x3c\x5f\x55\xc2\xff\x4b\x9a\xbc\xa6\x83\x9e\xab\x2b\xeb\x9d\x01\xea\x3b\x5f\xbe\x03\x29\x70\x63\x2a\xa4\x1d\xa8\xab\x69\xb2\x64\xba\x5d\x73\x91\x5c\x92\xf3\x69\xd4\xc9\x39\x9c\x7c\x7d\xa2\x47\x92\xc2\x56\xfe\xa1\x0d\x4a\x69\xff\xda\x48\xc5\x5e\xd8\xab\x39\x88\x6a\x06\xfa\x07\x57\xd6\x48\xb5\xce\xc9\x5f\xa5\x96\xfe\x37\x18\x5e\x7f\x35\x51\xc1\x9e\x79\x5a\x26\xba\x67\x67\x38\x2a\x80\x75\x42\x99\x68\x3e\xec\x2f\x7e\x2d\xa1\xa6\xbe\x9f\x01\x51\x22\x88\x3a\xc9\x9c\xed\x51\xef\x21\x66\x7e\xa9\xd0\x3f\x13\x9c\xbb\xd2\x94\x14\x6f\x4b\xd9\xc4\xf5\x2c\xf5\x7d\x07\x68\xf3\x51\xac\xda\xc2\x09\x66\xa9\x3d\xed\xad\x02\x4d\x9c\x11\x29\x1a\x54\xfb\x1e\x7e\x36\xf4\xbb\x0d\x08\x8c\x6a\x42\x08\x10\x29\x08\x7c\x56\x0b\x18\x47\xff\x87\x11\xfd\xb2\xfb\xc9\x22\x7f\xe3\x1f\x7b\xf9\x98\xaa\x3a\x32\xb6\x2f\x02\xba\xb6\xc1\xdc\xc3\x5d\xb5\x4b\xae\x5d\x29\x6a\x31\xde\xcd" -static gnutls_datum_t ocsp_resp3 = - { (unsigned char *) RESP3, sizeof(RESP3) - 1 }; - -static void check_response(gnutls_session_t session, void *priv) -{ - int ret; - gnutls_datum_t resp; - gnutls_datum_t *exp_resp = priv; - - ret = gnutls_ocsp_status_request_get(session, &resp); - if (ret < 0) { - if (priv == NULL) - return; - fail("no response was received\n"); - } - - if (priv == NULL) { - fail("not expected response, but received one\n"); - } - - if (resp.size != exp_resp->size || memcmp(resp.data, exp_resp->data, resp.size) != 0) { - fail("did not receive the expected response\n"); - } -} - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "|<%d>| %s", level, str); -} - -void doit(void) -{ - int ret; - gnutls_certificate_credentials_t xcred; - gnutls_certificate_credentials_t clicred; - const char *certfile1; - const char *certfile2; - const char *certfile3; - const char *ocspfile1; - const char *ocspfile2; - const char *ocspfile3; - char certname1[TMPNAME_SIZE], ocspname1[TMPNAME_SIZE]; - char certname2[TMPNAME_SIZE], ocspname2[TMPNAME_SIZE]; - char certname3[TMPNAME_SIZE], ocspname3[TMPNAME_SIZE]; - FILE *fp; - unsigned index1, index2, index3; /* indexes of certs */ - - global_init(); - gnutls_global_set_time_function(mytime); - - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(4711); - - assert(gnutls_certificate_allocate_credentials(&xcred) >= 0); - assert(gnutls_certificate_allocate_credentials(&clicred) >= 0); - - gnutls_certificate_set_flags(xcred, GNUTLS_CERTIFICATE_API_V2); - - certfile1 = get_tmpname(certname1); - - /* set cert with localhost name */ - fp = fopen(certfile1, "wb"); - if (fp == NULL) - fail("error in fopen\n"); - assert(fwrite(server_localhost_ca3_cert_chain_pem, 1, strlen(server_localhost_ca3_cert_chain_pem), fp)>0); - assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); - fclose(fp); - - ret = gnutls_certificate_set_x509_key_file2(xcred, certfile1, certfile1, - GNUTLS_X509_FMT_PEM, NULL, 0); - if (ret < 0) - fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); - index1 = ret; - - /* set cert with localhost6 name */ - certfile2 = get_tmpname(certname2); - - fp = fopen(certfile2, "wb"); - if (fp == NULL) - fail("error in fopen\n"); - assert(fwrite(server_localhost6_ca3_cert_chain_pem, 1, strlen(server_localhost6_ca3_cert_chain_pem), fp)>0); - assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); - fclose(fp); - - ret = gnutls_certificate_set_x509_key_file2(xcred, certfile2, certfile2, - GNUTLS_X509_FMT_PEM, NULL, 0); - if (ret < 0) - fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); - index2 = ret; - - fp = fopen(certfile2, "wb"); - if (fp == NULL) - fail("error in fopen\n"); - assert(fwrite(server_localhost6_ca3_cert_chain_pem, 1, strlen(server_localhost6_ca3_cert_chain_pem), fp)>0); - assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); - fclose(fp); - - /* set ECC cert */ - certfile3 = get_tmpname(certname3); - - fp = fopen(certfile3, "wb"); - if (fp == NULL) - fail("error in fopen\n"); - assert(fwrite(ecc_cert, 1, strlen(ecc_cert), fp)>0); - assert(fwrite(ecc_key, 1, strlen(ecc_key), fp)>0); - fclose(fp); - - ret = gnutls_certificate_set_x509_key_file2(xcred, certfile3, certfile3, - GNUTLS_X509_FMT_PEM, NULL, 0); - if (ret < 0) - fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); - index3 = ret; - - fp = fopen(certfile3, "wb"); - if (fp == NULL) - fail("error in fopen\n"); - assert(fwrite(server_localhost6_ca3_cert_chain_pem, 1, strlen(server_localhost6_ca3_cert_chain_pem), fp)>0); - assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); - fclose(fp); - - /* set OCSP response1 */ - ocspfile1 = get_tmpname(ocspname1); - ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile1, index1); - if (ret < 0) - fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); - - fp = fopen(ocspfile1, "wb"); - if (fp == NULL) - fail("error in fopen\n"); - assert(fwrite(ocsp_resp1.data, 1, ocsp_resp1.size, fp)>0); - fclose(fp); - - /* set OCSP response2 */ - ocspfile2 = get_tmpname(ocspname2); - ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile2, index2); - if (ret < 0) - fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); - - fp = fopen(ocspfile2, "wb"); - if (fp == NULL) - fail("error in fopen\n"); - assert(fwrite(ocsp_resp2.data, 1, ocsp_resp2.size, fp)>0); - fclose(fp); - - /* set OCSP response3 */ - ocspfile3 = get_tmpname(ocspname3); - ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile3, index3); - if (ret < 0) - fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); - - fp = fopen(ocspfile3, "wb"); - if (fp == NULL) - fail("error in fopen\n"); - assert(fwrite(ocsp_resp3.data, 1, ocsp_resp3.size, fp)>0); - fclose(fp); - - /* set an OCSP response outside the bounds */ - assert(gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile3, 34) == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); - - /* make sure that our invalid OCSP responses are not considered in verification - */ - gnutls_certificate_set_verify_flags(clicred, GNUTLS_VERIFY_DISABLE_CRL_CHECKS); - if (gnutls_certificate_get_verify_flags(clicred) != GNUTLS_VERIFY_DISABLE_CRL_CHECKS) - fail("error in gnutls_certificate_set_verify_flags\n"); - - ret = gnutls_certificate_set_x509_trust_mem(clicred, &ca3_cert, GNUTLS_X509_FMT_PEM); - if (ret < 0) { - fail("error in setting trust cert: %s\n", gnutls_strerror(ret)); - } - - test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA", "localhost", &ocsp_resp1, check_response, NULL); - test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA", "localhost6", &ocsp_resp2, check_response, NULL); - test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-RSA:-RSA:-DHE-RSA", NULL, &ocsp_resp3, check_response, NULL); - - gnutls_certificate_free_credentials(xcred); - gnutls_certificate_free_credentials(clicred); - gnutls_global_deinit(); - remove(ocspfile1); - remove(ocspfile2); - remove(ocspfile3); - remove(certfile1); - remove(certfile2); - remove(certfile3); -} - -#else -void doit(void) -{ - exit(77); -} -#endif diff --git a/tests/set_x509_key_file_ocsp_multi2.c b/tests/set_x509_key_file_ocsp_multi2.c index 10c1b81a6f..b8dd927009 100644 --- a/tests/set_x509_key_file_ocsp_multi2.c +++ b/tests/set_x509_key_file_ocsp_multi2.c @@ -219,9 +219,19 @@ void doit(void) fail("error in setting trust cert: %s\n", gnutls_strerror(ret)); } - test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA", "localhost", &ocsp_resp1, check_response, NULL); - test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA", "localhost6", &ocsp_resp2, check_response, NULL); - test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-RSA:-RSA:-DHE-RSA", NULL, &ocsp_resp3, check_response, NULL); + success("TLS1.2 + resp1\n"); + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2", "localhost", &ocsp_resp1, check_response, NULL); + success("TLS1.2 + resp2\n"); + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2", "localhost6", &ocsp_resp2, check_response, NULL); + success("TLS1.2 + resp3\n"); + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-RSA:-RSA:-DHE-RSA:-VERS-TLS-ALL:+VERS-TLS1.2", NULL, &ocsp_resp3, check_response, NULL); + + success("TLS1.3 + resp1\n"); + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3", "localhost", &ocsp_resp1, check_response, NULL); + success("TLS1.3 + resp2\n"); + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3", "localhost6", &ocsp_resp2, check_response, NULL); + success("TLS1.3 + resp3\n"); + test_cli_serv(xcred, clicred, "NORMAL:-SIGN-ALL:+SIGN-ECDSA-SECP256R1-SHA256:-ECDHE-RSA:-RSA:-DHE-RSA:-VERS-TLS-ALL:+VERS-TLS1.3", NULL, &ocsp_resp3, check_response, NULL); gnutls_certificate_free_credentials(xcred); gnutls_certificate_free_credentials(clicred); diff --git a/tests/set_x509_key_utf8.c b/tests/set_x509_key_utf8.c index fc1ba38b23..7753c7f4c9 100644 --- a/tests/set_x509_key_utf8.c +++ b/tests/set_x509_key_utf8.c @@ -175,9 +175,10 @@ void doit(void) test_cli_serv(x509_cred, clicred, "NORMAL", "localhost", NULL, NULL, NULL); test_cli_serv(x509_cred, clicred, "NORMAL", "www.xn--kxawhku.com", NULL, NULL, NULL); /* the previous name in IDNA format */ test_cli_serv(x509_cred, clicred, "NORMAL", "简体中文.εξτρα.com", NULL, NULL, NULL); /* the second DNS name of cert */ - test_cli_serv(x509_cred, clicred, "NORMAL", "raw:简体中文.εξτρα.com", NULL, NULL, NULL); /* the second DNS name of cert */ test_cli_serv(x509_cred, clicred, "NORMAL", "xn--fiqu1az03c18t.xn--mxah1amo.com", NULL, NULL, NULL); /* its IDNA equivalent */ + test_cli_serv_expect(x509_cred, clicred, "NORMAL", "NORMAL", "raw:简体中文.εξτρα.com", GNUTLS_E_RECEIVED_DISALLOWED_NAME, GNUTLS_E_AGAIN); + gnutls_certificate_free_credentials(x509_cred); gnutls_certificate_free_credentials(clicred); diff --git a/tests/set_x509_ocsp_multi_cli.c b/tests/set_x509_ocsp_multi_cli.c new file mode 100644 index 0000000000..ae80ca3b0b --- /dev/null +++ b/tests/set_x509_ocsp_multi_cli.c @@ -0,0 +1,218 @@ +/* + * Copyright (C) 2020 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#ifdef ENABLE_OCSP + +#include "cert-common.h" +#include "ocsp-common.h" +#include "utils.h" + +/* Tests whether setting an OCSP response to a client + * is working as expected */ + +static time_t mytime(time_t * t) +{ + time_t then = OCSP_RESP_DATE; + if (t) + *t = then; + + return then; +} + +static void check_cli(gnutls_session_t session, void *priv) +{ + assert((gnutls_session_get_flags(session) & GNUTLS_SFLAGS_SERV_REQUESTED_OCSP) != 0); +} + +static void check_serv(gnutls_session_t session, void *priv) +{ + int ret; + unsigned int status; + gnutls_datum_t resp; + gnutls_datum_t *exp_resp = priv; + + assert((gnutls_session_get_flags(session) & GNUTLS_SFLAGS_SERV_REQUESTED_OCSP) != 0); + + ret = gnutls_ocsp_status_request_get(session, &resp); + if (ret < 0) { + if (priv == NULL) + return; + fail("no response was received\n"); + } + + if (priv == NULL) { + fail("not expected response, but received one\n"); + } + + if (resp.size != exp_resp->size || memcmp(resp.data, exp_resp->data, resp.size) != 0) { + fail("did not receive the expected response\n"); + } + + /* Check intermediate response */ + if (gnutls_protocol_get_version(session) == GNUTLS_TLS1_3) { + ret = gnutls_ocsp_status_request_get2(session, 1, &resp); + if (ret < 0) { + fail("no intermediate response was received\n"); + } + + if (resp.size != ocsp_subca3_unknown.size || memcmp(resp.data, ocsp_subca3_unknown.data, resp.size) != 0) { + fail("did not receive the expected intermediate response\n"); + } + } + + ret = gnutls_certificate_verify_peers2(session, &status); + if (ret != 0) + fail("error in verification (%s)\n", gnutls_strerror(ret)); + + ret = gnutls_ocsp_status_request_is_checked(session, GNUTLS_OCSP_SR_IS_AVAIL); + if (ret == 0) { + fail("did not receive the expected value (%d)\n", ret); + } + + ret = gnutls_ocsp_status_request_is_checked(session, 0); + if (ret == 0) { + fail("did not receive the expected value (%d)\n", ret); + } +} + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +void doit(void) +{ + int ret; + gnutls_certificate_credentials_t xcred; + gnutls_certificate_credentials_t clicred; + const char *certfile1; + const char *ocspfile1; + char certname1[TMPNAME_SIZE], ocspname1[TMPNAME_SIZE]; + FILE *fp; + unsigned index1; + time_t t; + + global_init(); + gnutls_global_set_time_function(mytime); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + assert(gnutls_certificate_allocate_credentials(&xcred) >= 0); + assert(gnutls_certificate_allocate_credentials(&clicred) >= 0); + + gnutls_certificate_set_flags(xcred, GNUTLS_CERTIFICATE_API_V2); + + certfile1 = get_tmpname(certname1); + + /* set cert with localhost name */ + fp = fopen(certfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(server_localhost_ca3_cert_chain_pem, 1, strlen(server_localhost_ca3_cert_chain_pem), fp)>0); + assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(xcred, certfile1, certfile1, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + + ret = gnutls_certificate_set_x509_key_file2(clicred, certfile1, certfile1, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + index1 = ret; + + /* set OCSP response1, include an unrelated OCSP response */ + ocspfile1 = get_tmpname(ocspname1); + fp = fopen(ocspfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ocsp_subca3_unknown_pem.data, 1, ocsp_subca3_unknown_pem.size, fp)>0); + assert(fwrite(ocsp_ca3_localhost_unknown_pem.data, 1, ocsp_ca3_localhost_unknown_pem.size, fp)>0); + assert(fwrite(ocsp_ca3_localhost6_unknown_pem.data, 1, ocsp_ca3_localhost6_unknown_pem.size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_ocsp_status_request_file2(clicred, ocspfile1, index1, + GNUTLS_X509_FMT_PEM); + if (ret != GNUTLS_E_OCSP_MISMATCH_WITH_CERTS) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* set OCSP response1, include correct responses */ + remove(ocspfile1); + fp = fopen(ocspfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ocsp_subca3_unknown_pem.data, 1, ocsp_subca3_unknown_pem.size, fp)>0); + assert(fwrite(ocsp_ca3_localhost_unknown_pem.data, 1, ocsp_ca3_localhost_unknown_pem.size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_ocsp_status_request_file2(clicred, ocspfile1, index1, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + ret = gnutls_certificate_set_x509_trust_mem(clicred, &ca3_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("error in setting trust cert: %s\n", gnutls_strerror(ret)); + } + + t = gnutls_certificate_get_ocsp_expiration(clicred, 0, 0, 0); + if (t != 1509625639) + fail("error in OCSP validity time: %ld\n", (long int)t); + + t = gnutls_certificate_get_ocsp_expiration(clicred, 0, 1, 0); + if (t != 1509625639) + fail("error in OCSP validity time: %ld\n", (long int)t); + + t = gnutls_certificate_get_ocsp_expiration(clicred, 0, -1, 0); + if (t != 1509625639) + fail("error in OCSP validity time: %ld\n", (long int)t); + +#define PRIO "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3" + _test_cli_serv(xcred, clicred, PRIO, PRIO, "localhost", &ocsp_ca3_localhost_unknown, check_cli, + check_serv, 0, 1, 0, 0); + + gnutls_certificate_free_credentials(xcred); + gnutls_certificate_free_credentials(clicred); + gnutls_global_deinit(); + remove(ocspfile1); + remove(certfile1); +} + +#else +void doit(void) +{ + exit(77); +} +#endif diff --git a/tests/set_x509_ocsp_multi_invalid.c b/tests/set_x509_ocsp_multi_invalid.c new file mode 100644 index 0000000000..515578cde7 --- /dev/null +++ b/tests/set_x509_ocsp_multi_invalid.c @@ -0,0 +1,261 @@ +/* + * Copyright (C) 2016 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#ifdef ENABLE_OCSP + +#include "cert-common.h" +#include "utils.h" + +/* Tests whether setting an OCSP response to a server with multiple + * certificate sets, is working as expected */ + +static time_t mytime(time_t * t) +{ + time_t then = 1469186559; + if (t) + *t = then; + + return then; +} + +#define RESP1 "\x30\x82\x06\x8C\x0A\x01\x00\xA0\x82\x06\x85\x30\x82\x06\x81\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x01\x04\x82\x06\x72\x30\x82\x06\x6E\x30\x82\x01\x07\xA1\x69\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\x30\x64\x30\x62\x30\x3A\x30\x09\x06\x05\x2B\x0E\x03\x02\x1A\x05\x00\x04\x14\x13\x9D\xA0\x9E\xF4\x32\xAB\x8F\xE2\x89\x56\x67\xFA\xD0\xD4\xE3\x35\x86\x71\xB9\x04\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\x02\x01\x1D\x80\x00\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\xA0\x11\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x39\x32\x38\x5A\xA1\x23\x30\x21\x30\x1F\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x02\x04\x12\x04\x10\x16\x89\x7D\x91\x3A\xB5\x25\xA4\x45\xFE\xC9\xFD\xC2\xE5\x08\xA4\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x4E\xAD\x6B\x2B\xF7\xF2\xBF\xA9\x23\x1E\x3A\x0B\x06\xDB\x55\x53\x2B\x64\x54\x11\x32\xBF\x60\xF7\x4F\xE0\x8E\x9B\xA0\xA2\x4C\x79\xC3\x2A\xE0\x43\xF7\x40\x1A\xDC\xB9\xB4\x25\xEF\x48\x01\x97\x8C\xF5\x1E\xDB\xD1\x30\x37\x73\x69\xD6\xA7\x7A\x2D\x8E\xDE\x5C\xAA\xEA\x39\xB9\x52\xAA\x25\x1E\x74\x7D\xF9\x78\x95\x8A\x92\x1F\x98\x21\xF4\x60\x7F\xD3\x28\xEE\x47\x9C\xBF\xE2\x5D\xF6\x3F\x68\x0A\xD6\xFF\x08\xC1\xDC\x95\x1E\x29\xD7\x3E\x85\xD5\x65\xA4\x4B\xC0\xAF\xC3\x78\xAB\x06\x98\x88\x19\x8A\x64\xA6\x83\x91\x87\x13\xDB\x17\xCC\x46\xBD\xAB\x4E\xC7\x16\xD1\xF8\x35\xFD\x27\xC8\xF6\x6B\xEB\x37\xB8\x08\x6F\xE2\x6F\xB4\x7E\xD5\x68\xDB\x7F\x5D\x5E\x36\x38\xF2\x77\x59\x13\xE7\x3E\x4D\x67\x5F\xDB\xA2\xF5\x5D\x7C\xBF\xBD\xB5\x37\x33\x51\x36\x63\xF8\x21\x1E\xFC\x73\x8F\x32\x69\xBB\x97\xA7\xBD\xF1\xB6\xE0\x40\x09\x68\xEA\xD5\x93\xB8\xBB\x39\x8D\xA8\x16\x1B\xBF\x04\x7A\xBC\x18\x43\x01\xE9\x3C\x19\x5C\x4D\x4B\x98\xD8\x23\x37\x39\xA4\xC4\xDD\xED\x9C\xEC\x37\xAB\x66\x44\x9B\xE7\x5B\x5D\x32\xA2\xDB\xA6\x0B\x3B\x8C\xE1\xF5\xDB\xCB\x7D\x58\xA0\x82\x04\x4B\x30\x82\x04\x47\x30\x82\x04\x43\x30\x82\x03\x2B\xA0\x03\x02\x01\x02\x02\x01\x1E\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x30\x39\x31\x31\x32\x34\x31\x32\x35\x31\x35\x33\x5A\x17\x0D\x31\x34\x31\x31\x32\x33\x31\x32\x35\x31\x35\x33\x5A\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xBC\x05\x3E\x4B\xBE\xC6\xB1\x33\x48\x0E\xC3\xD4\x0C\xEF\x83\x0B\xBD\xBC\x57\x5F\x14\xEF\xF5\x6D\x0B\xFF\xFA\x01\x9C\xFA\x21\x6D\x5C\xAE\x79\x29\x74\xFE\xBD\xAB\x70\x87\x98\x6B\x48\x35\x79\xE3\xE0\xC1\x14\x41\x1F\x0A\xF7\xE7\xA3\xA6\xDA\x6B\xFF\xCD\x74\xE9\x95\x00\x38\xAA\xD6\x3A\x60\xC6\x64\xA1\xE6\x02\x39\x58\x4E\xFD\xF2\x78\x08\x63\xB6\xD7\x7A\x96\x79\x62\x18\x39\xEE\x27\x8D\x3B\xA2\x3D\x48\x88\xDB\x43\xD6\x6A\x77\x20\x6A\x27\x39\x50\xE0\x02\x50\x19\xF2\x7A\xCF\x78\x23\x99\x01\xD4\xE5\xB1\xD1\x31\xE6\x6B\x84\xAF\xD0\x77\x41\x46\x85\xB0\x3B\xE6\x6A\x00\x0F\x3B\x7E\x95\x7F\x59\xA8\x22\xE8\x49\x49\x05\xC8\xCB\x6C\xEE\x47\xA7\x2D\xC9\x74\x5B\xEB\x8C\xD5\x99\xC2\xE2\x70\xDB\xEA\x87\x43\x84\x0E\x4F\x83\x1C\xA6\xEB\x1F\x22\x38\x17\x69\x9B\x72\x12\x95\x48\x71\xB2\x7B\x92\x73\x52\xAB\xE3\x1A\xA5\xD3\xF4\x44\x14\xBA\xC3\x35\xDA\x91\x6C\x7D\xB4\xC2\x00\x07\xD8\x0A\x51\xF1\x0D\x4C\xD9\x7A\xD1\x99\xE6\xA8\x8D\x0A\x80\xA8\x91\xDD\x8A\xA2\x6B\xF6\xDB\xB0\x3E\xC9\x71\xA9\xE0\x39\xC3\xA3\x58\x0D\x87\xD0\xB2\xA7\x9C\xB7\x69\x02\x03\x01\x00\x01\xA3\x82\x01\x1A\x30\x82\x01\x16\x30\x09\x06\x03\x55\x1D\x13\x04\x02\x30\x00\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x03\xA8\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x34\x91\x6E\x91\x32\xBF\x35\x25\x43\xCC\x28\x74\xEF\x82\xC2\x57\x92\x79\x13\x73\x30\x6D\x06\x03\x55\x1D\x23\x04\x66\x30\x64\x80\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\xA1\x49\xA4\x47\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x82\x01\x00\x30\x1E\x06\x03\x55\x1D\x11\x04\x17\x30\x15\x82\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x13\x06\x03\x55\x1D\x25\x04\x0C\x30\x0A\x06\x08\x2B\x06\x01\x05\x05\x07\x03\x09\x30\x39\x06\x03\x55\x1D\x1F\x04\x32\x30\x30\x30\x2E\xA0\x2C\xA0\x2A\x86\x28\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x2F\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x63\x72\x6C\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x01\x01\x00\x6D\x78\xD7\x66\x90\xA6\xEB\xDD\xB5\x09\x48\xA4\xDA\x27\xFA\xAC\xB1\xBC\x8F\x8C\xBE\xCC\x8C\x09\xA2\x40\x0D\x6C\x4A\xAE\x72\x22\x1E\xC8\xAF\x6D\xF1\x12\xAF\xD7\x40\x51\x79\xD4\xDD\xB2\x0C\xDB\x97\x84\xB6\x24\xD5\xF5\xA8\xBB\xC0\x4B\xF9\x7F\x71\xF7\xB0\x65\x42\x4A\x7D\xFE\x76\x7E\x05\xD2\x46\xB8\x7D\xB3\x39\x4C\x5C\xB1\xFA\xB9\xEE\x3B\x70\x33\x39\x57\x1A\xB9\x95\x51\x33\x00\x25\x1B\x4C\xAA\xB4\xA7\x55\xAF\x63\x6D\x6F\x88\x17\x6A\x7F\xB0\x97\xDE\x49\x14\x6A\x27\x6A\xB0\x42\x80\xD6\xA6\x9B\xEF\x04\x5E\x11\x7D\xD5\x8E\x54\x20\xA2\x76\xD4\x66\x58\xAC\x9C\x12\xD3\xF5\xCA\x54\x98\xCA\x21\xEC\xC1\x55\xA1\x2F\x68\x0B\x5D\x04\x50\xD2\x5E\x70\x25\xD8\x13\xD9\x44\x51\x0E\x8A\x42\x08\x18\x84\xE6\x61\xCE\x5A\x7D\x7B\x81\x35\x90\xC3\xD4\x9D\x19\xB6\x37\xEE\x8F\x63\x5C\xDA\xD8\xF0\x64\x60\x39\xEB\x9B\x1C\x54\x66\x75\x76\xB5\x0A\x58\xB9\x3F\x91\xE1\x21\x9C\xA0\x50\x15\x97\xB6\x7E\x41\xBC\xD0\xC4\x21\x4C\xF5\xD7\xF0\x13\xF8\x77\xE9\x74\xC4\x8A\x0E\x20\x17\x32\xAE\x38\xC2\xA5\xA8\x62\x85\x17\xB1\xA2\xD3\x22\x9F\x95\xB7\xA3\x4C" + +static gnutls_datum_t ocsp_resp1 = + { (unsigned char *) RESP1, sizeof(RESP1) - 1 }; + +#define RESP2 "\x30\x82\x06\x8C\x0A\x01\x00\xA0\x82\x06\x85\x30\x82\x06\x81\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x01\x04\x82\x06\x72\x30\x82\x06\x6E\x30\x82\x01\x07\xA1\x69\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\x30\x64\x30\x62\x30\x3A\x30\x09\x06\x05\x2B\x0E\x03\x02\x1A\x05\x00\x04\x14\x13\x9D\xA0\x9E\xF4\x32\xAB\x8F\xE2\x89\x56\x67\xFA\xD0\xD4\xE3\x35\x86\x71\xB9\x04\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\x02\x01\x1D\x80\x00\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\xA0\x11\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x39\x32\x38\x5A\xA1\x23\x30\x21\x30\x1F\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x02\x04\x12\x04\x10\x16\x89\x7D\x91\x3A\xB5\x25\xA4\x45\xFE\xC9\xFD\xC2\xE5\x08\xA4\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x4E\xAD\x6B\x2B\xF7\xF2\xBF\xA9\x23\x1E\x3A\x0B\x06\xDB\x55\x53\x2B\x64\x54\x11\x32\xBF\x60\xF7\x4F\xE0\x8E\x9B\xA0\xA2\x4C\x79\xC3\x2A\xE0\x43\xF7\x40\x1A\xDC\xB9\xB4\x25\xEF\x48\x01\x97\x8C\xF5\x1E\xDB\xD1\x30\x37\x73\x69\xD6\xA7\x7A\x2D\x8E\xDE\x5C\xAA\xEA\x39\xB9\x52\xAA\x25\x1E\x74\x7D\xF9\x78\x95\x8A\x92\x1F\x98\x21\xF4\x60\x7F\xD3\x28\xEE\x47\x9C\xBF\xE2\x5D\xF6\x3F\x68\x0A\xD6\xFF\x08\xC1\xDC\x95\x1E\x29\xD7\x3E\x85\xD5\x65\xA4\x4B\xC0\xAF\xC3\x78\xAB\x06\x98\x88\x19\x8A\x64\xA6\x83\x91\x87\x13\xDB\x17\xCC\x46\xBD\xAB\x4E\xC7\x16\xD1\xF8\x35\xFD\x27\xC8\xF6\x6B\xEB\x37\xB8\x08\x6F\xE2\x6F\xB4\x7E\xD5\x68\xDB\x7F\x5D\x5E\x36\x38\xF2\x77\x59\x13\xE7\x3E\x4D\x67\x5F\xDB\xA2\xF5\x5D\x7C\xBF\xBD\xB5\x37\x33\x51\x36\x63\xF8\x21\x1E\xFC\x73\x8F\x32\x69\xBB\x97\xA7\xBD\xF1\xB6\xE0\x40\x09\x68\xEA\xD5\x93\xB8\xBB\x39\x8D\xA8\x16\x1B\xBF\x04\x7A\xBC\x18\x43\x01\xE9\x3C\x19\x5C\x4D\x4B\x98\xD8\x23\x37\x39\xA4\xC4\xDD\xED\x9C\xEC\x37\xAB\x66\x44\x9B\xE7\x5B\x5D\x32\xA2\xDB\xA6\x0B\x3B\x8C\xE1\xF5\xDB\xCB\x7D\x58\xA0\x82\x04\x4B\x30\x82\x04\x47\x30\x82\x04\x43\x30\x82\x03\x2B\xA0\x03\x02\x01\x02\x02\x01\x1E\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x30\x39\x31\x31\x32\x34\x31\x32\x35\x31\x35\x33\x5A\x17\x0D\x31\x34\x31\x31\x32\x33\x31\x32\x35\x31\x35\x33\x5A\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xBC\x05\x3E\x4B\xBE\xC6\xB1\x33\x48\x0E\xC3\xD4\x0C\xEF\x83\x0B\xBD\xBC\x57\x5F\x14\xEF\xF5\x6D\x0B\xFF\xFA\x01\x9C\xFA\x21\x6D\x5C\xAE\x79\x29\x74\xFE\xBD\xAB\x70\x87\x98\x6B\x48\x35\x79\xE3\xE0\xC1\x14\x41\x1F\x0A\xF7\xE7\xA3\xA6\xDA\x6B\xFF\xCD\x74\xE9\x95\x00\x38\xAA\xD6\x3A\x60\xC6\x64\xA1\xE6\x02\x39\x58\x4E\xFD\xF2\x78\x08\x63\xB6\xD7\x7A\x96\x79\x62\x18\x39\xEE\x27\x8D\x3B\xA2\x3D\x48\x88\xDB\x43\xD6\x6A\x77\x20\x6A\x27\x39\x50\xE0\x02\x50\x19\xF2\x7A\xCF\x78\x23\x99\x01\xD4\xE5\xB1\xD1\x31\xE6\x6B\x84\xAF\xD0\x77\x41\x46\x85\xB0\x3B\xE6\x6A\x00\x0F\x3B\x7E\x95\x7F\x59\xA8\x22\xE8\x49\x49\x05\xC8\xCB\x6C\xEE\x47\xA7\x2D\xC9\x74\x5B\xEB\x8C\xD5\x99\xC2\xE2\x70\xDB\xEA\x87\x43\x84\x0E\x4F\x83\x1C\xA6\xEB\x1F\x22\x38\x17\x69\x9B\x72\x12\x95\x48\x71\xB2\x7B\x92\x73\x52\xAB\xE3\x1A\xA5\xD3\xF4\x44\x14\xBA\xC3\x35\xDA\x91\x6C\x7D\xB4\xC2\x00\x07\xD8\x0A\x51\xF1\x0D\x4C\xD9\x7A\xD1\x99\xE6\xA8\x8D\x0A\x80\xA8\x91\xDD\x8A\xA2\x6B\xF6\xDB\xB0\x3E\xC9\x71\xA9\xE0\x39\xC3\xA3\x58\x0D\x87\xD0\xB2\xA7\x9C\xB7\x69\x02\x03\x01\x00\x01\xA3\x82\x01\x1A\x30\x82\x01\x16\x30\x09\x06\x03\x55\x1D\x13\x04\x02\x30\x00\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x03\xA8\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x34\x91\x6E\x91\x32\xBF\x35\x25\x43\xCC\x28\x74\xEF\x82\xC2\x57\x92\x79\x13\x73\x30\x6D\x06\x03\x55\x1D\x23\x04\x66\x30\x64\x80\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\xA1\x49\xA4\x47\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x82\x01\x00\x30\x1E\x06\x03\x55\x1D\x11\x04\x17\x30\x15\x82\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x13\x06\x03\x55\x1D\x25\x04\x0C\x30\x0A\x06\x08\x2B\x06\x01\x05\x05\x07\x03\x09\x30\x39\x06\x03\x55\x1D\x1F\x04\x32\x30\x30\x30\x2E\xA0\x2C\xA0\x2A\x86\x28\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x2F\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x63\x72\x6C\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x01\x01\x00\x6D\x78\xD7\x66\x90\xA6\xEB\xDD\xB5\x09\x48\xA4\xDA\x27\xFA\xAC\xB1\xBC\x8F\x8C\xBE\xCC\x8C\x09\xA2\x40\x0D\x6C\x4A\xAE\x72\x22\x1E\xC8\xAF\x6D\xF1\x12\xAF\xD7\x40\x51\x79\xD4\xDD\xB2\x0C\xDB\x97\x84\xB6\x24\xD5\xF5\xA8\xBB\xC0\x4B\xF9\x7F\x71\xF7\xB0\x65\x42\x4A\x7D\xFE\x76\x7E\x05\xD2\x46\xB8\x7D\xB3\x39\x4C\x5C\xB1\xFA\xB9\xEE\x3B\x70\x33\x39\x57\x1A\xB9\x95\x51\x33\x00\x25\x1B\x4C\xAA\xB4\xA7\x55\xAF\x63\x6D\x6F\x88\x17\x6A\x7F\xB0\x97\xDE\x49\x14\x6A\x27\x6A\xB0\x42\x80\xD6\xA6\x9B\xEF\x04\x5E\x11\x7D\xD5\x8E\x54\x20\xA2\x76\xD4\x66\x58\xAC\x9C\x12\xD3\xF5\xCA\x54\x98\xCA\x21\xEC\xC1\x55\xA1\x2F\x68\x0B\x5D\x04\x50\xD2\x5E\x70\x25\xD8\x13\xD9\x44\x51\x0E\x8A\x42\x08\x18\x84\xE6\x61\xCE\x5A\x7D\x7B\x81\x35\x90\xC3\xD4\x9D\x19\xB6\x37\xEE\x8F\x63\x5C\xDA\xD8\xF0\x64\x60\x39\xEB\x9B\x1C\x54\x66\x75\x76\xB5\x0A\x58\xB9\x3F\x91\xE1\x21\x9C\xA0\x50\x15\x97\xB6\x7E\x41\xBC\xD0\xC4\x21\x4C\xF5\xD7\xF0\x13\xF8\x77\xE9\x74\xC4\x8A\x0E\x20\x17\x32\xAE\x38\xC2\xA5\xA8\x62\x85\x17\xB1\xA2\xD3\x22\x9F\x95\xB7\xA3\x4C" + +static gnutls_datum_t ocsp_resp2 = + { (unsigned char *) RESP2, sizeof(RESP2) - 1 }; + +#define RESP3 "\x30\x82\x01\xd3\x0a\x01\x00\xa0\x82\x01\xcc\x30\x82\x01\xc8\x06\x09\x2b\x06\x01\x05\x05\x07\x30\x01\x01\x04\x82\x01\xb9\x30\x82\x01\xb5\x30\x81\x9e\xa2\x16\x04\x14\x50\xea\x73\x89\xdb\x29\xfb\x10\x8f\x9e\xe5\x01\x20\xd4\xde\x79\x99\x48\x83\xf7\x18\x0f\x32\x30\x31\x34\x30\x39\x30\x34\x30\x35\x34\x39\x30\x30\x5a\x30\x73\x30\x71\x30\x49\x30\x09\x06\x05\x2b\x0e\x03\x02\x1a\x05\x00\x04\x14\xed\x48\xad\xdd\xcb\x7b\x00\xe2\x0e\x84\x2a\xa9\xb4\x09\xf1\xac\x30\x34\xcf\x96\x04\x14\x50\xea\x73\x89\xdb\x29\xfb\x10\x8f\x9e\xe5\x01\x20\xd4\xde\x79\x99\x48\x83\xf7\x02\x10\x02\x01\x48\x91\x5d\xfd\x5e\xb6\xe0\x02\x90\xa9\x67\xb0\xe4\x64\x80\x00\x18\x0f\x32\x30\x31\x34\x30\x39\x30\x34\x30\x35\x34\x39\x30\x30\x5a\xa0\x11\x18\x0f\x32\x30\x31\x34\x30\x39\x31\x31\x30\x36\x30\x34\x30\x30\x5a\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x6e\x5e\x5e\x81\xff\x3f\x4d\xc7\x53\xc7\x1b\xf3\xd3\x1d\xdc\x9a\xc7\xce\x77\x2c\x67\x56\x13\x98\x91\x02\x01\x76\xdc\x48\xb2\x1f\x9b\x17\xea\xbf\x2c\x0a\xf5\x1d\x98\x90\x3c\x5f\x55\xc2\xff\x4b\x9a\xbc\xa6\x83\x9e\xab\x2b\xeb\x9d\x01\xea\x3b\x5f\xbe\x03\x29\x70\x63\x2a\xa4\x1d\xa8\xab\x69\xb2\x64\xba\x5d\x73\x91\x5c\x92\xf3\x69\xd4\xc9\x39\x9c\x7c\x7d\xa2\x47\x92\xc2\x56\xfe\xa1\x0d\x4a\x69\xff\xda\x48\xc5\x5e\xd8\xab\x39\x88\x6a\x06\xfa\x07\x57\xd6\x48\xb5\xce\xc9\x5f\xa5\x96\xfe\x37\x18\x5e\x7f\x35\x51\xc1\x9e\x79\x5a\x26\xba\x67\x67\x38\x2a\x80\x75\x42\x99\x68\x3e\xec\x2f\x7e\x2d\xa1\xa6\xbe\x9f\x01\x51\x22\x88\x3a\xc9\x9c\xed\x51\xef\x21\x66\x7e\xa9\xd0\x3f\x13\x9c\xbb\xd2\x94\x14\x6f\x4b\xd9\xc4\xf5\x2c\xf5\x7d\x07\x68\xf3\x51\xac\xda\xc2\x09\x66\xa9\x3d\xed\xad\x02\x4d\x9c\x11\x29\x1a\x54\xfb\x1e\x7e\x36\xf4\xbb\x0d\x08\x8c\x6a\x42\x08\x10\x29\x08\x7c\x56\x0b\x18\x47\xff\x87\x11\xfd\xb2\xfb\xc9\x22\x7f\xe3\x1f\x7b\xf9\x98\xaa\x3a\x32\xb6\x2f\x02\xba\xb6\xc1\xdc\xc3\x5d\xb5\x4b\xae\x5d\x29\x6a\x31\xde\xcd" +static gnutls_datum_t ocsp_resp3 = + { (unsigned char *) RESP3, sizeof(RESP3) - 1 }; + +static void check_response(gnutls_session_t session, void *priv) +{ + int ret; + gnutls_datum_t resp; + gnutls_datum_t *exp_resp = priv; + + ret = gnutls_ocsp_status_request_get(session, &resp); + if (ret < 0) { + if (priv == NULL) + return; + fail("no response was received\n"); + } + + if (priv == NULL) { + fail("not expected response, but received one\n"); + } + + if (resp.size != exp_resp->size || memcmp(resp.data, exp_resp->data, resp.size) != 0) { + fail("did not receive the expected response\n"); + } +} + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +void doit(void) +{ + int ret; + gnutls_certificate_credentials_t xcred; + gnutls_certificate_credentials_t clicred; + const char *certfile1; + const char *certfile2; + const char *certfile3; + const char *ocspfile1; + const char *ocspfile2; + const char *ocspfile3; + char certname1[TMPNAME_SIZE], ocspname1[TMPNAME_SIZE]; + char certname2[TMPNAME_SIZE], ocspname2[TMPNAME_SIZE]; + char certname3[TMPNAME_SIZE], ocspname3[TMPNAME_SIZE]; + FILE *fp; + unsigned index1, index2, index3; /* indexes of certs */ + + global_init(); + gnutls_global_set_time_function(mytime); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + assert(gnutls_certificate_allocate_credentials(&xcred) >= 0); + assert(gnutls_certificate_allocate_credentials(&clicred) >= 0); + + gnutls_certificate_set_flags(xcred, GNUTLS_CERTIFICATE_API_V2); + + certfile1 = get_tmpname(certname1); + + /* set cert with localhost name */ + fp = fopen(certfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(server_localhost_ca3_cert_chain_pem, 1, strlen(server_localhost_ca3_cert_chain_pem), fp)>0); + assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(xcred, certfile1, certfile1, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + index1 = ret; + + /* set cert with localhost6 name */ + certfile2 = get_tmpname(certname2); + + fp = fopen(certfile2, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(server_localhost6_ca3_cert_chain_pem, 1, strlen(server_localhost6_ca3_cert_chain_pem), fp)>0); + assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(xcred, certfile2, certfile2, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + index2 = ret; + + fp = fopen(certfile2, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(server_localhost6_ca3_cert_chain_pem, 1, strlen(server_localhost6_ca3_cert_chain_pem), fp)>0); + assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); + fclose(fp); + + /* set ECC cert */ + certfile3 = get_tmpname(certname3); + + fp = fopen(certfile3, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ecc_cert, 1, strlen(ecc_cert), fp)>0); + assert(fwrite(ecc_key, 1, strlen(ecc_key), fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(xcred, certfile3, certfile3, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + index3 = ret; + + fp = fopen(certfile3, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(server_localhost6_ca3_cert_chain_pem, 1, strlen(server_localhost6_ca3_cert_chain_pem), fp)>0); + assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); + fclose(fp); + + /* set OCSP response1 */ + ocspfile1 = get_tmpname(ocspname1); + fp = fopen(ocspfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ocsp_resp1.data, 1, ocsp_resp1.size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile1, index1); + if (ret != GNUTLS_E_OCSP_MISMATCH_WITH_CERTS) + fail("unexpected error in setting invalid ocsp file: %s\n", gnutls_strerror(ret)); + + gnutls_certificate_set_flags(xcred, GNUTLS_CERTIFICATE_API_V2|GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK); + + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile1, index1); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* set OCSP response2 */ + ocspfile2 = get_tmpname(ocspname2); + fp = fopen(ocspfile2, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ocsp_resp2.data, 1, ocsp_resp2.size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile2, index2); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* set OCSP response3 */ + ocspfile3 = get_tmpname(ocspname3); + fp = fopen(ocspfile3, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ocsp_resp3.data, 1, ocsp_resp3.size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile3, index3); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* set an OCSP response outside the bounds */ + assert(gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile3, 34) == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE); + + /* make sure that our invalid OCSP responses are not considered in verification + */ + gnutls_certificate_set_verify_flags(clicred, GNUTLS_VERIFY_DISABLE_CRL_CHECKS); + if (gnutls_certificate_get_verify_flags(clicred) != GNUTLS_VERIFY_DISABLE_CRL_CHECKS) + fail("error in gnutls_certificate_set_verify_flags\n"); + + ret = gnutls_certificate_set_x509_trust_mem(clicred, &ca3_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("error in setting trust cert: %s\n", gnutls_strerror(ret)); + } + + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2", "localhost", &ocsp_resp1, check_response, NULL); + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2", "localhost6", &ocsp_resp2, check_response, NULL); + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-RSA:-RSA:-DHE-RSA:-VERS-TLS-ALL:+VERS-TLS1.2", NULL, &ocsp_resp3, check_response, NULL); + + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3", "localhost", &ocsp_resp1, check_response, NULL); + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3", "localhost6", &ocsp_resp2, check_response, NULL); + test_cli_serv(xcred, clicred, "NORMAL:-SIGN-ALL:+SIGN-ECDSA-SECP256R1-SHA256:-ECDHE-RSA:-DHE-RSA:-RSA:-VERS-TLS-ALL:+VERS-TLS1.3", NULL, &ocsp_resp3, check_response, NULL); + + gnutls_certificate_free_credentials(xcred); + gnutls_certificate_free_credentials(clicred); + gnutls_global_deinit(); + remove(ocspfile1); + remove(ocspfile2); + remove(ocspfile3); + remove(certfile1); + remove(certfile2); + remove(certfile3); +} + +#else +void doit(void) +{ + exit(77); +} +#endif diff --git a/tests/set_x509_ocsp_multi_pem.c b/tests/set_x509_ocsp_multi_pem.c new file mode 100644 index 0000000000..834ee468e0 --- /dev/null +++ b/tests/set_x509_ocsp_multi_pem.c @@ -0,0 +1,200 @@ +/* + * Copyright (C) 2016-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#ifdef ENABLE_OCSP + +#include "cert-common.h" +#include "ocsp-common.h" +#include "utils.h" + +/* Tests whether setting an OCSP response to a server with multiple + * certificate sets, is working as expected */ + +static time_t mytime(time_t * t) +{ + time_t then = OCSP_RESP_DATE; + if (t) + *t = then; + + return then; +} + +static void check_response(gnutls_session_t session, void *priv) +{ + int ret; + gnutls_datum_t resp; + gnutls_datum_t *exp_resp = priv; + + ret = gnutls_ocsp_status_request_get(session, &resp); + if (ret < 0) { + if (priv == NULL) + return; + fail("no response was received\n"); + } + + if (priv == NULL) { + fail("not expected response, but received one\n"); + } + + if (resp.size != exp_resp->size || memcmp(resp.data, exp_resp->data, resp.size) != 0) { + fail("did not receive the expected response\n"); + } + + /* Check intermediate response */ + if (gnutls_protocol_get_version(session) == GNUTLS_TLS1_3) { + ret = gnutls_ocsp_status_request_get2(session, 1, &resp); + if (ret < 0) { + fail("no intermediate response was received\n"); + } + + if (resp.size != ocsp_subca3_unknown.size || memcmp(resp.data, ocsp_subca3_unknown.data, resp.size) != 0) { + fail("did not receive the expected intermediate response\n"); + } + } + + ret = gnutls_ocsp_status_request_is_checked(session, 0); + if (ret == 0) { + fail("did not receive the expected value (%d)\n", ret); + } + + ret = gnutls_ocsp_status_request_is_checked(session, GNUTLS_OCSP_SR_IS_AVAIL); + if (ret == 0) { + fail("did not receive the expected value (%d)\n", ret); + } +} + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +void doit(void) +{ + int ret; + gnutls_certificate_credentials_t xcred; + gnutls_certificate_credentials_t clicred; + const char *certfile1; + const char *ocspfile1; + char certname1[TMPNAME_SIZE], ocspname1[TMPNAME_SIZE]; + FILE *fp; + unsigned index1; + time_t t; + + global_init(); + gnutls_global_set_time_function(mytime); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + assert(gnutls_certificate_allocate_credentials(&xcred) >= 0); + assert(gnutls_certificate_allocate_credentials(&clicred) >= 0); + + gnutls_certificate_set_flags(xcred, GNUTLS_CERTIFICATE_API_V2); + + certfile1 = get_tmpname(certname1); + + /* set cert with localhost name */ + fp = fopen(certfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(server_localhost_ca3_cert_chain_pem, 1, strlen(server_localhost_ca3_cert_chain_pem), fp)>0); + assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(xcred, certfile1, certfile1, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + index1 = ret; + + /* set OCSP response1, include an unrelated OCSP response */ + ocspfile1 = get_tmpname(ocspname1); + fp = fopen(ocspfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ocsp_subca3_unknown_pem.data, 1, ocsp_subca3_unknown_pem.size, fp)>0); + assert(fwrite(ocsp_ca3_localhost_unknown_pem.data, 1, ocsp_ca3_localhost_unknown_pem.size, fp)>0); + assert(fwrite(ocsp_ca3_localhost6_unknown_pem.data, 1, ocsp_ca3_localhost6_unknown_pem.size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_ocsp_status_request_file2(xcred, ocspfile1, index1, + GNUTLS_X509_FMT_PEM); + if (ret != GNUTLS_E_OCSP_MISMATCH_WITH_CERTS) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* set OCSP response1, include correct responses */ + remove(ocspfile1); + fp = fopen(ocspfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ocsp_subca3_unknown_pem.data, 1, ocsp_subca3_unknown_pem.size, fp)>0); + assert(fwrite(ocsp_ca3_localhost_unknown_pem.data, 1, ocsp_ca3_localhost_unknown_pem.size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_ocsp_status_request_file2(xcred, ocspfile1, index1, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + ret = gnutls_certificate_set_x509_trust_mem(clicred, &ca3_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("error in setting trust cert: %s\n", gnutls_strerror(ret)); + } + + t = gnutls_certificate_get_ocsp_expiration(xcred, 0, 0, 0); + if (t != 1509625639) + fail("error in OCSP validity time: %ld\n", (long int)t); + + t = gnutls_certificate_get_ocsp_expiration(xcred, 0, 1, 0); + if (t != 1509625639) + fail("error in OCSP validity time: %ld\n", (long int)t); + + t = gnutls_certificate_get_ocsp_expiration(xcred, 0, -1, 0); + if (t != 1509625639) + fail("error in OCSP validity time: %ld\n", (long int)t); + + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2", "localhost", &ocsp_ca3_localhost_unknown, check_response, NULL); + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3", "localhost", &ocsp_ca3_localhost_unknown, check_response, NULL); + + gnutls_certificate_free_credentials(xcred); + gnutls_certificate_free_credentials(clicred); + gnutls_global_deinit(); + remove(ocspfile1); + remove(certfile1); +} + +#else +void doit(void) +{ + exit(77); +} +#endif diff --git a/tests/set_x509_ocsp_multi_unknown.c b/tests/set_x509_ocsp_multi_unknown.c new file mode 100644 index 0000000000..882edf1ee3 --- /dev/null +++ b/tests/set_x509_ocsp_multi_unknown.c @@ -0,0 +1,237 @@ +/* + * Copyright (C) 2016-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#ifdef ENABLE_OCSP + +#include "cert-common.h" +#include "ocsp-common.h" +#include "utils.h" + +/* Tests whether setting an OCSP response to a server with multiple + * certificate sets, is working as expected */ + +static time_t mytime(time_t * t) +{ + time_t then = OCSP_RESP_DATE; + if (t) + *t = then; + + return then; +} + +static void check_response(gnutls_session_t session, void *priv) +{ + int ret; + gnutls_datum_t resp; + gnutls_datum_t *exp_resp = priv; + + ret = gnutls_ocsp_status_request_get(session, &resp); + if (ret < 0) { + if (priv == NULL) + return; + fail("no response was received\n"); + } + + if (priv == NULL) { + fail("not expected response, but received one\n"); + } + + if (resp.size != exp_resp->size || memcmp(resp.data, exp_resp->data, resp.size) != 0) { + fail("did not receive the expected response\n"); + } + + /* Check intermediate response */ + if (gnutls_protocol_get_version(session) == GNUTLS_TLS1_3) { + ret = gnutls_ocsp_status_request_get2(session, 1, &resp); + if (ret < 0) { + fail("no intermediate response was received\n"); + } + + if (resp.size != ocsp_subca3_unknown.size || memcmp(resp.data, ocsp_subca3_unknown.data, resp.size) != 0) { + fail("did not receive the expected intermediate response\n"); + } + } +} + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +void doit(void) +{ + int ret; + gnutls_certificate_credentials_t xcred; + gnutls_certificate_credentials_t clicred; + const char *certfile1; + const char *certfile2; + const char *ocspfile1; + const char *ocspfile2; + const char *ocspfile3; + char certname1[TMPNAME_SIZE], ocspname1[TMPNAME_SIZE]; + char certname2[TMPNAME_SIZE], ocspname2[TMPNAME_SIZE]; + char ocspname3[TMPNAME_SIZE]; + FILE *fp; + unsigned index1, index2; /* indexes of certs */ + + global_init(); + gnutls_global_set_time_function(mytime); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + assert(gnutls_certificate_allocate_credentials(&xcred) >= 0); + assert(gnutls_certificate_allocate_credentials(&clicred) >= 0); + + gnutls_certificate_set_flags(xcred, GNUTLS_CERTIFICATE_API_V2); + + /* set cert with localhost name */ + certfile1 = get_tmpname(certname1); + + fp = fopen(certfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(server_localhost_ca3_cert_chain_pem, 1, strlen(server_localhost_ca3_cert_chain_pem), fp)>0); + assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(xcred, certfile1, certfile1, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + index1 = ret; + + /* set cert with localhost6 name */ + certfile2 = get_tmpname(certname2); + + fp = fopen(certfile2, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(server_localhost6_ca3_cert_chain_pem, 1, strlen(server_localhost6_ca3_cert_chain_pem), fp)>0); + assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(xcred, certfile2, certfile2, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + index2 = ret; + + + /* set OCSP response1 */ + ocspfile1 = get_tmpname(ocspname1); + fp = fopen(ocspfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ocsp_ca3_localhost_unknown.data, 1, ocsp_ca3_localhost_unknown.size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile1, index1); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* set OCSP response2 */ + ocspfile2 = get_tmpname(ocspname2); + fp = fopen(ocspfile2, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ocsp_ca3_localhost6_unknown.data, 1, ocsp_ca3_localhost6_unknown.size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile2, index2); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* try to set a duplicate OCSP response */ + ocspfile3 = get_tmpname(ocspname3); + fp = fopen(ocspfile3, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ocsp_ca3_localhost_unknown_sha1.data, 1, ocsp_ca3_localhost_unknown_sha1.size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile3, index1); + if (ret != 0) + fail("setting duplicate didn't succeed as expected: %s\n", gnutls_strerror(ret)); + + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile3, index2); + if (ret != GNUTLS_E_OCSP_MISMATCH_WITH_CERTS) + fail("setting invalid didn't fail as expected: %s\n", gnutls_strerror(ret)); + + /* re-set the previous duplicate set for index1 to the expected*/ + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile1, index1); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* set an intermediate CA OCSP response */ + fp = fopen(ocspfile3, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(ocsp_subca3_unknown.data, 1, ocsp_subca3_unknown.size, fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile3, index1); + if (ret < 0) + fail("setting subCA failed: %s\n", gnutls_strerror(ret)); + + ret = gnutls_certificate_set_ocsp_status_request_file(xcred, ocspfile3, index2); + if (ret < 0) + fail("setting subCA failed: %s\n", gnutls_strerror(ret)); + + + ret = gnutls_certificate_set_x509_trust_mem(clicred, &ca3_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("error in setting trust cert: %s\n", gnutls_strerror(ret)); + } + + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2", "localhost", &ocsp_ca3_localhost_unknown, check_response, NULL); + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.2", "localhost6", &ocsp_ca3_localhost6_unknown, check_response, NULL); + + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3", "localhost", &ocsp_ca3_localhost_unknown, check_response, NULL); + test_cli_serv(xcred, clicred, "NORMAL:-ECDHE-ECDSA:-VERS-TLS-ALL:+VERS-TLS1.3", "localhost6", &ocsp_ca3_localhost6_unknown, check_response, NULL); + + gnutls_certificate_free_credentials(xcred); + gnutls_certificate_free_credentials(clicred); + gnutls_global_deinit(); + remove(ocspfile1); + remove(ocspfile2); + remove(ocspfile3); + remove(certfile1); + remove(certfile2); +} + +#else +void doit(void) +{ + exit(77); +} +#endif diff --git a/tests/setcredcrash.c b/tests/setcredcrash.c index 4690c9ed47..02ac0bf77a 100644 --- a/tests/setcredcrash.c +++ b/tests/setcredcrash.c @@ -39,7 +39,7 @@ int main(int argc, char *argv[]) gnutls_anon_allocate_client_credentials(&c_anoncred); gnutls_init(&client, GNUTLS_CLIENT); - gnutls_priority_set_direct(client, "NORMAL", NULL); + gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); /* Test setting the same credential type twice. Earlier GnuTLS had a bug that crashed when this happened. */ diff --git a/tests/sign-is-secure.c b/tests/sign-is-secure.c new file mode 100644 index 0000000000..5f987e08b4 --- /dev/null +++ b/tests/sign-is-secure.c @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +#define CHECK_SECURE_SIG(sig) \ + ret = gnutls_sign_is_secure2(sig, 0); \ + if (ret == 0) { \ + fail("error testing %d/%s\n", sig, gnutls_sign_get_name(sig)); \ + } \ + ret = gnutls_sign_is_secure(sig); \ + if (ret == 0) { \ + fail("error testing %d/%s\n", sig, gnutls_sign_get_name(sig)); \ + } + +#define CHECK_INSECURE_SIG(sig) \ + ret = gnutls_sign_is_secure2(sig, 0); \ + if (ret != 0) { \ + fail("error testing %d/%s\n", sig, gnutls_sign_get_name(sig)); \ + } \ + ret = gnutls_sign_is_secure2(sig, GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS); \ + if (ret != 0) { \ + fail("error testing %d/%s\n", sig, gnutls_sign_get_name(sig)); \ + } \ + ret = gnutls_sign_is_secure(sig); \ + if (ret != 0) { \ + fail("error testing %d/%s\n", sig, gnutls_sign_get_name(sig)); \ + } + +#ifndef ALLOW_SHA1 +#define CHECK_INSECURE_FOR_CERTS_SIG(sig) \ + ret = gnutls_sign_is_secure2(sig, 0); \ + if (ret == 0) { \ + fail("error testing %d/%s\n", sig, gnutls_sign_get_name(sig)); \ + } \ + ret = gnutls_sign_is_secure2(sig, GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS); \ + if (ret != 0) { \ + fail("error testing %d/%s\n", sig, gnutls_sign_get_name(sig)); \ + } \ + ret = gnutls_sign_is_secure(sig); \ + if (ret == 0) { \ + fail("error testing %d/%s\n", sig, gnutls_sign_get_name(sig)); \ + } +#else +#define CHECK_INSECURE_FOR_CERTS_SIG(sig) +#endif + +void doit(void) +{ + int ret; + unsigned i; + + CHECK_INSECURE_FOR_CERTS_SIG(GNUTLS_SIGN_RSA_SHA1); + CHECK_INSECURE_FOR_CERTS_SIG(GNUTLS_SIGN_DSA_SHA1); + CHECK_INSECURE_FOR_CERTS_SIG(GNUTLS_SIGN_ECDSA_SHA1); + + CHECK_INSECURE_SIG(GNUTLS_SIGN_RSA_MD5); + CHECK_INSECURE_SIG(GNUTLS_SIGN_RSA_MD2); + + for (i=1;i<=GNUTLS_SIGN_MAX;i++) { +#ifndef ALLOW_SHA1 + if (i==GNUTLS_SIGN_RSA_SHA1||i==GNUTLS_SIGN_DSA_SHA1||i==GNUTLS_SIGN_ECDSA_SHA1) + continue; +#endif + if (i==GNUTLS_SIGN_RSA_MD5||i==GNUTLS_SIGN_RSA_MD2||i==GNUTLS_SIGN_UNKNOWN) + continue; + /* skip any unused elements */ + if (gnutls_sign_algorithm_get_name(i)==NULL) + continue; + CHECK_SECURE_SIG(i); + } +} diff --git a/tests/sign-md5-rep.c b/tests/sign-md5-rep.c deleted file mode 100644 index b14d996d8d..0000000000 --- a/tests/sign-md5-rep.c +++ /dev/null @@ -1,334 +0,0 @@ -/* - * Copyright (C) 2015 Nikos Mavrogiannopoulos - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#if defined(_WIN32) - -int main() -{ - exit(77); -} - -#else - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" - -static void terminate(void); - -/* This program tests whether MD5 is rejected by a client as a - * signature algorithm for the ServerKeyExchange. - */ - -static void server_log_func(int level, const char *str) -{ - fprintf(stderr, "server|<%d>| %s", level, str); -} - -static void client_log_func(int level, const char *str) -{ - fprintf(stderr, "client|<%d>| %s", level, str); -} - -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - - -static int handshake_callback(gnutls_session_t session, unsigned int htype, - unsigned post, unsigned int incoming, const gnutls_datum_t *msg) -{ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-RSA", NULL); - return 0; -} - - -/* A very basic TLS client, with anonymous authentication. - */ - -#define MAX_BUF 1024 - -static void client(int fd) -{ - int ret; - char buffer[MAX_BUF + 1]; - gnutls_certificate_credentials_t x509_cred; - gnutls_session_t session; - /* Need to enable anonymous KX specifically. */ - - global_init(); - - if (debug) { - gnutls_global_set_log_function(client_log_func); - gnutls_global_set_log_level(7); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); - - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-MD5", NULL); - - /* put the anonymous credentials to the current session - */ - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE, - GNUTLS_HOOK_PRE, - handshake_callback); - - /* Perform the TLS handshake - */ - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - - if (ret == GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM) { - /* success */ - goto end; - } - - if (ret < 0) { - fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); - terminate(); - } else { - if (debug) - success("client: Handshake was completed\n"); - } - - if (gnutls_sign_algorithm_get(session) == GNUTLS_SIGN_RSA_MD5) { - fail("client: MD5 was negotiated\n"); - terminate(); - } - success("client: %s was negotiated\n", gnutls_sign_get_name(gnutls_sign_algorithm_get(session))); - - if (debug) - success("client: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - do { - do { - ret = gnutls_record_recv(session, buffer, MAX_BUF); - } while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); - } while (ret > 0); - - if (ret == 0) { - if (debug) - success - ("client: Peer has closed the TLS connection\n"); - goto end; - } else if (ret < 0) { - fail("client: Error: %s\n", gnutls_strerror(ret)); - terminate(); - } - - gnutls_bye(session, GNUTLS_SHUT_WR); - - end: - - close(fd); - - gnutls_deinit(session); - - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); -} - - -/* These are global */ -pid_t child; - -static void terminate(void) -{ - kill(child, SIGTERM); - exit(1); -} - -static void server(int fd) -{ - int ret; - char buffer[MAX_BUF + 1]; - gnutls_session_t session; - gnutls_certificate_credentials_t x509_cred; - - /* this must be called once in the program - */ - global_init(); - memset(buffer, 0, sizeof(buffer)); - - if (debug) { - gnutls_global_set_log_function(server_log_func); - gnutls_global_set_log_level(4711); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, - &server_key, - GNUTLS_X509_FMT_PEM); - - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-MD5", NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - - do { - ret = gnutls_handshake(session); - } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - if (ret < 0) { - /* failure is expected here */ - goto end; - } - - if (debug) { - success("server: Handshake was completed\n"); - success("server: %s was negotiated\n", gnutls_sign_get_name(gnutls_sign_algorithm_get(session))); - } - - if (debug) - success("server: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - /* do not wait for the peer to close the connection. - */ - gnutls_bye(session, GNUTLS_SHUT_WR); - - end: - close(fd); - gnutls_deinit(session); - - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); - - if (debug) - success("server: finished\n"); -} - -static void ch_handler(int sig) -{ - int status; - wait(&status); - check_wait_status(status); - return; -} - -void doit(void) -{ - int fd[2]; - int ret; - - signal(SIGCHLD, ch_handler); - - ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); - if (ret < 0) { - perror("socketpair"); - exit(1); - } - - child = fork(); - if (child < 0) { - perror("fork"); - fail("fork"); - exit(1); - } - - if (child) { - /* parent */ - close(fd[1]); - client(fd[0]); - kill(child, SIGTERM); - } else { - close(fd[0]); - server(fd[1]); - exit(0); - } -} - -#endif /* _WIN32 */ diff --git a/tests/sign-pk-api.c b/tests/sign-pk-api.c new file mode 100644 index 0000000000..e07bc5094e --- /dev/null +++ b/tests/sign-pk-api.c @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +#define ALGO_MATCHES(sig, pk, val) \ + ret = gnutls_sign_supports_pk_algorithm(sig, pk); \ + if (ret != val) { \ + fail("error testing %s with %s\n", gnutls_sign_get_name(sig), gnutls_pk_get_name(pk)); \ + } + +void doit(void) +{ + int ret; + + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA1, GNUTLS_PK_RSA, 1); + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA256, GNUTLS_PK_RSA, 1); + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA384, GNUTLS_PK_RSA, 1); + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA512, GNUTLS_PK_RSA, 1); + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA3_256, GNUTLS_PK_RSA, 1); + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA3_384, GNUTLS_PK_RSA, 1); + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA3_512, GNUTLS_PK_RSA, 1); + + /* TLS 1.3 allows RSA-PSS signatures to be generated by RSA keys */ + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA256, GNUTLS_PK_RSA, 1); + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA384, GNUTLS_PK_RSA, 1); + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA512, GNUTLS_PK_RSA, 1); + + ALGO_MATCHES(GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_PK_RSA_PSS, 1); + ALGO_MATCHES(GNUTLS_SIGN_RSA_PSS_SHA384, GNUTLS_PK_RSA_PSS, 1); + ALGO_MATCHES(GNUTLS_SIGN_RSA_PSS_SHA512, GNUTLS_PK_RSA_PSS, 1); + + /* rsa-pss keys shouldn't generate plain signatures */ + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA256, GNUTLS_PK_RSA_PSS, 0); + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA384, GNUTLS_PK_RSA_PSS, 0); + ALGO_MATCHES(GNUTLS_SIGN_RSA_SHA512, GNUTLS_PK_RSA_PSS, 0); + +} diff --git a/tests/sign-verify-data-newapi.c b/tests/sign-verify-data-newapi.c new file mode 100644 index 0000000000..eca18974ee --- /dev/null +++ b/tests/sign-verify-data-newapi.c @@ -0,0 +1,172 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +#endif +#include +#include +#include +#include +#include "common-key-tests.h" +#include "utils.h" + +/* verifies whether the sign-data and verify-data APIs + * operate as expected */ + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d> %s", level, str); +} + +/* sha1 hash of "hello" string */ +const gnutls_datum_t raw_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x2c\xd9\xae\xa9\x43\x4d", + 20 +}; + +const gnutls_datum_t invalid_raw_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x3c\xd9\xae\xa9\x43\x4d", + 20 +}; + +#define tests common_key_tests +#define testfail(fmt, ...) \ + fail("%s: "fmt, tests[i].name, ##__VA_ARGS__) + +void doit(void) +{ + gnutls_x509_crt_t crt; + gnutls_pubkey_t pubkey; + gnutls_privkey_t privkey; + gnutls_sign_algorithm_t sign_algo; + gnutls_datum_t signature; + int ret; + size_t i; + + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + if (tests[i].pk == GNUTLS_PK_DSA) + continue; + + success("testing: %s - %s\n", tests[i].name, gnutls_sign_algorithm_get_name(tests[i].sigalgo)); + + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + testfail("gnutls_pubkey_init\n"); + + ret = gnutls_privkey_import_x509_raw(privkey, &tests[i].key, GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + testfail("gnutls_privkey_import_x509\n"); + + ret = gnutls_privkey_sign_data2(privkey, tests[i].sigalgo, 0, + &raw_data, &signature); + if (ret < 0) + testfail("gnutls_x509_privkey_sign_hash\n"); + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) + testfail("gnutls_x509_crt_init\n"); + + ret = + gnutls_x509_crt_import(crt, &tests[i].cert, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + testfail("gnutls_x509_crt_import\n"); + + ret = gnutls_pubkey_import_x509(pubkey, crt, 0); + if (ret < 0) + testfail("gnutls_x509_pubkey_import\n"); + + ret = + gnutls_pubkey_verify_data2(pubkey, tests[i].sigalgo, 0, &raw_data, + &signature); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_data2\n"); + + /* Test functionality of GNUTLS_VERIFY_DISABLE_CA_SIGN flag (see issue #754) */ + ret = + gnutls_pubkey_verify_data2(pubkey, tests[i].sigalgo, GNUTLS_VERIFY_DISABLE_CA_SIGN, &raw_data, + &signature); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_data2\n"); + + /* should fail */ + ret = + gnutls_pubkey_verify_data2(pubkey, tests[i].sigalgo, 0, + &invalid_raw_data, + &signature); + if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) + testfail("gnutls_x509_pubkey_verify_data2-2 (hashed data)\n"); + + sign_algo = + gnutls_pk_to_sign(gnutls_pubkey_get_pk_algorithm + (pubkey, NULL), tests[i].digest); + ret = + gnutls_pubkey_verify_data2(pubkey, sign_algo, 0, + &raw_data, &signature); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_data2-1 (hashed data)\n"); + + /* should fail */ + ret = + gnutls_pubkey_verify_data2(pubkey, sign_algo, 0, + &invalid_raw_data, + &signature); + if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) + testfail("gnutls_x509_pubkey_verify_data2-2 (hashed data)\n"); + + /* test the raw interface */ + gnutls_free(signature.data); + signature.data = NULL; + + gnutls_free(signature.data); + gnutls_x509_crt_deinit(crt); + gnutls_privkey_deinit(privkey); + gnutls_pubkey_deinit(pubkey); + } + + gnutls_global_deinit(); +} diff --git a/tests/sign-verify-data.c b/tests/sign-verify-data.c new file mode 100644 index 0000000000..558ad22530 --- /dev/null +++ b/tests/sign-verify-data.c @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +#endif +#include +#include +#include +#include +#include "common-key-tests.h" +#include "utils.h" + +/* verifies whether the sign-data and verify-data APIs + * operate as expected */ + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d> %s", level, str); +} + +/* sha1 hash of "hello" string */ +const gnutls_datum_t raw_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x2c\xd9\xae\xa9\x43\x4d", + 20 +}; + +const gnutls_datum_t invalid_raw_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x3c\xd9\xae\xa9\x43\x4d", + 20 +}; + +#define tests common_key_tests +#define testfail(fmt, ...) \ + fail("%s: "fmt, tests[i].name, ##__VA_ARGS__) + +void doit(void) +{ + gnutls_x509_crt_t crt; + gnutls_pubkey_t pubkey; + gnutls_privkey_t privkey; + gnutls_sign_algorithm_t sign_algo; + gnutls_datum_t signature; + int ret; + size_t i; + + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + if (tests[i].pk == GNUTLS_PK_DSA) + continue; + + success("testing: %s - %s\n", tests[i].name, gnutls_sign_algorithm_get_name(tests[i].sigalgo)); + + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + testfail("gnutls_pubkey_init\n"); + + ret = gnutls_privkey_import_x509_raw(privkey, &tests[i].key, GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + testfail("gnutls_privkey_import_x509\n"); + + ret = gnutls_privkey_sign_data(privkey, tests[i].digest, tests[i].sign_flags, + &raw_data, &signature); + if (ret < 0) + testfail("gnutls_x509_privkey_sign_hash\n"); + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) + testfail("gnutls_x509_crt_init\n"); + + ret = + gnutls_x509_crt_import(crt, &tests[i].cert, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + testfail("gnutls_x509_crt_import\n"); + + ret = gnutls_pubkey_import_x509(pubkey, crt, 0); + if (ret < 0) + testfail("gnutls_x509_pubkey_import\n"); + + ret = + gnutls_pubkey_verify_data2(pubkey, tests[i].sigalgo, 0, &raw_data, + &signature); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_data2\n"); + + /* should fail */ + ret = + gnutls_pubkey_verify_data2(pubkey, tests[i].sigalgo, 0, + &invalid_raw_data, + &signature); + if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) + testfail("gnutls_x509_pubkey_verify_data2-2 (hashed data)\n"); + + sign_algo = + gnutls_pk_to_sign(gnutls_pubkey_get_pk_algorithm + (pubkey, NULL), tests[i].digest); + ret = + gnutls_pubkey_verify_data2(pubkey, sign_algo, 0, + &raw_data, &signature); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_data2-1 (hashed data)\n"); + + /* should fail */ + ret = + gnutls_pubkey_verify_data2(pubkey, sign_algo, 0, + &invalid_raw_data, + &signature); + if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) + testfail("gnutls_x509_pubkey_verify_data2-2 (hashed data)\n"); + + /* test the raw interface */ + gnutls_free(signature.data); + + gnutls_free(signature.data); + gnutls_x509_crt_deinit(crt); + gnutls_privkey_deinit(privkey); + gnutls_pubkey_deinit(pubkey); + } + + gnutls_global_deinit(); +} diff --git a/tests/sign-verify-deterministic.c b/tests/sign-verify-deterministic.c new file mode 100644 index 0000000000..6e907288ee --- /dev/null +++ b/tests/sign-verify-deterministic.c @@ -0,0 +1,209 @@ +/* + * Copyright (C) 2017-2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos, Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +#endif +#include +#include +#include +#include +#include "utils.h" + +/* verifies whether the sign-data and verify-data APIs + * operate as expected with deterministic ECDSA/DSA (RFC 6979) */ + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d> %s", level, str); +} + +struct _key_tests_st { + const char *name; + gnutls_datum_t key; + gnutls_datum_t msg; + gnutls_datum_t sig; + gnutls_pk_algorithm_t pk; + gnutls_digest_algorithm_t digest; + gnutls_sign_algorithm_t sigalgo; + unsigned int sign_flags; +}; + +/* Test vectors from RFC 6979 */ +static const char dsa_privkey_rfc6979[] = + "-----BEGIN DSA PRIVATE KEY-----\n" + "MIIBugIBAAKBgQCG9coD3P6yJQY/+DCgx2m53Z1hU62R184n94fEMni0R+ZTO4ax\n" + "i+1uiki3hKFMJSxb4Nv2C4bWOFvS8S+3Y+2Ic6v9P1ui4KjApZCC6sBWk15Sna98\n" + "YQRniZx3re38hGyIGHC3sZsrWPm+BSGhcALjvda4ZoXukLPZobAreCsXeQIVAJlv\n" + "ln9sjjiNnijQHiBfupV6VpixAoGAB7D5JUYVC2JRS7dx4qDAzjh/A72mxWtQUgn/\n" + "Jf08Ez2Ju82X6QTgkRTZp9796t/JB46lRNLkAa7sxAu5+794/YeZWhChwny3eJtZ\n" + "S6fvtcQyap/lmgcOE223cXVGStykF75dzi9A0QpGo6OUPyarf9nAOY/4x27gpWgm\n" + "qKiPHb0CgYBd9eAd7THQKX4nThaRwZL+WGj++eGahHdkVLEAzxb2U5IZWji5BSPi\n" + "VC7mGHHARAy4fDIvxLTS7F4efsdm4b6NTOk1Q33BHDyP1CYziTPr/nOcs0ZfTTZo\n" + "xeRzUIJTseaC9ly9xPrpPC6iEjkOVJBahuIiMXC0Tqp9pd2f/Pt/OwIUQRYCyxmm\n" + "zMNElNedmO8eftWvJfc=\n" + "-----END DSA PRIVATE KEY-----\n"; + +static const char ecdsa_secp256r1_privkey_rfc6979[] = + "-----BEGIN EC PRIVATE KEY-----\n" + "MHgCAQEEIQDJr6nYRbp1FmtcIVdnsdaTTlDD2zbomxJ7imIrEg9nIaAKBggqhkjO\n" + "PQMBB6FEA0IABGD+1LolWp0xyWHrdMY1bWjASbiSO2H6bOZpYi5g8p+2eQP+EAi4\n" + "vJmkGunpVii8ZPLxsgwtfp9Rd6PClNRGIpk=\n" + "-----END EC PRIVATE KEY-----\n"; + +static const char sample[] = "sample"; + +static const +struct _key_tests_st tests[] = { + { + .name = "dsa key", + .key = {(void *) dsa_privkey_rfc6979, sizeof(dsa_privkey_rfc6979)-1}, + .msg = {(void *) sample, sizeof(sample)-1}, + .sig = {(void *) "\x30\x2d\x02\x15\x00\x81\xf2\xf5\x85\x0b\xe5\xbc\x12\x3c\x43\xf7\x1a\x30\x33\xe9\x38\x46\x11\xc5\x45\x02\x14\x4c\xdd\x91\x4b\x65\xeb\x6c\x66\xa8\xaa\xad\x27\x29\x9b\xee\x6b\x03\x5f\x5e\x89", 47}, + .pk = GNUTLS_PK_DSA, + .digest = GNUTLS_DIG_SHA256, + .sigalgo = GNUTLS_SIGN_DSA_SHA256, + .sign_flags = GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE + }, + { + .name = "ecdsa key", + .key = {(void *) ecdsa_secp256r1_privkey_rfc6979, sizeof(ecdsa_secp256r1_privkey_rfc6979)-1}, + .msg = {(void *) sample, sizeof(sample)-1}, + .sig = {(void *) "\x30\x46\x02\x21\x00\xef\xd4\x8b\x2a\xac\xb6\xa8\xfd\x11\x40\xdd\x9c\xd4\x5e\x81\xd6\x9d\x2c\x87\x7b\x56\xaa\xf9\x91\xc3\x4d\x0e\xa8\x4e\xaf\x37\x16\x02\x21\x00\xf7\xcb\x1c\x94\x2d\x65\x7c\x41\xd4\x36\xc7\xa1\xb6\xe2\x9f\x65\xf3\xe9\x00\xdb\xb9\xaf\xf4\x06\x4d\xc4\xab\x2f\x84\x3a\xcd\xa8", 72}, + .pk = GNUTLS_PK_ECDSA, + .digest = GNUTLS_DIG_SHA256, + .sigalgo = GNUTLS_SIGN_ECDSA_SECP256R1_SHA256, + .sign_flags = GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE + }, + { + .name = "ecdsa key", + .key = {(void *) ecdsa_secp256r1_privkey_rfc6979, sizeof(ecdsa_secp256r1_privkey_rfc6979)-1}, + .msg = {(void *) sample, sizeof(sample)-1}, + .sig = {(void *) "\x30\x46\x02\x21\x00\xef\xd4\x8b\x2a\xac\xb6\xa8\xfd\x11\x40\xdd\x9c\xd4\x5e\x81\xd6\x9d\x2c\x87\x7b\x56\xaa\xf9\x91\xc3\x4d\x0e\xa8\x4e\xaf\x37\x16\x02\x21\x00\xf7\xcb\x1c\x94\x2d\x65\x7c\x41\xd4\x36\xc7\xa1\xb6\xe2\x9f\x65\xf3\xe9\x00\xdb\xb9\xaf\xf4\x06\x4d\xc4\xab\x2f\x84\x3a\xcd\xa8", 72}, + .pk = GNUTLS_PK_ECDSA, + .digest = GNUTLS_DIG_SHA256, + .sigalgo = GNUTLS_SIGN_ECDSA_SHA256, + .sign_flags = GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE + }, + { + .name = "ecdsa key (q bits < h bits)", + .key = {(void *) ecdsa_secp256r1_privkey_rfc6979, sizeof(ecdsa_secp256r1_privkey_rfc6979)-1}, + .msg = {(void *) sample, sizeof(sample)-1}, + .sig = {(void *) "\x30\x44\x02\x20\x0e\xaf\xea\x03\x9b\x20\xe9\xb4\x23\x09\xfb\x1d\x89\xe2\x13\x05\x7c\xbf\x97\x3d\xc0\xcf\xc8\xf1\x29\xed\xdd\xc8\x00\xef\x77\x19\x02\x20\x48\x61\xf0\x49\x1e\x69\x98\xb9\x45\x51\x93\xe3\x4e\x7b\x0d\x28\x4d\xdd\x71\x49\xa7\x4b\x95\xb9\x26\x1f\x13\xab\xde\x94\x09\x54", 70}, + .pk = GNUTLS_PK_ECDSA, + .digest = GNUTLS_DIG_SHA384, + .sigalgo = GNUTLS_SIGN_ECDSA_SHA384, + .sign_flags = GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE + }, + { + .name = "ecdsa key (q bits > h bits)", + .key = {(void *) ecdsa_secp256r1_privkey_rfc6979, sizeof(ecdsa_secp256r1_privkey_rfc6979)-1}, + .msg = {(void *) sample, sizeof(sample)-1}, + .sig = {(void *) "\x30\x45\x02\x20\x53\xb2\xff\xf5\xd1\x75\x2b\x2c\x68\x9d\xf2\x57\xc0\x4c\x40\xa5\x87\xfa\xba\xbb\x3f\x6f\xc2\x70\x2f\x13\x43\xaf\x7c\xa9\xaa\x3f\x02\x21\x00\xb9\xaf\xb6\x4f\xdc\x03\xdc\x1a\x13\x1c\x7d\x23\x86\xd1\x1e\x34\x9f\x07\x0a\xa4\x32\xa4\xac\xc9\x18\xbe\xa9\x88\xbf\x75\xc7\x4c", 71}, + .pk = GNUTLS_PK_ECDSA, + .digest = GNUTLS_DIG_SHA224, + .sigalgo = GNUTLS_SIGN_ECDSA_SHA224, + .sign_flags = GNUTLS_PRIVKEY_FLAG_REPRODUCIBLE + } +}; + +#define testfail(fmt, ...) \ + fail("%s: "fmt, tests[i].name, ##__VA_ARGS__) + +void doit(void) +{ + gnutls_pubkey_t pubkey; + gnutls_privkey_t privkey; + gnutls_datum_t signature; + int ret; + size_t i; + + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + success("testing: %s - %s", tests[i].name, gnutls_sign_algorithm_get_name(tests[i].sigalgo)); + + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + testfail("gnutls_pubkey_init\n"); + + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + signature.data = NULL; + signature.size = 0; + + ret = gnutls_privkey_import_x509_raw(privkey, &tests[i].key, GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + testfail("gnutls_privkey_import_x509_raw\n"); + + ret = gnutls_privkey_sign_data(privkey, tests[i].digest, tests[i].sign_flags, + &tests[i].msg, &signature); + if (gnutls_fips140_mode_enabled()) { + /* deterministic ECDSA/DSA is prohibited under FIPS */ + if (ret != GNUTLS_E_INVALID_REQUEST) + testfail("gnutls_privkey_sign_data unexpectedly succeeds\n"); + success(" - skipping\n"); + goto next; + } else { + if (ret < 0) + testfail("gnutls_privkey_sign_data\n"); + } + + if (signature.size != tests[i].sig.size || + memcmp(signature.data, tests[i].sig.data, signature.size) != 0) + testfail("signature does not match"); + + ret = gnutls_pubkey_import_privkey(pubkey, privkey, 0, 0); + if (ret < 0) + testfail("gnutls_pubkey_import_privkey\n"); + + ret = + gnutls_pubkey_verify_data2(pubkey, tests[i].sigalgo, 0, &tests[i].msg, + &signature); + if (ret < 0) + testfail("gnutls_pubkey_verify_data2\n"); + success(" - pass"); + + next: + gnutls_free(signature.data); + gnutls_privkey_deinit(privkey); + gnutls_pubkey_deinit(pubkey); + } + + gnutls_global_deinit(); +} diff --git a/tests/sign-verify-ed25519-rfc8080.c b/tests/sign-verify-ed25519-rfc8080.c new file mode 100644 index 0000000000..75585b982c --- /dev/null +++ b/tests/sign-verify-ed25519-rfc8080.c @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +#include +#include +#include +#endif +#include +#include +#include +#include +#include "utils.h" + +/* verifies whether the sign-data and verify-data APIs + * operate as expected */ + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d> %s", level, str); +} + +/* Values from RFC8080 */ +static unsigned char ed25519_x[] = + "\x97\x4d\x96\xa2\x2d\x22\x4b\xc0\x1a\xdb\x91\x50\x91\x47\x7d\x44\xcc\xd9\x1c\x9a\x41\xa1\x14\x30\x01\x01\x17\xd5\x2c\x59\x24\x0e"; +static unsigned char ed25519_k[] = + "\x38\x32\x32\x36\x30\x33\x38\x34\x36\x32\x38\x30\x38\x30\x31\x32\x32\x36\x34\x35\x31\x39\x30\x32\x30\x34\x31\x34\x32\x32\x36\x32"; + +static gnutls_datum_t _ed25519_x = { ed25519_x, sizeof(ed25519_x) - 1 }; +static gnutls_datum_t _ed25519_k = { ed25519_k, sizeof(ed25519_k) - 1 }; + +/* sha1 hash of "hello" string */ +const gnutls_datum_t raw_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x2c\xd9\xae\xa9\x43\x4d", + 20 +}; + +const gnutls_datum_t invalid_raw_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x3c\xd9\xae\xa9\x43\x4d", + 20 +}; + +void doit(void) +{ + gnutls_pubkey_t pubkey; + gnutls_privkey_t key; + gnutls_datum_t signature; + int ret; + + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + ret = gnutls_privkey_init(&key); + if (ret < 0) + fail("error\n"); + + ret = + gnutls_privkey_import_ecc_raw(key, GNUTLS_ECC_CURVE_ED25519, + &_ed25519_x, NULL, &_ed25519_k); + if (ret < 0) + fail("error\n"); + + ret = gnutls_privkey_verify_params(key); + if (ret != 0) + fail("error: %s\n", gnutls_strerror(ret)); + + ret = gnutls_privkey_sign_data(key, GNUTLS_DIG_SHA512, 0, + &raw_data, &signature); + if (ret < 0) + fail("gnutls_x509_privkey_sign_hash\n"); + + /* verification */ + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + fail("gnutls_privkey_init\n"); + + ret = gnutls_pubkey_import_privkey(pubkey, key, 0, 0); + if (ret < 0) + fail("gnutls_x509_pubkey_import\n"); + + ret = + gnutls_pubkey_verify_data2(pubkey, GNUTLS_SIGN_EDDSA_ED25519, 0, + &raw_data, &signature); + if (ret < 0) + fail("gnutls_x509_pubkey_verify_data2\n"); + + gnutls_pubkey_deinit(pubkey); + + /* try importing the pubkey directly */ + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + fail("gnutls_privkey_init\n"); + + ret = gnutls_pubkey_import_ecc_raw(pubkey, GNUTLS_ECC_CURVE_ED25519, &_ed25519_x, NULL); + if (ret < 0) + fail("gnutls_x509_pubkey_import_ecc_raw\n"); + + ret = + gnutls_pubkey_verify_data2(pubkey, GNUTLS_SIGN_EDDSA_ED25519, 0, + &raw_data, &signature); + if (ret < 0) + fail("gnutls_x509_pubkey_verify_data2\n"); + + gnutls_pubkey_deinit(pubkey); + + gnutls_privkey_deinit(key); + gnutls_free(signature.data); + + gnutls_global_deinit(); +} diff --git a/tests/sign-verify-ext.c b/tests/sign-verify-ext.c new file mode 100644 index 0000000000..cc80bf907f --- /dev/null +++ b/tests/sign-verify-ext.c @@ -0,0 +1,242 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* This tests the gnutls_privkey_import_ext2() APIs */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +#endif +#include +#include +#include +#include +#include "common-key-tests.h" +#include "utils.h" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d> %s", level, str); +} + +/* sha1 hash of "hello" string */ +const gnutls_datum_t sha1_hash_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x2c\xd9\xae\xa9\x43\x4d", + 20 +}; + +const gnutls_datum_t sha256_hash_data = { + (void *) + "\x2c\xf2\x4d\xba\x5f\xb0\xa3\x0e\x26\xe8\x3b\x2a\xc5\xb9\xe2\x9e" + "\x1b\x16\x1e\x5c\x1f\xa7\x42\x5e\x73\x04\x33\x62\x93\x8b\x98\x24", + 32 +}; + +const gnutls_datum_t raw_data = { + (void *) "hello", + 5 +}; + + +struct key_cb_data { + gnutls_privkey_t rkey; /* the real thing */ +}; + +static +int key_cb_sign_func (gnutls_privkey_t key, void* userdata, const gnutls_datum_t * data, + gnutls_datum_t * signature) +{ + struct key_cb_data *p = userdata; + + return gnutls_privkey_sign_hash(p->rkey, 0, GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, data, signature); +} + +static void key_cb_deinit_func(gnutls_privkey_t key, void* userdata) +{ + struct key_cb_data *p = userdata; + gnutls_privkey_deinit(p->rkey); + free(userdata); +} + +static gnutls_privkey_t load_virt_privkey(const gnutls_datum_t *txtkey, gnutls_pk_algorithm_t pk) +{ + gnutls_privkey_t privkey; + struct key_cb_data *userdata; + int ret; + + userdata = calloc(1, sizeof(struct key_cb_data)); + if (userdata == NULL) { + fail("memory error\n"); + } + + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + fail("gnutls_privkey_init\n"); + + ret = gnutls_privkey_init(&userdata->rkey); + if (ret < 0) + fail("gnutls_privkey_init\n"); + + ret = + gnutls_privkey_import_x509_raw(userdata->rkey, txtkey, GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("gnutls_privkey_import\n"); + + ret = gnutls_privkey_import_ext2(privkey, pk, userdata, key_cb_sign_func, NULL, key_cb_deinit_func, GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE); + if (ret < 0) + fail("gnutls_privkey_import_ext2\n"); + + return privkey; +} + +#define tests common_key_tests +#define testfail(fmt, ...) \ + fail("%s: "fmt, tests[i].name, ##__VA_ARGS__) + +void doit(void) +{ + gnutls_pubkey_t pubkey; + gnutls_privkey_t privkey; + gnutls_sign_algorithm_t sign_algo; + gnutls_datum_t signature; + gnutls_datum_t signature2; + int ret; + size_t i; + const gnutls_datum_t *hash_data; + + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + if (tests[i].pk == GNUTLS_PK_RSA_PSS || tests[i].pk == GNUTLS_PK_EDDSA_ED25519) + continue; + + success("testing: %s - %s\n", tests[i].name, gnutls_sign_algorithm_get_name(tests[i].sigalgo)); + + if (tests[i].digest == GNUTLS_DIG_SHA1) { + hash_data = &sha1_hash_data; + } else { + hash_data = &sha256_hash_data; + } + + privkey = load_virt_privkey(&tests[i].key, tests[i].pk); + + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = gnutls_privkey_sign_hash(privkey, tests[i].digest, tests[i].sign_flags, + hash_data, &signature2); + if (ret < 0) + testfail("gnutls_privkey_sign_hash\n"); + + ret = gnutls_privkey_sign_data(privkey, tests[i].digest, tests[i].sign_flags, + &raw_data, &signature); + if (ret < 0) + testfail("gnutls_x509_privkey_sign_hash\n"); + + ret = gnutls_pubkey_import_x509_raw(pubkey, &tests[i].cert, GNUTLS_X509_FMT_PEM, 0); + if (ret < 0) + testfail("gnutls_x509_pubkey_import\n"); + + ret = + gnutls_pubkey_verify_hash2(pubkey, tests[i].sigalgo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, hash_data, + &signature); + if (ret < 0) + testfail("gnutls_pubkey_verify_hash2\n"); + + ret = + gnutls_pubkey_verify_hash2(pubkey, tests[i].sigalgo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, hash_data, + &signature2); + if (ret < 0) + testfail("gnutls_pubkey_verify_hash2-1 (hashed data)\n"); + + /* test the raw interface */ + gnutls_free(signature.data); + gnutls_free(signature2.data); + + if (gnutls_pubkey_get_pk_algorithm(pubkey, NULL) == + GNUTLS_PK_RSA) { + + ret = + gnutls_privkey_sign_hash(privkey, + tests[i].digest, + GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_privkey_sign_hash: %s\n", + gnutls_strerror(ret)); + + sign_algo = + gnutls_pk_to_sign + (gnutls_pubkey_get_pk_algorithm(pubkey, NULL), + tests[i].digest); + + ret = + gnutls_pubkey_verify_hash2(pubkey, sign_algo, + GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_pubkey_verify_hash-3 (raw hashed data)\n"); + + gnutls_free(signature.data); + /* test the legacy API */ + ret = + gnutls_privkey_sign_raw_data(privkey, 0, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_privkey_sign_raw_data: %s\n", + gnutls_strerror(ret)); + + ret = + gnutls_pubkey_verify_hash2(pubkey, sign_algo, + GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_pubkey_verify_hash-4 (legacy raw hashed data)\n"); + } + gnutls_free(signature.data); + gnutls_free(signature2.data); + gnutls_privkey_deinit(privkey); + gnutls_pubkey_deinit(pubkey); + } + + gnutls_global_deinit(); +} diff --git a/tests/sign-verify-ext4.c b/tests/sign-verify-ext4.c new file mode 100644 index 0000000000..c01beff33f --- /dev/null +++ b/tests/sign-verify-ext4.c @@ -0,0 +1,298 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* This tests the gnutls_privkey_import_ext4() APIs */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +#endif +#include +#include +#include +#include +#include "common-key-tests.h" +#include "utils.h" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d> %s", level, str); +} + +/* sha1 hash of "hello" string */ +const gnutls_datum_t sha1_hash_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x2c\xd9\xae\xa9\x43\x4d", + 20 +}; + +const gnutls_datum_t sha256_hash_data = { + (void *) + "\x2c\xf2\x4d\xba\x5f\xb0\xa3\x0e\x26\xe8\x3b\x2a\xc5\xb9\xe2\x9e" + "\x1b\x16\x1e\x5c\x1f\xa7\x42\x5e\x73\x04\x33\x62\x93\x8b\x98\x24", + 32 +}; + +const gnutls_datum_t raw_data = { + (void *) "hello", + 5 +}; + + +struct key_cb_data { + gnutls_privkey_t rkey; /* the real thing */ + unsigned pk; + unsigned sig; + unsigned bits; +}; + +static int key_cb_info_func(gnutls_privkey_t key, unsigned int flags, void *userdata) +{ + struct key_cb_data *p = userdata; + + if (flags & GNUTLS_PRIVKEY_INFO_PK_ALGO) + return p->pk; + else if (flags & GNUTLS_PRIVKEY_INFO_PK_ALGO_BITS) + return p->bits; + else if (flags & GNUTLS_PRIVKEY_INFO_HAVE_SIGN_ALGO) { + unsigned sig = GNUTLS_FLAGS_TO_SIGN_ALGO(flags); + + if (sig == p->sig) + return 1; + + return 0; + } + + return -1; +} + +static +int key_cb_sign_data_func (gnutls_privkey_t key, gnutls_sign_algorithm_t sig, + void* userdata, unsigned int flags, const gnutls_datum_t *data, + gnutls_datum_t *signature) +{ + struct key_cb_data *p = userdata; + + if (debug) + fprintf(stderr, "signing data with: %s\n", gnutls_sign_get_name(sig)); + return gnutls_privkey_sign_data2(p->rkey, sig, 0, data, signature); +} + +static +int key_cb_sign_hash_func (gnutls_privkey_t key, gnutls_sign_algorithm_t sig, + void* userdata, unsigned int flags, const gnutls_datum_t *data, + gnutls_datum_t *signature) +{ + struct key_cb_data *p = userdata; + + if (sig == GNUTLS_SIGN_RSA_RAW) { + if (debug) + fprintf(stderr, "signing digestinfo with: raw RSA\n"); + return gnutls_privkey_sign_hash(p->rkey, 0, GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, data, signature); + } else { + if (debug) + fprintf(stderr, "signing hash with: %s\n", gnutls_sign_get_name(sig)); + return gnutls_privkey_sign_hash2(p->rkey, sig, 0, data, signature); + } +} + +static void key_cb_deinit_func(gnutls_privkey_t key, void* userdata) +{ + struct key_cb_data *p = userdata; + gnutls_privkey_deinit(p->rkey); + free(userdata); +} + +static gnutls_privkey_t load_virt_privkey(const gnutls_datum_t *txtkey, gnutls_pk_algorithm_t pk, + gnutls_sign_algorithm_t sig) +{ + gnutls_privkey_t privkey; + struct key_cb_data *userdata; + int ret; + + userdata = calloc(1, sizeof(struct key_cb_data)); + if (userdata == NULL) { + fail("memory error\n"); + } + + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + fail("gnutls_privkey_init\n"); + + ret = gnutls_privkey_init(&userdata->rkey); + if (ret < 0) + fail("gnutls_privkey_init\n"); + + ret = + gnutls_privkey_import_x509_raw(userdata->rkey, txtkey, GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("gnutls_privkey_import\n"); + + gnutls_privkey_get_pk_algorithm(userdata->rkey, &userdata->bits); + + userdata->pk = pk; + userdata->sig = sig; + + ret = gnutls_privkey_import_ext4(privkey, userdata, + key_cb_sign_data_func, + key_cb_sign_hash_func, + NULL, + key_cb_deinit_func, key_cb_info_func, + GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE); + if (ret < 0) + fail("gnutls_privkey_import_ext4\n"); + + return privkey; +} + +#define tests common_key_tests +#define testfail(fmt, ...) \ + fail("%s: "fmt, tests[i].name, ##__VA_ARGS__) + +void doit(void) +{ + gnutls_pubkey_t pubkey; + gnutls_privkey_t privkey; + gnutls_sign_algorithm_t sign_algo; + gnutls_datum_t signature; + gnutls_datum_t signature2; + int ret; + size_t i; + const gnutls_datum_t *hash_data; + + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + if (debug) + success("loop %d: %s\n", (int) i, tests[i].name); + + if (tests[i].digest == GNUTLS_DIG_SHA1) { + hash_data = &sha1_hash_data; + } else { + hash_data = &sha256_hash_data; + } + + privkey = load_virt_privkey(&tests[i].key, tests[i].pk, tests[i].sigalgo); + + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + + ret = gnutls_privkey_sign_data2(privkey, tests[i].sigalgo, tests[i].sign_flags, + &raw_data, &signature); + if (ret < 0) + testfail("gnutls_x509_privkey_sign_hash\n"); + + ret = gnutls_pubkey_import_x509_raw(pubkey, &tests[i].cert, GNUTLS_X509_FMT_PEM, 0); + if (ret < 0) + testfail("gnutls_x509_pubkey_import\n"); + + ret = + gnutls_pubkey_verify_data2(pubkey, tests[i].sigalgo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, &raw_data, + &signature); + if (ret < 0) + testfail("gnutls_pubkey_verify_data2\n"); + + gnutls_free(signature.data); + + + if (!tests[i].data_only) { + ret = gnutls_privkey_sign_hash(privkey, tests[i].digest, tests[i].sign_flags, + hash_data, &signature2); + if (ret < 0) + testfail("gnutls_privkey_sign_hash\n"); + + ret = + gnutls_pubkey_verify_hash2(pubkey, tests[i].sigalgo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, hash_data, + &signature2); + if (ret < 0) + testfail("gnutls_pubkey_verify_hash2-1 (hashed data)\n"); + + gnutls_free(signature2.data); + } + + if (gnutls_pubkey_get_pk_algorithm(pubkey, NULL) == + GNUTLS_PK_RSA) { + + ret = + gnutls_privkey_sign_hash(privkey, + tests[i].digest, + GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_privkey_sign_hash: %s\n", + gnutls_strerror(ret)); + + sign_algo = + gnutls_pk_to_sign + (gnutls_pubkey_get_pk_algorithm(pubkey, NULL), + tests[i].digest); + + ret = + gnutls_pubkey_verify_hash2(pubkey, sign_algo, + GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_pubkey_verify_hash-3 (raw hashed data)\n"); + + gnutls_free(signature.data); + /* test the legacy API */ + ret = + gnutls_privkey_sign_raw_data(privkey, 0, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_privkey_sign_raw_data: %s\n", + gnutls_strerror(ret)); + + ret = + gnutls_pubkey_verify_hash2(pubkey, sign_algo, + GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_pubkey_verify_hash-4 (legacy raw hashed data)\n"); + } + gnutls_free(signature.data); + gnutls_free(signature2.data); + gnutls_privkey_deinit(privkey); + gnutls_pubkey_deinit(pubkey); + } + + gnutls_global_deinit(); +} diff --git a/tests/sign-verify-newapi.c b/tests/sign-verify-newapi.c new file mode 100644 index 0000000000..7dae1b18a2 --- /dev/null +++ b/tests/sign-verify-newapi.c @@ -0,0 +1,264 @@ +/* + * Copyright (C) 2004-2012 Free Software Foundation, Inc. + * Copyright (C) 2017-2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos, Simon Josefsson + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +#endif +#include +#include +#include +#include +#include "common-key-tests.h" +#include "utils.h" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d> %s", level, str); +} + +/* sha1 hash of "hello" string */ +const gnutls_datum_t sha1_hash_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x2c\xd9\xae\xa9\x43\x4d", + 20 +}; + +const gnutls_datum_t sha256_hash_data = { + (void *) + "\x2c\xf2\x4d\xba\x5f\xb0\xa3\x0e\x26\xe8\x3b\x2a\xc5\xb9\xe2\x9e" + "\x1b\x16\x1e\x5c\x1f\xa7\x42\x5e\x73\x04\x33\x62\x93\x8b\x98\x24", + 32 +}; + +const gnutls_datum_t sha256_invalid_hash_data = { + (void *) + "\x2c\xf2\x4d\xba\x5f\xb1\xa3\x0e\x26\xe8\x3b\x2a\xc5\xb9\xe2\x9e" + "\x1b\x16\x1e\x5c\x1f\xa3\x42\x5e\x73\x04\x33\x62\x93\x8b\x98\x24", + 32 +}; + +const gnutls_datum_t sha1_invalid_hash_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xca\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x2c\xb9\xae\xa9\x43\x4d", + 20 +}; + +const gnutls_datum_t raw_data = { + (void *) "hello", + 5 +}; + +#define tests common_key_tests +#define testfail(fmt, ...) \ + fail("%s: "fmt, tests[i].name, ##__VA_ARGS__) + +void doit(void) +{ + gnutls_x509_privkey_t key; + gnutls_x509_crt_t crt; + gnutls_pubkey_t pubkey; + gnutls_privkey_t privkey; + gnutls_sign_algorithm_t sign_algo; + gnutls_datum_t signature; + gnutls_datum_t signature2; + int ret; + size_t i; + const gnutls_datum_t *hash_data; + const gnutls_datum_t *invalid_hash_data; + + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + if (tests[i].pk == GNUTLS_PK_EDDSA_ED25519) + continue; + + success("testing: %s - %s\n", tests[i].name, gnutls_sign_algorithm_get_name(tests[i].sigalgo)); + + if (tests[i].digest == GNUTLS_DIG_SHA1) { + hash_data = &sha1_hash_data; + invalid_hash_data = &sha1_invalid_hash_data; + } else { + hash_data = &sha256_hash_data; + invalid_hash_data = &sha256_invalid_hash_data; + } + + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) + testfail("gnutls_x509_privkey_init\n"); + + ret = + gnutls_x509_privkey_import(key, &tests[i].key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + testfail("gnutls_x509_privkey_import\n"); + + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + testfail("gnutls_pubkey_init\n"); + + ret = gnutls_privkey_import_x509(privkey, key, 0); + if (ret < 0) + testfail("gnutls_privkey_import_x509\n"); + + ret = gnutls_privkey_sign_hash2(privkey, tests[i].sigalgo, 0, + hash_data, &signature2); + if (ret < 0) + testfail("gnutls_privkey_sign_hash\n"); + + ret = gnutls_privkey_sign_data2(privkey, tests[i].sigalgo, 0, + &raw_data, &signature); + if (ret < 0) + testfail("gnutls_x509_privkey_sign_hash\n"); + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) + testfail("gnutls_x509_crt_init\n"); + + ret = + gnutls_x509_crt_import(crt, &tests[i].cert, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + testfail("gnutls_x509_crt_import\n"); + + ret = gnutls_pubkey_import_x509(pubkey, crt, 0); + if (ret < 0) + testfail("gnutls_x509_pubkey_import\n"); + + ret = + gnutls_pubkey_verify_hash2(pubkey, tests[i].sigalgo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, hash_data, + &signature); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_hash2\n"); + + /* Test functionality of GNUTLS_VERIFY_DISABLE_CA_SIGN (see issue #754) */ + ret = + gnutls_pubkey_verify_hash2(pubkey, tests[i].sigalgo, GNUTLS_VERIFY_DISABLE_CA_SIGN, hash_data, + &signature); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_hash2 with GNUTLS_VERIFY_DISABLE_CA_SIGN\n"); + + ret = + gnutls_pubkey_verify_hash2(pubkey, tests[i].sigalgo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, hash_data, + &signature2); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_hash-1 (hashed data)\n"); + + /* should fail */ + ret = + gnutls_pubkey_verify_hash2(pubkey, tests[i].sigalgo, + GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, + invalid_hash_data, + &signature2); + if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) + testfail("gnutls_x509_pubkey_verify_hash-2 (hashed data)\n"); + + sign_algo = + gnutls_pk_to_sign(gnutls_pubkey_get_pk_algorithm + (pubkey, NULL), tests[i].digest); + + ret = + gnutls_pubkey_verify_hash2(pubkey, sign_algo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, + hash_data, &signature2); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_hash2-1 (hashed data)\n"); + + /* should fail */ + ret = + gnutls_pubkey_verify_hash2(pubkey, sign_algo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, + invalid_hash_data, + &signature2); + if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) + testfail("gnutls_x509_pubkey_verify_hash2-2 (hashed data)\n"); + + /* test the raw interface */ + gnutls_free(signature.data); + signature.data = NULL; + + if (gnutls_pubkey_get_pk_algorithm(pubkey, NULL) == + GNUTLS_PK_RSA) { + + ret = + gnutls_privkey_sign_hash2(privkey, + tests[i].sigalgo, + GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_privkey_sign_hash: %s\n", + gnutls_strerror(ret)); + + ret = + gnutls_pubkey_verify_hash2(pubkey, tests[i].sigalgo, + GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_pubkey_verify_hash-3 (raw hashed data)\n"); + gnutls_free(signature.data); + /* test the legacy API */ + ret = + gnutls_privkey_sign_raw_data(privkey, 0, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_privkey_sign_raw_data: %s\n", + gnutls_strerror(ret)); + + ret = + gnutls_pubkey_verify_hash2(pubkey, sign_algo, + GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_pubkey_verify_hash-4 (legacy raw hashed data)\n"); + } + gnutls_free(signature.data); + gnutls_free(signature2.data); + gnutls_x509_privkey_deinit(key); + gnutls_x509_crt_deinit(crt); + gnutls_privkey_deinit(privkey); + gnutls_pubkey_deinit(pubkey); + } + + gnutls_global_deinit(); +} diff --git a/tests/sign-verify.c b/tests/sign-verify.c new file mode 100644 index 0000000000..5a14741fc6 --- /dev/null +++ b/tests/sign-verify.c @@ -0,0 +1,263 @@ +/* + * Copyright (C) 2004-2012 Free Software Foundation, Inc. + * + * Author: Nikos Mavrogiannopoulos, Simon Josefsson + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* Parts copied from GnuTLS example programs. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +#endif +#include +#include +#include +#include +#include "common-key-tests.h" +#include "utils.h" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d> %s", level, str); +} + +/* sha1 hash of "hello" string */ +const gnutls_datum_t sha1_hash_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x2c\xd9\xae\xa9\x43\x4d", + 20 +}; + +const gnutls_datum_t sha256_hash_data = { + (void *) + "\x2c\xf2\x4d\xba\x5f\xb0\xa3\x0e\x26\xe8\x3b\x2a\xc5\xb9\xe2\x9e" + "\x1b\x16\x1e\x5c\x1f\xa7\x42\x5e\x73\x04\x33\x62\x93\x8b\x98\x24", + 32 +}; + +const gnutls_datum_t sha256_invalid_hash_data = { + (void *) + "\x2c\xf2\x4d\xba\x5f\xb1\xa3\x0e\x26\xe8\x3b\x2a\xc5\xb9\xe2\x9e" + "\x1b\x16\x1e\x5c\x1f\xa3\x42\x5e\x73\x04\x33\x62\x93\x8b\x98\x24", + 32 +}; + +const gnutls_datum_t sha1_invalid_hash_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xca\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x2c\xb9\xae\xa9\x43\x4d", + 20 +}; + +const gnutls_datum_t raw_data = { + (void *) "hello", + 5 +}; + +#define tests common_key_tests +#define testfail(fmt, ...) \ + fail("%s: "fmt, tests[i].name, ##__VA_ARGS__) + +void doit(void) +{ + gnutls_x509_privkey_t key; + gnutls_x509_crt_t crt; + gnutls_pubkey_t pubkey; + gnutls_privkey_t privkey; + gnutls_sign_algorithm_t sign_algo; + gnutls_datum_t signature; + gnutls_datum_t signature2; + int ret; + size_t i; + const gnutls_datum_t *hash_data; + const gnutls_datum_t *invalid_hash_data; + + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + if (tests[i].pk == GNUTLS_PK_EDDSA_ED25519) + continue; + + success("testing: %s - %s\n", tests[i].name, gnutls_sign_algorithm_get_name(tests[i].sigalgo)); + + if (tests[i].digest == GNUTLS_DIG_SHA1) { + hash_data = &sha1_hash_data; + invalid_hash_data = &sha1_invalid_hash_data; + } else { + hash_data = &sha256_hash_data; + invalid_hash_data = &sha256_invalid_hash_data; + } + + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) + testfail("gnutls_x509_privkey_init\n"); + + ret = + gnutls_x509_privkey_import(key, &tests[i].key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + testfail("gnutls_x509_privkey_import\n"); + + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + testfail("gnutls_pubkey_init\n"); + + ret = gnutls_privkey_import_x509(privkey, key, 0); + if (ret < 0) + testfail("gnutls_privkey_import_x509\n"); + + ret = gnutls_privkey_sign_hash(privkey, tests[i].digest, tests[i].sign_flags, + hash_data, &signature2); + if (ret < 0) + testfail("gnutls_privkey_sign_hash\n"); + + ret = gnutls_privkey_sign_data(privkey, tests[i].digest, tests[i].sign_flags, + &raw_data, &signature); + if (ret < 0) + testfail("gnutls_x509_privkey_sign_hash\n"); + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) + testfail("gnutls_x509_crt_init\n"); + + ret = + gnutls_x509_crt_import(crt, &tests[i].cert, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + testfail("gnutls_x509_crt_import\n"); + + ret = gnutls_pubkey_import_x509(pubkey, crt, 0); + if (ret < 0) + testfail("gnutls_x509_pubkey_import\n"); + + ret = + gnutls_pubkey_verify_hash2(pubkey, tests[i].sigalgo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, hash_data, + &signature); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_hash2\n"); + + ret = + gnutls_pubkey_verify_hash2(pubkey, tests[i].sigalgo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, hash_data, + &signature2); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_hash-1 (hashed data)\n"); + + /* should fail */ + ret = + gnutls_pubkey_verify_hash2(pubkey, tests[i].sigalgo, + GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, + invalid_hash_data, + &signature2); + if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) + testfail("gnutls_x509_pubkey_verify_hash-2 (hashed data)\n"); + + sign_algo = + gnutls_pk_to_sign(gnutls_pubkey_get_pk_algorithm + (pubkey, NULL), tests[i].digest); + + ret = + gnutls_pubkey_verify_hash2(pubkey, sign_algo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, + hash_data, &signature2); + if (ret < 0) + testfail("gnutls_x509_pubkey_verify_hash2-1 (hashed data)\n"); + + /* should fail */ + ret = + gnutls_pubkey_verify_hash2(pubkey, sign_algo, GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1, + invalid_hash_data, + &signature2); + if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) + testfail("gnutls_x509_pubkey_verify_hash2-2 (hashed data)\n"); + + /* test the raw interface */ + gnutls_free(signature.data); + + if (gnutls_pubkey_get_pk_algorithm(pubkey, NULL) == + GNUTLS_PK_RSA) { + + ret = + gnutls_privkey_sign_hash(privkey, + tests[i].digest, + GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_privkey_sign_hash: %s\n", + gnutls_strerror(ret)); + + sign_algo = + gnutls_pk_to_sign + (gnutls_pubkey_get_pk_algorithm(pubkey, NULL), + tests[i].digest); + + ret = + gnutls_pubkey_verify_hash2(pubkey, sign_algo, + GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_pubkey_verify_hash-3 (raw hashed data)\n"); + + gnutls_free(signature.data); + /* test the legacy API */ + ret = + gnutls_privkey_sign_raw_data(privkey, 0, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_privkey_sign_raw_data: %s\n", + gnutls_strerror(ret)); + + ret = + gnutls_pubkey_verify_hash2(pubkey, sign_algo, + GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, + hash_data, + &signature); + if (ret < 0) + testfail("gnutls_pubkey_verify_hash-4 (legacy raw hashed data)\n"); + } + gnutls_free(signature.data); + gnutls_free(signature2.data); + gnutls_x509_privkey_deinit(key); + gnutls_x509_crt_deinit(crt); + gnutls_privkey_deinit(privkey); + gnutls_pubkey_deinit(pubkey); + } + + gnutls_global_deinit(); +} diff --git a/tests/slow/Makefile.am b/tests/slow/Makefile.am index 8f9c4e4db6..b9de9dc472 100644 --- a/tests/slow/Makefile.am +++ b/tests/slow/Makefile.am @@ -47,12 +47,13 @@ mac_override_LDFLAGS = $(NETTLE_LIBS) $(HOGWEED_LIBS) $(GMP_LIBS) $(LDADD) endif -dist_check_SCRIPTS = test-ciphers.sh override-ciphers test-hash-large test-ciphers-common.sh -check_PROGRAMS = $(ctests) cipher-test cipher-override mac-override cipher-override2 hash-large crypto -TESTS = $(ctests) test-ciphers.sh override-ciphers test-hash-large crypto +dist_check_SCRIPTS = test-ciphers.sh override-ciphers test-hash-large.sh test-ciphers-common.sh \ + test-ciphers-api.sh +check_PROGRAMS = $(ctests) cipher-test cipher-api-test cipher-override mac-override cipher-override2 hash-large crypto +TESTS = $(ctests) test-ciphers.sh override-ciphers test-hash-large.sh crypto test-ciphers-api.sh if HAVE_LIBCRYPTO -cipher_openssl_compat_LDFLAGS = $(LDADD) $(LIBCRYPTO) +cipher_openssl_compat_LDADD = $(LDADD) $(LIBCRYPTO) dist_check_SCRIPTS += test-ciphers-openssl.sh check_PROGRAMS += cipher-openssl-compat @@ -64,7 +65,9 @@ EXTRA_DIST = README gnutls-asan.supp TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) \ LC_ALL="C" \ LSAN_OPTIONS=suppressions=gnutls-asan.supp \ + GNUTLS_TEST_SUITE_RUN=1 \ OPENSSL_ia32cap=0x00000000 \ + GNUTLS_SYSTEM_PRIORITY_FILE=$(abs_top_srcdir)/tests/system.prio \ top_builddir="$(top_builddir)" \ srcdir="$(srcdir)" diff --git a/tests/slow/cipher-api-test.c b/tests/slow/cipher-api-test.c new file mode 100644 index 0000000000..a29963aa5a --- /dev/null +++ b/tests/slow/cipher-api-test.c @@ -0,0 +1,280 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(WIN32) +int main(int argc, char **argv) +{ + exit(77); +} +#else + +#include +#include +#include +#include +#include + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d>| %s", level, str); +} + +/* Test whether an invalid call to gnutls_cipher_encrypt() is caught */ +static void test_cipher(int algo) +{ + int ret; + gnutls_cipher_hd_t ch; + uint8_t key16[64]; + uint8_t iv16[32]; + uint8_t data[128]; + gnutls_datum_t key, iv; + + key.data = key16; + key.size = gnutls_cipher_get_key_size(algo); + assert(key.size <= sizeof(key16)); + + iv.data = iv16; + iv.size = gnutls_cipher_get_iv_size(algo); + assert(iv.size <= sizeof(iv16)); + + memset(iv.data, 0xff, iv.size); + memset(key.data, 0xfe, key.size); + memset(data, 0xfa, sizeof(data)); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + ret = global_init(); + if (ret < 0) { + fail("Cannot initialize library\n"); /*errcode 1 */ + } + + ret = + gnutls_cipher_init(&ch, algo, &key, &iv); + if (ret < 0) + fail("gnutls_cipher_init failed\n"); /*errcode 1 */ + + /* try encrypting in a way that violates nettle's block conventions */ + ret = gnutls_cipher_encrypt(ch, data, sizeof(data)-1); + if (ret >= 0) + fail("succeeded in encrypting partial data on block cipher\n"); + + gnutls_cipher_deinit(ch); + + gnutls_global_deinit(); +} + +/* Test whether an invalid gnutls_cipher_add_auth() is caught */ +static void test_aead_cipher1(int algo) +{ + int ret; + gnutls_cipher_hd_t ch; + uint8_t key16[64]; + uint8_t iv16[32]; + uint8_t data[128]; + gnutls_datum_t key, iv; + + if (algo == GNUTLS_CIPHER_CHACHA20_POLY1305) + return; + + key.data = key16; + key.size = gnutls_cipher_get_key_size(algo); + assert(key.size <= sizeof(key16)); + + iv.data = iv16; + iv.size = gnutls_cipher_get_iv_size(algo); + assert(iv.size <= sizeof(iv16)); + + memset(iv.data, 0xff, iv.size); + memset(key.data, 0xfe, key.size); + memset(data, 0xfa, sizeof(data)); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + ret = global_init(); + if (ret < 0) { + fail("Cannot initialize library\n"); /*errcode 1 */ + } + + ret = + gnutls_cipher_init(&ch, algo, &key, &iv); + if (ret < 0) + fail("gnutls_cipher_init failed\n"); /*errcode 1 */ + + ret = gnutls_cipher_add_auth(ch, data, sizeof(data)-1); + if (ret < 0) + fail("could not add auth data\n"); + + ret = gnutls_cipher_add_auth(ch, data, 16); + if (ret >= 0) + fail("succeeded in adding auth data data after partial data were given\n"); + + gnutls_cipher_deinit(ch); + + gnutls_global_deinit(); + return; +} + +/* Test whether an invalid call to gnutls_cipher_encrypt() is caught */ +static void test_aead_cipher2(int algo) +{ + int ret; + gnutls_cipher_hd_t ch; + uint8_t key16[64]; + uint8_t iv16[32]; + uint8_t data[128]; + gnutls_datum_t key, iv; + + key.data = key16; + key.size = gnutls_cipher_get_key_size(algo); + assert(key.size <= sizeof(key16)); + + iv.data = iv16; + iv.size = gnutls_cipher_get_iv_size(algo); + assert(iv.size <= sizeof(iv16)); + + memset(iv.data, 0xff, iv.size); + memset(key.data, 0xfe, key.size); + memset(data, 0xfa, sizeof(data)); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + ret = global_init(); + if (ret < 0) { + fail("Cannot initialize library\n"); /*errcode 1 */ + } + + ret = + gnutls_cipher_init(&ch, algo, &key, &iv); + if (ret < 0) + fail("gnutls_cipher_init failed\n"); /*errcode 1 */ + + /* try encrypting in a way that violates nettle's AEAD conventions */ + ret = gnutls_cipher_encrypt(ch, data, sizeof(data)-1); + if (ret < 0) + fail("could not encrypt data\n"); + + ret = gnutls_cipher_encrypt(ch, data, sizeof(data)); + if (ret >= 0) + fail("succeeded in encrypting partial data after partial data were given\n"); + + gnutls_cipher_deinit(ch); + + gnutls_global_deinit(); + return; +} + +static void check_status(int status) +{ + if (WEXITSTATUS(status) != 0 || + (WIFSIGNALED(status) && WTERMSIG(status) != SIGABRT)) { + if (WIFSIGNALED(status)) { + fail("Child died with signal %d\n", WTERMSIG(status)); + } else { + fail("Child died with status %d\n", + WEXITSTATUS(status)); + } + } +} + +static +void start(const char *name, int algo, unsigned aead) +{ + pid_t child; + + success("trying %s\n", name); + + signal(SIGPIPE, SIG_IGN); + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status; + /* parent */ + wait(&status); + check_status(status); + } else { + if (!aead) + test_cipher(algo); + else + test_aead_cipher1(algo); + exit(0); + } + + if (!aead) + return; + + /* check test_aead_cipher2 */ + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status; + /* parent */ + wait(&status); + check_status(status); + } else { + test_aead_cipher2(algo); + exit(0); + } +} + +void doit(void) +{ + start("aes128-gcm", GNUTLS_CIPHER_AES_128_GCM, 1); + start("aes256-gcm", GNUTLS_CIPHER_AES_256_GCM, 1); + start("aes128-cbc", GNUTLS_CIPHER_AES_128_CBC, 0); + start("aes256-cbc", GNUTLS_CIPHER_AES_256_CBC, 0); + start("3des-cbc", GNUTLS_CIPHER_3DES_CBC, 0); + if (!gnutls_fips140_mode_enabled()) { + start("camellia128-gcm", GNUTLS_CIPHER_CAMELLIA_128_GCM, 1); + start("camellia256-gcm", GNUTLS_CIPHER_CAMELLIA_256_GCM, 1); + start("chacha20-poly1305", GNUTLS_CIPHER_CHACHA20_POLY1305, 1); + } +} + +#endif diff --git a/tests/slow/cipher-openssl-compat.c b/tests/slow/cipher-openssl-compat.c index cf8b86b25e..64adf25a45 100644 --- a/tests/slow/cipher-openssl-compat.c +++ b/tests/slow/cipher-openssl-compat.c @@ -8,6 +8,7 @@ #include #include #include +#include /* This does check the AES and CHACHA20 implementations for compatibility * with openssl. @@ -17,10 +18,11 @@ #define B2SIZE (1024+7) static unsigned char buffer_auth[B2SIZE]; static unsigned char orig_plain_data[BSIZE]; -static unsigned char enc_data[BSIZE+32]; /* allow for tag */ +static unsigned char enc_data[BSIZE + 32]; /* allow for tag */ static unsigned char dec_data[BSIZE]; -static int cipher_test(const char *ocipher, gnutls_cipher_algorithm_t gcipher, unsigned tag_size) +static int cipher_test(const char *ocipher, gnutls_cipher_algorithm_t gcipher, + unsigned tag_size) { int ret; gnutls_aead_cipher_hd_t hd; @@ -32,66 +34,148 @@ static int cipher_test(const char *ocipher, gnutls_cipher_algorithm_t gcipher, u EVP_CIPHER_CTX *ctx; const EVP_CIPHER *evp_cipher; unsigned char tag[64]; + unsigned i; - assert(gnutls_rnd(GNUTLS_RND_NONCE, orig_plain_data, sizeof(orig_plain_data)) >= 0); - assert(gnutls_rnd(GNUTLS_RND_NONCE, buffer_auth, sizeof(buffer_auth)) >= 0); - assert(gnutls_rnd(GNUTLS_RND_NONCE, key, sizeof(key)) >= 0); - assert(gnutls_rnd(GNUTLS_RND_NONCE, nonce, sizeof(nonce)) >= 0); - - dkey.data = (void*)key; - dkey.size = gnutls_cipher_get_key_size(gcipher); - assert(gnutls_aead_cipher_init(&hd, gcipher, &dkey) >= 0); - - dnonce.data = (void*)nonce; - dnonce.size = gnutls_cipher_get_iv_size(gcipher); - - enc_data_size = sizeof(enc_data); - assert(gnutls_aead_cipher_encrypt(hd, dnonce.data, dnonce.size, - buffer_auth, sizeof(buffer_auth), tag_size, orig_plain_data, sizeof(orig_plain_data), - enc_data, &enc_data_size) >= 0); - - if (debug) - success("encrypted %d bytes, to %d\n", (int)sizeof(orig_plain_data), (int)enc_data_size); - - dec_data_size = sizeof(dec_data); - ret = gnutls_aead_cipher_decrypt(hd, dnonce.data, dnonce.size, - buffer_auth, sizeof(buffer_auth), tag_size, enc_data, enc_data_size, - dec_data, &dec_data_size); - if (ret < 0) { - fail("error in gnutls_aead_cipher_decrypt for %s: %s\n", ocipher, gnutls_strerror(ret)); - } - - if (dec_data_size != sizeof(orig_plain_data) || memcmp(dec_data, orig_plain_data, sizeof(orig_plain_data)) != 0) { - fail("gnutls encrypt-decrypt failed (got: %d, expected: %d)\n", (int)dec_data_size, (int)sizeof(orig_plain_data)); - } - - gnutls_aead_cipher_deinit(hd); + success("cipher: %s\n", ocipher); /* decrypt with openssl */ evp_cipher = EVP_get_cipherbyname(ocipher); - if (!evp_cipher) + if (!evp_cipher) { + /* XXX: fix version check later when LibreSSL fixes support for aes-ccm and chacha20-poly1305 */ +#ifdef LIBRESSL_VERSION_NUMBER + fprintf(stderr, "EVP_get_cipherbyname failed for %s\n", ocipher); + return -1; +#else + /* OpenSSL should always work! */ fail("EVP_get_cipherbyname failed for %s\n", ocipher); +#endif + } - ctx = EVP_CIPHER_CTX_new(); - assert(EVP_CipherInit_ex(ctx, evp_cipher, NULL, key, nonce, 0) > 0); - - EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, tag_size, enc_data+enc_data_size-tag_size); - - dec_data_size2 = sizeof(dec_data); - assert(EVP_CipherUpdate(ctx, NULL, &dec_data_size2, buffer_auth, sizeof(buffer_auth)) > 0); - dec_data_size2 = sizeof(dec_data); - assert(EVP_CipherUpdate(ctx, dec_data, &dec_data_size2, enc_data, enc_data_size-tag_size) > 0); - - dec_data_size = dec_data_size2; - dec_data_size2 = tag_size; - assert(EVP_CipherFinal_ex(ctx, tag, &dec_data_size2) > 0); + for (i = 0; i < 32; i++) { /* try with multiple keys and nonces */ + assert(gnutls_rnd + (GNUTLS_RND_NONCE, orig_plain_data, + sizeof(orig_plain_data)) >= 0); + assert(gnutls_rnd + (GNUTLS_RND_NONCE, buffer_auth, + sizeof(buffer_auth)) >= 0); + assert(gnutls_rnd(GNUTLS_RND_NONCE, key, sizeof(key)) >= 0); + assert(gnutls_rnd(GNUTLS_RND_NONCE, nonce, sizeof(nonce)) >= 0); + + dkey.data = (void *)key; + dkey.size = gnutls_cipher_get_key_size(gcipher); + assert(gnutls_aead_cipher_init(&hd, gcipher, &dkey) >= 0); + + dnonce.data = (void *)nonce; + dnonce.size = gnutls_cipher_get_iv_size(gcipher); + + enc_data_size = sizeof(enc_data); + assert(gnutls_aead_cipher_encrypt(hd, dnonce.data, dnonce.size, + buffer_auth, + sizeof(buffer_auth), tag_size, + orig_plain_data, + sizeof(orig_plain_data), + enc_data, + &enc_data_size) >= 0); + + if (debug) + success("encrypted %d bytes, to %d\n", + (int)sizeof(orig_plain_data), + (int)enc_data_size); + + dec_data_size = sizeof(dec_data); + ret = gnutls_aead_cipher_decrypt(hd, dnonce.data, dnonce.size, + buffer_auth, + sizeof(buffer_auth), tag_size, + enc_data, enc_data_size, + dec_data, &dec_data_size); + if (ret < 0) { + fail("error in gnutls_aead_cipher_decrypt for %s: %s\n", + ocipher, gnutls_strerror(ret)); + } + + if (dec_data_size != sizeof(orig_plain_data) + || memcmp(dec_data, orig_plain_data, + sizeof(orig_plain_data)) != 0) { + fail("gnutls encrypt-decrypt failed (got: %d, expected: %d)\n", (int)dec_data_size, (int)sizeof(orig_plain_data)); + } + + gnutls_aead_cipher_deinit(hd); + + ctx = EVP_CIPHER_CTX_new(); + +#if OPENSSL_VERSION_NUMBER >= 0x10100000L + if (gcipher == GNUTLS_CIPHER_AES_128_CCM + || gcipher == GNUTLS_CIPHER_AES_256_CCM) { + assert(EVP_CipherInit_ex(ctx, evp_cipher, 0, 0, 0, 0) > + 0); + + assert(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN, dnonce.size, 0)==1); + assert(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, tag_size, + enc_data + enc_data_size - tag_size) == 1); + + assert(EVP_CipherInit_ex(ctx, 0, 0, key, nonce, 0) > + 0); + + dec_data_size2 = sizeof(dec_data); + /* Add plain size */ + assert(EVP_CipherUpdate + (ctx, NULL, &dec_data_size2, NULL, + enc_data_size - tag_size) > 0); + + /* Add AAD */ + assert(EVP_CipherUpdate + (ctx, NULL, &dec_data_size2, buffer_auth, + sizeof(buffer_auth)) > 0); + + /* Decrypt */ + assert(EVP_CipherUpdate + (ctx, dec_data, &dec_data_size2, enc_data, + enc_data_size - tag_size) > 0); + + dec_data_size = dec_data_size2; + dec_data_size2 = tag_size; + + if (dec_data_size != sizeof(orig_plain_data) + || memcmp(dec_data, orig_plain_data, + sizeof(orig_plain_data)) != 0) { + fail("openssl decrypt failed for %s\n", ocipher); + } + } else +#endif + { + assert(EVP_CipherInit_ex(ctx, evp_cipher, NULL, key, nonce, 0) > + 0); + + EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, tag_size, + enc_data + enc_data_size - tag_size); + + dec_data_size2 = sizeof(dec_data); + + /* Add AAD */ + assert(EVP_CipherUpdate + (ctx, NULL, &dec_data_size2, buffer_auth, + sizeof(buffer_auth)) > 0); + + /* Decrypt */ + assert(EVP_CipherUpdate + (ctx, dec_data, &dec_data_size2, enc_data, + enc_data_size - tag_size) > 0); + + dec_data_size = dec_data_size2; + dec_data_size2 = tag_size; + assert(EVP_CipherFinal_ex(ctx, tag, &dec_data_size2) > 0); + + if (dec_data_size != sizeof(orig_plain_data) + || memcmp(dec_data, orig_plain_data, + sizeof(orig_plain_data)) != 0) { + fail("openssl decrypt failed for %s\n", ocipher); + } + + } + EVP_CIPHER_CTX_free(ctx); - if (dec_data_size != sizeof(orig_plain_data) || memcmp(dec_data, orig_plain_data, sizeof(orig_plain_data)) != 0) { - fail("openssl decrypt failed for %s\n", ocipher); } - EVP_CIPHER_CTX_free(ctx); - return 0; } @@ -112,8 +196,14 @@ void doit(void) /* ciphers */ cipher_test("aes-128-gcm", GNUTLS_CIPHER_AES_128_GCM, 16); cipher_test("aes-256-gcm", GNUTLS_CIPHER_AES_256_GCM, 16); +#if OPENSSL_VERSION_NUMBER >= 0x10100000L + if (!gnutls_fips140_mode_enabled()) { + cipher_test("chacha20-poly1305", GNUTLS_CIPHER_CHACHA20_POLY1305, 16); + } + cipher_test("aes-128-ccm", GNUTLS_CIPHER_AES_128_CCM, 16); + cipher_test("aes-256-ccm", GNUTLS_CIPHER_AES_256_CCM, 16); +#endif gnutls_global_deinit(); return; } - diff --git a/tests/slow/cipher-override.c b/tests/slow/cipher-override.c index 539a49fcdc..d1921917e4 100644 --- a/tests/slow/cipher-override.c +++ b/tests/slow/cipher-override.c @@ -18,6 +18,7 @@ int main(int argc, char **argv) # include # include # include +# include /* this tests whether the API to override ciphers works sanely. */ @@ -29,7 +30,7 @@ static void tls_log_func(int level, const char *str) } struct myaes_ctx { - struct aes_ctx aes; + struct aes128_ctx aes; unsigned char iv[16]; int enc; }; @@ -38,9 +39,7 @@ static int myaes_init(gnutls_cipher_algorithm_t algorithm, void **_ctx, int enc) { /* we use key size to distinguish */ - if (algorithm != GNUTLS_CIPHER_AES_128_CBC - && algorithm != GNUTLS_CIPHER_AES_192_CBC - && algorithm != GNUTLS_CIPHER_AES_256_CBC) + if (algorithm != GNUTLS_CIPHER_AES_128_CBC) return GNUTLS_E_INVALID_REQUEST; *_ctx = calloc(1, sizeof(struct myaes_ctx)); @@ -58,10 +57,12 @@ myaes_setkey(void *_ctx, const void *userkey, size_t keysize) { struct myaes_ctx *ctx = _ctx; + assert(keysize == 16); + if (ctx->enc) - aes_set_encrypt_key(&ctx->aes, keysize, userkey); + aes128_set_encrypt_key(&ctx->aes, userkey); else - aes_set_decrypt_key(&ctx->aes, keysize, userkey); + aes128_set_decrypt_key(&ctx->aes, userkey); return 0; } @@ -81,7 +82,7 @@ myaes_encrypt(void *_ctx, const void *src, size_t src_size, struct myaes_ctx *ctx = _ctx; used++; - cbc_encrypt(&ctx->aes, (nettle_cipher_func*)aes_encrypt, 16, ctx->iv, src_size, dst, src); + cbc_encrypt(&ctx->aes, (nettle_cipher_func*)aes128_encrypt, 16, ctx->iv, src_size, dst, src); return 0; } @@ -92,7 +93,7 @@ myaes_decrypt(void *_ctx, const void *src, size_t src_size, struct myaes_ctx *ctx = _ctx; used++; - cbc_decrypt(&ctx->aes, (nettle_cipher_func*)aes_decrypt, 16, ctx->iv, src_size, dst, src); + cbc_decrypt(&ctx->aes, (nettle_cipher_func*)aes128_decrypt, 16, ctx->iv, src_size, dst, src); return 0; } @@ -225,7 +226,7 @@ int main(int argc, char **argv) global_init(); - if (gnutls_cipher_self_test(1, 0) < 0) + if (gnutls_cipher_self_test(GNUTLS_SELF_TEST_FLAG_ALL|GNUTLS_SELF_TEST_FLAG_NO_COMPAT, 0) < 0) return 1; if (used == 0) { diff --git a/tests/slow/hash-large.c b/tests/slow/hash-large.c index 5c3fd2ce51..33dc1df0da 100644 --- a/tests/slow/hash-large.c +++ b/tests/slow/hash-large.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2016 Nikos Mavrogiannopoulos + * Copyright (C) 2017 Red Hat, Inc. * * This file is part of GnuTLS. * @@ -13,9 +14,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ #ifdef HAVE_CONFIG_H @@ -29,14 +29,15 @@ #include #include "utils.h" -#if defined(__FreeBSD__) -/* its libc cannot handle that large allocations */ +#if defined(__FreeBSD__) || !defined(HAVE_MMAP) void doit(void) { exit(77); } -#else /* not freebsd */ +#else /* working test */ + +/* Test hashing on very large buffers >= 2^31 */ #if !defined(_WIN32) # include @@ -50,10 +51,6 @@ static void exit_77(int signo) #define MIN(x,y) ((x)<(y))?(x):(y) -/* Test hashing on large buffers */ - -#ifdef HAVE_MMAP - #include static size_t _mmap_size; @@ -72,13 +69,6 @@ static void put_mem(void *mem) munmap(mem, _mmap_size); } -#else - -# define get_mem(x) calloc(1, x) -# define put_mem(x) free(x) - -#endif - void doit(void) { unsigned char digest[32]; diff --git a/tests/slow/override-ciphers b/tests/slow/override-ciphers index a95253ba94..3c00e5be3e 100755 --- a/tests/slow/override-ciphers +++ b/tests/slow/override-ciphers @@ -26,24 +26,29 @@ if ! test -z "${VALGRIND}"; then fi PROG=./cipher-override${EXEEXT} +# we are explicitly unsetting this variable, because we want +# the "production" checks to be triggered, not the ones in the +# test suite. + +unset GNUTLS_TEST_SUITE_RUN GNUTLS_NO_EXPLICIT_INIT=1 ${VALGRIND} ${PROG} ret=$? if test $ret != 0; then - echo "overriden cipher tests failed" + echo "overridden cipher tests failed" exit $ret fi ${VALGRIND} ${PROG} ret=$? if test $ret != 0; then - echo "overriden cipher tests 2 failed" + echo "overridden cipher tests 2 failed" exit $ret fi ${VALGRIND} ${PROG} ret=$? if test $ret != 0; then - echo "overriden cipher tests 3 failed" + echo "overridden cipher tests 3 failed" exit $ret fi @@ -54,14 +59,14 @@ else GNUTLS_NO_EXPLICIT_INIT=1 ${VALGRIND} ./mac-override ret=$? if test $ret != 0; then - echo "overriden mac tests failed" + echo "overridden mac tests failed" exit $ret fi ${VALGRIND} ./mac-override ret=$? if test $ret != 0; then - echo "overriden mac tests 2 failed" + echo "overridden mac tests 2 failed" exit $ret fi fi diff --git a/tests/slow/test-ciphers-api.sh b/tests/slow/test-ciphers-api.sh new file mode 100755 index 0000000000..d591496be1 --- /dev/null +++ b/tests/slow/test-ciphers-api.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +# Copyright (C) 2014 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +srcdir="${srcdir:-.}" +PROG=./cipher-api-test${EXEEXT} + +. "${srcdir}/test-ciphers-common.sh" + diff --git a/tests/slow/test-ciphers-common.sh b/tests/slow/test-ciphers-common.sh index cb415a35bc..1a76b48ce0 100644 --- a/tests/slow/test-ciphers-common.sh +++ b/tests/slow/test-ciphers-common.sh @@ -23,6 +23,9 @@ if ! test -z "${VALGRIND}"; then VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" fi +srcdir="${srcdir:-.}" +. "${srcdir}/../scripts/common.sh" + ${PROG} ret=$? if test $ret != 0; then @@ -30,6 +33,7 @@ if test $ret != 0; then exit $ret fi +# All optimizations disabled GNUTLS_CPUID_OVERRIDE=0x1 ${PROG} ret=$? if test $ret != 0; then @@ -37,6 +41,8 @@ if test $ret != 0; then exit $ret fi +exit_if_non_x86 + GNUTLS_CPUID_OVERRIDE=0x2 ${PROG} ret=$? if test $ret != 0; then @@ -67,6 +73,17 @@ if test $ret != 0; then exit $ret fi +#SHANI +$(which lscpu)|grep Flags|grep sha_ni >/dev/null +if test $? = 0;then + GNUTLS_CPUID_OVERRIDE=0x20 ${PROG} + ret=$? + if test $ret != 0; then + echo "SHANI cipher tests failed" + exit $ret + fi +fi + GNUTLS_CPUID_OVERRIDE=0x100000 ${PROG} ret=$? if test $ret != 0; then diff --git a/tests/slow/test-hash-large b/tests/slow/test-hash-large deleted file mode 100755 index e09579a00c..0000000000 --- a/tests/slow/test-hash-large +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2016 Nikos Mavrogiannopoulos -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# GnuTLS is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at -# your option) any later version. -# -# GnuTLS is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -PROG=./hash-large${EXEEXT} -unset RETCODE -if ! test -z "${VALGRIND}"; then - VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" -fi - -${PROG} -ret=$? -if test $ret != 0; then - echo "default cipher tests failed" - exit $ret -fi - -GNUTLS_CPUID_OVERRIDE=0x1 ${PROG} -ret=$? -if test $ret != 0; then - echo "included cipher tests failed" - exit $ret -fi - -GNUTLS_CPUID_OVERRIDE=0x4 ${PROG} -ret=$? -if test $ret != 0; then - echo "SSSE3 cipher tests failed" - exit $ret -fi - -GNUTLS_CPUID_OVERRIDE=0x200000 ${PROG} -ret=$? -if test $ret != 0; then - echo "padlock PHE cipher tests failed" - exit $ret -fi - -GNUTLS_CPUID_OVERRIDE=0x400000 ${PROG} -ret=$? -if test $ret != 0; then - echo "padlock PHE SHA512 cipher tests failed" - exit $ret -fi - -exit 0 diff --git a/tests/slow/test-hash-large.sh b/tests/slow/test-hash-large.sh new file mode 100755 index 0000000000..754232ec2c --- /dev/null +++ b/tests/slow/test-hash-large.sh @@ -0,0 +1,91 @@ +#!/bin/sh + +# Copyright (C) 2016 Nikos Mavrogiannopoulos +# Copyright (C) 2017 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see +# + +PROG=./hash-large${EXEEXT} +unset RETCODE +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +srcdir="${srcdir:-.}" +. "${srcdir}/../scripts/common.sh" + +run_test() { + GNUTLS_CPUID_OVERRIDE=$1 ${PROG} + ret=$? + if test $ret != 0; then + echo "tests failed for flags $1" + exit $ret + fi +} + +#0x20: SHA_NI +#0x4: SSSE3 +#0x1: no optimizations +#"": default optimizations + +SSSE3FLAG="" +SHANIFLAG="" +which lscpu >/dev/null 2>&1 +if test $? = 0;then + $(which lscpu)|grep Architecture|grep x86 >/dev/null + if test $? = 0;then + SSSE3FLAG="0x4" + fi + + $(which lscpu)|grep Flags|grep sha_ni >/dev/null + if test $? = 0;then + SHANIFLAG="0x20" + fi +fi + +WAITPID="" +for flags in "" "0x1" ${SSSE3FLAG} ${SHANIFLAG};do + run_test ${flags} & + WAITPID="${WAITPID} $!" +done + +for i in "$WAITPID";do + wait $i + ret=$? + test ${ret} != 0 && exit ${ret} +done + +exit_if_non_padlock + +#0x200000: Padlock PHE +#0x400000: Padlock PHE SHA512 + +WAITPID="" +for flags in "0x200000" "0x400000";do + run_test ${flags} & + WAITPID="${WAITPID} $!" +done + +for i in "$WAITPID";do + wait $i + ret=$? + test ${ret} != 0 && exit ${ret} +done + +exit 0 diff --git a/tests/sni-hostname.sh b/tests/sni-hostname.sh index ec01e0fda1..8bcc3b9a8a 100755 --- a/tests/sni-hostname.sh +++ b/tests/sni-hostname.sh @@ -16,9 +16,8 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see srcdir="${srcdir:-.}" SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" @@ -46,19 +45,37 @@ SERV="${SERV} -q" . "${srcdir}/scripts/common.sh" +KEY1=${srcdir}/../doc/credentials/x509/example.com-key.pem +CERT1=${srcdir}/../doc/credentials/x509/example.com-cert.pem +CA1=${srcdir}/../doc/credentials/x509/ca.pem + echo "Checking SNI hostname in gnutls-cli" +OPTS="--sni-hostname example.com --verify-hostname example.com" +NOOPTS="--sni-hostname noexample.com --verify-hostname example.com" + eval "${GETPORT}" -launch_server $$ --echo --priority "NORMAL:+ANON-ECDH" --sni-hostname-fatal --sni-hostname example.com +launch_server $$ --echo --sni-hostname-fatal --sni-hostname example.com --x509keyfile ${KEY1} --x509certfile ${CERT1} PID=$! wait_server ${PID} -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --sni-hostname example.com --priority "NORMAL:+ANON-ECDH:+ANON-DH" /dev/null || \ - fail ${PID} "1. rehandshake should have succeeded!" +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 ${OPTS} --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2" --x509cafile ${CA1} /dev/null || \ + fail ${PID} "1. handshake should have succeeded!" + +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 ${NOOPTS} --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2" --x509cafile ${CA1} /dev/null && \ + fail ${PID} "2. handshake should have failed!" + +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 ${OPTS} --priority "NORMAL" --x509cafile ${CA1} /dev/null || \ + fail ${PID} "3. handshake should have succeeded!" + +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 ${NOOPTS} --priority "NORMAL" --x509cafile ${CA1} /dev/null && \ + fail ${PID} "4. handshake should have failed!" -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --sni-hostname noexample.com --priority "NORMAL:+ANON-ECDH:+ANON-DH" /dev/null && \ - fail ${PID} "2. rehandshake should have failed!" +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --sni-hostname example.com --priority "NORMAL" --x509cafile ${CA1} /dev/null && \ + fail ${PID} "5. handshake should have failed!" +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --sni-hostname example.com. --verify-hostname example.com. --priority "NORMAL" --x509cafile ${CA1} /dev/null || \ + fail ${PID} "6. handshake should have succeeded!" kill ${PID} wait diff --git a/tests/sni-resume.sh b/tests/sni-resume.sh new file mode 100755 index 0000000000..913f4a8b79 --- /dev/null +++ b/tests/sni-resume.sh @@ -0,0 +1,80 @@ +#!/bin/sh + +# Copyright (C) 2017 Thomas Klute +# +# Author: Thomas Klute +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +unset RETCODE + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + +SERV="${SERV} -q" + +. "${srcdir}/scripts/common.sh" + +PRIORITY="NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2:+ANON-ECDH" + +echo "Checking if the SNI extension is parsed in gnutls-serv during" \ + "cache-based session resumption" + +TMPFILE="servoutput.$$.tmp" + +eval "${GETPORT}" +launch_server $$ --echo --priority ${PRIORITY} --sni-hostname-fatal \ + --sni-hostname server.example.com --noticket 2>${TMPFILE} +PID=$! +wait_server ${PID} + +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --sni-hostname server.example.com \ + --priority ${PRIORITY} /dev/null \ + --resume \ + || fail ${PID} "connection and resumption should have succeeded!" + +kill ${PID} +wait + +ret=0 +cat "${TMPFILE}" +# The --sni-hostname-fatal option rejects only clients which send a +# server name that does not match the expected one, not clients that +# do not send an SNI extension at all. Check if the server logged a +# missing extension. +if grep "client did not include SNI extension" "${TMPFILE}" >/dev/null; then + ret=1 + echo "SNI data missing unexpectedly!" +fi +rm "${TMPFILE}" + +exit ${ret} diff --git a/tests/spki-abstract.c b/tests/spki-abstract.c new file mode 100644 index 0000000000..d912172d76 --- /dev/null +++ b/tests/spki-abstract.c @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +static void pubkey_check(void) +{ + int ret; + gnutls_pubkey_t pubkey; + gnutls_x509_spki_t spki; + unsigned salt_size; + gnutls_digest_algorithm_t dig; + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_x509_spki_init(&spki); + assert(ret>=0); + + ret = gnutls_pubkey_init(&pubkey); + if (ret < 0) { + fprintf(stderr, + "gnutls_pubkey_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_pubkey_import_x509_raw(pubkey, &server_ca3_rsa_pss2_cert, + GNUTLS_X509_FMT_PEM, 0); + if (ret < 0) { + fprintf(stderr, + "gnutls_pubkey_import: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_pubkey_get_spki(pubkey, spki, 0); + assert(ret >= 0); + + assert(gnutls_x509_spki_get_rsa_pss_params(spki, &dig, &salt_size) >= 0); + assert(salt_size == 32); + assert(dig == GNUTLS_DIG_SHA256); + + gnutls_pubkey_deinit(pubkey); + gnutls_x509_spki_deinit(spki); + gnutls_global_deinit(); +} + +static void key_check(void) +{ + int ret; + gnutls_privkey_t key; + gnutls_x509_spki_t spki; + unsigned salt_size; + gnutls_digest_algorithm_t dig; + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_x509_spki_init(&spki); + assert(ret>=0); + + ret = gnutls_privkey_init(&key); + if (ret < 0) { + fprintf(stderr, + "gnutls_privkey_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_privkey_import_x509_raw(key, &server_ca3_rsa_pss2_key, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) { + fprintf(stderr, + "gnutls_privkey_import: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_privkey_get_spki(key, spki, 0); + assert(ret >= 0); + + assert(gnutls_x509_spki_get_rsa_pss_params(spki, &dig, &salt_size) >= 0); + assert(salt_size == 32); + assert(dig == GNUTLS_DIG_SHA256); + + /* set and get */ + gnutls_x509_spki_set_rsa_pss_params(spki, GNUTLS_DIG_SHA1, 64); + assert(gnutls_x509_spki_get_rsa_pss_params(spki, &dig, &salt_size) >= 0); + assert(salt_size == 64); + assert(dig == GNUTLS_DIG_SHA1); + + /* read one at a time */ + assert(gnutls_x509_spki_get_rsa_pss_params(spki, NULL, &salt_size) >= 0); + assert(salt_size == 64); + assert(gnutls_x509_spki_get_rsa_pss_params(spki, &dig, NULL) >= 0); + assert(dig == GNUTLS_DIG_SHA1); + + gnutls_privkey_deinit(key); + gnutls_x509_spki_deinit(spki); +} + +void doit(void) +{ + pubkey_check(); + key_check(); +} diff --git a/tests/spki.c b/tests/spki.c new file mode 100644 index 0000000000..e5f88e1351 --- /dev/null +++ b/tests/spki.c @@ -0,0 +1,227 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +static void crq_check(void) +{ + int ret; + gnutls_x509_crq_t crq; + gnutls_x509_spki_t spki; + gnutls_datum_t tmp; + gnutls_x509_privkey_t privkey; + unsigned salt_size; + gnutls_digest_algorithm_t dig; + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + assert(gnutls_x509_privkey_init(&privkey)>=0); + + ret = + gnutls_x509_privkey_generate(privkey, GNUTLS_PK_RSA, 2048, 0); + assert(ret>=0); + + assert(gnutls_x509_spki_init(&spki)>=0); + + gnutls_x509_spki_set_rsa_pss_params(spki, GNUTLS_DIG_SHA256, 32); + + ret = gnutls_x509_crq_init(&crq); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_crq_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + assert(gnutls_x509_crq_set_version(crq, 1)>=0); + assert(gnutls_x509_crq_set_key(crq, privkey)>=0); + assert(gnutls_x509_crq_set_spki(crq, spki, 0)>=0); + + assert(gnutls_x509_crq_set_dn_by_oid(crq, GNUTLS_OID_X520_COMMON_NAME, + 0, "CN-Test", 7)>=0); + gnutls_x509_spki_deinit(spki); + + assert(gnutls_x509_crq_sign2(crq, privkey, GNUTLS_DIG_SHA256, 0)>=0); + + if (debug) { + gnutls_x509_crq_print(crq, GNUTLS_CRT_PRINT_ONELINE, &tmp); + + printf("\tCertificate: %.*s\n", tmp.size, tmp.data); + gnutls_free(tmp.data); + } + + /* read SPKI */ + assert(gnutls_x509_spki_init(&spki)>=0); + + ret = gnutls_x509_crq_get_spki(crq, spki, 0); + assert(ret >= 0); + + assert(gnutls_x509_spki_get_rsa_pss_params(spki, &dig, &salt_size) >= 0); + assert(salt_size == 32); + assert(dig == GNUTLS_DIG_SHA256); + + /* set invalid */ + gnutls_x509_spki_set_rsa_pss_params(spki, GNUTLS_DIG_SHA256, 1024); + assert(gnutls_x509_crq_set_spki(crq, spki, 0) == GNUTLS_E_PK_INVALID_PUBKEY_PARAMS); + + gnutls_x509_crq_deinit(crq); + gnutls_x509_spki_deinit(spki); + gnutls_x509_privkey_deinit(privkey); + gnutls_global_deinit(); +} + + +static void cert_check(void) +{ + int ret; + gnutls_x509_crt_t crt; + gnutls_x509_spki_t spki; + gnutls_datum_t tmp; + unsigned salt_size; + gnutls_digest_algorithm_t dig; + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_x509_spki_init(&spki); + assert(ret>=0); + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_crt_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_x509_crt_import(crt, &server_ca3_rsa_pss2_cert, + GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_crt_import: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (debug) { + gnutls_x509_crt_print(crt, GNUTLS_CRT_PRINT_ONELINE, &tmp); + + printf("\tCertificate: %.*s\n", tmp.size, tmp.data); + gnutls_free(tmp.data); + } + + ret = gnutls_x509_crt_get_spki(crt, spki, 0); + assert(ret >= 0); + + assert(gnutls_x509_spki_get_rsa_pss_params(spki, &dig, &salt_size) >= 0); + assert(salt_size == 32); + assert(dig == GNUTLS_DIG_SHA256); + + /* set invalid */ + gnutls_x509_spki_set_rsa_pss_params(spki, GNUTLS_DIG_SHA256, 1024); + assert(gnutls_x509_crt_set_spki(crt, spki, 0) == GNUTLS_E_PK_INVALID_PUBKEY_PARAMS); + + gnutls_x509_crt_deinit(crt); + gnutls_x509_spki_deinit(spki); + gnutls_global_deinit(); +} + +static void key_check(void) +{ + int ret; + gnutls_x509_privkey_t key; + gnutls_x509_spki_t spki; + unsigned salt_size; + gnutls_digest_algorithm_t dig; + + ret = global_init(); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_x509_spki_init(&spki); + assert(ret>=0); + + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_privkey_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_x509_privkey_import(key, &server_ca3_rsa_pss2_key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_privkey_import: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_x509_privkey_get_spki(key, spki, 0); + assert(ret >= 0); + + assert(gnutls_x509_spki_get_rsa_pss_params(spki, &dig, &salt_size) >= 0); + assert(salt_size == 32); + assert(dig == GNUTLS_DIG_SHA256); + + /* set and get */ + gnutls_x509_spki_set_rsa_pss_params(spki, GNUTLS_DIG_SHA1, 64); + assert(gnutls_x509_spki_get_rsa_pss_params(spki, &dig, &salt_size) >= 0); + assert(salt_size == 64); + assert(dig == GNUTLS_DIG_SHA1); + + /* set invalid */ + gnutls_x509_spki_set_rsa_pss_params(spki, GNUTLS_DIG_SHA1, 1024); + assert(gnutls_x509_privkey_set_spki(key, spki, 0) == GNUTLS_E_PK_INVALID_PUBKEY_PARAMS); + + gnutls_x509_privkey_deinit(key); + gnutls_x509_spki_deinit(spki); +} + +void doit(void) +{ + cert_check(); + key_check(); + crq_check(); +} diff --git a/tests/srp.c b/tests/srp.c index e0c1b8a8e6..c927e877be 100644 --- a/tests/srp.c +++ b/tests/srp.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat * * Author: Nikos Mavrogiannopoulos * @@ -15,9 +16,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ #ifdef HAVE_CONFIG_H @@ -43,6 +43,7 @@ int main() #include #include #include +#include #include #include "utils.h" @@ -104,7 +105,7 @@ const gnutls_datum_t server_key = { server_key_pem, }; -static void client(int fd, const char *prio) +static void client(int fd, const char *prio, const char *user, const char *pass, int exp_err) { int ret; gnutls_session_t session; @@ -122,14 +123,15 @@ static void client(int fd, const char *prio) gnutls_srp_allocate_client_credentials(&srp_cred); gnutls_certificate_allocate_credentials(&x509_cred); - gnutls_srp_set_client_credentials(srp_cred, "test", "test"); + gnutls_srp_set_client_credentials(srp_cred, user, pass); /* Initialize TLS session */ gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, prio, NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + gnutls_handshake_set_timeout(session, 100 * 1000); /* put the anonymous credentials to the current session */ @@ -145,6 +147,12 @@ static void client(int fd, const char *prio) } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0 && ret == exp_err) { + if (debug) + success("client: handshake failed as expected\n"); + goto end; + } + if (ret < 0) { fail("client: Handshake failed\n"); gnutls_perror(ret); @@ -160,7 +168,7 @@ static void client(int fd, const char *prio) (gnutls_protocol_get_version(session))); gnutls_bye(session, GNUTLS_SHUT_WR); - + end: close(fd); gnutls_deinit(session); @@ -173,28 +181,8 @@ static void client(int fd, const char *prio) /* These are global */ -gnutls_srp_server_credentials_t s_srp_cred; -gnutls_certificate_credentials_t s_x509_cred; pid_t child; -static gnutls_session_t initialize_tls_session(const char *prio) -{ - gnutls_session_t session; - - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, prio, NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_SRP, s_srp_cred); - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, - s_x509_cred); - - return session; -} - static void terminate(void) { int status; @@ -206,8 +194,10 @@ static void terminate(void) static void server(int fd, const char *prio) { - int ret; + int ret, kx; gnutls_session_t session; + gnutls_srp_server_credentials_t s_srp_cred; + gnutls_certificate_credentials_t s_x509_cred; /* this must be called once in the program */ @@ -227,9 +217,19 @@ static void server(int fd, const char *prio) &server_cert, &server_key, GNUTLS_X509_FMT_PEM); - session = initialize_tls_session(prio); + assert(gnutls_init(&session, GNUTLS_SERVER)>=0); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_SRP, s_srp_cred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + s_x509_cred); gnutls_transport_set_int(session, fd); + gnutls_handshake_set_timeout(session, 100 * 1000); do { ret = gnutls_handshake(session); @@ -250,6 +250,11 @@ static void server(int fd, const char *prio) gnutls_protocol_get_name (gnutls_protocol_get_version(session))); + kx = gnutls_kx_get(session); + if (kx != GNUTLS_KX_SRP && kx != GNUTLS_KX_SRP_RSA && + kx != GNUTLS_KX_SRP_DSS) + fail("server: unexpected key exchange: %s\n", gnutls_kx_get_name(kx)); + /* do not wait for the peer to close the connection. */ gnutls_bye(session, GNUTLS_SHUT_WR); @@ -266,12 +271,13 @@ static void server(int fd, const char *prio) success("server: finished\n"); } -static void start(const char *prio) +static void start(const char *name, const char *prio, const char *user, const char *pass, int exp_err) { int fd[2]; int ret; - ret = socketpair(AF_LOCAL, SOCK_STREAM, 0, fd); + success("testing: %s\n", name); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { perror("socketpair"); exit(1); @@ -287,24 +293,39 @@ static void start(const char *prio) if (child) { int status; /* parent */ - server(fd[0], prio); - wait(&status); - check_wait_status(status); + client(fd[1], prio, user, pass, exp_err); + if (exp_err < 0) { + kill(child, SIGTERM); + wait(&status); + } else { + wait(&status); + check_wait_status(status); + } } else { - client(fd[1], prio); + server(fd[0], prio); exit(0); } } +/* test1-7 are valid users, test9 uses parameter 9 which is disallowed by the RFC5054 spec */ const char *tpasswd_file = "test:CsrY0PxYlYCAa8UuWUrcjpqBvG6ImlAdGwEUh3tN2DSDBbMWTvnUl7A8Hw7l0zFHwyLH5rh0llrmu/v.Df2FjDEGy0s0rYR5ARE2XlXPl66xhevHj5vitD0Qvq/J0x1v0zMWJSgq/Ah2MoOrw9aBEsQUgf9MddiHQKjE3Vetoq3:3h3cfS0WrBgPUsldDASSK0:1\n" "test2:1J14yVX4iBa97cySs2/SduwnSbHxiz7WieE761psJQDxkc5flpumEwXbAgK5PrSZ0aZ6q7zyrAN1apJR1QQPAdyScJ6Jw4zjDP7AnezUVGbUNMJXhsI0NPwSc0c/415XfrnM1139yjWCr1qkcYMoN4bALppMMLB8glJkxy7t.3cmH9MkRRAjXXdUgAvHw2ZFLmB/8TlZDhnDS78xCSgLQs.oubZEEIgOWl7BT2.aW76fW3yKWdVrrHQDYPtR4hKx:11rUG9wSMLHe2Cu2p7dmFY:2\n" - "test3:LVJZDDuElMHuRt5/fcx64AhJ4erhFvbIhv/XCtD0tJI3OC6yEBzthZ1FSqblri9qtsvboPApbFHwP9WEluGtCOuzOON4LS8sSeQDBO.PaqjTnsmXKPYMKa.SuLXFuRTtdiFRwX2ZRy3GIWoCvxJtPDWCEYGBWfnjjGEYmQWvo534JVtVDyMaFItYlMTOtBSgsg488oJ5hIAU6jVyIQZGPVv8OHsPCpEt2UlTixzI9nAgQ0WL5ShKaAq0dksF/AY7UMKm0oHbtZeqAx6YcBzLbBhNvcEqYzH95ONpr.cUh91iRhVzdVscsFweSCtWsQrVT4zmSRwdsljeFQPqFbdeK:iWkELSVg3JxmyEq.XbjAW:3\n"; + "test3:LVJZDDuElMHuRt5/fcx64AhJ4erhFvbIhv/XCtD0tJI3OC6yEBzthZ1FSqblri9qtsvboPApbFHwP9WEluGtCOuzOON4LS8sSeQDBO.PaqjTnsmXKPYMKa.SuLXFuRTtdiFRwX2ZRy3GIWoCvxJtPDWCEYGBWfnjjGEYmQWvo534JVtVDyMaFItYlMTOtBSgsg488oJ5hIAU6jVyIQZGPVv8OHsPCpEt2UlTixzI9nAgQ0WL5ShKaAq0dksF/AY7UMKm0oHbtZeqAx6YcBzLbBhNvcEqYzH95ONpr.cUh91iRhVzdVscsFweSCtWsQrVT4zmSRwdsljeFQPqFbdeK:iWkELSVg3JxmyEq.XbjAW:3\n" + "test4:YziHBXMYwzekToUa6xL1Iq/4AXwpJWO9.Z6.Y6HHGt4eUcZEvVEw4eKEzPmj.K7US59u.X29F9D7xU62yiomPk5t8/3MzDCywlrAvcCVDhXwC3YpZEFl8OgAlp9izNrDErYY33cReBwH8ILHgFBJ2zo3xZqlWjWMrR50fW2J.MMitnx5GoR9dotZWLj9Zti0kODt5bUUeMcJmK/CJorwEtXz6OvuqGIdjrAZDp.5379KFO2smEVb7Qx6JiIDhEqODMMgXJZMSYSbKMgxXC9D.xN/IOn1/TnD.rNHN6LTrGChmbtKpCpuSJb2Bq2dwLFVxE/2UH4/ubYs/s5w9OcN60ypogvmtIWBqW2GyyfbLzHXiNDpJwV.tOktYEvRUG/fF59GF9hISbOIZ.7BhOK.z.iX4T7dEnHhDW16V.QScdOofcrhihb3Fi3Ym8ZpAqBlmlgLGsaGX23idkdF8xHZxJF1cuPosQ1jHjlrhcZotvChJdV3DZdl3m3isKK.bwF8:3QcZGdH5RkBBbB9R/cyNL4:4\n" + "test5:Ei8lv19Vi3.zrgd2DT6hHNVdd1FS2rTOg5N.ZHfIe6tsquMOQdP5JNVDqHaZL/Hr.ecaH5Y0fYCrdRby4iYWOvXvRadXBGP7noJl5II9qF84J8KUWGpdWOkKyIqXmRsdvafX2wB90JfMar7SyV0whR7taEV3fAWzQXVS7sHBA6Iyuj6qW1AIg/ObwYBR94xJuI8uKX4vGB0ptl90IS1nkI68OK.1PIt47IDdmJRxDxtbq3smZevPH9HxGCbWyPa7wp9GXmt7jjY/KhRnehLCaCWR3qpfTzqqYaohLFQ5KpkhCv0V5hFASioi1d5iVUsmJCCwWvHWf8fLKLSQ16D.yUNp6jH9AnrzBzybT5jdK647RxKpvogU67rDo4GQCMEjqoHfxExHz/LTN1mtDbX.MkphO71zGpE.bBMopQZvOzUJfpOjJwWADenalLvD6MXu4/.Hwf.cNH/cv/ueTRkXD8Fmsj0cmNkdLCel2qi3COWJxNP/B5ICQ5MnHg.S7qDSloYRcTvbU/FKGyoar8nhUdrl6w5sBwn1DKg3yijBucqEnOAPyLOmpAku8kTsbgoGVdQbEXdb7sUliLv9OnAARddRjIvAbO1mnWxHxFekBCmD5EtMVfGUUGM/ubQzjvH7PjsCCgBjo3nTPoCNGxzREich8/ChRdUvkzEuBvZXIc2:1nhQGuJI7yz9b0xtvpI87B:5\n" + "test7:6aCMlT0VUuuEnX.pn/K7cfQN1.EefEE9UiwzkBT2a4gdT4OY04pcl7kuKLEwvbb9bSfJWjAF8i8vMT.gg1ZSQTBAcWiBzAwHnnnKv4IgtsT0RAoAjYNjVxe26IMeE/XEdcS9OnOzSdEh2uy6.c9wqgzk0pph.KsQaMV4ivjeoUTdY8ccIiGGrLZcLaScCDeLMH.Ow7HFqMCIa07erJ7W2Xe/i7.0lm1p.oiTFbjNLv.6KXXihivldmz.ca9Dg2mqtp2SMCHul4wMDS3UFXka5/H/BwDFgT72OZpyy.wv9yL2ThHHiQtmc4.jkVutZUFH4gMxdln/3UyZDaXyj.UELFbRsA5VTrOcyqpg3nMqRLnBESC//fQjQPDzsIUG4TYeufCxfX6OK3BQq/KSYCIq08lIRRa1qoLE9FAcsnRO6PQXNtjatPJzgwW9mHZy32Bcy0dAu0mlR.35VGt9B72uAo3H8C6fzgLZHAQmAYvcz2b/LV4bT.FUeZz.D5XDIhxHDzLZOFgpZuYXivgf6B.1MgDd227L6AzVl.tfLF6Tr03Sfa5.FNoZLO.WHyHCje1GWGphLjg/C22QjBvV7NBwW50BkJBDO6HARaR/eZCE5qzmwAqrLbhd3DXYBD/0JSWysm3MO8u2Yhq47Vs8ZbcD835lIObjGOfzQL8iFQerO0H.pPQbwVewUg7fyP/TzSXsSQf0.7Otx6fUObWGEAJyY4Zk3YjBj0lwfQGDYuXjKnHxLgpWzWPtRvUbUxrPJMSFyJwGo8lJC5jZdfk/g/zShzgbib0LrYxwYoD1GvEcrLg/ylqEwDQh4/q7brzkpKUu.i4815rvCbPsqe7qFb6t4keDcNboSsFpRAiDttj8b8mcs/aq1YmPv/RKDO1DEu.QIabsJvdw7hw7sKz4m3OGdQEiFtktvihG0HDhY9UyfVTYm4WysZTx4Lf6WdwIFdkGLZJmhk8KdGPsHfSIo4fyIZieLkWa40e0ez5VevkcPN4C2AjXhVKUM5/9Cx09T38I8ZGIxGC.gF8JnXFarLcFjytuaNA7AlzuiEKlYKNf5AGNBXPoeScMJ.AghZLA0ZbsfbDbHUCSljnIuBhAFs8fL6ML/IqX59sORDYEiGKZnybedKYPgdZSRyy1T/qCDcDy6K/9sA4/gDzJ9ZdhUeasmn4GyXgJoHZ5VvT.ctilLkA36cAD8mHI1f8rcKAcsc5XtdQ5Mqqq6VkeXFAD37lnIc3/oVzBUKpHkyO.k0ibhKHkkmldQVpn1d/qUfhQxKq2S5FaOvqDUohERPoKLfEpsO8cd6NOUnwpGAx8wonNlNNIPaW2rJnRJc67zpznrzyXtTbbURl6eJJ/1nLtQy3xw:2Wva3rbYQapchVRUFxMTxT:7\n" + "test9:1UVtxG4aVjfnc6dPKMq6Cqin3rfrSoqOsGuD0Y6m4CnKqk190gb60JggCPwYbTgISssluub1TjmKlJeEfO18rXxyZgdn3KGJ3mBFLJ5x2t.kOyNRRpMGTK//7FMGiVQeJ12Mlh5p0faixLlHggR3P5e6LjpEZxsTTmU5d8pmACijdkOkuI8uDWKa4Aw.djIoAfUBhmgYGXCzx8axafeRJlZ/QYlx7tAAqdbIVrW2ES3cYTPCT/Yo8Le3IvjPH7Emw5TpIiQa/mcbEO043ewsUCEU9pSwQEyPj0ieXC5fGnTEk2KQ4ZzStgyUBDT4LgB8XGWT/DIQu13pIhwHy6yCuQ:3QFKSzbKxgN9qsll55ZlDu:9"; +/* 1-7 are from SRP RFC5054 spec, and 9 is the FFDHE 2048-bit prime */ const char *tpasswd_conf_file = "1:Ewl2hcjiutMd3Fu2lgFnUXWSc67TVyy2vwYCKoS9MLsrdJVT9RgWTCuEqWJrfB6uE3LsE9GkOlaZabS7M29sj5TnzUqOLJMjiwEzArfiLr9WbMRANlF68N5AVLcPWvNx6Zjl3m5Scp0BzJBz9TkgfhzKJZ.WtP3Mv/67I/0wmRZ:2\n" "2:dUyyhxav9tgnyIg65wHxkzkb7VIPh4o0lkwfOKiPp4rVJrzLRYVBtb76gKlaO7ef5LYGEw3G.4E0jbMxcYBetDy2YdpiP/3GWJInoBbvYHIRO9uBuxgsFKTKWu7RnR7yTau/IrFTdQ4LY/q.AvoCzMxV0PKvD9Odso/LFIItn8PbTov3VMn/ZEH2SqhtpBUkWtmcIkEflhX/YY/fkBKfBbe27/zUaKUUZEUYZ2H2nlCL60.JIPeZJSzsu/xHDVcx:2\n" - "3:2iQzj1CagQc/5ctbuJYLWlhtAsPHc7xWVyCPAKFRLWKADpASkqe9djWPFWTNTdeJtL8nAhImCn3Sr/IAdQ1FrGw0WvQUstPx3FO9KNcXOwisOQ1VlL.gheAHYfbYyBaxXL.NcJx9TUwgWDT0hRzFzqSrdGGTN3FgSTA1v4QnHtEygNj3eZ.u0MThqWUaDiP87nqha7XnT66bkTCkQ8.7T8L4KZjIImrNrUftedTTBi.WCi.zlrBxDuOM0da0JbUkQlXqvp0yvJAPpC11nxmmZOAbQOywZGmu9nhZNuwTlxjfIro0FOdthaDTuZRL9VL7MRPUDo/DQEyW.d4H.UIlzp:2\n"; + "3:2iQzj1CagQc/5ctbuJYLWlhtAsPHc7xWVyCPAKFRLWKADpASkqe9djWPFWTNTdeJtL8nAhImCn3Sr/IAdQ1FrGw0WvQUstPx3FO9KNcXOwisOQ1VlL.gheAHYfbYyBaxXL.NcJx9TUwgWDT0hRzFzqSrdGGTN3FgSTA1v4QnHtEygNj3eZ.u0MThqWUaDiP87nqha7XnT66bkTCkQ8.7T8L4KZjIImrNrUftedTTBi.WCi.zlrBxDuOM0da0JbUkQlXqvp0yvJAPpC11nxmmZOAbQOywZGmu9nhZNuwTlxjfIro0FOdthaDTuZRL9VL7MRPUDo/DQEyW.d4H.UIlzp:2\n" + "4:///////////93zgY8MZ2DCJ6Oek0t1pHAG9E28fdp7G22xwcEnER8b5A27cED0JTxvKPiyqwGnimAmfjybyKDq/XDMrjKS95v8MrTc9UViRqJ4BffZVjQml/NBRq1hVjxZXh.rg9dwMkdoGHV4iVvaaePb7iv5izmW1ykA5ZlmMOsaWs75NJccaMFwZz9CzVWsLT8zoZhPOSOlDM88LIkvxLAGTmbfPjPmmrJagyc0JnT6m8oXWXV3AGNaOkDiuxuvvtB1WEXWER9uEYx0UYZxN5NV1lJ5B9tYlBzfLO5nWvbKbywfLgvHNI9XYO.WKG5NAEMeggn2sjCnSD151wCwXL8QlV7BfaxFk515ZRxmgAwd5NNGOCVREN3uMcuUJ7g/MkZDi9CzSUZ9JWIYLXdSxZqYOQqkvhyI/w1jcA26JOTW9pFiXgP58VAnWNUo0Ck.4NLtfXNMnt2OZ0kjb6uWZYJw1qvQinGzjR/E3z48vBWj4WgJhIol//////////:5\n" + "5:F//////////oG/QeY5emZJ4ncABWDmSqIa2JWYAPynq0Wk.fZiJco9HIWXvZZG4tU.L6RFDEaCRC2iARV9V53TFuJLjRL72HUI5jNPYNdx6z4n2wQOtxMiB/rosz0QtxUuuQ/jQYP.bhfya4NnB7.P9A6PHxEHRFS80VBYXOxy5cDf8DXnLqvff5Z.e/IJFNuDbNIFSewsM76BpLY25KhkUrIa7S9QMRMSCDKvAl9W4yNHi2CeO8Nmoa5v6BZREE.EUTomO3eO3coU3ekm7ee.rnLtmRqnIoTuho/QLM1SOEPL9VEgLQkKLqYOOcFe541LoZbgAgiGjhJCN3GHGUZEeLI6htnowPEpxXGHOs.yAYkfnLrq637spbm.5fk7anwlrhepR2JFN7eoKu4ebOPtEuz8c6jBkQ/4l.WRPYWXas7O2Spx8QcHI7oiO5tiW3BlX5rTwOLriTmc8mBhPHk88ua.WTEMhCKFRM/pW/H2EIuBH8AaX204QSZmIfuVcruXncX2zkbiccSCd66hquZmQb6WqjXKBsYM3wSegr4pesxl2smJUZlakZlmK7xxAfYXyMKTEQy1TcRAMJw2Gmw8ZEw66KLldxHzXAN3EujUlk1lTTY5mI1pG1f4drR1QgPEqwfYDZzt1Xl.tt92cm8zDz3N9D0OncV//////////:5\n" + "7:3//////////yaFsg8XQC8qnCPYYu3S7D4f0au8YcVCT08BlgOx4viYKKe8UOuq1DtlbHcppJf36p0h2ctoNnGtJ.4rRMrHmaNaXRLsObv.nlHCGkccD.rh2/zSjlG6j.tkE6lxMecVfQwV915yIn/cIIXcKUpaMpt207oueME/1PZQI3OSLTEQQHO/gFqapr.3PLqZtAEjbXnYyrOWXLAxdjKf1t2Mbcrd33LEIhoO1F5qR0ZA625yCf1UHYuspZlZddSi60w60vidWwBi1wAFjSLTy6zCKidUAylsbLWN63cLINpgbMhb5T8c69Zw1H0LSevQYgh4BQqp5mq4K7epg5KXgzySkcJi.uK4MDll2ehgSLTT1WnzivSFXQRXvCUhzQwCsmaprnwCbE1A9M6TpkFI9XhIxclnB/e6sOe8PDXs0dC.o6faKXyh61Tx80oxuHTNUc5TR7S9YC2wsKRY2E9Fe7Jbgp53srlyuFqGZak2qI2f8GW16d8y4gU7vjU8SPeGlRfR9fd39nXgzE8y6fHeDBOL2zebW.dAAjHCwDkxmji4texvBexy51..ogOeV5b7Jcl0NPcoba.WaCEY8pkXXb5Rv.qVOIbmpkBNhxWRtNOXS4WSq0QH9zMmMgcJjEgOZO/TmOR/jzoGfi2FJVGroJG2X98sm/gqqdnm9i7KtB9W9aRUoNKUTZswDxtu/vG6hPvJ3kNRE2z1C06ki6fJxP0ds34NboUmXbg96De.s.lFcnJjHCvikixKknlRVnH7vimbIpCWKL4hrwz2RxZq0JUCqhzPWye1nakIxF0owXNHSXq3z8BNpcvq/lRLNd0lHfWCWhMeG36G2noUMUV9Vxx7wFCZgNf.Dio8lWyTHRV/M5h5IzG7iYj1LAhCZsr.lqZXs1JCNj8FW3VWfvSLxlARuoW6eTMBjyNQTlLGgZsA7x/mwndCiQCJrLpQLidiBlAMCZX/wDTkF0He13wFPZz8OEuIlorR2tHqrkQK.HvjlX5PTAEIRnB.vUGuTtosgJBVZDY.nD1pkJ6wEyWojesTqm1q7wU/Yln7xILszfDhf2HcEgjZd5hazMWq8xHqA/79U2EF5ilZdMKju/sullo4YjaY8Yu4f0Dy1nFhLwWQ8/37D7FyP6pgC6jBoyY6BuE5tVgTIt.Ym8VeUMWp0.rRtJe6Appriw9ufcqg4/W/HFWjtp4Eu7IhQZP5b.YPe2LTmMJp7CK8HeKT.Qj86LtjVg6nrH2zVkTDS/hpQyCUpw9eDP16zEk7dv902KEBI1niruYQ02xLxZWhoHaDflm2RaULMEH7LdVfgfumKE9sLfJVo1zMw82vRd5WoO3TcEtJt///////////:J\n" + "9:3//////////wtuL5YYkqgQhznM82SzFF7OkSM3pYqsbQdXDa4KP3Fxp9ETpYIRFlbzB.DZOmnrsFQ1iWAkn65wqzyUrTNzPM4aC/KVNmPkq8LZPLKzxHhpjLSJNdzNoJMOJmnmuEQBT.AcYThpx.Xo7V5OeJQjvpKmhCfFI3fvUhmAiOAp9FjXqGYfIxB8u/kvQjgtODVqQ1rFGgFUEKtqhbRjvsDoknaB1wV8xWfjS9u2/E7Dz.Bim3G4pIWqBs6HSlwSwOM3/uvF4ZBkye63m/ux6qnlhNCxjVoyBi8W1SMEyODz5eEonlDA9i6ox/g8Qq8uOIXSb///////////:2\n"; void doit(void) { @@ -324,8 +345,21 @@ void doit(void) fwrite(tpasswd_file, 1, strlen(tpasswd_file), fd); fclose(fd); - start("NORMAL:-KX-ALL:+SRP"); - start("NORMAL:-KX-ALL:+SRP-RSA"); + start("tls1.2 srp-1024", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP", "test", "test", 0); + start("tls1.2 srp-1536", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP", "test2", "test2", 0); + start("tls1.2 srp-2048", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP", "test3", "test3", 0); + start("tls1.2 srp-3072", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP", "test4", "test4", 0); + start("tls1.2 srp-4096", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP", "test5", "test5", 0); + start("tls1.2 srp-8192", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP", "test7", "test7", 0); + start("tls1.2 srp-other", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP", "test9", "test9", GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER); + + start("tls1.2 srp-rsa", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+SRP-RSA", "test", "test", 0); + + /* check whether SRP works with TLS1.3 being prioritized */ + start("tls1.3 and srp-1024", "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1", "test", "test", 0); + + /* check whether SRP works with the default protocol set */ + start("default srp-1024", "NORMAL:-KX-ALL:+SRP", "test", "test", 0); remove("tpasswd"); remove("tpasswd.conf"); diff --git a/tests/ssl2-hello.c b/tests/ssl2-hello.c index 62cf5e1a1d..084f62c144 100644 --- a/tests/ssl2-hello.c +++ b/tests/ssl2-hello.c @@ -27,8 +27,9 @@ #include #include -/* In this test we check the parsing of SSL 2.0 client hellos. As - * We can only read but not generate we use a fixed hello message +/* In this test we check the parsing of SSL 2.0 client hellos under + * the default protocols. + * As we can only read but not generate we use a fixed hello message * followed by an alert. That way we detect whether the handshake * completed hello parsing and reached the alert message. */ @@ -180,10 +181,15 @@ void doit(void) if (child) { int status; + close(sockets[1]); server(sockets[0]); wait(&status); - } else + check_wait_status(status); + } else { + close(sockets[0]); client(sockets[1]); + exit(0); + } } #endif /* _WIN32 */ diff --git a/tests/ssl3.0-cert-key-exchange.c b/tests/ssl3.0-cert-key-exchange.c deleted file mode 100644 index ed66eece90..0000000000 --- a/tests/ssl3.0-cert-key-exchange.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2015-2016 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -/* This program tests the various certificate key exchange methods supported - * in gnutls */ - -#include -#include -#include -#include -#include -#include "utils.h" -#include "common-cert-key-exchange.h" - -void doit(void) -{ -#ifdef ENABLE_SSL3 - global_init(); - try("SSL 3.0 with anon-dh", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("SSL 3.0 with dhe-rsa no cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - - try("SSL 3.0 with rsa no cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("SSL 3.0 with dhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); - try("SSL 3.0 with rsa cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); - - try("SSL 3.0 with dhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - try("SSL 3.0 with rsa ask cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - gnutls_global_deinit(); -#else - exit(77); -#endif -} diff --git a/tests/ssl30-cert-key-exchange.c b/tests/ssl30-cert-key-exchange.c new file mode 100644 index 0000000000..662721a2bd --- /dev/null +++ b/tests/ssl30-cert-key-exchange.c @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2015-2016 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the various certificate key exchange methods supported + * in gnutls */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "common-cert-key-exchange.h" +#include "cert-common.h" + +void doit(void) +{ +#ifdef ENABLE_SSL3 + global_init(); + try_x509("SSL 3.0 with anon-dh", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509("SSL 3.0 with dhe-rsa no cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + + try_x509("SSL 3.0 with rsa no cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509_cli("SSL 3.0 with dhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); + try_x509_cli("SSL 3.0 with rsa cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); + + try_x509_cli("SSL 3.0 with dhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_x509_cli("SSL 3.0 with rsa ask cert", "NORMAL:-VERS-ALL:+VERS-SSL3.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + gnutls_global_deinit(); +#else + exit(77); +#endif +} diff --git a/tests/ssl30-cipher-neg.c b/tests/ssl30-cipher-neg.c new file mode 100644 index 0000000000..745be43e0c --- /dev/null +++ b/tests/ssl30-cipher-neg.c @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the ciphersuite negotiation for various key exchange + * methods and options. */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" + +#include "cipher-neg-common.c" + +test_case_st tests[] = { + { + .name = "server SSL 3.0: AES-128-CBC (server)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+VERS-SSL3.0:+AES-128-CBC" + }, + { + .name = "both SSL 3.0: AES-128-CBC (server)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+AES-128-CBC:+VERS-SSL3.0" + }, + { + .name = "client SSL 3.0: AES-128-CBC (client)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:+VERS-SSL3.0:+AES-128-CBC", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "both SSL 3.0: AES-128-CBC (client)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:+AES-128-CBC:+VERS-SSL3.0", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "server SSL 3.0: 3DES-CBC (server)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+VERS-SSL3.0:+3DES-CBC" + }, + { + .name = "both SSL 3.0: 3DES-CBC (server)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+3DES-CBC:+VERS-SSL3.0" + }, + { + .name = "client SSL 3.0: 3DES-CBC (client)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:+VERS-SSL3.0:+3DES-CBC", + .client_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "both SSL 3.0: 3DES-CBC (client)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:+3DES-CBC:+VERS-SSL3.0", + .client_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "server SSL 3.0: ARCFOUR-128 (server)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+VERS-SSL3.0:+ARCFOUR-128" + }, + { + .name = "both SSL 3.0: ARCFOUR-128 (server)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+ARCFOUR-128:+VERS-SSL3.0" + }, + { + .name = "client SSL 3.0: ARCFOUR-128 (client)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:+VERS-SSL3.0:+ARCFOUR-128", + .client_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "both SSL 3.0: ARCFOUR-128 (client)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:+ARCFOUR-128:+VERS-SSL3.0", + .client_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-SSL3.0" + } +}; + +void doit(void) +{ + (void) try; + +#ifdef ENABLE_SSL3 + unsigned i; + global_init(); + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the ciphersuite negotiation for various key exchange + * methods and options. */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" + +#include "server-kx-neg-common.c" + +test_case_st tests[] = { + { + .name = "SSL 3.0 ANON-DH without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 ANON-DH with cred but no DH params", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_anon_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 ANON-DH with cred and DH params", + .server_ret = 0, + .client_ret = 0, + .have_anon_cred = 1, + .have_anon_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 DHE-RSA without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 DHE-RSA with cred but no DH params or cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 DHE-RSA with cred and cert but no DH params", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 DHE-RSA with cred and DH params but no cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 DHE-RSA with cred and incompatible cert and DH params", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .have_ecc_sign_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 DHE-RSA with cred and cert and DH params", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 DHE-RSA with cred and multiple certs and DH params", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 DHE-PSK without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 DHE-PSK with cred but no DH params", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-SSL3.0" + }, + { + .name = "SSL 3.0 DHE-PSK with cred DH params", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .have_psk_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-SSL3.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-SSL3.0" + } +}; + +void doit(void) +{ + (void) try; + +#ifdef ENABLE_SSL3 + unsigned i; + global_init(); + + for (i=0;i/dev/null +if test $? != 1;then + fail ${PID} "connect should have failed with error code 1" +fi + +kill ${PID} +wait + +exit 0 diff --git a/tests/starttls-xmpp.txt b/tests/starttls-xmpp.txt new file mode 100644 index 0000000000..94e86d48e1 --- /dev/null +++ b/tests/starttls-xmpp.txt @@ -0,0 +1,3 @@ +TIMEOUT 10 +'' +'' '' diff --git a/tests/starttls.sh b/tests/starttls.sh index 929ab1d5cc..0feed953ac 100755 --- a/tests/starttls.sh +++ b/tests/starttls.sh @@ -37,7 +37,7 @@ launch_server $$ --echo --priority "NORMAL:+ANON-ECDH" PID=$! wait_server ${PID} -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:+ANON-ECDH --insecure --starttls /dev/null || \ +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2:+ANON-ECDH --insecure --starttls -d 6 /dev/null || \ fail ${PID} "starttls connect should have succeeded!" diff --git a/tests/status-request-ext.c b/tests/status-request-ext.c index e893c5c528..495e08a197 100644 --- a/tests/status-request-ext.c +++ b/tests/status-request-ext.c @@ -49,8 +49,6 @@ int main() #include "cert-common.h" #include "utils.h" -static void terminate(void); - /* This program tests that the server does not send the * status request extension if no status response exists. That * is to provide compatibility with gnutls 3.3.x which requires @@ -157,7 +155,7 @@ static int handshake_callback(gnutls_session_t session, unsigned int htype, #define MAX_BUF 1024 -static void client(int fd) +static void client(int fd, const char *prio) { int ret; gnutls_certificate_credentials_t x509_cred; @@ -178,7 +176,7 @@ static void client(int fd) gnutls_init(&session, GNUTLS_CLIENT); /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-RSA", NULL); + gnutls_priority_set_direct(session, prio, NULL); /* put the anonymous credentials to the current session */ @@ -200,7 +198,6 @@ static void client(int fd) if (ret < 0) { fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); - terminate(); } else { if (debug) success("client: Handshake was completed\n"); @@ -225,16 +222,7 @@ static void client(int fd) } -/* These are global */ -pid_t child; - -static void terminate(void) -{ - kill(child, SIGTERM); - exit(1); -} - -static void server(int fd) +static void server(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -265,7 +253,7 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + gnutls_priority_set_direct(session, prio, NULL); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -309,14 +297,17 @@ static void ch_handler(int sig) return; } -void doit(void) +static void start(const char *name, const char *prio) { + pid_t child; int fd[2]; int ret, status = 0; signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); + success("running: %s\n", name); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); if (ret < 0) { perror("socketpair"); @@ -333,14 +324,21 @@ void doit(void) if (child) { /* parent */ close(fd[1]); - server(fd[0]); + server(fd[0], prio); waitpid(child, &status, 0); check_wait_status(status); } else { close(fd[0]); - client(fd[1]); + client(fd[1], prio); exit(0); } } +void doit(void) +{ + start("tls1.2", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2"); + start("tls1.3", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3"); + start("default", "NORMAL"); +} + #endif /* _WIN32 */ diff --git a/tests/status-request-missing.c b/tests/status-request-missing.c deleted file mode 100644 index f55f3ac469..0000000000 --- a/tests/status-request-missing.c +++ /dev/null @@ -1,346 +0,0 @@ -/* - * Copyright (C) 2016 Tim Kosse - * - * Author: Tim Kosse - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#if defined(_WIN32) - -int main() -{ - exit(77); -} - -#else - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" - -static void terminate(void); - -/* This program tests that handshakes fail if the server does not include the - * requested certificate status with the server certificate having - * TLS feature 5 (status request). - * - * See RFC 7633 section 4.2.3.1 paragraph 1 - * - * Remark: Doesn't the MUST in section 4.3.3 para. 1 overrule the SHOULD of 4.2.3.1 para. 1? - */ - -static time_t mytime(time_t * t) -{ - time_t then = 1464610242; - if (t) - *t = then; - - return then; -} - -static void server_log_func(int level, const char *str) -{ - fprintf(stderr, "server|<%d>| %s", level, str); -} - -static void client_log_func(int level, const char *str) -{ - fprintf(stderr, "client|<%d>| %s", level, str); -} - -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICBzCCAXCgAwIBAgIMVpjt8TL5Io/frpvkMA0GCSqGSIb3DQEBCwUAMCIxIDAe\n" - "BgNVBAMTF0dudVRMUyB0ZXN0IGNlcnRpZmljYXRlMB4XDTE2MDExNTEzMDI0MVoX\n" - "DTMyMDYxOTEzMDI0MVowIjEgMB4GA1UEAxMXR251VExTIHRlc3QgY2VydGlmaWNh\n" - "dGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANe6XK+jDPAuqSdWqlOOqOt/\n" - "gXVMa5i+Suq3HvhLw2rE2g0AuOpMEx82FpPecu/GpF6ybrbKCohVdZCW7aZXvAw7\n" - "dg2XHr3p7H/Tqez7hWSga6BIznd+c5wxE/89yK6lYG7Ztoxamm+2vp9qvafwoDMn\n" - "9bcdkuWWnHNS1p/WyI6xAgMBAAGjQjBAMBEGCCsGAQUFBwEYBAUwAwIBBTAMBgNV\n" - "HRMBAf8EAjAAMB0GA1UdDgQWBBRTSzvcXshETAIgvzlIb0z+zSVSEDANBgkqhkiG\n" - "9w0BAQsFAAOBgQB+VcJuLPL2PMog0HZ8RRbqVvLU5d209ROg3s1oXUBFW8+AV+71\n" - "CsHg9Xx7vqKVwyKGI9ghds1B44lNPxGH2Sk1v2czjKbzwujo9+kLnDS6i0jyrDdn\n" - "um4ivpkwmlUFSQVXvENLwe9gTlIgN4+0I9WLcMTCDtHWkcxMRwCm2BMsXw==\n" - "-----END CERTIFICATE-----\n"; - - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - -static int received = 0; - -static int handshake_callback(gnutls_session_t session, unsigned int htype, - unsigned post, unsigned int incoming, const gnutls_datum_t *msg) -{ - fail("received status request\n"); - received = 1; - return 0; -} - -#define MAX_BUF 1024 - -static void client(int fd) -{ - int ret; - unsigned int status; - gnutls_certificate_credentials_t x509_cred; - gnutls_session_t session; - /* Need to enable anonymous KX specifically. */ - - gnutls_global_set_time_function(mytime); - global_init(); - - if (debug) { - gnutls_global_set_log_function(client_log_func); - gnutls_global_set_log_level(7); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); - - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-RSA", NULL); - - gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_CERTIFICATE_STATUS, - GNUTLS_HOOK_POST, - handshake_callback); - - /* put the anonymous credentials to the current session - */ - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - - /* Perform the TLS handshake - */ - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - - if (ret == GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM) { - /* success */ - goto end; - } - - if (ret < 0) { - fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); - terminate(); - } else { - if (debug) - success("client: Handshake was completed\n"); - } - - if (debug) - success("client: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - if (received == 1) { - fail("client: received certificate status when we shouldn't.\n"); - terminate(); - } - - ret = gnutls_certificate_verify_peers2(session, &status); - if (ret != GNUTLS_E_SUCCESS) { - fail("client: Peer certificate validation failed: %s\n", gnutls_strerror(ret)); - terminate(); - } - else { - if (status & GNUTLS_CERT_MISSING_OCSP_STATUS) { - success("client: Validation failed with GNUTLS_CERT_MISSING_OCSP_STATUS\n"); - } - else { - fail("client: Validation status does not include GNUTLS_CERT_MISSING_OCSP_STATUS. Status is %d\n", status); - terminate(); - } - } - - gnutls_bye(session, GNUTLS_SHUT_WR); - - end: - - close(fd); - - gnutls_deinit(session); - - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); -} - - -/* These are global */ -pid_t child; - -static void terminate(void) -{ - kill(child, SIGTERM); - exit(1); -} - -static void server(int fd) -{ - int ret; - char buffer[MAX_BUF + 1]; - gnutls_session_t session; - gnutls_certificate_credentials_t x509_cred; - - /* this must be called once in the program - */ - global_init(); - memset(buffer, 0, sizeof(buffer)); - - if (debug) { - gnutls_global_set_log_function(server_log_func); - gnutls_global_set_log_level(4711); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, - &server_key, - GNUTLS_X509_FMT_PEM); - - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL", NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - - do { - ret = gnutls_handshake(session); - } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - if (ret < 0) { - /* failure is expected here */ - goto end; - } - - if (debug) { - success("server: Handshake was completed\n"); - } - - if (debug) - success("server: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - /* do not wait for the peer to close the connection. - */ - gnutls_bye(session, GNUTLS_SHUT_WR); - - end: - close(fd); - gnutls_deinit(session); - - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); - - if (debug) - success("server: finished\n"); -} - -static void ch_handler(int sig) -{ - return; -} - -void doit(void) -{ - int fd[2]; - int ret, status = 0; - - signal(SIGCHLD, ch_handler); - signal(SIGPIPE, SIG_IGN); - - ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); - if (ret < 0) { - perror("socketpair"); - exit(1); - } - - child = fork(); - if (child < 0) { - perror("fork"); - fail("fork"); - exit(1); - } - - if (child) { - /* parent */ - close(fd[1]); - client(fd[0]); - waitpid(child, &status, 0); - check_wait_status(status); - } else { - close(fd[0]); - server(fd[1]); - exit(0); - } - - return; -} - -#endif /* _WIN32 */ diff --git a/tests/status-request-ok.c b/tests/status-request-ok.c index 50a4a9d4b7..fe1818eeee 100644 --- a/tests/status-request-ok.c +++ b/tests/status-request-ok.c @@ -49,8 +49,6 @@ int main() #include "utils.h" -static void terminate(void); - /* This program tests the status request extension and that receiving the * certificate status works. */ @@ -181,7 +179,6 @@ static void client(int fd) if (ret < 0) { fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); - terminate(); } else { if (debug) success("client: Handshake was completed\n"); @@ -194,7 +191,6 @@ static void client(int fd) if (received == 0) { fail("client: didn't receive status request\n"); - terminate(); } gnutls_bye(session, GNUTLS_SHUT_WR); @@ -211,15 +207,6 @@ static void client(int fd) } -/* These are global */ -pid_t child; - -static void terminate(void) -{ - kill(child, SIGTERM); - exit(1); -} - static void server(int fd) { int ret; @@ -249,7 +236,7 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -300,6 +287,7 @@ static void ch_handler(int sig) void doit(void) { + pid_t child; int fd[2]; int ret, status = 0; diff --git a/tests/status-request-revoked.c b/tests/status-request-revoked.c new file mode 100644 index 0000000000..0268934647 --- /dev/null +++ b/tests/status-request-revoked.c @@ -0,0 +1,472 @@ +/* + * Copyright (C) 2015 Nikos Mavrogiannopoulos + * Copyright (C) 2020 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos, Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +/* This program tests that the client does not send the + * status request extension if GNUTLS_NO_EXTENSIONS is set. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +static time_t mytime(time_t * t) +{ + time_t then = 1586000000; + + if (t) + *t = then; + + return then; +} + +static unsigned char server_cert_pem[] = +"-----BEGIN CERTIFICATE-----\n" +"MIIEKjCCAhKgAwIBAgIIRiBQA6KFBj0wDQYJKoZIhvcNAQELBQAwDzENMAsGA1UE\n" +"AxMEaWNhMTAeFw0xOTEwMjQxNDA1MDBaFw0yMDEwMjQxNDAzMDBaMBoxGDAWBgNV\n" +"BAMTD3Rlc3Quc2VydmVyLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\n" +"ggEBAKgBiCBLx9eqe2tcCdkyDvQb3UZMR/Gs1mHaiW9zUbqnHkMD/N+0B+JRcfW2\n" +"P5WnQRTlSrWM/gFJh+va0Wtnu0VZWdBHhyR8Vq62DskNRSXUSTsQVqktaMmA/yPY\n" +"iYtY5069WUBoa1GD23BRaeoinLtmBEaUIvsAdCPQ5bCdaVSFOLlnuDxF6/bOAQAC\n" +"5EJ3UDAdqqGmHCQAJcKiCim2ttCIquLqAsgalHMKKBAdEm01o+LO6FOHK1OkwA1W\n" +"GiDNaojEojMS87x9VjmdiamvPuAALLAMMQ3fh8DxqAWA4pfkYWJKehnlPHdjPfkO\n" +"GjUvpezsWev5PBJKp5x6ce9vlgMCAwEAAaN/MH0wCQYDVR0TBAIwADALBgNVHQ8E\n" +"BAMCA4gwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGgYDVR0RBBMwEYIPdGVzdC5zZXJ2\n" +"ZXIuY29tMDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAYYWaHR0cDovLzEwLjEu\n" +"Mi4yNDI6ODg4ODANBgkqhkiG9w0BAQsFAAOCAgEAK9Bo7i8Mj7t8l+nZqQ6ezG6d\n" +"sq5FYkr2h+T5C0Pt2RscMYAKRdBjAXmCTy1jhaojUVIupm/pK1YQAOgSQF5PMhLl\n" +"3W1SiLl2aU1A0HjHpHvN81YP5VeceHgoJrA5VYGYQohIyH9zfSJNb5TyhQcIHiqZ\n" +"aSC64c7sSywHC4vEHYyYu0LVMic4y7EWM2Y5Vh3xhB28jq5ixChCxG/i6rHt1fC+\n" +"1YsKQaE+sAY4QVjMYE8g4SldqMDpnSCiHDFBfWMGD5hGvp4WMfNXpuiDG9M8wAcT\n" +"A93NxnZqmUdksK/waGS7/uj/eY1hMU2Z/TVhaCDk146hH+lOUf6CnwM3MXLOALaz\n" +"eHyfbm/P8XniWhzBQIiY+5wYVath9YlOkRZhAMKRglRNpwXoTKZiJNkqrwaz6RnB\n" +"S19QByi+L6tFP7AxLFd7DKv4FbI2FWh5GyCrqa8rNc3Bh/oxDR0iAUetEFQUjkxN\n" +"x5A0mOnKds0UoTq3nI5t6obgzAjFkiMgVMXyXo4HqfzpAtqIgZd+PJn5snFoJ6Xh\n" +"NPjCYbfBb9LQFlfodWVg0W4mjfp0HypFaBIudgw0ANdQUUOosWFi0H2msj7CJf4G\n" +"crMZmsCvD+xKfwKqph+tH0/e/xFeFmVOSVI78ESJhpRcQ9ODiOA98FTR4W1Nv9gd\n" +"2GOAQzJDUd051fcRBXQ=\n" +"-----END CERTIFICATE-----\n" +"-----BEGIN CERTIFICATE-----\n" +"MIIEvzCCAqegAwIBAgIIV9UmBssMHTUwDQYJKoZIhvcNAQELBQAwETEPMA0GA1UE\n" +"AxMGcm9vdGNhMB4XDTE5MTAyNDE0MDQwMFoXDTIwMTAyNDE0MDMwMFowDzENMAsG\n" +"A1UEAxMEaWNhMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALY5o80n\n" +"QOQWNJnWOEL6Vg/UH84r9TP4ZWKlWmC4K+pi0S+8x7uFBUyxFffS/SaWeoxI2wBm\n" +"ezMjAl1gFQTCxsojxfgS9Ky9fbxdaADeLKW7B8UHRzrKO8I9Khhe82oU87vAYUFX\n" +"cC0ALIE4zpcdezmr53ACloYfTwDy4onl6VKVjwhfZ6PglwZRkOLjSRMbmSScJPGF\n" +"pMx29dhXEFeCyAdqU+H9Bhu0cIwHUeFp4BM1j8NsW6GHLIzioc5f70EX76M9FyRA\n" +"EB/csmEGX37vNjPmmyki6SJ2nFoa7C9o3ty7IzoUdrU8Cfj9o6WdEfCRlIuxLWra\n" +"LFQrduuhk3sZYU2adZa3hJJ3Y+jx0lUBO4TxtO1Maf39Rfp4BzK1WybjCpDnO/Xg\n" +"kU5hDjQX9zRWYPcwPMGEv3wJAezTsp/mx8UGtIlWVpd0z/oVoKvOrGaxx0RYq5SP\n" +"mutaKDCvQ0j6t9wc69fyG5d9iNA3INXLhkFiZqEKpwZsi7RaSjD615EX2GqdIoZ0\n" +"Ib4NEtpMv12/7ti1VFVxNNMaDNiOKRg7/Ha5SrRnCabyEuykSUnxjttNjBEazn1M\n" +"VWIel0scvDtRFDFGklFuABOJmoYGkAPnIpN+H/l17/VtSWBsPy1rnlfgK2ftm773\n" +"5kiEQJn42uh+jbgWaBdt9Q1B+VeV51pnjjc7AgMBAAGjHTAbMAwGA1UdEwQFMAMB\n" +"Af8wCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQBgm8eEsLeGo5eI4plQ\n" +"WtqvyKrrvpa9YachqmQfoARbMBJg4J0Eq3u3yjL1kUHZ5f0IkXeiaw/w5u2oxZTe\n" +"SHHJCCd54NhLzBeTV/GQuDnWqU+GZP3ay+SkzjAMbfkHibVlRZLkeVnDZLRGd5jb\n" +"RMXRj1LMVagI1xVM3Y4PEcDw+Bhp4XFHBUcxtcqFrjJQBbJJYE9A2QiPwoDQlYoy\n" +"gSvVffbb04bDM01pbYOfPL9t1IIiq7KHHOq0vWzvoU+hnAx+U30wNSaeshKuixNa\n" +"PpWKZ1hoejkhddeiypFqhS54oOxaCxArXPFIl/mLPJlztf/s1Xumi0W4fkIACtoY\n" +"SFilawtsf/vC/WesFsQ502IkFpjYCeUavk8nAfZPZg1BwQ+ZLcwZXBuCtqyn9Mk9\n" +"3UgHAiwMLDqeSQShjHWkBeLr5IOYMubT6SuLpd13rz2WOj6ETq7zizUanV8yAeaT\n" +"x/pn1/rVpbzrbEAL5RkYlUK0ZbwpKjTLygiHUXFqpiID4L1OXoJbtbgSQlXFTEXV\n" +"AnG40QNerXjQ8b+BlmFmCY2nxtNFgtVLUHb4vyG1mUcNIYafH+9TD5tUdzDVZP90\n" +"NnU+8i3Ah3qk9B4Cv9wdHY4Mq/m2jTZd060oGb5l5381Ju5tr2BE+xPXCzSk7TsL\n" +"tdq43/hGqq4D2YGCc9E0WnOVxw==\n" +"-----END CERTIFICATE-----\n" +"-----BEGIN CERTIFICATE-----\n" +"MIIEwTCCAqmgAwIBAgIIFv+PS+AkgjowDQYJKoZIhvcNAQELBQAwETEPMA0GA1UE\n" +"AxMGcm9vdGNhMB4XDTE5MTAyNDE0MDMwMFoXDTIwMTAyNDE0MDMwMFowETEPMA0G\n" +"A1UEAxMGcm9vdGNhMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtjmj\n" +"zSdA5BY0mdY4QvpWD9Qfziv1M/hlYqVaYLgr6mLRL7zHu4UFTLEV99L9JpZ6jEjb\n" +"AGZ7MyMCXWAVBMLGyiPF+BL0rL19vF1oAN4spbsHxQdHOso7wj0qGF7zahTzu8Bh\n" +"QVdwLQAsgTjOlx17OavncAKWhh9PAPLiieXpUpWPCF9no+CXBlGQ4uNJExuZJJwk\n" +"8YWkzHb12FcQV4LIB2pT4f0GG7RwjAdR4WngEzWPw2xboYcsjOKhzl/vQRfvoz0X\n" +"JEAQH9yyYQZffu82M+abKSLpInacWhrsL2je3LsjOhR2tTwJ+P2jpZ0R8JGUi7Et\n" +"atosVCt266GTexlhTZp1lreEkndj6PHSVQE7hPG07Uxp/f1F+ngHMrVbJuMKkOc7\n" +"9eCRTmEONBf3NFZg9zA8wYS/fAkB7NOyn+bHxQa0iVZWl3TP+hWgq86sZrHHRFir\n" +"lI+a61ooMK9DSPq33Bzr1/Ibl32I0Dcg1cuGQWJmoQqnBmyLtFpKMPrXkRfYap0i\n" +"hnQhvg0S2ky/Xb/u2LVUVXE00xoM2I4pGDv8drlKtGcJpvIS7KRJSfGO202MERrO\n" +"fUxVYh6XSxy8O1EUMUaSUW4AE4mahgaQA+cik34f+XXv9W1JYGw/LWueV+ArZ+2b\n" +"vvfmSIRAmfja6H6NuBZoF231DUH5V5XnWmeONzsCAwEAAaMdMBswDAYDVR0TBAUw\n" +"AwEB/zALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAAk7UHoAWMRlcCtH\n" +"qPH4YOuqqhMEqrJ3nRrRffDmRNCy/R2OpYRmI37HItaWmAB/aGK6H3nQG5fHY1/e\n" +"Ypn/uwpYyvpMtYZgeNNFHckXcWQo3C7wOlCwQzWzI9po0zRp3EqTNBneKa4cZoe0\n" +"FxcMfLbHL4SRKE08PZ3NBRW4n01fjjSs3o4cXvhD6puMTwjL581tWhgmfTrYGMvH\n" +"i7/XSUuFKzj74dA1LioEvbi5qy4kCvy1zxLMySXRd8ZtdnlS/tP3dTx+f1qCZaH6\n" +"E3jE7pi24yRmQaiNaO8Ap4uKcPaMXCsqg+TNTID3QJx6hDgQYsD7P64cUJXXhT/S\n" +"bmdawUaWhwZXVCm2VIpYI3GYhnEVpovyqHOsopNfrabCzvuVB/d4wJBO9MJUk/0l\n" +"BBCTJx3DluvkjKlDWxVDgpofElbU+77mEKLLki4G0f12biJLXOoS+jYayHSKbNlT\n" +"5qzXO3swPMNyS1iBdJtmsh3d5JxHa96UlBgKa5pZY2vk+rHUP0j5aLPMqqCixOpE\n" +"rYX6hvg898wlR2enXY//dgnvgprDW9Fs1x/PdaFx6p1EFpGuJX/td7CK633MsRbu\n" +"dirhB+L70skZjiGGR/kY0i6edHFiMoqmyXm3ML9ID3ZWfQV9gDCCIKvz9SqpW08q\n" +"dZHbP85IPw8a3Lzour7HV3acvaKA\n" +"-----END CERTIFICATE-----\n"; + +const gnutls_datum_t server_cert = { server_cert_pem, + sizeof(server_cert_pem)-1 +}; + +static unsigned char ca_cert_pem[] = +"-----BEGIN CERTIFICATE-----\n" +"MIIEwTCCAqmgAwIBAgIIFv+PS+AkgjowDQYJKoZIhvcNAQELBQAwETEPMA0GA1UE\n" +"AxMGcm9vdGNhMB4XDTE5MTAyNDE0MDMwMFoXDTIwMTAyNDE0MDMwMFowETEPMA0G\n" +"A1UEAxMGcm9vdGNhMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtjmj\n" +"zSdA5BY0mdY4QvpWD9Qfziv1M/hlYqVaYLgr6mLRL7zHu4UFTLEV99L9JpZ6jEjb\n" +"AGZ7MyMCXWAVBMLGyiPF+BL0rL19vF1oAN4spbsHxQdHOso7wj0qGF7zahTzu8Bh\n" +"QVdwLQAsgTjOlx17OavncAKWhh9PAPLiieXpUpWPCF9no+CXBlGQ4uNJExuZJJwk\n" +"8YWkzHb12FcQV4LIB2pT4f0GG7RwjAdR4WngEzWPw2xboYcsjOKhzl/vQRfvoz0X\n" +"JEAQH9yyYQZffu82M+abKSLpInacWhrsL2je3LsjOhR2tTwJ+P2jpZ0R8JGUi7Et\n" +"atosVCt266GTexlhTZp1lreEkndj6PHSVQE7hPG07Uxp/f1F+ngHMrVbJuMKkOc7\n" +"9eCRTmEONBf3NFZg9zA8wYS/fAkB7NOyn+bHxQa0iVZWl3TP+hWgq86sZrHHRFir\n" +"lI+a61ooMK9DSPq33Bzr1/Ibl32I0Dcg1cuGQWJmoQqnBmyLtFpKMPrXkRfYap0i\n" +"hnQhvg0S2ky/Xb/u2LVUVXE00xoM2I4pGDv8drlKtGcJpvIS7KRJSfGO202MERrO\n" +"fUxVYh6XSxy8O1EUMUaSUW4AE4mahgaQA+cik34f+XXv9W1JYGw/LWueV+ArZ+2b\n" +"vvfmSIRAmfja6H6NuBZoF231DUH5V5XnWmeONzsCAwEAAaMdMBswDAYDVR0TBAUw\n" +"AwEB/zALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAAk7UHoAWMRlcCtH\n" +"qPH4YOuqqhMEqrJ3nRrRffDmRNCy/R2OpYRmI37HItaWmAB/aGK6H3nQG5fHY1/e\n" +"Ypn/uwpYyvpMtYZgeNNFHckXcWQo3C7wOlCwQzWzI9po0zRp3EqTNBneKa4cZoe0\n" +"FxcMfLbHL4SRKE08PZ3NBRW4n01fjjSs3o4cXvhD6puMTwjL581tWhgmfTrYGMvH\n" +"i7/XSUuFKzj74dA1LioEvbi5qy4kCvy1zxLMySXRd8ZtdnlS/tP3dTx+f1qCZaH6\n" +"E3jE7pi24yRmQaiNaO8Ap4uKcPaMXCsqg+TNTID3QJx6hDgQYsD7P64cUJXXhT/S\n" +"bmdawUaWhwZXVCm2VIpYI3GYhnEVpovyqHOsopNfrabCzvuVB/d4wJBO9MJUk/0l\n" +"BBCTJx3DluvkjKlDWxVDgpofElbU+77mEKLLki4G0f12biJLXOoS+jYayHSKbNlT\n" +"5qzXO3swPMNyS1iBdJtmsh3d5JxHa96UlBgKa5pZY2vk+rHUP0j5aLPMqqCixOpE\n" +"rYX6hvg898wlR2enXY//dgnvgprDW9Fs1x/PdaFx6p1EFpGuJX/td7CK633MsRbu\n" +"dirhB+L70skZjiGGR/kY0i6edHFiMoqmyXm3ML9ID3ZWfQV9gDCCIKvz9SqpW08q\n" +"dZHbP85IPw8a3Lzour7HV3acvaKA\n" +"-----END CERTIFICATE-----\n"; + +const gnutls_datum_t ca_cert = { ca_cert_pem, + sizeof(ca_cert_pem) +}; + +static unsigned char server_key_pem[] = +"-----BEGIN RSA PRIVATE KEY-----\n" +"MIIEogIBAAKCAQEAqAGIIEvH16p7a1wJ2TIO9BvdRkxH8azWYdqJb3NRuqceQwP8\n" +"37QH4lFx9bY/ladBFOVKtYz+AUmH69rRa2e7RVlZ0EeHJHxWrrYOyQ1FJdRJOxBW\n" +"qS1oyYD/I9iJi1jnTr1ZQGhrUYPbcFFp6iKcu2YERpQi+wB0I9DlsJ1pVIU4uWe4\n" +"PEXr9s4BAALkQndQMB2qoaYcJAAlwqIKKba20Iiq4uoCyBqUcwooEB0SbTWj4s7o\n" +"U4crU6TADVYaIM1qiMSiMxLzvH1WOZ2Jqa8+4AAssAwxDd+HwPGoBYDil+RhYkp6\n" +"GeU8d2M9+Q4aNS+l7OxZ6/k8EkqnnHpx72+WAwIDAQABAoIBAEw4Ba3BM3SgH0Xh\n" +"h4ZFs4sDaSuPR8RYiRnzrw4k3xsy3gPBN2O1pS4DjRPQDqCyNFBqha4/vKyQ010o\n" +"9IEpmkgn9RsMmD7xOdIhPivwHULAQEjPbMFrnHJuV1HH1v6k4qtSM7+In8dnbpJS\n" +"HR7ffQN3kNEEO6pr1kS5bLrnbvWsjpKcqELOMJfJY+uMS/GhITfrhWtm0PagZ1ze\n" +"w/WYHTkgzGOgBeJuOjb6jCfLOuNDsP/RKALnq7eGeHce8w1tRFkpnxHrCquisgaQ\n" +"ZpFIwG8r8VgwRgd/ydjD1+jMgIwx1NW2GBnX91uLCe6/hTMDAub6TPYZkqiHIlDZ\n" +"UcMg5eECgYEA0kdGFO4XjlpLg5y5FmZSNH0UhEYbn67PTb9DMi3ecDPH5zSjbiYa\n" +"0JCFYQqRTPBl6D/cRIIIaWJOBIg7DgzELFTqnZlpWuenSef9sHNIQp/6XhT75aLD\n" +"EUJgcP3oyV0MOhGp48ZnYgmbnBZuoQKpuWV39IqqgSlAUKjTcFQAV9UCgYEAzIk/\n" +"eTkd1tOh+K22pGBaz8hHi5+YJ/YpHKSjryI2I0PgtmrWL8S284pySkGU+oFV4N8Z\n" +"Ajh5+26DVWxQK8LAqRYlgrooF/+85FJuGx47BhnTCVxmypOZILJ0jeJk8StBrAUk\n" +"TvcEVcQr8kFSvUPyz1codEFTECsMYbKP37aeuncCgYBnOa3hoG/X5eOkHE+P+3Ln\n" +"aW+k73WoEfyaQgYOoA3OLt03VtPTwsjvEcMoPDPP/UNJm+/Zgav3b9a0ytuSrhmv\n" +"WZBDBYh+o7Gvyj7zW+RhMH+Lp+lwdVIlKtyFG2AnWZIi/4DS3BbsPaMyIKD2UYRY\n" +"CsO0PE4vUbzM29PQFKyGcQKBgG3hrf/p92XZ/EIk0OIuAZtu9UDFVHDjheKlcGo9\n" +"7uezJ53Yd4jiHYdo8U2DPg32PbS5Ji5TOPUiwdu6fLeFwQsVosFAURnTgh8HSa+3\n" +"5e25Ie79fRuHf9RZCtTOs3v8ySMpAACMJAAPi6xx+4lCX8eUA1+xWHZvKg+yZijB\n" +"azSxAoGABIvXwUi1NaRDF/fMDiwiwnlJf8FdfY3RBbM1X3ZJbhzqxGL3Hfc4vRcB\n" +"zl7xUnP5Ot9trof6AjHsYCRW+FFjrbUs0x56KoIDCTsd8uArmquyKnSrQb+Zu4FK\n" +"b9M8/NMq3h3Ub+yO/YBm1HOSWeJs8pNSMU72j3QhorNIjAsLGyE=\n" + "-----END RSA PRIVATE KEY-----\n"; + +const gnutls_datum_t server_key = { server_key_pem, + sizeof(server_key_pem)-1 +}; + +static int sent = 0; +static int received = 0; + +static int handshake_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + success("received status request\n"); + received = 1; + return 0; +} + +#define RESP "\x30\x82\x05\xa3\x0a\x01\x00\xa0\x82\x05\x9c\x30\x82\x05\x98\x06\x09\x2b\x06\x01\x05\x05\x07\x30\x01\x01\x04\x82\x05\x89\x30\x82\x05\x85\x30\x81\x80\xa1\x02\x30\x00\x18\x0f\x32\x30\x31\x39\x31\x32\x30\x35\x31\x38\x30\x31\x30\x34\x5a\x30\x69\x30\x67\x30\x41\x30\x09\x06\x05\x2b\x0e\x03\x02\x1a\x05\x00\x04\x14\x46\x2c\x91\xc8\xd2\x57\xe2\xb8\xb1\xd3\xd0\x99\xc1\xfe\x38\x51\x0e\x17\xa9\x50\x04\x14\x11\x92\x6c\xe3\xa7\x50\x77\x21\xfe\x95\xfa\xca\x6d\x3f\xc7\xa9\xaf\xa4\x9e\x82\x02\x08\x46\x20\x50\x03\xa2\x85\x06\x3d\xa1\x11\x18\x0f\x32\x30\x31\x39\x31\x32\x30\x35\x31\x35\x32\x37\x35\x35\x5a\x18\x0f\x32\x30\x31\x39\x31\x32\x30\x35\x31\x38\x30\x31\x30\x34\x5a\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x01\x01\x00\x05\x88\x2c\x3d\x57\xf4\x75\xbf\x7f\xbe\x9e\x0f\xdf\x8f\x6c\x5f\x08\x56\xc4\x04\xc6\xd6\x3c\xfa\x33\x54\x3e\x42\x1c\x77\xda\x3a\x2a\x48\xcf\xfd\xf1\x6e\xb5\x1d\x94\x06\xfa\xfd\xf8\xba\xec\x66\xc3\x22\x7c\x43\xaa\x48\xaa\x58\x3a\xdc\x2a\x55\x44\x78\xc5\x6e\x0d\x1e\x66\xff\x79\x33\xb3\x26\x22\x86\xa0\x0a\xc0\x59\xb1\xdf\x6d\x07\x2d\x86\x2d\x5b\x0b\x29\x0f\xf3\xc1\x39\x21\x05\xf9\xdb\xdd\x47\x11\x6b\x83\xa0\xc7\x24\xbc\xaa\x42\x43\x9e\x20\x1f\x63\x10\x6c\xeb\x94\x7a\x9c\x44\xaa\x24\xfb\xde\x8f\x49\x92\x1c\xc7\x45\x21\xca\xf9\x1a\x11\x54\x4f\x68\xab\xf0\xce\xd3\x0a\xdc\x9f\xc3\x5d\x8d\x7e\xd4\x96\x30\x74\x31\x95\x04\x55\x8d\xf5\xdf\x3f\x34\x8b\x32\xfc\xf0\x4d\x10\xc6\xc4\x46\xfc\x6a\xb1\xa3\x5c\x9a\xde\xf2\x22\xc3\x5f\x08\x8a\x70\x65\xff\xaa\xf5\xc0\x14\x8b\x13\x47\xff\x0c\x72\x6a\x09\x51\xeb\xec\x92\xc5\xfd\x41\x37\x11\x12\x57\x7b\x47\x9e\x25\xd5\xf2\x10\xc2\xf7\xae\x0e\x72\xfb\x2d\x4f\x8d\x54\xe6\x5a\x71\x2b\xfa\x2b\x9c\xd7\x59\xe5\x31\x30\x21\x3f\x7f\xa7\x85\x07\x31\x93\x9d\x6d\x54\xb2\x40\xa9\x78\xef\x24\xc7\xa0\x82\x03\xea\x30\x82\x03\xe6\x30\x82\x03\xe2\x30\x82\x01\xca\xa0\x03\x02\x01\x02\x02\x08\x68\xfe\x28\x8e\x92\xfb\xa8\x37\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x0b\x05\x00\x30\x11\x31\x0f\x30\x0d\x06\x03\x55\x04\x03\x13\x06\x72\x6f\x6f\x74\x63\x61\x30\x1e\x17\x0d\x31\x39\x31\x31\x32\x30\x31\x36\x32\x34\x30\x30\x5a\x17\x0d\x32\x30\x31\x30\x32\x34\x31\x34\x30\x33\x30\x30\x5a\x30\x00\x30\x82\x01\x22\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01\x05\x00\x03\x82\x01\x0f\x00\x30\x82\x01\x0a\x02\x82\x01\x01\x00\xa8\x01\x88\x20\x4b\xc7\xd7\xaa\x7b\x6b\x5c\x09\xd9\x32\x0e\xf4\x1b\xdd\x46\x4c\x47\xf1\xac\xd6\x61\xda\x89\x6f\x73\x51\xba\xa7\x1e\x43\x03\xfc\xdf\xb4\x07\xe2\x51\x71\xf5\xb6\x3f\x95\xa7\x41\x14\xe5\x4a\xb5\x8c\xfe\x01\x49\x87\xeb\xda\xd1\x6b\x67\xbb\x45\x59\x59\xd0\x47\x87\x24\x7c\x56\xae\xb6\x0e\xc9\x0d\x45\x25\xd4\x49\x3b\x10\x56\xa9\x2d\x68\xc9\x80\xff\x23\xd8\x89\x8b\x58\xe7\x4e\xbd\x59\x40\x68\x6b\x51\x83\xdb\x70\x51\x69\xea\x22\x9c\xbb\x66\x04\x46\x94\x22\xfb\x00\x74\x23\xd0\xe5\xb0\x9d\x69\x54\x85\x38\xb9\x67\xb8\x3c\x45\xeb\xf6\xce\x01\x00\x02\xe4\x42\x77\x50\x30\x1d\xaa\xa1\xa6\x1c\x24\x00\x25\xc2\xa2\x0a\x29\xb6\xb6\xd0\x88\xaa\xe2\xea\x02\xc8\x1a\x94\x73\x0a\x28\x10\x1d\x12\x6d\x35\xa3\xe2\xce\xe8\x53\x87\x2b\x53\xa4\xc0\x0d\x56\x1a\x20\xcd\x6a\x88\xc4\xa2\x33\x12\xf3\xbc\x7d\x56\x39\x9d\x89\xa9\xaf\x3e\xe0\x00\x2c\xb0\x0c\x31\x0d\xdf\x87\xc0\xf1\xa8\x05\x80\xe2\x97\xe4\x61\x62\x4a\x7a\x19\xe5\x3c\x77\x63\x3d\xf9\x0e\x1a\x35\x2f\xa5\xec\xec\x59\xeb\xf9\x3c\x12\x4a\xa7\x9c\x7a\x71\xef\x6f\x96\x03\x02\x03\x01\x00\x01\xa3\x4f\x30\x4d\x30\x09\x06\x03\x55\x1d\x13\x04\x02\x30\x00\x30\x0b\x06\x03\x55\x1d\x0f\x04\x04\x03\x02\x07\x80\x30\x13\x06\x03\x55\x1d\x25\x04\x0c\x30\x0a\x06\x08\x2b\x06\x01\x05\x05\x07\x03\x09\x30\x1e\x06\x09\x60\x86\x48\x01\x86\xf8\x42\x01\x0d\x04\x11\x16\x0f\x78\x63\x61\x20\x63\x65\x72\x74\x69\x66\x69\x63\x61\x74\x65\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x0b\x05\x00\x03\x82\x02\x01\x00\x82\x9d\x8f\xa1\x17\x9b\x3b\xee\x86\x1c\xee\x33\xeb\x80\x71\xb5\x7e\x6b\xd7\xcf\x7d\x9a\x8b\x80\x2b\x3c\x65\xde\xe1\x65\x00\x3b\x4a\x27\x7a\x5d\x63\x19\x4e\x59\xde\xfa\x38\x01\x2b\x09\x91\xc1\x70\x81\x8c\x87\x9b\x17\x68\x22\x88\xf2\x57\x8f\x15\x52\x12\x0f\x1d\x43\x2b\xff\x83\x00\x2f\xd0\xf5\xc7\x93\xd4\xf2\x14\xfd\x94\xcc\x9f\x72\x75\x99\x44\x54\xdc\x6a\x39\x75\x80\xd7\x07\x9c\xb9\x67\xe3\xac\x4b\x72\x9f\xe0\x5d\x00\x6e\x60\xc5\x26\xaf\x9f\xf7\x94\xaa\xb1\xa2\x6f\xa0\xe4\xe8\x0d\x1c\x4e\x34\xe8\xa5\x06\x5c\x31\x64\x09\xf3\x67\xea\xe8\x45\x68\xc1\x13\x21\x41\x38\x9c\x2c\xf9\x6c\xb8\x79\xf4\xae\x8c\x27\x12\xa3\x0a\x0f\x12\x56\xbc\xda\x77\x23\xf0\xe2\xa2\x81\xf9\xdd\x0d\x69\x77\xc3\x3d\x08\x9d\xfe\xac\x18\x14\x83\x49\x67\xde\x85\x3a\x09\xd4\x4f\xec\x85\x85\xbc\xab\xd1\xc8\x01\x83\x74\x34\xc0\x03\x4e\x52\x3c\xb2\xed\x3b\xc0\x66\xa7\x41\xbf\x77\x3b\xcc\x12\xee\xf9\x2f\xd8\x50\x6d\x54\xc5\xf8\x5e\x14\x61\x81\x24\xdb\xcb\xf3\xb4\x25\x84\xc6\x3b\x99\x35\x07\x2e\xd0\xb3\x05\x38\xdf\x64\x21\x71\x9e\xe2\xf2\xce\xbc\x27\x80\x4e\x53\x97\xd3\xe1\xc1\x15\x46\x24\x0c\xc5\x86\x0e\x5b\xdf\x22\xb9\xfe\x35\xd6\xf0\x53\xda\x8f\x9b\x9c\x77\x7e\x9e\x41\x6f\x8e\xbc\x7b\xd4\xf0\x6c\x4f\xac\xe2\x91\x69\x8f\x67\x48\xb0\xc8\x80\x06\x10\xb1\x33\xf9\x8b\xf0\x01\x5d\x49\x9a\x5a\x59\xec\xc6\xb4\xad\x79\x9a\x32\x87\x81\x18\xce\x77\xf6\xc6\xa5\xce\x8b\x36\xee\xc6\xcc\x6b\xd7\x76\xbb\x99\xc1\x34\x2c\xda\x6a\x5f\x1d\x47\xc6\x9e\x98\xa0\x1d\xf0\xd4\x8b\x27\x8a\xa4\x7b\x56\xd8\x7c\x12\xa2\x51\x6e\xd1\x52\xa9\xa5\x31\x77\x9f\xf5\x06\xb4\xba\xb4\x60\x24\x55\xa2\x9d\x4b\x02\xcb\xa7\x62\xa5\x3d\x74\x9e\x47\x9e\x14\x84\x0b\x24\xe0\x01\x13\x9c\xf1\x62\xbd\x78\x18\x9b\xa5\xdf\xd8\x77\x7c\xa9\xc7\x09\x94\x61\x79\x41\x60\x2f\xcc\xe1\x15\x28\x3c\x17\x1d\xb6\x95\x78\x28\x91\x9e\xd1\xbc\xd6\x71\xff\x29\x2f\x22\xed\x24\x26\x81\xb8\xb6\x14\x80\x04\x00\x95\xdf\x50\x46\xe6\xa1\xff\x56\x94\xbc\x11\x48\x5c\xbf\xca\xb7\x4f\xac\xa1\x34\x40\x80\x0d\x88\x27\x73\x76\x24\x1a\xa9\x86\x36\x56\x3c\x84\xb8\x97\x38\xa8\x0e\x14\xab\x83\xca\x6b\x64\x7f\xa7\xfb\x86\x63\xc2\x40\xfc" +#define RESP_SIZE (sizeof(RESP)-1) + +static int status_func(gnutls_session_t session, void *ptr, gnutls_datum_t *resp) +{ + resp->data = gnutls_malloc(RESP_SIZE); + if (resp->data == NULL) + return -1; + + memcpy(resp->data, RESP, RESP_SIZE); + resp->size = RESP_SIZE; + sent = 1; + return 0; +} + +#define MAX_BUF 1024 + +static int cert_verify_callback(gnutls_session_t session) +{ + unsigned int status; + int ret; + + gnutls_global_set_time_function(mytime); + ret = gnutls_certificate_verify_peers2(session, &status); + if (ret < 0) + return -1; + if (status == (GNUTLS_CERT_INVALID | GNUTLS_CERT_REVOKED)) { + if (debug) + success("certificate verify status %x\n", status); + } else + fail("certificate verify status doesn't match: %x != %x", + status, GNUTLS_CERT_INVALID | GNUTLS_CERT_REVOKED); + return 0; +} + +static void client(int fd, const char *prio) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_CERTIFICATE_STATUS, + GNUTLS_HOOK_POST, + handshake_callback); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_certificate_set_verify_function(x509_cred, + cert_verify_callback); + + gnutls_certificate_set_x509_trust_mem(x509_cred, &ca_cert, GNUTLS_X509_FMT_PEM); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + if (received == 0) { + fail("client: didn't receive status request\n"); + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + + +static void server(int fd, const char *prio) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_certificate_set_ocsp_status_request_function(x509_cred, status_func, NULL); + + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_CERTIFICATE_STATUS, + GNUTLS_HOOK_PRE, + handshake_callback); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + /* failure is expected here */ + goto end; + } + + if (debug) { + success("server: Handshake was completed\n"); + } + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + if (sent == 0) { + fail("status request was sent\n"); + exit(1); + } + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void ch_handler(int sig) +{ + return; +} + +static +void start(const char *prio) +{ + pid_t child; + int fd[2]; + int ret, status = 0; + + success("trying %s\n", prio); + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + client(fd[0], prio); + waitpid(child, &status, 0); + check_wait_status(status); + } else { + close(fd[0]); + server(fd[1], prio); + exit(0); + } +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); +} +#endif /* _WIN32 */ diff --git a/tests/status-request.c b/tests/status-request.c index a9cf79ab28..07c7918524 100644 --- a/tests/status-request.c +++ b/tests/status-request.c @@ -43,14 +43,14 @@ int main() #include #include #include +#include #include #include #include +#include "cert-common.h" #include "utils.h" -static void terminate(void); - /* This program tests that the client does not send the * status request extension if GNUTLS_NO_EXTENSIONS is set. */ @@ -65,48 +65,6 @@ static void client_log_func(int level, const char *str) fprintf(stderr, "client|<%d>| %s", level, str); } -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - - static int handshake_callback(gnutls_session_t session, unsigned int htype, unsigned post, unsigned int incoming, const gnutls_datum_t *msg) { @@ -131,13 +89,12 @@ static int status_func(gnutls_session_t session, void *ptr, gnutls_datum_t *resp #define MAX_BUF 1024 -static void client(int fd) +static void client(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; gnutls_certificate_credentials_t x509_cred; gnutls_session_t session; - /* Need to enable anonymous KX specifically. */ global_init(); @@ -150,10 +107,9 @@ static void client(int fd) /* Initialize TLS session */ - gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_NO_EXTENSIONS); + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_NO_EXTENSIONS)>=0); - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL:-KX-ALL:+ECDHE-RSA", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); /* put the anonymous credentials to the current session */ @@ -175,12 +131,13 @@ static void client(int fd) if (ret < 0) { fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); - terminate(); } else { if (debug) success("client: Handshake was completed\n"); } + assert((gnutls_session_get_flags(session) & GNUTLS_SFLAGS_CLI_REQUESTED_OCSP) == 0); + if (debug) success("client: TLS version is: %s\n", gnutls_protocol_get_name @@ -200,7 +157,6 @@ static void client(int fd) goto end; } else if (ret < 0) { fail("client: Error: %s\n", gnutls_strerror(ret)); - terminate(); } gnutls_bye(session, GNUTLS_SHUT_WR); @@ -217,16 +173,7 @@ static void client(int fd) } -/* These are global */ -pid_t child; - -static void terminate(void) -{ - kill(child, SIGTERM); - exit(1); -} - -static void server(int fd) +static void server(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -256,10 +203,7 @@ static void server(int fd) GNUTLS_HOOK_PRE, handshake_callback); - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -273,6 +217,8 @@ static void server(int fd) goto end; } + assert((gnutls_session_get_flags(session) & GNUTLS_SFLAGS_CLI_REQUESTED_OCSP) == 0); + if (debug) { success("server: Handshake was completed\n"); } @@ -303,11 +249,15 @@ static void ch_handler(int sig) return; } -void doit(void) +static +void start(const char *prio) { + pid_t child; int fd[2]; int ret, status = 0; + success("trying %s\n", prio); + signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); @@ -327,14 +277,20 @@ void doit(void) if (child) { /* parent */ close(fd[1]); - client(fd[0]); + client(fd[0], prio); waitpid(child, &status, 0); check_wait_status(status); } else { close(fd[0]); - server(fd[1]); + server(fd[1], prio); exit(0); } } +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); +} #endif /* _WIN32 */ diff --git a/tests/str-idna.c b/tests/str-idna.c index 552e23b3a1..19a29da630 100644 --- a/tests/str-idna.c +++ b/tests/str-idna.c @@ -94,12 +94,16 @@ MATCH_FUNC(test_caps_german1, "Ü.ü", "xn--tda.xn--tda"); MATCH_FUNC(test_caps_german2, "Bücher.de", "xn--bcher-kva.de"); MATCH_FUNC(test_caps_german3, "Faß.de", "xn--fa-hia.de"); MATCH_FUNC(test_dots, "a.b.c。d。", "a.b.c.d."); + +/* without STD3 ASCII rules, the result is: evil.ca/c..example.com */ +MATCH_FUNC(test_evil, "evil.c\u2100.example.com", "evil.c.example.com"); # else EMPTY_FUNC(test_caps_german1); EMPTY_FUNC(test_caps_german2); EMPTY_FUNC(test_caps_german3); EMPTY_FUNC(test_caps_greek); EMPTY_FUNC(test_dots); +EMPTY_FUNC(test_evil); # endif int main(void) @@ -130,6 +134,7 @@ int main(void) cmocka_unit_test(test_jp2), cmocka_unit_test(test_jp2_reverse), cmocka_unit_test(test_dots), + cmocka_unit_test(test_evil), cmocka_unit_test(test_valid_idna2003) }; diff --git a/tests/str-unicode.c b/tests/str-unicode.c index 5dbf16483a..d9cc37cb6b 100644 --- a/tests/str-unicode.c +++ b/tests/str-unicode.c @@ -34,31 +34,31 @@ #define MATCH_FUNC(fname, password, normalized) \ static void fname(void **glob_state) \ { \ + const char *pwd_normalized = normalized; \ gnutls_datum_t out; \ int ret = gnutls_utf8_password_normalize((uint8_t*)password, strlen(password), &out, 0); \ - if (normalized == NULL) { /* expect failure */ \ + if (pwd_normalized == NULL) { /* expect failure */ \ assert_int_not_equal(ret, 0); \ - return; \ } else { \ assert_int_equal(ret, 0); \ + assert_int_equal(strcmp((char*)out.data, (char*)pwd_normalized), 0); \ + gnutls_free(out.data); \ } \ - assert_int_equal(strcmp((char*)out.data, (char*)normalized), 0); \ - gnutls_free(out.data); \ } #define INVALID_MATCH_FUNC(fname, password, normalized) \ static void inv_##fname(void **glob_state) \ { \ + const char *pwd_normalized = normalized; \ gnutls_datum_t out; \ int ret = gnutls_utf8_password_normalize((uint8_t*)password, strlen(password), &out, GNUTLS_UTF8_IGNORE_ERRS); \ - if (normalized == NULL) { \ + if (pwd_normalized == NULL) { \ assert_int_not_equal(ret, 0); \ - return; \ } else { \ assert_int_equal(ret, 0); \ + assert_int_equal(strcmp((char*)out.data, (char*)pwd_normalized), 0); \ + gnutls_free(out.data); \ } \ - assert_int_equal(strcmp((char*)out.data, (char*)normalized), 0); \ - gnutls_free(out.data); \ } MATCH_FUNC(test_ascii, "correct horse battery staple", "correct horse battery staple"); diff --git a/tests/suite/Makefile.am b/tests/suite/Makefile.am index 233e6545ff..025f513f78 100644 --- a/tests/suite/Makefile.am +++ b/tests/suite/Makefile.am @@ -27,15 +27,9 @@ AM_CPPFLAGS = \ -I$(top_builddir)/extra/includes \ -I$(top_srcdir)/lib \ -I$(top_srcdir)/tests \ - -I$(top_srcdir)/doc/examples \ - -I$(top_srcdir)/tests/suite/ecore/src/include \ - -I$(top_srcdir)/tests/suite/ecore/src/lib + -I$(top_srcdir)/doc/examples -EXTRA_DIST = crl/long.crl crl/long.pem data/test1.cat data/test2.cat \ - data/test1.cat.data data/test2.cat.data \ - data/test1.cat.out data/test2.cat.out data/ca.pem - -check_PROGRAMS = rng prime-check cert-coverage ocsp-coverage +check_PROGRAMS = rng prime-check AM_LDFLAGS = -no-install LDADD = ../../lib/libgnutls.la \ ../../gl/libgnu.la \ @@ -44,59 +38,13 @@ LDADD = ../../lib/libgnutls.la \ prime_check_LDADD = $(LDADD) -lhogweed -lgmp -libecore_la_CPPFLAGS = -I$(top_srcdir)/tests/suite/ecore/ \ - -I$(top_srcdir)/tests/suite/ecore/src/include \ - -I$(top_srcdir)/tests/suite/ecore/src/lib -DHAVE_CONFIG_H \ - -D__UNUSED__= -DVMAJ=1 -D VMIC=0 -DVMIN=0 -DVREV=0 \ - -DEFL_HAVE_POSIX_THREADS=1 -DEFL_HAVE_POSIX_THREADS_SPINLOCK=1 \ - -DEFL_HAVE_THREADS=1 -DEINA_BUILD_CHAINED_POOL=1 \ - -DEINA_STATIC_BUILD_CHAINED_POOL=1 -DHAVE_CLOCK_GETTIME \ - -DHAVE_GETTIMEOFDAY -DPACKAGE_LIB_DIR=\"/usr/lib\" \ - -DMODULE_ARCH=\"unix\" -DSHARED_LIB_SUFFIX=\".so\" - -libecore_la_CFLAGS = -w -nodist_libecore_la_SOURCES = ecore/src/lib/ecore_anim.c \ - ecore/src/lib/ecore_app.c ecore/src/lib/ecore.c \ - ecore/src/lib/ecore_events.c ecore/src/lib/ecore_exe.c \ - ecore/src/lib/ecore_getopt.c ecore/src/lib/ecore_glib.c \ - ecore/src/lib/ecore_idle_enterer.c \ - ecore/src/lib/ecore_idle_exiter.c ecore/src/lib/ecore_idler.c \ - ecore/src/lib/ecore_job.c ecore/src/lib/ecore_main.c \ - ecore/src/lib/ecore_pipe.c ecore/src/lib/ecore_poll.c \ - ecore/src/lib/ecore_signal.c ecore/src/lib/ecore_thread.c \ - ecore/src/lib/ecore_time.c ecore/src/lib/ecore_timer.c \ - ecore/src/lib/eina_accessor.c ecore/src/lib/eina_array.c \ - ecore/src/lib/eina_benchmark.c ecore/src/lib/eina_binshare.c \ - ecore/src/lib/eina_chained_mempool.c \ - ecore/src/lib/eina_convert.c ecore/src/lib/eina_counter.c \ - ecore/src/lib/eina_cpu.c ecore/src/lib/eina_error.c \ - ecore/src/lib/eina_file.c ecore/src/lib/eina_fp.c \ - ecore/src/lib/eina_hamster.c ecore/src/lib/eina_hash.c \ - ecore/src/lib/eina_inlist.c ecore/src/lib/eina_iterator.c \ - ecore/src/lib/eina_lalloc.c ecore/src/lib/eina_list.c \ - ecore/src/lib/eina_log.c ecore/src/lib/eina_magic.c \ - ecore/src/lib/eina_main.c ecore/src/lib/eina_matrixsparse.c \ - ecore/src/lib/eina_mempool.c ecore/src/lib/eina_module.c \ - ecore/src/lib/eina_quadtree.c ecore/src/lib/eina_rbtree.c \ - ecore/src/lib/eina_rectangle.c \ - ecore/src/lib/eina_safety_checks.c ecore/src/lib/eina_sched.c \ - ecore/src/lib/eina_share_common.c ecore/src/lib/eina_strbuf.c \ - ecore/src/lib/eina_strbuf_common.c ecore/src/lib/eina_str.c \ - ecore/src/lib/eina_stringshare.c ecore/src/lib/eina_tiler.c \ - ecore/src/lib/eina_unicode.c ecore/src/lib/eina_ustrbuf.c \ - ecore/src/lib/eina_ustringshare.c ecore/src/lib/eina_value.c - - -EXTRA_DIST += testcompat-main-polarssl testcompat-main-openssl testcompat-common \ - testpkcs11.pkcs15 testpkcs11.softhsm testpkcs11.sc-hsm -nodist_check_SCRIPTS = testsrn.sh chain.sh invalid-cert.sh \ +scripts_to_test = chain.sh \ testrng.sh testcompat-polarssl.sh testcompat-openssl.sh \ - testrandom.sh pkcs7-cat certtool-pkcs11.sh tls-fuzzer/tls-fuzzer-nocert.sh \ - tls-fuzzer/tls-fuzzer-cert.sh - -if ENABLE_PKCS11 -nodist_check_SCRIPTS += testpkcs11.sh crl-test -endif + testrandom.sh tls-fuzzer/tls-fuzzer-nocert.sh \ + tls-fuzzer/tls-fuzzer-cert.sh tls-fuzzer/tls-fuzzer-alpn.sh \ + tls-fuzzer/tls-fuzzer-nocert-tls13.sh tls-fuzzer/tls-fuzzer-psk.sh \ + tls-fuzzer/tls-fuzzer-nolimit.sh tls-fuzzer/tls-fuzzer-nolimit-tls13.sh \ + multi-ticket-reception.sh TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) \ LC_ALL="C" \ @@ -104,6 +52,8 @@ TESTS_ENVIRONMENT = EXEEXT=$(EXEEXT) \ top_builddir="$(top_builddir)" \ srcdir="$(srcdir)" \ ASAN_OPTIONS="detect_leaks=0" \ + GNUTLS_TEST_SUITE_RUN=1 \ + GNUTLS_SYSTEM_PRIORITY_FILE=$(abs_top_srcdir)/tests/system.prio \ OPENSSL_ia32cap=0x00000000 if ENABLE_NON_SUITEB_CURVES @@ -111,28 +61,41 @@ TESTS_ENVIRONMENT += ENABLE_NON_SUITEB_CURVES=1 endif if ENABLE_SSL3 +scripts_to_test += tls-fuzzer/tls-fuzzer-nocert-ssl3.sh TESTS_ENVIRONMENT += ENABLE_SSL3=1 endif +if ENABLE_TLS13_INTEROP +scripts_to_test += testcompat-tls13-openssl.sh +endif + +if ENABLE_OLDGNUTLS_INTEROP +scripts_to_test += testcompat-oldgnutls.sh +endif + if ENABLE_DANE -nodist_check_SCRIPTS += testdane.sh +scripts_to_test += testdane.sh endif if !MACOSX if !WINDOWS -noinst_LTLIBRARIES = libecore.la - mini_record_timing_LDADD = -lrt $(LDADD) -eagain_cli_LDADD = libecore.la -lrt -lm -ldl -lpthread $(LDADD) -nodist_eagain_cli_SOURCES = mini-eagain2.c +nodist_mini_record_timing_SOURCES = mini-record-timing.c +eagain_cli_LDADD = $(LIBEV_LIBS) -lrt -lm $(LIBDL) -lpthread $(LDADD) +nodist_eagain_cli_SOURCES = eagain-cli.c noinst_PROGRAMS = eagain-cli mini-record-timing -nodist_check_SCRIPTS += eagain.sh +scripts_to_test += eagain.sh endif endif -TESTS = $(nodist_check_SCRIPTS) prime-check cert-coverage ocsp-coverage +nodist_prime_check_SOURCES = prime-check.c +nodist_rng_SOURCES = rng.c + +nodist_check_SCRIPTS = $(scripts_to_test) + +TESTS = $(scripts_to_test) prime-check prime_check_CPPFLAGS = $(AM_CPPFLAGS) $(NETTLE_CFLAGS) diff --git a/tests/suite/cbc-record-check.sh b/tests/suite/cbc-record-check.sh new file mode 100755 index 0000000000..453c29993b --- /dev/null +++ b/tests/suite/cbc-record-check.sh @@ -0,0 +1,81 @@ +#!/bin/bash + +ecode=0 + +FAILED="" + +if test -z "${OPTIONS}";then +OPTIONS="sha1 sha256 sha384 sha256-new sha1-one" +fi + +echo "Running for: $OPTIONS" + +TIME=ns + +function plot() +{ + hash=$1 + R --no-save <<_EOF_ +#plot +require(lattice) + +z=read.csv("out-$hash.txt", header=TRUE); + +options(scipen=999) + +m <- matrix(ncol=3,nrow=256) + +png(filename = "$hash-density.png",width=3072,height=4096,units="px",bg="white"); +d <- density(unlist(z[1,])); +plot(d, ylab="Delta", xlab="${TIME}", col="red", main=sprintf("estimated PDF for %d", 1)); +for (row in c(4,72,253,256)){ + lines(density(unlist(z[row,])), col = sample(colours(), 5)); +} +dev.off(); + +colnames(m) <- c("Delta","TimeMedian","TimeAverage") +for (row in 1:256){ + v=tail(z[row,], length(z[row,])-1) + m[row,][1] = unlist(z[row,][1]); + m[row,][2] = median(unlist(v)); + m[row,][3] = mean(unlist(v)); +} + +png(filename = "$hash-timings-med.png",width=1024,height=1024,units="px",bg="white"); +plot(m[,1],m[,2],xlab="Delta",ylab="Median timings (${TIME})"); +dev.off(); + +png(filename = "$hash-timings-ave.png",width=1024,height=1024,units="px",bg="white"); +plot(m[,1],m[,3],xlab="Delta",ylab="Average timings (${TIME})"); +dev.off(); + +estatus=0; +for (row in 2:256){ + v=ks.test(unlist(z[1,]),unlist(z[row,])); + p = 0.05/255 + if (v[2] < p) { + print (row); + print (v[2]); + estatus=1; + } +} +q(status=estatus); +_EOF_ + +if test $? != 0;then + echo "*** Failed test for $hash" + FAILED="${FAILED} $hash" + ecode=1 +fi +} + +for hash in ${OPTIONS};do + if ! test -f out-$hash.txt;then + ./mini-record-timing $hash + fi + plot $hash +done + +echo "Failed: ${FAILED}" + +exit $ecode diff --git a/tests/suite/cert-coverage.c b/tests/suite/cert-coverage.c deleted file mode 100644 index 6043aa1738..0000000000 --- a/tests/suite/cert-coverage.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (C) 2016-2017 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include - -#include "utils.h" - -/* This program will load certificates from CERT_DIR and try to print - * them if they can be imported. The purpose of the certs is to increase - * coverage in error paths. - */ - -#define CERT_DIR "certs-coverage" - -static int getnextcert(DIR **dirp, gnutls_datum_t *der) -{ - struct dirent *d; - char path[256]; - char cert_dir[256]; - const char *src; - int ret; - - src = getenv("srcdir"); - if (src == NULL) - src = "."; - - snprintf(cert_dir, sizeof(cert_dir), "%s/%s", src, CERT_DIR); - - if (*dirp == NULL) { - *dirp = opendir(cert_dir); - if (*dirp == NULL) - return -1; - } - - do { - d = readdir(*dirp); - if (d != NULL -#ifdef _DIRENT_HAVE_D_TYPE - && d->d_type == DT_REG -#endif - ) { - snprintf(path, sizeof(path), "%s/%s", cert_dir, d->d_name); - - success("Loading %s\n", path); - ret = gnutls_load_file(path, der); - if (ret < 0) { - return -1; - } - - return 0; - } - } while(d != NULL); - - closedir(*dirp); - return -1; /* finished */ -} - -void doit(void) -{ - int ret; - gnutls_x509_crt_t cert; - gnutls_datum_t der; - DIR *dirp = NULL; - - ret = global_init(); - if (ret < 0) - fail("init %d\n", ret); - - while (getnextcert(&dirp, &der)==0) { - ret = gnutls_x509_crt_init(&cert); - if (ret < 0) - fail("crt_init %d\n", ret); - - ret = gnutls_x509_crt_import(cert, &der, GNUTLS_X509_FMT_DER); - - if (ret == 0) { - /* attempt to fully decode */ - gnutls_datum_t out; - ret = gnutls_x509_crt_print(cert, GNUTLS_CRT_PRINT_FULL, &out); - if (ret < 0) { - fail("print: %s\n", gnutls_strerror(ret)); - } - gnutls_free(out.data); - } - - gnutls_x509_crt_deinit(cert); - gnutls_free(der.data); - der.data = NULL; - der.size = 0; - } - - gnutls_global_deinit(); -} diff --git a/tests/suite/certs-coverage/id:000000,orig:cert0.der b/tests/suite/certs-coverage/id:000000,orig:cert0.der deleted file mode 100644 index bfe8a5c0aa..0000000000 --- a/tests/suite/certs-coverage/id:000000,orig:cert0.der +++ /dev/null @@ -1 +0,0 @@ -0 \ No newline at end of file diff --git a/tests/suite/certs-coverage/id:000006,orig:cert6.der b/tests/suite/certs-coverage/id:000006,orig:cert6.der deleted file mode 100644 index 58f458981e..0000000000 Binary files a/tests/suite/certs-coverage/id:000006,orig:cert6.der and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000010,src:000000,op:havoc,rep:4,+cov b/tests/suite/certs-coverage/id:000010,src:000000,op:havoc,rep:4,+cov deleted file mode 100644 index b1f7375517..0000000000 --- a/tests/suite/certs-coverage/id:000010,src:000000,op:havoc,rep:4,+cov +++ /dev/null @@ -1 +0,0 @@ -0 \ No newline at end of file diff --git a/tests/suite/certs-coverage/id:000011,src:000001,op:flip1,pos:11,+cov b/tests/suite/certs-coverage/id:000011,src:000001,op:flip1,pos:11,+cov deleted file mode 100644 index ee5c46b2a1..0000000000 Binary files a/tests/suite/certs-coverage/id:000011,src:000001,op:flip1,pos:11,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000058,src:000000+000014,op:splice,rep:2,+cov b/tests/suite/certs-coverage/id:000058,src:000000+000014,op:splice,rep:2,+cov deleted file mode 100644 index 7adfcd1286..0000000000 Binary files a/tests/suite/certs-coverage/id:000058,src:000000+000014,op:splice,rep:2,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000071,src:000000+000035,op:splice,rep:4 b/tests/suite/certs-coverage/id:000071,src:000000+000035,op:splice,rep:4 deleted file mode 100644 index eb95c0beed..0000000000 Binary files a/tests/suite/certs-coverage/id:000071,src:000000+000035,op:splice,rep:4 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000072,src:000001,op:arith8,pos:28,val:-6 b/tests/suite/certs-coverage/id:000072,src:000001,op:arith8,pos:28,val:-6 deleted file mode 100644 index 4606ba0d23..0000000000 Binary files a/tests/suite/certs-coverage/id:000072,src:000001,op:arith8,pos:28,val:-6 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000078,src:000001,op:arith8,pos:57,val:-33,+cov b/tests/suite/certs-coverage/id:000078,src:000001,op:arith8,pos:57,val:-33,+cov deleted file mode 100644 index e3d43bf02e..0000000000 Binary files a/tests/suite/certs-coverage/id:000078,src:000001,op:arith8,pos:57,val:-33,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000095,src:000000+000001,op:splice,rep:4,+cov b/tests/suite/certs-coverage/id:000095,src:000000+000001,op:splice,rep:4,+cov deleted file mode 100644 index e123947917..0000000000 Binary files a/tests/suite/certs-coverage/id:000095,src:000000+000001,op:splice,rep:4,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000110,src:000001,op:havoc,rep:2,+cov b/tests/suite/certs-coverage/id:000110,src:000001,op:havoc,rep:2,+cov deleted file mode 100644 index 0943d2b4ab..0000000000 Binary files a/tests/suite/certs-coverage/id:000110,src:000001,op:havoc,rep:2,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000124,src:000000+000001,op:splice,rep:2 b/tests/suite/certs-coverage/id:000124,src:000000+000001,op:splice,rep:2 deleted file mode 100644 index ae90d36ae4..0000000000 Binary files a/tests/suite/certs-coverage/id:000124,src:000000+000001,op:splice,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000126,src:000002,op:flip1,pos:152 b/tests/suite/certs-coverage/id:000126,src:000002,op:flip1,pos:152 deleted file mode 100644 index 8db61f8dfe..0000000000 Binary files a/tests/suite/certs-coverage/id:000126,src:000002,op:flip1,pos:152 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000137,src:000002,op:flip1,pos:473,+cov b/tests/suite/certs-coverage/id:000137,src:000002,op:flip1,pos:473,+cov deleted file mode 100644 index 388f532b4b..0000000000 Binary files a/tests/suite/certs-coverage/id:000137,src:000002,op:flip1,pos:473,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000152,src:000002,op:flip2,pos:470 b/tests/suite/certs-coverage/id:000152,src:000002,op:flip2,pos:470 deleted file mode 100644 index 0d25074cad..0000000000 Binary files a/tests/suite/certs-coverage/id:000152,src:000002,op:flip2,pos:470 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000175,sync:fuzzer02,src:000027 b/tests/suite/certs-coverage/id:000175,sync:fuzzer02,src:000027 deleted file mode 100644 index 7d023c6f3e..0000000000 Binary files a/tests/suite/certs-coverage/id:000175,sync:fuzzer02,src:000027 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000187,src:000002,op:havoc,rep:2 b/tests/suite/certs-coverage/id:000187,src:000002,op:havoc,rep:2 deleted file mode 100644 index 61789f4b52..0000000000 Binary files a/tests/suite/certs-coverage/id:000187,src:000002,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000188,sync:fuzzer03,src:000186 b/tests/suite/certs-coverage/id:000188,sync:fuzzer03,src:000186 deleted file mode 100644 index e6ab7dd5c9..0000000000 Binary files a/tests/suite/certs-coverage/id:000188,sync:fuzzer03,src:000186 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000196,sync:fuzzer02,src:000087 b/tests/suite/certs-coverage/id:000196,sync:fuzzer02,src:000087 deleted file mode 100644 index f1893632be..0000000000 Binary files a/tests/suite/certs-coverage/id:000196,sync:fuzzer02,src:000087 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000197,sync:fuzzer03,src:000072,+cov b/tests/suite/certs-coverage/id:000197,sync:fuzzer03,src:000072,+cov deleted file mode 100644 index 0a87deb9fd..0000000000 Binary files a/tests/suite/certs-coverage/id:000197,sync:fuzzer03,src:000072,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000199,sync:fuzzer02,src:000011 b/tests/suite/certs-coverage/id:000199,sync:fuzzer02,src:000011 deleted file mode 100644 index c8cb5867dc..0000000000 Binary files a/tests/suite/certs-coverage/id:000199,sync:fuzzer02,src:000011 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000200,src:000002,op:havoc,rep:8 b/tests/suite/certs-coverage/id:000200,src:000002,op:havoc,rep:8 deleted file mode 100644 index b0c5137de5..0000000000 Binary files a/tests/suite/certs-coverage/id:000200,src:000002,op:havoc,rep:8 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000201,src:000002,op:havoc,rep:2 b/tests/suite/certs-coverage/id:000201,src:000002,op:havoc,rep:2 deleted file mode 100644 index b59cd9e708..0000000000 Binary files a/tests/suite/certs-coverage/id:000201,src:000002,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000204,sync:fuzzer01,src:000037,+cov b/tests/suite/certs-coverage/id:000204,sync:fuzzer01,src:000037,+cov deleted file mode 100644 index c414dec0cc..0000000000 Binary files a/tests/suite/certs-coverage/id:000204,sync:fuzzer01,src:000037,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000208,sync:fuzzer03,src:000190 b/tests/suite/certs-coverage/id:000208,sync:fuzzer03,src:000190 deleted file mode 100644 index 2c38a210fa..0000000000 Binary files a/tests/suite/certs-coverage/id:000208,sync:fuzzer03,src:000190 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000209,src:000003,op:flip1,pos:156 b/tests/suite/certs-coverage/id:000209,src:000003,op:flip1,pos:156 deleted file mode 100644 index 4504e866ab..0000000000 Binary files a/tests/suite/certs-coverage/id:000209,src:000003,op:flip1,pos:156 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000209,sync:fuzzer03,src:000185 b/tests/suite/certs-coverage/id:000209,sync:fuzzer03,src:000185 deleted file mode 100644 index 00f6dab2a7..0000000000 Binary files a/tests/suite/certs-coverage/id:000209,sync:fuzzer03,src:000185 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000210,sync:fuzzer03,src:000062 b/tests/suite/certs-coverage/id:000210,sync:fuzzer03,src:000062 deleted file mode 100644 index e0965616b9..0000000000 Binary files a/tests/suite/certs-coverage/id:000210,sync:fuzzer03,src:000062 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000213,sync:fuzzer03,src:000198 b/tests/suite/certs-coverage/id:000213,sync:fuzzer03,src:000198 deleted file mode 100644 index cf6cfcadf5..0000000000 Binary files a/tests/suite/certs-coverage/id:000213,sync:fuzzer03,src:000198 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000214,sync:fuzzer01,src:000025 b/tests/suite/certs-coverage/id:000214,sync:fuzzer01,src:000025 deleted file mode 100644 index 4591f5d00f..0000000000 Binary files a/tests/suite/certs-coverage/id:000214,sync:fuzzer01,src:000025 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000215,sync:fuzzer01,src:000087 b/tests/suite/certs-coverage/id:000215,sync:fuzzer01,src:000087 deleted file mode 100644 index d5b5dc0172..0000000000 Binary files a/tests/suite/certs-coverage/id:000215,sync:fuzzer01,src:000087 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000216,sync:fuzzer01,src:000069 b/tests/suite/certs-coverage/id:000216,sync:fuzzer01,src:000069 deleted file mode 100644 index ce00a4fb8a..0000000000 Binary files a/tests/suite/certs-coverage/id:000216,sync:fuzzer01,src:000069 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000217,src:000003,op:flip4,pos:140,+cov b/tests/suite/certs-coverage/id:000217,src:000003,op:flip4,pos:140,+cov deleted file mode 100644 index 9918f4fa97..0000000000 Binary files a/tests/suite/certs-coverage/id:000217,src:000003,op:flip4,pos:140,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000217,sync:fuzzer03,src:000094,+cov b/tests/suite/certs-coverage/id:000217,sync:fuzzer03,src:000094,+cov deleted file mode 100644 index ddb42e6e18..0000000000 Binary files a/tests/suite/certs-coverage/id:000217,sync:fuzzer03,src:000094,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000219,sync:fuzzer03,src:000216,+cov b/tests/suite/certs-coverage/id:000219,sync:fuzzer03,src:000216,+cov deleted file mode 100644 index 876f120b94..0000000000 Binary files a/tests/suite/certs-coverage/id:000219,sync:fuzzer03,src:000216,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000221,sync:fuzzer03,src:000219,+cov b/tests/suite/certs-coverage/id:000221,sync:fuzzer03,src:000219,+cov deleted file mode 100644 index 40ff7dcb1e..0000000000 Binary files a/tests/suite/certs-coverage/id:000221,sync:fuzzer03,src:000219,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000222,sync:fuzzer03,src:000201,+cov b/tests/suite/certs-coverage/id:000222,sync:fuzzer03,src:000201,+cov deleted file mode 100644 index 56f9289c6e..0000000000 Binary files a/tests/suite/certs-coverage/id:000222,sync:fuzzer03,src:000201,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000223,sync:fuzzer03,src:000041 b/tests/suite/certs-coverage/id:000223,sync:fuzzer03,src:000041 deleted file mode 100644 index 2cfa8efb71..0000000000 Binary files a/tests/suite/certs-coverage/id:000223,sync:fuzzer03,src:000041 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000228,sync:fuzzer03,src:000173 b/tests/suite/certs-coverage/id:000228,sync:fuzzer03,src:000173 deleted file mode 100644 index 7cccd15f73..0000000000 Binary files a/tests/suite/certs-coverage/id:000228,sync:fuzzer03,src:000173 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000229,sync:fuzzer03,src:000147 b/tests/suite/certs-coverage/id:000229,sync:fuzzer03,src:000147 deleted file mode 100644 index fae924d26e..0000000000 Binary files a/tests/suite/certs-coverage/id:000229,sync:fuzzer03,src:000147 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000229,sync:fuzzer03,src:000178,+cov b/tests/suite/certs-coverage/id:000229,sync:fuzzer03,src:000178,+cov deleted file mode 100644 index f2d9bf2255..0000000000 Binary files a/tests/suite/certs-coverage/id:000229,sync:fuzzer03,src:000178,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000241,sync:fuzzer03,src:000200,+cov b/tests/suite/certs-coverage/id:000241,sync:fuzzer03,src:000200,+cov deleted file mode 100644 index 7e34dbb87d..0000000000 Binary files a/tests/suite/certs-coverage/id:000241,sync:fuzzer03,src:000200,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000267,sync:fuzzer03,src:000166 b/tests/suite/certs-coverage/id:000267,sync:fuzzer03,src:000166 deleted file mode 100644 index 2ff90d05eb..0000000000 Binary files a/tests/suite/certs-coverage/id:000267,sync:fuzzer03,src:000166 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000273,sync:fuzzer03,src:000188 b/tests/suite/certs-coverage/id:000273,sync:fuzzer03,src:000188 deleted file mode 100644 index e624db3e84..0000000000 Binary files a/tests/suite/certs-coverage/id:000273,sync:fuzzer03,src:000188 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000277,sync:fuzzer03,src:000197,+cov b/tests/suite/certs-coverage/id:000277,sync:fuzzer03,src:000197,+cov deleted file mode 100644 index cb9d7d3f11..0000000000 Binary files a/tests/suite/certs-coverage/id:000277,sync:fuzzer03,src:000197,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000301,src:000004,op:havoc,rep:8 b/tests/suite/certs-coverage/id:000301,src:000004,op:havoc,rep:8 deleted file mode 100644 index 134fd265c2..0000000000 Binary files a/tests/suite/certs-coverage/id:000301,src:000004,op:havoc,rep:8 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000301,sync:fuzzer07,src:000292 b/tests/suite/certs-coverage/id:000301,sync:fuzzer07,src:000292 deleted file mode 100644 index 22d23f8c47..0000000000 Binary files a/tests/suite/certs-coverage/id:000301,sync:fuzzer07,src:000292 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000303,src:000005,op:flip1,pos:241,+cov b/tests/suite/certs-coverage/id:000303,src:000005,op:flip1,pos:241,+cov deleted file mode 100644 index 8ffbf74834..0000000000 Binary files a/tests/suite/certs-coverage/id:000303,src:000005,op:flip1,pos:241,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000312,src:000008,op:havoc,rep:2 b/tests/suite/certs-coverage/id:000312,src:000008,op:havoc,rep:2 deleted file mode 100644 index e6409f5627..0000000000 Binary files a/tests/suite/certs-coverage/id:000312,src:000008,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000313,src:000005,op:arith8,pos:265,val:-7,+cov b/tests/suite/certs-coverage/id:000313,src:000005,op:arith8,pos:265,val:-7,+cov deleted file mode 100644 index e75a9897b1..0000000000 Binary files a/tests/suite/certs-coverage/id:000313,src:000005,op:arith8,pos:265,val:-7,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000320,sync:fuzzer03,src:000112 b/tests/suite/certs-coverage/id:000320,sync:fuzzer03,src:000112 deleted file mode 100644 index 12e84efb19..0000000000 Binary files a/tests/suite/certs-coverage/id:000320,sync:fuzzer03,src:000112 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000325,src:000008,op:havoc,rep:4 b/tests/suite/certs-coverage/id:000325,src:000008,op:havoc,rep:4 deleted file mode 100644 index a14e73c80c..0000000000 Binary files a/tests/suite/certs-coverage/id:000325,src:000008,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000327,sync:fuzzer08,src:000300 b/tests/suite/certs-coverage/id:000327,sync:fuzzer08,src:000300 deleted file mode 100644 index 30165fd04a..0000000000 Binary files a/tests/suite/certs-coverage/id:000327,sync:fuzzer08,src:000300 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000328,sync:fuzzer08,src:000296 b/tests/suite/certs-coverage/id:000328,sync:fuzzer08,src:000296 deleted file mode 100644 index 8db3db0ade..0000000000 Binary files a/tests/suite/certs-coverage/id:000328,sync:fuzzer08,src:000296 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000330,src:000008,op:havoc,rep:2 b/tests/suite/certs-coverage/id:000330,src:000008,op:havoc,rep:2 deleted file mode 100644 index a2910505b0..0000000000 Binary files a/tests/suite/certs-coverage/id:000330,src:000008,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000336,sync:fuzzer03,src:000222 b/tests/suite/certs-coverage/id:000336,sync:fuzzer03,src:000222 deleted file mode 100644 index 714cf10c0a..0000000000 Binary files a/tests/suite/certs-coverage/id:000336,sync:fuzzer03,src:000222 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000342,sync:fuzzer03,src:000159 b/tests/suite/certs-coverage/id:000342,sync:fuzzer03,src:000159 deleted file mode 100644 index 23d341abfc..0000000000 Binary files a/tests/suite/certs-coverage/id:000342,sync:fuzzer03,src:000159 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000348,sync:fuzzer03,src:000256,+cov b/tests/suite/certs-coverage/id:000348,sync:fuzzer03,src:000256,+cov deleted file mode 100644 index 2b40cccc89..0000000000 Binary files a/tests/suite/certs-coverage/id:000348,sync:fuzzer03,src:000256,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000349,sync:fuzzer04,src:000327 b/tests/suite/certs-coverage/id:000349,sync:fuzzer04,src:000327 deleted file mode 100644 index f16de15473..0000000000 Binary files a/tests/suite/certs-coverage/id:000349,sync:fuzzer04,src:000327 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000350,sync:fuzzer03,src:000338 b/tests/suite/certs-coverage/id:000350,sync:fuzzer03,src:000338 deleted file mode 100644 index 7dcaecb6cb..0000000000 Binary files a/tests/suite/certs-coverage/id:000350,sync:fuzzer03,src:000338 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000354,sync:fuzzer03,src:000234 b/tests/suite/certs-coverage/id:000354,sync:fuzzer03,src:000234 deleted file mode 100644 index 00c59abcd3..0000000000 Binary files a/tests/suite/certs-coverage/id:000354,sync:fuzzer03,src:000234 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000358,sync:fuzzer03,src:000120,+cov b/tests/suite/certs-coverage/id:000358,sync:fuzzer03,src:000120,+cov deleted file mode 100644 index 767e480638..0000000000 Binary files a/tests/suite/certs-coverage/id:000358,sync:fuzzer03,src:000120,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000360,sync:fuzzer05,src:000306,+cov b/tests/suite/certs-coverage/id:000360,sync:fuzzer05,src:000306,+cov deleted file mode 100644 index 0dde1ab7ca..0000000000 Binary files a/tests/suite/certs-coverage/id:000360,sync:fuzzer05,src:000306,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000365,sync:fuzzer03,src:000269 b/tests/suite/certs-coverage/id:000365,sync:fuzzer03,src:000269 deleted file mode 100644 index 8369fd9f6e..0000000000 Binary files a/tests/suite/certs-coverage/id:000365,sync:fuzzer03,src:000269 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000365,sync:fuzzer03,src:000307 b/tests/suite/certs-coverage/id:000365,sync:fuzzer03,src:000307 deleted file mode 100644 index 682601be70..0000000000 Binary files a/tests/suite/certs-coverage/id:000365,sync:fuzzer03,src:000307 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000368,sync:fuzzer03,src:000268,+cov b/tests/suite/certs-coverage/id:000368,sync:fuzzer03,src:000268,+cov deleted file mode 100644 index a1fddb59fe..0000000000 Binary files a/tests/suite/certs-coverage/id:000368,sync:fuzzer03,src:000268,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000373,sync:fuzzer03,src:000300,+cov b/tests/suite/certs-coverage/id:000373,sync:fuzzer03,src:000300,+cov deleted file mode 100644 index 83760d8425..0000000000 Binary files a/tests/suite/certs-coverage/id:000373,sync:fuzzer03,src:000300,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000374,sync:fuzzer03,src:000311 b/tests/suite/certs-coverage/id:000374,sync:fuzzer03,src:000311 deleted file mode 100644 index 6a3a4cbde0..0000000000 Binary files a/tests/suite/certs-coverage/id:000374,sync:fuzzer03,src:000311 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000383,sync:fuzzer03,src:000236,+cov b/tests/suite/certs-coverage/id:000383,sync:fuzzer03,src:000236,+cov deleted file mode 100644 index 68a1dbb04c..0000000000 Binary files a/tests/suite/certs-coverage/id:000383,sync:fuzzer03,src:000236,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000385,sync:fuzzer03,src:000272 b/tests/suite/certs-coverage/id:000385,sync:fuzzer03,src:000272 deleted file mode 100644 index 6709f5acc1..0000000000 Binary files a/tests/suite/certs-coverage/id:000385,sync:fuzzer03,src:000272 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000386,sync:fuzzer03,src:000281,+cov b/tests/suite/certs-coverage/id:000386,sync:fuzzer03,src:000281,+cov deleted file mode 100644 index 977f81d594..0000000000 Binary files a/tests/suite/certs-coverage/id:000386,sync:fuzzer03,src:000281,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000388,sync:fuzzer03,src:000344,+cov b/tests/suite/certs-coverage/id:000388,sync:fuzzer03,src:000344,+cov deleted file mode 100644 index 25c9a580a1..0000000000 Binary files a/tests/suite/certs-coverage/id:000388,sync:fuzzer03,src:000344,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000389,sync:fuzzer03,src:000322 b/tests/suite/certs-coverage/id:000389,sync:fuzzer03,src:000322 deleted file mode 100644 index ded8b32279..0000000000 Binary files a/tests/suite/certs-coverage/id:000389,sync:fuzzer03,src:000322 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000391,sync:fuzzer03,src:000239 b/tests/suite/certs-coverage/id:000391,sync:fuzzer03,src:000239 deleted file mode 100644 index 0d1b65badd..0000000000 Binary files a/tests/suite/certs-coverage/id:000391,sync:fuzzer03,src:000239 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000392,sync:fuzzer08,src:000384 b/tests/suite/certs-coverage/id:000392,sync:fuzzer08,src:000384 deleted file mode 100644 index b3c01e88ff..0000000000 Binary files a/tests/suite/certs-coverage/id:000392,sync:fuzzer08,src:000384 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000393,sync:fuzzer03,src:000331 b/tests/suite/certs-coverage/id:000393,sync:fuzzer03,src:000331 deleted file mode 100644 index 481b4cf4ed..0000000000 Binary files a/tests/suite/certs-coverage/id:000393,sync:fuzzer03,src:000331 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000393,sync:fuzzer07,src:000282 b/tests/suite/certs-coverage/id:000393,sync:fuzzer07,src:000282 deleted file mode 100644 index f0e5dfdb5d..0000000000 Binary files a/tests/suite/certs-coverage/id:000393,sync:fuzzer07,src:000282 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000394,sync:fuzzer07,src:000385,+cov b/tests/suite/certs-coverage/id:000394,sync:fuzzer07,src:000385,+cov deleted file mode 100644 index 95d9192846..0000000000 Binary files a/tests/suite/certs-coverage/id:000394,sync:fuzzer07,src:000385,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000397,sync:fuzzer03,src:000226 b/tests/suite/certs-coverage/id:000397,sync:fuzzer03,src:000226 deleted file mode 100644 index 151f350d09..0000000000 Binary files a/tests/suite/certs-coverage/id:000397,sync:fuzzer03,src:000226 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000397,sync:fuzzer07,src:000373 b/tests/suite/certs-coverage/id:000397,sync:fuzzer07,src:000373 deleted file mode 100644 index 4289f23120..0000000000 Binary files a/tests/suite/certs-coverage/id:000397,sync:fuzzer07,src:000373 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000399,sync:fuzzer03,src:000327,+cov b/tests/suite/certs-coverage/id:000399,sync:fuzzer03,src:000327,+cov deleted file mode 100644 index dad6b4ad7f..0000000000 Binary files a/tests/suite/certs-coverage/id:000399,sync:fuzzer03,src:000327,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000402,sync:fuzzer07,src:000361,+cov b/tests/suite/certs-coverage/id:000402,sync:fuzzer07,src:000361,+cov deleted file mode 100644 index eb0478693d..0000000000 Binary files a/tests/suite/certs-coverage/id:000402,sync:fuzzer07,src:000361,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000403,sync:fuzzer07,src:000393,+cov b/tests/suite/certs-coverage/id:000403,sync:fuzzer07,src:000393,+cov deleted file mode 100644 index f4d48f987e..0000000000 Binary files a/tests/suite/certs-coverage/id:000403,sync:fuzzer07,src:000393,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000406,sync:fuzzer07,src:000370 b/tests/suite/certs-coverage/id:000406,sync:fuzzer07,src:000370 deleted file mode 100644 index ece5a59d2d..0000000000 Binary files a/tests/suite/certs-coverage/id:000406,sync:fuzzer07,src:000370 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000407,sync:fuzzer03,src:000230 b/tests/suite/certs-coverage/id:000407,sync:fuzzer03,src:000230 deleted file mode 100644 index ba8c19bd03..0000000000 Binary files a/tests/suite/certs-coverage/id:000407,sync:fuzzer03,src:000230 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000407,sync:fuzzer07,src:000403,+cov b/tests/suite/certs-coverage/id:000407,sync:fuzzer07,src:000403,+cov deleted file mode 100644 index ddfb1a3221..0000000000 Binary files a/tests/suite/certs-coverage/id:000407,sync:fuzzer07,src:000403,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000409,sync:fuzzer07,src:000367,+cov b/tests/suite/certs-coverage/id:000409,sync:fuzzer07,src:000367,+cov deleted file mode 100644 index c133f29cea..0000000000 Binary files a/tests/suite/certs-coverage/id:000409,sync:fuzzer07,src:000367,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000412,sync:fuzzer07,src:000307,+cov b/tests/suite/certs-coverage/id:000412,sync:fuzzer07,src:000307,+cov deleted file mode 100644 index 1d6b5c895e..0000000000 Binary files a/tests/suite/certs-coverage/id:000412,sync:fuzzer07,src:000307,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000414,sync:fuzzer03,src:000107,+cov b/tests/suite/certs-coverage/id:000414,sync:fuzzer03,src:000107,+cov deleted file mode 100644 index 1c06619d8b..0000000000 Binary files a/tests/suite/certs-coverage/id:000414,sync:fuzzer03,src:000107,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000414,sync:fuzzer07,src:000355 b/tests/suite/certs-coverage/id:000414,sync:fuzzer07,src:000355 deleted file mode 100644 index c7ec25f3ee..0000000000 Binary files a/tests/suite/certs-coverage/id:000414,sync:fuzzer07,src:000355 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000423,sync:fuzzer03,src:000339,+cov b/tests/suite/certs-coverage/id:000423,sync:fuzzer03,src:000339,+cov deleted file mode 100644 index 08ea765e86..0000000000 Binary files a/tests/suite/certs-coverage/id:000423,sync:fuzzer03,src:000339,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000424,sync:fuzzer07,src:000294 b/tests/suite/certs-coverage/id:000424,sync:fuzzer07,src:000294 deleted file mode 100644 index beca0623f2..0000000000 Binary files a/tests/suite/certs-coverage/id:000424,sync:fuzzer07,src:000294 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000426,sync:fuzzer07,src:000408,+cov b/tests/suite/certs-coverage/id:000426,sync:fuzzer07,src:000408,+cov deleted file mode 100644 index 461755f060..0000000000 Binary files a/tests/suite/certs-coverage/id:000426,sync:fuzzer07,src:000408,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000431,sync:fuzzer03,src:000354 b/tests/suite/certs-coverage/id:000431,sync:fuzzer03,src:000354 deleted file mode 100644 index 47f5d78cdb..0000000000 Binary files a/tests/suite/certs-coverage/id:000431,sync:fuzzer03,src:000354 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000432,sync:fuzzer08,src:000405,+cov b/tests/suite/certs-coverage/id:000432,sync:fuzzer08,src:000405,+cov deleted file mode 100644 index 0db418b4ad..0000000000 Binary files a/tests/suite/certs-coverage/id:000432,sync:fuzzer08,src:000405,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000437,sync:fuzzer05,src:000434 b/tests/suite/certs-coverage/id:000437,sync:fuzzer05,src:000434 deleted file mode 100644 index 9918fad07b..0000000000 Binary files a/tests/suite/certs-coverage/id:000437,sync:fuzzer05,src:000434 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000440,sync:fuzzer03,src:000399,+cov b/tests/suite/certs-coverage/id:000440,sync:fuzzer03,src:000399,+cov deleted file mode 100644 index cef4a6ce8e..0000000000 Binary files a/tests/suite/certs-coverage/id:000440,sync:fuzzer03,src:000399,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000442,sync:fuzzer05,src:000424 b/tests/suite/certs-coverage/id:000442,sync:fuzzer05,src:000424 deleted file mode 100644 index dedf54afdf..0000000000 Binary files a/tests/suite/certs-coverage/id:000442,sync:fuzzer05,src:000424 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000442,sync:fuzzer07,src:000374,+cov b/tests/suite/certs-coverage/id:000442,sync:fuzzer07,src:000374,+cov deleted file mode 100644 index 25da2fa6e3..0000000000 Binary files a/tests/suite/certs-coverage/id:000442,sync:fuzzer07,src:000374,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000443,sync:fuzzer03,src:000439 b/tests/suite/certs-coverage/id:000443,sync:fuzzer03,src:000439 deleted file mode 100644 index 78d2aecee6..0000000000 Binary files a/tests/suite/certs-coverage/id:000443,sync:fuzzer03,src:000439 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000444,src:000033,op:havoc,rep:4 b/tests/suite/certs-coverage/id:000444,src:000033,op:havoc,rep:4 deleted file mode 100644 index 40a6bb4b52..0000000000 Binary files a/tests/suite/certs-coverage/id:000444,src:000033,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000444,sync:fuzzer07,src:000383,+cov b/tests/suite/certs-coverage/id:000444,sync:fuzzer07,src:000383,+cov deleted file mode 100644 index 886b55eeb7..0000000000 Binary files a/tests/suite/certs-coverage/id:000444,sync:fuzzer07,src:000383,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000445,sync:fuzzer07,src:000431,+cov b/tests/suite/certs-coverage/id:000445,sync:fuzzer07,src:000431,+cov deleted file mode 100644 index 7f974e5fd1..0000000000 Binary files a/tests/suite/certs-coverage/id:000445,sync:fuzzer07,src:000431,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000446,sync:fuzzer03,src:000280 b/tests/suite/certs-coverage/id:000446,sync:fuzzer03,src:000280 deleted file mode 100644 index 4226fcbad0..0000000000 Binary files a/tests/suite/certs-coverage/id:000446,sync:fuzzer03,src:000280 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000449,sync:fuzzer05,src:000326,+cov b/tests/suite/certs-coverage/id:000449,sync:fuzzer05,src:000326,+cov deleted file mode 100644 index b886411f55..0000000000 Binary files a/tests/suite/certs-coverage/id:000449,sync:fuzzer05,src:000326,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000451,sync:fuzzer07,src:000404 b/tests/suite/certs-coverage/id:000451,sync:fuzzer07,src:000404 deleted file mode 100644 index 6b2c4a002f..0000000000 Binary files a/tests/suite/certs-coverage/id:000451,sync:fuzzer07,src:000404 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000452,sync:fuzzer07,src:000364 b/tests/suite/certs-coverage/id:000452,sync:fuzzer07,src:000364 deleted file mode 100644 index 10db063b20..0000000000 Binary files a/tests/suite/certs-coverage/id:000452,sync:fuzzer07,src:000364 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000454,sync:fuzzer07,src:000284,+cov b/tests/suite/certs-coverage/id:000454,sync:fuzzer07,src:000284,+cov deleted file mode 100644 index a9905d30f1..0000000000 Binary files a/tests/suite/certs-coverage/id:000454,sync:fuzzer07,src:000284,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000455,sync:fuzzer03,src:000321 b/tests/suite/certs-coverage/id:000455,sync:fuzzer03,src:000321 deleted file mode 100644 index fe8f8dc24c..0000000000 Binary files a/tests/suite/certs-coverage/id:000455,sync:fuzzer03,src:000321 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000455,sync:fuzzer07,src:000395,+cov b/tests/suite/certs-coverage/id:000455,sync:fuzzer07,src:000395,+cov deleted file mode 100644 index f5e26b4592..0000000000 Binary files a/tests/suite/certs-coverage/id:000455,sync:fuzzer07,src:000395,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000457,sync:fuzzer03,src:000409,+cov b/tests/suite/certs-coverage/id:000457,sync:fuzzer03,src:000409,+cov deleted file mode 100644 index a67a09395c..0000000000 Binary files a/tests/suite/certs-coverage/id:000457,sync:fuzzer03,src:000409,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000457,sync:fuzzer07,src:000286 b/tests/suite/certs-coverage/id:000457,sync:fuzzer07,src:000286 deleted file mode 100644 index 2b17f41985..0000000000 Binary files a/tests/suite/certs-coverage/id:000457,sync:fuzzer07,src:000286 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000458,sync:fuzzer03,src:000385,+cov b/tests/suite/certs-coverage/id:000458,sync:fuzzer03,src:000385,+cov deleted file mode 100644 index f9b23bdbe9..0000000000 Binary files a/tests/suite/certs-coverage/id:000458,sync:fuzzer03,src:000385,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000458,sync:fuzzer03,src:000448,+cov b/tests/suite/certs-coverage/id:000458,sync:fuzzer03,src:000448,+cov deleted file mode 100644 index f2cff993d5..0000000000 Binary files a/tests/suite/certs-coverage/id:000458,sync:fuzzer03,src:000448,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000458,sync:fuzzer08,src:000439 b/tests/suite/certs-coverage/id:000458,sync:fuzzer08,src:000439 deleted file mode 100644 index ff9673dc73..0000000000 Binary files a/tests/suite/certs-coverage/id:000458,sync:fuzzer08,src:000439 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000460,sync:fuzzer07,src:000435,+cov b/tests/suite/certs-coverage/id:000460,sync:fuzzer07,src:000435,+cov deleted file mode 100644 index 82c6fb6179..0000000000 Binary files a/tests/suite/certs-coverage/id:000460,sync:fuzzer07,src:000435,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000462,sync:fuzzer07,src:000121 b/tests/suite/certs-coverage/id:000462,sync:fuzzer07,src:000121 deleted file mode 100644 index 2bfccda598..0000000000 Binary files a/tests/suite/certs-coverage/id:000462,sync:fuzzer07,src:000121 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000464,sync:fuzzer07,src:000461 b/tests/suite/certs-coverage/id:000464,sync:fuzzer07,src:000461 deleted file mode 100644 index ea57131707..0000000000 Binary files a/tests/suite/certs-coverage/id:000464,sync:fuzzer07,src:000461 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000465,sync:fuzzer03,src:000172 b/tests/suite/certs-coverage/id:000465,sync:fuzzer03,src:000172 deleted file mode 100644 index f230a706f6..0000000000 Binary files a/tests/suite/certs-coverage/id:000465,sync:fuzzer03,src:000172 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000465,sync:fuzzer03,src:000398 b/tests/suite/certs-coverage/id:000465,sync:fuzzer03,src:000398 deleted file mode 100644 index 80bfd9214f..0000000000 Binary files a/tests/suite/certs-coverage/id:000465,sync:fuzzer03,src:000398 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000466,sync:fuzzer07,src:000464 b/tests/suite/certs-coverage/id:000466,sync:fuzzer07,src:000464 deleted file mode 100644 index 4d2da31aee..0000000000 Binary files a/tests/suite/certs-coverage/id:000466,sync:fuzzer07,src:000464 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000468,src:000021,op:havoc,rep:2,+cov b/tests/suite/certs-coverage/id:000468,src:000021,op:havoc,rep:2,+cov deleted file mode 100644 index f28d1b4fca..0000000000 Binary files a/tests/suite/certs-coverage/id:000468,src:000021,op:havoc,rep:2,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000468,sync:fuzzer07,src:000357,+cov b/tests/suite/certs-coverage/id:000468,sync:fuzzer07,src:000357,+cov deleted file mode 100644 index c7bfb516cd..0000000000 Binary files a/tests/suite/certs-coverage/id:000468,sync:fuzzer07,src:000357,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000469,sync:fuzzer01,src:000222 b/tests/suite/certs-coverage/id:000469,sync:fuzzer01,src:000222 deleted file mode 100644 index 0b53ae76cb..0000000000 Binary files a/tests/suite/certs-coverage/id:000469,sync:fuzzer01,src:000222 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000469,sync:fuzzer03,src:000421,+cov b/tests/suite/certs-coverage/id:000469,sync:fuzzer03,src:000421,+cov deleted file mode 100644 index 2c471ee26b..0000000000 Binary files a/tests/suite/certs-coverage/id:000469,sync:fuzzer03,src:000421,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000469,sync:fuzzer07,src:000418 b/tests/suite/certs-coverage/id:000469,sync:fuzzer07,src:000418 deleted file mode 100644 index b88b55de59..0000000000 Binary files a/tests/suite/certs-coverage/id:000469,sync:fuzzer07,src:000418 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000470,sync:fuzzer03,src:000348 b/tests/suite/certs-coverage/id:000470,sync:fuzzer03,src:000348 deleted file mode 100644 index e28aeca52b..0000000000 Binary files a/tests/suite/certs-coverage/id:000470,sync:fuzzer03,src:000348 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000470,sync:fuzzer07,src:000465 b/tests/suite/certs-coverage/id:000470,sync:fuzzer07,src:000465 deleted file mode 100644 index 67f8041680..0000000000 Binary files a/tests/suite/certs-coverage/id:000470,sync:fuzzer07,src:000465 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000471,sync:fuzzer07,src:000424 b/tests/suite/certs-coverage/id:000471,sync:fuzzer07,src:000424 deleted file mode 100644 index c6104862ea..0000000000 Binary files a/tests/suite/certs-coverage/id:000471,sync:fuzzer07,src:000424 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000472,sync:fuzzer04,src:000452 b/tests/suite/certs-coverage/id:000472,sync:fuzzer04,src:000452 deleted file mode 100644 index b00a6c6af2..0000000000 Binary files a/tests/suite/certs-coverage/id:000472,sync:fuzzer04,src:000452 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000473,src:000049,op:havoc,rep:8 b/tests/suite/certs-coverage/id:000473,src:000049,op:havoc,rep:8 deleted file mode 100644 index f8aa95c58a..0000000000 Binary files a/tests/suite/certs-coverage/id:000473,src:000049,op:havoc,rep:8 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000473,sync:fuzzer03,src:000319 b/tests/suite/certs-coverage/id:000473,sync:fuzzer03,src:000319 deleted file mode 100644 index 275c0a8007..0000000000 Binary files a/tests/suite/certs-coverage/id:000473,sync:fuzzer03,src:000319 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000473,sync:fuzzer07,src:000468 b/tests/suite/certs-coverage/id:000473,sync:fuzzer07,src:000468 deleted file mode 100644 index 9b93c1975f..0000000000 Binary files a/tests/suite/certs-coverage/id:000473,sync:fuzzer07,src:000468 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000474,sync:fuzzer07,src:000416 b/tests/suite/certs-coverage/id:000474,sync:fuzzer07,src:000416 deleted file mode 100644 index 604de9d790..0000000000 Binary files a/tests/suite/certs-coverage/id:000474,sync:fuzzer07,src:000416 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000476,src:000059,op:havoc,rep:4 b/tests/suite/certs-coverage/id:000476,src:000059,op:havoc,rep:4 deleted file mode 100644 index a39de98b4f..0000000000 Binary files a/tests/suite/certs-coverage/id:000476,src:000059,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000477,sync:fuzzer03,src:000431,+cov b/tests/suite/certs-coverage/id:000477,sync:fuzzer03,src:000431,+cov deleted file mode 100644 index 8a873b2c34..0000000000 Binary files a/tests/suite/certs-coverage/id:000477,sync:fuzzer03,src:000431,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000480,sync:fuzzer03,src:000301 b/tests/suite/certs-coverage/id:000480,sync:fuzzer03,src:000301 deleted file mode 100644 index 5058e212ba..0000000000 Binary files a/tests/suite/certs-coverage/id:000480,sync:fuzzer03,src:000301 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000482,sync:fuzzer03,src:000473 b/tests/suite/certs-coverage/id:000482,sync:fuzzer03,src:000473 deleted file mode 100644 index 5160dc3a13..0000000000 Binary files a/tests/suite/certs-coverage/id:000482,sync:fuzzer03,src:000473 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000486,sync:fuzzer03,src:000366,+cov b/tests/suite/certs-coverage/id:000486,sync:fuzzer03,src:000366,+cov deleted file mode 100644 index e5e90c6eb4..0000000000 Binary files a/tests/suite/certs-coverage/id:000486,sync:fuzzer03,src:000366,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000486,sync:fuzzer03,src:000471,+cov b/tests/suite/certs-coverage/id:000486,sync:fuzzer03,src:000471,+cov deleted file mode 100644 index e9f1adf308..0000000000 Binary files a/tests/suite/certs-coverage/id:000486,sync:fuzzer03,src:000471,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000487,sync:fuzzer03,src:000476 b/tests/suite/certs-coverage/id:000487,sync:fuzzer03,src:000476 deleted file mode 100644 index 74ab8d43a3..0000000000 Binary files a/tests/suite/certs-coverage/id:000487,sync:fuzzer03,src:000476 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000488,sync:fuzzer03,src:000458 b/tests/suite/certs-coverage/id:000488,sync:fuzzer03,src:000458 deleted file mode 100644 index 5a53ba88e0..0000000000 Binary files a/tests/suite/certs-coverage/id:000488,sync:fuzzer03,src:000458 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000489,sync:fuzzer03,src:000453 b/tests/suite/certs-coverage/id:000489,sync:fuzzer03,src:000453 deleted file mode 100644 index dbcf0d293f..0000000000 Binary files a/tests/suite/certs-coverage/id:000489,sync:fuzzer03,src:000453 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000491,sync:fuzzer03,src:000406 b/tests/suite/certs-coverage/id:000491,sync:fuzzer03,src:000406 deleted file mode 100644 index 394a7bc063..0000000000 Binary files a/tests/suite/certs-coverage/id:000491,sync:fuzzer03,src:000406 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000492,sync:fuzzer03,src:000141 b/tests/suite/certs-coverage/id:000492,sync:fuzzer03,src:000141 deleted file mode 100644 index b9de6824d0..0000000000 Binary files a/tests/suite/certs-coverage/id:000492,sync:fuzzer03,src:000141 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000493,sync:fuzzer03,src:000235 b/tests/suite/certs-coverage/id:000493,sync:fuzzer03,src:000235 deleted file mode 100644 index 33ad19fc0d..0000000000 Binary files a/tests/suite/certs-coverage/id:000493,sync:fuzzer03,src:000235 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000494,sync:fuzzer03,src:000490,+cov b/tests/suite/certs-coverage/id:000494,sync:fuzzer03,src:000490,+cov deleted file mode 100644 index 96a6679cc6..0000000000 Binary files a/tests/suite/certs-coverage/id:000494,sync:fuzzer03,src:000490,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000495,sync:fuzzer03,src:000489 b/tests/suite/certs-coverage/id:000495,sync:fuzzer03,src:000489 deleted file mode 100644 index 4c32656577..0000000000 Binary files a/tests/suite/certs-coverage/id:000495,sync:fuzzer03,src:000489 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000496,sync:fuzzer03,src:000302 b/tests/suite/certs-coverage/id:000496,sync:fuzzer03,src:000302 deleted file mode 100644 index e3f2ee2ffa..0000000000 Binary files a/tests/suite/certs-coverage/id:000496,sync:fuzzer03,src:000302 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000496,sync:fuzzer03,src:000488 b/tests/suite/certs-coverage/id:000496,sync:fuzzer03,src:000488 deleted file mode 100644 index 77b32b1a08..0000000000 Binary files a/tests/suite/certs-coverage/id:000496,sync:fuzzer03,src:000488 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000497,sync:fuzzer03,src:000487,+cov b/tests/suite/certs-coverage/id:000497,sync:fuzzer03,src:000487,+cov deleted file mode 100644 index fce64afa67..0000000000 Binary files a/tests/suite/certs-coverage/id:000497,sync:fuzzer03,src:000487,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000498,sync:fuzzer03,src:000279,+cov b/tests/suite/certs-coverage/id:000498,sync:fuzzer03,src:000279,+cov deleted file mode 100644 index 93a87df657..0000000000 Binary files a/tests/suite/certs-coverage/id:000498,sync:fuzzer03,src:000279,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000498,sync:fuzzer03,src:000482 b/tests/suite/certs-coverage/id:000498,sync:fuzzer03,src:000482 deleted file mode 100644 index 24146d4df2..0000000000 Binary files a/tests/suite/certs-coverage/id:000498,sync:fuzzer03,src:000482 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000498,sync:fuzzer03,src:000491 b/tests/suite/certs-coverage/id:000498,sync:fuzzer03,src:000491 deleted file mode 100644 index b0566a6257..0000000000 Binary files a/tests/suite/certs-coverage/id:000498,sync:fuzzer03,src:000491 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000499,sync:fuzzer03,src:000474 b/tests/suite/certs-coverage/id:000499,sync:fuzzer03,src:000474 deleted file mode 100644 index dc88a75a6e..0000000000 Binary files a/tests/suite/certs-coverage/id:000499,sync:fuzzer03,src:000474 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000501,sync:fuzzer03,src:000291,+cov b/tests/suite/certs-coverage/id:000501,sync:fuzzer03,src:000291,+cov deleted file mode 100644 index d21ef553d7..0000000000 Binary files a/tests/suite/certs-coverage/id:000501,sync:fuzzer03,src:000291,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000502,sync:fuzzer03,src:000484 b/tests/suite/certs-coverage/id:000502,sync:fuzzer03,src:000484 deleted file mode 100644 index 3989db1c62..0000000000 Binary files a/tests/suite/certs-coverage/id:000502,sync:fuzzer03,src:000484 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000504,src:000100+000125,op:splice,rep:2 b/tests/suite/certs-coverage/id:000504,src:000100+000125,op:splice,rep:2 deleted file mode 100644 index 905d4bbdd6..0000000000 Binary files a/tests/suite/certs-coverage/id:000504,src:000100+000125,op:splice,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000504,sync:fuzzer03,src:000470,+cov b/tests/suite/certs-coverage/id:000504,sync:fuzzer03,src:000470,+cov deleted file mode 100644 index a69c9f01d1..0000000000 Binary files a/tests/suite/certs-coverage/id:000504,sync:fuzzer03,src:000470,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000505,sync:fuzzer03,src:000313,+cov b/tests/suite/certs-coverage/id:000505,sync:fuzzer03,src:000313,+cov deleted file mode 100644 index b2006cdcac..0000000000 Binary files a/tests/suite/certs-coverage/id:000505,sync:fuzzer03,src:000313,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000508,sync:fuzzer03,src:000384 b/tests/suite/certs-coverage/id:000508,sync:fuzzer03,src:000384 deleted file mode 100644 index 3bc90d1bd2..0000000000 Binary files a/tests/suite/certs-coverage/id:000508,sync:fuzzer03,src:000384 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000511,sync:fuzzer03,src:000347 b/tests/suite/certs-coverage/id:000511,sync:fuzzer03,src:000347 deleted file mode 100644 index 462ceeec0b..0000000000 Binary files a/tests/suite/certs-coverage/id:000511,sync:fuzzer03,src:000347 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000513,sync:fuzzer03,src:000506,+cov b/tests/suite/certs-coverage/id:000513,sync:fuzzer03,src:000506,+cov deleted file mode 100644 index b1217b0f3a..0000000000 Binary files a/tests/suite/certs-coverage/id:000513,sync:fuzzer03,src:000506,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000514,sync:fuzzer03,src:000373,+cov b/tests/suite/certs-coverage/id:000514,sync:fuzzer03,src:000373,+cov deleted file mode 100644 index b11c2d70d8..0000000000 Binary files a/tests/suite/certs-coverage/id:000514,sync:fuzzer03,src:000373,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000514,sync:fuzzer03,src:000505,+cov b/tests/suite/certs-coverage/id:000514,sync:fuzzer03,src:000505,+cov deleted file mode 100644 index dbd9e01e2e..0000000000 Binary files a/tests/suite/certs-coverage/id:000514,sync:fuzzer03,src:000505,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000515,sync:fuzzer01,src:000281,+cov b/tests/suite/certs-coverage/id:000515,sync:fuzzer01,src:000281,+cov deleted file mode 100644 index 3d08547ee3..0000000000 Binary files a/tests/suite/certs-coverage/id:000515,sync:fuzzer01,src:000281,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000515,sync:fuzzer03,src:000475 b/tests/suite/certs-coverage/id:000515,sync:fuzzer03,src:000475 deleted file mode 100644 index d48f6c5c14..0000000000 Binary files a/tests/suite/certs-coverage/id:000515,sync:fuzzer03,src:000475 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000518,sync:fuzzer03,src:000485 b/tests/suite/certs-coverage/id:000518,sync:fuzzer03,src:000485 deleted file mode 100644 index 697af2da95..0000000000 Binary files a/tests/suite/certs-coverage/id:000518,sync:fuzzer03,src:000485 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000518,sync:fuzzer03,src:000492 b/tests/suite/certs-coverage/id:000518,sync:fuzzer03,src:000492 deleted file mode 100644 index e360a6a9d4..0000000000 Binary files a/tests/suite/certs-coverage/id:000518,sync:fuzzer03,src:000492 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000519,sync:fuzzer01,src:000271,+cov b/tests/suite/certs-coverage/id:000519,sync:fuzzer01,src:000271,+cov deleted file mode 100644 index 0ef8badc74..0000000000 Binary files a/tests/suite/certs-coverage/id:000519,sync:fuzzer01,src:000271,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000521,sync:fuzzer03,src:000494,+cov b/tests/suite/certs-coverage/id:000521,sync:fuzzer03,src:000494,+cov deleted file mode 100644 index 5b17c80d1f..0000000000 Binary files a/tests/suite/certs-coverage/id:000521,sync:fuzzer03,src:000494,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000521,sync:fuzzer03,src:000496 b/tests/suite/certs-coverage/id:000521,sync:fuzzer03,src:000496 deleted file mode 100644 index 3e98580d05..0000000000 Binary files a/tests/suite/certs-coverage/id:000521,sync:fuzzer03,src:000496 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000522,sync:fuzzer03,src:000345 b/tests/suite/certs-coverage/id:000522,sync:fuzzer03,src:000345 deleted file mode 100644 index 21c41af528..0000000000 Binary files a/tests/suite/certs-coverage/id:000522,sync:fuzzer03,src:000345 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000523,sync:fuzzer03,src:000504,+cov b/tests/suite/certs-coverage/id:000523,sync:fuzzer03,src:000504,+cov deleted file mode 100644 index c9a7b97693..0000000000 Binary files a/tests/suite/certs-coverage/id:000523,sync:fuzzer03,src:000504,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000524,sync:fuzzer03,src:000516 b/tests/suite/certs-coverage/id:000524,sync:fuzzer03,src:000516 deleted file mode 100644 index 875c17f2be..0000000000 Binary files a/tests/suite/certs-coverage/id:000524,sync:fuzzer03,src:000516 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000526,sync:fuzzer03,src:000518 b/tests/suite/certs-coverage/id:000526,sync:fuzzer03,src:000518 deleted file mode 100644 index 1043971684..0000000000 Binary files a/tests/suite/certs-coverage/id:000526,sync:fuzzer03,src:000518 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000527,sync:fuzzer05,src:000524 b/tests/suite/certs-coverage/id:000527,sync:fuzzer05,src:000524 deleted file mode 100644 index 2497723299..0000000000 Binary files a/tests/suite/certs-coverage/id:000527,sync:fuzzer05,src:000524 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000527,sync:fuzzer07,src:000523 b/tests/suite/certs-coverage/id:000527,sync:fuzzer07,src:000523 deleted file mode 100644 index 09f594a59b..0000000000 Binary files a/tests/suite/certs-coverage/id:000527,sync:fuzzer07,src:000523 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000528,sync:fuzzer03,src:000443,+cov b/tests/suite/certs-coverage/id:000528,sync:fuzzer03,src:000443,+cov deleted file mode 100644 index 965b23c17a..0000000000 Binary files a/tests/suite/certs-coverage/id:000528,sync:fuzzer03,src:000443,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000529,sync:fuzzer03,src:000426,+cov b/tests/suite/certs-coverage/id:000529,sync:fuzzer03,src:000426,+cov deleted file mode 100644 index 4c0188bd61..0000000000 Binary files a/tests/suite/certs-coverage/id:000529,sync:fuzzer03,src:000426,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000529,sync:fuzzer04,src:000527 b/tests/suite/certs-coverage/id:000529,sync:fuzzer04,src:000527 deleted file mode 100644 index 002319c4f5..0000000000 Binary files a/tests/suite/certs-coverage/id:000529,sync:fuzzer04,src:000527 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000531,sync:fuzzer03,src:000328 b/tests/suite/certs-coverage/id:000531,sync:fuzzer03,src:000328 deleted file mode 100644 index 3d25d14ec4..0000000000 Binary files a/tests/suite/certs-coverage/id:000531,sync:fuzzer03,src:000328 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000532,sync:fuzzer03,src:000524,+cov b/tests/suite/certs-coverage/id:000532,sync:fuzzer03,src:000524,+cov deleted file mode 100644 index 780981bc23..0000000000 Binary files a/tests/suite/certs-coverage/id:000532,sync:fuzzer03,src:000524,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000533,sync:fuzzer03,src:000411 b/tests/suite/certs-coverage/id:000533,sync:fuzzer03,src:000411 deleted file mode 100644 index cf2d6a6b64..0000000000 Binary files a/tests/suite/certs-coverage/id:000533,sync:fuzzer03,src:000411 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000534,sync:fuzzer03,src:000519 b/tests/suite/certs-coverage/id:000534,sync:fuzzer03,src:000519 deleted file mode 100644 index 2b4307779c..0000000000 Binary files a/tests/suite/certs-coverage/id:000534,sync:fuzzer03,src:000519 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000536,sync:fuzzer03,src:000221 b/tests/suite/certs-coverage/id:000536,sync:fuzzer03,src:000221 deleted file mode 100644 index 4c9cd139c4..0000000000 Binary files a/tests/suite/certs-coverage/id:000536,sync:fuzzer03,src:000221 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000536,sync:fuzzer03,src:000528 b/tests/suite/certs-coverage/id:000536,sync:fuzzer03,src:000528 deleted file mode 100644 index 4801791aa3..0000000000 Binary files a/tests/suite/certs-coverage/id:000536,sync:fuzzer03,src:000528 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000537,sync:fuzzer03,src:000165 b/tests/suite/certs-coverage/id:000537,sync:fuzzer03,src:000165 deleted file mode 100644 index 56e20cd6f1..0000000000 Binary files a/tests/suite/certs-coverage/id:000537,sync:fuzzer03,src:000165 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000537,sync:fuzzer05,src:000536,+cov b/tests/suite/certs-coverage/id:000537,sync:fuzzer05,src:000536,+cov deleted file mode 100644 index 6e18ecafed..0000000000 Binary files a/tests/suite/certs-coverage/id:000537,sync:fuzzer05,src:000536,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000538,sync:fuzzer03,src:000432,+cov b/tests/suite/certs-coverage/id:000538,sync:fuzzer03,src:000432,+cov deleted file mode 100644 index a0c86633ed..0000000000 Binary files a/tests/suite/certs-coverage/id:000538,sync:fuzzer03,src:000432,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000542,sync:fuzzer02,src:000525,+cov b/tests/suite/certs-coverage/id:000542,sync:fuzzer02,src:000525,+cov deleted file mode 100644 index c0c079b3a7..0000000000 Binary files a/tests/suite/certs-coverage/id:000542,sync:fuzzer02,src:000525,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000545,sync:fuzzer03,src:000536,+cov b/tests/suite/certs-coverage/id:000545,sync:fuzzer03,src:000536,+cov deleted file mode 100644 index 1f6aebd004..0000000000 Binary files a/tests/suite/certs-coverage/id:000545,sync:fuzzer03,src:000536,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000546,sync:fuzzer03,src:000542 b/tests/suite/certs-coverage/id:000546,sync:fuzzer03,src:000542 deleted file mode 100644 index 8646ce5847..0000000000 Binary files a/tests/suite/certs-coverage/id:000546,sync:fuzzer03,src:000542 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000548,sync:fuzzer01,src:000309 b/tests/suite/certs-coverage/id:000548,sync:fuzzer01,src:000309 deleted file mode 100644 index e446551b2d..0000000000 Binary files a/tests/suite/certs-coverage/id:000548,sync:fuzzer01,src:000309 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000549,sync:fuzzer01,src:000306,+cov b/tests/suite/certs-coverage/id:000549,sync:fuzzer01,src:000306,+cov deleted file mode 100644 index 99c294e3e7..0000000000 Binary files a/tests/suite/certs-coverage/id:000549,sync:fuzzer01,src:000306,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000549,sync:fuzzer03,src:000537,+cov b/tests/suite/certs-coverage/id:000549,sync:fuzzer03,src:000537,+cov deleted file mode 100644 index 3ee4365cf2..0000000000 Binary files a/tests/suite/certs-coverage/id:000549,sync:fuzzer03,src:000537,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000549,sync:fuzzer03,src:000539,+cov b/tests/suite/certs-coverage/id:000549,sync:fuzzer03,src:000539,+cov deleted file mode 100644 index 2d44fecb6a..0000000000 Binary files a/tests/suite/certs-coverage/id:000549,sync:fuzzer03,src:000539,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000550,src:000251+000477,op:splice,rep:2 b/tests/suite/certs-coverage/id:000550,src:000251+000477,op:splice,rep:2 deleted file mode 100644 index 117bd485ed..0000000000 Binary files a/tests/suite/certs-coverage/id:000550,src:000251+000477,op:splice,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000550,sync:fuzzer01,src:000311 b/tests/suite/certs-coverage/id:000550,sync:fuzzer01,src:000311 deleted file mode 100644 index 3cb3d4a27f..0000000000 Binary files a/tests/suite/certs-coverage/id:000550,sync:fuzzer01,src:000311 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000551,sync:fuzzer06,src:000533 b/tests/suite/certs-coverage/id:000551,sync:fuzzer06,src:000533 deleted file mode 100644 index 8cbdc2a095..0000000000 Binary files a/tests/suite/certs-coverage/id:000551,sync:fuzzer06,src:000533 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000553,sync:fuzzer03,src:000546 b/tests/suite/certs-coverage/id:000553,sync:fuzzer03,src:000546 deleted file mode 100644 index 2676c69593..0000000000 Binary files a/tests/suite/certs-coverage/id:000553,sync:fuzzer03,src:000546 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000553,sync:fuzzer05,src:000550,+cov b/tests/suite/certs-coverage/id:000553,sync:fuzzer05,src:000550,+cov deleted file mode 100644 index 7848d32ebd..0000000000 Binary files a/tests/suite/certs-coverage/id:000553,sync:fuzzer05,src:000550,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000557,sync:fuzzer03,src:000549 b/tests/suite/certs-coverage/id:000557,sync:fuzzer03,src:000549 deleted file mode 100644 index 3cdffdae9b..0000000000 Binary files a/tests/suite/certs-coverage/id:000557,sync:fuzzer03,src:000549 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000558,sync:fuzzer03,src:000551 b/tests/suite/certs-coverage/id:000558,sync:fuzzer03,src:000551 deleted file mode 100644 index 97533c2809..0000000000 Binary files a/tests/suite/certs-coverage/id:000558,sync:fuzzer03,src:000551 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000558,sync:fuzzer05,src:000555 b/tests/suite/certs-coverage/id:000558,sync:fuzzer05,src:000555 deleted file mode 100644 index 5c959a194f..0000000000 Binary files a/tests/suite/certs-coverage/id:000558,sync:fuzzer05,src:000555 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000559,sync:fuzzer05,src:000556 b/tests/suite/certs-coverage/id:000559,sync:fuzzer05,src:000556 deleted file mode 100644 index 0b0afde3e9..0000000000 Binary files a/tests/suite/certs-coverage/id:000559,sync:fuzzer05,src:000556 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000562,sync:fuzzer03,src:000555,+cov b/tests/suite/certs-coverage/id:000562,sync:fuzzer03,src:000555,+cov deleted file mode 100644 index 2b43f89298..0000000000 Binary files a/tests/suite/certs-coverage/id:000562,sync:fuzzer03,src:000555,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000563,sync:fuzzer03,src:000556,+cov b/tests/suite/certs-coverage/id:000563,sync:fuzzer03,src:000556,+cov deleted file mode 100644 index 9744e93412..0000000000 Binary files a/tests/suite/certs-coverage/id:000563,sync:fuzzer03,src:000556,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000564,sync:fuzzer07,src:000564 b/tests/suite/certs-coverage/id:000564,sync:fuzzer07,src:000564 deleted file mode 100644 index b2497d7c1d..0000000000 Binary files a/tests/suite/certs-coverage/id:000564,sync:fuzzer07,src:000564 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000567,sync:fuzzer03,src:000558,+cov b/tests/suite/certs-coverage/id:000567,sync:fuzzer03,src:000558,+cov deleted file mode 100644 index af761f199f..0000000000 Binary files a/tests/suite/certs-coverage/id:000567,sync:fuzzer03,src:000558,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000570,sync:fuzzer05,src:000569 b/tests/suite/certs-coverage/id:000570,sync:fuzzer05,src:000569 deleted file mode 100644 index eae6951662..0000000000 Binary files a/tests/suite/certs-coverage/id:000570,sync:fuzzer05,src:000569 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000572,sync:fuzzer03,src:000568 b/tests/suite/certs-coverage/id:000572,sync:fuzzer03,src:000568 deleted file mode 100644 index e4e697d879..0000000000 Binary files a/tests/suite/certs-coverage/id:000572,sync:fuzzer03,src:000568 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000573,sync:fuzzer02,src:000557,+cov b/tests/suite/certs-coverage/id:000573,sync:fuzzer02,src:000557,+cov deleted file mode 100644 index 3aadec9f6d..0000000000 Binary files a/tests/suite/certs-coverage/id:000573,sync:fuzzer02,src:000557,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000573,sync:fuzzer03,src:000557 b/tests/suite/certs-coverage/id:000573,sync:fuzzer03,src:000557 deleted file mode 100644 index 28d1b37b39..0000000000 Binary files a/tests/suite/certs-coverage/id:000573,sync:fuzzer03,src:000557 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000573,sync:fuzzer03,src:000562,+cov b/tests/suite/certs-coverage/id:000573,sync:fuzzer03,src:000562,+cov deleted file mode 100644 index 52aa4f2693..0000000000 Binary files a/tests/suite/certs-coverage/id:000573,sync:fuzzer03,src:000562,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000578,sync:fuzzer03,src:000569,+cov b/tests/suite/certs-coverage/id:000578,sync:fuzzer03,src:000569,+cov deleted file mode 100644 index ba23919672..0000000000 Binary files a/tests/suite/certs-coverage/id:000578,sync:fuzzer03,src:000569,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000578,sync:fuzzer03,src:000572,+cov b/tests/suite/certs-coverage/id:000578,sync:fuzzer03,src:000572,+cov deleted file mode 100644 index bd68806810..0000000000 Binary files a/tests/suite/certs-coverage/id:000578,sync:fuzzer03,src:000572,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000578,sync:fuzzer05,src:000575,+cov b/tests/suite/certs-coverage/id:000578,sync:fuzzer05,src:000575,+cov deleted file mode 100644 index 274489b3b1..0000000000 Binary files a/tests/suite/certs-coverage/id:000578,sync:fuzzer05,src:000575,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000580,sync:fuzzer03,src:000574,+cov b/tests/suite/certs-coverage/id:000580,sync:fuzzer03,src:000574,+cov deleted file mode 100644 index 623cab4d0c..0000000000 Binary files a/tests/suite/certs-coverage/id:000580,sync:fuzzer03,src:000574,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000581,sync:fuzzer04,src:000577 b/tests/suite/certs-coverage/id:000581,sync:fuzzer04,src:000577 deleted file mode 100644 index 8955318c53..0000000000 Binary files a/tests/suite/certs-coverage/id:000581,sync:fuzzer04,src:000577 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000583,sync:fuzzer03,src:000570,+cov b/tests/suite/certs-coverage/id:000583,sync:fuzzer03,src:000570,+cov deleted file mode 100644 index b668b5cb10..0000000000 Binary files a/tests/suite/certs-coverage/id:000583,sync:fuzzer03,src:000570,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000584,sync:fuzzer03,src:000578,+cov b/tests/suite/certs-coverage/id:000584,sync:fuzzer03,src:000578,+cov deleted file mode 100644 index 4113fc05f9..0000000000 Binary files a/tests/suite/certs-coverage/id:000584,sync:fuzzer03,src:000578,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000586,src:000321,op:havoc,rep:2 b/tests/suite/certs-coverage/id:000586,src:000321,op:havoc,rep:2 deleted file mode 100644 index 9ed769e0f5..0000000000 Binary files a/tests/suite/certs-coverage/id:000586,src:000321,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000590,sync:fuzzer03,src:000580 b/tests/suite/certs-coverage/id:000590,sync:fuzzer03,src:000580 deleted file mode 100644 index a617e70dd1..0000000000 Binary files a/tests/suite/certs-coverage/id:000590,sync:fuzzer03,src:000580 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000590,sync:fuzzer03,src:000583,+cov b/tests/suite/certs-coverage/id:000590,sync:fuzzer03,src:000583,+cov deleted file mode 100644 index 546f874db2..0000000000 Binary files a/tests/suite/certs-coverage/id:000590,sync:fuzzer03,src:000583,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000591,sync:fuzzer08,src:000579 b/tests/suite/certs-coverage/id:000591,sync:fuzzer08,src:000579 deleted file mode 100644 index 4a82a4df86..0000000000 Binary files a/tests/suite/certs-coverage/id:000591,sync:fuzzer08,src:000579 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000598,sync:fuzzer03,src:000590 b/tests/suite/certs-coverage/id:000598,sync:fuzzer03,src:000590 deleted file mode 100644 index 74b7081ef6..0000000000 Binary files a/tests/suite/certs-coverage/id:000598,sync:fuzzer03,src:000590 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000601,sync:fuzzer03,src:000588 b/tests/suite/certs-coverage/id:000601,sync:fuzzer03,src:000588 deleted file mode 100644 index 783dacae1e..0000000000 Binary files a/tests/suite/certs-coverage/id:000601,sync:fuzzer03,src:000588 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000604,sync:fuzzer05,src:000602 b/tests/suite/certs-coverage/id:000604,sync:fuzzer05,src:000602 deleted file mode 100644 index ba2b9da774..0000000000 Binary files a/tests/suite/certs-coverage/id:000604,sync:fuzzer05,src:000602 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000607,sync:fuzzer08,src:000595 b/tests/suite/certs-coverage/id:000607,sync:fuzzer08,src:000595 deleted file mode 100644 index 62d9d91b2d..0000000000 Binary files a/tests/suite/certs-coverage/id:000607,sync:fuzzer08,src:000595 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000608,src:000362,op:havoc,rep:2,+cov b/tests/suite/certs-coverage/id:000608,src:000362,op:havoc,rep:2,+cov deleted file mode 100644 index b06a5dabf5..0000000000 Binary files a/tests/suite/certs-coverage/id:000608,src:000362,op:havoc,rep:2,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000609,sync:fuzzer03,src:000603,+cov b/tests/suite/certs-coverage/id:000609,sync:fuzzer03,src:000603,+cov deleted file mode 100644 index b5c0e5668e..0000000000 Binary files a/tests/suite/certs-coverage/id:000609,sync:fuzzer03,src:000603,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000610,sync:fuzzer03,src:000596,+cov b/tests/suite/certs-coverage/id:000610,sync:fuzzer03,src:000596,+cov deleted file mode 100644 index 75036ce08a..0000000000 Binary files a/tests/suite/certs-coverage/id:000610,sync:fuzzer03,src:000596,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000611,sync:fuzzer03,src:000585 b/tests/suite/certs-coverage/id:000611,sync:fuzzer03,src:000585 deleted file mode 100644 index 722e8ee3f0..0000000000 Binary files a/tests/suite/certs-coverage/id:000611,sync:fuzzer03,src:000585 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000611,sync:fuzzer03,src:000605,+cov b/tests/suite/certs-coverage/id:000611,sync:fuzzer03,src:000605,+cov deleted file mode 100644 index 9eabffd940..0000000000 Binary files a/tests/suite/certs-coverage/id:000611,sync:fuzzer03,src:000605,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000612,sync:fuzzer03,src:000604,+cov b/tests/suite/certs-coverage/id:000612,sync:fuzzer03,src:000604,+cov deleted file mode 100644 index dca6ac6c40..0000000000 Binary files a/tests/suite/certs-coverage/id:000612,sync:fuzzer03,src:000604,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000614,src:000358,op:havoc,rep:4,+cov b/tests/suite/certs-coverage/id:000614,src:000358,op:havoc,rep:4,+cov deleted file mode 100644 index e5551ed0d3..0000000000 Binary files a/tests/suite/certs-coverage/id:000614,src:000358,op:havoc,rep:4,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000614,sync:fuzzer03,src:000593,+cov b/tests/suite/certs-coverage/id:000614,sync:fuzzer03,src:000593,+cov deleted file mode 100644 index 3520d6115e..0000000000 Binary files a/tests/suite/certs-coverage/id:000614,sync:fuzzer03,src:000593,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000615,sync:fuzzer03,src:000587,+cov b/tests/suite/certs-coverage/id:000615,sync:fuzzer03,src:000587,+cov deleted file mode 100644 index af91cdb4de..0000000000 Binary files a/tests/suite/certs-coverage/id:000615,sync:fuzzer03,src:000587,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000616,sync:fuzzer03,src:000607 b/tests/suite/certs-coverage/id:000616,sync:fuzzer03,src:000607 deleted file mode 100644 index 49edefb874..0000000000 Binary files a/tests/suite/certs-coverage/id:000616,sync:fuzzer03,src:000607 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000616,sync:fuzzer05,src:000614,+cov b/tests/suite/certs-coverage/id:000616,sync:fuzzer05,src:000614,+cov deleted file mode 100644 index 641f9bfd0b..0000000000 Binary files a/tests/suite/certs-coverage/id:000616,sync:fuzzer05,src:000614,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000621,sync:fuzzer04,src:000612 b/tests/suite/certs-coverage/id:000621,sync:fuzzer04,src:000612 deleted file mode 100644 index d00e4a150c..0000000000 Binary files a/tests/suite/certs-coverage/id:000621,sync:fuzzer04,src:000612 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000622,sync:fuzzer03,src:000613 b/tests/suite/certs-coverage/id:000622,sync:fuzzer03,src:000613 deleted file mode 100644 index 97b15a5f19..0000000000 Binary files a/tests/suite/certs-coverage/id:000622,sync:fuzzer03,src:000613 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000623,sync:fuzzer03,src:000615 b/tests/suite/certs-coverage/id:000623,sync:fuzzer03,src:000615 deleted file mode 100644 index ada2a1e2dd..0000000000 Binary files a/tests/suite/certs-coverage/id:000623,sync:fuzzer03,src:000615 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000624,sync:fuzzer03,src:000600 b/tests/suite/certs-coverage/id:000624,sync:fuzzer03,src:000600 deleted file mode 100644 index 2ac907e962..0000000000 Binary files a/tests/suite/certs-coverage/id:000624,sync:fuzzer03,src:000600 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000625,sync:fuzzer03,src:000606 b/tests/suite/certs-coverage/id:000625,sync:fuzzer03,src:000606 deleted file mode 100644 index 2385d9b9e6..0000000000 Binary files a/tests/suite/certs-coverage/id:000625,sync:fuzzer03,src:000606 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000625,sync:fuzzer03,src:000616,+cov b/tests/suite/certs-coverage/id:000625,sync:fuzzer03,src:000616,+cov deleted file mode 100644 index f97266c687..0000000000 Binary files a/tests/suite/certs-coverage/id:000625,sync:fuzzer03,src:000616,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000626,sync:fuzzer03,src:000609 b/tests/suite/certs-coverage/id:000626,sync:fuzzer03,src:000609 deleted file mode 100644 index a158e7278e..0000000000 Binary files a/tests/suite/certs-coverage/id:000626,sync:fuzzer03,src:000609 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000626,sync:fuzzer08,src:000615 b/tests/suite/certs-coverage/id:000626,sync:fuzzer08,src:000615 deleted file mode 100644 index a604e03442..0000000000 Binary files a/tests/suite/certs-coverage/id:000626,sync:fuzzer08,src:000615 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000627,sync:fuzzer03,src:000602 b/tests/suite/certs-coverage/id:000627,sync:fuzzer03,src:000602 deleted file mode 100644 index 405ead1180..0000000000 Binary files a/tests/suite/certs-coverage/id:000627,sync:fuzzer03,src:000602 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000627,sync:fuzzer08,src:000616 b/tests/suite/certs-coverage/id:000627,sync:fuzzer08,src:000616 deleted file mode 100644 index 4843b399c2..0000000000 Binary files a/tests/suite/certs-coverage/id:000627,sync:fuzzer08,src:000616 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000631,sync:fuzzer03,src:000623 b/tests/suite/certs-coverage/id:000631,sync:fuzzer03,src:000623 deleted file mode 100644 index 12a074334a..0000000000 Binary files a/tests/suite/certs-coverage/id:000631,sync:fuzzer03,src:000623 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000631,sync:fuzzer03,src:000624 b/tests/suite/certs-coverage/id:000631,sync:fuzzer03,src:000624 deleted file mode 100644 index 8eb116fb2e..0000000000 Binary files a/tests/suite/certs-coverage/id:000631,sync:fuzzer03,src:000624 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000633,sync:fuzzer01,src:000618 b/tests/suite/certs-coverage/id:000633,sync:fuzzer01,src:000618 deleted file mode 100644 index 8f6ea7e747..0000000000 Binary files a/tests/suite/certs-coverage/id:000633,sync:fuzzer01,src:000618 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000634,sync:fuzzer07,src:000634,+cov b/tests/suite/certs-coverage/id:000634,sync:fuzzer07,src:000634,+cov deleted file mode 100644 index b24c7dd6d6..0000000000 Binary files a/tests/suite/certs-coverage/id:000634,sync:fuzzer07,src:000634,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000636,sync:fuzzer03,src:000628 b/tests/suite/certs-coverage/id:000636,sync:fuzzer03,src:000628 deleted file mode 100644 index 97f4037cab..0000000000 Binary files a/tests/suite/certs-coverage/id:000636,sync:fuzzer03,src:000628 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000637,sync:fuzzer03,src:000627 b/tests/suite/certs-coverage/id:000637,sync:fuzzer03,src:000627 deleted file mode 100644 index 4706a3005e..0000000000 Binary files a/tests/suite/certs-coverage/id:000637,sync:fuzzer03,src:000627 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000637,sync:fuzzer03,src:000630 b/tests/suite/certs-coverage/id:000637,sync:fuzzer03,src:000630 deleted file mode 100644 index 4f8a294ed0..0000000000 Binary files a/tests/suite/certs-coverage/id:000637,sync:fuzzer03,src:000630 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000638,sync:fuzzer03,src:000631 b/tests/suite/certs-coverage/id:000638,sync:fuzzer03,src:000631 deleted file mode 100644 index 42e4886479..0000000000 Binary files a/tests/suite/certs-coverage/id:000638,sync:fuzzer03,src:000631 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000639,sync:fuzzer03,src:000632 b/tests/suite/certs-coverage/id:000639,sync:fuzzer03,src:000632 deleted file mode 100644 index 0bd7b55ee7..0000000000 Binary files a/tests/suite/certs-coverage/id:000639,sync:fuzzer03,src:000632 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000641,sync:fuzzer03,src:000633 b/tests/suite/certs-coverage/id:000641,sync:fuzzer03,src:000633 deleted file mode 100644 index a455b7d864..0000000000 Binary files a/tests/suite/certs-coverage/id:000641,sync:fuzzer03,src:000633 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000641,sync:fuzzer07,src:000640 b/tests/suite/certs-coverage/id:000641,sync:fuzzer07,src:000640 deleted file mode 100644 index c95fd90276..0000000000 Binary files a/tests/suite/certs-coverage/id:000641,sync:fuzzer07,src:000640 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000642,sync:fuzzer08,src:000630 b/tests/suite/certs-coverage/id:000642,sync:fuzzer08,src:000630 deleted file mode 100644 index cda85045cf..0000000000 Binary files a/tests/suite/certs-coverage/id:000642,sync:fuzzer08,src:000630 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000643,src:000491+000266,op:splice,rep:2 b/tests/suite/certs-coverage/id:000643,src:000491+000266,op:splice,rep:2 deleted file mode 100644 index e34c6b6654..0000000000 Binary files a/tests/suite/certs-coverage/id:000643,src:000491+000266,op:splice,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000644,sync:fuzzer03,src:000636 b/tests/suite/certs-coverage/id:000644,sync:fuzzer03,src:000636 deleted file mode 100644 index 9a6c8bcb92..0000000000 Binary files a/tests/suite/certs-coverage/id:000644,sync:fuzzer03,src:000636 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000645,sync:fuzzer03,src:000638 b/tests/suite/certs-coverage/id:000645,sync:fuzzer03,src:000638 deleted file mode 100644 index 6a8796ebe3..0000000000 Binary files a/tests/suite/certs-coverage/id:000645,sync:fuzzer03,src:000638 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000646,sync:fuzzer03,src:000639 b/tests/suite/certs-coverage/id:000646,sync:fuzzer03,src:000639 deleted file mode 100644 index 6fd5f1b891..0000000000 Binary files a/tests/suite/certs-coverage/id:000646,sync:fuzzer03,src:000639 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000648,sync:fuzzer02,src:000633 b/tests/suite/certs-coverage/id:000648,sync:fuzzer02,src:000633 deleted file mode 100644 index b555f05a46..0000000000 Binary files a/tests/suite/certs-coverage/id:000648,sync:fuzzer02,src:000633 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000648,sync:fuzzer07,src:000647 b/tests/suite/certs-coverage/id:000648,sync:fuzzer07,src:000647 deleted file mode 100644 index b95f22a10c..0000000000 Binary files a/tests/suite/certs-coverage/id:000648,sync:fuzzer07,src:000647 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000649,sync:fuzzer08,src:000638,+cov b/tests/suite/certs-coverage/id:000649,sync:fuzzer08,src:000638,+cov deleted file mode 100644 index 8bf6dffc9d..0000000000 Binary files a/tests/suite/certs-coverage/id:000649,sync:fuzzer08,src:000638,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000651,sync:fuzzer03,src:000644,+cov b/tests/suite/certs-coverage/id:000651,sync:fuzzer03,src:000644,+cov deleted file mode 100644 index c008db1161..0000000000 Binary files a/tests/suite/certs-coverage/id:000651,sync:fuzzer03,src:000644,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000652,sync:fuzzer08,src:000641 b/tests/suite/certs-coverage/id:000652,sync:fuzzer08,src:000641 deleted file mode 100644 index 2e7d4c6629..0000000000 Binary files a/tests/suite/certs-coverage/id:000652,sync:fuzzer08,src:000641 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000658,sync:fuzzer03,src:000651 b/tests/suite/certs-coverage/id:000658,sync:fuzzer03,src:000651 deleted file mode 100644 index b5e51c4cca..0000000000 Binary files a/tests/suite/certs-coverage/id:000658,sync:fuzzer03,src:000651 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000659,sync:fuzzer03,src:000653,+cov b/tests/suite/certs-coverage/id:000659,sync:fuzzer03,src:000653,+cov deleted file mode 100644 index d5ef0adad2..0000000000 Binary files a/tests/suite/certs-coverage/id:000659,sync:fuzzer03,src:000653,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000661,sync:fuzzer08,src:000648 b/tests/suite/certs-coverage/id:000661,sync:fuzzer08,src:000648 deleted file mode 100644 index c6aec9bfc3..0000000000 Binary files a/tests/suite/certs-coverage/id:000661,sync:fuzzer08,src:000648 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000662,sync:fuzzer03,src:000654,+cov b/tests/suite/certs-coverage/id:000662,sync:fuzzer03,src:000654,+cov deleted file mode 100644 index f13c4871e9..0000000000 Binary files a/tests/suite/certs-coverage/id:000662,sync:fuzzer03,src:000654,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000662,sync:fuzzer03,src:000656 b/tests/suite/certs-coverage/id:000662,sync:fuzzer03,src:000656 deleted file mode 100644 index e4a96e2449..0000000000 Binary files a/tests/suite/certs-coverage/id:000662,sync:fuzzer03,src:000656 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000663,sync:fuzzer03,src:000657,+cov b/tests/suite/certs-coverage/id:000663,sync:fuzzer03,src:000657,+cov deleted file mode 100644 index 9b541cbd94..0000000000 Binary files a/tests/suite/certs-coverage/id:000663,sync:fuzzer03,src:000657,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000664,sync:fuzzer03,src:000658 b/tests/suite/certs-coverage/id:000664,sync:fuzzer03,src:000658 deleted file mode 100644 index 9f4a93029c..0000000000 Binary files a/tests/suite/certs-coverage/id:000664,sync:fuzzer03,src:000658 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000665,sync:fuzzer03,src:000648 b/tests/suite/certs-coverage/id:000665,sync:fuzzer03,src:000648 deleted file mode 100644 index 966f1adc2f..0000000000 Binary files a/tests/suite/certs-coverage/id:000665,sync:fuzzer03,src:000648 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000665,sync:fuzzer05,src:000663 b/tests/suite/certs-coverage/id:000665,sync:fuzzer05,src:000663 deleted file mode 100644 index 688a8ef137..0000000000 Binary files a/tests/suite/certs-coverage/id:000665,sync:fuzzer05,src:000663 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000666,sync:fuzzer01,src:000642 b/tests/suite/certs-coverage/id:000666,sync:fuzzer01,src:000642 deleted file mode 100644 index 57c65b5865..0000000000 Binary files a/tests/suite/certs-coverage/id:000666,sync:fuzzer01,src:000642 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000667,sync:fuzzer01,src:000643 b/tests/suite/certs-coverage/id:000667,sync:fuzzer01,src:000643 deleted file mode 100644 index 9944c0e10a..0000000000 Binary files a/tests/suite/certs-coverage/id:000667,sync:fuzzer01,src:000643 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000668,sync:fuzzer01,src:000644 b/tests/suite/certs-coverage/id:000668,sync:fuzzer01,src:000644 deleted file mode 100644 index 7ab27384aa..0000000000 Binary files a/tests/suite/certs-coverage/id:000668,sync:fuzzer01,src:000644 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000669,sync:fuzzer03,src:000649 b/tests/suite/certs-coverage/id:000669,sync:fuzzer03,src:000649 deleted file mode 100644 index f56825aedd..0000000000 Binary files a/tests/suite/certs-coverage/id:000669,sync:fuzzer03,src:000649 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000669,sync:fuzzer05,src:000667 b/tests/suite/certs-coverage/id:000669,sync:fuzzer05,src:000667 deleted file mode 100644 index 81138f2195..0000000000 Binary files a/tests/suite/certs-coverage/id:000669,sync:fuzzer05,src:000667 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000670,sync:fuzzer02,src:000657 b/tests/suite/certs-coverage/id:000670,sync:fuzzer02,src:000657 deleted file mode 100644 index f08f52a62a..0000000000 Binary files a/tests/suite/certs-coverage/id:000670,sync:fuzzer02,src:000657 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000671,sync:fuzzer01,src:000645 b/tests/suite/certs-coverage/id:000671,sync:fuzzer01,src:000645 deleted file mode 100644 index cc2dfd63f5..0000000000 Binary files a/tests/suite/certs-coverage/id:000671,sync:fuzzer01,src:000645 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000672,sync:fuzzer03,src:000666 b/tests/suite/certs-coverage/id:000672,sync:fuzzer03,src:000666 deleted file mode 100644 index e3f5c1a8d3..0000000000 Binary files a/tests/suite/certs-coverage/id:000672,sync:fuzzer03,src:000666 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000680,sync:fuzzer07,src:000674 b/tests/suite/certs-coverage/id:000680,sync:fuzzer07,src:000674 deleted file mode 100644 index a1f29f98b9..0000000000 Binary files a/tests/suite/certs-coverage/id:000680,sync:fuzzer07,src:000674 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000681,sync:fuzzer01,src:000646,+cov b/tests/suite/certs-coverage/id:000681,sync:fuzzer01,src:000646,+cov deleted file mode 100644 index ea814e68f7..0000000000 Binary files a/tests/suite/certs-coverage/id:000681,sync:fuzzer01,src:000646,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000681,sync:fuzzer03,src:000672 b/tests/suite/certs-coverage/id:000681,sync:fuzzer03,src:000672 deleted file mode 100644 index 884a8acd51..0000000000 Binary files a/tests/suite/certs-coverage/id:000681,sync:fuzzer03,src:000672 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000683,sync:fuzzer03,src:000673 b/tests/suite/certs-coverage/id:000683,sync:fuzzer03,src:000673 deleted file mode 100644 index 342b7b1ac3..0000000000 Binary files a/tests/suite/certs-coverage/id:000683,sync:fuzzer03,src:000673 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000685,sync:fuzzer03,src:000676 b/tests/suite/certs-coverage/id:000685,sync:fuzzer03,src:000676 deleted file mode 100644 index 562a18144c..0000000000 Binary files a/tests/suite/certs-coverage/id:000685,sync:fuzzer03,src:000676 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000686,sync:fuzzer03,src:000675 b/tests/suite/certs-coverage/id:000686,sync:fuzzer03,src:000675 deleted file mode 100644 index 05d6a66615..0000000000 Binary files a/tests/suite/certs-coverage/id:000686,sync:fuzzer03,src:000675 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000687,sync:fuzzer03,src:000671 b/tests/suite/certs-coverage/id:000687,sync:fuzzer03,src:000671 deleted file mode 100644 index f792c40874..0000000000 Binary files a/tests/suite/certs-coverage/id:000687,sync:fuzzer03,src:000671 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000687,sync:fuzzer03,src:000677 b/tests/suite/certs-coverage/id:000687,sync:fuzzer03,src:000677 deleted file mode 100644 index e56bb2506b..0000000000 Binary files a/tests/suite/certs-coverage/id:000687,sync:fuzzer03,src:000677 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000689,sync:fuzzer08,src:000667 b/tests/suite/certs-coverage/id:000689,sync:fuzzer08,src:000667 deleted file mode 100644 index fe53f65334..0000000000 Binary files a/tests/suite/certs-coverage/id:000689,sync:fuzzer08,src:000667 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000690,sync:fuzzer02,src:000669 b/tests/suite/certs-coverage/id:000690,sync:fuzzer02,src:000669 deleted file mode 100644 index 3d35c51f00..0000000000 Binary files a/tests/suite/certs-coverage/id:000690,sync:fuzzer02,src:000669 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000691,sync:fuzzer08,src:000668 b/tests/suite/certs-coverage/id:000691,sync:fuzzer08,src:000668 deleted file mode 100644 index 2bdfd54653..0000000000 Binary files a/tests/suite/certs-coverage/id:000691,sync:fuzzer08,src:000668 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000693,sync:fuzzer08,src:000679 b/tests/suite/certs-coverage/id:000693,sync:fuzzer08,src:000679 deleted file mode 100644 index 29bbeb49dd..0000000000 Binary files a/tests/suite/certs-coverage/id:000693,sync:fuzzer08,src:000679 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000694,sync:fuzzer03,src:000686 b/tests/suite/certs-coverage/id:000694,sync:fuzzer03,src:000686 deleted file mode 100644 index f1ece92ff2..0000000000 Binary files a/tests/suite/certs-coverage/id:000694,sync:fuzzer03,src:000686 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000696,sync:fuzzer03,src:000680,+cov b/tests/suite/certs-coverage/id:000696,sync:fuzzer03,src:000680,+cov deleted file mode 100644 index bbc8ee2068..0000000000 Binary files a/tests/suite/certs-coverage/id:000696,sync:fuzzer03,src:000680,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000699,sync:fuzzer03,src:000689 b/tests/suite/certs-coverage/id:000699,sync:fuzzer03,src:000689 deleted file mode 100644 index ca4cc262e7..0000000000 Binary files a/tests/suite/certs-coverage/id:000699,sync:fuzzer03,src:000689 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000699,sync:fuzzer08,src:000690 b/tests/suite/certs-coverage/id:000699,sync:fuzzer08,src:000690 deleted file mode 100644 index b8b4741f29..0000000000 Binary files a/tests/suite/certs-coverage/id:000699,sync:fuzzer08,src:000690 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000700,sync:fuzzer03,src:000679,+cov b/tests/suite/certs-coverage/id:000700,sync:fuzzer03,src:000679,+cov deleted file mode 100644 index 0dd746ab5d..0000000000 Binary files a/tests/suite/certs-coverage/id:000700,sync:fuzzer03,src:000679,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000701,sync:fuzzer08,src:000683,+cov b/tests/suite/certs-coverage/id:000701,sync:fuzzer08,src:000683,+cov deleted file mode 100644 index 90747b24da..0000000000 Binary files a/tests/suite/certs-coverage/id:000701,sync:fuzzer08,src:000683,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000702,sync:fuzzer03,src:000695 b/tests/suite/certs-coverage/id:000702,sync:fuzzer03,src:000695 deleted file mode 100644 index 4ed3e1037b..0000000000 Binary files a/tests/suite/certs-coverage/id:000702,sync:fuzzer03,src:000695 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000702,sync:fuzzer07,src:000697 b/tests/suite/certs-coverage/id:000702,sync:fuzzer07,src:000697 deleted file mode 100644 index 0a5599ca59..0000000000 Binary files a/tests/suite/certs-coverage/id:000702,sync:fuzzer07,src:000697 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000703,sync:fuzzer08,src:000688 b/tests/suite/certs-coverage/id:000703,sync:fuzzer08,src:000688 deleted file mode 100644 index 7af173b18f..0000000000 Binary files a/tests/suite/certs-coverage/id:000703,sync:fuzzer08,src:000688 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000704,sync:fuzzer08,src:000684 b/tests/suite/certs-coverage/id:000704,sync:fuzzer08,src:000684 deleted file mode 100644 index 5dc0a75b5e..0000000000 Binary files a/tests/suite/certs-coverage/id:000704,sync:fuzzer08,src:000684 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000706,sync:fuzzer07,src:000696 b/tests/suite/certs-coverage/id:000706,sync:fuzzer07,src:000696 deleted file mode 100644 index 8b70178874..0000000000 Binary files a/tests/suite/certs-coverage/id:000706,sync:fuzzer07,src:000696 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000707,sync:fuzzer03,src:000681 b/tests/suite/certs-coverage/id:000707,sync:fuzzer03,src:000681 deleted file mode 100644 index e1fd19f80b..0000000000 Binary files a/tests/suite/certs-coverage/id:000707,sync:fuzzer03,src:000681 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000707,sync:fuzzer07,src:000695,+cov b/tests/suite/certs-coverage/id:000707,sync:fuzzer07,src:000695,+cov deleted file mode 100644 index 6b5b918cdf..0000000000 Binary files a/tests/suite/certs-coverage/id:000707,sync:fuzzer07,src:000695,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000708,sync:fuzzer06,src:000683 b/tests/suite/certs-coverage/id:000708,sync:fuzzer06,src:000683 deleted file mode 100644 index 9f19ff89b1..0000000000 Binary files a/tests/suite/certs-coverage/id:000708,sync:fuzzer06,src:000683 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000710,sync:fuzzer03,src:000688,+cov b/tests/suite/certs-coverage/id:000710,sync:fuzzer03,src:000688,+cov deleted file mode 100644 index 789ee9a488..0000000000 Binary files a/tests/suite/certs-coverage/id:000710,sync:fuzzer03,src:000688,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000711,sync:fuzzer03,src:000705 b/tests/suite/certs-coverage/id:000711,sync:fuzzer03,src:000705 deleted file mode 100644 index 317c1cb1cd..0000000000 Binary files a/tests/suite/certs-coverage/id:000711,sync:fuzzer03,src:000705 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000712,src:000588,op:havoc,rep:4 b/tests/suite/certs-coverage/id:000712,src:000588,op:havoc,rep:4 deleted file mode 100644 index 3a74813810..0000000000 Binary files a/tests/suite/certs-coverage/id:000712,src:000588,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000712,sync:fuzzer03,src:000704 b/tests/suite/certs-coverage/id:000712,sync:fuzzer03,src:000704 deleted file mode 100644 index 34b1fee095..0000000000 Binary files a/tests/suite/certs-coverage/id:000712,sync:fuzzer03,src:000704 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000713,sync:fuzzer03,src:000703,+cov b/tests/suite/certs-coverage/id:000713,sync:fuzzer03,src:000703,+cov deleted file mode 100644 index daa340a72d..0000000000 Binary files a/tests/suite/certs-coverage/id:000713,sync:fuzzer03,src:000703,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000714,sync:fuzzer03,src:000707 b/tests/suite/certs-coverage/id:000714,sync:fuzzer03,src:000707 deleted file mode 100644 index cd92e91cf5..0000000000 Binary files a/tests/suite/certs-coverage/id:000714,sync:fuzzer03,src:000707 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000715,src:000575+000585,op:splice,rep:4,+cov b/tests/suite/certs-coverage/id:000715,src:000575+000585,op:splice,rep:4,+cov deleted file mode 100644 index 28fd7402c6..0000000000 Binary files a/tests/suite/certs-coverage/id:000715,src:000575+000585,op:splice,rep:4,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000715,src:000589+000161,op:splice,rep:2 b/tests/suite/certs-coverage/id:000715,src:000589+000161,op:splice,rep:2 deleted file mode 100644 index 0e39a100b4..0000000000 Binary files a/tests/suite/certs-coverage/id:000715,src:000589+000161,op:splice,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000715,sync:fuzzer03,src:000706 b/tests/suite/certs-coverage/id:000715,sync:fuzzer03,src:000706 deleted file mode 100644 index c6198b88e6..0000000000 Binary files a/tests/suite/certs-coverage/id:000715,sync:fuzzer03,src:000706 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000717,sync:fuzzer03,src:000710 b/tests/suite/certs-coverage/id:000717,sync:fuzzer03,src:000710 deleted file mode 100644 index 9f61b8d402..0000000000 Binary files a/tests/suite/certs-coverage/id:000717,sync:fuzzer03,src:000710 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000718,sync:fuzzer03,src:000709,+cov b/tests/suite/certs-coverage/id:000718,sync:fuzzer03,src:000709,+cov deleted file mode 100644 index 32deaaaa0e..0000000000 Binary files a/tests/suite/certs-coverage/id:000718,sync:fuzzer03,src:000709,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000719,sync:fuzzer07,src:000719 b/tests/suite/certs-coverage/id:000719,sync:fuzzer07,src:000719 deleted file mode 100644 index 938a1899cb..0000000000 Binary files a/tests/suite/certs-coverage/id:000719,sync:fuzzer07,src:000719 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000720,sync:fuzzer03,src:000711 b/tests/suite/certs-coverage/id:000720,sync:fuzzer03,src:000711 deleted file mode 100644 index 4e370c604f..0000000000 Binary files a/tests/suite/certs-coverage/id:000720,sync:fuzzer03,src:000711 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000722,sync:fuzzer05,src:000717 b/tests/suite/certs-coverage/id:000722,sync:fuzzer05,src:000717 deleted file mode 100644 index 2ac956ee44..0000000000 Binary files a/tests/suite/certs-coverage/id:000722,sync:fuzzer05,src:000717 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000724,sync:fuzzer01,src:000674 b/tests/suite/certs-coverage/id:000724,sync:fuzzer01,src:000674 deleted file mode 100644 index fb239f1a46..0000000000 Binary files a/tests/suite/certs-coverage/id:000724,sync:fuzzer01,src:000674 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000725,sync:fuzzer03,src:000717 b/tests/suite/certs-coverage/id:000725,sync:fuzzer03,src:000717 deleted file mode 100644 index ea334284c6..0000000000 Binary files a/tests/suite/certs-coverage/id:000725,sync:fuzzer03,src:000717 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000727,sync:fuzzer03,src:000718 b/tests/suite/certs-coverage/id:000727,sync:fuzzer03,src:000718 deleted file mode 100644 index 2fbae10ee4..0000000000 Binary files a/tests/suite/certs-coverage/id:000727,sync:fuzzer03,src:000718 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000730,src:000628,op:havoc,rep:4 b/tests/suite/certs-coverage/id:000730,src:000628,op:havoc,rep:4 deleted file mode 100644 index 6a27f36d82..0000000000 Binary files a/tests/suite/certs-coverage/id:000730,src:000628,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000731,src:000632,op:havoc,rep:2 b/tests/suite/certs-coverage/id:000731,src:000632,op:havoc,rep:2 deleted file mode 100644 index 247e1c4027..0000000000 Binary files a/tests/suite/certs-coverage/id:000731,src:000632,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000733,sync:fuzzer03,src:000722 b/tests/suite/certs-coverage/id:000733,sync:fuzzer03,src:000722 deleted file mode 100644 index 749ac39202..0000000000 Binary files a/tests/suite/certs-coverage/id:000733,sync:fuzzer03,src:000722 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000734,sync:fuzzer03,src:000723 b/tests/suite/certs-coverage/id:000734,sync:fuzzer03,src:000723 deleted file mode 100644 index 081233c62b..0000000000 Binary files a/tests/suite/certs-coverage/id:000734,sync:fuzzer03,src:000723 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000735,sync:fuzzer03,src:000721 b/tests/suite/certs-coverage/id:000735,sync:fuzzer03,src:000721 deleted file mode 100644 index 00a01d0116..0000000000 Binary files a/tests/suite/certs-coverage/id:000735,sync:fuzzer03,src:000721 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000736,sync:fuzzer03,src:000727 b/tests/suite/certs-coverage/id:000736,sync:fuzzer03,src:000727 deleted file mode 100644 index 5239404ef3..0000000000 Binary files a/tests/suite/certs-coverage/id:000736,sync:fuzzer03,src:000727 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000738,sync:fuzzer05,src:000731 b/tests/suite/certs-coverage/id:000738,sync:fuzzer05,src:000731 deleted file mode 100644 index bf6f686c91..0000000000 Binary files a/tests/suite/certs-coverage/id:000738,sync:fuzzer05,src:000731 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000739,src:000644,op:havoc,rep:2 b/tests/suite/certs-coverage/id:000739,src:000644,op:havoc,rep:2 deleted file mode 100644 index bb392eb7fa..0000000000 Binary files a/tests/suite/certs-coverage/id:000739,src:000644,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000740,sync:fuzzer05,src:000732 b/tests/suite/certs-coverage/id:000740,sync:fuzzer05,src:000732 deleted file mode 100644 index 998fcfceb7..0000000000 Binary files a/tests/suite/certs-coverage/id:000740,sync:fuzzer05,src:000732 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000741,sync:fuzzer05,src:000733 b/tests/suite/certs-coverage/id:000741,sync:fuzzer05,src:000733 deleted file mode 100644 index d1fa515ea7..0000000000 Binary files a/tests/suite/certs-coverage/id:000741,sync:fuzzer05,src:000733 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000742,src:000696,op:havoc,rep:2 b/tests/suite/certs-coverage/id:000742,src:000696,op:havoc,rep:2 deleted file mode 100644 index ffa8c9eebd..0000000000 Binary files a/tests/suite/certs-coverage/id:000742,src:000696,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000742,sync:fuzzer08,src:000727 b/tests/suite/certs-coverage/id:000742,sync:fuzzer08,src:000727 deleted file mode 100644 index 1070bec016..0000000000 Binary files a/tests/suite/certs-coverage/id:000742,sync:fuzzer08,src:000727 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000743,sync:fuzzer08,src:000726 b/tests/suite/certs-coverage/id:000743,sync:fuzzer08,src:000726 deleted file mode 100644 index 7cdba518be..0000000000 Binary files a/tests/suite/certs-coverage/id:000743,sync:fuzzer08,src:000726 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000745,sync:fuzzer08,src:000729 b/tests/suite/certs-coverage/id:000745,sync:fuzzer08,src:000729 deleted file mode 100644 index 7d988316dd..0000000000 Binary files a/tests/suite/certs-coverage/id:000745,sync:fuzzer08,src:000729 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000746,sync:fuzzer03,src:000737 b/tests/suite/certs-coverage/id:000746,sync:fuzzer03,src:000737 deleted file mode 100644 index 7af97c39ed..0000000000 Binary files a/tests/suite/certs-coverage/id:000746,sync:fuzzer03,src:000737 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000747,sync:fuzzer05,src:000740 b/tests/suite/certs-coverage/id:000747,sync:fuzzer05,src:000740 deleted file mode 100644 index 08bb4bda68..0000000000 Binary files a/tests/suite/certs-coverage/id:000747,sync:fuzzer05,src:000740 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000748,sync:fuzzer04,src:000743 b/tests/suite/certs-coverage/id:000748,sync:fuzzer04,src:000743 deleted file mode 100644 index 0cb602dd15..0000000000 Binary files a/tests/suite/certs-coverage/id:000748,sync:fuzzer04,src:000743 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000748,sync:fuzzer06,src:000741 b/tests/suite/certs-coverage/id:000748,sync:fuzzer06,src:000741 deleted file mode 100644 index fafb1d03b8..0000000000 Binary files a/tests/suite/certs-coverage/id:000748,sync:fuzzer06,src:000741 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000749,src:000716,op:havoc,rep:4 b/tests/suite/certs-coverage/id:000749,src:000716,op:havoc,rep:4 deleted file mode 100644 index e80c5f1527..0000000000 Binary files a/tests/suite/certs-coverage/id:000749,src:000716,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000750,sync:fuzzer03,src:000740 b/tests/suite/certs-coverage/id:000750,sync:fuzzer03,src:000740 deleted file mode 100644 index 6fb8508347..0000000000 Binary files a/tests/suite/certs-coverage/id:000750,sync:fuzzer03,src:000740 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000751,sync:fuzzer03,src:000742 b/tests/suite/certs-coverage/id:000751,sync:fuzzer03,src:000742 deleted file mode 100644 index 5dd7e288e3..0000000000 Binary files a/tests/suite/certs-coverage/id:000751,sync:fuzzer03,src:000742 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000752,src:000749,op:havoc,rep:8 b/tests/suite/certs-coverage/id:000752,src:000749,op:havoc,rep:8 deleted file mode 100644 index c256172144..0000000000 Binary files a/tests/suite/certs-coverage/id:000752,src:000749,op:havoc,rep:8 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000753,src:000731+000366,op:splice,rep:2 b/tests/suite/certs-coverage/id:000753,src:000731+000366,op:splice,rep:2 deleted file mode 100644 index 5142ef1f9a..0000000000 Binary files a/tests/suite/certs-coverage/id:000753,src:000731+000366,op:splice,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000754,sync:fuzzer05,src:000746 b/tests/suite/certs-coverage/id:000754,sync:fuzzer05,src:000746 deleted file mode 100644 index 0c93ecf158..0000000000 Binary files a/tests/suite/certs-coverage/id:000754,sync:fuzzer05,src:000746 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000755,sync:fuzzer03,src:000749 b/tests/suite/certs-coverage/id:000755,sync:fuzzer03,src:000749 deleted file mode 100644 index 7040739bba..0000000000 Binary files a/tests/suite/certs-coverage/id:000755,sync:fuzzer03,src:000749 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000756,sync:fuzzer03,src:000748 b/tests/suite/certs-coverage/id:000756,sync:fuzzer03,src:000748 deleted file mode 100644 index bec475e24b..0000000000 Binary files a/tests/suite/certs-coverage/id:000756,sync:fuzzer03,src:000748 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000759,sync:fuzzer03,src:000750 b/tests/suite/certs-coverage/id:000759,sync:fuzzer03,src:000750 deleted file mode 100644 index cfc2d1e1cd..0000000000 Binary files a/tests/suite/certs-coverage/id:000759,sync:fuzzer03,src:000750 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000760,sync:fuzzer03,src:000751 b/tests/suite/certs-coverage/id:000760,sync:fuzzer03,src:000751 deleted file mode 100644 index a7c6ece695..0000000000 Binary files a/tests/suite/certs-coverage/id:000760,sync:fuzzer03,src:000751 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000767,sync:fuzzer03,src:000758 b/tests/suite/certs-coverage/id:000767,sync:fuzzer03,src:000758 deleted file mode 100644 index 623e1f8893..0000000000 Binary files a/tests/suite/certs-coverage/id:000767,sync:fuzzer03,src:000758 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000770,sync:fuzzer03,src:000764 b/tests/suite/certs-coverage/id:000770,sync:fuzzer03,src:000764 deleted file mode 100644 index 27bef4fe5c..0000000000 Binary files a/tests/suite/certs-coverage/id:000770,sync:fuzzer03,src:000764 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000771,sync:fuzzer03,src:000762,+cov b/tests/suite/certs-coverage/id:000771,sync:fuzzer03,src:000762,+cov deleted file mode 100644 index 67f52ef42f..0000000000 Binary files a/tests/suite/certs-coverage/id:000771,sync:fuzzer03,src:000762,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000772,sync:fuzzer03,src:000763 b/tests/suite/certs-coverage/id:000772,sync:fuzzer03,src:000763 deleted file mode 100644 index bd5170bd0b..0000000000 Binary files a/tests/suite/certs-coverage/id:000772,sync:fuzzer03,src:000763 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000773,sync:fuzzer03,src:000760 b/tests/suite/certs-coverage/id:000773,sync:fuzzer03,src:000760 deleted file mode 100644 index f069260494..0000000000 Binary files a/tests/suite/certs-coverage/id:000773,sync:fuzzer03,src:000760 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000774,sync:fuzzer03,src:000765 b/tests/suite/certs-coverage/id:000774,sync:fuzzer03,src:000765 deleted file mode 100644 index dcded91c96..0000000000 Binary files a/tests/suite/certs-coverage/id:000774,sync:fuzzer03,src:000765 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000775,src:000771,op:havoc,rep:4 b/tests/suite/certs-coverage/id:000775,src:000771,op:havoc,rep:4 deleted file mode 100644 index 3334b3691e..0000000000 Binary files a/tests/suite/certs-coverage/id:000775,src:000771,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000776,sync:fuzzer03,src:000766 b/tests/suite/certs-coverage/id:000776,sync:fuzzer03,src:000766 deleted file mode 100644 index 879c502f03..0000000000 Binary files a/tests/suite/certs-coverage/id:000776,sync:fuzzer03,src:000766 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000777,sync:fuzzer05,src:000772,+cov b/tests/suite/certs-coverage/id:000777,sync:fuzzer05,src:000772,+cov deleted file mode 100644 index 08eb641365..0000000000 Binary files a/tests/suite/certs-coverage/id:000777,sync:fuzzer05,src:000772,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000779,sync:fuzzer05,src:000773 b/tests/suite/certs-coverage/id:000779,sync:fuzzer05,src:000773 deleted file mode 100644 index 2805187d92..0000000000 Binary files a/tests/suite/certs-coverage/id:000779,sync:fuzzer05,src:000773 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000780,sync:fuzzer03,src:000772 b/tests/suite/certs-coverage/id:000780,sync:fuzzer03,src:000772 deleted file mode 100644 index e83643992c..0000000000 Binary files a/tests/suite/certs-coverage/id:000780,sync:fuzzer03,src:000772 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000782,sync:fuzzer03,src:000773 b/tests/suite/certs-coverage/id:000782,sync:fuzzer03,src:000773 deleted file mode 100644 index 640e3abea6..0000000000 Binary files a/tests/suite/certs-coverage/id:000782,sync:fuzzer03,src:000773 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000783,sync:fuzzer08,src:000768 b/tests/suite/certs-coverage/id:000783,sync:fuzzer08,src:000768 deleted file mode 100644 index a820965c3e..0000000000 Binary files a/tests/suite/certs-coverage/id:000783,sync:fuzzer08,src:000768 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000785,sync:fuzzer01,src:000747 b/tests/suite/certs-coverage/id:000785,sync:fuzzer01,src:000747 deleted file mode 100644 index 40f08c0f4d..0000000000 Binary files a/tests/suite/certs-coverage/id:000785,sync:fuzzer01,src:000747 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000786,sync:fuzzer04,src:000781 b/tests/suite/certs-coverage/id:000786,sync:fuzzer04,src:000781 deleted file mode 100644 index 29e28fe1b9..0000000000 Binary files a/tests/suite/certs-coverage/id:000786,sync:fuzzer04,src:000781 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000788,sync:fuzzer08,src:000769,+cov b/tests/suite/certs-coverage/id:000788,sync:fuzzer08,src:000769,+cov deleted file mode 100644 index af1a387950..0000000000 Binary files a/tests/suite/certs-coverage/id:000788,sync:fuzzer08,src:000769,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000789,sync:fuzzer03,src:000782 b/tests/suite/certs-coverage/id:000789,sync:fuzzer03,src:000782 deleted file mode 100644 index 7f2fee84dd..0000000000 Binary files a/tests/suite/certs-coverage/id:000789,sync:fuzzer03,src:000782 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000790,src:000787,op:havoc,rep:4 b/tests/suite/certs-coverage/id:000790,src:000787,op:havoc,rep:4 deleted file mode 100644 index f99ffad013..0000000000 Binary files a/tests/suite/certs-coverage/id:000790,src:000787,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000791,sync:fuzzer03,src:000780 b/tests/suite/certs-coverage/id:000791,sync:fuzzer03,src:000780 deleted file mode 100644 index d341a4dc91..0000000000 Binary files a/tests/suite/certs-coverage/id:000791,sync:fuzzer03,src:000780 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000793,sync:fuzzer03,src:000783 b/tests/suite/certs-coverage/id:000793,sync:fuzzer03,src:000783 deleted file mode 100644 index 270b00f256..0000000000 Binary files a/tests/suite/certs-coverage/id:000793,sync:fuzzer03,src:000783 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000794,sync:fuzzer03,src:000784 b/tests/suite/certs-coverage/id:000794,sync:fuzzer03,src:000784 deleted file mode 100644 index 08bd628d2c..0000000000 Binary files a/tests/suite/certs-coverage/id:000794,sync:fuzzer03,src:000784 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000795,sync:fuzzer03,src:000788 b/tests/suite/certs-coverage/id:000795,sync:fuzzer03,src:000788 deleted file mode 100644 index fb2d9be97c..0000000000 Binary files a/tests/suite/certs-coverage/id:000795,sync:fuzzer03,src:000788 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000798,sync:fuzzer03,src:000790 b/tests/suite/certs-coverage/id:000798,sync:fuzzer03,src:000790 deleted file mode 100644 index b21535e21f..0000000000 Binary files a/tests/suite/certs-coverage/id:000798,sync:fuzzer03,src:000790 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000798,sync:fuzzer07,src:000797 b/tests/suite/certs-coverage/id:000798,sync:fuzzer07,src:000797 deleted file mode 100644 index 1026147cb2..0000000000 Binary files a/tests/suite/certs-coverage/id:000798,sync:fuzzer07,src:000797 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000799,sync:fuzzer03,src:000792 b/tests/suite/certs-coverage/id:000799,sync:fuzzer03,src:000792 deleted file mode 100644 index b8747c5f90..0000000000 Binary files a/tests/suite/certs-coverage/id:000799,sync:fuzzer03,src:000792 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000801,sync:fuzzer07,src:000801 b/tests/suite/certs-coverage/id:000801,sync:fuzzer07,src:000801 deleted file mode 100644 index 868e0722bc..0000000000 Binary files a/tests/suite/certs-coverage/id:000801,sync:fuzzer07,src:000801 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000802,sync:fuzzer03,src:000794 b/tests/suite/certs-coverage/id:000802,sync:fuzzer03,src:000794 deleted file mode 100644 index c23f6f52b2..0000000000 Binary files a/tests/suite/certs-coverage/id:000802,sync:fuzzer03,src:000794 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000804,sync:fuzzer02,src:000793 b/tests/suite/certs-coverage/id:000804,sync:fuzzer02,src:000793 deleted file mode 100644 index 380174a29c..0000000000 Binary files a/tests/suite/certs-coverage/id:000804,sync:fuzzer02,src:000793 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000805,sync:fuzzer03,src:000798,+cov b/tests/suite/certs-coverage/id:000805,sync:fuzzer03,src:000798,+cov deleted file mode 100644 index 6e8aeb6ceb..0000000000 Binary files a/tests/suite/certs-coverage/id:000805,sync:fuzzer03,src:000798,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000806,sync:fuzzer03,src:000799 b/tests/suite/certs-coverage/id:000806,sync:fuzzer03,src:000799 deleted file mode 100644 index 372e7ba910..0000000000 Binary files a/tests/suite/certs-coverage/id:000806,sync:fuzzer03,src:000799 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000807,sync:fuzzer06,src:000796 b/tests/suite/certs-coverage/id:000807,sync:fuzzer06,src:000796 deleted file mode 100644 index 746838c0ad..0000000000 Binary files a/tests/suite/certs-coverage/id:000807,sync:fuzzer06,src:000796 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000808,sync:fuzzer03,src:000802 b/tests/suite/certs-coverage/id:000808,sync:fuzzer03,src:000802 deleted file mode 100644 index 62ec0fee66..0000000000 Binary files a/tests/suite/certs-coverage/id:000808,sync:fuzzer03,src:000802 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000810,sync:fuzzer03,src:000803 b/tests/suite/certs-coverage/id:000810,sync:fuzzer03,src:000803 deleted file mode 100644 index 357b0a5afb..0000000000 Binary files a/tests/suite/certs-coverage/id:000810,sync:fuzzer03,src:000803 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000811,sync:fuzzer08,src:000794 b/tests/suite/certs-coverage/id:000811,sync:fuzzer08,src:000794 deleted file mode 100644 index fb309b87b5..0000000000 Binary files a/tests/suite/certs-coverage/id:000811,sync:fuzzer08,src:000794 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000812,sync:fuzzer05,src:000804 b/tests/suite/certs-coverage/id:000812,sync:fuzzer05,src:000804 deleted file mode 100644 index fd8237e977..0000000000 Binary files a/tests/suite/certs-coverage/id:000812,sync:fuzzer05,src:000804 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000813,sync:fuzzer02,src:000802 b/tests/suite/certs-coverage/id:000813,sync:fuzzer02,src:000802 deleted file mode 100644 index 135b9de11e..0000000000 Binary files a/tests/suite/certs-coverage/id:000813,sync:fuzzer02,src:000802 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000820,src:000815,op:havoc,rep:2 b/tests/suite/certs-coverage/id:000820,src:000815,op:havoc,rep:2 deleted file mode 100644 index 312510269f..0000000000 Binary files a/tests/suite/certs-coverage/id:000820,src:000815,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000820,sync:fuzzer05,src:000816 b/tests/suite/certs-coverage/id:000820,sync:fuzzer05,src:000816 deleted file mode 100644 index a0502747f1..0000000000 Binary files a/tests/suite/certs-coverage/id:000820,sync:fuzzer05,src:000816 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000823,sync:fuzzer03,src:000816 b/tests/suite/certs-coverage/id:000823,sync:fuzzer03,src:000816 deleted file mode 100644 index 83ac5dd8eb..0000000000 Binary files a/tests/suite/certs-coverage/id:000823,sync:fuzzer03,src:000816 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000824,sync:fuzzer07,src:000821 b/tests/suite/certs-coverage/id:000824,sync:fuzzer07,src:000821 deleted file mode 100644 index 4754cf8095..0000000000 Binary files a/tests/suite/certs-coverage/id:000824,sync:fuzzer07,src:000821 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000828,sync:fuzzer01,src:000797 b/tests/suite/certs-coverage/id:000828,sync:fuzzer01,src:000797 deleted file mode 100644 index f1e9f5526e..0000000000 Binary files a/tests/suite/certs-coverage/id:000828,sync:fuzzer01,src:000797 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000829,sync:fuzzer01,src:000798 b/tests/suite/certs-coverage/id:000829,sync:fuzzer01,src:000798 deleted file mode 100644 index c948ddd32a..0000000000 Binary files a/tests/suite/certs-coverage/id:000829,sync:fuzzer01,src:000798 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000833,sync:fuzzer03,src:000819 b/tests/suite/certs-coverage/id:000833,sync:fuzzer03,src:000819 deleted file mode 100644 index 326f4cb4ab..0000000000 Binary files a/tests/suite/certs-coverage/id:000833,sync:fuzzer03,src:000819 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000833,sync:fuzzer07,src:000830 b/tests/suite/certs-coverage/id:000833,sync:fuzzer07,src:000830 deleted file mode 100644 index 92246938e3..0000000000 Binary files a/tests/suite/certs-coverage/id:000833,sync:fuzzer07,src:000830 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000835,sync:fuzzer03,src:000831 b/tests/suite/certs-coverage/id:000835,sync:fuzzer03,src:000831 deleted file mode 100644 index cb9ea26441..0000000000 Binary files a/tests/suite/certs-coverage/id:000835,sync:fuzzer03,src:000831 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000838,sync:fuzzer03,src:000825 b/tests/suite/certs-coverage/id:000838,sync:fuzzer03,src:000825 deleted file mode 100644 index 924fefce4e..0000000000 Binary files a/tests/suite/certs-coverage/id:000838,sync:fuzzer03,src:000825 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000839,src:000833+000824,op:splice,rep:8 b/tests/suite/certs-coverage/id:000839,src:000833+000824,op:splice,rep:8 deleted file mode 100644 index 60096a9ee7..0000000000 Binary files a/tests/suite/certs-coverage/id:000839,src:000833+000824,op:splice,rep:8 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000839,sync:fuzzer03,src:000830 b/tests/suite/certs-coverage/id:000839,sync:fuzzer03,src:000830 deleted file mode 100644 index 96582ddfc3..0000000000 Binary files a/tests/suite/certs-coverage/id:000839,sync:fuzzer03,src:000830 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000839,sync:fuzzer06,src:000829 b/tests/suite/certs-coverage/id:000839,sync:fuzzer06,src:000829 deleted file mode 100644 index f2284096c8..0000000000 Binary files a/tests/suite/certs-coverage/id:000839,sync:fuzzer06,src:000829 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000840,sync:fuzzer03,src:000828 b/tests/suite/certs-coverage/id:000840,sync:fuzzer03,src:000828 deleted file mode 100644 index 2400cba212..0000000000 Binary files a/tests/suite/certs-coverage/id:000840,sync:fuzzer03,src:000828 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000841,sync:fuzzer03,src:000836 b/tests/suite/certs-coverage/id:000841,sync:fuzzer03,src:000836 deleted file mode 100644 index 062a466a6f..0000000000 Binary files a/tests/suite/certs-coverage/id:000841,sync:fuzzer03,src:000836 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000841,sync:fuzzer06,src:000826 b/tests/suite/certs-coverage/id:000841,sync:fuzzer06,src:000826 deleted file mode 100644 index 0651b407d2..0000000000 Binary files a/tests/suite/certs-coverage/id:000841,sync:fuzzer06,src:000826 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000842,sync:fuzzer03,src:000817 b/tests/suite/certs-coverage/id:000842,sync:fuzzer03,src:000817 deleted file mode 100644 index 8130ef699d..0000000000 Binary files a/tests/suite/certs-coverage/id:000842,sync:fuzzer03,src:000817 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000842,sync:fuzzer03,src:000826 b/tests/suite/certs-coverage/id:000842,sync:fuzzer03,src:000826 deleted file mode 100644 index aec354268a..0000000000 Binary files a/tests/suite/certs-coverage/id:000842,sync:fuzzer03,src:000826 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000843,sync:fuzzer01,src:000799 b/tests/suite/certs-coverage/id:000843,sync:fuzzer01,src:000799 deleted file mode 100644 index 963af4ba1a..0000000000 Binary files a/tests/suite/certs-coverage/id:000843,sync:fuzzer01,src:000799 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000843,sync:fuzzer03,src:000833 b/tests/suite/certs-coverage/id:000843,sync:fuzzer03,src:000833 deleted file mode 100644 index 442a169702..0000000000 Binary files a/tests/suite/certs-coverage/id:000843,sync:fuzzer03,src:000833 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000844,src:000660,op:havoc,rep:2,+cov b/tests/suite/certs-coverage/id:000844,src:000660,op:havoc,rep:2,+cov deleted file mode 100644 index e54ffac923..0000000000 Binary files a/tests/suite/certs-coverage/id:000844,src:000660,op:havoc,rep:2,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000845,sync:fuzzer03,src:000818 b/tests/suite/certs-coverage/id:000845,sync:fuzzer03,src:000818 deleted file mode 100644 index 6fc49f5b49..0000000000 Binary files a/tests/suite/certs-coverage/id:000845,sync:fuzzer03,src:000818 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000846,src:000845,op:havoc,rep:2,+cov b/tests/suite/certs-coverage/id:000846,src:000845,op:havoc,rep:2,+cov deleted file mode 100644 index f0db25461d..0000000000 Binary files a/tests/suite/certs-coverage/id:000846,src:000845,op:havoc,rep:2,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000846,sync:fuzzer08,src:000829 b/tests/suite/certs-coverage/id:000846,sync:fuzzer08,src:000829 deleted file mode 100644 index 9cf5daace0..0000000000 Binary files a/tests/suite/certs-coverage/id:000846,sync:fuzzer08,src:000829 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000850,sync:fuzzer03,src:000844 b/tests/suite/certs-coverage/id:000850,sync:fuzzer03,src:000844 deleted file mode 100644 index bf1e7c132d..0000000000 Binary files a/tests/suite/certs-coverage/id:000850,sync:fuzzer03,src:000844 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000851,sync:fuzzer03,src:000845 b/tests/suite/certs-coverage/id:000851,sync:fuzzer03,src:000845 deleted file mode 100644 index d2fe6a86bf..0000000000 Binary files a/tests/suite/certs-coverage/id:000851,sync:fuzzer03,src:000845 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000852,sync:fuzzer03,src:000839 b/tests/suite/certs-coverage/id:000852,sync:fuzzer03,src:000839 deleted file mode 100644 index bbba5c9f96..0000000000 Binary files a/tests/suite/certs-coverage/id:000852,sync:fuzzer03,src:000839 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000853,sync:fuzzer03,src:000842 b/tests/suite/certs-coverage/id:000853,sync:fuzzer03,src:000842 deleted file mode 100644 index fbec53751e..0000000000 Binary files a/tests/suite/certs-coverage/id:000853,sync:fuzzer03,src:000842 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000853,sync:fuzzer03,src:000847 b/tests/suite/certs-coverage/id:000853,sync:fuzzer03,src:000847 deleted file mode 100644 index 249512ba0c..0000000000 Binary files a/tests/suite/certs-coverage/id:000853,sync:fuzzer03,src:000847 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000854,sync:fuzzer03,src:000843 b/tests/suite/certs-coverage/id:000854,sync:fuzzer03,src:000843 deleted file mode 100644 index 4f85852fa2..0000000000 Binary files a/tests/suite/certs-coverage/id:000854,sync:fuzzer03,src:000843 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000854,sync:fuzzer03,src:000848 b/tests/suite/certs-coverage/id:000854,sync:fuzzer03,src:000848 deleted file mode 100644 index 2b42343fdc..0000000000 Binary files a/tests/suite/certs-coverage/id:000854,sync:fuzzer03,src:000848 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000855,sync:fuzzer03,src:000846 b/tests/suite/certs-coverage/id:000855,sync:fuzzer03,src:000846 deleted file mode 100644 index 3443fb6e72..0000000000 Binary files a/tests/suite/certs-coverage/id:000855,sync:fuzzer03,src:000846 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000857,sync:fuzzer03,src:000849 b/tests/suite/certs-coverage/id:000857,sync:fuzzer03,src:000849 deleted file mode 100644 index e45f43bfb5..0000000000 Binary files a/tests/suite/certs-coverage/id:000857,sync:fuzzer03,src:000849 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000858,sync:fuzzer03,src:000851 b/tests/suite/certs-coverage/id:000858,sync:fuzzer03,src:000851 deleted file mode 100644 index c3063b0c46..0000000000 Binary files a/tests/suite/certs-coverage/id:000858,sync:fuzzer03,src:000851 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000859,sync:fuzzer03,src:000853 b/tests/suite/certs-coverage/id:000859,sync:fuzzer03,src:000853 deleted file mode 100644 index 88d6df2393..0000000000 Binary files a/tests/suite/certs-coverage/id:000859,sync:fuzzer03,src:000853 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000860,sync:fuzzer03,src:000850,+cov b/tests/suite/certs-coverage/id:000860,sync:fuzzer03,src:000850,+cov deleted file mode 100644 index 07668fe165..0000000000 Binary files a/tests/suite/certs-coverage/id:000860,sync:fuzzer03,src:000850,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000861,sync:fuzzer03,src:000854,+cov b/tests/suite/certs-coverage/id:000861,sync:fuzzer03,src:000854,+cov deleted file mode 100644 index 55d5b8894c..0000000000 Binary files a/tests/suite/certs-coverage/id:000861,sync:fuzzer03,src:000854,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000862,sync:fuzzer05,src:000857 b/tests/suite/certs-coverage/id:000862,sync:fuzzer05,src:000857 deleted file mode 100644 index 5ce5ff707d..0000000000 Binary files a/tests/suite/certs-coverage/id:000862,sync:fuzzer05,src:000857 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000863,sync:fuzzer05,src:000858 b/tests/suite/certs-coverage/id:000863,sync:fuzzer05,src:000858 deleted file mode 100644 index 2dcec02070..0000000000 Binary files a/tests/suite/certs-coverage/id:000863,sync:fuzzer05,src:000858 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000864,sync:fuzzer05,src:000859 b/tests/suite/certs-coverage/id:000864,sync:fuzzer05,src:000859 deleted file mode 100644 index 35a4086ada..0000000000 Binary files a/tests/suite/certs-coverage/id:000864,sync:fuzzer05,src:000859 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000865,sync:fuzzer01,src:000831 b/tests/suite/certs-coverage/id:000865,sync:fuzzer01,src:000831 deleted file mode 100644 index dbec1df4f9..0000000000 Binary files a/tests/suite/certs-coverage/id:000865,sync:fuzzer01,src:000831 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000866,sync:fuzzer03,src:000859 b/tests/suite/certs-coverage/id:000866,sync:fuzzer03,src:000859 deleted file mode 100644 index 0c9cbb769b..0000000000 Binary files a/tests/suite/certs-coverage/id:000866,sync:fuzzer03,src:000859 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000867,sync:fuzzer05,src:000862 b/tests/suite/certs-coverage/id:000867,sync:fuzzer05,src:000862 deleted file mode 100644 index eeb68f5400..0000000000 Binary files a/tests/suite/certs-coverage/id:000867,sync:fuzzer05,src:000862 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000868,sync:fuzzer08,src:000853 b/tests/suite/certs-coverage/id:000868,sync:fuzzer08,src:000853 deleted file mode 100644 index 362e2a43a3..0000000000 Binary files a/tests/suite/certs-coverage/id:000868,sync:fuzzer08,src:000853 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000869,sync:fuzzer03,src:000863,+cov b/tests/suite/certs-coverage/id:000869,sync:fuzzer03,src:000863,+cov deleted file mode 100644 index 4abba131f6..0000000000 Binary files a/tests/suite/certs-coverage/id:000869,sync:fuzzer03,src:000863,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000870,sync:fuzzer05,src:000864 b/tests/suite/certs-coverage/id:000870,sync:fuzzer05,src:000864 deleted file mode 100644 index 6ca8ac3ea5..0000000000 Binary files a/tests/suite/certs-coverage/id:000870,sync:fuzzer05,src:000864 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000871,sync:fuzzer03,src:000864 b/tests/suite/certs-coverage/id:000871,sync:fuzzer03,src:000864 deleted file mode 100644 index e1e830a8fb..0000000000 Binary files a/tests/suite/certs-coverage/id:000871,sync:fuzzer03,src:000864 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000872,sync:fuzzer05,src:000867 b/tests/suite/certs-coverage/id:000872,sync:fuzzer05,src:000867 deleted file mode 100644 index 818930da5e..0000000000 Binary files a/tests/suite/certs-coverage/id:000872,sync:fuzzer05,src:000867 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000874,src:000873,op:havoc,rep:4 b/tests/suite/certs-coverage/id:000874,src:000873,op:havoc,rep:4 deleted file mode 100644 index 0b43405734..0000000000 Binary files a/tests/suite/certs-coverage/id:000874,src:000873,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000877,sync:fuzzer05,src:000872 b/tests/suite/certs-coverage/id:000877,sync:fuzzer05,src:000872 deleted file mode 100644 index 6cc39ba374..0000000000 Binary files a/tests/suite/certs-coverage/id:000877,sync:fuzzer05,src:000872 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000878,sync:fuzzer03,src:000871 b/tests/suite/certs-coverage/id:000878,sync:fuzzer03,src:000871 deleted file mode 100644 index 1463692048..0000000000 Binary files a/tests/suite/certs-coverage/id:000878,sync:fuzzer03,src:000871 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000879,sync:fuzzer03,src:000872 b/tests/suite/certs-coverage/id:000879,sync:fuzzer03,src:000872 deleted file mode 100644 index 7899501f97..0000000000 Binary files a/tests/suite/certs-coverage/id:000879,sync:fuzzer03,src:000872 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000880,sync:fuzzer03,src:000873 b/tests/suite/certs-coverage/id:000880,sync:fuzzer03,src:000873 deleted file mode 100644 index 7566d5ed28..0000000000 Binary files a/tests/suite/certs-coverage/id:000880,sync:fuzzer03,src:000873 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000881,sync:fuzzer03,src:000874 b/tests/suite/certs-coverage/id:000881,sync:fuzzer03,src:000874 deleted file mode 100644 index 4c6a96b26a..0000000000 Binary files a/tests/suite/certs-coverage/id:000881,sync:fuzzer03,src:000874 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000882,sync:fuzzer03,src:000875 b/tests/suite/certs-coverage/id:000882,sync:fuzzer03,src:000875 deleted file mode 100644 index 06ef58feeb..0000000000 Binary files a/tests/suite/certs-coverage/id:000882,sync:fuzzer03,src:000875 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000883,sync:fuzzer03,src:000876 b/tests/suite/certs-coverage/id:000883,sync:fuzzer03,src:000876 deleted file mode 100644 index b9cd9c38c9..0000000000 Binary files a/tests/suite/certs-coverage/id:000883,sync:fuzzer03,src:000876 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000884,sync:fuzzer08,src:000869 b/tests/suite/certs-coverage/id:000884,sync:fuzzer08,src:000869 deleted file mode 100644 index 1309aa40af..0000000000 Binary files a/tests/suite/certs-coverage/id:000884,sync:fuzzer08,src:000869 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000885,sync:fuzzer03,src:000878 b/tests/suite/certs-coverage/id:000885,sync:fuzzer03,src:000878 deleted file mode 100644 index a6693c9870..0000000000 Binary files a/tests/suite/certs-coverage/id:000885,sync:fuzzer03,src:000878 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000886,sync:fuzzer03,src:000879 b/tests/suite/certs-coverage/id:000886,sync:fuzzer03,src:000879 deleted file mode 100644 index c5574020f7..0000000000 Binary files a/tests/suite/certs-coverage/id:000886,sync:fuzzer03,src:000879 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000887,sync:fuzzer03,src:000880 b/tests/suite/certs-coverage/id:000887,sync:fuzzer03,src:000880 deleted file mode 100644 index ac198dffb8..0000000000 Binary files a/tests/suite/certs-coverage/id:000887,sync:fuzzer03,src:000880 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000888,sync:fuzzer03,src:000881 b/tests/suite/certs-coverage/id:000888,sync:fuzzer03,src:000881 deleted file mode 100644 index 0bc4219f64..0000000000 Binary files a/tests/suite/certs-coverage/id:000888,sync:fuzzer03,src:000881 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000890,sync:fuzzer03,src:000883 b/tests/suite/certs-coverage/id:000890,sync:fuzzer03,src:000883 deleted file mode 100644 index 79631b8233..0000000000 Binary files a/tests/suite/certs-coverage/id:000890,sync:fuzzer03,src:000883 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000891,sync:fuzzer01,src:000860,+cov b/tests/suite/certs-coverage/id:000891,sync:fuzzer01,src:000860,+cov deleted file mode 100644 index 356d8fb0ad..0000000000 Binary files a/tests/suite/certs-coverage/id:000891,sync:fuzzer01,src:000860,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000892,sync:fuzzer03,src:000885 b/tests/suite/certs-coverage/id:000892,sync:fuzzer03,src:000885 deleted file mode 100644 index 30e12f5122..0000000000 Binary files a/tests/suite/certs-coverage/id:000892,sync:fuzzer03,src:000885 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000893,sync:fuzzer05,src:000888 b/tests/suite/certs-coverage/id:000893,sync:fuzzer05,src:000888 deleted file mode 100644 index a21bb33778..0000000000 Binary files a/tests/suite/certs-coverage/id:000893,sync:fuzzer05,src:000888 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000894,sync:fuzzer03,src:000887 b/tests/suite/certs-coverage/id:000894,sync:fuzzer03,src:000887 deleted file mode 100644 index 87f6df12b5..0000000000 Binary files a/tests/suite/certs-coverage/id:000894,sync:fuzzer03,src:000887 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000895,sync:fuzzer03,src:000888 b/tests/suite/certs-coverage/id:000895,sync:fuzzer03,src:000888 deleted file mode 100644 index e82b38e00a..0000000000 Binary files a/tests/suite/certs-coverage/id:000895,sync:fuzzer03,src:000888 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000896,sync:fuzzer03,src:000889 b/tests/suite/certs-coverage/id:000896,sync:fuzzer03,src:000889 deleted file mode 100644 index 222a6627f9..0000000000 Binary files a/tests/suite/certs-coverage/id:000896,sync:fuzzer03,src:000889 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000897,sync:fuzzer04,src:000896 b/tests/suite/certs-coverage/id:000897,sync:fuzzer04,src:000896 deleted file mode 100644 index eb4da81479..0000000000 Binary files a/tests/suite/certs-coverage/id:000897,sync:fuzzer04,src:000896 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000898,sync:fuzzer05,src:000893 b/tests/suite/certs-coverage/id:000898,sync:fuzzer05,src:000893 deleted file mode 100644 index 9b3560b6c7..0000000000 Binary files a/tests/suite/certs-coverage/id:000898,sync:fuzzer05,src:000893 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000899,sync:fuzzer03,src:000892 b/tests/suite/certs-coverage/id:000899,sync:fuzzer03,src:000892 deleted file mode 100644 index fba49f2647..0000000000 Binary files a/tests/suite/certs-coverage/id:000899,sync:fuzzer03,src:000892 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000900,sync:fuzzer03,src:000893 b/tests/suite/certs-coverage/id:000900,sync:fuzzer03,src:000893 deleted file mode 100644 index e9230cf11a..0000000000 Binary files a/tests/suite/certs-coverage/id:000900,sync:fuzzer03,src:000893 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000901,sync:fuzzer05,src:000896 b/tests/suite/certs-coverage/id:000901,sync:fuzzer05,src:000896 deleted file mode 100644 index 2465e3bbc3..0000000000 Binary files a/tests/suite/certs-coverage/id:000901,sync:fuzzer05,src:000896 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000902,sync:fuzzer05,src:000897 b/tests/suite/certs-coverage/id:000902,sync:fuzzer05,src:000897 deleted file mode 100644 index 66d6d40a25..0000000000 Binary files a/tests/suite/certs-coverage/id:000902,sync:fuzzer05,src:000897 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000903,sync:fuzzer03,src:000896 b/tests/suite/certs-coverage/id:000903,sync:fuzzer03,src:000896 deleted file mode 100644 index f8431a05af..0000000000 Binary files a/tests/suite/certs-coverage/id:000903,sync:fuzzer03,src:000896 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000905,sync:fuzzer03,src:000898 b/tests/suite/certs-coverage/id:000905,sync:fuzzer03,src:000898 deleted file mode 100644 index eec8b93818..0000000000 Binary files a/tests/suite/certs-coverage/id:000905,sync:fuzzer03,src:000898 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000906,sync:fuzzer03,src:000899 b/tests/suite/certs-coverage/id:000906,sync:fuzzer03,src:000899 deleted file mode 100644 index 12f82b6ef0..0000000000 Binary files a/tests/suite/certs-coverage/id:000906,sync:fuzzer03,src:000899 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000907,sync:fuzzer03,src:000900 b/tests/suite/certs-coverage/id:000907,sync:fuzzer03,src:000900 deleted file mode 100644 index 7ed636dc54..0000000000 Binary files a/tests/suite/certs-coverage/id:000907,sync:fuzzer03,src:000900 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000908,sync:fuzzer03,src:000901 b/tests/suite/certs-coverage/id:000908,sync:fuzzer03,src:000901 deleted file mode 100644 index 40e30ada3a..0000000000 Binary files a/tests/suite/certs-coverage/id:000908,sync:fuzzer03,src:000901 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000909,sync:fuzzer05,src:000906 b/tests/suite/certs-coverage/id:000909,sync:fuzzer05,src:000906 deleted file mode 100644 index 0d1f7ec9b7..0000000000 Binary files a/tests/suite/certs-coverage/id:000909,sync:fuzzer05,src:000906 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000910,sync:fuzzer05,src:000905 b/tests/suite/certs-coverage/id:000910,sync:fuzzer05,src:000905 deleted file mode 100644 index 79de0353cf..0000000000 Binary files a/tests/suite/certs-coverage/id:000910,sync:fuzzer05,src:000905 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000911,sync:fuzzer05,src:000904 b/tests/suite/certs-coverage/id:000911,sync:fuzzer05,src:000904 deleted file mode 100644 index dda28a83fe..0000000000 Binary files a/tests/suite/certs-coverage/id:000911,sync:fuzzer05,src:000904 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000912,sync:fuzzer03,src:000905 b/tests/suite/certs-coverage/id:000912,sync:fuzzer03,src:000905 deleted file mode 100644 index 352ec309cb..0000000000 Binary files a/tests/suite/certs-coverage/id:000912,sync:fuzzer03,src:000905 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000914,sync:fuzzer03,src:000907 b/tests/suite/certs-coverage/id:000914,sync:fuzzer03,src:000907 deleted file mode 100644 index 8358006d87..0000000000 Binary files a/tests/suite/certs-coverage/id:000914,sync:fuzzer03,src:000907 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000915,sync:fuzzer01,src:000882 b/tests/suite/certs-coverage/id:000915,sync:fuzzer01,src:000882 deleted file mode 100644 index 7739a230b9..0000000000 Binary files a/tests/suite/certs-coverage/id:000915,sync:fuzzer01,src:000882 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000916,sync:fuzzer01,src:000885,+cov b/tests/suite/certs-coverage/id:000916,sync:fuzzer01,src:000885,+cov deleted file mode 100644 index 863b1f763f..0000000000 Binary files a/tests/suite/certs-coverage/id:000916,sync:fuzzer01,src:000885,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000917,sync:fuzzer03,src:000910,+cov b/tests/suite/certs-coverage/id:000917,sync:fuzzer03,src:000910,+cov deleted file mode 100644 index 6cbaa38a6f..0000000000 Binary files a/tests/suite/certs-coverage/id:000917,sync:fuzzer03,src:000910,+cov and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000918,sync:fuzzer03,src:000911 b/tests/suite/certs-coverage/id:000918,sync:fuzzer03,src:000911 deleted file mode 100644 index 5e3b44b568..0000000000 Binary files a/tests/suite/certs-coverage/id:000918,sync:fuzzer03,src:000911 and /dev/null differ diff --git a/tests/suite/certs-coverage/id:000919,sync:fuzzer06,src:000909 b/tests/suite/certs-coverage/id:000919,sync:fuzzer06,src:000909 deleted file mode 100644 index 5b68f8fa81..0000000000 Binary files a/tests/suite/certs-coverage/id:000919,sync:fuzzer06,src:000909 and /dev/null differ diff --git a/tests/suite/certs/create-chain.sh b/tests/suite/certs/create-chain.sh index 5315e3cd51..c616189e63 100755 --- a/tests/suite/certs/create-chain.sh +++ b/tests/suite/certs/create-chain.sh @@ -16,6 +16,11 @@ LAST=`expr ${NUM} - 1` rm -rf "${OUTPUT}" mkdir -p "${OUTPUT}" +#KEY_TYPE_ROOT="--key-type rsa-pss --bits 2048 --hash sha384 --salt-size 64" +KEY_TYPE_ROOT="--key-type ecdsa --curve secp521r1" +KEY_TYPE_SUBCA="--key-type rsa-pss --bits 2048 --hash sha256 --salt-size 64" +KEY_TYPE="--key-type ecdsa --curve secp521r1" + counter=0 while test ${counter} -lt ${NUM}; do if test ${counter} = ${LAST}; then @@ -24,8 +29,8 @@ while test ${counter} -lt ${NUM}; do name="CA-${counter}" fi - "${CERTTOOL}" --generate-privkey >"${OUTPUT}/${name}.key" 2>/dev/null if test ${counter} = 0; then + "${CERTTOOL}" ${KEY_TYPE} --generate-privkey >"${OUTPUT}/${name}.key" 2>/dev/null # ROOT CA echo "cn = ${name}" >"${TEMPLATE}" echo "ca" >>"${TEMPLATE}" @@ -40,6 +45,7 @@ while test ${counter} -lt ${NUM}; do "${OUTPUT}/${name}.crl" --template "${TEMPLATE}" 2>/dev/null else if test ${counter} = ${LAST}; then + "${CERTTOOL}" ${KEY_TYPE} --generate-privkey >"${OUTPUT}/${name}.key" 2>/dev/null # END certificate echo "cn = ${name}" >"${TEMPLATE}" echo "dns_name = localhost" >>"${TEMPLATE}" @@ -49,8 +55,9 @@ while test ${counter} -lt ${NUM}; do "${CERTTOOL}" --generate-certificate --load-privkey "${OUTPUT}/${name}.key" \ --load-ca-certificate "${OUTPUT}/${prev_name}.crt" \ --load-ca-privkey "${OUTPUT}/${prev_name}.key" \ - --outfile "${OUTPUT}/${name}.crt" --template "${TEMPLATE}" 2>/dev/null + --outfile "${OUTPUT}/${name}.crt" --template "${TEMPLATE}" -d 4 #2>/dev/null else + "${CERTTOOL}" ${KEY_TYPE_SUBCA} --generate-privkey >"${OUTPUT}/${name}.key" -d 4 #2>/dev/null # intermediate CA echo "cn = ${name}" >"${TEMPLATE}" echo "ca" >>"${TEMPLATE}" @@ -60,7 +67,7 @@ while test ${counter} -lt ${NUM}; do "${CERTTOOL}" --generate-certificate --load-privkey "${OUTPUT}/${name}.key" \ --load-ca-certificate "${OUTPUT}/${prev_name}.crt" \ --load-ca-privkey "${OUTPUT}/${prev_name}.key" \ - --outfile "${OUTPUT}/${name}.crt" --template "${TEMPLATE}" 2>/dev/null + --outfile "${OUTPUT}/${name}.crt" --template "${TEMPLATE}" -d 4 #2>/dev/null fi fi diff --git a/tests/suite/ciphersuite/registry-ciphers.xslt b/tests/suite/ciphersuite/registry-ciphers.xslt index 724163ed02..ff58c06822 100644 --- a/tests/suite/ciphersuite/registry-ciphers.xslt +++ b/tests/suite/ciphersuite/registry-ciphers.xslt @@ -1,8 +1,8 @@ - + diff --git a/tests/suite/ciphersuite/tls-parameters.xml b/tests/suite/ciphersuite/tls-parameters.xml index f82aee200d..a648d07945 100644 --- a/tests/suite/ciphersuite/tls-parameters.xml +++ b/tests/suite/ciphersuite/tls-parameters.xml @@ -1,7 +1,7 @@ - + Transport Layer Security (TLS) Parameters Transport Layer Security (TLS) 2005-08-23 diff --git a/tests/suite/crl-test b/tests/suite/crl-test deleted file mode 100755 index 2f52c94496..0000000000 --- a/tests/suite/crl-test +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2014 Red Hat -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# GnuTLS is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at -# your option) any later version. -# -# GnuTLS is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -srcdir="${srcdir:-.}" -DIFF="${DIFF:-diff}" -CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" - -if ! test -x "${CERTTOOL}"; then - exit 77 -fi - -if ! test -z "${VALGRIND}"; then - VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" -fi - -TMPFILE=long.$$.pem.tmp - -rm -f $TMPFILE -${VALGRIND} "${CERTTOOL}" --crl-info --inder --infile "${srcdir}/crl/long.crl" --outfile $TMPFILE -rc=$? - -# We're done. -if test "${rc}" != "0"; then - echo "CRL decoding failed 1!" - exit ${rc} -fi - -${DIFF} -I ^warning "${srcdir}/crl/long.pem" "$TMPFILE" || ${DIFF} -I ^warning --strip-trailing-cr "${srcdir}/crl/long.pem" $TMPFILE -rc=$? - -if test "${rc}" != "0"; then - echo "CRL decoding failed 2!" - exit ${rc} -fi - -rm -f $TMPFILE - -exit 0 diff --git a/tests/suite/eagain-cli.c b/tests/suite/eagain-cli.c new file mode 100644 index 0000000000..cdd9ab7589 --- /dev/null +++ b/tests/suite/eagain-cli.c @@ -0,0 +1,260 @@ +/* + * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * Copyright (C) 2018-2020 Red Hat, Inc. + * Copyright (C) 2010 Mike Blumenkrantz + * + * This file is part of GnuTLS. + * + * GnuTLS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../utils.h" +#include +#include +#include +#include + +static int done = 0; +EV_P; +ev_io remote_w; +gnutls_session_t session; + +static const char +*SSL_GNUTLS_PRINT_HANDSHAKE_STATUS(gnutls_handshake_description_t status) +{ + return gnutls_handshake_description_get_name(status); +} + +/* Connects to the peer and returns a socket + * descriptor. + */ +static int tcp_connect(void) +{ + const char *PORT = getenv("PORT"); + const char *SERVER = "127.0.0.1"; //verisign.com + int err, sd; + int flag = 1, curstate = 0; + struct sockaddr_in sa; + + /* sets some fd options such as nonblock */ + sd = socket(AF_INET, SOCK_STREAM, 0); + setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (const void *)&curstate, + sizeof(curstate)); + + + memset(&sa, '\0', sizeof(sa)); + sa.sin_family = AF_INET; + sa.sin_port = htons(atoi(PORT)); + + inet_pton(AF_INET, SERVER, &sa.sin_addr); + + err = connect(sd, (struct sockaddr *)&sa, sizeof(sa)); + if ((err < 0) && (errno != EINPROGRESS)) { + fprintf(stderr, "Connect error\n"); + exit(1); + } + + /* lower the send buffers to force EAGAIN */ + assert(setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)) >= 0); + assert(fcntl(sd, F_SETFL, O_NONBLOCK)>=0); + + return sd; +} + +static void tcp_close(int sd) +{ + shutdown(sd, SHUT_RDWR); /* no more receptions */ + close(sd); +} + +/* We provide this helper to ensure that we test EAGAIN while writing + * even on a reliable connection */ +static ssize_t +_client_push(gnutls_transport_ptr_t tr, const void *data, size_t len) +{ + struct timeval tv; + + assert(gettimeofday(&tv, NULL) >= 0); + + if (tv.tv_usec % 2 == 0) { + errno = EAGAIN; + return -1; + } + + return send((unsigned long)tr, data, len, 0); +} + +static ssize_t +_client_pull(gnutls_transport_ptr_t tr, void *data, size_t len) +{ + struct timeval tv; + + assert(gettimeofday(&tv, NULL) >= 0); + + if (tv.tv_usec % 2 == 0) { + errno = EAGAIN; + return -1; + } + + return recv((unsigned long)tr, data, len, 0); +} + +static int _client_pull_timeout(gnutls_transport_ptr_t ptr, + unsigned int ms) +{ + return gnutls_system_recv_timeout(ptr, ms); +} + +static void _process_data(EV_P_ ev_io * w, int revents) +{ + static int ret = -1, lastret = 0; + static unsigned int count = 0; + static int prev_direction; + + if (!done && (revents & (EV_WRITE|EV_READ))) { + if (lastret == GNUTLS_E_AGAIN) { + if (revents & EV_WRITE) { + assert(prev_direction == 1); + } + if (revents & EV_READ) { + assert(prev_direction == 0); + } + } + + lastret = ret; + ret = gnutls_handshake(session); + count++; + + if (gnutls_record_get_direction(session)) { + ev_io_stop(EV_A_ &remote_w); + ev_io_set(&remote_w, gnutls_transport_get_int(session), EV_WRITE); + ev_io_start(EV_A_ &remote_w); + prev_direction = 1; + } else { + ev_io_stop(EV_A_ &remote_w); + ev_io_set(&remote_w, gnutls_transport_get_int(session), EV_READ); + ev_io_start(EV_A_ &remote_w); + prev_direction = 0; + } + /* avoid printing messages infinity times */ + if (lastret != ret && ret != 0 && ret != GNUTLS_E_AGAIN) { + fprintf(stderr, "gnutls returned with: %s - %s\n", + gnutls_strerror_name(ret), + gnutls_strerror(ret)); + if ((ret == GNUTLS_E_WARNING_ALERT_RECEIVED) + || (ret == GNUTLS_E_FATAL_ALERT_RECEIVED)) + fprintf(stderr, "Also received alert: %s\n", + gnutls_alert_get_name + (gnutls_alert_get(session))); + fprintf(stderr, "last out: %s\n", + SSL_GNUTLS_PRINT_HANDSHAKE_STATUS + (gnutls_handshake_get_last_out(session))); + fprintf(stderr, "last in: %s\n", + SSL_GNUTLS_PRINT_HANDSHAKE_STATUS + (gnutls_handshake_get_last_in(session))); + } + + if (gnutls_error_is_fatal(ret)) { + fprintf(stderr, "yarrr this be an error!"); + exit(1); + } + + } + + if (ret == GNUTLS_E_SUCCESS) { + count = 0; + ret = -1; + done = 1; + lastret = 0; + ev_io_stop(EV_A_ & remote_w); + } + + return; +} + +static void try(const char *name, const char *prio) +{ + gnutls_certificate_credentials_t c_certcred; + int sd, i, ret; + + global_init(); + + gnutls_certificate_allocate_credentials(&c_certcred); + + printf("%s: testing priority %s\n", name, prio); + loop = EV_DEFAULT; + + for (i = 0; i < 4; i++) { + done = 0; + + assert(gnutls_init(&session, GNUTLS_CLIENT) >= 0); + gnutls_transport_set_push_function(session, _client_push); + gnutls_transport_set_pull_function(session, _client_pull); + gnutls_transport_set_pull_timeout_function(session, _client_pull_timeout); + gnutls_handshake_set_timeout(session, + GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT); + + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + c_certcred); + gnutls_server_name_set(session, GNUTLS_NAME_DNS, + "localhost", strlen("localhost")); + + sd = tcp_connect(); + + /* associate gnutls with socket */ + gnutls_transport_set_int(session, sd); + + /* add a callback for data being available for send/receive on socket */ + ev_io_init(&remote_w, _process_data, sd, EV_WRITE); + ev_io_start(EV_A_ & remote_w); + + /* begin main loop */ + ev_loop(EV_A_ 0); + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_RDWR); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + gnutls_deinit(session); + session = NULL; + + tcp_close(sd); + } + + ev_loop_destroy(loop); + gnutls_certificate_free_credentials(c_certcred); + + return; +} + +int main(void) +{ + try("tls 1.2 (dhe)", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA"); + try("tls 1.2 (rsa)", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA"); + try("tls 1.3", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3"); + try("default", "NORMAL"); + return 0; +} diff --git a/tests/suite/eagain.sh b/tests/suite/eagain.sh index 235a5390ec..d012ad8cde 100755 --- a/tests/suite/eagain.sh +++ b/tests/suite/eagain.sh @@ -33,7 +33,10 @@ SERV="${SERV} -q" eval "${GETPORT}" -launch_server $$ --echo --priority "NORMAL:+ANON-DH" --dhparams "${srcdir}/params.dh" +KEY1=${srcdir}/../../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../../doc/credentials/x509/cert-rsa.pem + +launch_server $$ --echo --x509keyfile ${KEY1} --x509certfile ${CERT1} PID=$! wait_server ${PID} diff --git a/tests/suite/ecore/eina_config.h b/tests/suite/ecore/eina_config.h deleted file mode 100644 index 14ba859a29..0000000000 --- a/tests/suite/ecore/eina_config.h +++ /dev/null @@ -1,52 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_CONFIG_H_ -#define EINA_CONFIG_H_ - -#ifdef EINA_MAGIC_DEBUG -#undef EINA_MAGIC_DEBUG -#endif -#define EINA_MAGIC_DEBUG - -#ifdef EINA_DEFAULT_MEMPOOL -#undef EINA_DEFAULT_MEMPOOL -#endif - - -#ifdef EINA_SAFETY_CHECKS -#undef EINA_SAFETY_CHECKS -#endif -#define EINA_SAFETY_CHECKS - -#ifdef EINA_HAVE_INTTYPES_H -#undef EINA_HAVE_INTTYPES_H -#endif -#define EINA_HAVE_INTTYPES_H - -#ifdef EINA_HAVE_STDINT_H -#undef EINA_HAVE_STDINT_H -#endif -#define EINA_HAVE_STDINT_H - -#ifdef EINA_SIZEOF_WCHAR_T -#undef EINA_SIZEOF_WCHAR_T -#endif -#define EINA_SIZEOF_WCHAR_T 4 - -#endif /* EINA_CONFIG_H_ */ diff --git a/tests/suite/ecore/src/include/Eina.h b/tests/suite/ecore/src/include/Eina.h deleted file mode 100644 index a7bda06aa8..0000000000 --- a/tests/suite/ecore/src/include/Eina.h +++ /dev/null @@ -1,164 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008-2010 Enlightenment Developers: - * Albin "Lutin" Tonnerre - * Alexandre "diaxen" Becoulet - * Andre Dieb - * Arnaud de Turckheim "quarium" - * Carsten Haitzler - * Cedric Bail - * Corey "atmos" Donohoe - * Fabiano Fidêncio - * Gustavo Chaves - * Gustavo Sverzut Barbieri - * Jorge Luis "turran" Zapata - * Peter "pfritz" Wehrfritz - * Raphael Kubo da Costa - * Tilman Sauerbeck - * Vincent "caro" Torri - * Tom Hacohen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_H_ -#define EINA_H_ - -/** - * @mainpage Eina - * - * @author Albin "Lutin" Tonnerre - * @author Alexandre "diaxen" Becoulet - * @author Andre Dieb - * @author Arnaud de Turckheim "quarium" - * @author Carsten Haitzler - * @author Cedric Bail - * @author Corey "atmos" Donohoe - * @author Fabiano Fidêncio - * @author Gustavo Chaves - * @author Gustavo Sverzut Barbieri - * @author Jorge Luis "turran" Zapata - * @author Peter "pfritz" Wehrfritz - * @author Raphael Kubo da Costa - * @author Tilman Sauerbeck - * @author Vincent "caro" Torri - * @author Tom Hacohen - * @date 2008-2010 - * - * @section eina_intro_sec Introduction - * - * The Eina library is a library that implements an API for data types - * in an efficient way. It also provides some useful tools like - * openin shared libraries, errors management, type conversion, - * time accounting and memory pool. - * - * This library is cross-platform and can be compiled and used on - * Linux, BSD, Opensolaris and Windows (XP and CE). - * - * The data types that are available are (see @ref Eina_Data_Types_Group): - * @li @ref Eina_Array_Group standard array of @c void* data. - * @li @ref Eina_Hash_Group standard hash of @c void* data. - * @li @ref Eina_Inline_List_Group list with nodes inlined into user type. - * @li @ref Eina_List_Group standard list of @c void* data. - * @li @ref Eina_Matrixsparse_Group sparse matrix of @c void* data. - * @li @ref Eina_Rbtree_Group red-black tree with nodes inlined into user type. - * @li @ref Eina_String_Buffer_Group mutable string to prepend, insert or append strings to a buffer. - * @li @ref Eina_Stringshare_Group saves memory by sharing read-only string references. - * @li @ref Eina_Tiler_Group split, merge and navigates into 2D tiled regions. - * @li @ref Eina_Trash_Group container of unused but allocated data. - * - * The tools that are available are (see @ref Eina_Tools_Group): - * @li @ref Eina_Benchmark_Group helper to write benchmarks. - * @li @ref Eina_Convert_Group faster conversion from strings to integers, double, etc. - * @li @ref Eina_Counter_Group measures number of calls and their time. - * @li @ref Eina_Error_Group error identifiers. - * @li @ref Eina_File_Group simple file list and path split. - * @li @ref Eina_Lalloc_Group simple lazy allocator. - * @li @ref Eina_Log_Group full-featured logging system. - * @li @ref Eina_Magic_Group provides runtime type checking. - * @li @ref Eina_Memory_Pool_Group abstraction for various memory allocators. - * @li @ref Eina_Module_Group lists, loads and share modules using Eina_Module standard. - * @li @ref Eina_Rectangle_Group rectangle structure and standard manipulation methods. - * @li @ref Eina_Safety_Checks_Group extra checks that will report unexpected conditions and can be disabled at compile time. - * @li @ref Eina_String_Group a set of functions that manages C strings. - * - * @defgroup Eina_Data_Types_Group Data types. - * - * Eina provide easy to use and optimized data types and structures. - * - * - * @defgroup Eina_Containers_Group Containers - * - * Containers are data types that hold data and allow iteration over - * their elements with an @ref Eina_Iterator_Group, or eventually an - * @ref Eina_Accessor_Group. - * - * - * @defgroup Eina_Tools_Group Tools - * - * Eina tools aims to help application development, providing ways to - * make it safer, log errors, manage memory more efficiently and more. - */ - -#include - -#ifdef _WIN32 -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#include "eina_config.h" -#include "eina_types.h" -#include "eina_main.h" -#include "eina_fp.h" -#include "eina_rectangle.h" -#include "eina_inlist.h" -#include "eina_file.h" -#include "eina_list.h" -#include "eina_hash.h" -#include "eina_trash.h" -#include "eina_lalloc.h" -#include "eina_module.h" -#include "eina_mempool.h" -#include "eina_error.h" -#include "eina_log.h" -#include "eina_array.h" -#include "eina_binshare.h" -#include "eina_stringshare.h" -#include "eina_ustringshare.h" -#include "eina_magic.h" -#include "eina_counter.h" -#include "eina_rbtree.h" -#include "eina_accessor.h" -#include "eina_iterator.h" -#include "eina_benchmark.h" -#include "eina_convert.h" -#include "eina_cpu.h" -#include "eina_sched.h" -#include "eina_tiler.h" -#include "eina_hamster.h" -#include "eina_matrixsparse.h" -#include "eina_str.h" -#include "eina_strbuf.h" -#include "eina_ustrbuf.h" -#include "eina_unicode.h" -#include "eina_quadtree.h" - -#ifdef __cplusplus -} -#endif -#endif /* EINA_H */ diff --git a/tests/suite/ecore/src/include/eina_accessor.h b/tests/suite/ecore/src/include/eina_accessor.h deleted file mode 100644 index f3f29a4849..0000000000 --- a/tests/suite/ecore/src/include/eina_accessor.h +++ /dev/null @@ -1,151 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_ACCESSOR_H__ -#define EINA_ACCESSOR_H__ - -#include "eina_config.h" - -#include "eina_types.h" -#include "eina_magic.h" - -/** - * @addtogroup Eina_Content_Access_Group Content Access - * - * @{ - */ - -/** - * @defgroup Eina_Accessor_Group Accessor Functions - * - * @{ - */ - -/** - * @typedef Eina_Accessor - * Type for accessors. - */ -typedef struct _Eina_Accessor Eina_Accessor; - -typedef Eina_Bool(*Eina_Accessor_Get_At_Callback) (Eina_Accessor * it, - unsigned int index, - void **data); -typedef void *(*Eina_Accessor_Get_Container_Callback) (Eina_Accessor * it); -typedef void (*Eina_Accessor_Free_Callback) (Eina_Accessor * it); -typedef Eina_Bool(*Eina_Accessor_Lock_Callback) (Eina_Accessor * it); - -struct _Eina_Accessor { -#define EINA_ACCESSOR_VERSION 1 - int version; - - Eina_Accessor_Get_At_Callback get_at EINA_ARG_NONNULL(1, - 3) - EINA_WARN_UNUSED_RESULT; - Eina_Accessor_Get_Container_Callback get_container - EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; - Eina_Accessor_Free_Callback free EINA_ARG_NONNULL(1); - - Eina_Accessor_Lock_Callback lock EINA_WARN_UNUSED_RESULT; - Eina_Accessor_Lock_Callback unlock EINA_WARN_UNUSED_RESULT; - -#define EINA_MAGIC_ACCESSOR 0x98761232 - EINA_MAGIC}; - -#define FUNC_ACCESSOR_GET_AT(Function) ((Eina_Accessor_Get_At_Callback)Function) -#define FUNC_ACCESSOR_GET_CONTAINER(Function) ((Eina_Accessor_Get_Container_Callback)Function) -#define FUNC_ACCESSOR_FREE(Function) ((Eina_Accessor_Free_Callback)Function) -#define FUNC_ACCESSOR_LOCK(Function) ((Eina_Accessor_Lock_Callback)Function) - -EAPI void eina_accessor_free(Eina_Accessor * accessor) EINA_ARG_NONNULL(1); -EAPI Eina_Bool eina_accessor_data_get(Eina_Accessor * accessor, - unsigned int position, - void **data) EINA_ARG_NONNULL(1); -EAPI void *eina_accessor_container_get(Eina_Accessor * - accessor) EINA_ARG_NONNULL(1) - EINA_PURE; -EAPI void eina_accessor_over(Eina_Accessor * accessor, Eina_Each_Cb cb, - unsigned int start, unsigned int end, - const void *fdata) EINA_ARG_NONNULL(1, 2); -EAPI Eina_Bool eina_accessor_lock(Eina_Accessor * - accessor) EINA_ARG_NONNULL(1); -EAPI Eina_Bool eina_accessor_unlock(Eina_Accessor * - accessor) EINA_ARG_NONNULL(1); - -/** - * @def EINA_ACCESSOR_FOREACH - * @brief Macro to iterate over all elements easily. - * - * @param accessor The accessor to use. - * @param counter A counter used by eina_accessor_data_get() when - * iterating over the container. - * @param data Where to store * data, must be a pointer support getting - * its address since * eina_accessor_data_get() requires a pointer to - * pointer! - * - * This macro allows a convenient way to loop over all elements in an - * accessor, very similar to EINA_LIST_FOREACH(). - * - * This macro can be used for freeing the data of a list, like in the - * following example. It has the same goal as the one documented in - * EINA_LIST_FOREACH(), but using accessors: - * - * @code - * Eina_List *list; - * Eina_Accessor *accessor; - * unsigned int i; - * char *data; - * - * // list is already filled, - * // its elements are just duplicated strings - * - * accessor = eina_list_accessor_new(list); - * EINA_ACCESSOR_FOREACH(accessor, i, data) - * free(data); - * eina_accessor_free(accessor); - * eina_list_free(list); - * @endcode - * - * @note if the datatype provides both iterators and accessors prefer - * to use iterators to iterate over, as they're likely to be more - * optimized for such task. - * - * @note this example is not optimal algorithm to release a list since - * it will walk the list twice, but it serves as an example. For - * optimized version use EINA_LIST_FREE() - * - * @warning unless explicitly stated in functions returning accessors, - * do not modify the accessed object while you walk it, in this - * example using lists, do not remove list nodes or you might - * crash! This is not a limitiation of accessors themselves, - * rather in the accessors implementations to keep them as simple - * and fast as possible. - */ -#define EINA_ACCESSOR_FOREACH(accessor, counter, data) \ - for ((counter) = 0; \ - eina_accessor_data_get((accessor), (counter), (void **)&(data)); \ - (counter)++) - -/** - * @} - */ - -/** - * @} - */ - -#endif diff --git a/tests/suite/ecore/src/include/eina_array.h b/tests/suite/ecore/src/include/eina_array.h deleted file mode 100644 index fa647dcef3..0000000000 --- a/tests/suite/ecore/src/include/eina_array.h +++ /dev/null @@ -1,163 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_ARRAY_H_ -#define EINA_ARRAY_H_ - -#include - -#include "eina_config.h" - -#include "eina_types.h" -#include "eina_error.h" -#include "eina_iterator.h" -#include "eina_accessor.h" -#include "eina_magic.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @addtogroup Eina_Containers_Group Containers - * - * @{ - */ - -/** - * @defgroup Eina_Array_Group Array - * - * @{ - */ - -/** - * @typedef Eina_Array - * Type for a generic vector. - */ -typedef struct _Eina_Array Eina_Array; - -/** - * @typedef Eina_Array_Iterator - * Type for an iterator on arrays, used with #EINA_ARRAY_ITER_NEXT. - */ -typedef void **Eina_Array_Iterator; - -/** - * @struct _Eina_Array - * Type for an array of data. - */ -struct _Eina_Array { -#define EINA_ARRAY_VERSION 1 - int version; - /**< Should match EINA_ARRAY_VERSION used when compiled your apps, provided for ABI compatibility */ - - void **data; - /**< Pointer to a vector of pointer to payload */ - unsigned int total; - /**< Total number of slots in the vector */ - unsigned int count; - /**< Number of active slots in the vector */ - unsigned int step; - /**< How much must we grow the vector when it is full */ - EINA_MAGIC}; - -EAPI Eina_Array *eina_array_new(unsigned int step) -EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_WARN_UNUSED_RESULT; -EAPI void eina_array_free(Eina_Array * array) EINA_ARG_NONNULL(1); -EAPI void eina_array_step_set(Eina_Array * array, - unsigned int sizeof_eina_array, - unsigned int step) EINA_ARG_NONNULL(1); -EAPI void eina_array_clean(Eina_Array * array) EINA_ARG_NONNULL(1); -EAPI void eina_array_flush(Eina_Array * array) EINA_ARG_NONNULL(1); -EAPI Eina_Bool eina_array_remove(Eina_Array * array, - Eina_Bool(*keep) (void *data, - void *gdata), - void *gdata) EINA_ARG_NONNULL(1, 2); -static inline Eina_Bool eina_array_push(Eina_Array * array, - const void *data) -EINA_ARG_NONNULL(1, 2); -static inline void *eina_array_pop(Eina_Array * array) EINA_ARG_NONNULL(1); -static inline void *eina_array_data_get(const Eina_Array * array, - unsigned int idx) -EINA_ARG_NONNULL(1); -static inline void eina_array_data_set(const Eina_Array * array, - unsigned int idx, - const void *data) -EINA_ARG_NONNULL(1, 3); -static inline unsigned int eina_array_count_get(const Eina_Array * - array) EINA_ARG_NONNULL(1); -EAPI Eina_Iterator *eina_array_iterator_new(const Eina_Array * array) -EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -EAPI Eina_Accessor *eina_array_accessor_new(const Eina_Array * array) -EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -static inline Eina_Bool eina_array_foreach(Eina_Array * array, - Eina_Each_Cb cb, void *data); -/** - * @def EINA_ARRAY_ITER_NEXT - * @brief Macro to iterate over an array easily. - * - * @param array The array to iterate over. - * @param index The integer number that is increased while itareting. - * @param item The data - * @param iterator The iterator - * - * This macro allows the iteration over @p array in an easy way. It - * iterates from the first element to the last one. @p index is an - * integer that increases from 0 to the number of elements. @p item is - * the data of each element of @p array, so it is a pointer to a type - * chosen by the user. @p iterator is of type #Eina_Array_Iterator. - * - * This macro can be used for freeing the data of an array, like in - * the following example: - * - * @code - * Eina_Array *array; - * char *item; - * Eina_Array_Iterator iterator; - * unsigned int i; - * - * // array is already filled, - * // its elements are just duplicated strings, - * // EINA_ARRAY_ITER_NEXT will be used to free those strings - * - * EINA_ARRAY_ITER_NEXT(array, i, item, iterator) - * free(item); - * @endcode - */ -#define EINA_ARRAY_ITER_NEXT(array, index, item, iterator) \ - for (index = 0, iterator = (array)->data; \ - (index < eina_array_count_get(array)) && ((item = *((iterator)++))); \ - ++(index)) - -#include "eina_inline_array.x" - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#endif diff --git a/tests/suite/ecore/src/include/eina_benchmark.h b/tests/suite/ecore/src/include/eina_benchmark.h deleted file mode 100644 index 2fd7b8cf50..0000000000 --- a/tests/suite/ecore/src/include/eina_benchmark.h +++ /dev/null @@ -1,75 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_BENCHMARK_H_ -#define EINA_BENCHMARK_H_ - -#include "eina_array.h" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_Benchmark_Group Benchmark - * - * @{ - */ - -/** - * @typedef Eina_Benchmark - * Type for a benchmark. - */ -typedef struct _Eina_Benchmark Eina_Benchmark; - -/** - * @typedef Eina_Benchmark_Specimens - * Type for a test function to be called when running a benchmark. - */ -typedef void (*Eina_Benchmark_Specimens) (int request); - -/** - * @def EINA_BENCHMARK - * @brief cast to an #Eina_Benchmark_Specimens. - * - * @param function The function to cast. - * - * This macro casts @p function to Eina_Benchmark_Specimens. - */ -#define EINA_BENCHMARK(function) ((Eina_Benchmark_Specimens)function) - -EAPI Eina_Benchmark *eina_benchmark_new(const char *name, const char *run); -EAPI void eina_benchmark_free(Eina_Benchmark * bench); -EAPI Eina_Bool eina_benchmark_register(Eina_Benchmark * bench, - const char *name, - Eina_Benchmark_Specimens bench_cb, - int count_start, - int count_end, int count_set); -EAPI Eina_Array *eina_benchmark_run(Eina_Benchmark * bench); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_BENCHMARK_H_ */ diff --git a/tests/suite/ecore/src/include/eina_binshare.h b/tests/suite/ecore/src/include/eina_binshare.h deleted file mode 100644 index 471665ad30..0000000000 --- a/tests/suite/ecore/src/include/eina_binshare.h +++ /dev/null @@ -1,106 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - * - * This file incorporates work covered by the following copyright and - * permission notice: - * - * Copyright (C) 2008 Peter Wehrfritz - * - * 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 of the Software and its Copyright notices. In addition publicly - * documented acknowledgment must be given that this software has been used if no - * source code of this software is made available publicly. This includes - * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing - * documents or any documentation provided with any product containing this - * software. This License does not apply to any software that links to the - * libraries provided by this software (statically or dynamically), but only to - * the software provided. - * - * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice - * and it's intent. - * - * 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 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. - */ - -#ifndef EINA_BINSHARE_H_ -#define EINA_BINSHARE_H_ - -#include "eina_types.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @defgroup Eina_Binshare_Group Binary Share - * - * @{ - */ - -EAPI Eina_Bool eina_binshare_init(void); -EAPI Eina_Bool eina_binshare_shutdown(void); -EAPI const void *eina_binshare_add_length(const void *obj, - unsigned int olen) -EINA_PURE EINA_WARN_UNUSED_RESULT; -EAPI const void *eina_binshare_ref(const void *obj); -EAPI void eina_binshare_del(const void *obj); -EAPI int eina_binshare_length(const void *obj) EINA_WARN_UNUSED_RESULT; -EAPI void eina_binshare_dump(void); - -/** - * @brief Retrieve an instance of a blob for use in a program. - * - * @param ptr The binary blob to retrieve an instance of. - * @return A pointer to an instance of the string on success. - * @c NULL on failure. - * - * This macro retrieves an instance of @p obj. If @p obj is - * @c NULL, then @c NULL is returned. If @p obj is already stored, it - * is just returned and its reference counter is increased. Otherwise - * it is added to the blobs to be searched and a duplicated blob - * of @p obj is returned. - * - * This macro essentially calls eina_binshare_add_length with ptr and sizeof(*ptr) - * as the parameters. It's useful for pointers to structures. - * - * @see eina_stringshare_add_length() - */ -#define eina_binshare_add(ptr) eina_binshare_add_length(ptr, sizeof(*ptr)) - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_STRINGSHARE_H_ */ diff --git a/tests/suite/ecore/src/include/eina_config.h b/tests/suite/ecore/src/include/eina_config.h deleted file mode 100644 index 14ba859a29..0000000000 --- a/tests/suite/ecore/src/include/eina_config.h +++ /dev/null @@ -1,52 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_CONFIG_H_ -#define EINA_CONFIG_H_ - -#ifdef EINA_MAGIC_DEBUG -#undef EINA_MAGIC_DEBUG -#endif -#define EINA_MAGIC_DEBUG - -#ifdef EINA_DEFAULT_MEMPOOL -#undef EINA_DEFAULT_MEMPOOL -#endif - - -#ifdef EINA_SAFETY_CHECKS -#undef EINA_SAFETY_CHECKS -#endif -#define EINA_SAFETY_CHECKS - -#ifdef EINA_HAVE_INTTYPES_H -#undef EINA_HAVE_INTTYPES_H -#endif -#define EINA_HAVE_INTTYPES_H - -#ifdef EINA_HAVE_STDINT_H -#undef EINA_HAVE_STDINT_H -#endif -#define EINA_HAVE_STDINT_H - -#ifdef EINA_SIZEOF_WCHAR_T -#undef EINA_SIZEOF_WCHAR_T -#endif -#define EINA_SIZEOF_WCHAR_T 4 - -#endif /* EINA_CONFIG_H_ */ diff --git a/tests/suite/ecore/src/include/eina_convert.h b/tests/suite/ecore/src/include/eina_convert.h deleted file mode 100644 index e4a56d6d00..0000000000 --- a/tests/suite/ecore/src/include/eina_convert.h +++ /dev/null @@ -1,79 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric BAIL, Vincent Torri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_CONVERT_H_ -#define EINA_CONVERT_H_ - -#include "eina_types.h" -#include "eina_error.h" - -#include "eina_fp.h" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_Convert_Group Convert - * - * @{ - */ - -/** - * @var EINA_ERROR_CONVERT_P_NOT_FOUND - * Error identifier corresponding to string not containing 'p'. - */ -EAPI extern Eina_Error EINA_ERROR_CONVERT_P_NOT_FOUND; - -/** - * @var EINA_ERROR_CONVERT_0X_NOT_FOUND - * Error identifier corresponding to string not containing '0x'. - */ -EAPI extern Eina_Error EINA_ERROR_CONVERT_0X_NOT_FOUND; - -/** - * @var EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH - * Error identifier corresponding to length of the string being too small. - */ -EAPI extern Eina_Error EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH; - -EAPI int eina_convert_itoa(int n, char *s) EINA_ARG_NONNULL(2); -EAPI int eina_convert_xtoa(unsigned int n, char *s) EINA_ARG_NONNULL(2); - -EAPI int eina_convert_dtoa(double d, char *des) EINA_ARG_NONNULL(2); -EAPI Eina_Bool eina_convert_atod(const char *src, - int length, - long long *m, - long *e) EINA_ARG_NONNULL(1, 3, 4); - -EAPI int eina_convert_fptoa(Eina_F32p32 fp, char *des) EINA_ARG_NONNULL(2); -EAPI Eina_Bool eina_convert_atofp(const char *src, - int length, - Eina_F32p32 * fp) EINA_ARG_NONNULL(1, 3); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_CONVERT_H_ */ diff --git a/tests/suite/ecore/src/include/eina_counter.h b/tests/suite/ecore/src/include/eina_counter.h deleted file mode 100644 index 443586a7bb..0000000000 --- a/tests/suite/ecore/src/include/eina_counter.h +++ /dev/null @@ -1,58 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_COUNTER_H_ -#define EINA_COUNTER_H_ - -#include "eina_types.h" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_Counter_Group Counter - * - * @{ - */ - -/** - * @typedef Eina_Counter - * Counter type. - */ -typedef struct _Eina_Counter Eina_Counter; - -EAPI Eina_Counter *eina_counter_new(const char *name) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); -EAPI void eina_counter_free(Eina_Counter * counter) EINA_ARG_NONNULL(1); -EAPI void eina_counter_start(Eina_Counter * counter) EINA_ARG_NONNULL(1); -EAPI void eina_counter_stop(Eina_Counter * counter, - int specimen) EINA_ARG_NONNULL(1); -EAPI char *eina_counter_dump(Eina_Counter * counter) EINA_ARG_NONNULL(1); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_COUNTER_H_ */ diff --git a/tests/suite/ecore/src/include/eina_cpu.h b/tests/suite/ecore/src/include/eina_cpu.h deleted file mode 100644 index 3fb293af66..0000000000 --- a/tests/suite/ecore/src/include/eina_cpu.h +++ /dev/null @@ -1,38 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_CPU_H_ -#define EINA_CPU_H_ - -#include "eina_types.h" - -typedef enum _Eina_Cpu_Features { - EINA_CPU_MMX = 0x00000001, - EINA_CPU_SSE = 0x00000002, - EINA_CPU_SSE2 = 0x00000004, - EINA_CPU_SSE3 = 0x00000008, - /* TODO 3DNow! */ - EINA_CPU_ALTIVEC = 0x00000010, - EINA_CPU_VIS = 0x00000020, - EINA_CPU_NEON = 0x00000040, -} Eina_Cpu_Features; - -EAPI Eina_Cpu_Features eina_cpu_features_get(void); -EAPI int eina_cpu_count(void); - -#endif /* EINA_CPU_H_ */ diff --git a/tests/suite/ecore/src/include/eina_error.h b/tests/suite/ecore/src/include/eina_error.h deleted file mode 100644 index f654c4b1ea..0000000000 --- a/tests/suite/ecore/src/include/eina_error.h +++ /dev/null @@ -1,68 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_ERROR_H_ -#define EINA_ERROR_H_ - -#include - -#include "eina_types.h" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_Error_Group Error - * - * @{ - */ - -/** - * @typedef Eina_Error - * Error type. - */ -typedef int Eina_Error; - -/** - * @var EINA_ERROR_OUT_OF_MEMORY - * Error identifier corresponding to a lack of memory. - */ -EAPI extern Eina_Error EINA_ERROR_OUT_OF_MEMORY; - -EAPI Eina_Error eina_error_msg_register(const char *msg) -EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -EAPI Eina_Error eina_error_msg_static_register(const char *msg) -EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -EAPI Eina_Bool eina_error_msg_modify(Eina_Error error, - const char *msg) EINA_ARG_NONNULL(2); -EAPI Eina_Error eina_error_get(void); -EAPI void eina_error_set(Eina_Error err); -EAPI const char *eina_error_msg_get(Eina_Error error) EINA_PURE; - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_ERROR_H_ */ diff --git a/tests/suite/ecore/src/include/eina_file.h b/tests/suite/ecore/src/include/eina_file.h deleted file mode 100644 index b30bf9682b..0000000000 --- a/tests/suite/ecore/src/include/eina_file.h +++ /dev/null @@ -1,104 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_FILE_H_ -#define EINA_FILE_H_ - -#include - -#include "eina_types.h" -#include "eina_array.h" -#include "eina_iterator.h" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_File_Group File - * - * @{ - */ - -/** - * @typedef Eina_File_Direct_Info - * A typedef to #_Eina_File_Direct_Info. - */ -typedef struct _Eina_File_Direct_Info Eina_File_Direct_Info; - -/** - * @typedef Eina_File_Dir_List_Cb - * Type for a callback to be called when iterating over the files of a - * directory. - */ -typedef void (*Eina_File_Dir_List_Cb) (const char *name, const char *path, - void *data); - -#ifndef _POSIX_PATH_MAX -# define _POSIX_PATH_MAX 256 -#endif - -/** - * @struct _Eina_File_Direct_Info - * A structure to store informations of a path. - */ -struct _Eina_File_Direct_Info { - size_t path_length; - /**< size of the whole path */ - size_t name_length; - /**< size of the filename/basename component */ - size_t name_start; - /**< where the filename/basename component starts */ - char path[_POSIX_PATH_MAX]; - /**< the path */ - const struct dirent *dirent; - /**< the dirent structure of the path */ -}; - -/** - * @def EINA_FILE_DIR_LIST_CB - * @brief cast to an #Eina_File_Dir_List_Cb. - * - * @param function The function to cast. - * - * This macro casts @p function to Eina_File_Dir_List_Cb. - */ -#define EINA_FILE_DIR_LIST_CB(function) ((Eina_File_Dir_List_Cb)function) - -EAPI Eina_Bool eina_file_dir_list(const char *dir, - Eina_Bool recursive, - Eina_File_Dir_List_Cb cb, - void *data) EINA_ARG_NONNULL(1, 3); -EAPI Eina_Array *eina_file_split(char *path) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; -EAPI Eina_Iterator *eina_file_ls(const char *dir) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; -EAPI Eina_Iterator *eina_file_direct_ls(const char *dir) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_FILE_H_ */ diff --git a/tests/suite/ecore/src/include/eina_fp.h b/tests/suite/ecore/src/include/eina_fp.h deleted file mode 100644 index 5aba5ef96f..0000000000 --- a/tests/suite/ecore/src/include/eina_fp.h +++ /dev/null @@ -1,96 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * Copyright (C) 2009 Cedric BAIL - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_FP_H_ -#define EINA_FP_H_ - -#include "eina_types.h" - -#ifdef _MSC_VER -typedef unsigned __int64 uint64_t; -typedef signed __int64 int64_t; -typedef signed int int32_t; -#else -#include -#endif - -#define EINA_F32P32_PI 0x00000003243f6a89 - -typedef int64_t Eina_F32p32; -typedef int32_t Eina_F16p16; -typedef int32_t Eina_F8p24; - -static inline Eina_F32p32 eina_f32p32_int_from(int32_t v); -static inline int32_t eina_f32p32_int_to(Eina_F32p32 v); -static inline Eina_F32p32 eina_f32p32_double_from(double v); -static inline double eina_f32p32_double_to(Eina_F32p32 v); - -static inline Eina_F32p32 eina_f32p32_add(Eina_F32p32 a, Eina_F32p32 b); -static inline Eina_F32p32 eina_f32p32_sub(Eina_F32p32 a, Eina_F32p32 b); -static inline Eina_F32p32 eina_f32p32_mul(Eina_F32p32 a, Eina_F32p32 b); -static inline Eina_F32p32 eina_f32p32_scale(Eina_F32p32 a, int b); -static inline Eina_F32p32 eina_f32p32_div(Eina_F32p32 a, Eina_F32p32 b); -static inline Eina_F32p32 eina_f32p32_sqrt(Eina_F32p32 a); -static inline unsigned int eina_f32p32_fracc_get(Eina_F32p32 v); - -// dont use llabs - issues if not on 64bit -#define eina_fp32p32_llabs(a) ((a < 0) ? -(a) : (a)) - -EAPI Eina_F32p32 eina_f32p32_cos(Eina_F32p32 a); -EAPI Eina_F32p32 eina_f32p32_sin(Eina_F32p32 a); - -static inline Eina_F16p16 eina_f16p16_int_from(int32_t v); -static inline int32_t eina_f16p16_int_to(Eina_F16p16 v); -static inline Eina_F16p16 eina_f16p16_float_from(float v); -static inline float eina_f16p16_float_to(Eina_F16p16 v); - -static inline Eina_F16p16 eina_f16p16_add(Eina_F16p16 a, Eina_F16p16 b); -static inline Eina_F16p16 eina_f16p16_sub(Eina_F16p16 a, Eina_F16p16 b); -static inline Eina_F16p16 eina_f16p16_mul(Eina_F16p16 a, Eina_F16p16 b); -static inline Eina_F16p16 eina_f16p16_scale(Eina_F16p16 a, int b); -static inline Eina_F16p16 eina_f16p16_div(Eina_F16p16 a, Eina_F16p16 b); -static inline Eina_F16p16 eina_f16p16_sqrt(Eina_F16p16 a); -static inline unsigned int eina_f16p16_fracc_get(Eina_F16p16 v); - -static inline Eina_F8p24 eina_f8p24_int_from(int32_t v); -static inline int32_t eina_f8p24_int_to(Eina_F8p24 v); -static inline Eina_F8p24 eina_f8p24_float_from(float v); -static inline float eina_f8p24_float_to(Eina_F8p24 v); - -static inline Eina_F8p24 eina_f8p24_add(Eina_F8p24 a, Eina_F8p24 b); -static inline Eina_F8p24 eina_f8p24_sub(Eina_F8p24 a, Eina_F8p24 b); -static inline Eina_F8p24 eina_f8p24_mul(Eina_F8p24 a, Eina_F8p24 b); -static inline Eina_F8p24 eina_f8p24_scale(Eina_F8p24 a, int b); -static inline Eina_F8p24 eina_f8p24_div(Eina_F8p24 a, Eina_F8p24 b); -static inline Eina_F8p24 eina_f8p24_sqrt(Eina_F8p24 a); -static inline unsigned int eina_f8p24_fracc_get(Eina_F8p24 v); - -static inline Eina_F32p32 eina_f16p16_to_f32p32(Eina_F16p16 a); -static inline Eina_F32p32 eina_f8p24_to_f32p32(Eina_F8p24 a); -static inline Eina_F16p16 eina_f32p32_to_f16p16(Eina_F32p32 a); -static inline Eina_F16p16 eina_f8p24_to_f16p16(Eina_F8p24 a); -static inline Eina_F8p24 eina_f32p32_to_f8p24(Eina_F32p32 a); -static inline Eina_F8p24 eina_f16p16_to_f8p24(Eina_F16p16 a); - -#include "eina_inline_f32p32.x" -#include "eina_inline_f16p16.x" -#include "eina_inline_f8p24.x" -#include "eina_inline_fp.x" - -#endif diff --git a/tests/suite/ecore/src/include/eina_hamster.h b/tests/suite/ecore/src/include/eina_hamster.h deleted file mode 100644 index 5b160994fd..0000000000 --- a/tests/suite/ecore/src/include/eina_hamster.h +++ /dev/null @@ -1,44 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_HAMSTER_H_ -#define EINA_HAMSTER_H_ - -/** - * @addtogroup Eina_Core_Group Core - * - * @{ - */ - -/** - * @defgroup Eina_Hamster_Group Hamster - * - * @{ - */ - -EAPI int eina_hamster_count(void); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_HAMSTER_H_ */ diff --git a/tests/suite/ecore/src/include/eina_hash.h b/tests/suite/ecore/src/include/eina_hash.h deleted file mode 100644 index d1fc8b13aa..0000000000 --- a/tests/suite/ecore/src/include/eina_hash.h +++ /dev/null @@ -1,176 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Gustavo Sverzut Barbieri, - * Vincent Torri, Jorge Luis Zapata Muga, Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_HASH_H_ -#define EINA_HASH_H_ - -#include "eina_types.h" -#include "eina_iterator.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @addtogroup Eina_Containers_Group Containers - * - * @{ - */ - -/** - * @defgroup Eina_Hash_Group Hash Table - * - * @{ - */ - -/** - * @typedef Eina_Hash - * Type for a generic hash table. - */ -typedef struct _Eina_Hash Eina_Hash; - -typedef struct _Eina_Hash_Tuple Eina_Hash_Tuple; - -struct _Eina_Hash_Tuple { - const void *key; - /**< The key */ - void *data; - /**< The data associated to the key */ - unsigned int key_length; - /**< The length of the key */ -}; - -typedef unsigned int (*Eina_Key_Length) (const void *key); -#define EINA_KEY_LENGTH(Function) ((Eina_Key_Length)Function) -typedef int (*Eina_Key_Cmp) (const void *key1, int key1_length, - const void *key2, int key2_length); -#define EINA_KEY_CMP(Function) ((Eina_Key_Cmp)Function) -typedef int (*Eina_Key_Hash) (const void *key, int key_length); -#define EINA_KEY_HASH(Function) ((Eina_Key_Hash)Function) -typedef Eina_Bool(*Eina_Hash_Foreach) (const Eina_Hash * hash, - const void *key, void *data, - void *fdata); - -EAPI Eina_Hash *eina_hash_new(Eina_Key_Length key_length_cb, - Eina_Key_Cmp key_cmp_cb, - Eina_Key_Hash key_hash_cb, - Eina_Free_Cb data_free_cb, - int buckets_power_size) -EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2, 3); -EAPI Eina_Hash *eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb); -EAPI Eina_Hash *eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb); -EAPI Eina_Hash *eina_hash_string_small_new(Eina_Free_Cb data_free_cb); -EAPI Eina_Hash *eina_hash_int32_new(Eina_Free_Cb data_free_cb); -EAPI Eina_Hash *eina_hash_int64_new(Eina_Free_Cb data_free_cb); -EAPI Eina_Hash *eina_hash_pointer_new(Eina_Free_Cb data_free_cb); -EAPI Eina_Hash *eina_hash_stringshared_new(Eina_Free_Cb data_free_cb); -EAPI Eina_Bool eina_hash_add(Eina_Hash * hash, - const void *key, - const void *data) EINA_ARG_NONNULL(1, 2, 3); -EAPI Eina_Bool eina_hash_direct_add(Eina_Hash * hash, - const void *key, - const void *data) EINA_ARG_NONNULL(1, - 2, - 3); -EAPI Eina_Bool eina_hash_del(Eina_Hash * hash, const void *key, - const void *data) EINA_ARG_NONNULL(1); -EAPI void *eina_hash_find(const Eina_Hash * hash, - const void *key) EINA_ARG_NONNULL(1, 2); -EAPI void *eina_hash_modify(Eina_Hash * hash, const void *key, - const void *data) EINA_ARG_NONNULL(1, 2, 3); -EAPI void *eina_hash_set(Eina_Hash * hash, const void *key, - const void *data) EINA_ARG_NONNULL(1, 2, 3); -EAPI Eina_Bool eina_hash_move(Eina_Hash * hash, const void *old_key, - const void *new_key) EINA_ARG_NONNULL(1, 2, - 3); -EAPI void eina_hash_free(Eina_Hash * hash) EINA_ARG_NONNULL(1); -EAPI void eina_hash_free_buckets(Eina_Hash * hash) EINA_ARG_NONNULL(1); -EAPI int eina_hash_population(const Eina_Hash * hash) EINA_ARG_NONNULL(1); -EAPI Eina_Bool eina_hash_add_by_hash(Eina_Hash * hash, - const void *key, - int key_length, - int key_hash, - const void *data) EINA_ARG_NONNULL(1, - 2, - 5); -EAPI Eina_Bool eina_hash_direct_add_by_hash(Eina_Hash * hash, - const void *key, - int key_length, int key_hash, - const void *data) -EINA_ARG_NONNULL(1, 2, 5); -EAPI Eina_Bool eina_hash_del_by_key_hash(Eina_Hash * hash, const void *key, - int key_length, - int key_hash) EINA_ARG_NONNULL(1, - 2); -EAPI Eina_Bool eina_hash_del_by_key(Eina_Hash * hash, - const void *key) EINA_ARG_NONNULL(1, - 2); -EAPI Eina_Bool eina_hash_del_by_data(Eina_Hash * hash, - const void *data) EINA_ARG_NONNULL(1, - 2); -EAPI Eina_Bool eina_hash_del_by_hash(Eina_Hash * hash, const void *key, - int key_length, int key_hash, - const void *data) EINA_ARG_NONNULL(1); -EAPI void *eina_hash_find_by_hash(const Eina_Hash * hash, const void *key, - int key_length, - int key_hash) EINA_ARG_NONNULL(1, 2); -EAPI void *eina_hash_modify_by_hash(Eina_Hash * hash, const void *key, - int key_length, int key_hash, - const void *data) EINA_ARG_NONNULL(1, - 2, - 5); -EAPI Eina_Iterator *eina_hash_iterator_key_new(const Eina_Hash * hash) -EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -EAPI Eina_Iterator *eina_hash_iterator_data_new(const Eina_Hash * hash) -EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -EAPI Eina_Iterator *eina_hash_iterator_tuple_new(const Eina_Hash * hash) -EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -EAPI void eina_hash_foreach(const Eina_Hash * hash, - Eina_Hash_Foreach cb, - const void *fdata) EINA_ARG_NONNULL(1, 2); -/* Paul Hsieh (http://www.azillionmonkeys.com/qed/hash.html) hash function used by WebCore (http://webkit.org/blog/8/hashtables-part-2/) */ -EAPI int eina_hash_superfast(const char *key, int len) EINA_ARG_NONNULL(1); -/* Hash function first reported by dan bernstein many years ago in comp.lang.c */ -static inline int eina_hash_djb2(const char *key, - int len) EINA_ARG_NONNULL(1); -static inline int eina_hash_djb2_len(const char *key, - int *plen) EINA_ARG_NONNULL(1, 2); -/* Hash function from http://www.concentric.net/~Ttwang/tech/inthash.htm */ -static inline int eina_hash_int32(const unsigned int *pkey, - int len) EINA_ARG_NONNULL(1); -static inline int eina_hash_int64(const unsigned long int *pkey, - int len) EINA_ARG_NONNULL(1); - -#include "eina_inline_hash.x" - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#endif /*EINA_HASH_H_ */ diff --git a/tests/suite/ecore/src/include/eina_inline_array.x b/tests/suite/ecore/src/include/eina_inline_array.x deleted file mode 100644 index 883d728b8d..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_array.x +++ /dev/null @@ -1,181 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_INLINE_ARRAY_X_ -#define EINA_INLINE_ARRAY_X_ - -#include - -/** - * @cond LOCAL - */ - -EAPI Eina_Bool eina_array_grow(Eina_Array *array); - -/** - * @endcond - */ - -/** - * @addtogroup Eina_Array_Group Array - * - * @brief These functions provide array management. - * - * @{ - */ - -/** - * @brief Append a data to an array. - * - * @param array The array. - * @param data The data to add. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function appends @p data to @p array. For performance - * reasons, there is no check of @p array. If it is @c NULL or - * invalid, the program may crash. If @p data is @c NULL, or if an - * allocation is necessary and fails, #EINA_FALSE is returned and - * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, #EINA_TRUE is - * returned. - */ - -static inline Eina_Bool -eina_array_push(Eina_Array *array, const void *data) -{ - if (!data) return EINA_FALSE; - - if (EINA_UNLIKELY((array->count + 1) > array->total)) - if (!eina_array_grow(array)) - return EINA_FALSE; - - array->data[array->count++] = (void*) data; - - return EINA_TRUE; -} - -/** - * @brief Remove the last data of an array. - * - * @param array The array. - * @return The retrieved data. - * - * This function removes the last data of @p array, decreases the count - * of @p array and returns the data. For performance reasons, there - * is no check of @p array. If it is @c NULL or invalid, the program - * may crash. If the count member is less or equal than 0, @c NULL is - * returned. - */ -static inline void * -eina_array_pop(Eina_Array *array) -{ - void *ret = NULL; - - if (array->count <= 0) - goto on_empty; - - ret = array->data[--array->count]; - - on_empty: - return ret; -} - -/** - * @brief Return the data at a given position in an array. - * - * @param array The array. - * @param idx The potition of the data to retrieve. - * @return The retrieved data. - * - * This function returns the data at the position @p idx in @p - * array. For performance reasons, there is no check of @p array or @p - * idx. If it is @c NULL or invalid, the program may crash. - */ -static inline void * -eina_array_data_get(const Eina_Array *array, unsigned int idx) -{ - return array->data[idx]; -} - -/** - * @brief Set the data at a given position in an array. - * - * @param array The array. - * @param idx The potition of the data to set. - * @param data The data to set. - * - * This function sets the data at the position @p idx in @p - * array. For performance reasons, there is no check of @p array or @p - * idx. If it is @c NULL or invalid, the program may crash. - */ -static inline void -eina_array_data_set(const Eina_Array *array, unsigned int idx, const void *data) -{ - array->data[idx] = (void*) data; -} - -/** - * @brief Return the number of elements in an array. - * - * @param array The array. - * @return The number of elements. - * - * This function returns the number of elements in @p array. For - * performance reasons, there is no check of @p array. If it is - * @c NULL or invalid, the program may crash. - */ -static inline unsigned int -eina_array_count_get(const Eina_Array *array) -{ - return array->count; -} - -/** - * @brief Provide a safe way to iterate over an array - * - * @param array The array to iterate over. - * @param cb The callback to call for each item. - * @param fdata The user data to pass to the callback. - * @return EINA_TRUE if it successfully iterate all items of the array. - * - * This function provide a safe way to iterate over an array. @p cb should - * return EINA_TRUE as long as you want the function to continue iterating, - * by returning EINA_FALSE it will stop and return EINA_FALSE as a result. - */ -static inline Eina_Bool -eina_array_foreach(Eina_Array *array, Eina_Each_Cb cb, void *fdata) -{ - void *data; - Eina_Array_Iterator iterator; - unsigned int i; - Eina_Bool ret = EINA_TRUE; - - EINA_ARRAY_ITER_NEXT(array, i, data, iterator) - if (cb(array, data, fdata) != EINA_TRUE) - { - ret = EINA_FALSE; - break; - } - - return ret; -} - -/** - * @} - */ - -#endif diff --git a/tests/suite/ecore/src/include/eina_inline_f16p16.x b/tests/suite/ecore/src/include/eina_inline_f16p16.x deleted file mode 100644 index e16d188dce..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_f16p16.x +++ /dev/null @@ -1,83 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * Copyright (C) 2009 Cedric BAIL - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_INLINE_F16P16_X_ -#define EINA_INLINE_F16P16_X_ - -static inline Eina_F16p16 -eina_f16p16_add(Eina_F16p16 a, Eina_F16p16 b) -{ - return a + b; -} - -static inline Eina_F16p16 -eina_f16p16_sub(Eina_F16p16 a, Eina_F16p16 b) -{ - return a - b; -} - -static inline Eina_F16p16 -eina_f16p16_mul(Eina_F16p16 a, Eina_F16p16 b) -{ - return (Eina_F16p16)(((int64_t)a * (int64_t)b) >> 16); -} - -static inline Eina_F16p16 -eina_f16p16_scale(Eina_F16p16 a, int b) -{ - return a * b; -} - -static inline Eina_F16p16 -eina_f16p16_div(Eina_F16p16 a, Eina_F16p16 b) -{ - return (Eina_F16p16) ((((int64_t) a) << 16) / (int64_t) b); -} - -static inline Eina_F16p16 -eina_f16p16_sqrt(Eina_F16p16 a) -{ - unsigned int root, remHi, remLo, testDiv, count; - - root = 0; /* Clear root */ - remHi = 0; /* Clear high part of partial remainder */ - remLo = a; /* Get argument into low part of partial remainder */ - count = (15 + (16 >> 1)); /* Load loop counter */ - do { - remHi = (remHi << 2) | (remLo >> 30); - remLo <<= 2; /* get 2 bits of arg */ - root <<= 1; /* Get ready for the next bit in the root */ - testDiv = (root << 1) + 1; /* Test radical */ - if (remHi >= testDiv) - { - remHi -= testDiv; - root++; - } - } while (count-- != 0); - - return root; -} - -static inline unsigned int -eina_f16p16_fracc_get(Eina_F16p16 v) -{ - return (v & 0xffff); -} - -#endif diff --git a/tests/suite/ecore/src/include/eina_inline_f32p32.x b/tests/suite/ecore/src/include/eina_inline_f32p32.x deleted file mode 100644 index 73480de02c..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_f32p32.x +++ /dev/null @@ -1,110 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2009 Jorge Luis Zapata Muga, Cedric BAIL - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_INLINE_F32P32_X_ -# define EINA_INLINE_F32P32_X_ - -#include - -static inline Eina_F32p32 -eina_f32p32_add(Eina_F32p32 a, Eina_F32p32 b) -{ - return a + b; -} - -static inline Eina_F32p32 -eina_f32p32_sub(Eina_F32p32 a, Eina_F32p32 b) -{ - return a - b; -} - -static inline Eina_F32p32 -eina_f32p32_mul(Eina_F32p32 a, Eina_F32p32 b) -{ - /* Prevent overflow and do '(a * b) >> 32' */ - /* Basically do: Eina_F16p16 * Eina_F16p16 = Eina_F32p32 */ - Eina_F32p32 up; - Eina_F32p32 down; - Eina_F32p32 result; - uint64_t as, bs; - Eina_F32p32 sign; - - sign = a ^ b; - as = eina_fp32p32_llabs(a); - bs = eina_fp32p32_llabs(b); - - up = (as >> 16) * (bs >> 16); - down = (as & 0xFFFF) * (bs & 0xFFFF); - - result = up + (down >> 32); - - return sign < 0 ? - result : result; -} - -static inline Eina_F32p32 -eina_f32p32_scale(Eina_F32p32 a, int b) -{ - return a * b; -} - -static inline Eina_F32p32 -eina_f32p32_div(Eina_F32p32 a, Eina_F32p32 b) -{ - Eina_F32p32 sign; - Eina_F32p32 result; - - sign = a ^ b; - - if (b == 0) - return sign < 0 ? (Eina_F32p32) 0x8000000000000000ull : (Eina_F32p32) 0x7FFFFFFFFFFFFFFFull; - - result = (eina_f32p32_mul(eina_fp32p32_llabs(a), (((uint64_t) 1 << 62) / ((uint64_t)(eina_fp32p32_llabs(b)) >> 2)))); - - return sign < 0 ? - result : result; -} - -static inline Eina_F32p32 -eina_f32p32_sqrt(Eina_F32p32 a) -{ - uint64_t root, remHi, remLo, testDiv, count; - - root = 0; /* Clear root */ - remHi = 0; /* Clear high part of partial remainder */ - remLo = a; /* Get argument into low part of partial remainder */ - count = (31 + (32 >> 1)); /* Load loop counter */ - do { - remHi = (remHi << 2) | (remLo >> 30); - remLo <<= 2; /* get 2 bits of arg */ - root <<= 1; /* Get ready for the next bit in the root */ - testDiv = (root << 1) + 1; /* Test radical */ - if (remHi >= testDiv) { - remHi -= testDiv; - root++; - } - } while (count-- != 0); - - return root; -} - -static inline unsigned int -eina_f32p32_fracc_get(Eina_F32p32 v) -{ - return (unsigned int)v; -} - -#endif diff --git a/tests/suite/ecore/src/include/eina_inline_f8p24.x b/tests/suite/ecore/src/include/eina_inline_f8p24.x deleted file mode 100644 index f80bf6149c..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_f8p24.x +++ /dev/null @@ -1,82 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * Copyright (C) 2009 Cedric BAIL - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_INLINE_F8P24_X_ -#define EINA_INLINE_F8P24_X_ - -static inline Eina_F8p24 -eina_f8p24_add(Eina_F8p24 a, Eina_F8p24 b) -{ - return a + b; -} - -static inline Eina_F8p24 -eina_f8p24_sub(Eina_F8p24 a, Eina_F8p24 b) -{ - return a - b; -} - -static inline Eina_F8p24 -eina_f8p24_mul(Eina_F8p24 a, Eina_F8p24 b) -{ - return (Eina_F8p24)(((int64_t) a * (int64_t) b) >> 24); -} - -static inline Eina_F8p24 -eina_f8p24_scale(Eina_F8p24 a, int b) -{ - return a * b; -} - -static inline Eina_F8p24 -eina_f8p24_div(Eina_F8p24 a, Eina_F8p24 b) -{ - return (Eina_F8p24) ((((int64_t) a) << 24) / (int64_t) b); -} - -static inline Eina_F8p24 -eina_f8p24_sqrt(Eina_F8p24 a) -{ - unsigned int root, remHi, remLo, testDiv, count; - - root = 0; /* Clear root */ - remHi = 0; /* Clear high part of partial remainder */ - remLo = a; /* Get argument into low part of partial remainder */ - count = (23 + (24 >> 1)); /* Load loop counter */ - do { - remHi = (remHi << 2) | (remLo >> 30); - remLo <<= 2; /* get 2 bits of arg */ - root <<= 1; /* Get ready for the next bit in the root */ - testDiv = (root << 1) + 1; /* Test radical */ - if (remHi >= testDiv) - { - remHi -= testDiv; - root++; - } - } while (count-- != 0); - return (root); -} - -static inline unsigned int -eina_f8p24_fracc_get(Eina_F8p24 v) -{ - return (v & 0xffffff); -} - -#endif diff --git a/tests/suite/ecore/src/include/eina_inline_fp.x b/tests/suite/ecore/src/include/eina_inline_fp.x deleted file mode 100644 index de44123b28..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_fp.x +++ /dev/null @@ -1,153 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * Copyright (C) 2009 Cedric BAIL - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_INLINE_FP_X_ -# define EINA_INLINE_FP_X_ - -static inline Eina_F32p32 -eina_f32p32_int_from(int32_t v) -{ - return (Eina_F32p32)(v) << 32; -} - -static inline int32_t -eina_f32p32_int_to(Eina_F32p32 v) -{ - return (int32_t)(v >> 32); -} - -static inline Eina_F32p32 -eina_f32p32_double_from(double v) -{ - Eina_F32p32 r; - r = (Eina_F32p32)(v * 4294967296.0 + (v < 0 ? -0.5 : 0.5)); - return r; -} - -static inline double -eina_f32p32_double_to(Eina_F32p32 v) -{ - double r; - r = v / 4294967296.0; - return r; -} - - - -static inline Eina_F16p16 -eina_f16p16_int_from(int32_t v) -{ - return v << 16; -} - -static inline int32_t -eina_f16p16_int_to(Eina_F16p16 v) -{ - return v >> 16; -} - -static inline Eina_F16p16 -eina_f16p16_float_from(float v) -{ - Eina_F16p16 r; - - r = (Eina_F16p16)(v * 65536.0f + (v < 0 ? -0.5f : 0.5f)); - return r; -} - -static inline float -eina_f16p16_float_to(Eina_F16p16 v) -{ - float r; - - r = v / 65536.0f; - return r; -} - - - -static inline Eina_F8p24 -eina_f8p24_int_from(int32_t v) -{ - return v << 24; -} - -static inline int32_t -eina_f8p24_int_to(Eina_F8p24 v) -{ - return v >> 24; -} - -static inline Eina_F8p24 -eina_f8p24_float_from(float v) -{ - Eina_F8p24 r; - - r = (Eina_F8p24)(v * 16777216.0f + (v < 0 ? -0.5f : 0.5f)); - return r; -} - -static inline float -eina_f8p24_float_to(Eina_F8p24 v) -{ - float r; - - r = v / 16777216.0f; - return r; -} - - - -static inline Eina_F32p32 -eina_f16p16_to_f32p32(Eina_F16p16 a) -{ - return ((Eina_F32p32) a) << 16; -} - -static inline Eina_F32p32 -eina_f8p24_to_f32p32(Eina_F8p24 a) -{ - return ((Eina_F32p32) a) << 8; -} - -static inline Eina_F16p16 -eina_f32p32_to_f16p16(Eina_F32p32 a) -{ - return (Eina_F16p16) (a >> 16); -} - -static inline Eina_F16p16 -eina_f8p24_to_f16p16(Eina_F8p24 a) -{ - return (Eina_F16p16) (a >> 8); -} - -static inline Eina_F8p24 -eina_f32p32_to_f8p24(Eina_F32p32 a) -{ - return (Eina_F8p24) (a >> 8); -} - -static inline Eina_F8p24 -eina_f16p16_to_f8p24(Eina_F16p16 a) -{ - return (Eina_F8p24) (a << 8); -} - -#endif diff --git a/tests/suite/ecore/src/include/eina_inline_hash.x b/tests/suite/ecore/src/include/eina_inline_hash.x deleted file mode 100644 index 8aa7bec865..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_hash.x +++ /dev/null @@ -1,88 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_INLINE_HASH_X_ -#define EINA_INLINE_HASH_X_ - -/* - djb2 hash algorithm was first reported by dan bernstein, and was the old - default hash function for evas. - */ -static inline int -eina_hash_djb2(const char *key, int len) -{ - unsigned int hash_num = 5381; - const unsigned char *ptr; - - if (!key) return 0; - for (ptr = (unsigned char *)key; len; ptr++, len--) - hash_num = ((hash_num << 5) + hash_num) ^ *ptr; /* hash * 33 ^ c */ - - return (int)hash_num; -} - -static inline int -eina_hash_djb2_len(const char *key, int *plen) -{ - unsigned int hash_num = 5381; - int len = 0; - const unsigned char *ptr; - - if (!key) return 0; - - for (ptr = (unsigned char *)key; *ptr; ptr++, len++) - hash_num = ((hash_num << 5) + hash_num) ^ *ptr; /* hash * 33 ^ c */ - - *plen = len + 1; - - return (int)hash_num; -} - -static inline int -eina_hash_int32(const unsigned int *pkey, int len) -{ - unsigned int key = *pkey; - - (void) len; - - key = ~key + (key << 15); - key = key ^ (key >> 12); - key = key + (key << 2); - key = key ^ (key >> 4); - key = key * 2057; - key = key ^ (key >> 16); - return key; -} - -static inline int -eina_hash_int64(const unsigned long int *pkey, int len) -{ - unsigned long int key = *pkey; - - (void) len; - - key = (~key) + (key << 18); - key = key ^ (key >> 31); - key = key * 21; - key = key ^ (key >> 11); - key = key + (key << 6); - key = key ^ (key >> 22); - return (int) key; -} - -#endif diff --git a/tests/suite/ecore/src/include/eina_inline_list.x b/tests/suite/ecore/src/include/eina_inline_list.x deleted file mode 100644 index 832537097e..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_list.x +++ /dev/null @@ -1,145 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_LIST_INLINE_H_ -#define EINA_LIST_INLINE_H_ - -/** - * @addtogroup Eina_List_Group List - * - * @brief These functions provide list management. - * - * @{ - */ - -/** - * @brief Get the last list node in the list. - * - * @param list The list to get the last list node from. - * @return The last list node in the list. - * - * This function returns the last list node in the list @p list. If - * @p list is @c NULL or empty, @c NULL is returned. - * - * This is a order-1 operation (it takes the same short time - * regardless of the length of the list). - */ -static inline Eina_List * -eina_list_last(const Eina_List *list) -{ - if (!list) return NULL; - return list->accounting->last; -} - -/** - * @brief Get the next list node after the specified list node. - * - * @param list The list node to get the next list node from - * @return The next list node on success, @c NULL otherwise. - * - * This function returns the next list node after the current one in - * @p list. It is equivalent to list->next. If @p list is @c NULL or - * if no next list node exists, it returns @c NULL. - */ -static inline Eina_List * -eina_list_next(const Eina_List *list) -{ - if (!list) return NULL; - return list->next; -} - -/** - * @brief Get the previous list node before the specified list node. - * - * @param list The list node to get the previous list node from. - * @return The previous list node o success, @c NULL otherwise. - * if no previous list node exists - * - * This function returns the previous list node before the current one - * in @p list. It is equivalent to list->prev. If @p list is @c NULL or - * if no previous list node exists, it returns @c NULL. - */ -static inline Eina_List * -eina_list_prev(const Eina_List *list) -{ - if (!list) return NULL; - return list->prev; -} - -/** - * @brief Get the list node data member. - * - * @param list The list node to get the data member of. - * @return The data member from the list node. - * - * This function returns the data member of the specified list node @p - * list. It is equivalent to list->data. If @p list is @c NULL, this - * function returns @c NULL. - */ -static inline void * -eina_list_data_get(const Eina_List *list) -{ - if (!list) return NULL; - return list->data; -} - -/** - * @brief Set the list node data member. - * - * @param list The list node to get the data member of. - * @param data The data member to the list node. - * @return The previous data value. - * - * This function set the data member @p data of the specified list node - * @p list. It returns the previous data of the node. If @p list is - * @c NULL, this function returns @c NULL. - */ -static inline void * -eina_list_data_set(Eina_List *list, const void *data) -{ - void *tmp; - if (!list) return NULL; - tmp = list->data; - list->data = (void*) data; - return tmp; -} - -/** - * @brief Get the count of the number of items in a list. - * - * @param list The list whose count to return. - * @return The number of members in the list. - * - * This function returns how many members @p list contains. If the - * list is @c NULL, 0 is returned. - * - * NB: This is an order-1 operation and takes the same time regardless - * of the length of the list. - */ -static inline unsigned int -eina_list_count(const Eina_List *list) -{ - if (!list) return 0; - return list->accounting->count; -} - -/** - * @} - */ - -#endif /* EINA_LIST_INLINE_H_ */ diff --git a/tests/suite/ecore/src/include/eina_inline_log.x b/tests/suite/ecore/src/include/eina_inline_log.x deleted file mode 100644 index 4cdd7d8393..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_log.x +++ /dev/null @@ -1,197 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_LOG_INLINE_H_ -#define EINA_LOG_INLINE_H_ - -/** - * @addtogroup Eina_Log_Group Log - * - * @{ - */ - -/** - * Checks whenever the given level should be printed out. - * - * This is useful to enable certain blocks of code just when given - * level is to be used. - * - * @code - * #include - * - * void my_func(void *data) - * { - * if (eina_log_level_check(EINA_LOG_LEVEL_WARN)) - * expensive_debugging_code(data); - * - * my_func_code(data); - * } - * @endcode - * - * @return #EINA_TRUE if level is equal or smaller than the current global - * logging level. - */ -static inline Eina_Bool -eina_log_level_check(int level) -{ - return eina_log_level_get() <= level; -} - -/** - * Checks whenever the given level should be printed out. - * - * This is useful to enable certain blocks of code just when given - * level is to be used. - * - * @code - * #include - * - * extern int _my_log_dom; - * - * void my_func(void *data) - * { - * if (eina_log_domain_level_check(_my_log_dom, EINA_LOG_LEVEL_WARN)) - * expensive_debugging_code(data); - * - * my_func_code(data); - * } - * @endcode - * - * @return #EINA_TRUE if level is equal or smaller than the current - * domain logging level. - */ -static inline Eina_Bool -eina_log_domain_level_check(int domain, int level) -{ - int dom_level = eina_log_domain_registered_level_get(domain); - if (EINA_UNLIKELY(dom_level == EINA_LOG_LEVEL_UNKNOWN)) - return EINA_FALSE; - return dom_level <= level; -} - -/** - * Function to format the level as a 3 character (+1 null byte) string. - * - * This function converts the given level to a known string name (CRI, - * ERR, WRN, INF or DBG) or a zero-padded 3-character string. In any - * case the last byte will contain a trailing null byte. - * - * If extreme level values are used (greater than 999 and smaller than - * -99), then the value will just consider the less significant - * part. This is so uncommon that users should handle this in their - * code. - * - * @param level what level value to use. - * @param name where to write the actual value. - * - * @return pointer to @p name. - */ -static inline const char * -eina_log_level_name_get(int level, char name[4]) -{ -#define BCPY(A, B, C) \ - do { name[0] = A; name[1] = B; name[2] = C; } while (0) - - if (EINA_UNLIKELY(level < 0)) - { - name[0] = '-'; - name[1] = '0' + (-level / 10) % 10; - name[2] = '0' + (-level % 10); - } - else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS)) - { - name[0] = '0' + (level / 100) % 10; - name[1] = '0' + (level / 10) % 10; - name[2] = '0' + level % 10; - } - else if (level == 0) - BCPY('C', 'R', 'I'); - else if (level == 1) - BCPY('E', 'R', 'R'); - else if (level == 2) - BCPY('W', 'R', 'N'); - else if (level == 3) - BCPY('I', 'N', 'F'); - else if (level == 4) - BCPY('D', 'B', 'G'); - else - BCPY('?', '?', '?'); - - name[3] = '\0'; - - return name; -} - -/** - * Function to get recommended color value for level. - * - * This function will not check if colors are enabled or not before - * returning the level color. If you desire such check, use - * eina_log_level_color_if_enabled_get(). - * - * @param level what level value to use. - * - * @return pointer to null byte terminated ANSI color string to be - * used in virtual terminals supporting VT100 color codes. - * - * @see eina_log_level_color_if_enabled_get() - */ -static inline const char * -eina_log_level_color_get(int level) -{ - if (level <= 0) - return EINA_COLOR_LIGHTRED; - else if (level == 1) - return EINA_COLOR_RED; - else if (level == 2) - return EINA_COLOR_YELLOW; - else if (level == 3) - return EINA_COLOR_GREEN; - else if (level == 4) - return EINA_COLOR_LIGHTBLUE; - else - return EINA_COLOR_BLUE; -} - -/** - * Function to get recommended color value for level, if colors are - * enabled. - * - * This function will check if colors are enabled or not before - * returning the level color. If colors are disabled, then empty - * string is returned. - * - * @param level what level value to use. - * - * @return pointer to null byte terminated ANSI color string to be - * used in virtual terminals supporting VT100 color codes. If - * colors are disabled, the empty string is returned. - */ -static inline const char * -eina_log_level_color_if_enabled_get(int level) -{ - if (eina_log_color_disable_get()) - return ""; - return eina_log_level_color_get(level); -} - -/** - * @} - */ - -#endif /* EINA_LOG_INLINE_H_ */ diff --git a/tests/suite/ecore/src/include/eina_inline_mempool.x b/tests/suite/ecore/src/include/eina_inline_mempool.x deleted file mode 100644 index 3f44b901d5..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_mempool.x +++ /dev/null @@ -1,105 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_INLINE_MEMPOOL_X_ -#define EINA_INLINE_MEMPOOL_X_ - -/** - * @addtogroup Eina_Memory_Pool_Group Memory Pool - * - * @{ - */ - -/* Memory Pool */ -struct _Eina_Mempool_Backend -{ - const char *name; - void *(*init)(const char *context, const char *options, va_list args); - void (*free)(void *data, void *element); - void *(*alloc)(void *data, unsigned int size); - void *(*realloc)(void *data, void *element, unsigned int size); - void (*garbage_collect)(void *data); - void (*statistics)(void *data); - void (*shutdown)(void *data); -}; - -struct _Eina_Mempool -{ - Eina_Mempool_Backend backend; - void *backend_data; -}; - -/** - * @brief Re-allocate a amount memory by the given mempool. - * - * @param mp The mempool. - * @param element The element to re-allocate. - * @param size The size in bytes to re-allocate. - * @return The newly re-allocated data. - * - * This function re-allocates @p element with @p size bytes, using the - * mempool @p mp and returns the allocated data. If not used anymore, - * the data must be freed with eina_mempool_free(). No check is done - * on @p mp, so it must be a valid mempool. - */ -static inline void * -eina_mempool_realloc(Eina_Mempool *mp, void *element, unsigned int size) -{ - return mp->backend.realloc(mp->backend_data, element, size); -} - -/** - * @brief Allocate a amount memory by the given mempool. - * - * @param mp The mempool. - * @param size The size in bytes to allocate. - * @return The newly allocated data. - * - * This function allocates @p size bytes, using the mempool @p mp and - * returns the allocated data. If not used anymore, the data must be - * freed with eina_mempool_free(). No check is done on @p mp, so it - * must be a valid mempool. - */ -static inline void * -eina_mempool_malloc(Eina_Mempool *mp, unsigned int size) -{ - return mp->backend.alloc(mp->backend_data, size); -} - -/** - * @brief Free the allocated ressources by the given mempool. - * - * @param mp The mempool. - * @param element The data to free. - * - * This function frees @p element allocated by @p mp. @p element must - * have been obtained by eina_mempool_malloc() or - * eina_mempool_realloc(). No check is done on @p mp, so it must be a - * valid mempool. - */ -static inline void -eina_mempool_free(Eina_Mempool *mp, void *element) -{ - mp->backend.free(mp->backend_data, element); -} - -/** - * @} - */ - -#endif diff --git a/tests/suite/ecore/src/include/eina_inline_rbtree.x b/tests/suite/ecore/src/include/eina_inline_rbtree.x deleted file mode 100644 index 954774b851..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_rbtree.x +++ /dev/null @@ -1,50 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Cedric BAIL - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_RBTREE_INLINE_H_ -#define EINA_RBTREE_INLINE_H_ - -/** - * @addtogroup Eina_Rbtree_Group Red-Black tree - * - * @brief These functions provide Red-Black trees management. - * - * @{ - */ - -static inline Eina_Rbtree * -eina_rbtree_inline_lookup(const Eina_Rbtree *root, const void *key, int length, Eina_Rbtree_Cmp_Key_Cb cmp, const void *data) -{ - int result; - - while (root) - { - result = cmp(root, key, length, (void*) data); - if (result == 0) return (Eina_Rbtree*) root; - - root = root->son[result < 0 ? 0 : 1]; - } - - return NULL; -} - -/** - * @} - */ - -#endif diff --git a/tests/suite/ecore/src/include/eina_inline_rectangle.x b/tests/suite/ecore/src/include/eina_inline_rectangle.x deleted file mode 100644 index 29ad24b7ca..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_rectangle.x +++ /dev/null @@ -1,254 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_INLINE_RECTANGLE_H__ -#define EINA_INLINE_RECTANGLE_H__ - -/** - * @addtogroup Eina_Rectangle_Group Rectangle - * - * @brief These functions provide rectangle management. - * - * @{ - */ - -/** - * @brief Check if the given spans intersect. - * - * @param c1 The column of the first span. - * @param l1 The length of the first span. - * @param c2 The column of the second span. - * @param l2 The length of the second span. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function returns #EINA_TRUE if the given spans intersect, - * #EINA_FALSE otherwise. - */ -static inline int -eina_spans_intersect(int c1, int l1, int c2, int l2) -{ - return (!(((c2 + l2) <= c1) || (c2 >= (c1 + l1)))); -} - -/** - * @brief Check if the given rectangle is empty. - * - * @param r The rectangle to check. - * @return #EINA_TRUE if the rectangle is empty, #EINA_FALSE otherwise. - * - * This function returns #EINA_TRUE if @p r is empty, #EINA_FALSE - * otherwise. No check is done on @p r, so it must be a valid - * rectangle. - */ -static inline Eina_Bool -eina_rectangle_is_empty(const Eina_Rectangle *r) -{ - return ((r->w < 1) || (r->h < 1)) ? EINA_TRUE : EINA_FALSE; -} - -/** - * @brief Set the coordinates and size of the given rectangle. - * - * @param r The rectangle. - * @param x The top-left x coordinate of the rectangle. - * @param y The top-left y coordinate of the rectangle. - * @param w The width of the rectangle. - * @param h The height of the rectangle. - * - * This function sets its top-left x coordinate to @p x, its top-left - * y coordinate to @p y, its width to @p w and its height to @p h. No - * check is done on @p r, so it must be a valid rectangle. - */ -static inline void -eina_rectangle_coords_from(Eina_Rectangle *r, int x, int y, int w, int h) -{ - r->x = x; - r->y = y; - r->w = w; - r->h = h; -} - -/** - * @brief Check if the given rectangles intersect. - * - * @param r1 The first rectangle. - * @param r2 The second rectangle. - * @return #EINA_TRUE if the rectangles intersect, #EINA_FALSE otherwise. - * - * This function returns #EINA_TRUE if @p r1 and @p r2 intersect, - * #EINA_FALSE otherwise. No check is done on @p r1 and @p r2, so they - * must be valid rectangles. - */ -static inline Eina_Bool -eina_rectangles_intersect(const Eina_Rectangle *r1, const Eina_Rectangle *r2) -{ - return (eina_spans_intersect(r1->x, r1->w, r2->x, r2->w) && eina_spans_intersect(r1->y, r1->h, r2->y, r2->h)) ? EINA_TRUE : EINA_FALSE; -} - -/** - * @brief Check if the given x-coordinate is in the rectangle . - * - * @param r The rectangle. - * @param x The x coordinate. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function returns #EINA_TRUE if @p x is in @p r with respect to - * the horizontal direction, #EINA_FALSE otherwise. No check is done - * on @p r, so it must be a valid rectangle. - */ -static inline Eina_Bool -eina_rectangle_xcoord_inside(const Eina_Rectangle *r, int x) -{ - return ((x >= r->x) && (x < (r->x + r->w))) ? EINA_TRUE : EINA_FALSE; -} - -/** - * @brief Check if the given y-coordinate is in the rectangle . - * - * @param r The rectangle. - * @param y The y coordinate. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function returns #EINA_TRUE if @p y is in @p r with respect to - * the vertical direction, #EINA_FALSE otherwise. No check is done - * on @p r, so it must be a valid rectangle. - */ -static inline Eina_Bool -eina_rectangle_ycoord_inside(const Eina_Rectangle *r, int y) -{ - return ((y >= r->y) && (y < (r->y + r->h))) ? EINA_TRUE : EINA_FALSE; -} - -/** - * @brief Check if the given point is in the rectangle . - * - * @param r The rectangle. - * @param x The x coordinate of the point. - * @param y The y coordinate of the point. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function returns #EINA_TRUE if the point of coordinate (@p x, - * @p y) is in @p r, #EINA_FALSE otherwise. No check is done on @p r, - * so it must be a valid rectangle. - */ -static inline Eina_Bool -eina_rectangle_coords_inside(const Eina_Rectangle *r, int x, int y) -{ - return (eina_rectangle_xcoord_inside(r, x) && eina_rectangle_ycoord_inside(r, y)) ? EINA_TRUE : EINA_FALSE; -} - -/** - * @brief Get the union of two rectangles. - * - * @param dst The first rectangle. - * @param src The second rectangle. - * - * This function get the union of the rectangles @p dst and @p src. The - * result is stored in @p dst. No check is done on @p dst or @p src, - * so they must be valid rectangles. - */ -static inline void -eina_rectangle_union(Eina_Rectangle *dst, const Eina_Rectangle *src) -{ - /* left */ - if (dst->x > src->x) - { - dst->w += dst->x - src->x; - dst->x = src->x; - } - /* right */ - if ((dst->x + dst->w) < (src->x + src->w)) - dst->w = src->x + src->w; - /* top */ - if (dst->y > src->y) - { - dst->h += dst->y - src->y; - dst->y = src->y; - } - /* bottom */ - if ((dst->y + dst->h) < (src->y + src->h)) - dst->h = src->y + src->h; -} - -/** - * @brief Get the intersection of two rectangles. - * - * @param dst The first rectangle. - * @param src The second rectangle. - * @return #EINA_TRUE if the rectangles intersect, #EINA_FALSE - * otherwise. - * - * This function get the intersection of the rectangles @p dst and - * @p src. The result is stored in @p dst. No check is done on @p dst - * or @p src, so they must be valid rectangles. - */ -static inline Eina_Bool -eina_rectangle_intersection(Eina_Rectangle *dst, const Eina_Rectangle *src) -{ - if (!(eina_rectangles_intersect(dst, src))) - return EINA_FALSE; - - /* left */ - if (dst->x < src->x) - { - dst->w += dst->x - src->x; - dst->x = src->x; - if (dst->w < 0) - dst->w = 0; - } - /* right */ - if ((dst->x + dst->w) > (src->x + src->w)) - dst->w = src->x + src->w - dst->x; - /* top */ - if (dst->y < src->y) - { - dst->h += dst->y - src->y; - dst->y = src->y; - if (dst->h < 0) - dst->h = 0; - } - /* bottom */ - if ((dst->y + dst->h) > (src->y + src->h)) - dst->h = src->y + src->h - dst->y; - - return EINA_TRUE; -} - -static inline void -eina_rectangle_rescale_in(const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) -{ - res->x = in->x - out->x; - res->y = in->y - out->y; - res->w = in->w; - res->h = in->h; -} - -static inline void -eina_rectangle_rescale_out(const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) -{ - res->x = out->x + in->x; - res->y = out->y + in->y; - res->w = out->w; - res->h = out->h; -} - -/** - * @} - */ - -#endif diff --git a/tests/suite/ecore/src/include/eina_inline_str.x b/tests/suite/ecore/src/include/eina_inline_str.x deleted file mode 100644 index 2daeb8524c..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_str.x +++ /dev/null @@ -1,76 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_STR_INLINE_H_ -#define EINA_STR_INLINE_H_ - -/** - * @addtogroup Eina_String_Group String - * - * @{ - */ - -/** - * @brief Count up to a given amount of bytes of the given string. - * - * @param str The string pointer. - * @param maxlen The maximum length to allow. - * @return the string size or (size_t)-1 if greater than @a maxlen. - * - * This function returns the size of @p str, up to @p maxlen - * characters. It avoid needless iterations after that size. @p str - * must be a valid pointer and MUST not be @c NULL, otherwise this - * function will crash. This function returns the string size, or - * (size_t)-1 if the size is greater than @a maxlen. - */ -static inline size_t -eina_strlen_bounded(const char *str, size_t maxlen) -{ - const char *itr, *str_maxend = str + maxlen; - for (itr = str; *itr != '\0'; itr++) - if (itr == str_maxend) return (size_t)-1; - return itr - str; -} - -/** - * @brief Join two strings of known length. - * - * @param dst The buffer to store the result. - * @param size Size (in byte) of the buffer. - * @param sep The separator character to use. - * @param a First string to use, before @p sep. - * @param b Second string to use, after @p sep. - * @return The number of characters printed. - * - * This function is similar to eina_str_join_len(), but will compute - * the length of @p a and @p b using strlen(). - * - * @see eina_str_join_len() - * @see eina_str_join_static() - */ -static inline size_t -eina_str_join(char *dst, size_t size, char sep, const char *a, const char *b) -{ - return eina_str_join_len(dst, size, sep, a, strlen(a), b, strlen(b)); -} - -/** - * @} - */ - -#endif /* EINA_STR_INLINE_H_ */ diff --git a/tests/suite/ecore/src/include/eina_inline_stringshare.x b/tests/suite/ecore/src/include/eina_inline_stringshare.x deleted file mode 100644 index bfd7677341..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_stringshare.x +++ /dev/null @@ -1,91 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_STRINGSHARE_INLINE_H_ -#define EINA_STRINGSHARE_INLINE_H_ - -#include -#include "eina_stringshare.h" -/** - * @addtogroup Eina_Stringshare_Group Stringshare - * - * @{ - */ - -/** - * Replace the previously stringshared pointer with new content. - * - * The string pointed by @a p_str should be previously stringshared or - * @c NULL and it will be eina_stringshare_del(). The new string will - * be passed to eina_stringshare_add() and then assigned to @c *p_str. - * - * @param p_str pointer to the stringhare to be replaced. Must not be - * @c NULL, but @c *p_str may be @c NULL as it is a valid - * stringshare handle. - * @param news new string to be stringshared, may be @c NULL. - * - * @return #EINA_TRUE if the strings were different and thus replaced, - * #EINA_FALSE if the strings were the same after shared. - */ -static inline Eina_Bool -eina_stringshare_replace(const char **p_str, const char *news) -{ - if (*p_str == news) return EINA_FALSE; - - news = eina_stringshare_add(news); - eina_stringshare_del(*p_str); - if (*p_str == news) - return EINA_FALSE; - *p_str = news; - return EINA_TRUE; -} - -/** - * Replace the previously stringshared pointer with a new content. - * - * The string pointed by @a p_str should be previously stringshared or - * @c NULL and it will be eina_stringshare_del(). The new string will - * be passed to eina_stringshare_add_length() and then assigned to @c *p_str. - * - * @param p_str pointer to the stringhare to be replaced. Must not be - * @c NULL, but @c *p_str may be @c NULL as it is a valid - * stringshare handle. - * @param news new string to be stringshared, may be @c NULL. - * @param slen The string size (<= strlen(str)). - * - * @return #EINA_TRUE if the strings were different and thus replaced, - * #EINA_FALSE if the strings were the same after shared. - */ -static inline Eina_Bool -eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen) -{ - if (*p_str == news) return EINA_FALSE; - - news = eina_stringshare_add_length(news, slen); - eina_stringshare_del(*p_str); - if (*p_str == news) - return EINA_FALSE; - *p_str = news; - return EINA_TRUE; -} - -/** - * @} - */ - -#endif /* EINA_STRINGSHARE_INLINE_H_ */ diff --git a/tests/suite/ecore/src/include/eina_inline_tiler.x b/tests/suite/ecore/src/include/eina_inline_tiler.x deleted file mode 100644 index ffc34c1cf6..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_tiler.x +++ /dev/null @@ -1,182 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2009 Rafael Antognolli - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_TILER_INLINE_H_ -#define EINA_TILER_INLINE_H_ - -#include "eina_safety_checks.h" - -/** - * @cond LOCAL - * This struct should not be accessed directly, it is used by - * eina_tile_grid_slicer functions to maintain context and fill "info" - * member with correct values for given iteration. - */ -struct _Eina_Tile_Grid_Slicer -{ - unsigned long col1, col2, row1, row2; // initial and final col,row - int tile_w, tile_h; // tile width, height - int x_rel, y_rel; // starting x,y coordinates of the first col,row - int w1_rel, h1_rel; // width,height of the first col,row - int w2_rel, h2_rel; // width,height of the last col,row - struct Eina_Tile_Grid_Info info; // info about the current tile - Eina_Bool first; -}; - -/** - * @endcond - */ - -/** - * @brief Iterates over the tiles set by eina_tile_grid_slicer_setup(). - * - * @param slc Pointer to an Eina_Tile_Grid_Slicer struct. - * @param rect Pointer to a struct Eina_Tile_Grid_Info *. - * @return @c EINA_TRUE if the current rect is valid. - * @c EINA_FALSE if there is no more rects to iterate over (and - * thus the current one isn't valid). - * - * This functions iterates over each Eina_Tile_Grid_Info *rect of the grid. - * eina_tile_grid_slicer_setup() must be called first, and *rect is only valid - * if this function returns EINA_TRUE. Its content shouldn't be modified. - */ -static inline Eina_Bool -eina_tile_grid_slicer_next(Eina_Tile_Grid_Slicer *slc, const Eina_Tile_Grid_Info **rect) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(slc, 0); - - if (slc->first) - { - slc->first = 0; - *rect = &slc->info; - return EINA_TRUE; - } - - slc->info.col++; - - if (slc->info.col > slc->col2) - { - slc->info.row++; - if (slc->info.row > slc->row2) - return EINA_FALSE; - else if (slc->info.row < slc->row2) - slc->info.rect.h = slc->tile_h; - else - slc->info.rect.h = slc->h2_rel; - slc->info.rect.y = 0; - slc->info.col = slc->col1; - slc->info.rect.x = slc->x_rel; - slc->info.rect.w = slc->w1_rel; - } - else - { - slc->info.rect.x = 0; - if (slc->info.col < slc->col2) - slc->info.rect.w = slc->tile_w; - else - slc->info.rect.w = slc->w2_rel; - } - - if (slc->info.rect.w == slc->tile_w && slc->info.rect.h == slc->tile_h) - slc->info.full = EINA_TRUE; - else - slc->info.full = EINA_FALSE; - - *rect = &slc->info; - - return EINA_TRUE; -} - -/** - * @brief Setup an Eina_Tile_Grid_Slicer struct. - * - * @param slc Pointer to an Eina_Tile_Grid_Slicer struct. - * @param x X axis coordinate. - * @param y Y axis coordinate. - * @param w width. - * @param h height. - * @param tile_w tile width. - * @param tile_h tile height. - * @return A pointer to the Eina_Iterator. - * @c NULL on failure. - * - * This function splits the rectangle given as argument into tiles of size - * tile_w X tile_h, and returns an iterator to them. The geometry of each - * tile can be accessed with eina_tile_grid_slicer_next, where rect - * will be a pointer to a struct Eina_Tile_Grid_Info. - */ -static inline Eina_Bool -eina_tile_grid_slicer_setup(Eina_Tile_Grid_Slicer *slc, int x, int y, int w, int h, int tile_w, int tile_h) -{ - int tx1, tx2, ty1, ty2; - - EINA_SAFETY_ON_NULL_RETURN_VAL(slc, 0); - - tx1 = x; - ty1 = y; - tx2 = x + w - 1; - ty2 = y + h - 1; - - if (x < 0 || y < 0 || w <= 0 || h <= 0 || tile_w <= 0 || tile_h <= 0) - { - slc->first = 0; - slc->col1 = slc->row1 = 0; - slc->col2 = slc->row2 = 0; - slc->info.col = slc->col1; - slc->info.row = slc->row1; - return EINA_TRUE; - } - - slc->col1 = tx1 / tile_w; - slc->row1 = ty1 / tile_h; - slc->col2 = (tx2 - 0) / tile_w; - slc->row2 = (ty2 - 0) / tile_h; - slc->x_rel = tx1 % tile_w; - slc->y_rel = ty1 % tile_h; - slc->w1_rel = tile_w - slc->x_rel; - slc->h1_rel = tile_h - slc->y_rel; - slc->w2_rel = tx2 % tile_w + 1; - slc->h2_rel = ty2 % tile_h + 1; - - slc->tile_w = tile_w; - slc->tile_h = tile_h; - - slc->first = 1; - slc->info.col = slc->col1; - slc->info.row = slc->row1; - slc->info.rect.x = slc->x_rel; - slc->info.rect.y = slc->y_rel; - - if (slc->info.col == slc->col2) - slc->w1_rel = slc->w2_rel - slc->x_rel; - - if (slc->info.row == slc->row2) - slc->h1_rel = slc->h2_rel - slc->y_rel; - - slc->info.rect.w = slc->w1_rel; - slc->info.rect.h = slc->h1_rel; - - if (slc->info.rect.w == slc->tile_w && slc->info.rect.h == slc->tile_h) - slc->info.full = EINA_TRUE; - else - slc->info.full = EINA_FALSE; - - return EINA_TRUE; -} - -#endif diff --git a/tests/suite/ecore/src/include/eina_inline_trash.x b/tests/suite/ecore/src/include/eina_inline_trash.x deleted file mode 100644 index 4a50611174..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_trash.x +++ /dev/null @@ -1,90 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_INLINE_TRASH_X__ -#define EINA_INLINE_TRASH_X__ - -/** - * @brief Initialize a trash before using it. - * - * @param trash The trash. - * - * This function just set to zero the trash to correctly - * initialize it. - * - * @note You can just set *trash to NULL and you will have - * the same result. - */ -static inline void -eina_trash_init(Eina_Trash **trash) -{ - *trash = NULL; -} - -/** - * @brief Push an unused pointer in the trash instead of freeing it. - * - * @param trash A pointer to an Eina_Trash. - * @param data An unused pointer big enougth to put a (void*). - * - * Instead of freeing a pointer and put pressure on malloc/free - * you can push it in a trash for a later use. This function just - * provide a fast way to push a now unused pointer into a trash. - * - * @note Do never use the pointer after insertion or bad things will - * happens. - * - * @note This trash will not resize, nor do anything with the size of - * the region pointed by @p data, so it's your duty to manage the size. - */ -static inline void -eina_trash_push(Eina_Trash **trash, void *data) -{ - Eina_Trash *tmp; - - tmp = (Eina_Trash *)data; - tmp->next = *trash; - *trash = tmp; -} - -/** - * @brief Pop an available pointer from the trash if possible. - * - * @param trash A pointer to an Eina_Trash. - * - * Instead of calling malloc, and putting pressure on malloc/free - * you can recycle the content of the trash, if it's not empty. - * - * @note This trash will not resize, nor do anything with the size of - * the region pointed by pointer inside the trash, so it's your duty - * to manage the size of the returned pointer. - */ -static inline void* -eina_trash_pop(Eina_Trash **trash) -{ - void *tmp; - - tmp = *trash; - - if (*trash) - *trash = (*trash)->next; - - return tmp; -} - -#endif diff --git a/tests/suite/ecore/src/include/eina_inline_ustringshare.x b/tests/suite/ecore/src/include/eina_inline_ustringshare.x deleted file mode 100644 index ace6fdc325..0000000000 --- a/tests/suite/ecore/src/include/eina_inline_ustringshare.x +++ /dev/null @@ -1,93 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri - Tom Hacohen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_USTRINGSHARE_INLINE_H_ -#define EINA_USTRINGSHARE_INLINE_H_ - -#include "eina_unicode.h" -#include "eina_ustringshare.h" - -/** - * @addtogroup Eina_UStringshare_Group Unicode Stringshare - * - * @{ - */ - -/** - * Replace the previously stringshared pointer with new content. - * - * The string pointed by @a p_str should be previously stringshared or - * @c NULL and it will be eina_ustringshare_del(). The new string will - * be passed to eina_ustringshare_add() and then assigned to @c *p_str. - * - * @param p_str pointer to the stringhare to be replaced. Must not be - * @c NULL, but @c *p_str may be @c NULL as it is a valid - * stringshare handle. - * @param news new string to be stringshared, may be @c NULL. - * - * @return #EINA_TRUE if the strings were different and thus replaced, - * #EINA_FALSE if the strings were the same after shared. - */ -static inline Eina_Bool -eina_ustringshare_replace(const Eina_Unicode **p_str, const Eina_Unicode *news) -{ - if (*p_str == news) return EINA_FALSE; - - news = eina_ustringshare_add(news); - eina_ustringshare_del(*p_str); - if (*p_str == news) - return EINA_FALSE; - *p_str = news; - return EINA_TRUE; -} - -/** - * Replace the previously stringshared pointer with a new content. - * - * The string pointed by @a p_str should be previously stringshared or - * @c NULL and it will be eina_ustringshare_del(). The new string will - * be passed to eina_ustringshare_add_length() and then assigned to @c *p_str. - * - * @param p_str pointer to the stringhare to be replaced. Must not be - * @c NULL, but @c *p_str may be @c NULL as it is a valid - * stringshare handle. - * @param news new string to be stringshared, may be @c NULL. - * @param slen The string size (<= strlen(str)). - * - * @return #EINA_TRUE if the strings were different and thus replaced, - * #EINA_FALSE if the strings were the same after shared. - */ -static inline Eina_Bool -eina_ustringshare_replace_length(const Eina_Unicode **p_str, const Eina_Unicode *news, unsigned int slen) -{ - if (*p_str == news) return EINA_FALSE; - - news = eina_ustringshare_add_length(news, slen); - eina_ustringshare_del(*p_str); - if (*p_str == news) - return EINA_FALSE; - *p_str = news; - return EINA_TRUE; -} - -/** - * @} - */ - -#endif /* EINA_USTRINGSHARE_INLINE_H_ */ diff --git a/tests/suite/ecore/src/include/eina_inlist.h b/tests/suite/ecore/src/include/eina_inlist.h deleted file mode 100644 index 6e55de38ea..0000000000 --- a/tests/suite/ecore/src/include/eina_inlist.h +++ /dev/null @@ -1,139 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_INLIST_H_ -#define EINA_INLIST_H_ - -#include "eina_types.h" -#include "eina_iterator.h" -#include "eina_accessor.h" -#include - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @addtogroup Eina_Containers_Group Containers - * - * @{ - */ - -/** - * @defgroup Eina_Inline_List_Group Inline List - * - * @{ - */ - -/** - * @typedef Eina_Inlist - * Inlined list type. - */ -typedef struct _Eina_Inlist Eina_Inlist; - -/** - * @struct _Eina_Inlist - * Inlined list type. - */ -struct _Eina_Inlist { - Eina_Inlist *next; - /**< next node */ - Eina_Inlist *prev; - /**< previous node */ - Eina_Inlist *last; - /**< last node */ -}; - -#define EINA_INLIST Eina_Inlist __in_list -#define EINA_INLIST_GET(Inlist) (& ((Inlist)->__in_list)) -#define EINA_INLIST_CONTAINER_GET(ptr, \ - type) ((type *)((char *)ptr - \ - offsetof(type, __in_list))) - -EAPI Eina_Inlist *eina_inlist_append(Eina_Inlist * in_list, - Eina_Inlist * - in_item) EINA_ARG_NONNULL(2) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_Inlist *eina_inlist_prepend(Eina_Inlist * in_list, - Eina_Inlist * - in_item) EINA_ARG_NONNULL(2) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_Inlist *eina_inlist_append_relative(Eina_Inlist * in_list, - Eina_Inlist * in_item, - Eina_Inlist * - in_relative) -EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; -EAPI Eina_Inlist *eina_inlist_prepend_relative(Eina_Inlist * in_list, - Eina_Inlist * in_item, - Eina_Inlist * - in_relative) -EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; -EAPI Eina_Inlist *eina_inlist_remove(Eina_Inlist * in_list, - Eina_Inlist * - in_item) EINA_ARG_NONNULL(1, - 2) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_Inlist *eina_inlist_find(Eina_Inlist * in_list, - Eina_Inlist * - in_item) EINA_ARG_NONNULL(2) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_Inlist *eina_inlist_promote(Eina_Inlist * list, - Eina_Inlist * - item) EINA_ARG_NONNULL(1, - 2) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_Inlist *eina_inlist_demote(Eina_Inlist * list, - Eina_Inlist * - item) EINA_ARG_NONNULL(1, - 2) - EINA_WARN_UNUSED_RESULT; -EAPI unsigned int eina_inlist_count(const Eina_Inlist * - list) EINA_WARN_UNUSED_RESULT; - -EAPI Eina_Iterator *eina_inlist_iterator_new(const Eina_Inlist * in_list) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; -EAPI Eina_Accessor *eina_inlist_accessor_new(const Eina_Inlist * in_list) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; - -/* This two macros are helpers for the _FOREACH ones, don't use them */ -#define _EINA_INLIST_OFFSET(ref) ((char *)&(ref)->__in_list - (char *)(ref)) -#define _EINA_INLIST_CONTAINER(ref, ptr) (void *)((char *)(ptr) - \ - _EINA_INLIST_OFFSET(ref)) - -#define EINA_INLIST_FOREACH(list, l) \ - for (l = NULL, l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL); l; \ - l = (EINA_INLIST_GET(l)->next ? _EINA_INLIST_CONTAINER(l, EINA_INLIST_GET(l)->next) : NULL)) -#define EINA_INLIST_REVERSE_FOREACH(list, l) \ - for (l = NULL, l = (list ? _EINA_INLIST_CONTAINER(l, list->last) : NULL); \ - l; l = (EINA_INLIST_GET(l)->prev ? _EINA_INLIST_CONTAINER(l, EINA_INLIST_GET(l)->prev) : NULL)) - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#endif /*EINA_INLIST_H_ */ diff --git a/tests/suite/ecore/src/include/eina_iterator.h b/tests/suite/ecore/src/include/eina_iterator.h deleted file mode 100644 index 5db0809911..0000000000 --- a/tests/suite/ecore/src/include/eina_iterator.h +++ /dev/null @@ -1,149 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_ITERATOR_H__ -#define EINA_ITERATOR_H__ - -#include "eina_config.h" - -#include "eina_types.h" -#include "eina_magic.h" - -/** - * @addtogroup Eina_Content_Access_Group Content Access - * - * @{ - */ - -/** - * @defgroup Eina_Iterator_Group Iterator Functions - * - * @{ - */ - -/** - * @typedef Eina_Iterator - * Type for iterators. - */ -typedef struct _Eina_Iterator Eina_Iterator; - -typedef Eina_Bool(*Eina_Iterator_Next_Callback) (Eina_Iterator * it, - void **data); -typedef void *(*Eina_Iterator_Get_Container_Callback) (Eina_Iterator * it); -typedef void (*Eina_Iterator_Free_Callback) (Eina_Iterator * it); -typedef Eina_Bool(*Eina_Iterator_Lock_Callback) (Eina_Iterator * it); - -struct _Eina_Iterator { -#define EINA_ITERATOR_VERSION 1 - int version; - - Eina_Iterator_Next_Callback next EINA_ARG_NONNULL(1, - 2) - EINA_WARN_UNUSED_RESULT; - Eina_Iterator_Get_Container_Callback get_container - EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; - Eina_Iterator_Free_Callback free EINA_ARG_NONNULL(1); - - Eina_Iterator_Lock_Callback lock EINA_WARN_UNUSED_RESULT; - Eina_Iterator_Lock_Callback unlock EINA_WARN_UNUSED_RESULT; - -#define EINA_MAGIC_ITERATOR 0x98761233 - EINA_MAGIC}; - - -#define FUNC_ITERATOR_NEXT(Function) ((Eina_Iterator_Next_Callback)Function) -#define FUNC_ITERATOR_GET_CONTAINER(Function) (( \ - Eina_Iterator_Get_Container_Callback) \ - Function) -#define FUNC_ITERATOR_FREE(Function) ((Eina_Iterator_Free_Callback)Function) -#define FUNC_ITERATOR_LOCK(Function) ((Eina_Iterator_Lock_Callback)Function) - -EAPI void eina_iterator_free(Eina_Iterator * iterator) EINA_ARG_NONNULL(1); - -EAPI void *eina_iterator_container_get(Eina_Iterator * - iterator) EINA_ARG_NONNULL(1) - EINA_PURE; -EAPI Eina_Bool eina_iterator_next(Eina_Iterator * iterator, - void **data) EINA_ARG_NONNULL(1, - 2) - EINA_WARN_UNUSED_RESULT; - -EAPI void eina_iterator_foreach(Eina_Iterator * iterator, - Eina_Each_Cb callback, - const void *fdata) EINA_ARG_NONNULL(1, 2); - -EAPI Eina_Bool eina_iterator_lock(Eina_Iterator * - iterator) EINA_ARG_NONNULL(1); -EAPI Eina_Bool eina_iterator_unlock(Eina_Iterator * - iterator) EINA_ARG_NONNULL(1); - -/** - * @def EINA_ITERATOR_FOREACH - * @brief Macro to iterate over all elements easily. - * - * @param itr The iterator to use. - * @param data Where to store * data, must be a pointer support getting - * its address since * eina_iterator_next() requires a pointer - * to pointer! - * - * This macro is a convenient way to use iterators, very similar to - * EINA_LIST_FOREACH(). - * - * This macro can be used for freeing the data of a list, like in the - * following example. It has the same goal as the one documented in - * EINA_LIST_FOREACH(), but using iterators: - * - * @code - * Eina_List *list; - * Eina_Iterator *itr; - * char *data; - * - * // list is already filled, - * // its elements are just duplicated strings - * - * itr = eina_list_iterator_new(list); - * EINA_ITERATOR_FOREACH(itr, data) - * free(data); - * eina_iterator_free(itr); - * eina_list_free(list); - * @endcode - * - * @note this example is not optimal algorithm to release a list since - * it will walk the list twice, but it serves as an example. For - * optimized version use EINA_LIST_FREE() - * - * @warning unless explicitly stated in functions returning iterators, - * do not modify the iterated object while you walk it, in this - * example using lists, do not remove list nodes or you might - * crash! This is not a limitiation of iterators themselves, - * rather in the iterators implementations to keep them as simple - * and fast as possible. - */ -#define EINA_ITERATOR_FOREACH(itr, \ - data) while (eina_iterator_next((itr), \ - (void **)&(data))) - -/** - * @} - */ - -/** - * @} - */ - -#endif diff --git a/tests/suite/ecore/src/include/eina_lalloc.h b/tests/suite/ecore/src/include/eina_lalloc.h deleted file mode 100644 index 69ccba8653..0000000000 --- a/tests/suite/ecore/src/include/eina_lalloc.h +++ /dev/null @@ -1,61 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_LALLOC_H_ -#define EINA_LALLOC_H_ - -#include "eina_types.h" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_Lalloc_Group Lazy allocator - * - * @{ - */ - -typedef Eina_Bool(*Eina_Lalloc_Alloc) (void *user_data, int num); -#define EINA_LALLOC_ALLOC(function) ((Eina_Lalloc_Alloc)function) -typedef void (*Eina_Lalloc_Free) (void *user_data); -#define EINA_LALLOC_FREE(function) ((Eina_Lalloc_Free)function) - -typedef struct _Eina_Lalloc Eina_Lalloc; - -EAPI Eina_Lalloc *eina_lalloc_new(void *data, - Eina_Lalloc_Alloc alloc_cb, - Eina_Lalloc_Free free_cb, - int num_init) EINA_ARG_NONNULL(2, 3); -EAPI void eina_lalloc_free(Eina_Lalloc * a) EINA_ARG_NONNULL(1); -EAPI Eina_Bool eina_lalloc_elements_add(Eina_Lalloc * a, - int num) EINA_ARG_NONNULL(1); -EAPI Eina_Bool eina_lalloc_element_add(Eina_Lalloc * - a) EINA_ARG_NONNULL(1); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_LALLOC_H_ */ diff --git a/tests/suite/ecore/src/include/eina_list.h b/tests/suite/ecore/src/include/eina_list.h deleted file mode 100644 index 63219f7cda..0000000000 --- a/tests/suite/ecore/src/include/eina_list.h +++ /dev/null @@ -1,413 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_LIST_H_ -#define EINA_LIST_H_ - -#include - -#include "eina_config.h" - -#include "eina_types.h" -#include "eina_iterator.h" -#include "eina_accessor.h" -#include "eina_magic.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @addtogroup Eina_Containers_Group Containers - * - * @{ - */ - -/** - * @defgroup Eina_List_Group List - * - * @{ - */ - -/** - * @typedef Eina_List - * Type for a generic double linked list. - */ -typedef struct _Eina_List Eina_List; - -typedef struct _Eina_List_Accounting Eina_List_Accounting; - -/** - * @struct _Eina_List - * Type for a generic double linked list. - */ -struct _Eina_List { - void *data; - /**< Pointer to list element payload */ - Eina_List *next; - /**< Next member in the list */ - Eina_List *prev; - /**< Previous member in the list */ - Eina_List_Accounting *accounting; - /**< Private list accounting info - don't touch */ - - EINA_MAGIC}; - -struct _Eina_List_Accounting { - Eina_List *last; - unsigned int count; - EINA_MAGIC}; - -EAPI Eina_List *eina_list_append(Eina_List * list, - const void *data) EINA_ARG_NONNULL(2) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_prepend(Eina_List * list, - const void *data) EINA_ARG_NONNULL(2) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_append_relative(Eina_List * list, - const void *data, - const void *relative) -EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_append_relative_list(Eina_List * list, - const void *data, - Eina_List * - relative) -EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_prepend_relative(Eina_List * list, - const void *data, - const void *relative) -EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_prepend_relative_list(Eina_List * list, - const void *data, - Eina_List * - relative) -EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_sorted_insert(Eina_List * list, - Eina_Compare_Cb func, - const void *data) -EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_remove(Eina_List * list, - const void *data) EINA_ARG_NONNULL(2) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_remove_list(Eina_List * list, - Eina_List * - remove_list) EINA_ARG_NONNULL(2) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_promote_list(Eina_List * list, - Eina_List * - move_list) EINA_ARG_NONNULL(2) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_demote_list(Eina_List * list, - Eina_List * move_list); -EAPI void *eina_list_data_find(const Eina_List * list, const void *data) -EINA_PURE EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_data_find_list(const Eina_List * list, - const void *data) -EINA_PURE EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_free(Eina_List * list); -EAPI void *eina_list_nth(const Eina_List * list, unsigned int n) -EINA_PURE EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_nth_list(const Eina_List * list, unsigned int n) -EINA_PURE EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_reverse(Eina_List * - list) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_reverse_clone(const Eina_List * - list) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_clone(const Eina_List * - list) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_sort(Eina_List * list, unsigned int size, - Eina_Compare_Cb func) EINA_ARG_NONNULL(3) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_merge(Eina_List * left, - Eina_List * right) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_sorted_merge(Eina_List * left, Eina_List * right, - Eina_Compare_Cb func) -EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT; -EAPI Eina_List *eina_list_split_list(Eina_List * list, - Eina_List * relative, - Eina_List ** - right) EINA_WARN_UNUSED_RESULT; - - -EAPI Eina_List *eina_list_search_sorted_near_list(const Eina_List * list, - Eina_Compare_Cb func, - const void *data, - int *result_cmp); -EAPI Eina_List *eina_list_search_sorted_list(const Eina_List * list, - Eina_Compare_Cb func, - const void *data); -EAPI void *eina_list_search_sorted(const Eina_List * list, - Eina_Compare_Cb func, const void *data); -EAPI Eina_List *eina_list_search_unsorted_list(const Eina_List * list, - Eina_Compare_Cb func, - const void *data); -EAPI void *eina_list_search_unsorted(const Eina_List * list, - Eina_Compare_Cb func, - const void *data); - -static inline Eina_List *eina_list_last(const Eina_List * list) -EINA_PURE EINA_WARN_UNUSED_RESULT; -static inline Eina_List *eina_list_next(const Eina_List * list) -EINA_PURE EINA_WARN_UNUSED_RESULT; -static inline Eina_List *eina_list_prev(const Eina_List * list) -EINA_PURE EINA_WARN_UNUSED_RESULT; -static inline void *eina_list_data_get(const Eina_List * list) -EINA_PURE EINA_WARN_UNUSED_RESULT; -static inline unsigned int eina_list_count(const Eina_List * - list) EINA_PURE; - -EAPI Eina_Iterator *eina_list_iterator_new(const Eina_List * list) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; -EAPI Eina_Iterator *eina_list_iterator_reversed_new(const Eina_List * list) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; -EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List * list) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; - -/** - * @def EINA_LIST_FOREACH - * @brief Macro to iterate over a list. - * - * @param list The list to iterate over. - * @param l A list that is used as an iterator and points to the current node. - * @param data Current item's data. - * - * This macro iterates over @p list from the first element to - * the last. @p data is the data related to the current element. - * @p l is an #Eina_List used as the list iterator. - * - * It can be used to free list data, as in the following example: - * - * @code - * Eina_List *list; - * Eina_List *l; - * char *data; - * - * // list is already filled, - * // its elements are just duplicated strings, - * // EINA_LIST_FOREACH will be used to free those strings - * - * EINA_LIST_FOREACH(list, l, data) - * free(data); - * eina_list_free(list); - * @endcode - * - * @note This is not the optimal way to release memory allocated to - * a list, since it iterates over the list twice. - * For an optimized algorithm, use EINA_LIST_FREE(). - * - * @warning Be careful when deleting list nodes. - * If you remove the current node and continue iterating, - * the code will fail because the macro will not be able - * to get the next node. Notice that it's OK to remove any - * node if you stop the loop after that. - * For destructive operations such as this, consider - * using EINA_LIST_FOREACH_SAFE(). - */ -#define EINA_LIST_FOREACH(list, l, data) \ - for (l = list, \ - data = eina_list_data_get(l); \ - l; \ - l = eina_list_next(l), \ - data = eina_list_data_get(l)) - -/** - * @def EINA_LIST_REVERSE_FOREACH - * @brief Macro to iterate over a list in the reverse order. - * - * @param list The list to iterate over. - * @param l A list that is used as an iterator and points to the current node. - * @param data Current item's data. - * - * This macro works like EINA_LIST_FOREACH, but iterates from the - * last element of a list to the first. - * @p data is the data related to the current element, while @p l - * is an #Eina_List that is used as the list iterator. - * - * It can be used to free list data, as in the following example: - * - * @code - * Eina_List *list; - * Eina_List *l; - * char *data; - * - * // list is already filled, - * // its elements are just duplicated strings, - * // EINA_LIST_REVERSE_FOREACH will be used to free those strings - * - * EINA_LIST_REVERSE_FOREACH(list, l, data) - * free(data); - * eina_list_free(list); - * @endcode - * - * @note This is not the optimal way to release memory allocated to - * a list, since it iterates over the list twice. - * For an optimized algorithm, use EINA_LIST_FREE(). - * - * @warning Be careful when deleting list nodes. - * If you remove the current node and continue iterating, - * the code will fail because the macro will not be able - * to get the next node. Notice that it's OK to remove any - * node if you stop the loop after that. - * For destructive operations such as this, consider - * using EINA_LIST_REVERSE_FOREACH_SAFE(). - */ -#define EINA_LIST_REVERSE_FOREACH(list, l, data) \ - for (l = eina_list_last(list), \ - data = eina_list_data_get(l); \ - l; \ - l = eina_list_prev(l), \ - data = eina_list_data_get(l)) - -/** - * @def EINA_LIST_FOREACH_SAFE - * @brief Macro to iterate over a list with support for node deletion. - * - * @param list The list to iterate over. - * @param l A list that is used as an iterator and points to the current node. - * @param l_next A list that is used as an iterator and points to the next node. - * @param data Current item's data. - * - * This macro iterates over @p list from the first element to - * the last. @p data is the data related to the current element. - * @p l is an #Eina_List used as the list iterator. - * - * Since this macro stores a pointer to the next list node in @p l_next, - * deleting the current node and continuing looping is safe. - * - * This macro can be used to free list nodes, as in the following example: - * - * @code - * Eina_List *list; - * Eina_List *l; - * Eina_List *l_next; - * char *data; - * - * // list is already filled, - * // its elements are just duplicated strings, - * // EINA_LIST_FOREACH_SAFE will be used to free elements that match "key". - * - * EINA_LIST_FOREACH_SAFE(list, l, l_next, data) - * if (strcmp(data, "key") == 0) { - * free(data); - * list = eina_list_remove_list(list, l); - * } - * @endcode - */ -#define EINA_LIST_FOREACH_SAFE(list, l, l_next, data) \ - for (l = list, \ - l_next = eina_list_next(l), \ - data = eina_list_data_get(l); \ - l; \ - l = l_next, \ - l_next = eina_list_next(l), \ - data = eina_list_data_get(l)) - -/** - * @def EINA_LIST_REVERSE_FOREACH_SAFE - * @brief Macro to iterate over a list in the reverse order with support - * for deletion. - * - * @param list The list to iterate over. - * @param l A list that is used as an iterator and points to the current node. - * @param l_prev A list that is used as an iterator and points to the previous node. - * @param data Current item's data. - * - * This macro works like EINA_LIST_FOREACH_SAFE, but iterates from the - * last element of a list to the first. - * @p data is the data related to the current element, while @p l - * is an #Eina_List that is used as the list iterator. - * - * Since this macro stores a pointer to the previous list node in @p l_prev, - * deleting the current node and continuing looping is safe. - * - * This macro can be used to free list nodes, as in the following example: - * - * @code - * Eina_List *list; - * Eina_List *l; - * Eina_List *l_prev; - * char *data; - * - * // list is already filled, - * // its elements are just duplicated strings, - * // EINA_LIST_REVERSE_FOREACH_SAFE will be used to free elements that match "key". - * - * EINA_LIST_REVERSE_FOREACH_SAFE(list, l, l_prev, data) - * if (strcmp(data, "key") == 0) { - * free(data); - * list = eina_list_remove_list(list, l); - * } - * @endcode - */ -#define EINA_LIST_REVERSE_FOREACH_SAFE(list, l, l_prev, data) \ - for (l = eina_list_last(list), \ - l_prev = eina_list_prev(l), \ - data = eina_list_data_get(l); \ - l; \ - l = l_prev, \ - l_prev = eina_list_prev(l), \ - data = eina_list_data_get(l)) - -/** - * @def EINA_LIST_FREE - * @brief Macro to remove each list node while having access to each node's data. - * - * @param list The list that will be cleared. - * @param data Current node's data. - * - * This macro will call #eina_list_remove_list for each list node, and store - * the data contained in the current node in @p data. - * - * If you do not need to release node data, it is easier to call #eina_list_free(). - * - * @code - * Eina_List *list; - * char *data; - * - * // list is already filled, - * // its elements are just duplicated strings, - * - * EINA_LIST_FREE(list, data) - * free(data); - * @endcode - * - * @see eina_list_free() - */ -#define EINA_LIST_FREE(list, data) \ - for (data = eina_list_data_get(list); \ - list; \ - list = eina_list_remove_list(list, list), \ - data = eina_list_data_get(list)) - -#include "eina_inline_list.x" - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_LIST_H_ */ diff --git a/tests/suite/ecore/src/include/eina_log.h b/tests/suite/ecore/src/include/eina_log.h deleted file mode 100644 index 3e39bc5e8a..0000000000 --- a/tests/suite/ecore/src/include/eina_log.h +++ /dev/null @@ -1,381 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_LOG_H_ -#define EINA_LOG_H_ - -#include -#include - -#include "eina_types.h" - -#define EINA_COLOR_LIGHTRED "\033[31;1m" -#define EINA_COLOR_RED "\033[31m" -#define EINA_COLOR_LIGHTBLUE "\033[34;1m" -#define EINA_COLOR_BLUE "\033[34m" -#define EINA_COLOR_GREEN "\033[32;1m" -#define EINA_COLOR_YELLOW "\033[33;1m" -#define EINA_COLOR_ORANGE "\033[0;33m" -#define EINA_COLOR_WHITE "\033[37;1m" -#define EINA_COLOR_LIGHTCYAN "\033[36;1m" -#define EINA_COLOR_CYAN "\033[36m" -#define EINA_COLOR_RESET "\033[0m" -#define EINA_COLOR_HIGH "\033[1m" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_Log_Group Log - * - * @{ - */ - -/** - * EINA_LOG_DOMAIN_GLOBAL is the general purpose log domain to be - * used, it is always registered and available everywhere. - */ -EAPI extern int EINA_LOG_DOMAIN_GLOBAL; - -#ifndef EINA_LOG_DOMAIN_DEFAULT - -/** - * @def EINA_LOG_DOMAIN_DEFAULT - * This macro defines the domain to use with the macros EINA_LOG_DOM_DBG(), - * EINA_LOG_DOM_INFO(), EINA_LOG_DOM_WARN(), EINA_LOG_DOM_ERR() and - * EINA_LOG_DOM_CRIT(). - * - * If not defined prior to the inclusion of this header, then it - * defaults to #EINA_LOG_DOMAIN_GLOBAL. - * - * @note One may like to redefine this in its code to avoid typing too - * much. In this case the recommended way is: - * - * @code - * #include - * #undef EINA_LOG_DOMAIN_DEFAULT - * #define EINA_LOG_DOMAIN_DEFAULT _log_dom - * static int _log_dom = -1; - * - * int main(void) - * { - * eina_init(); - * _log_dom = eina_log_domain_register("mydom", EINA_COLOR_CYAN); - * EINA_LOG_ERR("using my own domain"); - * return 0; - * } - * @endcode - * - * @warning If one defines the domain prior to inclusion of this - * header, the defined log domain symbol must be defined - * prior as well, otherwise the inlined functions defined by - * Eina will fail to find the symbol, causing build failure. - * - * @code - * #define EINA_LOG_DOMAIN_DEFAULT _log_dom - * static int _log_dom = -1; // must come before inclusion of Eina.h! - * #include - * - * int main(void) - * { - * eina_init(); - * _log_dom = eina_log_domain_register("mydom", EINA_COLOR_CYAN); - * EINA_LOG_ERR("using my own domain"); - * return 0; - * } - * @endcode - * - */ -#define EINA_LOG_DOMAIN_DEFAULT EINA_LOG_DOMAIN_GLOBAL - -#endif /* EINA_LOG_DOMAIN_DEFAULT */ - - -/** - * @def EINA_LOG(DOM, LEVEL, fmt, ...) - * Logs a message on the specified domain, level and format. - * - * @note if @c EINA_LOG_LEVEL_MAXIMUM is defined, then messages larger - * than this value will be ignored regardless of current domain - * level, the eina_log_print() is not even called! Most - * compilers will just detect the two integers make the branch - * impossible and remove the branch and function call all - * together. Take this as optimization tip and possible remove - * debug messages from binaries to be deployed, saving on hot - * paths. Never define @c EINA_LOG_LEVEL_MAXIMUM on public - * header files. - */ -#ifdef EINA_LOG_LEVEL_MAXIMUM -#define EINA_LOG(DOM, LEVEL, fmt, ...) \ - do { \ - if (LEVEL <= EINA_LOG_LEVEL_MAXIMUM) { \ - eina_log_print(DOM, LEVEL, __FILE__, __FUNCTION__, __LINE__, \ - fmt, ## __VA_ARGS__); } \ - } while (0) -#else -#define EINA_LOG(DOM, LEVEL, fmt, ...) \ - eina_log_print(DOM, \ - LEVEL, \ - __FILE__, \ - __FUNCTION__, \ - __LINE__, \ - fmt, \ - ## __VA_ARGS__) -#endif - -/** - * @def EINA_LOG_DOM_CRIT(DOM, fmt, ...) - * Logs a message with level CRITICAL on the specified domain and format. - */ -#define EINA_LOG_DOM_CRIT(DOM, fmt, ...) \ - EINA_LOG(DOM, EINA_LOG_LEVEL_CRITICAL, fmt, ## __VA_ARGS__) - -/** - * @def EINA_LOG_DOM_ERR(DOM, fmt, ...) - * Logs a message with level ERROR on the specified domain and format. - */ -#define EINA_LOG_DOM_ERR(DOM, fmt, ...) \ - EINA_LOG(DOM, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__) - -/** - * @def EINA_LOG_DOM_INFO(DOM, fmt, ...) - * Logs a message with level INFO on the specified domain and format. - */ -#define EINA_LOG_DOM_INFO(DOM, fmt, ...) \ - EINA_LOG(DOM, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__) - -/** - * @def EINA_LOG_DOM_DBG(DOM, fmt, ...) - * Logs a message with level DEBUG on the specified domain and format. - */ -#define EINA_LOG_DOM_DBG(DOM, fmt, ...) \ - EINA_LOG(DOM, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__) - -/** - * @def EINA_LOG_DOM_WARN(DOM, fmt, ...) - * Logs a message with level WARN on the specified domain and format. - */ -#define EINA_LOG_DOM_WARN(DOM, fmt, ...) \ - EINA_LOG(DOM, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__) - -/** - * @def EINA_LOG_CRIT(fmt, ...) - * Logs a message with level CRITICAL on the default domain with the specified - * format. - */ -#define EINA_LOG_CRIT(fmt, ...) \ - EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, \ - EINA_LOG_LEVEL_CRITICAL, \ - fmt, \ - ## __VA_ARGS__) - -/** - * @def EINA_LOG_ERR(fmt, ...) - * Logs a message with level ERROR on the default domain with the specified - * format. - */ -#define EINA_LOG_ERR(fmt, ...) \ - EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__) - -/** - * @def EINA_LOG_INFO(fmt, ...) - * Logs a message with level INFO on the default domain with the specified - * format. - */ -#define EINA_LOG_INFO(fmt, ...) \ - EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__) - -/** - * @def EINA_LOG_WARN(fmt, ...) - * Logs a message with level WARN on the default domain with the specified - * format. - */ -#define EINA_LOG_WARN(fmt, ...) \ - EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__) - -/** - * @def EINA_LOG_DBG(fmt, ...) - * Logs a message with level DEBUG on the default domain with the specified - * format. - */ -#define EINA_LOG_DBG(fmt, ...) \ - EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__) - -/** - * @typedef Eina_Log_Domain - * The domain used for logging. - */ -typedef struct _Eina_Log_Domain Eina_Log_Domain; - -/** - * @struct _Eina_Log_Domain - * The domain used for logging. - */ -struct _Eina_Log_Domain { - int level; - /**< Max level to log */ - const char *domain_str; - /**< Formatted string with color to print */ - const char *name; - /**< Domain name */ - size_t namelen; - /**< strlen(name) */ - - /* Private */ - Eina_Bool deleted:1; - /**< Flags deletion of domain, a free slot */ -}; - -EAPI void eina_log_threads_enable(void); - -/** - * @enum _Eina_Log_Level - * List of available logging levels. - */ -typedef enum _Eina_Log_Level { - EINA_LOG_LEVEL_CRITICAL, - /**< Critical log level */ - EINA_LOG_LEVEL_ERR, - /**< Error log level */ - EINA_LOG_LEVEL_WARN, - /**< Warning log level */ - EINA_LOG_LEVEL_INFO, - /**< Information log level */ - EINA_LOG_LEVEL_DBG, - /**< Debug log level */ - EINA_LOG_LEVELS, - /**< Count of default log levels */ - EINA_LOG_LEVEL_UNKNOWN = (-2147483647 - 1)/**< Unknown level */ -} Eina_Log_Level; - -/** - * @typedef Eina_Log_Print_Cb - * Type for print callbacks. - */ -typedef void (*Eina_Log_Print_Cb) (const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file, const char *fnc, - int line, const char *fmt, void *data, - va_list args); - -/* - * Customization - */ -EAPI void -eina_log_print_cb_set(Eina_Log_Print_Cb cb, - void *data) EINA_ARG_NONNULL(1); - -EAPI void eina_log_level_set(int level); -EAPI int eina_log_level_get(void) EINA_WARN_UNUSED_RESULT; - -static inline Eina_Bool eina_log_level_check(int level); - -EAPI Eina_Bool eina_log_main_thread_check(void) -EINA_CONST EINA_WARN_UNUSED_RESULT; - -EAPI void eina_log_color_disable_set(Eina_Bool disabled); -EAPI Eina_Bool eina_log_color_disable_get(void) EINA_WARN_UNUSED_RESULT; -EAPI void eina_log_file_disable_set(Eina_Bool disabled); -EAPI Eina_Bool eina_log_file_disable_get(void) EINA_WARN_UNUSED_RESULT; -EAPI void eina_log_function_disable_set(Eina_Bool disabled); -EAPI Eina_Bool eina_log_function_disable_get(void) EINA_WARN_UNUSED_RESULT; -EAPI void eina_log_abort_on_critical_set(Eina_Bool abort_on_critical); -EAPI Eina_Bool -eina_log_abort_on_critical_get(void) EINA_WARN_UNUSED_RESULT; -EAPI void eina_log_abort_on_critical_level_set(int critical_level); -EAPI int -eina_log_abort_on_critical_level_get(void) EINA_WARN_UNUSED_RESULT; - -EAPI void -eina_log_domain_level_set(const char *domain_name, - int level) EINA_ARG_NONNULL(1); -EAPI int eina_log_domain_level_get(const char *domain_name) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); -EAPI int -eina_log_domain_registered_level_get(int domain) EINA_WARN_UNUSED_RESULT; -static inline Eina_Bool eina_log_domain_level_check(int domain, int level); - - -/* - * Logging domains - */ -EAPI int -eina_log_domain_register(const char *name, - const char *color) EINA_ARG_NONNULL(1); -EAPI void eina_log_domain_unregister(int domain); - -/* - * Logging functions. - */ -EAPI void -eina_log_print(int domain, - Eina_Log_Level level, - const char *file, - const char *function, - int line, - const char *fmt, - ...) EINA_ARG_NONNULL(3, 4, 6) EINA_PRINTF(6, - 7) -EINA_NOINSTRUMENT; -EAPI void eina_log_vprint(int domain, Eina_Log_Level level, - const char *file, const char *fnc, int line, - const char *fmt, - va_list args) EINA_ARG_NONNULL(3, 4, - 6) - EINA_NOINSTRUMENT; - - -/* - * Logging methods (change how logging is done). - */ -EAPI void -eina_log_print_cb_stdout(const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file, - const char *fnc, - int line, - const char *fmt, void *data, va_list args); -EAPI void -eina_log_print_cb_stderr(const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file, - const char *fnc, - int line, - const char *fmt, void *data, va_list args); -EAPI void -eina_log_print_cb_file(const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file, - const char *fnc, - int line, - const char *fmt, void *data, va_list args); - -#include "eina_inline_log.x" - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_LOG_H_ */ diff --git a/tests/suite/ecore/src/include/eina_magic.h b/tests/suite/ecore/src/include/eina_magic.h deleted file mode 100644 index 1f703932ad..0000000000 --- a/tests/suite/ecore/src/include/eina_magic.h +++ /dev/null @@ -1,156 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_MAGIC_H_ -#define EINA_MAGIC_H_ - - -#include "eina_config.h" -#include "eina_types.h" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_Magic_Group Magic - * - * @{ - */ - -typedef unsigned int Eina_Magic; - -/** - * @typedef Eina_Magic - * An abstract type for a magic number. - */ -EAPI const char *eina_magic_string_get(Eina_Magic magic) -EINA_PURE EINA_WARN_UNUSED_RESULT; -EAPI Eina_Bool eina_magic_string_set(Eina_Magic magic, - const char *magic_name) -EINA_ARG_NONNULL(2); -EAPI Eina_Bool eina_magic_string_static_set(Eina_Magic magic, - const char *magic_name) -EINA_ARG_NONNULL(2); - -/** - * @def EINA_MAGIC_NONE - * Random value for specifying that a structure using the magic - * feature has already been freed. It is used by eina_magic_fail(). - * - * If the magic feature of Eina is disabled, #EINA_MAGIC_NONE is just - * @c 0. - */ -#define EINA_MAGIC_NONE 0x1234fedc - -#ifdef EINA_MAGIC_DEBUG - -/** - * @def EINA_MAGIC - * Declaration of a variable of type #Eina_Magic. To put in a structure - * when one wants to use the magic feature of Eina with the functions - * of that structure, like that: - * - * @code - * struct Foo - * { - * int i; - * - * EINA_MAGIC - * }; - * @endcode - * - * If the magic feature of Eina is disabled, #EINA_MAGIC does nothing. - */ -#define EINA_MAGIC Eina_Magic __magic; - -/** - * @def EINA_MAGIC_SET(d, m) - * Set the magic number of @p d to @p m. @p d must be a valid pointer - * to a structure holding an Eina magic number declaration. Use - * #EINA_MAGIC to add such declaration. - * - * If the magic feature of Eina is disabled, #EINA_MAGIC_CHECK is just - * the value @c 0. - */ -#define EINA_MAGIC_SET(d, m) (d)->__magic = (m) - -/** - * @def EINA_MAGIC_CHECK(d, m) - * Test if @p d is @c NULL or not, and if not @c NULL, if - * @p d->__eina_magic is equal to @p m. @p d must be a structure that - * holds an Eina magic number declaration. Use #EINA_MAGIC to add such - * declaration. - * - * If the magic feature of Eina is disabled, #EINA_MAGIC_CHECK is just - * the value @c 1. - */ -#define EINA_MAGIC_CHECK(d, m) ((d) && ((d)->__magic == (m))) - -/** - * @def EINA_MAGIC_FAIL(d, m) - * Call eina_magic_fail() with the parameters @p d, @p d->__magic, @p - * m, __FILE__, __FUNCTION__ and __LINE__. @p d must be a structure that - * holds an Eina magic number declaration. Use #EINA_MAGIC to add such - * declaration. - * - * If the magic feature of Eina is disabled, #EINA_MAGIC_FAIL does - * nothing. - */ -#define EINA_MAGIC_FAIL(d, m) \ - eina_magic_fail((void *)(d), \ - (d) ? (d)->__magic : 0, \ - (m), \ - __FILE__, \ - __FUNCTION__, \ - __LINE__); - -EAPI void eina_magic_fail(void *d, Eina_Magic m, Eina_Magic req_m, - const char *file, const char *fnc, - int line) EINA_ARG_NONNULL(4, 5); - -#else - -/** - * @cond LOCAL - */ - -#define EINA_MAGIC -#define EINA_MAGIC_SET(d, m) ((void)0) -#define EINA_MAGIC_CHECK(d, m) (1) -#define EINA_MAGIC_FAIL(d, m) ((void)0) - -#define eina_magic_fail(d, m, req_m, file, fnx, line) ((void)0) - -/** - * @endcond - */ - -#endif - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_MAGIC_H_ */ diff --git a/tests/suite/ecore/src/include/eina_main.h b/tests/suite/ecore/src/include/eina_main.h deleted file mode 100644 index 06e64d9813..0000000000 --- a/tests/suite/ecore/src/include/eina_main.h +++ /dev/null @@ -1,78 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_MAIN_H_ -#define EINA_MAIN_H_ - -#include "eina_types.h" - -/** - * @addtogroup Eina_Core_Group Core - * - * @{ - */ - -/** - * @defgroup Eina_Main_Group Main - * - * @{ - */ - -/** - * @def EINA_VERSION_MAJOR - * @brief Major version of Eina - */ -#define EINA_VERSION_MAJOR 1 - -/** - * @def EINA_VERSION_MINOR - * @brief Minor version of Eina - */ -#define EINA_VERSION_MINOR 0 - -/** - * @typedef Eina_Version - * The version of Eina. - */ -typedef struct _Eina_Version { - int major; - /**< Major component of the version */ - int minor; - /**< Minor component of the version */ - int micro; - /**< Micro component of the version */ - int revision; - /**< Revision component of the version */ -} Eina_Version; - -EAPI extern Eina_Version *eina_version; - -EAPI int eina_init(void); -EAPI int eina_shutdown(void); -EAPI int eina_threads_init(void); -EAPI int eina_threads_shutdown(void); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_MAIN_H_ */ diff --git a/tests/suite/ecore/src/include/eina_matrixsparse.h b/tests/suite/ecore/src/include/eina_matrixsparse.h deleted file mode 100644 index 561ff1a6ba..0000000000 --- a/tests/suite/ecore/src/include/eina_matrixsparse.h +++ /dev/null @@ -1,150 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2009 Gustavo Sverzut Barbieri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_MATRIXSPARSE_H_ -#define EINA_MATRIXSPARSE_H_ - -#include - -#include "eina_config.h" - -#include "eina_types.h" -#include "eina_iterator.h" -#include "eina_accessor.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @addtogroup Eina_Containers_Group Containers - * - * @{ - */ - -/** - * @defgroup Eina_Matrixsparse_Group Sparse Matrix - * - * @{ - */ - -/** - * @typedef Eina_Matrixsparse - * Type for a generic sparse matrix. - */ -typedef struct _Eina_Matrixsparse Eina_Matrixsparse; - -/** - * @typedef Eina_Matrixsparse_Row - * Type for a generic sparse matrix row, opaque for users. - */ -typedef struct _Eina_Matrixsparse_Row Eina_Matrixsparse_Row; - -/** - * @typedef Eina_Matrixsparse_Cell - * Type for a generic sparse matrix cell, opaque for users. - */ -typedef struct _Eina_Matrixsparse_Cell Eina_Matrixsparse_Cell; - -typedef struct _Eina_Matrixsparse_Item_Cell Eina_Matrixsparse_Item_Cell; -typedef struct _Eina_Matrixsparse_Item_Row Eina_Matrixsparse_Item_Row; - - -/* constructors and destructors */ -EAPI Eina_Matrixsparse *eina_matrixsparse_new(unsigned long rows, - unsigned long cols, - void (*free_func) (void - *user_data, - void - *cell_data), - const void *user_data); -EAPI void eina_matrixsparse_free(Eina_Matrixsparse * m); - -/* size manipulation */ -EAPI void eina_matrixsparse_size_get(const Eina_Matrixsparse * m, - unsigned long *rows, - unsigned long *cols); -EAPI Eina_Bool eina_matrixsparse_size_set(Eina_Matrixsparse * m, - unsigned long rows, - unsigned long cols); - -/* data getting */ -EAPI Eina_Bool eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse * m, - unsigned long row, - unsigned long col, - Eina_Matrixsparse_Cell ** - cell); -EAPI void *eina_matrixsparse_cell_data_get(const Eina_Matrixsparse_Cell * - cell); -EAPI void *eina_matrixsparse_data_idx_get(const Eina_Matrixsparse * m, - unsigned long row, - unsigned long col); -EAPI Eina_Bool eina_matrixsparse_cell_position_get(const - Eina_Matrixsparse_Cell * - cell, - unsigned long *row, - unsigned long *col); - -/* data setting */ -EAPI Eina_Bool eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell * - cell, const void *data, - void **p_old); -EAPI Eina_Bool eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell * - cell, const void *data); -EAPI Eina_Bool eina_matrixsparse_data_idx_replace(Eina_Matrixsparse * m, - unsigned long row, - unsigned long col, - const void *data, - void **p_old); -EAPI Eina_Bool eina_matrixsparse_data_idx_set(Eina_Matrixsparse * m, - unsigned long row, - unsigned long col, - const void *data); - -/* data deleting */ -EAPI Eina_Bool eina_matrixsparse_row_idx_clear(Eina_Matrixsparse * m, - unsigned long row); -EAPI Eina_Bool eina_matrixsparse_column_idx_clear(Eina_Matrixsparse * m, - unsigned long col); -EAPI Eina_Bool eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse * m, - unsigned long row, - unsigned long col); -EAPI Eina_Bool eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell * cell); - -/* iterators */ -EAPI Eina_Iterator *eina_matrixsparse_iterator_new(const Eina_Matrixsparse - * m); -EAPI Eina_Iterator *eina_matrixsparse_iterator_complete_new(const - Eina_Matrixsparse - * m); - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_MATRIXSPARSE_H_ */ diff --git a/tests/suite/ecore/src/include/eina_mempool.h b/tests/suite/ecore/src/include/eina_mempool.h deleted file mode 100644 index b8004eb143..0000000000 --- a/tests/suite/ecore/src/include/eina_mempool.h +++ /dev/null @@ -1,87 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_MEMPOOL_H_ -#define EINA_MEMPOOL_H_ - -#include "eina_types.h" -#include "eina_error.h" -#include "eina_module.h" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_Memory_Pool_Group Memory Pool - * - * @{ - */ - -/** - * @typedef Eina_Mempool - * Mempool type. - */ -typedef struct _Eina_Mempool Eina_Mempool; - -/** - * @typedef Eina_Mempool_Backend - * Mempool backend type. - */ -typedef struct _Eina_Mempool_Backend Eina_Mempool_Backend; - -EAPI extern Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE; - -EAPI Eina_Mempool *eina_mempool_add(const char *module, - const char *context, - const char *options, ...) -EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); -EAPI void eina_mempool_del(Eina_Mempool * mp) EINA_ARG_NONNULL(1); - -static inline void *eina_mempool_realloc(Eina_Mempool * mp, void *element, - unsigned int size) -EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -static inline void *eina_mempool_malloc(Eina_Mempool * mp, - unsigned int size) -EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -static inline void eina_mempool_free(Eina_Mempool * mp, - void *element) EINA_ARG_NONNULL(1); - -EAPI void eina_mempool_gc(Eina_Mempool * mp) EINA_ARG_NONNULL(1); -EAPI void eina_mempool_statistics(Eina_Mempool * mp) EINA_ARG_NONNULL(1); - -EAPI Eina_Bool eina_mempool_register(Eina_Mempool_Backend * - be) EINA_ARG_NONNULL(1); -EAPI void eina_mempool_unregister(Eina_Mempool_Backend * - be) EINA_ARG_NONNULL(1); - -EAPI unsigned int eina_mempool_alignof(unsigned int size); - -#include "eina_inline_mempool.x" - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_MEMPOOL_H_ */ diff --git a/tests/suite/ecore/src/include/eina_module.h b/tests/suite/ecore/src/include/eina_module.h deleted file mode 100644 index 4b856c8bf2..0000000000 --- a/tests/suite/ecore/src/include/eina_module.h +++ /dev/null @@ -1,151 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_MODULE_H_ -#define EINA_MODULE_H_ - -#include "eina_types.h" -#include "eina_array.h" -#include "eina_error.h" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_Module_Group Module - * - * Eina module provides some helpers over POSIX dlopen(). It is not - * meant to replace, abstract or make a "portable" version of the - * POSIX, but enhance its usage by defining some good practices. - * - * Modules are created with eina_module_new() and later loaded with - * eina_module_load(). Loads are reference counted and there must be - * the same number of eina_module_unload() in order to have it to call - * dlclose(). This makes simple to have different users for the same - * module. - * - * The loaded shared objects may have two visible functions that will - * be called and might provide initialization and shutdown - * proceedures. The symbols are @c __eina_module_init and - * @c __eina_module_shutdown and will be defined by the macros - * EINA_MODULE_INIT() and EINA_MODULE_SHUTDOWN(). - * - * There are some helpers to automatically create modules based on - * directory listing. See eina_module_arch_list_get(), - * eina_module_list_get() and eina_module_find(). - * - * @{ - */ - -/** - * @typedef Eina_Module - * Dynamic module loader handle. - */ -typedef struct _Eina_Module Eina_Module; - -typedef Eina_Bool(*Eina_Module_Cb) (Eina_Module * m, void *data); - -/** - * @typedef Eina_Module_Init - * If a function with such signature is exported by module as - * __eina_module_init, it will be called on the first load after - * dlopen() and if #EINA_FALSE is returned, load will fail, #EINA_TRUE - * means the module was successfully initialized. - * @see Eina_Module_Shutdown - */ -typedef Eina_Bool(*Eina_Module_Init) (void); - -/** - * @typedef Eina_Module_Shutdown - * If a function with such signature is exported by module as - * __eina_module_shutdown, it will be called before calling dlclose() - * @see Eina_Module_Init - */ -typedef void (*Eina_Module_Shutdown) (void); - -/** - * @def EINA_MODULE_INIT - * declares the given function as the module initializer (__eina_module_init). - * It must be of signature #Eina_Module_Init - */ -#define EINA_MODULE_INIT(f) EAPI Eina_Module_Init __eina_module_init = &f - -/** - * @def EINA_MODULE_SHUTDOWN - * declares the given function as the module shutdownializer - * (__eina_module_shutdown). It must be of signature - * #Eina_Module_Shutdown - */ -#define EINA_MODULE_SHUTDOWN(f) EAPI Eina_Module_Shutdown __eina_module_shutdown = &f - -/** - * @var EINA_ERROR_WRONG_MODULE - * Error identifier corresponding to a wrong module. - */ -extern EAPI Eina_Error EINA_ERROR_WRONG_MODULE; - -/** - * @var EINA_ERROR_MODULE_INIT_FAILED - * Error identifier corresponding to a failure during the initialisation of a module. - */ -extern EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED; - -EAPI Eina_Module *eina_module_new(const char *file) -EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); -EAPI Eina_Bool eina_module_free(Eina_Module * m) EINA_ARG_NONNULL(1); -EAPI Eina_Bool eina_module_load(Eina_Module * module) EINA_ARG_NONNULL(1); -EAPI Eina_Bool eina_module_unload(Eina_Module * m) EINA_ARG_NONNULL(1); -EAPI void *eina_module_symbol_get(const Eina_Module * module, - const char *symbol) -EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; -EAPI const char *eina_module_file_get(const Eina_Module * m) -EINA_PURE EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); - -EAPI char *eina_module_symbol_path_get(const void *symbol, - const char *sub_dir) -EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2); -EAPI char *eina_module_environment_path_get(const char *env, - const char *sub_dir) -EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2); - -EAPI Eina_Array *eina_module_arch_list_get(Eina_Array * array, - const char *path, - const char *arch); -EAPI Eina_Array *eina_module_list_get(Eina_Array * array, const char *path, - Eina_Bool recursive, - Eina_Module_Cb cb, void *data) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; -EAPI void eina_module_list_load(Eina_Array * list) EINA_ARG_NONNULL(1); -EAPI void eina_module_list_unload(Eina_Array * list) EINA_ARG_NONNULL(1); -EAPI void eina_module_list_free(Eina_Array * list) EINA_ARG_NONNULL(1); -EAPI Eina_Module *eina_module_find(const Eina_Array * array, - const char *module) EINA_ARG_NONNULL(1, - 2); - -/** - * @} - */ - -/** - * @} - */ - -#endif /*EINA_MODULE_H_ */ diff --git a/tests/suite/ecore/src/include/eina_quadtree.h b/tests/suite/ecore/src/include/eina_quadtree.h deleted file mode 100644 index f77b21c954..0000000000 --- a/tests/suite/ecore/src/include/eina_quadtree.h +++ /dev/null @@ -1,58 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2010 Cedric BAIL - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_QUADTREE_H_ -#define EINA_QUADTREE_H_ - -#include "eina_config.h" - -#include "eina_inlist.h" - -typedef struct _Eina_QuadTree Eina_QuadTree; -typedef struct _Eina_QuadTree_Item Eina_QuadTree_Item; - -typedef enum { - EINA_QUAD_LEFT, - EINA_QUAD_RIGHT, - EINA_QUAD_BOTH -} Eina_Quad_Direction; - -typedef Eina_Quad_Direction(*Eina_Quad_Callback) (const void *object, - size_t middle); - -EAPI Eina_QuadTree *eina_quadtree_new(size_t w, size_t h, - Eina_Quad_Callback vertical, - Eina_Quad_Callback horizontal); -EAPI void eina_quadtree_free(Eina_QuadTree * q); -EAPI void eina_quadtree_resize(Eina_QuadTree * q, size_t w, size_t h); - -EAPI void eina_quadtree_cycle(Eina_QuadTree * q); -EAPI void eina_quadtree_increase(Eina_QuadTree_Item * object); - -EAPI Eina_QuadTree_Item *eina_quadtree_add(Eina_QuadTree * q, - const void *object); -EAPI Eina_Bool eina_quadtree_del(Eina_QuadTree_Item * object); -EAPI Eina_Bool eina_quadtree_change(Eina_QuadTree_Item * object); -EAPI Eina_Bool eina_quadtree_hide(Eina_QuadTree_Item * object); -EAPI Eina_Bool eina_quadtree_show(Eina_QuadTree_Item * object); - -EAPI Eina_Inlist *eina_quadtree_collide(Eina_QuadTree * q, int x, int y, - int w, int h); -EAPI void *eina_quadtree_object(Eina_Inlist * list); - -#endif diff --git a/tests/suite/ecore/src/include/eina_rbtree.h b/tests/suite/ecore/src/include/eina_rbtree.h deleted file mode 100644 index f2b0e987bb..0000000000 --- a/tests/suite/ecore/src/include/eina_rbtree.h +++ /dev/null @@ -1,179 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_RBTREE_H__ -#define EINA_RBTREE_H__ - -#include - -#include "eina_types.h" -#include "eina_error.h" -#include "eina_iterator.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @addtogroup Eina_Containers_Group Containers - * - * @{ - */ - -/** - * @defgroup Eina_Rbtree_Group Red-Black tree - * - * @{ - */ - -/** - * @typedef Eina_Rbtree_Color - * node color. - */ -typedef enum { - EINA_RBTREE_RED, - EINA_RBTREE_BLACK -} Eina_Rbtree_Color; - -/** - * @typedef Eina_Rbtree_Direction - * walk direction. - */ -typedef enum { - EINA_RBTREE_LEFT = 0, - EINA_RBTREE_RIGHT = 1 -} Eina_Rbtree_Direction; - -/** - * @typedef Eina_Rbtree - * Type for a Red-Black tree node. It should be inlined into user's type. - */ -typedef struct _Eina_Rbtree Eina_Rbtree; -struct _Eina_Rbtree { - Eina_Rbtree *son[2]; - - Eina_Rbtree_Color color:1; -}; - -/** - * @def EINA_RBTREE - * recommended way to declare the inlined Eina_Rbtree in your type. - * - * @code - * struct my_type { - * EINA_RBTREE; - * int my_value; - * char *my_name; - * }; - * @endcode - * - * @see EINA_RBTREE_GET() - */ -#define EINA_RBTREE Eina_Rbtree __rbtree - -/** - * @def EINA_RBTREE_GET - * access the inlined node if it was created with #EINA_RBTREE. - */ -#define EINA_RBTREE_GET(Rbtree) & ((Rbtree)->__rbtree) - -/** - * @typedef Eina_Rbtree_Cmp_Node_Cb - * Function used compare two nodes and see which direction to navigate. - */ -typedef Eina_Rbtree_Direction(*Eina_Rbtree_Cmp_Node_Cb) (const Eina_Rbtree - * left, - const Eina_Rbtree - * right, - void *data); - -/** - * @def EINA_RBTREE_CMP_NODE_CB - * Cast using #Eina_Rbtree_Cmp_Node_Cb - */ -#define EINA_RBTREE_CMP_NODE_CB(Function) ((Eina_Rbtree_Cmp_Node_Cb)Function) - -/** - * @typedef Eina_Rbtree_Cmp_Key_Cb - * Function used compare node with a given key of specified length. - */ -typedef int (*Eina_Rbtree_Cmp_Key_Cb) (const Eina_Rbtree * node, - const void *key, int length, - void *data); -/** - * @def EINA_RBTREE_CMP_KEY_CB - * Cast using #Eina_Rbtree_Cmp_Key_Cb - */ -#define EINA_RBTREE_CMP_KEY_CB(Function) ((Eina_Rbtree_Cmp_Key_Cb)Function) - -/** - * @typedef Eina_Rbtree_Free_Cb - * Function used free a node. - */ -typedef void (*Eina_Rbtree_Free_Cb) (Eina_Rbtree * node, void *data); -/** - * @def EINA_RBTREE_FREE_CB - * Cast using #Eina_Rbtree_Free_Cb - */ -#define EINA_RBTREE_FREE_CB(Function) ((Eina_Rbtree_Free_Cb)Function) - -EAPI Eina_Rbtree *eina_rbtree_inline_insert(Eina_Rbtree * root, - Eina_Rbtree * node, - Eina_Rbtree_Cmp_Node_Cb cmp, - const void *data) -EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT; -EAPI Eina_Rbtree *eina_rbtree_inline_remove(Eina_Rbtree * root, - Eina_Rbtree * node, - Eina_Rbtree_Cmp_Node_Cb cmp, - const void *data) -EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT; -EAPI void eina_rbtree_delete(Eina_Rbtree * root, Eina_Rbtree_Free_Cb func, - void *data) EINA_ARG_NONNULL(2); - -static inline Eina_Rbtree *eina_rbtree_inline_lookup(const Eina_Rbtree * - root, const void *key, - int length, - Eina_Rbtree_Cmp_Key_Cb - cmp, const void *data) -EINA_PURE EINA_ARG_NONNULL(2, 4) EINA_WARN_UNUSED_RESULT; - -EAPI Eina_Iterator *eina_rbtree_iterator_prefix(const Eina_Rbtree * root) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; -EAPI Eina_Iterator *eina_rbtree_iterator_infix(const Eina_Rbtree * root) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; -EAPI Eina_Iterator *eina_rbtree_iterator_postfix(const Eina_Rbtree * root) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; - -#include "eina_inline_rbtree.x" - - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#endif diff --git a/tests/suite/ecore/src/include/eina_rectangle.h b/tests/suite/ecore/src/include/eina_rectangle.h deleted file mode 100644 index 71a4e70c28..0000000000 --- a/tests/suite/ecore/src/include/eina_rectangle.h +++ /dev/null @@ -1,158 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_RECTANGLE_H_ -#define EINA_RECTANGLE_H_ - -#include "eina_types.h" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_Rectangle_Group Rectangle - * - * @{ - */ - -/** - * @typedef Eina_Rectangle - * Simple rectangle structure. - */ -typedef struct _Eina_Rectangle { - int x; - /**< top-left x co-ordinate of rectangle */ - int y; - /**< top-left y co-ordinate of rectangle */ - int w; - /**< width of rectangle */ - int h; - /**< height of rectangle */ -} Eina_Rectangle; - -/** - * @typedef Eina_Rectangle_Pool - * Type for an opaque pool of rectangle. - */ -typedef struct _Eina_Rectangle_Pool Eina_Rectangle_Pool; - -static inline int eina_spans_intersect(int c1, int l1, int c2, - int l2) EINA_WARN_UNUSED_RESULT; -static inline Eina_Bool eina_rectangle_is_empty(const Eina_Rectangle * - r) EINA_ARG_NONNULL(1) - EINA_WARN_UNUSED_RESULT; -static inline void eina_rectangle_coords_from(Eina_Rectangle * r, int x, - int y, int w, - int h) EINA_ARG_NONNULL(1); -static inline Eina_Bool eina_rectangles_intersect(const Eina_Rectangle * - r1, - const Eina_Rectangle * - r2) EINA_ARG_NONNULL(1, - 2) - EINA_WARN_UNUSED_RESULT; -static inline Eina_Bool eina_rectangle_xcoord_inside(const Eina_Rectangle * - r, - int x) -EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -static inline Eina_Bool eina_rectangle_ycoord_inside(const Eina_Rectangle * - r, - int y) -EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -static inline Eina_Bool eina_rectangle_coords_inside(const Eina_Rectangle * - r, int x, - int y) -EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -static inline void eina_rectangle_union(Eina_Rectangle * dst, - const Eina_Rectangle * - src) EINA_ARG_NONNULL(1, 2); -static inline Eina_Bool eina_rectangle_intersection(Eina_Rectangle * dst, - const Eina_Rectangle * - src) -EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; -static inline void eina_rectangle_rescale_in(const Eina_Rectangle * out, - const Eina_Rectangle * in, - Eina_Rectangle * - res) EINA_ARG_NONNULL(1, 2, - 3); -static inline void eina_rectangle_rescale_out(const Eina_Rectangle * out, - const Eina_Rectangle * in, - Eina_Rectangle * - res) EINA_ARG_NONNULL(1, 2, - 3); - -EAPI Eina_Rectangle_Pool *eina_rectangle_pool_new(int w, int h) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; -EAPI Eina_Rectangle_Pool *eina_rectangle_pool_get(Eina_Rectangle * rect) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); -EAPI Eina_Bool eina_rectangle_pool_geometry_get(Eina_Rectangle_Pool * pool, - int *w, int *h) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; -EAPI void *eina_rectangle_pool_data_get(Eina_Rectangle_Pool * pool) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); -EAPI void eina_rectangle_pool_data_set(Eina_Rectangle_Pool * pool, - const void *data) -EINA_ARG_NONNULL(1); -EAPI void eina_rectangle_pool_free(Eina_Rectangle_Pool * - pool) EINA_ARG_NONNULL(1); -EAPI int eina_rectangle_pool_count(Eina_Rectangle_Pool * - pool) EINA_ARG_NONNULL(1) - EINA_WARN_UNUSED_RESULT; -EAPI Eina_Rectangle *eina_rectangle_pool_request(Eina_Rectangle_Pool * - pool, int w, int h) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); -EAPI void eina_rectangle_pool_release(Eina_Rectangle * - rect) EINA_ARG_NONNULL(1); - -/** - * @def EINA_RECTANGLE_SET - * @brief Macro to set the values of a #Eina_Rectangle. - * - * @param Rectangle The rectangle to set the values. - * @param X The X coordinate of the top left corner of the rectangle. - * @param Y The Y coordinate of the top left corner of the rectangle. - * @param W The width of the rectangle. - * @param H The height of the rectangle. - * - * This macro set the values of @p Rectangle. (@p X, @p Y) is the - * coordinates of the top left corner of @p Rectangle, @p W is its - * width and @p H is its height. - */ -#define EINA_RECTANGLE_SET(Rectangle, X, Y, W, H) \ - (Rectangle)->x = X; \ - (Rectangle)->y = Y; \ - (Rectangle)->w = W; \ - (Rectangle)->h = H; - -EAPI Eina_Rectangle *eina_rectangle_new(int x, int y, int w, int h) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; -EAPI void eina_rectangle_free(Eina_Rectangle * rect) EINA_ARG_NONNULL(1); - -#include "eina_inline_rectangle.x" - -/** - * @} - */ - -/** - * @} - */ - -#endif /*_EINA_RECTANGLE_H_*/ diff --git a/tests/suite/ecore/src/include/eina_safety_checks.h b/tests/suite/ecore/src/include/eina_safety_checks.h deleted file mode 100644 index 43bb86e6b8..0000000000 --- a/tests/suite/ecore/src/include/eina_safety_checks.h +++ /dev/null @@ -1,234 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Gustavo Sverzut Barbieri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_SAFETY_CHECKS_H_ -#define EINA_SAFETY_CHECKS_H_ - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_Safety_Checks_Group Safety Checks - * - * @warning @c eina_safety_checks.h should only be included by source - * files, after all other includes and before the source file - * specific includes. By source file specific includes we - * mean those that define the functions that are being - * checked. The reason for such complexity is the trick to - * avoid compiler optimizations. If compilers are told that - * some given function will never receive @c NULL - * (EINA_ARG_NONNULL(), then compiler will emit a warning if - * it detects so (good!) but will remove any checks for that - * condition as it believes it will never happen, removing - * all safety checks! By including @c eina_safety_checks.h it - * will redefine EINA_ARG_NONNULL() to void and compiler - * warning will not be emitted, but checks will be there. The - * files already processed with the old macro - * EINA_ARG_NONNULL() will still work and emit the warnings. - * - * - * @code - * - * // all these files will emit warning from EINA_ARG_NONNULL() - * #include // third party headers - * #include - * #include // eina own header - * - * #include - * // all these files below will NOT emit warning from EINA_ARG_NONNULL(), - * // but this is required to have the functions defined there to be checked - * // for NULL pointers - * #include "my_functions1.h" - * #include "my_functions2.h" - * - * @endcode - * - * @{ - */ - - -#include "eina_config.h" -#include "eina_error.h" - -/** - * @var EINA_ERROR_SAFETY_FAILED - * Error identifier corresponding to safety check failure. - */ -EAPI extern Eina_Error EINA_ERROR_SAFETY_FAILED; - -#ifdef EINA_SAFETY_CHECKS - -#include "eina_log.h" - -#define EINA_SAFETY_ON_NULL_RETURN(exp) \ - do \ - { \ - if (EINA_UNLIKELY((exp) == NULL)) \ - { \ - eina_error_set(EINA_ERROR_SAFETY_FAILED); \ - EINA_LOG_ERR("%s", "safety check failed: " # exp " == NULL"); \ - return; \ - } \ - } \ - while (0) - -#define EINA_SAFETY_ON_NULL_RETURN_VAL(exp, val) \ - do \ - { \ - if (EINA_UNLIKELY((exp) == NULL)) \ - { \ - eina_error_set(EINA_ERROR_SAFETY_FAILED); \ - EINA_LOG_ERR("%s", "safety check failed: " # exp " == NULL"); \ - return (val); \ - } \ - } \ - while (0) - -#define EINA_SAFETY_ON_NULL_GOTO(exp, label) \ - do \ - { \ - if (EINA_UNLIKELY((exp) == NULL)) \ - { \ - eina_error_set(EINA_ERROR_SAFETY_FAILED); \ - EINA_LOG_ERR("%s", "safety check failed: " # exp " == NULL"); \ - goto label; \ - } \ - } \ - while (0) - -#define EINA_SAFETY_ON_TRUE_RETURN(exp) \ - do \ - { \ - if (EINA_UNLIKELY(exp)) \ - { \ - eina_error_set(EINA_ERROR_SAFETY_FAILED); \ - EINA_LOG_ERR("%s", "safety check failed: " # exp " is true"); \ - return; \ - } \ - } \ - while (0) - -#define EINA_SAFETY_ON_TRUE_RETURN_VAL(exp, val) \ - do \ - { \ - if (EINA_UNLIKELY(exp)) \ - { \ - eina_error_set(EINA_ERROR_SAFETY_FAILED); \ - EINA_LOG_ERR("%s", "safety check failed: " # exp " is true"); \ - return val; \ - } \ - } \ - while (0) - -#define EINA_SAFETY_ON_TRUE_GOTO(exp, label) \ - do \ - { \ - if (EINA_UNLIKELY(exp)) \ - { \ - eina_error_set(EINA_ERROR_SAFETY_FAILED); \ - EINA_LOG_ERR("%s", "safety check failed: " # exp " is true"); \ - goto label; \ - } \ - } \ - while (0) - -#define EINA_SAFETY_ON_FALSE_RETURN(exp) \ - do \ - { \ - if (EINA_UNLIKELY(!(exp))) \ - { \ - eina_error_set(EINA_ERROR_SAFETY_FAILED); \ - EINA_LOG_ERR("%s", "safety check failed: " # exp " is false"); \ - return; \ - } \ - } \ - while (0) - -#define EINA_SAFETY_ON_FALSE_RETURN_VAL(exp, val) \ - do \ - { \ - if (EINA_UNLIKELY(!(exp))) \ - { \ - eina_error_set(EINA_ERROR_SAFETY_FAILED); \ - EINA_LOG_ERR("%s", "safety check failed: " # exp " is false"); \ - return val; \ - } \ - } \ - while (0) - -#define EINA_SAFETY_ON_FALSE_GOTO(exp, label) \ - do \ - { \ - if (EINA_UNLIKELY(!(exp))) \ - { \ - eina_error_set(EINA_ERROR_SAFETY_FAILED); \ - EINA_LOG_ERR("%s", "safety check failed: " # exp " is false"); \ - goto label; \ - } \ - } \ - while (0) - -#ifdef EINA_ARG_NONNULL -/* make EINA_ARG_NONNULL void so GCC does not optimize safety checks */ -#undef EINA_ARG_NONNULL -#define EINA_ARG_NONNULL(idx, ...) -#endif - - -#else /* no safety checks */ - -#define EINA_SAFETY_ON_NULL_RETURN(exp) \ - do { (void)(!(exp)); } while (0) - -#define EINA_SAFETY_ON_NULL_RETURN_VAL(exp, val) \ - do { if (0 && !(exp)) { (void)val; } } while (0) - -#define EINA_SAFETY_ON_NULL_GOTO(exp, label) \ - do { if (0 && (exp) == NULL) { goto label; } } while (0) - -#define EINA_SAFETY_ON_TRUE_RETURN(exp) \ - do { (void)(exp); } while (0) - -#define EINA_SAFETY_ON_TRUE_RETURN_VAL(exp, val) \ - do { if (0 && (exp)) { (void)val; } } while (0) - -#define EINA_SAFETY_ON_TRUE_GOTO(exp, label) \ - do { if (0 && (exp)) { goto label; } } while (0) - -#define EINA_SAFETY_ON_FALSE_RETURN(exp) \ - do { (void)(!(exp)); } while (0) - -#define EINA_SAFETY_ON_FALSE_RETURN_VAL(exp, val) \ - do { if (0 && !(exp)) { (void)val; } } while (0) - -#define EINA_SAFETY_ON_FALSE_GOTO(exp, label) \ - do { if (0 && !(exp)) { goto label; } } while (0) - -#endif /* safety checks macros */ -#endif /* EINA_SAFETY_CHECKS_H_ */ - -/** - * @} - */ - -/** - * @} - */ diff --git a/tests/suite/ecore/src/include/eina_sched.h b/tests/suite/ecore/src/include/eina_sched.h deleted file mode 100644 index 89d0d9eaf0..0000000000 --- a/tests/suite/ecore/src/include/eina_sched.h +++ /dev/null @@ -1,26 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2010 ProFUSION embedded systems - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_SCHED_H_ -#define EINA_SCHED_H_ - -#include "eina_types.h" - -EAPI void eina_sched_prio_drop(void); - -#endif /* EINA_SCHED_H_ */ diff --git a/tests/suite/ecore/src/include/eina_str.h b/tests/suite/ecore/src/include/eina_str.h deleted file mode 100644 index 736fa6a7a4..0000000000 --- a/tests/suite/ecore/src/include/eina_str.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef _EINA_STR_H -#define _EINA_STR_H - -#include -#include - -#include "eina_types.h" - -/** - * @addtogroup Eina_Tools_Group Tools - * - * @{ - */ - -/** - * @defgroup Eina_String_Group String - * - * @{ - */ - -/* strlcpy implementation for libc's lacking it */ -EAPI size_t eina_strlcpy(char *dst, const char *src, - size_t siz) EINA_ARG_NONNULL(1, 2); -EAPI size_t eina_strlcat(char *dst, const char *src, - size_t siz) EINA_ARG_NONNULL(1, 2); - -EAPI Eina_Bool eina_str_has_prefix(const char *str, const char *prefix) -EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; -EAPI Eina_Bool eina_str_has_suffix(const char *str, const char *suffix) -EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; -EAPI Eina_Bool eina_str_has_extension(const char *str, const char *ext) -EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; - -EAPI char **eina_str_split(const char *string, const char *delimiter, - int max_tokens) EINA_ARG_NONNULL(1, 2) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; -EAPI char **eina_str_split_full(const char *string, const char *delimiter, - int max_tokens, - unsigned int *elements) EINA_ARG_NONNULL(1, - 2, - 4) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; - -EAPI size_t eina_str_join_len(char *dst, size_t size, char sep, - const char *a, size_t a_len, const char *b, - size_t b_len) EINA_ARG_NONNULL(1, 4, 6); - -EAPI char *eina_str_convert(const char *enc_from, const char *enc_to, - const char *text) -EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1, 2, 3); - -EAPI char *eina_str_escape(const char *str) -EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1); - -EAPI void eina_str_tolower(char **str); -EAPI void eina_str_toupper(char **str); - -static inline size_t eina_str_join(char *dst, size_t size, char sep, - const char *a, - const char *b) EINA_ARG_NONNULL(1, 4, - 5); - -/** - * @def eina_str_join_static(dst, sep, a, b) - * @brief Join two static strings and store the result in a static buffer. - * - * @param dst The buffer to store the result. - * @param sep The separator character to use. - * @param a First string to use, before @p sep. - * @param b Second string to use, after @p sep. - * @return The number of characters printed. - * - * This function is similar to eina_str_join_len(), but will assume - * string sizes are know using sizeof(X). - * - * @see eina_str_join() - * @see eina_str_join_static() - */ -#define eina_str_join_static(dst, sep, a, b) eina_str_join_len(dst, sizeof(dst), sep, a, (sizeof(a) > 0) ? sizeof(a) - 1 : 0, b, (sizeof(b) > 0) ? sizeof(b) - 1 : 0) - -static inline size_t eina_strlen_bounded(const char *str, size_t maxlen) -EINA_PURE EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); - -#include "eina_inline_str.x" - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_STR_H */ diff --git a/tests/suite/ecore/src/include/eina_strbuf.h b/tests/suite/ecore/src/include/eina_strbuf.h deleted file mode 100644 index 432fe5f179..0000000000 --- a/tests/suite/ecore/src/include/eina_strbuf.h +++ /dev/null @@ -1,521 +0,0 @@ -#ifndef EINA_STRBUF_H -#define EINA_STRBUF_H - -#include -#include - -#include "eina_types.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @defgroup Eina_String_Buffer_Group String Buffer - * - * @{ - */ - -/** - * @typedef Eina_Strbuf - * Type for a string buffer. - */ -typedef struct _Eina_Strbuf Eina_Strbuf; - -/** - * @brief Create a new string buffer. - * - * @return Newly allocated string buffer instance. - * - * This function creates a new string buffer. On error, @c NULL is - * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To - * free the resources, use eina_strbuf_free(). - * - * @see eina_strbuf_free() - * @see eina_strbuf_append() - * @see eina_strbuf_string_get() - */ -EAPI Eina_Strbuf *eina_strbuf_new(void) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; - -/** - * @brief Free a string buffer. - * - * @param buf The string buffer to free. - * - * This function frees the memory of @p buf. @p buf must have been - * created by eina_strbuf_new(). - */ -EAPI void eina_strbuf_free(Eina_Strbuf * buf) EINA_ARG_NONNULL(1); - -/** - * @brief Reset a string buffer. - * - * @param buf The string buffer to reset. - * - * This function reset @p buf: the buffer len is set to 0, and the - * string is set to '\\0'. No memory is free'd. - */ -EAPI void eina_strbuf_reset(Eina_Strbuf * buf) EINA_ARG_NONNULL(1); - -/** - * @brief Append a string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to append to. - * @param str The string to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function appends @p str to @p buf. It computes the length of - * @p str, so is slightly slower than eina_strbuf_append_length(). If - * the length is known beforehand, consider using that variant. If - * @p buf can't append it, #EINA_FALSE is returned, otherwise - * #EINA_TRUE is returned. - * - * @see eina_strbuf_append() - * @see eina_strbuf_append_length() - */ -EAPI Eina_Bool eina_strbuf_append(Eina_Strbuf * buf, - const char *str) EINA_ARG_NONNULL(1, 2); - -/** - * @brief Append an escaped string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to append to. - * @param str The string to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function appends the escaped string @p str to @p buf. If @p - * str can not be appended, #EINA_FALSE is returned, otherwise, - * #EINA_TRUE is returned. - */ -EAPI Eina_Bool eina_strbuf_append_escaped(Eina_Strbuf * buf, - const char *str) -EINA_ARG_NONNULL(1, 2); - -/** - * @brief Append a string to a buffer, reallocating as necessary, - * limited by the given length. - * - * @param buf The string buffer to append to. - * @param str The string to append. - * @param maxlen The maximum number of characters to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function appends at most @p maxlen characters of @p str to - * @p buf. It can't appends more than the length of @p str. It - * computes the length of @p str, so is slightly slower than - * eina_strbuf_append_length(). If the length is known beforehand, - * consider using that variant (@p maxlen should then be checked so - * that it is greater than the size of @p str). If @p str can not be - * appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is - * returned. - * - * @see eina_strbuf_append() - * @see eina_strbuf_append_length() - */ -EAPI Eina_Bool eina_strbuf_append_n(Eina_Strbuf * buf, const char *str, - size_t maxlen) EINA_ARG_NONNULL(1, 2); - -/** - * @brief Append a string of exact length to a buffer, reallocating as necessary. - * - * @param buf The string buffer to append to. - * @param str The string to append. - * @param length The exact length to use. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function appends @p str to @p buf. @p str must be of size at - * most @p length. It is slightly faster than eina_strbuf_append() as - * it does not compute the size of @p str. It is useful when dealing - * with strings of known size, such as eina_strngshare. If @p buf - * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - * - * @see eina_stringshare_length() - * @see eina_strbuf_append() - * @see eina_strbuf_append_n() - */ -EAPI Eina_Bool eina_strbuf_append_length(Eina_Strbuf * buf, - const char *str, - size_t length) EINA_ARG_NONNULL(1, - 2); - -/** - * @brief Append a character to a string buffer, reallocating as - * necessary. - * - * @param buf The string buffer to append to. - * @param c The char to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p c to @p buf. If it can not insert it, - * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned. - */ -EAPI Eina_Bool eina_strbuf_append_char(Eina_Strbuf * buf, - char c) EINA_ARG_NONNULL(1); - -/** - * @brief Append a string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to append to. - * @param fmt The string to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * @see eina_strbuf_append() - */ -EAPI Eina_Bool eina_strbuf_append_printf(Eina_Strbuf * buf, - const char *fmt, - ...) EINA_ARG_NONNULL(1, - 2) -EINA_PRINTF(2, 3); - -/** - * @brief Append a string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to append to. - * @param fmt The string to append. - * @param args The variable arguments. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * @see eina_strbuf_append() - */ -EAPI Eina_Bool eina_strbuf_append_vprintf(Eina_Strbuf * buf, - const char *fmt, - va_list args) EINA_ARG_NONNULL(1, - 2); - -/** - * @brief Insert a string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to insert. - * @param str The string to insert. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p str to @p buf at position @p pos. It - * computes the length of @p str, so is slightly slower than - * eina_strbuf_insert_length(). If the length is known beforehand, - * consider using that variant. If @p buf can't insert it, #EINA_FALSE - * is returned, otherwise #EINA_TRUE is returned. - */ -EAPI Eina_Bool eina_strbuf_insert(Eina_Strbuf * buf, const char *str, - size_t pos) EINA_ARG_NONNULL(1, 2); - -/** - * @brief Insert an escaped string to a buffer, reallocating as - * necessary. - * - * @param buf The string buffer to insert to. - * @param str The string to insert. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts the escaped string @p str to @p buf at - * position @p pos. If @p buf can't insert @p str, #EINA_FALSE is - * returned, otherwise #EINA_TRUE is returned. - */ -EAPI Eina_Bool eina_strbuf_insert_escaped(Eina_Strbuf * buf, - const char *str, - size_t pos) EINA_ARG_NONNULL(1, - 2); - -/** - * @brief Insert a string to a buffer, reallocating as necessary. Limited by maxlen. - * - * @param buf The string buffer to insert to. - * @param str The string to insert. - * @param maxlen The maximum number of chars to insert. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p str ot @p buf at position @p pos, with at - * most @p maxlen bytes. The number of inserted characters can not be - * greater than the length of @p str. It computes the length of - * @p str, so is slightly slower than eina_strbuf_insert_length(). If the - * length is known beforehand, consider using that variant (@p maxlen - * should then be checked so that it is greater than the size of - * @p str). If @p str can not be inserted, #EINA_FALSE is returned, - * otherwise, #EINA_TRUE is returned. - */ -EAPI Eina_Bool eina_strbuf_insert_n(Eina_Strbuf * buf, const char *str, - size_t maxlen, - size_t pos) EINA_ARG_NONNULL(1, 2); - -/** - * @brief Insert a string of exact length to a buffer, reallocating as necessary. - * - * @param buf The string buffer to insert to. - * @param str The string to insert. - * @param length The exact length to use. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p str to @p buf. @p str must be of size at - * most @p length. It is slightly faster than eina_strbuf_insert() as - * it does not compute the size of @p str. It is useful when dealing - * with strings of known size, such as eina_strngshare. If @p buf - * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - * - * @see eina_stringshare_length() - * @see eina_strbuf_insert() - * @see eina_strbuf_insert_n() - */ -EAPI Eina_Bool eina_strbuf_insert_length(Eina_Strbuf * buf, - const char *str, size_t length, - size_t pos) EINA_ARG_NONNULL(1, - 2); - -/** - * @brief Insert a character to a string buffer, reallocating as - * necessary. - * - * @param buf The string buffer to insert to. - * @param c The char to insert. - * @param pos The position to insert the char. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p c to @p buf at position @p pos. If @p buf - * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - */ -EAPI Eina_Bool eina_strbuf_insert_char(Eina_Strbuf * buf, char c, - size_t pos) EINA_ARG_NONNULL(1); - -/** - * @brief Insert a string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to insert. - * @param fmt The string to insert. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - */ -EAPI Eina_Bool eina_strbuf_insert_printf(Eina_Strbuf * buf, - const char *fmt, size_t pos, - ...) EINA_ARG_NONNULL(1, - 2) -EINA_PRINTF(2, 4); - -/** - * @brief Insert a string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to insert. - * @param fmt The string to insert. - * @param pos The position to insert the string. - * @param args The variable arguments. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - */ -EAPI Eina_Bool eina_strbuf_insert_vprintf(Eina_Strbuf * buf, - const char *fmt, size_t pos, - va_list args) EINA_ARG_NONNULL(1, - 2); - -/** - * @def eina_strbuf_prepend(buf, str) - * @brief Prepend the given string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param str The string to prepend. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_strbuf_insert() at position 0.If @p buf - * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - */ -#define eina_strbuf_prepend(buf, str) eina_strbuf_insert(buf, str, 0) - -/** - * @def eina_strbuf_prepend_escaped(buf, str) - * @brief Prepend the given escaped string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param str The string to prepend. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_strbuf_insert_escaped() at position 0. If - * @p buf can't prepend it, #EINA_FALSE is returned, otherwise - * #EINA_TRUE is returned. - */ -#define eina_strbuf_prepend_escaped(buf, str) eina_strbuf_insert_escaped(buf, str, 0) - -/** - * @def eina_strbuf_prepend_n(buf, str) - * @brief Prepend the given escaped string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param str The string to prepend. - * @param maxlen The maximum number of chars to prepend. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_strbuf_insert_n() at position 0. If - * @p buf can't prepend it, #EINA_FALSE is returned, otherwise - * #EINA_TRUE is returned. - */ -#define eina_strbuf_prepend_n(buf, str, maxlen) eina_strbuf_insert_n(buf, str, maxlen, 0) - -/** - * @def eina_strbuf_prepend_length(buf, str) - * @brief Prepend the given escaped string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param str The string to prepend. - * @param length The exact length to use. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_strbuf_insert_length() at position 0. If - * @p buf can't prepend it, #EINA_FALSE is returned, otherwise - * #EINA_TRUE is returned. - */ -#define eina_strbuf_prepend_length(buf, str, length) eina_strbuf_insert_length( buf, str, length, 0) - -/** - * @def eina_strbuf_prepend_char(buf, str) - * @brief Prepend the given character to the given buffer - * - * @param buf The string buffer to prepend to. - * @param c The character to prepend. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_strbuf_insert_char() at position 0. If - * @p buf can't prepend it, #EINA_FALSE is returned, otherwise - * #EINA_TRUE is returned. - */ -#define eina_strbuf_prepend_char(buf, c) eina_strbuf_insert_char(buf, c, 0) - -/** - * @def eina_strbuf_prepend_printf(buf, fmt, ...) - * @brief Prepend the given string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param fmt The string to prepend. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_strbuf_insert_printf() at position 0.If @p buf - * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - */ -#define eina_strbuf_prepend_printf(buf, fmt, ...) eina_strbuf_insert_printf(buf, fmt, 0, ## __VA_ARGS__) - -/** - * @def eina_strbuf_prepend_vprintf(buf, fmt, args) - * @brief Prepend the given string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param fmt The string to prepend. - * @param args The variable arguments. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_strbuf_insert_vprintf() at position 0.If @p buf - * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - */ -#define eina_strbuf_prepend_vprintf(buf, fmt, args) eina_strbuf_insert_vprintf(buf, fmt, 0, args) - -/** - * @brief Remove a slice of the given string buffer. - * - * @param buf The string buffer to remove a slice. - * @param start The initial (inclusive) slice position to start - * removing, in bytes. - * @param end The final (non-inclusive) slice position to finish - * removing, in bytes. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function removes a slice of @p buf, starting at @p start - * (inclusive) and ending at @p end (non-inclusive). Both values are - * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise. - */ - -EAPI Eina_Bool eina_strbuf_remove(Eina_Strbuf * buf, size_t start, - size_t end) EINA_ARG_NONNULL(1); - -/** - * @brief Retrieve a pointer to the contents of a string buffer - * - * @param buf The string buffer. - * @return The current string in the string buffer. - * - * This function returns the string contained in @p buf. The returned - * value must not be modified and will no longer be valid if @p buf is - * modified. In other words, any eina_strbuf_append() or similar will - * make that pointer invalid. - * - * @see eina_strbuf_string_steal() - */ -EAPI const char *eina_strbuf_string_get(const Eina_Strbuf * - buf) EINA_ARG_NONNULL(1) - EINA_WARN_UNUSED_RESULT; - -/** - * @brief Steal the contents of a string buffer. - * - * @param buf The string buffer to steal. - * @return The current string in the string buffer. - * - * This function returns the string contained in @p buf. @p buf is - * then initialized and does not own the returned string anymore. The - * caller must release the memory of the returned string by calling - * free(). - * - * @see eina_strbuf_string_get() - */ -EAPI char *eina_strbuf_string_steal(Eina_Strbuf * buf) -EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); - -/** - * @brief Free the contents of a string buffer but not the buffer. - * - * @param buf The string buffer to free the string of. - * - * This function frees the string contained in @p buf without freeing - * @p buf. - */ -EAPI void eina_strbuf_string_free(Eina_Strbuf * buf) EINA_ARG_NONNULL(1); - -/** - * @brief Retrieve the length of the string buffer content. - * - * @param buf The string buffer. - * @return The current length of the string, in bytes. - * - * This function returns the length of @p buf. - */ -EAPI size_t eina_strbuf_length_get(const Eina_Strbuf * - buf) EINA_ARG_NONNULL(1) - EINA_WARN_UNUSED_RESULT; - -EAPI Eina_Bool eina_strbuf_replace(Eina_Strbuf * buf, const char *str, - const char *with, - unsigned int n) EINA_ARG_NONNULL(1, 2, - 3); - -/** - * @def eina_strbuf_replace_first(buf, str, with) - * @brief Prepend the given character to the given buffer - * - * @param buf The string buffer to work with. - * @param str The string to replace. - * @param with The replaceing string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_strbuf_replace() with the n-th occurrence - * equal to @c 1. If @p buf can't replace it, #EINA_FALSE is returned, - * otherwise #EINA_TRUE is returned. - */ -#define eina_strbuf_replace_first(buf, str, with) eina_strbuf_replace(buf, str, with, 1) - -EAPI int eina_strbuf_replace_all(Eina_Strbuf * buf, const char *str, - const char *with) EINA_ARG_NONNULL(1, 2, - 3); - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_STRBUF_H */ diff --git a/tests/suite/ecore/src/include/eina_stringshare.h b/tests/suite/ecore/src/include/eina_stringshare.h deleted file mode 100644 index cc9f46cd6a..0000000000 --- a/tests/suite/ecore/src/include/eina_stringshare.h +++ /dev/null @@ -1,107 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - * - * This file incorporates work covered by the following copyright and - * permission notice: - * - * Copyright (C) 2008 Peter Wehrfritz - * - * 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 of the Software and its Copyright notices. In addition publicly - * documented acknowledgment must be given that this software has been used if no - * source code of this software is made available publicly. This includes - * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing - * documents or any documentation provided with any product containing this - * software. This License does not apply to any software that links to the - * libraries provided by this software (statically or dynamically), but only to - * the software provided. - * - * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice - * and it's intent. - * - * 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 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. - */ - -#ifndef EINA_STRINGSHARE_H_ -#define EINA_STRINGSHARE_H_ - -#include - -#include "eina_types.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @defgroup Eina_Stringshare_Group Stringshare - * - * @{ - */ - -EAPI const char *eina_stringshare_add_length(const char *str, - unsigned int slen) - EINA_WARN_UNUSED_RESULT; -EAPI const char *eina_stringshare_add(const char *str) - EINA_WARN_UNUSED_RESULT; -EAPI const char *eina_stringshare_printf(const char *fmt, ...) -EINA_WARN_UNUSED_RESULT EINA_PRINTF(1, 2); -EAPI const char *eina_stringshare_vprintf(const char *fmt, - va_list args) - EINA_WARN_UNUSED_RESULT; -EAPI const char *eina_stringshare_nprintf(unsigned int len, - const char *fmt, ...) -EINA_WARN_UNUSED_RESULT EINA_PRINTF(2, 3); -EAPI const char *eina_stringshare_ref(const char *str); -EAPI void eina_stringshare_del(const char *str); -EAPI int eina_stringshare_strlen(const char *str) -EINA_PURE EINA_WARN_UNUSED_RESULT; -EAPI void eina_stringshare_dump(void); - -static inline Eina_Bool eina_stringshare_replace(const char **p_str, - const char *news) -EINA_ARG_NONNULL(1); -static inline Eina_Bool eina_stringshare_replace_length(const char **p_str, - const char *news, - unsigned int slen) -EINA_ARG_NONNULL(1); - -#include "eina_inline_stringshare.x" - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_STRINGSHARE_H_ */ diff --git a/tests/suite/ecore/src/include/eina_tiler.h b/tests/suite/ecore/src/include/eina_tiler.h deleted file mode 100644 index b671b11d78..0000000000 --- a/tests/suite/ecore/src/include/eina_tiler.h +++ /dev/null @@ -1,100 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_TILER_H_ -#define EINA_TILER_H_ - -#include "eina_types.h" -#include "eina_iterator.h" -#include "eina_rectangle.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @defgroup Eina_Tiler_Group Tiler - * - * @{ - */ - -/** - * @typedef Eina_Tiler - * Tiler type. - */ -typedef struct _Eina_Tiler Eina_Tiler; - -/** - * @typedef Eina_Tile_Grid_Info - * Grid type of a tiler. - */ -typedef struct Eina_Tile_Grid_Info Eina_Tile_Grid_Info; - -/** - * @struct Eina_Tile_Grid_Info - * Grid type of a tiler. - */ -struct Eina_Tile_Grid_Info { - unsigned long col; - /**< column of the tiler grid */ - unsigned long row; - /**< row of the tiler grid*/ - Eina_Rectangle rect; - /**< rectangle of the tiler grid*/ - Eina_Bool full; - /**< whether the grid is full or not */ -}; - -typedef struct _Eina_Tile_Grid_Slicer Eina_Tile_Grid_Slicer; - -EAPI Eina_Tiler *eina_tiler_new(int w, int h); -EAPI void eina_tiler_free(Eina_Tiler * t); -EAPI void eina_tiler_tile_size_set(Eina_Tiler * t, int w, int h); -EAPI Eina_Bool eina_tiler_rect_add(Eina_Tiler * t, - const Eina_Rectangle * r); -EAPI void eina_tiler_rect_del(Eina_Tiler * t, const Eina_Rectangle * r); -EAPI void eina_tiler_clear(Eina_Tiler * t); -EAPI Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler * t); -EAPI Eina_Iterator *eina_tile_grid_slicer_iterator_new(int x, int y, int w, - int h, int tile_w, - int tile_h); -static inline Eina_Bool eina_tile_grid_slicer_next(Eina_Tile_Grid_Slicer * - slc, - const - Eina_Tile_Grid_Info ** - rect); -static inline Eina_Bool eina_tile_grid_slicer_setup(Eina_Tile_Grid_Slicer * - slc, int x, int y, - int w, int h, - int tile_w, - int tile_h); - -#include "eina_inline_tiler.x" - - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_TILER_H_ */ diff --git a/tests/suite/ecore/src/include/eina_trash.h b/tests/suite/ecore/src/include/eina_trash.h deleted file mode 100644 index c7088e4f8a..0000000000 --- a/tests/suite/ecore/src/include/eina_trash.h +++ /dev/null @@ -1,104 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_TRASH_H__ -#define EINA_TRASH_H__ - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @addtogroup Eina_Containers_Group Containers - * - * @{ - */ - -/** - * @defgroup Eina_Trash_Group Trash - * - * @{ - */ - -/** - * @typedef Eina_Trash - * Type for a generic container of unused allocated pointer. - */ -typedef struct _Eina_Trash Eina_Trash; - -/** - * @struct _Eina_Trash - * Type for a generic container of unused allocated pointer. - */ -struct _Eina_Trash { - Eina_Trash *next; - /**< next item in trash. */ -}; - -static inline void eina_trash_init(Eina_Trash ** - trash) EINA_ARG_NONNULL(1); -static inline void eina_trash_push(Eina_Trash ** trash, - void *data) EINA_ARG_NONNULL(1); -static inline void *eina_trash_pop(Eina_Trash ** - trash) EINA_ARG_NONNULL(1) - EINA_WARN_UNUSED_RESULT; - -/** - * @def EINA_TRASH_CLEAN - * @brief Macro to remove all pointer from the trash. - * - * @param trash The trash to clean. - * @param data The pointer extracted from the trash. - * - * This macro allow the cleaning of @p trash in an easy way. It will - * remove all pointers from @p trash until it's empty. - * - * This macro can be used for freeing the data in the trash, like in - * the following example: - * - * @code - * Eina_Trash *trash = NULL; - * char *data; - * - * // trash is filled with pointer to some duped strings. - * - * EINA_TRASH_CLEAN(&trash, data) - * free(data); - * @endcode - * - * @note this macro is useful when you implement some memory pool. - */ -#define EINA_TRASH_CLEAN(trash, data) while ((data = eina_trash_pop(trash)) - -#include "eina_inline_trash.x" - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_TRASH_H_ */ diff --git a/tests/suite/ecore/src/include/eina_types.h b/tests/suite/ecore/src/include/eina_types.h deleted file mode 100644 index bb20a23138..0000000000 --- a/tests/suite/ecore/src/include/eina_types.h +++ /dev/null @@ -1,285 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_TYPES_H_ -#define EINA_TYPES_H_ - -/** - * @addtogroup Eina_Core_Group Core - * - * @{ - */ - -/** - * @defgroup Eina_Types_Group Types - * - * @{ - */ - -#ifdef EAPI -#undef EAPI -#endif - -#ifdef _WIN32 -#ifdef EFL_EINA_BUILD -#ifdef DLL_EXPORT -#define EAPI __declspec(dllexport) -#else -#define EAPI -#endif /* ! DLL_EXPORT */ -#else -#define EAPI __declspec(dllimport) -#endif /* ! EFL_EINA_BUILD */ -#else -#ifdef __GNUC__ -#if __GNUC__ >= 4 -#define EAPI __attribute__ ((visibility("default"))) -#else -#define EAPI -#endif -#else -#define EAPI -#endif -#endif - -#include "eina_config.h" - -#ifdef EINA_WARN_UNUSED_RESULT -#undef EINA_WARN_UNUSED_RESULT -#endif -#ifdef EINA_ARG_NONNULL -#undef EINA_ARG_NONNULL -#endif -#ifdef EINA_DEPRECATED -#undef EINA_DEPRECATED -#endif -#ifdef EINA_MALLOC -#undef EINA_MALLOC -#endif -#ifdef EINA_PURE -#undef EINA_PURE -#endif -#ifdef EINA_PRINTF -#undef EINA_PRINTF -#endif -#ifdef EINA_SCANF -#undef EINA_SCANF -#endif -#ifdef EINA_FORMAT -#undef EINA_FORMAT -#endif -#ifdef EINA_CONST -#undef EINA_CONST -#endif -#ifdef EINA_NOINSTRUMENT -#undef EINA_NOINSTRUMENT -#endif -#ifdef EINA_UNLIKELY -#undef EINA_UNLIKELY -#endif -#ifdef EINA_LIKELY -#undef EINA_LIKELY -#endif - - -#ifdef __GNUC__ -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) -#define EINA_WARN_UNUSED_RESULT __attribute__ ((warn_unused_result)) -#else -#define EINA_WARN_UNUSED_RESULT -#endif - -#if (!defined(EINA_SAFETY_CHECKS)) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) -#define EINA_ARG_NONNULL(idx, ...) __attribute__ ((nonnull(idx, ## __VA_ARGS__))) -#else -#define EINA_ARG_NONNULL(idx, ...) -#endif - -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) -#define EINA_DEPRECATED __attribute__ ((__deprecated__)) -#else -#define EINA_DEPRECATED -#endif - -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) -#define EINA_MALLOC __attribute__ ((malloc)) -#define EINA_PURE __attribute__ ((pure)) -#else -#define EINA_MALLOC -#define EINA_PURE -#endif - -#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) -#define EINA_PRINTF(fmt, arg) __attribute__((format (printf, fmt, arg))) -#define EINA_SCANF(fmt, arg) __attribute__((format (scanf, fmt, arg))) -#define EINA_FORMAT(fmt) __attribute__((format_arg(fmt))) -#define EINA_CONST __attribute__((const)) -#define EINA_NOINSTRUMENT __attribute__((no_instrument_function)) -#define EINA_UNLIKELY(exp) __builtin_expect((exp), 0) -#define EINA_LIKELY(exp) __builtin_expect((exp), 1) -#else -#define EINA_PRINTF(fmt, arg) -#define EINA_SCANF(fmt, arg) -#define EINA_FORMAT(fmt) -#define EINA_CONST -#define EINA_NOINSTRUMENT -#define EINA_UNLIKELY(exp) exp -#define EINA_LIKELY(exp) exp -#endif - -#elif defined(_WIN32) -#define EINA_WARN_UNUSED_RESULT -#define EINA_ARG_NONNULL(idx, ...) -#if defined(_MSC_VER) && _MSC_VER >= 1300 -#define EINA_DEPRECATED __declspec(deprecated) -#else -#define EINA_DEPRECATED -#endif -#define EINA_MALLOC -#define EINA_PURE -#define EINA_PRINTF(fmt, arg) -#define EINA_SCANF(fmt, arg) -#define EINA_FORMAT(fmt) -#define EINA_CONST -#define EINA_NOINSTRUMENT -#define EINA_UNLIKELY(exp) exp -#define EINA_LIKELY(exp) exp - -#elif defined(__SUNPRO_C) -#define EINA_WARN_UNUSED_RESULT -#define EINA_ARG_NONNULL(...) -#define EINA_DEPRECATED -#if __SUNPRO_C >= 0x590 -#define EINA_MALLOC __attribute__ ((malloc)) -#define EINA_PURE __attribute__ ((pure)) -#else -#define EINA_MALLOC -#define EINA_PURE -#endif -#define EINA_PRINTF(fmt, arg) -#define EINA_SCANF(fmt, arg) -#define EINA_FORMAT(fmt) -#if __SUNPRO_C >= 0x590 -#define EINA_CONST __attribute__ ((const)) -#else -#define EINA_CONST -#endif -#define EINA_NOINSTRUMENT -#define EINA_UNLIKELY(exp) exp -#define EINA_LIKELY(exp) exp - -#else /* ! __GNUC__ && ! _WIN32 && ! __SUNPRO_C */ - -/** - * @def EINA_WARN_UNUSED_RESULT - * Used to warn when the returned value of the function is not used. - */ -#define EINA_WARN_UNUSED_RESULT - -/** - * @def EINA_ARG_NONNULL - * Used to warn when the specified arguments of the function are @c NULL. - */ -#define EINA_ARG_NONNULL(idx, ...) - -/** - * @def EINA_DEPRECATED - * Used to warn when the function is considered as deprecated. - */ -#define EINA_DEPRECATED -#define EINA_MALLOC -#define EINA_PURE -#define EINA_PRINTF(fmt, arg) -#define EINA_SCANF(fmt, arg) -#define EINA_FORMAT(fmt) -#define EINA_CONST -#define EINA_NOINSTRUMENT -#define EINA_UNLIKELY(exp) exp -#define EINA_LIKELY(exp) exp -#endif /* ! __GNUC__ && ! _WIN32 && ! __SUNPRO_C */ - - -/** - * @typedef Eina_Bool - * Type to mimic a boolean. - * - * @note it differs from stdbool.h as this is defined as an unsigned - * char to make it usable by bitfields (Eina_Bool name:1) and - * also take as few bytes as possible. - */ -typedef unsigned char Eina_Bool; - -/** - * @def EINA_FALSE - * boolean value FALSE (numerical value 0) - */ -#define EINA_FALSE ((Eina_Bool)0) - -/** - * @def EINA_TRUE - * boolean value TRUE (numerical value 1) - */ -#define EINA_TRUE ((Eina_Bool)1) - -EAPI extern const unsigned int eina_prime_table[]; - -/** - * @typedef Eina_Compare_Cb - * Function used in functions using sorting. It compares @p data1 and - * @p data2. If @p data1 is 'less' than @p data2, -1 must be returned, - * if it is 'greater', 1 must be returned, and if they are equal, 0 - * must be returned. - */ -typedef int (*Eina_Compare_Cb) (const void *data1, const void *data2); - -/** - * @def EINA_COMPARE_CB - * Macro to cast to Eina_Compare_Cb. - */ -#define EINA_COMPARE_CB(function) ((Eina_Compare_Cb)function) - -typedef Eina_Bool(*Eina_Each_Cb) (const void *container, void *data, - void *fdata); - -/** - * @def EINA_EACH_CB - * Macro to cast to Eina_Each. - */ -#define EINA_EACH_CB(Function) ((Eina_Each_Cb)Function) - -/** - * @typedef Eina_Free_Cb - * A callback type used to free data when iterating over a container. - */ -typedef void (*Eina_Free_Cb) (void *data); - -/** - * @def EINA_FREE_CB - * Macro to cast to Eina_Free_Cb. - */ -#define EINA_FREE_CB(Function) ((Eina_Free_Cb)Function) - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_TYPES_H_ */ diff --git a/tests/suite/ecore/src/include/eina_unicode.h b/tests/suite/ecore/src/include/eina_unicode.h deleted file mode 100644 index 4cd362fcb5..0000000000 --- a/tests/suite/ecore/src/include/eina_unicode.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef EINA_UNICODE_H -#define EINA_UNICODE_H - -#include - -#include "eina_config.h" -#include "eina_types.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ -/** - * @addtogroup Eina_Unicode_String Unicode String - * - * @brief These functions provide basic unicode string handling - * - * Eina_Unicode is a type that holds unicode codepoints. - * - * @{ - */ - -/** - * @typedef Eina_Unicode - * A type that holds Unicode codepoints. - */ -#if EINA_SIZEOF_WCHAR_T >= 4 -#include -typedef wchar_t Eina_Unicode; -#elif defined(EINA_HAVE_INTTYPES_H) -#include -typedef uint32_t Eina_Unicode; -#elif defined(EINA_HAVE_STDINT_H) -#include -typedef uint32_t Eina_Unicode; -#else -/* Hope that int is big enough */ -typedef unsigned int Eina_Unicode; -#endif - -EAPI extern const Eina_Unicode *EINA_UNICODE_EMPTY_STRING; - -EAPI size_t eina_unicode_strlen(const Eina_Unicode * - ustr) EINA_ARG_NONNULL(1) -EINA_WARN_UNUSED_RESULT EINA_PURE; -EAPI size_t eina_unicode_strnlen(const Eina_Unicode * ustr, - int n) EINA_ARG_NONNULL(1) -EINA_WARN_UNUSED_RESULT EINA_PURE; - - -EAPI Eina_Unicode *eina_unicode_strdup(const Eina_Unicode * text) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; - -EAPI int eina_unicode_strcmp(const Eina_Unicode * a, - const Eina_Unicode * b) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; - -EAPI Eina_Unicode *eina_unicode_strcpy(Eina_Unicode * dest, - const Eina_Unicode * - source) EINA_ARG_NONNULL(1, 2); - -EAPI Eina_Unicode *eina_unicode_strstr(const Eina_Unicode * haystack, - const Eina_Unicode * needle) -EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; - -EAPI Eina_Unicode *eina_unicode_strncpy(Eina_Unicode * dest, - const Eina_Unicode * source, - size_t n) EINA_ARG_NONNULL(1, 2); - -EAPI Eina_Unicode *eina_unicode_escape(const Eina_Unicode * - str) EINA_ARG_NONNULL(1) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; - -/** - * @} - */ -/** - * @} - */ - -#endif diff --git a/tests/suite/ecore/src/include/eina_ustrbuf.h b/tests/suite/ecore/src/include/eina_ustrbuf.h deleted file mode 100644 index 5a24ccda67..0000000000 --- a/tests/suite/ecore/src/include/eina_ustrbuf.h +++ /dev/null @@ -1,445 +0,0 @@ -#ifndef EINA_USTRBUF_H -#define EINA_USTRBUF_H - -#include - -#include "eina_types.h" -#include "eina_unicode.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @defgroup Eina_Unicode_String_Buffer_Group Unicode String Buffer - * - * @{ - */ - -/** - * @typedef Eina_UStrbuf - * Type for a string buffer. - */ -typedef struct _Eina_Strbuf Eina_UStrbuf; - -/** - * @brief Create a new string buffer. - * - * @return Newly allocated string buffer instance. - * - * This function creates a new string buffer. On error, @c NULL is - * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To - * free the resources, use eina_ustrbuf_free(). - * - * @see eina_ustrbuf_free() - * @see eina_ustrbuf_append() - * @see eina_ustrbuf_string_get() - */ -EAPI Eina_UStrbuf *eina_ustrbuf_new(void) -EINA_MALLOC EINA_WARN_UNUSED_RESULT; - -/** - * @brief Free a string buffer. - * - * @param buf The string buffer to free. - * - * This function frees the memory of @p buf. @p buf must have been - * created by eina_ustrbuf_new(). - */ -EAPI void eina_ustrbuf_free(Eina_UStrbuf * buf) EINA_ARG_NONNULL(1); - -/** - * @brief Reset a string buffer. - * - * @param buf The string buffer to reset. - * - * This function reset @p buf: the buffer len is set to 0, and the - * string is set to '\\0'. No memory is free'd. - */ -EAPI void eina_ustrbuf_reset(Eina_UStrbuf * buf) EINA_ARG_NONNULL(1); - -/** - * @brief Append a string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to append to. - * @param str The string to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function appends @p str to @p buf. It computes the length of - * @p str, so is slightly slower than eina_ustrbuf_append_length(). If - * the length is known beforehand, consider using that variant. If - * @p buf can't append it, #EINA_FALSE is returned, otherwise - * #EINA_TRUE is returned. - * - * @see eina_ustrbuf_append() - * @see eina_ustrbuf_append_length() - */ -EAPI Eina_Bool eina_ustrbuf_append(Eina_UStrbuf * buf, - const Eina_Unicode * - str) EINA_ARG_NONNULL(1, 2); - -/** - * @brief Append an escaped string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to append to. - * @param str The string to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function appends the escaped string @p str to @p buf. If @p - * str can not be appended, #EINA_FALSE is returned, otherwise, - * #EINA_TRUE is returned. - */ -EAPI Eina_Bool eina_ustrbuf_append_escaped(Eina_UStrbuf * buf, - const Eina_Unicode * - str) EINA_ARG_NONNULL(1, 2); - -/** - * @brief Append a string to a buffer, reallocating as necessary, - * limited by the given length. - * - * @param buf The string buffer to append to. - * @param str The string to append. - * @param maxlen The maximum number of characters to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function appends at most @p maxlen characters of @p str to - * @p buf. It can't appends more than the length of @p str. It - * computes the length of @p str, so is slightly slower than - * eina_ustrbuf_append_length(). If the length is known beforehand, - * consider using that variant (@p maxlen should then be checked so - * that it is greater than the size of @p str). If @p str can not be - * appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is - * returned. - * - * @see eina_ustrbuf_append() - * @see eina_ustrbuf_append_length() - */ -EAPI Eina_Bool eina_ustrbuf_append_n(Eina_UStrbuf * buf, - const Eina_Unicode * str, - size_t maxlen) EINA_ARG_NONNULL(1, 2); - -/** - * @brief Append a string of exact length to a buffer, reallocating as necessary. - * - * @param buf The string buffer to append to. - * @param str The string to append. - * @param length The exact length to use. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function appends @p str to @p buf. @p str must be of size at - * most @p length. It is slightly faster than eina_ustrbuf_append() as - * it does not compute the size of @p str. It is useful when dealing - * with strings of known size, such as eina_strngshare. If @p buf - * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - * - * @see eina_stringshare_length() - * @see eina_ustrbuf_append() - * @see eina_ustrbuf_append_n() - */ -EAPI Eina_Bool eina_ustrbuf_append_length(Eina_UStrbuf * buf, - const Eina_Unicode * str, - size_t length) -EINA_ARG_NONNULL(1, 2); - -/** - * @brief Append a character to a string buffer, reallocating as - * necessary. - * - * @param buf The string buffer to append to. - * @param c The char to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p c to @p buf. If it can not insert it, - * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned. - */ -EAPI Eina_Bool eina_ustrbuf_append_char(Eina_UStrbuf * buf, - Eina_Unicode c) -EINA_ARG_NONNULL(1); - -/** - * @brief Insert a string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to insert. - * @param str The string to insert. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p str to @p buf at position @p pos. It - * computes the length of @p str, so is slightly slower than - * eina_ustrbuf_insert_length(). If the length is known beforehand, - * consider using that variant. If @p buf can't insert it, #EINA_FALSE - * is returned, otherwise #EINA_TRUE is returned. - */ -EAPI Eina_Bool eina_ustrbuf_insert(Eina_UStrbuf * buf, - const Eina_Unicode * str, - size_t pos) EINA_ARG_NONNULL(1, 2); - -/** - * @brief Insert an escaped string to a buffer, reallocating as - * necessary. - * - * @param buf The string buffer to insert to. - * @param str The string to insert. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts the escaped string @p str to @p buf at - * position @p pos. If @p buf can't insert @p str, #EINA_FALSE is - * returned, otherwise #EINA_TRUE is returned. - */ -EAPI Eina_Bool eina_ustrbuf_insert_escaped(Eina_UStrbuf * buf, - const Eina_Unicode * str, - size_t pos) EINA_ARG_NONNULL(1, - 2); - -/** - * @brief Insert a string to a buffer, reallocating as necessary. Limited by maxlen. - * - * @param buf The string buffer to insert to. - * @param str The string to insert. - * @param maxlen The maximum number of chars to insert. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p str ot @p buf at position @p pos, with at - * most @p maxlen bytes. The number of inserted characters can not be - * greater than the length of @p str. It computes the length of - * @p str, so is slightly slower than eina_ustrbuf_insert_length(). If the - * length is known beforehand, consider using that variant (@p maxlen - * should then be checked so that it is greater than the size of - * @p str). If @p str can not be inserted, #EINA_FALSE is returned, - * otherwise, #EINA_TRUE is returned. - */ -EAPI Eina_Bool eina_ustrbuf_insert_n(Eina_UStrbuf * buf, - const Eina_Unicode * str, - size_t maxlen, - size_t pos) EINA_ARG_NONNULL(1, 2); - -/** - * @brief Insert a string of exact length to a buffer, reallocating as necessary. - * - * @param buf The string buffer to insert to. - * @param str The string to insert. - * @param length The exact length to use. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p str to @p buf. @p str must be of size at - * most @p length. It is slightly faster than eina_ustrbuf_insert() as - * it does not compute the size of @p str. It is useful when dealing - * with strings of known size, such as eina_strngshare. If @p buf - * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - * - * @see eina_stringshare_length() - * @see eina_ustrbuf_insert() - * @see eina_ustrbuf_insert_n() - */ -EAPI Eina_Bool eina_ustrbuf_insert_length(Eina_UStrbuf * buf, - const Eina_Unicode * str, - size_t length, - size_t pos) EINA_ARG_NONNULL(1, - 2); - -/** - * @brief Insert a character to a string buffer, reallocating as - * necessary. - * - * @param buf The string buffer to insert to. - * @param c The char to insert. - * @param pos The position to insert the char. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p c to @p buf at position @p pos. If @p buf - * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - */ -EAPI Eina_Bool eina_ustrbuf_insert_char(Eina_UStrbuf * buf, Eina_Unicode c, - size_t pos) EINA_ARG_NONNULL(1); - -/** - * @def eina_ustrbuf_prepend(buf, str) - * @brief Prepend the given string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param str The string to prepend. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_ustrbuf_insert() at position 0.If @p buf - * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - */ -#define eina_ustrbuf_prepend(buf, str) eina_ustrbuf_insert(buf, str, 0) - -/** - * @def eina_ustrbuf_prepend_escaped(buf, str) - * @brief Prepend the given escaped string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param str The string to prepend. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_ustrbuf_insert_escaped() at position 0. If - * @p buf can't prepend it, #EINA_FALSE is returned, otherwise - * #EINA_TRUE is returned. - */ -#define eina_ustrbuf_prepend_escaped(buf, str) eina_ustrbuf_insert_escaped(buf, str, 0) - -/** - * @def eina_ustrbuf_prepend_n(buf, str) - * @brief Prepend the given escaped string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param str The string to prepend. - * @param maxlen The maximum number of Eina_Unicode *s to prepend. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_ustrbuf_insert_n() at position 0. If - * @p buf can't prepend it, #EINA_FALSE is returned, otherwise - * #EINA_TRUE is returned. - */ -#define eina_ustrbuf_prepend_n(buf, str, maxlen) eina_ustrbuf_insert_n(buf, str, maxlen, 0) - -/** - * @def eina_ustrbuf_prepend_length(buf, str) - * @brief Prepend the given escaped string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param str The string to prepend. - * @param length The exact length to use. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_ustrbuf_insert_length() at position 0. If - * @p buf can't prepend it, #EINA_FALSE is returned, otherwise - * #EINA_TRUE is returned. - */ -#define eina_ustrbuf_prepend_length(buf, str, length) eina_ustrbuf_insert_length(buf, str, length, 0) - -/** - * @def eina_ustrbuf_prepend_Eina_Unicode *(buf, str) - * @brief Prepend the given Eina_Unicode *acter to the given buffer - * - * @param buf The string buffer to prepend to. - * @param c The Eina_Unicode *acter to prepend. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_ustrbuf_insert_Eina_Unicode *() at position 0. If - * @p buf can't prepend it, #EINA_FALSE is returned, otherwise - * #EINA_TRUE is returned. - */ -#define eina_ustrbuf_prepend_Eina_Unicode *(buf, c)eina_ustrbuf_insert_Eina_Unicode * (buf, c, 0) - -/** - * @def eina_ustrbuf_prepend_printf(buf, fmt, ...) - * @brief Prepend the given string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param fmt The string to prepend. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_ustrbuf_insert_printf() at position 0.If @p buf - * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - */ -#define eina_ustrbuf_prepend_printf(buf, fmt, ...) eina_ustrbuf_insert_printf(buf, fmt, 0, ## __VA_ARGS__) - -/** - * @def eina_ustrbuf_prepend_vprintf(buf, fmt, args) - * @brief Prepend the given string to the given buffer - * - * @param buf The string buffer to prepend to. - * @param fmt The string to prepend. - * @param args The variable arguments. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This macro is calling eina_ustrbuf_insert_vprintf() at position 0.If @p buf - * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - */ -#define eina_ustrbuf_prepend_vprintf(buf, fmt, args) eina_ustrbuf_insert_vprintf(buf, fmt, 0, args) - -/** - * @brief Remove a slice of the given string buffer. - * - * @param buf The string buffer to remove a slice. - * @param start The initial (inclusive) slice position to start - * removing, in bytes. - * @param end The final (non-inclusive) slice position to finish - * removing, in bytes. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function removes a slice of @p buf, starting at @p start - * (inclusive) and ending at @p end (non-inclusive). Both values are - * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise. - */ -EAPI Eina_Bool -eina_ustrbuf_remove(Eina_UStrbuf * buf, size_t start, - size_t end) EINA_ARG_NONNULL(1); - -/** - * @brief Retrieve a pointer to the contents of a string buffer - * - * @param buf The string buffer. - * @return The current string in the string buffer. - * - * This function returns the string contained in @p buf. The returned - * value must not be modified and will no longer be valid if @p buf is - * modified. In other words, any eina_ustrbuf_append() or similar will - * make that pointer invalid. - * - * @see eina_ustrbuf_string_steal() - */ -EAPI const Eina_Unicode *eina_ustrbuf_string_get(const Eina_UStrbuf * - buf) EINA_ARG_NONNULL(1) - EINA_WARN_UNUSED_RESULT; - -/** - * @brief Steal the contents of a string buffer. - * - * @param buf The string buffer to steal. - * @return The current string in the string buffer. - * - * This function returns the string contained in @p buf. @p buf is - * then initialized and does not own the returned string anymore. The - * caller must release the memory of the returned string by calling - * free(). - * - * @see eina_ustrbuf_string_get() - */ -EAPI Eina_Unicode *eina_ustrbuf_string_steal(Eina_UStrbuf * buf) -EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1); - -/** - * @brief Free the contents of a string buffer but not the buffer. - * - * @param buf The string buffer to free the string of. - * - * This function frees the string contained in @p buf without freeing - * @p buf. - */ -EAPI void eina_ustrbuf_string_free(Eina_UStrbuf * buf) EINA_ARG_NONNULL(1); - -/** - * @brief Retrieve the length of the string buffer content. - * - * @param buf The string buffer. - * @return The current length of the string, in bytes. - * - * This function returns the length of @p buf. - */ -EAPI size_t -eina_ustrbuf_length_get(const Eina_UStrbuf * - buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_STRBUF_H */ diff --git a/tests/suite/ecore/src/include/eina_ustringshare.h b/tests/suite/ecore/src/include/eina_ustringshare.h deleted file mode 100644 index 2db5aa9002..0000000000 --- a/tests/suite/ecore/src/include/eina_ustringshare.h +++ /dev/null @@ -1,104 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - * - * This file incorporates work covered by the following copyright and - * permission notice: - * - * Copyright (C) 2008 Peter Wehrfritz - * - * 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 of the Software and its Copyright notices. In addition publicly - * documented acknowledgment must be given that this software has been used if no - * source code of this software is made available publicly. This includes - * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing - * documents or any documentation provided with any product containing this - * software. This License does not apply to any software that links to the - * libraries provided by this software (statically or dynamically), but only to - * the software provided. - * - * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice - * and it's intent. - * - * 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 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. - */ - -#ifndef EINA_USTRINGSHARE_H_ -#define EINA_USTRINGSHARE_H_ - -#include "eina_types.h" -#include "eina_unicode.h" - -/** - * @addtogroup Eina_Data_Types_Group Data Types - * - * @{ - */ - -/** - * @defgroup Eina_UStringshare_Group Unicode Stringshare - * - * @{ - */ - -EAPI const Eina_Unicode *eina_ustringshare_add_length(const Eina_Unicode * - str, - unsigned int slen) - EINA_WARN_UNUSED_RESULT; -EAPI const Eina_Unicode *eina_ustringshare_add(const Eina_Unicode * - str) - EINA_WARN_UNUSED_RESULT; -EAPI const Eina_Unicode *eina_ustringshare_ref(const Eina_Unicode * str); -EAPI void eina_ustringshare_del(const Eina_Unicode * str); -EAPI int eina_ustringshare_strlen(const Eina_Unicode * str) -EINA_PURE EINA_WARN_UNUSED_RESULT; -EAPI void eina_ustringshare_dump(void); - -static inline Eina_Bool eina_ustringshare_replace(const Eina_Unicode ** - p_str, - const Eina_Unicode * - news) -EINA_ARG_NONNULL(1); -static inline Eina_Bool eina_ustringshare_replace_length(const Eina_Unicode - ** p_str, - const Eina_Unicode - * news, - unsigned int slen) -EINA_ARG_NONNULL(1); - -#include "eina_inline_ustringshare.x" - -/** - * @} - */ - -/** - * @} - */ - -#endif /* EINA_STRINGSHARE_H_ */ diff --git a/tests/suite/ecore/src/lib/Ecore.h b/tests/suite/ecore/src/lib/Ecore.h deleted file mode 100644 index 2c939a688b..0000000000 --- a/tests/suite/ecore/src/lib/Ecore.h +++ /dev/null @@ -1,621 +0,0 @@ -#ifndef _ECORE_H -#define _ECORE_H - -#ifdef _MSC_VER -#include -#endif - -#include - -#ifdef EAPI -#undef EAPI -#endif - -#ifdef _WIN32 -#ifdef EFL_ECORE_BUILD -#ifdef DLL_EXPORT -#define EAPI __declspec(dllexport) -#else -#define EAPI -#endif /* ! DLL_EXPORT */ -#else -#define EAPI __declspec(dllimport) -#endif /* ! EFL_ECORE_BUILD */ -#else -#ifdef __GNUC__ -#if __GNUC__ >= 4 -#define EAPI __attribute__ ((visibility("default"))) -#else -#define EAPI -#endif -#else -#define EAPI -#endif -#endif /* ! _WIN32 */ - -/** - * @file Ecore.h - * @brief The file that provides the program utility, main loop and timer - * functions. - * - * This header provides the Ecore event handling loop. For more - * details, see @ref Ecore_Main_Loop_Group. - * - * For the main loop to be of any use, you need to be able to add events - * and event handlers. Events for file descriptor events are covered in - * @ref Ecore_FD_Handler_Group. - * - * Time functions are covered in @ref Ecore_Time_Group. - * - * There is also provision for callbacks for when the loop enters or - * exits an idle state. See @ref Idle_Group for more information. - * - * Functions are also provided for spawning child processes using fork. - * See @ref Ecore_Exe_Basic_Group and @ref Ecore_Exe_Signal_Group for - * more details. - */ - -#ifdef _WIN32 -#include -#else -#include -#include -#endif - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define ECORE_VERSION_MAJOR 1 -#define ECORE_VERSION_MINOR 0 - - typedef struct _Ecore_Version { - int major; - int minor; - int micro; - int revision; - } Ecore_Version; - - EAPI extern Ecore_Version *ecore_version; - -#define ECORE_CALLBACK_CANCEL EINA_FALSE /**< Return value to remove a callback */ -#define ECORE_CALLBACK_RENEW EINA_TRUE /**< Return value to keep a callback */ - -#define ECORE_CALLBACK_PASS_ON EINA_TRUE /**< Return value to pass event to next handler */ -#define ECORE_CALLBACK_DONE EINA_FALSE /**< Return value to stop event handling */ - -#define ECORE_EVENT_NONE 0 -#define ECORE_EVENT_SIGNAL_USER 1 /**< User signal event */ -#define ECORE_EVENT_SIGNAL_HUP 2 /**< Hup signal event */ -#define ECORE_EVENT_SIGNAL_EXIT 3 /**< Exit signal event */ -#define ECORE_EVENT_SIGNAL_POWER 4 /**< Power signal event */ -#define ECORE_EVENT_SIGNAL_REALTIME 5 /**< Realtime signal event */ -#define ECORE_EVENT_COUNT 6 - -#define ECORE_EXE_PRIORITY_INHERIT 9999 - - EAPI extern int ECORE_EXE_EVENT_ADD; - /**< A child process has been added */ - EAPI extern int ECORE_EXE_EVENT_DEL; - /**< A child process has been deleted (it exited, naming consistent with the rest of ecore). */ - EAPI extern int ECORE_EXE_EVENT_DATA; - /**< Data from a child process. */ - EAPI extern int ECORE_EXE_EVENT_ERROR; - /**< Errors from a child process. */ - - enum _Ecore_Fd_Handler_Flags { - ECORE_FD_READ = 1, - /**< Fd Read mask */ - ECORE_FD_WRITE = 2, - /**< Fd Write mask */ - ECORE_FD_ERROR = 4 - /**< Fd Error mask */ - }; - typedef enum _Ecore_Fd_Handler_Flags Ecore_Fd_Handler_Flags; - - enum _Ecore_Exe_Flags { /* flags for executing a child with its stdin and/or stdout piped back */ - ECORE_EXE_PIPE_READ = 1, - /**< Exe Pipe Read mask */ - ECORE_EXE_PIPE_WRITE = 2, - /**< Exe Pipe Write mask */ - ECORE_EXE_PIPE_ERROR = 4, - /**< Exe Pipe error mask */ - ECORE_EXE_PIPE_READ_LINE_BUFFERED = 8, - /**< Reads are buffered until a newline and delivered 1 event per line */ - ECORE_EXE_PIPE_ERROR_LINE_BUFFERED = 16, - /**< Errors are buffered until a newline and delivered 1 event per line */ - ECORE_EXE_PIPE_AUTO = 32, - /**< stdout and stderr are buffered automatically */ - ECORE_EXE_RESPAWN = 64, - /**< FIXME: Exe is restarted if it dies */ - ECORE_EXE_USE_SH = 128, - /**< Use /bin/sh to run the command. */ - ECORE_EXE_NOT_LEADER = 256 - /**< Do not use setsid() to have the executed process be its own session leader */ - }; - typedef enum _Ecore_Exe_Flags Ecore_Exe_Flags; - - enum _Ecore_Exe_Win32_Priority { - ECORE_EXE_WIN32_PRIORITY_IDLE, - /**< Idle priority, for monitoring the system */ - ECORE_EXE_WIN32_PRIORITY_BELOW_NORMAL, - /**< Below default priority */ - ECORE_EXE_WIN32_PRIORITY_NORMAL, - /**< Default priority */ - ECORE_EXE_WIN32_PRIORITY_ABOVE_NORMAL, - /**< Above default priority */ - ECORE_EXE_WIN32_PRIORITY_HIGH, - /**< High priority, use with care as other threads in the system will not get processor time */ - ECORE_EXE_WIN32_PRIORITY_REALTIME - /**< Realtime priority, should be almost never used as it can interrupt system threads that manage mouse input, keyboard input, and background disk flushing */ - }; - typedef enum _Ecore_Exe_Win32_Priority Ecore_Exe_Win32_Priority; - - enum _Ecore_Poller_Type { /* Poller types */ - ECORE_POLLER_CORE = 0 - /**< The core poller interval */ - }; - typedef enum _Ecore_Poller_Type Ecore_Poller_Type; - - typedef struct _Ecore_Exe Ecore_Exe; /**< A handle for spawned processes */ - typedef struct _Ecore_Timer Ecore_Timer; /**< A handle for timers */ - typedef struct _Ecore_Idler Ecore_Idler; /**< A handle for idlers */ - typedef struct _Ecore_Idle_Enterer Ecore_Idle_Enterer; /**< A handle for idle enterers */ - typedef struct _Ecore_Idle_Exiter Ecore_Idle_Exiter; /**< A handle for idle exiters */ - typedef struct _Ecore_Fd_Handler Ecore_Fd_Handler; /**< A handle for Fd handlers */ - typedef struct _Ecore_Win32_Handler Ecore_Win32_Handler; /**< A handle for HANDLE handlers on Windows */ - typedef struct _Ecore_Event_Handler Ecore_Event_Handler; /**< A handle for an event handler */ - typedef struct _Ecore_Event_Filter Ecore_Event_Filter; /**< A handle for an event filter */ - typedef struct _Ecore_Event Ecore_Event; /**< A handle for an event */ - typedef struct _Ecore_Animator Ecore_Animator; /**< A handle for animators */ - typedef struct _Ecore_Pipe Ecore_Pipe; /**< A handle for pipes */ - typedef struct _Ecore_Poller Ecore_Poller; /**< A handle for pollers */ - typedef struct _Ecore_Event_Signal_User Ecore_Event_Signal_User;/**< User signal event */ - typedef struct _Ecore_Event_Signal_Hup Ecore_Event_Signal_Hup; /**< Hup signal event */ - typedef struct _Ecore_Event_Signal_Exit Ecore_Event_Signal_Exit;/**< Exit signal event */ - typedef struct _Ecore_Event_Signal_Power Ecore_Event_Signal_Power; - /**< Power signal event */ - typedef struct _Ecore_Event_Signal_Realtime Ecore_Event_Signal_Realtime; - /**< Realtime signal event */ - typedef struct _Ecore_Exe_Event_Add Ecore_Exe_Event_Add; /**< Spawned Exe add event */ - typedef struct _Ecore_Exe_Event_Del Ecore_Exe_Event_Del; /**< Spawned Exe exit event */ - typedef struct _Ecore_Exe_Event_Data_Line Ecore_Exe_Event_Data_Line; - /**< Lines from a child process */ - typedef struct _Ecore_Exe_Event_Data Ecore_Exe_Event_Data; /**< Data from a child process */ - typedef struct _Ecore_Thread Ecore_Thread; - - /** - * @typedef Ecore_Data_Cb Ecore_Data_Cb - * A callback which is used to return data to the main function - */ - typedef void *(*Ecore_Data_Cb) (void *data); - /** - * @typedef Ecore_Filter_Cb - * A callback used for filtering events from the main loop. - */ - typedef Eina_Bool(*Ecore_Filter_Cb) (void *data, void *loop_data, - int type, void *event); - /** - * @typedef Ecore_Eselect_Function Ecore_Eselect_Function - * A function which can be used to replace select() in the main loop - */ - typedef int (*Ecore_Select_Function) (int nfds, fd_set * readfds, - fd_set * writefds, - fd_set * exceptfds, - struct timeval * timeout); - /** - * @typedef Ecore_End_Cb Ecore_End_Cb - * This is the callback which is called at the end of a function, usually for cleanup purposes. - */ - typedef void (*Ecore_End_Cb) (void *user_data, void *func_data); - /** - * @typedef Ecore_Pipe_Cb Ecore_Pipe_Cb - * The callback that data written to the pipe is sent to. - */ - typedef void (*Ecore_Pipe_Cb) (void *data, void *buffer, - unsigned int nbyte); - /** - * @typedef Ecore_Exe_Cb Ecore_Exe_Cb - * A callback to run with the associated @ref Ecore_Exe, usually for cleanup purposes. - */ - typedef void (*Ecore_Exe_Cb) (void *data, const Ecore_Exe * exe); - /** - * @typedef Ecore_Event_Handler_Cb Ecore_Event_Handler_Cb - * A callback used by the main loop to handle events of a specified type. - */ - typedef Eina_Bool(*Ecore_Event_Handler_Cb) (void *data, int type, - void *event); - /** - * @typedef Ecore_Thread_Heavy_Cb Ecore_Thread_Heavy_Cb - * A callback used to run cpu intensive or blocking I/O operations. - */ - typedef void (*Ecore_Thread_Heavy_Cb) (Ecore_Thread * thread, - void *data); - /** - * @typedef Ecore_Thread_Notify_Cb Ecore_Thread_Notify_Cb - * A callback used by the main loop to receive data sent by an @ref Ecore_Thread. - */ - typedef void (*Ecore_Thread_Notify_Cb) (Ecore_Thread * thread, - void *msg_data, - void *data); - /** - * @typedef Ecore_Task_Cb Ecore_Task_Cb - * A callback run for a task (timer, idler, poller, animater, etc) - */ - typedef Eina_Bool(*Ecore_Task_Cb) (void *data); - /** - * @typedef Ecore_Cb Ecore_Cb - * A generic callback called as a hook when a certain point in execution is reached. - */ - typedef void (*Ecore_Cb) (void *data); - /** - * @typedef Ecore_Fd_Cb Ecore_Fd_Cb - * A callback used by an @ref Ecore_Fd_Handler. - */ - typedef Eina_Bool(*Ecore_Fd_Cb) (void *data, - Ecore_Fd_Handler * fd_handler); - /** - * @typedef Ecore_Fd_Prep_Cb Ecore_Fd_Prep_Cb - * A callback used by an @ref Ecore_Fd_Handler. - */ - typedef void (*Ecore_Fd_Prep_Cb) (void *data, - Ecore_Fd_Handler * fd_handler); - /** - * @typedef Ecore_Fd_Win32_Cb Ecore_Fd_Win32_Cb - * A callback used by an @ref Ecore_Win32_Handler. - */ - typedef Eina_Bool(*Ecore_Fd_Win32_Cb) (void *data, - Ecore_Win32_Handler * wh); - - - typedef struct _Ecore_Job Ecore_Job; - /**< A job handle */ - - struct _Ecore_Event_Signal_User { -/** User signal event */ - int number; - /**< The signal number. Either 1 or 2 */ - void *ext_data; - /**< Extension data - not used */ - -#ifndef _WIN32 - siginfo_t data; - /**< Signal info */ -#endif - }; - - struct _Ecore_Event_Signal_Hup { -/** Hup signal event */ - void *ext_data; - /**< Extension data - not used */ - -#ifndef _WIN32 - siginfo_t data; - /**< Signal info */ -#endif - }; - - struct _Ecore_Event_Signal_Exit { -/** Exit request event */ - unsigned int interrupt:1; - /**< Set if the exit request was an interrupt signal*/ - unsigned int quit:1; /**< set if the exit request was a quit signal */ - unsigned int terminate:1; - /**< Set if the exit request was a terminate singal */ - void *ext_data; /**< Extension data - not used */ - -#ifndef _WIN32 - siginfo_t data; - /**< Signal info */ -#endif - }; - - struct _Ecore_Event_Signal_Power { -/** Power event */ - void *ext_data; - /**< Extension data - not used */ - -#ifndef _WIN32 - siginfo_t data; - /**< Signal info */ -#endif - }; - - struct _Ecore_Event_Signal_Realtime { -/** Realtime event */ - int num; - /**< The realtime signal's number */ - -#ifndef _WIN32 - siginfo_t data; - /**< Signal info */ -#endif - }; - - struct _Ecore_Exe_Event_Add { -/** Process add event */ - Ecore_Exe *exe; - /**< The handle to the added process */ - void *ext_data; - /**< Extension data - not used */ - }; - - struct _Ecore_Exe_Event_Del { -/** Process exit event */ - pid_t pid; /**< The process ID of the process that exited */ - int exit_code; /**< The exit code of the process */ - Ecore_Exe *exe; - /**< The handle to the exited process, or NULL if not found */ - int exit_signal; /** < The signal that caused the process to exit */ - unsigned int exited:1; - /** < set to 1 if the process exited of its own accord */ - unsigned int signalled:1; - /** < set to 1 id the process exited due to uncaught signal */ - void *ext_data; /**< Extension data - not used */ -#ifndef _WIN32 - siginfo_t data; - /**< Signal info */ -#endif - }; - - struct _Ecore_Exe_Event_Data_Line { -/**< Lines from a child process */ - char *line; - int size; - }; - - struct _Ecore_Exe_Event_Data { -/** Data from a child process event */ - Ecore_Exe *exe; - /**< The handle to the process */ - void *data; - /**< the raw binary data from the child process that was received */ - int size; - /**< the size of this data in bytes */ - Ecore_Exe_Event_Data_Line *lines; - /**< an array of line data if line buffered, the last one has it's line member set to NULL */ - }; - - EAPI int ecore_init(void); - EAPI int ecore_shutdown(void); - - EAPI void ecore_app_args_set(int argc, const char **argv); - EAPI void ecore_app_args_get(int *argc, char ***argv); - EAPI void ecore_app_restart(void); - - EAPI Ecore_Event_Handler *ecore_event_handler_add(int type, - Ecore_Event_Handler_Cb - func, - const void - *data); - EAPI void *ecore_event_handler_del(Ecore_Event_Handler * - event_handler); - EAPI Ecore_Event *ecore_event_add(int type, void *ev, - Ecore_End_Cb func_free, - void *data); - EAPI void *ecore_event_del(Ecore_Event * event); - EAPI int ecore_event_type_new(void); - EAPI Ecore_Event_Filter *ecore_event_filter_add(Ecore_Data_Cb - func_start, - Ecore_Filter_Cb - func_filter, - Ecore_End_Cb - func_end, - const void *data); - EAPI void *ecore_event_filter_del(Ecore_Event_Filter * ef); - EAPI int ecore_event_current_type_get(void); - EAPI void *ecore_event_current_event_get(void); - - - EAPI void ecore_exe_run_priority_set(int pri); - EAPI int ecore_exe_run_priority_get(void); - EAPI Ecore_Exe *ecore_exe_run(const char *exe_cmd, - const void *data); - EAPI Ecore_Exe *ecore_exe_pipe_run(const char *exe_cmd, - Ecore_Exe_Flags flags, - const void *data); - EAPI void ecore_exe_callback_pre_free_set(Ecore_Exe * exe, - Ecore_Exe_Cb func); - EAPI Eina_Bool ecore_exe_send(Ecore_Exe * exe, const void *data, - int size); - EAPI void ecore_exe_close_stdin(Ecore_Exe * exe); - EAPI void ecore_exe_auto_limits_set(Ecore_Exe * exe, - int start_bytes, int end_bytes, - int start_lines, - int end_lines); - EAPI Ecore_Exe_Event_Data *ecore_exe_event_data_get(Ecore_Exe * - exe, - Ecore_Exe_Flags - flags); - EAPI void ecore_exe_event_data_free(Ecore_Exe_Event_Data * data); - EAPI void *ecore_exe_free(Ecore_Exe * exe); - EAPI pid_t ecore_exe_pid_get(const Ecore_Exe * exe); - EAPI void ecore_exe_tag_set(Ecore_Exe * exe, const char *tag); - EAPI const char *ecore_exe_tag_get(const Ecore_Exe * exe); - EAPI const char *ecore_exe_cmd_get(const Ecore_Exe * exe); - EAPI void *ecore_exe_data_get(const Ecore_Exe * exe); - EAPI Ecore_Exe_Flags ecore_exe_flags_get(const Ecore_Exe * exe); - EAPI void ecore_exe_pause(Ecore_Exe * exe); - EAPI void ecore_exe_continue(Ecore_Exe * exe); - EAPI void ecore_exe_interrupt(Ecore_Exe * exe); - EAPI void ecore_exe_quit(Ecore_Exe * exe); - EAPI void ecore_exe_terminate(Ecore_Exe * exe); - EAPI void ecore_exe_kill(Ecore_Exe * exe); - EAPI void ecore_exe_signal(Ecore_Exe * exe, int num); - EAPI void ecore_exe_hup(Ecore_Exe * exe); - - EAPI Ecore_Idler *ecore_idler_add(Ecore_Task_Cb func, - const void *data); - EAPI void *ecore_idler_del(Ecore_Idler * idler); - - EAPI Ecore_Idle_Enterer *ecore_idle_enterer_add(Ecore_Task_Cb func, - const void *data); - EAPI Ecore_Idle_Enterer - *ecore_idle_enterer_before_add(Ecore_Task_Cb func, - const void *data); - EAPI void *ecore_idle_enterer_del(Ecore_Idle_Enterer * - idle_enterer); - - EAPI Ecore_Idle_Exiter *ecore_idle_exiter_add(Ecore_Task_Cb func, - const void *data); - EAPI void *ecore_idle_exiter_del(Ecore_Idle_Exiter * idle_exiter); - - EAPI void ecore_main_loop_iterate(void); - - EAPI void ecore_main_loop_select_func_set(Ecore_Select_Function - func); - EAPI void *ecore_main_loop_select_func_get(void); - - EAPI Eina_Bool ecore_main_loop_glib_integrate(void); - EAPI void ecore_main_loop_glib_always_integrate_disable(void); - - EAPI void ecore_main_loop_begin(void); - EAPI void ecore_main_loop_quit(void); - EAPI Ecore_Fd_Handler *ecore_main_fd_handler_add(int fd, - Ecore_Fd_Handler_Flags - flags, - Ecore_Fd_Cb func, - const void *data, - Ecore_Fd_Cb - buf_func, - const void - *buf_data); - EAPI void - ecore_main_fd_handler_prepare_callback_set(Ecore_Fd_Handler * - fd_handler, - Ecore_Fd_Prep_Cb - func, - const void *data); - EAPI void *ecore_main_fd_handler_del(Ecore_Fd_Handler * - fd_handler); - EAPI int ecore_main_fd_handler_fd_get(Ecore_Fd_Handler * - fd_handler); - EAPI Eina_Bool ecore_main_fd_handler_active_get(Ecore_Fd_Handler * - fd_handler, - Ecore_Fd_Handler_Flags - flags); - EAPI void ecore_main_fd_handler_active_set(Ecore_Fd_Handler * - fd_handler, - Ecore_Fd_Handler_Flags - flags); - - EAPI Ecore_Win32_Handler *ecore_main_win32_handler_add(void *h, - Ecore_Fd_Win32_Cb - func, - const void - *data); - EAPI void *ecore_main_win32_handler_del(Ecore_Win32_Handler * - win32_handler); - - EAPI Ecore_Pipe *ecore_pipe_add(Ecore_Pipe_Cb handler, - const void *data); - EAPI void *ecore_pipe_del(Ecore_Pipe * p); - EAPI Eina_Bool ecore_pipe_write(Ecore_Pipe * p, const void *buffer, - unsigned int nbytes); - EAPI void ecore_pipe_write_close(Ecore_Pipe * p); - EAPI void ecore_pipe_read_close(Ecore_Pipe * p); - - - - EAPI Ecore_Thread *ecore_thread_run(Ecore_Cb, - Ecore_Cb, - Ecore_Cb, const void *data); - EAPI Ecore_Thread *ecore_thread_feedback_run(Ecore_Thread_Heavy_Cb, - Ecore_Thread_Notify_Cb, - Ecore_Cb, - Ecore_Cb, - const void *data, - Eina_Bool - try_no_queue); - EAPI Eina_Bool ecore_thread_cancel(Ecore_Thread * thread); - EAPI Eina_Bool ecore_thread_check(Ecore_Thread * thread); - EAPI Eina_Bool ecore_thread_feedback(Ecore_Thread * thread, - const void *msg_data); - EAPI int ecore_thread_active_get(void); - EAPI int ecore_thread_pending_get(void); - EAPI int ecore_thread_pending_feedback_get(void); - EAPI int ecore_thread_pending_total_get(void); - EAPI int ecore_thread_max_get(void); - EAPI void ecore_thread_max_set(int num); - EAPI void ecore_thread_max_reset(void); - EAPI int ecore_thread_available_get(void); - - EAPI Eina_Bool ecore_thread_local_data_add(Ecore_Thread * thread, - const char *key, - void *value, - Eina_Free_Cb cb, - Eina_Bool direct); - EAPI void *ecore_thread_local_data_set(Ecore_Thread * thread, - const char *key, - void *value, - Eina_Free_Cb cb); - EAPI void *ecore_thread_local_data_find(Ecore_Thread * thread, - const char *key); - EAPI Eina_Bool ecore_thread_local_data_del(Ecore_Thread * thread, - const char *key); - - EAPI Eina_Bool ecore_thread_global_data_add(const char *key, - void *value, - Eina_Free_Cb cb, - Eina_Bool direct); - EAPI void *ecore_thread_global_data_set(const char *key, - void *value, - Eina_Free_Cb cb); - EAPI void *ecore_thread_global_data_find(const char *key); - EAPI Eina_Bool ecore_thread_global_data_del(const char *key); - EAPI void *ecore_thread_global_data_wait(const char *key, - double seconds); - - - - - EAPI double ecore_time_get(void); - EAPI double ecore_time_unix_get(void); - EAPI double ecore_loop_time_get(void); - - EAPI Ecore_Timer *ecore_timer_add(double in, Ecore_Task_Cb func, - const void *data); - EAPI Ecore_Timer *ecore_timer_loop_add(double in, - Ecore_Task_Cb func, - const void *data); - EAPI void *ecore_timer_del(Ecore_Timer * timer); - EAPI void ecore_timer_interval_set(Ecore_Timer * timer, double in); - EAPI double ecore_timer_interval_get(Ecore_Timer * timer); - EAPI void ecore_timer_freeze(Ecore_Timer * timer); - EAPI void ecore_timer_thaw(Ecore_Timer * timer); - EAPI void ecore_timer_delay(Ecore_Timer * timer, double add); - EAPI double ecore_timer_pending_get(Ecore_Timer * timer); - - EAPI double ecore_timer_precision_get(void); - EAPI void ecore_timer_precision_set(double precision); - - EAPI Ecore_Animator *ecore_animator_add(Ecore_Task_Cb func, - const void *data); - EAPI void *ecore_animator_del(Ecore_Animator * animator); - EAPI void ecore_animator_freeze(Ecore_Animator * animator); - EAPI void ecore_animator_thaw(Ecore_Animator * animator); - EAPI void ecore_animator_frametime_set(double frametime); - EAPI double ecore_animator_frametime_get(void); - - EAPI void ecore_poller_poll_interval_set(Ecore_Poller_Type type, - double poll_time); - EAPI double ecore_poller_poll_interval_get(Ecore_Poller_Type type); - EAPI Eina_Bool ecore_poller_poller_interval_set(Ecore_Poller * - poller, - int interval); - EAPI int ecore_poller_poller_interval_get(Ecore_Poller * poller); - EAPI Ecore_Poller *ecore_poller_add(Ecore_Poller_Type type, - int interval, - Ecore_Task_Cb func, - const void *data); - EAPI void *ecore_poller_del(Ecore_Poller * poller); - - EAPI Ecore_Job *ecore_job_add(Ecore_Cb func, const void *data); - EAPI void *ecore_job_del(Ecore_Job * job); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/tests/suite/ecore/src/lib/Ecore_Getopt.h b/tests/suite/ecore/src/lib/Ecore_Getopt.h deleted file mode 100644 index d3dc5688a3..0000000000 --- a/tests/suite/ecore/src/lib/Ecore_Getopt.h +++ /dev/null @@ -1,436 +0,0 @@ -#ifndef _ECORE_GETOPT_H -#define _ECORE_GETOPT_H - -#include -#include - -#ifdef EAPI -#undef EAPI -#endif - -#ifdef _WIN32 -#ifdef EFL_ECORE_BUILD -#ifdef DLL_EXPORT -#define EAPI __declspec(dllexport) -#else -#define EAPI -#endif /* ! DLL_EXPORT */ -#else -#define EAPI __declspec(dllimport) -#endif /* ! EFL_ECORE_BUILD */ -#else -#ifdef __GNUC__ -#if __GNUC__ >= 4 -#define EAPI __attribute__ ((visibility("default"))) -#else -#define EAPI -#endif -#else -#define EAPI -#endif -#endif /* ! _WIN32 */ - -/** - * @file Ecore_Getopt.h - * @brief Contains powerful getopt replacement. - * - * This replacement handles both short (-X) or long options (--ABC) - * options, with various actions supported, like storing one value and - * already converting to required type, counting number of - * occurrences, setting true or false values, show help, license, - * copyright and even support user-defined callbacks. - * - * It is provided a set of C Pre Processor macros so definition is - * straightforward. - * - * Values will be stored elsewhere indicated by an array of pointers - * to values, it is given in separate to parser description so you can - * use multiple values with the same parser. - */ - - -#ifdef __cplusplus -extern "C" { -#endif - - typedef enum { - ECORE_GETOPT_ACTION_STORE, - ECORE_GETOPT_ACTION_STORE_CONST, - ECORE_GETOPT_ACTION_STORE_TRUE, - ECORE_GETOPT_ACTION_STORE_FALSE, - ECORE_GETOPT_ACTION_CHOICE, - ECORE_GETOPT_ACTION_APPEND, - ECORE_GETOPT_ACTION_COUNT, - ECORE_GETOPT_ACTION_CALLBACK, - ECORE_GETOPT_ACTION_HELP, - ECORE_GETOPT_ACTION_VERSION, - ECORE_GETOPT_ACTION_COPYRIGHT, - ECORE_GETOPT_ACTION_LICENSE - } Ecore_Getopt_Action; - - typedef enum { - ECORE_GETOPT_TYPE_STR, - ECORE_GETOPT_TYPE_BOOL, - ECORE_GETOPT_TYPE_SHORT, - ECORE_GETOPT_TYPE_INT, - ECORE_GETOPT_TYPE_LONG, - ECORE_GETOPT_TYPE_USHORT, - ECORE_GETOPT_TYPE_UINT, - ECORE_GETOPT_TYPE_ULONG, - ECORE_GETOPT_TYPE_DOUBLE - } Ecore_Getopt_Type; - - typedef enum { - ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO = 0, - ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES = 1, - ECORE_GETOPT_DESC_ARG_REQUIREMENT_OPTIONAL = 3 - } Ecore_Getopt_Desc_Arg_Requirement; - - typedef union _Ecore_Getopt_Value Ecore_Getopt_Value; - - typedef struct _Ecore_Getopt_Desc_Store Ecore_Getopt_Desc_Store; - typedef struct _Ecore_Getopt_Desc_Callback - Ecore_Getopt_Desc_Callback; - typedef struct _Ecore_Getopt_Desc Ecore_Getopt_Desc; - typedef struct _Ecore_Getopt Ecore_Getopt; - - union _Ecore_Getopt_Value { - char **strp; - unsigned char *boolp; - short *shortp; - int *intp; - long *longp; - unsigned short *ushortp; - unsigned int *uintp; - unsigned long *ulongp; - double *doublep; - Eina_List **listp; - void **ptrp; - }; - - struct _Ecore_Getopt_Desc_Store { - Ecore_Getopt_Type type;/**< type of data being handled */ - Ecore_Getopt_Desc_Arg_Requirement arg_req; - union { - const char *strv; - unsigned char boolv; - short shortv; - int intv; - long longv; - unsigned short ushortv; - unsigned int uintv; - unsigned long ulongv; - double doublev; - } def; - }; - - struct _Ecore_Getopt_Desc_Callback { - unsigned char (*func) (const Ecore_Getopt * parser, - const Ecore_Getopt_Desc * desc, - const char *str, void *data, - Ecore_Getopt_Value * storage); - const void *data; - Ecore_Getopt_Desc_Arg_Requirement arg_req; - const char *def; - }; - - struct _Ecore_Getopt_Desc { - char shortname; - /**< used with a single dash */ - const char *longname; - /**< used with double dashes */ - const char *help; - /**< used by --help/ecore_getopt_help() */ - const char *metavar; - /**< used by ecore_getopt_help() with nargs > 0 */ - - Ecore_Getopt_Action action; - /**< define how to handle it */ - union { - const Ecore_Getopt_Desc_Store store; - const void *store_const; - const char *const *choices; /* NULL terminated. */ - const Ecore_Getopt_Type append_type; - const Ecore_Getopt_Desc_Callback callback; - const void *dummy; - } action_param; - }; - - struct _Ecore_Getopt { - const char *prog; - /**< to be used when ecore_app_args_get() fails */ - const char *usage; - /**< usage example, %prog is replaced */ - const char *version; - /**< if exists, --version will work */ - const char *copyright; - /**< if exists, --copyright will work */ - const char *license; - /**< if exists, --license will work */ - const char *description; - /**< long description, possible multiline */ - unsigned char strict:1; - /**< fail on errors */ - const Ecore_Getopt_Desc descs[]; /* NULL terminated. */ - }; - -#define ECORE_GETOPT_STORE_FULL(shortname, longname, help, metavar, type, arg_requirement, default_value) \ - {shortname, longname, help, metavar, ECORE_GETOPT_ACTION_STORE, \ - {.store = {type, arg_requirement, default_value}}} - -#define ECORE_GETOPT_STORE(shortname, longname, help, type) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, NULL, type, \ - ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES, {}) - -#define ECORE_GETOPT_STORE_STR(shortname, longname, help) \ - ECORE_GETOPT_STORE(shortname, longname, help, ECORE_GETOPT_TYPE_STR) -#define ECORE_GETOPT_STORE_BOOL(shortname, longname, help) \ - ECORE_GETOPT_STORE(shortname, longname, help, ECORE_GETOPT_TYPE_BOOL) -#define ECORE_GETOPT_STORE_SHORT(shortname, longname, help) \ - ECORE_GETOPT_STORE(shortname, longname, help, ECORE_GETOPT_TYPE_SHORT) -#define ECORE_GETOPT_STORE_INT(shortname, longname, help) \ - ECORE_GETOPT_STORE(shortname, longname, help, ECORE_GETOPT_TYPE_INT) -#define ECORE_GETOPT_STORE_LONG(shortname, longname, help) \ - ECORE_GETOPT_STORE(shortname, longname, help, ECORE_GETOPT_TYPE_LONG) -#define ECORE_GETOPT_STORE_USHORT(shortname, longname, help) \ - ECORE_GETOPT_STORE(shortname, longname, help, ECORE_GETOPT_TYPE_USHORT) -#define ECORE_GETOPT_STORE_UINT(shortname, longname, help) \ - ECORE_GETOPT_STORE(shortname, longname, help, ECORE_GETOPT_TYPE_UINT) -#define ECORE_GETOPT_STORE_ULONG(shortname, longname, help) \ - ECORE_GETOPT_STORE(shortname, longname, help, ECORE_GETOPT_TYPE_ULONG) -#define ECORE_GETOPT_STORE_DOUBLE(shortname, longname, help) \ - ECORE_GETOPT_STORE(shortname, longname, help, ECORE_GETOPT_TYPE_DOUBLE) - - -#define ECORE_GETOPT_STORE_METAVAR(shortname, longname, help, metavar, type) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, metavar, type, \ - ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES, {}) - -#define ECORE_GETOPT_STORE_METAVAR_STR(shortname, longname, help, metavar) \ - ECORE_GETOPT_STORE_METAVAR(shortname, longname, help, metavar, ECORE_GETOPT_TYPE_STR) -#define ECORE_GETOPT_STORE_METAVAR_BOOL(shortname, longname, help, metavar) \ - ECORE_GETOPT_STORE_METAVAR(shortname, longname, help, metavar, ECORE_GETOPT_TYPE_BOOL) -#define ECORE_GETOPT_STORE_METAVAR_SHORT(shortname, longname, help, metavar) \ - ECORE_GETOPT_STORE_METAVAR(shortname, longname, help, metavar, ECORE_GETOPT_TYPE_SHORT) -#define ECORE_GETOPT_STORE_METAVAR_INT(shortname, longname, help, metavar) \ - ECORE_GETOPT_STORE_METAVAR(shortname, longname, help, metavar, ECORE_GETOPT_TYPE_INT) -#define ECORE_GETOPT_STORE_METAVAR_LONG(shortname, longname, help, metavar) \ - ECORE_GETOPT_STORE_METAVAR(shortname, longname, help, metavar, ECORE_GETOPT_TYPE_LONG) -#define ECORE_GETOPT_STORE_METAVAR_USHORT(shortname, longname, help, metavar) \ - ECORE_GETOPT_STORE_METAVAR(shortname, longname, help, metavar, ECORE_GETOPT_TYPE_USHORT) -#define ECORE_GETOPT_STORE_METAVAR_UINT(shortname, longname, help, metavar) \ - ECORE_GETOPT_STORE_METAVAR(shortname, longname, help, metavar, ECORE_GETOPT_TYPE_UINT) -#define ECORE_GETOPT_STORE_METAVAR_ULONG(shortname, longname, help, metavar) \ - ECORE_GETOPT_STORE_METAVAR(shortname, longname, help, metavar, ECORE_GETOPT_TYPE_ULONG) -#define ECORE_GETOPT_STORE_METAVAR_DOUBLE(shortname, longname, help, metavar) \ - ECORE_GETOPT_STORE_METAVAR(shortname, longname, help, metavar, ECORE_GETOPT_TYPE_DOUBLE) - - -#define ECORE_GETOPT_STORE_DEF(shortname, longname, help, type, default_value) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, NULL, type, \ - ECORE_GETOPT_DESC_ARG_REQUIREMENT_OPTIONAL, \ - default_value) - -#define ECORE_GETOPT_STORE_DEF_STR(shortname, longname, help, default_value) \ - ECORE_GETOPT_STORE_DEF(shortname, longname, help, \ - ECORE_GETOPT_TYPE_STR, \ - {.strv = default_value}) -#define ECORE_GETOPT_STORE_DEF_BOOL(shortname, longname, help, default_value) \ - ECORE_GETOPT_STORE_DEF(shortname, longname, help, \ - ECORE_GETOPT_TYPE_BOOL, \ - {.boolv = default_value}) -#define ECORE_GETOPT_STORE_DEF_SHORT(shortname, longname, help, default_value) \ - ECORE_GETOPT_STORE_DEF(shortname, longname, help, \ - ECORE_GETOPT_TYPE_SHORT, \ - {.shortv = default_value}) -#define ECORE_GETOPT_STORE_DEF_INT(shortname, longname, help, default_value) \ - ECORE_GETOPT_STORE_DEF(shortname, longname, help, \ - ECORE_GETOPT_TYPE_INT, \ - {.intv = default_value}) -#define ECORE_GETOPT_STORE_DEF_LONG(shortname, longname, help, default_value) \ - ECORE_GETOPT_STORE_DEF(shortname, longname, help, \ - ECORE_GETOPT_TYPE_LONG, \ - {.longv = default_value}) -#define ECORE_GETOPT_STORE_DEF_USHORT(shortname, longname, help, default_value) \ - ECORE_GETOPT_STORE_DEF(shortname, longname, help, \ - ECORE_GETOPT_TYPE_USHORT, \ - {.ushortv = default_value}) -#define ECORE_GETOPT_STORE_DEF_UINT(shortname, longname, help, default_value) \ - ECORE_GETOPT_STORE_DEF(shortname, longname, help, \ - ECORE_GETOPT_TYPE_UINT, \ - {.uintv = default_value}) -#define ECORE_GETOPT_STORE_DEF_ULONG(shortname, longname, help, default_value) \ - ECORE_GETOPT_STORE_DEF(shortname, longname, help, \ - ECORE_GETOPT_TYPE_ULONG, \ - {.ulongv = default_value}) -#define ECORE_GETOPT_STORE_DEF_DOUBLE(shortname, longname, help, default_value) \ - ECORE_GETOPT_STORE_DEF(shortname, longname, help, \ - ECORE_GETOPT_TYPE_DOUBLE, \ - {.doublev = default_value}) - -#define ECORE_GETOPT_STORE_FULL_STR(shortname, longname, help, metavar, arg_requirement, default_value) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, metavar, \ - ECORE_GETOPT_TYPE_STR, \ - arg_requirement, \ - {.strv = default_value}) -#define ECORE_GETOPT_STORE_FULL_BOOL(shortname, longname, help, metavar, arg_requirement, default_value) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, metavar, \ - ECORE_GETOPT_TYPE_BOOL, \ - arg_requirement, \ - {.boolv = default_value}) -#define ECORE_GETOPT_STORE_FULL_SHORT(shortname, longname, help, metavar, arg_requirement, default_value) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, metavar, \ - ECORE_GETOPT_TYPE_SHORT, \ - arg_requirement, \ - {.shortv = default_value}) -#define ECORE_GETOPT_STORE_FULL_INT(shortname, longname, help, metavar, arg_requirement, default_value) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, metavar, \ - ECORE_GETOPT_TYPE_INT, \ - arg_requirement, \ - {.intv = default_value}) -#define ECORE_GETOPT_STORE_FULL_LONG(shortname, longname, help, metavar, arg_requirement, default_value) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, metavar, \ - ECORE_GETOPT_TYPE_LONG, \ - arg_requirement, \ - {.longv = default_value}) -#define ECORE_GETOPT_STORE_FULL_USHORT(shortname, longname, help, metavar, arg_requirement, default_value) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, metavar, \ - ECORE_GETOPT_TYPE_USHORT, \ - arg_requirement, \ - {.ushortv = default_value}) -#define ECORE_GETOPT_STORE_FULL_UINT(shortname, longname, help, metavar, arg_requirement, default_value) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, metavar, \ - ECORE_GETOPT_TYPE_UINT, \ - arg_requirement, \ - {.uintv = default_value}) -#define ECORE_GETOPT_STORE_FULL_ULONG(shortname, longname, help, metavar, arg_requirement, default_value) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, metavar, \ - ECORE_GETOPT_TYPE_ULONG, \ - arg_requirement, \ - {.ulongv = default_value}) -#define ECORE_GETOPT_STORE_FULL_DOUBLE(shortname, longname, help, metavar, arg_requirement, default_value) \ - ECORE_GETOPT_STORE_FULL(shortname, longname, help, metavar, \ - ECORE_GETOPT_TYPE_DOUBLE, \ - arg_requirement, \ - {.doublev = default_value}) - -#define ECORE_GETOPT_STORE_CONST(shortname, longname, help, value) \ - {shortname, longname, help, NULL, ECORE_GETOPT_ACTION_STORE_CONST, \ - {.store_const = value}} -#define ECORE_GETOPT_STORE_TRUE(shortname, longname, help) \ - {shortname, longname, help, NULL, ECORE_GETOPT_ACTION_STORE_TRUE, \ - {.dummy = NULL}} -#define ECORE_GETOPT_STORE_FALSE(shortname, longname, help) \ - {shortname, longname, help, NULL, ECORE_GETOPT_ACTION_STORE_FALSE, \ - {.dummy = NULL}} - -#define ECORE_GETOPT_CHOICE(shortname, longname, help, choices_array) \ - {shortname, longname, help, NULL, ECORE_GETOPT_ACTION_CHOICE, \ - {.choices = choices_array}} -#define ECORE_GETOPT_CHOICE_METAVAR(shortname, longname, help, metavar, choices_array) \ - {shortname, longname, help, metavar, ECORE_GETOPT_ACTION_CHOICE, \ - {.choices = choices_array}} - - -#define ECORE_GETOPT_APPEND(shortname, longname, help, sub_type) \ - {shortname, longname, help, NULL, ECORE_GETOPT_ACTION_APPEND, \ - {.append_type = sub_type}} -#define ECORE_GETOPT_APPEND_METAVAR(shortname, longname, help, metavar, type) \ - {shortname, longname, help, metavar, ECORE_GETOPT_ACTION_APPEND, \ - {.append_type = type}} - -#define ECORE_GETOPT_COUNT(shortname, longname, help) \ - {shortname, longname, help, NULL, ECORE_GETOPT_ACTION_COUNT, \ - {.dummy = NULL}} - -#define ECORE_GETOPT_CALLBACK_FULL(shortname, longname, help, metavar, callback_func, callback_data, argument_requirement, default_value) \ - {shortname, longname, help, metavar, ECORE_GETOPT_ACTION_CALLBACK, \ - {.callback = {callback_func, callback_data, \ - argument_requirement, default_value}}} -#define ECORE_GETOPT_CALLBACK_NOARGS(shortname, longname, help, callback_func, callback_data) \ - ECORE_GETOPT_CALLBACK_FULL(shortname, longname, help, NULL, \ - callback_func, callback_data, \ - ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO, \ - NULL) -#define ECORE_GETOPT_CALLBACK_ARGS(shortname, longname, help, metavar, callback_func, callback_data) \ - ECORE_GETOPT_CALLBACK_FULL(shortname, longname, help, metavar, \ - callback_func, callback_data, \ - ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES, \ - NULL) - -#define ECORE_GETOPT_HELP(shortname, longname) \ - {shortname, longname, "show this message.", NULL, \ - ECORE_GETOPT_ACTION_HELP, \ - {.dummy = NULL}} - -#define ECORE_GETOPT_VERSION(shortname, longname) \ - {shortname, longname, "show program version.", NULL, \ - ECORE_GETOPT_ACTION_VERSION, \ - {.dummy = NULL}} - -#define ECORE_GETOPT_COPYRIGHT(shortname, longname) \ - {shortname, longname, "show copyright.", NULL, \ - ECORE_GETOPT_ACTION_COPYRIGHT, \ - {.dummy = NULL}} - -#define ECORE_GETOPT_LICENSE(shortname, longname) \ - {shortname, longname, "show license.", NULL, \ - ECORE_GETOPT_ACTION_LICENSE, \ - {.dummy = NULL}} - -#define ECORE_GETOPT_SENTINEL {0, NULL, NULL, NULL, 0, {.dummy = NULL}} - -#define ECORE_GETOPT_VALUE_STR(val) {.strp = &(val)} -#define ECORE_GETOPT_VALUE_BOOL(val) {.boolp = &(val)} -#define ECORE_GETOPT_VALUE_SHORT(val) {.shortp = &(val)} -#define ECORE_GETOPT_VALUE_INT(val) {.intp = &(val)} -#define ECORE_GETOPT_VALUE_LONG(val) {.longp = &(val)} -#define ECORE_GETOPT_VALUE_USHORT(val) {.ushortp = &(val)} -#define ECORE_GETOPT_VALUE_UINT(val) {.uintp = &(val)} -#define ECORE_GETOPT_VALUE_ULONG(val) {.ulongp = &(val)} -#define ECORE_GETOPT_VALUE_DOUBLE(val) {.doublep = &(val)} -#define ECORE_GETOPT_VALUE_PTR(val) {.ptrp = &(val)} -#define ECORE_GETOPT_VALUE_PTR_CAST(val) {.ptrp = (void **)&(val)} -#define ECORE_GETOPT_VALUE_LIST(val) {.listp = &(val)} -#define ECORE_GETOPT_VALUE_NONE {.ptrp = NULL} - - EAPI void ecore_getopt_help(FILE * fp, const Ecore_Getopt * info); - - EAPI unsigned char ecore_getopt_parser_has_duplicates(const - Ecore_Getopt - * parser); - EAPI int ecore_getopt_parse(const Ecore_Getopt * parser, - Ecore_Getopt_Value * values, int argc, - char **argv); - - EAPI Eina_List *ecore_getopt_list_free(Eina_List * list); - - /* helper functions to be used with ECORE_GETOPT_CALLBACK_*() */ - EAPI unsigned char ecore_getopt_callback_geometry_parse(const - Ecore_Getopt - * parser, - const - Ecore_Getopt_Desc - * desc, - const char - *str, - void *data, - Ecore_Getopt_Value - * storage); - EAPI unsigned char ecore_getopt_callback_size_parse(const - Ecore_Getopt * - parser, - const - Ecore_Getopt_Desc - * desc, - const char - *str, - void *data, - Ecore_Getopt_Value - * storage); - - -#ifdef __cplusplus -} -#endif -#endif /* _ECORE_GETOPT_H */ diff --git a/tests/suite/ecore/src/lib/ecore.c b/tests/suite/ecore/src/lib/ecore.c deleted file mode 100644 index 09842d1807..0000000000 --- a/tests/suite/ecore/src/lib/ecore.c +++ /dev/null @@ -1,406 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include - -#ifndef _MSC_VER -#include -#endif - -#ifdef HAVE_LOCALE_H -#include -#endif - -#ifdef HAVE_LANGINFO_H -#include -#endif - -#ifdef HAVE_SYS_MMAN_H -#include -#endif - -#ifdef HAVE_EVIL -#include -#endif -#include - -#include "Ecore.h" -#include "ecore_private.h" - -#if HAVE_MALLINFO -#include - -static Ecore_Version _version = { VERS_MAJ, VERS_MIN, VERS_MIC, VERS_REV }; - -EAPI Ecore_Version *ecore_version = &_version; - -#define KEEP_MAX(Global, Local) \ - if (Global < (Local)) \ - Global = Local; - -static Eina_Bool _ecore_memory_statistic(void *data); -static int _ecore_memory_max_total = 0; -static int _ecore_memory_max_free = 0; -static pid_t _ecore_memory_pid = 0; -#endif - -static const char *_ecore_magic_string_get(Ecore_Magic m); -static int _ecore_init_count = 0; -int _ecore_log_dom = -1; -int _ecore_fps_debug = 0; - -/** OpenBSD does not define CODESET - * FIXME ?? - */ - -#ifndef CODESET -#define CODESET "INVALID" -#endif - -/** - * Set up connections, signal handlers, sockets etc. - * @return 1 or greater on success, 0 otherwise - * - * This function sets up all singal handlers and the basic event loop. If it - * succeeds, 1 will be returned, otherwise 0 will be returned. - * - * @code - * #include - * - * int main(int argc, char **argv) - * { - * if (!ecore_init()) - * { - * printf("ERROR: Cannot init Ecore!\n"); - * return -1; - * } - * ecore_main_loop_begin(); - * ecore_shutdown(); - * } - * @endcode - */ -EAPI int ecore_init(void) -{ - if (++_ecore_init_count != 1) - return _ecore_init_count; - -#ifdef HAVE_LOCALE_H - setlocale(LC_CTYPE, ""); -#endif - /* - if (strcmp(nl_langinfo(CODESET), "UTF-8")) - { - WRN("Not a utf8 locale!"); - } - */ -#ifdef HAVE_EVIL - if (!evil_init()) - return --_ecore_init_count; -#endif - if (!eina_init()) - goto shutdown_evil; - _ecore_log_dom = - eina_log_domain_register("Ecore", ECORE_DEFAULT_LOG_COLOR); - if (_ecore_log_dom < 0) { - EINA_LOG_ERR("Ecore was unable to create a log domain."); - goto shutdown_log_dom; - } - if (getenv("ECORE_FPS_DEBUG")) - _ecore_fps_debug = 1; - if (_ecore_fps_debug) - _ecore_fps_debug_init(); - _ecore_main_loop_init(); - _ecore_signal_init(); - _ecore_exe_init(); - _ecore_thread_init(); - _ecore_glib_init(); - _ecore_job_init(); - _ecore_time_init(); - -#if HAVE_MALLINFO - if (getenv("ECORE_MEM_STAT")) { - _ecore_memory_pid = getpid(); - ecore_animator_add(_ecore_memory_statistic, NULL); - } -#endif - -#if defined(GLIB_INTEGRATION_ALWAYS) - if (_ecore_glib_always_integrate) - ecore_main_loop_glib_integrate(); -#endif - - return _ecore_init_count; - - shutdown_log_dom: - eina_shutdown(); - shutdown_evil: -#ifdef HAVE_EVIL - evil_shutdown(); -#endif - return --_ecore_init_count; -} - -/** - * Shut down connections, signal handlers sockets etc. - * - * This function shuts down all things set up in ecore_init() and cleans up all - * event queues, handlers, filters, timers, idlers, idle enterers/exiters - * etc. set up after ecore_init() was called. - * - * Do not call this function from any callback that may be called from the main - * loop, as the main loop will then fall over and not function properly. - */ -EAPI int ecore_shutdown(void) -{ - if (--_ecore_init_count != 0) - return _ecore_init_count; - - if (_ecore_fps_debug) - _ecore_fps_debug_shutdown(); - _ecore_poller_shutdown(); - _ecore_animator_shutdown(); - _ecore_glib_shutdown(); - _ecore_job_shutdown(); - _ecore_thread_shutdown(); - _ecore_exe_shutdown(); - _ecore_idle_enterer_shutdown(); - _ecore_idle_exiter_shutdown(); - _ecore_idler_shutdown(); - _ecore_timer_shutdown(); - _ecore_event_shutdown(); - _ecore_main_shutdown(); - _ecore_signal_shutdown(); - _ecore_main_loop_shutdown(); - -#if HAVE_MALLINFO - if (getenv("ECORE_MEM_STAT")) { - _ecore_memory_statistic(NULL); - - ERR("[%i] Memory MAX total: %i, free: %i", - _ecore_memory_pid, - _ecore_memory_max_total, _ecore_memory_max_free); - } -#endif - - eina_log_domain_unregister(_ecore_log_dom); - _ecore_log_dom = -1; - eina_shutdown(); -#ifdef HAVE_EVIL - evil_shutdown(); -#endif - - return _ecore_init_count; -} - -EAPI void ecore_print_warning(const char *function, const char *sparam) -{ - WRN("***** Developer Warning ***** :\n" - "\tThis program is calling:\n\n" - "\t%s();\n\n" - "\tWith the parameter:\n\n" - "\t%s\n\n" - "\tbeing NULL. Please fix your program.", function, sparam); - if (getenv("ECORE_ERROR_ABORT")) - abort(); -} - -EAPI void -_ecore_magic_fail(const void *d, Ecore_Magic m, Ecore_Magic req_m, - const char *fname) -{ - ERR("\n" - "*** ECORE ERROR: Ecore Magic Check Failed!!!\n" - "*** IN FUNCTION: %s()", fname); - if (!d) - ERR(" Input handle pointer is NULL!"); - else if (m == ECORE_MAGIC_NONE) - ERR(" Input handle has already been freed!"); - else if (m != req_m) - ERR(" Input handle is wrong type\n" - " Expected: %08x - %s\n" - " Supplied: %08x - %s", - (unsigned int) req_m, _ecore_magic_string_get(req_m), - (unsigned int) m, _ecore_magic_string_get(m)); - ERR("*** NAUGHTY PROGRAMMER!!!\n" - "*** SPANK SPANK SPANK!!!\n" - "*** Now go fix your code. Tut tut tut!"); - if (getenv("ECORE_ERROR_ABORT")) - abort(); -} - -static const char *_ecore_magic_string_get(Ecore_Magic m) -{ - switch (m) { - case ECORE_MAGIC_NONE: - return "None (Freed Object)"; - break; - case ECORE_MAGIC_EXE: - return "Ecore_Exe (Executable)"; - break; - case ECORE_MAGIC_TIMER: - return "Ecore_Timer (Timer)"; - break; - case ECORE_MAGIC_IDLER: - return "Ecore_Idler (Idler)"; - break; - case ECORE_MAGIC_IDLE_ENTERER: - return "Ecore_Idle_Enterer (Idler Enterer)"; - break; - case ECORE_MAGIC_IDLE_EXITER: - return "Ecore_Idle_Exiter (Idler Exiter)"; - break; - case ECORE_MAGIC_FD_HANDLER: - return "Ecore_Fd_Handler (Fd Handler)"; - break; - case ECORE_MAGIC_WIN32_HANDLER: - return "Ecore_Win32_Handler (Win32 Handler)"; - break; - case ECORE_MAGIC_EVENT_HANDLER: - return "Ecore_Event_Handler (Event Handler)"; - break; - case ECORE_MAGIC_EVENT: - return "Ecore_Event (Event)"; - break; - default: - return ""; - }; -} - -/* fps debug calls - for debugging how much time your app actually spends */ -/* "running" (and the inverse being time spent running)... this does not */ -/* account for other apps and multitasking... */ - -static int _ecore_fps_debug_init_count = 0; -static int _ecore_fps_debug_fd = -1; -unsigned int *_ecore_fps_runtime_mmap = NULL; - -void _ecore_fps_debug_init(void) -{ - char buf[4096]; - const char *tmp; - int pid; - - _ecore_fps_debug_init_count++; - if (_ecore_fps_debug_init_count > 1) - return; - -#ifndef HAVE_EVIL - tmp = "/tmp"; -#else - tmp = (char *) evil_tmpdir_get(); -#endif /* HAVE_EVIL */ - pid = (int) getpid(); - snprintf(buf, sizeof(buf), "%s/.ecore_fps_debug-%i", tmp, pid); - _ecore_fps_debug_fd = open(buf, O_CREAT | O_TRUNC | O_RDWR, 0644); - if (_ecore_fps_debug_fd < 0) { - unlink(buf); - _ecore_fps_debug_fd = - open(buf, O_CREAT | O_TRUNC | O_RDWR, 0644); - } - if (_ecore_fps_debug_fd >= 0) { - unsigned int zero = 0; - char *buf = (char *) &zero; - ssize_t todo = sizeof(unsigned int); - - while (todo > 0) { - ssize_t r = write(_ecore_fps_debug_fd, buf, todo); - if (r > 0) { - todo -= r; - buf += r; - } else if ((r < 0) && (errno == EINTR)) - continue; - else { - ERR("could not write to file '%s' fd %d: %s", tmp, _ecore_fps_debug_fd, strerror(errno)); - close(_ecore_fps_debug_fd); - _ecore_fps_debug_fd = -1; - return; - } - } - _ecore_fps_runtime_mmap = mmap(NULL, sizeof(unsigned int), - PROT_READ | PROT_WRITE, - MAP_SHARED, - _ecore_fps_debug_fd, 0); - if (_ecore_fps_runtime_mmap == MAP_FAILED) - _ecore_fps_runtime_mmap = NULL; - } -} - -void _ecore_fps_debug_shutdown(void) -{ - _ecore_fps_debug_init_count--; - if (_ecore_fps_debug_init_count > 0) - return; - if (_ecore_fps_debug_fd >= 0) { - char buf[4096]; - const char *tmp; - int pid; - -#ifndef HAVE_EVIL - tmp = "/tmp"; -#else - tmp = (char *) evil_tmpdir_get(); -#endif /* HAVE_EVIL */ - pid = (int) getpid(); - snprintf(buf, sizeof(buf), "%s/.ecore_fps_debug-%i", tmp, - pid); - unlink(buf); - if (_ecore_fps_runtime_mmap) { - munmap(_ecore_fps_runtime_mmap, sizeof(int)); - _ecore_fps_runtime_mmap = NULL; - } - close(_ecore_fps_debug_fd); - _ecore_fps_debug_fd = -1; - } -} - -void _ecore_fps_debug_runtime_add(double t) -{ - if ((_ecore_fps_debug_fd >= 0) && (_ecore_fps_runtime_mmap)) { - unsigned int tm; - - tm = (unsigned int) (t * 1000000.0); - /* i know its not 100% theoretically guaranteed, but i'd say a write */ - /* of an int could be considered atomic for all practical purposes */ - /* oh and since this is cumulative, 1 second = 1,000,000 ticks, so */ - /* this can run for about 4294 seconds becore looping. if you are */ - /* doing performance testing in one run for over an hour... well */ - /* time to restart or handle a loop condition :) */ - *(_ecore_fps_runtime_mmap) += tm; - } -} - -#if HAVE_MALLINFO -static Eina_Bool _ecore_memory_statistic(__UNUSED__ void *data) -{ - struct mallinfo mi; - static int uordblks = 0; - static int fordblks = 0; - Eina_Bool changed = EINA_FALSE; - - mi = mallinfo(); - -#define HAS_CHANGED(Global, Local) \ - if (Global != Local) \ - { \ - Global = Local; \ - changed = EINA_TRUE; \ - } - - HAS_CHANGED(uordblks, mi.uordblks); - HAS_CHANGED(fordblks, mi.fordblks); - - if (changed) - ERR("[%i] Memory total: %i, free: %i", - _ecore_memory_pid, mi.uordblks, mi.fordblks); - - KEEP_MAX(_ecore_memory_max_total, mi.uordblks); - KEEP_MAX(_ecore_memory_max_free, mi.fordblks); - - return ECORE_CALLBACK_RENEW; -} -#endif diff --git a/tests/suite/ecore/src/lib/ecore_anim.c b/tests/suite/ecore/src/lib/ecore_anim.c deleted file mode 100644 index ff37e393e9..0000000000 --- a/tests/suite/ecore/src/lib/ecore_anim.c +++ /dev/null @@ -1,235 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "Ecore.h" -#include "ecore_private.h" - - -struct _Ecore_Animator { - EINA_INLIST; - ECORE_MAGIC; - - Ecore_Task_Cb func; - void *data; - - Eina_Bool delete_me:1; - Eina_Bool suspended:1; -}; - - -static Eina_Bool _ecore_animator(void *data); - -static Ecore_Timer *timer = NULL; -static int animators_delete_me = 0; -static Ecore_Animator *animators = NULL; -static double animators_frametime = 1.0 / 30.0; - -/** - * Add a animator to tick off at every animaton tick during main loop execution. - * @param func The function to call when it ticks off - * @param data The data to pass to the function - * @return A handle to the new animator - * @ingroup Ecore_Animator_Group - * - * This function adds a animator and returns its handle on success and NULL on - * failure. The function @p func will be called every N seconds where N is the - * frametime interval set by ecore_animator_frametime_set(). The function will - * be passed the @p data pointer as its parameter. - * - * When the animator @p func is called, it must return a value of either 1 or 0. - * If it returns 1 (or ECORE_CALLBACK_RENEW), it will be called again at the - * next tick, or if it returns 0 (or ECORE_CALLBACK_CANCEL) it will be deleted - * automatically making any references/handles for it invalid. - */ -EAPI Ecore_Animator *ecore_animator_add(Ecore_Task_Cb func, - const void *data) -{ - Ecore_Animator *animator; - - if (!func) - return NULL; - animator = calloc(1, sizeof(Ecore_Animator)); - if (!animator) - return NULL; - ECORE_MAGIC_SET(animator, ECORE_MAGIC_ANIMATOR); - animator->func = func; - animator->data = (void *) data; - animators = - (Ecore_Animator *) - eina_inlist_append(EINA_INLIST_GET(animators), - EINA_INLIST_GET(animator)); - if (!timer) { - double t_loop = ecore_loop_time_get(); - double sync_0 = 0.0; - double d = -fmod(t_loop - sync_0, animators_frametime); - - timer = - ecore_timer_loop_add(animators_frametime, - _ecore_animator, NULL); - ecore_timer_delay(timer, d); - } - return animator; -} - -/** - * Delete the specified animator from the animator list. - * @param animator The animator to delete - * @return The data pointer set for the animator - * @ingroup Ecore_Animator_Group - * - * Delete the specified @p aqnimator from the set of animators that are executed - * during main loop execution. This function returns the data parameter that - * was being passed to the callback on success, or NULL on failure. After this - * call returns the specified animator object @p animator is invalid and should not - * be used again. It will not get called again after deletion. - */ -EAPI void *ecore_animator_del(Ecore_Animator * animator) -{ - if (!ECORE_MAGIC_CHECK(animator, ECORE_MAGIC_ANIMATOR)) { - ECORE_MAGIC_FAIL(animator, ECORE_MAGIC_ANIMATOR, - "ecore_animator_del"); - return NULL; - } - if (animator->delete_me) - return animator->data; - animator->delete_me = EINA_TRUE; - animators_delete_me++; - return animator->data; -} - -/** - * Set the animator call interval in seconds. - * @param frametime The time in seconds in between animator ticks. - * - * This function sets the time interval (in seconds) between animator ticks. - */ -EAPI void ecore_animator_frametime_set(double frametime) -{ - if (frametime < 0.0) - frametime = 0.0; - if (animators_frametime == frametime) - return; - animators_frametime = frametime; - if (timer) { - ecore_timer_del(timer); - timer = NULL; - } - if (animators) - timer = - ecore_timer_add(animators_frametime, _ecore_animator, - NULL); -} - -/** - * Get the animator call interval in seconds. - * @return The time in second in between animator ticks. - * - * this function retrieves the time between animator ticks, in seconds. - */ -EAPI double ecore_animator_frametime_get(void) -{ - return animators_frametime; -} - -/** - * Suspend the specified animator. - * @param animator The animator to delete - * @ingroup Ecore_Animator_Group - * - * The specified @p animator will be temporarly removed from the set of animators - * that are executed during main loop execution. - */ -EAPI void ecore_animator_freeze(Ecore_Animator * animator) -{ - if (!ECORE_MAGIC_CHECK(animator, ECORE_MAGIC_ANIMATOR)) { - ECORE_MAGIC_FAIL(animator, ECORE_MAGIC_ANIMATOR, - "ecore_animator_del"); - return; - } - if (animator->delete_me) - return; - animator->suspended = EINA_TRUE; -} - -/** - * Restore execution of the specified animator. - * @param animator The animator to delete - * @ingroup Ecore_Animator_Group - * - * The specified @p animator will be put back in the set of animators - * that are executed during main loop execution. - */ -EAPI void ecore_animator_thaw(Ecore_Animator * animator) -{ - if (!ECORE_MAGIC_CHECK(animator, ECORE_MAGIC_ANIMATOR)) { - ECORE_MAGIC_FAIL(animator, ECORE_MAGIC_ANIMATOR, - "ecore_animator_del"); - return; - } - if (animator->delete_me) - return; - animator->suspended = EINA_FALSE; -} - -void _ecore_animator_shutdown(void) -{ - if (timer) { - ecore_timer_del(timer); - timer = NULL; - } - while (animators) { - Ecore_Animator *animator; - - animator = animators; - animators = - (Ecore_Animator *) - eina_inlist_remove(EINA_INLIST_GET(animators), - EINA_INLIST_GET(animators)); - ECORE_MAGIC_SET(animator, ECORE_MAGIC_NONE); - free(animator); - } -} - -static Eina_Bool _ecore_animator(void *data __UNUSED__) -{ - Ecore_Animator *animator; - - EINA_INLIST_FOREACH(animators, animator) { - if (!animator->delete_me && !animator->suspended) { - if (!animator->func(animator->data)) { - animator->delete_me = EINA_TRUE; - animators_delete_me++; - } - } - } - if (animators_delete_me) { - Ecore_Animator *l; - for (l = animators; l;) { - animator = l; - l = (Ecore_Animator *) EINA_INLIST_GET(l)->next; - if (animator->delete_me) { - animators = - (Ecore_Animator *) - eina_inlist_remove(EINA_INLIST_GET - (animators), - EINA_INLIST_GET - (animator)); - ECORE_MAGIC_SET(animator, - ECORE_MAGIC_NONE); - free(animator); - animators_delete_me--; - if (animators_delete_me == 0) - break; - } - } - } - if (!animators) { - timer = NULL; - return ECORE_CALLBACK_CANCEL; - } - return ECORE_CALLBACK_RENEW; -} diff --git a/tests/suite/ecore/src/lib/ecore_app.c b/tests/suite/ecore/src/lib/ecore_app.c deleted file mode 100644 index b83e5b2958..0000000000 --- a/tests/suite/ecore/src/lib/ecore_app.c +++ /dev/null @@ -1,79 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#ifndef _MSC_VER -#include -#else -#include -#endif - -#ifdef HAVE_EVIL -#include -#endif - -#include "Ecore.h" -#include "ecore_private.h" - -static int app_argc = 0; -static char **app_argv = NULL; - -/** - * Set up the programs command-line arguments. - * @param argc The same as passed as argc to the programs main() function - * @param argv The same as passed as argv to the programs main() function - * - * A call to this function will store the programs command-line arguments - * for later use by ecore_app_restart() or ecore_app_args_get(). - */ -EAPI void ecore_app_args_set(int argc, const char **argv) -{ - if ((argc < 1) || (!argv)) - return; - app_argc = argc; - app_argv = (char **) argv; -} - -/** - * Return the programs stored command-line arguments. - * @param argc A pointer to the return value to hold argc - * @param argv A pointer to the return value to hold argv - * - * When called, this funciton returns the arguments for the program stored by - * ecore_app_args_set(). The integer pointed to by @p argc will be filled, if - * the pointer is not NULL, and the string array pointer @p argv will be filled - * also if the pointer is not NULL. The values they are filled with will be the - * same set by ecore_app_args_set(). - */ -EAPI void ecore_app_args_get(int *argc, char ***argv) -{ - if (argc) - *argc = app_argc; - if (argv) - *argv = app_argv; -} - -/** - * Restart the program executable with the command-line arguments stored. - * - * This function will restart & re-execute this program in place of itself - * using the command-line arguments stored by ecore_app_args_set(). This is - * an easy way for a program to restart itself for cleanup purposes, - * configuration reasons or in the event of a crash. - */ -EAPI void ecore_app_restart(void) -{ - char *args[4096]; - int i; - - if ((app_argc < 1) || (!app_argv)) - return; - if (app_argc >= 4096) - return; - for (i = 0; i < app_argc; i++) - args[i] = app_argv[i]; - args[i] = NULL; - execvp(app_argv[0], args); -} diff --git a/tests/suite/ecore/src/lib/ecore_events.c b/tests/suite/ecore/src/lib/ecore_events.c deleted file mode 100644 index ebe22219d3..0000000000 --- a/tests/suite/ecore/src/lib/ecore_events.c +++ /dev/null @@ -1,696 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Ecore.h" -#include "ecore_private.h" - -static int inpurge = 0; - -struct _Ecore_Event_Handler { - EINA_INLIST; - ECORE_MAGIC; - int type; - Ecore_Event_Handler_Cb func; - void *data; - int references; - Eina_Bool delete_me:1; -}; - -struct _Ecore_Event_Filter { - EINA_INLIST; - ECORE_MAGIC; - Ecore_Data_Cb func_start; - Ecore_Filter_Cb func_filter; - Ecore_End_Cb func_end; - void *loop_data; - void *data; - int references; - Eina_Bool delete_me:1; -}; - -struct _Ecore_Event { - EINA_INLIST; - ECORE_MAGIC; - int type; - void *event; - Ecore_End_Cb func_free; - void *data; - int references; - Eina_Bool delete_me:1; -}; - - -static int events_num = 0; -static Ecore_Event *events = NULL; -static Ecore_Event *event_current = NULL; -static Ecore_Event *purge_events = NULL; - -static Ecore_Event_Handler **event_handlers = NULL; -static Ecore_Event_Handler *event_handler_current = NULL; -static int event_handlers_num = 0; -static int event_handlers_alloc_num = 0; -static Eina_List *event_handlers_delete_list = NULL; - -static Ecore_Event_Filter *event_filters = NULL; -static Ecore_Event_Filter *event_filter_current = NULL; -static Ecore_Event *event_filter_event_current = NULL; -static int event_filters_delete_me = 0; -static int event_id_max = ECORE_EVENT_COUNT; -static int ecore_raw_event_type = ECORE_EVENT_NONE; -static void *ecore_raw_event_event = NULL; - - -static void _ecore_event_purge_deleted(void); -static void *_ecore_event_del(Ecore_Event * event); - - -/** - * Add an event handler. - * @param type The type of the event this handler will get called for - * @param func The function to call when the event is found in the queue - * @param data A data pointer to pass to the called function @p func - * @return A new Event handler, or NULL on failure - * - * Add an event handler to the list of handlers. This will, on success, return - * a handle to the event handler object that was created, that can be used - * later to remove the handler using ecore_event_handler_del(). The @p type - * parameter is the integer of the event type that will trigger this callback - * to be called. The callback @p func is called when this event is processed - * and will be passed the event type, a pointer to the private event - * structure that is specific to that event type, and a data pointer that is - * provided in this call as the @p data parameter. - * - * When the callback @p func is called, it must return 1 or 0. If it returns - * 1 (or ECORE_CALLBACK_RENEW), It will keep being called as per normal, for - * each handler set up for that event type. If it returns 0 (or - * ECORE_CALLBACK_CANCEL), it will cease processing handlers for that particular - * event, so all handler set to handle that event type that have not already - * been called, will not be. - */ -EAPI Ecore_Event_Handler *ecore_event_handler_add(int type, - Ecore_Event_Handler_Cb - func, const void *data) -{ - Ecore_Event_Handler *eh; - - if (!func) - return NULL; - if ((type <= ECORE_EVENT_NONE) || (type >= event_id_max)) - return NULL; - eh = calloc(1, sizeof(Ecore_Event_Handler)); - if (!eh) - return NULL; - ECORE_MAGIC_SET(eh, ECORE_MAGIC_EVENT_HANDLER); - eh->type = type; - eh->func = func; - eh->data = (void *) data; - if (type >= (event_handlers_num - 1)) { - int p_alloc_num; - - p_alloc_num = event_handlers_alloc_num; - event_handlers_num = type + 1; - if (event_handlers_num > event_handlers_alloc_num) { - Ecore_Event_Handler **new_handlers; - int i; - - event_handlers_alloc_num = - ((event_handlers_num + 16) / 16) * 16; - new_handlers = - realloc(event_handlers, - event_handlers_alloc_num * - sizeof(Ecore_Event_Handler *)); - if (!new_handlers) { - free(eh); - return NULL; - } - event_handlers = new_handlers; - for (i = p_alloc_num; i < event_handlers_alloc_num; - i++) - event_handlers[i] = NULL; - } - } - event_handlers[type] = - (Ecore_Event_Handler *) - eina_inlist_append(EINA_INLIST_GET(event_handlers[type]), - EINA_INLIST_GET(eh)); - return eh; -} - -/** - * Delete an event handler. - * @param event_handler Event handler handle to delete - * @return Data passed to handler - * - * Delete a specified event handler from the handler list. On success this will - * delete the event handler and return the pointer passed as @p data when the - * handler was added by ecore_event_handler_add(). On failure NULL will be - * returned. Once a handler is deleted it will no longer be called. - */ -EAPI void *ecore_event_handler_del(Ecore_Event_Handler * event_handler) -{ - if (!ECORE_MAGIC_CHECK(event_handler, ECORE_MAGIC_EVENT_HANDLER)) { - ECORE_MAGIC_FAIL(event_handler, ECORE_MAGIC_EVENT_HANDLER, - "ecore_event_handler_del"); - return NULL; - } - EINA_SAFETY_ON_TRUE_RETURN_VAL(event_handler->delete_me, NULL); - event_handler->delete_me = 1; - event_handlers_delete_list = - eina_list_append(event_handlers_delete_list, event_handler); - return event_handler->data; -} - -static void _ecore_event_generic_free(void *data __UNUSED__, void *event) -{ - free(event); -} - -/** - * Add an event to the event queue. - * @param type The event type to add to the end of the event queue - * @param ev The private data structure for this event type - * @param func_free The function to be called to free this private structure - * @param data The data pointer to be passed to the free function - * @return A Handle for that event - * - * On success this function returns a handle to an event on the event queue, or - * NULL if it fails. If it succeeds, an event of type @p type will be added - * to the queue for processing by event handlers added by - * ecore_event_handler_add(). The @p ev parameter will be a pointer to the event - * private data that is specific to that event type. When the event is no - * longer needed, @p func_free will be called and passed the private structure - * pointer for cleaning up. If @p func_free is NULL, free() will be called - * with the private structure pointer. - * func_free is passed @p data as its data parameter. - */ -EAPI Ecore_Event *ecore_event_add(int type, void *ev, - Ecore_End_Cb func_free, void *data) -{ -/* if (!ev) return NULL;*/ - if (type <= ECORE_EVENT_NONE) - return NULL; - if (type >= event_id_max) - return NULL; - if ((ev) && (!func_free)) - func_free = _ecore_event_generic_free; - return _ecore_event_add(type, ev, func_free, data); -} - -/** - * Delete an event from the queue. - * @param event The event handle to delete - * @return The data pointer originally set for the event free function - * - * This deletes the event @p event from the event queue, and returns the - * @p data parameer originally set when adding it with ecore_event_add(). This - * does not immediately call the free function, and it may be called later on - * cleanup, and so if the free function depends on the data pointer to work, - * you should defer cleaning of this till the free function is called later. - */ -EAPI void *ecore_event_del(Ecore_Event * event) -{ - if (!ECORE_MAGIC_CHECK(event, ECORE_MAGIC_EVENT)) { - ECORE_MAGIC_FAIL(event, ECORE_MAGIC_EVENT, - "ecore_event_del"); - return NULL; - } - EINA_SAFETY_ON_TRUE_RETURN_VAL(event->delete_me, NULL); - event->delete_me = 1; - return event->data; -} - -/** - * Allocate a new event type id sensibly and return the new id. - * @return A new event type id. - * - * This function allocates a new event type id and returns it. Once an event - * type has been allocated it can never be de-allocated during the life of - * the program. There is no guarantee of the contents of this event ID, or how - * it is calculated, except that the ID will be unique to the current instance - * of the process. - */ -EAPI int ecore_event_type_new(void) -{ - event_id_max++; - return event_id_max - 1; -} - -/** - * Add a filter the current event queue. - * @param func_start Function to call just before filtering and return data - * @param func_filter Function to call on each event - * @param func_end Function to call after the queu has been filtered - * @param data Data to pass to the filter functions - * @return A filter handle - * - * This adds a filter to call callbacks to loop through the event queue and - * filter events out of the queue. On failure NULL is returned. On success a - * Filter handle is returned. Filters are called on the queue just before - * Event handler processing to try and remove redundant events. Just as - * processing starts @p func_start is called and passed the @p data pointer. - * This function returns a pointer that is used as loop_data that is now passed to - * @p func_filter as loop_data. @p func_filter is also passed @p data and the - * event type and private event structure. If this callback returns 0, the - * event is removed from the queue. If it returns 1, the event is kept. When - * processing is finished @p func_end is called and is passed the loop_data - * and @p data pointer to clean up. - */ -EAPI Ecore_Event_Filter *ecore_event_filter_add(Ecore_Data_Cb func_start, - Ecore_Filter_Cb - func_filter, - Ecore_End_Cb func_end, - const void *data) -{ - Ecore_Event_Filter *ef; - - if (!func_filter) - return NULL; - ef = calloc(1, sizeof(Ecore_Event_Filter)); - if (!ef) - return NULL; - ECORE_MAGIC_SET(ef, ECORE_MAGIC_EVENT_FILTER); - ef->func_start = func_start; - ef->func_filter = func_filter; - ef->func_end = func_end; - ef->data = (void *) data; - event_filters = - (Ecore_Event_Filter *) - eina_inlist_append(EINA_INLIST_GET(event_filters), - EINA_INLIST_GET(ef)); - return ef; -} - -/** - * Delete an event filter. - * @param ef The event filter handle - * @return The data set for the filter - * - * Delete a filter that has been added by its @p ef handle. On success this - * will return the data pointer set when this filter was added. On failure - * NULL is returned. - */ -EAPI void *ecore_event_filter_del(Ecore_Event_Filter * ef) -{ - if (!ECORE_MAGIC_CHECK(ef, ECORE_MAGIC_EVENT_FILTER)) { - ECORE_MAGIC_FAIL(ef, ECORE_MAGIC_EVENT_FILTER, - "ecore_event_filter_del"); - return NULL; - } - EINA_SAFETY_ON_TRUE_RETURN_VAL(ef->delete_me, NULL); - ef->delete_me = 1; - event_filters_delete_me = 1; - return ef->data; -} - -/** - * Return the current event type being handled. - * @return The current event type being handled if inside a handler callback - * - * If the program is currently inside an Ecore event handler callback this - * will return the type of the current event being processed. If Ecore is - * not inside an event handler, ECORE_EVENT_NONE is returned. - * - * This is useful when certain Ecore modules such as Ecore_Evas "swallow" - * events and not all the original information is passed on. In special cases - * this extra information may be useful or needed and using this call can let - * the program know if the event type being handled is one it wants to get more - * information about. - */ -EAPI int ecore_event_current_type_get(void) -{ - return ecore_raw_event_type; -} - -/** - * Return the current event type pointer handled. - * @return The current event pointer being handled if inside a handler callback - * - * If the program is currently inside an Ecore event handler callback this - * will return the pointer of the current event being processed. If Ecore is - * not inside an event handler, NULL will be returned. - * - * This is useful when certain Ecore modules such as Ecore_Evas "swallow" - * events and not all the original information is passed on. In special cases - * this extra information may be useful or needed and using this call can let - * the program access the event data if the type of the event is handled by - * the program. - */ -EAPI void *ecore_event_current_event_get(void) -{ - return ecore_raw_event_event; -} - -void _ecore_event_shutdown(void) -{ - int i; - Ecore_Event_Handler *eh; - Ecore_Event_Filter *ef; - - while (events) - _ecore_event_del(events); - event_current = NULL; - for (i = 0; i < event_handlers_num; i++) { - while ((eh = event_handlers[i])) { - event_handlers[i] = - (Ecore_Event_Handler *) - eina_inlist_remove(EINA_INLIST_GET - (event_handlers[i]), - EINA_INLIST_GET - (event_handlers[i])); - ECORE_MAGIC_SET(eh, ECORE_MAGIC_NONE); - if (!eh->delete_me) - free(eh); - } - } - EINA_LIST_FREE(event_handlers_delete_list, eh) - free(eh); - if (event_handlers) - free(event_handlers); - event_handlers = NULL; - event_handlers_num = 0; - event_handlers_alloc_num = 0; - while ((ef = event_filters)) { - event_filters = - (Ecore_Event_Filter *) - eina_inlist_remove(EINA_INLIST_GET(event_filters), - EINA_INLIST_GET(event_filters)); - ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE); - free(ef); - } - event_filters_delete_me = 0; - event_filter_current = NULL; - event_filter_event_current = NULL; -} - -int _ecore_event_exist(void) -{ - Ecore_Event *e; - EINA_INLIST_FOREACH(events, e) - if (!e->delete_me) - return 1; - return 0; -} - -Ecore_Event *_ecore_event_add(int type, void *ev, Ecore_End_Cb func_free, - void *data) -{ - Ecore_Event *e; - - e = calloc(1, sizeof(Ecore_Event)); - if (!e) - return NULL; - ECORE_MAGIC_SET(e, ECORE_MAGIC_EVENT); - e->type = type; - e->event = ev; - e->func_free = func_free; - e->data = data; - if (inpurge > 0) { - purge_events = - (Ecore_Event *) - eina_inlist_append(EINA_INLIST_GET(purge_events), - EINA_INLIST_GET(e)); - events_num++; - } else { - events = - (Ecore_Event *) - eina_inlist_append(EINA_INLIST_GET(events), - EINA_INLIST_GET(e)); - events_num++; - } - return e; -} - -void *_ecore_event_del(Ecore_Event * event) -{ - void *data; - - data = event->data; - if (event->func_free) - event->func_free(event->data, event->event); - events = - (Ecore_Event *) eina_inlist_remove(EINA_INLIST_GET(events), - EINA_INLIST_GET(event)); - ECORE_MAGIC_SET(event, ECORE_MAGIC_NONE); - free(event); - events_num--; - return data; -} - -static void _ecore_event_purge_deleted(void) -{ - Ecore_Event *itr = events; - - inpurge++; - while (itr) { - Ecore_Event *next = - (Ecore_Event *) EINA_INLIST_GET(itr)->next; - if ((!itr->references) && (itr->delete_me)) - _ecore_event_del(itr); - itr = next; - } - inpurge--; - while (purge_events) { - Ecore_Event *e = purge_events; - purge_events = - (Ecore_Event *) - eina_inlist_remove(EINA_INLIST_GET(purge_events), - EINA_INLIST_GET(purge_events)); - events = - (Ecore_Event *) - eina_inlist_append(EINA_INLIST_GET(events), - EINA_INLIST_GET(e)); - } -} - -static inline void _ecore_event_filters_apply() -{ - - if (!event_filter_current) { - /* regular main loop, start from head */ - event_filter_current = event_filters; - } else { - /* recursive main loop, continue from where we were */ - event_filter_current = - (Ecore_Event_Filter *) - EINA_INLIST_GET(event_filter_current)->next; - } - - while (event_filter_current) { - Ecore_Event_Filter *ef = event_filter_current; - - if (!ef->delete_me) { - ef->references++; - - if (ef->func_start) - ef->loop_data = ef->func_start(ef->data); - - if (!event_filter_event_current) { - /* regular main loop, start from head */ - event_filter_event_current = events; - } else { - /* recursive main loop, continue from where we were */ - event_filter_event_current = - (Ecore_Event *) - EINA_INLIST_GET - (event_filter_event_current)->next; - } - - while (event_filter_event_current) { - Ecore_Event *e = - event_filter_event_current; - - if (!ef-> - func_filter(ef->data, ef->loop_data, - e->type, e->event)) { - ecore_event_del(e); - } - - if (event_filter_event_current) /* may have changed in recursive main loops */ - event_filter_event_current = - (Ecore_Event *) - EINA_INLIST_GET - (event_filter_event_current)-> - next; - } - if (ef->func_end) - ef->func_end(ef->data, ef->loop_data); - - ef->references--; - } - - if (event_filter_current) /* may have changed in recursive main loops */ - event_filter_current = - (Ecore_Event_Filter *) - EINA_INLIST_GET(event_filter_current)->next; - } - if (event_filters_delete_me) { - int deleted_in_use = 0; - Ecore_Event_Filter *l; - for (l = event_filters; l;) { - Ecore_Event_Filter *ef = l; - l = (Ecore_Event_Filter *) EINA_INLIST_GET(l)-> - next; - if (ef->delete_me) { - if (ef->references) { - deleted_in_use++; - continue; - } - - event_filters = - (Ecore_Event_Filter *) - eina_inlist_remove(EINA_INLIST_GET - (event_filters), - EINA_INLIST_GET - (ef)); - ECORE_MAGIC_SET(ef, ECORE_MAGIC_NONE); - free(ef); - } - } - if (!deleted_in_use) - event_filters_delete_me = 0; - } -} - -void _ecore_event_call(void) -{ - Eina_List *l, *l_next; - Ecore_Event_Handler *eh; - - _ecore_event_filters_apply(); - - if (!event_current) { - /* regular main loop, start from head */ - event_current = events; - event_handler_current = NULL; - } - - while (event_current) { - Ecore_Event *e = event_current; - int handle_count = 0; - - if (e->delete_me) { - event_current = - (Ecore_Event *) - EINA_INLIST_GET(event_current)->next; - continue; - } - - ecore_raw_event_type = e->type; - ecore_raw_event_event = e->event; - e->references++; - if ((e->type >= 0) && (e->type < event_handlers_num)) { - if (!event_handler_current) { - /* regular main loop, start from head */ - event_handler_current = - event_handlers[e->type]; - } else { - /* recursive main loop, continue from where we were */ - event_handler_current = - (Ecore_Event_Handler *) - EINA_INLIST_GET - (event_handler_current)->next; - } - - while ((event_handler_current) && (!e->delete_me)) { - Ecore_Event_Handler *eh = - event_handler_current; - if (!eh->delete_me) { - Eina_Bool ret; - - handle_count++; - - eh->references++; - ret = - eh->func(eh->data, e->type, - e->event); - eh->references--; - - if (!ret) { - event_handler_current = - NULL; - break; /* 0 == "call no further handlers" */ - } - } - - if (event_handler_current) /* may have changed in recursive main loops */ - event_handler_current = - (Ecore_Event_Handler *) - EINA_INLIST_GET - (event_handler_current)->next; - } - } - /* if no handlers were set for EXIT signal - then default is */ - /* to quit the main loop */ - if ((e->type == ECORE_EVENT_SIGNAL_EXIT) - && (handle_count == 0)) - ecore_main_loop_quit(); - e->references--; - e->delete_me = 1; - - if (event_current) /* may have changed in recursive main loops */ - event_current = - (Ecore_Event *) - EINA_INLIST_GET(event_current)->next; - } - - ecore_raw_event_type = ECORE_EVENT_NONE; - ecore_raw_event_event = NULL; - - _ecore_event_purge_deleted(); - - EINA_LIST_FOREACH_SAFE(event_handlers_delete_list, l, l_next, eh) { - if (eh->references) - continue; - - event_handlers_delete_list = - eina_list_remove_list(event_handlers_delete_list, l); - - event_handlers[eh->type] = - (Ecore_Event_Handler *) - eina_inlist_remove(EINA_INLIST_GET - (event_handlers[eh->type]), - EINA_INLIST_GET(eh)); - ECORE_MAGIC_SET(eh, ECORE_MAGIC_NONE); - free(eh); - } -} - -EAPI void *_ecore_event_signal_user_new(void) -{ - Ecore_Event_Signal_User *e; - - e = calloc(1, sizeof(Ecore_Event_Signal_User)); - return e; -} - -void *_ecore_event_signal_hup_new(void) -{ - Ecore_Event_Signal_Hup *e; - - e = calloc(1, sizeof(Ecore_Event_Signal_Hup)); - return e; -} - -void *_ecore_event_signal_exit_new(void) -{ - Ecore_Event_Signal_Exit *e; - - e = calloc(1, sizeof(Ecore_Event_Signal_Exit)); - return e; -} - -void *_ecore_event_signal_power_new(void) -{ - Ecore_Event_Signal_Power *e; - - e = calloc(1, sizeof(Ecore_Event_Signal_Power)); - return e; -} - -void *_ecore_event_signal_realtime_new(void) -{ - return calloc(1, sizeof(Ecore_Event_Signal_Realtime)); -} diff --git a/tests/suite/ecore/src/lib/ecore_exe.c b/tests/suite/ecore/src/lib/ecore_exe.c deleted file mode 100644 index 883243a923..0000000000 --- a/tests/suite/ecore/src/lib/ecore_exe.c +++ /dev/null @@ -1,1805 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_SYS_WAIT_H -#include -#endif - -#include "Ecore.h" -#include "ecore_private.h" - - - /* FIXME: Getting respawn to work - * - * There is no way that we can do anything about the internal state info of - * an external exe. The same can be said about the state of user code. User - * code in this context means the code that is using ecore_exe to manage exe's - * for it. - * - * Document that the exe must be respawnable, in other words, there is no - * state that it cannot regenerate by just killing it and starting it again. - * This includes state that the user code knows about, as the respawn is - * transparent to that code. On the other hand, maybe a respawn event might - * be useful, or maybe resend the currently non existent add event. For - * consistancy with ecore_con, an add event is good anyway. - * - * The Ecore_exe structure is reused for respawning, so that the (opaque) - * pointer held by the user remains valid. This means that the Ecore_Exe - * init and del functions may need to be split into two parts each to avoid - * duplicating code - common code part, and the rest. This implies that - * the unchanging members mentioned next should NEVER change. - * - * These structure members don't need to change - - * __list_data - we stay on the list - * ECORE_MAGIC - this is a constant - * data - passed in originally - * cmd - passed in originally - * flags - passed in originally - * - * These structure members need to change - - * tag - state that must be regenerated, zap it - * pid - it will be different - * child_fd_write - it will be different - * child_fd_read - it will be different - * child_fd_error - it will be different - * write_fd_handler - we cannot change the fd used by a handler, this changes coz the fd changes. - * read_fd_handler - we cannot change the fd used by a handler, this changes coz the fd changes. - * error_fd_handler - we cannot change the fd used by a handler, this changes coz the fd changes. - * - * Hmm, the read, write, and error buffers could be tricky. - * They are not atomic, and could be in a semi complete state. - * They fall into the "state must be regenerated" mentioned above. - * A respawn/add event should take care of it. - * - * These structure members need to change - - * write_data_buf - state that must be regenerated, zap it - * write_data_size - state that must be regenerated, zap it - * write_data_offset - state that must be regenerated, zap it - * read_data_buf - state that must be regenerated, zap it - * read_data_size - state that must be regenerated, zap it - * error_data_buf - state that must be regenerated, zap it - * error_data_size - state that must be regenerated, zap it - * close_write - state that must be regenerated, zap it - * - * There is the problem that an exe that fell over and needs respawning - * might keep falling over, keep needing to be respawned, and tie up system - * resources with the constant respawning. An exponentially increasing - * timeout (with maximum timeout) between respawns should take care of that. - * Although this is not a "contention for a resource" problem, the exe falling - * over may be, so a random element added to the timeout may help, and won't - * hurt. The user code may need to be informed that a timeout is in progress. - */ - -struct _Ecore_Exe { - EINA_INLIST; - ECORE_MAGIC; - pid_t pid; - void *data; - char *tag, *cmd; - Ecore_Exe_Flags flags; - Ecore_Fd_Handler *write_fd_handler; /* the fd_handler to handle write to child - if this was used, or NULL if not */ - Ecore_Fd_Handler *read_fd_handler; /* the fd_handler to handle read from child - if this was used, or NULL if not */ - Ecore_Fd_Handler *error_fd_handler; /* the fd_handler to handle errors from child - if this was used, or NULL if not */ - void *write_data_buf; /* a data buffer for data to write to the child - - * realloced as needed for more data and flushed when the fd handler says writes are possible - */ - int write_data_size; /* the size in bytes of the data buffer */ - int write_data_offset; /* the offset in bytes in the data buffer */ - void *read_data_buf; /* data read from the child awating delivery to an event */ - int read_data_size; /* data read from child in bytes */ - void *error_data_buf; /* errors read from the child awating delivery to an event */ - int error_data_size; /* errors read from child in bytes */ - int child_fd_write; /* fd to write TO to send data to the child */ - int child_fd_read; /* fd to read FROM when child has sent us (the parent) data */ - int child_fd_error; /* fd to read FROM when child has sent us (the parent) errors */ - int child_fd_write_x; /* fd to write TO to send data to the child */ - int child_fd_read_x; /* fd to read FROM when child has sent us (the parent) data */ - int child_fd_error_x; /* fd to read FROM when child has sent us (the parent) errors */ - Eina_Bool close_stdin:1; - - int start_bytes, end_bytes, start_lines, end_lines; /* Number of bytes/lines to auto pipe at start/end of stdout/stderr. */ - - Ecore_Timer *doomsday_clock; /* The Timer of Death. Muahahahaha. */ - void *doomsday_clock_dead; /* data for the doomsday clock */ - - Ecore_Exe_Cb pre_free_cb; -}; - - -/* TODO: Something to let people build a command line and does auto escaping - - * - * ecore_exe_snprintf() - * - * OR - * - * cmd = ecore_exe_comand_parameter_append(cmd, "firefox"); - * cmd = ecore_exe_comand_parameter_append(cmd, "http://www.foo.com/bar.html?baz=yes"); - * each parameter appended is one argument, and it gets escaped, quoted, and - * appended with a preceding space. The first is the command off course. - */ - -struct _ecore_exe_dead_exe { - pid_t pid; - char *cmd; -}; - -static inline void _ecore_exe_exec_it(const char *exe_cmd, - Ecore_Exe_Flags flags); -static Eina_Bool _ecore_exe_data_generic_handler(void *data, - Ecore_Fd_Handler * - fd_handler, - Ecore_Exe_Flags flags); -static Eina_Bool _ecore_exe_data_error_handler(void *data, - Ecore_Fd_Handler * - fd_handler); -static Eina_Bool _ecore_exe_data_read_handler(void *data, - Ecore_Fd_Handler * - fd_handler); -static Eina_Bool _ecore_exe_data_write_handler(void *data, - Ecore_Fd_Handler * - fd_handler); -static void _ecore_exe_flush(Ecore_Exe * exe); -static void _ecore_exe_event_exe_data_free(void *data __UNUSED__, - void *ev); -static Ecore_Exe *_ecore_exe_is_it_alive(pid_t pid); -static Eina_Bool _ecore_exe_make_sure_its_dead(void *data); -static Eina_Bool _ecore_exe_make_sure_its_really_dead(void *data); -static Ecore_Exe_Event_Add *_ecore_exe_event_add_new(void); -static void _ecore_exe_event_add_free(void *data, void *ev); -static void _ecore_exe_dead_attach(Ecore_Exe * exe); - -EAPI int ECORE_EXE_EVENT_ADD = 0; -EAPI int ECORE_EXE_EVENT_DEL = 0; -EAPI int ECORE_EXE_EVENT_DATA = 0; -EAPI int ECORE_EXE_EVENT_ERROR = 0; - -static Ecore_Exe *exes = NULL; -static const char *shell = NULL; - -/* FIXME: This errno checking stuff should be put elsewhere for everybody to use. - * For now it lives here though, just to make testing easier. - */ -static int _ecore_exe_check_errno(int result, const char *file, int line); - -#define E_IF_NO_ERRNO(result, foo, ok) \ - while (((ok) = _ecore_exe_check_errno( (result) = (foo), __FILE__, __LINE__)) == -1) sleep(1); \ - if (ok) - -#define E_NO_ERRNO(result, foo, ok) \ - while (((ok) = _ecore_exe_check_errno( (result) = (foo), __FILE__, __LINE__)) == -1) sleep(1) - -#define E_IF_NO_ERRNO_NOLOOP(result, foo, ok) \ - if (((ok) = _ecore_exe_check_errno( (result) = (foo), __FILE__, __LINE__))) - -static int _ecore_exe_check_errno(int result, const char *file, int line) -{ - int saved_errno = errno; - - if (result == -1) { - perror("*** errno reports "); -/* What is currently supported - - * - * pipe - * EFAULT Argument is not valid. - * EMFILE Too many file descriptors used by process. - * ENFILE Too many open files by system. - * read - * EAGAIN No data now, try again. - * EBADF This is not an fd that can be read. - * EFAULT This is not a valid buffer. - * EINTR Interupted by signal, try again. - * EINVAL This is not an fd that can be read. - * EIO I/O error. - * EISDIR This is a directory, and cannot be read. - * others Depending on what sort of thing we are reading from. - * close - * EBADF This is not an fd that can be closed. - * EINTR Interupted by signal, try again. - * EIO I/O error. - * dup2 - * EBADF This is not an fd that can be dup2'ed. - * EBUSY Race condition between open() and dup() - * EINTR Interupted by signal, try again. - * EMFILE Too many file descriptors used by process. - * fcntl - * EACCES, EAGAIN Locked or mapped by something else, try again later. - * EBADF This is not an fd that can be fcntl'ed. - * EDEADLK This will cause a deadlock. - * EFAULT This is not a valid lock. - * EINTR Interupted by signal, try again. - * EINVAL This is not a valid arg. - * EMFILE Too many file descriptors used by process. - * ENOLCK Problem getting a lock. - * EPERM Not allowed to do that. - * fsync - * EBADF This is not an fd that is open for writing. - * EINVAL, EROFS This is not an fd that can be fsynced. - * EIO I/O error. - * - * How to use it - - * int ok = 0; - * int result; - * - * E_IF_NO_ERRNO(result, foo(bar), ok) - * { - * E_IF_NO_ERRNO_NOLOOP(result, foo(bar), ok) - * { - * } - * } - * - * if (!ok) - * { - * // Something failed, cleanup. - * } - */ - switch (saved_errno) { - case EACCES: - case EAGAIN: - case EINTR: - { /* Not now, try later. */ - ERR("*** Must try again in %s @%u.", file, - line); - result = -1; - break; - } - case EMFILE: - case ENFILE: - case ENOLCK: - { /* Low on resources. */ - ERR("*** Low on resources in %s @%u.", - file, line); - result = 0; - break; - } - case EIO: - { /* I/O error. */ - ERR("*** I/O error in %s @%u.", file, - line); - result = 0; - break; - } - case EFAULT: - case EBADF: - case EINVAL: - case EROFS: - case EISDIR: - case EDEADLK: - case EPERM: - case EBUSY: - { /* Programmer fucked up. */ - ERR("*** NAUGHTY PROGRAMMER!!!\n" - "*** SPANK SPANK SPANK!!!\n" - "*** Now go fix your code in %s @%u. Tut tut tut!", - file, line); - result = 0; - break; - } - default: - { /* Unsupported errno code, please add this one. */ - ERR("*** NAUGHTY PROGRAMMER!!!\n" - "*** SPANK SPANK SPANK!!!\n" - "*** Unsupported errno code %d, please add this one.\n" - "*** Now go fix your code in %s @%u, from %s @%u. Tut tut tut!", - saved_errno, __FILE__, __LINE__, file, - line); - result = 0; - break; - } - } - } else /* Everything is fine. */ - result = 1; - - errno = saved_errno; - return result; -} - -/** - * @defgroup Ecore_Exe_Basic_Group Process Spawning Functions - * - * Functions that deal with spawned processes. - */ - -static int run_pri = ECORE_EXE_PRIORITY_INHERIT; - -/** - * Sets the priority at which to launch processes - * - * This sets the priority of processes run by ecore_exe_run() and - * ecore_exe_pipe_run(). - * @li On Windows, the child process is created by default with the - * #ECORE_EXE_WIN32_PRIORITY_NORMAL priority, unless the calling - * process is in #ECORE_EXE_WIN32_PRIORITY_IDLE or - * #ECORE_EXE_WIN32_PRIORITY_BELOW_NORMAL priority. In that case, the - * child process inherits this priority. - * @li On other platforms, if set to #ECORE_EXE_PRIORITY_INHERIT child - * processes inherits the priority of their parent. This is the default. - * - * @param pri value a Ecore_Exe_Win32_Priority value on Windows, -20 - * to 19 or ECORE_EXE_PRIORITY_INHERIT on other OS. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI void ecore_exe_run_priority_set(int pri) -{ - run_pri = pri; -} - -/** - * Gets the priority at which to launch processes - * - * This gets ths priority of launched processes. See - * ecore_exe_run_priority_set() for details. This just returns the value set - * by this call. - * - * @return the value set by ecore_exe_run_priority_set() - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI int ecore_exe_run_priority_get(void) -{ - return run_pri; -} - -/** - * Spawns a child process. - * - * This is now just a thin wrapper around ecore_exe_pipe_run() - * - * @param exe_cmd The command to run with @c /bin/sh. - * @param data Data to attach to the returned process handle. - * @return A process handle to the spawned process. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI Ecore_Exe *ecore_exe_run(const char *exe_cmd, const void *data) -{ -/* I'm just being paranoid again, leaving in the original code in case there is a problem. */ -#if 0 - Ecore_Exe *exe; - pid_t pid; - - if (!exe_cmd) - return NULL; - pid = fork(); - if (pid) { - exe = calloc(1, sizeof(Ecore_Exe)); - if (!exe) { - kill(pid, SIGKILL); - return NULL; - } - ECORE_MAGIC_SET(exe, ECORE_MAGIC_EXE); - exe->pid = pid; - exe->data = (void *) data; - exe->cmd = strdup(exe_cmd); - exes = _ecore_list2_append(exes, exe); - return exe; - } - _ecore_exe_exec_it(exe_cmd, 0); - exit(127); - return NULL; -#else - return ecore_exe_pipe_run(exe_cmd, 0, data); -#endif -} - -/** - * Spawns a child process with its stdin/out available for communication. - * - * This function forks and runs the given command using @c /bin/sh. - * - * Note that the process handle is only valid until a child process - * terminated event is received. After all handlers for the child process - * terminated event have been called, the handle will be freed by Ecore. - * - * This function does the same thing as ecore_exe_run(), but also makes the - * standard in and/or out as well as stderr from the child process available - * for reading or writing. To write use ecore_exe_send(). To read listen to - * ECORE_EXE_EVENT_DATA or ECORE_EXE_EVENT_ERROR events (set up handlers). - * Ecore may buffer read and error data until a newline character if asked - * for with the @p flags. All data will be included in the events (newlines - * will be replaced with NULLS if line buffered). ECORE_EXE_EVENT_DATA events - * will only happen if the process is run with ECORE_EXE_PIPE_READ enabled - * in the flags. The same with the error version. Writing will only be - * allowed with ECORE_EXE_PIPE_WRITE enabled in the flags. - * - * @param exe_cmd The command to run with @c /bin/sh. - * @param flags The flag parameters for how to deal with inter-process I/O - * @param data Data to attach to the returned process handle. - * @return A process handle to the spawned process. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI Ecore_Exe *ecore_exe_pipe_run(const char *exe_cmd, - Ecore_Exe_Flags flags, const void *data) -{ - Ecore_Exe *exe = NULL; - int statusPipe[2] = { -1, -1 }; - int errorPipe[2] = { -1, -1 }; - int readPipe[2] = { -1, -1 }; - int writePipe[2] = { -1, -1 }; - int n = 0; - int ok = 1; - int result; - - if (!exe_cmd) - return NULL; - exe = calloc(1, sizeof(Ecore_Exe)); - if (!exe) - return NULL; - - if ((flags & ECORE_EXE_PIPE_AUTO) - && (!(flags & ECORE_EXE_PIPE_ERROR)) - && (!(flags & ECORE_EXE_PIPE_READ))) - /* We need something to auto pipe. */ - flags |= ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_ERROR; - - exe->child_fd_error = -1; - exe->child_fd_read = -1; - exe->child_fd_write = -1; - exe->child_fd_error_x = -1; - exe->child_fd_read_x = -1; - exe->child_fd_write_x = -1; - - /* Create some pipes. */ - if (ok) { - E_IF_NO_ERRNO_NOLOOP(result, pipe(statusPipe), ok) { - } - } - if (ok && (flags & ECORE_EXE_PIPE_ERROR)) { - E_IF_NO_ERRNO_NOLOOP(result, pipe(errorPipe), ok) { - exe->child_fd_error = errorPipe[0]; - exe->child_fd_error_x = errorPipe[1]; - } - } - if (ok && (flags & ECORE_EXE_PIPE_READ)) { - E_IF_NO_ERRNO_NOLOOP(result, pipe(readPipe), ok) { - exe->child_fd_read = readPipe[0]; - exe->child_fd_read_x = readPipe[1]; - } - } - if (ok && (flags & ECORE_EXE_PIPE_WRITE)) { - E_IF_NO_ERRNO_NOLOOP(result, pipe(writePipe), ok) { - exe->child_fd_write = writePipe[1]; - exe->child_fd_write_x = writePipe[0]; - } - } - if (ok) { - pid_t pid = 0; - volatile int vfork_exec_errno = 0; - - /* FIXME: I should double check this. After a quick look around, this is already done, but via a more modern method. */ - /* signal(SIGPIPE, SIG_IGN); We only want EPIPE on errors */ - pid = fork(); - - if (pid == -1) { - ERR("Failed to fork process"); - pid = 0; - } else if (pid == 0) { /* child */ - if (run_pri != ECORE_EXE_PRIORITY_INHERIT) { - if ((run_pri >= -20) && (run_pri <= 19)) - setpriority(PRIO_PROCESS, 0, - run_pri); - } - /* dup2 STDERR, STDIN, and STDOUT. dup2() allegedly closes the - * second pipe if it's open. On the other hand, there was the - * Great FD Leak Scare of '06, so let's be paranoid. */ - if (ok && (flags & ECORE_EXE_PIPE_ERROR)) { - E_NO_ERRNO(result, close(STDERR_FILENO), - ok); - E_NO_ERRNO(result, - dup2(errorPipe[1], - STDERR_FILENO), ok); - } - if (ok && (flags & ECORE_EXE_PIPE_READ)) { - E_NO_ERRNO(result, close(STDOUT_FILENO), - ok); - E_NO_ERRNO(result, - dup2(readPipe[1], - STDOUT_FILENO), ok); - } - if (ok && (flags & ECORE_EXE_PIPE_WRITE)) { - E_NO_ERRNO(result, close(STDIN_FILENO), - ok); - E_NO_ERRNO(result, - dup2(writePipe[0], - STDIN_FILENO), ok); - } - - if (ok) { - /* Setup the status pipe. */ - E_NO_ERRNO(result, close(statusPipe[0]), - ok); - E_IF_NO_ERRNO(result, fcntl(statusPipe[1], F_SETFD, FD_CLOEXEC), ok) { /* close on exec shows success */ - /* Run the actual command. */ - _ecore_exe_exec_it(exe_cmd, flags); /* no return */ - } - } - - /* Something went 'orribly wrong. */ - vfork_exec_errno = errno; - - /* Close the pipes. */ - if (flags & ECORE_EXE_PIPE_ERROR) - E_NO_ERRNO(result, close(errorPipe[1]), - ok); - if (flags & ECORE_EXE_PIPE_READ) - E_NO_ERRNO(result, close(readPipe[1]), ok); - if (flags & ECORE_EXE_PIPE_WRITE) - E_NO_ERRNO(result, close(writePipe[0]), - ok); - E_NO_ERRNO(result, close(statusPipe[1]), ok); - - _exit(-1); - } else { /* parent */ - - /* Close the unused pipes. */ - E_NO_ERRNO(result, close(statusPipe[1]), ok); - - /* FIXME: after having a good look at the current e fd - * handling, investigate fcntl(dataPipe[x], F_SETSIG, ...) */ - /* FIXME: above F_SETSIG etc. - this is async SIGIO based IO - * which is also linux specific so we probably don't want to - * do this as long as select() is working fine. the only time - * we really want to think of SIGIO async IO is when it all - * actually works basically everywhere and we can turn all - * IO into DMA async activities (i.e. you do a read() then - * the read is complete not on return but when you get a - * SIGIO - the read() just starts the transfer and it is - * completed in the background by DMA (or whatever mechanism - * the kernel choses)) */ - - /* Wait for it to start executing. */ - /* FIXME: this doesn't seem very nice - we sit and block - * waiting on a child process... even though it's just - * the segment between the fork() and the exec) it just feels - * wrong */ - for (;;) { - char buf; - - E_NO_ERRNO(result, - read(statusPipe[0], &buf, 1), - ok); - if (result == 0) { - if (vfork_exec_errno != 0) { - n = vfork_exec_errno; - ERR("Could not start \"%s\"", exe_cmd); - pid = 0; - } - break; - } - } - - /* Close the status pipe. */ - E_NO_ERRNO(result, close(statusPipe[0]), ok); - } - - if (pid) { - /* Setup the exe structure. */ - ECORE_MAGIC_SET(exe, ECORE_MAGIC_EXE); - exe->start_bytes = -1; - exe->end_bytes = -1; - exe->start_lines = -1; - exe->end_lines = -1; - exe->pid = pid; - exe->flags = flags; - exe->data = (void *) data; - if ((exe->cmd = strdup(exe_cmd))) { - if (flags & ECORE_EXE_PIPE_ERROR) { /* Setup the error stuff. */ - E_IF_NO_ERRNO(result, - fcntl(exe-> - child_fd_error, - F_SETFL, - O_NONBLOCK), - ok) { - } - E_IF_NO_ERRNO(result, - fcntl(exe-> - child_fd_error, - F_SETFD, - FD_CLOEXEC), - ok) { - } - E_IF_NO_ERRNO(result, - fcntl(exe-> - child_fd_error_x, - F_SETFD, - FD_CLOEXEC), - ok) { - } - { - exe->error_fd_handler = - ecore_main_fd_handler_add - (exe->child_fd_error, - ECORE_FD_READ, - _ecore_exe_data_error_handler, - exe, NULL, NULL); - if (!exe->error_fd_handler) - ok = 0; - } - } - if (ok && (flags & ECORE_EXE_PIPE_READ)) { /* Setup the read stuff. */ - E_IF_NO_ERRNO(result, - fcntl(exe-> - child_fd_read, - F_SETFL, - O_NONBLOCK), - ok) { - } - E_IF_NO_ERRNO(result, - fcntl(exe-> - child_fd_read, - F_SETFD, - FD_CLOEXEC), - ok) { - } - E_IF_NO_ERRNO(result, - fcntl(exe-> - child_fd_read_x, - F_SETFD, - FD_CLOEXEC), - ok) { - } - { - exe->read_fd_handler = - ecore_main_fd_handler_add - (exe->child_fd_read, - ECORE_FD_READ, - _ecore_exe_data_read_handler, - exe, NULL, NULL); - if (!exe->read_fd_handler) - ok = 0; - } - } - if (ok && (flags & ECORE_EXE_PIPE_WRITE)) { /* Setup the write stuff. */ - E_IF_NO_ERRNO(result, - fcntl(exe-> - child_fd_write, - F_SETFL, - O_NONBLOCK), - ok) { - } - E_IF_NO_ERRNO(result, - fcntl(exe-> - child_fd_write, - F_SETFD, - FD_CLOEXEC), - ok) { - } - E_IF_NO_ERRNO(result, - fcntl(exe-> - child_fd_write_x, - F_SETFD, - FD_CLOEXEC), - ok) { - } - { - exe->write_fd_handler = - ecore_main_fd_handler_add - (exe->child_fd_write, - ECORE_FD_WRITE, - _ecore_exe_data_write_handler, - exe, NULL, NULL); - if (exe->write_fd_handler) - ecore_main_fd_handler_active_set(exe->write_fd_handler, 0); /* Nothing to write to start with. */ - else - ok = 0; - } - } - - exes = - (Ecore_Exe *) - eina_inlist_append(EINA_INLIST_GET - (exes), - EINA_INLIST_GET - (exe)); - n = 0; - } else - ok = 0; - } else - ok = 0; - } - - if (!ok) { /* Something went wrong, so pull down everything. */ - if (exe->pid) - ecore_exe_terminate(exe); - IF_FN_DEL(ecore_exe_free, exe); - } else { - Ecore_Exe_Event_Add *e; - - e = _ecore_exe_event_add_new(); - e->exe = exe; - if (e) /* Send the event. */ - ecore_event_add(ECORE_EXE_EVENT_ADD, e, - _ecore_exe_event_add_free, NULL); - /* INF("Running as %d for %s.\n", exe->pid, exe->cmd); */ - } - - errno = n; - return exe; -} - -/** - * Defines a function to be called before really freeing the handle data. - * - * This might be useful for language bindings such as Python and Perl - * that need to deallocate wrappers associated with this handle. - * - * This handle should never be modified by this call. It should be - * considered informative only. All getters are valid when the given - * function is called back. - * - * @param exe The child process to attach the pre_free function. - * @param func The function to call before @a exe is freed. - */ -EAPI void -ecore_exe_callback_pre_free_set(Ecore_Exe * exe, Ecore_Exe_Cb func) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_callback_pre_free_set"); - return; - } - exe->pre_free_cb = func; -} - -/** - * Sends data to the given child process which it receives on stdin. - * - * This function writes to a child processes standard in, with unlimited - * buffering. This call will never block. It may fail if the system runs out - * of memory. - * - * @param exe The child process to send to - * @param data The data to send - * @param size The size of the data to send, in bytes - * @return EINA_TRUE if successful, EINA_FALSE on failure. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI Eina_Bool ecore_exe_send(Ecore_Exe * exe, const void *data, int size) -{ - void *buf; - - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_send"); - return EINA_FALSE; - } - - if (exe->close_stdin) { - ERR("Ecore_Exe %p stdin is closed! Cannot send %d bytes from %p", exe, size, data); - return EINA_FALSE; - } - - if (exe->child_fd_write == -1) { - ERR("Ecore_Exe %p created without ECORE_EXE_PIPE_WRITE! " - "Cannot send %d bytes from %p", exe, size, data); - return EINA_FALSE; - } - - buf = realloc(exe->write_data_buf, exe->write_data_size + size); - if (!buf) - return EINA_FALSE; - - exe->write_data_buf = buf; - memcpy((char *) exe->write_data_buf + exe->write_data_size, data, - size); - exe->write_data_size += size; - - if (exe->write_fd_handler) - ecore_main_fd_handler_active_set(exe->write_fd_handler, - ECORE_FD_WRITE); - - return EINA_TRUE; -} - -/** - * The stdin of the given child process will close when the write buffer is empty. - * - * @param exe The child process - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI void ecore_exe_close_stdin(Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_close_stdin"); - return; - } - exe->close_stdin = 1; -} - -/** - * Sets the auto pipe limits for the given process handle. On Windows - * this function does nothing. - * - * @param exe The given process handle. - * @param start_bytes limit of bytes at start of output to buffer. - * @param end_bytes limit of bytes at end of output to buffer. - * @param start_lines limit of lines at start of output to buffer. - * @param end_lines limit of lines at end of output to buffer. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI void -ecore_exe_auto_limits_set(Ecore_Exe * exe, int start_bytes, int end_bytes, - int start_lines, int end_lines) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_auto_limits_set"); - return; - } - /* FIXME: sanitize the input. */ - exe->start_bytes = start_bytes; - exe->end_bytes = end_bytes; - exe->start_lines = start_lines; - exe->end_lines = end_lines; - - /* FIXME: get this can of worms working. - * - * capture stderr & stdout internally - * - * raster and onefang keep moving the goal posts on this one. It started out as - * "show users the error output if an exe fails" and is rapidly approaching - * "alternative method of getting the data, poll vs event driven". Some serious - * thinking needs to be applied to this. Do we really want to go that far? If - * so, we should change the names. The basic design will probably remain the - * same which ever way we go. The constant goal post moving is probably due to - * generic design methods leading to feature creep as we inspired each other to - * more generic designs. It does seem like the closer we get to poll driven, - * the more issues and corner cases there are. - * - * Instead of doing the usual register an event handler thing, we are ecore_exe, - * we can take some short cuts. Don't send the events, just leave the exe buffers - * as is until the user asks for them, then return the event. - * - * start = 0, end = 0; clogged arteries get flushed, everything is ignored. - * start = -1, end = -1; clogged arteries get transferred to internal buffers. Actually, either == -1 means buffer everything. - * start = X, end = 0; buffer first X out of clogged arteries, flush and ignore rest. - * start = 0, end = X; circular buffer X - * start = X, end = Y; buffer first X out of clogged arteries, circular buffer Y from beginning. - * - * bytes vs lines, which ever one reaches the limit first. - * Before we go beyond the start+end limit, leave the end buffer empty, and store both in the start buffer, coz they overlap. - * After we pass the the start+end limit, insert "\n...\n" at the end of the start buffer, copy the rest to the end buffer, then store in the end buffer. - * - * Other issues - - * Spank programmer for polling data if polling is not turned on. - * Spank programmer for setting up event callbacks if polling is turned on. - * Spank programmer for freeing the event data if it came from the event system, as that autofrees. - * Spank the programmer if they try to set the limits bigger than what has been gathered & ignored already, coz they just lost data. - * Spank onefang and raster for opening this can of worms. - * Should we have separate out/err limits? - * Should we remove from the internal buffer the data that was delivered already? - * If so, what to do about limits, start, and end? They could loose their meaning. - */ -} - -/** - * Gets the auto pipe data for the given process handle - * - * @param exe The given process handle. - * @param flags Is this a ECORE_EXE_PIPE_READ or ECORE_EXE_PIPE_ERROR? - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI Ecore_Exe_Event_Data *ecore_exe_event_data_get(Ecore_Exe * exe, - Ecore_Exe_Flags flags) -{ - Ecore_Exe_Event_Data *e = NULL; - int is_buffered = 0; - unsigned char *inbuf; - int inbuf_num; - - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_event_data_get"); - return NULL; - } - - /* Sort out what sort of event we are. */ - if (flags & ECORE_EXE_PIPE_READ) { - flags = ECORE_EXE_PIPE_READ; - if (exe->flags & ECORE_EXE_PIPE_READ_LINE_BUFFERED) - is_buffered = 1; - } else { - flags = ECORE_EXE_PIPE_ERROR; - if (exe->flags & ECORE_EXE_PIPE_ERROR_LINE_BUFFERED) - is_buffered = 1; - } - - /* Get the data. */ - if (flags & ECORE_EXE_PIPE_READ) { - inbuf = exe->read_data_buf; - inbuf_num = exe->read_data_size; - exe->read_data_buf = NULL; - exe->read_data_size = 0; - } else { - inbuf = exe->error_data_buf; - inbuf_num = exe->error_data_size; - exe->error_data_buf = NULL; - exe->error_data_size = 0; - } - - e = calloc(1, sizeof(Ecore_Exe_Event_Data)); - if (e) { - e->exe = exe; - e->data = inbuf; - e->size = inbuf_num; - - if (is_buffered) { /* Deal with line buffering. */ - int max = 0; - int count = 0; - int i; - int last = 0; - char *c; - - c = (char *) inbuf; - for (i = 0; i < inbuf_num; i++) { /* Find the lines. */ - if (inbuf[i] == '\n') { - if (count >= max) { - /* In testing, the lines seem to arrive in batches of 500 to 1000 lines at most, roughly speaking. */ - max += 10; /* FIXME: Maybe keep track of the largest number of lines ever sent, and add half that many instead of 10. */ - e->lines = realloc(e->lines, sizeof(Ecore_Exe_Event_Data_Line) * (max + 1)); /* Allow room for the NULL termination. */ - } - /* raster said to leave the line endings as line endings, however - - * This is line buffered mode, we are not dealing with binary here, but lines. - * If we are not dealing with binary, we must be dealing with ASCII, unicode, or some other text format. - * Thus the user is most likely gonna deal with this text as strings. - * Thus the user is most likely gonna pass this data to str functions. - * rasters way - the endings are always gonna be '\n'; onefangs way - they will always be '\0' - * We are handing them the string length as a convenience. - * Thus if they really want it in raw format, they can e->lines[i].line[e->lines[i].size - 1] = '\n'; easily enough. - * In the default case, we can do this conversion quicker than the user can, as we already have the index and pointer. - * Let's make it easy on them to use these as standard C strings. - * - * onefang is proud to announce that he has just set a new personal record for the - * most over documentation of a simple assignment statement. B-) - */ - inbuf[i] = '\0'; - e->lines[count].line = c; - e->lines[count].size = i - last; - last = i + 1; - c = (char *) &inbuf[last]; - count++; - } - } - if (count == 0) { /* No lines to send, cancel the event. */ - _ecore_exe_event_exe_data_free(NULL, e); - e = NULL; - } else { /* NULL terminate the array, so that people know where the end is. */ - - e->lines[count].line = NULL; - e->lines[count].size = 0; - } - if (i > last) { /* Partial line left over, save it for next time. */ - if (e) - e->size = last; - if (flags & ECORE_EXE_PIPE_READ) { - exe->read_data_size = i - last; - exe->read_data_buf = - malloc(exe->read_data_size); - memcpy(exe->read_data_buf, c, - exe->read_data_size); - } else { - exe->error_data_size = i - last; - exe->error_data_buf = - malloc(exe->error_data_size); - memcpy(exe->error_data_buf, c, - exe->error_data_size); - } - } - } - } - - return e; -} - -/** - * Sets the string tag for the given process handle - * - * @param exe The given process handle. - * @param tag The string tag to set on the process handle. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI void ecore_exe_tag_set(Ecore_Exe * exe, const char *tag) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_tag_set"); - return; - } - IF_FREE(exe->tag); - if (tag) - exe->tag = strdup(tag); - else - exe->tag = NULL; -} - -/** - * Retrieves the tag attached to the given process handle. There is no need to - * free it as it just returns the internal pointer value. This value is only - * valid as long as the @p exe is valid or until the tag is set to something - * else on this @p exe. - * - * @param exe The given process handle. - * @return The string attached to @p exe. It is a handle to existing - * internal string and should not be modified, use - * ecore_exe_tag_set() to change it. It might be @c NULL. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI const char *ecore_exe_tag_get(const Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_tag_get"); - return NULL; - } - return exe->tag; -} - -/** - * Frees the given process handle. - * - * Note that the process that the handle represents is unaffected by this - * function. - * - * @param exe The given process handle. - * @return The data attached to the handle when @ref ecore_exe_run was - * called. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI void *ecore_exe_free(Ecore_Exe * exe) -{ - void *data; - int ok = 0; - int result; - - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_free"); - return NULL; - } - - data = exe->data; - - if (exe->pre_free_cb) - exe->pre_free_cb(data, exe); - - if (exe->doomsday_clock) { - struct _ecore_exe_dead_exe *dead; - - ecore_timer_del(exe->doomsday_clock); - exe->doomsday_clock = NULL; - dead = exe->doomsday_clock_dead; - if (dead) { - IF_FREE(dead->cmd); - free(dead); - exe->doomsday_clock_dead = NULL; - } - } - IF_FN_DEL(ecore_main_fd_handler_del, exe->write_fd_handler); - IF_FN_DEL(ecore_main_fd_handler_del, exe->read_fd_handler); - IF_FN_DEL(ecore_main_fd_handler_del, exe->error_fd_handler); - if (exe->child_fd_write_x != -1) - E_NO_ERRNO(result, close(exe->child_fd_write_x), ok); - if (exe->child_fd_read_x != -1) - E_NO_ERRNO(result, close(exe->child_fd_read_x), ok); - if (exe->child_fd_error_x != -1) - E_NO_ERRNO(result, close(exe->child_fd_error_x), ok); - if (exe->child_fd_write != -1) - E_NO_ERRNO(result, close(exe->child_fd_write), ok); - if (exe->child_fd_read != -1) - E_NO_ERRNO(result, close(exe->child_fd_read), ok); - if (exe->child_fd_error != -1) - E_NO_ERRNO(result, close(exe->child_fd_error), ok); - IF_FREE(exe->write_data_buf); - IF_FREE(exe->read_data_buf); - IF_FREE(exe->error_data_buf); - IF_FREE(exe->cmd); - - exes = - (Ecore_Exe *) eina_inlist_remove(EINA_INLIST_GET(exes), - EINA_INLIST_GET(exe)); - ECORE_MAGIC_SET(exe, ECORE_MAGIC_NONE); - IF_FREE(exe->tag); - free(exe); - return data; -} - -/** - * Frees the given event data. - * - * @param e The given event data. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI void ecore_exe_event_data_free(Ecore_Exe_Event_Data * e) -{ - if (!e) - return; - IF_FREE(e->lines); - IF_FREE(e->data); - free(e); -} - -/** - * Retrieves the process ID of the given spawned process. - * @param exe Handle to the given spawned process. - * @return The process ID on success. @c -1 otherwise. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI pid_t ecore_exe_pid_get(const Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_pid_get"); - return -1; - } - return exe->pid; -} - -/** - * Retrieves the command of the given spawned process. - * @param exe Handle to the given spawned process. - * @return The command on success. NULL otherwise. This string is the - * pointer to the internal value and must not be modified in - * any way. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI const char *ecore_exe_cmd_get(const Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_cmd_get"); - return NULL; - } - return exe->cmd; -} - -/** - * Retrieves the data attached to the given process handle. - * @param exe The given process handle. - * @return The data pointer attached to @p exe Given to - * ecore_exe_run() or ecore_exe_pipe_run() - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI void *ecore_exe_data_get(const Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_data_get"); - return NULL; - } - return exe->data; -} - -/** - * Retrieves the flags attached to the given process handle. - * @param exe The given process handle. - * @return The flags attached to @p exe. - * @ingroup Ecore_Exe_Basic_Group - */ -EAPI Ecore_Exe_Flags ecore_exe_flags_get(const Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_data_get"); - return 0; - } - return exe->flags; -} - -/** - * @defgroup Ecore_Exe_Signal_Group Spawned Process Signal Functions - * - * Functions that send signals to spawned processes. - */ - -/** - * Pauses the given process by sending it a @c SIGSTOP signal. - * @param exe Process handle to the given process. - * @ingroup Ecore_Exe_Signal_Group - */ -EAPI void ecore_exe_pause(Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_pause"); - return; - } - kill(exe->pid, SIGSTOP); -} - -/** - * Continues the given paused process by sending it a @c SIGCONT signal. - * @param exe Process handle to the given process. - * @ingroup Ecore_Exe_Signal_Group - */ -EAPI void ecore_exe_continue(Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_continue"); - return; - } - kill(exe->pid, SIGCONT); -} - -/** - * Sends the given spawned process a interrupt (@c SIGINT) signal. - * @param exe Process handle to the given process. - * @ingroup Ecore_Exe_Signal_Group - */ -EAPI void ecore_exe_interrupt(Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_interrupt"); - return; - } - _ecore_exe_dead_attach(exe); - kill(exe->pid, SIGINT); -} - -/** - * Sends the given spawned process a quit (@c SIGQUIT) signal. - * @param exe Process handle to the given process. - * @ingroup Ecore_Exe_Signal_Group - */ -EAPI void ecore_exe_quit(Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_quit"); - return; - } - _ecore_exe_dead_attach(exe); - kill(exe->pid, SIGQUIT); -} - -/** - * Sends the given spawned process a terminate (@c SIGTERM) signal. - * @param exe Process handle to the given process. - * @ingroup Ecore_Exe_Signal_Group - */ -EAPI void ecore_exe_terminate(Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_terminate"); - return; - } - _ecore_exe_dead_attach(exe); - INF("Sending TERM signal to %s (%d).", exe->cmd, exe->pid); - kill(exe->pid, SIGTERM); -} - -/** - * Kills the given spawned process by sending it a @c SIGKILL signal. - * @param exe Process handle to the given process. - * @ingroup Ecore_Exe_Signal_Group - */ -EAPI void ecore_exe_kill(Ecore_Exe * exe) -{ - struct _ecore_exe_dead_exe *dead; - - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_kill"); - return; - } - - dead = calloc(1, sizeof(struct _ecore_exe_dead_exe)); - if (dead) { - dead->pid = exe->pid; - dead->cmd = strdup(exe->cmd); - IF_FN_DEL(ecore_timer_del, exe->doomsday_clock); - exe->doomsday_clock = - ecore_timer_add(10.0, - _ecore_exe_make_sure_its_really_dead, - dead); - } - - INF("Sending KILL signal to %s (%d).", exe->cmd, exe->pid); - kill(exe->pid, SIGKILL); -} - -/** - * Sends a @c SIGUSR signal to the given spawned process. - * @param exe Process handle to the given process. - * @param num The number user signal to send. Must be either 1 or 2, or - * the signal will be ignored. - * @ingroup Ecore_Exe_Signal_Group - */ -EAPI void ecore_exe_signal(Ecore_Exe * exe, int num) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_signal"); - return; - } - if (num == 1) - kill(exe->pid, SIGUSR1); - else if (num == 2) - kill(exe->pid, SIGUSR2); -} - -/** - * Sends a @c SIGHUP signal to the given spawned process. - * @param exe Process handle to the given process. - * @ingroup Ecore_Exe_Signal_Group - */ -EAPI void ecore_exe_hup(Ecore_Exe * exe) -{ - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_hup"); - return; - } - kill(exe->pid, SIGHUP); -} - -static Ecore_Exe *_ecore_exe_is_it_alive(pid_t pid) -{ - Ecore_Exe *exe = NULL; - - /* FIXME: There is no nice, safe, OS independent way to tell if a - * particular PID is still alive. I have written code to do so - * for my urunlevel busybox applet (http://urunlevel.sourceforge.net/), - * but it's for linux only, and still not guaranteed. - * - * So for now, we just check that a valid Ecore_Exe structure - * exists for it. Even that is not a guarantee, as the structure - * can be freed without killing the process. - * - * I think we can safely put exe's into two categories, those users - * that care about the life of the exe, and the run and forget type. - * The run and forget type starts up the exe, then free's the - * Ecore_Exe structure straight away. They can never call any of - * the functions that can call this, so we don't worry about them. - * - * Those user's that care about the life of exe's will keep the - * Ecore_Exe structure around, terminate them eventually, or - * register for exit events. For these ones the assumption - * that valid Ecore_Exe struct == live exe is almost valid. - * - * I will probably copy my urunlevel code into here someday. - */ - exe = _ecore_exe_find(pid); - if (exe) { - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - exe = NULL; - } - - return exe; -} - -static Eina_Bool _ecore_exe_make_sure_its_dead(void *data) -{ - struct _ecore_exe_dead_exe *dead; - - dead = data; - if (dead) { - Ecore_Exe *exe = NULL; - - if ((exe = _ecore_exe_is_it_alive(dead->pid))) { - if (dead->cmd) - INF("Sending KILL signal to allegedly dead %s (%d).", dead->cmd, dead->pid); - else - INF("Sending KILL signal to allegedly dead PID %d.", dead->pid); - exe->doomsday_clock = - ecore_timer_add(10.0, - _ecore_exe_make_sure_its_really_dead, - dead); - kill(dead->pid, SIGKILL); - } else { - IF_FREE(dead->cmd); - free(dead); - } - } - return ECORE_CALLBACK_CANCEL; -} - -static Eina_Bool _ecore_exe_make_sure_its_really_dead(void *data) -{ - struct _ecore_exe_dead_exe *dead; - - dead = data; - if (dead) { - Ecore_Exe *exe = NULL; - - if ((exe = _ecore_exe_is_it_alive(dead->pid))) { - ERR("RUN! The zombie wants to eat your brains! And your CPU!"); - if (dead->cmd) - INF("%s (%d) is not really dead.", - dead->cmd, dead->pid); - else - INF("PID %d is not really dead.", - dead->pid); - exe->doomsday_clock = NULL; - } - IF_FREE(dead->cmd); - free(dead); - } - return ECORE_CALLBACK_CANCEL; -} - -void _ecore_exe_init(void) -{ - ECORE_EXE_EVENT_ADD = ecore_event_type_new(); - ECORE_EXE_EVENT_DEL = ecore_event_type_new(); - ECORE_EXE_EVENT_DATA = ecore_event_type_new(); - ECORE_EXE_EVENT_ERROR = ecore_event_type_new(); -} - -void _ecore_exe_shutdown(void) -{ - while (exes) - ecore_exe_free(exes); -} - -Ecore_Exe *_ecore_exe_find(pid_t pid) -{ - Ecore_Exe *exe; - - EINA_INLIST_FOREACH(exes, exe) { - if (exe->pid == pid) - return exe; - } - return NULL; -} - -Ecore_Timer *_ecore_exe_doomsday_clock_get(Ecore_Exe * exe) -{ - return exe->doomsday_clock; -} - -void _ecore_exe_doomsday_clock_set(Ecore_Exe * exe, Ecore_Timer * dc) -{ - exe->doomsday_clock = dc; -} - -static inline void -_ecore_exe_exec_it(const char *exe_cmd, Ecore_Exe_Flags flags) -{ - char use_sh = 1; - char *buf = NULL; - char **args = NULL; - int save_errno = 0; - - /* So what is this doing? - * - * We are trying to avoid wrapping the exe call with /bin/sh -c. - * We conservatively search for certain shell meta characters, - * If we don't find them, we can call the exe directly. - */ - if (!strpbrk(exe_cmd, "|&;<>()$`\\\"'*?#")) { - char *token; - char pre_command = 1; - int num_tokens = 0; - - if (!(buf = strdup(exe_cmd))) - return; - - token = strtok(buf, " \t\n\v"); - while (token) { - if (token[0] == '~') - break; - if (pre_command) { - if (token[0] == '[') - break; - if (strchr(token, '=')) - break; - else - pre_command = 0; - } - num_tokens++; - token = strtok(NULL, " \t\n\v"); - } - IF_FREE(buf); - if ((!token) && (num_tokens)) { - int i = 0; - - if (!(buf = strdup(exe_cmd))) - return; - - token = strtok(buf, " \t\n\v"); - use_sh = 0; - if (! - (args = - (char **) calloc(num_tokens + 1, - sizeof(char *)))) { - IF_FREE(buf); - return; - } - for (i = 0; i < num_tokens; i++) { - if (token) - args[i] = token; - token = strtok(NULL, " \t\n\v"); - } - args[num_tokens] = NULL; - } - } - - if (!(flags & ECORE_EXE_NOT_LEADER)) - setsid(); - if ((flags & ECORE_EXE_USE_SH)) { - errno = 0; - execl("/bin/sh", "/bin/sh", "-c", exe_cmd, (char *) NULL); - } else if (use_sh) { /* We have to use a shell to run this. */ - if (!shell) { /* Find users preferred shell. */ - shell = getenv("SHELL"); - if (!shell) - shell = "/bin/sh"; - } - errno = 0; - execl(shell, shell, "-c", exe_cmd, (char *) NULL); - } else { /* We can run this directly. */ - errno = 0; - execvp(args[0], args); - } - - save_errno = errno; - IF_FREE(buf); - IF_FREE(args); - errno = save_errno; - return; -} - -static Eina_Bool -_ecore_exe_data_generic_handler(void *data, Ecore_Fd_Handler * fd_handler, - Ecore_Exe_Flags flags) -{ - Ecore_Exe *exe; - int child_fd; - int event_type; - - exe = data; - - /* Sort out what sort of handler we are. */ - if (flags & ECORE_EXE_PIPE_READ) { - flags = ECORE_EXE_PIPE_READ; - event_type = ECORE_EXE_EVENT_DATA; - child_fd = exe->child_fd_read; - } else { - flags = ECORE_EXE_PIPE_ERROR; - event_type = ECORE_EXE_EVENT_ERROR; - child_fd = exe->child_fd_error; - } - - if ((fd_handler) - && - (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ))) - { - unsigned char *inbuf; - int inbuf_num; - - /* Get any left over data from last time. */ - if (flags & ECORE_EXE_PIPE_READ) { - inbuf = exe->read_data_buf; - inbuf_num = exe->read_data_size; - exe->read_data_buf = NULL; - exe->read_data_size = 0; - } else { - inbuf = exe->error_data_buf; - inbuf_num = exe->error_data_size; - exe->error_data_buf = NULL; - exe->error_data_size = 0; - } - - for (;;) { - int num, lost_exe; - char buf[READBUFSIZ]; - - lost_exe = 0; - errno = 0; - if ((num = read(child_fd, buf, READBUFSIZ)) < 1) - /* FIXME: SPEED/SIZE TRADE OFF - add a smaller READBUFSIZE - * (currently 64k) to inbuf, use that instead of buf, and - * save ourselves a memcpy(). */ - { - lost_exe = ((errno == EIO) || - (errno == EBADF) || - (errno == EPIPE) || - (errno == EINVAL) - || (errno == ENOSPC)); - if ((errno != EAGAIN) && (errno != EINTR)) - perror - ("_ecore_exe_generic_handler() read problem "); - } - if (num > 0) { /* data got read. */ - inbuf = realloc(inbuf, inbuf_num + num); - memcpy(inbuf + inbuf_num, buf, num); - inbuf_num += num; - } else { /* No more data to read. */ - if (inbuf) { - Ecore_Exe_Event_Data *e; - - /* Stash the data away for later. */ - if (flags & ECORE_EXE_PIPE_READ) { - exe->read_data_buf = inbuf; - exe->read_data_size = - inbuf_num; - } else { - exe->error_data_buf = - inbuf; - exe->error_data_size = - inbuf_num; - } - - if (! - (exe-> - flags & ECORE_EXE_PIPE_AUTO)) - { - e = ecore_exe_event_data_get(exe, flags); - if (e) /* Send the event. */ - ecore_event_add - (event_type, e, - _ecore_exe_event_exe_data_free, - NULL); - } - } - if (lost_exe) { - if (flags & ECORE_EXE_PIPE_READ) { - if (exe->read_data_size) - INF("There are %d bytes left unsent from the dead exe %s.", exe->read_data_size, exe->cmd); - } else { - if (exe->error_data_size) - INF("There are %d bytes left unsent from the dead exe %s.", exe->error_data_size, exe->cmd); - } - /* Thought about this a bit. If the exe has actually - * died, this won't do any harm as it must have died - * recently and the pid has not had a chance to recycle. - * It is also a paranoid catchall, coz the usual ecore_signal - * mechenism should kick in. But let's give it a good - * kick in the head anyway. - */ - ecore_exe_terminate(exe); - } - break; - } - } - } - - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_ecore_exe_data_error_handler(void *data, Ecore_Fd_Handler * fd_handler) -{ - return _ecore_exe_data_generic_handler(data, fd_handler, - ECORE_EXE_PIPE_ERROR); -} - -static Eina_Bool -_ecore_exe_data_read_handler(void *data, Ecore_Fd_Handler * fd_handler) -{ - return _ecore_exe_data_generic_handler(data, fd_handler, - ECORE_EXE_PIPE_READ); -} - -static Eina_Bool -_ecore_exe_data_write_handler(void *data, - Ecore_Fd_Handler * fd_handler __UNUSED__) -{ - Ecore_Exe *exe; - - exe = data; - if ((exe->write_fd_handler) && - (ecore_main_fd_handler_active_get - (exe->write_fd_handler, ECORE_FD_WRITE))) - _ecore_exe_flush(exe); - - /* If we have sent all there is to send, and we need to close the pipe, then close it. */ - if ((exe->close_stdin == 1) - && (exe->write_data_size == exe->write_data_offset)) { - int ok = 0; - int result; - - INF("Closing stdin for %s", exe->cmd); - /* if (exe->child_fd_write != -1) E_NO_ERRNO(result, fsync(exe->child_fd_write), ok); This a) doesn't work, and b) isn't needed. */ - IF_FN_DEL(ecore_main_fd_handler_del, - exe->write_fd_handler); - if (exe->child_fd_write != -1) - E_NO_ERRNO(result, close(exe->child_fd_write), ok); - exe->child_fd_write = -1; - IF_FREE(exe->write_data_buf); - } - - return ECORE_CALLBACK_RENEW; -} - -static void _ecore_exe_flush(Ecore_Exe * exe) -{ - int count; - - /* check whether we need to write anything at all. */ - if ((exe->child_fd_write == -1) || (!exe->write_data_buf)) - return; - if (exe->write_data_size == exe->write_data_offset) - return; - - count = write(exe->child_fd_write, - (char *) exe->write_data_buf + - exe->write_data_offset, - exe->write_data_size - exe->write_data_offset); - if (count < 1) { - if (errno == EIO || errno == EBADF || errno == EPIPE || errno == EINVAL || errno == ENOSPC) { /* we lost our exe! */ - ecore_exe_terminate(exe); - if (exe->write_fd_handler) - ecore_main_fd_handler_active_set(exe-> - write_fd_handler, - 0); - } - } else { - exe->write_data_offset += count; - if (exe->write_data_offset >= exe->write_data_size) { /* Nothing left to write, clean up. */ - exe->write_data_size = 0; - exe->write_data_offset = 0; - IF_FREE(exe->write_data_buf); - if (exe->write_fd_handler) - ecore_main_fd_handler_active_set(exe-> - write_fd_handler, - 0); - } - } -} - -static void _ecore_exe_event_exe_data_free(void *data __UNUSED__, void *ev) -{ - Ecore_Exe_Event_Data *e; - - e = ev; - ecore_exe_event_data_free(e); -} - -static Ecore_Exe_Event_Add *_ecore_exe_event_add_new(void) -{ - Ecore_Exe_Event_Add *e; - - e = calloc(1, sizeof(Ecore_Exe_Event_Add)); - return e; -} - -static void _ecore_exe_event_add_free(void *data __UNUSED__, void *ev) -{ - Ecore_Exe_Event_Add *e; - - e = ev; - free(e); -} - -void *_ecore_exe_event_del_new(void) -{ - Ecore_Exe_Event_Del *e; - - e = calloc(1, sizeof(Ecore_Exe_Event_Del)); - return e; -} - -void _ecore_exe_event_del_free(void *data __UNUSED__, void *ev) -{ - Ecore_Exe_Event_Del *e; - - e = ev; - if (e->exe) - ecore_exe_free(e->exe); - free(e); -} - -static void _ecore_exe_dead_attach(Ecore_Exe * exe) -{ - struct _ecore_exe_dead_exe *dead; - - if (exe->doomsday_clock_dead) - return; - dead = calloc(1, sizeof(struct _ecore_exe_dead_exe)); - if (dead) { - dead->pid = exe->pid; - dead->cmd = strdup(exe->cmd); - IF_FN_DEL(ecore_timer_del, exe->doomsday_clock); - exe->doomsday_clock = - ecore_timer_add(10.0, _ecore_exe_make_sure_its_dead, - dead); - exe->doomsday_clock_dead = dead; - } -} diff --git a/tests/suite/ecore/src/lib/ecore_getopt.c b/tests/suite/ecore/src/lib/ecore_getopt.c deleted file mode 100644 index 1fdd233693..0000000000 --- a/tests/suite/ecore/src/lib/ecore_getopt.c +++ /dev/null @@ -1,1786 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#ifdef HAVE_ALLOCA_H -#include -#elif defined __GNUC__ -#define alloca __builtin_alloca -#elif defined _AIX -#define alloca __alloca -#elif defined _MSC_VER -#include -#define alloca _alloca -#else -#include -#ifdef __cplusplus -extern "C" -#endif -void *alloca(size_t); -#endif - -#include -#include -#include -#include - -#ifdef ENABLE_NLS -#include -#else -#define gettext(x) (x) -#define dgettext(domain, x) (x) -#endif - -#define _(x) dgettext("ecore", x) - -#ifdef _WIN32_WCE -#include -#endif - -#include "Ecore.h" -#include "Ecore_Getopt.h" - -static const char *prog = NULL; -static char **argv = NULL; -static int argc = 0; -static int cols = 80; -static int helpcol = 80 / 3; - -static void -_ecore_getopt_help_print_replace_program(FILE * fp, - const Ecore_Getopt * - parser __UNUSED__, - const char *text) -{ - do { - const char *d = strchr(text, '%'); - - if (!d) { - fputs(text, fp); - break; - } - - if (fwrite(text, 1, d - text, fp) != (size_t) (d - text)) - return; - d++; - if (strncmp(d, "prog", sizeof("prog") - 1) == 0) { - fputs(prog ? prog : "???", fp); - d += sizeof("prog") - 1; - } else { - if (d[0] == '%') - d++; - fputc('%', fp); - } - - text = d; - } - while (text[0] != '\0'); - - fputc('\n', fp); -} - -static void _ecore_getopt_version(FILE * fp, const Ecore_Getopt * parser) -{ - fputs(_("Version:"), fp); - fputc(' ', fp); - _ecore_getopt_help_print_replace_program(fp, parser, - parser->version); -} - -static void -_ecore_getopt_help_usage(FILE * fp, const Ecore_Getopt * parser) -{ - fputs(_("Usage:"), fp); - fputc(' ', fp); - - if (!parser->usage) { - fprintf(fp, _("%s [options]\n"), prog); - return; - } - - _ecore_getopt_help_print_replace_program(fp, parser, - gettext(parser->usage)); -} - -static int -_ecore_getopt_help_line(FILE * fp, const int base, const int total, - int used, const char *text, int len) -{ - int linebreak = 0; - do { - /* process line considering spaces (new line and tabs are spaces!) */ - while ((used < total) && (len > 0)) { - const char *space = NULL; - int i, todo; - - todo = total - used; - if (todo > len) - todo = len; - - for (i = 0; i < todo; i++) - if (isspace(text[i])) { - space = text + i; - break; - } - - if (space) { - i = fwrite(text, 1, i, fp); - i++; - text += i; - len -= i; - used += i; - - if (linebreak) { - linebreak = 0; - continue; - } - - if (space[0] == '\n') - break; - else if (space[0] == '\t') { - int c; - - used--; - c = ((used / 8) + 1) * 8; - if (c < total) { - for (; used < c; used++) - fputc(' ', fp); - } else { - text--; - len++; - break; - } - } else if (used < total) - fputc(space[0], fp); - } else { - i = fwrite(text, 1, i, fp); - text += i; - len -= i; - used += i; - } - linebreak = 0; - } - if (len <= 0) - break; - linebreak = 1; - fputc('\n', fp); - for (used = 0; used < base; used++) - fputc(' ', fp); - } - while (1); - - return used; -} - -static void -_ecore_getopt_help_description(FILE * fp, const Ecore_Getopt * parser) -{ - const char *p, *prg, *ver; - int used, prglen, verlen; - - p = gettext(parser->description); - if (!p) - return; - - fputc('\n', fp); - - prg = prog ? prog : "???"; - ver = parser->version ? parser->version : "???"; - - prglen = strlen(prg); - verlen = strlen(ver); - - used = 0; - - do { - const char *d = strchr(p, '%'); - - if (!d) { - _ecore_getopt_help_line(fp, 0, cols, used, p, - strlen(p)); - break; - } - - used = - _ecore_getopt_help_line(fp, 0, cols, used, p, d - p); - d++; - if (strncmp(d, "prog", sizeof("prog") - 1) == 0) { - used = - _ecore_getopt_help_line(fp, 0, cols, used, prg, - prglen); - d += sizeof("prog") - 1; - } else if (strncmp(d, "version", sizeof("version") - 1) == - 0) { - used = - _ecore_getopt_help_line(fp, 0, cols, used, ver, - verlen); - d += sizeof("version") - 1; - } else { - if (d[0] == '%') - d++; - used = - _ecore_getopt_help_line(fp, 0, cols, used, "%", - 1); - } - - p = d; - } - while (p[0] != '\0'); - - fputs("\n\n", fp); -} - -static void _ecore_getopt_copyright(FILE * fp, const Ecore_Getopt * parser) -{ - const char *txt = gettext(parser->copyright); - fputs(_("Copyright:"), fp); - fputs("\n ", fp); - _ecore_getopt_help_line(fp, 3, cols, 3, txt, strlen(txt)); - fputc('\n', fp); -} - -static void _ecore_getopt_license(FILE * fp, const Ecore_Getopt * parser) -{ - const char *txt = gettext(parser->license); - fputs(_("License:"), fp); - fputs("\n ", fp); - _ecore_getopt_help_line(fp, 3, cols, 3, txt, strlen(txt)); - fputc('\n', fp); -} - -static Ecore_Getopt_Desc_Arg_Requirement -_ecore_getopt_desc_arg_requirement(const Ecore_Getopt_Desc * desc) -{ - switch (desc->action) { - case ECORE_GETOPT_ACTION_STORE: - return desc->action_param.store.arg_req; - case ECORE_GETOPT_ACTION_STORE_CONST: - return ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO; - case ECORE_GETOPT_ACTION_STORE_TRUE: - return ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO; - case ECORE_GETOPT_ACTION_STORE_FALSE: - return ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO; - case ECORE_GETOPT_ACTION_CHOICE: - return ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES; - case ECORE_GETOPT_ACTION_APPEND: - return ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES; - case ECORE_GETOPT_ACTION_COUNT: - return ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO; - case ECORE_GETOPT_ACTION_CALLBACK: - return desc->action_param.callback.arg_req; - case ECORE_GETOPT_ACTION_HELP: - return ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO; - case ECORE_GETOPT_ACTION_VERSION: - return ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO; - default: - return ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO; - } -} - -static void -_ecore_getopt_help_desc_setup_metavar(const Ecore_Getopt_Desc * desc, - char *metavar, int *metavarlen, - int maxsize) -{ - if (desc->metavar) { - const char *txt = gettext(desc->metavar); - *metavarlen = strlen(txt); - if (*metavarlen > maxsize - 1) - *metavarlen = maxsize - 1; - - memcpy(metavar, txt, *metavarlen); - metavar[*metavarlen] = '\0'; - } else if (desc->longname) { - int i; - - *metavarlen = strlen(desc->longname); - if (*metavarlen > maxsize - 1) - *metavarlen = maxsize - 1; - - for (i = 0; i < *metavarlen; i++) - metavar[i] = toupper(desc->longname[i]); - metavar[i] = '\0'; - } -} - -static int -_ecore_getopt_help_desc_show_arg(FILE * fp, - Ecore_Getopt_Desc_Arg_Requirement - requirement, const char *metavar, - int metavarlen) -{ - int used; - - if (requirement == ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO) - return 0; - - used = 0; - - if (requirement == ECORE_GETOPT_DESC_ARG_REQUIREMENT_OPTIONAL) { - fputc('[', fp); - used++; - } - - if (requirement != ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO) { - fputc('=', fp); - fputs(metavar, fp); - used += metavarlen + 1; - } - - if (requirement == ECORE_GETOPT_DESC_ARG_REQUIREMENT_OPTIONAL) { - fputc(']', fp); - used++; - } - - return used; -} - -static int -_ecore_getopt_help_desc_store(FILE * fp, const int base, const int total, - int used, const Ecore_Getopt_Desc * desc) -{ - const Ecore_Getopt_Desc_Store *store = &desc->action_param.store; - char buf[64]; - const char *str; - size_t len; - - fputc('\n', fp); - for (used = 0; used < base; used++) - fputc(' ', fp); - - switch (store->type) { - case ECORE_GETOPT_TYPE_STR: - str = "STR"; - len = sizeof("STR") - 1; - break; - case ECORE_GETOPT_TYPE_BOOL: - str = "BOOL"; - len = sizeof("BOOL") - 1; - break; - case ECORE_GETOPT_TYPE_SHORT: - str = "SHORT"; - len = sizeof("SHORT") - 1; - break; - case ECORE_GETOPT_TYPE_INT: - str = "INT"; - len = sizeof("INT") - 1; - break; - case ECORE_GETOPT_TYPE_LONG: - str = "LONG"; - len = sizeof("LONG") - 1; - break; - case ECORE_GETOPT_TYPE_USHORT: - str = "USHORT"; - len = sizeof("USHORT") - 1; - break; - case ECORE_GETOPT_TYPE_UINT: - str = "UINT"; - len = sizeof("UINT") - 1; - break; - case ECORE_GETOPT_TYPE_ULONG: - str = "ULONG"; - len = sizeof("ULONG") - 1; - break; - case ECORE_GETOPT_TYPE_DOUBLE: - str = "DOUBLE"; - len = sizeof("DOUBLE") - 1; - break; - default: - str = "???"; - len = sizeof("???") - 1; - } - - used = _ecore_getopt_help_line - (fp, base, total, used, _("Type: "), strlen(_("Type: "))); - used = _ecore_getopt_help_line(fp, base, total, used, str, len); - - if (store->arg_req == ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES) - goto end; - - used = _ecore_getopt_help_line - (fp, base, total, used, ". ", sizeof(". ") - 1); - - switch (store->type) { - case ECORE_GETOPT_TYPE_STR: - str = store->def.strv; - len = str ? strlen(str) : 0; - break; - case ECORE_GETOPT_TYPE_BOOL: - str = store->def.boolv ? "true" : "false"; - len = strlen(str); - break; - case ECORE_GETOPT_TYPE_SHORT: - str = buf; - len = snprintf(buf, sizeof(buf), "%hd", store->def.shortv); - if (len > sizeof(buf) - 1) - len = sizeof(buf) - 1; - break; - case ECORE_GETOPT_TYPE_INT: - str = buf; - len = snprintf(buf, sizeof(buf), "%d", store->def.intv); - if (len > sizeof(buf) - 1) - len = sizeof(buf) - 1; - break; - case ECORE_GETOPT_TYPE_LONG: - str = buf; - len = snprintf(buf, sizeof(buf), "%ld", store->def.longv); - if (len > sizeof(buf) - 1) - len = sizeof(buf) - 1; - break; - case ECORE_GETOPT_TYPE_USHORT: - str = buf; - len = - snprintf(buf, sizeof(buf), "%hu", store->def.ushortv); - if (len > sizeof(buf) - 1) - len = sizeof(buf) - 1; - break; - case ECORE_GETOPT_TYPE_UINT: - str = buf; - len = snprintf(buf, sizeof(buf), "%u", store->def.uintv); - if (len > sizeof(buf) - 1) - len = sizeof(buf) - 1; - break; - case ECORE_GETOPT_TYPE_ULONG: - str = buf; - len = snprintf(buf, sizeof(buf), "%lu", store->def.ulongv); - if (len > sizeof(buf) - 1) - len = sizeof(buf) - 1; - break; - case ECORE_GETOPT_TYPE_DOUBLE: - str = buf; - len = snprintf(buf, sizeof(buf), "%f", store->def.doublev); - if (len > sizeof(buf) - 1) - len = sizeof(buf) - 1; - break; - default: - str = "???"; - len = sizeof("???") - 1; - } - - used = _ecore_getopt_help_line - (fp, base, total, used, _("Default: "), - strlen(_("Default: "))); - used = _ecore_getopt_help_line(fp, base, total, used, str, len); - - end: - return _ecore_getopt_help_line(fp, base, total, used, ".", 1); -} - -static int -_ecore_getopt_help_desc_choices(FILE * fp, const int base, const int total, - int used, const Ecore_Getopt_Desc * desc) -{ - const char *const *itr; - const char sep[] = ", "; - const int seplen = sizeof(sep) - 1; - - if (used > 0) { - fputc('\n', fp); - used = 0; - } - for (; used < base; used++) - fputc(' ', fp); - - used = _ecore_getopt_help_line - (fp, base, total, used, _("Choices: "), - strlen(_("Choices: "))); - - for (itr = desc->action_param.choices; *itr; itr++) { - used = _ecore_getopt_help_line - (fp, base, total, used, *itr, strlen(*itr)); - if (itr[1]) - used = - _ecore_getopt_help_line(fp, base, total, used, - sep, seplen); - } - - return _ecore_getopt_help_line(fp, base, total, used, ".", 1); -} - -static void -_ecore_getopt_help_desc(FILE * fp, const Ecore_Getopt_Desc * desc) -{ - Ecore_Getopt_Desc_Arg_Requirement arg_req; - char metavar[32] = "ARG"; - int metavarlen = 3; - int used; - - arg_req = _ecore_getopt_desc_arg_requirement(desc); - if (arg_req != ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO) - _ecore_getopt_help_desc_setup_metavar - (desc, metavar, &metavarlen, sizeof(metavar)); - - fputs(" ", fp); - used = 2; - - if (desc->shortname) { - fputc('-', fp); - fputc(desc->shortname, fp); - used += 2; - used += _ecore_getopt_help_desc_show_arg - (fp, arg_req, metavar, metavarlen); - } - - if (desc->shortname && desc->longname) { - fputs(", ", fp); - used += 2; - } - - if (desc->longname) { - int namelen = strlen(desc->longname); - - fputs("--", fp); - fputs(desc->longname, fp); - used += 2 + namelen; - used += _ecore_getopt_help_desc_show_arg - (fp, arg_req, metavar, metavarlen); - } - - if (!desc->help) - goto end; - - if (used + 3 >= helpcol) { - fputc('\n', fp); - used = 0; - } - - for (; used < helpcol; used++) - fputc(' ', fp); - - used = _ecore_getopt_help_line - (fp, helpcol, cols, used, desc->help, strlen(desc->help)); - - switch (desc->action) { - case ECORE_GETOPT_ACTION_STORE: - _ecore_getopt_help_desc_store(fp, helpcol, cols, used, - desc); - break; - case ECORE_GETOPT_ACTION_CHOICE: - _ecore_getopt_help_desc_choices(fp, helpcol, cols, used, - desc); - break; - default: - break; - } - - end: - fputc('\n', fp); -} - -static unsigned char -_ecore_getopt_desc_is_sentinel(const Ecore_Getopt_Desc * desc) -{ - return (desc->shortname == '\0') && (!desc->longname); -} - -static void -_ecore_getopt_help_options(FILE * fp, const Ecore_Getopt * parser) -{ - const Ecore_Getopt_Desc *desc; - - fputs(_("Options:\n"), fp); - - for (desc = parser->descs; !_ecore_getopt_desc_is_sentinel(desc); - desc++) - _ecore_getopt_help_desc(fp, desc); - - fputc('\n', fp); -} - -/** - * Show nicely formatted help message for the given parser. - * - * Message will be print to stderr. - */ -void ecore_getopt_help(FILE * fp, const Ecore_Getopt * parser) -{ - const char *var; - - if (!parser) - return; - - if (argc < 1) { - ecore_app_args_get(&argc, &argv); - if ((argc > 0) && (argv[0])) - prog = argv[0]; - else - prog = parser->prog; - } - - var = getenv("COLUMNS"); - if (var) { - cols = atoi(var); - if (cols < 20) - cols = 20; - - helpcol = cols / 3; - } - - _ecore_getopt_help_usage(fp, parser); - _ecore_getopt_help_description(fp, parser); - _ecore_getopt_help_options(fp, parser); -} - -static const Ecore_Getopt_Desc *_ecore_getopt_parse_find_long(const - Ecore_Getopt - * parser, - const char - *name) -{ - const Ecore_Getopt_Desc *desc = parser->descs; - const char *p = strchr(name, '='); - int len = 0; - - if (p) - len = p - name; - - for (; !_ecore_getopt_desc_is_sentinel(desc); desc++) { - if (!desc->longname) - continue; - - if (p) { - if ((strncmp(name, desc->longname, len) == 0) && - (desc->longname[len] == '\0')) - return desc; - } else { - if (strcmp(name, desc->longname) == 0) - return desc; - } - } - - return NULL; -} - -static const Ecore_Getopt_Desc *_ecore_getopt_parse_find_short(const - Ecore_Getopt - * parser, - char name) -{ - const Ecore_Getopt_Desc *desc = parser->descs; - for (; !_ecore_getopt_desc_is_sentinel(desc); desc++) - if (name == desc->shortname) - return desc; - return NULL; -} - -static int -_ecore_getopt_parse_find_nonargs_base(const Ecore_Getopt * parser, - int argc, char **argv) -{ - char **nonargs; - int src, dst, used, base; - - nonargs = alloca(sizeof(char *) * argc); - src = 1; - dst = 1; - used = 0; - base = 0; - while (src < argc) { - const Ecore_Getopt_Desc *desc; - Ecore_Getopt_Desc_Arg_Requirement arg_req; - char *arg = argv[src]; - - if (arg[0] != '-') - goto found_nonarg; - - if (arg[1] == '-') { - if (arg[2] == '\0') { /* explicit end of options, "--" */ - base = 1; - break; - } - desc = - _ecore_getopt_parse_find_long(parser, arg + 2); - } else - desc = - _ecore_getopt_parse_find_short(parser, arg[1]); - - if (!desc) { - if (arg[1] == '-') - fprintf(stderr, - _("ERROR: unknown option --%s.\n"), - arg + 2); - else - fprintf(stderr, - _("ERROR: unknown option -%c.\n"), - arg[1]); - if (parser->strict) { - memmove(argv + dst, nonargs, - used * sizeof(char *)); - return -1; - } else - goto found_nonarg; - } - - if (src != dst) - argv[dst] = argv[src]; - src++; - dst++; - - arg_req = _ecore_getopt_desc_arg_requirement(desc); - if (arg_req == ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO) - continue; - - if (strchr(arg, '=')) - continue; - - if ((src >= argc) || (argv[src][0] == '-')) - continue; - - if (src != dst) - argv[dst] = argv[src]; - src++; - dst++; - continue; - - found_nonarg: - nonargs[used] = arg; - used++; - src++; - } - - if (!base) /* '--' not found */ - base = dst; - else { - base = dst; - if (src != dst) - argv[dst] = argv[src]; - dst++; - } - - memmove(argv + dst, nonargs, used * sizeof(char *)); - return base; -} - -static void -_ecore_getopt_desc_print_error(const Ecore_Getopt_Desc * desc, - const char *fmt, ...) -{ - va_list ap; - - fputs(_("ERROR: "), stderr); - - if (desc->shortname) { - fputc('-', stderr); - fputc(desc->shortname, stderr); - } - - if (desc->shortname && desc->longname) - fputs(", ", stderr); - - if (desc->longname) { - fputs("--", stderr); - fputs(desc->longname, stderr); - } - - fputs(": ", stderr); - - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); -} - -static unsigned char -_ecore_getopt_parse_bool(const char *str, unsigned char *v) -{ - if ((strcmp(str, "0") == 0) || - (strcasecmp(str, "f") == 0) || - (strcasecmp(str, "false") == 0) || - (strcasecmp(str, "no") == 0) || (strcasecmp(str, "off") == 0) - ) { - *v = 0; - return 1; - } else if ((strcmp(str, "1") == 0) || - (strcasecmp(str, "t") == 0) || - (strcasecmp(str, "true") == 0) || - (strcasecmp(str, "yes") == 0) || - (strcasecmp(str, "on") == 0) - ) { - *v = 1; - return 1; - } - - return 0; -} - -static unsigned char _ecore_getopt_parse_long(const char *str, long int *v) -{ - char *endptr = NULL; - *v = strtol(str, &endptr, 0); - return endptr > str; -} - -static unsigned char _ecore_getopt_parse_double(const char *str, double *v) -{ - char *endptr = NULL; - *v = strtod(str, &endptr); - return endptr > str; -} - -static unsigned char -_ecore_getopt_parse_store(const Ecore_Getopt * parser __UNUSED__, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * value, const char *arg_val) -{ - const Ecore_Getopt_Desc_Store *store = &desc->action_param.store; - long int v; - double d; - unsigned char b; - - if (!value->ptrp) { - _ecore_getopt_desc_print_error(desc, - _ - ("value has no pointer set.\n")); - return 0; - } - - switch (store->arg_req) { - case ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO: - goto use_optional; - case ECORE_GETOPT_DESC_ARG_REQUIREMENT_OPTIONAL: - if (!arg_val) - goto use_optional; - case ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES: - break; - } - - switch (store->type) { - case ECORE_GETOPT_TYPE_STR: - *value->strp = (char *) arg_val; - return 1; - case ECORE_GETOPT_TYPE_BOOL: - if (_ecore_getopt_parse_bool(arg_val, &b)) { - *value->boolp = b; - return 1; - } else { - _ecore_getopt_desc_print_error - (desc, _("unknown boolean value %s.\n"), - arg_val); - return 0; - } - case ECORE_GETOPT_TYPE_SHORT: - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - *value->shortp = v; - return 1; - case ECORE_GETOPT_TYPE_INT: - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - *value->intp = v; - return 1; - case ECORE_GETOPT_TYPE_LONG: - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - *value->longp = v; - return 1; - case ECORE_GETOPT_TYPE_USHORT: - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - *value->ushortp = v; - return 1; - case ECORE_GETOPT_TYPE_UINT: - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - *value->uintp = v; - return 1; - case ECORE_GETOPT_TYPE_ULONG: - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - *value->ulongp = v; - return 1; - case ECORE_GETOPT_TYPE_DOUBLE: - if (!_ecore_getopt_parse_double(arg_val, &d)) - goto error; - *value->doublep = d; - break; - } - - return 1; - - error: - _ecore_getopt_desc_print_error - (desc, _("invalid number format %s\n"), arg_val); - return 0; - - use_optional: - switch (store->type) { - case ECORE_GETOPT_TYPE_STR: - *value->strp = (char *) store->def.strv; - break; - case ECORE_GETOPT_TYPE_BOOL: - *value->boolp = store->def.boolv; - break; - case ECORE_GETOPT_TYPE_SHORT: - *value->shortp = store->def.shortv; - break; - case ECORE_GETOPT_TYPE_INT: - *value->intp = store->def.intv; - break; - case ECORE_GETOPT_TYPE_LONG: - *value->longp = store->def.longv; - break; - case ECORE_GETOPT_TYPE_USHORT: - *value->ushortp = store->def.ushortv; - break; - case ECORE_GETOPT_TYPE_UINT: - *value->uintp = store->def.uintv; - break; - case ECORE_GETOPT_TYPE_ULONG: - *value->ulongp = store->def.ulongv; - break; - case ECORE_GETOPT_TYPE_DOUBLE: - *value->doublep = store->def.doublev; - break; - } - - return 1; -} - -static unsigned char -_ecore_getopt_parse_store_const(const Ecore_Getopt * parser __UNUSED__, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * val, - const char *arg_val __UNUSED__) -{ - if (!val->ptrp) { - _ecore_getopt_desc_print_error(desc, - _ - ("value has no pointer set.\n")); - return 0; - } - - *val->ptrp = (void *) desc->action_param.store_const; - return 1; -} - -static unsigned char -_ecore_getopt_parse_store_true(const Ecore_Getopt * parser __UNUSED__, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * val, - const char *arg_val __UNUSED__) -{ - if (!val->boolp) { - _ecore_getopt_desc_print_error(desc, - _ - ("value has no pointer set.\n")); - return 0; - } - *val->boolp = 1; - return 1; -} - -static unsigned char -_ecore_getopt_parse_store_false(const Ecore_Getopt * parser __UNUSED__, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * val, - const char *arg_val __UNUSED__) -{ - if (!val->boolp) { - _ecore_getopt_desc_print_error(desc, - _ - ("value has no pointer set.\n")); - return 0; - } - *val->boolp = 0; - return 1; -} - -static unsigned char -_ecore_getopt_parse_choice(const Ecore_Getopt * parser __UNUSED__, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * val, const char *arg_val) -{ - const char *const *pchoice; - - if (!val->strp) { - _ecore_getopt_desc_print_error(desc, - _ - ("value has no pointer set.\n")); - return 0; - } - - pchoice = desc->action_param.choices; - for (; *pchoice; pchoice++) - if (strcmp(*pchoice, arg_val) == 0) { - *val->strp = (char *) *pchoice; - return 1; - } - - _ecore_getopt_desc_print_error - (desc, _("invalid choice \"%s\". Valid values are: "), - arg_val); - - pchoice = desc->action_param.choices; - for (; *pchoice; pchoice++) { - fputs(*pchoice, stderr); - if (pchoice[1]) - fputs(", ", stderr); - } - - fputs(".\n", stderr); - return 0; -} - -static unsigned char -_ecore_getopt_parse_append(const Ecore_Getopt * parser __UNUSED__, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * val, const char *arg_val) -{ - void *data; - long int v; - double d; - unsigned char b; - - if (!arg_val) { - _ecore_getopt_desc_print_error - (desc, _("missing parameter to append.\n")); - return 0; - } - - if (!val->listp) { - _ecore_getopt_desc_print_error(desc, - _ - ("value has no pointer set.\n")); - return 0; - } - - switch (desc->action_param.append_type) { - case ECORE_GETOPT_TYPE_STR: - data = strdup(arg_val); - break; - case ECORE_GETOPT_TYPE_BOOL: - { - if (_ecore_getopt_parse_bool(arg_val, &b)) { - data = malloc(sizeof(unsigned char)); - if (data) - *(unsigned char *) data = b; - } else { - _ecore_getopt_desc_print_error - (desc, - _("unknown boolean value %s.\n"), - arg_val); - return 0; - } - } - break; - case ECORE_GETOPT_TYPE_SHORT: - { - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - data = malloc(sizeof(short)); - if (data) - *(short *) data = (short) v; - } - break; - case ECORE_GETOPT_TYPE_INT: - { - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - data = malloc(sizeof(int)); - if (data) - *(int *) data = (int) v; - } - break; - case ECORE_GETOPT_TYPE_LONG: - { - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - data = malloc(sizeof(long)); - if (data) - *(long *) data = v; - } - break; - case ECORE_GETOPT_TYPE_USHORT: - { - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - data = malloc(sizeof(unsigned short)); - if (data) - *(unsigned short *) data = - (unsigned short) v; - } - break; - case ECORE_GETOPT_TYPE_UINT: - { - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - data = malloc(sizeof(unsigned int)); - if (data) - *(unsigned int *) data = (unsigned int) v; - } - break; - case ECORE_GETOPT_TYPE_ULONG: - { - if (!_ecore_getopt_parse_long(arg_val, &v)) - goto error; - data = malloc(sizeof(unsigned long)); - if (data) - *(unsigned long *) data = v; - } - break; - case ECORE_GETOPT_TYPE_DOUBLE: - { - if (!_ecore_getopt_parse_double(arg_val, &d)) - goto error; - data = malloc(sizeof(double)); - if (data) - *(double *) data = d; - } - break; - default: - { - _ecore_getopt_desc_print_error(desc, - _ - ("could not parse value.\n")); - return 0; - } - } - - *val->listp = eina_list_append(*val->listp, data); - return 1; - - error: - _ecore_getopt_desc_print_error - (desc, _("invalid number format %s\n"), arg_val); - return 0; -} - -static unsigned char -_ecore_getopt_parse_count(const Ecore_Getopt * parser __UNUSED__, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * val, - const char *arg_val __UNUSED__) -{ - if (!val->intp) { - _ecore_getopt_desc_print_error(desc, - _ - ("value has no pointer set.\n")); - return 0; - } - - (*val->intp)++; - return 1; -} - -static unsigned char -_ecore_getopt_parse_callback(const Ecore_Getopt * parser, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * val, const char *arg_val) -{ - const Ecore_Getopt_Desc_Callback *cb = - &desc->action_param.callback; - - switch (cb->arg_req) { - case ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO: - arg_val = cb->def; - break; - case ECORE_GETOPT_DESC_ARG_REQUIREMENT_OPTIONAL: - if (!arg_val) - arg_val = cb->def; - break; - case ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES: - break; - } - - if (cb->arg_req != ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO) { - if ((!arg_val) || (arg_val[0] == '\0')) { - _ecore_getopt_desc_print_error(desc, - _ - ("missing parameter.\n")); - return 0; - } - - if (!val->ptrp) { - _ecore_getopt_desc_print_error - (desc, _("value has no pointer set.\n")); - return 0; - } - } - - if (!cb->func) { - _ecore_getopt_desc_print_error(desc, - _ - ("missing callback function!\n")); - return 0; - } - - return cb->func(parser, desc, arg_val, (void *) cb->data, val); -} - -static unsigned char -_ecore_getopt_parse_help(const Ecore_Getopt * parser, - const Ecore_Getopt_Desc * desc __UNUSED__, - Ecore_Getopt_Value * val, - const char *arg_val __UNUSED__) -{ - if (val->boolp) - (*val->boolp) = 1; - ecore_getopt_help(stdout, parser); - return 1; -} - -static unsigned char -_ecore_getopt_parse_version(const Ecore_Getopt * parser, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * val, - const char *arg_val __UNUSED__) -{ - if (val->boolp) - (*val->boolp) = 1; - if (!parser->version) { - _ecore_getopt_desc_print_error(desc, - _ - ("no version was defined.\n")); - return 0; - } - _ecore_getopt_version(stdout, parser); - return 1; -} - -static unsigned char -_ecore_getopt_parse_copyright(const Ecore_Getopt * parser, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * val, - const char *arg_val __UNUSED__) -{ - if (val->boolp) - (*val->boolp) = 1; - if (!parser->copyright) { - _ecore_getopt_desc_print_error(desc, - _ - ("no copyright was defined.\n")); - return 0; - } - _ecore_getopt_copyright(stdout, parser); - return 1; -} - -static unsigned char -_ecore_getopt_parse_license(const Ecore_Getopt * parser, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * val, - const char *arg_val __UNUSED__) -{ - if (val->boolp) - (*val->boolp) = 1; - if (!parser->license) { - _ecore_getopt_desc_print_error(desc, - _ - ("no license was defined.\n")); - return 0; - } - _ecore_getopt_license(stdout, parser); - return 1; -} - -static unsigned char -_ecore_getopt_desc_handle(const Ecore_Getopt * parser, - const Ecore_Getopt_Desc * desc, - Ecore_Getopt_Value * value, const char *arg_val) -{ - switch (desc->action) { - case ECORE_GETOPT_ACTION_STORE: - return _ecore_getopt_parse_store(parser, desc, value, - arg_val); - case ECORE_GETOPT_ACTION_STORE_CONST: - return _ecore_getopt_parse_store_const(parser, desc, value, - arg_val); - case ECORE_GETOPT_ACTION_STORE_TRUE: - return _ecore_getopt_parse_store_true(parser, desc, value, - arg_val); - case ECORE_GETOPT_ACTION_STORE_FALSE: - return _ecore_getopt_parse_store_false(parser, desc, value, - arg_val); - case ECORE_GETOPT_ACTION_CHOICE: - return _ecore_getopt_parse_choice(parser, desc, value, - arg_val); - case ECORE_GETOPT_ACTION_APPEND: - return _ecore_getopt_parse_append(parser, desc, value, - arg_val); - case ECORE_GETOPT_ACTION_COUNT: - return _ecore_getopt_parse_count(parser, desc, value, - arg_val); - case ECORE_GETOPT_ACTION_CALLBACK: - return _ecore_getopt_parse_callback(parser, desc, value, - arg_val); - case ECORE_GETOPT_ACTION_HELP: - return _ecore_getopt_parse_help(parser, desc, value, - arg_val); - case ECORE_GETOPT_ACTION_VERSION: - return _ecore_getopt_parse_version(parser, desc, value, - arg_val); - case ECORE_GETOPT_ACTION_COPYRIGHT: - return _ecore_getopt_parse_copyright(parser, desc, value, - arg_val); - case ECORE_GETOPT_ACTION_LICENSE: - return _ecore_getopt_parse_license(parser, desc, value, - arg_val); - default: - return 0; - } -} - -static unsigned char -_ecore_getopt_parse_arg_long(const Ecore_Getopt * parser, - Ecore_Getopt_Value * values, - int argc __UNUSED__, char **argv, int *idx, - int *nonargs, const char *arg) -{ - const Ecore_Getopt_Desc *desc; - Ecore_Getopt_Desc_Arg_Requirement arg_req; - const char *arg_val; - int desc_idx; - Ecore_Getopt_Value *value; - unsigned char ret; - - desc = _ecore_getopt_parse_find_long(parser, arg); - if (!desc) { - fprintf(stderr, - _("ERROR: unknown option --%s, ignored.\n"), arg); - if (parser->strict) - return 0; - - (*idx)++; - return 1; - } - - (*idx)++; - - arg_req = _ecore_getopt_desc_arg_requirement(desc); - if (arg_req != ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO) { - arg_val = strchr(arg, '='); - if (arg_val) - arg_val++; - else { - if ((*idx < *nonargs) && (argv[*idx][0] != '-')) { - arg_val = argv[*idx]; - (*idx)++; - } else - arg_val = NULL; - } - - if (arg_val && arg_val[0] == '\0') - arg_val = NULL; - - if ((!arg_val) - && (arg_req == - ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES)) { - fprintf(stderr, - _ - ("ERROR: option --%s requires an argument!\n"), - arg); - if (parser->strict) - return 0; - return 1; - } - } else - arg_val = NULL; - - desc_idx = desc - parser->descs; - value = values + desc_idx; - ret = _ecore_getopt_desc_handle(parser, desc, value, arg_val); - if ((!ret) && parser->strict) - return 0; - - return 1; -} - -static unsigned char -_ecore_getopt_parse_arg_short(const Ecore_Getopt * parser, - Ecore_Getopt_Value * values, - int argc __UNUSED__, char **argv, int *idx, - int *nonargs, const char *arg) -{ - int run = 1; - while (run && (arg[0] != '\0')) { - int opt = arg[0]; - const Ecore_Getopt_Desc *desc; - Ecore_Getopt_Desc_Arg_Requirement arg_req; - const char *arg_val; - int desc_idx; - Ecore_Getopt_Value *value; - unsigned char ret; - - desc = _ecore_getopt_parse_find_short(parser, arg[0]); - if (!desc) { - fprintf - (stderr, - _("ERROR: unknown option -%c, ignored.\n"), - arg[0]); - if (parser->strict) - return 0; - - arg++; - continue; - } - - arg++; - - arg_req = _ecore_getopt_desc_arg_requirement(desc); - if (arg_req != ECORE_GETOPT_DESC_ARG_REQUIREMENT_NO) { - (*idx)++; - run = 0; - - if (arg[0] == '=') - arg_val = arg + 1; - else if (arg[0] != '\0') - arg_val = arg; - else { - if ((*idx < *nonargs) - && (argv[*idx][0] != '-')) { - arg_val = argv[*idx]; - (*idx)++; - } else - arg_val = NULL; - } - - if (arg_val && arg_val[0] == '\0') - arg_val = NULL; - - if ((!arg_val) && - (arg_req == - ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES)) { - fprintf(stderr, - _ - ("ERROR: option -%c requires an argument!\n"), - opt); - if (parser->strict) - return 0; - return 1; - } - } else - arg_val = NULL; - - desc_idx = desc - parser->descs; - value = values + desc_idx; - ret = - _ecore_getopt_desc_handle(parser, desc, value, - arg_val); - if ((!ret) && parser->strict) - return 0; - } - - if (run) - (*idx)++; - - return 1; -} - -static unsigned char -_ecore_getopt_parse_arg(const Ecore_Getopt * parser, - Ecore_Getopt_Value * values, int argc, char **argv, - int *idx, int *nonargs) -{ - char *arg = argv[*idx]; - - if (arg[0] != '-') { - char **dst, **src, **src_end; - - dst = argv + *idx; - src = dst + 1; - src_end = src + *nonargs - *idx - 1; - - for (; src < src_end; src++, dst++) - *dst = *src; - - *dst = arg; - (*nonargs)--; - return 1; - } - - if (arg[1] == '-') - return _ecore_getopt_parse_arg_long - (parser, values, argc, argv, idx, nonargs, arg + 2); - else - return _ecore_getopt_parse_arg_short - (parser, values, argc, argv, idx, nonargs, arg + 1); -} - -static const Ecore_Getopt_Desc *_ecore_getopt_parse_find_short_other(const - Ecore_Getopt - * - parser, - const - Ecore_Getopt_Desc - * - orig) -{ - const Ecore_Getopt_Desc *desc = parser->descs; - const char c = orig->shortname; - - for (; !_ecore_getopt_desc_is_sentinel(desc); desc++) { - if (desc == orig) - return NULL; - - if (c == desc->shortname) - return desc; - } - - return NULL; -} - -static const Ecore_Getopt_Desc *_ecore_getopt_parse_find_long_other(const - Ecore_Getopt - * - parser, - const - Ecore_Getopt_Desc - * orig) -{ - const Ecore_Getopt_Desc *desc = parser->descs; - const char *name = orig->longname; - - for (; !_ecore_getopt_desc_is_sentinel(desc); desc++) { - if (desc == orig) - return NULL; - - if (desc->longname && (strcmp(name, desc->longname) == 0)) - return desc; - } - - return NULL; -} - -/** - * Check parser for duplicate entries, print them out. - * - * @return 1 if there are duplicates, 0 otherwise. - */ -unsigned char -ecore_getopt_parser_has_duplicates(const Ecore_Getopt * parser) -{ - const Ecore_Getopt_Desc *desc = parser->descs; - for (; !_ecore_getopt_desc_is_sentinel(desc); desc++) { - if (desc->shortname) { - const Ecore_Getopt_Desc *other; - other = - _ecore_getopt_parse_find_short_other(parser, - desc); - if (other) { - _ecore_getopt_desc_print_error - (desc, - "short name -%c already exists.", - desc->shortname); - - if (other->longname) - fprintf(stderr, - " Other is --%s.\n", - other->longname); - else - fputc('\n', stderr); - return 1; - } - } - - if (desc->longname) { - const Ecore_Getopt_Desc *other; - other = - _ecore_getopt_parse_find_long_other(parser, - desc); - if (other) { - _ecore_getopt_desc_print_error - (desc, - "long name --%s already exists.", - desc->longname); - - if (other->shortname) - fprintf(stderr, " Other is -%c.\n", - other->shortname); - else - fputc('\n', stderr); - return 1; - } - } - } - return 0; -} - -static const Ecore_Getopt_Desc *_ecore_getopt_find_help(const Ecore_Getopt - * parser) -{ - const Ecore_Getopt_Desc *desc = parser->descs; - for (; !_ecore_getopt_desc_is_sentinel(desc); desc++) - if (desc->action == ECORE_GETOPT_ACTION_HELP) - return desc; - return NULL; -} - -/** - * Parse command line parameters. - * - * Walks the command line parameters and parse them based on @a parser - * description, doing actions based on @c parser->descs->action, like - * showing help text, license, copyright, storing values in values and - * so on. - * - * It is expected that values is of the same size than @c parser->descs, - * options that do not need a value it will be left untouched. - * - * All values are expected to be initialized before use. Options with - * action @c ECORE_GETOPT_ACTION_STORE and non required arguments - * (others than @c ECORE_GETOPT_DESC_ARG_REQUIREMENT_YES), are expected - * to provide a value in @c def to be used. - * - * The following actions will store 1 on value as a boolean - * (@c value->boolp) if it's not NULL to indicate these actions were executed: - * - @c ECORE_GETOPT_ACTION_HELP - * - @c ECORE_GETOPT_ACTION_VERSION - * - @c ECORE_GETOPT_ACTION_COPYRIGHT - * - @c ECORE_GETOPT_ACTION_LICENSE - * - * Just @c ECORE_GETOPT_ACTION_APPEND will allocate memory and thus - * need to be freed. For consistency between all of appended subtypes, - * @c eina_list->data will contain an allocated memory with the value, - * that is, for @c ECORE_GETOPT_TYPE_STR it will contain a copy of the - * argument, @c ECORE_GETOPT_TYPE_INT a pointer to an allocated - * integer and so on. - * - * If parser is in strict mode (see @c Ecore_Getopt->strict), then any - * error will abort parsing and -1 is returned. Otherwise it will try - * to continue as far as possible. - * - * This function may reorder @a argv elements. - * - * Translation of help strings (description), metavar, usage, license - * and copyright may be translated, standard/global gettext() call - * will be applied on them if ecore was compiled with such support. - * - * @param parser description of how to work. - * @param value where to store values, it is assumed that this is a vector - * of the same size as @c parser->descs. Values should be previously - * initialized. - * @param argc how many elements in @a argv. If not provided it will be - * retrieved with ecore_app_args_get(). - * @param argv command line parameters. - * - * @return index of first non-option parameter or -1 on error. - */ -int -ecore_getopt_parse(const Ecore_Getopt * parser, - Ecore_Getopt_Value * values, int argc, char **argv) -{ - int i, nonargs; - - if (!parser) { - fputs(_("ERROR: no parser provided.\n"), stderr); - return -1; - } - if (!values) { - fputs(_("ERROR: no values provided.\n"), stderr); - return -1; - } - - if ((argc < 1) || (!argv)) - ecore_app_args_get(&argc, &argv); - - if (argc < 1) { - fputs(_("ERROR: no arguments provided.\n"), stderr); - return -1; - } - - if (argv[0]) - prog = argv[0]; - else - prog = parser->prog; - - nonargs = - _ecore_getopt_parse_find_nonargs_base(parser, argc, argv); - if (nonargs < 0) - goto error; - - if (nonargs > argc) - nonargs = argc; - - i = 1; - while (i < nonargs) - if (!_ecore_getopt_parse_arg - (parser, values, argc, argv, &i, &nonargs)) - goto error; - - return nonargs; - - error: - { - const Ecore_Getopt_Desc *help; - fputs(_("ERROR: invalid options found."), stderr); - - help = _ecore_getopt_find_help(parser); - if (!help) - fputc('\n', stderr); - else if (help->longname) - fprintf(stderr, _(" See --%s.\n"), help->longname); - else - fprintf(stderr, _(" See -%c.\n"), help->shortname); - } - - return -1; -} - -/** - * Utility to free list and nodes allocated by @a ECORE_GETOPT_ACTION_APPEND. - * - * @param list pointer to list to be freed. - * @return always NULL, so you can easily make your list head NULL. - */ -Eina_List *ecore_getopt_list_free(Eina_List * list) -{ - void *data; - - EINA_LIST_FREE(list, data) - free(data); - return NULL; -} - -/** - * Helper ecore_getopt callback to parse geometry (x:y:w:h). - * - * Storage must be a pointer to @c Eina_Rectangle and will be used to - * store the four values passed in the given string. - * - * @c callback_data value is ignored, you can safely use @c NULL. - */ -unsigned char -ecore_getopt_callback_geometry_parse(const Ecore_Getopt * - parser __UNUSED__, - const Ecore_Getopt_Desc * - desc __UNUSED__, const char *str, - void *data __UNUSED__, - Ecore_Getopt_Value * storage) -{ - Eina_Rectangle *v = (Eina_Rectangle *) storage->ptrp; - - if (sscanf(str, "%d:%d:%d:%d", &v->x, &v->y, &v->w, &v->h) != 4) { - fprintf(stderr, - _("ERROR: incorrect geometry value '%s'\n"), str); - return 0; - } - - return 1; -} - -/** - * Helper ecore_getopt callback to parse geometry size (WxH). - * - * Storage must be a pointer to @c Eina_Rectangle and will be used to - * store the two values passed in the given string and 0 in the x and y - * fields. - * - * @c callback_data value is ignored, you can safely use @c NULL. - */ -unsigned char -ecore_getopt_callback_size_parse(const Ecore_Getopt * parser __UNUSED__, - const Ecore_Getopt_Desc * desc __UNUSED__, - const char *str, void *data __UNUSED__, - Ecore_Getopt_Value * storage) -{ - Eina_Rectangle *v = (Eina_Rectangle *) storage->ptrp; - - if (sscanf(str, "%dx%d", &v->w, &v->h) != 2) { - fprintf(stderr, _("ERROR: incorrect size value '%s'\n"), - str); - return 0; - } - v->x = 0; - v->y = 0; - - return 1; -} diff --git a/tests/suite/ecore/src/lib/ecore_glib.c b/tests/suite/ecore/src/lib/ecore_glib.c deleted file mode 100644 index d986d221cf..0000000000 --- a/tests/suite/ecore/src/lib/ecore_glib.c +++ /dev/null @@ -1,290 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Ecore.h" -#include "ecore_private.h" - -#ifdef HAVE_GLIB -#include - -static Eina_Bool _ecore_glib_active = EINA_FALSE; -static Ecore_Select_Function _ecore_glib_select_original; -static GCond *_ecore_glib_cond = NULL; -static GPollFD *_ecore_glib_fds = NULL; -static size_t _ecore_glib_fds_size = 0; -static const size_t ECORE_GLIB_FDS_INITIAL = 128; -static const size_t ECORE_GLIB_FDS_STEP = 8; -static const size_t ECORE_GLIB_FDS_MAX_FREE = 256; - -static Eina_Bool _ecore_glib_fds_resize(size_t size) -{ - void *tmp = realloc(_ecore_glib_fds, sizeof(GPollFD) * size); - - if (!tmp) { - ERR("Could not realloc from %zu to %zu buckets.", - _ecore_glib_fds_size, size); - return EINA_FALSE; - } - - _ecore_glib_fds = tmp; - _ecore_glib_fds_size = size; - return EINA_TRUE; -} - -static int -_ecore_glib_context_query(GMainContext * ctx, int priority, int *p_timer) -{ - int reqfds; - - if (_ecore_glib_fds_size == 0) { - if (!_ecore_glib_fds_resize(ECORE_GLIB_FDS_INITIAL)) - return -1; - } - - while (1) { - size_t size; - - reqfds = g_main_context_query - (ctx, priority, p_timer, _ecore_glib_fds, - _ecore_glib_fds_size); - if (reqfds <= (int) _ecore_glib_fds_size) - break; - - size = - (1 + - reqfds / ECORE_GLIB_FDS_STEP) * ECORE_GLIB_FDS_STEP; - if (!_ecore_glib_fds_resize(size)) - return -1; - } - - if (reqfds + ECORE_GLIB_FDS_MAX_FREE < _ecore_glib_fds_size) { - size_t size; - - size = - (1 + - reqfds / ECORE_GLIB_FDS_MAX_FREE) * - ECORE_GLIB_FDS_MAX_FREE; - _ecore_glib_fds_resize(size); - } - - return reqfds; -} - -static int -_ecore_glib_context_poll_from(const GPollFD * pfds, int count, - fd_set * rfds, fd_set * wfds, fd_set * efds) -{ - const GPollFD *itr = pfds, *itr_end = pfds + count; - int glib_fds = -1; - - for (; itr < itr_end; itr++) { - if (glib_fds < itr->fd) - glib_fds = itr->fd; - - if (itr->events & G_IO_IN) - FD_SET(itr->fd, rfds); - if (itr->events & G_IO_OUT) - FD_SET(itr->fd, wfds); - if (itr->events & (G_IO_HUP | G_IO_ERR)) - FD_SET(itr->fd, efds); - } - - return glib_fds + 1; -} - -static int -_ecore_glib_context_poll_to(GPollFD * pfds, int count, const fd_set * rfds, - const fd_set * wfds, const fd_set * efds, - int ready) -{ - GPollFD *itr = pfds, *itr_end = pfds + count; - - for (; itr < itr_end && ready > 0; itr++) { - itr->revents = 0; - if (FD_ISSET(itr->fd, rfds)) { - itr->revents |= G_IO_IN; - ready--; - } - if (FD_ISSET(itr->fd, wfds)) { - itr->revents |= G_IO_OUT; - ready--; - } - if (FD_ISSET(itr->fd, efds)) { - itr->revents |= G_IO_ERR; - ready--; - } - } - return ready; -} - -static int -_ecore_glib_select__locked(GMainContext * ctx, int ecore_fds, - fd_set * rfds, fd_set * wfds, fd_set * efds, - struct timeval *ecore_timeout) -{ - int priority, maxfds, glib_fds, reqfds, reqtimeout, ret; - struct timeval *timeout, glib_timeout; - - g_main_context_prepare(ctx, &priority); - reqfds = _ecore_glib_context_query(ctx, priority, &reqtimeout); - if (reqfds < 0) - goto error; - - glib_fds = _ecore_glib_context_poll_from - (_ecore_glib_fds, reqfds, rfds, wfds, efds); - - if (reqtimeout == -1) - timeout = ecore_timeout; - else { - glib_timeout.tv_sec = reqtimeout / 1000; - glib_timeout.tv_usec = (reqtimeout % 1000) * 1000; - - if (!ecore_timeout - || timercmp(ecore_timeout, &glib_timeout, >)) - timeout = &glib_timeout; - else - timeout = ecore_timeout; - } - - maxfds = (ecore_fds >= glib_fds) ? ecore_fds : glib_fds; - ret = - _ecore_glib_select_original(maxfds, rfds, wfds, efds, timeout); - - ret = _ecore_glib_context_poll_to - (_ecore_glib_fds, reqfds, rfds, wfds, efds, ret); - - if (g_main_context_check(ctx, priority, _ecore_glib_fds, reqfds)) - g_main_context_dispatch(ctx); - - return ret; - - error: - return _ecore_glib_select_original - (ecore_fds, rfds, wfds, efds, ecore_timeout); -} - -static int -_ecore_glib_select(int ecore_fds, fd_set * rfds, fd_set * wfds, - fd_set * efds, struct timeval *ecore_timeout) -{ - GStaticMutex lock = G_STATIC_MUTEX_INIT; - GMutex *mutex = g_static_mutex_get_mutex(&lock); - GMainContext *ctx = g_main_context_default(); - int ret; - - if (g_main_context_acquire(ctx)) - g_mutex_lock(mutex); - else { - if (!_ecore_glib_cond) - _ecore_glib_cond = g_cond_new(); - - while (!g_main_context_wait(ctx, _ecore_glib_cond, mutex)) - g_thread_yield(); - } - - ret = _ecore_glib_select__locked - (ctx, ecore_fds, rfds, wfds, efds, ecore_timeout); - - g_mutex_unlock(mutex); - g_main_context_release(ctx); - - return ret; -} -#endif - -void _ecore_glib_init(void) -{ -} - -void _ecore_glib_shutdown(void) -{ -#ifdef HAVE_GLIB - if (!_ecore_glib_active) - return; - _ecore_glib_active = EINA_FALSE; - - if (ecore_main_loop_select_func_get() == _ecore_glib_select) - ecore_main_loop_select_func_set - (_ecore_glib_select_original); - - if (_ecore_glib_fds) { - free(_ecore_glib_fds); - _ecore_glib_fds = NULL; - } - _ecore_glib_fds_size = 0; - - if (_ecore_glib_cond) { - g_cond_free(_ecore_glib_cond); - _ecore_glib_cond = NULL; - } -#endif -} - -/** - * Request ecore to integrate GLib's main loop. - * - * This will add a small overhead during every main loop interaction - * by checking glib's default main context (used by its main loop). If - * it have events to be checked (timers, file descriptors or idlers), - * then these will be polled alongside with Ecore's own events, then - * dispatched before Ecore's. This is done by calling - * ecore_main_loop_select_func_set(). - * - * This will cooperate with previously set - * ecore_main_loop_select_func_set() by calling the old - * function. Similarly, if you want to override - * ecore_main_loop_select_func_set() after main loop is integrated, - * call the new select function set by this call (get it by calling - * ecore_main_loop_select_func_get() right after - * ecore_main_loop_glib_integrate()). - * - * This is useful to use GMainLoop libraries, like GTK, GUPnP, - * LibSoup, GConf and more. Adobe Flash plugin and other plugins - * systems depend on this as well. - * - * Once initialized/integrated, it will be valid until Ecore is - * completely shut down. - * - * @note this is only available if Ecore was compiled with GLib support. - * - * @return @c EINA_TRUE on success of @c EINA_FALSE if it failed, - * likely no GLib support in Ecore. - */ -EAPI Eina_Bool ecore_main_loop_glib_integrate(void) -{ -#ifdef HAVE_GLIB - void *func; - - if (_ecore_glib_active) - return EINA_TRUE; - func = ecore_main_loop_select_func_get(); - if (func == _ecore_glib_select) - return EINA_TRUE; - _ecore_glib_select_original = func; - ecore_main_loop_select_func_set(_ecore_glib_select); - _ecore_glib_active = EINA_TRUE; - return EINA_TRUE; -#else - fputs("ERROR: no glib support in ecore.\n", stderr); - return EINA_FALSE; -#endif -} - -Eina_Bool _ecore_glib_always_integrate = 1; - -/** - * Disable always integrating glib - * - * If ecore is compiled with --enable-glib-integration-always (to always - * call ecore_main_loop_glib_integrate() when ecore_init() is called), then - * calling this before calling ecore_init() will disable the integration. - * This is for apps that explicitly do not want this to happen for whatever - * reasons they may have. - */ -EAPI void ecore_main_loop_glib_always_integrate_disable(void) -{ - _ecore_glib_always_integrate = 0; -} diff --git a/tests/suite/ecore/src/lib/ecore_idle_enterer.c b/tests/suite/ecore/src/lib/ecore_idle_enterer.c deleted file mode 100644 index 62c340f109..0000000000 --- a/tests/suite/ecore/src/lib/ecore_idle_enterer.c +++ /dev/null @@ -1,178 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Ecore.h" -#include "ecore_private.h" - - -struct _Ecore_Idle_Enterer { - EINA_INLIST; - ECORE_MAGIC; - Ecore_Task_Cb func; - void *data; - int references; - Eina_Bool delete_me:1; -}; - - -static Ecore_Idle_Enterer *idle_enterers = NULL; -static Ecore_Idle_Enterer *idle_enterer_current = NULL; -static int idle_enterers_delete_me = 0; - -/** - * Add an idle enterer handler. - * @param func The function to call when entering an idle state. - * @param data The data to be passed to the @p func call - * @return A handle to the idle enterer callback if successful. Otherwise, - * NULL is returned. - * @ingroup Idle_Group - */ -EAPI Ecore_Idle_Enterer *ecore_idle_enterer_add(Ecore_Task_Cb func, - const void *data) -{ - Ecore_Idle_Enterer *ie; - - if (!func) - return NULL; - ie = calloc(1, sizeof(Ecore_Idle_Enterer)); - if (!ie) - return NULL; - ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER); - ie->func = func; - ie->data = (void *) data; - idle_enterers = - (Ecore_Idle_Enterer *) - eina_inlist_append(EINA_INLIST_GET(idle_enterers), - EINA_INLIST_GET(ie)); - return ie; -} - -/** - * Add an idle enterer handler at the start of the list so it gets called earlier than others. - * @param func The function to call when entering an idle state. - * @param data The data to be passed to the @p func call - * @return A handle to the idle enterer callback if successful. Otherwise, - * NULL is returned. - * @ingroup Idle_Group - */ -EAPI Ecore_Idle_Enterer *ecore_idle_enterer_before_add(Ecore_Task_Cb func, - const void *data) -{ - Ecore_Idle_Enterer *ie; - - if (!func) - return NULL; - ie = calloc(1, sizeof(Ecore_Idle_Enterer)); - if (!ie) - return NULL; - ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER); - ie->func = func; - ie->data = (void *) data; - idle_enterers = - (Ecore_Idle_Enterer *) - eina_inlist_prepend(EINA_INLIST_GET(idle_enterers), - EINA_INLIST_GET(ie)); - return ie; -} - -/** - * Delete an idle enterer callback. - * @param idle_enterer The idle enterer to delete - * @return The data pointer passed to the idler enterer callback on success. - * NULL otherwise. - * @ingroup Idle_Group - */ -EAPI void *ecore_idle_enterer_del(Ecore_Idle_Enterer * idle_enterer) -{ - if (!ECORE_MAGIC_CHECK(idle_enterer, ECORE_MAGIC_IDLE_ENTERER)) { - ECORE_MAGIC_FAIL(idle_enterer, ECORE_MAGIC_IDLE_ENTERER, - "ecore_idle_enterer_del"); - return NULL; - } - EINA_SAFETY_ON_TRUE_RETURN_VAL(idle_enterer->delete_me, NULL); - idle_enterer->delete_me = 1; - idle_enterers_delete_me = 1; - return idle_enterer->data; -} - -void _ecore_idle_enterer_shutdown(void) -{ - Ecore_Idle_Enterer *ie; - while ((ie = idle_enterers)) { - idle_enterers = - (Ecore_Idle_Enterer *) - eina_inlist_remove(EINA_INLIST_GET(idle_enterers), - EINA_INLIST_GET(idle_enterers)); - ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); - free(ie); - } - idle_enterers_delete_me = 0; - idle_enterer_current = NULL; -} - -void _ecore_idle_enterer_call(void) -{ - if (!idle_enterer_current) { - /* regular main loop, start from head */ - idle_enterer_current = idle_enterers; - } else { - /* recursive main loop, continue from where we were */ - idle_enterer_current = - (Ecore_Idle_Enterer *) - EINA_INLIST_GET(idle_enterer_current)->next; - } - - while (idle_enterer_current) { - Ecore_Idle_Enterer *ie = - (Ecore_Idle_Enterer *) idle_enterer_current; - if (!ie->delete_me) { - ie->references++; - if (!ie->func(ie->data)) { - if (!ie->delete_me) - ecore_idle_enterer_del(ie); - } - ie->references--; - } - if (idle_enterer_current) /* may have changed in recursive main loops */ - idle_enterer_current = - (Ecore_Idle_Enterer *) - EINA_INLIST_GET(idle_enterer_current)->next; - } - if (idle_enterers_delete_me) { - Ecore_Idle_Enterer *l; - int deleted_idler_enterers_in_use = 0; - - for (l = idle_enterers; l;) { - Ecore_Idle_Enterer *ie = l; - l = (Ecore_Idle_Enterer *) EINA_INLIST_GET(l)-> - next; - if (ie->delete_me) { - if (ie->references) { - deleted_idler_enterers_in_use++; - continue; - } - - idle_enterers = - (Ecore_Idle_Enterer *) - eina_inlist_remove(EINA_INLIST_GET - (idle_enterers), - EINA_INLIST_GET - (ie)); - ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); - free(ie); - } - } - if (!deleted_idler_enterers_in_use) - idle_enterers_delete_me = 0; - } -} - -int _ecore_idle_enterer_exist(void) -{ - if (idle_enterers) - return 1; - return 0; -} diff --git a/tests/suite/ecore/src/lib/ecore_idle_exiter.c b/tests/suite/ecore/src/lib/ecore_idle_exiter.c deleted file mode 100644 index 0e9dbaf622..0000000000 --- a/tests/suite/ecore/src/lib/ecore_idle_exiter.c +++ /dev/null @@ -1,149 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Ecore.h" -#include "ecore_private.h" - - -struct _Ecore_Idle_Exiter { - EINA_INLIST; - ECORE_MAGIC; - Ecore_Task_Cb func; - void *data; - int references; - Eina_Bool delete_me:1; -}; - - -static Ecore_Idle_Exiter *idle_exiters = NULL; -static Ecore_Idle_Exiter *idle_exiter_current = NULL; -static int idle_exiters_delete_me = 0; - -/** - * Add an idle exiter handler. - * @param func The function to call when exiting an idle state. - * @param data The data to be passed to the @p func call - * @return A handle to the idle exiter callback on success. NULL otherwise. - * @ingroup Idle_Group - */ -EAPI Ecore_Idle_Exiter *ecore_idle_exiter_add(Ecore_Task_Cb func, - const void *data) -{ - Ecore_Idle_Exiter *ie; - - if (!func) - return NULL; - ie = calloc(1, sizeof(Ecore_Idle_Exiter)); - if (!ie) - return NULL; - ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_EXITER); - ie->func = func; - ie->data = (void *) data; - idle_exiters = - (Ecore_Idle_Exiter *) - eina_inlist_append(EINA_INLIST_GET(idle_exiters), - EINA_INLIST_GET(ie)); - return ie; -} - -/** - * Delete an idle exiter handler from the list to be run on exiting idle state. - * @param idle_exiter The idle exiter to delete - * @return The data pointer that was being being passed to the handler if - * successful. NULL otherwise. - * @ingroup Idle_Group - */ -EAPI void *ecore_idle_exiter_del(Ecore_Idle_Exiter * idle_exiter) -{ - if (!ECORE_MAGIC_CHECK(idle_exiter, ECORE_MAGIC_IDLE_EXITER)) { - ECORE_MAGIC_FAIL(idle_exiter, ECORE_MAGIC_IDLE_EXITER, - "ecore_idle_exiter_del"); - return NULL; - } - EINA_SAFETY_ON_TRUE_RETURN_VAL(idle_exiter->delete_me, NULL); - idle_exiter->delete_me = 1; - idle_exiters_delete_me = 1; - return idle_exiter->data; -} - -void _ecore_idle_exiter_shutdown(void) -{ - Ecore_Idle_Exiter *ie; - while ((ie = idle_exiters)) { - idle_exiters = - (Ecore_Idle_Exiter *) - eina_inlist_remove(EINA_INLIST_GET(idle_exiters), - EINA_INLIST_GET(idle_exiters)); - ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); - free(ie); - } - idle_exiters_delete_me = 0; - idle_exiter_current = NULL; -} - -void _ecore_idle_exiter_call(void) -{ - if (!idle_exiter_current) { - /* regular main loop, start from head */ - idle_exiter_current = idle_exiters; - } else { - /* recursive main loop, continue from where we were */ - idle_exiter_current = - (Ecore_Idle_Exiter *) - EINA_INLIST_GET(idle_exiter_current)->next; - } - - while (idle_exiter_current) { - Ecore_Idle_Exiter *ie = - (Ecore_Idle_Exiter *) idle_exiter_current; - if (!ie->delete_me) { - ie->references++; - if (!ie->func(ie->data)) { - if (!ie->delete_me) - ecore_idle_exiter_del(ie); - } - ie->references--; - } - if (idle_exiter_current) /* may have changed in recursive main loops */ - idle_exiter_current = - (Ecore_Idle_Exiter *) - EINA_INLIST_GET(idle_exiter_current)->next; - } - if (idle_exiters_delete_me) { - Ecore_Idle_Exiter *l; - int deleted_idler_exiters_in_use = 0; - - for (l = idle_exiters; l;) { - Ecore_Idle_Exiter *ie = l; - - l = (Ecore_Idle_Exiter *) EINA_INLIST_GET(l)->next; - if (ie->delete_me) { - if (ie->references) { - deleted_idler_exiters_in_use++; - continue; - } - - idle_exiters = - (Ecore_Idle_Exiter *) - eina_inlist_remove(EINA_INLIST_GET - (idle_exiters), - EINA_INLIST_GET - (ie)); - ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); - free(ie); - } - } - if (!deleted_idler_exiters_in_use) - idle_exiters_delete_me = 0; - } -} - -int _ecore_idle_exiter_exist(void) -{ - if (idle_exiters) - return 1; - return 0; -} diff --git a/tests/suite/ecore/src/lib/ecore_idler.c b/tests/suite/ecore/src/lib/ecore_idler.c deleted file mode 100644 index d5cd74c760..0000000000 --- a/tests/suite/ecore/src/lib/ecore_idler.c +++ /dev/null @@ -1,154 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Ecore.h" -#include "ecore_private.h" - - -struct _Ecore_Idler { - EINA_INLIST; - ECORE_MAGIC; - Ecore_Task_Cb func; - void *data; - int references; - Eina_Bool delete_me:1; -}; - - -static Ecore_Idler *idlers = NULL; -static Ecore_Idler *idler_current = NULL; -static int idlers_delete_me = 0; - -/** - * Add an idler handler. - * @param func The function to call when idling. - * @param data The data to be passed to this @p func call. - * @return A idler handle if successfully added. NULL otherwise. - * @ingroup Idle_Group - * - * Add an idler handle to the event loop, returning a handle on success and - * NULL otherwise. The function @p func will be called repeatedly while - * no other events are ready to be processed, as long as it returns 1 - * (or ECORE_CALLBACK_RENEW). A return of 0 (or ECORE_CALLBACK_CANCEL) deletes - * the idler. - * - * Idlers are useful for progressively prossessing data without blocking. - */ -EAPI Ecore_Idler *ecore_idler_add(Ecore_Task_Cb func, const void *data) -{ - Ecore_Idler *ie; - - if (!func) - return NULL; - ie = calloc(1, sizeof(Ecore_Idler)); - if (!ie) - return NULL; - ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLER); - ie->func = func; - ie->data = (void *) data; - idlers = - (Ecore_Idler *) eina_inlist_append(EINA_INLIST_GET(idlers), - EINA_INLIST_GET(ie)); - return ie; -} - -/** - * Delete an idler callback from the list to be executed. - * @param idler The handle of the idler callback to delete - * @return The data pointer passed to the idler callback on success. NULL - * otherwise. - * @ingroup Idle_Group - */ -EAPI void *ecore_idler_del(Ecore_Idler * idler) -{ - if (!ECORE_MAGIC_CHECK(idler, ECORE_MAGIC_IDLER)) { - ECORE_MAGIC_FAIL(idler, ECORE_MAGIC_IDLER, - "ecore_idler_del"); - return NULL; - } - EINA_SAFETY_ON_TRUE_RETURN_VAL(idler->delete_me, NULL); - idler->delete_me = 1; - idlers_delete_me = 1; - return idler->data; -} - -void _ecore_idler_shutdown(void) -{ - Ecore_Idler *ie; - while ((ie = idlers)) { - idlers = - (Ecore_Idler *) - eina_inlist_remove(EINA_INLIST_GET(idlers), - EINA_INLIST_GET(idlers)); - ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); - free(ie); - } - idlers_delete_me = 0; - idler_current = NULL; -} - -int _ecore_idler_call(void) -{ - if (!idler_current) { - /* regular main loop, start from head */ - idler_current = idlers; - } else { - /* recursive main loop, continue from where we were */ - idler_current = - (Ecore_Idler *) EINA_INLIST_GET(idler_current)->next; - } - - while (idler_current) { - Ecore_Idler *ie = (Ecore_Idler *) idler_current; - if (!ie->delete_me) { - ie->references++; - if (!ie->func(ie->data)) { - if (!ie->delete_me) - ecore_idler_del(ie); - } - ie->references--; - } - if (idler_current) /* may have changed in recursive main loops */ - idler_current = - (Ecore_Idler *) - EINA_INLIST_GET(idler_current)->next; - } - if (idlers_delete_me) { - Ecore_Idler *l; - int deleted_idlers_in_use = 0; - for (l = idlers; l;) { - Ecore_Idler *ie = l; - l = (Ecore_Idler *) EINA_INLIST_GET(l)->next; - if (ie->delete_me) { - if (ie->references) { - deleted_idlers_in_use++; - continue; - } - - idlers = - (Ecore_Idler *) - eina_inlist_remove(EINA_INLIST_GET - (idlers), - EINA_INLIST_GET - (ie)); - ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE); - free(ie); - } - } - if (!deleted_idlers_in_use) - idlers_delete_me = 0; - } - if (idlers) - return 1; - return 0; -} - -int _ecore_idler_exist(void) -{ - if (idlers) - return 1; - return 0; -} diff --git a/tests/suite/ecore/src/lib/ecore_job.c b/tests/suite/ecore/src/lib/ecore_job.c deleted file mode 100644 index e9a8de169e..0000000000 --- a/tests/suite/ecore/src/lib/ecore_job.c +++ /dev/null @@ -1,104 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Ecore.h" -#include "ecore_private.h" - -static Eina_Bool _ecore_job_event_handler(void *data, int type, void *ev); -static void _ecore_job_event_free(void *data, void *ev); - -static int ecore_event_job_type = 0; -static Ecore_Event_Handler *_ecore_job_handler = NULL; - -struct _Ecore_Job { - ECORE_MAGIC; - Ecore_Event *event; - Ecore_Cb func; - void *data; -}; - -void _ecore_job_init(void) -{ - ecore_event_job_type = ecore_event_type_new(); - _ecore_job_handler = - ecore_event_handler_add(ecore_event_job_type, - _ecore_job_event_handler, NULL); -} - -void _ecore_job_shutdown(void) -{ - ecore_event_handler_del(_ecore_job_handler); - _ecore_job_handler = NULL; -} - -/** - * Add a job to the event queue. - * @param func The function to call when the job gets handled. - * @param data Data pointer to be passed to the job function when the job is - * handled. - * @return The handle of the job. @c NULL is returned if the job could not be - * added to the queue. - * @ingroup Ecore_Job_Group - * @note Once the job has been executed, the job handle is invalid. - */ -EAPI Ecore_Job *ecore_job_add(Ecore_Cb func, const void *data) -{ - Ecore_Job *job; - - if (!func) - return NULL; - - job = calloc(1, sizeof(Ecore_Job)); - if (!job) - return NULL; - ECORE_MAGIC_SET(job, ECORE_MAGIC_JOB); - job->event = - ecore_event_add(ecore_event_job_type, job, - _ecore_job_event_free, NULL); - if (!job->event) { - free(job); - return NULL; - } - job->func = func; - job->data = (void *) data; - return job; -} - -/** - * Delete a queued job that has not yet been executed. - * @param job Handle of the job to delete. - * @return The data pointer that was to be passed to the job. - * @ingroup Ecore_Job_Group - */ -EAPI void *ecore_job_del(Ecore_Job * job) -{ - void *data; - - if (!ECORE_MAGIC_CHECK(job, ECORE_MAGIC_JOB)) { - ECORE_MAGIC_FAIL(job, ECORE_MAGIC_JOB, "ecore_job_del"); - return NULL; - } - data = job->data; - ECORE_MAGIC_SET(job, ECORE_MAGIC_NONE); - ecore_event_del(job->event); - return data; -} - -static Eina_Bool -_ecore_job_event_handler(void *data __UNUSED__, int type __UNUSED__, - void *ev) -{ - Ecore_Job *job; - - job = ev; - job->func(job->data); - return ECORE_CALLBACK_CANCEL; -} - -static void _ecore_job_event_free(void *data __UNUSED__, void *ev) -{ - free(ev); -} diff --git a/tests/suite/ecore/src/lib/ecore_main.c b/tests/suite/ecore/src/lib/ecore_main.c deleted file mode 100644 index 6c22589114..0000000000 --- a/tests/suite/ecore/src/lib/ecore_main.c +++ /dev/null @@ -1,1415 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#ifdef _WIN32 -#define WIN32_LEAN_AND_MEAN -#include -#undef WIN32_LEAN_AND_MEAN -#ifndef USER_TIMER_MINIMUM -#define USER_TIMER_MINIMUM 0x0a -#endif -#endif - -#ifdef __SUNPRO_C -#include -#include -#endif - -#include -#include -#include -#include -#include -#include - -#ifndef _MSC_VER -#include -#include -#else -#include -#endif - -#define FIX_HZ 1 - -#ifdef FIX_HZ -#ifndef _MSC_VER -#include -#endif -#ifndef HZ -#define HZ 100 -#endif -#endif - -#ifdef HAVE_EVIL -#include -#endif - -#include "Ecore.h" -#include "ecore_private.h" - -#ifdef HAVE_SYS_EPOLL_H -#define HAVE_EPOLL -#include -#endif - -#ifdef USE_G_MAIN_LOOP -#include -#endif - -struct _Ecore_Fd_Handler { - EINA_INLIST; - ECORE_MAGIC; - int fd; - Ecore_Fd_Handler_Flags flags; - Ecore_Fd_Cb func; - void *data; - Ecore_Fd_Cb buf_func; - void *buf_data; - Ecore_Fd_Prep_Cb prep_func; - void *prep_data; - int references; - Eina_Bool read_active:1; - Eina_Bool write_active:1; - Eina_Bool error_active:1; - Eina_Bool delete_me:1; -}; - -#ifdef _WIN32 -struct _Ecore_Win32_Handler { - EINA_INLIST; - ECORE_MAGIC; - HANDLE h; - Ecore_Fd_Win32_Cb func; - void *data; - int references; - Eina_Bool delete_me:1; -}; -#endif - - -static int _ecore_main_select(double timeout); -static void _ecore_main_prepare_handlers(void); -static void _ecore_main_fd_handlers_cleanup(void); -#ifndef _WIN32 -static void _ecore_main_fd_handlers_bads_rem(void); -#endif -static void _ecore_main_fd_handlers_call(void); -static int _ecore_main_fd_handlers_buf_call(void); -#ifndef USE_G_MAIN_LOOP -static void _ecore_main_loop_iterate_internal(int once_only); -#endif - -#ifdef _WIN32 -static int _ecore_main_win32_select(int nfds, fd_set * readfds, - fd_set * writefds, fd_set * exceptfds, - struct timeval *timeout); -static void _ecore_main_win32_handlers_cleanup(void); -#endif - -static int in_main_loop = 0; -static int do_quit = 0; -static Ecore_Fd_Handler *fd_handlers = NULL; -static Ecore_Fd_Handler *fd_handler_current = NULL; -static int fd_handlers_delete_me = 0; -#ifdef _WIN32 -static Ecore_Win32_Handler *win32_handlers = NULL; -static Ecore_Win32_Handler *win32_handler_current = NULL; -static int win32_handlers_delete_me = 0; -#endif - -#ifdef _WIN32 -static Ecore_Select_Function main_loop_select = _ecore_main_win32_select; -#else -static Ecore_Select_Function main_loop_select = select; -#endif - -static double t1 = 0.0; -static double t2 = 0.0; - -#ifdef HAVE_EPOLL -static int epoll_fd = -1; -#endif - -#ifdef USE_G_MAIN_LOOP -static GSource *ecore_epoll_source; -static GPollFD ecore_epoll_fd; -static guint ecore_epoll_id; -static GMainLoop *ecore_main_loop; -static gboolean ecore_idling; -static gboolean ecore_fds_ready; -#endif - -#ifdef HAVE_EPOLL -static inline int _ecore_poll_events_from_fdh(Ecore_Fd_Handler * fdh) -{ - int events = 0; - if (fdh->flags & ECORE_FD_READ) - events |= EPOLLIN; - if (fdh->flags & ECORE_FD_WRITE) - events |= EPOLLOUT; - if (fdh->flags & ECORE_FD_ERROR) - events |= EPOLLERR; - return events; -} -#else -static inline int _ecore_poll_events_from_fdh(Ecore_Fd_Handler * - fdh __UNUSED__) -{ - return 0; -} -#endif - -#ifdef HAVE_EPOLL -static inline int _ecore_main_fdh_epoll_add(Ecore_Fd_Handler * fdh) -{ - int r = 0; - struct epoll_event ev; - - memset(&ev, 0, sizeof(ev)); - ev.events = _ecore_poll_events_from_fdh(fdh); - ev.data.ptr = fdh; - INF("adding poll on %d %08x", fdh->fd, ev.events); - r = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fdh->fd, &ev); - return r; -} -#else -static inline int _ecore_main_fdh_epoll_add(Ecore_Fd_Handler * - fdh __UNUSED__) -{ - return 0; -} -#endif - -#ifdef HAVE_EPOLL -static inline void _ecore_main_fdh_epoll_del(Ecore_Fd_Handler * fdh) -{ - struct epoll_event ev; - - memset(&ev, 0, sizeof(ev)); - INF("removing poll on %d", fdh->fd); - /* could get an EBADF if somebody closed the FD before removing it */ - if ((epoll_ctl(epoll_fd, EPOLL_CTL_DEL, fdh->fd, &ev) < 0) && - (errno != EBADF)) { - ERR("Failed to delete epoll fd %d! (errno=%d)", fdh->fd, - errno); - } -} -#else -static inline void _ecore_main_fdh_epoll_del(Ecore_Fd_Handler * - fdh __UNUSED__) -{ -} -#endif - -#ifdef HAVE_EPOLL -static inline int _ecore_main_fdh_epoll_modify(Ecore_Fd_Handler * fdh) -{ - int r = 0; - struct epoll_event ev; - - memset(&ev, 0, sizeof(ev)); - ev.events = _ecore_poll_events_from_fdh(fdh); - ev.data.ptr = fdh; - INF("modifing epoll on %d to %08x", fdh->fd, ev.events); - r = epoll_ctl(epoll_fd, EPOLL_CTL_MOD, fdh->fd, &ev); - return r; -} -#else -static inline int _ecore_main_fdh_epoll_modify(Ecore_Fd_Handler * - fdh __UNUSED__) -{ - return 0; -} -#endif - -#ifdef HAVE_EPOLL -static inline int _ecore_main_fdh_epoll_mark_active(void) -{ - struct epoll_event ev[32]; - int i, ret; - - memset(&ev, 0, sizeof(ev)); - ret = - epoll_wait(epoll_fd, ev, - sizeof(ev) / sizeof(struct epoll_event), 0); - if (ret < 0) { - if (errno == EINTR) - return -1; - ERR("epoll_wait failed %d", errno); - return -1; - } - - for (i = 0; i < ret; i++) { - Ecore_Fd_Handler *fdh; - - fdh = ev[i].data.ptr; - if (!ECORE_MAGIC_CHECK(fdh, ECORE_MAGIC_FD_HANDLER)) { - ECORE_MAGIC_FAIL(fdh, ECORE_MAGIC_FD_HANDLER, - "_ecore_main_fdh_epoll_mark_active"); - continue; - } - if (fdh->delete_me) { - ERR("deleted fd in epoll"); - continue; - } - if (ev->events & EPOLLIN) - fdh->read_active = 1; - if (ev->events & EPOLLOUT) - fdh->write_active = 1; - if (ev->events & EPOLLERR) - fdh->error_active = 1; - } - - return ret; -} -#endif - -#ifdef USE_G_MAIN_LOOP - -/* like we are about to enter main_loop_select in _ecore_main_select */ -static gboolean -_ecore_main_gsource_prepare(GSource * source, gint * next_time) -{ - double t = _ecore_timer_next_get(); - gboolean running; - - INF("enter, next timeout in %.1f", t); - in_main_loop++; - - if (!ecore_idling) { - while (_ecore_timer_call(_ecore_time_loop_time)); - _ecore_timer_cleanup(); - - /* when idling, busy loop checking the fds only */ - if (!ecore_idling) - _ecore_idle_enterer_call(); - } - - /* don't check fds if somebody quit */ - running = g_main_loop_is_running(ecore_main_loop); - if (running) { - /* only set idling state in dispatch */ - if (ecore_idling && !_ecore_idler_exist()) { - if (_ecore_timers_exists()) { - double t = _ecore_timer_next_get(); - *next_time = (t / 1000.0); - } else - *next_time = -1; - } else - *next_time = 0; - - _ecore_main_prepare_handlers(); - } - - in_main_loop--; - INF("leave, timeout = %d", *next_time); - - /* ready if we're not running (about to quit) */ - return !running; -} - -static gboolean _ecore_main_gsource_check(GSource * source) -{ - INF("enter"); - in_main_loop++; - - ecore_fds_ready = (_ecore_main_fdh_epoll_mark_active() > 0); - _ecore_main_fd_handlers_cleanup(); - - _ecore_time_loop_time = ecore_time_get(); - _ecore_timer_enable_new(); - - in_main_loop--; - INF("leave"); - - return TRUE; /* always dispatch */ -} - -/* like we just came out of main_loop_select in _ecore_main_select */ -static gboolean -_ecore_main_gsource_dispatch(GSource * source, GSourceFunc callback, - gpointer user_data) -{ - gboolean events_ready, timers_ready, idlers_ready, signals_ready; - double next_time = _ecore_timer_next_get(); - - events_ready = _ecore_event_exist(); - timers_ready = _ecore_timers_exists() && (0.0 <= next_time); - idlers_ready = _ecore_idler_exist(); - signals_ready = (_ecore_signal_count_get() > 0); - - in_main_loop++; - INF("enter idling=%d fds=%d events=%d signals=%d timers=%d (next=%.2f) idlers=%d", ecore_idling, ecore_fds_ready, events_ready, signals_ready, _ecore_timers_exists(), next_time, idlers_ready); - - if (ecore_idling && events_ready) { - INF("calling idle exiters"); - _ecore_idle_exiter_call(); - ecore_idling = 0; - } else if (!ecore_idling && !events_ready) { - INF("start idling"); - ecore_idling = 1; - } - - if (ecore_idling) { - INF("calling idler"); - _ecore_idler_call(); - - events_ready = _ecore_event_exist(); - timers_ready = _ecore_timers_exists() - && (0.0 <= next_time); - idlers_ready = _ecore_idler_exist(); - - if ((ecore_fds_ready || events_ready || timers_ready - || idlers_ready || signals_ready)) { - INF("calling idle exiters"); - _ecore_idle_exiter_call(); - ecore_idling = 0; - } - } - - /* process events */ - if (!ecore_idling) { - INF("work"); - _ecore_main_fd_handlers_call(); - _ecore_main_fd_handlers_buf_call(); - while (_ecore_signal_count_get()) - _ecore_signal_call(); - _ecore_event_call(); - _ecore_main_fd_handlers_cleanup(); - } - - in_main_loop--; - - INF("leave"); - - return TRUE; /* what should be returned here? */ -} - -static void _ecore_main_gsource_finalize(GSource * source) -{ - INF("finalize"); -} - -static GSourceFuncs ecore_gsource_funcs = { - .prepare = _ecore_main_gsource_prepare, - .check = _ecore_main_gsource_check, - .dispatch = _ecore_main_gsource_dispatch, - .finalize = _ecore_main_gsource_finalize, -}; - -#endif - -void _ecore_main_loop_init(void) -{ - INF("enter"); -#ifdef HAVE_EPOLL - epoll_fd = epoll_create(1); - if (epoll_fd < 0) - CRIT("Failed to create epoll fd!"); -#endif - -#ifdef USE_G_MAIN_LOOP - ecore_epoll_source = - g_source_new(&ecore_gsource_funcs, sizeof(GSource)); - if (!ecore_epoll_source) - CRIT("Failed to create glib source for epoll!"); - else { - ecore_epoll_fd.fd = epoll_fd; - ecore_epoll_fd.events = G_IO_IN; - ecore_epoll_fd.revents = 0; - g_source_add_poll(ecore_epoll_source, &ecore_epoll_fd); - ecore_epoll_id = g_source_attach(ecore_epoll_source, NULL); - if (ecore_epoll_id <= 0) - CRIT("Failed to attach glib source to default context"); - } -#endif - INF("leave"); -} - -void _ecore_main_loop_shutdown(void) -{ -#ifdef USE_G_MAIN_LOOP - if (ecore_epoll_source) { - g_source_destroy(ecore_epoll_source); - ecore_epoll_source = NULL; - } -#endif - -#ifdef HAVE_EPOLL - if (epoll_fd >= 0) { - close(epoll_fd); - epoll_fd = -1; - } -#endif -} - - -/** - * @defgroup Ecore_Main_Loop_Group Main Loop Functions - * - * These functions control the Ecore event handling loop. This loop is - * designed to work on embedded systems all the way to large and - * powerful mutli-cpu workstations. - * - * It serialises all system signals and events into a single event - * queue, that can be easily processed without needing to worry about - * concurrency. A properly written, event-driven program using this - * kind of programming does not need threads. It makes the program very - * robust and easy to follow. - * - * Here is an example of simple program and its basic event loop flow: - * @image html prog_flow.png - * - * For examples of setting up and using a main loop, see - * @ref event_handler_example.c and @ref timer_example.c. - */ - -/** - * Runs a single iteration of the main loop to process everything on the - * queue. - * @ingroup Ecore_Main_Loop_Group - */ -EAPI void ecore_main_loop_iterate(void) -{ -#ifndef USE_G_MAIN_LOOP - _ecore_main_loop_iterate_internal(1); -#else - g_main_context_iteration(NULL, 1); -#endif -} - -/** - * Runs the application main loop. - * - * This function will not return until @ref ecore_main_loop_quit is called. - * - * @ingroup Ecore_Main_Loop_Group - */ -EAPI void ecore_main_loop_begin(void) -{ -#ifndef USE_G_MAIN_LOOP - in_main_loop++; - while (do_quit == 0) - _ecore_main_loop_iterate_internal(0); - do_quit = 0; - in_main_loop--; -#else - ecore_main_loop = g_main_loop_new(NULL, FALSE); - g_main_loop_run(ecore_main_loop); -#endif -} - -/** - * Quits the main loop once all the events currently on the queue have - * been processed. - * @ingroup Ecore_Main_Loop_Group - */ -EAPI void ecore_main_loop_quit(void) -{ -#ifndef USE_G_MAIN_LOOP - do_quit = 1; -#else - INF("enter"); - g_main_loop_quit(ecore_main_loop); - INF("leave"); -#endif -} - -/** - * Sets the function to use when monitoring multiple file descriptors, - * and waiting until one of more of the file descriptors before ready - * for some class of I/O operation. - * - * This function will be used instead of the system call select and - * could possible be used to integrate the Ecore event loop with an - * external event loop. - * - * @warning you don't know how to use, don't even try to use it. - * - * @ingroup Ecore_Main_Loop_Group - */ -EAPI void ecore_main_loop_select_func_set(Ecore_Select_Function func) -{ - main_loop_select = func; -} - -/** - * Gets the select function set by ecore_select_func_set(), - * or the native select function if none was set. - * - * @ingroup Ecore_Main_Loop_Group - */ -EAPI void *ecore_main_loop_select_func_get(void) -{ - return main_loop_select; -} - -/** - * @defgroup Ecore_FD_Handler_Group File Event Handling Functions - * - * Functions that deal with file descriptor handlers. - */ - -/** - * Adds a callback for activity on the given file descriptor. - * - * @p func will be called during the execution of @ref ecore_main_loop_begin - * when the file descriptor is available for reading, or writing, or both. - * - * Normally the return value from the @p func is "zero means this handler is - * finished and can be deleted" as is usual for handler callbacks. However, - * if the @p buf_func is supplied, then the return value from the @p func is - * "non zero means the handler should be called again in a tight loop". - * - * @p buf_func is called during event loop handling to check if data that has - * been read from the file descriptor is in a buffer and is available to - * read. Some systems (notably xlib) handle their own buffering, and would - * otherwise not work with select(). These systems should use a @p buf_func. - * This is a most annoying hack, only ecore_x uses it, so refer to that for - * an example. NOTE - @p func should probably return "one" always if - * @p buf_func is used, to avoid confusion with the other return value - * semantics. - * - * @param fd The file descriptor to watch. - * @param flags To watch it for read (@c ECORE_FD_READ) and/or - * (@c ECORE_FD_WRITE) write ability. @c ECORE_FD_ERROR - * - * @param func The callback function. - * @param data The data to pass to the callback. - * @param buf_func The function to call to check if any data has been - * buffered and already read from the fd. Can be @c NULL. - * @param buf_data The data to pass to the @p buf_func function. - * @return A fd handler handle if successful. @c NULL otherwise. - * @ingroup Ecore_FD_Handler_Group - */ -EAPI Ecore_Fd_Handler *ecore_main_fd_handler_add(int fd, - Ecore_Fd_Handler_Flags - flags, Ecore_Fd_Cb func, - const void *data, - Ecore_Fd_Cb buf_func, - const void *buf_data) -{ - Ecore_Fd_Handler *fdh; - - if ((fd < 0) || (flags == 0) || (!func)) - return NULL; - - fdh = calloc(1, sizeof(Ecore_Fd_Handler)); - if (!fdh) - return NULL; - ECORE_MAGIC_SET(fdh, ECORE_MAGIC_FD_HANDLER); - fdh->fd = fd; - fdh->flags = flags; - if (0 > _ecore_main_fdh_epoll_add(fdh)) { - ERR("Failed to add epoll fd %d (errno = %d)!", fd, errno); - free(fdh); - return NULL; - } - fdh->read_active = 0; - fdh->write_active = 0; - fdh->error_active = 0; - fdh->delete_me = 0; - fdh->func = func; - fdh->data = (void *) data; - fdh->buf_func = buf_func; - fdh->buf_data = (void *) buf_data; - fd_handlers = (Ecore_Fd_Handler *) - eina_inlist_append(EINA_INLIST_GET(fd_handlers), - EINA_INLIST_GET(fdh)); - return fdh; -} - -#ifdef _WIN32 -EAPI Ecore_Win32_Handler *ecore_main_win32_handler_add(void *h, - Ecore_Fd_Win32_Cb - func, - const void *data) -{ - Ecore_Win32_Handler *wh; - - if (!h || !func) - return NULL; - - wh = calloc(1, sizeof(Ecore_Win32_Handler)); - if (!wh) - return NULL; - ECORE_MAGIC_SET(wh, ECORE_MAGIC_WIN32_HANDLER); - wh->h = (HANDLE) h; - wh->delete_me = 0; - wh->func = func; - wh->data = (void *) data; - win32_handlers = (Ecore_Win32_Handler *) - eina_inlist_append(EINA_INLIST_GET(win32_handlers), - EINA_INLIST_GET(wh)); - return wh; -} -#else -EAPI Ecore_Win32_Handler *ecore_main_win32_handler_add(void *h __UNUSED__, - Ecore_Fd_Win32_Cb - func __UNUSED__, - const void *data - __UNUSED__) -{ - return NULL; -} -#endif - -/** - * Deletes the given FD handler. - * @param fd_handler The given FD handler. - * @return The data pointer set using @ref ecore_main_fd_handler_add, - * for @p fd_handler on success. @c NULL otherwise. - * @ingroup Ecore_FD_Handler_Group - * - * Beware that if the fd is already closed, ecore may complain if it uses - * epoll internally, and that in some rare cases this may be able to cause - * crashes and instability. Remember to delete your fd handlers before the - * fd's they listen to are closed. - */ -EAPI void *ecore_main_fd_handler_del(Ecore_Fd_Handler * fd_handler) -{ - if (!ECORE_MAGIC_CHECK(fd_handler, ECORE_MAGIC_FD_HANDLER)) { - ECORE_MAGIC_FAIL(fd_handler, ECORE_MAGIC_FD_HANDLER, - "ecore_main_fd_handler_del"); - return NULL; - } - fd_handler->delete_me = 1; - fd_handlers_delete_me = 1; - _ecore_main_fdh_epoll_del(fd_handler); - return fd_handler->data; -} - -#ifdef _WIN32 -EAPI void *ecore_main_win32_handler_del(Ecore_Win32_Handler * - win32_handler) -{ - if (!ECORE_MAGIC_CHECK(win32_handler, ECORE_MAGIC_WIN32_HANDLER)) { - ECORE_MAGIC_FAIL(win32_handler, ECORE_MAGIC_WIN32_HANDLER, - "ecore_main_win32_handler_del"); - return NULL; - } - win32_handler->delete_me = 1; - win32_handlers_delete_me = 1; - return win32_handler->data; -} -#else -EAPI void *ecore_main_win32_handler_del(Ecore_Win32_Handler * - win32_handler __UNUSED__) -{ - return NULL; -} -#endif - -EAPI void -ecore_main_fd_handler_prepare_callback_set(Ecore_Fd_Handler * fd_handler, - Ecore_Fd_Prep_Cb func, - const void *data) -{ - if (!ECORE_MAGIC_CHECK(fd_handler, ECORE_MAGIC_FD_HANDLER)) { - ECORE_MAGIC_FAIL(fd_handler, ECORE_MAGIC_FD_HANDLER, - "ecore_main_fd_handler_prepare_callback_set"); - return; - } - fd_handler->prep_func = func; - fd_handler->prep_data = (void *) data; -} - -/** - * Retrieves the file descriptor that the given handler is handling. - * @param fd_handler The given FD handler. - * @return The file descriptor the handler is watching. - * @ingroup Ecore_FD_Handler_Group - */ -EAPI int ecore_main_fd_handler_fd_get(Ecore_Fd_Handler * fd_handler) -{ - if (!ECORE_MAGIC_CHECK(fd_handler, ECORE_MAGIC_FD_HANDLER)) { - ECORE_MAGIC_FAIL(fd_handler, ECORE_MAGIC_FD_HANDLER, - "ecore_main_fd_handler_fd_get"); - return -1; - } - return fd_handler->fd; -} - -/** - * Return if read, write or error, or a combination thereof, is active on the - * file descriptor of the given FD handler. - * @param fd_handler The given FD handler. - * @param flags The flags, @c ECORE_FD_READ, @c ECORE_FD_WRITE or - * @c ECORE_FD_ERROR to query. - * @return #EINA_TRUE if any of the given flags are active. #EINA_FALSE otherwise. - * @ingroup Ecore_FD_Handler_Group - */ -EAPI Eina_Bool -ecore_main_fd_handler_active_get(Ecore_Fd_Handler * fd_handler, - Ecore_Fd_Handler_Flags flags) -{ - int ret = EINA_FALSE; - - if (!ECORE_MAGIC_CHECK(fd_handler, ECORE_MAGIC_FD_HANDLER)) { - ECORE_MAGIC_FAIL(fd_handler, ECORE_MAGIC_FD_HANDLER, - "ecore_main_fd_handler_active_get"); - return EINA_FALSE; - } - if ((flags & ECORE_FD_READ) && (fd_handler->read_active)) - ret = EINA_TRUE; - if ((flags & ECORE_FD_WRITE) && (fd_handler->write_active)) - ret = EINA_TRUE; - if ((flags & ECORE_FD_ERROR) && (fd_handler->error_active)) - ret = EINA_TRUE; - return ret; -} - -/** - * Set what active streams the given FD handler should be monitoring. - * @param fd_handler The given FD handler. - * @param flags The flags to be watching. - * @ingroup Ecore_FD_Handler_Group - */ -EAPI void -ecore_main_fd_handler_active_set(Ecore_Fd_Handler * fd_handler, - Ecore_Fd_Handler_Flags flags) -{ - if (!ECORE_MAGIC_CHECK(fd_handler, ECORE_MAGIC_FD_HANDLER)) { - ECORE_MAGIC_FAIL(fd_handler, ECORE_MAGIC_FD_HANDLER, - "ecore_main_fd_handler_active_set"); - return; - } - fd_handler->flags = flags; - if (0 > _ecore_main_fdh_epoll_modify(fd_handler)) { - ERR("Failed to mod epoll fd %d!", fd_handler->fd); - } -} - -void _ecore_main_shutdown(void) -{ - if (in_main_loop) { - ERR("\n" - "*** ECORE WARINING: Calling ecore_shutdown() while still in the main loop.\n" - "*** Program may crash or behave strangely now."); - return; - } - while (fd_handlers) { - Ecore_Fd_Handler *fdh; - - fdh = fd_handlers; - fd_handlers = - (Ecore_Fd_Handler *) - eina_inlist_remove(EINA_INLIST_GET(fd_handlers), - EINA_INLIST_GET(fdh)); - ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE); - free(fdh); - } - fd_handlers_delete_me = 0; - fd_handler_current = NULL; - -#ifdef _WIN32 - while (win32_handlers) { - Ecore_Win32_Handler *wh; - - wh = win32_handlers; - win32_handlers = - (Ecore_Win32_Handler *) - eina_inlist_remove(EINA_INLIST_GET(win32_handlers), - EINA_INLIST_GET(wh)); - ECORE_MAGIC_SET(wh, ECORE_MAGIC_NONE); - free(wh); - } - win32_handlers_delete_me = 0; - win32_handler_current = NULL; -#endif -} - -static void _ecore_main_prepare_handlers(void) -{ - Ecore_Fd_Handler *fdh; - - /* call the prepare callback for all handlers */ - EINA_INLIST_FOREACH(fd_handlers, fdh) { - if (!fdh->delete_me && fdh->prep_func) { - fdh->references++; - fdh->prep_func(fdh->prep_data, fdh); - fdh->references--; - } - } -} - -static int _ecore_main_select(double timeout) -{ - struct timeval tv, *t; - fd_set rfds, wfds, exfds; - int max_fd; - int ret; - - t = NULL; - if ((!finite(timeout)) || (timeout == 0.0)) { /* finite() tests for NaN, too big, too small, and infinity. */ - tv.tv_sec = 0; - tv.tv_usec = 0; - t = &tv; - } else if (timeout > 0.0) { - int sec, usec; - -#ifdef FIX_HZ - timeout += (0.5 / HZ); - sec = (int) timeout; - usec = (int) ((timeout - (double) sec) * 1000000); -#else - sec = (int) timeout; - usec = (int) ((timeout - (double) sec) * 1000000); -#endif - tv.tv_sec = sec; - tv.tv_usec = usec; - t = &tv; - } - max_fd = 0; - FD_ZERO(&rfds); - FD_ZERO(&wfds); - FD_ZERO(&exfds); - - /* call the prepare callback for all handlers */ - _ecore_main_prepare_handlers(); -#ifndef HAVE_EPOLL - Ecore_Fd_Handler *fdh; - - EINA_INLIST_FOREACH(fd_handlers, fdh) { - if (!fdh->delete_me) { - if (fdh->flags & ECORE_FD_READ) { - FD_SET(fdh->fd, &rfds); - if (fdh->fd > max_fd) - max_fd = fdh->fd; - } - if (fdh->flags & ECORE_FD_WRITE) { - FD_SET(fdh->fd, &wfds); - if (fdh->fd > max_fd) - max_fd = fdh->fd; - } - if (fdh->flags & ECORE_FD_ERROR) { - FD_SET(fdh->fd, &exfds); - if (fdh->fd > max_fd) - max_fd = fdh->fd; - } - } - } -#else /* HAVE_EPOLL */ - /* polling on the epoll fd will wake when an fd in the epoll set is active */ - FD_SET(epoll_fd, &rfds); - max_fd = epoll_fd; -#endif /* HAVE_EPOLL */ - - if (_ecore_signal_count_get()) - return -1; - - ret = main_loop_select(max_fd + 1, &rfds, &wfds, &exfds, t); - - _ecore_time_loop_time = ecore_time_get(); - if (ret < 0) { -#ifndef _WIN32 - if (errno == EINTR) - return -1; - else if (errno == EBADF) - _ecore_main_fd_handlers_bads_rem(); -#endif - } - if (ret > 0) { -#ifdef HAVE_EPOLL - _ecore_main_fdh_epoll_mark_active(); -#else /* HAVE_EPOLL */ - Ecore_Fd_Handler *fdh; - - EINA_INLIST_FOREACH(fd_handlers, fdh) { - if (!fdh->delete_me) { - if (FD_ISSET(fdh->fd, &rfds)) - fdh->read_active = 1; - if (FD_ISSET(fdh->fd, &wfds)) - fdh->write_active = 1; - if (FD_ISSET(fdh->fd, &exfds)) - fdh->error_active = 1; - } - } -#endif /* HAVE_EPOLL */ - _ecore_main_fd_handlers_cleanup(); -#ifdef _WIN32 - _ecore_main_win32_handlers_cleanup(); -#endif - return 1; - } - return 0; -} - -#ifndef _WIN32 -static void _ecore_main_fd_handlers_bads_rem(void) -{ - Ecore_Fd_Handler *fdh; - Eina_Inlist *l; - int found = 0; - - ERR("Removing bad fds"); - for (l = EINA_INLIST_GET(fd_handlers); l;) { - fdh = (Ecore_Fd_Handler *) l; - l = l->next; - errno = 0; - - if ((fcntl(fdh->fd, F_GETFD) < 0) && (errno == EBADF)) { - ERR("Found bad fd at index %d", fdh->fd); - if (fdh->flags & ECORE_FD_ERROR) { - ERR("Fd set for error! calling user"); - fdh->references++; - if (!fdh->func(fdh->data, fdh)) { - ERR("Fd function err returned 0, remove it"); - fdh->delete_me = 1; - fd_handlers_delete_me = 1; - found++; - } - fdh->references--; - } else { - ERR("Problematic fd found at %d! setting it for delete", fdh->fd); - fdh->delete_me = 1; - fd_handlers_delete_me = 1; - found++; - } - } - } - if (found == 0) { -#ifdef HAVE_GLIB - ERR("No bad fd found. Maybe a foreign fd from glib?"); -#else - ERR("No bad fd found. EEEK!"); -#endif - } - _ecore_main_fd_handlers_cleanup(); -} -#endif - -static void _ecore_main_fd_handlers_cleanup(void) -{ - Ecore_Fd_Handler *fdh; - Eina_Inlist *l; - int deleted_in_use = 0; - - if (!fd_handlers_delete_me) - return; - for (l = EINA_INLIST_GET(fd_handlers); l;) { - fdh = (Ecore_Fd_Handler *) l; - - l = l->next; - if (fdh->delete_me) { - if (fdh->references) { - deleted_in_use++; - continue; - } - - fd_handlers = (Ecore_Fd_Handler *) - eina_inlist_remove(EINA_INLIST_GET - (fd_handlers), - EINA_INLIST_GET(fdh)); - ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE); - free(fdh); - } - } - if (!deleted_in_use) - fd_handlers_delete_me = 0; -} - -#ifdef _WIN32 -static void _ecore_main_win32_handlers_cleanup(void) -{ - Ecore_Win32_Handler *wh; - Eina_Inlist *l; - int deleted_in_use = 0; - - if (!win32_handlers_delete_me) - return; - for (l = EINA_INLIST_GET(win32_handlers); l;) { - wh = (Ecore_Win32_Handler *) l; - - l = l->next; - if (wh->delete_me) { - if (wh->references) { - deleted_in_use++; - continue; - } - - win32_handlers = (Ecore_Win32_Handler *) - eina_inlist_remove(EINA_INLIST_GET - (win32_handlers), - EINA_INLIST_GET(wh)); - ECORE_MAGIC_SET(wh, ECORE_MAGIC_NONE); - free(wh); - } - } - if (!deleted_in_use) - win32_handlers_delete_me = 0; -} -#endif - -static void _ecore_main_fd_handlers_call(void) -{ - if (!fd_handler_current) { - /* regular main loop, start from head */ - fd_handler_current = fd_handlers; - } else { - /* recursive main loop, continue from where we were */ - fd_handler_current = - (Ecore_Fd_Handler *) - EINA_INLIST_GET(fd_handler_current)->next; - } - - while (fd_handler_current) { - Ecore_Fd_Handler *fdh = fd_handler_current; - - if (!fdh->delete_me) { - if ((fdh->read_active) || - (fdh->write_active) || (fdh->error_active)) { - fdh->references++; - if (!fdh->func(fdh->data, fdh)) { - fdh->delete_me = 1; - fd_handlers_delete_me = 1; - } - fdh->references--; - - fdh->read_active = 0; - fdh->write_active = 0; - fdh->error_active = 0; - } - } - - if (fd_handler_current) /* may have changed in recursive main loops */ - fd_handler_current = - (Ecore_Fd_Handler *) - EINA_INLIST_GET(fd_handler_current)->next; - } -} - -static int _ecore_main_fd_handlers_buf_call(void) -{ - Ecore_Fd_Handler *fdh; - int ret; - - ret = 0; - EINA_INLIST_FOREACH(fd_handlers, fdh) { - if (!fdh->delete_me) { - if (fdh->buf_func) { - fdh->references++; - if (fdh->buf_func(fdh->buf_data, fdh)) { - ret |= fdh->func(fdh->data, fdh); - fdh->read_active = 1; - } - fdh->references--; - } - } - } - return ret; -} - -#ifndef USE_G_MAIN_LOOP -static void _ecore_main_loop_iterate_internal(int once_only) -{ - double next_time = -1.0; - int have_event = 0; - int have_signal; - - in_main_loop++; - /* expire any timers */ - while (_ecore_timer_call(_ecore_time_loop_time)); - _ecore_timer_cleanup(); - - /* process signals into events .... */ - while (_ecore_signal_count_get()) - _ecore_signal_call(); - if (_ecore_event_exist()) { - _ecore_idle_enterer_call(); - have_event = 1; - _ecore_main_select(0.0); - _ecore_time_loop_time = ecore_time_get(); - _ecore_timer_enable_new(); - goto process_events; - } - /* call idle enterers ... */ - if (!once_only) - _ecore_idle_enterer_call(); - else { - have_event = have_signal = 0; - - if (_ecore_main_select(0.0) > 0) - have_event = 1; - if (_ecore_signal_count_get() > 0) - have_signal = 1; - if (have_signal || have_event) { - _ecore_time_loop_time = ecore_time_get(); - _ecore_timer_enable_new(); - goto process_events; - } - } - - /* if these calls caused any buffered events to appear - deal with them */ - _ecore_main_fd_handlers_buf_call(); - - /* if there are any - jump to processing them */ - if (_ecore_event_exist()) { - have_event = 1; - _ecore_main_select(0.0); - _ecore_time_loop_time = ecore_time_get(); - _ecore_timer_enable_new(); - goto process_events; - } - if (once_only) { - _ecore_idle_enterer_call(); - in_main_loop--; - _ecore_time_loop_time = ecore_time_get(); - _ecore_timer_enable_new(); - return; - } - - if (_ecore_fps_debug) { - t2 = ecore_time_get(); - if ((t1 > 0.0) && (t2 > 0.0)) - _ecore_fps_debug_runtime_add(t2 - t1); - } - start_loop: - /* any timers re-added as a result of these are allowed to go */ - _ecore_timer_enable_new(); - if (do_quit) { - _ecore_time_loop_time = ecore_time_get(); - in_main_loop--; - _ecore_timer_enable_new(); - return; - } - if (!_ecore_event_exist()) { - /* init flags */ - have_event = have_signal = 0; - next_time = _ecore_timer_next_get(); - /* no timers */ - if (next_time < 0) { - /* no idlers */ - if (!_ecore_idler_exist()) { - if (_ecore_main_select(-1.0) > 0) - have_event = 1; - } - /* idlers */ - else { - for (;;) { - if (!_ecore_idler_call()) - goto start_loop; - if (_ecore_event_exist()) - break; - if (_ecore_main_select(0.0) > 0) - have_event = 1; - if (_ecore_signal_count_get() > 0) - have_signal = 1; - if (have_event || have_signal) - break; - if (_ecore_timers_exists()) - goto start_loop; - if (do_quit) - break; - } - } - } - /* timers */ - else { - /* no idlers */ - if (!_ecore_idler_exist()) { - if (_ecore_main_select(next_time) > 0) - have_event = 1; - } - /* idlers */ - else { - for (;;) { - if (!_ecore_idler_call()) - goto start_loop; - if (_ecore_event_exist()) - break; - if (_ecore_main_select(0.0) > 0) - have_event = 1; - if (_ecore_signal_count_get() > 0) - have_signal = 1; - if (have_event || have_signal) - break; - next_time = - _ecore_timer_next_get(); - if (next_time <= 0) - break; - if (do_quit) - break; - } - } - } - _ecore_time_loop_time = ecore_time_get(); - } - if (_ecore_fps_debug) - t1 = ecore_time_get(); - /* we came out of our "wait state" so idle has exited */ - if (!once_only) - _ecore_idle_exiter_call(); - /* call the fd handler per fd that became alive... */ - /* this should read or write any data to the monitored fd and then */ - /* post events onto the ecore event pipe if necessary */ - process_events: - _ecore_main_fd_handlers_call(); - _ecore_main_fd_handlers_buf_call(); - /* process signals into events .... */ - while (_ecore_signal_count_get()) - _ecore_signal_call(); - /* handle events ... */ - _ecore_event_call(); - _ecore_main_fd_handlers_cleanup(); - - if (once_only) - _ecore_idle_enterer_call(); - in_main_loop--; -} -#endif - -#ifdef _WIN32 -static int -_ecore_main_win32_select(int nfds __UNUSED__, fd_set * readfds, - fd_set * writefds, fd_set * exceptfds, - struct timeval *tv) -{ - HANDLE objects[MAXIMUM_WAIT_OBJECTS]; - int sockets[MAXIMUM_WAIT_OBJECTS]; - Ecore_Fd_Handler *fdh; - Ecore_Win32_Handler *wh; - unsigned int objects_nbr = 0; - unsigned int handles_nbr = 0; - unsigned int events_nbr = 0; - DWORD result; - DWORD timeout; - MSG msg; - unsigned int i; - int res; - - /* Create an event object per socket */ - EINA_INLIST_FOREACH(fd_handlers, fdh) { - WSAEVENT event; - long network_event; - - network_event = 0; - if (FD_ISSET(fdh->fd, readfds)) - network_event |= FD_READ; - if (FD_ISSET(fdh->fd, writefds)) - network_event |= FD_WRITE; - if (FD_ISSET(fdh->fd, exceptfds)) - network_event |= FD_OOB; - - if (network_event) { - event = WSACreateEvent(); - WSAEventSelect(fdh->fd, event, network_event); - objects[objects_nbr] = event; - sockets[events_nbr] = fdh->fd; - events_nbr++; - objects_nbr++; - } - } - - /* store the HANDLEs in the objects to wait for */ - EINA_INLIST_FOREACH(win32_handlers, wh) { - objects[objects_nbr] = wh->h; - handles_nbr++; - objects_nbr++; - } - - /* Empty the queue before waiting */ - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - /* Wait for any message sent or posted to this queue */ - /* or for one of the passed handles be set to signaled. */ - if (!tv) - timeout = INFINITE; - else - timeout = - (DWORD) ((tv->tv_sec * 1000.0) + - (tv->tv_usec / 1000.0)); - - if (timeout == 0) - return 0; - - result = - MsgWaitForMultipleObjects(objects_nbr, - (const HANDLE *) objects, EINA_FALSE, - timeout, QS_ALLINPUT); - - FD_ZERO(readfds); - FD_ZERO(writefds); - FD_ZERO(exceptfds); - - /* The result tells us the type of event we have. */ - if (result == WAIT_FAILED) { - char *msg; - - msg = evil_last_error_get(); - ERR(" * %s\n", msg); - free(msg); - res = -1; - } else if (result == WAIT_TIMEOUT) { - /* ERR("time out\n"); */ - res = 0; - } else if (result == (WAIT_OBJECT_0 + objects_nbr)) { - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - - res = 0; - } else if ((result >= 0) && (result < WAIT_OBJECT_0 + events_nbr)) { - WSANETWORKEVENTS network_event; - - WSAEnumNetworkEvents(sockets[result], objects[result], - &network_event); - - if (network_event.lNetworkEvents & FD_READ) - FD_SET(sockets[result], readfds); - if (network_event.lNetworkEvents & FD_WRITE) - FD_SET(sockets[result], writefds); - if (network_event.lNetworkEvents & FD_OOB) - FD_SET(sockets[result], exceptfds); - - res = 1; - } else if ((result >= (WAIT_OBJECT_0 + events_nbr)) && - (result < (WAIT_OBJECT_0 + objects_nbr))) { - if (!win32_handler_current) { - /* regular main loop, start from head */ - win32_handler_current = win32_handlers; - } else { - /* recursive main loop, continue from where we were */ - win32_handler_current = - (Ecore_Win32_Handler *) - EINA_INLIST_GET(win32_handler_current)->next; - } - - while (win32_handler_current) { - wh = win32_handler_current; - - if (objects[result - WAIT_OBJECT_0] == wh->h) { - if (!wh->delete_me) { - wh->references++; - if (!wh->func(wh->data, wh)) { - wh->delete_me = 1; - win32_handlers_delete_me = - 1; - } - wh->references--; - } - } - if (win32_handler_current) /* may have changed in recursive main loops */ - win32_handler_current = - (Ecore_Win32_Handler *) - EINA_INLIST_GET - (win32_handler_current)->next; - } - res = 1; - } else { - ERR("unknown result...\n"); - res = -1; - } - - /* Remove event objects again */ - for (i = 0; i < events_nbr; i++) - WSACloseEvent(objects[i]); - - return res; -} -#endif diff --git a/tests/suite/ecore/src/lib/ecore_pipe.c b/tests/suite/ecore/src/lib/ecore_pipe.c deleted file mode 100644 index 123cab681b..0000000000 --- a/tests/suite/ecore/src/lib/ecore_pipe.c +++ /dev/null @@ -1,568 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include - -#ifdef HAVE_EVIL -#include -#endif - -#include "Ecore.h" -#include "ecore_private.h" - -/* How of then we should retry to write to the pipe */ -#define ECORE_PIPE_WRITE_RETRY 6 - -/* - * On Windows, pipe() is implemented with sockets. - * Contrary to Linux, Windows uses different functions - * for sockets and fd's: write() is for fd's and send - * is for sockets. So I need to put some win32 code - * here. I can't think of a solution where the win32 - * code is in Evil and not here. - */ - -#ifdef _WIN32 - -#include - -#define pipe_write(fd, buffer, size) send((fd), (char *)(buffer), size, 0) -#define pipe_read(fd, buffer, size) recv((fd), (char *)(buffer), size, 0) -#define pipe_close(fd) closesocket(fd) -#define PIPE_FD_INVALID INVALID_SOCKET -#define PIPE_FD_ERROR SOCKET_ERROR - -#else - -#include -#include - -#define pipe_write(fd, buffer, size) write((fd), buffer, size) -#define pipe_read(fd, buffer, size) read((fd), buffer, size) -#define pipe_close(fd) close(fd) -#define PIPE_FD_INVALID -1 -#define PIPE_FD_ERROR -1 - -#endif /* ! _WIN32 */ - -struct _Ecore_Pipe { - ECORE_MAGIC; - int fd_read; - int fd_write; - Ecore_Fd_Handler *fd_handler; - const void *data; - Ecore_Pipe_Cb handler; - unsigned int len; - size_t already_read; - void *passed_data; -}; - - -static Eina_Bool _ecore_pipe_read(void *data, - Ecore_Fd_Handler * fd_handler); - -/** - * @defgroup Ecore_Pipe_Group Pipe wrapper - * - * These functions wrap the pipe / write / read functions to - * easily integrate a loop that is in its own thread to the ecore - * main loop. - * - * The ecore_pipe_add() function creates file descriptors (sockets on - * Windows) and attach an handle to the ecore main loop. That handle is - * called when data is read in the pipe. To write data in the pipe, - * just call ecore_pipe_write(). When you are done, just call - * ecore_pipe_del(). - * - * Here is an example that uses the pipe wrapper with a Gstreamer - * pipeline. For each decoded frame in the Gstreamer thread, a handle - * is called in the ecore thread. - * - * @code#include - * #include - * - * static int nbr = 0; - * - * static GstElement *_buid_pipeline (gchar *filename, Ecore_Pipe *pipe); - * - * static void new_decoded_pad_cb (GstElement *demuxer, - * GstPad *new_pad, - * gpointer user_data); - * - * static void handler(void *data, void *buf, unsigned int len) - * { - * GstBuffer *buffer = *((GstBuffer **)buf); - * - * printf ("handler : %p\n", buffer); - * printf ("frame : %d %p %lld %p\n", nbr++, data, (long long)GST_BUFFER_DURATION(buffer), buffer); - * gst_buffer_unref (buffer); - * } - * - * - * static void handoff (GstElement* object, - * GstBuffer* arg0, - * GstPad* arg1, - * gpointer user_data) - * { - * Ecore_Pipe *pipe; - * - * pipe = (Ecore_Pipe *)user_data; - * printf ("handoff : %p\n", arg0); - * gst_buffer_ref (arg0); - * ecore_pipe_write(pipe, &arg0, sizeof(arg0)); - * } - * - * int - * main (int argc, char *argv[]) - * { - * GstElement *pipeline; - * char *filename; - * Ecore_Pipe *pipe; - * - * gst_init (&argc, &argv); - * - * if (!ecore_init ()) - * { - * gst_deinit (); - * return 0; - * } - * - * pipe = ecore_pipe_add (handler); - * if (!pipe) - * { - * ecore_shutdown (); - * gst_deinit (); - * return 0; - * } - * - * if (argc < 2) { - * g_print ("usage: %s file.avi\n", argv[0]); - * ecore_pipe_del (pipe); - * ecore_shutdown (); - * gst_deinit (); - * return 0; - * } - * filename = argv[1]; - * - * pipeline = _buid_pipeline (filename, pipe); - * if (!pipeline) { - * g_print ("Error during the pipeline building\n"); - * ecore_pipe_del (pipe); - * ecore_shutdown (); - * gst_deinit (); - * return -1; - * } - * - * gst_element_set_state (pipeline, GST_STATE_PLAYING); - * - * ecore_main_loop_begin(); - * - * ecore_pipe_del (pipe); - * ecore_shutdown (); - * gst_deinit (); - * - * return 0; - * } - * - * static void - * new_decoded_pad_cb (GstElement *demuxer, - * GstPad *new_pad, - * gpointer user_data) - * { - * GstElement *decoder; - * GstPad *pad; - * GstCaps *caps; - * gchar *str; - * - * caps = gst_pad_get_caps (new_pad); - * str = gst_caps_to_string (caps); - * - * if (g_str_has_prefix (str, "video/")) { - * decoder = GST_ELEMENT (user_data); - * - * pad = gst_element_get_pad (decoder, "sink"); - * if (GST_PAD_LINK_FAILED (gst_pad_link (new_pad, pad))) { - * g_warning ("Failed to link %s:%s to %s:%s", GST_DEBUG_PAD_NAME (new_pad), - * GST_DEBUG_PAD_NAME (pad)); - * } - * } - * g_free (str); - * gst_caps_unref (caps); - * } - * - * static GstElement * - * _buid_pipeline (gchar *filename, Ecore_Pipe *pipe) - * { - * GstElement *pipeline; - * GstElement *filesrc; - * GstElement *demuxer; - * GstElement *decoder; - * GstElement *sink; - GstStateChangeReturn res; - * - * pipeline = gst_pipeline_new ("pipeline"); - * if (!pipeline) - * return NULL; - * - * filesrc = gst_element_factory_make ("filesrc", "filesrc"); - * if (!filesrc) { - * printf ("no filesrc"); - * goto failure; - * } - * g_object_set (G_OBJECT (filesrc), "location", filename, NULL); - * - * demuxer = gst_element_factory_make ("oggdemux", "demuxer"); - * if (!demuxer) { - * printf ("no demux"); - * goto failure; - * } - * - * decoder = gst_element_factory_make ("theoradec", "decoder"); - * if (!decoder) { - * printf ("no dec"); - * goto failure; - * } - * - * g_signal_connect (demuxer, "pad-added", - * G_CALLBACK (new_decoded_pad_cb), decoder); - * - * sink = gst_element_factory_make ("fakesink", "sink"); - * if (!sink) { - * printf ("no sink"); - * goto failure; - * } - * g_object_set (G_OBJECT (sink), "sync", EINA_TRUE, NULL); - * g_object_set (G_OBJECT (sink), "signal-handoffs", EINA_TRUE, NULL); - * g_signal_connect (sink, "handoff", - * G_CALLBACK (handoff), pipe); - * - * gst_bin_add_many (GST_BIN (pipeline), - * filesrc, demuxer, decoder, sink, NULL); - * - * if (!gst_element_link (filesrc, demuxer)) - * goto failure; - * if (!gst_element_link (decoder, sink)) - * goto failure; - * - * res = gst_element_set_state (pipeline, GST_STATE_PAUSED); - * if (res == GST_STATE_CHANGE_FAILURE) - * goto failure; - * - * res = gst_element_get_state( pipeline, NULL, NULL, GST_CLOCK_TIME_NONE ); - * if (res != GST_STATE_CHANGE_SUCCESS) - * goto failure; - * - * return pipeline; - * - * failure: - * gst_object_unref (GST_OBJECT (pipeline)); - * return NULL; - * } - * @endcode - */ - - -/** - * Create two file descriptors (sockets on Windows). Add - * a callback that will be called when the file descriptor that - * is listened receives data. An event is also put in the event - * queue when data is received. - * - * @param handler The handler called when data is received. - * @param data Data to pass to @p handler when it is called. - * @return A newly created Ecore_Pipe object if successful. - * @c NULL otherwise. - * @ingroup Ecore_Pipe_Group - */ -EAPI Ecore_Pipe *ecore_pipe_add(Ecore_Pipe_Cb handler, const void *data) -{ - Ecore_Pipe *p; - int fds[2]; - - if (!handler) - return NULL; - - p = (Ecore_Pipe *) calloc(1, sizeof(Ecore_Pipe)); - if (!p) - return NULL; - - if (pipe(fds)) { - free(p); - return NULL; - } - - ECORE_MAGIC_SET(p, ECORE_MAGIC_PIPE); - p->fd_read = fds[0]; - p->fd_write = fds[1]; - p->handler = handler; - p->data = data; - - fcntl(p->fd_read, F_SETFL, O_NONBLOCK); - p->fd_handler = ecore_main_fd_handler_add(p->fd_read, - ECORE_FD_READ, - _ecore_pipe_read, - p, NULL, NULL); - return p; -} - -/** - * Free an Ecore_Pipe object created with ecore_pipe_add(). - * - * @param p The Ecore_Pipe object to be freed. - * @return The pointer to the private data - * @ingroup Ecore_Pipe_Group - */ -EAPI void *ecore_pipe_del(Ecore_Pipe * p) -{ - void *data; - - if (!ECORE_MAGIC_CHECK(p, ECORE_MAGIC_PIPE)) { - ECORE_MAGIC_FAIL(p, ECORE_MAGIC_PIPE, "ecore_pipe_del"); - return NULL; - } - if (p->fd_handler) - ecore_main_fd_handler_del(p->fd_handler); - if (p->fd_read != PIPE_FD_INVALID) - pipe_close(p->fd_read); - if (p->fd_write != PIPE_FD_INVALID) - pipe_close(p->fd_write); - data = (void *) p->data; - free(p); - return data; -} - -/** - * Close the read end of an Ecore_Pipe object created with ecore_pipe_add(). - * - * @param p The Ecore_Pipe object. - * @ingroup Ecore_Pipe_Group - */ -EAPI void ecore_pipe_read_close(Ecore_Pipe * p) -{ - if (!ECORE_MAGIC_CHECK(p, ECORE_MAGIC_PIPE)) { - ECORE_MAGIC_FAIL(p, ECORE_MAGIC_PIPE, - "ecore_pipe_read_close"); - return; - } - ecore_main_fd_handler_del(p->fd_handler); - p->fd_handler = NULL; - pipe_close(p->fd_read); - p->fd_read = PIPE_FD_INVALID; -} - -/** - * Close the write end of an Ecore_Pipe object created with ecore_pipe_add(). - * - * @param p The Ecore_Pipe object. - * @ingroup Ecore_Pipe_Group - */ -EAPI void ecore_pipe_write_close(Ecore_Pipe * p) -{ - if (!ECORE_MAGIC_CHECK(p, ECORE_MAGIC_PIPE)) { - ECORE_MAGIC_FAIL(p, ECORE_MAGIC_PIPE, - "ecore_pipe_write_close"); - return; - } - pipe_close(p->fd_write); - p->fd_write = PIPE_FD_INVALID; -} - -/** - * Write on the file descriptor the data passed as parameter. - * - * @param p The Ecore_Pipe object. - * @param buffer The data to write into the pipe. - * @param nbytes The size of the @p buffer in bytes - * @return Returns EINA_TRUE on a successful write, EINA_FALSE on an error - * @ingroup Ecore_Pipe_Group - */ -EAPI Eina_Bool -ecore_pipe_write(Ecore_Pipe * p, const void *buffer, unsigned int nbytes) -{ - ssize_t ret; - size_t already_written = 0; - int retry = ECORE_PIPE_WRITE_RETRY; - - if (!ECORE_MAGIC_CHECK(p, ECORE_MAGIC_PIPE)) { - ECORE_MAGIC_FAIL(p, ECORE_MAGIC_PIPE, "ecore_pipe_write"); - return EINA_FALSE; - } - - if (p->fd_write == PIPE_FD_INVALID) - return EINA_FALSE; - - /* First write the len into the pipe */ - do { - ret = pipe_write(p->fd_write, &nbytes, sizeof(nbytes)); - if (ret == sizeof(nbytes)) { - retry = ECORE_PIPE_WRITE_RETRY; - break; - } else if (ret > 0) { - /* XXX What should we do here? */ - ERR("The length of the data was not written complete" " to the pipe"); - return EINA_FALSE; - } else if (ret == PIPE_FD_ERROR && errno == EPIPE) { - pipe_close(p->fd_write); - p->fd_write = PIPE_FD_INVALID; - return EINA_FALSE; - } else if (ret == PIPE_FD_ERROR && errno == EINTR) - /* try it again */ - ; - else { - ERR("An unhandled error (ret: %zd errno: %d)" - "occurred while writing to the pipe the length", - ret, errno); - } - } - while (retry--); - - if (retry != ECORE_PIPE_WRITE_RETRY) - return EINA_FALSE; - - /* and now pass the data to the pipe */ - do { - ret = pipe_write(p->fd_write, - ((unsigned char *) buffer) + - already_written, - nbytes - already_written); - - if (ret == (ssize_t) (nbytes - already_written)) - return EINA_TRUE; - else if (ret >= 0) { - already_written -= ret; - continue; - } else if (ret == PIPE_FD_ERROR && errno == EPIPE) { - pipe_close(p->fd_write); - p->fd_write = PIPE_FD_INVALID; - return EINA_FALSE; - } else if (ret == PIPE_FD_ERROR && errno == EINTR) - /* try it again */ - ; - else { - ERR("An unhandled error (ret: %zd errno: %d)" - "occurred while writing to the pipe the length", - ret, errno); - } - } - while (retry--); - - return EINA_FALSE; -} - -/* Private function */ - -static Eina_Bool -_ecore_pipe_read(void *data, Ecore_Fd_Handler * fd_handler __UNUSED__) -{ - Ecore_Pipe *p; - double start_time; - - p = (Ecore_Pipe *) data; - start_time = ecore_time_get(); - - do { - ssize_t ret; - - /* if we already have read some data we don't need to read the len - * but to finish the already started job - */ - if (p->len == 0) { - /* read the len of the passed data */ - ret = - pipe_read(p->fd_read, &p->len, sizeof(p->len)); - - /* catch the non error case first */ - if (ret == sizeof(p->len)); - else if (ret > 0) { - /* XXX What should we do here? */ - ERR("Only read %zd bytes from the pipe, although" " we need to read %zd bytes.", ret, sizeof(p->len)); - } else if (ret == 0) { - p->handler((void *) p->data, NULL, 0); - pipe_close(p->fd_read); - p->fd_read = PIPE_FD_INVALID; - p->fd_handler = NULL; - return ECORE_CALLBACK_CANCEL; - } -#ifndef _WIN32 - else if ((ret == PIPE_FD_ERROR) - && ((errno == EINTR) - || (errno == EAGAIN))) - return ECORE_CALLBACK_RENEW; - else { - ERR("An unhandled error (ret: %zd errno: %d)" "occurred while reading from the pipe the length", ret, errno); - return ECORE_CALLBACK_RENEW; - } -#else - else { /* ret == PIPE_FD_ERROR is the only other case on Windows */ - - if (WSAGetLastError() != WSAEWOULDBLOCK) { - p->handler((void *) p->data, NULL, - 0); - pipe_close(p->fd_read); - p->fd_read = PIPE_FD_INVALID; - p->fd_handler = NULL; - return ECORE_CALLBACK_CANCEL; - } - } -#endif - } - - if (!p->passed_data) - p->passed_data = malloc(p->len); - - /* and read the passed data */ - ret = pipe_read(p->fd_read, - ((unsigned char *) p->passed_data) + - p->already_read, p->len - p->already_read); - - /* catch the non error case first */ - if (ret == (ssize_t) (p->len - p->already_read)) { - p->handler((void *) p->data, p->passed_data, - p->len); - free(p->passed_data); - /* reset all values to 0 */ - p->passed_data = NULL; - p->already_read = 0; - p->len = 0; - } else if (ret >= 0) { - p->already_read += ret; - return ECORE_CALLBACK_RENEW; - } else if (ret == 0) { - p->handler((void *) p->data, NULL, 0); - pipe_close(p->fd_read); - p->fd_read = PIPE_FD_INVALID; - p->fd_handler = NULL; - return ECORE_CALLBACK_CANCEL; - } -#ifndef _WIN32 - else if (ret == PIPE_FD_ERROR - && (errno == EINTR || errno == EAGAIN)) - return ECORE_CALLBACK_RENEW; - else { - ERR("An unhandled error (ret: %zd errno: %d)" - "occurred while reading from the pipe the data", - ret, errno); - return ECORE_CALLBACK_RENEW; - } -#else - else { /* ret == PIPE_FD_ERROR is the only other case on Windows */ - - if (WSAGetLastError() != WSAEWOULDBLOCK) { - p->handler((void *) p->data, NULL, 0); - pipe_close(p->fd_read); - p->fd_read = PIPE_FD_INVALID; - p->fd_handler = NULL; - return ECORE_CALLBACK_CANCEL; - } else - break; - } -#endif - } - while (ecore_time_get() - start_time < - ecore_animator_frametime_get()); - - return ECORE_CALLBACK_RENEW; -} diff --git a/tests/suite/ecore/src/lib/ecore_poll.c b/tests/suite/ecore/src/lib/ecore_poll.c deleted file mode 100644 index 0c3c208692..0000000000 --- a/tests/suite/ecore/src/lib/ecore_poll.c +++ /dev/null @@ -1,446 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "Ecore.h" -#include "ecore_private.h" - - -struct _Ecore_Poller { - EINA_INLIST; - ECORE_MAGIC; - int ibit; - unsigned char delete_me:1; - Ecore_Task_Cb func; - void *data; -}; - - -static Ecore_Timer *timer = NULL; -static int min_interval = -1; -static int interval_incr = 0; -static int at_tick = 0; -static int just_added_poller = 0; -static int poller_delete_count = 0; -static int poller_walking = 0; -static double poll_interval = 0.125; -static double poll_cur_interval = 0.0; -static double last_tick = 0.0; -static Ecore_Poller *pollers[16] = { - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -static unsigned short poller_counters[16] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static void _ecore_poller_next_tick_eval(void); -static Eina_Bool _ecore_poller_cb_timer(void *data); - -static void _ecore_poller_next_tick_eval(void) -{ - int i; - double interval; - - min_interval = -1; - for (i = 0; i < 15; i++) { - if (pollers[i]) { - min_interval = i; - break; - } - } - if (min_interval < 0) { - /* no pollers */ - if (timer) { - ecore_timer_del(timer); - timer = NULL; - } - return; - } - interval_incr = (1 << min_interval); - interval = interval_incr * poll_interval; - /* we are at the tick callback - so no need to do inter-tick adjustments - * so we can fasttrack this as t -= last_tick in theory is 0.0 (though - * in practice it will be a very very very small value. also the tick - * callback will adjust the timer interval at the end anyway */ - if (at_tick) { - if (!timer) - timer = - ecore_timer_add(interval, - _ecore_poller_cb_timer, NULL); - } else { - double t; - - if (!timer) - timer = - ecore_timer_add(interval, - _ecore_poller_cb_timer, NULL); - else { - t = ecore_time_get(); - if (interval != poll_cur_interval) { - t -= last_tick; /* time since we last ticked */ - /* delete the timer and reset it to tick off in the new - * time interval. at the tick this will be adjusted */ - ecore_timer_del(timer); - timer = ecore_timer_add(interval - t, - _ecore_poller_cb_timer, - NULL); - } - } - } - poll_cur_interval = interval; -} - -static Eina_Bool _ecore_poller_cb_timer(void *data __UNUSED__) -{ - int i; - Ecore_Poller *poller, *l; - int changes = 0; - - at_tick++; - last_tick = ecore_time_get(); - /* we have 16 counters - each incriments every time the poller counter - * "ticks". it incriments by the minimum interval (which can be 1, 2, 4, - * 7, 16 etc. up to 32768) */ - for (i = 0; i < 15; i++) { - poller_counters[i] += interval_incr; - /* wrap back to 0 if we exceed out loop count for the counter */ - if (poller_counters[i] >= (1 << i)) - poller_counters[i] = 0; - } - - just_added_poller = 0; - /* walk the pollers now */ - poller_walking++; - for (i = 0; i < 15; i++) { - /* if the counter is @ 0 - this means that counter "went off" this - * tick interval, so run all pollers hooked to that counter */ - if (poller_counters[i] == 0) { - EINA_INLIST_FOREACH(pollers[i], poller) { - if (!poller->delete_me) { - if (!poller->func(poller->data)) { - if (!poller->delete_me) { - poller->delete_me = - 1; - poller_delete_count++; - } - } - } - } - } - } - poller_walking--; - - /* handle deletes afterwards */ - if (poller_delete_count > 0) { - /* FIXME: walk all pollers and remove deleted ones */ - for (i = 0; i < 15; i++) { - for (l = pollers[i]; l;) { - poller = l; - l = (Ecore_Poller *) EINA_INLIST_GET(l)-> - next; - if (poller->delete_me) { - pollers[i] = - (Ecore_Poller *) - eina_inlist_remove - (EINA_INLIST_GET(pollers[i]), - EINA_INLIST_GET(poller)); - free(poller); - poller_delete_count--; - changes++; - if (poller_delete_count <= 0) - break; - } - } - if (poller_delete_count <= 0) - break; - } - } - /* if we deleted or added any pollers, then we need to re-evaluate our - * minimum poll interval */ - if ((changes > 0) || (just_added_poller > 0)) - _ecore_poller_next_tick_eval(); - - just_added_poller = 0; - poller_delete_count = 0; - - at_tick--; - - /* if the timer was deleted then there is no point returning 1 - ambiguous - * if we do as it im plies "keep running me" but we have been deleted - * anyway */ - if (!timer) - return ECORE_CALLBACK_CANCEL; - - /* adjust interval */ - ecore_timer_interval_set(timer, poll_cur_interval); - return ECORE_CALLBACK_RENEW; -} - -/** - * @defgroup Ecore_Poll_Group Ecore Poll Functions - * - * These functions are for the need to poll information, but provide a shared - * abstracted API to pool such polling to minimise wakeup and ensure all the - * polling happens in as few spots as possible areound a core poll interval. - * For now only 1 core poller type is supprted: ECORE_POLLER_CORE - */ - - -/** - * Sets the time between ticks (in seconds) for the given ticker clock. - * @param type The ticker type to adjust - * @param poll_time The time (in seconds) between ticks of the clock - * @ingroup Ecore_Poller_Group - * - * This will adjust the time between ticks of the given ticker type defined - * by @p type to the time period defined by @p poll_time. - */ -EAPI void -ecore_poller_poll_interval_set(Ecore_Poller_Type type __UNUSED__, - double poll_time) -{ - poll_interval = poll_time; - _ecore_poller_next_tick_eval(); -} - -/** - * Gets the time between ticks (in seconds) for the given ticker clock. - * @param type The ticker type to query - * @return The time in seconds between ticks of the ticker clock - * @ingroup Ecore_Poller_Group - * - * This will get the time between ticks of the specifider ticker clock. - */ -EAPI double -ecore_poller_poll_interval_get(Ecore_Poller_Type type __UNUSED__) -{ - return poll_interval; -} - -/** - * Creates a poller to call the given function at a particular tick interval. - * @param type The ticker type to attach the poller to - * @param interval The poll interval - * @param func The given function. If @p func returns 1, the poller is - * rescheduled for the next tick interval. - * @param data Data to pass to @p func when it is called. - * @return A poller object on success. @c NULL on failure. - * @ingroup Ecore_Poller_Group - * - * This function adds a poller callback that is to be called regularly - * along with all other poller callbacks so the pollers are synchronized with - * all other pollers running off the same poller type and at the same tick - * interval. This should be used for polling things when polling is desired - * or required, and you do not have specific requirements on the exact times - * to poll and want to avoid extra process wakeups for polling. This will - * save power as the CPU has more of a chance to go into a low power state - * the longer it is asleep for, so this should be used if you are at all - * power conscious. - * - * The @p type parameter defines the poller tick type (there is a virtual - * clock ticking all the time - though ecore avoids making it tick when - * there will not be any work to do at that tick point). There is only one - * ticker at the moment - that is ECORE_POLLER_CORE. This is here for future - * expansion if multiple clocks with different frequencies are really required. - * The default time between ticks for the ECORE_POLLER_CORE ticker is 0.125 - * seconds. - * - * The @p interval is the number of ticker ticks that will pass by in between - * invocations of the @p func callback. This must be between 1 and 32768 - * inclusive, and must be a power of 2 (i.e. 1, 2, 4, 8, 16, ... 16384, 32768). - * If it is 1, then the function will be called every tick. if it is 2, then it - * will be called every 2nd tick, if it is 8, then every 8th tick etc. Exactly - * which tick is undefined, as only the interval between calls can be defined. - * Ecore will endeavour to keep pollers synchronised and to call as many in - * 1 wakeup event as possible. - * - * This function adds a poller and returns its handle on success and NULL on - * failure. The function @p func will be called at tick intervals described - * above. The function will be passed the @p data pointer as its parameter. - * - * When the poller @p func is called, it must return a value of either - * 1 (or ECORE_CALLBACK_RENEW) or 0 (or ECORE_CALLBACK_CANCEL). If it - * returns 1, it will be called again at the next tick, or if it returns - * 0 it will be deleted automatically making any references/handles for it - * invalid. - */ -EAPI Ecore_Poller *ecore_poller_add(Ecore_Poller_Type type __UNUSED__, - int interval, Ecore_Task_Cb func, - const void *data) -{ - Ecore_Poller *poller; - int ibit; - - if (!func) - return NULL; - if (interval < 1) - interval = 1; - - poller = calloc(1, sizeof(Ecore_Poller)); - if (!poller) - return NULL; - ECORE_MAGIC_SET(poller, ECORE_MAGIC_POLLER); - /* interval MUST be a power of 2, so enforce it */ - if (interval < 1) - interval = 1; - ibit = -1; - while (interval != 0) { - ibit++; - interval >>= 1; - } - /* only allow up to 32768 - i.e. ibit == 15, so limit it */ - if (ibit > 15) - ibit = 15; - - poller->ibit = ibit; - poller->func = func; - poller->data = (void *) data; - pollers[poller->ibit] = - (Ecore_Poller *) - eina_inlist_prepend(EINA_INLIST_GET(pollers[poller->ibit]), - EINA_INLIST_GET(poller)); - if (poller_walking) - just_added_poller++; - else - _ecore_poller_next_tick_eval(); - return poller; -} - -/** - * Changes the polling interval rate of @p poller. - * - * @param poller The Ecore_Poller to change the interval of - * @param interval The tick interval to set; must be a power of 2 but <= 32768 - * @return Returns true on success, false on failure - * - * This allows the changing of a poller's polling interval. It is useful when you want to alter - * a poll rate without deleting and re-creating a poller. - * @ingroup Ecore_Poller_Group - */ -EAPI Eina_Bool -ecore_poller_poller_interval_set(Ecore_Poller * poller, int interval) -{ - int ibit; - - if (!ECORE_MAGIC_CHECK(poller, ECORE_MAGIC_POLLER)) { - ECORE_MAGIC_FAIL(poller, ECORE_MAGIC_POLLER, - "ecore_poller_poller_interval_set"); - return EINA_FALSE; - } - - /* interval MUST be a power of 2, so enforce it */ - if (interval < 1) - interval = 1; - ibit = -1; - while (interval != 0) { - ibit++; - interval >>= 1; - } - /* only allow up to 32768 - i.e. ibit == 15, so limit it */ - if (ibit > 15) - ibit = 15; - /* if interval specified is the same as interval set, return true without wasting time */ - if (poller->ibit == ibit) - return EINA_TRUE; - pollers[poller->ibit] = - (Ecore_Poller *) - eina_inlist_remove(EINA_INLIST_GET(pollers[poller->ibit]), - EINA_INLIST_GET(poller)); - poller->ibit = ibit; - pollers[poller->ibit] = - (Ecore_Poller *) - eina_inlist_prepend(EINA_INLIST_GET(pollers[poller->ibit]), - EINA_INLIST_GET(poller)); - if (poller_walking) - just_added_poller++; - else - _ecore_poller_next_tick_eval(); - return EINA_TRUE; -} - -/** - * Gets the polling interval rate of @p poller. - * - * @param poller The Ecore_Poller to change the interval of - * @return Returns the interval, in ticks, that @p poller polls at - * - * This returns a poller's polling interval, or 0 on error. - * @ingroup Ecore_Poller_Group - */ -EAPI int ecore_poller_poller_interval_get(Ecore_Poller * poller) -{ - int ibit, interval = 1; - - if (!ECORE_MAGIC_CHECK(poller, ECORE_MAGIC_POLLER)) { - ECORE_MAGIC_FAIL(poller, ECORE_MAGIC_POLLER, - "ecore_poller_poller_interval_get"); - return 0; - } - - ibit = poller->ibit; - while (ibit != 0) { - ibit--; - interval <<= 1; - } - return interval; -} - -/** - * Delete the specified poller from the timer list. - * @param poller The poller to delete. - * @return The data pointer set for the timer when @ref ecore_poller_add was - * called. @c NULL is returned if the function is unsuccessful. - * @ingroup Ecore_Poller_Group - * - * Note: @p poller must be a valid handle. If the poller function has already - * returned 0, the handle is no longer valid (and does not need to be delete). - */ -EAPI void *ecore_poller_del(Ecore_Poller * poller) -{ - void *data; - - if (!ECORE_MAGIC_CHECK(poller, ECORE_MAGIC_POLLER)) { - ECORE_MAGIC_FAIL(poller, ECORE_MAGIC_POLLER, - "ecore_poller_del"); - return NULL; - } - /* we are walking the poller list - a bad idea to remove from it while - * walking it, so just flag it as delete_me and come back to it after - * the loop has finished */ - if (poller_walking > 0) { - poller_delete_count++; - poller->delete_me = 1; - return poller->data; - } - /* not in loop so safe - delete immediately */ - data = poller->data; - pollers[poller->ibit] = - (Ecore_Poller *) - eina_inlist_remove(EINA_INLIST_GET(pollers[poller->ibit]), - EINA_INLIST_GET(poller)); - free(poller); - _ecore_poller_next_tick_eval(); - return data; -} - -void _ecore_poller_shutdown(void) -{ - int i; - Ecore_Poller *poller; - - for (i = 0; i < 15; i++) { - while ((poller = pollers[i])) { - pollers[i] = - (Ecore_Poller *) - eina_inlist_remove(EINA_INLIST_GET(pollers[i]), - EINA_INLIST_GET(pollers - [i])); - free(poller); - } - } -} diff --git a/tests/suite/ecore/src/lib/ecore_private.h b/tests/suite/ecore/src/lib/ecore_private.h deleted file mode 100644 index d487739679..0000000000 --- a/tests/suite/ecore/src/lib/ecore_private.h +++ /dev/null @@ -1,224 +0,0 @@ -#ifndef _ECORE_PRIVATE_H -#define _ECORE_PRIVATE_H - -extern int _ecore_log_dom; -#ifdef _ECORE_DEFAULT_LOG_DOM -#undef _ECORE_DEFAULT_LOG_DOM -#endif -#define _ECORE_DEFAULT_LOG_DOM _ecore_log_dom - -#ifdef ECORE_DEFAULT_LOG_COLOR -#undef ECORE_DEFAULT_LOG_COLOR -#endif -#define ECORE_DEFAULT_LOG_COLOR EINA_COLOR_BLUE - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_ECORE_DEFAULT_LOG_DOM, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_ECORE_DEFAULT_LOG_DOM, __VA_ARGS__) - -#ifdef INF -#undef INF -#endif -#define INF(...) EINA_LOG_DOM_INFO(_ECORE_DEFAULT_LOG_DOM, __VA_ARGS__) - -#ifdef WRN -#undef WRN -#endif -#define WRN(...) EINA_LOG_DOM_WARN(_ECORE_DEFAULT_LOG_DOM, __VA_ARGS__) - -#ifdef CRIT -#undef CRIT -#endif -#define CRIT(...) EINA_LOG_DOM_CRIT(_ECORE_DEFAULT_LOG_DOM, __VA_ARGS__) - -#ifndef PATH_MAX -#define PATH_MAX 4096 -#endif - -#ifndef MIN -#define MIN(x, y) (((x) > (y)) ? (y) : (x)) -#endif - -#ifndef MAX -#define MAX(x, y) (((x) > (y)) ? (x) : (y)) -#endif - -#ifndef ABS -#define ABS(x) ((x) < 0 ? -(x) : (x)) -#endif - -#ifndef CLAMP -#define CLAMP(x, min, max) (((x) > (max)) ? (max) : (((x) < (min)) ? (min) : (x))) -#endif - -#define EVAS_FRAME_QUEUING 1 /* for test */ - -#define READBUFSIZ 65536 - -#define ECORE_MAGIC_NONE 0x1234fedc -#define ECORE_MAGIC_EXE 0xf7e812f5 -#define ECORE_MAGIC_TIMER 0xf7d713f4 -#define ECORE_MAGIC_IDLER 0xf7c614f3 -#define ECORE_MAGIC_IDLE_ENTERER 0xf7b515f2 -#define ECORE_MAGIC_IDLE_EXITER 0xf7601afd -#define ECORE_MAGIC_FD_HANDLER 0xf7a416f1 -#define ECORE_MAGIC_EVENT_HANDLER 0xf79317f0 -#define ECORE_MAGIC_EVENT_FILTER 0xf78218ff -#define ECORE_MAGIC_EVENT 0xf77119fe -#define ECORE_MAGIC_ANIMATOR 0xf7643ea5 -#define ECORE_MAGIC_POLLER 0xf7568127 -#define ECORE_MAGIC_PIPE 0xf7458226 -#define ECORE_MAGIC_WIN32_HANDLER 0xf7e8f1a3 -#define ECORE_MAGIC_JOB 0x76543210 - - -#define ECORE_MAGIC Ecore_Magic __magic - -#define ECORE_MAGIC_SET(d, m) (d)->__magic = (m) -#define ECORE_MAGIC_CHECK(d, m) ((d) && ((d)->__magic == (m))) -#define ECORE_MAGIC_FAIL(d, m, fn) _ecore_magic_fail((d), (d) ? (d)->__magic : 0, (m), (fn)); - -/* undef the following, we want our version */ -#undef FREE -#define FREE(ptr) free(ptr); ptr = NULL; - -#undef IF_FREE -#define IF_FREE(ptr) if (ptr) free(ptr); ptr = NULL; - -#undef IF_FN_DEL -#define IF_FN_DEL(_fn, ptr) if (ptr) { _fn(ptr); ptr = NULL; } - -EAPI void ecore_print_warning(const char *function, const char *sparam); - -/* convenience macros for checking pointer parameters for non-NULL */ -#undef CHECK_PARAM_POINTER_RETURN -#define CHECK_PARAM_POINTER_RETURN(sparam, param, ret) \ - if (!(param)) \ - { \ - ecore_print_warning(__FUNCTION__, sparam); \ - return ret; \ - } - -#undef CHECK_PARAM_POINTER -#define CHECK_PARAM_POINTER(sparam, param) \ - if (!(param)) \ - { \ - ecore_print_warning(__FUNCTION__, sparam); \ - return; \ - } - -typedef unsigned int Ecore_Magic; - -EAPI void _ecore_magic_fail(const void *d, Ecore_Magic m, - Ecore_Magic req_m, const char *fname); - -void _ecore_time_init(void); - -void _ecore_timer_shutdown(void); -void _ecore_timer_cleanup(void); -void _ecore_timer_enable_new(void); -double _ecore_timer_next_get(void); -int _ecore_timers_exists(void); -int _ecore_timer_call(double when); - -void _ecore_idler_shutdown(void); -int _ecore_idler_call(void); -int _ecore_idler_exist(void); - -void _ecore_idle_enterer_shutdown(void); -void _ecore_idle_enterer_call(void); -int _ecore_idle_enterer_exist(void); - -void _ecore_idle_exiter_shutdown(void); -void _ecore_idle_exiter_call(void); -int _ecore_idle_exiter_exist(void); - -void _ecore_event_shutdown(void); -int _ecore_event_exist(void); -Ecore_Event *_ecore_event_add(int type, void *ev, Ecore_End_Cb func_free, - void *data); -void _ecore_event_call(void); - -Ecore_Timer *_ecore_exe_doomsday_clock_get(Ecore_Exe * exe); -void _ecore_exe_doomsday_clock_set(Ecore_Exe * exe, Ecore_Timer * dc); - -EAPI void *_ecore_event_signal_user_new(void); -void *_ecore_event_signal_hup_new(void); -void *_ecore_event_signal_exit_new(void); -void *_ecore_event_signal_power_new(void); -void *_ecore_event_signal_realtime_new(void); - -void _ecore_main_shutdown(void); - -#ifdef _WIN32 -static inline void _ecore_signal_shutdown(void) -{ -} - -static inline void _ecore_signal_init(void) -{ -} - -static inline int _ecore_signal_count_get(void) -{ - return 0; -} - -static inline void _ecore_signal_call(void) -{ -} -#else -void _ecore_signal_shutdown(void); -void _ecore_signal_init(void); -int _ecore_signal_count_get(void); -void _ecore_signal_call(void); -#endif - -void _ecore_exe_init(void); -void _ecore_exe_shutdown(void); -#ifndef _WIN32 -Ecore_Exe *_ecore_exe_find(pid_t pid); -void *_ecore_exe_event_del_new(void); -void _ecore_exe_event_del_free(void *data, void *ev); -#endif - -void _ecore_animator_shutdown(void); - -void _ecore_poller_shutdown(void); - -EAPI void *_ecore_list2_append(void *in_list, void *in_item); -EAPI void *_ecore_list2_prepend(void *in_list, void *in_item); -EAPI void *_ecore_list2_append_relative(void *in_list, void *in_item, - void *in_relative); -EAPI void *_ecore_list2_prepend_relative(void *in_list, void *in_item, - void *in_relative); -EAPI void *_ecore_list2_remove(void *in_list, void *in_item); -EAPI void *_ecore_list2_find(void *in_list, void *in_item); - -void _ecore_fps_debug_init(void); -void _ecore_fps_debug_shutdown(void); -void _ecore_fps_debug_runtime_add(double t); - -void _ecore_thread_init(void); -void _ecore_thread_shutdown(void); - -void _ecore_glib_init(void); -void _ecore_glib_shutdown(void); - -void _ecore_job_init(void); -void _ecore_job_shutdown(void); - -void _ecore_main_loop_init(void); -void _ecore_main_loop_shutdown(void); - -extern int _ecore_fps_debug; -extern double _ecore_time_loop_time; -extern Eina_Bool _ecore_glib_always_integrate; - -#endif diff --git a/tests/suite/ecore/src/lib/ecore_signal.c b/tests/suite/ecore/src/lib/ecore_signal.c deleted file mode 100644 index a3ef01e53a..0000000000 --- a/tests/suite/ecore/src/lib/ecore_signal.c +++ /dev/null @@ -1,624 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include - -#include "Ecore.h" -#include "ecore_private.h" - -/* make mono happy - this is evil though... */ -#undef SIGPWR -/* valgrind in some versions/setups uses SIGRT's... hmmm */ -#undef SIGRTMIN - -typedef void (*Signal_Handler) (int sig, siginfo_t * si, void *foo); - -static void _ecore_signal_callback_set(int sig, Signal_Handler func); -static void _ecore_signal_callback_ignore(int sig, siginfo_t * si, - void *foo); -static void _ecore_signal_callback_sigchld(int sig, siginfo_t * si, - void *foo); -static void _ecore_signal_callback_sigusr1(int sig, siginfo_t * si, - void *foo); -static void _ecore_signal_callback_sigusr2(int sig, siginfo_t * si, - void *foo); -static void _ecore_signal_callback_sighup(int sig, siginfo_t * si, - void *foo); -static void _ecore_signal_callback_sigquit(int sig, siginfo_t * si, - void *foo); -static void _ecore_signal_callback_sigint(int sig, siginfo_t * si, - void *foo); -static void _ecore_signal_callback_sigterm(int sig, siginfo_t * si, - void *foo); -#ifdef SIGPWR -static void _ecore_signal_callback_sigpwr(int sig, siginfo_t * si, - void *foo); -#endif - -#ifdef SIGRTMIN -static void _ecore_signal_callback_sigrt(int sig, siginfo_t * si, - void *foo); -#endif - -static Eina_Bool _ecore_signal_exe_exit_delay(void *data); - -//#define MAXSIGQ 256 // 32k -#define MAXSIGQ 64 // 8k - -static volatile sig_atomic_t sig_count = 0; -static volatile sig_atomic_t sigchld_count = 0; -static volatile sig_atomic_t sigusr1_count = 0; -static volatile sig_atomic_t sigusr2_count = 0; -static volatile sig_atomic_t sighup_count = 0; -static volatile sig_atomic_t sigquit_count = 0; -static volatile sig_atomic_t sigint_count = 0; -static volatile sig_atomic_t sigterm_count = 0; -#ifdef SIGPWR -static volatile sig_atomic_t sigpwr_count = 0; -#endif -#ifdef SIGRTMIN -static volatile sig_atomic_t *sigrt_count = NULL; -#endif - -static volatile siginfo_t sigchld_info[MAXSIGQ]; -static volatile siginfo_t sigusr1_info[MAXSIGQ]; -static volatile siginfo_t sigusr2_info[MAXSIGQ]; -static volatile siginfo_t sighup_info[MAXSIGQ]; -static volatile siginfo_t sigquit_info[MAXSIGQ]; -static volatile siginfo_t sigint_info[MAXSIGQ]; -static volatile siginfo_t sigterm_info[MAXSIGQ]; -#ifdef SIGPWR -static volatile siginfo_t sigpwr_info[MAXSIGQ]; -#endif -#ifdef SIGRTMIN -static volatile siginfo_t *sigrt_info[MAXSIGQ]; -#endif - -void _ecore_signal_shutdown(void) -{ -#ifdef SIGRTMIN - int i, num = SIGRTMAX - SIGRTMIN; -#endif - - _ecore_signal_callback_set(SIGPIPE, (Signal_Handler) SIG_DFL); - _ecore_signal_callback_set(SIGALRM, (Signal_Handler) SIG_DFL); - _ecore_signal_callback_set(SIGCHLD, (Signal_Handler) SIG_DFL); - _ecore_signal_callback_set(SIGUSR1, (Signal_Handler) SIG_DFL); - _ecore_signal_callback_set(SIGUSR2, (Signal_Handler) SIG_DFL); - _ecore_signal_callback_set(SIGHUP, (Signal_Handler) SIG_DFL); - _ecore_signal_callback_set(SIGQUIT, (Signal_Handler) SIG_DFL); - _ecore_signal_callback_set(SIGINT, (Signal_Handler) SIG_DFL); - _ecore_signal_callback_set(SIGTERM, (Signal_Handler) SIG_DFL); -#ifdef SIGPWR - _ecore_signal_callback_set(SIGPWR, (Signal_Handler) SIG_DFL); - sigpwr_count = 0; -#endif - sigchld_count = 0; - sigusr1_count = 0; - sigusr2_count = 0; - sighup_count = 0; - sigquit_count = 0; - sigint_count = 0; - sigterm_count = 0; - sig_count = 0; - -#ifdef SIGRTMIN - for (i = 0; i < num; i++) { - _ecore_signal_callback_set(SIGRTMIN + i, - (Signal_Handler) SIG_DFL); - sigrt_count[i] = 0; - } - - if (sigrt_count) { - free((sig_atomic_t *) sigrt_count); - sigrt_count = NULL; - } - - for (i = 0; i < MAXSIGQ; i++) { - if (sigrt_info[i]) { - free((siginfo_t *) sigrt_info[i]); - sigrt_info[i] = NULL; - } - } -#endif -} - -void _ecore_signal_init(void) -{ -#ifdef SIGRTMIN - int i, num = SIGRTMAX - SIGRTMIN; -#endif - - _ecore_signal_callback_set(SIGPIPE, _ecore_signal_callback_ignore); - _ecore_signal_callback_set(SIGALRM, _ecore_signal_callback_ignore); - _ecore_signal_callback_set(SIGCHLD, - _ecore_signal_callback_sigchld); - _ecore_signal_callback_set(SIGUSR1, - _ecore_signal_callback_sigusr1); - _ecore_signal_callback_set(SIGUSR2, - _ecore_signal_callback_sigusr2); - _ecore_signal_callback_set(SIGHUP, _ecore_signal_callback_sighup); - _ecore_signal_callback_set(SIGQUIT, - _ecore_signal_callback_sigquit); - _ecore_signal_callback_set(SIGINT, _ecore_signal_callback_sigint); - _ecore_signal_callback_set(SIGTERM, - _ecore_signal_callback_sigterm); -#ifdef SIGPWR - _ecore_signal_callback_set(SIGPWR, _ecore_signal_callback_sigpwr); -#endif - -#ifdef SIGRTMIN - sigrt_count = calloc(1, sizeof(sig_atomic_t) * num); - assert(sigrt_count); - - for (i = 0; i < MAXSIGQ; i++) { - sigrt_info[i] = calloc(1, sizeof(siginfo_t) * num); - assert(sigrt_info[i]); - } - - for (i = 0; i < num; i++) - _ecore_signal_callback_set(SIGRTMIN + i, - _ecore_signal_callback_sigrt); -#endif -} - -int _ecore_signal_count_get(void) -{ - return sig_count; -} - -void _ecore_signal_call(void) -{ -#ifdef SIGRTMIN - int i, num = SIGRTMAX - SIGRTMIN; -#endif - volatile sig_atomic_t n; - sigset_t oldset, newset; - - if (sig_count == 0) - return; - sigemptyset(&newset); - sigaddset(&newset, SIGPIPE); - sigaddset(&newset, SIGALRM); - sigaddset(&newset, SIGCHLD); - sigaddset(&newset, SIGUSR1); - sigaddset(&newset, SIGUSR2); - sigaddset(&newset, SIGHUP); - sigaddset(&newset, SIGQUIT); - sigaddset(&newset, SIGINT); - sigaddset(&newset, SIGTERM); -#ifdef SIGPWR - sigaddset(&newset, SIGPWR); -#endif -#ifdef SIGRTMIN - for (i = 0; i < num; i++) - sigaddset(&newset, SIGRTMIN + i); -#endif - sigprocmask(SIG_BLOCK, &newset, &oldset); - if (sigchld_count > MAXSIGQ) - WRN("%i SIGCHLD in queue. max queue size %i. losing " - "siginfo for extra signals.", sigchld_count, MAXSIGQ); - for (n = 0; n < sigchld_count; n++) { - pid_t pid; - int status; - - while ((pid = waitpid(-1, &status, WNOHANG)) > 0) { - Ecore_Exe_Event_Del *e; - - /* FIXME: If this process is set respawn, respawn with a suitable backoff - * period for those that need too much respawning. - */ - e = _ecore_exe_event_del_new(); - if (e) { - if (WIFEXITED(status)) { - e->exit_code = WEXITSTATUS(status); - e->exited = 1; - } else if (WIFSIGNALED(status)) { - e->exit_signal = WTERMSIG(status); - e->signalled = 1; - } - e->pid = pid; - e->exe = _ecore_exe_find(pid); - - if ((n < MAXSIGQ) - && (sigchld_info[n].si_signo)) - e->data = sigchld_info[n]; /* No need to clone this. */ - - if ((e->exe) - && (ecore_exe_flags_get(e->exe) & - (ECORE_EXE_PIPE_READ | - ECORE_EXE_PIPE_ERROR))) { - /* We want to report the Last Words of the exe, so delay this event. - * This is twice as relevant for stderr. - * There are three possibilities here - - * 1 There are no Last Words. - * 2 There are Last Words, they are not ready to be read. - * 3 There are Last Words, they are ready to be read. - * - * For 1 we don't want to delay, for 3 we want to delay. - * 2 is the problem. If we check for data now and there - * is none, then there is no way to differentiate 1 and 2. - * If we don't delay, we may loose data, but if we do delay, - * there may not be data and the exit event never gets sent. - * - * Any way you look at it, there has to be some time passed - * before the exit event gets sent. So the strategy here is - * to setup a timer event that will send the exit event after - * an arbitrary, but brief, time. - * - * This is probably paranoid, for the less paraniod, we could - * check to see for Last Words, and only delay if there are any. - * This has it's own set of problems. - */ - Ecore_Timer *doomsday_clock; - - doomsday_clock = - _ecore_exe_doomsday_clock_get - (e->exe); - IF_FN_DEL(ecore_timer_del, - doomsday_clock); - _ecore_exe_doomsday_clock_set(e-> - exe, - ecore_timer_add - (0.1, - _ecore_signal_exe_exit_delay, - e)); - } else { - _ecore_event_add - (ECORE_EXE_EVENT_DEL, e, - _ecore_exe_event_del_free, - NULL); - } - } - } - sig_count--; - } - sigchld_count = 0; - - if (sigusr1_count > MAXSIGQ) - WRN("%i SIGUSR1 in queue. max queue size %i. losing " - "siginfo for extra signals.", sigusr1_count, MAXSIGQ); - for (n = 0; n < sigusr1_count; n++) { - Ecore_Event_Signal_User *e; - - e = _ecore_event_signal_user_new(); - if (e) { - e->number = 1; - - if ((n < MAXSIGQ) && (sigusr1_info[n].si_signo)) - e->data = sigusr1_info[n]; - - ecore_event_add(ECORE_EVENT_SIGNAL_USER, e, NULL, - NULL); - } - sig_count--; - } - sigusr1_count = 0; - - if (sigusr2_count > MAXSIGQ) - WRN("%i SIGUSR2 in queue. max queue size %i. losing " - "siginfo for extra signals.", sigusr2_count, MAXSIGQ); - for (n = 0; n < sigusr2_count; n++) { - Ecore_Event_Signal_User *e; - - e = _ecore_event_signal_user_new(); - if (e) { - e->number = 2; - - if ((n < MAXSIGQ) && (sigusr2_info[n].si_signo)) - e->data = sigusr2_info[n]; - - ecore_event_add(ECORE_EVENT_SIGNAL_USER, e, NULL, - NULL); - } - sig_count--; - } - sigusr2_count = 0; - - if (sighup_count > MAXSIGQ) - WRN("%i SIGHUP in queue. max queue size %i. losing " - "siginfo for extra signals.", sighup_count, MAXSIGQ); - for (n = 0; n < sighup_count; n++) { - Ecore_Event_Signal_Hup *e; - - e = _ecore_event_signal_hup_new(); - if (e) { - if ((n < MAXSIGQ) && (sighup_info[n].si_signo)) - e->data = sighup_info[n]; - - ecore_event_add(ECORE_EVENT_SIGNAL_HUP, e, NULL, - NULL); - } - sig_count--; - } - sighup_count = 0; - - if (sigquit_count > MAXSIGQ) - WRN("%i SIGQUIT in queue. max queue size %i. losing " - "siginfo for extra signals.", sigquit_count, MAXSIGQ); - for (n = 0; n < sigquit_count; n++) { - Ecore_Event_Signal_Exit *e; - - e = _ecore_event_signal_exit_new(); - if (e) { - e->quit = 1; - - if ((n < MAXSIGQ) && (sigquit_info[n].si_signo)) - e->data = sigquit_info[n]; - - ecore_event_add(ECORE_EVENT_SIGNAL_EXIT, e, NULL, - NULL); - } - sig_count--; - } - sigquit_count = 0; - - if (sigint_count > MAXSIGQ) - WRN("%i SIGINT in queue. max queue size %i. losing " - "siginfo for extra signals.", sigint_count, MAXSIGQ); - for (n = 0; n < sigint_count; n++) { - Ecore_Event_Signal_Exit *e; - - e = _ecore_event_signal_exit_new(); - if (e) { - e->interrupt = 1; - - if ((n < MAXSIGQ) && (sigint_info[n].si_signo)) - e->data = sigint_info[n]; - - ecore_event_add(ECORE_EVENT_SIGNAL_EXIT, e, NULL, - NULL); - } - sig_count--; - } - sigint_count = 0; - - if (sigterm_count > MAXSIGQ) - WRN("%i SIGTERM in queue. max queue size %i. losing " - "siginfo for extra signals.", sigterm_count, MAXSIGQ); - for (n = 0; n < sigterm_count; n++) { - Ecore_Event_Signal_Exit *e; - - e = _ecore_event_signal_exit_new(); - if (e) { - e->terminate = 1; - - if ((n < MAXSIGQ) && (sigterm_info[n].si_signo)) - e->data = sigterm_info[n]; - - ecore_event_add(ECORE_EVENT_SIGNAL_EXIT, e, NULL, - NULL); - } - sig_count--; - } - sigterm_count = 0; - -#ifdef SIGPWR - if (sigpwr_count > MAXSIGQ) - WRN("%i SIGPWR in queue. max queue size %i. losing " - "siginfo for extra signals.", sigpwr_count, MAXSIGQ); - for (n = 0; n < sigpwr_count; n++) { - Ecore_Event_Signal_Power *e; - - e = _ecore_event_signal_power_new(); - if (e) { - if ((n < MAXSIGQ) && (sigpwr_info[n].si_signo)) - e->data = sigpwr_info[n]; - - ecore_event_add(ECORE_EVENT_SIGNAL_POWER, e, NULL, - NULL); - } - sig_count--; - } - sigpwr_count = 0; -#endif - -#ifdef SIGRTMIN - for (i = 0; i < num; i++) { - if (sigrt_count[i] > MAXSIGQ) - WRN("%i SIGRT%i in queue. max queue size %i. losing " "siginfo for extra signals.", i + 1, sigrt_count[i], MAXSIGQ); - for (n = 0; n < sigrt_count[i]; n++) { - Ecore_Event_Signal_Realtime *e; - - if ((e = _ecore_event_signal_realtime_new())) { - e->num = i; - - if ((n < MAXSIGQ) - && (sigrt_info[n][i].si_signo)) - e->data = sigrt_info[n][i]; - - ecore_event_add - (ECORE_EVENT_SIGNAL_REALTIME, e, NULL, - NULL); - } - sig_count--; - } - sigrt_count[i] = 0; - } -#endif - sigprocmask(SIG_SETMASK, &oldset, NULL); -} - -static void _ecore_signal_callback_set(int sig, Signal_Handler func) -{ - struct sigaction sa; - - sa.sa_sigaction = func; - sa.sa_flags = SA_RESTART | SA_SIGINFO; - sigemptyset(&sa.sa_mask); - sigaction(sig, &sa, NULL); -} - -static void -_ecore_signal_callback_ignore(int sig __UNUSED__, - siginfo_t * si __UNUSED__, - void *foo __UNUSED__) -{ -} - -static void -_ecore_signal_callback_sigchld(int sig __UNUSED__, siginfo_t * si, - void *foo __UNUSED__) -{ - volatile sig_atomic_t n; - n = sigchld_count; - if (n < MAXSIGQ) { - if (si) - sigchld_info[n] = *si; - else - sigchld_info[n].si_signo = 0; - } - - sigchld_count++; - sig_count++; -} - -static void -_ecore_signal_callback_sigusr1(int sig __UNUSED__, siginfo_t * si, - void *foo __UNUSED__) -{ - volatile sig_atomic_t n; - n = sigchld_count; - if (n < MAXSIGQ) { - if (si) - sigusr1_info[n] = *si; - else - sigusr1_info[n].si_signo = 0; - } - sigusr1_count++; - sig_count++; -} - -static void -_ecore_signal_callback_sigusr2(int sig __UNUSED__, siginfo_t * si, - void *foo __UNUSED__) -{ - volatile sig_atomic_t n; - n = sigchld_count; - if (n < MAXSIGQ) { - if (si) - sigusr2_info[n] = *si; - else - sigusr2_info[n].si_signo = 0; - } - sigusr2_count++; - sig_count++; -} - -static void -_ecore_signal_callback_sighup(int sig __UNUSED__, siginfo_t * si, - void *foo __UNUSED__) -{ - volatile sig_atomic_t n; - n = sigchld_count; - if (n < MAXSIGQ) { - if (si) - sighup_info[n] = *si; - else - sighup_info[n].si_signo = 0; - } - sighup_count++; - sig_count++; -} - -static void -_ecore_signal_callback_sigquit(int sig __UNUSED__, siginfo_t * si, - void *foo __UNUSED__) -{ - volatile sig_atomic_t n; - n = sigchld_count; - if (n < MAXSIGQ) { - if (si) - sigquit_info[n] = *si; - else - sigquit_info[n].si_signo = 0; - } - sigquit_count++; - sig_count++; -} - -static void -_ecore_signal_callback_sigint(int sig __UNUSED__, siginfo_t * si, - void *foo __UNUSED__) -{ - volatile sig_atomic_t n; - n = sigchld_count; - if (n < MAXSIGQ) { - if (si) - sigint_info[n] = *si; - else - sigint_info[n].si_signo = 0; - } - sigint_count++; - sig_count++; -} - -static void -_ecore_signal_callback_sigterm(int sig __UNUSED__, siginfo_t * si, - void *foo __UNUSED__) -{ - volatile sig_atomic_t n; - n = sigchld_count; - if (n < MAXSIGQ) { - if (si) - sigterm_info[n] = *si; - else - sigterm_info[n].si_signo = 0; - } - sigterm_count++; - sig_count++; -} - -#ifdef SIGPWR -static void -_ecore_signal_callback_sigpwr(int sig __UNUSED__, siginfo_t * si, - void *foo __UNUSED__) -{ - volatile sig_atomic_t n; - n = sigchld_count; - if (n < MAXSIGQ) { - if (si) - sigpwr_info[n] = *si; - else - sigpwr_info[n].si_signo = 0; - } - sigpwr_count++; - sig_count++; -} -#endif - -#ifdef SIGRTMIN -static void -_ecore_signal_callback_sigrt(int sig, siginfo_t * si, void *foo __UNUSED__) -{ - volatile sig_atomic_t n; - n = sigchld_count; - if (n < MAXSIGQ) { - if (si) - sigrt_info[n][sig - SIGRTMIN] = *si; - else - sigrt_info[n][sig - SIGRTMIN].si_signo = 0; - } - sigrt_count[sig - SIGRTMIN]++; - sig_count++; -} -#endif - -static Eina_Bool _ecore_signal_exe_exit_delay(void *data) -{ - Ecore_Exe_Event_Del *e; - - e = data; - if (e) { - _ecore_exe_doomsday_clock_set(e->exe, NULL); - _ecore_event_add(ECORE_EXE_EVENT_DEL, e, - _ecore_exe_event_del_free, NULL); - } - return ECORE_CALLBACK_CANCEL; -} diff --git a/tests/suite/ecore/src/lib/ecore_thread.c b/tests/suite/ecore/src/lib/ecore_thread.c deleted file mode 100644 index 27a924f7e5..0000000000 --- a/tests/suite/ecore/src/lib/ecore_thread.c +++ /dev/null @@ -1,1261 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#ifdef HAVE_EVIL -#include -#endif - -#ifdef EFL_HAVE_PTHREAD -#include -#ifdef __linux__ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE 1 -#endif -#include -#include -#include -#include -#include -#include -#endif -#endif - -#include "Ecore.h" -#include "ecore_private.h" - -typedef struct _Ecore_Pthread_Worker Ecore_Pthread_Worker; -typedef struct _Ecore_Pthread Ecore_Pthread; -typedef struct _Ecore_Thread_Data Ecore_Thread_Data; - -struct _Ecore_Thread_Data { - void *data; - Eina_Free_Cb cb; -}; - -struct _Ecore_Pthread_Worker { - union { - struct { - Ecore_Cb func_blocking; - } short_run; - struct { - Ecore_Thread_Heavy_Cb func_heavy; - Ecore_Thread_Notify_Cb func_notify; - Ecore_Pipe *notify; - } feedback_run; - } u; - - Ecore_Cb func_cancel; - Ecore_Cb func_end; -#ifdef EFL_HAVE_PTHREAD - pthread_t self; - Eina_Hash *hash; - pthread_cond_t cond; - pthread_mutex_t mutex; -#endif - - const void *data; - - Eina_Bool cancel:1; - Eina_Bool feedback_run:1; -}; - -#ifdef EFL_HAVE_PTHREAD -typedef struct _Ecore_Pthread_Data Ecore_Pthread_Data; - -struct _Ecore_Pthread_Data { - Ecore_Pipe *p; - void *data; - pthread_t thread; -}; -#endif - -static int _ecore_thread_count_max = 0; -static int ECORE_THREAD_PIPE_DEL = 0; - -#ifdef EFL_HAVE_PTHREAD -static int _ecore_thread_count = 0; - -static Eina_List *_ecore_active_job_threads = NULL; -static Eina_List *_ecore_pending_job_threads = NULL; -static Eina_List *_ecore_pending_job_threads_feedback = NULL; -static Ecore_Event_Handler *del_handler = NULL; -static pthread_mutex_t _ecore_pending_job_threads_mutex = - PTHREAD_MUTEX_INITIALIZER; - -static Eina_Hash *_ecore_thread_global_hash = NULL; -static pthread_rwlock_t _ecore_thread_global_hash_lock = - PTHREAD_RWLOCK_INITIALIZER; -static pthread_mutex_t _ecore_thread_global_hash_mutex = - PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t _ecore_thread_global_hash_cond = - PTHREAD_COND_INITIALIZER; -static pthread_t main_loop_thread; -static Eina_Bool have_main_loop_thread = 0; -static void _ecore_thread_data_free(void *data) -{ - Ecore_Thread_Data *d = data; - - if (d->cb) - d->cb(d->data); - free(d); -} - -static void _ecore_thread_pipe_free(void *data __UNUSED__, void *event) -{ - Ecore_Pipe *p = event; - - ecore_pipe_del(p); -} - -static Eina_Bool -_ecore_thread_pipe_del(void *data __UNUSED__, int type __UNUSED__, - void *event __UNUSED__) -{ - /* This is a hack to delay pipe destruction until we are out of its internal loop. */ - return ECORE_CALLBACK_CANCEL; -} - -static void _ecore_thread_end(Ecore_Pthread_Data * pth) -{ - Ecore_Pipe *p; - - if (pthread_join(pth->thread, (void **) &p) != 0) - return; - - _ecore_active_job_threads = - eina_list_remove(_ecore_active_job_threads, pth); - - ecore_event_add(ECORE_THREAD_PIPE_DEL, pth->p, - _ecore_thread_pipe_free, NULL); - free(pth); -} - -static void -_ecore_thread_handler(void *data __UNUSED__, void *buffer, - unsigned int nbyte) -{ - Ecore_Pthread_Worker *work; - - if (nbyte != sizeof(Ecore_Pthread_Worker *)) - return; - - work = *(Ecore_Pthread_Worker **) buffer; - - if (work->cancel) { - if (work->func_cancel) - work->func_cancel((void *) work->data); - } else { - if (work->func_end) - work->func_end((void *) work->data); - } - - if (work->feedback_run) - ecore_pipe_del(work->u.feedback_run.notify); - pthread_cond_destroy(&work->cond); - pthread_mutex_destroy(&work->mutex); - if (work->hash) - eina_hash_free(work->hash); - free(work); -} - -static void -_ecore_notify_handler(void *data, void *buffer, unsigned int nbyte) -{ - Ecore_Pthread_Worker *work = data; - void *user_data; - - if (nbyte != sizeof(Ecore_Pthread_Worker *)) - return; - - user_data = *(void **) buffer; - - if (work->u.feedback_run.func_notify) - work->u.feedback_run.func_notify((Ecore_Thread *) work, - user_data, - (void *) work->data); -} - -static void _ecore_short_job(Ecore_Pipe * end_pipe) -{ - Ecore_Pthread_Worker *work; - - while (_ecore_pending_job_threads) { - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - - if (!_ecore_pending_job_threads) { - pthread_mutex_unlock - (&_ecore_pending_job_threads_mutex); - break; - } - - work = eina_list_data_get(_ecore_pending_job_threads); - _ecore_pending_job_threads = - eina_list_remove_list(_ecore_pending_job_threads, - _ecore_pending_job_threads); - - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - - if (!work->cancel) - work->u.short_run.func_blocking((void *) work-> - data); - - ecore_pipe_write(end_pipe, &work, - sizeof(Ecore_Pthread_Worker *)); - } -} - -static void _ecore_feedback_job(Ecore_Pipe * end_pipe, pthread_t thread) -{ - Ecore_Pthread_Worker *work; - - while (_ecore_pending_job_threads_feedback) { - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - - if (!_ecore_pending_job_threads_feedback) { - pthread_mutex_unlock - (&_ecore_pending_job_threads_mutex); - break; - } - - work = - eina_list_data_get - (_ecore_pending_job_threads_feedback); - _ecore_pending_job_threads_feedback = - eina_list_remove_list - (_ecore_pending_job_threads_feedback, - _ecore_pending_job_threads_feedback); - - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - - work->self = thread; - if (!work->cancel) - work->u.feedback_run. - func_heavy((Ecore_Thread *) work, - (void *) work->data); - - ecore_pipe_write(end_pipe, &work, - sizeof(Ecore_Pthread_Worker *)); - } -} - -static void *_ecore_direct_worker(Ecore_Pthread_Worker * work) -{ - Ecore_Pthread_Data *pth; - - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); - pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - eina_sched_prio_drop(); - - pth = malloc(sizeof(Ecore_Pthread_Data)); - if (!pth) - return NULL; - - pth->p = ecore_pipe_add(_ecore_thread_handler, NULL); - if (!pth->p) { - free(pth); - return NULL; - } - pth->thread = pthread_self(); - - work->self = pth->thread; - work->u.feedback_run.func_heavy((Ecore_Thread *) work, - (void *) work->data); - - ecore_pipe_write(pth->p, &work, sizeof(Ecore_Pthread_Worker *)); - - work = malloc(sizeof(Ecore_Pthread_Worker)); - if (!work) { - ecore_pipe_del(pth->p); - free(pth); - return NULL; - } - - work->data = pth; - work->u.short_run.func_blocking = NULL; - work->func_end = (void *) _ecore_thread_end; - work->func_cancel = NULL; - work->cancel = EINA_FALSE; - work->feedback_run = EINA_FALSE; - work->hash = NULL; - pthread_cond_init(&work->cond, NULL); - pthread_mutex_init(&work->mutex, NULL); - - ecore_pipe_write(pth->p, &work, sizeof(Ecore_Pthread_Worker *)); - - return pth->p; -} - -static void *_ecore_thread_worker(Ecore_Pthread_Data * pth) -{ - Ecore_Pthread_Worker *work; - - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); - pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - eina_sched_prio_drop(); - - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - _ecore_thread_count++; - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - - on_error: - if (_ecore_pending_job_threads) - _ecore_short_job(pth->p); - if (_ecore_pending_job_threads_feedback) - _ecore_feedback_job(pth->p, pth->thread); - - /* FIXME: Check if there is feedback running task todo, and switch to feedback run handler. */ - - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - if (_ecore_pending_job_threads) { - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - goto on_error; - } - if (_ecore_pending_job_threads_feedback) { - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - goto on_error; - } - - _ecore_thread_count--; - - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - - work = malloc(sizeof(Ecore_Pthread_Worker)); - if (!work) - return NULL; - - work->data = pth; - work->u.short_run.func_blocking = NULL; - work->func_end = (void *) _ecore_thread_end; - work->func_cancel = NULL; - work->cancel = EINA_FALSE; - work->feedback_run = EINA_FALSE; - work->hash = NULL; - pthread_cond_init(&work->cond, NULL); - pthread_mutex_init(&work->mutex, NULL); - - ecore_pipe_write(pth->p, &work, sizeof(Ecore_Pthread_Worker *)); - - return pth->p; -} - -#endif - -void _ecore_thread_init(void) -{ - _ecore_thread_count_max = eina_cpu_count(); - if (_ecore_thread_count_max <= 0) - _ecore_thread_count_max = 1; - - ECORE_THREAD_PIPE_DEL = ecore_event_type_new(); -#ifdef EFL_HAVE_PTHREAD - del_handler = - ecore_event_handler_add(ECORE_THREAD_PIPE_DEL, - _ecore_thread_pipe_del, NULL); - main_loop_thread = pthread_self(); - have_main_loop_thread = 1; -#endif -} - -void _ecore_thread_shutdown(void) -{ - /* FIXME: If function are still running in the background, should we kill them ? */ -#ifdef EFL_HAVE_PTHREAD - Ecore_Pthread_Worker *work; - Ecore_Pthread_Data *pth; - - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - - EINA_LIST_FREE(_ecore_pending_job_threads, work) { - if (work->func_cancel) - work->func_cancel((void *) work->data); - free(work); - } - - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - - EINA_LIST_FREE(_ecore_active_job_threads, pth) { - Ecore_Pipe *p; - - pthread_cancel(pth->thread); - pthread_join(pth->thread, (void **) &p); - - ecore_pipe_del(pth->p); - } - if (_ecore_thread_global_hash) - eina_hash_free(_ecore_thread_global_hash); - ecore_event_handler_del(del_handler); - have_main_loop_thread = 0; - del_handler = NULL; -#endif -} - -/** - * @addtogroup Ecore_Thread Ecore Thread Functions - * These functions allow for ecore-managed threads which integrate with ecore's main loop. - * @{ - */ - -/** - * @brief Run some blocking code in a parallel thread to avoid locking the main loop. - * @param func_blocking The function that should run in another thread. - * @param func_end The function that will be called in the main loop if the thread terminate correctly. - * @param func_cancel The function that will be called in the main loop if the thread is cancelled. - * @param data User context data to pass to all callback. - * @return A reference to the newly created thread instance, or NULL if it failed. - * - * ecore_thread_run provide a facility for easily managing blocking task in a - * parallel thread. You should provide three function. The first one, func_blocking, - * that will do the blocking work in another thread (so you should not use the - * EFL in it except Eina if you are careful). The second one, func_end, - * that will be called in Ecore main loop when func_blocking is done. So you - * can use all the EFL inside this function. The last one, func_cancel, will - * be called in the main loop if the thread is cancelled or could not run at all. - * - * Be aware, that you can't make assumption on the result order of func_end - * after many call to ecore_thread_run, as we start as much thread as the - * host CPU can handle. - */ -EAPI Ecore_Thread *ecore_thread_run(Ecore_Cb func_blocking, - Ecore_Cb func_end, - Ecore_Cb func_cancel, const void *data) -{ -#ifdef EFL_HAVE_PTHREAD - Ecore_Pthread_Worker *work; - Ecore_Pthread_Data *pth = NULL; - - if (!func_blocking) - return NULL; - - work = malloc(sizeof(Ecore_Pthread_Worker)); - if (!work) { - func_cancel((void *) data); - return NULL; - } - - work->u.short_run.func_blocking = func_blocking; - work->hash = NULL; - pthread_cond_init(&work->cond, NULL); - pthread_mutex_init(&work->mutex, NULL); - work->func_end = func_end; - work->func_cancel = func_cancel; - work->cancel = EINA_FALSE; - work->feedback_run = EINA_FALSE; - work->data = data; - - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - _ecore_pending_job_threads = - eina_list_append(_ecore_pending_job_threads, work); - - if (_ecore_thread_count == _ecore_thread_count_max) { - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - return (Ecore_Thread *) work; - } - - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - - /* One more thread could be created. */ - pth = malloc(sizeof(Ecore_Pthread_Data)); - if (!pth) - goto on_error; - - pth->p = ecore_pipe_add(_ecore_thread_handler, NULL); - if (!pth->p) - goto on_error; - - if (pthread_create - (&pth->thread, NULL, (void *) _ecore_thread_worker, pth) == 0) - return (Ecore_Thread *) work; - - on_error: - if (pth) { - if (pth->p) - ecore_pipe_del(pth->p); - free(pth); - } - - if (_ecore_thread_count == 0) { - if (work->func_cancel) - work->func_cancel((void *) work->data); - free(work); - work = NULL; - } - return (Ecore_Thread *) work; -#else - /* - If no thread and as we don't want to break app that rely on this - facility, we will lock the interface until we are done. - */ - func_blocking((void *) data); - func_end((void *) data); - - return NULL; -#endif -} - -/** - * @brief Cancel a running thread. - * @param thread The thread to cancel. - * @return Will return EINA_TRUE if the thread has been cancelled, - * EINA_FALSE if it is pending. - * - * ecore_thread_cancel give the possibility to cancel a task still running. It - * will return EINA_FALSE, if the destruction is delayed or EINA_TRUE if it is - * cancelled after this call. - * - * You should use this function only in the main loop. - * - * func_end, func_cancel will destroy the handler, so don't use it after. - * And if ecore_thread_cancel return EINA_TRUE, you should not use Ecore_Thread also. - */ -EAPI Eina_Bool ecore_thread_cancel(Ecore_Thread * thread) -{ -#ifdef EFL_HAVE_PTHREAD - Ecore_Pthread_Worker *work = (Ecore_Pthread_Worker *) thread; - Eina_List *l; - - if (!work) - return EINA_TRUE; - - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - - if ((have_main_loop_thread) && - (pthread_equal(main_loop_thread, pthread_self()))) { - EINA_LIST_FOREACH(_ecore_pending_job_threads, l, work) { - if ((void *) work == (void *) thread) { - _ecore_pending_job_threads = - eina_list_remove_list - (_ecore_pending_job_threads, l); - - pthread_mutex_unlock - (&_ecore_pending_job_threads_mutex); - - if (work->func_cancel) - work->func_cancel((void *) work-> - data); - free(work); - - return EINA_TRUE; - } - } - } - - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - - /* Delay the destruction */ - ((Ecore_Pthread_Worker *) thread)->cancel = EINA_TRUE; - return EINA_FALSE; -#else - return EINA_TRUE; -#endif -} - -/** - * @brief Tell if a thread was canceled or not. - * @param thread The thread to test. - * @return EINA_TRUE if the thread is cancelled, - * EINA_FALSE if it is not. - * - * You can use this function in main loop and in the thread. - */ -EAPI Eina_Bool ecore_thread_check(Ecore_Thread * thread) -{ - Ecore_Pthread_Worker *worker = (Ecore_Pthread_Worker *) thread; - - if (!worker) - return EINA_TRUE; - return worker->cancel; -} - -/** - * @brief Run some heavy code in a parallel thread to avoid locking the main loop. - * @param func_heavy The function that should run in another thread. - * @param func_notify The function that will receive the data send by func_heavy in the main loop. - * @param func_end The function that will be called in the main loop if the thread terminate correctly. - * @param func_cancel The function that will be called in the main loop if the thread is cancelled. - * @param data User context data to pass to all callback. - * @param try_no_queue If you wan't to run outside of the thread pool. - * @return A reference to the newly created thread instance, or NULL if it failed. - * - * ecore_thread_feedback_run provide a facility for easily managing heavy task in a - * parallel thread. You should provide four functions. The first one, func_heavy, - * that will do the heavy work in another thread (so you should not use the - * EFL in it except Eina and Eet if you are careful). The second one, func_notify, - * will receive the data send from the thread function (func_heavy) by ecore_thread_notify - * in the main loop (and so, can use all the EFL). Tje third, func_end, - * that will be called in Ecore main loop when func_heavy is done. So you - * can use all the EFL inside this function. The last one, func_cancel, will - * be called in the main loop also, if the thread is cancelled or could not run at all. - * - * Be aware, that you can't make assumption on the result order of func_end - * after many call to ecore_feedback_run, as we start as much thread as the - * host CPU can handle. - * - * If you set try_no_queue, it will try to run outside of the thread pool, this can bring - * the CPU down, so be careful with that. Of course if it can't start a new thread, it will - * try to use one from the pool. - */ -EAPI Ecore_Thread *ecore_thread_feedback_run(Ecore_Thread_Heavy_Cb - func_heavy, - Ecore_Thread_Notify_Cb - func_notify, - Ecore_Cb func_end, - Ecore_Cb func_cancel, - const void *data, - Eina_Bool try_no_queue) -{ - -#ifdef EFL_HAVE_PTHREAD - Ecore_Pthread_Worker *worker; - Ecore_Pthread_Data *pth = NULL; - - if (!func_heavy) - return NULL; - - worker = malloc(sizeof(Ecore_Pthread_Worker)); - if (!worker) - goto on_error; - - worker->u.feedback_run.func_heavy = func_heavy; - worker->u.feedback_run.func_notify = func_notify; - worker->hash = NULL; - pthread_cond_init(&worker->cond, NULL); - pthread_mutex_init(&worker->mutex, NULL); - worker->func_cancel = func_cancel; - worker->func_end = func_end; - worker->data = data; - worker->cancel = EINA_FALSE; - worker->feedback_run = EINA_TRUE; - - worker->u.feedback_run.notify = - ecore_pipe_add(_ecore_notify_handler, worker); - - if (!try_no_queue) { - pthread_t t; - - if (pthread_create - (&t, NULL, (void *) _ecore_direct_worker, worker) == 0) - return (Ecore_Thread *) worker; - } - - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - _ecore_pending_job_threads_feedback = - eina_list_append(_ecore_pending_job_threads_feedback, worker); - - if (_ecore_thread_count == _ecore_thread_count_max) { - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - return (Ecore_Thread *) worker; - } - - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - - /* One more thread could be created. */ - pth = malloc(sizeof(Ecore_Pthread_Data)); - if (!pth) - goto on_error; - - pth->p = ecore_pipe_add(_ecore_thread_handler, NULL); - if (!pth->p) - goto on_error; - - if (pthread_create - (&pth->thread, NULL, (void *) _ecore_thread_worker, pth) == 0) - return (Ecore_Thread *) worker; - - on_error: - if (pth) { - if (pth->p) - ecore_pipe_del(pth->p); - free(pth); - } - - if (_ecore_thread_count == 0) { - if (func_cancel) - func_cancel((void *) data); - - if (worker) { - ecore_pipe_del(worker->u.feedback_run.notify); - free(worker); - worker = NULL; - } - } - - return (Ecore_Thread *) worker; -#else - Ecore_Pthread_Worker worker; - - (void) try_no_queue; - - /* - If no thread and as we don't want to break app that rely on this - facility, we will lock the interface until we are done. - */ - worker.u.feedback_run.func_heavy = func_heavy; - worker.u.feedback_run.func_notify = func_notify; - worker.u.feedback_run.notify = NULL; - worker.func_cancel = func_cancel; - worker.func_end = func_end; - worker.data = data; - worker.cancel = EINA_FALSE; - worker.feedback_run = EINA_TRUE; - - func_heavy((Ecore_Thread *) & worker, (void *) data); - - if (worker.cancel) - func_cancel((void *) data); - else - func_end((void *) data); - - return NULL; -#endif -} - -/** - * @brief Send data to main loop from worker thread. - * @param thread The current Ecore_Thread context to send data from - * @param data Data to be transmitted to the main loop - * @return EINA_TRUE if data was successfully send to main loop, - * EINA_FALSE if anything goes wrong. - * - * After a succesfull call, the data should be considered owned - * by the main loop. - * - * You should use this function only in the func_heavy call. - */ -EAPI Eina_Bool -ecore_thread_feedback(Ecore_Thread * thread, const void *data) -{ - Ecore_Pthread_Worker *worker = (Ecore_Pthread_Worker *) thread; - - if (!worker) - return EINA_FALSE; - if (!worker->feedback_run) - return EINA_FALSE; - -#ifdef EFL_HAVE_PTHREAD - if (!pthread_equal(worker->self, pthread_self())) - return EINA_FALSE; - - ecore_pipe_write(worker->u.feedback_run.notify, &data, - sizeof(void *)); - - return EINA_TRUE; -#else - worker->u.feedback_run.func_notify(thread, (void *) data, - (void *) worker->data); - - return EINA_TRUE; -#endif -} - -/** - * @brief Get number of active thread jobs - * @return Number of active threads running jobs - * This returns the number of threads currently running jobs through the - * ecore_thread api. - */ -EAPI int ecore_thread_active_get(void) -{ -#ifdef EFL_HAVE_PTHREAD - return _ecore_thread_count; -#else - return 0; -#endif -} - -/** - * @brief Get number of pending (short) thread jobs - * @return Number of pending threads running "short" jobs - * This returns the number of threads currently running jobs through the - * ecore_thread_run api call. - */ -EAPI int ecore_thread_pending_get(void) -{ - int ret; -#ifdef EFL_HAVE_PTHREAD - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - ret = eina_list_count(_ecore_pending_job_threads); - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - return ret; -#else - return 0; -#endif -} - -/** - * @brief Get number of pending feedback thread jobs - * @return Number of pending threads running "feedback" jobs - * This returns the number of threads currently running jobs through the - * ecore_thread_feedback_run api call. - */ -EAPI int ecore_thread_pending_feedback_get(void) -{ - int ret; -#ifdef EFL_HAVE_PTHREAD - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - ret = eina_list_count(_ecore_pending_job_threads_feedback); - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - return ret; -#else - return 0; -#endif -} - -/** - * @brief Get number of pending thread jobs - * @return Number of pending threads running jobs - * This returns the number of threads currently running jobs through the - * ecore_thread_run and ecore_thread_feedback_run api calls combined. - */ -EAPI int ecore_thread_pending_total_get(void) -{ - int ret; -#ifdef EFL_HAVE_PTHREAD - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - ret = - eina_list_count(_ecore_pending_job_threads) + - eina_list_count(_ecore_pending_job_threads_feedback); - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - return ret; -#else - return 0; -#endif -} - -/** - * @brief Get the max number of threads that can run simultaneously - * @return Max number of threads ecore will run - * This returns the total number of threads that ecore will attempt to run - * simultaneously. - */ -EAPI int ecore_thread_max_get(void) -{ - return _ecore_thread_count_max; -} - -/** - * @brief Set the max number of threads that can run simultaneously - * @param num The new maximum - * This sets the maximum number of threads that ecore will try to run - * simultaneously. This number cannot be < 1 or >= 2x the number of active cpus. - */ -EAPI void ecore_thread_max_set(int num) -{ - if (num < 1) - return; - /* avoid doing something hilarious by blocking dumb users */ - if (num >= (2 * eina_cpu_count())) - return; - - _ecore_thread_count_max = num; -} - -/** - * @brief Reset the max number of threads that can run simultaneously - * This resets the maximum number of threads that ecore will try to run - * simultaneously to the number of active cpus. - */ -EAPI void ecore_thread_max_reset(void) -{ - _ecore_thread_count_max = eina_cpu_count(); -} - -/** - * @brief Get the number of threads which are available to be used - * @return The number of available threads - * This returns the number of threads slots that ecore has currently available. - * Assuming that you haven't changed the max number of threads with @ref ecore_thread_max_set - * this should be equal to (num_cpus - (active_running + active_feedback_running)) - */ -EAPI int ecore_thread_available_get(void) -{ - int ret; -#ifdef EFL_HAVE_PTHREAD - pthread_mutex_lock(&_ecore_pending_job_threads_mutex); - ret = _ecore_thread_count_max - _ecore_thread_count; - pthread_mutex_unlock(&_ecore_pending_job_threads_mutex); - return ret; -#else - return 0; -#endif -} - -/** - * @brief Add data to the thread for subsequent use - * @param thread The thread context to add to - * @param key The name string to add the data with - * @param value The data to add - * @param cb The callback to free the data with - * @param direct If true, this will not copy the key string (like eina_hash_direct_add) - * @return EINA_TRUE on success, EINA_FALSE on failure - * This adds data to the thread context, allowing the thread - * to retrieve and use it without complicated mutexing. This function can only be called by a - * *_run thread INSIDE the thread and will return EINA_FALSE in any case but success. - * All data added to the thread will be freed with its associated callback (if present) - * upon thread termination. If no callback is specified, it is expected that the user will free the - * data, but this is most likely not what you want. - */ -EAPI Eina_Bool -ecore_thread_local_data_add(Ecore_Thread * thread, const char *key, - void *value, Eina_Free_Cb cb, Eina_Bool direct) -{ - Ecore_Pthread_Worker *worker = (Ecore_Pthread_Worker *) thread; - Ecore_Thread_Data *d; - Eina_Bool ret; - - if ((!thread) || (!key) || (!value)) - return EINA_FALSE; -#ifdef EFL_HAVE_PTHREAD - if (!pthread_equal(worker->self, pthread_self())) - return EINA_FALSE; - - if (!worker->hash) - worker->hash = - eina_hash_string_small_new(_ecore_thread_data_free); - - if (!worker->hash) - return EINA_FALSE; - - if (!(d = malloc(sizeof(Ecore_Thread_Data)))) - return EINA_FALSE; - - d->data = value; - d->cb = cb; - - if (direct) - ret = eina_hash_direct_add(worker->hash, key, d); - else - ret = eina_hash_add(worker->hash, key, d); - pthread_cond_broadcast(&worker->cond); - return ret; -#else - return EINA_TRUE; -#endif -} - -/** - * @brief Modify data in the thread, or add if not found - * @param thread The thread context - * @param key The name string to add the data with - * @param value The data to add - * @param cb The callback to free the data with - * @return The old data associated with @p key on success if modified, NULL if added - * This adds/modifies data in the thread context, adding only if modify fails. - * This function can only be called by a *_run thread INSIDE the thread. - * All data added to the thread pool will be freed with its associated callback (if present) - * upon thread termination. If no callback is specified, it is expected that the user will free the - * data, but this is most likely not what you want. - */ -EAPI void *ecore_thread_local_data_set(Ecore_Thread * thread, - const char *key, void *value, - Eina_Free_Cb cb) -{ - Ecore_Pthread_Worker *worker = (Ecore_Pthread_Worker *) thread; - Ecore_Thread_Data *d, *r; - void *ret; - if ((!thread) || (!key) || (!value)) - return NULL; -#ifdef EFL_HAVE_PTHREAD - if (!pthread_equal(worker->self, pthread_self())) - return NULL; - - if (!worker->hash) - worker->hash = - eina_hash_string_small_new(_ecore_thread_data_free); - - if (!worker->hash) - return NULL; - - if (!(d = malloc(sizeof(Ecore_Thread_Data)))) - return NULL; - - d->data = value; - d->cb = cb; - - r = eina_hash_set(worker->hash, key, d); - pthread_cond_broadcast(&worker->cond); - ret = r->data; - free(r); - return ret; -#else - return NULL; -#endif -} - -/** - * @brief Find data in the thread's data - * @param thread The thread context - * @param key The name string the data is associated with - * @return The value, or NULL on error - * This finds data in the thread context that has been previously added with @ref ecore_thread_local_data_add - * This function can only be called by a *_run thread INSIDE the thread, and will return NULL - * in any case but success. - */ - -EAPI void *ecore_thread_local_data_find(Ecore_Thread * thread, - const char *key) -{ - Ecore_Pthread_Worker *worker = (Ecore_Pthread_Worker *) thread; - Ecore_Thread_Data *d; - - if ((!thread) || (!key)) - return NULL; -#ifdef EFL_HAVE_PTHREAD - if (!pthread_equal(worker->self, pthread_self())) - return NULL; - - if (!worker->hash) - return NULL; - - d = eina_hash_find(worker->hash, key); - return d->data; -#else - return NULL; -#endif -} - -/** - * @brief Delete data from the thread's data - * @param thread The thread context - * @param key The name string the data is associated with - * @return EINA_TRUE on success, EINA_FALSE on failure - * This deletes the data pointer from the thread context which was previously added with @ref ecore_thread_local_data_add - * This function can only be called by a *_run thread INSIDE the thread, and will return EINA_FALSE - * in any case but success. Note that this WILL free the data if a callback was specified. - */ -EAPI Eina_Bool -ecore_thread_local_data_del(Ecore_Thread * thread, const char *key) -{ - Ecore_Pthread_Worker *worker = (Ecore_Pthread_Worker *) thread; - Ecore_Thread_Data *d; - if ((!thread) || (!key)) - return EINA_FALSE; -#ifdef EFL_HAVE_PTHREAD - if (!pthread_equal(worker->self, pthread_self())) - return EINA_FALSE; - - if (!worker->hash) - return EINA_FALSE; - if ((d = eina_hash_find(worker->hash, key))) - _ecore_thread_data_free(d); - return eina_hash_del_by_key(worker->hash, key); -#else - return EINA_TRUE; -#endif -} - -/** - * @brief Add data to the global data - * @param key The name string to add the data with - * @param value The data to add - * @param cb The optional callback to free the data with once ecore is shut down - * @param direct If true, this will not copy the key string (like eina_hash_direct_add) - * @return EINA_TRUE on success, EINA_FALSE on failure - * This adds data to the global thread data, and will return EINA_FALSE in any case but success. - * All data added to global can be manually freed, or a callback can be provided with @p cb which will - * be called upon ecore_thread shutting down. Note that if you have manually freed data that a callback - * was specified for, you will most likely encounter a segv later on. - */ -EAPI Eina_Bool -ecore_thread_global_data_add(const char *key, void *value, Eina_Free_Cb cb, - Eina_Bool direct) -{ - Eina_Bool ret; - Ecore_Thread_Data *d; - - if ((!key) || (!value)) - return EINA_FALSE; -#ifdef EFL_HAVE_PTHREAD - pthread_rwlock_wrlock(&_ecore_thread_global_hash_lock); - if (!_ecore_thread_global_hash) - _ecore_thread_global_hash = - eina_hash_string_small_new(_ecore_thread_data_free); - pthread_rwlock_unlock(&_ecore_thread_global_hash_lock); - - if (!(d = malloc(sizeof(Ecore_Thread_Data)))) - return EINA_FALSE; - - d->data = value; - d->cb = cb; - - if (!_ecore_thread_global_hash) - return EINA_FALSE; - pthread_rwlock_wrlock(&_ecore_thread_global_hash_lock); - if (direct) - ret = - eina_hash_direct_add(_ecore_thread_global_hash, key, - d); - else - ret = eina_hash_add(_ecore_thread_global_hash, key, d); - pthread_rwlock_unlock(&_ecore_thread_global_hash_lock); - pthread_cond_broadcast(&_ecore_thread_global_hash_cond); - return ret; -#else - return EINA_TRUE; -#endif -} - -/** - * @brief Add data to the global data - * @param key The name string to add the data with - * @param value The data to add - * @param cb The optional callback to free the data with once ecore is shut down - * @return An Ecore_Thread_Data on success, NULL on failure - * This adds data to the global thread data and returns NULL, or replaces the previous data - * associated with @p key and returning the previous data if it existed. To see if an error occurred, - * one must use eina_error_get. - * All data added to global can be manually freed, or a callback can be provided with @p cb which will - * be called upon ecore_thread shutting down. Note that if you have manually freed data that a callback - * was specified for, you will most likely encounter a segv later on. - */ -EAPI void *ecore_thread_global_data_set(const char *key, void *value, - Eina_Free_Cb cb) -{ - Ecore_Thread_Data *d, *r; - void *ret; - - if ((!key) || (!value)) - return NULL; -#ifdef EFL_HAVE_PTHREAD - pthread_rwlock_wrlock(&_ecore_thread_global_hash_lock); - if (!_ecore_thread_global_hash) - _ecore_thread_global_hash = - eina_hash_string_small_new(_ecore_thread_data_free); - pthread_rwlock_unlock(&_ecore_thread_global_hash_lock); - - if (!_ecore_thread_global_hash) - return NULL; - - if (!(d = malloc(sizeof(Ecore_Thread_Data)))) - return NULL; - - d->data = value; - d->cb = cb; - - pthread_rwlock_wrlock(&_ecore_thread_global_hash_lock); - r = eina_hash_set(_ecore_thread_global_hash, key, d); - pthread_rwlock_unlock(&_ecore_thread_global_hash_lock); - pthread_cond_broadcast(&_ecore_thread_global_hash_cond); - - ret = r->data; - free(r); - return ret; -#else - return NULL; -#endif -} - -/** - * @brief Find data in the global data - * @param key The name string the data is associated with - * @return The value, or NULL on error - * This finds data in the global data that has been previously added with @ref ecore_thread_global_data_add - * This function will return NULL in any case but success. - * All data added to global can be manually freed, or a callback can be provided with @p cb which will - * be called upon ecore_thread shutting down. Note that if you have manually freed data that a callback - * was specified for, you will most likely encounter a segv later on. - * @note Keep in mind that the data returned can be used by multiple threads at a time, so you will most likely want to mutex - * if you will be doing anything with it. - */ - -EAPI void *ecore_thread_global_data_find(const char *key) -{ - Ecore_Thread_Data *ret; - if (!key) - return NULL; -#ifdef EFL_HAVE_PTHREAD - if (!_ecore_thread_global_hash) - return NULL; - - pthread_rwlock_rdlock(&_ecore_thread_global_hash_lock); - ret = eina_hash_find(_ecore_thread_global_hash, key); - pthread_rwlock_unlock(&_ecore_thread_global_hash_lock); - return ret->data; -#else - return NULL; -#endif -} - -/** - * @brief Delete data from the global data - * @param key The name string the data is associated with - * @return EINA_TRUE on success, EINA_FALSE on failure - * This deletes the data pointer from the global data which was previously added with @ref ecore_thread_global_data_add - * This function will return EINA_FALSE in any case but success. - * Note that this WILL free the data if an @c Eina_Free_Cb was specified when the data was added. - */ -EAPI Eina_Bool ecore_thread_global_data_del(const char *key) -{ - Eina_Bool ret; - Ecore_Thread_Data *d; - - if (!key) - return EINA_FALSE; -#ifdef EFL_HAVE_PTHREAD - if (!_ecore_thread_global_hash) - return EINA_FALSE; - - pthread_rwlock_wrlock(&_ecore_thread_global_hash_lock); - if ((d = eina_hash_find(_ecore_thread_global_hash, key))) - _ecore_thread_data_free(d); - ret = eina_hash_del_by_key(_ecore_thread_global_hash, key); - pthread_rwlock_unlock(&_ecore_thread_global_hash_lock); - return ret; -#else - return EINA_TRUE; -#endif -} - -/** - * @brief Find data in the global data and optionally wait for the data if not found - * @param key The name string the data is associated with - * @param seconds The amount of time in seconds to wait for the data. If 0, the call will be async and not wait for data. - * If < 0 the call will wait indefinitely for the data. - * @return The value, or NULL on failure - * This finds data in the global data that has been previously added with @ref ecore_thread_global_data_add - * This function will return NULL in any case but success. - * Use @p seconds to specify the amount of time to wait. Use > 0 for an actual wait time, 0 to not wait, and < 0 to wait indefinitely. - * @note Keep in mind that the data returned can be used by multiple threads at a time, so you will most likely want to mutex - * if you will be doing anything with it. - */ -EAPI void *ecore_thread_global_data_wait(const char *key, double seconds) -{ - double time = 0; - Ecore_Thread_Data *ret = NULL; - if (!key) - return NULL; -#ifdef EFL_HAVE_PTHREAD - if (!_ecore_thread_global_hash) - return NULL; - if (seconds > 0) - time = ecore_time_get() + seconds; - - while (1) { - struct timespec t = { 0, 0 }; - - t.tv_sec = (long int) time; - t.tv_nsec = - (long int) ((time - (double) t.tv_sec) * 1000000000); - pthread_rwlock_rdlock(&_ecore_thread_global_hash_lock); - ret = eina_hash_find(_ecore_thread_global_hash, key); - pthread_rwlock_unlock(&_ecore_thread_global_hash_lock); - if ((ret) || (!seconds) - || ((seconds > 0) && (time <= ecore_time_get()))) - break; - pthread_mutex_lock(&_ecore_thread_global_hash_mutex); - pthread_cond_timedwait(&_ecore_thread_global_hash_cond, - &_ecore_thread_global_hash_mutex, - &t); - pthread_mutex_unlock(&_ecore_thread_global_hash_mutex); - } - if (ret) - return ret->data; - return NULL; -#else - return NULL; -#endif -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/ecore_time.c b/tests/suite/ecore/src/lib/ecore_time.c deleted file mode 100644 index 837aa8bbb5..0000000000 --- a/tests/suite/ecore/src/lib/ecore_time.c +++ /dev/null @@ -1,148 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#ifdef HAVE_SYS_TIME_H -#include -#endif - -#ifdef HAVE_EVIL -#include -#endif - -#include "Ecore.h" -#include "ecore_private.h" - -#include - -#ifdef HAVE_CLOCK_GETTIME -static clockid_t _ecore_time_clock_id = -1; -#endif -double _ecore_time_loop_time = -1.0; - -/** - * Retrieves the current system time as a floating point value in seconds. - * - * This uses a monotonic clock and thus never goes back in time while - * machine is live (even if user changes time or timezone changes, - * however it may be reset whenever the machine is restarted). - * - * @see ecore_loop_time_get(). - * @see ecore_time_unix_get(). - * - * @return The number of seconds. Start time is not defined (it may be - * when the machine was booted, unix time, etc), all it is - * defined is that it never goes backwards (unless you got big critical - * messages when the application started). - * @ingroup Ecore_Time_Group - */ -EAPI double ecore_time_get(void) -{ -#ifdef HAVE_CLOCK_GETTIME - struct timespec t; - - if (EINA_UNLIKELY(_ecore_time_clock_id < 0)) - return ecore_time_unix_get(); - - if (EINA_UNLIKELY(clock_gettime(_ecore_time_clock_id, &t))) { - CRIT("Cannot get current time."); - /* Try to at least return the latest value retrieved */ - return _ecore_time_loop_time; - } - - return (double) t.tv_sec + (((double) t.tv_nsec) / 1000000000.0); -#else - return ecore_time_unix_get(); -#endif -} - -/** - * Retrieves the current UNIX time as a floating point value in seconds. - * - * @see ecore_time_get(). - * @see ecore_loop_time_get(). - * - * @return The number of seconds since 12.00AM 1st January 1970. - * @ingroup Ecore_Time_Group - */ -EAPI double ecore_time_unix_get(void) -{ -#ifdef HAVE_EVIL - return evil_time_get(); -#else -#ifdef HAVE_GETTIMEOFDAY - struct timeval timev; - - gettimeofday(&timev, NULL); - return (double) timev.tv_sec + - (((double) timev.tv_usec) / 1000000); -#else -#error "Your platform isn't supported yet" -#endif -#endif -} - -/** - * Retrieves the time at which the last loop stopped waiting for timeouts or - * events. - * - * This gets the time that the main loop ceased waiting for timouts and/or - * events to come in or for signals or any other interrupt source. This should - * be considered a reference point for all time based activity that should - * calculate its timepoint from the return of ecore_loop_time_get(). Use this - * UNLESS you absolutely must get the current actual timepoint - then use - * ecore_time_get(). Note that this time is meant to be used as relative to - * other times obtained on this run. If you need absolute time references, use - * ecore_time_unix_get() instead. - * - * This function can be called before any loop has ever been run, but either - * ecore_init() or ecore_time_get() must have been called once. - * - * @return The number of seconds. Start time is not defined (it may be - * when the machine was booted, unix time, etc), all it is - * defined is that it never goes backwards (unless you got big critical - * messages when the application started). - * @ingroup Ecore_Time_Group - */ -EAPI double ecore_loop_time_get(void) -{ - return _ecore_time_loop_time; -} - - -/********************** Internal methods ********************************/ - -/* TODO: Documentation says "All implementations support the system-wide - * real-time clock, which is identified by CLOCK_REALTIME. Check if the fallback - * to unix time (without specifying the resolution) might be removed - */ -void _ecore_time_init(void) -{ -#ifdef HAVE_CLOCK_GETTIME - struct timespec t; - - if (_ecore_time_clock_id != -1) - return; - - if (!clock_gettime(CLOCK_MONOTONIC, &t)) { - _ecore_time_clock_id = CLOCK_MONOTONIC; - DBG("using CLOCK_MONOTONIC."); - } else if (!clock_gettime(CLOCK_REALTIME, &t)) { - /* may go backwards */ - _ecore_time_clock_id = CLOCK_REALTIME; - WRN("CLOCK_MONOTONIC not available. Fallback to CLOCK_REALTIME."); - } else { - _ecore_time_clock_id = -2; - CRIT("Cannot get a valid clock_gettime() clock id! " - "Fallback to unix time."); - } -#else -#warning "Your platform isn't supported yet" - CRIT("Platform does not support clock_gettime. " - "Fallback to unix time."); -#endif - - _ecore_time_loop_time = ecore_time_get(); -} diff --git a/tests/suite/ecore/src/lib/ecore_timer.c b/tests/suite/ecore/src/lib/ecore_timer.c deleted file mode 100644 index 5c4cecb10f..0000000000 --- a/tests/suite/ecore/src/lib/ecore_timer.c +++ /dev/null @@ -1,602 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "Ecore.h" -#include "ecore_private.h" - - -struct _Ecore_Timer { - EINA_INLIST; - ECORE_MAGIC; - double in; - double at; - double pending; - Ecore_Task_Cb func; - void *data; - - int references; - unsigned char delete_me:1; - unsigned char just_added:1; - unsigned char frozen:1; -}; - - -static void _ecore_timer_set(Ecore_Timer * timer, double at, double in, - Ecore_Task_Cb func, void *data); - -static int timers_added = 0; -static int timers_delete_me = 0; -static Ecore_Timer *timers = NULL; -static Ecore_Timer *timer_current = NULL; -static Ecore_Timer *suspended = NULL; -static double last_check = 0.0; -static double precision = 10.0 / 1000000.0; - -/** - * @defgroup Ecore_Time_Group Ecore Time Functions - * - * Functions that deal with time. These functions include those that simply - * retrieve it in a given format, and those that create events based on it. - */ - -/** - * Retrieves the current precision used by timer infrastructure. - * - * @see ecore_timer_precision_set() - */ -EAPI double ecore_timer_precision_get(void) -{ - return precision; -} - -/** - * Sets the precision to be used by timer infrastructure. - * - * When system calculates time to expire the next timer we'll be able - * to delay the timer by the given amount so more timers will fit in - * the same dispatch, waking up the system less often and thus being - * able to save power. - * - * Be aware that kernel may delay delivery even further, these delays - * are always possible due other tasks having higher priorities or - * other scheduler policies. - * - * Example: - * We have 2 timers, one that expires in a 2.0s and another that - * expires in 2.1s, if precision is 0.1s, then the Ecore will request - * for the next expire to happen in 2.1s and not 2.0s and another one - * of 0.1 as it would before. - * - * @note Ecore is smart enough to see if there are timers in the - * precision range, if it does not, in our example if no second timer - * in (T + precision) existed, then it would use the minimum timeout. - * - * @param value allowed introduced timeout delay, in seconds. - */ -EAPI void ecore_timer_precision_set(double value) -{ - if (value < 0.0) { - ERR("Precision %f less than zero, ignored", value); - return; - } - precision = value; -} - -/** - * Creates a timer to call the given function in the given period of time. - * @param in The interval in seconds. - * @param func The given function. If @p func returns 1, the timer is - * rescheduled for the next interval @p in. - * @param data Data to pass to @p func when it is called. - * @return A timer object on success. @c NULL on failure. - * @ingroup Ecore_Time_Group - * - * This function adds a timer and returns its handle on success and NULL on - * failure. The function @p func will be called every @p in seconds. The - * function will be passed the @p data pointer as its parameter. - * - * When the timer @p func is called, it must return a value of either 1 - * (or ECORE_CALLBACK_RENEW) or 0 (or ECORE_CALLBACK_CANCEL). - * If it returns 1, it will be called again at the next tick, or if it returns - * 0 it will be deleted automatically making any references/handles for it - * invalid. - */ -EAPI Ecore_Timer *ecore_timer_add(double in, Ecore_Task_Cb func, - const void *data) -{ - double now; - Ecore_Timer *timer; - - if (!func) - return NULL; - if (in < 0.0) - in = 0.0; - timer = calloc(1, sizeof(Ecore_Timer)); - if (!timer) - return NULL; - ECORE_MAGIC_SET(timer, ECORE_MAGIC_TIMER); - now = ecore_time_get(); - _ecore_timer_set(timer, now + in, in, func, (void *) data); - return timer; -} - -/** - * Creates a timer to call the given function in the given period of time. - * @param in The interval in seconds from current loop time. - * @param func The given function. If @p func returns 1, the timer is - * rescheduled for the next interval @p in. - * @param data Data to pass to @p func when it is called. - * @return A timer object on success. @c NULL on failure. - * @ingroup Ecore_Time_Group - * - * This is the same as ecore_timer_add(), but "now" is the time from - * ecore_loop_time_get() not ecore_time_get() as ecore_timer_add() uses. See - * ecore_timer_add() for more details. - */ -EAPI Ecore_Timer *ecore_timer_loop_add(double in, Ecore_Task_Cb func, - const void *data) -{ - double now; - Ecore_Timer *timer; - - if (!func) - return NULL; - if (in < 0.0) - in = 0.0; - timer = calloc(1, sizeof(Ecore_Timer)); - if (!timer) - return NULL; - ECORE_MAGIC_SET(timer, ECORE_MAGIC_TIMER); - now = ecore_loop_time_get(); - _ecore_timer_set(timer, now + in, in, func, (void *) data); - return timer; -} - -/** - * Delete the specified timer from the timer list. - * @param timer The timer to delete. - * @return The data pointer set for the timer when @ref ecore_timer_add was - * called. @c NULL is returned if the function is unsuccessful. - * @ingroup Ecore_Time_Group - * - * Note: @p timer must be a valid handle. If the timer function has already - * returned 0, the handle is no longer valid (and does not need to be delete). - */ -EAPI void *ecore_timer_del(Ecore_Timer * timer) -{ - if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) { - ECORE_MAGIC_FAIL(timer, ECORE_MAGIC_TIMER, - "ecore_timer_del"); - return NULL; - } - - if (timer->frozen && !timer->references) { - void *data = timer->data; - - suspended = - (Ecore_Timer *) - eina_inlist_remove(EINA_INLIST_GET(suspended), - EINA_INLIST_GET(timer)); - - if (timer->delete_me) - timers_delete_me--; - - free(timer); - return data; - } - - EINA_SAFETY_ON_TRUE_RETURN_VAL(timer->delete_me, NULL); - timer->delete_me = 1; - timers_delete_me++; - return timer->data; -} - -/** - * Change the interval the timer ticks of. If set during - * a timer call, this will affect the next interval. - * - * @param timer The timer to change. - * @param in The interval in seconds. - * @ingroup Ecore_Time_Group - */ -EAPI void ecore_timer_interval_set(Ecore_Timer * timer, double in) -{ - if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) { - ECORE_MAGIC_FAIL(timer, ECORE_MAGIC_TIMER, - "ecore_timer_interval_set"); - return; - } - timer->in = in; -} - -/** - * Get the interval the timer ticks on. - * - * @param timer The timer to retrieve the interval from - * @return The interval on success. -1 on failure. - * @ingroup Ecore_Time_Group - */ -EAPI double ecore_timer_interval_get(Ecore_Timer * timer) -{ - if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) { - ECORE_MAGIC_FAIL(timer, ECORE_MAGIC_TIMER, - "ecore_timer_interval_get"); - return -1.0; - } - - return timer->in; -} - -/** - * Add some delay for the next occurrence of a timer. - * This doesn't affect the interval of a timer. - * - * @param timer The timer to change. - * @param add The dalay to add to the next iteration. - * @ingroup Ecore_Time_Group - */ -EAPI void ecore_timer_delay(Ecore_Timer * timer, double add) -{ - if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) { - ECORE_MAGIC_FAIL(timer, ECORE_MAGIC_TIMER, - "ecore_timer_delay"); - return; - } - - if (timer->frozen) { - timer->pending += add; - } else { - timers = - (Ecore_Timer *) - eina_inlist_remove(EINA_INLIST_GET(timers), - EINA_INLIST_GET(timer)); - _ecore_timer_set(timer, timer->at + add, timer->in, - timer->func, timer->data); - } -} - -/** - * Get the pending time regarding a timer. - * - * @param timer The timer to learn from. - * @ingroup Ecore_Time_Group - */ -EAPI double ecore_timer_pending_get(Ecore_Timer * timer) -{ - double now; - - if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) { - ECORE_MAGIC_FAIL(timer, ECORE_MAGIC_TIMER, - "ecore_timer_pending_get"); - return 0; - } - - now = ecore_time_get(); - - if (timer->frozen) - return timer->pending; - return timer->at - now; -} - -/** - * - * - */ -EAPI void ecore_timer_freeze(Ecore_Timer * timer) -{ - double now; - - if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) { - ECORE_MAGIC_FAIL(timer, ECORE_MAGIC_TIMER, - "ecore_timer_freeze"); - return; - } - - /* Timer already frozen */ - if (timer->frozen) - return; - - timers = - (Ecore_Timer *) eina_inlist_remove(EINA_INLIST_GET(timers), - EINA_INLIST_GET(timer)); - suspended = - (Ecore_Timer *) eina_inlist_prepend(EINA_INLIST_GET(suspended), - EINA_INLIST_GET(timer)); - - now = ecore_time_get(); - - timer->pending = timer->at - now; - timer->at = 0.0; - timer->frozen = 1; -} - -EAPI void ecore_timer_thaw(Ecore_Timer * timer) -{ - double now; - - if (!ECORE_MAGIC_CHECK(timer, ECORE_MAGIC_TIMER)) { - ECORE_MAGIC_FAIL(timer, ECORE_MAGIC_TIMER, - "ecore_timer_thaw"); - return; - } - - /* Timer not frozen */ - if (!timer->frozen) - return; - - suspended = - (Ecore_Timer *) eina_inlist_remove(EINA_INLIST_GET(suspended), - EINA_INLIST_GET(timer)); - now = ecore_time_get(); - - _ecore_timer_set(timer, timer->pending + now, timer->in, - timer->func, timer->data); -} - -void _ecore_timer_shutdown(void) -{ - Ecore_Timer *timer; - - while ((timer = timers)) { - timers = - (Ecore_Timer *) - eina_inlist_remove(EINA_INLIST_GET(timers), - EINA_INLIST_GET(timers)); - ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE); - free(timer); - } - - while ((timer = suspended)) { - suspended = - (Ecore_Timer *) - eina_inlist_remove(EINA_INLIST_GET(suspended), - EINA_INLIST_GET(suspended)); - ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE); - free(timer); - } - - timer_current = NULL; -} - -void _ecore_timer_cleanup(void) -{ - Ecore_Timer *l; - int in_use = 0, todo = timers_delete_me, done = 0; - - if (!timers_delete_me) - return; - for (l = timers; l;) { - Ecore_Timer *timer = l; - - l = (Ecore_Timer *) EINA_INLIST_GET(l)->next; - if (timer->delete_me) { - if (timer->references) { - in_use++; - continue; - } - timers = - (Ecore_Timer *) - eina_inlist_remove(EINA_INLIST_GET(timers), - EINA_INLIST_GET(timer)); - ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE); - free(timer); - timers_delete_me--; - done++; - if (timers_delete_me == 0) - return; - } - } - for (l = suspended; l;) { - Ecore_Timer *timer = l; - - l = (Ecore_Timer *) EINA_INLIST_GET(l)->next; - if (timer->delete_me) { - if (timer->references) { - in_use++; - continue; - } - suspended = - (Ecore_Timer *) - eina_inlist_remove(EINA_INLIST_GET(suspended), - EINA_INLIST_GET(timer)); - ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE); - free(timer); - timers_delete_me--; - done++; - if (timers_delete_me == 0) - return; - } - } - - if ((!in_use) && (timers_delete_me)) { - ERR("%d timers to delete, but they were not found!" - "Stats: todo=%d, done=%d, pending=%d, in_use=%d. " - "reset counter.", - timers_delete_me, todo, done, todo - done, in_use); - timers_delete_me = 0; - } -} - -void _ecore_timer_enable_new(void) -{ - Ecore_Timer *timer; - - if (!timers_added) - return; - timers_added = 0; - EINA_INLIST_FOREACH(timers, timer) timer->just_added = 0; -} - -int _ecore_timers_exists(void) -{ - Ecore_Timer *timer = timers; - - while ((timer) && (timer->delete_me)) - timer = (Ecore_Timer *) EINA_INLIST_GET(timer)->next; - - return ! !timer; -} - -static inline Ecore_Timer *_ecore_timer_first_get(void) -{ - Ecore_Timer *timer = timers; - - while ((timer) && ((timer->delete_me) || (timer->just_added))) - timer = (Ecore_Timer *) EINA_INLIST_GET(timer)->next; - - return timer; -} - -static inline Ecore_Timer *_ecore_timer_after_get(Ecore_Timer * base) -{ - Ecore_Timer *timer = (Ecore_Timer *) EINA_INLIST_GET(base)->next; - double maxtime = base->at + precision; - - while ((timer) && ((timer->delete_me) || (timer->just_added)) - && (timer->at <= maxtime)) - timer = (Ecore_Timer *) EINA_INLIST_GET(timer)->next; - - if ((!timer) || (timer->at > maxtime)) - return NULL; - - return timer; -} - -double _ecore_timer_next_get(void) -{ - double now; - double in; - Ecore_Timer *first, *second; - - first = _ecore_timer_first_get(); - if (!first) - return -1; - - second = _ecore_timer_after_get(first); - if (second) - first = second; - - now = ecore_loop_time_get(); - in = first->at - now; - if (in < 0) - in = 0; - return in; -} - -static inline void -_ecore_timer_reschedule(Ecore_Timer * timer, double when) -{ - if ((timer->delete_me) || (timer->frozen)) - return; - - timers = - (Ecore_Timer *) eina_inlist_remove(EINA_INLIST_GET(timers), - EINA_INLIST_GET(timer)); - - /* if the timer would have gone off more than 15 seconds ago, - * assume that the system hung and set the timer to go off - * timer->in from now. this handles system hangs, suspends - * and more, so ecore will only "replay" the timers while - * the system is suspended if it is suspended for less than - * 15 seconds (basically). this also handles if the process - * is stopped in a debugger or IO and other handling gets - * really slow within the main loop. - */ - if ((timer->at + timer->in) < (when - 15.0)) - _ecore_timer_set(timer, when + timer->in, timer->in, - timer->func, timer->data); - else - _ecore_timer_set(timer, timer->at + timer->in, timer->in, - timer->func, timer->data); -} - -int _ecore_timer_call(double when) -{ - if (!timers) - return 0; - if (last_check > when) { - Ecore_Timer *timer; - /* User set time backwards */ - EINA_INLIST_FOREACH(timers, timer) timer->at -= - (last_check - when); - } - last_check = when; - - if (!timer_current) { - /* regular main loop, start from head */ - timer_current = timers; - } else { - /* recursive main loop, continue from where we were */ - Ecore_Timer *timer_old = timer_current; - timer_current = - (Ecore_Timer *) EINA_INLIST_GET(timer_current)->next; - _ecore_timer_reschedule(timer_old, when); - } - - while (timer_current) { - Ecore_Timer *timer = timer_current; - - if (timer->at > when) { - timer_current = NULL; /* ended walk, next should restart. */ - return 0; - } - - if ((timer->just_added) || (timer->delete_me)) { - timer_current = - (Ecore_Timer *) - EINA_INLIST_GET(timer_current)->next; - continue; - } - - timer->references++; - if (!timer->func(timer->data)) { - if (!timer->delete_me) - ecore_timer_del(timer); - } - timer->references--; - - if (timer_current) /* may have changed in recursive main loops */ - timer_current = - (Ecore_Timer *) - EINA_INLIST_GET(timer_current)->next; - - _ecore_timer_reschedule(timer, when); - } - return 0; -} - -static void -_ecore_timer_set(Ecore_Timer * timer, double at, double in, - Ecore_Task_Cb func, void *data) -{ - Ecore_Timer *t2; - - timers_added = 1; - timer->at = at; - timer->in = in; - timer->func = func; - timer->data = data; - timer->just_added = 1; - timer->frozen = 0; - timer->pending = 0.0; - if (timers) { - EINA_INLIST_REVERSE_FOREACH(EINA_INLIST_GET(timers), t2) { - if (timer->at > t2->at) { - timers = - (Ecore_Timer *) - eina_inlist_append_relative - (EINA_INLIST_GET(timers), - EINA_INLIST_GET(timer), - EINA_INLIST_GET(t2)); - return; - } - } - } - timers = - (Ecore_Timer *) eina_inlist_prepend(EINA_INLIST_GET(timers), - EINA_INLIST_GET(timer)); -} diff --git a/tests/suite/ecore/src/lib/eina_accessor.c b/tests/suite/ecore/src/lib/eina_accessor.c deleted file mode 100644 index ade870a935..0000000000 --- a/tests/suite/ecore/src/lib/eina_accessor.c +++ /dev/null @@ -1,260 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "eina_config.h" -#include "eina_private.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_accessor.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -static const char EINA_MAGIC_ACCESSOR_STR[] = "Eina Accessor"; - -#define EINA_MAGIC_CHECK_ACCESSOR(d) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ACCESSOR)) { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_ACCESSOR); } \ - } while(0) - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the accessor module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the accessor module of Eina. It is called by - * eina_init(). - * - * @see eina_init() - */ -Eina_Bool eina_accessor_init(void) -{ - return eina_magic_string_set(EINA_MAGIC_ACCESSOR, - EINA_MAGIC_ACCESSOR_STR); -} - -/** - * @internal - * @brief Shut down the accessor module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the accessor module set up by - * eina_accessor_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_accessor_shutdown(void) -{ - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Accessor_Group Accessor Functions - * - * @brief These functions manage accessor on containers. - * - * These functions allow to access elements of a container in a - * generic way, without knowing which container is used (a bit like - * iterators in the C++ STL). Accessors allows random access (that is, any - * element in the container). For sequential access, see - * @ref Eina_Iterator_Group. - * - * An accessor is created from container data types, so no creation - * function is available here. An accessor is deleted with - * eina_accessor_free(). To get the data of an element at a given - * position, use eina_accessor_data_get(). To call a function on - * chosen elements of a container, use eina_accessor_over(). - * - * @{ - */ - -/** - * @brief Free an accessor. - * - * @param accessor The accessor to free. - * - * This function frees @p accessor if it is not @c NULL; - */ -EAPI void eina_accessor_free(Eina_Accessor * accessor) -{ - EINA_MAGIC_CHECK_ACCESSOR(accessor); - EINA_SAFETY_ON_NULL_RETURN(accessor); - EINA_SAFETY_ON_NULL_RETURN(accessor->free); - accessor->free(accessor); -} - -/** - * @brief Return the container of an accessor. - * - * @param accessor The accessor. - * @return The container which created the accessor. - * - * This function returns the container which created @p accessor. If - * @p accessor is @c NULL, this function returns @c NULL. - */ -EAPI void *eina_accessor_container_get(Eina_Accessor * accessor) -{ - EINA_MAGIC_CHECK_ACCESSOR(accessor); - EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(accessor->get_container, NULL); - return accessor->get_container(accessor); -} - -/** - * @brief Retrieve the data of an accessor at a given position. - * - * @param accessor The accessor. - * @param position The position of the element. - * @param data The pointer that stores the data to retrieve. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function retrieves the data of the element pointed by - * @p accessor at the porition @p position, and stores it in - * @p data. If @p accessor is @c NULL or if an error occurred, - * #EINA_FALSE is returned, otherwise EINA_TRUE is returned. - */ -EAPI Eina_Bool -eina_accessor_data_get(Eina_Accessor * accessor, - unsigned int position, void **data) -{ - EINA_MAGIC_CHECK_ACCESSOR(accessor); - EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(accessor->get_at, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - return accessor->get_at(accessor, position, data); -} - -/** - * @brief Iterate over the container and execute a callback on chosen elements. - * - * @param accessor The accessor. - * @param cb The callback called on the chosen elements. - * @param start The position of the first element. - * @param end The position of the last element. - * @param fdata The data passed to the callback. - * - * This function iterates over the elements pointed by @p accessor, - * starting from the element at position @p start and ending to the - * element at position @p end. For Each element, the callback - * @p cb is called with the data @p fdata. If @p accessor is @c NULL - * or if @p start is greter or equal than @p end, the function returns - * immediately. - */ -EAPI void -eina_accessor_over(Eina_Accessor * accessor, - Eina_Each_Cb cb, - unsigned int start, unsigned int end, const void *fdata) -{ - const void *container; - void *data; - unsigned int i; - - EINA_MAGIC_CHECK_ACCESSOR(accessor); - EINA_SAFETY_ON_NULL_RETURN(accessor); - EINA_SAFETY_ON_NULL_RETURN(accessor->get_container); - EINA_SAFETY_ON_NULL_RETURN(accessor->get_at); - EINA_SAFETY_ON_NULL_RETURN(cb); - EINA_SAFETY_ON_FALSE_RETURN(start < end); - - if (!eina_accessor_lock(accessor)) - return; - - container = accessor->get_container(accessor); - for (i = start; - i < end && accessor->get_at(accessor, i, &data) == EINA_TRUE; - ++i) - if (cb(container, data, (void *) fdata) != EINA_TRUE) - goto on_exit; - - on_exit: - (void) eina_accessor_unlock(accessor); -} - -/** - * @brief Lock the container of the accessor. - * - * @param accessor The accessor. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * If the container of the @p accessor permit it, it will be locked. - * If @p accessor is @c NULL or if a problem occurred, #EINA_FALSE is - * returned, otherwise #EINA_TRUE is returned. If the container - * is not lockable, it will return EINA_TRUE. - */ -EAPI Eina_Bool eina_accessor_lock(Eina_Accessor * accessor) -{ - EINA_MAGIC_CHECK_ACCESSOR(accessor); - EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, EINA_FALSE); - - if (accessor->lock) - return accessor->lock(accessor); - return EINA_TRUE; -} - -/** - * @brief Unlock the container of the accessor. - * - * @param accessor The accessor. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * If the container of the @p accessor permit it and was previously - * locked, it will be unlocked. If @p accessor is @c NULL or if a - * problem occurred, #EINA_FALSE is returned, otherwise #EINA_TRUE - * is returned. If the container is not lockable, it will return - * EINA_TRUE. - */ -EAPI Eina_Bool eina_accessor_unlock(Eina_Accessor * accessor) -{ - EINA_MAGIC_CHECK_ACCESSOR(accessor); - EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, EINA_FALSE); - - if (accessor->unlock) - return accessor->unlock(accessor); - return EINA_TRUE; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_array.c b/tests/suite/ecore/src/lib/eina_array.c deleted file mode 100644 index e6bb0493df..0000000000 --- a/tests/suite/ecore/src/lib/eina_array.c +++ /dev/null @@ -1,702 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - - -/** - * @page tutorial_array_page Array Tutorial - * - * The Array data type is allow the storage of data like a C array. - * It is designed such that the access to its element is very fast. - * But the addition or removal can be done only at the end of the - * array. To add or remove an element at any location, the Eina - * @ref Eina_List_Group is the correct container is the correct one. - * - * @section tutorial_error_basic_usage Basic Usage - * - * An array must created with eina_array_new(). That function - * takes an integer as parameter, which is the count of pointers to - * add when increasing the array size. Once the array is not used - * anymore, it must be destroyed with eina_array_free(). - * - * To append data at the end of the array, the function - * eina_array_push() must be used. To remove the data at the end of - * the array, eina_array_pop() must be used. Once the array is filled, - * one can check its elements by iterating over it. A while loop and - * eina_array_data_get() can be used, or else one can use the - * predefined macro EINA_ARRAY_ITER_NEXT(). To free all the elements, - * a while loop can be used with eina_array_count_get(). Here is an - * example of use: - * - * @code - * #include - * #include - * #include - * - * #include - * - * int main(void) - * { - * const char *strings[] = { - * "first string", - * "second string", - * "third string", - * "fourth string" - * }; - * Eina_Array *array; - * char *item; - * Eina_Array_Iterator iterator; - * unsigned int i; - * - * if (!eina_init()) - * { - * printf ("Error during the initialization of eina\n"); - * return EXIT_FAILURE; - * } - * - * array = eina_array_new(16); - * if (!array) - * goto shutdown; - * - * for (i = 0; i < 4; i++) - * { - * eina_array_push(array, strdup(strings[i])); - * } - * - * printf("array count: %d\n", eina_array_count_get(array)); - * EINA_ARRAY_ITER_NEXT(array, i, item, iterator) - * { - * printf("item #%d: %s\n", i, item); - * } - * - * while (eina_array_count_get(array)) - * { - * void *data; - * - * data = eina_array_pop(array); - * free(data); - * } - * - * eina_array_free(array); - * eina_shutdown(); - * - * return EXIT_SUCCESS; - * - * shutdown: - * eina_shutdown(); - * - * return EXIT_FAILURE; - * } - * @endcode - * - * To be continued - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_error.h" -#include "eina_log.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_array.h" - -/*============================================================================* - * Local * - *============================================================================*/ - -/** - * @cond LOCAL - */ - -static const char EINA_MAGIC_ARRAY_STR[] = "Eina Array"; -static const char EINA_MAGIC_ARRAY_ITERATOR_STR[] = "Eina Array Iterator"; -static const char EINA_MAGIC_ARRAY_ACCESSOR_STR[] = "Eina Array Accessor"; - -#define EINA_MAGIC_CHECK_ARRAY(d) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ARRAY)) { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_ARRAY); } \ - } while (0) - -#define EINA_MAGIC_CHECK_ARRAY_ITERATOR(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ARRAY_ITERATOR)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_ARRAY_ITERATOR); \ - return __VA_ARGS__; \ - } \ - } while (0) - -#define EINA_MAGIC_CHECK_ARRAY_ACCESSOR(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ARRAY_ACCESSOR)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_ACCESSOR); \ - return __VA_ARGS__; \ - } \ - } while (0) - - -typedef struct _Eina_Iterator_Array Eina_Iterator_Array; -struct _Eina_Iterator_Array { - Eina_Iterator iterator; - - const Eina_Array *array; - unsigned int index; - - EINA_MAGIC}; - -typedef struct _Eina_Accessor_Array Eina_Accessor_Array; -struct _Eina_Accessor_Array { - Eina_Accessor accessor; - const Eina_Array *array; - EINA_MAGIC}; - -static int _eina_array_log_dom = -1; - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eina_array_log_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eina_array_log_dom, __VA_ARGS__) - -static void eina_array_iterator_free(Eina_Iterator_Array * - it) EINA_ARG_NONNULL(1); -static Eina_Array *eina_array_iterator_get_container(Eina_Iterator_Array * - it) -EINA_ARG_NONNULL(1); -static Eina_Bool eina_array_iterator_next(Eina_Iterator_Array * it, - void **data) EINA_ARG_NONNULL(1); - -static Eina_Bool eina_array_accessor_get_at(Eina_Accessor_Array * it, - unsigned int idx, - void **data) -EINA_ARG_NONNULL(1); -static Eina_Array *eina_array_accessor_get_container(Eina_Accessor_Array * - it) -EINA_ARG_NONNULL(1); -static void eina_array_accessor_free(Eina_Accessor_Array * - it) EINA_ARG_NONNULL(1); - -static Eina_Bool -eina_array_iterator_next(Eina_Iterator_Array * it, void **data) -{ - EINA_MAGIC_CHECK_ARRAY_ITERATOR(it, EINA_FALSE); - - if (!(it->index < eina_array_count_get(it->array))) - return EINA_FALSE; - - if (data) - *data = eina_array_data_get(it->array, it->index); - - it->index++; - return EINA_TRUE; -} - -static Eina_Array *eina_array_iterator_get_container(Eina_Iterator_Array * - it) -{ - EINA_MAGIC_CHECK_ARRAY_ITERATOR(it, NULL); - return (Eina_Array *) it->array; -} - -static void eina_array_iterator_free(Eina_Iterator_Array * it) -{ - EINA_MAGIC_CHECK_ARRAY_ITERATOR(it); - MAGIC_FREE(it); -} - -static Eina_Bool -eina_array_accessor_get_at(Eina_Accessor_Array * it, - unsigned int idx, void **data) -{ - EINA_MAGIC_CHECK_ARRAY_ACCESSOR(it, EINA_FALSE); - - if (!(idx < eina_array_count_get(it->array))) - return EINA_FALSE; - - if (data) - *data = eina_array_data_get(it->array, idx); - - return EINA_TRUE; -} - -static Eina_Array *eina_array_accessor_get_container(Eina_Accessor_Array * - it) -{ - EINA_MAGIC_CHECK_ARRAY_ACCESSOR(it, NULL); - return (Eina_Array *) it->array; -} - -static void eina_array_accessor_free(Eina_Accessor_Array * it) -{ - EINA_MAGIC_CHECK_ARRAY_ACCESSOR(it); - MAGIC_FREE(it); -} - -EAPI Eina_Bool eina_array_grow(Eina_Array * array) -{ - void **tmp; - unsigned int total; - - EINA_SAFETY_ON_NULL_RETURN_VAL(array, EINA_FALSE); - - EINA_MAGIC_CHECK_ARRAY(array); - - total = array->total + array->step; - eina_error_set(0); - tmp = realloc(array->data, sizeof(void *) * total); - if (EINA_UNLIKELY(!tmp)) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return 0; - } - - array->total = total; - array->data = tmp; - - return 1; -} - -/** - * @endcond - */ - - -/*============================================================================* - * Global * - *============================================================================*/ - -/** - * @internal - * @brief Initialize the array module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the error and magic modules or Eina. It is - * called by eina_init(). - * - * @see eina_init() - */ -Eina_Bool eina_array_init(void) -{ - _eina_array_log_dom = eina_log_domain_register("eina_array", - EINA_LOG_COLOR_DEFAULT); - if (_eina_array_log_dom < 0) { - EINA_LOG_ERR("Could not register log domain: eina_array"); - return EINA_FALSE; - } -#define EMS(n) eina_magic_string_static_set(n, n ## _STR) - EMS(EINA_MAGIC_ARRAY); - EMS(EINA_MAGIC_ARRAY_ITERATOR); - EMS(EINA_MAGIC_ARRAY_ACCESSOR); -#undef EMS - return EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the array module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the array module set up by - * eina_array_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_array_shutdown(void) -{ - eina_log_domain_unregister(_eina_array_log_dom); - _eina_array_log_dom = -1; - return EINA_TRUE; -} - -/*============================================================================* - * API * - *============================================================================*/ - -/** - * @addtogroup Eina_Array_Group Array - * - * @brief These functions provide array management. - * - * The Array data type in Eina is designed to have a very fast access to - * its data (compared to the Eina @ref Eina_List_Group). On the other hand, - * data can be added or removed only at the end of the array. To insert - * data at any place, the Eina @ref Eina_List_Group is the correct container - * to use. - * - * To use the array data type, eina_init() must be called before any - * other array functions. When eina is no more array function is used, - * eina_shutdown() must be called to free all the resources. - * - * An array must be created with eina_array_new(). It allocated all - * the necessary data for an array. When not needed anymore, an array - * is freed with eina_array_free(). This function does not free any - * allocated memory used to store the data of each element. For that, - * just iterate over the array to free them. A convenient way to do - * that is by using #EINA_ARRAY_ITER_NEXT. An example of code is given - * in the description of this macro. - * - * @warning All the other functions do not check if the used array is - * valid or not. It's up to the user to be sure of that. It is - * designed like that for performance reasons. - * - * The usual features of an array are classic ones: to append an - * element, use eina_array_push() and to remove the last element, use - * eina_array_pop(). To retrieve the element at a given positin, use - * eina_array_data_get(). The number of elements can be retrieved with - * eina_array_count_get(). - * - * For more information, you can look at the @ref tutorial_array_page. - * - * @{ - */ - -/** - * @brief Create a new array. - * - * @param step The count of pointers to add when increasing the array size. - * @return @c NULL on failure, non @c NULL otherwise. - * - * This function creates a new array. When adding an element, the array - * allocates @p step elements. When that buffer is full, then adding - * another element will increase the buffer of @p step elements again. - * - * This function return a valid array on success, or @c NULL if memory - * allocation fails. In that case, the error is set to - * #EINA_ERROR_OUT_OF_MEMORY. - */ -EAPI Eina_Array *eina_array_new(unsigned int step) -{ - Eina_Array *array; - - eina_error_set(0); - array = malloc(sizeof(Eina_Array)); - if (!array) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - EINA_MAGIC_SET(array, EINA_MAGIC_ARRAY); - - array->version = EINA_ARRAY_VERSION; - array->data = NULL; - array->total = 0; - array->count = 0; - array->step = step; - - return array; -} - -/** - * @brief Free an array. - * - * @param array The array to free. - * - * This function frees @p array. It calls first eina_array_flush() then - * free the memory of the pointer. It does not free the memory - * allocated for the elements of @p array. To free them, use - * #EINA_ARRAY_ITER_NEXT. For performance reasons, there is no check - * of @p array. - */ -EAPI void eina_array_free(Eina_Array * array) -{ - eina_array_flush(array); - - EINA_SAFETY_ON_NULL_RETURN(array); - EINA_MAGIC_CHECK_ARRAY(array); - MAGIC_FREE(array); -} - -/** - * @brief Set the step of an array. - * - * @param array The array. - * @param sizeof_eina_array Should be the value returned by sizeof(Eina_Array). - * @param step The count of pointers to add when increasing the array size. - * - * This function sets the step of @p array to @p step. For performance - * reasons, there is no check of @p array. If it is @c NULL or - * invalid, the program may crash. This function should be called when - * the array is not initialized. - */ -EAPI void -eina_array_step_set(Eina_Array * array, - unsigned int sizeof_eina_array, unsigned int step) -{ - EINA_SAFETY_ON_NULL_RETURN(array); - - if (sizeof(Eina_Array) != sizeof_eina_array) { - ERR("Unknow Eina_Array size ! Got %i, expected %i !\n", - sizeof_eina_array, (int) sizeof(Eina_Array)); - /* Force memory to zero to provide a small layer of security */ - memset(array, 0, sizeof_eina_array); - return; - } - - array->version = EINA_ARRAY_VERSION; - array->data = NULL; - array->total = 0; - array->count = 0; - array->step = step; - EINA_MAGIC_SET(array, EINA_MAGIC_ARRAY); -} - -/** - * @brief Clean an array. - * - * @param array The array to clean. - * - * This function sets the count member of @p array to 0. For - * performance reasons, there is no check of @p array. If it is - * @c NULL or invalid, the program may crash. - */ -EAPI void eina_array_clean(Eina_Array * array) -{ - EINA_SAFETY_ON_NULL_RETURN(array); - EINA_MAGIC_CHECK_ARRAY(array); - - array->count = 0; -} - -/** - * @brief Flush an array. - * - * @param array The array to flush. - * - * This function sets the count and total members of @p array to 0, - * frees and set to NULL its data member. For performance reasons, - * there is no check of @p array. If it is @c NULL or invalid, the - * program may crash. - */ -EAPI void eina_array_flush(Eina_Array * array) -{ - EINA_SAFETY_ON_NULL_RETURN(array); - EINA_MAGIC_CHECK_ARRAY(array); - - array->count = 0; - array->total = 0; - - if (!array->data) - return; - - free(array->data); - array->data = NULL; -} - -/** - * @brief Rebuild an array by specifying the data to keep. - * - * @param array The array. - * @param keep The functions which selects the data to keep. - * @param gdata The data to pass to the function keep. - * @return #EINA_TRUE on success, #EINA_FALSE oterwise. - * - * This function rebuilds @p array be specifying the elements to keep - * with the function @p keep. @p gdata is an additional data to pass - * to @p keep. For performance reasons, there is no check of @p - * array. If it is @c NULL or invalid, the program may crash. - * - * This function always return a valid array. If it wasn't able to - * remove items due to an allocation failure, it will return #EINA_FALSE - * and the error is set to #EINA_ERROR_OUT_OF_MEMORY. - */ -EAPI Eina_Bool -eina_array_remove(Eina_Array * array, Eina_Bool(*keep) (void *data, - void *gdata), - void *gdata) -{ - void **tmp; - /* WARNING: - The algorithm does exit before using unitialized data. So compiler is - giving you a false positiv here too. - */ - void *data = NULL; - unsigned int total = 0; - unsigned int limit; - unsigned int i; - - EINA_SAFETY_ON_NULL_RETURN_VAL(array, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(keep, EINA_FALSE); - EINA_MAGIC_CHECK_ARRAY(array); - - if (array->total == 0) - return EINA_TRUE; - - for (i = 0; i < array->count; ++i) { - data = eina_array_data_get(array, i); - - if (keep(data, gdata) == EINA_FALSE) - break; - } - limit = i; - if (i < array->count) - ++i; - - for (; i < array->count; ++i) { - data = eina_array_data_get(array, i); - - if (keep(data, gdata) == EINA_TRUE) - break; - } - /* Special case all objects that need to stay are at the beginning of the array. */ - if (i == array->count) { - array->count = limit; - if (array->count == 0) { - free(array->data); - array->total = 0; - array->data = NULL; - } - - return EINA_TRUE; - } - - eina_error_set(0); - tmp = malloc(sizeof(void *) * array->total); - if (!tmp) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return EINA_FALSE; - } - - memcpy(tmp, array->data, limit * sizeof(void *)); - total = limit; - - if (i < array->count) { - tmp[total] = data; - total++; - ++i; - } - - for (; i < array->count; ++i) { - data = eina_array_data_get(array, i); - - if (keep(data, gdata)) { - tmp[total] = data; - total++; - } - } - - free(array->data); - - /* If we do not keep any object in the array, we should have exited - earlier in test (i == array->count). */ - assert(total != 0); - - array->data = tmp; - array->count = total; - return EINA_TRUE; -} - -/** - * @brief Returned a new iterator associated to an array. - * - * @param array The array. - * @return A new iterator. - * - * This function returns a newly allocated iterator associated to - * @p array. If @p array is @c NULL or the count member of @p array is - * less or equal than 0, this function returns NULL. If the memory can - * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is - * set. Otherwise, a valid iterator is returned. - */ -EAPI Eina_Iterator *eina_array_iterator_new(const Eina_Array * array) -{ - Eina_Iterator_Array *it; - - EINA_SAFETY_ON_NULL_RETURN_VAL(array, NULL); - EINA_MAGIC_CHECK_ARRAY(array); - - eina_error_set(0); - it = calloc(1, sizeof(Eina_Iterator_Array)); - if (!it) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - EINA_MAGIC_SET(it, EINA_MAGIC_ARRAY_ITERATOR); - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - it->array = array; - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(eina_array_iterator_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER(eina_array_iterator_get_container); - it->iterator.free = FUNC_ITERATOR_FREE(eina_array_iterator_free); - - return &it->iterator; -} - -/** - * @brief Returned a new accessor associated to an array. - * - * @param array The array. - * @return A new accessor. - * - * This function returns a newly allocated accessor associated to - * @p array. If @p array is @c NULL or the count member of @p array is - * less or equal than 0, this function returns NULL. If the memory can - * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is - * set. Otherwise, a valid accessor is returned. - */ -EAPI Eina_Accessor *eina_array_accessor_new(const Eina_Array * array) -{ - Eina_Accessor_Array *ac; - - EINA_SAFETY_ON_NULL_RETURN_VAL(array, NULL); - EINA_MAGIC_CHECK_ARRAY(array); - - eina_error_set(0); - ac = calloc(1, sizeof(Eina_Accessor_Array)); - if (!ac) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - EINA_MAGIC_SET(ac, EINA_MAGIC_ARRAY_ACCESSOR); - EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR); - - ac->array = array; - - ac->accessor.version = EINA_ACCESSOR_VERSION; - ac->accessor.get_at = - FUNC_ACCESSOR_GET_AT(eina_array_accessor_get_at); - ac->accessor.get_container = - FUNC_ACCESSOR_GET_CONTAINER(eina_array_accessor_get_container); - ac->accessor.free = FUNC_ACCESSOR_FREE(eina_array_accessor_free); - - return &ac->accessor; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_benchmark.c b/tests/suite/ecore/src/lib/eina_benchmark.c deleted file mode 100644 index 83ead5ee5a..0000000000 --- a/tests/suite/ecore/src/lib/eina_benchmark.c +++ /dev/null @@ -1,720 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - - -/** - * @page tutorial_benchmark_page Benchmark Tutorial - * - * The Benchmark module allows you to write easily benchmarks - * framework in a project for timing critical part and detect slow - * parts of code. In addition it automatically creates data files of - * these benchmark, as well as a gnuplot file which can display the - * comparison curves of the benchmarks. - * - * @section tutorial_benchmark_basic_usage Basic Usage - * - * To create a basic benchmark, you have to follow these steps: - * - * @li Create a new bechmark - * @li Write the functions that wraps the the functions you want to - * bechmark. - * @li Register these wrappers functions. - * @li Run the benchmark. - * @li Free the memory. - * - * Here is a basic example of bechmark which creates two functions - * that will be run. These functions just print a message. - * - * @code - * #include - * #include - * - * #include - * - * static - * void work1(int request) - * { - * printf ("work1 in progress... Request: %d\n", request); - * } - * - * static - * void work2(int request) - * { - * printf ("work2 in progress... Request: %d\n", request); - * } - * - * int main() - * { - * Eina_Benchmark *test; - * Eina_Array *ea; - * - * if (!eina_init()) - * return EXIT_FAILURE; - * - * test = eina_benchmark_new("test", "run"); - * if (!test) - * goto shutdown_eina; - * - * eina_benchmark_register(test, "work-1", EINA_BENCHMARK(work1), 200, 300, 10); - * eina_benchmark_register(test, "work-2", EINA_BENCHMARK(work2), 100, 150, 5); - * - * ea = eina_benchmark_run(test); - * - * eina_benchmark_free(test); - * eina_shutdown(); - * - * return EXIT_SUCCESS; - * - * shutdown_eina: - * eina_shutdown(); - * - * return EXIT_FAILURE; - * } - * @endcode - * - * As "test", "run" are passed to eina_benchmark_new() and as the tests - * "work-1" and "work-2" are registered, the data files - * bench_test_run.work-1.data and bench_test_run.work-2.data will be - * created after the eina_benchmark_run() call. They contain four - * columns. The file bench_test_run.work-1.data contains for example: - * - * @code - * # specimen experiment time starting time ending time - * 200 23632 2852446 2876078 - * 210 6924 2883046 2889970 - * 220 6467 2895962 2902429 - * 230 6508 2908271 2914779 - * 240 6278 2920610 2926888 - * 250 6342 2932830 2939172 - * 260 6252 2944954 2951206 - * 270 6463 2956978 2963441 - * 280 6347 2969548 2975895 - * 290 6457 2981702 2988159 - * @endcode - * - * The first column (specimen) is the integer passed to the work1() - * function when the test is run. The second column (experiment time) - * is the time, in nanosecond, that work1() takes. The third and - * fourth columnd are self-explicit. - * - * You can see that the integer passed work1() starts from 200 and - * finishes at 290, with a step of 10. These values are computed withe - * last 3 values passed to eina_benchmark_register(). See the document - * of that function for the detailed behavior. - * - * The gnuplot file will be named bench_test_run.gnuplot. Just run: - * - * @code - * gnuplot bench_test_run.gnuplot - * @endcode - * - * to create the graphic of the comparison curves. The image file is - * named output_test_run.png. - * - * @section tutorial_benchmark_advanced_usage More Advanced Usage - * - * In this section, several test will be created and run. The idea is - * exactly the same than in the previous section, but with some basic - * automatic way to run all the benchmarks. The following code - * benchmarks some Eina converts functions, and some Eina containers - * types: - * - * @code - * #include - * #include - * #include - * - * #include - * - * static void bench_convert(Eina_Benchmark *bench); - * static void bench_container(Eina_Benchmark *bench); - * - * typedef struct _Benchmark_Case Benchmark_Case; - * - * struct _Benchmark_Case - * { - * const char *bench_case; - * void (*build)(Eina_Benchmark *bench); - * }; - * - * static const Benchmark_Case benchmarks[] = { - * { "Bench 1", bench_convert }, - * { "Bench 2", bench_container }, - * { NULL, NULL } - * }; - * - * static - * void convert1(int request) - * { - * char tmp[128]; - * int i; - * - * srand(time(NULL)); - * - * for (i = 0; i < request; ++i) - * eina_convert_itoa(rand(), tmp); - * } - * - * static - * void convert2(int request) - * { - * char tmp[128]; - * int i; - * - * srand(time(NULL)); - * - * for (i = 0; i < request; ++i) - * eina_convert_xtoa(rand(), tmp); - * } - * - * static void - * bench_convert(Eina_Benchmark *bench) - * { - * eina_benchmark_register(bench, "convert-1", EINA_BENCHMARK(convert1), 200, 400, 10); - * eina_benchmark_register(bench, "convert-2", EINA_BENCHMARK(convert2), 200, 400, 10); - * } - * - * static - * void array(int request) - * { - * Eina_Array *array; - * Eina_Array_Iterator it; - * int *data; - * int i; - * - * srand(time(NULL)); - * - * array = eina_array_new(64); - * - * for (i = 0; i < request; ++i) - * { - * data = (int *)malloc(sizeof(int)); - * if (!data) continue; - * *data = rand(); - * eina_array_push(array, data); - * } - * - * EINA_ARRAY_ITER_NEXT(array, i, data, it) - * free(data); - * - * eina_array_free(array); - * } - * - * static - * void list(int request) - * { - * Eina_List *l = NULL; - * int *data; - * int i; - * - * srand(time(NULL)); - * - * for (i = 0; i < request; ++i) - * { - * data = (int *)malloc(sizeof(int)); - * if (!data) continue; - * *data = rand(); - * l = eina_list_prepend(l, data); - * } - * - * while (l) - * { - * free(eina_list_data_get(l)); - * l = eina_list_remove_list(l, l); - * } - * } - * - * static void - * bench_container(Eina_Benchmark *bench) - * { - * eina_benchmark_register(bench, "array", EINA_BENCHMARK(array), 200, 300, 10); - * eina_benchmark_register(bench, "list", EINA_BENCHMARK(list), 200, 300, 10); - * } - * - * int main() - * { - * Eina_Benchmark *test; - * Eina_Array *ea; - * unsigned int i; - * - * if (!eina_init()) - * return EXIT_FAILURE; - * - * for (i = 0; benchmarks[i].bench_case != NULL; ++i) - * { - * test = eina_benchmark_new(benchmarks[i].bench_case, "Benchmark example"); - * if (!test) - * continue; - * - * benchmarks[i].build(test); - * - * ea = eina_benchmark_run(test); - * - * eina_benchmark_free(test); - * } - * - * eina_shutdown(); - * - * return EXIT_SUCCESS; - * } - * @endcode - * - * gnuplot can be used to see how are performed the convert functions - * together, as well as how are performed the containers. So it is now - * easy to see that the hexadecimal convert function is faster than - * the decimal one, and that arrays are faster than lists. - * - * You can improve all that by executing automatically gnuplot in your - * program, or integrate the Eina benchmark framework in an autotooled - * project. See that - * page - * for more informations. - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef HAVE_ALLOCA_H -#include -#elif defined __GNUC__ -#define alloca __builtin_alloca -#elif defined _AIX -#define alloca __alloca -#elif defined _MSC_VER -#include -#define alloca _alloca -#else -#include -#ifdef __cplusplus -extern "C" -#endif -void *alloca(size_t); -#endif - -#include -#include -#include - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_log.h" -#include "eina_benchmark.h" -#include "eina_inlist.h" -#include "eina_list.h" -#include "eina_counter.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -#define EINA_BENCHMARK_FILENAME_MASK "bench_%s_%s.gnuplot" -#define EINA_BENCHMARK_DATA_MASK "bench_%s_%s.%s.data" - -typedef struct _Eina_Run Eina_Run; -struct _Eina_Run { - EINA_INLIST; - - Eina_Benchmark_Specimens cb; - const char *name; - int start; - int end; - int step; -}; - -struct _Eina_Benchmark { - const char *name; - const char *run; - - Eina_Inlist *runs; - Eina_List *names; -}; - -static int _eina_benchmark_log_dom = -1; - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eina_benchmark_log_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eina_benchmark_log_dom, __VA_ARGS__) - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the benchmark module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the benchmark module of Eina. It is called by - * eina_init(). - * - * @see eina_init() - */ -Eina_Bool eina_benchmark_init(void) -{ - _eina_benchmark_log_dom = - eina_log_domain_register("eina_benchmark", - EINA_LOG_COLOR_DEFAULT); - if (_eina_benchmark_log_dom < 0) { - EINA_LOG_ERR - ("Could not register log domain: eina_benchmark"); - return EINA_FALSE; - } - - return EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the benchmark module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the benchmark module set up by - * eina_benchmark_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_benchmark_shutdown(void) -{ - eina_log_domain_unregister(_eina_benchmark_log_dom); - _eina_benchmark_log_dom = -1; - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Benchmark_Group Benchmark - * - * These functions allow you to add benchmark framework in a project - * for timing critical part and detect slow parts of code. It is used - * in Eina to compare the time used by eina, glib, evas and ecore data - * types. - * - * To use the benchmark module, Eina must be initialized with - * eina_init() and later shut down with eina_shutdown(). A benchmark - * is created with eina_benchmark_new() and freed with - * eina_benchmark_free(). - * - * eina_benchmark_register() adds a test to a benchmark. That test can - * be run a certain amount of times. Adding more than one test to be - * executed allows the comparison between several parts of a program, - * or different implementations. - * - * eina_benchmark_run() runs all the tests registered with - * eina_benchmark_register(). The amount of time of each test is - * written in a gnuplot file. - * - * For more information, you can look at the @ref tutorial_benchmark_page. - * - * @{ - */ - -/** - * @brief Create a new array. - * - * @param name The name of the benchmark. - * @param run The name of the run. - * @return @c NULL on failure, non @c NULL otherwise. - * - * This function creates a new benchmark. @p name and @p run are used - * to name the gnuplot file that eina_benchmark_run() will create. - * - * This function return a valid benchmark on success, or @c NULL if - * memory allocation fails. In that case, the error is set to - * #EINA_ERROR_OUT_OF_MEMORY. - * - * When the new module is not needed anymore, use - * eina_benchmark_free() to free the allocated memory. - */ -EAPI Eina_Benchmark *eina_benchmark_new(const char *name, const char *run) -{ - Eina_Benchmark *new; - - eina_error_set(0); - new = calloc(1, sizeof(Eina_Benchmark)); - if (!new) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - new->name = name; - new->run = run; - - return new; -} - -/** - * @brief Free a benchmark object. - * - * @param bench The benchmark to free. - * - * This function removes all the benchmark tests that have been - * registered and frees @p bench. If @p bench is @c NULL, this - * function returns immediately. - */ -EAPI void eina_benchmark_free(Eina_Benchmark * bench) -{ - Eina_Array *names; - - if (!bench) - return; - - while (bench->runs) { - Eina_Run *run = (Eina_Run *) bench->runs; - - bench->runs = eina_inlist_remove(bench->runs, bench->runs); - free(run); - } - - EINA_LIST_FREE(bench->names, names) { - Eina_Array_Iterator it; - char *tmp; - unsigned int i; - - EINA_ARRAY_ITER_NEXT(names, i, tmp, it) - free(tmp); - - eina_array_free(names); - } - - free(bench); -} - -/** - * @brief Add a test to a benchmark. - * - * @param bench The benchmark. - * @param name The name of the test. - * @param bench_cb The test function to be called. - * @param count_start The start data to be passed to @p bench_cb. - * @param count_end The end data to be passed to @p bench_cb. - * @param count_step The step data to be passed to @p bench_cb. - * - * This function adds the test named @p name to @p benchmark. @p - * bench_cb is the function called when the test is executed. That - * test can be executed a certain amount of time. @p start, @p end and - * @p step define a loop with a step increment. The integer that is - * increasing by @p step from @p start to @p end is passed to @p - * bench_cb when eina_benchmark_run() is called. - * - * If @p bench is @c NULL, this function returns imediatly. If the - * allocation of the memory of the test to add fails, the error is set - * to #EINA_ERROR_OUT_OF_MEMORY. - */ -EAPI Eina_Bool -eina_benchmark_register(Eina_Benchmark * bench, - const char *name, - Eina_Benchmark_Specimens bench_cb, - int count_start, int count_end, int count_step) -{ - Eina_Run *run; - - if (!bench) - return EINA_FALSE; - - if (count_step == 0) - return EINA_FALSE; - - eina_error_set(0); - run = calloc(1, sizeof(Eina_Run)); - if (!run) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return EINA_FALSE; - } - - run->cb = bench_cb; - run->name = name; - run->start = count_start; - run->end = count_end; - run->step = count_step; - - bench->runs = - eina_inlist_append(bench->runs, EINA_INLIST_GET(run)); - - return EINA_TRUE; -} - -/** - * @brief Run the benchmark tests that have been registered. - * - * @param bench The benchmark. - * @return The list of names of the test files. - * - * This function runs all the tests that as been registered with - * eina_benchmark_register() and save the result in a gnuplot - * file. The name of the file has the following format: - * - * @code - * bench_[name]_[run]%s.gnuplot - * @endcode - * - * where [name] and [run] are the values passed to - * eina_benchmark_new(). - * - * Each registered test is executed and timed. The time is written to - * the gnuplot file. The number of times each test is executed is - * controlled by the parameters passed to eina_benchmark_register(). - * - * If @p bench is @c NULL, this functions returns @c NULL - * immediately. Otherwise, it returns the list of the names of each - * test. - */ -EAPI Eina_Array *eina_benchmark_run(Eina_Benchmark * bench) -{ - FILE *main_script; - FILE *current_data; - Eina_Array *ea; - Eina_Run *run; - char *buffer; - Eina_Bool first = EINA_FALSE; - size_t length; - - if (!bench) - return NULL; - - length = - strlen(EINA_BENCHMARK_FILENAME_MASK) + strlen(bench->name) + - strlen(bench->run); - - buffer = alloca(sizeof(char) * length); - if (!buffer) - return NULL; - - snprintf(buffer, - length, - EINA_BENCHMARK_FILENAME_MASK, bench->name, bench->run); - - main_script = fopen(buffer, "w"); - if (!main_script) - return NULL; - - ea = eina_array_new(16); - if (!ea) { - fclose(main_script); - return NULL; - } - - eina_array_push(ea, strdup(buffer)); - - fprintf(main_script, - "set autoscale # scale axes automatically\n" - "unset log # remove any log-scaling\n" - "unset label # remove any previous labels\n" - "set xtic auto # set xtics automatically\n" - "set ytic auto # set ytics automatically\n" -/* "set logscale y\n" */ - "set terminal png size 1024,768\n" - "set output \"output_%s_%s.png\"\n" - "set title \"%s %s\n" - "set xlabel \"tests\"\n" - "set ylabel \"time\"\n" - "plot ", bench->name, bench->run, bench->name, bench->run); - - EINA_INLIST_FOREACH(bench->runs, run) { - Eina_Counter *counter; - char *result; - size_t tmp; - int i; - - tmp = - strlen(EINA_BENCHMARK_DATA_MASK) + - strlen(bench->name) + strlen(bench->run) + - strlen(run->name); - if (tmp > length) { - buffer = alloca(sizeof(char) * tmp); - length = tmp; - } - - snprintf(buffer, - length, - EINA_BENCHMARK_DATA_MASK, - bench->name, bench->run, run->name); - - current_data = fopen(buffer, "w"); - if (!current_data) - continue; - - eina_array_push(ea, strdup(buffer)); - - counter = eina_counter_new(run->name); - - for (i = run->start; i < run->end; i += run->step) { - fprintf(stderr, "Run %s: %i\n", run->name, i); - eina_counter_start(counter); - - run->cb(i); - - eina_counter_stop(counter, i); - } - - result = eina_counter_dump(counter); - if (result) { - fprintf(current_data, "%s", result); - free(result); - } - - eina_counter_free(counter); - - fclose(current_data); - - if (first == EINA_FALSE) - first = EINA_TRUE; - else - fprintf(main_script, ", \\\n"); - - fprintf(main_script, - "\"%s\" using 1:2 title \'%s\' with line", - buffer, run->name); - } - - fprintf(main_script, "\n"); - - fclose(main_script); - - bench->names = eina_list_append(bench->names, ea); - - return ea; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_binshare.c b/tests/suite/ecore/src/lib/eina_binshare.c deleted file mode 100644 index f6946379ab..0000000000 --- a/tests/suite/ecore/src/lib/eina_binshare.c +++ /dev/null @@ -1,193 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, - * Jorge Luis Zapata Muga, - * Cedric Bail, - * Gustavo Sverzut Barbieri - * Tom Hacohen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - - */ -/** - * @page tutorial_binshare_page Binary Share Tutorial - * - * Should call eina_binshare_init() before usage and eina_binshare_shutdown() after. - * to be written... - * - */ - -#include "eina_share_common.h" -#include "eina_unicode.h" -#include "eina_private.h" -#include "eina_binshare.h" - -/* The actual share */ -static Eina_Share *binshare_share; -static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node"; - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the share_common module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the share_common module of Eina. It is called by - * eina_init(). - * - * @see eina_init() - */ -EAPI Eina_Bool eina_binshare_init(void) -{ - return eina_share_common_init(&binshare_share, - EINA_MAGIC_BINSHARE_NODE, - EINA_MAGIC_BINSHARE_NODE_STR); -} - -/** - * @internal - * @brief Shut down the share_common module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the share_common module set up by - * eina_share_common_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -EAPI Eina_Bool eina_binshare_shutdown(void) -{ - Eina_Bool ret; - ret = eina_share_common_shutdown(&binshare_share); - return ret; -} - -/*============================================================================* -* API * -*============================================================================*/ -/** - * @addtogroup Eina_Binshare_Group Binary Share - * - * These functions allow you to store one copy of an object, and use it - * throughout your program. - * - * This is a method to reduce the number of duplicated objects kept in - * memory. - * - * For more information, you can look at the @ref tutorial_binshare_page. - * - * @{ - */ - -/** - * @brief Note that the given object has lost an instance. - * - * @param obj object The given object. - * - * This function decreases the reference counter associated to @p obj - * if it exists. If that counter reaches 0, the memory associated to - * @p obj is freed. If @p obj is NULL, the function returns - * immediately. - * - * Note that if the given pointer is not shared or NULL, bad things - * will happen, likely a segmentation fault. - */ -EAPI void eina_binshare_del(const void *obj) -{ - if (!obj) - return; - - eina_share_common_del(binshare_share, obj); -} - -/** - * @brief Retrieve an instance of an object for use in a program. - * - * @param obj The binary object to retrieve an instance of. - * @param olen The byte size - * @return A pointer to an instance of the object on success. - * @c NULL on failure. - * - * This function retrieves an instance of @p obj. If @p obj is - * @c NULL, then @c NULL is returned. If @p obj is already stored, it - * is just returned and its reference counter is increased. Otherwise - * it is added to the objects to be searched and a duplicated object - * of @p obj is returned. - * - * This function does not check object size, but uses the - * exact given size. This can be used to share part of a larger - * object or subobject. - * - * @see eina_binshare_add() - */ -EAPI const void *eina_binshare_add_length(const void *obj, - unsigned int olen) -{ - return eina_share_common_add_length(binshare_share, - obj, (olen) * sizeof(char), 0); -} - -/** - * Increment references of the given shared object. - * - * @param obj The shared object. - * @return A pointer to an instance of the object on success. - * @c NULL on failure. - * - * This is similar to eina_share_common_add(), but it's faster since it will - * avoid lookups if possible, but on the down side it requires the parameter - * to be shared before, in other words, it must be the return of a previous - * eina_binshare_add(). - * - * There is no unref since this is the work of eina_binshare_del(). - */ -EAPI const void *eina_binshare_ref(const void *obj) -{ - return eina_share_common_ref(binshare_share, obj); -} - -/** - * @brief Note that the given object @b must be shared. - * - * @param obj the shared object to know the length. It is safe to - * give NULL, in that case -1 is returned. - * - * This function is a cheap way to known the length of a shared - * object. Note that if the given pointer is not shared, bad - * things will happen, likely a segmentation fault. If in doubt, try - * strlen(). - */ -EAPI int eina_binshare_length(const void *obj) -{ - return eina_share_common_length(binshare_share, obj); -} - -/** - * @brief Dump the contents of the share_common. - * - * This function dumps all objects in the share_common to stdout with a - * DDD: prefix per line and a memory usage summary. - */ -EAPI void eina_binshare_dump(void) -{ - eina_share_common_dump(binshare_share, NULL, 0); -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_chained_mempool.c b/tests/suite/ecore/src/lib/eina_chained_mempool.c deleted file mode 100644 index 2fd5152a24..0000000000 --- a/tests/suite/ecore/src/lib/eina_chained_mempool.c +++ /dev/null @@ -1,345 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008-2010 Cedric BAIL, Vincent Torri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#ifdef EFL_HAVE_POSIX_THREADS -#include -#endif - -#ifdef EFL_HAVE_WIN32_THREADS -#define WIN32_LEAN_AND_MEAN -#include -#undef WIN32_LEAN_AND_MEAN -#endif - -#include "eina_inlist.h" -#include "eina_error.h" -#include "eina_module.h" -#include "eina_mempool.h" -#include "eina_trash.h" - -#include "eina_private.h" - -#ifdef DEBUG -#include "eina_log.h" - -static int _eina_mempool_log_dom = -1; - -#ifdef INF -#undef INF -#endif -#define INF(...) EINA_LOG_DOM_INFO(_eina_mempool_log_dom, __VA_ARGS__) -#endif - -typedef struct _Chained_Mempool Chained_Mempool; -struct _Chained_Mempool { - Eina_Inlist *first; - const char *name; - int item_alloc; - int pool_size; - int alloc_size; - int group_size; - int usage; -#ifdef EFL_HAVE_THREADS -#ifdef EFL_HAVE_POSIX_THREADS - pthread_mutex_t mutex; -#else - HANDLE mutex; -#endif -#endif -}; - -typedef struct _Chained_Pool Chained_Pool; -struct _Chained_Pool { - EINA_INLIST; - Eina_Trash *base; - int usage; -}; - -static inline Chained_Pool *_eina_chained_mp_pool_new(Chained_Mempool * - pool) -{ - Chained_Pool *p; - unsigned char *ptr; - int i; - - eina_error_set(0); - p = malloc(pool->alloc_size); - if (!p) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - ptr = - (unsigned char *) p + - eina_mempool_alignof(sizeof(Chained_Pool)); - p->usage = 0; - p->base = NULL; - for (i = 0; i < pool->pool_size; ++i, ptr += pool->item_alloc) - eina_trash_push(&p->base, ptr); - return p; -} - -static inline void _eina_chained_mp_pool_free(Chained_Pool * p) -{ - free(p); -} - -static void *eina_chained_mempool_malloc(void *data, - __UNUSED__ unsigned int size) -{ - Chained_Mempool *pool = data; - Chained_Pool *p = NULL; - void *mem; - -#ifdef EFL_HAVE_THREADS -#ifdef EFL_HAVE_POSIX_THREADS - pthread_mutex_lock(&pool->mutex); -#else - WaitForSingleObject(pool->mutex, INFINITE); -#endif -#endif - - // look 4 pool from 2nd bucket on - EINA_INLIST_FOREACH(pool->first, p) { - // base is not NULL - has a free slot - if (p->base) { - pool->first = - eina_inlist_demote(pool->first, - EINA_INLIST_GET(p)); - break; - } - } - - // we have reached the end of the list - no free pools - if (!p) { - p = _eina_chained_mp_pool_new(pool); - if (!p) { -#ifdef EFL_HAVE_PTHREAD -#ifdef EFL_HAVE_POSIX_THREADS - pthread_mutex_unlock(&pool->mutex); -#else - ReleaseMutex(pool->mutex); -#endif -#endif - return NULL; - } - - pool->first = - eina_inlist_prepend(pool->first, EINA_INLIST_GET(p)); - } - // Request a free pointer - mem = eina_trash_pop(&p->base); - // move to end - it just filled up - if (!p->base) - pool->first = - eina_inlist_demote(pool->first, EINA_INLIST_GET(p)); - - p->usage++; - pool->usage++; - -#ifdef EFL_HAVE_THREADS -#ifdef EFL_HAVE_POSIX_THREADS - pthread_mutex_unlock(&pool->mutex); -#else - ReleaseMutex(pool->mutex); -#endif -#endif - - return mem; -} - -static void eina_chained_mempool_free(void *data, void *ptr) -{ - Chained_Mempool *pool = data; - Chained_Pool *p; - void *pmem; - int psize; - - psize = pool->group_size; - // look 4 pool - -#ifdef EFL_HAVE_THREADS -#ifdef EFL_HAVE_POSIX_THREADS - pthread_mutex_lock(&pool->mutex); -#else - WaitForSingleObject(pool->mutex, INFINITE); -#endif -#endif - - EINA_INLIST_FOREACH(pool->first, p) { - // pool mem base - pmem = - (void *) (((unsigned char *) p) + - sizeof(Chained_Pool)); - // is it in pool mem? - if ((ptr >= pmem) && - ((unsigned char *) ptr < - (((unsigned char *) pmem) + psize))) { - // freed node points to prev free node - eina_trash_push(&p->base, ptr); - // next free node is now the one we freed - p->usage--; - pool->usage--; - if (p->usage == 0) { - // free bucket - pool->first = - eina_inlist_remove(pool->first, - EINA_INLIST_GET(p)); - _eina_chained_mp_pool_free(p); - } else - // move to front - pool->first = - eina_inlist_promote(pool->first, - EINA_INLIST_GET - (p)); - - break; - } - } - -#ifdef EFL_HAVE_THREADS -#ifdef EFL_HAVE_POSIX_THREADS - pthread_mutex_unlock(&pool->mutex); -#else - ReleaseMutex(pool->mutex); -#endif -#endif -} - -static void *eina_chained_mempool_realloc(__UNUSED__ void *data, - __UNUSED__ void *element, - __UNUSED__ unsigned int size) -{ - return NULL; -} - -static void *eina_chained_mempool_init(const char *context, - __UNUSED__ const char *option, - va_list args) -{ - Chained_Mempool *mp; - int item_size; - size_t length; - - length = context ? strlen(context) + 1 : 0; - - mp = calloc(1, sizeof(Chained_Mempool) + length); - if (!mp) - return NULL; - - item_size = va_arg(args, int); - mp->pool_size = va_arg(args, int); - - if (length) { - mp->name = (const char *) (mp + 1); - memcpy((char *) mp->name, context, length); - } - - mp->item_alloc = eina_mempool_alignof(item_size); - mp->group_size = mp->item_alloc * mp->pool_size; - mp->alloc_size = - mp->group_size + eina_mempool_alignof(sizeof(Chained_Pool)); - -#ifdef EFL_HAVE_THREADS -#ifdef EFL_HAVE_POSIX_THREADS - pthread_mutex_init(&mp->mutex, NULL); -#else - mp->mutex = CreateMutex(NULL, FALSE, NULL); -#endif -#endif - - return mp; -} - -static void eina_chained_mempool_shutdown(void *data) -{ - Chained_Mempool *mp; - - mp = (Chained_Mempool *) data; - - while (mp->first) { - Chained_Pool *p = (Chained_Pool *) mp->first; - -#ifdef DEBUG - if (p->usage > 0) - INF("Bad news we are destroying not an empty mempool [%s]\n", mp->name); - -#endif - - mp->first = eina_inlist_remove(mp->first, mp->first); - _eina_chained_mp_pool_free(p); - } - -#ifdef EFL_HAVE_THREADS -#ifdef EFL_HAVE_POSIX_THREADS - pthread_mutex_destroy(&mp->mutex); -#else - CloseHandle(mp->mutex); -#endif -#endif - - free(mp); -} - -static Eina_Mempool_Backend _eina_chained_mp_backend = { - "chained_mempool", - &eina_chained_mempool_init, - &eina_chained_mempool_free, - &eina_chained_mempool_malloc, - &eina_chained_mempool_realloc, - NULL, - NULL, - &eina_chained_mempool_shutdown -}; - -Eina_Bool chained_init(void) -{ -#ifdef DEBUG - _eina_mempool_log_dom = eina_log_domain_register("eina_mempool", - EINA_LOG_COLOR_DEFAULT); - if (_eina_mempool_log_dom < 0) { - EINA_LOG_ERR - ("Could not register log domain: eina_mempool"); - return EINA_FALSE; - } -#endif - return eina_mempool_register(&_eina_chained_mp_backend); -} - -void chained_shutdown(void) -{ - eina_mempool_unregister(&_eina_chained_mp_backend); -#ifdef DEBUG - eina_log_domain_unregister(_eina_mempool_log_dom); - _eina_mempool_log_dom = -1; -#endif -} - -#ifndef EINA_STATIC_BUILD_CHAINED_POOL - -EINA_MODULE_INIT(chained_init); -EINA_MODULE_SHUTDOWN(chained_shutdown); - -#endif /* ! EINA_STATIC_BUILD_CHAINED_POOL */ diff --git a/tests/suite/ecore/src/lib/eina_convert.c b/tests/suite/ecore/src/lib/eina_convert.c deleted file mode 100644 index d949723c28..0000000000 --- a/tests/suite/ecore/src/lib/eina_convert.c +++ /dev/null @@ -1,746 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric BAIL, Vincent Torri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_log.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_convert.h" -#include "eina_fp.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -static const char look_up_table[] = { '0', '1', '2', '3', '4', - '5', '6', '7', '8', '9', - 'a', 'b', 'c', 'd', 'e', 'f' -}; - -static int _eina_convert_log_dom = -1; - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eina_convert_log_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eina_convert_log_dom, __VA_ARGS__) - -#define HEXA_TO_INT(Hexa) (Hexa >= 'a') ? Hexa - 'a' + 10 : Hexa - '0' - -static inline void reverse(char s[], int length) -{ - int i, j; - char c; - - for (i = 0, j = length - 1; i < j; i++, j--) { - c = s[i]; - s[i] = s[j]; - s[j] = c; - } -} - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -EAPI Eina_Error EINA_ERROR_CONVERT_P_NOT_FOUND = 0; -EAPI Eina_Error EINA_ERROR_CONVERT_0X_NOT_FOUND = 0; -EAPI Eina_Error EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH = 0; - -static const char EINA_ERROR_CONVERT_0X_NOT_FOUND_STR[] = - "Error during string conversion to float, First '0x' was not found."; -static const char EINA_ERROR_CONVERT_P_NOT_FOUND_STR[] = - "Error during string conversion to float, First 'p' was not found."; -static const char EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH_STR[] = - "Error outrun string limit during conversion string conversion to float."; - -/** - * @endcond - */ - -/** - * @internal - * @brief Initialize the convert module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the convert module of Eina. It is called by - * eina_init(). - * - * This function sets up the error module of Eina and registers the - * errors #EINA_ERROR_CONVERT_0X_NOT_FOUND, - * #EINA_ERROR_CONVERT_P_NOT_FOUND and - * #EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH. - * - * @see eina_init() - */ -Eina_Bool eina_convert_init(void) -{ - _eina_convert_log_dom = eina_log_domain_register("eina_convert", - EINA_LOG_COLOR_DEFAULT); - if (_eina_convert_log_dom < 0) { - EINA_LOG_ERR - ("Could not register log domain: eina_convert"); - return EINA_FALSE; - } -#define EEMR(n) n = eina_error_msg_static_register(n ## _STR) - EEMR(EINA_ERROR_CONVERT_0X_NOT_FOUND); - EEMR(EINA_ERROR_CONVERT_P_NOT_FOUND); - EEMR(EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH); -#undef EEMR - - return EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the convert module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the convert module set up by - * eina_convert_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_convert_shutdown(void) -{ - eina_log_domain_unregister(_eina_convert_log_dom); - _eina_convert_log_dom = -1; - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Convert_Group Convert - * - * These functions allow you to convert integer or real numbers to - * string or conversely. - * - * To use these functions, you have to call eina_init() - * first, and eina_shutdown() when eina is not used anymore. - * - * @section Eina_Convert_From_Integer_To_Sring Conversion from integer to string - * - * To convert an integer to a string in the decimal base, - * eina_convert_itoa() should be used. If the hexadecimal base is - * wanted, eina_convert_xtoa() should be used. They all need a bufffer - * sufficiently large to store all the cyphers. - * - * Here is an example of use: - * - * @code - * #include - * #include - * - * #include - * - * int main(void) - * { - * char tmp[128]; - * - * if (!eina_init()) - * { - * printf ("Error during the initialization of eina.\n"); - * return EXIT_FAILURE; - * } - * - * eina_convert_itoa(45, tmp); - * printf("value: %s\n", tmp); - - * eina_convert_xtoa(0xA1, tmp); - * printf("value: %s\n", tmp); - * - * eina_shutdown(); - * - * return EXIT_SUCCESS; - * } - * @endcode - * - * Compile this code with the following command: - * - * @code - * gcc -Wall -o test_eina_convert test_eina.c `pkg-config --cflags --libs eina` - * @endcode - * - * @note - * The alphabetical cyphers are in lower case. - * - * @section Eina_Convert_Double Conversion double / string - * - * To convert a double to a string, eina_convert_dtoa() should be - * used. Like with the integer functions, a buffer must be used. The - * resulting string ghas the following format (which is the result - * obtained with snprintf() and the @%a modifier): - * - * @code - * [-]0xh.hhhhhp[+-]e - * @endcode - * - * To convert a string to a double, eina_convert_atod() should be - * used. The format of the string must be as above. Then, the double - * has the following mantiss and exponent: - * - * @code - * mantiss : [-]hhhhhh - * exponent : 2^([+-]e - 4 * n) - * @endcode - * - * with n being number of cypers after the point in the string - * format. To obtain the double number from the mantiss and exponent, - * use ldexp(). - * - * Here is an example of use: - * - * @code - * #include - * #include - * #include - * - * #include - * - * int main(void) - * { - * char tmp[128]; - * long long int m = 0; - * long int e = 0; - * double r; - * - * if (!eina_init()) - * { - * printf ("Error during the initialization of eina.\n"); - * return EXIT_FAILURE; - * } - * - * printf("initial value : 40.56\n"); - * eina_convert_dtoa(40.56, tmp); - * printf("result dtoa : %s\n", tmp); - - * eina_convert_atod(tmp, 128, &m, &e); - * r = ldexp((double)m, e); - * printf("result atod : %f\n", r); - * - * eina_shutdown(); - * - * return EXIT_SUCCESS; - * } - * @endcode - * - * Compile this code with the following command: - * - * @code - * gcc -Wall -o test_eina_convert test_eina.c `pkg-config --cflags --libs eina` -lm - * @endcode - * - * @{ - */ - -/* - * Come from the second edition of The C Programming Language ("K&R2") on page 64 - */ - -/** - * @brief Convert an integer number to a string in decimal base. - * - * @param n The integer to convert. - * @param s The buffer to store the converted integer. - * @return The length of the string, including the nul terminated - * character. - * - * This function converts @p n to a nul terminated string. The - * converted string is in decimal base. As no check is done, @p s must - * be a buffer that is sufficiently large to store the integer. - * - * The returned value is the length of the string, including the nul - * terminated character. - */ -EAPI int eina_convert_itoa(int n, char *s) -{ - int i = 0; - int r = 0; - - EINA_SAFETY_ON_NULL_RETURN_VAL(s, 0); - - if (n < 0) { - n = -n; - *s++ = '-'; - r = 1; - } - - do { - s[i++] = n % 10 + '0'; - } while ((n /= 10) > 0); - - s[i] = '\0'; - - reverse(s, i); - - return i + r; -} - -/** - * @brief Convert an integer number to a string in hexadecimal base. - * - * @param n The integer to convert. - * @param s The buffer to store the converted integer. - * @return The length of the string, including the nul terminated - * character. - * - * This function converts @p n to a nul terminated string. The - * converted string is in hexadecimal base and the alphabetical - * cyphers are in lower case. As no check is done, @p s must be a - * buffer that is sufficiently large to store the integer. - * - * The returned value is the length of the string, including the nul - * terminated character. - */ -EAPI int eina_convert_xtoa(unsigned int n, char *s) -{ - int i; - - EINA_SAFETY_ON_NULL_RETURN_VAL(s, 0); - - i = 0; - do { - s[i++] = look_up_table[n & 0xF]; - } while ((n >>= 4) > 0); - - s[i] = '\0'; - - reverse(s, i); - - return i; -} - -/** - * @brief Convert a string to a double. - * - * @param src The string to convert. - * @param length The length of the string. - * @param m The mantisse. - * @param e The exponent. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function converts the string @p s of length @p length that - * represent a double in hexadecimal base to a double. It is used to - * replace the use of snprintf() with the \%a modifier, which is - * missing on some platform (like Windows (tm) or OpenBSD). - * - * The string must have the following format: - * - * @code - * [-]0xh.hhhhhp[+-]e - * @endcode - * - * where the h are the hexadecimal cyphers of the mantiss and e the - * exponent (a decimal number). If n is the number of cypers after the - * point, the returned mantiss and exponents are: - * - * @code - * mantiss : [-]hhhhhh - * exponent : 2^([+-]e - 4 * n) - * @endcode - * - * The mantiss and exponent are stored in the buffers pointed - * respectively by @p m and @p e. - * - * If the string is invalid, the error is set to: - * - * @li #EINA_ERROR_CONVERT_0X_NOT_FOUND if no 0x is found, - * @li #EINA_ERROR_CONVERT_P_NOT_FOUND if no p is found, - * @li #EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH if @p length is not - * correct. - * - * In those cases, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - */ -EAPI Eina_Bool -eina_convert_atod(const char *src, int length, long long *m, long *e) -{ - const char *str = src; - long long mantisse; - long exponent; - int nbr_decimals = 0; - int sign = 1; - - EINA_SAFETY_ON_NULL_RETURN_VAL(src, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(e, EINA_FALSE); - - if (length <= 0) - goto on_length_error; - - /* Compute the mantisse. */ - if (*str == '-') { - sign = -1; - str++; - length--; - } - - if (length <= 2) - goto on_length_error; - - if (strncmp(str, "0x", 2)) { - eina_error_set(EINA_ERROR_CONVERT_0X_NOT_FOUND); - DBG("'0x' not found in '%s'", src); - return EINA_FALSE; - } - - str += 2; - length -= 2; - - mantisse = HEXA_TO_INT(*str); - - str++; - length--; - if (length <= 0) - goto on_length_error; - - if (*str == '.') - for (str++, length--; - length > 0 && *str != 'p'; - ++str, --length, ++nbr_decimals) { - mantisse <<= 4; - mantisse += HEXA_TO_INT(*str); - } - - if (sign < 0) - mantisse = -mantisse; - - /* Compute the exponent. */ - if (*str != 'p') { - eina_error_set(EINA_ERROR_CONVERT_P_NOT_FOUND); - DBG("'p' not found in '%s'", src); - return EINA_FALSE; - } - - sign = +1; - - str++; - length--; - if (length <= 0) - goto on_length_error; - - if (strchr("-+", *str)) { - sign = (*str == '-') ? -1 : +1; - - str++; - length--; - } - - for (exponent = 0; length > 0 && *str != '\0'; ++str, --length) { - exponent *= 10; - exponent += *str - '0'; - } - - if (length < 0) - goto on_length_error; - - if (sign < 0) - exponent = -exponent; - - *m = mantisse; - *e = exponent - (nbr_decimals << 2); - - return EINA_TRUE; - - on_length_error: - eina_error_set(EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH); - return EINA_FALSE; -} - -/** - * @brief Convert a double to a string. - * - * @param d The double to convert. - * @param des The destination buffer to store the converted double. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function converts the double @p d to a string. The string is - * stored in the buffer pointed by @p des and must be sufficiently - * large to contain the converted double. The returned string is nul - * terminated and has the following format: - * - * @code - * [-]0xh.hhhhhp[+-]e - * @endcode - * - * where the h are the hexadecimal cyphers of the mantiss and e the - * exponent (a decimal number). - * - * The returned value is the length of the string, including the nul - * character. - */ -EAPI int eina_convert_dtoa(double d, char *des) -{ - int length = 0; - int p; - int i; - - EINA_SAFETY_ON_NULL_RETURN_VAL(des, EINA_FALSE); - - if (d < 0.0) { - *(des++) = '-'; - d = -d; - length++; - } - - d = frexp(d, &p); - - if (p) { - d *= 2; - p -= 1; - } - - *(des++) = '0'; - *(des++) = 'x'; - *(des++) = look_up_table[(size_t) d]; - *(des++) = '.'; - length += 4; - - for (i = 0; i < 16; i++, length++) { - d -= floor(d); - d *= 16; - *(des++) = look_up_table[(size_t) d]; - } - - while (*(des - 1) == '0') { - des--; - length--; - } - - if (*(des - 1) == '.') { - des--; - length--; - } - - *(des++) = 'p'; - if (p < 0) { - *(des++) = '-'; - p = -p; - } else - *(des++) = '+'; - - length += 2; - - return length + eina_convert_itoa(p, des); -} - -/** - * @brief Convert a 32.32 fixed point number to a string. - * - * @param fp The fixed point number to convert. - * @param des The destination buffer to store the converted fixed point number. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function converts the 32.32 fixed point number @p fp to a - * string. The string is stored in the buffer pointed by @p des and - * must be sufficiently large to contain the converted fixed point - * number. The returned string is terminated and has the following - * format: - * - * @code - * [-]0xh.hhhhhp[+-]e - * @endcode - * - * where the h are the hexadecimal cyphers of the mantiss and e the - * exponent (a decimal number). - * - * The returned value is the length of the string, including the nul - * character. - * - * @note The code is the same than eina_convert_dtoa() except that it - * implements the frexp() function for fixed point numbers and does - * some optimisations. - */ -EAPI int eina_convert_fptoa(Eina_F32p32 fp, char *des) -{ - int length = 0; - int p = 0; - int i; - - EINA_SAFETY_ON_NULL_RETURN_VAL(des, EINA_FALSE); - - if (fp == 0) { - memcpy(des, "0x0p+0", 7); - return 7; - } - - if (fp < 0) { - *(des++) = '-'; - fp = -fp; - length++; - } - - /* fp >= 1 */ - if (fp >= 0x0000000100000000LL) - while (fp >= 0x0000000100000000LL) { - p++; - /* fp /= 2 */ - fp >>= 1; - } /* fp < 0.5 */ - else if (fp < 0x80000000) - while (fp < 0x80000000) { - p--; - /* fp *= 2 */ - fp <<= 1; - } - - if (p) { - p--; - /* fp *= 2 */ - fp <<= 1; - } - - *(des++) = '0'; - *(des++) = 'x'; - *(des++) = look_up_table[fp >> 32]; - *(des++) = '.'; - length += 4; - - for (i = 0; i < 16; i++, length++) { - fp &= 0x00000000ffffffffLL; - fp <<= 4; /* fp *= 16 */ - *(des++) = look_up_table[fp >> 32]; - } - - while (*(des - 1) == '0') { - des--; - length--; - } - - if (*(des - 1) == '.') { - des--; - length--; - } - - *(des++) = 'p'; - if (p < 0) { - *(des++) = '-'; - p = -p; - } else - *(des++) = '+'; - - length += 2; - - return length + eina_convert_itoa(p, des); -} - -/** - * @brief Convert a string to a 32.32 fixed point number. - * - * @param src The string to convert. - * @param length The length of the string. - * @param fp The fixed point number. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function converts the string @p src of length @p length that - * represent a double in hexadecimal base to a 32.32 fixed point - * number stored in @p fp. The function always tries to convert the - * string with eina_convert_atod(). - * - * The string must have the following format: - * - * @code - * [-]0xh.hhhhhp[+-]e - * @endcode - * - * where the h are the hexadecimal cyphers of the mantiss and e the - * exponent (a decimal number). If n is the number of cypers after the - * point, the returned mantiss and exponents are: - * - * @code - * mantiss : [-]hhhhhh - * exponent : 2^([+-]e - 4 * n) - * @endcode - * - * The mantiss and exponent are stored in the buffers pointed - * respectively by @p m and @p e. - * - * If the string is invalid, the error is set to: - * - * @li #EINA_ERROR_CONVERT_0X_NOT_FOUND if no 0x is found, - * @li #EINA_ERROR_CONVERT_P_NOT_FOUND if no p is found, - * @li #EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH if @p length is not - * correct. - * - * In those cases, or if @p fp is @c NULL, #EINA_FALSE is returned, - * otherwise @p fp is computed and #EINA_TRUE is returned. - * - * @note The code uses eina_convert_atod() and do the correct bit - * shift to compute the fixed point number. - */ -EAPI Eina_Bool -eina_convert_atofp(const char *src, int length, Eina_F32p32 * fp) -{ - long long m; - long e; - - if (!eina_convert_atod(src, length, &m, &e)) - return EINA_FALSE; - - if (!fp) - return EINA_TRUE; - - e += 32; - - if (e > 0) - *fp = m << e; - else - *fp = m >> -e; - - return EINA_TRUE; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_counter.c b/tests/suite/ecore/src/lib/eina_counter.c deleted file mode 100644 index b22c8ac067..0000000000 --- a/tests/suite/ecore/src/lib/eina_counter.c +++ /dev/null @@ -1,491 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail, Vincent Torri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#ifndef _WIN32 -#include -#else -#define WIN32_LEAN_AND_MEAN -#include -#undef WIN32_LEAN_AND_MEAN -#endif /* _WIN2 */ - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_inlist.h" -#include "eina_error.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_counter.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -#ifndef _WIN32 -typedef struct timespec Eina_Nano_Time; -#else -typedef LARGE_INTEGER Eina_Nano_Time; -#endif - -typedef struct _Eina_Clock Eina_Clock; - -struct _Eina_Counter { - EINA_INLIST; - - Eina_Inlist *clocks; - const char *name; -}; - -struct _Eina_Clock { - EINA_INLIST; - - Eina_Nano_Time start; - Eina_Nano_Time end; - int specimen; - - Eina_Bool valid; -}; - -#ifndef _WIN32 -static inline int _eina_counter_time_get(Eina_Nano_Time * tp) -{ -#if defined(CLOCK_PROCESS_CPUTIME_ID) - return clock_gettime(CLOCK_PROCESS_CPUTIME_ID, tp); -#elif defined(CLOCK_PROF) - return clock_gettime(CLOCK_PROF, tp); -#elif defined(CLOCK_REALTIME) - return clock_gettime(CLOCK_REALTIME, tp); -#else - return gettimeofday(tp, NULL); -#endif -} -#else -static const char EINA_ERROR_COUNTER_WINDOWS_STR[] = - "Change your OS, you moron !"; -static int EINA_ERROR_COUNTER_WINDOWS = 0; -static LARGE_INTEGER _eina_counter_frequency; - -static inline int _eina_counter_time_get(Eina_Nano_Time * tp) -{ - return QueryPerformanceCounter(tp); -} -#endif /* _WIN2 */ - -static char *_eina_counter_asiprintf(char *base, int *position, - const char *format, ...) -{ - char *tmp, *result; - int size = 32; - int n; - va_list ap; - - tmp = realloc(base, sizeof(char) * (*position + size)); - if (!tmp) - return base; - - result = tmp; - - while (1) { - va_start(ap, format); - n = vsnprintf(result + *position, size, format, ap); - va_end(ap); - - if (n > -1 && n < size) { - /* If we always have glibc > 2.2, we could just return *position += n. */ - *position += strlen(result + *position); - return result; - } - - if (n > -1) - size = n + 1; - else - size <<= 1; - - tmp = realloc(result, sizeof(char) * (*position + size)); - if (!tmp) - return result; - - result = tmp; - } -} - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the eina counter internal structure. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the counter module set up by - * eina_counter_init(). It is called by eina_init(). - * - * This function sets up the error module of Eina and only on Windows, - * it initializes the high precision timer. It also registers, only on - * Windows, the error #EINA_ERROR_COUNTER_WINDOWS. It is also called - * by eina_init(). It returns 0 on failure, otherwise it returns the - * number of times it has already been called. - * - * @see eina_init() - */ -Eina_Bool eina_counter_init(void) -{ -#ifdef _WIN32 - EINA_ERROR_COUNTER_WINDOWS = - eina_error_msg_static_register(EINA_ERROR_COUNTER_WINDOWS_STR); - if (!QueryPerformanceFrequency(&_eina_counter_frequency)) { - eina_error_set(EINA_ERROR_COUNTER_WINDOWS); - return EINA_FALSE; - } -#endif /* _WIN2 */ - return EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the counter module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the counter module set up by - * eina_counter_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_counter_shutdown(void) -{ - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Counter_Group Counter - * - * @brief These functions allow you to get the time spent in a part of a code. - * - * Before using the counter system, Eina must be initialized with - * eina_init() and later shut down with eina_shutdown(). The create a - * counter, use eina_counter_new(). To free it, use - * eina_counter_free(). - * - * To time a part of a code, call eina_counter_start() just before it, - * and eina_counter_stop() just after it. Each time you start to time - * a code, a clock is added to a list. You can give a number of that - * clock with the second argument of eina_counter_stop(). To send all - * the registered clocks to a stream (like stdout, ofr a file), use - * eina_counter_dump(). - * - * Here is a straightforward example: - * - * @code - * #include - * #include - * - * #include - * - * void test_malloc(void) - * { - * int i; - * - * for (i = 0; i < 100000; ++i) - * { - * void *buf; - * - * buf = malloc(100); - * free(buf); - * } - * } - * - * int main(void) - * { - * Eina_Counter *counter; - * - * if (!eina_init()) - * { - * printf("Error during the initialization of eina\n"); - * return EXIT_FAILURE; - * } - * - * counter = eina_counter_new("malloc"); - * - * eina_counter_start(counter); - * test_malloc(); - * eina_counter_stop(counter, 1); - * - * char* result = eina_counter_dump(counter); - * printf("%s", result); - * free(result); - * - * eina_counter_free(counter); - * eina_shutdown(); - * - * return EXIT_SUCCESS; - * } - * @endcode - * - * Compile this code with the following commant: - * - * @verbatim - * gcc -Wall -o test_eina_counter test_eina.c `pkg-config --cflags --libs eina` - * @endverbatim - * - * The result should be something like that: - * - * @verbatim - * \# specimen experiment time starting time ending time - * 1 9794125 783816 10577941 - * @endverbatim - * - * Note that the displayed time is in nanosecond. - * - * @{ - */ - -/** - * @brief Return a counter. - * - * @param name The name of the counter. - * - * This function returns a new counter. It is characterized by @p - * name. If @p name is @c NULL, the function returns @c NULL - * immediately. If memory allocation fails, @c NULL is returned and the - * error is set to #EINA_ERROR_OUT_OF_MEMORY. - * - * Whe the new counter is not needed anymore, use eina_counter_free() to - * free the allocated memory. - */ -EAPI Eina_Counter *eina_counter_new(const char *name) -{ - Eina_Counter *counter; - size_t length; - - EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL); - - length = strlen(name) + 1; - - eina_error_set(0); - counter = calloc(1, sizeof(Eina_Counter) + length); - if (!counter) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - counter->name = (char *) (counter + 1); - memcpy((char *) counter->name, name, length); - - return counter; -} - -/** - * @brief Delete a counter. - * - * @param counter The counter to delete. - * - * This function remove the clock of @p counter from the used clocks - * (see eina_counter_start()) and frees the memory allocated for - * @p counter. If @p counter is @c NULL, the function returns - * immediately. - */ -EAPI void eina_counter_free(Eina_Counter * counter) -{ - EINA_SAFETY_ON_NULL_RETURN(counter); - - while (counter->clocks) { - Eina_Clock *clk = (Eina_Clock *) counter->clocks; - - counter->clocks = - eina_inlist_remove(counter->clocks, counter->clocks); - free(clk); - } - - free(counter); -} - -/** - * @brief Start the time count. - * - * @param counter The counter. - * - * This function specifies that the part of the code beginning just - * after its call is being to be timed, using @p counter. If - * @p counter is @c NULL, this function returns immediately. - * - * This function adds the clock associated to @p counter in a list. If - * the memory needed by that clock can not be allocated, the function - * returns and the error is set to #EINA_ERROR_OUT_OF_MEMORY. - * - * To stop the timing, eina_counter_stop() must be called with the - * same counter. - */ -EAPI void eina_counter_start(Eina_Counter * counter) -{ - Eina_Clock *clk; - Eina_Nano_Time tp; - - EINA_SAFETY_ON_NULL_RETURN(counter); - if (_eina_counter_time_get(&tp) != 0) - return; - - eina_error_set(0); - clk = calloc(1, sizeof(Eina_Clock)); - if (!clk) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return; - } - - counter->clocks = - eina_inlist_prepend(counter->clocks, EINA_INLIST_GET(clk)); - - clk->valid = EINA_FALSE; - clk->start = tp; -} - -/** - * @brief Stop the time count. - * - * @param counter The counter. - * @param specimen The number of the test. - * - * This function stop the timing that has been started with - * eina_counter_start(). @p counter must be the same than the one used - * with eina_counter_start(). @p specimen is the number of the - * test. If @p counter or its associated clock are @c NULL, or if the - * time can't be retrieved the function exits. - */ -EAPI void eina_counter_stop(Eina_Counter * counter, int specimen) -{ - Eina_Clock *clk; - Eina_Nano_Time tp; - - EINA_SAFETY_ON_NULL_RETURN(counter); - if (_eina_counter_time_get(&tp) != 0) - return; - - clk = (Eina_Clock *) counter->clocks; - - if (!clk || clk->valid == EINA_TRUE) - return; - - clk->end = tp; - clk->specimen = specimen; - clk->valid = EINA_TRUE; -} - -/** - * @brief Dump the result of all clocks of a counter to a stream. - * - * @return A string with a summary of the test. - * @param counter The counter. - * - * This function returns an malloc'd string containing the dump of - * all the valid clocks of @p counter. - * If @p counter @c NULL, the functions exits - * immediately. Otherwise, the output is formattted like that: - * - * @verbatim - * \# specimen experiment time starting time ending time - * 1 208 120000 120208 - * @endverbatim - * - * The unit of time is the nanosecond. - */ -EAPI char *eina_counter_dump(Eina_Counter * counter) -{ - Eina_Clock *clk; - char *result = NULL; - int position = 0; - - EINA_SAFETY_ON_NULL_RETURN_VAL(counter, NULL); - - result = _eina_counter_asiprintf(result, - &position, - "# specimen\texperiment time\tstarting time\tending time\n"); - if (!result) - return NULL; - - EINA_INLIST_REVERSE_FOREACH(counter->clocks, clk) { - long int start; - long int end; - long int diff; - - if (clk->valid == EINA_FALSE) - continue; - -#ifndef _WIN32 - start = - clk->start.tv_sec * 1000000000 + clk->start.tv_nsec; - end = clk->end.tv_sec * 1000000000 + clk->end.tv_nsec; - diff = - (clk->end.tv_sec - - clk->start.tv_sec) * 1000000000 + clk->end.tv_nsec - - clk->start.tv_nsec; -#else - start = - (long int) (((long long int) clk->start.QuadPart * - 1000000000ll) / - (long long int) _eina_counter_frequency. - QuadPart); - end = - (long - int) (((long long int) clk->end.QuadPart * - 1000000000LL) / - (long long int) _eina_counter_frequency. - QuadPart); - diff = - (long - int) (((long long int) (clk->end.QuadPart - - clk->start.QuadPart) * - 1000000000LL) / - (long long int) _eina_counter_frequency. - QuadPart); -#endif /* _WIN2 */ - - result = _eina_counter_asiprintf(result, &position, - "%i\t%li\t%li\t%li\n", - clk->specimen, - diff, start, end); - } - - return result; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_cpu.c b/tests/suite/ecore/src/lib/eina_cpu.c deleted file mode 100644 index bb99f7d8e8..0000000000 --- a/tests/suite/ecore/src/lib/eina_cpu.c +++ /dev/null @@ -1,151 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef EFL_HAVE_THREADS -#ifdef _WIN32 -#define WIN32_LEAN_AND_MEAN -#include -#elif defined (__SUNPRO_C) || defined(__GNU__) -#include -#elif defined (__FreeBSD__) || defined (__OpenBSD__) || \ - defined (__NetBSD__) || defined (__DragonFly__) || defined (__MacOSX__) || \ - (defined (__MACH__) && defined (__APPLE__)) -#include -#include -#include -#elif defined (__linux__) || defined(__GLIBC__) -#define _GNU_SOURCE -#include -#endif -#ifdef EFL_HAVE_POSIX_THREADS -#include -#endif - -#define TH_MAX 8 -#endif - -#include -#include -#include - -#include "eina_cpu.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/* FIXME this ifdefs should be replaced */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/*============================================================================* -* API * -*============================================================================*/ - -/* FIXME the features checks should be called when this function is called? - * or make it static by doing eina_cpu_init() and return a local var - */ -/** - * - * @return - */ -EAPI Eina_Cpu_Features eina_cpu_features_get(void) -{ - Eina_Cpu_Features ecf = 0; - return ecf; -} - -EAPI int eina_cpu_count(void) -{ -#ifdef EFL_HAVE_THREADS - -#if defined (_WIN32) - SYSTEM_INFO sysinfo; - - GetSystemInfo(&sysinfo); - return sysinfo.dwNumberOfProcessors; - -#elif defined (__SUNPRO_C) || defined(__GNU__) - /* - * _SC_NPROCESSORS_ONLN: number of processors that are online, that - is available when sysconf is called. The number - of cpu can change by admins. - * _SC_NPROCESSORS_CONF: maximum number of processors that are available - to the current OS instance. That number can be - change after a reboot. - * _SC_NPROCESSORS_MAX : maximum number of processors that are on the - motherboard. - */ - return sysconf(_SC_NPROCESSORS_ONLN); - -#elif defined (__FreeBSD__) || defined (__OpenBSD__) || \ - defined (__NetBSD__) || defined (__DragonFly__) || defined (__MacOSX__) || \ - (defined (__MACH__) && defined (__APPLE__)) - - int mib[4]; - int cpus; - size_t len = sizeof(cpus); - - mib[0] = CTL_HW; -#ifdef HW_AVAILCPU - mib[1] = HW_AVAILCPU; -#else - mib[1] = HW_NCPU; -#endif - sysctl(mib, 2, &cpus, &len, NULL, 0); - if (cpus < 1) - cpus = 1; - - return cpus; - -#elif defined (__linux__) || defined(__GLIBC__) - cpu_set_t cpu; - int i; - static int cpus = 0; - - if (cpus != 0) - return cpus; - - CPU_ZERO(&cpu); - if (sched_getaffinity(0, sizeof(cpu), &cpu) != 0) { - fprintf(stderr, "[Eina] could not get cpu affinity: %s\n", - strerror(errno)); - return 1; - } - - for (i = 0; i < TH_MAX; i++) { - if (CPU_ISSET(i, &cpu)) - cpus = i + 1; - else - break; - } - return cpus; - -#else -#error "eina_cpu_count() error: Platform not supported" -#endif -#else - return 1; -#endif -} diff --git a/tests/suite/ecore/src/lib/eina_error.c b/tests/suite/ecore/src/lib/eina_error.c deleted file mode 100644 index 17ec74d904..0000000000 --- a/tests/suite/ecore/src/lib/eina_error.c +++ /dev/null @@ -1,452 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - - -/** - * @page tutorial_error_page Error Tutorial - * - * @section tutorial_error_introduction Introduction - * - * The Eina error module provides a way to manage errors in a simple - * but powerful way in libraries and modules. It is also used in Eina - * itself. Similar to libC's @c errno and strerror() facilities, this - * is extensible and recommended for other libraries and applications. - * - * @section tutorial_error_registering_msg Registering messages - * - * The error module can provide a system that mimic the errno system - * of the C standard library. It consists in 2 parts: - * - * @li a way of registering new messages with - * eina_error_msg_register() and eina_error_msg_get(), - * @li a way of setting / getting last error message with - * eina_error_set() / eina_error_get(). - * - * So one has to fisrt register all the error messages that a program - * or a lib should manage. Then, when an error can occur, use - * eina_error_set(), and when errors are managed, use - * eina_error_get(). If eina_error_set() is used to set an error, do - * not forget to call before eina_error_set0), to remove previous set - * errors. - * - * Here is an example of use: - * - * @code - * #include - * #include - * - * #include - * - * Eina_Error MY_ERROR_NEGATIVE; - * Eina_Error MY_ERROR_NULL; - * - * voi *data_new() - * { - * eina_error_set(0); - * - * eina_error_set(MY_ERROR_NULL); - * return NULL; - * } - * - * int test(int n) - * { - * eina_error_set(0); - * - * if (n < 0) - * { - * eina_error_set(MY_ERROR_NEGATIVE); - * return 0; - * } - * - * return 1; - * } - * - * int main(void) - * { - * void *data; - * - * if (!eina_init()) - * { - * printf ("Error during the initialization of eina_error module\n"); - * return EXIT_FAILURE; - * } - * - * MY_ERROR_NEGATIVE = eina_error_msg_register("Negative number"); - * MY_ERROR_NULL = eina_error_msg_register("NULL pointer"); - - * data = data_new(); - * if (!data) - * { - * Eina_Error err; - * - * err = eina_error_get(); - * if (err) - * printf("Error during memory allocation: %s\n", - * eina_error_msg_get(err)); - * } - * - * if (!test(0)) - * { - * Eina_Error err; - * - * err = eina_error_get(); - * if (err) - * printf("Error during test function: %s\n", - * eina_error_msg_get(err)); - * } - * - * if (!test(-1)) - * { - * Eina_Error err; - * - * err = eina_error_get(); - * if (err) - * printf("Error during test function: %s\n", - * eina_error_msg_get(err)); - * } - * - * eina_shutdown(); - * - * return EXIT_SUCCESS; - * } - * @endcode - * - * Of course, instead of printf(), eina_log_print() can be used to - * have beautiful error messages. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" - - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_error.h" - -/* TODO - * + add a wrapper for assert? - * + add common error numbers, messages - * + add a calltrace of errors, not only store the last error but a list of them - * and also store the function that set it - */ - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -typedef struct _Eina_Error_Message Eina_Error_Message; -struct _Eina_Error_Message { - Eina_Bool string_allocated; - const char *string; -}; - -static Eina_Error_Message *_eina_errors = NULL; -static size_t _eina_errors_count = 0; -static size_t _eina_errors_allocated = 0; -static Eina_Error _eina_last_error; - -static Eina_Error_Message *_eina_error_msg_alloc(void) -{ - size_t idx; - - if (_eina_errors_count == _eina_errors_allocated) { - void *tmp; - size_t size; - - if (EINA_UNLIKELY(_eina_errors_allocated == 0)) - size = 24; - else - size = _eina_errors_allocated + 8; - - tmp = - realloc(_eina_errors, - sizeof(Eina_Error_Message) * size); - if (!tmp) - return NULL; - - _eina_errors = tmp; - _eina_errors_allocated = size; - } - - idx = _eina_errors_count; - _eina_errors_count++; - return _eina_errors + idx; -} - -/** - * @endcond - */ - - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -EAPI Eina_Error EINA_ERROR_OUT_OF_MEMORY = 0; - -static const char EINA_ERROR_OUT_OF_MEMORY_STR[] = "Out of memory"; - -/** - * @endcond - */ - -/** - * @internal - * @brief Initialize the error module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the error module of Eina. It is called by - * eina_init(). - * - * This function registers the error #EINA_ERROR_OUT_OF_MEMORY. - * - * @see eina_init() - */ -Eina_Bool eina_error_init(void) -{ - /* TODO register the eina's basic errors */ - EINA_ERROR_OUT_OF_MEMORY = - eina_error_msg_static_register(EINA_ERROR_OUT_OF_MEMORY_STR); - return EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the error module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the error module set up by - * eina_error_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_error_shutdown(void) -{ - Eina_Error_Message *eem, *eem_end; - - eem = _eina_errors; - eem_end = eem + _eina_errors_count; - - for (; eem < eem_end; eem++) - if (eem->string_allocated) - free((char *) eem->string); - - free(_eina_errors); - _eina_errors = NULL; - _eina_errors_count = 0; - _eina_errors_allocated = 0; - - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Error_Group Error - * - * @brief These functions provide error management for projects. - * - * To use the error system Eina must be initialized with eina_init() - * and later shut down with eina_shutdown(). Error codes are - * registered with eina_error_msg_register() and converted from - * identifier to original message string with eina_error_msg_get(). - * - * Logging functions are not in eina_error anymore, see - * eina_log_print() instead. - * - * @{ - */ - -/** - * @brief Register a new error type. - * - * @param msg The description of the error. It will be duplicated using - * strdup(). - * @return The unique number identifier for this error. - * - * This function stores in a list the error message described by - * @p msg. The returned value is a unique identifier greater or equal - * than 1. The description can be retrieve later by passing to - * eina_error_msg_get() the returned value. - * - * @see eina_error_msg_static_register() - */ -EAPI Eina_Error eina_error_msg_register(const char *msg) -{ - Eina_Error_Message *eem; - - EINA_SAFETY_ON_NULL_RETURN_VAL(msg, 0); - - eem = _eina_error_msg_alloc(); - if (!eem) - return 0; - - eem->string_allocated = EINA_TRUE; - eem->string = strdup(msg); - if (!eem->string) { - _eina_errors_count--; - return 0; - } - - return _eina_errors_count; /* identifier = index + 1 (== _count). */ -} - -/** - * @brief Register a new error type, statically allocated message. - * - * @param msg The description of the error. This string will not be - * duplicated and thus the given pointer should live during - * usage of eina_error. - * @return The unique number identifier for this error. - * - * This function stores in a list the error message described by - * @p msg. The returned value is a unique identifier greater or equal - * than 1. The description can be retrieve later by passing to - * eina_error_msg_get() the returned value. - * - * @see eina_error_msg_register() - */ -EAPI Eina_Error eina_error_msg_static_register(const char *msg) -{ - Eina_Error_Message *eem; - - EINA_SAFETY_ON_NULL_RETURN_VAL(msg, 0); - - eem = _eina_error_msg_alloc(); - if (!eem) - return 0; - - eem->string_allocated = EINA_FALSE; - eem->string = msg; - return _eina_errors_count; /* identifier = index + 1 (== _count). */ -} - -/** - * @brief Change the message of an already registered message - * - * @param error The Eina_Error to change the message of - * @param msg The description of the error. This string will be - * duplicated only if the error was registered with @ref eina_error_msg_register - * otherwise it must remain intact for the duration - * @return EINA_TRUE if successful, EINA_FALSE on error - * - * This function modifies the message associated with @p error and changes - * it to @p msg. If the error was previously registered by @ref eina_error_msg_static_register - * then the string will not be duplicated, otherwise the previous message - * will be freed and @p msg copied. - * - * @see eina_error_msg_register() - */ -EAPI Eina_Bool eina_error_msg_modify(Eina_Error error, const char *msg) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(msg, EINA_FALSE); - if (error < 1) - return EINA_FALSE; - - if ((size_t) error > _eina_errors_count) - return EINA_FALSE; - - if (_eina_errors[error - 1].string_allocated) { - const char *tmp; - - if (!(tmp = strdup(msg))) - return EINA_FALSE; - - free((void *) _eina_errors[error - 1].string); - _eina_errors[error - 1].string = tmp; - return EINA_TRUE; - } - - _eina_errors[error - 1].string = msg; - return EINA_TRUE; -} - -/** - * @brief Return the description of the given an error number. - * - * @param error The error number. - * @return The description of the error. - * - * This function returns the description of an error that has been - * registered with eina_error_msg_register(). If an incorrect error is - * given, then @c NULL is returned. - */ -EAPI const char *eina_error_msg_get(Eina_Error error) -{ - if (error < 1) - return NULL; - - if ((size_t) error > _eina_errors_count) - return NULL; - - return _eina_errors[error - 1].string; -} - -/** - * @brief Return the last set error. - * - * @return The last error. - * - * This function returns the last error set by eina_error_set(). The - * description of the message is returned by eina_error_msg_get(). - */ -EAPI Eina_Error eina_error_get(void) -{ - return _eina_last_error; -} - -/** - * @brief Set the last error. - * - * @param err The error identifier. - * - * This function sets the last error identifier. The last error can be - * retrieved with eina_error_get(). - */ -EAPI void eina_error_set(Eina_Error err) -{ - _eina_last_error = err; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_file.c b/tests/suite/ecore/src/lib/eina_file.c deleted file mode 100644 index ca1cb35969..0000000000 --- a/tests/suite/ecore/src/lib/eina_file.c +++ /dev/null @@ -1,533 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Vincent Torri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifndef _WIN32 -#define _GNU_SOURCE -#endif - -#ifdef HAVE_ALLOCA_H -#include -#elif defined __GNUC__ -#define alloca __builtin_alloca -#elif defined _AIX -#define alloca __alloca -#elif defined _MSC_VER -#include -#define alloca _alloca -#else -#include -#ifdef __cplusplus -extern "C" -#endif -void *alloca(size_t); -#endif - -#include -#include - -#ifndef _WIN32 -#include -#include -#include -#else -#include -#endif /* _WIN2 */ - -#ifndef _WIN32 -#define PATH_DELIM '/' -#else -#define PATH_DELIM '\\' -#define NAME_MAX MAX_PATH -#endif - -#ifdef __sun -#ifndef NAME_MAX -#define NAME_MAX 255 -#endif -#endif - -#include "eina_config.h" -#include "eina_private.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_file.h" -#include "eina_stringshare.h" - -typedef struct _Eina_File_Iterator Eina_File_Iterator; -struct _Eina_File_Iterator { - Eina_Iterator iterator; - - DIR *dirp; - int length; - - char dir[1]; -}; - -static Eina_Bool -_eina_file_ls_iterator_next(Eina_File_Iterator * it, void **data) -{ - struct dirent *dp; - char *name; - size_t length; - - do { - dp = readdir(it->dirp); - if (!dp) - return EINA_FALSE; - } - while ((dp->d_name[0] == '.') && - ((dp->d_name[1] == '\0') || - ((dp->d_name[1] == '.') && (dp->d_name[2] == '\0')))); - - length = strlen(dp->d_name); - name = alloca(length + 2 + it->length); - - memcpy(name, it->dir, it->length); - memcpy(name + it->length, "/", 1); - memcpy(name + it->length + 1, dp->d_name, length + 1); - - *data = (char *) eina_stringshare_add(name); - return EINA_TRUE; -} - -static char *_eina_file_ls_iterator_container(Eina_File_Iterator * it) -{ - return it->dir; -} - -static void _eina_file_ls_iterator_free(Eina_File_Iterator * it) -{ - closedir(it->dirp); - - EINA_MAGIC_SET(&it->iterator, 0); - free(it); -} - -typedef struct _Eina_File_Direct_Iterator Eina_File_Direct_Iterator; -struct _Eina_File_Direct_Iterator { - Eina_Iterator iterator; - - DIR *dirp; - int length; - - Eina_File_Direct_Info info; - - char dir[1]; -}; - -static Eina_Bool -_eina_file_direct_ls_iterator_next(Eina_File_Direct_Iterator * it, - void **data) -{ - struct dirent *dp; - size_t length; - - do { - dp = readdir(it->dirp); - if (!dp) - return EINA_FALSE; - - length = strlen(dp->d_name); - if (it->info.name_start + length + 1 >= PATH_MAX) - continue; - } - while ((dp->d_name[0] == '.') && - ((dp->d_name[1] == '\0') || - ((dp->d_name[1] == '.') && (dp->d_name[2] == '\0')))); - - memcpy(it->info.path + it->info.name_start, dp->d_name, length); - it->info.name_length = length; - it->info.path_length = it->info.name_start + length; - it->info.path[it->info.path_length] = '\0'; - it->info.dirent = dp; - - *data = &it->info; - return EINA_TRUE; -} - -static char - *_eina_file_direct_ls_iterator_container(Eina_File_Direct_Iterator * - it) -{ - return it->dir; -} - -static void -_eina_file_direct_ls_iterator_free(Eina_File_Direct_Iterator * it) -{ - closedir(it->dirp); - - EINA_MAGIC_SET(&it->iterator, 0); - free(it); -} - -/*============================================================================* -* Global * -*============================================================================*/ - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_File_Group File - * - * @brief Functions to traverse directories and split paths. - * - * @li eina_file_dir_list() list the content of a directory, - * recusrsively or not, and can call a callback function for eachfound - * file. - * @li eina_file_split() split a path into all the subdirectories that - * compose it, according to the separator of the file system. - * - * @{ - */ - -/** - * @brief List all files on the directory calling the function for every file found. - * - * @param dir The directory name. - * @param recursive Iterate recursively in the directory. - * @param cb The callback to be called. - * @param data The data to pass to the callback. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function lists all the files in @p dir. To list also all the - * sub directoris recursively, @p recursive must be set to #EINA_TRUE, - * otherwise it must be set to #EINA_FALSE. For each found file, @p cb - * is called and @p data is passed to it. - * - * If @p cb or @p dir are @c NULL, or if @p dir is a string of size 0, - * or if @p dir can not be opened, this function returns #EINA_FALSE - * immediately. otherwise, it returns #EINA_TRUE. - */ -EAPI Eina_Bool -eina_file_dir_list(const char *dir, - Eina_Bool recursive, - Eina_File_Dir_List_Cb cb, void *data) -{ -#ifndef _WIN32 - struct dirent *de; - DIR *d; - - EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE); - EINA_SAFETY_ON_TRUE_RETURN_VAL(dir[0] == '\0', EINA_FALSE); - - d = opendir(dir); - if (!d) - return EINA_FALSE; - - while ((de = readdir(d))) { - if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) - continue; - - cb(de->d_name, dir, data); - /* d_type is only available on linux and bsd (_BSD_SOURCE) */ - - if (recursive == EINA_TRUE) { - char *path; - - path = - alloca(strlen(dir) + strlen(de->d_name) + 2); - strcpy(path, dir); - strcat(path, "/"); - strcat(path, de->d_name); -#ifndef sun - if (de->d_type == DT_UNKNOWN) { -#endif - struct stat st; - - if (stat(path, &st)) - continue; - - if (!S_ISDIR(st.st_mode)) - continue; - -#ifndef sun - } else if (de->d_type != DT_DIR) - continue; - -#endif - - eina_file_dir_list(path, recursive, cb, data); - } - } - - closedir(d); -#else - WIN32_FIND_DATA file; - HANDLE hSearch; - char *new_dir; - TCHAR *tdir; - size_t length_dir; - - EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE); - EINA_SAFETY_ON_TRUE_RETURN_VAL(dir[0] == '\0', EINA_FALSE); - - length_dir = strlen(dir); - new_dir = (char *) alloca(length_dir + 5); - if (!new_dir) - return EINA_FALSE; - - memcpy(new_dir, dir, length_dir); - memcpy(new_dir + length_dir, "/*.*", 5); - -#ifdef UNICODE - tdir = evil_char_to_wchar(new_dir); -#else - tdir = new_dir; -#endif /* ! UNICODE */ - hSearch = FindFirstFile(tdir, &file); -#ifdef UNICODE - free(tdir); -#endif /* UNICODE */ - - if (hSearch == INVALID_HANDLE_VALUE) - return EINA_FALSE; - - do { - char *filename; - -#ifdef UNICODE - filename = evil_wchar_to_char(file.cFileName); -#else - filename = file.cFileName; -#endif /* ! UNICODE */ - if (!strcmp(filename, ".") || !strcmp(filename, "..")) - continue; - - cb(filename, dir, data); - - if (recursive == EINA_TRUE) { - char *path; - - path = alloca(strlen(dir) + strlen(filename) + 2); - strcpy(path, dir); - strcat(path, "/"); - strcat(path, filename); - - if (! - (file. - dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - continue; - - eina_file_dir_list(path, recursive, cb, data); - } -#ifdef UNICODE - free(filename); -#endif /* UNICODE */ - - } while (FindNextFile(hSearch, &file)); - FindClose(hSearch); -#endif /* _WIN32 */ - - return EINA_TRUE; -} - -/** - * @brief Split a path according to the delimiter of the filesystem. - * - * @param path The path to split. - * @return An array of the parts of the path to split. - * - * This function splits @p path according to the delimiter of the used - * filesystem. If @p path is @c NULL or if the array can not be - * created, @c NULL is returned, otherwise, an array with the - * different parts of @p path is returned. - */ -EAPI Eina_Array *eina_file_split(char *path) -{ - Eina_Array *ea; - char *current; - size_t length; - - EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL); - - ea = eina_array_new(16); - - if (!ea) - return NULL; - - for (current = strchr(path, PATH_DELIM); - current; - path = current + 1, current = strchr(path, PATH_DELIM)) { - length = current - path; - - if (length <= 0) - continue; - - eina_array_push(ea, path); - *current = '\0'; - } - - if (*path != '\0') - eina_array_push(ea, path); - - return ea; -} - -/** - * Get an iterator to list the content of a directory. - * - * Iterators are cheap to be created and allow interruption at any - * iteration. At each iteration, only the next directory entry is read - * from the filesystem with readdir(). - * - * The iterator will handle the user a stringshared value with the - * full path. One must call eina_stringshare_del() on it after usage - * to not leak! - * - * The eina_file_direct_ls() function will provide a possibly faster - * alternative if you need to filter the results somehow, like - * checking extension. - * - * The iterator will walk over '.' and '..' without returning them. - * - * @param dir The name of the directory to list - * @return Return an Eina_Iterator that will walk over the files and - * directory in the pointed directory. On failure it will - * return NULL. The iterator emits stringshared value with the - * full path and must be freed with eina_stringshare_del(). - * - * @see eina_file_direct_ls() - */ -EAPI Eina_Iterator *eina_file_ls(const char *dir) -{ - Eina_File_Iterator *it; - size_t length; - - if (!dir) - return NULL; - - length = strlen(dir); - if (length < 1) - return NULL; - - it = calloc(1, sizeof(Eina_File_Iterator) + length); - if (!it) - return NULL; - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - it->dirp = opendir(dir); - if (!it->dirp) { - free(it); - return NULL; - } - - memcpy(it->dir, dir, length + 1); - if (dir[length - 1] != '/') - it->length = length; - else - it->length = length - 1; - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = - FUNC_ITERATOR_NEXT(_eina_file_ls_iterator_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER(_eina_file_ls_iterator_container); - it->iterator.free = - FUNC_ITERATOR_FREE(_eina_file_ls_iterator_free); - - return &it->iterator; -} - -/** - * Get an iterator to list the content of a directory, with direct information. - * - * Iterators are cheap to be created and allow interruption at any - * iteration. At each iteration, only the next directory entry is read - * from the filesystem with readdir(). - * - * The iterator returns the direct pointer to couple of useful information in - * #Eina_File_Direct_Info and that pointer should not be modified anyhow! - * - * The iterator will walk over '.' and '..' without returning them. - * - * @param dir The name of the directory to list - - * @return Return an Eina_Iterator that will walk over the files and - * directory in the pointed directory. On failure it will - * return NULL. The iterator emits #Eina_File_Direct_Info - * pointers that could be used but not modified. The lifetime - * of the returned pointer is until the next iteration and - * while the iterator is live, deleting the iterator - * invalidates the pointer. - * - * @see eina_file_ls() - */ -EAPI Eina_Iterator *eina_file_direct_ls(const char *dir) -{ - Eina_File_Direct_Iterator *it; - size_t length; - - if (!dir) - return NULL; - - length = strlen(dir); - if (length < 1) - return NULL; - - if (length + NAME_MAX + 2 >= PATH_MAX) - return NULL; - - it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length); - if (!it) - return NULL; - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - it->dirp = opendir(dir); - if (!it->dirp) { - free(it); - return NULL; - } - - memcpy(it->dir, dir, length + 1); - it->length = length; - - memcpy(it->info.path, dir, length); - if (dir[length - 1] == '/') - it->info.name_start = length; - else { - it->info.path[length] = '/'; - it->info.name_start = length + 1; - } - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = - FUNC_ITERATOR_NEXT(_eina_file_direct_ls_iterator_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER - (_eina_file_direct_ls_iterator_container); - it->iterator.free = - FUNC_ITERATOR_FREE(_eina_file_direct_ls_iterator_free); - - return &it->iterator; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_fp.c b/tests/suite/ecore/src/lib/eina_fp.c deleted file mode 100644 index 890c58ca88..0000000000 --- a/tests/suite/ecore/src/lib/eina_fp.c +++ /dev/null @@ -1,538 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#include "eina_types.h" -#include "eina_fp.h" - -#define MAX_PREC 1025 -static const Eina_F32p32 eina_trigo[MAX_PREC] = { - 0x0000000100000000, 0x00000000ffffec43, 0x00000000ffffb10b, - 0x00000000ffff4e5a, 0x00000000fffec42e, 0x00000000fffe1287, - 0x00000000fffd3967, 0x00000000fffc38cd, 0x00000000fffb10b9, - 0x00000000fff9c12c, - 0x00000000fff84a25, 0x00000000fff6aba5, 0x00000000fff4e5ac, - 0x00000000fff2f83b, 0x00000000fff0e351, 0x00000000ffeea6ef, - 0x00000000ffec4316, 0x00000000ffe9b7c5, 0x00000000ffe704fe, - 0x00000000ffe42ac0, - 0x00000000ffe1290b, 0x00000000ffddffe2, 0x00000000ffdaaf43, - 0x00000000ffd7372f, 0x00000000ffd397a8, 0x00000000ffcfd0ad, - 0x00000000ffcbe23f, 0x00000000ffc7cc5f, 0x00000000ffc38f0d, - 0x00000000ffbf2a4b, - 0x00000000ffba9e17, 0x00000000ffb5ea75, 0x00000000ffb10f63, - 0x00000000ffac0ce3, 0x00000000ffa6e2f6, 0x00000000ffa1919c, - 0x00000000ff9c18d6, 0x00000000ff9678a6, 0x00000000ff90b10b, - 0x00000000ff8ac208, - 0x00000000ff84ab9c, 0x00000000ff7e6dc8, 0x00000000ff78088f, - 0x00000000ff717bf0, 0x00000000ff6ac7ec, 0x00000000ff63ec85, - 0x00000000ff5ce9bc, 0x00000000ff55bf92, 0x00000000ff4e6e08, - 0x00000000ff46f51f, - 0x00000000ff3f54d8, 0x00000000ff378d34, 0x00000000ff2f9e35, - 0x00000000ff2787dc, 0x00000000ff1f4a2a, 0x00000000ff16e520, - 0x00000000ff0e58c0, 0x00000000ff05a50a, 0x00000000fefcca01, - 0x00000000fef3c7a6, - 0x00000000feea9df9, 0x00000000fee14cfe, 0x00000000fed7d4b3, - 0x00000000fece351d, 0x00000000fec46e3b, 0x00000000feba800f, - 0x00000000feb06a9c, 0x00000000fea62de1, 0x00000000fe9bc9e2, - 0x00000000fe913e9f, - 0x00000000fe868c1b, 0x00000000fe7bb256, 0x00000000fe70b153, - 0x00000000fe658913, 0x00000000fe5a3998, 0x00000000fe4ec2e4, - 0x00000000fe4324f9, 0x00000000fe375fd7, 0x00000000fe2b7382, - 0x00000000fe1f5ffa, - 0x00000000fe132543, 0x00000000fe06c35d, 0x00000000fdfa3a4b, - 0x00000000fded8a0e, 0x00000000fde0b2a8, 0x00000000fdd3b41c, - 0x00000000fdc68e6c, 0x00000000fdb94199, 0x00000000fdabcda5, - 0x00000000fd9e3294, - 0x00000000fd907065, 0x00000000fd82871d, 0x00000000fd7476bd, - 0x00000000fd663f46, 0x00000000fd57e0bd, 0x00000000fd495b21, - 0x00000000fd3aae77, 0x00000000fd2bdabf, 0x00000000fd1cdffd, - 0x00000000fd0dbe32, - 0x00000000fcfe7562, 0x00000000fcef058e, 0x00000000fcdf6eb8, - 0x00000000fccfb0e4, 0x00000000fcbfcc13, 0x00000000fcafc048, - 0x00000000fc9f8d86, 0x00000000fc8f33ce, 0x00000000fc7eb325, - 0x00000000fc6e0b8b, - 0x00000000fc5d3d03, 0x00000000fc4c4791, 0x00000000fc3b2b37, - 0x00000000fc29e7f7, 0x00000000fc187dd5, 0x00000000fc06ecd2, - 0x00000000fbf534f2, 0x00000000fbe35637, 0x00000000fbd150a3, - 0x00000000fbbf243b, - 0x00000000fbacd100, 0x00000000fb9a56f6, 0x00000000fb87b61f, - 0x00000000fb74ee7e, 0x00000000fb620016, 0x00000000fb4eeaea, - 0x00000000fb3baefd, 0x00000000fb284c52, 0x00000000fb14c2eb, - 0x00000000fb0112cd, - 0x00000000faed3bf9, 0x00000000fad93e73, 0x00000000fac51a3f, - 0x00000000fab0cf5e, 0x00000000fa9c5dd5, 0x00000000fa87c5a6, - 0x00000000fa7306d5, 0x00000000fa5e2164, 0x00000000fa491558, - 0x00000000fa33e2b3, - 0x00000000fa1e8978, 0x00000000fa0909ab, 0x00000000f9f36350, - 0x00000000f9dd9668, 0x00000000f9c7a2f9, 0x00000000f9b18905, - 0x00000000f99b488f, 0x00000000f984e19c, 0x00000000f96e542e, - 0x00000000f957a049, - 0x00000000f940c5f1, 0x00000000f929c528, 0x00000000f9129df3, - 0x00000000f8fb5056, 0x00000000f8e3dc53, 0x00000000f8cc41ee, - 0x00000000f8b4812b, 0x00000000f89c9a0e, 0x00000000f8848c9b, - 0x00000000f86c58d4, - 0x00000000f853febe, 0x00000000f83b7e5d, 0x00000000f822d7b4, - 0x00000000f80a0ac7, 0x00000000f7f1179a, 0x00000000f7d7fe31, - 0x00000000f7bebe90, 0x00000000f7a558ba, 0x00000000f78bccb3, - 0x00000000f7721a80, - 0x00000000f7584225, 0x00000000f73e43a5, 0x00000000f7241f04, - 0x00000000f709d446, 0x00000000f6ef6370, 0x00000000f6d4cc85, - 0x00000000f6ba0f8a, 0x00000000f69f2c83, 0x00000000f6842374, - 0x00000000f668f461, - 0x00000000f64d9f4e, 0x00000000f632243f, 0x00000000f616833a, - 0x00000000f5fabc41, 0x00000000f5decf59, 0x00000000f5c2bc87, - 0x00000000f5a683cf, 0x00000000f58a2535, 0x00000000f56da0be, - 0x00000000f550f66e, - 0x00000000f5342649, 0x00000000f5173054, 0x00000000f4fa1494, - 0x00000000f4dcd30c, 0x00000000f4bf6bc2, 0x00000000f4a1deb9, - 0x00000000f4842bf7, 0x00000000f4665380, 0x00000000f4485559, - 0x00000000f42a3186, - 0x00000000f40be80c, 0x00000000f3ed78ef, 0x00000000f3cee434, - 0x00000000f3b029e1, 0x00000000f39149f9, 0x00000000f3724482, - 0x00000000f3531980, 0x00000000f333c8f8, 0x00000000f31452ef, - 0x00000000f2f4b76a, - 0x00000000f2d4f66d, 0x00000000f2b50ffe, 0x00000000f2950421, - 0x00000000f274d2dc, 0x00000000f2547c33, 0x00000000f234002b, - 0x00000000f2135eca, 0x00000000f1f29814, 0x00000000f1d1ac0e, - 0x00000000f1b09abe, - 0x00000000f18f6429, 0x00000000f16e0853, 0x00000000f14c8742, - 0x00000000f12ae0fb, 0x00000000f1091583, 0x00000000f0e724e0, - 0x00000000f0c50f17, 0x00000000f0a2d42c, 0x00000000f0807426, - 0x00000000f05def09, - 0x00000000f03b44db, 0x00000000f01875a1, 0x00000000eff58161, - 0x00000000efd2681f, 0x00000000efaf29e2, 0x00000000ef8bc6af, - 0x00000000ef683e8b, 0x00000000ef44917b, 0x00000000ef20bf86, - 0x00000000eefcc8b1, - 0x00000000eed8ad01, 0x00000000eeb46c7b, 0x00000000ee900727, - 0x00000000ee6b7d08, 0x00000000ee46ce25, 0x00000000ee21fa83, - 0x00000000edfd0228, 0x00000000edd7e51a, 0x00000000edb2a35f, - 0x00000000ed8d3cfc, - 0x00000000ed67b1f6, 0x00000000ed420255, 0x00000000ed1c2e1d, - 0x00000000ecf63554, 0x00000000ecd01801, 0x00000000eca9d628, - 0x00000000ec836fd1, 0x00000000ec5ce501, 0x00000000ec3635bd, - 0x00000000ec0f620d, - 0x00000000ebe869f5, 0x00000000ebc14d7d, 0x00000000eb9a0ca9, - 0x00000000eb72a780, 0x00000000eb4b1e08, 0x00000000eb237047, - 0x00000000eafb9e43, 0x00000000ead3a803, 0x00000000eaab8d8d, - 0x00000000ea834ee6, - 0x00000000ea5aec15, 0x00000000ea326520, 0x00000000ea09ba0d, - 0x00000000e9e0eae4, 0x00000000e9b7f7a9, 0x00000000e98ee063, - 0x00000000e965a51a, 0x00000000e93c45d2, 0x00000000e912c292, - 0x00000000e8e91b61, - 0x00000000e8bf5046, 0x00000000e8956146, 0x00000000e86b4e68, - 0x00000000e84117b3, 0x00000000e816bd2d, 0x00000000e7ec3edc, - 0x00000000e7c19cc8, 0x00000000e796d6f6, 0x00000000e76bed6e, - 0x00000000e740e036, - 0x00000000e715af54, 0x00000000e6ea5ad0, 0x00000000e6bee2af, - 0x00000000e69346f9, 0x00000000e66787b5, 0x00000000e63ba4e9, - 0x00000000e60f9e9b, 0x00000000e5e374d4, 0x00000000e5b72798, - 0x00000000e58ab6f1, - 0x00000000e55e22e3, 0x00000000e5316b76, 0x00000000e50490b1, - 0x00000000e4d7929c, 0x00000000e4aa713c, 0x00000000e47d2c98, - 0x00000000e44fc4b9, 0x00000000e42239a4, 0x00000000e3f48b61, - 0x00000000e3c6b9f7, - 0x00000000e398c56c, 0x00000000e36aadc9, 0x00000000e33c7314, - 0x00000000e30e1554, 0x00000000e2df9490, 0x00000000e2b0f0d0, - 0x00000000e2822a1a, 0x00000000e2534077, 0x00000000e22433ec, - 0x00000000e1f50482, - 0x00000000e1c5b240, 0x00000000e1963d2d, 0x00000000e166a550, - 0x00000000e136eab0, 0x00000000e1070d56, 0x00000000e0d70d48, - 0x00000000e0a6ea8e, 0x00000000e076a52f, 0x00000000e0463d33, - 0x00000000e015b2a1, - 0x00000000dfe50580, 0x00000000dfb435d9, 0x00000000df8343b2, - 0x00000000df522f13, 0x00000000df20f804, 0x00000000deef9e8d, - 0x00000000debe22b5, 0x00000000de8c8483, 0x00000000de5ac3ff, - 0x00000000de28e131, - 0x00000000ddf6dc21, 0x00000000ddc4b4d6, 0x00000000dd926b59, - 0x00000000dd5fffb0, 0x00000000dd2d71e3, 0x00000000dcfac1fb, - 0x00000000dcc7f000, 0x00000000dc94fbf8, 0x00000000dc61e5ec, - 0x00000000dc2eade4, - 0x00000000dbfb53e8, 0x00000000dbc7d7ff, 0x00000000db943a31, - 0x00000000db607a88, 0x00000000db2c9909, 0x00000000daf895bf, - 0x00000000dac470af, 0x00000000da9029e3, 0x00000000da5bc163, - 0x00000000da273737, - 0x00000000d9f28b66, 0x00000000d9bdbdf9, 0x00000000d988cef8, - 0x00000000d953be6b, 0x00000000d91e8c5b, 0x00000000d8e938d0, - 0x00000000d8b3c3d1, 0x00000000d87e2d67, 0x00000000d848759b, - 0x00000000d8129c74, - 0x00000000d7dca1fb, 0x00000000d7a68638, 0x00000000d7704934, - 0x00000000d739eaf7, 0x00000000d7036b89, 0x00000000d6cccaf3, - 0x00000000d696093d, 0x00000000d65f266f, 0x00000000d6282293, - 0x00000000d5f0fdb0, - 0x00000000d5b9b7d0, 0x00000000d58250fa, 0x00000000d54ac937, - 0x00000000d513208f, 0x00000000d4db570c, 0x00000000d4a36cb6, - 0x00000000d46b6195, 0x00000000d43335b3, 0x00000000d3fae917, - 0x00000000d3c27bcb, - 0x00000000d389edd7, 0x00000000d3513f43, 0x00000000d318701a, - 0x00000000d2df8063, 0x00000000d2a67027, 0x00000000d26d3f6f, - 0x00000000d233ee43, 0x00000000d1fa7cae, 0x00000000d1c0eab7, - 0x00000000d1873867, - 0x00000000d14d65c8, 0x00000000d11372e1, 0x00000000d0d95fbd, - 0x00000000d09f2c64, 0x00000000d064d8df, 0x00000000d02a6537, - 0x00000000cfefd176, 0x00000000cfb51da3, 0x00000000cf7a49c8, - 0x00000000cf3f55ef, - 0x00000000cf044220, 0x00000000cec90e64, 0x00000000ce8dbac5, - 0x00000000ce52474c, 0x00000000ce16b401, 0x00000000cddb00ef, - 0x00000000cd9f2e1e, 0x00000000cd633b97, 0x00000000cd272964, - 0x00000000cceaf78e, - 0x00000000ccaea61e, 0x00000000cc72351e, 0x00000000cc35a497, - 0x00000000cbf8f492, 0x00000000cbbc2519, 0x00000000cb7f3634, - 0x00000000cb4227ee, 0x00000000cb04fa50, 0x00000000cac7ad63, - 0x00000000ca8a4131, - 0x00000000ca4cb5c3, 0x00000000ca0f0b22, 0x00000000c9d14159, - 0x00000000c9935870, 0x00000000c9555072, 0x00000000c9172967, - 0x00000000c8d8e35a, 0x00000000c89a7e53, 0x00000000c85bfa5e, - 0x00000000c81d5782, - 0x00000000c7de95cb, 0x00000000c79fb541, 0x00000000c760b5ee, - 0x00000000c72197dc, 0x00000000c6e25b15, 0x00000000c6a2ffa3, - 0x00000000c663858f, 0x00000000c623ece2, 0x00000000c5e435a8, - 0x00000000c5a45fe9, - 0x00000000c5646bb0, 0x00000000c5245906, 0x00000000c4e427f6, - 0x00000000c4a3d888, 0x00000000c4636ac8, 0x00000000c422debf, - 0x00000000c3e23476, 0x00000000c3a16bf9, 0x00000000c3608550, - 0x00000000c31f8087, - 0x00000000c2de5da6, 0x00000000c29d1cb8, 0x00000000c25bbdc8, - 0x00000000c21a40de, 0x00000000c1d8a606, 0x00000000c196ed49, - 0x00000000c15516b2, 0x00000000c113224a, 0x00000000c0d1101d, - 0x00000000c08ee033, - 0x00000000c04c9297, 0x00000000c00a2754, 0x00000000bfc79e73, - 0x00000000bf84f800, 0x00000000bf423404, 0x00000000beff5289, - 0x00000000bebc539a, 0x00000000be793741, 0x00000000be35fd89, - 0x00000000bdf2a67b, - 0x00000000bdaf3223, 0x00000000bd6ba08b, 0x00000000bd27f1bc, - 0x00000000bce425c2, 0x00000000bca03ca7, 0x00000000bc5c3676, - 0x00000000bc181338, 0x00000000bbd3d2f9, 0x00000000bb8f75c3, - 0x00000000bb4afba1, - 0x00000000bb06649c, 0x00000000bac1b0c0, 0x00000000ba7ce018, - 0x00000000ba37f2ad, 0x00000000b9f2e88b, 0x00000000b9adc1bc, - 0x00000000b9687e4a, 0x00000000b9231e41, 0x00000000b8dda1ac, - 0x00000000b8980894, - 0x00000000b8525305, 0x00000000b80c8109, 0x00000000b7c692ac, - 0x00000000b78087f7, 0x00000000b73a60f6, 0x00000000b6f41db4, - 0x00000000b6adbe3a, 0x00000000b6674296, 0x00000000b620aad0, - 0x00000000b5d9f6f4, - 0x00000000b593270e, 0x00000000b54c3b27, 0x00000000b505334a, - 0x00000000b4be0f84, 0x00000000b476cfde, 0x00000000b42f7464, - 0x00000000b3e7fd20, 0x00000000b3a06a1e, 0x00000000b358bb69, - 0x00000000b310f10c, - 0x00000000b2c90b11, 0x00000000b2810985, 0x00000000b238ec71, - 0x00000000b1f0b3e2, 0x00000000b1a85fe2, 0x00000000b15ff07c, - 0x00000000b11765bc, 0x00000000b0cebfad, 0x00000000b085fe5a, - 0x00000000b03d21ce, - 0x00000000aff42a15, 0x00000000afab1739, 0x00000000af61e946, - 0x00000000af18a048, 0x00000000aecf3c49, 0x00000000ae85bd55, - 0x00000000ae3c2377, 0x00000000adf26ebb, 0x00000000ada89f2c, - 0x00000000ad5eb4d5, - 0x00000000ad14afc2, 0x00000000acca8ffd, 0x00000000ac805594, - 0x00000000ac360090, 0x00000000abeb90fe, 0x00000000aba106e9, - 0x00000000ab56625d, 0x00000000ab0ba364, 0x00000000aac0ca0b, - 0x00000000aa75d65d, - 0x00000000aa2ac865, 0x00000000a9dfa030, 0x00000000a9945dc9, - 0x00000000a949013a, 0x00000000a8fd8a91, 0x00000000a8b1f9d8, - 0x00000000a8664f1c, 0x00000000a81a8a68, 0x00000000a7ceabc7, - 0x00000000a782b345, - 0x00000000a736a0ef, 0x00000000a6ea74cf, 0x00000000a69e2ef2, - 0x00000000a651cf63, 0x00000000a605562f, 0x00000000a5b8c360, - 0x00000000a56c1702, 0x00000000a51f5123, 0x00000000a4d271cc, - 0x00000000a485790b, - 0x00000000a43866eb, 0x00000000a3eb3b77, 0x00000000a39df6bd, - 0x00000000a35098c7, 0x00000000a30321a2, 0x00000000a2b5915a, - 0x00000000a267e7fa, 0x00000000a21a258e, 0x00000000a1cc4a24, - 0x00000000a17e55c5, - 0x00000000a1304880, 0x00000000a0e2225f, 0x00000000a093e36f, - 0x00000000a0458bbb, 0x000000009ff71b50, 0x000000009fa8923a, - 0x000000009f59f086, 0x000000009f0b363e, 0x000000009ebc6370, - 0x000000009e6d7827, - 0x000000009e1e746f, 0x000000009dcf5856, 0x000000009d8023e6, - 0x000000009d30d72d, 0x000000009ce17236, 0x000000009c91f50e, - 0x000000009c425fc1, 0x000000009bf2b25b, 0x000000009ba2ece8, - 0x000000009b530f76, - 0x000000009b031a0f, 0x000000009ab30cc1, 0x000000009a62e797, - 0x000000009a12aa9f, 0x0000000099c255e5, 0x000000009971e974, - 0x000000009921655a, 0x0000000098d0c9a2, 0x0000000098801659, - 0x00000000982f4b8d, - 0x0000000097de6948, 0x00000000978d6f97, 0x00000000973c5e88, - 0x0000000096eb3626, 0x000000009699f67f, 0x0000000096489f9e, - 0x0000000095f73190, 0x0000000095a5ac61, 0x000000009554101f, - 0x0000000095025cd6, - 0x0000000094b09292, 0x00000000945eb161, 0x00000000940cb94e, - 0x0000000093baaa66, 0x00000000936884b6, 0x000000009316484b, - 0x0000000092c3f531, 0x0000000092718b75, 0x00000000921f0b24, - 0x0000000091cc744b, - 0x000000009179c6f5, 0x0000000091270331, 0x0000000090d4290a, - 0x000000009081388e, 0x00000000902e31c8, 0x000000008fdb14c7, - 0x000000008f87e197, 0x000000008f349845, 0x000000008ee138dd, - 0x000000008e8dc36c, - 0x000000008e3a3800, 0x000000008de696a5, 0x000000008d92df68, - 0x000000008d3f1256, 0x000000008ceb2f7c, 0x000000008c9736e7, - 0x000000008c4328a3, 0x000000008bef04bf, 0x000000008b9acb46, - 0x000000008b467c45, - 0x000000008af217cb, 0x000000008a9d9de3, 0x000000008a490e9b, - 0x0000000089f469ff, 0x00000000899fb01e, 0x00000000894ae103, - 0x0000000088f5fcbc, 0x0000000088a10357, 0x00000000884bf4df, - 0x0000000087f6d163, - 0x0000000087a198f0, 0x00000000874c4b92, 0x0000000086f6e956, - 0x0000000086a1724b, 0x00000000864be67c, 0x0000000085f645f8, - 0x0000000085a090cc, 0x00000000854ac704, 0x0000000084f4e8ad, - 0x00000000849ef5d7, - 0x000000008448ee8c, 0x0000000083f2d2db, 0x00000000839ca2d1, - 0x0000000083465e7c, 0x0000000082f005e8, 0x0000000082999922, - 0x0000000082431839, 0x0000000081ec833a, 0x000000008195da31, - 0x00000000813f1d2d, - 0x0000000080e84c3a, 0x0000000080916766, 0x00000000803a6ebf, - 0x000000007fe36251, 0x000000007f8c422b, 0x000000007f350e59, - 0x000000007eddc6ea, 0x000000007e866bea, 0x000000007e2efd67, - 0x000000007dd77b6f, - 0x000000007d7fe60f, 0x000000007d283d54, 0x000000007cd0814c, - 0x000000007c78b205, 0x000000007c20cf8c, 0x000000007bc8d9ef, - 0x000000007b70d13b, 0x000000007b18b57e, 0x000000007ac086c5, - 0x000000007a68451f, - 0x000000007a0ff098, 0x0000000079b7893e, 0x00000000795f0f1f, - 0x0000000079068248, 0x0000000078ade2c8, 0x00000000785530ab, - 0x0000000077fc6c01, 0x0000000077a394d5, 0x00000000774aab36, - 0x0000000076f1af32, - 0x000000007698a0d6, 0x00000000763f8030, 0x0000000075e64d4e, - 0x00000000758d083e, 0x000000007533b10d, 0x0000000074da47c9, - 0x000000007480cc80, 0x0000000074273f3f, 0x0000000073cda016, - 0x000000007373ef10, - 0x00000000731a2c3d, 0x0000000072c057aa, 0x0000000072667164, - 0x00000000720c797a, 0x0000000071b26ffa, 0x00000000715854f2, - 0x0000000070fe286e, 0x0000000070a3ea7e, 0x0000000070499b30, - 0x000000006fef3a90, - 0x000000006f94c8ae, 0x000000006f3a4596, 0x000000006edfb157, - 0x000000006e850c00, 0x000000006e2a559d, 0x000000006dcf8e3d, - 0x000000006d74b5ee, 0x000000006d19ccbe, 0x000000006cbed2bb, - 0x000000006c63c7f3, - 0x000000006c08ac74, 0x000000006bad804c, 0x000000006b524389, - 0x000000006af6f639, 0x000000006a9b986b, 0x000000006a402a2c, - 0x0000000069e4ab8a, 0x0000000069891c94, 0x00000000692d7d57, - 0x0000000068d1cde3, - 0x0000000068760e44, 0x00000000681a3e89, 0x0000000067be5ec1, - 0x0000000067626ef9, 0x0000000067066f40, 0x0000000066aa5fa3, - 0x00000000664e4032, 0x0000000065f210f9, 0x000000006595d209, - 0x000000006539836d, - 0x0000000064dd2536, 0x000000006480b770, 0x0000000064243a2b, - 0x0000000063c7ad75, 0x00000000636b115c, 0x00000000630e65ed, - 0x0000000062b1ab39, 0x000000006254e14c, 0x0000000061f80835, - 0x00000000619b2002, - 0x00000000613e28c2, 0x0000000060e12283, 0x0000000060840d54, - 0x000000006026e943, 0x000000005fc9b65d, 0x000000005f6c74b2, - 0x000000005f0f2450, 0x000000005eb1c545, 0x000000005e5457a0, - 0x000000005df6db6f, - 0x000000005d9950c0, 0x000000005d3bb7a3, 0x000000005cde1024, - 0x000000005c805a54, 0x000000005c22963f, 0x000000005bc4c3f6, - 0x000000005b66e385, 0x000000005b08f4fd, 0x000000005aaaf86a, - 0x000000005a4ceddc, - 0x0000000059eed561, 0x000000005990af08, 0x0000000059327adf, - 0x0000000058d438f4, 0x000000005875e957, 0x0000000058178c16, - 0x0000000057b9213f, 0x00000000575aa8e0, 0x0000000056fc230a, - 0x00000000569d8fc9, - 0x00000000563eef2d, 0x0000000055e04144, 0x000000005581861d, - 0x000000005522bdc6, 0x0000000054c3e84e, 0x00000000546505c4, - 0x0000000054061636, 0x0000000053a719b3, 0x000000005348104a, - 0x0000000052e8fa09, - 0x000000005289d6ff, 0x00000000522aa73a, 0x0000000051cb6aca, - 0x00000000516c21bc, 0x00000000510ccc20, 0x0000000050ad6a05, - 0x00000000504dfb78, 0x000000004fee808a, 0x000000004f8ef947, - 0x000000004f2f65c0, - 0x000000004ecfc603, 0x000000004e701a1f, 0x000000004e106222, - 0x000000004db09e1b, 0x000000004d50ce19, 0x000000004cf0f22b, - 0x000000004c910a5f, 0x000000004c3116c5, 0x000000004bd1176b, - 0x000000004b710c5f, - 0x000000004b10f5b2, 0x000000004ab0d371, 0x000000004a50a5ab, - 0x0000000049f06c70, 0x00000000499027cd, 0x00000000492fd7d3, - 0x0000000048cf7c8f, 0x00000000486f1611, 0x00000000480ea467, - 0x0000000047ae27a1, - 0x00000000474d9fcd, 0x0000000046ed0cfa, 0x00000000468c6f37, - 0x00000000462bc693, 0x0000000045cb131c, 0x00000000456a54e3, - 0x0000000045098bf5, 0x0000000044a8b861, 0x000000004447da37, - 0x0000000043e6f186, - 0x000000004385fe5c, 0x00000000432500c8, 0x0000000042c3f8d9, - 0x000000004262e69f, 0x000000004201ca28, 0x0000000041a0a383, - 0x00000000413f72bf, 0x0000000040de37eb, 0x00000000407cf317, - 0x00000000401ba450, - 0x000000003fba4ba7, 0x000000003f58e92a, 0x000000003ef77ce8, - 0x000000003e9606f1, 0x000000003e348752, 0x000000003dd2fe1c, - 0x000000003d716b5e, 0x000000003d0fcf25, 0x000000003cae2982, - 0x000000003c4c7a83, - 0x000000003beac238, 0x000000003b8900b0, 0x000000003b2735f9, - 0x000000003ac56223, 0x000000003a63853d, 0x000000003a019f56, - 0x00000000399fb07d, 0x00000000393db8c1, 0x0000000038dbb831, - 0x000000003879aedd, - 0x0000000038179cd3, 0x0000000037b58222, 0x0000000037535edb, - 0x0000000036f1330b, 0x00000000368efec2, 0x00000000362cc20f, - 0x0000000035ca7d02, 0x0000000035682fa9, 0x000000003505da14, - 0x0000000034a37c51, - 0x0000000034411671, 0x0000000033dea881, 0x00000000337c3292, - 0x000000003319b4b3, 0x0000000032b72ef2, 0x000000003254a15e, - 0x0000000031f20c08, 0x00000000318f6efe, 0x00000000312cca50, - 0x0000000030ca1e0c, - 0x0000000030676a43, 0x000000003004af02, 0x000000002fa1ec5a, - 0x000000002f3f2259, 0x000000002edc510f, 0x000000002e79788b, - 0x000000002e1698dc, 0x000000002db3b212, 0x000000002d50c43c, - 0x000000002cedcf68, - 0x000000002c8ad3a7, 0x000000002c27d108, 0x000000002bc4c799, - 0x000000002b61b76b, 0x000000002afea08c, 0x000000002a9b830b, - 0x000000002a385ef9, 0x0000000029d53464, 0x000000002972035b, - 0x00000000290ecbee, - 0x0000000028ab8e2c, 0x0000000028484a25, 0x0000000027e4ffe7, - 0x000000002781af83, 0x00000000271e5906, 0x0000000026bafc82, - 0x0000000026579a04, 0x0000000025f4319d, 0x000000002590c35c, - 0x00000000252d4f4f, - 0x0000000024c9d587, 0x0000000024665613, 0x000000002402d101, - 0x00000000239f4662, 0x00000000233bb644, 0x0000000022d820b8, - 0x00000000227485cc, 0x000000002210e590, 0x0000000021ad4013, - 0x0000000021499565, - 0x0000000020e5e594, 0x00000000208230b1, 0x00000000201e76ca, - 0x000000001fbab7ef, 0x000000001f56f430, 0x000000001ef32b9b, - 0x000000001e8f5e41, 0x000000001e2b8c30, 0x000000001dc7b578, - 0x000000001d63da29, - 0x000000001cfffa51, 0x000000001c9c1600, 0x000000001c382d46, - 0x000000001bd44032, 0x000000001b704ed3, 0x000000001b0c5939, - 0x000000001aa85f74, 0x000000001a446191, 0x0000000019e05fa2, - 0x00000000197c59b5, - 0x0000000019184fdb, 0x0000000018b44221, 0x0000000018503098, - 0x0000000017ec1b50, 0x0000000017880257, 0x000000001723e5bd, - 0x0000000016bfc591, 0x00000000165ba1e4, 0x0000000015f77ac3, - 0x0000000015935040, - 0x00000000152f2269, 0x0000000014caf14d, 0x000000001466bcfd, - 0x0000000014028587, 0x00000000139e4afb, 0x00000000133a0d69, - 0x0000000012d5cce0, 0x000000001271896f, 0x00000000120d4326, - 0x0000000011a8fa15, - 0x000000001144ae4a, 0x0000000010e05fd6, 0x00000000107c0ec7, - 0x000000001017bb2d, 0x000000000fb36519, 0x000000000f4f0c98, - 0x000000000eeab1bb, 0x000000000e865491, 0x000000000e21f52a, - 0x000000000dbd9395, - 0x000000000d592fe1, 0x000000000cf4ca1f, 0x000000000c90625c, - 0x000000000c2bf8aa, 0x000000000bc78d18, 0x000000000b631fb4, - 0x000000000afeb08f, 0x000000000a9a3fb8, 0x000000000a35cd3e, - 0x0000000009d15931, - 0x00000000096ce3a1, 0x0000000009086c9c, 0x0000000008a3f433, - 0x00000000083f7a75, 0x0000000007daff71, 0x0000000007768337, - 0x00000000071205d6, 0x0000000006ad875f, 0x00000000064907df, - 0x0000000005e48768, - 0x0000000005800608, 0x00000000051b83cf, 0x0000000004b700cc, - 0x0000000004527d0f, 0x0000000003edf8a7, 0x00000000038973a4, - 0x000000000324ee16, 0x0000000002c0680b, 0x00000000025be194, - 0x0000000001f75ac0, - 0x000000000192d39e, 0x00000000012e4c3e, 0x0000000000c9c4af, - 0x0000000000653d02, 0x0000000000000000 -}; - -EAPI Eina_F32p32 eina_f32p32_cos(Eina_F32p32 a) -{ - Eina_F32p32 F32P32_2PI; - Eina_F32p32 F32P32_PI2; - Eina_F32p32 F32P32_3PI2; - Eina_F32p32 remainder_2PI; - Eina_F32p32 remainder_PI; - Eina_F32p32 interpol; - Eina_F32p32 result; - int idx; - int index2; - - F32P32_2PI = EINA_F32P32_PI << 1; - F32P32_PI2 = EINA_F32P32_PI >> 1; - F32P32_3PI2 = EINA_F32P32_PI + F32P32_PI2; - - /* Take advantage of cosinus symetrie. */ - a = eina_fp32p32_llabs(a); - - /* Find table entry in 0 to PI / 2 */ - remainder_PI = a - (a / EINA_F32P32_PI) * EINA_F32P32_PI; - - /* Find which case from 0 to 2 * PI */ - remainder_2PI = a - (a / F32P32_2PI) * F32P32_2PI; - - interpol = - eina_f32p32_div(eina_f32p32_scale(remainder_PI, MAX_PREC * 2), - EINA_F32P32_PI); - idx = eina_f32p32_int_to(interpol); - if (idx >= MAX_PREC) - idx = 2 * MAX_PREC - (idx - 1); - - index2 = idx + 1; - if (index2 == MAX_PREC) - index2 = idx - 1; - - result = eina_f32p32_add(eina_trigo[idx], - eina_f32p32_mul(eina_f32p32_sub - (eina_trigo[idx], - eina_trigo[index2]), - (Eina_F32p32) - eina_f32p32_fracc_get - (interpol))); - - if (0 <= remainder_2PI && remainder_2PI < F32P32_PI2) - return result; - else if (F32P32_PI2 <= remainder_2PI - && remainder_2PI < EINA_F32P32_PI) - return -result; - else if (EINA_F32P32_PI <= remainder_2PI - && remainder_2PI < F32P32_3PI2) - return -result; - else /* if (F32P32_3PI2 <= remainder_2PI) */ - return result; -} - -EAPI Eina_F32p32 eina_f32p32_sin(Eina_F32p32 a) -{ - Eina_F32p32 F32P32_2PI; - Eina_F32p32 F32P32_PI2; - Eina_F32p32 F32P32_3PI2; - Eina_F32p32 remainder_2PI; - Eina_F32p32 remainder_PI; - Eina_F32p32 interpol; - Eina_F32p32 result; - int idx; - int index2; - - F32P32_2PI = EINA_F32P32_PI << 1; - F32P32_PI2 = EINA_F32P32_PI >> 1; - F32P32_3PI2 = EINA_F32P32_PI + F32P32_PI2; - - /* We only have a table for cosinus, but sin(a) = cos(pi / 2 - a) */ - a = eina_f32p32_sub(F32P32_PI2, a); - - /* Take advantage of cosinus symetrie. */ - a = eina_fp32p32_llabs(a); - - /* Find table entry in 0 to PI / 2 */ - remainder_PI = a - (a / EINA_F32P32_PI) * EINA_F32P32_PI; - - /* Find which case from 0 to 2 * PI */ - remainder_2PI = a - (a / F32P32_2PI) * F32P32_2PI; - - interpol = - eina_f32p32_div(eina_f32p32_scale(remainder_PI, MAX_PREC * 2), - EINA_F32P32_PI); - idx = eina_f32p32_int_to(interpol); - if (idx >= MAX_PREC) - idx = 2 * MAX_PREC - (idx + 1); - - index2 = idx + 1; - if (index2 == MAX_PREC) - index2 = idx - 1; - - result = eina_f32p32_add(eina_trigo[idx], - eina_f32p32_mul(eina_f32p32_sub - (eina_trigo[idx], - eina_trigo[index2]), - (Eina_F32p32) - eina_f32p32_fracc_get - (interpol))); - - if (0 <= remainder_2PI && remainder_2PI < F32P32_PI2) - return result; - else if (F32P32_PI2 <= remainder_2PI - && remainder_2PI < EINA_F32P32_PI) - return -result; - else if (EINA_F32P32_PI <= remainder_2PI - && remainder_2PI < F32P32_3PI2) - return -result; - else /* if (F32P32_3PI2 <= remainder_2PI) */ - return result; -} diff --git a/tests/suite/ecore/src/lib/eina_hamster.c b/tests/suite/ecore/src/lib/eina_hamster.c deleted file mode 100644 index 4390430e8e..0000000000 --- a/tests/suite/ecore/src/lib/eina_hamster.c +++ /dev/null @@ -1,125 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#include "eina_config.h" -#include "eina_types.h" -#include "eina_hamster.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -const char *_eina_hamster_time = __TIME__; -const char *_eina_hamster_date = __DATE__; -static int _eina_hamsters = -1; - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Hamster_Group Hamster - * - * @brief These functions provide hamster calls. - * - * @{ - */ - -/** - * @brief Get the hamster count. - * - * @return The number of available hamsters. - * - * This function returns how many hamsters you have. - */ -EAPI int eina_hamster_count(void) -{ - if (_eina_hamsters < 0) { - int hrs = 0, min = 0, sec = 0; - char mon[8] = ""; - int monnum = 0, day = 0, year = 0; - int fields; - - fields = - sscanf(_eina_hamster_time, "%02i:%02i:%02i", &hrs, - &min, &sec); - if (fields == 3) { - _eina_hamsters = (hrs * 60) + min; - fields = - sscanf(_eina_hamster_date, "%s %i %i", mon, - &day, &year); - if (fields == 3) { - int i; - const char *mons[] = { - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - }; - - for (i = 0; i < 12; i++) { - if (!strcmp(mon, mons[i])) { - monnum = i + 1; - break; - } - } - // alloc 60 for mins, 24 for hrs - // alloc 1-31 (32) for days, 1-12 (13) for months - // use year as-is, for 31 bits (signed) this gives us up to - // 3584 years, which is good enough imho. - 1500 years from - // now or so. :) - _eina_hamsters += - (day + (monnum * 32) + - (13 * 32 * year)) * (24 * 60); - } - } - } - // format: [rest - year][0-12 - month][0-31 - day][0-23 - hrs][0-59 - sec] - return _eina_hamsters; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_hash.c b/tests/suite/ecore/src/lib/eina_hash.c deleted file mode 100644 index 5af5ee9a28..0000000000 --- a/tests/suite/ecore/src/lib/eina_hash.c +++ /dev/null @@ -1,1897 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Gustavo Sverzut Barbieri, - * Vincent Torri, Jorge Luis Zapata Muga, Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#ifdef _MSC_VER -#include -#else -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_rbtree.h" -#include "eina_error.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_hash.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -#define EINA_MAGIC_CHECK_HASH(d) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_HASH)) { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_HASH); } \ - } while(0) - -#define EINA_MAGIC_CHECK_HASH_ITERATOR(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_HASH_ITERATOR)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_HASH_ITERATOR); \ - return __VA_ARGS__; \ - } \ - } while(0) - -#define EINA_HASH_BUCKET_SIZE 8 -#define EINA_HASH_SMALL_BUCKET_SIZE 5 - -#define EINA_HASH_RBTREE_MASK 0xFFF - -typedef struct _Eina_Hash_Head Eina_Hash_Head; -typedef struct _Eina_Hash_Element Eina_Hash_Element; -typedef struct _Eina_Hash_Foreach_Data Eina_Hash_Foreach_Data; -typedef struct _Eina_Iterator_Hash Eina_Iterator_Hash; -typedef struct _Eina_Hash_Each Eina_Hash_Each; - -struct _Eina_Hash { - Eina_Key_Length key_length_cb; - Eina_Key_Cmp key_cmp_cb; - Eina_Key_Hash key_hash_cb; - Eina_Free_Cb data_free_cb; - - Eina_Rbtree **buckets; - int size; - int mask; - - int population; - - EINA_MAGIC}; - -struct _Eina_Hash_Head { - EINA_RBTREE; - int hash; - - Eina_Rbtree *head; -}; - -struct _Eina_Hash_Element { - EINA_RBTREE; - Eina_Hash_Tuple tuple; - Eina_Bool begin:1; -}; - -struct _Eina_Hash_Foreach_Data { - Eina_Hash_Foreach cb; - const void *fdata; -}; - -typedef void *(*Eina_Iterator_Get_Content_Callback) (Eina_Iterator_Hash * - it); -#define FUNC_ITERATOR_GET_CONTENT(Function) ((Eina_Iterator_Get_Content_Callback)Function) - -struct _Eina_Iterator_Hash { - Eina_Iterator iterator; - - Eina_Iterator_Get_Content_Callback get_content; - const Eina_Hash *hash; - - Eina_Iterator *current; - Eina_Iterator *list; - Eina_Hash_Head *hash_head; - Eina_Hash_Element *hash_element; - int bucket; - - int index; - - EINA_MAGIC}; - -struct _Eina_Hash_Each { - Eina_Hash_Head *hash_head; - const Eina_Hash_Element *hash_element; - const void *data; -}; - -#define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \ - + (uint32_t)(((const uint8_t *)(d))[0])) - -static inline int -_eina_hash_hash_rbtree_cmp_hash(const Eina_Hash_Head * hash_head, - const int *hash, - __UNUSED__ int key_length, - __UNUSED__ void *data) -{ - return hash_head->hash - *hash; -} - -static Eina_Rbtree_Direction -_eina_hash_hash_rbtree_cmp_node(const Eina_Hash_Head * left, - const Eina_Hash_Head * right, - __UNUSED__ void *data) -{ - if (left->hash - right->hash < 0) - return EINA_RBTREE_LEFT; - - return EINA_RBTREE_RIGHT; -} - -static inline int -_eina_hash_key_rbtree_cmp_key_data(const Eina_Hash_Element * hash_element, - const Eina_Hash_Tuple * tuple, - __UNUSED__ unsigned int key_length, - Eina_Key_Cmp cmp) -{ - int result; - - result = cmp(hash_element->tuple.key, - hash_element->tuple.key_length, - tuple->key, tuple->key_length); - - if (result == 0 && tuple->data - && tuple->data != hash_element->tuple.data) - return 1; - - return result; -} - -static Eina_Rbtree_Direction -_eina_hash_key_rbtree_cmp_node(const Eina_Hash_Element * left, - const Eina_Hash_Element * right, - Eina_Key_Cmp cmp) -{ - int result; - - result = cmp(left->tuple.key, left->tuple.key_length, - right->tuple.key, right->tuple.key_length); - - if (result < 0) - return EINA_RBTREE_LEFT; - - return EINA_RBTREE_RIGHT; -} - -static inline Eina_Bool -eina_hash_add_alloc_by_hash(Eina_Hash * hash, - const void *key, int key_length, - int alloc_length, int key_hash, - const void *data) -{ - Eina_Hash_Element *new_hash_element = NULL; - Eina_Hash_Head *hash_head; - Eina_Error error = 0; - int hash_num; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - EINA_MAGIC_CHECK_HASH(hash); - - error = EINA_ERROR_OUT_OF_MEMORY; - - /* Apply eina mask to hash. */ - hash_num = key_hash & hash->mask; - key_hash &= EINA_HASH_RBTREE_MASK; - - if (!hash->buckets) { - hash->buckets = calloc(sizeof(Eina_Rbtree *), hash->size); - if (!hash->buckets) - goto on_error; - - hash_head = NULL; - } else - /* Look up for head node. */ - hash_head = - (Eina_Hash_Head *) eina_rbtree_inline_lookup(hash-> - buckets - [hash_num], - &key_hash, - 0, - EINA_RBTREE_CMP_KEY_CB - (_eina_hash_hash_rbtree_cmp_hash), - NULL); - - if (!hash_head) { - /* If not found allocate it and an element. */ - hash_head = - malloc(sizeof(Eina_Hash_Head) + - sizeof(Eina_Hash_Element) + alloc_length); - if (!hash_head) - goto on_error; - - hash_head->hash = key_hash; - hash_head->head = NULL; - - hash->buckets[hash_num] = - eina_rbtree_inline_insert(hash->buckets[hash_num], - EINA_RBTREE_GET(hash_head), - EINA_RBTREE_CMP_NODE_CB - (_eina_hash_hash_rbtree_cmp_node), - NULL); - - new_hash_element = (Eina_Hash_Element *) (hash_head + 1); - new_hash_element->begin = EINA_TRUE; - } - - if (!new_hash_element) { - /* - Alloc a new element - (No more lookup as we expect to support more than one item for one key). - */ - new_hash_element = - malloc(sizeof(Eina_Hash_Element) + alloc_length); - if (!new_hash_element) - goto on_error; - - new_hash_element->begin = EINA_FALSE; - } - - /* Setup the element */ - new_hash_element->tuple.key_length = key_length; - new_hash_element->tuple.data = (void *) data; - if (alloc_length > 0) { - new_hash_element->tuple.key = - (char *) (new_hash_element + 1); - memcpy((char *) new_hash_element->tuple.key, key, - alloc_length); - } else - new_hash_element->tuple.key = key; - - /* add the new element to the hash. */ - hash_head->head = - eina_rbtree_inline_insert(hash_head->head, - EINA_RBTREE_GET(new_hash_element), - EINA_RBTREE_CMP_NODE_CB - (_eina_hash_key_rbtree_cmp_node), - (const void *) hash->key_cmp_cb); - hash->population++; - return EINA_TRUE; - - on_error: - eina_error_set(error); - return EINA_FALSE; -} - -static Eina_Bool -_eina_hash_rbtree_each(__UNUSED__ const Eina_Rbtree * container, - const Eina_Hash_Head * hash_head, - Eina_Hash_Each * data) -{ - Eina_Iterator *it; - Eina_Hash_Element *hash_element; - Eina_Bool found = EINA_TRUE; - - it = eina_rbtree_iterator_prefix(hash_head->head); - EINA_ITERATOR_FOREACH(it, hash_element) { - if (hash_element->tuple.data == data->data) { - data->hash_element = hash_element; - data->hash_head = (Eina_Hash_Head *) hash_head; - found = EINA_FALSE; - break; - } - } - - eina_iterator_free(it); - return found; -} - -static inline Eina_Hash_Element *_eina_hash_find_by_hash(const Eina_Hash * - hash, - Eina_Hash_Tuple * - tuple, - int key_hash, - Eina_Hash_Head ** - hash_head) -{ - Eina_Hash_Element *hash_element; - int rb_hash = key_hash & EINA_HASH_RBTREE_MASK; - - key_hash &= hash->mask; - - if (!hash->buckets) - return NULL; - - *hash_head = - (Eina_Hash_Head *) eina_rbtree_inline_lookup(hash-> - buckets[key_hash], - &rb_hash, 0, - EINA_RBTREE_CMP_KEY_CB - (_eina_hash_hash_rbtree_cmp_hash), - NULL); - if (!*hash_head) - return NULL; - - hash_element = - (Eina_Hash_Element *) eina_rbtree_inline_lookup((*hash_head)-> - head, tuple, 0, - EINA_RBTREE_CMP_KEY_CB - (_eina_hash_key_rbtree_cmp_key_data), - (const void *) - hash->key_cmp_cb); - - return hash_element; -} - -static inline Eina_Hash_Element *_eina_hash_find_by_data(const Eina_Hash * - hash, - const void *data, - int *key_hash, - Eina_Hash_Head ** - hash_head) -{ - Eina_Hash_Each each; - Eina_Iterator *it; - int hash_num; - - if (!hash->buckets) - return NULL; - - each.hash_element = NULL; - each.data = data; - - for (hash_num = 0; hash_num < hash->size; hash_num++) { - if (!hash->buckets[hash_num]) - continue; - - it = eina_rbtree_iterator_prefix(hash->buckets[hash_num]); - eina_iterator_foreach(it, - EINA_EACH_CB(_eina_hash_rbtree_each), - &each); - eina_iterator_free(it); - - if (each.hash_element) { - *key_hash = hash_num; - *hash_head = each.hash_head; - return (Eina_Hash_Element *) each.hash_element; - } - } - - return NULL; -} - -static void -_eina_hash_el_free(Eina_Hash_Element * hash_element, Eina_Hash * hash) -{ - if (hash->data_free_cb) - hash->data_free_cb(hash_element->tuple.data); - - if (hash_element->begin == EINA_FALSE) - free(hash_element); -} - -static void -_eina_hash_head_free(Eina_Hash_Head * hash_head, Eina_Hash * hash) -{ - eina_rbtree_delete(hash_head->head, - EINA_RBTREE_FREE_CB(_eina_hash_el_free), hash); - free(hash_head); -} - -static Eina_Bool -_eina_hash_del_by_hash_el(Eina_Hash * hash, - Eina_Hash_Element * hash_element, - Eina_Hash_Head * hash_head, int key_hash) -{ - hash_head->head = - eina_rbtree_inline_remove(hash_head->head, - EINA_RBTREE_GET(hash_element), - EINA_RBTREE_CMP_NODE_CB - (_eina_hash_key_rbtree_cmp_node), - (const void *) hash->key_cmp_cb); - _eina_hash_el_free(hash_element, hash); - - if (!hash_head->head) { - key_hash &= hash->mask; - - hash->buckets[key_hash] = - eina_rbtree_inline_remove(hash->buckets[key_hash], - EINA_RBTREE_GET(hash_head), - EINA_RBTREE_CMP_NODE_CB - (_eina_hash_hash_rbtree_cmp_node), - NULL); - free(hash_head); - } - - hash->population--; - if (hash->population == 0) { - free(hash->buckets); - hash->buckets = NULL; - } - - return EINA_TRUE; -} - -static Eina_Bool -_eina_hash_del_by_key_hash(Eina_Hash * hash, - const void *key, - int key_length, int key_hash, const void *data) -{ - Eina_Hash_Element *hash_element; - Eina_Hash_Head *hash_head; - Eina_Hash_Tuple tuple; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); - EINA_MAGIC_CHECK_HASH(hash); - - if (!hash->buckets) - return EINA_FALSE; - - tuple.key = (void *) key; - tuple.key_length = key_length; - tuple.data = (void *) data; - - hash_element = - _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head); - if (!hash_element) - return EINA_FALSE; - - return _eina_hash_del_by_hash_el(hash, hash_element, hash_head, - key_hash); -} - -static Eina_Bool -_eina_hash_del_by_key(Eina_Hash * hash, const void *key, const void *data) -{ - int key_length, key_hash; - - EINA_MAGIC_CHECK_HASH(hash); - if (!hash) - return EINA_FALSE; - - if (!key) - return EINA_FALSE; - - if (!hash->buckets) - return EINA_FALSE; - - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - key_hash = hash->key_hash_cb(key, key_length); - return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, - data); -} - -static unsigned int _eina_string_key_length(const char *key) -{ - if (!key) - return 0; - - return (int) strlen(key) + 1; -} - -static int -_eina_string_key_cmp(const char *key1, __UNUSED__ int key1_length, - const char *key2, __UNUSED__ int key2_length) -{ - return strcmp(key1, key2); -} - -static int -_eina_stringshared_key_cmp(const char *key1, __UNUSED__ int key1_length, - const char *key2, __UNUSED__ int key2_length) -{ - return key1 - key2; -} - -static unsigned int _eina_int32_key_length(__UNUSED__ const uint32_t * key) -{ - return 4; -} - -static int -_eina_int32_key_cmp(const uint32_t * key1, __UNUSED__ int key1_length, - const uint32_t * key2, __UNUSED__ int key2_length) -{ - return *key1 - *key2; -} - -static unsigned int _eina_int64_key_length(__UNUSED__ const uint32_t * key) -{ - return 8; -} - -static int -_eina_int64_key_cmp(const uint64_t * key1, __UNUSED__ int key1_length, - const uint64_t * key2, __UNUSED__ int key2_length) -{ - return *key1 - *key2; -} - -static Eina_Bool -_eina_foreach_cb(const Eina_Hash * hash, - Eina_Hash_Tuple * data, Eina_Hash_Foreach_Data * fdata) -{ - return fdata->cb((Eina_Hash *) hash, - data->key, data->data, (void *) fdata->fdata); -} - -static void *_eina_hash_iterator_data_get_content(Eina_Iterator_Hash * it) -{ - Eina_Hash_Element *stuff; - - EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL); - - stuff = it->hash_element; - - if (!stuff) - return NULL; - - return stuff->tuple.data; -} - -static void *_eina_hash_iterator_key_get_content(Eina_Iterator_Hash * it) -{ - Eina_Hash_Element *stuff; - - EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL); - - stuff = it->hash_element; - - if (!stuff) - return NULL; - - return (void *) stuff->tuple.key; -} - -static Eina_Hash_Tuple - *_eina_hash_iterator_tuple_get_content(Eina_Iterator_Hash * it) -{ - Eina_Hash_Element *stuff; - - EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL); - - stuff = it->hash_element; - - if (!stuff) - return NULL; - - return &stuff->tuple; -} - -static Eina_Bool -_eina_hash_iterator_next(Eina_Iterator_Hash * it, void **data) -{ - Eina_Bool ok; - int bucket; - - if (!(it->index < it->hash->population)) - return EINA_FALSE; - - if (!it->current) { - ok = EINA_FALSE; - bucket = 0; - it->index = -1; - } else { - ok = eina_iterator_next(it->list, - (void **) &it->hash_element); - if (!ok) { - eina_iterator_free(it->list); - it->list = NULL; - - ok = eina_iterator_next(it->current, - (void **) &it->hash_head); - if (!ok) { - eina_iterator_free(it->current); - it->current = NULL; - it->bucket++; - } else { - it->list = - eina_rbtree_iterator_prefix(it-> - hash_head-> - head); - ok = eina_iterator_next(it->list, - (void **) &it-> - hash_element); - } - } - - bucket = it->bucket; - } - - if (ok == EINA_FALSE) { - while (bucket < it->hash->size) { - if (it->hash->buckets[bucket]) { - it->current = - eina_rbtree_iterator_prefix(it->hash-> - buckets - [bucket]); - ok = eina_iterator_next(it->current, - (void **) &it-> - hash_head); - if (ok) - break; - - eina_iterator_free(it->current); - it->current = NULL; - } - - ++bucket; - } - if (it->list) - eina_iterator_free(it->list); - - it->list = - eina_rbtree_iterator_prefix(it->hash_head->head); - ok = eina_iterator_next(it->list, - (void **) &it->hash_element); - if (bucket == it->hash->size) - ok = EINA_FALSE; - } - - it->index++; - it->bucket = bucket; - - if (ok) - *data = it->get_content(it); - - return ok; -} - -static void *_eina_hash_iterator_get_container(Eina_Iterator_Hash * it) -{ - EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL); - return (void *) it->hash; -} - -static void _eina_hash_iterator_free(Eina_Iterator_Hash * it) -{ - EINA_MAGIC_CHECK_HASH_ITERATOR(it); - if (it->current) - eina_iterator_free(it->current); - - if (it->list) - eina_iterator_free(it->list); - - free(it); -} - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Hash_Group Hash Table - * - * @brief give a small description here : what it is for, what it does - * , etc... - * - * Hash API. Give some hints about the use (functions that must be - * used like init / shutdown), general use, etc... Give also a link to - * tutorial below. - * - * @section hashtable_algo Algorithm - * - * Give here the algorithm used in the implementation - * - * @section hashtable_perf Performance - * - * Give some hints about performance if it is possible, and an image ! - * - * @section hashtable_tutorial Tutorial - * - * Here is a fantastic tutorial about our hash table - * - * @{ - */ - -/** - * @brief Create a new hash table. - * - * @param key_length_cb The function called when getting the size of the key. - * @param key_cmp_cb The function called when comparing the keys. - * @param key_hash_cb The function called when getting the values. - * @param data_free_cb The function called when the hash table is freed. - * @param buckets_power_size The size of the buckets. - * @return The new hash table. - * - * This function create a new hash table using user-defined callbacks - * to manage the hash table. On failure, @c NULL is returned and - * #EINA_ERROR_OUT_OF_MEMORY is set. If @p key_cmp_cb or @pkey_hash_cb - * are @c NULL, @c NULL is returned. If @p buckets_power_size is - * smaller or equal than 2, or if it is greater or equal than 17, - * @c NULL is returned. - * - * Pre-defined functions are available to create a hash table. See - * eina_hash_string_djb2_new(), eina_hash_string_superfast_new(), - * eina_hash_string_small_new(), eina_hash_int32_new(), - * eina_hash_int64_new(), eina_hash_pointer_new() and - * eina_hash_stringshared_new(). - */ -EAPI Eina_Hash *eina_hash_new(Eina_Key_Length key_length_cb, - Eina_Key_Cmp key_cmp_cb, - Eina_Key_Hash key_hash_cb, - Eina_Free_Cb data_free_cb, - int buckets_power_size) -{ - /* FIXME: Use mempool. */ - Eina_Hash *new; - - eina_error_set(0); - EINA_SAFETY_ON_NULL_RETURN_VAL(key_cmp_cb, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(key_hash_cb, NULL); - EINA_SAFETY_ON_TRUE_RETURN_VAL(buckets_power_size < 3, NULL); - EINA_SAFETY_ON_TRUE_RETURN_VAL(buckets_power_size > 16, NULL); - - new = malloc(sizeof(Eina_Hash)); - if (!new) - goto on_error; - - EINA_MAGIC_SET(new, EINA_MAGIC_HASH); - - new->key_length_cb = key_length_cb; - new->key_cmp_cb = key_cmp_cb; - new->key_hash_cb = key_hash_cb; - new->data_free_cb = data_free_cb; - new->buckets = NULL; - new->population = 0; - - new->size = 1 << buckets_power_size; - new->mask = new->size - 1; - - return new; - - on_error: - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; -} - -/** - * @brief Create a new hash table using the djb2 algorithm. - * - * @param data_free_cb The function called when the hash table is freed. - * @return The new hash table. - * - * This function create a new hash table using the djb2 algorithm for - * table management and strcmp() to compare the keys. Values can then - * be looked up with pointers other than the original key pointer that - * was used to add values. On failure, this function returns @c NULL. - * @p data_free_cb is a callback called when the hash table is - * freed. @c NULL can be passed as callback. - */ -EAPI Eina_Hash *eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb) -{ - return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length), - EINA_KEY_CMP(_eina_string_key_cmp), - EINA_KEY_HASH(eina_hash_djb2), - data_free_cb, EINA_HASH_BUCKET_SIZE); -} - -/** - * @brief Create a new hash table for use with strings. - * - * @param data_free_cb The function called when the hash table is freed. - * @return The new hash table. - * - * This function create a new hash table using the superfast algorithm - * for table management and strcmp() to compare the keys. Values can - * then be looked up with pointers other than the original key pointer - * that was used to add values. On failure, this function returns - * @c NULL. @p data_free_cb is a callback called when the hash table is - * freed. @c NULL can be passed as callback. - */ -EAPI Eina_Hash *eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb) -{ - return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length), - EINA_KEY_CMP(_eina_string_key_cmp), - EINA_KEY_HASH(eina_hash_superfast), - data_free_cb, EINA_HASH_BUCKET_SIZE); -} - -/** - * @brief Create a new hash table for use with strings with small bucket size. - * - * @param data_free_cb The function called when the hash table is freed. - * @return The new hash table. - * - * This function create a new hash table using the superfast algorithm - * for table management and strcmp() to compare the keys, but with a - * smaller bucket size (compared to eina_hash_string_superfast_new()) - * which will minimize the memory used by the returned hash - * table. Values can then be looked up with pointers other than the - * original key pointer that was used to add values. On failure, this - * function returns @c NULL. @p data_free_cb is a callback called when - * the hash table is freed. @c NULL can be passed as callback. - */ -EAPI Eina_Hash *eina_hash_string_small_new(Eina_Free_Cb data_free_cb) -{ - return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length), - EINA_KEY_CMP(_eina_string_key_cmp), - EINA_KEY_HASH(eina_hash_superfast), - data_free_cb, EINA_HASH_SMALL_BUCKET_SIZE); -} - -/** - * @brief Create a new hash table for use with 32bit integers. - * - * @param data_free_cb The function called when the hash table is freed. - * @return The new hash table. - * - * This function create a new hash table using the int32 algorithm for - * table management and dereferenced pointers to compare the - * keys. Values can then be looked up with pointers other than the - * original key pointer that was used to add values. This method may - * appear to be able to match string keys, actually it only matches - * the first character. On failure, this function returns @c NULL. - * @p data_free_cb is a callback called when the hash table is freed. - * @c NULL can be passed as callback. - */ -EAPI Eina_Hash *eina_hash_int32_new(Eina_Free_Cb data_free_cb) -{ - return eina_hash_new(EINA_KEY_LENGTH(_eina_int32_key_length), - EINA_KEY_CMP(_eina_int32_key_cmp), - EINA_KEY_HASH(eina_hash_int32), - data_free_cb, EINA_HASH_BUCKET_SIZE); -} - -/** - * @brief Create a new hash table for use with 64bit integers. - * - * @param data_free_cb The function called when the hash table is freed. - * @return The new hash table. - * - * This function create a new hash table using the int64 algorithm for - * table management and dereferenced pointers to compare the - * keys. Values can then be looked up with pointers other than the - * original key pointer that was used to add values. This method may - * appear to be able to match string keys, actually it only matches - * the first character. On failure, this function returns @c NULL. - * @p data_free_cb is a callback called when the hash table is freed. - * @c NULL can be passed as callback. - */ -EAPI Eina_Hash *eina_hash_int64_new(Eina_Free_Cb data_free_cb) -{ - return eina_hash_new(EINA_KEY_LENGTH(_eina_int64_key_length), - EINA_KEY_CMP(_eina_int64_key_cmp), - EINA_KEY_HASH(eina_hash_int64), - data_free_cb, EINA_HASH_BUCKET_SIZE); -} - -/** - * @brief Create a new hash table for use with pointers. - * - * @param data_free_cb The function called when the hash table is freed. - * @return The new hash table. - * - * This function create a new hash table using the int64 algorithm for - * table management and dereferenced pointers to compare the - * keys. Values can then be looked up with pointers other than the - * original key pointer that was used to add values. This method may - * appear to be able to match string keys, actually it only matches - * the first character. On failure, this function returns @c NULL. - * @p data_free_cb is a callback called when the hash table is freed. - * @c NULL can be passed as callback. - */ -EAPI Eina_Hash *eina_hash_pointer_new(Eina_Free_Cb data_free_cb) -{ -#ifdef __LP64__ - return eina_hash_new(EINA_KEY_LENGTH(_eina_int64_key_length), - EINA_KEY_CMP(_eina_int64_key_cmp), - EINA_KEY_HASH(eina_hash_int64), - data_free_cb, EINA_HASH_BUCKET_SIZE); -#else - return eina_hash_new(EINA_KEY_LENGTH(_eina_int32_key_length), - EINA_KEY_CMP(_eina_int32_key_cmp), - EINA_KEY_HASH(eina_hash_int32), - data_free_cb, EINA_HASH_BUCKET_SIZE); -#endif -} - -/** - * @brief Create a new hash table optimized for stringshared values. - * - * @param data_free_cb The function called when the hash table is freed. - * @return The new hash table. - * - * This function create a new hash table optimized for stringshared - * values. Values CAN NOT be looked up with pointers not - * equal to the original key pointer that was used to add a value. On failure, this function returns @c NULL. - * @p data_free_cb is a callback called when the hash table is freed. - * @c NULL can be passed as callback. - * - * Excerpt of code that will NOT work with this type of hash: - * - * @code - * extern Eina_Hash *hash; - * extern const char *value; - * const char *a = eina_stringshare_add("key"); - * - * eina_hash_add(hash, a, value); - * eina_hash_find(hash, "key") - * @endcode - */ -EAPI Eina_Hash *eina_hash_stringshared_new(Eina_Free_Cb data_free_cb) -{ - return eina_hash_new(NULL, - EINA_KEY_CMP(_eina_stringshared_key_cmp), - EINA_KEY_HASH(eina_hash_superfast), - data_free_cb, EINA_HASH_BUCKET_SIZE); -} - -/** - * @brief Returns the number of entries in the given hash table. - * - * @param hash The given hash table. - * @return The number of entries in the hash table. - * - * This function returns the number of entries in @p hash, or 0 on - * error. If @p hash is @c NULL, 0 is returned. - */ -EAPI int eina_hash_population(const Eina_Hash * hash) -{ - if (!hash) - return 0; - - EINA_MAGIC_CHECK_HASH(hash); - return hash->population; -} - -/** - * Free the given hash table resources. - * - * @param hash The hash table to be freed. - * - * This function frees up all the memory allocated to storing @p hash, - * and call the free callback if it has been passed to the hash table - * at creation time. If no free callback has been passed, any entries - * in the table that the program has no more pointers for elsewhere - * may now be lost, so this should only be called if the program has - * already freed any allocated data in the hash table or has the - * pointers for data in the table stored elsewhere as well. If @p hash - * is @c NULL, the function returns immediately. - * - * Example: - * @code - * extern Eina_Hash *hash; - * - * eina_hash_free(hash); - * hash = NULL; - * @endcode - */ -EAPI void eina_hash_free(Eina_Hash * hash) -{ - int i; - - EINA_MAGIC_CHECK_HASH(hash); - EINA_SAFETY_ON_NULL_RETURN(hash); - - if (hash->buckets) { - for (i = 0; i < hash->size; i++) - eina_rbtree_delete(hash->buckets[i], - EINA_RBTREE_FREE_CB - (_eina_hash_head_free), hash); - free(hash->buckets); - } - free(hash); -} - -/** - * Free the given hash table buckets resources. - * - * @param hash The hash table whose buckets have to be freed. - * - * This function frees up all the memory allocated to storing the - * buckets of @p hash, and call the free callback on all hash table - * buckets if it has been passed to the hash table at creation time, - * then frees the buckets. If no free callback has been passed, no - * buckets value will be freed. If @p hash is @c NULL, the function - * returns immediately. - */ -EAPI void eina_hash_free_buckets(Eina_Hash * hash) -{ - int i; - - EINA_MAGIC_CHECK_HASH(hash); - EINA_SAFETY_ON_NULL_RETURN(hash); - - if (hash->buckets) { - for (i = 0; i < hash->size; i++) - eina_rbtree_delete(hash->buckets[i], - EINA_RBTREE_FREE_CB - (_eina_hash_head_free), hash); - free(hash->buckets); - hash->buckets = NULL; - hash->population = 0; - } -} - -/** - * @brief Add an entry to the given hash table. - * - * @param hash The given hash table. - * @param key A unique key. - * @param key_length The length of the key. - * @param key_hash The hash that will always match key. - * @param data The data to associate with the string given by the key. - * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * - * This function adds @p key to @p hash. @p hash, @p key and @p data - * can be @c NULL, in that case #EINA_FALSE is returned. @p key is - * expected to be a unique string within the hash table. Otherwise, - * one cannot be sure which inserted data pointer will be accessed - * with @ref eina_hash_find, and removed with @ref eina_hash_del. Do - * not forget to count '\\0' for string when setting the value of - * @p key_length. @p key_hash is expected to always match - * @p key. Otherwise, one cannot be sure to find it again with @ref - * eina_hash_find_by_hash. Key strings are case sensitive. If an error - * occurs, eina_error_get() should be used to determine if an - * allocation error occurred during this function. This function - * returns #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - */ -EAPI Eina_Bool -eina_hash_add_by_hash(Eina_Hash * hash, - const void *key, - int key_length, int key_hash, const void *data) -{ - return eina_hash_add_alloc_by_hash(hash, - key, - key_length, - key_length, key_hash, data); -} - -/** - * @brief Add an entry to the given hash table and do not duplicate the string key. - * - * @param hash The given hash table. Can be @c NULL. - * @param key A unique key. Can be @c NULL. - * @param key_length Should be the length of @p key (don't forget to count '\\0' for string). - * @param key_hash The hash that will always match key. - * @param data Data to associate with the string given by @p key. - * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * - * This function adds @p key to @p hash. @p hash, @p key and @p data - * can be @c NULL, in that case #EINA_FALSE is returned. @p key is - * expected to be a unique string within the hash table. Otherwise, - * one cannot be sure which inserted data pointer will be accessed - * with @ref eina_hash_find, and removed with @ref eina_hash_del. This - * function does not make a copy of @p key so it must be a string - * constant or stored elsewhere (in the object being added). Do - * not forget to count '\\0' for string when setting the value of - * @p key_length. @p key_hash is expected to always match - * @p key. Otherwise, one cannot be sure to find it again with @ref - * eina_hash_find_by_hash. Key strings are case sensitive. If an error - * occurs, eina_error_get() should be used to determine if an - * allocation error occurred during this function. This function - * returns #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - */ -EAPI Eina_Bool -eina_hash_direct_add_by_hash(Eina_Hash * hash, - const void *key, - int key_length, - int key_hash, const void *data) -{ - return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, - key_hash, data); -} - -/** - * @brief Add an entry to the given hash table. - * - * @param hash The given hash table. - * @param key A unique key. - * @param data Data to associate with the string given by @p key. - * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * - * This function adds @p key to @p hash. @p hash, @p key and @p data - * can be @c NULL, in that case #EINA_FALSE is returned. @p key is - * expected to be unique within the hash table. Key uniqueness varies - * depending on the type of @p hash: a stringshared @ref Eina_Hash - * need only have unique pointers for keys, but the strings in the - * pointers may be identical. All other hash types require the strings - * themselves to be unique. Failure to use sufficient uniqueness will - * result in unexpected results when inserting data pointers accessed - * with eina_hash_find(), and removed with eina_hash_del(). Key - * strings are case sensitive. If an error occurs, eina_error_get() - * should be used to determine if an allocation error occurred during - * this function. This function returns #EINA_FALSE if an error - * occurred, #EINA_TRUE otherwise. - */ -EAPI Eina_Bool -eina_hash_add(Eina_Hash * hash, const void *key, const void *data) -{ - unsigned int key_length; - int key_hash; - - EINA_MAGIC_CHECK_HASH(hash); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - key_hash = hash->key_hash_cb(key, key_length); - - return eina_hash_add_alloc_by_hash(hash, key, key_length, - key_length, key_hash, data); -} - -/** - * @brief Add an entry to the given hash table without duplicating the string key. - * - * @param hash The given hash table. Can be @c NULL. - * @param key A unique key. Can be @c NULL. - * @param data Data to associate with the string given by @p key. - * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * - * This function adds @p key to @p hash. @p hash, @p key and @p data - * can be @c NULL, in that case #EINA_FALSE is returned. @p key is - * expected to be unique within the hash table. Key uniqueness varies - * depending on the type of @p hash: a stringshared @ref Eina_Hash - * need only have unique pointers for keys, but the strings in the - * pointers may be identical. All other hash types require the strings - * themselves to be unique. Failure to use sufficient uniqueness will - * result in unexpected results when inserting data pointers accessed - * with eina_hash_find(), and removed with eina_hash_del(). This - * function does not make a copy of @p key, so it must be a string - * constant or stored elsewhere ( in the object being added). Key - * strings are case sensitive. If an error occurs, eina_error_get() - * should be used to determine if an allocation error occurred during - * this function. This function returns #EINA_FALSE if an error - * occurred, #EINA_TRUE otherwise. - */ -EAPI Eina_Bool -eina_hash_direct_add(Eina_Hash * hash, const void *key, const void *data) -{ - int key_length; - int key_hash; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - EINA_MAGIC_CHECK_HASH(hash); - - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - key_hash = hash->key_hash_cb(key, key_length); - - return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, - key_hash, data); -} - -/** - * @brief Remove the entry identified by a key and a key hash from the given hash table. - * - * @param hash The given hash table. - * @param key The key. - * @param key_length The length of the key. - * @param key_hash The hash that always match the key. - * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * - * This function removes the entry identified by @p key and - * @p key_hash from @p hash. If a free function was given to the - * callback on creation, it will be called for the data being - * deleted. Do not forget to count '\\0' for string when setting the - * value of @p key_length. If @p hash or @p key are @c NULL, the - * functions returns immediately #EINA_FALSE. This function returns - * #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * - * @note if you don't have the key_hash, use eina_hash_del_by_key() instead. - * @note if you don't have the key, use eina_hash_del_by_data() instead. - */ -EAPI Eina_Bool -eina_hash_del_by_key_hash(Eina_Hash * hash, - const void *key, int key_length, int key_hash) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); - - return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, - NULL); -} - -/** - * @brief Remove the entry identified by a key from the given hash table. - * - * This version will calculate key length and hash by using functions - * provided to hash creation function. - * - * @param hash The given hash table. - * @param key The key. - * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * - * This function removes the entry identified by @p key from @p - * hash. The key length and hash will be calculated automatically by - * using functiond provided to has creation function. If a free - * function was given to the callback on creation, it will be called - * for the data being deleted. If @p hash or @p key are @c NULL, the - * functions returns immediately #EINA_FALSE. This function returns - * #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * - * @note if you already have the key_hash, use eina_hash_del_by_key_hash() instead. - * @note if you don't have the key, use eina_hash_del_by_data() instead. - */ -EAPI Eina_Bool eina_hash_del_by_key(Eina_Hash * hash, const void *key) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE); - - return _eina_hash_del_by_key(hash, key, NULL); -} - -/** - * @brief Remove the entry identified by a data from the given hash table. - * - * This version is slow since there is no quick access to nodes based on data. - * - * @param hash The given hash table. - * @param data The data value to search and remove. - * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * thing goes fine. - * - * This function removes the entry identified by @p data from @p - * hash. If a free function was given to the callback on creation, it - * will be called for the data being deleted. If @p hash or @p data - * are @c NULL, the functions returns immediately #EINA_FALSE. This - * function returns #EINA_FALSE if an error occurred, #EINA_TRUE - * otherwise. - * - * @note if you already have the key, use eina_hash_del_by_key() or eina_hash_del_by_key_hash() instead. - */ -EAPI Eina_Bool eina_hash_del_by_data(Eina_Hash * hash, const void *data) -{ - Eina_Hash_Element *hash_element; - Eina_Hash_Head *hash_head; - int key_hash; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - EINA_MAGIC_CHECK_HASH(hash); - - hash_element = - _eina_hash_find_by_data(hash, data, &key_hash, &hash_head); - if (!hash_element) - goto error; - - if (hash_element->tuple.data != data) - goto error; - - return _eina_hash_del_by_hash_el(hash, hash_element, hash_head, - key_hash); - - error: - return EINA_FALSE; -} - -/** - * @brief Remove the entry identified by a key and a key hash or a - * data from the given hash table. - * - * If @p key is @c NULL, then @p data is used to find a match to - * remove. - * - * @param hash The given hash table. - * @param key The key. - * @param key_length The length of the key. - * @param key_hash The hash that always match the key. - * @param data The data pointer to remove if the key is @c NULL. - * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * - * This function removes the entry identified by @p key and - * @p key_hash, or @p data, from @p hash. If a free function was given to - * the callback on creation, it will be called for the data being - * deleted. If @p hash is @c NULL, the functions returns immediately - * #EINA_FALSE. If @p key is @c NULL, then @p key_hash and @p key_hash - * are ignored and @p data is used to find a match to remove, - * otherwise @p key and @p key_hash are used and @p data is not - * required and can be @c NULL. Do not forget to count '\\0' for - * string when setting the value of @p key_length. This function - * returns #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * - * @note if you know you already have the key, use eina_hash_del_by_key_hash(), - * if you know you don't have the key, use eina_hash_del_by_data() - * directly. - */ -EAPI Eina_Bool -eina_hash_del_by_hash(Eina_Hash * hash, - const void *key, - int key_length, int key_hash, const void *data) -{ - Eina_Bool ret; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_MAGIC_CHECK_HASH(hash); - - if (key) - ret = - _eina_hash_del_by_key_hash(hash, key, key_length, - key_hash, data); - else - ret = eina_hash_del_by_data(hash, data); - - return ret; -} - -/** - * @brief Remove the entry identified by a key or a data from the given - * hash table. - * - * @param hash The given hash table. - * @param key The key. - * @param data The data pointer to remove if the key is @c NULL. - * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise. - * - * This function removes the entry identified by @p key or @p data - * from @p hash. If a free function was given to the - * callback on creation, it will be called for the data being - * deleted. If @p hash is @c NULL, the functions returns immediately - * #EINA_FALSE. If @p key is @c NULL, then @p data is used to find the a - * match to remove, otherwise @p key is used and @p data is not - * required and can be @c NULL. This function returns #EINA_FALSE if - * an error occurred, #EINA_TRUE otherwise. - * - * @note if you know you already have the key, use - * eina_hash_del_by_key() or eina_hash_del_by_key_hash(). If you - * know you don't have the key, use eina_hash_del_by_data() - * directly. - */ -EAPI Eina_Bool -eina_hash_del(Eina_Hash * hash, const void *key, const void *data) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_MAGIC_CHECK_HASH(hash); - - if (!key) - return eina_hash_del_by_data(hash, data); - - return _eina_hash_del_by_key(hash, key, data); -} - -/** - * @brief Retrieve a specific entry in the given hash table. - * - * @param hash The given hash table. - * @param key The key of the entry to find. - * @param key_length The length of the key. - * @param key_hash The hash that always match the key - * @return The data pointer for the stored entry on success, @c NULL - * otherwise. - * - * This function retrieves the entry associated to @p key of length - * @p key_length in @p hash. @p key_hash is the hash that always match - * @p key. It is ignored if @p key is @c NULL. Do not forget to count - * '\\0' for string when setting the value of @p key_length. If - * @p hash is @c NULL, this function returns immediately @c NULL. This - * function returns the data pointer on success, @c NULL otherwise. - */ -EAPI void *eina_hash_find_by_hash(const Eina_Hash * hash, - const void *key, - int key_length, int key_hash) -{ - Eina_Hash_Head *hash_head; - Eina_Hash_Element *hash_element; - Eina_Hash_Tuple tuple; - - if (!hash) - return NULL; - - EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); - EINA_MAGIC_CHECK_HASH(hash); - - tuple.key = key; - tuple.key_length = key_length; - tuple.data = NULL; - - hash_element = - _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head); - if (hash_element) - return hash_element->tuple.data; - - return NULL; -} - -/** - * @brief Retrieve a specific entry in the given hash table. - * - * @param hash The given hash table. - * @param key The key of the entry to find. - * @return The data pointer for the stored entry on success, @c NULL - * otherwise. - * - * This function retrieves the entry associated to @p key in - * @p hash. If @p hash is @c NULL, this function returns immediately - * @c NULL. This function returns the data pointer on success, @c NULL - * otherwise. - */ -EAPI void *eina_hash_find(const Eina_Hash * hash, const void *key) -{ - int key_length; - int hash_num; - - if (!hash) - return NULL; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); - EINA_MAGIC_CHECK_HASH(hash); - - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - hash_num = hash->key_hash_cb(key, key_length); - - return eina_hash_find_by_hash(hash, key, key_length, hash_num); -} - -/** - * @brief Modify the entry pointer at the specified key and returns - * the old entry. - * - * @param hash The given hash table. - * @param key The key of the entry to modify. - * @param key_length Should be the length of @p key (don't forget to count '\\0' for string). - * @param key_hash The hash that always match the key. Ignored if @p key is @c NULL. - * @param data The data to replace the old entry, if it exists. - * @return The data pointer for the old stored entry, or @c NULL if not - * found. If an existing entry is not found, nothing is added to the - * hash. - */ -EAPI void *eina_hash_modify_by_hash(Eina_Hash * hash, - const void *key, - int key_length, - int key_hash, const void *data) -{ - Eina_Hash_Head *hash_head; - Eina_Hash_Element *hash_element; - void *old_data = NULL; - Eina_Hash_Tuple tuple; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL); - EINA_MAGIC_CHECK_HASH(hash); - - tuple.key = key; - tuple.key_length = key_length; - tuple.data = NULL; - - hash_element = - _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head); - if (hash_element) { - old_data = hash_element->tuple.data; - hash_element->tuple.data = (void *) data; - } - - return old_data; -} - -/** - * @brief Modify the entry pointer at the specified key and return the - * old entry or add the entry if not found. - * - * @param hash The given hash table. - * @param key The key of the entry to modify. - * @param data The data to replace the old entry - * @return The data pointer for the old stored entry, or @c NULL - * otherwise. - * - * This function modifies the data of @p key with @p data in @p - * hash. If no entry is found, @p data is added to @p hash with the - * key @p key. On success this function returns the old entry, - * otherwise it returns @c NULL. To check for errors, use - * eina_error_get(). - */ -EAPI void *eina_hash_set(Eina_Hash * hash, const void *key, - const void *data) -{ - Eina_Hash_Tuple tuple; - Eina_Hash_Head *hash_head; - Eina_Hash_Element *hash_element; - int key_length; - int key_hash; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL); - EINA_MAGIC_CHECK_HASH(hash); - - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - key_hash = hash->key_hash_cb(key, key_length); - - tuple.key = key; - tuple.key_length = key_length; - tuple.data = NULL; - - hash_element = - _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head); - if (hash_element) { - void *old_data = NULL; - - old_data = hash_element->tuple.data; - hash_element->tuple.data = (void *) data; - return old_data; - } - - eina_hash_add_alloc_by_hash(hash, - key, - key_length, - key_length, key_hash, data); - return NULL; -} - -/** - * @brief Modify the entry pointer at the specified key and return the old entry. - * @param hash The given hash table. - * @param key The key of the entry to modify. - * @param data The data to replace the old entry. - * @return The data pointer for the old stored entry on success, or - * @c NULL otherwise. - * - * This function modifies the data of @p key with @p data in @p - * hash. If no entry is found, nothing is added to @p hash. On success - * this function returns the old entry, otherwise it returns @c NULL. - */ -EAPI void *eina_hash_modify(Eina_Hash * hash, const void *key, - const void *data) -{ - int key_length; - int hash_num; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL); - EINA_MAGIC_CHECK_HASH(hash); - - key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0; - hash_num = hash->key_hash_cb(key, key_length); - - return eina_hash_modify_by_hash(hash, key, key_length, hash_num, - data); -} - -/** - * @brief Change the key associated with a data without triggering the - * free callback. - * - * @param hash The given hash table. - * @param old_key The current key associated with the data - * @param new_key The new key to associate data with - * @return EINA_FALSE in any case but success, EINA_TRUE on success. - * - * This function allows for the move of data from one key to another, - * but does not call the Eina_Free_Cb associated with the hash table - * when destroying the old key. - */ -EAPI Eina_Bool -eina_hash_move(Eina_Hash * hash, const void *old_key, const void *new_key) -{ - Eina_Free_Cb hash_free_cb; - const void *data; - Eina_Bool result = EINA_FALSE; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(old_key, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(new_key, EINA_FALSE); - EINA_MAGIC_CHECK_HASH(hash); - - data = eina_hash_find(hash, old_key); - if (!data) - goto error; - - hash_free_cb = hash->data_free_cb; - hash->data_free_cb = NULL; - - eina_hash_del(hash, old_key, data); - result = eina_hash_add(hash, new_key, data); - - hash->data_free_cb = hash_free_cb; - - error: - return result; -} - -/*============================================================================* -* Iterator * -*============================================================================*/ - -/** - * @brief Call a function on every member stored in the hash table - * - * @param hash The hash table whose members will be walked - * @param func The function to call on each parameter - * @param fdata The data pointer to pass to the function being called - * - * This function goes through every entry in the hash table @p hash and calls - * the function @p func on each member. The function should @b not modify the - * hash table contents if it returns 1. @b If the hash table contents are - * modified by this function or the function wishes to stop processing it must - * return 0, otherwise return 1 to keep processing. - * - * Example: - * @code - * extern Eina_Hash *hash; - * - * Eina_Bool hash_fn(const Eina_Hash *hash, const void *key, void *data, void *fdata) - * { - * printf("Func data: %s, Hash entry: %s / %p\n", fdata, (const char *)key, data); - * return 1; - * } - * - * int main(int argc, char **argv) - * { - * char *hash_fn_data; - * - * hash_fn_data = strdup("Hello World"); - * eina_hash_foreach(hash, hash_fn, hash_fn_data); - * free(hash_fn_data); - * } - * @endcode - */ -EAPI void -eina_hash_foreach(const Eina_Hash * hash, - Eina_Hash_Foreach func, const void *fdata) -{ - Eina_Iterator *it; - Eina_Hash_Foreach_Data foreach; - - EINA_MAGIC_CHECK_HASH(hash); - EINA_SAFETY_ON_NULL_RETURN(hash); - EINA_SAFETY_ON_NULL_RETURN(func); - - foreach.cb = func; - foreach.fdata = fdata; - - it = eina_hash_iterator_tuple_new(hash); - if (!it) - return; - eina_iterator_foreach(it, EINA_EACH_CB(_eina_foreach_cb), - &foreach); - - eina_iterator_free(it); -} - -/** - * @brief Returned a new iterator associated to hash data. - * - * @param hash The hash. - * @return A new iterator. - * - * This function returns a newly allocated iterator associated to - * @p hash. If @p hash is not populated, this function still returns a - * valid iterator that will always return false on - * eina_iterator_next(), thus keeping API sane. - * - * If the memory can not be allocated, @c NULL is returned and - * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is - * returned. - * - * @warning if the hash structure changes then the iterator becomes - * invalid. That is, if you add or remove items this iterator behavior - * is undefined and your program may crash. - */ -EAPI Eina_Iterator *eina_hash_iterator_data_new(const Eina_Hash * hash) -{ - Eina_Iterator_Hash *it; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); - EINA_MAGIC_CHECK_HASH(hash); - - eina_error_set(0); - it = calloc(1, sizeof(Eina_Iterator_Hash)); - if (!it) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - it->hash = hash; - it->get_content = - FUNC_ITERATOR_GET_CONTENT - (_eina_hash_iterator_data_get_content); - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER(_eina_hash_iterator_get_container); - it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free); - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR); - - return &it->iterator; -} - -/** - * @brief Returned a new iterator associated to hash keys. - * - * @param hash The hash. - * @return A new iterator. - * - * This function returns a newly allocated iterator associated to @p - * hash. If @p hash is not populated, this function still returns a - * valid iterator that will always return false on - * eina_iterator_next(), thus keeping API sane. - * - * If the memory can not be allocated, NULL is returned and - * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is - * returned. - * - * @warning if the hash structure changes then the iterator becomes - * invalid! That is, if you add or remove items this iterator - * behavior is undefined and your program may crash! - */ -EAPI Eina_Iterator *eina_hash_iterator_key_new(const Eina_Hash * hash) -{ - Eina_Iterator_Hash *it; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); - EINA_MAGIC_CHECK_HASH(hash); - - eina_error_set(0); - it = calloc(1, sizeof(Eina_Iterator_Hash)); - if (!it) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - it->hash = hash; - it->get_content = - FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_key_get_content); - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER(_eina_hash_iterator_get_container); - it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free); - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR); - - return &it->iterator; -} - -/** - * @brief Returned a new iterator associated to hash keys and data. - * - * @param hash The hash. - * @return A new iterator. - * - * This function returns a newly allocated iterator associated to @p - * hash. If @p hash is not populated, this function still returns a - * valid iterator that will always return false on - * eina_iterator_next(), thus keeping API sane. - * - * If the memory can not be allocated, NULL is returned and - * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is - * returned. - * - * @note iterator data will provide values as Eina_Hash_Tuple that should not - * be modified! - * - * @warning if the hash structure changes then the iterator becomes - * invalid! That is, if you add or remove items this iterator - * behavior is undefined and your program may crash! - */ -EAPI Eina_Iterator *eina_hash_iterator_tuple_new(const Eina_Hash * hash) -{ - Eina_Iterator_Hash *it; - - EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL); - EINA_MAGIC_CHECK_HASH(hash); - - eina_error_set(0); - it = calloc(1, sizeof(Eina_Iterator_Hash)); - if (!it) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - it->hash = hash; - it->get_content = - FUNC_ITERATOR_GET_CONTENT - (_eina_hash_iterator_tuple_get_content); - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER(_eina_hash_iterator_get_container); - it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free); - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR); - - return &it->iterator; -} - -/* Common hash functions */ - -/* Paul Hsieh (http://www.azillionmonkeys.com/qed/hash.html) - used by WebCore (http://webkit.org/blog/8/hashtables-part-2/) */ -EAPI int eina_hash_superfast(const char *key, int len) -{ - unsigned hash = len; - int tmp; - int rem; - - rem = len & 3; - len >>= 2; - - /* Main loop */ - for (; len > 0; len--) { - hash += get16bits(key); - tmp = (get16bits(key + 2) << 11) ^ hash; - hash = (hash << 16) ^ tmp; - key += 2 * sizeof(uint16_t); - hash += hash >> 11; - } - - /* Handle end cases */ - switch (rem) { - case 3: - hash += get16bits(key); - hash ^= hash << 16; - hash ^= key[sizeof(uint16_t)] << 18; - hash += hash >> 11; - break; - - case 2: - hash += get16bits(key); - hash ^= hash << 11; - hash += hash >> 17; - break; - - case 1: - hash += *key; - hash ^= hash << 10; - hash += hash >> 1; - } - - /* Force "avalanching" of final 127 bits */ - hash ^= hash << 3; - hash += hash >> 5; - hash ^= hash << 4; - hash += hash >> 17; - hash ^= hash << 25; - hash += hash >> 6; - - return hash; -} - -/** - * @} - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_inlist.c b/tests/suite/ecore/src/lib/eina_inlist.c deleted file mode 100644 index a8f65ce624..0000000000 --- a/tests/suite/ecore/src/lib/eina_inlist.c +++ /dev/null @@ -1,667 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_error.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_inlist.h" - -/* FIXME: TODO please, refactor this :) */ - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -typedef struct _Eina_Iterator_Inlist Eina_Iterator_Inlist; -typedef struct _Eina_Accessor_Inlist Eina_Accessor_Inlist; - -struct _Eina_Iterator_Inlist { - Eina_Iterator iterator; - const Eina_Inlist *head; - const Eina_Inlist *current; -}; - -struct _Eina_Accessor_Inlist { - Eina_Accessor accessor; - - const Eina_Inlist *head; - const Eina_Inlist *current; - - unsigned int index; -}; - -static Eina_Bool -eina_inlist_iterator_next(Eina_Iterator_Inlist * it, void **data) -{ - if (!it->current) - return EINA_FALSE; - - if (data) - *data = (void *) it->current; - - it->current = it->current->next; - - return EINA_TRUE; -} - -static Eina_Inlist *eina_inlist_iterator_get_container(Eina_Iterator_Inlist - * it) -{ - return (Eina_Inlist *) it->head; -} - -static void eina_inlist_iterator_free(Eina_Iterator_Inlist * it) -{ - free(it); -} - -static Eina_Bool -eina_inlist_accessor_get_at(Eina_Accessor_Inlist * it, - unsigned int idx, void **data) -{ - const Eina_Inlist *over; - unsigned int middle; - unsigned int i; - - if (it->index == idx) - over = it->current; - else if (idx > it->index) - /* Looking after current. */ - for (i = it->index, over = it->current; - i < idx && over; ++i, over = over->next); - else { - middle = it->index >> 1; - - if (idx > middle) - /* Looking backward from current. */ - for (i = it->index, over = it->current; - i > idx && over; --i, over = over->prev); - else - /* Looking from the start. */ - for (i = 0, over = it->head; - i < idx && over; ++i, over = over->next); - } - - if (!over) - return EINA_FALSE; - - it->current = over; - it->index = idx; - - if (data) - *data = (void *) over; - - return EINA_TRUE; -} - -static Eina_Inlist *eina_inlist_accessor_get_container(Eina_Accessor_Inlist - * it) -{ - return (Eina_Inlist *) it->head; -} - -static void eina_inlist_accessor_free(Eina_Accessor_Inlist * it) -{ - free(it); -} - -/** - * @endcond - */ - - -/*============================================================================* -* Global * -*============================================================================*/ - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Inline_List_Group Inline List - * - * @brief These functions provide inline list management. - * - * Inline lists mean its nodes pointers are part of same memory as - * data. This has the benefit of framenting memory less and avoiding - * @c node->data indirection, but has the drawback of elements only - * being able to be part of one single inlist at same time. But it is - * possible to have inlist nodes to be part of regular lists created - * with eina_list_append() or eina_list_prepend(). - * - * Inline lists have its purposes, but if you don't know them go with - * regular lists instead. - * - * @code - * #include - * #include - * - * int - * main(void) - * { - * struct my_struct { - * EINA_INLIST; - * int a, b; - * } *d, *cur; - * Eina_Inlist *list, *itr; - * - * eina_init(); - * - * d = malloc(sizeof(*d)); - * d->a = 1; - * d->b = 10; - * list = eina_inlist_append(NULL, EINA_INLIST_GET(d)); - * - * d = malloc(sizeof(*d)); - * d->a = 2; - * d->b = 20; - * list = eina_inlist_append(list, EINA_INLIST_GET(d)); - * - * d = malloc(sizeof(*d)); - * d->a = 3; - * d->b = 30; - * list = eina_inlist_prepend(list, EINA_INLIST_GET(d)); - * - * printf("list=%p\n", list); - * EINA_INLIST_FOREACH(list, cur) - * printf("\ta=%d, b=%d\n", cur->a, cur->b); - * - * list = eina_inlist_remove(list, EINA_INLIST_GET(d)); - * free(d); - * printf("list=%p\n", list); - * for (itr = list; itr != NULL; itr = itr->next) - * { - * cur = EINA_INLIST_CONTAINER_GET(itr, struct my_struct); - * printf("\ta=%d, b=%d\n", cur->a, cur->b); - * } - * - * while (list) - * { - * Eina_Inlist *aux = list; - * list = eina_inlist_remove(list, list); - * free(aux); - * } - * - * eina_shutdown(); - * - * return 0; - * } - * @endcode - * - * @{ - */ - -/** - * Add a new node to end of list. - * - * @note this code is meant to be fast, appends are O(1) and do not - * walk @a list anyhow. - * - * @note @a new_l is considered to be in no list. If it was in another - * list before, please eina_inlist_remove() it before adding. No - * check of @a new_l prev and next pointers is done, so it' safe - * to have them uninitialized. - * - * @param list existing list head or NULL to create a new list. - * @param new_l new list node, must not be NULL. - * - * @return the new list head. Use it and not given @a list anymore. - */ -EAPI Eina_Inlist *eina_inlist_append(Eina_Inlist * list, - Eina_Inlist * new_l) -{ - Eina_Inlist *l; - - EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list); - - new_l->next = NULL; - if (!list) { - new_l->prev = NULL; - new_l->last = new_l; - return new_l; - } - - if (list->last) - l = list->last; - else - for (l = list; (l) && (l->next); l = l->next); - - l->next = new_l; - new_l->prev = l; - list->last = new_l; - return list; -} - -/** - * Add a new node to beginning of list. - * - * @note this code is meant to be fast, prepends are O(1) and do not - * walk @a list anyhow. - * - * @note @a new_l is considered to be in no list. If it was in another - * list before, please eina_inlist_remove() it before adding. No - * check of @a new_l prev and next pointers is done, so it' safe - * to have them uninitialized. - * - * @param list existing list head or NULL to create a new list. - * @param new_l new list node, must not be NULL. - * - * @return the new list head. Use it and not given @a list anymore. - */ -EAPI Eina_Inlist *eina_inlist_prepend(Eina_Inlist * list, - Eina_Inlist * new_l) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list); - - new_l->prev = NULL; - if (!list) { - new_l->next = NULL; - new_l->last = new_l; - return new_l; - } - - new_l->next = list; - list->prev = new_l; - new_l->last = list->last; - list->last = NULL; - return new_l; -} - -/** - * Add a new node after the given relative item in list. - * - * @note this code is meant to be fast, appends are O(1) and do not - * walk @a list anyhow. - * - * @note @a new_l is considered to be in no list. If it was in another - * list before, please eina_inlist_remove() it before adding. No - * check of @a new_l prev and next pointers is done, so it' safe - * to have them uninitialized. - * - * @note @a relative is considered to be inside @a list, no checks are - * done to confirm that and giving nodes from different lists - * will lead to problems. Giving NULL @a relative is the same as - * eina_list_append(). - * - * @param list existing list head or NULL to create a new list. - * @param new_l new list node, must not be NULL. - * @param relative reference node, @a new_l will be added after it. - * - * @return the new list head. Use it and not given @a list anymore. - */ -EAPI Eina_Inlist *eina_inlist_append_relative(Eina_Inlist * list, - Eina_Inlist * new_l, - Eina_Inlist * relative) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list); - - if (relative) { - if (relative->next) { - new_l->next = relative->next; - relative->next->prev = new_l; - } else - new_l->next = NULL; - - relative->next = new_l; - new_l->prev = relative; - if (!new_l->next) - list->last = new_l; - - return list; - } - - return eina_inlist_append(list, new_l); -} - -/** - * Add a new node before the given relative item in list. - * - * @note this code is meant to be fast, prepends are O(1) and do not - * walk @a list anyhow. - * - * @note @a new_l is considered to be in no list. If it was in another - * list before, please eina_inlist_remove() it before adding. No - * check of @a new_l prev and next pointers is done, so it' safe - * to have them uninitialized. - * - * @note @a relative is considered to be inside @a list, no checks are - * done to confirm that and giving nodes from different lists - * will lead to problems. Giving NULL @a relative is the same as - * eina_list_prepend(). - * - * @param list existing list head or NULL to create a new list. - * @param new_l new list node, must not be NULL. - * @param relative reference node, @a new_l will be added before it. - * - * @return the new list head. Use it and not given @a list anymore. - */ -EAPI Eina_Inlist *eina_inlist_prepend_relative(Eina_Inlist * list, - Eina_Inlist * new_l, - Eina_Inlist * relative) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list); - - if (relative) { - new_l->prev = relative->prev; - new_l->next = relative; - relative->prev = new_l; - if (new_l->prev) { - new_l->prev->next = new_l; - /* new_l->next could not be NULL, as it was set to 'relative' */ - assert(new_l->next); - return list; - } else { - /* new_l->next could not be NULL, as it was set to 'relative' */ - assert(new_l->next); - - new_l->last = list->last; - list->last = NULL; - return new_l; - } - } - - return eina_inlist_prepend(list, new_l); -} - -/** - * Remove node from list. - * - * @note this code is meant to be fast, removals are O(1) and do not - * walk @a list anyhow. - * - * @note @a item is considered to be inside @a list, no checks are - * done to confirm that and giving nodes from different lists - * will lead to problems, specially if @a item is the head since - * it will be different from @a list and the wrong new head will - * be returned. - * - * @param list existing list head, must not be NULL. - * @param item existing list node, must not be NULL. - * - * @return the new list head. Use it and not given @a list anymore. - */ -EAPI Eina_Inlist *eina_inlist_remove(Eina_Inlist * list, - Eina_Inlist * item) -{ - Eina_Inlist *return_l; - - /* checkme */ - EINA_SAFETY_ON_NULL_RETURN_VAL(list, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(item, list); - EINA_SAFETY_ON_TRUE_RETURN_VAL - ((item != list) && (!item->prev) && (!item->next), list); - - if (item->next) - item->next->prev = item->prev; - - if (item->prev) { - item->prev->next = item->next; - return_l = list; - } else { - return_l = item->next; - if (return_l) - return_l->last = list->last; - } - - if (item == list->last) - list->last = item->prev; - - item->next = NULL; - item->prev = NULL; - return return_l; -} - -/** - * Move existing node to beginning of list. - * - * @note this code is meant to be fast, promotion is O(1) and do not - * walk @a list anyhow. - * - * @note @a item is considered to be inside @a list, no checks are - * done to confirm that and giving nodes from different lists - * will lead to problems. - * - * @param list existing list head or NULL to create a new list. - * @param item list node to move to beginning (head), must not be NULL. - * - * @return the new list head. Use it and not given @a list anymore. - */ -EAPI Eina_Inlist *eina_inlist_promote(Eina_Inlist * list, - Eina_Inlist * item) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(list, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(item, list); - - if (item == list) - return list; - - if (item->next) - item->next->prev = item->prev; - - item->prev->next = item->next; - - if (list->last == item) - list->last = item->prev; - - item->next = list; - item->prev = NULL; - item->last = list->last; - - list->prev = item; - list->last = NULL; - - return item; -} - -/** - * Move existing node to end of list. - * - * @note this code is meant to be fast, demoting is O(1) and do not - * walk @a list anyhow. - * - * @note @a item is considered to be inside @a list, no checks are - * done to confirm that and giving nodes from different lists - * will lead to problems. - * - * @param list existing list head or NULL to create a new list. - * @param item list node to move to end (tail), must not be NULL. - * - * @return the new list head. Use it and not given @a list anymore. - */ -EAPI Eina_Inlist *eina_inlist_demote(Eina_Inlist * list, - Eina_Inlist * item) -{ - Eina_Inlist *l; - - EINA_SAFETY_ON_NULL_RETURN_VAL(list, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(item, list); - - if (list->last == item) - return list; - - if (!list->last) { - for (l = list; l->next; l = l->next); - list->last = l; - } - - l = list; - if (item->prev) - item->prev->next = item->next; - else - l = item->next; - - item->next->prev = item->prev; - - list->last->next = item; - item->prev = list->last; - item->next = NULL; - - l->last = item; - return l; -} - -/** - * Find given node in list, returns itself if found, NULL if not. - * - * @warning this is an expensive call and have O(n) cost, possibly - * walking the whole list. - * - * @param list existing list to search @a item in, must not be NULL. - * @param item what to search for, must not be NULL. - * - * @return @a item if found, NULL if not. - */ -EAPI Eina_Inlist *eina_inlist_find(Eina_Inlist * list, Eina_Inlist * item) -{ - Eina_Inlist *l; - - for (l = list; l; l = l->next) { - if (l == item) - return item; - } - return NULL; -} - -/** - * @brief Get the count of the number of items in a list. - * - * @param list The list whose count to return. - * @return The number of members in the list. - * - * This function returns how many members @p list contains. If the - * list is @c NULL, 0 is returned. - * - * @warning This is an order-N operation and so the time will depend - * on the number of elements on the list, that is, it might become - * slow for big lists! - */ -EAPI unsigned int eina_inlist_count(const Eina_Inlist * list) -{ - const Eina_Inlist *l; - unsigned int i = 0; - - for (l = list; l; l = l->next) - i++; - - return i; -} - -/** - * @brief Returned a new iterator associated to a list. - * - * @param list The list. - * @return A new iterator. - * - * This function returns a newly allocated iterator associated to @p - * list. If @p list is @c NULL or the count member of @p list is less - * or equal than 0, this function still returns a valid iterator that - * will always return false on eina_iterator_next(), thus keeping API - * sane. - * - * If the memory can not be allocated, NULL is returned and - * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is - * returned. - * - * @warning if the list structure changes then the iterator becomes - * invalid! That is, if you add or remove nodes this iterator - * behavior is undefined and your program may crash! - */ -EAPI Eina_Iterator *eina_inlist_iterator_new(const Eina_Inlist * list) -{ - Eina_Iterator_Inlist *it; - - eina_error_set(0); - it = calloc(1, sizeof(Eina_Iterator_Inlist)); - if (!it) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - it->head = list; - it->current = list; - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(eina_inlist_iterator_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER - (eina_inlist_iterator_get_container); - it->iterator.free = FUNC_ITERATOR_FREE(eina_inlist_iterator_free); - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - return &it->iterator; -} - -/** - * @brief Returned a new accessor associated to a list. - * - * @param list The list. - * @return A new accessor. - * - * This function returns a newly allocated accessor associated to - * @p list. If @p list is @c NULL or the count member of @p list is - * less or equal than 0, this function returns NULL. If the memory can - * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is - * set. Otherwise, a valid accessor is returned. - */ -EAPI Eina_Accessor *eina_inlist_accessor_new(const Eina_Inlist * list) -{ - Eina_Accessor_Inlist *ac; - - eina_error_set(0); - ac = calloc(1, sizeof(Eina_Accessor_Inlist)); - if (!ac) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - ac->head = list; - ac->current = list; - ac->index = 0; - - ac->accessor.version = EINA_ACCESSOR_VERSION; - ac->accessor.get_at = - FUNC_ACCESSOR_GET_AT(eina_inlist_accessor_get_at); - ac->accessor.get_container = - FUNC_ACCESSOR_GET_CONTAINER - (eina_inlist_accessor_get_container); - ac->accessor.free = FUNC_ACCESSOR_FREE(eina_inlist_accessor_free); - - EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR); - - return &ac->accessor; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_iterator.c b/tests/suite/ecore/src/lib/eina_iterator.c deleted file mode 100644 index 7389319519..0000000000 --- a/tests/suite/ecore/src/lib/eina_iterator.c +++ /dev/null @@ -1,254 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "eina_config.h" -#include "eina_private.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_iterator.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -static const char EINA_MAGIC_ITERATOR_STR[] = "Eina Iterator"; - -#define EINA_MAGIC_CHECK_ITERATOR(d) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ITERATOR)) { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_ITERATOR); } \ - } while(0) - -/** - * @endcond - */ - - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the iterator module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the iterator module of Eina. It is called by - * eina_init(). - * - * @see eina_init() - */ -Eina_Bool eina_iterator_init(void) -{ - return eina_magic_string_set(EINA_MAGIC_ITERATOR, - EINA_MAGIC_ITERATOR_STR); -} - -/** - * @internal - * @brief Shut down the iterator module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the iterator module set up by - * eina_iterator_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_iterator_shutdown(void) -{ - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Iterator_Group Iterator Functions - * - * @brief These functions manage iterators on containers. - * - * These functions allow to access elements of a container in a - * generic way, without knowing which container is used (a bit like - * iterators in the C++ STL). Iterators only allows sequential access - * (that is, from an element to the next one). For random access, see - * @ref Eina_Accessor_Group. - * - * An iterator is created from container data types, so no creation - * function is available here. An iterator is deleted with - * eina_iterator_free(). To get the data and iterate, use - * eina_iterator_next(). To call a function on all the elements of a - * container, use eina_iterator_foreach(). - * - * @{ - */ - -/** - * @brief Free an iterator. - * - * @param iterator The iterator to free. - * - * This function frees @p iterator if it is not @c NULL; - */ -EAPI void eina_iterator_free(Eina_Iterator * iterator) -{ - EINA_MAGIC_CHECK_ITERATOR(iterator); - EINA_SAFETY_ON_NULL_RETURN(iterator); - EINA_SAFETY_ON_NULL_RETURN(iterator->free); - iterator->free(iterator); -} - -/** - * @brief Return the container of an iterator. - * - * @param iterator The iterator. - * @return The container which created the iterator. - * - * This function returns the container which created @p iterator. If - * @p iterator is @c NULL, this function returns @c NULL. - */ -EAPI void *eina_iterator_container_get(Eina_Iterator * iterator) -{ - EINA_MAGIC_CHECK_ITERATOR(iterator); - EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(iterator->get_container, NULL); - return iterator->get_container(iterator); -} - -/** - * @brief Return the value of the current element and go to the next one. - * - * @param iterator The iterator. - * @param data The data of the element. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function returns the value of the current element pointed by - * @p iterator in @p data, then goes to the next element. If @p - * iterator is @c NULL or if a problem occurred, #EINA_FALSE is - * returned, otherwise #EINA_TRUE is returned. - */ -EAPI Eina_Bool eina_iterator_next(Eina_Iterator * iterator, void **data) -{ - if (!iterator) - return EINA_FALSE; - - EINA_MAGIC_CHECK_ITERATOR(iterator); - EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(iterator->next, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE); - return iterator->next(iterator, data); -} - -/** - * @brief Iterate over the container and execute a callback on each element. - * - * @param iterator The iterator. - * @param cb The callback called on each iteration. - * @param fdata The data passed to the callback. - * - * This function iterates over the elements pointed by @p iterator, - * beginning from the current element. For Each element, the callback - * @p cb is called with the data @p fdata. If @p iterator is @c NULL, - * the function returns immediately. Also, if @p cb returns @c - * EINA_FALSE, the iteration stops at that point. - */ -EAPI void -eina_iterator_foreach(Eina_Iterator * iterator, - Eina_Each_Cb cb, const void *fdata) -{ - const void *container; - void *data; - - EINA_MAGIC_CHECK_ITERATOR(iterator); - EINA_SAFETY_ON_NULL_RETURN(iterator); - EINA_SAFETY_ON_NULL_RETURN(iterator->get_container); - EINA_SAFETY_ON_NULL_RETURN(iterator->next); - EINA_SAFETY_ON_NULL_RETURN(cb); - - if (!eina_iterator_lock(iterator)) - return; - - container = iterator->get_container(iterator); - while (iterator->next(iterator, &data) == EINA_TRUE) { - if (cb(container, data, (void *) fdata) != EINA_TRUE) - goto on_exit; - } - - on_exit: - (void) eina_iterator_unlock(iterator); -} - -/** - * @brief Lock the container of the iterator. - * - * @param iterator The iterator. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * If the container of the @p iterator permit it, it will be locked. - * If @p iterator is @c NULL or if a problem occurred, #EINA_FALSE is - * returned, otherwise #EINA_TRUE is returned. If the container - * is not lockable, it will return EINA_TRUE. - */ -EAPI Eina_Bool eina_iterator_lock(Eina_Iterator * iterator) -{ - EINA_MAGIC_CHECK_ITERATOR(iterator); - EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, EINA_FALSE); - - if (iterator->lock) - return iterator->lock(iterator); - return EINA_TRUE; -} - -/** - * @brief Unlock the container of the iterator. - * - * @param iterator The iterator. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * If the container of the @p iterator permit it and was previously - * locked, it will be unlocked. If @p iterator is @c NULL or if a - * problem occurred, #EINA_FALSE is returned, otherwise #EINA_TRUE - * is returned. If the container is not lockable, it will return - * EINA_TRUE. - */ -EAPI Eina_Bool eina_iterator_unlock(Eina_Iterator * iterator) -{ - EINA_MAGIC_CHECK_ITERATOR(iterator); - EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, EINA_FALSE); - - if (iterator->unlock) - return iterator->unlock(iterator); - return EINA_TRUE; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_lalloc.c b/tests/suite/ecore/src/lib/eina_lalloc.c deleted file mode 100644 index a902d7623d..0000000000 --- a/tests/suite/ecore/src/lib/eina_lalloc.c +++ /dev/null @@ -1,148 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "eina_config.h" -#include "eina_private.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_lalloc.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -struct _Eina_Lalloc { - void *data; - int num_allocated; - int num_elements; - int acc; - Eina_Lalloc_Alloc alloc_cb; - Eina_Lalloc_Free free_cb; -}; - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Lalloc_Group Lazy allocator - * - * @{ - */ - -EAPI Eina_Lalloc *eina_lalloc_new(void *data, - Eina_Lalloc_Alloc alloc_cb, - Eina_Lalloc_Free free_cb, int num_init) -{ - Eina_Lalloc *a; - - EINA_SAFETY_ON_NULL_RETURN_VAL(alloc_cb, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(free_cb, NULL); - - a = calloc(1, sizeof(Eina_Lalloc)); - a->data = data; - a->alloc_cb = alloc_cb; - a->free_cb = free_cb; - if (num_init > 0) { - a->num_allocated = num_init; - a->alloc_cb(a->data, a->num_allocated); - } - - return a; -} - -EAPI void eina_lalloc_free(Eina_Lalloc * a) -{ - EINA_SAFETY_ON_NULL_RETURN(a); - EINA_SAFETY_ON_NULL_RETURN(a->free_cb); - a->free_cb(a->data); - free(a); -} - -EAPI Eina_Bool eina_lalloc_element_add(Eina_Lalloc * a) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(a, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(a->alloc_cb, EINA_FALSE); - - if (a->num_elements == a->num_allocated) { - if (a->alloc_cb(a->data, (1 << a->acc)) == EINA_TRUE) { - a->num_allocated = (1 << a->acc); - a->acc++; - } else - return EINA_FALSE; - } - - a->num_elements++; - - return EINA_TRUE; -} - -EAPI Eina_Bool eina_lalloc_elements_add(Eina_Lalloc * a, int num) -{ - int tmp; - - EINA_SAFETY_ON_NULL_RETURN_VAL(a, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(a->alloc_cb, EINA_FALSE); - - tmp = a->num_elements + num; - if (tmp > a->num_allocated) { - int allocated; - int acc; - - allocated = a->num_allocated; - acc = a->acc; - - while (tmp > allocated) { - allocated = (1 << acc); - acc++; - } - - if (a->alloc_cb(a->data, allocated) == EINA_TRUE) { - a->num_allocated = allocated; - a->acc = acc; - } else - return EINA_FALSE; - } - - a->num_elements += num; - - return EINA_TRUE; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_list.c b/tests/suite/ecore/src/lib/eina_list.c deleted file mode 100644 index b8901c6644..0000000000 --- a/tests/suite/ecore/src/lib/eina_list.c +++ /dev/null @@ -1,2101 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Gustavo Sverzut Barbieri, Tilman Sauerbeck, - * Vincent Torri, Cedric Bail, Jorge Luis Zapata Muga, - * Corey Donohoe, Arnaud de Turckheim, Alexandre Becoulet - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - * - * This file incorporates work covered by the following copyright and - * permission notice: - * - * Copyright (C) 2004 ncn - * Copyright (C) 2006 Sebastian Dransfeld - * Copyright (C) 2007 Christopher Michael - * - * 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 of the Software and its Copyright notices. In addition publicly - * documented acknowledgment must be given that this software has been used if no - * source code of this software is made available publicly. This includes - * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing - * documents or any documentation provided with any product containing this - * software. This License does not apply to any software that links to the - * libraries provided by this software (statically or dynamically), but only to - * the software provided. - - * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice - * and it's intent. - - * 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 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. - */ - - -/** - * @page tutorial_list_page List Tutorial - * - * to be written... - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_error.h" -#include "eina_log.h" -#include "eina_mempool.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_list.h" - - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -static const char EINA_MAGIC_LIST_STR[] = "Eina List"; -static const char EINA_MAGIC_LIST_ITERATOR_STR[] = "Eina List Iterator"; -static const char EINA_MAGIC_LIST_ACCESSOR_STR[] = "Eina List Accessor"; -static const char EINA_MAGIC_LIST_ACCOUNTING_STR[] = - "Eina List Accounting"; - - -#define EINA_MAGIC_CHECK_LIST(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST); \ - return __VA_ARGS__; \ - } \ - } while(0) - -#define EINA_MAGIC_CHECK_LIST_ITERATOR(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ITERATOR)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ITERATOR); \ - return __VA_ARGS__; \ - } \ - } while(0) - -#define EINA_MAGIC_CHECK_LIST_ACCESSOR(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ACCESSOR)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCESSOR); \ - return __VA_ARGS__; \ - } \ - } while(0) - -#define EINA_MAGIC_CHECK_LIST_ACCOUNTING(d) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ACCOUNTING)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCOUNTING); \ - return; \ - } \ - } while(0) - -#define EINA_LIST_SORT_STACK_SIZE 32 - -typedef struct _Eina_Iterator_List Eina_Iterator_List; -typedef struct _Eina_Accessor_List Eina_Accessor_List; - -struct _Eina_Iterator_List { - Eina_Iterator iterator; - - const Eina_List *head; - const Eina_List *current; - - EINA_MAGIC}; - -struct _Eina_Accessor_List { - Eina_Accessor accessor; - - const Eina_List *head; - const Eina_List *current; - - unsigned int index; - - EINA_MAGIC}; - -static Eina_Mempool *_eina_list_mp = NULL; -static Eina_Mempool *_eina_list_accounting_mp = NULL; -static int _eina_list_log_dom = -1; - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eina_list_log_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eina_list_log_dom, __VA_ARGS__) - -static inline Eina_List_Accounting - *_eina_list_mempool_accounting_new(__UNUSED__ Eina_List * list) -{ - Eina_List_Accounting *tmp; - - tmp = - eina_mempool_malloc(_eina_list_accounting_mp, - sizeof(Eina_List_Accounting)); - if (!tmp) - return NULL; - - EINA_MAGIC_SET(tmp, EINA_MAGIC_LIST_ACCOUNTING); - - return tmp; -} - -static inline void -_eina_list_mempool_accounting_free(Eina_List_Accounting * accounting) -{ - EINA_MAGIC_CHECK_LIST_ACCOUNTING(accounting); - - EINA_MAGIC_SET(accounting, EINA_MAGIC_NONE); - eina_mempool_free(_eina_list_accounting_mp, accounting); -} - -static inline Eina_List *_eina_list_mempool_list_new(__UNUSED__ Eina_List * - list) -{ - Eina_List *tmp; - - tmp = eina_mempool_malloc(_eina_list_mp, sizeof(Eina_List)); - if (!tmp) - return NULL; - - EINA_MAGIC_SET(tmp, EINA_MAGIC_LIST); - - return tmp; -} - -static inline void _eina_list_mempool_list_free(Eina_List * list) -{ - EINA_MAGIC_CHECK_LIST(list); - - list->accounting->count--; - if (list->accounting->count == 0) - _eina_list_mempool_accounting_free(list->accounting); - - EINA_MAGIC_SET(list, EINA_MAGIC_NONE); - eina_mempool_free(_eina_list_mp, list); -} - -static Eina_List *_eina_list_setup_accounting(Eina_List * list) -{ - EINA_MAGIC_CHECK_LIST(list, NULL); - - list->accounting = _eina_list_mempool_accounting_new(list); - if (!list->accounting) - goto on_error; - - list->accounting->last = list; - list->accounting->count = 1; - - return list; - - on_error: - _eina_list_mempool_list_free(list); - return NULL; -} - -static inline void -_eina_list_update_accounting(Eina_List * list, Eina_List * new_list) -{ - EINA_MAGIC_CHECK_LIST(list); - EINA_MAGIC_CHECK_LIST(new_list); - - list->accounting->count++; - new_list->accounting = list->accounting; -} - -#if 0 -static Eina_Mempool2 _eina_list_mempool = { - sizeof(Eina_List), - 320, - 0, NULL, NULL -}; - -static Eina_Mempool2 _eina_list_accounting_mempool = { - sizeof(Eina_List_Accounting), - 80, - 0, NULL, NULL -}; -#endif - -static Eina_Bool -eina_list_iterator_next(Eina_Iterator_List * it, void **data) -{ - EINA_MAGIC_CHECK_LIST_ITERATOR(it, EINA_FALSE); - - if (!it->current) - return EINA_FALSE; - - *data = eina_list_data_get(it->current); - - it->current = eina_list_next(it->current); - - return EINA_TRUE; -} - -static Eina_Bool -eina_list_iterator_prev(Eina_Iterator_List * it, void **data) -{ - EINA_MAGIC_CHECK_LIST_ITERATOR(it, EINA_FALSE); - - if (!it->current) - return EINA_FALSE; - - *data = eina_list_data_get(it->current); - - it->current = eina_list_prev(it->current); - - return EINA_TRUE; -} - -static Eina_List *eina_list_iterator_get_container(Eina_Iterator_List * it) -{ - EINA_MAGIC_CHECK_LIST_ITERATOR(it, NULL); - - return (Eina_List *) it->head; -} - -static void eina_list_iterator_free(Eina_Iterator_List * it) -{ - EINA_MAGIC_CHECK_LIST_ITERATOR(it); - - MAGIC_FREE(it); -} - -static Eina_Bool -eina_list_accessor_get_at(Eina_Accessor_List * it, unsigned int idx, - void **data) -{ - const Eina_List *over; - unsigned int middle; - unsigned int i; - - EINA_MAGIC_CHECK_LIST_ACCESSOR(it, EINA_FALSE); - - if (idx >= eina_list_count(it->head)) - return EINA_FALSE; - - if (it->index == idx) - over = it->current; - else if (idx > it->index) { - /* After current position. */ - middle = - ((eina_list_count(it->head) - it->index) >> 1) + - it->index; - - if (idx > middle) - /* Go backward from the end. */ - for (i = eina_list_count(it->head) - 1, - over = eina_list_last(it->head); - i > idx && over; - --i, over = eina_list_prev(over)); - else - /* Go forward from current. */ - for (i = it->index, over = it->current; - i < idx && over; - ++i, over = eina_list_next(over)); - } else { - /* Before current position. */ - middle = it->index >> 1; - - if (idx > middle) - /* Go backward from current. */ - for (i = it->index, over = it->current; - i > idx && over; - --i, over = eina_list_prev(over)); - else - /* Go forward from start. */ - for (i = 0, over = it->head; - i < idx && over; - ++i, over = eina_list_next(over)); - } - - if (!over) - return EINA_FALSE; - - it->current = over; - it->index = idx; - - *data = eina_list_data_get(it->current); - return EINA_TRUE; -} - -static Eina_List *eina_list_accessor_get_container(Eina_Accessor_List * it) -{ - EINA_MAGIC_CHECK_LIST_ACCESSOR(it, NULL); - - return (Eina_List *) it->head; -} - -static void eina_list_accessor_free(Eina_Accessor_List * it) -{ - EINA_MAGIC_CHECK_LIST_ACCESSOR(it); - - MAGIC_FREE(it); -} - -static Eina_List *eina_list_sort_rebuild_prev(Eina_List * list) -{ - Eina_List *prev = NULL; - - EINA_MAGIC_CHECK_LIST(list, NULL); - - for (; list; list = list->next) { - list->prev = prev; - prev = list; - } - - return prev; -} - -static Eina_List *eina_list_sort_merge(Eina_List * a, Eina_List * b, - Eina_Compare_Cb func) -{ - Eina_List *first, *last; - - if (func(a->data, b->data) < 0) - a = (last = first = a)->next; - else - b = (last = first = b)->next; - - while (a && b) - if (func(a->data, b->data) < 0) - a = (last = last->next = a)->next; - else - b = (last = last->next = b)->next; - - last->next = a ? a : b; - - return first; -} - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the list module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the list module of Eina. It is called by - * eina_init(). - * - * This function creates mempool to speed up list node and accounting - * management, using EINA_MEMPOOL environment variable if it is set to - * choose the memory pool type to use. - * - * @see eina_init() - */ -Eina_Bool eina_list_init(void) -{ - const char *choice, *tmp; - - _eina_list_log_dom = eina_log_domain_register("eina_list", - EINA_LOG_COLOR_DEFAULT); - if (_eina_list_log_dom < 0) { - EINA_LOG_ERR("Could not register log domain: eina_list"); - return EINA_FALSE; - } -#ifdef EINA_DEFAULT_MEMPOOL - choice = "pass_through"; -#else - choice = "chained_mempool"; -#endif - tmp = getenv("EINA_MEMPOOL"); - if (tmp && tmp[0]) - choice = tmp; - - _eina_list_mp = eina_mempool_add - (choice, "list", NULL, sizeof(Eina_List), 320); - if (!_eina_list_mp) { - ERR("ERROR: Mempool for list cannot be allocated in list init."); - goto on_init_fail; - } - - _eina_list_accounting_mp = eina_mempool_add - (choice, "list_accounting", NULL, sizeof(Eina_List_Accounting), - 80); - if (!_eina_list_accounting_mp) { - ERR("ERROR: Mempool for list accounting cannot be allocated in list init."); - eina_mempool_del(_eina_list_mp); - goto on_init_fail; - } -#define EMS(n) eina_magic_string_static_set(n, n ## _STR) - EMS(EINA_MAGIC_LIST); - EMS(EINA_MAGIC_LIST_ITERATOR); - EMS(EINA_MAGIC_LIST_ACCESSOR); - EMS(EINA_MAGIC_LIST_ACCOUNTING); -#undef EMS - - return EINA_TRUE; - - on_init_fail: - eina_log_domain_unregister(_eina_list_log_dom); - _eina_list_log_dom = -1; - return EINA_FALSE; -} - -/** - * @internal - * @brief Shut down the list module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the list module set up by - * eina_list_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_list_shutdown(void) -{ - eina_mempool_del(_eina_list_accounting_mp); - eina_mempool_del(_eina_list_mp); - - eina_log_domain_unregister(_eina_list_log_dom); - _eina_list_log_dom = -1; - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_List_Group List - * - * @brief These functions provide double linked list management. - * - * For more information, you can look at the @ref tutorial_list_page. - * - * @{ - */ - -/** - * @brief Append the given data to the given linked list. - * - * @param list The given list. - * @param data The data to append. - * @return A list pointer. - * - * This function appends @p data to @p list. If @p list is @c NULL, a - * new list is returned. On success, a new list pointer that should be - * used in place of the one given to this function is - * returned. Otherwise, the old pointer is returned. - * - * The following example code demonstrates how to ensure that the - * given data has been successfully appended. - * - * @code - * Eina_List *list = NULL; - * extern void *my_data; - * - * list = eina_list_append(list, my_data); - * if (eina_error_get()) - * { - * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); - * exit(-1); - * } - * @endcode - */ -EAPI Eina_List *eina_list_append(Eina_List * list, const void *data) -{ - Eina_List *l, *new_l; - - eina_error_set(0); - new_l = _eina_list_mempool_list_new(list); - if (!new_l) - return list; - - new_l->next = NULL; - new_l->data = (void *) data; - if (!list) { - new_l->prev = NULL; - return _eina_list_setup_accounting(new_l); - } - - EINA_MAGIC_CHECK_LIST(list, NULL); - - l = list->accounting->last; - list->accounting->last = new_l; - - l->next = new_l; - new_l->prev = l; - - _eina_list_update_accounting(list, new_l); - return list; -} - -/** - * @brief Prepends the given data to the given linked list. - * - * @param list The given list. - * @param data The data to prepend. - * @return A list pointer. - * - * This function prepends @p data to @p list. If @p list is @c NULL, a - * new list is returned. On success, a new list pointer that should be - * used in place of the one given to this function is - * returned. Otherwise, the old pointer is returned. - * - * The following example code demonstrates how to ensure that the - * given data has been successfully prepended. - * - * Example: - * @code - * Eina_List *list = NULL; - * extern void *my_data; - * - * list = eina_list_prepend(list, my_data); - * if (eina_error_get()) - * { - * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); - * exit(-1); - * } - * @endcode - */ -EAPI Eina_List *eina_list_prepend(Eina_List * list, const void *data) -{ - Eina_List *new_l; - - eina_error_set(0); - new_l = _eina_list_mempool_list_new(list); - if (!new_l) - return list; - - new_l->prev = NULL; - new_l->next = list; - new_l->data = (void *) data; - - if (!list) - return _eina_list_setup_accounting(new_l); - - EINA_MAGIC_CHECK_LIST(list, NULL); - - list->prev = new_l; - - _eina_list_update_accounting(list, new_l); - - return new_l; -} - -/** - * @brief Insert the given data into the given linked list after the specified data. - * - * @param list The given linked list. - * @param data The data to insert. - * @param relative The data to insert after. - * @return A list pointer. - * - * This function inserts @p data to @p list after @p relative. If - * @p relative is not in the list, @p data is appended to the end of - * the list. If @p list is @c NULL, a new list is returned. If there - * are multiple instances of @p relative in the list, @p data is - * inserted after the first instance.On success, a new list pointer - * that should be used in place of the one given to this function is - * returned. Otherwise, the old pointer is returned. - * - * The following example code demonstrates how to ensure that the - * given data has been successfully inserted. - * - * @code - * Eina_List *list = NULL; - * extern void *my_data; - * extern void *relative_member; - * - * list = eina_list_append(list, relative_member); - * if (eina_error_get()) - * { - * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); - * exit(-1); - * } - * list = eina_list_append_relative(list, my_data, relative_member); - * if (eina_error_get()) - * { - * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); - * exit(-1); - * } - * @endcode - */ -EAPI Eina_List *eina_list_append_relative(Eina_List * list, - const void *data, - const void *relative) -{ - Eina_List *l; - void *list_data; - - if (list) - EINA_MAGIC_CHECK_LIST(list, NULL); - - EINA_LIST_FOREACH(list, l, list_data) { - if (list_data == relative) - return eina_list_append_relative_list(list, data, - l); - } - - return eina_list_append(list, data); -} - -/** - * @brief Append a list node to a linked list after the specified member - * - * @param list The given linked list. - * @param data The data to insert. - * @param relative The list node to insert after. - * @return A list pointer. - * - * This function inserts @p data to @p list after the list node - * @p relative. If @p list or @p relative are @c NULL, @p data is just - * appended to @p list using eina_list_append(). If @p list is - * @c NULL, a new list is returned. If there are multiple instances - * of @p relative in the list, @p data is inserted after the first - * instance. On success, a new list pointer that should be used in - * place of the one given to this function is returned. Otherwise, the - * old pointer is returned. - */ -EAPI Eina_List *eina_list_append_relative_list(Eina_List * list, - const void *data, - Eina_List * relative) -{ - Eina_List *new_l; - - if ((!list) || (!relative)) - return eina_list_append(list, data); - - eina_error_set(0); - new_l = _eina_list_mempool_list_new(list); - if (!new_l) - return list; - - EINA_MAGIC_CHECK_LIST(relative, NULL); - new_l->next = relative->next; - new_l->data = (void *) data; - - if (relative->next) - relative->next->prev = new_l; - - relative->next = new_l; - new_l->prev = relative; - - _eina_list_update_accounting(list, new_l); - - if (!new_l->next) - new_l->accounting->last = new_l; - - return list; -} - -/** - * @brief Prepend a data pointer to a linked list before the specified member - * - * @param list The given linked list. - * @param data The data to insert. - * @param relative The data to insert before. - * @return A list pointer. - * - * This function inserts @p data to @p list before @p relative. If - * @p relative is not in the list, @p data is prepended to the list - * with eina_list_prepend(). If @p list is @c NULL, a new list is - * returned. If there are multiple instances of @p relative in the - * list, @p data is inserted before the first instance. On success, a - * new list pointer that should be used in place of the one given to - * this function is returned. Otherwise, the old pointer is returned. - * - * The following code example demonstrates how to ensure that the - * given data has been successfully inserted. - * - * @code - * Eina_List *list = NULL; - * extern void *my_data; - * extern void *relative_member; - * - * list = eina_list_append(list, relative_member); - * if (eina_error_get_error()) - * { - * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); - * exit(-1); - * } - * list = eina_list_prepend_relative(list, my_data, relative_member); - * if (eina_error_get()) - * { - * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n"); - * exit(-1); - * } - * @endcode - */ -EAPI Eina_List *eina_list_prepend_relative(Eina_List * list, - const void *data, - const void *relative) -{ - Eina_List *l; - void *list_data; - - if (list) - EINA_MAGIC_CHECK_LIST(list, NULL); - - EINA_LIST_FOREACH(list, l, list_data) { - if (list_data == relative) - return eina_list_prepend_relative_list(list, data, - l); - } - return eina_list_prepend(list, data); -} - -/** - * @brief Prepend a list node to a linked list before the specified member - * - * @param list The given linked list. - * @param data The data to insert. - * @param relative The list node to insert before. - * @return A list pointer. - * - * This function inserts @p data to @p list before the list node - * @p relative. If @p list or @p relative are @c NULL, @p data is just - * prepended to @p list using eina_list_prepend(). If @p list is - * @c NULL, a new list is returned. If there are multiple instances - * of @p relative in the list, @p data is inserted before the first - * instance. On success, a new list pointer that should be used in - * place of the one given to this function is returned. Otherwise, the - * old pointer is returned. - */ -EAPI Eina_List *eina_list_prepend_relative_list(Eina_List * list, - const void *data, - Eina_List * relative) -{ - Eina_List *new_l; - - if ((!list) || (!relative)) - return eina_list_prepend(list, data); - - eina_error_set(0); - new_l = _eina_list_mempool_list_new(list); - if (!new_l) - return list; - - EINA_MAGIC_CHECK_LIST(relative, NULL); - - new_l->prev = relative->prev; - new_l->next = relative; - new_l->data = (void *) data; - - if (relative->prev) - relative->prev->next = new_l; - - relative->prev = new_l; - - _eina_list_update_accounting(list, new_l); - - if (new_l->prev) - return list; - - return new_l; -} - -/** - * @brief Insert a new node into a sorted list. - * - * @param list The given linked list, @b must be sorted. - * @param func The function called for the sort. - * @param data The data to insert sorted. - * @return A list pointer. - * - * This function inserts values into a linked list assuming it was - * sorted and the result will be sorted. If @p list is @c NULLL, a new - * list is returned. On success, a new list pointer that should be - * used in place of the one given to this function is - * returned. Otherwise, the old pointer is returned. See eina_error_get(). - * - * @note O(log2(n)) comparisons (calls to @p func) average/worst case - * performance as it uses eina_list_search_sorted_near_list() and thus - * is bounded to that. As said in eina_list_search_sorted_near_list(), - * lists do not have O(1) access time, so walking to the correct node - * can be costly, consider worst case to be almost O(n) pointer - * dereference (list walk). - */ -EAPI Eina_List *eina_list_sorted_insert(Eina_List * list, - Eina_Compare_Cb func, - const void *data) -{ - Eina_List *lnear; - int cmp; - - if (!list) - return eina_list_append(NULL, data); - - lnear = eina_list_search_sorted_near_list(list, func, data, &cmp); - if (cmp < 0) - return eina_list_append_relative_list(list, data, lnear); - else - return eina_list_prepend_relative_list(list, data, lnear); -} - -/** - * @brief Remove the first instance of the specified data from the given list. - * - * @param list The given list. - * @param data The specified data. - * @return A list pointer. - * - * This function removes the first instance of @p data from - * @p list. If the specified data is not in the given list (tihis - * include the case where @p data is @c NULL), nothing is done. If - * @p list is @c NULL, @c NULL is returned, otherwise a new list - * pointer that should be used in place of the one passed to this - * function. - */ -EAPI Eina_List *eina_list_remove(Eina_List * list, const void *data) -{ - Eina_List *l; - - if (list) - EINA_MAGIC_CHECK_LIST(list, NULL); - - l = eina_list_data_find_list(list, data); - return eina_list_remove_list(list, l); -} - -/** - * @brief Remove the specified data. - * - * @param list The given linked list. - * @param remove_list The list node which is to be removed. - * @return A list pointer. - * - * This function removes the list node @p remove_list from @p list and - * frees the list node structure @p remove_list. If @p list is - * @c NULL, this function returns @c NULL. If @p remove_list is - * @c NULL, it returns @p list, otherwise, a new list pointer that - * should be used in place of the one passed to this function. - * - * The following code gives an example (notice we use EINA_LIST_FOREACH - * instead of EINA_LIST_FOREACH_SAFE because we stop the loop after - * removing the current node). - * - * @code - * extern Eina_List *list; - * Eina_List *l; - * extern void *my_data; - * void *data - * - * EINA_LIST_FOREACH(list, l, data) - * { - * if (data == my_data) - * { - * list = eina_list_remove_list(list, l); - * break; - * } - * } - * @endcode - */ -EAPI Eina_List *eina_list_remove_list(Eina_List * list, - Eina_List * remove_list) -{ - Eina_List *return_l; - - if (!list) - return NULL; - - if (!remove_list) - return list; - - EINA_MAGIC_CHECK_LIST(remove_list, NULL); - - if (remove_list->next) - remove_list->next->prev = remove_list->prev; - - if (remove_list->prev) { - remove_list->prev->next = remove_list->next; - return_l = list; - } else - return_l = remove_list->next; - - if (remove_list == remove_list->accounting->last) { - EINA_MAGIC_CHECK_LIST(list, NULL); - list->accounting->last = remove_list->prev; - } - - _eina_list_mempool_list_free(remove_list); - return return_l; -} - -/** - * @brief Free an entire list and all the nodes, ignoring the data contained. - - * @param list The list to free - * @return A NULL pointer - * - * This function frees all the nodes of @p list. It does not free the - * data of the nodes. To free them, use #EINA_LIST_FREE. - */ -EAPI Eina_List *eina_list_free(Eina_List * list) -{ - Eina_List *l, *free_l; - - if (!list) - return NULL; - - EINA_MAGIC_CHECK_LIST(list, NULL); - - for (l = list; l;) { - free_l = l; - l = l->next; - - _eina_list_mempool_list_free(free_l); - } - - return NULL; -} - -/** - * @brief Move the specified data to the head of the list. - * - * @param list The list handle to move the data. - * @param move_list The list node to move. - * @return A new list handle to replace the old one - * - * This function move @p move_list to the front of @p list. If list is - * @c NULL, @c NULL is returned. If @p move_list is @c NULL, - * @p list is returned. Otherwise, a new list pointer that should be - * used in place of the one passed to this function. - * - * Example: - * @code - * extern Eina_List *list; - * Eina_List *l; - * extern void *my_data; - * void *data; - * - * EINA_LIST_FOREACH(list, l, data) - * { - * if (data == my_data) - * { - * list = eina_list_promote_list(list, l); - * break; - * } - * } - * @endcode - */ -EAPI Eina_List *eina_list_promote_list(Eina_List * list, - Eina_List * move_list) -{ - if (!list) - return NULL; - - if (!move_list) { - return list; /* Promoting head to be head. */ - - } - - if (move_list == list) - return list; - - if (move_list->next == list) - return move_list; - - EINA_MAGIC_CHECK_LIST(list, NULL); - EINA_MAGIC_CHECK_LIST(move_list, NULL); - - /* Remove the promoted item from the list. */ - if (!move_list->prev) - move_list->next->prev = NULL; - else { - move_list->prev->next = move_list->next; - if (move_list == list->accounting->last) - list->accounting->last = move_list->prev; - else - move_list->next->prev = move_list->prev; - } - - /* Add the promoted item in the list. */ - move_list->next = list; - move_list->prev = list->prev; - list->prev = move_list; - if (move_list->prev) - move_list->prev->next = move_list; - - return move_list; -} - -/** - * @brief Move the specified data to the tail of the list. - * - * @param list The list handle to move the data. - * @param move_list The list node to move. - * @return A new list handle to replace the old one - * - * This function move @p move_list to the back of @p list. If list is - * @c NULL, @c NULL is returned. If @p move_list is @c NULL, - * @p list is returned. Otherwise, a new list pointer that should be - * used in place of the one passed to this function. - * - * Example: - * @code - * extern Eina_List *list; - * Eina_List *l; - * extern void *my_data; - * void *data; - * - * EINA_LIST_FOREACH(list, l, data) - * { - * if (data == my_data) - * { - * list = eina_list_demote_list(list, l); - * break; - * } - * } - * @endcode - */ -EAPI Eina_List *eina_list_demote_list(Eina_List * list, - Eina_List * move_list) -{ - if (!list) - return NULL; - - if (!move_list) { - return list; /* Demoting tail to be tail. */ - - } - - if (move_list == list->accounting->last) - return list; - - EINA_MAGIC_CHECK_LIST(list, NULL); - EINA_MAGIC_CHECK_LIST(move_list, NULL); - - /* Update pointer list if necessary. */ - if (list == move_list) { - list = move_list->next; /* Remove the demoted item from the list. */ - - } - - if (move_list->prev) - move_list->prev->next = move_list->next; - - move_list->next->prev = move_list->prev; - /* Add the demoted item in the list. */ - move_list->prev = list->accounting->last; - move_list->prev->next = move_list; - move_list->next = NULL; - list->accounting->last = move_list; - - return list; -} - -/** - * @brief Find a member of a list and return the member. - * - * @param list The list to search for a data. - * @param data The data pointer to find in the list. - * @return The found member data pointer if foun, @c NULL otherwise. - * - * This function searches in @p list from beginning to end for the - * first member whose data pointer is @p data. If it is found, @p data - * will be returned, otherwise NULL will be returned. - * - * Example: - * @code - * extern Eina_List *list; - * extern void *my_data; - * - * if (eina_list_data_find(list, my_data) == my_data) - * { - * printf("Found member %p\n", my_data); - * } - * @endcode - */ -EAPI void *eina_list_data_find(const Eina_List * list, const void *data) -{ - if (eina_list_data_find_list(list, data)) - return (void *) data; - - return NULL; -} - -/** - * @brief Find a member of a list and return the list node containing that member. - * - * @param list The list to search for data. - * @param data The data pointer to find in the list. - * @return The found members list node on success, @c NULL otherwise. - * - * This function searches in @p list from beginning to end for the - * first member whose data pointer is @p data. If it is found, the - * list node containing the specified member is returned, otherwise - * @c NULL is returned. - */ -EAPI Eina_List *eina_list_data_find_list(const Eina_List * list, - const void *data) -{ - const Eina_List *l; - void *list_data; - - if (list) - EINA_MAGIC_CHECK_LIST(list, NULL); - - EINA_LIST_FOREACH(list, l, list_data) { - if (list_data == data) - return (Eina_List *) l; - } - - return NULL; -} - -/** - * @brief Get the nth member's data pointer in a list. - * - * @param list The list to get the specified member number from. - * @param n The number of the element (0 being the first). - * @return The data pointer stored in the specified element. - * - * This function returns the data pointer of element number @p n, in - * the @p list. The first element in the array is element number 0. If - * the element number @p n does not exist, @c NULL is - * returned. Otherwise, the data of the found element is returned. - */ -EAPI void *eina_list_nth(const Eina_List * list, unsigned int n) -{ - Eina_List *l; - - l = eina_list_nth_list(list, n); - return l ? l->data : NULL; -} - -/** - * @brief Get the nth member's list node in a list. - * - * @param list The list to get the specfied member number from. - * @param n The number of the element (0 being the first). - * @return The list node stored in the numbered element. - * - * This function returns the list node of element number @p n, in - * @ list. The first element in the array is element number 0. If the - * element number @p n does not exist or @p list is @c NULL or @p n is - * greater than the count of elements in @p list minus 1, @c NULL is - * returned. Otherwise the list node stored in the numbered element is - * returned. - */ -EAPI Eina_List *eina_list_nth_list(const Eina_List * list, unsigned int n) -{ - const Eina_List *l; - unsigned int i; - - if (list) - EINA_MAGIC_CHECK_LIST(list, NULL); - - /* check for non-existing nodes */ - if ((!list) || (n > (list->accounting->count - 1))) - return NULL; - - /* if the node is in the 2nd half of the list, search from the end - * else, search from the beginning. - */ - if (n > (list->accounting->count / 2)) - for (i = list->accounting->count - 1, - l = list->accounting->last; l; l = l->prev, i--) { - if (i == n) - return (Eina_List *) l; - } else - for (i = 0, l = list; l; l = l->next, i++) { - if (i == n) - return (Eina_List *) l; - } - - abort(); -} - -/** - * @brief Reverse all the elements in the list. - * - * @param list The list to reverse. - * @return The list head after it has been reversed. - * - * This function reverses the order of all elements in @p list, so the - * last member is now first, and so on. If @p list is @c NULL, this - * functon returns @c NULL. - * - * @note @b in-place: this will change the given list, so you should - * now point to the new list head that is returned by this function. - * - * @see eina_list_reverse_clone() - * @see eina_list_iterator_reversed_new() - */ -EAPI Eina_List *eina_list_reverse(Eina_List * list) -{ - Eina_List *l1, *l2; - - if (!list) - return NULL; - - EINA_MAGIC_CHECK_LIST(list, NULL); - - l1 = list; - l2 = list->accounting->last; - while (l1 != l2) { - void *data; - - data = l1->data; - l1->data = l2->data; - l2->data = data; - l1 = l1->next; - if (l1 == l2) - break; - - l2 = l2->prev; - } - - return list; -} - -/** - * @brief Clone (copy) all the elements in the list in reverse order. - * - * @param list The list to reverse. - * @return The new list that has been reversed. - * - * This function reverses the order of all elements in @p list, so the - * last member is now first, and so on. If @p list is @c NULL, this - * functon returns @c NULL. This returns a copy of the given list. - * - * @note @b copy: this will copy the list and you should then - * eina_list_free() when it is not required anymore. - * - * @see eina_list_reverse() - * @see eina_list_clone() - */ -EAPI Eina_List *eina_list_reverse_clone(const Eina_List * list) -{ - const Eina_List *l; - Eina_List *lclone; - void *data; - - if (!list) - return NULL; - - EINA_MAGIC_CHECK_LIST(list, NULL); - - lclone = NULL; - EINA_LIST_FOREACH(list, l, data) - lclone = eina_list_prepend(lclone, data); - - return lclone; -} - -/** - * @brief Clone (copy) all the elements in the list in exact order. - * - * @param list The list to clone. - * @return The new list that has been cloned. - * - * This function clone in order of all elements in @p list. If @p list - * is @c NULL, this functon returns @c NULL. This returns a copy of - * the given list. - * - * @note @b copy: this will copy the list and you should then - * eina_list_free() when it is not required anymore. - * - * @see eina_list_reverse_clone() - */ -EAPI Eina_List *eina_list_clone(const Eina_List * list) -{ - const Eina_List *l; - Eina_List *lclone; - void *data; - - if (!list) - return NULL; - - EINA_MAGIC_CHECK_LIST(list, NULL); - - lclone = NULL; - EINA_LIST_FOREACH(list, l, data) - lclone = eina_list_append(lclone, data); - - return lclone; -} - -/** - * @brief Sort a list according to the ordering func will return. - * - * @param list The list handle to sort. - * @param size The length of the list to sort. - * @param func A function pointer that can handle comparing the list data - * nodes. - * @return the new head of list. - * - * This function sorts @p list. @p size if the number of the first - * element to sort. If @p size is 0 or greater than the number of - * elements in @p list, all the elements are sorted. @p func is used to - * compare two elements of @p list. If @p list or @p func are @c NULL, - * this function returns @c NULL. - * - * @note @b in-place: this will change the given list, so you should - * now point to the new list head that is returned by this function. - * - * @note worst case is O(n * log2(n)) comparisons (calls to func()), - * O(n) comparisons average case. That means that for 1,000,000 list - * elements, sort will usually do 1,000,000 comparisons, but may do up - * to 20,000,000. - * - * Example: - * @code - * int - * sort_cb(const void *d1, const void *d2) - * { - * const char *txt = NULL; - * const char *txt2 = NULL; - * - * if(!d1) return(1); - * if(!d2) return(-1); - * - * return(strcmp((const char*)d1, (const char*)d2)); - * } - * extern Eina_List *list; - * - * list = eina_list_sort(list, eina_list_count(list), sort_cb); - * @endcode - */ -EAPI Eina_List *eina_list_sort(Eina_List * list, unsigned int size, - Eina_Compare_Cb func) -{ - unsigned int i = 0; - unsigned int n = 0; - Eina_List *tail = list; - Eina_List *unsort = NULL; - Eina_List *stack[EINA_LIST_SORT_STACK_SIZE]; - - EINA_SAFETY_ON_NULL_RETURN_VAL(func, list); - if (!list) - return NULL; - - EINA_MAGIC_CHECK_LIST(list, NULL); - - /* if the caller specified an invalid size, sort the whole list */ - if ((size == 0) || (size > list->accounting->count)) - size = list->accounting->count; - - if (size != list->accounting->count) { - unsort = eina_list_nth_list(list, size); - if (unsort) - unsort->prev->next = NULL; - } - - while (tail) { - unsigned int idx, tmp; - - Eina_List *a = tail; - Eina_List *b = tail->next; - - if (!b) { - stack[i++] = a; - break; - } - - tail = b->next; - - if (func(a->data, b->data) < 0) - ((stack[i++] = a)->next = b)->next = 0; - else - ((stack[i++] = b)->next = a)->next = 0; - - tmp = n++; - for (idx = n ^ tmp; idx &= idx - 1; i--) - stack[i - 2] = - eina_list_sort_merge(stack[i - 2], - stack[i - 1], func); - } - - while (i-- > 1) - stack[i - 1] = - eina_list_sort_merge(stack[i - 1], stack[i], func); - - list = stack[0]; - tail = eina_list_sort_rebuild_prev(list); - - if (unsort) { - tail->next = unsort; - unsort->prev = tail; - } else - list->accounting->last = tail; - - return list; -} - -/** - * @brief Merge two list. - * - * @param left Head list to merge. - * @param right Tail list to merge. - * @return A new merged list. - * - * This function put right at the end of left and return the head. - * - * Both left and right does not exist anymore after the merge. - * - * @note merge cost is O(n), being @b n the size of the smallest - * list. This is due the need to fix accounting of that segment, - * making count and last access O(1). - */ -EAPI Eina_List *eina_list_merge(Eina_List * left, Eina_List * right) -{ - unsigned int n_left, n_right; - - if (!left) - return right; - - if (!right) - return left; - - left->accounting->last->next = right; - right->prev = left->accounting->last; - - n_left = left->accounting->count; - n_right = right->accounting->count; - - if (n_left >= n_right) { - Eina_List *itr = right; - left->accounting->last = right->accounting->last; - left->accounting->count += n_right; - - _eina_list_mempool_accounting_free(right->accounting); - - do { - itr->accounting = left->accounting; - itr = itr->next; - } - while (itr); - } else { - Eina_List *itr = left->accounting->last; - right->accounting->count += n_left; - - _eina_list_mempool_accounting_free(left->accounting); - - do { - itr->accounting = right->accounting; - itr = itr->prev; - } - while (itr); - } - - return left; -} - - -/** - * @brief Split a list into 2 lists. - * - * @param list List to split. - * @param relative The list will be split after @p relative. - * @param right The head of the new right list. - * @return The new left list - * - * This function split @p list into two lists ( left and right ) after the node @p relative. @p Relative - * will become the last node of the left list. If @p list or @p right are NULL list is returns. - * If @p relative is NULL right is set to @p list and NULL is returns. - * If @p relative is the last node of @p list list is returns and @p right is set to NULL. - * - * list does not exist anymore after the split. - * - */ -EAPI Eina_List *eina_list_split_list(Eina_List * list, - Eina_List * relative, - Eina_List ** right) -{ - Eina_List *next; - Eina_List *itr; - - if (!right) - return list; - - *right = NULL; - - if (!list) - return NULL; - - if (!relative) { - *right = list; - return NULL; - } - - if (relative == eina_list_last(list)) - return list; - - next = eina_list_next(relative); - next->prev = NULL; - next->accounting = _eina_list_mempool_accounting_new(next); - next->accounting->last = list->accounting->last; - *right = next; - - itr = next; - do { - itr->accounting = next->accounting; - next->accounting->count++; - itr = itr->next; - } - while (itr); - - relative->next = NULL; - list->accounting->last = relative; - list->accounting->count = - list->accounting->count - next->accounting->count; - - return list; -} - -/** - * @brief Merge two sorted list according to the ordering func will return. - * - * @param left First list to merge. - * @param right Second list to merge. - * @param func A function pointer that can handle comparing the list data - * nodes. - * @return A new sorted list. - * - * This function compare the head of @p left and @p right, and choose the - * smallest one to be head of the returned list. It will continue this process - * for all entry of both list. - * - * Both left and right does not exist anymore after the merge. - * If @p func is NULL, it will return NULL. - * - * Example: - * @code - * int - * sort_cb(void *d1, void *d2) - * { - * const char *txt = NULL; - * const char *txt2 = NULL; - * - * if(!d1) return(1); - * if(!d2) return(-1); - * - * return(strcmp((const char*)d1, (const char*)d2)); - * } - * extern Eina_List *sorted1; - * extern Eina_List *sorted2; - * - * list = eina_list_sorted_merge(sorted1, sorted2, sort_cb); - * @endcode - */ -EAPI Eina_List *eina_list_sorted_merge(Eina_List * left, Eina_List * right, - Eina_Compare_Cb func) -{ - Eina_List *ret; - Eina_List *current; - - EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL); - - if (!left) - return right; - - if (!right) - return left; - - if (func(left->data, right->data) < 0) { - ret = left; - current = left; - left = left->next; - ret->accounting->count += right->accounting->count; - - _eina_list_mempool_accounting_free(right->accounting); - } else { - ret = right; - current = right; - right = right->next; - ret->accounting->count += left->accounting->count; - - _eina_list_mempool_accounting_free(left->accounting); - } - - while (left && right) { - if (func(left->data, right->data) < 0) { - current->next = left; - left->prev = current; - left = left->next; - } else { - current->next = right; - right->prev = current; - right = right->next; - } - - current = current->next; - current->accounting = ret->accounting; - } - - if (left) { - current->next = left; - left->prev = current; - current->accounting = ret->accounting; - } - - if (right) { - current->next = right; - right->prev = current; - current->accounting = ret->accounting; - } - - while (current->next) { - current = current->next; - current->accounting = ret->accounting; - } - - ret->accounting->last = current; - - return ret; -} - -/** - * @brief Returns node nearest to data is in the sorted list. - * - * @param list The list to search for data, @b must be sorted. - * @param func A function pointer that can handle comparing the list data nodes. - * @param data reference value to search. - * @param result_cmp if provided returns the result of - * func(node->data, data) node being the last (returned) node. If node - * was found (exact match), then it is 0. If returned node is smaller - * than requested data, it is less than 0 and if it's bigger it's - * greater than 0. It is the last value returned by func(). - * @return the nearest node, NULL if not found. - * - * This can be used to check if some value is inside the list and get - * the nearest container node in this case. It should be used when list is - * known to be sorted as it will do binary search for results. - * - * Example: imagine user gives a string, you check if it's in the list - * before duplicating its contents, otherwise you want to insert it - * sorted. In this case you get the result of this function and either - * append or prepend the value. - * - * @note O(log2(n)) average/worst case performance, for 1,000,000 - * elements it will do a maximum of 20 comparisons. This is much - * faster than the 1,000,000 comparisons made naively walking the list - * from head to tail, so depending on the number of searches and - * insertions, it may be worth to eina_list_sort() the list and do the - * searches later. As lists do not have O(1) access time, walking to - * the correct node can be costly, consider worst case to be almost - * O(n) pointer dereference (list walk). - * - * @see eina_list_search_sorted_list() - * @see eina_list_sort() - * @see eina_list_sorted_merge() - */ -EAPI Eina_List *eina_list_search_sorted_near_list(const Eina_List * list, - Eina_Compare_Cb func, - const void *data, - int *result_cmp) -{ - const Eina_List *ct; - unsigned int inf, sup, cur; - int cmp; - - if (!list) { - if (result_cmp) - *result_cmp = 0; - - return NULL; - } - - if (list->accounting->count == 1) { - if (result_cmp) - *result_cmp = func(list->data, data); - - return (Eina_List *) list; - } - - /* list walk is expensive, do quick check: tail */ - ct = list->accounting->last; - cmp = func(ct->data, data); - if (cmp <= 0) - goto end; - - /* list walk is expensive, do quick check: head */ - ct = list; - cmp = func(ct->data, data); - if (cmp >= 0) - goto end; - - /* inclusive bounds */ - inf = 1; - sup = list->accounting->count - 2; - cur = 1; - ct = list->next; - - /* no loop, just compare if comparison value is important to caller */ - if (inf > sup) { - if (result_cmp) - cmp = func(ct->data, data); - - goto end; - } - - while (inf <= sup) { - unsigned int tmp = cur; - cur = inf + ((sup - inf) >> 1); - if (tmp < cur) - for (; tmp != cur; tmp++, ct = ct->next); - else if (tmp > cur) - for (; tmp != cur; tmp--, ct = ct->prev); - - cmp = func(ct->data, data); - if (cmp == 0) - break; - else if (cmp < 0) - inf = cur + 1; - else if (cmp > 0) { - if (cur > 0) - sup = cur - 1; - else - break; - } else - break; - } - - end: - if (result_cmp) - *result_cmp = cmp; - - return (Eina_List *) ct; -} - -/** - * @brief Returns node if data is in the sorted list. - * - * @param list The list to search for data, @b must be sorted. - * @param func A function pointer that can handle comparing the list data nodes. - * @param data reference value to search. - * @return the node if func(node->data, data) == 0, NULL if not found. - * - * This can be used to check if some value is inside the list and get - * the container node in this case. It should be used when list is - * known to be sorted as it will do binary search for results. - * - * Example: imagine user gives a string, you check if it's in the list - * before duplicating its contents. - * - * @note O(log2(n)) average/worst case performance, for 1,000,000 - * elements it will do a maximum of 20 comparisons. This is much - * faster than the 1,000,000 comparisons made by - * eina_list_search_unsorted_list(), so depending on the number of - * searches and insertions, it may be worth to eina_list_sort() the - * list and do the searches later. As said in - * eina_list_search_sorted_near_list(), lists do not have O(1) access - * time, so walking to the correct node can be costly, consider worst - * case to be almost O(n) pointer dereference (list walk). - * - * @see eina_list_search_sorted() - * @see eina_list_sort() - * @see eina_list_sorted_merge() - * @see eina_list_search_unsorted_list() - * @see eina_list_search_sorted_near_list() - */ -EAPI Eina_List *eina_list_search_sorted_list(const Eina_List * list, - Eina_Compare_Cb func, - const void *data) -{ - Eina_List *lnear; - int cmp; - - lnear = eina_list_search_sorted_near_list(list, func, data, &cmp); - if (!lnear) - return NULL; - - if (cmp == 0) - return lnear; - - return NULL; -} - - -/** - * @brief Returns node data if it is in the sorted list. - * - * @param list The list to search for data, @b must be sorted. - * @param func A function pointer that can handle comparing the list data nodes. - * @param data reference value to search. - * @return the node value (@c node->data) if func(node->data, data) == 0, - * NULL if not found. - * - * This can be used to check if some value is inside the list and get - * the existing instance in this case. It should be used when list is - * known to be sorted as it will do binary search for results. - * - * Example: imagine user gives a string, you check if it's in the list - * before duplicating its contents. - * - * @note O(log2(n)) average/worst case performance, for 1,000,000 - * elements it will do a maximum of 20 comparisons. This is much - * faster than the 1,000,000 comparisons made by - * eina_list_search_unsorted(), so depending on the number of - * searches and insertions, it may be worth to eina_list_sort() the - * list and do the searches later. As said in - * eina_list_search_sorted_near_list(), lists do not have O(1) access - * time, so walking to the correct node can be costly, consider worst - * case to be almost O(n) pointer dereference (list walk). - * - * @see eina_list_search_sorted_list() - * @see eina_list_sort() - * @see eina_list_sorted_merge() - * @see eina_list_search_unsorted_list() - */ -EAPI void *eina_list_search_sorted(const Eina_List * list, - Eina_Compare_Cb func, const void *data) -{ - return - eina_list_data_get(eina_list_search_sorted_list - (list, func, data)); -} - -/** - * @brief Returns node if data is in the unsorted list. - * - * @param list The list to search for data, may be unsorted. - * @param func A function pointer that can handle comparing the list data nodes. - * @param data reference value to search. - * @return the node if func(node->data, data) == 0, NULL if not found. - * - * This can be used to check if some value is inside the list and get - * the container node in this case. - * - * Example: imagine user gives a string, you check if it's in the list - * before duplicating its contents. - * - * @note this is expensive and may walk the whole list, it's order-N, - * that is for 1,000,000 elements list it may walk and compare - * 1,000,000 nodes. - * - * @see eina_list_search_sorted_list() - * @see eina_list_search_unsorted() - */ -EAPI Eina_List *eina_list_search_unsorted_list(const Eina_List * list, - Eina_Compare_Cb func, - const void *data) -{ - const Eina_List *l; - void *d; - - EINA_LIST_FOREACH(list, l, d) { - if (!func(d, data)) - return (Eina_List *) l; - } - return NULL; -} - -/** - * @brief Returns node data if it is in the unsorted list. - * - * @param list The list to search for data, may be unsorted. - * @param func A function pointer that can handle comparing the list data nodes. - * @param data reference value to search. - * @return the node value (@c node->data) if func(node->data, data) == 0, - * NULL if not found. - * - * This can be used to check if some value is inside the list and get - * the existing instance in this case. - * - * Example: imagine user gives a string, you check if it's in the list - * before duplicating its contents. - * - * @note this is expensive and may walk the whole list, it's order-N, - * that is for 1,000,000 elements list it may walk and compare - * 1,000,000 nodes. - * - * @see eina_list_search_sorted() - * @see eina_list_search_unsorted_list() - */ -EAPI void *eina_list_search_unsorted(const Eina_List * list, - Eina_Compare_Cb func, - const void *data) -{ - return - eina_list_data_get(eina_list_search_unsorted_list - (list, func, data)); -} - - -/** - * @brief Returned a new iterator associated to a list. - * - * @param list The list. - * @return A new iterator. - * - * This function returns a newly allocated iterator associated to @p - * list. If @p list is @c NULL or the count member of @p list is less - * or equal than 0, this function still returns a valid iterator that - * will always return false on eina_iterator_next(), thus keeping API - * sane. - * - * If the memory can not be allocated, NULL is returned and - * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is - * returned. - * - * @warning if the list structure changes then the iterator becomes - * invalid! That is, if you add or remove nodes this iterator - * behavior is undefined and your program may crash! - */ -EAPI Eina_Iterator *eina_list_iterator_new(const Eina_List * list) -{ - Eina_Iterator_List *it; - - eina_error_set(0); - it = calloc(1, sizeof(Eina_Iterator_List)); - if (!it) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - EINA_MAGIC_SET(it, EINA_MAGIC_LIST_ITERATOR); - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - it->head = list; - it->current = list; - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(eina_list_iterator_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER(eina_list_iterator_get_container); - it->iterator.free = FUNC_ITERATOR_FREE(eina_list_iterator_free); - - return &it->iterator; -} - -/** - * @brief Returned a new reversed iterator associated to a list. - * - * @param list The list. - * @return A new iterator. - * - * This function returns a newly allocated iterator associated to @p - * list. If @p list is @c NULL or the count member of @p list is less - * or equal than 0, this function still returns a valid iterator that - * will always return false on eina_iterator_next(), thus keeping API - * sane. - * - * Unlike eina_list_iterator_new(), this will walk the list backwards. - * - * If the memory can not be allocated, NULL is returned and - * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is - * returned. - * - * @warning if the list structure changes then the iterator becomes - * invalid! That is, if you add or remove nodes this iterator - * behavior is undefined and your program may crash! - */ -EAPI Eina_Iterator *eina_list_iterator_reversed_new(const Eina_List * list) -{ - Eina_Iterator_List *it; - - eina_error_set(0); - it = calloc(1, sizeof(Eina_Iterator_List)); - if (!it) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - EINA_MAGIC_SET(it, EINA_MAGIC_LIST_ITERATOR); - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - it->head = eina_list_last(list); - it->current = it->head; - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(eina_list_iterator_prev); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER(eina_list_iterator_get_container); - it->iterator.free = FUNC_ITERATOR_FREE(eina_list_iterator_free); - - return &it->iterator; -} - -/** - * @brief Returned a new accessor associated to a list. - * - * @param list The list. - * @return A new accessor. - * - * This function returns a newly allocated accessor associated to - * @p list. If @p list is @c NULL or the count member of @p list is - * less or equal than 0, this function returns NULL. If the memory can - * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is - * set. Otherwise, a valid accessor is returned. - */ -EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List * list) -{ - Eina_Accessor_List *ac; - - eina_error_set(0); - ac = calloc(1, sizeof(Eina_Accessor_List)); - if (!ac) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - EINA_MAGIC_SET(ac, EINA_MAGIC_LIST_ACCESSOR); - EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR); - - ac->head = list; - ac->current = list; - ac->index = 0; - - ac->accessor.version = EINA_ACCESSOR_VERSION; - ac->accessor.get_at = - FUNC_ACCESSOR_GET_AT(eina_list_accessor_get_at); - ac->accessor.get_container = - FUNC_ACCESSOR_GET_CONTAINER(eina_list_accessor_get_container); - ac->accessor.free = FUNC_ACCESSOR_FREE(eina_list_accessor_free); - - return &ac->accessor; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_log.c b/tests/suite/ecore/src/lib/eina_log.c deleted file mode 100644 index 5b5aca839f..0000000000 --- a/tests/suite/ecore/src/lib/eina_log.c +++ /dev/null @@ -1,2375 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2009 Jorge Luis Zapata Muga, Cedric Bail, Andre Dieb - * Martins - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - - -/** - * @page tutorial_log_page Log Tutorial - * - * @section tutorial_log_introduction Introduction - * - * The Eina Log module provides logging facilities for libraries and - * applications. It provides colored logging, basic logging levels (error, - * warning, debug, info, critical) and loggers - called logging domains - - * which will be covered on next sections. - * - * @section tutorial_log_basic_usage Basic Usage - * - * Log messages can be displayed using the following macros: - * - * @li EINA_LOG_ERR(), - * @li EINA_LOG_INFO(), - * @li EINA_LOG_WARN(), - * @li EINA_LOG_DBG(). - * - * Here is an example: - * - * @code - * #include - * #include - * - * #include - * - * void test(int i) - * { - * EINA_LOG_DBG("Entering test"); - * - * if (i < 0) - * { - * EINA_LOG_ERR("Argument is negative"); - * return; - * } - * - * EINA_LOG_INFO("argument non negative"); - * - * EINA_LOG_DBG("Exiting test"); - * } - * - * int main(void) - * { - * if (!eina_init()) - * { - * printf("log during the initialization of Eina_Log module\n"); - * return EXIT_FAILURE; - * } - * - * test(-1); - * test(0); - * - * eina_shutdown(); - * - * return EXIT_SUCCESS; - * } - * @endcode - * - * If you compiled Eina without debug mode, execution will yield only one log - * message, which is "argument is negative". - * - * Here we introduce the concept of logging domains (or loggers), which might - * already be familiar to readers. It is basically a way to separate a set of - * log messages into a context (e.g. a module) and provide a way of controlling - * this set as a whole. - * - * For example, suppose you have 3 different modules on your application and you - * want to get logging only from one of them (e.g. create some sort of filter). - * For achieving that, all you need to do is create a logging domain for each - * module so that all logging inside a module can be considered as a whole. - * - * Logging domains are specified by a name, color applied to the name and the - * level. The first two (name and color) are set through code, that is, inside - * your application/module/library. - * - * The level is used for controlling which messages should appear. It - * specifies the lowest level that should be displayed (e.g. a message - * with level 11 being logged on a domain with level set to 10 would be - * displayed, while a message with level 9 wouldn't). - * - * The domain level is set during runtime (in contrast with the name and - * color) through the environment variable EINA_LOG_LEVELS. This variable - * expects a list in the form domain_name1:level1,domain_name2:level2,... . For - * example: - * - * @code - * - * EINA_LOG_LEVELS=mymodule1:5,mymodule2:2,mymodule3:0 ./myapp - * - * @endcode - * - * This line would set mymodule1 level to 5, mymodule2 level to 2 and mymodule3 - * level to 0. - * - * - * There's also a global logger to which EINA_LOG_(ERR, DBG, INFO, CRIT, WARN) - * macros do log on. It is a logger that is created internally by Eina Log with - * an empty name and can be used for general logging (where logging domains do - * not apply). - * - * Since this global logger doesn't have a name, you can't set its level through - * EINA_LOG_LEVELS variable. Here we introduce a second environment variable - * that is a bit more special: EINA_LOG_LEVEL. - * - * This variable specifies the level of the global logging domain and the level - * of domains that haven't been set through EINA_LOG_LEVELS. Here's an example: - * - * @code - * - * EINA_LOG_LEVEL=3 EINA_LOG_LEVELS=module1:10,module3:2 ./myapp - * - * @endcode - * - * Supposing you have modules named "module1", "module2" and "module3", this - * line would result in module1 with level 10, module2 with level 3 and module3 - * with level 2. Note that module2's level wasn't specified, so it's level is - * set to the global level. This way we can easily apply filters to multiple - * domains with only one parameter (EINA_LOG_LEVEL=num). - * - * The global level (EINA_LOG_LEVEL) can also be set through code, using - * eina_log_level_set() function. - * - * - * While developing your libraries or applications, you may notice that - * EINA_LOG_DOM_(ERR, DBG, INFO, CRIT, WARN) macros also print out - * messages from eina itself. Here we introduce another environment variable - * that is a bit more special: EINA_LOG_LEVELS_GLOB. - * - * This variable allows you to disable the logging of any/all code in eina itself. - * This is useful when developing your libraries or applications so that you can - * see your own domain's messages easier without having to sift through a lot of - * internal eina debug messages. Here's an example: - * - * @code - * - * EINA_LOG_LEVEL=3 EINA_LOG_LEVELS_GLOB=eina_*:0 ./myapp - * - * @endcode - * - * This will disable eina_log output from all internal eina code thus allowing - * you to see your own domain messages easier. - * - * @section tutorial_log_advanced_display Advanced usage of print callbacks - * - * The log module allows the user to change the way - * eina_log_print() displays the messages. It suffices to pass to - * eina_log_print_cb_set() the function used to display the - * message. That function must be of type #Eina_Log_Print_Cb. As a - * custom data can be passed to that callback, powerful display - * messages can be displayed. - * - * It is suggested to not use __FILE__, __FUNCTION__ or __LINE__ when - * writing that callback, but when defining macros (like - * EINA_LOG_ERR() and other macros). - * - * Here is an example of custom callback, whose behavior can be - * changed at runtime: - * - * @code - * #include - * #include - * - * #include - * - * #define log(fmt, ...) \ - * eina_log_print(EINA_LOG_LEVEL_ERR, __FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__) - * - * typedef struct _Data Data; - * - * struct _Data - * { - * int to_stderr; - * }; - * - * void print_cb(const Eina_Log_Domain *domain, - * Eina_Log_Level level, - * const char *file, - * const char *fnc, - * int line, - * const char *fmt, - * void *data, - * va_list args) - * { - * Data *d; - * FILE *output; - * char *str; - * - * d = (Data *)data; - * if (d->to_stderr) - * { - * output = stderr; - * str = "stderr"; - * } - * else - * { - * output = stdout; - * str = "stdout"; - * } - * - * fprintf(output, "%s:%s:%s (%d) %s: ", - * domain->domain_str, file, fnc, line, str); - * vfprintf(output, fmt, args); - * putc('\n', output); - * } - * - * void test(Data *data, int i) - * { - * if (i < 0) - * data->to_stderr = 0; - * else - * data->to_stderr = 1; - * - * log("log message..."); - * } - * - * int main(void) - * { - * Data data; - * - * if (!eina_init()) - * { - * printf("log during the initialization of Eina_Log module\n"); - * return EXIT_FAILURE; - * } - * - * eina_log_print_cb_set(print_cb, &data); - * - * test(&data, -1); - * test(&data, 0); - * - * eina_shutdown(); - * - * return EXIT_SUCCESS; - * } - * @endcode - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include - -#ifndef _MSC_VER -#include -#endif - -#ifdef EFL_HAVE_POSIX_THREADS -#include -#endif - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_inlist.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_log.h" - -/* TODO - * + printing logs to stdout or stderr can be implemented - * using a queue, useful for multiple threads printing - * + add a wrapper for assert? - */ - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -#define EINA_LOG_ENV_ABORT "EINA_LOG_ABORT" -#define EINA_LOG_ENV_ABORT_LEVEL "EINA_LOG_ABORT_LEVEL" -#define EINA_LOG_ENV_LEVEL "EINA_LOG_LEVEL" -#define EINA_LOG_ENV_LEVELS "EINA_LOG_LEVELS" -#define EINA_LOG_ENV_LEVELS_GLOB "EINA_LOG_LEVELS_GLOB" -#define EINA_LOG_ENV_COLOR_DISABLE "EINA_LOG_COLOR_DISABLE" -#define EINA_LOG_ENV_FILE_DISABLE "EINA_LOG_FILE_DISABLE" -#define EINA_LOG_ENV_FUNCTION_DISABLE "EINA_LOG_FUNCTION_DISABLE" - - -// Structure for storing domain level settings passed from the command line -// that will be matched with application-defined domains. -typedef struct _Eina_Log_Domain_Level_Pending - Eina_Log_Domain_Level_Pending; -struct _Eina_Log_Domain_Level_Pending { - EINA_INLIST; - unsigned int level; - size_t namelen; - char name[]; -}; - -/* - * List of levels for domains set by the user before the domains are registered, - * updates the domain levels on the first log and clears itself. - */ -static Eina_Inlist *_pending_list = NULL; -static Eina_Inlist *_glob_list = NULL; - -// Disable color flag (can be changed through the env var -// EINA_LOG_ENV_COLOR_DISABLE). -static Eina_Bool _disable_color = EINA_FALSE; -static Eina_Bool _disable_file = EINA_FALSE; -static Eina_Bool _disable_function = EINA_FALSE; -static Eina_Bool _abort_on_critical = EINA_FALSE; -static int _abort_level_on_critical = EINA_LOG_LEVEL_CRITICAL; - -#ifdef EFL_HAVE_THREADS - -static Eina_Bool _threads_enabled = EINA_FALSE; - -#ifdef EFL_HAVE_POSIX_THREADS - -typedef pthread_t Thread; - -static pthread_t _main_thread; - -#define SELF() pthread_self() -#define IS_MAIN(t) pthread_equal(t, _main_thread) -#define IS_OTHER(t) EINA_UNLIKELY(!IS_MAIN(t)) -#define CHECK_MAIN(...) \ - do { \ - if (!IS_MAIN(pthread_self())) { \ - fprintf(stderr, \ - "ERR: not main thread! current=%lu, main=%lu\n", \ - (unsigned long)pthread_self(), \ - (unsigned long)_main_thread); \ - return __VA_ARGS__; \ - } \ - } while (0) - -#ifdef EFL_HAVE_POSIX_THREADS_SPINLOCK - -static pthread_spinlock_t _log_lock; -#define LOG_LOCK() \ - if (_threads_enabled) \ - do { \ - if (0) { \ - fprintf(stderr, "+++LOG LOG_LOCKED! [%s, %lu]\n", \ - __FUNCTION__, (unsigned long)pthread_self()); } \ - if (EINA_UNLIKELY(_threads_enabled)) { \ - pthread_spin_lock(&_log_lock); } \ - } while (0) -#define LOG_UNLOCK() \ - if (_threads_enabled) \ - do { \ - if (EINA_UNLIKELY(_threads_enabled)) { \ - pthread_spin_unlock(&_log_lock); } \ - if (0) { \ - fprintf(stderr, \ - "---LOG LOG_UNLOCKED! [%s, %lu]\n", \ - __FUNCTION__, (unsigned long)pthread_self()); } \ - } while (0) -#define INIT() pthread_spin_init(&_log_lock, PTHREAD_PROCESS_PRIVATE) -#define SHUTDOWN() pthread_spin_destroy(&_log_lock) - -#else /* ! EFL_HAVE_POSIX_THREADS_SPINLOCK */ - -static pthread_mutex_t _log_mutex = PTHREAD_MUTEX_INITIALIZER; -#define LOG_LOCK() if(_threads_enabled) {pthread_mutex_lock(&_log_mutex); } -#define LOG_UNLOCK() if(_threads_enabled) {pthread_mutex_unlock(&_log_mutex); } -#define INIT() (1) -#define SHUTDOWN() do {} while (0) - -#endif /* ! EFL_HAVE_POSIX_THREADS_SPINLOCK */ - -#else /* EFL_HAVE_WIN32_THREADS */ - -typedef DWORD Thread; - -static DWORD _main_thread; - -#define SELF() GetCurrentThreadId() -#define IS_MAIN(t) (t == _main_thread) -#define IS_OTHER(t) EINA_UNLIKELY(!IS_MAIN(t)) -#define CHECK_MAIN(...) \ - do { \ - if (!IS_MAIN(GetCurrentThreadId())) { \ - fprintf(stderr, \ - "ERR: not main thread! current=%lu, main=%lu\n", \ - GetCurrentThreadId(), _main_thread); \ - return __VA_ARGS__; \ - } \ - } while (0) - -static HANDLE _log_mutex = NULL; - -#define LOG_LOCK() if(_threads_enabled) WaitForSingleObject(_log_mutex, INFINITE) -#define LOG_UNLOCK() if(_threads_enabled) ReleaseMutex(_log_mutex) -#define INIT() ((_log_mutex = CreateMutex(NULL, FALSE, NULL)) ? 1 : 0) -#define SHUTDOWN() if (_log_mutex) CloseHandle(_log_mutex) - -#endif /* EFL_HAVE_WIN32_THREADS */ - -#else /* ! EFL_HAVE_THREADS */ - -#define LOG_LOCK() do {} while (0) -#define LOG_UNLOCK() do {} while (0) -#define IS_MAIN(t) (1) -#define IS_OTHER(t) (0) -#define CHECK_MAIN(...) do {} while (0) -#define INIT() (1) -#define SHUTDOWN() do {} while (0) - -#endif /* ! EFL_HAVE_THREADS */ - - -// List of domains registered -static Eina_Log_Domain *_log_domains = NULL; -static unsigned int _log_domains_count = 0; -static size_t _log_domains_allocated = 0; - -// Default function for printing on domains -static Eina_Log_Print_Cb _print_cb = eina_log_print_cb_stderr; -static void *_print_cb_data = NULL; - -#ifdef DEBUG -static Eina_Log_Level _log_level = EINA_LOG_LEVEL_DBG; -#elif DEBUG_CRITICAL -static Eina_Log_Level _log_level = EINA_LOG_LEVEL_CRITICAL; -#else -static Eina_Log_Level _log_level = EINA_LOG_LEVEL_ERR; -#endif - -/* NOTE: if you change this, also change: - * eina_log_print_level_name_get() - * eina_log_print_level_name_color_get() - */ -static const char *_names[] = { - "CRI", - "ERR", - "WRN", - "INF", - "DBG", -}; - -#ifdef _WIN32 -static int eina_log_win32_color_get(const char *domain_str) -{ - char *str; - char *tmp; - char *tmp2; - int code = -1; - int lighted = 0; - int ret = 0; - - str = strdup(domain_str); - if (!str) - return 0; - - /* this should not append */ - if (str[0] != '\033') { - free(str); - return 0; - } - - /* we skip the first char and the [ */ - tmp = tmp2 = str + 2; - while (*tmp != 'm') { - if (*tmp == ';') { - *tmp = '\0'; - code = atol(tmp2); - tmp++; - tmp2 = tmp; - } - - tmp++; - } - *tmp = '\0'; - if (code < 0) - code = atol(tmp2); - else - lighted = atol(tmp2); - - free(str); - - if (code < lighted) { - int c; - - c = code; - code = lighted; - lighted = c; - } - - if (lighted) - ret = FOREGROUND_INTENSITY; - - if (code == 31) - ret |= FOREGROUND_RED; - else if (code == 32) - ret |= FOREGROUND_GREEN; - else if (code == 33) - ret |= FOREGROUND_RED | FOREGROUND_GREEN; - else if (code == 34) - ret |= FOREGROUND_BLUE; - else if (code == 36) - ret |= FOREGROUND_GREEN | FOREGROUND_BLUE; - else if (code == 37) - ret |= FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; - - return ret; -} -#endif - -static inline void -eina_log_print_level_name_get(int level, const char **p_name) -{ - static char buf[4]; - /* NOTE: if you change this, also change - * eina_log_print_level_name_color_get() - * eina_log_level_name_get() (at eina_inline_log.x) - */ - if (EINA_UNLIKELY(level < 0)) { - snprintf(buf, sizeof(buf), "%03d", level); - *p_name = buf; - } else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS)) { - snprintf(buf, sizeof(buf), "%03d", level); - *p_name = buf; - } else - *p_name = _names[level]; -} - -#ifdef _WIN32 -static inline void -eina_log_print_level_name_color_get(int level, - const char **p_name, int *p_color) -{ - static char buf[4]; - /* NOTE: if you change this, also change: - * eina_log_print_level_name_get() - */ - if (EINA_UNLIKELY(level < 0)) { - snprintf(buf, sizeof(buf), "%03d", level); - *p_name = buf; - } else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS)) { - snprintf(buf, sizeof(buf), "%03d", level); - *p_name = buf; - } else - *p_name = _names[level]; - - *p_color = - eina_log_win32_color_get(eina_log_level_color_get(level)); -} -#else -static inline void -eina_log_print_level_name_color_get(int level, - const char **p_name, - const char **p_color) -{ - static char buf[4]; - /* NOTE: if you change this, also change: - * eina_log_print_level_name_get() - */ - if (EINA_UNLIKELY(level < 0)) { - snprintf(buf, sizeof(buf), "%03d", level); - *p_name = buf; - } else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS)) { - snprintf(buf, sizeof(buf), "%03d", level); - *p_name = buf; - } else - *p_name = _names[level]; - - *p_color = eina_log_level_color_get(level); -} -#endif - -#define DECLARE_LEVEL_NAME(level) const char *name; \ - eina_log_print_level_name_get(level, &name) -#ifdef _WIN32 -#define DECLARE_LEVEL_NAME_COLOR(level) const char *name; int color; \ - eina_log_print_level_name_color_get(level, &name, &color) -#else -#define DECLARE_LEVEL_NAME_COLOR(level) const char *name, *color; \ - eina_log_print_level_name_color_get(level, &name, &color) -#endif - -/** No threads, No color */ -static void -eina_log_print_prefix_NOthreads_NOcolor_file_func(FILE * fp, - const Eina_Log_Domain * - d, Eina_Log_Level level, - const char *file, - const char *fnc, - int line) -{ - DECLARE_LEVEL_NAME(level); - fprintf(fp, "%s:%s %s:%d %s() ", name, d->domain_str, file, line, - fnc); -} - -static void -eina_log_print_prefix_NOthreads_NOcolor_NOfile_func(FILE * fp, - const Eina_Log_Domain * - d, - Eina_Log_Level level, - const char *file - __UNUSED__, - const char *fnc, - int line __UNUSED__) -{ - DECLARE_LEVEL_NAME(level); - fprintf(fp, "%s:%s %s() ", name, d->domain_str, fnc); -} - -static void -eina_log_print_prefix_NOthreads_NOcolor_file_NOfunc(FILE * fp, - const Eina_Log_Domain * - d, - Eina_Log_Level level, - const char *file, - const char *fnc - __UNUSED__, int line) -{ - DECLARE_LEVEL_NAME(level); - fprintf(fp, "%s:%s %s:%d ", name, d->domain_str, file, line); -} - -/* No threads, color */ -static void -eina_log_print_prefix_NOthreads_color_file_func(FILE * fp, - const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file, - const char *fnc, int line) -{ - DECLARE_LEVEL_NAME_COLOR(level); -#ifdef _WIN32 - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); - fprintf(fp, "%s", name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, ":"); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - eina_log_win32_color_get(d->domain_str)); - fprintf(fp, "%s", d->name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, " %s:%d ", file, line); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_INTENSITY | FOREGROUND_RED | - FOREGROUND_GREEN | FOREGROUND_BLUE); - fprintf(fp, "%s()", fnc); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, " "); -#else - fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s %s:%d " - EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", - color, name, d->domain_str, file, line, fnc); -#endif -} - -static void -eina_log_print_prefix_NOthreads_color_NOfile_func(FILE * fp, - const Eina_Log_Domain * - d, Eina_Log_Level level, - const char *file - __UNUSED__, - const char *fnc, - int line __UNUSED__) -{ - DECLARE_LEVEL_NAME_COLOR(level); -#ifdef _WIN32 - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); - fprintf(fp, "%s", name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, ":"); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - eina_log_win32_color_get(d->domain_str)); - fprintf(fp, "%s", d->name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_INTENSITY | FOREGROUND_RED | - FOREGROUND_GREEN | FOREGROUND_BLUE); - fprintf(fp, "%s()", fnc); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, " "); -#else - fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s " - EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", - color, name, d->domain_str, fnc); -#endif -} - -static void -eina_log_print_prefix_NOthreads_color_file_NOfunc(FILE * fp, - const Eina_Log_Domain * - d, Eina_Log_Level level, - const char *file, - const char *fnc - __UNUSED__, int line) -{ - DECLARE_LEVEL_NAME_COLOR(level); -#ifdef _WIN32 - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); - fprintf(fp, "%s", name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, ":"); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - eina_log_win32_color_get(d->domain_str)); - fprintf(fp, "%s", d->name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, " %s:%d ", file, line); -#else - fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s %s:%d ", - color, name, d->domain_str, file, line); -#endif -} - -/** threads, No color */ -#ifdef EFL_HAVE_THREADS -static void -eina_log_print_prefix_threads_NOcolor_file_func(FILE * fp, - const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file, - const char *fnc, int line) -{ - Thread cur; - - DECLARE_LEVEL_NAME(level); - cur = SELF(); - if (IS_OTHER(cur)) { - fprintf(fp, "%s:%s[T:%lu] %s:%d %s() ", - name, d->domain_str, (unsigned long) cur, file, - line, fnc); - return; - } - - fprintf(fp, "%s:%s %s:%d %s() ", name, d->domain_str, file, line, - fnc); -} - -static void -eina_log_print_prefix_threads_NOcolor_NOfile_func(FILE * fp, - const Eina_Log_Domain * - d, Eina_Log_Level level, - const char *file - __UNUSED__, - const char *fnc, - int line __UNUSED__) -{ - Thread cur; - - DECLARE_LEVEL_NAME(level); - cur = SELF(); - if (IS_OTHER(cur)) { - fprintf(fp, "%s:%s[T:%lu] %s() ", - name, d->domain_str, (unsigned long) cur, fnc); - return; - } - - fprintf(fp, "%s:%s %s() ", name, d->domain_str, fnc); -} - -static void -eina_log_print_prefix_threads_NOcolor_file_NOfunc(FILE * fp, - const Eina_Log_Domain * - d, Eina_Log_Level level, - const char *file, - const char *fnc - __UNUSED__, int line) -{ - Thread cur; - - DECLARE_LEVEL_NAME(level); - cur = SELF(); - if (IS_OTHER(cur)) { - fprintf(fp, "%s:%s[T:%lu] %s:%d ", - name, d->domain_str, (unsigned long) cur, file, - line); - return; - } - - fprintf(fp, "%s:%s %s:%d ", name, d->domain_str, file, line); -} - -/* threads, color */ -static void -eina_log_print_prefix_threads_color_file_func(FILE * fp, - const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file, - const char *fnc, int line) -{ - Thread cur; - - DECLARE_LEVEL_NAME_COLOR(level); - cur = SELF(); - if (IS_OTHER(cur)) { -#ifdef _WIN32 - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - color); - fprintf(fp, "%s", name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, ":"); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - eina_log_win32_color_get(d-> - domain_str)); - fprintf(fp, "%s[T:", d->name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, "[T:"); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, "%lu", (unsigned long) cur); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, "] %s:%d ", file, line); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_INTENSITY | - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, "%s()", fnc); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, " "); -#else - fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s[T:" - EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET "] %s:%d " - EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", - color, name, d->domain_str, (unsigned long) cur, - file, line, fnc); -#endif - return; - } -#ifdef _WIN32 - eina_log_print_prefix_NOthreads_color_file_func(fp, - d, - level, - file, fnc, line); -#else - fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s %s:%d " - EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", - color, name, d->domain_str, file, line, fnc); -#endif -} - -static void -eina_log_print_prefix_threads_color_NOfile_func(FILE * fp, - const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file - __UNUSED__, - const char *fnc, - int line __UNUSED__) -{ - Thread cur; - - DECLARE_LEVEL_NAME_COLOR(level); - cur = SELF(); - if (IS_OTHER(cur)) { -#ifdef _WIN32 - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - color); - fprintf(fp, "%s", name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, ":"); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - eina_log_win32_color_get(d-> - domain_str)); - fprintf(fp, "%s[T:", d->name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, "[T:"); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, "%lu", (unsigned long) cur); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_INTENSITY | - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, "%s()", fnc); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, " "); -#else - fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s[T:" - EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET "] " - EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", - color, name, d->domain_str, (unsigned long) cur, - fnc); -#endif - return; - } -#ifdef _WIN32 - eina_log_print_prefix_NOthreads_color_NOfile_func(fp, - d, - level, - file, fnc, line); -#else - fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s " - EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ", - color, name, d->domain_str, fnc); -#endif -} - -static void -eina_log_print_prefix_threads_color_file_NOfunc(FILE * fp, - const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file, - const char *fnc __UNUSED__, - int line) -{ - Thread cur; - - DECLARE_LEVEL_NAME_COLOR(level); - cur = SELF(); - if (IS_OTHER(cur)) { -#ifdef _WIN32 - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - color); - fprintf(fp, "%s", name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, ":"); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - eina_log_win32_color_get(d-> - domain_str)); - fprintf(fp, "%s[T:", d->name); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, "[T:"); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, "%lu", (unsigned long) cur); - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED | FOREGROUND_GREEN | - FOREGROUND_BLUE); - fprintf(fp, "] %s:%d ", file, line); -#else - fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s[T:" - EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET - "] %s:%d ", color, name, d->domain_str, - (unsigned long) cur, file, line); -#endif - return; - } -#ifdef _WIN32 - eina_log_print_prefix_NOthreads_color_file_NOfunc(fp, - d, - level, - file, fnc, line); -#else - fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s %s:%d ", - color, name, d->domain_str, file, line); -#endif -} -#endif /* EFL_HAVE_THREADS */ - -static void (*_eina_log_print_prefix) (FILE * fp, - const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file, const char *fnc, - int line) = - eina_log_print_prefix_NOthreads_color_file_func; - -static inline void eina_log_print_prefix_update(void) -{ - if (_disable_file && _disable_function) { - fprintf(stderr, - "ERROR: cannot have " EINA_LOG_ENV_FILE_DISABLE - " and " EINA_LOG_ENV_FUNCTION_DISABLE - " set at the same time, will " - "just disable function.\n"); - _disable_file = 0; - } -#define S(NOthread, NOcolor, NOfile, NOfunc) \ - _eina_log_print_prefix = \ - eina_log_print_prefix_ ## NOthread ## threads_ ## NOcolor ## color_ ## \ - NOfile \ - ## file_ ## NOfunc ## func - -#ifdef EFL_HAVE_THREADS - if (_threads_enabled) { - if (_disable_color) { - if (_disable_file) - S(, NO, NO,); - else if (_disable_function) - S(, NO,, NO); - else - S(, NO,,); - } else { - if (_disable_file) - S(,, NO,); - else if (_disable_function) - S(,,, NO); - else - S(,,,); - } - - return; - } -#endif - - if (_disable_color) { - if (_disable_file) - S(NO, NO, NO,); - else if (_disable_function) - S(NO, NO,, NO); - else - S(NO, NO,,); - } else { - if (_disable_file) - S(NO,, NO,); - else if (_disable_function) - S(NO,,, NO); - else - S(NO,,,); - } - -#undef S -} - -/* - * Creates a colored domain name string. - */ -static const char *eina_log_domain_str_get(const char *name, - const char *color) -{ - const char *d; - - if (color) { - size_t name_len; - size_t color_len; - - name_len = strlen(name); - color_len = strlen(color); - d = malloc(sizeof(char) * - (color_len + name_len + - strlen(EINA_COLOR_RESET) + 1)); - if (!d) - return NULL; - - memcpy((char *) d, color, color_len); - memcpy((char *) (d + color_len), name, name_len); - memcpy((char *) (d + color_len + name_len), - EINA_COLOR_RESET, strlen(EINA_COLOR_RESET)); - ((char *) d)[color_len + name_len + - strlen(EINA_COLOR_RESET)] = '\0'; - } else - d = strdup(name); - - return d; -} - -/* - * Setups a new logging domain to the name and color specified. Note that this - * constructor acts upon an pre-allocated object. - */ -static Eina_Log_Domain *eina_log_domain_new(Eina_Log_Domain * d, - const char *name, - const char *color) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(d, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL); - - d->level = EINA_LOG_LEVEL_UNKNOWN; - d->deleted = EINA_FALSE; - - if (name) { - if ((color) && (!_disable_color)) - d->domain_str = - eina_log_domain_str_get(name, color); - else - d->domain_str = - eina_log_domain_str_get(name, NULL); - - d->name = strdup(name); - d->namelen = strlen(name); - } else { - d->domain_str = NULL; - d->name = NULL; - d->namelen = 0; - } - - return d; -} - -/* - * Frees internal strings of a log domain, keeping the log domain itself as a - * slot for next domain registers. - */ -static void eina_log_domain_free(Eina_Log_Domain * d) -{ - EINA_SAFETY_ON_NULL_RETURN(d); - - if (d->domain_str) - free((char *) d->domain_str); - - if (d->name) - free((char *) d->name); -} - -/* - * Parses domain levels passed through the env var. - */ -static void eina_log_domain_parse_pendings(void) -{ - const char *start; - - if (!(start = getenv(EINA_LOG_ENV_LEVELS))) - return; - - // name1:level1,name2:level2,name3:level3,... - while (1) { - Eina_Log_Domain_Level_Pending *p; - char *end = NULL; - char *tmp = NULL; - long int level; - - end = strchr(start, ':'); - if (!end) - break; - - // Parse level, keep going if failed - level = strtol((char *) (end + 1), &tmp, 10); - if (tmp == (end + 1)) - goto parse_end; - - // Parse name - p = malloc(sizeof(Eina_Log_Domain_Level_Pending) + end - - start + 1); - if (!p) - break; - - p->namelen = end - start; - memcpy((char *) p->name, start, end - start); - ((char *) p->name)[end - start] = '\0'; - p->level = level; - - _pending_list = - eina_inlist_append(_pending_list, EINA_INLIST_GET(p)); - - parse_end: - start = strchr(tmp, ','); - if (start) - start++; - else - break; - } -} - -static void eina_log_domain_parse_pending_globs(void) -{ - const char *start; - - if (!(start = getenv(EINA_LOG_ENV_LEVELS_GLOB))) - return; - - // name1:level1,name2:level2,name3:level3,... - while (1) { - Eina_Log_Domain_Level_Pending *p; - char *end = NULL; - char *tmp = NULL; - long int level; - - end = strchr(start, ':'); - if (!end) - break; - - // Parse level, keep going if failed - level = strtol((char *) (end + 1), &tmp, 10); - if (tmp == (end + 1)) - goto parse_end; - - // Parse name - p = malloc(sizeof(Eina_Log_Domain_Level_Pending) + end - - start + 1); - if (!p) - break; - - p->namelen = 0; /* not that useful */ - memcpy((char *) p->name, start, end - start); - ((char *) p->name)[end - start] = '\0'; - p->level = level; - - _glob_list = - eina_inlist_append(_glob_list, EINA_INLIST_GET(p)); - - parse_end: - start = strchr(tmp, ','); - if (start) - start++; - else - break; - } -} - -static inline int -eina_log_domain_register_unlocked(const char *name, const char *color) -{ - Eina_Log_Domain_Level_Pending *pending = NULL; - size_t namelen; - unsigned int i; - - for (i = 0; i < _log_domains_count; i++) { - if (_log_domains[i].deleted) { - // Found a flagged slot, free domain_str and replace slot - eina_log_domain_new(&_log_domains[i], name, color); - goto finish_register; - } - } - - if (_log_domains_count >= _log_domains_allocated) { - Eina_Log_Domain *tmp; - size_t size; - - if (!_log_domains) - // special case for init, eina itself will allocate a dozen of domains - size = 24; - else - // grow 8 buckets to minimize reallocs - size = _log_domains_allocated + 8; - - tmp = - realloc(_log_domains, sizeof(Eina_Log_Domain) * size); - - if (tmp) { - // Success! - _log_domains = tmp; - _log_domains_allocated = size; - } else - return -1; - } - // Use an allocated slot - eina_log_domain_new(&_log_domains[i], name, color); - _log_domains_count++; - - finish_register: - namelen = _log_domains[i].namelen; - - EINA_INLIST_FOREACH(_pending_list, pending) { - if ((namelen == pending->namelen) - && (strcmp(pending->name, name) == 0)) { - _log_domains[i].level = pending->level; - _pending_list = - eina_inlist_remove(_pending_list, - EINA_INLIST_GET(pending)); - free(pending); - break; - } - } - - if (_log_domains[i].level == EINA_LOG_LEVEL_UNKNOWN) { - EINA_INLIST_FOREACH(_glob_list, pending) { - if (!fnmatch(pending->name, name, 0)) { - _log_domains[i].level = pending->level; - break; - } - } - } - // Check if level is still UNKNOWN, set it to global - if (_log_domains[i].level == EINA_LOG_LEVEL_UNKNOWN) - _log_domains[i].level = _log_level; - - return i; -} - -static inline Eina_Bool eina_log_term_color_supported(const char *term) -{ - const char *tail; - - if (!term) - return EINA_FALSE; - - tail = term + 1; - switch (term[0]) { - /* list of known to support color terminals, - * take from gentoo's portage. - */ - - case 'x': /* xterm and xterm-color */ - return ((strncmp(tail, "term", sizeof("term") - 1) == 0) && - ((tail[sizeof("term") - 1] == '\0') || - (strcmp(tail + sizeof("term") - 1, "-color") == - 0))); - - case 'E': /* Eterm */ - case 'a': /* aterm */ - case 'k': /* kterm */ - return (strcmp(tail, "term") == 0); - - case 'r': /* xrvt or rxvt-unicode */ - return ((strncmp(tail, "xvt", sizeof("xvt") - 1) == 0) && - ((tail[sizeof("xvt") - 1] == '\0') || - (strcmp(tail + sizeof("xvt") - 1, "-unicode") == - 0))); - - case 's': /* screen */ - return (strcmp(tail, "creen") == 0); - - case 'g': /* gnome */ - return (strcmp(tail, "nome") == 0); - - case 'i': /* interix */ - return (strcmp(tail, "nterix") == 0); - - default: - return EINA_FALSE; - } -} - -static inline void eina_log_domain_unregister_unlocked(int domain) -{ - Eina_Log_Domain *d; - - if ((unsigned int) domain >= _log_domains_count) - return; - - d = &_log_domains[domain]; - eina_log_domain_free(d); - d->deleted = 1; -} - -static inline void -eina_log_print_unlocked(int domain, - Eina_Log_Level level, - const char *file, - const char *fnc, - int line, const char *fmt, va_list args) -{ - Eina_Log_Domain *d; - -#ifdef EINA_SAFETY_CHECKS - if (EINA_UNLIKELY((unsigned int) domain >= _log_domains_count) || - EINA_UNLIKELY(domain < 0)) { - if (file && fnc && fmt) - fprintf(stderr, - "CRI: %s:%d %s() eina_log_print() unknown domain %d, original message format '%s'\n", - file, line, fnc, domain, fmt); - else - fprintf(stderr, - "CRI: eina_log_print() unknown domain %d, original message format '%s'\n", - domain, fmt ? fmt : ""); - - if (_abort_on_critical) - abort(); - - return; - } -#endif - d = _log_domains + domain; -#ifdef EINA_SAFETY_CHECKS - if (EINA_UNLIKELY(d->deleted)) { - fprintf(stderr, - "ERR: eina_log_print() domain %d is deleted\n", - domain); - return; - } -#endif - - if (level > d->level) - return; - -#ifdef _WIN32 - { - char *wfmt; - char *tmp; - - wfmt = strdup(fmt); - if (!wfmt) { - fprintf(stderr, - "ERR: %s: can not allocate memory\n", - __FUNCTION__); - return; - } - - tmp = wfmt; - while (strchr(tmp, "%")) { - tmp++; - if (*tmp == 'z') - *tmp = 'I'; - } - _print_cb(d, level, file, fnc, line, wfmt, _print_cb_data, - args); - free(wfmt); - } -#else - _print_cb(d, level, file, fnc, line, fmt, _print_cb_data, args); -#endif - - if (EINA_UNLIKELY(_abort_on_critical) && - EINA_UNLIKELY(level <= _abort_level_on_critical)) - abort(); -} - -/** - * @endcond - */ - - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the log module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the log module of Eina. It is called by - * eina_init(). - * - * @see eina_init() - * - * @warning Not-MT: just call this function from main thread! The - * place where this function was called the first time is - * considered the main thread. - */ -Eina_Bool eina_log_init(void) -{ - const char *level, *tmp; - int color_disable; - - assert((sizeof(_names) / sizeof(_names[0])) == EINA_LOG_LEVELS); - - if ((tmp = getenv(EINA_LOG_ENV_COLOR_DISABLE))) - color_disable = atoi(tmp); - else - color_disable = -1; - - /* Check if color is explicitly disabled */ - if (color_disable == 1) - _disable_color = EINA_TRUE; - -#ifndef _WIN32 - /* color was not explicitly disabled or enabled, guess it */ - else if (color_disable == -1) { - if (!eina_log_term_color_supported(getenv("TERM"))) - _disable_color = EINA_TRUE; - else { - /* if not a terminal, but redirected to a file, disable color */ - int fd; - - if (_print_cb == eina_log_print_cb_stderr) - fd = STDERR_FILENO; - else if (_print_cb == eina_log_print_cb_stdout) - fd = STDOUT_FILENO; - else - fd = -1; - - if ((fd >= 0) && (!isatty(fd))) - _disable_color = EINA_TRUE; - } - } -#endif - - if ((tmp = getenv(EINA_LOG_ENV_FILE_DISABLE)) && (atoi(tmp) == 1)) - _disable_file = EINA_TRUE; - - if ((tmp = getenv(EINA_LOG_ENV_FUNCTION_DISABLE)) - && (atoi(tmp) == 1)) - _disable_function = EINA_TRUE; - - if ((tmp = getenv(EINA_LOG_ENV_ABORT)) && (atoi(tmp) == 1)) - _abort_on_critical = EINA_TRUE; - - if ((tmp = getenv(EINA_LOG_ENV_ABORT_LEVEL))) - _abort_level_on_critical = atoi(tmp); - - eina_log_print_prefix_update(); - - // Global log level - if ((level = getenv(EINA_LOG_ENV_LEVEL))) - _log_level = atoi(level); - - // Register UNKNOWN domain, the default logger - EINA_LOG_DOMAIN_GLOBAL = eina_log_domain_register("", NULL); - - if (EINA_LOG_DOMAIN_GLOBAL < 0) { - fprintf(stderr, - "Failed to create global logging domain.\n"); - return EINA_FALSE; - } - // Parse pending domains passed through EINA_LOG_LEVELS_GLOB - eina_log_domain_parse_pending_globs(); - - // Parse pending domains passed through EINA_LOG_LEVELS - eina_log_domain_parse_pendings(); - - return EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the log module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the log module set up by - * eina_log_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - * - * @warning Not-MT: just call this function from main thread! The - * place where eina_log_init() (eina_init()) was called the - * first time is considered the main thread. - */ -Eina_Bool eina_log_shutdown(void) -{ - Eina_Inlist *tmp; - - while (_log_domains_count--) { - if (_log_domains[_log_domains_count].deleted) - continue; - - eina_log_domain_free(&_log_domains[_log_domains_count]); - } - - free(_log_domains); - - _log_domains = NULL; - _log_domains_count = 0; - _log_domains_allocated = 0; - - while (_glob_list) { - tmp = _glob_list; - _glob_list = _glob_list->next; - free(tmp); - } - - while (_pending_list) { - tmp = _pending_list; - _pending_list = _pending_list->next; - free(tmp); - } - - return EINA_TRUE; -} - -#ifdef EFL_HAVE_THREADS - -/** - * @internal - * @brief Activate the log mutex. - * - * This function activate the mutex in the eina log module. It is called by - * eina_threads_init(). - * - * @see eina_threads_init() - */ -void eina_log_threads_init(void) -{ - _main_thread = SELF(); - if (INIT()) - _threads_enabled = EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the log mutex. - * - * This function shuts down the mutex in the log module. - * It is called by eina_threads_shutdown(). - * - * @see eina_threads_shutdown() - */ -void eina_log_threads_shutdown(void) -{ - CHECK_MAIN(); - SHUTDOWN(); - _threads_enabled = EINA_FALSE; -} - -#endif - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Log_Group Log - * - * @brief Full-featured logging system. - * - * Eina provides eina_log_print(), a standard function to manage all - * logging messages. This function may be called directly or using the - * helper macros such as EINA_LOG_DBG(), EINA_LOG_ERR() or those that - * take a specific domain as argument EINA_LOG_DOM_DBG(), - * EINA_LOG_DOM_ERR(). Internally, eina_log_print() will call the - * function defined with eina_log_print_cb_set(), that defaults to - * eina_log_print_cb_stderr(), but may be changed to do whatever you - * need, such as networking or syslog logging. - * - * The logging system is thread safe once initialized with - * eina_log_threads_enable(). The thread that calls this function - * first is considered "main thread" and other threads will have their - * thread id (pthread_self()) printed in the log message so it is easy - * to detect from where it is coming. - * - * Log domains is the Eina way to differentiate messages. There might - * be different domains to represent different modules, different - * feature-set, different categories and so on. Filtering can be - * applied to domain names by means of @c EINA_LOG_LEVELS environment - * variable or eina_log_domain_level_set(). - * - * The different logging levels serve to customize the amount of - * debugging one want to take and may be used to automatically call - * abort() once some given level message is printed. This is - * controlled by environment variable @c EINA_LOG_ABORT and the level - * to be considered critical with @c EINA_LOG_ABORT_LEVEL. These can - * be changed with eina_log_abort_on_critical_set() and - * eina_log_abort_on_critical_level_set(). - * - * The default maximum level to print is defined by environment - * variable @c EINA_LOG_LEVEL, but may be set per-domain with @c - * EINA_LOG_LEVELS. It will default to #EINA_LOG_ERR. This can be - * changed with eina_log_level_set(). - * - * To use the log system Eina must be initialized with eina_init() and - * later shut down with eina_shutdown(). Here is a straightforward - * example: - * - * @code - * #include - * #include - * - * #include - * - * void test_warn(void) - * { - * EINA_LOG_WARN("Here is a warning message"); - * } - * - * int main(void) - * { - * if (!eina_init()) - * { - * printf("log during the initialization of Eina_Log module\n"); - * return EXIT_FAILURE; - * } - * - * test_warn(); - * - * eina_shutdown(); - * - * return EXIT_SUCCESS; - * } - * @endcode - * - * Compile this code with the following command: - * - * @code - * gcc -Wall -o test_Eina_Log test_eina.c `pkg-config --cflags --libs eina` - * @endcode - * - * Now execute the program with: - * - * @code - * EINA_LOG_LEVEL=2 ./test_eina_log - * @endcode - * - * You should see a message displayed in the terminal. - * - * For more information, you can look at the @ref tutorial_log_page. - * - * @{ - */ - - -/** - * @cond LOCAL - */ - -EAPI int EINA_LOG_DOMAIN_GLOBAL = 0; - -/** - * @endcond - */ - - -/** - * Enable logging module to handle threads. - * - * There is no disable option on purpose, if it is enabled, there is - * no way back until you call the last eina_shutdown(). - * - * There is no function to retrieve if threads are enabled as one is - * not supposed to know this from outside. - * - * After this call is executed at least once, if Eina was compiled - * with threads support then logging will lock around debug messages - * and threads that are not the main thread will have its identifier - * printed. - * - * The main thread is considered the thread where the first - * eina_init() was called. - */ -EAPI void eina_log_threads_enable(void) -{ -#ifdef EFL_HAVE_THREADS - _threads_enabled = 1; - eina_log_print_prefix_update(); -#endif -} - -/** - * Sets logging method to use. - * - * @param cb The callback to call when printing a log. - * @param data The data to pass to the callback. - * - * By default, eina_log_print_cb_stderr() is used. - * - * @note MT: safe to call from any thread. - * - * @note MT: given function @a cb will be called protected by mutex. - * This means you're safe from other calls but you should never - * call eina_log_print(), directly or indirectly. - */ -EAPI void eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data) -{ - LOG_LOCK(); - _print_cb = cb; - _print_cb_data = data; - eina_log_print_prefix_update(); - LOG_UNLOCK(); -} - -/** - * @brief Set the default log level. - * - * @param level The log level. - * - * This function sets the log level @p level. It is used in - * eina_log_print(). - * - * @note this is initially set to envvar EINA_LOG_LEVEL by eina_init(). - * - * @see eina_log_level_get() - */ -EAPI void eina_log_level_set(int level) -{ - _log_level = level; - if (EINA_LIKELY((EINA_LOG_DOMAIN_GLOBAL >= 0) && - ((unsigned int) EINA_LOG_DOMAIN_GLOBAL < - _log_domains_count))) - _log_domains[EINA_LOG_DOMAIN_GLOBAL].level = level; -} - -/** - * @brief Get the default log level. - * - * @return the log level that limits eina_log_print(). - * - * @see eina_log_level_set() - */ -EAPI int eina_log_level_get(void) -{ - return _log_level; -} - -/** - * Checks if current thread is the main thread. - * - * @return #EINA_TRUE if threads were enabled and the current thread - * is the one that called eina_log_threads_init(). If there is - * no thread support (compiled with --disable-pthreads) or - * they were not enabled, then #EINA_TRUE is also - * returned. The only case where #EINA_FALSE is returned is - * when threads were successfully enabled but the current - * thread is not the main (one that called - * eina_log_threads_init()). - */ -EAPI Eina_Bool eina_log_main_thread_check(void) -{ -#ifdef EFL_HAVE_THREADS - return ((!_threads_enabled) || IS_MAIN(SELF())); -#else - return EINA_TRUE; -#endif -} - -/** - * @brief Set if color logging should be disabled. - * - * @param disabled if #EINA_TRUE, color logging should be disabled. - * - * @note this is initially set to envvar EINA_LOG_COLOR_DISABLE by eina_init(). - * - * @see eina_log_color_disable_get() - */ -EAPI void eina_log_color_disable_set(Eina_Bool disabled) -{ - _disable_color = disabled; -} - -/** - * @brief Get if color logging should be disabled. - * - * @return if #EINA_TRUE, color logging should be disabled. - * - * @see eina_log_color_disable_set() - */ -EAPI Eina_Bool eina_log_color_disable_get(void) -{ - return _disable_color; -} - -/** - * @brief Set if originating file name logging should be disabled. - * - * @param disabled if #EINA_TRUE, file name logging should be disabled. - * - * @note this is initially set to envvar EINA_LOG_FILE_DISABLE by eina_init(). - * - * @see eina_log_file_disable_get() - */ -EAPI void eina_log_file_disable_set(Eina_Bool disabled) -{ - _disable_file = disabled; -} - -/** - * @brief Get if originating file name logging should be disabled. - * - * @return if #EINA_TRUE, file name logging should be disabled. - * - * @see eina_log_file_disable_set() - */ -EAPI Eina_Bool eina_log_file_disable_get(void) -{ - return _disable_file; -} - -/** - * @brief Set if originating function name logging should be disabled. - * - * @param disabled if #EINA_TRUE, function name logging should be disabled. - * - * @note this is initially set to envvar EINA_LOG_FUNCTION_DISABLE by - * eina_init(). - * - * @see eina_log_function_disable_get() - */ -EAPI void eina_log_function_disable_set(Eina_Bool disabled) -{ - _disable_function = disabled; -} - -/** - * @brief Get if originating function name logging should be disabled. - * - * @return if #EINA_TRUE, function name logging should be disabled. - * - * @see eina_log_function_disable_set() - */ -EAPI Eina_Bool eina_log_function_disable_get(void) -{ - return _disable_function; -} - -/** - * @brief Set if critical messages should abort the program. - * - * @param abort_on_critical if #EINA_TRUE, messages with level equal - * or smaller than eina_log_abort_on_critical_level_get() will - * abort the program. - * - * @note this is initially set to envvar EINA_LOG_ABORT by - * eina_init(). - * - * @see eina_log_abort_on_critical_get() - * @see eina_log_abort_on_critical_level_set() - */ -EAPI void eina_log_abort_on_critical_set(Eina_Bool abort_on_critical) -{ - _abort_on_critical = abort_on_critical; -} - -/** - * @brief Get if critical messages should abort the program. - * - * @return if #EINA_TRUE, any messages with level equal or smaller - * than eina_log_abort_on_critical_level_get() will abort the - * program. - * - * @see eina_log_abort_on_critical_set() - * @see eina_log_abort_on_critical_level_set() - */ -EAPI Eina_Bool eina_log_abort_on_critical_get(void) -{ - return _abort_on_critical; -} - -/** - * @brief Set level that triggers abort if abort-on-critical is set. - * - * @param critical_level levels equal or smaller than the given value - * will trigger program abortion if - * eina_log_abort_on_critical_get() returns #EINA_TRUE. - * - * @note this is initially set to envvar EINA_LOG_ABORT_LEVEL by - * eina_init(). - * - * @see eina_log_abort_on_critical_level_get() - * @see eina_log_abort_on_critical_get() - */ -EAPI void eina_log_abort_on_critical_level_set(int critical_level) -{ - _abort_level_on_critical = critical_level; -} - -/** - * @brief Get level that triggers abort if abort-on-critical is set. - * - * @return critical level equal or smaller than value will trigger - * program abortion if eina_log_abort_on_critical_get() returns - * #EINA_TRUE. - * - * @see eina_log_abort_on_critical_level_set() - * @see eina_log_abort_on_critical_get() - */ -EAPI int eina_log_abort_on_critical_level_get(void) -{ - return _abort_level_on_critical; -} - -/** - * @param name Domain name - * @param color Color of the domain name - * - * @return Domain index that will be used as the DOMAIN parameter on log - * macros. A negative return value means an log occurred. - * - * @note MT: safe to call from any thread. - */ -EAPI int eina_log_domain_register(const char *name, const char *color) -{ - int r; - - EINA_SAFETY_ON_NULL_RETURN_VAL(name, -1); - - LOG_LOCK(); - r = eina_log_domain_register_unlocked(name, color); - LOG_UNLOCK(); - return r; -} - -/** - * Forget about a logging domain registered by eina_log_domain_register() - * - * @param domain domain identifier as reported by eina_log_domain_register(), - * must be >= 0. - * - * @note MT: safe to call from any thread. - */ -EAPI void eina_log_domain_unregister(int domain) -{ - EINA_SAFETY_ON_FALSE_RETURN(domain >= 0); - LOG_LOCK(); - eina_log_domain_unregister_unlocked(domain); - LOG_UNLOCK(); -} - -/** - * Set the domain level given its name. - * - * This call has the same effect as setting - * EINA_LOG_LEVELS=<@p domain_name>:<@p level> - * - * @param domain_name domain name to change the level. It may be of a - * still not registered domain. If the domain is not registered - * yet, it will be saved as a pending set and applied upon - * registration. - * @param level level to use to limit eina_log_print() for given domain. - */ -EAPI void eina_log_domain_level_set(const char *domain_name, int level) -{ - Eina_Log_Domain_Level_Pending *pending; - size_t namelen; - unsigned int i; - - EINA_SAFETY_ON_NULL_RETURN(domain_name); - - namelen = strlen(domain_name); - - for (i = 0; i < _log_domains_count; i++) { - if (_log_domains[i].deleted) - continue; - - if ((namelen != _log_domains[i].namelen) || - (strcmp(_log_domains[i].name, domain_name) != 0)) - continue; - - _log_domains[i].level = level; - return; - } - - EINA_INLIST_FOREACH(_pending_list, pending) { - if ((namelen == pending->namelen) && - (strcmp(pending->name, domain_name) == 0)) { - pending->level = level; - return; - } - } - - pending = - malloc(sizeof(Eina_Log_Domain_Level_Pending) + namelen + 1); - if (!pending) - return; - - pending->level = level; - pending->namelen = namelen; - memcpy(pending->name, domain_name, namelen + 1); - - _pending_list = - eina_inlist_append(_pending_list, EINA_INLIST_GET(pending)); -} - -/** - * Get the domain level given its name. - * - * @param domain_name domain name to retrieve the level. It may be of - * a still not registered domain. If the domain is not - * registered yet, but there is a pending value, either from - * eina_log_domain_level_set(),EINA_LOG_LEVELS environment - * variable or from EINA_LOG_LEVELS_GLOB, these are - * returned. If nothing else was found, then the global/default - * level (eina_log_level_get()) is returned. - * - * @return level to use to limit eina_log_print() for given - * domain. On error (@p domain_name == NULL), - * EINA_LOG_LEVEL_UNKNOWN is returned. - * - * @see eina_log_domain_level_set() - * @see eina_log_domain_registered_level_get() - */ -EAPI int eina_log_domain_level_get(const char *domain_name) -{ - Eina_Log_Domain_Level_Pending *pending; - size_t namelen; - unsigned int i; - - EINA_SAFETY_ON_NULL_RETURN_VAL(domain_name, - EINA_LOG_LEVEL_UNKNOWN); - - namelen = strlen(domain_name); - - for (i = 0; i < _log_domains_count; i++) { - if (_log_domains[i].deleted) - continue; - - if ((namelen != _log_domains[i].namelen) || - (strcmp(_log_domains[i].name, domain_name) != 0)) - continue; - - return _log_domains[i].level; - } - - EINA_INLIST_FOREACH(_pending_list, pending) { - if ((namelen == pending->namelen) && - (strcmp(pending->name, domain_name) == 0)) - return pending->level; - } - - EINA_INLIST_FOREACH(_glob_list, pending) { - if (!fnmatch(pending->name, domain_name, 0)) - return pending->level; - } - - return _log_level; -} - -/** - * Get the domain level given its identifier. - * - * @param domain identifier, so it must be previously registered with - * eina_log_domain_register(). It's a much faster version of - * eina_log_domain_level_get(), but relies on domain being - * present. - * - * @return level to use to limit eina_log_print() for given domain. On - * error EINA_LOG_LEVEL_UNKNOWN is returned. - */ -EAPI int eina_log_domain_registered_level_get(int domain) -{ - EINA_SAFETY_ON_FALSE_RETURN_VAL(domain >= 0, - EINA_LOG_LEVEL_UNKNOWN); - EINA_SAFETY_ON_FALSE_RETURN_VAL((unsigned int) domain < - _log_domains_count, - EINA_LOG_LEVEL_UNKNOWN); - EINA_SAFETY_ON_TRUE_RETURN_VAL(_log_domains[domain].deleted, - EINA_LOG_LEVEL_UNKNOWN); - return _log_domains[domain].level; -} - -/** - * Default logging method, this will output to standard error stream. - * - * This method will colorize output based on domain provided color and - * message logging level. - * - * To disable color, set environment variable - * EINA_LOG_COLOR_DISABLE=1. To enable color, even if directing to a - * file or when using a non-supported color terminal, use - * EINA_LOG_COLOR_DISABLE=0. If EINA_LOG_COLOR_DISABLE is unset (or - * -1), then Eina will disable color if terminal ($TERM) is - * unsupported or if redirecting to a file. - - . Similarly, to disable file and line - * information, set EINA_LOG_FILE_DISABLE=1 or - * EINA_LOG_FUNCTION_DISABLE=1 to avoid function name in output. It is - * not acceptable to have both EINA_LOG_FILE_DISABLE and - * EINA_LOG_FUNCTION_DISABLE at the same time, in this case just - * EINA_LOG_FUNCTION_DISABLE will be considered and file information - * will be printed anyways. - * - * @note MT: if threads are enabled, this function is called within locks. - * @note MT: Threads different from main thread will have thread id - * appended to domain name. - */ -EAPI void -eina_log_print_cb_stderr(const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file, - const char *fnc, - int line, - const char *fmt, - __UNUSED__ void *data, va_list args) -{ - _eina_log_print_prefix(stderr, d, level, file, fnc, line); - vfprintf(stderr, fmt, args); - putc('\n', stderr); -} - -/** - * Alternative logging method, this will output to standard output stream. - * - * @param d The domain. - * @param level The level. - * @param file The file which is logged. - * @param fnc The function which is logged. - * @param line The line which is logged. - * @param fmt The ouptut format to use. - * @param data Not used. - * @param args The arguments needed by the format. - * - * This method will colorize output based on domain provided color and - * message logging level. To disable color, set environment variable - * EINA_LOG_COLOR_DISABLE=1. Similarly, to disable file and line - * information, set EINA_LOG_FILE_DISABLE=1 or - * EINA_LOG_FUNCTION_DISABLE=1 to avoid function name in output. It is - * not acceptable to have both EINA_LOG_FILE_DISABLE and - * EINA_LOG_FUNCTION_DISABLE at the same time, in this case just - * EINA_LOG_FUNCTION_DISABLE will be considered and file information - * will be printed anyways. - * - * @note MT: if threads are enabled, this function is called within locks. - * @note MT: Threads different from main thread will have thread id - * appended to domain name. - */ -EAPI void -eina_log_print_cb_stdout(const Eina_Log_Domain * d, - Eina_Log_Level level, - const char *file, - const char *fnc, - int line, - const char *fmt, - __UNUSED__ void *data, va_list args) -{ - _eina_log_print_prefix(stdout, d, level, file, fnc, line); - vprintf(fmt, args); - putchar('\n'); -} - -/** - * Alternative logging method, this will output to given file stream. - * - * @param d The domain. - * @param level Not used. - * @param file The file which is logged. - * @param fnc The function which is logged. - * @param line The line which is logged. - * @param fmt The ouptut format to use. - * @param data The file which will store the output (as a FILE *). - * @param args The arguments needed by the format. - * - * This method will never output color. - * - * @note MT: if threads are enabled, this function is called within locks. - * @note MT: Threads different from main thread will have thread id - * appended to domain name. - */ -EAPI void -eina_log_print_cb_file(const Eina_Log_Domain * d, - __UNUSED__ Eina_Log_Level level, - const char *file, - const char *fnc, - int line, const char *fmt, void *data, va_list args) -{ - FILE *f = data; -#ifdef EFL_HAVE_THREADS - if (_threads_enabled) { - Thread cur; - - cur = SELF(); - if (IS_OTHER(cur)) { - fprintf(f, "%s[T:%lu] %s:%d %s() ", d->name, - (unsigned long) cur, file, line, fnc); - goto end; - } - } -#endif - fprintf(f, "%s %s:%d %s() ", d->name, file, line, fnc); -#ifdef EFL_HAVE_THREADS - end: -#endif - vfprintf(f, fmt, args); - putc('\n', f); -} - -/** - * Print out log message using given domain and level. - * - * @note Usually you'll not use this function directly but the helper - * macros EINA_LOG(), EINA_LOG_DOM_CRIT(), EINA_LOG_CRIT() and - * so on. See eina_log.h - * - * @param domain logging domain to use or @c EINA_LOG_DOMAIN_GLOBAL if - * you registered none. It is recommended that modules and - * applications have their own logging domain. - * @param level message level, those with level greater than user - * specified value (eina_log_level_set() or environment - * variables EINA_LOG_LEVEL, EINA_LOG_LEVELS) will be ignored. - * @param file filename that originated the call, must @b not be @c NULL. - * @param fnc function that originated the call, must @b not be @c NULL. - * @param line originating line in @a file. - * @param fmt printf-like format to use. Should not provide trailing - * '\n' as it is automatically included. - * - * @note MT: this function may be called from different threads if - * eina_log_threads_enable() was called before. - */ -EAPI void -eina_log_print(int domain, Eina_Log_Level level, const char *file, - const char *fnc, int line, const char *fmt, ...) -{ - va_list args; - -#ifdef EINA_SAFETY_CHECKS - if (EINA_UNLIKELY(!file)) { - fputs("ERR: eina_log_print() file == NULL\n", stderr); - return; - } - - if (EINA_UNLIKELY(!fnc)) { - fputs("ERR: eina_log_print() fnc == NULL\n", stderr); - return; - } - - if (EINA_UNLIKELY(!fmt)) { - fputs("ERR: eina_log_print() fmt == NULL\n", stderr); - return; - } -#endif - va_start(args, fmt); - LOG_LOCK(); - eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args); - LOG_UNLOCK(); - va_end(args); -} - -/** - * Print out log message using given domain and level. - * - * @note Usually you'll not use this function directly but the helper - * macros EINA_LOG(), EINA_LOG_DOM_CRIT(), EINA_LOG_CRIT() and - * so on. See eina_log.h - * - * @param domain logging domain to use or @c EINA_LOG_DOMAIN_GLOBAL if - * you registered none. It is recommended that modules and - * applications have their own logging domain. - * @param level message level, those with level greater than user - * specified value (eina_log_level_set() or environment - * variables EINA_LOG_LEVEL, EINA_LOG_LEVELS) will be ignored. - * @param file filename that originated the call, must @b not be @c NULL. - * @param fnc function that originated the call, must @b not be @c NULL. - * @param line originating line in @a file. - * @param fmt printf-like format to use. Should not provide trailing - * '\n' as it is automatically included. - * @param args the arguments needed by the format. - * - * @note MT: this function may be called from different threads if - * eina_log_threads_enable() was called before. - * - * @see eina_log_print() - */ -EAPI void -eina_log_vprint(int domain, Eina_Log_Level level, const char *file, - const char *fnc, int line, const char *fmt, va_list args) -{ -#ifdef EINA_SAFETY_CHECKS - if (EINA_UNLIKELY(!file)) { - fputs("ERR: eina_log_print() file == NULL\n", stderr); - return; - } - - if (EINA_UNLIKELY(!fnc)) { - fputs("ERR: eina_log_print() fnc == NULL\n", stderr); - return; - } - - if (EINA_UNLIKELY(!fmt)) { - fputs("ERR: eina_log_print() fmt == NULL\n", stderr); - return; - } -#endif - LOG_LOCK(); - eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args); - LOG_UNLOCK(); -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_magic.c b/tests/suite/ecore/src/lib/eina_magic.c deleted file mode 100644 index cc607d0f11..0000000000 --- a/tests/suite/ecore/src/lib/eina_magic.c +++ /dev/null @@ -1,474 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_error.h" -#include "eina_log.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_magic.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -typedef struct _Eina_Magic_String Eina_Magic_String; -struct _Eina_Magic_String { - Eina_Magic magic; - Eina_Bool string_allocated; - const char *string; -}; - -static int _eina_magic_string_log_dom = -1; - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eina_magic_string_log_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eina_magic_string_log_dom, __VA_ARGS__) - -static Eina_Magic_String *_eina_magic_strings = NULL; -static size_t _eina_magic_strings_count = 0; -static size_t _eina_magic_strings_allocated = 0; -static Eina_Bool _eina_magic_strings_dirty = 0; - -static int _eina_magic_strings_sort_cmp(const void *p1, const void *p2) -{ - const Eina_Magic_String *a = p1, *b = p2; - return a->magic - b->magic; -} - -static int _eina_magic_strings_find_cmp(const void *p1, const void *p2) -{ - Eina_Magic a = (long) p1; - const Eina_Magic_String *b = p2; - return a - b->magic; -} - -static Eina_Magic_String *_eina_magic_strings_alloc(void) -{ - size_t idx; - - if (_eina_magic_strings_count == _eina_magic_strings_allocated) { - void *tmp; - size_t size; - - if (EINA_UNLIKELY(_eina_magic_strings_allocated == 0)) - size = 48; - else - size = _eina_magic_strings_allocated + 16; - - tmp = - realloc(_eina_magic_strings, - sizeof(Eina_Magic_String) * size); - if (!tmp) { -#ifdef _WIN32 - ERR("could not realloc magic_strings from %Iu to %Iu buckets.", -#else - ERR("could not realloc magic_strings from %zu to %zu buckets.", -#endif - _eina_magic_strings_allocated, size); - return NULL; - } - - _eina_magic_strings = tmp; - _eina_magic_strings_allocated = size; - } - - idx = _eina_magic_strings_count; - _eina_magic_strings_count++; - return _eina_magic_strings + idx; -} - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the magic string module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the magic string module of Eina. It is called by - * eina_init(). - * - * @see eina_init() - */ -Eina_Bool eina_magic_string_init(void) -{ - _eina_magic_string_log_dom = eina_log_domain_register - ("eina_magic_string", EINA_LOG_COLOR_DEFAULT); - if (_eina_magic_string_log_dom < 0) { - EINA_LOG_ERR - ("Could not register log domain: eina_magic_string"); - return EINA_FALSE; - } - - return EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the magic string module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the magic string module set up by - * eina_magic string_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_magic_string_shutdown(void) -{ - Eina_Magic_String *ems, *ems_end; - - ems = _eina_magic_strings; - ems_end = ems + _eina_magic_strings_count; - - for (; ems < ems_end; ems++) - if (ems->string_allocated) - free((char *) ems->string); - - free(_eina_magic_strings); - _eina_magic_strings = NULL; - _eina_magic_strings_count = 0; - _eina_magic_strings_allocated = 0; - - eina_log_domain_unregister(_eina_magic_string_log_dom); - _eina_magic_string_log_dom = -1; - - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Magic_Group Magic - * - * @brief These functions provide runtime type-checking (magic checks) - * management for projects. - * - * C is a weak statically typed language, in other words, it will just - * check for types during compile time and any cast will make the - * compiler believe the type is correct. - * - * In real world projects we often need to deal with casts, either - * explicit or implicit by means of @c void*. We also need to resort - * to casts when doing inheritance in C, as seen in the example below: - * - * @code - * struct base { - * int id; - * char *name; - * }; - * int base_id_get(struct base *ptr) { - * return ptr->id; - * } - * - * struct subtype { - * struct base base; - * time_t date; - * }; - * @endcode - * - * It is perfectly valid to use @c {struct subtype} blobs for functions - * that expect @c {struct base}, since the fields will have the same - * offset (as base member is the first, at offset 0). We could give - * the functions the @c {&subtype->base} and avoid the cast, but often - * we just cast. - * - * In any case, we might be safe and check if the given pointer is - * actually of the expected type. We can do so by using eina_magic, - * that is nothing more than attaching an unique type identifier to - * the members and check for it elsewhere. - * - * @code - * #define BASE_MAGIC 0x12345 - * #define SUBTYPE_MAGIC 0x3333 - * struct base { - * int id; - * char *name; - * EINA_MAGIC; - * }; - * int base_id_get(struct base *ptr) { - * if (!EINA_MAGIC_CHECK(ptr, BASE_MAGIC)) { - * EINA_MAGIC_FAIL(ptr, BASE_MAGIC); - * return -1; - * } - * return ptr->id; - * } - * void base_free(struct base *ptr) { - * if (!EINA_MAGIC_CHECK(ptr, BASE_MAGIC)) { - * EINA_MAGIC_FAIL(ptr, BASE_MAGIC); - * return; - * } - * EINA_MAGIC_SET(ptr, EINA_MAGIC_NONE); - * free(ptr->name); - * free(ptr); - * } - * struct base *base_new(int id, const char *name) { - * struct base *ptr = malloc(sizeof(struct base)); - * EINA_MAGIC_SET(ptr, BASE_MAGIC); - * ptr->id = id; - * ptr->name = strdup(name); - * } - * - * struct subtype { - * struct base base; - * EINA_MAGIC; - * time_t date; - * }; - * - * int my_init(void) { - * eina_init(); - * eina_magic_string_set(BASE_MAGIC, "base type"); - * eina_magic_string_set(SUBTYPE_MAGIC, "subtype"); - * } - * @endcode - * - * This code also shows that it is a good practice to set magic to - * #EINA_MAGIC_NONE before freeing pointer. Sometimes the pointers are - * in pages that are still live in memory, so kernel will not send - * SEGV signal to the process and it may go unnoticed that you're - * using already freed pointers. By setting them to #EINA_MAGIC_NONE - * you avoid using the bogus pointer any further and gets a nice error - * message. - * - * @{ - */ - -/** - * @brief Return the string associated to the given magic identifier. - * - * @param magic The magic identifier. - * @return The string associated to the identifier. - * - * This function returns the string associated to @p magic. If none - * are found, the this function still returns non @c NULL, in this - * case an identifier such as "(none)", "(undefined)" or - * "(unknown)". The returned value must not be freed. - * - * The following identifiers may be returned whenever magic is - * invalid, with their meanings: - * - * - (none): no magic was registered exists at all. - * - (undefined): magic was registered and found, but no string associated. - * - (unknown): magic was not found in the registry. - */ -EAPI const char *eina_magic_string_get(Eina_Magic magic) -{ - Eina_Magic_String *ems; - - if (!_eina_magic_strings) - return "(none)"; - - if (_eina_magic_strings_dirty) { - qsort(_eina_magic_strings, _eina_magic_strings_count, - sizeof(Eina_Magic_String), - _eina_magic_strings_sort_cmp); - _eina_magic_strings_dirty = 0; - } - - ems = bsearch((void *) (long) magic, _eina_magic_strings, - _eina_magic_strings_count, sizeof(Eina_Magic_String), - _eina_magic_strings_find_cmp); - if (ems) - return ems->string ? ems->string : "(undefined)"; - - return "(unknown)"; -} - -/** - * @brief Set the string associated to the given magic identifier. - * - * @param magic The magic identifier. - * @param magic_name The string associated to the identifier, must not - * be @c NULL. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets the string @p magic_name to @p magic. It is not - * checked if number or string are already set, then you might end - * with duplicates in that case. - * - * @see eina_magic_string_static_set() - */ -EAPI Eina_Bool -eina_magic_string_set(Eina_Magic magic, const char *magic_name) -{ - Eina_Magic_String *ems; - - EINA_SAFETY_ON_NULL_RETURN_VAL(magic_name, EINA_FALSE); - - ems = _eina_magic_strings_alloc(); - if (!ems) - return EINA_FALSE; - - ems->magic = magic; - ems->string_allocated = EINA_TRUE; - ems->string = strdup(magic_name); - if (!ems->string) { - ERR("could not allocate string '%s'", magic_name); - _eina_magic_strings_count--; - return EINA_FALSE; - } - - _eina_magic_strings_dirty = 1; - return EINA_TRUE; -} - -/** - * @brief Set the string associated to the given magic identifier. - * - * @param magic The magic identifier. - * @param magic_name The string associated to the identifier, must not be - * @c NULL, it will not be duplcated, just referenced thus it must - * be live during magic number usage. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets the string @p magic_name to @p magic. It is not - * checked if number or string are already set, then you might end - * with duplicates in that case. - * - * @see eina_magic_string_set() - */ -EAPI Eina_Bool -eina_magic_string_static_set(Eina_Magic magic, const char *magic_name) -{ - Eina_Magic_String *ems; - - EINA_SAFETY_ON_NULL_RETURN_VAL(magic_name, EINA_FALSE); - - ems = _eina_magic_strings_alloc(); - if (!ems) - return EINA_FALSE; - - ems->magic = magic; - ems->string_allocated = EINA_FALSE; - ems->string = magic_name; - - _eina_magic_strings_dirty = 1; - return EINA_TRUE; -} - -#ifdef eina_magic_fail -#undef eina_magic_fail -#endif - -/** - * @brief Display a message or abort is a magic check failed. - * - * @param d The checked data pointer. - * @param m The magic identifer to check. - * @param req_m The requested magic identifier to check. - * @param file The file in which the magic check failed. - * @param fnc The function in which the magic check failed. - * @param line The line at which the magic check failed. - * - * This function displays an error message if a magic check has - * failed, using the following logic in the following order: - * @li If @p d is @c NULL, a message warns about a @c NULL pointer. - * @li Otherwise, if @p m is equal to #EINA_MAGIC_NONE, a message - * warns about a handle that was already freed. - * @li Otherwise, if @p m is equal to @p req_m, a message warns about - * a handle that is of wrong type. - * @li Otherwise, a message warns you about ab-using that function... - * - * If the environment variable EINA_ERROR_ABORT is set, abort() is - * called and the program stops. It is useful for debugging programs - * with gdb. - */ -EAPI void -eina_magic_fail(void *d, - Eina_Magic m, - Eina_Magic req_m, - const char *file, const char *fnc, int line) -{ - if (!d) - eina_log_print(EINA_LOG_DOMAIN_GLOBAL, - EINA_LOG_LEVEL_CRITICAL, file, fnc, line, - "*** Eina Magic Check Failed !!!\n" - " Input handle pointer is NULL !\n" - "*** NAUGHTY PROGRAMMER!!!\n" - "*** SPANK SPANK SPANK!!!\n" - "*** Now go fix your code. Tut tut tut!\n" - "\n"); - else if (m == EINA_MAGIC_NONE) - eina_log_print(EINA_LOG_DOMAIN_GLOBAL, - EINA_LOG_LEVEL_CRITICAL, file, fnc, line, - "*** Eina Magic Check Failed !!!\n" - " Input handle has already been freed!\n" - "*** NAUGHTY PROGRAMMER!!!\n" - "*** SPANK SPANK SPANK!!!\n" - "*** Now go fix your code. Tut tut tut!\n" - "\n"); - else if (m != req_m) - eina_log_print(EINA_LOG_DOMAIN_GLOBAL, - EINA_LOG_LEVEL_CRITICAL, file, fnc, line, - "*** Eina Magic Check Failed !!!\n" - " Input handle is wrong type\n" - " Expected: %08x - %s\n" - " Supplied: %08x - %s\n" - "*** NAUGHTY PROGRAMMER!!!\n" - "*** SPANK SPANK SPANK!!!\n" - "*** Now go fix your code. Tut tut tut!\n" - "\n", req_m, eina_magic_string_get(req_m), - m, eina_magic_string_get(m)); - else - eina_log_print(EINA_LOG_DOMAIN_GLOBAL, - EINA_LOG_LEVEL_CRITICAL, file, fnc, line, - "*** Eina Magic Check Failed !!!\n" - " Why did you call me !\n" - "*** NAUGHTY PROGRAMMER!!!\n" - "*** SPANK SPANK SPANK!!!\n" - "*** Now go fix your code. Tut tut tut!\n" - "\n"); -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_main.c b/tests/suite/ecore/src/lib/eina_main.c deleted file mode 100644 index 32be0fe653..0000000000 --- a/tests/suite/ecore/src/lib/eina_main.c +++ /dev/null @@ -1,369 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#ifdef EFL_HAVE_POSIX_THREADS -#include -#endif - -#ifdef EFL_HAVE_WIN32_THREADS -#define WIN32_LEAN_AND_MEAN -#include -#undef WIN32_LEAN_AND_MEAN -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_types.h" -#include "eina_main.h" -#include "eina_error.h" -#include "eina_log.h" -#include "eina_hash.h" -#include "eina_binshare.h" -#include "eina_stringshare.h" -#include "eina_ustringshare.h" -#include "eina_list.h" -#include "eina_matrixsparse.h" -#include "eina_array.h" -#include "eina_counter.h" -#include "eina_benchmark.h" -#include "eina_magic.h" -#include "eina_rectangle.h" -#include "eina_safety_checks.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -static Eina_Version _version = { VMAJ, VMIN, VMIC, VREV }; - -static int _eina_main_count = 0; -#ifdef EFL_HAVE_THREADS -static int _eina_main_thread_count = 0; -#endif -static int _eina_log_dom = -1; - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eina_log_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eina_log_dom, __VA_ARGS__) - -#ifdef EFL_HAVE_THREADS -static Eina_Bool _threads_activated = EINA_FALSE; -#ifdef EFL_HAVE_POSIX_THREADS -static pthread_mutex_t _mutex = PTHREAD_MUTEX_INITIALIZER; -#define LOCK() if(_threads_activated) pthread_mutex_lock(&_mutex) -#define UNLOCK() if(_threads_activated) pthread_mutex_unlock(&_mutex) -#define UNLOCK_FORCE() pthread_mutex_unlock(&_mutex) -#else /* EFL_HAVE_WIN32_THREADS */ -static HANDLE _mutex = NULL; -#define LOCK() if(_threads_activated) WaitForSingleObject(_mutex, INFINITE) -#define UNLOCK() if(_threads_activated) ReleaseMutex(_mutex) -#define UNLOCK_FORCE() ReleaseMutex(_mutex) -#endif -#else -#define LOCK() do {} while (0) -#define UNLOCK() do {} while (0) -#define UNLOCK_FORCE() do {} while (0) -#endif - -/* place module init/shutdown functions here to avoid other modules - * calling them by mistake. - */ -#define S(x) extern Eina_Bool eina_ ## x ## _init(void); \ - extern Eina_Bool eina_ ## x ## _shutdown(void) -S(log); -S(error); -S(safety_checks); -S(magic_string); -S(iterator); -S(accessor); -S(array); -S(module); -S(mempool); -S(list); -S(binshare); -S(stringshare); -S(ustringshare); -S(matrixsparse); -S(convert); -S(counter); -S(benchmark); -S(rectangle); -S(strbuf); -S(ustrbuf); -S(quadtree); -#undef S - -struct eina_desc_setup { - const char *name; - Eina_Bool(*init) (void); - Eina_Bool(*shutdown) (void); -}; - -static const struct eina_desc_setup _eina_desc_setup[] = { -#define S(x) {# x, eina_ ## x ## _init, eina_ ## x ## _shutdown} - /* log is a special case as it needs printf */ - S(error), - S(safety_checks), - S(magic_string), - S(iterator), - S(accessor), - S(array), - S(module), - S(mempool), - S(list), - S(binshare), - S(stringshare), - S(ustringshare), - S(matrixsparse), - S(convert), - S(counter), - S(benchmark), - S(rectangle), - S(strbuf), - S(ustrbuf), - S(quadtree) -#undef S -}; - -static const size_t _eina_desc_setup_len = sizeof(_eina_desc_setup) / - sizeof(_eina_desc_setup[0]); - -static void _eina_shutdown_from_desc(const struct eina_desc_setup *itr) -{ - for (itr--; itr >= _eina_desc_setup; itr--) { - if (!itr->shutdown()) - ERR("Problems shutting down eina module '%s', ignored.", itr->name); - } - - eina_log_domain_unregister(_eina_log_dom); - _eina_log_dom = -1; - eina_log_shutdown(); -} - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Main_Group Main - * - * @brief These functions provide general initialisation and shut down - * functions. - * - * @{ - */ - -/** - * @var eina_version - * @brief Eina version (defined at configuration time) - */ -EAPI Eina_Version *eina_version = &_version; - -/** - * @brief Initialize the Eina library. - * - * @return 1 or greater on success, 0 on error. - * - * This function sets up all the eina modules. It returns 0 on - * failure (that is, when one of the module fails to initialize), - * otherwise it returns the number of times it has already been - * called. - * - * When Eina is not used anymore, call eina_shutdown() to shut down - * the Eina library. - */ -EAPI int eina_init(void) -{ - const struct eina_desc_setup *itr, *itr_end; - - if (EINA_LIKELY(_eina_main_count > 0)) - return ++_eina_main_count; - - if (!eina_log_init()) { - fprintf(stderr, - "Could not initialize eina logging system.\n"); - return 0; - } - - _eina_log_dom = - eina_log_domain_register("eina", EINA_LOG_COLOR_DEFAULT); - if (_eina_log_dom < 0) { - EINA_LOG_ERR("Could not register log domain: eina"); - eina_log_shutdown(); - return 0; - } - - itr = _eina_desc_setup; - itr_end = itr + _eina_desc_setup_len; - for (; itr < itr_end; itr++) { - if (!itr->init()) { - ERR("Could not initialize eina module '%s'.", - itr->name); - _eina_shutdown_from_desc(itr); - return 0; - } - } - - _eina_main_count = 1; - return 1; -} - -/** - * @brief Shut down the Eina library. - * - * @return 0 when all the modules is completely shut down, 1 or - * greater otherwise. - * - * This function shuts down the Eina library. It returns 0 when it has - * been called the same number of times than eina_init(). In that case - * it shut down all the Eina modules. - * - * Once this function succeeds (that is, @c 0 is returned), you must - * not call any of the Eina function anymore. You must call - * eina_init() again to use the Eina functions again. - */ -EAPI int eina_shutdown(void) -{ - _eina_main_count--; - if (EINA_UNLIKELY(_eina_main_count == 0)) - _eina_shutdown_from_desc(_eina_desc_setup + - _eina_desc_setup_len); - - return _eina_main_count; -} - - -/** - * @brief Initialize the mutexes of the Eina library. - * - * @return 1 or greater on success, 0 on error. - * - * This function sets up all the mutexes in all eina modules. It returns 0 on - * failure (that is, when one of the module fails to initialize), - * otherwise it returns the number of times it has already been - * called. - * - * When the mutexes are not used anymore, call eina_threads_shutdown() to shut down - * the mutexes. - */ -EAPI int eina_threads_init(void) -{ -#ifdef EFL_HAVE_THREADS - int ret; - -#ifdef EFL_HAVE_WIN32_THREADS - if (!_mutex) - _mutex = CreateMutex(NULL, FALSE, NULL); - - if (!_mutex) - return 0; - -#endif - - LOCK(); - ++_eina_main_thread_count; - ret = _eina_main_thread_count; - - if (_eina_main_thread_count > 1) { - UNLOCK(); - return ret; - } - - eina_share_common_threads_init(); - eina_log_threads_init(); - _threads_activated = EINA_TRUE; - - return ret; -#else - return 0; -#endif -} - -/** - * @brief Shut down mutexes in the Eina library. - * - * @return 0 when all mutexes are completely shut down, 1 or - * greater otherwise. - * - * This function shuts down the mutexes in the Eina library. It returns 0 when it has - * been called the same number of times than eina_threads_init(). In that case - * it shut down all the mutexes. - * - * Once this function succeeds (that is, @c 0 is returned), you must - * not call any of the Eina function in a thread anymore. You must call - * eina_threads_init() again to use the Eina functions in a thread again. - */ -EAPI int eina_threads_shutdown(void) -{ -#ifdef EFL_HAVE_THREADS - int ret; - - LOCK(); - ret = --_eina_main_thread_count; - if (_eina_main_thread_count > 0) { - UNLOCK(); - return ret; - } - - eina_share_common_threads_shutdown(); - eina_log_threads_shutdown(); - - _threads_activated = EINA_FALSE; - - UNLOCK_FORCE(); - -#ifdef EFL_HAVE_WIN32_THREADS - if (_mutex) - CloseHandle(_mutex); - -#endif - - return ret; -#else - return 0; -#endif -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_matrixsparse.c b/tests/suite/ecore/src/lib/eina_matrixsparse.c deleted file mode 100644 index bf88cefe12..0000000000 --- a/tests/suite/ecore/src/lib/eina_matrixsparse.c +++ /dev/null @@ -1,1615 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2009 Gustavo Sverzut Barbieri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - - -/** - * @page tutorial_matrixsparse_page Sparse Matrix Tutorial - * - * to be written... - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_error.h" -#include "eina_log.h" -#include "eina_magic.h" -#include "eina_mempool.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_matrixsparse.h" - - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -static const char EINA_MAGIC_MATRIXSPARSE_STR[] = "Eina Matrixsparse"; -static const char EINA_MAGIC_MATRIXSPARSE_ROW_STR[] = - "Eina Matrixsparse Row"; -static const char EINA_MAGIC_MATRIXSPARSE_CELL_STR[] = - "Eina Matrixsparse Cell"; -static const char EINA_MAGIC_MATRIXSPARSE_ITERATOR_STR[] = - "Eina Matrixsparse Iterator"; -static const char EINA_MAGIC_MATRIXSPARSE_ROW_ACCESSOR_STR[] = - "Eina Matrixsparse Row Accessor"; -static const char EINA_MAGIC_MATRIXSPARSE_ROW_ITERATOR_STR[] = - "Eina Matrixsparse Row Iterator"; -static const char EINA_MAGIC_MATRIXSPARSE_CELL_ACCESSOR_STR[] = - "Eina Matrixsparse Cell Accessor"; -static const char EINA_MAGIC_MATRIXSPARSE_CELL_ITERATOR_STR[] = - "Eina Matrixsparse Cell Iterator"; - - -#define EINA_MAGIC_CHECK_MATRIXSPARSE(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE); \ - return __VA_ARGS__; \ - } \ - } while(0) - -#define EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE_ROW)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE_ROW); \ - return __VA_ARGS__; \ - } \ - } while(0) - -#define EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE_CELL)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE_CELL); \ - return __VA_ARGS__; \ - } \ - } while(0) - -#define EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE_ITERATOR)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE_ITERATOR); \ - return __VA_ARGS__; \ - } \ - } while(0) - -struct _Eina_Matrixsparse_Cell { - Eina_Matrixsparse_Cell *next; - Eina_Matrixsparse_Cell *prev; - - void *data; - unsigned long col; - - Eina_Matrixsparse_Row *parent; - - EINA_MAGIC}; - -struct _Eina_Matrixsparse_Row { - Eina_Matrixsparse_Row *next; - Eina_Matrixsparse_Row *prev; - - Eina_Matrixsparse_Cell *cols; - Eina_Matrixsparse_Cell *last_col; - Eina_Matrixsparse_Cell *last_used; /* fast sequential access */ - unsigned long row; - - Eina_Matrixsparse *parent; - - EINA_MAGIC}; - -struct _Eina_Matrixsparse { - Eina_Matrixsparse_Row *rows; - Eina_Matrixsparse_Row *last_row; - Eina_Matrixsparse_Row *last_used; /* fast sequential access */ - - struct { - unsigned long rows; - unsigned long cols; - } size; - - struct { - void (*func) (void *user_data, void *cell_data); - void *user_data; - } free; - - EINA_MAGIC}; - -typedef struct _Eina_Matrixsparse_Iterator Eina_Matrixsparse_Iterator; -typedef struct _Eina_Matrixsparse_Iterator_Complete - Eina_Matrixsparse_Iterator_Complete; - -struct _Eina_Matrixsparse_Iterator { - Eina_Iterator iterator; - - const Eina_Matrixsparse *m; - struct { - const Eina_Matrixsparse_Row *row; - const Eina_Matrixsparse_Cell *col; - } ref; - - EINA_MAGIC}; - -struct _Eina_Matrixsparse_Iterator_Complete { - Eina_Iterator iterator; - - const Eina_Matrixsparse *m; - struct { - const Eina_Matrixsparse_Row *row; - const Eina_Matrixsparse_Cell *col; - } ref; - - struct { - unsigned long row, col; - } idx; - - struct { - Eina_Matrixsparse_Row row; - Eina_Matrixsparse_Cell col; - } dummy; - - EINA_MAGIC}; - -/** - * @todo Eina_Matrixsparse_Row_Iterator: iterator over rows in matrix - * @todo Eina_Matrixsparse_Row_Accessor: accessor over rows in matrix - * @todo Eina_Matrixsparse_Cell_Iterator: iterator over cells in row - * @todo Eina_Matrixsparse_Cell_Accessor: accessor over cells in row - */ - -static int _eina_matrixsparse_log_dom = -1; - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eina_matrixsparse_log_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eina_matrixsparse_log_dom, __VA_ARGS__) - -static Eina_Mempool *_eina_matrixsparse_cell_mp = NULL; -static Eina_Mempool *_eina_matrixsparse_row_mp = NULL; - -static inline void -_eina_matrixsparse_cell_free(Eina_Matrixsparse_Cell * c, - void (*free_func) (void *, void *), - void *user_data) -{ - if (free_func) - free_func(user_data, c->data); - - EINA_MAGIC_SET(c, EINA_MAGIC_NONE); - eina_mempool_free(_eina_matrixsparse_cell_mp, c); -} - -static inline void -_eina_matrixsparse_cell_unlink(Eina_Matrixsparse_Cell * c) -{ - Eina_Matrixsparse_Row *r = c->parent; - - if (r->last_used == c) { - if (c->next) - r->last_used = c->next; - else - r->last_used = c->prev; - } - - if (r->last_col == c) - r->last_col = c->prev; - - if (r->cols == c) - r->cols = c->next; - - if (c->next && c->prev) { - c->next->prev = c->prev; - c->prev->next = c->next; - } else if (c->next) - c->next->prev = NULL; - else if (c->prev) - c->prev->next = NULL; -} - -static inline void -_eina_matrixsparse_row_cells_free(Eina_Matrixsparse_Row * r, - void (*free_func) (void *, void *), - void *user_data) -{ - Eina_Matrixsparse_Cell *c = r->cols; - while (c) { - Eina_Matrixsparse_Cell *c_aux = c; - c = c->next; - _eina_matrixsparse_cell_free(c_aux, free_func, user_data); - } -} - -static inline void -_eina_matrixsparse_row_free(Eina_Matrixsparse_Row * r, - void (*free_func) (void *, void *), - void *user_data) -{ - _eina_matrixsparse_row_cells_free(r, free_func, user_data); - EINA_MAGIC_SET(r, EINA_MAGIC_NONE); - eina_mempool_free(_eina_matrixsparse_row_mp, r); -} - -static inline void _eina_matrixsparse_row_unlink(Eina_Matrixsparse_Row * r) -{ - Eina_Matrixsparse *m = r->parent; - - if (m->last_used == r) { - if (r->next) - m->last_used = r->next; - else - m->last_used = r->prev; - } - - if (m->last_row == r) - m->last_row = r->prev; - - if (m->rows == r) - m->rows = r->next; - - if (r->next && r->prev) { - r->next->prev = r->prev; - r->prev->next = r->next; - } else if (r->next) - r->next->prev = NULL; - else if (r->prev) - r->prev->next = NULL; -} - -static inline void -_eina_matrixsparse_row_find_parms_get(const Eina_Matrixsparse * m, - unsigned long row, - Eina_Matrixsparse_Row ** p_r, - int *p_dir) -{ - Eina_Matrixsparse_Row *r; - unsigned long dist; - int dir; - - dist = row - m->rows->row; - r = m->rows; - dir = 1; - if (dist > m->last_row->row - row) { - dist = m->last_row->row - row; - r = m->last_row; - dir = -1; - } - - if (m->last_used) { - if (m->last_used->row < row) { - if (dist > row - m->last_used->row) { -/* dist = row = m->last_used->row; */ - r = m->last_used; - dir = 1; - } - } else if (dist > m->last_used->row - row) { -/* dist = m->last_used->row - row; */ - r = m->last_used; - dir = -1; - } - } - - *p_r = r; - *p_dir = dir; -} - -static inline void -_eina_matrixsparse_row_cell_find_parms_get(const Eina_Matrixsparse_Row * r, - unsigned long col, - Eina_Matrixsparse_Cell ** p_c, - int *p_dir) -{ - Eina_Matrixsparse_Cell *c; - unsigned long dist; - int dir; - - dist = col - r->cols->col; - c = r->cols; - dir = 1; - if (dist > r->last_col->col - col) { - dist = r->last_col->col - col; - c = r->last_col; - dir = -1; - } - - if (r->last_used) { - if (r->last_used->col < col) { - if (dist > col - r->last_used->col) { -/* dist = col = r->last_used->col; */ - c = r->last_used; - dir = 1; - } - } else if (dist > r->last_used->col - col) { -/* dist = r->last_used->col - col; */ - c = r->last_used; - dir = -1; - } - } - - *p_c = c; - *p_dir = dir; -} - -static inline Eina_Matrixsparse_Row *_eina_matrixsparse_row_idx_get(const - Eina_Matrixsparse - * m, - unsigned - long - row) -{ - Eina_Matrixsparse_Row *r; - int dir; - - if (!m->rows) - return NULL; - - if (m->rows->row == row) - return m->rows; - else if (m->rows->row > row) - return NULL; - - if (m->last_row->row == row) - return m->last_row; - else if (m->last_row->row < row) - return NULL; - - if ((m->last_used) && (m->last_used->row == row)) - return m->last_used; - - _eina_matrixsparse_row_find_parms_get(m, row, &r, &dir); - assert(dir != 0); - if (dir > 0) { - for (; r; r = r->next) - if (r->row == row) { - ((Eina_Matrixsparse *) m)->last_used = r; - return r; - } else if (r->row > row) - return NULL; - - } else if (dir < 0) { - for (; r; r = r->prev) - if (r->row == row) { - ((Eina_Matrixsparse *) m)->last_used = r; - return r; - } else if (r->row < row) - return NULL; - } - - return NULL; -} - -static inline Eina_Matrixsparse_Cell - *_eina_matrixsparse_row_cell_idx_get(const Eina_Matrixsparse_Row * r, - unsigned long col) -{ - Eina_Matrixsparse_Cell *c; - int dir; - - if (!r->cols) - return NULL; - - if (r->cols->col == col) - return r->cols; - else if (r->cols->col > col) - return NULL; - - if (r->last_col->col == col) - return r->last_col; - else if (r->last_col->col < col) - return NULL; - - if ((r->last_used) && (r->last_used->col == col)) - return r->last_used; - - _eina_matrixsparse_row_cell_find_parms_get(r, col, &c, &dir); - assert(dir != 0); - if (dir > 0) { - for (; r; c = c->next) - if (c->col == col) { - ((Eina_Matrixsparse_Row *) r)->last_used = - c; - return c; - } else if (c->col > col) - return NULL; - - } else if (dir < 0) { - for (; r; c = c->prev) - if (c->col == col) { - ((Eina_Matrixsparse_Row *) r)->last_used = - c; - return c; - } else if (c->col < col) - return NULL; - } - - return NULL; -} - -static inline Eina_Matrixsparse_Cell *_eina_matrixsparse_cell_idx_get(const - Eina_Matrixsparse - * m, - unsigned - long - row, - unsigned - long - col) -{ - Eina_Matrixsparse_Row *r = _eina_matrixsparse_row_idx_get(m, row); - if (!r) - return NULL; - - return _eina_matrixsparse_row_cell_idx_get(r, col); -} - -static inline void -_eina_matrixsparse_row_idx_siblings_find(const Eina_Matrixsparse * m, - unsigned long row, - Eina_Matrixsparse_Row ** p_prev, - Eina_Matrixsparse_Row ** p_next) -{ - Eina_Matrixsparse_Row *r; - int dir; - - _eina_matrixsparse_row_find_parms_get(m, row, &r, &dir); - assert(dir != 0); - if (dir > 0) { - for (; r; r = r->next) - if (r->row > row) - break; - - assert(r != NULL); - *p_prev = r->prev; - *p_next = r; - } else if (dir < 0) { - for (; r; r = r->prev) - if (r->row < row) - break; - - assert(r != NULL); - *p_prev = r; - *p_next = r->next; - } -} - -static inline void -_eina_matrixsparse_row_cell_idx_siblings_find(const Eina_Matrixsparse_Row * - r, unsigned long col, - Eina_Matrixsparse_Cell ** - p_prev, - Eina_Matrixsparse_Cell ** - p_next) -{ - Eina_Matrixsparse_Cell *c; - int dir; - - _eina_matrixsparse_row_cell_find_parms_get(r, col, &c, &dir); - assert(dir != 0); - if (dir > 0) { - for (; c; c = c->next) - if (c->col > col) - break; - - assert(c != NULL); - *p_prev = c->prev; - *p_next = c; - } else if (dir < 0) { - for (; c; c = c->prev) - if (c->col < col) - break; - - assert(c != NULL); - *p_prev = c; - *p_next = c->next; - } -} - -static inline Eina_Matrixsparse_Row - *_eina_matrixsparse_row_idx_add(Eina_Matrixsparse * m, - unsigned long row) -{ - Eina_Matrixsparse_Row *r = eina_mempool_malloc - (_eina_matrixsparse_row_mp, sizeof(Eina_Matrixsparse_Row)); - if (!r) - return NULL; - - if (!m->rows) { - r->prev = NULL; - r->next = NULL; - m->rows = r; - m->last_row = r; - } else if (row < m->rows->row) { - r->prev = NULL; - r->next = m->rows; - m->rows->prev = r; - m->rows = r; - } else if (row > m->last_row->row) { - r->prev = m->last_row; - m->last_row->next = r; - r->next = NULL; - m->last_row = r; - } else { - Eina_Matrixsparse_Row *prev = NULL, *next = NULL; - _eina_matrixsparse_row_idx_siblings_find(m, row, &prev, - &next); - assert(prev != NULL); - assert(next != NULL); - r->prev = prev; - r->next = next; - prev->next = r; - next->prev = r; - } - - r->cols = NULL; - r->last_col = NULL; - r->last_used = NULL; - r->row = row; - r->parent = m; - EINA_MAGIC_SET(r, EINA_MAGIC_MATRIXSPARSE_ROW); - m->last_used = r; - return r; -} - -static inline Eina_Matrixsparse_Cell - *_eina_matrixsparse_row_cell_idx_add(Eina_Matrixsparse_Row * r, - unsigned long col, - const void *data) -{ - Eina_Matrixsparse_Cell *c = eina_mempool_malloc - (_eina_matrixsparse_cell_mp, sizeof(Eina_Matrixsparse_Cell)); - if (!c) - return NULL; - - if (!r->cols) { - c->prev = NULL; - c->next = NULL; - r->cols = c; - r->last_col = c; - } else if (col < r->cols->col) { - c->prev = NULL; - c->next = r->cols; - r->cols->prev = c; - r->cols = c; - } else if (col > r->last_col->col) { - c->prev = r->last_col; - r->last_col->next = c; - c->next = NULL; - r->last_col = c; - } else { - Eina_Matrixsparse_Cell *prev = NULL, *next = NULL; - _eina_matrixsparse_row_cell_idx_siblings_find(r, col, - &prev, - &next); - assert(prev != NULL); - assert(next != NULL); - c->prev = prev; - c->next = next; - prev->next = c; - next->prev = c; - } - - c->data = (void *) data; - c->col = col; - c->parent = r; - EINA_MAGIC_SET(c, EINA_MAGIC_MATRIXSPARSE_CELL); - r->last_used = c; - return c; -} - -static inline Eina_Bool -_eina_matrixsparse_cell_idx_add(Eina_Matrixsparse * m, - unsigned long row, - unsigned long col, const void *data) -{ - Eina_Matrixsparse_Row *r = _eina_matrixsparse_row_idx_get(m, row); - if (!r) - r = _eina_matrixsparse_row_idx_add(m, row); - - if (!r) - return 0; - - if (_eina_matrixsparse_row_cell_idx_add(r, col, data)) - return 1; - - if (r->cols) - return 0; - - _eina_matrixsparse_row_unlink(r); - _eina_matrixsparse_row_free(r, m->free.func, m->free.user_data); - return 0; -} - -/*============================================================================* -* Iterators * -*============================================================================*/ -static Eina_Bool -_eina_matrixsparse_iterator_next(Eina_Matrixsparse_Iterator * it, - void **data) -{ - EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, EINA_FALSE); - - /* do not touch it->idx */ - - if (!it->ref.col) - return 0; - - *data = (Eina_Matrixsparse_Cell *) it->ref.col; - - it->ref.col = it->ref.col->next; - if (!it->ref.col) { - it->ref.row = it->ref.row->next; - if (it->ref.row) - it->ref.col = it->ref.row->cols; - } - - return 1; -} - -static Eina_Matrixsparse - *_eina_matrixsparse_iterator_get_container(Eina_Matrixsparse_Iterator * - it) -{ - EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, NULL); - return (Eina_Matrixsparse *) it->m; -} - -static void -_eina_matrixsparse_iterator_free(Eina_Matrixsparse_Iterator * it) -{ - EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it); - EINA_MAGIC_SET(it, EINA_MAGIC_NONE); - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_NONE); - free(it); -} - -static Eina_Bool -_eina_matrixsparse_iterator_complete_next -(Eina_Matrixsparse_Iterator_Complete * it, void **data) -{ - EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, EINA_FALSE); - - if (it->idx.row >= it->m->size.rows) - return 0; - - if (it->dummy.col.data) - ERR("Last iterator call changed dummy cell!"); - - if ((it->ref.col) && - (it->ref.col->col == it->idx.col) && - (it->ref.row->row == it->idx.row)) { - *data = (Eina_Matrixsparse_Cell *) it->ref.col; - it->ref.col = it->ref.col->next; - if (!it->ref.col) { - it->ref.row = it->ref.row->next; - if (it->ref.row) - it->ref.col = it->ref.row->cols; - } - } else { - it->dummy.col.data = NULL; - it->dummy.col.col = it->idx.col; - it->dummy.row.row = it->idx.row; - *data = &it->dummy.col; - } - - it->idx.col++; - if (it->idx.col == it->m->size.cols) { - it->idx.col = 0; - it->idx.row++; - } - - return 1; -} - -static Eina_Matrixsparse - *_eina_matrixsparse_iterator_complete_get_container - (Eina_Matrixsparse_Iterator_Complete * it) -{ - EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, NULL); - return (Eina_Matrixsparse *) it->m; -} - -static void -_eina_matrixsparse_iterator_complete_free -(Eina_Matrixsparse_Iterator_Complete * it) -{ - EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it); - - if (it->dummy.col.data) - ERR("Last iterator call changed dummy cell!"); - - EINA_MAGIC_SET(it, EINA_MAGIC_NONE); - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_NONE); - free(it); -} - - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the matrixsparse module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the matrixsparse module of Eina. It is called by - * eina_init(). - * - * This function creates mempool to speed up matrix rows and cells - * management, using EINA_MEMPOOL environment variable if it is set to - * choose the memory pool type to use. - * - * @see eina_init() - */ -Eina_Bool eina_matrixsparse_init(void) -{ - const char *choice, *tmp; - - _eina_matrixsparse_log_dom = - eina_log_domain_register("eina_matrixsparse", - EINA_LOG_COLOR_DEFAULT); - if (_eina_matrixsparse_log_dom < 0) { - EINA_LOG_ERR - ("Could not register log domain: eina_matrixsparse"); - return EINA_FALSE; - } -#ifdef EINA_DEFAULT_MEMPOOL - choice = "pass_through"; -#else - choice = "chained_mempool"; -#endif - tmp = getenv("EINA_MEMPOOL"); - if (tmp && tmp[0]) - choice = tmp; - - _eina_matrixsparse_cell_mp = eina_mempool_add - (choice, - "matrixsparse_cell", - NULL, sizeof(Eina_Matrixsparse_Cell), 120); - if (!_eina_matrixsparse_cell_mp) { - ERR("Mempool for matrixsparse_cell cannot be allocated in matrixsparse init."); - goto on_init_fail; - } - - _eina_matrixsparse_row_mp = eina_mempool_add - (choice, "matrixsparse_row", NULL, - sizeof(Eina_Matrixsparse_Row), 120); - if (!_eina_matrixsparse_row_mp) { - ERR("Mempool for matrixsparse_row cannot be allocated in matrixsparse init."); - goto on_init_fail; - } -#define EMS(n) eina_magic_string_static_set(n, n ## _STR) - EMS(EINA_MAGIC_MATRIXSPARSE); - EMS(EINA_MAGIC_MATRIXSPARSE_ROW); - EMS(EINA_MAGIC_MATRIXSPARSE_CELL); - EMS(EINA_MAGIC_MATRIXSPARSE_ITERATOR); - EMS(EINA_MAGIC_MATRIXSPARSE_ROW_ACCESSOR); - EMS(EINA_MAGIC_MATRIXSPARSE_ROW_ITERATOR); - EMS(EINA_MAGIC_MATRIXSPARSE_CELL_ACCESSOR); - EMS(EINA_MAGIC_MATRIXSPARSE_CELL_ITERATOR); -#undef EMS - - return EINA_TRUE; - - on_init_fail: - eina_log_domain_unregister(_eina_matrixsparse_log_dom); - _eina_matrixsparse_log_dom = -1; - return EINA_FALSE; -} - -/** - * @internal - * @brief Shut down the matrixsparse module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the matrixsparse module set up by - * eina_matrixsparse_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_matrixsparse_shutdown(void) -{ - eina_mempool_del(_eina_matrixsparse_row_mp); - eina_mempool_del(_eina_matrixsparse_cell_mp); - - eina_log_domain_unregister(_eina_matrixsparse_log_dom); - _eina_matrixsparse_log_dom = -1; - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Matrixsparse_Group Sparse Matrix - * - * @brief These functions provide matrix sparse management. - * - * For more information, you can look at the @ref tutorial_matrixsparse_page. - * - * @{ - */ - -/** - * @brief Create a new Sparse Matrix. - * - * @param rows number of rows in matrix. Operations with rows greater than this - * value will fail. - * @param cols number of columns in matrix. Operations with columns greater - * than this value will fail. - * @param free_func used to delete cell data contents, used by - * eina_matrixsparse_free(), eina_matrixsparse_size_set(), - * eina_matrixsparse_row_idx_clear(), - * eina_matrixsparse_column_idx_clear(), - * eina_matrixsparse_cell_idx_clear() and possible others. - * @param user_data given to @a free_func as first parameter. - * - * @return newly allocated matrix or NULL if allocation failed and eina_error - * is set. - */ -EAPI Eina_Matrixsparse *eina_matrixsparse_new(unsigned long rows, - unsigned long cols, - void (*free_func) (void - *user_data, - void - *cell_data), - const void *user_data) -{ - Eina_Matrixsparse *m; - - EINA_SAFETY_ON_FALSE_RETURN_VAL(rows > 0, NULL); - EINA_SAFETY_ON_FALSE_RETURN_VAL(cols > 0, NULL); - - m = malloc(sizeof(Eina_Matrixsparse)); - if (!m) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - EINA_MAGIC_SET(m, EINA_MAGIC_MATRIXSPARSE); - - m->rows = NULL; - m->last_row = NULL; - m->last_used = NULL; - - m->size.rows = rows; - m->size.cols = cols; - m->free.func = free_func; - m->free.user_data = (void *) user_data; - - eina_error_set(0); - return m; -} - -/** - * @brief Free resources allocated to Sparse Matrix. - * - * @param m The Sparse Matrix instance to free, must @b not be @c NULL. - */ -EAPI void eina_matrixsparse_free(Eina_Matrixsparse * m) -{ - void (*free_func) (void *, void *); - void *user_data; - - Eina_Matrixsparse_Row *r; - EINA_MAGIC_CHECK_MATRIXSPARSE(m); - - free_func = m->free.func; - user_data = m->free.user_data; - - r = m->rows; - while (r) { - Eina_Matrixsparse_Row *r_aux = r; - r = r->next; - _eina_matrixsparse_row_free(r_aux, free_func, user_data); - } - - EINA_MAGIC_SET(m, EINA_MAGIC_NONE); - free(m); -} - -/** - * @brief Get the current size of Sparse Matrix. - * - * The given parameters are guaranteed to be set if they're not NULL, - * even if this function fails (ie: @a m is not a valid matrix instance). - * - * @param m the sparse matrix to operate on. - * @param rows returns the number of rows, may be NULL. If @a m is invalid, - * returned value is zero, otherwise it's a positive integer. - * @param cols returns the number of columns, may be NULL. If @a m is - * invalid, returned value is zero, otherwise it's a positive integer. - */ -EAPI void -eina_matrixsparse_size_get(const Eina_Matrixsparse * m, - unsigned long *rows, unsigned long *cols) -{ - if (rows) - *rows = 0; - - if (cols) - *cols = 0; - - EINA_MAGIC_CHECK_MATRIXSPARSE(m); - if (rows) - *rows = m->size.rows; - - if (cols) - *cols = m->size.cols; -} - -/** - * @brief Resize the Sparse Matrix. - * - * This will resize the sparse matrix, possibly freeing cells on rows - * and columns that will cease to exist. - * - * @param m the sparse matrix to operate on. - * @param rows the new number of rows, must be greater than zero. - * @param cols the new number of columns, must be greater than zero. - * @return 1 on success, 0 on failure. - * - * @warning cells, rows or columns are not reference counted and thus - * after this call any reference might be invalid if instance were - * freed. - */ -EAPI Eina_Bool -eina_matrixsparse_size_set(Eina_Matrixsparse * m, - unsigned long rows, unsigned long cols) -{ - Eina_Bool update_last_used_row; - Eina_Matrixsparse_Row *r; - void (*free_func) (void *, void *); - void *user_data; - - EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); - EINA_SAFETY_ON_FALSE_RETURN_VAL(rows > 0, 0); - EINA_SAFETY_ON_FALSE_RETURN_VAL(cols > 0, 0); - - if ((rows == m->size.rows) && (cols == m->size.cols)) - return 1; - - update_last_used_row = ((m->last_used) - && (m->last_used->row >= rows)); - free_func = m->free.func; - user_data = m->free.user_data; - - r = m->last_row; - while (r && r->row >= rows) { - Eina_Matrixsparse_Row *r_aux = r; - r = r->prev; - _eina_matrixsparse_row_free(r_aux, free_func, user_data); - } - if (!r) { - m->last_row = NULL; - m->rows = NULL; - } else if (r != m->last_row) { - r->next = NULL; - m->last_row = r; - } - - if (update_last_used_row) - m->last_used = m->last_row; - - r = m->rows; - while (r) { - Eina_Matrixsparse_Cell *c = r->last_col; - Eina_Bool update_last_used_col; - update_last_used_col = ((r->last_used) - && (r->last_used->col >= cols)); - while (c && c->col >= cols) { - Eina_Matrixsparse_Cell *c_aux = c; - c = c->prev; - _eina_matrixsparse_cell_free(c_aux, free_func, - user_data); - } - if (!c) { - Eina_Matrixsparse_Row *r_aux = r; - r->cols = NULL; - r->last_col = NULL; - if (r->next) - r->next->prev = r->prev; - else - m->last_row = r->prev; - - if (r->prev) - r->prev->next = r->next; - else - m->rows = r->next; - - r = r->next; - _eina_matrixsparse_row_free(r_aux, free_func, - user_data); - } else { - if (c != r->last_col) { - c->next = NULL; - r->last_col = c; - } - - if (update_last_used_col) - r->last_used = r->last_col; - - r = r->next; - } - } - - update_last_used_row = 0; - if (m->last_used) { - if (m->last_row) - update_last_used_row = - m->last_used->row > m->last_row->row; - else - update_last_used_row = 1; - } - - if (update_last_used_row) - m->last_used = m->last_row; - - m->size.rows = rows; - m->size.cols = cols; - return 1; -} - -/** - * Get the cell reference inside Sparse Matrix. - * - * @param m the sparse matrix to operate on. - * @param row the new number of row to clear. - * @param col the new number of column to clear. - * @param cell pointer to return cell reference, if any exists. - * - * @return 1 on success, 0 on failure. It is considered success if did not - * exist but index is inside matrix size, in this case @c *cell == NULL - * - * @see eina_matrixsparse_cell_data_get() - * @see eina_matrixsparse_data_idx_get() - */ -EAPI Eina_Bool -eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse * m, - unsigned long row, - unsigned long col, - Eina_Matrixsparse_Cell ** cell) -{ - EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); - EINA_SAFETY_ON_NULL_RETURN_VAL(cell, 0); - *cell = NULL; - EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0); - EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0); - *cell = _eina_matrixsparse_cell_idx_get(m, row, col); - return 1; -} - -/** - * Get data associated with given cell reference. - * - * @param cell given cell reference, must @b not be @c NULL. - * - * @return data associated with given cell. - * - * @see eina_matrixsparse_cell_idx_get() - * @see eina_matrixsparse_data_idx_get() - */ -EAPI void *eina_matrixsparse_cell_data_get(const Eina_Matrixsparse_Cell * - cell) -{ - EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, NULL); - return cell->data; -} - -/** - * Get data associated with given cell given its indexes. - * - * @param m the sparse matrix to operate on. - * @param row the new number of row to clear. - * @param col the new number of column to clear. - * - * @return data associated with given cell or NULL if nothing is associated. - * - * @see eina_matrixsparse_cell_idx_get() - * @see eina_matrixsparse_cell_data_get() - */ -EAPI void *eina_matrixsparse_data_idx_get(const Eina_Matrixsparse * m, - unsigned long row, - unsigned long col) -{ - Eina_Matrixsparse_Cell *c; - EINA_MAGIC_CHECK_MATRIXSPARSE(m, NULL); - c = _eina_matrixsparse_cell_idx_get(m, row, col); - if (c) - return c->data; - else - return NULL; -} - -/** - * Get position (indexes) of the given cell. - * - * @param cell the cell reference, must @b not be @c NULL. - * @param row where to store cell row number, may be @c NULL. - * @param col where to store cell column number, may be @c NULL. - * - * @return 1 on success, 0 otherwise (@c cell is @c NULL). - */ -EAPI Eina_Bool -eina_matrixsparse_cell_position_get(const Eina_Matrixsparse_Cell * cell, - unsigned long *row, unsigned long *col) -{ - if (row) - *row = 0; - - if (col) - *col = 0; - - EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0); - EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0); - if (row) - *row = cell->parent->row; - - if (col) - *col = cell->col; - - return 1; -} - -/** - * Change cell reference value without freeing the possibly existing old value. - * - * @param cell the cell reference, must @b not be @c NULL. - * @param data new data to set. - * @param p_old returns the old value intact (not freed). - * - * @return 1 on success, 0 otherwise (@a cell is @c NULL). - * - * @see eina_matrixsparse_cell_data_set() - * @see eina_matrixsparse_data_idx_replace() - */ -EAPI Eina_Bool -eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell * cell, - const void *data, void **p_old) -{ - if (p_old) - *p_old = NULL; - - EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0); - - if (p_old) - *p_old = cell->data; - - cell->data = (void *) data; - return 1; -} - -/** - * Change cell value freeing the possibly existing old value. - * - * In contrast to eina_matrixsparse_cell_data_replace(), this function will - * call @c free_func() on existing value. - * - * @param cell the cell reference, must @b not be @c NULL. - * @param data new data to set. - * - * @return 1 on success, 0 otherwise (@a cell is @c NULL). - * - * @see eina_matrixsparse_cell_data_replace() - * @see eina_matrixsparse_data_idx_set() - */ -EAPI Eina_Bool -eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell * cell, - const void *data) -{ - Eina_Matrixsparse *m; - - EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0); - EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0); - EINA_MAGIC_CHECK_MATRIXSPARSE(cell->parent->parent, 0); - - m = cell->parent->parent; - - if (m->free.func) - m->free.func(m->free.user_data, cell->data); - - cell->data = (void *) data; - return 1; -} - -/** - * Change cell value without freeing the possibly existing old value, using - * indexes. - * - * @param m the sparse matrix, must @b not be @c NULL. - * @param row the row number to set the value. - * @param col the column number to set the value. - * @param data new data to set. - * @param p_old returns the old value intact (not freed). - * - * @return 1 on success, 0 otherwise (@a m is @c NULL, indexes are not valid). - * - * @see eina_matrixsparse_cell_data_replace() - * @see eina_matrixsparse_data_idx_set() - */ -EAPI Eina_Bool -eina_matrixsparse_data_idx_replace(Eina_Matrixsparse * m, - unsigned long row, - unsigned long col, - const void *data, void **p_old) -{ - Eina_Matrixsparse_Cell *cell; - - if (p_old) - *p_old = NULL; - - EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); - EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0); - EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0); - - cell = _eina_matrixsparse_cell_idx_get(m, row, col); - if (cell) { - if (p_old) - *p_old = cell->data; - - cell->data = (void *) data; - return 1; - } - - return _eina_matrixsparse_cell_idx_add(m, row, col, data); -} - -/** - * Change cell value freeing the possibly existing old value, using - * indexes. - * - * In contrast to eina_matrixsparse_data_idx_replace(), this function will - * call @c free_func() on existing value. - * - * @param m the sparse matrix, must @b not be @c NULL. - * @param row the row number to set the value. - * @param col the column number to set the value. - * @param data new data to set. - * - * @return 1 on success, 0 otherwise (@a m is @c NULL, indexes are not valid). - * - * @see eina_matrixsparse_cell_data_replace() - */ -EAPI Eina_Bool -eina_matrixsparse_data_idx_set(Eina_Matrixsparse * m, - unsigned long row, - unsigned long col, const void *data) -{ - Eina_Matrixsparse_Cell *cell; - - EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); - EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0); - EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0); - - cell = _eina_matrixsparse_cell_idx_get(m, row, col); - if (cell) { - if (m->free.func) - m->free.func(m->free.user_data, cell->data); - - cell->data = (void *) data; - return 1; - } - - return _eina_matrixsparse_cell_idx_add(m, row, col, data); -} - -/** - * Clear (erase all cells) of row given its index. - * - * Existing cells will be cleared with @c free_func() given to - * eina_matrixsparse_new(). - * - * @param m the sparse matrix to operate on. - * @param row the new number of row to clear. - * - * @return 1 on success, 0 on failure. It is considered success if row - * had no cells filled. Failure is asking for clear row outside - * matrix size. - * - * @warning cells, rows or columns are not reference counted and thus - * after this call any reference might be invalid if instance were - * freed. - */ -EAPI Eina_Bool -eina_matrixsparse_row_idx_clear(Eina_Matrixsparse * m, unsigned long row) -{ - Eina_Matrixsparse_Row *r; - - EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); - EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0); - - r = _eina_matrixsparse_row_idx_get(m, row); - if (!r) - return 1; - - _eina_matrixsparse_row_unlink(r); - _eina_matrixsparse_row_free(r, m->free.func, m->free.user_data); - - return 1; -} - -/** - * Clear (erase all cells) of column given its index. - * - * Existing cells will be cleared with @c free_func() given to - * eina_matrixsparse_new(). - * - * @param m the sparse matrix to operate on. - * @param col the new number of column to clear. - * - * @return 1 on success, 0 on failure. It is considered success if column - * had no cells filled. Failure is asking for clear column outside - * matrix size. - * - * @warning cells, rows or columns are not reference counted and thus - * after this call any reference might be invalid if instance were - * freed. - */ -EAPI Eina_Bool -eina_matrixsparse_column_idx_clear(Eina_Matrixsparse * m, - unsigned long col) -{ - Eina_Matrixsparse_Row *r; - void (*free_func) (void *, void *); - void *user_data; - - EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); - EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0); - - free_func = m->free.func; - user_data = m->free.user_data; - - for (r = m->rows; r;) { - Eina_Matrixsparse_Row *r_aux = r; - Eina_Matrixsparse_Cell *c; - - c = _eina_matrixsparse_row_cell_idx_get(r, col); - r = r->next; - - if (!c) - continue; - - if ((r_aux->cols != c) || (r_aux->last_col != c)) { - _eina_matrixsparse_cell_unlink(c); - _eina_matrixsparse_cell_free(c, free_func, - user_data); - } else { - _eina_matrixsparse_row_unlink(r_aux); - _eina_matrixsparse_row_free(r_aux, free_func, - user_data); - } - } - - return 1; -} - -/** - * Clear (erase) cell given its indexes. - * - * Existing cell will be cleared with @c free_func() given to - * eina_matrixsparse_new(). - * - * @param m the sparse matrix to operate on. - * @param row the new number of row to clear. - * @param col the new number of column to clear. - * - * @return 1 on success, 0 on failure. It is considered success if did not - * exist but index is inside matrix size. - * - * @warning cells, rows or columns are not reference counted and thus - * after this call any reference might be invalid if instance were - * freed. Note that this call might delete container column and - * row if this cell was the last remainder. - */ -EAPI Eina_Bool -eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse * m, - unsigned long row, unsigned long col) -{ - Eina_Matrixsparse_Cell *c; - - EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0); - EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0); - EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0); - - c = _eina_matrixsparse_cell_idx_get(m, row, col); - if (!c) - return 1; - - _eina_matrixsparse_cell_unlink(c); - _eina_matrixsparse_cell_free(c, m->free.func, m->free.user_data); - - return 1; -} - -/** - * Clear (erase) cell given its reference. - * - * @param cell the cell reference, must @b not be @c NULL. - * - * @return 1 on success, 0 on failure. - * - * @warning cells, rows or columns are not reference counted and thus - * after this call any reference might be invalid if instance were - * freed. Note that this call might delete container column and - * row if this cell was the last remainder. - */ -EAPI Eina_Bool eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell * cell) -{ - Eina_Matrixsparse *m; - - EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0); - EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0); - EINA_MAGIC_CHECK_MATRIXSPARSE(cell->parent->parent, 0); - - m = cell->parent->parent; - - _eina_matrixsparse_cell_unlink(cell); - _eina_matrixsparse_cell_free(cell, m->free.func, - m->free.user_data); - return 1; -} - -/** - * Creates a new iterator over existing matrix cells. - * - * This is a cheap walk, it will just report existing cells and holes - * in the sparse matrix will be ignored. That means the reported - * indexes will not be sequential. - * - * The iterator data will be the cell reference, one may query current - * position with eina_matrixsparse_cell_position_get() and cell value - * with eina_matrixsparse_cell_data_get(). - * - * @param m The Sparse Matrix reference, must @b not be @c NULL. - * @return A new iterator. - * - * @warning if the matrix structure changes then the iterator becomes - * invalid! That is, if you add or remove cells this iterator - * behavior is undefined and your program may crash! - */ -EAPI Eina_Iterator *eina_matrixsparse_iterator_new(const Eina_Matrixsparse - * m) -{ - Eina_Matrixsparse_Iterator *it; - - it = calloc(1, sizeof(*it)); - if (!it) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - EINA_MAGIC_SET(it, EINA_MAGIC_MATRIXSPARSE_ITERATOR); - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - it->m = m; - it->ref.row = m->rows; - it->ref.col = m->rows ? m->rows->cols : NULL; - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = - FUNC_ITERATOR_NEXT(_eina_matrixsparse_iterator_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER - (_eina_matrixsparse_iterator_get_container); - it->iterator.free = - FUNC_ITERATOR_FREE(_eina_matrixsparse_iterator_free); - return &it->iterator; -} - -/** - * Creates a new iterator over all matrix cells. - * - * Unlike eina_matrixsparse_iterator_new() this one will report all - * matrix cells, even those that are still empty (holes). These will - * be reported as dummy cells that contains no data. - * - * Be aware that iterating a big matrix (1000x1000) will call your - * function that number of times (1000000 times in that case) even if - * your matrix have no elements at all! - * - * The iterator data will be the cell reference, one may query current - * position with eina_matrixsparse_cell_position_get() and cell value - * with eina_matrixsparse_cell_data_get(). If cell is empty then the - * reference will be a dummy/placeholder, thus setting value with - * eina_matrixsparse_cell_data_set() will leave pointer unreferenced. - * - * @param m The Sparse Matrix reference, must @b not be @c NULL. - * @return A new iterator. - * - * @warning if the matrix structure changes then the iterator becomes - * invalid! That is, if you add or remove cells this iterator - * behavior is undefined and your program may crash! - */ -EAPI Eina_Iterator *eina_matrixsparse_iterator_complete_new(const - Eina_Matrixsparse - * m) -{ - Eina_Matrixsparse_Iterator_Complete *it; - - it = calloc(1, sizeof(*it)); - if (!it) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - EINA_MAGIC_SET(it, EINA_MAGIC_MATRIXSPARSE_ITERATOR); - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - it->m = m; - it->idx.row = 0; - it->idx.col = 0; - it->ref.row = m->rows; - it->ref.col = m->rows ? m->rows->cols : NULL; - - it->dummy.row.next = it->dummy.row.prev = NULL; - it->dummy.row.cols = it->dummy.row.last_col = - it->dummy.row.last_used = NULL; - it->dummy.row.parent = (Eina_Matrixsparse *) m; - EINA_MAGIC_SET(&it->dummy.row, EINA_MAGIC_MATRIXSPARSE_ROW); - - it->dummy.col.next = it->dummy.col.prev = NULL; - it->dummy.col.data = NULL; - it->dummy.col.parent = &it->dummy.row; - EINA_MAGIC_SET(&it->dummy.col, EINA_MAGIC_MATRIXSPARSE_CELL); - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = - FUNC_ITERATOR_NEXT(_eina_matrixsparse_iterator_complete_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER - (_eina_matrixsparse_iterator_complete_get_container); - it->iterator.free = - FUNC_ITERATOR_FREE(_eina_matrixsparse_iterator_complete_free); - return &it->iterator; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_mempool.c b/tests/suite/ecore/src/lib/eina_mempool.c deleted file mode 100644 index 1828e76ee6..0000000000 --- a/tests/suite/ecore/src/lib/eina_mempool.c +++ /dev/null @@ -1,393 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_hash.h" -#include "eina_module.h" -#include "eina_log.h" -#include "eina_main.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_mempool.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -static Eina_Hash *_backends; -static Eina_Array *_modules; -static int _eina_mempool_log_dom = -1; - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eina_mempool_log_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eina_mempool_log_dom, __VA_ARGS__) - - -static Eina_Mempool *_new_va(const char *name, - const char *context, - const char *options, va_list args) -{ - Eina_Mempool_Backend *be; - Eina_Mempool *mp; - - Eina_Error err = EINA_ERROR_NOT_MEMPOOL_MODULE; - - eina_error_set(0); - be = eina_hash_find(_backends, name); - if (!be) - goto on_error; - - err = EINA_ERROR_OUT_OF_MEMORY; - mp = calloc(1, sizeof(Eina_Mempool)); - if (!mp) - goto on_error; - - /* FIXME why backend is not a pointer? */ - mp->backend = *be; - mp->backend_data = mp->backend.init(context, options, args); - - return mp; - - on_error: - eina_error_set(err); - return NULL; -} - -/* Built-in backend's prototypes */ -#ifdef EINA_STATIC_BUILD_CHAINED_POOL -Eina_Bool chained_init(void); -void chained_shutdown(void); -#endif - -#ifdef EINA_STATIC_BUILD_PASS_THROUGH -Eina_Bool pass_through_init(void); -void pass_through_shutdown(void); -#endif - -#ifdef EINA_STATIC_BUILD_EMEMOA_UNKNOWN -Eina_Bool ememoa_unknown_init(void); -void ememoa_unknown_shutdown(void); -#endif - -#ifdef EINA_STATIC_BUILD_EMEMOA_FIXED -Eina_Bool ememoa_fixed_init(void); -void ememoa_fixed_shutdown(void); -#endif - -#ifdef EINA_STATIC_BUILD_FIXED_BITMAP -Eina_Bool fixed_bitmap_init(void); -void fixed_bitmap_shutdown(void); -#endif - -#ifdef EINA_STATIC_BUILD_BUDDY -Eina_Bool buddy_init(void); -void buddy_shutdown(void); -#endif - -#ifdef EINA_STATIC_BUILD_ONE_BIG -Eina_Bool one_big_init(void); -void one_big_shutdown(void); -#endif - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -EAPI Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE = 0; - -static const char EINA_ERROR_NOT_MEMPOOL_MODULE_STR[] = - "Not a memory pool module."; - -/** - * @endcond - */ - -EAPI Eina_Bool eina_mempool_register(Eina_Mempool_Backend * be) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(be, 0); - DBG("be=%p, name=%p", be, be->name); - return eina_hash_add(_backends, be->name, be); -} - -EAPI void eina_mempool_unregister(Eina_Mempool_Backend * be) -{ - EINA_SAFETY_ON_NULL_RETURN(be); - DBG("be=%p, name=%p", be, be->name); - eina_hash_del(_backends, be->name, be); -} - -Eina_Bool eina_mempool_init(void) -{ - char *path; - - _eina_mempool_log_dom = eina_log_domain_register("eina_mempool", - EINA_LOG_COLOR_DEFAULT); - if (_eina_mempool_log_dom < 0) { - EINA_LOG_ERR - ("Could not register log domain: eina_mempool"); - return 0; - } - - EINA_ERROR_NOT_MEMPOOL_MODULE = - eina_error_msg_static_register - (EINA_ERROR_NOT_MEMPOOL_MODULE_STR); - _backends = eina_hash_string_superfast_new(NULL); - - /* dynamic backends */ - _modules = eina_module_arch_list_get(NULL, - PACKAGE_LIB_DIR - "/eina/modules/mp", - MODULE_ARCH); - - path = - eina_module_environment_path_get("HOME", - "/.eina/mp/modules/mp"); - _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH); - if (path) - free(path); - - path = eina_module_environment_path_get("EINA_MODULES_MEMPOOL_DIR", - "/eina/modules/mp"); - _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH); - if (path) - free(path); - - path = eina_module_symbol_path_get((const void *) eina_init, - "/eina/modules/mp"); - _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH); - if (path) - free(path); - - if (!_modules) { - ERR("no mempool modules able to be loaded."); - eina_hash_free(_backends); - goto mempool_init_error; - } - - eina_module_list_load(_modules); - - /* builtin backends */ -#ifdef EINA_STATIC_BUILD_CHAINED_POOL - chained_init(); -#endif -#ifdef EINA_STATIC_BUILD_PASS_THROUGH - pass_through_init(); -#endif -#ifdef EINA_STATIC_BUILD_EMEMOA_UNKNOWN - ememoa_unknown_init(); -#endif -#ifdef EINA_STATIC_BUILD_EMEMOA_FIXED - ememoa_fixed_init(); -#endif -#ifdef EINA_STATIC_BUILD_FIXED_BITMAP - fixed_bitmap_init(); -#endif -#ifdef EINA_STATIC_BUILD_BUDDY - buddy_init(); -#endif -#ifdef EINA_STATIC_BUILD_ONE_BIG - one_big_init(); -#endif - - return EINA_TRUE; - - mempool_init_error: - eina_log_domain_unregister(_eina_mempool_log_dom); - _eina_mempool_log_dom = -1; - - return EINA_FALSE; -} - -Eina_Bool eina_mempool_shutdown(void) -{ - /* builtin backends */ -#ifdef EINA_STATIC_BUILD_CHAINED_POOL - chained_shutdown(); -#endif -#ifdef EINA_STATIC_BUILD_PASS_THROUGH - pass_through_shutdown(); -#endif -#ifdef EINA_STATIC_BUILD_EMEMOA_UNKNOWN - ememoa_unknown_shutdown(); -#endif -#ifdef EINA_STATIC_BUILD_EMEMOA_FIXED - ememoa_fixed_shutdown(); -#endif -#ifdef EINA_STATIC_BUILD_FIXED_BITMAP - fixed_bitmap_shutdown(); -#endif -#ifdef EINA_STATIC_BUILD_BUDDY - buddy_shutdown(); -#endif -#ifdef EINA_STATIC_BUILD_ONE_BIG - one_big_shutdown(); -#endif - /* dynamic backends */ - eina_module_list_free(_modules); - if (_modules) - eina_array_free(_modules); - - if (_backends) - eina_hash_free(_backends); - - eina_log_domain_unregister(_eina_mempool_log_dom); - _eina_mempool_log_dom = -1; - - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Memory_Pool_Group Memory Pool - * - * @brief These functions provide memory pool management. - * - * Several mempool are available: - * - * @li @c buddy: It uses the - * "buddy - * allocator" algorithm but the Eina implementation differs in the - * sense that the chunk information is not stored on the chunk itself, - * but on another memory area. This is useful for cases where the - * memory to manage might be slower to access, or limited (like video - * memory). - * @li @c chained_pool: It is the default one. It allocates a big - * chunk of memory with malloc() and split the result in chunks of the - * requested size that are pushed inside a stack. When requested, it - * takes this pointer from the stack to give them to whoever wants - * them. - * @li @c ememoa_fixed and @c ememoa_unknown: experimental allocators - * which could be useful when a fixed amount of memory is needed. - * @li @c fixed_bitmap: It allocates with malloc) 32* the requested - * size and push the pool pointer in an rbtree. To find empty space in - * a pool, it will just search for the first bit set in an int (32 - * bits). Then, when a pointer is freed, it will do a search inside - * the rbtree. - * @li @c pass_through: it just call malloc() and free(). It may be - * faster on some computers than using our own allocators (like having - * a huge L2 cache, over 4MB). - * @li @c one_big: It call just one time malloc for the requested number - * of items. Usefull when you know in advance how many object of some - * type will live during the life of the mempool. - * - * @{ - */ - -EAPI Eina_Mempool *eina_mempool_add(const char *name, - const char *context, - const char *options, ...) -{ - Eina_Mempool *mp; - va_list args; - - EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL); - DBG("name=%s, context=%s, options=%s", - name, context ? context : "", options ? options : ""); - - va_start(args, options); - mp = _new_va(name, context, options, args); - va_end(args); - - DBG("name=%s, context=%s, options=%s, mp=%p", - name, context ? context : "", options ? options : "", mp); - - return mp; -} - -EAPI void eina_mempool_del(Eina_Mempool * mp) -{ - EINA_SAFETY_ON_NULL_RETURN(mp); - EINA_SAFETY_ON_NULL_RETURN(mp->backend.shutdown); - DBG("mp=%p", mp); - mp->backend.shutdown(mp->backend_data); - free(mp); -} - -EAPI void eina_mempool_gc(Eina_Mempool * mp) -{ - EINA_SAFETY_ON_NULL_RETURN(mp); - EINA_SAFETY_ON_NULL_RETURN(mp->backend.garbage_collect); - DBG("mp=%p", mp); - mp->backend.garbage_collect(mp->backend_data); -} - -EAPI void eina_mempool_statistics(Eina_Mempool * mp) -{ - EINA_SAFETY_ON_NULL_RETURN(mp); - EINA_SAFETY_ON_NULL_RETURN(mp->backend.statistics); - DBG("mp=%p", mp); - mp->backend.statistics(mp->backend_data); -} - -EAPI unsigned int eina_mempool_alignof(unsigned int size) -{ - int align; - - if (size <= 2) - align = 2; - else if (size < 8) - align = 4; - else -#if __WORDSIZE == 32 - align = 8; - -#else - if (size < 16) - align = 8; - else - align = 16; -#endif - - return ((size / align) + 1) * align; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_module.c b/tests/suite/ecore/src/lib/eina_module.c deleted file mode 100644 index 2e7301b013..0000000000 --- a/tests/suite/ecore/src/lib/eina_module.c +++ /dev/null @@ -1,750 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric BAIL - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef HAVE_DLADDR -#define _GNU_SOURCE -#endif - -#ifdef HAVE_ALLOCA_H -#include -#elif defined __GNUC__ -#define alloca __builtin_alloca -#elif defined _AIX -#define alloca __alloca -#elif defined _MSC_VER -#include -#define alloca _alloca -#else -#include -#ifdef __cplusplus -extern "C" -#endif -void *alloca(size_t); -#endif - -#include -#include -#include -#include - -#ifndef _MSC_VER -#include -#else -#include -#endif - -#include - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_error.h" -#include "eina_file.h" -#include "eina_log.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_module.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -static int EINA_MODULE_LOG_DOM = -1; -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(EINA_MODULE_LOG_DOM, __VA_ARGS__) - -#ifdef WRN -#undef WRN -#endif -#define WRN(...) EINA_LOG_DOM_WARN(EINA_MODULE_LOG_DOM, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(EINA_MODULE_LOG_DOM, __VA_ARGS__) - -#define EINA_MODULE_SYMBOL_INIT "__eina_module_init" -#define EINA_MODULE_SYMBOL_SHUTDOWN "__eina_module_shutdown" - -struct _Eina_Module { - void *handle; - int ref; - const char file[]; -}; - -typedef struct _Dir_List_Get_Cb_Data { - Eina_Module_Cb cb; - void *data; - Eina_Array *array; -} Dir_List_Get_Cb_Data; - -typedef struct _Dir_List_Cb_Data { - Eina_Module_Cb cb; - void *data; -} Dir_List_Cb_Data; - -static Eina_Bool _dir_list_get_cb(Eina_Module * m, void *data) -{ - Dir_List_Get_Cb_Data *cb_data = data; - Eina_Bool ret = EINA_TRUE; - - if (cb_data->cb) - ret = cb_data->cb(m, cb_data->data); - - if (ret) - eina_array_push(cb_data->array, m); - - return ret; -} - -static void _dir_list_cb(const char *name, const char *path, void *data) -{ - Dir_List_Cb_Data *cb_data = data; - size_t length; - - length = strlen(name); - if (length < sizeof(SHARED_LIB_SUFFIX)) /* x.so */ - return; - - if (!strcmp(name + length - sizeof(SHARED_LIB_SUFFIX) + 1, - SHARED_LIB_SUFFIX)) { - char *file; - Eina_Module *m; - - length = strlen(path) + strlen(name) + 2; - - file = alloca(sizeof(char) * length); - if (!file) - return; - - snprintf(file, length, "%s/%s", path, name); - m = eina_module_new(file); - if (!m) { - return; /* call the user provided cb on this module */ - - } - - if (!cb_data->cb(m, cb_data->data)) - eina_module_free(m); - } -} - -static void _dir_arch_list_cb(const char *name, const char *path, - void *data) -{ - Dir_List_Get_Cb_Data *cb_data = data; - Eina_Module *m; - char *file = NULL; - size_t length; - - length = strlen(path) + 1 + strlen(name) + 1 + - strlen((char *) (cb_data->data)) + 1 + sizeof("module") + - sizeof(SHARED_LIB_SUFFIX) + 1; - - file = alloca(length); - snprintf(file, length, "%s/%s/%s/module" SHARED_LIB_SUFFIX, - path, name, (char *) (cb_data->data)); - m = eina_module_new(file); - if (!m) - return; - - eina_array_push(cb_data->array, m); -} - -/** - * @endcond - */ - - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -static const char EINA_ERROR_WRONG_MODULE_STR[] = - "Wrong file format or no file module found"; -static const char EINA_ERROR_MODULE_INIT_FAILED_STR[] = - "Module initialisation function failed"; - -EAPI Eina_Error EINA_ERROR_WRONG_MODULE = 0; -EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED = 0; - -/** - * @endcond - */ - -/** - * @internal - * @brief Initialize the module loader module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the module loader module of Eina. It is - * called by eina_init(). - * - * This function sets up the module module of Eina. It also registers - * the errors #EINA_ERROR_WRONG_MODULE and - * #EINA_ERROR_MODULE_INIT_FAILED. - * - * @see eina_init() - */ -Eina_Bool eina_module_init(void) -{ - EINA_MODULE_LOG_DOM = eina_log_domain_register - ("eina_module", EINA_LOG_COLOR_DEFAULT); - if (EINA_MODULE_LOG_DOM < 0) { - EINA_LOG_ERR("Could not register log domain: eina_module"); - return EINA_FALSE; - } -#define EEMR(n) n = eina_error_msg_static_register(n ## _STR) - EEMR(EINA_ERROR_WRONG_MODULE); - EEMR(EINA_ERROR_MODULE_INIT_FAILED); -#undef EEMR - - return EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the module loader module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the module loader module set up by - * eina_module_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_module_shutdown(void) -{ - /* TODO should we store every module when "new" is called and - * delete the list of modules here - */ - - eina_log_domain_unregister(EINA_MODULE_LOG_DOM); - EINA_MODULE_LOG_DOM = -1; - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Module_Group Module - * - * @brief These functions provide module management. - * - * @{ - */ - -/** - * @brief Return a new module. - * - * @param file The name of the file module to load. - * - * This function returns a new module. If @p file is @c NULL, the - * function returns @c NULL, otherwise, it allocates an Eina_Module, - * stores a duplicate string of @p file, sets its reference to @c 0 - * and its handle to @c NULL. - * - * When the new module is not needed anymore, use eina_module_free() - * to free the allocated memory. - * - * @see eina_module_load - */ -EAPI Eina_Module *eina_module_new(const char *file) -{ - Eina_Module *m; - size_t len; - - EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL); - /* TODO check that the file exists. Update doc too */ - - len = strlen(file); - EINA_SAFETY_ON_FALSE_RETURN_VAL(len > 0, NULL); - - m = malloc(sizeof(Eina_Module) + len + 1); - if (!m) { - ERR("could not malloc(%lu)", - (unsigned long) (sizeof(Eina_Module) + len + 1)); - return NULL; - } - - memcpy((char *) m->file, file, len + 1); - m->ref = 0; - m->handle = NULL; - DBG("m=%p, file=%s", m, file); - - return m; -} - -/** - * @brief Delete a module. - * - * @param m The module to delete. - * @return EINA_TRUE on success, EINA_FALSE otherwise. - * - * This function calls eina_module_unload() if @p m has been previously - * loaded and frees the allocated memory. On success this function - * returns EINA_TRUE and EINA_FALSE otherwise. If @p m is @c NULL, the - * function returns immediately. - */ -EAPI Eina_Bool eina_module_free(Eina_Module * m) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE); - - DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, - m->ref); - - if (m->handle) - if (eina_module_unload(m) == EINA_FALSE) - return EINA_FALSE; - - free(m); - return EINA_TRUE; -} - -/** - * @brief Load a module. - * - * @param m The module to load. - * @return EINA_TRUE on success, EINA_FALSE otherwise. - * - * This function load the shared file object passed in - * eina_module_new(). If it is a internal Eina module (like the - * mempools), it also initialize it. It the shared file object can not - * be loaded, the error #EINA_ERROR_WRONG_MODULE is set and - * #EINA_FALSE is returned. If it is a internal Eina module and the - * module can not be initialized, the error - * #EINA_ERROR_MODULE_INIT_FAILED is set and #EINA_FALSE is - * returned. If the module has already been loaded, it's refeence - * counter is increased by one and #EINA_TRUE is returned. If @p m is - * @c NULL, the function returns immediately #EINA_FALSE. - * - * When the symbols of the shared file objetcts are not needed - * anymore, call eina_module_unload() to unload the module. - */ -EAPI Eina_Bool eina_module_load(Eina_Module * m) -{ - void *dl_handle; - Eina_Module_Init *initcall; - - EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE); - - DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, - m->ref); - - if (m->handle) - goto loaded; - - dl_handle = dlopen(m->file, RTLD_NOW); - if (!dl_handle) { - WRN("could not dlopen(\"%s\", RTLD_NOW): %s", m->file, - dlerror()); - eina_error_set(EINA_ERROR_WRONG_MODULE); - return EINA_FALSE; - } - - initcall = dlsym(dl_handle, EINA_MODULE_SYMBOL_INIT); - if ((!initcall) || (!(*initcall))) - goto ok; - - if ((*initcall) () == EINA_TRUE) - goto ok; - - WRN("could not find eina's entry symbol %s inside module %s", - EINA_MODULE_SYMBOL_INIT, m->file); - eina_error_set(EINA_ERROR_MODULE_INIT_FAILED); - dlclose(dl_handle); - return EINA_FALSE; - ok: - DBG("successfully loaded %s", m->file); - m->handle = dl_handle; - loaded: - m->ref++; - DBG("ref %d", m->ref); - - eina_error_set(0); - return EINA_TRUE; -} - -/** - * @brief Unload a module. - * - * @param m The module to load. - * @return EINA_TRUE on success, EINA_FALSE otherwise. - * - * This function unload the module @p m that has been previously - * loaded by eina_module_load(). If the reference counter of @p m is - * strictly greater than @c 1, #EINA_FALSE is returned. Otherwise, the - * shared object file is closed and if it is a internal Eina module, it - * is shutted down just before. In that case, #EINA_TRUE is - * returned. In all case, the reference counter is decreased. If @p m - * is @c NULL, the function returns immediately #EINA_FALSE. - */ -EAPI Eina_Bool eina_module_unload(Eina_Module * m) -{ - Eina_Module_Shutdown *shut; - EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE); - - DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, - m->ref); - - m->ref--; - if (!m->ref) { - shut = dlsym(m->handle, EINA_MODULE_SYMBOL_SHUTDOWN); - if ((shut) && (*shut)) - (*shut) (); - - dlclose(m->handle); - m->handle = NULL; - DBG("unloaded module %s", m->file); - return EINA_TRUE; - } - - return EINA_FALSE; -} - -/** - * @brief Retrive the data associated to a symbol. - * - * @param m The module. - * @param symbol The symbol. - * @return The data associated to the symbol, or @c NULL on failure. - * - * This function returns the data associated to @p symbol of @p m. @p - * m must have been loaded before with eina_module_load(). If @p m - * is @c NULL, or if it has not been correctly loaded before, the - * function returns immediately @c NULL. - */ -EAPI void *eina_module_symbol_get(const Eina_Module * m, - const char *symbol) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL); - EINA_SAFETY_ON_NULL_RETURN_VAL(m->handle, NULL); - return dlsym(m->handle, symbol); -} - -/** - * @brief Return the file name associated to the module. - * - * @param m The module. - * @return The file name. - * - * This function returns the file name passed in eina_module_new(). If - * @p m is @c NULL, the function returns immediately @c NULL. The - * returned value must no be freed. - */ -EAPI const char *eina_module_file_get(const Eina_Module * m) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL); - return m->file; -} - -/** - * @brief Return the path built from the location of a library and a - * given sub directory. - * - * @param symbol The symbol to search for. - * @param sub_dir The subdirectory to append. - * @return The built path on success, @c NULL otherwise. - * - * This function returns the path built by concatenating the path of - * the library containing the symbol @p symbol and @p sub_dir. @p sub_dir - * can be @c NULL. The returned path must be freed when not used - * anymore. If the symbol is not found, or dl_addr() is not supported, - * or allocation fails, this function returns @c NULL. - */ -EAPI char *eina_module_symbol_path_get(const void *symbol, - const char *sub_dir) -{ -#ifdef HAVE_DLADDR - Dl_info eina_dl; - - EINA_SAFETY_ON_NULL_RETURN_VAL(symbol, NULL); - - if (dladdr(symbol, &eina_dl)) { - char *pos = strrchr(eina_dl.dli_fname, '/'); - if (pos) { - char *path; - int l0; - int l1; - int l2 = 0; - - l0 = strlen(eina_dl.dli_fname); - l1 = strlen(pos); - if (sub_dir && (*sub_dir != '\0')) - l2 = strlen(sub_dir); - - path = malloc(l0 - l1 + l2 + 1); - if (path) { - memcpy(path, eina_dl.dli_fname, l0 - l1); - if (sub_dir && (*sub_dir != '\0')) - memcpy(path + l0 - l1, sub_dir, - l2); - - path[l0 - l1 + l2] = '\0'; - return path; - } - } - } -#endif /* ! HAVE_DLADDR */ - - return NULL; -} - -/** - * @brief Return the path built from the value of an environment varialbe and a - * given sub directory. - * - * @param env The environment variable to expand. - * @param sub_dir The subdirectory to append. - * @return The built path on success, @c NULL otherwise. - * - * This function returns the path built by concatenating the value of - * the environment variable named @p env and @p sub_dir. @p sub_dir - * can be @c NULL. The returned path must be freed when not used - * anymore. If the symbol is not found, or @p env does not exist, or - * allocation fails, this function returns @c NULL. - */ -EAPI char *eina_module_environment_path_get(const char *env, - const char *sub_dir) -{ - const char *env_dir; - - EINA_SAFETY_ON_NULL_RETURN_VAL(env, NULL); - - env_dir = getenv(env); - if (env_dir) { - char *path; - size_t l1; - size_t l2 = 0; - - l1 = strlen(env_dir); - if (sub_dir && (*sub_dir != '\0')) - l2 = strlen(sub_dir); - - path = (char *) malloc(l1 + l2 + 1); - if (path) { - memcpy(path, env_dir, l1); - if (sub_dir && (*sub_dir != '\0')) - memcpy(path + l1, sub_dir, l2); - - path[l1 + l2] = '\0'; - - return path; - } - } - - return NULL; -} - -/** - * @brief Get an array of modules found on the directory path matching an arch type. - * - * @param array The array that stores the list of the modules. - * @param path The directory's path to search for modules. - * @param arch The architecture string. - * - * This function adds to @p array the module names found in @p path - * which match the cpu architecture @p arch. If @p path or @p arch is - * @c NULL, the function returns immediately @p array. @p array can be - * @c NULL. In that case, it is created with 4 elements. - */ -EAPI Eina_Array *eina_module_arch_list_get(Eina_Array * array, - const char *path, - const char *arch) -{ - Dir_List_Get_Cb_Data list_get_cb_data; - - if ((!path) || (!arch)) - return array; - - list_get_cb_data.array = array ? array : eina_array_new(4); - list_get_cb_data.cb = NULL; - list_get_cb_data.data = (void *) arch; - - eina_file_dir_list(path, 0, &_dir_arch_list_cb, &list_get_cb_data); - - return list_get_cb_data.array; -} - -/** - * @brief Get a list of modules found on the directory path. - * - * @param array The array that stores the list of the modules. - * @param path The directory's path to search for modules. - * @param recursive Iterate recursively on the path. - * @param cb Callback function to call on each module. - * @param data Data passed to the callback function. - * - * This function adds to @p array the list of modules found in - * @p path. If @p recursive is #EINA_TRUE, then recursive search is - * done. The callback @p cb is called on each module found, and @p data - * is passed to @p cb. If @p path is @c NULL, the function returns - * immediately @p array. If the returned value of @p cb is 0, the - * module will not be added to the list, otherwise it will be added. - * @p array can be @c NULL. In that case, it is created with 4 - * elements. @p cb can be @c NULL. - */ -EAPI Eina_Array *eina_module_list_get(Eina_Array * array, - const char *path, - Eina_Bool recursive, - Eina_Module_Cb cb, void *data) -{ - Dir_List_Get_Cb_Data list_get_cb_data; - Dir_List_Cb_Data list_cb_data; - - if (!path) - return array; - - list_get_cb_data.array = array ? array : eina_array_new(4); - list_get_cb_data.cb = cb; - list_get_cb_data.data = data; - - list_cb_data.cb = &_dir_list_get_cb; - list_cb_data.data = &list_get_cb_data; - - eina_file_dir_list(path, recursive, &_dir_list_cb, &list_cb_data); - - return list_get_cb_data.array; -} - -/** - * @brief Find an module in array. - * - * @param array The array to find the module. - * @param module The name of module to be searched. - * - * This function finds an @p module in @p array. - * If the element is found the function returns the module, else - * @c NULL is returned. - */ -EAPI Eina_Module *eina_module_find(const Eina_Array * array, - const char *module) -{ - unsigned int i; - Eina_Array_Iterator iterator; - Eina_Module *m; - - EINA_ARRAY_ITER_NEXT(array, i, m, iterator) { - char *file_m; - char *tmp; - ssize_t len; - - /* basename() can modify its argument, so we first get a copie */ - /* do not use strdupa, as opensolaris does not have it */ - len = strlen(eina_module_file_get(m)); - tmp = alloca(len + 1); - memcpy(tmp, eina_module_file_get(m), len + 1); - file_m = basename(tmp); - len = strlen(file_m); - len -= sizeof(SHARED_LIB_SUFFIX) - 1; - if (len <= 0) - continue; - - if (!strncmp(module, file_m, len)) - return m;; - } - - return NULL; -} - -/** - * @brief Load every module on the list of modules. - * - * @param array The array of modules to load. - * - * This function calls eina_module_load() on each element found in - * @p array. If @p array is @c NULL, this function does nothing. - */ -EAPI void eina_module_list_load(Eina_Array * array) -{ - Eina_Array_Iterator iterator; - Eina_Module *m; - unsigned int i; - - EINA_SAFETY_ON_NULL_RETURN(array); - DBG("array %p, count %u", array, array->count); - EINA_ARRAY_ITER_NEXT(array, i, m, iterator) - eina_module_load(m); -} - -/** - * @brief Unload every module on the list of modules. - * - * @param array The array of modules to unload. - * - * This function calls eina_module_unload() on each element found in - * @p array. If @p array is @c NULL, this function does nothing. - */ -EAPI void eina_module_list_unload(Eina_Array * array) -{ - Eina_Array_Iterator iterator; - Eina_Module *m; - unsigned int i; - - EINA_SAFETY_ON_NULL_RETURN(array); - DBG("array %p, count %u", array, array->count); - EINA_ARRAY_ITER_NEXT(array, i, m, iterator) - eina_module_unload(m); -} - -/** - * @p Free every module on the list of modules. - * - * @param array The array of modules to free. - * - * This function calls eina_module_free() on each element found in - * @p array. If @p array is @c NULL, this function does nothing. - */ -EAPI void eina_module_list_free(Eina_Array * array) -{ - Eina_Array_Iterator iterator; - Eina_Module *m; - unsigned int i; - - EINA_SAFETY_ON_NULL_RETURN(array); - DBG("array %p, count %u", array, array->count); - EINA_ARRAY_ITER_NEXT(array, i, m, iterator) - eina_module_free(m); - - eina_array_flush(array); -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_private.h b/tests/suite/ecore/src/lib/eina_private.h deleted file mode 100644 index 30b3859a1a..0000000000 --- a/tests/suite/ecore/src/lib/eina_private.h +++ /dev/null @@ -1,134 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifndef EINA_PRIVATE_H_ -#define EINA_PRIVATE_H_ - -#include - -#if HAVE___ATTRIBUTE__ -#define __UNUSED__ __attribute__((unused)) -#else -#define __UNUSED__ -#endif - -#include "eina_magic.h" -#include "eina_iterator.h" -#include "eina_accessor.h" - -#ifndef MIN -#define MIN(x, y) (((x) > (y)) ? (y) : (x)) -#endif - -#ifndef MAX -#define MAX(x, y) (((x) > (y)) ? (x) : (y)) -#endif - -#ifndef ABS -#define ABS(x) ((x) < 0 ? -(x) : (x)) -#endif - -#ifndef CLAMP -#define CLAMP(x, min, \ - max) (((x) > (max)) ? (max) : (((x) < (min)) ? (min) : (x))) -#endif - -#define READBUFSIZ 65536 - -#define EINA_LOG_COLOR_DEFAULT "\033[36m" - -/* eina magic types */ -#define EINA_MAGIC_SHARE 0x98761234 -#define EINA_MAGIC_SHARE_HEAD 0x98761235 -#define EINA_MAGIC_STRINGSHARE_NODE 0x98761254 -#define EINA_MAGIC_USTRINGSHARE_NODE 0x98761255 -#define EINA_MAGIC_BINSHARE_NODE 0x98761256 - -#define EINA_MAGIC_LIST 0x98761237 -#define EINA_MAGIC_LIST_ITERATOR 0x98761238 -#define EINA_MAGIC_LIST_ACCESSOR 0x98761239 -#define EINA_MAGIC_LIST_ACCOUNTING 0x9876123a - -#define EINA_MAGIC_ARRAY 0x9876123b -#define EINA_MAGIC_ARRAY_ITERATOR 0x9876123c -#define EINA_MAGIC_ARRAY_ACCESSOR 0x9876123d - -#define EINA_MAGIC_HASH 0x9876123e -#define EINA_MAGIC_HASH_ITERATOR 0x9876123f - -#define EINA_MAGIC_TILER 0x98761240 -#define EINA_MAGIC_TILER_ITERATOR 0x98761241 - -#define EINA_MAGIC_MATRIXSPARSE 0x98761242 -#define EINA_MAGIC_MATRIXSPARSE_ROW 0x98761243 -#define EINA_MAGIC_MATRIXSPARSE_CELL 0x98761244 -#define EINA_MAGIC_MATRIXSPARSE_ITERATOR 0x98761245 -#define EINA_MAGIC_MATRIXSPARSE_ROW_ITERATOR 0x98761246 -#define EINA_MAGIC_MATRIXSPARSE_ROW_ACCESSOR 0x98761247 -#define EINA_MAGIC_MATRIXSPARSE_CELL_ITERATOR 0x98761248 -#define EINA_MAGIC_MATRIXSPARSE_CELL_ACCESSOR 0x98761249 - -#define EINA_MAGIC_STRBUF 0x98761250 -#define EINA_MAGIC_USTRBUF 0x98761257 - -#define EINA_MAGIC_QUADTREE 0x98761251 -#define EINA_MAGIC_QUADTREE_ROOT 0x98761252 -#define EINA_MAGIC_QUADTREE_ITEM 0x98761253 - -/* undef the following, we want out version */ -#undef FREE -#define FREE(ptr) \ - do { \ - free(ptr); \ - ptr = NULL; \ - } while(0); - -#undef IF_FREE -#define IF_FREE(ptr) \ - do { \ - if (ptr) { \ - free(ptr); \ - ptr = NULL; \ - } \ - } while(0); - -#undef IF_FN_DEL -#define IF_FN_DEL(_fn, ptr) \ - do { \ - if (ptr) { \ - _fn(ptr); \ - ptr = NULL; \ - } \ - } while(0); - -#define MAGIC_FREE(ptr) \ - do { \ - if (ptr) { \ - EINA_MAGIC_SET(ptr, EINA_MAGIC_NONE); \ - FREE(ptr); \ - } \ - } while(0); - -#ifdef EFL_HAVE_THREADS -void eina_share_common_threads_init(void); -void eina_share_common_threads_shutdown(void); -void eina_log_threads_init(void); -void eina_log_threads_shutdown(void); -#endif - -#endif /* EINA_PRIVATE_H_ */ diff --git a/tests/suite/ecore/src/lib/eina_quadtree.c b/tests/suite/ecore/src/lib/eina_quadtree.c deleted file mode 100644 index 063b87b4c1..0000000000 --- a/tests/suite/ecore/src/lib/eina_quadtree.c +++ /dev/null @@ -1,908 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2010 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -/** - * @page tutorial_quadtree_page QuadTree Tutorial - * - * to be written... - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#include "eina_quadtree.h" -#include "eina_magic.h" -#include "eina_mempool.h" -#include "eina_list.h" -#include "eina_inlist.h" -#include "eina_trash.h" -#include "eina_log.h" -#include "eina_rectangle.h" - -#include "eina_private.h" - -typedef struct _Eina_QuadTree_Root Eina_QuadTree_Root; - -static const char EINA_MAGIC_QUADTREE_STR[] = "Eina QuadTree"; -static const char EINA_MAGIC_QUADTREE_ROOT_STR[] = "Eina QuadTree Root"; -static const char EINA_MAGIC_QUADTREE_ITEM_STR[] = "Eina QuadTree Item"; - -#define EINA_MAGIC_CHECK_QUADTREE(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_QUADTREE)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_QUADTREE); \ - return __VA_ARGS__; \ - } \ - } while(0); - -#define EINA_MAGIC_CHECK_QUADTREE_ROOT(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_QUADTREE_ROOT)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_QUADTREE_ROOT); \ - return __VA_ARGS__; \ - } \ - } while(0); - -#define EINA_MAGIC_CHECK_QUADTREE_ITEM(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_QUADTREE_ITEM)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_QUADTREE_ITEM); \ - return __VA_ARGS__; \ - } \ - } while(0); - -struct _Eina_QuadTree { - EINA_MAGIC; - - Eina_QuadTree_Root *root; - - Eina_List *hidden; - - size_t root_count; - size_t items_count; - - Eina_Trash *items_trash; - Eina_Trash *root_trash; - - Eina_Inlist *change; - Eina_Inlist *cached; - Eina_Rectangle target; - - size_t index; - - struct { - Eina_Quad_Callback v; - Eina_Quad_Callback h; - } func; - - struct { - size_t w; - size_t h; - } geom; - - Eina_Bool resize:1; - Eina_Bool lost:1; -}; - -struct _Eina_QuadTree_Root { - EINA_MAGIC; - - Eina_QuadTree_Root *parent; - Eina_QuadTree_Root *left; - Eina_QuadTree_Root *right; - - Eina_List *both; - - Eina_Bool sorted:1; -}; - -struct _Eina_QuadTree_Item { - EINA_MAGIC; - EINA_INLIST; - - Eina_QuadTree *quad; - Eina_QuadTree_Root *root; - - const void *object; - - size_t index; - - Eina_Bool change:1; - Eina_Bool delete_me:1; - Eina_Bool visible:1; - Eina_Bool hidden:1; -}; - -static int _eina_log_qd_dom = -1; -static Eina_Mempool *root_mp = NULL; -static Eina_Mempool *items_mp = NULL; - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eina_log_qd_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eina_log_qd_dom, __VA_ARGS__) - - -static int _eina_quadtree_item_cmp(const void *a, const void *b) -{ - const Eina_QuadTree_Item *i = a; - const Eina_QuadTree_Item *j = b; - - return i->index - j->index; -} - -static Eina_QuadTree_Root *eina_quadtree_root_free(Eina_QuadTree * q, - Eina_QuadTree_Root * - root) -{ - Eina_QuadTree_Item *item; - - if (!root) - return NULL; - - EINA_MAGIC_CHECK_QUADTREE_ROOT(root, NULL); - - EINA_LIST_FREE(root->both, item) - eina_mempool_free(items_mp, item); - - root->left = eina_quadtree_root_free(q, root->left); - root->right = eina_quadtree_root_free(q, root->right); - - EINA_MAGIC_SET(root, 0); - eina_mempool_free(root_mp, root); - - return NULL; -} - -static Eina_QuadTree_Root *eina_quadtree_root_rebuild_pre(Eina_QuadTree * - q, - Eina_Inlist ** - change, - Eina_QuadTree_Root - * root) -{ - Eina_QuadTree_Item *item; - - if (!root) - return NULL; - - EINA_LIST_FREE(root->both, item) { - if (item->visible) - *change = - eina_inlist_append(*change, - EINA_INLIST_GET(item)); - else if (!item->hidden) { - q->hidden = eina_list_append(q->hidden, item); - item->hidden = EINA_TRUE; - item->root = NULL; - } - } - - root->left = eina_quadtree_root_rebuild_pre(q, change, root->left); - root->right = - eina_quadtree_root_rebuild_pre(q, change, root->right); - - EINA_MAGIC_SET(root, 0); - if (q->root_count > 50) - eina_mempool_free(root_mp, root); - else { - eina_trash_push(&q->root_trash, root); - q->root_count++; - } - - return NULL; -} - -static size_t -_eina_quadtree_split(Eina_Inlist * objects, - Eina_QuadTree_Root * root, - Eina_Inlist ** left, - Eina_Inlist ** right, - Eina_Quad_Callback func, int border, int middle) -{ - Eina_QuadTree_Item *object; - - middle /= 2; - - if (middle <= 4) - while (objects) { - object = - EINA_INLIST_CONTAINER_GET(objects, - Eina_QuadTree_Item); - objects = objects->next; - - object->change = EINA_FALSE; - if (!object->visible) { - if (!object->hidden) { - object->hidden = EINA_TRUE; - object->quad->hidden = - eina_list_append(object->quad-> - hidden, - object); - } - - continue; - } - - if (object->hidden) { - object->hidden = EINA_FALSE; - object->quad->hidden = - eina_list_remove(object->quad->hidden, - object); - } - - if (!object->delete_me) { - if (root->sorted) - root->both = - eina_list_sorted_insert(root-> - both, - _eina_quadtree_item_cmp, - object); - else - root->both = - eina_list_append(root->both, - object); - - object->root = root; - } else - eina_quadtree_del(object); - } else - while (objects) { - object = - EINA_INLIST_CONTAINER_GET(objects, - Eina_QuadTree_Item); - objects = objects->next; - - object->change = EINA_FALSE; - if (!object->visible) { - if (!object->hidden) { - object->hidden = EINA_TRUE; - object->quad->hidden = - eina_list_append(object->quad-> - hidden, - object); - } - - continue; - } - - if (object->hidden) { - object->hidden = EINA_FALSE; - object->quad->hidden = - eina_list_remove(object->quad->hidden, - object); - } - - if (!object->delete_me) { - switch (func - (object->object, - border + middle)) { - case EINA_QUAD_LEFT: - *left = - eina_inlist_append(*left, - EINA_INLIST_GET - (object)); - break; - - case EINA_QUAD_RIGHT: - *right = - eina_inlist_append(*right, - EINA_INLIST_GET - (object)); - break; - - case EINA_QUAD_BOTH: - root->both = - eina_list_append(root->both, - object); - object->root = root; - break; - - default: - abort(); - } - } else - eina_quadtree_del(object); - } - - return middle; -} - - -static Eina_QuadTree_Root *_eina_quadtree_update(Eina_QuadTree * q, - Eina_QuadTree_Root * - parent, - Eina_QuadTree_Root * root, - Eina_Inlist * objects, - Eina_Bool direction, - Eina_Rectangle * size) -{ - Eina_Inlist *right = NULL; - Eina_Inlist *left = NULL; - size_t w2; - size_t h2; - - if (!objects) - return root; - - if (!root) { - root = eina_trash_pop(&q->root_trash); - if (!root) - root = - eina_mempool_malloc(root_mp, - sizeof - (Eina_QuadTree_Root)); - else - q->root_count--; - - if (!root) - /* FIXME: NOT GOOD TIMING, WE ARE GOING TO LEAK MORE MEMORY */ - return NULL; - - root->parent = parent; - root->both = NULL; - root->left = NULL; - root->right = NULL; - root->sorted = EINA_TRUE; - - EINA_MAGIC_SET(root, EINA_MAGIC_QUADTREE_ROOT); - } - - w2 = 0; - h2 = 0; - - if (direction) - w2 = _eina_quadtree_split(objects, root, - &left, &right, - q->func.h, size->x, size->w); - else - h2 = _eina_quadtree_split(objects, root, - &left, &right, - q->func.v, size->y, size->h); - - size->w -= w2; - size->h -= h2; - root->left = _eina_quadtree_update(q, root, - root->left, left, - !direction, size); - size->x += w2; - size->y += h2; - root->right = _eina_quadtree_update(q, root, - root->right, right, - !direction, size); - size->x -= w2; - size->y -= h2; - size->w += w2; - size->h += h2; - - return root; -} - -static Eina_Inlist *_eina_quadtree_merge(Eina_Inlist * result, - Eina_List * both) -{ - Eina_QuadTree_Item *item; - Eina_QuadTree_Item *b; - Eina_Inlist *moving; - - if (!both) - return result; - - if (!result) { - Eina_List *l; - - EINA_LIST_FOREACH(both, l, item) - if (item->visible) - result = - eina_inlist_append(result, - EINA_INLIST_GET(item)); - - return result; - } - - moving = result; - - item = EINA_INLIST_CONTAINER_GET(moving, Eina_QuadTree_Item); - b = eina_list_data_get(both); - - while (both && moving) { - if (!b->visible) { - both = eina_list_next(both); - b = eina_list_data_get(both); - continue; - } - - if (_eina_quadtree_item_cmp(item, b) < 0) { - /* moving is still lower than item, so we can continue to the next one. */ - moving = moving->next; - item = - EINA_INLIST_CONTAINER_GET(moving, - Eina_QuadTree_Item); - } else { - /* we just get above the limit of both, so insert it */ - result = eina_inlist_prepend_relative(result, - EINA_INLIST_GET - (b), moving); - both = eina_list_next(both); - b = eina_list_data_get(both); - } - } - - item = EINA_INLIST_CONTAINER_GET(result->last, Eina_QuadTree_Item); - - while (both) { - b = eina_list_data_get(both); - if (b->visible) { - if (_eina_quadtree_item_cmp(item, b) < 0) - break; - - result = eina_inlist_prepend_relative(result, - EINA_INLIST_GET - (b), - result-> - last); - } - - both = eina_list_next(both); - } - - while (both) { - b = eina_list_data_get(both); - if (b->visible) - result = - eina_inlist_append(result, EINA_INLIST_GET(b)); - - both = eina_list_next(both); - } - - return result; -} - -static Eina_Inlist *_eina_quadtree_collide(Eina_Inlist * result, - Eina_QuadTree_Root * root, - Eina_Bool direction, - Eina_Rectangle * size, - Eina_Rectangle * target) -{ - if (!root) - return result; - - if (!root->sorted) { - root->both = - eina_list_sort(root->both, -1, - _eina_quadtree_item_cmp); - root->sorted = EINA_TRUE; - } - - result = _eina_quadtree_merge(result, root->both); - DBG("%p: %i in both for (%i, %i - %i, %i)", - root, eina_list_count(root->both), - size->x, size->y, size->w, size->h); - - if (direction) { - int middle = size->w / 2; - - size->w -= middle; - if (eina_spans_intersect - (size->x, size->w, target->x, target->w)) - result = - _eina_quadtree_collide(result, root->left, - !direction, size, - target); - - size->x += middle; - if (eina_spans_intersect - (size->x, size->w, target->x, target->w)) - result = - _eina_quadtree_collide(result, root->right, - !direction, size, - target); - - size->x -= middle; - size->w += middle; - } else { - int middle = size->h / 2; - - size->h -= middle; - if (eina_spans_intersect - (size->y, size->h, target->y, target->h)) - result = - _eina_quadtree_collide(result, root->left, - !direction, size, - target); - - size->y += middle; - if (eina_spans_intersect - (size->y, size->h, target->y, target->h)) - result = - _eina_quadtree_collide(result, root->right, - !direction, size, - target); - - size->y -= middle; - size->h += middle; - } - - return result; -} - -static void _eina_quadtree_remove(Eina_QuadTree_Item * object) -{ - if (!object->root) - return; - - object->root->both = eina_list_remove(object->root->both, object); - if (object->root->both) - goto end; - - if (object->root->left) - goto end; - - if (object->root->right) - goto end; - - /* The root is not useful anymore... */ - if (object->root->parent) { - if (object->root->parent->left == object->root) - object->root->parent->left = NULL; - else - object->root->parent->right = NULL; - - object->root->parent = NULL; - } else - object->quad->root = NULL; - - if (object->quad->root_count > 50) - eina_mempool_free(root_mp, object->root); - else { - eina_trash_push(&object->quad->root_trash, object->root); - object->quad->root_count++; - } - - end: - object->root = NULL; -} - -EAPI Eina_QuadTree *eina_quadtree_new(size_t w, size_t h, - Eina_Quad_Callback vertical, - Eina_Quad_Callback horizontal) -{ - Eina_QuadTree *result; - - if (!vertical || !horizontal || h == 0 || w == 0) - return NULL; - - result = calloc(1, sizeof(Eina_QuadTree)); - if (!result) - return NULL; - - result->func.v = vertical; - result->func.h = horizontal; - - result->geom.w = w; - result->geom.h = h; - - result->change = NULL; - - result->lost = EINA_TRUE; - - EINA_MAGIC_SET(result, EINA_MAGIC_QUADTREE); - - return result; -} - -EAPI void eina_quadtree_free(Eina_QuadTree * q) -{ - Eina_QuadTree_Item *item; - - if (!q) - return; - - EINA_MAGIC_CHECK_QUADTREE(q); - - while (q->change) { - item = - EINA_INLIST_CONTAINER_GET(q->change, - Eina_QuadTree_Item); - q->change = q->change->next; - if (!item->hidden) - eina_mempool_free(items_mp, item); - } - - EINA_LIST_FREE(q->hidden, item) - eina_mempool_free(items_mp, item); - - eina_quadtree_root_free(q, q->root); - - while (q->items_trash) { - item = eina_trash_pop(&q->items_trash); - eina_mempool_free(items_mp, item); - } - - while (q->root_trash) { - Eina_QuadTree_Root *root; - - root = eina_trash_pop(&q->root_trash); - eina_mempool_free(root_mp, root); - } - - EINA_MAGIC_SET(q, 0); - free(q); -} - -EAPI Eina_QuadTree_Item *eina_quadtree_add(Eina_QuadTree * q, - const void *object) -{ - Eina_QuadTree_Item *result; - - EINA_MAGIC_CHECK_QUADTREE(q, NULL); - - if (!object) - return NULL; - - result = eina_trash_pop(&q->items_trash); - if (!result) - result = - eina_mempool_malloc(items_mp, - sizeof(Eina_QuadTree_Item)); - else - q->items_count--; - - if (!result) - return NULL; - - result->quad = q; - result->root = NULL; - result->object = object; - - result->index = q->index++; - - result->change = EINA_TRUE; - result->delete_me = EINA_FALSE; - result->visible = EINA_TRUE; - result->hidden = EINA_FALSE; - - EINA_MAGIC_SET(result, EINA_MAGIC_QUADTREE_ITEM); - - /* Insertion is delayed until we really need to use it */ - q->change = eina_inlist_append(q->change, EINA_INLIST_GET(result)); - - return result; -} - -EAPI Eina_Bool eina_quadtree_del(Eina_QuadTree_Item * object) -{ - if (!object) - return EINA_FALSE; - - EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE); - - _eina_quadtree_remove(object); - - if (object->change) { - /* This object is still in the update array, delaying it's removal ! */ - object->delete_me = EINA_TRUE; - object->visible = EINA_TRUE; - return EINA_TRUE; - } - - if (object->hidden) { - object->quad->hidden = - eina_list_remove(object->quad->hidden, object); - object->hidden = EINA_TRUE; - } - - /* This object is not anymore inside the tree, we can remove it now ! */ - EINA_MAGIC_SET(object, 0); - if (object->quad->items_count > 256) - eina_mempool_free(items_mp, object); - else { - object->quad->items_count++; - eina_trash_push(&object->quad->items_trash, object); - } - - return EINA_TRUE; -} - -EAPI Eina_Bool eina_quadtree_change(Eina_QuadTree_Item * object) -{ - EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE); - - if (object->delete_me || !object->visible) - return EINA_FALSE; - - if (object->quad->resize) - return EINA_TRUE; - - /* Delaying change until needed */ - if (!object->change) - object->quad->change = - eina_inlist_append(object->quad->change, - EINA_INLIST_GET(object)); - - object->change = EINA_TRUE; - - _eina_quadtree_remove(object); - - return EINA_TRUE; -} - -EAPI Eina_Bool eina_quadtree_hide(Eina_QuadTree_Item * object) -{ - EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE); - - object->visible = EINA_FALSE; - - return EINA_TRUE; -} - -EAPI Eina_Bool eina_quadtree_show(Eina_QuadTree_Item * object) -{ - EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE); - - object->quad->lost = EINA_TRUE; - - if (object->visible) - return EINA_TRUE; - - object->visible = EINA_TRUE; - if (!object->change) - return eina_quadtree_change(object); - - return EINA_TRUE; -} - -EAPI Eina_Inlist *eina_quadtree_collide(Eina_QuadTree * q, int x, int y, - int w, int h) -{ - Eina_Rectangle canvas; - - EINA_MAGIC_CHECK_QUADTREE(q, NULL); - - /* Now we need the tree to be up to date, so it's time */ - if (q->resize) { /* Full rebuild needed ! */ - DBG("resizing quadtree"); - q->root = - eina_quadtree_root_rebuild_pre(q, &q->change, q->root); - q->resize = EINA_FALSE; - } - - EINA_RECTANGLE_SET(&canvas, 0, 0, q->geom.w, q->geom.h); - - if (q->change) { - DBG("updating quadtree content"); - q->root = - _eina_quadtree_update(q, NULL, q->root, q->change, - EINA_FALSE, &canvas); - q->change = NULL; - q->lost = EINA_TRUE; - } - - if (q->target.x != x - || q->target.y != y || q->target.w != w || q->target.h != h) { - DBG("new target"); - EINA_RECTANGLE_SET(&q->target, x, y, w, h); - q->lost = EINA_TRUE; - } - - if (q->lost) { - DBG("computing collide"); - q->cached = _eina_quadtree_collide(NULL, q->root, - EINA_FALSE, &canvas, - &q->target); - q->lost = EINA_FALSE; - } - - return q->cached; -} - -EAPI void *eina_quadtree_object(Eina_Inlist * item) -{ - Eina_QuadTree_Item *qi; - - if (!item) - return NULL; - - qi = EINA_INLIST_CONTAINER_GET(item, Eina_QuadTree_Item); - if (!qi) - return NULL; - - EINA_MAGIC_CHECK_QUADTREE_ITEM(qi, NULL); - - if (!qi->visible) - return NULL; - - return (void *) qi->object; -} - -EAPI void eina_quadtree_resize(Eina_QuadTree * q, size_t w, size_t h) -{ - EINA_MAGIC_CHECK_QUADTREE(q); - - if (q->geom.w == w && q->geom.h == h) - return; - - q->resize = EINA_TRUE; - q->geom.w = w; - q->geom.h = h; -} - -EAPI void eina_quadtree_cycle(Eina_QuadTree * q) -{ - EINA_MAGIC_CHECK_QUADTREE(q); - - q->index = 0; -} - -EAPI void eina_quadtree_increase(Eina_QuadTree_Item * object) -{ - size_t tmp; - - tmp = object->quad->index++; - if (object->index == tmp) - return; - - object->index = tmp; - if (object->root) - object->root->sorted = EINA_FALSE; -} - -Eina_Bool eina_quadtree_init(void) -{ - _eina_log_qd_dom = eina_log_domain_register("eina_quadtree", - EINA_LOG_COLOR_DEFAULT); - if (_eina_log_qd_dom < 0) { - EINA_LOG_ERR - ("Could not register log domain: eina_quadtree"); - return EINA_FALSE; - } -#define EMS(n) eina_magic_string_static_set(n, n ## _STR) - EMS(EINA_MAGIC_QUADTREE); - EMS(EINA_MAGIC_QUADTREE_ROOT); - EMS(EINA_MAGIC_QUADTREE_ITEM); -#undef EMS - - items_mp = - eina_mempool_add("chained_mempool", "QuadTree Item", NULL, - sizeof(Eina_QuadTree_Item), 320); - root_mp = - eina_mempool_add("chained_mempool", "QuadTree Root", NULL, - sizeof(Eina_QuadTree_Root), 32); - - return EINA_TRUE; -} - -Eina_Bool eina_quadtree_shutdown(void) -{ - eina_log_domain_unregister(_eina_log_qd_dom); - _eina_log_qd_dom = -1; - return EINA_TRUE; -} diff --git a/tests/suite/ecore/src/lib/eina_rbtree.c b/tests/suite/ecore/src/lib/eina_rbtree.c deleted file mode 100644 index 905cafd302..0000000000 --- a/tests/suite/ecore/src/lib/eina_rbtree.c +++ /dev/null @@ -1,615 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_array.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_rbtree.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -#define EINA_RBTREE_ITERATOR_PREFIX_MASK 0x1 -#define EINA_RBTREE_ITERATOR_INFIX_MASK 0x2 -#define EINA_RBTREE_ITERATOR_POSTFIX_MASK 0x4 - -typedef struct _Eina_Iterator_Rbtree Eina_Iterator_Rbtree; -typedef struct _Eina_Iterator_Rbtree_List Eina_Iterator_Rbtree_List; - -struct _Eina_Iterator_Rbtree { - Eina_Iterator iterator; - - Eina_Array *stack; - - unsigned char mask; -}; - -struct _Eina_Iterator_Rbtree_List { - Eina_Rbtree *tree; - - Eina_Rbtree_Direction dir:1; - Eina_Bool up:1; -}; - -static Eina_Iterator_Rbtree_List *_eina_rbtree_iterator_list_new(const - Eina_Rbtree - * tree) -{ - Eina_Iterator_Rbtree_List *new; - - eina_error_set(0); - new = malloc(sizeof(Eina_Iterator_Rbtree_List)); - if (!new) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - new->tree = (Eina_Rbtree *) tree; - new->dir = EINA_RBTREE_RIGHT; - new->up = EINA_FALSE; - - return new; -} - -static Eina_Rbtree *_eina_rbtree_iterator_get_content(Eina_Iterator_Rbtree - * it) -{ - if (eina_array_count_get(it->stack) <= 0) - return NULL; - - return eina_array_data_get(it->stack, 0); -} - -static void _eina_rbtree_iterator_free(Eina_Iterator_Rbtree * it) -{ - Eina_Iterator_Rbtree_List *item; - Eina_Array_Iterator et; - unsigned int i; - - EINA_ARRAY_ITER_NEXT(it->stack, i, item, et) - free(item); - - eina_array_free(it->stack); - free(it); -} - -static Eina_Bool -_eina_rbtree_iterator_next(Eina_Iterator_Rbtree * it, void **data) -{ - Eina_Iterator_Rbtree_List *last; - Eina_Iterator_Rbtree_List *new; - Eina_Rbtree *tree; - - if (eina_array_count_get(it->stack) <= 0) - return EINA_FALSE; - - last = - eina_array_data_get(it->stack, - eina_array_count_get(it->stack) - 1); - tree = last->tree; - - if (!last->tree || last->up == EINA_TRUE) { - last = eina_array_pop(it->stack); - while (last->dir == EINA_RBTREE_LEFT || !last->tree) { - if (tree) - if ((it-> - mask & - EINA_RBTREE_ITERATOR_POSTFIX_MASK) == - EINA_RBTREE_ITERATOR_POSTFIX_MASK) { - free(last); - - if (eina_array_count_get(it->stack) - > 0) { - last = - eina_array_data_get - (it->stack, - eina_array_count_get - (it->stack) - - 1); - last->up = EINA_TRUE; - } - - goto onfix; - } - - free(last); - - last = eina_array_pop(it->stack); - if (!last) - return EINA_FALSE; - - tree = last->tree; - } - - last->dir = EINA_RBTREE_LEFT; - last->up = EINA_FALSE; - - eina_array_push(it->stack, last); - - if ((it->mask & EINA_RBTREE_ITERATOR_INFIX_MASK) == - EINA_RBTREE_ITERATOR_INFIX_MASK) - goto onfix; - } - - new = _eina_rbtree_iterator_list_new(last->tree->son[last->dir]); - if (!new) - return EINA_FALSE; - - eina_array_push(it->stack, new); - - if (last->dir == EINA_RBTREE_RIGHT) - if ((it->mask & EINA_RBTREE_ITERATOR_PREFIX_MASK) == - EINA_RBTREE_ITERATOR_PREFIX_MASK) - goto onfix; - - return _eina_rbtree_iterator_next(it, data); - - onfix: - *data = tree; - return EINA_TRUE; -} - -static Eina_Iterator *_eina_rbtree_iterator_build(const Eina_Rbtree * root, - unsigned char mask) -{ - Eina_Iterator_Rbtree_List *first; - Eina_Iterator_Rbtree *it; - - eina_error_set(0); - it = calloc(1, sizeof(Eina_Iterator_Rbtree)); - if (!it) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - it->stack = eina_array_new(8); - if (!it->stack) - goto on_error2; - - first = _eina_rbtree_iterator_list_new(root); - if (!first) - goto on_error; - - eina_array_push(it->stack, first); - - it->mask = mask; - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(_eina_rbtree_iterator_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER(_eina_rbtree_iterator_get_content); - it->iterator.free = FUNC_ITERATOR_FREE(_eina_rbtree_iterator_free); - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - return &it->iterator; - - on_error: - eina_array_free(it->stack); - on_error2: - free(it); - - return NULL; -} - -/* - * Thanks to Julienne Walker public domain tutorial. - * http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_rbtree.aspx - */ - -static void _eina_rbtree_node_init(Eina_Rbtree * node) -{ - if (!node) - return; - - node->son[0] = NULL; - node->son[1] = NULL; - - node->color = EINA_RBTREE_RED; -} - -static inline Eina_Bool _eina_rbtree_is_red(Eina_Rbtree * node) -{ - return ! !node && node->color == EINA_RBTREE_RED; -} - -static inline Eina_Rbtree *_eina_rbtree_inline_single_rotation(Eina_Rbtree - * node, - Eina_Rbtree_Direction - dir) -{ - Eina_Rbtree *save = node->son[!dir]; - - node->son[!dir] = save->son[dir]; - save->son[dir] = node; - - node->color = EINA_RBTREE_RED; - save->color = EINA_RBTREE_BLACK; - - return save; -} - -static inline Eina_Rbtree *_eina_rbtree_inline_double_rotation(Eina_Rbtree - * node, - Eina_Rbtree_Direction - dir) -{ - node->son[!dir] = - _eina_rbtree_inline_single_rotation(node->son[!dir], !dir); - return _eina_rbtree_inline_single_rotation(node, dir); -} - -/*============================================================================* -* Global * -*============================================================================*/ - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Rbtree_Group Red-Black tree - * - * @brief These functions provide Red-Black trees management. - * - * @{ - */ - -EAPI Eina_Rbtree *eina_rbtree_inline_insert(Eina_Rbtree * root, - Eina_Rbtree * node, - Eina_Rbtree_Cmp_Node_Cb cmp, - const void *data) -{ - Eina_Rbtree head; - Eina_Rbtree *g, *t; /* Grandparent & parent */ - Eina_Rbtree *p, *q; /* Iterator & parent */ - /* WARNING: - Compiler is not able to understand the underlying algorithm and don't know that - first top node is always black, so it will never use last before running the loop - one time. - */ - Eina_Rbtree_Direction dir, last; - - EINA_SAFETY_ON_NULL_RETURN_VAL(node, root); - EINA_SAFETY_ON_NULL_RETURN_VAL(cmp, root); - - if (!node) - return root; - - _eina_rbtree_node_init(node); - - if (!root) { - root = node; - goto end_add; - } - - memset(&head, 0, sizeof(Eina_Rbtree)); - last = dir = EINA_RBTREE_LEFT; - - /* Set up helpers */ - t = &head; - g = p = NULL; - q = t->son[1] = root; - - /* Search down the tree */ - for (;;) { - if (!q) - /* Insert new node at the bottom */ - p->son[dir] = q = node; - else if (_eina_rbtree_is_red(q->son[0]) - && _eina_rbtree_is_red(q->son[1])) { - /* Color flip */ - q->color = EINA_RBTREE_RED; - q->son[0]->color = EINA_RBTREE_BLACK; - q->son[1]->color = EINA_RBTREE_BLACK; - } - - /* Fix red violation */ - if (_eina_rbtree_is_red(q) && _eina_rbtree_is_red(p)) { - Eina_Rbtree_Direction dir2; - - dir2 = - (t->son[1] == - g) ? EINA_RBTREE_RIGHT : EINA_RBTREE_LEFT; - - if (q == p->son[last]) - t->son[dir2] = - _eina_rbtree_inline_single_rotation(g, - !last); - else - t->son[dir2] = - _eina_rbtree_inline_double_rotation(g, - !last); - } - - /* Stop if found */ - if (q == node) - break; - - last = dir; - dir = cmp(q, node, (void *) data); - - /* Update helpers */ - if (g) - t = g; - - g = p, p = q; - q = q->son[dir]; - } - - root = head.son[1]; - - end_add: - /* Make root black */ - root->color = EINA_RBTREE_BLACK; - - return root; -} - -EAPI Eina_Rbtree *eina_rbtree_inline_remove(Eina_Rbtree * root, - Eina_Rbtree * node, - Eina_Rbtree_Cmp_Node_Cb cmp, - const void *data) -{ - Eina_Rbtree head; - Eina_Rbtree *q, *p; - Eina_Rbtree *f = NULL; - Eina_Rbtree_Direction dir; - - EINA_SAFETY_ON_NULL_RETURN_VAL(node, root); - EINA_SAFETY_ON_NULL_RETURN_VAL(cmp, root); - - if (!root || !node) - return root; - - memset(&head, 0, sizeof(Eina_Rbtree)); - - dir = EINA_RBTREE_RIGHT; - q = &head; - p = NULL; - q->son[EINA_RBTREE_RIGHT] = root; - - /* Search and push a red down */ - while (q->son[dir]) { - Eina_Rbtree_Direction last = dir; - Eina_Rbtree *g; - - /* Update helpers */ - g = p; - p = q; - q = q->son[dir]; - dir = cmp(q, node, (void *) data); - - /* Save parent node found */ - if (q == node) - f = p; - - /* Push the red node down */ - if (!_eina_rbtree_is_red(q) - && !_eina_rbtree_is_red(q->son[dir])) { - if (_eina_rbtree_is_red(q->son[!dir])) - q = p->son[last] = - _eina_rbtree_inline_single_rotation(q, - dir); - else if (!_eina_rbtree_is_red(q->son[!dir])) { - Eina_Rbtree *s = p->son[!last]; - - if (s) { - if (!_eina_rbtree_is_red - (s->son[EINA_RBTREE_LEFT]) - && !_eina_rbtree_is_red(s-> - son - [EINA_RBTREE_RIGHT])) - { -/* Color flip */ - p->color = - EINA_RBTREE_BLACK; - p->son[EINA_RBTREE_LEFT]-> - color = - EINA_RBTREE_RED; - p->son[EINA_RBTREE_RIGHT]-> - color = - EINA_RBTREE_RED; - } else { - Eina_Rbtree_Direction dir2; - - dir2 = g->son[1] == - p ? EINA_RBTREE_RIGHT : - EINA_RBTREE_LEFT; - - if (_eina_rbtree_is_red - (s->son[last])) { - g->son[dir2] = - _eina_rbtree_inline_double_rotation - (p, last); - if (f == g) { - p = g-> - son - [dir2]-> - son - [last]; - f = g-> - son - [dir2]; - } - } else - if (_eina_rbtree_is_red - (s->son[!last])) { - g->son[dir2] = - _eina_rbtree_inline_single_rotation - (p, last); - if (f == g) { - p = g-> - son - [dir2]-> - son - [last]; - f = g-> - son - [dir2]; - } - } - -/* Ensure correct coloring */ - q->color = - g->son[dir2]->color = - EINA_RBTREE_RED; - g->son[dir2]-> - son[EINA_RBTREE_LEFT]-> - color = - EINA_RBTREE_BLACK; - g->son[dir2]-> - son - [EINA_RBTREE_RIGHT]-> - color = - EINA_RBTREE_BLACK; - } - } - } - } - } - - /* Replace and remove if found */ - if (f) { - /* 'q' should take the place of 'node' parent */ - f->son[f->son[1] == node] = q; - - /* Switch the link from the parent to q's son */ - p->son[p->son[1] == q] = q->son[!q->son[0]]; - - /* Put q at the place of node */ - q->son[0] = node->son[0]; - q->son[1] = node->son[1]; - q->color = node->color; - - /* Reset node link */ - node->son[0] = NULL; - node->son[1] = NULL; - } - - root = head.son[1]; - if (root) - root->color = EINA_RBTREE_BLACK; - - return root; -} - -/** - * @brief Returned a new prefix iterator associated to a rbtree. - * - * @param root The root of rbtree. - * @return A new iterator. - * - * This function returns a newly allocated iterator associated to @p - * root. It will iterate the tree using prefix walk. If @p root is @c - * NULL, this function still returns a valid iterator that will always - * return false on eina_iterator_next(), thus keeping API sane. - * - * If the memory can not be allocated, NULL is returned and - * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is - * returned. - * - * @warning if the rbtree structure changes then the iterator becomes - * invalid! That is, if you add or remove nodes this iterator - * behavior is undefined and your program may crash! - */ -EAPI Eina_Iterator *eina_rbtree_iterator_prefix(const Eina_Rbtree * root) -{ - return _eina_rbtree_iterator_build(root, - EINA_RBTREE_ITERATOR_PREFIX_MASK); -} - -/** - * @brief Returned a new prefix iterator associated to a rbtree. - * - * @param root The root of rbtree. - * @return A new iterator. - * - * This function returns a newly allocated iterator associated to @p - * root. It will iterate the tree using infix walk. If @p root is @c - * NULL, this function still returns a valid iterator that will always - * return false on eina_iterator_next(), thus keeping API sane. - * - * If the memory can not be allocated, NULL is returned and - * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is - * returned. - * - * @warning if the rbtree structure changes then the iterator becomes - * invalid! That is, if you add or remove nodes this iterator - * behavior is undefined and your program may crash! - */ -EAPI Eina_Iterator *eina_rbtree_iterator_infix(const Eina_Rbtree * root) -{ - return _eina_rbtree_iterator_build(root, - EINA_RBTREE_ITERATOR_INFIX_MASK); -} - -/** - * @brief Returned a new prefix iterator associated to a rbtree. - * - * @param root The root of rbtree. - * @return A new iterator. - * - * This function returns a newly allocated iterator associated to @p - * root. It will iterate the tree using postfix walk. If @p root is @c - * NULL, this function still returns a valid iterator that will always - * return false on eina_iterator_next(), thus keeping API sane. - * - * If the memory can not be allocated, NULL is returned and - * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is - * returned. - * - * @warning if the rbtree structure changes then the iterator becomes - * invalid! That is, if you add or remove nodes this iterator - * behavior is undefined and your program may crash! - */ -EAPI Eina_Iterator *eina_rbtree_iterator_postfix(const Eina_Rbtree * root) -{ - return _eina_rbtree_iterator_build(root, - EINA_RBTREE_ITERATOR_POSTFIX_MASK); -} - -EAPI void -eina_rbtree_delete(Eina_Rbtree * root, Eina_Rbtree_Free_Cb func, - void *data) -{ - if (!root) - return; - - EINA_SAFETY_ON_NULL_RETURN(func); - - eina_rbtree_delete(root->son[0], func, data); - eina_rbtree_delete(root->son[1], func, data); - func(root, data); -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_rectangle.c b/tests/suite/ecore/src/lib/eina_rectangle.c deleted file mode 100644 index 7ad8428352..0000000000 --- a/tests/suite/ecore/src/lib/eina_rectangle.c +++ /dev/null @@ -1,661 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Cedric BAIL, Carsten Haitzler - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_magic.h" -#include "eina_inlist.h" -#include "eina_mempool.h" -#include "eina_list.h" -#include "eina_trash.h" -#include "eina_log.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_rectangle.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -#define EINA_RECTANGLE_POOL_MAGIC 0x1578FCB0 -#define EINA_RECTANGLE_ALLOC_MAGIC 0x1578FCB1 - -#define BUCKET_THRESHOLD 110 - -typedef struct _Eina_Rectangle_Alloc Eina_Rectangle_Alloc; - -struct _Eina_Rectangle_Pool { - Eina_Inlist *head; - Eina_List *empty; - void *data; - - Eina_Trash *bucket; - unsigned int bucket_count; - - unsigned int references; - int w; - int h; - - Eina_Bool sorted; - EINA_MAGIC}; - -struct _Eina_Rectangle_Alloc { - EINA_INLIST; - Eina_Rectangle_Pool *pool; - EINA_MAGIC}; - -#define EINA_MAGIC_CHECK_RECTANGLE_POOL(d) \ - do { \ - if (!EINA_MAGIC_CHECK((d), EINA_RECTANGLE_POOL_MAGIC)) { \ - EINA_MAGIC_FAIL((d), EINA_RECTANGLE_POOL_MAGIC); } \ - } while (0) - -#define EINA_MAGIC_CHECK_RECTANGLE_ALLOC(d) \ - do { \ - if (!EINA_MAGIC_CHECK((d), EINA_RECTANGLE_ALLOC_MAGIC)) { \ - EINA_MAGIC_FAIL((d), EINA_RECTANGLE_ALLOC_MAGIC); } \ - } while (0) - -static Eina_Mempool *_eina_rectangle_alloc_mp = NULL; -static Eina_Mempool *_eina_rectangle_mp = NULL; - -static Eina_Trash *_eina_rectangles = NULL; -static unsigned int _eina_rectangles_count = 0; -static int _eina_rectangle_log_dom = -1; - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eina_rectangle_log_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eina_rectangle_log_dom, __VA_ARGS__) - -static int -_eina_rectangle_cmp(const Eina_Rectangle * r1, const Eina_Rectangle * r2) -{ - return (r2->w * r2->h) - (r1->w * r1->h); -} - -static Eina_List *_eina_rectangle_merge_list(Eina_List * empty, - Eina_Rectangle * r) -{ - Eina_Rectangle *match; - Eina_List *l; - int xw; - int yh; - - if (r->w == 0 || r->h == 0) { - eina_rectangle_free(r); - return empty; - } - - start_again: - xw = r->x + r->w; - yh = r->y + r->h; - - EINA_LIST_FOREACH(empty, l, match) { - if (match->x == r->x && match->w == r->w - && (match->y == yh || r->y == match->y + match->h)) { - if (match->y > r->y) - match->y = r->y; - - match->h += r->h; - - eina_rectangle_free(r); - - empty = eina_list_remove_list(empty, l); - - r = match; - - goto start_again; - } else if (match->y == r->y && match->h == r->h - && (match->x == xw - || r->x == match->x + match->w)) { - if (match->x > r->x) - match->x = r->x; - - match->w += r->w; - - eina_rectangle_free(r); - - empty = eina_list_remove_list(empty, l); - - r = match; - - goto start_again; - } - } - - return eina_list_append(empty, r); -} - -static Eina_List *_eina_rectangle_empty_space_find(Eina_List * empty, - int w, int h, int *x, - int *y) -{ - Eina_Rectangle *r; - Eina_List *l; - - EINA_LIST_FOREACH(empty, l, r) { - if (r->w >= w && r->h >= h) { - /* Remove l from empty */ - empty = eina_list_remove_list(empty, l); - /* Remember x and y */ - *x = r->x; - *y = r->y; - /* Split r in 2 rectangle if needed (only the empty one) and insert them */ - if (r->w == w) { - r->y += h; - r->h -= h; - } else if (r->h == h) { - r->x += w; - r->w -= w; - } else { - int rx1, ry1, rw1, rh1; - int x2, y2, w2, h2; - - rx1 = r->x + w; - ry1 = r->y; - rw1 = r->w - w; - /* h1 could be h or r->h */ - x2 = r->x; - y2 = r->y + h; - /* w2 could be w or r->w */ - h2 = r->h - h; - - if (rw1 * r->h > h2 * r->w) { - rh1 = r->h; - w2 = w; - } else { - rh1 = h; - w2 = r->w; - } - - EINA_RECTANGLE_SET(r, rx1, ry1, rw1, rh1); - empty = - _eina_rectangle_merge_list(empty, r); - - r = eina_rectangle_new(x2, y2, w2, h2); - } - - if (r) { - empty = _eina_rectangle_merge_list(empty, r); /* Return empty */ - - } - - return empty; - } - } - - *x = -1; - *y = -1; - return empty; -} - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -Eina_Bool eina_rectangle_init(void) -{ - const char *choice, *tmp; - - _eina_rectangle_log_dom = - eina_log_domain_register("eina_rectangle", - EINA_LOG_COLOR_DEFAULT); - if (_eina_rectangle_log_dom < 0) { - EINA_LOG_ERR - ("Could not register log domain: eina_rectangle"); - return EINA_FALSE; - } -#ifdef EINA_DEFAULT_MEMPOOL - choice = "pass_through"; -#else - choice = "chained_mempool"; -#endif - tmp = getenv("EINA_MEMPOOL"); - if (tmp && tmp[0]) - choice = tmp; - - _eina_rectangle_alloc_mp = eina_mempool_add - (choice, "rectangle-alloc", NULL, - sizeof(Eina_Rectangle_Alloc) + sizeof(Eina_Rectangle), 1024); - if (!_eina_rectangle_alloc_mp) { - ERR("Mempool for rectangle cannot be allocated in rectangle init."); - goto init_error; - } - - _eina_rectangle_mp = eina_mempool_add - (choice, "rectangle", NULL, sizeof(Eina_Rectangle), 256); - if (!_eina_rectangle_mp) { - ERR("Mempool for rectangle cannot be allocated in rectangle init."); - goto init_error; - } - - return EINA_TRUE; - - init_error: - eina_log_domain_unregister(_eina_rectangle_log_dom); - _eina_rectangle_log_dom = -1; - - return EINA_FALSE; -} - -Eina_Bool eina_rectangle_shutdown(void) -{ - Eina_Rectangle *del; - - while ((del = eina_trash_pop(&_eina_rectangles))) - eina_mempool_free(_eina_rectangle_mp, del); - _eina_rectangles_count = 0; - - eina_mempool_del(_eina_rectangle_alloc_mp); - eina_mempool_del(_eina_rectangle_mp); - - eina_log_domain_unregister(_eina_rectangle_log_dom); - _eina_rectangle_log_dom = -1; - - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Rectangle_Group Rectangle - * - * @brief These functions provide rectangle management. - * - * @{ - */ - -/** - * @brief Create a new rectangle. - * - * @param x The X coordinate of the top left corner of the rectangle. - * @param y The Y coordinate of the top left corner of the rectangle. - * @param w The width of the rectangle. - * @param h The height of the rectangle. - * @return The new rectangle on success, @ NULL otherwise. - * - * This function creates a rectangle which top left corner has the - * coordinates (@p x, @p y), with height @p w and height @p h and adds - * it to the rectangles pool. No check is done on @p w and @p h. This - * function returns a new rectangle on success, @c NULL otherwhise. - */ -EAPI Eina_Rectangle *eina_rectangle_new(int x, int y, int w, int h) -{ - Eina_Rectangle *rect; - - if (_eina_rectangles) { - rect = eina_trash_pop(&_eina_rectangles); - _eina_rectangles_count--; - } else - rect = - eina_mempool_malloc(_eina_rectangle_mp, - sizeof(Eina_Rectangle)); - - if (!rect) - return NULL; - - EINA_RECTANGLE_SET(rect, x, y, w, h); - - return rect; -} - -/** - * @brief Free the given rectangle. - * - * @param rect The rectangle to free. - * - * This function removes @p rect from the rectangles pool. - */ -EAPI void eina_rectangle_free(Eina_Rectangle * rect) -{ - EINA_SAFETY_ON_NULL_RETURN(rect); - - if (_eina_rectangles_count > BUCKET_THRESHOLD) - eina_mempool_free(_eina_rectangle_mp, rect); - else { - eina_trash_push(&_eina_rectangles, rect); - _eina_rectangles_count++; - } -} - -/** - * @brief Add a rectangle in a new pool. - * - * @param w The width of the rectangle. - * @param h The height of the rectangle. - * @return A newly allocated pool on success, @c NULL otherwise. - * - * This function adds the rectangle of size (@p width, @p height) to a - * new pool. If the pool can not be created, @c NULL is - * returned. Otherwise the newly allocated pool is returned. - */ -EAPI Eina_Rectangle_Pool *eina_rectangle_pool_new(int w, int h) -{ - Eina_Rectangle_Pool *new; - - new = malloc(sizeof(Eina_Rectangle_Pool)); - if (!new) - return NULL; - - new->head = NULL; - new->empty = - eina_list_append(NULL, eina_rectangle_new(0, 0, w, h)); - new->references = 0; - new->sorted = EINA_FALSE; - new->w = w; - new->h = h; - new->bucket = NULL; - new->bucket_count = 0; - - EINA_MAGIC_SET(new, EINA_RECTANGLE_POOL_MAGIC); - DBG("pool=%p, size=(%d, %d)", new, w, h); - - return new; -} - -/** - * @brief Free the given pool. - * - * @param pool The pool to free. - * - * This function frees the allocated data of @p pool. If @p pool is - * @c NULL, ths function returned immediately. - */ -EAPI void eina_rectangle_pool_free(Eina_Rectangle_Pool * pool) -{ - Eina_Rectangle_Alloc *del; - - EINA_SAFETY_ON_NULL_RETURN(pool); - DBG("pool=%p, size=(%d, %d), references=%u", - pool, pool->w, pool->h, pool->references); - while (pool->head) { - del = (Eina_Rectangle_Alloc *) pool->head; - - pool->head = (EINA_INLIST_GET(del))->next; - - EINA_MAGIC_SET(del, EINA_MAGIC_NONE); - eina_mempool_free(_eina_rectangle_alloc_mp, del); - } - - while (pool->bucket) { - del = eina_trash_pop(&pool->bucket); - eina_mempool_free(_eina_rectangle_alloc_mp, del); - } - - MAGIC_FREE(pool); -} - -/** - * @brief Return the number of rectangles in the given pool. - * - * @param pool The pool. - * @return The number of rectangles in the pool. - * - * This function returns the number of rectangles in @p pool. - */ -EAPI int eina_rectangle_pool_count(Eina_Rectangle_Pool * pool) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(pool, 0); - return pool->references; -} - -/** - * @brief Request a rectangle of given size in the given pool. - * - * @param pool The pool. - * @param w The width of the rectangle to request. - * @param h The height of the rectangle to request. - * @return The requested rectangle on success, @c NULL otherwise. - * - * This function retrieve from @p pool the rectangle of width @p w and - * height @p h. If @p pool is @c NULL, or @p w or @p h are non-positive, - * the function returns @c NULL. If @p w or @p h are greater than the - * pool size, the function returns @c NULL. On success, the function - * returns the rectangle which matches the size (@p w, @p h). - * Otherwise it returns @c NULL. - */ -EAPI Eina_Rectangle *eina_rectangle_pool_request(Eina_Rectangle_Pool * - pool, int w, int h) -{ - Eina_Rectangle_Alloc *new; - Eina_Rectangle *rect; - int x; - int y; - - EINA_SAFETY_ON_NULL_RETURN_VAL(pool, NULL); - - DBG("pool=%p, size=(%d, %d), references=%u", - pool, pool->w, pool->h, pool->references); - - if (w <= 0 || h <= 0) - return NULL; - - if (w > pool->w || h > pool->h) - return NULL; - - /* Sort empty if dirty */ - if (pool->sorted) { - pool->empty = - eina_list_sort(pool->empty, 0, - EINA_COMPARE_CB(_eina_rectangle_cmp)); - pool->sorted = EINA_TRUE; - } - - pool->empty = - _eina_rectangle_empty_space_find(pool->empty, w, h, &x, &y); - if (x == -1) - return NULL; - - pool->sorted = EINA_FALSE; - - if (pool->bucket_count > 0) { - new = eina_trash_pop(&pool->bucket); - pool->bucket_count--; - } else - new = eina_mempool_malloc(_eina_rectangle_alloc_mp, - sizeof(Eina_Rectangle_Alloc) + - sizeof(Eina_Rectangle)); - - if (!new) - return NULL; - - rect = (Eina_Rectangle *) (new + 1); - eina_rectangle_coords_from(rect, x, y, w, h); - - pool->head = eina_inlist_prepend(pool->head, EINA_INLIST_GET(new)); - pool->references++; - - new->pool = pool; - - EINA_MAGIC_SET(new, EINA_RECTANGLE_ALLOC_MAGIC); - DBG("rect=%p pool=%p, size=(%d, %d), references=%u", - rect, pool, pool->w, pool->h, pool->references); - - return rect; -} - -/** - * @brief Remove the given rectangle from the pool. - * - * @param rect The rectangle to remove from the pool. - * - * This function removes @p rect from the pool. If @p rect is - * @c NULL, the function returns immediately. Otherwise it remoes @p - * rect from the pool. - */ -EAPI void eina_rectangle_pool_release(Eina_Rectangle * rect) -{ - Eina_Rectangle_Alloc *era = ((Eina_Rectangle_Alloc *) rect) - 1; - Eina_Rectangle *r; - - EINA_SAFETY_ON_NULL_RETURN(rect); - - EINA_MAGIC_CHECK_RECTANGLE_ALLOC(era); - EINA_MAGIC_CHECK_RECTANGLE_POOL(era->pool); - - DBG("rect=%p pool=%p, size=(%d, %d), references=%u", - rect, era->pool, era->pool->w, era->pool->h, - era->pool->references); - - era->pool->references--; - era->pool->head = - eina_inlist_remove(era->pool->head, EINA_INLIST_GET(era)); - - r = eina_rectangle_new(rect->x, rect->y, rect->w, rect->h); - if (r) { - era->pool->empty = - _eina_rectangle_merge_list(era->pool->empty, r); - era->pool->sorted = EINA_FALSE; - } - - if (era->pool->bucket_count < BUCKET_THRESHOLD) { - Eina_Rectangle_Pool *pool; - - pool = era->pool; - - pool->bucket_count++; - eina_trash_push(&pool->bucket, era); - } else { - EINA_MAGIC_SET(era, EINA_MAGIC_NONE); - eina_mempool_free(_eina_rectangle_alloc_mp, era); - } -} - -/** - * @brief Return the pool of the given rectangle. - * - * @param rect The rectangle. - * @return The pool of the given rectangle. - * - * This function returns the pool in which @p rect is. If @p rect is - * @c NULL, @c NULL is returned. - */ -EAPI Eina_Rectangle_Pool *eina_rectangle_pool_get(Eina_Rectangle * rect) -{ - Eina_Rectangle_Alloc *era = ((Eina_Rectangle_Alloc *) rect) - 1; - - EINA_SAFETY_ON_NULL_RETURN_VAL(rect, NULL); - - EINA_MAGIC_CHECK_RECTANGLE_ALLOC(era); - EINA_MAGIC_CHECK_RECTANGLE_POOL(era->pool); - - return era->pool; -} - -/** - * @brief Set the data to the given pool. - * - * @param pool The pool. - * @param data The data to set. - * - * This function sets @p data to @p pool. If @p pool is @c NULL, this - * function does nothing. - */ -EAPI void -eina_rectangle_pool_data_set(Eina_Rectangle_Pool * pool, const void *data) -{ - EINA_MAGIC_CHECK_RECTANGLE_POOL(pool); - EINA_SAFETY_ON_NULL_RETURN(pool); - - DBG("data=%p pool=%p, size=(%d, %d), references=%u", - data, pool, pool->w, pool->h, pool->references); - - pool->data = (void *) data; -} - -/** - * @brief Get the data from the given pool. - * - * @param pool The pool. - * @return The returned data. - * - * This function gets the data from @p pool set by - * eina_rectangle_pool_data_set(). If @p pool is @c NULL, this - * function returns @c NULL. - */ -EAPI void *eina_rectangle_pool_data_get(Eina_Rectangle_Pool * pool) -{ - EINA_MAGIC_CHECK_RECTANGLE_POOL(pool); - EINA_SAFETY_ON_NULL_RETURN_VAL(pool, NULL); - - return pool->data; -} - -/** - * @brief Return the width and height of the given pool. - * - * @param pool The pool. - * @param w The returned width. - * @param h The returned height. - * @return #EINA_TRUE on success, #EINA_FALSE otherwise. - * - * This function returns the width and height of @p pool and store - * them in respectively @p w and @p h if they are not @c NULL. If - * @p pool is @c NULL, #EINA_FALSE is returned. Otherwise #EINA_TRUE is - * returned. - */ -EAPI Eina_Bool -eina_rectangle_pool_geometry_get(Eina_Rectangle_Pool * pool, int *w, - int *h) -{ - if (!pool) - return EINA_FALSE; - - EINA_MAGIC_CHECK_RECTANGLE_POOL(pool); - EINA_SAFETY_ON_NULL_RETURN_VAL(pool, EINA_FALSE); - - if (w) - *w = pool->w; - - if (h) - *h = pool->h; - - return EINA_TRUE; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_safety_checks.c b/tests/suite/ecore/src/lib/eina_safety_checks.c deleted file mode 100644 index 78f82c76ac..0000000000 --- a/tests/suite/ecore/src/lib/eina_safety_checks.c +++ /dev/null @@ -1,112 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2008 Gustavo Sverzut Barbieri - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "eina_private.h" -#include "eina_error.h" -#include "eina_log.h" -#include "eina_safety_checks.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Shut down the safety checks module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the error module set up by - * eina_safety_checks_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_safety_checks_shutdown(void) -{ - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Safety_Checks_Group Safety Checks - * - * Safety checks are a set of macros to check for parameters or values - * that should never happen, it is similar in concept to assert(), but - * will log and return instead of abort() your program. - * - * Since these cases should never happen, one may wantto keep safety - * checks enabled during tests but disable then during deploy, not - * doing any checks at all. This is a common requirement for embedded - * systems. Whenever to check or not should be set during compile time - * by using @c --disable-safety-checks or @c --enable-safety-checks - * options to @c configure script. - * - * Whenever these macros capture an error, EINA_LOG_ERR() will be - * called and @c eina_error set to @c EINA_ERROR_SAFETY_FAILED and can - * be checked with eina_error_get() after call. - * - * @see EINA_SAFETY_ON_NULL_RETURN(), EINA_SAFETY_ON_NULL_RETURN_VAL() - * and other macros. - * - * @{ - */ - -/** - * @cond LOCAL - */ - -EAPI Eina_Error EINA_ERROR_SAFETY_FAILED = 0; - -static const char EINA_ERROR_SAFETY_FAILED_STR[] = "Safety check failed."; - -/** - * @endcond - */ - -/** - * @internal - * @brief Initialize the safety checks module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the safety checks module of Eina. It is - * called by eina_init(). - * - * @see eina_init() - */ -Eina_Bool eina_safety_checks_init(void) -{ - EINA_ERROR_SAFETY_FAILED = - eina_error_msg_static_register(EINA_ERROR_SAFETY_FAILED_STR); - return EINA_TRUE; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_sched.c b/tests/suite/ecore/src/lib/eina_sched.c deleted file mode 100644 index 69e2d06682..0000000000 --- a/tests/suite/ecore/src/lib/eina_sched.c +++ /dev/null @@ -1,90 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2010 ProFUSION embedded systems - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef EFL_HAVE_POSIX_THREADS -#include -#ifdef __linux__ -#include -#include -#include -#include -#endif -#endif - -#include "eina_sched.h" -#include "eina_log.h" - -#define RTNICENESS 5 -#define NICENESS 5 - -/** - * @brief Lower priority of current thread. - * - * It's used by worker threads so they use up background cpu and do not stall - * the main thread If current thread is running with real-time priority, we - * decrease our priority by @c RTNICENESS. This is done in a portable way. - * - * Otherwise (we are running with SCHED_OTHER policy) there's no portable way to - * set the nice level on current thread. In Linux, it does work and it's the - * only one that is implemented as of now. In this case the nice level is - * incremented on this thread by @c NICENESS. - */ -EAPI void eina_sched_prio_drop(void) -{ -#ifdef EFL_HAVE_POSIX_THREADS - struct sched_param param; - int pol, prio, ret; - pthread_t pthread_id; - - pthread_id = pthread_self(); - ret = pthread_getschedparam(pthread_id, &pol, ¶m); - if (ret) { - EINA_LOG_ERR("Unable to query sched parameters"); - return; - } - - if (EINA_UNLIKELY(pol == SCHED_RR || pol == SCHED_FIFO)) { - prio = sched_get_priority_max(pol); - param.sched_priority += RTNICENESS; - if (prio > 0 && param.sched_priority > prio) - param.sched_priority = prio; - - pthread_setschedparam(pthread_id, pol, ¶m); - } -#ifdef __linux__ - else { - errno = 0; - prio = getpriority(PRIO_PROCESS, 0); - if (errno == 0) { - prio += NICENESS; - if (prio > 19) - prio = 19; - - setpriority(PRIO_PROCESS, 0, prio); - } - } -#endif -#else - EINA_LOG_ERR("Eina does not have support for threads enabled" - "or it doesn't support setting scheduler priorities"); -#endif -} diff --git a/tests/suite/ecore/src/lib/eina_share_common.c b/tests/suite/ecore/src/lib/eina_share_common.c deleted file mode 100644 index 76deb8b3ac..0000000000 --- a/tests/suite/ecore/src/lib/eina_share_common.c +++ /dev/null @@ -1,954 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2010 - * Carsten Haitzler, - * Jorge Luis Zapata Muga, - * Cedric Bail, - * Gustavo Sverzut Barbieri - * Tom Hacohen - * Brett Nash - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - * - * This file incorporates work covered by the following copyright and - * permission notice: - * - * Copyright (C) 2008 Peter Wehrfritz - * - * 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 of the Software and its Copyright notices. In addition publicly - * documented acknowledgment must be given that this software has been used if no - * source code of this software is made available publicly. This includes - * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing - * documents or any documentation provided with any product containing this - * software. This License does not apply to any software that links to the - * libraries provided by this software (statically or dynamically), but only to - * the software provided. - * - * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice - * and it's intent. - * - * 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 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include - -#ifdef EFL_HAVE_POSIX_THREADS -#include -#endif - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_hash.h" -#include "eina_rbtree.h" -#include "eina_error.h" -#include "eina_log.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_share_common.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -#define EINA_SHARE_COMMON_BUCKETS 256 -#define EINA_SHARE_COMMON_MASK 0xFF - -static const char EINA_MAGIC_SHARE_STR[] = "Eina Share"; -static const char EINA_MAGIC_SHARE_HEAD_STR[] = "Eina Share Head"; - - -#define EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(d, unlock, ...) \ - do { \ - if (!EINA_MAGIC_CHECK((d), EINA_MAGIC_SHARE_HEAD)) \ - { \ - EINA_MAGIC_FAIL((d), EINA_MAGIC_SHARE_HEAD); \ - unlock; \ - return __VA_ARGS__; \ - } \ - } while (0) - -#define EINA_MAGIC_CHECK_SHARE_COMMON_NODE(d, _node_magic, unlock) \ - do { \ - if (!EINA_MAGIC_CHECK((d), _node_magic)) \ - { \ - unlock; \ - EINA_MAGIC_FAIL((d), _node_magic); \ - } \ - } while (0) - -#ifdef EINA_SHARE_USAGE -typedef struct _Eina_Share_Common_Population Eina_Share_Common_Population; -#endif - -typedef struct _Eina_Share_Common Eina_Share_Common; -typedef struct _Eina_Share_Common_Node Eina_Share_Common_Node; -typedef struct _Eina_Share_Common_Head Eina_Share_Common_Head; - -int _eina_share_common_log_dom = -1; - -struct _Eina_Share { - Eina_Share_Common *share; - Eina_Magic node_magic; -#ifdef EINA_SHARE_COMMON_USAGE - Eina_Share_Common_Population population; - int max_node_population; -#endif -}; - -struct _Eina_Share_Common { - Eina_Share_Common_Head *buckets[EINA_SHARE_COMMON_BUCKETS]; - - EINA_MAGIC}; - -struct _Eina_Share_Common_Node { - Eina_Share_Common_Node *next; - - EINA_MAGIC unsigned int length; - unsigned int references; - char str[]; -}; - -struct _Eina_Share_Common_Head { - EINA_RBTREE; - EINA_MAGIC int hash; - -#ifdef EINA_SHARE_COMMON_USAGE - int population; -#endif - - Eina_Share_Common_Node *head; - Eina_Share_Common_Node builtin_node; -}; - -#ifdef EFL_HAVE_THREADS -Eina_Bool _share_common_threads_activated = EINA_FALSE; - -#ifdef EFL_HAVE_POSIX_THREADS -static pthread_mutex_t _mutex_big = PTHREAD_MUTEX_INITIALIZER; -#define SHARE_COMMON_LOCK_BIG() if(_share_common_threads_activated) \ - pthread_mutex_lock(&_mutex_big) -#define SHARE_COMMON_UNLOCK_BIG() if(_share_common_threads_activated) \ - pthread_mutex_unlock(&_mutex_big) -#else /* EFL_HAVE_WIN32_THREADS */ -static HANDLE _mutex_big = NULL; -#define SHARE_COMMON_LOCK_BIG() if(_share_common_threads_activated) \ - WaitForSingleObject(_mutex_big, INFINITE) -#define SHARE_COMMON_UNLOCK_BIG() if(_share_common_threads_activated) \ - ReleaseMutex(_mutex_big) - -#endif /* EFL_HAVE_WIN32_THREADS */ -#else /* EFL_HAVE_THREADS */ -#define SHARE_COMMON_LOCK_BIG() do {} while (0) -#define SHARE_COMMON_UNLOCK_BIG() do {} while (0) -#endif - -#ifdef EINA_SHARE_COMMON_USAGE -struct _Eina_Share_Common_Population { - int count; - int max; -}; - -static Eina_Share_Common_Population population = { 0, 0 }; - -static Eina_Share_Common_Population population_group[4] = { - {0, 0}, - {0, 0}, - {0, 0}, - {0, 0} -}; - -static void _eina_share_common_population_init(Eina_Share * share) -{ - unsigned int i; - - for (i = 0; - i < sizeof(share->population_group) / - sizeof(share->population_group[0]); ++i) { - share->population_group[i].count = 0; - share->population_group[i].max = 0; - } -} - -static void _eina_share_common_population_shutdown(Eina_Share * share) -{ - unsigned int i; - - share->max_node_population = 0; - share->population.count = 0; - share->population.max = 0; - - for (i = 0; - i < sizeof(share->population_group) / - sizeof(share->population_group[0]); ++i) { - share->population_group[i].count = 0; - share->population_group[i].max = 0; - } -} - -static void _eina_share_common_population_stats(Eina_Share * share) -{ - unsigned int i; - - fprintf(stderr, "eina share_common statistic:\n"); - fprintf(stderr, - " * maximum shared strings : %i\n", share->population.max); - fprintf(stderr, - " * maximum shared strings per node : %i\n", - share->max_node_population); - - for (i = 0; - i < sizeof(share->population_group) / - sizeof(share->population_group[0]); ++i) - fprintf(stderr, - "DDD: %i strings of length %i, max strings: %i\n", - share->population_group[i].count, - i, share->population_group[i].max); -} - -void eina_share_common_population_add(Eina_Share * share, int slen) -{ - SHARE_COMMON_LOCK_BIG(); - - share->population.count++; - if (share->population.count > share->population.max) - share->population.max = share->population.count; - - if (slen < 4) { - share->population_group[slen].count++; - if (share->population_group[slen].count > - share->population_group[slen].max) - share->population_group[slen].max = - share->population_group[slen].count; - } - - SHARE_COMMON_UNLOCK_BIG(); -} - -void eina_share_common_population_del(Eina_Share * share, int slen) -{ - SHARE_COMMON_LOCK_BIG(); - - share->population.count--; - if (slen < 4) - share->population_group[slen].count--; - - SHARE_COMMON_UNLOCK_BIG(); -} - -static void -_eina_share_common_population_head_init(Eina_Share * share, - Eina_Share_Common_Head * head) -{ - head->population = 1; -} - -static void -_eina_share_common_population_head_add(Eina_Share * share, - Eina_Share_Common_Head * head) -{ - head->population++; - if (head->population > share->max_node_population) - share->max_node_population = head->population; -} - -static void -_eina_share_common_population_head_del(Eina_Share * share, - Eina_Share_Common_Head * head) -{ - head->population--; -} - -#else /* EINA_SHARE_COMMON_USAGE undefined */ - -static void _eina_share_common_population_init(__UNUSED__ Eina_Share * - share) -{ -} - -static void _eina_share_common_population_shutdown(__UNUSED__ Eina_Share * - share) -{ -} - -static void _eina_share_common_population_stats(__UNUSED__ Eina_Share * - share) -{ -} - -void eina_share_common_population_add(__UNUSED__ Eina_Share * share, - __UNUSED__ int slen) -{ -} - -void eina_share_common_population_del(__UNUSED__ Eina_Share * share, - __UNUSED__ int slen) -{ -} - -static void _eina_share_common_population_head_init(__UNUSED__ Eina_Share * - share, - __UNUSED__ - Eina_Share_Common_Head - * head) -{ -} - -static void _eina_share_common_population_head_add(__UNUSED__ Eina_Share * - share, - __UNUSED__ - Eina_Share_Common_Head * - head) -{ -} - -static void _eina_share_common_population_head_del(__UNUSED__ Eina_Share * - share, - __UNUSED__ - Eina_Share_Common_Head * - head) -{ -} -#endif - -static int -_eina_share_common_cmp(const Eina_Share_Common_Head * ed, - const int *hash, - __UNUSED__ int length, __UNUSED__ void *data) -{ - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed,, 0); - - return ed->hash - *hash; -} - -static Eina_Rbtree_Direction -_eina_share_common_node(const Eina_Share_Common_Head * left, - const Eina_Share_Common_Head * right, - __UNUSED__ void *data) -{ - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(left,, 0); - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(right,, 0); - - if (left->hash - right->hash < 0) - return EINA_RBTREE_LEFT; - - return EINA_RBTREE_RIGHT; -} - -static void -_eina_share_common_head_free(Eina_Share_Common_Head * ed, - __UNUSED__ void *data) -{ - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed,); - - while (ed->head) { - Eina_Share_Common_Node *el = ed->head; - - ed->head = ed->head->next; - if (el != &ed->builtin_node) - MAGIC_FREE(el); - } - MAGIC_FREE(ed); -} - -static void -_eina_share_common_node_init(Eina_Share_Common_Node * node, - const char *str, - int slen, - unsigned int null_size, Eina_Magic node_magic) -{ - EINA_MAGIC_SET(node, node_magic); - node->references = 1; - node->length = slen; - memcpy(node->str, str, slen); - memset(node->str + slen, 0, null_size); /* Nullify the null */ - - (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */ -} - -static Eina_Share_Common_Head *_eina_share_common_head_alloc(int slen) -{ - Eina_Share_Common_Head *head; - const size_t head_size = - offsetof(Eina_Share_Common_Head, builtin_node.str); - - head = malloc(head_size + slen); - if (!head) - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - - return head; -} - -static const char *_eina_share_common_add_head(Eina_Share * share, - Eina_Share_Common_Head ** - p_bucket, int hash, - const char *str, - unsigned int slen, - unsigned int null_size) -{ - Eina_Rbtree **p_tree = (Eina_Rbtree **) p_bucket; - Eina_Share_Common_Head *head; - - head = _eina_share_common_head_alloc(slen + null_size); - if (!head) - return NULL; - - EINA_MAGIC_SET(head, EINA_MAGIC_SHARE_HEAD); - head->hash = hash; - head->head = &head->builtin_node; - _eina_share_common_node_init(head->head, - str, - slen, null_size, share->node_magic); - head->head->next = NULL; - - _eina_share_common_population_head_init(share, head); - - *p_tree = eina_rbtree_inline_insert - (*p_tree, EINA_RBTREE_GET(head), - EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL); - - return head->head->str; -} - -static void -_eina_share_common_del_head(Eina_Share_Common_Head ** p_bucket, - Eina_Share_Common_Head * head) -{ - Eina_Rbtree **p_tree = (Eina_Rbtree **) p_bucket; - - *p_tree = eina_rbtree_inline_remove - (*p_tree, EINA_RBTREE_GET(head), - EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL); - - MAGIC_FREE(head); -} - - -static inline Eina_Bool -_eina_share_common_node_eq(const Eina_Share_Common_Node * node, - const char *str, unsigned int slen) -{ - return ((node->length == slen) && - (memcmp(node->str, str, slen) == 0)); -} - -static Eina_Share_Common_Node - *_eina_share_common_head_find(Eina_Share_Common_Head * head, - const char *str, unsigned int slen) -{ - Eina_Share_Common_Node *node, *prev; - - node = head->head; - if (_eina_share_common_node_eq(node, str, slen)) - return node; - - prev = node; - node = node->next; - for (; node; prev = node, node = node->next) - if (_eina_share_common_node_eq(node, str, slen)) { - /* promote node, make hot items be at the beginning */ - prev->next = node->next; - node->next = head->head; - head->head = node; - return node; - } - - return NULL; -} - -static Eina_Bool -_eina_share_common_head_remove_node(Eina_Share_Common_Head * head, - const Eina_Share_Common_Node * node) -{ - Eina_Share_Common_Node *cur, *prev; - - if (head->head == node) { - head->head = node->next; - return 1; - } - - prev = head->head; - cur = head->head->next; - for (; cur; prev = cur, cur = cur->next) - if (cur == node) { - prev->next = cur->next; - return 1; - } - - return 0; -} - -static Eina_Share_Common_Head - *_eina_share_common_find_hash(Eina_Share_Common_Head * bucket, - int hash) -{ - return (Eina_Share_Common_Head *) eina_rbtree_inline_lookup - (EINA_RBTREE_GET(bucket), &hash, 0, - EINA_RBTREE_CMP_KEY_CB(_eina_share_common_cmp), NULL); -} - -static Eina_Share_Common_Node *_eina_share_common_node_alloc(unsigned int - slen, - unsigned int - null_size) -{ - Eina_Share_Common_Node *node; - const size_t node_size = offsetof(Eina_Share_Common_Node, str); - - node = malloc(node_size + slen + null_size); - if (!node) - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - - return node; -} - -static Eina_Share_Common_Node *_eina_share_common_node_from_str(const char - *str, - Eina_Magic - node_magic) -{ - Eina_Share_Common_Node *node; - const size_t offset = offsetof(Eina_Share_Common_Node, str); - - node = (Eina_Share_Common_Node *) (str - offset); - EINA_MAGIC_CHECK_SHARE_COMMON_NODE(node, node_magic,); - return node; - - (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */ -} - -static Eina_Bool -eina_iterator_array_check(const Eina_Rbtree * rbtree __UNUSED__, - Eina_Share_Common_Head * head, - struct dumpinfo *fdata) -{ - Eina_Share_Common_Node *node; - - SHARE_COMMON_LOCK_BIG(); - - fdata->used += sizeof(Eina_Share_Common_Head); - for (node = head->head; node; node = node->next) { - printf("DDD: %5i %5i ", node->length, node->references); - printf("'%.*s'\n", node->length, - ((char *) node) + sizeof(Eina_Share_Common_Node)); - fdata->used += sizeof(Eina_Share_Common_Node); - fdata->used += node->length; - fdata->saved += (node->references - 1) * node->length; - fdata->dups += node->references - 1; - fdata->unique++; - } - - SHARE_COMMON_UNLOCK_BIG(); - - return EINA_TRUE; -} - -/** - * @endcond - */ - - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the share_common module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the share_common module of Eina. It is called by - * eina_init(). - * - * @see eina_init() - */ -Eina_Bool -eina_share_common_init(Eina_Share ** _share, - Eina_Magic node_magic, const char *node_magic_STR) -{ - Eina_Share *share; - share = *_share = calloc(sizeof(Eina_Share), 1); - if (!share) - return EINA_FALSE; - - if (_eina_share_common_log_dom < 0) /*Only register if not already */ - _eina_share_common_log_dom = - eina_log_domain_register("eina_share", - EINA_LOG_COLOR_DEFAULT); - - if (_eina_share_common_log_dom < 0) { - EINA_LOG_ERR - ("Could not register log domain: eina_share_common"); - return EINA_FALSE; - } - - share->share = calloc(1, sizeof(Eina_Share_Common)); - if (!share->share) { - if (_eina_share_common_log_dom > 0) { - eina_log_domain_unregister - (_eina_share_common_log_dom); - _eina_share_common_log_dom = -1; - } - - return EINA_FALSE; - } - - share->node_magic = node_magic; -#define EMS(n) eina_magic_string_static_set(n, n ## _STR) - EMS(EINA_MAGIC_SHARE); - EMS(EINA_MAGIC_SHARE_HEAD); - EMS(node_magic); -#undef EMS - EINA_MAGIC_SET(share->share, EINA_MAGIC_SHARE); - - _eina_share_common_population_init(share); - return EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the share_common module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the share_common module set up by - * eina_share_common_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_share_common_shutdown(Eina_Share ** _share) -{ - unsigned int i; - Eina_Share *share = *_share; - - SHARE_COMMON_LOCK_BIG(); - - _eina_share_common_population_stats(share); - - /* remove any string still in the table */ - for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++) { - eina_rbtree_delete(EINA_RBTREE_GET - (share->share->buckets[i]), - EINA_RBTREE_FREE_CB - (_eina_share_common_head_free), NULL); - share->share->buckets[i] = NULL; - } - MAGIC_FREE(share->share); - - _eina_share_common_population_shutdown(share); - if (_eina_share_common_log_dom > 0) { /* Only free if necessary */ - eina_log_domain_unregister(_eina_share_common_log_dom); - _eina_share_common_log_dom = -1; - } - - SHARE_COMMON_UNLOCK_BIG(); - - free(*_share); - *_share = NULL; - return EINA_TRUE; -} - -#ifdef EFL_HAVE_THREADS - -/** - * @internal - * @brief Activate the share_common mutexes. - * - * This function activate the mutexes in the eina share_common module. It is called by - * eina_threads_init(). - * - * @see eina_threads_init() - */ -void eina_share_common_threads_init(void) -{ - _share_common_threads_activated = EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the share_common mutexes. - * - * This function shuts down the mutexes in the share_common module. - * It is called by eina_threads_shutdown(). - * - * @see eina_threads_shutdown() - */ -void eina_share_common_threads_shutdown(void) -{ - _share_common_threads_activated = EINA_FALSE; -} - -#endif - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -const char *eina_share_common_add_length(Eina_Share * share, - const char *str, - unsigned int slen, - unsigned int null_size) -{ - Eina_Share_Common_Head **p_bucket, *ed; - Eina_Share_Common_Node *el; - int hash_num, hash; - - if (!str) - return NULL; - - eina_share_common_population_add(share, slen); - - if (slen <= 0) - return NULL; - - hash = eina_hash_superfast(str, slen); - hash_num = hash & 0xFF; - hash = (hash >> 8) & EINA_SHARE_COMMON_MASK; - - SHARE_COMMON_LOCK_BIG(); - p_bucket = share->share->buckets + hash_num; - - ed = _eina_share_common_find_hash(*p_bucket, hash); - if (!ed) { - const char *s = _eina_share_common_add_head(share, - p_bucket, - hash, - str, - slen, - null_size); - SHARE_COMMON_UNLOCK_BIG(); - return s; - } - - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, SHARE_COMMON_UNLOCK_BIG(), - NULL); - - el = _eina_share_common_head_find(ed, str, slen); - if (el) { - EINA_MAGIC_CHECK_SHARE_COMMON_NODE(el, - share->node_magic, - SHARE_COMMON_UNLOCK_BIG - ()); - el->references++; - SHARE_COMMON_UNLOCK_BIG(); - return el->str; - } - - el = _eina_share_common_node_alloc(slen, null_size); - if (!el) { - SHARE_COMMON_UNLOCK_BIG(); - return NULL; - } - - _eina_share_common_node_init(el, str, slen, null_size, - share->node_magic); - el->next = ed->head; - ed->head = el; - _eina_share_common_population_head_add(share, ed); - - SHARE_COMMON_UNLOCK_BIG(); - - return el->str; -} - -const char *eina_share_common_ref(Eina_Share * share, const char *str) -{ - Eina_Share_Common_Node *node; - - if (!str) - return NULL; - - SHARE_COMMON_LOCK_BIG(); - node = _eina_share_common_node_from_str(str, share->node_magic); - node->references++; - DBG("str=%p refs=%u", str, node->references); - - SHARE_COMMON_UNLOCK_BIG(); - - eina_share_common_population_add(share, node->length); - - return str; -} - - -void eina_share_common_del(Eina_Share * share, const char *str) -{ - unsigned int slen; - Eina_Share_Common_Head *ed; - Eina_Share_Common_Head **p_bucket; - Eina_Share_Common_Node *node; - int hash_num, hash; - - if (!str) - return; - - SHARE_COMMON_LOCK_BIG(); - - node = _eina_share_common_node_from_str(str, share->node_magic); - slen = node->length; - eina_share_common_population_del(share, slen); - if (node->references > 1) { - node->references--; - DBG("str=%p refs=%u", str, node->references); - SHARE_COMMON_UNLOCK_BIG(); - return; - } - - DBG("str=%p refs=0, delete.", str); - node->references = 0; - - hash = eina_hash_superfast(str, slen); - hash_num = hash & 0xFF; - hash = (hash >> 8) & EINA_SHARE_COMMON_MASK; - - p_bucket = share->share->buckets + hash_num; - ed = _eina_share_common_find_hash(*p_bucket, hash); - if (!ed) - goto on_error; - - EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, SHARE_COMMON_UNLOCK_BIG()); - - if (!_eina_share_common_head_remove_node(ed, node)) - goto on_error; - - if (node != &ed->builtin_node) - MAGIC_FREE(node); - - if (!ed->head) - _eina_share_common_del_head(p_bucket, ed); - else - _eina_share_common_population_head_del(share, ed); - - SHARE_COMMON_UNLOCK_BIG(); - - return; - - on_error: - SHARE_COMMON_UNLOCK_BIG(); - /* possible segfault happened before here, but... */ - CRITICAL("EEEK trying to del non-shared share_common \"%s\"", str); -} - -int -eina_share_common_length(__UNUSED__ Eina_Share * share, const char *str) -{ - const Eina_Share_Common_Node *node; - - if (!str) - return -1; - - node = _eina_share_common_node_from_str(str, share->node_magic); - return node->length; -} - -void -eina_share_common_dump(Eina_Share * share, - void (*additional_dump) (struct dumpinfo *), - int used) -{ - Eina_Iterator *it; - unsigned int i; - struct dumpinfo di; - - if (!share) - return; - - di.used = used; - di.saved = 0; - di.dups = 0; - di.unique = 0; - printf("DDD: len ref string\n"); - printf("DDD:-------------------\n"); - - SHARE_COMMON_LOCK_BIG(); - for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++) { - if (!share->share->buckets[i]) { - continue; // printf("DDD: BUCKET # %i (HEAD=%i, NODE=%i)\n", i, - - } -// sizeof(Eina_Share_Common_Head), sizeof(Eina_Share_Common_Node)); - it = eina_rbtree_iterator_prefix((Eina_Rbtree *) share-> - share->buckets[i]); - eina_iterator_foreach(it, - EINA_EACH_CB - (eina_iterator_array_check), &di); - eina_iterator_free(it); - } - if (additional_dump) - additional_dump(&di); - -#ifdef EINA_SHARE_COMMON_USAGE - /* One character strings are not counted in the hash. */ - di.saved += share->population_group[0].count * sizeof(char); - di.saved += share->population_group[1].count * sizeof(char) * 2; -#endif - printf("DDD:-------------------\n"); - printf("DDD: usage (bytes) = %i, saved = %i (%3.0f%%)\n", - di.used, di.saved, - di.used ? (di.saved * 100.0 / di.used) : 0.0); - printf("DDD: unique: %d, duplicates: %d (%3.0f%%)\n", di.unique, - di.dups, di.unique ? (di.dups * 100.0 / di.unique) : 0.0); - -#ifdef EINA_SHARE_COMMON_USAGE - printf("DDD: Allocated strings: %i\n", share->population.count); - printf("DDD: Max allocated strings: %i\n", share->population.max); - - for (i = 0; - i < sizeof(share->population_group) / - sizeof(share->population_group[0]); ++i) - fprintf(stderr, - "DDD: %i strings of length %i, max strings: %i\n", - share->population_group[i].count, - i, share->population_group[i].max); -#endif - - SHARE_COMMON_UNLOCK_BIG(); -} - -/** - * @endcond - */ diff --git a/tests/suite/ecore/src/lib/eina_share_common.h b/tests/suite/ecore/src/lib/eina_share_common.h deleted file mode 100644 index 99b8481f95..0000000000 --- a/tests/suite/ecore/src/lib/eina_share_common.h +++ /dev/null @@ -1,103 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - * - * This file incorporates work covered by the following copyright and - * permission notice: - * - * Copyright (C) 2008 Peter Wehrfritz - * - * 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 of the Software and its Copyright notices. In addition publicly - * documented acknowledgment must be given that this software has been used if no - * source code of this software is made available publicly. This includes - * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing - * documents or any documentation provided with any product containing this - * software. This License does not apply to any software that links to the - * libraries provided by this software (statically or dynamically), but only to - * the software provided. - * - * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice - * and it's intent. - * - * 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 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. - */ - -#ifndef EINA_SHARE_COMMON_H_ -#define EINA_SHARE_COMMON_H_ - -#include "eina_types.h" -#include "eina_magic.h" - -typedef struct _Eina_Share Eina_Share; - -struct dumpinfo { - int used, saved, dups, unique; -}; - -Eina_Bool eina_share_common_init(Eina_Share ** share, - Eina_Magic node_magic, - const char *node_magic_STR); -Eina_Bool eina_share_common_shutdown(Eina_Share ** share); -const char *eina_share_common_add_length(Eina_Share * share, - const char *str, - unsigned int slen, - unsigned int null_size) - EINA_WARN_UNUSED_RESULT; -const char *eina_share_common_ref(Eina_Share * share, const char *str); -void eina_share_common_del(Eina_Share * share, const char *str); -int eina_share_common_length(Eina_Share * share, - const char *str) EINA_CONST - EINA_WARN_UNUSED_RESULT; -void eina_share_common_dump(Eina_Share * share, - void (*additional_dump) (struct dumpinfo *), - int used); - - -/* Population functions */ -void eina_share_common_population_add(Eina_Share * share, int slen); -void eina_share_common_population_del(Eina_Share * share, int slen); - -/* Share logging */ -#ifdef CRITICAL -#undef CRITICAL -#endif -#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_share_common_log_dom, __VA_ARGS__) - -#ifdef ERR -#undef ERR -#endif -#define ERR(...) EINA_LOG_DOM_ERR(_eina_share_common_log_dom, __VA_ARGS__) - -#ifdef DBG -#undef DBG -#endif -#define DBG(...) EINA_LOG_DOM_DBG(_eina_share_common_log_dom, __VA_ARGS__) -extern int _eina_share_common_log_dom; - -#endif /* EINA_STRINGSHARE_H_ */ diff --git a/tests/suite/ecore/src/lib/eina_str.c b/tests/suite/ecore/src/lib/eina_str.c deleted file mode 100644 index 13cecfb3fc..0000000000 --- a/tests/suite/ecore/src/lib/eina_str.c +++ /dev/null @@ -1,594 +0,0 @@ -/* Leave the OpenBSD version below so we can track upstream fixes */ -/* $OpenBSD: strlcpy.c,v 1.11 2006/05/05 15:27:38 millert Exp $ */ - -/* - * Copyright (c) 1998 Todd C. Miller - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include -#include -#include - -#ifdef HAVE_ICONV -#include -#include -#endif - -#include "eina_private.h" -#include "eina_str.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -/* - * Internal helper function used by eina_str_has_suffix() and - * eina_str_has_extension() - */ -static inline Eina_Bool -eina_str_has_suffix_helper(const char *str, - const char *suffix, - int (*cmp) (const char *, const char *)) -{ - size_t str_len; - size_t suffix_len; - - str_len = strlen(str); - suffix_len = eina_strlen_bounded(suffix, str_len); - if (suffix_len == (size_t) - 1) - return EINA_FALSE; - - return cmp(str + str_len - suffix_len, suffix) == 0; -} - -static inline char **eina_str_split_full_helper(const char *str, - const char *delim, - int max_tokens, - unsigned int *elements) -{ - char *s, **str_array; - const char *src; - size_t len, dlen; - unsigned int tokens; - - dlen = strlen(delim); - if (dlen == 0) { - if (elements) - *elements = 0; - - return NULL; - } - - tokens = 0; - src = str; - /* count tokens and check strlen(str) */ - while (*src != '\0') { - const char *d = delim, *d_end = d + dlen; - const char *tmp = src; - for (; (d < d_end) && (*tmp != '\0'); d++, tmp++) { - if (EINA_LIKELY(*d != *tmp)) - break; - } - if (EINA_UNLIKELY(d == d_end)) { - src = tmp; - tokens++; - } else - src++; - } - len = src - str; - - if ((max_tokens > 0) && (tokens > (unsigned int) max_tokens)) - tokens = max_tokens; - - str_array = malloc(sizeof(char *) * (tokens + 2)); - if (!str_array) { - if (elements) - *elements = 0; - - return NULL; - } - - s = malloc(len + 1); - if (!s) { - free(str_array); - if (elements) - *elements = 0; - - return NULL; - } - - /* copy tokens and string */ - tokens = 0; - str_array[0] = s; - src = str; - while (*src != '\0') { - const char *d = delim, *d_end = d + dlen; - const char *tmp = src; - for (; (d < d_end) && (*tmp != '\0'); d++, tmp++) { - if (EINA_LIKELY(*d != *tmp)) - break; - } - if (EINA_UNLIKELY(d == d_end)) { - src = tmp; - *s = '\0'; - s += dlen; - tokens++; - str_array[tokens] = s; - } else { - *s = *src; - s++; - src++; - } - } - *s = '\0'; - str_array[tokens + 1] = NULL; - if (elements) - *elements = (tokens + 1); - - return str_array; -} - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_String_Group String - * - * @brief These functions provide useful C string management. - * - * @{ - */ - - -/** - * @brief Copy a c-string to another. - * - * @param dst The destination string. - * @param src The source string. - * @param siz The size of the destination string. - * @return The length of the source string. - * - * This function copies up to @p siz - 1 characters from the - * NUL-terminated string @p src to @p dst, NUL-terminating the result - * (unless @p siz is equal to 0). The returned value is the length of - * @p src. If the returned value is greater than @p siz, truncation - * occurred. - */ -EAPI size_t eina_strlcpy(char *dst, const char *src, size_t siz) -{ -#ifdef HAVE_STRLCPY - return strlcpy(dst, src, siz); -#else - char *d = dst; - const char *s = src; - size_t n = siz; - - /* Copy as many bytes as will fit */ - if (n != 0) - while (--n != 0) { - if ((*d++ = *s++) == '\0') - break; - } - - /* Not enough room in dst, add NUL and traverse rest of src */ - if (n == 0) { - if (siz != 0) - *d = '\0'; /* NUL-terminate dst */ - - while (*s++); - } - - return (s - src - 1); /* count does not include NUL */ -#endif -} - -/** - * @brief Append a c-string. - * - * @param dst The destination string. - * @param src The source string. - * @param siz The size of the destination string. - * @return The length of the source string plus MIN(siz, strlen(initial dst)) - * - * This function appends @p src to @p dst of size @p siz (unlike - * strncat, @p siz is the full size of @p dst, not space left). At - * most @p siz - 1 characters will be copied. Always NUL terminates - * (unless @p siz <= strlen(dst)). This function returns strlen(src) + - * MIN(siz, strlen(initial dst)). If the returned value is greater or - * equal than @p siz, truncation occurred. - */ -EAPI size_t eina_strlcat(char *dst, const char *src, size_t siz) -{ - char *d = dst; - const char *s = src; - size_t n = siz; - size_t dlen; - - /* Find the end of dst and adjust bytes left but don't go past end */ - while (n-- != 0 && *d != '\0') - d++; - dlen = d - dst; - n = siz - dlen; - - if (n == 0) - return (dlen + strlen(s)); - - while (*s != '\0') { - if (n != 1) { - *d++ = *s; - n--; - } - - s++; - } - *d = '\0'; - - return (dlen + (s - src)); /* count does not include NUL */ -} - -/** - * @brief Check if the given string has the given prefix. - * - * @param str The string to work with. - * @param prefix The prefix to check for. - * @return #EINA_TRUE if the string has the given prefix, #EINA_FALSE otherwise. - * - * This function returns #EINA_TRUE if @p str has the prefix - * @p prefix, #EINA_FALSE otherwise. If the length of @p prefix is - * greater than @p str, #EINA_FALSE is returned. - */ -EAPI Eina_Bool eina_str_has_prefix(const char *str, const char *prefix) -{ - size_t str_len; - size_t prefix_len; - - str_len = strlen(str); - prefix_len = eina_strlen_bounded(prefix, str_len); - if (prefix_len == (size_t) - 1) - return EINA_FALSE; - - return (strncmp(str, prefix, prefix_len) == 0); -} - -/** - * @brief Check if the given string has the given suffix. - * - * @param str The string to work with. - * @param suffix The suffix to check for. - * @return #EINA_TRUE if the string has the given suffix, #EINA_FALSE otherwise. - * - * This function returns #EINA_TRUE if @p str has the suffix - * @p suffix, #EINA_FALSE otherwise. If the length of @p suffix is - * greater than @p str, #EINA_FALSE is returned. - */ -/** - * @param str the string to work with - * @param suffix the suffix to check for - * @return true if str has the given suffix - * @brief checks if the string has the given suffix - */ -EAPI Eina_Bool eina_str_has_suffix(const char *str, const char *suffix) -{ - return eina_str_has_suffix_helper(str, suffix, strcmp); -} - -/** - * @brief Check if the given string has the given suffix. - * - * @param str The string to work with. - * @param ext The extension to check for. - * @return #EINA_TRUE if the string has the given extension, #EINA_FALSE otherwise. - * - * This function does the same like eina_str_has_suffix(), but with a - * case insensitive compare. - */ -EAPI Eina_Bool eina_str_has_extension(const char *str, const char *ext) -{ - return eina_str_has_suffix_helper(str, ext, strcasecmp); -} - -/** - * @brief Split a string using a delimiter and returns number of elements. - * - * @param str The string to split. - * @param delim The string which specifies the places at which to split the string. - * @param max_tokens The maximum number of strings to split string into. - * @param elements Where to return the number of elements in returned - * array (not counting the terminating @c NULL). May be @c NULL. - * @return A newly-allocated NULL-terminated array of strings or NULL if it - * fails to allocate the array. - * - * This functin splits @p str into a maximum of @p max_tokens pieces, - * using the given delimiter @p delim. @p delim is not included in any - * of the resulting strings, unless @p max_tokens is reached. If - * @p max_tokens is less than @c 1, the string is splitted completely. If - * @p max_tokens is reached, the last string in the returned string - * array contains the remainder of string. The returned value is a - * newly allocated NULL-terminated array of strings or NULL if it fails to - * allocate the array. To free it, free the first element of the array and the - * array itself. - * - * @see eina_str_split() - */ -EAPI char **eina_str_split_full(const char *str, - const char *delim, - int max_tokens, unsigned int *elements) -{ - return eina_str_split_full_helper(str, delim, max_tokens, - elements); -} - - -/** - * @brief Split a string using a delimiter. - * - * @param str The string to split. - * @param delim The string which specifies the places at which to split the string. - * @param max_tokens The maximum number of strings to split string into. - * @return A newly-allocated NULL-terminated array of strings or NULL if it - * fails to allocate the array. - * - * This functin splits @p str into a maximum of @p max_tokens pieces, - * using the given delimiter @p delim. @p delim is not included in any - * of the resulting strings, unless @p max_tokens is reached. If - * @p max_tokens is less than @c 1, the string is splitted completely. If - * @p max_tokens is reached, the last string in the returned string - * array contains the remainder of string. The returned value is a - * newly allocated NULL-terminated array of strings or NULL if it fails to - * allocate the array. To free it, free the first element of the array and the - * array itself. - */ -EAPI char **eina_str_split(const char *str, const char *delim, - int max_tokens) -{ - return eina_str_split_full_helper(str, delim, max_tokens, NULL); -} - -/** - * @brief Join two strings of known length. - * - * @param dst The buffer to store the result. - * @param size Size (in byte) of the buffer. - * @param sep The separator character to use. - * @param a First string to use, before @p sep. - * @param a_len length of @p a. - * @param b Second string to use, after @p sep. - * @param b_len length of @p b. - * @return The number of characters printed. - * - * This function joins the strings @p a and @p b (in that order) and - * separate them with @p sep. The result is stored in the buffer - * @p dst and at most @p size - 1 characters will be written and the - * string is NULL-terminated. @p a_len is the length of @p a (not - * including '\\0') and @p b_len is the length of @p b (not including - * '\\0'). This function returns the number of characters printed (not - * including the trailing '\\0' used to end output to strings). Just - * like snprintf(), it will not write more than @p size bytes, thus a - * returned value of @p size or more means that the output was - * truncated. - * - * @see eina_str_join() - * @see eina_str_join_static() - */ -EAPI size_t -eina_str_join_len(char *dst, - size_t size, - char sep, - const char *a, size_t a_len, const char *b, size_t b_len) -{ - size_t ret = a_len + b_len + 1; - size_t off; - - if (size < 1) - return ret; - - if (size <= a_len) { - memcpy(dst, a, size - 1); - dst[size - 1] = '\0'; - return ret; - } - - memcpy(dst, a, a_len); - off = a_len; - - if (size <= off + 1) { - dst[size - 1] = '\0'; - return ret; - } - - dst[off] = sep; - off++; - - if (size <= off + b_len + 1) { - memcpy(dst + off, b, size - off - 1); - dst[size - 1] = '\0'; - return ret; - } - - memcpy(dst + off, b, b_len); - dst[off + b_len] = '\0'; - return ret; -} - -/** - * @brief Use iconv to convert a text string from one encoding to another - * - * @param enc_from encoding to convert from - * @param enc_to encoding to convert to - * @param text text to convert - * - */ -#ifdef HAVE_ICONV -EAPI char *eina_str_convert(const char *enc_from, const char *enc_to, - const char *text) -{ - iconv_t ic; - char *new_txt, *inp, *outp; - size_t inb, outb, outlen, tob, outalloc; - - if (!text) - return NULL; - - ic = iconv_open(enc_to, enc_from); - if (ic == (iconv_t) (-1)) - return NULL; - - new_txt = malloc(64); - inb = strlen(text); - outb = 64; - inp = (char *) text; - outp = new_txt; - outalloc = 64; - outlen = 0; - - for (;;) { - size_t count; - - tob = outb; - count = iconv(ic, &inp, &inb, &outp, &outb); - outlen += tob - outb; - if (count == (size_t) (-1)) { - if (errno == E2BIG) { - new_txt = realloc(new_txt, outalloc + 64); - outp = new_txt + outlen; - outalloc += 64; - outb += 64; - } else if (errno == EILSEQ) { - if (new_txt) - free(new_txt); - - new_txt = NULL; - break; - } else if (errno == EINVAL) { - if (new_txt) - free(new_txt); - - new_txt = NULL; - break; - } else { - if (new_txt) - free(new_txt); - - new_txt = NULL; - break; - } - } - - if (inb == 0) { - if (outalloc == outlen) - new_txt = realloc(new_txt, outalloc + 1); - - new_txt[outlen] = 0; - break; - } - } - iconv_close(ic); - return new_txt; -} -#else -EAPI char *eina_str_convert(const char *enc_from __UNUSED__, - const char *enc_to __UNUSED__, - const char *text __UNUSED__) -{ - return NULL; -} -#endif - -/** - * @brief Put a \ before and Space( ), \ or ' in a string. - * - * @param str the string to escape - * - * A newly allocated string is returned. - */ -EAPI char *eina_str_escape(const char *str) -{ - char *s2, *d; - const char *s; - - s2 = malloc((strlen(str) * 2) + 1); - if (!s2) - return NULL; - - for (s = str, d = s2; *s != 0; s++, d++) { - if ((*s == ' ') || (*s == '\\') || (*s == '\'')) { - *d = '\\'; - d++; - } - - *d = *s; - } - *d = 0; - return s2; -} - -/** - * @brief Lowercase all the characters in range [A-Z] in the given string. - * - * @param str the string to lowercase - * - * This modifies the original string, changing all characters in [A-Z] to lowercase. - */ -EAPI void eina_str_tolower(char **str) -{ - char *p; - if ((!str) || (!(*str))) - return; - - for (p = *str; (*p); p++) - *p = tolower((unsigned char) (*p)); -} - -/** - * @brief Uppercase all the characters in range [a-z] in the given string. - * - * @param str the string to uppercase - * - * This modifies the original string, changing all characters in [a-z] to uppercase. - */ -EAPI void eina_str_toupper(char **str) -{ - char *p; - if ((!str) || (!(*str))) - return; - - for (p = *str; (*p); p++) - *p = toupper((unsigned char) (*p)); -} - - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_strbuf.c b/tests/suite/ecore/src/lib/eina_strbuf.c deleted file mode 100644 index 338d056d86..0000000000 --- a/tests/suite/ecore/src/lib/eina_strbuf.c +++ /dev/null @@ -1,180 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#define _GNU_SOURCE - -#include -#include - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_private.h" -#include "eina_str.h" -#include "eina_strbuf_common.h" -#include "eina_unicode.h" - -/*============================================================================* - * Local * - *============================================================================*/ - -/** - * @cond LOCAL - */ - -#ifdef _STRBUF_DATA_TYPE -#undef _STRBUF_DATA_TYPE -#endif - -#ifdef _STRBUF_CSIZE -#undef _STRBUF_CSIZE -#endif - -#ifdef _STRBUF_STRUCT_NAME -#undef _STRBUF_STRUCT_NAME -#endif - -#ifdef _STRBUF_STRLEN_FUNC -#undef _STRBUF_STRLEN_FUNC -#endif - -#ifdef _STRBUF_STRESCAPE_FUNC -#undef _STRBUF_STRESCAPE_FUNC -#endif - -#ifdef _STRBUF_MAGIC -#undef _STRBUF_MAGIC -#endif - -#ifdef _STRBUF_MAGIC_STR -#undef _STRBUF_MAGIC_STR -#endif - -#ifdef _FUNC_EXPAND -#undef _FUNC_EXPAND -#endif - - -#define _STRBUF_DATA_TYPE char -#define _STRBUF_CSIZE sizeof(_STRBUF_DATA_TYPE) -#define _STRBUF_STRUCT_NAME Eina_Strbuf -#define _STRBUF_STRLEN_FUNC(x) strlen(x) -#define _STRBUF_STRESCAPE_FUNC(x) eina_str_escape(x) -#define _STRBUF_MAGIC EINA_MAGIC_STRBUF -#define _STRBUF_MAGIC_STR __STRBUF_MAGIC_STR -static const char __STRBUF_MAGIC_STR[] = "Eina Strbuf"; - -#define _FUNC_EXPAND(y) eina_strbuf_ ## y - -/** - * @endcond - */ - - -/*============================================================================* - * Global * - *============================================================================*/ - - -/*============================================================================* - * API * - *============================================================================*/ - - -/** - * @addtogroup Eina_String_Buffer_Group String Buffer - * - * @brief These functions provide string buffers management. - * - * The String Buffer data type is designed to be a mutable string, - * allowing to append, prepend or insert a string to a buffer. - * - * @{ - */ - -EAPI Eina_Bool -eina_strbuf_append_printf(Eina_Strbuf * buf, const char *fmt, ...) -{ - va_list args; - char *str; - size_t len; - Eina_Bool ret; - - va_start(args, fmt); - len = vasprintf(&str, fmt, args); - va_end(args); - - if (len <= 0 || !str) - return EINA_FALSE; - - ret = eina_strbuf_append_length(buf, str, len); - free(str); - return ret; -} - -EAPI Eina_Bool -eina_strbuf_append_vprintf(Eina_Strbuf * buf, const char *fmt, - va_list args) -{ - char *str; - size_t len; - Eina_Bool ret; - - len = vasprintf(&str, fmt, args); - - if (len <= 0 || !str) - return EINA_FALSE; - - ret = eina_strbuf_append_length(buf, str, len); - free(str); - return ret; -} - -EAPI Eina_Bool -eina_strbuf_insert_printf(Eina_Strbuf * buf, const char *fmt, size_t pos, - ...) -{ - va_list args; - char *str; - size_t len; - Eina_Bool ret; - - va_start(args, pos); - len = vasprintf(&str, fmt, args); - va_end(args); - - if (len <= 0 || !str) - return EINA_FALSE; - - ret = eina_strbuf_insert(buf, str, pos); - free(str); - return ret; -} - -EAPI Eina_Bool -eina_strbuf_insert_vprintf(Eina_Strbuf * buf, - const char *fmt, size_t pos, va_list args) -{ - char *str; - size_t len; - Eina_Bool ret; - - len = vasprintf(&str, fmt, args); - - if (len <= 0 || !str) - return EINA_FALSE; - - ret = eina_strbuf_insert(buf, str, pos); - free(str); - return ret; -} - -/* Unicode */ - -#include "eina_strbuf_template_c.x" - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_strbuf_common.c b/tests/suite/ecore/src/lib/eina_strbuf_common.c deleted file mode 100644 index 9e3c09ded1..0000000000 --- a/tests/suite/ecore/src/lib/eina_strbuf_common.c +++ /dev/null @@ -1,834 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#define _GNU_SOURCE - -#include -#include -#include - -#ifdef _WIN32 -#include -#endif - -#include "eina_private.h" -#include "eina_str.h" -#include "eina_magic.h" -#include "eina_error.h" -#include "eina_safety_checks.h" -#include "eina_strbuf.h" -#include "eina_strbuf_common.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/** - * @cond LOCAL - */ - -#define EINA_STRBUF_INIT_SIZE 32 -#define EINA_STRBUF_INIT_STEP 32 -#define EINA_STRBUF_MAX_STEP 4096 - -/** - * @endcond - */ - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the strbuf module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the strbuf module of Eina. It is called by - * eina_init(). - * - * @see eina_init() - */ -Eina_Bool eina_strbuf_common_init(void) -{ - return EINA_TRUE; -} - -/** - * @internal - * @brief Shut down the strbuf module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the strbuf module set up by - * eina_strbuf_common_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_strbuf_common_shutdown(void) -{ - return EINA_TRUE; -} - -/** - * @internal - * - * init the buffer - * @param buf the buffer to init - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - */ -static Eina_Bool _eina_strbuf_common_init(size_t csize, Eina_Strbuf * buf) -{ - buf->len = 0; - buf->size = EINA_STRBUF_INIT_SIZE; - buf->step = EINA_STRBUF_INIT_STEP; - - eina_error_set(0); - buf->buf = calloc(csize, buf->size); - if (EINA_UNLIKELY(!buf->buf)) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return EINA_FALSE; - } - - return EINA_TRUE; -} - -/** - * @internal - * - * resize the buffer - * @param buf the buffer to resize - * @param size the minimum size of the buffer - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - */ -static inline Eina_Bool -_eina_strbuf_common_resize(size_t csize, Eina_Strbuf * buf, size_t size) -{ - size_t new_size, new_step, delta; - void *buffer; - - size += 1; // Add extra space for '\0' - - if (size == buf->size) - /* nothing to do */ - return EINA_TRUE; - else if (size > buf->size) - delta = size - buf->size; - else - delta = buf->size - size; - - /* check if should keep the same step (just used while growing) */ - if ((delta <= buf->step) && (size > buf->size)) - new_step = buf->step; - else { - new_step = (((delta / EINA_STRBUF_INIT_STEP) + 1) - * EINA_STRBUF_INIT_STEP); - - if (new_step > EINA_STRBUF_MAX_STEP) - new_step = EINA_STRBUF_MAX_STEP; - } - - new_size = (((size / new_step) + 1) * new_step); - - /* reallocate the buffer to the new size */ - buffer = realloc(buf->buf, new_size * csize); - if (EINA_UNLIKELY(!buffer)) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return EINA_FALSE; - } - - buf->buf = buffer; - buf->size = new_size; - buf->step = new_step; - eina_error_set(0); - return EINA_TRUE; -} - -/** - * @internal - * - * If required, enlarge the buffer to fit the new size. - * - * @param buf the buffer to resize - * @param size the minimum size of the buffer - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - */ -Eina_Bool -_eina_strbuf_common_grow(size_t csize, Eina_Strbuf * buf, size_t size) -{ - if ((size + 1) < buf->size) - return EINA_TRUE; - - return _eina_strbuf_common_resize(csize, buf, size); -} - -/** - * @internal - * - * insert string of known length at random within existing strbuf limits. - * - * @param buf the buffer to resize, must be valid. - * @param str the string to copy, must be valid (!NULL and smaller than @a len) - * @param len the amount of bytes in @a str to copy, must be valid. - * @param pos the position inside buffer to insert, must be valid (smaller - * than eina_strbuf_common_length_get()) - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - */ -static inline Eina_Bool -_eina_strbuf_common_insert_length(size_t csize, - Eina_Strbuf * buf, - const void *str, size_t len, size_t pos) -{ - if (EINA_UNLIKELY - (!_eina_strbuf_common_grow(csize, buf, buf->len + len))) - return EINA_FALSE; - - /* move the existing text */ - memmove(buf->buf + ((len + pos) * csize), buf->buf + (pos * csize), - (buf->len - pos) * csize); - - /* and now insert the given string */ - memcpy(buf->buf + (pos * csize), str, len * csize); - - buf->len += len; - memset(buf->buf + (buf->len * csize), 0, csize); - return EINA_TRUE; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @brief Create a new string buffer. - * - * @return Newly allocated string buffer instance. - * - * This function creates a new string buffer. On error, @c NULL is - * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To - * free the resources, use eina_strbuf_common_free(). - * - * @see eina_strbuf_common_free() - * @see eina_strbuf_common_append() - * @see eina_strbuf_common_string_get() - */ -Eina_Strbuf *eina_strbuf_common_new(size_t csize) -{ - Eina_Strbuf *buf; - - eina_error_set(0); - buf = malloc(sizeof(Eina_Strbuf)); - if (EINA_UNLIKELY(!buf)) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - if (EINA_UNLIKELY(!_eina_strbuf_common_init(csize, buf))) { - eina_strbuf_common_free(buf); - return NULL; - } - - return buf; -} - -/** - * @brief Free a string buffer. - * - * @param buf The string buffer to free. - * - * This function frees the memory of @p buf. @p buf must have been - * created by eina_strbuf_common_new(). - */ -void eina_strbuf_common_free(Eina_Strbuf * buf) -{ - free(buf->buf); - free(buf); -} - -/** - * @brief Reset a string buffer. - * - * @param buf The string buffer to reset. - * - * This function reset @p buf: the buffer len is set to 0, and the - * string is set to '\\0'. No memory is free'd. - */ -void eina_strbuf_common_reset(size_t csize, Eina_Strbuf * buf) -{ - buf->len = 0; - buf->step = EINA_STRBUF_INIT_STEP; - - memset(buf->buf, 0, csize); -} - -/** - * @brief Append a string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to append to. - * @param str The string to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function appends @p str to @p buf. It computes the length of - * @p str, so is slightly slower than eina_strbuf_common_append_length(). If - * the length is known beforehand, consider using that variant. If - * @p buf can't append it, #EINA_FALSE is returned, otherwise - * #EINA_TRUE is returned. - * - * @see eina_strbuf_common_append() - * @see eina_strbuf_common_append_length() - */ -Eina_Bool -eina_strbuf_common_append(size_t csize, - Eina_Strbuf * buf, const void *str, size_t len) -{ - - EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); - - if (EINA_UNLIKELY - (!_eina_strbuf_common_grow(csize, buf, buf->len + len))) - return EINA_FALSE; - - memcpy(buf->buf + (buf->len * csize), str, (len + 1) * csize); - buf->len += len; - return EINA_TRUE; -} - -/** - * @brief Append a string to a buffer, reallocating as necessary, - * limited by the given length. - * - * @param buf The string buffer to append to. - * @param str The string to append. - * @param maxlen The maximum number of characters to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function appends at most @p maxlen characters of @p str to - * @p buf. It can't appends more than the length of @p str. It - * computes the length of @p str, so is slightly slower than - * eina_strbuf_common_append_length(). If the length is known beforehand, - * consider using that variant (@p maxlen should then be checked so - * that it is greater than the size of @p str). If @p str can not be - * appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is - * returned. - * - * @see eina_strbuf_common_append() - * @see eina_strbuf_common_append_length() - */ -Eina_Bool -eina_strbuf_common_append_n(size_t csize, - Eina_Strbuf * buf, - const void *str, size_t len, size_t maxlen) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); - - if (len > maxlen) - len = maxlen; - - if (EINA_UNLIKELY - (!_eina_strbuf_common_grow(csize, buf, buf->len + len))) - return EINA_FALSE; - - memcpy(buf->buf + (buf->len * csize), str, len * csize); - buf->len += len; - memset(buf->buf + (buf->len * csize), 0, csize); - return EINA_TRUE; -} - -/** - * @brief Append a string of exact length to a buffer, reallocating as necessary. - * - * @param buf The string buffer to append to. - * @param str The string to append. - * @param length The exact length to use. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function appends @p str to @p buf. @p str must be of size at - * most @p length. It is slightly faster than eina_strbuf_common_append() as - * it does not compute the size of @p str. It is useful when dealing - * with strings of known size, such as eina_strngshare. If @p buf - * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - * - * @see eina_stringshare_length() - * @see eina_strbuf_common_append() - * @see eina_strbuf_common_append_n() - */ -Eina_Bool -eina_strbuf_common_append_length(size_t csize, - Eina_Strbuf * buf, - const void *str, size_t length) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); - - if (EINA_UNLIKELY - (!_eina_strbuf_common_grow(csize, buf, buf->len + length))) - return EINA_FALSE; - - memcpy(buf->buf + (buf->len * csize), str, length * csize); - buf->len += length; - memset(buf->buf + (buf->len * csize), 0, csize); - return EINA_TRUE; -} - -/** - * @brief Insert a string to a buffer, reallocating as necessary. - * - * @param buf The string buffer to insert. - * @param str The string to insert. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p str to @p buf at position @p pos. It - * computes the length of @p str, so is slightly slower than - * eina_strbuf_common_insert_length(). If the length is known beforehand, - * consider using that variant. If @p buf can't insert it, #EINA_FALSE - * is returned, otherwise #EINA_TRUE is returned. - */ -Eina_Bool -eina_strbuf_common_insert(size_t csize, - Eina_Strbuf * buf, - const void *str, size_t len, size_t pos) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); - - if (pos >= buf->len) - return eina_strbuf_common_append(csize, buf, str, len); - - return _eina_strbuf_common_insert_length(csize, buf, str, len, - pos); -} - -/** - * @brief Insert a string to a buffer, reallocating as necessary. Limited by maxlen. - * - * @param buf The string buffer to insert to. - * @param str The string to insert. - * @param maxlen The maximum number of chars to insert. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p str ot @p buf at position @p pos, with at - * most @p maxlen bytes. The number of inserted characters can not be - * greater than the length of @p str. It computes the length of - * @p str, so is slightly slower than eina_strbuf_common_insert_length(). If the - * length is known beforehand, consider using that variant (@p maxlen - * should then be checked so that it is greater than the size of - * @p str). If @p str can not be inserted, #EINA_FALSE is returned, - * otherwise, #EINA_TRUE is returned. - */ -Eina_Bool -eina_strbuf_common_insert_n(size_t csize, - Eina_Strbuf * buf, - const void *str, - size_t len, size_t maxlen, size_t pos) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); - - if (pos >= buf->len) - return eina_strbuf_common_append_n(csize, buf, str, len, - maxlen); - - if (len > maxlen) - len = maxlen; - - return _eina_strbuf_common_insert_length(csize, buf, str, len, - pos); -} - -/** - * @brief Insert a string of exact length to a buffer, reallocating as necessary. - * - * @param buf The string buffer to insert to. - * @param str The string to insert. - * @param length The exact length to use. - * @param pos The position to insert the string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p str to @p buf. @p str must be of size at - * most @p length. It is slightly faster than eina_strbuf_common_insert() as - * it does not compute the size of @p str. It is useful when dealing - * with strings of known size, such as eina_strngshare. If @p buf - * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - * - * @see eina_stringshare_length() - * @see eina_strbuf_common_insert() - * @see eina_strbuf_common_insert_n() - */ -Eina_Bool -eina_strbuf_common_insert_length(size_t csize, - Eina_Strbuf * buf, - const void *str, - size_t length, size_t pos) -{ - EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); - - if (pos >= buf->len) - return eina_strbuf_common_append_length(csize, buf, str, - length); - - return _eina_strbuf_common_insert_length(csize, buf, str, length, - pos); -} - -/** - * @brief Append a character to a string buffer, reallocating as - * necessary. - * - * @param buf The string buffer to append to. - * @param c The char to append. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p c to @p buf. If it can not insert it, - * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned. - */ -Eina_Bool -eina_strbuf_common_append_char(size_t csize, Eina_Strbuf * buf, - const void *c) -{ - - if (EINA_UNLIKELY - (!_eina_strbuf_common_grow(csize, buf, buf->len + 1))) - return EINA_FALSE; - - memcpy(buf->buf + ((buf->len)++ * csize), c, csize); - memset(buf->buf + (buf->len * csize), 0, csize); - return EINA_TRUE; -} - -/** - * @brief Insert a character to a string buffer, reallocating as - * necessary. - * - * @param buf The string buffer to insert to. - * @param c The char to insert. - * @param pos The position to insert the char. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function inserts @p c to @p buf at position @p pos. If @p buf - * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is - * returned. - */ -Eina_Bool -eina_strbuf_common_insert_char(size_t csize, - Eina_Strbuf * buf, - const void *c, size_t pos) -{ - - if (pos >= buf->len) - return eina_strbuf_common_append_char(csize, buf, c); - - return _eina_strbuf_common_insert_length(csize, buf, c, 1, pos); -} - -/** - * @brief Remove a slice of the given string buffer. - * - * @param buf The string buffer to remove a slice. - * @param start The initial (inclusive) slice position to start - * removing, in bytes. - * @param end The final (non-inclusive) slice position to finish - * removing, in bytes. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function removes a slice of @p buf, starting at @p start - * (inclusive) and ending at @p end (non-inclusive). Both values are - * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise. - */ -Eina_Bool -eina_strbuf_common_remove(size_t csize, - Eina_Strbuf * buf, size_t start, size_t end) -{ - size_t remove_len, tail_len; - - if (end >= buf->len) - end = buf->len; - - if (end <= start) - return EINA_TRUE; - - remove_len = end - start; - if (remove_len == buf->len) { - free(buf->buf); - return _eina_strbuf_common_init(csize, buf); - } - - tail_len = buf->len - end + 1; /* includes '\0' */ - memmove(buf->buf + (start * csize), - buf->buf + (end * csize), tail_len * csize); - buf->len -= remove_len; - return _eina_strbuf_common_resize(csize, buf, buf->len); -} - -/** - * @brief Retrieve a pointer to the contents of a string buffer - * - * @param buf The string buffer. - * @return The current string in the string buffer. - * - * This function returns the string contained in @p buf. The returned - * value must not be modified and will no longer be valid if @p buf is - * modified. In other words, any eina_strbuf_common_append() or similar will - * make that pointer invalid. - * - * @see eina_strbuf_common_string_steal() - */ -const void *eina_strbuf_common_string_get(const Eina_Strbuf * buf) -{ - return buf->buf; -} - -/** - * @brief Steal the contents of a string buffer. - * - * @param buf The string buffer to steal. - * @return The current string in the string buffer. - * - * This function returns the string contained in @p buf. @p buf is - * then initialized and does not own the returned string anymore. The - * caller must release the memory of the returned string by calling - * free(). - * - * @see eina_strbuf_common_string_get() - */ -void *eina_strbuf_common_string_steal(size_t csize, Eina_Strbuf * buf) -{ - void *ret; - - ret = buf->buf; - // TODO: Check return value and do something clever - _eina_strbuf_common_init(csize, buf); - return ret; -} - -/** - * @brief Free the contents of a string buffer but not the buffer. - * - * @param buf The string buffer to free the string of. - * - * This function frees the string contained in @p buf without freeing - * @p buf. - */ -void eina_strbuf_common_string_free(size_t csize, Eina_Strbuf * buf) -{ - free(buf->buf); - _eina_strbuf_common_init(csize, buf); -} - -/** - * @brief Retrieve the length of the string buffer content. - * - * @param buf The string buffer. - * @return The current length of the string, in bytes. - * - * This function returns the length of @p buf. - */ -size_t eina_strbuf_common_length_get(const Eina_Strbuf * buf) -{ - return buf->len; -} - -/** - * @addtogroup Eina_String_Buffer_Group String Buffer - * - * @brief These functions provide string buffers management. - * - * The String Buffer data type is designed to be a mutable string, - * allowing to append, prepend or insert a string to a buffer. - * - * @{ - */ - - -/** - * @cond LOCAL - */ - -/*FIXME: Implementing them here is a hack! */ - -#ifdef _STRBUF_CSIZE -#undef _STRBUF_CSIZE -#endif - -#ifdef _STRBUF_MAGIC -#undef _STRBUF_MAGIC -#endif - -#ifdef _STRBUF_MAGIC_STR -#undef _STRBUF_MAGIC_STR -#endif - -#define _STRBUF_CSIZE 1 -#define _STRBUF_MAGIC EINA_MAGIC_STRBUF -#define _STRBUF_MAGIC_STR __STRBUF_STR_MAGIC_STR -static const char __STRBUF_STR_MAGIC_STR[] = "Eina Strbuf"; - - -/** - * @endcond - */ - - -/** - * @brief Replace the n-th string with an other string. - * - * @param buf The string buffer to work with. - * @param str The string to replace. - * @param with The replaceing string. - * @param n The number of the fitting string. - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function replaces the n-th occurrence of @p str in @p buf with - * @p with. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise. - */ -EAPI Eina_Bool -eina_strbuf_replace(Eina_Strbuf * buf, - const char *str, const char *with, unsigned int n) -{ - size_t len1, len2; - char *spos; - size_t pos; - - EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(with, EINA_FALSE); - EINA_MAGIC_CHECK_STRBUF(buf, 0); - - if (n == 0) - return EINA_FALSE; - - spos = buf->buf; - while (n--) { - spos = strstr(spos, str); - if (!spos || *spos == '\0') - return EINA_FALSE; - - if (n) - spos++; - } - - pos = spos - (const char *) buf->buf; - len1 = strlen(str); - len2 = strlen(with); - if (len1 != len2) { - /* resize the buffer if necessary */ - if (EINA_UNLIKELY - (!_eina_strbuf_common_grow - (_STRBUF_CSIZE, buf, buf->len - len1 + len2))) { - return EINA_FALSE; /* move the existing text */ - - } - - memmove(buf->buf + pos + len2, buf->buf + pos + len1, - buf->len - pos - len1); - } - - /* and now insert the given string */ - memcpy(buf->buf + pos, with, len2); - buf->len += len2 - len1; - memset((char *) buf->buf + buf->len, 0, 1); - - return EINA_TRUE; -} - -/** - * @brief Replace all strings with an other string. - - * @param buf the string buffer to work with. - * @param str The string to replace. - * @param with The replaceing string. - * @return How often the string was replaced. - * - * This function replaces all the occurrences of @p str in @ buf with - * the string @p with. This function returns the number of times @p str - * has been replaced. On failure, it returns 0. - */ -EAPI int -eina_strbuf_replace_all(Eina_Strbuf * buf, const char *str, - const char *with) -{ - size_t len1, len2, len; - char *tmp_buf = NULL; - char *spos; - size_t pos, start; - size_t pos_tmp, start_tmp; - int n = 0; - - EINA_SAFETY_ON_NULL_RETURN_VAL(str, 0); - EINA_SAFETY_ON_NULL_RETURN_VAL(with, 0); - EINA_MAGIC_CHECK_STRBUF(buf, 0); - - spos = strstr(buf->buf, str); - if (!spos || *spos == '\0') - return 0; - - len1 = strlen(str); - len2 = strlen(with); - - /* if the size of the two string is equal, it is fairly easy to replace them - * we don't need to resize the buffer or doing other calculations */ - if (len1 == len2) { - while (spos) { - memcpy(spos, with, len2); - spos = strstr(spos + len2, str); - n++; - } - return n; - } - - pos = pos_tmp = spos - (const char *) buf->buf; - tmp_buf = buf->buf; - buf->buf = malloc(buf->size); - if (EINA_UNLIKELY(!buf->buf)) { - buf->buf = tmp_buf; - return 0; - } - - start = start_tmp = 0; - len = buf->len; - - while (spos) { - n++; - len = (len + len2) - len1; - /* resize the buffer if necessary */ - if (EINA_UNLIKELY - (!_eina_strbuf_common_grow(_STRBUF_CSIZE, buf, len))) { - /* we have to stop replacing here, because we haven't enough - * memory to go on */ - len = (len + len1) - len2; - break; - } - - /* copy the untouched text */ - memcpy(buf->buf + start, tmp_buf + start_tmp, pos - start); - /* copy the new string */ - memcpy(buf->buf + pos, with, len2); - - /* calculate the next positions */ - start_tmp = pos_tmp + len1; - start = pos + len2; - spos = strstr(tmp_buf + start_tmp, str); - /* this calculations don't make sense if spos == NULL, but the - * calculated values won't be used, because the loop will stop - * then */ - pos_tmp = spos - tmp_buf; - pos = start + pos_tmp - start_tmp; - } - /* and now copy the rest of the text */ - memcpy(buf->buf + start, tmp_buf + start_tmp, len - start); - buf->len = len; - memset((char *) buf->buf + buf->len, 0, 1); - - free(tmp_buf); - - return n; -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_strbuf_common.h b/tests/suite/ecore/src/lib/eina_strbuf_common.h deleted file mode 100644 index 0c38e639b1..0000000000 --- a/tests/suite/ecore/src/lib/eina_strbuf_common.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef EINA_STRBUF_COMMON_H -#define EINA_STRBUF_COMMON_H - -#include - -#include "eina_private.h" -#include "eina_magic.h" -#include "eina_strbuf.h" - -struct _Eina_Strbuf { - void *buf; - size_t len; - size_t size; - size_t step; - - EINA_MAGIC}; - -#define EINA_MAGIC_CHECK_STRBUF(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK((d), _STRBUF_MAGIC)) \ - { \ - EINA_MAGIC_FAIL((d), _STRBUF_MAGIC); \ - return __VA_ARGS__; \ - } \ - } while (0) - -Eina_Bool eina_strbuf_common_init(void); - -Eina_Bool eina_strbuf_common_shutdown(void); -Eina_Strbuf *eina_strbuf_common_new(size_t csize); -void eina_strbuf_common_free(Eina_Strbuf * buf); -void eina_strbuf_common_reset(size_t csize, Eina_Strbuf * buf); -Eina_Bool -eina_strbuf_common_append(size_t csize, - Eina_Strbuf * buf, const void *str, size_t len); -Eina_Bool -eina_strbuf_common_append_escaped(size_t csize, - Eina_Strbuf * buf, const void *str); -Eina_Bool -eina_strbuf_common_append_n(size_t csize, - Eina_Strbuf * buf, - const void *str, size_t len, size_t maxlen); -Eina_Bool -eina_strbuf_common_append_length(size_t csize, - Eina_Strbuf * buf, - const void *str, size_t length); -Eina_Bool -eina_strbuf_common_insert(size_t csize, - Eina_Strbuf * buf, - const void *str, size_t len, size_t pos); -Eina_Bool -eina_strbuf_common_insert_escaped(size_t csize, - Eina_Strbuf * buf, - const void *str, size_t len, size_t pos); -Eina_Bool -eina_strbuf_common_insert_n(size_t csize, - Eina_Strbuf * buf, - const void *str, - size_t len, size_t maxlen, size_t pos); -Eina_Bool -eina_strbuf_common_insert_length(size_t csize, - Eina_Strbuf * buf, - const void *str, - size_t length, size_t pos); -Eina_Bool -eina_strbuf_common_append_char(size_t csize, Eina_Strbuf * buf, - const void *c); -Eina_Bool eina_strbuf_common_insert_char(size_t csize, Eina_Strbuf * buf, - const void *c, size_t pos); -Eina_Bool eina_strbuf_common_remove(size_t csize, Eina_Strbuf * buf, - size_t start, size_t end); -const void *eina_strbuf_common_string_get(const Eina_Strbuf * buf); -void *eina_strbuf_common_string_steal(size_t csize, Eina_Strbuf * buf); -void eina_strbuf_common_string_free(size_t csize, Eina_Strbuf * buf); -size_t eina_strbuf_common_length_get(const Eina_Strbuf * buf); - -Eina_Bool -_eina_strbuf_common_grow(size_t csize, Eina_Strbuf * buf, size_t size); -/** - * @} - */ - -#endif diff --git a/tests/suite/ecore/src/lib/eina_strbuf_template_c.x b/tests/suite/ecore/src/lib/eina_strbuf_template_c.x deleted file mode 100644 index 2f3aeae4b4..0000000000 --- a/tests/suite/ecore/src/lib/eina_strbuf_template_c.x +++ /dev/null @@ -1,216 +0,0 @@ -/* - * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 - */ - -/* This file should be included from files implementing strbuf. The including file - * should define the following macros: - * _STRBUF_DATA_TYPE - * _STRBUF_CSIZE - * _STRBUF_STRUCT_NAME - * _STRBUF_STRLEN_FUNC(x) - * _STRBUF_STRESCAPE_FUNC(x) - * _STRBUF_STRSTR_FUNC(x, y) - * _STRBUF_MAGIC - * _STRBUF_MAGIC_STR - * See how it's done in eina_ustrbuf.c and eina_strbuf.c. This just makes things - * a lot easier since those are essentially the same just with different sizes. - */ - -/*============================================================================* - * Local * - *============================================================================*/ - - -/*============================================================================* - * Global * - *============================================================================*/ - -/** - * @internal - * @brief Initialize the strbuf module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the strbuf module of Eina. It is called by - * eina_init(). - * - * @see eina_init() - */ -Eina_Bool -_FUNC_EXPAND(init)(void) -{ - eina_magic_string_static_set(_STRBUF_MAGIC, _STRBUF_MAGIC_STR); - return eina_strbuf_common_init(); -} - -/** - * @internal - * @brief Shut down the strbuf module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the strbuf module set up by - * eina_ustrbuf_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool -_FUNC_EXPAND(shutdown)(void) -{ - return eina_strbuf_common_shutdown(); -} - -/*============================================================================* - * API * - *============================================================================*/ - -EAPI _STRBUF_STRUCT_NAME * -_FUNC_EXPAND(new)(void) -{ - _STRBUF_STRUCT_NAME *buf = eina_strbuf_common_new(_STRBUF_CSIZE); - EINA_MAGIC_SET(buf, _STRBUF_MAGIC); - return buf; -} - -EAPI void -_FUNC_EXPAND(free)(_STRBUF_STRUCT_NAME *buf) -{ - EINA_MAGIC_CHECK_STRBUF(buf); - EINA_MAGIC_SET(buf, EINA_MAGIC_NONE); - eina_strbuf_common_free(buf); -} - -EAPI void -_FUNC_EXPAND(reset)(_STRBUF_STRUCT_NAME *buf) -{ - EINA_MAGIC_CHECK_STRBUF(buf); - eina_strbuf_common_reset(_STRBUF_CSIZE, buf); -} - -EAPI Eina_Bool -_FUNC_EXPAND(append)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str) -{ - EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); - return eina_strbuf_common_append(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str)); -} - -EAPI Eina_Bool -_FUNC_EXPAND(append_escaped)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str) -{ - _STRBUF_DATA_TYPE *esc; - Eina_Bool ret; - - EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); - esc = _STRBUF_STRESCAPE_FUNC(str); - if (!esc) { - return _FUNC_EXPAND(append)(buf, str); - } - ret = _FUNC_EXPAND(append)(buf, esc); - if (esc) - free(esc); - - return ret; -} - -EAPI Eina_Bool -_FUNC_EXPAND(append_n)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t maxlen) -{ - EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); - return eina_strbuf_common_append_n(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str), maxlen); -} - -EAPI Eina_Bool -_FUNC_EXPAND(append_length)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t length) -{ - EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); - return eina_strbuf_common_append_length(_STRBUF_CSIZE, buf, (const void *) str, length); -} - -EAPI Eina_Bool -_FUNC_EXPAND(insert)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t pos) -{ - EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); - return eina_strbuf_common_insert(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str), pos); -} - -EAPI Eina_Bool -_FUNC_EXPAND(insert_escaped)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t pos) -{ - _STRBUF_DATA_TYPE *esc; - Eina_Bool ret; - EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); - - esc = _STRBUF_STRESCAPE_FUNC(str); - if (!esc) { - return _FUNC_EXPAND(insert)(buf, str, pos); - } - ret = _FUNC_EXPAND(insert)(buf, esc, pos); - if (esc) - free(esc); - - return ret; -} - -EAPI Eina_Bool -_FUNC_EXPAND(insert_n)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t maxlen, size_t pos) -{ - EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); - return eina_strbuf_common_insert_n(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str), maxlen, pos); -} - -EAPI Eina_Bool -_FUNC_EXPAND(insert_length)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t length, size_t pos) -{ - EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); - return eina_strbuf_common_insert_length(_STRBUF_CSIZE, buf, (const void *) str, length, pos); -} - -EAPI Eina_Bool -_FUNC_EXPAND(append_char)(_STRBUF_STRUCT_NAME *buf, _STRBUF_DATA_TYPE c) -{ - EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); - return eina_strbuf_common_append_char(_STRBUF_CSIZE, buf, (const void *) &c); -} - -EAPI Eina_Bool -_FUNC_EXPAND(insert_char)(_STRBUF_STRUCT_NAME *buf, _STRBUF_DATA_TYPE c, size_t pos) -{ - EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); - return eina_strbuf_common_insert_char(_STRBUF_CSIZE, buf, (const void *) &c, pos); -} - -EAPI Eina_Bool -_FUNC_EXPAND(remove)(_STRBUF_STRUCT_NAME *buf, size_t start, size_t end) -{ - EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE); - return eina_strbuf_common_remove(_STRBUF_CSIZE, buf, start, end); -} - -EAPI const _STRBUF_DATA_TYPE * -_FUNC_EXPAND(string_get)(const _STRBUF_STRUCT_NAME *buf) -{ - EINA_MAGIC_CHECK_STRBUF(buf, NULL); - return (const _STRBUF_DATA_TYPE *) eina_strbuf_common_string_get(buf); -} - -EAPI _STRBUF_DATA_TYPE * -_FUNC_EXPAND(string_steal)(_STRBUF_STRUCT_NAME *buf) -{ - EINA_MAGIC_CHECK_STRBUF(buf, NULL); - return (_STRBUF_DATA_TYPE *) eina_strbuf_common_string_steal(_STRBUF_CSIZE, buf); -} - - -EAPI void -_FUNC_EXPAND(string_free)(_STRBUF_STRUCT_NAME *buf) -{ - EINA_MAGIC_CHECK_STRBUF(buf); - eina_strbuf_common_string_free(_STRBUF_CSIZE, buf); -} - -EAPI size_t -_FUNC_EXPAND(length_get)(const _STRBUF_STRUCT_NAME *buf) -{ - EINA_MAGIC_CHECK_STRBUF(buf, 0); - return eina_strbuf_common_length_get(buf); -} diff --git a/tests/suite/ecore/src/lib/eina_stringshare.c b/tests/suite/ecore/src/lib/eina_stringshare.c deleted file mode 100644 index 9269437e9d..0000000000 --- a/tests/suite/ecore/src/lib/eina_stringshare.c +++ /dev/null @@ -1,948 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2010 - * Carsten Haitzler, - * Jorge Luis Zapata Muga, - * Cedric Bail, - * Gustavo Sverzut Barbieri - * Tom Hacohen - * Brett Nash - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -/** - * @page tutorial_stringshare_page Stringshare Tutorial - * - * to be written... - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#define _GNU_SOURCE - -#ifdef HAVE_ALLOCA_H -#include -#elif defined __GNUC__ -#define alloca __builtin_alloca -#elif defined _AIX -#define alloca __alloca -#elif defined _MSC_VER -#include -#define alloca _alloca -#else -#include -#ifdef __cplusplus -extern "C" -#endif -void *alloca(size_t); -#endif - -#include -#include -#include - -#ifdef EFL_HAVE_POSIX_THREADS -#include -#endif - -#ifdef HAVE_EVIL -#include -#endif - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_hash.h" -#include "eina_rbtree.h" -#include "eina_error.h" -#include "eina_log.h" -#include "eina_stringshare.h" - -/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ -#include "eina_safety_checks.h" -#include "eina_share_common.h" - -/* The actual share */ -static Eina_Share *stringshare_share; -static const char EINA_MAGIC_STRINGSHARE_NODE_STR[] = - "Eina Stringshare Node"; - -#ifdef EFL_HAVE_THREADS -extern Eina_Bool _share_common_threads_activated; - -#ifdef EFL_HAVE_POSIX_THREADS -static pthread_mutex_t _mutex_small = PTHREAD_MUTEX_INITIALIZER; -#define STRINGSHARE_LOCK_SMALL() if(_share_common_threads_activated) \ - pthread_mutex_lock(&_mutex_small) -#define STRINGSHARE_UNLOCK_SMALL() if(_share_common_threads_activated) \ - pthread_mutex_unlock(&_mutex_small) -#else /* EFL_HAVE_WIN32_THREADS */ -static HANDLE _mutex_small = NULL; -#define STRINGSHARE_LOCK_SMALL() if(_share_common_threads_activated) \ - WaitForSingleObject(_mutex_small, INFINITE) -#define STRINGSHARE_UNLOCK_SMALL() if(_share_common_threads_activated) \ - ReleaseMutex(_mutex_small) - -#endif /* EFL_HAVE_WIN32_THREADS */ -#else /* EFL_HAVE_THREADS */ -#define STRINGSHARE_LOCK_SMALL() do {} while (0) -#define STRINGSHARE_UNLOCK_SMALL() do {} while (0) -#endif - -/* Stringshare optimizations */ -static const unsigned char _eina_stringshare_single[512] = { - 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, - 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, - 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, - 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, - 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 40, - 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, - 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, - 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, - 61, 0, 62, 0, 63, 0, 64, 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, - 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, - 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, - 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, - 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, 97, 0, 98, 0, 99, 0, 100, - 0, 101, 0, 102, 0, 103, 0, 104, 0, - 105, 0, - 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, - 114, 0, 115, 0, 116, 0, 117, 0, 118, - 0, 119, 0, 120, 0, - 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, - 129, 0, 130, 0, 131, 0, 132, 0, 133, - 0, 134, 0, 135, 0, - 136, 0, 137, 0, 138, 0, 139, 0, 140, 0, 141, 0, 142, 0, 143, 0, - 144, 0, 145, 0, 146, 0, 147, 0, 148, - 0, 149, 0, 150, 0, - 151, 0, 152, 0, 153, 0, 154, 0, 155, 0, 156, 0, 157, 0, 158, 0, - 159, 0, 160, 0, 161, 0, 162, 0, 163, - 0, 164, 0, 165, 0, - 166, 0, 167, 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, - 174, 0, 175, 0, 176, 0, 177, 0, 178, - 0, 179, 0, 180, 0, - 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 186, 0, 187, 0, 188, 0, - 189, 0, 190, 0, 191, 0, 192, 0, 193, - 0, 194, 0, 195, 0, - 196, 0, 197, 0, 198, 0, 199, 0, 200, 0, 201, 0, 202, 0, 203, 0, - 204, 0, 205, 0, 206, 0, 207, 0, 208, - 0, 209, 0, 210, 0, - 211, 0, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, - 219, 0, 220, 0, 221, 0, 222, 0, 223, - 0, 224, 0, 225, 0, - 226, 0, 227, 0, 228, 0, 229, 0, 230, 0, 231, 0, 232, 0, 233, 0, - 234, 0, 235, 0, 236, 0, 237, 0, 238, - 0, 239, 0, 240, 0, - 241, 0, 242, 0, 243, 0, 244, 0, 245, 0, 246, 0, 247, 0, 248, 0, - 249, 0, 250, 0, 251, 0, 252, 0, 253, - 0, 254, 0, 255, 0 -}; - -typedef struct _Eina_Stringshare_Small Eina_Stringshare_Small; -typedef struct _Eina_Stringshare_Small_Bucket - Eina_Stringshare_Small_Bucket; - -struct _Eina_Stringshare_Small_Bucket { - /* separate arrays for faster lookups */ - const char **strings; - unsigned char *lengths; - unsigned short *references; - int count; - int size; -}; - -struct _Eina_Stringshare_Small { - Eina_Stringshare_Small_Bucket *buckets[256]; -}; - -#define EINA_STRINGSHARE_SMALL_BUCKET_STEP 8 -static Eina_Stringshare_Small _eina_small_share; - -static inline int -_eina_stringshare_small_cmp(const Eina_Stringshare_Small_Bucket * bucket, - int i, const char *pstr, unsigned char plength) -{ - /* pstr and plength are from second char and on, since the first is - * always the same. - * - * First string being always the same, size being between 2 and 3 - * characters (there is a check for special case length==1 and then - * small stringshare is applied to strings < 4), we just need to - * compare 2 characters of both strings. - */ - const unsigned char cur_plength = bucket->lengths[i] - 1; - const char *cur_pstr; - - if (cur_plength > plength) - return 1; - else if (cur_plength < plength) - return -1; - - cur_pstr = bucket->strings[i] + 1; - - if (cur_pstr[0] > pstr[0]) - return 1; - else if (cur_pstr[0] < pstr[0]) - return -1; - - if (plength == 1) - return 0; - - if (cur_pstr[1] > pstr[1]) - return 1; - else if (cur_pstr[1] < pstr[1]) - return -1; - - return 0; -} - -static const char *_eina_stringshare_small_bucket_find(const - Eina_Stringshare_Small_Bucket - * bucket, - const char *str, - unsigned char - length, int *idx) -{ - const char *pstr = str + 1; /* skip first letter, it's always the same */ - unsigned char plength = length - 1; - int i, low, high; - - if (bucket->count == 0) { - *idx = 0; - return NULL; - } - - low = 0; - high = bucket->count; - - while (low < high) { - int r; - - i = (low + high - 1) / 2; - - r = _eina_stringshare_small_cmp(bucket, i, pstr, plength); - if (r > 0) - high = i; - else if (r < 0) - low = i + 1; - else { - *idx = i; - return bucket->strings[i]; - } - } - - *idx = low; - return NULL; -} - -static Eina_Bool -_eina_stringshare_small_bucket_resize(Eina_Stringshare_Small_Bucket * - bucket, int size) -{ - void *tmp; - - tmp = - realloc((void *) bucket->strings, - size * sizeof(bucket->strings[0])); - if (!tmp) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return 0; - } - - bucket->strings = tmp; - - tmp = realloc(bucket->lengths, size * sizeof(bucket->lengths[0])); - if (!tmp) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return 0; - } - - bucket->lengths = tmp; - - tmp = - realloc(bucket->references, - size * sizeof(bucket->references[0])); - if (!tmp) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return 0; - } - - bucket->references = tmp; - - bucket->size = size; - return 1; -} - -static const char - *_eina_stringshare_small_bucket_insert_at(Eina_Stringshare_Small_Bucket - ** p_bucket, const char *str, - unsigned char length, - int idx) -{ - Eina_Stringshare_Small_Bucket *bucket = *p_bucket; - int todo, off; - char *snew; - - if (!bucket) { - *p_bucket = bucket = calloc(1, sizeof(*bucket)); - if (!bucket) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - } - - if (bucket->count + 1 >= bucket->size) { - int size = - bucket->size + EINA_STRINGSHARE_SMALL_BUCKET_STEP; - if (!_eina_stringshare_small_bucket_resize(bucket, size)) - return NULL; - } - - snew = malloc(length + 1); - if (!snew) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - memcpy(snew, str, length); - snew[length] = '\0'; - - off = idx + 1; - todo = bucket->count - idx; - if (todo > 0) { - memmove((void *) (bucket->strings + off), - bucket->strings + idx, - todo * sizeof(bucket->strings[0])); - memmove(bucket->lengths + off, bucket->lengths + idx, - todo * sizeof(bucket->lengths[0])); - memmove(bucket->references + off, bucket->references + idx, - todo * sizeof(bucket->references[0])); - } - - bucket->strings[idx] = snew; - bucket->lengths[idx] = length; - bucket->references[idx] = 1; - bucket->count++; - - return snew; -} - -static void -_eina_stringshare_small_bucket_remove_at(Eina_Stringshare_Small_Bucket ** - p_bucket, int idx) -{ - Eina_Stringshare_Small_Bucket *bucket = *p_bucket; - int todo, off; - - if (bucket->references[idx] > 1) { - bucket->references[idx]--; - return; - } - - free((char *) bucket->strings[idx]); - - if (bucket->count == 1) { - free((void *) bucket->strings); - free(bucket->lengths); - free(bucket->references); - free(bucket); - *p_bucket = NULL; - return; - } - - bucket->count--; - if (idx == bucket->count) - goto end; - - off = idx + 1; - todo = bucket->count - idx; - - memmove((void *) (bucket->strings + idx), bucket->strings + off, - todo * sizeof(bucket->strings[0])); - memmove(bucket->lengths + idx, bucket->lengths + off, - todo * sizeof(bucket->lengths[0])); - memmove(bucket->references + idx, bucket->references + off, - todo * sizeof(bucket->references[0])); - - end: - if (bucket->count + EINA_STRINGSHARE_SMALL_BUCKET_STEP < - bucket->size) { - int size = - bucket->size - EINA_STRINGSHARE_SMALL_BUCKET_STEP; - _eina_stringshare_small_bucket_resize(bucket, size); - } -} - -static const char *_eina_stringshare_small_add(const char *str, - unsigned char length) -{ - Eina_Stringshare_Small_Bucket **bucket; - int i; - - bucket = _eina_small_share.buckets + (unsigned char) str[0]; - if (!*bucket) - i = 0; - else { - const char *ret; - ret = - _eina_stringshare_small_bucket_find(*bucket, str, - length, &i); - if (ret) { - (*bucket)->references[i]++; - return ret; - } - } - - return _eina_stringshare_small_bucket_insert_at(bucket, str, - length, i); -} - -static void -_eina_stringshare_small_del(const char *str, unsigned char length) -{ - Eina_Stringshare_Small_Bucket **bucket; - const char *ret; - int i; - - bucket = _eina_small_share.buckets + (unsigned char) str[0]; - if (!*bucket) - goto error; - - ret = - _eina_stringshare_small_bucket_find(*bucket, str, length, &i); - if (!ret) - goto error; - - _eina_stringshare_small_bucket_remove_at(bucket, i); - return; - - error: - CRITICAL("EEEK trying to del non-shared stringshare \"%s\"", str); -} - -static void _eina_stringshare_small_init(void) -{ - memset(&_eina_small_share, 0, sizeof(_eina_small_share)); -} - -static void _eina_stringshare_small_shutdown(void) -{ - Eina_Stringshare_Small_Bucket **p_bucket, **p_bucket_end; - - p_bucket = _eina_small_share.buckets; - p_bucket_end = p_bucket + 256; - - for (; p_bucket < p_bucket_end; p_bucket++) { - Eina_Stringshare_Small_Bucket *bucket = *p_bucket; - char **s, **s_end; - - if (!bucket) - continue; - - s = (char **) bucket->strings; - s_end = s + bucket->count; - for (; s < s_end; s++) - free(*s); - - free((void *) bucket->strings); - free(bucket->lengths); - free(bucket->references); - free(bucket); - *p_bucket = NULL; - } -} - -static void -_eina_stringshare_small_bucket_dump(Eina_Stringshare_Small_Bucket * bucket, - struct dumpinfo *di) -{ - const char **s = bucket->strings; - unsigned char *l = bucket->lengths; - unsigned short *r = bucket->references; - int i; - - di->used += sizeof(*bucket); - di->used += bucket->count * sizeof(*s); - di->used += bucket->count * sizeof(*l); - di->used += bucket->count * sizeof(*r); - di->unique += bucket->count; - - for (i = 0; i < bucket->count; i++, s++, l++, r++) { - int dups; -#ifdef _WIN32 - printf("DDD: %5hu %5hu '%s'\n", *l, *r, *s); -#else - printf("DDD: %5hhu %5hu '%s'\n", *l, *r, *s); -#endif - - dups = (*r - 1); - - di->used += *l; - di->saved += *l * dups; - di->dups += dups; - } -} - -static void _eina_stringshare_small_dump(struct dumpinfo *di) -{ - Eina_Stringshare_Small_Bucket **p_bucket, **p_bucket_end; - - p_bucket = _eina_small_share.buckets; - p_bucket_end = p_bucket + 256; - - for (; p_bucket < p_bucket_end; p_bucket++) { - Eina_Stringshare_Small_Bucket *bucket = *p_bucket; - - if (!bucket) - continue; - - _eina_stringshare_small_bucket_dump(bucket, di); - } -} - - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the share_common module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the share_common module of Eina. It is called by - * eina_init(). - * - * @see eina_init() - */ -Eina_Bool eina_stringshare_init(void) -{ - Eina_Bool ret; - ret = eina_share_common_init(&stringshare_share, - EINA_MAGIC_STRINGSHARE_NODE, - EINA_MAGIC_STRINGSHARE_NODE_STR); - if (ret) - _eina_stringshare_small_init(); - - return ret; -} - -/** - * @internal - * @brief Shut down the share_common module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the share_common module set up by - * eina_share_common_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_stringshare_shutdown(void) -{ - Eina_Bool ret; - _eina_stringshare_small_shutdown(); - ret = eina_share_common_shutdown(&stringshare_share); - return ret; -} - -/*============================================================================* -* API * -*============================================================================*/ - -/** - * @addtogroup Eina_Stringshare_Group Stringshare - * - * These functions allow you to store one copy of a string, and use it - * throughout your program. - * - * This is a method to reduce the number of duplicated strings kept in - * memory. It's pretty common for the same strings to be dynamically - * allocated repeatedly between applications and libraries, especially in - * circumstances where you could have multiple copies of a structure that - * allocates the string. So rather than duplicating and freeing these - * strings, you request a read-only pointer to an existing string and - * only incur the overhead of a hash lookup. - * - * It sounds like micro-optimizing, but profiling has shown this can have - * a significant impact as you scale the number of copies up. It improves - * string creation/destruction speed, reduces memory use and decreases - * memory fragmentation, so a win all-around. - * - * For more information, you can look at the @ref tutorial_stringshare_page. - * - * @{ - */ - -/** - * @brief Note that the given string has lost an instance. - * - * @param str string The given string. - * - * This function decreases the reference counter associated to @p str - * if it exists. If that counter reaches 0, the memory associated to - * @p str is freed. If @p str is NULL, the function returns - * immediately. - * - * Note that if the given pointer is not shared or NULL, bad things - * will happen, likely a segmentation fault. - */ -EAPI void eina_stringshare_del(const char *str) -{ - int slen; - DBG("str=%p (%s)", str, str ? str : ""); - if (!str) - return; - - /* special cases */ - if (str[0] == '\0') - slen = 0; - else if (str[1] == '\0') - slen = 1; - else if (str[2] == '\0') - slen = 2; - else if (str[3] == '\0') - slen = 3; - else - slen = 4; /* handled later */ - - if (slen < 2) - return; - else if (slen < 4) { - eina_share_common_population_del(stringshare_share, slen); - STRINGSHARE_LOCK_SMALL(); - _eina_stringshare_small_del(str, slen); - STRINGSHARE_UNLOCK_SMALL(); - return; - } - - eina_share_common_del(stringshare_share, str); -} - -/** - * @brief Retrieve an instance of a string for use in a program. - * - * @param str The string to retrieve an instance of. - * @param slen The string size (<= strlen(str)). - * @return A pointer to an instance of the string on success. - * @c NULL on failure. - * - * This function retrieves an instance of @p str. If @p str is - * @c NULL, then @c NULL is returned. If @p str is already stored, it - * is just returned and its reference counter is increased. Otherwise - * it is added to the strings to be searched and a duplicated string - * of @p str is returned. - * - * This function does not check string size, but uses the - * exact given size. This can be used to share_common part of a larger - * buffer or substring. - * - * @see eina_share_common_add() - */ -EAPI const char *eina_stringshare_add_length(const char *str, - unsigned int slen) -{ - DBG("str=%p (%.*s), slen=%u", str, slen, str ? str : "", slen); - - if (slen <= 0) - return ""; - else if (slen == 1) - return (const char *) _eina_stringshare_single + - ((*str) << 1); - else if (slen < 4) { - const char *s; - - STRINGSHARE_LOCK_SMALL(); - s = _eina_stringshare_small_add(str, slen); - STRINGSHARE_UNLOCK_SMALL(); - return s; - } - - return eina_share_common_add_length(stringshare_share, str, slen * - sizeof(char), sizeof(char)); -} - -/** - * @brief Retrieve an instance of a string for use in a program. - * - * @param str The NULL terminated string to retrieve an instance of. - * @return A pointer to an instance of the string on success. - * @c NULL on failure. - * - * This function retrieves an instance of @p str. If @p str is - * @c NULL, then @c NULL is returned. If @p str is already stored, it - * is just returned and its reference counter is increased. Otherwise - * it is added to the strings to be searched and a duplicated string - * of @p str is returned. - * - * The string @p str must be NULL terminated ('@\0') and its full - * length will be used. To use part of the string or non-null - * terminated, use eina_stringshare_add_length() instead. - * - * @see eina_stringshare_add_length() - */ -EAPI const char *eina_stringshare_add(const char *str) -{ - int slen; - if (!str) - return NULL; - - if (str[0] == '\0') - slen = 0; - else if (str[1] == '\0') - slen = 1; - else if (str[2] == '\0') - slen = 2; - else if (str[3] == '\0') - slen = 3; - else - slen = 3 + (int) strlen(str + 3); - - return eina_stringshare_add_length(str, slen); -} - -/** - * @brief Retrieve an instance of a string for use in a program - * from a format string. - * - * @param fmt The NULL terminated format string to retrieve an instance of. - * @return A pointer to an instance of the string on success. - * @c NULL on failure. - * - * This function retrieves an instance of @p fmt. If @p fmt is - * @c NULL, then @c NULL is returned. If @p fmt is already stored, it - * is just returned and its reference counter is increased. Otherwise - * it is added to the strings to be searched and a duplicated string - * is returned. - * - * The format string @p fmt must be NULL terminated ('@\0') and its full - * length will be used. To use part of the format string or non-null - * terminated, use eina_stringshare_nprintf() instead. - * - * @see eina_stringshare_nprintf() - */ -EAPI const char *eina_stringshare_printf(const char *fmt, ...) -{ - va_list args; - char *tmp; - const char *ret; - int len; - - if (!fmt) - return NULL; - - va_start(args, fmt); - len = vasprintf(&tmp, fmt, args); - va_end(args); - - if (len < 1) - return NULL; - - ret = eina_stringshare_add_length(tmp, len); - free(tmp); - - return ret; -} - -/** - * @brief Retrieve an instance of a string for use in a program - * from a format string. - * - * @param fmt The NULL terminated format string to retrieve an instance of. - * @param args The va_args for @p fmt - * @return A pointer to an instance of the string on success. - * @c NULL on failure. - * - * This function retrieves an instance of @p fmt with @p args. If @p fmt is - * @c NULL, then @c NULL is returned. If @p fmt with @p args is already stored, it - * is just returned and its reference counter is increased. Otherwise - * it is added to the strings to be searched and a duplicated string - * is returned. - * - * The format string @p fmt must be NULL terminated ('@\0') and its full - * length will be used. To use part of the format string or non-null - * terminated, use eina_stringshare_nprintf() instead. - * - * @see eina_stringshare_nprintf() - */ -EAPI const char *eina_stringshare_vprintf(const char *fmt, va_list args) -{ - char *tmp; - const char *ret; - int len; - - if (!fmt) - return NULL; - - len = vasprintf(&tmp, fmt, args); - - if (len < 1) - return NULL; - - ret = eina_stringshare_add_length(tmp, len); - free(tmp); - - return ret; -} - -/** - * @brief Retrieve an instance of a string for use in a program - * from a format string with size limitation. - * @param len The length of the format string to use - * @param fmt The format string to retrieve an instance of. - * @return A pointer to an instance of the string on success. - * @c NULL on failure. - * - * This function retrieves an instance of @p fmt limited by @p len. If @p fmt is - * @c NULL or @p len is < 1, then @c NULL is returned. If the resulting string - * is already stored, it is returned and its reference counter is increased. Otherwise - * it is added to the strings to be searched and a duplicated string - * is returned. - * - * @p len length of the format string will be used. To use the - * entire format string, use eina_stringshare_printf() instead. - * - * @see eina_stringshare_printf() - */ -EAPI const char *eina_stringshare_nprintf(unsigned int len, - const char *fmt, ...) -{ - va_list args; - char *tmp; - int size; - - if (!fmt) - return NULL; - - if (len < 1) - return NULL; - - tmp = alloca(sizeof(char) * len + 1); - - va_start(args, fmt); - size = vsnprintf(tmp, len, fmt, args); - va_end(args); - - if (size < 1) - return NULL; - - return eina_stringshare_add_length(tmp, len); -} - -/** - * Increment references of the given shared string. - * - * @param str The shared string. - * @return A pointer to an instance of the string on success. - * @c NULL on failure. - * - * This is similar to eina_share_common_add(), but it's faster since it will - * avoid lookups if possible, but on the down side it requires the parameter - * to be shared before, in other words, it must be the return of a previous - * eina_share_common_add(). - * - * There is no unref since this is the work of eina_share_common_del(). - */ -EAPI const char *eina_stringshare_ref(const char *str) -{ - int slen; - DBG("str=%p (%s)", str, str ? str : ""); - - if (!str) - return eina_share_common_ref(stringshare_share, str); - - /* special cases */ - if (str[0] == '\0') - slen = 0; - else if (str[1] == '\0') - slen = 1; - else if (str[2] == '\0') - slen = 2; - else if (str[3] == '\0') - slen = 3; - else - slen = 3 + (int) strlen(str + 3); - - if (slen < 2) { - eina_share_common_population_add(stringshare_share, slen); - - return str; - } else if (slen < 4) { - const char *s; - eina_share_common_population_add(stringshare_share, slen); - - STRINGSHARE_LOCK_SMALL(); - s = _eina_stringshare_small_add(str, slen); - STRINGSHARE_UNLOCK_SMALL(); - - return s; - } - - return eina_share_common_ref(stringshare_share, str); -} - -/** - * @brief Note that the given string @b must be shared. - * - * @param str the shared string to know the length. It is safe to - * give NULL, in that case -1 is returned. - * - * This function is a cheap way to known the length of a shared - * string. Note that if the given pointer is not shared, bad - * things will happen, likely a segmentation fault. If in doubt, try - * strlen(). - */ -EAPI int eina_stringshare_strlen(const char *str) -{ - int len; - /* special cases */ - if (str[0] == '\0') - return 0; - - if (str[1] == '\0') - return 1; - - if (str[2] == '\0') - return 2; - - if (str[3] == '\0') - return 3; - - len = - eina_share_common_length(stringshare_share, - (const char *) str); - len = (len > 0) ? len / (int) sizeof(char) : -1; - return len; -} - -/** - * @brief Dump the contents of the share_common. - * - * This function dumps all strings in the share_common to stdout with a - * DDD: prefix per line and a memory usage summary. - */ -EAPI void eina_stringshare_dump(void) -{ - eina_share_common_dump(stringshare_share, - _eina_stringshare_small_dump, - sizeof(_eina_stringshare_single)); -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_tiler.c b/tests/suite/ecore/src/lib/eina_tiler.c deleted file mode 100644 index 5d31aba6cf..0000000000 --- a/tests/suite/ecore/src/lib/eina_tiler.c +++ /dev/null @@ -1,1227 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2007-2008 Gustavo Sverzut Barbieri, Jorge Luis Zapata Muga - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -/* TODO - * it is possible to have more than one tiler algorithm, but for now the - * version Gustavo did is hardcoded here - * http://blog.gustavobarbieri.com.br/2007/06/03/evas-now-using-rectangle-split-and-merge/ - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#include "eina_config.h" -#include "eina_private.h" -#include "eina_tiler.h" -#include "eina_error.h" - -/*============================================================================* -* Local * -*============================================================================*/ - -/* The splitter data types */ -typedef struct list_node list_node_t; -typedef struct list list_t; -typedef struct rect rect_t; -typedef struct rect_node rect_node_t; - -struct list_node { - struct list_node *next; -}; - -struct list { - struct list_node *head; - struct list_node *tail; -}; - -struct rect { - short right; - short bottom; - short left; - short top; - short width; - short height; - int area; -}; - -struct rect_node { - struct list_node _lst; - struct rect rect; -}; - -typedef struct splitter { - Eina_Bool need_merge; - list_t rects; -} splitter_t; - -typedef struct list_node_pool { - list_node_t *node; - int len; - int max; -} list_node_pool_t; - - -static const list_node_t list_node_zeroed = { NULL }; -static const list_t list_zeroed = { NULL, NULL }; -static list_node_pool_t list_node_pool = { NULL, 0, 1024 }; - - -typedef struct _Eina_Iterator_Tiler { - Eina_Iterator iterator; - const Eina_Tiler *tiler; - list_node_t *curr; - EINA_MAGIC} Eina_Iterator_Tiler; - -struct _Eina_Tiler { - struct { - int w, h; - } tile; - Eina_Rectangle area; - EINA_MAGIC splitter_t splitter; -}; - -#define EINA_MAGIC_CHECK_TILER(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_TILER)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_TILER); \ - return __VA_ARGS__; \ - } \ - } while(0) - - -#define EINA_MAGIC_CHECK_TILER_ITERATOR(d, ...) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_TILER_ITERATOR)) \ - { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_TILER_ITERATOR); \ - return __VA_ARGS__; \ - } \ - } while(0) - -/* The Splitter algorithm */ -static inline void rect_init(rect_t * r, int x, int y, int w, int h) -{ - r->area = w * h; - - r->left = x; - r->top = y; - - r->right = x + w; - r->bottom = y + h; - - r->width = w; - r->height = h; -} - -static inline list_node_t *rect_list_node_pool_get(void) -{ - if (list_node_pool.node) { - list_node_t *node; - - node = list_node_pool.node; - list_node_pool.node = node->next; - list_node_pool.len--; - - return node; - } else - return malloc(sizeof(rect_node_t)); -} - - -static inline void rect_list_concat(list_t * rects, list_t * other) -{ - if (!other->head) - return; - - if (rects->tail) { - rects->tail->next = other->head; - rects->tail = other->tail; - } else { - rects->head = other->head; - rects->tail = other->tail; - } - - *other = list_zeroed; -} - -static inline void rect_list_append_node(list_t * rects, - list_node_t * node) -{ - if (rects->tail) { - rects->tail->next = node; - rects->tail = node; - } else { - rects->head = node; - rects->tail = node; - } -} - -static inline void rect_list_append(list_t * rects, const rect_t r) -{ - rect_node_t *rect_node; - - rect_node = (rect_node_t *) rect_list_node_pool_get(); - rect_node->rect = r; - rect_node->_lst = list_node_zeroed; - - rect_list_append_node(rects, (list_node_t *) rect_node); -} - -static inline void rect_list_append_xywh(list_t * rects, - int x, int y, int w, int h) -{ - rect_t r; - - rect_init(&r, x, y, w, h); - rect_list_append(rects, r); -} - -static inline void _calc_intra_rect_area(const rect_t a, const rect_t b, - int *width, int *height) -{ - int max_left, min_right, max_top, min_bottom; - - if (a.left < b.left) - max_left = b.left; - else - max_left = a.left; - - if (a.right < b.right) - min_right = a.right; - else - min_right = b.right; - - *width = min_right - max_left; - - if (a.top < b.top) - max_top = b.top; - else - max_top = a.top; - - if (a.bottom < b.bottom) - min_bottom = a.bottom; - else - min_bottom = b.bottom; - - *height = min_bottom - max_top; -} - -static inline void _split_strict(list_t * dirty, const rect_t current, - rect_t r) -{ - int h_1, h_2, w_1, w_2; - - h_1 = current.top - r.top; - h_2 = r.bottom - current.bottom; - w_1 = current.left - r.left; - w_2 = r.right - current.right; - - if (h_1 > 0) { - /* .--.r (b) .---.r2 - * | | | | - * .-------.cur (a) .---.r '---' - * | | | | -> | | + - * | `--' | `---' - * `-------' - */ - rect_list_append_xywh(dirty, r.left, r.top, r.width, h_1); - r.height -= h_1; - r.top = current.top; - } - - if (h_2 > 0) { - /* .-------.cur (a) - * | .---. | .---.r - * | | | | -> | | - * `-------' `---' + .---.r2 - * | | | | - * `---'r (b) `---' - */ - rect_list_append_xywh(dirty, r.left, current.bottom, - r.width, h_2); - r.height -= h_2; - } - - if (w_1 > 0) - /* (b) r .----.cur (a) - * .--|-. | .--.r2 .-.r - * | | | | -> | | + | | - * `--|-' | `--' `-' - * `----' - */ - rect_list_append_xywh(dirty, r.left, r.top, w_1, r.height); /* not necessary to keep these, r (b) will be destroyed */ - - /* r.width -= w_1; */ - /* r.left = current.left; */ - - if (w_2 > 0) - /* .----.cur (a) - * | | - * | .-|--.r (b) .-.r .--.r2 - * | | | | -> | | + | | - * | `-|--' `-' `--' - * `----' - */ - rect_list_append_xywh(dirty, current.right, r.top, w_2, r.height); /* not necessary to keep this, r (b) will be destroyed */ - - /* r.width -= w_2; */ -} - -static inline void _calc_intra_outer_rect_area(const rect_t a, - const rect_t b, - rect_t * intra, - rect_t * outer) -{ - int min_left, max_left, min_right, max_right; - int min_top, max_top, min_bottom, max_bottom; - - if (a.left < b.left) { - max_left = b.left; - min_left = a.left; - } else { - max_left = a.left; - min_left = b.left; - } - - if (a.right < b.right) { - min_right = a.right; - max_right = b.right; - } else { - min_right = b.right; - max_right = a.right; - } - - intra->left = max_left; - intra->right = min_right; - intra->width = min_right - max_left; - - outer->left = min_left; - outer->right = max_right; - outer->width = max_right - min_left; - - if (a.top < b.top) { - max_top = b.top; - min_top = a.top; - } else { - max_top = a.top; - min_top = b.top; - } - - if (a.bottom < b.bottom) { - min_bottom = a.bottom; - max_bottom = b.bottom; - } else { - min_bottom = b.bottom; - max_bottom = a.bottom; - } - - intra->top = max_top; - intra->bottom = min_bottom; - intra->height = min_bottom - max_top; - if ((intra->width > 0) && (intra->height > 0)) - intra->area = intra->width * intra->height; - else - intra->area = 0; - - outer->top = min_top; - outer->bottom = max_bottom; - outer->height = max_bottom - min_top; - outer->area = outer->width * outer->height; -} - -enum { - SPLIT_FUZZY_ACTION_NONE, - SPLIT_FUZZY_ACTION_SPLIT, - SPLIT_FUZZY_ACTION_MERGE -}; - -static inline int _split_fuzzy(list_t * dirty, const rect_t a, rect_t * b) -{ - int h_1, h_2, w_1, w_2, action; - - h_1 = a.top - b->top; - h_2 = b->bottom - a.bottom; - w_1 = a.left - b->left; - w_2 = b->right - a.right; - - action = SPLIT_FUZZY_ACTION_NONE; - - if (h_1 > 0) { - /* .--.r (b) .---.r2 - * | | | | - * .-------.cur (a) .---.r '---' - * | | | | -> | | + - * | `--' | `---' - * `-------' - */ - rect_list_append_xywh(dirty, b->left, b->top, b->width, - h_1); - b->height -= h_1; - b->top = a.top; - action = SPLIT_FUZZY_ACTION_SPLIT; - } - - if (h_2 > 0) { - /* .-------.cur (a) - * | .---. | .---.r - * | | | | -> | | - * `-------' `---' + .---.r2 - * | | | | - * `---'r (b) `---' - */ - rect_list_append_xywh(dirty, b->left, a.bottom, b->width, - h_2); - b->height -= h_2; - action = SPLIT_FUZZY_ACTION_SPLIT; - } - - if (((w_1 > 0) || (w_2 > 0)) && (a.height == b->height)) - return SPLIT_FUZZY_ACTION_MERGE; - - if (w_1 > 0) { - /* (b) r .----.cur (a) - * .--|-. | .--.r2 .-.r - * | | | | -> | | + | | - * `--|-' | `--' `-' - * `----' - */ - rect_list_append_xywh(dirty, b->left, b->top, w_1, - b->height); - /* not necessary to keep these, r (b) will be destroyed */ - /* b->width -= w_1; */ - /* b->left = a.left; */ - action = SPLIT_FUZZY_ACTION_SPLIT; - } - - if (w_2 > 0) { - /* .----.cur (a) - * | | - * | .-|--.r (b) .-.r .--.r2 - * | | | | -> | | + | | - * | `-|--' `-' `--' - * `----' - */ - rect_list_append_xywh(dirty, a.right, b->top, w_2, - b->height); - /* not necessary to keep these, r (b) will be destroyed */ - /* b->width -= w_2; */ - action = SPLIT_FUZZY_ACTION_SPLIT; - } - - return action; -} - -#if 0 -static void rect_list_node_pool_set_max(int max) -{ - int diff; - - diff = list_node_pool.len - max; - for (; diff > 0 && list_node_pool.node != NULL; diff--) { - list_node_t *node; - - node = list_node_pool.node; - list_node_pool.node = node->next; - list_node_pool.len--; - - free(node); - } - - list_node_pool.max = max; -} -#endif - -static void rect_list_node_pool_flush(void) -{ - while (list_node_pool.node) { - list_node_t *node; - - node = list_node_pool.node; - list_node_pool.node = node->next; - list_node_pool.len--; - - free(node); - } -} - - - -static inline void rect_list_node_pool_put(list_node_t * node) -{ - if (list_node_pool.len < list_node_pool.max) { - node->next = list_node_pool.node; - list_node_pool.node = node; - list_node_pool.len++; - } else - free(node); -} - -#if 0 -static void rect_print(const rect_t r) -{ - printf("", r.left, r.top, r.width, r.height); -} - -static void rect_list_print(const list_t rects) -{ - list_node_t *node; - int len; - - len = 0; - for (node = rects.head; node != NULL; node = node->next) - len++; - - printf("["); - for (node = rects.head; node != NULL; node = node->next) { - rect_print(((rect_node_t *) node)->rect); - if (node->next) { - putchar(','); - if (len < 4) - putchar(' '); - else { - putchar('\n'); - putchar(' '); - } - } - } - printf("]\n"); -} -#endif - -static inline list_node_t *rect_list_unlink_next(list_t * rects, - list_node_t * parent_node) -{ - list_node_t *node; - - if (parent_node) { - node = parent_node->next; - parent_node->next = node->next; - } else { - node = rects->head; - rects->head = node->next; - } - - if (rects->tail == node) - rects->tail = parent_node; - - *node = list_node_zeroed; - return node; -} - -static inline void rect_list_del_next(list_t * rects, - list_node_t * parent_node) -{ - list_node_t *node; - - node = rect_list_unlink_next(rects, parent_node); - rect_list_node_pool_put(node); -} - -static void rect_list_clear(list_t * rects) -{ - list_node_t *node; - - node = rects->head; - while (node) { - list_node_t *aux; - - aux = node->next; - rect_list_node_pool_put(node); - node = aux; - } - *rects = list_zeroed; -} - -static void rect_list_del_split_strict(list_t * rects, const rect_t del_r) -{ - list_t modified = list_zeroed; - list_node_t *cur_node, *prev_node; - - prev_node = NULL; - cur_node = rects->head; - while (cur_node) { - int intra_width, intra_height; - rect_t current; - - current = ((rect_node_t *) cur_node)->rect; - - _calc_intra_rect_area(del_r, current, &intra_width, - &intra_height); - if ((intra_width <= 0) || (intra_height <= 0)) { - /* .---.current .---.del_r - * | | | | - * `---+---.del_r `---+---.current - * | | | | - * `---' `---' - * no intersection, nothing to do - */ - prev_node = cur_node; - cur_node = cur_node->next; - } else if ((intra_width == current.width) && (intra_height - == - current. - height)) { - /* .-------.del_r - * | .---. | - * | | | | - * | `---'current - * `-------' - * current is contained, remove from rects - */ - cur_node = cur_node->next; - rect_list_del_next(rects, prev_node); - } else { - _split_strict(&modified, del_r, current); - cur_node = cur_node->next; - rect_list_del_next(rects, prev_node); - } - } - - rect_list_concat(rects, &modified); -} - -#if 0 -static void rect_list_add_split_strict(list_t * rects, list_node_t * node) -{ - list_t dirty = list_zeroed; - list_t new_dirty = list_zeroed; - list_node_t *cur_node; - - if (!rects->head) { - rect_list_append_node(rects, node); - return; - } - - rect_list_append_node(&dirty, node); - - cur_node = rects->head; - while (dirty.head) { - rect_t current; - - if (!cur_node) { - rect_list_concat(rects, &dirty); - break; - } - - current = ((rect_node_t *) cur_node)->rect; - - while (dirty.head) { - int intra_width, intra_height; - rect_t r; - - r = ((rect_node_t *) dirty.head)->rect; - _calc_intra_rect_area(r, current, &intra_width, - &intra_height); - if ((intra_width == r.width) && (intra_height - == r.height)) - /* .-------.cur - * | .---.r| - * | | | | - * | `---' | - * `-------' - */ - rect_list_del_next(&dirty, NULL); - else if ((intra_width <= 0) || (intra_height <= 0)) { - /* .---.cur .---.r - * | | | | - * `---+---.r `---+---.cur - * | | | | - * `---' `---' - */ - list_node_t *tmp; - tmp = rect_list_unlink_next(&dirty, NULL); - rect_list_append_node(&new_dirty, tmp); - } else { - _split_strict(&new_dirty, current, r); - rect_list_del_next(&dirty, NULL); - } - } - dirty = new_dirty; - new_dirty = list_zeroed; - - cur_node = cur_node->next; - } -} -#endif - -static list_node_t *rect_list_add_split_fuzzy(list_t * rects, - list_node_t * node, - int accepted_error) -{ - list_t dirty = list_zeroed; - list_node_t *old_last; - - old_last = rects->tail; - - if (!rects->head) { - rect_list_append_node(rects, node); - return old_last; - } - - rect_list_append_node(&dirty, node); - while (dirty.head) { - list_node_t *d_node, *cur_node, *prev_cur_node; - int keep_dirty; - rect_t r; - - d_node = rect_list_unlink_next(&dirty, NULL); - r = ((rect_node_t *) d_node)->rect; - - prev_cur_node = NULL; - cur_node = rects->head; - keep_dirty = 1; - while (cur_node) { - int area, action; - rect_t current, intra, outer; - - current = ((rect_node_t *) cur_node)->rect; - - _calc_intra_outer_rect_area(r, current, &intra, - &outer); - area = current.area + r.area - intra.area; - - if ((intra.width == r.width) && (intra.height - == r.height)) { - /* .-------.cur - * | .---.r| - * | | | | - * | `---' | - * `-------' - */ - keep_dirty = 0; - break; - } else if ((intra.width == current.width) - && (intra.height == current.height)) { - /* .-------.r - * | .---.cur - * | | | | - * | `---' | - * `-------' - */ - if (old_last == cur_node) - old_last = prev_cur_node; - - cur_node = cur_node->next; - rect_list_del_next(rects, prev_cur_node); - } else if ((outer.area - area) <= accepted_error) { - /* .-----------. bounding box (outer) - * |.---. .---.| - * ||cur| |r || - * || | | || - * |`---' `---'| - * `-----------' - * merge them, remove both and add merged - */ - rect_node_t *n; - - if (old_last == cur_node) - old_last = prev_cur_node; - - n = (rect_node_t *) - rect_list_unlink_next(rects, - prev_cur_node); - n->rect = outer; - rect_list_append_node(&dirty, - (list_node_t *) n); - - keep_dirty = 0; - break; - } else if (intra.area <= accepted_error) { - /* .---.cur .---.r - * | | | | - * `---+---.r `---+---.cur - * | | | | - * `---' `---' - * no split, no merge - */ - prev_cur_node = cur_node; - cur_node = cur_node->next; - } else { - /* split is required */ - action = _split_fuzzy(&dirty, current, &r); - if (action == SPLIT_FUZZY_ACTION_MERGE) { -/* horizontal merge is possible: remove both, add merged */ - rect_node_t *n; - - if (old_last == cur_node) - old_last = prev_cur_node; - - n = (rect_node_t *) - rect_list_unlink_next(rects, - prev_cur_node); - - n->rect.left = outer.left; - n->rect.width = outer.width; - n->rect.right = outer.right; - n->rect.area = - outer.width * r.height; - rect_list_append_node(&dirty, - (list_node_t - *) n); - } else if (action == - SPLIT_FUZZY_ACTION_NONE) { -/* - * this rect check was totally useless, - * should never happen - */ -/* prev_cur_node = cur_node; */ -/* cur_node = cur_node->next; */ - printf("Should not get here!\n"); - abort(); - } - - keep_dirty = 0; - break; - } - } - if (EINA_UNLIKELY(keep_dirty)) - rect_list_append_node(rects, d_node); - else - rect_list_node_pool_put(d_node); - } - - return old_last; -} - -static inline void _calc_outer_rect_area(const rect_t a, const rect_t b, - rect_t * outer) -{ - int min_left, max_right; - int min_top, max_bottom; - - if (a.left < b.left) - min_left = a.left; - else - min_left = b.left; - - if (a.right < b.right) - max_right = b.right; - else - max_right = a.right; - - outer->left = min_left; - outer->right = max_right; - outer->width = max_right - min_left; - - if (a.top < b.top) - min_top = a.top; - else - min_top = b.top; - - if (a.bottom < b.bottom) - max_bottom = b.bottom; - else - max_bottom = a.bottom; - - outer->top = min_top; - outer->bottom = max_bottom; - outer->height = max_bottom - min_top; - - outer->area = outer->width * outer->height; -} - -static void rect_list_merge_rects(list_t * rects, - list_t * to_merge, int accepted_error) -{ - while (to_merge->head) { - list_node_t *node, *parent_node; - rect_t r1; - int merged; - - r1 = ((rect_node_t *) to_merge->head)->rect; - - merged = 0; - parent_node = NULL; - node = rects->head; - while (node) { - rect_t r2, outer; - int area; - - r2 = ((rect_node_t *) node)->rect; - - _calc_outer_rect_area(r1, r2, &outer); - area = r1.area + r2.area; /* intra area is taken as 0 */ - if (outer.area - area <= accepted_error) { - /* - * remove both r1 and r2, create r3 - * actually r3 uses r2 instance, saves memory - */ - rect_node_t *n; - - n = (rect_node_t *) - rect_list_unlink_next(rects, - parent_node); - n->rect = outer; - rect_list_append_node(to_merge, - (list_node_t *) n); - merged = 1; - break; - } - - parent_node = node; - node = node->next; - } - - if (!merged) { - list_node_t *n; - n = rect_list_unlink_next(to_merge, NULL); - rect_list_append_node(rects, n); - } else - rect_list_del_next(to_merge, NULL); - } -} - -static void rect_list_add_split_fuzzy_and_merge(list_t * rects, - list_node_t * node, - int split_accepted_error, - int merge_accepted_error) -{ - list_node_t *n; - - n = rect_list_add_split_fuzzy(rects, node, split_accepted_error); - if (n && n->next) { - list_t to_merge; - - /* split list into 2 segments, already merged and to merge */ - to_merge.head = n->next; - to_merge.tail = rects->tail; - rects->tail = n; - n->next = NULL; - - rect_list_merge_rects(rects, &to_merge, - merge_accepted_error); - } -} - -static inline void _splitter_new(Eina_Tiler * t) -{ - t->splitter.rects = list_zeroed; - t->splitter.need_merge = EINA_FALSE; -} - -static inline void _splitter_del(Eina_Tiler * t) -{ - rect_list_clear(&t->splitter.rects); - rect_list_node_pool_flush(); -} - -static inline void _splitter_tile_size_set(Eina_Tiler * t, - int w __UNUSED__, - int h __UNUSED__) -{ - /* TODO are w and h used for something? */ - t->splitter.rects = list_zeroed; -} - -static inline Eina_Bool _splitter_rect_add(Eina_Tiler * t, - Eina_Rectangle * rect) -{ - rect_node_t *rn; - - //printf("ACCOUNTING[1]: add_redraw: %4d,%4d %3dx%3d\n", x, y, w, h); - rect->x >>= 1; - rect->y >>= 1; - rect->w += 2; - rect->w >>= 1; - rect->h += 2; - rect->h >>= 1; - - rn = (rect_node_t *) rect_list_node_pool_get(); - rn->_lst = list_node_zeroed; - rect_init(&rn->rect, rect->x, rect->y, rect->w, rect->h); - //printf("ACCOUNTING[2]: add_redraw: %4d,%4d %3dx%3d\n", x, y, w, h); - //testing on my core2 duo desktop - fuzz of 32 or 48 is best. -#define FUZZ 32 - rect_list_add_split_fuzzy_and_merge(&t->splitter.rects, - (list_node_t *) rn, - FUZZ * FUZZ, FUZZ * FUZZ); - return EINA_TRUE; -} - -static inline void _splitter_rect_del(Eina_Tiler * t, - Eina_Rectangle * rect) -{ - rect_t r; - - if (!t->splitter.rects.head) - return; - - rect->x += 1; - rect->y += 1; - rect->x >>= 1; - rect->y >>= 1; - rect->w -= 1; - rect->w >>= 1; - rect->h -= 1; - rect->h >>= 1; - - if ((rect->w <= 0) || (rect->h <= 0)) - return; - - rect_init(&r, rect->x, rect->y, rect->w, rect->h); - //fprintf(stderr, "ACCOUNTING: del_redraw: %4d,%4d %3dx%3d\n", x, y, w, h); - - rect_list_del_split_strict(&t->splitter.rects, r); - t->splitter.need_merge = EINA_TRUE; - return; -} - -static inline void _splitter_clear(Eina_Tiler * t) -{ - rect_list_clear(&t->splitter.rects); - t->splitter.need_merge = EINA_FALSE; -} - -/* end of splitter algorithm */ - -static Eina_Bool _iterator_next(Eina_Iterator_Tiler * it, void **data) -{ - Eina_Rectangle *rect = (Eina_Rectangle *) data; - list_node_t *n; - - for (n = it->curr; n; n = n->next) { - rect_t cur; - - cur = ((rect_node_t *) n)->rect; - - rect->x = cur.left << 1; - rect->y = cur.top << 1; - rect->w = cur.width << 1; - rect->h = cur.height << 1; - - if (eina_rectangle_intersection(rect, &it->tiler->area) == - EINA_FALSE) - continue; - - if ((rect->w <= 0) || (rect->h <= 0)) - continue; - - it->curr = n->next; - return EINA_TRUE; - } - return EINA_FALSE; -} - -static void *_iterator_get_container(Eina_Iterator_Tiler * it) -{ - EINA_MAGIC_CHECK_TILER_ITERATOR(it, NULL); - return (void *) it->tiler; -} - -static void _iterator_free(Eina_Iterator_Tiler * it) -{ - EINA_MAGIC_CHECK_TILER_ITERATOR(it); - free(it); -} - -/*============================================================================* -* Global * -*============================================================================*/ - -/*============================================================================* -* API * -*============================================================================*/ - -EAPI Eina_Tiler *eina_tiler_new(int w, int h) -{ - Eina_Tiler *t; - - t = calloc(1, sizeof(Eina_Tiler)); - t->area.w = w; - t->area.h = h; - t->tile.w = w; - t->tile.h = h; - EINA_MAGIC_SET(t, EINA_MAGIC_TILER); - _splitter_new(t); - return t; -} - -EAPI void eina_tiler_free(Eina_Tiler * t) -{ - EINA_MAGIC_CHECK_TILER(t); - _splitter_del(t); - free(t); -} - -EAPI void eina_tiler_tile_size_set(Eina_Tiler * t, int w, int h) -{ - EINA_MAGIC_CHECK_TILER(t); - if ((w <= 0) || (h <= 0)) - return; - - t->tile.w = w; - t->tile.h = h; - _splitter_tile_size_set(t, w, h); -} - -EAPI Eina_Bool eina_tiler_rect_add(Eina_Tiler * t, - const Eina_Rectangle * r) -{ - Eina_Rectangle tmp; - - EINA_MAGIC_CHECK_TILER(t, EINA_FALSE); - if ((r->w <= 0) || (r->h <= 0)) - return EINA_FALSE; - - tmp = *r; - if (eina_rectangle_intersection(&tmp, &t->area) == EINA_FALSE) - return EINA_FALSE; - - if ((tmp.w <= 0) || (tmp.h <= 0)) - return EINA_FALSE; - - return _splitter_rect_add(t, &tmp); -} - -EAPI void eina_tiler_rect_del(Eina_Tiler * t, const Eina_Rectangle * r) -{ - Eina_Rectangle tmp; - - EINA_MAGIC_CHECK_TILER(t); - if ((r->w <= 0) || (r->h <= 0)) - return; - - tmp = *r; - if (eina_rectangle_intersection(&tmp, &t->area) == EINA_FALSE) - return; - - if ((tmp.w <= 0) || (tmp.h <= 0)) - return; - - _splitter_rect_del(t, &tmp); -} - -EAPI void eina_tiler_clear(Eina_Tiler * t) -{ - EINA_MAGIC_CHECK_TILER(t); - _splitter_clear(t); -} - - -EAPI Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler * t) -{ - Eina_Iterator_Tiler *it; - - EINA_MAGIC_CHECK_TILER(t, NULL); - - it = calloc(1, sizeof(Eina_Iterator_Tiler)); - if (!it) - return NULL; - - it->tiler = t; - - if (t->splitter.need_merge == EINA_TRUE) { - list_t to_merge; - splitter_t *sp; - - sp = (splitter_t *) & (t->splitter); - to_merge = t->splitter.rects; - sp->rects = list_zeroed; - rect_list_merge_rects(&sp->rects, &to_merge, FUZZ * FUZZ); - sp->need_merge = 0; - } - - it->curr = it->tiler->splitter.rects.head; - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = FUNC_ITERATOR_NEXT(_iterator_next); - it->iterator.get_container = - FUNC_ITERATOR_GET_CONTAINER(_iterator_get_container); - it->iterator.free = FUNC_ITERATOR_FREE(_iterator_free); - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - EINA_MAGIC_SET(it, EINA_MAGIC_TILER_ITERATOR); - - return &it->iterator; -} - -struct _Eina_Tile_Grid_Slicer_Iterator { - Eina_Iterator iterator; - Eina_Tile_Grid_Slicer priv; -}; - -typedef struct _Eina_Tile_Grid_Slicer_Iterator - Eina_Tile_Grid_Slicer_Iterator; - -static void -eina_tile_grid_slicer_iterator_free(Eina_Tile_Grid_Slicer_Iterator * it) -{ - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_NONE); - free(it); -} - -static Eina_Bool -eina_tile_grid_slicer_iterator_next(Eina_Tile_Grid_Slicer_Iterator * it, - void **data) -{ - return eina_tile_grid_slicer_next - (&it->priv, (const Eina_Tile_Grid_Info **) data); -} - -/** - * @brief Creates a new Eina_Iterator that slices over a list of tiles. - * - * @param x X axis coordinate. - * @param y Y axis coordinate. - * @param w width. - * @param h height. - * @param tile_w tile width. - * @param tile_h tile height. - * @return A pointer to the Eina_Iterator. - * @c NULL on failure. - * - * The tile grid is defined by @a tile_w and @a tile_h while the region is - * defined by @a x, @a y, @a w, @a h. The output is given as - * @c Eina_Tile_Grid_Info where tile index is given in @c col col and - * @c row row with tile-relative - * coordinates in @c x, @c y, @c w, @c h. If tile was fully filled by - * region, then @c full flag - * is set. - */ -EAPI Eina_Iterator *eina_tile_grid_slicer_iterator_new(int x, - int y, - int w, - int h, - int tile_w, - int tile_h) -{ - Eina_Tile_Grid_Slicer_Iterator *it; - - it = calloc(1, sizeof(*it)); - if (!it) { - eina_error_set(EINA_ERROR_OUT_OF_MEMORY); - return NULL; - } - - EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR); - - it->iterator.version = EINA_ITERATOR_VERSION; - it->iterator.next = - FUNC_ITERATOR_NEXT(eina_tile_grid_slicer_iterator_next); - it->iterator.free = - FUNC_ITERATOR_FREE(eina_tile_grid_slicer_iterator_free); - - eina_tile_grid_slicer_setup(&it->priv, x, y, w, h, tile_w, tile_h); - - return &it->iterator; -} diff --git a/tests/suite/ecore/src/lib/eina_unicode.c b/tests/suite/ecore/src/lib/eina_unicode.c deleted file mode 100644 index d414ae9f83..0000000000 --- a/tests/suite/ecore/src/lib/eina_unicode.c +++ /dev/null @@ -1,166 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2010 Tom Hacohen, - * Brett Nash - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - - */ - -#include -#include "eina_unicode.h" - -/* FIXME: check if sizeof(wchar_t) == sizeof(Eina_Unicode) if so, - * probably better to use the standard functions */ - -/* Maybe I'm too tired, but this is the only thing that actually worked. */ -const Eina_Unicode _EINA_UNICODE_EMPTY_STRING[1] = { 0 }; - -EAPI const Eina_Unicode *EINA_UNICODE_EMPTY_STRING = - _EINA_UNICODE_EMPTY_STRING; -/** - * @brief Same as the standard strcmp just with Eina_Unicode instead of char. - */ -EAPI int -eina_unicode_strcmp(const Eina_Unicode * a, const Eina_Unicode * b) -{ - for (; *a && *a == *b; a++, b++); - if (*a == *b) - return 0; - else if (*a < *b) - return -1; - else - return 1; -} - -/** - * @brief Same as the standard strcpy just with Eina_Unicode instead of char. - */ -EAPI Eina_Unicode *eina_unicode_strcpy(Eina_Unicode * dest, - const Eina_Unicode * source) -{ - Eina_Unicode *ret = dest; - - while (*source) - *dest++ = *source++; - *dest = 0; - return ret; -} - -/** - * @brief Same as the standard strncpy just with Eina_Unicode instead of char. - */ -EAPI Eina_Unicode *eina_unicode_strncpy(Eina_Unicode * dest, - const Eina_Unicode * source, - size_t n) -{ - Eina_Unicode *ret = dest; - - for (; n && *source; n--) - *dest++ = *source++; - for (; n; n--) - *dest++ = 0; - return ret; -} - -/** - * @brief Same as the standard strlen just with Eina_Unicode instead of char. - */ -EAPI size_t eina_unicode_strlen(const Eina_Unicode * ustr) -{ - const Eina_Unicode *end; - for (end = ustr; *end; end++); - return end - ustr; -} - -/** - * @brief Returns the length of a Eina_Unicode string, up to a limit. - * - * This function returns the number of characters in string, up to a maximum - * of n. If the terminating character is not found in the string, it returns - * n. - * - * @param ustr String to search - * @param n Max length to search - * @return Number of characters or n. - */ -EAPI size_t eina_unicode_strnlen(const Eina_Unicode * ustr, int n) -{ - const Eina_Unicode *end; - const Eina_Unicode *last = ustr + n; /* technically not portable ;-) */ - for (end = ustr; end < last && *end; end++); - return end - ustr; -} - - - - -/** - * @brief Same as the standard strdup just with Eina_Unicode instead of char. - */ -EAPI Eina_Unicode *eina_unicode_strdup(const Eina_Unicode * text) -{ - Eina_Unicode *ustr; - int len; - - len = eina_unicode_strlen(text); - ustr = (Eina_Unicode *) calloc(len + 1, sizeof(Eina_Unicode)); - memcpy(ustr, text, len * sizeof(Eina_Unicode)); - - return ustr; -} - -/** - * @brief Same as the standard strdup just with Eina_Unicode instead of char. - */ -EAPI Eina_Unicode *eina_unicode_strstr(const Eina_Unicode * haystack, - const Eina_Unicode * needle) -{ - const Eina_Unicode *i, *j; - - for (i = haystack; *i; i++) { - haystack = i; /* set this location as the base position */ - for (j = needle; *j && *i && *j == *i; j++, i++); - - if (!*j) { /*if we got to the end of j this means we got a full match */ - return (Eina_Unicode *) haystack; /* return the new base position */ - } - } - - return NULL; -} - -/** - * @see eina_str_escape() - */ -EAPI Eina_Unicode *eina_unicode_escape(const Eina_Unicode * str) -{ - Eina_Unicode *s2, *d; - const Eina_Unicode *s; - - s2 = malloc((eina_unicode_strlen(str) * 2) + 1); - if (!s2) - return NULL; - - for (s = str, d = s2; *s != 0; s++, d++) { - if ((*s == ' ') || (*s == '\\') || (*s == '\'')) { - *d = '\\'; - d++; - } - - *d = *s; - } - *d = 0; - return s2; -} diff --git a/tests/suite/ecore/src/lib/eina_ustrbuf.c b/tests/suite/ecore/src/lib/eina_ustrbuf.c deleted file mode 100644 index f571ef61a6..0000000000 --- a/tests/suite/ecore/src/lib/eina_ustrbuf.c +++ /dev/null @@ -1,89 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "eina_strbuf_common.h" -#include "eina_unicode.h" -#include "eina_ustrbuf.h" - -/*============================================================================* - * Local * - *============================================================================*/ - -/** - * @cond LOCAL - */ - -#ifdef _STRBUF_DATA_TYPE -#undef _STRBUF_DATA_TYPE -#endif - -#ifdef _STRBUF_CSIZE -#undef _STRBUF_CSIZE -#endif - -#ifdef _STRBUF_STRUCT_NAME -#undef _STRBUF_STRUCT_NAME -#endif - -#ifdef _STRBUF_STRLEN_FUNC -#undef _STRBUF_STRLEN_FUNC -#endif - -#ifdef _STRBUF_STRESCAPE_FUNC -#undef _STRBUF_STRESCAPE_FUNC -#endif - -#ifdef _STRBUF_MAGIC -#undef _STRBUF_MAGIC -#endif - -#ifdef _STRBUF_MAGIC_STR -#undef _STRBUF_MAGIC_STR -#endif - -#ifdef _FUNC_EXPAND -#undef _FUNC_EXPAND -#endif - -#define _STRBUF_DATA_TYPE Eina_Unicode -#define _STRBUF_CSIZE sizeof(_STRBUF_DATA_TYPE) -#define _STRBUF_STRUCT_NAME Eina_UStrbuf -#define _STRBUF_STRLEN_FUNC(x) eina_unicode_strlen(x) -#define _STRBUF_STRESCAPE_FUNC(x) eina_unicode_escape(x) -#define _STRBUF_MAGIC EINA_MAGIC_USTRBUF -#define _STRBUF_MAGIC_STR __USTRBUF_MAGIC_STR -static const char __USTRBUF_MAGIC_STR[] = "Eina UStrbuf"; - -#define _FUNC_EXPAND(y) eina_ustrbuf_ ## y - -/** - * @endcond - */ - - -/*============================================================================* - * Global * - *============================================================================*/ - - -/*============================================================================* - * API * - *============================================================================*/ - -/** - * @addtogroup Eina_Unicode_String_Buffer_Group Unicode String Buffer - * - * @brief These functions provide unicode string buffers management. - * - * The Unicode String Buffer data type is designed to be a mutable string, - * allowing to append, prepend or insert a string to a buffer. - * - * @{ - */ - -#include "eina_strbuf_template_c.x" - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_ustringshare.c b/tests/suite/ecore/src/lib/eina_ustringshare.c deleted file mode 100644 index 11f9f7a136..0000000000 --- a/tests/suite/ecore/src/lib/eina_ustringshare.c +++ /dev/null @@ -1,237 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2002-2008 Carsten Haitzler, - * Jorge Luis Zapata Muga, - * Cedric Bail, - * Gustavo Sverzut Barbieri - * Tom Hacohen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - - */ -/** - * @page tutorial_ustringshare_page UStringshare Tutorial - * - * to be written... - * - */ - -#include "eina_share_common.h" -#include "eina_unicode.h" -#include "eina_private.h" -#include "eina_ustringshare.h" - -/* The actual share */ -static Eina_Share *ustringshare_share; -static const char EINA_MAGIC_USTRINGSHARE_NODE_STR[] = - "Eina UStringshare Node"; - -/*============================================================================* -* Global * -*============================================================================*/ - -/** - * @internal - * @brief Initialize the share_common module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function sets up the share_common module of Eina. It is called by - * eina_init(). - * - * @see eina_init() - */ -Eina_Bool eina_ustringshare_init(void) -{ - return eina_share_common_init(&ustringshare_share, - EINA_MAGIC_USTRINGSHARE_NODE, - EINA_MAGIC_USTRINGSHARE_NODE_STR); -} - -/** - * @internal - * @brief Shut down the share_common module. - * - * @return #EINA_TRUE on success, #EINA_FALSE on failure. - * - * This function shuts down the share_common module set up by - * eina_share_common_init(). It is called by eina_shutdown(). - * - * @see eina_shutdown() - */ -Eina_Bool eina_ustringshare_shutdown(void) -{ - Eina_Bool ret; - ret = eina_share_common_shutdown(&ustringshare_share); - return ret; -} - -/*============================================================================* -* API * -*============================================================================*/ -/** - * @addtogroup Eina_UStringshare_Group Unicode Stringshare - * - * These functions allow you to store one copy of a string, and use it - * throughout your program. - * - * This is a method to reduce the number of duplicated strings kept in - * memory. It's pretty common for the same strings to be dynamically - * allocated repeatedly between applications and libraries, especially in - * circumstances where you could have multiple copies of a structure that - * allocates the string. So rather than duplicating and freeing these - * strings, you request a read-only pointer to an existing string and - * only incur the overhead of a hash lookup. - * - * It sounds like micro-optimizing, but profiling has shown this can have - * a significant impact as you scale the number of copies up. It improves - * string creation/destruction speed, reduces memory use and decreases - * memory fragmentation, so a win all-around. - * - * For more information, you can look at the @ref tutorial_ustringshare_page. - * - * @{ - */ - -/** - * @brief Note that the given string has lost an instance. - * - * @param str string The given string. - * - * This function decreases the reference counter associated to @p str - * if it exists. If that counter reaches 0, the memory associated to - * @p str is freed. If @p str is NULL, the function returns - * immediately. - * - * Note that if the given pointer is not shared or NULL, bad things - * will happen, likely a segmentation fault. - */ -EAPI void eina_ustringshare_del(const Eina_Unicode * str) -{ - if (!str) - return; - - eina_share_common_del(ustringshare_share, (const char *) str); -} - -/** - * @brief Retrieve an instance of a string for use in a program. - * - * @param str The string to retrieve an instance of. - * @param slen The string size (<= strlen(str)). - * @return A pointer to an instance of the string on success. - * @c NULL on failure. - * - * This function retrieves an instance of @p str. If @p str is - * @c NULL, then @c NULL is returned. If @p str is already stored, it - * is just returned and its reference counter is increased. Otherwise - * it is added to the strings to be searched and a duplicated string - * of @p str is returned. - * - * This function does not check string size, but uses the - * exact given size. This can be used to share_common part of a larger - * buffer or substring. - * - * @see eina_ustringshare_add() - */ -EAPI const Eina_Unicode *eina_ustringshare_add_length(const Eina_Unicode * - str, - unsigned int slen) -{ - return (const Eina_Unicode *) - eina_share_common_add_length(ustringshare_share, - (const char *) str, - slen * sizeof(Eina_Unicode), - sizeof(Eina_Unicode)); -} - -/** - * @brief Retrieve an instance of a string for use in a program. - * - * @param str The NULL terminated string to retrieve an instance of. - * @return A pointer to an instance of the string on success. - * @c NULL on failure. - * - * This function retrieves an instance of @p str. If @p str is - * @c NULL, then @c NULL is returned. If @p str is already stored, it - * is just returned and its reference counter is increased. Otherwise - * it is added to the strings to be searched and a duplicated string - * of @p str is returned. - * - * The string @p str must be NULL terminated ('@\0') and its full - * length will be used. To use part of the string or non-null - * terminated, use eina_stringshare_add_length() instead. - * - * @see eina_ustringshare_add_length() - */ -EAPI const Eina_Unicode *eina_ustringshare_add(const Eina_Unicode * str) -{ - int slen = (str) ? (int) eina_unicode_strlen(str) : -1; - return eina_ustringshare_add_length(str, slen); -} - -/** - * Increment references of the given shared string. - * - * @param str The shared string. - * @return A pointer to an instance of the string on success. - * @c NULL on failure. - * - * This is similar to eina_share_common_add(), but it's faster since it will - * avoid lookups if possible, but on the down side it requires the parameter - * to be shared before, in other words, it must be the return of a previous - * eina_ustringshare_add(). - * - * There is no unref since this is the work of eina_ustringshare_del(). - */ -EAPI const Eina_Unicode *eina_ustringshare_ref(const Eina_Unicode * str) -{ - return (const Eina_Unicode *) - eina_share_common_ref(ustringshare_share, (const char *) str); -} - -/** - * @brief Note that the given string @b must be shared. - * - * @param str the shared string to know the length. It is safe to - * give NULL, in that case -1 is returned. - * - * This function is a cheap way to known the length of a shared - * string. Note that if the given pointer is not shared, bad - * things will happen, likely a segmentation fault. If in doubt, try - * strlen(). - */ -EAPI int eina_ustringshare_strlen(const Eina_Unicode * str) -{ - int len = - eina_share_common_length(ustringshare_share, - (const char *) str); - len = (len > 0) ? len / (int) sizeof(Eina_Unicode) : -1; - return len; -} - -/** - * @brief Dump the contents of the share_common. - * - * This function dumps all strings in the share_common to stdout with a - * DDD: prefix per line and a memory usage summary. - */ -EAPI void eina_ustringshare_dump(void) -{ - eina_share_common_dump(ustringshare_share, NULL, 0); -} - -/** - * @} - */ diff --git a/tests/suite/ecore/src/lib/eina_value.c b/tests/suite/ecore/src/lib/eina_value.c deleted file mode 100644 index 7115a3063a..0000000000 --- a/tests/suite/ecore/src/lib/eina_value.c +++ /dev/null @@ -1,47 +0,0 @@ -/* eina_value.c - - Copyright (C) 2001 Christopher Rosendahl - Nathan Ingersoll - - 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 of the Software and its documentation and acknowledgment shall be - given in the documentation and software packages that this Software was - used. - - 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 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. - - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "eina_config.h" -#include "eina_private.h" - -/*============================================================================* -* Global * -*============================================================================*/ - -/*============================================================================* -* API * -*============================================================================*/ - -EAPI const unsigned int eina_prime_table[] = { - 17, 31, 61, 127, 257, 509, 1021, - 2053, 4093, 8191, 16381, 32771, 65537, 131071, 262147, 524287, - 1048573, - 2097143, 4194301, 8388617, 16777213 -}; diff --git a/tests/suite/invalid-cert.sh b/tests/suite/invalid-cert.sh deleted file mode 100755 index a13bf883e2..0000000000 --- a/tests/suite/invalid-cert.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2006-2008, 2010, 2012 Free Software Foundation, Inc. -# -# Author: Simon Josefsson -# -# This file is part of GnuTLS. -# -# GnuTLS is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at -# your option) any later version. -# -# GnuTLS is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -srcdir="${srcdir:-.}" -CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" - -if ! test -x "${CERTTOOL}"; then - exit 77 -fi - -if ! test -z "${VALGRIND}"; then - VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" -fi - -${VALGRIND} "${CERTTOOL}" --certificate-info --inder --infile "${srcdir}/invalid-cert.der" 2>/dev/null -rc=$? - -# We're done. -if test "${rc}" != "1"; then - exit ${rc} -fi - -exit 0 diff --git a/tests/suite/mini-eagain2.c b/tests/suite/mini-eagain2.c deleted file mode 100644 index cf0ea5ec4b..0000000000 --- a/tests/suite/mini-eagain2.c +++ /dev/null @@ -1,223 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "../utils.h" -#include - -/* Ecore_Fd_Handler example - * 2010 Mike Blumenkrantz - * compile with gcc $(pkgconfig --cflags --libs gnutls ecore) - */ - - -#define print(...) fprintf(stderr, "line %i: ", __LINE__); fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n") - -static int done = 0; - -#if 0 -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "|<%d>| %s", level, str); -} -#endif - -static const char - *SSL_GNUTLS_PRINT_HANDSHAKE_STATUS(gnutls_handshake_description_t - status) -{ - switch (status) { - case GNUTLS_HANDSHAKE_HELLO_REQUEST: - return "Hello request"; - case GNUTLS_HANDSHAKE_CLIENT_HELLO: - return "Client hello"; - case GNUTLS_HANDSHAKE_SERVER_HELLO: - return "Server hello"; - case GNUTLS_HANDSHAKE_CERTIFICATE_PKT: - return "Certificate packet"; - case GNUTLS_HANDSHAKE_SERVER_KEY_EXCHANGE: - return "Server key exchange"; - case GNUTLS_HANDSHAKE_CERTIFICATE_REQUEST: - return "Certificate request"; - case GNUTLS_HANDSHAKE_SERVER_HELLO_DONE: - return "Server hello done"; - case GNUTLS_HANDSHAKE_CERTIFICATE_VERIFY: - return "Certificate verify"; - case GNUTLS_HANDSHAKE_CLIENT_KEY_EXCHANGE: - return "Client key exchange"; - case GNUTLS_HANDSHAKE_FINISHED: - return "Finished"; - case GNUTLS_HANDSHAKE_SUPPLEMENTAL: - return "Supplemental"; - default: - return NULL; - } - return NULL; -} - -/* Connects to the peer and returns a socket - * descriptor. - */ -static int tcp_connect(void) -{ - const char *PORT = getenv("PORT"); - const char *SERVER = "127.0.0.1"; //verisign.com - int err, sd; - int flag = 1, curstate = 0; - struct sockaddr_in sa; - - /* sets some fd options such as nonblock */ - sd = socket(AF_INET, SOCK_STREAM, 0); - fcntl(sd, F_SETFL, O_NONBLOCK); - fcntl(sd, F_SETFD, FD_CLOEXEC); - setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, (const void *) &curstate, - sizeof(curstate)); - - setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, - sizeof(int)); - - memset(&sa, '\0', sizeof(sa)); - sa.sin_family = AF_INET; - sa.sin_port = htons(atoi(PORT)); - inet_pton(AF_INET, SERVER, &sa.sin_addr); - - /* connects to server - */ - err = connect(sd, (struct sockaddr *) &sa, sizeof(sa)); - if ((err < 0) && (errno != EINPROGRESS)) { - print("Connect error\n"); - exit(1); - } - - return sd; -} - -/* closes the given socket descriptor. - */ -static void tcp_close(int sd) -{ - shutdown(sd, SHUT_RDWR); /* no more receptions */ - close(sd); -} - -static Eina_Bool -_process_data(gnutls_session_t client, Ecore_Fd_Handler * fd_handler) -{ - static int ret, lastret; - static unsigned int count = 0; - - if (!done) { - lastret = ret; - ret = gnutls_handshake(client); - count++; - if (gnutls_record_get_direction(client)) - ecore_main_fd_handler_active_set(fd_handler, - ECORE_FD_WRITE); - else - ecore_main_fd_handler_active_set(fd_handler, - ECORE_FD_READ); - /* avoid printing messages infinity times */ - if (lastret != ret && ret != 0 && ret != GNUTLS_E_AGAIN) { - print("gnutls returned with: %s - %s", - gnutls_strerror_name(ret), - gnutls_strerror(ret)); - if ((ret == GNUTLS_E_WARNING_ALERT_RECEIVED) - || (ret == GNUTLS_E_FATAL_ALERT_RECEIVED)) - print("Also received alert: %s", - gnutls_alert_get_name - (gnutls_alert_get(client))); - print("last out: %s", - SSL_GNUTLS_PRINT_HANDSHAKE_STATUS - (gnutls_handshake_get_last_out(client))); - print("last in: %s", - SSL_GNUTLS_PRINT_HANDSHAKE_STATUS - (gnutls_handshake_get_last_in(client))); - } - - if (gnutls_error_is_fatal(ret)) { - print("yarrr this be an error!"); - exit(1); - } - - } - if (ret == GNUTLS_E_SUCCESS) { - done = 1; - //print("Handshake successful in %u handshake calls!", count); - ecore_main_loop_quit(); - } - - return ECORE_CALLBACK_RENEW; -} - -int main(void) -{ - /* credentials */ - gnutls_anon_client_credentials_t c_anoncred; - gnutls_certificate_credentials_t c_certcred; - - gnutls_session_t client; - int sd, i; - - /* General init. */ - global_init(); - ecore_init(); -// gnutls_global_set_log_function (tls_log_func); -// gnutls_global_set_log_level (6); - - /* Init client */ - gnutls_anon_allocate_client_credentials(&c_anoncred); - gnutls_certificate_allocate_credentials(&c_certcred); - - - for (i = 0; i < 5; i++) { - - gnutls_init(&client, GNUTLS_CLIENT); - /* set very specific priorities */ - - gnutls_handshake_set_timeout(client, GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT); - - gnutls_priority_set_direct(client, "NORMAL:+ANON-DH", - NULL); - gnutls_credentials_set(client, GNUTLS_CRD_ANON, - c_anoncred); - gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, - c_certcred); - gnutls_server_name_set(client, GNUTLS_NAME_DNS, - "localhost", strlen("localhost")); - - /* connect to the peer - */ - sd = tcp_connect(); - - /* associate gnutls with socket */ - gnutls_transport_set_int(client, sd); - /* add a callback for data being available for send/receive on socket */ - if (!ecore_main_fd_handler_add - (sd, ECORE_FD_READ | ECORE_FD_WRITE, - (Ecore_Fd_Cb) _process_data, client, NULL, NULL)) { - print("could not create fd handler!"); - exit(1); - } - /* begin main loop */ - ecore_main_loop_begin(); - - gnutls_bye(client, GNUTLS_SHUT_RDWR); - - gnutls_deinit(client); - - tcp_close(sd); - } - - gnutls_anon_free_client_credentials(c_anoncred); - gnutls_certificate_free_credentials(c_certcred); - - return 0; -} diff --git a/tests/suite/mini-record-timing.c b/tests/suite/mini-record-timing.c index 215c0933d5..354f733d63 100644 --- a/tests/suite/mini-record-timing.c +++ b/tests/suite/mini-record-timing.c @@ -45,12 +45,18 @@ int main() #include #include #include +#include #include -#include "../utils.h" + +//#define USE_RDTSC +//#define TEST_ETM #include #include #include +#ifdef USE_RDTSC +#include +#endif #ifdef DEBUG static void server_log_func(int level, const char *str) @@ -64,57 +70,28 @@ static void client_log_func(int level, const char *str) } #endif -#undef REHANDSHAKE - -/* This program tests the robustness of record - * decoding. - */ - -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIIBeTCCASWgAwIBAgIBBzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwROb25l\n" - "MCIYDzIwMTMwMTE5MTA0MDAwWhgPMjA0MDA2MDUxMDQwMDBaMA8xDTALBgNVBAMT\n" - "BE5vbmUwWTANBgkqhkiG9w0BAQEFAANIADBFAj4Bh52/b3FNXDdICg1Obqu9ivW+\n" - "PGJ89mNsX3O9S/aclnx5Ozw9MC1UJuZ2UEHl27YVmm4xG/y3nKUNevZjKwIDAQAB\n" - "o2swaTAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDATBgNVHSUE\n" - "DDAKBggrBgEFBQcDATAPBgNVHQ8BAf8EBQMDB6AAMB0GA1UdDgQWBBRhEgmVCi6c\n" - "hhRQvMzfEXqLKTRxcTANBgkqhkiG9w0BAQsFAAM/AADMi31wr0Tp2SJUCuQjFVCb\n" - "JDleomTayOWVS/afCyAUxYjqFfUFSZ8sYN3zAgnXt5DYO3VclIlax4n6iXOg\n" - "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIIBLAIBAAI+AYedv29xTVw3SAoNTm6rvYr1vjxifPZjbF9zvUv2nJZ8eTs8PTAt\n" - "VCbmdlBB5du2FZpuMRv8t5ylDXr2YysCAwEAAQI9EPt8Q77sFeWn0BfHoPD9pTsG\n" - "5uN2e9DP8Eu6l8K4AcOuEsEkqZzvxgqZPA68pw8BZ5xKINMFdRPHmrX/cQIfHsdq\n" - "aMDYR/moqgj8MbupqOr/48iorTk/D//2lgAMnwIfDLk3UWGvPiv6fNTlEnTgVn6o\n" - "TdL0mvpkixebQ5RR9QIfHDjkRGtXph+xXUBh50RZXE8nFfl/WV7diVE+DOq8pwIf\n" - "BxdOwjdsAH1oLBxG0sN6qBoM2NrCYoE8edydNsu55QIfEWsrlJnO/t0GzHy7qWdV\n" - "zi9JMPu9MTDhOGmqPQO7Xw==\n" "-----END RSA PRIVATE KEY-----\n"; -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; +#ifndef _POSIX_TIMERS +#error need posix timers +#endif +#define CLOCK_TO_USE CLOCK_MONOTONIC +//#define CLOCK_TO_USE CLOCK_MONOTONIC_RAW +//#define CLOCK_TO_USE CLOCK_PROCESS_CPUTIME_ID -/* A very basic TLS client, with anonymous authentication. +/* This program tests the robustness of record + * decoding. */ - - -#define MAX_PER_POINT (684*1024) -#define MAX_MEASUREMENTS(np) (MAX_PER_POINT*(np)) +#define MAX_PER_POINT (8*1024) +#define WARM_UP (2) #define MAX_BUF 1024 struct point_st { unsigned char byte1; unsigned char byte2; unsigned midx; - unsigned long *measurements; + unsigned taken; unsigned long *smeasurements; }; @@ -125,6 +102,7 @@ struct test_st { const char *file; const char *name; unsigned text_size; + uint8_t fill; }; struct point_st *prev_point_ptr = NULL; @@ -148,112 +126,36 @@ push_crippled(gnutls_transport_ptr_t tr, const void *_data, size_t len) unsigned p_size; struct test_st *test = gnutls_session_get_ptr(cli_session); - p = &test->points[point_idx]; p_size = test->npoints; - memcpy(&data[len - 32], data + 5, 32); - -/*fprintf(stderr, "sending: %d: %d\n", (unsigned)p->byte1, (int)len);*/ - data[len - 17] ^= p->byte1; - data[len - 18] ^= p->byte2; - - prev_point_ptr = p; - point_idx++; if (point_idx >= p_size) - point_idx = 0; - - return send(fd, data, len, 0); -} - - -static unsigned long timespec_sub_ns(struct timespec *a, - struct timespec *b) -{ - return (a->tv_sec * 1000 * 1000 * 1000 + a->tv_nsec - - (b->tv_sec * 1000 * 1000 * 1000 + b->tv_nsec)); -} - -static -double calc_avg(unsigned long *diffs, unsigned int diffs_size) -{ - double avg = 0; - unsigned int i; - unsigned int start = diffs_size / 20; - unsigned int stop = diffs_size - diffs_size / 20; - - for (i = start; i < stop; i++) - avg += diffs[i]; - - avg /= (stop - start); - - return avg; -} - -static int compar(const void *_a, const void *_b) -{ - unsigned long a, b; + abort(); - a = *((unsigned long *) _a); - b = *((unsigned long *) _b); + p = &test->points[point_idx]; - if (a < b) - return -1; - else if (a == b) - return 0; - else - return 1; -} -static -double calc_median(unsigned long *diffs, unsigned int diffs_size) -{ - double med; - - if (diffs_size % 2 == 1) - med = diffs[diffs_size / 2]; - else { - med = diffs[diffs_size / 2] + diffs[(diffs_size - 1) / 2]; - med /= 2; + if (test->fill != 0xff) { + /* original lucky13 attack */ + memmove(&data[len - 32], data + 5, 32); + data[len - 17] ^= p->byte1; + data[len - 18] ^= p->byte2; + } else { + /* a revised attack which depends on chosen-plaintext */ + assert(len>512); + memmove(data+len-256-32, data+5, 256+32); + data[len - 257] ^= p->byte1; } - return med; + return send(fd, data, len, 0); } -#if 0 -static -unsigned long calc_min(unsigned long *diffs, unsigned int diffs_size) -{ - unsigned long min = 0, i; - unsigned int start = diffs_size / 20; - unsigned int stop = diffs_size - diffs_size / 20; - - - for (i = start; i < stop; i++) { - if (min == 0) - min = diffs[i]; - else if (diffs[i] < min) - min = diffs[i]; - } - return min; -} -static -double calc_var(unsigned long *diffs, unsigned int diffs_size, double avg) +#ifndef USE_RDTSC +static unsigned long timespec_sub_ns(struct timespec *a, + struct timespec *b) { - double sum = 0, d; - unsigned int i; - unsigned int start = diffs_size / 20; - unsigned int stop = diffs_size - diffs_size / 20; - - for (i = start; i < stop; i++) { - d = ((double) diffs[i] - avg); - d *= d; - - sum += d; - } - sum /= diffs_size - 1; - - return sum; + return (a->tv_sec - b->tv_sec) * 1000 * 1000 * 1000 + a->tv_nsec - + b->tv_nsec; } #endif @@ -263,34 +165,35 @@ client(int fd, const char *prio, unsigned int text_size, { int ret; char buffer[MAX_BUF + 1]; - char text[text_size]; - gnutls_certificate_credentials_t x509_cred; + char *text; + gnutls_psk_client_credentials_t pskcred; gnutls_session_t session; - struct timespec start, stop; - static unsigned long taken = 0; static unsigned long measurement; + const gnutls_datum_t key = { (void *) "DEADBEEF", 8 }; const char *err; + unsigned j; + + gnutls_global_init(); - global_init(); + text = malloc(text_size); + assert(text != NULL); setpriority(PRIO_PROCESS, getpid(), -15); - memset(text, 0, text_size); + memset(text, test->fill, text_size); #ifdef DEBUG gnutls_global_set_log_function(client_log_func); gnutls_global_set_log_level(6); #endif - gnutls_certificate_allocate_credentials(&x509_cred); - -#ifdef REHANDSHAKE - restart: -#endif + gnutls_psk_allocate_client_credentials(&pskcred); + gnutls_psk_set_client_credentials(pskcred, "test", &key, + GNUTLS_PSK_KEY_HEX); /* Initialize TLS session */ - gnutls_init(&session, GNUTLS_CLIENT); + assert(gnutls_init(&session, GNUTLS_CLIENT) >= 0); gnutls_session_set_ptr(session, test); cli_session = session; @@ -303,7 +206,7 @@ client(int fd, const char *prio, unsigned int text_size, /* put the anonymous credentials to the current session */ - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + gnutls_credentials_set(session, GNUTLS_CRD_PSK, pskcred); gnutls_transport_set_int(session, fd); /* Perform the TLS handshake @@ -314,8 +217,7 @@ client(int fd, const char *prio, unsigned int text_size, while (ret < 0 && gnutls_error_is_fatal(ret) == 0); if (ret < 0) { - fprintf(stderr, "client: Handshake failed\n"); - gnutls_perror(ret); + fprintf(stderr, "client: Handshake failed: %s\n", gnutls_strerror(ret)); exit(1); } @@ -328,111 +230,84 @@ client(int fd, const char *prio, unsigned int text_size, gnutls_transport_set_push_function(session, push_crippled); -#ifndef REHANDSHAKE - restart: -#endif + restart: do { ret = gnutls_record_send(session, text, sizeof(text)); } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); /* measure peer's processing time */ - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); -#define TLS_RECV -#ifdef TLS_RECV do { ret = gnutls_record_recv(session, buffer, sizeof(buffer)); } while (ret < 0 && (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED)); -#else - do { - ret = recv(fd, buffer, sizeof(buffer), 0); - } while (ret == -1 && errno == EAGAIN); -#endif - if (taken < MAX_MEASUREMENTS(test->npoints) && ret > 0) { - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &stop); - taken++; - measurement = timespec_sub_ns(&stop, &start); - prev_point_ptr->measurements[prev_point_ptr->midx] = - measurement; + if (ret > 0) { + struct point_st *point_ptr = NULL; -/*fprintf(stderr, "(%u,%u): %lu\n", (unsigned) prev_point_ptr->byte1, - (unsigned) prev_point_ptr->byte2, measurements[taken]);*/ - memcpy(&measurement, buffer, sizeof(measurement)); - prev_point_ptr->smeasurements[prev_point_ptr->midx] = - measurement; - prev_point_ptr->midx++; + assert(ret == sizeof(measurement)); - /* read server's measurement */ + point_ptr = &test->points[point_idx]; + point_ptr->taken++; + + if (point_idx == 0) { + printf("%s: measurement: %u / %d\r", test->name, (unsigned)point_ptr->taken+1, MAX_PER_POINT+WARM_UP); + } + + if (point_idx == 0 && point_ptr->midx+1 >= MAX_PER_POINT) { + goto finish; + } + + if (point_ptr->taken >= WARM_UP) { + memcpy(&measurement, buffer, sizeof(measurement)); + if (point_ptr->midx < MAX_PER_POINT) { + point_ptr->smeasurements[point_ptr->midx] = + measurement; + point_ptr->midx++; + point_idx++; + + if (point_idx >= test->npoints) + point_idx = 0; + } + } -#ifdef REHANDSHAKE - gnutls_deinit(session); -#endif goto restart; + } else { + abort(); } -#ifndef TLS_RECV - else if (ret < 0) { - fprintf(stderr, "Error in recv()\n"); - exit(1); - } -#endif + +finish: + fprintf(stderr, "\ntest completed\n"); gnutls_transport_set_push_function(session, push); gnutls_bye(session, GNUTLS_SHUT_WR); { - double avg2, med, savg, smed; unsigned i; FILE *fp = NULL; - if (test->file) - fp = fopen(test->file, "w"); - - if (fp) /* point, avg, median */ - fprintf(fp, - "Delta,TimeAvg,TimeMedian,ServerAvg,ServerMedian\n"); + fp = fopen(test->file, "w"); + assert(fp != NULL); + fprintf(fp, "Delta,"); + for (j = 0; j < MAX_PER_POINT; j++) { + fprintf(fp, "measurement-%u%s", j, j!=(MAX_PER_POINT-1)?",":""); + } + fprintf(fp, "\n"); for (i = 0; i < test->npoints; i++) { - qsort(test->points[i].measurements, - test->points[i].midx, - sizeof(test->points[i].measurements[0]), - compar); - - qsort(test->points[i].smeasurements, - test->points[i].midx, - sizeof(test->points[i].smeasurements[0]), - compar); - - avg2 = - calc_avg(test->points[i].measurements, - test->points[i].midx); - /*var = calc_var( test->points[i].measurements, test->points[i].midx, avg2); */ - med = - calc_median(test->points[i].measurements, - test->points[i].midx); - - savg = - calc_avg(test->points[i].smeasurements, - test->points[i].midx); - /*var = calc_var( test->points[i].measurements, test->points[i].midx, avg2); */ - smed = - calc_median(test->points[i].smeasurements, - test->points[i].midx); - /*min = calc_min( test->points[i].measurements, test->points[i].midx); */ - - if (fp) /* point, avg, median */ - fprintf(fp, "%u,%.2lf,%.2lf,%.2lf,%.2lf\n", - (unsigned) test->points[i].byte1, - avg2, med, savg, smed); - - /*printf("(%u) Avg: %.3f nanosec, Median: %.3f, Variance: %.3f\n", (unsigned)test->points[i].byte1, - avg2, med, var); */ + fprintf(fp, "%u,", (unsigned)test->points[i].byte1); + for (j = 0; j < MAX_PER_POINT; j++) { + fprintf(fp, "%u%s", + (unsigned) test->points[i].smeasurements[j], + (j!=MAX_PER_POINT-1)?",":""); + + } + fprintf(fp, "\n"); } + printf("\n"); - if (fp) - fclose(fp); + fclose(fp); } if (test->desc) @@ -442,48 +317,53 @@ client(int fd, const char *prio, unsigned int text_size, gnutls_deinit(session); - gnutls_certificate_free_credentials(x509_cred); + gnutls_psk_free_client_credentials(pskcred); gnutls_global_deinit(); + free(text); } - +static int +pskfunc(gnutls_session_t session, const char *username, + gnutls_datum_t * key) +{ + key->data = gnutls_malloc(4); + key->data[0] = 0xDE; + key->data[1] = 0xAD; + key->data[2] = 0xBE; + key->data[3] = 0xEF; + key->size = 4; + return 0; +} static void server(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; gnutls_session_t session; - gnutls_certificate_credentials_t x509_cred; + gnutls_psk_server_credentials_t server_pskcred; const char *err; +#ifndef USE_RDTSC struct timespec start, stop; +#else + uint64_t c1, c2; + unsigned int i1; +#endif static unsigned long measurement; setpriority(PRIO_PROCESS, getpid(), -15); - /* this must be called once in the program - */ - global_init(); + gnutls_global_init(); memset(buffer, 0, sizeof(buffer)); #ifdef DEBUG gnutls_global_set_log_function(server_log_func); gnutls_global_set_log_level(6); #endif - - gnutls_certificate_allocate_credentials(&x509_cred); - ret = - gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, - &server_key, - GNUTLS_X509_FMT_PEM); - if (ret < 0) { - fprintf(stderr, "Could not set certificate\n"); - return; - } -#ifdef REHANDSHAKE - restart: -#endif - gnutls_init(&session, GNUTLS_SERVER); + assert(gnutls_psk_allocate_server_credentials(&server_pskcred)>=0); + gnutls_psk_set_server_credentials_function(server_pskcred, + pskfunc); + assert(gnutls_init(&session, GNUTLS_SERVER)>=0); /* avoid calling all the priority functions, since the defaults * are adequate. @@ -491,10 +371,10 @@ static void server(int fd, const char *prio) if ((ret = gnutls_priority_set_direct(session, prio, &err)) < 0) { fprintf(stderr, "Error in priority string %s: %s\n", gnutls_strerror(ret), err); - return; + exit(1); } - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + gnutls_credentials_set(session, GNUTLS_CRD_PSK, server_pskcred); gnutls_transport_set_int(session, fd); do { @@ -512,24 +392,41 @@ static void server(int fd, const char *prio) fprintf(stderr, "server: Handshake has failed (%s)\n\n", gnutls_strerror(ret)); + exit(1); } goto finish; } -#ifndef REHANDSHAKE - restart: +#ifdef TEST_ETM + assert(gnutls_session_etm_status(session)!=0); +#else + assert(gnutls_session_etm_status(session)==0); #endif - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); + restart: + do { + ret = recv(fd, buffer, 1, MSG_PEEK); + } while (ret == -1 && errno == EAGAIN); + +#ifdef USE_RDTSC + c1 = __rdtscp(&i1); +#else + clock_gettime(CLOCK_TO_USE, &start); +#endif do { ret = gnutls_record_recv(session, buffer, sizeof(buffer)); } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &stop); +#ifdef USE_RDTSC + c2 = __rdtscp(&i1); + measurement = c2 - c1; +#else + clock_gettime(CLOCK_TO_USE, &stop); + measurement = timespec_sub_ns(&stop, &start); +#endif if (ret == GNUTLS_E_DECRYPTION_FAILED) { gnutls_session_force_valid(session); - measurement = timespec_sub_ns(&stop, &start); do { ret = gnutls_record_send(session, &measurement, @@ -538,14 +435,14 @@ static void server(int fd, const char *prio) } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); -#ifdef REHANDSHAKE - gnutls_deinit(session); -#endif - if (ret >= 0) + if (ret >= 0) { goto restart; - } else if (ret < 0) - fprintf(stderr, "err: %s\n", gnutls_strerror(ret)); + } + } else if (ret > 0) { + goto restart; + } + assert(ret <= 0); /* do not wait for the peer to close the connection. */ @@ -555,7 +452,7 @@ static void server(int fd, const char *prio) close(fd); gnutls_deinit(session); - gnutls_certificate_free_credentials(x509_cred); + gnutls_psk_free_server_credentials(server_pskcred); gnutls_global_deinit(); } @@ -607,11 +504,9 @@ static void ch_handler(int sig) return; } -static struct point_st all_points[256]; -static struct point_st all_points_one[256]; - - -#define NPOINTS(points) (sizeof(points)/sizeof(points[0])) +#define NPOINTS 256 +static struct point_st all_points[NPOINTS]; +static struct point_st all_points_one[NPOINTS]; /* Test that outputs a graph of the timings * when manipulating the last record byte (pad) @@ -619,10 +514,11 @@ static struct point_st all_points_one[256]; */ static struct test_st test_sha1 = { .points = all_points, - .npoints = NPOINTS(all_points), + .npoints = NPOINTS, .text_size = 18 * 16, .name = "sha1", .file = "out-sha1.txt", + .fill = 0x00, .desc = NULL }; @@ -632,10 +528,31 @@ static struct test_st test_sha1 = { */ static struct test_st test_sha256 = { .points = all_points, - .npoints = NPOINTS(all_points), + .npoints = NPOINTS, .text_size = 17 * 16, .name = "sha256", .file = "out-sha256.txt", + .fill = 0x00, + .desc = NULL +}; + +static struct test_st test_sha256_new = { + .points = all_points, + .npoints = NPOINTS, + .text_size = 1024 * 16, + .name = "sha256-new", + .file = "out-sha256-new.txt", + .fill = 0xff, + .desc = NULL +}; + +static struct test_st test_sha384 = { + .points = all_points, + .npoints = NPOINTS, + .text_size = 33 * 16, + .name = "sha384", + .file = "out-sha384.txt", + .fill = 0x00, .desc = NULL }; @@ -645,10 +562,11 @@ static struct test_st test_sha256 = { */ static struct test_st test_sha1_short = { .points = all_points, - .npoints = NPOINTS(all_points), + .npoints = NPOINTS, .text_size = 16 * 2, .name = "sha1-short", .file = "out-sha1-short.txt", + .fill = 0x00, .desc = NULL }; @@ -658,10 +576,21 @@ static struct test_st test_sha1_short = { */ static struct test_st test_sha256_short = { .points = all_points, - .npoints = NPOINTS(all_points), + .npoints = NPOINTS, .text_size = 16 * 2, .name = "sha256-short", .file = "out-sha256-short.txt", + .fill = 0x00, + .desc = NULL +}; + +static struct test_st test_sha384_short = { + .points = all_points, + .npoints = NPOINTS, + .text_size = 16 * 2, + .name = "sha384-short", + .file = "out-sha384-short.txt", + .fill = 0x00, .desc = NULL }; @@ -674,10 +603,11 @@ static struct test_st test_sha256_short = { */ static struct test_st test_sha1_one = { .points = all_points_one, - .npoints = NPOINTS(all_points_one), + .npoints = NPOINTS, .text_size = 16 * 2, .name = "sha1-one", .file = "out-sha1-one.txt", + .fill = 0x00, .desc = NULL }; @@ -687,6 +617,10 @@ int main(int argc, char **argv) struct test_st *test; const char *hash; char prio[512]; + struct timespec res; + + assert(clock_getres(CLOCK_TO_USE, &res) >= 0); + assert(res.tv_nsec < 100); signal(SIGCHLD, ch_handler); signal(SIGPIPE, SIG_IGN); @@ -695,15 +629,24 @@ int main(int argc, char **argv) if (strcmp(argv[1], "sha1") == 0) { test = &test_sha1; hash = "SHA1"; - } else if (strncmp(argv[1], "sha2", 4) == 0) { - test = &test_sha256; - hash = "SHA256"; } else if (strcmp(argv[1], "sha1-short") == 0) { test = &test_sha1_short; hash = "SHA1"; } else if (strcmp(argv[1], "sha256-short") == 0) { test = &test_sha256_short; hash = "SHA256"; + } else if (strcmp(argv[1], "sha256-new") == 0) { + test = &test_sha256_new; + hash = "SHA256"; + } else if (strcmp(argv[1], "sha256") == 0) { + test = &test_sha256; + hash = "SHA256"; + } else if (strcmp(argv[1], "sha384-short") == 0) { + test = &test_sha384_short; + hash = "SHA384"; + } else if (strcmp(argv[1], "sha384") == 0) { + test = &test_sha384; + hash = "SHA384"; } else if (strcmp(argv[1], "sha1-one") == 0) { test = &test_sha1_one; hash = "SHA1"; @@ -720,20 +663,16 @@ int main(int argc, char **argv) memset(&all_points, 0, sizeof(all_points)); for (i = 0; i < 256; i++) { all_points[i].byte1 = i; - all_points[i].measurements = - malloc(MAX_PER_POINT * - sizeof(all_points[i].measurements[0])); + all_points[i].byte2 = 0; all_points[i].smeasurements = malloc(MAX_PER_POINT * - sizeof(all_points[i].measurements[0])); + sizeof(all_points[i].smeasurements[0])); } memset(&all_points_one, 0, sizeof(all_points_one)); for (i = 0; i < 256; i++) { all_points_one[i].byte1 = i; all_points_one[i].byte2 = 1; - all_points_one[i].measurements = - all_points[i].measurements; all_points_one[i].smeasurements = all_points[i].smeasurements; } @@ -741,7 +680,11 @@ int main(int argc, char **argv) remove(test->file); snprintf(prio, sizeof(prio), - "NONE:+COMP-NULL:+AES-128-CBC:+%s:+RSA:%%COMPAT:+VERS-TLS1.2:+VERS-TLS1.1", +#ifdef TEST_ETM + "NONE:+COMP-NULL:+AES-128-CBC:+AES-256-CBC:+%s:+PSK:+VERS-TLS1.2:+VERS-TLS1.1:+SIGN-ALL:+CURVE-ALL", +#else + "NONE:+COMP-NULL:+AES-128-CBC:+AES-256-CBC:+%s:+PSK:%%NO_ETM:+VERS-TLS1.2:+VERS-TLS1.1:+SIGN-ALL:+CURVE-ALL", +#endif hash); printf("\nAES-%s (calculating different padding timings)\n", hash); @@ -749,57 +692,6 @@ int main(int argc, char **argv) signal(SIGCHLD, SIG_IGN); -#ifdef PDF - snprintf(prio, sizeof(prio), - "R -e 'pdf(file=\"%s-timings-avg.pdf\");z=read.csv(\"%s\");" - "plot(z$Delta,z$TimeAvg,xlab=\"Delta\",ylab=\"Average timings (ns)\");" - "dev.off();'" test->name, test->file); - system(prio); - - snprintf(prio, sizeof(prio), - "R -e 'pdf(file=\"%s-timings-med.pdf\");z=read.csv(\"%s\");" - "plot(z$Delta,z$TimeMedian,xlab=\"Delta\",ylab=\"Median timings (ns)\");" - "dev.off();'"; test->name, test->file); - system(prio); - - snprintf(prio, sizeof(prio), - "R -e 'pdf(file=\"%s-server-timings-avg.pdf\");z=read.csv(\"%s\");" - "plot(z$Delta,z$ServerAvg,xlab=\"Delta\",ylab=\"Average timings (ns)\");" - "dev.off();'" test->name, test->file); - system(prio); - - snprintf(prio, sizeof(prio), - "R -e 'pdf(file=\"%s-server-timings-med.pdf\");z=read.csv(\"%s\");" - "plot(z$Delta,z$ServerMedian,xlab=\"Delta\",ylab=\"Median timings (ns)\");" - "dev.off();'"; test->name, test->file); - system(prio); -#else - snprintf(prio, sizeof(prio), - "R -e 'z=read.csv(\"%s\");png(filename = \"%s-timings-avg.png\",width=1024,height=1024,units=\"px\"," - "bg=\"white\");plot(z$Delta,z$TimeAvg,xlab=\"Delta\",ylab=\"Average timings (ns)\");dev.off();'", - test->file, test->name); - system(prio); - - snprintf(prio, sizeof(prio), - "R -e 'z=read.csv(\"%s\");" - "png(filename = \"%s-timings-med.png\",width=1024,height=1024,units=\"px\"," - "bg=\"white\");plot(z$Delta,z$TimeMedian,xlab=\"Delta\",ylab=\"Median timings (ns)\");dev.off();'", - test->file, test->name); - system(prio); - - snprintf(prio, sizeof(prio), - "R -e 'z=read.csv(\"%s\");png(filename = \"%s-server-timings-avg.png\",width=1024,height=1024,units=\"px\"," - "bg=\"white\");plot(z$Delta,z$ServerAvg,xlab=\"Delta\",ylab=\"Average timings (ns)\");dev.off();'", - test->file, test->name); - system(prio); - - snprintf(prio, sizeof(prio), - "R -e 'z=read.csv(\"%s\");" - "png(filename = \"%s-server-timings-med.png\",width=1024,height=1024,units=\"px\"," - "bg=\"white\");plot(z$Delta,z$ServerMedian,xlab=\"Delta\",ylab=\"Median timings (ns)\");dev.off();'", - test->file, test->name); - system(prio); -#endif return 0; } diff --git a/tests/suite/multi-ticket-reception.sh b/tests/suite/multi-ticket-reception.sh new file mode 100755 index 0000000000..d84367703c --- /dev/null +++ b/tests/suite/multi-ticket-reception.sh @@ -0,0 +1,99 @@ +#!/bin/sh + +# Copyright (C) 2019 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +TLSPY_SERV="${srcdir}/tls-fuzzer/tlslite-ng/scripts/tls.py" +PYPATH="${srcdir}/tls-fuzzer/tlsfuzzer/" +CLI="${CLI:-../../src/gnutls-cli${EXEEXT}}" +unset RETCODE + +if ! test -x "${TLSPY_SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" +fi + +. "${srcdir}/../scripts/common.sh" + +KEY1=${srcdir}/tls-fuzzer/tlslite-ng/tests/serverX509Key.pem +CERT1=${srcdir}/tls-fuzzer/tlsfuzzer/tests/serverX509Cert.pem + +#create links necessary for tlslite to function +test -L "${srcdir}/tls-fuzzer/tlsfuzzer/ecdsa" || \ + ln -s ../python-ecdsa/src/ecdsa "${srcdir}/tls-fuzzer/tlsfuzzer/" +test -L "${srcdir}/tls-fuzzer/tlsfuzzer/tlslite" || \ + ln -s ../tlslite-ng/tlslite "${srcdir}/tls-fuzzer/tlsfuzzer/" + +echo "Checking whether receiving 1 ticket succeeds (sanity)" + +eval "${GETPORT}" +PYTHONPATH="${PYPATH}" ${TLSPY_SERV} server --tickets 1 -k ${KEY1} -c ${CERT1} 127.0.0.1:${PORT} & +PID=$! +wait_server ${PID} + +${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-VERS-ALL:+VERS-TLS1.3 --insecure -#include -#include -#include -#include - -#include "utils.h" - -/* This program will load certificates from CERT_DIR and try to print - * them if they can be imported. The purpose of the tool is to increase - * coverage in error paths. - */ - -#define CERT_DIR "ocsp-resp-coverage" - -static int getnextcert(DIR **dirp, gnutls_datum_t *der) -{ - struct dirent *d; - char path[256]; - char cert_dir[256]; - const char *src; - int ret; - - src = getenv("srcdir"); - if (src == NULL) - src = "."; - - snprintf(cert_dir, sizeof(cert_dir), "%s/%s", src, CERT_DIR); - - if (*dirp == NULL) { - *dirp = opendir(cert_dir); - if (*dirp == NULL) - return -1; - } - - do { - d = readdir(*dirp); - if (d != NULL -#ifdef _DIRENT_HAVE_D_TYPE - && d->d_type == DT_REG -#endif - ) { - snprintf(path, sizeof(path), "%s/%s", cert_dir, d->d_name); - - success("Loading %s\n", path); - ret = gnutls_load_file(path, der); - if (ret < 0) { - return -1; - } - - return 0; - } - } while(d != NULL); - - closedir(*dirp); - return -1; /* finished */ -} - -void doit(void) -{ - int ret; - gnutls_ocsp_resp_t resp; - gnutls_datum_t der; - DIR *dirp = NULL; - - ret = global_init(); - if (ret < 0) - fail("init %d\n", ret); - - while (getnextcert(&dirp, &der)==0) { - ret = gnutls_ocsp_resp_init(&resp); - if (ret < 0) - fail("crt_init %d\n", ret); - - ret = gnutls_ocsp_resp_import(resp, &der); - - if (ret == 0) { - /* attempt to fully decode */ - gnutls_datum_t out; - ret = gnutls_ocsp_resp_print(resp, GNUTLS_OCSP_PRINT_FULL, &out); - if (ret < 0) { - fail("print: %s\n", gnutls_strerror(ret)); - } - gnutls_free(out.data); - } - - gnutls_ocsp_resp_deinit(resp); - gnutls_free(der.data); - der.data = NULL; - der.size = 0; - } - - gnutls_global_deinit(); -} diff --git a/tests/suite/ocsp-resp-coverage/id:000005,src:000000,op:havoc,rep:4,+cov b/tests/suite/ocsp-resp-coverage/id:000005,src:000000,op:havoc,rep:4,+cov deleted file mode 100644 index 3facc37256..0000000000 --- a/tests/suite/ocsp-resp-coverage/id:000005,src:000000,op:havoc,rep:4,+cov +++ /dev/null @@ -1 +0,0 @@ -0 \ No newline at end of file diff --git a/tests/suite/ocsp-resp-coverage/id:000009,src:000000,op:flip1,pos:30,+cov b/tests/suite/ocsp-resp-coverage/id:000009,src:000000,op:flip1,pos:30,+cov deleted file mode 100644 index 35bcb0c5e8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000009,src:000000,op:flip1,pos:30,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000011,src:000000,op:havoc,rep:8,+cov b/tests/suite/ocsp-resp-coverage/id:000011,src:000000,op:havoc,rep:8,+cov deleted file mode 100644 index 4d14eb9302..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000011,src:000000,op:havoc,rep:8,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000019,src:000000,op:havoc,rep:4,+cov b/tests/suite/ocsp-resp-coverage/id:000019,src:000000,op:havoc,rep:4,+cov deleted file mode 100644 index 200ba72443..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000019,src:000000,op:havoc,rep:4,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000037,src:000000,op:havoc,rep:8,+cov b/tests/suite/ocsp-resp-coverage/id:000037,src:000000,op:havoc,rep:8,+cov deleted file mode 100644 index 40ed604355..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000037,src:000000,op:havoc,rep:8,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000060,src:000000,op:havoc,rep:2,+cov b/tests/suite/ocsp-resp-coverage/id:000060,src:000000,op:havoc,rep:2,+cov deleted file mode 100644 index 9d991947d1..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000060,src:000000,op:havoc,rep:2,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000072,src:000000,op:havoc,rep:4,+cov b/tests/suite/ocsp-resp-coverage/id:000072,src:000000,op:havoc,rep:4,+cov deleted file mode 100644 index 3e1dcba63f..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000072,src:000000,op:havoc,rep:4,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000077,src:000000,op:havoc,rep:2 b/tests/suite/ocsp-resp-coverage/id:000077,src:000000,op:havoc,rep:2 deleted file mode 100644 index fb728e9059..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000077,src:000000,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000081,src:000000,op:havoc,rep:2 b/tests/suite/ocsp-resp-coverage/id:000081,src:000000,op:havoc,rep:2 deleted file mode 100644 index 0226901bb9..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000081,src:000000,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000086,src:000000,op:havoc,rep:2,+cov b/tests/suite/ocsp-resp-coverage/id:000086,src:000000,op:havoc,rep:2,+cov deleted file mode 100644 index 46def5fda1..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000086,src:000000,op:havoc,rep:2,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000091,src:000000,op:havoc,rep:4 b/tests/suite/ocsp-resp-coverage/id:000091,src:000000,op:havoc,rep:4 deleted file mode 100644 index 8cd81a2b59..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000091,src:000000,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000108,sync:fuzzer03,src:000087,+cov b/tests/suite/ocsp-resp-coverage/id:000108,sync:fuzzer03,src:000087,+cov deleted file mode 100644 index 8ae731ecaf..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000108,sync:fuzzer03,src:000087,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000109,sync:fuzzer03,src:000085 b/tests/suite/ocsp-resp-coverage/id:000109,sync:fuzzer03,src:000085 deleted file mode 100644 index f5d926269d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000109,sync:fuzzer03,src:000085 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000110,src:000000+000025,op:splice,rep:4 b/tests/suite/ocsp-resp-coverage/id:000110,src:000000+000025,op:splice,rep:4 deleted file mode 100644 index f257e2bf22..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000110,src:000000+000025,op:splice,rep:4 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000110,src:000000+000054,op:splice,rep:2 b/tests/suite/ocsp-resp-coverage/id:000110,src:000000+000054,op:splice,rep:2 deleted file mode 100644 index 4d0e8160e1..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000110,src:000000+000054,op:splice,rep:2 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000121,sync:fuzzer03,src:000075 b/tests/suite/ocsp-resp-coverage/id:000121,sync:fuzzer03,src:000075 deleted file mode 100644 index 03e6565f68..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000121,sync:fuzzer03,src:000075 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000123,src:000000,op:int8,pos:68,val:+32,+cov b/tests/suite/ocsp-resp-coverage/id:000123,src:000000,op:int8,pos:68,val:+32,+cov deleted file mode 100644 index 4f76637900..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000123,src:000000,op:int8,pos:68,val:+32,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000124,src:000000,op:int8,pos:631,val:+0,+cov b/tests/suite/ocsp-resp-coverage/id:000124,src:000000,op:int8,pos:631,val:+0,+cov deleted file mode 100644 index bb0646829e..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000124,src:000000,op:int8,pos:631,val:+0,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000127,sync:fuzzer07,src:000046,+cov b/tests/suite/ocsp-resp-coverage/id:000127,sync:fuzzer07,src:000046,+cov deleted file mode 100644 index 5bcef4daf2..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000127,sync:fuzzer07,src:000046,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000128,sync:fuzzer03,src:000086 b/tests/suite/ocsp-resp-coverage/id:000128,sync:fuzzer03,src:000086 deleted file mode 100644 index ff99522b1d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000128,sync:fuzzer03,src:000086 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000130,src:000000,op:havoc,rep:8 b/tests/suite/ocsp-resp-coverage/id:000130,src:000000,op:havoc,rep:8 deleted file mode 100644 index a502e02737..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000130,src:000000,op:havoc,rep:8 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000131,sync:fuzzer03,src:000083 b/tests/suite/ocsp-resp-coverage/id:000131,sync:fuzzer03,src:000083 deleted file mode 100644 index 203a032c78..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000131,sync:fuzzer03,src:000083 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000132,sync:fuzzer07,src:000065,+cov b/tests/suite/ocsp-resp-coverage/id:000132,sync:fuzzer07,src:000065,+cov deleted file mode 100644 index 78b87b10a8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000132,sync:fuzzer07,src:000065,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000135,src:000000,op:havoc,rep:4 b/tests/suite/ocsp-resp-coverage/id:000135,src:000000,op:havoc,rep:4 deleted file mode 100644 index 4a14ec3121..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000135,src:000000,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000135,sync:fuzzer03,src:000096,+cov b/tests/suite/ocsp-resp-coverage/id:000135,sync:fuzzer03,src:000096,+cov deleted file mode 100644 index cf0beb09c8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000135,sync:fuzzer03,src:000096,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000136,src:000000,op:havoc,rep:4 b/tests/suite/ocsp-resp-coverage/id:000136,src:000000,op:havoc,rep:4 deleted file mode 100644 index 0cd2dccc9d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000136,src:000000,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000136,sync:fuzzer07,src:000050 b/tests/suite/ocsp-resp-coverage/id:000136,sync:fuzzer07,src:000050 deleted file mode 100644 index c5c2cc5bac..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000136,sync:fuzzer07,src:000050 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000136,sync:fuzzer07,src:000098 b/tests/suite/ocsp-resp-coverage/id:000136,sync:fuzzer07,src:000098 deleted file mode 100644 index 957c09b7ea..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000136,sync:fuzzer07,src:000098 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000139,sync:fuzzer07,src:000099 b/tests/suite/ocsp-resp-coverage/id:000139,sync:fuzzer07,src:000099 deleted file mode 100644 index 3a0f53ad4c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000139,sync:fuzzer07,src:000099 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000147,sync:fuzzer03,src:000064,+cov b/tests/suite/ocsp-resp-coverage/id:000147,sync:fuzzer03,src:000064,+cov deleted file mode 100644 index d19c76c980..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000147,sync:fuzzer03,src:000064,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000149,sync:fuzzer03,src:000120 b/tests/suite/ocsp-resp-coverage/id:000149,sync:fuzzer03,src:000120 deleted file mode 100644 index 96ff5c881d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000149,sync:fuzzer03,src:000120 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000149,sync:fuzzer05,src:000139 b/tests/suite/ocsp-resp-coverage/id:000149,sync:fuzzer05,src:000139 deleted file mode 100644 index 8a3ebea28d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000149,sync:fuzzer05,src:000139 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000151,sync:fuzzer01,src:000104 b/tests/suite/ocsp-resp-coverage/id:000151,sync:fuzzer01,src:000104 deleted file mode 100644 index ec64b12e83..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000151,sync:fuzzer01,src:000104 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000154,sync:fuzzer03,src:000097,+cov b/tests/suite/ocsp-resp-coverage/id:000154,sync:fuzzer03,src:000097,+cov deleted file mode 100644 index 74a09b9857..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000154,sync:fuzzer03,src:000097,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000154,sync:fuzzer03,src:000106 b/tests/suite/ocsp-resp-coverage/id:000154,sync:fuzzer03,src:000106 deleted file mode 100644 index 14955cc333..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000154,sync:fuzzer03,src:000106 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000155,sync:fuzzer03,src:000088 b/tests/suite/ocsp-resp-coverage/id:000155,sync:fuzzer03,src:000088 deleted file mode 100644 index 90acb9c0d6..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000155,sync:fuzzer03,src:000088 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000161,sync:fuzzer07,src:000147,+cov b/tests/suite/ocsp-resp-coverage/id:000161,sync:fuzzer07,src:000147,+cov deleted file mode 100644 index 565609418d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000161,sync:fuzzer07,src:000147,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000163,sync:fuzzer03,src:000148 b/tests/suite/ocsp-resp-coverage/id:000163,sync:fuzzer03,src:000148 deleted file mode 100644 index 88426b5feb..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000163,sync:fuzzer03,src:000148 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000169,sync:fuzzer03,src:000067 b/tests/suite/ocsp-resp-coverage/id:000169,sync:fuzzer03,src:000067 deleted file mode 100644 index 5242b78761..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000169,sync:fuzzer03,src:000067 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000172,sync:fuzzer03,src:000090,+cov b/tests/suite/ocsp-resp-coverage/id:000172,sync:fuzzer03,src:000090,+cov deleted file mode 100644 index 66ffa252eb..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000172,sync:fuzzer03,src:000090,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000173,sync:fuzzer03,src:000125,+cov b/tests/suite/ocsp-resp-coverage/id:000173,sync:fuzzer03,src:000125,+cov deleted file mode 100644 index b3cbda061c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000173,sync:fuzzer03,src:000125,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000174,sync:fuzzer03,src:000077 b/tests/suite/ocsp-resp-coverage/id:000174,sync:fuzzer03,src:000077 deleted file mode 100644 index 3800be6169..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000174,sync:fuzzer03,src:000077 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000179,sync:fuzzer07,src:000160 b/tests/suite/ocsp-resp-coverage/id:000179,sync:fuzzer07,src:000160 deleted file mode 100644 index 5b8c5c6715..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000179,sync:fuzzer07,src:000160 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000179,sync:fuzzer07,src:000170 b/tests/suite/ocsp-resp-coverage/id:000179,sync:fuzzer07,src:000170 deleted file mode 100644 index e4d1053464..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000179,sync:fuzzer07,src:000170 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000183,sync:fuzzer07,src:000179,+cov b/tests/suite/ocsp-resp-coverage/id:000183,sync:fuzzer07,src:000179,+cov deleted file mode 100644 index 787bba6117..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000183,sync:fuzzer07,src:000179,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000187,sync:fuzzer07,src:000136,+cov b/tests/suite/ocsp-resp-coverage/id:000187,sync:fuzzer07,src:000136,+cov deleted file mode 100644 index c7230a3546..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000187,sync:fuzzer07,src:000136,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000196,src:000001,op:havoc,rep:2 b/tests/suite/ocsp-resp-coverage/id:000196,src:000001,op:havoc,rep:2 deleted file mode 100644 index 7d1e3bf7db..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000196,src:000001,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000196,src:000001,op:havoc,rep:8,+cov b/tests/suite/ocsp-resp-coverage/id:000196,src:000001,op:havoc,rep:8,+cov deleted file mode 100644 index 95df2fe878..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000196,src:000001,op:havoc,rep:8,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000198,sync:fuzzer07,src:000092 b/tests/suite/ocsp-resp-coverage/id:000198,sync:fuzzer07,src:000092 deleted file mode 100644 index d801d1ed1a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000198,sync:fuzzer07,src:000092 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000199,sync:fuzzer07,src:000077,+cov b/tests/suite/ocsp-resp-coverage/id:000199,sync:fuzzer07,src:000077,+cov deleted file mode 100644 index f693d3935a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000199,sync:fuzzer07,src:000077,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000213,sync:fuzzer03,src:000093 b/tests/suite/ocsp-resp-coverage/id:000213,sync:fuzzer03,src:000093 deleted file mode 100644 index 889fcf7d10..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000213,sync:fuzzer03,src:000093 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000217,sync:fuzzer03,src:000123 b/tests/suite/ocsp-resp-coverage/id:000217,sync:fuzzer03,src:000123 deleted file mode 100644 index 951c554b00..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000217,sync:fuzzer03,src:000123 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000225,sync:fuzzer03,src:000098 b/tests/suite/ocsp-resp-coverage/id:000225,sync:fuzzer03,src:000098 deleted file mode 100644 index 000e63e6d0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000225,sync:fuzzer03,src:000098 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000231,sync:fuzzer03,src:000198,+cov b/tests/suite/ocsp-resp-coverage/id:000231,sync:fuzzer03,src:000198,+cov deleted file mode 100644 index d33e9458fc..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000231,sync:fuzzer03,src:000198,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000252,sync:fuzzer03,src:000138 b/tests/suite/ocsp-resp-coverage/id:000252,sync:fuzzer03,src:000138 deleted file mode 100644 index 41d4f172de..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000252,sync:fuzzer03,src:000138 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000252,sync:fuzzer03,src:000219 b/tests/suite/ocsp-resp-coverage/id:000252,sync:fuzzer03,src:000219 deleted file mode 100644 index 091ae269af..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000252,sync:fuzzer03,src:000219 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000258,src:000003,op:havoc,rep:2 b/tests/suite/ocsp-resp-coverage/id:000258,src:000003,op:havoc,rep:2 deleted file mode 100644 index 00baefff7b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000258,src:000003,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000261,sync:fuzzer03,src:000200 b/tests/suite/ocsp-resp-coverage/id:000261,sync:fuzzer03,src:000200 deleted file mode 100644 index 68340381a7..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000261,sync:fuzzer03,src:000200 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000265,sync:fuzzer03,src:000234 b/tests/suite/ocsp-resp-coverage/id:000265,sync:fuzzer03,src:000234 deleted file mode 100644 index 580ce1dfb9..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000265,sync:fuzzer03,src:000234 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000267,sync:fuzzer03,src:000038 b/tests/suite/ocsp-resp-coverage/id:000267,sync:fuzzer03,src:000038 deleted file mode 100644 index 7ee0b5876c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000267,sync:fuzzer03,src:000038 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000268,src:000005,op:havoc,rep:2,+cov b/tests/suite/ocsp-resp-coverage/id:000268,src:000005,op:havoc,rep:2,+cov deleted file mode 100644 index 0a3f429f5d..0000000000 --- a/tests/suite/ocsp-resp-coverage/id:000268,src:000005,op:havoc,rep:2,+cov +++ /dev/null @@ -1 +0,0 @@ -0 \ No newline at end of file diff --git a/tests/suite/ocsp-resp-coverage/id:000269,sync:fuzzer03,src:000079 b/tests/suite/ocsp-resp-coverage/id:000269,sync:fuzzer03,src:000079 deleted file mode 100644 index 763c590c1d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000269,sync:fuzzer03,src:000079 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000269,sync:fuzzer03,src:000261 b/tests/suite/ocsp-resp-coverage/id:000269,sync:fuzzer03,src:000261 deleted file mode 100644 index 8fafb59007..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000269,sync:fuzzer03,src:000261 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000276,sync:fuzzer03,src:000238 b/tests/suite/ocsp-resp-coverage/id:000276,sync:fuzzer03,src:000238 deleted file mode 100644 index 174e341d7a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000276,sync:fuzzer03,src:000238 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000280,sync:fuzzer03,src:000214 b/tests/suite/ocsp-resp-coverage/id:000280,sync:fuzzer03,src:000214 deleted file mode 100644 index 3a644fc8d0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000280,sync:fuzzer03,src:000214 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000286,sync:fuzzer03,src:000108 b/tests/suite/ocsp-resp-coverage/id:000286,sync:fuzzer03,src:000108 deleted file mode 100644 index 29708aef71..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000286,sync:fuzzer03,src:000108 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000290,sync:fuzzer03,src:000265 b/tests/suite/ocsp-resp-coverage/id:000290,sync:fuzzer03,src:000265 deleted file mode 100644 index eba4d5aa1a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000290,sync:fuzzer03,src:000265 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000292,sync:fuzzer07,src:000250,+cov b/tests/suite/ocsp-resp-coverage/id:000292,sync:fuzzer07,src:000250,+cov deleted file mode 100644 index f2aca45007..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000292,sync:fuzzer07,src:000250,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000293,sync:fuzzer03,src:000243 b/tests/suite/ocsp-resp-coverage/id:000293,sync:fuzzer03,src:000243 deleted file mode 100644 index 9bc5afc86a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000293,sync:fuzzer03,src:000243 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000294,sync:fuzzer03,src:000275 b/tests/suite/ocsp-resp-coverage/id:000294,sync:fuzzer03,src:000275 deleted file mode 100644 index caa3b02ea9..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000294,sync:fuzzer03,src:000275 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000294,sync:fuzzer03,src:000287 b/tests/suite/ocsp-resp-coverage/id:000294,sync:fuzzer03,src:000287 deleted file mode 100644 index 50875b9294..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000294,sync:fuzzer03,src:000287 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000294,sync:fuzzer07,src:000258 b/tests/suite/ocsp-resp-coverage/id:000294,sync:fuzzer07,src:000258 deleted file mode 100644 index 37b64eebd1..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000294,sync:fuzzer07,src:000258 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000299,sync:fuzzer03,src:000293 b/tests/suite/ocsp-resp-coverage/id:000299,sync:fuzzer03,src:000293 deleted file mode 100644 index 976caaa16b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000299,sync:fuzzer03,src:000293 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000300,sync:fuzzer05,src:000199 b/tests/suite/ocsp-resp-coverage/id:000300,sync:fuzzer05,src:000199 deleted file mode 100644 index 3d307002a5..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000300,sync:fuzzer05,src:000199 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000305,sync:fuzzer08,src:000232 b/tests/suite/ocsp-resp-coverage/id:000305,sync:fuzzer08,src:000232 deleted file mode 100644 index 4cf19cabb7..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000305,sync:fuzzer08,src:000232 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000308,sync:fuzzer02,src:000246 b/tests/suite/ocsp-resp-coverage/id:000308,sync:fuzzer02,src:000246 deleted file mode 100644 index 1020e37a8e..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000308,sync:fuzzer02,src:000246 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000308,sync:fuzzer03,src:000199,+cov b/tests/suite/ocsp-resp-coverage/id:000308,sync:fuzzer03,src:000199,+cov deleted file mode 100644 index d77c869f17..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000308,sync:fuzzer03,src:000199,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000309,sync:fuzzer03,src:000285 b/tests/suite/ocsp-resp-coverage/id:000309,sync:fuzzer03,src:000285 deleted file mode 100644 index 076456a5db..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000309,sync:fuzzer03,src:000285 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000311,sync:fuzzer03,src:000228 b/tests/suite/ocsp-resp-coverage/id:000311,sync:fuzzer03,src:000228 deleted file mode 100644 index acf42176f0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000311,sync:fuzzer03,src:000228 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000312,sync:fuzzer02,src:000250 b/tests/suite/ocsp-resp-coverage/id:000312,sync:fuzzer02,src:000250 deleted file mode 100644 index e5793ae480..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000312,sync:fuzzer02,src:000250 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000312,sync:fuzzer03,src:000263 b/tests/suite/ocsp-resp-coverage/id:000312,sync:fuzzer03,src:000263 deleted file mode 100644 index 4a3eb71717..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000312,sync:fuzzer03,src:000263 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000313,sync:fuzzer03,src:000186,+cov b/tests/suite/ocsp-resp-coverage/id:000313,sync:fuzzer03,src:000186,+cov deleted file mode 100644 index 57c92b4602..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000313,sync:fuzzer03,src:000186,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000313,sync:fuzzer04,src:000292 b/tests/suite/ocsp-resp-coverage/id:000313,sync:fuzzer04,src:000292 deleted file mode 100644 index 5ca8c62f41..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000313,sync:fuzzer04,src:000292 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000315,sync:fuzzer07,src:000314 b/tests/suite/ocsp-resp-coverage/id:000315,sync:fuzzer07,src:000314 deleted file mode 100644 index dbb8247704..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000315,sync:fuzzer07,src:000314 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000318,sync:fuzzer03,src:000308,+cov b/tests/suite/ocsp-resp-coverage/id:000318,sync:fuzzer03,src:000308,+cov deleted file mode 100644 index 0703cfcd4a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000318,sync:fuzzer03,src:000308,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000318,sync:fuzzer07,src:000315 b/tests/suite/ocsp-resp-coverage/id:000318,sync:fuzzer07,src:000315 deleted file mode 100644 index e45a3075af..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000318,sync:fuzzer07,src:000315 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000319,sync:fuzzer03,src:000280 b/tests/suite/ocsp-resp-coverage/id:000319,sync:fuzzer03,src:000280 deleted file mode 100644 index 1353b3cae1..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000319,sync:fuzzer03,src:000280 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000322,sync:fuzzer08,src:000257 b/tests/suite/ocsp-resp-coverage/id:000322,sync:fuzzer08,src:000257 deleted file mode 100644 index 92636eefd9..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000322,sync:fuzzer08,src:000257 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000324,sync:fuzzer03,src:000245,+cov b/tests/suite/ocsp-resp-coverage/id:000324,sync:fuzzer03,src:000245,+cov deleted file mode 100644 index f98af752f6..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000324,sync:fuzzer03,src:000245,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000325,sync:fuzzer03,src:000264,+cov b/tests/suite/ocsp-resp-coverage/id:000325,sync:fuzzer03,src:000264,+cov deleted file mode 100644 index 8ef48cb40c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000325,sync:fuzzer03,src:000264,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000327,sync:fuzzer03,src:000221 b/tests/suite/ocsp-resp-coverage/id:000327,sync:fuzzer03,src:000221 deleted file mode 100644 index 11df3d309d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000327,sync:fuzzer03,src:000221 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000328,sync:fuzzer03,src:000203 b/tests/suite/ocsp-resp-coverage/id:000328,sync:fuzzer03,src:000203 deleted file mode 100644 index f88da75b4a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000328,sync:fuzzer03,src:000203 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000330,sync:fuzzer03,src:000303,+cov b/tests/suite/ocsp-resp-coverage/id:000330,sync:fuzzer03,src:000303,+cov deleted file mode 100644 index 40da3f1c02..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000330,sync:fuzzer03,src:000303,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000330,sync:fuzzer03,src:000325 b/tests/suite/ocsp-resp-coverage/id:000330,sync:fuzzer03,src:000325 deleted file mode 100644 index 2ada477d82..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000330,sync:fuzzer03,src:000325 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000332,sync:fuzzer03,src:000276,+cov b/tests/suite/ocsp-resp-coverage/id:000332,sync:fuzzer03,src:000276,+cov deleted file mode 100644 index bd2febf497..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000332,sync:fuzzer03,src:000276,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000333,sync:fuzzer03,src:000292,+cov b/tests/suite/ocsp-resp-coverage/id:000333,sync:fuzzer03,src:000292,+cov deleted file mode 100644 index b5834a0ca4..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000333,sync:fuzzer03,src:000292,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000334,sync:fuzzer03,src:000301,+cov b/tests/suite/ocsp-resp-coverage/id:000334,sync:fuzzer03,src:000301,+cov deleted file mode 100644 index 7ad815d154..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000334,sync:fuzzer03,src:000301,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000337,sync:fuzzer03,src:000324 b/tests/suite/ocsp-resp-coverage/id:000337,sync:fuzzer03,src:000324 deleted file mode 100644 index 927be1820d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000337,sync:fuzzer03,src:000324 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000338,sync:fuzzer03,src:000244,+cov b/tests/suite/ocsp-resp-coverage/id:000338,sync:fuzzer03,src:000244,+cov deleted file mode 100644 index d2e07e4339..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000338,sync:fuzzer03,src:000244,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000340,sync:fuzzer07,src:000317,+cov b/tests/suite/ocsp-resp-coverage/id:000340,sync:fuzzer07,src:000317,+cov deleted file mode 100644 index 6d5e89e05b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000340,sync:fuzzer07,src:000317,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000343,sync:fuzzer08,src:000339 b/tests/suite/ocsp-resp-coverage/id:000343,sync:fuzzer08,src:000339 deleted file mode 100644 index 64b6c23aea..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000343,sync:fuzzer08,src:000339 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000347,sync:fuzzer03,src:000337 b/tests/suite/ocsp-resp-coverage/id:000347,sync:fuzzer03,src:000337 deleted file mode 100644 index a45d7c561c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000347,sync:fuzzer03,src:000337 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000349,sync:fuzzer08,src:000346 b/tests/suite/ocsp-resp-coverage/id:000349,sync:fuzzer08,src:000346 deleted file mode 100644 index f12f1656f0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000349,sync:fuzzer08,src:000346 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000350,sync:fuzzer08,src:000347 b/tests/suite/ocsp-resp-coverage/id:000350,sync:fuzzer08,src:000347 deleted file mode 100644 index 0a5ca3a795..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000350,sync:fuzzer08,src:000347 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000351,sync:fuzzer08,src:000345 b/tests/suite/ocsp-resp-coverage/id:000351,sync:fuzzer08,src:000345 deleted file mode 100644 index 00cfe1f6d0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000351,sync:fuzzer08,src:000345 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000353,sync:fuzzer03,src:000341 b/tests/suite/ocsp-resp-coverage/id:000353,sync:fuzzer03,src:000341 deleted file mode 100644 index ecfe248c2d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000353,sync:fuzzer03,src:000341 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000357,sync:fuzzer03,src:000343,+cov b/tests/suite/ocsp-resp-coverage/id:000357,sync:fuzzer03,src:000343,+cov deleted file mode 100644 index 513773c973..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000357,sync:fuzzer03,src:000343,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000358,sync:fuzzer03,src:000339 b/tests/suite/ocsp-resp-coverage/id:000358,sync:fuzzer03,src:000339 deleted file mode 100644 index 78a9a06eb5..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000358,sync:fuzzer03,src:000339 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000358,sync:fuzzer03,src:000349,+cov b/tests/suite/ocsp-resp-coverage/id:000358,sync:fuzzer03,src:000349,+cov deleted file mode 100644 index b0927f47b5..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000358,sync:fuzzer03,src:000349,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000360,sync:fuzzer03,src:000357 b/tests/suite/ocsp-resp-coverage/id:000360,sync:fuzzer03,src:000357 deleted file mode 100644 index 36e2a71463..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000360,sync:fuzzer03,src:000357 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000362,sync:fuzzer03,src:000347 b/tests/suite/ocsp-resp-coverage/id:000362,sync:fuzzer03,src:000347 deleted file mode 100644 index 8d38bd139f..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000362,sync:fuzzer03,src:000347 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000363,sync:fuzzer03,src:000340 b/tests/suite/ocsp-resp-coverage/id:000363,sync:fuzzer03,src:000340 deleted file mode 100644 index 43cf8105c0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000363,sync:fuzzer03,src:000340 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000365,sync:fuzzer06,src:000349,+cov b/tests/suite/ocsp-resp-coverage/id:000365,sync:fuzzer06,src:000349,+cov deleted file mode 100644 index 92cf2addc2..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000365,sync:fuzzer06,src:000349,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000366,sync:fuzzer03,src:000338 b/tests/suite/ocsp-resp-coverage/id:000366,sync:fuzzer03,src:000338 deleted file mode 100644 index 2ee91c1682..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000366,sync:fuzzer03,src:000338 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000366,sync:fuzzer06,src:000347,+cov b/tests/suite/ocsp-resp-coverage/id:000366,sync:fuzzer06,src:000347,+cov deleted file mode 100644 index bb71e9e8da..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000366,sync:fuzzer06,src:000347,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000368,sync:fuzzer07,src:000357,+cov b/tests/suite/ocsp-resp-coverage/id:000368,sync:fuzzer07,src:000357,+cov deleted file mode 100644 index 2df89fd5d4..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000368,sync:fuzzer07,src:000357,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000369,sync:fuzzer03,src:000342 b/tests/suite/ocsp-resp-coverage/id:000369,sync:fuzzer03,src:000342 deleted file mode 100644 index e4e831b6e6..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000369,sync:fuzzer03,src:000342 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000369,sync:fuzzer03,src:000354,+cov b/tests/suite/ocsp-resp-coverage/id:000369,sync:fuzzer03,src:000354,+cov deleted file mode 100644 index 8453e38557..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000369,sync:fuzzer03,src:000354,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000370,sync:fuzzer03,src:000360 b/tests/suite/ocsp-resp-coverage/id:000370,sync:fuzzer03,src:000360 deleted file mode 100644 index fdea20c4cc..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000370,sync:fuzzer03,src:000360 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000370,sync:fuzzer03,src:000364 b/tests/suite/ocsp-resp-coverage/id:000370,sync:fuzzer03,src:000364 deleted file mode 100644 index dd58d6a751..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000370,sync:fuzzer03,src:000364 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000371,sync:fuzzer03,src:000334 b/tests/suite/ocsp-resp-coverage/id:000371,sync:fuzzer03,src:000334 deleted file mode 100644 index 9095bee5d5..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000371,sync:fuzzer03,src:000334 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000371,sync:fuzzer03,src:000356,+cov b/tests/suite/ocsp-resp-coverage/id:000371,sync:fuzzer03,src:000356,+cov deleted file mode 100644 index 0dd69bbc6b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000371,sync:fuzzer03,src:000356,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000372,sync:fuzzer03,src:000348 b/tests/suite/ocsp-resp-coverage/id:000372,sync:fuzzer03,src:000348 deleted file mode 100644 index 162c7871d1..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000372,sync:fuzzer03,src:000348 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000373,sync:fuzzer03,src:000328,+cov b/tests/suite/ocsp-resp-coverage/id:000373,sync:fuzzer03,src:000328,+cov deleted file mode 100644 index c3278d7401..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000373,sync:fuzzer03,src:000328,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000373,sync:fuzzer03,src:000355,+cov b/tests/suite/ocsp-resp-coverage/id:000373,sync:fuzzer03,src:000355,+cov deleted file mode 100644 index 7e971aa8ff..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000373,sync:fuzzer03,src:000355,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000374,sync:fuzzer03,src:000351,+cov b/tests/suite/ocsp-resp-coverage/id:000374,sync:fuzzer03,src:000351,+cov deleted file mode 100644 index 199fd0ce5d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000374,sync:fuzzer03,src:000351,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000374,sync:fuzzer03,src:000363 b/tests/suite/ocsp-resp-coverage/id:000374,sync:fuzzer03,src:000363 deleted file mode 100644 index 64b8d7bf90..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000374,sync:fuzzer03,src:000363 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000375,sync:fuzzer07,src:000367 b/tests/suite/ocsp-resp-coverage/id:000375,sync:fuzzer07,src:000367 deleted file mode 100644 index a84d9339ee..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000375,sync:fuzzer07,src:000367 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000377,sync:fuzzer03,src:000365 b/tests/suite/ocsp-resp-coverage/id:000377,sync:fuzzer03,src:000365 deleted file mode 100644 index c59d514bb3..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000377,sync:fuzzer03,src:000365 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000377,sync:fuzzer07,src:000368 b/tests/suite/ocsp-resp-coverage/id:000377,sync:fuzzer07,src:000368 deleted file mode 100644 index 6fe722f7da..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000377,sync:fuzzer07,src:000368 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000378,sync:fuzzer03,src:000369,+cov b/tests/suite/ocsp-resp-coverage/id:000378,sync:fuzzer03,src:000369,+cov deleted file mode 100644 index f9fc52dc0b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000378,sync:fuzzer03,src:000369,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000379,sync:fuzzer03,src:000366 b/tests/suite/ocsp-resp-coverage/id:000379,sync:fuzzer03,src:000366 deleted file mode 100644 index a59d6eaa5f..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000379,sync:fuzzer03,src:000366 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000380,sync:fuzzer03,src:000367 b/tests/suite/ocsp-resp-coverage/id:000380,sync:fuzzer03,src:000367 deleted file mode 100644 index 56b15af61f..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000380,sync:fuzzer03,src:000367 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000382,sync:fuzzer03,src:000371 b/tests/suite/ocsp-resp-coverage/id:000382,sync:fuzzer03,src:000371 deleted file mode 100644 index 0a1b96fd30..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000382,sync:fuzzer03,src:000371 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000383,sync:fuzzer03,src:000372,+cov b/tests/suite/ocsp-resp-coverage/id:000383,sync:fuzzer03,src:000372,+cov deleted file mode 100644 index de799b2b2d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000383,sync:fuzzer03,src:000372,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000386,src:000100,op:havoc,rep:2,+cov b/tests/suite/ocsp-resp-coverage/id:000386,src:000100,op:havoc,rep:2,+cov deleted file mode 100644 index b7d805bddc..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000386,src:000100,op:havoc,rep:2,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000387,sync:fuzzer01,src:000321,+cov b/tests/suite/ocsp-resp-coverage/id:000387,sync:fuzzer01,src:000321,+cov deleted file mode 100644 index 6fb1dabecf..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000387,sync:fuzzer01,src:000321,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000388,sync:fuzzer03,src:000374,+cov b/tests/suite/ocsp-resp-coverage/id:000388,sync:fuzzer03,src:000374,+cov deleted file mode 100644 index b0f478a185..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000388,sync:fuzzer03,src:000374,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000389,sync:fuzzer07,src:000377,+cov b/tests/suite/ocsp-resp-coverage/id:000389,sync:fuzzer07,src:000377,+cov deleted file mode 100644 index 48eb7a3b8c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000389,sync:fuzzer07,src:000377,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000390,sync:fuzzer08,src:000386,+cov b/tests/suite/ocsp-resp-coverage/id:000390,sync:fuzzer08,src:000386,+cov deleted file mode 100644 index fc22614d0d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000390,sync:fuzzer08,src:000386,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000401,sync:fuzzer07,src:000386 b/tests/suite/ocsp-resp-coverage/id:000401,sync:fuzzer07,src:000386 deleted file mode 100644 index 407bd00fa1..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000401,sync:fuzzer07,src:000386 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000404,sync:fuzzer03,src:000391,+cov b/tests/suite/ocsp-resp-coverage/id:000404,sync:fuzzer03,src:000391,+cov deleted file mode 100644 index aaf9552d3a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000404,sync:fuzzer03,src:000391,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000405,sync:fuzzer03,src:000394,+cov b/tests/suite/ocsp-resp-coverage/id:000405,sync:fuzzer03,src:000394,+cov deleted file mode 100644 index 08e699a6ef..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000405,sync:fuzzer03,src:000394,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000406,sync:fuzzer03,src:000396 b/tests/suite/ocsp-resp-coverage/id:000406,sync:fuzzer03,src:000396 deleted file mode 100644 index fdc5d3d493..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000406,sync:fuzzer03,src:000396 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000407,sync:fuzzer07,src:000389,+cov b/tests/suite/ocsp-resp-coverage/id:000407,sync:fuzzer07,src:000389,+cov deleted file mode 100644 index 7487857205..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000407,sync:fuzzer07,src:000389,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000411,sync:fuzzer03,src:000401 b/tests/suite/ocsp-resp-coverage/id:000411,sync:fuzzer03,src:000401 deleted file mode 100644 index 14c3b6e460..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000411,sync:fuzzer03,src:000401 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000411,sync:fuzzer04,src:000396 b/tests/suite/ocsp-resp-coverage/id:000411,sync:fuzzer04,src:000396 deleted file mode 100644 index 13aa150f18..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000411,sync:fuzzer04,src:000396 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000412,sync:fuzzer04,src:000394,+cov b/tests/suite/ocsp-resp-coverage/id:000412,sync:fuzzer04,src:000394,+cov deleted file mode 100644 index e19f83aa39..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000412,sync:fuzzer04,src:000394,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000414,sync:fuzzer05,src:000414,+cov b/tests/suite/ocsp-resp-coverage/id:000414,sync:fuzzer05,src:000414,+cov deleted file mode 100644 index 09647f24f8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000414,sync:fuzzer05,src:000414,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000416,sync:fuzzer03,src:000406 b/tests/suite/ocsp-resp-coverage/id:000416,sync:fuzzer03,src:000406 deleted file mode 100644 index 9504e6cd7e..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000416,sync:fuzzer03,src:000406 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000417,sync:fuzzer03,src:000405 b/tests/suite/ocsp-resp-coverage/id:000417,sync:fuzzer03,src:000405 deleted file mode 100644 index 76cf9381b9..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000417,sync:fuzzer03,src:000405 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000419,sync:fuzzer01,src:000386 b/tests/suite/ocsp-resp-coverage/id:000419,sync:fuzzer01,src:000386 deleted file mode 100644 index fc17b03a48..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000419,sync:fuzzer01,src:000386 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000426,sync:fuzzer03,src:000409 b/tests/suite/ocsp-resp-coverage/id:000426,sync:fuzzer03,src:000409 deleted file mode 100644 index 4391aa9052..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000426,sync:fuzzer03,src:000409 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000432,sync:fuzzer07,src:000410 b/tests/suite/ocsp-resp-coverage/id:000432,sync:fuzzer07,src:000410 deleted file mode 100644 index d3f0255e3a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000432,sync:fuzzer07,src:000410 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000436,sync:fuzzer03,src:000411,+cov b/tests/suite/ocsp-resp-coverage/id:000436,sync:fuzzer03,src:000411,+cov deleted file mode 100644 index b382e62765..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000436,sync:fuzzer03,src:000411,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000437,sync:fuzzer03,src:000414 b/tests/suite/ocsp-resp-coverage/id:000437,sync:fuzzer03,src:000414 deleted file mode 100644 index 515be41352..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000437,sync:fuzzer03,src:000414 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000437,sync:fuzzer03,src:000428 b/tests/suite/ocsp-resp-coverage/id:000437,sync:fuzzer03,src:000428 deleted file mode 100644 index c9b9ffe758..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000437,sync:fuzzer03,src:000428 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000438,sync:fuzzer03,src:000425,+cov b/tests/suite/ocsp-resp-coverage/id:000438,sync:fuzzer03,src:000425,+cov deleted file mode 100644 index e0db8a66b8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000438,sync:fuzzer03,src:000425,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000439,sync:fuzzer03,src:000427 b/tests/suite/ocsp-resp-coverage/id:000439,sync:fuzzer03,src:000427 deleted file mode 100644 index 7721ae767a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000439,sync:fuzzer03,src:000427 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000440,sync:fuzzer07,src:000422,+cov b/tests/suite/ocsp-resp-coverage/id:000440,sync:fuzzer07,src:000422,+cov deleted file mode 100644 index 4c78248a2a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000440,sync:fuzzer07,src:000422,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000442,sync:fuzzer03,src:000426 b/tests/suite/ocsp-resp-coverage/id:000442,sync:fuzzer03,src:000426 deleted file mode 100644 index c32d24df35..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000442,sync:fuzzer03,src:000426 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000443,sync:fuzzer03,src:000421 b/tests/suite/ocsp-resp-coverage/id:000443,sync:fuzzer03,src:000421 deleted file mode 100644 index f3b5a1f51f..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000443,sync:fuzzer03,src:000421 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000444,sync:fuzzer03,src:000431 b/tests/suite/ocsp-resp-coverage/id:000444,sync:fuzzer03,src:000431 deleted file mode 100644 index 1eadd7fb41..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000444,sync:fuzzer03,src:000431 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000444,sync:fuzzer03,src:000433,+cov b/tests/suite/ocsp-resp-coverage/id:000444,sync:fuzzer03,src:000433,+cov deleted file mode 100644 index b34fdf69a6..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000444,sync:fuzzer03,src:000433,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000444,sync:fuzzer07,src:000430,+cov b/tests/suite/ocsp-resp-coverage/id:000444,sync:fuzzer07,src:000430,+cov deleted file mode 100644 index 6904a8ffc4..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000444,sync:fuzzer07,src:000430,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000445,sync:fuzzer03,src:000417 b/tests/suite/ocsp-resp-coverage/id:000445,sync:fuzzer03,src:000417 deleted file mode 100644 index 11c0cc39b1..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000445,sync:fuzzer03,src:000417 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000448,sync:fuzzer03,src:000413 b/tests/suite/ocsp-resp-coverage/id:000448,sync:fuzzer03,src:000413 deleted file mode 100644 index 4bae4f2cda..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000448,sync:fuzzer03,src:000413 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000449,sync:fuzzer03,src:000424,+cov b/tests/suite/ocsp-resp-coverage/id:000449,sync:fuzzer03,src:000424,+cov deleted file mode 100644 index 37810807c9..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000449,sync:fuzzer03,src:000424,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000455,sync:fuzzer03,src:000412,+cov b/tests/suite/ocsp-resp-coverage/id:000455,sync:fuzzer03,src:000412,+cov deleted file mode 100644 index d984468294..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000455,sync:fuzzer03,src:000412,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000455,sync:fuzzer03,src:000419,+cov b/tests/suite/ocsp-resp-coverage/id:000455,sync:fuzzer03,src:000419,+cov deleted file mode 100644 index 3c4ba8ee4b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000455,sync:fuzzer03,src:000419,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000456,sync:fuzzer03,src:000429,+cov b/tests/suite/ocsp-resp-coverage/id:000456,sync:fuzzer03,src:000429,+cov deleted file mode 100644 index 24f6d6c25f..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000456,sync:fuzzer03,src:000429,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000456,sync:fuzzer03,src:000448 b/tests/suite/ocsp-resp-coverage/id:000456,sync:fuzzer03,src:000448 deleted file mode 100644 index ae46ebc543..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000456,sync:fuzzer03,src:000448 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000457,sync:fuzzer03,src:000438,+cov b/tests/suite/ocsp-resp-coverage/id:000457,sync:fuzzer03,src:000438,+cov deleted file mode 100644 index cd0d37f4d0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000457,sync:fuzzer03,src:000438,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000460,sync:fuzzer03,src:000446,+cov b/tests/suite/ocsp-resp-coverage/id:000460,sync:fuzzer03,src:000446,+cov deleted file mode 100644 index 1c961fab26..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000460,sync:fuzzer03,src:000446,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000460,sync:fuzzer07,src:000453 b/tests/suite/ocsp-resp-coverage/id:000460,sync:fuzzer07,src:000453 deleted file mode 100644 index 1d652aaf3b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000460,sync:fuzzer07,src:000453 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000463,sync:fuzzer03,src:000442,+cov b/tests/suite/ocsp-resp-coverage/id:000463,sync:fuzzer03,src:000442,+cov deleted file mode 100644 index 8ae99904cd..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000463,sync:fuzzer03,src:000442,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000467,sync:fuzzer07,src:000454,+cov b/tests/suite/ocsp-resp-coverage/id:000467,sync:fuzzer07,src:000454,+cov deleted file mode 100644 index 70e480a377..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000467,sync:fuzzer07,src:000454,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000468,sync:fuzzer03,src:000439 b/tests/suite/ocsp-resp-coverage/id:000468,sync:fuzzer03,src:000439 deleted file mode 100644 index bd6c1c14ca..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000468,sync:fuzzer03,src:000439 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000468,sync:fuzzer07,src:000439,+cov b/tests/suite/ocsp-resp-coverage/id:000468,sync:fuzzer07,src:000439,+cov deleted file mode 100644 index 44f19c7250..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000468,sync:fuzzer07,src:000439,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000473,sync:fuzzer07,src:000455,+cov b/tests/suite/ocsp-resp-coverage/id:000473,sync:fuzzer07,src:000455,+cov deleted file mode 100644 index 33e8417db8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000473,sync:fuzzer07,src:000455,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000474,sync:fuzzer03,src:000443 b/tests/suite/ocsp-resp-coverage/id:000474,sync:fuzzer03,src:000443 deleted file mode 100644 index 668c1e2468..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000474,sync:fuzzer03,src:000443 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000475,sync:fuzzer03,src:000454,+cov b/tests/suite/ocsp-resp-coverage/id:000475,sync:fuzzer03,src:000454,+cov deleted file mode 100644 index b8a70b8ce9..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000475,sync:fuzzer03,src:000454,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000476,sync:fuzzer03,src:000444 b/tests/suite/ocsp-resp-coverage/id:000476,sync:fuzzer03,src:000444 deleted file mode 100644 index 08308c0abe..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000476,sync:fuzzer03,src:000444 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000477,sync:fuzzer03,src:000450 b/tests/suite/ocsp-resp-coverage/id:000477,sync:fuzzer03,src:000450 deleted file mode 100644 index 9bc334d687..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000477,sync:fuzzer03,src:000450 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000478,sync:fuzzer03,src:000466 b/tests/suite/ocsp-resp-coverage/id:000478,sync:fuzzer03,src:000466 deleted file mode 100644 index fa3ac4c32f..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000478,sync:fuzzer03,src:000466 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000479,sync:fuzzer03,src:000462 b/tests/suite/ocsp-resp-coverage/id:000479,sync:fuzzer03,src:000462 deleted file mode 100644 index 74c0812cb7..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000479,sync:fuzzer03,src:000462 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000479,sync:fuzzer07,src:000468,+cov b/tests/suite/ocsp-resp-coverage/id:000479,sync:fuzzer07,src:000468,+cov deleted file mode 100644 index ef5ad1647f..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000479,sync:fuzzer07,src:000468,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000480,sync:fuzzer03,src:000459 b/tests/suite/ocsp-resp-coverage/id:000480,sync:fuzzer03,src:000459 deleted file mode 100644 index a9c60a4922..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000480,sync:fuzzer03,src:000459 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000480,sync:fuzzer07,src:000465,+cov b/tests/suite/ocsp-resp-coverage/id:000480,sync:fuzzer07,src:000465,+cov deleted file mode 100644 index 7aad0d7f7c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000480,sync:fuzzer07,src:000465,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000481,sync:fuzzer03,src:000453 b/tests/suite/ocsp-resp-coverage/id:000481,sync:fuzzer03,src:000453 deleted file mode 100644 index 386c6227dc..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000481,sync:fuzzer03,src:000453 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000481,sync:fuzzer07,src:000470 b/tests/suite/ocsp-resp-coverage/id:000481,sync:fuzzer07,src:000470 deleted file mode 100644 index fc18757f64..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000481,sync:fuzzer07,src:000470 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000482,sync:fuzzer07,src:000466 b/tests/suite/ocsp-resp-coverage/id:000482,sync:fuzzer07,src:000466 deleted file mode 100644 index 872a0ff080..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000482,sync:fuzzer07,src:000466 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000489,sync:fuzzer07,src:000477 b/tests/suite/ocsp-resp-coverage/id:000489,sync:fuzzer07,src:000477 deleted file mode 100644 index ef951b1e06..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000489,sync:fuzzer07,src:000477 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000491,sync:fuzzer07,src:000476 b/tests/suite/ocsp-resp-coverage/id:000491,sync:fuzzer07,src:000476 deleted file mode 100644 index b06fad2e17..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000491,sync:fuzzer07,src:000476 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000493,src:000255,op:havoc,rep:2 b/tests/suite/ocsp-resp-coverage/id:000493,src:000255,op:havoc,rep:2 deleted file mode 100644 index f3dd7dd0a8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000493,src:000255,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000494,sync:fuzzer03,src:000487 b/tests/suite/ocsp-resp-coverage/id:000494,sync:fuzzer03,src:000487 deleted file mode 100644 index 0412b3c99d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000494,sync:fuzzer03,src:000487 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000495,sync:fuzzer03,src:000482 b/tests/suite/ocsp-resp-coverage/id:000495,sync:fuzzer03,src:000482 deleted file mode 100644 index 7bc65813fd..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000495,sync:fuzzer03,src:000482 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000496,sync:fuzzer08,src:000492,+cov b/tests/suite/ocsp-resp-coverage/id:000496,sync:fuzzer08,src:000492,+cov deleted file mode 100644 index bc1858fbcb..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000496,sync:fuzzer08,src:000492,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000498,sync:fuzzer01,src:000388,+cov b/tests/suite/ocsp-resp-coverage/id:000498,sync:fuzzer01,src:000388,+cov deleted file mode 100644 index df9e8b085b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000498,sync:fuzzer01,src:000388,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000500,sync:fuzzer07,src:000488,+cov b/tests/suite/ocsp-resp-coverage/id:000500,sync:fuzzer07,src:000488,+cov deleted file mode 100644 index cf0c81ab69..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000500,sync:fuzzer07,src:000488,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000502,sync:fuzzer08,src:000498 b/tests/suite/ocsp-resp-coverage/id:000502,sync:fuzzer08,src:000498 deleted file mode 100644 index f830efc907..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000502,sync:fuzzer08,src:000498 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000504,sync:fuzzer03,src:000496 b/tests/suite/ocsp-resp-coverage/id:000504,sync:fuzzer03,src:000496 deleted file mode 100644 index bdf0c23f90..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000504,sync:fuzzer03,src:000496 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000507,src:000272+000488,op:splice,rep:2 b/tests/suite/ocsp-resp-coverage/id:000507,src:000272+000488,op:splice,rep:2 deleted file mode 100644 index 0f334d3767..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000507,src:000272+000488,op:splice,rep:2 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000507,sync:fuzzer03,src:000499 b/tests/suite/ocsp-resp-coverage/id:000507,sync:fuzzer03,src:000499 deleted file mode 100644 index b78230a6cd..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000507,sync:fuzzer03,src:000499 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000508,sync:fuzzer03,src:000500 b/tests/suite/ocsp-resp-coverage/id:000508,sync:fuzzer03,src:000500 deleted file mode 100644 index 9bd9f4591c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000508,sync:fuzzer03,src:000500 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000509,sync:fuzzer03,src:000504 b/tests/suite/ocsp-resp-coverage/id:000509,sync:fuzzer03,src:000504 deleted file mode 100644 index b45c012281..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000509,sync:fuzzer03,src:000504 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000510,sync:fuzzer03,src:000507 b/tests/suite/ocsp-resp-coverage/id:000510,sync:fuzzer03,src:000507 deleted file mode 100644 index 038818bf0d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000510,sync:fuzzer03,src:000507 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000511,sync:fuzzer03,src:000494 b/tests/suite/ocsp-resp-coverage/id:000511,sync:fuzzer03,src:000494 deleted file mode 100644 index c146fc30e5..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000511,sync:fuzzer03,src:000494 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000512,sync:fuzzer03,src:000501 b/tests/suite/ocsp-resp-coverage/id:000512,sync:fuzzer03,src:000501 deleted file mode 100644 index ffff3fc819..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000512,sync:fuzzer03,src:000501 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000513,sync:fuzzer03,src:000503 b/tests/suite/ocsp-resp-coverage/id:000513,sync:fuzzer03,src:000503 deleted file mode 100644 index 37f5a8b47d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000513,sync:fuzzer03,src:000503 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000515,sync:fuzzer03,src:000505 b/tests/suite/ocsp-resp-coverage/id:000515,sync:fuzzer03,src:000505 deleted file mode 100644 index fd9422f08c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000515,sync:fuzzer03,src:000505 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000517,sync:fuzzer02,src:000496 b/tests/suite/ocsp-resp-coverage/id:000517,sync:fuzzer02,src:000496 deleted file mode 100644 index 60c66194e0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000517,sync:fuzzer02,src:000496 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000518,sync:fuzzer03,src:000510,+cov b/tests/suite/ocsp-resp-coverage/id:000518,sync:fuzzer03,src:000510,+cov deleted file mode 100644 index da98d70d19..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000518,sync:fuzzer03,src:000510,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000520,src:000324,op:havoc,rep:2 b/tests/suite/ocsp-resp-coverage/id:000520,src:000324,op:havoc,rep:2 deleted file mode 100644 index 46d61954f2..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000520,src:000324,op:havoc,rep:2 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000523,src:000341,op:havoc,rep:8,+cov b/tests/suite/ocsp-resp-coverage/id:000523,src:000341,op:havoc,rep:8,+cov deleted file mode 100644 index d7c82f4934..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000523,src:000341,op:havoc,rep:8,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000524,sync:fuzzer03,src:000515 b/tests/suite/ocsp-resp-coverage/id:000524,sync:fuzzer03,src:000515 deleted file mode 100644 index 9b406b46eb..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000524,sync:fuzzer03,src:000515 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000525,src:000361,op:havoc,rep:4 b/tests/suite/ocsp-resp-coverage/id:000525,src:000361,op:havoc,rep:4 deleted file mode 100644 index f596bd9e0a..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000525,src:000361,op:havoc,rep:4 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000526,sync:fuzzer03,src:000517 b/tests/suite/ocsp-resp-coverage/id:000526,sync:fuzzer03,src:000517 deleted file mode 100644 index 3a618b0ed0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000526,sync:fuzzer03,src:000517 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000527,sync:fuzzer03,src:000516 b/tests/suite/ocsp-resp-coverage/id:000527,sync:fuzzer03,src:000516 deleted file mode 100644 index eb063858ba..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000527,sync:fuzzer03,src:000516 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000528,src:000382+000140,op:splice,rep:2 b/tests/suite/ocsp-resp-coverage/id:000528,src:000382+000140,op:splice,rep:2 deleted file mode 100644 index 9cb21fceff..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000528,src:000382+000140,op:splice,rep:2 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000529,sync:fuzzer03,src:000520 b/tests/suite/ocsp-resp-coverage/id:000529,sync:fuzzer03,src:000520 deleted file mode 100644 index f862ac3111..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000529,sync:fuzzer03,src:000520 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000531,sync:fuzzer03,src:000523,+cov b/tests/suite/ocsp-resp-coverage/id:000531,sync:fuzzer03,src:000523,+cov deleted file mode 100644 index cd6eb65adf..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000531,sync:fuzzer03,src:000523,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000532,sync:fuzzer03,src:000524 b/tests/suite/ocsp-resp-coverage/id:000532,sync:fuzzer03,src:000524 deleted file mode 100644 index 98052e4bc6..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000532,sync:fuzzer03,src:000524 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000534,sync:fuzzer03,src:000522 b/tests/suite/ocsp-resp-coverage/id:000534,sync:fuzzer03,src:000522 deleted file mode 100644 index 8e7076cd77..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000534,sync:fuzzer03,src:000522 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000535,sync:fuzzer03,src:000525 b/tests/suite/ocsp-resp-coverage/id:000535,sync:fuzzer03,src:000525 deleted file mode 100644 index d43063dfe4..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000535,sync:fuzzer03,src:000525 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000536,sync:fuzzer03,src:000529 b/tests/suite/ocsp-resp-coverage/id:000536,sync:fuzzer03,src:000529 deleted file mode 100644 index f48cb6bcee..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000536,sync:fuzzer03,src:000529 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000538,sync:fuzzer03,src:000530 b/tests/suite/ocsp-resp-coverage/id:000538,sync:fuzzer03,src:000530 deleted file mode 100644 index 928d68a38d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000538,sync:fuzzer03,src:000530 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000539,sync:fuzzer03,src:000531 b/tests/suite/ocsp-resp-coverage/id:000539,sync:fuzzer03,src:000531 deleted file mode 100644 index ac32ac9a83..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000539,sync:fuzzer03,src:000531 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000540,sync:fuzzer03,src:000534 b/tests/suite/ocsp-resp-coverage/id:000540,sync:fuzzer03,src:000534 deleted file mode 100644 index beec9db5c8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000540,sync:fuzzer03,src:000534 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000541,sync:fuzzer03,src:000533 b/tests/suite/ocsp-resp-coverage/id:000541,sync:fuzzer03,src:000533 deleted file mode 100644 index 43543613e8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000541,sync:fuzzer03,src:000533 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000542,sync:fuzzer03,src:000532,+cov b/tests/suite/ocsp-resp-coverage/id:000542,sync:fuzzer03,src:000532,+cov deleted file mode 100644 index 27194a4cf4..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000542,sync:fuzzer03,src:000532,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000543,src:000407+000403,op:splice,rep:4,+cov b/tests/suite/ocsp-resp-coverage/id:000543,src:000407+000403,op:splice,rep:4,+cov deleted file mode 100644 index a6f635b50f..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000543,src:000407+000403,op:splice,rep:4,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000545,sync:fuzzer07,src:000534,+cov b/tests/suite/ocsp-resp-coverage/id:000545,sync:fuzzer07,src:000534,+cov deleted file mode 100644 index d44bae4b1f..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000545,sync:fuzzer07,src:000534,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000546,sync:fuzzer05,src:000544 b/tests/suite/ocsp-resp-coverage/id:000546,sync:fuzzer05,src:000544 deleted file mode 100644 index b08b64a8fe..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000546,sync:fuzzer05,src:000544 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000546,sync:fuzzer07,src:000532 b/tests/suite/ocsp-resp-coverage/id:000546,sync:fuzzer07,src:000532 deleted file mode 100644 index 1cfaddc3c5..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000546,sync:fuzzer07,src:000532 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000547,sync:fuzzer07,src:000535 b/tests/suite/ocsp-resp-coverage/id:000547,sync:fuzzer07,src:000535 deleted file mode 100644 index 939a29efe0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000547,sync:fuzzer07,src:000535 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000548,sync:fuzzer07,src:000531,+cov b/tests/suite/ocsp-resp-coverage/id:000548,sync:fuzzer07,src:000531,+cov deleted file mode 100644 index d2209d2567..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000548,sync:fuzzer07,src:000531,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000552,sync:fuzzer03,src:000543 b/tests/suite/ocsp-resp-coverage/id:000552,sync:fuzzer03,src:000543 deleted file mode 100644 index 02fdb32580..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000552,sync:fuzzer03,src:000543 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000553,sync:fuzzer03,src:000544 b/tests/suite/ocsp-resp-coverage/id:000553,sync:fuzzer03,src:000544 deleted file mode 100644 index 00731ab12d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000553,sync:fuzzer03,src:000544 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000554,sync:fuzzer08,src:000552,+cov b/tests/suite/ocsp-resp-coverage/id:000554,sync:fuzzer08,src:000552,+cov deleted file mode 100644 index c77fc047ca..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000554,sync:fuzzer08,src:000552,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000555,sync:fuzzer06,src:000548 b/tests/suite/ocsp-resp-coverage/id:000555,sync:fuzzer06,src:000548 deleted file mode 100644 index 397c6d2f99..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000555,sync:fuzzer06,src:000548 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000557,sync:fuzzer06,src:000547 b/tests/suite/ocsp-resp-coverage/id:000557,sync:fuzzer06,src:000547 deleted file mode 100644 index 1d9d6b37df..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000557,sync:fuzzer06,src:000547 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000558,sync:fuzzer03,src:000551 b/tests/suite/ocsp-resp-coverage/id:000558,sync:fuzzer03,src:000551 deleted file mode 100644 index 599f3927d8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000558,sync:fuzzer03,src:000551 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000560,sync:fuzzer03,src:000552 b/tests/suite/ocsp-resp-coverage/id:000560,sync:fuzzer03,src:000552 deleted file mode 100644 index 9b86c7f83c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000560,sync:fuzzer03,src:000552 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000561,sync:fuzzer03,src:000555,+cov b/tests/suite/ocsp-resp-coverage/id:000561,sync:fuzzer03,src:000555,+cov deleted file mode 100644 index 9a21ec281d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000561,sync:fuzzer03,src:000555,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000562,sync:fuzzer03,src:000554 b/tests/suite/ocsp-resp-coverage/id:000562,sync:fuzzer03,src:000554 deleted file mode 100644 index 90e6a91e78..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000562,sync:fuzzer03,src:000554 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000564,sync:fuzzer03,src:000556 b/tests/suite/ocsp-resp-coverage/id:000564,sync:fuzzer03,src:000556 deleted file mode 100644 index 866bd4e5f3..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000564,sync:fuzzer03,src:000556 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000565,sync:fuzzer03,src:000557 b/tests/suite/ocsp-resp-coverage/id:000565,sync:fuzzer03,src:000557 deleted file mode 100644 index d141df53a0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000565,sync:fuzzer03,src:000557 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000566,sync:fuzzer07,src:000552 b/tests/suite/ocsp-resp-coverage/id:000566,sync:fuzzer07,src:000552 deleted file mode 100644 index 0e86efc2a2..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000566,sync:fuzzer07,src:000552 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000567,sync:fuzzer08,src:000562 b/tests/suite/ocsp-resp-coverage/id:000567,sync:fuzzer08,src:000562 deleted file mode 100644 index f378326b0f..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000567,sync:fuzzer08,src:000562 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000568,sync:fuzzer02,src:000551 b/tests/suite/ocsp-resp-coverage/id:000568,sync:fuzzer02,src:000551 deleted file mode 100644 index a13b92b76b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000568,sync:fuzzer02,src:000551 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000569,src:000520+000462,op:splice,rep:8 b/tests/suite/ocsp-resp-coverage/id:000569,src:000520+000462,op:splice,rep:8 deleted file mode 100644 index f36c41a270..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000569,src:000520+000462,op:splice,rep:8 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000569,sync:fuzzer06,src:000555 b/tests/suite/ocsp-resp-coverage/id:000569,sync:fuzzer06,src:000555 deleted file mode 100644 index 0bdaeb6bc8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000569,sync:fuzzer06,src:000555 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000570,sync:fuzzer06,src:000556 b/tests/suite/ocsp-resp-coverage/id:000570,sync:fuzzer06,src:000556 deleted file mode 100644 index a555c45041..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000570,sync:fuzzer06,src:000556 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000571,sync:fuzzer04,src:000557 b/tests/suite/ocsp-resp-coverage/id:000571,sync:fuzzer04,src:000557 deleted file mode 100644 index 236f6540c5..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000571,sync:fuzzer04,src:000557 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000572,sync:fuzzer07,src:000560 b/tests/suite/ocsp-resp-coverage/id:000572,sync:fuzzer07,src:000560 deleted file mode 100644 index 5a1a404c0b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000572,sync:fuzzer07,src:000560 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000573,sync:fuzzer08,src:000570 b/tests/suite/ocsp-resp-coverage/id:000573,sync:fuzzer08,src:000570 deleted file mode 100644 index bfa713708b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000573,sync:fuzzer08,src:000570 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000577,sync:fuzzer02,src:000563 b/tests/suite/ocsp-resp-coverage/id:000577,sync:fuzzer02,src:000563 deleted file mode 100644 index 19a7e74862..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000577,sync:fuzzer02,src:000563 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000577,sync:fuzzer03,src:000568,+cov b/tests/suite/ocsp-resp-coverage/id:000577,sync:fuzzer03,src:000568,+cov deleted file mode 100644 index bb690e5673..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000577,sync:fuzzer03,src:000568,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000579,sync:fuzzer01,src:000540 b/tests/suite/ocsp-resp-coverage/id:000579,sync:fuzzer01,src:000540 deleted file mode 100644 index 73599ea92b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000579,sync:fuzzer01,src:000540 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000582,sync:fuzzer03,src:000575 b/tests/suite/ocsp-resp-coverage/id:000582,sync:fuzzer03,src:000575 deleted file mode 100644 index 5b3be7281e..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000582,sync:fuzzer03,src:000575 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000583,sync:fuzzer03,src:000576,+cov b/tests/suite/ocsp-resp-coverage/id:000583,sync:fuzzer03,src:000576,+cov deleted file mode 100644 index de829146c1..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000583,sync:fuzzer03,src:000576,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000585,sync:fuzzer07,src:000571 b/tests/suite/ocsp-resp-coverage/id:000585,sync:fuzzer07,src:000571 deleted file mode 100644 index b6c9ccc486..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000585,sync:fuzzer07,src:000571 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000586,sync:fuzzer07,src:000577 b/tests/suite/ocsp-resp-coverage/id:000586,sync:fuzzer07,src:000577 deleted file mode 100644 index 3524afc009..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000586,sync:fuzzer07,src:000577 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000587,sync:fuzzer03,src:000577,+cov b/tests/suite/ocsp-resp-coverage/id:000587,sync:fuzzer03,src:000577,+cov deleted file mode 100644 index 749bf3d2d2..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000587,sync:fuzzer03,src:000577,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000587,sync:fuzzer07,src:000574 b/tests/suite/ocsp-resp-coverage/id:000587,sync:fuzzer07,src:000574 deleted file mode 100644 index 7239e8004e..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000587,sync:fuzzer07,src:000574 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000588,sync:fuzzer05,src:000587 b/tests/suite/ocsp-resp-coverage/id:000588,sync:fuzzer05,src:000587 deleted file mode 100644 index 11e9367702..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000588,sync:fuzzer05,src:000587 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000589,src:000531+000575,op:splice,rep:2 b/tests/suite/ocsp-resp-coverage/id:000589,src:000531+000575,op:splice,rep:2 deleted file mode 100644 index 9260266ce8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000589,src:000531+000575,op:splice,rep:2 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000589,sync:fuzzer05,src:000588 b/tests/suite/ocsp-resp-coverage/id:000589,sync:fuzzer05,src:000588 deleted file mode 100644 index 3d688e5c4b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000589,sync:fuzzer05,src:000588 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000591,sync:fuzzer03,src:000585 b/tests/suite/ocsp-resp-coverage/id:000591,sync:fuzzer03,src:000585 deleted file mode 100644 index 543e5edf5b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000591,sync:fuzzer03,src:000585 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000592,sync:fuzzer03,src:000569 b/tests/suite/ocsp-resp-coverage/id:000592,sync:fuzzer03,src:000569 deleted file mode 100644 index 12b8e91a38..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000592,sync:fuzzer03,src:000569 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000592,sync:fuzzer03,src:000579 b/tests/suite/ocsp-resp-coverage/id:000592,sync:fuzzer03,src:000579 deleted file mode 100644 index 469af21c6e..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000592,sync:fuzzer03,src:000579 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000592,sync:fuzzer03,src:000587,+cov b/tests/suite/ocsp-resp-coverage/id:000592,sync:fuzzer03,src:000587,+cov deleted file mode 100644 index 57e1dca471..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000592,sync:fuzzer03,src:000587,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000594,sync:fuzzer03,src:000586,+cov b/tests/suite/ocsp-resp-coverage/id:000594,sync:fuzzer03,src:000586,+cov deleted file mode 100644 index ebf8a4c6e3..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000594,sync:fuzzer03,src:000586,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000595,sync:fuzzer07,src:000585 b/tests/suite/ocsp-resp-coverage/id:000595,sync:fuzzer07,src:000585 deleted file mode 100644 index b0b6c44201..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000595,sync:fuzzer07,src:000585 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000597,sync:fuzzer03,src:000592,+cov b/tests/suite/ocsp-resp-coverage/id:000597,sync:fuzzer03,src:000592,+cov deleted file mode 100644 index 80317c1ff0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000597,sync:fuzzer03,src:000592,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000599,sync:fuzzer03,src:000589 b/tests/suite/ocsp-resp-coverage/id:000599,sync:fuzzer03,src:000589 deleted file mode 100644 index 4b283a3007..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000599,sync:fuzzer03,src:000589 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000600,sync:fuzzer03,src:000590 b/tests/suite/ocsp-resp-coverage/id:000600,sync:fuzzer03,src:000590 deleted file mode 100644 index e75feba912..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000600,sync:fuzzer03,src:000590 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000601,sync:fuzzer03,src:000594 b/tests/suite/ocsp-resp-coverage/id:000601,sync:fuzzer03,src:000594 deleted file mode 100644 index c579a86ecd..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000601,sync:fuzzer03,src:000594 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000602,sync:fuzzer03,src:000593 b/tests/suite/ocsp-resp-coverage/id:000602,sync:fuzzer03,src:000593 deleted file mode 100644 index 953c7be3d4..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000602,sync:fuzzer03,src:000593 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000605,sync:fuzzer03,src:000602 b/tests/suite/ocsp-resp-coverage/id:000605,sync:fuzzer03,src:000602 deleted file mode 100644 index ecec2f7c02..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000605,sync:fuzzer03,src:000602 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000606,sync:fuzzer03,src:000596,+cov b/tests/suite/ocsp-resp-coverage/id:000606,sync:fuzzer03,src:000596,+cov deleted file mode 100644 index f833a5361e..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000606,sync:fuzzer03,src:000596,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000607,sync:fuzzer03,src:000598,+cov b/tests/suite/ocsp-resp-coverage/id:000607,sync:fuzzer03,src:000598,+cov deleted file mode 100644 index 2368e60701..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000607,sync:fuzzer03,src:000598,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000608,sync:fuzzer07,src:000596 b/tests/suite/ocsp-resp-coverage/id:000608,sync:fuzzer07,src:000596 deleted file mode 100644 index d198bcc037..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000608,sync:fuzzer07,src:000596 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000610,sync:fuzzer03,src:000595 b/tests/suite/ocsp-resp-coverage/id:000610,sync:fuzzer03,src:000595 deleted file mode 100644 index dd61452412..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000610,sync:fuzzer03,src:000595 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000611,sync:fuzzer03,src:000603 b/tests/suite/ocsp-resp-coverage/id:000611,sync:fuzzer03,src:000603 deleted file mode 100644 index 7df5f217f0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000611,sync:fuzzer03,src:000603 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000612,sync:fuzzer03,src:000600,+cov b/tests/suite/ocsp-resp-coverage/id:000612,sync:fuzzer03,src:000600,+cov deleted file mode 100644 index 6da72b0179..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000612,sync:fuzzer03,src:000600,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000613,sync:fuzzer03,src:000605 b/tests/suite/ocsp-resp-coverage/id:000613,sync:fuzzer03,src:000605 deleted file mode 100644 index 3f9e2f99d1..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000613,sync:fuzzer03,src:000605 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000613,sync:fuzzer03,src:000607,+cov b/tests/suite/ocsp-resp-coverage/id:000613,sync:fuzzer03,src:000607,+cov deleted file mode 100644 index 303a8b6721..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000613,sync:fuzzer03,src:000607,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000614,sync:fuzzer07,src:000605 b/tests/suite/ocsp-resp-coverage/id:000614,sync:fuzzer07,src:000605 deleted file mode 100644 index bdf4075201..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000614,sync:fuzzer07,src:000605 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000616,sync:fuzzer03,src:000608,+cov b/tests/suite/ocsp-resp-coverage/id:000616,sync:fuzzer03,src:000608,+cov deleted file mode 100644 index fd89f6daad..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000616,sync:fuzzer03,src:000608,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000616,sync:fuzzer07,src:000606 b/tests/suite/ocsp-resp-coverage/id:000616,sync:fuzzer07,src:000606 deleted file mode 100644 index bc4b5a59fd..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000616,sync:fuzzer07,src:000606 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000617,sync:fuzzer03,src:000611 b/tests/suite/ocsp-resp-coverage/id:000617,sync:fuzzer03,src:000611 deleted file mode 100644 index 051899a499..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000617,sync:fuzzer03,src:000611 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000620,sync:fuzzer03,src:000614 b/tests/suite/ocsp-resp-coverage/id:000620,sync:fuzzer03,src:000614 deleted file mode 100644 index 969b31a6f5..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000620,sync:fuzzer03,src:000614 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000621,sync:fuzzer03,src:000619,+cov b/tests/suite/ocsp-resp-coverage/id:000621,sync:fuzzer03,src:000619,+cov deleted file mode 100644 index b4bcebf1b9..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000621,sync:fuzzer03,src:000619,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000624,sync:fuzzer03,src:000609 b/tests/suite/ocsp-resp-coverage/id:000624,sync:fuzzer03,src:000609 deleted file mode 100644 index 49a4de03d0..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000624,sync:fuzzer03,src:000609 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000625,sync:fuzzer03,src:000617,+cov b/tests/suite/ocsp-resp-coverage/id:000625,sync:fuzzer03,src:000617,+cov deleted file mode 100644 index 7b48e0f468..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000625,sync:fuzzer03,src:000617,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000627,sync:fuzzer03,src:000615,+cov b/tests/suite/ocsp-resp-coverage/id:000627,sync:fuzzer03,src:000615,+cov deleted file mode 100644 index 591043f62b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000627,sync:fuzzer03,src:000615,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000627,sync:fuzzer03,src:000618,+cov b/tests/suite/ocsp-resp-coverage/id:000627,sync:fuzzer03,src:000618,+cov deleted file mode 100644 index e0a11bf65e..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000627,sync:fuzzer03,src:000618,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000627,sync:fuzzer03,src:000623,+cov b/tests/suite/ocsp-resp-coverage/id:000627,sync:fuzzer03,src:000623,+cov deleted file mode 100644 index eb4a44ed4d..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000627,sync:fuzzer03,src:000623,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000628,sync:fuzzer03,src:000620,+cov b/tests/suite/ocsp-resp-coverage/id:000628,sync:fuzzer03,src:000620,+cov deleted file mode 100644 index 9d2471e983..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000628,sync:fuzzer03,src:000620,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000628,sync:fuzzer03,src:000622,+cov b/tests/suite/ocsp-resp-coverage/id:000628,sync:fuzzer03,src:000622,+cov deleted file mode 100644 index b8f54cc11b..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000628,sync:fuzzer03,src:000622,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000629,sync:fuzzer03,src:000616,+cov b/tests/suite/ocsp-resp-coverage/id:000629,sync:fuzzer03,src:000616,+cov deleted file mode 100644 index dd1ae573e4..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000629,sync:fuzzer03,src:000616,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000629,sync:fuzzer03,src:000621,+cov b/tests/suite/ocsp-resp-coverage/id:000629,sync:fuzzer03,src:000621,+cov deleted file mode 100644 index 5af5bf9bb5..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000629,sync:fuzzer03,src:000621,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000633,sync:fuzzer07,src:000611 b/tests/suite/ocsp-resp-coverage/id:000633,sync:fuzzer07,src:000611 deleted file mode 100644 index 9ec340dbee..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000633,sync:fuzzer07,src:000611 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000633,sync:fuzzer07,src:000612 b/tests/suite/ocsp-resp-coverage/id:000633,sync:fuzzer07,src:000612 deleted file mode 100644 index f59d9eedc5..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000633,sync:fuzzer07,src:000612 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000634,sync:fuzzer02,src:000621 b/tests/suite/ocsp-resp-coverage/id:000634,sync:fuzzer02,src:000621 deleted file mode 100644 index eead1fdf48..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000634,sync:fuzzer02,src:000621 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000635,sync:fuzzer02,src:000622,+cov b/tests/suite/ocsp-resp-coverage/id:000635,sync:fuzzer02,src:000622,+cov deleted file mode 100644 index f797d3ba70..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000635,sync:fuzzer02,src:000622,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000636,sync:fuzzer08,src:000636,+cov b/tests/suite/ocsp-resp-coverage/id:000636,sync:fuzzer08,src:000636,+cov deleted file mode 100644 index e002cb2874..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000636,sync:fuzzer08,src:000636,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000637,sync:fuzzer08,src:000633,+cov b/tests/suite/ocsp-resp-coverage/id:000637,sync:fuzzer08,src:000633,+cov deleted file mode 100644 index b50b7c017e..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000637,sync:fuzzer08,src:000633,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000638,sync:fuzzer08,src:000638,+cov b/tests/suite/ocsp-resp-coverage/id:000638,sync:fuzzer08,src:000638,+cov deleted file mode 100644 index 77b40f778e..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000638,sync:fuzzer08,src:000638,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000640,sync:fuzzer07,src:000626 b/tests/suite/ocsp-resp-coverage/id:000640,sync:fuzzer07,src:000626 deleted file mode 100644 index dac9059999..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000640,sync:fuzzer07,src:000626 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000640,sync:fuzzer08,src:000639 b/tests/suite/ocsp-resp-coverage/id:000640,sync:fuzzer08,src:000639 deleted file mode 100644 index c0e42f57ab..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000640,sync:fuzzer08,src:000639 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000641,sync:fuzzer03,src:000637,+cov b/tests/suite/ocsp-resp-coverage/id:000641,sync:fuzzer03,src:000637,+cov deleted file mode 100644 index 21d2772b8c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000641,sync:fuzzer03,src:000637,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000642,sync:fuzzer03,src:000635 b/tests/suite/ocsp-resp-coverage/id:000642,sync:fuzzer03,src:000635 deleted file mode 100644 index cf1db129db..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000642,sync:fuzzer03,src:000635 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000643,sync:fuzzer03,src:000636 b/tests/suite/ocsp-resp-coverage/id:000643,sync:fuzzer03,src:000636 deleted file mode 100644 index 92487a98a8..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000643,sync:fuzzer03,src:000636 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000644,sync:fuzzer07,src:000633 b/tests/suite/ocsp-resp-coverage/id:000644,sync:fuzzer07,src:000633 deleted file mode 100644 index f998bccf9c..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000644,sync:fuzzer07,src:000633 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000645,sync:fuzzer07,src:000632 b/tests/suite/ocsp-resp-coverage/id:000645,sync:fuzzer07,src:000632 deleted file mode 100644 index 5cd463cbeb..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000645,sync:fuzzer07,src:000632 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000646,sync:fuzzer03,src:000640 b/tests/suite/ocsp-resp-coverage/id:000646,sync:fuzzer03,src:000640 deleted file mode 100644 index 577c4f79ef..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000646,sync:fuzzer03,src:000640 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000647,sync:fuzzer03,src:000641 b/tests/suite/ocsp-resp-coverage/id:000647,sync:fuzzer03,src:000641 deleted file mode 100644 index 240f080f73..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000647,sync:fuzzer03,src:000641 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000648,sync:fuzzer07,src:000637 b/tests/suite/ocsp-resp-coverage/id:000648,sync:fuzzer07,src:000637 deleted file mode 100644 index 9d4d1965c4..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000648,sync:fuzzer07,src:000637 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000649,sync:fuzzer07,src:000636 b/tests/suite/ocsp-resp-coverage/id:000649,sync:fuzzer07,src:000636 deleted file mode 100644 index d8454da072..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000649,sync:fuzzer07,src:000636 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000650,sync:fuzzer03,src:000642,+cov b/tests/suite/ocsp-resp-coverage/id:000650,sync:fuzzer03,src:000642,+cov deleted file mode 100644 index 819fde5946..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000650,sync:fuzzer03,src:000642,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000651,sync:fuzzer02,src:000639 b/tests/suite/ocsp-resp-coverage/id:000651,sync:fuzzer02,src:000639 deleted file mode 100644 index ac21b21fbe..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000651,sync:fuzzer02,src:000639 and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000652,sync:fuzzer06,src:000644,+cov b/tests/suite/ocsp-resp-coverage/id:000652,sync:fuzzer06,src:000644,+cov deleted file mode 100644 index 1c1770b8e2..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000652,sync:fuzzer06,src:000644,+cov and /dev/null differ diff --git a/tests/suite/ocsp-resp-coverage/id:000653,src:000650,op:havoc,rep:8,+cov b/tests/suite/ocsp-resp-coverage/id:000653,src:000650,op:havoc,rep:8,+cov deleted file mode 100644 index a67419b99e..0000000000 Binary files a/tests/suite/ocsp-resp-coverage/id:000653,src:000650,op:havoc,rep:8,+cov and /dev/null differ diff --git a/tests/suite/pkcs7-cat b/tests/suite/pkcs7-cat deleted file mode 100755 index 602e056c68..0000000000 --- a/tests/suite/pkcs7-cat +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2016 Red Hat, Inc. -# -# This file is part of GnuTLS. -# -# GnuTLS is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at -# your option) any later version. -# -# GnuTLS is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -#set -e - -srcdir="${srcdir:-.}" -CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" -DIFF="${DIFF:-diff -b -B}" -if ! test -z "${VALGRIND}"; then - VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" -fi -OUTFILE=out-pkcs7.$$.tmp - -if ! test -x "${CERTTOOL}"; then - exit 77 -fi - -. ${srcdir}/../scripts/common.sh - -check_for_datefudge - -#try verification -datefudge -s "2010-10-10" \ -${VALGRIND} "${CERTTOOL}" --verify-allow-broken --inder --p7-verify --infile "${srcdir}/data/test1.cat" --load-certificate "${srcdir}/data/ca.pem" -rc=$? - -if test "${rc}" = "0"; then - echo "PKCS7 verification succeeded with invalid date" - exit 1 -fi - -datefudge -s "2016-10-10" \ -${VALGRIND} "${CERTTOOL}" --verify-allow-broken --inder --p7-verify --infile "${srcdir}/data/test1.cat" --load-certificate "${srcdir}/data/ca.pem" -rc=$? - -if test "${rc}" != "0"; then - echo "PKCS7 verification failed" - exit ${rc} -fi - -# try parsing -for FILE in test1.cat test2.cat; do -${VALGRIND} "${CERTTOOL}" --inder --p7-info --infile "${srcdir}/data/${FILE}" > "${OUTFILE}" -rc=$? - -# We're done. -if test "${rc}" != "0"; then - echo "${FILE}: PKCS7 decoding failed" - exit ${rc} -fi - -${DIFF} "${OUTFILE}" "${srcdir}/data/${FILE}.out" #>/dev/null -if test "$?" != "0"; then - echo "${FILE}: PKCS7 decoding didn't produce the correct file" - exit 1 -fi -done - -rm -f "${OUTFILE}" -#test output files - -for FILE in test1.cat test2.cat; do -${VALGRIND} "${CERTTOOL}" --inder --p7-info --p7-show-data --infile "${srcdir}/data/${FILE}" --outfile "${OUTFILE}" -rc=$? - -# We're done. -if test "${rc}" != "0"; then - echo "${FILE}: PKCS7 decoding failed" - exit ${rc} -fi - -${DIFF} "${OUTFILE}" "${srcdir}/data/${FILE}.data" >/dev/null -if test "$?" != "0"; then - echo "${FILE}: PKCS7 decoding data didn't produce the correct file" - exit 1 -fi -done - -rm -f "${OUTFILE}" - -exit 0 diff --git a/tests/suite/prime-check.c b/tests/suite/prime-check.c index ee0af1773c..1e3ef7538b 100644 --- a/tests/suite/prime-check.c +++ b/tests/suite/prime-check.c @@ -21,13 +21,12 @@ */ #include -#include #include #include /* Tests whether the included parameters are indeed prime */ -static void test_prime(const gnutls_datum_t * prime) +static void test_prime(const gnutls_datum_t * prime, const gnutls_datum_t * _q) { mpz_t p; unsigned bits = prime->size * 8; @@ -37,21 +36,33 @@ static void test_prime(const gnutls_datum_t * prime) assert(mpz_sizeinbase(p, 2) == bits); assert(mpz_probab_prime_p(p, 18)); + if (_q) { + mpz_t q; + + nettle_mpz_init_set_str_256_u(q, _q->size, _q->data); + mpz_mul_ui(q, q, 2); + mpz_add_ui(q, q, 1); + assert(mpz_cmp(p, q) == 0); + mpz_clear(q); + } + mpz_clear(p); } int main(int argc, char **argv) { - test_prime(&gnutls_srp_4096_group_prime); - test_prime(&gnutls_srp_3072_group_prime); - test_prime(&gnutls_srp_2048_group_prime); - test_prime(&gnutls_srp_1536_group_prime); - test_prime(&gnutls_srp_1024_group_prime); - - test_prime(&gnutls_ffdhe_8192_group_prime); - test_prime(&gnutls_ffdhe_4096_group_prime); - test_prime(&gnutls_ffdhe_3072_group_prime); - test_prime(&gnutls_ffdhe_2048_group_prime); + test_prime(&gnutls_srp_8192_group_prime, NULL); + test_prime(&gnutls_srp_4096_group_prime, NULL); + test_prime(&gnutls_srp_3072_group_prime, NULL); + test_prime(&gnutls_srp_2048_group_prime, NULL); + test_prime(&gnutls_srp_1536_group_prime, NULL); + test_prime(&gnutls_srp_1024_group_prime, NULL); + + test_prime(&gnutls_ffdhe_8192_group_prime, &gnutls_ffdhe_8192_group_q); + test_prime(&gnutls_ffdhe_6144_group_prime, &gnutls_ffdhe_6144_group_q); + test_prime(&gnutls_ffdhe_4096_group_prime, &gnutls_ffdhe_4096_group_q); + test_prime(&gnutls_ffdhe_3072_group_prime, &gnutls_ffdhe_3072_group_q); + test_prime(&gnutls_ffdhe_2048_group_prime, &gnutls_ffdhe_2048_group_q); return 0; } diff --git a/tests/suite/rng.c b/tests/suite/rng.c index 019bd8730c..f057c30e44 100644 --- a/tests/suite/rng.c +++ b/tests/suite/rng.c @@ -14,7 +14,7 @@ * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with GnuTLS. If not, see . + * along with GnuTLS. If not, see . * */ diff --git a/tests/suite/testcompat-common b/tests/suite/testcompat-common index d689467644..6ed5dba27f 100644 --- a/tests/suite/testcompat-common +++ b/tests/suite/testcompat-common @@ -27,16 +27,40 @@ # 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. -DSA_CERT="${srcdir}/../key-tests/data/cert.dsa.1024.pem" -DSA_KEY="${srcdir}/../key-tests/data/dsa.1024.pem" - -RSA_CERT="${srcdir}/../certs/cert-rsa-2432.pem" -RSA_KEY="${srcdir}/../certs/rsa-2432.pem" +DSA_CERT="${srcdir}/../cert-tests/data/cert.dsa.1024.pem" +DSA_KEY="${srcdir}/../cert-tests/data/dsa.1024.pem" CA_CERT="${srcdir}/../../doc/credentials/x509/ca.pem" CLI_CERT="${srcdir}/../../doc/credentials/x509/clicert.pem" CLI_KEY="${srcdir}/../../doc/credentials/x509/clikey.pem" +ECC_CLI_CERT="${srcdir}/../../doc/credentials/x509/clicert-ecdsa.pem" +ECC_CLI_KEY="${srcdir}/../../doc/credentials/x509/clikey-ecdsa.pem" + +RSA_PSS_CLI_CERT="${srcdir}/../../doc/credentials/x509/clicert-rsa-pss.pem" +RSA_PSS_CLI_KEY="${srcdir}/../../doc/credentials/x509/clikey-rsa-pss.pem" + +ED25519_CLI_CERT="${srcdir}/../../doc/credentials/x509/clicert-ed25519.pem" +ED25519_CLI_KEY="${srcdir}/../../doc/credentials/x509/clikey-ed25519.pem" + +ED448_CLI_CERT="${srcdir}/../../doc/credentials/x509/clicert-ed448.pem" +ED448_CLI_KEY="${srcdir}/../../doc/credentials/x509/clikey-ed448.pem" + +RSA_PSS_CERT="${srcdir}/../../doc/credentials/x509/cert-rsa-pss.pem" +RSA_PSS_KEY="${srcdir}/../../doc/credentials/x509/key-rsa-pss.pem" + +RSA_CERT="${srcdir}/../../doc/credentials/x509/cert-rsa.pem" +RSA_KEY="${srcdir}/../../doc/credentials/x509/key-rsa.pem" + +ED25519_CERT="${srcdir}/../../doc/credentials/x509/cert-ed25519.pem" +ED25519_KEY="${srcdir}/../../doc/credentials/x509/key-ed25519.pem" + +ED448_CERT="${srcdir}/../../doc/credentials/x509/cert-ed448.pem" +ED448_KEY="${srcdir}/../../doc/credentials/x509/key-ed448.pem" + +ECC_CERT="${srcdir}/../../doc/credentials/x509/cert-ecc.pem" +ECC_KEY="${srcdir}/../../doc/credentials/x509/key-ecc.pem" + CA_ECC_CERT="${srcdir}/../certs/ca-cert-ecc.pem" ECC224_CERT="${srcdir}/../certs/cert-ecc.pem" ECC224_KEY="${srcdir}/../certs/ecc.pem" @@ -58,3 +82,6 @@ SERV_DSA_KEY="${srcdir}/../../doc/credentials/x509/key-dsa.pem" SERV_PSK="${srcdir}/../../doc/credentials/psk-passwd.txt" DH_PARAMS="${srcdir}/params.dh" + +PSKID=test32 +PSKKEY=8a7759b3f26983c453e448060bde89818a7759b3f26983c453e448060bde8981 diff --git a/tests/suite/testcompat-main-openssl b/tests/suite/testcompat-main-openssl index 28461de569..9c50a652b5 100755 --- a/tests/suite/testcompat-main-openssl +++ b/tests/suite/testcompat-main-openssl @@ -31,6 +31,7 @@ # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. srcdir="${srcdir:-.}" +GNUTLS_SERV="${SERV:-../../src/gnutls-serv${EXEEXT}}" CLI="${CLI:-../../src/gnutls-cli${EXEEXT}}" unset RETCODE @@ -61,31 +62,58 @@ if test ${SV} != 0; then exit 77 fi -${SERV} ecparam -list_curves|grep X25519 >/dev/null 2>&1 -NO_X25519=$? +. "${srcdir}/testcompat-common" + +${SERV} version|grep -e '1\.[1-9]\..' >/dev/null 2>&1 +HAVE_X25519=$? + +test $HAVE_X25519 != 0 && echo "Disabling interop tests for x25519" ${SERV} version|grep -e '[1-9]\.[0-9]\.[0-9]' >/dev/null 2>&1 NO_TLS1_2=$? +test $NO_TLS1_2 != 0 && echo "Disabling interop tests for TLS 1.2" + ${SERV} version|grep -e '[1-9]\.[1-9]\.[0-9]' >/dev/null 2>&1 -NO_DH_PARAMS=$? +if test $? = 0;then + NO_DH_PARAMS=0 +else + NO_DH_PARAMS=1 +fi -${SERV} s_server -help 2>&1|grep -e -ssl3 >/dev/null 2>&1 -HAVE_SSL3=$? +${SERV} ciphers -v ALL 2>&1|grep -e DHE-DSS >/dev/null 2>&1 +NO_DSS=$? + +if test $NO_DSS != 0;then + echo "Disabling interop tests for DSS ciphersuites" +else + DSA_PARAMS="-dkey ${DSA_KEY} -dcert ${DSA_CERT}" +fi ${SERV} ciphers -v ALL 2>&1|grep -e CAMELLIA >/dev/null 2>&1 NO_CAMELLIA=$? +test $NO_CAMELLIA != 0 && echo "Disabling interop tests for Camellia ciphersuites" + +${SERV} ciphers -v ALL 2>&1|grep -e RC4 >/dev/null 2>&1 +NO_RC4=$? + +test $NO_RC4 != 0 && echo "Disabling interop tests for RC4 ciphersuites" + ${SERV} ciphers -v ALL 2>&1|grep -e 3DES >/dev/null 2>&1 NO_3DES=$? -${SERV} ciphers -v ALL 2>&1|grep -e DSS >/dev/null 2>&1 -NO_DSS=$? +test $NO_3DES != 0 && echo "Disabling interop tests for 3DES ciphersuites" ${SERV} ciphers -v ALL 2>&1|grep -e NULL >/dev/null 2>&1 NO_NULL=$? -. "${srcdir}/testcompat-common" +test $NO_NULL != 0 && echo "Disabling interop tests for NULL ciphersuites" + +${SERV} ecparam -list_curves 2>&1|grep -e prime192v1 >/dev/null 2>&1 +NO_PRIME192v1=$? + +test $NO_PRIME192v1 != 0 && echo "Disabling interop tests for prime192v1 ecparam" if test "${NO_DH_PARAMS}" = 0;then OPENSSL_DH_PARAMS_OPT="" @@ -93,6 +121,24 @@ else OPENSSL_DH_PARAMS_OPT="-dhparam \"${DH_PARAMS}\"" fi +${SERV} s_server -help 2>&1|grep -e -ssl3 >/dev/null 2>&1 +HAVE_NOT_SSL3=$? + +if test $HAVE_NOT_SSL3 = 0;then + eval "${GETPORT}" + launch_bare_server $$ s_server -cipher ALL -quiet -www -accept "${PORT}" -keyform pem -certform pem -ssl3 -key "${RSA_KEY}" -cert "${RSA_CERT}" >/dev/null 2>&1 + PID=$! + wait_server ${PID} + + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -ssl3 &1 | grep "\:error\:" && \ + HAVE_NOT_SSL3=1 + kill ${PID} + wait +fi + +test $HAVE_NOT_SSL3 != 0 && echo "Disabling interop tests for SSL 3.0" + + echo "#################################################" echo "# Client mode tests (gnutls cli-openssl server) #" echo "#################################################" @@ -104,49 +150,53 @@ run_client_suite() { PREFIX="$(echo $ADD|sed 's/://g'): " fi - if test "${HAVE_SSL3}" != 1 && test "${ENABLE_SSL3}" = 1; then + if test "${HAVE_NOT_SSL3}" != 1 && test "${ENABLE_SSL3}" = 1; then # It seems debian disabled SSL 3.0 completely on openssl eval "${GETPORT}" - launch_bare_server $$ s_server -cipher ALL -quiet -www -accept "${PORT}" -keyform pem -certform pem -ssl3 ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -dkey "${DSA_KEY}" -dcert "${DSA_CERT}" -Verify 1 -CAfile "${CA_CERT}" + launch_bare_server $$ s_server -cipher ALL -quiet -www -accept "${PORT}" -keyform pem -certform pem -ssl3 ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" ${DSA_PARAMS} -Verify 1 -CAfile "${CA_CERT}" >/dev/null PID=$! wait_server ${PID} # Test SSL 3.0 with RSA ciphersuite echo "${PREFIX}Checking SSL 3.0 with RSA..." - ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+3DES-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ fail ${PID} "Failed" # Test SSL 3.0 with DHE-RSA ciphersuite echo "${PREFIX}Checking SSL 3.0 with DHE-RSA..." - ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+DHE-RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+3DES-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+DHE-RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ fail ${PID} "Failed" - # Test SSL 3.0 with DHE-DSS ciphersuite - echo "${PREFIX}Checking SSL 3.0 with DHE-DSS..." - ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ - fail ${PID} "Failed" + if test "${NO_DSS}" = 0; then + # Test SSL 3.0 with DHE-DSS ciphersuite + echo "${PREFIX}Checking SSL 3.0 with DHE-DSS..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+3DES-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + fi kill ${PID} wait - eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -ssl3 ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -cipher RC4-MD5 - PID=$! - wait_server ${PID} + if test "${NO_RC4}" != 1; then + eval "${GETPORT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -ssl3 ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -cipher RC4-MD5 >/dev/null + PID=$! + wait_server ${PID} - echo "${PREFIX}Checking SSL 3.0 with RSA-RC4-MD5..." - ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+ARCFOUR-128:+MD5:+SIGN-ALL:+COMP-NULL:+VERS-SSL3.0:+RSA${ADD}" --insecure /dev/null || \ - fail ${PID} "Failed" + echo "${PREFIX}Checking SSL 3.0 with RSA-RC4-MD5..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+ARCFOUR-128:+MD5:+SIGN-ALL:+COMP-NULL:+VERS-SSL3.0:+RSA${ADD}" --insecure /dev/null || \ + fail ${PID} "Failed" - kill ${PID} - wait + kill ${PID} + wait + fi fi if test "${NO_NULL}" = 0; then #-cipher RSA-NULL eval "${GETPORT}" - launch_bare_server $$ s_server -cipher NULL-SHA -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1 ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -Verify 1 -CAfile "${CA_CERT}" + launch_bare_server $$ s_server -cipher NULL-SHA -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1 ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -Verify 1 -CAfile "${CA_CERT}" >/dev/null PID=$! wait_server ${PID} @@ -161,7 +211,7 @@ run_client_suite() { #-cipher RSA-AES128-SHA:DHE-DSS-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA eval "${GETPORT}" - launch_bare_server $$ s_server -cipher "ALL" -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1 ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -dkey "${DSA_KEY}" -dcert "${DSA_CERT}" -Verify 1 -CAfile "${CA_CERT}" + launch_bare_server $$ s_server -cipher "ALL:@SECLEVEL=1" -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1 ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" ${DSA_PARAMS} -Verify 1 -CAfile "${CA_CERT}" >/dev/null PID=$! wait_server ${PID} @@ -190,7 +240,7 @@ run_client_suite() { fail ${PID} "Failed" fi - if test "${NO_DSS}" != 1; then + if test "${NO_DSS}" = 0; then # Test TLS 1.0 with DHE-DSS ciphersuite echo "${PREFIX}Checking TLS 1.0 with DHE-DSS..." ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.0:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ @@ -210,9 +260,9 @@ run_client_suite() { kill ${PID} wait - if test "${FIPS}" != 1; then + if test "${FIPS_CURVES}" != 1 && test "${NO_PRIME192v1}" != 1; then eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1 -key "${RSA_KEY}" -cert "${RSA_CERT}" -named_curve prime192v1 -CAfile "${CA_CERT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -cipher 'DEFAULT:@SECLEVEL=1' -tls1 -key "${RSA_KEY}" -cert "${RSA_CERT}" -named_curve prime192v1 -CAfile "${CA_CERT}" >/dev/null PID=$! wait_server ${PID} @@ -226,7 +276,7 @@ run_client_suite() { #-cipher ECDHE-ECDSA-AES128-SHA eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1 -key "${ECC224_KEY}" -cert "${ECC224_CERT}" -Verify 1 -named_curve secp224r1 -CAfile "${CA_ECC_CERT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -cipher 'DEFAULT:@SECLEVEL=1' -tls1 -key "${ECC224_KEY}" -cert "${ECC224_CERT}" -Verify 1 -named_curve secp224r1 -CAfile "${CA_ECC_CERT}" >/dev/null PID=$! wait_server ${PID} @@ -241,7 +291,7 @@ run_client_suite() { #-cipher ECDHE-ECDSA-AES128-SHA eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1 -key "${ECC384_KEY}" -cert "${ECC384_CERT}" -Verify 1 -named_curve secp384r1 -CAfile "${CA_ECC_CERT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -cipher 'DEFAULT:@SECLEVEL=1' -tls1 -key "${ECC384_KEY}" -cert "${ECC384_CERT}" -Verify 1 -named_curve secp384r1 -CAfile "${CA_ECC_CERT}" >/dev/null PID=$! wait_server ${PID} @@ -255,7 +305,7 @@ run_client_suite() { #-cipher ECDHE-ECDSA-AES128-SHA eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1 -key "${ECC521_KEY}" -cert "${ECC521_CERT}" -Verify 1 -named_curve secp521r1 -CAfile "${CA_ECC_CERT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -cipher 'DEFAULT:@SECLEVEL=1' -tls1 -key "${ECC521_KEY}" -cert "${ECC521_CERT}" -Verify 1 -named_curve secp521r1 -CAfile "${CA_ECC_CERT}" >/dev/null PID=$! wait_server ${PID} @@ -269,7 +319,7 @@ run_client_suite() { #-cipher PSK eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -tls1 -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -cipher PSK -psk 9e32cf7786321a828ef7668f09fb35db + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -tls1 -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -cipher 'PSK:@SECLEVEL=1' -psk 9e32cf7786321a828ef7668f09fb35db >/dev/null PID=$! wait_server ${PID} @@ -284,7 +334,7 @@ run_client_suite() { # Tests requiring openssl 1.0.1 - TLS 1.2 #-cipher RSA-AES128-SHA:DHE-DSS-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA eval "${GETPORT}" - launch_bare_server $$ s_server -cipher ALL -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1_2 ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -dkey "${DSA_KEY}" -dcert "${DSA_CERT}" -Verify 1 -CAfile "${CA_CERT}" + launch_bare_server $$ s_server -cipher 'ALL:@SECLEVEL=1' -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1_2 ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" ${DSA_PARAMS} -Verify 1 -CAfile "${CA_CERT}" >/dev/null PID=$! wait_server ${PID} @@ -300,9 +350,9 @@ run_client_suite() { ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+DHE-RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ fail ${PID} "Failed" - if test "${NO_DSS}" != 1; then + if test "${NO_DSS}" = 0; then echo "${PREFIX}Checking TLS 1.2 with DHE-DSS..." - ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+DHE-DSS:+SIGN-DSA-SHA1:%VERIFY_ALLOW_SIGN_WITH_SHA1:+SIGN-DSA-SHA256${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ fail ${PID} "Failed" fi @@ -313,9 +363,9 @@ run_client_suite() { kill ${PID} wait - if test "${NO_X25519}" = 0 && test "${FIPS}" != 1; then + if test "${HAVE_X25519}" = 0; then eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1_2 -key "${RSA_KEY}" -cert "${RSA_CERT}" -named_curve X25519 -CAfile "${CA_CERT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1_2 -key "${RSA_KEY}" -cert "${RSA_CERT}" -curves X25519 -CAfile "${CA_CERT}" >/dev/null PID=$! wait_server ${PID} @@ -327,10 +377,10 @@ run_client_suite() { wait fi - if test "${FIPS}" != 1; then + if test "${FIPS_CURVES}" != 1; then #-cipher ECDHE-ECDSA-AES128-SHA eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1_2 -key "${ECC224_KEY}" -cert "${ECC224_CERT}" -Verify 1 -named_curve secp224r1 -CAfile "${CA_ECC_CERT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1_2 -key "${ECC224_KEY}" -cert "${ECC224_CERT}" -Verify 1 -named_curve secp224r1 -CAfile "${CA_ECC_CERT}" >/dev/null PID=$! wait_server ${PID} @@ -344,7 +394,7 @@ run_client_suite() { #-cipher ECDHE-ECDSA-AES128-SHA eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1_2 -key "${ECC384_KEY}" -cert "${ECC384_CERT}" -Verify 1 -named_curve secp384r1 -CAfile "${CA_ECC_CERT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1_2 -key "${ECC384_KEY}" -cert "${ECC384_CERT}" -Verify 1 -named_curve secp384r1 -CAfile "${CA_ECC_CERT}" >/dev/null PID=$! wait_server ${PID} @@ -355,10 +405,10 @@ run_client_suite() { kill ${PID} wait - if test "${FIPS}" != 1; then + if test "${FIPS_CURVES}" != 1; then #-cipher ECDHE-ECDSA-AES128-SHA eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1_2 -key "${ECC521_KEY}" -cert "${ECC521_CERT}" -Verify 1 -named_curve secp521r1 -CAfile "${CA_ECC_CERT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem -tls1_2 -key "${ECC521_KEY}" -cert "${ECC521_CERT}" -Verify 1 -named_curve secp521r1 -CAfile "${CA_ECC_CERT}" >/dev/null PID=$! wait_server ${PID} @@ -368,12 +418,12 @@ run_client_suite() { kill ${PID} wait - fi #FIPS + fi #FIPS_CURVES fi #NO_TLS1_2 #-cipher PSK eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -tls1_2 -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -cipher PSK -psk 9e32cf7786321a828ef7668f09fb35db + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -tls1_2 -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -cipher PSK -psk 9e32cf7786321a828ef7668f09fb35db >/dev/null PID=$! wait_server ${PID} @@ -385,7 +435,7 @@ run_client_suite() { wait eval "${GETPORT}" - launch_bare_server $$ s_server -cipher ALL -quiet -accept "${PORT}" -keyform pem -certform pem -dtls1 -timeout ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -dkey "${DSA_KEY}" -dcert "${DSA_CERT}" -Verify 1 -CAfile "${CA_CERT}" + launch_bare_server $$ s_server -cipher 'ALL:@SECLEVEL=1' -quiet -accept "${PORT}" -keyform pem -certform pem -dtls1 -timeout ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" ${DSA_PARAMS} -Verify 1 -CAfile "${CA_CERT}" >/dev/null PID=$! wait_udp_server ${PID} @@ -398,7 +448,7 @@ run_client_suite() { wait eval "${GETPORT}" - launch_bare_server $$ s_server -quiet -accept "${PORT}" -keyform pem -certform pem -dtls1 -timeout ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -dkey "${DSA_KEY}" -dcert "${DSA_CERT}" -Verify 1 -CAfile "${CA_CERT}" + launch_bare_server $$ s_server -cipher 'ALL:@SECLEVEL=1' -quiet -accept "${PORT}" -keyform pem -certform pem -dtls1 -timeout ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" ${DSA_PARAMS} -Verify 1 -CAfile "${CA_CERT}" >/dev/null PID=$! wait_udp_server ${PID} @@ -410,9 +460,9 @@ run_client_suite() { kill ${PID} wait - if test "${NO_DSS}" != 1; then + if test "${NO_DSS}" = 0; then eval "${GETPORT}" - launch_bare_server $$ s_server -cipher "ALL" -quiet -accept "${PORT}" -keyform pem -certform pem -dtls1 -timeout ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -dkey "${DSA_KEY}" -dcert "${DSA_CERT}" -Verify 1 -CAfile "${CA_CERT}" + launch_bare_server $$ s_server -cipher "ALL:@SECLEVEL=1" -quiet -accept "${PORT}" -keyform pem -certform pem -dtls1 -timeout ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" ${DSA_PARAMS} -Verify 1 -CAfile "${CA_CERT}" >/dev/null PID=$! wait_udp_server ${PID} @@ -424,6 +474,43 @@ run_client_suite() { kill ${PID} wait fi + + eval "${GETPORT}" + launch_bare_server $$ s_server -cipher 'ALL:@SECLEVEL=1' -quiet -accept "${PORT}" -keyform pem -certform pem -dtls1_2 -timeout ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" ${DSA_PARAMS} -Verify 1 -CAfile "${CA_CERT}" >/dev/null + PID=$! + wait_udp_server ${PID} + + echo "${PREFIX}Checking DTLS 1.2 with AES-CBC..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-128-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-DTLS1.2:+RSA${ADD}" --udp --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + eval "${GETPORT}" + launch_bare_server $$ s_server -cipher ALL -quiet -accept "${PORT}" -keyform pem -certform pem -dtls1_2 -timeout ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -Verify 1 -CAfile "${CA_CERT}" >/dev/null + PID=$! + wait_udp_server ${PID} + + # Test DTLS 1.2 with RSA ciphersuite + echo "${PREFIX}Checking DTLS 1.2 with RSA..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-DTLS1.2:+RSA${ADD}" --udp --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + eval "${GETPORT}" + launch_bare_server $$ s_server -cipher ALL -quiet -accept "${PORT}" -keyform pem -certform pem -dtls1_2 -timeout ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -Verify 1 -CAfile "${CA_CERT}" >/dev/null + PID=$! + wait_udp_server ${PID} + + echo "${PREFIX}Checking DTLS 1.2 with ECDHE-RSA..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+GROUP-ALL:+MAC-ALL:+VERS-DTLS1.2:+ECDHE-RSA${ADD}" --udp --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + kill ${PID} + wait } WAITPID="" @@ -442,7 +529,7 @@ echo "${PREFIX}" echo "${PREFIX}###############################################" echo "${PREFIX}# Server mode tests (gnutls server-openssl cli#" echo "${PREFIX}###############################################" -SERV="../../src/gnutls-serv${EXEEXT} -q" +SERV="${GNUTLS_SERV} -q" # Note that openssl s_client does not return error code on failure @@ -453,48 +540,51 @@ run_server_suite() { PREFIX="$(echo $ADD|sed 's/://g'): " fi - if test "${HAVE_SSL3}" != 1 && test "${ENABLE_SSL3}" = 1; then + if test "${HAVE_NOT_SSL3}" != 1 && test "${ENABLE_SSL3}" = 1; then echo "${PREFIX}Check SSL 3.0 with RSA ciphersuite" eval "${GETPORT}" - launch_server $$ --priority "NONE:+MD5:+ARCFOUR-128:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+RSA${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" --dhparams "${DH_PARAMS}" + launch_server $$ --priority "NONE:+MD5:+ARCFOUR-128:+3DES-CBC:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+RSA${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" --dhparams "${DH_PARAMS}" PID=$! wait_server ${PID} ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -ssl3 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" - echo "${PREFIX}Check SSL 3.0 with RSA-RC4-MD5 ciphersuite" - ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -ssl3 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" -cipher RC4-MD5 &1 | grep "\:error\:" && \ - fail ${PID} "Failed" + if test "${NO_RC4}" != 1; then + echo "${PREFIX}Check SSL 3.0 with RSA-RC4-MD5 ciphersuite" + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -ssl3 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" -cipher RC4-MD5 &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + fi kill ${PID} wait echo "${PREFIX}Check SSL 3.0 with DHE-RSA ciphersuite" eval "${GETPORT}" - launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+DHE-RSA${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" --dhparams "${DH_PARAMS}" + launch_server $$ --priority "NONE:+CIPHER-ALL:+3DES-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+DHE-RSA${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" --dhparams "${DH_PARAMS}" PID=$! wait_server ${PID} - ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -ssl3 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -cipher DHE -host localhost -port "${PORT}" -ssl3 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} wait - echo "${PREFIX}Check SSL 3.0 with DHE-DSS ciphersuite" - eval "${GETPORT}" - launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256${ADD}" --x509certfile "${SERV_DSA_CERT}" --x509keyfile "${SERV_DSA_KEY}" --dhparams "${DH_PARAMS}" - PID=$! - wait_server ${PID} - - ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -ssl3 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ - fail ${PID} "Failed" + if test "${NO_DSS}" = 0; then + echo "${PREFIX}Check SSL 3.0 with DHE-DSS ciphersuite" + eval "${GETPORT}" + launch_server $$ --priority "NONE:+CIPHER-ALL:+3DES-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-SSL3.0:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256${ADD}" --x509certfile "${SERV_DSA_CERT}" --x509keyfile "${SERV_DSA_KEY}" --dhparams "${DH_PARAMS}" + PID=$! + wait_server ${PID} + ${OPENSSL_CLI} s_client -cipher DHE -host localhost -port "${PORT}" -ssl3 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" - kill ${PID} - wait + kill ${PID} + wait + fi fi #TLS 1.0 @@ -531,20 +621,20 @@ run_server_suite() { PID=$! wait_server ${PID} - ${OPENSSL_CLI} s_client -host localhost -tls1 -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -cipher DHE:@SECLEVEL=1 -host localhost -tls1 -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} wait - if test "${NO_DSS}" != 1; then + if test "${NO_DSS}" = 0; then echo "${PREFIX}Check TLS 1.0 with DHE-DSS ciphersuite" eval "${GETPORT}" launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.0:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256${ADD}" --x509certfile "${SERV_DSA_CERT}" --x509keyfile "${SERV_DSA_KEY}" --dhparams "${DH_PARAMS}" PID=$! wait_server ${PID} - ${OPENSSL_CLI} s_client -host localhost -cipher ALL -tls1 -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -host localhost -cipher ALL:@SECLEVEL=1 -tls1 -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} @@ -558,13 +648,13 @@ run_server_suite() { wait_server ${PID} #-cipher ECDHE-RSA-AES128-SHA - ${OPENSSL_CLI} s_client -host localhost -tls1 -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -host localhost -cipher ALL:@SECLEVEL=1 -tls1 -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} wait - if test "${FIPS}" != 1; then + if test "${FIPS_CURVES}" != 1; then echo "${PREFIX}Check TLS 1.0 with ECDHE-ECDSA ciphersuite (SECP224R1)" eval "${GETPORT}" launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.0:+ECDHE-ECDSA:+CURVE-SECP224R1:+CURVE-ALL${ADD}" --x509certfile "${ECC224_CERT}" --x509keyfile "${ECC224_KEY}" --x509cafile "${CA_ECC_CERT}" @@ -572,7 +662,7 @@ run_server_suite() { wait_server ${PID} #-cipher ECDHE-ECDSA-AES128-SHA - ${OPENSSL_CLI} s_client -host localhost -tls1 -named_curve secp224r1 -port "${PORT}" -cert "${ECC224_CERT}" -key "${ECC224_KEY}" -CAfile "${CA_ECC_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -host localhost -cipher ALL:@SECLEVEL=1 -tls1 -named_curve secp224r1 -port "${PORT}" -cert "${ECC224_CERT}" -key "${ECC224_KEY}" -CAfile "${CA_ECC_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} @@ -586,7 +676,7 @@ run_server_suite() { wait_server ${PID} #-cipher ECDHE-ECDSA-AES128-SHA - ${OPENSSL_CLI} s_client -host localhost -tls1 -port "${PORT}" -cert "${ECC256_CERT}" -key "${ECC256_KEY}" -CAfile "${CA_ECC_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -host localhost -cipher ALL:@SECLEVEL=1 -tls1 -port "${PORT}" -cert "${ECC256_CERT}" -key "${ECC256_KEY}" -CAfile "${CA_ECC_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} @@ -599,13 +689,13 @@ run_server_suite() { wait_server ${PID} #-cipher ECDHE-ECDSA-AES128-SHA - ${OPENSSL_CLI} s_client -host localhost -tls1 -port "${PORT}" -cert "${ECC384_CERT}" -key "${ECC384_KEY}" -CAfile "${CA_ECC_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -host localhost -cipher ALL:@SECLEVEL=1 -tls1 -port "${PORT}" -cert "${ECC384_CERT}" -key "${ECC384_KEY}" -CAfile "${CA_ECC_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} wait - if test "${FIPS}" != 1; then + if test "${FIPS_CURVES}" != 1; then echo "${PREFIX}Check TLS 1.0 with ECDHE-ECDSA ciphersuite (SECP521R1)" eval "${GETPORT}" launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.0:+ECDHE-ECDSA:+CURVE-ALL${ADD}" --x509certfile "${ECC521_CERT}" --x509keyfile "${ECC521_KEY}" --x509cafile "${CA_ECC_CERT}" @@ -613,7 +703,7 @@ run_server_suite() { wait_server ${PID} #-cipher ECDHE-ECDSA-AES128-SHA - ${OPENSSL_CLI} s_client -host localhost -tls1 -port "${PORT}" -cert "${ECC521_CERT}" -key "${ECC521_KEY}" -CAfile "${CA_ECC_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -host localhost -cipher ALL:@SECLEVEL=1 -tls1 -port "${PORT}" -cert "${ECC521_CERT}" -key "${ECC521_KEY}" -CAfile "${CA_ECC_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} @@ -627,13 +717,25 @@ run_server_suite() { wait_server ${PID} #-cipher PSK-AES128-SHA - ${OPENSSL_CLI} s_client -host localhost -psk_identity Client_identity -psk 9e32cf7786321a828ef7668f09fb35db -tls1 -port "${PORT}" crt_file="${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep ":error:" && \ + ${OPENSSL_CLI} s_client -host localhost -psk_identity Client_identity -psk 9e32cf7786321a828ef7668f09fb35db -cipher ALL:@SECLEVEL=1 -tls1 -port "${PORT}" crt_file="${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep ":error:" && \ fail ${PID} "Failed" kill ${PID} wait if test ${NO_TLS1_2} = 0; then + # test resumption + echo "${PREFIX}Check TLS 1.2 with resumption" + eval "${GETPORT}" + launch_server $$ --priority "NORMAL${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" + PID=$! + wait_server ${PID} + + ${OPENSSL_CLI} s_client -host localhost -reconnect -tls1_2 -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait echo "${PREFIX}Check TLS 1.2 with DHE-RSA ciphersuite" eval "${GETPORT}" @@ -641,20 +743,20 @@ run_server_suite() { PID=$! wait_server ${PID} - ${OPENSSL_CLI} s_client -host localhost -tls1_2 -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -cipher DHE -host localhost -tls1_2 -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} wait - if test "${NO_DSS}" != 1; then + if test "${NO_DSS}" = 0; then echo "${PREFIX}Check TLS 1.2 with DHE-DSS ciphersuite" eval "${GETPORT}" - launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256${ADD}" --x509certfile "${SERV_DSA_CERT}" --x509keyfile "${SERV_DSA_KEY}" --dhparams "${DH_PARAMS}" + launch_server $$ --priority "NONE:+CIPHER-ALL:%VERIFY_ALLOW_SIGN_WITH_SHA1:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256${ADD}" --x509certfile "${SERV_DSA_CERT}" --x509keyfile "${SERV_DSA_KEY}" --dhparams "${DH_PARAMS}" PID=$! wait_server ${PID} - ${OPENSSL_CLI} s_client -host localhost -cipher ALL -tls1_2 -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -cipher DHE -host localhost -cipher 'ALL:@SECLEVEL=1' -tls1_2 -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} @@ -674,7 +776,7 @@ run_server_suite() { kill ${PID} wait - if test "${NO_X22519}" = 0 && test "${FIPS}" != 1; then + if test "${HAVE_X22519}" = 0; then echo "${PREFIX}Check TLS 1.2 with ECDHE-RSA ciphersuite (X25519)" eval "${GETPORT}" launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+ECDHE-RSA:+CURVE-X25519${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" @@ -688,7 +790,7 @@ run_server_suite() { wait fi - if test "${FIPS}" != 1; then + if test "${FIPS_CURVES}" != 1; then echo "${PREFIX}Check TLS 1.2 with ECDHE-ECDSA ciphersuite (SECP224R1)" eval "${GETPORT}" launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+ECDHE-ECDSA:+CURVE-SECP224R1:+CURVE-ALL${ADD}" --x509certfile "${ECC224_CERT}" --x509keyfile "${ECC224_KEY}" --x509cafile "${CA_ECC_CERT}" @@ -696,7 +798,7 @@ run_server_suite() { wait_server ${PID} #-cipher ECDHE-ECDSA-AES128-SHA - ${OPENSSL_CLI} s_client -host localhost -tls1_2 -named_curve secp224r1 -port "${PORT}" -cert "${ECC224_CERT}" -key "${ECC224_KEY}" -CAfile "${CA_ECC_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -host localhost -cipher 'ALL:@SECLEVEL=1' -tls1_2 -named_curve secp224r1 -port "${PORT}" -cert "${ECC224_CERT}" -key "${ECC224_KEY}" -CAfile "${CA_ECC_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} @@ -729,7 +831,7 @@ run_server_suite() { kill ${PID} wait - if test "${FIPS}" != 1; then + if test "${FIPS_CURVES}" != 1; then echo "${PREFIX}Check TLS 1.2 with ECDHE-ECDSA ciphersuite (SECP521R1)" eval "${GETPORT}" launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+ECDHE-ECDSA:+CURVE-ALL${ADD}" --x509certfile "${ECC521_CERT}" --x509keyfile "${ECC521_KEY}" --x509cafile "${CA_ECC_CERT}" @@ -766,8 +868,7 @@ run_server_suite() { PID=$! wait_udp_server ${PID} - - ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -dtls1 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cipher 'ALL:@SECLEVEL=1' -dtls1 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} @@ -781,29 +882,82 @@ run_server_suite() { wait_udp_server ${PID} - ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -dtls1 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -cipher DHE -host localhost -port "${PORT}" -cipher 'ALL:@SECLEVEL=1' -dtls1 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} wait + if test "${NO_DSS}" = 0; then + echo "${PREFIX}Check DTLS 1.0 with DHE-DSS ciphersuite" + eval "${GETPORT}" + launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-DTLS1.0:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256${ADD}" --udp --x509certfile "${SERV_DSA_CERT}" --x509keyfile "${SERV_DSA_KEY}" --dhparams "${DH_PARAMS}" + PID=$! + wait_udp_server ${PID} - echo "${PREFIX}Check DTLS 1.0 with DHE-DSS ciphersuite" + + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cipher 'ALL:@SECLEVEL=1' -dtls1 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait + fi + + echo "${PREFIX}Check DTLS 1.2 with AES-CBC" eval "${GETPORT}" - launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-DTLS1.0:+DHE-DSS:+SIGN-DSA-SHA1:+SIGN-DSA-SHA256${ADD}" --udp --x509certfile "${SERV_DSA_CERT}" --x509keyfile "${SERV_DSA_KEY}" --dhparams "${DH_PARAMS}" + launch_server $$ --priority "NONE:+AES-128-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-DTLS1.2:+RSA${ADD}" --udp --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" --dhparams "${DH_PARAMS}" PID=$! wait_udp_server ${PID} + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -dtls1_2 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo "${PREFIX}Check DTLS 1.2 with RSA ciphersuite" + eval "${GETPORT}" + launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-DTLS1.2:+RSA${ADD}" --udp --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" --dhparams "${DH_PARAMS}" + PID=$! + wait_udp_server ${PID} - ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cipher ALL -dtls1 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -dtls1_2 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ fail ${PID} "Failed" kill ${PID} wait + + + echo "${PREFIX}Check DTLS 1.2 with DHE-RSA ciphersuite" + eval "${GETPORT}" + launch_server $$ --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-DTLS1.2:+DHE-RSA${ADD}" --udp --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" --dhparams "${DH_PARAMS}" + PID=$! + wait_udp_server ${PID} + + + ${OPENSSL_CLI} s_client -cipher DHE -host localhost -port "${PORT}" -dtls1_2 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo "${PREFIX}Check DTLS 1.2 with ECDHE-RSA" + eval "${GETPORT}" + launch_server $$ --priority "NONE:+GROUP-ALL:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-DTLS1.2:+ECDHE-RSA${ADD}" --udp --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" + PID=$! + wait_udp_server ${PID} + + + ${OPENSSL_CLI} s_client -cipher ECDHE -host localhost -port "${PORT}" -dtls1_2 -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait + } WAITPID="" -for mod in "" ":%COMPAT" ":%NO_ETM" ":%NO_TICKETS" ":%DISABLE_SAFE_RENEGOTIATION"; do +for mod in "" ":%COMPAT" ":%NO_ETM" ":%NO_TICKETS" ":%DISABLE_SAFE_RENEGOTIATION" ":%SAFE_RENEGOTIATION"; do run_server_suite $mod & WAITPID="$WAITPID $!" done diff --git a/tests/suite/testcompat-oldgnutls.sh b/tests/suite/testcompat-oldgnutls.sh new file mode 100755 index 0000000000..2ec96b20c2 --- /dev/null +++ b/tests/suite/testcompat-oldgnutls.sh @@ -0,0 +1,202 @@ +#!/bin/bash + +# Copyright (c) 2010-2016, Free Software Foundation, Inc. +# Copyright (c) 2012-2018, Nikos Mavrogiannopoulos +# All rights reserved. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# 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. +# 3. Neither the name of the copyright holder 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 THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +abs_top_srcdir="${abs_top_srcdir:-$(pwd)/../../}" +srcdir="${srcdir:-.}" +CLI="${CLI:-../../src/gnutls-cli${EXEEXT}}" +TMPFILE=testcompat-oldgnutls.$$.tmp + +# This assumes a root directory in /usr/local/OLDGNUTLS containing the +# gnutls client and server + +if ! test -x "${CLI}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +LDPATH=/usr/local/OLDGNUTLS/lib/x86_64-linux-gnu:/usr/local/OLDGNUTLS/usr/lib/x86_64-linux-gnu + +. "${srcdir}/../scripts/common.sh" + +check_for_datefudge + +. "${srcdir}/testcompat-common" + +PORT="${PORT:-${RPORT}}" + +SERV=/usr/local/OLDGNUTLS/usr/bin/gnutls-serv + +if test -z "$OUTPUT";then +OUTPUT=/dev/null +fi + +>${OUTPUT} + +echo_cmd() { + tee -a ${OUTPUT} <<<$(echo $1) +} + +echo_cmd "Compatibility checks using "`${SERV} version` + +echo_cmd "####################################################" +echo_cmd "# Client mode tests (new cli-gnutls 2.12.x server) #" +echo_cmd "####################################################" + +run_client_suite() { + ADD=$1 + PREFIX="" + if ! test -z "${ADD}"; then + PREFIX="$(echo $ADD|sed 's/://g'): " + fi + + eval "${GETPORT}" + LD_LIBRARY_PATH=$LDPATH launch_server $$ --priority "NORMAL:+SHA256${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" --dhparams "${DH_PARAMS}" + PID=$! + wait_server ${PID} + + # Test TLS 1.0 with RSA ciphersuite + echo "${PREFIX}Checking TLS 1.0 with RSA and AES-128-CBC..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-128-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.0:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.0 with RSA and AES-256-CBC..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-256-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.0:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + # Test TLS 1.0 with DHE-RSA ciphersuite + echo "${PREFIX}Checking TLS 1.0 with DHE-RSA..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.0:+DHE-RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.2 with RSA and AES-128-CBC..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-128-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.2 with RSA and AES-256-CBC..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-256-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.2 with DHE-RSA..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+DHE-RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.2 with RSA, AES-CBC and long packet..." + head -c 16384 /dev/zero|tr \\0 a >${TMPFILE} + echo >>${TMPFILE} + ${VALGRIND} "${CLI}" -d 6 ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-128-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" <${TMPFILE} >/dev/null || + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.2 with RSA, AES-CBC-SHA256 and long packet..." + head -c 16384 /dev/zero|tr \\0 a >${TMPFILE} + echo >>${TMPFILE} + ${VALGRIND} "${CLI}" -d 6 ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-128-CBC:+SIGN-ALL:+COMP-NULL:+SHA256:+VERS-TLS1.2:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" <${TMPFILE} >/dev/null || + fail ${PID} "Failed" + + kill ${PID} + wait +} + +run_client_suite + +echo_cmd "${PREFIX}Client mode tests were successfully completed" +echo_cmd "${PREFIX}" +echo_cmd "${PREFIX}###############################################" +echo_cmd "${PREFIX}# Server mode tests (new server-old cli) #" +echo_cmd "${PREFIX}###############################################" +SERV="../../src/gnutls-serv${EXEEXT} -q" +CLI=/usr/local/OLDGNUTLS/usr/bin/gnutls-cli + +run_server_suite() { + ADD=$1 + PREFIX="" + if ! test -z "${ADD}"; then + PREFIX="$(echo $ADD|sed 's/://g'): " + fi + + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:+SHA256${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" --dhparams "${DH_PARAMS}" + PID=$! + wait_server ${PID} + + echo "${PREFIX}Checking TLS 1.0 with RSA and AES-128-CBC..." + LD_LIBRARY_PATH=$LDPATH "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-128-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.0:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.0 with RSA and AES-256-CBC..." + LD_LIBRARY_PATH=$LDPATH "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-256-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.0:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.0 with DHE-RSA..." + LD_LIBRARY_PATH=$LDPATH "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.0:+DHE-RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.2 with RSA and AES-128-CBC..." + LD_LIBRARY_PATH=$LDPATH "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-128-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.2 with RSA and AES-256-CBC..." + LD_LIBRARY_PATH=$LDPATH "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-256-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.2 with DHE-RSA..." + LD_LIBRARY_PATH=$LDPATH "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+CIPHER-ALL:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+DHE-RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" /dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.2 with RSA, AES-CBC and long packet..." + head -c 16384 /dev/zero|tr \\0 a >${TMPFILE} + echo >>${TMPFILE} + LD_LIBRARY_PATH=$LDPATH "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-128-CBC:+SIGN-ALL:+COMP-NULL:+MAC-ALL:+VERS-TLS1.2:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" <${TMPFILE} >/dev/null || \ + fail ${PID} "Failed" + + echo "${PREFIX}Checking TLS 1.2 with RSA, AES-CBC-SHA256 and long packet..." + head -c 16384 /dev/zero|tr \\0 a >${TMPFILE} + echo >>${TMPFILE} + LD_LIBRARY_PATH=$LDPATH "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NONE:+AES-128-CBC:+SIGN-ALL:+COMP-NULL:+SHA256:+VERS-TLS1.2:+RSA${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" <${TMPFILE} >/dev/null || \ + fail ${PID} "Failed" + + kill ${PID} + wait + +} + +run_server_suite + +rm -f ${TMPFILE} + +exit 0 diff --git a/tests/suite/testcompat-openssl.sh b/tests/suite/testcompat-openssl.sh index cec0c7161e..bfc59c09ac 100755 --- a/tests/suite/testcompat-openssl.sh +++ b/tests/suite/testcompat-openssl.sh @@ -44,19 +44,17 @@ fi /usr/bin/openssl version|grep fips >/dev/null 2>&1 if test $? = 0 || test "${ENABLE_NON_SUITEB_CURVES}" != "1"; then - export FIPS=1 + export FIPS_CURVES=1 else - export FIPS=0 + export FIPS_CURVES=0 fi export TZ="UTC" # Check for datefudge -TSTAMP=`datefudge "2006-09-23 00:00 UTC" date -u +%s 2>/dev/null` -if test "${TSTAMP}" != "1158969600"; then - echo "You need datefudge to run this test" - exit 77 -fi +. "${srcdir}/../scripts/common.sh" + +check_for_datefudge timeout 1800 datefudge "2012-09-2" "${srcdir}/testcompat-main-openssl" diff --git a/tests/suite/testcompat-polarssl.sh b/tests/suite/testcompat-polarssl.sh index 4c7a493d17..1af0099dca 100755 --- a/tests/suite/testcompat-polarssl.sh +++ b/tests/suite/testcompat-polarssl.sh @@ -40,11 +40,9 @@ if test "${GNUTLS_FORCE_FIPS_MODE}" = 1;then fi # Check for datefudge -TSTAMP=`datefudge "2006-09-23 00:00 UTC" date -u +%s 2>/dev/null` -if test "${TSTAMP}" != "1158969600"; then - echo "You need datefudge to run this test" - exit 77 -fi +. "${srcdir}/../scripts/common.sh" + +check_for_datefudge cat /proc/cpuinfo|grep "model name"|grep "VIA Esther" >/dev/null 2>&1 if test $? = 0; then diff --git a/tests/suite/testcompat-tls13-openssl.sh b/tests/suite/testcompat-tls13-openssl.sh new file mode 100755 index 0000000000..128873ab23 --- /dev/null +++ b/tests/suite/testcompat-tls13-openssl.sh @@ -0,0 +1,609 @@ +#!/bin/bash + +# Copyright (c) 2010-2016, Free Software Foundation, Inc. +# Copyright (c) 2012-2018, Nikos Mavrogiannopoulos +# All rights reserved. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# 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. +# 3. Neither the name of the copyright holder 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 THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + +abs_top_srcdir="${abs_top_srcdir:-$(pwd)/../../}" +srcdir="${srcdir:-.}" +CLI="${CLI:-../../src/gnutls-cli${EXEEXT}}" +unset RETCODE + +if ! test -x "${CLI}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND}" +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +. "${srcdir}/../scripts/common.sh" + +check_for_datefudge + +. "${srcdir}/testcompat-common" + +PORT="${PORT:-${RPORT}}" + +SERV=openssl +OPENSSL_CLI="$SERV" + +if test -z "$OUTPUT";then +OUTPUT=/dev/null +fi + +>${OUTPUT} + +echo_cmd() { + tee -a ${OUTPUT} <<<$(echo $1) +} + +echo_cmd "Compatibility checks using "`${SERV} version` + +echo_cmd "#################################################" +echo_cmd "# Client mode tests (gnutls cli-openssl server) #" +echo_cmd "#################################################" + +OCIPHERSUITES="TLS_AES_128_CCM_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_CCM_8_SHA256" + +run_client_suite() { + ADD=$1 + PREFIX="" + if ! test -z "${ADD}"; then + PREFIX="$(echo $ADD|sed 's/://g'): " + fi + + + eval "${GETPORT}" + launch_bare_server $$ s_server -ciphersuites ${OCIPHERSUITES} -groups 'X25519:P-256:X448:P-521:P-384' -quiet -www -accept "${PORT}" -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -CAfile "${CA_CERT}" + PID=$! + wait_server ${PID} + + #AES-128-CCM + for i in AES-128-GCM AES-256-GCM CHACHA20-POLY1305 AES-128-CCM AES-128-CCM-8;do + echo_cmd "${PREFIX}Checking TLS 1.3 with ${i}..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+${i}${ADD}" --insecure >${OUTPUT} || \ + fail ${PID} "Failed" + done + + for i in GROUP-X25519 GROUP-SECP256R1 GROUP-SECP384R1 GROUP-SECP521R1;do + echo_cmd "${PREFIX}Checking TLS 1.3 with $i..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+${i}${ADD}" --insecure >${OUTPUT} || \ + fail ${PID} "Failed" + done + + echo_cmd "${PREFIX}Checking TLS 1.3 with double rekey..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --insecure --inline-commands <<<$(echo -e "^rekey^\n^rekey1^\nGET / HTTP/1.0\r\n\r\n") >>${OUTPUT} || \ + fail ${PID} "Failed" + + # Try hello retry request + echo_cmd "${PREFIX}Checking TLS 1.3 with HRR..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --single-key-share --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-FFDHE4096:+GROUP-SECP256R1${ADD}" --insecure >${OUTPUT} || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + + #test PSK ciphersuites + # disabled as I do not seem to be able to connect to openssl s_server with PSK + eval "${GETPORT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -psk_identity ${PSKID} -psk ${PSKKEY} -nocert + PID=$! + wait_server ${PID} + +# by default only SHA256 is supported under PSK as PRF, so we cannot try all +# ciphers; only the ones which use SHA256 PRF. + for i in AES-128-GCM;do +# plain PSK with (EC)DHE not supported by openssl +# echo_cmd "${PREFIX}Checking TLS 1.3 with PSK with ${i}..." +# ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:-CIPHER-ALL:+${i}${ADD}" --pskusername ${PSKID} --pskkey ${PSKKEY} >${OUTPUT} || \ + fail ${PID} "Failed" + done + + kill ${PID} + wait + + #test client certificates + eval "${GETPORT}" + launch_bare_server $$ s_server -cipher "ALL" -quiet -www -accept "${PORT}" -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -Verify 1 -CAfile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + for i in GROUP-SECP256R1;do + echo_cmd "${PREFIX}Checking TLS 1.3 with RSA client cert and $i..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+${i}${ADD}" --insecure --x509certfile "${CLI_CERT}" --x509keyfile "${CLI_KEY}" >${OUTPUT} || \ + fail ${PID} "Failed" + + echo_cmd "${PREFIX}Checking TLS 1.3 with secp256r1 client cert and $i..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+${i}${ADD}" --insecure --x509certfile "${ECC_CLI_CERT}" --x509keyfile "${ECC_CLI_KEY}" >${OUTPUT} || \ + fail ${PID} "Failed" + + echo_cmd "${PREFIX}Checking TLS 1.3 with Ed25519 client cert and $i..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+${i}${ADD}" --insecure --x509certfile "${ED25519_CLI_CERT}" --x509keyfile "${ED25519_CLI_KEY}" >${OUTPUT} || \ + fail ${PID} "Failed" + + echo_cmd "${PREFIX}Checking TLS 1.3 with RSA-PSS client cert and $i..." + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+${i}${ADD}" --insecure --x509certfile "${RSA_PSS_CLI_CERT}" --x509keyfile "${RSA_PSS_CLI_KEY}" >${OUTPUT} || \ + fail ${PID} "Failed" + done + + kill ${PID} + wait + + echo_cmd "${PREFIX}Checking TLS 1.3 with Ed25519 certificate..." + eval "${GETPORT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${ED25519_KEY}" -cert "${ED25519_CERT}" -CAfile "${CA_CERT}" + PID=$! + wait_server ${PID} + + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --insecure >${OUTPUT} || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo_cmd "${PREFIX}Checking TLS 1.3 with Ed448 certificate..." + eval "${GETPORT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${ED448_KEY}" -cert "${ED448_CERT}" -CAfile "${CA_CERT}" + PID=$! + wait_server ${PID} + + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --insecure >${OUTPUT} || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo_cmd "${PREFIX}Checking TLS 1.3 with secp256r1 certificate..." + eval "${GETPORT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${ECC_KEY}" -cert "${ECC_CERT}" -CAfile "${CA_CERT}" + PID=$! + wait_server ${PID} + + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --insecure >${OUTPUT} || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo_cmd "${PREFIX}Checking TLS 1.3 with RSA-PSS certificate..." + eval "${GETPORT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_PSS_KEY}" -cert "${RSA_PSS_CERT}" -CAfile "${CA_CERT}" + PID=$! + wait_server ${PID} + + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --insecure >${OUTPUT} || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + # Try resumption + echo_cmd "${PREFIX}Checking TLS 1.3 with resumption..." + testdir=`create_testdir tls13-openssl-resumption` + eval "${GETPORT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -CAfile "${CA_CERT}" + PID=$! + wait_server ${PID} + + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:+GROUP-ALL${ADD}" --insecure --inline-commands <<< $(echo -e "^resume^\nGET / HTTP/1.0\r\n\r\n")| tee "${testdir}/client.out" >> ${OUTPUT} + grep '^\*\*\* This is a resumed session' "${testdir}/client.out" || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + # Try resumption with HRR + echo_cmd "${PREFIX}Checking TLS 1.3 with resumption and HRR..." + eval "${GETPORT}" + launch_bare_server $$ s_server -quiet -www -accept "${PORT}" -groups 'X25519:P-256' -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -CAfile "${CA_CERT}" + PID=$! + wait_server ${PID} + + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-SECP256R1${ADD}" --single-key-share --insecure --inline-commands <<< $(echo -e "^resume^\nGET / HTTP/1.0\r\n\r\n")| tee "${testdir}/client.out" >> ${OUTPUT} + grep '^\*\*\* This is a resumed session' "${testdir}/client.out" || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + # Try resumption with early data + echo_cmd "${PREFIX}Checking TLS 1.3 with resumption with early data..." + testdir=`create_testdir tls13-openssl-resumption` + eval "${GETPORT}" + launch_bare_server $$ s_server -quiet -accept "${PORT}" -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -CAfile "${CA_CERT}" -early_data + PID=$! + wait_server ${PID} + + echo "This file contains early data sent by the client" > "${testdir}/earlydata.txt" + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:+GROUP-ALL${ADD}" --earlydata "${testdir}/earlydata.txt" --insecure --inline-commands <<< '^resume^'| tee "${testdir}/client.out" >> ${OUTPUT} + grep '^\*\*\* This is a resumed session' "${testdir}/client.out" || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + # Try resumption with early data with small limit + echo_cmd "${PREFIX}Checking TLS 1.3 with resumption with early data..." + testdir=`create_testdir tls13-openssl-resumption` + eval "${GETPORT}" + launch_bare_server $$ s_server -quiet -accept "${PORT}" -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -CAfile "${CA_CERT}" -early_data -max_early_data 1 + PID=$! + wait_server ${PID} + + echo "This file contains early data sent by the client" > "${testdir}/earlydata.txt" + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:+GROUP-ALL${ADD}" --earlydata "${testdir}/earlydata.txt" --insecure --inline-commands <<< '^resume^'|& tee "${testdir}/client.out" >> ${OUTPUT} + grep '^\*\*\* This is a resumed session' "${testdir}/client.out" || \ + fail ${PID} "Failed" + grep '^\*\*\* Received alert \[10\]: Unexpected message' "${testdir}/client.out" || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + # Try exporting keying material + echo_cmd "${PREFIX}Checking TLS 1.3 to export keying material..." + testdir=`create_testdir tls13-openssl-keymatexport` + eval "${GETPORT}" + LOGFILE="${testdir}/server.out" + launch_bare_server $$ s_server -accept "${PORT}" -keyform pem -certform pem ${OPENSSL_DH_PARAMS_OPT} -key "${RSA_KEY}" -cert "${RSA_CERT}" -CAfile "${CA_CERT}" -keymatexport label -keymatexportlen 20 + unset LOGFILE + PID=$! + wait_server ${PID} + + ${VALGRIND} "${CLI}" ${DEBUG} -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:+GROUP-ALL${ADD}" --keymatexport label --keymatexportsize 20| tee "${testdir}/client.out" >> ${OUTPUT} + grep '^- Key material: ' "${testdir}/client.out" | \ + sed -e 's/^.*: //' -e 'y/abcdef/ABCDEF/' > "${testdir}/client.key" || \ + fail ${PID} "Failed" + grep '^ Keying material: ' "${testdir}/server.out" | \ + sed -e 's/^.*: //' -e 'y/abcdef/ABCDEF/' > "${testdir}/server.key" || \ + fail ${PID} "Failed" + diff "${testdir}/client.key" "${testdir}/server.key" || \ + fail ${PID} "Failed" + kill ${PID} + wait + + rm -rf "${testdir}" + +} + +run_client_suite + +echo_cmd "${PREFIX}Client mode tests were successfully completed" +echo_cmd "${PREFIX}" +echo_cmd "${PREFIX}###############################################" +echo_cmd "${PREFIX}# Server mode tests (gnutls server-openssl cli#" +echo_cmd "${PREFIX}###############################################" +SERV="../../src/gnutls-serv${EXEEXT} -q" + +# Note that openssl s_client does not return error code on failure + +run_server_suite() { + ADD=$1 + PREFIX="" + if ! test -z "${ADD}"; then + PREFIX="$(echo $ADD|sed 's/://g'): " + fi + + #AES-128-CCM + for i in AES-128-GCM AES-256-GCM CHACHA20-POLY1305 AES-128-CCM AES-128-CCM-8;do + echo_cmd "${PREFIX}Checking TLS 1.3 with ${i}..." + + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+${i}${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + ${OPENSSL_CLI} s_client -ciphersuites ${OCIPHERSUITES} -host localhost -port "${PORT}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait + done + + GROUPS="GROUP-X25519 GROUP-X448 GROUP-SECP256R1 GROUP-SECP384R1 GROUP-SECP521R1" + for i in $GROUPS;do + echo_cmd "${PREFIX}Checking TLS 1.3 with ${i}..." + + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+${i}${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait + done + + echo_cmd "${PREFIX}Checking TLS 1.3 with HRR..." + eval "${GETPORT}" + launch_server $$ --echo --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP384R1${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + ${OPENSSL_CLI} s_client -groups 'X25519:P-256:X448:P-521:P-384' -host localhost -port "${PORT}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + echo_cmd "${PREFIX}Checking TLS 1.3 with rekey..." + expect - >/dev/null <<_EOF_ +set timeout 10 +set os_error_flag 1 +spawn ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -CAfile "${CA_CERT}" + +expect "SSL-Session" {send "K\n"} timeout {exit 1} +expect "KEYUPDATE" {send "HELLO\n"} timeout {exit 1} +expect "HELLO" {close} timeout {exit 1} + +lassign [wait] pid spawnid os_error_flag value +if {\$os_error_flag == 0} { + exit $value +} else { + exit 1 +} +_EOF_ + if test $? != 0;then + fail ${PID} "Failed" + fi + + kill ${PID} + wait + + # client certificates + + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --require-client-cert --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + echo_cmd "${PREFIX}Checking TLS 1.3 with RSA client certificate..." + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + echo_cmd "${PREFIX}Checking TLS 1.3 with RSA-PSS client certificate..." + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cert "${RSA_PSS_CLI_CERT}" -key "${RSA_PSS_CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + echo_cmd "${PREFIX}Checking TLS 1.3 with secp256r1 client certificate..." + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cert "${ECC_CLI_CERT}" -key "${ECC_CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + echo_cmd "${PREFIX}Checking TLS 1.3 with Ed25519 client certificate..." + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cert "${ED25519_CLI_CERT}" -key "${ED25519_CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + echo_cmd "${PREFIX}Checking TLS 1.3 with Ed448 client certificate..." + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cert "${ED448_CLI_CERT}" -key "${ED448_CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo_cmd "${PREFIX}Checking TLS 1.3 with post handshake auth..." + + eval "${GETPORT}" + launch_server $$ --echo --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --x509certfile "${SERV_CERT}" --x509keyfile "${SERV_KEY}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + expect - >/dev/null <<_EOF_ +set timeout 10 +set os_error_flag 1 +spawn ${OPENSSL_CLI} s_client -enable_pha -host localhost -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" + +expect "SSL-Session" {send "**REAUTH**\n"} timeout {exit 1} +expect { + timeout {exit 1} + "error*" {exit 1} + "Successfully executed command" {send "**REAUTH**\n"} +} +expect { + timeout {exit 1} + "error*" {exit 1} + "Successfully executed command" {send "HELLO\n"} +} + +expect "HELLO" {close} timeout {exit 1} + +lassign [wait] pid spawnid os_error_flag value +if {\$os_error_flag == 0} { + exit $value +} else { + exit 1 +} +_EOF_ + if test $? != 0;then + fail ${PID} "Failed" + fi + + kill ${PID} + wait + + + echo_cmd "${PREFIX}Checking TLS 1.3 with Ed25519 certificate..." + + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --x509certfile "${ED25519_CERT}" --x509keyfile "${ED25519_KEY}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo_cmd "${PREFIX}Checking TLS 1.3 with Ed448 certificate..." + + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --x509certfile "${ED448_CERT}" --x509keyfile "${ED448_KEY}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo_cmd "${PREFIX}Checking TLS 1.3 with secp256r1 certificate..." + + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --x509certfile "${ECC_CERT}" --x509keyfile "${ECC_KEY}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo_cmd "${PREFIX}Checking TLS 1.3 with RSA-PSS certificate..." + + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --x509certfile "${RSA_PSS_CERT}" --x509keyfile "${RSA_PSS_KEY}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -cert "${CLI_CERT}" -key "${CLI_KEY}" -CAfile "${CA_CERT}" &1 | grep "\:error\:" && \ + fail ${PID} "Failed" + + kill ${PID} + wait + + + # openssl doesn't support PSK + for i in DHE-PSK;do + echo_cmd "${PREFIX}Checking TLS 1.3 with ${i}..." + + eval "${GETPORT}" + launch_server $$ --pskpasswd "${SERV_PSK}" --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+${i}${ADD}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -psk_identity "${PSKID}" -psk "${PSKKEY}" >${OUTPUT} || \ + fail ${PID} "Failed" + + kill ${PID} + wait + done + + # Try resumption + echo_cmd "${PREFIX}Checking TLS 1.3 with resumption..." + testdir=`create_testdir tls13-openssl-resumption` + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --x509certfile "${RSA_CERT}" --x509keyfile "${RSA_KEY}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + { echo a; sleep 1; } | \ + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -CAfile "${CA_CERT}" -sess_out "${testdir}/sess.pem" 2>&1 | grep "\:error\:" && \ + fail ${PID} "Failed" + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -CAfile "${CA_CERT}" -sess_in "${testdir}/sess.pem" &1 > "${testdir}/server.out" + grep "\:error\:" "${testdir}/server.out" && \ + fail ${PID} "Failed" + grep "^Reused, TLSv1.3" "${testdir}/server.out" || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo_cmd "${PREFIX}Checking TLS 1.3 with resumption and HRR..." + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-256-GCM:-GROUP-ALL:+GROUP-SECP384R1${ADD}" --x509certfile "${RSA_CERT}" --x509keyfile "${RSA_KEY}" --x509cafile "${CA_CERT}" >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + { echo a; sleep 1; } | \ + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -curves 'X25519:P-256:X448:P-521:P-384' -CAfile "${CA_CERT}" -sess_out "${testdir}/sess-hrr.pem" 2>&1 | grep "\:error\:" && \ + fail ${PID} "Failed" + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -curves 'X25519:P-256:X448:P-521:P-384' -CAfile "${CA_CERT}" -sess_in "${testdir}/sess-hrr.pem" &1 > "${testdir}/server.out" + grep "\:error\:" "${testdir}/server.out" && \ + fail ${PID} "Failed" + grep "^Reused, TLSv1.3" "${testdir}/server.out" || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo_cmd "${PREFIX}Checking TLS 1.3 with resumption and early data..." + testdir=`create_testdir tls13-openssl-resumption` + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --x509certfile "${RSA_CERT}" --x509keyfile "${RSA_KEY}" --x509cafile "${CA_CERT}" --earlydata >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + echo "This file contains early data sent by the client" > "${testdir}/earlydata.txt" + { echo a; sleep 1; } | \ + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -CAfile "${CA_CERT}" -sess_out "${testdir}/sess-earlydata.pem" 2>&1 | grep "\:error\:" && \ + fail ${PID} "Failed" + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -CAfile "${CA_CERT}" -sess_in "${testdir}/sess-earlydata.pem" -early_data "${testdir}/earlydata.txt" &1 > "${testdir}/server.out" + grep "\:error\:" "${testdir}/server.out" && \ + fail ${PID} "Failed" + grep "^Reused, TLSv1.3" "${testdir}/server.out" || \ + fail ${PID} "Failed" + + kill ${PID} + wait + + echo_cmd "${PREFIX}Checking TLS 1.3 with resumption and early data with small limit..." + testdir=`create_testdir tls13-openssl-resumption` + eval "${GETPORT}" + launch_server $$ --priority "NORMAL:-VERS-ALL:+VERS-TLS1.3${ADD}" --x509certfile "${RSA_CERT}" --x509keyfile "${RSA_KEY}" --x509cafile "${CA_CERT}" --earlydata --maxearlydata 1 >>${OUTPUT} 2>&1 + PID=$! + wait_server ${PID} + + echo "This file contains early data sent by the client" > "${testdir}/earlydata.txt" + { echo a; sleep 1; } | \ + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -CAfile "${CA_CERT}" -sess_out "${testdir}/sess-earlydata.pem" 2>&1 | grep "\:error\:" && \ + fail ${PID} "Failed" + ${OPENSSL_CLI} s_client -host localhost -port "${PORT}" -CAfile "${CA_CERT}" -sess_in "${testdir}/sess-earlydata.pem" -early_data "${testdir}/earlydata.txt" &1 > "${testdir}/server.out" + grep "^Early data was rejected" "${testdir}/server.out" || \ + fail ${PID} "Failed" + + kill ${PID} + wait + rm -rf "${testdir}" + +} + +run_server_suite + +exit 0 diff --git a/tests/suite/testdane.sh b/tests/suite/testdane.sh index 2f1cb6e7b9..6fb56d2f8c 100755 --- a/tests/suite/testdane.sh +++ b/tests/suite/testdane.sh @@ -38,8 +38,8 @@ fi echo "" echo "*** Testing good HTTPS hosts ***" -# www.vulcano.cl dane.nox.su -HOSTS="good.dane.verisignlabs.com www.freebsd.org www.kumari.net torproject.org fedoraproject.org" +# www.vulcano.cl dane.nox.su www.kumari.net +HOSTS="good.dane.verisignlabs.com www.freebsd.org torproject.org fedoraproject.org" #HOSTS="${HOSTS} nohats.ca" for host in ${HOSTS}; do diff --git a/tests/suite/testpkcs11.sh b/tests/suite/testpkcs11.sh deleted file mode 100755 index b3001ca1e6..0000000000 --- a/tests/suite/testpkcs11.sh +++ /dev/null @@ -1,836 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2013 Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# GnuTLS is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at -# your option) any later version. -# -# GnuTLS is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -srcdir="${srcdir:-.}" -P11TOOL="${P11TOOL:-../../src/p11tool${EXEEXT}}" -CERTTOOL="${CERTTOOL:-../../src/certtool${EXEEXT}}" -DIFF="${DIFF:-diff -b -B}" -SERV="${SERV:-../../src/gnutls-serv${EXEEXT}}" -CLI="${CLI:-../../src/gnutls-cli${EXEEXT}}" -RETCODE=0 - -if test "${GNUTLS_FORCE_FIPS_MODE}" = 1;then - echo "Cannot run in FIPS140-2 mode" - exit 77 -fi - -if ! test -x "${P11TOOL}"; then - exit 77 -fi - -if ! test -x "${CERTTOOL}"; then - exit 77 -fi - -if ! test -x "${SERV}"; then - exit 77 -fi - -if ! test -x "${CLI}"; then - exit 77 -fi - -if ! test -z "${VALGRIND}"; then - VALGRIND="${LIBTOOL:-libtool} --mode=execute valgrind --leak-check=full" -fi - -TMPFILE="testpkcs11.debug" -CERTTOOL_PARAM="--stdout-info" - -if test "${WINDIR}" != ""; then - exit 77 -fi - -P11TOOL="${VALGRIND} ${P11TOOL} --batch" -SERV="${SERV} -q" - -. ${srcdir}/../scripts/common.sh - -rm -f "${TMPFILE}" - -exit_error () { - echo "check ${TMPFILE} for additional debugging information" - echo "" - echo "" - tail "${TMPFILE}" - exit 1 -} - -# $1: token -# $2: PIN -# $3: filename -# ${srcdir}/pkcs11-certs/client.key -write_privkey () { - export GNUTLS_PIN="$2" - filename="$3" - token="$1" - - echo -n "* Writing a client private key... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label gnutls-client2 --load-privkey "${filename}" "${token}" >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit_error - fi - - echo -n "* Checking whether object was marked private... " - ${P11TOOL} ${ADDITIONAL_PARAM} --list-privkeys "${token};object=gnutls-client2" 2>/dev/null | grep 'Label\:' >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo "private object was public" - exit_error - fi - echo ok - -} - -# $1: token -# $2: PIN -# $3: filename -write_serv_privkey () { - export GNUTLS_PIN="$2" - filename="$3" - token="$1" - - echo -n "* Writing the server private key... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label serv-key --load-privkey "${filename}" "${token}" >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit_error - fi - -} - -# $1: token -# $2: PIN -# $3: filename -write_serv_pubkey () { - export GNUTLS_PIN="$2" - filename="$3" - token="$1" - - echo -n "* Writing the server public key... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label serv-pubkey --load-pubkey "${filename}" "${token}" >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit_error - fi - - #verify it being written - ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-all "${token};object=serv-pubkey;type=public" >>"${TMPFILE}" 2>&1 - ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-all "${token};object=serv-pubkey;type=public"|grep "Public key" >/dev/null 2>&1 - if test $? != 0;then - echo "Cannot verify the existence of the written pubkey" - exit_error - fi -} - -# $1: token -# $2: PIN -# $3: filename -write_serv_cert () { - export GNUTLS_PIN="$2" - filename="$3" - token="$1" - - echo -n "* Writing the server certificate... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --no-mark-private --label serv-cert --load-certificate "${filename}" "${token}" >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit_error - fi - -} - -# $1: token -# $2: PIN -# $3: bits -generate_rsa_privkey () { - export GNUTLS_PIN="$2" - token="$1" - bits="$3" - - echo -n "* Generating RSA private key ("${bits}")... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --id 000102030405 --label gnutls-client --generate-rsa --bits "${bits}" "${token}" --outfile tmp-client.pub >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit 1 - fi -} - -# $1: token -# $2: PIN -# $3: bits -generate_temp_rsa_privkey () { - export GNUTLS_PIN="$2" - token="$1" - bits="$3" - - echo -n "* Generating RSA private key ("${bits}")... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --label temp-rsa-"${bits}" --generate-rsa --bits "${bits}" "${token}" --outfile tmp-client.pub >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit 1 - fi - -# if test ${RETCODE} = 0; then -# echo -n "* Testing private key flags... " -# ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-keys "${token};object=gnutls-client2;object-type=private" >tmp-client-2.pub 2>>"${TMPFILE}" -# if test $? != 0; then -# echo failed -# exit_error -# fi -# -# grep CKA_WRAP tmp-client-2.pub >>"${TMPFILE}" 2>&1 -# if test $? != 0; then -# echo "failed (no CKA_WRAP)" -# exit_error -# else -# echo ok -# fi -# fi -} - -generate_temp_dsa_privkey () { - export GNUTLS_PIN="$2" - token="$1" - bits="$3" - - echo -n "* Generating DSA private key ("${bits}")... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --label temp-dsa-"${bits}" --generate-dsa --bits "${bits}" "${token}" --outfile tmp-client.pub >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit 1 - fi -} - -# $1: token -# $2: PIN -delete_temp_privkey () { - export GNUTLS_PIN="$2" - token="$1" - type="$3" - - test "${RETCODE}" = "0" || return - - echo -n "* Deleting private key... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --delete "${token};object=temp-${type};object-type=private" >>"${TMPFILE}" 2>&1 - - if test $? != 0; then - echo failed - RETCODE=1 - return - fi - - RETCODE=0 - echo ok -} - -# $1: token -# $2: PIN -# $3: bits -export_pubkey_of_privkey () { - export GNUTLS_PIN="$2" - token="$1" - bits="$3" - - echo -n "* Exporting public key of generated private key... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --export-pubkey "${token};object=gnutls-client;object-type=private" --outfile tmp-client-2.pub >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo failed - exit 1 - fi - - ${DIFF} tmp-client.pub tmp-client-2.pub - if test $? != 0; then - echo keys differ - exit 1 - fi - - echo ok -} - -# $1: token -# $2: PIN -change_id_of_privkey () { - export GNUTLS_PIN="$2" - token="$1" - - echo -n "* Change the CKA_ID of generated private key... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --set-id "01a1b103" "${token};object=gnutls-client;id=%00%01%02%03%04%05;object-type=private" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo failed - exit_error - fi - - ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-privkeys "${token};object=gnutls-client;object-type=private;id=%01%a1%b1%03" 2>&1 | grep 'ID: 01:a1:b1:03' >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo "ID didn't change" - exit_error - fi - - echo ok -} - -# $1: token -# $2: PIN -change_label_of_privkey () { - export GNUTLS_PIN="$2" - token="$1" - - echo -n "* Change the CKA_LABEL of generated private key... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --set-label "new-label" "${token};object=gnutls-client;object-type=private" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo failed - exit_error - fi - - ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-privkeys "${token};object=new-label;object-type=private" 2>&1 |grep 'Label: new-label' >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo "label didn't change" - exit_error - fi - - ${P11TOOL} ${ADDITIONAL_PARAM} --login --set-label "gnutls-client" "${token};object=new-label;object-type=private" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo failed - exit_error - fi - - echo ok -} - -# $1: token -# $2: PIN -# $3: bits -generate_temp_ecc_privkey () { - export GNUTLS_PIN="$2" - token="$1" - bits="$3" - - echo -n "* Generating ECC private key (${bits})... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --label "temp-ecc-${bits}" --generate-ecc --bits "${bits}" "${token}" --outfile tmp-client.pub >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit 1 - fi -} - -# $1: name -# $2: label prefix -# $3: generate option -# $4: token -# $5: PIN -# $6: bits -import_privkey () { - export GNUTLS_PIN="$5" - name="$1" - prefix="$2" - gen_option="$3" - token="$4" - bits="$6" - - outfile="tmp-${prefix}-${bits}.pem" - - echo -n "* Importing ${name} private key (${bits})... " - - "${CERTTOOL}" ${CERTTOOL_PARAM} --generate-privkey "${gen_option}" --pkcs8 --password= --outfile "${outfile}" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo failed - exit 1 - fi - - ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label "${prefix}-${bits}" --load-privkey "${outfile}" "${token}" >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit 1 - fi -} - -import_temp_rsa_privkey () { - import_privkey RSA temp-rsa --rsa $@ -} - -import_temp_ecc_privkey () { - import_privkey ECC temp-ecc --ecc $@ -} - -import_temp_dsa_privkey () { - import_privkey DSA temp-dsa --dsa $@ -} - -# $1: token -# $2: PIN -# $3: cakey: ${srcdir}/pkcs11-certs/ca.key -# $4: cacert: ${srcdir}/pkcs11-certs/ca.crt -# -# Tests writing a certificate which corresponds to the given key, -# as well as the CA certificate, and tries to export them. -write_certificate_test () { - export GNUTLS_PIN="$2" - token="$1" - cakey="$3" - cacert="$4" - pubkey="$5" - - echo -n "* Generating client certificate... " - "${CERTTOOL}" ${CERTTOOL_PARAM} ${ADDITIONAL_PARAM} --generate-certificate --load-ca-privkey "${cakey}" --load-ca-certificate "${cacert}" \ - --template ${srcdir}/pkcs11-certs/client-tmpl --load-privkey "${token};object=gnutls-client;object-type=private" \ - --load-pubkey "$pubkey" --outfile tmp-client.crt >>"${TMPFILE}" 2>&1 - - if test $? = 0; then - echo ok - else - echo failed - exit_error - fi - - echo -n "* Writing client certificate... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --id "01a1b103" --label gnutls-client --load-certificate tmp-client.crt "${token}" >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit_error - fi - - echo -n "* Checking whether ID was correctly set... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-certs "${token};object=gnutls-client;object-type=private;id=%01%a1%b1%03" 2>&1 | grep 'ID: 01:a1:b1:03' >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo "ID was not set on copy" - exit_error - fi - echo ok - - if test -n "${BROKEN_SOFTHSM2}";then - return - fi - - echo -n "* Checking whether object was public... " - ${P11TOOL} ${ADDITIONAL_PARAM} --list-all-certs "${token};object=gnutls-client;id=%01%a1%b1%03" 2>&1 | grep 'ID: 01:a1:b1:03' >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo "certificate object was not public" - exit_error - fi - echo ok - - if test -n "${BROKEN_SOFTHSM2}";then - return - fi - - echo -n "* Writing certificate of client's CA... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --mark-trusted --mark-ca --write --label gnutls-ca --load-certificate "${cacert}" "${token}" >>"${TMPFILE}" 2>&1 - ret=$? - if test ${ret} != 0; then - echo "Failed with PIN, trying to write with so PIN" >>"${TMPFILE}" - ${P11TOOL} ${ADDITIONAL_PARAM} --so-login --mark-ca --write --mark-trusted --label gnutls-ca --load-certificate "${cacert}" "${token}" >>"${TMPFILE}" 2>&1 - ret=$? - fi - - if test ${ret} = 0; then - echo ok - else - echo failed - exit_error - fi - - echo -n "* Testing certificate flags... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-all-certs "${token};object=gnutls-ca;object-type=cert" |grep Flags|head -n 1 >tmp-client-2.pub 2>>"${TMPFILE}" - if test $? != 0; then - echo failed - exit_error - fi - - grep CKA_TRUSTED tmp-client-2.pub >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo "failed (no CKA_TRUSTED)" - #exit_error - fi - - grep "CKA_CERTIFICATE_CATEGORY=CA" tmp-client-2.pub >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo "failed (no CKA_CERTIFICATE_CATEGORY=CA)" - #exit_error - fi - - echo ok - - - echo -n "* Trying to obtain back the cert... " - ${P11TOOL} ${ADDITIONAL_PARAM} --export "${token};object=gnutls-ca;object-type=cert" --outfile crt1.tmp >>"${TMPFILE}" 2>&1 - ${DIFF} crt1.tmp "${srcdir}/pkcs11-certs/ca.crt" - if test $? != 0; then - echo "failed. Exported certificate differs (crt1.tmp)!" - exit_error - fi - rm -f crt1.tmp - if test $? = 0; then - echo ok - else - echo failed - exit_error - fi - - echo -n "* Trying to obtain the full chain... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --export-chain "${token};object=gnutls-client;object-type=cert"|"${CERTTOOL}" ${CERTTOOL_PARAM} -i --outfile crt1.tmp >>"${TMPFILE}" 2>&1 - - cat tmp-client.crt ${srcdir}/pkcs11-certs/ca.crt|"${CERTTOOL}" ${CERTTOOL_PARAM} -i >crt2.tmp - ${DIFF} crt1.tmp crt2.tmp - if test $? != 0; then - echo "failed. Exported certificate chain differs!" - exit_error - fi - rm -f crt1.tmp crt2.tmp - if test $? = 0; then - echo ok - else - echo failed - exit_error - fi -} - -# $1: token -# $2: PIN -# $3: cakey: ${srcdir}/pkcs11-certs/ca.key -# $4: cacert: ${srcdir}/pkcs11-certs/ca.crt -# -# Tests writing a certificate which corresponds to the given key, -# and verifies whether the ID is the same. Should utilize the -# ID of the public key. -write_certificate_id_test_rsa () { - export GNUTLS_PIN="$2" - token="$1" - cakey="$3" - cacert="$4" - - echo -n "* Generating RSA private key on HSM... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --label xxx1-rsa --generate-rsa --bits 1024 "${token}" >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit 1 - fi - - echo -n "* Checking whether right ID is set on copy... " - "${CERTTOOL}" ${CERTTOOL_PARAM} ${ADDITIONAL_PARAM} --generate-certificate --load-ca-privkey "${cakey}" --load-ca-certificate "${cacert}" \ - --template ${srcdir}/pkcs11-certs/client-tmpl --load-privkey "${token};object=xxx1-rsa;object-type=private" \ - --outfile tmp-client.crt >>"${TMPFILE}" 2>&1 - - if test $? != 0; then - echo failed - exit_error - fi - - id=$(${P11TOOL} ${ADDITIONAL_PARAM} --list-all "${token};object=xxx1-rsa;object-type=public" 2>&1 | grep 'ID: '|sed -e 's/ID://' -e 's/^[ \t]*//' -e 's/[ \t]*$//') - ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label tmp-xxx1-rsa --load-certificate tmp-client.crt "${token}" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo failed - exit_error - fi - - ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-certs "${token};object=tmp-xxx1-rsa;object-type=cert" 2>&1 | grep "ID: ${id}" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo "ID '$id' was not set on copy" - exit_error - fi - echo ok -} - -# $1: token -# $2: PIN -# $3: cakey: ${srcdir}/pkcs11-certs/ca.key -# $4: cacert: ${srcdir}/pkcs11-certs/ca.crt -# -# Tests writing a certificate which corresponds to the given key, -# and verifies whether the ID is the same. Should utilize the -# ID of the private key. -write_certificate_id_test_rsa2 () { - export GNUTLS_PIN="$2" - token="$1" - cakey="$3" - cacert="$4" - tmpkey="key.$$.tmp" - - echo -n "* Generating RSA private key... " - ${CERTTOOL} ${ADDITIONAL_PARAM} --generate-privkey --bits 1024 --outfile ${tmpkey} >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit 1 - fi - - echo -n "* Checking whether right ID is set on copy... " - "${CERTTOOL}" ${CERTTOOL_PARAM} ${ADDITIONAL_PARAM} --generate-certificate --load-ca-privkey "${cakey}" --load-ca-certificate "${cacert}" \ - --template ${srcdir}/pkcs11-certs/client-tmpl --load-privkey ${tmpkey} \ - --outfile tmp-client.crt >>"${TMPFILE}" 2>&1 - - if test $? != 0; then - echo failed - exit_error - fi - - ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label xxx2-rsa --load-privkey ${tmpkey} "${token}" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo failed - exit_error - fi - - id=$(${P11TOOL} ${ADDITIONAL_PARAM} --login --list-all "${token};object=xxx2-rsa;object-type=private" 2>&1 | grep 'ID: '|sed -e 's/ID://' -e 's/^[ \t]*//' -e 's/[ \t]*$//') - - rm -f ${tmpkey} - ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label tmp-xxx2-rsa --load-certificate tmp-client.crt "${token}" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo failed - exit_error - fi - - ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-certs "${token};object=tmp-xxx2-rsa;object-type=cert" 2>&1 | grep "ID: ${id}" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo "ID '$id' was not set on copy" - exit_error - fi - echo ok -} - -# $1: token -# $2: PIN -# $3: cakey: ${srcdir}/pkcs11-certs/ca.key -# $4: cacert: ${srcdir}/pkcs11-certs/ca.crt -# -# Tests writing a certificate which corresponds to the given key, -# and verifies whether the ID is the same. Should utilize the -# ID of the private key. -write_certificate_id_test_ecdsa () { - export GNUTLS_PIN="$2" - token="$1" - cakey="$3" - cacert="$4" - tmpkey="key.$$.tmp" - - echo -n "* Generating ECDSA private key... " - ${CERTTOOL} ${ADDITIONAL_PARAM} --generate-privkey --ecdsa --outfile ${tmpkey} >>"${TMPFILE}" 2>&1 - if test $? = 0; then - echo ok - else - echo failed - exit 1 - fi - - echo -n "* Checking whether right ID is set on copy... " - "${CERTTOOL}" ${CERTTOOL_PARAM} ${ADDITIONAL_PARAM} --generate-certificate --load-ca-privkey "${cakey}" --load-ca-certificate "${cacert}" \ - --template ${srcdir}/pkcs11-certs/client-tmpl --load-privkey ${tmpkey} \ - --outfile tmp-client.crt >>"${TMPFILE}" 2>&1 - - if test $? != 0; then - echo failed - exit_error - fi - - ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label xxx-ecdsa --load-privkey ${tmpkey} "${token}" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo failed - exit_error - fi - - id=$(${P11TOOL} ${ADDITIONAL_PARAM} --login --list-all "${token};object=xxx-ecdsa;object-type=private" 2>&1 | grep 'ID: '|sed -e 's/ID://' -e 's/^[ \t]*//' -e 's/[ \t]*$//') - - rm -f ${tmpkey} - ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label tmp-xxx-ecdsa --load-certificate tmp-client.crt "${token}" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo failed - exit_error - fi - - ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-certs "${token};object=tmp-xxx-ecdsa;object-type=cert" 2>&1 | grep "ID: ${id}" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo "ID '$id' was not set on copy" - exit_error - fi - echo ok -} - -test_sign () { - export GNUTLS_PIN="$2" - token="$1" - - echo -n "* Testing signatures using the private key... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --test-sign "${token};object=serv-key" >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo "failed. Cannot test signatures." - exit_error - fi - echo ok - - echo -n "* Testing signatures using the private key (with ID)... " - ${P11TOOL} ${ADDITIONAL_PARAM} --login --test-sign "${token};id=%ac%1d%7a%39%cb%72%17%94%66%6c%74%44%73%40%91%44%c0%a0%43%7d" >>"${TMPFILE}" 2>&1 - ${P11TOOL} ${ADDITIONAL_PARAM} --login --test-sign "${token};id=%ac%1d%7a%39%cb%72%17%94%66%6c%74%44%73%40%91%44%c0%a0%43%7d" 2>&1|grep "Verifying against public key in the token..."|grep ok >>"${TMPFILE}" 2>&1 - if test $? != 0; then - echo "failed. Cannot test signatures with ID." - exit_error - fi - echo ok -} - -# $1: token -# $2: PIN -# $3: certfile -# $4: keyfile -# $5: cafile -# -# Tests using a certificate and key pair using gnutls-serv and gnutls-cli. -use_certificate_test () { - export GNUTLS_PIN="$2" - token="$1" - certfile="$3" - keyfile="$4" - cafile="$5" - txt="$6" - - echo -n "* Using PKCS #11 with gnutls-cli (${txt})... " - # start server - eval "${GETPORT}" - launch_pkcs11_server $$ "${ADDITIONAL_PARAM}" --echo --priority NORMAL --x509certfile="${certfile}" \ - --x509keyfile="$keyfile" --x509cafile="${cafile}" \ - --require-client-cert >>"${TMPFILE}" 2>&1 - - PID=$! - wait_server ${PID} - - # connect to server using SC - ${VALGRIND} "${CLI}" ${ADDITIONAL_PARAM} -p "${PORT}" localhost --priority NORMAL --x509cafile="${cafile}" >"${TMPFILE}" 2>&1 && \ - fail ${PID} "Connection should have failed!" - - ${VALGRIND} "${CLI}" ${ADDITIONAL_PARAM} -p "${PORT}" localhost --priority NORMAL --x509certfile="${certfile}" \ - --x509keyfile="$keyfile" --x509cafile="${cafile}" >"${TMPFILE}" 2>&1 || \ - fail ${PID} "Connection (with files) should have succeeded!" - - ${VALGRIND} "${CLI}" ${ADDITIONAL_PARAM} -p "${PORT}" localhost --priority NORMAL --x509certfile="${token};object=gnutls-client;object-type=cert" \ - --x509keyfile="${token};object=gnutls-client;object-type=private" \ - --x509cafile="${cafile}" >"${TMPFILE}" 2>&1 || \ - fail ${PID} "Connection (with SC) should have succeeded!" - - kill ${PID} - wait - - echo ok -} - - - -echo "Testing PKCS11 support" - -# erase SC - -type="$1" - -if test -z "${type}"; then - echo "usage: $0: [pkcs15|softhsm|sc-hsm]" - if test -x "/usr/bin/softhsm" || test -x "/usr/bin/softhsm2-util"; then - echo "assuming 'softhsm'" - echo "" - type=softhsm - else - exit 1 - fi - -fi - -. "${srcdir}/testpkcs11.${type}" - -export GNUTLS_PIN=12345678 -export GNUTLS_SO_PIN=00000000 - -init_card "${GNUTLS_PIN}" "${GNUTLS_SO_PIN}" - -# find token name -TOKEN=`${P11TOOL} ${ADDITIONAL_PARAM} --list-tokens pkcs11:token=Nikos|grep URL|grep token=GnuTLS-Test|sed 's/\s*URL\: //g'` - -echo "* Token: ${TOKEN}" -if test "x${TOKEN}" = x; then - echo "Could not find generated token" - exit_error -fi - -#write a given privkey -write_privkey "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/pkcs11-certs/client.key" - -generate_temp_ecc_privkey "${TOKEN}" "${GNUTLS_PIN}" 256 -delete_temp_privkey "${TOKEN}" "${GNUTLS_PIN}" ecc-256 - -generate_temp_ecc_privkey "${TOKEN}" "${GNUTLS_PIN}" 384 -delete_temp_privkey "${TOKEN}" "${GNUTLS_PIN}" ecc-384 - -generate_temp_rsa_privkey "${TOKEN}" "${GNUTLS_PIN}" 2048 -delete_temp_privkey "${TOKEN}" "${GNUTLS_PIN}" rsa-2048 - -generate_temp_dsa_privkey "${TOKEN}" "${GNUTLS_PIN}" 3072 -delete_temp_privkey "${TOKEN}" "${GNUTLS_PIN}" dsa-3072 - -import_temp_rsa_privkey "${TOKEN}" "${GNUTLS_PIN}" 1024 -delete_temp_privkey "${TOKEN}" "${GNUTLS_PIN}" rsa-1024 -import_temp_ecc_privkey "${TOKEN}" "${GNUTLS_PIN}" 256 -delete_temp_privkey "${TOKEN}" "${GNUTLS_PIN}" ecc-256 -import_temp_dsa_privkey "${TOKEN}" "${GNUTLS_PIN}" 2048 -delete_temp_privkey "${TOKEN}" "${GNUTLS_PIN}" dsa-2048 - -generate_rsa_privkey "${TOKEN}" "${GNUTLS_PIN}" 1024 -change_id_of_privkey "${TOKEN}" "${GNUTLS_PIN}" -export_pubkey_of_privkey "${TOKEN}" "${GNUTLS_PIN}" -change_label_of_privkey "${TOKEN}" "${GNUTLS_PIN}" - -write_certificate_test "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/pkcs11-certs/ca.key" "${srcdir}/pkcs11-certs/ca.crt" tmp-client.pub -write_serv_privkey "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/pkcs11-certs/server.key" -write_serv_cert "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/pkcs11-certs/server.crt" - -write_serv_pubkey "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/pkcs11-certs/server.crt" -test_sign "${TOKEN}" "${GNUTLS_PIN}" - -use_certificate_test "${TOKEN}" "${GNUTLS_PIN}" "${TOKEN};object=serv-cert;object-type=cert" "${TOKEN};object=serv-key;object-type=private" "${srcdir}/pkcs11-certs/ca.crt" "full URLs" - -use_certificate_test "${TOKEN}" "${GNUTLS_PIN}" "${TOKEN};object=serv-cert" "${TOKEN};object=serv-key" "${srcdir}/pkcs11-certs/ca.crt" "abbrv URLs" - -write_certificate_id_test_rsa "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/pkcs11-certs/ca.key" "${srcdir}/pkcs11-certs/ca.crt" -write_certificate_id_test_rsa2 "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/pkcs11-certs/ca.key" "${srcdir}/pkcs11-certs/ca.crt" -write_certificate_id_test_ecdsa "${TOKEN}" "${GNUTLS_PIN}" "${srcdir}/pkcs11-certs/ca.key" "${srcdir}/pkcs11-certs/ca.crt" - -if test ${RETCODE} = 0; then - echo "* All smart cards tests succeeded" -fi -rm -f tmp-client.crt tmp-client.pub tmp-client-2.pub "${TMPFILE}" - -exit 0 diff --git a/tests/suite/testrandom.sh b/tests/suite/testrandom.sh index 7e68a713a6..1283e9e765 100755 --- a/tests/suite/testrandom.sh +++ b/tests/suite/testrandom.sh @@ -38,8 +38,10 @@ counter=0 echo "Testing verification with randomly generated certificates..." while [ ${counter} -lt 400 ]; do + counter=`expr ${counter} + 1` + "${srcdir}/x509random.pl" > "${file}" - ${VALGRIND} "${CERTTOOL}" -i --inder --infile "${file}" --outfile "${file}.pem" >/dev/null 2>&1 + ${VALGRIND} "${CERTTOOL}" -i --inder --infile "${file}" --outfile "${file}.pem" >/dev/null if test $? != 0; then continue fi @@ -53,8 +55,6 @@ while [ ${counter} -lt 400 ]; do exit 1 fi rm -f "${file}.pem" "${file}-chain.pem" - - counter=`expr ${counter} + 1` done diff --git a/tests/suite/testsrn.sh b/tests/suite/testsrn.sh deleted file mode 100755 index aba3df589c..0000000000 --- a/tests/suite/testsrn.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2010-2012 Free Software Foundation, Inc. -# -# Author: Nikos Mavrogiannopoulos -# -# This file is part of GnuTLS. -# -# GnuTLS is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 3 of the License, or (at -# your option) any later version. -# -# GnuTLS is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GnuTLS; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -srcdir="${srcdir:-.}" -SERV="${SERV:-../../src/gnutls-serv${EXEEXT}}" -CLI="${CLI:-../../src/gnutls-cli${EXEEXT}}" -unset RETCODE - -if ! test -x "${SERV}"; then - exit 77 -fi - -if ! test -x "${CLI}"; then - exit 77 -fi - -if test "${WINDIR}" != ""; then - exit 77 -fi - -if ! test -z "${VALGRIND}"; then - VALGRIND="${LIBTOOL:-libtool} --mode=execute ${VALGRIND} --error-exitcode=15" -fi - - -SERV="${SERV} -q" - -. "${srcdir}/../scripts/common.sh" - -echo "Checking Safe renegotiation" - -eval "${GETPORT}" -launch_server $$ --echo --priority NORMAL:+ANON-DH:%PARTIAL_RENEGOTIATION --dhparams "${srcdir}/params.dh" -PID=$! -wait_server ${PID} - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --rehandshake --priority NONE:+AES-128-CBC:+MD5:+SHA1:+VERS-TLS1.0:+ANON-DH:+COMP-NULL:%SAFE_RENEGOTIATION /dev/null || \ - fail ${PID} "0. Renegotiation should have succeeded!" - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --rehandshake --priority NORMAL:+ANON-DH:%SAFE_RENEGOTIATION /dev/null || \ - fail ${PID} "1. Safe rehandshake should have succeeded!" - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --rehandshake --priority NORMAL:+ANON-DH:%UNSAFE_RENEGOTIATION /dev/null || \ - fail ${PID} "2. Unsafe rehandshake should have succeeded!" - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:+ANON-DH:%DISABLE_SAFE_RENEGOTIATION /dev/null || \ - fail ${PID} "3. Unsafe negotiation should have succeeded!" - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --rehandshake --priority NORMAL:+ANON-DH:%DISABLE_SAFE_RENEGOTIATION /dev/null && \ - fail ${PID} "4. Unsafe renegotiation should have failed!" - - -kill ${PID} -wait - -eval "${GETPORT}" -launch_server $$ --echo --priority NORMAL:+ANON-DH:%SAFE_RENEGOTIATION --dhparams "${srcdir}/params.dh" -PID=$! -wait_server ${PID} - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --rehandshake --priority NORMAL:+ANON-DH:%SAFE_RENEGOTIATION /dev/null || \ - fail ${PID} "5. Safe rehandshake should have succeeded!" - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --rehandshake --priority NORMAL:+ANON-DH:%UNSAFE_RENEGOTIATION /dev/null || \ - fail ${PID} "6. Unsafe rehandshake should have succeeded!" - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:+ANON-DH:%DISABLE_SAFE_RENEGOTIATION /dev/null && \ - fail ${PID} "7. Unsafe negotiation should have failed!" - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --rehandshake --priority NORMAL:+ANON-DH:%DISABLE_SAFE_RENEGOTIATION /dev/null && \ - fail ${PID} "8. Unsafe renegotiation should have failed!" - -kill ${PID} -wait - -eval "${GETPORT}" -launch_server $$ --echo --priority NORMAL:+ANON-DH:%DISABLE_SAFE_RENEGOTIATION --dhparams "${srcdir}/params.dh" -PID=$! -wait_server ${PID} - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:+ANON-DH:%SAFE_RENEGOTIATION /dev/null && \ - fail ${PID} "9. Initial connection should have failed!" - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:+ANON-DH:%UNSAFE_RENEGOTIATION /dev/null || \ - fail ${PID} "10. Unsafe connection should have succeeded!" - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:+ANON-DH:%DISABLE_SAFE_RENEGOTIATION /dev/null || \ - fail ${PID} "11. Unsafe negotiation should have succeeded!" - -${VALGRIND} "${CLI}" -p "${PORT}" 127.0.0.1 --rehandshake --priority NORMAL:+ANON-DH:%DISABLE_SAFE_RENEGOTIATION /dev/null || \ - fail ${PID} "12. Unsafe renegotiation should have succeeded!" - -kill ${PID} -wait - -exit 0 diff --git a/tests/suite/tls-fuzzer/gnutls-alpn.json b/tests/suite/tls-fuzzer/gnutls-alpn.json new file mode 100644 index 0000000000..b02f07305e --- /dev/null +++ b/tests/suite/tls-fuzzer/gnutls-alpn.json @@ -0,0 +1,23 @@ +[ + {"server_command": ["@SERVER@", "--http", + "--x509keyfile", "tests/serverX509Key.pem", + "--x509certfile", "tests/serverX509Cert.pem", + "--debug=3", + "--alpn=http/1.1", + "--alpn=http/2", + "--alpn-fatal", + "--priority=@PRIORITY@", + "--disable-client-cert", "--port=@PORT@"], + "server_hostname": "localhost", + "server_port": @PORT@, + "tests" : [ + {"name" : "test-alpn-negotiation.py", + "comment" : "we do not not fail when ALPN name changes on resumption", + "comment" : "we do not not parse all objects when a match is found", + "arguments" : ["-e", "overflow length of last item", + "-e", "resumption with alpn change", + "-e", "underflow length of protocol_name_list", + "-p", "@PORT@"]} + ] + } +] diff --git a/tests/suite/tls-fuzzer/gnutls-cert.json b/tests/suite/tls-fuzzer/gnutls-cert.json index 68720b48fd..7a5af26e53 100644 --- a/tests/suite/tls-fuzzer/gnutls-cert.json +++ b/tests/suite/tls-fuzzer/gnutls-cert.json @@ -2,41 +2,96 @@ {"server_command": ["@SERVER@", "--http", "--x509keyfile", "tests/serverX509Key.pem", "--x509certfile", "tests/serverX509Cert.pem", - "--debug=4", + "--debug=6", "--priority=@PRIORITY@", "--port=@PORT@"], "environment": {"PYTHONPATH" : "."}, + "server_hostname": "localhost", + "server_port": @PORT@, "tests" : [ + {"name" : "test-tls13-certificate-verify.py", + "comment" : "tlsfuzzer doesn't like our status request (see #633)", + "exp_pass" : false, + "comment" : "tlsfuzzer doesn't like our set of algorithms (e.g., ed25519)", + "arguments" : ["-k", "tests/clientX509Key.pem", + "-c", "tests/clientX509Cert.pem", + "-n", "10", + "-e", "check sigalgs in cert request", + "-p", "@PORT@"]}, + {"name" : "test-tls13-ecdsa-in-certificate-verify.py", + "comment" : "tlsfuzzer doesn't like our status request (see #633)", + "exp_pass" : false, + "comment" : "tlsfuzzer doesn't like our set of algorithms (e.g., ed25519)", + "arguments" : ["-k", "tests/serverECKey.pem", + "-c", "tests/serverECCert.pem", + "-n", "10", + "-e", "check sigalgs in cert request", + "-p", "@PORT@"]}, {"name": "test-rsa-sigs-on-certificate-verify.py", "arguments" : ["-k", "tests/clientX509Key.pem", - "-c", "tests/clientX509Cert.pem"] + "-c", "tests/clientX509Cert.pem", + "-p", "@PORT@"] }, {"name" : "test-certificate-verify.py", "arguments" : ["-k", "tests/clientX509Key.pem", - "-c", "tests/clientX509Cert.pem"] + "-c", "tests/clientX509Cert.pem", + "-p", "@PORT@"] + }, + {"name" : "test-ecdsa-in-certificate-verify.py", + "comment" : "we don't support sha224; we send illegal_parameter instead of handshake_failure in md5+ecdsa", + "arguments" : ["-k", "tests/serverECKey.pem", + "-c", "tests/serverECCert.pem", + "-e", "make sha224+ecdsa signature in CertificateVerify", + "-e", "make sha224+ecdsa signature, advertise it as sha1+ecdsa in CertificateVerify", + "-e", "make sha224+ecdsa signature, advertise it as sha256+ecdsa in CertificateVerify", + "-e", "make sha224+ecdsa signature, advertise it as sha384+ecdsa in CertificateVerify", + "-e", "make sha224+ecdsa signature, advertise it as sha512+ecdsa in CertificateVerify", + "-e", "md5+ecdsa forced", + "-p", "@PORT@"] }, {"name" : "test-certificate-verify-malformed.py", "arguments" : ["-k", "tests/clientX509Key.pem", - "-c", "tests/clientX509Cert.pem"], - "comment" : "for some reason tlsfuzzer does require decryption error alert", - "exp_pass" : false + "-c", "tests/clientX509Cert.pem", + "-p", "@PORT@"] }, {"name" : "test-certificate-verify-malformed-sig.py", "arguments" : ["-k", "tests/clientX509Key.pem", - "-c", "tests/clientX509Cert.pem"] + "-c", "tests/clientX509Cert.pem", + "-p", "@PORT@"] }, {"name" : "test-certificate-request.py", - "comment" : "tlsfuzzer doesn't like our set of algorithms", + "comment" : "tlsfuzzer doesn't like our set of algorithms or supported cert types", "arguments" : ["-k", "tests/clientX509Key.pem", "-c", "tests/clientX509Cert.pem", - "-e", "check sigalgs in cert request"] + "-e", "check sigalgs in cert request", + "-e", "check cert types in cert request", + "-p", "@PORT@"] + }, + {"name" : "test-rsa-pss-sigs-on-certificate-verify.py", + "comment": "tlsfuzzer doesn't know ed25519 scheme which we advertise", + "arguments" : ["-k", "tests/clientX509Key.pem", + "-c", "tests/clientX509Cert.pem", + "-e", "check CertificateRequest sigalgs", + "--illegpar", + "-n", "100", + "-p", "@PORT@"] + }, + {"name" : "test-rsa-pss-sigs-on-certificate-verify.py", + "comment": "tlsfuzzer doesn't know ed25519 scheme which we advertise", + "arguments" : ["-k", "tests/clientRSAPSSKey.pem", + "-c", "tests/clientRSAPSSCert.pem", + "-e", "check CertificateRequest sigalgs", + "--illegpar", + "-n", "100", + "-p", "@PORT@"] }, {"name": "test-certificate-malformed.py", "comment" : "tlsfuzzer doesn't like the alerts we send", "arguments" : ["-k", "tests/clientX509Key.pem", "-c", "tests/clientX509Cert.pem", "-e", "fuzz empty certificate - overall 7, certs 4, cert 1", - "-e", "fuzz empty certificate - overall 8, certs 5, cert 2"] + "-e", "fuzz empty certificate - overall 8, certs 5, cert 2", + "-p", "@PORT@"] } ] } diff --git a/tests/suite/tls-fuzzer/gnutls-nocert-ssl3.json b/tests/suite/tls-fuzzer/gnutls-nocert-ssl3.json new file mode 100644 index 0000000000..a297392255 --- /dev/null +++ b/tests/suite/tls-fuzzer/gnutls-nocert-ssl3.json @@ -0,0 +1,28 @@ +[ + {"server_command": ["@SERVER@", "--http", + "--x509keyfile", "tests/serverX509Key.pem", + "--x509certfile", "tests/serverX509Cert.pem", + "--x509keyfile", "../../../certs/ecc256.pem", + "--x509certfile", "../../../certs/cert-ecc256.pem", + "--debug=3", + "--noticket", + "--priority=@PRIORITY@", + "--disable-client-cert", "--port=@PORT@"], + "server_hostname": "localhost", + "server_port": @PORT@, + "tests" : [ + {"name" : "test-SSLv3-padding.py", + "comment" : "we accept zero filled padding in SSLv3", + "exp_pass" : false, + "arguments": ["-p", "@PORT@"] + }, + {"name" : "test-export-ciphers-rejected.py", + "comment" : "we negotiate AES even in SSL3.0", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-client-compatibility.py", + "arguments" : ["-p", "@PORT@", "18: IE 6 on XP", + "52: YandexBot 3.0 on unknown", + "100: IE 6 on XP"]} + ] + } +] diff --git a/tests/suite/tls-fuzzer/gnutls-nocert-tls13.json b/tests/suite/tls-fuzzer/gnutls-nocert-tls13.json new file mode 100644 index 0000000000..3b6404c045 --- /dev/null +++ b/tests/suite/tls-fuzzer/gnutls-nocert-tls13.json @@ -0,0 +1,143 @@ +[ + {"server_command": ["@SERVER@", "--http", + "--x509keyfile", "tests/serverX509Key.pem", + "--x509certfile", "tests/serverX509Cert.pem", + "--x509keyfile", "tests/serverRSAPSSKey.pem", + "--x509certfile", "tests/serverRSAPSSCert.pem", + "--x509keyfile", "tests/serverECKey.pem", + "--x509certfile", "tests/serverECCert.pem", + "--x509keyfile", "tests/serverP384ECKey.pem", + "--x509certfile", "tests/serverP384ECCert.pem", + "--x509keyfile", "tests/serverP521ECKey.pem", + "--x509certfile", "tests/serverP521ECCert.pem", + "--debug=6", + "--httpdata=../http.dat", + "--priority=@PRIORITY@", + "--disable-client-cert", "--port=@PORT@"], + "server_hostname": "localhost", + "server_port": @PORT@, + "tests" : [ + {"name" : "test-record-size-limit.py", + "comment" : "changed extension after HRR is not supported #617", + "arguments" : ["-p", "@PORT@", "--reply-AD-size", "1024", + "--minimal-size", "512", + "-e", "change size in TLS 1.2 resumption", + "-e", "check if server accepts maximum size in TLS 1.0", + "-e", "check if server accepts maximum size in TLS 1.1", + "-e", "check if server accepts maximum size in TLS 1.2", + "-e", "check if server accepts minimal size in TLS 1.0", + "-e", "check if server accepts minimal size in TLS 1.1", + "-e", "check if server accepts minimal size in TLS 1.2", + "-e", "check interaction with sha256 prf", + "-e", "check interaction with sha384 prf", + "-e", "check server sent size in TLS 1.0", + "-e", "check server sent size in TLS 1.1", + "-e", "check server sent size in TLS 1.2", + "-e", "drop extension in TLS 1.2 resumption", + "-e", "modified extension in 2nd CH in HRR handshake", + "-e", "renegotiation with changed limit", + "-e", "renegotiation with dropped extension", + "-e", "added extension in 2nd CH in HRR handshake", + "-e", "check server sent size in TLS 1.0 with max_fragment_length", + "-e", "check server sent size in TLS 1.1 with max_fragment_length", + "-e", "check server sent size in TLS 1.2 with max_fragment_length", + "-e", "removed extension in 2nd CH in HRR handshake"] }, + {"name" : "test-tls13-0rtt-garbage.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-ccs.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-crfg-curves.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-conversation.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-count-tickets.py", + "arguments": ["-p", "@PORT@", "-t", "2"]}, + {"name" : "test-tls13-dhe-shared-secret-padding.py", + "arguments": ["-p", "@PORT@", + "-n", "4"]}, + {"name" : "test-tls13-ecdhe-curves.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-ecdsa-support.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-empty-alert.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-ffdhe-groups.py", + "comment" : "We do not check for duplicate entries", + "arguments": ["-p", "@PORT@", + "-e", "ffdhe2048 - duplicated key share entry", + "-e", "ffdhe3072 - duplicated key share entry", + "-e", "ffdhe4096 - duplicated key share entry", + "-e", "ffdhe6144 - duplicated key share entry", + "-e", "ffdhe8192 - duplicated key share entry"]}, + {"name" : "test-tls13-ffdhe-sanity.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-finished.py", + "comment" : "the disabled tests timeout very often due to slow tls-fuzzer implementation", + "arguments": ["-p", "@PORT@", "-n", "5", + "-e", "padding - cipher TLS_AES_128_GCM_SHA256, pad_byte 0, pad_left 0, pad_right 16777183", + "-e", "padding - cipher TLS_AES_256_GCM_SHA384, pad_byte 0, pad_left 0, pad_right 16777167"]}, + {"name" : "test-tls13-hrr.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-invalid-ciphers.py", + "arguments": ["-p", "@PORT@", + "-n", "5"]}, + {"name" : "test-tls13-keyshare-omitted.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-keyupdate.py", + "comment" : "we have limits that prohibit the running multiple messages test; app data split timeouts waiting for new session ticket", + "arguments": ["-p", "@PORT@", + "-n", "5", + "-e", "app data split, conversation with KeyUpdate msg", + "-e", "multiple KeyUpdate messages"]}, + {"name" : "test-tls13-large-number-of-extensions.py", + "comment" : "This test assumes that 22 (EtM) is unassigned which is incorrect - see #632", + "arguments": ["-p", "@PORT@", + "-n", "5", + "--exc", "11", + "--exc", "12", + "--exc", "22", + "--exc", "23"]}, + {"name" : "test-tls13-legacy-version.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-nociphers.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-non-support.py", + "arguments": ["-p", "@PORT@"], + "exp_pass" : false}, + {"name" : "test-tls13-pkcs-signature.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-record-padding.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-rsapss-signatures.py", + "arguments": ["-p", "@PORT@", "-b"]}, + {"name" : "test-tls13-rsa-signatures.py", + "arguments": ["-p", "@PORT@", "-b"]}, + {"name" : "test-tls13-session-resumption.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-serverhello-random.py", + "arguments": ["-p", "@PORT@", + "-n", "5"]}, + {"name" : "test-tls13-signature-algorithms.py", + "comment" : "gnutls doesn't handle well duplicated signature algorithms; this is not an issue in practice", + "arguments": ["-p", "@PORT@", + "-e", "213 invalid schemes", + "-e", "2353 invalid schemes", + "-e", "8130 invalid schemes", + "-e", "23752 invalid schemes", + "-e", "32715 invalid schemes"]}, + {"name" : "test-tls13-symetric-ciphers.py", + "arguments": ["-p", "@PORT@", + "-n", "5"]}, + {"name" : "test-tls13-unrecognised-groups.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-version-negotiation.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-tls13-zero-length-data.py", + "arguments": ["-p", "@PORT@"]}, + {"name" : "test-downgrade-protection.py", + "comment" : "1/n-1 splitting in TLS 1.0 is not supported", + "arguments": ["-p", "@PORT@", "--server-max-protocol", "TLSv1.3", + "-e", "TLS 1.3 downgrade check for Protocol (3, 1)"]} + ] + } +] diff --git a/tests/suite/tls-fuzzer/gnutls-nocert.json b/tests/suite/tls-fuzzer/gnutls-nocert.json index ca360b45e3..2a6f47d68d 100644 --- a/tests/suite/tls-fuzzer/gnutls-nocert.json +++ b/tests/suite/tls-fuzzer/gnutls-nocert.json @@ -2,93 +2,315 @@ {"server_command": ["@SERVER@", "--http", "--x509keyfile", "tests/serverX509Key.pem", "--x509certfile", "tests/serverX509Cert.pem", - "--debug=3", + "--x509keyfile", "tests/serverECKey.pem", + "--x509certfile", "tests/serverECCert.pem", + "--x509keyfile", "tests/serverP384ECKey.pem", + "--x509certfile", "tests/serverP384ECCert.pem", + "--x509keyfile", "tests/serverP521ECKey.pem", + "--x509certfile", "tests/serverP521ECCert.pem", + "--debug=6", + "--noticket", + "--httpdata=../http.dat", "--priority=@PRIORITY@", "--disable-client-cert", "--port=@PORT@"], + "server_hostname": "localhost", + "server_port": @PORT@, "tests" : [ - {"name" : "test-aes-gcm-nonces.py" }, - {"name" : "test-atypical-padding.py" }, - {"name" : "test-bleichenbacher-workaround.py" }, - {"name" : "test-clienthello-md5.py"}, - {"name" : "test-client-compatibility.py"}, - {"name" : "test-client-compatibility.py"}, - {"name" : "test-client-compatibility.py"}, - {"name" : "test-client-compatibility.py"}, - {"name" : "test-conversation.py"}, - {"name" : "test-cve-2016-2107.py"}, - {"name" : "test-dhe-rsa-key-exchange.py"}, - {"name" : "test-dhe-rsa-key-exchange-signatures.py"}, - {"name" : "test-dhe-rsa-key-exchange-with-bad-messages.py"}, - {"name" : "test-early-application-data.py"}, - {"name" : "test-ecdhe-rsa-key-exchange.py"}, - {"name" : "test-ecdhe-rsa-key-exchange-with-bad-messages.py"}, - {"name" : "test-empty-extensions.py"}, + {"name" : "test-fuzzed-plaintext.py", + "arguments" : ["-p", "@PORT@", + "-n", "4"] }, + {"name" : "test-large-hello.py", + "arguments" : [ + "-p", "@PORT@", + "two ext, #80 61384 bytes", + "two ext, #80 12276 bytes", + "ciphers even 8199", + "ciphers odd 8090", + "ext padding, 16130 bytes", + "ext padding, 65367 bytes", + "multiple extensions 9212", + "multiple extensions 1", + "multiple extensions 16353", + "sanity check - fragmented", + "fragmented, padding ext 0 bytes", + "fragmented, padding ext 65354 bytes", + "fragmented, padding ext 16213 bytes"]}, + {"name" : "test-ecdsa-sig-flexibility.py", + "comment" : "we do not support SHA224", + "arguments" : ["-p", "@PORT@", + "-e", "connect with sha224+ecdsa only"] }, + {"name" : "test-encrypt-then-mac.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-ocsp-stapling.py", + "arguments" : ["-p", "@PORT@", + "--no-status"] }, + {"name" : "test-encrypt-then-mac-renegotiation.py", + "comment" : "we are not strict in EtM required behavior in renegotiation", + "arguments" : ["-p", "@PORT@", + "-e", "Encrypt-then-MAC renegotiation crash"]}, + {"name" : "test-x25519.py", + "arguments" : ["-p", "@PORT@"]}, + {"name" : "test-cve-2016-7054.py", + "arguments" : ["-p", "@PORT@", + "-e", "sanity"]}, + {"name" : "test-cve-2016-6309.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-invalid-server-name-extension.py", + "comment" : "we don't parse past the first valid name, and we don't validate input received", + "arguments" : ["-p", "@PORT@", + "-e", "SNI name with UTF-8", + "-e", "multiple host_names in SNI, RFC 6066 compliance", + "-e", "incorrect SNI"]}, + {"name" : "test-invalid-server-name-extension-resumption.py", + "comment" : "we don't follow the RFC precisely on SNI resumption, we cache the SNI and ignore the extensions", + "arguments" : ["-p", "@PORT@", + "-e", "Sanity check, bad SNI", + "-e", "session resume with different SNI", + "-e", "session resume with malformed SNI"]}, + {"name" : "test-chacha20.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-aes-gcm-nonces.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-aesccm.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-atypical-padding.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-bleichenbacher-workaround.py", + "arguments" : ["-p", "@PORT@", + "-n", "5"] + }, + {"name" : "test-clienthello-md5.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-client-compatibility.py", + "arguments" : ["-p", "@PORT@", + "-e", "18: IE 6 on XP", + "-e", "52: YandexBot 3.0 on unknown", + "-e", "100: IE 6 on XP"]}, + {"name" : "test-conversation.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-no-heartbeat.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-client-hello-max-size.py", + "comment" : "FIXME: we fail with: Handshake buffer length is 131400 (max: 131072)", + "arguments" : ["-p", "@PORT@", + "-e", "max client hello"]}, + {"name" : "test-atypical-padding.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-ffdhe-negotiation.py" , + "comment" : ["we don't prefer DHE over RSA if RSA is preferred by peer"], + "arguments" : ["-p", "@PORT@", + "-e", "Check if DHE preferred", + "--alert", "handshake_failure"]}, + {"name" : "test-cve-2016-2107.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-dhe-key-share-random.py", + "arguments" : ["-p", "@PORT@", + "-e", "Protocol (3, 0)", + "-e", "Protocol (3, 0) in SSLv2 compatible ClientHello", + "-z"]}, + {"name" : "test-dhe-no-shared-secret-padding.py", + "arguments" : ["-p", "@PORT@", + "-e", "Protocol (3, 0)", + "-e", "Protocol (3, 0) in SSLv2 compatible ClientHello", + "-n", "5", + "-z"]}, + {"name" : "test-dhe-rsa-key-exchange.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-dhe-rsa-key-exchange-signatures.py", + "comment" : "gnutls no longer allows sha224", + "arguments" : ["-p", "@PORT@", + "-e", "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA sha224 signature", + "-e", "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 sha224 signature", + "-e", "TLS_DHE_RSA_WITH_AES_128_CBC_SHA sha224 signature", + "-e", "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 sha224 signature", + "-e", "TLS_DHE_RSA_WITH_AES_256_CBC_SHA sha224 signature"] + }, + {"name" : "test-dhe-rsa-key-exchange-with-bad-messages.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-early-application-data.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-ecdhe-padded-shared-secret.py", + "arguments" : ["-p", "@PORT@", + "-e", "Protocol (3, 0) in SSLv2 compatible ClientHello", + "-e", "Protocol (3, 1) in SSLv2 compatible ClientHello", + "-e", "Protocol (3, 0)", + "-z", + "-n", "5"]}, + {"name" : "test-ecdhe-rsa-key-exchange.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-ecdhe-rsa-key-exchange-with-bad-messages.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-ecdhe-rsa-key-share-random.py", + "arguments" : ["-p", "@PORT@", + "-e", "Protocol (3, 0) in SSLv2 compatible ClientHello", + "-e", "Protocol (3, 1) in SSLv2 compatible ClientHello", + "-e", "Protocol (3, 0)", + "-z", + "-n", "5"]}, + {"name" : "test-empty-extensions.py", + "arguments" : ["-p", "@PORT@"] }, {"name" : "test-export-ciphers-rejected.py", - "comment" : "we negotiate AES even in SSL3.0", - "arguments" : ["--ssl3"] }, - {"name" : "test-extensions.py"}, + "comment" : "disable SSL3.0 here, will be tested separately", + "arguments" : ["-p", "@PORT@", + "-e", "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA with AES_128 in SSLv3", + "-e", "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 with AES_128 in SSLv3", + "-e", "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA with AES_128 in SSLv3", + "-e", "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA with AES_128 in SSLv3", + "-e", "TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA with AES_128 in SSLv3", + "-e", "TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA with AES_128 in SSLv3", + "-e", "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA with AES_128 in SSLv3", + "-e", "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA with AES_128 in SSLv3", + "-e", "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 with AES_128 in SSLv3", + "-e", "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA with AES_128 in SSLv3", + "-e", "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5 with AES_128 in SSLv3", + "-e", "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA with AES_128 in SSLv3", + "-e", "TLS_KRB5_EXPORT_WITH_RC4_40_MD5 with AES_128 in SSLv3", + "-e", "TLS_KRB5_EXPORT_WITH_RC4_40_SHA with AES_128 in SSLv3", + "-e", "TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA with AES_128 in SSLv3", + "-e", "TLS_RSA_EXPORT1024_WITH_RC4_56_SHA with AES_128 in SSLv3", + "-e", "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA with AES_128 in SSLv3", + "-e", "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 with AES_128 in SSLv3", + "-e", "TLS_RSA_EXPORT_WITH_RC4_40_MD5 with AES_128 in SSLv3"] }, + {"name" : "test-extensions.py", + "arguments" : ["-p", "@PORT@"] }, {"name" : "test-extended-master-secret-extension.py", - "comment" : "gnutls does not allow switching from EMS to no EMS", - "arguments" : ["-e", "renegotiate without EMS in session with EMS", - "-e", "EMS with session resume without extension"], - "comment" : "FIXME: This script doesn't accept -e", - "exp_pass" : false}, - {"name" : "test-fallback-scsv.py"}, - {"name" : "test-fuzzed-ciphertext.py"}, - {"name" : "test-fuzzed-finished.py"}, - {"name" : "test-fuzzed-MAC.py"}, - {"name" : "test-fuzzed-padding.py"}, - {"name" : "test-hello-request-by-client.py"}, + "comment" : "gnutls does not allow switching from EMS to no EMS, and w/ECDHE test is incomplete", + "arguments" : ["-p", "@PORT@", + "-e", "renegotiate without EMS in session with EMS", + "-e", "EMS with session resume without extension"]}, + {"name" : "test-fallback-scsv.py", + "arguments" : ["-p", "@PORT@", + "--tls-1.3"]}, + {"name" : "test-fuzzed-ciphertext.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-fuzzed-finished.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-fuzzed-MAC.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-fuzzed-padding.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-hello-request-by-client.py", + "arguments" : ["-p", "@PORT@"] }, {"name" : "test-interleaved-application-data-and-fragmented-handshakes-in-renegotiation.py", "comment" : "gnutls doesn't support interleaved data with handshake", "exp_pass" : false}, {"name" : "test-interleaved-application-data-in-renegotiation.py", "comment" : "gnutls doesn't support interleaved data with handshake", "exp_pass" : false}, - {"name" : "test-invalid-cipher-suites.py"}, - {"name" : "test-invalid-client-hello.py"}, - {"name" : "test-invalid-client-hello-w-record-overflow.py"}, - {"name" : "test-invalid-compression-methods.py"}, - {"name" : "test-invalid-content-type.py"}, - {"name" : "test-invalid-rsa-key-exchange-messages.py"}, - {"name" : "test-invalid-session-id.py"}, - {"name" : "test-invalid-version.py"}, - {"name" : "test-large-number-of-extensions.py"}, - {"name" : "test-message-duplication.py"}, - {"name" : "test-message-skipping.py"}, + {"name" : "test-invalid-cipher-suites.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-invalid-client-hello.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-invalid-client-hello-w-record-overflow.py", + "arguments" : ["-p", "@PORT@", + "-n", "10"] }, + {"name" : "test-invalid-compression-methods.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-invalid-content-type.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-invalid-rsa-key-exchange-messages.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-invalid-session-id.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-invalid-version.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-large-number-of-extensions.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-message-duplication.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-message-skipping.py", + "arguments" : ["-p", "@PORT@"] }, {"name" : "test-ocsp-stapling.py", "comment" : "test requires OCSP setup", - "exp_pass" : false}, + "exp_pass" : false, + "arguments" : ["-p", "@PORT@"] }, {"name" : "test-openssl-3712.py", "comment" : "gnutls doesn't support interleaved data with handshake", - "exp_pass" : false}, + "exp_pass" : false, + "arguments" : ["-p", "@PORT@"] }, {"name" : "test-record-layer-fragmentation.py", - "comment" : "FIXME: these need investigation", - "arguments" : ["-e", "non fragmented, over fragmentation limit: 65535 fragment - 16332B extension", + "comment" : "These tests rely on fragmenting the first bytes of the handshake header. Gnutls is limited on that, and doesn't accept handshake header fragmentation.", + "arguments" : ["-p", "@PORT@", + "-e", "non fragmented, over fragmentation limit: 65535 fragment - 16332B extension", "-e", "small, maximum fragmentation: 1 fragment - 20B extension", "-e", "medium, maximum fragmentation: 1 fragment - 1024B extension"]}, - {"name" : "test-sessionID-resumption.py"}, - {"name" : "test-sig-algs.py"}, + {"name" : "test-record-size-limit.py", + "comment" : "TLS 1.3 tests are done separately; 1/n-1 splitting is not supported in TLS 1.0", + "arguments" : ["-p", "@PORT@", "--reply-AD-size", "1024", + "--minimal-size", "512", + "-e", "check if server accepts maximum size in TLS 1.0", + "-e", "check if server accepts maximum size in TLS 1.3", + "-e", "check if server accepts minimal size in TLS 1.0", + "-e", "check if server accepts minimal size in TLS 1.3", + "-e", "check if server omits extension for unrecognized size 64 in TLS 1.3", + "-e", "check if server omits extension for unrecognized size 511 in TLS 1.3", + "-e", "check server sent size in TLS 1.0", + "-e", "check server sent size in TLS 1.3", + "-e", "HRR sanity", + "-e", "too large record payload in TLS 1.3", + "-e", "change size in TLS 1.3 session resumption", + "-e", "drop extension in TLS 1.3 session resumption", + "-e", "modified extension in 2nd CH in HRR handshake", + "-e", "added extension in 2nd CH in HRR handshake", + "-e", "check server sent size in TLS 1.0 with max_fragment_length", + "-e", "check server sent size in TLS 1.3 with max_fragment_length", + "-e", "removed extension in 2nd CH in HRR handshake"] }, + {"name" : "test-sessionID-resumption.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-serverhello-random.py", + "arguments" : ["-p", "@PORT@", + "-e", "Protocol (3, 0) in SSLv2 compatible ClientHello", + "-e", "Protocol (3, 0)", + "-z", + "-n", "6"]}, + {"name" : "test-sig-algs.py", + "arguments" : ["-p", "@PORT@", + "-e", "rsa_pss_pss_sha256 only", + "-e", "rsa_pss_pss_sha384 only", + "-e", "rsa_pss_pss_sha512 only"] }, {"name" : "test-signature-algorithms.py", - "comment" : "gnutls doesn't tolerate that much", - "arguments" : ["-e", "tolerance max (32764) number of methods"] + "comment" : "gnutls doesn't handle well duplicated sign algorithms; this is not an issue in practice", + "arguments" : ["-p", "@PORT@", + "-e", "duplicated 202 non-rsa schemes", + "-e", "duplicated 2342 non-rsa schemes", + "-e", "duplicated 8119 non-rsa schemes", + "-e", "duplicated 23741 non-rsa schemes", + "-e", "duplicated 32744 non-rsa schemes", + "-e", "tolerance max (32764) number of methods"] }, - {"name" : "test-sslv2-connection.py"}, - {"name" : "test-sslv2-force-cipher-3des.py"}, - {"name" : "test-sslv2-force-cipher-non3des.py"}, - {"name" : "test-sslv2-force-cipher.py"}, - {"name" : "test-sslv2-force-export-cipher.py"}, - {"name" : "test-sslv2hello-protocol.py"}, - {"name" : "test-SSLv3-padding.py", - "comment" : "we accept zero filled padding in SSLv3", - "exp_pass" : false}, - {"name" : "test-TLSv1_2-rejected-without-TLSv1_2.py"}, - {"name" : "test-truncating-of-client-hello.py" }, - {"name" : "test-truncating-of-finished.py"}, - {"name" : "test-truncating-of-kRSA-client-key-exchange.py"}, - {"name" : "test-unsupported-cuve-fallback.py"}, - {"name" : "test-version-numbers.py"}, - {"name" : "test-zero-length-data.py"} + {"name" : "test-sslv2-connection.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-sslv2-force-cipher-3des.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-sslv2-force-cipher-non3des.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-sslv2-force-cipher.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-sslv2-force-export-cipher.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-sslv2hello-protocol.py", + "comment" : "https://gitlab.com/gnutls/gnutls/issues/771", + "arguments" : ["-p", "@PORT@", "--no-ssl2", + "-e", "Empty SSLv2 record - type 0", + "-e", "Empty SSLv2 record - type 1", + "-e", "Just version in SSLv2 hello", + "-e", "SSLv2 Client Hello"] }, + {"name" : "test-TLSv1_2-rejected-without-TLSv1_2.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-truncating-of-client-hello.py", + "comment" : "https://gitlab.com/gnutls/gnutls/issues/771", + "arguments" : ["-p", "@PORT@", + "-e", "max pad: 16777167 of \"0\" byte padding"] }, + {"name" : "test-truncating-of-finished.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-truncating-of-kRSA-client-key-exchange.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-unsupported-curve-fallback.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-version-numbers.py", + "arguments" : ["-p", "@PORT@"] }, + {"name" : "test-zero-length-data.py", + "arguments" : ["-p", "@PORT@"] } ] } ] diff --git a/tests/suite/tls-fuzzer/gnutls-nolimit-tls13.json b/tests/suite/tls-fuzzer/gnutls-nolimit-tls13.json new file mode 100644 index 0000000000..9139c78667 --- /dev/null +++ b/tests/suite/tls-fuzzer/gnutls-nolimit-tls13.json @@ -0,0 +1,42 @@ +[ + {"server_command": ["@SERVER@", "--http", + "--x509keyfile", "tests/serverX509Key.pem", + "--x509certfile", "tests/serverX509Cert.pem", + "--x509keyfile", "tests/serverRSAPSSKey.pem", + "--x509certfile", "tests/serverRSAPSSCert.pem", + "--x509keyfile", "../../../certs/ecc256.pem", + "--x509certfile", "../../../certs/cert-ecc256.pem", + "--debug=3", + "--httpdata=../http.dat", + "--priority=@PRIORITY@", + "--disable-client-cert", "--port=@PORT@"], + "server_hostname": "localhost", + "server_port": @PORT@, + "tests" : [ + {"name" : "test-record-size-limit.py", + "comment" : "changed extension after HRR is not supported #617", + "arguments" : ["-p", "@PORT@", "--reply-AD-size", "1024", + "-e", "change size in TLS 1.2 resumption", + "-e", "check if server accepts maximum size in TLS 1.0", + "-e", "check if server accepts maximum size in TLS 1.1", + "-e", "check if server accepts maximum size in TLS 1.2", + "-e", "check if server accepts minimal size in TLS 1.0", + "-e", "check if server accepts minimal size in TLS 1.1", + "-e", "check if server accepts minimal size in TLS 1.2", + "-e", "check interaction with sha256 prf", + "-e", "check interaction with sha384 prf", + "-e", "check server sent size in TLS 1.0", + "-e", "check server sent size in TLS 1.1", + "-e", "check server sent size in TLS 1.2", + "-e", "drop extension in TLS 1.2 resumption", + "-e", "modified extension in 2nd CH in HRR handshake", + "-e", "renegotiation with changed limit", + "-e", "renegotiation with dropped extension", + "-e", "added extension in 2nd CH in HRR handshake", + "-e", "check server sent size in TLS 1.0 with max_fragment_length", + "-e", "check server sent size in TLS 1.1 with max_fragment_length", + "-e", "check server sent size in TLS 1.2 with max_fragment_length", + "-e", "removed extension in 2nd CH in HRR handshake"] } + ] + } +] diff --git a/tests/suite/tls-fuzzer/gnutls-nolimit.json b/tests/suite/tls-fuzzer/gnutls-nolimit.json new file mode 100644 index 0000000000..2383a786c8 --- /dev/null +++ b/tests/suite/tls-fuzzer/gnutls-nolimit.json @@ -0,0 +1,37 @@ +[ + {"server_command": ["@SERVER@", "--http", + "--x509keyfile", "tests/serverX509Key.pem", + "--x509certfile", "tests/serverX509Cert.pem", + "--x509keyfile", "../../../certs/ecc256.pem", + "--x509certfile", "../../../certs/cert-ecc256.pem", + "--debug=3", + "--httpdata=../http.dat", + "--noticket", + "--priority=@PRIORITY@", + "--disable-client-cert", "--port=@PORT@"], + "server_hostname": "localhost", + "server_port": @PORT@, + "tests" : [ + {"name" : "test-record-size-limit.py", + "comment" : "TLS 1.3 tests are done separately; 1/n-1 splitting is not supported in TLS 1.0", + "arguments" : ["-p", "@PORT@", "--reply-AD-size", "1024", + "-e", "check if server accepts maximum size in TLS 1.0", + "-e", "check if server accepts maximum size in TLS 1.3", + "-e", "check if server accepts minimal size in TLS 1.0", + "-e", "check if server accepts minimal size in TLS 1.3", + "-e", "check if server omits extension for unrecognized size 64 in TLS 1.3", + "-e", "check if server omits extension for unrecognized size 511 in TLS 1.3", + "-e", "check server sent size in TLS 1.0", + "-e", "check server sent size in TLS 1.3", + "-e", "HRR sanity", + "-e", "too large record payload in TLS 1.3", + "-e", "change size in TLS 1.3 session resumption", + "-e", "drop extension in TLS 1.3 session resumption", + "-e", "modified extension in 2nd CH in HRR handshake", + "-e", "added extension in 2nd CH in HRR handshake", + "-e", "check server sent size in TLS 1.0 with max_fragment_length", + "-e", "check server sent size in TLS 1.3 with max_fragment_length", + "-e", "removed extension in 2nd CH in HRR handshake"] } + ] + } +] diff --git a/tests/suite/tls-fuzzer/gnutls-psk.json b/tests/suite/tls-fuzzer/gnutls-psk.json new file mode 100644 index 0000000000..e23eb8fa23 --- /dev/null +++ b/tests/suite/tls-fuzzer/gnutls-psk.json @@ -0,0 +1,18 @@ +[ + {"server_command": ["@SERVER@", "--http", + "--debug=3", + "--pskpasswd", "@PSKFILE@", + "--priority=@PRIORITY@", + "--port=@PORT@"], + "server_hostname": "localhost", + "server_port": @PORT@, + "tests" : [ + {"name" : "test-tls13-psk_ke.py", + "arguments" : ["-p", "@PORT@", "--psk", "@PSKKEY@", + "--psk-iden", "@PSKID@"]}, + {"name" : "test-tls13-psk_dhe_ke.py", + "arguments" : ["-p", "@PORT@", "--psk", "@PSKKEY@", + "--psk-iden", "@PSKID@"]} + ] + } +] diff --git a/tests/suite/tls-fuzzer/http.dat b/tests/suite/tls-fuzzer/http.dat new file mode 100644 index 0000000000..12dda9467f --- /dev/null +++ b/tests/suite/tls-fuzzer/http.dat @@ -0,0 +1,23 @@ +7 bottles of beer on the wall, 7 bottles of beer. +Take one down and pass it around, 6 bottles of beer on the wall. + +6 bottles of beer on the wall, 6 bottles of beer. +Take one down and pass it around, 5 bottles of beer on the wall. + +5 bottles of beer on the wall, 5 bottles of beer. +Take one down and pass it around, 4 bottles of beer on the wall. + +4 bottles of beer on the wall, 4 bottles of beer. +Take one down and pass it around, 3 bottles of beer on the wall. + +3 bottles of beer on the wall, 3 bottles of beer. +Take one down and pass it around, 2 bottles of beer on the wall. + +2 bottles of beer on the wall, 2 bottles of beer. +Take one down and pass it around, 1 bottle of beer on the wall. + +1 bottle of beer on the wall, 1 bottle of beer. +Take one down and pass it around, no more bottles of beer on the wall. + +No more bottles of beer on the wall, no more bottles of beer. +Go to the store and buy some more, 99 bottles of beer on the wall. diff --git a/tests/suite/tls-fuzzer/python-ecdsa b/tests/suite/tls-fuzzer/python-ecdsa index c877639b55..ffe9a61390 160000 --- a/tests/suite/tls-fuzzer/python-ecdsa +++ b/tests/suite/tls-fuzzer/python-ecdsa @@ -1 +1 @@ -Subproject commit c877639b55fa0651ecbbcc8b0d01627d25e5e8c3 +Subproject commit ffe9a61390c76ff6f6636e29f26b45c900535aaf diff --git a/tests/suite/tls-fuzzer/tls-fuzzer-alpn.sh b/tests/suite/tls-fuzzer/tls-fuzzer-alpn.sh new file mode 100755 index 0000000000..07ab0fa7f0 --- /dev/null +++ b/tests/suite/tls-fuzzer/tls-fuzzer-alpn.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Copyright (C) 2016-2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" + +tls_fuzzer_prepare() { +PRIORITY="NORMAL:%VERIFY_ALLOW_SIGN_WITH_SHA1:+ARCFOUR-128:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:-CURVE-SECP192R1:+VERS-SSL3.0" +${CLI} --list --priority "${PRIORITY}" >/dev/null 2>&1 +if test $? != 0;then + PRIORITY="NORMAL:%VERIFY_ALLOW_SIGN_WITH_SHA1:+ARCFOUR-128:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:+VERS-SSL3.0" +fi + +sed -e "s|@SERVER@|$SERV|g" -e "s/@PORT@/$PORT/g" -e "s/@PRIORITY@/$PRIORITY/g" ../gnutls-alpn.json >${TMPFILE} +} + +. "${srcdir}/tls-fuzzer/tls-fuzzer-common.sh" diff --git a/tests/suite/tls-fuzzer/tls-fuzzer-cert.sh b/tests/suite/tls-fuzzer/tls-fuzzer-cert.sh index ad068b5ead..054343fc28 100755 --- a/tests/suite/tls-fuzzer/tls-fuzzer-cert.sh +++ b/tests/suite/tls-fuzzer/tls-fuzzer-cert.sh @@ -19,53 +19,15 @@ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. srcdir="${srcdir:-.}" -SERV="../../../../src/gnutls-serv${EXEEXT}" -CLI="../../../../src/gnutls-cli${EXEEXT}" -OUTFILE=tls-fuzzer-cert.debug.log -TMPFILE=tls-fuzzer-cert.$$.tmp - -. "${srcdir}/../scripts/common.sh" - -# We hard-code the port because of limitations in tlsfuzzer -#eval "${GETPORT}" -PORT=4433 - -$LOCKFILE - -pushd tls-fuzzer - -if ! test -d tlsfuzzer;then - exit 77 -fi - -rm -f "$OUTFILE" - -pushd tlsfuzzer -test -L ecdsa || ln -s ../python-ecdsa/src/ecdsa ecdsa -test -L tlslite || ln -s ../tlslite-ng/tlslite tlslite 2>/dev/null - -wait_for_free_port $PORT - -retval=0 - -PRIORITY="NORMAL:+ARCFOUR-128:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:-CURVE-SECP192R1:+VERS-SSL3.0" +tls_fuzzer_prepare() { +PRIORITY="NORMAL:+ARCFOUR-128:%VERIFY_ALLOW_SIGN_WITH_SHA1:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:-CURVE-SECP192R1:+VERS-SSL3.0" ${CLI} --list --priority "${PRIORITY}" >/dev/null 2>&1 if test $? != 0;then - PRIORITY="NORMAL:+ARCFOUR-128:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:+VERS-SSL3.0" + PRIORITY="NORMAL:+ARCFOUR-128:%VERIFY_ALLOW_SIGN_WITH_SHA1:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:+VERS-SSL3.0" fi -TLS_PY=./tlslite-ng/scripts/tls.py -#TLS_PY=$(which tls.py) - sed -e "s|@SERVER@|$SERV|g" -e "s/@PORT@/$PORT/g" -e "s/@PRIORITY@/$PRIORITY/g" ../gnutls-cert.json >${TMPFILE} +} -PYTHONPATH=. python tests/scripts_retention.py ${TMPFILE} ${SERV} -retval=$? - -rm -f ${TMPFILE} - -popd - -$UNLOCKFILE -exit $retval +. "${srcdir}/tls-fuzzer/tls-fuzzer-common.sh" diff --git a/tests/suite/tls-fuzzer/tls-fuzzer-common.sh b/tests/suite/tls-fuzzer/tls-fuzzer-common.sh new file mode 100755 index 0000000000..b41f068a07 --- /dev/null +++ b/tests/suite/tls-fuzzer/tls-fuzzer-common.sh @@ -0,0 +1,55 @@ +#!/bin/bash + +# Copyright (C) 2016-2018 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +builddir=`pwd` +CLI="${builddir}/../../src/gnutls-cli${EXEEXT}" +SERV="${builddir}/../../src/gnutls-serv${EXEEXT}" + +TMPFILE="${builddir}/tls-fuzzer.$$.tmp" +PSKFILE="${builddir}/tls-fuzzer.psk.$$.tmp" + +. "${srcdir}/../scripts/common.sh" + +eval "${GETPORT}" + +if ! test -d "${srcdir}/tls-fuzzer/tlsfuzzer" ; then + exit 77 +fi + +pushd "${srcdir}/tls-fuzzer/tlsfuzzer" + +test -L ecdsa || ln -s ../python-ecdsa/src/ecdsa ecdsa +test -L tlslite || ln -s ../tlslite-ng/tlslite tlslite 2>/dev/null + +wait_for_free_port $PORT + +retval=0 + +tls_fuzzer_prepare + +PYTHONPATH=. python tests/scripts_retention.py ${TMPFILE} ${SERV} 821 +retval=$? + +rm -f ${TMPFILE} +[ -f "${PSKFILE}" ] && rm -f ${PSKFILE} + +popd + +exit $retval diff --git a/tests/suite/tls-fuzzer/tls-fuzzer-nocert-ssl3.sh b/tests/suite/tls-fuzzer/tls-fuzzer-nocert-ssl3.sh new file mode 100755 index 0000000000..37efc16241 --- /dev/null +++ b/tests/suite/tls-fuzzer/tls-fuzzer-nocert-ssl3.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Copyright (C) 2016-2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" + +tls_fuzzer_prepare() { +PRIORITY="NORMAL:%VERIFY_ALLOW_SIGN_WITH_SHA1:+ARCFOUR-128:+3DES-CBC:-VERS-ALL:+VERS-SSL3.0" + +sed -e "s|@SERVER@|$SERV|g" -e "s/@PORT@/$PORT/g" -e "s/@PRIORITY@/$PRIORITY/g" ../gnutls-nocert-ssl3.json >${TMPFILE} +} + +. "${srcdir}/tls-fuzzer/tls-fuzzer-common.sh" diff --git a/tests/suite/tls-fuzzer/tls-fuzzer-nocert-tls13.sh b/tests/suite/tls-fuzzer/tls-fuzzer-nocert-tls13.sh new file mode 100755 index 0000000000..f9268627a2 --- /dev/null +++ b/tests/suite/tls-fuzzer/tls-fuzzer-nocert-tls13.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Copyright (C) 2016-2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" + +tls_fuzzer_prepare() { +PRIORITY="NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:+AES-128-CCM:+AES-256-CCM:+AES-128-CCM-8" + +sed -e "s|@SERVER@|$SERV|g" -e "s/@PORT@/$PORT/g" -e "s/@PRIORITY@/$PRIORITY/g" ../gnutls-nocert-tls13.json >${TMPFILE} +} + +. "${srcdir}/tls-fuzzer/tls-fuzzer-common.sh" diff --git a/tests/suite/tls-fuzzer/tls-fuzzer-nocert.sh b/tests/suite/tls-fuzzer/tls-fuzzer-nocert.sh index 6459fbf4df..5405fc936c 100755 --- a/tests/suite/tls-fuzzer/tls-fuzzer-nocert.sh +++ b/tests/suite/tls-fuzzer/tls-fuzzer-nocert.sh @@ -19,53 +19,16 @@ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. srcdir="${srcdir:-.}" -SERV="../../../../src/gnutls-serv${EXEEXT}" -CLI="../../../../src/gnutls-cli${EXEEXT}" -OUTFILE=tls-fuzzer.debug.log -TMPFILE=tls-fuzzer.$$.tmp - -. "${srcdir}/../scripts/common.sh" - -# We hard-code the port because of limitations in tlsfuzzer -#eval "${GETPORT}" -PORT=4433 - -$LOCKFILE - -pushd tls-fuzzer - -if ! test -d tlsfuzzer;then - exit 77 -fi - -rm -f "$OUTFILE" - -pushd tlsfuzzer -test -L ecdsa || ln -s ../python-ecdsa/src/ecdsa ecdsa -test -L tlslite || ln -s ../tlslite-ng/tlslite tlslite 2>/dev/null - -wait_for_free_port $PORT - -retval=0 - -PRIORITY="NORMAL:+ARCFOUR-128:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:-CURVE-SECP192R1:+VERS-SSL3.0" +tls_fuzzer_prepare() { +VERSIONS="-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:+VERS-SSL3.0" +PRIORITY="NORMAL:%VERIFY_ALLOW_SIGN_WITH_SHA1:+ARCFOUR-128:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:-CURVE-SECP192R1:${VERSIONS}:+SHA256:+SHA384:+AES-128-CCM:+AES-256-CCM:+AES-128-CCM-8:+AES-256-CCM-8" ${CLI} --list --priority "${PRIORITY}" >/dev/null 2>&1 if test $? != 0;then - PRIORITY="NORMAL:+ARCFOUR-128:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:+VERS-SSL3.0" + PRIORITY="NORMAL:%VERIFY_ALLOW_SIGN_WITH_SHA1:+ARCFOUR-128:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:${VERSIONS}:+SHA256:+SHA384:+AES-128-CCM:+AES-256-CCM:+AES-128-CCM-8:+AES-256-CCM-8" fi -TLS_PY=./tlslite-ng/scripts/tls.py -#TLS_PY=$(which tls.py) - sed -e "s|@SERVER@|$SERV|g" -e "s/@PORT@/$PORT/g" -e "s/@PRIORITY@/$PRIORITY/g" ../gnutls-nocert.json >${TMPFILE} +} -PYTHONPATH=. python tests/scripts_retention.py ${TMPFILE} ${SERV} -retval=$? - -rm -f ${TMPFILE} - -popd - -$UNLOCKFILE -exit $retval +. "${srcdir}/tls-fuzzer/tls-fuzzer-common.sh" diff --git a/tests/suite/tls-fuzzer/tls-fuzzer-nolimit-tls13.sh b/tests/suite/tls-fuzzer/tls-fuzzer-nolimit-tls13.sh new file mode 100755 index 0000000000..4b0e0fa087 --- /dev/null +++ b/tests/suite/tls-fuzzer/tls-fuzzer-nolimit-tls13.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Copyright (C) 2016-2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" + +tls_fuzzer_prepare() { +PRIORITY="NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:%ALLOW_SMALL_RECORDS" + +sed -e "s|@SERVER@|$SERV|g" -e "s/@PORT@/$PORT/g" -e "s/@PRIORITY@/$PRIORITY/g" ../gnutls-nolimit-tls13.json >${TMPFILE} +} + +. "${srcdir}/tls-fuzzer/tls-fuzzer-common.sh" diff --git a/tests/suite/tls-fuzzer/tls-fuzzer-nolimit.sh b/tests/suite/tls-fuzzer/tls-fuzzer-nolimit.sh new file mode 100755 index 0000000000..df1ae6bcc2 --- /dev/null +++ b/tests/suite/tls-fuzzer/tls-fuzzer-nolimit.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# Copyright (C) 2016-2017 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" + +tls_fuzzer_prepare() { +VERSIONS="-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:+VERS-SSL3.0" +PRIORITY="NORMAL:%VERIFY_ALLOW_SIGN_WITH_SHA1:+ARCFOUR-128:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:-CURVE-SECP192R1:${VERSIONS}:+SHA256:%ALLOW_SMALL_RECORDS" +${CLI} --list --priority "${PRIORITY}" >/dev/null 2>&1 +if test $? != 0;then + PRIORITY="NORMAL:%VERIFY_ALLOW_SIGN_WITH_SHA1:+ARCFOUR-128:+3DES-CBC:+DHE-DSS:+SIGN-DSA-SHA256:+SIGN-DSA-SHA1:${VERSIONS}:+SHA256:%ALLOW_SMALL_RECORDS" +fi + +sed -e "s|@SERVER@|$SERV|g" -e "s/@PORT@/$PORT/g" -e "s/@PRIORITY@/$PRIORITY/g" ../gnutls-nolimit.json >${TMPFILE} +} + +. "${srcdir}/tls-fuzzer/tls-fuzzer-common.sh" diff --git a/tests/suite/tls-fuzzer/tls-fuzzer-psk.sh b/tests/suite/tls-fuzzer/tls-fuzzer-psk.sh new file mode 100755 index 0000000000..aeefae9a5e --- /dev/null +++ b/tests/suite/tls-fuzzer/tls-fuzzer-psk.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# Copyright (C) 2016-2018 Red Hat, Inc. +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" + +tls_fuzzer_prepare() { +PRIORITY="NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:-KX-ALL:+DHE-PSK:+ECDHE-PSK:+PSK" + +PSKKEY=8a7759b3f26983c453e448060bde8981 +PSKID=test + +sed -e "s|@SERVER@|$SERV|g" -e "s/@PSKKEY@/$PSKKEY/g" -e "s/@PSKID@/$PSKID/g" -e "s^@PSKFILE@^$PSKFILE^g" -e "s/@PORT@/$PORT/g" -e "s/@PRIORITY@/$PRIORITY/g" ../gnutls-psk.json >${TMPFILE} + +cat >${PSKFILE} <<_EOF_ +${PSKID}:${PSKKEY} +_EOF_ +} + +. "${srcdir}/tls-fuzzer/tls-fuzzer-common.sh" diff --git a/tests/suite/tls-fuzzer/tlsfuzzer b/tests/suite/tls-fuzzer/tlsfuzzer index 06c4054658..ca536d11ac 160000 --- a/tests/suite/tls-fuzzer/tlsfuzzer +++ b/tests/suite/tls-fuzzer/tlsfuzzer @@ -1 +1 @@ -Subproject commit 06c4054658d8e434424aadd90c84996a480baf11 +Subproject commit ca536d11ac14da2deacbde95f3f0a70a5ce42112 diff --git a/tests/suite/tls-fuzzer/tlslite-ng b/tests/suite/tls-fuzzer/tlslite-ng index 26a323a8be..bff8773e43 160000 --- a/tests/suite/tls-fuzzer/tlslite-ng +++ b/tests/suite/tls-fuzzer/tlslite-ng @@ -1 +1 @@ -Subproject commit 26a323a8beb51a8696f578769295db98121570b6 +Subproject commit bff8773e4309cc43dd6acf0a6d4623949f911fd7 diff --git a/tests/suite/x509paths/README b/tests/suite/x509paths/README index d56032dcec..f39272733e 100644 --- a/tests/suite/x509paths/README +++ b/tests/suite/x509paths/README @@ -1,7 +1,7 @@ This directory contains self-tests based on NIST's old X.509 test vectors, downloaded (2007-02-13) from: -http://csrc.nist.gov/pki/testing/x509paths_old.html +https://csrc.nist.gov/pki/testing/x509paths_old.html 6c42afd89f6e9ebe330bf5f361b837840c132bf5 x509tests.tgz 92d43f0f24b15e9e2d42af8f0c4caffc78d94ad1 certpath1.07.zip diff --git a/tests/suppressions.valgrind b/tests/suppressions.valgrind index 6f2f7dd0ce..1dc5454921 100644 --- a/tests/suppressions.valgrind +++ b/tests/suppressions.valgrind @@ -289,3 +289,10 @@ fun:fillin_rpath ... } +{ + gnutls-false-positive + Memcheck:Cond + fun:decode_complex_string.isra.0 + fun:_gnutls_x509_dn_to_string + ... +} diff --git a/tests/system-override-curves.sh b/tests/system-override-curves.sh new file mode 100755 index 0000000000..84d581bc8f --- /dev/null +++ b/tests/system-override-curves.sh @@ -0,0 +1,112 @@ +#!/bin/sh + +# Copyright (C) 2019 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +TMPFILE=config.$$.tmp +TMPFILE2=log.$$.tmp +export GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID=1 + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +. "${srcdir}/scripts/common.sh" + +# This test doesn't work in FIPS mode +if test -n "${GNUTLS_FORCE_FIPS_MODE}" && test "${GNUTLS_FORCE_FIPS_MODE}" != 0; then + exit 77 +fi + +# We intentionally add stray spaces and tabs to check our parser +cat <<_EOF_ > ${TMPFILE} +[overrides] + +disabled-curve = secp256r1 +disabled-curve = secp521r1 +_EOF_ + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" +export GNUTLS_DEBUG_LEVEL=3 + +"${CLI}" --list|grep ^Groups >${TMPFILE2} +cat ${TMPFILE2} +if grep -i "SECP256R1" ${TMPFILE2} || grep -i "SECP521R1" ${TMPFILE2};then + echo "Found disabled curve with --list" + exit 1 +fi + +if ! grep -i "SECP384R1" ${TMPFILE2};then + echo "Could not found secp384r1" + exit 1 +fi + +# Try whether a client connection with a disabled curve will succeed. + +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem + +unset GNUTLS_SYSTEM_PRIORITY_FILE + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3" --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-CURVE-ALL:+CURVE-SECP256R1:+CURVE-SECP521R1 --insecure --logfile ${TMPFILE2} /dev/null || + fail "expected connection to succeed (1)" + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-CURVE-ALL:+CURVE-SECP256R1:+CURVE-SECP521R1 --insecure --logfile ${TMPFILE2} /dev/null && + fail "expected connection to fail (2)" + +kill ${PID} +wait + +# Try whether a server connection with a disabled curve will succeed. + +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL" --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +unset GNUTLS_SYSTEM_PRIORITY_FILE + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority "NORMAL:-CURVE-ALL:+CURVE-SECP256R1:+CURVE-SECP521R1" --insecure --logfile ${TMPFILE2} /dev/null && + fail "expected connection to fail (2)" + +kill ${PID} +wait + +exit 0 diff --git a/tests/system-override-default-priority-string.bad.config b/tests/system-override-default-priority-string.bad.config new file mode 100644 index 0000000000..ca88d71115 --- /dev/null +++ b/tests/system-override-default-priority-string.bad.config @@ -0,0 +1,3 @@ +SYSTEM=NORMAL +[overrides] +default-priority-string = diff --git a/tests/system-override-default-priority-string.none.config b/tests/system-override-default-priority-string.none.config new file mode 100644 index 0000000000..0a42c3a743 --- /dev/null +++ b/tests/system-override-default-priority-string.none.config @@ -0,0 +1,2 @@ +[overrides] +default-priority-string = NONE diff --git a/tests/system-override-default-priority-string.only-tls13.config b/tests/system-override-default-priority-string.only-tls13.config new file mode 100644 index 0000000000..c4614a19f6 --- /dev/null +++ b/tests/system-override-default-priority-string.only-tls13.config @@ -0,0 +1,2 @@ +[overrides] +default-priority-string = NORMAL:-VERS-ALL:+VERS-TLS1.3 diff --git a/tests/system-override-default-priority-string.sh b/tests/system-override-default-priority-string.sh new file mode 100755 index 0000000000..b0c963bb9c --- /dev/null +++ b/tests/system-override-default-priority-string.sh @@ -0,0 +1,93 @@ +#!/bin/sh +# Copyright (C) 2019 Canonical, Ltd. +# +# Author: Dimitri John Ledkov +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +TMPFILE=config.$$.tmp +TMPFILE2=log.$$.tmp +STOCK_PRIORITY="${GNUTLS_SYSTEM_PRIORITY_FILE:-./system.prio}" +export GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID=1 + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +. "${srcdir}/scripts/common.sh" + +export GNUTLS_DEBUG_LEVEL=3 +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem + +# Try whether a client connection with priority string None succeeds +export GNUTLS_SYSTEM_PRIORITY_FILE="${srcdir}/system-override-default-priority-string.none.config" +eval "${GETPORT}" +launch_server $$ --echo --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +export GNUTLS_SYSTEM_PRIORITY_FILE="${STOCK_PRIORITY}" +"${CLI}" -p "${PORT}" 127.0.0.1 --insecure --logfile ${TMPFILE2} /dev/null && + fail "expected connection to fail (1)" +kill ${PID} +wait + +# Try whether a client connection to an tls1.3 only server succeeds +export GNUTLS_SYSTEM_PRIORITY_FILE="${srcdir}/system-override-default-priority-string.only-tls13.config" +eval "${GETPORT}" +launch_server $$ --echo --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +export GNUTLS_SYSTEM_PRIORITY_FILE="${STOCK_PRIORITY}" +"${CLI}" -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-TLS1.3" --insecure --logfile ${TMPFILE2} /dev/null && + fail "expected connection to fail (2)" + +export GNUTLS_SYSTEM_PRIORITY_FILE="${STOCK_PRIORITY}" +"${CLI}" -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3" --insecure --logfile ${TMPFILE2} /dev/null || + fail "expected connection to succeed (1)" + +kill ${PID} +wait + +# Check that a bad (empty) default-priority-string results in an built-one being used, when non-strict +export GNUTLS_SYSTEM_PRIORITY_FILE="${srcdir}/system-override-default-priority-string.bad.config" +unset GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID +eval "${GETPORT}" +launch_server $$ --echo --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +"${CLI}" -p "${PORT}" 127.0.0.1 --insecure --logfile ${TMPFILE2} /dev/null || + fail "expected connection to succeed (2)" + +kill ${PID} +wait + +exit 0 diff --git a/tests/system-override-hash.c b/tests/system-override-hash.c new file mode 100644 index 0000000000..e96481918d --- /dev/null +++ b/tests/system-override-hash.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#include "utils.h" +#include + +/* This test verifies whether a system-wide configuration which disables SHA256 + * and SHA512 is seen from the library side. + */ + +void doit(void) +{ + /* sanity */ + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_PSS_SHA384) != 0); + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_MD5) == 0); + + /* check whether the values set by the calling script are the expected */ + assert(gnutls_sign_is_secure(GNUTLS_SIGN_DSA_SHA256) == 0); + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_SHA256) == 0); + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_SHA512) == 0); + assert(gnutls_sign_is_secure(GNUTLS_SIGN_ECDSA_SHA256) == 0); + assert(gnutls_sign_is_secure(GNUTLS_SIGN_ECDSA_SHA512) == 0); + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_PSS_SHA256) == 0); + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_PSS_SHA512) == 0); +} diff --git a/tests/system-override-invalid.sh b/tests/system-override-invalid.sh new file mode 100755 index 0000000000..9bd1e91f93 --- /dev/null +++ b/tests/system-override-invalid.sh @@ -0,0 +1,64 @@ +#!/bin/sh + +# Copyright (C) 2019 Nikos Mavrogiannopoulos +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +TMPFILE=c.$$.tmp +export GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID=1 + +cat <<_EOF_ > ${TMPFILE} +[overrides] + +insecure-something = md5 +insecure-hash = sha256 +insecure-hash= sha512 +_EOF_ + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" +${CLI} --list -d 4 >/dev/null 2>&1 +if test $? = 0;then + echo "unknown option was not caught" + exit 1 +fi + + +cat <<_EOF_ > ${TMPFILE} +[overrides] + +insecure-sig-for-cert = rsa-sha256 +insecure-sig = rsa-sha512 +insecure-sig = rsa-sha1 + +[unknown-section] +insecure-sig = rsa-sha512 +insecure-sig = rsa-sha1 +_EOF_ + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" + +${CLI} --list >/dev/null 2>&1 +if test $? = 0;then + echo "unknown section was not caught" + exit 1 +fi + +exit 0 diff --git a/tests/system-override-kx.sh b/tests/system-override-kx.sh new file mode 100755 index 0000000000..cd318a1650 --- /dev/null +++ b/tests/system-override-kx.sh @@ -0,0 +1,104 @@ +#!/bin/sh + +# Copyright (C) 2019 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +TMPFILE=config.$$.tmp +TMPFILE2=log.$$.tmp +export GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID=1 + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +. "${srcdir}/scripts/common.sh" + +# We intentionally add stray spaces and tabs to check our parser +cat <<_EOF_ > ${TMPFILE} +[overrides] + +tls-disabled-kx = dhe-dss +tls-disabled-kx = dhe-rsa +tls-disabled-kx = unknown +_EOF_ + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" +export GNUTLS_DEBUG_LEVEL=3 + +# Try whether a client connection with a disabled KX algorithm will succeed. + +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem + +unset GNUTLS_SYSTEM_PRIORITY_FILE + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2" --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-KX-ALL:+DHE-RSA --insecure --logfile ${TMPFILE2} /dev/null || + fail "expected connection to succeed (1)" + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-KX-ALL:+DHE-RSA --insecure --logfile ${TMPFILE2} /dev/null && + fail "expected connection to fail (2)" + +# test whether the unknown KX will be caught +GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID=1 +export GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL --insecure --logfile ${TMPFILE2} /dev/null && + fail "expected connection to succeed (3)" + +unset GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID + +kill ${PID} +wait + +# Try whether a server connection with a disabled KX will succeed. + +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2" --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +unset GNUTLS_SYSTEM_PRIORITY_FILE + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority "NORMAL:-KX-ALL:+DHE-RSA" --insecure --logfile ${TMPFILE2} /dev/null && + fail "expected connection to fail (2)" + +kill ${PID} +wait + +exit 0 diff --git a/tests/system-override-profiles.sh b/tests/system-override-profiles.sh new file mode 100755 index 0000000000..88ec631798 --- /dev/null +++ b/tests/system-override-profiles.sh @@ -0,0 +1,105 @@ +#!/bin/sh + +# Copyright (C) 2019 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see +# + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +TMPFILE=config.$$.tmp +TMPFILE2=log.$$.tmp +export GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID=1 + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +. "${srcdir}/scripts/common.sh" + +check_for_datefudge + +CERT="${srcdir}/certs/cert-ecc256.pem" +KEY="${srcdir}/certs/ecc256.pem" + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL" --x509keyfile ${KEY} --x509certfile ${CERT} +PID=$! +wait_server ${PID} + +# successful case, 224 bit min-profile, 256 bit key +cat <<_EOF_ > ${TMPFILE} +[overrides] + +# 224 bits +min-verification-profile=medium +_EOF_ + +export GNUTLS_DEBUG_LEVEL=3 +unset GNUTLS_SYSTEM_PRIORITY_FILE + +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" --logfile ${TMPFILE2} /dev/null || + fail "expected connection to succeed (1)" + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" + +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_LOW --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" --logfile ${TMPFILE2} /dev/null || + fail "expected connection to succeed (2)" + +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_MEDIUM --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" --logfile ${TMPFILE2} /dev/null || + fail "expected connection to succeed (3)" + +# failure case, 384 bit min-profile, 256 bit key +cat <<_EOF_ > ${TMPFILE} +[overrides] + +min-verification-profile=ultra +_EOF_ + +unset GNUTLS_SYSTEM_PRIORITY_FILE + +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" --logfile ${TMPFILE2} /dev/null || + fail "expected connection to succeed (1)" + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" + +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_LOW --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" --logfile ${TMPFILE2} /dev/null && + fail "expected connection to fail (1)" + +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:%PROFILE_MEDIUM --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" --logfile ${TMPFILE2} /dev/null && + fail "expected connection to fail (2)" + +kill ${PID} +wait + +exit 0 diff --git a/tests/system-override-sig-hash.sh b/tests/system-override-sig-hash.sh new file mode 100755 index 0000000000..37980ec584 --- /dev/null +++ b/tests/system-override-sig-hash.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +# Copyright (C) 2019 Nikos Mavrogiannopoulos +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +TMPFILE=c.$$.tmp +export GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID=1 + +cat <<_EOF_ > ${TMPFILE} +[overrides] + +insecure-hash = sha256 +insecure-hash = sha512 +_EOF_ + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" + +${builddir}/system-override-hash + +cat <<_EOF_ > ${TMPFILE} +[overrides] + +insecure-sig-for-cert = rsa-sha256 +insecure-sig = rsa-sha512 +insecure-sig = rsa-sha1 +_EOF_ + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" + +${builddir}/system-override-sig +if test $? != 0;then + echo "Could not parse config file" + exit 1 +fi + +exit 0 diff --git a/tests/system-override-sig.c b/tests/system-override-sig.c new file mode 100644 index 0000000000..9e6171c446 --- /dev/null +++ b/tests/system-override-sig.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#include "utils.h" +#include + +/* This test verifies whether a system-wide configuration which disables RSA-SHA256, + * RSA-SHA1 and RSA-SHA512 is seen from the library side. + */ + +void doit(void) +{ + /* sanity */ + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_PSS_SHA384) != 0); + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_MD5) == 0); + + /* check whether the values set by the calling script are the expected */ + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_SHA256) != 0); + assert(gnutls_sign_is_secure2(GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS) == 0); + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_SHA1) == 0); + assert(gnutls_sign_is_secure2(GNUTLS_SIGN_RSA_SHA1, GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS) == 0); + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_SHA512) == 0); + assert(gnutls_sign_is_secure2(GNUTLS_SIGN_RSA_SHA512, GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS) == 0); + assert(gnutls_sign_is_secure(GNUTLS_SIGN_RSA_MD5) == 0); +} diff --git a/tests/system-override-tls.sh b/tests/system-override-tls.sh new file mode 100755 index 0000000000..6114d76282 --- /dev/null +++ b/tests/system-override-tls.sh @@ -0,0 +1,125 @@ +#!/bin/sh + +# Copyright (C) 2019 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see +# + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +TMPFILE=config.$$.tmp +export GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID=1 + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +. "${srcdir}/scripts/common.sh" + +check_for_datefudge + +CERT="${srcdir}/certs/cert-ecc256.pem" +KEY="${srcdir}/certs/ecc256.pem" + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL:+SHA256" --x509keyfile ${KEY} --x509certfile ${CERT} +PID=$! +wait_server ${PID} + +#successful case, test whether the ciphers we disable below work +echo "Sanity testing" + +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-CIPHER-ALL:+AES-128-GCM:-GROUP-ALL:+GROUP-FFDHE2048 --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" /dev/null || + fail ${PID} "stage1: expected connection to succeed (1)" + +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-VERS-ALL:+VERS-TLS1.2:-CIPHER-ALL:+AES-128-CBC:+AES-256-CBC:-MAC-ALL:+SHA1 --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" /dev/null || + fail ${PID} "stage1: expected connection to succeed (2)" + +cat <<_EOF_ > ${TMPFILE} +[overrides] + +tls-disabled-cipher = aes-128-gcm +tls-disabled-cipher = aes-128-cbc +tls-disabled-mac = sha1 +tls-disabled-group = group-ffdhe2048 +_EOF_ + +GNUTLS_SYSTEM_PRIORITY_FILE=${TMPFILE} +export GNUTLS_DEBUG_LEVEL=3 +export GNUTLS_SYSTEM_PRIORITY_FILE + +echo "Testing TLS1.3" +echo " * sanity" +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" /dev/null || + fail ${PID} "stage2: expected connection to succeed (1)" + +echo " * fallback to good options" +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-CIPHER-ALL:+AES-128-GCM:+AES-256-GCM:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-FFDHE3072 --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" /dev/null || + fail ${PID} "stage2: expected connection to succeed (2)" + +echo " * disabled cipher" +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-CIPHER-ALL:+AES-128-GCM --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" /dev/null && + fail ${PID} "stage2: expected connection to fail (1)" + +echo " * disabled group" +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-GROUP-ALL:+GROUP-FFDHE2048 --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" /dev/null && + fail ${PID} "stage2: expected connection to fail (2)" + +echo "Testing TLS1.2" +echo " * sanity" +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-VERS-ALL:+VERS-TLS1.2 --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" /dev/null || + fail ${PID} "stage3: expected connection to succeed (1)" + +echo " * fallback to good options" +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-VERS-ALL:+VERS-TLS1.2:-CIPHER-ALL:+AES-128-CBC:+AES-256-CBC:+AES-256-GCM:-MAC-ALL:+SHA1:+AEAD --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" /dev/null || + fail ${PID} "stage3: expected connection to succeed (2)" + +echo " * disabled cipher" +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-VERS-ALL:+VERS-TLS1.2:-CIPHER-ALL:+AES-128-CBC --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" /dev/null && + fail ${PID} "stage3: expected connection to fail (1)" + +echo " * disabled MAC" +datefudge "2017-11-22" \ +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL:-VERS-ALL:+VERS-TLS1.2:-MAC-ALL:+SHA1 --verify-hostname localhost --x509cafile "${srcdir}/certs/ca-cert-ecc.pem" /dev/null && + fail ${PID} "stage3: expected connection to fail (2)" + + +kill ${PID} +wait + +rm -f ${TMPFILE} + +exit 0 diff --git a/tests/system-override-versions.sh b/tests/system-override-versions.sh new file mode 100755 index 0000000000..e5191e2aeb --- /dev/null +++ b/tests/system-override-versions.sh @@ -0,0 +1,106 @@ +#!/bin/sh + +# Copyright (C) 2019 Red Hat, Inc. +# +# Author: Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +TMPFILE=config.$$.tmp +TMPFILE2=log.$$.tmp +export GNUTLS_SYSTEM_PRIORITY_FAIL_ON_INVALID=1 + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if test "${WINDIR}" != ""; then + exit 77 +fi + +. "${srcdir}/scripts/common.sh" + +cat <<_EOF_ > ${TMPFILE} +[overrides] + +disabled-version = tls1.2 +disabled-version = tls1.3 +_EOF_ + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" +export GNUTLS_DEBUG_LEVEL=3 + +"${CLI}" --list|grep Protocols >${TMPFILE2} +cat ${TMPFILE2} +if grep "VERS-TLS1.2" ${TMPFILE2} || grep "VERS-TLS1.3" ${TMPFILE2};then + echo "Found disabled protocol with --list" + exit 1 +fi + +"${CLI}" --priority NORMAL --list|grep Protocols >${TMPFILE2} +cat ${TMPFILE2} +if grep "VERS-TLS1.2" ${TMPFILE2} || grep "VERS-TLS1.3" ${TMPFILE2};then + echo "Found disabled protocol with --list --priority NORMAL" + exit 1 +fi + +# Try whether a client connection with these protocols will succeed. + +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem + +unset GNUTLS_SYSTEM_PRIORITY_FILE + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3" --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +export GNUTLS_SYSTEM_PRIORITY_FILE="${TMPFILE}" + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority NORMAL --insecure --logfile ${TMPFILE2} /dev/null && + fail "expected connection to fail (1)" + +kill ${PID} +wait + +# Try whether a server connection with these protocols will succeed. + +KEY1=${srcdir}/../doc/credentials/x509/key-rsa.pem +CERT1=${srcdir}/../doc/credentials/x509/cert-rsa.pem + +eval "${GETPORT}" +launch_server $$ --echo --priority "NORMAL" --x509keyfile ${KEY1} --x509certfile ${CERT1} +PID=$! +wait_server ${PID} + +unset GNUTLS_SYSTEM_PRIORITY_FILE + +"${CLI}" -p "${PORT}" 127.0.0.1 --priority "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3" --insecure --logfile ${TMPFILE2} /dev/null && + fail "expected connection to fail (2)" + +kill ${PID} +wait + +exit 0 diff --git a/tests/system-prio-file.c b/tests/system-prio-file.c index e0dfa9460c..fbe7d0af80 100644 --- a/tests/system-prio-file.c +++ b/tests/system-prio-file.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "utils.h" @@ -51,13 +52,15 @@ try_prio(const char *prio, const char *expected_str) if (p == NULL && expected_str == NULL) goto ok; + assert(strstr(gnutls_get_system_config_file(), "system.prio") != NULL); + if (p == NULL || expected_str == NULL || strcmp(p, expected_str) != 0) { fail("test: %s: error; got: %s, expected: %s\n", prio, p, expected_str); exit(1); } ok: - free(p); + gnutls_free(p); gnutls_global_deinit(); } @@ -84,4 +87,3 @@ void doit(void) try_prio("@HELLONO:+AES-128-CBC", NULL); try_prio("@HELLONO,:+AES-128-CBC", NULL); } - diff --git a/tests/test-chains.h b/tests/test-chains.h index c825a455a1..dd19e6a815 100644 --- a/tests/test-chains.h +++ b/tests/test-chains.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2008-2014 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * * Authors: Simon Josefsson, Nikos Mavrogiannopoulos, Martin Ukrop * @@ -15,15 +16,1012 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ +#ifndef GNUTLS_TESTS_TEST_CHAINS_H +#define GNUTLS_TESTS_TEST_CHAINS_H + /* *INDENT-OFF* */ #define MAX_CHAIN 10 +static const char *chain_with_no_subject_id_in_ca_ok[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIFVDCCBDygAwIBAgIQR+AAAAAAXtwVoBdbGUjUQDANBgkqhkiG9w0BAQsFADBv\n" + "MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRowGAYDVQQLExFTZWN1\n" + "cmUgU1NMIFN1Yi1DQTEwMC4GA1UEAxMnVFdDQSBTZWN1cmUgU1NMIENlcnRpZmlj\n" + "YXRpb24gQXV0aG9yaXR5MB4XDTE2MDcyNjAyMTY1NloXDTE5MDcyNjE1NTk1OVow\n" + "gaAxCzAJBgNVBAYTAlRXMQ8wDQYDVQQIEwZUYWl3YW4xDzANBgNVBAcTBlRhaXBl\n" + "aTEjMCEGA1UEChMaTmF0aW9uYWwgVGFpd2FuIFVuaXZlcnNpdHkxMzAxBgNVBAsT\n" + "KkNvbXB1dGVyIGFuZCBJbmZvcm1hdGlvbiBOZXR3b3JraW5nIENlbnRlcjEVMBMG\n" + "A1UEAwwMKi5udHUuZWR1LnR3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\n" + "AQEAxs5vKRdaicZTmxC+vY6ZZ/wCJNxFJGsRTlyRmDHr/fXD6mTcZSjsRY+LpAbF\n" + "RqPKj5zuQtXdk9j4UGieajWSqmDNZy4+5gEqmjgU+vrYCK+uWHwAzdDCSWgGv29/\n" + "2/QOyl22OkpdiFv0wf00Rz86l9Oua3Zml8LW/LB8JO5w15yhlo+VgMy7mFFaBItG\n" + "sV5IEq8CFfaz0+T7/Bf17u2Ckl1jLKIJHp5Qm0FrPA4a0KEVg9RNYeo5evieI9et\n" + "UpAXO2EEHsakg+8yBrm4llRt7onb32hiZvAstak2FaHPRHdZtDQY1QrmTBYgPdzx\n" + "sOV5bE+NTeE04eEA22g7HbQsRwIDAQABo4IBuDCCAbQwHwYDVR0jBBgwFoAU+AfC\n" + "aCT/hZXL2x7jM5wqT5cgVnswKQYDVR0OBCIEIGjmBQmIw+x+peJLZ3wJMHsAsbyN\n" + "kz5qkj/ZA5UH0pu2MFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9zc2xzZXJ2ZXIu\n" + "dHdjYS5jb20udHcvc3Nsc2VydmVyL1NlY3VyZXNzbF9yZXZva2Vfc2hhMl8yMDE0\n" + "LmNybDAXBgNVHREEEDAOggwqLm50dS5lZHUudHcwgYEGCCsGAQUFBwEBBHUwczBE\n" + "BggrBgEFBQcwAoY4aHR0cDovL3NzbHNlcnZlci50d2NhLmNvbS50dy9jYWNlcnQv\n" + "c2VjdXJlX3NoYTJfMjAxNC5jcnQwKwYIKwYBBQUHMAGGH2h0dHA6Ly90d2Nhc3Ns\n" + "b2NzcC50d2NhLmNvbS50dy8wNwYDVR0gBDAwLjAsBgsrBgEEAYK/JQEBGTAdMBsG\n" + "CCsGAQUFBwIBFg93d3cudHdjYS5jb20udHcwCQYDVR0TBAIwADAOBgNVHQ8BAf8E\n" + "BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA0GCSqGSIb3DQEB\n" + "CwUAA4IBAQC7AMzY2nvycER/Kh5gZltVcWhOYotMJoLcsdw5Vl1drauE4eK6hc/E\n" + "vB6YeSRHVr5+XTksSHRj4HXgaUBYb/llOstOwF5sygwOneMj8TF7KP8Lz1OMbUao\n" + "iiitO5MOgfx5bQeWrUAwQerbZDp0ApDQcJfHG8HfUhJhYiXLWoXlb41SFwSSUtk5\n" + "VRqAIdjlg9wxhxP+0qz6llhL2ycJfrgX+eZyceoeoeaLTEpiev2jWfcTwmuz7CMn\n" + "ggIDPuvJ5cZ5Sh9hvzfNP7Vp2s+dV4idydwUTzZv0oC60/UQs7HUpjThno0S9h2u\n" + "s42h0Usx0Dxa7Mr8ddLLort1k2hlHHko\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIFsTCCA5mgAwIBAgIQQAEzU+QAAAAAAAAMw26IjTANBgkqhkiG9w0BAQsFADBR\n" + "MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290\n" + "IENBMRwwGgYDVQQDExNUV0NBIEdsb2JhbCBSb290IENBMB4XDTE0MTAyODA3Mjc1\n" + "NloXDTI0MTAyODE1NTk1OVowbzELMAkGA1UEBhMCVFcxEjAQBgNVBAoTCVRBSVdB\n" + "Ti1DQTEaMBgGA1UECxMRU2VjdXJlIFNTTCBTdWItQ0ExMDAuBgNVBAMTJ1RXQ0Eg\n" + "U2VjdXJlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcN\n" + "AQEBBQADggEPADCCAQoCggEBANvg/lFTogGmz2qOXalRCWoWfkoUErMRSiYoGy8j\n" + "UovBDasYVeOmXPLtGvVjLvqxaiKGYWbO0hzXj4RFaLwTM7gOJw5GaleMNj+PL4To\n" + "1N2VKQxVAJ29LvpSJGvip4Vp0aRTMb3/xliIssln4fpVaA59AlwuAyN5Rrii6HZ4\n" + "5kFT2defRirNpt2cBFDUkGkjfgP7htybTtwBFr8UfUQLsxtgd7QmC0ufAZVqkIaD\n" + "NS6bgtLWxAUxUJooaBhNMryTC/YJgT16aA+n0/F0+NEeLjZk4R4v05XOm8lGeLKH\n" + "aVZKrbCrC/bRD5Kr6QbhVQ4OHrmxk1muJ/1v5VGn57wFJEUCAwEAAaOCAWUwggFh\n" + "MB8GA1UdIwQYMBaAFEjbzd6O6UlyWojosdg9B7O5a2ZQMB0GA1UdDgQWBBT4B8Jo\n" + "JP+FlcvbHuMznCpPlyBWezAOBgNVHQ8BAf8EBAMCAQYwOAYDVR0gBDEwLzAtBgRV\n" + "HSAAMCUwIwYIKwYBBQUHAgEWF2h0dHA6Ly93d3cudHdjYS5jb20udHcvMEkGA1Ud\n" + "HwRCMEAwPqA8oDqGOGh0dHA6Ly9Sb290Q0EudHdjYS5jb20udHcvVFdDQVJDQS9n\n" + "bG9iYWxfcmV2b2tlXzQwOTYuY3JsMBIGA1UdEwEB/wQIMAYBAf8CAQAwdgYIKwYB\n" + "BQUHAQEEajBoMDwGCCsGAQUFBzAChjBodHRwOi8vc3Nsc2VydmVyLnR3Y2EuY29t\n" + "LnR3L2NhY2VydC9yb290NDA5Ni5jcnQwKAYIKwYBBQUHMAGGHGh0dHA6Ly9yb290\n" + "b2NzcC50d2NhLmNvbS50dy8wDQYJKoZIhvcNAQELBQADggIBAJ6AKBrUBHfH5JfL\n" + "O38QwmyVYu3L36QsEdpkGhQaeHbpK/xLfr+amO4ZoxNolgwhm/vVWHFh2kjK+TXN\n" + "/81YQljx8hjOx6Uy2JGEkVEKisW/QSl0bcRh4L4D62sZShnd8BplfMhTRwEJXZW3\n" + "bR5yvy/DLrNuHRGPfrPb0v37L7nwdu+WMOUvv15KwV+2VlI+cnrREYWWAYixDm2N\n" + "jK2yMCoUjEvwCcylnnwsg4CR8Il41eA7G1HZgC3qY4/Udgzu1igZcxRH46Hg4Hrq\n" + "c8NRPuCsYRMoo2jh6sGz93BFaKY+DQbEvl/cH5qyKtzZvz7tLEsFkKRNkmcOfCQP\n" + "77fMm8/aTpzzyjOvxNJ00XMDoxY7I+tSd/6Xxy7/vJ3VZQX4mFSg8NTlIp2ytoTv\n" + "V1fus99V2NpLt93AX8ywDcOCma/rLqlT8Qu7nb5a+5r6sKMd81wfVWJYwncl5Ge1\n" + "3L2goay+21EaFTgd0xp6B4BMRZ3TtAH/ZU133+78Pmt9ImasaJlPAh8UTBFwktbC\n" + "CmKmiGvrZkLcvHXL0R18quyHY+6oZbKa1eZZsUcjDoErj8stId+W8QK7xpCbMYni\n" + "w76NH/gy+5aJmxcQxMcyE3BkgMnMa4+TsIr2LSknvDmObW/mhMMAKHBfAQvMttLB\n" + "iuqgTqRkGf4Y7kSH4hF/BbsO+9xn\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIFWTCCBEGgAwIBAgIQQAEzU+QAAAAAAAAMyl0baTANBgkqhkiG9w0BAQsFADBf\n" + "MQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290\n" + "IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw\n" + "HhcNMTQxMDI4MDczODMxWhcNMzAxMDI4MTU1OTU5WjBRMQswCQYDVQQGEwJUVzES\n" + "MBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290IENBMRwwGgYDVQQDExNU\n" + "V0NBIEdsb2JhbCBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC\n" + "AgEAsAXbyOuMxG6KIe+OTZxxCh9ScO1tgpyXxddMTkVJy0BCtRI0bBnCdKQxX4UC\n" + "l+xDMwpT0pyMjre4edsr1WryjmbE7isBB5LUs9AC31D2Va9mDsvgR2AvKzI5NVI6\n" + "KIP4exbGGLhi1kclkc7wGRJNrWP10z91XynwoTAcKqCYphW97v0ZNvDikUOP+srW\n" + "ECdJTO/dwfGFcJvK6qhaQ/xthm9z6TdFqfA2x8yIdR67bAb/m2s+F+xhqnF8xh2i\n" + "90npFbU81qFh9RH3BW8d/RG+0DAHwimwCU4m3OOiqJFqH8KRRYhc5Zi4caUVGcl8\n" + "dRHMcHRPLZsdkUT9Viig/ruGasj6XAtY3MZLdsirItlzD6X0WgKJP0+eIoLuonRT\n" + "Kj1TJ2kdbI4yLGQAJmNhNk6jRrc/fbMtrG2QopWizs/agucHNBmW6bghqil+pji+\n" + "jilKIWZ5H7PDtQln3tbUB0bzKtrmIjdgy4G2D6AP6ciVf79VkQV6zz0VwG/eCZQB\n" + "g9c0G8xApfC4m2fVmJE7p4R4lSakWgj4K3S0AAQ837gUjujfqY1sZ5IzHcC30uyS\n" + "yL4JvywpBW8Ca57vvL8qvFvAUI9BcHGHsk23BKmEozKvru5rF4uysf5s4ZCMiKiX\n" + "SM7ITcvzBs9fagpCsR4edy+OoOaSDgb8BSLSJuExUX0y3A8CAwEAAaOCAR0wggEZ\n" + "MB8GA1UdIwQYMBaAFGo4WyaN3ota8k96VIMZGOMINaa6MB0GA1UdDgQWBBRI283e\n" + "julJclqI6LHYPQezuWtmUDAOBgNVHQ8BAf8EBAMCAQYwOAYDVR0gBDEwLzAtBgRV\n" + "HSAAMCUwIwYIKwYBBQUHAgEWF2h0dHA6Ly93d3cudHdjYS5jb20udHcvMEIGA1Ud\n" + "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9Sb290Q0EudHdjYS5jb20udHcvVFdDQVJDQS9y\n" + "ZXZva2VfMjA0OC5jcmwwDwYDVR0TAQH/BAUwAwEB/zA4BggrBgEFBQcBAQQsMCow\n" + "KAYIKwYBBQUHMAGGHGh0dHA6Ly9yb290b2NzcC50d2NhLmNvbS50dy8wDQYJKoZI\n" + "hvcNAQELBQADggEBACkLbsSU3GJZk3paTF3cmT6OqPv5oI8b2SdwbfguXkhpYRdA\n" + "EImqA7gcy9+8bChUH8Uh9UuWv/xMR8oLd8PMZntvuTYIafnBke2P1p6iIuiCt4nI\n" + "qtAg50qsIysvT/ZPFGvxekWhh8hx56ekuYBryc7NiiWczdMJpTL6JNFRfzwxmUfq\n" + "H6dvboTNrtiuNWrWy+C+E8GiMcvuH+km37cGxg1FCuerRVcetwGbMfXyBUBFhtgC\n" + "G9BLIdsgguMi6U/jXSvEORIXKMa5Z7F94bJ8duU2hNp0Xqw4tmv47qEDxLDEXBJM\n" + "bwbaOkRltjaXDBh50EaXMx+rUqjO3le0KBM4t6w=\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx\n" + "EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT\n" + "VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5\n" + "NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT\n" + "B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG\n" + "SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF\n" + "10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz\n" + "0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh\n" + "MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH\n" + "zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc\n" + "46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2\n" + "yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi\n" + "laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP\n" + "oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA\n" + "BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE\n" + "qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm\n" + "4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB\n" + "/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL\n" + "1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn\n" + "LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF\n" + "H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo\n" + "RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+\n" + "nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh\n" + "15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW\n" + "6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW\n" + "nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j\n" + "wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz\n" + "aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy\n" + "KwbQBM0=\n" + "-----END CERTIFICATE-----\n" +}; + +/* This chain was generated by a modified gnutls lib. The script tests/suite/certs/create-chain.sh + * was used after modifying it to generate RSA-PSS certificates and set 64 byte salt in intermediate + * CA, and 48-byte otherwise. Then _gnutls_x509_write_sign_params() was modified to set a 32-byte salt + * when it would have set a 64-byte one. That way signatures from the intermediate certificate restricted + * to 64-byte salts will be incorrectly set to 32-bytes. */ +static const char *rsa_pss_chain_smaller_salt_in_sig_fail[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIDiTCCAkGgAwIBAgIUMquMu6/Azo9N40rNZ1z7hkotqC0wPQYJKoZIhvcNAQEK\n" + "MDCgDTALBglghkgBZQMEAgKhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAICogMC\n" + "ASAwDzENMAsGA1UEAxMEQ0EtMTAgFw0xOTAyMTIyMDU0NTlaGA85OTk5MTIzMTIz\n" + "NTk1OVowEzERMA8GA1UEAxMIc2VydmVyLTIwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n" + "DwAwggEKAoIBAQDrEJ5ONj7OYNjDZ3johFKItvX6BFJ7ejLfNELvT7I9hsiGJBr5\n" + "Q/NgeQolSXLKHYG0L5Lxu1fbHINzC43NEivY3KMKKl0+MdXWwAr0yW/cTeuDc/+e\n" + "YqGT3TpCcxa/0dJ+Y3zAS1DqsHjNOxyYBvyKATyvFKo+oAwOqtR/OLflUvoXvYZV\n" + "YByseOLhE70Vfuk8yppRcKwokwk/3S6dZjoxK1K3PBQGARJNaUChtx5iM1qMrluK\n" + "uDj7yV9DYhtyhSmYvcZ1gb3t0aAxGoGbfdOHa7XMovzfRDUPbwvkKUJqcNfGkeGn\n" + "pZRzbA8D/YrjFtm7QVgf6yD20DbZChzoxRWzAgMBAAGjdzB1MAwGA1UdEwEB/wQC\n" + "MAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0MA8GA1UdDwEB/wQFAwMHoAAwHQYDVR0O\n" + "BBYEFM/CHpfVzdNRBMYfqBXUieW9m9oFMB8GA1UdIwQYMBaAFDBBFsyy+oqRFlRx\n" + "MH5qlHt7guXUMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAICoRowGAYJKoZI\n" + "hvcNAQEIMAsGCWCGSAFlAwQCAqIDAgEgA4IBAQADuShUlCXrs5K6Yu7mKvoyZztJ\n" + "dQFuxv4WDvbhoZ19GEEg6icRUoaA3tWKf7tNRnqQklMLhWIZParXtt+xz7q5K6ic\n" + "kX5oGzzUNryAx5DJkZCCffdA1FaQjCEI6Cy5cEnGifXyacwA7BViUwMnWvJRSKYi\n" + "gvBVKc1TBwA+vPIzlSb3COo1zhshxM+C7mhzspDFkceXV7qapFDMj7M/GbgqH7h0\n" + "yuJv2bymytjXadR43LuG6yqqsFvIPHYBcyPq3Uzu+57UJbHhAlkTXaAXfZkc1Ut7\n" + "Xz8pOEzcxZHl4SEgsO6KeT2uQUE1Zx5AgwaNfuMmg0aFJep8vKcQ1jvdzxS2\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIDojCCAlqgAwIBAgIUYIZPL5Kf86B0XYSKAdI8dv4HJY8wPQYJKoZIhvcNAQEK\n" + "MDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMC\n" + "ATAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xOTAyMTIyMDU0NTlaGA85OTk5MTIzMTIz\n" + "NTk1OVowDzENMAsGA1UEAxMEQ0EtMTCCAVIwPQYJKoZIhvcNAQEKMDCgDTALBglg\n" + "hkgBZQMEAgKhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAICogMCAUADggEPADCC\n" + "AQoCggEBANCQ6fUJYYI3OTDYIcyshBdnVBQq0uGjHg/04niCpoAZi/nlfP3tCRZS\n" + "k44kMt6hla9cEkdj5mzeGFlG5AYG9C5MimyYwTJ5Sho6t8ct4wPESeypuDbcvMRX\n" + "MTLM/9+ZECkDgKA238z4sNX0T0ppsCXy8IK0Jmn7bky6lqNmaMTjYWy7Tu4kQOMX\n" + "7RE4tv/WlaH95d7zHYuaAf5dNY5GJ/cGrkYLrL1KpN/UU/4KKxvWs3EbsnDvrTcs\n" + "mzLrTOIaedrrNXY6FsGE3+XKDCo+Z80LsrySpCozAECrEFCENMfS3ptOwI+Vblb1\n" + "Kar8+4+7uMxbGY/RJ/gGIKGYibkpzicCAwEAAaNkMGIwDwYDVR0TAQH/BAUwAwEB\n" + "/zAPBgNVHQ8BAf8EBQMDBwQAMB0GA1UdDgQWBBQwQRbMsvqKkRZUcTB+apR7e4Ll\n" + "1DAfBgNVHSMEGDAWgBR1lWzS3rLSrmdPPgma8JL4j1PJgzA9BgkqhkiG9w0BAQow\n" + "MKANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIB\n" + "MAOCAQEAnYZf5bo7ZtysyLO/3QjAM+o1IWXinH97XANEbs5oZOK/rQNLBIpOLaYp\n" + "YcnziJTEIqvy+7/KNwdjLcKZ4f5PBlDHBsr70XeJmMc+9/ZadY14BHZUEWNfBPx5\n" + "dZR55/g62CdermdCJEoY6XdIMqdTHrdwmBIS/7g/dciQt0+lrjanX14VLAVRUAIu\n" + "HMn5C4ZGeBDd8av3P+VIqdkFfpAYlZ5BsYqshel4pnAyhpUO5wTmY7cm78fqctyX\n" + "qmQ0PRLQXmlqrL2oJtlGcSWlT0u1bS0gJPpvszataCZhnX/O9x6yzzgeUpP4I/AR\n" + "KS4ZXRehFmQH4xS1eq5fmWiTzbvWHA==\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIDgTCCAjmgAwIBAgIUUVxp7I/ecuDCjWdn2Rng+TBNidUwPQYJKoZIhvcNAQEK\n" + "MDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMC\n" + "ATAwDzENMAsGA1UEAxMEQ0EtMDAgFw0xOTAyMTIyMDU0NTlaGA85OTk5MTIzMTIz\n" + "NTk1OVowDzENMAsGA1UEAxMEQ0EtMDCCAVIwPQYJKoZIhvcNAQEKMDCgDTALBglg\n" + "hkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCATADggEPADCC\n" + "AQoCggEBAMcPAwX89KK6Nz39xdQRbSy9Ax7XzKAqtmmIczRVTKqsdQh4bm/gDuD6\n" + "Edxjl02cISBLczWV13brINSBI+QX/eLPyBmGGzI4ryyJuP+1qc0NMjDAlfYw+kXF\n" + "NZz02W6svxvrrt26mKJ1F+K/bZE+s9XHN0DW+hifQBBr8HX3BWJ9g6yj6YPd55pm\n" + "kQQcVgRG3BG1EMkJGK4LNesGdJGTHy+uqgtcykrMjh25uhr0oTOG6UjVYjXalZ5o\n" + "rOqo6CV+uGPmJYW2pBOlAOmblMMXSHXhIAhRBY8+h01BCsCU5wlEfPIsvclP2gSG\n" + "RVbM/9XgS/+4yN0fD+oXgi5Jh6TCYz8CAwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB\n" + "/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBR1lWzS3rLSrmdPPgma8JL4j1PJ\n" + "gzA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDAL\n" + "BglghkgBZQMEAgGiAwIBMAOCAQEAqudvb92hfo7iAS63u902onL2XwhfS9IZtu3D\n" + "Lum78Q8nzhWf+YSls4/o8ln/Erv8LfrrhxoPEVpxQTPCbj/mmHez3hh+xrb0ZUVQ\n" + "pi5gE6kkkzzvL1VEMce85RLbm4AyVDl4onU2gaFXTxpMpKwBTZoKRbLcG2TsQgyW\n" + "Kgq+XnyT/1AC2vp4Ou8G1MIh5bkfetTeo2KJ3lmEVGoUh0k0diayDwaBgBDeX7hl\n" + "XvKrG/hhhWPVWNDXdQsiYYKVty76yM3vJiK9No1+jPZzNTv+pZaRqJiQ/ZaCICvC\n" + "uK/63Yrle+W/W1Jdj23/kSSL94ugw7PFwbqo2gPkECbG2Mk8pw==\n" + "-----END CERTIFICATE-----\n" +}; + +static const char *rsa_pss_chain_with_sha1_fail[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIDbzCCAi+gAwIBAgIMWXnYiAFPuZgAfKycMDUGCSqGSIb3DQEBCjAooAkwBwYF\n" + "Kw4DAhqhFjAUBgkqhkiG9w0BAQgwBwYFKw4DAhqiAwIBIDAPMQ0wCwYDVQQDEwRD\n" + "QS0xMCAXDTE3MDcyNzEyMTE1MloYDzk5OTkxMjMxMjM1OTU5WjATMREwDwYDVQQD\n" + "EwhzZXJ2ZXItMjCCASAwCwYJKoZIhvcNAQEKA4IBDwAwggEKAoIBAQDF+5tQbOKq\n" + "cH51hLYVtBFObTC6FdIdS5bS/7TEZnVR8y19RPJ5QFCVIQ4zs477x6MyDd6WeyRz\n" + "3jjbkEBXZ0DxCIDCXN1SFxPC+x8REJF2BR0Q72ayap9SC1DvLvlKiSoWXgUi7nKV\n" + "uYIMcC7bJyvKFk7b7j0YHccHb0Xe8I4unKMnvB+hYSVqqLGRENoIFYDDW90r4Evd\n" + "pZv35/+Q3K053FMuRIndn0kZ3qH3eQUtIssbQS9n3HucTpiR7K+0HcxiEDX3N+DA\n" + "91slhmk7jV4gt5ae7e5K162N7W8MQBmZhY8urxySQHFeHLW/JFQ9OJ9+Z106ISX1\n" + "+i5n8XizBBdVAgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0wC4IJbG9j\n" + "YWxob3N0MA8GA1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFJ2ub+hyk2QafGrbuKlN\n" + "wYh91vRIMB8GA1UdIwQYMBaAFKOCzV4ao1MVHrBy+M1ib/5nd2p3MDUGCSqGSIb3\n" + "DQEBCjAooAkwBwYFKw4DAhqhFjAUBgkqhkiG9w0BAQgwBwYFKw4DAhqiAwIBIAOC\n" + "AQEAd6oXlHPD739T+attYU+gqERx0KHGZfYx09GcEFCTsECAlMY3hpG0uCD8HVsN\n" + "bKwYb1R/F/nwMBcJD0xteL8FO4qB9FNpnuFzmTeRcVdf+vpLgzHEZFi+twzEJip9\n" + "gfQg4xXY/F3bh1ARG3l5TDmvLQSv/cidse5HQ7mFSsjAgCJpKnCaqt+6pNzWvofq\n" + "yHI+COJ8rMUTrgp2fhpxBz1pGMmhX7HwJciI5jLPy5Q1WEYpgfrJcMb6q6pAKvlQ\n" + "Jevy9IdKhauADb3S/vPDy0xY0SJW14mBVtI6+EizUcx6XuirU5pbYyyeOxb9Y6Wv\n" + "7CfpUMRomkMpPhkfYWChnjm1BA==\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIDkjCCAkqgAwIBAgIMWXnYhzaP/YD+JqXpMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MTIxMTUxWhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTEwggFKMDUGCSqGSIb3DQEBCjAooAkwBwYFKw4DAhqhFjAU\n" + "BgkqhkiG9w0BAQgwBwYFKw4DAhqiAwIBIAOCAQ8AMIIBCgKCAQEAp3zhvSFFwRFU\n" + "HhrpxBSkoKnMz+D/RoA12Onl4q3dv6FAnZd33lCXAaEgdOqGzK/gb1QUnw1f/fgG\n" + "7GBXCW2EvfasMVV3lQQAJjlCXNjgUavZ8uDUihsJ49ORHZ7s6eMNfAeI8m02sj2a\n" + "lV2TQAYa1PETbVr4K58QHvLQaaBXN6oA7G1hZobt78W40wBKkMzTkwvYh1vRXSGb\n" + "+/Qszs07fhim32nBE/42OJ8TwxPGLfNkx027u8eD4Ebl8zCubOGHPko56s/ip/3A\n" + "UiTMY2jR9dcHisfW8CKOjvKlmTf8CXSw7uxTHqhx7PFTAMBsStMnUpx9JVR9wyKg\n" + "Y7QYlBpfoQIDAQABo2QwYjAPBgNVHRMBAf8EBTADAQH/MA8GA1UdDwEB/wQFAwMH\n" + "BAAwHQYDVR0OBBYEFKOCzV4ao1MVHrBy+M1ib/5nd2p3MB8GA1UdIwQYMBaAFNUc\n" + "loHmlMVV0q6firCdA/RFcfsxMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIB\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFAA4IBAQAM/BlBEyKGyydb\n" + "nF24GI0mKJnWYMWgOIk6Bc1jdh9khPe0MfDKZLFHZqNBWLEHByTDBL9Z8LGACXYd\n" + "L1JAlA5BNgp1p489qz/SCOdriqLV7tAAND9uBzEALYLckHhra+4dlLurFhioEIqP\n" + "dcZC3ocEqBd9L1SMPOCUniGtALXeEwJkv5TnXMfP0vaIzGVt4x7+KeCF4x3HhJN7\n" + "3SwCpN/mhpATMQYY3Fen0UBeRWTUbRjsjRwZzO+J7BtEUNl7eMyum5pOFhhltYXZ\n" + "De7kx7bEX+qbVg1F26PsNsBlSJgbCglr8fMlEuHBpG7viWkt1nqJW9rhcYb0bhre\n" + "NjSVlh5j\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIDeTCCAjGgAwIBAgIMWXnYhy/+QNZimT/9MD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MTIxMTUxWhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTAwggFSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIB\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFAA4IBDwAwggEKAoIBAQDJ\n" + "vn4RQAG2vcJiv0ZstD5d27Fp5Lhw/BjpArUsYeVTyqaVy+y+juSc0DZJU6RBSdKi\n" + "g38iAtdpVVKyV1R3HE+jgLpPULtFsp9Fziz2bDUXFvJLaktbqPtwKBEUFGcHTeiD\n" + "RgyKBvlwpP94A4FDYBDQQgHAbZKUIfkQrPiObsQU72+P2TtuTUTl9PIwFS0faNKX\n" + "r8dRN14Tvt/JhpOF0qhrOLBoxVVATBArJflAT3ZfiWW9QQj5DoMogS9PCWBQKmhD\n" + "K0xWp4RCeiKKZHQH9jCsJSJ3vBcEiql/TrW+h9kb7ZkHJsrpKYzcDGCJFyjWmxjD\n" + "3QV7bRdjoVh4Hr/tW783AgMBAAGjQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0P\n" + "AQH/BAUDAwcGADAdBgNVHQ4EFgQU1RyWgeaUxVXSrp+KsJ0D9EVx+zEwPQYJKoZI\n" + "hvcNAQEKMDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUD\n" + "BAIBogMCAUADggEBALFp6rRbdfbJgxZ82VtIFDipowjEiuIgCaZAym1JNyBuyy9a\n" + "OHLz+dMpLvmZm8U1EGlRafCYyY2HL6NTQvn95iaFLpsccMV0jo/jZWWd5GH8lU0+\n" + "LAkatUfK28Ue7F38i84zWJpXKobEEZKT2CxBJ30jxaUezA4AGLifF4Wsj1UyHhuR\n" + "q+U51DjJ+MvZEEcGEQ+kbUwbBKbSFJrZ4BRCqJvCU5HjtAuzJu1QYQ0qjTmd+n63\n" + "cyr37omknmF0LMPH4+q7G7scPS42dNIvPmJ8v3QuGm95WnUI1cPaci7BEozkV7ik\n" + "8Cqz1BnOnAx84GjQ16B2QeRFicuqKHGPGPB/qEg=\n" + "-----END CERTIFICATE-----\n" +}; + +static const char *rsa_pss_chain_with_diff_mgf_oid_fail[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIDgTCCAjmgAwIBAgIMWXndVCXFljE2JCDNMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAICoRowGAYJKoZIhvcNAQEIMAsGCSqGSIb3DQEBCKIDAgEwMA8xDTAL\n" + "BgNVBAMTBENBLTEwIBcNMTcwNzI3MTIzMjIwWhgPOTk5OTEyMzEyMzU5NTlaMBMx\n" + "ETAPBgNVBAMTCHNlcnZlci0yMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\n" + "AQEAsuqXehkktDwKeniqCvZJGSO65fOgB0xAnOCuvl7Ijtjgv4NwjfQP5nYGyb+Y\n" + "oNX0BgXTo9pIcFWIDptOlHs5bKKo8XgzffgILMk307B9DGBx7xpVINVj+WoI3DFT\n" + "fJSaO8jcwxRAXr3hhVY/hQ60/cKD0Cecejlo7LJbZ4wAnjsYhF5G49o7IVuIqZzJ\n" + "26lzCPQvrNAY+Pwc7zxN2RitvrC2UUueT8S56NxnRLAgghWDTXTi+02pZakuojli\n" + "YikV8xs5YZIUdk/y69i4U7hwfGFR5sv6M+o0KK9kZb7KlELXpO/BOs80itIeEi8c\n" + "60xCL7w/jM6Ecvp8f2QBDPRWFQIDAQABo3cwdTAMBgNVHRMBAf8EAjAAMBQGA1Ud\n" + "EQQNMAuCCWxvY2FsaG9zdDAPBgNVHQ8BAf8EBQMDB6AAMB0GA1UdDgQWBBTDlByu\n" + "iQUCjywT/rAp9FyNmYEFTzAfBgNVHSMEGDAWgBSvAud7TcW4ObAj/q6BHxW1ij9E\n" + "5TA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAqEaMBgGCSqGSIb3DQEBCDAL\n" + "BgkqhkiG9w0BAQiiAwIBMAOCAQEAPBxwYHtQVqHew1LAxEH7knPJNataUvpdxroI\n" + "E1kR7PUgj6ODazEEq3Cv+5evhF5fhkmAA0+k5hEJzfnbRnSsVvBzIkkF+G1hfDwm\n" + "WWEM0EQYFiUNO1aJuAMxZi6M6dZbEr8ZfJUd3ySrc9iFN8RGgh7mhtQKPkhw2ZYv\n" + "WyaYkLOBwyeGm6Kybozi+6l8IveZmzF8YXph0XAaGCdjVjMYarEyI6u0BltR1Wne\n" + "rvt7CioAMWUbYauEc7/2ffCYleLn83f4puVQyx0/f6uuJ3LD1tUh0aXYhGl7fJRc\n" + "G6I5gSmWui8cRxPzX9/d8a4Jw8bKfTYJnLM0p0O8NSLzP47nYw==\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIDmjCCAlKgAwIBAgIMWXndVB4vBSZAonB1MD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MTIzMjIwWhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTEwggFSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIC\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAqIDAgEwA4IBDwAwggEKAoIBAQDf\n" + "ha9h+Z0v5sLF+9yJPasc9dpi1cT2+BsDqYucfKEa9Pwgrs3OKCk7jFrIqiG5h0C4\n" + "womDzUHxhuyJ6XOMjN1r1VCaZKNN0CBihWzEDHt1sxmY/xPkVYPtJOvstRmHiUSu\n" + "w/iuV8UdvRrcNvcmfgwhxCvTee0UG4e/K15z7G5N5x1t5PwK3upM3rCIGVVeLfXw\n" + "CACj+JXS4l2sPNW3sZ9aayEe0BwGuym33SyGYl8R8aTFk9ss2jfB6se4NFH0B2QY\n" + "pNZHWwYJWVHRH0c5251kw412tYR2tILnrkUs43cWc5dY/mhcHXaIec2gPURes2bB\n" + "CIJRAkXxfvuaPZpMfvmDAgMBAAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0P\n" + "AQH/BAUDAwcEADAdBgNVHQ4EFgQUrwLne03FuDmwI/6ugR8VtYo/ROUwHwYDVR0j\n" + "BBgwFoAUGQ4GFn446XTVG8jGCz3ok6tf3SswPQYJKoZIhvcNAQEKMDCgDTALBglg\n" + "hkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCAUADggEBADNS\n" + "zFchDH+tULFXxrJPAnDV1KMjYskMYzwMdUFHwjQ3A/4uLodhvqH2b62HWQIPG37a\n" + "3FOmFSQTxx5qd5fVN9LgcPc0gMowjlq+M7lJjlKfzDPceN2XyvxNCf97NqYJTHya\n" + "RFNFm5Of9dN9YDQ7kdu2FIcFEczIbkIQDFcizTrdPgZ3QkVEnrDSldtUEdgUxIf5\n" + "aSmGtPhhG8+x/uqcFKF3Ese8pNkCvL8pPkLSgtTEGmV/eFtKNb0VArdQfQ4g3BKO\n" + "6DyWE/hasa0r/b8WK5LwIMQnItkQvlwIBEPU/XS8STL9GySCBag+Pt6DtIzaJVcs\n" + "oHpzmj1Pz6hk2R21u5Y=\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIDeTCCAjGgAwIBAgIMWXndVBE6CEbh8MIQMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MTIzMjIwWhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTAwggFSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIB\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFAA4IBDwAwggEKAoIBAQDq\n" + "Fk/MQ+4AVJPMYobr2MJSKJQ5DDLdBmmhv6pjvCO/v21oakGlz73XhtlA7lm9uLRP\n" + "9gCXyIZCBHk9uofl3f7g9sBxdZrAvcDlonqekW0yUtzFcnm0gcqUmJZe8uXkpIDP\n" + "GBcSegQXhsE6pFrQXVRuR2RVtz7U9a4ItYZwvVSqTRQtPOlsdzgNGPiFzY/3Qawp\n" + "4ssrQyDl03Up0pTlws68kUnrONkGGcxXIEiqSZJhrCpRdN2BvDSSY7mzxTvG5MR3\n" + "RhTJz/PJn7C/QvqcrlJJKvJ1GZzdiRMczlKAOASu7bJppjLhHmuNMDOxPt5dgLqI\n" + "tH9Rfl+s7yMDa6var+NTAgMBAAGjQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0P\n" + "AQH/BAUDAwcGADAdBgNVHQ4EFgQUGQ4GFn446XTVG8jGCz3ok6tf3SswPQYJKoZI\n" + "hvcNAQEKMDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUD\n" + "BAIBogMCAUADggEBAIMiwgKxkpfnDsQvsdVvxKQgoQR7QXnGZTRNx66YGjHqFT3T\n" + "VkOJWMa7IvPvfQegi9C2xEwOGPOR13fJlroxya+xKmzgebWhD4tKxMjPbMWYFrCh\n" + "qTJWJz9+MyST9/3YXu7Ao0+kIDJfQVipCvRWah4WKqi2HUhNnxLz2yrAc0f4zsbN\n" + "FHfsFK5bKnahSlXlGV+ZrALqieQGjKh66IqB8P2vfmIjpbTh+srGuyG/QxxlUk+/\n" + "XDk8S4T+fnV+41K3INmG7wkjP54dIwrv6YjhJKo4nCaO+GB0oLA8SCI1doClSCyK\n" + "zWdV+iY4TwA8+UEEeQCu7mGo71XOTg9/YaiOc6U=\n" + "-----END CERTIFICATE-----\n" +}; + + +static const char *rsa_pss_chain_increasing_salt_size_ok[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIEsTCCAumgAwIBAgIMWXnOxy72g1dtZFCEMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFAMA8xDTAL\n" + "BgNVBAMTBENBLTEwIBcNMTcwNzI3MTEzMDE1WhgPOTk5OTEyMzEyMzU5NTlaMBMx\n" + "ETAPBgNVBAMTCHNlcnZlci0yMIIB0jA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFl\n" + "AwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBYAOCAY8AMIIBigKC\n" + "AYEAuXu6rL2zC75jxQIc8DVdVITJQGXztZ4rTJgYBvncFm0rSKDAa7vKyIaro8Mz\n" + "8F/vhTYb108sjv4TnY4/Nc7toV91plmLdhXhMj/ZqPckAVvPUayHSe9AF2I8HJTH\n" + "s3IFZIkEi0Q+2uAvkfpZCTBq4Frsl3ZXPYtRr5RkWNqzN35DpUnHm83q+TPuA+K9\n" + "TvWZjeP+xWIkk+41hRInB74qLiz1AMzrZX/DnFkYHPCi+uoeV8AVBbUZ12uO4KG4\n" + "IWDhs9irWtxiMNZiDIvRnKiEgUGgYOIto44KuyesxMPOdz7A9ATcQAIdUq1EqAHq\n" + "b+Xm9n4nmekwYxCmBH4IH6eSbQAfgewuFWfqjjBWjF13N0xj0iBwkdDzx/ThN4Yf\n" + "ejAJRw+L8SURYY3FbQYhg6B+emws7RE0bSFRwu6Au8O/XiA+qLTwivr0Joqry6d5\n" + "GV0wdBK4h+ulRScR6YBJdnYJBGPF3A7QnyPfnBWUfkNk+zpqOIXuy35lO5qGOZLv\n" + "yfGHAgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0\n" + "MA8GA1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFARQW59hEnCVOewEitaEuYxbZb40\n" + "MB8GA1UdIwQYMBaAFB9SkyW6Or/XyMyRdrHiC5w5MbNXMD0GCSqGSIb3DQEBCjAw\n" + "oA0wCwYJYIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFA\n" + "A4IBgQALdAXW0tx6B+7nuGA7/F3ed/pXj2oG+Gu5otbQHda6gnvGp/JAGr2p45Mt\n" + "55F30e6YolhCVWPaSaPSxAjQSg1vy80/QTey5aPZ0jZEKklzyid7+q1s3mOeIDA2\n" + "ajaN9Tq7uW+YxuMD5V9CSpTu28Fdqy3g8K8579hr14ch30IjDWhxngJLxH5vRnAT\n" + "1WAd6xLU+tBehMozcenW5lkRzmnD8SeXIZa+TOcQa1IzzU/VwrGKaLs9dNFOoi/b\n" + "9wZkVBA0vp7jRA0gnJFQkldLetlB0h5JB9Kpcw/lsqKF5Oe+DBXPlaNcpx7PVZhL\n" + "zFmH590jgEogaVvUJ1TxeUsNwUltsaXNvlkFcxmMUdziEXLwKkdfxog94owojuu4\n" + "2xn+wsntn+02G0r9w6FVW54cXpxwvC3BbuIMAI9Xn57GKgr+SzazubimtHLw1o7x\n" + "Xzs3EIn08vZDvjHXcRKmKAkhtDP6m5ni10tajfAIKBzjwv+YPJOBN2Qk8mnE6gBY\n" + "dwiMNUs=\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIEmjCCAtKgAwIBAgIMWXnOxx7hUkOmAFYAMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MTEzMDE1WhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTEwggHSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIB\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgFAA4IBjwAwggGKAoIBgQCt\n" + "QbjYb0pxJjIRpfGTD0oo2JrUDHOaOt/ON5BGdH6YnN0O4SBuYMzYI0WwX4CWUoeH\n" + "qYCnQqOhoZv3FoIU1dTIv7YUHW47drn9DywSIfYWoLI0snDu/QhB23SN11Xgcmux\n" + "pWiyp2PXE/WEFgvzN9/Y9Dx+xapyckl3M3ydF0fNgXVtnvgEzPgtsR/H/6Trzad4\n" + "0ev6Yvj+ZmoOwgYr3UQgQew7uCfbw1EavG6135mwW2QsDxBDpWiG2hKXeb5zDftg\n" + "+uZbb5q+TyRdLwDtwmtcjX6nlNIxssRJaNMej8MfG6D/U68MMclvwVHe+QhC59bE\n" + "1rft3TVajNKTfWNgWgIrtt1XBXzOAH7a4ZSsSLScfrASEbJPIsWTgefObTw3xZjw\n" + "cGmCTZu6sgpXYIvk6oUwWhI52SaulhApbUkB1yUUnYUJ24YmI62YA/LNmA3w3avw\n" + "YvVIBhNV49sCUCDi78TUCc7QLn1jJ8Y+LuEZ7MIRW7yyj4zZ/Q/ket9mS97JMjsC\n" + "AwEAAaNkMGIwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwQAMB0GA1Ud\n" + "DgQWBBQfUpMlujq/18jMkXax4gucOTGzVzAfBgNVHSMEGDAWgBRCDm/4nfcRVSZx\n" + "8GuAUop0AzlBwDA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCAaEaMBgGCSqG\n" + "SIb3DQEBCDALBglghkgBZQMEAgGiAwIBIAOCAYEACNo6j6f2JLpwbbQ/7vE6gRqC\n" + "4sx0dxAiAb+W44dIETB4XR6rhRTr/rFApMAnf7zZ6YlzKIT7DqyeSUmal1iz93rD\n" + "pNo1AW0Th7P548jm+wtjEH2/+BTJeNzxh+ruqCpocMMfMqmiPxUDwpdKtZaGTnV/\n" + "rcxbfwFS3F27U3WlJo+FW/fq2/+m1kh/9wAyiogd1HC/FO+TSoprw9kvr1dn+OzU\n" + "FCVrq+BVN8QrFj6SVSiaxn3/eWYnwlj5mj7WLw3XXNcImXT6uIkHWLyI4uEO0qnD\n" + "sV9/lf4ApqTvaQR8qWPpN1pWK+fWOH+LbWHbrcuLUhGfZReIrky5onhIZJiIbOGm\n" + "sLJfiYxtdfo7r4RvtrnPwcKSEJvNdVTeU0psmEbGbatnrVpGezNu5zGp+PvgddVu\n" + "KQ7UREY31lu7x/PFT7dDDkWWv0cI5ny9bpci/Ua0FF5RF3ovgOyo0uEWrfUPNyvG\n" + "0BAkOtUmY+HilBtj0qAadFcbV2hHfdk1nHG6YlBh\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIEeTCCArGgAwIBAgIMWXnOxxfLoQ2OARFgMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MTEzMDE1WhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTAwggHSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIB\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgA4IBjwAwggGKAoIBgQDL\n" + "qyZ+7NdkwHddKKozoo740ywb0L/ntRkqvtcevRgTJQiwKwEIac74m7x7o3d0LXj7\n" + "TyKqcR96RtlLhgppsCiQ8ByWNTh77zG0+phZ7oUuYJRY5HhHKo+mjEJ2DBEhsKmg\n" + "aoyliZ9GYaPni6aJFyb2xasEyDugllcFpJlVteebcg8MwGZ0sQOR8GBjldtDIFrt\n" + "snPiwHScvIbDMy87xOTsvUpr/I1VHX8JEiPa6baWTiDuR/uX3izcXniBUZV7anik\n" + "UjOjpUcw8DohnYeqIXO+MiC+2gLsyqsQD5cWhRkurLFDS3/5RSvYL5C8EPvYdJxz\n" + "xd9ayWwSGLj4cAS94CWJaifmMnmkq9cYPZkmILe2sikvq7LpkUENxDxklSPeQXRc\n" + "Cb+JC8btqlJWNjuZOvv9nU4Cp7K++27Rzkdw0fp0fiiRxSqPAQqpba2LyRvIgsd5\n" + "raqOK8gC6Dibpe6hoJzEctBtuiENXyiAmxS+A0TE2LrEBbwc0OZQ3rymY/7OlHMC\n" + "AwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1Ud\n" + "DgQWBBRCDm/4nfcRVSZx8GuAUop0AzlBwDA9BgkqhkiG9w0BAQowMKANMAsGCWCG\n" + "SAFlAwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBIAOCAYEAcFw0\n" + "2OUUobSl5zfhxl/e3DVLICiq5CPdbv6ZArAKpCGWNoUaHIqeecJIfJAUsw6USrRJ\n" + "+TxL/VD6FvvtBm7ZPjjbuVvXfu+3KWTbD9aEWmblbSH6C2V8t1XIROTy+kIjIWv9\n" + "Ihb+iFEuffqeVnoLW04BERQ22bXfubvzGsf/cidtDhRv6/wQVHWzZxImKQcGCxSX\n" + "XjehwnOcYLhakd5O9rcn1YwzljETLCpGbd3jhrDFO+yBlq+IQ9UnNLqT44hY1wAK\n" + "QoXLuiEmkuTaYXRs3t6J1u9HSUIfu072fAoI9GxvLSQ9YErzc06nmJxCAcra0lH+\n" + "5AiEd4WjtHDeRqLoOKOGVc9FO3BueBrrVJCU/CxIEMFPeCXu6WfaR1KxqQFCWi49\n" + "bCwAGwgYpSNMrOB/v2ybiJHCW+xcZ6/+DSrKKjWIRRb+GwpOYN92WcFG8Cq2PwA1\n" + "ku2e9OkNgsFKxhj8uWFv+3Pr1nrBFzCQ1Q4BjbopB8zR7vivYm70XqsGZxsa\n" + "-----END CERTIFICATE-----\n" +}; + +static const char *rsa_pss_chain_pkcs11_pss_pkcs1_ok[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIEgTCCArmgAwIBAgIMWXnPNhh4NAScQCZHMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTEwIBcNMTcwNzI3MTEzMjA2WhgPOTk5OTEyMzEyMzU5NTlaMBMx\n" + "ETAPBgNVBAMTCHNlcnZlci0yMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKC\n" + "AYEAryX+DLdg6z21lpupqpL2oracNWNtHFtRvHo3P+RLXYVl2twWAcbNB9Zs4jpC\n" + "uzhOMqrmcWlfstGtBoDA4YjWqk4T0nvlRIGLVP74AayGiggr46FwVon5XRTyCIkV\n" + "4GL550e7wkpNfafb/wYSZ1YxyqcMSzWw9ynWK1O737zIdMoVafht9CpJnPq6NI3Y\n" + "P14sJtQqWY9gV5lEpsNeXulOcOFdB2s6D9Qke8IqijSpTj3bpMBvJ8xkUPHxBoyN\n" + "hYvPBvpRSIB3hBr85PCZaGHOJOUljm2iV6Xdj1sVe+bo4MG1CnVhCFt9L99oOwg3\n" + "j3jTrvTfs496wBkz8EzdpeWRX97rVLHWhIjsLX73daJHfpI6ZnLTv2CIAuK0w48r\n" + "AT9XVW74z7DEPniUdB6Nku9R7yNfiULbX/4LMEA4TpTJVPRE1YcmRcTVuw4Cauxu\n" + "hkqw584YCWwPc4r7vhEKPZPMsrR/YOZPXTDSHAhVVCJCOruvYWn88uWIj+GnEzLG\n" + "MCcpAgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0\n" + "MA8GA1UdDwEB/wQFAwMHoAAwHQYDVR0OBBYEFM39DeRiwBay6YrB4tohGli+Ucy6\n" + "MB8GA1UdIwQYMBaAFEXZSb6vYdOsgU2XjleiZ5ifrnwbMD0GCSqGSIb3DQEBCjAw\n" + "oA0wCwYJYIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEg\n" + "A4IBgQA1fBiRmGUDDjdr6M/5kwECqebfefncXH6lvBT0aCfdPcMMS2O0b5aY9eFO\n" + "B74cNbou0AEIZMWb7tUPfG+Q0LgO5+A15n1bZZ2RAuwQp4uX7zwkfpE4fA1NR3wZ\n" + "PuMkKlLEaCXYdRFlCjJktOVRu0UGTSSuW7EZYlx8xJm7SeqfYg5lTs6SndMxSXAX\n" + "35iJ3Di9OOtEr+Qd3M9qjYIov9GYvf/QRfKfqWdPYhxW8uGkj88kcJc3F1TnV6vA\n" + "jqeCvGRbL+cFCIwsKmF6s1wMatuNTrKbqeskZhoNg8geRidY9IBZb+GxkwLTokiJ\n" + "JFLkiF5PGVaRbS8rwQ4nfy4ZPJzXAapXSpdhu5sdQINQvdYfJTkuM6SvkbfoTl0n\n" + "v0NnHRYZfIkAftdr8C01RaM09Gc4f92yQsQvwroBQlmbJ+vNJZYtarU0dBu1CHdV\n" + "ndQflknAQjt+kIRbrYM+I/Kh3IbZ10vKV5nr/p3RBj7Nu8NiyfkiiwJaibpxZz2U\n" + "t56r8oM=\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIEOjCCAqKgAwIBAgIMWXnPNg/J0oxWLPnLMA0GCSqGSIb3DQEBCwUAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MTEzMjA2WhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTEwggHSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIB\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgA4IBjwAwggGKAoIBgQC1\n" + "v36Xtc881eB+V3rg7XkhFy87Qc9g7OnCDczZ7cde3zSa337PZ6lUqpj4PfLwEBWr\n" + "3rQWR7axb3LuNj40IPcBpZsmhk+twc8LnidqqIt17hza7pHfovSrBBupanaqVcpr\n" + "PrbIoaiONdqYa54pVbW/FXTY7fiWHeAxxLAS/QvqLwCdhFfMSawNblU6FDAPyNbE\n" + "aAGGY9VgN63fHdxW085J+vdd6lvDk7BG/pWUd0VpB6ltJwsX/NtgVPWcyiHm+uAF\n" + "diN171SucT++e9H1OvkgVFnDG1Mccy6fJJ1dEkMparu7bn5Uji25cquVz1aYplty\n" + "LUxgMdpMrg3qvaz4B0C7hdHFGLYmlKCzaljJ1tA3P83+Fkwa5WlA5r4rS4fDsLJJ\n" + "tQJDLawTvtgatplXJHepEV1YAqiOAi+2iA86hI6jTIHpgqoerlEvRvzT1krX3yaB\n" + "eIwFjYgztBUBdIZ7UXIIryWztb9LKtpFIPVDGAes8oBPJH4/8ti+AIwDjlWOevsC\n" + "AwEAAaNkMGIwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwQAMB0GA1Ud\n" + "DgQWBBRF2Um+r2HTrIFNl45XomeYn658GzAfBgNVHSMEGDAWgBQM0WnAYYMNuJPW\n" + "D0SVZOQJJanMrTANBgkqhkiG9w0BAQsFAAOCAYEAtjXmbN8Nj0F42Gz6XFEsdOtB\n" + "vPyj1k7zRFIp1roH8IQqqOjtEkAj6XuP0INvIUpy5/J1PIJafU0O27pjg37IdmVt\n" + "H8fhZUmPbrSDNE8+VHwcWsQtUFK/rw40lnNL7ymaRXQNM5HNKfYdt7T3WAGQw1MU\n" + "kbW3efAAUa5iVZKp9W9RX128bB4vjW9q/9xUbn+tGujZXb6lZ+uK3iPthtteAy0p\n" + "XNQZw5BMiMSOV1apuU+uIcXOCgbgiU0ix3CwHB5C3yd+hkK7dd8GwD0dz2WreL81\n" + "0m8Ym2rhrVhmnya262QVE3sufNt0yi7VjLCNrvcdeDLypypYlz2l0xCcl0bAHqL5\n" + "KhcVsqXNQ0Pp8V2oaPVQRIGuS+yo+eJSe24U27KShBO/0AGY9AGcNALrl6P6n6ZS\n" + "HMecIKkS5EQdlTxAuohO9cVd4167sVE/+I3iY8GmwQ8Lq422hEY3zQdZFJBtJ7zs\n" + "ti9MSSipLUVJgD7t9r9nPHklupVm4atvYjxlxMC+\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIID6TCCAlGgAwIBAgIMWXnPNSlMcWT4IBgMMA0GCSqGSIb3DQEBCwUAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MTEzMjA1WhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTAwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC4\n" + "VdQEElPvqHTn7BS7asLCvk56B0pkd34wDWELzifq0mVVNb1KlKzllm320EpQ3t1C\n" + "ak9vYm4NogSwujcXaR1ZnMeOyEoXay2qCWD75kjUTo3yTesb7YIU2cHF7dftH69J\n" + "oCeQC1+oiv+JrVMluVMpGuNB6TQiKvOFlKtmYXuIhXS9L3x6JQbvPdBWzr43iJv3\n" + "vq83z7B+yU9EtURD/ub9vzHsZrQD3gDf9tJqg/laBvsRDqDP7U2vzgh9RV9UBUOD\n" + "8yBN4n1TJyL3b0SqxLEXDdf843VXUSm1a8saO/bvmH6IRZyzy7BZ3Vdz8e2GWMBJ\n" + "uHr8jiwD+Fohhygc0l3eS25h/cdVhs36b+QM4BCVJE/BpzznfBx8Orn4qWCQenw2\n" + "d3GA19Kya4ilDKjkLEkuevDM3FM2G4bu4SHkEMcMgbMjuR8+QjgTU0oJyTSxFikg\n" + "0aTr3NNfXeu3RQ3E324Xa4W/z87hQ08rO1lQYdzQ5qHHsF1iTv0N3mfTKtVhXdsC\n" + "AwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1Ud\n" + "DgQWBBQM0WnAYYMNuJPWD0SVZOQJJanMrTANBgkqhkiG9w0BAQsFAAOCAYEAFxHR\n" + "t6sFU7LLkGzu8LQxOijtghiF81do7LuydlBGI0fr/Y7KIkknpYWMxv6VZh3s1WV6\n" + "/ll/0f9pK4+G0i7r1H5+i4HvfV5zu3ApyK8GBgxZvrnbCIkGUpocXOsdnAtxJSC1\n" + "WvQrqCAZKixQDWwyt9YmWm51KEm1JJtWviE10ShaqVj35Z489tKUd2fGfepodP0d\n" + "Vr5RLlV+e8r/ib8ZP8ORs+2wqLEADXFk1Ve6qkvoExt+zhcgcgzAQH6gzi33BKof\n" + "uU7REvZ9A9sL9uj62Pk/Pj6LE6I2xA6nvVrSkT1waZ3c1iufoR7vUrxKz7pI9tGX\n" + "h2sNiR1M3sKEeppgXG2Y/RWn4rK7OVnIwr4DKU8AtPi7KG8ERLriaHlU5nN2XAsB\n" + "tas625DwjY7W6H3FAeD+9nTx0lNUffh3udRrzgCLobu2My5srY51orxS4GQJZldd\n" + "PoIw3F5XljrbtW7UtE1Lh9uuQhUXw/QXTBGYa4WXKQSJy4W3KpDRbHWsISGL\n" + "-----END CERTIFICATE-----\n" +}; + +static const char *rsa_pss_chain_sha512_sha384_sha256_ok[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIEsTCCAumgAwIBAgIMWXnNyRuyw21uHTizMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAICoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAqIDAgEwMA8xDTAL\n" + "BgNVBAMTBENBLTEwIBcNMTcwNzI3MTEyNjAxWhgPOTk5OTEyMzEyMzU5NTlaMBMx\n" + "ETAPBgNVBAMTCHNlcnZlci0yMIIB0jA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFl\n" + "AwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBIAOCAY8AMIIBigKC\n" + "AYEAycDE2FpGA7tkLcxcnUqA6BVw2xsyl4IB4K+fRHkAF/4lAozRAmIFMlcuPM+b\n" + "YZ4qRhrsvaMKFXxgCIuSz965Vvw6twm+E2XM3oBnkgohUSI++j7E+/5cyrp40jGA\n" + "QUhzg83VoeJN1FIVJiWiZt5zTalQ1khRm2asVJiA22dqQdQZiGBy55jUQ7aGEv0Q\n" + "MkQwTbfbhCGbpGyYz4Qx21IWp+AhXXePQ1j3NH9LCLJK90EIdq68XIVUmNtYi8t9\n" + "devj5+nEAs68uSidEWp9bIB7y9ndL1TSfQ6svLmwLB1Rl5D3rM9ZmmB9/92rECKp\n" + "PdoyxkBf7BU3zTPP5Q9qlMqfL1fnVAcXGsVhhiUcWNPPTMarLcwtKgN2pvNQT7nG\n" + "QhnmIl1kNSYSZTPamahF9GOcTL6rVjadu2UBd5+3XRS/MXYlPYWy9YQeau3cDrn7\n" + "03pXT8qFbc25IWsex//hV/7rk79HbDdwnoUg6rPaHBMRl51QFaVVAi8m2CjHa/f3\n" + "5FjjAgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0\n" + "MA8GA1UdDwEB/wQFAwMHgAAwHQYDVR0OBBYEFDG/Tlzzm+E/1Z1rDlDQfq+KoAZm\n" + "MB8GA1UdIwQYMBaAFJKBxhYjx+AnDvsqgUqc1TK82POAMD0GCSqGSIb3DQEBCjAw\n" + "oA0wCwYJYIZIAWUDBAICoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAqIDAgEw\n" + "A4IBgQBYrsdt/jkyeoH3JeXWqIBLyK6uZFC5Lh7FuK82Mv7iinwtPVL5VQtGAJml\n" + "jquuQ51S1UmZ6NUDW+wcA5hro1KAAb1wDOd5BmvUGLSUIPImT8YX/npLGtKINBBw\n" + "N56xsHgSKuptU3/Nbe8Yxgxk4xwzeJa+O40zWxuYryZHs8jBO3I1QLVV/iQqrpjG\n" + "dbxOEdOGyyU21CbpiCOuiHRraVq2IOgWohS5Y1+9AkHm0ir5QWFfxQrFnNA5WODx\n" + "XIBr5gG1mRj+bwo2kNxSFW20DTgJRL3KpINNa5JJxemzXcv37rFeYyKrCQnGe3bw\n" + "DQZwA1gDCA7zAo5QGm4I72cwRN7CoLxChdJvCGcDeYmkEBnKr3KJ4qYOLbqcGWQf\n" + "ErC7NEDprI0OytJkyMXX3CN9yLkfLqF9uiKhrO8oRrIfeN6Re195ORJDZxyj6Txq\n" + "eGrvjT5cmOs5c2Lx8MIsa1ItX0iVdZQlTkgu3/Pe4MT/dUfTpPaExSMBGUVh8YRy\n" + "bN522fM=\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIEmjCCAtKgAwIBAgIMWXnNyQ1BARJPavyUMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIDoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCA6IDAgFAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MTEyNjAxWhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTEwggHSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIC\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAqIDAgEwA4IBjwAwggGKAoIBgQDL\n" + "TmQzgdiY75JQHpi5ZDkblnTj5k4utI5jV6HNWomMcGyj5Ofy/F7xRe1r/bQB/G70\n" + "fnuy5v4iVooEgDOs7GSs/7yqagqkvGUeIDskmjmNznlveBAEqfuDkiFWgfe/2SZ6\n" + "iami7UzWDC5VObQY2isPPwfWllGTvq1eacfPdcZO8D5McaMVAlTmnqwZ1plRy93t\n" + "n0FoikDr7nX2OXmeSpUVPYXhK/SMTYCXlNKY3sAkZGsg+YLslyR6xkLMPK7ZYZQY\n" + "UNynwSeC2KJD5d+8f4g/eBlYq6F93f0/oN0t2C3D1NGWEapCUwt2uk2U6H954quQ\n" + "QWBz6RzTPP+DhNlqNy2F1OqFmfyz2CqcthnjSvX+wYmDGQ1i3dOJv2RuZggKoqdD\n" + "T++OIO18ui5pxJJY4rXbXW6Q20Q1r7L9ekth9xPQMfzQrvmNiSYGIin1Dg/sIx/S\n" + "jcWpVUfoKhWodVKFqqCTh2BQIrhjMp58HsDnweqZplmol+TIYmisDOPKkJeUfTMC\n" + "AwEAAaNkMGIwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwQAMB0GA1Ud\n" + "DgQWBBSSgcYWI8fgJw77KoFKnNUyvNjzgDAfBgNVHSMEGDAWgBQHMqYj24DquhwW\n" + "ZWWW+RYVmFdhODA9BgkqhkiG9w0BAQowMKANMAsGCWCGSAFlAwQCA6EaMBgGCSqG\n" + "SIb3DQEBCDALBglghkgBZQMEAgOiAwIBQAOCAYEAq2O55VSNICePERXCHlsi25cl\n" + "u4PPwy+U/MO2A6RPbJV034O28FWGe4riQ90QFHteHS1Sv+taItyob8xs+jk2rFY0\n" + "TlwoH6Q2zMWzpW0Z7ccnpSE98YzSNwf0Qx3xSGmCvJB1NDFdSbYrpU856nGanwyQ\n" + "PbSpJHcnIBgXK04FwgBGhgJ0emm1jPQ5NkXhz/LG9I8tyeC+9AauLGfYd/mt/Iwi\n" + "HNzZy3lo46SKFGY7rC8yk0O9zXo5+SDEPbgv4MiDBsQLJfjxED8J2eWW8W6N22K0\n" + "nUyQzQyfN26D/Vrpy4Zb5RvxwVCTeUyy5w4FFUfvSxWLDkTHaBMdNTyADmTNEDt5\n" + "zzVec9wSWk57TXExyG8k/ViA0UI242KzcG536N6Q4axrrRN87vEHQPmK40j6eC+e\n" + "NtLeOw/tINMxSj3xFWA2LaMpJmMUQSK39oPP6ct6rIe1gG8J2dmdYzTSGrmtBtJQ\n" + "9qmDO0u0Fv5MbEWYMkULtTQg4/jyJlQD4S+/C2Nk\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIEeTCCArGgAwIBAgIMWXnNyDCiIyBT0gz/MD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIDoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCA6IDAgFAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MTEyNjAwWhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTAwggHSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAID\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCA6IDAgFAA4IBjwAwggGKAoIBgQDE\n" + "9H7sCj+cbftdBLcDr+u/YR4RKZkjBRk7BSV+uy8ROrk0HRzPDdxK2z4apoIFwqhP\n" + "kAWgaAVItniryu8TqDpYUMWjqQd2wRPtNBGkwQPBCHNQwehDd+tf0ru/4hRL5pcx\n" + "A14594DS+oJBQHVfbZPCweITYIrpcx6tKzvMnIlc37pr4KsTftRrCOTl9CZiTenR\n" + "vFYkAXucR6l9zHoiFABK13IpeLB3+1wlSe+hiClaEoG31XCbXq7hLK1Uf2i1y2il\n" + "6/fty3BfGqoBQ2BZ9AjmVMCD8dkN6v/+0mXED3nJY/3QReDcxIxiWpxA/8k5Gzox\n" + "S9mgCCewfWCKKgJt37eZvm4JwZ/yP6ZALrM9uy3ZhCYd4snImy6E0qg1VC3OJFZp\n" + "4wJgpDLbAKXliMQN0ppswDRiqwlpZW1gUCpybf5vlVN0Eyw6jQ2/6CeTmNb95a2b\n" + "5H30q5ZPt4NiyepfgA+IRqHexwgAr00/MMbxdtuW/2Y8WQizv7LdE/h6AmXkC2UC\n" + "AwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1Ud\n" + "DgQWBBQHMqYj24DquhwWZWWW+RYVmFdhODA9BgkqhkiG9w0BAQowMKANMAsGCWCG\n" + "SAFlAwQCA6EaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgOiAwIBQAOCAYEAdCu7\n" + "QA/Bx9HFjc9794p+Kw6UBrtMdtp46XIyUfYasp6j7Ta6BV4y20OW5DCdldtuqjEy\n" + "S+nFfUdKI6a/YRLibl8N7VFK8Fqhrh5ltJN7J+Y5eSiku9SHG94iTY6tFCNa5n20\n" + "DUZ9QxIBi1fMVwCf1yyt9VGx4U7CG0XS9QGkLg/GtFEgyr/4IALw4W2BeluKAQvN\n" + "Pulyogq4u/Jwh1uEJEMufLXFIDftGxWixmD5aSu1ReDl18svG05ycLyn5KlYuqJp\n" + "Hve/VX2yegD4clMK+yUtZ+x9ODzVfJ/j1HeBpnLrVzxBNL0HyPuhfb9CNf6kHwdF\n" + "1lqXopRcidYrqyJp7NHoEhWSszg4RJNE5WOjymbu+swRCJV1ISi9tTxXrIQnbdqD\n" + "+2FewNFyLsnxfMSnNlF9sIY4o2tnu/8ktWC/sx5lAxLfsp+ZMr2jfT1IalnlK8LZ\n" + "8YLslBiZkbG03zyadTegADLN4c1u+FHqKtkPnuLm+Eez2V76kYkLfGGbof5X\n" + "-----END CERTIFICATE-----\n" +}; + +static const char *rsa_pss_chain_sha384_ok[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIEfzCCAregAwIBAgIMWXi5ih/ITJ/QWOoqMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTEwIBcNMTcwNzI2MTU0NzIyWhgPOTk5OTEyMzEyMzU5NTlaMBMx\n" + "ETAPBgNVBAMTCHNlcnZlci0yMIIBoDALBgkqhkiG9w0BAQoDggGPADCCAYoCggGB\n" + "AMWYGBwas+HiF+8VbtcNMJeJydmHi4GyXFlqmrIkKheVdcag590oNPi/XlLL8a/F\n" + "ZY6rZkofMJmghpUy8UNfboh2J/orwtvcGHWz63FIdWU/XyOK7+kTeYzrZTZWpFSb\n" + "6m/SCl2r62IDZoCGBHVY4+c3lWj3VNO5ZoLqB4YihKsrGEnQwuu3hxVjl4dnuktr\n" + "PJHukt8i9JKtEL2snh87QaiN1jfhSAPverDGNKIJvuAvd5RilbGDSPDT0Unp6Ckq\n" + "dgXgX6UOZ12Kk1DYWinnvAgIjMQme45nvLrwHVGpt1GfvzLteXNeg0+K+QBldviI\n" + "vppxvtahwDrPmsjwWP977zPNntOhU3apS01P9HvPe4xNgFlYYaTMPRTVXkOZSYEu\n" + "RyzQIM03YpB4sOJFMyFFH91VghKOiN4zIHPtz2z0k9gUJwUKN+DZMhWbbtDxwpW5\n" + "FYi2QEVQohrZSehh6jrh81dVVBgvMCt9SCWXkt82eA79PLJxYTLlG/tn7oALxLdm\n" + "NwIDAQABo3cwdTAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDAP\n" + "BgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQWBBROq/95r17hi5grwFWV+sYKZ75+iTAf\n" + "BgNVHSMEGDAWgBTt5tc//kUHWmueMbpe11tTHkNo4jA9BgkqhkiG9w0BAQowMKAN\n" + "MAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBIAOC\n" + "AYEAtZTjZJBvVRW2DCY93yLVwBCJJDmeRf1qzR9+js9Ws+pu6ZL5qIdidYpNpB/5\n" + "CGnjEdohq3Nd8vgItjLmP6p/JCSVEV8nc9W4IcnUCiZYzggq8CKDK4VSwZPKrdyX\n" + "dW62d9GWnQ4VqvLF/h8hedrxujKVEZhVJDoHV4BFWacQra81Rp0PzT2d4RzoA/qc\n" + "H0wOZQxcyazDPXc5JI7rN3P7uFaOwdnYsB5cDC4/XOygv/ULEd5J4OD7PM3T3+nw\n" + "VnwyaqMPtMJNsnO6j2qPhFj2q8DxOpxsyV+o3DxG8s7SfdcRdMKOPH2T7x1lcXm8\n" + "l5QWd99kHEFUqwB+4R+2TKH3C8AsDnJq1x/OmfpyC0l3ZSSS64MdzyrSQKn56NWr\n" + "kQjVOpMMvGrdFkofZhNe4Dw+XApzFtsKaNbwZqGwlzvoPASlJxEmLHbwGQQQtMaY\n" + "JfNRuUtZSf2dQdFJXKpt6vClMbFhp9t00G5+XgU2jNi8KyaNQ49VVM5SDUmMxOo3\n" + "zPQF\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIEaDCCAqCgAwIBAgIMWXi5igaqxw34FqT6MD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAICoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAqIDAgEwMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI2MTU0NzIyWhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTEwggGgMAsGCSqGSIb3DQEBCgOCAY8AMIIBigKCAYEAzlBF\n" + "LH8Y+QjFNrlqALm29hRiIcjqecggFN/4RzhJ3HmfZ0pAx+WGbv/55hW1e2Chh+E2\n" + "TCfaX6pOy4Brtu95+mcySteQPG7h64HYr2c0Ts1c8HhSJy8g/5Y8PhTiQjp2ai84\n" + "pDJ9lgnzbjX/YtES0A0m+sbin86lScO2m567/0HG8DexwwOJMOM+DguTViK6C2KJ\n" + "OAqLuavjDZnNr146rLU7xbRqYDe0mKiINJdw2f4qif2QP0gmKmAoprogKaCm/94q\n" + "XFzwUDkgsYKQf8swiDIvgVT10UEvn492MtE3uo1s6VaCW3gDKRB7yaMmrcPu2ZkY\n" + "Emt3LN8mMt0w19e/ce8BoP8qokNRCv+bbPzFeP467IwdC4oX80C6zmEG0cDP4BeR\n" + "Mt6fAWPg14p2yE1DP3wtp++iGUrdNj+N6bkZbRc5Z4KjZIKcQC/BFWXqvY8wQkOi\n" + "R6dirCm+wycvILjectNNwA1c4BQ3ZYbqQu1g0M1ytcthtwfmk+TJ2qQibUfpAgMB\n" + "AAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcEADAdBgNVHQ4E\n" + "FgQU7ebXP/5FB1prnjG6XtdbUx5DaOIwHwYDVR0jBBgwFoAU0YmZVorhECgBkUd2\n" + "fU8+DltCWHswPQYJKoZIhvcNAQEKMDCgDTALBglghkgBZQMEAgKhGjAYBgkqhkiG\n" + "9w0BAQgwCwYJYIZIAWUDBAICogMCATADggGBADh6vayMUYWLPnIRezxYzOIEST/H\n" + "IQiCcYobFpaecyMnt47wndTmRw5bWJljwcH+lY5VLAGK3CegSQnANSngbnrraR04\n" + "D7031eQgZtYuzQPsqiGp4k+Z8cXz9b/3xgUThBmET9Iu5k8IZvhmIkCIbARMPA05\n" + "kP0ouTNevmkpCZWCggbXPe5H9O9gZ7MC4z1WVwklte1p6+BUuiCLnp+hpLsMAl6f\n" + "DI22SgdRiOfNtretrW+U5sNvsbvbHb18+iBfB/6ESQ4zJprkWUSLSK9nfB++j5LC\n" + "GLoMsDaWFAtvq5hBVOLfcBJgVpZPmqynTeHysjeF/H1j4mws/7//85MAGRmnHdQe\n" + "nFJ8xtj4k9RaKWtlUnsF4LSo/i+34cU8+ETxjNZU+UrupXz4KmHIho+DhYpJtW4A\n" + "yYasAvX9fTuStHJdLfpMGVN0lkOd2kuDhsLpsmdsMOZrQw9PPxlfw9NCdWxYFmp6\n" + "8g7df51DKxx/CDrLXQLzqp1gc8kgM2eIZ18z0g==\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIEeTCCArGgAwIBAgIMWXi5iTjjcE3NZtmRMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAICoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAqIDAgEwMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI2MTU0NzIxWhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTAwggHSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIC\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAqIDAgEwA4IBjwAwggGKAoIBgQDD\n" + "7BbETCcU6Y6htR4lbDPrdS7XzDZ3m7gjjsgmZxZqPll9STNrqeWdOe27bdn5t2yQ\n" + "vOxv7JN08hV8JJ8BzlCOVY04RX5whVypdtjgolvbpNmNdG4lpoBN6ZfV9AojrQx5\n" + "JS2gGZcA8tPpPk29anX6N7QxNcIfbaHUK4IiVBMR/fpAq56DzBVP/gTPC7FiQ1kr\n" + "iiLVQZriqnoBDf96igaEtDnz1cbIluaEH/lKtTgjlA7Dx8AOfS2VfkKHEJceerAO\n" + "97hz/i02Jwtmn7JHHCujHKYjuwy8Ieqk5gGk/Lny+sdtNWLkNhWQIzyJXSQWUeiB\n" + "mh6MpCYUr5x+3RVl9xDaR2ltV9DF5hL2yE3ZYzbhpU6LLLn82DK1PARc8CinIZyW\n" + "coo46BFc7NfXUnOnMZsCBZnBiR9ZIpnZLBHeAxMIIsl4PiyJrw0JC0NS8Bd2Bgbo\n" + "JdpGV+nx4hDVsrkINpBaYJJUXbxgD3noEKZhamtiYO4UTRk1w74ceHwJKAH0hWsC\n" + "AwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1Ud\n" + "DgQWBBTRiZlWiuEQKAGRR3Z9Tz4OW0JYezA9BgkqhkiG9w0BAQowMKANMAsGCWCG\n" + "SAFlAwQCAqEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgKiAwIBMAOCAYEAvuww\n" + "C9ndJly8/Cp6WHu8Wt45a+o6Zup2mMiLX5Rg9Y0i2ZgrbXvY4tbQIsexQWNXuKBk\n" + "U/p2ReBB6gletZgtyNKeCHTqpGyHemGinP+Yqw88j2Z3S8xOHN/zR+uK+iUZEKZk\n" + "/atCDW4BdocaYOGJjTwXI72qsBeyJSDF3qCrAgYcynzd3wmNdl97OdL+/COgIy46\n" + "pYf8skbqAd6hOymTqGD4wI+TNPfjXmstjC6leeUvmAX2HuCOJWkwVp0r0JGs1qK2\n" + "8meesblAVeW2XqL0ScN511ME42rxt6wwSelTepaKlMAsysN58L/JRgC+VqD2S4yS\n" + "2fe6OfuWItbOWDfvCRgufUzHzgGnslf5U0Ejze8xLhryBXz17Mnx8PGXss3xRqva\n" + "Urgy49T8eth03GV8mTnEbW4ixH/5LRq6Te5ttSeuHVtdpnDAbB8MKZQtiNk5mDNd\n" + "PXNZOty0RPQ5q2L1Q1ANd/zsY3bCoCOu7ErJBXYMyXCBxFtTUWOHvxnDt3cZ\n" + "-----END CERTIFICATE-----\n" +}; + +static const char *rsa_pss_chain_sha512_ok[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIEfzCCAregAwIBAgIMWXi5rCrgP3sDVAJlMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTEwIBcNMTcwNzI2MTU0NzU2WhgPOTk5OTEyMzEyMzU5NTlaMBMx\n" + "ETAPBgNVBAMTCHNlcnZlci0yMIIBoDALBgkqhkiG9w0BAQoDggGPADCCAYoCggGB\n" + "AJxfUNbtAMdj9L8j8H5MVFC4WUATVth6BleRmS8B5L6SlTaMofYBXUAPsWuLm1UX\n" + "NnrPzkLmpt1QaHl8lwgdISiP+Ka/81H9fs6gdEZigadMO+y0/YT8/E1CVIhmmuGQ\n" + "2Luo6cdYZ15i7OirtPqm7TPzHeE2xhL8JX/4iuTUphM6f1yLhC9pnv+4FCtODkcT\n" + "bl2IpKuTImfmxkymJeUUkwpR0CvUi0PFuafwLVvGMo1qyx8wkvz2bqq68l2VzqPP\n" + "fvbGWjOX+dpHnPH0wUtKI6pvO2v9SwwuKBywRU11ahgovBGG/6n+HubwVGp6S+V/\n" + "UShmILq0LSOyVdbYqF9nlKp9UYTDf266gUoDoSZjFw1Mfx3ntGh7uS6vLNvGdSEl\n" + "1JWe3VDEanyYzgKBrFPOKOL5leKRFQtNFjPTIzYxakhtu4wFGw8yqrDACsNYloZo\n" + "VPys7B69OTvvkrkNRHLZYHFgveUFAq1JDHMPtFHO680najV1R0kyaYurVXmm6MS5\n" + "qwIDAQABo3cwdTAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDAP\n" + "BgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQWBBTkNsRnUzHbTJkw8PC5cGXFKwsIyzAf\n" + "BgNVHSMEGDAWgBQ1g4DM6qmT8uJskGxeUUUSIPe3iTA9BgkqhkiG9w0BAQowMKAN\n" + "MAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBIAOC\n" + "AYEAIPSvyEoh5C7wP7M5hqJnfzlV0rs1jeLNNgfc8GCbxKYepCZysD6JufFDBnYu\n" + "qE4/RrZs0kDJ1RB2sMqTcwUEuZBIBLZtaRj6Y9dsBrPkC3+1DuMVT4+AoeQZMKTh\n" + "lLsMWba7Cm/lV1SG+cxKv8Kj7mrsrFNrv77td12rofIpYt1gxhgz0k5GrsNtRpyX\n" + "jpTk8PgiJQyGDeEG6HrG0F4VvFzvy6XeIOjwuiXTbpzC4PwpUt8WHkp/Xm8Loiv1\n" + "5P++mByZtXSCd87BIADD0YapQaXDV0a8NWM2QUTcZJw/p2LrY5QOkO0VepWkifbN\n" + "1jIbc8kilMNH5yQh2JWrDRz81ntpcIlFLwYQVzJguZ5Tr6lHnv6d2mnBUzbbv/bs\n" + "scMlxv+55LPviiHIkidIxfBENMbU2dB1u3hu+aEOQJ5W1w7RSuRJHi281HathkIo\n" + "jbo0ZCxUzXIB41YIoESYDOg6FGkoT2I2vCHyW7lLzPnPa7a3PolGeLn64dmmn3mr\n" + "Nr7V\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIEaDCCAqCgAwIBAgIMWXi5rBKSNwkPo4olMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIDoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCA6IDAgFAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI2MTU0NzU2WhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTEwggGgMAsGCSqGSIb3DQEBCgOCAY8AMIIBigKCAYEA8Afg\n" + "aY9tKN/1UwFdqmDTbxcxiGDQFTDKDFt4zLEy8HoqsiTLEycydVJeAEuw1WNrph1x\n" + "nphDETOsiG429CEkIj4rpNaPSevQmfkUP+NFqKgf3egUInmXzSMnKuc3eiDXzSC9\n" + "mcYzcs3O6kDruoTBcmujSQxdcPYdj08BkM2uD1PlHVeE1h66axt82I74q8ntT1Zx\n" + "IM4TaLSao/Xdn1i5AYHwJj3DzjKlYDuLqkAiyQDI/NrRS007MYRLN4Ebu6bvkuzN\n" + "6m7eXYPugV+lSkGSLTi0cbG0wkUqcR1X5JzBqHyXU0epoz3/PpVBwMUNHMun3s7z\n" + "TQt5OJY97BeY6l/Wj259iBYj41UvEghT67smaM8zvwFb51+fCPLKPUXG4A2Ksx0k\n" + "H+HIP2TIIQbuM4KAS3VmyFNoxzOXs89BdxJCQ+D83RZHSYn4t+76fiSzV+I4baGi\n" + "DbPVU7cM5CrOcfTohP83jpOgM/LbPyptGu6S6GKMx93HVLP6LtnZE736dO5XAgMB\n" + "AAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcEADAdBgNVHQ4E\n" + "FgQUNYOAzOqpk/LibJBsXlFFEiD3t4kwHwYDVR0jBBgwFoAULmo+wdwsHxfVzvUw\n" + "NyVK9++NokUwPQYJKoZIhvcNAQEKMDCgDTALBglghkgBZQMEAgOhGjAYBgkqhkiG\n" + "9w0BAQgwCwYJYIZIAWUDBAIDogMCAUADggGBAIXyJ4S/dWmkPV3kBUENfIXaLV57\n" + "mGJjnR/EnUX4gVVxDfKDTNGq2Y1ksCeY1JmvjSHZVkX/D4p3BCHF8bHpLvS7Edts\n" + "4NpoL3A4MBdupwDFtF/0Fo4VdZM4ztLL4gBCq2pnukCkbyELCPpe3d/yVujsJNrQ\n" + "4faiJMwCjep+3q0ZiytlsN8M3bdGy8ocbzPAi2rMTvQ8I+2e5kLTJmatJ4Qbut25\n" + "d1rfJ4ruMt2QOrSlYSENKkA3zjRAg4a2xvVPyOVZBEj48366b1uuji/sOQRckZ/w\n" + "3eoeffRfWQXO2y0/K9TUqZM+6n10N32ZkR45I+XSQ13qS73l4QS4djay9z/bAMeb\n" + "/zgaf6J790LULzDBEvhPZLNn4bBu/t7WVj2NI+frQvAHyQ9ZhBYkow84qF+//zK9\n" + "d/VzQbBQOJFX9TWdWgUxklrWnXE0gmxzGBdq+cMQyHulVVbgShftCRJ8jn8e0Cl1\n" + "dl+Cpj08yyLpT9/ZmL8ytgD3Iobw0wPHppb/jQ==\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIEeTCCArGgAwIBAgIMWXi5rAVAVYZtSJyOMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIDoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCA6IDAgFAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI2MTU0NzU2WhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTAwggHSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAID\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCA6IDAgFAA4IBjwAwggGKAoIBgQDA\n" + "DS6aZqSaUEDHL+1DTQtaYK8IO4GgdfI33+C2VdIe3LGjUJMsOjpKjodrSe46gTyW\n" + "fBAZSPHntcbckOJovv6fXKDPWgvh0s3AWZjVGtGVidXbEFzpps+YKOLnrVMbvsJn\n" + "yKIZed1RvJhpGs3pH8hvI0dV5udpypGmtiGUQe/6qC0kUfVix1luN+8A/SyI9tIS\n" + "vzgDORlHI6/2w/HlVX7lMIjpf880rx2BX5XKDpYmpMqj5yOOK15gKyZLUGjC7OWs\n" + "cuMGZz697fkmdRjFDLALQYkIvhFKiPPJJttV6ZB+wQ9daCgKihFl1cVD9w3AznY8\n" + "lcspJvGcFp3wtIvAvQ84P4F6g8nhs79Rdng5F2Qkr8NRoeGKfGLJT4HFOTwIG8Xa\n" + "Ily+i38KTpLIJklb+qzd5hURONxiaFTfG+FDcrySSaUC7+OD4ZitDLkfCidcfMmW\n" + "pSvld03gmw6C58zpaNZdztQy5rs5Cw3nI7RFNU9ADEySg7i6aUe52tvmgJkaIMkC\n" + "AwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1Ud\n" + "DgQWBBQuaj7B3CwfF9XO9TA3JUr3742iRTA9BgkqhkiG9w0BAQowMKANMAsGCWCG\n" + "SAFlAwQCA6EaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgOiAwIBQAOCAYEAS2F3\n" + "Tg2gTIXkyg8vV9OCfH2YgYQpTFLXyfLOLiuQrSXgHUOCO1RV1Jkjb8+Q5hMrPOMZ\n" + "Dygb3LYlF6fEWW76Z3QUqlshIfCbWE7+MAQSbjHN7Awbq9c44edvm0JuAavVsk7M\n" + "Nxx8ISNqlO1BRlaX0PscNyiRBhrPrUzAfPaiiguKXMMhFnp0V/aRor47ZePhRrRT\n" + "NKX5aSBrVl02gQldK5uKbywa2k4SDG9OuxtHfBwjshHoWbvxg3S9lvhgzR4yaXWh\n" + "944QjceIEelUz7czweTUdFc5SSheUg78SGnXWOsR0CljXl+r+Laq/Fg69VZffjJJ\n" + "8A4J6eUf/2Y3h+sJ88/Le80bG7NUREfhjYfC7VAqPiHcGTYQUjw+Ti1yWmWt1rS1\n" + "khg529kYVRone3UN1/Fs3hquwjZfL5ZqUR67pyMI+QTVvVeSBCthSafrhCCr8xpO\n" + "OpQuLLx9v/QXqtg8IhdVoDxsQmdLU7aeM/KfuTujcqFeacs8ng2g2hEGGFa0\n" + "-----END CERTIFICATE-----\n" +}; + +static const char *rsa_pss_chain_sha256_ok[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIEfzCCAregAwIBAgIMWXi5YhOIRWm7jtzAMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTEwIBcNMTcwNzI2MTU0NjQyWhgPOTk5OTEyMzEyMzU5NTlaMBMx\n" + "ETAPBgNVBAMTCHNlcnZlci0yMIIBoDALBgkqhkiG9w0BAQoDggGPADCCAYoCggGB\n" + "AKrMNcBiv53Gc/nZlcHxl5DVW7kqKzpfcy4ghZXEM57/7FztPaYU5waGbAcci/yh\n" + "m06lFD0kAyN6FzMZ87+o4PK6Ov7EwAg6WtQ5eMvvK7NXMnX1tSGlhQYY+a+30n5g\n" + "gO4c6TXB4mwAWeWCk8RH28apwPnQVUDhxpmtzP/XAKkrdp1oTVUKQaSrkRrzBYY7\n" + "66x0ea1Rqx25piSkN41FxGVYLgKY4UbAmVJTGWTM9MPLwCCjq4DZO9QaHT/dGpG1\n" + "FPEtmfw4ttSqJfGPT5ikEfVRw/h7WaPfrf+oHVktd4/TMHXGIbVvEqueTuVXm7CK\n" + "k8bKvMOpS2FFFtPJbbatUJMfenN+i9epgiquuMdkp23ZCutDmdNMHmy0M6RSF3vd\n" + "6bg55Ghd71OJNyFZ3o1QoeokrL8qmFER23L6q87iCed0Vtw7Sqd+84HETZ71RI7r\n" + "Qg0kKd+sQBA7vKy+XpmHOiBsmLEffGHTL/pP6Hl7EtP72NdY3Oayh3QqAuPIoxYP\n" + "NwIDAQABo3cwdTAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDAP\n" + "BgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQWBBQuRFAWSS9Dn8SzG6lK1E82fyDDVjAf\n" + "BgNVHSMEGDAWgBR0nX+9KcaAS/Dvj0qxpYFUZWXFRDA9BgkqhkiG9w0BAQowMKAN\n" + "MAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBIAOC\n" + "AYEApluSi9xK1Tzgvrw8bob4yhNthQeD5E4d9kDCqiI1EPooyuj4M8FlzWUyYgk5\n" + "IQ6wZcylosGzJSVJp1LcFKpVzRAxqJk49M7fr6XwqKjn9bezjbqt+VjHEmG9imeo\n" + "sG6tKQ3fnOlP1+RgmWuq8ZDM1gkv6h3WPQHuqYrcyGxvgh2JYp6TDzGriTLEj/MX\n" + "PX7zJr8qSM4YJzt47LQ2k4zDay9G9SLem+tcmjc70Gd1eULCl0YAJ+e35QkhKmHO\n" + "aEs4nXXR6S7kVTIojF64e45JhqySOZailZIoCTxYGV8fqIJc9iBDmKeruGfgUzM+\n" + "0+FAprmhcqFOv+GN5b9oPbcWuQPwzCqMNWd0nBI+w5M0oktfdVvtsUw8Dak1xJIb\n" + "mCuTlvj35a2i5fA3j7BYT//Mj/hTNJXTvIPUVhQ72xIZ9MjkiAQM49wz1xZtQQII\n" + "ugHEN5LS4QUdjM0/2ZhAFUUpbgPg5Gg3dqMw4tuYYDoLe0+SO3ZH5jIN+5HrbQAJ\n" + "pKuA\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIEaDCCAqCgAwIBAgIMWXi5YTrysOexHvTRMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI2MTU0NjQxWhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTEwggGgMAsGCSqGSIb3DQEBCgOCAY8AMIIBigKCAYEAvhHk\n" + "wO9njQ/tVzWKDXgTAcP2cxSAbYNmjgflCkhdrF+Bn2BKR4e0q9wbY2sgK52rCTqg\n" + "gVB+1Aem/C7U8b81X1JlsKuh9jarmJwPVK/oRFW+L8qbmHRKktgNYIbS4qgyQUqR\n" + "vh2hF48Rrr5HudtvvL5oqSrqNvpZkUzPzIkV61C14+ujeZiMuycYG8qT6UL2fRTC\n" + "/qGwQWUvaJWSCEQhibMTeE8G6zO+O6hSxNZJVYdM6HT/AutEE+hvkfY3sy2PAAmr\n" + "2ea96Tt3KJiifDvdwH3iGhfHShBY66pvKF7BFpyOhrxCZaDxb5XqfiQWLZAM688G\n" + "sYqOLLaMgsL7KMUh2c9OA3bHiPed5nLap4cFBYEDT3j010waJIYLykRcRYV8ijc1\n" + "jLmy0JDW+Gvy7JvuVMLisvqmafQIapAyFjvxOnw/H/TD7HRaXmkDAK/0XwPDObXl\n" + "VsTrHH4MxRpmyuHTMrns7usuQiZABwmqk++Hx60YiepwDepAyyhBBXqyecD9AgMB\n" + "AAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcEADAdBgNVHQ4E\n" + "FgQUdJ1/vSnGgEvw749KsaWBVGVlxUQwHwYDVR0jBBgwFoAU+BBJLVPFaMA3pFQ8\n" + "ePgsaRye/NEwPQYJKoZIhvcNAQEKMDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG\n" + "9w0BAQgwCwYJYIZIAWUDBAIBogMCASADggGBAJCZIQzChHgacm23b6shZucxQOUz\n" + "k5AQRSQYTc9RIKvp70fupjFY13wpX7EIyJut+x4UAbXWKm558siMWz1Bgz0zF831\n" + "2F2aQMLoZzQ+85IjXbgSFLmjOZggBhQbb16LfXX+YNs2zeGkmpGyLDNbID3FlteY\n" + "Qig4ELp3XARl4gzbc6R+t78AidkyGxjFVfYzI75hA7Y4GC4kWqoa+Wn1MLlrnZRB\n" + "r/J3ECyB+Kg+izdrDlPtvfcoiAFXcQjoiB3+BG6WrT5fEBzNJXr8rdo5rSxpxKjz\n" + "ilEnHQrcQqWIH/BeeLTmjMYEhYVamCqxc/bxxHhCMly6dOQmtcJdc8EufssqUAno\n" + "qPU18vBYTAoKSpS2euAlOY4SYGaLUtAKqdHV7sx+hglRW3jZfmKN/RJD4kOM36vB\n" + "fbQ6KjVn4GbFgJF12xB/fW3C2eabTIcG0tTl9+JiOW7YQrQqIkmFNA8PSA/a9Avm\n" + "/258r4j2gke3u2P2wWbZBaF+DoukvkJsCHBH5w==\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIEeTCCArGgAwIBAgIMWXi5YS3G4a8ITSrbMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI2MTU0NjQxWhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTAwggHSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIB\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgA4IBjwAwggGKAoIBgQCd\n" + "NTGy7akZ+d66CnQ/g3usM8mr+qonNxTmQXvjPslvXYz62OFpa0lMDfO4Cj2ylt/U\n" + "XMjIhXzfJ9/btovlXSQMi4jAByXesl+Pn3uklcy4W9gaQYqAyxZtFriy7VTpolkb\n" + "0lr+gVBc6Qr9Rko/HpmlMJcGJTSbm/oVjvAnLpC6MEuBtR0uWoPb4JNOS7Ycwq4g\n" + "KpoGOeZchqnFLx4LUl7m83UQsAoeMeilHV7xhbgDNI3x2vmVTYs2MNU7H1VS2VRU\n" + "f26IUtp+m8k4KAS8uZBXOeycYkXll6vONhcFlr5m5ZHH++/nxu3HjjisdW7rrSst\n" + "NGYHR7E6/2jSG7PnKfxb59/PTfV8NETIG+ZpFeWeWmJn6DnOIsQ3MQyaLGqmRCae\n" + "OIRcljx65gN8nRxHN+H35d1+GIfAUQ5v4UZgRUIpmMPpwUi3+zX1nweaS1Orjqdl\n" + "pEHIxCWB0CGc+/TmTL7qiJdujspeos54iZLJOchvxmI8/HR7kzH5xgwzqCDUAEkC\n" + "AwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1Ud\n" + "DgQWBBT4EEktU8VowDekVDx4+CxpHJ780TA9BgkqhkiG9w0BAQowMKANMAsGCWCG\n" + "SAFlAwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBIAOCAYEAH1xu\n" + "N7vSt3LLfjZ/0Cby3xtZNi1+m1FCh6Vn3NLofFYRVmHIItK9PszRaUN21UKc+PnG\n" + "XkvVU6GePfMHMdLOY8AR2We9OgIAxE2aYva5TyG1EjrfmCth/Qj9VMYLuIu02QZT\n" + "WTNBKCAv69EokxeGgk2zHrhwMvdHIcngTnLT2P41Pi8IIaYy9O8cIpmOAmbXh183\n" + "Vk30ik/6V4jc/Vc+QWRGj2DBTSGuXvg9UpKX5TZKp7li3w0oczL4BPLEyyFbZwGV\n" + "9ZIi9G0Viqch/7sTT82extpXgtWAbDf25QCBPKuOS2t7uRjacEpFDQVa+97haTK6\n" + "JpxZ1Wi99SXrasKkqS3AQTzUWAuzfQ8BU/s1XC1mMaZo107XXIc3tWyv4QhQV9Wk\n" + "1R8QhPE7bozAkyU8USWnaT433stfmkceu1ZwjX1kts6oAxk7xQUFZ+MVNYlyehyM\n" + "n42VNJ1m0aKvz9LPUWbgcd7dFBTBuHM0YnVaGhY3h/dvrmubxylxbG9xCp4M\n" + "-----END CERTIFICATE-----\n" +}; + +static const char *rsa_pss_invalid_self_sig[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIID5zCCAk+gAwIBAgIMWXl72CvN5943shfAMA0GCSqGSIb3DQEBCwUAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MDUzNjI0WhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTAwggGgMAsGCSqGSIb3DQEBCgOCAY8AMIIBigKCAYEA73m5\n" + "jEDnwLR5SoJJQ5yjJO09+ngRY4WwxN2RMX3g75JtBSyTjIC6OKvXwgJDGVuUnl/q\n" + "yU9bNvM0PKoRLeylqTAESfv5tjNS8ievydgaO8tJBMhSGyzHZvHQOc6VkOJAIIcm\n" + "WyduEyAm7oqNSDD5cDfXtvTCIW9FsjBgL0sG9h8j1Dyl3ZPM0UkFkmaXJSkIkVPa\n" + "2Cl619MnzVTngsUpJmIpKzl/uomM+Aj3QnzT7V6XtImaC2T5/rH896Jr5hVTImiL\n" + "5V8YjTVb7XWt93GLmhFBykCJFXCNAbWyax8TBy9JRUAsgouSA9q/dJ6GbRLOcWXb\n" + "Rr+MvuZYuODY8p076GWItrd0LVabJbr3CKwE/RBqxY5rvBb/wSYNYcG0yt3Oo5hQ\n" + "t01WqgmOdlUXIEBQ2Xx/kwPvSatWd9f0WyhlXv6eCugEJzYpK+75xpAysAIbLHZv\n" + "33Tr+eArgNVoaJGYNpZlwW6ZmkRjuTKYe6iHYs72uh5H7lNaALyfXw/gaBwRAgMB\n" + "AAGjQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4E\n" + "FgQUhi5JW/4DoCk5RGaJdF7DUsbXKUwwDQYJKoZIhvcNAQELBQADggGBALdQ3Xeu\n" + "4b1lZq+w2G6e6MTpAljGtyCN2hdc2xaKYOSH7AIuW8Ahiuo1rhUskYzBGqQ/rmuu\n" + "p/uo744ve6wbrIt+DyUZJGxGKOxZab+Hg/9rW/fx119kk3tCQMxSE6yI0YeuXT6B\n" + "hPL4LtoeZvncQcuueEIUmrMfPRYBuWfQsmhAXE0R3o4lx2DfnPtjSwUo9A+4AVtO\n" + "4sp29n2qfGsOIKrfMPrXZGQ5XWhAw0Ra0CIlFHhRxoov28rssiUIqLKS0ZrmOMvV\n" + "R5LuJWaLEb5W5E8LwU2Yxu3+0BFtRSy57HedebmOeDkmVuG4C8Km50ymdonafFQV\n" + "rfW9Ni1eqUMBD4BXQD0HDIEmQiBEBE7/K3rS9ezEIxpQWgK6dlYoaxGkybuHEos5\n" + "r0rLvi9CmmJRdV6+4jeuY3sUBRva1v8FYXHNZ/USgxRdUfpomElwu2C/af7X/ov4\n" + "NUWJzE9Efdc4rtkD8BJ0iwq4tfRx9Smp2hqsChVuRu8mkQooNdB4wS7MpA==\n" + "-----END CERTIFICATE-----\n", + NULL +}; + +static const char *rsa_pss_invalid_chain_with_pkcs1_sig[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIC1jCCAT6gAwIBAgIMWXl85RG4QFslQjj5MA0GCSqGSIb3DQEBCwUAMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MDU0MDUzWhgPOTk5OTEyMzEyMzU5NTlaMBMx\n" + "ETAPBgNVBAMTCHNlcnZlci0xMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEyi7p\n" + "7NiEAL4EjBrqbN0jULt4cHYYezi+iaJngGgJMeltsiNuPCjFRyBvvfdvQu6Va09j\n" + "CBYE8F4dyUUDOdB7TqN3MHUwDAYDVR0TAQH/BAIwADAUBgNVHREEDTALgglsb2Nh\n" + "bGhvc3QwDwYDVR0PAQH/BAUDAweAADAdBgNVHQ4EFgQUicpVAAomaffbIpb7diFW\n" + "RyPMN6EwHwYDVR0jBBgwFoAU877t3BygfVZ2TIFitsZClUs6rX0wDQYJKoZIhvcN\n" + "AQELBQADggGBAGW5Mu/NO0CFExmnw0f0G9jlOl/NDiVhLXDdZjlSLqi3T2Q+/an2\n" + "DCCeEVnsDdAFC/+Xnmd2e5hm1aj4PdA7Ua935MCDEzd4fqkdGTgGBqk8eEjWaJT4\n" + "cJidvPE+lVQEfAoVYA7MRzgtoa69MCJY82mdvK3ojJdezb3Is7eqg/FCItbhNQUc\n" + "NSCHCe0kuZt2w35KMxtEbAPsdaquB9IpIyyIYDOUhOI2n8NBGdYTWk4ESQWYcy6S\n" + "5aaKy5uut4PWvAOUjPzJBiiAaDZj4Ajn7rZiODxkMZE+1TIk+S4qM5H0Dt6JyksY\n" + "GN+0SnyXB0/6y3qM6ZDXRMjkUdPADnz0mwotfigZ5TMOdaxo9zgr6hFrIolGB3ot\n" + "KCL0ISS2l9eB64uebYbGyMOpSMOoGfypR7bwr8XFBxl0TbBosmZTMJkbM4CjsJLA\n" + "WPLHhT4lmVinzcbdOdycTFOKwECNHo4mTBjiUrrhndSjlshUZJe99XJuT6FXnyUE\n" + "XbkbJWt5LqAlxQ==\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIERzCCAn+gAwIBAgIMWXl85Q6kSh5LQoCEMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI3MDU0MDUzWhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTAwggGgMAsGCSqGSIb3DQEBCgOCAY8AMIIBigKCAYEAyQQD\n" + "sSFXjTnXQaa57GLvSU6C5p4U6xQL7eE+Eia7A4lNMyRnkhYtGADCD5052gijhdXe\n" + "L8R5D59sQeCti4JGkeYF4uwKb7uyGgQGyaDD9sdwJBkZoZ5mcyPJq8uG/93CFf7o\n" + "ygo0rnFktHE+Hs4EUbJAdf/kxFij8PxJJFSeyz9GrmZgkUMFavJZcDsgclfp0xkE\n" + "fA9NkoERDalxutViqjS9OtcqdEfl2Wj1/kVXYb9uYHMM4lCeGppz8s5c4CzXbz0F\n" + "E1OXGGPpvw9IPPesMrBByD8Oijx/5aadBgTfhQ6Qd07bmJahn0S+jhZXoUru5tT2\n" + "TvrAhJ/6lDJfFZ3rygT5P8vpC+J5O82zVY2sAMq5cfUb33FteXLDy2/RqSktRhHm\n" + "/8bnQqPtw/2QeL6oUYPN21uWrLmvIc5pJVdz6yW2vhWkhxEVCIrh0zPGvuUpYQEN\n" + "MN5ePj7rfzEsvRsKLZo+DbmKMa0AFLNBzwmz+0Ei7H8NqQjw4wlrbcjmi5GzAgMB\n" + "AAGjQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4E\n" + "FgQU877t3BygfVZ2TIFitsZClUs6rX0wPQYJKoZIhvcNAQEKMDCgDTALBglghkgB\n" + "ZQMEAgGhGjAYBgkqhkiG9w0BAQgwCwYJYIZIAWUDBAIBogMCASADggGBAJSw9jj3\n" + "jbO31cViLd2k82vxE5o/SBgxru+HZZDvsBmSxNetSFGSymn+um7g8T/t8fEjxDvV\n" + "jXDKVnHoj+xuYR3tS+qV58MZ5F9oFrcKiw5QWLicT/DTG/mKwEsKysdibbbtXcQQ\n" + "zIbVHJI5IH/6e9qw+U4f5J7MzFYWjzo5TavvOo2ZL+kzFuxC61X81a+0XQjP4bgQ\n" + "r5CFauTvay6zOevvafOBlMQ3V77UouFshbIdTXJHRAcdKUGrTwONq4tDoOVSa5E1\n" + "AjGZop71IXNncNAcyx9fivxrYfFAozKum4GH1S0lywD+wDCSbC6nkfaB/C12F/gR\n" + "tEb7+DwZbiYroERhE/zOMUKcGFw0+3Jo4jyAOicmSetknhvmhIoNycaR9KfA5xB+\n" + "Avw4VnNI5M8TVmjgyu0rq52gH21d1mc3alhOh5syNtLdBq62ookxkSwhaebXgpsJ\n" + "/0oI+7Bmh6f8ySWcjUFLW+3bPKhuRh6WmkDHQZbECOkp9N3BPBQsdbfqTA==\n" + "-----END CERTIFICATE-----\n" +}; + +static const char *rsa_pss_invalid_chain_with_wrong_hash[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIEfzCCAregAwIBAgIMWXi1MgbpHZw/A0zTMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEgMA8xDTAL\n" + "BgNVBAMTBENBLTEwIBcNMTcwNzI2MTUyODUwWhgPOTk5OTEyMzEyMzU5NTlaMBMx\n" + "ETAPBgNVBAMTCHNlcnZlci0yMIIBoDALBgkqhkiG9w0BAQoDggGPADCCAYoCggGB\n" + "AM0Hb+o5YO1we4mN3Z9X11+6i4EwmSYoXkaq4/UAJweoyi6xyDw1wA23jJUHTxpF\n" + "9dLv/30Qo3bo7fdakJt4fV8tGBlNrm2nPkE9LmQl+dIjtBdmNO/X2qHHVt0WyxqH\n" + "XEejb6oDNPtF30/dfe1qeuIGAB5cSdmm3Zrkk5/JmfNBuALqHuKol8hympvxXWMs\n" + "WjCnCd3QGLGIx4nxx1tYKoDVM5xgVq2QLa5h0o5eMb4BYI8KY4dXGzYr6quJtF3g\n" + "Uw0fX9fo+OclSqx+2TaCnJfWhKFHbS++s/RvOBdDaGJZJcMIs9Kmb1HI4Dmb9ZDL\n" + "g7B9kraw/hPOgKzGpbCgwJYhxC93L7fNrO7X99b2wIyM5+/Q9at6qa3hm0DEcYTC\n" + "MZfyLNBfJSQOQBV6NZGwRv7KGqaZRvsiWU5za+dL5wKIwDIxaNX4HIyFoatzLf9R\n" + "skjyogRE7bXBVk+/UGS3aof2RWl39sOCVbqfauRtFXVKoAmht2kMne+nSrkYi5vR\n" + "jwIDAQABo3cwdTAMBgNVHRMBAf8EAjAAMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDAP\n" + "BgNVHQ8BAf8EBQMDB4AAMB0GA1UdDgQWBBRJUF1FDf/yxGw2btyh9Ps4cNgZWjAf\n" + "BgNVHSMEGDAWgBRuLwzcgNymMpZ87aXHIYLe25ggYTA9BgkqhkiG9w0BAQowMKAN\n" + "MAsGCWCGSAFlAwQCAaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiAwIBIAOC\n" + "AYEAAowi/Rj1T32pah3Zwo7FVeADn6lKf2SZwAdfMLN2xOYlSgNz+F9Z9Mz4x123\n" + "GRIoYRmTun2BnwtBVPxtwqaeD88NaftXM2fPyA+q/gYDwmiMzLf3cDC98ngj38xa\n" + "9YS9k3Mc5CsV5lJ1yiUmpdVwP/dzk4mcvL5+3rb5E0lyv8eEx0r3+rPXnoICkSAO\n" + "uD0ZYg8AXdsRqToQwutwP02azKEaecjklEkSG81kxlEw6xALkm2qgn7ZogfRYjQK\n" + "TS5UZldErnWOyw85cTCUYpNs+uy1Lpug91CEI1uXK6pBpb+5HsenKlg6UwBgfG12\n" + "EQnqbFzOZ1fQ5OgFofLkh/vvNByMmanltqKCV/pz824zi7Va6JoAz9EF35U674gX\n" + "NB8wf7zMF6mEPAsUR8RIgvkjFTwOxrIfggx6LVs+b1eYTQFzJJF4/zQg17NIlYu6\n" + "4iOev2OAU65F5P0FJY3IWPWhIl/1ki3drgo/CjZtjYhcZf6EZzS5lY5VxlE0KlwU\n" + "y8mX\n" + "-----END CERTIFICATE-----\n", + "-----BEGIN CERTIFICATE-----\n" + "MIIEaDCCAqCgAwIBAgIMWXi1MTL9A06S6xisMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIDAgEwMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI2MTUyODQ5WhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTEwggGgMAsGCSqGSIb3DQEBCgOCAY8AMIIBigKCAYEApvFV\n" + "pkvVLfaMySlvBx/erBif/1eW6E2K1i5mBE6CUf22rswc9obFxzJvEE2+HSgtvXzY\n" + "2q7e+OV9HAi3isQFs3aU1mJGhdweSeill+QiX2KH/MlfxVlZiGAztoswKwNn4ei0\n" + "Q+B4ixBqRRptpGhvdIMuo4+MxOGqMB4ylhCmW9vp4bjDfbvfatknVLlRxFiNY3vn\n" + "egD2WbJem4xZfhxWLvJXyvxw1APpDjz9ba9QKNBsmRCWwmXfONJu1M/IMlekqCS5\n" + "qT+KT9/5E4sMAsBpPAC7St2BBre+OpjpKbhMS6+QJ0td78Rw+ao1yDJKoErXIF5a\n" + "UuK1uf1nX2CJpBXAdePBP3GWY8yicVYDJojRk5y52GSYslGGKQFw+Sa3M3M038dB\n" + "0ItPUVPc6KqgMH/WoYNuAosxObSPMXWKTMCLLG4+Ay8kf2LQeNqExFBof5VMOvjx\n" + "pyf0JsRWxuibFyIsKBPJOQfqavj+yDYUpHjH3KgQWxwFS2zHvh9hSFdVmudPAgMB\n" + "AAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcEADAdBgNVHQ4E\n" + "FgQUbi8M3IDcpjKWfO2lxyGC3tuYIGEwHwYDVR0jBBgwFoAUC5eGQfaYKQYzk7b9\n" + "ZjLg2BcNVT0wPQYJKoZIhvcNAQEKMDCgDTALBglghkgBZQMEAgGhGjAYBgkqhkiG\n" + "9w0BAQgwCwYJYIZIAWUDBAIBogMCATADggGBACCc/elZRc5w7KFiDtrfiOAQ3m/M\n" + "uvBabVUyWSdHVq/48n84APdKqUZdi/9qc9vXoV6hu6tE3HEv5oppzHoRUNtuO0WG\n" + "uPiuA6diyvwO5JZrnAzCevKB+5j5bdfdXh62ScgTGsXyIOBTbW2R4gQkMe+yo3Xb\n" + "U03hf0PDzpmJL9DcekjNOFphvYyh25jW2sWdlym8pj/Q58Zhx8uDfsMV2yAFzNlX\n" + "a4K6rXeS1V7zw6qHon0/sZgSc8nSHUNYzXk9BoteZUT3n9T9mDB3tR0fHJx4VlOq\n" + "EywY0pPylGHfDcKEAJoWR2YuGsLrHS+ZEPwiqkbjEn4O8CijT0dVYC5M8poUwYmC\n" + "kZDIKeiHMPoUjhRNGQ+W2sXvbsseFDm68R+fqbxP+GHbqThdCaxtqzCK/BNUYF0d\n" + "e2dvHPdydbqyL9EhfBwvR7blIfvkn6UF0OK7rs+ch+OZUW71+SI70mETVp8N3JXr\n" + "wCwxtVkyM+5nB+iTDFs7uYw05+QLg7cSnZL5zw==\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIEeTCCArGgAwIBAgIMWXi1MSBUNuk9dyXbMD0GCSqGSIb3DQEBCjAwoA0wCwYJ\n" + "YIZIAWUDBAICoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAqIDAgEwMA8xDTAL\n" + "BgNVBAMTBENBLTAwIBcNMTcwNzI2MTUyODQ5WhgPOTk5OTEyMzEyMzU5NTlaMA8x\n" + "DTALBgNVBAMTBENBLTAwggHSMD0GCSqGSIb3DQEBCjAwoA0wCwYJYIZIAWUDBAIC\n" + "oRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAqIDAgEwA4IBjwAwggGKAoIBgQCg\n" + "V/fvWuWb1hyqlrWXKgz8L/xyi1j6/2Mc0EOxB1tSDilrYB7EjnR+WIsXmLc5qi4u\n" + "4/30ddw1JJLPSE/IuzbxRBKMOdLAodycx/XzYCfZbCEbeBJ3F0Avoc2rPdwd4Jxh\n" + "aCI3aw3KSopPgTpihJXqfmeo9bjwjuppaewdIoM007XoV6TGRfSMJL4KZK5gvW5G\n" + "5hrHF/nPCI3nNFH+ocFn0yHRRmbq4IxIfkHku5AxX4PW18c7bJ7AA37o61YzDXgf\n" + "jY22rLVSEVeAfQL8HmPY/yLTY5r6stJKWQDRrXGPxtLWwtbkGx6AGAry+o/0eGo9\n" + "o3X+h3YYL2lX8jhCG75p0ZKIRoRAVRD67WM5HmGcv9m5YbfHwLZ+SSqAfclS2UL9\n" + "Czrss5lAqEcatoxSC+L3iee6kVDk7OPtv6KLYA1OoAJIgWapWcJpBNgo4PU8Ps+e\n" + "yN3BPjBZu1O1j8RnIeprLSlP9X4I4i2WPWAWHOi2S20pHdvC6/+qZqSqVJn65QUC\n" + "AwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0GA1Ud\n" + "DgQWBBQLl4ZB9pgpBjOTtv1mMuDYFw1VPTA9BgkqhkiG9w0BAQowMKANMAsGCWCG\n" + "SAFlAwQCAqEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgKiAwIBMAOCAYEAD9JR\n" + "Wjsn3Vb/eiLqMmy1YZyCBBUePifHFOjK9edxzcef2+eds5fbfZKE9HwebFydbaCl\n" + "2vfylBRhHiPx35pk2m7dwt07WAjVyLyoF/XWAbJPhzj9nEUxP15uZz0L2YR4PFK7\n" + "w6PFSgAbnqcNW+Eva95t0sSaClMfOQUZizwJUXJHaF1+NML//oG/zar07QSbIC4V\n" + "WU00anUDHxikhj7FGndhquV3bAICW+LlFiVASK73wvhcWNjBQ/fIOHH61kl9XOGR\n" + "4t3/YgC4DnaRX2eFknQqTVKt5GTMRRLPVrSzcPQVMkHkA9q3qMRZ1OcJ4jeIF0Ur\n" + "PYhowVrqif6tb8jWe635nFBnaXiwtOAGBQfGTbbbT6z0Rm6t+QunKxDfb8CTwZvq\n" + "6VQGMBrYbu1xHowWVtP9c7WAVtIIbXn4pUWND3tq4kCxyr8EKOO+AxSxPqRKRHUa\n" + "OInT1o1n73r11Arm1dmlup5cJjJ4SrJoqxGemdNVrLYR6x8//2ZjiS/N93gC\n" + "-----END CERTIFICATE-----\n" +}; + static const char *unknown_critical_extension_on_endcert[] = { "-----BEGIN CERTIFICATE-----\n" "MIIENDCCApygAwIBAgIMWLRKXgVfpidUGiL3MA0GCSqGSIb3DQEBCwUAMA8xDTAL\n" @@ -2913,6 +3911,110 @@ static const char *tls_feat_superset[] = { NULL }; +#ifdef ENABLE_GOST +static const char *gost01[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIBfTCCASqgAwIBAgICASIwCgYGKoUDAgIDBQAwNzELMAkGA1UEBhMCUlUxKDAm\n" + "BgNVBAMMH0NBIGNlcnRpZmljYXRlIChQS0NTMTIgZXhhbXBsZSkwHhcNMTIwNjE0\n" + "MTkzMDE5WhcNMTcwNjE0MTkzMDE5WjA5MQswCQYDVQQGEwJSVTEqMCgGA1UEAwwh\n" + "VGVzdCBjZXJ0aWZpY2F0ZSAoUEtDUzEyIGV4YW1wbGUpMGMwHAYGKoUDAgITMBIG\n" + "ByqFAwICIwEGByqFAwICHgEDQwAEQHlSMCMAJZgoHUCIFmn+eqOgYlQy8h7SfjZ2\n" + "kMkJ4xTae8jtZYxHLq3P+qJeismsHdmqdqSBbOGGdOaJNNPbAZKjGjAYMAkGA1Ud\n" + "EwQCMAAwCwYDVR0PBAQDAgWgMAoGBiqFAwICAwUAA0EArslfUeqhW9eFkspn89+C\n" + "OQEJX6JoghiOjFYlky0XmaaDl3D6EcbID+B6cBEmcXF21xxIEeYJIAqGzOEnMXdT\n" + "cg==\n" + "-----END CERTIFICATE-----\n", + NULL, + "-----BEGIN CERTIFICATE-----\n" + "MIIBfTCCASqgAwIBAgIBADAKBgYqhQMCAgMFADA3MQswCQYDVQQGEwJSVTEoMCYG\n" + "A1UEAwwfQ0EgY2VydGlmaWNhdGUgKFBLQ1MxMiBleGFtcGxlKTAeFw0xMjA2MTQx\n" + "MzEyMzFaFw0xNzA2MTQxMzEyMzFaMDcxCzAJBgNVBAYTAlJVMSgwJgYDVQQDDB9D\n" + "QSBjZXJ0aWZpY2F0ZSAoUEtDUzEyIGV4YW1wbGUpMGMwHAYGKoUDAgITMBIGByqF\n" + "AwICIwEGByqFAwICHgEDQwAEQHxF7QOkGNDlnKWiBwdD80gToowegPcHR1Y1r2ZR\n" + "RQqB610f3uEWN/EikI7exYVRR0dmCyILLMmgRxX+KU4qmgejHTAbMAwGA1UdEwQF\n" + "MAMBAf8wCwYDVR0PBAQDAgEGMAoGBiqFAwICAwUAA0EAFnvKPRo2tQkI/iqu/CkP\n" + "YQJPW43KnRMqkmB/NnGOC5+wdivIA5yJaGbT2sQ1r+n6qyJnG32yV44DrSe7b2DV\n" + "OA==\n" + "-----END CERTIFICATE-----\n", + NULL +}; + +static const char *gost12_256[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIICYjCCAg+gAwIBAgIBATAKBggqhQMHAQEDAjBWMSkwJwYJKoZIhvcNAQkBFhpH\n" + "b3N0UjM0MTAtMjAxMkBleGFtcGxlLmNvbTEpMCcGA1UEAxMgR29zdFIzNDEwLTIw\n" + "MTIgKDI1NiBiaXQpIGV4YW1wbGUwHhcNMTMxMTA1MTQwMjM3WhcNMzAxMTAxMTQw\n" + "MjM3WjBWMSkwJwYJKoZIhvcNAQkBFhpHb3N0UjM0MTAtMjAxMkBleGFtcGxlLmNv\n" + "bTEpMCcGA1UEAxMgR29zdFIzNDEwLTIwMTIgKDI1NiBiaXQpIGV4YW1wbGUwZjAf\n" + "BggqhQMHAQEBATATBgcqhQMCAiQABggqhQMHAQECAgNDAARAut/Qw1MUq9KPqkdH\n" + "C2xAF3K7TugHfo9n525D2s5mFZdD5pwf90/i4vF0mFmr9nfRwMYP4o0Pg1mOn5Rl\n" + "aXNYraOBwDCBvTAdBgNVHQ4EFgQU1fIeN1HaPbw+XWUzbkJ+kHJUT0AwCwYDVR0P\n" + "BAQDAgHGMA8GA1UdEwQIMAYBAf8CAQEwfgYDVR0BBHcwdYAU1fIeN1HaPbw+XWUz\n" + "bkJ+kHJUT0ChWqRYMFYxKTAnBgkqhkiG9w0BCQEWGkdvc3RSMzQxMC0yMDEyQGV4\n" + "YW1wbGUuY29tMSkwJwYDVQQDEyBHb3N0UjM0MTAtMjAxMiAoMjU2IGJpdCkgZXhh\n" + "bXBsZYIBATAKBggqhQMHAQEDAgNBAF5bm4BbARR6hJLEoWJkOsYV3Hd7kXQQjz3C\n" + "dqQfmHrz6TI6Xojdh/t8ckODv/587NS5/6KsM77vc6Wh90NAT2s=\n" + "-----END CERTIFICATE-----\n", + NULL +}; + +static const char *gost12_512[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIC6DCCAlSgAwIBAgIBATAKBggqhQMHAQEDAzBWMSkwJwYJKoZIhvcNAQkBFhpH\n" + "b3N0UjM0MTAtMjAxMkBleGFtcGxlLmNvbTEpMCcGA1UEAxMgR29zdFIzNDEwLTIw\n" + "MTIgKDUxMiBiaXQpIGV4YW1wbGUwHhcNMTMxMDA0MDczNjA0WhcNMzAxMDAxMDcz\n" + "NjA0WjBWMSkwJwYJKoZIhvcNAQkBFhpHb3N0UjM0MTAtMjAxMkBleGFtcGxlLmNv\n" + "bTEpMCcGA1UEAxMgR29zdFIzNDEwLTIwMTIgKDUxMiBiaXQpIGV4YW1wbGUwgaow\n" + "IQYIKoUDBwEBAQIwFQYJKoUDBwECAQICBggqhQMHAQECAwOBhAAEgYATGQ9VCiM5\n" + "FRGCQ8MEz2F1dANqhaEuywa8CbxOnTvaGJpFQVXQwkwvLFAKh7hk542vOEtxpKtT\n" + "CXfGf84nRhMH/Q9bZeAc2eO/yhxrsQhTBufa1Fuou2oe/jUOaG6RAtUUvRzhNTpp\n" + "RGGl1+EIY2vzzUua9j9Ol/gAoy/LNKQIfqOBwDCBvTAdBgNVHQ4EFgQUPcbTRXJZ\n" + "nHtjj+eBP7b5lcTMekIwCwYDVR0PBAQDAgHGMA8GA1UdEwQIMAYBAf8CAQEwfgYD\n" + "VR0BBHcwdYAUPcbTRXJZnHtjj+eBP7b5lcTMekKhWqRYMFYxKTAnBgkqhkiG9w0B\n" + "CQEWGkdvc3RSMzQxMC0yMDEyQGV4YW1wbGUuY29tMSkwJwYDVQQDEyBHb3N0UjM0\n" + "MTAtMjAxMiAoNTEyIGJpdCkgZXhhbXBsZYIBATAKBggqhQMHAQEDAwOBgQBObS7o\n" + "ppPTXzHyVR1DtPa8b57nudJzI4czhsfeX5HDntOq45t9B/qSs8dC6eGxbhHZ9zCO\n" + "SFtxWYdmg0au8XI9Xb8vTC1qdwWID7FFjMWDNQZb6lYh/J+8F2xKylvB5nIlRZqO\n" + "o3eUNFkNyHJwQCk2WoOlO16zwGk2tdKH4KmD5w==\n" + "-----END CERTIFICATE-----\n", + NULL +}; +#endif + +static const char *rsa_512[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIBTjCB+aADAgECAhQcc65I8jSxWRjcS1czw4MRLIc8qDANBgkqhkiG9w0BAQsF\n" + "ADAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwHhcNMTkxMjE1MDI1NTU4WhcNMjkxMjEy\n" + "MDI1NTU4WjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwXDANBgkqhkiG9w0BAQEFAANL\n" + "ADBIAkEAwZFO/Vz94lR3/TKz76qRCV2skqthX7PB6YxeLHH3ifWSYR2qCYTBikaA\n" + "Sm6PGDvAliviIjGjKTkdDdqZX2S94QIDAQABoyMwITAJBgNVHRMEAjAAMBQGA1Ud\n" + "EQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAANBAHslvfVxod5p+Gt7l4LV\n" + "M2HBxOt4YM8mRCtyNSmJEGAe+aIzXaiSiRnVkVvjQvdxacu2D4yP52BUo1vzNnCq\n" + "2UI=\n" + "-----END CERTIFICATE-----\n", + NULL +}; + +static const char *ed448[] = { + "-----BEGIN CERTIFICATE-----\n" + "MIIBhDCCAQSgAwIBAgIUIWKQV5hisum31Z2Fw+PeZ80wqnkwBQYDK2VxMBkxFzAV\n" + "BgNVBAMTDkdudVRMUyB0ZXN0IENBMCAXDTIwMDMxNjA5MTY1M1oYDzk5OTkxMjMx\n" + "MjM1OTU5WjAZMRcwFQYDVQQDEw5HbnVUTFMgdGVzdCBDQTBDMAUGAytlcQM6AFsM\n" + "fQUL5TonNaVrBB7H4UtwnVlolZatMXceHZiWnzMKXOZXlIabi0nTGkvSFu9ed6JJ\n" + "L7EWarjRAKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwQAMB0G\n" + "A1UdDgQWBBRMwtFQ9T9Ndw63UP2QGAuIFoYb6TAFBgMrZXEDcwB8hbYLw7KMlb3a\n" + "Q2YAXiugWt2WcAMtvKgqzjXzUt2jilaDA72d3MCAWQQsMmQfRNSthDIao5CksoDk\n" + "Xc8qFzckmdBiF7W+UNT3OMisE9yIxF4iA1Sxsji3C0WDUq2jen5Uv9E99H+r47L8\n" + "U955wKxWJAA=\n" + "-----END CERTIFICATE-----\n", + NULL +}; + +#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-variable" +#endif + static struct { const char *name; @@ -2922,6 +4024,7 @@ static struct unsigned int expected_verify_result; const char *purpose; time_t expected_time; + unsigned notfips; } chains[] = { { "CVE-2014-0092", cve_2014_0092_check, &cve_2014_0092_check[1], @@ -3051,6 +4154,37 @@ static struct { "unknown crit extension on intermediate - success", unknown_critical_extension_on_intermediate, &unknown_critical_extension_on_intermediate[3], GNUTLS_VERIFY_IGNORE_UNKNOWN_CRIT_EXTENSIONS, 0, GNUTLS_KP_TLS_WWW_SERVER, 1488365541}, { "unknown crit extension on endcert - fail", unknown_critical_extension_on_endcert, &unknown_critical_extension_on_endcert[3], 0, GNUTLS_CERT_INVALID | GNUTLS_CERT_UNKNOWN_CRIT_EXTENSIONS, GNUTLS_KP_TLS_WWW_SERVER, 1488365541}, { "unknown crit extension on endcert - success", unknown_critical_extension_on_endcert, &unknown_critical_extension_on_endcert[3], GNUTLS_VERIFY_IGNORE_UNKNOWN_CRIT_EXTENSIONS, 0, GNUTLS_KP_TLS_WWW_SERVER, 1488365541}, + { "rsa pss: invalid self sig - fail", rsa_pss_invalid_self_sig, &rsa_pss_invalid_self_sig[0], GNUTLS_VERIFY_DO_NOT_ALLOW_SAME, GNUTLS_CERT_INVALID | GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE, 0, 1501138253}, + { "rsa pss: invalid chain with pkcs#1 1.5 sig - fail", rsa_pss_invalid_chain_with_pkcs1_sig, &rsa_pss_invalid_chain_with_pkcs1_sig[2], 0, GNUTLS_CERT_INVALID | GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE, 0, 1501138253}, + { "rsa pss: invalid chain with wrong hash (sha384-sha256) - fail", rsa_pss_invalid_chain_with_wrong_hash, &rsa_pss_invalid_chain_with_wrong_hash[3], 0, GNUTLS_CERT_INVALID | GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE, 0, 1501138253}, + { "rsa pss: smaller salt in sig than spki - fail", rsa_pss_chain_smaller_salt_in_sig_fail, &rsa_pss_chain_smaller_salt_in_sig_fail[3], 0, GNUTLS_CERT_INVALID | GNUTLS_CERT_SIGNER_CONSTRAINTS_FAILURE, 0, 1550005473}, + { "rsa pss: chain with sha1 hash - fail", rsa_pss_chain_with_sha1_fail, &rsa_pss_chain_with_sha1_fail[3], 0, GNUTLS_CERT_INVALID, 0, 1501159136}, + { "rsa pss: chain with different mgf hash - fail", rsa_pss_chain_with_diff_mgf_oid_fail, &rsa_pss_chain_with_diff_mgf_oid_fail[3], 0, GNUTLS_CERT_INVALID, 0, 1501159136}, + { "rsa pss: chain with sha256 - ok", rsa_pss_chain_sha256_ok, &rsa_pss_chain_sha256_ok[3], 0, 0, 0, 1501138253}, + { "rsa pss: chain with sha384 - ok", rsa_pss_chain_sha384_ok, &rsa_pss_chain_sha384_ok[3], 0, 0, 0, 1501138253}, + { "rsa pss: chain with sha512 - ok", rsa_pss_chain_sha512_ok, &rsa_pss_chain_sha512_ok[3], 0, 0, 0, 1501138253}, + { "rsa pss: chain with increasing salt size - ok", rsa_pss_chain_increasing_salt_size_ok, &rsa_pss_chain_increasing_salt_size_ok[3], 0, 0, 0, 1501159136}, + { "rsa pss: chain with alternating signatures - ok", rsa_pss_chain_pkcs11_pss_pkcs1_ok, &rsa_pss_chain_pkcs11_pss_pkcs1_ok[3], 0, 0, 0, 1501159136}, + { "rsa pss: chain with changing hashes - ok", rsa_pss_chain_sha512_sha384_sha256_ok, &rsa_pss_chain_sha512_sha384_sha256_ok[3], 0, 0, 0, 1501159136}, + { "no subject id: chain with missing subject id, but valid auth id - ok", chain_with_no_subject_id_in_ca_ok, &chain_with_no_subject_id_in_ca_ok[4], 0, 0, 0, 1537518468}, +#ifdef ENABLE_GOST + { "gost 34.10-01 - ok", gost01, &gost01[2], 0, 0, 0, 1466612070, 1}, + { "gost 34.10-01 - not ok (due to profile)", gost01, &gost01[2], GNUTLS_PROFILE_TO_VFLAGS(GNUTLS_PROFILE_ULTRA), + GNUTLS_CERT_INSECURE_ALGORITHM | GNUTLS_CERT_INVALID, NULL, 1466612070, 1}, + { "gost 34.10-12-256 - ok", gost12_256, &gost12_256[0], 0, 0, 0, 1466612070, 1}, + { "gost 34.10-12-512 - ok", gost12_512, &gost12_512[0], 0, 0, 0, 1466612070, 1}, +#endif + { "rsa-512 - not ok (due to profile)", rsa_512, &rsa_512[0], GNUTLS_PROFILE_TO_VFLAGS(GNUTLS_PROFILE_MEDIUM), + GNUTLS_CERT_INSECURE_ALGORITHM | GNUTLS_CERT_INVALID, NULL, 1576759855, 1}, + { "ed448 - ok", ed448, &ed448[0], GNUTLS_PROFILE_TO_VFLAGS(GNUTLS_PROFILE_ULTRA), + 0, NULL, 1584352960, 1}, { NULL, NULL, NULL, 0, 0} }; + +#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# pragma GCC diagnostic pop +#endif + /* *INDENT-ON* */ + +#endif /* GNUTLS_TESTS_TEST_CHAINS_H */ diff --git a/tests/suite/pkcs11-certs/ca-tmpl b/tests/testpkcs11-certs/ca-tmpl similarity index 100% rename from tests/suite/pkcs11-certs/ca-tmpl rename to tests/testpkcs11-certs/ca-tmpl diff --git a/tests/suite/pkcs11-certs/ca.crt b/tests/testpkcs11-certs/ca.crt similarity index 100% rename from tests/suite/pkcs11-certs/ca.crt rename to tests/testpkcs11-certs/ca.crt diff --git a/tests/suite/pkcs11-certs/ca.key b/tests/testpkcs11-certs/ca.key similarity index 100% rename from tests/suite/pkcs11-certs/ca.key rename to tests/testpkcs11-certs/ca.key diff --git a/tests/suite/pkcs11-certs/client-tmpl b/tests/testpkcs11-certs/client-tmpl similarity index 100% rename from tests/suite/pkcs11-certs/client-tmpl rename to tests/testpkcs11-certs/client-tmpl diff --git a/tests/suite/pkcs11-certs/client.crt b/tests/testpkcs11-certs/client.crt similarity index 100% rename from tests/suite/pkcs11-certs/client.crt rename to tests/testpkcs11-certs/client.crt diff --git a/tests/suite/pkcs11-certs/client.key b/tests/testpkcs11-certs/client.key similarity index 100% rename from tests/suite/pkcs11-certs/client.key rename to tests/testpkcs11-certs/client.key diff --git a/tests/suite/pkcs11-certs/server-tmpl b/tests/testpkcs11-certs/server-tmpl similarity index 100% rename from tests/suite/pkcs11-certs/server-tmpl rename to tests/testpkcs11-certs/server-tmpl diff --git a/tests/suite/pkcs11-certs/server.crt b/tests/testpkcs11-certs/server.crt similarity index 100% rename from tests/suite/pkcs11-certs/server.crt rename to tests/testpkcs11-certs/server.crt diff --git a/tests/suite/pkcs11-certs/server.key b/tests/testpkcs11-certs/server.key similarity index 100% rename from tests/suite/pkcs11-certs/server.key rename to tests/testpkcs11-certs/server.key diff --git a/tests/suite/testpkcs11.pkcs15 b/tests/testpkcs11.pkcs15 similarity index 100% rename from tests/suite/testpkcs11.pkcs15 rename to tests/testpkcs11.pkcs15 diff --git a/tests/suite/testpkcs11.sc-hsm b/tests/testpkcs11.sc-hsm similarity index 100% rename from tests/suite/testpkcs11.sc-hsm rename to tests/testpkcs11.sc-hsm diff --git a/tests/testpkcs11.sh b/tests/testpkcs11.sh new file mode 100755 index 0000000000..9458af2381 --- /dev/null +++ b/tests/testpkcs11.sh @@ -0,0 +1,1181 @@ +#!/bin/sh + +# Copyright (C) 2013 Nikos Mavrogiannopoulos +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +P11TOOL="${P11TOOL:-../src/p11tool${EXEEXT}}" +CERTTOOL="${CERTTOOL:-../src/certtool${EXEEXT}}" +DIFF="${DIFF:-diff -b -B}" +SERV="${SERV:-../src/gnutls-serv${EXEEXT}}" +CLI="${CLI:-../src/gnutls-cli${EXEEXT}}" +RETCODE=0 + +if test "${GNUTLS_FORCE_FIPS_MODE}" = 1;then + echo "Cannot run in FIPS140-2 mode" + exit 77 +fi + +if ! test -x "${P11TOOL}"; then + exit 77 +fi + +if ! test -x "${CERTTOOL}"; then + exit 77 +fi + +if ! test -x "${SERV}"; then + exit 77 +fi + +if ! test -x "${CLI}"; then + exit 77 +fi + +if ! test -z "${VALGRIND}"; then + VALGRIND="${LIBTOOL:-libtool} --mode=execute valgrind --leak-check=full" +fi + +TMPFILE="testpkcs11.$$.tmp" +LOGFILE="testpkcs11.debug.log" +CERTTOOL_PARAM="--stdout-info" + +if test "${WINDIR}" != ""; then + exit 77 +fi + +ASAN_OPTIONS="detect_leaks=0" +export ASAN_OPTIONS + +have_ed25519=0 + +P11TOOL="${VALGRIND} ${P11TOOL} --batch" +SERV="${SERV} -q" + +. ${srcdir}/scripts/common.sh + +rm -f "${LOGFILE}" + +exit_error () { + echo "check ${LOGFILE} for additional debugging information" + echo "" + echo "" + tail "${LOGFILE}" + exit 1 +} + +# $1: token +# $2: PIN +# $3: filename +# ${srcdir}/testpkcs11-certs/client.key +write_privkey () { + export GNUTLS_PIN="$2" + filename="$3" + token="$1" + + echo -n "* Writing a client private key... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label gnutls-client2 --load-privkey "${filename}" "${token}" >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit_error + fi + + echo -n "* Checking whether object was marked private... " + ${P11TOOL} ${ADDITIONAL_PARAM} --list-privkeys "${token};object=gnutls-client2" 2>/dev/null | grep 'Label\:' >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo "private object was public" + exit_error + fi + echo ok + + echo -n "* Checking whether object was marked sensitive... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-privkeys "${token};object=gnutls-client2" | grep "CKA_SENSITIVE" >/dev/null 2>&1 + if test $? != 0; then + echo "private object was not sensitive" + exit_error + fi + echo ok +} + +# $1: token +# $2: PIN +# $3: filename +write_serv_privkey () { + export GNUTLS_PIN="$2" + filename="$3" + token="$1" + + echo -n "* Writing the server private key... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label serv-key --load-privkey "${filename}" "${token}" >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit_error + fi + +} + +# $1: token +# $2: PIN +# $3: filename +write_serv_pubkey () { + export GNUTLS_PIN="$2" + filename="$3" + token="$1" + + echo -n "* Writing the server public key... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label serv-pubkey --load-pubkey "${filename}" "${token}" >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit_error + fi + + #verify it being written + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-all "${token};object=serv-pubkey;type=public" >>"${LOGFILE}" 2>&1 + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-all "${token};object=serv-pubkey;type=public"|grep "Public key" >/dev/null 2>&1 + if test $? != 0;then + echo "Cannot verify the existence of the written pubkey" + exit_error + fi +} + +# $1: token +# $2: PIN +# $3: filename +write_serv_cert () { + export GNUTLS_PIN="$2" + filename="$3" + token="$1" + + echo -n "* Writing the server certificate... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --no-mark-private --label serv-cert --load-certificate "${filename}" "${token}" >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit_error + fi + +} + +# $1: token +# $2: PIN +test_delete_cert () { + export GNUTLS_PIN="$2" + filename="$3" + token="$1" + + echo -n "* Deleting the server certificate... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --delete "${token};object=serv-cert;object-type=cert" >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit_error + fi +} + +# $1: token +# $2: PIN +# $3: bits +generate_rsa_privkey () { + export GNUTLS_PIN="$2" + token="$1" + bits="$3" + + echo -n "* Generating RSA private key ("${bits}")... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --id 000102030405 --label gnutls-client --generate-rsa --bits "${bits}" "${token}" --outfile tmp-client.pub >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit 1 + fi + + echo -n "* Checking whether generated private key was marked private... " + ${P11TOOL} ${ADDITIONAL_PARAM} --list-privkeys "${token};object=gnutls-client" 2>/dev/null | grep 'Label\:' >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo "private object was public" + exit_error + fi + echo ok + + echo -n "* Checking whether private key was marked sensitive... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-privkeys "${token};object=gnutls-client" | grep "CKA_SENSITIVE" >/dev/null 2>&1 + if test $? != 0; then + echo "private object was not sensitive" + exit_error + fi + echo ok +} + +# $1: token +# $2: PIN +# $3: bits +generate_temp_rsa_privkey () { + export GNUTLS_PIN="$2" + token="$1" + bits="$3" + + echo -n "* Generating RSA private key ("${bits}")... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --label temp-rsa-"${bits}" --generate-rsa --bits "${bits}" "${token}" --outfile tmp-client.pub >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit 1 + fi + +# if test ${RETCODE} = 0; then +# echo -n "* Testing private key flags... " +# ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-keys "${token};object=gnutls-client2;object-type=private" >tmp-client-2.pub 2>>"${LOGFILE}" +# if test $? != 0; then +# echo failed +# exit_error +# fi +# +# grep CKA_WRAP tmp-client-2.pub >>"${LOGFILE}" 2>&1 +# if test $? != 0; then +# echo "failed (no CKA_WRAP)" +# exit_error +# else +# echo ok +# fi +# fi +} + +generate_temp_dsa_privkey () { + export GNUTLS_PIN="$2" + token="$1" + bits="$3" + + echo -n "* Generating DSA private key ("${bits}")... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --label temp-dsa-"${bits}" --generate-dsa --bits "${bits}" "${token}" --outfile tmp-client.pub >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit 1 + fi +} + +generate_temp_ed25519_privkey () { + export GNUTLS_PIN="$2" + token="$1" + bits="$3" + + echo -n "* Generating ed25519 private key ("${bits}")... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login -d 3 --label temp-ed25519 --generate-privkey ed25519 "${token}" --outfile tmp-client.pub >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit 1 + fi +} + +# $1: token +# $2: PIN +delete_temp_privkey () { + export GNUTLS_PIN="$2" + token="$1" + type="$3" + + test "${RETCODE}" = "0" || return + + echo -n "* Deleting private key... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --delete "${token};object=temp-${type};object-type=private" >>"${LOGFILE}" 2>&1 + + if test $? != 0; then + echo failed + RETCODE=1 + return + fi + + RETCODE=0 + echo ok +} + +# $1: token +# $2: PIN +export_pubkey_of_privkey () { + export GNUTLS_PIN="$2" + token="$1" + + echo -n "* Exporting public key of generated private key... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --export-pubkey "${token};object=gnutls-client;object-type=private" --outfile tmp-client-2.pub >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit 1 + fi + + ${DIFF} tmp-client.pub tmp-client-2.pub + if test $? != 0; then + echo keys differ + exit 1 + fi + + echo ok +} + +# $1: token +# $2: SO PIN +list_pubkey_as_so () { + export GNUTLS_SO_PIN="$2" + token="$1" + + echo -n "* Exporting public key as SO... " + ${P11TOOL} ${ADDITIONAL_PARAM} --so-login --list-all "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit 1 + fi + + echo ok +} + +# $1: token +# $2: PIN +list_privkey_without_pin_env () { + token="$1" + pin="$2" + + echo -n "* List private key without GNUTLS_PIN... " + unset GNUTLS_PIN + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-all-privkeys "${token}?pin-value=${pin}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit 1 + fi + + echo ok +} + +# $1: token +# $2: PIN +change_id_of_privkey () { + export GNUTLS_PIN="$2" + token="$1" + + echo -n "* Change the CKA_ID of generated private key... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --set-id "01a1b103" "${token};object=gnutls-client;id=%00%01%02%03%04%05;object-type=private" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-privkeys "${token};object=gnutls-client;object-type=private;id=%01%a1%b1%03" 2>&1 | grep 'ID: 01:a1:b1:03' >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "ID didn't change" + exit_error + fi + + echo ok +} + +# $1: token +# $2: PIN +change_label_of_privkey () { + export GNUTLS_PIN="$2" + token="$1" + + echo -n "* Change the CKA_LABEL of generated private key... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --set-label "new-label" "${token};object=gnutls-client;object-type=private" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-privkeys "${token};object=new-label;object-type=private" 2>&1 |grep 'Label: new-label' >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "label didn't change" + exit_error + fi + + ${P11TOOL} ${ADDITIONAL_PARAM} --login --set-label "gnutls-client" "${token};object=new-label;object-type=private" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + + echo ok +} + +# $1: token +# $2: PIN +# $3: bits +generate_temp_ecc_privkey () { + export GNUTLS_PIN="$2" + token="$1" + bits="$3" + + echo -n "* Generating ECC private key (${bits})... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --label "temp-ecc-${bits}" --generate-ecc --bits "${bits}" "${token}" --outfile tmp-client.pub >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit 1 + fi +} + +# $1: token +# $2: PIN +# $3: bits +# The same as generate_temp_ecc_privkey but no explicit login is performed. +# p11tool should detect that login is required for the operation. +generate_temp_ecc_privkey_no_login () { + export GNUTLS_PIN="$2" + token="$1" + bits="$3" + + echo -n "* Generating ECC private key without --login (${bits})... " + ${P11TOOL} ${ADDITIONAL_PARAM} --label "temp-ecc-no-${bits}" --generate-ecc --bits "${bits}" "${token}" --outfile tmp-client.pub >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit 1 + fi +} + +# $1: name +# $2: label prefix +# $3: generate option +# $4: token +# $5: PIN +# $6: bits +import_privkey () { + export GNUTLS_PIN="$5" + name="$1" + prefix="$2" + gen_option="$3" + token="$4" + bits="$6" + + outfile="tmp-${prefix}-${bits}.pem" + + echo -n "* Importing ${name} private key (${bits})... " + + "${CERTTOOL}" ${CERTTOOL_PARAM} --generate-privkey "${gen_option}" --pkcs8 --password= --outfile "${outfile}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit 1 + fi + + ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label "${prefix}-${bits}" --load-privkey "${outfile}" "${token}" >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit 1 + fi +} + +import_temp_rsa_privkey () { + import_privkey RSA temp-rsa --rsa $@ +} + +import_temp_ecc_privkey () { + import_privkey ECC temp-ecc --ecc $@ +} + +import_temp_ed25519_privkey () { + import_privkey ed25519 temp-ed25519 --key-type ed25519 $@ +} + +import_temp_dsa_privkey () { + import_privkey DSA temp-dsa --dsa $@ +} + +# $1: token +# $2: PIN +# $3: cakey: ${srcdir}/testpkcs11-certs/ca.key +# $4: cacert: ${srcdir}/testpkcs11-certs/ca.crt +# +# Tests writing a certificate which corresponds to the given key, +# as well as the CA certificate, and tries to export them. +write_certificate_test () { + export GNUTLS_PIN="$2" + token="$1" + cakey="$3" + cacert="$4" + pubkey="$5" + + echo -n "* Generating client certificate... " + "${CERTTOOL}" ${CERTTOOL_PARAM} ${ADDITIONAL_PARAM} --generate-certificate --load-ca-privkey "${cakey}" --load-ca-certificate "${cacert}" \ + --template ${srcdir}/testpkcs11-certs/client-tmpl --load-privkey "${token};object=gnutls-client;object-type=private" \ + --load-pubkey "$pubkey" --outfile tmp-client.crt >>"${LOGFILE}" 2>&1 + + if test $? = 0; then + echo ok + else + echo failed + exit_error + fi + + echo -n "* Writing client certificate... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --id "01a1b103" --label gnutls-client --load-certificate tmp-client.crt "${token}" >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit_error + fi + + echo -n "* Checking whether ID was correctly set... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-certs "${token};object=gnutls-client;object-type=private;id=%01%a1%b1%03" 2>&1 | grep 'ID: 01:a1:b1:03' >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "ID was not set on copy" + exit_error + fi + echo ok + + if test -n "${BROKEN_SOFTHSM2}";then + return + fi + + echo -n "* Checking whether object was public... " + ${P11TOOL} ${ADDITIONAL_PARAM} --list-all-certs "${token};object=gnutls-client;id=%01%a1%b1%03" 2>&1 | grep 'ID: 01:a1:b1:03' >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "certificate object was not public" + exit_error + fi + echo ok + + if test -n "${BROKEN_SOFTHSM2}";then + return + fi + + echo -n "* Writing certificate of client's CA... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --mark-trusted --mark-ca --write --label gnutls-ca --load-certificate "${cacert}" "${token}" >>"${LOGFILE}" 2>&1 + ret=$? + if test ${ret} != 0; then + echo "Failed with PIN, trying to write with so PIN" >>"${LOGFILE}" + ${P11TOOL} ${ADDITIONAL_PARAM} --so-login --mark-ca --write --mark-trusted --label gnutls-ca --load-certificate "${cacert}" "${token}" >>"${LOGFILE}" 2>&1 + ret=$? + fi + + if test ${ret} = 0; then + echo ok + else + echo failed + exit_error + fi + + echo -n "* Testing certificate flags... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-all-certs "${token};object=gnutls-ca;object-type=cert" >${TMPFILE} 2>&1 + grep Flags ${TMPFILE}|head -n 1 >tmp-client-2.pub 2>>"${LOGFILE}" + if test $? != 0; then + echo failed + exit_error + fi + + grep CKA_TRUSTED tmp-client-2.pub >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "failed (no CKA_TRUSTED)" + #exit_error + fi + + grep "CKA_CERTIFICATE_CATEGORY=CA" tmp-client-2.pub >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "failed (no CKA_CERTIFICATE_CATEGORY=CA)" + #exit_error + fi + + echo ok + + echo -n "* Checking output of certificate" + grep "Expires: Sun Dec 13 08:24:54 2020" ${TMPFILE} >/dev/null + if test $? != 0;then + echo "failed. Expiration time not found" + exit_error + fi + + grep "X.509 Certificate (RSA-1024)" ${TMPFILE} >/dev/null + if test $? != 0;then + echo "failed. Certificate type and size not found." + exit_error + fi + + grep "Label: gnutls-ca" ${TMPFILE} >/dev/null + if test $? != 0;then + echo "failed. Certificate label not found." + exit_error + fi + + grep "Flags: CKA_CERTIFICATE_CATEGORY=CA; CKA_TRUSTED;" ${TMPFILE} >/dev/null + if test $? != 0;then + echo "failed. Object flags were not found." + exit_error + fi + + echo ok + rm -f ${TMPFILE} + + echo -n "* Trying to obtain back the cert... " + ${P11TOOL} ${ADDITIONAL_PARAM} --export "${token};object=gnutls-ca;object-type=cert" --outfile crt1.tmp >>"${LOGFILE}" 2>&1 + ${DIFF} crt1.tmp "${srcdir}/testpkcs11-certs/ca.crt" + if test $? != 0; then + echo "failed. Exported certificate differs (crt1.tmp)!" + exit_error + fi + rm -f crt1.tmp + if test $? = 0; then + echo ok + else + echo failed + exit_error + fi + + echo -n "* Trying to obtain the full chain... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --export-chain "${token};object=gnutls-client;object-type=cert"|"${CERTTOOL}" ${CERTTOOL_PARAM} -i --outfile crt1.tmp >>"${LOGFILE}" 2>&1 + + cat tmp-client.crt ${srcdir}/testpkcs11-certs/ca.crt|"${CERTTOOL}" ${CERTTOOL_PARAM} -i >crt2.tmp + ${DIFF} crt1.tmp crt2.tmp + if test $? != 0; then + echo "failed. Exported certificate chain differs!" + exit_error + fi + rm -f crt1.tmp crt2.tmp + if test $? = 0; then + echo ok + else + echo failed + exit_error + fi +} + +# $1: token +# $2: PIN +# $3: cakey: ${srcdir}/testpkcs11-certs/ca.key +# $4: cacert: ${srcdir}/testpkcs11-certs/ca.crt +# +# Tests writing a certificate which corresponds to the given key, +# and verifies whether the ID is the same. Should utilize the +# ID of the public key. +write_certificate_id_test_rsa () { + export GNUTLS_PIN="$2" + token="$1" + cakey="$3" + cacert="$4" + + echo -n "* Generating RSA private key on HSM... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --label xxx1-rsa --generate-rsa --bits 1024 "${token}" >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit 1 + fi + + echo -n "* Checking whether right ID is set on copy... " + "${CERTTOOL}" ${CERTTOOL_PARAM} ${ADDITIONAL_PARAM} --generate-certificate --load-ca-privkey "${cakey}" --load-ca-certificate "${cacert}" \ + --template ${srcdir}/testpkcs11-certs/client-tmpl --load-privkey "${token};object=xxx1-rsa;object-type=private" \ + --outfile tmp-client.crt >>"${LOGFILE}" 2>&1 + + if test $? != 0; then + echo failed + exit_error + fi + + id=$(${P11TOOL} ${ADDITIONAL_PARAM} --list-all "${token};object=xxx1-rsa;object-type=public" 2>&1 | grep 'ID: '|sed -e 's/ID://' -e 's/^[ \t]*//' -e 's/[ \t]*$//') + ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label tmp-xxx1-rsa --load-certificate tmp-client.crt "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-certs "${token};object=tmp-xxx1-rsa;object-type=cert" 2>&1 | grep "ID: ${id}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "ID '$id' was not set on copy" + exit_error + fi + echo ok +} + +# $1: token +# $2: PIN +# $3: cakey: ${srcdir}/testpkcs11-certs/ca.key +# $4: cacert: ${srcdir}/testpkcs11-certs/ca.crt +# +# Tests writing a certificate which corresponds to the given key, +# and verifies whether the ID is the same. Should utilize the +# ID of the private key. +write_certificate_id_test_rsa2 () { + export GNUTLS_PIN="$2" + token="$1" + cakey="$3" + cacert="$4" + tmpkey="key.$$.tmp" + + echo -n "* Generating RSA private key... " + ${CERTTOOL} ${ADDITIONAL_PARAM} --generate-privkey --bits 1024 --outfile ${tmpkey} >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit 1 + fi + + echo -n "* Checking whether right ID is set on copy... " + "${CERTTOOL}" ${CERTTOOL_PARAM} ${ADDITIONAL_PARAM} --generate-certificate --load-ca-privkey "${cakey}" --load-ca-certificate "${cacert}" \ + --template ${srcdir}/testpkcs11-certs/client-tmpl --load-privkey ${tmpkey} \ + --outfile tmp-client.crt >>"${LOGFILE}" 2>&1 + + if test $? != 0; then + echo failed + exit_error + fi + + ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label xxx2-rsa --load-privkey ${tmpkey} "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + + id=$(${P11TOOL} ${ADDITIONAL_PARAM} --login --list-all "${token};object=xxx2-rsa;object-type=private" 2>&1 | grep 'ID: '|sed -e 's/ID://' -e 's/^[ \t]*//' -e 's/[ \t]*$//') + + rm -f ${tmpkey} + ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label tmp-xxx2-rsa --load-certificate tmp-client.crt "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-certs "${token};object=tmp-xxx2-rsa;object-type=cert" 2>&1 | grep "ID: ${id}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "ID '$id' was not set on copy" + exit_error + fi + echo ok +} + +# $1: token +# $2: PIN +# $3: cakey: ${srcdir}/testpkcs11-certs/ca.key +# $4: cacert: ${srcdir}/testpkcs11-certs/ca.crt +# +# Tests writing a certificate which corresponds to the given key, +# and verifies whether the ID is the same. Should utilize the +# ID of the private key. +write_certificate_id_test_ecdsa () { + export GNUTLS_PIN="$2" + token="$1" + cakey="$3" + cacert="$4" + tmpkey="key.$$.tmp" + + echo -n "* Generating ECDSA private key... " + ${CERTTOOL} ${ADDITIONAL_PARAM} --generate-privkey --ecdsa --outfile ${tmpkey} >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo ok + else + echo failed + exit 1 + fi + + echo -n "* Checking whether right ID is set on copy... " + "${CERTTOOL}" ${CERTTOOL_PARAM} ${ADDITIONAL_PARAM} --generate-certificate --load-ca-privkey "${cakey}" --load-ca-certificate "${cacert}" \ + --template ${srcdir}/testpkcs11-certs/client-tmpl --load-privkey ${tmpkey} \ + --outfile tmp-client.crt >>"${LOGFILE}" 2>&1 + + if test $? != 0; then + echo failed + exit_error + fi + + ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label xxx-ecdsa --load-privkey ${tmpkey} "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + + id=$(${P11TOOL} ${ADDITIONAL_PARAM} --login --list-all "${token};object=xxx-ecdsa;object-type=private" 2>&1 | grep 'ID: '|sed -e 's/ID://' -e 's/^[ \t]*//' -e 's/[ \t]*$//') + + rm -f ${tmpkey} + ${P11TOOL} ${ADDITIONAL_PARAM} --login --write --label tmp-xxx-ecdsa --load-certificate tmp-client.crt "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + + ${P11TOOL} ${ADDITIONAL_PARAM} --login --list-certs "${token};object=tmp-xxx-ecdsa;object-type=cert" 2>&1 | grep "ID: ${id}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "ID '$id' was not set on copy" + exit_error + fi + echo ok +} + +test_sign () { + export GNUTLS_PIN="$2" + token="$1" + + echo -n "* Testing signatures using the private key... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --test-sign "${token};object=serv-key" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "failed. Cannot test signatures." + exit_error + fi + echo ok + + echo -n "* Testing RSA-PSS signatures using the private key... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --sign-params rsa-pss --test-sign "${token};object=serv-key" >>"${LOGFILE}" 2>&1 + rc=$? + if test $rc != 0; then + if test $rc = 2; then + echo "failed. RSA-PSS not supported." + else + echo "failed. Cannot test signatures." + exit_error + fi + else + echo ok + fi + + echo -n "* Testing signatures using the private key (with ID)... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --test-sign "${token};id=%ac%1d%7a%39%cb%72%17%94%66%6c%74%44%73%40%91%44%c0%a0%43%7d" >>"${LOGFILE}" 2>&1 + ${P11TOOL} ${ADDITIONAL_PARAM} --login --test-sign "${token};id=%ac%1d%7a%39%cb%72%17%94%66%6c%74%44%73%40%91%44%c0%a0%43%7d" 2>&1|grep "Verifying against public key in the token..."|grep ok >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "failed. Cannot test signatures with ID." + exit_error + fi + echo ok +} + +# This tests the signing operation as well as the usage of --set-pin +test_sign_set_pin () { + pin="$2" + token="$1" + + unset GNUTLS_PIN + + echo -n "* Testing signatures using the private key and --set-pin... " + ${P11TOOL} ${ADDITIONAL_PARAM} --login --set-pin ${pin} --test-sign "${token};object=serv-key" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo "failed. Cannot test signatures." + exit_error + fi + echo ok + + export GNUTLS_PIN=${pin} +} + +# $1: token +# $2: PIN +# $3: certfile +# $4: keyfile +# $5: cafile +# +# Tests using a certificate and key pair using gnutls-serv and gnutls-cli. +use_certificate_test () { + export GNUTLS_PIN="$2" + token="$1" + certfile="$3" + keyfile="$4" + cafile="$5" + txt="$6" + + echo -n "* Using PKCS #11 with gnutls-cli (${txt})... " + # start server + eval "${GETPORT}" + launch_pkcs11_server $$ "${ADDITIONAL_PARAM}" --echo --priority NORMAL --x509certfile="${certfile}" \ + --x509keyfile="$keyfile" --x509cafile="${cafile}" \ + --verify-client-cert --require-client-cert >>"${LOGFILE}" 2>&1 + + PID=$! + wait_server ${PID} + + # connect to server using SC + ${VALGRIND} "${CLI}" ${ADDITIONAL_PARAM} -p "${PORT}" localhost --priority NORMAL --x509cafile="${cafile}" >"${LOGFILE}" 2>&1 && \ + fail ${PID} "Connection should have failed!" + + ${VALGRIND} "${CLI}" ${ADDITIONAL_PARAM} -p "${PORT}" localhost --priority NORMAL --x509certfile="${certfile}" \ + --x509keyfile="$keyfile" --x509cafile="${cafile}" >"${LOGFILE}" 2>&1 || \ + fail ${PID} "Connection (with files) should have succeeded!" + + ${VALGRIND} "${CLI}" ${ADDITIONAL_PARAM} -p "${PORT}" localhost --priority NORMAL --x509certfile="${token};object=gnutls-client;object-type=cert" \ + --x509keyfile="${token};object=gnutls-client;object-type=private" \ + --x509cafile="${cafile}" >"${LOGFILE}" 2>&1 || \ + fail ${PID} "Connection (with SC) should have succeeded!" + + kill ${PID} + wait + + echo ok +} + +reset_pins () { + token="$1" + UPIN="$2" + SOPIN="$3" + NEWPIN=88654321 + LARGE_NEWPIN="1234123412341234123412341234123" #31 chars + TOO_LARGE_NEWPIN="12341234123412341234123412341234" #32 chars + + echo -n "* Setting SO PIN... " + # Test admin PIN + GNUTLS_NEW_SO_PIN="${NEWPIN}" \ + GNUTLS_SO_PIN="${SOPIN}" \ + ${P11TOOL} ${ADDITIONAL_PARAM} --login --initialize-so-pin "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + echo ok + + # reset back + echo -n "* Re-setting SO PIN... " + TMP="${NEWPIN}" + GNUTLS_SO_PIN="${TMP}" \ + GNUTLS_NEW_SO_PIN="${SOPIN}" \ + ${P11TOOL} ${ADDITIONAL_PARAM} --login --initialize-so-pin "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + echo ok + + echo -n "* Setting too large SO PIN... " + GNUTLS_NEW_SO_PIN="${TOO_LARGE_NEWPIN}" \ + GNUTLS_SO_PIN="${SOPIN}" \ + ${P11TOOL} ${ADDITIONAL_PARAM} --login --initialize-so-pin "${token}" >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo failed + exit_error + fi + echo ok + + echo -n "* Setting large SO PIN... " + GNUTLS_NEW_SO_PIN="${LARGE_NEWPIN}" \ + GNUTLS_SO_PIN="${SOPIN}" \ + ${P11TOOL} ${ADDITIONAL_PARAM} --login --initialize-so-pin "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + echo ok + + # reset back + echo -n "* Re-setting SO PIN... " + TMP="${LARGE_NEWPIN}" + GNUTLS_SO_PIN="${TMP}" \ + GNUTLS_NEW_SO_PIN="${SOPIN}" \ + ${P11TOOL} ${ADDITIONAL_PARAM} --login --initialize-so-pin "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + echo ok + + NEWPIN=977654321 + # Test user PIN + echo -n "* Setting user PIN... " + export GNUTLS_SO_PIN="${SOPIN}" + export GNUTLS_PIN="${NEWPIN}" + ${P11TOOL} ${ADDITIONAL_PARAM} --login --initialize-pin "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + echo ok + + echo -n "* Re-setting user PIN... " + export GNUTLS_PIN="${UPIN}" + ${P11TOOL} ${ADDITIONAL_PARAM} --login --initialize-pin "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + echo ok + + echo -n "* Setting too large user PIN... " + export GNUTLS_SO_PIN="${SOPIN}" + export GNUTLS_PIN="${TOO_LARGE_NEWPIN}" + ${P11TOOL} ${ADDITIONAL_PARAM} --login --initialize-pin "${token}" >>"${LOGFILE}" 2>&1 + if test $? = 0; then + echo failed + exit_error + fi + echo ok + + echo -n "* Setting large user PIN... " + export GNUTLS_SO_PIN="${SOPIN}" + export GNUTLS_PIN="${LARGE_NEWPIN}" + ${P11TOOL} ${ADDITIONAL_PARAM} --login --initialize-pin "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + echo ok + + echo -n "* Re-setting user PIN... " + export GNUTLS_PIN="${UPIN}" + ${P11TOOL} ${ADDITIONAL_PARAM} --login --initialize-pin "${token}" >>"${LOGFILE}" 2>&1 + if test $? != 0; then + echo failed + exit_error + fi + echo ok +} + + + +echo "Testing PKCS11 support" + +# erase SC + +type="$1" + +if test -z "${type}"; then + echo "usage: $0: [pkcs15|softhsm|sc-hsm]" + if test -x "/usr/bin/softhsm" || test -x "/usr/bin/softhsm2-util"; then + echo "assuming 'softhsm'" + echo "" + type=softhsm + else + exit 77 + fi + +fi + +. "${srcdir}/testpkcs11.${type}" + +export TEST_PIN=12345678 +export TEST_SO_PIN=00000001 + +init_card "${TEST_PIN}" "${TEST_SO_PIN}" + + +# find token name +TOKEN=`${P11TOOL} ${ADDITIONAL_PARAM} --list-tokens pkcs11:token=Nikos|grep URL|grep token=GnuTLS-Test|sed 's/\s*URL\: //g'` + +echo "* Token: ${TOKEN}" +if test "x${TOKEN}" = x; then + echo "Could not find generated token" + exit_error +fi + +${P11TOOL} ${ADDITIONAL_PARAM} --list-mechanisms ${TOKEN}|grep 25519 >/dev/null +if test $? = 0;then + have_ed25519=1 +fi + +${P11TOOL} ${ADDITIONAL_PARAM} --list-mechanisms ${TOKEN} > ${TMPFILE} + +# Verify that we output flags correctly +if grep AES_CTR ${TMPFILE} | grep -v "keysize range (16, 32)" ; then + echo "Keysize range error" + exit_error +fi + +if grep AES_CTR ${TMPFILE} | grep -v "encrypt decrypt" ; then + echo "Error with encrypt/decrypt flags" + exit_error +fi + +if grep KEY_WRAP ${TMPFILE} | grep -v "wrap.unwrap" ; then + echo "Error with wrap/unwrap flags" + exit_error +fi + +if grep AES_CMAC ${TMPFILE} | grep -v "sign verify" ; then + echo "Error with sign/verify flags" + exit_error +fi + +if grep "CKM_SHA256 " ${TMPFILE} | grep -v "digest" ; then + echo "Error with digest flags" + exit_error +fi + +reset_pins "${TOKEN}" "${TEST_PIN}" "${TEST_SO_PIN}" + +#write a given privkey +write_privkey "${TOKEN}" "${TEST_PIN}" "${srcdir}/testpkcs11-certs/client.key" + +generate_temp_ecc_privkey "${TOKEN}" "${TEST_PIN}" 256 +delete_temp_privkey "${TOKEN}" "${TEST_PIN}" ecc-256 + +generate_temp_ecc_privkey_no_login "${TOKEN}" "${TEST_PIN}" 256 +delete_temp_privkey "${TOKEN}" "${TEST_PIN}" ecc-no-256 + +generate_temp_ecc_privkey "${TOKEN}" "${TEST_PIN}" 384 +delete_temp_privkey "${TOKEN}" "${TEST_PIN}" ecc-384 + +if test $have_ed25519 != 0;then + generate_temp_ed25519_privkey "${TOKEN}" "${TEST_PIN}" ed25519 + delete_temp_privkey "${TOKEN}" "${TEST_PIN}" ed25519 +fi + +generate_temp_rsa_privkey "${TOKEN}" "${TEST_PIN}" 2048 +delete_temp_privkey "${TOKEN}" "${TEST_PIN}" rsa-2048 + +generate_temp_dsa_privkey "${TOKEN}" "${TEST_PIN}" 3072 +delete_temp_privkey "${TOKEN}" "${TEST_PIN}" dsa-3072 + +import_temp_rsa_privkey "${TOKEN}" "${TEST_PIN}" 1024 +delete_temp_privkey "${TOKEN}" "${TEST_PIN}" rsa-1024 +import_temp_ecc_privkey "${TOKEN}" "${TEST_PIN}" 256 +delete_temp_privkey "${TOKEN}" "${TEST_PIN}" ecc-256 +import_temp_dsa_privkey "${TOKEN}" "${TEST_PIN}" 2048 +delete_temp_privkey "${TOKEN}" "${TEST_PIN}" dsa-2048 + +if test $have_ed25519 != 0;then + import_temp_ed25519_privkey "${TOKEN}" "${TEST_PIN}" ed25519 + delete_temp_privkey "${TOKEN}" "${TEST_PIN}" ed25519 +fi + +generate_rsa_privkey "${TOKEN}" "${TEST_PIN}" 1024 +change_id_of_privkey "${TOKEN}" "${TEST_PIN}" +export_pubkey_of_privkey "${TOKEN}" "${TEST_PIN}" +change_label_of_privkey "${TOKEN}" "${TEST_PIN}" +list_pubkey_as_so "${TOKEN}" "${TEST_SO_PIN}" +list_privkey_without_pin_env "${TOKEN}" "${TEST_PIN}" + +write_certificate_test "${TOKEN}" "${TEST_PIN}" "${srcdir}/testpkcs11-certs/ca.key" "${srcdir}/testpkcs11-certs/ca.crt" tmp-client.pub +write_serv_privkey "${TOKEN}" "${TEST_PIN}" "${srcdir}/testpkcs11-certs/server.key" +write_serv_cert "${TOKEN}" "${TEST_PIN}" "${srcdir}/testpkcs11-certs/server.crt" + +write_serv_pubkey "${TOKEN}" "${TEST_PIN}" "${srcdir}/testpkcs11-certs/server.crt" +test_sign "${TOKEN}" "${TEST_PIN}" + +use_certificate_test "${TOKEN}" "${TEST_PIN}" "${TOKEN};object=serv-cert;object-type=cert" "${TOKEN};object=serv-key;object-type=private" "${srcdir}/testpkcs11-certs/ca.crt" "full URLs" + +use_certificate_test "${TOKEN}" "${TEST_PIN}" "${TOKEN};object=serv-cert" "${TOKEN};object=serv-key" "${srcdir}/testpkcs11-certs/ca.crt" "abbrv URLs" + +write_certificate_id_test_rsa "${TOKEN}" "${TEST_PIN}" "${srcdir}/testpkcs11-certs/ca.key" "${srcdir}/testpkcs11-certs/ca.crt" +write_certificate_id_test_rsa2 "${TOKEN}" "${TEST_PIN}" "${srcdir}/testpkcs11-certs/ca.key" "${srcdir}/testpkcs11-certs/ca.crt" +write_certificate_id_test_ecdsa "${TOKEN}" "${TEST_PIN}" "${srcdir}/testpkcs11-certs/ca.key" "${srcdir}/testpkcs11-certs/ca.crt" + +test_delete_cert "${TOKEN}" "${TEST_PIN}" + +test_sign_set_pin "${TOKEN}" "${TEST_PIN}" + +if test ${RETCODE} = 0; then + echo "* All smart cards tests succeeded" +fi +rm -f tmp-client.crt tmp-client.pub tmp-client-2.pub "${LOGFILE}" "${TMPFILE}" + +exit 0 diff --git a/tests/suite/testpkcs11.softhsm b/tests/testpkcs11.softhsm similarity index 100% rename from tests/suite/testpkcs11.softhsm rename to tests/testpkcs11.softhsm diff --git a/tests/time.c b/tests/time.c new file mode 100644 index 0000000000..7f5240d026 --- /dev/null +++ b/tests/time.c @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* That's a unit test of _gnutls_utcTime2gtime() and _gnutls_x509_generalTime2gtime() + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include +#include + +#include "utils.h" + +time_t _gnutls_utcTime2gtime(const char *ttime); +time_t _gnutls_x509_generalTime2gtime(const char *ttime); + +struct time_tests_st { + const char *time_str; + time_t utime; +}; + +struct time_tests_st general_time_tests[] = { + { + .time_str = "20190520133237Z", + .utime = 1558359157 + }, + { + .time_str = "20170101000000Z", + .utime = 1483228800 + }, + { + .time_str = "19700101000000Z", + .utime = 0 + }, +}; + +struct time_tests_st utc_time_tests[] = { + { + .time_str = "190520133237", + .utime = 1558359157 + }, + { + .time_str = "170101000000Z", + .utime = 1483228800 + }, +}; + + +void doit(void) +{ + time_t t; + unsigned i; + + for (i=0;i #include #include +#include #include "cert-common.h" #include "utils.h" @@ -63,7 +64,7 @@ static void client_log_func(int level, const char *str) #define MAX_BUF 1024 -static void client(int fd) +static void client(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -91,9 +92,9 @@ static void client(int fd) gnutls_handshake_set_timeout(session, 20 * 1000); /* Use default priorities */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA", - NULL); + assert(gnutls_priority_set_direct(session, + prio, + NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -163,7 +164,7 @@ static void terminate(void) exit(1); } -static void server(int fd) +static void server(int fd, const char *prio) { int ret; gnutls_certificate_credentials_t xcred; @@ -193,9 +194,9 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA", - NULL); + assert(gnutls_priority_set_direct(session, + prio, + NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -252,7 +253,8 @@ static void server(int fd) success("server: finished\n"); } -void doit(void) +static +void run(const char *name, const char *prio) { int fd[2]; int ret; @@ -277,15 +279,21 @@ void doit(void) /* parent */ close(fd[1]); - server(fd[0]); + server(fd[0], prio); wait(&status); check_wait_status(status); } else { close(fd[0]); - client(fd[1]); + client(fd[1], prio); exit(0); } } +void doit(void) +{ + run("tls1.2", "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2"); + run("tls1.3", "NORMAL:-VERS-ALL:+VERS-TLS1.3"); + run("default", "NORMAL"); +} #endif /* _WIN32 */ diff --git a/tests/tls-crt_type-neg.c b/tests/tls-crt_type-neg.c new file mode 100644 index 0000000000..690bea9081 --- /dev/null +++ b/tests/tls-crt_type-neg.c @@ -0,0 +1,442 @@ +/* + * Copyright (C) 2017 - 2018 ARPA2 project + * + * Author: Tom Vrancken (dev@tomvrancken.nl) + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the certificate type negotiation mechnism for + * the handshake as specified in RFC7250 */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" +#include "crt_type-neg-common.c" + +test_case_st tests[] = { + /* Tests with only a single credential set for client/server. + * Tests for X.509 cases. + */ + { + /* Default case A + * + * Priority cli: NORMAL + * Priority srv: NORMAL + * Cli creds: None + * Srv creds: X.509 + * Handshake: should complete without errors + * Negotiation: cert types should default to X.509 + */ + .name = "Default case A. Creds set (CLI/SRV): None/X509.", + .client_prio = "NORMAL", + .server_prio = "NORMAL", + .set_cli_creds = CRED_EMPTY, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_X509}, + { + /* Default case B + * + * Priority: NORMAL + * Cli creds: X.509 + * Srv creds: X.509 + * Handshake: should complete without errors + * Negotiation: cert types should default to X.509 + */ + .name = "Default case B. Creds set (CLI/SRV): X509/X509. No cli cert asked.", + .client_prio = "NORMAL", + .server_prio = "NORMAL", + .set_cli_creds = CRED_X509, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_X509}, + { + /* Default case C + * + * Priority: NORMAL + * Cli creds: X.509 + * Srv creds: X.509 + * Handshake: should complete without errors + * Negotiation: cert types should default to X.509 + */ + .name = "Default case C. Creds set (CLI/SRV): X509/X509. Cli cert asked.", + .client_prio = "NORMAL", + .server_prio = "NORMAL", + .set_cli_creds = CRED_X509, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_X509, + .request_cli_crt = true}, + { + /* No server credentials + * + * Priority: NORMAL + * Cli creds: None + * Srv creds: None + * Handshake: results in errors + * Negotiation: cert types are not evaluated + */ + .name = "No server creds. Creds set (CLI/SRV): None/None.", + .client_prio = "NORMAL", + .server_prio = "NORMAL", + .set_cli_creds = CRED_EMPTY, + .set_srv_creds = CRED_EMPTY, + .client_err = GNUTLS_E_AGAIN, + .server_err = GNUTLS_E_NO_CIPHER_SUITES}, + { + /* Explicit cli/srv ctype negotiation, cli creds x509, srv creds x509 + * + * Priority: NORMAL + request x509 for cli and srv + * Cli creds: X.509 + * Srv creds: X.509 + * Handshake: should complete without errors + * Negotiation: Fallback to default cli X.509, srv X.509 because + * we advertise with only the cert type defaults. Extensions + * will therefore not be activated. + */ + .name = "Negotiate CLI X.509 + SRV X.509. Creds set (CLI/SRV): X.509/X.509.", + .client_prio = "NORMAL:+CTYPE-CLI-X509:+CTYPE-SRV-X509", + .server_prio = "NORMAL:+CTYPE-CLI-X509:+CTYPE-SRV-X509", + .set_cli_creds = CRED_X509, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_X509}, + { + /* Explicit cli/srv ctype negotiation, cli creds x509, srv creds x509, no cli cert asked + * + * Priority: NORMAL + request x509 for cli + * Cli creds: X.509 + * Srv creds: X.509 + * Handshake: should complete without errors + * Negotiation: Fallback to default cli X.509, srv X.509 because + * we advertise with only the cert type defaults. Extensions + * will therefore not be activated. + */ + .name = "Negotiate CLI X.509. Creds set (CLI/SRV): X.509/X.509.", + .client_prio = "NORMAL:+CTYPE-CLI-X509", + .server_prio = "NORMAL:+CTYPE-CLI-X509", + .set_cli_creds = CRED_X509, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_X509}, + { + /* Explicit cli/srv ctype negotiation, cli creds x509, srv creds x509, cli cert asked + * + * Priority: NORMAL + request x509 for cli + * Cli creds: X.509 + * Srv creds: X.509 + * Handshake: should complete without errors + * Negotiation: Fallback to default cli X.509, srv X.509 because + * we advertise with only the cert type defaults. Extensions + * will therefore not be activated. + */ + .name = "Negotiate CLI X.509. Creds set (CLI/SRV): X.509/X.509.", + .client_prio = "NORMAL:+CTYPE-CLI-X509", + .server_prio = "NORMAL:+CTYPE-CLI-X509", + .set_cli_creds = CRED_X509, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_X509, + .request_cli_crt = true}, + { + /* Explicit cli/srv ctype negotiation, cli creds x509, srv creds x509 + * + * Priority: NORMAL + request x509 for srv + * Cli creds: X.509 + * Srv creds: X.509 + * Handshake: should complete without errors + * Negotiation: Fallback to default cli X.509, srv X.509 because + * we advertise with only the cert type defaults. Extensions + * will therefore not be activated. + */ + .name = "Negotiate SRV X.509. Creds set (CLI/SRV): X.509/X.509.", + .client_prio = "NORMAL:+CTYPE-SRV-X509", + .server_prio = "NORMAL:+CTYPE-SRV-X509", + .set_cli_creds = CRED_X509, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_X509}, + { + /* Explicit cli/srv ctype negotiation, all types allowed for CLI, cli creds x509, srv creds x509 + * + * Priority: NORMAL + allow all client cert types + * Cli creds: X.509 + * Srv creds: X.509 + * Handshake: should complete without errors + * Negotiation: cli X.509 and srv X.509 because + * we only have X.509 credentials set. + */ + .name = "Negotiate CLI all. Creds set (CLI/SRV): X.509/X.509.", + .client_prio = "NORMAL:+CTYPE-CLI-ALL", + .server_prio = "NORMAL:+CTYPE-CLI-ALL", + .set_cli_creds = CRED_X509, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_X509}, + { + /* Explicit cli/srv ctype negotiation, all types allowed for SRV, cli creds x509, srv creds x509 + * + * Priority: NORMAL + allow all server cert types + * Cli creds: X.509 + * Srv creds: X.509 + * Handshake: should complete without errors + * Negotiation: cli X.509 and srv X.509 because + * we only have X.509 credentials set. + */ + .name = "Negotiate SRV all. Creds set (CLI/SRV): X.509/X.509.", + .client_prio = "NORMAL:+CTYPE-SRV-ALL", + .server_prio = "NORMAL:+CTYPE-SRV-ALL", + .set_cli_creds = CRED_X509, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_X509}, + { + /* Explicit cli/srv ctype negotiation, all types allowed for CLI/SRV, cli creds x509, srv creds x509 + * + * Priority: NORMAL + allow all client and server cert types + * Cli creds: X.509 + * Srv creds: X.509 + * Handshake: should complete without errors + * Negotiation: cli X.509 and srv X.509 because + * we only have X.509 credentials set. + */ + .name = "Negotiate CLI/SRV all. Creds set (CLI/SRV): X.509/X.509.", + .client_prio = "NORMAL:+CTYPE-CLI-ALL:+CTYPE-SRV-ALL", + .server_prio = "NORMAL:+CTYPE-CLI-ALL:+CTYPE-SRV-ALL", + .set_cli_creds = CRED_X509, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_X509}, + + /* Tests with only a single credential set for client/server. + * Tests for Raw public-key cases. + */ + { + /* Explicit cli/srv ctype negotiation, cli creds Raw PK, srv creds Raw PK, Req. cli cert. + * + * Priority: NORMAL + request rawpk for cli and srv + * Cli creds: Raw PK + * Srv creds: Raw PK + * Request client cert: yes + * Handshake: should complete without errors + * Negotiation: both parties should have a Raw PK cert negotiated + */ + .name = "Negotiate CLI Raw PK + SRV Raw PK. Creds set (CLI/SRV): RawPK/RawPK. Cert req.", + .client_prio = "NORMAL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK", + .server_prio = "NORMAL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK", + .set_cli_creds = CRED_RAWPK, + .set_srv_creds = CRED_RAWPK, + .expected_cli_ctype = GNUTLS_CRT_RAWPK, + .expected_srv_ctype = GNUTLS_CRT_RAWPK, + .init_flags_cli = GNUTLS_ENABLE_RAWPK, + .init_flags_srv = GNUTLS_ENABLE_RAWPK, + .request_cli_crt = true}, + { + /* Explicit cli/srv ctype negotiation (TLS 1.2), cli creds Raw PK, srv creds Raw PK + * + * Priority: NORMAL + request rawpk for cli and srv + * Cli creds: Raw PK + * Srv creds: Raw PK + * Request client cert: no + * Handshake: should complete without errors + * Negotiation: a Raw PK server cert. A diverged state for the client + * cert type. The server picks Raw PK but does not send a response + * to the client (under TLS 1.2). The client therefore falls back to default (X.509). + */ + .name = "Negotiate CLI Raw PK + SRV Raw PK. Creds set (CLI/SRV): RawPK/RawPK.", + .client_prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK", + .server_prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK", + .set_cli_creds = CRED_RAWPK, + .set_srv_creds = CRED_RAWPK, + .expected_cli_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_cli_ctype = GNUTLS_CRT_RAWPK, + .expected_cli_srv_ctype = GNUTLS_CRT_RAWPK, + .expected_srv_srv_ctype = GNUTLS_CRT_RAWPK, + .init_flags_cli = GNUTLS_ENABLE_RAWPK, + .init_flags_srv = GNUTLS_ENABLE_RAWPK, + .request_cli_crt = false, + .cli_srv_may_diverge = true}, + { + /* Explicit cli/srv ctype negotiation (TLS 1.3), cli creds Raw PK, srv creds Raw PK + * + * Priority: NORMAL + request rawpk for cli and srv + * Cli creds: Raw PK + * Srv creds: Raw PK + * Request client cert: no + * Handshake: should complete without errors + * Negotiation: a Raw PK server cert and client cert. Under TLS 1.3 + * a respons is always sent by the server also when no client + * cert is requested. This is necessary for post-handshake authentication + * to work. + */ + .name = "Negotiate CLI Raw PK + SRV Raw PK. Creds set (CLI/SRV): RawPK/RawPK.", + .client_prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK", + .server_prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK", + .set_cli_creds = CRED_RAWPK, + .set_srv_creds = CRED_RAWPK, + .expected_cli_cli_ctype = GNUTLS_CRT_RAWPK, + .expected_srv_cli_ctype = GNUTLS_CRT_RAWPK, + .expected_cli_srv_ctype = GNUTLS_CRT_RAWPK, + .expected_srv_srv_ctype = GNUTLS_CRT_RAWPK, + .init_flags_cli = GNUTLS_ENABLE_RAWPK, + .init_flags_srv = GNUTLS_ENABLE_RAWPK, + .request_cli_crt = false, + .cli_srv_may_diverge = true}, + { + /* Explicit cli/srv ctype negotiation, cli creds Raw PK, srv creds Raw PK + * + * Priority: NORMAL + request rawpk for cli + * Cli creds: Raw PK + * Srv creds: Raw PK + * Request client cert: no + * Handshake: fails because no valid cred (X.509) can be found for the server. + * Negotiation: - + */ + .name = "Negotiate CLI Raw PK. Creds set (CLI/SRV): RawPK/RawPK.", + .client_prio = "NORMAL:+CTYPE-CLI-RAWPK", + .server_prio = "NORMAL:+CTYPE-CLI-RAWPK", + .set_cli_creds = CRED_RAWPK, + .set_srv_creds = CRED_RAWPK, + .init_flags_cli = GNUTLS_ENABLE_RAWPK, + .init_flags_srv = GNUTLS_ENABLE_RAWPK, + .client_err = GNUTLS_E_AGAIN, + .server_err = GNUTLS_E_NO_CIPHER_SUITES}, + { + /* Explicit cli/srv ctype negotiation, cli creds Raw PK, srv creds Raw PK, request cli cert. + * + * Priority: NORMAL + request rawpk for srv + * Cli creds: Raw PK + * Srv creds: Raw PK + * Request client cert: yes + * Handshake: should complete without errors + * Negotiation: Raw PK will be negotiated for server. Client will + * default to X.509. + */ + .name = "Negotiate SRV Raw PK. Creds set (CLI/SRV): RawPK/RawPK.", + .client_prio = "NORMAL:+CTYPE-SRV-RAWPK", + .server_prio = "NORMAL:+CTYPE-SRV-RAWPK", + .set_cli_creds = CRED_RAWPK, + .set_srv_creds = CRED_RAWPK, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_RAWPK, + .init_flags_cli = GNUTLS_ENABLE_RAWPK, + .init_flags_srv = GNUTLS_ENABLE_RAWPK, + .request_cli_crt = true}, + { + /* Explicit cli/srv ctype negotiation, cli creds Raw PK, srv creds X.509, Request cli cert. + * + * Priority: NORMAL + request rawpk for cli and srv + * Cli creds: Raw PK + * Srv creds: X.509 + * Request client cert: yes + * Handshake: should complete without errors + * Negotiation: Raw PK will be negotiated for client. Server will + * default to X.509. + */ + .name = "Negotiate CLI and SRV Raw PK. Creds set (CLI/SRV): RawPK/X.509.", + .client_prio = "NORMAL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK", + .server_prio = "NORMAL:+CTYPE-CLI-RAWPK:+CTYPE-SRV-RAWPK", + .set_cli_creds = CRED_RAWPK, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_RAWPK, + .expected_srv_ctype = GNUTLS_CRT_X509, + .init_flags_cli = GNUTLS_ENABLE_RAWPK, + .init_flags_srv = GNUTLS_ENABLE_RAWPK, + .request_cli_crt = true}, + { + /* All types allowed for CLI, cli creds Raw PK, srv creds X.509 + * + * Priority: NORMAL + allow all client cert types + * Cli creds: Raw PK + * Srv creds: X.509 + * Handshake: should complete without errors + * Negotiation: cli Raw PK and srv X.509 because + * that are the only credentials set. + */ + .name = "Negotiate CLI all. Creds set (CLI/SRV): Raw PK/X.509.", + .client_prio = "NORMAL:+CTYPE-CLI-ALL", + .server_prio = "NORMAL:+CTYPE-CLI-ALL", + .set_cli_creds = CRED_RAWPK, + .set_srv_creds = CRED_X509, + .expected_cli_ctype = GNUTLS_CRT_RAWPK, + .expected_srv_ctype = GNUTLS_CRT_X509, + .init_flags_cli = GNUTLS_ENABLE_RAWPK, + .init_flags_srv = GNUTLS_ENABLE_RAWPK, + .request_cli_crt = true}, + { + /* All types allowed for SRV, cli creds x509, srv creds Raw PK + * + * Priority: NORMAL + allow all server cert types + * Cli creds: X.509 + * Srv creds: Raw PK + * Handshake: should complete without errors + * Negotiation: cli X.509 and srv Raw PK because + * that are the only credentials set. + */ + .name = "Negotiate SRV all. Creds set (CLI/SRV): X.509/Raw PK.", + .client_prio = "NORMAL:+CTYPE-SRV-ALL", + .server_prio = "NORMAL:+CTYPE-SRV-ALL", + .set_cli_creds = CRED_X509, + .set_srv_creds = CRED_RAWPK, + .expected_cli_ctype = GNUTLS_CRT_X509, + .expected_srv_ctype = GNUTLS_CRT_RAWPK, + .init_flags_cli = GNUTLS_ENABLE_RAWPK, + .init_flags_srv = GNUTLS_ENABLE_RAWPK, + .request_cli_crt = true}, + { + /* All types allowed for CLI/SRV, cli creds Raw PK, srv creds Raw PK + * + * Priority: NORMAL + allow all client and server cert types + * Cli creds: Raw PK + * Srv creds: Raw PK + * Handshake: should complete without errors + * Negotiation: cli Raw PK and srv Raw PK because + * that are the only credentials set. + */ + .name = "Negotiate CLI/SRV all. Creds set (CLI/SRV): Raw PK/Raw PK.", + .client_prio = "NORMAL:+CTYPE-CLI-ALL:+CTYPE-SRV-ALL", + .server_prio = "NORMAL:+CTYPE-CLI-ALL:+CTYPE-SRV-ALL", + .set_cli_creds = CRED_RAWPK, + .set_srv_creds = CRED_RAWPK, + .expected_cli_ctype = GNUTLS_CRT_RAWPK, + .expected_srv_ctype = GNUTLS_CRT_RAWPK, + .init_flags_cli = GNUTLS_ENABLE_RAWPK, + .init_flags_srv = GNUTLS_ENABLE_RAWPK, + .request_cli_crt = true}, + +}; + +void doit(void) +{ + unsigned i; + global_init(); + + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + try(&tests[i]); + } + + gnutls_global_deinit(); +} diff --git a/tests/tls-ext-not-in-dtls.c b/tests/tls-ext-not-in-dtls.c new file mode 100644 index 0000000000..4115b64b75 --- /dev/null +++ b/tests/tls-ext-not-in-dtls.c @@ -0,0 +1,288 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +enum { +TEST_DEF_HANDHAKE, +TEST_CUSTOM_EXT +}; + +/* This program tests whether the Post Handshake Auth extension is + * present in the client hello, and whether it is missing from server + * hello. In addition it contains basic functionality test for + * post handshake authentication. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +static int ext_send(gnutls_session_t session, gnutls_buffer_t extdata) +{ + gnutls_buffer_append_data(extdata, "\xff", 1); + return 0; +} + +static int ext_recv(gnutls_session_t session, const unsigned char *buf, size_t buflen) +{ + return 0; +} + +#define TLS_EXT_IMPL_DTLS 0xfeee +#define TLS_EXT_EXPL_TLS 0xfeea + +static void client(int fd, int type) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + assert(gnutls_global_init() >= 0); + + gnutls_global_set_log_function(client_log_func); + + assert(gnutls_certificate_allocate_credentials(&x509_cred) >= 0); + + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_DATAGRAM) >= 0); + + if (type == TEST_CUSTOM_EXT) { + assert(gnutls_session_ext_register(session, "implicit-dtls", TLS_EXT_IMPL_DTLS, GNUTLS_EXT_TLS, ext_recv, ext_send, NULL, NULL, NULL, GNUTLS_EXT_FLAG_CLIENT_HELLO|GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO|GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO)>=0); + assert(gnutls_session_ext_register(session, "explicit-tls", TLS_EXT_EXPL_TLS, GNUTLS_EXT_TLS, ext_recv, ext_send, NULL, NULL, NULL, GNUTLS_EXT_FLAG_CLIENT_HELLO|GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO|GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO|GNUTLS_EXT_FLAG_TLS)>=0); + } + + gnutls_handshake_set_timeout(session, 20 * 1000); + + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.0", NULL) >= 0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) + fail("handshake: %s\n", gnutls_strerror(ret)); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +#define TLS_EXT_KEY_SHARE 51 +#define TLS_EXT_POST_HANDSHAKE 49 + +struct ext_ctx_st { + int extno; + int found; +}; + +static int parse_ext(void *ctx, unsigned tls_id, const unsigned char *data, unsigned data_size) +{ + struct ext_ctx_st *s = ctx; + + if (s->extno == (int)tls_id) + s->found = 1; + + return 0; +} + +static unsigned find_client_extension(const gnutls_datum_t *msg, int extno) +{ + int ret; + struct ext_ctx_st s; + + memset(&s, 0, sizeof(s)); + s.extno = extno; + + ret = gnutls_ext_raw_parse(&s, parse_ext, msg, GNUTLS_EXT_RAW_FLAG_DTLS_CLIENT_HELLO); + assert(ret>=0); + + if (s.found) + return 1; + + return 0; +} + +static int hellos_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + int *type; + + if (htype != GNUTLS_HANDSHAKE_CLIENT_HELLO || post != GNUTLS_HOOK_PRE) + return 0; + + type = gnutls_session_get_ptr(session); + + if (find_client_extension(msg, TLS_EXT_KEY_SHARE)) + fail("Key share extension seen in client hello!\n"); + + if (find_client_extension(msg, TLS_EXT_POST_HANDSHAKE)) + fail("Key share extension seen in client hello!\n"); + + if (*type == TEST_CUSTOM_EXT) { + if (!find_client_extension(msg, TLS_EXT_IMPL_DTLS)) + fail("Implicit DTLS extension not seen in client hello!\n"); + + if (find_client_extension(msg, TLS_EXT_EXPL_TLS)) + fail("Explicit TLS extension seen in client hello!\n"); + } + + return 0; +} + +static void server(int fd, int type) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + assert(gnutls_global_init() >= 0); + + gnutls_global_set_log_function(server_log_func); + + assert(gnutls_certificate_allocate_credentials(&x509_cred) >= 0); + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM) >= 0); + + assert(gnutls_init(&session, GNUTLS_SERVER|GNUTLS_POST_HANDSHAKE_AUTH|GNUTLS_DATAGRAM) >= 0); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + hellos_callback); + + gnutls_session_set_ptr(session, &type); + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3:+VERS-TLS1.2", NULL) >= 0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +static void ch_handler(int sig) +{ + int status; + wait(&status); + check_wait_status(status); + return; +} + +static +void start(const char *name, int type) +{ + int fd[2]; + int ret; + pid_t child; + + signal(SIGCHLD, ch_handler); + success("%s\n", name); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], type); + kill(child, SIGTERM); + } else { + close(fd[0]); + client(fd[1], type); + exit(0); + } + +} + +void doit(void) { + start("check default extensions", TEST_DEF_HANDHAKE); + start("check registered extensions", TEST_CUSTOM_EXT); +} + +#endif /* _WIN32 */ diff --git a/tests/tls-ext-register.c b/tests/tls-ext-register.c index bcba2f2458..1eee470856 100644 --- a/tests/tls-ext-register.c +++ b/tests/tls-ext-register.c @@ -48,6 +48,7 @@ int main(int argc, char **argv) #endif #include #include +#include #include "utils.h" @@ -69,7 +70,7 @@ static int TLSEXT_TYPE_server_sent = 0; static int TLSEXT_TYPE_server_received = 0; static const unsigned char ext_data[] = -{ +{ 0xFE, 0xED }; @@ -116,29 +117,30 @@ static int ext_send_server_params(gnutls_session_t session, gnutls_buffer_t extd return sizeof(ext_data); } -static void client(int sd) +static void client(int sd, const char *prio) { int ret; gnutls_session_t session; gnutls_certificate_credentials_t clientx509cred; void *p; - global_init(); gnutls_global_set_log_function(tls_log_func); if (debug) gnutls_global_set_log_level(4711); side = "client"; + /* extensions are registered globally */ + ret = gnutls_ext_register("ext_client", TLSEXT_TYPE_SAMPLE, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL); + assert(ret >= 0); + gnutls_certificate_allocate_credentials(&clientx509cred); /* Initialize TLS session */ gnutls_init(&session, GNUTLS_CLIENT); - /* Use default priorities */ - gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); /* put the anonymous credentials to the current session */ @@ -148,8 +150,6 @@ static void client(int sd) gnutls_transport_set_int(session, sd); gnutls_handshake_set_timeout(session, 20 * 1000); - gnutls_ext_register("ext_client", TLSEXT_TYPE_SAMPLE, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL); - /* Perform the TLS handshake */ ret = gnutls_handshake(session); @@ -183,8 +183,6 @@ static void client(int sd) gnutls_deinit(session); gnutls_certificate_free_credentials(clientx509cred); - - gnutls_global_deinit(); } /* This is a sample TLS 1.0 server, for extension @@ -232,16 +230,14 @@ const gnutls_datum_t server_key = { server_key_pem, }; -static void server(int sd) +static void server(int sd, const char *prio) { gnutls_certificate_credentials_t serverx509cred; int ret; gnutls_session_t session; - unsigned i; /* this must be called once in the program */ - global_init(); gnutls_global_set_log_function(tls_log_func); if (debug) gnutls_global_set_log_level(4711); @@ -255,16 +251,12 @@ static void server(int sd) gnutls_init(&session, GNUTLS_SERVER); - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_ext_register("ext_server", TLSEXT_TYPE_SAMPLE, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL); + assert(gnutls_ext_register("ext_server", TLSEXT_TYPE_SAMPLE, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL)>=0); gnutls_transport_set_int(session, sd); gnutls_handshake_set_timeout(session, 20 * 1000); @@ -287,33 +279,29 @@ static void server(int sd) */ gnutls_bye(session, GNUTLS_SHUT_WR); - /* check whether we can crash the library by adding many extensions */ - for (i=0;i<64;i++) { - ret = gnutls_ext_register("ext_serverxx", TLSEXT_TYPE_SAMPLE+i+1, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL); - if (ret < 0) { - success("failed registering extension no %d (expected)\n", i+1); - break; - } - } - close(sd); gnutls_deinit(session); gnutls_certificate_free_credentials(serverx509cred); - gnutls_global_deinit(); - if (debug) success("server: finished\n"); } -void doit(void) +static +void start(const char *prio) { - pid_t child; + pid_t child1, child2; int sockets[2]; int err; + success("trying %s\n", prio); + signal(SIGPIPE, SIG_IGN); + TLSEXT_TYPE_client_sent = 0; + TLSEXT_TYPE_client_received = 0; + TLSEXT_TYPE_server_sent = 0; + TLSEXT_TYPE_server_received = 0; err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); if (err == -1) { @@ -322,22 +310,56 @@ void doit(void) return; } - child = fork(); - if (child < 0) { + child1 = fork(); + if (child1 < 0) { perror("fork"); fail("fork"); - return; } - if (child) { + if (child1) { int status; /* parent */ close(sockets[1]); - server(sockets[0]); - wait(&status); + + child2 = fork(); + if (child2 < 0) { + perror("fork"); + fail("fork"); + } + + if (child2) { + waitpid(child1, &status, 0); + check_wait_status(status); + + waitpid(child2, &status, 0); + check_wait_status(status); + } else { + server(sockets[0], prio); + exit(0); + } } else { close(sockets[0]); - client(sockets[1]); + client(sockets[1], prio); + exit(0); + } +} + +void doit(void) +{ + int ret; + unsigned i; + + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); + + /* check whether we can crash the library by adding many extensions */ + for (i=0;i<64;i++) { + ret = gnutls_ext_register("ext_serverxx", TLSEXT_TYPE_SAMPLE+i+1, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL); + if (ret < 0) { + success("failed registering extension no %d (expected)\n", i+1); + break; + } } } diff --git a/tests/tls-force-etm.c b/tests/tls-force-etm.c new file mode 100644 index 0000000000..8dce6e9f34 --- /dev/null +++ b/tests/tls-force-etm.c @@ -0,0 +1,396 @@ +/* + * Copyright (C) 2015-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +/* This program tests whether forced EtM is negotiated as expected. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define MAX_BUF 1024 + +static void client(int fd, const char *prio, unsigned etm, int eret) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_anon_client_credentials_t anoncred; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + /* Need to enable anonymous KX specifically. */ + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_anon_allocate_client_credentials(&anoncred); + gnutls_certificate_allocate_credentials(&x509_cred); + + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* Use default priorities */ + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (eret < 0) { + if (eret != ret) { + fail("client: Handshake failed with unexpected error: %s\n", gnutls_strerror(ret)); + } + goto end; + } + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + if (etm != 0 && gnutls_session_etm_status(session) == 0) { + fail("client: EtM was not negotiated with %s!\n", prio); + exit(1); + } else if (etm == 0 && gnutls_session_etm_status(session) != 0) { + fail("client: EtM was negotiated with %s!\n", prio); + exit(1); + } + + if (etm != 0 && ((gnutls_session_get_flags(session) & GNUTLS_SFLAGS_ETM) == 0)) { + fail("client: EtM was not negotiated with %s!\n", prio); + exit(1); + } else if (etm == 0 && ((gnutls_session_get_flags(session) & GNUTLS_SFLAGS_ETM) != 0)) { + fail("client: EtM was negotiated with %s!\n", prio); + exit(1); + } + + do { + do { + ret = gnutls_record_recv(session, buffer, MAX_BUF); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + } while (ret > 0); + + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + goto end; + } else if (ret < 0) { + if (ret != 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + exit(1); + } + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + + close(fd); + + gnutls_deinit(session); + + gnutls_anon_free_client_credentials(anoncred); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + + +static void server(int fd, const char *prio, unsigned etm, int eret) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_anon_server_credentials_t anoncred; + gnutls_certificate_credentials_t x509_cred; + unsigned to_send = sizeof(buffer)/4; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_anon_allocate_server_credentials(&anoncred); + + assert(gnutls_init(&session, GNUTLS_SERVER)>=0); + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); + + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (eret < 0) { + if (eret != -1 && eret != ret) { + fail("server: Handshake failed with unexpected error: %s\n", gnutls_strerror(ret)); + } + goto end; + } + + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + } + + if (etm != 0 && gnutls_session_etm_status(session) == 0) { + fail("server: EtM was not negotiated with %s!\n", prio); + exit(1); + } else if (etm == 0 && gnutls_session_etm_status(session) != 0) { + fail("server: EtM was negotiated with %s!\n", prio); + exit(1); + } + + if (etm != 0 && ((gnutls_session_get_flags(session) & GNUTLS_SFLAGS_ETM) == 0)) { + fail("server: EtM was not negotiated with %s!\n", prio); + exit(1); + } else if (etm == 0 && ((gnutls_session_get_flags(session) & GNUTLS_SFLAGS_ETM) != 0)) { + fail("server: EtM was negotiated with %s!\n", prio); + exit(1); + } + + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + do { + do { + ret = + gnutls_record_send(session, buffer, + sizeof(buffer)); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fail("Error sending %d byte packet: %s\n", to_send, + gnutls_strerror(ret)); + } + to_send++; + } + while (to_send < 64); + + to_send = -1; + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + end: + close(fd); + gnutls_deinit(session); + + gnutls_anon_free_server_credentials(anoncred); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +struct test_st { + const char *name; + const char *server_prio; + const char *client_prio; + unsigned etm; + int client_err; + int server_err; +}; + +static void start(struct test_st *test) +{ + int fd[2]; + int ret, status; + pid_t child; + + + success("trying: %s\n", test->name); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], test->server_prio, test->etm, test->server_err); + wait(&status); + check_wait_status(status); + } else { + close(fd[0]); + client(fd[1], test->client_prio, test->etm, test->client_err); + exit(0); + } +} + +#define AES_CBC "NONE:+VERS-TLS1.0:-CIPHER-ALL:+AES-128-CBC:+SHA1:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+CURVE-ALL" +#define AES_CBC_SHA256 "NONE:+VERS-TLS1.2:-CIPHER-ALL:+RSA:+AES-128-CBC:+AES-256-CBC:+SHA256:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+CURVE-ALL" +#define AES_GCM "NONE:+VERS-TLS1.2:-CIPHER-ALL:+RSA:+AES-128-GCM:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+CURVE-ALL" + +#define AES_CBC_TLS12 "NONE:+VERS-TLS1.2:-CIPHER-ALL:+RSA:+AES-128-CBC:+MAC-ALL:+SIGN-ALL:+COMP-ALL:+ANON-ECDH:+CURVE-ALL" + +static void ch_handler(int sig) +{ + return; +} + +static struct test_st tests[] = { + { + .name = "aes-cbc-hmac-sha1 with force etm", + .server_prio = AES_CBC":%FORCE_ETM", + .client_prio = AES_CBC":%FORCE_ETM", + .etm = 1 + }, + { + .name = "aes-cbc-hmac-sha256 with force etm", + .server_prio = AES_CBC_SHA256":%FORCE_ETM", + .client_prio = AES_CBC_SHA256":%FORCE_ETM", + .etm = 1 + }, + { + .name = "server aes-cbc-hmac-sha1 with force etm, gcm fallback", + .server_prio = AES_CBC_TLS12":+AES-128-GCM:%FORCE_ETM", + .client_prio = AES_CBC_TLS12":+AES-128-GCM:%NO_ETM", + .etm = 0 + }, + { + .name = "aes-gcm with force etm", + .server_prio = AES_GCM":%FORCE_ETM", + .client_prio = AES_GCM":%FORCE_ETM", + .etm = 0 + }, + { + .name = "server aes-cbc-hmac-sha1 with force etm failure", + .server_prio = AES_CBC":%FORCE_ETM", + .client_prio = AES_CBC":%NO_ETM", + .etm = 0, + .client_err = GNUTLS_E_PREMATURE_TERMINATION, + .server_err = GNUTLS_E_NO_CIPHER_SUITES + }, + { + .name = "client aes-cbc-hmac-sha1 with force etm failure", + .server_prio = AES_CBC":%NO_ETM", + .client_prio = AES_CBC":%FORCE_ETM", + .etm = 0, + .client_err = GNUTLS_E_UNWANTED_ALGORITHM, + .server_err = -1 + } +}; + +void doit(void) +{ + unsigned i; + signal(SIGCHLD, ch_handler); + + for (i=0;i -#endif - -#include -#include -#include -#include -#include -#include "utils.h" - -#define SERVER_PUSH_ADD if (len > 512 + 5+32) fail("max record set to 512, len: %d\n", (int)len); -#include "eagain-common.h" - -#include "cert-common.h" - -/* This tests whether the max-record extension is respected on TLS. - */ - -const char *side; - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "%s|<%d>| %s", side, level, str); -} - -void doit(void) -{ - global_init(); - - int ret; - char buf[1024]; - /* Server stuff. */ - gnutls_certificate_credentials_t serverx509cred; - gnutls_session_t server; - int sret = GNUTLS_E_AGAIN; - /* Client stuff. */ - gnutls_certificate_credentials_t clientx509cred; - gnutls_session_t client; - int cret = GNUTLS_E_AGAIN; - - /* General init. */ - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(6); - - /* Init server */ - gnutls_certificate_allocate_credentials(&serverx509cred); - gnutls_certificate_set_x509_key_mem(serverx509cred, - &server2_cert, &server2_key, - GNUTLS_X509_FMT_PEM); - - gnutls_init(&server, GNUTLS_SERVER); - gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, - serverx509cred); - - gnutls_priority_set_direct(server, - "NORMAL", - NULL); - gnutls_transport_set_push_function(server, server_push); - gnutls_transport_set_pull_function(server, server_pull); - gnutls_transport_set_pull_timeout_function(server, - server_pull_timeout_func); - gnutls_transport_set_ptr(server, server); - - /* Init client */ - - ret = gnutls_certificate_allocate_credentials(&clientx509cred); - if (ret < 0) - exit(1); - - ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca2_cert, GNUTLS_X509_FMT_PEM); - if (ret < 0) - exit(1); - - ret = gnutls_init(&client, GNUTLS_CLIENT); - if (ret < 0) - exit(1); - - ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, - clientx509cred); - if (ret < 0) - exit(1); - - ret = gnutls_priority_set_direct(client, "NORMAL", NULL); - if (ret < 0) - exit(1); - - gnutls_record_set_max_size(client, 512); - gnutls_transport_set_push_function(client, client_push); - gnutls_transport_set_pull_function(client, client_pull); - gnutls_transport_set_pull_timeout_function(client, - client_pull_timeout_func); - gnutls_transport_set_ptr(client, client); - - HANDSHAKE(client, server); - - memset(buf, 1, sizeof(buf)); - ret = gnutls_record_send(server, buf, 513); - if (ret != 512 || ret < 0) { - gnutls_perror(ret); - exit(1); - } - success("did not send a 513-byte packet\n"); - - ret = gnutls_record_send(server, buf, 512); - if (ret < 0) { - gnutls_perror(ret); - exit(1); - } - success("did send a 512-byte packet\n"); - - gnutls_bye(client, GNUTLS_SHUT_RDWR); - gnutls_bye(server, GNUTLS_SHUT_RDWR); - - gnutls_deinit(client); - gnutls_deinit(server); - - gnutls_certificate_free_credentials(serverx509cred); - gnutls_certificate_free_credentials(clientx509cred); - - gnutls_global_deinit(); -} diff --git a/tests/tls-neg-ext-key.c b/tests/tls-neg-ext-key.c new file mode 100644 index 0000000000..ad3f4ac0c9 --- /dev/null +++ b/tests/tls-neg-ext-key.c @@ -0,0 +1,371 @@ +/* + * Copyright (C) 2017 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* This tests TLS negotiation using the gnutls_privkey_import_ext2() APIs */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +#endif +#include +#include +#include +#include +#include +#include "cert-common.h" +#include "eagain-common.h" +#include "utils.h" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d> %s", level, str); +} + +/* sha1 hash of "hello" string */ +const gnutls_datum_t sha1_hash_data = { + (void *) + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x2c\xd9\xae\xa9\x43\x4d", + 20 +}; + +const gnutls_datum_t sha256_hash_data = { + (void *) + "\x2c\xf2\x4d\xba\x5f\xb0\xa3\x0e\x26\xe8\x3b\x2a\xc5\xb9\xe2\x9e" + "\x1b\x16\x1e\x5c\x1f\xa7\x42\x5e\x73\x04\x33\x62\x93\x8b\x98\x24", + 32 +}; + +const gnutls_datum_t raw_data = { + (void *) "hello", + 5 +}; + + +struct key_cb_data { + gnutls_privkey_t rkey; /* the real thing */ +}; + +static +int key_cb_sign_func (gnutls_privkey_t key, void* userdata, const gnutls_datum_t * data, + gnutls_datum_t * signature) +{ + struct key_cb_data *p = userdata; + + return gnutls_privkey_sign_hash(p->rkey, 0, GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, data, signature); +} + +static void key_cb_deinit_func(gnutls_privkey_t key, void* userdata) +{ + struct key_cb_data *p = userdata; + gnutls_privkey_deinit(p->rkey); + free(userdata); +} + +#define testfail(fmt, ...) \ + fail("%s: "fmt, name, ##__VA_ARGS__) + +static gnutls_privkey_t load_virt_privkey(const char *name, const gnutls_datum_t *txtkey, gnutls_pk_algorithm_t pk, int exp_ret) +{ + gnutls_privkey_t privkey; + struct key_cb_data *userdata; + int ret; + + userdata = calloc(1, sizeof(struct key_cb_data)); + if (userdata == NULL) { + testfail("memory error\n"); + } + + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = gnutls_privkey_init(&userdata->rkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = + gnutls_privkey_import_x509_raw(userdata->rkey, txtkey, GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + testfail("gnutls_privkey_import\n"); + + ret = gnutls_privkey_import_ext2(privkey, pk, userdata, key_cb_sign_func, NULL, key_cb_deinit_func, GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE); + if (ret < 0) { + if (ret == exp_ret) { + gnutls_privkey_deinit(userdata->rkey); + gnutls_privkey_deinit(privkey); + free(userdata); + return NULL; + } + testfail("gnutls_privkey_import_ext2: %s\n", gnutls_strerror(ret)); + } + + return privkey; +} + +static +void try_with_key(const char *name, const char *client_prio, + gnutls_kx_algorithm_t client_kx, + gnutls_sign_algorithm_t server_sign_algo, + gnutls_sign_algorithm_t client_sign_algo, + const gnutls_datum_t *serv_cert, + gnutls_privkey_t key, + int exp_serv_err) +{ + int ret; + gnutls_pcert_st pcert_list[4]; + unsigned pcert_list_size; + /* Server stuff. */ + gnutls_certificate_credentials_t s_xcred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t c_xcred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN, version; + const char *err; + + /* General init. */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + reset_buffers(); + /* Init server */ + gnutls_certificate_allocate_credentials(&s_xcred); + + pcert_list_size = sizeof(pcert_list)/sizeof(pcert_list[0]); + ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size, + serv_cert, GNUTLS_X509_FMT_PEM, 0); + if (ret < 0) { + testfail("error in gnutls_pcert_list_import_x509_raw: %s\n", gnutls_strerror(ret)); + } + + ret = gnutls_certificate_set_key(s_xcred, NULL, 0, pcert_list, + pcert_list_size, key); + if (ret < 0) { + testfail("Could not set key/cert: %s\n", gnutls_strerror(ret)); + } + + assert(gnutls_init(&server, GNUTLS_SERVER) >= 0); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + s_xcred); + + assert(gnutls_priority_set_direct(server, + "NORMAL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:+VERS-SSL3.0:+ANON-ECDH:+ANON-DH:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519:+SIGN-EDDSA-ED25519", + NULL)>=0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + + ret = gnutls_certificate_allocate_credentials(&c_xcred); + if (ret < 0) + exit(1); + +#if 0 + ret = gnutls_certificate_set_x509_trust_mem(c_xcred, &ca_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); +#endif + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + c_xcred); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + ret = gnutls_priority_set_direct(client, client_prio, &err); + if (ret < 0) { + if (ret == GNUTLS_E_INVALID_REQUEST) + fprintf(stderr, "Error in %s\n", err); + exit(1); + } + if (exp_serv_err) { + HANDSHAKE_EXPECT(client, server, GNUTLS_E_AGAIN, exp_serv_err); + goto cleanup; + } else { + HANDSHAKE(client, server); + } + + if (gnutls_kx_get(client) != client_kx) { + testfail("%s: got unexpected key exchange algorithm: %s (expected %s)\n", name, gnutls_kx_get_name(gnutls_kx_get(client)), + gnutls_kx_get_name(client_kx)); + exit(1); + } + + /* test signature algorithm match */ + version = gnutls_protocol_get_version(client); + if (version >= GNUTLS_TLS1_2) { + ret = gnutls_sign_algorithm_get(server); + if (ret != (int)server_sign_algo && server_sign_algo != 0) { + testfail("%s: got unexpected server signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); + exit(1); + } + + ret = gnutls_sign_algorithm_get_client(server); + if (ret != (int)client_sign_algo && client_sign_algo != 0) { + testfail("%s: got unexpected client signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); + exit(1); + } + + ret = gnutls_sign_algorithm_get(client); + if (ret != (int)server_sign_algo && server_sign_algo != 0) { + testfail("%s: cl: got unexpected server signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); + exit(1); + } + + ret = gnutls_sign_algorithm_get_client(client); + if (ret != (int)client_sign_algo && client_sign_algo != 0) { + testfail("%s: cl: got unexpected client signature algorithm: %d/%s\n", name, ret, gnutls_sign_get_name(ret)); + exit(1); + } + } + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + cleanup: + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(s_xcred); + gnutls_certificate_free_credentials(c_xcred); +} + +typedef struct test_st { + const char *name; + gnutls_pk_algorithm_t pk; + const char *prio; + const gnutls_datum_t *cert; + const gnutls_datum_t *key; + gnutls_kx_algorithm_t exp_kx; + int exp_key_err; + int exp_serv_err; +} test_st; + +static const test_st tests[] = { + {.name = "TLS1.2 ecc key", + .pk = GNUTLS_PK_ECDSA, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:+ECDHE-ECDSA", + .cert = &server_ca3_localhost_ecc_cert, + .key = &server_ca3_ecc_key, + .exp_kx = GNUTLS_KX_ECDHE_ECDSA + }, + {.name = "TLS1.3 ecc key", + .pk = GNUTLS_PK_ECDSA, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .cert = &server_ca3_localhost_ecc_cert, + .key = &server_ca3_ecc_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "rsa-sign key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.1:+ECDHE-RSA:+ECDHE-ECDSA", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "rsa-sign key with rsa-pss sigs prioritized", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.1:+ECDHE-RSA:+ECDHE-ECDSA:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256:+SIGN-RSA-PSS-RSAE-SHA384:+SIGN-RSA-PSS-RSAE-SHA512:+SIGN-RSA-SHA256:+SIGN-RSA-SHA384:+SIGN-RSA-SHA512", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "TLS 1.2 rsa-pss-sign key", + .pk = GNUTLS_PK_RSA_PSS, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.1:+ECDHE-RSA:+ECDHE-ECDSA", + .cert = &server_ca3_rsa_pss2_cert, + .key = &server_ca3_rsa_pss2_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .exp_key_err = GNUTLS_E_INVALID_REQUEST + }, + {.name = "TLS 1.3 rsa-pss-sign key", + .pk = GNUTLS_PK_RSA_PSS, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+ECDHE-RSA:+ECDHE-ECDSA", + .cert = &server_ca3_rsa_pss2_cert, + .key = &server_ca3_rsa_pss2_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .exp_key_err = GNUTLS_E_INVALID_REQUEST + }, + {.name = "rsa-pss cert, rsa-sign key, no rsa-pss-rsae sigs", /* we expect the server to refuse negotiating */ + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA256:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA512:+SIGN-RSA-SHA256:+SIGN-RSA-SHA384:+SIGN-RSA-SHA512", + .cert = &server_ca3_rsa_pss_cert, + .key = &server_ca3_rsa_pss_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .exp_serv_err = GNUTLS_E_NO_CIPHER_SUITES + }, + {.name = "ed25519 cert, ed25519 key", /* we expect the server to refuse negotiating */ + .pk = GNUTLS_PK_EDDSA_ED25519, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA", + .cert = &server_ca3_eddsa_cert, + .key = &server_ca3_eddsa_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .exp_key_err = GNUTLS_E_INVALID_REQUEST + } +}; + +void doit(void) +{ + gnutls_privkey_t privkey; + unsigned int i; + + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + for (i=0;i + */ + +/* This tests TLS negotiation using the gnutls_privkey_import_ext2() APIs */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +#endif +#include +#include +#include +#include +#include +#include "cert-common.h" +#include "eagain-common.h" +#include "utils.h" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d> %s", level, str); +} + +const gnutls_datum_t raw_data = { + (void *) "hello", + 5 +}; + + +struct key_cb_data { + gnutls_privkey_t rkey; /* the real thing */ + unsigned pk; + unsigned sig; + unsigned bits; +}; + +static int key_cb_info_func(gnutls_privkey_t key, unsigned int flags, void *userdata) +{ + struct key_cb_data *p = userdata; + + if (flags & GNUTLS_PRIVKEY_INFO_PK_ALGO) + return p->pk; + else if (flags & GNUTLS_PRIVKEY_INFO_PK_ALGO_BITS) + return p->bits; + else if (flags & GNUTLS_PRIVKEY_INFO_HAVE_SIGN_ALGO) { + unsigned sig = GNUTLS_FLAGS_TO_SIGN_ALGO(flags); + + if (sig == p->sig) + return 1; + + return 0; + } + + return -1; +} + +static +int key_cb_sign_data_func(gnutls_privkey_t key, gnutls_sign_algorithm_t sig, + void* userdata, unsigned int flags, const gnutls_datum_t *data, + gnutls_datum_t *signature) +{ + struct key_cb_data *p = userdata; + + if (debug) + fprintf(stderr, "signing data with: %s\n", gnutls_sign_get_name(sig)); + return gnutls_privkey_sign_data2(p->rkey, sig, 0, data, signature); +} + +static +int key_cb_sign_hash_func(gnutls_privkey_t key, gnutls_sign_algorithm_t sig, + void* userdata, unsigned int flags, const gnutls_datum_t *data, + gnutls_datum_t *signature) +{ + struct key_cb_data *p = userdata; + + if (sig == GNUTLS_SIGN_RSA_RAW) { + if (debug) + fprintf(stderr, "signing digestinfo with: raw RSA\n"); + return gnutls_privkey_sign_hash(p->rkey, 0, GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, data, signature); + } else { + if (debug) + fprintf(stderr, "signing hash with: %s\n", gnutls_sign_get_name(sig)); + return gnutls_privkey_sign_hash2(p->rkey, sig, 0, data, signature); + } +} + +static +int key_cb_decrypt_func(gnutls_privkey_t key, void *userdata, const gnutls_datum_t *ciphertext, + gnutls_datum_t *plaintext) +{ + struct key_cb_data *p = userdata; + + return gnutls_privkey_decrypt_data(p->rkey, 0, ciphertext, plaintext); +} + +static void key_cb_deinit_func(gnutls_privkey_t key, void* userdata) +{ + struct key_cb_data *p = userdata; + gnutls_privkey_deinit(p->rkey); + free(userdata); +} + +#define testfail(fmt, ...) \ + fail("%s: "fmt, name, ##__VA_ARGS__) + +static gnutls_privkey_t load_virt_privkey(const char *name, const gnutls_datum_t *txtkey, + gnutls_pk_algorithm_t pk, gnutls_sign_algorithm_t sig, + int exp_ret) +{ + gnutls_privkey_t privkey; + struct key_cb_data *userdata; + int ret; + + userdata = calloc(1, sizeof(struct key_cb_data)); + if (userdata == NULL) { + testfail("memory error\n"); + } + + ret = gnutls_privkey_init(&privkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = gnutls_privkey_init(&userdata->rkey); + if (ret < 0) + testfail("gnutls_privkey_init\n"); + + ret = + gnutls_privkey_import_x509_raw(userdata->rkey, txtkey, GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + testfail("gnutls_privkey_import\n"); + + gnutls_privkey_get_pk_algorithm(userdata->rkey, &userdata->bits); + + userdata->pk = pk; + userdata->sig = sig; + + ret = gnutls_privkey_import_ext4(privkey, userdata, key_cb_sign_data_func, + key_cb_sign_hash_func, key_cb_decrypt_func, + key_cb_deinit_func, key_cb_info_func, + GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE); + if (ret < 0) { + if (ret == exp_ret) { + gnutls_privkey_deinit(userdata->rkey); + gnutls_privkey_deinit(privkey); + free(userdata); + return NULL; + } + testfail("gnutls_privkey_import_ext2: %s\n", gnutls_strerror(ret)); + } + + return privkey; +} + +static +void try_with_key(const char *name, const char *client_prio, + gnutls_kx_algorithm_t client_kx, + gnutls_sign_algorithm_t server_sign_algo, + gnutls_sign_algorithm_t client_sign_algo, + const gnutls_datum_t *serv_cert, + gnutls_privkey_t key, + int exp_serv_err) +{ + int ret; + gnutls_pcert_st pcert_list[4]; + unsigned pcert_list_size; + /* Server stuff. */ + gnutls_certificate_credentials_t s_xcred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t c_xcred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN, version; + const char *err; + + /* General init. */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + reset_buffers(); + /* Init server */ + gnutls_certificate_allocate_credentials(&s_xcred); + + pcert_list_size = sizeof(pcert_list)/sizeof(pcert_list[0]); + ret = gnutls_pcert_list_import_x509_raw(pcert_list, &pcert_list_size, + serv_cert, GNUTLS_X509_FMT_PEM, 0); + if (ret < 0) { + testfail("error in gnutls_pcert_list_import_x509_raw: %s\n", gnutls_strerror(ret)); + } + + ret = gnutls_certificate_set_key(s_xcred, NULL, 0, pcert_list, + pcert_list_size, key); + if (ret < 0) { + testfail("Could not set key/cert: %s\n", gnutls_strerror(ret)); + } + + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + s_xcred); + + assert(gnutls_priority_set_direct(server, "NORMAL", NULL)>=0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + + ret = gnutls_certificate_allocate_credentials(&c_xcred); + if (ret < 0) + exit(1); + +#if 0 + ret = gnutls_certificate_set_x509_trust_mem(c_xcred, &ca_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); +#endif + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + c_xcred); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + ret = gnutls_priority_set_direct(client, client_prio, &err); + if (ret < 0) { + if (ret == GNUTLS_E_INVALID_REQUEST) + fprintf(stderr, "Error in %s\n", err); + exit(1); + } + if (exp_serv_err) { + HANDSHAKE_EXPECT(client, server, GNUTLS_E_AGAIN, exp_serv_err); + goto cleanup; + } else { + HANDSHAKE(client, server); + } + + if (gnutls_kx_get(client) != client_kx) { + testfail("got unexpected key exchange algorithm: %s (expected %s)\n", gnutls_kx_get_name(gnutls_kx_get(client)), + gnutls_kx_get_name(client_kx)); + exit(1); + } + + /* test signature algorithm match */ + version = gnutls_protocol_get_version(client); + if (version >= GNUTLS_TLS1_2) { + ret = gnutls_sign_algorithm_get(server); + if (ret != (int)server_sign_algo && server_sign_algo != 0) { + testfail("got unexpected server signature algorithm: %d/%s\n", ret, gnutls_sign_get_name(ret)); + exit(1); + } + + ret = gnutls_sign_algorithm_get_client(server); + if (ret != (int)client_sign_algo && client_sign_algo != 0) { + testfail("got unexpected client signature algorithm: %d/%s\n", ret, gnutls_sign_get_name(ret)); + exit(1); + } + + ret = gnutls_sign_algorithm_get(client); + if (ret != (int)server_sign_algo && server_sign_algo != 0) { + testfail("cl: got unexpected server signature algorithm: %d/%s\n", ret, gnutls_sign_get_name(ret)); + exit(1); + } + + ret = gnutls_sign_algorithm_get_client(client); + if (ret != (int)client_sign_algo && client_sign_algo != 0) { + testfail("cl: got unexpected client signature algorithm: %d/%s\n", ret, gnutls_sign_get_name(ret)); + exit(1); + } + } + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + cleanup: + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(s_xcred); + gnutls_certificate_free_credentials(c_xcred); +} + +typedef struct test_st { + const char *name; + gnutls_pk_algorithm_t pk; + const char *prio; + const gnutls_datum_t *cert; + const gnutls_datum_t *key; + gnutls_kx_algorithm_t exp_kx; + unsigned sig; + int exp_key_err; + int exp_serv_err; +} test_st; + +static const test_st tests[] = { + {.name = "tls1.2 ecc key", + .pk = GNUTLS_PK_ECDSA, + .prio = "NORMAL:-KX-ALL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_localhost_ecc_cert, + .key = &server_ca3_ecc_key, + .sig = GNUTLS_SIGN_ECDSA_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_ECDSA + }, + {.name = "tls1.0 ecc key", + .pk = GNUTLS_PK_ECDSA, + .prio = "NORMAL:-KX-ALL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0", + .cert = &server_ca3_localhost_ecc_cert, + .key = &server_ca3_ecc_key, + .sig = GNUTLS_SIGN_ECDSA_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_ECDSA + }, + {.name = "tls1.1 ecc key", + .pk = GNUTLS_PK_ECDSA, + .prio = "NORMAL:-KX-ALL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1", + .cert = &server_ca3_localhost_ecc_cert, + .key = &server_ca3_ecc_key, + .sig = GNUTLS_SIGN_ECDSA_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_ECDSA + }, + {.name = "tls1.2 rsa-sign key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .sig = GNUTLS_SIGN_RSA_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "tls1.0 rsa-sign key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .sig = GNUTLS_SIGN_RSA_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "tls1.0 rsa-decrypt key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:-KX-ALL:+RSA:-VERS-ALL:+VERS-TLS1.0", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .exp_kx = GNUTLS_KX_RSA + }, + {.name = "tls1.1 rsa-sign key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .sig = GNUTLS_SIGN_RSA_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "tls1.2 rsa-sign key with rsa-pss sigs prioritized", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA256:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA512:+SIGN-RSA-SHA256:+SIGN-RSA-SHA384:+SIGN-RSA-SHA512:-VERS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .sig = GNUTLS_SIGN_RSA_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "tls1.2 rsa-pss-sign key", + .pk = GNUTLS_PK_RSA_PSS, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_rsa_pss2_cert, + .key = &server_ca3_rsa_pss2_key, + .sig = GNUTLS_SIGN_RSA_PSS_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + }, + {.name = "tls1.2 rsa-pss cert, rsa-sign key", /* we expect the server to refuse negotiating */ + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_rsa_pss_cert, + .key = &server_ca3_rsa_pss_key, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .exp_serv_err = GNUTLS_E_NO_CIPHER_SUITES + }, + {.name = "tls1.2 ed25519 cert, ed25519 key", + .pk = GNUTLS_PK_EDDSA_ED25519, + .prio = "NORMAL:+ECDHE-RSA:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_eddsa_cert, + .key = &server_ca3_eddsa_key, + .sig = GNUTLS_SIGN_EDDSA_ED25519, + .exp_kx = GNUTLS_KX_ECDHE_ECDSA, + }, + {.name = "tls1.2 rsa-decrypt key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:-KX-ALL:+RSA:-VERS-ALL:+VERS-TLS1.2", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .exp_kx = GNUTLS_KX_RSA + }, + {.name = "tls1.3 ecc key", + .pk = GNUTLS_PK_ECDSA, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .cert = &server_ca3_localhost_ecc_cert, + .key = &server_ca3_ecc_key, + .sig = GNUTLS_SIGN_ECDSA_SECP256R1_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "tls1.3 rsa-sign key", + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .cert = &server_ca3_localhost_cert, + .key = &server_ca3_key, + .sig = GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_RSA + }, + {.name = "tls1.3 rsa-pss-sign key", + .pk = GNUTLS_PK_RSA_PSS, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .cert = &server_ca3_rsa_pss2_cert, + .key = &server_ca3_rsa_pss2_key, + .sig = GNUTLS_SIGN_RSA_PSS_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + }, + {.name = "tls1.3 rsa-pss cert, rsa-sign key", /* we expect the server to attempt to downgrade to TLS 1.2, but it is not possible because it is not enabled */ + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .cert = &server_ca3_rsa_pss_cert, + .key = &server_ca3_rsa_pss_key, + .sig = GNUTLS_SIGN_RSA_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .exp_serv_err = GNUTLS_E_NO_CIPHER_SUITES + }, + {.name = "tls1.3 rsa-pss cert, rsa-sign key, downgrade to tls1.2", /* we expect the server to downgrade to TLS 1.2 and refuse negotiating */ + .pk = GNUTLS_PK_RSA, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2", + .cert = &server_ca3_rsa_pss_cert, + .key = &server_ca3_rsa_pss_key, + .sig = GNUTLS_SIGN_RSA_SHA256, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + .exp_serv_err = GNUTLS_E_NO_CIPHER_SUITES + }, + {.name = "tls1.3 ed25519 cert, ed25519 key", + .pk = GNUTLS_PK_EDDSA_ED25519, + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .cert = &server_ca3_eddsa_cert, + .key = &server_ca3_eddsa_key, + .sig = GNUTLS_SIGN_EDDSA_ED25519, + .exp_kx = GNUTLS_KX_ECDHE_RSA, + } +}; + +void doit(void) +{ + gnutls_privkey_t privkey; + unsigned int i; + + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + for (i=0;i +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +# include +# include +#endif +#include +#include "utils.h" +#include "cert-common.h" + +#define FLAG_CLI_DO_THREADS 1 +#define FLAG_FALSE_START 2 +#define FLAG_EARLY_START 4 + +#ifdef _WIN32 + +void doit(void) +{ + exit(77); +} + +#else + +/* Tests whether we can send and receive from different threads + * using DTLS, either as server or client. DTLS is a superset of + * TLS, so correct behavior under fork means TLS would operate too. + */ + +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +#define MSG "hello1111" +#define MSG2 "xxxxxxxxxxxx" + +#define NO_MSGS 128 + +static void *recv_thread(void *arg) +{ + gnutls_session_t session = arg; + int ret; + unsigned i; + char buf[64]; + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + for (i=0;i=0); + + if (flags & FLAG_FALSE_START) + init_flags |= GNUTLS_ENABLE_FALSE_START; + + assert(gnutls_init(&session, init_flags) >= 0); + gnutls_handshake_set_timeout(session, 60 * 1000); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + assert(gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred)>=0); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (flags & FLAG_CLI_DO_THREADS) + do_thread_stuff(session); + else + do_reflect_stuff(session); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +static void server(int fd, const char *prio, unsigned flags) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + unsigned init_flags = GNUTLS_SERVER; + + /* this must be called once in the program + */ + global_init(); + +#if 0 + if (debug) { + side = "server"; + gnutls_global_set_log_function(tls_log_func); + gnutls_global_set_log_level(4711); + } +#endif + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + if (flags & FLAG_EARLY_START) + init_flags |= GNUTLS_ENABLE_EARLY_START; + + assert(gnutls_init(&session, init_flags)>=0); + gnutls_handshake_set_timeout(session, 60 * 1000); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + } + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + if (flags & FLAG_CLI_DO_THREADS) + do_reflect_stuff(session); + else + do_thread_stuff(session); + + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static +void run(const char *str, const char *prio, unsigned flags) +{ + int fd[2]; + int ret; + pid_t child; + + if (str) + success("running %s\n", str); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + } + + if (child) { + int status; + /* parent */ + + close(fd[1]); + client(fd[0], prio, flags); + wait(&status); + check_wait_status(status); + } else { + close(fd[0]); + server(fd[1], prio, flags); + exit(0); + } +} + +void doit(void) +{ + signal(SIGPIPE, SIG_IGN); + run("default, threaded client", "NORMAL", FLAG_CLI_DO_THREADS); + run("default, threaded server", "NORMAL", 0); + run("tls1.2, threaded client", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2", FLAG_CLI_DO_THREADS); + run("tls1.2, threaded server", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2", 0); + run("tls1.2 false start, threaded client", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2", FLAG_CLI_DO_THREADS|FLAG_FALSE_START); + run("tls1.2 false start, threaded server", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2", FLAG_FALSE_START); + run("tls1.3 early start, threaded client", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", FLAG_CLI_DO_THREADS|FLAG_EARLY_START); + run("tls1.3 early start, threaded server", "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", FLAG_EARLY_START); +} +#endif /* _WIN32 */ diff --git a/tests/tls-record-size-limit-asym.c b/tests/tls-record-size-limit-asym.c new file mode 100644 index 0000000000..1fd8289883 --- /dev/null +++ b/tests/tls-record-size-limit-asym.c @@ -0,0 +1,277 @@ +/* + * Copyright (C) 2015, 2019 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos, Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include "utils.h" + +#include "eagain-common.h" + +#include "cert-common.h" + +/* This tests whether the max-record extension is respected on TLS. + */ + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +#define MAX_BUF 16384 +static char buffer[MAX_BUF]; + +struct test_exp_st { + int error; + size_t size; +}; + +struct test_st { + const char *prio; + size_t server_max_size; + size_t client_max_size; + + struct test_exp_st server_exp; + struct test_exp_st client_exp; +}; + +static void start(const struct test_st *test) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + + printf("testing server limit %d and client limit %d in %s\n", + (int)test->server_max_size, (int)test->client_max_size, + test->prio); + + global_init(); + + /* General init. */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + /* Init server */ + assert(gnutls_certificate_allocate_credentials(&serverx509cred) >= 0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server2_cert, &server2_key, + GNUTLS_X509_FMT_PEM) >= 0); + + assert(gnutls_init(&server, GNUTLS_SERVER) >= 0); + assert(gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred) >= 0); + + assert(gnutls_priority_set_direct(server, test->prio, NULL) >= 0); + + ret = gnutls_record_set_max_recv_size(server, test->server_max_size); + if (ret != test->server_exp.error) + fail("server: unexpected error from gnutls_record_set_max_recv_size()"); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_pull_timeout_function(server, + server_pull_timeout_func); + gnutls_transport_set_ptr(server, server); + + + /* Init client */ + assert(gnutls_certificate_allocate_credentials(&clientx509cred) >= 0); + + assert(gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca2_cert, GNUTLS_X509_FMT_PEM) >= 0); + + assert(gnutls_init(&client, GNUTLS_CLIENT) >= 0); + + assert(gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred) >= 0); + + assert(gnutls_priority_set_direct(client, test->prio, NULL) >= 0); + + ret = gnutls_record_set_max_recv_size(client, test->client_max_size); + if (ret != test->client_exp.error) + fail("client: unexpected error from gnutls_record_set_max_recv_size()"); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_pull_timeout_function(client, + client_pull_timeout_func); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + memset(buffer, 1, sizeof(buffer)); + ret = gnutls_record_send(server, buffer, test->client_max_size + 1); + if (ret < 0) { + gnutls_perror(ret); + exit(1); + } + if (ret != (int)test->server_exp.size) + fail("server: unexpected record size sent: %d (%d)\n", + ret, (int)test->server_exp.size); + success("server: did not send a %d-byte packet\n", + (int)test->server_exp.size); + + ret = gnutls_record_send(server, buffer, test->client_max_size); + if (ret < 0) { + gnutls_perror(ret); + exit(1); + } + success("server: did send a %d-byte packet\n", + (int)test->client_max_size); + + ret = gnutls_record_send(client, buffer, test->server_max_size + 1); + if (ret < 0) { + gnutls_perror(ret); + exit(1); + } + if (ret != (int)test->client_exp.size) + fail("client: unexpected record size sent: %d (%d)\n", + ret, (int)test->client_exp.size); + success("client: did not send a %d-byte packet\n", + (int)test->server_max_size + 1); + + ret = gnutls_record_send(client, buffer, test->server_max_size); + if (ret < 0) { + gnutls_perror(ret); + exit(1); + } + success("client: did send a %d-byte packet\n", + (int)test->server_max_size); + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); + + reset_buffers(); +} + +static const struct test_st tests[] = { + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2", + .server_max_size = 512, + .client_max_size = 16384, + .server_exp = { + .error = 0, + .size = 16384, + }, + .client_exp = { + .error = 0, + .size = 512, + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2", + .server_max_size = 16384, + .client_max_size = 512, + .server_exp = { + .error = 0, + .size = 512, + }, + .client_exp = { + .error = 0, + .size = 16384, + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .server_max_size = 512, + .client_max_size = 16384, + .server_exp = { + .error = 0, + .size = 16384, + }, + .client_exp = { + .error = 0, + .size = 512, + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .server_max_size = 16384, + .client_max_size = 512, + .server_exp = { + .error = 0, + .size = 512, + }, + .client_exp = { + .error = 0, + .size = 16384, + } + }, + { + .prio = "NORMAL", + .server_max_size = 512, + .client_max_size = 16384, + .server_exp = { + .error = 0, + .size = 16384, + }, + .client_exp = { + .error = 0, + .size = 512, + } + }, + { + .prio = "NORMAL", + .server_max_size = 16384, + .client_max_size = 512, + .server_exp = { + .error = 0, + .size = 512, + }, + .client_exp = { + .error = 0, + .size = 16384, + } + } +}; + +void doit(void) +{ + size_t i; + for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) + start(&tests[i]); +} diff --git a/tests/tls-record-size-limit.c b/tests/tls-record-size-limit.c new file mode 100644 index 0000000000..8346ee56d9 --- /dev/null +++ b/tests/tls-record-size-limit.c @@ -0,0 +1,519 @@ +/* + * Copyright (C) 2015 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include "utils.h" + +#define SKIP16(pos, total) { \ + uint16_t _s; \ + if (pos+2 > total) fail("error\n"); \ + _s = (msg->data[pos] << 8) | msg->data[pos+1]; \ + if ((size_t)(pos+2+_s) > total) fail("error\n"); \ + pos += 2+_s; \ + } + +#define SKIP8(pos, total) { \ + uint8_t _s; \ + if (pos+1 > total) fail("error\n"); \ + _s = msg->data[pos]; \ + if ((size_t)(pos+1+_s) > total) fail("error\n"); \ + pos += 1+_s; \ + } + +#define HANDSHAKE_SESSION_ID_POS 34 + +static size_t server_max_send_size; +static size_t client_max_send_size; + +#define SERVER_PUSH_ADD if (len > server_max_send_size + 5+32) fail("max record set to %d, len: %d\n", (int)server_max_send_size, (int)len); +#include "eagain-common.h" + +#include "cert-common.h" + +/* This tests whether the max-record extension is respected on TLS. + */ + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +struct handshake_cb_data_st { + gnutls_session_t session; + bool found_max_record_size; + bool found_record_size_limit; +}; + +static struct handshake_cb_data_st server_handshake_cb_data; +static struct handshake_cb_data_st client_handshake_cb_data; + +static int ext_callback(void *ctx, unsigned tls_id, const unsigned char *data, unsigned size) +{ + struct handshake_cb_data_st *cb_data = ctx; + if (tls_id == 1) { /* max record size */ + cb_data->found_max_record_size = 1; + } else if (tls_id == 28) { /* record size limit */ + cb_data->found_record_size_limit = 1; + } + return 0; +} + +static int handshake_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + int ret; + unsigned pos; + gnutls_datum_t mmsg; + + if (!post) + return 0; + + switch (htype) { + case GNUTLS_HANDSHAKE_CLIENT_HELLO: + assert(msg->size >= HANDSHAKE_SESSION_ID_POS); + pos = HANDSHAKE_SESSION_ID_POS; + SKIP8(pos, msg->size); + SKIP16(pos, msg->size); + SKIP8(pos, msg->size); + + mmsg.data = &msg->data[pos]; + mmsg.size = msg->size - pos; + ret = gnutls_ext_raw_parse(&server_handshake_cb_data, ext_callback, &mmsg, 0); + assert(ret >= 0); + break; + case GNUTLS_HANDSHAKE_ENCRYPTED_EXTENSIONS: + ret = gnutls_ext_raw_parse(&client_handshake_cb_data, ext_callback, msg, 0); + assert(ret >= 0); + break; + case GNUTLS_HANDSHAKE_SERVER_HELLO: + assert(msg->size >= HANDSHAKE_SESSION_ID_POS); + pos = HANDSHAKE_SESSION_ID_POS; + SKIP8(pos, msg->size); + pos += 3; + + mmsg.data = &msg->data[pos]; + mmsg.size = msg->size - pos; + ret = gnutls_ext_raw_parse(&client_handshake_cb_data, ext_callback, &mmsg, 0); + assert(ret >= 0); + break; + default: + break; + } + return 0; +} + +#define MAX_BUF 16384 +static char buffer[MAX_BUF]; + +struct test_exp_st { + int error; + size_t size; + bool max_record_size; + bool record_size_limit; +}; + +struct test_st { + const char *prio; + size_t server_max_size; + size_t client_max_size; + + struct test_exp_st server_exp; + struct test_exp_st client_exp; +}; + +static void check_exts(const struct test_exp_st *exp, + struct handshake_cb_data_st *data) +{ + if (exp->max_record_size && !data->found_max_record_size) + fail("%s: didn't see max_record_size\n", side); + if (!exp->max_record_size && data->found_max_record_size) + fail("%s: did see max_record_size\n", side); + + if (exp->record_size_limit && !data->found_record_size_limit) + fail("%s: didn't see record_size_limit\n", side); + if (!exp->record_size_limit && data->found_record_size_limit) + fail("%s: did see record_size_limit\n", side); +} + +static void start(const struct test_st *test) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + + memset(&server_handshake_cb_data, 0, sizeof(server_handshake_cb_data)); + memset(&client_handshake_cb_data, 0, sizeof(client_handshake_cb_data)); + + global_init(); + + /* General init. */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + /* Init server */ + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server2_cert, &server2_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + gnutls_priority_set_direct(server, test->prio, NULL); + + ret = gnutls_record_set_max_size(server, test->server_max_size); + if (ret != test->server_exp.error) + fail("server: unexpected error from gnutls_record_set_max_size()"); + if (ret == 0) + server_max_send_size = test->server_max_size; + else + server_max_send_size = MAX_BUF; + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_pull_timeout_function(server, + server_pull_timeout_func); + gnutls_transport_set_ptr(server, server); + + server_handshake_cb_data.session = server; + gnutls_handshake_set_hook_function(server, + GNUTLS_HANDSHAKE_CLIENT_HELLO, + GNUTLS_HOOK_POST, + handshake_callback); + + + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca2_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_priority_set_direct(client, test->prio, NULL); + if (ret < 0) + exit(1); + + ret = gnutls_record_set_max_size(client, test->client_max_size); + if (ret != test->client_exp.error) + fail("client: unexpected error from gnutls_record_set_max_size()"); + if (ret == 0) + client_max_send_size = test->client_max_size; + else + client_max_send_size = MAX_BUF; + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_pull_timeout_function(client, + client_pull_timeout_func); + gnutls_transport_set_ptr(client, client); + + client_handshake_cb_data.session = client; + gnutls_handshake_set_hook_function(client, + GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_POST, + handshake_callback); + + HANDSHAKE(client, server); + + memset(buffer, 1, sizeof(buffer)); + ret = gnutls_record_send(server, buffer, server_max_send_size + 1); + if (ret < 0) { + gnutls_perror(ret); + exit(1); + } + if (ret != (int)test->server_exp.size) + fail("server: unexpected record size sent: %d (%d)\n", + ret, (int)test->server_exp.size); + success("server: did not send a %d-byte packet\n", (int)server_max_send_size + 1); + + ret = gnutls_record_send(server, buffer, server_max_send_size); + if (ret < 0) { + gnutls_perror(ret); + exit(1); + } + success("server: did send a %d-byte packet\n", (int)server_max_send_size); + + ret = gnutls_record_send(client, buffer, client_max_send_size + 1); + if (ret < 0) { + gnutls_perror(ret); + exit(1); + } + if (ret != (int)test->client_exp.size) + fail("client: unexpected record size sent: %d (%d)\n", + ret, (int)test->client_exp.size); + success("client: did not send a %d-byte packet\n", (int)client_max_send_size + 1); + + ret = gnutls_record_send(client, buffer, client_max_send_size); + if (ret < 0) { + gnutls_perror(ret); + exit(1); + } + success("client: did send a %d-byte packet\n", (int)client_max_send_size); + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); + + reset_buffers(); + + check_exts(&test->server_exp, + &server_handshake_cb_data); + check_exts(&test->client_exp, + &client_handshake_cb_data); +} + +static const struct test_st tests[] = { + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2", + .server_max_size = 511, + .client_max_size = 511, + .server_exp = { + .error = GNUTLS_E_INVALID_REQUEST, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + }, + .client_exp = { + .error = GNUTLS_E_INVALID_REQUEST, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2", + .server_max_size = 512, + .client_max_size = 512, + .server_exp = { + .error = 0, + .size = 512, + .max_record_size = 1, + .record_size_limit = 1 + }, + .client_exp = { + .error = 0, + .size = 512, + .max_record_size = 0, + .record_size_limit = 1 + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2", + .server_max_size = 8192, + .client_max_size = 8192, + .server_exp = { + .error = 0, + .size = 8192, + .max_record_size = 0, + .record_size_limit = 1 + }, + .client_exp = { + .error = 0, + .size = 8192, + .max_record_size = 0, + .record_size_limit = 1 + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2", + .server_max_size = 16384, + .client_max_size = 16384, + .server_exp = { + .error = 0, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + }, + .client_exp = { + .error = 0, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2", + .server_max_size = 16385, + .client_max_size = 16385, + .server_exp = { + .error = GNUTLS_E_INVALID_REQUEST, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + }, + .client_exp = { + .error = GNUTLS_E_INVALID_REQUEST, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + } + }, + + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .server_max_size = 511, + .client_max_size = 511, + .server_exp = { + .error = GNUTLS_E_INVALID_REQUEST, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + }, + .client_exp = { + .error = GNUTLS_E_INVALID_REQUEST, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .server_max_size = 512, + .client_max_size = 512, + .server_exp = { + .error = 0, + .size = 512, + .max_record_size = 1, + .record_size_limit = 1 + }, + .client_exp = { + .error = 0, + .size = 512, + .max_record_size = 0, + .record_size_limit = 1 + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .server_max_size = 8192, + .client_max_size = 8192, + .server_exp = { + .error = 0, + .size = 8192, + .max_record_size = 0, + .record_size_limit = 1 + }, + .client_exp = { + .error = 0, + .size = 8192, + .max_record_size = 0, + .record_size_limit = 1 + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .server_max_size = 16384, + .client_max_size = 16384, + .server_exp = { + .error = 0, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + }, + .client_exp = { + .error = 0, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .server_max_size = 16383, + .client_max_size = 16384, + .server_exp = { + .error = 0, + .size = 16383, + .max_record_size = 0, + .record_size_limit = 1 + }, + .client_exp = { + .error = 0, + .size = 16383, + .max_record_size = 0, + .record_size_limit = 1 + } + }, + { + .prio = "NORMAL:-VERS-ALL:+VERS-TLS1.3", + .server_max_size = 16385, + .client_max_size = 16385, + .server_exp = { + .error = GNUTLS_E_INVALID_REQUEST, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + }, + .client_exp = { + .error = GNUTLS_E_INVALID_REQUEST, + .size = 16384, + .max_record_size = 0, + .record_size_limit = 1 + } + } +}; + +void doit(void) +{ + size_t i; + for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) + start(&tests[i]); +} diff --git a/tests/tls-rehandshake-cert-2.c b/tests/tls-rehandshake-cert-2.c deleted file mode 100644 index cd89b8fe62..0000000000 --- a/tests/tls-rehandshake-cert-2.c +++ /dev/null @@ -1,402 +0,0 @@ -/* - * Copyright (C) 2014 Nikos Mavrogiannopoulos - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#if defined(_WIN32) - -int main() -{ - exit(77); -} - -#else - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" -#include "cert-common.h" - -static void terminate(void); - -/* This program tests client and server initiated rehandshake. - */ - -static void server_log_func(int level, const char *str) -{ - fprintf(stderr, "server|<%d>| %s", level, str); -} - -static void client_log_func(int level, const char *str) -{ - fprintf(stderr, "client|<%d>| %s", level, str); -} - - -#define MAX_BUF 1024 - -static void client(int fd, unsigned test) -{ - int ret; - char buffer[MAX_BUF + 1]; - gnutls_anon_client_credentials_t anoncred; - gnutls_certificate_credentials_t x509_cred; - gnutls_session_t session; - /* Need to enable anonymous KX specifically. */ - - global_init(); - memset(buffer, 2, sizeof(buffer)); - - if (debug) { - gnutls_global_set_log_function(client_log_func); - gnutls_global_set_log_level(3); - } - - gnutls_anon_allocate_client_credentials(&anoncred); - gnutls_certificate_allocate_credentials(&x509_cred); - - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); - gnutls_handshake_set_timeout(session, 20 * 1000); - - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL", NULL); - - /* put the anonymous credentials to the current session - */ - gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - - /* Perform the TLS handshake - */ - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - - if (ret < 0) { - fail("client: Handshake failed\n"); - gnutls_perror(ret); - exit(1); - } else { - if (debug) - success("client: Handshake was completed\n"); - } - - if (debug) - success("client: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - if (debug) - success("client: test %d\n", test); - - if (test != 0) { - ret = gnutls_handshake(session); - if (ret != GNUTLS_E_GOT_APPLICATION_DATA) { - fail("client: error in code after rehandshake: %s\n", - gnutls_strerror(ret)); - exit(1); - } - - do { - do { - ret = - gnutls_record_recv(session, buffer, - MAX_BUF); - } while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); - } while (ret > 0); - - } else { - do { - do { - ret = - gnutls_record_recv(session, buffer, - MAX_BUF); - } while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); - } while (ret > 0); - - if (ret != GNUTLS_E_REHANDSHAKE) { - fail("client: Error receiving rehandshake: %s\n", - gnutls_strerror(ret)); - exit(1); - } - - do { - ret = - gnutls_record_send(session, buffer, sizeof(buffer)); - } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); - - if (ret < 0) { - fail("Error sending %d byte packet: %s\n", - (int)sizeof(buffer), gnutls_strerror(ret)); - exit(1); - } - - do { - ret = - gnutls_record_send(session, buffer, sizeof(buffer)); - } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); - - if (ret < 0) { - fail("Error sending %d byte packet: %s\n", - (int)sizeof(buffer), gnutls_strerror(ret)); - exit(1); - } - - } - - gnutls_bye(session, GNUTLS_SHUT_WR); - - close(fd); - - gnutls_deinit(session); - - gnutls_anon_free_client_credentials(anoncred); - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); -} - -/* These are global */ -pid_t child; - -static void terminate(void) -{ - kill(child, SIGTERM); - exit(1); -} - -static void server(int fd, unsigned test) -{ - int ret; - char buffer[MAX_BUF + 1]; - gnutls_session_t session; - gnutls_anon_server_credentials_t anoncred; - gnutls_certificate_credentials_t x509_cred; - - /* this must be called once in the program - */ - global_init(); - memset(buffer, 0, sizeof(buffer)); - - if (debug) { - gnutls_global_set_log_function(server_log_func); - gnutls_global_set_log_level(3); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, - &server_key, GNUTLS_X509_FMT_PEM); - - gnutls_anon_allocate_server_credentials(&anoncred); - - gnutls_init(&session, GNUTLS_SERVER); - gnutls_handshake_set_timeout(session, 20 * 1000); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL", NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - if (ret < 0) { - close(fd); - gnutls_deinit(session); - fail("server: Handshake has failed (%s)\n\n", - gnutls_strerror(ret)); - terminate(); - } - if (debug) - success("server: Handshake was completed\n"); - - if (debug) - success("server: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - if (debug) - success("server: test %d\n", test); - - if (test != 0) { - - do { - do { - ret = - gnutls_record_recv(session, buffer, - MAX_BUF); - } while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); - } while (ret > 0); - - if (ret != GNUTLS_E_REHANDSHAKE) { - fail("server: Error receiving client handshake request: %s\n", gnutls_strerror(ret)); - terminate(); - } - - do { - ret = - gnutls_record_send(session, buffer, sizeof(buffer)); - } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); - - if (ret < 0) { - fail("Error sending %d byte packet: %s\n", - (int)sizeof(buffer), gnutls_strerror(ret)); - terminate(); - } - - } else { - if (debug) - success("server: sending rehandshake request\n"); - - ret = gnutls_rehandshake(session); - if (ret < 0) { - fail("Error sending %d byte packet: %s\n", - (int)sizeof(buffer), gnutls_strerror(ret)); - terminate(); - } - - if (debug) - success("server: starting handshake\n"); - - ret = gnutls_handshake(session); - - if (ret != GNUTLS_E_GOT_APPLICATION_DATA) { - fail("server: didn't receive GNUTLS_E_GOT_APPLICATION_DATA: %s\n", gnutls_strerror(ret)); - terminate(); - } - - if (debug) - success("server: got application data error code: %s\n", - gnutls_strerror(ret)); - - do { - do { - ret = - gnutls_record_recv(session, buffer, - MAX_BUF); - } while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); - } while (ret > 0); - - if (debug) - success("server: final ret: %s\n", - gnutls_strerror(ret)); - - if (ret < 0) { - fail("Error receiving final packet: %s\n", - gnutls_strerror(ret)); - terminate(); - } - - } - - /* do not wait for the peer to close the connection. - */ - gnutls_bye(session, GNUTLS_SHUT_WR); - - close(fd); - gnutls_deinit(session); - - gnutls_anon_free_server_credentials(anoncred); - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); - - if (debug) - success("server: finished\n"); -} - -static void start(unsigned test) -{ - int fd[2]; - int ret; - int status = 0; - - ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); - if (ret < 0) { - perror("socketpair"); - exit(1); - } - - child = fork(); - if (child < 0) { - perror("fork"); - fail("fork"); - exit(1); - } - - if (child) { - /* parent */ - close(fd[1]); - server(fd[0], test); - wait(&status); - check_wait_status(status); - } else { - close(fd[0]); - client(fd[1], test); - exit(0); - } -} - -static void ch_handler(int sig) -{ - return; -} - -void doit(void) -{ - signal(SIGCHLD, ch_handler); - signal(SIGPIPE, SIG_IGN); - -// start(0); - start(1); -} - -#endif /* _WIN32 */ diff --git a/tests/tls-rehandshake-cert-3.c b/tests/tls-rehandshake-cert-3.c deleted file mode 100644 index 8ca5b39c00..0000000000 --- a/tests/tls-rehandshake-cert-3.c +++ /dev/null @@ -1,312 +0,0 @@ -/* - * Copyright (C) 2014 Nikos Mavrogiannopoulos - * Copyright (C) 2017 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#if defined(_WIN32) - -int main() -{ - exit(77); -} - -#else - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "utils.h" -#include "cert-common.h" - -static void terminate(void); - -/* This program tests client and server initiated rehandshake. - * On the initial handshake a certificate is requested from the - * client, while on the following up not. - */ - -static void server_log_func(int level, const char *str) -{ - fprintf(stderr, "server|<%d>| %s", level, str); -} - -static void client_log_func(int level, const char *str) -{ - fprintf(stderr, "client|<%d>| %s", level, str); -} - -#define MAX_BUF 1024 - -static void client(int fd) -{ - int ret; - char buffer[MAX_BUF + 1]; - gnutls_certificate_credentials_t x509_cred; - gnutls_session_t session; - - global_init(); - memset(buffer, 2, sizeof(buffer)); - - if (debug) { - gnutls_global_set_log_function(client_log_func); - gnutls_global_set_log_level(3); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - gnutls_certificate_set_x509_key_mem(x509_cred, &cli_cert, - &cli_key, GNUTLS_X509_FMT_PEM); - - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); - gnutls_handshake_set_timeout(session, 20 * 1000); - - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL", NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - gnutls_transport_set_int(session, fd); - - /* Perform the TLS handshake - */ - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - - if (ret < 0) { - fail("client: Handshake failed\n"); - gnutls_perror(ret); - exit(1); - } else { - if (debug) - success("client: Handshake was completed\n"); - } - - if (debug) - success("client: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - ret = gnutls_handshake(session); - if (ret != 0) { - fail("client: error in code after rehandshake: %s\n", - gnutls_strerror(ret)); - exit(1); - } - - do { - do { - ret = - gnutls_record_recv(session, buffer, - MAX_BUF); - } while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); - } while (ret > 0); - - if (ret != 0) { - fail("client: Error receiving: %s\n", - gnutls_strerror(ret)); - exit(1); - } - - gnutls_bye(session, GNUTLS_SHUT_WR); - - close(fd); - - gnutls_deinit(session); - - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); -} - -/* These are global */ -pid_t child; - -static void terminate(void) -{ - kill(child, SIGTERM); - exit(1); -} - -static void server(int fd) -{ - int ret; - char buffer[MAX_BUF + 1]; - gnutls_session_t session; - gnutls_certificate_credentials_t x509_cred; - - /* this must be called once in the program - */ - global_init(); - memset(buffer, 0, sizeof(buffer)); - - if (debug) { - gnutls_global_set_log_function(server_log_func); - gnutls_global_set_log_level(4); - } - - gnutls_certificate_allocate_credentials(&x509_cred); - gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, - &server_key, GNUTLS_X509_FMT_PEM); - - gnutls_init(&session, GNUTLS_SERVER); - gnutls_handshake_set_timeout(session, 20 * 1000); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL", NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - gnutls_certificate_server_set_request(session, GNUTLS_CERT_REQUIRE); - - gnutls_transport_set_int(session, fd); - - do { - ret = gnutls_handshake(session); - } - while (ret < 0 && gnutls_error_is_fatal(ret) == 0); - if (ret < 0) { - close(fd); - gnutls_deinit(session); - fail("server: Handshake has failed (%s)\n\n", - gnutls_strerror(ret)); - terminate(); - } - if (debug) - success("server: Handshake was completed\n"); - - if (debug) - success("server: TLS version is: %s\n", - gnutls_protocol_get_name - (gnutls_protocol_get_version(session))); - - gnutls_certificate_server_set_request(session, GNUTLS_CERT_IGNORE); - - do { - do { - ret = - gnutls_record_recv(session, buffer, - MAX_BUF); - } while (ret == GNUTLS_E_AGAIN - || ret == GNUTLS_E_INTERRUPTED); - } while (ret > 0); - - if (ret != GNUTLS_E_REHANDSHAKE) { - fail("server: Error receiving client handshake request: %s\n", gnutls_strerror(ret)); - terminate(); - } - - if (debug) - success("server: starting handshake\n"); - - ret = gnutls_handshake(session); - if (ret != 0) { - fail("server: unexpected error: %s\n", gnutls_strerror(ret)); - terminate(); - } - - ret = gnutls_record_send(session, "hello", 4); - if (ret < 0) { - fail("Error sending data: %s\n", - gnutls_strerror(ret)); - terminate(); - } - - /* do not wait for the peer to close the connection. - */ - gnutls_bye(session, GNUTLS_SHUT_WR); - - close(fd); - gnutls_deinit(session); - - gnutls_certificate_free_credentials(x509_cred); - - gnutls_global_deinit(); - - if (debug) - success("server: finished\n"); -} - -static void start(void) -{ - int fd[2]; - int ret; - int status = 0; - - ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); - if (ret < 0) { - perror("socketpair"); - exit(1); - } - - child = fork(); - if (child < 0) { - perror("fork"); - fail("fork"); - exit(1); - } - - if (child) { - /* parent */ - close(fd[1]); - server(fd[0]); - wait(&status); - check_wait_status(status); - } else { - close(fd[0]); - client(fd[1]); - exit(0); - } -} - -static void ch_handler(int sig) -{ - return; -} - -void doit(void) -{ - signal(SIGCHLD, ch_handler); - signal(SIGPIPE, SIG_IGN); - - start(); -} - -#endif /* _WIN32 */ diff --git a/tests/tls-rehandshake-cert.c b/tests/tls-rehandshake-cert.c deleted file mode 100644 index 98e3d12be8..0000000000 --- a/tests/tls-rehandshake-cert.c +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2008-2012 Free Software Foundation, Inc. - * - * Author: Simon Josefsson - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include "utils.h" -#include "eagain-common.h" -#include "cert-common.h" - -/* This program tests server initiated rehandshake */ - -const char *side = ""; - -static void tls_log_func(int level, const char *str) -{ - fprintf(stderr, "%s|<%d>| %s", side, level, str); -} - -void doit(void) -{ - int exit_code = EXIT_SUCCESS; - /* Server stuff. */ - gnutls_certificate_credentials_t serverx509cred; - gnutls_session_t server; - int sret = GNUTLS_E_AGAIN; - /* Client stuff. */ - gnutls_certificate_credentials_t clientx509cred; - gnutls_session_t client; - int cret = GNUTLS_E_AGAIN; - - /* General init. */ - global_init(); - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(2); - - /* Init server */ - gnutls_certificate_allocate_credentials(&serverx509cred); - gnutls_certificate_set_x509_key_mem(serverx509cred, - &server_cert, &server_key, - GNUTLS_X509_FMT_PEM); - gnutls_init(&server, GNUTLS_SERVER); - gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, - serverx509cred); - gnutls_priority_set_direct(server, "NORMAL", NULL); - gnutls_transport_set_push_function(server, server_push); - gnutls_transport_set_pull_function(server, server_pull); - gnutls_transport_set_ptr(server, server); - - /* Init client */ - gnutls_certificate_allocate_credentials(&clientx509cred); - gnutls_init(&client, GNUTLS_CLIENT); - gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, - clientx509cred); - gnutls_priority_set_direct(client, "NORMAL", NULL); - gnutls_transport_set_push_function(client, client_push); - gnutls_transport_set_pull_function(client, client_pull); - gnutls_transport_set_ptr(client, client); - - HANDSHAKE(client, server); - - sret = gnutls_rehandshake(server); - if (debug) { - tls_log_func(0, "gnutls_rehandshake (server)...\n"); - tls_log_func(0, gnutls_strerror(sret)); - tls_log_func(0, "\n"); - } - - { - ssize_t n; - char b[1]; - n = gnutls_record_recv(client, b, 1); - if (n != GNUTLS_E_REHANDSHAKE) - abort(); - } - - HANDSHAKE(client, server); - - gnutls_bye(client, GNUTLS_SHUT_RDWR); - gnutls_bye(server, GNUTLS_SHUT_RDWR); - - gnutls_deinit(client); - gnutls_deinit(server); - - gnutls_certificate_free_credentials(serverx509cred); - gnutls_certificate_free_credentials(clientx509cred); - - gnutls_global_deinit(); - - if (debug) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } -} diff --git a/tests/tls-session-ext-override.c b/tests/tls-session-ext-override.c new file mode 100644 index 0000000000..e83967c328 --- /dev/null +++ b/tests/tls-session-ext-override.c @@ -0,0 +1,317 @@ +/* + * Copyright (C) 2004-2016 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Thierry Quemerais, Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* This program tests whether an extension is exchanged when registered + * at the session level */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#if !defined(_WIN32) +#include +#include +#endif +#include +#include + +#include "utils.h" +#include "cert-common.h" + +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static int TLSEXT_TYPE_client_sent = 0; +static int TLSEXT_TYPE_client_received = 0; +static int TLSEXT_TYPE_server_sent = 0; +static int TLSEXT_TYPE_server_received = 0; +static int overridden_extension = -1; + +static const unsigned char ext_data[] = +{ + 0xFE, + 0xED +}; + +static int ext_recv_client_params(gnutls_session_t session, const unsigned char *buf, size_t buflen) +{ + if (buflen != sizeof(ext_data)) + fail("ext_recv_client_params: Invalid input buffer length\n"); + + if (memcmp(buf, ext_data, sizeof(ext_data)) != 0) + fail("ext_recv_client_params: Invalid input buffer data\n"); + + TLSEXT_TYPE_client_received = 1; + + gnutls_ext_set_data(session, overridden_extension, session); + + return 0; //Success +} + +static int ext_send_client_params(gnutls_session_t session, gnutls_buffer_t extdata) +{ + TLSEXT_TYPE_client_sent = 1; + gnutls_buffer_append_data(extdata, ext_data, sizeof(ext_data)); + return sizeof(ext_data); +} + +static int ext_recv_server_params(gnutls_session_t session, const unsigned char *buf, size_t buflen) +{ + if (buflen != sizeof(ext_data)) + fail("ext_recv_server_params: Invalid input buffer length\n"); + + if (memcmp(buf, ext_data, sizeof(ext_data)) != 0) + fail("ext_recv_server_params: Invalid input buffer data\n"); + + TLSEXT_TYPE_server_received = 1; + + return 0; //Success +} + +static int ext_send_server_params(gnutls_session_t session, gnutls_buffer_t extdata) +{ + TLSEXT_TYPE_server_sent = 1; + gnutls_buffer_append_data(extdata, ext_data, sizeof(ext_data)); + return sizeof(ext_data); +} + +static void client(int sd) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t clientx509cred; + void *p; + + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "client"; + + gnutls_certificate_allocate_credentials(&clientx509cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + /* Use default priorities */ + gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", + NULL); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_session_ext_register(session, "ext_client", overridden_extension, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL, 0); + if (ret != GNUTLS_E_ALREADY_REGISTERED) + fail("client: register existing extension (%d)\n", overridden_extension); + + ret = gnutls_session_ext_register(session, "ext_client", 0, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL, GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL); + if (ret != GNUTLS_E_ALREADY_REGISTERED) + fail("client: register extension %d\n", 0); + + ret = gnutls_session_ext_register(session, "ext_client", overridden_extension, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL, GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL); + if (ret < 0) + fail("client: register extension (%d)\n", overridden_extension); + + /* Perform the TLS handshake + */ + ret = gnutls_handshake(session); + + if (ret < 0) { + fail("[%d]: client: Handshake failed\n", overridden_extension); + gnutls_perror(ret); + goto end; + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (TLSEXT_TYPE_client_sent != 1 || TLSEXT_TYPE_client_received != 1) + fail("client: extension not properly sent/received\n"); + + ret = gnutls_ext_get_data(session, overridden_extension, &p); + if (ret < 0) { + fail("gnutls_ext_get_data: %s\n", gnutls_strerror(ret)); + } + + if (p != session) { + fail("client: gnutls_ext_get_data failed\n"); + } + + gnutls_bye(session, GNUTLS_SHUT_RDWR); + +end: + close(sd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} + +static void server(int sd) +{ + gnutls_certificate_credentials_t serverx509cred; + int ret; + gnutls_session_t session; + + /* this must be called once in the program + */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "server"; + + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", + NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + ret = gnutls_session_ext_register(session, "ext_server", overridden_extension, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL, 0); + if (ret != GNUTLS_E_ALREADY_REGISTERED) + fail("client: register existing extension\n"); + + ret = gnutls_session_ext_register(session, "ext_server", overridden_extension, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL, GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL); + if (ret < 0) + fail("client: register extension\n"); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_handshake(session); + if (ret < 0) { + close(sd); + gnutls_deinit(session); + fail("[%d]: server: Handshake has failed (%s)\n\n", + overridden_extension, gnutls_strerror(ret)); + return; + } + if (debug) + success("server: Handshake was completed\n"); + + if (TLSEXT_TYPE_server_sent != 1 || TLSEXT_TYPE_server_received != 1) + fail("server: extension not properly sent/received\n"); + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(serverx509cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void override_ext(unsigned extension) +{ + pid_t child; + int sockets[2]; + int err; + + signal(SIGPIPE, SIG_IGN); + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + TLSEXT_TYPE_client_sent = 0; + TLSEXT_TYPE_client_received = 0; + TLSEXT_TYPE_server_sent = 0; + TLSEXT_TYPE_server_received = 0; + overridden_extension = extension; + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status; + /* parent */ + close(sockets[1]); + server(sockets[0]); + wait(&status); + check_wait_status(status); + } else { + close(sockets[0]); + client(sockets[1]); + exit(0); + } +} + +void doit(void) +{ + override_ext(1); + override_ext(21); +} + +#endif /* _WIN32 */ diff --git a/tests/tls-session-ext-register.c b/tests/tls-session-ext-register.c index 4d1e2459e1..6e44b9e60e 100644 --- a/tests/tls-session-ext-register.c +++ b/tests/tls-session-ext-register.c @@ -15,9 +15,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ /* This program tests whether an extension is exchanged when registered @@ -49,6 +48,7 @@ int main(int argc, char **argv) #endif #include #include +#include #include "utils.h" #include "cert-common.h" @@ -69,19 +69,34 @@ static int TLSEXT_TYPE_server_sent = 0; static int TLSEXT_TYPE_server_received = 0; static int ign_extension_called = 0; +static void reset_vars(void) +{ + TLSEXT_TYPE_client_sent = 0; + TLSEXT_TYPE_client_received = 0; + TLSEXT_TYPE_server_sent = 0; + TLSEXT_TYPE_server_received = 0; + ign_extension_called = 0; +} + static const unsigned char ext_data[] = { 0xFE, 0xED }; +#define myfail(fmt, ...) \ + fail("%s: "fmt, name, ##__VA_ARGS__) + static int ext_recv_client_params(gnutls_session_t session, const unsigned char *buf, size_t buflen) { + const char *name; + name = gnutls_session_get_ptr(session); + if (buflen != sizeof(ext_data)) - fail("ext_recv_client_params: Invalid input buffer length\n"); + myfail("ext_recv_client_params: Invalid input buffer length\n"); if (memcmp(buf, ext_data, sizeof(ext_data)) != 0) - fail("ext_recv_client_params: Invalid input buffer data\n"); + myfail("ext_recv_client_params: Invalid input buffer data\n"); TLSEXT_TYPE_client_received = 1; @@ -110,11 +125,15 @@ static int ext_send_client_ign_params(gnutls_session_t session, gnutls_buffer_t static int ext_recv_server_params(gnutls_session_t session, const unsigned char *buf, size_t buflen) { + const char *name; + + name = gnutls_session_get_ptr(session); + if (buflen != sizeof(ext_data)) - fail("ext_recv_server_params: Invalid input buffer length\n"); + myfail("ext_recv_server_params: Invalid input buffer length\n"); if (memcmp(buf, ext_data, sizeof(ext_data)) != 0) - fail("ext_recv_server_params: Invalid input buffer data\n"); + myfail("ext_recv_server_params: Invalid input buffer data\n"); TLSEXT_TYPE_server_received = 1; @@ -128,29 +147,26 @@ static int ext_send_server_params(gnutls_session_t session, gnutls_buffer_t extd return sizeof(ext_data); } -static void client(int sd) +static void client(int sd, const char *name, const char *prio, unsigned flags, unsigned expected_ok) { int ret; gnutls_session_t session; gnutls_certificate_credentials_t clientx509cred; + const char *ext_name; void *p; - global_init(); - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(4711); - side = "client"; - gnutls_certificate_allocate_credentials(&clientx509cred); + assert(gnutls_certificate_allocate_credentials(&clientx509cred) >= 0); /* Initialize TLS session */ - gnutls_init(&session, GNUTLS_CLIENT); + assert(gnutls_init(&session, GNUTLS_CLIENT) >= 0); + gnutls_session_set_ptr(session, (void*)name); /* Use default priorities */ - gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", - NULL); + assert(gnutls_priority_set_direct(session, prio, + NULL)>=0); /* put the anonymous credentials to the current session */ @@ -160,149 +176,169 @@ static void client(int sd) gnutls_transport_set_int(session, sd); gnutls_handshake_set_timeout(session, 20 * 1000); - ret = gnutls_session_ext_register(session, "ext_ign", TLSEXT_TYPE_IGN, GNUTLS_EXT_TLS, ext_recv_client_ign_params, ext_send_client_ign_params, NULL, NULL, NULL, 0); + ret = gnutls_session_ext_register(session, "ext_ign", TLSEXT_TYPE_IGN, GNUTLS_EXT_TLS, ext_recv_client_ign_params, ext_send_client_ign_params, NULL, NULL, NULL, flags); if (ret < 0) - fail("client: register extension\n"); + myfail("client: register extension\n"); - ret = gnutls_session_ext_register(session, "ext_client", TLSEXT_TYPE_SAMPLE, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL, 0); + ext_name = gnutls_ext_get_name2(session, TLSEXT_TYPE_IGN, GNUTLS_EXT_ANY); + if (ext_name == NULL || strcmp(ext_name, "ext_ign")) + myfail("client: retrieve name of extension %u\n", TLSEXT_TYPE_IGN); + + ext_name = gnutls_ext_get_name2(session, TLSEXT_TYPE_IGN, GNUTLS_EXT_APPLICATION); + if (ext_name) + myfail("client: retrieve name of extension %u (expected none)\n", TLSEXT_TYPE_IGN); + + ret = gnutls_session_ext_register(session, "ext_client", TLSEXT_TYPE_SAMPLE, GNUTLS_EXT_TLS, ext_recv_client_params, ext_send_client_params, NULL, NULL, NULL, flags); if (ret < 0) - fail("client: register extension\n"); + myfail("client: register extension\n"); /* Perform the TLS handshake */ ret = gnutls_handshake(session); if (ret < 0) { - fail("client: Handshake failed\n"); - gnutls_perror(ret); + if (!expected_ok) { + if (debug) + success("client: handshake failed as expected: %s\n", gnutls_strerror(ret)); + } else { + myfail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } goto end; } else { if (debug) success("client: Handshake was completed\n"); } - if (TLSEXT_TYPE_client_sent != 1 || TLSEXT_TYPE_client_received != 1) - fail("client: extension not properly sent/received\n"); + if (TLSEXT_TYPE_client_sent != 1 || TLSEXT_TYPE_client_received != 1) { + if (expected_ok) { + myfail("client: extension not properly sent/received\n"); + } else { + goto end; + } + } ret = gnutls_ext_get_data(session, TLSEXT_TYPE_SAMPLE, &p); if (ret < 0) { - fail("gnutls_ext_get_data: %s\n", gnutls_strerror(ret)); + myfail("gnutls_ext_get_data: %s\n", gnutls_strerror(ret)); } if (p != session) { - fail("client: gnutls_ext_get_data failed\n"); + myfail("client: gnutls_ext_get_data failed\n"); } if (ign_extension_called == 0) { - fail("registered ign extension was not called\n"); + myfail("registered ign extension was not called\n"); } gnutls_bye(session, GNUTLS_SHUT_RDWR); + if (!expected_ok) + myfail("client: expected failure but succeeded!\n"); + end: close(sd); gnutls_deinit(session); gnutls_certificate_free_credentials(clientx509cred); - - gnutls_global_deinit(); } -static void server(int sd) +static void server(int sd, const char *name, const char *prio, unsigned flags, unsigned expected_ok) { gnutls_certificate_credentials_t serverx509cred; int ret; gnutls_session_t session; - unsigned i; - - /* this must be called once in the program - */ - global_init(); - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(4711); side = "server"; - gnutls_certificate_allocate_credentials(&serverx509cred); - gnutls_certificate_set_x509_key_mem(serverx509cred, + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, &server_cert, &server_key, - GNUTLS_X509_FMT_PEM); + GNUTLS_X509_FMT_PEM) >= 0); - gnutls_init(&session, GNUTLS_SERVER); + assert(gnutls_init(&session, GNUTLS_SERVER) >= 0); + gnutls_session_set_ptr(session, (void*)name); /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", - NULL); + assert(gnutls_priority_set_direct(session, prio, + NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_session_ext_register(session, "ext_server", TLSEXT_TYPE_SAMPLE, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL, 0); + assert(gnutls_session_ext_register(session, "ext_server", TLSEXT_TYPE_SAMPLE, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL, flags) >= 0); gnutls_transport_set_int(session, sd); gnutls_handshake_set_timeout(session, 20 * 1000); ret = gnutls_handshake(session); if (ret < 0) { - close(sd); - gnutls_deinit(session); - fail("server: Handshake has failed (%s)\n\n", - gnutls_strerror(ret)); + if (!expected_ok) { + if (debug) + success("server: handshake failed as expected: %s\n", gnutls_strerror(ret)); + goto cleanup; + } else { + close(sd); + gnutls_deinit(session); + myfail("server: Handshake has failed (%s)\n", + gnutls_strerror(ret)); + } return; } if (debug) success("server: Handshake was completed\n"); - if (TLSEXT_TYPE_server_sent != 1 || TLSEXT_TYPE_server_received != 1) - fail("server: extension not properly sent/received\n"); + + if (TLSEXT_TYPE_server_sent != 1 || TLSEXT_TYPE_server_received != 1) { + if (expected_ok) + myfail("server: extension not properly sent/received\n"); + else + goto cleanup; + } /* do not wait for the peer to close the connection. */ gnutls_bye(session, GNUTLS_SHUT_WR); - /* check whether we can crash the library by adding many extensions */ - for (i=0;i<64;i++) { - ret = gnutls_ext_register("ext_serverxx", TLSEXT_TYPE_SAMPLE+i+1, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL); - if (ret < 0) { - success("failed registering extension no %d (expected)\n", i+1); - break; - } - } + if (!expected_ok) + myfail("server: expected failure but succeeded!\n"); + cleanup: close(sd); gnutls_deinit(session); gnutls_certificate_free_credentials(serverx509cred); - gnutls_global_deinit(); - if (debug) success("server: finished\n"); } -void doit(void) +#define try_common(name, prio, flags, sok, cok) \ + try(name, prio, flags, flags, sok, cok) + +static void try(const char *name, const char *prio, unsigned server_flags, + unsigned client_flags, unsigned server_ok, unsigned client_ok) { pid_t child; int sockets[2]; int err; - signal(SIGPIPE, SIG_IGN); + success("Testing: %s: ", name); + reset_vars(); err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); if (err == -1) { perror("socketpair"); - fail("socketpair failed\n"); + myfail("socketpair failed\n"); return; } child = fork(); if (child < 0) { perror("fork"); - fail("fork"); + myfail("fork"); return; } @@ -310,12 +346,52 @@ void doit(void) int status; /* parent */ close(sockets[1]); - server(sockets[0]); + server(sockets[0], name, prio, server_flags, server_ok); wait(&status); + check_wait_status(status); + success("ok"); } else { close(sockets[0]); - client(sockets[1]); + client(sockets[1], name, prio, client_flags, client_ok); + _exit(0); } + + success("\n"); +} + +void doit(void) +{ + unsigned i; + int ret; + + signal(SIGPIPE, SIG_IGN); + + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(5); + + try_common("TLS1.2 both ways (default)", "NORMAL:+ANON-ECDH:-VERS-TLS-ALL:+VERS-TLS1.2", 0, 1, 1); + try_common("TLS1.2 both ways", "NORMAL:+ANON-ECDH:-VERS-TLS-ALL:+VERS-TLS1.2", GNUTLS_EXT_FLAG_CLIENT_HELLO|GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, 1, 1); + + try_common("TLS1.2 client only", "NORMAL:+ANON-ECDH:-VERS-TLS-ALL:+VERS-TLS1.2", GNUTLS_EXT_FLAG_CLIENT_HELLO, 0, 0); + try_common("TLS1.2 client and TLS 1.3 server", "NORMAL:+ANON-ECDH:-VERS-TLS-ALL:+VERS-TLS1.2", GNUTLS_EXT_FLAG_CLIENT_HELLO|GNUTLS_EXT_FLAG_TLS13_SERVER_HELLO, 0, 0); + try_common("TLS1.2 server only", "NORMAL:+ANON-ECDH:-VERS-TLS-ALL:+VERS-TLS1.2", GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, 0, 0); + + try("TLS1.2 client rejects", "NORMAL:+ANON-ECDH:-VERS-TLS-ALL:+VERS-TLS1.2", GNUTLS_EXT_FLAG_CLIENT_HELLO|GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, GNUTLS_EXT_FLAG_CLIENT_HELLO, 0, 0); + try("TLS1.2 never on client hello", "NORMAL:+ANON-ECDH:-VERS-TLS-ALL:+VERS-TLS1.2", GNUTLS_EXT_FLAG_TLS12_SERVER_HELLO, GNUTLS_EXT_FLAG_CLIENT_HELLO, 0, 0); + + /* check whether we can crash the library by adding many extensions */ + success("Testing: register many global extensions\n"); + for (i=0;i<64;i++) { + ret = gnutls_ext_register("ext_serverxx", TLSEXT_TYPE_SAMPLE+i+1, GNUTLS_EXT_TLS, ext_recv_server_params, ext_send_server_params, NULL, NULL, NULL); + if (ret < 0) { + success("failed registering extension no %d (expected)\n", i+1); + break; + } + } + + gnutls_global_deinit(); } #endif /* _WIN32 */ diff --git a/tests/tls-session-supplemental.c b/tests/tls-session-supplemental.c index c6f774f205..718f11eb34 100644 --- a/tests/tls-session-supplemental.c +++ b/tests/tls-session-supplemental.c @@ -15,12 +15,11 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ -/* Parts copied from GnuTLS example programs. */ +/* This tests the supplemental data extension under TLS1.2 */ #ifdef HAVE_CONFIG_H #include @@ -42,17 +41,16 @@ int main(int argc, char **argv) #include #include #include +#include #if !defined(_WIN32) #include #endif #include #include +#include "cert-common.h" #include "utils.h" -/* A very basic TLS client, with supplemental data - */ - const char *side = ""; static void tls_log_func(int level, const char *str) @@ -60,15 +58,15 @@ static void tls_log_func(int level, const char *str) fprintf(stderr, "%s|<%d>| %s", side, level, str); } -#define TLS_SUPPLEMENTALDATATYPE_SAMPLE 0xBABE +#define TLS_SUPPLEMENTALDATATYPE_SAMPLE 0xBABE -static int TLS_SUPPLEMENTALDATA_client_sent = 0; -static int TLS_SUPPLEMENTALDATA_client_received = 0; -static int TLS_SUPPLEMENTALDATA_server_sent = 0; -static int TLS_SUPPLEMENTALDATA_server_received = 0; +static int TLS_SUPPLEMENTALDATA_client_sent = 0; +static int TLS_SUPPLEMENTALDATA_client_received = 0; +static int TLS_SUPPLEMENTALDATA_server_sent = 0; +static int TLS_SUPPLEMENTALDATA_server_received = 0; static const unsigned char supp_data[] = -{ +{ 0xFE, 0xED }; @@ -117,7 +115,7 @@ int supp_server_send_func(gnutls_session_t session, gnutls_buffer_t buf) return GNUTLS_E_SUCCESS; } -static void client(int sd) +static void client(int sd, const char *prio, unsigned server_only) { int ret; gnutls_session_t session; @@ -135,10 +133,9 @@ static void client(int sd) /* Initialize TLS session */ gnutls_init(&session, GNUTLS_CLIENT); + gnutls_handshake_set_timeout(session, 20 * 1000); - /* Use default priorities */ - gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); /* put the anonymous credentials to the current session */ @@ -147,10 +144,12 @@ static void client(int sd) gnutls_transport_set_int(session, sd); - gnutls_supplemental_recv(session, 1); - gnutls_supplemental_send(session, 1); + if (!server_only) { + gnutls_supplemental_recv(session, 1); + gnutls_supplemental_send(session, 1); - gnutls_session_supplemental_register(session, "supplemental_client", TLS_SUPPLEMENTALDATATYPE_SAMPLE, supp_client_recv_func, supp_client_send_func, 0); + gnutls_session_supplemental_register(session, "supplemental_client", TLS_SUPPLEMENTALDATATYPE_SAMPLE, supp_client_recv_func, supp_client_send_func, 0); + } /* Perform the TLS handshake */ @@ -165,8 +164,14 @@ static void client(int sd) success("client: Handshake was completed\n"); } - if (TLS_SUPPLEMENTALDATA_client_sent != 1 || TLS_SUPPLEMENTALDATA_client_received != 1) - fail("client: extension not properly sent/received\n"); + if (!server_only) { + if (TLS_SUPPLEMENTALDATA_client_sent != 1 || TLS_SUPPLEMENTALDATA_client_received != 1) + fail("client: extension not properly sent/received\n"); + } else { + /* we expect TLS1.2 handshake as TLS1.3 is not (yet) defined + * with supplemental data */ + assert(gnutls_protocol_get_version(session) == GNUTLS_TLS1_2); + } gnutls_bye(session, GNUTLS_SHUT_RDWR); @@ -180,57 +185,10 @@ static void client(int sd) gnutls_global_deinit(); } -/* This is a sample TLS 1.0 server, for extension - */ - -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - -int err, ret; -char topbuf[512]; -gnutls_session_t session; -int optval = 1; - -static void server(int sd) +static void server(int sd, const char *prio, unsigned server_only) { + int ret; + gnutls_session_t session; gnutls_certificate_credentials_t serverx509cred; /* this must be called once in the program @@ -248,18 +206,17 @@ static void server(int sd) GNUTLS_X509_FMT_PEM); gnutls_init(&session, GNUTLS_SERVER); + gnutls_handshake_set_timeout(session, 20 * 1000); - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_supplemental_recv(session, 1); - gnutls_supplemental_send(session, 1); + if (!server_only) { + gnutls_supplemental_recv(session, 1); + gnutls_supplemental_send(session, 1); + } gnutls_session_supplemental_register(session, "supplemental_server", TLS_SUPPLEMENTALDATATYPE_SAMPLE, supp_server_recv_func, supp_server_send_func, 0); @@ -275,8 +232,10 @@ static void server(int sd) if (debug) success("server: Handshake was completed\n"); - if (TLS_SUPPLEMENTALDATA_server_sent != 1 || TLS_SUPPLEMENTALDATA_server_received != 1) - fail("server: extension not properly sent/received\n"); + if (!server_only) { + if (TLS_SUPPLEMENTALDATA_server_sent != 1 || TLS_SUPPLEMENTALDATA_server_received != 1) + fail("server: extension not properly sent/received\n"); + } /* do not wait for the peer to close the connection. */ @@ -293,10 +252,19 @@ static void server(int sd) success("server: finished\n"); } -void doit(void) +static +void start(const char *prio, unsigned server_only) { pid_t child; - int sockets[2]; + int sockets[2], err; + + signal(SIGPIPE, SIG_IGN); + TLS_SUPPLEMENTALDATA_client_sent = 0; + TLS_SUPPLEMENTALDATA_client_received = 0; + TLS_SUPPLEMENTALDATA_server_sent = 0; + TLS_SUPPLEMENTALDATA_server_received = 0; + + success("trying: %s\n", prio); err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); if (err == -1) { @@ -315,10 +283,23 @@ void doit(void) if (child) { int status; /* parent */ - server(sockets[0]); + server(sockets[0], prio, server_only); wait(&status); - } else - client(sockets[1]); + check_wait_status(status); + } else { + client(sockets[1], prio, server_only); + exit(0); + } } +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2", 0); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2", 0); + start("NORMAL", 0); + /* try setting supplemental only in server side, it should + * lead to normal authentication */ + start("NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2", 1); + start("NORMAL", 1); +} #endif /* _WIN32 */ diff --git a/tests/tls-supplemental.c b/tests/tls-supplemental.c index 8ddb89a513..2dfbd0c8b4 100644 --- a/tests/tls-supplemental.c +++ b/tests/tls-supplemental.c @@ -15,9 +15,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ /* Parts copied from GnuTLS example programs. */ @@ -28,6 +27,7 @@ #include #include +#include #if defined(_WIN32) @@ -49,10 +49,13 @@ int main(int argc, char **argv) #include #include "utils.h" +#include "cert-common.h" /* A very basic TLS client, with supplemental data */ +extern void _gnutls_supplemental_deinit(void); + const char *side = ""; static void tls_log_func(int level, const char *str) @@ -60,12 +63,12 @@ static void tls_log_func(int level, const char *str) fprintf(stderr, "%s|<%d>| %s", side, level, str); } -#define TLS_SUPPLEMENTALDATATYPE_SAMPLE 0xBABE +#define TLS_SUPPLEMENTALDATATYPE_SAMPLE 0xBABE -static int TLS_SUPPLEMENTALDATA_client_sent = 0; -static int TLS_SUPPLEMENTALDATA_client_received = 0; -static int TLS_SUPPLEMENTALDATA_server_sent = 0; -static int TLS_SUPPLEMENTALDATA_server_received = 0; +static int TLS_SUPPLEMENTALDATA_client_sent = 0; +static int TLS_SUPPLEMENTALDATA_client_received = 0; +static int TLS_SUPPLEMENTALDATA_server_sent = 0; +static int TLS_SUPPLEMENTALDATA_server_received = 0; static const unsigned char supp_data[] = { @@ -117,40 +120,34 @@ int supp_server_send_func(gnutls_session_t session, gnutls_buffer_t buf) return GNUTLS_E_SUCCESS; } -static void client(int sd) +static void client(int sd, const char *prio, unsigned server_only) { int ret; gnutls_session_t session; gnutls_certificate_credentials_t clientx509cred; - global_init(); - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(4711); + if (!server_only) { + assert(gnutls_supplemental_register("supplemental_client", TLS_SUPPLEMENTALDATATYPE_SAMPLE, supp_client_recv_func, supp_client_send_func)>=0); + } side = "client"; gnutls_certificate_allocate_credentials(&clientx509cred); - /* Initialize TLS session - */ - gnutls_init(&session, GNUTLS_CLIENT); + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); /* Use default priorities */ - gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", - NULL); + gnutls_priority_set_direct(session, prio, NULL); - /* put the anonymous credentials to the current session - */ gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, clientx509cred); gnutls_transport_set_int(session, sd); - gnutls_supplemental_recv(session, 1); - gnutls_supplemental_send(session, 1); - - gnutls_supplemental_register("supplemental_client", TLS_SUPPLEMENTALDATATYPE_SAMPLE, supp_client_recv_func, supp_client_send_func); + if (!server_only) { + gnutls_supplemental_recv(session, 1); + gnutls_supplemental_send(session, 1); + } /* Perform the TLS handshake */ @@ -165,8 +162,15 @@ static void client(int sd) success("client: Handshake was completed\n"); } - if (TLS_SUPPLEMENTALDATA_client_sent != 1 || TLS_SUPPLEMENTALDATA_client_received != 1) - fail("client: extension not properly sent/received\n"); + if (!server_only) { + if (TLS_SUPPLEMENTALDATA_client_sent != 1 || TLS_SUPPLEMENTALDATA_client_received != 1) + fail("client: extension not properly sent/received (%d.%d)\n", + TLS_SUPPLEMENTALDATA_client_sent, TLS_SUPPLEMENTALDATA_client_received); + } else { + /* we expect TLS1.2 handshake as TLS1.3 is not (yet) defined + * with supplemental data */ + assert(gnutls_protocol_get_version(session) == GNUTLS_TLS1_2); + } gnutls_bye(session, GNUTLS_SHUT_RDWR); @@ -176,72 +180,22 @@ static void client(int sd) gnutls_deinit(session); gnutls_certificate_free_credentials(clientx509cred); - - gnutls_global_deinit(); } -/* This is a sample TLS 1.0 server, for extension - */ - -static unsigned char server_cert_pem[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA17pcr6MM8C6pJ1aqU46o63+B\n" - "dUxrmL5K6rce+EvDasTaDQC46kwTHzYWk95y78akXrJutsoKiFV1kJbtple8DDt2\n" - "DZcevensf9Op7PuFZKBroEjOd35znDET/z3IrqVgbtm2jFqab7a+n2q9p/CgMyf1\n" - "tx2S5Zacc1LWn9bIjrECAwEAAaOBkzCBkDAMBgNVHRMBAf8EAjAAMBoGA1UdEQQT\n" - "MBGCD3Rlc3QuZ251dGxzLm9yZzATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHQ8B\n" - "Af8EBQMDB6AAMB0GA1UdDgQWBBTrx0Vu5fglyoyNgw106YbU3VW0dTAfBgNVHSME\n" - "GDAWgBTpPBz7rZJu5gakViyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAaFEPTt+7\n" - "bzvBuOf7+QmeQcn29kT6Bsyh1RHJXf8KTk5QRfwp6ogbp94JQWcNQ/S7YDFHglD1\n" - "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" - "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; - -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) -}; - -static unsigned char server_key_pem[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQDXulyvowzwLqknVqpTjqjrf4F1TGuYvkrqtx74S8NqxNoNALjq\n" - "TBMfNhaT3nLvxqResm62ygqIVXWQlu2mV7wMO3YNlx696ex/06ns+4VkoGugSM53\n" - "fnOcMRP/PciupWBu2baMWppvtr6far2n8KAzJ/W3HZLllpxzUtaf1siOsQIDAQAB\n" - "AoGAYAFyKkAYC/PYF8e7+X+tsVCHXppp8AoP8TEZuUqOZz/AArVlle/ROrypg5kl\n" - "8YunrvUdzH9R/KZ7saNZlAPLjZyFG9beL/am6Ai7q7Ma5HMqjGU8kTEGwD7K+lbG\n" - "iomokKMOl+kkbY/2sI5Czmbm+/PqLXOjtVc5RAsdbgvtmvkCQQDdV5QuU8jap8Hs\n" - "Eodv/tLJ2z4+SKCV2k/7FXSKWe0vlrq0cl2qZfoTUYRnKRBcWxc9o92DxK44wgPi\n" - "oMQS+O7fAkEA+YG+K9e60sj1K4NYbMPAbYILbZxORDecvP8lcphvwkOVUqbmxOGh\n" - "XRmTZUuhBrJhJKKf6u7gf3KWlPl6ShKEbwJASC118cF6nurTjuLf7YKARDjNTEws\n" - "qZEeQbdWYINAmCMj0RH2P0mvybrsXSOD5UoDAyO7aWuqkHGcCLv6FGG+qwJAOVqq\n" - "tXdUucl6GjOKKw5geIvRRrQMhb/m5scb+5iw8A4LEEHPgGiBaF5NtJZLALgWfo5n\n" - "hmC8+G8F0F78znQtPwJBANexu+Tg5KfOnzSILJMo3oXiXhf5PqXIDmbN0BKyCKAQ\n" - "LfkcEcUbVfmDaHpvzwY9VEaoMOKVLitETXdNSxVpvWM=\n" - "-----END RSA PRIVATE KEY-----\n"; - -const gnutls_datum_t server_key = { server_key_pem, - sizeof(server_key_pem) -}; - -int err, ret; -char topbuf[512]; -gnutls_session_t session; -int optval = 1; - -static void server(int sd) +static void server(int sd, const char *prio, unsigned server_only) { gnutls_certificate_credentials_t serverx509cred; - - /* this must be called once in the program - */ - global_init(); - gnutls_global_set_log_function(tls_log_func); - if (debug) - gnutls_global_set_log_level(4711); + int ret; + gnutls_session_t session; + static unsigned registered = 0; side = "server"; + if (!registered) { + assert(gnutls_supplemental_register("supplemental_server", TLS_SUPPLEMENTALDATATYPE_SAMPLE, supp_server_recv_func, supp_server_send_func)>=0); + registered = 0; + } + gnutls_certificate_allocate_credentials(&serverx509cred); gnutls_certificate_set_x509_key_mem(serverx509cred, &server_cert, &server_key, @@ -249,19 +203,15 @@ static void server(int sd) gnutls_init(&session, GNUTLS_SERVER); - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "PERFORMANCE:+ANON-ECDH:+ANON-DH", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_supplemental_recv(session, 1); - gnutls_supplemental_send(session, 1); - - gnutls_supplemental_register("supplemental_server", TLS_SUPPLEMENTALDATATYPE_SAMPLE, supp_server_recv_func, supp_server_send_func); + if (!server_only) { + gnutls_supplemental_recv(session, 1); + gnutls_supplemental_send(session, 1); + } gnutls_transport_set_int(session, sd); ret = gnutls_handshake(session); @@ -275,8 +225,10 @@ static void server(int sd) if (debug) success("server: Handshake was completed\n"); - if (TLS_SUPPLEMENTALDATA_server_sent != 1 || TLS_SUPPLEMENTALDATA_server_received != 1) - fail("server: extension not properly sent/received\n"); + if (!server_only) { + if (TLS_SUPPLEMENTALDATA_server_sent != 1 || TLS_SUPPLEMENTALDATA_server_received != 1) + fail("server: extension not properly sent/received\n"); + } /* do not wait for the peer to close the connection. */ @@ -287,16 +239,24 @@ static void server(int sd) gnutls_certificate_free_credentials(serverx509cred); - gnutls_global_deinit(); - if (debug) success("server: finished\n"); + + _gnutls_supplemental_deinit(); } -void doit(void) +static +void start(const char *prio, unsigned server_only) { pid_t child; - int sockets[2]; + int sockets[2], err; + + TLS_SUPPLEMENTALDATA_client_sent = 0; + TLS_SUPPLEMENTALDATA_client_received = 0; + TLS_SUPPLEMENTALDATA_server_sent = 0; + TLS_SUPPLEMENTALDATA_server_received = 0; + + success("running with %s\n", prio); err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); if (err == -1) { @@ -315,10 +275,31 @@ void doit(void) if (child) { int status; /* parent */ - server(sockets[0]); + close(sockets[1]); + server(sockets[0], prio, server_only); wait(&status); - } else - client(sockets[1]); + check_wait_status(status); + } else { + close(sockets[0]); + client(sockets[1], prio, server_only); + exit(0); + } +} + +void doit(void) +{ + signal(SIGPIPE, SIG_IGN); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + + start("NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2", 0); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2", 0); + start("NORMAL", 0); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2", 1); + start("NORMAL", 1); } #endif /* _WIN32 */ diff --git a/tests/tls-with-seccomp.c b/tests/tls-with-seccomp.c index de725e4edd..97b0dfb1bc 100644 --- a/tests/tls-with-seccomp.c +++ b/tests/tls-with-seccomp.c @@ -44,6 +44,7 @@ int main() #include #include #include +#include #include #include @@ -64,7 +65,7 @@ static void client_log_func(int level, const char *str) #define MAX_BUF 1024 -static void client(int fd) +static void client(int fd, const char *prio) { int ret; char buffer[MAX_BUF + 1]; @@ -85,10 +86,7 @@ static void client(int fd) gnutls_init(&session, GNUTLS_CLIENT); gnutls_handshake_set_timeout(session, 20 * 1000); - /* Use default priorities */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -158,7 +156,7 @@ static void terminate(void) exit(1); } -static void server(int fd) +static void server(int fd, const char *prio) { int ret; gnutls_certificate_credentials_t xcred; @@ -191,12 +189,7 @@ static void server(int fd) gnutls_init(&session, GNUTLS_SERVER); gnutls_handshake_set_timeout(session, 20 * 1000); - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -253,11 +246,13 @@ static void server(int fd) success("server: finished\n"); } -void doit(void) +static +void run(const char *name, const char *prio) { int fd[2]; int ret; + success("trying: %s\n", name); signal(SIGPIPE, SIG_IGN); ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); @@ -278,15 +273,22 @@ void doit(void) /* parent */ close(fd[0]); - client(fd[1]); + client(fd[1], prio); wait(&status); check_wait_status(status); } else { close(fd[1]); - server(fd[0]); + server(fd[0], prio); exit(0); } } +void doit(void) +{ + run("tls1.2", "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2"); + run("tls1.3", "NORMAL:-VERS-ALL:+VERS-TLS1.3"); + run("default", "NORMAL"); +} + #endif /* _WIN32 */ diff --git a/tests/tls1.0-cert-key-exchange.c b/tests/tls1.0-cert-key-exchange.c deleted file mode 100644 index 98e67f0896..0000000000 --- a/tests/tls1.0-cert-key-exchange.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2015-2016 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -/* This program tests the various certificate key exchange methods supported - * in gnutls */ - -#include -#include -#include -#include -#include -#include "utils.h" -#include "common-cert-key-exchange.h" - -void doit(void) -{ - global_init(); - - try("TLS 1.0 with anon-ecdh", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ANON-ECDH", GNUTLS_KX_ANON_ECDH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.0 with anon-dh", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.0 with dhe-rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.0 with ecdhe x25519 rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.0 with ecdhe rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.0 with ecdhe ecdsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - - try("TLS 1.0 with rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.0 with dhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); - try("TLS 1.0 with ecdhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); - try("TLS 1.0 with rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); - try("TLS 1.0 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); - - try("TLS 1.0 with dhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - try("TLS 1.0 with ecdhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - try("TLS 1.0 with rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - try("TLS 1.0 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - - gnutls_global_deinit(); -} diff --git a/tests/tls1.1-cert-key-exchange.c b/tests/tls1.1-cert-key-exchange.c deleted file mode 100644 index 8d2031b3e9..0000000000 --- a/tests/tls1.1-cert-key-exchange.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2015-2016 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -/* This program tests the various certificate key exchange methods supported - * in gnutls */ - -#include -#include -#include -#include -#include -#include "utils.h" -#include "common-cert-key-exchange.h" - -void doit(void) -{ - global_init(); - - try("TLS 1.1 with anon-ecdh", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ANON-ECDH", GNUTLS_KX_ANON_ECDH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.1 with anon-dh", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.1 with dhe-rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.1 with ecdhe x25519 rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.1 with ecdhe rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.1 with ecdhe ecdsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - - try("TLS 1.1 with rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.1 with dhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); - try("TLS 1.1 with ecdhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); - try("TLS 1.1 with rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); - try("TLS 1.1 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); - - try("TLS 1.1 with dhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - try("TLS 1.1 with ecdhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - try("TLS 1.1 with rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - try("TLS 1.1 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - - gnutls_global_deinit(); -} diff --git a/tests/tls1.2-cert-key-exchange.c b/tests/tls1.2-cert-key-exchange.c deleted file mode 100644 index 6c8eda4e2e..0000000000 --- a/tests/tls1.2-cert-key-exchange.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2015-2016 Red Hat, Inc. - * - * Author: Nikos Mavrogiannopoulos - * - * This file is part of GnuTLS. - * - * GnuTLS is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * GnuTLS is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -/* This program tests the various certificate key exchange methods supported - * in gnutls */ - -#include -#include -#include -#include -#include -#include "utils.h" -#include "common-cert-key-exchange.h" - -void doit(void) -{ - global_init(); - - try("TLS 1.2 with anon-ecdh", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ANON-ECDH", GNUTLS_KX_ANON_ECDH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.2 with anon-dh", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.2 with dhe-rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.2 with ecdhe x25519 rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.2 with ecdhe rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.2 with ecdhe ecdsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, 0); - - try("TLS 1.2 with rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, 0); - try("TLS 1.2 with dhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - try("TLS 1.2 with ecdhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - try("TLS 1.2 with rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - try("TLS 1.2 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); - - try("TLS 1.2 with dhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - try("TLS 1.2 with ecdhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - try("TLS 1.2 with rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - try("TLS 1.2 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); - - gnutls_global_deinit(); -} diff --git a/tests/tls10-cert-key-exchange.c b/tests/tls10-cert-key-exchange.c new file mode 100644 index 0000000000..1b976c37ee --- /dev/null +++ b/tests/tls10-cert-key-exchange.c @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2015-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the various certificate key exchange methods supported + * in gnutls */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "common-cert-key-exchange.h" +#include "cert-common.h" + +void doit(void) +{ + global_init(); + + try_x509("TLS 1.0 with anon-ecdh", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ANON-ECDH", GNUTLS_KX_ANON_ECDH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.0 with anon-dh", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.0 with dhe-rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.0 with ecdhe x25519 rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.0 with ecdhe rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_with_key("TLS 1.0 with ecdhe ecdsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + + try_x509("TLS 1.0 with rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509_cli("TLS 1.0 with dhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); + try_x509_cli("TLS 1.0 with ecdhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); + try_x509_cli("TLS 1.0 with rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); + try_with_key("TLS 1.0 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + + try_x509_cli("TLS 1.0 with dhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_x509_cli("TLS 1.0 with ecdhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_x509_cli("TLS 1.0 with rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_with_key("TLS 1.0 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.0:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, ASK_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + + gnutls_global_deinit(); +} diff --git a/tests/tls10-cipher-neg.c b/tests/tls10-cipher-neg.c new file mode 100644 index 0000000000..f48fb80b4d --- /dev/null +++ b/tests/tls10-cipher-neg.c @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the ciphersuite negotiation for various key exchange + * methods and options. */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" + +#include "cipher-neg-common.c" + +test_case_st tests[] = { + { + .name = "server TLS 1.0: AES-128-CBC (server)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+AES-128-CBC" + }, + { + .name = "both TLS 1.0: AES-128-CBC (server)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+AES-128-CBC:+VERS-TLS1.0" + }, + { + .name = "client TLS 1.0: AES-128-CBC (client)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:+AES-128-CBC", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "both TLS 1.0: AES-128-CBC (client)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:+AES-128-CBC:+VERS-TLS1.0", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "server TLS 1.0: 3DES-CBC (server)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+3DES-CBC" + }, + { + .name = "both TLS 1.0: 3DES-CBC (server)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+3DES-CBC:+VERS-TLS1.0" + }, + { + .name = "client TLS 1.0: 3DES-CBC (client)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:+3DES-CBC", + .client_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "both TLS 1.0: 3DES-CBC (client)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:+3DES-CBC:+VERS-TLS1.0", + .client_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "server TLS 1.0: ARCFOUR-128 (server)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+ARCFOUR-128" + }, + { + .name = "both TLS 1.0: ARCFOUR-128 (server)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+ARCFOUR-128:+VERS-TLS1.0" + }, + { + .name = "client TLS 1.0: ARCFOUR-128 (client)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:+ARCFOUR-128", + .client_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "both TLS 1.0: ARCFOUR-128 (client)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:+ARCFOUR-128:+VERS-TLS1.0", + .client_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.0" + } +}; + +void doit(void) +{ + unsigned i; + global_init(); + + for (i=0;i + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "hex.h" + +int +_gnutls_prf_raw(gnutls_mac_algorithm_t mac, + size_t master_size, const void *master, + size_t label_size, const char *label, + size_t seed_size, const uint8_t *seed, size_t outsize, + char *out); + +#define MATCH_FUNC(fname, dsecret, dseed, dlabel, doutput) \ +static void fname(void **glob_state) \ +{ \ + char tmp[512]; \ + gnutls_datum_t secret = dsecret; \ + gnutls_datum_t seed = dseed; \ + gnutls_datum_t label = dlabel; \ + gnutls_datum_t output = doutput; \ + int _rval; \ + _rval = _gnutls_prf_raw(GNUTLS_MAC_MD5_SHA1, secret.size, secret.data, \ + label.size, (char*)label.data, seed.size, seed.data, output.size, tmp); \ + assert_int_equal(_rval, 0); \ + assert_int_equal(memcmp(tmp, output.data, output.size), 0); \ + gnutls_free(secret.data); \ + gnutls_free(label.data); \ + gnutls_free(seed.data); \ + gnutls_free(output.data); \ +} + + +MATCH_FUNC(test1, SHEX("263bdbbb6f6d4c664e058d0aa9d321be"), SHEX("b920573b199601024f04d6dc61966e65"), + SDATA("test label"), SHEX("6617993765fa6ca703d19ec70dd5dd160ffcc07725fafb714a9f815a2a30bfb7e3bbfb7eee574b3b613eb7fe80eec9691d8c1b0e2d9b3c8b4b02b6b6d6db88e2094623ef6240607eda7abe3c846e82a3")); +MATCH_FUNC(test2, SHEX("bf31fe6c78ebf0ff9ce8bb5dd9d1f83d"), SHEX("7fc4583d19871d962760f358a18696c8"), + SDATA("test label"), SHEX("8318f382c49fd5af7d6fdb4cbb31dfef")); +MATCH_FUNC(test3, SHEX("0addfc84435b9ac1ef523ef44791a784bf55757dea17837c1a72beec1bdb1850"), + SHEX("74e849d11ad8a98d9bc2291dbceec26ff9"), + SDATA("test label"), SHEX("3c221520c48bcb3a0eb3734a")); +MATCH_FUNC(test4, SHEX("4074939b440a08a285bc7208485c531f0bbd4c101d71bdba33ec066791e4678c"), + SHEX("8aff0c770c1d60455ee48f220c9adb471e5fee27c88c1f33"), + SDATA("test label"), SHEX("3a9aee040bbf3cf7009210e64bbdad1775ccf1b46b3a965d5f15168e9ddaa7cc6a7c0c117848")); + +int main(void) +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(test1), + cmocka_unit_test(test2), + cmocka_unit_test(test3), + cmocka_unit_test(test4), + }; + return cmocka_run_group_tests(tests, NULL, NULL); +} diff --git a/tests/tls10-server-kx-neg.c b/tests/tls10-server-kx-neg.c new file mode 100644 index 0000000000..8034b80617 --- /dev/null +++ b/tests/tls10-server-kx-neg.c @@ -0,0 +1,432 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the ciphersuite negotiation for various key exchange + * methods and options. */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" + +#include "server-kx-neg-common.c" + +test_case_st tests[] = { + { + .name = "TLS 1.0 ANON-DH without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ANON-DH with cred but no DH params", + .client_ret = 0, + .server_ret = 0, + .have_anon_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ANON-DH with cred and DH params", + .server_ret = 0, + .client_ret = 0, + .have_anon_cred = 1, + .have_anon_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 DHE-RSA without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 DHE-RSA with cred but no DH params or cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 DHE-RSA with cred and cert but no DH params", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 DHE-RSA with cred and DH params but no cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 DHE-RSA with cred and incompatible cert and DH params", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .have_ecc_sign_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 DHE-RSA with cred and cert and DH params", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 DHE-RSA with cred and multiple certs and DH params", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 DHE-PSK without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 DHE-PSK with cred but no DH params", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 DHE-PSK with cred DH params", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .have_psk_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ECDHE-RSA without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ECDHE-RSA with cred but no common curve or cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.0 ECDHE-RSA with cred and cert but no common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.0 ECDHE-RSA with cred and common curve but no cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ECDHE-RSA with cred and incompatible cert and common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ECDHE-RSA with cred and cert and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ECDHE-RSA with cred and multiple certs and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + + { + .name = "TLS 1.0 ECDHE-ECDSA without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ECDHE-ECDSA with cred but no common curve or cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.0 ECDHE-ECDSA with cred and cert but no common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.0 ECDHE-ECDSA with cred and common curve but no ECDSA cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ECDHE-ECDSA with cred and common curve but no cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ECDHE-ECDSA with cred and cert and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ECDHE-ECDSA with cred and multiple certs and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_ecc_sign_cert = 1, + .have_rsa_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.0" + }, + + { + .name = "TLS 1.0 ECDHE-PSK without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 ECDHE-PSK with cred but no common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.0:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.0:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.0 ECDHE-PSK with cred and common curve", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 RSA-PSK without cert cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 RSA-PSK without psk cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 RSA-PSK with cred but invalid cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 RSA-PSK with cred", + .server_ret = 0, + .client_ret = 0, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 RSA-PSK with cred and multiple certs", + .server_ret = 0, + .client_ret = 0, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 SRP-RSA without cert cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_srp_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 SRP-RSA without srp cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_srp_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 SRP-RSA with cred but invalid cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 SRP-RSA with cred", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 SRP-RSA with cred and multiple certs", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 SRP without srp cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_srp_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.0" + }, + { + .name = "TLS 1.0 SRP with cred", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.0", + .client_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.0" + } +}; + +void doit(void) +{ + unsigned i; + global_init(); + + for (i=0;i +#endif + +/* This program tests the various certificate key exchange methods supported + * in gnutls */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "common-cert-key-exchange.h" +#include "cert-common.h" + +void doit(void) +{ + global_init(); + + try_x509("TLS 1.1 with anon-ecdh", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ANON-ECDH", GNUTLS_KX_ANON_ECDH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.1 with anon-dh", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.1 with dhe-rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.1 with ecdhe x25519 rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.1 with ecdhe rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_with_key("TLS 1.1 with ecdhe ecdsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + + try_x509("TLS 1.1 with rsa no cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + + try_x509_cli("TLS 1.1 with dhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); + try_x509_cli("TLS 1.1 with ecdhe-rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); + try_x509_cli("TLS 1.1 with rsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, USE_CERT); + try_with_key("TLS 1.1 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + + try_x509_cli("TLS 1.1 with dhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_x509_cli("TLS 1.1 with ecdhe-rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_x509_cli("TLS 1.1 with rsa ask cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_with_key("TLS 1.1 with ecdhe ecdsa cert", "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, ASK_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + + /* illegal setups */ + server_priority = NULL; + try_with_key_fail("TLS 1.1 with rsa-pss cert and no cli cert", + "NORMAL:-VERS-ALL:+VERS-TLS1.1:-KX-ALL:+DHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA256:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA512", + GNUTLS_E_UNWANTED_ALGORITHM, GNUTLS_E_AGAIN, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, NULL, NULL); + + gnutls_global_deinit(); +} diff --git a/tests/tls11-cipher-neg.c b/tests/tls11-cipher-neg.c new file mode 100644 index 0000000000..f315f10378 --- /dev/null +++ b/tests/tls11-cipher-neg.c @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the ciphersuite negotiation for various key exchange + * methods and options. */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" + +#include "cipher-neg-common.c" + +test_case_st tests[] = { + { + .name = "server TLS 1.1: AES-128-CBC (server)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+AES-128-CBC" + }, + { + .name = "both TLS 1.1: AES-128-CBC (server)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+AES-128-CBC:+VERS-TLS1.1" + }, + { + .name = "client TLS 1.1: AES-128-CBC (client)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:+AES-128-CBC", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "both TLS 1.1: AES-128-CBC (client)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:+AES-128-CBC:+VERS-TLS1.1", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "server TLS 1.1: 3DES-CBC (server)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+3DES-CBC" + }, + { + .name = "both TLS 1.1: 3DES-CBC (server)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+3DES-CBC:+VERS-TLS1.1" + }, + { + .name = "client TLS 1.1: 3DES-CBC (client)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:+3DES-CBC", + .client_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "both TLS 1.1: 3DES-CBC (client)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:+3DES-CBC:+VERS-TLS1.1", + .client_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "server TLS 1.1: ARCFOUR-128 (server)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+ARCFOUR-128" + }, + { + .name = "both TLS 1.1: ARCFOUR-128 (server)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+ARCFOUR-128:+VERS-TLS1.1" + }, + { + .name = "client TLS 1.1: ARCFOUR-128 (client)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:+ARCFOUR-128", + .client_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "both TLS 1.1: ARCFOUR-128 (client)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:+ARCFOUR-128:+VERS-TLS1.1", + .client_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.1" + } +}; + +void doit(void) +{ + unsigned i; + global_init(); + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the ciphersuite negotiation for various key exchange + * methods and options. */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" + +#include "server-kx-neg-common.c" + +test_case_st tests[] = { + { + .name = "TLS 1.1 ANON-DH without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ANON-DH with cred but no DH params", + .server_ret = 0, + .client_ret = 0, + .have_anon_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ANON-DH with cred and DH params", + .server_ret = 0, + .client_ret = 0, + .have_anon_cred = 1, + .have_anon_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 DHE-RSA without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 DHE-RSA with cred but no DH params or cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 DHE-RSA with cred and cert but no DH params", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 DHE-RSA with cred and DH params but no cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 DHE-RSA with cred and incompatible cert and DH params", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .have_ecc_sign_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 DHE-RSA with cred and cert and DH params", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 DHE-RSA with cred and multiple certs and DH params", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 DHE-PSK without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 DHE-PSK with cred but no DH params", + .server_ret = 0, + .client_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 DHE-PSK with cred DH params", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .have_psk_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ECDHE-RSA without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ECDHE-RSA with cred but no common curve or cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.1 ECDHE-RSA with cred and cert but no common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.1 ECDHE-RSA with cred and common curve but no cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ECDHE-RSA with cred and incompatible cert and common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ECDHE-RSA with cred and cert and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ECDHE-RSA with cred and multiple certs and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + + { + .name = "TLS 1.1 ECDHE-ECDSA without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ECDHE-ECDSA with cred but no common curve or cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.1 ECDHE-ECDSA with cred and cert but no common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.1 ECDHE-ECDSA with cred and common curve but no ECDSA cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ECDHE-ECDSA with cred and common curve but no cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ECDHE-ECDSA with cred and cert and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ECDHE-ECDSA with cred and multiple certs and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_ecc_sign_cert = 1, + .have_rsa_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.1" + }, + + { + .name = "TLS 1.1 ECDHE-PSK without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 ECDHE-PSK with cred but no common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.1:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.1:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.1 ECDHE-PSK with cred and common curve", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 RSA-PSK without cert cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 RSA-PSK without psk cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 RSA-PSK with cred but invalid cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 RSA-PSK with cred", + .server_ret = 0, + .client_ret = 0, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 RSA-PSK with cred and multiple certs", + .server_ret = 0, + .client_ret = 0, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 SRP-RSA without cert cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_srp_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 SRP-RSA without srp cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_srp_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 SRP-RSA with cred but invalid cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 SRP-RSA with cred", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 SRP-RSA with cred and multiple certs", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 SRP without srp cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_srp_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.1" + }, + { + .name = "TLS 1.1 SRP with cred", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.1", + .client_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.1" + } +}; + +void doit(void) +{ + unsigned i; + global_init(); + + for (i=0;i +#endif + +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" + +/* This tests the upgrade from anonymous ciphersuites to certificates + * under TLS1.2 */ + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static unsigned char ca_cert_pem[] = +"-----BEGIN CERTIFICATE-----\n" +"MIIC4DCCAcigAwIBAgIBADANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n" +"MCIYDzIwMTQwNDA0MTk1OTA1WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n" +"BENBLTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD46JAPKrTsNTHl\n" +"zD06eIYBF/8Z+TR0wukp9Cdh8Sw77dODLjy/QrVKiDgDZZdyUc8Agsdr86i95O0p\n" +"w19Np3a0wja0VC9uwppZrpuHsrWukwxIBXoViyBc20Y6Ce8j0scCbR10SP565qXC\n" +"i8vr86S4xmQMRZMtwohP/GWQzt45jqkHPYHjdKzwo2b2XI7joDq0dvbr3MSONkGs\n" +"z7A/1Bl3iH5keDTWjqpJRWqXE79IhGOhELy+gG4VLJDGHWCr2mq24b9Kirp+TTxl\n" +"lUwJRbchqUqerlFdt1NgDoGaJyd73Sh0qcZzmEiOI2hGvBtG86tdQ6veC9dl05et\n" +"pM+6RMABAgMBAAGjQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n" +"ADAdBgNVHQ4EFgQUGD0RYr2H7kfjQUcBMxSTCDQnhu0wDQYJKoZIhvcNAQELBQAD\n" +"ggEBALnHMubZ6WJ/XOFyDuo0imwg2onrPas3MuKT4+y0aHY943BgAOEc3jKitRjc\n" +"qhb0IUD+NS7itRwNtCgI3v5Ym5nnQoVk+aOD/D724TjJ9XaPQJzOnuGaZX99VN2F\n" +"sgwAtDXedlDQ+I6KLzLd6VW+UyWTG4qiRjOGDnG2kM1wAEOM27TzHV/YWleGjhtA\n" +"bRHxkioOni5goNlTzazxF4v9VD2uinWrIFyZmF6vQuMm6rKFgq6higAU8uesFo7+\n" +"3qpeRjNrPC4fNJUBvv+PC0WnP0PLnD/rY/ZcTYjLb/vJp1fiMJ5fU7jJklBhX2TE\n" +"tstcP7FUV5HA/s9BxgAh0Z2wyyY=\n" +"-----END CERTIFICATE-----\n"; + +const gnutls_datum_t ca_cert = { ca_cert_pem, + sizeof(ca_cert_pem) +}; + +static unsigned char server_cert_pem[] = +"-----BEGIN CERTIFICATE-----\n" +"MIIDIzCCAgugAwIBAgIMUz8PCR2sdRK56V6OMA0GCSqGSIb3DQEBCwUAMA8xDTAL\n" +"BgNVBAMTBENBLTEwIhgPMjAxNDA0MDQxOTU5MDVaGA85OTk5MTIzMTIzNTk1OVow\n" +"EzERMA8GA1UEAxMIc2VydmVyLTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\n" +"AoIBAQDZ3dCzh9gOTOiOb2dtrPu91fYYgC/ey0ACYjQxaru7FZwnuXPhQK9KHsIV\n" +"YRIyo49wjKZddkHet2sbpFAAeETZh8UUWLRb/mupyaSJMycaYCNjLZCUJTztvXxJ\n" +"CCNfbtgvKC+Vu1mu94KBPatslgvnsamH7AiL5wmwRRqdH/Z93XaEvuRG6Zk0Sh9q\n" +"ZMdCboGfjtmGEJ1V+z5CR+IyH4sckzd8WJW6wBSEwgliGaXnc75xKtFWBZV2njNr\n" +"8V1TOYOdLEbiF4wduVExL5TKq2ywNkRpUfK2I1BcWS5D9Te/QT7aSdE08rL6ztmZ\n" +"IhILSrMOfoLnJ4lzXspz3XLlEuhnAgMBAAGjdzB1MAwGA1UdEwEB/wQCMAAwFAYD\n" +"VR0RBA0wC4IJbG9jYWxob3N0MA8GA1UdDwEB/wQFAwMHoAAwHQYDVR0OBBYEFJXR\n" +"raRS5MVhEqaRE42A3S2BIj7UMB8GA1UdIwQYMBaAFP6S7AyMRO2RfkANgo8YsCl8\n" +"JfJkMA0GCSqGSIb3DQEBCwUAA4IBAQCQ62+skMVZYrGbpab8RI9IG6xH8kEndvFj\n" +"J7wBBZCOlcjOj+HQ7a2buF5zGKRwAOSznKcmvZ7l5DPdsd0t5/VT9LKSbQ6+CfGr\n" +"Xs5qPaDJnRhZkOILCvXJ9qyO+79WNMsg9pWnxkTK7aWR5OYE+1Qw1jG681HMkWTm\n" +"nt7et9bdiNNpvA+L55569XKbdtJLs3hn5gEQFgS7EaEj59aC4vzSTFcidowCoa43\n" +"7JmfSfC9YaAIFH2vriyU0QNf2y7cG5Hpkge+U7uMzQrsT77Q3SDB9WkyPAFNSB4Q\n" +"B/r+OtZXOnQhLlMV7h4XGlWruFEaOBVjFHSdMGUh+DtaLvd1bVXI\n" +"-----END CERTIFICATE-----\n" +"-----BEGIN CERTIFICATE-----\n" +"MIIDATCCAemgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDEwRDQS0w\n" +"MCIYDzIwMTQwNDA0MTk1OTA1WhgPOTk5OTEyMzEyMzU5NTlaMA8xDTALBgNVBAMT\n" +"BENBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvhyQfsUm3T0xK\n" +"jiBXO3H6Y27b7lmCRYZQCmXCl2sUsGDL7V9biavTt3+sorWtH542/cTGDh5n8591\n" +"7rVxAB/VASmN55O3fjZyFGrjusjhXBla0Yxe5rZ/7/Pjrq84T7gc/IXiX9Sums/c\n" +"o9AeoykfhsjV2ubhh4h+8uPsHDTcAFTxq3mQaoldwnW2nmjDFzaKLtQdnyFf41o6\n" +"nsJCK/J9PtpdCID5Zb+eQfu5Yhk1iUHe8a9TOstCHtgBq61YzufDHUQk3zsT+VZM\n" +"20lDvSBnHdWLjxoea587JbkvtH8xRR8ThwABSb98qPnhJ8+A7mpO89QO1wxZM85A\n" +"xEweQlMHAgMBAAGjZDBiMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcE\n" +"ADAdBgNVHQ4EFgQU/pLsDIxE7ZF+QA2CjxiwKXwl8mQwHwYDVR0jBBgwFoAUGD0R\n" +"Yr2H7kfjQUcBMxSTCDQnhu0wDQYJKoZIhvcNAQELBQADggEBANEXLUV+Z1PGTn7M\n" +"3rPT/m/EamcrZJ3vFWrnfN91ws5llyRUKNhx6222HECh3xRSxH9YJONsbv2zY6sd\n" +"ztY7lvckL4xOgWAjoCVTx3hqbZjDxpLRsvraw1PlqBHlRQVWLKlEQ55+tId2zgMX\n" +"Z+wxM7FlU/6yWVPODIxrqYQd2KqaEp4aLIklw6Hi4HD6DnQJikjsJ6Noe0qyX1Tx\n" +"uZ8mgP/G47Fe2d2H29kJ1iJ6hp1XOqyWrVIh/jONcnTvWS8aMqS3MU0EJH2Pb1Qa\n" +"KGIvbd/3H9LykFTP/b7Imdv2fZxXIK8jC+jbF1w6rdBCVNA0p30X/jonoC3vynEK\n" +"5cK0cgs=\n" +"-----END CERTIFICATE-----\n"; + +const gnutls_datum_t server_cert = { server_cert_pem, + sizeof(server_cert_pem) +}; + +static unsigned char server_key_pem[] = +"-----BEGIN RSA PRIVATE KEY-----\n" +"MIIEpQIBAAKCAQEA2d3Qs4fYDkzojm9nbaz7vdX2GIAv3stAAmI0MWq7uxWcJ7lz\n" +"4UCvSh7CFWESMqOPcIymXXZB3rdrG6RQAHhE2YfFFFi0W/5rqcmkiTMnGmAjYy2Q\n" +"lCU87b18SQgjX27YLygvlbtZrveCgT2rbJYL57Gph+wIi+cJsEUanR/2fd12hL7k\n" +"RumZNEofamTHQm6Bn47ZhhCdVfs+QkfiMh+LHJM3fFiVusAUhMIJYhml53O+cSrR\n" +"VgWVdp4za/FdUzmDnSxG4heMHblRMS+UyqtssDZEaVHytiNQXFkuQ/U3v0E+2knR\n" +"NPKy+s7ZmSISC0qzDn6C5yeJc17Kc91y5RLoZwIDAQABAoIBAQCRXAu5HPOsZufq\n" +"0K2DYZz9BdqSckR+M8HbVUZZiksDAeIUJwoHyi6qF2eK+B86JiK4Bz+gsBw2ys3t\n" +"vW2bQqM9N/boIl8D2fZfbCgZWkXGtUonC+mgzk+el4Rq/cEMFVqr6/YDwuKNeJpc\n" +"PJc5dcsvpTvlcjgpj9bJAvJEz2SYiIUpvtG4WNMGGapVZZPDvWn4/isY+75T5oDf\n" +"1X5jG0lN9uoUjcuGuThN7gxjwlRkcvEOPHjXc6rxfrWIDdiz/91V46PwpqVDpRrg\n" +"ig6U7+ckS0Oy2v32x0DaDhwAfDJ2RNc9az6Z+11lmY3LPkjG/p8Klcmgvt4/lwkD\n" +"OYRC5QGRAoGBAPFdud6nmVt9h1DL0o4R6snm6P3K81Ds765VWVmpzJkK3+bwe4PQ\n" +"GQQ0I0zN4hXkDMwHETS+EVWllqkK/d4dsE3volYtyTti8zthIATlgSEJ81x/ChAQ\n" +"vvXxgx+zPUnb1mUwy+X+6urTHe4bxN2ypg6ROIUmT+Hx1ITG40LRRiPTAoGBAOcT\n" +"WR8DTrj42xbxAUpz9vxJ15ZMwuIpk3ShE6+CWqvaXHF22Ju4WFwRNlW2zVLH6UMt\n" +"nNfOzyDoryoiu0+0mg0wSmgdJbtCSHoI2GeiAnjGn5i8flQlPQ8bdwwmU6g6I/EU\n" +"QRbGK/2XLmlrGN52gVy9UX0NsAA5fEOsAJiFj1CdAoGBAN9i3nbq6O2bNVSa/8mL\n" +"XaD1vGe/oQgh8gaIaYSpuXlfbjCAG+C4BZ81XgJkfj3CbfGbDNqimsqI0fKsAJ/F\n" +"HHpVMgrOn3L+Np2bW5YMj0Fzwy+1SCvsQ8C+gJwjOLMV6syGp/+6udMSB55rRv3k\n" +"rPnIf+YDumUke4tTw9wAcgkPAoGASHMkiji7QfuklbjSsslRMyDj21gN8mMevH6U\n" +"cX7pduBsA5dDqu9NpPAwnQdHsSDE3i868d8BykuqQAfLut3hPylY6vPYlLHfj4Oe\n" +"dj+xjrSX7YeMBE34qvfth32s1R4FjtzO25keyc/Q2XSew4FcZftlxVO5Txi3AXC4\n" +"bxnRKXECgYEAva+og7/rK+ZjboJVNxhFrwHp9bXhz4tzrUaWNvJD2vKJ5ZcThHcX\n" +"zCig8W7eXHLPLDhi9aWZ3kUZ1RLhrFc/6dujtVtU9z2w1tmn1I+4Zi6D6L4DzKdg\n" +"nMRLFoXufs/qoaJTqa8sQvKa+ceJAF04+gGtw617cuaZdZ3SYRLR2dk=\n" +"-----END RSA PRIVATE KEY-----\n"; + +const gnutls_datum_t server_key = { server_key_pem, + sizeof(server_key_pem) +}; + +#define MSG "hello there ppl" + +static void try(const char *client_prio, gnutls_kx_algorithm_t client_kx) +{ + int ret; + char buffer[256]; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_anon_server_credentials_t s_anoncred; + gnutls_dh_params_t dh_params; + const gnutls_datum_t p3 = + { (unsigned char *) pkcs3, strlen(pkcs3) }; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_anon_client_credentials_t c_anoncred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + + /* General init. */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + /* Init server */ + gnutls_anon_allocate_server_credentials(&s_anoncred); + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_dh_params_init(&dh_params); + gnutls_dh_params_import_pkcs3(dh_params, &p3, GNUTLS_X509_FMT_PEM); + gnutls_certificate_set_dh_params(serverx509cred, dh_params); + + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); + + gnutls_priority_set_direct(server, + "NORMAL:-VERS-ALL:+VERS-TLS1.2:+ANON-ECDH:+ECDHE-RSA:+DHE-RSA", + NULL); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + gnutls_anon_allocate_client_credentials(&c_anoncred); + gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ARCFOUR-128:+ANON-ECDH", NULL); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + if (gnutls_kx_get(client) != GNUTLS_KX_ANON_ECDH) { + fail("got unexpected key exchange algorithm: %s (expected ANON-ECDH)\n", gnutls_kx_get_name(gnutls_kx_get(client))); + exit(1); + } + + /* rehandshake using certificate auth */ + ret = gnutls_priority_set_direct(client, client_prio, NULL); + if (ret < 0) { + exit(1); + } + HANDSHAKE(client, server); + + if (gnutls_kx_get(client) != client_kx) { + fail("got unexpected key exchange algorithm: %s (expected %s)\n", gnutls_kx_get_name(gnutls_kx_get(client)), + gnutls_kx_get_name(client_kx)); + exit(1); + } + + /* check gnutls_certificate_get_ours() - client side */ + { + const gnutls_datum_t *mcert; + + mcert = gnutls_certificate_get_ours(client); + if (mcert != NULL) { + fail("gnutls_certificate_get_ours(): failed\n"); + exit(1); + } + } + + /* check the number of certificates received */ + { + unsigned cert_list_size = 0; + + gnutls_certificate_get_peers(client, &cert_list_size); + if (cert_list_size < 2) { + fprintf(stderr, "received a certificate list of %d!\n", cert_list_size); + exit(1); + } + } + + gnutls_record_send(server, MSG, strlen(MSG)); + + ret = gnutls_record_recv(client, buffer, sizeof(buffer)); + if (ret == 0) { + fail("client: Peer has closed the TLS connection\n"); + exit(1); + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (ret != strlen(MSG) || memcmp(MSG, buffer, ret) != 0) { + fail("client: Error in data received. Expected %d, got %d\n", (int)strlen(MSG), ret); + exit(1); + } + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + gnutls_anon_free_server_credentials(s_anoncred); + gnutls_anon_free_client_credentials(c_anoncred); + gnutls_dh_params_deinit(dh_params); +} + +void doit(void) +{ + global_init(); + + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA:+ARCFOUR-128", GNUTLS_KX_DHE_RSA); + reset_buffers(); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:+ARCFOUR-128", GNUTLS_KX_ECDHE_RSA); + reset_buffers(); + try("NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA:+ARCFOUR-128", GNUTLS_KX_RSA); + gnutls_global_deinit(); +} diff --git a/tests/tls12-cert-key-exchange.c b/tests/tls12-cert-key-exchange.c new file mode 100644 index 0000000000..862fe85894 --- /dev/null +++ b/tests/tls12-cert-key-exchange.c @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2015-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the various certificate key exchange methods supported + * in gnutls */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "common-cert-key-exchange.h" +#include "cert-common.h" + +void doit(void) +{ + global_init(); + + /** X.509 tests **/ + try_x509("TLS 1.2 with anon-ecdh", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ANON-ECDH", GNUTLS_KX_ANON_ECDH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.2 with anon-dh", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ANON-DH", GNUTLS_KX_ANON_DH, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.2 with dhe-rsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.2 with ecdhe x25519 rsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.2 with ecdhe rsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + try_with_key("TLS 1.2 with ecdhe ecdsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_x509("TLS 1.2 with ecdhe rsa-pss sig no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + + /* Test RSA-PSS cert/key combo issues */ + try_with_key("TLS 1.2 with ecdhe with rsa-pss-sha256 key no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_rsa_pss2_cert, &server_ca3_rsa_pss2_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_with_key("TLS 1.2 with ecdhe with rsa-pss-sha256 key and 1 sig no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_rsa_pss2_cert, &server_ca3_rsa_pss2_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_with_key("TLS 1.2 with ecdhe with rsa-pss-sha256 key and rsa-pss-sha384 first sig no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_rsa_pss2_cert, &server_ca3_rsa_pss2_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_with_key("TLS 1.2 with ecdhe with rsa-pss-sha256 key and rsa-pss-sha512 first sig no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA512:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_rsa_pss2_cert, &server_ca3_rsa_pss2_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + + try_x509("TLS 1.2 with ecdhe rsa-pss no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_with_key("TLS 1.2 with ecdhe rsa-pss/rsa-pss no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_x509("TLS 1.2 with rsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + try_with_key("TLS 1.2 with ecdhe x25519 ed25519 no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-ECDSA:-CURVE-ALL:+CURVE-X25519:-SIGN-ALL:+SIGN-EDDSA-ED25519", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_EDDSA_ED25519, GNUTLS_SIGN_UNKNOWN, + &server_ca3_eddsa_cert, &server_ca3_eddsa_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + + try_x509_cli("TLS 1.2 with dhe-rsa cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + try_x509_cli("TLS 1.2 with ecdhe-rsa cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + try_x509_cli("TLS 1.2 with rsa cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + try_with_key("TLS 1.2 with ecdhe ecdsa cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_RSA_SHA256, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + try_x509_cli("TLS 1.2 with ecdhe-rsa-pss cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, USE_CERT); + try_with_key("TLS 1.2 with ecdhe-rsa-pss/rsa-pss cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_RSA_PSS_SHA256, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, &cli_ca3_rsa_pss_cert, &cli_ca3_rsa_pss_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + + try_with_key("TLS 1.2 with ecdhe x25519 ed25519 cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-ECDSA:-CURVE-ALL:+CURVE-X25519:-SIGN-ALL:+SIGN-EDDSA-ED25519", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_EDDSA_ED25519, GNUTLS_SIGN_EDDSA_ED25519, + &server_ca3_eddsa_cert, &server_ca3_eddsa_key, &server_ca3_eddsa_cert, &server_ca3_eddsa_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + + try_x509_cli("TLS 1.2 with dhe-rsa ask cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_x509_cli("TLS 1.2 with ecdhe-rsa ask cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_x509_cli("TLS 1.2 with rsa ask cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_with_key("TLS 1.2 with ecdhe ecdsa cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-ECDSA", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_ECDSA_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, ASK_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + + /** Raw public-key tests **/ + try_rawpk("TLS 1.2 with dhe-rsa no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA:+CTYPE-ALL", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + try_rawpk("TLS 1.2 with ecdhe x25519 rsa no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519:+CTYPE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + try_rawpk("TLS 1.2 with ecdhe rsa no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:+CTYPE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + try_rawpk("TLS 1.2 with ecdhe rsa-pss sig no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256:+CTYPE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_rawpk("TLS 1.2 with ecdhe rsa-pss no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256:+CTYPE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_rawpk("TLS 1.2 with rsa no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA:+CTYPE-ALL", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN); + + try_rawpk_cli("TLS 1.2 with dhe-rsa cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA:+CTYPE-ALL", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + try_rawpk_cli("TLS 1.2 with ecdhe-rsa cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:+CTYPE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + try_rawpk_cli("TLS 1.2 with rsa cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA:+CTYPE-ALL", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_RSA_SHA256, USE_CERT); + try_rawpk_cli("TLS 1.2 with ecdhe-rsa-pss cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256:+CTYPE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, USE_CERT); + try_rawpk_cli("TLS 1.2 with dhe-rsa ask cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+DHE-RSA:+CTYPE-ALL", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_rawpk_cli("TLS 1.2 with ecdhe-rsa ask cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:+CTYPE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + try_rawpk_cli("TLS 1.2 with rsa ask cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+RSA:+CTYPE-ALL", GNUTLS_KX_RSA, GNUTLS_SIGN_UNKNOWN, GNUTLS_SIGN_UNKNOWN, ASK_CERT); + + + /** Illegal setups **/ + server_priority = "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA"; + try_with_key_fail("TLS 1.2 with rsa cert and only RSA-PSS sig algos in client", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:-SIGN-ALL:+SIGN-RSA-PSS-SHA256:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA512", + GNUTLS_E_NO_CIPHER_SUITES, GNUTLS_E_AGAIN, + &server_ca3_localhost_cert, &server_ca3_key, NULL, NULL); + + server_priority = NULL; + try_with_key_fail("TLS 1.2 with rsa cert and only RSA-PSS sig algos", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-RSA:-SIGN-ALL:+SIGN-RSA-PSS-SHA256:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA512", + GNUTLS_E_NO_CIPHER_SUITES, GNUTLS_E_AGAIN, + &server_ca3_localhost_cert, &server_ca3_key, NULL, NULL); + + try_with_key_fail("TLS 1.2 with rsa-pss cert and rsa cli cert with only RSA-PSS sig algos", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:-SIGN-ALL:+SIGN-RSA-PSS-SHA256:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA512", + GNUTLS_E_AGAIN, GNUTLS_E_UNWANTED_ALGORITHM, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, &cli_ca3_cert, &cli_ca3_key); + + try_with_key_fail("TLS 1.2 with rsa encryption cert without RSA", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:-RSA", + GNUTLS_E_NO_CIPHER_SUITES, GNUTLS_E_AGAIN, + &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key, NULL, NULL); + + try_with_key_fail("TLS 1.2 with (forced) rsa encryption cert and no RSA - client should detect", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:-RSA:%DEBUG_ALLOW_KEY_USAGE_VIOLATIONS", + GNUTLS_E_AGAIN, GNUTLS_E_KEY_USAGE_VIOLATION, + &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key, NULL, NULL); + + try_with_key_fail("TLS 1.2 with client rsa encryption cert", + "NORMAL:-VERS-ALL:+VERS-TLS1.2", + GNUTLS_E_AGAIN, GNUTLS_E_KEY_USAGE_VIOLATION, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key); + + try_with_key_fail("TLS 1.2 with (forced) client rsa encryption cert - server should detect", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:%DEBUG_ALLOW_KEY_USAGE_VIOLATIONS", + GNUTLS_E_KEY_USAGE_VIOLATION, GNUTLS_E_AGAIN, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key); + + try_with_rawpk_key_fail("rawpk TLS 1.2 with rsa encryption cert without KX-RSA", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:+CTYPE-RAWPK:-RSA", + GNUTLS_E_NO_CIPHER_SUITES, GNUTLS_E_AGAIN, + &rawpk_public_key1, &rawpk_private_key1, GNUTLS_KEY_KEY_ENCIPHERMENT, NULL, NULL, 0); + + try_with_rawpk_key_fail("rawpk TLS 1.2 with client rsa encryption cert without KX-RSA", + "NORMAL:-VERS-ALL:+VERS-TLS1.2:+CTYPE-RAWPK:-RSA", + GNUTLS_E_AGAIN, GNUTLS_E_KEY_USAGE_VIOLATION, + &rawpk_public_key2, &rawpk_private_key2, 0, &rawpk_public_key1, &rawpk_private_key1, GNUTLS_KEY_KEY_ENCIPHERMENT); + +#ifdef ENABLE_GOST + if (!gnutls_fips140_mode_enabled()) { + server_priority = "NORMAL:+CTYPE-ALL" + ":+VKO-GOST-12" + ":+GROUP-GOST-ALL" + ":+CIPHER-GOST-ALL" + ":+MAC-GOST-ALL" + ":+SIGN-GOST-ALL"; + const char *gost_client_prio = "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL"; + try_with_key("TLS 1.2 with gost12 256 no-cli-cert (ctype X.509)", gost_client_prio, GNUTLS_KX_VKO_GOST_12, GNUTLS_SIGN_GOST_256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_gost12_256_cert, &server_ca3_gost12_256_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_with_key("TLS 1.2 with gost12 256 ask cli-cert (ctype X.509)", gost_client_prio, GNUTLS_KX_VKO_GOST_12, GNUTLS_SIGN_GOST_256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_gost12_256_cert, &server_ca3_gost12_256_key, NULL, NULL, ASK_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + try_with_key("TLS 1.2 with gost12 256 use cli-cert (ctype X.509)", gost_client_prio, GNUTLS_KX_VKO_GOST_12, GNUTLS_SIGN_GOST_256, GNUTLS_SIGN_GOST_256, + &server_ca3_gost12_256_cert, &server_ca3_gost12_256_key, &cligost12_256_ca3_cert, &cligost12_256_ca3_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + try_with_key("TLS 1.2 with gost12 512 no-cli-cert (ctype X.509)", gost_client_prio, GNUTLS_KX_VKO_GOST_12, GNUTLS_SIGN_GOST_512, GNUTLS_SIGN_UNKNOWN, + &server_ca3_gost12_512_cert, &server_ca3_gost12_512_key, NULL, NULL, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_with_key("TLS 1.2 with gost12 512 ask cli-cert (ctype X.509)", gost_client_prio, GNUTLS_KX_VKO_GOST_12, GNUTLS_SIGN_GOST_512, GNUTLS_SIGN_UNKNOWN, + &server_ca3_gost12_512_cert, &server_ca3_gost12_512_key, NULL, NULL, ASK_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + try_with_key("TLS 1.2 with gost12 512 use cli-cert (ctype X.509)", gost_client_prio, GNUTLS_KX_VKO_GOST_12, GNUTLS_SIGN_GOST_512, GNUTLS_SIGN_GOST_512, + &server_ca3_gost12_512_cert, &server_ca3_gost12_512_key, &cligost12_512_ca3_cert, &cligost12_512_ca3_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + try_with_key("TLS 1.2 with gost12 512 use cli-cert gost12 256 (ctype X.509)", gost_client_prio, GNUTLS_KX_VKO_GOST_12, GNUTLS_SIGN_GOST_512, GNUTLS_SIGN_GOST_256, + &server_ca3_gost12_512_cert, &server_ca3_gost12_512_key, &cligost12_256_ca3_cert, &cligost12_256_ca3_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + server_priority = NULL; + } +#endif + + gnutls_global_deinit(); +} diff --git a/tests/tls12-cipher-neg.c b/tests/tls12-cipher-neg.c new file mode 100644 index 0000000000..af2050df6c --- /dev/null +++ b/tests/tls12-cipher-neg.c @@ -0,0 +1,245 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the ciphersuite negotiation for various key exchange + * methods and options. */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" + +#include "cipher-neg-common.c" + +test_case_st tests[] = { + { + .name = "server TLS 1.2: NULL (server)", + .not_on_fips = 1, + .cipher = GNUTLS_CIPHER_NULL, + .server_prio = "NORMAL:-CIPHER-ALL:+NULL:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+NULL", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(NULL)-(SHA1)", + }, + { + .name = "client TLS 1.2: NULL (client)", + .not_on_fips = 1, + .cipher = GNUTLS_CIPHER_NULL, + .server_prio = "NORMAL:+NULL", + .client_prio = "NORMAL:-CIPHER-ALL:+NULL:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(NULL)-(SHA1)", + }, + { + .name = "server TLS 1.2: AES-128-GCM (server)", + .cipher = GNUTLS_CIPHER_AES_128_GCM, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-GCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+AES-128-GCM", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-GCM)" + }, + { + .name = "both TLS 1.2: AES-128-GCM (server)", + .cipher = GNUTLS_CIPHER_AES_128_GCM, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-GCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+AES-128-GCM:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-GCM)" + }, + { + .name = "client TLS 1.2: AES-128-GCM (client)", + .cipher = GNUTLS_CIPHER_AES_128_GCM, + .server_prio = "NORMAL:+AES-128-GCM", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-GCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-GCM)" + }, + { + .name = "both TLS 1.2: AES-128-GCM (client)", + .cipher = GNUTLS_CIPHER_AES_128_GCM, + .server_prio = "NORMAL:+AES-128-GCM:+VERS-TLS1.2", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-GCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-GCM)" + }, + { + .name = "server TLS 1.2: AES-128-CCM (server)", + .cipher = GNUTLS_CIPHER_AES_128_CCM, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-CCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+AES-128-CCM", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-CCM)" + }, + { + .name = "both TLS 1.2: AES-128-CCM (server)", + .cipher = GNUTLS_CIPHER_AES_128_CCM, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-CCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+AES-128-CCM:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-CCM)" + }, + { + .name = "client TLS 1.2: AES-128-CCM (client)", + .cipher = GNUTLS_CIPHER_AES_128_CCM, + .server_prio = "NORMAL:+AES-128-CCM", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-CCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-CCM)" + }, + { + .name = "both TLS 1.2: AES-128-CCM (client)", + .cipher = GNUTLS_CIPHER_AES_128_CCM, + .server_prio = "NORMAL:+AES-128-CCM:+VERS-TLS1.2", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-CCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-CCM)" + }, + { + .name = "server TLS 1.2: CHACHA20-POLY (server)", + .cipher = GNUTLS_CIPHER_CHACHA20_POLY1305, + .not_on_fips = 1, + .server_prio = "NORMAL:-CIPHER-ALL:+CHACHA20-POLY1305:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+CHACHA20-POLY1305", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(CHACHA20-POLY1305)" + }, + { + .name = "both TLS 1.2: CHACHA20-POLY (server)", + .cipher = GNUTLS_CIPHER_CHACHA20_POLY1305, + .not_on_fips = 1, + .server_prio = "NORMAL:-CIPHER-ALL:+CHACHA20-POLY1305:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+CHACHA20-POLY1305:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(CHACHA20-POLY1305)" + }, + { + .name = "client TLS 1.2: CHACHA20-POLY (client)", + .cipher = GNUTLS_CIPHER_CHACHA20_POLY1305, + .not_on_fips = 1, + .server_prio = "NORMAL:+CHACHA20-POLY1305", + .client_prio = "NORMAL:-CIPHER-ALL:+CHACHA20-POLY1305:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(CHACHA20-POLY1305)" + }, + { + .name = "both TLS 1.2: CHACHA20-POLY (client)", + .cipher = GNUTLS_CIPHER_CHACHA20_POLY1305, + .not_on_fips = 1, + .server_prio = "NORMAL:+CHACHA20-POLY1305:+VERS-TLS1.2", + .client_prio = "NORMAL:-CIPHER-ALL:+CHACHA20-POLY1305:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(CHACHA20-POLY1305)" + }, + { + .name = "server TLS 1.2: AES-128-CBC (server)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+AES-128-CBC", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-CBC)-(SHA1)" + }, + { + .name = "both TLS 1.2: AES-128-CBC (server)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+AES-128-CBC:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-CBC)-(SHA1)" + }, + { + .name = "client TLS 1.2: AES-128-CBC (client)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:+AES-128-CBC", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-CBC)-(SHA1)" + }, + { + .name = "both TLS 1.2: AES-128-CBC (client)", + .cipher = GNUTLS_CIPHER_AES_128_CBC, + .server_prio = "NORMAL:+AES-128-CBC:+VERS-TLS1.2", + .client_prio = "NORMAL:-CIPHER-ALL:+AES-128-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(AES-128-CBC)-(SHA1)" + }, + { + .name = "server TLS 1.2: 3DES-CBC (server)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+3DES-CBC", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(3DES-CBC)-(SHA1)" + }, + { + .name = "both TLS 1.2: 3DES-CBC (server)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+3DES-CBC:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(3DES-CBC)-(SHA1)" + }, + { + .name = "client TLS 1.2: 3DES-CBC (client)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:+3DES-CBC", + .client_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(3DES-CBC)-(SHA1)" + }, + { + .name = "both TLS 1.2: 3DES-CBC (client)", + .cipher = GNUTLS_CIPHER_3DES_CBC, + .server_prio = "NORMAL:+3DES-CBC:+VERS-TLS1.2", + .client_prio = "NORMAL:-CIPHER-ALL:+3DES-CBC:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(3DES-CBC)-(SHA1)" + }, + { + .name = "server TLS 1.2: ARCFOUR-128 (server)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+ARCFOUR-128", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(ARCFOUR-128)-(SHA1)" + }, + { + .name = "both TLS 1.2: ARCFOUR-128 (server)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2:%SERVER_PRECEDENCE", + .client_prio = "NORMAL:+ARCFOUR-128:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(ARCFOUR-128)-(SHA1)" + }, + { + .name = "client TLS 1.2: ARCFOUR-128 (client)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:+ARCFOUR-128", + .client_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(ARCFOUR-128)-(SHA1)" + }, + { + .name = "both TLS 1.2: ARCFOUR-128 (client)", + .cipher = GNUTLS_CIPHER_ARCFOUR_128, + .not_on_fips = 1, + .server_prio = "NORMAL:+ARCFOUR-128:+VERS-TLS1.2", + .client_prio = "NORMAL:-CIPHER-ALL:+ARCFOUR-128:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.2", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(ARCFOUR-128)-(SHA1)" + } +}; + +void doit(void) +{ + unsigned i; + global_init(); + + for (i=0;i +#endif + +/* This program tests the various certificate key exchange methods supported + * in gnutls */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" + +#include + +typedef struct test_case_st { + const char *name; + int server_ret; + int client_ret; + unsigned have_anon_cred; + unsigned have_psk_cred; + unsigned have_cert_cred; + unsigned have_rsa_sign_cert; + unsigned have_ecc_sign_cert; + unsigned have_rsa_decrypt_cert; + unsigned not_on_fips; + unsigned group; /* expected */ + const char *client_prio; + const char *server_prio; +} test_case_st; + +static int +serv_psk_func(gnutls_session_t session, const char *username, + gnutls_datum_t * key) { + key->data = gnutls_malloc(4); + assert(key->data != NULL); + key->data[0] = 0xDE; + key->data[1] = 0xAD; + key->data[2] = 0xBE; + key->data[3] = 0xEF; + key->size = 4; + return 0; +} + +static void try(test_case_st *test) +{ + int sret, cret; + gnutls_anon_client_credentials_t c_anon_cred; + gnutls_anon_server_credentials_t s_anon_cred; + gnutls_psk_client_credentials_t c_psk_cred; + gnutls_psk_server_credentials_t s_psk_cred; + gnutls_certificate_credentials_t s_cert_cred; + gnutls_certificate_credentials_t c_cert_cred; + + gnutls_session_t server, client; + const gnutls_datum_t pskkey = { (void *) "DEADBEEF", 8 }; + + if (test->not_on_fips && gnutls_fips140_mode_enabled()) { + success("Skipping %s...\n", test->name); + return; + } + + success("Running %s...\n", test->name); + + assert(gnutls_anon_allocate_client_credentials(&c_anon_cred) >= 0); + assert(gnutls_anon_allocate_server_credentials(&s_anon_cred) >= 0); + assert(gnutls_psk_allocate_client_credentials(&c_psk_cred) >= 0); + assert(gnutls_psk_allocate_server_credentials(&s_psk_cred) >= 0); + assert(gnutls_certificate_allocate_credentials(&s_cert_cred) >= 0); + assert(gnutls_certificate_allocate_credentials(&c_cert_cred) >= 0); + + assert(gnutls_init(&server, GNUTLS_SERVER)>=0); + assert(gnutls_init(&client, GNUTLS_CLIENT)>=0); + + if (test->have_anon_cred) { + gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anon_cred); + } + + if (test->have_cert_cred) { + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, s_cert_cred); + } + + if (test->have_psk_cred) { + gnutls_credentials_set(server, GNUTLS_CRD_PSK, s_psk_cred); + + gnutls_psk_set_server_credentials_function(s_psk_cred, serv_psk_func); + } + + if (test->have_rsa_decrypt_cert) { + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key, GNUTLS_X509_FMT_PEM) >= 0); + } + + if (test->have_ecc_sign_cert) { + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, GNUTLS_X509_FMT_PEM) >= 0); + } + + if (test->have_rsa_sign_cert) { + assert(gnutls_certificate_set_x509_key_mem(s_cert_cred, &server_ca3_localhost_rsa_sign_cert, &server_ca3_key, GNUTLS_X509_FMT_PEM) >= 0); + } + + /* client does everything */ + gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anon_cred); + gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, c_cert_cred); + gnutls_credentials_set(client, GNUTLS_CRD_PSK, c_psk_cred); + + assert(gnutls_psk_set_client_credentials(c_psk_cred, "psk", &pskkey, GNUTLS_PSK_KEY_HEX) >= 0); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + assert(gnutls_priority_set_direct(server, test->server_prio, 0) >= 0); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + assert(gnutls_priority_set_direct(client, test->client_prio, 0) >= 0); + + HANDSHAKE_EXPECT(client, server, test->client_ret, test->server_ret); + + if (gnutls_group_get(client) != gnutls_group_get(server)) { + fail("%s: server's group doesn't match client's\n", test->name); + } + + if (test->group != 0 && gnutls_group_get(client) != test->group) { + fail("%s: group doesn't match the expected\n", test->name); + } + + if (test->group) { + if (test->group == GNUTLS_GROUP_FFDHE2048 || test->group == GNUTLS_GROUP_FFDHE3072 || + test->group == GNUTLS_GROUP_FFDHE4096 || test->group == GNUTLS_GROUP_FFDHE6144 || + test->group == GNUTLS_GROUP_FFDHE8192) { + if (!(gnutls_session_get_flags(client) & GNUTLS_SFLAGS_RFC7919)) { + fail("%s: gnutls_session_get_flags(client) reports that no RFC7919 negotiation was performed!\n", test->name); + } + + if (!(gnutls_session_get_flags(server) & GNUTLS_SFLAGS_RFC7919)) { + fail("%s: gnutls_session_get_flags(server) reports that no RFC7919 negotiation was performed!\n", test->name); + } + } + } + gnutls_deinit(server); + gnutls_deinit(client); + gnutls_anon_free_client_credentials(c_anon_cred); + gnutls_anon_free_server_credentials(s_anon_cred); + gnutls_psk_free_client_credentials(c_psk_cred); + gnutls_psk_free_server_credentials(s_psk_cred); + gnutls_certificate_free_credentials(s_cert_cred); + gnutls_certificate_free_credentials(c_cert_cred); + + reset_buffers(); +} + +test_case_st tests[] = { + { + .name = "TLS 1.2 ANON-DH (defaults)", + .client_ret = 0, + .server_ret = 0, + .have_anon_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ANON-DH (FFDHE2048)", + .group = GNUTLS_GROUP_FFDHE2048, + .client_ret = 0, + .server_ret = 0, + .have_anon_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE2048", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE2048" + }, + { + .name = "TLS 1.2 ANON-DH (FFDHE3072)", + .group = GNUTLS_GROUP_FFDHE3072, + .client_ret = 0, + .server_ret = 0, + .have_anon_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE3072", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE3072" + }, + { + .name = "TLS 1.2 ANON-DH (FFDHE4096)", + .group = GNUTLS_GROUP_FFDHE4096, + .client_ret = 0, + .server_ret = 0, + .have_anon_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE4096", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE4096" + }, + { + .name = "TLS 1.2 ANON-DH (FFDHE6144)", + .group = GNUTLS_GROUP_FFDHE6144, + .client_ret = 0, + .server_ret = 0, + .have_anon_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE6144", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE6144" + }, + { + .name = "TLS 1.2 ANON-DH (FFDHE8192)", + .group = GNUTLS_GROUP_FFDHE8192, + .client_ret = 0, + .server_ret = 0, + .have_anon_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE8192", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE8192" + }, + { + .name = "TLS 1.2 DHE-PSK (defaults)", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-PSK (FFDHE2048)", + .client_ret = 0, + .server_ret = 0, + .group = GNUTLS_GROUP_FFDHE2048, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE2048", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE2048" + }, + { + .name = "TLS 1.2 DHE-PSK (FFDHE3072)", + .group = GNUTLS_GROUP_FFDHE3072, + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE3072", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE3072" + }, + { + .name = "TLS 1.2 DHE-PSK (FFDHE4096)", + .group = GNUTLS_GROUP_FFDHE4096, + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE4096", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE4096" + }, + { + .name = "TLS 1.2 DHE-PSK (FFDHE6144)", + .client_ret = 0, + .server_ret = 0, + .group = GNUTLS_GROUP_FFDHE6144, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE6144", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE6144" + }, + { + .name = "TLS 1.2 DHE-PSK (FFDHE8192)", + .group = GNUTLS_GROUP_FFDHE8192, + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE8192", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE8192" + }, + { + .name = "TLS 1.2 DHE-RSA (defaults)", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-RSA (FFDHE2048)", + .group = GNUTLS_GROUP_FFDHE2048, + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE2048", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE2048" + }, + { + .name = "TLS 1.2 DHE-RSA (FFDHE3072)", + .group = GNUTLS_GROUP_FFDHE3072, + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE3072", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE3072" + }, + { + .name = "TLS 1.2 DHE-RSA (FFDHE4096)", + .group = GNUTLS_GROUP_FFDHE4096, + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE4096", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE4096" + }, + { + .name = "TLS 1.2 DHE-RSA (FFDHE6144)", + .group = GNUTLS_GROUP_FFDHE6144, + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE6144", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE6144" + }, + { + .name = "TLS 1.2 DHE-RSA (FFDHE8192)", + .group = GNUTLS_GROUP_FFDHE8192, + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE8192", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE8192" + }, + { + .name = "TLS 1.2 DHE-RSA (incompatible options)", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE8192", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE3072" + }, + { + .name = "TLS 1.2 DHE-RSA (complex neg)", + .group = GNUTLS_GROUP_FFDHE3072, + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE8192:+GROUP-FFDHE2048:+GROUP-FFDHE3072", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE3072" + }, + { + .name = "TLS 1.2 DHE-RSA (negotiation over ECDHE)", + .group = GNUTLS_GROUP_FFDHE3072, + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-FFDHE8192:+GROUP-FFDHE2048:+GROUP-FFDHE3072", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-FFDHE3072" + }, + { + .name = "TLS 1.2 DHE-RSA (negotiation over ECDHE - prio on ECDHE)", + .group = GNUTLS_GROUP_SECP256R1, + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE8192:+GROUP-FFDHE2048:+GROUP-FFDHE3072:+GROUP-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-FFDHE3072:+GROUP-SECP256R1" + } +}; + +void doit(void) +{ + unsigned i; + global_init(); + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the various certificate key exchange methods supported + * in gnutls */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" + +#define USE_CERT 1 +#define ASK_CERT 2 + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static +void try_with_key(const char *name, + const char *server_prio, + const char *client_prio, + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + const gnutls_datum_t *client_cert, + const gnutls_datum_t *client_key, + unsigned cert_flags, + int exp_error_server, + int exp_error_client) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_anon_server_credentials_t s_anoncred; + gnutls_dh_params_t dh_params; + const gnutls_datum_t p3 = + { (unsigned char *) pkcs3, strlen(pkcs3) }; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_anon_client_credentials_t c_anoncred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + const char *err; + + reset_buffers(); + /* Init server */ + gnutls_anon_allocate_server_credentials(&s_anoncred); + gnutls_certificate_allocate_credentials(&serverx509cred); + + ret = gnutls_certificate_set_x509_key_mem(serverx509cred, + serv_cert, serv_key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("Could not set key/cert: %s\n", gnutls_strerror(ret)); + } + + gnutls_dh_params_init(&dh_params); + gnutls_dh_params_import_pkcs3(dh_params, &p3, GNUTLS_X509_FMT_PEM); + gnutls_certificate_set_dh_params(serverx509cred, dh_params); + gnutls_anon_set_server_dh_params(s_anoncred, dh_params); + + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + gnutls_credentials_set(server, GNUTLS_CRD_ANON, s_anoncred); + + ret = gnutls_priority_set_direct(server, server_prio, &err); + if (ret < 0) { + if (ret == GNUTLS_E_INVALID_REQUEST) + fprintf(stderr, "Error in server: %s\n", err); + exit(1); + } + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + if (cert_flags == USE_CERT) { + gnutls_certificate_set_x509_key_mem(clientx509cred, + client_cert, client_key, + GNUTLS_X509_FMT_PEM); + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUIRE); + } else if (cert_flags == ASK_CERT) { + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); + } + +#if 0 + ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); +#endif + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + gnutls_anon_allocate_client_credentials(&c_anoncred); + gnutls_credentials_set(client, GNUTLS_CRD_ANON, c_anoncred); + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + ret = gnutls_priority_set_direct(client, client_prio, &err); + if (ret < 0) { + if (ret == GNUTLS_E_INVALID_REQUEST) + fprintf(stderr, "Error in %s\n", err); + exit(1); + } + success("negotiating %s\n", name); + HANDSHAKE_EXPECT(client, server, exp_error_client, exp_error_server); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + gnutls_anon_free_server_credentials(s_anoncred); + gnutls_anon_free_client_credentials(c_anoncred); + gnutls_dh_params_deinit(dh_params); +} + +void doit(void) +{ + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + /* check compatibility and handling of SIGN-ECDSA-SECP256R1-SHA256 which + * is available under TLS1.3 but not TLS1.2 */ + try_with_key("TLS 1.2 with ecdhe ecdsa with ECDSA-SECP256R1-SHA256", + NULL, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-ECDSA:-SIGN-ALL:+SIGN-ECDSA-SECP256R1-SHA256:+SIGN-ECDSA-SECP384R1-SHA384:+SIGN-ECDSA-SECP521R1-SHA512:+SIGN-RSA-SHA256", + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, NULL, NULL, 0, GNUTLS_E_NO_CIPHER_SUITES, GNUTLS_E_AGAIN); + + try_with_key("TLS 1.2 with ecdhe ecdsa with ECDSA-SHA256", + NULL, "NORMAL:-VERS-ALL:+VERS-TLS1.2:-KX-ALL:+ECDHE-ECDSA:-SIGN-ALL:+SIGN-ECDSA-SHA256:+SIGN-RSA-SHA256", + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, NULL, NULL, 0, 0, 0); + + gnutls_global_deinit(); +} diff --git a/tests/tls12-max-record.c b/tests/tls12-max-record.c new file mode 100644 index 0000000000..61ff1c4512 --- /dev/null +++ b/tests/tls12-max-record.c @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2015 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include "utils.h" + +#define SERVER_PUSH_ADD if (len > 512 + 5+32) fail("max record set to 512, len: %d\n", (int)len); +#include "eagain-common.h" + +#include "cert-common.h" + +/* This tests whether the max-record extension is respected on TLS. + */ + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +void doit(void) +{ + global_init(); + + int ret; + char buf[1024]; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + + /* General init. */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + /* Init server */ + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server2_cert, &server2_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + gnutls_priority_set_direct(server, + "NORMAL:-VERS-ALL:+VERS-TLS1.2", + NULL); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_pull_timeout_function(server, + server_pull_timeout_func); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca2_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + ret = gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.2", NULL); + if (ret < 0) + exit(1); + + gnutls_record_set_max_size(client, 512); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_pull_timeout_function(client, + client_pull_timeout_func); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + memset(buf, 1, sizeof(buf)); + ret = gnutls_record_send(server, buf, 513); + if (ret != 512 || ret < 0) { + gnutls_perror(ret); + exit(1); + } + success("did not send a 513-byte packet\n"); + + ret = gnutls_record_send(server, buf, 512); + if (ret < 0) { + gnutls_perror(ret); + exit(1); + } + success("did send a 512-byte packet\n"); + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} diff --git a/tests/tls12-prf.c b/tests/tls12-prf.c new file mode 100644 index 0000000000..c3412e277b --- /dev/null +++ b/tests/tls12-prf.c @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Authors: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "hex.h" + +int +_gnutls_prf_raw(gnutls_mac_algorithm_t mac, + size_t master_size, const void *master, + size_t label_size, const char *label, + size_t seed_size, const uint8_t *seed, size_t outsize, + char *out); + +#define MATCH_FUNC(fname, mac, dsecret, dseed, dlabel, doutput) \ +static void fname(void **glob_state) \ +{ \ + char tmp[512]; \ + gnutls_datum_t secret = dsecret; \ + gnutls_datum_t seed = dseed; \ + gnutls_datum_t label = dlabel; \ + gnutls_datum_t output = doutput; \ + int _rval; \ + _rval = _gnutls_prf_raw(mac, secret.size, secret.data, \ + label.size, (char*)label.data, seed.size, seed.data, output.size, tmp); \ + assert_int_equal(_rval, 0); \ + assert_int_equal(memcmp(tmp, output.data, output.size), 0); \ + gnutls_free(secret.data); \ + gnutls_free(label.data); \ + gnutls_free(seed.data); \ + gnutls_free(output.data); \ +} + +MATCH_FUNC(sha256_test1, GNUTLS_MAC_SHA256, + SHEX("0450b0ea9ecd3602ee0d76c5c3c86f4a"), + SHEX("207acc0254b867f5b925b45a33601d8b"), + SDATA("test label"), SHEX("ae679e0e714f5975763768b166979e1d")); + +MATCH_FUNC(sha256_test2, GNUTLS_MAC_SHA256, + SHEX("34204a9df0be6eb4e925a8027cf6c602"), + SHEX("98b2c40bcd664c83bb920c18201a6395"), + SDATA("test label"), SHEX("afa9312453c22fa83d2b511b372d73a402a2a62873239a51fade45082faf3fd2bb7ffb3e9bf36e28b3141aaba484005332a9f9e388a4d329f1587a4b317da07708ea1ba95a53f8786724bd83ce4b03af")); + +MATCH_FUNC(sha256_test3, GNUTLS_MAC_SHA256, + SHEX("a3691aa1f6814b80592bf1cf2acf1697"), + SHEX("5523d41e320e694d0c1ff5734d830b933e46927071c92621"), + SDATA("test label"), SHEX("6ad0984fa06f78fe161bd46d7c261de43340d728dddc3d0ff0dd7e0d")); + +MATCH_FUNC(sha256_test4, GNUTLS_MAC_SHA256, + SHEX("210ec937069707e5465bc46bf779e104108b18fdb793be7b218dbf145c8641f3"), + SHEX("1e351a0baf35c79945924394b881cfe31dae8f1c1ed54d3b"), + SDATA("test label"), SHEX("7653fa809cde3b553c4a17e2cdbcc918f36527f22219a7d7f95d97243ff2d5dee8265ef0af03")); + +/* https://www.ietf.org/mail-archive/web/tls/current/msg03416.html */ +MATCH_FUNC(sha384_test1, GNUTLS_MAC_SHA384, + SHEX("b80b733d6ceefcdc71566ea48e5567df"), + SHEX("cd665cf6a8447dd6ff8b27555edb7465"), + SDATA("test label"), SHEX("7b0c18e9ced410ed1804f2cfa34a336a1c14dffb4900bb5fd7942107e81c83cde9ca0faa60be9fe34f82b1233c9146a0e534cb400fed2700884f9dc236f80edd8bfa961144c9e8d792eca722a7b32fc3d416d473ebc2c5fd4abfdad05d9184259b5bf8cd4d90fa0d31e2dec479e4f1a26066f2eea9a69236a3e52655c9e9aee691c8f3a26854308d5eaa3be85e0990703d73e56f")); + +#if ENABLE_GOST +/*https://tools.ietf.org/html/rfc7836 */ +MATCH_FUNC(streebog256_test1, GNUTLS_MAC_STREEBOG_256, + SHEX("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"), + SHEX("18471d622dc655c4d2d2269691ca4a560b50aba663553af241f1ada882c9f29a"), + SHEX("1122334455"), SHEX("ff09664a44745865944f839ebb48965f1544ff1cc8e8f16f247ee5f8a9ebe97fc4e3c7900e46cad3db6a01643063040ec67fc0fd5cd9f90465235237bdff2c02")); + +MATCH_FUNC(streebog512_test1, GNUTLS_MAC_STREEBOG_512, + SHEX("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"), + SHEX("18471d622dc655c4d2d2269691ca4a560b50aba663553af241f1ada882c9f29a"), + SHEX("1122334455"), SHEX("f35187a3dc9655113a0e84d06fd7526c5fc1fbdec1a0e4673dd6d79d0b920e65ad1bc47bb083b3851cb7cd8e7e6a911a626cf02b29e9e4a58ed766a449a7296de61a7a26c4d1caeecfd80cca65c71f0f88c1f822c0e8c0ad949d03fee139579f72ba0c3d32c5f954f1cccd54081fc7440278cba1fe7b7a17a986fdff5bd15d1f")); +#endif + +int main(void) +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test(sha256_test1), + cmocka_unit_test(sha256_test2), + cmocka_unit_test(sha256_test3), + cmocka_unit_test(sha256_test4), + cmocka_unit_test(sha384_test1), +#if ENABLE_GOST + cmocka_unit_test(streebog256_test1), + cmocka_unit_test(streebog512_test1), +#endif + }; + return cmocka_run_group_tests(tests, NULL, NULL); +} diff --git a/tests/tls12-rehandshake-cert-2.c b/tests/tls12-rehandshake-cert-2.c new file mode 100644 index 0000000000..f21f2cbd33 --- /dev/null +++ b/tests/tls12-rehandshake-cert-2.c @@ -0,0 +1,403 @@ +/* + * Copyright (C) 2014 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +static void terminate(void); + +/* This program tests client and server initiated rehandshake + * behavior when they are refused by the peer. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + + +#define MAX_BUF 1024 + +static void client(int fd, unsigned test) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_anon_client_credentials_t anoncred; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + /* Need to enable anonymous KX specifically. */ + + global_init(); + memset(buffer, 2, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(3); + } + + gnutls_anon_allocate_client_credentials(&anoncred); + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* Use default priorities */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:+VERS-TLS1.2", NULL); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + if (debug) + success("client: test %d\n", test); + + if (test != 0) { + ret = gnutls_handshake(session); + if (ret != GNUTLS_E_GOT_APPLICATION_DATA) { + fail("client: error in code after rehandshake: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + do { + do { + ret = + gnutls_record_recv(session, buffer, + MAX_BUF); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + } while (ret > 0); + + } else { + do { + do { + ret = + gnutls_record_recv(session, buffer, + MAX_BUF); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + } while (ret > 0); + + if (ret != GNUTLS_E_REHANDSHAKE) { + fail("client: Error receiving rehandshake: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + do { + ret = + gnutls_record_send(session, buffer, sizeof(buffer)); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fail("Error sending %d byte packet: %s\n", + (int)sizeof(buffer), gnutls_strerror(ret)); + exit(1); + } + + do { + ret = + gnutls_record_send(session, buffer, sizeof(buffer)); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fail("Error sending %d byte packet: %s\n", + (int)sizeof(buffer), gnutls_strerror(ret)); + exit(1); + } + + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + + gnutls_deinit(session); + + gnutls_anon_free_client_credentials(anoncred); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +/* These are global */ +pid_t child; + +static void terminate(void) +{ + kill(child, SIGTERM); + exit(1); +} + +static void server(int fd, unsigned test) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_anon_server_credentials_t anoncred; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(3); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, GNUTLS_X509_FMT_PEM); + + gnutls_anon_allocate_server_credentials(&anoncred); + + gnutls_init(&session, GNUTLS_SERVER); + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:+VERS-TLS1.2", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + terminate(); + } + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + if (debug) + success("server: test %d\n", test); + + if (test != 0) { + + do { + do { + ret = + gnutls_record_recv(session, buffer, + MAX_BUF); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + } while (ret > 0); + + if (ret != GNUTLS_E_REHANDSHAKE) { + fail("server: Error receiving client handshake request: %s\n", gnutls_strerror(ret)); + terminate(); + } + + do { + ret = + gnutls_record_send(session, buffer, sizeof(buffer)); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fail("Error sending %d byte packet: %s\n", + (int)sizeof(buffer), gnutls_strerror(ret)); + terminate(); + } + + } else { + if (debug) + success("server: sending rehandshake request\n"); + + ret = gnutls_rehandshake(session); + if (ret < 0) { + fail("Error sending %d byte packet: %s\n", + (int)sizeof(buffer), gnutls_strerror(ret)); + terminate(); + } + + if (debug) + success("server: starting handshake\n"); + + ret = gnutls_handshake(session); + + if (ret != GNUTLS_E_GOT_APPLICATION_DATA) { + fail("server: didn't receive GNUTLS_E_GOT_APPLICATION_DATA: %s\n", gnutls_strerror(ret)); + terminate(); + } + + if (debug) + success("server: got application data error code: %s\n", + gnutls_strerror(ret)); + + do { + do { + ret = + gnutls_record_recv(session, buffer, + MAX_BUF); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + } while (ret > 0); + + if (debug) + success("server: final ret: %s\n", + gnutls_strerror(ret)); + + if (ret < 0) { + fail("Error receiving final packet: %s\n", + gnutls_strerror(ret)); + terminate(); + } + + } + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + gnutls_deinit(session); + + gnutls_anon_free_server_credentials(anoncred); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void start(unsigned test) +{ + int fd[2]; + int ret; + int status = 0; + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], test); + wait(&status); + check_wait_status(status); + } else { + close(fd[0]); + client(fd[1], test); + exit(0); + } +} + +static void ch_handler(int sig) +{ + return; +} + +void doit(void) +{ + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + start(0); + start(1); +} + +#endif /* _WIN32 */ diff --git a/tests/tls12-rehandshake-cert-3.c b/tests/tls12-rehandshake-cert-3.c new file mode 100644 index 0000000000..5d609d882f --- /dev/null +++ b/tests/tls12-rehandshake-cert-3.c @@ -0,0 +1,333 @@ +/* + * Copyright (C) 2014 Nikos Mavrogiannopoulos + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +static void terminate(void); + +/* This program tests client initiated rehandshake. + * On the initial handshake a certificate is requested from the + * client, while on the following up not. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define MAX_BUF 1024 +#define MAX_REHANDSHAKES 16 + +static void client(int fd) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + unsigned i; + + global_init(); + memset(buffer, 2, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(3); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &cli_cert, + &cli_key, GNUTLS_X509_FMT_PEM); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* Use default priorities */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2:+VERS-TLS1.1", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + for (i=0;i 0); + + if (ret != 0) { + fail("client: Error receiving: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +/* These are global */ +pid_t child; + +static void terminate(void) +{ + kill(child, SIGTERM); + exit(1); +} + +static void server(int fd) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + unsigned tries = 0; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2:+VERS-TLS1.1", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + gnutls_certificate_server_set_request(session, GNUTLS_CERT_REQUIRE); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + terminate(); + } + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + gnutls_certificate_server_set_request(session, GNUTLS_CERT_IGNORE); + + do { + tries++; + + do { + do { + ret = + gnutls_record_recv(session, buffer, + MAX_BUF); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + } while (ret > 0); + + if (ret == 0) + break; + + if (ret != GNUTLS_E_REHANDSHAKE) { + fail("server: Error receiving client handshake request: %s\n", gnutls_strerror(ret)); + terminate(); + } + + if (debug) + success("server: starting handshake\n"); + + ret = gnutls_handshake(session); + if (ret != 0) { + fail("server: unexpected error: %s\n", gnutls_strerror(ret)); + terminate(); + } + + if (debug) + success("server: handshake %d\n", tries); + } while(tries < MAX_REHANDSHAKES); + + if (tries < MAX_REHANDSHAKES) + fail("server: only did %d rehandshakes\n", tries); + + ret = gnutls_record_send(session, "hello", 4); + if (ret < 0) { + fail("Error sending data: %s\n", + gnutls_strerror(ret)); + terminate(); + } + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void start(void) +{ + int fd[2]; + int ret; + int status = 0; + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0]); + wait(&status); + check_wait_status(status); + } else { + close(fd[0]); + client(fd[1]); + exit(0); + } +} + +static void ch_handler(int sig) +{ + return; +} + +void doit(void) +{ + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + start(); +} + +#endif /* _WIN32 */ diff --git a/tests/tls12-rehandshake-cert-auto.c b/tests/tls12-rehandshake-cert-auto.c new file mode 100644 index 0000000000..88975c9ed4 --- /dev/null +++ b/tests/tls12-rehandshake-cert-auto.c @@ -0,0 +1,278 @@ +/* + * Copyright (C) 2014 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +/* This program tests server initiated rehandshake when + * handled transparently by the client. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + + +#define MAX_BUF 1024 + +static void client(int fd) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_anon_client_credentials_t anoncred; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + /* Need to enable anonymous KX specifically. */ + + global_init(); + memset(buffer, 2, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(4); + } + + gnutls_anon_allocate_client_credentials(&anoncred); + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_AUTO_REAUTH); + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* Use default priorities */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:+VERS-TLS1.2", NULL); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + do { + ret = + gnutls_record_recv(session, buffer, + MAX_BUF); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + + assert(ret == 0); + + gnutls_bye(session, GNUTLS_SHUT_WR); + close(fd); + + gnutls_deinit(session); + + gnutls_anon_free_client_credentials(anoncred); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +/* These are global */ +pid_t child; + +static void server(int fd) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_anon_server_credentials_t anoncred; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, GNUTLS_X509_FMT_PEM); + + gnutls_anon_allocate_server_credentials(&anoncred); + + gnutls_init(&session, GNUTLS_SERVER); + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:+VERS-TLS1.2", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_ANON, anoncred); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + } + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + if (debug) + success("server: sending rehandshake request\n"); + + do { + ret = gnutls_rehandshake(session); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret < 0) { + fail("Error sending %d byte packet: %s\n", + (int)sizeof(buffer), gnutls_strerror(ret)); + } + + if (debug) + success("server: starting handshake\n"); + + ret = gnutls_handshake(session); + if (ret < 0) { + fail("server: didn't complete handshake: %s\n", gnutls_strerror(ret)); + } + + if (debug) + success("server: re-handshake is complete\n"); + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_RDWR); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + close(fd); + gnutls_deinit(session); + + gnutls_anon_free_server_credentials(anoncred); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +void doit(void) +{ + signal(SIGCHLD, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + + int fd[2]; + int ret; + int status = 0; + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0]); + wait(&status); + check_wait_status(status); + } else { + close(fd[0]); + client(fd[1]); + exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls12-rehandshake-cert.c b/tests/tls12-rehandshake-cert.c new file mode 100644 index 0000000000..dc4937d06b --- /dev/null +++ b/tests/tls12-rehandshake-cert.c @@ -0,0 +1,182 @@ +/* + * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Simon Josefsson, Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "cmocka-common.h" + +/* This program tests server initiated rehandshake */ + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d>| %s", level, str); +} + +#define MAX_REHANDSHAKES 16 + +static void test_rehandshake(void **glob_state, unsigned appdata) +{ + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + char buffer[64]; + int ret; + unsigned i; + + /* General init. */ + reset_buffers(); + ret = gnutls_global_init(); + assert_return_code(ret, 0); + + gnutls_global_set_log_function(tls_log_func); + + /* Init server */ + ret = gnutls_certificate_allocate_credentials(&serverx509cred); + assert_return_code(ret, 0); + + ret = gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + assert_return_code(ret, 0); + + ret = gnutls_init(&server, GNUTLS_SERVER); + assert_return_code(ret, 0); + + ret = gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + assert_return_code(ret, 0); + + ret = gnutls_priority_set_direct(server, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:+VERS-TLS1.2", NULL); + assert_return_code(ret, 0); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + assert_return_code(ret, 0); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + assert_return_code(ret, 0); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + assert_return_code(ret, 0); + + ret = gnutls_priority_set_direct(client, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:+VERS-TLS1.2", NULL); + assert_return_code(ret, 0); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + if (appdata) { + /* send application data prior to handshake */ + ssize_t n; + char b[1]; + + do { + sret = gnutls_rehandshake(server); + } while (sret == GNUTLS_E_AGAIN); + + do { + n = gnutls_record_recv(client, b, 1); + } while(n == GNUTLS_E_AGAIN); + + assert_int_equal(n, GNUTLS_E_REHANDSHAKE); + + /* client sends app data and the server ignores them */ + do { + cret = gnutls_record_send(client, "x", 1); + } while (cret == GNUTLS_E_AGAIN); + + do { + sret = gnutls_handshake(server); + } while (sret == GNUTLS_E_AGAIN); + assert_int_equal(sret, GNUTLS_E_GOT_APPLICATION_DATA); + + do { + n = gnutls_record_recv(server, buffer, sizeof(buffer)); + } while(n == GNUTLS_E_AGAIN); + + HANDSHAKE(client, server); + } else { + ssize_t n; + char b[1]; + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" +#include "eagain-common.h" + +/* This program tests whether setting a new priority string + * with TLS1.3 enabled on a running TLS1.2 session will + * not prohibit or affect a following rehandshake. + * + * Seen in https://bugzilla.redhat.com/show_bug.cgi?id=1634736 + */ + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d>| %s", level, str); +} + +#define MAX_REHANDSHAKES 16 + +static void test_rehandshake(void) +{ + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + unsigned i; + + reset_buffers(); + assert(gnutls_global_init()>=0); + + gnutls_global_set_log_function(tls_log_func); + + /* Init server */ + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&server, GNUTLS_SERVER)>=0); + + assert(gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred)>=0); + + assert(gnutls_priority_set_direct(server, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:+VERS-TLS1.2", NULL)>=0); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + assert(gnutls_certificate_allocate_credentials(&clientx509cred)>=0); + + assert(gnutls_init(&client, GNUTLS_CLIENT)>=0); + + assert(gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred)>=0); + + assert(gnutls_priority_set_direct(client, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:+VERS-TLS1.2", NULL)>=0); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + { + ssize_t n; + char b[1]; + + for (i=0;i=0); + + HANDSHAKE(client, server); + } + } + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} + +void doit(void) +{ + test_rehandshake(); +} diff --git a/tests/tls12-server-kx-neg.c b/tests/tls12-server-kx-neg.c new file mode 100644 index 0000000000..e3a2de363a --- /dev/null +++ b/tests/tls12-server-kx-neg.c @@ -0,0 +1,562 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the ciphersuite negotiation for various key exchange + * methods and options. */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" + +#include "server-kx-neg-common.c" + +test_case_st tests[] = { + { + .name = "TLS 1.2 ANON-DH without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ANON-DH with cred but no DH params", + .client_ret = 0, + .server_ret = 0, + .have_anon_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ANON-DH with cred and DH params (level)", + .server_ret = 0, + .client_ret = 0, + .have_anon_cred = 1, + .have_anon_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ANON-DH with cred and DH params (explicit)", + .server_ret = 0, + .client_ret = 0, + .have_anon_cred = 1, + .have_anon_exp_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ANON-DH:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-RSA without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-RSA with cred but no DH params or cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-RSA with cred and cert but no DH params", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-RSA with cred and DH params but no cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-RSA with cred and incompatible cert and DH params", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .have_ecc_sign_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-RSA with cred and cert and DH params (level)", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-RSA with cred and cert and DH params (explicit)", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_cert_exp_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-RSA with cred and multiple certs and DH params", + .client_ret = 0, + .server_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .have_cert_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-PSK without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-PSK with cred but no DH params", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-PSK with cred and DH params (level)", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .have_psk_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 DHE-PSK with cred and DH params (explicit)", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .have_psk_exp_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-RSA without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-RSA with cred but no common curve or cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.2 ECDHE-RSA with cred and cert but no common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.2 ECDHE-RSA with cred and common curve but no cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-RSA with cred and incompatible cert and common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-RSA with cred and cert and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-RSA with cred and multiple certs and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + + { + .name = "TLS 1.2 ECDHE-ECDSA without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-ECDSA with cred but no common curve or cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.2 ECDHE-ECDSA with cred and cert but no common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.2 ECDHE-ECDSA with cred and common curve but no ECDSA cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-ECDSA with cred and common curve but no cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-ECDSA with cred and cert and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-ECDSA with cred and multiple certs and common curve", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_ecc_sign_cert = 1, + .have_rsa_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-ECDSA with cred and ed25519 cert", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_ed25519_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-ECDSA with cred and cert but incompatible (ed25519) curves", + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .client_ret = GNUTLS_E_AGAIN, + .have_cert_cred = 1, + .have_ed25519_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-ECDSA:-VERS-ALL:+VERS-TLS1.2:-CURVE-ED25519:-SIGN-EDDSA-ED25519" + }, + { + .name = "TLS 1.2 ECDHE-PSK without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 ECDHE-PSK with cred but no common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.2:-CURVE-ALL:+CURVE-SECP256R1", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.2:-CURVE-ALL:+CURVE-SECP384R1" + }, + { + .name = "TLS 1.2 ECDHE-PSK with cred and common curve", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 RSA-PSK without cert cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 RSA-PSK without psk cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 RSA-PSK with cred but invalid cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 RSA-PSK with cred", + .server_ret = 0, + .client_ret = 0, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 RSA-PSK with cred and multiple certs", + .server_ret = 0, + .client_ret = 0, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 SRP-RSA without cert cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_srp_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 SRP-RSA without srp cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_srp_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 SRP-RSA with cred but invalid cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 SRP-RSA with cred", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 SRP-RSA with cred and multiple certs", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 SRP without srp cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_srp_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 SRP with cred", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+SRP:-VERS-ALL:+VERS-TLS1.2" + }, + +#ifdef ENABLE_GOST + { + .name = "TLS 1.2 VKO-GOST-12 without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 VKO-GOST-12 with cred but no cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 VKO-GOST-12 with cred but no GOST cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 VKO-GOST-12 with cred and GOST12-256 cert", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_gost12_256_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 VKO-GOST-12 with cred and GOST12-512 cert", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_gost12_512_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 VKO-GOST-12 with cred and multiple certs", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_ecc_sign_cert = 1, + .have_rsa_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .have_gost12_256_cert = 1, + .have_gost12_512_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2" + }, + { + .name = "TLS 1.2 VKO-GOST-12 with cred and GOST12-256 cert client lacking signature algs (like SChannel)", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_gost12_256_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NONE:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+VERS-TLS1.2:+SIGN-RSA-SHA256" + }, + { + .name = "TLS 1.2 VKO-GOST-12 with cred and GOST12-512 cert client lacking signature algs (like SChannel)", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_gost12_512_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NONE:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+VERS-TLS1.2:+SIGN-RSA-SHA256" + }, +#endif +}; + +void doit(void) +{ + unsigned i; + global_init(); + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the various certificate key exchange methods supported + * in gnutls */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "common-cert-key-exchange.h" +#include "cert-common.h" + +void doit(void) +{ + global_init(); + + server_priority = "NORMAL:+ANON-DH:+ANON-ECDH:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519:+SIGN-EDDSA-ED25519"; + try_x509("TLS 1.3 with ffdhe2048 rsa no-cli-cert / anon on server", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + + /** X.509 tests **/ + server_priority = "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519:+SIGN-EDDSA-ED25519"; + + /* TLS 1.3 no client cert */ + try_x509("TLS 1.3 with ffdhe2048 rsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.3 with ffdhe3072 rsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE3072", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.3 with ffdhe4096 rsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE4096", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.3 with secp256r1 rsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.3 with secp384r1 rsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP384R1", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.3 with secp521r1 rsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP521R1", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.3 with x25519 rsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + + try_with_key_ks("TLS 1.3 with secp256r1 ecdsa no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_ECDSA_SECP256R1_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, NULL, NULL, 0, GNUTLS_GROUP_SECP256R1, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + + /* Test RSA-PSS cert/key combo issues */ + try_with_key_ks("TLS 1.3 with x25519 with rsa-pss-sha256 key no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_rsa_pss2_cert, &server_ca3_rsa_pss2_key, NULL, NULL, 0, GNUTLS_GROUP_X25519, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_with_key_ks("TLS 1.3 with x25519 with rsa-pss-sha256 key and 1 sig no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:-SIGN-ALL:+SIGN-RSA-PSS-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_rsa_pss2_cert, &server_ca3_rsa_pss2_key, NULL, NULL, 0, GNUTLS_GROUP_X25519, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_with_key_ks("TLS 1.3 with x25519 with rsa-pss-sha256 key and rsa-pss-sha384 first sig no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:-SIGN-ALL:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_rsa_pss2_cert, &server_ca3_rsa_pss2_key, NULL, NULL, 0, GNUTLS_GROUP_X25519, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_with_key_ks("TLS 1.3 with x25519 with rsa-pss-sha256 key and rsa-pss-sha512 first sig no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:-SIGN-ALL:+SIGN-RSA-PSS-SHA512:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_rsa_pss2_cert, &server_ca3_rsa_pss2_key, NULL, NULL, 0, GNUTLS_GROUP_X25519, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + + try_with_key_ks("TLS 1.3 with x25519 rsa-pss/rsa-pss no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:-SIGN-ALL:+SIGN-RSA-PSS-SHA256", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_SHA256, GNUTLS_SIGN_UNKNOWN, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, NULL, NULL, 0, GNUTLS_GROUP_X25519, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_with_key_ks("TLS 1.3 with x25519 ed25519 no-cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:+ECDHE-ECDSA:-CURVE-ALL:+CURVE-X25519:-SIGN-ALL:+SIGN-EDDSA-ED25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_EDDSA_ED25519, GNUTLS_SIGN_UNKNOWN, + &server_ca3_eddsa_cert, &server_ca3_eddsa_key, NULL, NULL, 0, GNUTLS_GROUP_X25519, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + + /* client authentication */ + try_with_key("TLS 1.3 with rsa-pss cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_ECDSA_SECP256R1_SHA256, GNUTLS_SIGN_RSA_PSS_SHA256, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_rsa_pss_cert, &cli_ca3_rsa_pss_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + try_with_key("TLS 1.3 with rsa cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_ECDSA_SECP256R1_SHA256, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + try_with_key("TLS 1.3 with ecdsa cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:+ECDHE-RSA", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_ECDSA_SECP256R1_SHA256, GNUTLS_SIGN_ECDSA_SECP256R1_SHA256, + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + try_with_key("TLS 1.3 with x25519 ed25519 cli-cert (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:+ECDHE-RSA:-CURVE-ALL:+CURVE-X25519:-SIGN-ALL:+SIGN-EDDSA-ED25519", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_EDDSA_ED25519, GNUTLS_SIGN_EDDSA_ED25519, + &server_ca3_eddsa_cert, &server_ca3_eddsa_key, &server_ca3_eddsa_cert, &server_ca3_eddsa_key, USE_CERT, GNUTLS_CRT_X509, GNUTLS_CRT_X509); + + /* TLS 1.3 mis-matching groups */ + /* Our policy is to send a key share for the first of each type of groups, so make sure + * the server doesn't support them */ + server_priority = "NORMAL:-GROUP-ALL:-VERS-TLS-ALL:+VERS-TLS1.3:+GROUP-FFDHE3072:+GROUP-SECP521R1", + + try_x509_ks("TLS 1.3 with default key share (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-FFDHE3072", GNUTLS_KX_DHE_RSA, GNUTLS_GROUP_FFDHE3072); + try_x509_ks("TLS 1.3 with ffdhe2048 key share (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-FFDHE3072", GNUTLS_KX_DHE_RSA, GNUTLS_GROUP_FFDHE3072); + try_x509_ks("TLS 1.3 with ffdhe4096 key share (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE4096:+GROUP-FFDHE3072", GNUTLS_KX_DHE_RSA, GNUTLS_GROUP_FFDHE3072); + try_x509_ks("TLS 1.3 with secp256r1 key share (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-SECP521R1", GNUTLS_KX_ECDHE_RSA, GNUTLS_GROUP_SECP521R1); + try_x509_ks("TLS 1.3 with secp384r1 key share (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP384R1:+GROUP-SECP521R1", GNUTLS_KX_ECDHE_RSA, GNUTLS_GROUP_SECP521R1); + try_x509_ks("TLS 1.3 with secp521r1 key share (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP521R1", GNUTLS_KX_ECDHE_RSA, GNUTLS_GROUP_SECP521R1); + try_x509_ks("TLS 1.3 with x25519 -> ffdhe3072 key share (ctype X.509)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:+GROUP-SECP384R1:+GROUP-FFDHE3072", GNUTLS_KX_DHE_RSA, GNUTLS_GROUP_FFDHE3072); + + /* TLS 1.2 fallback */ + server_priority = "NORMAL:-VERS-ALL:+VERS-TLS1.2:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519:+SIGN-EDDSA-ED25519", + + try_with_key_ks("TLS 1.2 fallback with x25519 ed25519 no-cli-cert", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:-KX-ALL:+ECDHE-ECDSA:-CURVE-ALL:+CURVE-X25519:-SIGN-ALL:+SIGN-EDDSA-ED25519", GNUTLS_KX_ECDHE_ECDSA, GNUTLS_SIGN_EDDSA_ED25519, GNUTLS_SIGN_UNKNOWN, + &server_ca3_eddsa_cert, &server_ca3_eddsa_key, NULL, NULL, 0, 0, GNUTLS_CRT_X509, GNUTLS_CRT_UNKNOWN); + try_x509("TLS 1.2 fallback with secp521r1 rsa no-cli-cert", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:-GROUP-ALL:+GROUP-SECP521R1", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + try_x509("TLS 1.2 fallback with ffdhe2048 rsa no-cli-cert", "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:-KX-ALL:+DHE-RSA:-GROUP-ALL:+GROUP-FFDHE2048", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_SHA256, GNUTLS_SIGN_UNKNOWN); + + /** Raw public-key tests **/ + server_priority = "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0:+ECDHE-RSA:+DHE-RSA:+RSA:+ECDHE-ECDSA:+CURVE-X25519:+SIGN-EDDSA-ED25519:+CTYPE-ALL"; + + try_rawpk("TLS 1.3 with ffdhe2048 rsa no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+CTYPE-ALL", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_rawpk("TLS 1.3 with ffdhe3072 rsa no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE3072:+CTYPE-ALL", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_rawpk("TLS 1.3 with ffdhe4096 rsa no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE4096:+CTYPE-ALL", GNUTLS_KX_DHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_rawpk("TLS 1.3 with secp256r1 rsa no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1:+CTYPE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_rawpk("TLS 1.3 with secp384r1 rsa no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP384R1:+CTYPE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_rawpk("TLS 1.3 with secp521r1 rsa no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP521R1:+CTYPE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + try_rawpk("TLS 1.3 with x25519 rsa no-cli-cert (ctype Raw PK)", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:+CTYPE-ALL", GNUTLS_KX_ECDHE_RSA, GNUTLS_SIGN_RSA_PSS_RSAE_SHA256, GNUTLS_SIGN_UNKNOWN); + + + /** Illegal setups **/ + server_priority = "NORMAL:-VERS-ALL:+VERS-TLS1.3"; + try_with_key_fail("TLS 1.3 with rsa cert and only RSA-PSS sig algos in client", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:-SIGN-ALL:+SIGN-RSA-PSS-SHA256:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA512", + GNUTLS_E_NO_CIPHER_SUITES, GNUTLS_E_AGAIN, + &server_ca3_localhost_cert, &server_ca3_key, NULL, NULL); + + try_with_key_fail("TLS 1.3 with x25519 with rsa-pss cert and RSAE signatures", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA256:+SIGN-RSA-PSS-RSAE-SHA384", + GNUTLS_E_NO_CIPHER_SUITES, GNUTLS_E_AGAIN, + &server_ca3_rsa_pss2_cert, &server_ca3_rsa_pss2_key, NULL, NULL); + + server_priority = NULL; + try_with_key_fail("TLS 1.3 with rsa cert and only RSA-PSS sig algos", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:-SIGN-ALL:+SIGN-RSA-PSS-SHA256:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA512", + GNUTLS_E_NO_CIPHER_SUITES, GNUTLS_E_AGAIN, + &server_ca3_localhost_cert, &server_ca3_key, NULL, NULL); + + try_with_key_fail("TLS 1.3 with rsa-pss cert and rsa cli cert with only RSA-PSS sig algos", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:-SIGN-ALL:+SIGN-RSA-PSS-SHA256:+SIGN-RSA-PSS-SHA384:+SIGN-RSA-PSS-SHA512", + GNUTLS_E_CERTIFICATE_REQUIRED, GNUTLS_E_SUCCESS, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, &cli_ca3_cert, &cli_ca3_key); + + try_with_key_fail("TLS 1.3 with rsa encryption cert", + "NORMAL:-VERS-ALL:+VERS-TLS1.3", + GNUTLS_E_NO_CIPHER_SUITES, GNUTLS_E_AGAIN, + &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key, NULL, NULL); + + try_with_key_fail("TLS 1.3 and TLS 1.2 with rsa encryption cert", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2", + GNUTLS_E_SUCCESS, GNUTLS_E_SUCCESS, + &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key, NULL, NULL); + + try_with_key_fail("TLS 1.3 with (forced) rsa encryption cert - client should detect", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:%DEBUG_ALLOW_KEY_USAGE_VIOLATIONS", + GNUTLS_E_AGAIN, GNUTLS_E_KEY_USAGE_VIOLATION, + &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key, NULL, NULL); + + try_with_key_fail("TLS 1.3 with client rsa encryption cert", + "NORMAL:-VERS-ALL:+VERS-TLS1.3", + GNUTLS_E_AGAIN, GNUTLS_E_INSUFFICIENT_CREDENTIALS, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key); + + try_with_key_fail("TLS 1.3 with (forced) client rsa encryption cert - server should detect", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:%DEBUG_ALLOW_KEY_USAGE_VIOLATIONS", + GNUTLS_E_KEY_USAGE_VIOLATION, GNUTLS_E_SUCCESS, + &server_ca3_rsa_pss_cert, &server_ca3_rsa_pss_key, &server_ca3_localhost_rsa_decrypt_cert, &server_ca3_key); + + try_with_rawpk_key_fail("rawpk TLS 1.3 with rsa encryption cert", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:+CTYPE-RAWPK", + GNUTLS_E_NO_CIPHER_SUITES, GNUTLS_E_AGAIN, + &rawpk_public_key1, &rawpk_private_key1, GNUTLS_KEY_KEY_ENCIPHERMENT, NULL, NULL, 0); + + try_with_rawpk_key_fail("rawpk TLS 1.3 and TLS 1.2 with rsa encryption cert", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+CTYPE-RAWPK", + GNUTLS_E_SUCCESS, GNUTLS_E_SUCCESS, + &rawpk_public_key1, &rawpk_private_key1, GNUTLS_KEY_KEY_ENCIPHERMENT, NULL, NULL, 0); + + try_with_rawpk_key_fail("rawpk TLS 1.3 with client rsa encryption cert", + "NORMAL:-VERS-ALL:+VERS-TLS1.3:+CTYPE-RAWPK", + GNUTLS_E_AGAIN, GNUTLS_E_INSUFFICIENT_CREDENTIALS, + &rawpk_public_key2, &rawpk_private_key2, 0, &rawpk_public_key1, &rawpk_private_key1, GNUTLS_KEY_KEY_ENCIPHERMENT); + + /* we do not test TLS 1.3 with (forced) rsa encryption cert - client should detect, because + * there is no way under raw public keys for the client or server to know the intended type. */ + + gnutls_global_deinit(); +} diff --git a/tests/tls13-cipher-neg.c b/tests/tls13-cipher-neg.c new file mode 100644 index 0000000000..16a8883d80 --- /dev/null +++ b/tests/tls13-cipher-neg.c @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the ciphersuite negotiation for various key exchange + * methods and options under TLS1.3. */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" + +#include "cipher-neg-common.c" + +/* We remove the ECDHE and DHE key exchanges as they impose additional + * rules in the sorting of groups. + */ +#define SPRIO "NORMAL:-VERS-ALL:+VERS-TLS1.3" +#define CPRIO "NORMAL:-VERS-ALL:+VERS-TLS1.3" + +test_case_st tests[] = { + { + .name = "server TLS 1.3: NULL (server - exp fallback)", + .not_on_fips = 1, + .cipher = GNUTLS_CIPHER_NULL, + .server_prio = SPRIO":+VERS-TLS1.2:-CIPHER-ALL:+NULL:+CIPHER-ALL:%SERVER_PRECEDENCE:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-ALL", + .client_prio = CPRIO":+VERS-TLS1.2:+NULL:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-SECP384R1:+GROUP-SECP521R1:+GROUP-SECP256R1", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(NULL)-(SHA1)", + }, + { + .name = "client TLS 1.3: NULL (client)", + .not_on_fips = 1, + .cipher = GNUTLS_CIPHER_NULL, + .server_prio = SPRIO":+VERS-TLS1.2:+NULL:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-SECP384R1:+GROUP-SECP521R1:+GROUP-SECP256R1", + .client_prio = CPRIO":-CIPHER-ALL:+NULL:+CIPHER-ALL:+VERS-TLS1.2:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-ALL", + .desc = "(TLS1.2)-(ECDHE-SECP256R1)-(ECDSA-SHA256)-(NULL)-(SHA1)", + }, + { + .name = "server TLS 1.3: AES-128-GCM with SECP256R1 (server)", + .cipher = GNUTLS_CIPHER_AES_128_GCM, + .group = GNUTLS_GROUP_SECP256R1, + .server_prio = SPRIO":-CIPHER-ALL:+AES-128-GCM:+CIPHER-ALL:%SERVER_PRECEDENCE:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-ALL", + .client_prio = CPRIO":+AES-128-GCM:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-SECP384R1:+GROUP-SECP521R1:+GROUP-SECP256R1", + .desc = "(TLS1.3)-(ECDHE-SECP256R1)-(RSA-PSS-RSAE-SHA256)-(AES-128-GCM)", + }, + { + .name = "both TLS 1.3: AES-128-GCM with X25519 (server)", + .cipher = GNUTLS_CIPHER_AES_128_GCM, + .group = GNUTLS_GROUP_X25519, + .server_prio = SPRIO":-CIPHER-ALL:+AES-128-GCM:+CIPHER-ALL:%SERVER_PRECEDENCE:-GROUP-ALL:+GROUP-X25519:+GROUP-ALL", + .client_prio = CPRIO":+AES-128-GCM:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-SECP384R1:+GROUP-SECP521R1:+GROUP-SECP256R1:+GROUP-ALL", + .desc = "(TLS1.3)-(ECDHE-X25519)-(RSA-PSS-RSAE-SHA256)-(AES-128-GCM)", + }, + { + .name = "client TLS 1.3: AES-128-GCM with SECP256R1 (client)", + .cipher = GNUTLS_CIPHER_AES_128_GCM, + .group = GNUTLS_GROUP_SECP256R1, + .server_prio = SPRIO":+AES-128-GCM:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-SECP384R1:+GROUP-SECP521R1:+GROUP-SECP256R1", + .client_prio = CPRIO":-CIPHER-ALL:+AES-128-GCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-ALL", + .desc = "(TLS1.3)-(ECDHE-SECP256R1)-(RSA-PSS-RSAE-SHA256)-(AES-128-GCM)", + }, + { + .name = "both TLS 1.3: AES-128-GCM with X25519 (client)", + .cipher = GNUTLS_CIPHER_AES_128_GCM, + .group = GNUTLS_GROUP_X25519, + .server_prio = SPRIO":+AES-128-GCM:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-SECP384R1:+GROUP-SECP521R1:+GROUP-SECP256R1:+GROUP-ALL", + .client_prio = CPRIO":-CIPHER-ALL:+AES-128-GCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:+GROUP-ALL", + .desc = "(TLS1.3)-(ECDHE-X25519)-(RSA-PSS-RSAE-SHA256)-(AES-128-GCM)", + }, + { + .name = "server TLS 1.3: AES-128-CCM and FFDHE2048 (server)", + .cipher = GNUTLS_CIPHER_AES_128_CCM, + .group = GNUTLS_GROUP_FFDHE2048, + .server_prio = SPRIO":-CIPHER-ALL:+AES-128-CCM:+CIPHER-ALL:%SERVER_PRECEDENCE:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-ALL", + .client_prio = CPRIO":+AES-128-CCM", + .desc = "(TLS1.3)-(DHE-FFDHE2048)-(RSA-PSS-RSAE-SHA256)-(AES-128-CCM)", + }, + { + .name = "both TLS 1.3: AES-128-CCM and FFDHE 2048 (server)", + .cipher = GNUTLS_CIPHER_AES_128_CCM, + .group = GNUTLS_GROUP_FFDHE2048, + .server_prio = SPRIO":-CIPHER-ALL:+AES-128-CCM:+CIPHER-ALL:%SERVER_PRECEDENCE:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-ALL", + .client_prio = CPRIO":+AES-128-CCM:+VERS-TLS1.3", + .desc = "(TLS1.3)-(DHE-FFDHE2048)-(RSA-PSS-RSAE-SHA256)-(AES-128-CCM)", + }, + { + .name = "client TLS 1.3: AES-128-CCM and FFDHE 2048 (client)", + .cipher = GNUTLS_CIPHER_AES_128_CCM, + .group = GNUTLS_GROUP_FFDHE2048, + .server_prio = SPRIO":+AES-128-CCM", + .client_prio = CPRIO":-CIPHER-ALL:+AES-128-CCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-ALL", + .desc = "(TLS1.3)-(DHE-FFDHE2048)-(RSA-PSS-RSAE-SHA256)-(AES-128-CCM)", + }, + { + .name = "both TLS 1.3: AES-128-CCM and FFDHE 2048 (client)", + .cipher = GNUTLS_CIPHER_AES_128_CCM, + .group = GNUTLS_GROUP_FFDHE2048, + .server_prio = SPRIO":+AES-128-CCM:+VERS-TLS1.3", + .client_prio = CPRIO":-CIPHER-ALL:+AES-128-CCM:+CIPHER-ALL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-ALL", + .desc = "(TLS1.3)-(DHE-FFDHE2048)-(RSA-PSS-RSAE-SHA256)-(AES-128-CCM)", + }, + { + .name = "server TLS 1.3: CHACHA20-POLY (server)", + .cipher = GNUTLS_CIPHER_CHACHA20_POLY1305, + .not_on_fips = 1, + .server_prio = SPRIO":-CIPHER-ALL:+CHACHA20-POLY1305:+CIPHER-ALL:%SERVER_PRECEDENCE", + .client_prio = CPRIO":+CHACHA20-POLY1305", + .desc = "(TLS1.3)-(ECDHE-SECP256R1)-(RSA-PSS-RSAE-SHA256)-(CHACHA20-POLY1305)", + }, + { + .name = "both TLS 1.3: CHACHA20-POLY (server)", + .cipher = GNUTLS_CIPHER_CHACHA20_POLY1305, + .not_on_fips = 1, + .server_prio = SPRIO":-CIPHER-ALL:+CHACHA20-POLY1305:+CIPHER-ALL:%SERVER_PRECEDENCE", + .client_prio = CPRIO":+CHACHA20-POLY1305:+VERS-TLS1.3", + .desc = "(TLS1.3)-(ECDHE-SECP256R1)-(RSA-PSS-RSAE-SHA256)-(CHACHA20-POLY1305)", + }, + { + .name = "client TLS 1.3: CHACHA20-POLY (client)", + .cipher = GNUTLS_CIPHER_CHACHA20_POLY1305, + .not_on_fips = 1, + .server_prio = SPRIO":+CHACHA20-POLY1305", + .client_prio = CPRIO":-CIPHER-ALL:+CHACHA20-POLY1305:+CIPHER-ALL", + .desc = "(TLS1.3)-(ECDHE-SECP256R1)-(RSA-PSS-RSAE-SHA256)-(CHACHA20-POLY1305)", + }, + { + .name = "both TLS 1.3: CHACHA20-POLY (client)", + .cipher = GNUTLS_CIPHER_CHACHA20_POLY1305, + .not_on_fips = 1, + .server_prio = SPRIO":+CHACHA20-POLY1305", + .client_prio = CPRIO":-CIPHER-ALL:+CHACHA20-POLY1305:+CIPHER-ALL", + .desc = "(TLS1.3)-(ECDHE-SECP256R1)-(RSA-PSS-RSAE-SHA256)-(CHACHA20-POLY1305)", + } +}; + +void doit(void) +{ + unsigned i; + global_init(); + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main(void) +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" +#include "virt-time.h" + +/* This program tests the robustness of record sending with padding. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + + +#define SESSIONS 3 +#define MAX_BUF 1024 +#define MSG "Hello TLS" +#define EARLY_MSG "Hello TLS, it's early" +#define PRIORITY "NORMAL:-VERS-ALL:+VERS-TLS1.3" + +static const +gnutls_datum_t hrnd = {(void*)"\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 32}; + +static int gnutls_rnd_works; + +int __attribute__ ((visibility ("protected"))) +gnutls_rnd(gnutls_rnd_level_t level, void *data, size_t len) +{ + gnutls_rnd_works = 1; + + memset(data, 0xff, len); + + /* Flip the first byte to avoid infinite loop in the RSA + * blinding code of Nettle */ + if (len > 0) + memset(data, 0x0, 1); + return 0; +} + +gnutls_datum_t client_hello_msg = {NULL, 0}; + +static int handshake_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + assert(client_hello_msg.data == NULL); + + client_hello_msg.data = gnutls_malloc(msg->size+9); + assert(client_hello_msg.data != NULL); + client_hello_msg.size = msg->size+9; + memcpy(client_hello_msg.data+9, msg->data, msg->size); + /* reconstruct record header */ + client_hello_msg.data[0] = 22; + client_hello_msg.data[1] = 3; + client_hello_msg.data[2] = 3; + client_hello_msg.data[3] = (msg->size+4) >> 8; + client_hello_msg.data[4] = (msg->size+4); + + client_hello_msg.data[5] = GNUTLS_HANDSHAKE_CLIENT_HELLO; + client_hello_msg.data[6] = 0; + client_hello_msg.data[7] = msg->size >> 8; + client_hello_msg.data[8] = msg->size; + + return 0; +} + +static void client(int sds[]) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + int t; + gnutls_datum_t session_data = {NULL, 0}; + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + /* Generate the same ob_ticket_age value, which affects the + * binder calculation. + */ + virt_time_init(); + + gnutls_certificate_allocate_credentials(&x509_cred); + + for (t = 0; t < SESSIONS-1; t++) { + int sd = sds[t]; + + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); + assert(gnutls_priority_set_direct(session, PRIORITY, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, sd); + + if (t > 0) { + assert(gnutls_session_set_data(session, session_data.data, session_data.size) >= 0); + assert(gnutls_record_send_early_data(session, EARLY_MSG, sizeof(EARLY_MSG)) >= 0); + assert(gnutls_handshake_set_random(session, &hrnd) >= 0); + + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_CLIENT_HELLO, + GNUTLS_HOOK_POST, + handshake_callback); + } + + /* Perform the TLS handshake + */ + gnutls_handshake_set_timeout(session, 20 * 1000); + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (t == 0) { + /* get the session data size */ + ret = + gnutls_session_get_data2(session, + &session_data); + if (ret < 0) + fail("client: Getting resume data failed\n"); + } + + if (t > 0) { + if (!gnutls_session_is_resumed(session)) { + fail("client: session_is_resumed error (%d)\n", t); + } + } + + gnutls_record_send(session, MSG, strlen(MSG)); + + do { + ret = gnutls_record_recv(session, buffer, sizeof(buffer)); + } while (ret == GNUTLS_E_AGAIN); + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + goto end; + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + goto end; + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sd); + + gnutls_deinit(session); + } + + assert(client_hello_msg.data != NULL); + + ret = send(sds[SESSIONS-1], client_hello_msg.data, client_hello_msg.size, 0); + assert(ret == (int)client_hello_msg.size); + + end: + gnutls_free(client_hello_msg.data); + gnutls_free(session_data.data); + gnutls_certificate_free_credentials(x509_cred); +} + + +static pid_t child; + +#define MAX_CLIENT_HELLO_RECORDED 10 + +struct storage_st { + gnutls_datum_t entries[MAX_CLIENT_HELLO_RECORDED]; + size_t num_entries; +}; + +static int +storage_add(void *ptr, time_t expires, const gnutls_datum_t *key, const gnutls_datum_t *value) +{ + struct storage_st *storage = ptr; + gnutls_datum_t *datum; + size_t i; + + for (i = 0; i < storage->num_entries; i++) { + if (key->size == storage->entries[i].size && + memcmp(storage->entries[i].data, key->data, key->size) == 0) { + return GNUTLS_E_DB_ENTRY_EXISTS; + } + } + + /* If the maximum number of ClientHello exceeded, reject early + * data until next time. + */ + if (storage->num_entries == MAX_CLIENT_HELLO_RECORDED) + return GNUTLS_E_DB_ERROR; + + datum = &storage->entries[storage->num_entries]; + datum->data = gnutls_malloc(key->size); + if (!datum->data) + return GNUTLS_E_MEMORY_ERROR; + memcpy(datum->data, key->data, key->size); + datum->size = key->size; + + storage->num_entries++; + + return 0; +} + +static void +storage_clear(struct storage_st *storage) +{ + size_t i; + + for (i = 0; i < storage->num_entries; i++) + gnutls_free(storage->entries[i].data); + storage->num_entries = 0; +} + +static void server(int sds[]) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + gnutls_datum_t session_ticket_key = { NULL, 0 }; + struct storage_st storage; + gnutls_anti_replay_t anti_replay; + int t; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + memset(&storage, 0, sizeof(storage)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_session_ticket_key_generate(&session_ticket_key); + + ret = gnutls_anti_replay_init(&anti_replay); + if (ret < 0) + fail("server: failed to initialize anti-replay\n"); + gnutls_anti_replay_set_add_function(anti_replay, storage_add); + gnutls_anti_replay_set_ptr(anti_replay, &storage); + + for (t = 0; t < SESSIONS; t++) { + int sd = sds[t]; + + success("=== session %d ===\n", t); + + assert(gnutls_init(&session, GNUTLS_SERVER|GNUTLS_ENABLE_EARLY_DATA)>=0); + + assert(gnutls_priority_set_direct(session, PRIORITY, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_session_ticket_enable_server(session, + &session_ticket_key); + + gnutls_anti_replay_enable(session, anti_replay); + + gnutls_transport_set_int(session, sd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (t == SESSIONS-1) { + /* duplicate data expected */ + if (ret < 0 && !(gnutls_session_get_flags(session) & GNUTLS_SFLAGS_EARLY_DATA)) { + success("we detected the duplicate data!\n"); + close(sd); + gnutls_deinit(session); + goto cleanup; + } else { + fail("server: duplicate early data was not detected (%d)\n", t); + } + } + + if (ret < 0) { + close(sd); + gnutls_deinit(session); + fail("server[%d]: Handshake has failed (%s)\n\n", + t, gnutls_strerror(ret)); + return; + } + if (debug) + success("server: Handshake was completed\n"); + + if (t > 0) { + if (!gnutls_session_is_resumed(session)) { + fail("server: session_is_resumed error (%d)\n", t); + } + + /* as we reuse the same ticket twice, expect + * early data only on the first resumption */ + if (t == 1) { + if (gnutls_rnd_works) { + if (!(gnutls_session_get_flags(session) & GNUTLS_SFLAGS_EARLY_DATA)) { + fail("server: early data is not received (%d)\n", t); + } + } else { + success("server: gnutls_rnd() could not be overridden, skip checking replay (%d)\n", t); + } + + ret = gnutls_record_recv_early_data(session, buffer, sizeof(buffer)); + if (ret < 0) { + fail("server: failed to retrieve early data: %s\n", + gnutls_strerror(ret)); + } + + if (ret != sizeof(EARLY_MSG) || memcmp(buffer, EARLY_MSG, ret)) + fail("server: early data mismatch\n"); + } else { + if (gnutls_rnd_works) { + if (gnutls_session_get_flags(session) & GNUTLS_SFLAGS_EARLY_DATA) { + fail("server: early data is not rejected (%d)\n", t); + } + } else { + success("server: gnutls_rnd() could not be overridden, skip checking replay (%d)\n", t); + } + } + } + + for (;;) { + memset(buffer, 0, MAX_BUF + 1); + ret = gnutls_record_recv(session, buffer, MAX_BUF); + + if (ret == 0) { + if (debug) + success + ("server: Peer has closed the GnuTLS connection\n"); + break; + } else if (ret < 0) { + kill(child, SIGTERM); + fail("server: Received corrupted data(%d). Closing...\n", ret); + break; + } else if (ret > 0) { + /* echo data back to the client + */ + gnutls_record_send(session, buffer, + strlen(buffer)); + } + } + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sd); + + gnutls_deinit(session); + } + + cleanup: + gnutls_anti_replay_deinit(anti_replay); + + storage_clear(&storage); + + gnutls_free(session_ticket_key.data); + + gnutls_certificate_free_credentials(x509_cred); + + if (debug) + success("server: finished\n"); +} + +void doit(void) +{ + int client_sds[SESSIONS], server_sds[SESSIONS]; + int i, status = 0; + int ret; + + signal(SIGCHLD, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + + for (i = 0; i < SESSIONS; i++) { + int sockets[2]; + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + server_sds[i] = sockets[0]; + client_sds[i] = sockets[1]; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + for (i = 0; i < SESSIONS; i++) + close(client_sds[i]); + server(server_sds); + wait(&status); + check_wait_status(status); + } else { + for (i = 0; i < SESSIONS; i++) + close(server_sds[i]); + client(client_sds); + exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls13-early-data.c b/tests/tls13-early-data.c new file mode 100644 index 0000000000..2115d70d5d --- /dev/null +++ b/tests/tls13-early-data.c @@ -0,0 +1,453 @@ +/* + * Copyright (C) 2012-2018 Free Software Foundation, Inc. + * + * Author: Nikos Mavrogiannopoulos, Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main(void) +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" +#include "virt-time.h" +#define MIN(x,y) (((x)<(y))?(x):(y)) + +/* This program tests the robustness of record sending with padding. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + + +/* A very basic TLS client. + */ + +#define SESSIONS 3 +#define MAX_BUF 1024 +#define MSG "Hello TLS" +#define EARLY_MSG "Hello TLS, it's early" +#define PRIORITY "NORMAL:-VERS-ALL:+VERS-TLS1.3" + +static const +gnutls_datum_t hrnd = {(void*)"\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 32}; + +static int gnutls_rnd_works; + +int __attribute__ ((visibility ("protected"))) +gnutls_rnd(gnutls_rnd_level_t level, void *data, size_t len) +{ + gnutls_rnd_works = 1; + + memset(data, 0xff, len); + + /* Flip the first byte to avoid infinite loop in the RSA + * blinding code of Nettle */ + if (len > 0) + memset(data, 0x0, 1); + return 0; +} + +static void client(int sds[], const char *data, size_t size, size_t maxsize) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + int t; + gnutls_datum_t session_data = {NULL, 0}; + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + /* Generate the same ob_ticket_age value, which affects the + * binder calculation. + */ + virt_time_init(); + + gnutls_certificate_allocate_credentials(&x509_cred); + + for (t = 0; t < SESSIONS; t++) { + int sd = sds[t]; + + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); + assert(gnutls_priority_set_direct(session, PRIORITY, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, sd); + + if (t > 0) { + assert(gnutls_session_set_data(session, session_data.data, session_data.size) >= 0); + /* The server should have advertised the same maximum. */ + if (gnutls_record_get_max_early_data_size(session) != maxsize) + fail("client: max_early_data_size mismatch %d != %d\n", + (int) gnutls_record_get_max_early_data_size(session), + (int) maxsize); + assert(gnutls_record_send_early_data(session, data, MIN(size, maxsize)) >= 0); + assert(gnutls_handshake_set_random(session, &hrnd) >= 0); + } + + /* Perform the TLS handshake + */ + gnutls_handshake_set_timeout(session, 20 * 1000); + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (t == 0) { + /* get the session data size */ + ret = + gnutls_session_get_data2(session, + &session_data); + if (ret < 0) + fail("client: Getting resume data failed\n"); + } + + if (t > 0) { + if (!gnutls_session_is_resumed(session)) { + fail("client: session_is_resumed error (%d)\n", t); + } + } + + gnutls_record_send(session, MSG, strlen(MSG)); + + do { + ret = gnutls_record_recv(session, buffer, sizeof(buffer)); + } while (ret == GNUTLS_E_AGAIN); + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + goto end; + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + goto end; + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sd); + + gnutls_deinit(session); + } + + end: + gnutls_free(session_data.data); + gnutls_certificate_free_credentials(x509_cred); +} + + +static pid_t child; + +#define MAX_CLIENT_HELLO_RECORDED 10 + +struct storage_st { + gnutls_datum_t entries[MAX_CLIENT_HELLO_RECORDED]; + size_t num_entries; +}; + +static int +storage_add(void *ptr, time_t expires, const gnutls_datum_t *key, const gnutls_datum_t *value) +{ + struct storage_st *storage = ptr; + gnutls_datum_t *datum; + size_t i; + + for (i = 0; i < storage->num_entries; i++) { + if (key->size == storage->entries[i].size && + memcmp(storage->entries[i].data, key->data, key->size) == 0) { + return GNUTLS_E_DB_ENTRY_EXISTS; + } + } + + /* If the maximum number of ClientHello exceeded, reject early + * data until next time. + */ + if (storage->num_entries == MAX_CLIENT_HELLO_RECORDED) + return GNUTLS_E_DB_ERROR; + + datum = &storage->entries[storage->num_entries]; + datum->data = gnutls_malloc(key->size); + if (!datum->data) + return GNUTLS_E_MEMORY_ERROR; + memcpy(datum->data, key->data, key->size); + datum->size = key->size; + + storage->num_entries++; + + return 0; +} + +static void +storage_clear(struct storage_st *storage) +{ + size_t i; + + for (i = 0; i < storage->num_entries; i++) + gnutls_free(storage->entries[i].data); + storage->num_entries = 0; +} + +static void server(int sds[], const char *data, size_t size, size_t maxsize) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + gnutls_datum_t session_ticket_key = { NULL, 0 }; + struct storage_st storage; + gnutls_anti_replay_t anti_replay; + int t; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + memset(&storage, 0, sizeof(storage)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_session_ticket_key_generate(&session_ticket_key); + + ret = gnutls_anti_replay_init(&anti_replay); + if (ret < 0) + fail("server: failed to initialize anti-replay\n"); + + gnutls_anti_replay_set_add_function(anti_replay, storage_add); + gnutls_anti_replay_set_ptr(anti_replay, &storage); + + for (t = 0; t < SESSIONS; t++) { + int sd = sds[t]; + + assert(gnutls_init(&session, GNUTLS_SERVER|GNUTLS_ENABLE_EARLY_DATA)>=0); + + assert(gnutls_priority_set_direct(session, PRIORITY, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_session_ticket_enable_server(session, + &session_ticket_key); + + gnutls_anti_replay_enable(session, anti_replay); + + /* on the replay connection, early data is skipped + * until max_early_data_size without decryption + */ + if (t < 2) + (void) gnutls_record_set_max_early_data_size(session, maxsize); + + gnutls_transport_set_int(session, sd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(sd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + return; + } + if (debug) + success("server: Handshake was completed\n"); + + if (t > 0) { + if (!gnutls_session_is_resumed(session)) { + fail("server: session_is_resumed error (%d)\n", t); + } + + /* as we reuse the same ticket twice, expect + * early data only on the first resumption */ + if (t == 1) { + if (gnutls_rnd_works) { + if (!(gnutls_session_get_flags(session) & GNUTLS_SFLAGS_EARLY_DATA)) { + fail("server: early data is not received (%d)\n", t); + } + } else { + success("server: gnutls_rnd() could not be overridden, skip checking replay (%d)\n", t); + } + + ret = gnutls_record_recv_early_data(session, buffer, sizeof(buffer)); + if (ret < 0) { + fail("server: failed to retrieve early data: %s\n", + gnutls_strerror(ret)); + } + + if ((size_t) ret != MIN(size, maxsize) || + memcmp(buffer, data, ret)) + fail("server: early data mismatch\n"); + } else { + if (gnutls_rnd_works) { + if (gnutls_session_get_flags(session) & GNUTLS_SFLAGS_EARLY_DATA) { + fail("server: early data is not rejected (%d)\n", t); + } + } else { + success("server: gnutls_rnd() could not be overridden, skip checking replay (%d)\n", t); + } + } + } + + /* see the Getting peer's information example */ + /* print_info(session); */ + + for (;;) { + memset(buffer, 0, MAX_BUF + 1); + ret = gnutls_record_recv(session, buffer, MAX_BUF); + + if (ret == 0) { + if (debug) + success + ("server: Peer has closed the GnuTLS connection\n"); + break; + } else if (ret < 0) { + kill(child, SIGTERM); + fail("server: Received corrupted data(%d). Closing...\n", ret); + break; + } else if (ret > 0) { + /* echo data back to the client + */ + gnutls_record_send(session, buffer, + strlen(buffer)); + } + } + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sd); + + gnutls_deinit(session); + } + + gnutls_anti_replay_deinit(anti_replay); + + storage_clear(&storage); + + gnutls_free(session_ticket_key.data); + + gnutls_certificate_free_credentials(x509_cred); + + if (debug) + success("server: finished\n"); +} + +static void +start(const char *data, size_t size, size_t maxsize) +{ + int client_sds[SESSIONS], server_sds[SESSIONS]; + int i; + int ret; + + signal(SIGCHLD, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + + for (i = 0; i < SESSIONS; i++) { + int sockets[2]; + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + server_sds[i] = sockets[0]; + client_sds[i] = sockets[1]; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + for (i = 0; i < SESSIONS; i++) + close(client_sds[i]); + server(server_sds, data, size, maxsize); + kill(child, SIGTERM); + } else { + for (i = 0; i < SESSIONS; i++) + close(server_sds[i]); + client(client_sds, data, size, maxsize); + exit(0); + } +} + +void doit(void) +{ + start(EARLY_MSG, sizeof(EARLY_MSG), MAX_BUF); + start(EARLY_MSG, sizeof(EARLY_MSG), 10); +} + +#endif /* _WIN32 */ diff --git a/tests/tls13-early-start.c b/tests/tls13-early-start.c new file mode 100644 index 0000000000..3c79dba983 --- /dev/null +++ b/tests/tls13-early-start.c @@ -0,0 +1,346 @@ +/* + * Copyright (C) 2015-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests support for early start in TLS1.3 handshake */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include + +#define USE_CERT 1 +#define ASK_CERT 2 + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +#define try_ok(name, client_prio) \ + try_with_key(name, client_prio, \ + &server_ca3_localhost_cert, &server_ca3_key, NULL, NULL, 0) + +#define MSG "hello there ppl" + +static +void try_with_key_fail(const char *name, const char *client_prio, + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + const gnutls_datum_t *cli_cert, + const gnutls_datum_t *cli_key, + unsigned init_flags) +{ + int ret; + char buffer[256]; + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN, version; + const char *err; + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + reset_buffers(); + /* Init server */ + gnutls_certificate_allocate_credentials(&serverx509cred); + + ret = gnutls_certificate_set_x509_key_mem(serverx509cred, + serv_cert, serv_key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + fail("Could not set key/cert: %s\n", gnutls_strerror(ret)); + + assert(gnutls_init(&server, GNUTLS_SERVER|init_flags)>=0); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + assert(gnutls_priority_set_direct(server, client_prio, NULL) >= 0); + + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + if (cli_cert) { + gnutls_certificate_set_x509_key_mem(clientx509cred, + cli_cert, cli_key, + GNUTLS_X509_FMT_PEM); + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUIRE); + } + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + ret = gnutls_priority_set_direct(client, client_prio, &err); + if (ret < 0) { + if (ret == GNUTLS_E_INVALID_REQUEST) + fprintf(stderr, "Error in %s\n", err); + exit(1); + } + + success("negotiating %s\n", name); + HANDSHAKE(client, server); + + assert(!(gnutls_session_get_flags(server) & GNUTLS_SFLAGS_EARLY_START)); + assert(!(gnutls_session_get_flags(client) & GNUTLS_SFLAGS_EARLY_START)); + + version = gnutls_protocol_get_version(client); + assert(version == GNUTLS_TLS1_3); + + memset(buffer, 0, sizeof(buffer)); + assert(gnutls_record_send(server, MSG, strlen(MSG))>=0); + + ret = gnutls_record_recv(client, buffer, sizeof(buffer)); + if (ret == 0) { + fail("client: Peer has closed the TLS connection\n"); + exit(1); + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (ret != strlen(MSG) || memcmp(MSG, buffer, ret) != 0) { + fail("client: Error in data received. Expected %d, got %d\n", (int)strlen(MSG), ret); + exit(1); + } + + memset(buffer, 0, sizeof(buffer)); + assert(gnutls_record_send(client, MSG, strlen(MSG))>=0); + + ret = gnutls_record_recv(server, buffer, sizeof(buffer)); + if (ret == 0) { + fail("server: Peer has closed the TLS connection\n"); + } else if (ret < 0) { + fail("server: Error: %s\n", gnutls_strerror(ret)); + } + + if (ret != strlen(MSG) || memcmp(MSG, buffer, ret) != 0) { + fail("client: Error in data received. Expected %d, got %d\n", (int)strlen(MSG), ret); + exit(1); + } + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); +} + +static +void try_with_key_ks(const char *name, const char *client_prio, + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + const gnutls_datum_t *client_cert, + const gnutls_datum_t *client_key, + unsigned cert_flags, + unsigned init_flags) +{ + int ret; + char buffer[256]; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN, version; + const char *err; + + /* General init. */ + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + reset_buffers(); + /* Init server */ + gnutls_certificate_allocate_credentials(&serverx509cred); + + ret = gnutls_certificate_set_x509_key_mem(serverx509cred, + serv_cert, serv_key, + GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("Could not set key/cert: %s\n", gnutls_strerror(ret)); + } + + assert(gnutls_init(&server, GNUTLS_SERVER|init_flags)>=0); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + + assert(gnutls_priority_set_direct(server, + "NORMAL:-VERS-ALL:+VERS-TLS1.3", + NULL)>=0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + + ret = gnutls_certificate_allocate_credentials(&clientx509cred); + if (ret < 0) + exit(1); + + if (cert_flags == USE_CERT) { + gnutls_certificate_set_x509_key_mem(clientx509cred, + client_cert, client_key, + GNUTLS_X509_FMT_PEM); + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUIRE); + } else if (cert_flags == ASK_CERT) { + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); + } + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + ret = gnutls_priority_set_direct(client, client_prio, &err); + if (ret < 0) { + if (ret == GNUTLS_E_INVALID_REQUEST) + fprintf(stderr, "Error in %s\n", err); + exit(1); + } + success("negotiating %s\n", name); + HANDSHAKE(client, server); + + assert(gnutls_session_get_flags(server) & GNUTLS_SFLAGS_EARLY_START); + assert(!(gnutls_session_get_flags(client) & GNUTLS_SFLAGS_EARLY_START)); + + version = gnutls_protocol_get_version(client); + assert(version == GNUTLS_TLS1_3); + + memset(buffer, 0, sizeof(buffer)); + assert(gnutls_record_send(server, MSG, strlen(MSG))>=0); + + ret = gnutls_record_recv(client, buffer, sizeof(buffer)); + if (ret == 0) { + fail("client: Peer has closed the TLS connection\n"); + exit(1); + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (ret != strlen(MSG) || memcmp(MSG, buffer, ret) != 0) { + fail("client: Error in data received. Expected %d, got %d\n", (int)strlen(MSG), ret); + exit(1); + } + + memset(buffer, 0, sizeof(buffer)); + assert(gnutls_record_send(client, MSG, strlen(MSG))>=0); + + ret = gnutls_record_recv(server, buffer, sizeof(buffer)); + if (ret == 0) { + fail("server: Peer has closed the TLS connection\n"); + } else if (ret < 0) { + fail("server: Error: %s\n", gnutls_strerror(ret)); + } + + if (ret != strlen(MSG) || memcmp(MSG, buffer, ret) != 0) { + fail("client: Error in data received. Expected %d, got %d\n", (int)strlen(MSG), ret); + exit(1); + } + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); +} + +static +void try_with_key(const char *name, const char *client_prio, + const gnutls_datum_t *serv_cert, + const gnutls_datum_t *serv_key, + const gnutls_datum_t *cli_cert, + const gnutls_datum_t *cli_key, + unsigned cert_flags) +{ + return try_with_key_ks(name, client_prio, + serv_cert, serv_key, cli_cert, cli_key, cert_flags, GNUTLS_ENABLE_EARLY_START); +} + +#include "cert-common.h" + +void doit(void) +{ + /* TLS 1.3 no client cert: early start expected */ + try_ok("TLS 1.3 with ffdhe2048 rsa no-cli-cert", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048"); + try_ok("TLS 1.3 with secp256r1 rsa no-cli-cert", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1"); + try_ok("TLS 1.3 with x25519 rsa no-cli-cert", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519"); + + try_with_key_ks("TLS 1.3 with secp256r1 ecdsa no-cli-cert", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1", + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, NULL, NULL, 0, GNUTLS_ENABLE_EARLY_START); + + /* client authentication: no early start possible */ + try_with_key_fail("TLS 1.3 with rsa-pss cli-cert", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:+ECDHE-RSA", + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_rsa_pss_cert, &cli_ca3_rsa_pss_key, GNUTLS_ENABLE_EARLY_START); + try_with_key_fail("TLS 1.3 with rsa cli-cert", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:+ECDHE-RSA", + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &cli_ca3_cert, &cli_ca3_key, GNUTLS_ENABLE_EARLY_START); + try_with_key_fail("TLS 1.3 with ecdsa cli-cert", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:+ECDHE-RSA", + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, GNUTLS_ENABLE_EARLY_START); + + /* TLS 1.3 no client cert: no early start flag specified */ + try_with_key_fail("TLS 1.3 with rsa-pss cli-cert", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:+ECDHE-RSA", + &server_ca3_localhost_ecc_cert, &server_ca3_ecc_key, NULL, NULL, 0); +} diff --git a/tests/tls13-rehandshake-cert.c b/tests/tls13-rehandshake-cert.c new file mode 100644 index 0000000000..9a2c889835 --- /dev/null +++ b/tests/tls13-rehandshake-cert.c @@ -0,0 +1,202 @@ +/* + * Copyright (C) 2008-2012 Free Software Foundation, Inc. + * + * Author: Simon Josefsson + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" + +/* This program tests server initiated rehandshake under TLS 1.3. + * Although rehandshake doesn't happen under TLS1.3 this tests + * whether the old APIs would still work. + */ + +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static +void server_initiated_handshake(void) +{ + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + unsigned char buffer[64]; + int cret = GNUTLS_E_AGAIN; + size_t transferred = 0; + + success("testing server initiated re-handshake\n"); + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(2); + + /* Init server */ + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + gnutls_priority_set_direct(server, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", NULL); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + gnutls_certificate_allocate_credentials(&clientx509cred); + gnutls_init(&client, GNUTLS_CLIENT); + gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + gnutls_priority_set_direct(client, "NORMAL:+VERS-TLS1.3", NULL); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + if (gnutls_protocol_get_version(client) != GNUTLS_TLS1_3) + fail("TLS1.3 was not negotiated\n"); + + sret = gnutls_rehandshake(server); + if (debug) { + tls_log_func(0, "gnutls_rehandshake (server)...\n"); + tls_log_func(0, gnutls_strerror(sret)); + tls_log_func(0, "\n"); + } + + { + ssize_t n; + char b[1]; + n = gnutls_record_recv(client, b, 1); + /* in TLS1.2 we get REHANDSHAKE error, here nothing */ + if (n != GNUTLS_E_AGAIN) { + fail("error msg: %s\n", gnutls_strerror(n)); + } + } + + TRANSFER(client, server, "xxxx", 4, buffer, sizeof(buffer)); + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); + + reset_buffers(); +} + +static +void client_initiated_handshake(void) +{ + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + unsigned char buffer[64]; + int cret = GNUTLS_E_AGAIN; + size_t transferred = 0; + + success("testing client initiated re-handshake\n"); + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(2); + + /* Init server */ + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + gnutls_priority_set_direct(server, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", NULL); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + gnutls_certificate_allocate_credentials(&clientx509cred); + gnutls_init(&client, GNUTLS_CLIENT); + gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + gnutls_priority_set_direct(client, "NORMAL:+VERS-TLS1.3", NULL); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + if (gnutls_protocol_get_version(client) != GNUTLS_TLS1_3) + fail("TLS1.3 was not negotiated\n"); + + HANDSHAKE(client, server); + + TRANSFER(client, server, "xxxx", 4, buffer, sizeof(buffer)); + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); + + reset_buffers(); +} + +void doit(void) +{ + server_initiated_handshake(); + client_initiated_handshake(); +} diff --git a/tests/tls13-server-kx-neg.c b/tests/tls13-server-kx-neg.c new file mode 100644 index 0000000000..a4cca3faaf --- /dev/null +++ b/tests/tls13-server-kx-neg.c @@ -0,0 +1,309 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +/* This program tests the negotiation for various key exchange + * methods and options which are considered legacy in TLS1.3. */ + +#include +#include +#include +#include +#include +#include "utils.h" +#include "cert-common.h" +#include "eagain-common.h" + +#include "server-kx-neg-common.c" + +#define PVERSION "-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2" + +test_case_st tests[] = { + { + .name = "TLS 1.3 DHE-PSK without cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:"PVERSION, + .exp_version = GNUTLS_TLS1_3, + }, + { + .name = "TLS 1.3 DHE-PSK with cred but no DH params", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:"PVERSION, + .exp_version = GNUTLS_TLS1_3, + }, + { + .name = "TLS 1.3 DHE-PSK with cred and DH params (level)", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .have_psk_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:"PVERSION, + .exp_version = GNUTLS_TLS1_3, + }, + { + .name = "TLS 1.3 DHE-PSK with cred and DH params (explicit)", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .have_psk_exp_dh_params = 1, + .server_prio = "NORMAL:-KX-ALL:+DHE-PSK:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+DHE-PSK:"PVERSION, + .exp_version = GNUTLS_TLS1_3, + }, + { + .name = "TLS 1.3 ECDHE-PSK with cred but no common curve", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_COMMON_KEY_SHARE, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-CURVE-ALL:+CURVE-SECP256R1:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:-CURVE-ALL:+CURVE-SECP384R1:"PVERSION, + .exp_version = GNUTLS_TLS1_3, + }, + { + .name = "TLS 1.3 ECDHE-PSK with cred and common curve", + .client_ret = 0, + .server_ret = 0, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+ECDHE-PSK:"PVERSION, + .exp_version = GNUTLS_TLS1_3, + }, + { + .name = "TLS 1.3 RSA-PSK without cert cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_psk_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 RSA-PSK without psk cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 RSA-PSK with cred but invalid cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 RSA-PSK with cred", + .server_ret = 0, + .client_ret = 0, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 RSA-PSK with cred and multiple certs", + .server_ret = 0, + .client_ret = 0, + .have_psk_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+RSA-PSK:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+RSA-PSK:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 SRP-RSA without cert cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_srp_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 SRP-RSA without srp cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_srp_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 SRP-RSA with cred but invalid cert", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_decrypt_cert = 1, + .have_ecc_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 SRP-RSA with cred", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 SRP-RSA with cred and multiple certs", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .have_cert_cred = 1, + .have_rsa_sign_cert = 1, + .have_ecc_sign_cert = 1, + .have_rsa_decrypt_cert = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP-RSA:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+SRP-RSA:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 SRP without srp cred", + .client_ret = GNUTLS_E_AGAIN, + .server_ret = GNUTLS_E_INSUFFICIENT_CREDENTIALS, + .have_srp_cred = 0, + .have_cert_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+SRP:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 SRP with cred", + .server_ret = 0, + .client_ret = 0, + .have_srp_cred = 1, + .server_prio = "NORMAL:-KX-ALL:+SRP:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+SRP:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, +#ifdef ENABLE_GOST + { + .name = "TLS 1.3 server, TLS 1.2 client VKO-GOST-12 with cred and GOST-256 cert", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_gost12_256_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:" "-VERS-ALL:+VERS-TLS1.2", + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 server, TLS 1.2 client VKO-GOST-12 with cred and GOST-512 cert", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_gost12_512_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:" "-VERS-ALL:+VERS-TLS1.2", + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.2 server TLS 1.3 client VKO-GOST-12 with cred and GOST-256 cert", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_gost12_256_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:" "-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.2 server TLS 1.3 client with cred and GOST-512 cert", + .server_ret = 0, + .client_ret = 0, + .have_cert_cred = 1, + .have_gost12_512_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:" "-VERS-ALL:+VERS-TLS1.2", + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + /* Ideally for the next two test cases we should fallback to TLS 1.2 + GOST + * but this is unsuppored for now */ + { + .name = "TLS 1.3 server and client VKO-GOST-12 with cred and GOST-256 cert", + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .client_ret = GNUTLS_E_AGAIN, + .have_cert_cred = 1, + .have_gost12_256_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, + { + .name = "TLS 1.3 server and client VKO-GOST-12 with cred and GOST-512 cert", + .server_ret = GNUTLS_E_NO_CIPHER_SUITES, + .client_ret = GNUTLS_E_AGAIN, + .have_cert_cred = 1, + .have_gost12_512_cert = 1, + .not_on_fips = 1, + .server_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:"PVERSION, + .client_prio = "NORMAL:-KX-ALL:+VKO-GOST-12:+GROUP-GOST-ALL:+CIPHER-GOST-ALL:+MAC-GOST-ALL:+SIGN-GOST-ALL:"PVERSION, + .exp_version = GNUTLS_TLS1_2, + }, +#endif +}; + +void doit(void) +{ + unsigned i; + global_init(); + + for (i=0;i + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" + +/* This tests TLS1.3 and gnutls_session_get_data2() when no + * callback with gnutls_transport_set_pull_timeout_function() + * is set */ + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static time_t mytime(time_t * t) +{ + time_t then = 1461671166; + + if (t) + *t = then; + + return then; +} + +static ssize_t +server_pull_fail(gnutls_transport_ptr_t tr, void *data, size_t len) +{ + fail("unexpected call to pull callback detected\n"); + return -1; +} + +void doit(void) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + gnutls_datum_t data; + char buf[128]; + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + gnutls_global_set_time_function(mytime); + + assert(gnutls_certificate_allocate_credentials(&serverx509cred) >= 0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM) >= 0); + + assert(gnutls_init(&server, GNUTLS_SERVER) >= 0); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + assert(gnutls_set_default_priority(server)>=0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + assert(gnutls_certificate_allocate_credentials(&clientx509cred)>=0); + + assert(gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca_cert, GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&client, GNUTLS_CLIENT)>=0); + + assert(gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred)>=0); + + assert(gnutls_priority_set_direct(client, "NORMAL:-VERS-ALL:+VERS-TLS1.3", NULL)>=0); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + ret = gnutls_record_recv(client, buf, sizeof(buf)); + if (ret < 0 && ret != GNUTLS_E_AGAIN) { + fail("unexpected error: %s\n", gnutls_strerror(ret)); + } + + gnutls_transport_set_pull_function(server, server_pull_fail); + + ret = gnutls_session_get_data2(client, &data); + if (ret != 0) { + fail("unexpected error: %s\n", gnutls_strerror(ret)); + } + gnutls_free(data.data); + gnutls_transport_set_pull_function(server, server_pull); + + ret = gnutls_record_recv(client, buf, sizeof(buf)); + if (ret < 0 && ret != GNUTLS_E_AGAIN) { + fail("unexpected error: %s\n", gnutls_strerror(ret)); + } + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} diff --git a/tests/tls13/anti_replay.c b/tests/tls13/anti_replay.c new file mode 100644 index 0000000000..e0aea00385 --- /dev/null +++ b/tests/tls13/anti_replay.c @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2015-2018 Red Hat, Inc. + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include "utils.h" +#include "virt-time.h" +#include "../../lib/tls13/anti_replay.h" +#include "../../lib/system.h" + +#define MAX_CLIENT_HELLO_RECORDED 10 + +struct storage_st { + gnutls_datum_t entries[MAX_CLIENT_HELLO_RECORDED]; + size_t num_entries; +}; + +static int +storage_add(void *ptr, time_t expires, const gnutls_datum_t *key, const gnutls_datum_t *value) +{ + struct storage_st *storage = ptr; + gnutls_datum_t *datum; + size_t i; + + for (i = 0; i < storage->num_entries; i++) { + if (key->size == storage->entries[i].size && + memcmp(storage->entries[i].data, key->data, key->size) == 0) { + return GNUTLS_E_DB_ENTRY_EXISTS; + } + } + + /* If the maximum number of ClientHello exceeded, reject early + * data until next time. + */ + if (storage->num_entries == MAX_CLIENT_HELLO_RECORDED) + return GNUTLS_E_DB_ERROR; + + datum = &storage->entries[storage->num_entries]; + datum->data = gnutls_malloc(key->size); + if (!datum->data) + return GNUTLS_E_MEMORY_ERROR; + memcpy(datum->data, key->data, key->size); + datum->size = key->size; + + storage->num_entries++; + + return 0; +} + +static void +storage_clear(struct storage_st *storage) +{ + size_t i; + + for (i = 0; i < storage->num_entries; i++) + gnutls_free(storage->entries[i].data); + storage->num_entries = 0; +} + +void doit(void) +{ + gnutls_anti_replay_t anti_replay; + gnutls_datum_t key = { (unsigned char *) "\xFF\xFF\xFF\xFF", 4 }; + struct timespec creation_time; + struct storage_st storage; + int ret; + + virt_time_init(); + memset(&storage, 0, sizeof(storage)); + + /* server_ticket_age < client_ticket_age */ + ret = gnutls_anti_replay_init(&anti_replay); + assert(ret == 0); + gnutls_anti_replay_set_window(anti_replay, 10000); + gnutls_anti_replay_set_add_function(anti_replay, storage_add); + gnutls_anti_replay_set_ptr(anti_replay, &storage); + mygettime(&creation_time); + ret = _gnutls_anti_replay_check(anti_replay, 10000, &creation_time, &key); + if (ret != GNUTLS_E_ILLEGAL_PARAMETER) + fail("error is not returned, while server_ticket_age < client_ticket_age\n"); + gnutls_anti_replay_deinit(anti_replay); + storage_clear(&storage); + + /* server_ticket_age - client_ticket_age > window */ + ret = gnutls_anti_replay_init(&anti_replay); + assert(ret == 0); + gnutls_anti_replay_set_add_function(anti_replay, storage_add); + gnutls_anti_replay_set_ptr(anti_replay, &storage); + gnutls_anti_replay_set_window(anti_replay, 10000); + mygettime(&creation_time); + virt_sec_sleep(30); + ret = _gnutls_anti_replay_check(anti_replay, 10000, &creation_time, &key); + if (ret != GNUTLS_E_EARLY_DATA_REJECTED) + fail("early data is NOT rejected, while freshness check fails\n"); + gnutls_anti_replay_deinit(anti_replay); + storage_clear(&storage); + + /* server_ticket_age - client_ticket_age < window */ + ret = gnutls_anti_replay_init(&anti_replay); + assert(ret == 0); + gnutls_anti_replay_set_add_function(anti_replay, storage_add); + gnutls_anti_replay_set_ptr(anti_replay, &storage); + gnutls_anti_replay_set_window(anti_replay, 10000); + mygettime(&creation_time); + virt_sec_sleep(15); + ret = _gnutls_anti_replay_check(anti_replay, 10000, &creation_time, &key); + if (ret != 0) + fail("early data is rejected, while freshness check succeeds\n"); + ret = _gnutls_anti_replay_check(anti_replay, 10000, &creation_time, &key); + if (ret != GNUTLS_E_EARLY_DATA_REJECTED) + fail("early data is NOT rejected for a duplicate key\n"); + gnutls_anti_replay_deinit(anti_replay); + storage_clear(&storage); +} diff --git a/tests/tls13/change_cipher_spec.c b/tests/tls13/change_cipher_spec.c new file mode 100644 index 0000000000..70d769832a --- /dev/null +++ b/tests/tls13/change_cipher_spec.c @@ -0,0 +1,360 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" + +/* This program tests whether the ChangeCipherSpec message + * is ignored during handshake. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +static unsigned client_sent_ccs = 0; +static unsigned server_sent_ccs = 0; + +static int cli_hsk_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg); + +static void client(int fd, unsigned ccs_check) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + char buf[64]; + + global_init(); + client_sent_ccs = 0; + server_sent_ccs = 0; + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_POST_HANDSHAKE_AUTH); + + gnutls_session_set_ptr(session, &ccs_check); + gnutls_handshake_set_timeout(session, 20 * 1000); + if (ccs_check) { + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_PRE, + cli_hsk_callback); + } + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.0", NULL); + if (ret < 0) + fail("cannot set TLS 1.3 priorities\n"); + + + gnutls_certificate_set_x509_key_mem(x509_cred, &cli_ca3_cert, + &cli_ca3_key, + GNUTLS_X509_FMT_PEM); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + success("client handshake completed\n"); + + do { + ret = gnutls_record_recv(session, buf, sizeof(buf)); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) + fail("client: recv did not succeed as expected: %s\n", gnutls_strerror(ret)); + + /* send change cipher spec, this should fail in the server */ + do { + ret = send(fd, "\x14\x03\x03\x00\x01\x01", 6, 0); + } while(ret == -1 && (errno == EINTR || errno == EAGAIN)); + + close(fd); + + gnutls_deinit(session); + + if (ccs_check) { + if (client_sent_ccs != 1) { + fail("client: did not sent CCS\n"); + } + } + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +static int cli_hsk_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + unsigned *p; + unsigned ccs_check; + static unsigned hello_received = 0; + + p = gnutls_session_get_ptr(session); + ccs_check = *p; + + assert(ccs_check != 0); + assert(post == GNUTLS_HOOK_PRE); + + if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && !incoming) { + hello_received = 1; + + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC, + GNUTLS_HOOK_PRE, + cli_hsk_callback); + } + + if (htype == GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC && !incoming && hello_received) { + client_sent_ccs++; + assert(msg->size == 1 && msg->data[0] == 0x01); + } + + + return 0; +} + +static int hsk_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + int ret; + int fd; + unsigned *p; + unsigned ccs_check; + + p = gnutls_session_get_ptr(session); + ccs_check = *p; + + assert(post == GNUTLS_HOOK_PRE); + + if (!ccs_check) { + if (!incoming || htype == GNUTLS_HANDSHAKE_CLIENT_HELLO || + htype == GNUTLS_HANDSHAKE_FINISHED) + return 0; + + fd = gnutls_transport_get_int(session); + + /* send change cipher spec */ + do { + ret = send(fd, "\x14\x03\x03\x00\x01\x01", 6, 0); + } while(ret == -1 && (errno == EINTR || errno == EAGAIN)); + } else { /* checking whether server received it */ + if (htype == GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC && !incoming) { + server_sent_ccs++; + assert(msg->size == 1 && msg->data[0] == 0x01); + } + } + return 0; +} + +static void server(int fd, unsigned ccs_check) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + char buf[64]; + + /* this must be called once in the program + */ + global_init(); + + client_sent_ccs = 0; + server_sent_ccs = 0; + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + if (ccs_check) + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_CHANGE_CIPHER_SPEC, + GNUTLS_HOOK_PRE, + hsk_callback); + else + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_PRE, + hsk_callback); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + assert(gnutls_priority_set_direct(session, "NORMAL:+VERS-TLS1.3", NULL) >= 0); + gnutls_session_set_ptr(session, &ccs_check); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + success("server handshake completed\n"); + + gnutls_certificate_server_set_request(session, GNUTLS_CERT_REQUIRE); + /* ask peer for re-authentication */ + do { + ret = gnutls_record_send(session, "\x00", 1); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) + fail("server: gnutls_record_send did not succeed as expected: %s\n", gnutls_strerror(ret)); + + /* receive CCS and fail */ + do { + ret = gnutls_record_recv(session, buf, sizeof(buf)); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret != GNUTLS_E_UNEXPECTED_PACKET) + fail("server: incorrect alert sent: %d != %d\n", + ret, GNUTLS_E_UNEXPECTED_PACKET); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + if (ccs_check) { + if (server_sent_ccs != 1) { + fail("server: did not sent CCS\n"); + } + } + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +static void ch_handler(int sig) +{ + int status; + wait(&status); + check_wait_status(status); + return; +} + +static +void start(unsigned ccs_check) +{ + int fd[2]; + int ret; + pid_t child; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], ccs_check); + kill(child, SIGTERM); + } else { + close(fd[0]); + client(fd[1], ccs_check); + exit(0); + } +} + +void doit(void) +{ + start(0); + start(1); +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/cookie.c b/tests/tls13/cookie.c new file mode 100644 index 0000000000..aa4d074178 --- /dev/null +++ b/tests/tls13/cookie.c @@ -0,0 +1,265 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Thierry Quemerais, Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* This program tests whether a cookie sent by the server is repeated + * by the gnutls client. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#if !defined(_WIN32) +#include +#include +#endif +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static int TLSEXT_TYPE_server_sent = 0; +static int TLSEXT_TYPE_server_received = 0; + +static const unsigned char ext_data[] = +{ + 0x00, + 0x03, + 0xFE, + 0xED, + 0xFF +}; + +static int ext_recv_server_cookie(gnutls_session_t session, const unsigned char *buf, size_t buflen) +{ + if (buflen != sizeof(ext_data)) + fail("ext_recv_server_params: Invalid input buffer length\n"); + + if (memcmp(buf, ext_data, sizeof(ext_data)) != 0) + fail("ext_recv_server_params: Invalid input buffer data\n"); + + TLSEXT_TYPE_server_received = 1; + + return 0; //Success +} + +static int ext_send_server_cookie(gnutls_session_t session, gnutls_buffer_t extdata) +{ + if (gnutls_ext_get_current_msg(session) == GNUTLS_EXT_FLAG_HRR) { + TLSEXT_TYPE_server_sent = 1; + + gnutls_buffer_append_data(extdata, ext_data, sizeof(ext_data)); + return sizeof(ext_data); + } + return 0; +} + +static void client(int sd) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t clientx509cred; + + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "client"; + + gnutls_certificate_allocate_credentials(&clientx509cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + /* Use default priorities */ + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3", + NULL)>=0); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* Perform the TLS handshake + */ + ret = gnutls_handshake(session); + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + goto end; + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + +end: + close(sd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} + +static void server(int sd) +{ + gnutls_certificate_credentials_t serverx509cred; + int ret; + gnutls_session_t session; + + /* this must be called once in the program + */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "server"; + + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + + /* force a hello retry request by disabling all the groups that are + * enabled by default. */ + assert(gnutls_priority_set_direct(session, + "NORMAL:-VERS-ALL:+VERS-TLS1.3:" + "-GROUP-SECP256R1:-GROUP-X25519:-GROUP-FFDHE2048", + NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + ret = gnutls_session_ext_register(session, "cookie_server", 44, GNUTLS_EXT_TLS, ext_recv_server_cookie, ext_send_server_cookie, + NULL, NULL, NULL, + GNUTLS_EXT_FLAG_CLIENT_HELLO|GNUTLS_EXT_FLAG_HRR|GNUTLS_EXT_FLAG_OVERRIDE_INTERNAL|GNUTLS_EXT_FLAG_IGNORE_CLIENT_REQUEST); + if (ret != 0) + fail("server: cannot register: %s", gnutls_strerror(ret)); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_handshake(session); + if (ret < 0) { + fail("server: Handshake has failed: %s\n\n", + gnutls_strerror(ret)); + goto end; + } + if (debug) + success("server: Handshake was completed\n"); + + if (TLSEXT_TYPE_server_sent != 1) + fail("server: extension not properly sent\n"); + + if (TLSEXT_TYPE_server_received != 1) + fail("server: extension not properly received\n"); + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + +end: + close(sd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(serverx509cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +void doit(void) +{ + pid_t child; + int sockets[2]; + int err; + + signal(SIGPIPE, SIG_IGN); + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + TLSEXT_TYPE_server_sent = 0; + TLSEXT_TYPE_server_received = 0; + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status = 0; + /* parent */ + close(sockets[1]); + server(sockets[0]); + wait(&status); + } else { + close(sockets[0]); + client(sockets[1]); + exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/ext-parse.h b/tests/tls13/ext-parse.h new file mode 100644 index 0000000000..9a22de57f9 --- /dev/null +++ b/tests/tls13/ext-parse.h @@ -0,0 +1,229 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#include "utils.h" + +#define TLS_EXT_SUPPORTED_VERSIONS 43 +#define TLS_EXT_POST_HANDSHAKE 49 + +#define SKIP16(pos, _total) { \ + uint16_t _s; \ + if ((size_t)pos+2 > (size_t)_total) fail("error0: at %d total: %d\n", pos+2, _total); \ + _s = (msg->data[pos] << 8) | msg->data[pos+1]; \ + if ((size_t)(pos+2+_s) > (size_t)_total) fail("error1: at %d field: %d, total: %d\n", pos+2, (int)_s, _total); \ + pos += 2+_s; \ + } + +#define SKIP8(pos, _total) { \ + uint8_t _s; \ + if ((size_t)pos+1 > (size_t)_total) fail("error\n"); \ + _s = msg->data[pos]; \ + if ((size_t)(pos+1+_s) > (size_t)_total) fail("error\n"); \ + pos += 1+_s; \ + } + +typedef void (*ext_parse_func)(void *priv, gnutls_datum_t *extdata); + +#define HANDSHAKE_SESSION_ID_POS 34 + +#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunused-function" +#endif + +/* Returns 0 if the extension was not found, 1 otherwise. + */ +static unsigned find_client_extension(const gnutls_datum_t *msg, unsigned extnr, void *priv, ext_parse_func cb) +{ + unsigned pos; + + if (msg->size < HANDSHAKE_SESSION_ID_POS) + fail("invalid client hello\n"); + + /* we expect the legacy version to be present */ + /* ProtocolVersion legacy_version = 0x0303 */ + if (msg->data[0] != 0x03) { + fail("ProtocolVersion contains %d.%d\n", (int)msg->data[0], (int)msg->data[1]); + } + + pos = HANDSHAKE_SESSION_ID_POS; + /* legacy_session_id */ + SKIP8(pos, msg->size); + + /* CipherSuites */ + SKIP16(pos, msg->size); + + /* legacy_compression_methods */ + SKIP8(pos, msg->size); + + pos += 2; + + while (pos < msg->size) { + uint16_t type; + + if (pos+4 > msg->size) + fail("invalid client hello\n"); + + type = (msg->data[pos] << 8) | msg->data[pos+1]; + pos+=2; + + if (debug) + success("Found client extension %d\n", (int)type); + + if (type != extnr) { + SKIP16(pos, msg->size); + } else { /* found */ + ssize_t size = (msg->data[pos] << 8) | msg->data[pos+1]; + gnutls_datum_t data; + + pos+=2; + if (pos + size > msg->size) { + fail("error in extension length (pos: %d, ext: %d, total: %d)\n", pos, (int)size, msg->size); + } + data.data = &msg->data[pos]; + data.size = size; + if (cb) + cb(priv, &data); + return 1; + } + } + return 0; +} + +static unsigned is_client_extension_last(const gnutls_datum_t *msg, unsigned extnr) +{ + unsigned pos, found = 0; + + if (msg->size < HANDSHAKE_SESSION_ID_POS) + fail("invalid client hello\n"); + + /* we expect the legacy version to be present */ + /* ProtocolVersion legacy_version = 0x0303 */ + if (msg->data[0] != 0x03) { + fail("ProtocolVersion contains %d.%d\n", (int)msg->data[0], (int)msg->data[1]); + } + + pos = HANDSHAKE_SESSION_ID_POS; + /* legacy_session_id */ + SKIP8(pos, msg->size); + + /* CipherSuites */ + SKIP16(pos, msg->size); + + /* legacy_compression_methods */ + SKIP8(pos, msg->size); + + pos += 2; + + while (pos < msg->size) { + uint16_t type; + + if (pos+4 > msg->size) + fail("invalid client hello\n"); + + type = (msg->data[pos] << 8) | msg->data[pos+1]; + pos+=2; + + if (debug) + success("Found client extension %d\n", (int)type); + + if (type != extnr) { + if (found) { + success("found extension %d after %d\n", type, extnr); + return 0; + } + SKIP16(pos, msg->size); + } else { /* found */ + found = 1; + SKIP16(pos, msg->size); + } + } + + if (found) + return 1; + return 0; +} + +#define TLS_RANDOM_SIZE 32 + +static unsigned find_server_extension(const gnutls_datum_t *msg, unsigned extnr, void *priv, ext_parse_func cb) +{ + unsigned pos = 0; + + success("server hello of %d bytes\n", msg->size); + /* we expect the legacy version to be present */ + /* ProtocolVersion legacy_version = 0x0303 */ + if (msg->data[0] != 0x03 || msg->data[1] != 0x03) { + fail("ProtocolVersion contains %d.%d\n", (int)msg->data[0], (int)msg->data[1]); + } + + if (msg->data[1] >= 0x04) { + success("assuming TLS 1.3 or better hello format (seen %d.%d)\n", (int)msg->data[0], (int)msg->data[1]); + } + + pos += 2+TLS_RANDOM_SIZE; + + /* legacy_session_id */ + SKIP8(pos, msg->size); + + /* CipherSuite */ + pos += 2; + + /* legacy_compression_methods */ + SKIP8(pos, msg->size); + + pos += 2; + + while (pos < msg->size) { + uint16_t type; + + if (pos+4 > msg->size) + fail("invalid server hello\n"); + + type = (msg->data[pos] << 8) | msg->data[pos+1]; + pos+=2; + + success("Found server extension %d\n", (int)type); + + if (type != extnr) { + SKIP16(pos, msg->size); + } else { /* found */ + ssize_t size = (msg->data[pos] << 8) | msg->data[pos+1]; + gnutls_datum_t data; + + pos+=2; + if (pos + size < msg->size) { + fail("error in server extension length (pos: %d, total: %d)\n", pos, msg->size); + } + data.data = &msg->data[pos]; + data.size = size; + if (cb) + cb(priv, &data); + return 1; + } + } + + return 0; +} + +#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# pragma GCC diagnostic pop +#endif diff --git a/tests/tls13/hello_random_value.c b/tests/tls13/hello_random_value.c new file mode 100644 index 0000000000..62bdde46d8 --- /dev/null +++ b/tests/tls13/hello_random_value.c @@ -0,0 +1,263 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* This program tests whether the second client hello contains the same + * random value. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#if !defined(_WIN32) +#include +#include +#endif +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +unsigned char crandom[32]; +static unsigned cb_called = 0; + +static int client_hello_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + unsigned ok = 0, i; + + if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && post == GNUTLS_HOOK_POST) { + if (cb_called == 0) { + /* save first value */ + gnutls_datum_t tmp; + gnutls_session_get_random(session, &tmp, NULL); + assert(tmp.size == 32); + + memcpy(crandom, tmp.data, tmp.size); + cb_called++; + + /* check if uninitialized */ + for (i=0;i<32;i++) { + if (crandom[i] != 0) { + ok = 1; + break; + } + } + if (!ok) { + fail("the random value seems uninitialized\n"); + } + } else { /* verify it is the same */ + gnutls_datum_t tmp; + gnutls_session_get_random(session, &tmp, NULL); + + assert(tmp.size == 32); + if (memcmp(tmp.data, crandom, tmp.size) != 0) { + fail("the random values differ!\n"); + } + cb_called++; + } + } + + return 0; +} + +static void client(int sd) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t clientx509cred; + + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "client"; + + gnutls_certificate_allocate_credentials(&clientx509cred); + + /* Initialize TLS session + */ + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_KEY_SHARE_TOP)>=0); + + /* Use default priorities, i.e., SECP256R1 as key primary share + * to force hello retry request */ + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3", + NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, client_hello_callback); + + /* Perform the TLS handshake + */ + ret = gnutls_handshake(session); + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + goto end; + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (cb_called != 2) { + fail("client: the callback was not seen twice!\n"); + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + +end: + close(sd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} + +static void server(int sd) +{ + gnutls_certificate_credentials_t serverx509cred; + int ret; + gnutls_session_t session; + + /* this must be called once in the program + */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "server"; + + gnutls_certificate_allocate_credentials(&serverx509cred); + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + + /* force a hello retry request by disabling all the groups that are + * enabled by default. */ + assert(gnutls_priority_set_direct(session, + "NORMAL:-VERS-ALL:+VERS-TLS1.3:" + "-GROUP-SECP256R1", + NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_handshake(session); + if (ret < 0) { + fail("server: Handshake has failed: %s\n\n", + gnutls_strerror(ret)); + goto end; + } + if (debug) + success("server: Handshake was completed\n"); + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + +end: + close(sd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(serverx509cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +void doit(void) +{ + pid_t child; + int sockets[2]; + int err; + + signal(SIGPIPE, SIG_IGN); + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status = 0; + /* parent */ + close(sockets[1]); + client(sockets[0]); + wait(&status); + check_wait_status(status); + } else { + close(sockets[0]); + server(sockets[1]); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/hello_retry_request.c b/tests/tls13/hello_retry_request.c new file mode 100644 index 0000000000..c0d270ca41 --- /dev/null +++ b/tests/tls13/hello_retry_request.c @@ -0,0 +1,235 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" +#include "tls13/ext-parse.h" + +/* This program tests whether the version in Hello Retry Request message + * is the expected */ + +const char *testname = ""; + +#define myfail(fmt, ...) \ + fail("%s: "fmt, testname, ##__VA_ARGS__) + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +struct ctx_st { + unsigned hrr_seen; + unsigned hello_counter; +}; + +static int hello_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + struct ctx_st *ctx = gnutls_session_get_ptr(session); + assert(ctx != NULL); + + if (htype == GNUTLS_HANDSHAKE_HELLO_RETRY_REQUEST) + ctx->hrr_seen = 1; + + if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && post == GNUTLS_HOOK_POST) { + if (ctx->hello_counter > 0) { + assert(msg->size > 4); + if (msg->data[0] != 0x03 || msg->data[1] != 0x03) { + fail("version is %d.%d expected 3,3\n", (int)msg->data[0], (int)msg->data[1]); + } + } + ctx->hello_counter++; + } + + return 0; +} + + +static void client(int fd) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + struct ctx_st ctx; + + memset(&ctx, 0, sizeof(ctx)); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_KEY_SHARE_TOP)>=0); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_session_set_ptr(session, &ctx); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-X25519", NULL); + if (ret < 0) + myfail("cannot set TLS 1.3 priorities\n"); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + hello_callback); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + assert(ctx.hrr_seen != 0); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); +} + +static void server(int fd) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + /* server only supports x25519, client advertises secp256r1 */ + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519", NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + if (ret == GNUTLS_E_INTERRUPTED) { /* expected */ + break; + } + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) + myfail("handshake error: %s\n", gnutls_strerror(ret)); + + if (gnutls_group_get(session) != GNUTLS_GROUP_X25519) + myfail("group doesn't match the expected: %s\n", gnutls_group_get_name(gnutls_group_get(session))); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); +} + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +void doit(void) +{ + int fd[2]; + int ret; + pid_t child; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + client(fd[0]); + kill(child, SIGTERM); + } else { + close(fd[0]); + server(fd[1]); + exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/key_limits.c b/tests/tls13/key_limits.c new file mode 100644 index 0000000000..d76bcde428 --- /dev/null +++ b/tests/tls13/key_limits.c @@ -0,0 +1,340 @@ +/* + * Copyright (C) 2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +static void terminate(void); + +/* This program tests whether re-key occurs at the expected + * time. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define MAX_BUF 1024 + +static void client(int fd, const char *prio, unsigned expect_update) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + unsigned char seq[8]; + unsigned update_happened = 0; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + /* Use default priorities */ + ret = gnutls_priority_set_direct(session, prio, NULL); + if (ret < 0) { + fail("error in priority '%s': %s\n", prio, gnutls_strerror(ret)); + exit(1); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + /* make sure we are not blocked forever */ + gnutls_record_set_timeout(session, 10000); + + assert(gnutls_record_get_state(session, 1, NULL, NULL, NULL, seq) >= 0); + assert(gnutls_record_set_state(session, 1, (void*)"\x00\x00\x00\x00\x00\xff\xff\xfa") >= 0); + + do { + do { + ret = gnutls_record_recv_seq(session, buffer, MAX_BUF, seq); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + + if (memcmp(seq, "\x00\x00\x00\x00\x00\x00\x00\x01", 8) == 0) { + update_happened = 1; + } + } while (ret > 0); + + if (ret == 0 || ret == GNUTLS_E_TIMEDOUT) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + goto end; + } else if (ret < 0) { + if (ret != 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + exit(1); + } + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + end: + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (expect_update && update_happened == 0) { + fail("no update occurred!\n"); + exit(1); + } else if (!expect_update && update_happened) { + fail("update occurred unexpectedly!\n"); + exit(1); + } else { + if (debug) + success("detected update!\n"); + } +} + + +/* These are global */ +pid_t child; + +static void terminate(void) +{ + kill(child, SIGTERM); + exit(1); +} + +static void server(int fd, const char *prio) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + unsigned i; + unsigned char seq[8]; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + ret = gnutls_priority_set_direct(session, prio, NULL); + if (ret < 0) { + fail("error in priority '%s': %s\n", prio, gnutls_strerror(ret)); + exit(1); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(fd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + terminate(); + } + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + assert(gnutls_record_get_state(session, 0, NULL, NULL, NULL, seq) >= 0); + assert(gnutls_record_set_state(session, 0, (void*)"\x00\x00\x00\x00\x00\xff\xff\xfa") >= 0); + + memset(buffer, 1, sizeof(buffer)); + for (i = 0; i<32; i++) { + usleep(10000); /* some systems like FreeBSD have their buffers full during this send */ + do { + ret = + gnutls_record_send(session, buffer, + sizeof(buffer)); + } while (ret == GNUTLS_E_AGAIN + || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) { + fail("Error sending %d byte packet: %s\n", (int)sizeof(buffer), + gnutls_strerror(ret)); + terminate(); + } + + if (ret != sizeof(buffer)) { + fail("Error sending %d byte packet: sent: %d\n", (int)sizeof(buffer), + ret); + terminate(); + } + } + + + /* wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void start(const char *name, const char *prio, unsigned exp_update) +{ + int fd[2]; + int ret, status = 0; + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + success("trying: %s\n", name); + close(fd[0]); + server(fd[1], prio); + wait(&status); + check_wait_status(status); + } else { + close(fd[1]); + client(fd[0], prio, exp_update); + exit(0); + } +} + +#define AES_GCM "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM" +#define CHACHA_POLY1305 "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+CHACHA20-POLY1305" + +static void ch_handler(int sig) +{ + return; +} + +void doit(void) +{ + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + start("aes-gcm", AES_GCM, 1); + if (!gnutls_fips140_mode_enabled()) { + start("chacha20", CHACHA_POLY1305, 0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/key_share.c b/tests/tls13/key_share.c new file mode 100644 index 0000000000..6f8b1e9293 --- /dev/null +++ b/tests/tls13/key_share.c @@ -0,0 +1,332 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" +#include "tls13/ext-parse.h" + +/* This program tests the Key Share behavior in Client Hello, + * and whether the flags to gnutls_init for key share are followed. + */ + +const char *testname = ""; + +#define myfail(fmt, ...) \ + fail("%s: "fmt, testname, ##__VA_ARGS__) + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + + + +#define MAX_BUF 1024 + +static void client(int fd, unsigned flag, const char *prio) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT|flag); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, prio, NULL); + if (ret < 0) + myfail("cannot set TLS 1.3 priorities\n"); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +unsigned int tls_id_to_group[] = { + [23] = GNUTLS_GROUP_SECP256R1, + [24] = GNUTLS_GROUP_SECP384R1, + [29] = GNUTLS_GROUP_X25519, + [0x100] = GNUTLS_GROUP_FFDHE2048, + [0x101] = GNUTLS_GROUP_FFDHE3072 +}; + + +#define TLS_EXT_KEY_SHARE 51 + +typedef struct ctx_st { + gnutls_group_t group; + unsigned ngroups; +} ctx_st; + +static +void check_ks_contents(void *priv, gnutls_datum_t *msg) +{ + ctx_st *ctx; + int len; + gnutls_session_t session = priv; + int pos; + unsigned total = 0, id; + unsigned found = 0; + + ctx = gnutls_session_get_ptr(session); + + len = (msg->data[0] << 8) | msg->data[1]; + if (len+2 != (int)msg->size) + myfail("mismatch in length (%d vs %d)!\n", len, (int)msg->size); + + pos = 2; + + while((unsigned)pos < msg->size) { + id = (msg->data[pos] << 8) | msg->data[pos+1]; + pos += 2; + len -= 2; + + if (debug) + success("found group: %u\n", id); + if (id < sizeof(tls_id_to_group)/sizeof(tls_id_to_group[0])) { + if (tls_id_to_group[id] == ctx->group) + found = 1; + } + total++; + + SKIP16(pos, msg->size); + } + + if (total != ctx->ngroups) { + myfail("found %d groups, expected %d\n", total, ctx->ngroups); + } + + if (found == 0) { + myfail("did not find group %s\n", gnutls_group_get_name(ctx->group)); + } +} + +static int client_hello_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && post == GNUTLS_HOOK_POST) { + if (find_client_extension(msg, TLS_EXT_KEY_SHARE, session, check_ks_contents) == 0) + fail("Could not find key share extension!\n"); + } + + return 0; +} + +static void server(int fd, gnutls_group_t exp_group, unsigned ngroups) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + ctx_st ctx; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + client_hello_callback); + ctx.group = exp_group; + ctx.ngroups = ngroups; + gnutls_session_set_ptr(session, &ctx); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:+VERS-TLS1.3", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + if (ret == GNUTLS_E_INTERRUPTED) { /* expected */ + break; + } + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) + myfail("handshake error: %s\n", gnutls_strerror(ret)); + + if (gnutls_group_get(session) != exp_group) + myfail("group doesn't match the expected: %s\n", gnutls_group_get_name(gnutls_group_get(session))); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +static void start(const char *name, const char *prio, unsigned flag, gnutls_group_t group, unsigned ngroups) +{ + int fd[2]; + int ret; + pid_t child; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + testname = name; + success("== test %s ==\n", testname); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], group, ngroups); + kill(child, SIGTERM); + } else { + close(fd[0]); + client(fd[1], flag, prio); + exit(0); + } +} + +void doit(void) +{ + start("single group: default secp256r1", "NORMAL:-VERS-ALL:+VERS-TLS1.3", GNUTLS_KEY_SHARE_TOP, GNUTLS_GROUP_SECP256R1, 1); + start("single group: secp256r1", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-X25519:+GROUP-FFDHE2048", GNUTLS_KEY_SHARE_TOP, GNUTLS_GROUP_SECP256R1, 1); + start("single group: x25519", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-FFDHE2048", GNUTLS_KEY_SHARE_TOP, GNUTLS_GROUP_X25519, 1); + + /* unfortunately we strictly follow the rfc7919 RFC and we prioritize groups + * based on ciphersuite listing as well. To prioritize the FFDHE groups we need + * to prioritize the non-EC ciphersuites first. */ + start("single group: ffdhe2048", "NORMAL:-KX-ALL:+DHE-RSA:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-X25519:+GROUP-FFDHE3072", GNUTLS_KEY_SHARE_TOP, GNUTLS_GROUP_FFDHE2048, 1); + + start("two groups: default secp256r1", "NORMAL:-VERS-ALL:+VERS-TLS1.3", GNUTLS_KEY_SHARE_TOP2, GNUTLS_GROUP_SECP256R1, 2); + start("two groups: secp256r1", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-X25519:+GROUP-FFDHE2048", GNUTLS_KEY_SHARE_TOP2, GNUTLS_GROUP_SECP256R1, 2); + start("two groups: x25519", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-FFDHE2048", GNUTLS_KEY_SHARE_TOP2, GNUTLS_GROUP_X25519, 2); + start("two groups: ffdhe2048", "NORMAL:-KX-ALL:+DHE-RSA:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-X25519:+GROUP-FFDHE3072", GNUTLS_KEY_SHARE_TOP2, GNUTLS_GROUP_FFDHE2048, 2); + + start("three groups: default secp256r1", "NORMAL:-VERS-ALL:+VERS-TLS1.3", GNUTLS_KEY_SHARE_TOP3, GNUTLS_GROUP_SECP256R1, 3); + start("three groups: secp256r1", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-X25519:+GROUP-FFDHE2048", GNUTLS_KEY_SHARE_TOP3, GNUTLS_GROUP_SECP256R1, 3); + start("three groups: x25519", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-FFDHE2048", GNUTLS_KEY_SHARE_TOP3, GNUTLS_GROUP_X25519, 3); + start("three groups: ffdhe2048", "NORMAL:-KX-ALL:+DHE-RSA:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-X25519:+GROUP-FFDHE3072", GNUTLS_KEY_SHARE_TOP3, GNUTLS_GROUP_FFDHE2048, 3); + + /* test default behavior */ + start("default groups(2): default secp256r1", "NORMAL:-VERS-ALL:+VERS-TLS1.3", 0, GNUTLS_GROUP_SECP256R1, 2); + start("default groups(2): secp256r1", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-X25519:+GROUP-FFDHE2048", 0, GNUTLS_GROUP_SECP256R1, 2); + start("default groups(2): x25519", "NORMAL:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-X25519:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-FFDHE2048", 0, GNUTLS_GROUP_X25519, 2); + start("default groups(2): ffdhe2048", "NORMAL:-KX-ALL:+DHE-RSA:+ECDHE-RSA:-VERS-ALL:+VERS-TLS1.3:-GROUP-ALL:+GROUP-FFDHE2048:+GROUP-SECP256R1:+GROUP-SECP384R1:+GROUP-X25519:+GROUP-FFDHE3072", 0, GNUTLS_GROUP_FFDHE2048, 2); +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/key_update.c b/tests/tls13/key_update.c new file mode 100644 index 0000000000..e9fae865ba --- /dev/null +++ b/tests/tls13/key_update.c @@ -0,0 +1,276 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include "cert-common.h" + +#include "utils.h" +#define RANDOMIZE +#include "eagain-common.h" + +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +#define MAX_BUF 1024 +#define MSG "Hello TLS, and hi and how are you and more data here... and more... and even more and even more more data..." + +static unsigned key_update_msg_inc = 0; +static unsigned key_update_msg_out = 0; + +static int hsk_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + assert(post == GNUTLS_HOOK_PRE); + + assert(msg->size == 1); + + if (htype == GNUTLS_HANDSHAKE_KEY_UPDATE) { + if (incoming) + key_update_msg_inc++; + else + key_update_msg_out++; + } + + return 0; +} + +static void run(const char *name, unsigned test) +{ + /* Server stuff. */ + gnutls_certificate_credentials_t ccred; + gnutls_certificate_credentials_t scred; + gnutls_session_t server; + int sret, cret; + /* Client stuff. */ + gnutls_session_t client; + /* Need to enable anonymous KX specifically. */ + char buffer[MAX_BUF + 1]; + int ret, transferred = 0; + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(9); + + /* Init server */ + assert(gnutls_certificate_allocate_credentials(&scred) >= 0); + assert(gnutls_certificate_set_x509_key_mem(scred, + &server_ca3_localhost_cert, + &server_ca3_key, + GNUTLS_X509_FMT_PEM) >= 0); + + assert(gnutls_init(&server, GNUTLS_SERVER) >= 0); + ret = + gnutls_priority_set_direct(server, + "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", + NULL); + if (ret < 0) + exit(1); + + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, scred); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + assert(gnutls_certificate_allocate_credentials(&ccred) >= 0); + assert(gnutls_certificate_set_x509_trust_mem + (ccred, &ca3_cert, GNUTLS_X509_FMT_PEM) >= 0); + + gnutls_init(&client, GNUTLS_CLIENT); + ret = + gnutls_priority_set_direct(client, + "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", + NULL); + assert(ret >= 0); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, ccred); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + + HANDSHAKE(client, server); + if (debug) + success("Handshake established\n"); + + switch (test) { + case 0: + case 1: + success("%s: updating client's key\n", name); + do { + ret = gnutls_session_key_update(client, 0); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + /* server receives the client key update and sends data */ + TRANSFER(client, server, MSG, strlen(MSG), buffer, MAX_BUF); + TRANSFER(server, client, MSG, strlen(MSG), buffer, MAX_BUF); + EMPTY_BUF(server, client, buffer, MAX_BUF); + if (test != 0) + break; + sec_sleep(2); + FALLTHROUGH; + case 2: + success("%s: updating server's key\n", name); + + do { + ret = gnutls_session_key_update(server, 0); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret < 0) + fail("error in key update: %s\n", gnutls_strerror(ret)); + + /* client receives the key update and sends data */ + TRANSFER(client, server, MSG, strlen(MSG), buffer, MAX_BUF); + TRANSFER(server, client, MSG, strlen(MSG), buffer, MAX_BUF); + EMPTY_BUF(server, client, buffer, MAX_BUF); + if (test != 0) + break; + sec_sleep(2); + FALLTHROUGH; + case 3: + success("%s: updating client's key and asking server\n", name); + do { + ret = gnutls_session_key_update(client, GNUTLS_KU_PEER); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret < 0) + fail("error in key update: %s\n", gnutls_strerror(ret)); + + /* server receives the client key update and sends data */ + TRANSFER(client, server, MSG, strlen(MSG), buffer, MAX_BUF); + TRANSFER(server, client, MSG, strlen(MSG), buffer, MAX_BUF); + EMPTY_BUF(server, client, buffer, MAX_BUF); + if (test != 0) + break; + sec_sleep(2); + FALLTHROUGH; + case 4: + success("%s: updating server's key and asking client\n", name); + do { + ret = gnutls_session_key_update(server, GNUTLS_KU_PEER); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret < 0) + fail("error in key update: %s\n", gnutls_strerror(ret)); + + TRANSFER(client, server, MSG, strlen(MSG), buffer, MAX_BUF); + TRANSFER(server, client, MSG, strlen(MSG), buffer, MAX_BUF); + EMPTY_BUF(server, client, buffer, MAX_BUF); + + sec_sleep(2); + break; + case 5: + success("%s: client cork\n", name); + gnutls_record_cork(client); + + /* server sends key update */ + do { + ret = gnutls_session_key_update(server, GNUTLS_KU_PEER); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret < 0) + fail("error in key update: %s\n", gnutls_strerror(ret)); + + /* client has data in the corked buffer */ + do { + ret = gnutls_record_send(client, MSG, strlen(MSG)); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret < 0) + fail("cannot send: %s\n", gnutls_strerror(ret)); + + /* client receives key update */ + EMPTY_BUF(server, client, buffer, MAX_BUF); + + /* client uncorks and sends key update */ + do { + ret = gnutls_record_uncork(client, GNUTLS_RECORD_WAIT); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret < 0) + fail("cannot send: %s\n", gnutls_strerror(ret)); + + EMPTY_BUF(server, client, buffer, MAX_BUF); + + sec_sleep(2); + break; + case 6: + key_update_msg_inc = 0; + key_update_msg_out = 0; + + success("%s: callbacks are called\n", name); + + gnutls_handshake_set_hook_function(client, -1, GNUTLS_HOOK_PRE, hsk_callback); + gnutls_handshake_set_hook_function(server, -1, GNUTLS_HOOK_PRE, hsk_callback); + + do { + ret = gnutls_session_key_update(client, GNUTLS_KU_PEER); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret < 0) + fail("error in key update: %s\n", gnutls_strerror(ret)); + + /* server receives the client key update and sends data */ + TRANSFER(client, server, MSG, strlen(MSG), buffer, MAX_BUF); + TRANSFER(server, client, MSG, strlen(MSG), buffer, MAX_BUF); + EMPTY_BUF(server, client, buffer, MAX_BUF); + + assert(key_update_msg_inc == 2); + assert(key_update_msg_out == 2); + break; + } + + + gnutls_bye(client, GNUTLS_SHUT_WR); + gnutls_bye(server, GNUTLS_SHUT_WR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(scred); + gnutls_certificate_free_credentials(ccred); + + gnutls_global_deinit(); + reset_buffers(); +} + +void doit(void) +{ + run("single", 1); + run("single", 2); + run("single", 3); + run("single", 4); + run("single", 5); + run("single", 6); + run("all", 0); /* all one after each other */ +} diff --git a/tests/tls13/key_update_multiple.c b/tests/tls13/key_update_multiple.c new file mode 100644 index 0000000000..8b2c2db4b3 --- /dev/null +++ b/tests/tls13/key_update_multiple.c @@ -0,0 +1,232 @@ +/* + * Copyright (C) 2017-2019 Red Hat, Inc. + * + * Author: Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include "cert-common.h" + +#include "utils.h" +#include "virt-time.h" +#define RANDOMIZE +#include "eagain-common.h" + +const char *side = ""; + +/* This program tests whether multiple key update messages are handled + * properly with rate-limit. */ + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +#define MAX_BUF 1024 +#define MSG "Hello TLS, and hi and how are you and more data here... and more... and even more and even more more data..." + +/* These must match the definitions in lib/tls13/key_update.c. */ +#define KEY_UPDATES_WINDOW 1000 +#define KEY_UPDATES_PER_WINDOW 8 + +static unsigned key_update_msg_inc = 0; +static unsigned key_update_msg_out = 0; + +static int hsk_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + assert(post == GNUTLS_HOOK_PRE); + + assert(msg->size == 1); + + if (htype == GNUTLS_HANDSHAKE_KEY_UPDATE) { + if (incoming) + key_update_msg_inc++; + else + key_update_msg_out++; + } + + return 0; +} + +static void run(const char *name, bool exceed_limit) +{ + /* Server stuff. */ + gnutls_certificate_credentials_t ccred; + gnutls_certificate_credentials_t scred; + gnutls_session_t server; + int sret, cret; + /* Client stuff. */ + gnutls_session_t client; + /* Need to enable anonymous KX specifically. */ + char buffer[MAX_BUF + 1]; + int ret, transferred = 0; + size_t i; + + success("%s\n", name); + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(9); + + /* Init server */ + assert(gnutls_certificate_allocate_credentials(&scred) >= 0); + assert(gnutls_certificate_set_x509_key_mem(scred, + &server_ca3_localhost_cert, + &server_ca3_key, + GNUTLS_X509_FMT_PEM) >= 0); + + assert(gnutls_init(&server, GNUTLS_SERVER) >= 0); + ret = + gnutls_priority_set_direct(server, + "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", + NULL); + if (ret < 0) + exit(1); + + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, scred); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + + /* Init client */ + assert(gnutls_certificate_allocate_credentials(&ccred) >= 0); + assert(gnutls_certificate_set_x509_trust_mem + (ccred, &ca3_cert, GNUTLS_X509_FMT_PEM) >= 0); + + gnutls_init(&client, GNUTLS_CLIENT); + ret = + gnutls_priority_set_direct(client, + "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", + NULL); + assert(ret >= 0); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, ccred); + if (ret < 0) + exit(1); + + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + + HANDSHAKE(client, server); + if (debug) + success("Handshake established\n"); + + key_update_msg_inc = 0; + key_update_msg_out = 0; + + gnutls_handshake_set_hook_function(client, -1, GNUTLS_HOOK_PRE, hsk_callback); + + /* schedule multiple key updates */ + for (i = 0; i < KEY_UPDATES_PER_WINDOW; i++) { + do { + ret = gnutls_session_key_update(client, 1); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret < 0) + fail("error in key update: %s\n", gnutls_strerror(ret)); + } + + /* server receives the client key update and sends data */ + TRANSFER(client, server, MSG, strlen(MSG), buffer, MAX_BUF); + TRANSFER(server, client, MSG, strlen(MSG), buffer, MAX_BUF); + EMPTY_BUF(server, client, buffer, MAX_BUF); + + if (key_update_msg_out != KEY_UPDATES_PER_WINDOW) + fail("unexpected number of key updates are sent: %d\n", + key_update_msg_out); + else { + if (debug) + success("successfully sent %d key updates\n", + KEY_UPDATES_PER_WINDOW); + } + if (key_update_msg_inc != 1) + fail("unexpected number of key updates received: %d\n", + key_update_msg_inc); + else { + if (debug) + success("successfully received 1 key update\n"); + } + + if (exceed_limit) { + /* excessive key update in the same time window should + * be rejected by the peer */ + do { + ret = gnutls_session_key_update(client, 1); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + /* server receives the client key update and sends data */ + ret = record_send_loop(client, MSG, strlen(MSG), 0); + assert(ret == strlen(MSG)); + ret = gnutls_record_recv(server, buffer, MAX_BUF); + if (ret != GNUTLS_E_TOO_MANY_HANDSHAKE_PACKETS) + fail("server didn't reject excessive number of key updates\n"); + else { + if (debug) + success("server rejected excessive number of key updates\n"); + } + } else { + virt_sec_sleep(KEY_UPDATES_WINDOW / 1000 + 1); + + /* the time window should be rolled over now */ + do { + ret = gnutls_session_key_update(client, 1); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + if (ret < 0) + fail("error in key update: %s\n", gnutls_strerror(ret)); + + /* server receives the client key update and sends data */ + TRANSFER(client, server, MSG, strlen(MSG), buffer, MAX_BUF); + TRANSFER(server, client, MSG, strlen(MSG), buffer, MAX_BUF); + EMPTY_BUF(server, client, buffer, MAX_BUF); + } + + gnutls_bye(client, GNUTLS_SHUT_WR); + gnutls_bye(server, GNUTLS_SHUT_WR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(scred); + gnutls_certificate_free_credentials(ccred); + + gnutls_global_deinit(); + reset_buffers(); +} + +void doit(void) +{ + virt_time_init(); + + run("not exceeding limit", 0); + run("exceeding limit", 1); +} diff --git a/tests/tls13/multi-ocsp.c b/tests/tls13/multi-ocsp.c new file mode 100644 index 0000000000..e7a52e125a --- /dev/null +++ b/tests/tls13/multi-ocsp.c @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2016-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef ENABLE_OCSP + +#include "ocsp-common.h" +#include "cert-common.h" +#include "utils.h" + +/* Tests whether we can send and receive multiple OCSP responses + * one for each certificate in a chain under TLS 1.3. + */ + +static time_t mytime(time_t * t) +{ + time_t then = 1469186559; + if (t) + *t = then; + + return then; +} + +static const gnutls_datum_t ocsp_resp_localhost[] = { + { (void*)_ocsp_ca3_localhost_unknown, sizeof(_ocsp_ca3_localhost_unknown) }, + { NULL, 0}}; + +static const gnutls_datum_t ocsp_resp_localhost6[] = { + { (void*)_ocsp_ca3_localhost6_unknown, sizeof(_ocsp_ca3_localhost6_unknown) }, + { (void*)_ocsp_subca3_unknown, sizeof(_ocsp_subca3_unknown) }}; + +typedef struct ctx_st { + const char *name; + const gnutls_datum_t *ocsp; + unsigned nocsp; +} ctx_st; + +static ctx_st test_localhost = {"single response", ocsp_resp_localhost, 1}; +static ctx_st test_localhost6 = {"two responses", ocsp_resp_localhost6, 2}; + +#define myfail(fmt, ...) \ + fail("%s: "fmt, test->name, ##__VA_ARGS__) + +static void check_response(gnutls_session_t session, void *priv) +{ + int ret; + gnutls_datum_t resp; + ctx_st *test = priv; + unsigned i; + + assert(test != NULL); + + for (i=0;;i++) { + ret = gnutls_ocsp_status_request_get2(session, i, &resp); + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + break; + if (ret < 0) { + if (test->ocsp[i].size == 0) + return; + myfail("no response was received\n"); + } + + if (test->ocsp[i].size == 0) { + myfail("not expected response, but received one\n"); + } + + if (resp.size != test->ocsp[i].size) { + myfail("did not receive the expected response size for %d\n", i); + } + + if (memcmp(resp.data, test->ocsp[i].data, resp.size) != 0) { + myfail("did not receive the expected response for %d\n", i); + } + } + + if (i != test->nocsp) { + myfail("The number of OCSP responses received (%d) does not match the expected (%d)\n", i, test->nocsp); + } + +} + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +void doit(void) +{ + int ret; + gnutls_certificate_credentials_t xcred; + gnutls_certificate_credentials_t clicred; + const char *certfile1; + const char *certfile2; + char certname1[TMPNAME_SIZE]; + char certname2[TMPNAME_SIZE]; + FILE *fp; + unsigned index1, index2; /* indexes of certs */ + + global_init(); + gnutls_global_set_time_function(mytime); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + assert(gnutls_certificate_allocate_credentials(&xcred) >= 0); + assert(gnutls_certificate_allocate_credentials(&clicred) >= 0); + + gnutls_certificate_set_flags(xcred, GNUTLS_CERTIFICATE_API_V2); + + /* set cert with localhost name */ + certfile1 = get_tmpname(certname1); + + fp = fopen(certfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(server_localhost_ca3_cert_chain_pem, 1, strlen(server_localhost_ca3_cert_chain_pem), fp)>0); + assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(xcred, certfile1, certfile1, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + index1 = ret; + + /* set cert with localhost6 name */ + certfile2 = get_tmpname(certname2); + + fp = fopen(certfile2, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(server_localhost6_ca3_cert_chain_pem, 1, strlen(server_localhost6_ca3_cert_chain_pem), fp)>0); + assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(xcred, certfile2, certfile2, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + index2 = ret; + + + /* set OCSP response1 */ + ret = gnutls_certificate_set_ocsp_status_request_mem(xcred, &test_localhost.ocsp[0], index1, GNUTLS_X509_FMT_DER); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* set OCSP response2 */ + ret = gnutls_certificate_set_ocsp_status_request_mem(xcred, &test_localhost6.ocsp[0], index2, GNUTLS_X509_FMT_DER); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + ret = gnutls_certificate_set_ocsp_status_request_mem(xcred, &test_localhost6.ocsp[1], index2, GNUTLS_X509_FMT_DER); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* make sure that our invalid OCSP responses are not considered in verification + */ + gnutls_certificate_set_verify_flags(clicred, GNUTLS_VERIFY_DISABLE_CRL_CHECKS); + if (gnutls_certificate_get_verify_flags(clicred) != GNUTLS_VERIFY_DISABLE_CRL_CHECKS) + fail("error in gnutls_certificate_set_verify_flags\n"); + + ret = gnutls_certificate_set_x509_trust_mem(clicred, &ca3_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("error in setting trust cert: %s\n", gnutls_strerror(ret)); + } + + test_cli_serv(xcred, clicred, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", "localhost", &test_localhost, check_response, NULL); + test_cli_serv(xcred, clicred, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", "localhost6", &test_localhost6, check_response, NULL); + + gnutls_certificate_free_credentials(xcred); + gnutls_certificate_free_credentials(clicred); + gnutls_global_deinit(); + remove(certfile1); + remove(certfile2); +} + +#else +void doit(void) +{ + exit(77); +} +#endif diff --git a/tests/tls13/no-auto-send-ticket.c b/tests/tls13/no-auto-send-ticket.c new file mode 100644 index 0000000000..2602f178a1 --- /dev/null +++ b/tests/tls13/no-auto-send-ticket.c @@ -0,0 +1,314 @@ +/* + * Copyright (C) 2017-2020 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos, Daiki Ueno + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../lib/handshake-defs.h" +#include "cert-common.h" +#include "utils.h" + +/* This program tests whether the certificate seen in Post Handshake Auth + * is found in a resumed session under TLS 1.3. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +static unsigned tickets_seen = 0; +static int ticket_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + gnutls_datum *d; + int ret; + + assert(htype == GNUTLS_HANDSHAKE_NEW_SESSION_TICKET); + + d = gnutls_session_get_ptr(session); + + if (post == GNUTLS_HOOK_POST) { + tickets_seen++; + if (d->data) + gnutls_free(d->data); + ret = gnutls_session_get_data2(session, d); + assert(ret >= 0); + assert(d->size > 4); + + return 0; + } + + return 0; +} + +static void client(int fd, unsigned flags, unsigned tickets) +{ + int ret; + gnutls_session_t session; + unsigned try = 0; + gnutls_datum_t session_data = {NULL, 0}; + gnutls_certificate_credentials_t x509_cred; + + global_init(); + tickets_seen = 0; + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + + retry: + /* Initialize TLS session + */ + assert(gnutls_init(&session, GNUTLS_CLIENT|flags)>=0); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.0", NULL); + if (ret < 0) + fail("cannot set TLS 1.3 priorities\n"); + + + if (try == 0) { + gnutls_session_set_ptr(session, &session_data); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_NEW_SESSION_TICKET, + GNUTLS_HOOK_BOTH, + ticket_callback); + } else { + assert(gnutls_session_set_data(session, session_data.data, session_data.size) >= 0); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_RDWR); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret != 0) { + fail("error in recv: %s\n", gnutls_strerror(ret)); + } + + if (tickets_seen != tickets) + fail("unexpected number of tickets received: %u != %u", + tickets_seen, tickets); + + gnutls_deinit(session); + + if (tickets > 0 && try == 0) { + try++; + goto retry; + } + + close(fd); + gnutls_free(session_data.data); + + gnutls_global_deinit(); +} + +static void server(int fd, unsigned flags, + unsigned tickets_sent, unsigned tickets_expected) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + gnutls_datum_t skey; + + /* this must be called once in the program + */ + global_init(); + + assert(gnutls_session_ticket_key_generate(&skey)>=0); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + assert(gnutls_init(&session, GNUTLS_SERVER|flags)>=0); + + assert(gnutls_session_ticket_enable_server(session, &skey) >= 0); + gnutls_handshake_set_timeout(session, 20 * 1000); + + assert(gnutls_priority_set_direct(session, "NORMAL:+VERS-TLS1.3", NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (tickets_sent > 0) { + do { + ret = gnutls_session_ticket_send(session, tickets_sent, 0); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + } + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_RDWR); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + gnutls_deinit(session); + + if (tickets_expected > 0) { + /* resume session + */ + assert(gnutls_init(&session, GNUTLS_SERVER|flags)>=0); + + assert(gnutls_session_ticket_enable_server(session, &skey) >= 0); + gnutls_handshake_set_timeout(session, 20 * 1000); + assert(gnutls_priority_set_direct(session, "NORMAL:+VERS-TLS1.3", NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + assert(gnutls_session_is_resumed(session) != 0); + + gnutls_bye(session, GNUTLS_SHUT_RDWR); + gnutls_deinit(session); + } + + gnutls_free(skey.data); + close(fd); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +static void start(const char *name, + unsigned flags, + unsigned tickets_sent, + unsigned tickets_expected) +{ + int fd[2]; + int ret; + pid_t child; + + success("testing: %s\n", name); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], flags, tickets_sent, tickets_expected); + kill(child, SIGTERM); + } else { + close(fd[0]); + client(fd[1], flags, tickets_expected); + exit(0); + } + +} + +void doit(void) +{ + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + start("auto send ticket 0", 0, 0, TLS13_TICKETS_TO_SEND); + start("auto send ticket 1", 0, 1, TLS13_TICKETS_TO_SEND + 1); + start("no auto send ticket 0", GNUTLS_NO_AUTO_SEND_TICKET, 0, 0); + start("no auto send ticket 1", GNUTLS_NO_AUTO_SEND_TICKET, 1, 1); +} +#endif /* _WIN32 */ diff --git a/tests/tls13/no-psk-exts.c b/tests/tls13/no-psk-exts.c new file mode 100644 index 0000000000..e26beeef2c --- /dev/null +++ b/tests/tls13/no-psk-exts.c @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "tls13/ext-parse.h" +#include "utils.h" + +/* This program tests whether a connection without the PSK priority + * options, will contain PSK extensions */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define MAX_BUF 1024 + +static void client(int fd) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_psk_client_credentials_t psk_cred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_psk_allocate_client_credentials(&psk_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_NO_TICKETS); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.0", NULL); + if (ret < 0) + fail("cannot set TLS 1.3 priorities\n"); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + gnutls_credentials_set(session, GNUTLS_CRD_PSK, psk_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + /* try if gnutls_reauth() would fail as expected */ + ret = gnutls_reauth(session, 0); + if (ret != GNUTLS_E_INVALID_REQUEST) + fail("server: gnutls_reauth did not fail as expected: %s", gnutls_strerror(ret)); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + gnutls_psk_free_client_credentials(psk_cred); + + gnutls_global_deinit(); +} + +static unsigned server_hello_ok = 0; + +#define TLS_EXT_PSK 41 +#define TLS_EXT_PSK_KE 45 + +static int hellos_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + if (htype == GNUTLS_HANDSHAKE_SERVER_HELLO && post == GNUTLS_HOOK_POST) { + if (find_server_extension(msg, TLS_EXT_PSK_KE, NULL, NULL)) { + fail("PSK KE extension seen on server (illegal)!\n"); + } + if (find_server_extension(msg, TLS_EXT_PSK, NULL, NULL)) { + fail("PSK extension seen on server (illegal)!\n"); + } + server_hello_ok = 1; + + return GNUTLS_E_INTERRUPTED; + } + + if (htype != GNUTLS_HANDSHAKE_CLIENT_HELLO || post != GNUTLS_HOOK_PRE) + return 0; + + if (find_client_extension(msg, TLS_EXT_PSK, NULL, NULL)) + fail("PSK extension seen in client hello with no PSK!\n"); + + if (find_client_extension(msg, TLS_EXT_PSK_KE, NULL, NULL)) + fail("PSK KE extension seen in client hello with no PSK!\n"); + + return 0; +} + +static void server(int fd) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + hellos_callback); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:+VERS-TLS1.3", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + if (ret == GNUTLS_E_INTERRUPTED) { /* expected */ + break; + } + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + + if (server_hello_ok == 0) { + fail("server: did not verify the server hello contents\n"); + } + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +void doit(void) +{ + int fd[2]; + int ret; + pid_t child; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0]); + kill(child, SIGTERM); + } else { + close(fd[0]); + client(fd[1]); + exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/ocsp-client.c b/tests/tls13/ocsp-client.c new file mode 100644 index 0000000000..a98dfdc77e --- /dev/null +++ b/tests/tls13/ocsp-client.c @@ -0,0 +1,223 @@ +/* + * Copyright (C) 2016-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#ifdef ENABLE_OCSP + +#include "cert-common.h" +#include "utils.h" + +/* Tests whether we can send and receive multiple OCSP responses + * one for each certificate in a chain under TLS 1.3, but unrelated + * to these certificate (using the GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK + * flag). + */ + +static time_t mytime(time_t * t) +{ + time_t then = 1469186559; + if (t) + *t = then; + + return then; +} + +#define RESP1 "\x30\x82\x06\x8C\x0A\x01\x00\xA0\x82\x06\x85\x30\x82\x06\x81\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x01\x04\x82\x06\x72\x30\x82\x06\x6E\x30\x82\x01\x07\xA1\x69\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\x30\x64\x30\x62\x30\x3A\x30\x09\x06\x05\x2B\x0E\x03\x02\x1A\x05\x00\x04\x14\x13\x9D\xA0\x9E\xF4\x32\xAB\x8F\xE2\x89\x56\x67\xFA\xD0\xD4\xE3\x35\x86\x71\xB9\x04\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\x02\x01\x1D\x80\x00\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x34\x32\x38\x5A\xA0\x11\x18\x0F\x32\x30\x31\x31\x30\x39\x32\x37\x30\x39\x35\x39\x32\x38\x5A\xA1\x23\x30\x21\x30\x1F\x06\x09\x2B\x06\x01\x05\x05\x07\x30\x01\x02\x04\x12\x04\x10\x16\x89\x7D\x91\x3A\xB5\x25\xA4\x45\xFE\xC9\xFD\xC2\xE5\x08\xA4\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x4E\xAD\x6B\x2B\xF7\xF2\xBF\xA9\x23\x1E\x3A\x0B\x06\xDB\x55\x53\x2B\x64\x54\x11\x32\xBF\x60\xF7\x4F\xE0\x8E\x9B\xA0\xA2\x4C\x79\xC3\x2A\xE0\x43\xF7\x40\x1A\xDC\xB9\xB4\x25\xEF\x48\x01\x97\x8C\xF5\x1E\xDB\xD1\x30\x37\x73\x69\xD6\xA7\x7A\x2D\x8E\xDE\x5C\xAA\xEA\x39\xB9\x52\xAA\x25\x1E\x74\x7D\xF9\x78\x95\x8A\x92\x1F\x98\x21\xF4\x60\x7F\xD3\x28\xEE\x47\x9C\xBF\xE2\x5D\xF6\x3F\x68\x0A\xD6\xFF\x08\xC1\xDC\x95\x1E\x29\xD7\x3E\x85\xD5\x65\xA4\x4B\xC0\xAF\xC3\x78\xAB\x06\x98\x88\x19\x8A\x64\xA6\x83\x91\x87\x13\xDB\x17\xCC\x46\xBD\xAB\x4E\xC7\x16\xD1\xF8\x35\xFD\x27\xC8\xF6\x6B\xEB\x37\xB8\x08\x6F\xE2\x6F\xB4\x7E\xD5\x68\xDB\x7F\x5D\x5E\x36\x38\xF2\x77\x59\x13\xE7\x3E\x4D\x67\x5F\xDB\xA2\xF5\x5D\x7C\xBF\xBD\xB5\x37\x33\x51\x36\x63\xF8\x21\x1E\xFC\x73\x8F\x32\x69\xBB\x97\xA7\xBD\xF1\xB6\xE0\x40\x09\x68\xEA\xD5\x93\xB8\xBB\x39\x8D\xA8\x16\x1B\xBF\x04\x7A\xBC\x18\x43\x01\xE9\x3C\x19\x5C\x4D\x4B\x98\xD8\x23\x37\x39\xA4\xC4\xDD\xED\x9C\xEC\x37\xAB\x66\x44\x9B\xE7\x5B\x5D\x32\xA2\xDB\xA6\x0B\x3B\x8C\xE1\xF5\xDB\xCB\x7D\x58\xA0\x82\x04\x4B\x30\x82\x04\x47\x30\x82\x04\x43\x30\x82\x03\x2B\xA0\x03\x02\x01\x02\x02\x01\x1E\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x30\x1E\x17\x0D\x30\x39\x31\x31\x32\x34\x31\x32\x35\x31\x35\x33\x5A\x17\x0D\x31\x34\x31\x31\x32\x33\x31\x32\x35\x31\x35\x33\x5A\x30\x67\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1F\x30\x1D\x06\x03\x55\x04\x0B\x13\x16\x4F\x43\x53\x50\x20\x53\x69\x67\x6E\x69\x6E\x67\x20\x41\x75\x74\x68\x6F\x72\x69\x74\x79\x31\x1C\x30\x1A\x06\x03\x55\x04\x03\x13\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x82\x01\x22\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00\x03\x82\x01\x0F\x00\x30\x82\x01\x0A\x02\x82\x01\x01\x00\xBC\x05\x3E\x4B\xBE\xC6\xB1\x33\x48\x0E\xC3\xD4\x0C\xEF\x83\x0B\xBD\xBC\x57\x5F\x14\xEF\xF5\x6D\x0B\xFF\xFA\x01\x9C\xFA\x21\x6D\x5C\xAE\x79\x29\x74\xFE\xBD\xAB\x70\x87\x98\x6B\x48\x35\x79\xE3\xE0\xC1\x14\x41\x1F\x0A\xF7\xE7\xA3\xA6\xDA\x6B\xFF\xCD\x74\xE9\x95\x00\x38\xAA\xD6\x3A\x60\xC6\x64\xA1\xE6\x02\x39\x58\x4E\xFD\xF2\x78\x08\x63\xB6\xD7\x7A\x96\x79\x62\x18\x39\xEE\x27\x8D\x3B\xA2\x3D\x48\x88\xDB\x43\xD6\x6A\x77\x20\x6A\x27\x39\x50\xE0\x02\x50\x19\xF2\x7A\xCF\x78\x23\x99\x01\xD4\xE5\xB1\xD1\x31\xE6\x6B\x84\xAF\xD0\x77\x41\x46\x85\xB0\x3B\xE6\x6A\x00\x0F\x3B\x7E\x95\x7F\x59\xA8\x22\xE8\x49\x49\x05\xC8\xCB\x6C\xEE\x47\xA7\x2D\xC9\x74\x5B\xEB\x8C\xD5\x99\xC2\xE2\x70\xDB\xEA\x87\x43\x84\x0E\x4F\x83\x1C\xA6\xEB\x1F\x22\x38\x17\x69\x9B\x72\x12\x95\x48\x71\xB2\x7B\x92\x73\x52\xAB\xE3\x1A\xA5\xD3\xF4\x44\x14\xBA\xC3\x35\xDA\x91\x6C\x7D\xB4\xC2\x00\x07\xD8\x0A\x51\xF1\x0D\x4C\xD9\x7A\xD1\x99\xE6\xA8\x8D\x0A\x80\xA8\x91\xDD\x8A\xA2\x6B\xF6\xDB\xB0\x3E\xC9\x71\xA9\xE0\x39\xC3\xA3\x58\x0D\x87\xD0\xB2\xA7\x9C\xB7\x69\x02\x03\x01\x00\x01\xA3\x82\x01\x1A\x30\x82\x01\x16\x30\x09\x06\x03\x55\x1D\x13\x04\x02\x30\x00\x30\x0B\x06\x03\x55\x1D\x0F\x04\x04\x03\x02\x03\xA8\x30\x1D\x06\x03\x55\x1D\x0E\x04\x16\x04\x14\x34\x91\x6E\x91\x32\xBF\x35\x25\x43\xCC\x28\x74\xEF\x82\xC2\x57\x92\x79\x13\x73\x30\x6D\x06\x03\x55\x1D\x23\x04\x66\x30\x64\x80\x14\x5D\xA7\xDD\x70\x06\x51\x32\x7E\xE7\xB6\x6D\xB3\xB5\xE5\xE0\x60\xEA\x2E\x4D\xEF\xA1\x49\xA4\x47\x30\x45\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x48\x31\x19\x30\x17\x06\x03\x55\x04\x0A\x13\x10\x4C\x69\x6E\x75\x78\x20\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x31\x1B\x30\x19\x06\x03\x55\x04\x03\x13\x12\x73\x74\x72\x6F\x6E\x67\x53\x77\x61\x6E\x20\x52\x6F\x6F\x74\x20\x43\x41\x82\x01\x00\x30\x1E\x06\x03\x55\x1D\x11\x04\x17\x30\x15\x82\x13\x6F\x63\x73\x70\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x30\x13\x06\x03\x55\x1D\x25\x04\x0C\x30\x0A\x06\x08\x2B\x06\x01\x05\x05\x07\x03\x09\x30\x39\x06\x03\x55\x1D\x1F\x04\x32\x30\x30\x30\x2E\xA0\x2C\xA0\x2A\x86\x28\x68\x74\x74\x70\x3A\x2F\x2F\x63\x72\x6C\x2E\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x6F\x72\x67\x2F\x73\x74\x72\x6F\x6E\x67\x73\x77\x61\x6E\x2E\x63\x72\x6C\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x0B\x05\x00\x03\x82\x01\x01\x00\x6D\x78\xD7\x66\x90\xA6\xEB\xDD\xB5\x09\x48\xA4\xDA\x27\xFA\xAC\xB1\xBC\x8F\x8C\xBE\xCC\x8C\x09\xA2\x40\x0D\x6C\x4A\xAE\x72\x22\x1E\xC8\xAF\x6D\xF1\x12\xAF\xD7\x40\x51\x79\xD4\xDD\xB2\x0C\xDB\x97\x84\xB6\x24\xD5\xF5\xA8\xBB\xC0\x4B\xF9\x7F\x71\xF7\xB0\x65\x42\x4A\x7D\xFE\x76\x7E\x05\xD2\x46\xB8\x7D\xB3\x39\x4C\x5C\xB1\xFA\xB9\xEE\x3B\x70\x33\x39\x57\x1A\xB9\x95\x51\x33\x00\x25\x1B\x4C\xAA\xB4\xA7\x55\xAF\x63\x6D\x6F\x88\x17\x6A\x7F\xB0\x97\xDE\x49\x14\x6A\x27\x6A\xB0\x42\x80\xD6\xA6\x9B\xEF\x04\x5E\x11\x7D\xD5\x8E\x54\x20\xA2\x76\xD4\x66\x58\xAC\x9C\x12\xD3\xF5\xCA\x54\x98\xCA\x21\xEC\xC1\x55\xA1\x2F\x68\x0B\x5D\x04\x50\xD2\x5E\x70\x25\xD8\x13\xD9\x44\x51\x0E\x8A\x42\x08\x18\x84\xE6\x61\xCE\x5A\x7D\x7B\x81\x35\x90\xC3\xD4\x9D\x19\xB6\x37\xEE\x8F\x63\x5C\xDA\xD8\xF0\x64\x60\x39\xEB\x9B\x1C\x54\x66\x75\x76\xB5\x0A\x58\xB9\x3F\x91\xE1\x21\x9C\xA0\x50\x15\x97\xB6\x7E\x41\xBC\xD0\xC4\x21\x4C\xF5\xD7\xF0\x13\xF8\x77\xE9\x74\xC4\x8A\x0E\x20\x17\x32\xAE\x38\xC2\xA5\xA8\x62\x85\x17\xB1\xA2\xD3\x22\x9F\x95\xB7\xA3\x4C" + +static gnutls_datum_t ocsp_resp1 = + { (unsigned char *) RESP1, sizeof(RESP1) - 1 }; + +#define RESP3 "\x30\x82\x01\xd3\x0a\x01\x00\xa0\x82\x01\xcc\x30\x82\x01\xc8\x06\x09\x2b\x06\x01\x05\x05\x07\x30\x01\x01\x04\x82\x01\xb9\x30\x82\x01\xb5\x30\x81\x9e\xa2\x16\x04\x14\x50\xea\x73\x89\xdb\x29\xfb\x10\x8f\x9e\xe5\x01\x20\xd4\xde\x79\x99\x48\x83\xf7\x18\x0f\x32\x30\x31\x34\x30\x39\x30\x34\x30\x35\x34\x39\x30\x30\x5a\x30\x73\x30\x71\x30\x49\x30\x09\x06\x05\x2b\x0e\x03\x02\x1a\x05\x00\x04\x14\xed\x48\xad\xdd\xcb\x7b\x00\xe2\x0e\x84\x2a\xa9\xb4\x09\xf1\xac\x30\x34\xcf\x96\x04\x14\x50\xea\x73\x89\xdb\x29\xfb\x10\x8f\x9e\xe5\x01\x20\xd4\xde\x79\x99\x48\x83\xf7\x02\x10\x02\x01\x48\x91\x5d\xfd\x5e\xb6\xe0\x02\x90\xa9\x67\xb0\xe4\x64\x80\x00\x18\x0f\x32\x30\x31\x34\x30\x39\x30\x34\x30\x35\x34\x39\x30\x30\x5a\xa0\x11\x18\x0f\x32\x30\x31\x34\x30\x39\x31\x31\x30\x36\x30\x34\x30\x30\x5a\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05\x05\x00\x03\x82\x01\x01\x00\x6e\x5e\x5e\x81\xff\x3f\x4d\xc7\x53\xc7\x1b\xf3\xd3\x1d\xdc\x9a\xc7\xce\x77\x2c\x67\x56\x13\x98\x91\x02\x01\x76\xdc\x48\xb2\x1f\x9b\x17\xea\xbf\x2c\x0a\xf5\x1d\x98\x90\x3c\x5f\x55\xc2\xff\x4b\x9a\xbc\xa6\x83\x9e\xab\x2b\xeb\x9d\x01\xea\x3b\x5f\xbe\x03\x29\x70\x63\x2a\xa4\x1d\xa8\xab\x69\xb2\x64\xba\x5d\x73\x91\x5c\x92\xf3\x69\xd4\xc9\x39\x9c\x7c\x7d\xa2\x47\x92\xc2\x56\xfe\xa1\x0d\x4a\x69\xff\xda\x48\xc5\x5e\xd8\xab\x39\x88\x6a\x06\xfa\x07\x57\xd6\x48\xb5\xce\xc9\x5f\xa5\x96\xfe\x37\x18\x5e\x7f\x35\x51\xc1\x9e\x79\x5a\x26\xba\x67\x67\x38\x2a\x80\x75\x42\x99\x68\x3e\xec\x2f\x7e\x2d\xa1\xa6\xbe\x9f\x01\x51\x22\x88\x3a\xc9\x9c\xed\x51\xef\x21\x66\x7e\xa9\xd0\x3f\x13\x9c\xbb\xd2\x94\x14\x6f\x4b\xd9\xc4\xf5\x2c\xf5\x7d\x07\x68\xf3\x51\xac\xda\xc2\x09\x66\xa9\x3d\xed\xad\x02\x4d\x9c\x11\x29\x1a\x54\xfb\x1e\x7e\x36\xf4\xbb\x0d\x08\x8c\x6a\x42\x08\x10\x29\x08\x7c\x56\x0b\x18\x47\xff\x87\x11\xfd\xb2\xfb\xc9\x22\x7f\xe3\x1f\x7b\xf9\x98\xaa\x3a\x32\xb6\x2f\x02\xba\xb6\xc1\xdc\xc3\x5d\xb5\x4b\xae\x5d\x29\x6a\x31\xde\xcd" +static gnutls_datum_t ocsp_resp2 = + { (unsigned char *) RESP3, sizeof(RESP3) - 1 }; + + +static void check_response(gnutls_session_t session, void *priv) +{ + int ret; + gnutls_datum_t resp; + gnutls_datum_t *ocsp = priv; + unsigned i; + + assert(ocsp != NULL); + + for (i=0;;i++) { + ret = gnutls_ocsp_status_request_get2(session, i, &resp); + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + break; + if (ret < 0) { + if (ocsp->size == 0) + return; + fail("no response was received: %s\n", gnutls_strerror(ret)); + } + + if (ocsp->size == 0) { + fail("not expected response, but received one\n"); + } + + if (resp.size != ocsp->size) { + fail("did not receive the expected response size for %d\n", i); + } + + if (memcmp(resp.data, ocsp->data, resp.size) != 0) { + fail("did not receive the expected response for %d\n", i); + } + } + + if (i != 1) { + fail("The number of OCSP responses received (%d) does not match the expected (%d)\n", i, 1); + } +} + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "|<%d>| %s", level, str); +} + +void doit(void) +{ + int ret; + gnutls_certificate_credentials_t xcred; + gnutls_certificate_credentials_t clicred; + const char *certfile1; + const char *certfile2; + const char *certfile3; + char certname1[TMPNAME_SIZE]; + char certname2[TMPNAME_SIZE]; + char certname3[TMPNAME_SIZE]; + FILE *fp; + unsigned index1, index2; /* indexes of certs */ + + global_init(); + gnutls_global_set_time_function(mytime); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + assert(gnutls_certificate_allocate_credentials(&xcred) >= 0); + assert(gnutls_certificate_allocate_credentials(&clicred) >= 0); + + gnutls_certificate_set_flags(clicred, GNUTLS_CERTIFICATE_API_V2); + + certfile1 = get_tmpname(certname1); + + /* set cert with localhost name */ + fp = fopen(certfile1, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(server_localhost_ca3_cert_chain_pem, 1, strlen(server_localhost_ca3_cert_chain_pem), fp)>0); + assert(fwrite(server_ca3_key_pem, 1, strlen((char*)server_ca3_key_pem), fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(xcred, certfile1, certfile1, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + + /* load client certificates */ + certfile2 = get_tmpname(certname2); + + fp = fopen(certfile2, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(cli_ca3_cert_pem, 1, strlen(cli_ca3_cert_pem), fp)>0); + assert(fwrite(cli_ca3_key_pem, 1, strlen(cli_ca3_key_pem), fp)>0); + fclose(fp); + ret = gnutls_certificate_set_x509_key_file2(clicred, certfile2, certfile2, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + index1 = ret; + + + certfile3 = get_tmpname(certname3); + fp = fopen(certfile3, "wb"); + if (fp == NULL) + fail("error in fopen\n"); + assert(fwrite(cert_pem, 1, strlen((char*)cert_pem), fp)>0); + assert(fwrite(key_pem, 1, strlen((char*)key_pem), fp)>0); + fclose(fp); + + ret = gnutls_certificate_set_x509_key_file2(clicred, certfile3, certfile3, + GNUTLS_X509_FMT_PEM, NULL, 0); + if (ret < 0) + fail("set_x509_key_file failed: %s\n", gnutls_strerror(ret)); + index2 = ret; + + + gnutls_certificate_set_flags(clicred, GNUTLS_CERTIFICATE_SKIP_OCSP_RESPONSE_CHECK); + /* set OCSP response1 */ + ret = gnutls_certificate_set_ocsp_status_request_mem(clicred, &ocsp_resp2, index2, GNUTLS_X509_FMT_DER); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* set OCSP response2 */ + ret = gnutls_certificate_set_ocsp_status_request_mem(clicred, &ocsp_resp1, index1, GNUTLS_X509_FMT_DER); + if (ret < 0) + fail("ocsp file set failed: %s\n", gnutls_strerror(ret)); + + /* make sure that our invalid OCSP responses are not considered in verification + */ + gnutls_certificate_set_verify_flags(clicred, GNUTLS_VERIFY_DISABLE_CRL_CHECKS); + if (gnutls_certificate_get_verify_flags(clicred) != GNUTLS_VERIFY_DISABLE_CRL_CHECKS) + fail("error in gnutls_certificate_set_verify_flags\n"); + + ret = gnutls_certificate_set_x509_trust_mem(clicred, &ca3_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("error in setting trust cert: %s\n", gnutls_strerror(ret)); + } + + ret = gnutls_certificate_set_x509_trust_mem(xcred, &subca3_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fail("error in setting trust cert: %s\n", gnutls_strerror(ret)); + } + + _test_cli_serv(xcred, clicred, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", + "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", + "localhost", + &ocsp_resp1, NULL, check_response, + 0, 1, 0, 0); + + gnutls_certificate_free_credentials(xcred); + gnutls_certificate_free_credentials(clicred); + gnutls_global_deinit(); + remove(certfile1); + remove(certfile2); + remove(certfile3); +} + +#else +void doit(void) +{ + exit(77); +} +#endif diff --git a/tests/tls13/post-handshake-with-cert-auto.c b/tests/tls13/post-handshake-with-cert-auto.c new file mode 100644 index 0000000000..ed6776b0f0 --- /dev/null +++ b/tests/tls13/post-handshake-with-cert-auto.c @@ -0,0 +1,366 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "tls13/ext-parse.h" +#include "utils.h" + +#define MAX_AUTHS 4 + +/* This program tests whether the Post Handshake Auth extension is + * present in the client hello, and whether it is missing from server + * hello. In addition it contains basic functionality test for + * post handshake authentication. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define MAX_BUF 1024 +#define MAX_APP_DATA 3 + +static void client(int fd, unsigned send_cert, unsigned max_auths) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + char buf[64]; + unsigned i; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + + /* Initialize TLS session + */ + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_POST_HANDSHAKE_AUTH|GNUTLS_AUTO_REAUTH)>=0); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.0", NULL); + if (ret < 0) + fail("cannot set TLS 1.3 priorities\n"); + + + if (send_cert) { + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &cli_ca3_cert, + &cli_ca3_key, + GNUTLS_X509_FMT_PEM)>=0); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (debug) + success("client handshake completed\n"); + + gnutls_record_set_timeout(session, 20 * 1000); + + for (i=0;isize != 0) { + fail("error in extension length: %d\n", (int)msg->size); + } +} + +static int hellos_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + if (htype == GNUTLS_HANDSHAKE_SERVER_HELLO && post == GNUTLS_HOOK_POST) { + if (find_server_extension(msg, TLS_EXT_POST_HANDSHAKE, NULL, NULL)) { + fail("Post handshake extension seen in server hello!\n"); + } + server_hello_ok = 1; + + return GNUTLS_E_INTERRUPTED; + } + + if (htype != GNUTLS_HANDSHAKE_CLIENT_HELLO || post != GNUTLS_HOOK_PRE) + return 0; + + if (find_client_extension(msg, TLS_EXT_POST_HANDSHAKE, NULL, parse_ext)) + client_hello_ok = 1; + else + fail("Post handshake extension NOT seen in client hello!\n"); + + return 0; +} + +static void server(int fd, int err, int type, unsigned max_auths) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + unsigned i, retries; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(6); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER|GNUTLS_POST_HANDSHAKE_AUTH); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + hellos_callback); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:+VERS-TLS1.3", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (!(gnutls_session_get_flags(session) & GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH)) { + fail("server: session flags did not contain GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH\n"); + } + + + if (client_hello_ok == 0) { + fail("server: did not verify the client hello\n"); + } + + if (server_hello_ok == 0) { + fail("server: did not verify the server hello contents\n"); + } + + if (debug) + success("server handshake completed\n"); + + gnutls_certificate_server_set_request(session, type); + + /* i = 0 */ + /* ask peer for re-authentication */ + retries = 0; + do { + do { + ret = gnutls_reauth(session, 0); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret == GNUTLS_E_GOT_APPLICATION_DATA) { + int ret2; + do { + ret2 = gnutls_record_recv(session, buffer, sizeof(buffer)); + } while (ret2 == GNUTLS_E_AGAIN || ret2 == GNUTLS_E_INTERRUPTED); + + if (ret2 < 0) + fail("error receiving app data: %s\n", gnutls_strerror(ret2)); + + /* sender memsets the message with the retry attempt */ + assert((uint8_t)buffer[0] == retries); + assert(retries < MAX_APP_DATA); + } + + retries++; + } while (ret == GNUTLS_E_GOT_APPLICATION_DATA); + + if (err) { + if (ret != err) + fail("server: expected error %s, got: %s\n", gnutls_strerror(err), + gnutls_strerror(ret)); + } else if (ret != 0) + fail("server: gnutls_reauth did not succeed as expected: %s\n", gnutls_strerror(ret)); + + + for (i=1;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "tls13/ext-parse.h" +#include "pkcs11/softhsm.h" +#include "utils.h" + +/* This program tests whether the Post Handshake Auth extension is + * present in the client hello, and whether it is missing from server + * hello. In addition it contains basic functionality test for + * post handshake authentication. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define MAX_BUF 1024 + +#define P11LIB "libpkcs11mock2.so" + +#define PIN "1234" + +#define CONFIG_NAME "softhsm-post-handshake-with-cert-pkcs11" +#define CONFIG CONFIG_NAME".config" + +static +int pin_func(void *userdata, int attempt, const char *url, const char *label, + unsigned flags, char *pin, size_t pin_max) +{ + if (attempt == 0) { + strcpy(pin, PIN); + return 0; + } + return -1; +} + +static void client(int fd, int err) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + gnutls_x509_crt_t crt; + gnutls_x509_privkey_t key; + gnutls_datum_t tmp; + const char *lib; + char buffer[MAX_BUF + 1]; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + /* point to SoftHSM token that libpkcs11mock2.so internally uses */ + setenv(SOFTHSM_ENV, CONFIG, 1); + + gnutls_pkcs11_set_pin_function(pin_func, NULL); + + lib = getenv("P11MOCKLIB2"); + if (lib == NULL) + lib = P11LIB; + + ret = gnutls_pkcs11_init(GNUTLS_PKCS11_FLAG_MANUAL, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_pkcs11_add_provider(lib, NULL); + if (ret != 0) { + fail("%d: %s\n", ret, gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_x509_crt_init(&crt); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_crt_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_x509_crt_import(crt, &cli_ca3_cert, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_crt_import: %s\n", gnutls_strerror(ret)); + exit(1); + } + + if (debug) { + gnutls_x509_crt_print(crt, GNUTLS_CRT_PRINT_ONELINE, &tmp); + + printf("\tCertificate: %.*s\n", tmp.size, tmp.data); + gnutls_free(tmp.data); + } + + ret = gnutls_x509_privkey_init(&key); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_privkey_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_x509_privkey_import(key, &cli_ca3_key, GNUTLS_X509_FMT_PEM); + if (ret < 0) { + fprintf(stderr, + "gnutls_x509_privkey_import: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + /* initialize softhsm token */ + ret = gnutls_pkcs11_token_init(SOFTHSM_URL, PIN, "test"); + if (ret < 0) { + fail("gnutls_pkcs11_token_init: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_pkcs11_token_set_pin(SOFTHSM_URL, NULL, PIN, + GNUTLS_PIN_USER); + if (ret < 0) { + fail("gnutls_pkcs11_token_set_pin: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = gnutls_pkcs11_copy_x509_crt(SOFTHSM_URL, crt, "cert", + GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE | + GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + fail("gnutls_pkcs11_copy_x509_crt: %s\n", gnutls_strerror(ret)); + exit(1); + } + + ret = + gnutls_pkcs11_copy_x509_privkey(SOFTHSM_URL, key, "cert", + GNUTLS_KEY_DIGITAL_SIGNATURE | + GNUTLS_KEY_KEY_ENCIPHERMENT, + GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE + | + GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE + | GNUTLS_PKCS11_OBJ_FLAG_LOGIN); + if (ret < 0) { + fail("gnutls_pkcs11_copy_x509_privkey: %s\n", + gnutls_strerror(ret)); + exit(1); + } + + gnutls_x509_crt_deinit(crt); + gnutls_x509_privkey_deinit(key); + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + + /* Initialize TLS session + */ + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_POST_HANDSHAKE_AUTH|GNUTLS_AUTO_REAUTH)>=0); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:-SIGN-RSA-SHA256", NULL); + if (ret < 0) + fail("cannot set TLS 1.3 priorities\n"); + + + assert(gnutls_certificate_set_x509_key_file(x509_cred, + SOFTHSM_URL + ";object=cert;object-type=cert", + SOFTHSM_URL + ";object=cert;object-type=private;pin-value=" + PIN, + GNUTLS_X509_FMT_DER)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (debug) + success("client handshake completed\n"); + + gnutls_record_set_timeout(session, 20 * 1000); + + if (debug) + success("waiting for auth\n"); + + do { + ret = gnutls_record_recv(session, buffer, sizeof(buffer)); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (err) { + if (ret != err) + fail("client: expected error %s, got: %s\n", gnutls_strerror(err), + gnutls_strerror(ret)); + } else if (ret < 0) + fail("client: gnutls_record_recv did not succeed as expected: %s\n", gnutls_strerror(ret)); + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_WR); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +static unsigned client_hello_ok = 0; +static unsigned server_hello_ok = 0; + +#define TLS_EXT_POST_HANDSHAKE 49 + +static void parse_ext(void *priv, gnutls_datum_t *msg) +{ + if (msg->size != 0) { + fail("error in extension length: %d\n", (int)msg->size); + } +} + +static int hellos_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + if (htype == GNUTLS_HANDSHAKE_SERVER_HELLO && post == GNUTLS_HOOK_POST) { + if (find_server_extension(msg, TLS_EXT_POST_HANDSHAKE, NULL, NULL)) { + fail("Post handshake extension seen in server hello!\n"); + } + server_hello_ok = 1; + + return GNUTLS_E_INTERRUPTED; + } + + if (htype != GNUTLS_HANDSHAKE_CLIENT_HELLO || post != GNUTLS_HOOK_PRE) + return 0; + + if (find_client_extension(msg, TLS_EXT_POST_HANDSHAKE, NULL, parse_ext)) + client_hello_ok = 1; + else + fail("Post handshake extension NOT seen in client hello!\n"); + + return 0; +} + +static void server(int fd, int err, int type) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(6); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER|GNUTLS_POST_HANDSHAKE_AUTH); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + hellos_callback); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (!(gnutls_session_get_flags(session) & GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH)) { + fail("server: session flags did not contain GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH\n"); + } + + + if (client_hello_ok == 0) { + fail("server: did not verify the client hello\n"); + } + + if (server_hello_ok == 0) { + fail("server: did not verify the server hello contents\n"); + } + + if (debug) + success("server handshake completed\n"); + + gnutls_certificate_server_set_request(session, type); + + /* ask peer for re-authentication */ + do { + ret = gnutls_reauth(session, 0); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (err) { + if (ret != err) + fail("server: expected error %s, got: %s\n", gnutls_strerror(err), + gnutls_strerror(ret)); + } else if (ret != 0) + fail("server: gnutls_reauth did not succeed as expected: %s\n", gnutls_strerror(ret)); + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_RDWR); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +static +void start(const char *name, int err, int cli_err, int type) +{ + int fd[2]; + int ret; + pid_t child; + int status = 0; + + success("testing %s\n", name); + + client_hello_ok = 0; + server_hello_ok = 0; + + signal(SIGCHLD, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], err, type); + kill(child, SIGTERM); + wait(&status); + check_wait_status(status); + } else { + close(fd[0]); + client(fd[1], cli_err); + exit(0); + } + +} + +void doit(void) +{ + const char *bin; + char buf[128]; + + /* check if softhsm module is loadable */ + (void) softhsm_lib(); + + /* initialize SoftHSM token that libpkcs11mock2.so internally uses */ + bin = softhsm_bin(); + + set_softhsm_conf(CONFIG); + snprintf(buf, sizeof(buf), + "%s --init-token --slot 0 --label test --so-pin " PIN " --pin " + PIN, bin); + system(buf); + + start("reauth-require", GNUTLS_E_CERTIFICATE_REQUIRED, GNUTLS_E_SUCCESS, GNUTLS_CERT_REQUIRE); + start("reauth-request", 0, GNUTLS_E_SUCCESS, GNUTLS_CERT_REQUEST); +} +#endif /* _WIN32 */ diff --git a/tests/tls13/post-handshake-with-cert-ticket.c b/tests/tls13/post-handshake-with-cert-ticket.c new file mode 100644 index 0000000000..bcf331e0f0 --- /dev/null +++ b/tests/tls13/post-handshake-with-cert-ticket.c @@ -0,0 +1,385 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../lib/handshake-defs.h" +#include "cert-common.h" +#include "utils.h" + +/* This program tests whether the certificate seen in Post Handshake Auth + * is found in a resumed session under TLS 1.3. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +static unsigned tickets_seen = 0; +static int ticket_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + gnutls_datum *d; + static int counter = 0; + int ret; + + assert(htype == GNUTLS_HANDSHAKE_NEW_SESSION_TICKET); + + counter++; + if (counter <= TLS13_TICKETS_TO_SEND) /* ignore the default tickets sent */ + return 0; + + d = gnutls_session_get_ptr(session); + + if (post == GNUTLS_HOOK_POST) { + tickets_seen++; + if (d->data) + gnutls_free(d->data); + ret = gnutls_session_get_data2(session, d); + assert(ret >= 0); + assert(d->size > 4); + + return 0; + } + + return 0; +} + +static void client(int fd, unsigned tickets) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + char buf[64]; + unsigned try = 0; + gnutls_datum_t session_data = {NULL, 0}; + + global_init(); + tickets_seen = 0; + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + + retry: + /* Initialize TLS session + */ + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_POST_HANDSHAKE_AUTH)>=0); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.0", NULL); + if (ret < 0) + fail("cannot set TLS 1.3 priorities\n"); + + + if (try == 0) { + gnutls_session_set_ptr(session, &session_data); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_NEW_SESSION_TICKET, + GNUTLS_HOOK_BOTH, + ticket_callback); + } else { + assert(gnutls_session_set_data(session, session_data.data, session_data.size) >= 0); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (try == 0) { + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &cli_ca3_cert, + &cli_ca3_key, + GNUTLS_X509_FMT_PEM)>=0); + + do { + ret = gnutls_record_recv(session, buf, sizeof(buf)); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret != GNUTLS_E_REAUTH_REQUEST) { + fail("recv: unexpected error: %s\n", gnutls_strerror(ret)); + } + + if (debug) + success("received reauth request\n"); + do { + ret = gnutls_reauth(session, 0); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret != 0) + fail("client: gnutls_reauth did not succeed as expected: %s\n", gnutls_strerror(ret)); + } else { + assert(gnutls_session_is_resumed(session) != 0); + } + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_RDWR); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret != 0) { + fail("error in recv: %s\n", gnutls_strerror(ret)); + } + + assert(tickets_seen == tickets+1); + + gnutls_deinit(session); + + if (try == 0) { + try++; + goto retry; + } + + close(fd); + gnutls_free(session_data.data); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +static void compare(const gnutls_datum_t *der, const void *ipem) +{ + gnutls_datum_t pem = {(void*)ipem, strlen((char*)ipem)}; + gnutls_datum_t new_der; + int ret; + + ret = gnutls_pem_base64_decode2("CERTIFICATE", &pem, &new_der); + if (ret < 0) { + fail("error: %s\n", gnutls_strerror(ret)); + } + + if (der->size != new_der.size || memcmp(der->data, new_der.data, der->size) != 0) { + fail("error in %d: %s\n", __LINE__, "cert don't match"); + exit(1); + } + gnutls_free(new_der.data); + return; +} + +static void server(int fd, unsigned tickets) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + unsigned clist_size; + gnutls_datum_t skey; + const gnutls_datum_t *clist; + + /* this must be called once in the program + */ + global_init(); + + assert(gnutls_session_ticket_key_generate(&skey)>=0); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + assert(gnutls_init(&session, GNUTLS_SERVER|GNUTLS_POST_HANDSHAKE_AUTH)>=0); + + assert(gnutls_session_ticket_enable_server(session, &skey) >= 0); + gnutls_handshake_set_timeout(session, 20 * 1000); + + assert(gnutls_priority_set_direct(session, "NORMAL:+VERS-TLS1.3", NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + gnutls_certificate_server_set_request(session, GNUTLS_CERT_REQUIRE); + + /* ask peer for re-authentication */ + do { + ret = gnutls_reauth(session, 0); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret != 0) + fail("server: gnutls_reauth did not succeed as expected: %s\n", gnutls_strerror(ret)); + + if (tickets == 0) { + /* test whether the expected error code would be returned */ + ret = gnutls_session_ticket_send(session, 0, 0); + assert(ret == GNUTLS_E_INVALID_REQUEST); + } else { + /* send tickets after re-auth */ + do { + ret = gnutls_session_ticket_send(session, tickets, 0); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + } + + do { + ret = gnutls_bye(session, GNUTLS_SHUT_RDWR); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + gnutls_deinit(session); + + /* resume session + */ + assert(gnutls_init(&session, GNUTLS_SERVER|GNUTLS_POST_HANDSHAKE_AUTH)>=0); + + assert(gnutls_session_ticket_enable_server(session, &skey) >= 0); + gnutls_handshake_set_timeout(session, 20 * 1000); + assert(gnutls_priority_set_direct(session, "NORMAL:+VERS-TLS1.3", NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + assert(gnutls_session_is_resumed(session) != 0); + + /* check if cert is visible */ + if (tickets > 0) { + clist = gnutls_certificate_get_peers(session, &clist_size); + assert(clist != NULL); + assert(clist_size > 0); + + compare(&clist[0], cli_ca3_cert.data); + } + + gnutls_bye(session, GNUTLS_SHUT_RDWR); + gnutls_deinit(session); + + gnutls_free(skey.data); + close(fd); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +static void start(const char *name, unsigned tickets) +{ + int fd[2]; + int ret; + pid_t child; + + success("testing: %s\n", name); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0], tickets); + kill(child, SIGTERM); + } else { + close(fd[0]); + client(fd[1], tickets); + exit(0); + } + +} + +void doit(void) +{ + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + start("no ticket", 0); + start("single ticket", 1); + start("8 tickets", 8); + start("16 tickets", 16); +} +#endif /* _WIN32 */ diff --git a/tests/tls13/post-handshake-with-cert.c b/tests/tls13/post-handshake-with-cert.c new file mode 100644 index 0000000000..72863e38a5 --- /dev/null +++ b/tests/tls13/post-handshake-with-cert.c @@ -0,0 +1,383 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "tls13/ext-parse.h" +#include "utils.h" + +#define MAX_AUTHS 4 + +/* This program tests whether the Post Handshake Auth extension is + * present in the client hello, and whether it is missing from server + * hello. In addition it contains basic functionality test for + * post handshake authentication. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define MAX_BUF 1024 +#define MAX_APP_DATA 3 + +static void client(int fd, unsigned send_cert, unsigned max_auths) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + char buf[64]; + unsigned i, j; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + + /* Initialize TLS session + */ + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_POST_HANDSHAKE_AUTH)>=0); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.0", NULL); + if (ret < 0) + fail("cannot set TLS 1.3 priorities\n"); + + + if (send_cert) { + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &cli_ca3_cert, + &cli_ca3_key, + GNUTLS_X509_FMT_PEM)>=0); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (debug) + success("client handshake completed\n"); + + gnutls_record_set_timeout(session, 20 * 1000); + + for (i=0;i=0); + } + } + + if (debug) + success("received reauth request\n"); + do { + ret = gnutls_reauth(session, 0); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret != 0) + fail("client: gnutls_reauth did not succeed as expected: %s\n", gnutls_strerror(ret)); + } + + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +static unsigned client_hello_ok = 0; +static unsigned server_hello_ok = 0; + +#define TLS_EXT_POST_HANDSHAKE 49 + +static void parse_ext(void *priv, gnutls_datum_t *msg) +{ + if (msg->size != 0) { + fail("error in extension length: %d\n", (int)msg->size); + } +} + +static int hellos_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + if (htype == GNUTLS_HANDSHAKE_SERVER_HELLO && post == GNUTLS_HOOK_POST) { + if (find_server_extension(msg, TLS_EXT_POST_HANDSHAKE, NULL, NULL)) { + fail("Post handshake extension seen in server hello!\n"); + } + server_hello_ok = 1; + + return GNUTLS_E_INTERRUPTED; + } + + if (htype != GNUTLS_HANDSHAKE_CLIENT_HELLO || post != GNUTLS_HOOK_PRE) + return 0; + + if (find_client_extension(msg, TLS_EXT_POST_HANDSHAKE, NULL, parse_ext)) + client_hello_ok = 1; + else + fail("Post handshake extension NOT seen in client hello!\n"); + + return 0; +} + +static void server(int fd, int err, int type, unsigned max_auths) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + unsigned i, retries; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(6); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER|GNUTLS_POST_HANDSHAKE_AUTH); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + hellos_callback); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:+VERS-TLS1.3", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (!(gnutls_session_get_flags(session) & GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH)) { + fail("server: session flags did not contain GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH\n"); + } + + + if (client_hello_ok == 0) { + fail("server: did not verify the client hello\n"); + } + + if (server_hello_ok == 0) { + fail("server: did not verify the server hello contents\n"); + } + + if (debug) + success("server handshake completed\n"); + + gnutls_certificate_server_set_request(session, type); + + /* i = 0 */ + /* ask peer for re-authentication */ + retries = 0; + do { + do { + ret = gnutls_reauth(session, 0); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret == GNUTLS_E_GOT_APPLICATION_DATA) { + int ret2; + do { + ret2 = gnutls_record_recv(session, buffer, sizeof(buffer)); + } while (ret2 == GNUTLS_E_AGAIN || ret2 == GNUTLS_E_INTERRUPTED); + + if (ret2 < 0) + fail("error receiving app data: %s\n", gnutls_strerror(ret2)); + + /* sender memsets the message with the retry attempt */ + assert((uint8_t)buffer[0] == retries); + assert(retries < MAX_APP_DATA); + } + + retries++; + } while (ret == GNUTLS_E_GOT_APPLICATION_DATA); + + if (err) { + if (ret != err) + fail("server: expected error %s, got: %s\n", gnutls_strerror(err), + gnutls_strerror(ret)); + } else if (ret != 0) + fail("server: gnutls_reauth did not succeed as expected: %s\n", gnutls_strerror(ret)); + + + for (i=1;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "tls13/ext-parse.h" +#include "utils.h" + +#define MAX_AUTHS 4 + +/* This program tests whether the Post Handshake Auth would work + * under PSK authentication. */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define MAX_BUF 1024 + +static void client(int fd, unsigned send_cert, unsigned max_auths) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_psk_client_credentials_t pskcred; + const gnutls_datum_t key = { (void *) "DEADBEEF", 8 }; + gnutls_session_t session; + char buf[64]; + unsigned i; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + assert(gnutls_psk_allocate_client_credentials(&pskcred)>=0); + assert(gnutls_psk_set_client_credentials(pskcred, "test", &key, + GNUTLS_PSK_KEY_HEX)>=0); + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + + /* Initialize TLS session + */ + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_POST_HANDSHAKE_AUTH)>=0); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.0:+ECDHE-PSK:+PSK", NULL); + if (ret < 0) + fail("cannot set TLS 1.3 priorities\n"); + + + if (send_cert) { + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &cli_ca3_cert, + &cli_ca3_key, + GNUTLS_X509_FMT_PEM)>=0); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + gnutls_credentials_set(session, GNUTLS_CRD_PSK, pskcred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (debug) + success("client handshake completed\n"); + + assert(gnutls_kx_get(session) == GNUTLS_KX_ECDHE_PSK); + + gnutls_record_set_timeout(session, 20 * 1000); + + for (i=0;isize != 0) { + fail("error in extension length: %d\n", (int)msg->size); + } +} + +static int hellos_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + if (htype == GNUTLS_HANDSHAKE_SERVER_HELLO && post == GNUTLS_HOOK_POST) { + if (find_server_extension(msg, TLS_EXT_POST_HANDSHAKE, NULL, NULL)) { + fail("Post handshake extension seen in server hello!\n"); + } + server_hello_ok = 1; + + return GNUTLS_E_INTERRUPTED; + } + + if (htype != GNUTLS_HANDSHAKE_CLIENT_HELLO || post != GNUTLS_HOOK_PRE) + return 0; + + if (find_client_extension(msg, TLS_EXT_POST_HANDSHAKE, NULL, parse_ext)) + client_hello_ok = 1; + else + fail("Post handshake extension NOT seen in client hello!\n"); + + return 0; +} + +static int +pskfunc(gnutls_session_t session, const char *username, + gnutls_datum_t * key) +{ + if (debug) + printf("psk: username %s\n", username); + key->data = gnutls_malloc(4); + key->data[0] = 0xDE; + key->data[1] = 0xAD; + key->data[2] = 0xBE; + key->data[3] = 0xEF; + key->size = 4; + return 0; +} + +static void server(int fd, int err, int type, unsigned max_auths) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + gnutls_psk_server_credentials_t server_pskcred; + unsigned i; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(6); + } + + assert(gnutls_psk_allocate_server_credentials(&server_pskcred)>=0); + gnutls_psk_set_server_credentials_function(server_pskcred, + pskfunc); + + assert(gnutls_certificate_allocate_credentials(&x509_cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM) >= 0); + + assert(gnutls_init(&session, GNUTLS_SERVER|GNUTLS_POST_HANDSHAKE_AUTH)>=0); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + hellos_callback); + + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+PSK:+ECDHE-PSK", NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_PSK, server_pskcred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != 0) + fail("handshake failed: %s\n", gnutls_strerror(ret)); + + if (!(gnutls_session_get_flags(session) & GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH)) { + fail("server: session flags did not contain GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH\n"); + } + + + if (client_hello_ok == 0) { + fail("server: did not verify the client hello\n"); + } + + if (server_hello_ok == 0) { + fail("server: did not verify the server hello contents\n"); + } + + if (debug) + success("server handshake completed\n"); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + gnutls_certificate_server_set_request(session, type); + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "tls13/ext-parse.h" +#include "utils.h" + +/* This program tests whether the Post Handshake Auth extension is missing + * from both hellos, when not enabled by client. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#define MAX_BUF 1024 + +static void client(int fd) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + assert(gnutls_certificate_set_x509_key_mem(x509_cred, &cli_ca3_cert, + &cli_ca3_key, + GNUTLS_X509_FMT_PEM) >= 0); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.0", NULL); + if (ret < 0) + fail("cannot set TLS 1.3 priorities\n"); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + /* try if gnutls_reauth() would fail as expected */ + ret = gnutls_reauth(session, 0); + if (ret != GNUTLS_E_INVALID_REQUEST) + fail("server: gnutls_reauth did not fail as expected: %s", gnutls_strerror(ret)); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +static unsigned server_hello_ok = 0; + +#define TLS_EXT_POST_HANDSHAKE 49 + +static int hellos_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + if (htype == GNUTLS_HANDSHAKE_SERVER_HELLO && post == GNUTLS_HOOK_POST) { + if (find_server_extension(msg, TLS_EXT_POST_HANDSHAKE, NULL, NULL)) { + fail("Post handshake extension seen in server hello!\n"); + } + server_hello_ok = 1; + + return GNUTLS_E_INTERRUPTED; + } + + if (htype != GNUTLS_HANDSHAKE_CLIENT_HELLO || post != GNUTLS_HOOK_PRE) + return 0; + + if (find_client_extension(msg, TLS_EXT_POST_HANDSHAKE, NULL, NULL)) + fail("Post handshake extension seen in client hello with no cert!\n"); + + return 0; +} + +static void server(int fd) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + hellos_callback); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:+VERS-TLS1.3", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + if (ret == GNUTLS_E_INTERRUPTED) { /* expected */ + break; + } + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if ((gnutls_session_get_flags(session) & GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH)) { + fail("server: session flags did contain GNUTLS_SFLAGS_POST_HANDSHAKE_AUTH\n"); + } + + if (server_hello_ok == 0) { + fail("server: did not verify the server hello contents\n"); + } + + /* try if gnutls_reauth() would fail as expected */ + ret = gnutls_reauth(session, 0); + if (ret != GNUTLS_E_INVALID_REQUEST) + fail("server: gnutls_reauth did not fail as expected: %s", gnutls_strerror(ret)); + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +void doit(void) +{ + int fd[2]; + int ret; + pid_t child; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0]); + kill(child, SIGTERM); + } else { + close(fd[0]); + client(fd[1]); + exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/prf-early.c b/tests/tls13/prf-early.c new file mode 100644 index 0000000000..414b1db5ea --- /dev/null +++ b/tests/tls13/prf-early.c @@ -0,0 +1,467 @@ +/* + * Copyright (C) 2015-2019 Red Hat, Inc. + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#if !defined(__linux__) || !defined(__GNUC__) + +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" +#include "virt-time.h" + +static void terminate(void); + +#define SESSIONS 2 +#define MAX_BUF 5*1024 +#define MSG "Hello TLS" + +extern unsigned int _gnutls_global_version; + +/* This program tests whether the gnutls_prf() works as + * expected. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +/* These are global */ +static pid_t child; + +static const +gnutls_datum_t hrnd = {(void*)"\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 32}; +static const +gnutls_datum_t hsrnd = {(void*)"\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 32}; + +static int gnutls_rnd_works; + +int __attribute__ ((visibility ("protected"))) +gnutls_rnd(gnutls_rnd_level_t level, void *data, size_t len) +{ + gnutls_rnd_works = 1; + + memset(data, 0xff, len); + + /* Flip the first byte to avoid infinite loop in the RSA + * blinding code of Nettle */ + if (len > 0) + memset(data, 0x0, 1); + return 0; +} + +static gnutls_datum_t session_ticket_key = { NULL, 0 }; + +static void dump(const char *name, const uint8_t *data, unsigned data_size) +{ + unsigned i; + + fprintf(stderr, "%s", name); + for (i=0;i 0) { + gnutls_session_set_data(session, session_data.data, + session_data.size); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_CLIENT_HELLO, + GNUTLS_HOOK_POST, + handshake_callback); + } + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("client: Handshake failed: %s\n", strerror(ret)); + exit(1); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (debug) + success("client: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + ret = gnutls_cipher_get(session); + if (ret != GNUTLS_CIPHER_AES_256_GCM) { + fprintf(stderr, "negotiated unexpected cipher: %s\n", gnutls_cipher_get_name(ret)); + exit(1); + } + + ret = gnutls_mac_get(session); + if (ret != GNUTLS_MAC_AEAD) { + fprintf(stderr, "negotiated unexpected mac: %s\n", gnutls_mac_get_name(ret)); + exit(1); + } + + if (t == 0) { + /* get the session data size */ + ret = + gnutls_session_get_data2(session, + &session_data); + if (ret < 0) + fail("Getting resume data failed\n"); + + if (handshake_callback_called != 0) + fail("client: handshake callback is called\n"); + } else { + if (handshake_callback_called != t) + fail("client: handshake callback is not called\n"); + } + + gnutls_record_send(session, MSG, strlen(MSG)); + + do { + ret = gnutls_record_recv(session, buffer, MAX_BUF); + } while (ret == GNUTLS_E_AGAIN); + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + } + + if (debug) { + printf("- Received %d bytes: ", ret); + for (ii = 0; ii < ret; ii++) { + fputc(buffer[ii], stdout); + } + fputs("\n", stdout); + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sds[t]); + + gnutls_deinit(session); + } + + gnutls_free(session_data.data); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); +} + +static void terminate(void) +{ + int status = 0; + + kill(child, SIGTERM); + wait(&status); + exit(1); +} + +static void server(int sds[]) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t serverx509cred; + int t; + char buffer[MAX_BUF + 1]; + + /* this must be called once in the program + */ + global_init(); + + virt_time_init(); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&serverx509cred); + + gnutls_session_ticket_key_generate(&session_ticket_key); + + for (t = 0; t < SESSIONS; t++) { + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_session_ticket_enable_server(session, + &session_ticket_key); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + ret = gnutls_priority_set_direct(session, + "NORMAL:-VERS-ALL:+VERS-TLS1.3:-KX-ALL:-SIGN-ALL:+SIGN-RSA-PSS-RSAE-SHA384:-GROUP-ALL:+GROUP-SECP256R1", NULL); + if (ret < 0) { + fail("server: priority set failed (%s)\n\n", + gnutls_strerror(ret)); + terminate(); + } + + gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM); + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + gnutls_handshake_set_random(session, &hsrnd); + gnutls_transport_set_int(session, sds[t]); + + if (t > 0) { + if (!gnutls_rnd_works) { + fprintf(stderr, "gnutls_rnd() could not be overridden, skipping prf checks see #584\n"); + exit(77); + } else { + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_CLIENT_HELLO, + GNUTLS_HOOK_POST, + handshake_callback); + } + } + + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + if (ret < 0) { + close(sds[t]); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + terminate(); + } + if (debug) + success("server: Handshake was completed\n"); + + if (debug) + success("server: TLS version is: %s\n", + gnutls_protocol_get_name + (gnutls_protocol_get_version(session))); + + if (t == 0) { + if (handshake_callback_called != 0) + fail("server: handshake callback is called\n"); + } else { + if (handshake_callback_called != t) + fail("server: handshake callback is not called\n"); + } + + for (;;) { + memset(buffer, 0, MAX_BUF + 1); + ret = gnutls_record_recv(session, buffer, MAX_BUF); + + if (ret == 0) { + if (debug) + success + ("server: Peer has closed the GnuTLS connection\n"); + break; + } else if (ret < 0) { + kill(child, SIGTERM); + fail("server: Received corrupted data(%d). Closing...\n", ret); + break; + } else if (ret > 0) { + /* echo data back to the client + */ + gnutls_record_send(session, buffer, + strlen(buffer)); + } + } + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sds[t]); + gnutls_deinit(session); + } + + gnutls_certificate_free_credentials(serverx509cred); + + gnutls_free(session_ticket_key.data); + session_ticket_key.data = NULL; + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +void doit(void) +{ + int client_sds[SESSIONS], server_sds[SESSIONS]; + int i; + int ret; + + _gnutls_global_version = 0x030607; + signal(SIGPIPE, SIG_IGN); + + for (i = 0; i < SESSIONS; i++) { + int sockets[2]; + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (ret == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + server_sds[i] = sockets[0]; + client_sds[i] = sockets[1]; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + int status = 0; + /* parent */ + + for (i = 0; i < SESSIONS; i++) + close(client_sds[i]); + server(server_sds); + wait(&status); + check_wait_status(status); + } else { + for (i = 0; i < SESSIONS; i++) + close(server_sds[i]); + client(client_sds); + exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/prf-early.sh b/tests/tls13/prf-early.sh new file mode 100755 index 0000000000..b19da4cb65 --- /dev/null +++ b/tests/tls13/prf-early.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +# Copyright (C) 2019 Daiki Ueno +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see +# + +srcdir="${srcdir:-.}" +builddir="${builddir:-.}" + +. "${srcdir}/scripts/common.sh" + +check_for_datefudge + +datefudge -s 2019-04-12 "${builddir}/tls13/prf-early" "$@" +exit $? diff --git a/tests/tls13/prf.c b/tests/tls13/prf.c new file mode 100644 index 0000000000..c9c9f80b7b --- /dev/null +++ b/tests/tls13/prf.c @@ -0,0 +1,374 @@ +/* + * Copyright (C) 2015-2018 Red Hat, Inc. + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if !defined(__linux__) || !defined(__GNUC__) + +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" + +static void terminate(void); + +/* This program tests whether the gnutls_prf() works as + * expected. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +/* These are global */ +static pid_t child; + +static const +gnutls_datum_t hrnd = {(void*)"\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 32}; +static const +gnutls_datum_t hsrnd = {(void*)"\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 32}; + +static int gnutls_rnd_works; + +int __attribute__ ((visibility ("protected"))) +gnutls_rnd(gnutls_rnd_level_t level, void *data, size_t len) +{ + gnutls_rnd_works = 1; + + memset(data, 0xff, len); + + /* Flip the first byte to avoid infinite loop in the RSA + * blinding code of Nettle */ + if (len > 0) + memset(data, 0x0, 1); + return 0; +} + +static void dump(const char *name, const uint8_t *data, unsigned data_size) +{ + unsigned i; + + fprintf(stderr, "%s", name); + for (i=0;i + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#if defined(_WIN32) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#if !defined(_WIN32) +#include +#endif +#include +#include +#include +#include + +#include "tls13/ext-parse.h" + +#include "utils.h" + +/* Tests whether the pre-shared key extension will always be last + * even if the dumbfw extension is present. + */ + +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +#define MAX_BUF 1024 +#define MSG "Hello TLS" + +static void client(int sd, const char *prio) +{ + int ret, ii; + gnutls_session_t session; + char buffer[MAX_BUF + 1]; + gnutls_psk_client_credentials_t pskcred; + /* Need to enable anonymous KX specifically. */ + const gnutls_datum_t key = { (void *) "DEADBEEF", 8 }; + + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + side = "client"; + + gnutls_psk_allocate_client_credentials(&pskcred); + gnutls_psk_set_client_credentials(pskcred, "test", &key, + GNUTLS_PSK_KEY_HEX); + + assert(gnutls_init(&session, GNUTLS_CLIENT|GNUTLS_KEY_SHARE_TOP)>=0); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + assert(gnutls_credentials_set(session, GNUTLS_CRD_PSK, pskcred)>=0); + + gnutls_transport_set_int(session, sd); + + /* Perform the TLS handshake + */ + ret = gnutls_handshake(session); + + if (ret < 0) { + fail("client: Handshake failed\n"); + gnutls_perror(ret); + goto end; + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + assert(gnutls_record_send(session, MSG, strlen(MSG))>=0); + + ret = gnutls_record_recv(session, buffer, MAX_BUF); + if (ret == 0) { + if (debug) + success + ("client: Peer has closed the TLS connection\n"); + goto end; + } else if (ret < 0) { + fail("client: Error: %s\n", gnutls_strerror(ret)); + goto end; + } + + if (debug) { + printf("- Received %d bytes: ", ret); + for (ii = 0; ii < ret; ii++) { + fputc(buffer[ii], stdout); + } + fputs("\n", stdout); + } + + gnutls_bye(session, GNUTLS_SHUT_RDWR); + + end: + + close(sd); + + gnutls_deinit(session); + + gnutls_psk_free_client_credentials(pskcred); + + gnutls_global_deinit(); +} + +static int +pskfunc(gnutls_session_t session, const char *username, + gnutls_datum_t * key) +{ + if (debug) + printf("psk: username %s\n", username); + key->data = gnutls_malloc(4); + key->data[0] = 0xDE; + key->data[1] = 0xAD; + key->data[2] = 0xBE; + key->data[3] = 0xEF; + key->size = 4; + return 0; +} + +#define EXT_CLIENTHELLO_PADDING 21 +#define EXT_PRE_SHARED_KEY 41 + +struct ctx_st { + unsigned long pos; + void *base; +}; + +static +void check_ext_pos(void *priv, gnutls_datum_t *msg) +{ + struct ctx_st *ctx = priv; + + ctx->pos = (ptrdiff_t)((ptrdiff_t)msg->data - (ptrdiff_t)ctx->base); +} + +static int client_hello_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + unsigned long pos_psk; + unsigned long pos_pad; + + if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && post == GNUTLS_HOOK_POST) { + struct ctx_st ctx; + + ctx.base = msg->data; + if (find_client_extension(msg, EXT_CLIENTHELLO_PADDING, &ctx, check_ext_pos) == 0) + fail("Could not find dumbfw/client hello padding extension!\n"); + pos_pad = ctx.pos; + + ctx.base = msg->data; + if (find_client_extension(msg, EXT_PRE_SHARED_KEY, &ctx, check_ext_pos) == 0) + fail("Could not find psk extension!\n"); + pos_psk = ctx.pos; + + if (pos_psk < pos_pad) { + fail("The dumbfw extension was sent after pre-shared key!\n"); + } + + /* check if we are the last extension in general */ + if (!is_client_extension_last(msg, EXT_PRE_SHARED_KEY)) { + fail("pre-shared key extension wasn't the last one!\n"); + } + } + + return 0; +} + + +static void server(int sd, const char *prio) +{ + gnutls_psk_server_credentials_t server_pskcred; + int ret; + gnutls_session_t session; + char buffer[MAX_BUF + 1]; + + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + side = "server"; + + + assert(gnutls_psk_allocate_server_credentials(&server_pskcred)>=0); + gnutls_psk_set_server_credentials_function(server_pskcred, + pskfunc); + + assert(gnutls_init(&session, GNUTLS_SERVER)>=0); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + gnutls_credentials_set(session, GNUTLS_CRD_PSK, server_pskcred); + + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + client_hello_callback); + + gnutls_transport_set_int(session, sd); + ret = gnutls_handshake(session); + if (ret < 0) { + close(sd); + gnutls_deinit(session); + fail("server: Handshake has failed (%s)\n\n", + gnutls_strerror(ret)); + return; + } + if (debug) + success("server: Handshake was completed\n"); + + for (;;) { + memset(buffer, 0, MAX_BUF + 1); + gnutls_record_set_timeout(session, 10000); + ret = gnutls_record_recv(session, buffer, MAX_BUF); + + if (ret == 0) { + if (debug) + success + ("server: Peer has closed the GnuTLS connection\n"); + break; + } else if (ret < 0) { + fail("server: Received corrupted data(%d). Closing...\n", ret); + break; + } else if (ret > 0) { + /* echo data back to the client + */ + gnutls_record_send(session, buffer, + strlen(buffer)); + } + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + + close(sd); + gnutls_deinit(session); + + gnutls_psk_free_server_credentials(server_pskcred); + + gnutls_global_deinit(); + + if (debug) + success("server: finished\n"); +} + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + + +static +void run_test(const char *prio) +{ + pid_t child; + int err; + int sockets[2]; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + success("trying with %s\n", prio); + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status = 0; + /* parent */ + close(sockets[1]); + server(sockets[0], prio); + wait(&status); + check_wait_status(status); + } else { + close(sockets[0]); + client(sockets[1], prio); + exit(0); + } +} + +void doit(void) +{ + run_test("NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+PSK:%DUMBFW:-GROUP-ALL:+GROUP-FFDHE2048"); +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/psk-ext.c b/tests/tls13/psk-ext.c new file mode 100644 index 0000000000..370a8e1a76 --- /dev/null +++ b/tests/tls13/psk-ext.c @@ -0,0 +1,205 @@ +/* + * Copyright (C) 2016, 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include +#include +#include +#include "../lib/tls13/psk_ext_parser.h" + +#include "utils.h" + +/* Tests the PSK-extension decoding part */ + +static void decode(const char *test_name, const gnutls_datum_t *raw, const gnutls_datum_t *id, + const gnutls_datum_t *b, unsigned idx, int res) +{ + int ret; + psk_ext_parser_st p; + psk_ext_iter_st iter; + struct psk_st psk; + gnutls_datum_t binder; + unsigned found = 0; + unsigned i, j; + + ret = _gnutls13_psk_ext_parser_init(&p, raw->data, raw->size); + if (ret < 0) { + if (res == ret) /* expected */ + return; + fail("%s: _gnutls13_psk_ext_parser_init: %d/%s\n", test_name, ret, gnutls_strerror(ret)); + exit(1); + } + + _gnutls13_psk_ext_iter_init(&iter, &p); + for (i = 0; ; i++) { + ret = _gnutls13_psk_ext_iter_next_identity(&iter, &psk); + if (ret < 0) { + if (ret == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) + break; + if (res == ret) /* expected */ + return; + } + if (i == idx) { + if (psk.identity.size == id->size && memcmp(psk.identity.data, id->data, id->size) == 0) { + if (debug) + success("%s: found id\n", test_name); + found = 1; + break; + } else { + fail("%s: did not found identity on index %d\n", test_name, idx); + } + } + } + + if (found == 0) + fail("%s: did not found identity!\n", test_name); + + _gnutls13_psk_ext_iter_init(&iter, &p); + for (j = 0; j <= i; j++) { + ret = _gnutls13_psk_ext_iter_next_binder(&iter, &binder); + if (ret < 0) { + if (res == ret) /* expected */ + return; + fail("%s: could not extract binder: %s\n", + test_name, gnutls_strerror(ret)); + } + } + + if (debug) + success("%s: found binder\n", test_name); + + if (binder.size != b->size || memcmp(binder.data, b->data, b->size) != 0) { + hexprint(binder.data, binder.size); + fail("%s: did not match binder on index %d\n", test_name, idx); + } + + return; +} + +struct decode_tests_st { + const char *name; + gnutls_datum_t psk; + unsigned idx; /* the ID index */ + gnutls_datum_t id; + gnutls_datum_t binder; + int res; +}; + +struct decode_tests_st decode_tests[] = { + { + .name = "single PSK", + .psk = { (unsigned char*)"\x00\x0a\x00\x04\x6e\x6d\x61\x76\x00\x00\x00\x00\x00\x21\x20\xc4\xda\xe5\x7e\x05\x59\xf7\xae\x9b\xba\x90\xd2\x6e\x12\x68\xf6\xc1\xc7\xb9\x7e\xdc\xed\x9e\x67\x4e\xa5\x91\x2d\x7c\xb4\xf0\xab", 47}, + .id = { (unsigned char*)"nmav", 4 }, + .binder = { (unsigned char*)"\xc4\xda\xe5\x7e\x05\x59\xf7\xae\x9b\xba\x90\xd2\x6e\x12\x68\xf6\xc1\xc7\xb9\x7e\xdc\xed\x9e\x67\x4e\xa5\x91\x2d\x7c\xb4\xf0\xab", 32 }, + .idx = 0, + .res = 0 + }, + { + .name = "multiple psks id0", + .psk = { (unsigned char*)"\x00\x20\x00\x04\x70\x73\x6b\x31\x00\x00\x00\x00" + "\x00\x06\x70\x73\x6b\x69\x64\x00\x00\x00\x00\x00" + "\x00\x04\x74\x65\x73\x74\x00\x00\x00\x00\x00\x63" + "\x20\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x20\x71\x83\x89\x3d\xcc" + "\x46\xad\x83\x18\x98\x59\x46\x0b\xb2\x51\x24\x53" + "\x41\xb4\x35\x04\x22\x90\x02\xac\x5e\xc1\xe7\xbc" + "\xca\x52\x16", 135}, + .id = { (unsigned char*)"psk1", 4 }, + .binder = { (unsigned char*)"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 32}, + .idx = 0, + .res = 0 + }, + { + .name = "multiple psks id1", + .psk = { (unsigned char*)"\x00\x20\x00\x04\x70\x73\x6b\x31\x00\x00\x00\x00" + "\x00\x06\x70\x73\x6b\x69\x64\x00\x00\x00\x00\x00" + "\x00\x04\x74\x65\x73\x74\x00\x00\x00\x00\x00\x63" + "\x20\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x20\x71\x83\x89\x3d\xcc" + "\x46\xad\x83\x18\x98\x59\x46\x0b\xb2\x51\x24\x53" + "\x41\xb4\x35\x04\x22\x90\x02\xac\x5e\xc1\xe7\xbc" + "\xca\x52\x16", 135}, + .id = { (unsigned char*)"pskid", 6 }, + .binder = { (unsigned char*)"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 32}, + .idx = 1, + .res = 0 + }, + { + .name = "multiple psks id2", + .psk = { (unsigned char*)"\x00\x20\x00\x04\x70\x73\x6b\x31\x00\x00\x00\x00" + "\x00\x06\x70\x73\x6b\x69\x64\x00\x00\x00\x00\x00" + "\x00\x04\x74\x65\x73\x74\x00\x00\x00\x00\x00\x63" + "\x20\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x20\x71\x83\x89\x3d\xcc" + "\x46\xad\x83\x18\x98\x59\x46\x0b\xb2\x51\x24\x53" + "\x41\xb4\x35\x04\x22\x90\x02\xac\x5e\xc1\xe7\xbc" + "\xca\x52\x16", 135}, + .id = { (unsigned char*)"test", 4 }, + .binder = { (unsigned char*)"\x71\x83\x89\x3d\xcc\x46\xad\x83\x18\x98\x59\x46\x0b\xb2\x51\x24\x53\x41\xb4\x35\x04\x22\x90\x02\xac\x5e\xc1\xe7\xbc\xca\x52\x16", 32}, + .idx = 2, + .res = 0 + }, + { + .name = "multiple psks id3", + .psk = { (unsigned char*)"\x00\x20\x00\x04\x70\x73\x6b\x31\x00\x00\x00\x00" + "\x00\x06\x70\x73\x6b\x69\x64\x00\x00\x00\x00\x00" + "\x00\x04\x74\x65\x73\x74\x00\x00\x00\x00\x00\x42" + "\x20\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00", 102}, + .id = { (unsigned char*)"test", 4 }, + .binder = { NULL, 0 }, + .idx = 2, + .res = GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE + } +}; + +void doit(void) +{ + unsigned i; + + for (i=0;i + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" + +/* This program checks whether a TLS 1.3 client will detect + * a TLS 1.2 rollback attempt via the server random value. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + +#ifdef TLS12 +# define name "TLS1.2" +# define RND tls12_rnd +# define PRIO "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2" +#elif TLS11 +# define name "TLS1.1" +# define RND tls11_rnd +# define PRIO "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:+VERS-TLS1.0" +#else +# error unknown version to test +#endif + +gnutls_datum_t tls12_rnd = {(void*)"\x44\x4F\x57\x4E\x47\x52\x44\x01", + 8}; + +gnutls_datum_t tls11_rnd = {(void*)"\x44\x4F\x57\x4E\x47\x52\x44\x00", + 8}; + + +static void client(int fd) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + gnutls_datum_t srandom; + unsigned try = 0; + gnutls_datum_t session_data = { NULL, 0 }; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &cli_ca3_cert, + &cli_ca3_key, + GNUTLS_X509_FMT_PEM); + + retry: + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, PRIO, NULL); + if (ret < 0) + fail("cannot set TLS priorities\n"); + + if (try > 0) + gnutls_session_set_data(session, session_data.data, session_data.size); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) { + fail("error in handshake: %s\n", gnutls_strerror(ret)); + } + + if (try > 0) + assert(gnutls_session_is_resumed(session)); + + gnutls_session_get_random(session, NULL, &srandom); + + if (srandom.size != 32) + fail("unexpected random size\n"); + + if (memcmp(&srandom.data[32-8], RND.data, 8) != 0) { + unsigned i; + printf("expected: "); + for (i=0;i<8;i++) + printf("%.2x", (unsigned)RND.data[i]); + printf("\n"); + printf("got: "); + for (i=0;i<8;i++) + printf("%.2x", (unsigned)srandom.data[32-8+i]); + printf("\n"); + fail("unexpected random data for %s\n", name); + } + + do { + ret = gnutls_record_send(session, "\x00", 1); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (try == 0) { + ret = gnutls_session_get_data2(session, &session_data); + if (ret < 0) + fail("couldn't retrieve session data: %s\n", + gnutls_strerror(ret)); + } + + gnutls_deinit(session); + + if (try == 0) { + try++; + goto retry; + } + + close(fd); + + gnutls_free(session_data.data); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + + +static void server(int fd) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + gnutls_datum_t skey; + unsigned try = 0; + unsigned char buf[16]; + + /* this must be called once in the program + */ + global_init(); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + assert(gnutls_session_ticket_key_generate(&skey) >= 0); + + retry: + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + assert(gnutls_priority_set_direct(session, "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0", NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + assert(gnutls_session_ticket_enable_server(session, &skey) >= 0); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + if (ret == GNUTLS_E_INTERRUPTED) { /* expected */ + break; + } + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret < 0) + fail("error in handshake: %s\n", gnutls_strerror(ret)); + + if (try > 0) + assert(gnutls_session_is_resumed(session)); + + do { + ret = gnutls_record_recv(session, buf, sizeof(buf)); + } while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); + + if (ret < 0) + fail("server: recv did not succeed as expected: %s\n", gnutls_strerror(ret)); + + gnutls_deinit(session); + + if (try == 0) { + try++; + goto retry; + } + + close(fd); + + gnutls_free(skey.data); + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +void doit(void) +{ + int fd[2]; + int ret; + pid_t child; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + client(fd[0]); + kill(child, SIGTERM); + } else { + close(fd[0]); + server(fd[1]); + exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/rnd-rollback-detection.c b/tests/tls13/rnd-rollback-detection.c new file mode 100644 index 0000000000..b66c916432 --- /dev/null +++ b/tests/tls13/rnd-rollback-detection.c @@ -0,0 +1,237 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" + +/* This program checks whether a TLS 1.3 client will detect + * a TLS 1.2 rollback attempt via the server random value. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + + + +static void client(int fd) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &cli_ca3_cert, + &cli_ca3_key, + GNUTLS_X509_FMT_PEM); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.1:+VERS-TLS1.0", NULL); + if (ret < 0) + fail("cannot set TLS 1.2 priorities\n"); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + if (ret != GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER) { + fail("unexpected error during rollback: %s\n", gnutls_strerror(ret)); + } + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +#ifdef TLS12 +# define RND tls12_rnd +# define PRIO "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2" +#elif TLS11 +# define RND tls11_rnd +# define PRIO "NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1:+VERS-TLS1.0" +#else +# error unknown version to test +#endif + +gnutls_datum_t tls12_rnd = {(void*)"\x00\x00\x00\x04\x00\x00\x00\x04" + "\x00\x00\x00\x04\x00\x00\x00\x04" + "\x00\x00\x00\x04\x00\x00\x00\x04" + "\x44\x4F\x57\x4E\x47\x52\x44\x01", + 32}; + +gnutls_datum_t tls11_rnd = {(void*)"\x00\x00\x00\x04\x00\x00\x00\x04" + "\x00\x00\x00\x04\x00\x00\x00\x04" + "\x00\x00\x00\x04\x00\x00\x00\x04" + "\x44\x4F\x57\x4E\x47\x52\x44\x00", + 32}; + +static void server(int fd) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_random(session, &RND); + + assert(gnutls_priority_set_direct(session, PRIO, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + if (ret == GNUTLS_E_INTERRUPTED) { /* expected */ + break; + } + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +void doit(void) +{ + int fd[2]; + int ret; + pid_t child; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + client(fd[0]); + kill(child, SIGTERM); + } else { + close(fd[0]); + server(fd[1]); + exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/supported_versions.c b/tests/tls13/supported_versions.c new file mode 100644 index 0000000000..5917fd8d50 --- /dev/null +++ b/tests/tls13/supported_versions.c @@ -0,0 +1,353 @@ +/* + * Copyright (C) 2017-2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "utils.h" + +/* This program tests the ProtocolVersion of Client Hello + * and whether the supported_versions extension is present and + * contains 0x0304 (TLS 1.3). + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + + + +#define MAX_BUF 1024 + +static void client(int fd) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.2:+VERS-TLS1.0", NULL); + if (ret < 0) + fail("cannot set TLS 1.3 priorities\n"); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +static unsigned client_hello_ok = 0; +static unsigned server_hello_ok = 0; + +#define HANDSHAKE_SESSION_ID_POS 34 +#define TLS_EXT_SUPPORTED_VERSIONS 43 + +#define SKIP16(pos, total) { \ + uint16_t _s; \ + if (pos+2 > total) fail("error\n"); \ + _s = (msg->data[pos] << 8) | msg->data[pos+1]; \ + if ((size_t)(pos+2+_s) > total) fail("error\n"); \ + pos += 2+_s; \ + } + +#define SKIP8(pos, total) { \ + uint8_t _s; \ + if (pos+1 > total) fail("error\n"); \ + _s = msg->data[pos]; \ + if ((size_t)(pos+1+_s) > total) fail("error\n"); \ + pos += 1+_s; \ + } + +static int client_hello_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + ssize_t pos; + + if (htype == GNUTLS_HANDSHAKE_SERVER_HELLO && post == GNUTLS_HOOK_POST) { + /* check whether TLS 1.3 is negotiated */ + pos = 0; + if (msg->size < 2) { + fail("error in server hello size\n"); + } + + success("server hello:\n\t%d.%d\n", + (int)msg->data[pos], (int)msg->data[pos+1]); + + if (msg->data[pos] != 0x03 || msg->data[pos+1] != 0x03) { + fail("fail expected TLS 1.2 in server hello, got %d.%d\n", (int)msg->data[pos], (int)msg->data[pos+1]); + } + + server_hello_ok = 1; + return GNUTLS_E_INTERRUPTED; + } + + if (htype != GNUTLS_HANDSHAKE_CLIENT_HELLO || post != GNUTLS_HOOK_PRE) + return 0; + + if (msg->size < HANDSHAKE_SESSION_ID_POS) + return -1; + + /* we expect the legacy version to be present */ + /* ProtocolVersion legacy_version = 0x0303 */ + if (msg->data[0] != 0x03 || msg->data[1] != 0x03) { + fail("ProtocolVersion contains %d.%d\n", (int)msg->data[0], (int)msg->data[1]); + } + + pos = HANDSHAKE_SESSION_ID_POS; + /* legacy_session_id */ + SKIP8(pos, msg->size); + + /* CipherSuites */ + SKIP16(pos, msg->size); + + /* legacy_compression_methods */ + SKIP8(pos, msg->size); + + pos += 2; + + while (pos < msg->size) { + uint16_t type; + + if (pos+4 > msg->size) + fail("invalid client hello\n"); + + type = (msg->data[pos] << 8) | msg->data[pos+1]; + pos+=2; + + success("Found extension %d\n", (int)type); + + if (type != TLS_EXT_SUPPORTED_VERSIONS) { + SKIP16(pos, msg->size); + } else { /* found */ + ssize_t size = (msg->data[pos] << 8) | msg->data[pos+1]; + pos+=2; + + size = msg->data[pos]; + + if (size > msg->size+pos) { + fail("error in extension length\n"); + } + + if (size % 2 == 1) { + fail("extension length is odd!\n"); + } + + if (size != 6) { + fail("expected three versions only (%d)!\n", (int)size); + } + pos++; + + success("client hello:\n\t%d.%d\n\t%d.%d\n\t%d.%d\n", + (int)msg->data[pos], (int)msg->data[pos+1], + (int)msg->data[pos+2], (int)msg->data[pos+3], + (int)msg->data[pos+4], (int)msg->data[pos+5]); + + if (msg->data[pos] != 0x03 || msg->data[pos+1] != 0x04) { + fail("fail expected TLS 1.3, got %d.%d\n", (int)msg->data[pos], (int)msg->data[pos+1]); + } + pos+=2; + + if (msg->data[pos] != 0x03 || msg->data[pos+1] != 0x03) { + fail("fail expected TLS 1.2, got %d.%d\n", (int)msg->data[pos], (int)msg->data[pos+1]); + } + pos+=2; + + if (msg->data[pos] != 0x03 || msg->data[pos+1] != 0x01) { + fail("fail expected TLS 1.0, got %d.%d\n", (int)msg->data[pos], (int)msg->data[pos+1]); + } + pos+=2; + client_hello_ok = 1; + break; + } + } + + return 0; +} + +static void server(int fd) +{ + int ret; + char buffer[MAX_BUF + 1]; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + memset(buffer, 0, sizeof(buffer)); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + client_hello_callback); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL:+VERS-TLS1.3", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + if (ret == GNUTLS_E_INTERRUPTED) { /* expected */ + break; + } + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + + if (client_hello_ok == 0) { + fail("server: did not verify the client hello\n"); + } + + if (server_hello_ok == 0) { + fail("server: did not verify the server hello contents\n"); + } + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +void doit(void) +{ + int fd[2]; + int ret; + pid_t child; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0]); + kill(child, SIGTERM); + } else { + close(fd[0]); + client(fd[1]); + exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls13/tls12-no-tls13-exts.c b/tests/tls13/tls12-no-tls13-exts.c new file mode 100644 index 0000000000..36fae5b2be --- /dev/null +++ b/tests/tls13/tls12-no-tls13-exts.c @@ -0,0 +1,242 @@ +/* + * Copyright (C) 2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +int main() +{ + exit(77); +} + +#else + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cert-common.h" +#include "tls13/ext-parse.h" +#include "utils.h" + +/* This program checks whether any TLS 1.3 extensions are + * present when TLS 1.2 is the only protocol supported by + * client. + */ + +static void server_log_func(int level, const char *str) +{ + fprintf(stderr, "server|<%d>| %s", level, str); +} + +static void client_log_func(int level, const char *str) +{ + fprintf(stderr, "client|<%d>| %s", level, str); +} + + + +static void client(int fd) +{ + int ret; + gnutls_certificate_credentials_t x509_cred; + gnutls_session_t session; + + global_init(); + + if (debug) { + gnutls_global_set_log_function(client_log_func); + gnutls_global_set_log_level(7); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &cli_ca3_cert, + &cli_ca3_key, + GNUTLS_X509_FMT_PEM); + + /* Initialize TLS session + */ + gnutls_init(&session, GNUTLS_CLIENT); + + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_priority_set_direct(session, "NORMAL:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.0", NULL); + if (ret < 0) + fail("cannot set TLS 1.2 priorities\n"); + + /* put the anonymous credentials to the current session + */ + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + /* Perform the TLS handshake + */ + do { + ret = gnutls_handshake(session); + } + while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + close(fd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); +} + +static unsigned client_hello_ok = 0; + +static int client_hello_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + if (htype != GNUTLS_HANDSHAKE_CLIENT_HELLO || post != GNUTLS_HOOK_PRE) + return 0; + + if (find_client_extension(msg, TLS_EXT_SUPPORTED_VERSIONS, NULL, NULL)) { + fail("Found TLS 1.3 supported versions extension in TLS 1.2!\n"); + } + + if (find_client_extension(msg, TLS_EXT_POST_HANDSHAKE, NULL, NULL)) { + fail("Found TLS 1.3 supported versions extension in TLS 1.2!\n"); + } + + client_hello_ok = 1; + + return 0; +} + +static void server(int fd) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t x509_cred; + + /* this must be called once in the program + */ + global_init(); + + if (debug) { + gnutls_global_set_log_function(server_log_func); + gnutls_global_set_log_level(4711); + } + + gnutls_certificate_allocate_credentials(&x509_cred); + gnutls_certificate_set_x509_key_mem(x509_cred, &server_cert, + &server_key, + GNUTLS_X509_FMT_PEM); + + gnutls_init(&session, GNUTLS_SERVER); + + gnutls_handshake_set_timeout(session, 20 * 1000); + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, + client_hello_callback); + + /* avoid calling all the priority functions, since the defaults + * are adequate. + */ + gnutls_priority_set_direct(session, "NORMAL", NULL); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); + + gnutls_transport_set_int(session, fd); + + do { + ret = gnutls_handshake(session); + if (ret == GNUTLS_E_INTERRUPTED) { /* expected */ + break; + } + } while (ret < 0 && gnutls_error_is_fatal(ret) == 0); + + + if (client_hello_ok == 0) { + fail("server: did not verify the client hello\n"); + } + + close(fd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(x509_cred); + + gnutls_global_deinit(); + + if (debug) + success("server: client/server hello were verified\n"); +} + +static void ch_handler(int sig) +{ + int status = 0; + wait(&status); + check_wait_status(status); + return; +} + +void doit(void) +{ + int fd[2]; + int ret; + pid_t child; + + signal(SIGCHLD, ch_handler); + signal(SIGPIPE, SIG_IGN); + + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); + if (ret < 0) { + perror("socketpair"); + exit(1); + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + exit(1); + } + + if (child) { + /* parent */ + close(fd[1]); + server(fd[0]); + kill(child, SIGTERM); + } else { + close(fd[0]); + client(fd[1]); + exit(0); + } +} + +#endif /* _WIN32 */ diff --git a/tests/tls_hello_random_value.c b/tests/tls_hello_random_value.c new file mode 100644 index 0000000000..8841d2e2cc --- /dev/null +++ b/tests/tls_hello_random_value.c @@ -0,0 +1,267 @@ +/* + * Copyright (C) 2017-2020 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +/* This program tests whether the second DTLS client hello contains the same + * random value, and whether it is initialized. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#if defined(_WIN32) + +/* socketpair isn't supported on Win32. */ +int main(int argc, char **argv) +{ + exit(77); +} + +#else + +#include +#include +#include +#if !defined(_WIN32) +#include +#include +#endif +#include +#include +#include + +#include "utils.h" +#include "cert-common.h" + +const char *side = ""; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static unsigned cb_called = 0; + +static int hello_callback(gnutls_session_t session, unsigned int htype, + unsigned post, unsigned int incoming, const gnutls_datum_t *msg) +{ + unsigned non_zero = 0, i; + + if (htype == GNUTLS_HANDSHAKE_CLIENT_HELLO && post == GNUTLS_HOOK_POST) { + if (cb_called == 0) { + unsigned char crandom[32]; + gnutls_datum_t tmp; + gnutls_session_get_random(session, &tmp, NULL); + assert(tmp.size == 32); + + memcpy(crandom, tmp.data, tmp.size); + cb_called++; + + /* check if uninitialized */ + for (i=0;i<32;i++) { + if (crandom[i] != 0) { + non_zero++; + } + } + if (non_zero <= 8) { + fail("the client random value seems uninitialized\n"); + } + } else { + cb_called++; + } + } else if (htype == GNUTLS_HANDSHAKE_SERVER_HELLO && post == GNUTLS_HOOK_POST) { + unsigned char crandom[32]; + gnutls_datum_t tmp; + gnutls_session_get_random(session, NULL, &tmp); + assert(tmp.size == 32); + + memcpy(crandom, tmp.data, tmp.size); + + /* check if uninitialized */ + for (i=0;i<32;i++) { + if (crandom[i] != 0) { + non_zero++; + } + } + if (non_zero <= 8) { + fail("the server random value seems uninitialized\n"); + } + } + + return 0; +} + +static void client(int sd, const char *priority) +{ + int ret; + gnutls_session_t session; + gnutls_certificate_credentials_t clientx509cred; + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "client"; + + gnutls_certificate_allocate_credentials(&clientx509cred); + + assert(gnutls_init(&session, GNUTLS_CLIENT)>=0); + + if (!priority) { + assert(gnutls_set_default_priority(session) >= 0); + } else { + assert(gnutls_priority_set_direct(session, priority, NULL) >= 0); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + clientx509cred); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + gnutls_handshake_set_hook_function(session, GNUTLS_HANDSHAKE_ANY, + GNUTLS_HOOK_BOTH, hello_callback); + + ret = gnutls_handshake(session); + + if (ret < 0) { + fail("client: Handshake failed: %s\n", gnutls_strerror(ret)); + } else { + if (debug) + success("client: Handshake was completed\n"); + } + + if (cb_called != 1) { + fail("client: the callback was not seen (%d)!\n", cb_called); + } + + gnutls_bye(session, GNUTLS_SHUT_WR); + close(sd); + + gnutls_deinit(session); + + gnutls_certificate_free_credentials(clientx509cred); +} + +static void server(int sd, const char *priority) +{ + int ret; + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t session; + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4711); + + side = "server"; + + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + assert(gnutls_certificate_set_x509_key_mem(serverx509cred, + &server_cert, &server_key, + GNUTLS_X509_FMT_PEM)>=0); + + assert(gnutls_init(&session, GNUTLS_SERVER)>=0); + assert(session != NULL); + + if (!priority) { + assert(gnutls_set_default_priority(session) >= 0); + } else { + assert(gnutls_priority_set_direct(session, priority, NULL) >= 0); + } + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, + serverx509cred); + + gnutls_transport_set_int(session, sd); + gnutls_handshake_set_timeout(session, 20 * 1000); + + ret = gnutls_handshake(session); + if (ret < 0) { + fail("server: Handshake has failed: %s\n\n", + gnutls_strerror(ret)); + } + if (debug) + success("server: Handshake was completed\n"); + + /* do not wait for the peer to close the connection. + */ + gnutls_bye(session, GNUTLS_SHUT_WR); + close(sd); + gnutls_deinit(session); + + gnutls_certificate_free_credentials(serverx509cred); + + if (debug) + success("server: finished\n"); +} + +static void start(const char *name, const char *priority) +{ + pid_t child; + int sockets[2]; + int err; + + success("testing: %s\n", name); + cb_called = 0; + + err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); + if (err == -1) { + perror("socketpair"); + fail("socketpair failed\n"); + return; + } + + child = fork(); + if (child < 0) { + perror("fork"); + fail("fork"); + return; + } + + if (child) { + int status = 0; + /* parent */ + close(sockets[1]); + client(sockets[0], priority); + wait(&status); + check_wait_status(status); + } else { + close(sockets[0]); + server(sockets[1], priority); + exit(0); + } +} + +void doit(void) +{ + signal(SIGPIPE, SIG_IGN); + + start("default", NULL); + start("tls1.3", "NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("tls1.2", "NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("tls1.1", "NORMAL:-VERS-ALL:+VERS-TLS1.1"); + start("tls1.0", "NORMAL:-VERS-ALL:+VERS-TLS1.0"); +} + +#endif /* _WIN32 */ diff --git a/tests/tlsext-decoding.c b/tests/tlsext-decoding.c index ed0f3e3fc8..1a36c669f0 100644 --- a/tests/tlsext-decoding.c +++ b/tests/tlsext-decoding.c @@ -48,6 +48,7 @@ int main() #include #include #include +#include #include #include "utils.h" @@ -112,7 +113,7 @@ static ssize_t odd_push(gnutls_transport_ptr_t tr, const void *data, size_t len) /* A very basic DTLS client handling DTLS 0.9 which sets premaster secret. */ -static void client(int fd) +static void client(int fd, const char *prio) { int ret; gnutls_certificate_credentials_t xcred; @@ -132,10 +133,7 @@ static void client(int fd) gnutls_init(&session, GNUTLS_CLIENT); gnutls_handshake_set_timeout(session, 20 * 1000); - /* Use default priorities */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA:%COMPAT", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -176,7 +174,7 @@ static void terminate(void) exit(1); } -static void server(int fd) +static void server(int fd, const char *prio) { int ret; gnutls_certificate_credentials_t xcred; @@ -205,9 +203,7 @@ static void server(int fd) /* avoid calling all the priority functions, since the defaults * are adequate. */ - gnutls_priority_set_direct(session, - "NORMAL:-KX-ALL:+ECDHE-RSA", - NULL); + assert(gnutls_priority_set_direct(session, prio, NULL) >= 0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, xcred); @@ -225,7 +221,6 @@ static void server(int fd) gnutls_strerror(ret)); terminate(); } - success("server: Handshake failed as expected\n"); close(fd); gnutls_deinit(session); @@ -235,14 +230,15 @@ static void server(int fd) gnutls_global_deinit(); if (debug) - success("server: finished\n"); + success("server: Handshake failed as expected\n"); } -static void start(void) +static void start(const char *prio) { int fd[2]; int ret; + success("trying %s\n", prio); signal(SIGPIPE, SIG_IGN); ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fd); @@ -263,25 +259,29 @@ static void start(void) /* parent */ close(fd[0]); - server(fd[1]); + server(fd[1], prio); wait(&status); check_wait_status(status); close(fd[1]); } else { close(fd[1]); - client(fd[0]); + client(fd[0], prio); exit(0); } } void doit(void) { - /* check overflow */ - start(); + success("checking overflow\n"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); - /* check underflow */ + success("checking underflow\n"); reduce = 1; - start(); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); } #endif /* _WIN32 */ diff --git a/tests/tpmtool_test.sh b/tests/tpmtool_test.sh new file mode 100755 index 0000000000..c6e4bc42ef --- /dev/null +++ b/tests/tpmtool_test.sh @@ -0,0 +1,427 @@ +#!/bin/sh + +# Copyright (C) 2018 IBM Corporation +# +# Author: Stefan Berger +# +# This file is part of GnuTLS. +# +# GnuTLS is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# GnuTLS is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GnuTLS; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +srcdir="${srcdir:-.}" +CERTTOOL="${CERTTOOL:-../src/certtool${EXEEXT}}" +TPMTOOL="${TPMTOOL:-../src/tpmtool${EXEEXT}}" + +if [ "$(id -u)" -ne 0 ]; then + echo "Need to be root to run this test." + exit 77 +fi + +if [ -z "$(which swtpm 2>/dev/null)" ]; then + echo "Need swtpm package to run this test." + exit 77 +fi + +if [ -z "$(which tcsd 2>/dev/null)" ]; then + echo "Need tcsd (TrouSerS) package to run this test." + exit 77 +fi + +if [ -z "$(which tpm_createek 2>/dev/null)" ]; then + echo "Need tpm_createek from tpm-tools package to run this test." + exit 77 +fi + +if [ -z "$(which ncat 2>/dev/null)" ]; then + echo "Need ncat from nmap-ncat package to run this test." + exit 77 +fi + +if [ -z "$(which expect 2>/dev/null)" ]; then + echo "Need expect from expect package to run this test." + exit 77 +fi + +$TPMTOOL --help >/dev/null +if [ $? -ne 0 ]; then + echo "tpmtool cannot show help screen (TPMTOOL=$TPMTOOL)." + exit 77 +fi + +$CERTTOOL --help >/dev/null +if [ $? -ne 0 ]; then + echo "certtool cannot show help screen (CERTTOOL=$CERTTOOL)." + exit 77 +fi + +. "${srcdir}/scripts/common.sh" + +workdir=$(mktemp -d) + +SWTPM_SERVER_PORT=12345 +SWTPM_CTRL_PORT=$((SWTPM_SERVER_PORT + 1)) +SWTPM_PIDFILE=${workdir}/swtpm.pid +TCSD_LISTEN_PORT=12347 +export TSS_TCSD_PORT=$TCSD_LISTEN_PORT + +cleanup() +{ + stop_tcsd + if [ -n "$workdir" ]; then + rm -rf $workdir + fi +} + +start_swtpm() +{ + local workdir="$1" + + local res + + swtpm socket \ + --flags not-need-init \ + --pid file=$SWTPM_PIDFILE \ + --tpmstate dir=$workdir \ + --server type=tcp,port=$SWTPM_SERVER_PORT,disconnect \ + --ctrl type=tcp,port=$SWTPM_CTRL_PORT & + + if wait_for_file $SWTPM_PIDFILE 3; then + echo "Starting the swtpm failed" + return 1 + fi + + SWTPM_PID=$(cat $SWTPM_PIDFILE) + kill -0 ${SWTPM_PID} + if [ $? -ne 0 ]; then + echo "swtpm must have terminated" + return 1 + fi + + # Send TPM_Startup to TPM + res="$(/bin/echo -en '\x00\xC1\x00\x00\x00\x0C\x00\x00\x00\x99\x00\x01' | + ncat localhost ${SWTPM_SERVER_PORT} | od -tx1 -An)" + exp=' 00 c4 00 00 00 0a 00 00 00 00' + if [ "$res" != "$exp" ]; then + echo "Did not get expected response from TPM_Startup(ST_CLEAR)" + echo "expected: $exp" + echo "received: $res" + return 1 + fi + + return 0 +} + +stop_swtpm() +{ + if [ -n "$SWTPM_PID" ]; then + terminate_proc $SWTPM_PID + unset SWTPM_PID + fi +} + +start_tcsd() +{ + local workdir="$1" + + local tcsd_conf=$workdir/tcsd.conf + local tcsd_system_ps_file=$workdir/system_ps_file + local tcsd_pidfile=$workdir/tcsd.pid + + start_swtpm "$workdir" + [ $? -ne 0 ] && return 1 + + cat <<_EOF_ > $tcsd_conf +port = $TCSD_LISTEN_PORT +system_ps_file = $tcsd_system_ps_file +_EOF_ + + chown tss:tss $tcsd_conf + chmod 0600 $tcsd_conf + + bash -c "TCSD_USE_TCP_DEVICE=1 TCSD_TCP_DEVICE_PORT=$SWTPM_SERVER_PORT tcsd -c $tcsd_conf -e -f &>/dev/null & echo \$! > $tcsd_pidfile; wait" & + BASH_PID=$! + + if wait_for_file $tcsd_pidfile 3; then + echo "Could not get TCSD's PID file" + return 1 + fi + + TCSD_PID=$(cat $tcsd_pidfile) + return 0 +} + +stop_tcsd() +{ + if [ -n "$TCSD_PID" ]; then + terminate_proc $TCSD_PID + unset TCSD_PID + fi + stop_swtpm +} + +run_tpm_takeownership() +{ + local owner_password="$1" + local srk_password="$2" + + local prg out rc + local parm_z="" + + if [ -z "$srk_password" ]; then + parm_z="--srk-well-known" + fi + + prg="set parm_z \"$parm_z\" + spawn tpm_takeownership \$parm_z + expect { + \"Enter owner password:\" + { send \"$owner_password\n\" } + } + expect { + \"Confirm password:\" + { send \"$owner_password\n\" } + } + if { \$parm_z == \"\" } { + expect { + \"Enter SRK password:\" + { send \"$srk_password\n\" } + } + expect { + \"Confirm password:\" + { send \"$srk_password\n\" } + } + } + expect { + eof + } + catch wait result + exit [lindex \$result 3] + " + out=$(expect -c "$prg") + rc=$? + echo "$out" + return $rc +} + +setup_tcsd() +{ + local workdir="$1" + local owner_password="$2" + local srk_password="$3" + + local msg + + start_tcsd "$workdir" + [ $? -ne 0 ] && return 1 + + tpm_createek + [ $? -ne 0 ] && { + echo "Could not create EK" + return 1 + } + msg="$(run_tpm_takeownership "$owner_password" "$srk_password")" + [ $? -ne 0 ] && { + echo "Could not take ownership of TPM" + echo "$msg" + return 1 + } + return 0 +} + +run_tpmtool() +{ + local srk_password="$1" + local key_password="$2" + + shift 2 + + local prg out rc + + prg="spawn $TPMTOOL $@ + expect { + \"Enter SRK password:\" { + send \"$srk_password\n\" + exp_continue + } + \"Enter key password:\" { + send \"$key_password\n\" + exp_continue + } + \"tpmkey:\" { + exp_continue + } + eof + } + catch wait result + exit [lindex \$result 3] + " + out=$(expect -c "$prg") + rc=$? + echo "$out" + return $rc +} + +tpmtool_test() +{ + local workdir="$1" + local owner_password="$2" + local srk_password="$3" + local key_password="$4" + local register=$5 # whether to --register the key + + local params msg tpmkeyurl + local tpmpubkey=${workdir}/tpmpubkey.pem + local tpmca=${workdir}/tpmca.pem + local template=${workdir}/template + local tpmkey=${workdir}/tpmkey.pem # if --register is not used + + setup_tcsd "$workdir" "$owner_password" "$srk_password" + [ $? -ne 0 ] && return 1 + + if [ -z "$srk_password" ]; then + params="--srk-well-known" + unset GNUTLS_PIN + else + export GNUTLS_PIN="$srk_password" + fi + + if [ $register -ne 0 ]; then + # --register key + msg="$(run_tpmtool "$srk_password" "$key_password" \ + $params --register --generate-rsa --signing)" + [ $? -ne 0 ] && { + echo "Could not create TPM signing key" + echo "$msg" + return 1 + } + tpmkeyurl=$(echo "$msg" | sed -n 's/\(tpmkey:uuid=[^;]*\);.*/\1/p') + [ -z "$tpmkeyurl" ] && { + echo "Could not get TPM key URL" + return 1 + } + else + msg="$(run_tpmtool "$srk_password" "$key_password" \ + $params --generate-rsa --signing --outfile ${tpmkey})" + [ $? -ne 0 ] && { + echo "Could not create TPM signing key" + echo "$msg" + return 1 + } + tpmkeyurl="tpmkey:file=${tpmkey}" + fi + + if [ $register -ne 0 ]; then + msg=$(run_tpmtool "$srk_password" "$key_password" \ + $params --test-sign $tpmkeyurl) + [ $? -ne 0 ] && { + echo "Could not test sign with key $tpmkeyurl" + echo "$msg" + return 1 + } + fi + + msg=$(run_tpmtool "$srk_password" "$key_password" \ + $params --pubkey "$tpmkeyurl" --outfile "$tpmpubkey") + [ $? -ne 0 ] && { + echo "Could not get TPM key's public key" + echo "$msg" + return 1 + } + + cat <<_EOF_ >${template} +cn = test +ca +cert_signing_key +expiration_days = 1 +_EOF_ + + msg=$($CERTTOOL \ + --generate-self-signed \ + --template ${template} \ + --outfile ${tpmca} \ + --load-privkey ${tpmkeyurl} \ + --load-pubkey ${tpmpubkey} 2>&1) + [ $? -ne 0 ] && { + echo "Could not create self-signed certificate" + echo "$msg" + return 1 + } + + echo "Successfully created TPM root CA cert using key $tpmkeyurl" + + if [ $register -ne 0 ]; then + if [ -z "$($TPMTOOL --list | grep "${tpmkeyurl}")" ]; then + echo "TPM key '${tpmkeyurl}' was not found in list of TPM keys" + return 1 + fi + + msg=$(run_tpmtool "$srk_password" "$key_password" \ + $params --delete $tpmkeyurl) + [ $? -ne 0 ] && { + echo "Could not delete TPM key ${tpmkeyurl}" + echo "$msg" + return 1 + } + + if [ -n "$($TPMTOOL --list | grep "$tpmkeyurl")" ]; then + echo "TPM key '$tpmkeyurl' was not properly deleted" + return 1 + fi + fi + + stop_tcsd +} + +run_tests() +{ + local workdir="$1" + + [ -z "$workdir" ] && { + echo "No workdir" + return 1 + } + local srk_password key_password + local owner_password="owner" + local register + + register=1 + # Test with --register; key password is not needed + for srk_password in "" "s"; do + tpmtool_test "$workdir" "$owner_password" "$srk_password" "" "$register" + [ $? -ne 0 ] && return 1 + stop_tcsd + rm ${workdir}/* + done + + # Test without --register; the key needs a password, but it has to be the same as the + # srk_password due to a bug in TrouSerS + register=0 + for srk_password in "s"; do + key_password=$srk_password + tpmtool_test "$workdir" "$owner_password" "$srk_password" "$key_password" "$register" + [ $? -ne 0 ] && return 1 + stop_tcsd + rm ${workdir}/* + done + + echo "Ok" + + return 0 +} + +trap "cleanup" EXIT QUIT + +run_tests "$workdir" +exit $? diff --git a/tests/trustdb-tofu.c b/tests/trustdb-tofu.c index 85d08886a0..5917fadf1d 100644 --- a/tests/trustdb-tofu.c +++ b/tests/trustdb-tofu.c @@ -31,6 +31,8 @@ #include #include #include "utils.h" +#include "cert-common.h" + /* This will test whether the default public key storage backend * is operating properly */ @@ -40,7 +42,7 @@ static void tls_log_func(int level, const char *str) fprintf(stderr, "|<%d>| %s", level, str); } -static unsigned char server_cert_pem[] = +static unsigned char tofu_server_cert_pem[] = "-----BEGIN CERTIFICATE-----\n" "MIICVjCCAcGgAwIBAgIERiYdMTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTIxWhcNMDgwNDE3MTMyOTIxWjA3MRsw\n" @@ -56,8 +58,8 @@ static unsigned char server_cert_pem[] = "AwUNBRXwd3riUsMnsxgeSDxYBfJYbDLeohNBsqaPDJb7XailWbMQKfAbFQ8cnOxg\n" "rOKLUQRWJ0K3HyXRMhbqjdLIaQiCvQLuizo=\n" "-----END CERTIFICATE-----\n"; -const gnutls_datum_t server_cert = { server_cert_pem, - sizeof(server_cert_pem) +const gnutls_datum_t tofu_server_cert = { tofu_server_cert_pem, + sizeof(tofu_server_cert_pem) }; static char client_pem[] = @@ -86,6 +88,7 @@ const gnutls_datum_t client_cert = void doit(void) { gnutls_datum_t der_cert, der_cert2; + gnutls_datum_t der_rawpk, der_rawpk2; int ret; gnutls_datum_t hash; char path[512]; @@ -100,8 +103,9 @@ void doit(void) if (debug) gnutls_global_set_log_level(2); + // X.509 certificates ret = - gnutls_pem_base64_decode_alloc("CERTIFICATE", &server_cert, + gnutls_pem_base64_decode_alloc("CERTIFICATE", &tofu_server_cert, &der_cert); if (ret < 0) { fail("base64 decoding\n"); @@ -116,10 +120,27 @@ void doit(void) goto fail; } + // Raw public keys + ret = + gnutls_pem_base64_decode_alloc("PUBLIC KEY", &rawpk_public_key1, + &der_rawpk); + if (ret < 0) { + fail("base64 decoding\n"); + goto fail; + } + + ret = + gnutls_pem_base64_decode_alloc("PUBLIC KEY", &rawpk_public_key2, + &der_rawpk2); + if (ret < 0) { + fail("base64 decoding\n"); + goto fail; + } + remove(HOSTS_FILE); remove(TMP_FILE); - /* verify whether the stored hash verification succeeeds */ + /* verify whether the stored hash verification succeeds */ ret = gnutls_store_commitment(TMP_FILE, NULL, "localhost", "https", GNUTLS_DIG_SHA1, &hash, 0, GNUTLS_SCOMMIT_FLAG_ALLOW_BROKEN); if (ret != 0) { @@ -175,7 +196,8 @@ void doit(void) success("Commitment from homedir verification: passed\n"); #endif - /* verify whether the stored pubkey verification succeeeds */ + /* verify whether the stored pubkey verification succeeds */ + // First we test regular X.509 certs ret = gnutls_store_pubkey(TMP_FILE, NULL, "localhost", "https", GNUTLS_CRT_X509, &der_cert, 0, 0); if (ret != 0) { @@ -184,14 +206,14 @@ void doit(void) } if (debug) - success("Public key storage: passed\n"); + success("Public key storage (from cert): passed\n"); ret = gnutls_verify_stored_pubkey(TMP_FILE, NULL, "localhost", "https", GNUTLS_CRT_X509, &der_cert, 0); if (ret != 0) { - fail("pubkey verification: %s\n", gnutls_strerror(ret)); + fail("pubkey verification (from cert): %s\n", gnutls_strerror(ret)); goto fail; } @@ -200,7 +222,44 @@ void doit(void) "https", GNUTLS_CRT_X509, &der_cert2, 0); if (ret == 0) { - fail("verification succeed when shouldn't!\n"); + fail("verification succeeded when shouldn't!\n"); + goto fail; + } + if (ret != GNUTLS_E_CERTIFICATE_KEY_MISMATCH) { + fail("Wrong error code returned: %s!\n", + gnutls_strerror(ret)); + goto fail; + } + + if (debug) + success("Public key verification (from cert): passed\n"); + + // Secondly we test raw public keys + ret = gnutls_store_pubkey(TMP_FILE, NULL, "localhost", "https", + GNUTLS_CRT_RAWPK, &der_rawpk, 0, 0); + if (ret != 0) { + fail("storage: %s\n", gnutls_strerror(ret)); + goto fail; + } + + if (debug) + success("Public key storage (from raw pk): passed\n"); + + ret = + gnutls_verify_stored_pubkey(TMP_FILE, NULL, "localhost", + "https", GNUTLS_CRT_RAWPK, + &der_rawpk, 0); + if (ret != 0) { + fail("pubkey verification (from raw pk): %s\n", gnutls_strerror(ret)); + goto fail; + } + + ret = + gnutls_verify_stored_pubkey(TMP_FILE, NULL, "localhost", + "https", GNUTLS_CRT_RAWPK, + &der_rawpk2, 0); + if (ret == 0) { + fail("verification succeeded when shouldn't!\n"); goto fail; } if (ret != GNUTLS_E_CERTIFICATE_KEY_MISMATCH) { @@ -210,7 +269,7 @@ void doit(void) } if (debug) - success("Public key verification: passed\n"); + success("Public key verification (from raw pk): passed\n"); remove(HOSTS_FILE); remove(TMP_FILE); @@ -219,6 +278,8 @@ void doit(void) gnutls_global_deinit(); gnutls_free(der_cert.data); gnutls_free(der_cert2.data); + gnutls_free(der_rawpk.data); + gnutls_free(der_rawpk2.data); return; fail: diff --git a/tests/utils-adv.c b/tests/utils-adv.c index 0947cd0160..8291e182ab 100644 --- a/tests/utils-adv.c +++ b/tests/utils-adv.c @@ -42,7 +42,7 @@ int _gnutls_server_name_set_raw(gnutls_session_t session, const char *side = NULL; /* if @host is NULL certificate check is skipped */ -static int +int _test_cli_serv(gnutls_certificate_credentials_t server_cred, gnutls_certificate_credentials_t client_cred, const char *serv_prio, const char *cli_prio, @@ -53,7 +53,6 @@ _test_cli_serv(gnutls_certificate_credentials_t server_cred, int serv_err, int cli_err) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_session_t server; @@ -69,7 +68,10 @@ _test_cli_serv(gnutls_certificate_credentials_t server_cred, gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, server_cred); - gnutls_priority_set_direct(server, serv_prio, NULL); + ret = gnutls_priority_set_direct(server, serv_prio, NULL); + if (ret < 0) { + fail("error in server priority: %s\n", serv_prio); + } gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -95,7 +97,10 @@ _test_cli_serv(gnutls_certificate_credentials_t server_cred, if (ret < 0) exit(1); - gnutls_priority_set_direct(client, cli_prio, NULL); + ret = gnutls_priority_set_direct(client, cli_prio, NULL); + if (ret < 0) { + fail("error in client priority: %s\n", cli_prio); + } gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -104,6 +109,7 @@ _test_cli_serv(gnutls_certificate_credentials_t server_cred, HANDSHAKE(client, server); } else { HANDSHAKE_EXPECT(client, server, cli_err, serv_err); + goto cleanup; } /* check the number of certificates received and verify */ @@ -156,6 +162,11 @@ _test_cli_serv(gnutls_certificate_credentials_t server_cred, } } + if (cret >= 0) + gnutls_bye(client, GNUTLS_SHUT_RDWR); + if (sret >= 0) + gnutls_bye(server, GNUTLS_SHUT_RDWR); + ret = 0; cleanup: if (client_cb) @@ -163,19 +174,9 @@ _test_cli_serv(gnutls_certificate_credentials_t server_cred, if (server_cb) server_cb(server, priv); - gnutls_bye(client, GNUTLS_SHUT_RDWR); - gnutls_bye(server, GNUTLS_SHUT_RDWR); - gnutls_deinit(client); gnutls_deinit(server); - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } - return ret; } @@ -194,7 +195,6 @@ test_cli_serv_anon(gnutls_anon_server_credentials_t server_cred, gnutls_anon_client_credentials_t client_cred, const char *prio) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_session_t server; @@ -239,13 +239,6 @@ test_cli_serv_anon(gnutls_anon_server_credentials_t server_cred, gnutls_deinit(client); gnutls_deinit(server); - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } - return ret; } @@ -254,7 +247,6 @@ test_cli_serv_psk(gnutls_psk_server_credentials_t server_cred, gnutls_psk_client_credentials_t client_cred, const char *prio) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_session_t server; @@ -299,13 +291,6 @@ test_cli_serv_psk(gnutls_psk_server_credentials_t server_cred, gnutls_deinit(client); gnutls_deinit(server); - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } - return ret; } @@ -347,7 +332,7 @@ void print_dh_params_info(gnutls_session_t session) } ret = gnutls_dh_get_secret_bits(session); - if (ret < 256) { + if (ret < 225) { fail("client: too small secret key size: %d\n", ret); } diff --git a/tests/utils.c b/tests/utils.c index 073fe0e511..9186a17571 100644 --- a/tests/utils.c +++ b/tests/utils.c @@ -325,6 +325,7 @@ void delete_temp_files(void) return; while(p != NULL) { + remove(p->file); next = p->next; free(p); p = next; diff --git a/tests/utils.h b/tests/utils.h index d59c8e7bfe..61d6dc9f9e 100644 --- a/tests/utils.h +++ b/tests/utils.h @@ -16,15 +16,15 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ -#ifndef UTILS_H -#define UTILS_H +#ifndef GNUTLS_TESTS_UTILS_H +#define GNUTLS_TESTS_UTILS_H #include +#include #include #include #include @@ -37,6 +37,21 @@ #endif #endif +#ifdef NDEBUG +# error tests cannot be compiled with NDEBUG defined +#endif + +#if _GNUTLS_GCC_VERSION >= 70100 +#define FALLTHROUGH __attribute__ ((fallthrough)) +#endif + +#ifndef FALLTHROUGH +# define FALLTHROUGH +#endif + +/* number of elements within an array */ +#define countof(a) (sizeof(a)/sizeof(*(a))) + inline static int global_init(void) { #ifdef ENABLE_PKCS11 @@ -94,6 +109,17 @@ void test_cli_serv(gnutls_certificate_credentials_t server_cred, void *priv, callback_func * client_cb, callback_func * server_cb); +int +_test_cli_serv(gnutls_certificate_credentials_t server_cred, + gnutls_certificate_credentials_t client_cred, + const char *serv_prio, const char *cli_prio, + const char *host, + void *priv, callback_func *client_cb, callback_func *server_cb, + unsigned expect_verification_failure, + unsigned require_cert, + int serv_err, + int cli_err); + void print_dh_params_info(gnutls_session_t); void @@ -126,13 +152,16 @@ inline static void _check_wait_status(int status, unsigned sigonly) { #if defined WEXITSTATUS && defined WIFSIGNALED if (WEXITSTATUS(status) != 0 || - (WIFSIGNALED(status) && WTERMSIG(status) == SIGSEGV)) { + (WIFSIGNALED(status) && WTERMSIG(status) != SIGTERM)) { if (WIFSIGNALED(status)) { fail("Child died with signal %d\n", WTERMSIG(status)); } else { - if (!sigonly) + if (!sigonly) { + if (WEXITSTATUS(status) == 77) + exit(77); fail("Child died with status %d\n", WEXITSTATUS(status)); + } } } #endif @@ -148,4 +177,4 @@ inline static void check_wait_status_for_sig(int status) _check_wait_status(status, 1); } -#endif /* UTILS_H */ +#endif /* GNUTLS_TESTS_UTILS_H */ diff --git a/tests/version-checks.c b/tests/version-checks.c index 588d5776e2..2b6badff17 100644 --- a/tests/version-checks.c +++ b/tests/version-checks.c @@ -59,7 +59,7 @@ static void try(const char *client_prio, int expected) int cret = GNUTLS_E_AGAIN; unsigned flags = 0; unsigned dtls = 0; - const char *server_prio = "NORMAL"; + const char *server_prio = "NORMAL:+VERS-TLS-ALL"; if (expected >= GNUTLS_DTLS_VERSION_MIN && expected <= GNUTLS_DTLS_VERSION_MAX) { dtls = 1; @@ -162,6 +162,22 @@ void doit(void) reset_buffers(); try("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2", GNUTLS_TLS1_2); reset_buffers(); + try("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3", GNUTLS_TLS1_3); + reset_buffers(); + try("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3:+VERS-TLS1.0", GNUTLS_TLS1_0); + reset_buffers(); + /* similar to above test, but checks a different syntax */ + try("NORMAL:-VERS-ALL:+VERS-TLS1.3:+VERS-TLS1.1", GNUTLS_TLS1_1); + reset_buffers(); + try("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3:+VERS-TLS1.2", GNUTLS_TLS1_3); + reset_buffers(); + /* If TLS 1.3 is enabled in the server, prefer the latest + * possible version regardless of the client's precedence. + * See https://gitlab.com/gnutls/gnutls/issues/837 for the + * rationale. + */ + try("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2:+VERS-TLS1.3", GNUTLS_TLS1_3); + reset_buffers(); #ifdef ENABLE_SSL3 try("NORMAL:-VERS-TLS-ALL:+VERS-SSL3.0", -1); reset_buffers(); diff --git a/tests/virt-time.h b/tests/virt-time.h new file mode 100644 index 0000000000..0e7e213c53 --- /dev/null +++ b/tests/virt-time.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2018 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifndef GNUTLS_TESTS_VIRT_TIME_H +#define GNUTLS_TESTS_VIRT_TIME_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +/* copied from ../lib/system.h so not to include that header from + * every test program */ +typedef void (*gnutls_gettime_func) (struct timespec *); +extern void _gnutls_global_set_gettime_function(gnutls_gettime_func gettime_func); + +/* virtualize time in a test. This freezes the time in the test, except for + * the advances due to calls to virt_sleep_sec(). This makes the test + * independent of the test system load, and avoids any long delays. */ +static time_t _now; +static struct timespec _now_ts; + +#define virt_sec_sleep(s) { \ + _now += s; \ + _now_ts.tv_sec += s; \ + } + +#define virt_time_init() { \ + _now = time(0); \ + gnutls_global_set_time_function(mytime); \ + _now_ts.tv_sec = _now; \ + _now_ts.tv_nsec = 0; \ + _gnutls_global_set_gettime_function(mygettime); \ + } + + +static time_t mytime(time_t * t) +{ + if (t) + *t = _now; + + return _now; +} + +static void mygettime(struct timespec * t) +{ + if (t) + *t = _now_ts; +} + +#endif /* GNUTLS_TESTS_VIRT_TIME_H */ diff --git a/tests/win-certopenstore.c b/tests/win-certopenstore.c new file mode 100644 index 0000000000..162defa4e3 --- /dev/null +++ b/tests/win-certopenstore.c @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2018 Hugo Beauzée-Luyssen + * + * Author: Hugo Beauzée-Luyssen + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* + * This test verifies the assumptions about CertOpenStore and + * CertOpenSystemStore to be equivalent when passed some specific flags + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifndef _WIN32 +#error "This test shouldn't have been included" +#endif + +#include +#include +#include + +void doit(void) +{ + HCERTSTORE hStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER , L"ROOT"); + assert(hStore != NULL); + HCERTSTORE hSystemStore = CertOpenSystemStore(0, "ROOT"); + assert(hSystemStore != NULL); + + PCCERT_CONTEXT prevCtx = NULL; + PCCERT_CONTEXT ctx = NULL; + PCCERT_CONTEXT sysPrevCtx = NULL; + PCCERT_CONTEXT sysCtx = NULL; + + while (1) + { + ctx = CertEnumCertificatesInStore(hStore, prevCtx); + sysCtx = CertEnumCertificatesInStore(hSystemStore, sysPrevCtx); + if (ctx == NULL || sysCtx == NULL) + break; + if (CertCompareIntegerBlob(&ctx->pCertInfo->SerialNumber, + &sysCtx->pCertInfo->SerialNumber) != TRUE) + assert(0); + + prevCtx = ctx; + sysPrevCtx = sysCtx; + } + assert(ctx == NULL && sysCtx == NULL); + + CertCloseStore(hStore, 0); + CertCloseStore(hSystemStore, 0); +} + diff --git a/tests/windows/Makefile.am b/tests/windows/Makefile.am index 86de084bb7..942b27b8ee 100644 --- a/tests/windows/Makefile.am +++ b/tests/windows/Makefile.am @@ -68,7 +68,9 @@ TESTS = $(ctests) $(dist_check_SCRIPTS) TESTS_ENVIRONMENT = \ WINEDLLOVERRIDES="crypt32=n,ncrypt=n" \ - LC_ALL="C" \ - EXEEXT=$(EXEEXT) \ - top_builddir="$(top_builddir)" \ + LC_ALL="C" \ + GNUTLS_TEST_SUITE_RUN=1 \ + EXEEXT=$(EXEEXT) \ + GNUTLS_SYSTEM_PRIORITY_FILE=$(abs_top_srcdir)/tests/system.prio \ + top_builddir="$(top_builddir)" \ srcdir="$(srcdir)" diff --git a/tests/windows/cng-windows.c b/tests/windows/cng-windows.c index 3c3edf6f6d..e8046833b0 100644 --- a/tests/windows/cng-windows.c +++ b/tests/windows/cng-windows.c @@ -33,7 +33,7 @@ #include -void doit() +void doit(void) { exit(77); } diff --git a/tests/windows/crypt32.c b/tests/windows/crypt32.c index 11325f7beb..6987f1faf9 100644 --- a/tests/windows/crypt32.c +++ b/tests/windows/crypt32.c @@ -56,6 +56,15 @@ HCERTSTORE WINAPI CertOpenSystemStore( return VALID_PTR; } +__declspec(dllexport) +HCERTSTORE WINAPI CertOpenStore( + LPCSTR lpszStoreProvider, DWORD dwEncodingType, + HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, + const void *pvPara) +{ + return VALID_PTR; +} + __declspec(dllexport) BOOL WINAPI CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags) { diff --git a/tests/x509-cert-callback-legacy.c b/tests/x509-cert-callback-legacy.c index caf515f711..2f7912bd89 100644 --- a/tests/x509-cert-callback-legacy.c +++ b/tests/x509-cert-callback-legacy.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -133,9 +134,8 @@ server_cert_callback(gnutls_session_t session, return 0; } -void doit(void) +static void start(const char *prio) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -146,6 +146,8 @@ void doit(void) gnutls_session_t client; int cret = GNUTLS_E_AGAIN; + success("testing %s\n", prio); + /* General init. */ global_init(); gnutls_global_set_log_function(tls_log_func); @@ -160,8 +162,7 @@ void doit(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, - "NORMAL:-CIPHER-ALL:+AES-128-GCM", NULL); + assert(gnutls_priority_set_direct(server, prio, NULL) >= 0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -191,7 +192,7 @@ void doit(void) if (ret < 0) exit(1); - gnutls_priority_set_direct(client, "NORMAL", NULL); + assert(gnutls_priority_set_direct(client, prio, NULL) >= 0); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -376,10 +377,13 @@ void doit(void) gnutls_global_deinit(); - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3"); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1"); + start("NORMAL"); } diff --git a/tests/x509-cert-callback-ocsp.c b/tests/x509-cert-callback-ocsp.c new file mode 100644 index 0000000000..b0a6c87620 --- /dev/null +++ b/tests/x509-cert-callback-ocsp.c @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2015-2017 Red Hat, Inc. + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" + +/* This tests gnutls_certificate_set_x509_key() */ + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static gnutls_privkey_t server_pkey = NULL; +static gnutls_pcert_st *server_pcert = NULL; +static gnutls_ocsp_data_st ocspdata[2]; + +#define OCSP_SIZE 16 +#define OCSP_DATA "\xff\xff\xf0\xf0\xff\xff\xf0\xf0\xff\xff\xf0\xf0\xff\xff\xf0\xf0" + +static int +server_cert_callback(gnutls_session_t session, + const struct gnutls_cert_retr_st *info, + gnutls_pcert_st **pcert, + unsigned int *pcert_length, + gnutls_ocsp_data_st **ocsp, + unsigned int *ocsp_length, + gnutls_privkey_t *pkey, + unsigned int *flags) +{ + int ret; + gnutls_pcert_st *p; + gnutls_privkey_t lkey; + gnutls_x509_crt_t *certs; + unsigned certs_size, i; + + if (server_pkey == NULL) { + p = gnutls_malloc(2 * sizeof(*p)); + if (p == NULL) + return -1; + + ocspdata[0].response.data = (void*)OCSP_DATA; + ocspdata[0].response.size = OCSP_SIZE; + ocspdata[0].exptime = 0; + + ocspdata[1].response.data = (void*)OCSP_DATA; + ocspdata[1].response.size = OCSP_SIZE; + ocspdata[1].exptime = 0; + + ret = gnutls_x509_crt_list_import2(&certs, &certs_size, + &server_ca3_localhost_cert_chain, + GNUTLS_X509_FMT_PEM, 0); + if (ret < 0) + return -1; + ret = gnutls_pcert_import_x509_list(p, certs, &certs_size, 0); + if (ret < 0) + return -1; + for (i = 0; i < certs_size; i++) + gnutls_x509_crt_deinit(certs[i]); + gnutls_free(certs); + + ret = gnutls_privkey_init(&lkey); + if (ret < 0) + return -1; + + ret = + gnutls_privkey_import_x509_raw(lkey, &server_ca3_key, + GNUTLS_X509_FMT_PEM, NULL, + 0); + if (ret < 0) + return -1; + + server_pcert = p; + server_pkey = lkey; + + *pcert = p; + *pcert_length = 2; + *pkey = lkey; + *ocsp = ocspdata; + *ocsp_length = 2; + } else { + *pcert = server_pcert; + *pcert_length = 2; + *pkey = server_pkey; + *ocsp = ocspdata; + *ocsp_length = 2; + } + + return 0; +} + +static void start(const char *prio) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t scred; + gnutls_session_t server; + gnutls_datum_t response; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t ccred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + + success("testing %s\n", prio); + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(4); + + /* Init server */ + gnutls_certificate_allocate_credentials(&scred); + + gnutls_certificate_set_retrieve_function3(scred, + server_cert_callback); + + gnutls_init(&server, GNUTLS_SERVER); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, scred); + assert(gnutls_priority_set_direct(server, + prio, NULL) >= 0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); + + /* Init client */ + ret = gnutls_certificate_allocate_credentials(&ccred); + if (ret < 0) + exit(1); + + gnutls_certificate_set_verify_flags(ccred, GNUTLS_VERIFY_DISABLE_CRL_CHECKS); + + ret = + gnutls_certificate_set_x509_trust_mem(ccred, &ca3_cert, + GNUTLS_X509_FMT_PEM); + if (ret < 0) + exit(1); + + ret = gnutls_init(&client, GNUTLS_CLIENT); + if (ret < 0) + exit(1); + + ret = gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + ccred); + if (ret < 0) + exit(1); + + assert(gnutls_priority_set_direct(client, prio, NULL)>=0); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + assert((gnutls_session_get_flags(server) & GNUTLS_SFLAGS_CLI_REQUESTED_OCSP) != 0); + assert((gnutls_session_get_flags(client) & GNUTLS_SFLAGS_CLI_REQUESTED_OCSP) != 0); + + ret = gnutls_ocsp_status_request_get(client, &response); + if (ret != 0) + fail("no response was found: %s\n", gnutls_strerror(ret)); + + assert(response.size == OCSP_SIZE); + assert(memcmp(response.data, OCSP_DATA, OCSP_SIZE) == 0); + + if (gnutls_protocol_get_version(client) == GNUTLS_TLS1_3) { + ret = gnutls_ocsp_status_request_get2(client, 1, &response); + if (ret != 0) + fail("no response was found for 1: %s\n", gnutls_strerror(ret)); + + assert(response.size == OCSP_SIZE); + assert(memcmp(response.data, OCSP_DATA, OCSP_SIZE) == 0); + } + + ret = gnutls_ocsp_status_request_get2(client, 2, &response); + if (ret != GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) { + fail("found response in index 2: %s\n", gnutls_strerror(ret)); + } + + gnutls_bye(client, GNUTLS_SHUT_WR); + gnutls_bye(server, GNUTLS_SHUT_WR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(scred); + gnutls_certificate_free_credentials(ccred); + + gnutls_global_deinit(); + + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3"); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1"); + start("NORMAL"); +} diff --git a/tests/x509-cert-callback.c b/tests/x509-cert-callback.c index 6fe3d61406..4d68d936bd 100644 --- a/tests/x509-cert-callback.c +++ b/tests/x509-cert-callback.c @@ -15,9 +15,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with GnuTLS; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see */ #ifdef HAVE_CONFIG_H @@ -28,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -65,11 +65,11 @@ cert_callback(gnutls_session_t session, return -1; } - p = gnutls_malloc(2 * sizeof(*p)); - if (p == NULL) - return -1; - if (g_pkey == NULL) { + p = gnutls_malloc(2 * sizeof(*p)); + if (p == NULL) + return -1; + ret = gnutls_x509_crt_list_import2(&certs, &certs_size, &cli_ca3_cert_chain, GNUTLS_X509_FMT_PEM, 0); @@ -128,11 +128,11 @@ server_cert_callback(gnutls_session_t session, gnutls_x509_crt_t *certs; unsigned certs_size, i; - p = gnutls_malloc(2 * sizeof(*p)); - if (p == NULL) - return -1; - if (server_pkey == NULL) { + p = gnutls_malloc(2 * sizeof(*p)); + if (p == NULL) + return -1; + ret = gnutls_x509_crt_list_import2(&certs, &certs_size, &server_ca3_localhost_cert_chain, GNUTLS_X509_FMT_PEM, 0); @@ -171,9 +171,8 @@ server_cert_callback(gnutls_session_t session, return 0; } -void doit(void) +static void start(const char *prio) { - int exit_code = EXIT_SUCCESS; int ret; /* Server stuff. */ gnutls_certificate_credentials_t serverx509cred; @@ -184,6 +183,8 @@ void doit(void) gnutls_session_t client; int cret = GNUTLS_E_AGAIN; + success("testing %s\n", prio); + /* General init. */ global_init(); gnutls_global_set_log_function(tls_log_func); @@ -198,8 +199,8 @@ void doit(void) gnutls_init(&server, GNUTLS_SERVER); gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); - gnutls_priority_set_direct(server, - "NORMAL:-CIPHER-ALL:+AES-128-GCM", NULL); + assert(gnutls_priority_set_direct(server, + prio, NULL) >= 0); gnutls_transport_set_push_function(server, server_push); gnutls_transport_set_pull_function(server, server_pull); gnutls_transport_set_ptr(server, server); @@ -229,7 +230,7 @@ void doit(void) if (ret < 0) exit(1); - gnutls_priority_set_direct(client, "NORMAL", NULL); + assert(gnutls_priority_set_direct(client, prio, NULL)>=0); gnutls_transport_set_push_function(client, client_push); gnutls_transport_set_pull_function(client, client_pull); gnutls_transport_set_ptr(client, client); @@ -414,10 +415,13 @@ void doit(void) gnutls_global_deinit(); - if (debug > 0) { - if (exit_code == 0) - puts("Self-test successful"); - else - puts("Self-test failed"); - } + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3"); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1"); + start("NORMAL"); } diff --git a/tests/x509-extensions.c b/tests/x509-extensions.c index d480f83646..a062c1ba8a 100644 --- a/tests/x509-extensions.c +++ b/tests/x509-extensions.c @@ -767,7 +767,6 @@ void doit(void) } } gnutls_free(ext.data); - ext.data = NULL; } if (debug) diff --git a/tests/x509-server-verify.c b/tests/x509-server-verify.c new file mode 100644 index 0000000000..ee48d39ad4 --- /dev/null +++ b/tests/x509-server-verify.c @@ -0,0 +1,180 @@ +/* + * Copyright (C) 2015 Red Hat, Inc. + * Copyright (C) 2019 Nikos Mavrogiannopoulos + * + * Author: Nikos Mavrogiannopoulos + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include "utils.h" +#include "eagain-common.h" +#include "cert-common.h" +#include "ocsp-common.h" + +/* This tests gnutls_certificate_verify_peers2() to verify a client certificate + * by server. */ + +const char *side; + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "%s|<%d>| %s", side, level, str); +} + +static void start(const char *prio) +{ + int ret; + /* Server stuff. */ + gnutls_certificate_credentials_t serverx509cred; + gnutls_session_t server; + int sret = GNUTLS_E_AGAIN; + /* Client stuff. */ + gnutls_certificate_credentials_t clientx509cred; + gnutls_session_t client; + int cret = GNUTLS_E_AGAIN; + unsigned index1; + + success("testing %s\n", prio); + + /* General init. */ + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(2); + + assert(gnutls_certificate_allocate_credentials(&serverx509cred)>=0); + ret = gnutls_certificate_set_x509_key_mem2(serverx509cred, &server_ca3_localhost6_cert, + &server_ca3_key, GNUTLS_X509_FMT_PEM, NULL, 0); + assert(ret>=0); + index1 = ret; + + ret = gnutls_certificate_set_ocsp_status_request_mem(serverx509cred, &ocsp_ca3_localhost6_unknown_pem, + index1, GNUTLS_X509_FMT_PEM); + assert(ret>=0); + + assert(gnutls_init(&server, GNUTLS_SERVER)>=0); + gnutls_credentials_set(server, GNUTLS_CRD_CERTIFICATE, serverx509cred); + assert(gnutls_priority_set_direct(server, + prio, NULL) >= 0); + gnutls_transport_set_push_function(server, server_push); + gnutls_transport_set_pull_function(server, server_pull); + gnutls_transport_set_ptr(server, server); + gnutls_certificate_server_set_request(server, GNUTLS_CERT_REQUEST); + + assert(gnutls_certificate_allocate_credentials(&clientx509cred) >= 0); + assert(gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca3_cert, + GNUTLS_X509_FMT_PEM) >= 0); + + ret = gnutls_certificate_set_x509_key_mem2(clientx509cred, &cli_ca3_cert_chain, + &cli_ca3_key, GNUTLS_X509_FMT_PEM, NULL, 0); + assert(ret>=0); + index1 = ret; + + ret = gnutls_certificate_set_ocsp_status_request_mem(clientx509cred, &ocsp_cli_ca3_good_pem, + index1, GNUTLS_X509_FMT_PEM); + assert(ret>=0); + + assert(gnutls_certificate_set_x509_trust_mem(clientx509cred, &ca3_cert, + GNUTLS_X509_FMT_PEM) >= 0); + + + assert(gnutls_init(&client, GNUTLS_CLIENT) >= 0); + + assert(gnutls_credentials_set(client, GNUTLS_CRD_CERTIFICATE, + clientx509cred) >= 0); + + assert(gnutls_priority_set_direct(client, prio, NULL)>=0); + gnutls_transport_set_push_function(client, client_push); + gnutls_transport_set_pull_function(client, client_pull); + gnutls_transport_set_ptr(client, client); + + HANDSHAKE(client, server); + + /* check verify peers in server side */ + { + unsigned status; + + ret = gnutls_certificate_verify_peers2(server, &status); + if (ret < 0) { + fail("could not verify client certificate: %s\n", + gnutls_strerror(ret)); + } + + if (status == 0) + fail("No CAs present but succeeded!\n"); + + assert(gnutls_certificate_set_x509_trust_mem(serverx509cred, &ca3_cert, + GNUTLS_X509_FMT_PEM) >= 0); + + ret = gnutls_certificate_verify_peers2(server, &status); + if (ret < 0) { + fail("could not verify client certificate: %s\n", + gnutls_strerror(ret)); + } + + if (status != 0) + fail("Verification should have succeeded!\n"); + + /* under TLS1.3 the client can send OCSP responses too */ + if (gnutls_protocol_get_version(server) == GNUTLS_TLS1_3) { + ret = gnutls_ocsp_status_request_is_checked(server, GNUTLS_OCSP_SR_IS_AVAIL); + assert(ret >= 0); + + ret = gnutls_ocsp_status_request_is_checked(server, 0); + assert(ret >= 0); + } else { + ret = gnutls_ocsp_status_request_is_checked(server, GNUTLS_OCSP_SR_IS_AVAIL); + assert(ret == 0); + + ret = gnutls_ocsp_status_request_is_checked(server, 0); + assert(ret == 0); + } + } + + gnutls_bye(client, GNUTLS_SHUT_RDWR); + gnutls_bye(server, GNUTLS_SHUT_RDWR); + + gnutls_deinit(client); + gnutls_deinit(server); + + gnutls_certificate_free_credentials(serverx509cred); + gnutls_certificate_free_credentials(clientx509cred); + + gnutls_global_deinit(); + + reset_buffers(); +} + +void doit(void) +{ + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.3"); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-TLS-ALL:+VERS-TLS1.1"); + start("NORMAL"); +} diff --git a/tests/x509cert-dntypes.c b/tests/x509cert-dntypes.c new file mode 100644 index 0000000000..10d795012d --- /dev/null +++ b/tests/x509cert-dntypes.c @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2020 Pierre Ossman for Cendio AB + * + * Author: Pierre Ossman + * + * This file is part of GnuTLS. + * + * GnuTLS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuTLS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GnuTLS; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +static void tls_log_func(int level, const char *str) +{ + fprintf(stderr, "<%d>| %s", level, str); +} + +/* the issuer/subject connection between the server cert and the CA + * cert uses different ASN.1 types, which is uncommon but allowed */ + +static unsigned char server_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIIDZTCCAc2gAwIBAgIUB7aVTQvtbBpOEtKELkBkLViM0eIwDQYJKoZIhvcNAQEL\n" + "BQAwEjEQMA4GA1UEAwwHVGVzdCBDQTAeFw0yMDAzMjYxMDE4NTdaFw0yMTAzMjYx\n" + "MDE4NTdaMBYxFDASBgNVBAMMC1Rlc3QgY2xpZW50MIIBIjANBgkqhkiG9w0BAQEF\n" + "AAOCAQ8AMIIBCgKCAQEAviqj5S/xe39agbMnq/oPAQmdIhalB17Ewc3AZlD8n+zQ\n" + "scPDNvnk4gxSeSXePtXmh0OaGcBKbMAkjiyo2gPBmV3ay34LQuk97nJxE2TUAWMm\n" + "S8yFwP3yoE+GZ5eYjv+HGQxeAP9uHLjho/jHjVGgUOCVv1QjsKyRx8Tuvy9TH3ON\n" + "DuMPw3Jmnq0OhLy2+SjU0ug5jxfWJvnfeGoFzRgalmWGyoAQsH9bqha/D44QSen+\n" + "Zbbt/A4uNIILAENYuHXEfvpmBuZPpocOb6h2huGbp6iHZfdZUHso37UmWT6PXh+2\n" + "dASPaCpAr3bURBhnEsQM43njb8METZewMeoQxwZC0QIDAQABoy8wLTAMBgNVHRMB\n" + "Af8EAjAAMB0GA1UdDgQWBBSb3h7ZbajS/2RWx2a7hTVSkur0FDANBgkqhkiG9w0B\n" + "AQsFAAOCAYEAPfwyvOwNEjIvlifjBVhiWmrtZAS2YaY9jqFnaA2PvYY2FVyC3AMu\n" + "3BGAorau/4DL3P92/9SlygEmBQpqCq+AJnQRH6WKFT4avAOmw3yc0++st+DhGK0I\n" + "6Cr69WccVi0Kmxi1XP4dpPDWSuVCOP6rGc3ulgEH83xF4ZL+3qVA9Fihsie3ZZme\n" + "7mqWOznVO1MZHLDFIUEoRdOSin5bIkl7FPOCZqMsWRM41GuA1h4aX/X5dLeqRW1c\n" + "mJ5CNRWwPIPcwgqeldFnx07svCv9QseUDaIw+C9vZOlgfIgp0qeYoR6fsD38WcUC\n" + "eJPsOUwhdhMcw+/PM16iwzd89dI+PCecFY9FeLh9YeihZm0DnG8L0To1Y2ry+WRf\n" + "w5knR3FReHPcelymvSKZSEG0d/KKHXBeKWgcrCrdnn4ya71eblsNzO3vnxB5k0Zj\n" + "WcQ3wfeftQKDEIuaRHUP6B4zx2teJWMWvJLcXuavoqo0z3L5EN74RztCpnP9ykSH\n" + "ZsYWoJ3aelFv\n" + "-----END CERTIFICATE-----\n"; + +static unsigned char ca_pem[] = + "-----BEGIN CERTIFICATE-----\n" + "MIID5DCCAkygAwIBAgIUB4lnLAeQ20wlYbqt5ykgvWOPNzgwDQYJKoZIhvcNAQEL\n" + "BQAwEjEQMA4GA1UEAxMHVGVzdCBDQTAeFw0yMDAzMjYxMDI0MjhaFw0yMDAzMjcx\n" + "MDI0MjhaMBIxEDAOBgNVBAMTB1Rlc3QgQ0EwggGiMA0GCSqGSIb3DQEBAQUAA4IB\n" + "jwAwggGKAoIBgQCt9z/noU7qCPquzzgwNvu/rwXyIvxmqdWhpfpBOmVq8wpgUDUU\n" + "cQ94F65UfTo3EcYXCoDs43E4Wo8KmF5YQM2xK+LrH28XmpL3z+NoQGaZoUVrMWp6\n" + "rbIeoGZvITaaGn2uEbGT7iRkBUdS4wOjUT13IxpG8cM4d0i0DIsqSlUPnQCfyMqf\n" + "jsVhO9IQsn7qMo0+2nNCI5JqblEXRvL39hHzJMOsq1NRqZO1Zjt9HCIB7m7Q42Jx\n" + "e8zm7RzTiBFVKecxb5h4mmt3tUZQ0Kjd94yE6ARSE0rULmO+6H7hgI6sU8vqfSFe\n" + "DimQ5mPReumBRDcErX+c7bRGPRul41kAB8XvPmAHG8xCepjH8xrgY/FeVBQT74xm\n" + "MEYQaxdGpa8Azx6MZCrZOI0rzu+zI0CBQGE1h1Xk8HBozrn/G2OOAZcXyzHzq56R\n" + "Z52zEQYFZmKH9tHTDI6fMfo8clr7esb/wmgEOt/lJYE9IMJrzUh+IwWuowdYaDVj\n" + "nMrboUBVepmBKSUCAwEAAaMyMDAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU\n" + "rhkYiczAkbCcVfNr67VGGaqilbgwDQYJKoZIhvcNAQELBQADggGBAGYiUTKdYBXk\n" + "lZFIhZkCc33/lCgJw2mSrdAd+xJmJonRPy3qmYy3HniOmQdRVqResLALubz89VjJ\n" + "dSeokujFrlNtb4CygojseqTsxWgeZlKjLU3tJ/Xn+DFIiP7k9+WPW7KFIIW0fq61\n" + "MAI0lKjqpC8sJTlXoJemDw9MW/380nKr+K1YY3arRzsSHEIeA54xOggKEwvgz11A\n" + "47xT83WoLwFQ4e9LZfCsL/M51lsLHAlJzDKyTTeSxCi/C6kUIzx8QyxHKYgBuNxz\n" + "8vVLY/YzUv/l5ELYQ9gkAX0vZWdw7pqASUY8yvbzImrWqjFAHeN3zK687Ke9uppS\n" + "dmjvPwvTK+SKm++NR8YCwb3xqHQHMYHV3lxjlOhaN6rxBW0l4gtvb2FMlhcljiZ+\n" + "tF2ObVwEs6nqJSGrzubp0os+WmnbVSCaHz9jnRWb68C87mXCZkbA7FTSKJOVuqRM\n" + "vVTcHQ7jwGQ2/SvikndFQ53zi2j9o/jTOiFv29rEOeHu67UAiFSi2A==\n" + "-----END CERTIFICATE-----\n"; + +const gnutls_datum_t server = { server_pem, sizeof(server_pem)-1 }; +const gnutls_datum_t ca = { ca_pem, sizeof(ca_pem)-1 }; + +void doit(void) +{ + int ret; + gnutls_x509_crt_t server_crt, ca_crt; + + /* this must be called once in the program + */ + global_init(); + + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + gnutls_x509_crt_init(&server_crt); + + ret = + gnutls_x509_crt_import(server_crt, &server, GNUTLS_X509_FMT_PEM); + if (ret < 0) + fail("gnutls_x509_crt_import"); + + gnutls_x509_crt_init(&ca_crt); + + ret = + gnutls_x509_crt_import(ca_crt, &ca, GNUTLS_X509_FMT_PEM); + if (ret < 0) + fail("gnutls_x509_crt_import"); + + ret = gnutls_x509_crt_check_issuer(server_crt, ca_crt); + if (!ret) + fail("gnutls_x509_crt_check_issuer"); + + gnutls_x509_crt_deinit(ca_crt); + gnutls_x509_crt_deinit(server_crt); + + gnutls_global_deinit(); + + if (debug) + success("success"); +} diff --git a/tests/x509cert.c b/tests/x509cert.c index 13f0ed3aaf..fe38fc2af6 100644 --- a/tests/x509cert.c +++ b/tests/x509cert.c @@ -52,6 +52,7 @@ static void tls_log_func(int level, const char *str) fprintf(stderr, "<%d>| %s", level, str); } +static char buf[16*1024]; #define LIST_SIZE 3 void doit(void) @@ -64,6 +65,7 @@ void doit(void) char dn[128]; size_t dn_size; unsigned int list_size; + size_t buf_size; gnutls_x509_privkey_t get_key; gnutls_x509_crt_t *get_crts; @@ -157,8 +159,31 @@ void doit(void) get_datum.data, server_ca3_key.data); } + if (strlen((char*)get_datum.data) != get_datum.size) { + fail("exported key %u vs. %u\n\n%s\n", + get_datum.size, (unsigned)strlen((char*)get_datum.data), + get_datum.data); + } + gnutls_free(get_datum.data); + buf_size = sizeof(buf); + ret = + gnutls_x509_privkey_export(get_key, + GNUTLS_X509_FMT_PEM, + buf, &buf_size); + if (ret < 0) + fail("gnutls_x509_privkey_export"); + + if (buf_size != get_datum.size || + buf_size != strlen(buf) || + memcmp(buf, server_ca3_key.data, buf_size) != 0) { + fail( + "exported key %u vs. %u\n\n%s\n\nvs.\n\n%s", + (int)buf_size, server_ca3_key.size, + buf, server_ca3_key.data); + } + ret = gnutls_certificate_get_x509_crt(x509_cred, 0, &get_crts, &n_get_crts); if (ret < 0) diff --git a/tests/x509dn.c b/tests/x509dn.c index d84151149a..056351c19d 100644 --- a/tests/x509dn.c +++ b/tests/x509dn.c @@ -49,6 +49,7 @@ int main(int argc, char **argv) #endif #include #include +#include #include #include @@ -65,9 +66,6 @@ static void tls_log_func(int level, const char *str) str); } -/* A very basic TLS client, with anonymous authentication. - */ - #define MAX_BUF 1024 #define MSG "Hello TLS" @@ -135,10 +133,10 @@ cert_callback(gnutls_session_t session, } -static void client(int sd) +static void client(int sd, const char *prio) { int ret, ii; - gnutls_session_t session; + gnutls_session_t session = NULL; char buffer[MAX_BUF + 1]; gnutls_certificate_credentials_t xcred; @@ -165,8 +163,7 @@ static void client(int sd) */ gnutls_init(&session, GNUTLS_CLIENT); - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); /* put the x509 credentials to the current session */ @@ -234,33 +231,13 @@ static void client(int sd) */ #define MAX_BUF 1024 -#define DH_BITS 1024 - -/* These are global */ - -static gnutls_dh_params_t dh_params; - -static int generate_dh_params(void) -{ - const gnutls_datum_t p3 = { (void *) pkcs3, strlen(pkcs3) }; - /* Generate Diffie-Hellman parameters - for use with DHE - * kx algorithms. These should be discarded and regenerated - * once a day, once a week or once a month. Depending on the - * security requirements. - */ - gnutls_dh_params_init(&dh_params); - return gnutls_dh_params_import_pkcs3(dh_params, &p3, - GNUTLS_X509_FMT_PEM); -} - - -static void server(int sd) +static void server(int sd, const char *prio) { -gnutls_certificate_credentials_t x509_cred; -int ret; -gnutls_session_t session; -char buffer[MAX_BUF + 1]; + gnutls_certificate_credentials_t x509_cred; + int ret; + gnutls_session_t session; + char buffer[MAX_BUF + 1]; /* this must be called once in the program */ global_init(); @@ -281,19 +258,9 @@ char buffer[MAX_BUF + 1]; &server_ca3_key, GNUTLS_X509_FMT_PEM); - if (debug) - success("Launched, generating DH parameters...\n"); - - generate_dh_params(); - - gnutls_certificate_set_dh_params(x509_cred, dh_params); - gnutls_init(&session, GNUTLS_SERVER); - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); @@ -302,8 +269,6 @@ char buffer[MAX_BUF + 1]; gnutls_certificate_server_set_request(session, GNUTLS_CERT_REQUEST); - gnutls_dh_set_prime_bits(session, DH_BITS); - gnutls_transport_set_int(session, sd); gnutls_handshake_set_timeout(session, 20 * 1000); @@ -355,20 +320,20 @@ char buffer[MAX_BUF + 1]; gnutls_certificate_free_credentials(x509_cred); - gnutls_dh_params_deinit(dh_params); - gnutls_global_deinit(); if (debug) success("server: finished\n"); } - -void doit(void) +static +void start(const char *prio) { int sockets[2]; int err; + success("trying %s\n", prio); + signal(SIGPIPE, SIG_IGN); err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); @@ -389,13 +354,21 @@ void doit(void) int status; /* parent */ close(sockets[1]); - server(sockets[0]); + server(sockets[0], prio); wait(&status); check_wait_status(status); } else { close(sockets[0]); - client(sockets[1]); + client(sockets[1], prio); + exit(0); } } +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL"); +} + #endif /* _WIN32 */ diff --git a/tests/x509self.c b/tests/x509self.c index 00ff480588..b22dfea2b9 100644 --- a/tests/x509self.c +++ b/tests/x509self.c @@ -29,6 +29,7 @@ #include #include +#include #include "cert-common.h" #if defined(_WIN32) @@ -63,15 +64,11 @@ static void tls_log_func(int level, const char *str) str); } -/* A very basic TLS client, with anonymous authentication. - */ - - #define MAX_BUF 1024 #define MSG "Hello TLS" -static void client(int sd) +static void client(int sd, const char *prio) { int ret, ii; gnutls_session_t session; @@ -98,8 +95,7 @@ static void client(int sd) */ gnutls_init(&session, GNUTLS_CLIENT); - /* Use default priorities */ - gnutls_priority_set_direct(session, "NORMAL", NULL); + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); /* put the x509 credentials to the current session */ @@ -147,7 +143,9 @@ static void client(int sd) goto end; } - ret = gnutls_record_recv(session, buffer, MAX_BUF); + do { + ret = gnutls_record_recv(session, buffer, MAX_BUF); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); if (debug) success("client: recv returned %d.\n", ret); @@ -203,58 +201,14 @@ static void client(int sd) #define MAX_BUF 1024 #define DH_BITS 1024 -/* These are global */ -gnutls_certificate_credentials_t x509_cred; -static gnutls_session_t initialize_tls_session(void) +static void server(int sd, const char *prio) { + int ret; gnutls_session_t session; + char buffer[MAX_BUF + 1]; + gnutls_certificate_credentials_t x509_cred; - gnutls_init(&session, GNUTLS_SERVER); - - /* avoid calling all the priority functions, since the defaults - * are adequate. - */ - gnutls_priority_set_direct(session, "NORMAL", NULL); - - gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - - /* request client certificate if any. - Moved to later on to be able to test re-handshakes. - gnutls_certificate_server_set_request (session, GNUTLS_CERT_REQUEST); - */ - - gnutls_dh_set_prime_bits(session, DH_BITS); - - return session; -} - -static gnutls_dh_params_t dh_params; - -static int generate_dh_params(void) -{ - const gnutls_datum_t p3 = { (void *) pkcs3, strlen(pkcs3) }; - /* Generate Diffie-Hellman parameters - for use with DHE - * kx algorithms. These should be discarded and regenerated - * once a day, once a week or once a month. Depending on the - * security requirements. - */ - gnutls_dh_params_init(&dh_params); - return gnutls_dh_params_import_pkcs3(dh_params, &p3, - GNUTLS_X509_FMT_PEM); -} - -int err, ret; -char topbuf[512]; -gnutls_session_t session; -char buffer[MAX_BUF + 1]; -int optval = 1; - - -static void server(int sd) -{ - /* this must be called once in the program - */ global_init(); gnutls_global_set_log_function(tls_log_func); @@ -273,11 +227,19 @@ static void server(int sd) if (debug) success("Launched, generating DH parameters...\n"); - generate_dh_params(); + gnutls_init(&session, GNUTLS_SERVER); + + assert(gnutls_priority_set_direct(session, prio, NULL)>=0); + + gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, x509_cred); - gnutls_certificate_set_dh_params(x509_cred, dh_params); + /* request client certificate if any. + Moved to later on to be able to test re-handshakes. + gnutls_certificate_server_set_request (session, GNUTLS_CERT_REQUEST); + */ + + gnutls_dh_set_prime_bits(session, DH_BITS); - session = initialize_tls_session(); gnutls_transport_set_int(session, sd); ret = gnutls_handshake(session); @@ -301,7 +263,9 @@ static void server(int sd) for (;;) { memset(buffer, 0, MAX_BUF + 1); - ret = gnutls_record_recv(session, buffer, MAX_BUF); + do { + ret = gnutls_record_recv(session, buffer, MAX_BUF); + } while(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED); if (ret == 0) { if (debug) @@ -309,7 +273,7 @@ static void server(int sd) ("server: Peer has closed the GnuTLS connection\n"); break; } else if (ret < 0) { - fail("server: Received corrupted data(%d). Closing...\n", ret); + fail("server: Received corrupted data(%s). Closing...\n", gnutls_strerror(ret)); break; } else if (ret > 0) { gnutls_certificate_server_set_request(session, @@ -351,8 +315,6 @@ static void server(int sd) gnutls_certificate_free_credentials(x509_cred); - gnutls_dh_params_deinit(dh_params); - gnutls_global_deinit(); if (debug) @@ -360,9 +322,15 @@ static void server(int sd) } -void doit(void) +static +void start(const char *prio) { int sockets[2]; + int err; + + success("trying %s\n", prio); + + signal(SIGPIPE, SIG_IGN); err = socketpair(AF_UNIX, SOCK_STREAM, 0, sockets); if (err == -1) { @@ -381,10 +349,22 @@ void doit(void) if (child) { int status; - server(sockets[0]); + close(sockets[1]); + server(sockets[0], prio); wait(&status); - } else - client(sockets[1]); + check_wait_status(status); + } else { + close(sockets[0]); + client(sockets[1], prio); + exit(0); + } +} + +void doit(void) +{ + start("NORMAL:-VERS-ALL:+VERS-TLS1.3"); + start("NORMAL:-VERS-ALL:+VERS-TLS1.2"); + start("NORMAL"); } #endif /* _WIN32 */ diff --git a/tests/x509sign-verify-common.h b/tests/x509sign-verify-common.h index 1aaf3dce65..80aea5cd63 100644 --- a/tests/x509sign-verify-common.h +++ b/tests/x509sign-verify-common.h @@ -1,3 +1,6 @@ +#ifndef GNUTLS_TESTS_X509SIGN_VERIFY_COMMON_H +#define GNUTLS_TESTS_X509SIGN_VERIFY_COMMON_H + static void tls_log_func(int level, const char *str) { fprintf(stderr, "<%d> %s", level, str); @@ -21,6 +24,39 @@ const gnutls_datum_t sha256_data = { 32 }; +/* gost r 34.11-94 hash of "hello" string */ +const gnutls_datum_t gostr94_data = { + (void *) + "\x92\xea\x6d\xdb\xaf\x40\x02\x0d\xf3\x65" + "\x1f\x27\x8f\xd7\x15\x12\x17\xa2\x4a\xa8" + "\xd2\x2e\xbd\x25\x19\xcf\xd4\xd8\x9e\x64" + "\x50\xea", + 32 +}; + +/* Streebog-256 hash of "hello" string */ +const gnutls_datum_t streebog256_data = { + (void *) + "\x3f\xb0\x70\x0a\x41\xce\x6e\x41\x41\x3b" + "\xa7\x64\xf9\x8b\xf2\x13\x5b\xa6\xde\xd5" + "\x16\xbe\xa2\xfa\xe8\x42\x9c\xc5\xbd\xd4" + "\x6d\x6d", + 32 +}; + +/* Streebog-512 hash of "hello" string */ +const gnutls_datum_t streebog512_data = { + (void *) + "\x8d\xf4\x14\x26\x09\x66\xbe\xb7\xb3\x4d" + "\x92\x07\x63\x07\x9e\x15\xdf\x1f\x63\x29" + "\x7e\xb3\xdd\x43\x11\xe8\xb5\x85\xd4\xbf" + "\x2f\x59\x23\x21\x4f\x1d\xfe\xd3\xfd\xee" + "\x4a\xaf\x01\x83\x30\xa1\x2a\xcd\xe0\xef" + "\xcc\x33\x8e\xb5\x29\x22\xf3\xe5\x71\x21" + "\x2d\x42\xc8\xde", + 64 +}; + const gnutls_datum_t invalid_hash_data = { (void *) "\xaa\xf4\xc6\x1d\xdc\xca\xe8\xa2\xda\xbe" @@ -71,11 +107,19 @@ void test_sig(gnutls_pk_algorithm_t pk, unsigned hash, unsigned bits) const gnutls_datum_t *hash_data; int ret; unsigned j; + unsigned vflags = 0; - if (hash == GNUTLS_DIG_SHA1) + if (hash == GNUTLS_DIG_SHA1) { hash_data = &sha1_data; - else if (hash == GNUTLS_DIG_SHA256) + vflags |= GNUTLS_VERIFY_ALLOW_SIGN_WITH_SHA1; + } else if (hash == GNUTLS_DIG_SHA256) hash_data = &sha256_data; + else if (hash == GNUTLS_DIG_GOSTR_94) + hash_data = &gostr94_data; + else if (hash == GNUTLS_DIG_STREEBOG_256) + hash_data = &streebog256_data; + else if (hash == GNUTLS_DIG_STREEBOG_512) + hash_data = &streebog512_data; else abort(); @@ -108,7 +152,7 @@ void test_sig(gnutls_pk_algorithm_t pk, unsigned hash, unsigned bits) ret = gnutls_pubkey_verify_hash2(pubkey, - sign_algo, 0, + sign_algo, vflags, hash_data, &signature); if (ret < 0) { print_keys(privkey, pubkey); @@ -118,7 +162,7 @@ void test_sig(gnutls_pk_algorithm_t pk, unsigned hash, unsigned bits) /* should fail */ ret = gnutls_pubkey_verify_hash2(pubkey, - sign_algo, 0, + sign_algo, vflags, &invalid_hash_data, &signature); if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) { @@ -131,14 +175,14 @@ void test_sig(gnutls_pk_algorithm_t pk, unsigned hash, unsigned bits) (pubkey, NULL), hash); ret = - gnutls_pubkey_verify_hash2(pubkey, sign_algo, 0, + gnutls_pubkey_verify_hash2(pubkey, sign_algo, vflags, hash_data, &signature); if (ret < 0) ERR; /* should fail */ ret = - gnutls_pubkey_verify_hash2(pubkey, sign_algo, 0, + gnutls_pubkey_verify_hash2(pubkey, sign_algo, vflags, &invalid_hash_data, &signature); if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) { @@ -168,7 +212,7 @@ void test_sig(gnutls_pk_algorithm_t pk, unsigned hash, unsigned bits) ret = gnutls_pubkey_verify_hash2(pubkey, sign_algo, - GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, + vflags|GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, hash_data, &signature); if (ret < 0) { @@ -182,3 +226,5 @@ void test_sig(gnutls_pk_algorithm_t pk, unsigned hash, unsigned bits) gnutls_pubkey_deinit(pubkey); } } + +#endif /* GNUTLS_TESTS_X509SIGN_VERIFY_COMMON_H */ diff --git a/tests/x509sign-verify-error.c b/tests/x509sign-verify-error.c index 54bdc40abe..97c9666859 100644 --- a/tests/x509sign-verify-error.c +++ b/tests/x509sign-verify-error.c @@ -181,7 +181,6 @@ void doit(void) fail("gnutls_privkey_sign_hash\n"); gnutls_free(signature2.data); - signature2.data = NULL; _gnutls_lib_simulate_error(); ret = gnutls_privkey_sign_hash(privkey, GNUTLS_DIG_SHA1, 0, diff --git a/tests/x509sign-verify-gost.c b/tests/x509sign-verify-gost.c new file mode 100644 index 0000000000..65e49be7c1 --- /dev/null +++ b/tests/x509sign-verify-gost.c @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2016-2017 Free Software Foundation, Inc. + * + * Author: Dmitry Eremin-Solenikov + * + * This file is part of GnuTLS. + * + * The GnuTLS is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/* Parts copied from GnuTLS example programs. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#ifndef _WIN32 +# include +# include +# include +# include +# include +#endif +#include +#include +#include + +#include "utils.h" + +#include "x509sign-verify-common.h" + +void doit(void) +{ +#ifndef ENABLE_GOST + exit(77); +#else + global_init(); + gnutls_global_set_log_function(tls_log_func); + if (debug) + gnutls_global_set_log_level(6); + + test_sig(GNUTLS_PK_GOST_01, GNUTLS_DIG_GOSTR_94, GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_GOST256CPA)); + test_sig(GNUTLS_PK_GOST_12_256, GNUTLS_DIG_STREEBOG_256, GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_GOST256CPA)); + test_sig(GNUTLS_PK_GOST_01, GNUTLS_DIG_GOSTR_94, GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_GOST256CPXA)); + test_sig(GNUTLS_PK_GOST_12_256, GNUTLS_DIG_STREEBOG_256, GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_GOST256CPXA)); + test_sig(GNUTLS_PK_GOST_12_512, GNUTLS_DIG_STREEBOG_512, GNUTLS_CURVE_TO_BITS(GNUTLS_ECC_CURVE_GOST512A)); + + gnutls_global_deinit(); +#endif +} diff --git a/tests/x509sign-verify-rsa.c b/tests/x509sign-verify-rsa.c index c0f1be1813..f527606e8d 100644 --- a/tests/x509sign-verify-rsa.c +++ b/tests/x509sign-verify-rsa.c @@ -62,6 +62,7 @@ void doit(void) test_sig(GNUTLS_PK_RSA, GNUTLS_DIG_SHA1, rsa_size1); test_sig(GNUTLS_PK_RSA, GNUTLS_DIG_SHA256, rsa_size2); + test_sig(GNUTLS_PK_RSA_PSS, GNUTLS_DIG_SHA256, rsa_size2); gnutls_global_deinit(); } diff --git a/tests/x509sign-verify.c b/tests/x509sign-verify.c index 5379f36841..e815d28b55 100644 --- a/tests/x509sign-verify.c +++ b/tests/x509sign-verify.c @@ -1,7 +1,7 @@ /* - * Copyright (C) 2004-2012 Free Software Foundation, Inc. + * Copyright (C) 2017 Red Hat, Inc. * - * Author: Nikos Mavrogiannopoulos, Simon Josefsson + * Author: Nikos Mavrogiannopoulos * * This file is part of GnuTLS. * @@ -20,8 +20,6 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -/* Parts copied from GnuTLS example programs. */ - #ifdef HAVE_CONFIG_H #include #endif @@ -39,122 +37,44 @@ #include #include #include - +#include "common-key-tests.h" #include "utils.h" +/* verifies whether the sign-data and verify-data APIs + * operate as expected */ + static void tls_log_func(int level, const char *str) { fprintf(stderr, "<%d> %s", level, str); } /* sha1 hash of "hello" string */ -const gnutls_datum_t hash_data = { +const gnutls_datum_t raw_data = { (void *) "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" "\xde\x0f\x3b\x48\x2c\xd9\xae\xa9\x43\x4d", 20 }; -const gnutls_datum_t invalid_hash_data = { +const gnutls_datum_t invalid_raw_data = { (void *) - "\xaa\xf4\xc6\x1d\xdc\xca\xe8\xa2\xda\xbe" - "\xde\x0f\x3b\x48\x2c\xb9\xae\xa9\x43\x4d", + "\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe" + "\xde\x0f\x3b\x48\x3c\xd9\xae\xa9\x43\x4d", 20 }; -const gnutls_datum_t raw_data = { - (void *) "hello", - 5 -}; - -static char pem1_cert[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICHjCCAYmgAwIBAgIERiYdNzALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTI3WhcNMDgwNDE3MTMyOTI3WjAdMRsw\n" - "GQYDVQQDExJHbnVUTFMgdGVzdCBjbGllbnQwgZwwCwYJKoZIhvcNAQEBA4GMADCB\n" - "iAKBgLtmQ/Xyxde2jMzF3/WIO7HJS2oOoa0gUEAIgKFPXKPQ+GzP5jz37AR2ExeL\n" - "ZIkiW8DdU3w77XwEu4C5KL6Om8aOoKUSy/VXHqLnu7czSZ/ju0quak1o/8kR4jKN\n" - "zj2AC41179gAgY8oBAOgIo1hBAf6tjd9IQdJ0glhaZiQo1ipAgMBAAGjdjB0MAwG\n" - "A1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDwYDVR0PAQH/BAUDAweg\n" - "ADAdBgNVHQ4EFgQUTLkKm/odNON+3svSBxX+odrLaJEwHwYDVR0jBBgwFoAU6Twc\n" - "+62SbuYGpFYsouHAUyfI8pUwCwYJKoZIhvcNAQEFA4GBALujmBJVZnvaTXr9cFRJ\n" - "jpfc/3X7sLUsMvumcDE01ls/cG5mIatmiyEU9qI3jbgUf82z23ON/acwJf875D3/\n" - "U7jyOsBJ44SEQITbin2yUeJMIm1tievvdNXBDfW95AM507ShzP12sfiJkJfjjdhy\n" - "dc8Siq5JojruiMizAf0pA7in\n" "-----END CERTIFICATE-----\n"; - -static char pem1_key[] = - "-----BEGIN RSA PRIVATE KEY-----\n" - "MIICXAIBAAKBgQC7ZkP18sXXtozMxd/1iDuxyUtqDqGtIFBACIChT1yj0Phsz+Y8\n" - "9+wEdhMXi2SJIlvA3VN8O+18BLuAuSi+jpvGjqClEsv1Vx6i57u3M0mf47tKrmpN\n" - "aP/JEeIyjc49gAuNde/YAIGPKAQDoCKNYQQH+rY3fSEHSdIJYWmYkKNYqQIDAQAB\n" - "AoGADpmARG5CQxS+AesNkGmpauepiCz1JBF/JwnyiX6vEzUh0Ypd39SZztwrDxvF\n" - "PJjQaKVljml1zkJpIDVsqvHdyVdse8M+Qn6hw4x2p5rogdvhhIL1mdWo7jWeVJTF\n" - "RKB7zLdMPs3ySdtcIQaF9nUAQ2KJEvldkO3m/bRJFEp54k0CQQDYy+RlTmwRD6hy\n" - "7UtMjR0H3CSZJeQ8svMCxHLmOluG9H1UKk55ZBYfRTsXniqUkJBZ5wuV1L+pR9EK\n" - "ca89a+1VAkEA3UmBelwEv2u9cAU1QjKjmwju1JgXbrjEohK+3B5y0ESEXPAwNQT9\n" - "TrDM1m9AyxYTWLxX93dI5QwNFJtmbtjeBQJARSCWXhsoaDRG8QZrCSjBxfzTCqZD\n" - "ZXtl807ymCipgJm60LiAt0JLr4LiucAsMZz6+j+quQbSakbFCACB8SLV1QJBAKZQ\n" - "YKf+EPNtnmta/rRKKvySsi3GQZZN+Dt3q0r094XgeTsAqrqujVNfPhTMeP4qEVBX\n" - "/iVX2cmMTSh3w3z8MaECQEp0XJWDVKOwcTW6Ajp9SowtmiZ3YDYo1LF9igb4iaLv\n" - "sWZGfbnU3ryjvkb6YuFjgtzbZDZHWQCo8/cOtOBmPdk=\n" - "-----END RSA PRIVATE KEY-----\n"; - -static char pem2_cert[] = - "-----BEGIN CERTIFICATE-----\n" - "MIIDbzCCAtqgAwIBAgIERiYdRTALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n" - "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTQxWhcNMDgwNDE3MTMyOTQxWjA3MRsw\n" - "GQYDVQQKExJHbnVUTFMgdGVzdCBzZXJ2ZXIxGDAWBgNVBAMTD3Rlc3QuZ251dGxz\n" - "Lm9yZzCCAbQwggEpBgcqhkjOOAQBMIIBHAKBgLmE9VqBvhoNxYpzjwybL5u2DkvD\n" - "dBp/ZK2d8yjFoEe8m1dW8ZfVfjcD6fJM9OOLfzCjXS+7oaI3wuo1jx+xX6aiXwHx\n" - "IzYr5E8vLd2d1TqmOa96UXzSJY6XdM8exXtLdkOBBx8GFLhuWBLhkOI3b9Ib7GjF\n" - "WOLmMOBqXixjeOwHAhSfVoxIZC/+jap6bZbbBF0W7wilcQKBgGIGfuRcdgi3Rhpd\n" - "15fUKiH7HzHJ0vT6Odgn0Zv8J12nCqca/FPBL0PCN8iFfz1Mq12BMvsdXh5UERYg\n" - "xoBa2YybQ/Dda6D0w/KKnDnSHHsP7/ook4/SoSLr3OCKi60oDs/vCYXpNr2LelDV\n" - "e/clDWxgEcTvcJDP1hvru47GPjqXA4GEAAKBgA+Kh1fy0cLcrN9Liw+Luin34QPk\n" - "VfqymAfW/RKxgLz1urRQ1H+gDkPnn8l4EV/l5Awsa2qkNdy9VOVgNpox0YpZbmsc\n" - "ur0uuut8h+/ayN2h66SD5out+vqOW9c3yDI+lsI+9EPafZECD7e8+O+P90EAXpbf\n" - "DwiW3Oqy6QaCr9Ivo4GTMIGQMAwGA1UdEwEB/wQCMAAwGgYDVR0RBBMwEYIPdGVz\n" - "dC5nbnV0bHMub3JnMBMGA1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdDwEB/wQFAwMH\n" - "gAAwHQYDVR0OBBYEFL/su87Y6HtwVuzz0SuS1tSZClvzMB8GA1UdIwQYMBaAFOk8\n" - "HPutkm7mBqRWLKLhwFMnyPKVMAsGCSqGSIb3DQEBBQOBgQBCsrnfD1xzh8/Eih1f\n" - "x+M0lPoX1Re5L2ElHI6DJpHYOBPwf9glwxnet2+avzgUQDUFwUSxOhodpyeaACXD\n" - "o0gGVpcH8sOBTQ+aTdM37hGkPxoXjtIkR/LgG5nP2H2JRd5TkW8l13JdM4MJFB4W\n" - "QcDzQ8REwidsfh9uKAluk1c/KQ==\n" "-----END CERTIFICATE-----\n"; - -static char pem2_key[] = - "-----BEGIN DSA PRIVATE KEY-----\n" - "MIIBugIBAAKBgQC5hPVagb4aDcWKc48Mmy+btg5Lw3Qaf2StnfMoxaBHvJtXVvGX\n" - "1X43A+nyTPTji38wo10vu6GiN8LqNY8fsV+mol8B8SM2K+RPLy3dndU6pjmvelF8\n" - "0iWOl3TPHsV7S3ZDgQcfBhS4blgS4ZDiN2/SG+xoxVji5jDgal4sY3jsBwIVAJ9W\n" - "jEhkL/6NqnptltsEXRbvCKVxAoGAYgZ+5Fx2CLdGGl3Xl9QqIfsfMcnS9Po52CfR\n" - "m/wnXacKpxr8U8EvQ8I3yIV/PUyrXYEy+x1eHlQRFiDGgFrZjJtD8N1roPTD8oqc\n" - "OdIcew/v+iiTj9KhIuvc4IqLrSgOz+8Jhek2vYt6UNV79yUNbGARxO9wkM/WG+u7\n" - "jsY+OpcCgYAPiodX8tHC3KzfS4sPi7op9+ED5FX6spgH1v0SsYC89bq0UNR/oA5D\n" - "55/JeBFf5eQMLGtqpDXcvVTlYDaaMdGKWW5rHLq9LrrrfIfv2sjdoeukg+aLrfr6\n" - "jlvXN8gyPpbCPvRD2n2RAg+3vPjvj/dBAF6W3w8IltzqsukGgq/SLwIUS5/r/2ya\n" - "AoNBXjeBjgCGMei2m8E=\n" "-----END DSA PRIVATE KEY-----\n"; - -const gnutls_datum_t cert_dat[] = { - {(void *) pem1_cert, sizeof(pem1_cert)} - , - {(void *) pem2_cert, sizeof(pem2_cert)} -}; - -const gnutls_datum_t key_dat[] = { - {(void *) pem1_key, sizeof(pem1_key)} - , - {(void *) pem2_key, sizeof(pem2_key)} -}; +#define tests common_key_tests +#define testfail(fmt, ...) \ + fail("%s: "fmt, tests[i].name, ##__VA_ARGS__) void doit(void) { - gnutls_x509_privkey_t key; gnutls_x509_crt_t crt; - gnutls_pubkey_t pubkey; - gnutls_privkey_t privkey; + gnutls_x509_privkey_t privkey; gnutls_sign_algorithm_t sign_algo; + char signature_data[512]; + size_t signature_size; gnutls_datum_t signature; - gnutls_datum_t signature2; int ret; size_t i; @@ -164,152 +84,72 @@ void doit(void) if (debug) gnutls_global_set_log_level(6); - for (i = 0; i < sizeof(key_dat) / sizeof(key_dat[0]); i++) { - if (debug) - success("loop %d\n", (int) i); - - ret = gnutls_x509_privkey_init(&key); - if (ret < 0) - fail("gnutls_x509_privkey_init\n"); - - ret = - gnutls_x509_privkey_import(key, &key_dat[i], - GNUTLS_X509_FMT_PEM); - if (ret < 0) - fail("gnutls_x509_privkey_import\n"); - - ret = gnutls_pubkey_init(&pubkey); - if (ret < 0) - fail("gnutls_privkey_init\n"); + for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) { + if (tests[i].pk == GNUTLS_PK_DSA || tests[i].pk == GNUTLS_PK_EDDSA_ED25519) + continue; - ret = gnutls_privkey_init(&privkey); - if (ret < 0) - fail("gnutls_pubkey_init\n"); + success("testing: %s - %s\n", tests[i].name, gnutls_sign_algorithm_get_name(tests[i].sigalgo)); - ret = gnutls_privkey_import_x509(privkey, key, 0); + ret = gnutls_x509_privkey_init(&privkey); if (ret < 0) - fail("gnutls_privkey_import_x509\n"); + testfail("gnutls_pubkey_init\n"); - ret = gnutls_privkey_sign_hash(privkey, GNUTLS_DIG_SHA1, 0, - &hash_data, &signature2); + ret = gnutls_x509_privkey_import(privkey, &tests[i].key, GNUTLS_X509_FMT_PEM); if (ret < 0) - fail("gnutls_privkey_sign_hash\n"); + testfail("gnutls_privkey_import_x509\n"); - ret = gnutls_privkey_sign_data(privkey, GNUTLS_DIG_SHA1, 0, - &raw_data, &signature); + signature_size = sizeof(signature_data); + ret = gnutls_x509_privkey_sign_data(privkey, tests[i].digest, tests[i].sign_flags, + &raw_data, signature_data, &signature_size); if (ret < 0) - fail("gnutls_x509_privkey_sign_hash\n"); + testfail("gnutls_x509_privkey_sign_data\n"); ret = gnutls_x509_crt_init(&crt); if (ret < 0) - fail("gnutls_x509_crt_init\n"); + testfail("gnutls_x509_crt_init\n"); ret = - gnutls_x509_crt_import(crt, &cert_dat[i], + gnutls_x509_crt_import(crt, &tests[i].cert, GNUTLS_X509_FMT_PEM); if (ret < 0) - fail("gnutls_x509_crt_import\n"); + testfail("gnutls_x509_crt_import\n"); - ret = gnutls_pubkey_import_x509(pubkey, crt, 0); - if (ret < 0) - fail("gnutls_x509_pubkey_import\n"); - - ret = - gnutls_x509_crt_get_signature_algorithm(crt); - if (ret != GNUTLS_SIGN_RSA_SHA1) - fail("gnutls_crt_get_signature_algorithm\n"); + signature.data = (unsigned char*)signature_data; + signature.size = signature_size; ret = - gnutls_pubkey_verify_hash2(pubkey, GNUTLS_SIGN_RSA_SHA1, 0, &hash_data, + gnutls_x509_crt_verify_data2(crt, tests[i].sigalgo, 0, &raw_data, &signature); if (ret < 0) - fail("gnutls_x509_pubkey_verify_hash2\n"); - - ret = - gnutls_pubkey_verify_hash2(pubkey, GNUTLS_SIGN_RSA_SHA1, 0, &hash_data, - &signature2); - if (ret < 0) - fail("gnutls_x509_pubkey_verify_hash-1 (hashed data)\n"); + testfail("gnutls_x509_crt_verify_data2\n"); /* should fail */ ret = - gnutls_pubkey_verify_hash2(pubkey, GNUTLS_SIGN_RSA_SHA1, 0, - &invalid_hash_data, - &signature2); + gnutls_x509_crt_verify_data2(crt, tests[i].sigalgo, 0, + &invalid_raw_data, + &signature); if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) - fail("gnutls_x509_pubkey_verify_hash-2 (hashed data)\n"); + testfail("gnutls_x509_crt_verify_data2-2 (hashed data)\n"); sign_algo = - gnutls_pk_to_sign(gnutls_pubkey_get_pk_algorithm - (pubkey, NULL), GNUTLS_DIG_SHA1); - + gnutls_pk_to_sign(gnutls_x509_crt_get_pk_algorithm + (crt, NULL), tests[i].digest); ret = - gnutls_pubkey_verify_hash2(pubkey, sign_algo, 0, - &hash_data, &signature2); + gnutls_x509_crt_verify_data2(crt, sign_algo, 0, + &raw_data, &signature); if (ret < 0) - fail("gnutls_x509_pubkey_verify_hash2-1 (hashed data)\n"); + testfail("gnutls_x509_crt_verify_data2-1 (hashed data)\n"); /* should fail */ ret = - gnutls_pubkey_verify_hash2(pubkey, sign_algo, 0, - &invalid_hash_data, - &signature2); + gnutls_x509_crt_verify_data2(crt, sign_algo, 0, + &invalid_raw_data, + &signature); if (ret != GNUTLS_E_PK_SIG_VERIFY_FAILED) - fail("gnutls_x509_pubkey_verify_hash2-2 (hashed data)\n"); - - /* test the raw interface */ - gnutls_free(signature.data); - signature.data = NULL; - - if (gnutls_pubkey_get_pk_algorithm(pubkey, NULL) == - GNUTLS_PK_RSA) { - ret = - gnutls_privkey_sign_hash(privkey, - GNUTLS_DIG_SHA1, - GNUTLS_PRIVKEY_SIGN_FLAG_TLS1_RSA, - &hash_data, - &signature); - if (ret < 0) - fail("gnutls_privkey_sign_hash: %s\n", - gnutls_strerror(ret)); - - sign_algo = - gnutls_pk_to_sign - (gnutls_pubkey_get_pk_algorithm(pubkey, NULL), - GNUTLS_DIG_SHA1); - - ret = - gnutls_pubkey_verify_hash2(pubkey, sign_algo, - GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, - &hash_data, - &signature); - if (ret < 0) - fail("gnutls_pubkey_verify_hash-3 (raw hashed data)\n"); - - gnutls_free(signature.data); - /* test the legacy API */ - ret = - gnutls_privkey_sign_raw_data(privkey, 0, - &hash_data, - &signature); - if (ret < 0) - fail("gnutls_privkey_sign_raw_data: %s\n", - gnutls_strerror(ret)); + testfail("gnutls_x509_crt_verify_data2-2 (hashed data)\n"); - ret = - gnutls_pubkey_verify_hash2(pubkey, sign_algo, - GNUTLS_PUBKEY_VERIFY_FLAG_TLS1_RSA, - &hash_data, - &signature); - if (ret < 0) - fail("gnutls_pubkey_verify_hash-4 (legacy raw hashed data)\n"); - } - gnutls_free(signature.data); - gnutls_free(signature2.data); - gnutls_x509_privkey_deinit(key); gnutls_x509_crt_deinit(crt); - gnutls_privkey_deinit(privkey); - gnutls_pubkey_deinit(pubkey); + gnutls_x509_privkey_deinit(privkey); } gnutls_global_deinit(); diff --git a/win32/.gitignore b/win32/.gitignore deleted file mode 100644 index 692ff23589..0000000000 --- a/win32/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -*.tar.* -*.zip -*.sig -*.DevPak -gnutls-* -nettle-* -gmp-* -p11-kit-* -devcpp -win32 diff --git a/win32/devcpp.tar b/win32/devcpp.tar deleted file mode 100644 index 02b3c89e64..0000000000 Binary files a/win32/devcpp.tar and /dev/null differ